diff --git a/Assets/Quiz/Audio/SFX/NoPoints/WrongAnswer.ogg b/Assets/Quiz/Audio/SFX/NoPoints/WrongAnswer.ogg new file mode 100644 index 0000000..23d8570 Binary files /dev/null and b/Assets/Quiz/Audio/SFX/NoPoints/WrongAnswer.ogg differ diff --git a/Assets/Quiz/Audio/SFX/NoPoints/WrongAnswer.ogg.meta b/Assets/Quiz/Audio/SFX/NoPoints/WrongAnswer.ogg.meta new file mode 100644 index 0000000..95fcf90 --- /dev/null +++ b/Assets/Quiz/Audio/SFX/NoPoints/WrongAnswer.ogg.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 0c921fa1348e428408ff19ea6f5b3a2a +AudioImporter: + externalObjects: {} + serializedVersion: 7 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/LMGroup_DowncountPlayerDesk.asset b/Assets/Quiz/LMGroup_DowncountPlayerDesk.asset new file mode 100644 index 0000000..f30bb6d --- /dev/null +++ b/Assets/Quiz/LMGroup_DowncountPlayerDesk.asset @@ -0,0 +1,46 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec0b4dd729a12d046982652f834580a2, type: 3} + m_Name: LMGroup_DowncountPlayerDesk + m_EditorClassIdentifier: + resolution: 512 + bitmask: 1 + id: 0 + sortingID: 0 + isImplicit: 0 + area: 0 + totalVertexCount: 0 + vertexCounter: 0 + sceneLodLevel: -1 + autoResolution: 0 + sceneName: + tag: -1 + containsTerrains: 0 + probes: 0 + mode: 1 + renderMode: 1000 + renderDirMode: 1000 + atlasPacker: 1000 + holeFilling: 0 + computeSSS: 0 + sssSamples: 16 + sssDensity: 10 + sssColor: {r: 1, g: 1, b: 1, a: 1} + sssScale: 1 + fakeShadowBias: 0 + transparentSelfShadow: 0 + flipNormal: 0 + parentName: + overridePath: + fixPos3D: 0 + voxelSize: {x: 1, y: 1, z: 1} + passedFilter: 7 diff --git a/Assets/Quiz/LMGroup_DowncountPlayerDesk.asset.meta b/Assets/Quiz/LMGroup_DowncountPlayerDesk.asset.meta new file mode 100644 index 0000000..8f9c645 --- /dev/null +++ b/Assets/Quiz/LMGroup_DowncountPlayerDesk.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a731aa552c5919340a6228c937525770 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/Camera.mat b/Assets/Quiz/Materials/Camera.mat new file mode 100644 index 0000000..d58a717 --- /dev/null +++ b/Assets/Quiz/Materials/Camera.mat @@ -0,0 +1,3813 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Camera + m_Shader: {fileID: 4800000, guid: 39066899ca76afc4fa77309ab646e2fe, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: + - BSSBLOOMFOGTYPE_HEIGHT + - FINALPASS + - MOCHIE_PBR + - VIGNETTE_MASKED + - _LIGHTINGMODE_REALISTIC + - _RIM2STYLE_POIYOMI + - _RIMSTYLE_POIYOMI + - _STOCHASTICMODE_DELIOT_HEITZ + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + AllLockedGUIDS: 670c93b6400cecc4d9427ca653ff6a79 + OriginalKeywords: BSSBLOOMFOGTYPE_HEIGHT FINALPASS MOCHIE_PBR VIGNETTE_MASKED + _LIGHTINGMODE_REALISTIC _RIM2STYLE_POIYOMI _RIMSTYLE_POIYOMI _STOCHASTICMODE_DELIOT_HEITZ + OriginalShader: .poiyomi/Poiyomi Pro World + OriginalShaderGUID: a11582d439d5e494986c4b421999c03a + RenderType: Opaque + _stripped_tex__ClothDFG: 76d65cbce584df7449699fb8406f60ea + _stripped_tex__SkinLUT: d13510bb2be49aa40a66a0101efb6a36 + _stripped_tex__ToonRamp: 61bd594533da4fc42bd46ef93ba5a4f6 + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _AnisotropyMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 2800000, guid: 213f64ff18bd7524a8018e8e1949afef, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightDataSDFMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingAOMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingDetailShadowMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MochieMetallicMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MochieReflCube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _UzumoreMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - DSGI: 0 + - GeometryShader_Enabled: 1 + - Instancing: 0 + - LightmapFlags: 0 + - Tessellation_Enabled: 1 + - VertexBasicsMaskUV: 0 + - _1st2nd_Shades_Feather: 0.0001 + - _1stShadeMapMask_Inverse: 0 + - _1st_ShadeMapUV: 0 + - _2ndShadeMapMask_Inverse: 0 + - _2nd_ShadeMapUV: 0 + - _ALDecalBandClipMax: 1 + - _ALDecalBandClipMin: 0 + - _ALDecalBandStep: 0 + - _ALDecalBaseBoost: 5 + - _ALDecalBlendAlpha: 1 + - _ALDecalBlendType: 0 + - _ALDecalColorMaskUV: 0 + - _ALDecalControlsAlpha: 0 + - _ALDecalGlobalMask: 0 + - _ALDecalGlobalMaskBlendType: 2 + - _ALDecalHighEmission: 0 + - _ALDecalLineWidth: 1 + - _ALDecalLowEmission: 0 + - _ALDecalMidEmission: 0 + - _ALDecalShapeClip: 0 + - _ALDecalShapeClipBandWidth: 0.5 + - _ALDecalShapeClipVolumeWidth: 0.5 + - _ALDecalTrebleBoost: 1 + - _ALDecalType: 0 + - _ALDecalUV: 0 + - _ALDecalUVMode: 0 + - _ALDecalVolume: 0.5 + - _ALDecalVolumeClipMax: 1 + - _ALDecalVolumeClipMin: 0 + - _ALDecalVolumeColorHighThemeIndex: 0 + - _ALDecalVolumeColorLowThemeIndex: 0 + - _ALDecalVolumeColorMidThemeIndex: 0 + - _ALDecalVolumeColorSource: 1 + - _ALDecalVolumeStep: 0 + - _ALHighEmission: 0 + - _ALLowEmission: 0 + - _ALMidEmission: 0 + - _ALUVRotation: 0 + - _ALUVRotationSpeed: 0 + - _ALVolumeColorBlendAlpha: 1 + - _ALVolumeColorBlendType: 0 + - _ALVolumeColorDirection: 0 + - _ALVolumeColorHighThemeIndex: 0 + - _ALVolumeColorLowThemeIndex: 0 + - _ALVolumeColorMidThemeIndex: 0 + - _ALVolumeColorUV: 0 + - _AddBlendOp: 4 + - _AddBlendOpAlpha: 4 + - _AddDstBlend: 1 + - _AddDstBlendAlpha: 1 + - _AddSrcBlend: 1 + - _AddSrcBlendAlpha: 0 + - _Add_Antipodean_Rim2Light: 0 + - _Add_Antipodean_RimLight: 0 + - _AlphaAlphaAdd: 0 + - _AlphaAngular: 0 + - _AlphaAngularGlobalMask: 0 + - _AlphaAudioLinkAddBand: 0 + - _AlphaAudioLinkEnabled: 0 + - _AlphaBoostFA: 10 + - _AlphaColorThemeIndex: 0 + - _AlphaDistanceFade: 0 + - _AlphaDistanceFadeGlobalMask: 0 + - _AlphaDistanceFadeMax: 0 + - _AlphaDistanceFadeMaxAlpha: 1 + - _AlphaDistanceFadeMin: 0 + - _AlphaDistanceFadeMinAlpha: 0 + - _AlphaDistanceFadeType: 1 + - _AlphaDitherBias: 0 + - _AlphaDitherGradient: 0.1 + - _AlphaDithering: 0 + - _AlphaForceOpaque: 1 + - _AlphaFresnel: 0 + - _AlphaFresnelAlpha: 0 + - _AlphaFresnelGlobalMask: 0 + - _AlphaFresnelInvert: 0 + - _AlphaFresnelSharpness: 0.5 + - _AlphaFresnelWidth: 0.5 + - _AlphaGlobalMask: 0 + - _AlphaGlobalMaskBlendType: 2 + - _AlphaMaskBlendStrength: 1 + - _AlphaMaskInvert: 0 + - _AlphaMaskUV: 0 + - _AlphaMaskValue: 0 + - _AlphaMipScale: 0.25 + - _AlphaMod: 0 + - _AlphaPremultiply: 0 + - _AlphaSharpenedA2C: 0 + - _AlphaTextureStochastic: 0 + - _AlphaTextureUV: 0 + - _AlphaToCoverage: 0 + - _AngleCompareTo: 0 + - _AngleMinAlpha: 0 + - _AngleType: 0 + - _Aniso0Blur: 0 + - _Aniso0Edge: 0.5 + - _Aniso0Offset: 0 + - _Aniso0OffsetMapStrength: 0 + - _Aniso0Power: 0 + - _Aniso0Strength: 1 + - _Aniso0SwitchDirection: 0 + - _Aniso0TintIndex: 0 + - _Aniso0ToonMode: 0 + - _Aniso1Blur: 0 + - _Aniso1Edge: 0.5 + - _Aniso1Offset: 0 + - _Aniso1OffsetMapStrength: 0 + - _Aniso1Power: 0.1 + - _Aniso1Strength: 1 + - _Aniso1SwitchDirection: 0 + - _Aniso1TintIndex: 0 + - _Aniso1ToonMode: 0 + - _AnisoAdd: 1 + - _AnisoColorMapUV: 0 + - _AnisoGlobalMask: 0 + - _AnisoGlobalMaskBlendType: 2 + - _AnisoHideInShadow: 1 + - _AnisoReplace: 0 + - _AnisoUseBaseColor: 0 + - _AnisoUseLightColor: 1 + - _Anisotropy: 0 + - _AnisotropyMapChannel: 0 + - _AnisotropyMapUV: 0 + - _Ap_Rim2Light_FeatherOff: 0 + - _Ap_Rim2Light_Power: 0.1 + - _Ap_RimLight_FeatherOff: 0 + - _Ap_RimLight_Power: 0.1 + - _ApplyReflection: 0 + - _ApplySpecular: 1 + - _ApplySpecularFA: 1 + - _AudioLinkAnimToggle: 1 + - _AudioLinkBandOverridesEnabled: 0 + - _AudioLinkDecal0AlphaBand: 0 + - _AudioLinkDecal0ChannelSeparationBand: 0 + - _AudioLinkDecal0EmissionBand: 0 + - _AudioLinkDecal0RotationBand: 0 + - _AudioLinkDecal0ScaleBand: 0 + - _AudioLinkDecal0SideBand: 0 + - _AudioLinkDecal1AlphaBand: 0 + - _AudioLinkDecal1ChannelSeparationBand: 0 + - _AudioLinkDecal1EmissionBand: 0 + - _AudioLinkDecal1RotationBand: 0 + - _AudioLinkDecal1ScaleBand: 0 + - _AudioLinkDecal1SideBand: 0 + - _AudioLinkDecal2AlphaBand: 0 + - _AudioLinkDecal2ChannelSeparationBand: 0 + - _AudioLinkDecal2EmissionBand: 0 + - _AudioLinkDecal2RotationBand: 0 + - _AudioLinkDecal2ScaleBand: 0 + - _AudioLinkDecal2SideBand: 0 + - _AudioLinkDecal3AlphaBand: 0 + - _AudioLinkDecal3ChannelSeparationBand: 0 + - _AudioLinkDecal3EmissionBand: 0 + - _AudioLinkDecal3RotationBand: 0 + - _AudioLinkDecal3ScaleBand: 0 + - _AudioLinkDecal3SideBand: 0 + - _AudioLinkDecalCC0: 0 + - _AudioLinkDecalCC1: 0 + - _AudioLinkDecalCC2: 0 + - _AudioLinkDecalCC3: 0 + - _AudioLinkDissolveAlphaBand: 0 + - _AudioLinkDissolveDetailBand: 0 + - _AudioLinkEmission0CenterOutBand: 0 + - _AudioLinkEmission0CenterOutDuration: 1 + - _AudioLinkEmission0CenterOutSize: 0 + - _AudioLinkEmission1CenterOutBand: 0 + - _AudioLinkEmission1CenterOutDuration: 1 + - _AudioLinkEmission1CenterOutSize: 0 + - _AudioLinkEmission2CenterOutBand: 0 + - _AudioLinkEmission2CenterOutDuration: 1 + - _AudioLinkEmission2CenterOutSize: 0 + - _AudioLinkEmission3CenterOutBand: 0 + - _AudioLinkEmission3CenterOutDuration: 1 + - _AudioLinkEmission3CenterOutSize: 0 + - _AudioLinkFlipbookAlphaBand: 0 + - _AudioLinkFlipbookEmissionBand: 0 + - _AudioLinkFlipbookFrameBand: 0 + - _AudioLinkFlipbookScaleBand: 0 + - _AudioLinkHelp: 0 + - _AudioLinkOutlineColorBand: 0 + - _AudioLinkOutlineEmissionBand: 0 + - _AudioLinkOutlineSizeBand: 0 + - _AudioLinkPathEmissionAddBandA: 0 + - _AudioLinkPathEmissionAddBandB: 0 + - _AudioLinkPathEmissionAddBandG: 0 + - _AudioLinkPathEmissionAddBandR: 0 + - _AudioLinkPathTimeOffsetBandA: 0 + - _AudioLinkPathTimeOffsetBandB: 0 + - _AudioLinkPathTimeOffsetBandG: 0 + - _AudioLinkPathTimeOffsetBandR: 0 + - _AudioLinkPathWidthOffsetBandA: 0 + - _AudioLinkPathWidthOffsetBandB: 0 + - _AudioLinkPathWidthOffsetBandG: 0 + - _AudioLinkPathWidthOffsetBandR: 0 + - _AudioLinkRim2BrightnessBand: 0 + - _AudioLinkRim2EmissionBand: 0 + - _AudioLinkRim2WidthBand: 0 + - _AudioLinkRimBrightnessBand: 0 + - _AudioLinkRimEmissionBand: 0 + - _AudioLinkRimWidthBand: 0 + - _AudioLinkSmoothingBass: 0 + - _AudioLinkSmoothingHighMid: 0 + - _AudioLinkSmoothingLowMid: 0 + - _AudioLinkSmoothingTreble: 0 + - _AudioLinkVoronoiChronoSpeedXBand: 0 + - _AudioLinkVoronoiChronoSpeedXSpeed: 0 + - _AudioLinkVoronoiChronoSpeedXType: 0 + - _AudioLinkVoronoiChronoSpeedYBand: 0 + - _AudioLinkVoronoiChronoSpeedYSpeed: 0 + - _AudioLinkVoronoiChronoSpeedYType: 0 + - _AudioLinkVoronoiChronoSpeedZBand: 0 + - _AudioLinkVoronoiChronoSpeedZSpeed: 0 + - _AudioLinkVoronoiChronoSpeedZType: 0 + - _AudioLinkVoronoiGradientMaxAdd: 0 + - _AudioLinkVoronoiGradientMaxAddBand: 0 + - _AudioLinkVoronoiGradientMinAdd: 0 + - _AudioLinkVoronoiGradientMinAddBand: 0 + - _AudioLinkVoronoiInnerEmissionBand: 0 + - _AudioLinkVoronoiOuterEmissionBand: 0 + - _BRDFTPSDepthEnabled: 0 + - _BRDFTPSReflectionMaskStrength: 1 + - _BRDFTPSSpecularMaskStrength: 1 + - _BSSBloomfog: 0 + - _BSSBloomfogType: 1 + - _BSSEnabled: 0 + - _BSSHelpBox1: 0 + - _BSSHelpBox2: 0 + - _BSSHelpBox3: 0 + - _BSSSpacer1: 0 + - _BSSSpacer2: 0 + - _BSSSpacer3: 0 + - _BackFaceColorThemeIndex: 0 + - _BackFaceDetailIntensity: 1 + - _BackFaceEmissionLimiter: 1 + - _BackFaceEmissionStrength: 0 + - _BackFaceEnabled: 0 + - _BackFaceHueSelectOrShift: 1 + - _BackFaceHueShift: 0 + - _BackFaceHueShiftEnabled: 0 + - _BackFaceHueShiftSpeed: 0 + - _BackFaceMaskChannel: 0 + - _BackFaceMaskUV: 0 + - _BackFaceReplaceAlpha: 0 + - _BackFaceShiftColorSpace: 0 + - _BackFaceTextureUV: 0 + - _BacklightBackfaceMask: 1 + - _BacklightBlur: 0.05 + - _BacklightBorder: 0.35 + - _BacklightColorTexUV: 0 + - _BacklightDirectivity: 5 + - _BacklightEnabled: 0 + - _BacklightMainStrength: 0 + - _BacklightNormalStrength: 1 + - _BacklightReceiveShadow: 1 + - _BacklightViewStrength: 1 + - _BaseColor_Step: 0.5 + - _BaseShade_Feather: 0.0001 + - _BlackLightMasking0GlobalMaskBlendType: 0 + - _BlackLightMasking0GlobalMaskIndex: 0 + - _BlackLightMasking0Key: 1 + - _BlackLightMasking1GlobalMaskBlendType: 0 + - _BlackLightMasking1GlobalMaskIndex: 0 + - _BlackLightMasking1Key: 2 + - _BlackLightMasking2GlobalMaskBlendType: 0 + - _BlackLightMasking2GlobalMaskIndex: 0 + - _BlackLightMasking2Key: 3 + - _BlackLightMasking3GlobalMaskBlendType: 0 + - _BlackLightMasking3GlobalMaskIndex: 0 + - _BlackLightMasking3Key: 4 + - _BlackLightMaskingEnabled: 0 + - _BlendOp: 0 + - _BlendOpAlpha: 0 + - _BlendshapeBadScaleFix: 1 + - _BlendshapePower: 1 + - _BlueAlphaAdd: 0 + - _BlueColorThemeIndex: 0 + - _BlueTextureStochastic: 0 + - _BlueTextureUV: 0 + - _BulgeOffset: 0 + - _BulgePower: 0 + - _BumpMapStochastic: 0 + - _BumpMapUV: 0 + - _BumpScale: 1 + - _CCIgnoreCastedShadows: 0 + - _CameraAngleMax: 90 + - _CameraAngleMin: 45 + - _CenterOutDissolveInvert: 0 + - _CenterOutDissolveMode: 1 + - _CenterOutDissolveNormals: 0 + - _CenterOutDissolvePower: 1 + - _ClearCoatBRDF: 0 + - _ClearCoatForceFallback: 0 + - _ClearCoatGSAAEnabled: 1 + - _ClearCoatGSAAThreshold: 0.1 + - _ClearCoatGSAAVariance: 0.15 + - _ClearCoatGlobalMask: 0 + - _ClearCoatGlobalMaskBlendType: 2 + - _ClearCoatLitFallback: 1 + - _ClearCoatMapsClearCoatMaskChannel: 0 + - _ClearCoatMapsReflectionMaskChannel: 2 + - _ClearCoatMapsRoughnessChannel: 1 + - _ClearCoatMapsSpecularMaskChannel: 3 + - _ClearCoatMapsStochastic: 0 + - _ClearCoatMapsUV: 0 + - _ClearCoatMaskInvert: 0 + - _ClearCoatNormalSelect: 0 + - _ClearCoatReflectionMaskInvert: 0 + - _ClearCoatReflectionStrength: 1 + - _ClearCoatReflectionStrengthGlobalMask: 0 + - _ClearCoatReflectionStrengthGlobalMaskBlendType: 2 + - _ClearCoatReflectionTintThemeIndex: 0 + - _ClearCoatSmoothness: 1 + - _ClearCoatSmoothnessGlobalMask: 0 + - _ClearCoatSmoothnessGlobalMaskBlendType: 2 + - _ClearCoatSmoothnessMapInvert: 0 + - _ClearCoatSpecularMaskInvert: 0 + - _ClearCoatSpecularStrength: 1 + - _ClearCoatSpecularStrengthGlobalMask: 0 + - _ClearCoatSpecularStrengthGlobalMaskBlendType: 2 + - _ClearCoatSpecularTintThemeIndex: 0 + - _ClearCoatStrength: 1 + - _ClearCoatTPSDepthMaskEnabled: 0 + - _ClearCoatTPSMaskStrength: 1 + - _ClearcoatExposureOcclusion: 0 + - _ClearcoatFresnelStrength: 0.5 + - _ClothLerp: 0 + - _ClothMetallicSmoothnessMapInvert: 0 + - _ClothMetallicSmoothnessMapUV: 0 + - _ClothReflectance: 0.5 + - _ClothSmoothness: 0.5 + - _ColorGradingToggle: 0 + - _ColorMask: 15 + - _ColorThemeIndex: 0 + - _ContinuousDissolve: 0 + - _CubeMapBlendAmount: 1 + - _CubeMapBrightness: 0 + - _CubeMapColorThemeIndex: 0 + - _CubeMapContrast: 1 + - _CubeMapEmissionStrength: 0 + - _CubeMapEnabled: 0 + - _CubeMapHueSelectOrShift: 1 + - _CubeMapHueShift: 0 + - _CubeMapHueShiftColorSpace: 0 + - _CubeMapHueShiftEnabled: 0 + - _CubeMapHueShiftSpeed: 0 + - _CubeMapIntensity: 1 + - _CubeMapLightMask: 0 + - _CubeMapMaskChannel: 0 + - _CubeMapMaskGlobalMask: 0 + - _CubeMapMaskGlobalMaskBlendType: 2 + - _CubeMapMaskInvert: 0 + - _CubeMapMaskUV: 0 + - _CubeMapNormal: 1 + - _CubeMapSaturation: 1 + - _CubeMapSmoothness: 1 + - _CubeMapUVMode: 1 + - _CubeMapWorldNormalsStrength: 1 + - _CubemapBlendType: 0 + - _Cull: 2 + - _CurvFix: 1 + - _Curvature: 0 + - _CurvatureU: 0 + - _CurvatureV: 0 + - _CustomColors: 0 + - _Cutoff: 0.5 + - _Decal0ApplyGlobalMaskBlendType: 0 + - _Decal0ApplyGlobalMaskIndex: 0 + - _Decal0ChannelSeparation: 0 + - _Decal0ChannelSeparationAngleStrength: 0 + - _Decal0ChannelSeparationEnable: 0 + - _Decal0ChannelSeparationHue: 0 + - _Decal0ChannelSeparationPremultiply: 0 + - _Decal0ChannelSeparationVertical: 0 + - _Decal0Depth: 0 + - _Decal0FaceMask: 0 + - _Decal0GlobalMask: 0 + - _Decal0GlobalMaskBlendType: 2 + - _Decal0HueAngleStrength: 0 + - _Decal0MaskChannel: 0 + - _Decal0OnlyVideo: 0 + - _Decal0OverrideAlphaMode: 0 + - _Decal0TPSMaskStrength: 1 + - _Decal0UseDecalAlpha: 0 + - _Decal0VideoAspectFix: 0 + - _Decal0VideoEmissionStrength: 0 + - _Decal0VideoEnabled: 0 + - _Decal0VideoFitToScale: 1 + - _Decal1ApplyGlobalMaskBlendType: 0 + - _Decal1ApplyGlobalMaskIndex: 0 + - _Decal1ChannelSeparation: 0 + - _Decal1ChannelSeparationAngleStrength: 0 + - _Decal1ChannelSeparationEnable: 0 + - _Decal1ChannelSeparationHue: 0 + - _Decal1ChannelSeparationPremultiply: 0 + - _Decal1ChannelSeparationVertical: 0 + - _Decal1Depth: 0 + - _Decal1FaceMask: 0 + - _Decal1GlobalMask: 0 + - _Decal1GlobalMaskBlendType: 2 + - _Decal1HueAngleStrength: 0 + - _Decal1MaskChannel: 1 + - _Decal1OnlyVideo: 0 + - _Decal1OverrideAlphaMode: 0 + - _Decal1TPSMaskStrength: 1 + - _Decal1UseDecalAlpha: 0 + - _Decal1VideoAspectFix: 0 + - _Decal1VideoEmissionStrength: 0 + - _Decal1VideoEnabled: 0 + - _Decal1VideoFitToScale: 1 + - _Decal2ApplyGlobalMaskBlendType: 0 + - _Decal2ApplyGlobalMaskIndex: 0 + - _Decal2ChannelSeparation: 0 + - _Decal2ChannelSeparationAngleStrength: 0 + - _Decal2ChannelSeparationEnable: 0 + - _Decal2ChannelSeparationHue: 0 + - _Decal2ChannelSeparationPremultiply: 0 + - _Decal2ChannelSeparationVertical: 0 + - _Decal2Depth: 0 + - _Decal2FaceMask: 0 + - _Decal2GlobalMask: 0 + - _Decal2GlobalMaskBlendType: 2 + - _Decal2HueAngleStrength: 0 + - _Decal2MaskChannel: 2 + - _Decal2OnlyVideo: 0 + - _Decal2OverrideAlphaMode: 0 + - _Decal2TPSMaskStrength: 1 + - _Decal2UseDecalAlpha: 0 + - _Decal2VideoAspectFix: 0 + - _Decal2VideoEmissionStrength: 0 + - _Decal2VideoEnabled: 0 + - _Decal2VideoFitToScale: 1 + - _Decal3ApplyGlobalMaskBlendType: 0 + - _Decal3ApplyGlobalMaskIndex: 0 + - _Decal3ChannelSeparation: 0 + - _Decal3ChannelSeparationAngleStrength: 0 + - _Decal3ChannelSeparationEnable: 0 + - _Decal3ChannelSeparationHue: 0 + - _Decal3ChannelSeparationPremultiply: 0 + - _Decal3ChannelSeparationVertical: 0 + - _Decal3Depth: 0 + - _Decal3FaceMask: 0 + - _Decal3GlobalMask: 0 + - _Decal3GlobalMaskBlendType: 2 + - _Decal3HueAngleStrength: 0 + - _Decal3MaskChannel: 3 + - _Decal3OnlyVideo: 0 + - _Decal3OverrideAlphaMode: 0 + - _Decal3TPSMaskStrength: 1 + - _Decal3UseDecalAlpha: 0 + - _Decal3VideoAspectFix: 0 + - _Decal3VideoEmissionStrength: 0 + - _Decal3VideoEnabled: 0 + - _Decal3VideoFitToScale: 1 + - _DecalBlendAlpha: 1 + - _DecalBlendAlpha1: 1 + - _DecalBlendAlpha2: 1 + - _DecalBlendAlpha3: 1 + - _DecalBlendType: 0 + - _DecalBlendType1: 0 + - _DecalBlendType2: 0 + - _DecalBlendType3: 0 + - _DecalColor1ThemeIndex: 0 + - _DecalColor2ThemeIndex: 0 + - _DecalColor3ThemeIndex: 0 + - _DecalColorThemeIndex: 0 + - _DecalEmissionStrength: 0 + - _DecalEmissionStrength1: 0 + - _DecalEmissionStrength2: 0 + - _DecalEmissionStrength3: 0 + - _DecalEnabled: 0 + - _DecalEnabled1: 0 + - _DecalEnabled2: 0 + - _DecalEnabled3: 0 + - _DecalHueShift: 0 + - _DecalHueShift1: 0 + - _DecalHueShift2: 0 + - _DecalHueShift3: 0 + - _DecalHueShiftColorSpace: 0 + - _DecalHueShiftColorSpace1: 0 + - _DecalHueShiftColorSpace2: 0 + - _DecalHueShiftColorSpace3: 0 + - _DecalHueShiftEnabled: 0 + - _DecalHueShiftEnabled1: 0 + - _DecalHueShiftEnabled2: 0 + - _DecalHueShiftEnabled3: 0 + - _DecalHueShiftSelectOrShift: 1 + - _DecalHueShiftSelectOrShift1: 1 + - _DecalHueShiftSelectOrShift2: 1 + - _DecalHueShiftSelectOrShift3: 1 + - _DecalHueShiftSpeed: 0 + - _DecalHueShiftSpeed1: 0 + - _DecalHueShiftSpeed2: 0 + - _DecalHueShiftSpeed3: 0 + - _DecalMaskUV: 0 + - _DecalMirroredUVMode: 0 + - _DecalMirroredUVMode1: 0 + - _DecalMirroredUVMode2: 0 + - _DecalMirroredUVMode3: 0 + - _DecalOverrideAlpha: 0 + - _DecalOverrideAlpha1: 0 + - _DecalOverrideAlpha2: 0 + - _DecalOverrideAlpha3: 0 + - _DecalRotation: 0 + - _DecalRotation1: 0 + - _DecalRotation2: 0 + - _DecalRotation3: 0 + - _DecalRotationCTALBand0: 0 + - _DecalRotationCTALBand1: 0 + - _DecalRotationCTALBand2: 0 + - _DecalRotationCTALBand3: 0 + - _DecalRotationCTALSpeed0: 0 + - _DecalRotationCTALSpeed1: 0 + - _DecalRotationCTALSpeed2: 0 + - _DecalRotationCTALSpeed3: 0 + - _DecalRotationCTALType0: 0 + - _DecalRotationCTALType1: 0 + - _DecalRotationCTALType2: 0 + - _DecalRotationCTALType3: 0 + - _DecalRotationSpeed: 0 + - _DecalRotationSpeed1: 0 + - _DecalRotationSpeed2: 0 + - _DecalRotationSpeed3: 0 + - _DecalSymmetryMode: 0 + - _DecalSymmetryMode1: 0 + - _DecalSymmetryMode2: 0 + - _DecalSymmetryMode3: 0 + - _DecalTPSDepthMaskEnabled: 0 + - _DecalTexture1UV: 0 + - _DecalTexture2UV: 0 + - _DecalTexture3UV: 0 + - _DecalTextureUV: 0 + - _DecalTiled: 0 + - _DecalTiled1: 0 + - _DecalTiled2: 0 + - _DecalTiled3: 0 + - _DepthAlphaMaxDepth: 1 + - _DepthAlphaMaxValue: 0 + - _DepthAlphaMinDepth: 0 + - _DepthAlphaMinValue: 1 + - _DepthAlphaToggle: 0 + - _DepthBulgeFadeLength: 0.02 + - _DepthBulgeHeight: 0.02 + - _DepthBulgeMaskChannel: 0 + - _DepthBulgeMaskUV: 0 + - _DepthBulgeWarning: 0 + - _DepthColorBlendMode: 0 + - _DepthColorMaxDepth: 1 + - _DepthColorMaxValue: 0 + - _DepthColorMinDepth: 0 + - _DepthColorMinValue: 1 + - _DepthColorThemeIndex: 0 + - _DepthColorToggle: 0 + - _DepthEmissionStrength: 0 + - _DepthFXWarning: 0 + - _DepthMaskChannel: 0 + - _DepthMaskGlobalMask: 0 + - _DepthMaskGlobalMaskBlendType: 2 + - _DepthMaskUV: 0 + - _DepthRimAdd: 0 + - _DepthRimAdditiveLighting: 0 + - _DepthRimBrightness: 1 + - _DepthRimColorThemeIndex: 0 + - _DepthRimEmission: 0 + - _DepthRimHideInShadow: 0 + - _DepthRimMixBaseColor: 0 + - _DepthRimMixLightColor: 0 + - _DepthRimMultiply: 0 + - _DepthRimNormalToUse: 1 + - _DepthRimReplace: 0 + - _DepthRimSharpness: 0.2 + - _DepthRimType: 0 + - _DepthRimWidth: 0.2 + - _DepthTextureUV: 0 + - _DetailBrightness: 1 + - _DetailEnabled: 1 + - _DetailMaskStochastic: 0 + - _DetailMaskUV: 0 + - _DetailNormalGlobalMask: 0 + - _DetailNormalGlobalMaskBlendType: 2 + - _DetailNormalMapScale: 0.38 + - _DetailNormalMapStochastic: 0 + - _DetailNormalMapUV: 0 + - _DetailTexGlobalMask: 0 + - _DetailTexGlobalMaskBlendType: 2 + - _DetailTexIntensity: 1 + - _DetailTexStochastic: 0 + - _DetailTexUV: 0 + - _DetailTintThemeIndex: 0 + - _DisableDirectionalInAdd: 1 + - _DissolveAlpha: 0 + - _DissolveAlpha0: 0 + - _DissolveAlpha1: 0 + - _DissolveAlpha2: 0 + - _DissolveAlpha3: 0 + - _DissolveAlpha4: 0 + - _DissolveAlpha5: 0 + - _DissolveAlpha6: 0 + - _DissolveAlpha7: 0 + - _DissolveAlpha8: 0 + - _DissolveAlpha9: 0 + - _DissolveApplyGlobalMaskBlendType: 0 + - _DissolveApplyGlobalMaskIndex: 0 + - _DissolveDetailEdgeSmoothing: 0 + - _DissolveDetailNoiseUV: 0 + - _DissolveDetailStrength: 0.1 + - _DissolveEdgeColorThemeIndex: 0 + - _DissolveEdgeEmission: 0 + - _DissolveEdgeHardness: 0.5 + - _DissolveEdgeHueSelectOrShift: 1 + - _DissolveEdgeHueShift: 0 + - _DissolveEdgeHueShiftColorSpace: 0 + - _DissolveEdgeHueShiftEnabled: 0 + - _DissolveEdgeHueShiftSpeed: 0 + - _DissolveEdgeWidth: 0.025 + - _DissolveHueSelectOrShift: 1 + - _DissolveHueShift: 0 + - _DissolveHueShiftColorSpace: 0 + - _DissolveHueShiftEnabled: 0 + - _DissolveHueShiftSpeed: 0 + - _DissolveInverseApplyGlobalMaskBlendType: 0 + - _DissolveInverseApplyGlobalMaskIndex: 0 + - _DissolveInvertDetailNoise: 0 + - _DissolveInvertNoise: 0 + - _DissolveMaskGlobalMask: 0 + - _DissolveMaskGlobalMaskBlendType: 2 + - _DissolveMaskInvert: 0 + - _DissolveMaskUV: 0 + - _DissolveNoiseTextureUV: 0 + - _DissolveP2PClamp: 0 + - _DissolveP2PEdgeLength: 0.1 + - _DissolveP2PWorldLocal: 0 + - _DissolveTextureColorThemeIndex: 0 + - _DissolveToEmissionStrength: 0 + - _DissolveToTextureUV: 0 + - _DissolveType: 1 + - _DissolveUseVertexColors: 0 + - _DistortionFlowTexture1UV: 0 + - _DistortionFlowTextureUV: 0 + - _DistortionMaskChannel: 0 + - _DistortionMaskUV: 0 + - _DistortionStrength: 0.03 + - _DistortionStrength1: 0.01 + - _DistortionStrength1AudioLinkBand: 0 + - _DistortionStrengthAudioLinkBand: 0 + - _DistortionUvToDistort: 0 + - _DstBlend: 0 + - _DstBlendAlpha: 10 + - _EmissionAL0Enabled: 0 + - _EmissionAL0MultipliersBand: 0 + - _EmissionAL0StrengthBand: 0 + - _EmissionAL1Enabled: 0 + - _EmissionAL1MultipliersBand: 0 + - _EmissionAL1StrengthBand: 0 + - _EmissionAL2Enabled: 0 + - _EmissionAL2MultipliersBand: 0 + - _EmissionAL2StrengthBand: 0 + - _EmissionAL3Enabled: 0 + - _EmissionAL3MultipliersBand: 0 + - _EmissionAL3StrengthBand: 0 + - _EmissionBaseColorAsMap: 0 + - _EmissionBaseColorAsMap1: 0 + - _EmissionBaseColorAsMap2: 0 + - _EmissionBaseColorAsMap3: 0 + - _EmissionBlinkingEnabled: 0 + - _EmissionBlinkingEnabled1: 0 + - _EmissionBlinkingEnabled2: 0 + - _EmissionBlinkingEnabled3: 0 + - _EmissionBlinkingOffset: 0 + - _EmissionBlinkingOffset1: 0 + - _EmissionBlinkingOffset2: 0 + - _EmissionBlinkingOffset3: 0 + - _EmissionCenterOutEnabled: 0 + - _EmissionCenterOutEnabled1: 0 + - _EmissionCenterOutEnabled2: 0 + - _EmissionCenterOutEnabled3: 0 + - _EmissionCenterOutSpeed: 5 + - _EmissionCenterOutSpeed1: 5 + - _EmissionCenterOutSpeed2: 5 + - _EmissionCenterOutSpeed3: 5 + - _EmissionColor1ThemeIndex: 0 + - _EmissionColor2ThemeIndex: 0 + - _EmissionColor3ThemeIndex: 0 + - _EmissionColorThemeIndex: 0 + - _EmissionFluorescence: 0 + - _EmissionFluorescence1: 0 + - _EmissionFluorescence2: 0 + - _EmissionFluorescence3: 0 + - _EmissionHueSelectOrShift: 1 + - _EmissionHueSelectOrShift1: 1 + - _EmissionHueSelectOrShift2: 1 + - _EmissionHueSelectOrShift3: 1 + - _EmissionHueShift: 0 + - _EmissionHueShift1: 0 + - _EmissionHueShift2: 0 + - _EmissionHueShift3: 0 + - _EmissionHueShiftColorSpace: 0 + - _EmissionHueShiftColorSpace1: 0 + - _EmissionHueShiftColorSpace2: 0 + - _EmissionHueShiftColorSpace3: 0 + - _EmissionHueShiftEnabled: 0 + - _EmissionHueShiftEnabled1: 0 + - _EmissionHueShiftEnabled2: 0 + - _EmissionHueShiftEnabled3: 0 + - _EmissionHueShiftSpeed: 0 + - _EmissionHueShiftSpeed1: 0 + - _EmissionHueShiftSpeed2: 0 + - _EmissionHueShiftSpeed3: 0 + - _EmissionMap1UV: 0 + - _EmissionMap2UV: 0 + - _EmissionMap3UV: 0 + - _EmissionMapUV: 0 + - _EmissionMask0GlobalMask: 0 + - _EmissionMask0GlobalMaskBlendType: 2 + - _EmissionMask1Channel: 0 + - _EmissionMask1GlobalMask: 0 + - _EmissionMask1GlobalMaskBlendType: 2 + - _EmissionMask1UV: 0 + - _EmissionMask2Channel: 0 + - _EmissionMask2GlobalMask: 0 + - _EmissionMask2GlobalMaskBlendType: 2 + - _EmissionMask2UV: 0 + - _EmissionMask3Channel: 0 + - _EmissionMask3GlobalMask: 0 + - _EmissionMask3GlobalMaskBlendType: 2 + - _EmissionMask3UV: 0 + - _EmissionMaskChannel: 0 + - _EmissionMaskInvert: 0 + - _EmissionMaskInvert1: 0 + - _EmissionMaskInvert2: 0 + - _EmissionMaskInvert3: 0 + - _EmissionMaskUV: 0 + - _EmissionReplace0: 0 + - _EmissionReplace1: 0 + - _EmissionReplace2: 0 + - _EmissionReplace3: 0 + - _EmissionSaturation: 0 + - _EmissionSaturation1: 0 + - _EmissionSaturation2: 0 + - _EmissionSaturation3: 0 + - _EmissionScrollingOffset: 0 + - _EmissionScrollingOffset1: 0 + - _EmissionScrollingOffset2: 0 + - _EmissionScrollingOffset3: 0 + - _EmissionScrollingUseCurve: 0 + - _EmissionScrollingUseCurve1: 0 + - _EmissionScrollingUseCurve2: 0 + - _EmissionScrollingUseCurve3: 0 + - _EmissionScrollingVertexColor: 0 + - _EmissionScrollingVertexColor1: 0 + - _EmissionScrollingVertexColor2: 0 + - _EmissionScrollingVertexColor3: 0 + - _EmissionStrength: 0 + - _EmissionStrength1: 0 + - _EmissionStrength2: 0 + - _EmissionStrength3: 0 + - _EmissiveBlink_Max: 1 + - _EmissiveBlink_Max1: 1 + - _EmissiveBlink_Max2: 1 + - _EmissiveBlink_Max3: 1 + - _EmissiveBlink_Min: 0 + - _EmissiveBlink_Min1: 0 + - _EmissiveBlink_Min2: 0 + - _EmissiveBlink_Min3: 0 + - _EmissiveBlink_Velocity: 4 + - _EmissiveBlink_Velocity1: 4 + - _EmissiveBlink_Velocity2: 4 + - _EmissiveBlink_Velocity3: 4 + - _EmissiveScroll_Interval: 20 + - _EmissiveScroll_Interval1: 20 + - _EmissiveScroll_Interval2: 20 + - _EmissiveScroll_Interval3: 20 + - _EmissiveScroll_Velocity: 10 + - _EmissiveScroll_Velocity1: 10 + - _EmissiveScroll_Velocity2: 10 + - _EmissiveScroll_Velocity3: 10 + - _EmissiveScroll_Width: 10 + - _EmissiveScroll_Width1: 10 + - _EmissiveScroll_Width2: 10 + - _EmissiveScroll_Width3: 10 + - _EnableALDecal: 0 + - _EnableAniso: 0 + - _EnableAudioLink: 0 + - _EnableDepthBulge: 0 + - _EnableDepthRimLighting: 0 + - _EnableDissolve: 0 + - _EnableDissolveAudioLink: 0 + - _EnableDistortion: 0 + - _EnableDistortionAudioLink: 0 + - _EnableEmission: 0 + - _EnableEmission1: 0 + - _EnableEmission2: 0 + - _EnableEmission3: 0 + - _EnableEnvironmentalRim: 0 + - _EnableFlipbook: 0 + - _EnableGITDEmission: 0 + - _EnableGITDEmission1: 0 + - _EnableGITDEmission2: 0 + - _EnableGITDEmission3: 0 + - _EnableMirrorOptions: 0 + - _EnableOutlines: 0 + - _EnablePathRemapping: 0 + - _EnablePathing: 0 + - _EnableRim2Lighting: 0 + - _EnableRimLighting: 0 + - _EnableTouchGlow: 0 + - _EnableTruchet: 0 + - _EnableUDIMDiscardOptions: 0 + - _EnableUDIMFaceDiscardOptions: 0 + - _EnableVolumeColor: 0 + - _EntranceStiffness: 0.01 + - _EntryOpenDuration: 0.1 + - _FFBFOutlineStencilHelp0: 0 + - _FFBFOutlineStencilHelp1: 0 + - _FFBFStencilHelp0: 0 + - _FFBFStencilHelp1: 0 + - _FXProximityColor: 0 + - _FXProximityColorBackFace: 0 + - _FXProximityColorMaxColorThemeIndex: 0 + - _FXProximityColorMaxDistance: 1 + - _FXProximityColorMinColorThemeIndex: 0 + - _FXProximityColorMinDistance: 0 + - _FXProximityColorType: 1 + - _FlipBackfaceNormals: 1 + - _FlipbookAlphaControlsFinalAlpha: 0 + - _FlipbookBlendType: 0 + - _FlipbookChronoType: 0 + - _FlipbookChronotensityBand: 0 + - _FlipbookChronotensityEnabled: 0 + - _FlipbookChronotensitySpeed: 0 + - _FlipbookColorReplaces: 0 + - _FlipbookColorThemeIndex: 0 + - _FlipbookCrossfadeEnabled: 0 + - _FlipbookCurrentFrame: 0 + - _FlipbookEmissionStrength: 0 + - _FlipbookEndFrame: 0 + - _FlipbookFPS: 30 + - _FlipbookFrameOffset: 0 + - _FlipbookHueSelectOrShift: 1 + - _FlipbookHueShift: 0 + - _FlipbookHueShiftColorSpace: 0 + - _FlipbookHueShiftEnabled: 0 + - _FlipbookHueShiftSpeed: 0 + - _FlipbookIntensityControlsAlpha: 0 + - _FlipbookManualFrameControl: 0 + - _FlipbookMaskChannel: 0 + - _FlipbookMaskGlobalMask: 0 + - _FlipbookMaskGlobalMaskBlendType: 2 + - _FlipbookMaskUV: 0 + - _FlipbookReplace: 1 + - _FlipbookRotation: 0 + - _FlipbookRotationSpeed: 0 + - _FlipbookStartAndEnd: 0 + - _FlipbookStartFrame: 0 + - _FlipbookTexArrayUV: 0 + - _FlipbookTiled: 0 + - _FogHeightOffset: 0 + - _FogHeightScale: 1 + - _FogScale: 1 + - _FogStartOffset: 0 + - _ForceFlatRampedLightmap: 1 + - _ForgotToLockMaterial: 1 + - _GGXAnisotropics: 0 + - _GIEmissionMultiplier: 1 + - _GITDEMaxEmissionMultiplier: 0 + - _GITDEMaxEmissionMultiplier1: 0 + - _GITDEMaxEmissionMultiplier2: 0 + - _GITDEMaxEmissionMultiplier3: 0 + - _GITDEMaxLight: 1 + - _GITDEMaxLight1: 1 + - _GITDEMaxLight2: 1 + - _GITDEMaxLight3: 1 + - _GITDEMinEmissionMultiplier: 1 + - _GITDEMinEmissionMultiplier1: 1 + - _GITDEMinEmissionMultiplier2: 1 + - _GITDEMinEmissionMultiplier3: 1 + - _GITDEMinLight: 0 + - _GITDEMinLight1: 0 + - _GITDEMinLight2: 0 + - _GITDEMinLight3: 0 + - _GITDEWorldOrMesh: 0 + - _GITDEWorldOrMesh1: 0 + - _GITDEWorldOrMesh2: 0 + - _GITDEWorldOrMesh3: 0 + - _GSAAStrength: 0 + - _GlitterALAlphaAddBand: 0 + - _GlitterALChronoRotationSpeed: 0 + - _GlitterALChronoRotationSpeedBand: 0 + - _GlitterALChronoRotationSpeedType: 0 + - _GlitterALChronoSparkleSpeed: 0 + - _GlitterALChronoSparkleSpeedBand: 0 + - _GlitterALChronoSparkleSpeedType: 0 + - _GlitterALEnabled: 0 + - _GlitterALMaxBrightnessBand: 0 + - _GlitterALSizeAddBand: 0 + - _GlitterAngleRange: 90 + - _GlitterBias: 0.8 + - _GlitterBlendType: 0 + - _GlitterBrightness: 3 + - _GlitterCenterSize: 0.08 + - _GlitterColorMapUV: 0 + - _GlitterColorThemeIndex: 0 + - _GlitterContrast: 300 + - _GlitterEnable: 0 + - _GlitterFrequency: 300 + - _GlitterHideInShadow: 0 + - _GlitterHueSelectOrShift: 1 + - _GlitterHueShift: 0 + - _GlitterHueShiftColorSpace: 0 + - _GlitterHueShiftEnabled: 0 + - _GlitterHueShiftSpeed: 0 + - _GlitterJaggyFix: 0 + - _GlitterLayers: 2 + - _GlitterMaskChannel: 0 + - _GlitterMaskGlobalMask: 0 + - _GlitterMaskGlobalMaskBlendType: 2 + - _GlitterMaskInvert: 0 + - _GlitterMaskUV: 0 + - _GlitterMinBrightness: 0 + - _GlitterMode: 0 + - _GlitterRandomColors: 0 + - _GlitterRandomLocation: 1 + - _GlitterRandomRotation: 0 + - _GlitterRandomSize: 0 + - _GlitterScaleWithLighting: 0 + - _GlitterShape: 0 + - _GlitterSize: 0.3 + - _GlitterSpeed: 10 + - _GlitterTextureRotation: 0 + - _GlitterUV: 0 + - _GlitterUseNormals: 0 + - _GlitterUseSurfaceColor: 0 + - _GlobalMaskBackface_0: 0 + - _GlobalMaskBackface_1: 0 + - _GlobalMaskBackface_10: 0 + - _GlobalMaskBackface_11: 0 + - _GlobalMaskBackface_12: 0 + - _GlobalMaskBackface_13: 0 + - _GlobalMaskBackface_14: 0 + - _GlobalMaskBackface_15: 0 + - _GlobalMaskBackface_2: 0 + - _GlobalMaskBackface_3: 0 + - _GlobalMaskBackface_4: 0 + - _GlobalMaskBackface_5: 0 + - _GlobalMaskBackface_6: 0 + - _GlobalMaskBackface_7: 0 + - _GlobalMaskBackface_8: 0 + - _GlobalMaskBackface_9: 0 + - _GlobalMaskCamera_0: 0 + - _GlobalMaskCamera_1: 0 + - _GlobalMaskCamera_10: 0 + - _GlobalMaskCamera_11: 0 + - _GlobalMaskCamera_12: 0 + - _GlobalMaskCamera_13: 0 + - _GlobalMaskCamera_14: 0 + - _GlobalMaskCamera_15: 0 + - _GlobalMaskCamera_2: 0 + - _GlobalMaskCamera_3: 0 + - _GlobalMaskCamera_4: 0 + - _GlobalMaskCamera_5: 0 + - _GlobalMaskCamera_6: 0 + - _GlobalMaskCamera_7: 0 + - _GlobalMaskCamera_8: 0 + - _GlobalMaskCamera_9: 0 + - _GlobalMaskDistanceBlendType_0: 0 + - _GlobalMaskDistanceBlendType_1: 0 + - _GlobalMaskDistanceBlendType_10: 0 + - _GlobalMaskDistanceBlendType_11: 0 + - _GlobalMaskDistanceBlendType_12: 0 + - _GlobalMaskDistanceBlendType_13: 0 + - _GlobalMaskDistanceBlendType_14: 0 + - _GlobalMaskDistanceBlendType_15: 0 + - _GlobalMaskDistanceBlendType_2: 0 + - _GlobalMaskDistanceBlendType_3: 0 + - _GlobalMaskDistanceBlendType_4: 0 + - _GlobalMaskDistanceBlendType_5: 0 + - _GlobalMaskDistanceBlendType_6: 0 + - _GlobalMaskDistanceBlendType_7: 0 + - _GlobalMaskDistanceBlendType_8: 0 + - _GlobalMaskDistanceBlendType_9: 0 + - _GlobalMaskDistanceEnable_0: 0 + - _GlobalMaskDistanceEnable_1: 0 + - _GlobalMaskDistanceEnable_10: 0 + - _GlobalMaskDistanceEnable_11: 0 + - _GlobalMaskDistanceEnable_12: 0 + - _GlobalMaskDistanceEnable_13: 0 + - _GlobalMaskDistanceEnable_14: 0 + - _GlobalMaskDistanceEnable_15: 0 + - _GlobalMaskDistanceEnable_2: 0 + - _GlobalMaskDistanceEnable_3: 0 + - _GlobalMaskDistanceEnable_4: 0 + - _GlobalMaskDistanceEnable_5: 0 + - _GlobalMaskDistanceEnable_6: 0 + - _GlobalMaskDistanceEnable_7: 0 + - _GlobalMaskDistanceEnable_8: 0 + - _GlobalMaskDistanceEnable_9: 0 + - _GlobalMaskDistanceMaxAlpha_0: 1 + - _GlobalMaskDistanceMaxAlpha_1: 1 + - _GlobalMaskDistanceMaxAlpha_10: 1 + - _GlobalMaskDistanceMaxAlpha_11: 1 + - _GlobalMaskDistanceMaxAlpha_12: 1 + - _GlobalMaskDistanceMaxAlpha_13: 1 + - _GlobalMaskDistanceMaxAlpha_14: 1 + - _GlobalMaskDistanceMaxAlpha_15: 1 + - _GlobalMaskDistanceMaxAlpha_2: 1 + - _GlobalMaskDistanceMaxAlpha_3: 1 + - _GlobalMaskDistanceMaxAlpha_4: 1 + - _GlobalMaskDistanceMaxAlpha_5: 1 + - _GlobalMaskDistanceMaxAlpha_6: 1 + - _GlobalMaskDistanceMaxAlpha_7: 1 + - _GlobalMaskDistanceMaxAlpha_8: 1 + - _GlobalMaskDistanceMaxAlpha_9: 1 + - _GlobalMaskDistanceMax_0: 2 + - _GlobalMaskDistanceMax_1: 2 + - _GlobalMaskDistanceMax_10: 2 + - _GlobalMaskDistanceMax_11: 2 + - _GlobalMaskDistanceMax_12: 2 + - _GlobalMaskDistanceMax_13: 2 + - _GlobalMaskDistanceMax_14: 2 + - _GlobalMaskDistanceMax_15: 2 + - _GlobalMaskDistanceMax_2: 2 + - _GlobalMaskDistanceMax_3: 2 + - _GlobalMaskDistanceMax_4: 2 + - _GlobalMaskDistanceMax_5: 2 + - _GlobalMaskDistanceMax_6: 2 + - _GlobalMaskDistanceMax_7: 2 + - _GlobalMaskDistanceMax_8: 2 + - _GlobalMaskDistanceMax_9: 2 + - _GlobalMaskDistanceMinAlpha_0: 0 + - _GlobalMaskDistanceMinAlpha_1: 0 + - _GlobalMaskDistanceMinAlpha_10: 0 + - _GlobalMaskDistanceMinAlpha_11: 0 + - _GlobalMaskDistanceMinAlpha_12: 0 + - _GlobalMaskDistanceMinAlpha_13: 0 + - _GlobalMaskDistanceMinAlpha_14: 0 + - _GlobalMaskDistanceMinAlpha_15: 0 + - _GlobalMaskDistanceMinAlpha_2: 0 + - _GlobalMaskDistanceMinAlpha_3: 0 + - _GlobalMaskDistanceMinAlpha_4: 0 + - _GlobalMaskDistanceMinAlpha_5: 0 + - _GlobalMaskDistanceMinAlpha_6: 0 + - _GlobalMaskDistanceMinAlpha_7: 0 + - _GlobalMaskDistanceMinAlpha_8: 0 + - _GlobalMaskDistanceMinAlpha_9: 0 + - _GlobalMaskDistanceMin_0: 1 + - _GlobalMaskDistanceMin_1: 1 + - _GlobalMaskDistanceMin_10: 1 + - _GlobalMaskDistanceMin_11: 1 + - _GlobalMaskDistanceMin_12: 1 + - _GlobalMaskDistanceMin_13: 1 + - _GlobalMaskDistanceMin_14: 1 + - _GlobalMaskDistanceMin_15: 1 + - _GlobalMaskDistanceMin_2: 1 + - _GlobalMaskDistanceMin_3: 1 + - _GlobalMaskDistanceMin_4: 1 + - _GlobalMaskDistanceMin_5: 1 + - _GlobalMaskDistanceMin_6: 1 + - _GlobalMaskDistanceMin_7: 1 + - _GlobalMaskDistanceMin_8: 1 + - _GlobalMaskDistanceMin_9: 1 + - _GlobalMaskDistanceType_0: 1 + - _GlobalMaskDistanceType_1: 1 + - _GlobalMaskDistanceType_10: 1 + - _GlobalMaskDistanceType_11: 1 + - _GlobalMaskDistanceType_12: 1 + - _GlobalMaskDistanceType_13: 1 + - _GlobalMaskDistanceType_14: 1 + - _GlobalMaskDistanceType_15: 1 + - _GlobalMaskDistanceType_2: 1 + - _GlobalMaskDistanceType_3: 1 + - _GlobalMaskDistanceType_4: 1 + - _GlobalMaskDistanceType_5: 1 + - _GlobalMaskDistanceType_6: 1 + - _GlobalMaskDistanceType_7: 1 + - _GlobalMaskDistanceType_8: 1 + - _GlobalMaskDistanceType_9: 1 + - _GlobalMaskMirrorVisibilityMode: 1 + - _GlobalMaskMirror_0: 0 + - _GlobalMaskMirror_1: 0 + - _GlobalMaskMirror_10: 0 + - _GlobalMaskMirror_11: 0 + - _GlobalMaskMirror_12: 0 + - _GlobalMaskMirror_13: 0 + - _GlobalMaskMirror_14: 0 + - _GlobalMaskMirror_15: 0 + - _GlobalMaskMirror_2: 0 + - _GlobalMaskMirror_3: 0 + - _GlobalMaskMirror_4: 0 + - _GlobalMaskMirror_5: 0 + - _GlobalMaskMirror_6: 0 + - _GlobalMaskMirror_7: 0 + - _GlobalMaskMirror_8: 0 + - _GlobalMaskMirror_9: 0 + - _GlobalMaskModifiersBackfaceEnable: 0 + - _GlobalMaskModifiersCameraEnable: 0 + - _GlobalMaskModifiersCameraInfo: 0 + - _GlobalMaskModifiersDistanceEnable: 0 + - _GlobalMaskModifiersMirrorEnable: 0 + - _GlobalMaskOptionsEnable: 0 + - _GlobalMaskOptionsType: 0 + - _GlobalMaskSlider_0: 0 + - _GlobalMaskSlider_1: 0 + - _GlobalMaskSlider_10: 0 + - _GlobalMaskSlider_11: 0 + - _GlobalMaskSlider_12: 0 + - _GlobalMaskSlider_13: 0 + - _GlobalMaskSlider_14: 0 + - _GlobalMaskSlider_15: 0 + - _GlobalMaskSlider_2: 0 + - _GlobalMaskSlider_3: 0 + - _GlobalMaskSlider_4: 0 + - _GlobalMaskSlider_5: 0 + - _GlobalMaskSlider_6: 0 + - _GlobalMaskSlider_7: 0 + - _GlobalMaskSlider_8: 0 + - _GlobalMaskSlider_9: 0 + - _GlobalMaskTexture0Split: 0 + - _GlobalMaskTexture0UV: 0 + - _GlobalMaskTexture1Split: 0 + - _GlobalMaskTexture1UV: 0 + - _GlobalMaskTexture2Split: 0 + - _GlobalMaskTexture2UV: 0 + - _GlobalMaskTexture3Split: 0 + - _GlobalMaskTexture3UV: 0 + - _GlobalMaskTexturesEnable: 0 + - _GlobalMaskToggleOff_0: 0 + - _GlobalMaskToggleOff_1: 0 + - _GlobalMaskToggleOff_10: 0 + - _GlobalMaskToggleOff_11: 0 + - _GlobalMaskToggleOff_12: 0 + - _GlobalMaskToggleOff_13: 0 + - _GlobalMaskToggleOff_14: 0 + - _GlobalMaskToggleOff_15: 0 + - _GlobalMaskToggleOff_2: 0 + - _GlobalMaskToggleOff_3: 0 + - _GlobalMaskToggleOff_4: 0 + - _GlobalMaskToggleOff_5: 0 + - _GlobalMaskToggleOff_6: 0 + - _GlobalMaskToggleOff_7: 0 + - _GlobalMaskToggleOff_8: 0 + - _GlobalMaskToggleOff_9: 0 + - _GlobalMaskToggleOn_0: 0 + - _GlobalMaskToggleOn_1: 0 + - _GlobalMaskToggleOn_10: 0 + - _GlobalMaskToggleOn_11: 0 + - _GlobalMaskToggleOn_12: 0 + - _GlobalMaskToggleOn_13: 0 + - _GlobalMaskToggleOn_14: 0 + - _GlobalMaskToggleOn_15: 0 + - _GlobalMaskToggleOn_2: 0 + - _GlobalMaskToggleOn_3: 0 + - _GlobalMaskToggleOn_4: 0 + - _GlobalMaskToggleOn_5: 0 + - _GlobalMaskToggleOn_6: 0 + - _GlobalMaskToggleOn_7: 0 + - _GlobalMaskToggleOn_8: 0 + - _GlobalMaskToggleOn_9: 0 + - _GlobalMaskVertexColorAlpha: 0 + - _GlobalMaskVertexColorAlphaBlendType: 2 + - _GlobalMaskVertexColorBlue: 0 + - _GlobalMaskVertexColorBlueBlendType: 2 + - _GlobalMaskVertexColorGreen: 0 + - _GlobalMaskVertexColorGreenBlendType: 2 + - _GlobalMaskVertexColorLinearSpace: 1 + - _GlobalMaskVertexColorRed: 0 + - _GlobalMaskVertexColorRedBlendType: 2 + - _GlobalThemeHue0: 0 + - _GlobalThemeHue1: 0 + - _GlobalThemeHue2: 0 + - _GlobalThemeHue3: 0 + - _GlobalThemeHueSpeed0: 0 + - _GlobalThemeHueSpeed1: 0 + - _GlobalThemeHueSpeed2: 0 + - _GlobalThemeHueSpeed3: 0 + - _GlobalThemeSaturation0: 0 + - _GlobalThemeSaturation1: 0 + - _GlobalThemeSaturation2: 0 + - _GlobalThemeSaturation3: 0 + - _GlobalThemeValue0: 0 + - _GlobalThemeValue1: 0 + - _GlobalThemeValue2: 0 + - _GlobalThemeValue3: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GreenAlphaAdd: 0 + - _GreenColorThemeIndex: 0 + - _GreenTextureStochastic: 0 + - _GreenTextureUV: 0 + - _HeightMapUV: 0 + - _HeightOffset: 0 + - _HeightStepsMax: 128 + - _HeightStepsMin: 10 + - _HeightStrength: 0.005 + - _HeightmaskChannel: 0 + - _HeightmaskInvert: 0 + - _HeightmaskUV: 0 + - _HighColorThemeIndex: 0 + - _HighColor_Power: 0.2 + - _HighColor_TexUV: 0 + - _IgnoreCastedShadows: 0 + - _IgnoreFog: 0 + - _Is_BlendAddToHiColor: 0 + - _Is_LightColor_Ap_Rim2Light: 1 + - _Is_LightColor_Ap_RimLight: 1 + - _Is_LightColor_Rim2Light: 1 + - _Is_LightColor_RimLight: 1 + - _Is_NormalMapToRim2Light: 1 + - _Is_NormalMapToRimLight: 1 + - _Is_SpecularToHighColor: 0 + - _LTCGIEnabled: 0 + - _LTCGI_AnimToggle: 1 + - _LTCGI_Attribution: 0 + - _LTCGI_DiffuseColorThemeIndex: 0 + - _LTCGI_Metallic: 0 + - _LTCGI_Smoothness: 0 + - _LTCGI_SpecularColorThemeIndex: 0 + - _LTCGI_UseEO: 0 + - _LTCGI_UsePBR: 1 + - _Layer1Strength: 1 + - _Layer2Size: 0 + - _Layer2Strength: 0 + - _Length: 0 + - _LightDataAOGlobalMaskBlendTypeR: 2 + - _LightDataAOGlobalMaskR: 0 + - _LightDataAOStrengthA: 0 + - _LightDataAOStrengthB: 0 + - _LightDataAOStrengthG: 0 + - _LightDataAOStrengthR: 1 + - _LightDataDebugEnabled: 0 + - _LightDataDetailShadowGlobalMaskBlendTypeR: 2 + - _LightDataDetailShadowGlobalMaskR: 0 + - _LightDataSDFBlendY: 1 + - _LightDataSDFMapLOD: 0 + - _LightDataSDFMapUV: 0 + - _LightDataShadowMaskGlobalMaskBlendTypeR: 2 + - _LightDataShadowMaskGlobalMaskR: 0 + - _LightDirection_MaskOn: 0 + - _LightDirection_MaskOn2: 0 + - _LightingAOMapsUV: 0 + - _LightingAddDetailShadowStrengthA: 0 + - _LightingAddDetailShadowStrengthB: 0 + - _LightingAddDetailShadowStrengthG: 0 + - _LightingAddDetailShadowStrengthR: 1 + - _LightingAdditiveCastedShadows: 1 + - _LightingAdditiveEnable: 1 + - _LightingAdditiveGradientEnd: 0.5 + - _LightingAdditiveGradientStart: 0 + - _LightingAdditiveLimit: 1 + - _LightingAdditiveLimited: 1 + - _LightingAdditiveMonochromatic: 0 + - _LightingAdditivePassthrough: 0.5 + - _LightingAdditiveType: 3 + - _LightingCap: 1 + - _LightingCapEnabled: 1 + - _LightingCastedShadows: 0 + - _LightingColorMode: 0 + - _LightingDebugVisualize: 0 + - _LightingDetailShadowMapsUV: 0 + - _LightingDetailShadowStrengthA: 0 + - _LightingDetailShadowStrengthB: 0 + - _LightingDetailShadowStrengthG: 0 + - _LightingDetailShadowStrengthR: 1 + - _LightingDirectionMode: 0 + - _LightingEnableLightVolumes: 1 + - _LightingForceColorEnabled: 0 + - _LightingForcedColorThemeIndex: 0 + - _LightingGradientEnd: 0.5 + - _LightingGradientStart: 0 + - _LightingIgnoreAmbientColor: 1 + - _LightingIndirectUsesNormals: 0 + - _LightingMapMode: 0 + - _LightingMinLightBrightness: 0 + - _LightingMirrorVertexLightingEnabled: 1 + - _LightingMode: 6 + - _LightingMonochromatic: 0 + - _LightingMulitlayerNonLinear: 1 + - _LightingShadowMaskStrengthA: 0 + - _LightingShadowMaskStrengthB: 0 + - _LightingShadowMaskStrengthG: 0 + - _LightingShadowMaskStrengthR: 1 + - _LightingShadowMasksUV: 0 + - _LightingVertexLightingEnabled: 1 + - _LightingViewDirOffsetPitch: 0 + - _LightingViewDirOffsetYaw: 0 + - _LightingWrappedNormalization: 0 + - _LightingWrappedWrap: 0 + - _LineColorThemeIndex: 0 + - _LineWidth: 1 + - _LookAtAlphaAlpha: 1 + - _LookAtAlphaMaskEnabled: 0 + - _LookAtAlphaTargetUp: 0 + - _LookAtBlueAlpha: 1 + - _LookAtBlueMaskEnabled: 0 + - _LookAtBlueTargetUp: 0 + - _LookAtGreenAlpha: 1 + - _LookAtGreenMaskEnabled: 0 + - _LookAtGreenTargetUp: 0 + - _LookAtMaskUV: 0 + - _LookAtRedAlpha: 1 + - _LookAtRedMaskEnabled: 1 + - _LookAtRedTargetUp: 0 + - _LookAtVisibilityEnabled: 0 + - _LookAtVisibilityMirror: 0 + - _LookAtVisibilityMode: 1 + - _LookAtVisibilityVRCCameraDesktop: 1 + - _LookAtVisibilityVRCCameraScreenshot: 1 + - _LookAtVisibilityVRCCameraVR: 1 + - _LookAtVisibilityVRCMirrorDesktop: 1 + - _LookAtVisibilityVRCMirrorVR: 1 + - _LookAtVisibilityVRCRegular: 1 + - _MainALHueShiftBand: 0 + - _MainALHueShiftCTIndex: 0 + - _MainAlphaMaskMode: 2 + - _MainBrightness: 0 + - _MainBrightnessGlobalMask: 0 + - _MainBrightnessGlobalMaskBlendType: 2 + - _MainColorAdjustTextureUV: 0 + - _MainColorAdjustToggle: 0 + - _MainGamma: 1 + - _MainGammaGlobalMask: 0 + - _MainGammaGlobalMaskBlendType: 2 + - _MainGradationStrength: 0 + - _MainHueALCTEnabled: 0 + - _MainHueALMotionSpeed: 1 + - _MainHueGlobalMask: 0 + - _MainHueGlobalMaskBlendType: 2 + - _MainHueShift: 0 + - _MainHueShiftColorSpace: 0 + - _MainHueShiftReplace: 1 + - _MainHueShiftSelectOrShift: 1 + - _MainHueShiftSpeed: 0 + - _MainHueShiftToggle: 0 + - _MainIgnoreTexAlpha: 0 + - _MainPixelMode: 0 + - _MainSaturationGlobalMask: 0 + - _MainSaturationGlobalMaskBlendType: 2 + - _MainTexStochastic: 0 + - _MainTexUV: 0 + - _MainUseVertexColorAlpha: 0 + - _MainVertexColoring: 0 + - _MainVertexColoringEnabled: 0 + - _MainVertexColoringLinearSpace: 1 + - _Matcap0ALAlphaAddBand: 0 + - _Matcap0ALChronoPanBand: 0 + - _Matcap0ALChronoPanSpeed: 0 + - _Matcap0ALChronoPanType: 0 + - _Matcap0ALEmissionAddBand: 0 + - _Matcap0ALEnabled: 0 + - _Matcap0ALIntensityAddBand: 0 + - _Matcap0CircleMaskBlur: 0.1 + - _Matcap0CircleMaskBorder: 0.45 + - _Matcap0CircleMaskEnabled: 0 + - _Matcap0CustomNormal: 0 + - _Matcap0NormalMapScale: 1 + - _Matcap0NormalMapUV: 0 + - _Matcap1ALAlphaAddBand: 0 + - _Matcap1ALChronoPanBand: 0 + - _Matcap1ALChronoPanSpeed: 0 + - _Matcap1ALChronoPanType: 0 + - _Matcap1ALEmissionAddBand: 0 + - _Matcap1ALEnabled: 0 + - _Matcap1ALIntensityAddBand: 0 + - _Matcap1CustomNormal: 0 + - _Matcap1NormalMapScale: 1 + - _Matcap1NormalMapUV: 0 + - _Matcap2ALAlphaAddBand: 0 + - _Matcap2ALChronoPanBand: 0 + - _Matcap2ALChronoPanSpeed: 0 + - _Matcap2ALChronoPanType: 0 + - _Matcap2ALEmissionAddBand: 0 + - _Matcap2ALEnabled: 0 + - _Matcap2ALIntensityAddBand: 0 + - _Matcap2Add: 0 + - _Matcap2AddToLight: 0 + - _Matcap2AlphaOverride: 0 + - _Matcap2ApplyToAlphaBlendType: 0 + - _Matcap2ApplyToAlphaBlending: 1 + - _Matcap2ApplyToAlphaEnabled: 0 + - _Matcap2ApplyToAlphaSourceBlend: 0 + - _Matcap2BaseColorMix: 0 + - _Matcap2Border: 0.5 + - _Matcap2CircleMaskBlur: 0.1 + - _Matcap2CircleMaskBorder: 0.45 + - _Matcap2CircleMaskEnabled: 0 + - _Matcap2ColorThemeIndex: 0 + - _Matcap2CustomNormal: 0 + - _Matcap2EmissionStrength: 0 + - _Matcap2Enable: 0 + - _Matcap2HueSelectOrShift: 1 + - _Matcap2HueShift: 0 + - _Matcap2HueShiftColorSpace: 0 + - _Matcap2HueShiftEnabled: 0 + - _Matcap2HueShiftSpeed: 0 + - _Matcap2Intensity: 1 + - _Matcap2LightColorMix: 0 + - _Matcap2LightMask: 0 + - _Matcap2MaskChannel: 0 + - _Matcap2MaskGlobalMask: 0 + - _Matcap2MaskGlobalMaskBlendType: 2 + - _Matcap2MaskInvert: 0 + - _Matcap2MaskSmoothnessApply: 0 + - _Matcap2MaskSmoothnessChannel: 3 + - _Matcap2MaskUV: 0 + - _Matcap2Mixed: 0 + - _Matcap2Multiply: 0 + - _Matcap2Normal: 1 + - _Matcap2NormalMapScale: 1 + - _Matcap2NormalMapUV: 0 + - _Matcap2Replace: 0 + - _Matcap2Rotation: 0 + - _Matcap2Screen: 0 + - _Matcap2Smoothness: 1 + - _Matcap2TPSDepthEnabled: 0 + - _Matcap2TPSMaskStrength: 1 + - _Matcap2UVMode: 1 + - _Matcap2UVToBlend: 1 + - _Matcap3ALAlphaAddBand: 0 + - _Matcap3ALChronoPanBand: 0 + - _Matcap3ALChronoPanSpeed: 0 + - _Matcap3ALChronoPanType: 0 + - _Matcap3ALEmissionAddBand: 0 + - _Matcap3ALEnabled: 0 + - _Matcap3ALIntensityAddBand: 0 + - _Matcap3Add: 0 + - _Matcap3AddToLight: 0 + - _Matcap3AlphaOverride: 0 + - _Matcap3ApplyToAlphaBlendType: 0 + - _Matcap3ApplyToAlphaBlending: 1 + - _Matcap3ApplyToAlphaEnabled: 0 + - _Matcap3ApplyToAlphaSourceBlend: 0 + - _Matcap3BaseColorMix: 0 + - _Matcap3Border: 0.5 + - _Matcap3CircleMaskBlur: 0.1 + - _Matcap3CircleMaskBorder: 0.45 + - _Matcap3CircleMaskEnabled: 0 + - _Matcap3ColorThemeIndex: 0 + - _Matcap3CustomNormal: 0 + - _Matcap3EmissionStrength: 0 + - _Matcap3Enable: 0 + - _Matcap3HueSelectOrShift: 1 + - _Matcap3HueShift: 0 + - _Matcap3HueShiftColorSpace: 0 + - _Matcap3HueShiftEnabled: 0 + - _Matcap3HueShiftSpeed: 0 + - _Matcap3Intensity: 1 + - _Matcap3LightColorMix: 0 + - _Matcap3LightMask: 0 + - _Matcap3MaskChannel: 0 + - _Matcap3MaskGlobalMask: 0 + - _Matcap3MaskGlobalMaskBlendType: 2 + - _Matcap3MaskInvert: 0 + - _Matcap3MaskSmoothnessApply: 0 + - _Matcap3MaskSmoothnessChannel: 3 + - _Matcap3MaskUV: 0 + - _Matcap3Mixed: 0 + - _Matcap3Multiply: 0 + - _Matcap3Normal: 1 + - _Matcap3NormalMapScale: 1 + - _Matcap3NormalMapUV: 0 + - _Matcap3Replace: 0 + - _Matcap3Rotation: 0 + - _Matcap3Screen: 0 + - _Matcap3Smoothness: 1 + - _Matcap3TPSDepthEnabled: 0 + - _Matcap3TPSMaskStrength: 1 + - _Matcap3UVMode: 1 + - _Matcap3UVToBlend: 1 + - _Matcap4Add: 0 + - _Matcap4AddToLight: 0 + - _Matcap4AlphaOverride: 0 + - _Matcap4ApplyToAlphaBlendType: 0 + - _Matcap4ApplyToAlphaBlending: 1 + - _Matcap4ApplyToAlphaEnabled: 0 + - _Matcap4ApplyToAlphaSourceBlend: 0 + - _Matcap4BaseColorMix: 0 + - _Matcap4Border: 0.5 + - _Matcap4CircleMaskBlur: 0.1 + - _Matcap4CircleMaskBorder: 0.45 + - _Matcap4CircleMaskEnabled: 0 + - _Matcap4ColorThemeIndex: 0 + - _Matcap4EmissionStrength: 0 + - _Matcap4Enable: 0 + - _Matcap4HueSelectOrShift: 1 + - _Matcap4HueShift: 0 + - _Matcap4HueShiftColorSpace: 0 + - _Matcap4HueShiftEnabled: 0 + - _Matcap4HueShiftSpeed: 0 + - _Matcap4Intensity: 1 + - _Matcap4LightColorMix: 0 + - _Matcap4LightMask: 0 + - _Matcap4MaskChannel: 0 + - _Matcap4MaskGlobalMask: 0 + - _Matcap4MaskGlobalMaskBlendType: 2 + - _Matcap4MaskInvert: 0 + - _Matcap4MaskSmoothnessApply: 0 + - _Matcap4MaskSmoothnessChannel: 3 + - _Matcap4MaskUV: 0 + - _Matcap4Mixed: 0 + - _Matcap4Multiply: 0 + - _Matcap4Normal: 1 + - _Matcap4Replace: 0 + - _Matcap4Rotation: 0 + - _Matcap4Screen: 0 + - _Matcap4Smoothness: 1 + - _Matcap4TPSDepthEnabled: 0 + - _Matcap4TPSMaskStrength: 1 + - _Matcap4UVMode: 1 + - _Matcap4UVToBlend: 1 + - _MatcapAdd: 0 + - _MatcapAddToLight: 0 + - _MatcapAlphaOverride: 0 + - _MatcapApplyToAlphaBlendType: 0 + - _MatcapApplyToAlphaBlending: 1 + - _MatcapApplyToAlphaEnabled: 0 + - _MatcapApplyToAlphaSourceBlend: 0 + - _MatcapBaseColorMix: 0 + - _MatcapBorder: 0.5 + - _MatcapColorThemeIndex: 0 + - _MatcapEmissionStrength: 0 + - _MatcapEnable: 0 + - _MatcapHueSelectOrShift: 1 + - _MatcapHueShift: 0 + - _MatcapHueShiftColorSpace: 0 + - _MatcapHueShiftEnabled: 0 + - _MatcapHueShiftSpeed: 0 + - _MatcapIntensity: 1 + - _MatcapLightColorMix: 0 + - _MatcapLightMask: 0 + - _MatcapMaskChannel: 0 + - _MatcapMaskGlobalMask: 0 + - _MatcapMaskGlobalMaskBlendType: 2 + - _MatcapMaskInvert: 0 + - _MatcapMaskSmoothnessApply: 0 + - _MatcapMaskSmoothnessChannel: 3 + - _MatcapMaskUV: 0 + - _MatcapMixed: 0 + - _MatcapMultiply: 0 + - _MatcapNormal: 1 + - _MatcapReplace: 1 + - _MatcapRotation: 0 + - _MatcapScreen: 0 + - _MatcapSmoothness: 1 + - _MatcapTPSDepthEnabled: 0 + - _MatcapTPSMaskStrength: 1 + - _MatcapUVMode: 1 + - _MatcapUVToBlend: 1 + - _Metallic: 0 + - _Mirror: 0 + - _MirrorColorThemeIndex: 0 + - _MirrorTextureBlendType: 0 + - _MirrorTextureEnabled: 0 + - _MirrorTextureForceEnabled: 0 + - _MirrorTextureUV: 0 + - _MochieBRDF: 1 + - _MochieForceFallback: 0 + - _MochieGSAAEnabled: 1 + - _MochieLitFallback: 1 + - _MochieMetallicGlobalMask: 0 + - _MochieMetallicGlobalMaskBlendType: 2 + - _MochieMetallicMapInvert: 0 + - _MochieMetallicMapsMetallicChannel: 0 + - _MochieMetallicMapsReflectionMaskChannel: 2 + - _MochieMetallicMapsRoughnessChannel: 1 + - _MochieMetallicMapsSpecularMaskChannel: 3 + - _MochieMetallicMapsStochastic: 0 + - _MochieMetallicMapsUV: 0 + - _MochieMetallicMasksUV: 0 + - _MochieMetallicMultiplier: 0 + - _MochieReflectionMaskInvert: 0 + - _MochieReflectionStrength: 1 + - _MochieReflectionStrengthGlobalMask: 0 + - _MochieReflectionStrengthGlobalMaskBlendType: 2 + - _MochieReflectionTintThemeIndex: 0 + - _MochieRoughnessMapInvert: 0 + - _MochieRoughnessMultiplier: 0 + - _MochieRoughnessMultiplier2: 1 + - _MochieSmoothnessGlobalMask: 0 + - _MochieSmoothnessGlobalMaskBlendType: 2 + - _MochieSpecularMaskInvert: 0 + - _MochieSpecularStrength: 1 + - _MochieSpecularStrength2: 1 + - _MochieSpecularStrengthGlobalMask: 0 + - _MochieSpecularStrengthGlobalMaskBlendType: 2 + - _MochieSpecularTintThemeIndex: 0 + - _Mode: 0 + - _ModelAngleMax: 90 + - _ModelAngleMin: 45 + - _MultilayerMathBlurMapUV: 0 + - _NormalCorrect: 0 + - _NormalCorrectAmount: 0.9 + - _OcclusionStrength: 1 + - _OffsetFactor: 0 + - _OffsetUnits: 0 + - _Offset_Z: 0 + - _OrifaceEnabled: 0 + - _OrificeChannel: 0 + - _OutlineALColorEnabled: 0 + - _OutlineAlphaDistanceFade: 0 + - _OutlineAlphaDistanceFadeMax: 0 + - _OutlineAlphaDistanceFadeMaxAlpha: 1 + - _OutlineAlphaDistanceFadeMin: 0 + - _OutlineAlphaDistanceFadeMinAlpha: 0 + - _OutlineAlphaDistanceFadeType: 1 + - _OutlineBlendOp: 0 + - _OutlineBlendOpAlpha: 4 + - _OutlineClipAtZeroWidth: 1 + - _OutlineCull: 1 + - _OutlineDstBlend: 0 + - _OutlineDstBlendAlpha: 0 + - _OutlineEmission: 0 + - _OutlineExpansionMode: 1 + - _OutlineFixWidth: 0.5 + - _OutlineFixedSize: 1 + - _OutlineGamma: 1 + - _OutlineHue: 0 + - _OutlineHueOffsetSpeed: 0 + - _OutlineHueShift: 0 + - _OutlineLit: 1 + - _OutlineMaskChannel: 0 + - _OutlineMaskUV: 0 + - _OutlineOverrideAlpha: 0 + - _OutlineRimLightBlend: 0 + - _OutlineSaturation: 1 + - _OutlineShadowStrength: 0 + - _OutlineSpace: 0 + - _OutlineSrcBlend: 1 + - _OutlineSrcBlendAlpha: 1 + - _OutlineStencilBackCompareFunction: 8 + - _OutlineStencilBackFailOp: 0 + - _OutlineStencilBackPassOp: 0 + - _OutlineStencilBackZFailOp: 0 + - _OutlineStencilCompareFunction: 8 + - _OutlineStencilFailOp: 0 + - _OutlineStencilFrontCompareFunction: 8 + - _OutlineStencilFrontFailOp: 0 + - _OutlineStencilFrontPassOp: 0 + - _OutlineStencilFrontZFailOp: 0 + - _OutlineStencilPassOp: 0 + - _OutlineStencilReadMask: 255 + - _OutlineStencilRef: 0 + - _OutlineStencilType: 0 + - _OutlineStencilWriteMask: 255 + - _OutlineStencilZFailOp: 0 + - _OutlineTextureUV: 0 + - _OutlineTintMix: 0 + - _OutlineUseVertexColorNormals: 0 + - _OutlineValue: 1 + - _OutlineVertexColorMask: 0 + - _OutlineVertexColorMaskStrength: 1 + - _OutlineZOffsetChannel: 0 + - _OutlineZOffsetInvertMaskChannel: 0 + - _OutlineZOffsetMaskStrength: 1 + - _OutlineZOffsetVertexColor: 0 + - _OutlineZOffsetVertexColorStrength: 1 + - _OutlineZTest: 4 + - _OutlineZWrite: 1 + - _OutlinesMaxDistance: 1 + - _PBRNormalSelect: 1 + - _PBRSplitMaskSample: 0 + - _PBRSplitMaskStochastic: 0 + - _PPBrightness: 1 + - _PPContrast: 1 + - _PPEmissionMultiplier: 1 + - _PPFinalColorMultiplier: 1 + - _PPHDR: 0 + - _PPHelp: 0 + - _PPHue: 0 + - _PPHueShiftColorSpace: 0 + - _PPLightingAddition: 0 + - _PPLightingMultiplier: 1 + - _PPLightness: 0 + - _PPMaskChannel: 0 + - _PPMaskInvert: 0 + - _PPMaskUV: 0 + - _PPPosterization: 0 + - _PPPosterizationAmount: 4 + - _PPSaturation: 1 + - _PanoUseBothEyes: 1 + - _Parallax: 0.02 + - _ParallaxAnisotropic: 1 + - _ParallaxAnisotropyScale: 1 + - _ParallaxBinarySteps: 8 + - _ParallaxConeRatio: 1 + - _ParallaxInternalBlendMode: 0 + - _ParallaxInternalHeightFromAlpha: 0 + - _ParallaxInternalHeightmapMode: 0 + - _ParallaxInternalHueSelectOrShift: 1 + - _ParallaxInternalHueShift: 0 + - _ParallaxInternalHueShiftColorSpace: 0 + - _ParallaxInternalHueShiftEnabled: 0 + - _ParallaxInternalHueShiftPerLevel: 0 + - _ParallaxInternalHueShiftSpeed: 0 + - _ParallaxInternalIterations: 4 + - _ParallaxInternalMapMaskChannel: 0 + - _ParallaxInternalMapMaskUV: 0 + - _ParallaxInternalMaxColorThemeIndex: 0 + - _ParallaxInternalMaxDepth: 0.1 + - _ParallaxInternalMaxFade: 0.1 + - _ParallaxInternalMinColorThemeIndex: 0 + - _ParallaxInternalMinDepth: 0 + - _ParallaxInternalMinFade: 1 + - _ParallaxInternalSurfaceBlendMode: 8 + - _ParallaxMipBias: 0 + - _ParallaxRelaxedCone: 1 + - _ParallaxUV: 0 + - _PathALAutoCorrelator: 0 + - _PathALAutoCorrelatorA: 0 + - _PathALAutoCorrelatorB: 0 + - _PathALAutoCorrelatorG: 0 + - _PathALAutoCorrelatorMode: 0 + - _PathALAutoCorrelatorR: 0 + - _PathALCCA: 0 + - _PathALCCB: 0 + - _PathALCCG: 0 + - _PathALCCR: 0 + - _PathALChrono: 0 + - _PathALColorChord: 0 + - _PathALEmissionOffset: 0 + - _PathALHistory: 0 + - _PathALHistoryA: 0 + - _PathALHistoryB: 0 + - _PathALHistoryBandA: 0 + - _PathALHistoryBandB: 0 + - _PathALHistoryBandG: 0 + - _PathALHistoryBandR: 0 + - _PathALHistoryG: 0 + - _PathALHistoryMode: 0 + - _PathALHistoryR: 0 + - _PathALTimeOffset: 0 + - _PathALWidthOffset: 0 + - _PathChronoBandA: 0 + - _PathChronoBandB: 0 + - _PathChronoBandG: 0 + - _PathChronoBandR: 0 + - _PathChronoSpeedA: 0 + - _PathChronoSpeedB: 0 + - _PathChronoSpeedG: 0 + - _PathChronoSpeedR: 0 + - _PathChronoTypeA: 0 + - _PathChronoTypeB: 0 + - _PathChronoTypeG: 0 + - _PathChronoTypeR: 0 + - _PathColorAThemeIndex: 0 + - _PathColorBThemeIndex: 0 + - _PathColorGThemeIndex: 0 + - _PathColorRThemeIndex: 0 + - _PathGradientType: 0 + - _PathPointSampling: 1 + - _PathSource: 0 + - _PathSourceDirA: 0 + - _PathSourceDirB: 0 + - _PathSourceDirG: 0 + - _PathSourceDirR: 0 + - _PathSurfaceBlendMode: 0 + - _PathTypeA: 2 + - _PathTypeB: 2 + - _PathTypeG: 2 + - _PathTypeR: 2 + - _PathingColorMapUV: 0 + - _PathingMapUV: 0 + - _PathingOverrideAlpha: 0 + - _PathingUVSelect: 0 + - _PenetratorEnabled: 0 + - _PoiGSAAThreshold: 0.1 + - _PoiGSAAVariance: 0.15 + - _PoiInternalParallax: 0 + - _PoiParallax: 0 + - _PoiUTSStyleOutlineBlend: 0 + - _PolarLengthScale: 1 + - _PolarRadialScale: 1 + - _PolarSpiralPower: 0 + - _PolarUV: 0 + - _PostProcess: 0 + - _RGBAAlphaBlendType: 0 + - _RGBAAlphaEmissionStrength: 0 + - _RGBAAlphaEnable: 0 + - _RGBAAlphaMetallicInvert: 0 + - _RGBAAlphaPBRSplitMaskSample: 0 + - _RGBAAlphaPBRSplitMaskStochastic: 0 + - _RGBAAlphaPBRUV: 0 + - _RGBAAlphaSmoothnessInvert: 0 + - _RGBABlueBlendType: 0 + - _RGBABlueEmissionStrength: 0 + - _RGBABlueEnable: 0 + - _RGBABlueMetallicInvert: 0 + - _RGBABluePBRSplitMaskSample: 0 + - _RGBABluePBRSplitMaskStochastic: 0 + - _RGBABluePBRUV: 0 + - _RGBABlueSmoothnessInvert: 0 + - _RGBAGreenBlendType: 0 + - _RGBAGreenEmissionStrength: 0 + - _RGBAGreenEnable: 0 + - _RGBAGreenMetallicInvert: 0 + - _RGBAGreenPBRSplitMaskSample: 0 + - _RGBAGreenPBRSplitMaskStochastic: 0 + - _RGBAGreenPBRUV: 0 + - _RGBAGreenSmoothnessInvert: 0 + - _RGBAMetallicMapsStochastic: 0 + - _RGBAMetallicMapsUV: 0 + - _RGBAPBRAlphaEnabled: 0 + - _RGBAPBRBlueEnabled: 0 + - _RGBAPBRGreenEnabled: 0 + - _RGBAPBRRedEnabled: 0 + - _RGBARedBlendType: 0 + - _RGBARedEmissionStrength: 0 + - _RGBARedEnable: 0 + - _RGBARedMetallicInvert: 0 + - _RGBARedPBRSplitMaskSample: 0 + - _RGBARedPBRSplitMaskStochastic: 0 + - _RGBARedPBRUV: 0 + - _RGBARedSmoothnessInvert: 0 + - _RGBASmoothnessMapsStochastic: 0 + - _RGBASmoothnessMapsUV: 0 + - _RGBMaskEnabled: 0 + - _RGBMaskType: 0 + - _RGBMaskUV: 0 + - _RalivAdvancedHelp: 0 + - _RalivDPSDisableShadowCaster: 1 + - _RalivDPSDisableShadowCasterHelp: 0 + - _RalivHelp: 0 + - _ReCurvature: 0 + - _RedAlphaAdd: 0 + - _RedColorThemeIndex: 0 + - _RedTextureStochastic: 0 + - _RedTextureUV: 0 + - _RefSpecFresnelStrength: 0.5 + - _Reflectance: 0.04 + - _ReflectionAnisotropicStretch: 1 + - _ReflectionApplyTransparency: 1 + - _ReflectionBlendMode: 1 + - _ReflectionCubeEnableLighting: 1 + - _ReflectionCubeOverride: 0 + - _ReflectionNormalStrength: 1 + - _RenderingAOBlockerEnabled: 0 + - _RenderingAOBlockerFlipNormal: 0 + - _RenderingAOBlockerNote: 0 + - _RenderingAOBlockerUVChannel: 0 + - _RenderingEarlyZEnabled: 0 + - _RenderingReduceClipDistance: 0 + - _RgbAlphaGlobalMaskBlendType: 2 + - _RgbAlphaGlobalMaskChannel: 0 + - _RgbAlphaMaskChannel: 3 + - _RgbBlueGlobalMaskBlendType: 2 + - _RgbBlueGlobalMaskChannel: 0 + - _RgbBlueMaskChannel: 2 + - _RgbGreenGlobalMaskBlendType: 2 + - _RgbGreenGlobalMaskChannel: 0 + - _RgbGreenMaskChannel: 1 + - _RgbNormalAGlobalMaskBlendType: 2 + - _RgbNormalAGlobalMaskChannel: 0 + - _RgbNormalAMaskChannel: 3 + - _RgbNormalAScale: 0 + - _RgbNormalAStochastic: 0 + - _RgbNormalAUV: 0 + - _RgbNormalAlphaBlendMode: 0 + - _RgbNormalBGlobalMaskBlendType: 2 + - _RgbNormalBGlobalMaskChannel: 0 + - _RgbNormalBMaskChannel: 2 + - _RgbNormalBScale: 0 + - _RgbNormalBStochastic: 0 + - _RgbNormalBUV: 0 + - _RgbNormalBlueBlendMode: 0 + - _RgbNormalGGlobalMaskBlendType: 2 + - _RgbNormalGGlobalMaskChannel: 0 + - _RgbNormalGMaskChannel: 1 + - _RgbNormalGScale: 0 + - _RgbNormalGStochastic: 0 + - _RgbNormalGUV: 0 + - _RgbNormalGreenBlendMode: 0 + - _RgbNormalRGlobalMaskBlendType: 2 + - _RgbNormalRGlobalMaskChannel: 0 + - _RgbNormalRMaskChannel: 0 + - _RgbNormalRScale: 0 + - _RgbNormalRStochastic: 0 + - _RgbNormalRUV: 0 + - _RgbNormalRedBlendMode: 0 + - _RgbRedGlobalMaskBlendType: 2 + - _RgbRedGlobalMaskChannel: 0 + - _RgbRedMaskChannel: 0 + - _Rim2ApColorThemeIndex: 0 + - _Rim2ApplyAlpha: 0 + - _Rim2ApplyAlphaBlend: 1 + - _Rim2ApplyGlobalMaskBlendType: 2 + - _Rim2ApplyGlobalMaskIndex: 0 + - _Rim2BackfaceMask: 1 + - _Rim2BaseColorMix: 0 + - _Rim2BiasIntensity: 0 + - _Rim2BlendMode: 1 + - _Rim2BlendStrength: 1 + - _Rim2Blur: 0.65 + - _Rim2Border: 0.5 + - _Rim2Brightness: 1 + - _Rim2ColorTexUV: 0 + - _Rim2DirRange: 0 + - _Rim2DirStrength: 0 + - _Rim2EnableLighting: 1 + - _Rim2FresnelPower: 3.5 + - _Rim2GlobalMask: 0 + - _Rim2GlobalMaskBlendType: 2 + - _Rim2HueSelectOrShift: 1 + - _Rim2HueShift: 0 + - _Rim2HueShiftColorSpace: 0 + - _Rim2HueShiftEnabled: 0 + - _Rim2HueShiftSpeed: 0 + - _Rim2IndirBlur: 0.1 + - _Rim2IndirBorder: 0.5 + - _Rim2IndirRange: 0 + - _Rim2LightColorThemeIndex: 0 + - _Rim2Light_FeatherOff: 0 + - _Rim2Light_InsideMask: 0.0001 + - _Rim2Light_Power: 0.1 + - _Rim2LightingInvert: 0 + - _Rim2MainStrength: 0 + - _Rim2MaskChannel: 0 + - _Rim2MaskInvert: 0 + - _Rim2MaskOnlyMask: 0 + - _Rim2MaskUV: 0 + - _Rim2NormalStrength: 1 + - _Rim2Power: 1 + - _Rim2ShadowMask: 0.5 + - _Rim2ShadowMaskInvert: 0 + - _Rim2ShadowMaskRampType: 0 + - _Rim2ShadowMaskStrength: 1 + - _Rim2ShadowToggle: 0 + - _Rim2ShadowWidth: 0 + - _Rim2Sharpness: 0.25 + - _Rim2Strength: 0 + - _Rim2Style: 0 + - _Rim2TexUV: 0 + - _Rim2VRParallaxStrength: 1 + - _Rim2Width: 0.8 + - _RimApColorThemeIndex: 0 + - _RimApplyAlpha: 0 + - _RimApplyAlphaBlend: 1 + - _RimApplyGlobalMaskBlendType: 2 + - _RimApplyGlobalMaskIndex: 0 + - _RimBackfaceMask: 1 + - _RimBaseColorMix: 0 + - _RimBiasIntensity: 0 + - _RimBlendMode: 1 + - _RimBlendStrength: 1 + - _RimBlur: 0.65 + - _RimBorder: 0.5 + - _RimBrightness: 1 + - _RimColorTexUV: 0 + - _RimDirRange: 0 + - _RimDirStrength: 0 + - _RimEnableLighting: 1 + - _RimEnviroBlur: 0.7 + - _RimEnviroChannel: 0 + - _RimEnviroIntensity: 1 + - _RimEnviroMaskUV: 0 + - _RimEnviroMinBrightness: 0 + - _RimEnviroSharpness: 0 + - _RimEnviroWidth: 0.45 + - _RimFresnelPower: 3.5 + - _RimGlobalMask: 0 + - _RimGlobalMaskBlendType: 2 + - _RimHueSelectOrShift: 1 + - _RimHueShift: 0 + - _RimHueShiftColorSpace: 0 + - _RimHueShiftEnabled: 0 + - _RimHueShiftSpeed: 0 + - _RimIndirBlur: 0.1 + - _RimIndirBorder: 0.5 + - _RimIndirRange: 0 + - _RimLightColorThemeIndex: 0 + - _RimLight_FeatherOff: 0 + - _RimLight_InsideMask: 0.0001 + - _RimLight_Power: 0.1 + - _RimLightingInvert: 0 + - _RimMainStrength: 0 + - _RimMaskChannel: 0 + - _RimMaskInvert: 0 + - _RimMaskOnlyMask: 0 + - _RimMaskUV: 0 + - _RimNormalStrength: 1 + - _RimPoi2BlendMode: 0 + - _RimPoiBlendMode: 0 + - _RimPower: 1 + - _RimShadowMask: 0.5 + - _RimShadowMaskInvert: 0 + - _RimShadowMaskRampType: 0 + - _RimShadowMaskStrength: 1 + - _RimShadowToggle: 0 + - _RimShadowWidth: 0 + - _RimSharpness: 0.25 + - _RimStrength: 0 + - _RimStyle: 0 + - _RimTexUV: 0 + - _RimVRParallaxStrength: 1 + - _RimWidth: 0.8 + - _RoughnessAnisotropy: 1 + - _SDFBlur: 0.1 + - _SDFShadingTextureUV: 0 + - _SFExposureOcclusion: 0 + - _SSAOAlphaFade: 1 + - _SSAOAnimationToggle: 1 + - _SSAOApplyGlobalMaskBlendType: 0 + - _SSAOApplyGlobalMaskIndex: 0 + - _SSAOAsRamp: 0 + - _SSAOBias: 0.003 + - _SSAOBlendType: 2 + - _SSAOCenterImportance: 1 + - _SSAOColorMapUV: 0 + - _SSAOColorThemeIndex: 0 + - _SSAOCone: 0 + - _SSAODepthGetWarning: 0 + - _SSAOEnableColorTexture: 0 + - _SSAOEnableMaskTexture: 0 + - _SSAOEnabled: 0 + - _SSAOFalloffEnd: 8 + - _SSAOFalloffStart: 6 + - _SSAOGlobalMaskBlendType: 2 + - _SSAOGlobalMaskIndex: 0 + - _SSAOHideByRampedLightMap: 0 + - _SSAOIntensity: 1 + - _SSAOMaskChannel: 0 + - _SSAOMaskInvert: 0 + - _SSAOMaskUV: 0 + - _SSAOQuality: 2.4 + - _SSAORadius: 0.002 + - _SSAORandomScale: 0 + - _SSAOUseNormals: 0 + - _SSAOUseSurfaceColor: 0 + - _SSIgnoreCastedShadows: 0 + - _SSSBaseColorMix: 0 + - _SSSDistortion: 1 + - _SSSSpread: 5 + - _SSSStrength: 0.25 + - _SSSThicknessMapChannel: 0 + - _SSSThicknessMapUV: 0 + - _SSSThicknessMod: -1 + - _Saturation: 0 + - _ScrollingEmission: 0 + - _ScrollingEmission1: 0 + - _ScrollingEmission2: 0 + - _ScrollingEmission3: 0 + - _Set_HighColorMaskChannel: 1 + - _Set_HighColorMaskUV: 0 + - _Set_Rim2LightMaskChannel: 1 + - _Set_Rim2LightMaskUV: 0 + - _Set_RimLightMaskChannel: 1 + - _Set_RimLightMaskUV: 0 + - _ShadeColor_Step: 0 + - _ShaderOptimizerEnabled: 1 + - _ShaderUIWarning0: -0 + - _ShaderUIWarning1: -0 + - _ShadingEnabled: 1 + - _ShadingRampedLightMapApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapApplyGlobalMaskIndex: 0 + - _ShadingRampedLightMapInverseApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapInverseApplyGlobalMaskIndex: 0 + - _ShadingShadeMapBlendType: 0 + - _Shadow2ndBlur: 0.3 + - _Shadow2ndBorder: 0.5 + - _Shadow2ndColorTexUV: 0 + - _Shadow2ndReceive: 0 + - _Shadow3rdBlur: 0.1 + - _Shadow3rdBorder: 0.25 + - _Shadow3rdColorTexUV: 0 + - _Shadow3rdReceive: 0 + - _ShadowBlur: 0.1 + - _ShadowBorder: 0.5 + - _ShadowBorderMapToggle: 0 + - _ShadowBorderMaskLOD: 0 + - _ShadowBorderMaskUV: 0 + - _ShadowBorderRange: 0 + - _ShadowColorTexUV: 0 + - _ShadowEnvStrength: 0 + - _ShadowFlatBlur: 1 + - _ShadowFlatBorder: 1 + - _ShadowMainStrength: 0 + - _ShadowMaskType: 0 + - _ShadowOffset: 0 + - _ShadowPostAO: 0 + - _ShadowReceive: 0 + - _ShadowStrength: 1 + - _ShadowStrengthMaskUV: 0 + - _Shape1Depth: 0.1 + - _Shape1Duration: 0.1 + - _Shape2Depth: 0.2 + - _Shape2Duration: 0.1 + - _Shape3Depth: 0.3 + - _Shape3Duration: 0.1 + - _SkinThicknessMapInvert: 0 + - _SkinThicknessMapUV: 0 + - _SkinThicknessPower: 1 + - _Smoothness: 1 + - _SmoothnessTextureChannel: 0 + - _Specular2ndLayer: 0 + - _SpecularBlur: 0 + - _SpecularBorder: 0.5 + - _SpecularHighlights: 1 + - _SpecularNormalStrength: 1 + - _SpecularToon: 1 + - _SphericalDissolveClamp: 0 + - _SphericalDissolveInvert: 0 + - _SphericalDissolveRadius: 1.5 + - _Squeeze: 0 + - _SqueezeDist: 0 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _SssBumpBlur: 0.7 + - _SssScale: 1 + - _StencilBackCompareFunction: 8 + - _StencilBackFailOp: 0 + - _StencilBackPassOp: 0 + - _StencilBackZFailOp: 0 + - _StencilCompareFunction: 8 + - _StencilFailOp: 0 + - _StencilFrontCompareFunction: 8 + - _StencilFrontFailOp: 0 + - _StencilFrontPassOp: 0 + - _StencilFrontZFailOp: 0 + - _StencilPassOp: 0 + - _StencilReadMask: 255 + - _StencilRef: 0 + - _StencilType: 0 + - _StencilWriteMask: 255 + - _StencilZFailOp: 0 + - _StereoEnabled: 0 + - _StochasticDeliotHeitzDensity: 1 + - _StochasticHexFallOffContrast: 0.6 + - _StochasticHexFallOffPower: 7 + - _StochasticHexGridDensity: 1 + - _StochasticHexRotationStrength: 0 + - _StochasticMode: 0 + - _StylizedReflectionMode: 0 + - _StylizedSpecular: 0 + - _StylizedSpecular2Feather: 0 + - _StylizedSpecularFeather: 0 + - _StylizedSpecularIgnoreNormal: 0 + - _StylizedSpecularIgnoreShadow: 0 + - _StylizedSpecularInvertMask: 0 + - _StylizedSpecularNormalStrength: 1 + - _StylizedSpecularStrength: 1 + - _SubsurfaceScattering: 0 + - _TPSHelpbox: 0 + - _TPSPenetratorEnabled: 0 + - _TPS_AnimatedToggle: 1 + - _TPS_BezierSmoothness: 0.4 + - _TPS_BezierStart: 0 + - _TPS_BufferedDepth: 0 + - _TPS_BufferedStrength: 0 + - _TPS_Buldge: 0.3 + - _TPS_BuldgeDistance: 0.2 + - _TPS_BuldgeFalloffDistance: 0.05 + - _TPS_Channel: 0 + - _TPS_ChannelWarning: 0 + - _TPS_IdleGravity: 0 + - _TPS_IdleSkrinkLength: 1 + - _TPS_IdleSkrinkWidth: 1 + - _TPS_IsSkinnedMeshRenderer: 0 + - _TPS_PenetratorLength: 1 + - _TPS_PumpingSpeed: 1 + - _TPS_PumpingStrength: 0 + - _TPS_PumpingWidth: 0.2 + - _TPS_SmoothStart: 1 + - _TPS_Squeeze: 0.3 + - _TPS_SqueezeDistance: 0.2 + - _TextEnabled: 0 + - _TextFPSColorThemeIndex: 0 + - _TextFPSEmissionStrength: 0 + - _TextFPSEnabled: 0 + - _TextFPSRotation: 0 + - _TextFPSUV: 0 + - _TextNumericColorThemeIndex: 0 + - _TextNumericDecimalDigits: 0 + - _TextNumericEmissionStrength: 0 + - _TextNumericEnabled: 0 + - _TextNumericRotation: 0 + - _TextNumericTrimZeroes: 0 + - _TextNumericUV: 0 + - _TextNumericValue: 0 + - _TextNumericWholeDigits: 4 + - _TextPixelRange: 4 + - _TextPositionColorThemeIndex: 0 + - _TextPositionEmissionStrength: 0 + - _TextPositionEnabled: 0 + - _TextPositionRotation: 0 + - _TextPositionUV: 0 + - _TextTimeColorThemeIndex: 0 + - _TextTimeEmissionStrength: 0 + - _TextTimeEnabled: 0 + - _TextTimeRotation: 0 + - _TextTimeUV: 0 + - _ToonRampCount: 1 + - _ToonRampUVSelector: 1 + - _TruchetALAlphaBand: 0 + - _TruchetALAlphaToggle: 0 + - _TruchetALEmissionBand: 0 + - _TruchetALEmissionToggle: 0 + - _TruchetAlpha: 1 + - _TruchetBlendType: 0 + - _TruchetChronoPanBand: 0 + - _TruchetChronoPanToggle: 0 + - _TruchetChronoPanType: 0 + - _TruchetColorThemeIndex: 0 + - _TruchetDensity: 10 + - _TruchetEdgeSharpness: 1 + - _TruchetEmissionStrength: 0 + - _TruchetHideWhenNoAL: 0 + - _TruchetMaskChannel: 0 + - _TruchetMaskGlobalMask: 0 + - _TruchetMaskGlobalMaskBlendType: 2 + - _TruchetMaskIntensity: 1 + - _TruchetMaskInvert: 0 + - _TruchetMaskUV: 0 + - _TruchetOverrideAlpha: 0 + - _TruchetThiccness: 0.1 + - _TruchetUV: 0 + - _Tweak_HighColorMaskLevel: 0 + - _Tweak_LightDirection_MaskLevel: 0 + - _Tweak_LightDirection_MaskLevel2: 0 + - _Tweak_Rim2LightMaskLevel: 0 + - _Tweak_RimLightMaskLevel: 0 + - _UDIMDiscardHelpbox: 0 + - _UDIMDiscardMode: 0 + - _UDIMDiscardRow0_0: 0 + - _UDIMDiscardRow0_1: 0 + - _UDIMDiscardRow0_2: 0 + - _UDIMDiscardRow0_3: 0 + - _UDIMDiscardRow1_0: 0 + - _UDIMDiscardRow1_1: 0 + - _UDIMDiscardRow1_2: 0 + - _UDIMDiscardRow1_3: 0 + - _UDIMDiscardRow2_0: 0 + - _UDIMDiscardRow2_1: 0 + - _UDIMDiscardRow2_2: 0 + - _UDIMDiscardRow2_3: 0 + - _UDIMDiscardRow3_0: 0 + - _UDIMDiscardRow3_1: 0 + - _UDIMDiscardRow3_2: 0 + - _UDIMDiscardRow3_3: 0 + - _UDIMDiscardUV: 0 + - _UDIMFaceDiscardFace: 0 + - _UDIMFaceDiscardRow0_0: 0 + - _UDIMFaceDiscardRow0_1: 0 + - _UDIMFaceDiscardRow0_2: 0 + - _UDIMFaceDiscardRow0_3: 0 + - _UDIMFaceDiscardRow1_0: 0 + - _UDIMFaceDiscardRow1_1: 0 + - _UDIMFaceDiscardRow1_2: 0 + - _UDIMFaceDiscardRow1_3: 0 + - _UDIMFaceDiscardRow2_0: 0 + - _UDIMFaceDiscardRow2_1: 0 + - _UDIMFaceDiscardRow2_2: 0 + - _UDIMFaceDiscardRow2_3: 0 + - _UDIMFaceDiscardRow3_0: 0 + - _UDIMFaceDiscardRow3_1: 0 + - _UDIMFaceDiscardRow3_2: 0 + - _UDIMFaceDiscardRow3_3: 0 + - _UDIMFaceDiscardUV: 0 + - _UVModLocalPos0: 0 + - _UVModLocalPos1: 1 + - _UVModWorldPos0: 0 + - _UVModWorldPos1: 2 + - _UVSec: 0 + - _UVTileDissolveAlpha_Row0_0: 0 + - _UVTileDissolveAlpha_Row0_1: 0 + - _UVTileDissolveAlpha_Row0_2: 0 + - _UVTileDissolveAlpha_Row0_3: 0 + - _UVTileDissolveAlpha_Row1_0: 0 + - _UVTileDissolveAlpha_Row1_1: 0 + - _UVTileDissolveAlpha_Row1_2: 0 + - _UVTileDissolveAlpha_Row1_3: 0 + - _UVTileDissolveAlpha_Row2_0: 0 + - _UVTileDissolveAlpha_Row2_1: 0 + - _UVTileDissolveAlpha_Row2_2: 0 + - _UVTileDissolveAlpha_Row2_3: 0 + - _UVTileDissolveAlpha_Row3_0: 0 + - _UVTileDissolveAlpha_Row3_1: 0 + - _UVTileDissolveAlpha_Row3_2: 0 + - _UVTileDissolveAlpha_Row3_3: 0 + - _UVTileDissolveDiscardAtMax: 1 + - _UVTileDissolveEnabled: 0 + - _UVTileDissolveUV: 0 + - _Unlit_Intensity: 1 + - _UseLightColor: 1 + - _UseReflection: 0 + - _Use_1stAs2nd: 0 + - _Use_1stShadeMapAlpha_As_ShadowMask: 0 + - _Use_2ndShadeMapAlpha_As_ShadowMask: 0 + - _Use_BaseAs1st: 0 + - _UzumoreAmount: 0.1 + - _UzumoreBias: 0.001 + - _UzumoreCategoryToggle: 0 + - _UzumoreEnabled: 1 + - _UzumoreMaskUV: 3 + - _VertexAudioLinkEnabled: 0 + - _VertexBarrelAlpha: 0 + - _VertexBarrelHeight: 0 + - _VertexBarrelMaskChannel: 0 + - _VertexBarrelMode: 0 + - _VertexBarrelWidth: 0.2 + - _VertexBasicsMaskChannel: 0 + - _VertexGlitchDensity: 10 + - _VertexGlitchFrequency: 1 + - _VertexGlitchMapPanSpeed: 10 + - _VertexGlitchMirror: 0 + - _VertexGlitchMirrorEnable: 0 + - _VertexGlitchStrength: 1 + - _VertexGlitchThreshold: 1 + - _VertexGlitchingAudioLinkBand: 0 + - _VertexGlitchingAudioLinkEnabled: 0 + - _VertexGlitchingAudiolinkOverride: 1 + - _VertexGlitchingEnabled: 0 + - _VertexGlitchingUseTexture: 0 + - _VertexLocalRotationALBandX: 0 + - _VertexLocalRotationALBandY: 0 + - _VertexLocalRotationALBandZ: 0 + - _VertexLocalRotationCTALBandX: 0 + - _VertexLocalRotationCTALBandY: 0 + - _VertexLocalRotationCTALBandZ: 0 + - _VertexLocalRotationCTALTypeX: 0 + - _VertexLocalRotationCTALTypeY: 0 + - _VertexLocalRotationCTALTypeZ: 0 + - _VertexLocalScaleALBand: 0 + - _VertexLocalTranslationALBand: 0 + - _VertexLookAtAudioLinkBand: 0 + - _VertexLookAtAudioLinkEnabled: 0 + - _VertexLookAtEnabled: 0 + - _VertexManipulationHeight: 0 + - _VertexManipulationHeightBand: 0 + - _VertexManipulationHeightBias: 0 + - _VertexManipulationHeightMapChannel: 0 + - _VertexManipulationHeightMaskChannel: 0 + - _VertexManipulationHeightMaskUV: 0 + - _VertexManipulationsEnabled: 0 + - _VertexRoundingDivision: 0.02 + - _VertexRoundingEnabled: 0 + - _VertexRoundingMaskChannel: 0 + - _VertexRoundingRangeBand: 0 + - _VertexRoundingSpace: 0 + - _VertexSpectrumMotion: 0 + - _VertexSpectrumUV: 0 + - _VertexSpectrumUVDirection: 0 + - _VertexSphereAlpha: 0 + - _VertexSphereHeight: 1 + - _VertexSphereMaskChannel: 0 + - _VertexSphereMode: 0 + - _VertexSphereRadius: 1 + - _VertexTornadoBaseHeight: 0 + - _VertexTornadoFunnelShape: 1 + - _VertexTornadoIntensity: 100 + - _VertexTornadoMaskChannel: 0 + - _VertexTornadoMode: 0 + - _VertexTornadoRadius: 1 + - _VertexTornadoSpeed: 5 + - _VertexTornadoTopHeight: 1 + - _VertexTornadoVerticalPull: 0 + - _VertexWindDetailAmplitude: 0.05 + - _VertexWindDetailFrequency: 5 + - _VertexWindDetailSpeed: 2.5 + - _VertexWindEnabled: 0 + - _VertexWindMaskChannel: 0 + - _VertexWindNoiseChannel: 0 + - _VertexWindNoiseScale: 10 + - _VertexWindNoiseSpeed: 0.5 + - _VertexWindNoiseStrength: 0.5 + - _VertexWindPrimaryAmplitude: 0.1 + - _VertexWindPrimaryFrequency: 1 + - _VertexWindPrimarySpeed: 1 + - _VertexWorldTranslationALBand: 0 + - _VideoBacklight: 1 + - _VideoCRTPixelEnergizedTime: 1.9 + - _VideoCRTRefreshRate: 24 + - _VideoContrast: 0 + - _VideoEffectsEnable: 0 + - _VideoEmissionEnabled: 1 + - _VideoMaskTextureChannel: 0 + - _VideoMaskTextureUV: 0 + - _VideoPixelTextureUV: 0 + - _VideoPixelateToResolution: 0 + - _VideoSaturation: 0 + - _VideoType: 3 + - _VisibilityMode: 1 + - _VisibilityVRCCameraDesktop: 1 + - _VisibilityVRCCameraScreenshot: 1 + - _VisibilityVRCCameraVR: 1 + - _VisibilityVRCMirrorDesktop: 1 + - _VisibilityVRCMirrorVR: 1 + - _VisibilityVRCRegular: 1 + - _VoronoiAffectsMaterialAlpha: 0 + - _VoronoiBlend: 0 + - _VoronoiEnableRandomCellColor: 0 + - _VoronoiEnabled: 0 + - _VoronoiGlobalMask: 0 + - _VoronoiGlobalMaskBlendType: 2 + - _VoronoiInnerEmissionStrength: 0 + - _VoronoiMaskChannel: 0 + - _VoronoiMaskUV: 0 + - _VoronoiNoiseChannel: 0 + - _VoronoiNoiseIntensity: 0.1 + - _VoronoiNoiseUV: 0 + - _VoronoiOuterEmissionStrength: 0 + - _VoronoiPower: 0.45454544 + - _VoronoiScale: 5 + - _VoronoiSpace: 0 + - _VoronoiType: 1 + - _Wriggle: 0 + - _WriggleSpeed: 0.28 + - _ZClip: 1 + - _ZTest: 4 + - _ZWrite: 1 + - _ppHueSelectOrShift: 1 + - footer_bluesky: 0 + - footer_discord: 0 + - footer_github: 0 + - footer_patreon: 0 + - footer_twitter: 0 + - footer_website: 0 + - footer_youtube: 0 + - g_end_tps_bezier: 0 + - g_end_tps_buldge: 0 + - g_end_tps_idle: 0 + - g_end_tps_pulsing: 0 + - g_end_tps_squeeze: 0 + - g_start_tps_bezier: 0 + - g_start_tps_buldge: 0 + - g_start_tps_idle: 0 + - g_start_tps_pulsing: 0 + - g_start_tps_squeeze: 0 + - m_AudioLinkCategory: 0 + - m_OutlineCategory: 0 + - m_end_ALDecalSpectrum: 0 + - m_end_ALVolumeColor: 0 + - m_end_Alpha: 0 + - m_end_Ansio: 0 + - m_end_BeatsaberBloomFog: 0 + - m_end_BeatsaberOptions: 0 + - m_end_BlackLightMasking: 0 + - m_end_BonusSliders: 0 + - m_end_CRT: 0 + - m_end_CenterOutDissolve: 0 + - m_end_ColorAdjust: 0 + - m_end_CubeMap: 0 + - m_end_Decal0: 0 + - m_end_Decal0AudioLink: 0 + - m_end_Decal1: 0 + - m_end_Decal1AudioLink: 0 + - m_end_Decal2: 0 + - m_end_Decal2AudioLink: 0 + - m_end_Decal3: 0 + - m_end_Decal3AudioLink: 0 + - m_end_DecalSection: 0 + - m_end_DepthBulge: 0 + - m_end_DetailOptions: 0 + - m_end_DistortionAudioLink: 0 + - m_end_FXProximityColor: 0 + - m_end_FlipbookAudioLink: 0 + - m_end_Gameboy: 0 + - m_end_GlobalMask: 0 + - m_end_GlobalMaskDistanceM_0: 0 + - m_end_GlobalMaskDistanceM_1: 0 + - m_end_GlobalMaskDistanceM_10: 0 + - m_end_GlobalMaskDistanceM_11: 0 + - m_end_GlobalMaskDistanceM_12: 0 + - m_end_GlobalMaskDistanceM_13: 0 + - m_end_GlobalMaskDistanceM_14: 0 + - m_end_GlobalMaskDistanceM_15: 0 + - m_end_GlobalMaskDistanceM_2: 0 + - m_end_GlobalMaskDistanceM_3: 0 + - m_end_GlobalMaskDistanceM_4: 0 + - m_end_GlobalMaskDistanceM_5: 0 + - m_end_GlobalMaskDistanceM_6: 0 + - m_end_GlobalMaskDistanceM_7: 0 + - m_end_GlobalMaskDistanceM_8: 0 + - m_end_GlobalMaskDistanceM_9: 0 + - m_end_GlobalMaskModifiers: 0 + - m_end_GlobalMaskModifiersBackface: 0 + - m_end_GlobalMaskModifiersCamera: 0 + - m_end_GlobalMaskModifiersDistance: 0 + - m_end_GlobalMaskModifiersMirror: 0 + - m_end_GlobalMaskOptions: 0 + - m_end_GlobalMaskTextures: 0 + - m_end_GlobalMaskVertexColors: 0 + - m_end_GlobalThemeColor0: 0 + - m_end_GlobalThemeColor1: 0 + - m_end_GlobalThemeColor2: 0 + - m_end_GlobalThemeColor3: 0 + - m_end_GlobalThemes: 0 + - m_end_LTCGI: 0 + - m_end_MainVertexColors: 0 + - m_end_Matcap2: 0 + - m_end_Matcap3: 0 + - m_end_Matcap4: 0 + - m_end_OutlineAudioLink: 0 + - m_end_OutlineStencil: 0 + - m_end_OutlineStencilPassBackOptions: 0 + - m_end_OutlineStencilPassFrontOptions: 0 + - m_end_PPAnimations: 0 + - m_end_PathAudioLink: 0 + - m_end_PoiGlobalCategory: 0 + - m_end_PoiLightData: 0 + - m_end_PoiPostProcessingCategory: 0 + - m_end_PoiShading: 0 + - m_end_PoiUVCategory: 0 + - m_end_RGBMask: 0 + - m_end_Rim2AudioLink: 0 + - m_end_RimAudioLink: 0 + - m_end_SphericalDissolve: 0 + - m_end_StencilPassBackOptions: 0 + - m_end_StencilPassFrontOptions: 0 + - m_end_StencilPassOptions: 0 + - m_end_Stochastic: 0 + - m_end_Text: 0 + - m_end_TextFPS: 0 + - m_end_TextInstanceTime: 0 + - m_end_TextNumeric: 0 + - m_end_TextPosition: 0 + - m_end_TruchetAudioLink: 0 + - m_end_UVTileDissolve: 0 + - m_end_Uzumore: 0 + - m_end_VideoSettings: 0 + - m_end_VoronoiAudioLink: 0 + - m_end_WorldAOBlocker: 0 + - m_end_alphaBlending: 0 + - m_end_audioLink: 0 + - m_end_audioLinkOverrides: 0 + - m_end_backFace: 0 + - m_end_backlight: 0 + - m_end_bakedLighting: 0 + - m_end_blending: 0 + - m_end_brdf: 0 + - m_end_clearCoat: 0 + - m_end_clearcoatadvanced: 0 + - m_end_clearcoatglobalmask: 0 + - m_end_depthFX: 0 + - m_end_depthRimLightOptions: 0 + - m_end_dissolve: 0 + - m_end_dissolveHueShift: 0 + - m_end_emission1Options: 0 + - m_end_emission2Options: 0 + - m_end_emission3Options: 0 + - m_end_emissionOptions: 0 + - m_end_flipBook: 0 + - m_end_glitter: 0 + - m_end_internalparallax: 0 + - m_end_matcap: 0 + - m_end_mirrorOptions: 0 + - m_end_normalCorrect: 0 + - m_end_outlineAlphaBlending: 0 + - m_end_outlineBlending: 0 + - m_end_parallax: 0 + - m_end_pathing: 0 + - m_end_pen_autoConfig: 0 + - m_end_poiSSAO: 0 + - m_end_pointToPoint: 0 + - m_end_postprocess: 0 + - m_end_raliv: 0 + - m_end_ralivAdvanced: 0 + - m_end_ralivOriface: 0 + - m_end_ralivPenetrator: 0 + - m_end_reflectionRim: 0 + - m_end_rim1LightOptions: 0 + - m_end_rim2LightOptions: 0 + - m_end_stylizedSpec: 0 + - m_end_subsurfaceScattering: 0 + - m_end_tps_penetrator: 0 + - m_end_truchet: 0 + - m_end_udimdiscardOptions: 0 + - m_end_udimfacediscardOptions: 0 + - m_end_uvDistortion: 0 + - m_end_uvLocalWorld: 0 + - m_end_uvPanosphere: 0 + - m_end_uvPolar: 0 + - m_end_vertexGlitching: 0 + - m_end_vertexLookAt: 0 + - m_end_vertexManipulation: 0 + - m_end_videoEffects: 0 + - m_end_voronoi: 0 + - m_end_voronoiRandom: 0 + - m_lightingCategory: 1 + - m_mainCategory: 1 + - m_modifierCategory: 0 + - m_renderingCategory: 0 + - m_specialFXCategory: 0 + - m_start_ALDecalSpectrum: 0 + - m_start_ALVolumeColor: 0 + - m_start_Alpha: 0 + - m_start_Aniso: 0 + - m_start_BeatsaberBloomFog: 0 + - m_start_BeatsaberOptions: 0 + - m_start_BlackLightMasking: 0 + - m_start_BonusSliders: 0 + - m_start_CRT: 0 + - m_start_CenterOutDissolve: 0 + - m_start_ColorAdjust: 0 + - m_start_CubeMap: 0 + - m_start_Decal0: 0 + - m_start_Decal0AudioLink: 0 + - m_start_Decal1: 0 + - m_start_Decal1AudioLink: 0 + - m_start_Decal2: 0 + - m_start_Decal2AudioLink: 0 + - m_start_Decal3: 0 + - m_start_Decal3AudioLink: 0 + - m_start_DecalSection: 0 + - m_start_DepthBulge: 0 + - m_start_DetailOptions: 1 + - m_start_DistortionAudioLink: 0 + - m_start_FXProximityColor: 0 + - m_start_FlipbookAudioLink: 0 + - m_start_Gameboy: 0 + - m_start_GlobalMask: 0 + - m_start_GlobalMaskDistanceM_0: 0 + - m_start_GlobalMaskDistanceM_1: 0 + - m_start_GlobalMaskDistanceM_10: 0 + - m_start_GlobalMaskDistanceM_11: 0 + - m_start_GlobalMaskDistanceM_12: 0 + - m_start_GlobalMaskDistanceM_13: 0 + - m_start_GlobalMaskDistanceM_14: 0 + - m_start_GlobalMaskDistanceM_15: 0 + - m_start_GlobalMaskDistanceM_2: 0 + - m_start_GlobalMaskDistanceM_3: 0 + - m_start_GlobalMaskDistanceM_4: 0 + - m_start_GlobalMaskDistanceM_5: 0 + - m_start_GlobalMaskDistanceM_6: 0 + - m_start_GlobalMaskDistanceM_7: 0 + - m_start_GlobalMaskDistanceM_8: 0 + - m_start_GlobalMaskDistanceM_9: 0 + - m_start_GlobalMaskModifiers: 0 + - m_start_GlobalMaskModifiersBackface: 0 + - m_start_GlobalMaskModifiersCamera: 0 + - m_start_GlobalMaskModifiersDistance: 0 + - m_start_GlobalMaskModifiersMirror: 0 + - m_start_GlobalMaskOptions: 0 + - m_start_GlobalMaskTextures: 0 + - m_start_GlobalMaskVertexColors: 0 + - m_start_GlobalThemeColor0: 0 + - m_start_GlobalThemeColor1: 0 + - m_start_GlobalThemeColor2: 0 + - m_start_GlobalThemeColor3: 0 + - m_start_GlobalThemes: 0 + - m_start_LTCGI: 0 + - m_start_MainVertexColors: 0 + - m_start_Matcap2: 0 + - m_start_Matcap3: 0 + - m_start_Matcap4: 0 + - m_start_OutlineAudioLink: 0 + - m_start_OutlineStencil: 0 + - m_start_OutlineStencilPassBackOptions: 0 + - m_start_OutlineStencilPassFrontOptions: 0 + - m_start_PPAnimations: 0 + - m_start_PathAudioLink: 0 + - m_start_PoiGlobalCategory: 0 + - m_start_PoiLightData: 0 + - m_start_PoiPostProcessingCategory: 0 + - m_start_PoiShading: 1 + - m_start_PoiUVCategory: 0 + - m_start_RGBMask: 0 + - m_start_Rim2AudioLink: 0 + - m_start_RimAudioLink: 0 + - m_start_SphericalDissolve: 0 + - m_start_StencilPassBackOptions: 0 + - m_start_StencilPassFrontOptions: 0 + - m_start_StencilPassOptions: 0 + - m_start_Stochastic: 0 + - m_start_Text: 0 + - m_start_TextFPS: 0 + - m_start_TextInstanceTime: 0 + - m_start_TextNumeric: 0 + - m_start_TextPosition: 0 + - m_start_TruchetAudioLink: 0 + - m_start_UVTileDissolve: 0 + - m_start_Uzumore: 0 + - m_start_VideoSettings: 0 + - m_start_VoronoiAudioLink: 0 + - m_start_WorldAOBlocker: 0 + - m_start_alphaBlending: 0 + - m_start_audioLink: 0 + - m_start_audioLinkOverrides: 0 + - m_start_backFace: 0 + - m_start_backlight: 0 + - m_start_bakedLighting: 0 + - m_start_blending: 0 + - m_start_brdf: 1 + - m_start_clearCoat: 0 + - m_start_clearcoatadvanced: 0 + - m_start_clearcoatglobalmask: 0 + - m_start_depthFX: 0 + - m_start_depthRimLightOptions: 0 + - m_start_dissolve: 0 + - m_start_dissolveHueShift: 0 + - m_start_emission1Options: 0 + - m_start_emission2Options: 0 + - m_start_emission3Options: 0 + - m_start_emissionOptions: 0 + - m_start_flipBook: 0 + - m_start_glitter: 0 + - m_start_internalparallax: 0 + - m_start_matcap: 0 + - m_start_mirrorOptions: 0 + - m_start_normalCorrect: 0 + - m_start_outlineAlphaBlending: 0 + - m_start_outlineBlending: 0 + - m_start_parallax: 0 + - m_start_pathing: 0 + - m_start_pen_autoConfig: 0 + - m_start_poiSSAO: 0 + - m_start_pointToPoint: 0 + - m_start_postprocess: 0 + - m_start_raliv: 0 + - m_start_ralivAdvanced: 0 + - m_start_ralivOriface: 0 + - m_start_ralivPenetrator: 0 + - m_start_reflectionRim: 0 + - m_start_rim2LightOptions: 0 + - m_start_rimLight1Options: 0 + - m_start_stylizedSpec: 0 + - m_start_subsurfaceScattering: 0 + - m_start_tps_penetrator: 0 + - m_start_truchet: 0 + - m_start_udimdiscardOptions: 0 + - m_start_udimfacediscardOptions: 0 + - m_start_uvDistortion: 0 + - m_start_uvLocalWorld: 0 + - m_start_uvPanosphere: 0 + - m_start_uvPolar: 0 + - m_start_vertexGlitching: 0 + - m_start_vertexLookAt: 0 + - m_start_vertexManipulation: 0 + - m_start_videoEffects: 0 + - m_start_voronoi: 0 + - m_start_voronoiRandom: 0 + - m_thirdpartyCategory: 0 + - m_vertexCategory: 0 + - s_end_ALAlpha: 0 + - s_end_ALDecalAudioModsOptions: 0 + - s_end_ALDecalBand: 0 + - s_end_ALDecalColorsBlendingOptions: 0 + - s_end_ALDecalShapeClipOptions: 0 + - s_end_ALDecalVolumeOptions: 0 + - s_end_ALSpectrumMotion: 0 + - s_end_ALVertexGlitching: 0 + - s_end_ALVertexHeight: 0 + - s_end_ALVertexLookAtAL: 0 + - s_end_AlphaAdvanced: 0 + - s_end_AlphaAngular: 0 + - s_end_AlphaDistanceFade: 0 + - s_end_AlphaDithering: 0 + - s_end_AlphaFresnel: 0 + - s_end_AlphaToCoverage: 0 + - s_end_AnisoBottomLayer: 0 + - s_end_AnisoTopLayer: 1 + - s_end_AudioLinkBandOverrides: 0 + - s_end_BRDFTPSMaskGroup: 0 + - s_end_BackFaceHueShift: 0 + - s_end_BackfaceMods: 0 + - s_end_CCopt: 1 + - s_end_ClearCoatTPSMaskGroup: 0 + - s_end_ColorAdjustColorGrading: 0 + - s_end_ContinuousRotation: 0 + - s_end_CubeMapColorAdjust: 0 + - s_end_CubeMapMasking: 0 + - s_end_Decal0ChannelSeparation: 0 + - s_end_Decal0GlobalMasking: 0 + - s_end_Decal0HueShift: 0 + - s_end_Decal0Video: 0 + - s_end_Decal1ChannelSeparation: 0 + - s_end_Decal1GlobalMasking: 0 + - s_end_Decal1HueShift: 0 + - s_end_Decal1Video: 0 + - s_end_Decal2ChannelSeparation: 0 + - s_end_Decal2GlobalMasking: 0 + - s_end_Decal2HueShift: 0 + - s_end_Decal2Video: 0 + - s_end_Decal3ChannelSeparation: 0 + - s_end_Decal3GlobalMasking: 0 + - s_end_Decal3HueShift: 0 + - s_end_Decal3Video: 0 + - s_end_DecalTPSMaskGroup: 0 + - s_end_DepthAlpha: 0 + - s_end_DepthFXColorEmission: 0 + - s_end_DetailNormal: 0 + - s_end_DetailTexture: 0 + - s_end_DissolveAudioLink: 0 + - s_end_DissolvedMenu: 0 + - s_end_EdgeMenu: 0 + - s_end_EmissionAL0Add: 0 + - s_end_EmissionAL0COut: 0 + - s_end_EmissionAL0Multiply: 0 + - s_end_EmissionAL1Add: 0 + - s_end_EmissionAL1COut: 0 + - s_end_EmissionAL1Multiply: 0 + - s_end_EmissionAL2Add: 0 + - s_end_EmissionAL2COut: 0 + - s_end_EmissionAL2Multiply: 0 + - s_end_EmissionAL3Add: 0 + - s_end_EmissionAL3COut: 0 + - s_end_EmissionAL3Multiply: 0 + - s_end_EmissionBlinking0: 0 + - s_end_EmissionBlinking1: 0 + - s_end_EmissionBlinking2: 0 + - s_end_EmissionBlinking3: 0 + - s_end_EmissionCenterOut0: 0 + - s_end_EmissionCenterOut1: 0 + - s_end_EmissionCenterOut2: 0 + - s_end_EmissionCenterOut3: 0 + - s_end_EmissionHueShift0: 0 + - s_end_EmissionHueShift1: 0 + - s_end_EmissionHueShift2: 0 + - s_end_EmissionHueShift3: 0 + - s_end_EmissionLightBased0: 0 + - s_end_EmissionLightBased1: 0 + - s_end_EmissionLightBased2: 0 + - s_end_EmissionLightBased3: 0 + - s_end_FixedRimBlending: 0 + - s_end_FixedRimColor: 0 + - s_end_FixedRimShapeControl: 0 + - s_end_FlipbookCrossfade: 0 + - s_end_FlipbookHueShift: 0 + - s_end_FlipbookManualFrameControl: 0 + - s_end_FlipbookStartAndEnd: 0 + - s_end_GlitterAudioLink: 0 + - s_end_GlitterColorAndShape: 0 + - s_end_GlitterHueShiftSection: 0 + - s_end_GlitterMask: 0 + - s_end_GlitterPositionSize: 0 + - s_end_GlitterRotationSection: 0 + - s_end_GlitterSparkleControl: 0 + - s_end_GlobalMaskOptionsForceToggles: 0 + - s_end_GlobalMaskOptionsMinMaxSliders: 0 + - s_end_GlobalMaskOptionsSliders: 0 + - s_end_LightDataAddPass: 1 + - s_end_LightDataBasePass: 1 + - s_end_LightDataDebug: 0 + - s_end_LightDataSDF: 1 + - s_end_LocalRotation: 0 + - s_end_LocalTranslation: 0 + - s_end_LookAtAlphaMask: 0 + - s_end_LookAtBlueMask: 0 + - s_end_LookAtGreenMask: 0 + - s_end_LookAtRedMask: 0 + - s_end_LookAtVisibility: 0 + - s_end_MainHueShift: 0 + - s_end_MainHueShiftAL: 0 + - s_end_MainHueShiftGlobalMask: 0 + - s_end_MaskingMenu: 0 + - s_end_Matcap0AudioLink: 0 + - s_end_Matcap0Blending: 0 + - s_end_Matcap0Masking: 0 + - s_end_Matcap1AudioLink: 0 + - s_end_Matcap1Blending: 0 + - s_end_Matcap1HueShift: 0 + - s_end_Matcap1Masking: 0 + - s_end_Matcap1Normal: 0 + - s_end_Matcap1Smoothness: 0 + - s_end_Matcap2AudioLink: 0 + - s_end_Matcap2Blending: 0 + - s_end_Matcap2HueShift: 0 + - s_end_Matcap2Masking: 0 + - s_end_Matcap2Normal: 0 + - s_end_Matcap2Smoothness: 0 + - s_end_Matcap2TPSMaskGroup: 0 + - s_end_Matcap3AudioLink: 0 + - s_end_Matcap3Blending: 0 + - s_end_Matcap3HueShift: 0 + - s_end_Matcap3Masking: 0 + - s_end_Matcap3Normal: 0 + - s_end_Matcap3Smoothness: 0 + - s_end_Matcap3TPSMaskGroup: 0 + - s_end_Matcap4TPSMaskGroup: 0 + - s_end_MatcapHueShift: 0 + - s_end_MatcapNormal: 0 + - s_end_MatcapSmoothness: 0 + - s_end_MatcapTPSMaskGroup: 0 + - s_end_MirrorTexture: 0 + - s_end_MultilayerMath1stLayer: 1 + - s_end_MultilayerMath2ndLayer: 0 + - s_end_MultilayerMath3rdLayer: 0 + - s_end_MultilayerMathBorder: 1 + - s_end_MultilayerMathBorderMap: 1 + - s_end_MultilayerShadowMap: 0 + - s_end_OutlineAlphaDistanceFade: 0 + - s_end_OutlineColorAdjust: 0 + - s_end_OutlineFixedSize: 0 + - s_end_OutlineLighting: 0 + - s_end_OutlineRenderingOptions: 0 + - s_end_OutlineZOffset: 0 + - s_end_PBRSecondSpecular: 0 + - s_end_PBRSplitMaskSample: 0 + - s_end_ParallaxInternalHueShift: 0 + - s_end_ParallaxInternalLayerColoring: 0 + - s_end_ParallaxInternalLayerControls: 0 + - s_end_PathAppearance: 0 + - s_end_PathColors: 0 + - s_end_PathRemapping: 0 + - s_end_PathSourceDirections: 0 + - s_end_PathTypes: 0 + - s_end_Positioning: 0 + - s_end_RGBAlpha: 0 + - s_end_RGBBlue: 0 + - s_end_RGBGreen: 0 + - s_end_RGBRed: 0 + - s_end_RimLight0Color: 0 + - s_end_RimLight0GlobalMasking: 0 + - s_end_RimLight0HueShift: 0 + - s_end_RimLight0LightDirMask: 0 + - s_end_RimLight0ShapeControls: 0 + - s_end_RimLight1Color: 0 + - s_end_RimLight1GlobalMasking: 0 + - s_end_RimLight1HueShift: 0 + - s_end_RimLight1LightDirMask: 0 + - s_end_RimLight1ShapeControls: 0 + - s_end_RimLight2DirectionMask: 0 + - s_end_RimLightDirectionMask: 0 + - s_end_SSAOAdvanced: 0 + - s_end_SSAOColorAndMasking: 0 + - s_end_ScrollingEmission0: 0 + - s_end_ScrollingEmission1: 0 + - s_end_ScrollingEmission2: 0 + - s_end_ScrollingEmission3: 0 + - s_end_ShadingAddPass: 0 + - s_end_ShadingGlobalMask: 0 + - s_end_StylizedReflectionLilEnviroReflections: 1 + - s_end_StylizedReflectionLilSpecular: 1 + - s_end_StylizedReflectionMode0: 1 + - s_end_StylizedReflectionMode1: 1 + - s_end_StylizedSpecularAdvanced: 0 + - s_end_StylizedSpecularLayer0: 0 + - s_end_StylizedSpecularLayer1: 0 + - s_end_TimingOptions: 0 + - s_end_TransitionMenu: 0 + - s_end_UVTileDissolveRow0: 0 + - s_end_UVTileDissolveRow1: 0 + - s_end_UVTileDissolveRow2: 0 + - s_end_UVTileDissolveRow3: 0 + - s_end_VertAL: 0 + - s_end_VertexBarrelMode: 0 + - s_end_VertexColors: 0 + - s_end_VertexGlitchMirror: 0 + - s_end_VertexGlitchTexture: 0 + - s_end_VertexManipulationHeight: 0 + - s_end_VertexRoundingAL: 0 + - s_end_VertexScale: 0 + - s_end_VertexSphereMode: 0 + - s_end_VertexTornadoMode: 0 + - s_end_VertexWind: 0 + - s_end_WorldTranslation: 0 + - s_end_brdfadvanced: 0 + - s_end_decal1_position: 0 + - s_end_decal2_position: 0 + - s_end_decal3_position: 0 + - s_end_decal_position: 0 + - s_end_deliot: 0 + - s_end_fogOpt: 1 + - s_end_ggxanisotropics: 0 + - s_end_heightFogOpt: 1 + - s_end_hextile: 0 + - s_end_liltoon_rim2_lightdir: 0 + - s_end_liltoon_rim_lightdir: 0 + - s_end_matcap1ApplyToAlpha: 0 + - s_end_matcap2ApplyToAlpha: 0 + - s_end_matcap3ApplyToAlpha: 0 + - s_end_matcapApplyToAlpha: 0 + - s_end_outline_al_color: 0 + - s_end_parallaxAdvanced: 0 + - s_end_vertexRounding: 0 + - s_start_ALAlpha: 0 + - s_start_ALDecalAudioModsOptions: 1 + - s_start_ALDecalBandOptions: 1 + - s_start_ALDecalColorsBlendingOptions: 1 + - s_start_ALDecalShapeClipOptions: 1 + - s_start_ALDecalVolumeOptions: 1 + - s_start_ALSpectrumMotion: 0 + - s_start_ALVertexGlitching: 0 + - s_start_ALVertexHeight: 0 + - s_start_ALVertexLookAtAL: 0 + - s_start_AlphaAdvanced: 0 + - s_start_AlphaAngular: 0 + - s_start_AlphaDistanceFade: 0 + - s_start_AlphaDithering: 0 + - s_start_AlphaFresnel: 0 + - s_start_AlphaToCoverage: 0 + - s_start_AnisoBottomLayer: 0 + - s_start_AnisoTopLayer: 1 + - s_start_AudioLinkBandOverrides: 1 + - s_start_BRDFTPSMaskGroup: 0 + - s_start_BackFaceHueShift: 0 + - s_start_BackfaceMods: 0 + - s_start_CCopt: 1 + - s_start_ClearCoatTPSMaskGroup: 0 + - s_start_ColorAdjustColorGrading: 0 + - s_start_ContinuousRotation: 0 + - s_start_CubeMapColorAdjust: 0 + - s_start_CubeMapMasking: 1 + - s_start_Decal0ChannelSeparation: 0 + - s_start_Decal0GlobalMasking: 0 + - s_start_Decal0HueShift: 0 + - s_start_Decal0Video: 0 + - s_start_Decal1ChannelSeparation: 0 + - s_start_Decal1GlobalMasking: 0 + - s_start_Decal1HueShift: 0 + - s_start_Decal1Video: 0 + - s_start_Decal2ChannelSeparation: 0 + - s_start_Decal2GlobalMasking: 0 + - s_start_Decal2HueShift: 0 + - s_start_Decal2Video: 0 + - s_start_Decal3ChannelSeparation: 0 + - s_start_Decal3GlobalMasking: 0 + - s_start_Decal3HueShift: 0 + - s_start_Decal3Video: 0 + - s_start_DecalTPSMaskGroup: 0 + - s_start_DepthAlpha: 0 + - s_start_DepthFXColorEmission: 0 + - s_start_DetailNormal: 0 + - s_start_DetailTexture: 0 + - s_start_DissolveAudioLink: 0 + - s_start_DissolvedMenu: 0 + - s_start_EdgeMenu: 0 + - s_start_EmissionAL0Add: 0 + - s_start_EmissionAL0COut: 0 + - s_start_EmissionAL0Multiply: 0 + - s_start_EmissionAL1Add: 0 + - s_start_EmissionAL1COut: 0 + - s_start_EmissionAL1Multiply: 0 + - s_start_EmissionAL2Add: 0 + - s_start_EmissionAL2COut: 0 + - s_start_EmissionAL2Multiply: 0 + - s_start_EmissionAL3Add: 0 + - s_start_EmissionAL3COut: 0 + - s_start_EmissionAL3Multiply: 0 + - s_start_EmissionBlinking0: 0 + - s_start_EmissionBlinking1: 0 + - s_start_EmissionBlinking2: 0 + - s_start_EmissionBlinking3: 0 + - s_start_EmissionCenterOut0: 0 + - s_start_EmissionCenterOut1: 0 + - s_start_EmissionCenterOut2: 0 + - s_start_EmissionCenterOut3: 0 + - s_start_EmissionHueShift0: 0 + - s_start_EmissionHueShift1: 0 + - s_start_EmissionHueShift2: 0 + - s_start_EmissionHueShift3: 0 + - s_start_EmissionLightBased0: 0 + - s_start_EmissionLightBased1: 0 + - s_start_EmissionLightBased2: 0 + - s_start_EmissionLightBased3: 0 + - s_start_FixedRimBlending: 1 + - s_start_FixedRimColor: 1 + - s_start_FixedRimShapeControl: 1 + - s_start_FlipbookCrossfade: 0 + - s_start_FlipbookHueShift: 0 + - s_start_FlipbookManualFrameControl: 0 + - s_start_FlipbookStartAndEnd: 0 + - s_start_GlitterAudioLink: 0 + - s_start_GlitterColorAndShape: 1 + - s_start_GlitterHueShiftSection: 0 + - s_start_GlitterMask: 0 + - s_start_GlitterPositionSize: 0 + - s_start_GlitterRotationSection: 0 + - s_start_GlitterSparkleControl: 1 + - s_start_GlobalMaskOptionsForceToggles: 0 + - s_start_GlobalMaskOptionsMinMaxSliders: 0 + - s_start_GlobalMaskOptionsSliders: 0 + - s_start_LightDataAddPass: 1 + - s_start_LightDataBasePass: 1 + - s_start_LightDataDebug: 0 + - s_start_LightDataSDF: 1 + - s_start_LocalRotation: 0 + - s_start_LocalTranslation: 0 + - s_start_LookAtAlphaMask: 0 + - s_start_LookAtBlueMask: 0 + - s_start_LookAtGreenMask: 0 + - s_start_LookAtRedMask: 1 + - s_start_LookAtVisibility: 0 + - s_start_MainHueShift: 1 + - s_start_MainHueShiftAL: 0 + - s_start_MainHueShiftGlobalMask: 0 + - s_start_MaskingMenu: 0 + - s_start_Matcap0AudioLink: 0 + - s_start_Matcap0Blending: 1 + - s_start_Matcap0Masking: 1 + - s_start_Matcap1AudioLink: 0 + - s_start_Matcap1Blending: 1 + - s_start_Matcap1HueShift: 0 + - s_start_Matcap1Masking: 1 + - s_start_Matcap1Normal: 0 + - s_start_Matcap1Smoothness: 0 + - s_start_Matcap2AudioLink: 0 + - s_start_Matcap2Blending: 1 + - s_start_Matcap2HueShift: 0 + - s_start_Matcap2Masking: 1 + - s_start_Matcap2Normal: 0 + - s_start_Matcap2Smoothness: 0 + - s_start_Matcap2TPSMaskGroup: 0 + - s_start_Matcap3AudioLink: 0 + - s_start_Matcap3Blending: 1 + - s_start_Matcap3HueShift: 0 + - s_start_Matcap3Masking: 1 + - s_start_Matcap3Normal: 0 + - s_start_Matcap3Smoothness: 0 + - s_start_Matcap3TPSMaskGroup: 0 + - s_start_Matcap4TPSMaskGroup: 0 + - s_start_MatcapHueShift: 0 + - s_start_MatcapNormal: 0 + - s_start_MatcapSmoothness: 0 + - s_start_MatcapTPSMaskGroup: 0 + - s_start_MirrorTexture: 1 + - s_start_MultilayerMath1stLayer: 1 + - s_start_MultilayerMath2ndLayer: 0 + - s_start_MultilayerMath3rdLayer: 0 + - s_start_MultilayerMathBorder: 1 + - s_start_MultilayerMathBorderMap: 0 + - s_start_MultilayerShadowMap: 0 + - s_start_OutlineAlphaDistanceFade: 0 + - s_start_OutlineColorAdjust: 0 + - s_start_OutlineFixedSize: 0 + - s_start_OutlineLighting: 0 + - s_start_OutlineRenderingOptions: 0 + - s_start_OutlineZOffset: 0 + - s_start_PBRSecondSpecular: 0 + - s_start_PBRSplitMaskSample: 0 + - s_start_ParallaxInternalHueShift: 0 + - s_start_ParallaxInternalLayerColoring: 1 + - s_start_ParallaxInternalLayerControls: 1 + - s_start_PathAppearance: 1 + - s_start_PathColors: 1 + - s_start_PathRemapping: 1 + - s_start_PathSourceDirections: 1 + - s_start_PathTypes: 1 + - s_start_Positioning: 1 + - s_start_RGBAlpha: 0 + - s_start_RGBBlue: 0 + - s_start_RGBGreen: 0 + - s_start_RGBRed: 0 + - s_start_RimLight0Color: 1 + - s_start_RimLight0GlobalMasking: 0 + - s_start_RimLight0HueShift: 0 + - s_start_RimLight0LightDirMask: 0 + - s_start_RimLight0ShapeControls: 1 + - s_start_RimLight1Color: 1 + - s_start_RimLight1GlobalMasking: 0 + - s_start_RimLight1HueShift: 0 + - s_start_RimLight1LightDirMask: 0 + - s_start_RimLight1ShapeControls: 1 + - s_start_RimLight2DirectionMask: 0 + - s_start_RimLightDirectionMask: 0 + - s_start_SSAOAdvanced: 0 + - s_start_SSAOColorAndMasking: 1 + - s_start_ScrollingEmission0: 0 + - s_start_ScrollingEmission1: 0 + - s_start_ScrollingEmission2: 0 + - s_start_ScrollingEmission3: 0 + - s_start_ShadingAddPass: 0 + - s_start_ShadingGlobalMask: 0 + - s_start_StylizedReflectionLilEnviroReflections: 1 + - s_start_StylizedReflectionLilSpecular: 1 + - s_start_StylizedReflectionMode0: 1 + - s_start_StylizedReflectionMode1: 1 + - s_start_StylizedSpecularAdvanced: 0 + - s_start_StylizedSpecularLayer0: 1 + - s_start_StylizedSpecularLayer1: 1 + - s_start_TimingOptions: 1 + - s_start_TransitionMenu: 0 + - s_start_UVTileDissolveRow0: 0 + - s_start_UVTileDissolveRow1: 0 + - s_start_UVTileDissolveRow2: 0 + - s_start_UVTileDissolveRow3: 0 + - s_start_VertAL: 0 + - s_start_VertexBarrelMode: 0 + - s_start_VertexColors: 0 + - s_start_VertexGlitchMirror: 0 + - s_start_VertexGlitchTexture: 1 + - s_start_VertexManipulationHeight: 1 + - s_start_VertexScale: 0 + - s_start_VertexSphereMode: 0 + - s_start_VertexTornadoMode: 0 + - s_start_VertexWind: 0 + - s_start_WorldTranslation: 0 + - s_start_brdfadvanced: 0 + - s_start_decal1_position: 1 + - s_start_decal2_position: 1 + - s_start_decal3_position: 1 + - s_start_decal_position: 1 + - s_start_deliot: 0 + - s_start_fogOpt: 1 + - s_start_ggxanisotropics: 0 + - s_start_heightFogOpt: 1 + - s_start_hextile: 0 + - s_start_liltoon_rim2_lightdir: 0 + - s_start_liltoon_rim_lightdir: 0 + - s_start_matcap1ApplyToAlpha: 0 + - s_start_matcap2ApplyToAlpha: 0 + - s_start_matcap3ApplyToAlpha: 0 + - s_start_matcapApplyToAlpha: 0 + - s_start_outline_al_color: 0 + - s_start_parallaxAdvanced: 0 + - s_start_vertexRounding: 0 + - s_start_vertexRoundingAL: 0 + - shader_is_using_thry_editor: 0 + - shader_locale: 0 + - shader_master_label: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _1st_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALDecalVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALDecalVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _ALDecaldCircleDimensions: {r: 0, g: 1, b: 0, a: 1} + - _ALUVPosition: {r: 0.5, g: 0.5, b: 1, a: 1} + - _ALUVScale: {r: 1, g: 1, b: 1, a: 1} + - _ALVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _AlphaAudioLinkAddRange: {r: 0, g: 0, b: 0, a: 1} + - _AlphaColor: {r: 1, g: 1, b: 1, a: 1} + - _AlphaMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _AlphaTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _AngleForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _Aniso0Tint: {r: 1, g: 1, b: 1, a: 1} + - _Aniso1Tint: {r: 1, g: 1, b: 1, a: 1} + - _AnisoColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _AnisotropyMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Ap_Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Ap_RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkBandOverrideSliders: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveDetail: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission0CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission1CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission2CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission3CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookFrame: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookScale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkOutlineColorMod: {r: 0, g: 1, b: 0, a: 0} + - _AudioLinkOutlineEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineSize: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkPathEmissionAddA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkRim2BrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2EmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2WidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimWidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiInnerEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiOuterEmission: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceColor: {r: 1, g: 1, b: 1, a: 1} + - _BackFaceMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BacklightColor: {r: 0.85, g: 0.8, b: 0.7, a: 1} + - _BacklightColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _BlackLightMasking0Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking1Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking2Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking3Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlueColor: {r: 1, g: 1, b: 1, a: 1} + - _BlueTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BumpMapPan: {r: 0, g: 0, b: 0, a: 0} + - _CenterOutDissolveDirection: {r: 0, g: 0, b: 1, a: 0} + - _ClearCoatMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _ClearCoatReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _ClearCoatSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _ClothMetallicSmoothnessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 0.18867922, g: 0.18867922, b: 0.18867922, a: 1} + - _CubeMapColor: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotation: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotationPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalColor: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor1: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor2: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor3: {r: 1, g: 1, b: 1, a: 1} + - _DecalMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalPosition: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition1: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition2: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition3: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalScale: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale1: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale2: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale3: {r: 1, g: 1, b: 1, a: 0} + - _DecalSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset1: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset2: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset3: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DepthColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DepthRimColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DetailMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailNormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTexPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTint: {r: 1, g: 1, b: 1, a: 1} + - _DissolveDetailNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveEdgeColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveEndPoint: {r: 0, g: 1, b: 0, a: 0} + - _DissolveMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveNoiseTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveStartPoint: {r: 0, g: -1, b: 0, a: 0} + - _DissolveTextureColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveToTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrength1AudioLink: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrengthAudioLink: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL0Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL0StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL1Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL1StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL2Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL2StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL3Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL3StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColor1: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor2: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor3: {r: 1, g: 1, b: 1, a: 1} + - _EmissionMap1Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMapPan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask1Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _EmissiveScroll_Direction: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction1: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction2: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction3: {r: 0, g: -10, b: 0, a: 0} + - _FXProximityColorMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _FXProximityColorMinColor: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookColor: {r: 1, g: 1, b: 1, a: 1} + - _FlipbookCrossfadeRange: {r: 0.75, g: 1, b: 0, a: 1} + - _FlipbookMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookPanning: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _FlipbookSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookTexArrayPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALMaxBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALSizeAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterColor: {r: 1, g: 1, b: 1, a: 1} + - _GlitterColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSize: {r: 0.1, g: 0.5, b: 0, a: 1} + - _GlitterRandomRotationSpeed: {r: 0, g: 0, b: 0, a: 0} + - _GlitterUVPanning: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskMinMaxSlider_0: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_1: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_10: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_11: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_12: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_13: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_14: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_15: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_2: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_3: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_4: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_5: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_6: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_7: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_8: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_9: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskTexture0Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalThemeColor0: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor1: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor2: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor3: {r: 1, g: 1, b: 1, a: 1} + - _GreenColor: {r: 1, g: 1, b: 1, a: 1} + - _GreenTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _HeightMapPan: {r: 0, g: 0, b: 0, a: 0} + - _HeightmaskPan: {r: 0, g: 0, b: 0, a: 0} + - _HighColor: {r: 1, g: 1, b: 1, a: 1} + - _HighColor_TexPan: {r: 0, g: 0, b: 0, a: 0} + - _LTCGI_DiffuseColor: {r: 1, g: 1, b: 1, a: 1} + - _LTCGI_SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _LightDataSDFMapPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingAOMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingDetailShadowMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingForcedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingWrappedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightngForcedDirection: {r: 0, g: 0, b: 0, a: 1} + - _LineColor: {r: 1, g: 1, b: 1, a: 1} + - _LookAtAlphaDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtAlphaMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtBlueDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtBlueMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBluePivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBlueUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtGreenDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtGreenMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtRedMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _MainColorAdjustTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MainTexPan: {r: 0, g: 0, b: 0, a: 0} + - _MatCap2ndBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap3rdBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap4thBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCapBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap3MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap4MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Pan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapColor: {r: 1, g: 1, b: 1, a: 1} + - _MatcapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapPan: {r: 0, g: 0, b: 0, a: 0} + - _MirrorColor: {r: 1, g: 1, b: 1, a: 1} + - _MirrorTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _MochieSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _MultilayerMathBlurMapPan: {r: 0, g: 0, b: 0, a: 0} + - _NormalCorrectOrigin: {r: 0, g: 0.4, b: -0.025, a: 1} + - _OutlineDropShadowOffset: {r: 1, g: 0, b: 0, a: 0} + - _OutlineMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _OutlinePersonaDirection: {r: 1, g: 0, b: 0, a: 0} + - _OutlineTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _PBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _PPMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _PPRGB: {r: 1, g: 1, b: 1, a: 1} + - _PPTint: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ParallaxInternalMapPan: {r: 0, g: 0, b: 1, a: 1} + - _ParallaxInternalMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMinColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalPanDepthSpeed: {r: 0, g: 0, b: 1, a: 1} + - _PathALAutoCorrelatorRangeA: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeB: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeG: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeR: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALHistoryRangeA: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeB: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeG: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeR: {r: 0, g: 1, b: 0, a: 1} + - _PathColorA: {r: 1, g: 1, b: 1, a: 1} + - _PathColorB: {r: 1, g: 1, b: 1, a: 1} + - _PathColorG: {r: 1, g: 1, b: 1, a: 1} + - _PathColorR: {r: 1, g: 1, b: 1, a: 1} + - _PathEmissionStrength: {r: 0, g: 0, b: 0, a: 0} + - _PathGapLengths: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathOffset: {r: 0, g: 0, b: 0, a: 0} + - _PathRemapA: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapB: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapG: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapR: {r: 0, g: 1, b: 0, a: 1} + - _PathSegments: {r: 0, g: 0, b: 0, a: 0} + - _PathSoftness: {r: 1, g: 1, b: 1, a: 1} + - _PathSpeed: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathTime: {r: -999, g: -999, b: -999, a: -999} + - _PathWidth: {r: 0.03, g: 0.03, b: 0.03, a: 0.03} + - _PathingColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PathingMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PolarCenter: {r: 0.5, g: 0.5, b: 0, a: 0} + - _RGBAAlphaPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAAlphaPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAAlphaScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBABlueScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAGreenScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBARedPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBASmoothnessMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RedColor: {r: 1, g: 1, b: 1, a: 1} + - _RedTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _ReflectionColor: {r: 1, g: 1, b: 1, a: 1} + - _ReflectionCubeColor: {r: 0, g: 0, b: 0, a: 1} + - _RgbNormalAPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalBPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalGPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalRPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2Color: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _Rim2ColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2IndirColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2ShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _Rim2TexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimColor: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _RimColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimEnviroMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimIndirColor: {r: 1, g: 1, b: 1, a: 1} + - _RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _RimMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _RimTexPan: {r: 0, g: 0, b: 0, a: 0} + - _SDFForward: {r: 0, g: 0, b: 1, a: 0} + - _SDFLeft: {r: -1, g: 0, b: 0, a: 0} + - _SDFShadingTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOColor: {r: 0, g: 0, b: 0, a: 1} + - _SSAOColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOHSV: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaxDistanceFalloff: {r: 0.01, g: 0.1, b: 1, a: 1} + - _SSSColor: {r: 1, g: 0, b: 0, a: 1} + - _SSSThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_HighColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_Rim2LightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_RimLightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowAOShift: {r: 0, g: 1, b: 0, a: 1} + - _ShadowAOShift2: {r: 0, g: 1, b: 0, a: 1} + - _ShadowBorderColor: {r: 1, g: 0, b: 0, a: 1} + - _ShadowBorderMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowColor: {r: 0.7, g: 0.75, b: 0.85, a: 1} + - _ShadowColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowStrengthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SkinThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SphericalDissolveCenter: {r: 0, g: 0, b: 0, a: 1} + - _SssColorBleedAoWeights: {r: 0.4, g: 0.15, b: 0.13, a: 0} + - _SssTransmissionAbsorption: {r: -8, g: -40, b: -64, a: 0} + - _TPS_BuldgeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorForward: {r: 0, g: 0, b: 1, a: 0} + - _TPS_PenetratorRight: {r: 1, g: 0, b: 0, a: 0} + - _TPS_PenetratorScale: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorUp: {r: 0, g: 1, b: 0, a: 0} + - _TPS_SqueezeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSScale: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericColor: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericScale: {r: 1, g: 1, b: 1, a: 1} + - _TextPositionColor: {r: 1, g: 0, b: 1, a: 1} + - _TextPositionOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionScale: {r: 1, g: 1, b: 1, a: 1} + - _TextTimeColor: {r: 1, g: 0, b: 1, a: 1} + - _TextTimeOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextTimePadding: {r: 0, g: 0, b: 0, a: 0} + - _TextTimeScale: {r: 1, g: 1, b: 1, a: 1} + - _TruchetALAlpha: {r: 0, g: 0, b: 0, a: 0} + - _TruchetALEmission: {r: 0, g: 0, b: 0, a: 0} + - _TruchetChronoPanSpeed: {r: 0, g: 0, b: 0, a: 0} + - _TruchetColor: {r: 1, g: 1, b: 1, a: 1} + - _TruchetMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _TruchetPanOffset: {r: 0, g: 0, b: 0, a: 0} + - _TruchetTexPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexBasicsMaskUVPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalRotationAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalRotationCTALSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalScaleALMax: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalScaleALMin: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexLookAtAlphaAudiolink: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationHeightAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationHeightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationLocalRotation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalRotationSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalScale: {r: 1, g: 1, b: 1, a: 1} + - _VertexManipulationLocalTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationWorldTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexRoundingRangeAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexSpectrumOffsetMax: {r: 0, g: 0.1, b: 0, a: 1} + - _VertexSpectrumOffsetMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexSphereCenter: {r: 0, g: 0, b: 0, a: 1} + - _VertexWindDetailDirection: {r: 0, g: 1, b: 0, a: 0} + - _VertexWindPrimaryDirection: {r: 1, g: 0, b: 0, a: 0} + - _VertexWorldTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexWorldTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VideoMaskTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _VideoResolution: {r: 1280, g: 720, b: 0, a: 0} + - _VoronoiGradient: {r: 0, g: 0.5, b: 0, a: 0} + - _VoronoiInnerColor: {r: 1, g: 1, b: 1, a: 1} + - _VoronoiMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiOuterColor: {r: 0, g: 0, b: 0, a: 1} + - _VoronoiRandomMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiRandomMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiSpeed: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Quiz/Materials/Camera.mat.meta b/Assets/Quiz/Materials/Camera.mat.meta new file mode 100644 index 0000000..b276935 --- /dev/null +++ b/Assets/Quiz/Materials/Camera.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 670c93b6400cecc4d9427ca653ff6a79 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/DownCount.meta b/Assets/Quiz/Materials/DownCount.meta new file mode 100644 index 0000000..a0e1900 --- /dev/null +++ b/Assets/Quiz/Materials/DownCount.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0eb425c69f6aaa6408cdecc480d5773f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/DownCount/Clock.mat b/Assets/Quiz/Materials/DownCount/Clock.mat new file mode 100644 index 0000000..fa1a073 --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/Clock.mat @@ -0,0 +1,3800 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Clock + m_Shader: {fileID: 4800000, guid: 3d743798a82d6744782b4cb59aee8244, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: + - BSSBLOOMFOGTYPE_HEIGHT + - MOCHIE_PBR + - VIGNETTE_MASKED + - _LIGHTINGMODE_REALISTIC + - _RIM2STYLE_POIYOMI + - _RIMSTYLE_POIYOMI + - _STOCHASTICMODE_DELIOT_HEITZ + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + AllLockedGUIDS: 5c816e03b652658498610330ae7c0b66 + OriginalKeywords: BSSBLOOMFOGTYPE_HEIGHT MOCHIE_PBR VIGNETTE_MASKED _LIGHTINGMODE_REALISTIC + _RIM2STYLE_POIYOMI _RIMSTYLE_POIYOMI _STOCHASTICMODE_DELIOT_HEITZ + OriginalShader: .poiyomi/Poiyomi Pro World + OriginalShaderGUID: a11582d439d5e494986c4b421999c03a + RenderType: Opaque + _stripped_tex__ClothDFG: 76d65cbce584df7449699fb8406f60ea + _stripped_tex__SkinLUT: d13510bb2be49aa40a66a0101efb6a36 + _stripped_tex__ToonRamp: 61bd594533da4fc42bd46ef93ba5a4f6 + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _AnisotropyMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 94e2ade721dbb3d4b925d4421dc41ad7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightDataSDFMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingAOMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingDetailShadowMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 1b6a0451af77693439a9530f994a4c36, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MochieMetallicMaps: + m_Texture: {fileID: 2800000, guid: 0082c9e18d96013488c0ead9bc775779, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MochieReflCube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _UzumoreMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - DSGI: 0 + - GeometryShader_Enabled: 1 + - Instancing: 0 + - LightmapFlags: 0 + - Tessellation_Enabled: 1 + - VertexBasicsMaskUV: 0 + - _1st2nd_Shades_Feather: 0.0001 + - _1stShadeMapMask_Inverse: 0 + - _1st_ShadeMapUV: 0 + - _2ndShadeMapMask_Inverse: 0 + - _2nd_ShadeMapUV: 0 + - _ALDecalBandClipMax: 1 + - _ALDecalBandClipMin: 0 + - _ALDecalBandStep: 0 + - _ALDecalBaseBoost: 5 + - _ALDecalBlendAlpha: 1 + - _ALDecalBlendType: 0 + - _ALDecalColorMaskUV: 0 + - _ALDecalControlsAlpha: 0 + - _ALDecalGlobalMask: 0 + - _ALDecalGlobalMaskBlendType: 2 + - _ALDecalHighEmission: 0 + - _ALDecalLineWidth: 1 + - _ALDecalLowEmission: 0 + - _ALDecalMidEmission: 0 + - _ALDecalShapeClip: 0 + - _ALDecalShapeClipBandWidth: 0.5 + - _ALDecalShapeClipVolumeWidth: 0.5 + - _ALDecalTrebleBoost: 1 + - _ALDecalType: 0 + - _ALDecalUV: 0 + - _ALDecalUVMode: 0 + - _ALDecalVolume: 0.5 + - _ALDecalVolumeClipMax: 1 + - _ALDecalVolumeClipMin: 0 + - _ALDecalVolumeColorHighThemeIndex: 0 + - _ALDecalVolumeColorLowThemeIndex: 0 + - _ALDecalVolumeColorMidThemeIndex: 0 + - _ALDecalVolumeColorSource: 1 + - _ALDecalVolumeStep: 0 + - _ALHighEmission: 0 + - _ALLowEmission: 0 + - _ALMidEmission: 0 + - _ALUVRotation: 0 + - _ALUVRotationSpeed: 0 + - _ALVolumeColorBlendAlpha: 1 + - _ALVolumeColorBlendType: 0 + - _ALVolumeColorDirection: 0 + - _ALVolumeColorHighThemeIndex: 0 + - _ALVolumeColorLowThemeIndex: 0 + - _ALVolumeColorMidThemeIndex: 0 + - _ALVolumeColorUV: 0 + - _AddBlendOp: 4 + - _AddBlendOpAlpha: 4 + - _AddDstBlend: 1 + - _AddDstBlendAlpha: 1 + - _AddSrcBlend: 1 + - _AddSrcBlendAlpha: 0 + - _Add_Antipodean_Rim2Light: 0 + - _Add_Antipodean_RimLight: 0 + - _AlphaAlphaAdd: 0 + - _AlphaAngular: 0 + - _AlphaAngularGlobalMask: 0 + - _AlphaAudioLinkAddBand: 0 + - _AlphaAudioLinkEnabled: 0 + - _AlphaBoostFA: 10 + - _AlphaColorThemeIndex: 0 + - _AlphaDistanceFade: 0 + - _AlphaDistanceFadeGlobalMask: 0 + - _AlphaDistanceFadeMax: 0 + - _AlphaDistanceFadeMaxAlpha: 1 + - _AlphaDistanceFadeMin: 0 + - _AlphaDistanceFadeMinAlpha: 0 + - _AlphaDistanceFadeType: 1 + - _AlphaDitherBias: 0 + - _AlphaDitherGradient: 0.1 + - _AlphaDithering: 0 + - _AlphaForceOpaque: 1 + - _AlphaFresnel: 0 + - _AlphaFresnelAlpha: 0 + - _AlphaFresnelGlobalMask: 0 + - _AlphaFresnelInvert: 0 + - _AlphaFresnelSharpness: 0.5 + - _AlphaFresnelWidth: 0.5 + - _AlphaGlobalMask: 0 + - _AlphaGlobalMaskBlendType: 2 + - _AlphaMaskBlendStrength: 1 + - _AlphaMaskInvert: 0 + - _AlphaMaskUV: 0 + - _AlphaMaskValue: 0 + - _AlphaMipScale: 0.25 + - _AlphaMod: 0 + - _AlphaPremultiply: 0 + - _AlphaSharpenedA2C: 0 + - _AlphaTextureStochastic: 0 + - _AlphaTextureUV: 0 + - _AlphaToCoverage: 0 + - _AngleCompareTo: 0 + - _AngleMinAlpha: 0 + - _AngleType: 0 + - _Aniso0Blur: 0 + - _Aniso0Edge: 0.5 + - _Aniso0Offset: 0 + - _Aniso0OffsetMapStrength: 0 + - _Aniso0Power: 0 + - _Aniso0Strength: 1 + - _Aniso0SwitchDirection: 0 + - _Aniso0TintIndex: 0 + - _Aniso0ToonMode: 0 + - _Aniso1Blur: 0 + - _Aniso1Edge: 0.5 + - _Aniso1Offset: 0 + - _Aniso1OffsetMapStrength: 0 + - _Aniso1Power: 0.1 + - _Aniso1Strength: 1 + - _Aniso1SwitchDirection: 0 + - _Aniso1TintIndex: 0 + - _Aniso1ToonMode: 0 + - _AnisoAdd: 1 + - _AnisoColorMapUV: 0 + - _AnisoGlobalMask: 0 + - _AnisoGlobalMaskBlendType: 2 + - _AnisoHideInShadow: 1 + - _AnisoReplace: 0 + - _AnisoUseBaseColor: 0 + - _AnisoUseLightColor: 1 + - _Anisotropy: 0 + - _AnisotropyMapChannel: 0 + - _AnisotropyMapUV: 0 + - _Ap_Rim2Light_FeatherOff: 0 + - _Ap_Rim2Light_Power: 0.1 + - _Ap_RimLight_FeatherOff: 0 + - _Ap_RimLight_Power: 0.1 + - _ApplyReflection: 0 + - _ApplySpecular: 1 + - _ApplySpecularFA: 1 + - _AudioLinkAnimToggle: 1 + - _AudioLinkBandOverridesEnabled: 0 + - _AudioLinkDecal0AlphaBand: 0 + - _AudioLinkDecal0ChannelSeparationBand: 0 + - _AudioLinkDecal0EmissionBand: 0 + - _AudioLinkDecal0RotationBand: 0 + - _AudioLinkDecal0ScaleBand: 0 + - _AudioLinkDecal0SideBand: 0 + - _AudioLinkDecal1AlphaBand: 0 + - _AudioLinkDecal1ChannelSeparationBand: 0 + - _AudioLinkDecal1EmissionBand: 0 + - _AudioLinkDecal1RotationBand: 0 + - _AudioLinkDecal1ScaleBand: 0 + - _AudioLinkDecal1SideBand: 0 + - _AudioLinkDecal2AlphaBand: 0 + - _AudioLinkDecal2ChannelSeparationBand: 0 + - _AudioLinkDecal2EmissionBand: 0 + - _AudioLinkDecal2RotationBand: 0 + - _AudioLinkDecal2ScaleBand: 0 + - _AudioLinkDecal2SideBand: 0 + - _AudioLinkDecal3AlphaBand: 0 + - _AudioLinkDecal3ChannelSeparationBand: 0 + - _AudioLinkDecal3EmissionBand: 0 + - _AudioLinkDecal3RotationBand: 0 + - _AudioLinkDecal3ScaleBand: 0 + - _AudioLinkDecal3SideBand: 0 + - _AudioLinkDecalCC0: 0 + - _AudioLinkDecalCC1: 0 + - _AudioLinkDecalCC2: 0 + - _AudioLinkDecalCC3: 0 + - _AudioLinkDissolveAlphaBand: 0 + - _AudioLinkDissolveDetailBand: 0 + - _AudioLinkEmission0CenterOutBand: 0 + - _AudioLinkEmission0CenterOutDuration: 1 + - _AudioLinkEmission0CenterOutSize: 0 + - _AudioLinkEmission1CenterOutBand: 0 + - _AudioLinkEmission1CenterOutDuration: 1 + - _AudioLinkEmission1CenterOutSize: 0 + - _AudioLinkEmission2CenterOutBand: 0 + - _AudioLinkEmission2CenterOutDuration: 1 + - _AudioLinkEmission2CenterOutSize: 0 + - _AudioLinkEmission3CenterOutBand: 0 + - _AudioLinkEmission3CenterOutDuration: 1 + - _AudioLinkEmission3CenterOutSize: 0 + - _AudioLinkFlipbookAlphaBand: 0 + - _AudioLinkFlipbookEmissionBand: 0 + - _AudioLinkFlipbookFrameBand: 0 + - _AudioLinkFlipbookScaleBand: 0 + - _AudioLinkHelp: 0 + - _AudioLinkOutlineColorBand: 0 + - _AudioLinkOutlineEmissionBand: 0 + - _AudioLinkOutlineSizeBand: 0 + - _AudioLinkPathEmissionAddBandA: 0 + - _AudioLinkPathEmissionAddBandB: 0 + - _AudioLinkPathEmissionAddBandG: 0 + - _AudioLinkPathEmissionAddBandR: 0 + - _AudioLinkPathTimeOffsetBandA: 0 + - _AudioLinkPathTimeOffsetBandB: 0 + - _AudioLinkPathTimeOffsetBandG: 0 + - _AudioLinkPathTimeOffsetBandR: 0 + - _AudioLinkPathWidthOffsetBandA: 0 + - _AudioLinkPathWidthOffsetBandB: 0 + - _AudioLinkPathWidthOffsetBandG: 0 + - _AudioLinkPathWidthOffsetBandR: 0 + - _AudioLinkRim2BrightnessBand: 0 + - _AudioLinkRim2EmissionBand: 0 + - _AudioLinkRim2WidthBand: 0 + - _AudioLinkRimBrightnessBand: 0 + - _AudioLinkRimEmissionBand: 0 + - _AudioLinkRimWidthBand: 0 + - _AudioLinkSmoothingBass: 0 + - _AudioLinkSmoothingHighMid: 0 + - _AudioLinkSmoothingLowMid: 0 + - _AudioLinkSmoothingTreble: 0 + - _AudioLinkVoronoiChronoSpeedXBand: 0 + - _AudioLinkVoronoiChronoSpeedXSpeed: 0 + - _AudioLinkVoronoiChronoSpeedXType: 0 + - _AudioLinkVoronoiChronoSpeedYBand: 0 + - _AudioLinkVoronoiChronoSpeedYSpeed: 0 + - _AudioLinkVoronoiChronoSpeedYType: 0 + - _AudioLinkVoronoiChronoSpeedZBand: 0 + - _AudioLinkVoronoiChronoSpeedZSpeed: 0 + - _AudioLinkVoronoiChronoSpeedZType: 0 + - _AudioLinkVoronoiGradientMaxAdd: 0 + - _AudioLinkVoronoiGradientMaxAddBand: 0 + - _AudioLinkVoronoiGradientMinAdd: 0 + - _AudioLinkVoronoiGradientMinAddBand: 0 + - _AudioLinkVoronoiInnerEmissionBand: 0 + - _AudioLinkVoronoiOuterEmissionBand: 0 + - _BRDFTPSDepthEnabled: 0 + - _BRDFTPSReflectionMaskStrength: 1 + - _BRDFTPSSpecularMaskStrength: 1 + - _BSSBloomfog: 0 + - _BSSBloomfogType: 1 + - _BSSEnabled: 0 + - _BSSHelpBox1: 0 + - _BSSHelpBox2: 0 + - _BSSHelpBox3: 0 + - _BSSSpacer1: 0 + - _BSSSpacer2: 0 + - _BSSSpacer3: 0 + - _BackFaceColorThemeIndex: 0 + - _BackFaceDetailIntensity: 1 + - _BackFaceEmissionLimiter: 1 + - _BackFaceEmissionStrength: 0 + - _BackFaceEnabled: 0 + - _BackFaceHueSelectOrShift: 1 + - _BackFaceHueShift: 0 + - _BackFaceHueShiftEnabled: 0 + - _BackFaceHueShiftSpeed: 0 + - _BackFaceMaskChannel: 0 + - _BackFaceMaskUV: 0 + - _BackFaceReplaceAlpha: 0 + - _BackFaceShiftColorSpace: 0 + - _BackFaceTextureUV: 0 + - _BacklightBackfaceMask: 1 + - _BacklightBlur: 0.05 + - _BacklightBorder: 0.35 + - _BacklightColorTexUV: 0 + - _BacklightDirectivity: 5 + - _BacklightEnabled: 0 + - _BacklightMainStrength: 0 + - _BacklightNormalStrength: 1 + - _BacklightReceiveShadow: 1 + - _BacklightViewStrength: 1 + - _BaseColor_Step: 0.5 + - _BaseShade_Feather: 0.0001 + - _BlackLightMasking0GlobalMaskBlendType: 0 + - _BlackLightMasking0GlobalMaskIndex: 0 + - _BlackLightMasking0Key: 1 + - _BlackLightMasking1GlobalMaskBlendType: 0 + - _BlackLightMasking1GlobalMaskIndex: 0 + - _BlackLightMasking1Key: 2 + - _BlackLightMasking2GlobalMaskBlendType: 0 + - _BlackLightMasking2GlobalMaskIndex: 0 + - _BlackLightMasking2Key: 3 + - _BlackLightMasking3GlobalMaskBlendType: 0 + - _BlackLightMasking3GlobalMaskIndex: 0 + - _BlackLightMasking3Key: 4 + - _BlackLightMaskingEnabled: 0 + - _BlendOp: 0 + - _BlendOpAlpha: 0 + - _BlendshapeBadScaleFix: 1 + - _BlendshapePower: 1 + - _BlueAlphaAdd: 0 + - _BlueColorThemeIndex: 0 + - _BlueTextureStochastic: 0 + - _BlueTextureUV: 0 + - _BulgeOffset: 0 + - _BulgePower: 0 + - _BumpMapStochastic: 0 + - _BumpMapUV: 0 + - _BumpScale: 1 + - _CCIgnoreCastedShadows: 0 + - _CameraAngleMax: 90 + - _CameraAngleMin: 45 + - _CenterOutDissolveInvert: 0 + - _CenterOutDissolveMode: 1 + - _CenterOutDissolveNormals: 0 + - _CenterOutDissolvePower: 1 + - _ClearCoatBRDF: 0 + - _ClearCoatForceFallback: 0 + - _ClearCoatGSAAEnabled: 1 + - _ClearCoatGSAAThreshold: 0.1 + - _ClearCoatGSAAVariance: 0.15 + - _ClearCoatGlobalMask: 0 + - _ClearCoatGlobalMaskBlendType: 2 + - _ClearCoatLitFallback: 1 + - _ClearCoatMapsClearCoatMaskChannel: 0 + - _ClearCoatMapsReflectionMaskChannel: 2 + - _ClearCoatMapsRoughnessChannel: 1 + - _ClearCoatMapsSpecularMaskChannel: 3 + - _ClearCoatMapsStochastic: 0 + - _ClearCoatMapsUV: 0 + - _ClearCoatMaskInvert: 0 + - _ClearCoatNormalSelect: 0 + - _ClearCoatReflectionMaskInvert: 0 + - _ClearCoatReflectionStrength: 1 + - _ClearCoatReflectionStrengthGlobalMask: 0 + - _ClearCoatReflectionStrengthGlobalMaskBlendType: 2 + - _ClearCoatReflectionTintThemeIndex: 0 + - _ClearCoatSmoothness: 1 + - _ClearCoatSmoothnessGlobalMask: 0 + - _ClearCoatSmoothnessGlobalMaskBlendType: 2 + - _ClearCoatSmoothnessMapInvert: 0 + - _ClearCoatSpecularMaskInvert: 0 + - _ClearCoatSpecularStrength: 1 + - _ClearCoatSpecularStrengthGlobalMask: 0 + - _ClearCoatSpecularStrengthGlobalMaskBlendType: 2 + - _ClearCoatSpecularTintThemeIndex: 0 + - _ClearCoatStrength: 1 + - _ClearCoatTPSDepthMaskEnabled: 0 + - _ClearCoatTPSMaskStrength: 1 + - _ClearcoatExposureOcclusion: 0 + - _ClearcoatFresnelStrength: 0.5 + - _ClothLerp: 0 + - _ClothMetallicSmoothnessMapInvert: 0 + - _ClothMetallicSmoothnessMapUV: 0 + - _ClothReflectance: 0.5 + - _ClothSmoothness: 0.5 + - _ColorGradingToggle: 0 + - _ColorMask: 15 + - _ColorThemeIndex: 0 + - _ContinuousDissolve: 0 + - _CubeMapBlendAmount: 1 + - _CubeMapBrightness: 0 + - _CubeMapColorThemeIndex: 0 + - _CubeMapContrast: 1 + - _CubeMapEmissionStrength: 0 + - _CubeMapEnabled: 0 + - _CubeMapHueSelectOrShift: 1 + - _CubeMapHueShift: 0 + - _CubeMapHueShiftColorSpace: 0 + - _CubeMapHueShiftEnabled: 0 + - _CubeMapHueShiftSpeed: 0 + - _CubeMapIntensity: 1 + - _CubeMapLightMask: 0 + - _CubeMapMaskChannel: 0 + - _CubeMapMaskGlobalMask: 0 + - _CubeMapMaskGlobalMaskBlendType: 2 + - _CubeMapMaskInvert: 0 + - _CubeMapMaskUV: 0 + - _CubeMapNormal: 1 + - _CubeMapSaturation: 1 + - _CubeMapSmoothness: 1 + - _CubeMapUVMode: 1 + - _CubeMapWorldNormalsStrength: 1 + - _CubemapBlendType: 0 + - _Cull: 2 + - _CurvFix: 1 + - _Curvature: 0 + - _CurvatureU: 0 + - _CurvatureV: 0 + - _CustomColors: 0 + - _Cutoff: 0.5 + - _Decal0ApplyGlobalMaskBlendType: 0 + - _Decal0ApplyGlobalMaskIndex: 0 + - _Decal0ChannelSeparation: 0 + - _Decal0ChannelSeparationAngleStrength: 0 + - _Decal0ChannelSeparationEnable: 0 + - _Decal0ChannelSeparationHue: 0 + - _Decal0ChannelSeparationPremultiply: 0 + - _Decal0ChannelSeparationVertical: 0 + - _Decal0Depth: 0 + - _Decal0FaceMask: 0 + - _Decal0GlobalMask: 0 + - _Decal0GlobalMaskBlendType: 2 + - _Decal0HueAngleStrength: 0 + - _Decal0MaskChannel: 0 + - _Decal0OnlyVideo: 0 + - _Decal0OverrideAlphaMode: 0 + - _Decal0TPSMaskStrength: 1 + - _Decal0UseDecalAlpha: 0 + - _Decal0VideoAspectFix: 0 + - _Decal0VideoEmissionStrength: 0 + - _Decal0VideoEnabled: 0 + - _Decal0VideoFitToScale: 1 + - _Decal1ApplyGlobalMaskBlendType: 0 + - _Decal1ApplyGlobalMaskIndex: 0 + - _Decal1ChannelSeparation: 0 + - _Decal1ChannelSeparationAngleStrength: 0 + - _Decal1ChannelSeparationEnable: 0 + - _Decal1ChannelSeparationHue: 0 + - _Decal1ChannelSeparationPremultiply: 0 + - _Decal1ChannelSeparationVertical: 0 + - _Decal1Depth: 0 + - _Decal1FaceMask: 0 + - _Decal1GlobalMask: 0 + - _Decal1GlobalMaskBlendType: 2 + - _Decal1HueAngleStrength: 0 + - _Decal1MaskChannel: 1 + - _Decal1OnlyVideo: 0 + - _Decal1OverrideAlphaMode: 0 + - _Decal1TPSMaskStrength: 1 + - _Decal1UseDecalAlpha: 0 + - _Decal1VideoAspectFix: 0 + - _Decal1VideoEmissionStrength: 0 + - _Decal1VideoEnabled: 0 + - _Decal1VideoFitToScale: 1 + - _Decal2ApplyGlobalMaskBlendType: 0 + - _Decal2ApplyGlobalMaskIndex: 0 + - _Decal2ChannelSeparation: 0 + - _Decal2ChannelSeparationAngleStrength: 0 + - _Decal2ChannelSeparationEnable: 0 + - _Decal2ChannelSeparationHue: 0 + - _Decal2ChannelSeparationPremultiply: 0 + - _Decal2ChannelSeparationVertical: 0 + - _Decal2Depth: 0 + - _Decal2FaceMask: 0 + - _Decal2GlobalMask: 0 + - _Decal2GlobalMaskBlendType: 2 + - _Decal2HueAngleStrength: 0 + - _Decal2MaskChannel: 2 + - _Decal2OnlyVideo: 0 + - _Decal2OverrideAlphaMode: 0 + - _Decal2TPSMaskStrength: 1 + - _Decal2UseDecalAlpha: 0 + - _Decal2VideoAspectFix: 0 + - _Decal2VideoEmissionStrength: 0 + - _Decal2VideoEnabled: 0 + - _Decal2VideoFitToScale: 1 + - _Decal3ApplyGlobalMaskBlendType: 0 + - _Decal3ApplyGlobalMaskIndex: 0 + - _Decal3ChannelSeparation: 0 + - _Decal3ChannelSeparationAngleStrength: 0 + - _Decal3ChannelSeparationEnable: 0 + - _Decal3ChannelSeparationHue: 0 + - _Decal3ChannelSeparationPremultiply: 0 + - _Decal3ChannelSeparationVertical: 0 + - _Decal3Depth: 0 + - _Decal3FaceMask: 0 + - _Decal3GlobalMask: 0 + - _Decal3GlobalMaskBlendType: 2 + - _Decal3HueAngleStrength: 0 + - _Decal3MaskChannel: 3 + - _Decal3OnlyVideo: 0 + - _Decal3OverrideAlphaMode: 0 + - _Decal3TPSMaskStrength: 1 + - _Decal3UseDecalAlpha: 0 + - _Decal3VideoAspectFix: 0 + - _Decal3VideoEmissionStrength: 0 + - _Decal3VideoEnabled: 0 + - _Decal3VideoFitToScale: 1 + - _DecalBlendAlpha: 1 + - _DecalBlendAlpha1: 1 + - _DecalBlendAlpha2: 1 + - _DecalBlendAlpha3: 1 + - _DecalBlendType: 0 + - _DecalBlendType1: 0 + - _DecalBlendType2: 0 + - _DecalBlendType3: 0 + - _DecalColor1ThemeIndex: 0 + - _DecalColor2ThemeIndex: 0 + - _DecalColor3ThemeIndex: 0 + - _DecalColorThemeIndex: 0 + - _DecalEmissionStrength: 0 + - _DecalEmissionStrength1: 0 + - _DecalEmissionStrength2: 0 + - _DecalEmissionStrength3: 0 + - _DecalEnabled: 0 + - _DecalEnabled1: 0 + - _DecalEnabled2: 0 + - _DecalEnabled3: 0 + - _DecalHueShift: 0 + - _DecalHueShift1: 0 + - _DecalHueShift2: 0 + - _DecalHueShift3: 0 + - _DecalHueShiftColorSpace: 0 + - _DecalHueShiftColorSpace1: 0 + - _DecalHueShiftColorSpace2: 0 + - _DecalHueShiftColorSpace3: 0 + - _DecalHueShiftEnabled: 0 + - _DecalHueShiftEnabled1: 0 + - _DecalHueShiftEnabled2: 0 + - _DecalHueShiftEnabled3: 0 + - _DecalHueShiftSelectOrShift: 1 + - _DecalHueShiftSelectOrShift1: 1 + - _DecalHueShiftSelectOrShift2: 1 + - _DecalHueShiftSelectOrShift3: 1 + - _DecalHueShiftSpeed: 0 + - _DecalHueShiftSpeed1: 0 + - _DecalHueShiftSpeed2: 0 + - _DecalHueShiftSpeed3: 0 + - _DecalMaskUV: 0 + - _DecalMirroredUVMode: 0 + - _DecalMirroredUVMode1: 0 + - _DecalMirroredUVMode2: 0 + - _DecalMirroredUVMode3: 0 + - _DecalOverrideAlpha: 0 + - _DecalOverrideAlpha1: 0 + - _DecalOverrideAlpha2: 0 + - _DecalOverrideAlpha3: 0 + - _DecalRotation: 0 + - _DecalRotation1: 0 + - _DecalRotation2: 0 + - _DecalRotation3: 0 + - _DecalRotationCTALBand0: 0 + - _DecalRotationCTALBand1: 0 + - _DecalRotationCTALBand2: 0 + - _DecalRotationCTALBand3: 0 + - _DecalRotationCTALSpeed0: 0 + - _DecalRotationCTALSpeed1: 0 + - _DecalRotationCTALSpeed2: 0 + - _DecalRotationCTALSpeed3: 0 + - _DecalRotationCTALType0: 0 + - _DecalRotationCTALType1: 0 + - _DecalRotationCTALType2: 0 + - _DecalRotationCTALType3: 0 + - _DecalRotationSpeed: 0 + - _DecalRotationSpeed1: 0 + - _DecalRotationSpeed2: 0 + - _DecalRotationSpeed3: 0 + - _DecalSymmetryMode: 0 + - _DecalSymmetryMode1: 0 + - _DecalSymmetryMode2: 0 + - _DecalSymmetryMode3: 0 + - _DecalTPSDepthMaskEnabled: 0 + - _DecalTexture1UV: 0 + - _DecalTexture2UV: 0 + - _DecalTexture3UV: 0 + - _DecalTextureUV: 0 + - _DecalTiled: 0 + - _DecalTiled1: 0 + - _DecalTiled2: 0 + - _DecalTiled3: 0 + - _DepthAlphaMaxDepth: 1 + - _DepthAlphaMaxValue: 0 + - _DepthAlphaMinDepth: 0 + - _DepthAlphaMinValue: 1 + - _DepthAlphaToggle: 0 + - _DepthBulgeFadeLength: 0.02 + - _DepthBulgeHeight: 0.02 + - _DepthBulgeMaskChannel: 0 + - _DepthBulgeMaskUV: 0 + - _DepthBulgeWarning: 0 + - _DepthColorBlendMode: 0 + - _DepthColorMaxDepth: 1 + - _DepthColorMaxValue: 0 + - _DepthColorMinDepth: 0 + - _DepthColorMinValue: 1 + - _DepthColorThemeIndex: 0 + - _DepthColorToggle: 0 + - _DepthEmissionStrength: 0 + - _DepthFXWarning: 0 + - _DepthMaskChannel: 0 + - _DepthMaskGlobalMask: 0 + - _DepthMaskGlobalMaskBlendType: 2 + - _DepthMaskUV: 0 + - _DepthRimAdd: 0 + - _DepthRimAdditiveLighting: 0 + - _DepthRimBrightness: 1 + - _DepthRimColorThemeIndex: 0 + - _DepthRimEmission: 0 + - _DepthRimHideInShadow: 0 + - _DepthRimMixBaseColor: 0 + - _DepthRimMixLightColor: 0 + - _DepthRimMultiply: 0 + - _DepthRimNormalToUse: 1 + - _DepthRimReplace: 0 + - _DepthRimSharpness: 0.2 + - _DepthRimType: 0 + - _DepthRimWidth: 0.2 + - _DepthTextureUV: 0 + - _DetailBrightness: 1 + - _DetailEnabled: 0 + - _DetailMaskStochastic: 0 + - _DetailMaskUV: 0 + - _DetailNormalGlobalMask: 0 + - _DetailNormalGlobalMaskBlendType: 2 + - _DetailNormalMapScale: 1 + - _DetailNormalMapStochastic: 0 + - _DetailNormalMapUV: 0 + - _DetailTexGlobalMask: 0 + - _DetailTexGlobalMaskBlendType: 2 + - _DetailTexIntensity: 1 + - _DetailTexStochastic: 0 + - _DetailTexUV: 0 + - _DetailTintThemeIndex: 0 + - _DisableDirectionalInAdd: 1 + - _DissolveAlpha: 0 + - _DissolveAlpha0: 0 + - _DissolveAlpha1: 0 + - _DissolveAlpha2: 0 + - _DissolveAlpha3: 0 + - _DissolveAlpha4: 0 + - _DissolveAlpha5: 0 + - _DissolveAlpha6: 0 + - _DissolveAlpha7: 0 + - _DissolveAlpha8: 0 + - _DissolveAlpha9: 0 + - _DissolveApplyGlobalMaskBlendType: 0 + - _DissolveApplyGlobalMaskIndex: 0 + - _DissolveDetailEdgeSmoothing: 0 + - _DissolveDetailNoiseUV: 0 + - _DissolveDetailStrength: 0.1 + - _DissolveEdgeColorThemeIndex: 0 + - _DissolveEdgeEmission: 0 + - _DissolveEdgeHardness: 0.5 + - _DissolveEdgeHueSelectOrShift: 1 + - _DissolveEdgeHueShift: 0 + - _DissolveEdgeHueShiftColorSpace: 0 + - _DissolveEdgeHueShiftEnabled: 0 + - _DissolveEdgeHueShiftSpeed: 0 + - _DissolveEdgeWidth: 0.025 + - _DissolveHueSelectOrShift: 1 + - _DissolveHueShift: 0 + - _DissolveHueShiftColorSpace: 0 + - _DissolveHueShiftEnabled: 0 + - _DissolveHueShiftSpeed: 0 + - _DissolveInverseApplyGlobalMaskBlendType: 0 + - _DissolveInverseApplyGlobalMaskIndex: 0 + - _DissolveInvertDetailNoise: 0 + - _DissolveInvertNoise: 0 + - _DissolveMaskGlobalMask: 0 + - _DissolveMaskGlobalMaskBlendType: 2 + - _DissolveMaskInvert: 0 + - _DissolveMaskUV: 0 + - _DissolveNoiseTextureUV: 0 + - _DissolveP2PClamp: 0 + - _DissolveP2PEdgeLength: 0.1 + - _DissolveP2PWorldLocal: 0 + - _DissolveTextureColorThemeIndex: 0 + - _DissolveToEmissionStrength: 0 + - _DissolveToTextureUV: 0 + - _DissolveType: 1 + - _DissolveUseVertexColors: 0 + - _DistortionFlowTexture1UV: 0 + - _DistortionFlowTextureUV: 0 + - _DistortionMaskChannel: 0 + - _DistortionMaskUV: 0 + - _DistortionStrength: 0.03 + - _DistortionStrength1: 0.01 + - _DistortionStrength1AudioLinkBand: 0 + - _DistortionStrengthAudioLinkBand: 0 + - _DistortionUvToDistort: 0 + - _DstBlend: 0 + - _DstBlendAlpha: 10 + - _EmissionAL0Enabled: 0 + - _EmissionAL0MultipliersBand: 0 + - _EmissionAL0StrengthBand: 0 + - _EmissionAL1Enabled: 0 + - _EmissionAL1MultipliersBand: 0 + - _EmissionAL1StrengthBand: 0 + - _EmissionAL2Enabled: 0 + - _EmissionAL2MultipliersBand: 0 + - _EmissionAL2StrengthBand: 0 + - _EmissionAL3Enabled: 0 + - _EmissionAL3MultipliersBand: 0 + - _EmissionAL3StrengthBand: 0 + - _EmissionBaseColorAsMap: 0 + - _EmissionBaseColorAsMap1: 0 + - _EmissionBaseColorAsMap2: 0 + - _EmissionBaseColorAsMap3: 0 + - _EmissionBlinkingEnabled: 0 + - _EmissionBlinkingEnabled1: 0 + - _EmissionBlinkingEnabled2: 0 + - _EmissionBlinkingEnabled3: 0 + - _EmissionBlinkingOffset: 0 + - _EmissionBlinkingOffset1: 0 + - _EmissionBlinkingOffset2: 0 + - _EmissionBlinkingOffset3: 0 + - _EmissionCenterOutEnabled: 0 + - _EmissionCenterOutEnabled1: 0 + - _EmissionCenterOutEnabled2: 0 + - _EmissionCenterOutEnabled3: 0 + - _EmissionCenterOutSpeed: 5 + - _EmissionCenterOutSpeed1: 5 + - _EmissionCenterOutSpeed2: 5 + - _EmissionCenterOutSpeed3: 5 + - _EmissionColor1ThemeIndex: 0 + - _EmissionColor2ThemeIndex: 0 + - _EmissionColor3ThemeIndex: 0 + - _EmissionColorThemeIndex: 0 + - _EmissionFluorescence: 0 + - _EmissionFluorescence1: 0 + - _EmissionFluorescence2: 0 + - _EmissionFluorescence3: 0 + - _EmissionHueSelectOrShift: 1 + - _EmissionHueSelectOrShift1: 1 + - _EmissionHueSelectOrShift2: 1 + - _EmissionHueSelectOrShift3: 1 + - _EmissionHueShift: 0 + - _EmissionHueShift1: 0 + - _EmissionHueShift2: 0 + - _EmissionHueShift3: 0 + - _EmissionHueShiftColorSpace: 0 + - _EmissionHueShiftColorSpace1: 0 + - _EmissionHueShiftColorSpace2: 0 + - _EmissionHueShiftColorSpace3: 0 + - _EmissionHueShiftEnabled: 0 + - _EmissionHueShiftEnabled1: 0 + - _EmissionHueShiftEnabled2: 0 + - _EmissionHueShiftEnabled3: 0 + - _EmissionHueShiftSpeed: 0 + - _EmissionHueShiftSpeed1: 0 + - _EmissionHueShiftSpeed2: 0 + - _EmissionHueShiftSpeed3: 0 + - _EmissionMap1UV: 0 + - _EmissionMap2UV: 0 + - _EmissionMap3UV: 0 + - _EmissionMapUV: 0 + - _EmissionMask0GlobalMask: 0 + - _EmissionMask0GlobalMaskBlendType: 2 + - _EmissionMask1Channel: 0 + - _EmissionMask1GlobalMask: 0 + - _EmissionMask1GlobalMaskBlendType: 2 + - _EmissionMask1UV: 0 + - _EmissionMask2Channel: 0 + - _EmissionMask2GlobalMask: 0 + - _EmissionMask2GlobalMaskBlendType: 2 + - _EmissionMask2UV: 0 + - _EmissionMask3Channel: 0 + - _EmissionMask3GlobalMask: 0 + - _EmissionMask3GlobalMaskBlendType: 2 + - _EmissionMask3UV: 0 + - _EmissionMaskChannel: 0 + - _EmissionMaskInvert: 0 + - _EmissionMaskInvert1: 0 + - _EmissionMaskInvert2: 0 + - _EmissionMaskInvert3: 0 + - _EmissionMaskUV: 0 + - _EmissionReplace0: 0 + - _EmissionReplace1: 0 + - _EmissionReplace2: 0 + - _EmissionReplace3: 0 + - _EmissionSaturation: 0 + - _EmissionSaturation1: 0 + - _EmissionSaturation2: 0 + - _EmissionSaturation3: 0 + - _EmissionScrollingOffset: 0 + - _EmissionScrollingOffset1: 0 + - _EmissionScrollingOffset2: 0 + - _EmissionScrollingOffset3: 0 + - _EmissionScrollingUseCurve: 0 + - _EmissionScrollingUseCurve1: 0 + - _EmissionScrollingUseCurve2: 0 + - _EmissionScrollingUseCurve3: 0 + - _EmissionScrollingVertexColor: 0 + - _EmissionScrollingVertexColor1: 0 + - _EmissionScrollingVertexColor2: 0 + - _EmissionScrollingVertexColor3: 0 + - _EmissionStrength: 0 + - _EmissionStrength1: 0 + - _EmissionStrength2: 0 + - _EmissionStrength3: 0 + - _EmissiveBlink_Max: 1 + - _EmissiveBlink_Max1: 1 + - _EmissiveBlink_Max2: 1 + - _EmissiveBlink_Max3: 1 + - _EmissiveBlink_Min: 0 + - _EmissiveBlink_Min1: 0 + - _EmissiveBlink_Min2: 0 + - _EmissiveBlink_Min3: 0 + - _EmissiveBlink_Velocity: 4 + - _EmissiveBlink_Velocity1: 4 + - _EmissiveBlink_Velocity2: 4 + - _EmissiveBlink_Velocity3: 4 + - _EmissiveScroll_Interval: 20 + - _EmissiveScroll_Interval1: 20 + - _EmissiveScroll_Interval2: 20 + - _EmissiveScroll_Interval3: 20 + - _EmissiveScroll_Velocity: 10 + - _EmissiveScroll_Velocity1: 10 + - _EmissiveScroll_Velocity2: 10 + - _EmissiveScroll_Velocity3: 10 + - _EmissiveScroll_Width: 10 + - _EmissiveScroll_Width1: 10 + - _EmissiveScroll_Width2: 10 + - _EmissiveScroll_Width3: 10 + - _EnableALDecal: 0 + - _EnableAniso: 0 + - _EnableAudioLink: 0 + - _EnableDepthBulge: 0 + - _EnableDepthRimLighting: 0 + - _EnableDissolve: 0 + - _EnableDissolveAudioLink: 0 + - _EnableDistortion: 0 + - _EnableDistortionAudioLink: 0 + - _EnableEmission: 0 + - _EnableEmission1: 0 + - _EnableEmission2: 0 + - _EnableEmission3: 0 + - _EnableEnvironmentalRim: 0 + - _EnableFlipbook: 0 + - _EnableGITDEmission: 0 + - _EnableGITDEmission1: 0 + - _EnableGITDEmission2: 0 + - _EnableGITDEmission3: 0 + - _EnableMirrorOptions: 0 + - _EnableOutlines: 0 + - _EnablePathRemapping: 0 + - _EnablePathing: 0 + - _EnableRim2Lighting: 0 + - _EnableRimLighting: 0 + - _EnableTouchGlow: 0 + - _EnableTruchet: 0 + - _EnableUDIMDiscardOptions: 0 + - _EnableUDIMFaceDiscardOptions: 0 + - _EnableVolumeColor: 0 + - _EntranceStiffness: 0.01 + - _EntryOpenDuration: 0.1 + - _FFBFOutlineStencilHelp0: 0 + - _FFBFOutlineStencilHelp1: 0 + - _FFBFStencilHelp0: 0 + - _FFBFStencilHelp1: 0 + - _FXProximityColor: 0 + - _FXProximityColorBackFace: 0 + - _FXProximityColorMaxColorThemeIndex: 0 + - _FXProximityColorMaxDistance: 1 + - _FXProximityColorMinColorThemeIndex: 0 + - _FXProximityColorMinDistance: 0 + - _FXProximityColorType: 1 + - _FlipBackfaceNormals: 1 + - _FlipbookAlphaControlsFinalAlpha: 0 + - _FlipbookBlendType: 0 + - _FlipbookChronoType: 0 + - _FlipbookChronotensityBand: 0 + - _FlipbookChronotensityEnabled: 0 + - _FlipbookChronotensitySpeed: 0 + - _FlipbookColorReplaces: 0 + - _FlipbookColorThemeIndex: 0 + - _FlipbookCrossfadeEnabled: 0 + - _FlipbookCurrentFrame: 0 + - _FlipbookEmissionStrength: 0 + - _FlipbookEndFrame: 0 + - _FlipbookFPS: 30 + - _FlipbookFrameOffset: 0 + - _FlipbookHueSelectOrShift: 1 + - _FlipbookHueShift: 0 + - _FlipbookHueShiftColorSpace: 0 + - _FlipbookHueShiftEnabled: 0 + - _FlipbookHueShiftSpeed: 0 + - _FlipbookIntensityControlsAlpha: 0 + - _FlipbookManualFrameControl: 0 + - _FlipbookMaskChannel: 0 + - _FlipbookMaskGlobalMask: 0 + - _FlipbookMaskGlobalMaskBlendType: 2 + - _FlipbookMaskUV: 0 + - _FlipbookReplace: 1 + - _FlipbookRotation: 0 + - _FlipbookRotationSpeed: 0 + - _FlipbookStartAndEnd: 0 + - _FlipbookStartFrame: 0 + - _FlipbookTexArrayUV: 0 + - _FlipbookTiled: 0 + - _FogHeightOffset: 0 + - _FogHeightScale: 1 + - _FogScale: 1 + - _FogStartOffset: 0 + - _ForceFlatRampedLightmap: 1 + - _ForgotToLockMaterial: 1 + - _GGXAnisotropics: 0 + - _GIEmissionMultiplier: 1 + - _GITDEMaxEmissionMultiplier: 0 + - _GITDEMaxEmissionMultiplier1: 0 + - _GITDEMaxEmissionMultiplier2: 0 + - _GITDEMaxEmissionMultiplier3: 0 + - _GITDEMaxLight: 1 + - _GITDEMaxLight1: 1 + - _GITDEMaxLight2: 1 + - _GITDEMaxLight3: 1 + - _GITDEMinEmissionMultiplier: 1 + - _GITDEMinEmissionMultiplier1: 1 + - _GITDEMinEmissionMultiplier2: 1 + - _GITDEMinEmissionMultiplier3: 1 + - _GITDEMinLight: 0 + - _GITDEMinLight1: 0 + - _GITDEMinLight2: 0 + - _GITDEMinLight3: 0 + - _GITDEWorldOrMesh: 0 + - _GITDEWorldOrMesh1: 0 + - _GITDEWorldOrMesh2: 0 + - _GITDEWorldOrMesh3: 0 + - _GSAAStrength: 0 + - _GlitterALAlphaAddBand: 0 + - _GlitterALChronoRotationSpeed: 0 + - _GlitterALChronoRotationSpeedBand: 0 + - _GlitterALChronoRotationSpeedType: 0 + - _GlitterALChronoSparkleSpeed: 0 + - _GlitterALChronoSparkleSpeedBand: 0 + - _GlitterALChronoSparkleSpeedType: 0 + - _GlitterALEnabled: 0 + - _GlitterALMaxBrightnessBand: 0 + - _GlitterALSizeAddBand: 0 + - _GlitterAngleRange: 90 + - _GlitterBias: 0.8 + - _GlitterBlendType: 0 + - _GlitterBrightness: 3 + - _GlitterCenterSize: 0.08 + - _GlitterColorMapUV: 0 + - _GlitterColorThemeIndex: 0 + - _GlitterContrast: 300 + - _GlitterEnable: 0 + - _GlitterFrequency: 300 + - _GlitterHideInShadow: 0 + - _GlitterHueSelectOrShift: 1 + - _GlitterHueShift: 0 + - _GlitterHueShiftColorSpace: 0 + - _GlitterHueShiftEnabled: 0 + - _GlitterHueShiftSpeed: 0 + - _GlitterJaggyFix: 0 + - _GlitterLayers: 2 + - _GlitterMaskChannel: 0 + - _GlitterMaskGlobalMask: 0 + - _GlitterMaskGlobalMaskBlendType: 2 + - _GlitterMaskInvert: 0 + - _GlitterMaskUV: 0 + - _GlitterMinBrightness: 0 + - _GlitterMode: 0 + - _GlitterRandomColors: 0 + - _GlitterRandomLocation: 1 + - _GlitterRandomRotation: 0 + - _GlitterRandomSize: 0 + - _GlitterScaleWithLighting: 0 + - _GlitterShape: 0 + - _GlitterSize: 0.3 + - _GlitterSpeed: 10 + - _GlitterTextureRotation: 0 + - _GlitterUV: 0 + - _GlitterUseNormals: 0 + - _GlitterUseSurfaceColor: 0 + - _GlobalMaskBackface_0: 0 + - _GlobalMaskBackface_1: 0 + - _GlobalMaskBackface_10: 0 + - _GlobalMaskBackface_11: 0 + - _GlobalMaskBackface_12: 0 + - _GlobalMaskBackface_13: 0 + - _GlobalMaskBackface_14: 0 + - _GlobalMaskBackface_15: 0 + - _GlobalMaskBackface_2: 0 + - _GlobalMaskBackface_3: 0 + - _GlobalMaskBackface_4: 0 + - _GlobalMaskBackface_5: 0 + - _GlobalMaskBackface_6: 0 + - _GlobalMaskBackface_7: 0 + - _GlobalMaskBackface_8: 0 + - _GlobalMaskBackface_9: 0 + - _GlobalMaskCamera_0: 0 + - _GlobalMaskCamera_1: 0 + - _GlobalMaskCamera_10: 0 + - _GlobalMaskCamera_11: 0 + - _GlobalMaskCamera_12: 0 + - _GlobalMaskCamera_13: 0 + - _GlobalMaskCamera_14: 0 + - _GlobalMaskCamera_15: 0 + - _GlobalMaskCamera_2: 0 + - _GlobalMaskCamera_3: 0 + - _GlobalMaskCamera_4: 0 + - _GlobalMaskCamera_5: 0 + - _GlobalMaskCamera_6: 0 + - _GlobalMaskCamera_7: 0 + - _GlobalMaskCamera_8: 0 + - _GlobalMaskCamera_9: 0 + - _GlobalMaskDistanceBlendType_0: 0 + - _GlobalMaskDistanceBlendType_1: 0 + - _GlobalMaskDistanceBlendType_10: 0 + - _GlobalMaskDistanceBlendType_11: 0 + - _GlobalMaskDistanceBlendType_12: 0 + - _GlobalMaskDistanceBlendType_13: 0 + - _GlobalMaskDistanceBlendType_14: 0 + - _GlobalMaskDistanceBlendType_15: 0 + - _GlobalMaskDistanceBlendType_2: 0 + - _GlobalMaskDistanceBlendType_3: 0 + - _GlobalMaskDistanceBlendType_4: 0 + - _GlobalMaskDistanceBlendType_5: 0 + - _GlobalMaskDistanceBlendType_6: 0 + - _GlobalMaskDistanceBlendType_7: 0 + - _GlobalMaskDistanceBlendType_8: 0 + - _GlobalMaskDistanceBlendType_9: 0 + - _GlobalMaskDistanceEnable_0: 0 + - _GlobalMaskDistanceEnable_1: 0 + - _GlobalMaskDistanceEnable_10: 0 + - _GlobalMaskDistanceEnable_11: 0 + - _GlobalMaskDistanceEnable_12: 0 + - _GlobalMaskDistanceEnable_13: 0 + - _GlobalMaskDistanceEnable_14: 0 + - _GlobalMaskDistanceEnable_15: 0 + - _GlobalMaskDistanceEnable_2: 0 + - _GlobalMaskDistanceEnable_3: 0 + - _GlobalMaskDistanceEnable_4: 0 + - _GlobalMaskDistanceEnable_5: 0 + - _GlobalMaskDistanceEnable_6: 0 + - _GlobalMaskDistanceEnable_7: 0 + - _GlobalMaskDistanceEnable_8: 0 + - _GlobalMaskDistanceEnable_9: 0 + - _GlobalMaskDistanceMaxAlpha_0: 1 + - _GlobalMaskDistanceMaxAlpha_1: 1 + - _GlobalMaskDistanceMaxAlpha_10: 1 + - _GlobalMaskDistanceMaxAlpha_11: 1 + - _GlobalMaskDistanceMaxAlpha_12: 1 + - _GlobalMaskDistanceMaxAlpha_13: 1 + - _GlobalMaskDistanceMaxAlpha_14: 1 + - _GlobalMaskDistanceMaxAlpha_15: 1 + - _GlobalMaskDistanceMaxAlpha_2: 1 + - _GlobalMaskDistanceMaxAlpha_3: 1 + - _GlobalMaskDistanceMaxAlpha_4: 1 + - _GlobalMaskDistanceMaxAlpha_5: 1 + - _GlobalMaskDistanceMaxAlpha_6: 1 + - _GlobalMaskDistanceMaxAlpha_7: 1 + - _GlobalMaskDistanceMaxAlpha_8: 1 + - _GlobalMaskDistanceMaxAlpha_9: 1 + - _GlobalMaskDistanceMax_0: 2 + - _GlobalMaskDistanceMax_1: 2 + - _GlobalMaskDistanceMax_10: 2 + - _GlobalMaskDistanceMax_11: 2 + - _GlobalMaskDistanceMax_12: 2 + - _GlobalMaskDistanceMax_13: 2 + - _GlobalMaskDistanceMax_14: 2 + - _GlobalMaskDistanceMax_15: 2 + - _GlobalMaskDistanceMax_2: 2 + - _GlobalMaskDistanceMax_3: 2 + - _GlobalMaskDistanceMax_4: 2 + - _GlobalMaskDistanceMax_5: 2 + - _GlobalMaskDistanceMax_6: 2 + - _GlobalMaskDistanceMax_7: 2 + - _GlobalMaskDistanceMax_8: 2 + - _GlobalMaskDistanceMax_9: 2 + - _GlobalMaskDistanceMinAlpha_0: 0 + - _GlobalMaskDistanceMinAlpha_1: 0 + - _GlobalMaskDistanceMinAlpha_10: 0 + - _GlobalMaskDistanceMinAlpha_11: 0 + - _GlobalMaskDistanceMinAlpha_12: 0 + - _GlobalMaskDistanceMinAlpha_13: 0 + - _GlobalMaskDistanceMinAlpha_14: 0 + - _GlobalMaskDistanceMinAlpha_15: 0 + - _GlobalMaskDistanceMinAlpha_2: 0 + - _GlobalMaskDistanceMinAlpha_3: 0 + - _GlobalMaskDistanceMinAlpha_4: 0 + - _GlobalMaskDistanceMinAlpha_5: 0 + - _GlobalMaskDistanceMinAlpha_6: 0 + - _GlobalMaskDistanceMinAlpha_7: 0 + - _GlobalMaskDistanceMinAlpha_8: 0 + - _GlobalMaskDistanceMinAlpha_9: 0 + - _GlobalMaskDistanceMin_0: 1 + - _GlobalMaskDistanceMin_1: 1 + - _GlobalMaskDistanceMin_10: 1 + - _GlobalMaskDistanceMin_11: 1 + - _GlobalMaskDistanceMin_12: 1 + - _GlobalMaskDistanceMin_13: 1 + - _GlobalMaskDistanceMin_14: 1 + - _GlobalMaskDistanceMin_15: 1 + - _GlobalMaskDistanceMin_2: 1 + - _GlobalMaskDistanceMin_3: 1 + - _GlobalMaskDistanceMin_4: 1 + - _GlobalMaskDistanceMin_5: 1 + - _GlobalMaskDistanceMin_6: 1 + - _GlobalMaskDistanceMin_7: 1 + - _GlobalMaskDistanceMin_8: 1 + - _GlobalMaskDistanceMin_9: 1 + - _GlobalMaskDistanceType_0: 1 + - _GlobalMaskDistanceType_1: 1 + - _GlobalMaskDistanceType_10: 1 + - _GlobalMaskDistanceType_11: 1 + - _GlobalMaskDistanceType_12: 1 + - _GlobalMaskDistanceType_13: 1 + - _GlobalMaskDistanceType_14: 1 + - _GlobalMaskDistanceType_15: 1 + - _GlobalMaskDistanceType_2: 1 + - _GlobalMaskDistanceType_3: 1 + - _GlobalMaskDistanceType_4: 1 + - _GlobalMaskDistanceType_5: 1 + - _GlobalMaskDistanceType_6: 1 + - _GlobalMaskDistanceType_7: 1 + - _GlobalMaskDistanceType_8: 1 + - _GlobalMaskDistanceType_9: 1 + - _GlobalMaskMirrorVisibilityMode: 1 + - _GlobalMaskMirror_0: 0 + - _GlobalMaskMirror_1: 0 + - _GlobalMaskMirror_10: 0 + - _GlobalMaskMirror_11: 0 + - _GlobalMaskMirror_12: 0 + - _GlobalMaskMirror_13: 0 + - _GlobalMaskMirror_14: 0 + - _GlobalMaskMirror_15: 0 + - _GlobalMaskMirror_2: 0 + - _GlobalMaskMirror_3: 0 + - _GlobalMaskMirror_4: 0 + - _GlobalMaskMirror_5: 0 + - _GlobalMaskMirror_6: 0 + - _GlobalMaskMirror_7: 0 + - _GlobalMaskMirror_8: 0 + - _GlobalMaskMirror_9: 0 + - _GlobalMaskModifiersBackfaceEnable: 0 + - _GlobalMaskModifiersCameraEnable: 0 + - _GlobalMaskModifiersCameraInfo: 0 + - _GlobalMaskModifiersDistanceEnable: 0 + - _GlobalMaskModifiersMirrorEnable: 0 + - _GlobalMaskOptionsEnable: 0 + - _GlobalMaskOptionsType: 0 + - _GlobalMaskSlider_0: 0 + - _GlobalMaskSlider_1: 0 + - _GlobalMaskSlider_10: 0 + - _GlobalMaskSlider_11: 0 + - _GlobalMaskSlider_12: 0 + - _GlobalMaskSlider_13: 0 + - _GlobalMaskSlider_14: 0 + - _GlobalMaskSlider_15: 0 + - _GlobalMaskSlider_2: 0 + - _GlobalMaskSlider_3: 0 + - _GlobalMaskSlider_4: 0 + - _GlobalMaskSlider_5: 0 + - _GlobalMaskSlider_6: 0 + - _GlobalMaskSlider_7: 0 + - _GlobalMaskSlider_8: 0 + - _GlobalMaskSlider_9: 0 + - _GlobalMaskTexture0Split: 0 + - _GlobalMaskTexture0UV: 0 + - _GlobalMaskTexture1Split: 0 + - _GlobalMaskTexture1UV: 0 + - _GlobalMaskTexture2Split: 0 + - _GlobalMaskTexture2UV: 0 + - _GlobalMaskTexture3Split: 0 + - _GlobalMaskTexture3UV: 0 + - _GlobalMaskTexturesEnable: 0 + - _GlobalMaskToggleOff_0: 0 + - _GlobalMaskToggleOff_1: 0 + - _GlobalMaskToggleOff_10: 0 + - _GlobalMaskToggleOff_11: 0 + - _GlobalMaskToggleOff_12: 0 + - _GlobalMaskToggleOff_13: 0 + - _GlobalMaskToggleOff_14: 0 + - _GlobalMaskToggleOff_15: 0 + - _GlobalMaskToggleOff_2: 0 + - _GlobalMaskToggleOff_3: 0 + - _GlobalMaskToggleOff_4: 0 + - _GlobalMaskToggleOff_5: 0 + - _GlobalMaskToggleOff_6: 0 + - _GlobalMaskToggleOff_7: 0 + - _GlobalMaskToggleOff_8: 0 + - _GlobalMaskToggleOff_9: 0 + - _GlobalMaskToggleOn_0: 0 + - _GlobalMaskToggleOn_1: 0 + - _GlobalMaskToggleOn_10: 0 + - _GlobalMaskToggleOn_11: 0 + - _GlobalMaskToggleOn_12: 0 + - _GlobalMaskToggleOn_13: 0 + - _GlobalMaskToggleOn_14: 0 + - _GlobalMaskToggleOn_15: 0 + - _GlobalMaskToggleOn_2: 0 + - _GlobalMaskToggleOn_3: 0 + - _GlobalMaskToggleOn_4: 0 + - _GlobalMaskToggleOn_5: 0 + - _GlobalMaskToggleOn_6: 0 + - _GlobalMaskToggleOn_7: 0 + - _GlobalMaskToggleOn_8: 0 + - _GlobalMaskToggleOn_9: 0 + - _GlobalMaskVertexColorAlpha: 0 + - _GlobalMaskVertexColorAlphaBlendType: 2 + - _GlobalMaskVertexColorBlue: 0 + - _GlobalMaskVertexColorBlueBlendType: 2 + - _GlobalMaskVertexColorGreen: 0 + - _GlobalMaskVertexColorGreenBlendType: 2 + - _GlobalMaskVertexColorLinearSpace: 1 + - _GlobalMaskVertexColorRed: 0 + - _GlobalMaskVertexColorRedBlendType: 2 + - _GlobalThemeHue0: 0 + - _GlobalThemeHue1: 0 + - _GlobalThemeHue2: 0 + - _GlobalThemeHue3: 0 + - _GlobalThemeHueSpeed0: 0 + - _GlobalThemeHueSpeed1: 0 + - _GlobalThemeHueSpeed2: 0 + - _GlobalThemeHueSpeed3: 0 + - _GlobalThemeSaturation0: 0 + - _GlobalThemeSaturation1: 0 + - _GlobalThemeSaturation2: 0 + - _GlobalThemeSaturation3: 0 + - _GlobalThemeValue0: 0 + - _GlobalThemeValue1: 0 + - _GlobalThemeValue2: 0 + - _GlobalThemeValue3: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GreenAlphaAdd: 0 + - _GreenColorThemeIndex: 0 + - _GreenTextureStochastic: 0 + - _GreenTextureUV: 0 + - _HeightMapUV: 0 + - _HeightOffset: 0 + - _HeightStepsMax: 128 + - _HeightStepsMin: 10 + - _HeightStrength: 0.005 + - _HeightmaskChannel: 0 + - _HeightmaskInvert: 0 + - _HeightmaskUV: 0 + - _HighColorThemeIndex: 0 + - _HighColor_Power: 0.2 + - _HighColor_TexUV: 0 + - _IgnoreCastedShadows: 0 + - _IgnoreFog: 0 + - _Is_BlendAddToHiColor: 0 + - _Is_LightColor_Ap_Rim2Light: 1 + - _Is_LightColor_Ap_RimLight: 1 + - _Is_LightColor_Rim2Light: 1 + - _Is_LightColor_RimLight: 1 + - _Is_NormalMapToRim2Light: 1 + - _Is_NormalMapToRimLight: 1 + - _Is_SpecularToHighColor: 0 + - _LTCGIEnabled: 0 + - _LTCGI_AnimToggle: 1 + - _LTCGI_Attribution: 0 + - _LTCGI_DiffuseColorThemeIndex: 0 + - _LTCGI_Metallic: 0 + - _LTCGI_Smoothness: 0 + - _LTCGI_SpecularColorThemeIndex: 0 + - _LTCGI_UseEO: 0 + - _LTCGI_UsePBR: 1 + - _Layer1Strength: 1 + - _Layer2Size: 0 + - _Layer2Strength: 0 + - _Length: 0 + - _LightDataAOGlobalMaskBlendTypeR: 2 + - _LightDataAOGlobalMaskR: 0 + - _LightDataAOStrengthA: 0 + - _LightDataAOStrengthB: 0 + - _LightDataAOStrengthG: 0 + - _LightDataAOStrengthR: 1 + - _LightDataDebugEnabled: 0 + - _LightDataDetailShadowGlobalMaskBlendTypeR: 2 + - _LightDataDetailShadowGlobalMaskR: 0 + - _LightDataSDFBlendY: 1 + - _LightDataSDFMapLOD: 0 + - _LightDataSDFMapUV: 0 + - _LightDataShadowMaskGlobalMaskBlendTypeR: 2 + - _LightDataShadowMaskGlobalMaskR: 0 + - _LightDirection_MaskOn: 0 + - _LightDirection_MaskOn2: 0 + - _LightingAOMapsUV: 0 + - _LightingAddDetailShadowStrengthA: 0 + - _LightingAddDetailShadowStrengthB: 0 + - _LightingAddDetailShadowStrengthG: 0 + - _LightingAddDetailShadowStrengthR: 1 + - _LightingAdditiveCastedShadows: 1 + - _LightingAdditiveEnable: 1 + - _LightingAdditiveGradientEnd: 0.5 + - _LightingAdditiveGradientStart: 0 + - _LightingAdditiveLimit: 1 + - _LightingAdditiveLimited: 1 + - _LightingAdditiveMonochromatic: 0 + - _LightingAdditivePassthrough: 0.5 + - _LightingAdditiveType: 3 + - _LightingCap: 1 + - _LightingCapEnabled: 1 + - _LightingCastedShadows: 0 + - _LightingColorMode: 0 + - _LightingDebugVisualize: 0 + - _LightingDetailShadowMapsUV: 0 + - _LightingDetailShadowStrengthA: 0 + - _LightingDetailShadowStrengthB: 0 + - _LightingDetailShadowStrengthG: 0 + - _LightingDetailShadowStrengthR: 1 + - _LightingDirectionMode: 0 + - _LightingEnableLightVolumes: 1 + - _LightingForceColorEnabled: 0 + - _LightingForcedColorThemeIndex: 0 + - _LightingGradientEnd: 0.5 + - _LightingGradientStart: 0 + - _LightingIgnoreAmbientColor: 1 + - _LightingIndirectUsesNormals: 0 + - _LightingMapMode: 0 + - _LightingMinLightBrightness: 0 + - _LightingMirrorVertexLightingEnabled: 1 + - _LightingMode: 6 + - _LightingMonochromatic: 0 + - _LightingMulitlayerNonLinear: 1 + - _LightingShadowMaskStrengthA: 0 + - _LightingShadowMaskStrengthB: 0 + - _LightingShadowMaskStrengthG: 0 + - _LightingShadowMaskStrengthR: 1 + - _LightingShadowMasksUV: 0 + - _LightingVertexLightingEnabled: 1 + - _LightingViewDirOffsetPitch: 0 + - _LightingViewDirOffsetYaw: 0 + - _LightingWrappedNormalization: 0 + - _LightingWrappedWrap: 0 + - _LineColorThemeIndex: 0 + - _LineWidth: 1 + - _LookAtAlphaAlpha: 1 + - _LookAtAlphaMaskEnabled: 0 + - _LookAtAlphaTargetUp: 0 + - _LookAtBlueAlpha: 1 + - _LookAtBlueMaskEnabled: 0 + - _LookAtBlueTargetUp: 0 + - _LookAtGreenAlpha: 1 + - _LookAtGreenMaskEnabled: 0 + - _LookAtGreenTargetUp: 0 + - _LookAtMaskUV: 0 + - _LookAtRedAlpha: 1 + - _LookAtRedMaskEnabled: 1 + - _LookAtRedTargetUp: 0 + - _LookAtVisibilityEnabled: 0 + - _LookAtVisibilityMirror: 0 + - _LookAtVisibilityMode: 1 + - _LookAtVisibilityVRCCameraDesktop: 1 + - _LookAtVisibilityVRCCameraScreenshot: 1 + - _LookAtVisibilityVRCCameraVR: 1 + - _LookAtVisibilityVRCMirrorDesktop: 1 + - _LookAtVisibilityVRCMirrorVR: 1 + - _LookAtVisibilityVRCRegular: 1 + - _MainALHueShiftBand: 0 + - _MainALHueShiftCTIndex: 0 + - _MainAlphaMaskMode: 2 + - _MainBrightness: 0 + - _MainBrightnessGlobalMask: 0 + - _MainBrightnessGlobalMaskBlendType: 2 + - _MainColorAdjustTextureUV: 0 + - _MainColorAdjustToggle: 0 + - _MainGamma: 1 + - _MainGammaGlobalMask: 0 + - _MainGammaGlobalMaskBlendType: 2 + - _MainGradationStrength: 0 + - _MainHueALCTEnabled: 0 + - _MainHueALMotionSpeed: 1 + - _MainHueGlobalMask: 0 + - _MainHueGlobalMaskBlendType: 2 + - _MainHueShift: 0 + - _MainHueShiftColorSpace: 0 + - _MainHueShiftReplace: 1 + - _MainHueShiftSelectOrShift: 1 + - _MainHueShiftSpeed: 0 + - _MainHueShiftToggle: 0 + - _MainIgnoreTexAlpha: 0 + - _MainPixelMode: 0 + - _MainSaturationGlobalMask: 0 + - _MainSaturationGlobalMaskBlendType: 2 + - _MainTexStochastic: 0 + - _MainTexUV: 0 + - _MainUseVertexColorAlpha: 0 + - _MainVertexColoring: 0 + - _MainVertexColoringEnabled: 0 + - _MainVertexColoringLinearSpace: 1 + - _Matcap0ALAlphaAddBand: 0 + - _Matcap0ALChronoPanBand: 0 + - _Matcap0ALChronoPanSpeed: 0 + - _Matcap0ALChronoPanType: 0 + - _Matcap0ALEmissionAddBand: 0 + - _Matcap0ALEnabled: 0 + - _Matcap0ALIntensityAddBand: 0 + - _Matcap0CircleMaskBlur: 0.1 + - _Matcap0CircleMaskBorder: 0.45 + - _Matcap0CircleMaskEnabled: 0 + - _Matcap0CustomNormal: 0 + - _Matcap0NormalMapScale: 1 + - _Matcap0NormalMapUV: 0 + - _Matcap1ALAlphaAddBand: 0 + - _Matcap1ALChronoPanBand: 0 + - _Matcap1ALChronoPanSpeed: 0 + - _Matcap1ALChronoPanType: 0 + - _Matcap1ALEmissionAddBand: 0 + - _Matcap1ALEnabled: 0 + - _Matcap1ALIntensityAddBand: 0 + - _Matcap1CustomNormal: 0 + - _Matcap1NormalMapScale: 1 + - _Matcap1NormalMapUV: 0 + - _Matcap2ALAlphaAddBand: 0 + - _Matcap2ALChronoPanBand: 0 + - _Matcap2ALChronoPanSpeed: 0 + - _Matcap2ALChronoPanType: 0 + - _Matcap2ALEmissionAddBand: 0 + - _Matcap2ALEnabled: 0 + - _Matcap2ALIntensityAddBand: 0 + - _Matcap2Add: 0 + - _Matcap2AddToLight: 0 + - _Matcap2AlphaOverride: 0 + - _Matcap2ApplyToAlphaBlendType: 0 + - _Matcap2ApplyToAlphaBlending: 1 + - _Matcap2ApplyToAlphaEnabled: 0 + - _Matcap2ApplyToAlphaSourceBlend: 0 + - _Matcap2BaseColorMix: 0 + - _Matcap2Border: 0.5 + - _Matcap2CircleMaskBlur: 0.1 + - _Matcap2CircleMaskBorder: 0.45 + - _Matcap2CircleMaskEnabled: 0 + - _Matcap2ColorThemeIndex: 0 + - _Matcap2CustomNormal: 0 + - _Matcap2EmissionStrength: 0 + - _Matcap2Enable: 0 + - _Matcap2HueSelectOrShift: 1 + - _Matcap2HueShift: 0 + - _Matcap2HueShiftColorSpace: 0 + - _Matcap2HueShiftEnabled: 0 + - _Matcap2HueShiftSpeed: 0 + - _Matcap2Intensity: 1 + - _Matcap2LightColorMix: 0 + - _Matcap2LightMask: 0 + - _Matcap2MaskChannel: 0 + - _Matcap2MaskGlobalMask: 0 + - _Matcap2MaskGlobalMaskBlendType: 2 + - _Matcap2MaskInvert: 0 + - _Matcap2MaskSmoothnessApply: 0 + - _Matcap2MaskSmoothnessChannel: 3 + - _Matcap2MaskUV: 0 + - _Matcap2Mixed: 0 + - _Matcap2Multiply: 0 + - _Matcap2Normal: 1 + - _Matcap2NormalMapScale: 1 + - _Matcap2NormalMapUV: 0 + - _Matcap2Replace: 0 + - _Matcap2Rotation: 0 + - _Matcap2Screen: 0 + - _Matcap2Smoothness: 1 + - _Matcap2TPSDepthEnabled: 0 + - _Matcap2TPSMaskStrength: 1 + - _Matcap2UVMode: 1 + - _Matcap2UVToBlend: 1 + - _Matcap3ALAlphaAddBand: 0 + - _Matcap3ALChronoPanBand: 0 + - _Matcap3ALChronoPanSpeed: 0 + - _Matcap3ALChronoPanType: 0 + - _Matcap3ALEmissionAddBand: 0 + - _Matcap3ALEnabled: 0 + - _Matcap3ALIntensityAddBand: 0 + - _Matcap3Add: 0 + - _Matcap3AddToLight: 0 + - _Matcap3AlphaOverride: 0 + - _Matcap3ApplyToAlphaBlendType: 0 + - _Matcap3ApplyToAlphaBlending: 1 + - _Matcap3ApplyToAlphaEnabled: 0 + - _Matcap3ApplyToAlphaSourceBlend: 0 + - _Matcap3BaseColorMix: 0 + - _Matcap3Border: 0.5 + - _Matcap3CircleMaskBlur: 0.1 + - _Matcap3CircleMaskBorder: 0.45 + - _Matcap3CircleMaskEnabled: 0 + - _Matcap3ColorThemeIndex: 0 + - _Matcap3CustomNormal: 0 + - _Matcap3EmissionStrength: 0 + - _Matcap3Enable: 0 + - _Matcap3HueSelectOrShift: 1 + - _Matcap3HueShift: 0 + - _Matcap3HueShiftColorSpace: 0 + - _Matcap3HueShiftEnabled: 0 + - _Matcap3HueShiftSpeed: 0 + - _Matcap3Intensity: 1 + - _Matcap3LightColorMix: 0 + - _Matcap3LightMask: 0 + - _Matcap3MaskChannel: 0 + - _Matcap3MaskGlobalMask: 0 + - _Matcap3MaskGlobalMaskBlendType: 2 + - _Matcap3MaskInvert: 0 + - _Matcap3MaskSmoothnessApply: 0 + - _Matcap3MaskSmoothnessChannel: 3 + - _Matcap3MaskUV: 0 + - _Matcap3Mixed: 0 + - _Matcap3Multiply: 0 + - _Matcap3Normal: 1 + - _Matcap3NormalMapScale: 1 + - _Matcap3NormalMapUV: 0 + - _Matcap3Replace: 0 + - _Matcap3Rotation: 0 + - _Matcap3Screen: 0 + - _Matcap3Smoothness: 1 + - _Matcap3TPSDepthEnabled: 0 + - _Matcap3TPSMaskStrength: 1 + - _Matcap3UVMode: 1 + - _Matcap3UVToBlend: 1 + - _Matcap4Add: 0 + - _Matcap4AddToLight: 0 + - _Matcap4AlphaOverride: 0 + - _Matcap4ApplyToAlphaBlendType: 0 + - _Matcap4ApplyToAlphaBlending: 1 + - _Matcap4ApplyToAlphaEnabled: 0 + - _Matcap4ApplyToAlphaSourceBlend: 0 + - _Matcap4BaseColorMix: 0 + - _Matcap4Border: 0.5 + - _Matcap4CircleMaskBlur: 0.1 + - _Matcap4CircleMaskBorder: 0.45 + - _Matcap4CircleMaskEnabled: 0 + - _Matcap4ColorThemeIndex: 0 + - _Matcap4EmissionStrength: 0 + - _Matcap4Enable: 0 + - _Matcap4HueSelectOrShift: 1 + - _Matcap4HueShift: 0 + - _Matcap4HueShiftColorSpace: 0 + - _Matcap4HueShiftEnabled: 0 + - _Matcap4HueShiftSpeed: 0 + - _Matcap4Intensity: 1 + - _Matcap4LightColorMix: 0 + - _Matcap4LightMask: 0 + - _Matcap4MaskChannel: 0 + - _Matcap4MaskGlobalMask: 0 + - _Matcap4MaskGlobalMaskBlendType: 2 + - _Matcap4MaskInvert: 0 + - _Matcap4MaskSmoothnessApply: 0 + - _Matcap4MaskSmoothnessChannel: 3 + - _Matcap4MaskUV: 0 + - _Matcap4Mixed: 0 + - _Matcap4Multiply: 0 + - _Matcap4Normal: 1 + - _Matcap4Replace: 0 + - _Matcap4Rotation: 0 + - _Matcap4Screen: 0 + - _Matcap4Smoothness: 1 + - _Matcap4TPSDepthEnabled: 0 + - _Matcap4TPSMaskStrength: 1 + - _Matcap4UVMode: 1 + - _Matcap4UVToBlend: 1 + - _MatcapAdd: 0 + - _MatcapAddToLight: 0 + - _MatcapAlphaOverride: 0 + - _MatcapApplyToAlphaBlendType: 0 + - _MatcapApplyToAlphaBlending: 1 + - _MatcapApplyToAlphaEnabled: 0 + - _MatcapApplyToAlphaSourceBlend: 0 + - _MatcapBaseColorMix: 0 + - _MatcapBorder: 0.5 + - _MatcapColorThemeIndex: 0 + - _MatcapEmissionStrength: 0 + - _MatcapEnable: 0 + - _MatcapHueSelectOrShift: 1 + - _MatcapHueShift: 0 + - _MatcapHueShiftColorSpace: 0 + - _MatcapHueShiftEnabled: 0 + - _MatcapHueShiftSpeed: 0 + - _MatcapIntensity: 1 + - _MatcapLightColorMix: 0 + - _MatcapLightMask: 0 + - _MatcapMaskChannel: 0 + - _MatcapMaskGlobalMask: 0 + - _MatcapMaskGlobalMaskBlendType: 2 + - _MatcapMaskInvert: 0 + - _MatcapMaskSmoothnessApply: 0 + - _MatcapMaskSmoothnessChannel: 3 + - _MatcapMaskUV: 0 + - _MatcapMixed: 0 + - _MatcapMultiply: 0 + - _MatcapNormal: 1 + - _MatcapReplace: 1 + - _MatcapRotation: 0 + - _MatcapScreen: 0 + - _MatcapSmoothness: 1 + - _MatcapTPSDepthEnabled: 0 + - _MatcapTPSMaskStrength: 1 + - _MatcapUVMode: 1 + - _MatcapUVToBlend: 1 + - _Metallic: 0 + - _Mirror: 0 + - _MirrorColorThemeIndex: 0 + - _MirrorTextureBlendType: 0 + - _MirrorTextureEnabled: 0 + - _MirrorTextureForceEnabled: 0 + - _MirrorTextureUV: 0 + - _MochieBRDF: 1 + - _MochieForceFallback: 0 + - _MochieGSAAEnabled: 1 + - _MochieLitFallback: 1 + - _MochieMetallicGlobalMask: 0 + - _MochieMetallicGlobalMaskBlendType: 2 + - _MochieMetallicMapInvert: 0 + - _MochieMetallicMapsMetallicChannel: 0 + - _MochieMetallicMapsReflectionMaskChannel: 2 + - _MochieMetallicMapsRoughnessChannel: 1 + - _MochieMetallicMapsSpecularMaskChannel: 3 + - _MochieMetallicMapsStochastic: 0 + - _MochieMetallicMapsUV: 0 + - _MochieMetallicMasksUV: 0 + - _MochieMetallicMultiplier: 0 + - _MochieReflectionMaskInvert: 0 + - _MochieReflectionStrength: 1 + - _MochieReflectionStrengthGlobalMask: 0 + - _MochieReflectionStrengthGlobalMaskBlendType: 2 + - _MochieReflectionTintThemeIndex: 0 + - _MochieRoughnessMapInvert: 0 + - _MochieRoughnessMultiplier: 1 + - _MochieRoughnessMultiplier2: 1 + - _MochieSmoothnessGlobalMask: 0 + - _MochieSmoothnessGlobalMaskBlendType: 2 + - _MochieSpecularMaskInvert: 0 + - _MochieSpecularStrength: 1 + - _MochieSpecularStrength2: 1 + - _MochieSpecularStrengthGlobalMask: 0 + - _MochieSpecularStrengthGlobalMaskBlendType: 2 + - _MochieSpecularTintThemeIndex: 0 + - _Mode: 0 + - _ModelAngleMax: 90 + - _ModelAngleMin: 45 + - _MultilayerMathBlurMapUV: 0 + - _NormalCorrect: 0 + - _NormalCorrectAmount: 0.9 + - _OcclusionStrength: 1 + - _OffsetFactor: 0 + - _OffsetUnits: 0 + - _Offset_Z: 0 + - _OrifaceEnabled: 0 + - _OrificeChannel: 0 + - _OutlineALColorEnabled: 0 + - _OutlineAlphaDistanceFade: 0 + - _OutlineAlphaDistanceFadeMax: 0 + - _OutlineAlphaDistanceFadeMaxAlpha: 1 + - _OutlineAlphaDistanceFadeMin: 0 + - _OutlineAlphaDistanceFadeMinAlpha: 0 + - _OutlineAlphaDistanceFadeType: 1 + - _OutlineBlendOp: 0 + - _OutlineBlendOpAlpha: 4 + - _OutlineClipAtZeroWidth: 1 + - _OutlineCull: 1 + - _OutlineDstBlend: 0 + - _OutlineDstBlendAlpha: 0 + - _OutlineEmission: 0 + - _OutlineExpansionMode: 1 + - _OutlineFixWidth: 0.5 + - _OutlineFixedSize: 1 + - _OutlineGamma: 1 + - _OutlineHue: 0 + - _OutlineHueOffsetSpeed: 0 + - _OutlineHueShift: 0 + - _OutlineLit: 1 + - _OutlineMaskChannel: 0 + - _OutlineMaskUV: 0 + - _OutlineOverrideAlpha: 0 + - _OutlineRimLightBlend: 0 + - _OutlineSaturation: 1 + - _OutlineShadowStrength: 0 + - _OutlineSpace: 0 + - _OutlineSrcBlend: 1 + - _OutlineSrcBlendAlpha: 1 + - _OutlineStencilBackCompareFunction: 8 + - _OutlineStencilBackFailOp: 0 + - _OutlineStencilBackPassOp: 0 + - _OutlineStencilBackZFailOp: 0 + - _OutlineStencilCompareFunction: 8 + - _OutlineStencilFailOp: 0 + - _OutlineStencilFrontCompareFunction: 8 + - _OutlineStencilFrontFailOp: 0 + - _OutlineStencilFrontPassOp: 0 + - _OutlineStencilFrontZFailOp: 0 + - _OutlineStencilPassOp: 0 + - _OutlineStencilReadMask: 255 + - _OutlineStencilRef: 0 + - _OutlineStencilType: 0 + - _OutlineStencilWriteMask: 255 + - _OutlineStencilZFailOp: 0 + - _OutlineTextureUV: 0 + - _OutlineTintMix: 0 + - _OutlineUseVertexColorNormals: 0 + - _OutlineValue: 1 + - _OutlineVertexColorMask: 0 + - _OutlineVertexColorMaskStrength: 1 + - _OutlineZOffsetChannel: 0 + - _OutlineZOffsetInvertMaskChannel: 0 + - _OutlineZOffsetMaskStrength: 1 + - _OutlineZOffsetVertexColor: 0 + - _OutlineZOffsetVertexColorStrength: 1 + - _OutlineZTest: 4 + - _OutlineZWrite: 1 + - _OutlinesMaxDistance: 1 + - _PBRNormalSelect: 1 + - _PBRSplitMaskSample: 0 + - _PBRSplitMaskStochastic: 0 + - _PPBrightness: 1 + - _PPContrast: 1 + - _PPEmissionMultiplier: 1 + - _PPFinalColorMultiplier: 1 + - _PPHDR: 0 + - _PPHelp: 0 + - _PPHue: 0 + - _PPHueShiftColorSpace: 0 + - _PPLightingAddition: 0 + - _PPLightingMultiplier: 1 + - _PPLightness: 0 + - _PPMaskChannel: 0 + - _PPMaskInvert: 0 + - _PPMaskUV: 0 + - _PPPosterization: 0 + - _PPPosterizationAmount: 4 + - _PPSaturation: 1 + - _PanoUseBothEyes: 1 + - _Parallax: 0.02 + - _ParallaxAnisotropic: 1 + - _ParallaxAnisotropyScale: 1 + - _ParallaxBinarySteps: 8 + - _ParallaxConeRatio: 1 + - _ParallaxInternalBlendMode: 0 + - _ParallaxInternalHeightFromAlpha: 0 + - _ParallaxInternalHeightmapMode: 0 + - _ParallaxInternalHueSelectOrShift: 1 + - _ParallaxInternalHueShift: 0 + - _ParallaxInternalHueShiftColorSpace: 0 + - _ParallaxInternalHueShiftEnabled: 0 + - _ParallaxInternalHueShiftPerLevel: 0 + - _ParallaxInternalHueShiftSpeed: 0 + - _ParallaxInternalIterations: 4 + - _ParallaxInternalMapMaskChannel: 0 + - _ParallaxInternalMapMaskUV: 0 + - _ParallaxInternalMaxColorThemeIndex: 0 + - _ParallaxInternalMaxDepth: 0.1 + - _ParallaxInternalMaxFade: 0.1 + - _ParallaxInternalMinColorThemeIndex: 0 + - _ParallaxInternalMinDepth: 0 + - _ParallaxInternalMinFade: 1 + - _ParallaxInternalSurfaceBlendMode: 8 + - _ParallaxMipBias: 0 + - _ParallaxRelaxedCone: 1 + - _ParallaxUV: 0 + - _PathALAutoCorrelator: 0 + - _PathALAutoCorrelatorA: 0 + - _PathALAutoCorrelatorB: 0 + - _PathALAutoCorrelatorG: 0 + - _PathALAutoCorrelatorMode: 0 + - _PathALAutoCorrelatorR: 0 + - _PathALCCA: 0 + - _PathALCCB: 0 + - _PathALCCG: 0 + - _PathALCCR: 0 + - _PathALChrono: 0 + - _PathALColorChord: 0 + - _PathALEmissionOffset: 0 + - _PathALHistory: 0 + - _PathALHistoryA: 0 + - _PathALHistoryB: 0 + - _PathALHistoryBandA: 0 + - _PathALHistoryBandB: 0 + - _PathALHistoryBandG: 0 + - _PathALHistoryBandR: 0 + - _PathALHistoryG: 0 + - _PathALHistoryMode: 0 + - _PathALHistoryR: 0 + - _PathALTimeOffset: 0 + - _PathALWidthOffset: 0 + - _PathChronoBandA: 0 + - _PathChronoBandB: 0 + - _PathChronoBandG: 0 + - _PathChronoBandR: 0 + - _PathChronoSpeedA: 0 + - _PathChronoSpeedB: 0 + - _PathChronoSpeedG: 0 + - _PathChronoSpeedR: 0 + - _PathChronoTypeA: 0 + - _PathChronoTypeB: 0 + - _PathChronoTypeG: 0 + - _PathChronoTypeR: 0 + - _PathColorAThemeIndex: 0 + - _PathColorBThemeIndex: 0 + - _PathColorGThemeIndex: 0 + - _PathColorRThemeIndex: 0 + - _PathGradientType: 0 + - _PathPointSampling: 1 + - _PathSource: 0 + - _PathSourceDirA: 0 + - _PathSourceDirB: 0 + - _PathSourceDirG: 0 + - _PathSourceDirR: 0 + - _PathSurfaceBlendMode: 0 + - _PathTypeA: 2 + - _PathTypeB: 2 + - _PathTypeG: 2 + - _PathTypeR: 2 + - _PathingColorMapUV: 0 + - _PathingMapUV: 0 + - _PathingOverrideAlpha: 0 + - _PathingUVSelect: 0 + - _PenetratorEnabled: 0 + - _PoiGSAAThreshold: 0.1 + - _PoiGSAAVariance: 0.15 + - _PoiInternalParallax: 0 + - _PoiParallax: 0 + - _PoiUTSStyleOutlineBlend: 0 + - _PolarLengthScale: 1 + - _PolarRadialScale: 1 + - _PolarSpiralPower: 0 + - _PolarUV: 0 + - _PostProcess: 0 + - _RGBAAlphaBlendType: 0 + - _RGBAAlphaEmissionStrength: 0 + - _RGBAAlphaEnable: 0 + - _RGBAAlphaMetallicInvert: 0 + - _RGBAAlphaPBRSplitMaskSample: 0 + - _RGBAAlphaPBRSplitMaskStochastic: 0 + - _RGBAAlphaPBRUV: 0 + - _RGBAAlphaSmoothnessInvert: 0 + - _RGBABlueBlendType: 0 + - _RGBABlueEmissionStrength: 0 + - _RGBABlueEnable: 0 + - _RGBABlueMetallicInvert: 0 + - _RGBABluePBRSplitMaskSample: 0 + - _RGBABluePBRSplitMaskStochastic: 0 + - _RGBABluePBRUV: 0 + - _RGBABlueSmoothnessInvert: 0 + - _RGBAGreenBlendType: 0 + - _RGBAGreenEmissionStrength: 0 + - _RGBAGreenEnable: 0 + - _RGBAGreenMetallicInvert: 0 + - _RGBAGreenPBRSplitMaskSample: 0 + - _RGBAGreenPBRSplitMaskStochastic: 0 + - _RGBAGreenPBRUV: 0 + - _RGBAGreenSmoothnessInvert: 0 + - _RGBAMetallicMapsStochastic: 0 + - _RGBAMetallicMapsUV: 0 + - _RGBAPBRAlphaEnabled: 0 + - _RGBAPBRBlueEnabled: 0 + - _RGBAPBRGreenEnabled: 0 + - _RGBAPBRRedEnabled: 0 + - _RGBARedBlendType: 0 + - _RGBARedEmissionStrength: 0 + - _RGBARedEnable: 0 + - _RGBARedMetallicInvert: 0 + - _RGBARedPBRSplitMaskSample: 0 + - _RGBARedPBRSplitMaskStochastic: 0 + - _RGBARedPBRUV: 0 + - _RGBARedSmoothnessInvert: 0 + - _RGBASmoothnessMapsStochastic: 0 + - _RGBASmoothnessMapsUV: 0 + - _RGBMaskEnabled: 0 + - _RGBMaskType: 0 + - _RGBMaskUV: 0 + - _RalivAdvancedHelp: 0 + - _RalivDPSDisableShadowCaster: 1 + - _RalivDPSDisableShadowCasterHelp: 0 + - _RalivHelp: 0 + - _ReCurvature: 0 + - _RedAlphaAdd: 0 + - _RedColorThemeIndex: 0 + - _RedTextureStochastic: 0 + - _RedTextureUV: 0 + - _RefSpecFresnelStrength: 0.5 + - _Reflectance: 0.04 + - _ReflectionAnisotropicStretch: 1 + - _ReflectionApplyTransparency: 1 + - _ReflectionBlendMode: 1 + - _ReflectionCubeEnableLighting: 1 + - _ReflectionCubeOverride: 0 + - _ReflectionNormalStrength: 1 + - _RenderingAOBlockerEnabled: 0 + - _RenderingAOBlockerFlipNormal: 0 + - _RenderingAOBlockerNote: 0 + - _RenderingAOBlockerUVChannel: 0 + - _RenderingEarlyZEnabled: 0 + - _RenderingReduceClipDistance: 0 + - _RgbAlphaGlobalMaskBlendType: 2 + - _RgbAlphaGlobalMaskChannel: 0 + - _RgbAlphaMaskChannel: 3 + - _RgbBlueGlobalMaskBlendType: 2 + - _RgbBlueGlobalMaskChannel: 0 + - _RgbBlueMaskChannel: 2 + - _RgbGreenGlobalMaskBlendType: 2 + - _RgbGreenGlobalMaskChannel: 0 + - _RgbGreenMaskChannel: 1 + - _RgbNormalAGlobalMaskBlendType: 2 + - _RgbNormalAGlobalMaskChannel: 0 + - _RgbNormalAMaskChannel: 3 + - _RgbNormalAScale: 0 + - _RgbNormalAStochastic: 0 + - _RgbNormalAUV: 0 + - _RgbNormalAlphaBlendMode: 0 + - _RgbNormalBGlobalMaskBlendType: 2 + - _RgbNormalBGlobalMaskChannel: 0 + - _RgbNormalBMaskChannel: 2 + - _RgbNormalBScale: 0 + - _RgbNormalBStochastic: 0 + - _RgbNormalBUV: 0 + - _RgbNormalBlueBlendMode: 0 + - _RgbNormalGGlobalMaskBlendType: 2 + - _RgbNormalGGlobalMaskChannel: 0 + - _RgbNormalGMaskChannel: 1 + - _RgbNormalGScale: 0 + - _RgbNormalGStochastic: 0 + - _RgbNormalGUV: 0 + - _RgbNormalGreenBlendMode: 0 + - _RgbNormalRGlobalMaskBlendType: 2 + - _RgbNormalRGlobalMaskChannel: 0 + - _RgbNormalRMaskChannel: 0 + - _RgbNormalRScale: 0 + - _RgbNormalRStochastic: 0 + - _RgbNormalRUV: 0 + - _RgbNormalRedBlendMode: 0 + - _RgbRedGlobalMaskBlendType: 2 + - _RgbRedGlobalMaskChannel: 0 + - _RgbRedMaskChannel: 0 + - _Rim2ApColorThemeIndex: 0 + - _Rim2ApplyAlpha: 0 + - _Rim2ApplyAlphaBlend: 1 + - _Rim2ApplyGlobalMaskBlendType: 2 + - _Rim2ApplyGlobalMaskIndex: 0 + - _Rim2BackfaceMask: 1 + - _Rim2BaseColorMix: 0 + - _Rim2BiasIntensity: 0 + - _Rim2BlendMode: 1 + - _Rim2BlendStrength: 1 + - _Rim2Blur: 0.65 + - _Rim2Border: 0.5 + - _Rim2Brightness: 1 + - _Rim2ColorTexUV: 0 + - _Rim2DirRange: 0 + - _Rim2DirStrength: 0 + - _Rim2EnableLighting: 1 + - _Rim2FresnelPower: 3.5 + - _Rim2GlobalMask: 0 + - _Rim2GlobalMaskBlendType: 2 + - _Rim2HueSelectOrShift: 1 + - _Rim2HueShift: 0 + - _Rim2HueShiftColorSpace: 0 + - _Rim2HueShiftEnabled: 0 + - _Rim2HueShiftSpeed: 0 + - _Rim2IndirBlur: 0.1 + - _Rim2IndirBorder: 0.5 + - _Rim2IndirRange: 0 + - _Rim2LightColorThemeIndex: 0 + - _Rim2Light_FeatherOff: 0 + - _Rim2Light_InsideMask: 0.0001 + - _Rim2Light_Power: 0.1 + - _Rim2LightingInvert: 0 + - _Rim2MainStrength: 0 + - _Rim2MaskChannel: 0 + - _Rim2MaskInvert: 0 + - _Rim2MaskOnlyMask: 0 + - _Rim2MaskUV: 0 + - _Rim2NormalStrength: 1 + - _Rim2Power: 1 + - _Rim2ShadowMask: 0.5 + - _Rim2ShadowMaskInvert: 0 + - _Rim2ShadowMaskRampType: 0 + - _Rim2ShadowMaskStrength: 1 + - _Rim2ShadowToggle: 0 + - _Rim2ShadowWidth: 0 + - _Rim2Sharpness: 0.25 + - _Rim2Strength: 0 + - _Rim2Style: 0 + - _Rim2TexUV: 0 + - _Rim2VRParallaxStrength: 1 + - _Rim2Width: 0.8 + - _RimApColorThemeIndex: 0 + - _RimApplyAlpha: 0 + - _RimApplyAlphaBlend: 1 + - _RimApplyGlobalMaskBlendType: 2 + - _RimApplyGlobalMaskIndex: 0 + - _RimBackfaceMask: 1 + - _RimBaseColorMix: 0 + - _RimBiasIntensity: 0 + - _RimBlendMode: 1 + - _RimBlendStrength: 1 + - _RimBlur: 0.65 + - _RimBorder: 0.5 + - _RimBrightness: 1 + - _RimColorTexUV: 0 + - _RimDirRange: 0 + - _RimDirStrength: 0 + - _RimEnableLighting: 1 + - _RimEnviroBlur: 0.7 + - _RimEnviroChannel: 0 + - _RimEnviroIntensity: 1 + - _RimEnviroMaskUV: 0 + - _RimEnviroMinBrightness: 0 + - _RimEnviroSharpness: 0 + - _RimEnviroWidth: 0.45 + - _RimFresnelPower: 3.5 + - _RimGlobalMask: 0 + - _RimGlobalMaskBlendType: 2 + - _RimHueSelectOrShift: 1 + - _RimHueShift: 0 + - _RimHueShiftColorSpace: 0 + - _RimHueShiftEnabled: 0 + - _RimHueShiftSpeed: 0 + - _RimIndirBlur: 0.1 + - _RimIndirBorder: 0.5 + - _RimIndirRange: 0 + - _RimLightColorThemeIndex: 0 + - _RimLight_FeatherOff: 0 + - _RimLight_InsideMask: 0.0001 + - _RimLight_Power: 0.1 + - _RimLightingInvert: 0 + - _RimMainStrength: 0 + - _RimMaskChannel: 0 + - _RimMaskInvert: 0 + - _RimMaskOnlyMask: 0 + - _RimMaskUV: 0 + - _RimNormalStrength: 1 + - _RimPoi2BlendMode: 0 + - _RimPoiBlendMode: 0 + - _RimPower: 1 + - _RimShadowMask: 0.5 + - _RimShadowMaskInvert: 0 + - _RimShadowMaskRampType: 0 + - _RimShadowMaskStrength: 1 + - _RimShadowToggle: 0 + - _RimShadowWidth: 0 + - _RimSharpness: 0.25 + - _RimStrength: 0 + - _RimStyle: 0 + - _RimTexUV: 0 + - _RimVRParallaxStrength: 1 + - _RimWidth: 0.8 + - _RoughnessAnisotropy: 1 + - _SDFBlur: 0.1 + - _SDFShadingTextureUV: 0 + - _SFExposureOcclusion: 0 + - _SSAOAlphaFade: 1 + - _SSAOAnimationToggle: 1 + - _SSAOApplyGlobalMaskBlendType: 0 + - _SSAOApplyGlobalMaskIndex: 0 + - _SSAOAsRamp: 0 + - _SSAOBias: 0.003 + - _SSAOBlendType: 2 + - _SSAOCenterImportance: 1 + - _SSAOColorMapUV: 0 + - _SSAOColorThemeIndex: 0 + - _SSAOCone: 0 + - _SSAODepthGetWarning: 0 + - _SSAOEnableColorTexture: 0 + - _SSAOEnableMaskTexture: 0 + - _SSAOEnabled: 0 + - _SSAOFalloffEnd: 8 + - _SSAOFalloffStart: 6 + - _SSAOGlobalMaskBlendType: 2 + - _SSAOGlobalMaskIndex: 0 + - _SSAOHideByRampedLightMap: 0 + - _SSAOIntensity: 1 + - _SSAOMaskChannel: 0 + - _SSAOMaskInvert: 0 + - _SSAOMaskUV: 0 + - _SSAOQuality: 2.4 + - _SSAORadius: 0.002 + - _SSAORandomScale: 0 + - _SSAOUseNormals: 0 + - _SSAOUseSurfaceColor: 0 + - _SSIgnoreCastedShadows: 0 + - _SSSBaseColorMix: 0 + - _SSSDistortion: 1 + - _SSSSpread: 5 + - _SSSStrength: 0.25 + - _SSSThicknessMapChannel: 0 + - _SSSThicknessMapUV: 0 + - _SSSThicknessMod: -1 + - _Saturation: 0 + - _ScrollingEmission: 0 + - _ScrollingEmission1: 0 + - _ScrollingEmission2: 0 + - _ScrollingEmission3: 0 + - _Set_HighColorMaskChannel: 1 + - _Set_HighColorMaskUV: 0 + - _Set_Rim2LightMaskChannel: 1 + - _Set_Rim2LightMaskUV: 0 + - _Set_RimLightMaskChannel: 1 + - _Set_RimLightMaskUV: 0 + - _ShadeColor_Step: 0 + - _ShaderOptimizerEnabled: 1 + - _ShaderUIWarning0: -0 + - _ShaderUIWarning1: -0 + - _ShadingEnabled: 1 + - _ShadingRampedLightMapApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapApplyGlobalMaskIndex: 0 + - _ShadingRampedLightMapInverseApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapInverseApplyGlobalMaskIndex: 0 + - _ShadingShadeMapBlendType: 0 + - _Shadow2ndBlur: 0.3 + - _Shadow2ndBorder: 0.5 + - _Shadow2ndColorTexUV: 0 + - _Shadow2ndReceive: 0 + - _Shadow3rdBlur: 0.1 + - _Shadow3rdBorder: 0.25 + - _Shadow3rdColorTexUV: 0 + - _Shadow3rdReceive: 0 + - _ShadowBlur: 0.1 + - _ShadowBorder: 0.5 + - _ShadowBorderMapToggle: 0 + - _ShadowBorderMaskLOD: 0 + - _ShadowBorderMaskUV: 0 + - _ShadowBorderRange: 0 + - _ShadowColorTexUV: 0 + - _ShadowEnvStrength: 0 + - _ShadowFlatBlur: 1 + - _ShadowFlatBorder: 1 + - _ShadowMainStrength: 0 + - _ShadowMaskType: 0 + - _ShadowOffset: 0 + - _ShadowPostAO: 0 + - _ShadowReceive: 0 + - _ShadowStrength: 1 + - _ShadowStrengthMaskUV: 0 + - _Shape1Depth: 0.1 + - _Shape1Duration: 0.1 + - _Shape2Depth: 0.2 + - _Shape2Duration: 0.1 + - _Shape3Depth: 0.3 + - _Shape3Duration: 0.1 + - _SkinThicknessMapInvert: 0 + - _SkinThicknessMapUV: 0 + - _SkinThicknessPower: 1 + - _Smoothness: 1 + - _SmoothnessTextureChannel: 0 + - _Specular2ndLayer: 0 + - _SpecularBlur: 0 + - _SpecularBorder: 0.5 + - _SpecularHighlights: 1 + - _SpecularNormalStrength: 1 + - _SpecularToon: 1 + - _SphericalDissolveClamp: 0 + - _SphericalDissolveInvert: 0 + - _SphericalDissolveRadius: 1.5 + - _Squeeze: 0 + - _SqueezeDist: 0 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _SssBumpBlur: 0.7 + - _SssScale: 1 + - _StencilBackCompareFunction: 8 + - _StencilBackFailOp: 0 + - _StencilBackPassOp: 0 + - _StencilBackZFailOp: 0 + - _StencilCompareFunction: 8 + - _StencilFailOp: 0 + - _StencilFrontCompareFunction: 8 + - _StencilFrontFailOp: 0 + - _StencilFrontPassOp: 0 + - _StencilFrontZFailOp: 0 + - _StencilPassOp: 0 + - _StencilReadMask: 255 + - _StencilRef: 0 + - _StencilType: 0 + - _StencilWriteMask: 255 + - _StencilZFailOp: 0 + - _StereoEnabled: 0 + - _StochasticDeliotHeitzDensity: 1 + - _StochasticHexFallOffContrast: 0.6 + - _StochasticHexFallOffPower: 7 + - _StochasticHexGridDensity: 1 + - _StochasticHexRotationStrength: 0 + - _StochasticMode: 0 + - _StylizedReflectionMode: 0 + - _StylizedSpecular: 0 + - _StylizedSpecular2Feather: 0 + - _StylizedSpecularFeather: 0 + - _StylizedSpecularIgnoreNormal: 0 + - _StylizedSpecularIgnoreShadow: 0 + - _StylizedSpecularInvertMask: 0 + - _StylizedSpecularNormalStrength: 1 + - _StylizedSpecularStrength: 1 + - _SubsurfaceScattering: 0 + - _TPSHelpbox: 0 + - _TPSPenetratorEnabled: 0 + - _TPS_AnimatedToggle: 1 + - _TPS_BezierSmoothness: 0.4 + - _TPS_BezierStart: 0 + - _TPS_BufferedDepth: 0 + - _TPS_BufferedStrength: 0 + - _TPS_Buldge: 0.3 + - _TPS_BuldgeDistance: 0.2 + - _TPS_BuldgeFalloffDistance: 0.05 + - _TPS_Channel: 0 + - _TPS_ChannelWarning: 0 + - _TPS_IdleGravity: 0 + - _TPS_IdleSkrinkLength: 1 + - _TPS_IdleSkrinkWidth: 1 + - _TPS_IsSkinnedMeshRenderer: 0 + - _TPS_PenetratorLength: 1 + - _TPS_PumpingSpeed: 1 + - _TPS_PumpingStrength: 0 + - _TPS_PumpingWidth: 0.2 + - _TPS_SmoothStart: 1 + - _TPS_Squeeze: 0.3 + - _TPS_SqueezeDistance: 0.2 + - _TextEnabled: 0 + - _TextFPSColorThemeIndex: 0 + - _TextFPSEmissionStrength: 0 + - _TextFPSEnabled: 0 + - _TextFPSRotation: 0 + - _TextFPSUV: 0 + - _TextNumericColorThemeIndex: 0 + - _TextNumericDecimalDigits: 0 + - _TextNumericEmissionStrength: 0 + - _TextNumericEnabled: 0 + - _TextNumericRotation: 0 + - _TextNumericTrimZeroes: 0 + - _TextNumericUV: 0 + - _TextNumericValue: 0 + - _TextNumericWholeDigits: 4 + - _TextPixelRange: 4 + - _TextPositionColorThemeIndex: 0 + - _TextPositionEmissionStrength: 0 + - _TextPositionEnabled: 0 + - _TextPositionRotation: 0 + - _TextPositionUV: 0 + - _TextTimeColorThemeIndex: 0 + - _TextTimeEmissionStrength: 0 + - _TextTimeEnabled: 0 + - _TextTimeRotation: 0 + - _TextTimeUV: 0 + - _ToonRampCount: 1 + - _ToonRampUVSelector: 1 + - _TruchetALAlphaBand: 0 + - _TruchetALAlphaToggle: 0 + - _TruchetALEmissionBand: 0 + - _TruchetALEmissionToggle: 0 + - _TruchetAlpha: 1 + - _TruchetBlendType: 0 + - _TruchetChronoPanBand: 0 + - _TruchetChronoPanToggle: 0 + - _TruchetChronoPanType: 0 + - _TruchetColorThemeIndex: 0 + - _TruchetDensity: 10 + - _TruchetEdgeSharpness: 1 + - _TruchetEmissionStrength: 0 + - _TruchetHideWhenNoAL: 0 + - _TruchetMaskChannel: 0 + - _TruchetMaskGlobalMask: 0 + - _TruchetMaskGlobalMaskBlendType: 2 + - _TruchetMaskIntensity: 1 + - _TruchetMaskInvert: 0 + - _TruchetMaskUV: 0 + - _TruchetOverrideAlpha: 0 + - _TruchetThiccness: 0.1 + - _TruchetUV: 0 + - _Tweak_HighColorMaskLevel: 0 + - _Tweak_LightDirection_MaskLevel: 0 + - _Tweak_LightDirection_MaskLevel2: 0 + - _Tweak_Rim2LightMaskLevel: 0 + - _Tweak_RimLightMaskLevel: 0 + - _UDIMDiscardHelpbox: 0 + - _UDIMDiscardMode: 0 + - _UDIMDiscardRow0_0: 0 + - _UDIMDiscardRow0_1: 0 + - _UDIMDiscardRow0_2: 0 + - _UDIMDiscardRow0_3: 0 + - _UDIMDiscardRow1_0: 0 + - _UDIMDiscardRow1_1: 0 + - _UDIMDiscardRow1_2: 0 + - _UDIMDiscardRow1_3: 0 + - _UDIMDiscardRow2_0: 0 + - _UDIMDiscardRow2_1: 0 + - _UDIMDiscardRow2_2: 0 + - _UDIMDiscardRow2_3: 0 + - _UDIMDiscardRow3_0: 0 + - _UDIMDiscardRow3_1: 0 + - _UDIMDiscardRow3_2: 0 + - _UDIMDiscardRow3_3: 0 + - _UDIMDiscardUV: 0 + - _UDIMFaceDiscardFace: 0 + - _UDIMFaceDiscardRow0_0: 0 + - _UDIMFaceDiscardRow0_1: 0 + - _UDIMFaceDiscardRow0_2: 0 + - _UDIMFaceDiscardRow0_3: 0 + - _UDIMFaceDiscardRow1_0: 0 + - _UDIMFaceDiscardRow1_1: 0 + - _UDIMFaceDiscardRow1_2: 0 + - _UDIMFaceDiscardRow1_3: 0 + - _UDIMFaceDiscardRow2_0: 0 + - _UDIMFaceDiscardRow2_1: 0 + - _UDIMFaceDiscardRow2_2: 0 + - _UDIMFaceDiscardRow2_3: 0 + - _UDIMFaceDiscardRow3_0: 0 + - _UDIMFaceDiscardRow3_1: 0 + - _UDIMFaceDiscardRow3_2: 0 + - _UDIMFaceDiscardRow3_3: 0 + - _UDIMFaceDiscardUV: 0 + - _UVModLocalPos0: 0 + - _UVModLocalPos1: 1 + - _UVModWorldPos0: 0 + - _UVModWorldPos1: 2 + - _UVSec: 0 + - _UVTileDissolveAlpha_Row0_0: 0 + - _UVTileDissolveAlpha_Row0_1: 0 + - _UVTileDissolveAlpha_Row0_2: 0 + - _UVTileDissolveAlpha_Row0_3: 0 + - _UVTileDissolveAlpha_Row1_0: 0 + - _UVTileDissolveAlpha_Row1_1: 0 + - _UVTileDissolveAlpha_Row1_2: 0 + - _UVTileDissolveAlpha_Row1_3: 0 + - _UVTileDissolveAlpha_Row2_0: 0 + - _UVTileDissolveAlpha_Row2_1: 0 + - _UVTileDissolveAlpha_Row2_2: 0 + - _UVTileDissolveAlpha_Row2_3: 0 + - _UVTileDissolveAlpha_Row3_0: 0 + - _UVTileDissolveAlpha_Row3_1: 0 + - _UVTileDissolveAlpha_Row3_2: 0 + - _UVTileDissolveAlpha_Row3_3: 0 + - _UVTileDissolveDiscardAtMax: 1 + - _UVTileDissolveEnabled: 0 + - _UVTileDissolveUV: 0 + - _Unlit_Intensity: 1 + - _UseLightColor: 1 + - _UseReflection: 0 + - _Use_1stAs2nd: 0 + - _Use_1stShadeMapAlpha_As_ShadowMask: 0 + - _Use_2ndShadeMapAlpha_As_ShadowMask: 0 + - _Use_BaseAs1st: 0 + - _UzumoreAmount: 0.1 + - _UzumoreBias: 0.001 + - _UzumoreCategoryToggle: 0 + - _UzumoreEnabled: 1 + - _UzumoreMaskUV: 3 + - _VertexAudioLinkEnabled: 0 + - _VertexBarrelAlpha: 0 + - _VertexBarrelHeight: 0 + - _VertexBarrelMaskChannel: 0 + - _VertexBarrelMode: 0 + - _VertexBarrelWidth: 0.2 + - _VertexBasicsMaskChannel: 0 + - _VertexGlitchDensity: 10 + - _VertexGlitchFrequency: 1 + - _VertexGlitchMapPanSpeed: 10 + - _VertexGlitchMirror: 0 + - _VertexGlitchMirrorEnable: 0 + - _VertexGlitchStrength: 1 + - _VertexGlitchThreshold: 1 + - _VertexGlitchingAudioLinkBand: 0 + - _VertexGlitchingAudioLinkEnabled: 0 + - _VertexGlitchingAudiolinkOverride: 1 + - _VertexGlitchingEnabled: 0 + - _VertexGlitchingUseTexture: 0 + - _VertexLocalRotationALBandX: 0 + - _VertexLocalRotationALBandY: 0 + - _VertexLocalRotationALBandZ: 0 + - _VertexLocalRotationCTALBandX: 0 + - _VertexLocalRotationCTALBandY: 0 + - _VertexLocalRotationCTALBandZ: 0 + - _VertexLocalRotationCTALTypeX: 0 + - _VertexLocalRotationCTALTypeY: 0 + - _VertexLocalRotationCTALTypeZ: 0 + - _VertexLocalScaleALBand: 0 + - _VertexLocalTranslationALBand: 0 + - _VertexLookAtAudioLinkBand: 0 + - _VertexLookAtAudioLinkEnabled: 0 + - _VertexLookAtEnabled: 0 + - _VertexManipulationHeight: 0 + - _VertexManipulationHeightBand: 0 + - _VertexManipulationHeightBias: 0 + - _VertexManipulationHeightMapChannel: 0 + - _VertexManipulationHeightMaskChannel: 0 + - _VertexManipulationHeightMaskUV: 0 + - _VertexManipulationsEnabled: 0 + - _VertexRoundingDivision: 0.02 + - _VertexRoundingEnabled: 0 + - _VertexRoundingMaskChannel: 0 + - _VertexRoundingRangeBand: 0 + - _VertexRoundingSpace: 0 + - _VertexSpectrumMotion: 0 + - _VertexSpectrumUV: 0 + - _VertexSpectrumUVDirection: 0 + - _VertexSphereAlpha: 0 + - _VertexSphereHeight: 1 + - _VertexSphereMaskChannel: 0 + - _VertexSphereMode: 0 + - _VertexSphereRadius: 1 + - _VertexTornadoBaseHeight: 0 + - _VertexTornadoFunnelShape: 1 + - _VertexTornadoIntensity: 100 + - _VertexTornadoMaskChannel: 0 + - _VertexTornadoMode: 0 + - _VertexTornadoRadius: 1 + - _VertexTornadoSpeed: 5 + - _VertexTornadoTopHeight: 1 + - _VertexTornadoVerticalPull: 0 + - _VertexWindDetailAmplitude: 0.05 + - _VertexWindDetailFrequency: 5 + - _VertexWindDetailSpeed: 2.5 + - _VertexWindEnabled: 0 + - _VertexWindMaskChannel: 0 + - _VertexWindNoiseChannel: 0 + - _VertexWindNoiseScale: 10 + - _VertexWindNoiseSpeed: 0.5 + - _VertexWindNoiseStrength: 0.5 + - _VertexWindPrimaryAmplitude: 0.1 + - _VertexWindPrimaryFrequency: 1 + - _VertexWindPrimarySpeed: 1 + - _VertexWorldTranslationALBand: 0 + - _VideoBacklight: 1 + - _VideoCRTPixelEnergizedTime: 1.9 + - _VideoCRTRefreshRate: 24 + - _VideoContrast: 0 + - _VideoEffectsEnable: 0 + - _VideoEmissionEnabled: 1 + - _VideoMaskTextureChannel: 0 + - _VideoMaskTextureUV: 0 + - _VideoPixelTextureUV: 0 + - _VideoPixelateToResolution: 0 + - _VideoSaturation: 0 + - _VideoType: 3 + - _VisibilityMode: 1 + - _VisibilityVRCCameraDesktop: 1 + - _VisibilityVRCCameraScreenshot: 1 + - _VisibilityVRCCameraVR: 1 + - _VisibilityVRCMirrorDesktop: 1 + - _VisibilityVRCMirrorVR: 1 + - _VisibilityVRCRegular: 1 + - _VoronoiAffectsMaterialAlpha: 0 + - _VoronoiBlend: 0 + - _VoronoiEnableRandomCellColor: 0 + - _VoronoiEnabled: 0 + - _VoronoiGlobalMask: 0 + - _VoronoiGlobalMaskBlendType: 2 + - _VoronoiInnerEmissionStrength: 0 + - _VoronoiMaskChannel: 0 + - _VoronoiMaskUV: 0 + - _VoronoiNoiseChannel: 0 + - _VoronoiNoiseIntensity: 0.1 + - _VoronoiNoiseUV: 0 + - _VoronoiOuterEmissionStrength: 0 + - _VoronoiPower: 0.45454544 + - _VoronoiScale: 5 + - _VoronoiSpace: 0 + - _VoronoiType: 1 + - _Wriggle: 0 + - _WriggleSpeed: 0.28 + - _ZClip: 1 + - _ZTest: 4 + - _ZWrite: 1 + - _ppHueSelectOrShift: 1 + - footer_bluesky: 0 + - footer_discord: 0 + - footer_github: 0 + - footer_patreon: 0 + - footer_twitter: 0 + - footer_website: 0 + - footer_youtube: 0 + - g_end_tps_bezier: 0 + - g_end_tps_buldge: 0 + - g_end_tps_idle: 0 + - g_end_tps_pulsing: 0 + - g_end_tps_squeeze: 0 + - g_start_tps_bezier: 0 + - g_start_tps_buldge: 0 + - g_start_tps_idle: 0 + - g_start_tps_pulsing: 0 + - g_start_tps_squeeze: 0 + - m_AudioLinkCategory: 0 + - m_OutlineCategory: 0 + - m_end_ALDecalSpectrum: 0 + - m_end_ALVolumeColor: 0 + - m_end_Alpha: 0 + - m_end_Ansio: 0 + - m_end_BeatsaberBloomFog: 0 + - m_end_BeatsaberOptions: 0 + - m_end_BlackLightMasking: 0 + - m_end_BonusSliders: 0 + - m_end_CRT: 0 + - m_end_CenterOutDissolve: 0 + - m_end_ColorAdjust: 0 + - m_end_CubeMap: 0 + - m_end_Decal0: 0 + - m_end_Decal0AudioLink: 0 + - m_end_Decal1: 0 + - m_end_Decal1AudioLink: 0 + - m_end_Decal2: 0 + - m_end_Decal2AudioLink: 0 + - m_end_Decal3: 0 + - m_end_Decal3AudioLink: 0 + - m_end_DecalSection: 0 + - m_end_DepthBulge: 0 + - m_end_DetailOptions: 0 + - m_end_DistortionAudioLink: 0 + - m_end_FXProximityColor: 0 + - m_end_FlipbookAudioLink: 0 + - m_end_Gameboy: 0 + - m_end_GlobalMask: 0 + - m_end_GlobalMaskDistanceM_0: 0 + - m_end_GlobalMaskDistanceM_1: 0 + - m_end_GlobalMaskDistanceM_10: 0 + - m_end_GlobalMaskDistanceM_11: 0 + - m_end_GlobalMaskDistanceM_12: 0 + - m_end_GlobalMaskDistanceM_13: 0 + - m_end_GlobalMaskDistanceM_14: 0 + - m_end_GlobalMaskDistanceM_15: 0 + - m_end_GlobalMaskDistanceM_2: 0 + - m_end_GlobalMaskDistanceM_3: 0 + - m_end_GlobalMaskDistanceM_4: 0 + - m_end_GlobalMaskDistanceM_5: 0 + - m_end_GlobalMaskDistanceM_6: 0 + - m_end_GlobalMaskDistanceM_7: 0 + - m_end_GlobalMaskDistanceM_8: 0 + - m_end_GlobalMaskDistanceM_9: 0 + - m_end_GlobalMaskModifiers: 0 + - m_end_GlobalMaskModifiersBackface: 0 + - m_end_GlobalMaskModifiersCamera: 0 + - m_end_GlobalMaskModifiersDistance: 0 + - m_end_GlobalMaskModifiersMirror: 0 + - m_end_GlobalMaskOptions: 0 + - m_end_GlobalMaskTextures: 0 + - m_end_GlobalMaskVertexColors: 0 + - m_end_GlobalThemeColor0: 0 + - m_end_GlobalThemeColor1: 0 + - m_end_GlobalThemeColor2: 0 + - m_end_GlobalThemeColor3: 0 + - m_end_GlobalThemes: 0 + - m_end_LTCGI: 0 + - m_end_MainVertexColors: 0 + - m_end_Matcap2: 0 + - m_end_Matcap3: 0 + - m_end_Matcap4: 0 + - m_end_OutlineAudioLink: 0 + - m_end_OutlineStencil: 0 + - m_end_OutlineStencilPassBackOptions: 0 + - m_end_OutlineStencilPassFrontOptions: 0 + - m_end_PPAnimations: 0 + - m_end_PathAudioLink: 0 + - m_end_PoiGlobalCategory: 0 + - m_end_PoiLightData: 0 + - m_end_PoiPostProcessingCategory: 0 + - m_end_PoiShading: 0 + - m_end_PoiUVCategory: 0 + - m_end_RGBMask: 0 + - m_end_Rim2AudioLink: 0 + - m_end_RimAudioLink: 0 + - m_end_SphericalDissolve: 0 + - m_end_StencilPassBackOptions: 0 + - m_end_StencilPassFrontOptions: 0 + - m_end_StencilPassOptions: 0 + - m_end_Stochastic: 0 + - m_end_Text: 0 + - m_end_TextFPS: 0 + - m_end_TextInstanceTime: 0 + - m_end_TextNumeric: 0 + - m_end_TextPosition: 0 + - m_end_TruchetAudioLink: 0 + - m_end_UVTileDissolve: 0 + - m_end_Uzumore: 0 + - m_end_VideoSettings: 0 + - m_end_VoronoiAudioLink: 0 + - m_end_WorldAOBlocker: 0 + - m_end_alphaBlending: 0 + - m_end_audioLink: 0 + - m_end_audioLinkOverrides: 0 + - m_end_backFace: 0 + - m_end_backlight: 0 + - m_end_bakedLighting: 0 + - m_end_blending: 0 + - m_end_brdf: 0 + - m_end_clearCoat: 0 + - m_end_clearcoatadvanced: 0 + - m_end_clearcoatglobalmask: 0 + - m_end_depthFX: 0 + - m_end_depthRimLightOptions: 0 + - m_end_dissolve: 0 + - m_end_dissolveHueShift: 0 + - m_end_emission1Options: 0 + - m_end_emission2Options: 0 + - m_end_emission3Options: 0 + - m_end_emissionOptions: 0 + - m_end_flipBook: 0 + - m_end_glitter: 0 + - m_end_internalparallax: 0 + - m_end_matcap: 0 + - m_end_mirrorOptions: 0 + - m_end_normalCorrect: 0 + - m_end_outlineAlphaBlending: 0 + - m_end_outlineBlending: 0 + - m_end_parallax: 0 + - m_end_pathing: 0 + - m_end_pen_autoConfig: 0 + - m_end_poiSSAO: 0 + - m_end_pointToPoint: 0 + - m_end_postprocess: 0 + - m_end_raliv: 0 + - m_end_ralivAdvanced: 0 + - m_end_ralivOriface: 0 + - m_end_ralivPenetrator: 0 + - m_end_reflectionRim: 0 + - m_end_rim1LightOptions: 0 + - m_end_rim2LightOptions: 0 + - m_end_stylizedSpec: 0 + - m_end_subsurfaceScattering: 0 + - m_end_tps_penetrator: 0 + - m_end_truchet: 0 + - m_end_udimdiscardOptions: 0 + - m_end_udimfacediscardOptions: 0 + - m_end_uvDistortion: 0 + - m_end_uvLocalWorld: 0 + - m_end_uvPanosphere: 0 + - m_end_uvPolar: 0 + - m_end_vertexGlitching: 0 + - m_end_vertexLookAt: 0 + - m_end_vertexManipulation: 0 + - m_end_videoEffects: 0 + - m_end_voronoi: 0 + - m_end_voronoiRandom: 0 + - m_lightingCategory: 1 + - m_mainCategory: 1 + - m_modifierCategory: 0 + - m_renderingCategory: 0 + - m_specialFXCategory: 0 + - m_start_ALDecalSpectrum: 0 + - m_start_ALVolumeColor: 0 + - m_start_Alpha: 0 + - m_start_Aniso: 0 + - m_start_BeatsaberBloomFog: 0 + - m_start_BeatsaberOptions: 0 + - m_start_BlackLightMasking: 0 + - m_start_BonusSliders: 0 + - m_start_CRT: 0 + - m_start_CenterOutDissolve: 0 + - m_start_ColorAdjust: 0 + - m_start_CubeMap: 0 + - m_start_Decal0: 0 + - m_start_Decal0AudioLink: 0 + - m_start_Decal1: 0 + - m_start_Decal1AudioLink: 0 + - m_start_Decal2: 0 + - m_start_Decal2AudioLink: 0 + - m_start_Decal3: 0 + - m_start_Decal3AudioLink: 0 + - m_start_DecalSection: 0 + - m_start_DepthBulge: 0 + - m_start_DetailOptions: 0 + - m_start_DistortionAudioLink: 0 + - m_start_FXProximityColor: 0 + - m_start_FlipbookAudioLink: 0 + - m_start_Gameboy: 0 + - m_start_GlobalMask: 0 + - m_start_GlobalMaskDistanceM_0: 0 + - m_start_GlobalMaskDistanceM_1: 0 + - m_start_GlobalMaskDistanceM_10: 0 + - m_start_GlobalMaskDistanceM_11: 0 + - m_start_GlobalMaskDistanceM_12: 0 + - m_start_GlobalMaskDistanceM_13: 0 + - m_start_GlobalMaskDistanceM_14: 0 + - m_start_GlobalMaskDistanceM_15: 0 + - m_start_GlobalMaskDistanceM_2: 0 + - m_start_GlobalMaskDistanceM_3: 0 + - m_start_GlobalMaskDistanceM_4: 0 + - m_start_GlobalMaskDistanceM_5: 0 + - m_start_GlobalMaskDistanceM_6: 0 + - m_start_GlobalMaskDistanceM_7: 0 + - m_start_GlobalMaskDistanceM_8: 0 + - m_start_GlobalMaskDistanceM_9: 0 + - m_start_GlobalMaskModifiers: 0 + - m_start_GlobalMaskModifiersBackface: 0 + - m_start_GlobalMaskModifiersCamera: 0 + - m_start_GlobalMaskModifiersDistance: 0 + - m_start_GlobalMaskModifiersMirror: 0 + - m_start_GlobalMaskOptions: 0 + - m_start_GlobalMaskTextures: 0 + - m_start_GlobalMaskVertexColors: 0 + - m_start_GlobalThemeColor0: 0 + - m_start_GlobalThemeColor1: 0 + - m_start_GlobalThemeColor2: 0 + - m_start_GlobalThemeColor3: 0 + - m_start_GlobalThemes: 0 + - m_start_LTCGI: 0 + - m_start_MainVertexColors: 0 + - m_start_Matcap2: 0 + - m_start_Matcap3: 0 + - m_start_Matcap4: 0 + - m_start_OutlineAudioLink: 0 + - m_start_OutlineStencil: 0 + - m_start_OutlineStencilPassBackOptions: 0 + - m_start_OutlineStencilPassFrontOptions: 0 + - m_start_PPAnimations: 0 + - m_start_PathAudioLink: 0 + - m_start_PoiGlobalCategory: 0 + - m_start_PoiLightData: 0 + - m_start_PoiPostProcessingCategory: 0 + - m_start_PoiShading: 1 + - m_start_PoiUVCategory: 0 + - m_start_RGBMask: 0 + - m_start_Rim2AudioLink: 0 + - m_start_RimAudioLink: 0 + - m_start_SphericalDissolve: 0 + - m_start_StencilPassBackOptions: 0 + - m_start_StencilPassFrontOptions: 0 + - m_start_StencilPassOptions: 0 + - m_start_Stochastic: 0 + - m_start_Text: 0 + - m_start_TextFPS: 0 + - m_start_TextInstanceTime: 0 + - m_start_TextNumeric: 0 + - m_start_TextPosition: 0 + - m_start_TruchetAudioLink: 0 + - m_start_UVTileDissolve: 0 + - m_start_Uzumore: 0 + - m_start_VideoSettings: 0 + - m_start_VoronoiAudioLink: 0 + - m_start_WorldAOBlocker: 0 + - m_start_alphaBlending: 0 + - m_start_audioLink: 0 + - m_start_audioLinkOverrides: 0 + - m_start_backFace: 0 + - m_start_backlight: 0 + - m_start_bakedLighting: 0 + - m_start_blending: 0 + - m_start_brdf: 0 + - m_start_clearCoat: 0 + - m_start_clearcoatadvanced: 0 + - m_start_clearcoatglobalmask: 0 + - m_start_depthFX: 0 + - m_start_depthRimLightOptions: 0 + - m_start_dissolve: 0 + - m_start_dissolveHueShift: 0 + - m_start_emission1Options: 0 + - m_start_emission2Options: 0 + - m_start_emission3Options: 0 + - m_start_emissionOptions: 0 + - m_start_flipBook: 0 + - m_start_glitter: 0 + - m_start_internalparallax: 0 + - m_start_matcap: 0 + - m_start_mirrorOptions: 0 + - m_start_normalCorrect: 0 + - m_start_outlineAlphaBlending: 0 + - m_start_outlineBlending: 0 + - m_start_parallax: 0 + - m_start_pathing: 0 + - m_start_pen_autoConfig: 0 + - m_start_poiSSAO: 0 + - m_start_pointToPoint: 0 + - m_start_postprocess: 0 + - m_start_raliv: 0 + - m_start_ralivAdvanced: 0 + - m_start_ralivOriface: 0 + - m_start_ralivPenetrator: 0 + - m_start_reflectionRim: 0 + - m_start_rim2LightOptions: 0 + - m_start_rimLight1Options: 0 + - m_start_stylizedSpec: 0 + - m_start_subsurfaceScattering: 0 + - m_start_tps_penetrator: 0 + - m_start_truchet: 0 + - m_start_udimdiscardOptions: 0 + - m_start_udimfacediscardOptions: 0 + - m_start_uvDistortion: 0 + - m_start_uvLocalWorld: 0 + - m_start_uvPanosphere: 0 + - m_start_uvPolar: 0 + - m_start_vertexGlitching: 0 + - m_start_vertexLookAt: 0 + - m_start_vertexManipulation: 0 + - m_start_videoEffects: 0 + - m_start_voronoi: 0 + - m_start_voronoiRandom: 0 + - m_thirdpartyCategory: 0 + - m_vertexCategory: 0 + - s_end_ALAlpha: 0 + - s_end_ALDecalAudioModsOptions: 0 + - s_end_ALDecalBand: 0 + - s_end_ALDecalColorsBlendingOptions: 0 + - s_end_ALDecalShapeClipOptions: 0 + - s_end_ALDecalVolumeOptions: 0 + - s_end_ALSpectrumMotion: 0 + - s_end_ALVertexGlitching: 0 + - s_end_ALVertexHeight: 0 + - s_end_ALVertexLookAtAL: 0 + - s_end_AlphaAdvanced: 0 + - s_end_AlphaAngular: 0 + - s_end_AlphaDistanceFade: 0 + - s_end_AlphaDithering: 0 + - s_end_AlphaFresnel: 0 + - s_end_AlphaToCoverage: 0 + - s_end_AnisoBottomLayer: 0 + - s_end_AnisoTopLayer: 1 + - s_end_AudioLinkBandOverrides: 0 + - s_end_BRDFTPSMaskGroup: 0 + - s_end_BackFaceHueShift: 0 + - s_end_BackfaceMods: 0 + - s_end_CCopt: 1 + - s_end_ClearCoatTPSMaskGroup: 0 + - s_end_ColorAdjustColorGrading: 0 + - s_end_ContinuousRotation: 0 + - s_end_CubeMapColorAdjust: 0 + - s_end_CubeMapMasking: 0 + - s_end_Decal0ChannelSeparation: 0 + - s_end_Decal0GlobalMasking: 0 + - s_end_Decal0HueShift: 0 + - s_end_Decal0Video: 0 + - s_end_Decal1ChannelSeparation: 0 + - s_end_Decal1GlobalMasking: 0 + - s_end_Decal1HueShift: 0 + - s_end_Decal1Video: 0 + - s_end_Decal2ChannelSeparation: 0 + - s_end_Decal2GlobalMasking: 0 + - s_end_Decal2HueShift: 0 + - s_end_Decal2Video: 0 + - s_end_Decal3ChannelSeparation: 0 + - s_end_Decal3GlobalMasking: 0 + - s_end_Decal3HueShift: 0 + - s_end_Decal3Video: 0 + - s_end_DecalTPSMaskGroup: 0 + - s_end_DepthAlpha: 0 + - s_end_DepthFXColorEmission: 0 + - s_end_DetailNormal: 0 + - s_end_DetailTexture: 0 + - s_end_DissolveAudioLink: 0 + - s_end_DissolvedMenu: 0 + - s_end_EdgeMenu: 0 + - s_end_EmissionAL0Add: 0 + - s_end_EmissionAL0COut: 0 + - s_end_EmissionAL0Multiply: 0 + - s_end_EmissionAL1Add: 0 + - s_end_EmissionAL1COut: 0 + - s_end_EmissionAL1Multiply: 0 + - s_end_EmissionAL2Add: 0 + - s_end_EmissionAL2COut: 0 + - s_end_EmissionAL2Multiply: 0 + - s_end_EmissionAL3Add: 0 + - s_end_EmissionAL3COut: 0 + - s_end_EmissionAL3Multiply: 0 + - s_end_EmissionBlinking0: 0 + - s_end_EmissionBlinking1: 0 + - s_end_EmissionBlinking2: 0 + - s_end_EmissionBlinking3: 0 + - s_end_EmissionCenterOut0: 0 + - s_end_EmissionCenterOut1: 0 + - s_end_EmissionCenterOut2: 0 + - s_end_EmissionCenterOut3: 0 + - s_end_EmissionHueShift0: 0 + - s_end_EmissionHueShift1: 0 + - s_end_EmissionHueShift2: 0 + - s_end_EmissionHueShift3: 0 + - s_end_EmissionLightBased0: 0 + - s_end_EmissionLightBased1: 0 + - s_end_EmissionLightBased2: 0 + - s_end_EmissionLightBased3: 0 + - s_end_FixedRimBlending: 0 + - s_end_FixedRimColor: 0 + - s_end_FixedRimShapeControl: 0 + - s_end_FlipbookCrossfade: 0 + - s_end_FlipbookHueShift: 0 + - s_end_FlipbookManualFrameControl: 0 + - s_end_FlipbookStartAndEnd: 0 + - s_end_GlitterAudioLink: 0 + - s_end_GlitterColorAndShape: 0 + - s_end_GlitterHueShiftSection: 0 + - s_end_GlitterMask: 0 + - s_end_GlitterPositionSize: 0 + - s_end_GlitterRotationSection: 0 + - s_end_GlitterSparkleControl: 0 + - s_end_GlobalMaskOptionsForceToggles: 0 + - s_end_GlobalMaskOptionsMinMaxSliders: 0 + - s_end_GlobalMaskOptionsSliders: 0 + - s_end_LightDataAddPass: 1 + - s_end_LightDataBasePass: 1 + - s_end_LightDataDebug: 0 + - s_end_LightDataSDF: 1 + - s_end_LocalRotation: 0 + - s_end_LocalTranslation: 0 + - s_end_LookAtAlphaMask: 0 + - s_end_LookAtBlueMask: 0 + - s_end_LookAtGreenMask: 0 + - s_end_LookAtRedMask: 0 + - s_end_LookAtVisibility: 0 + - s_end_MainHueShift: 0 + - s_end_MainHueShiftAL: 0 + - s_end_MainHueShiftGlobalMask: 0 + - s_end_MaskingMenu: 0 + - s_end_Matcap0AudioLink: 0 + - s_end_Matcap0Blending: 0 + - s_end_Matcap0Masking: 0 + - s_end_Matcap1AudioLink: 0 + - s_end_Matcap1Blending: 0 + - s_end_Matcap1HueShift: 0 + - s_end_Matcap1Masking: 0 + - s_end_Matcap1Normal: 0 + - s_end_Matcap1Smoothness: 0 + - s_end_Matcap2AudioLink: 0 + - s_end_Matcap2Blending: 0 + - s_end_Matcap2HueShift: 0 + - s_end_Matcap2Masking: 0 + - s_end_Matcap2Normal: 0 + - s_end_Matcap2Smoothness: 0 + - s_end_Matcap2TPSMaskGroup: 0 + - s_end_Matcap3AudioLink: 0 + - s_end_Matcap3Blending: 0 + - s_end_Matcap3HueShift: 0 + - s_end_Matcap3Masking: 0 + - s_end_Matcap3Normal: 0 + - s_end_Matcap3Smoothness: 0 + - s_end_Matcap3TPSMaskGroup: 0 + - s_end_Matcap4TPSMaskGroup: 0 + - s_end_MatcapHueShift: 0 + - s_end_MatcapNormal: 0 + - s_end_MatcapSmoothness: 0 + - s_end_MatcapTPSMaskGroup: 0 + - s_end_MirrorTexture: 0 + - s_end_MultilayerMath1stLayer: 1 + - s_end_MultilayerMath2ndLayer: 0 + - s_end_MultilayerMath3rdLayer: 0 + - s_end_MultilayerMathBorder: 1 + - s_end_MultilayerMathBorderMap: 1 + - s_end_MultilayerShadowMap: 0 + - s_end_OutlineAlphaDistanceFade: 0 + - s_end_OutlineColorAdjust: 0 + - s_end_OutlineFixedSize: 0 + - s_end_OutlineLighting: 0 + - s_end_OutlineRenderingOptions: 0 + - s_end_OutlineZOffset: 0 + - s_end_PBRSecondSpecular: 0 + - s_end_PBRSplitMaskSample: 0 + - s_end_ParallaxInternalHueShift: 0 + - s_end_ParallaxInternalLayerColoring: 0 + - s_end_ParallaxInternalLayerControls: 0 + - s_end_PathAppearance: 0 + - s_end_PathColors: 0 + - s_end_PathRemapping: 0 + - s_end_PathSourceDirections: 0 + - s_end_PathTypes: 0 + - s_end_Positioning: 0 + - s_end_RGBAlpha: 0 + - s_end_RGBBlue: 0 + - s_end_RGBGreen: 0 + - s_end_RGBRed: 0 + - s_end_RimLight0Color: 0 + - s_end_RimLight0GlobalMasking: 0 + - s_end_RimLight0HueShift: 0 + - s_end_RimLight0LightDirMask: 0 + - s_end_RimLight0ShapeControls: 0 + - s_end_RimLight1Color: 0 + - s_end_RimLight1GlobalMasking: 0 + - s_end_RimLight1HueShift: 0 + - s_end_RimLight1LightDirMask: 0 + - s_end_RimLight1ShapeControls: 0 + - s_end_RimLight2DirectionMask: 0 + - s_end_RimLightDirectionMask: 0 + - s_end_SSAOAdvanced: 0 + - s_end_SSAOColorAndMasking: 0 + - s_end_ScrollingEmission0: 0 + - s_end_ScrollingEmission1: 0 + - s_end_ScrollingEmission2: 0 + - s_end_ScrollingEmission3: 0 + - s_end_ShadingAddPass: 0 + - s_end_ShadingGlobalMask: 0 + - s_end_StylizedReflectionLilEnviroReflections: 1 + - s_end_StylizedReflectionLilSpecular: 1 + - s_end_StylizedReflectionMode0: 1 + - s_end_StylizedReflectionMode1: 1 + - s_end_StylizedSpecularAdvanced: 0 + - s_end_StylizedSpecularLayer0: 0 + - s_end_StylizedSpecularLayer1: 0 + - s_end_TimingOptions: 0 + - s_end_TransitionMenu: 0 + - s_end_UVTileDissolveRow0: 0 + - s_end_UVTileDissolveRow1: 0 + - s_end_UVTileDissolveRow2: 0 + - s_end_UVTileDissolveRow3: 0 + - s_end_VertAL: 0 + - s_end_VertexBarrelMode: 0 + - s_end_VertexColors: 0 + - s_end_VertexGlitchMirror: 0 + - s_end_VertexGlitchTexture: 0 + - s_end_VertexManipulationHeight: 0 + - s_end_VertexRoundingAL: 0 + - s_end_VertexScale: 0 + - s_end_VertexSphereMode: 0 + - s_end_VertexTornadoMode: 0 + - s_end_VertexWind: 0 + - s_end_WorldTranslation: 0 + - s_end_brdfadvanced: 0 + - s_end_decal1_position: 0 + - s_end_decal2_position: 0 + - s_end_decal3_position: 0 + - s_end_decal_position: 0 + - s_end_deliot: 0 + - s_end_fogOpt: 1 + - s_end_ggxanisotropics: 0 + - s_end_heightFogOpt: 1 + - s_end_hextile: 0 + - s_end_liltoon_rim2_lightdir: 0 + - s_end_liltoon_rim_lightdir: 0 + - s_end_matcap1ApplyToAlpha: 0 + - s_end_matcap2ApplyToAlpha: 0 + - s_end_matcap3ApplyToAlpha: 0 + - s_end_matcapApplyToAlpha: 0 + - s_end_outline_al_color: 0 + - s_end_parallaxAdvanced: 0 + - s_end_vertexRounding: 0 + - s_start_ALAlpha: 0 + - s_start_ALDecalAudioModsOptions: 1 + - s_start_ALDecalBandOptions: 1 + - s_start_ALDecalColorsBlendingOptions: 1 + - s_start_ALDecalShapeClipOptions: 1 + - s_start_ALDecalVolumeOptions: 1 + - s_start_ALSpectrumMotion: 0 + - s_start_ALVertexGlitching: 0 + - s_start_ALVertexHeight: 0 + - s_start_ALVertexLookAtAL: 0 + - s_start_AlphaAdvanced: 0 + - s_start_AlphaAngular: 0 + - s_start_AlphaDistanceFade: 0 + - s_start_AlphaDithering: 0 + - s_start_AlphaFresnel: 0 + - s_start_AlphaToCoverage: 0 + - s_start_AnisoBottomLayer: 0 + - s_start_AnisoTopLayer: 1 + - s_start_AudioLinkBandOverrides: 1 + - s_start_BRDFTPSMaskGroup: 0 + - s_start_BackFaceHueShift: 0 + - s_start_BackfaceMods: 0 + - s_start_CCopt: 1 + - s_start_ClearCoatTPSMaskGroup: 0 + - s_start_ColorAdjustColorGrading: 0 + - s_start_ContinuousRotation: 0 + - s_start_CubeMapColorAdjust: 0 + - s_start_CubeMapMasking: 1 + - s_start_Decal0ChannelSeparation: 0 + - s_start_Decal0GlobalMasking: 0 + - s_start_Decal0HueShift: 0 + - s_start_Decal0Video: 0 + - s_start_Decal1ChannelSeparation: 0 + - s_start_Decal1GlobalMasking: 0 + - s_start_Decal1HueShift: 0 + - s_start_Decal1Video: 0 + - s_start_Decal2ChannelSeparation: 0 + - s_start_Decal2GlobalMasking: 0 + - s_start_Decal2HueShift: 0 + - s_start_Decal2Video: 0 + - s_start_Decal3ChannelSeparation: 0 + - s_start_Decal3GlobalMasking: 0 + - s_start_Decal3HueShift: 0 + - s_start_Decal3Video: 0 + - s_start_DecalTPSMaskGroup: 0 + - s_start_DepthAlpha: 0 + - s_start_DepthFXColorEmission: 0 + - s_start_DetailNormal: 0 + - s_start_DetailTexture: 0 + - s_start_DissolveAudioLink: 0 + - s_start_DissolvedMenu: 0 + - s_start_EdgeMenu: 0 + - s_start_EmissionAL0Add: 0 + - s_start_EmissionAL0COut: 0 + - s_start_EmissionAL0Multiply: 0 + - s_start_EmissionAL1Add: 0 + - s_start_EmissionAL1COut: 0 + - s_start_EmissionAL1Multiply: 0 + - s_start_EmissionAL2Add: 0 + - s_start_EmissionAL2COut: 0 + - s_start_EmissionAL2Multiply: 0 + - s_start_EmissionAL3Add: 0 + - s_start_EmissionAL3COut: 0 + - s_start_EmissionAL3Multiply: 0 + - s_start_EmissionBlinking0: 0 + - s_start_EmissionBlinking1: 0 + - s_start_EmissionBlinking2: 0 + - s_start_EmissionBlinking3: 0 + - s_start_EmissionCenterOut0: 0 + - s_start_EmissionCenterOut1: 0 + - s_start_EmissionCenterOut2: 0 + - s_start_EmissionCenterOut3: 0 + - s_start_EmissionHueShift0: 0 + - s_start_EmissionHueShift1: 0 + - s_start_EmissionHueShift2: 0 + - s_start_EmissionHueShift3: 0 + - s_start_EmissionLightBased0: 0 + - s_start_EmissionLightBased1: 0 + - s_start_EmissionLightBased2: 0 + - s_start_EmissionLightBased3: 0 + - s_start_FixedRimBlending: 1 + - s_start_FixedRimColor: 1 + - s_start_FixedRimShapeControl: 1 + - s_start_FlipbookCrossfade: 0 + - s_start_FlipbookHueShift: 0 + - s_start_FlipbookManualFrameControl: 0 + - s_start_FlipbookStartAndEnd: 0 + - s_start_GlitterAudioLink: 0 + - s_start_GlitterColorAndShape: 1 + - s_start_GlitterHueShiftSection: 0 + - s_start_GlitterMask: 0 + - s_start_GlitterPositionSize: 0 + - s_start_GlitterRotationSection: 0 + - s_start_GlitterSparkleControl: 1 + - s_start_GlobalMaskOptionsForceToggles: 0 + - s_start_GlobalMaskOptionsMinMaxSliders: 0 + - s_start_GlobalMaskOptionsSliders: 0 + - s_start_LightDataAddPass: 1 + - s_start_LightDataBasePass: 1 + - s_start_LightDataDebug: 0 + - s_start_LightDataSDF: 1 + - s_start_LocalRotation: 0 + - s_start_LocalTranslation: 0 + - s_start_LookAtAlphaMask: 0 + - s_start_LookAtBlueMask: 0 + - s_start_LookAtGreenMask: 0 + - s_start_LookAtRedMask: 1 + - s_start_LookAtVisibility: 0 + - s_start_MainHueShift: 1 + - s_start_MainHueShiftAL: 0 + - s_start_MainHueShiftGlobalMask: 0 + - s_start_MaskingMenu: 0 + - s_start_Matcap0AudioLink: 0 + - s_start_Matcap0Blending: 1 + - s_start_Matcap0Masking: 1 + - s_start_Matcap1AudioLink: 0 + - s_start_Matcap1Blending: 1 + - s_start_Matcap1HueShift: 0 + - s_start_Matcap1Masking: 1 + - s_start_Matcap1Normal: 0 + - s_start_Matcap1Smoothness: 0 + - s_start_Matcap2AudioLink: 0 + - s_start_Matcap2Blending: 1 + - s_start_Matcap2HueShift: 0 + - s_start_Matcap2Masking: 1 + - s_start_Matcap2Normal: 0 + - s_start_Matcap2Smoothness: 0 + - s_start_Matcap2TPSMaskGroup: 0 + - s_start_Matcap3AudioLink: 0 + - s_start_Matcap3Blending: 1 + - s_start_Matcap3HueShift: 0 + - s_start_Matcap3Masking: 1 + - s_start_Matcap3Normal: 0 + - s_start_Matcap3Smoothness: 0 + - s_start_Matcap3TPSMaskGroup: 0 + - s_start_Matcap4TPSMaskGroup: 0 + - s_start_MatcapHueShift: 0 + - s_start_MatcapNormal: 0 + - s_start_MatcapSmoothness: 0 + - s_start_MatcapTPSMaskGroup: 0 + - s_start_MirrorTexture: 1 + - s_start_MultilayerMath1stLayer: 1 + - s_start_MultilayerMath2ndLayer: 0 + - s_start_MultilayerMath3rdLayer: 0 + - s_start_MultilayerMathBorder: 1 + - s_start_MultilayerMathBorderMap: 0 + - s_start_MultilayerShadowMap: 0 + - s_start_OutlineAlphaDistanceFade: 0 + - s_start_OutlineColorAdjust: 0 + - s_start_OutlineFixedSize: 0 + - s_start_OutlineLighting: 0 + - s_start_OutlineRenderingOptions: 0 + - s_start_OutlineZOffset: 0 + - s_start_PBRSecondSpecular: 0 + - s_start_PBRSplitMaskSample: 0 + - s_start_ParallaxInternalHueShift: 0 + - s_start_ParallaxInternalLayerColoring: 1 + - s_start_ParallaxInternalLayerControls: 1 + - s_start_PathAppearance: 1 + - s_start_PathColors: 1 + - s_start_PathRemapping: 1 + - s_start_PathSourceDirections: 1 + - s_start_PathTypes: 1 + - s_start_Positioning: 1 + - s_start_RGBAlpha: 0 + - s_start_RGBBlue: 0 + - s_start_RGBGreen: 0 + - s_start_RGBRed: 0 + - s_start_RimLight0Color: 1 + - s_start_RimLight0GlobalMasking: 0 + - s_start_RimLight0HueShift: 0 + - s_start_RimLight0LightDirMask: 0 + - s_start_RimLight0ShapeControls: 1 + - s_start_RimLight1Color: 1 + - s_start_RimLight1GlobalMasking: 0 + - s_start_RimLight1HueShift: 0 + - s_start_RimLight1LightDirMask: 0 + - s_start_RimLight1ShapeControls: 1 + - s_start_RimLight2DirectionMask: 0 + - s_start_RimLightDirectionMask: 0 + - s_start_SSAOAdvanced: 0 + - s_start_SSAOColorAndMasking: 1 + - s_start_ScrollingEmission0: 0 + - s_start_ScrollingEmission1: 0 + - s_start_ScrollingEmission2: 0 + - s_start_ScrollingEmission3: 0 + - s_start_ShadingAddPass: 0 + - s_start_ShadingGlobalMask: 0 + - s_start_StylizedReflectionLilEnviroReflections: 1 + - s_start_StylizedReflectionLilSpecular: 1 + - s_start_StylizedReflectionMode0: 1 + - s_start_StylizedReflectionMode1: 1 + - s_start_StylizedSpecularAdvanced: 0 + - s_start_StylizedSpecularLayer0: 1 + - s_start_StylizedSpecularLayer1: 1 + - s_start_TimingOptions: 1 + - s_start_TransitionMenu: 0 + - s_start_UVTileDissolveRow0: 0 + - s_start_UVTileDissolveRow1: 0 + - s_start_UVTileDissolveRow2: 0 + - s_start_UVTileDissolveRow3: 0 + - s_start_VertAL: 0 + - s_start_VertexBarrelMode: 0 + - s_start_VertexColors: 0 + - s_start_VertexGlitchMirror: 0 + - s_start_VertexGlitchTexture: 1 + - s_start_VertexManipulationHeight: 1 + - s_start_VertexScale: 0 + - s_start_VertexSphereMode: 0 + - s_start_VertexTornadoMode: 0 + - s_start_VertexWind: 0 + - s_start_WorldTranslation: 0 + - s_start_brdfadvanced: 0 + - s_start_decal1_position: 1 + - s_start_decal2_position: 1 + - s_start_decal3_position: 1 + - s_start_decal_position: 1 + - s_start_deliot: 0 + - s_start_fogOpt: 1 + - s_start_ggxanisotropics: 0 + - s_start_heightFogOpt: 1 + - s_start_hextile: 0 + - s_start_liltoon_rim2_lightdir: 0 + - s_start_liltoon_rim_lightdir: 0 + - s_start_matcap1ApplyToAlpha: 0 + - s_start_matcap2ApplyToAlpha: 0 + - s_start_matcap3ApplyToAlpha: 0 + - s_start_matcapApplyToAlpha: 0 + - s_start_outline_al_color: 0 + - s_start_parallaxAdvanced: 0 + - s_start_vertexRounding: 0 + - s_start_vertexRoundingAL: 0 + - shader_is_using_thry_editor: 0 + - shader_locale: 0 + - shader_master_label: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _1st_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALDecalVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALDecalVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _ALDecaldCircleDimensions: {r: 0, g: 1, b: 0, a: 1} + - _ALUVPosition: {r: 0.5, g: 0.5, b: 1, a: 1} + - _ALUVScale: {r: 1, g: 1, b: 1, a: 1} + - _ALVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _AlphaAudioLinkAddRange: {r: 0, g: 0, b: 0, a: 1} + - _AlphaColor: {r: 1, g: 1, b: 1, a: 1} + - _AlphaMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _AlphaTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _AngleForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _Aniso0Tint: {r: 1, g: 1, b: 1, a: 1} + - _Aniso1Tint: {r: 1, g: 1, b: 1, a: 1} + - _AnisoColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _AnisotropyMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Ap_Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Ap_RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkBandOverrideSliders: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveDetail: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission0CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission1CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission2CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission3CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookFrame: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookScale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkOutlineColorMod: {r: 0, g: 1, b: 0, a: 0} + - _AudioLinkOutlineEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineSize: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkPathEmissionAddA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkRim2BrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2EmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2WidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimWidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiInnerEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiOuterEmission: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceColor: {r: 1, g: 1, b: 1, a: 1} + - _BackFaceMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BacklightColor: {r: 0.85, g: 0.8, b: 0.7, a: 1} + - _BacklightColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _BlackLightMasking0Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking1Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking2Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking3Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlueColor: {r: 1, g: 1, b: 1, a: 1} + - _BlueTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BumpMapPan: {r: 0, g: 0, b: 0, a: 0} + - _CenterOutDissolveDirection: {r: 0, g: 0, b: 1, a: 0} + - _ClearCoatMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _ClearCoatReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _ClearCoatSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _ClothMetallicSmoothnessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapColor: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotation: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotationPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalColor: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor1: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor2: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor3: {r: 1, g: 1, b: 1, a: 1} + - _DecalMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalPosition: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition1: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition2: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition3: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalScale: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale1: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale2: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale3: {r: 1, g: 1, b: 1, a: 0} + - _DecalSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset1: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset2: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset3: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DepthColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DepthRimColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DetailMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailNormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTexPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTint: {r: 1, g: 1, b: 1, a: 1} + - _DissolveDetailNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveEdgeColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveEndPoint: {r: 0, g: 1, b: 0, a: 0} + - _DissolveMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveNoiseTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveStartPoint: {r: 0, g: -1, b: 0, a: 0} + - _DissolveTextureColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveToTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrength1AudioLink: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrengthAudioLink: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL0Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL0StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL1Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL1StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL2Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL2StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL3Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL3StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColor1: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor2: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor3: {r: 1, g: 1, b: 1, a: 1} + - _EmissionMap1Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMapPan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask1Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _EmissiveScroll_Direction: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction1: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction2: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction3: {r: 0, g: -10, b: 0, a: 0} + - _FXProximityColorMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _FXProximityColorMinColor: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookColor: {r: 1, g: 1, b: 1, a: 1} + - _FlipbookCrossfadeRange: {r: 0.75, g: 1, b: 0, a: 1} + - _FlipbookMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookPanning: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _FlipbookSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookTexArrayPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALMaxBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALSizeAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterColor: {r: 1, g: 1, b: 1, a: 1} + - _GlitterColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSize: {r: 0.1, g: 0.5, b: 0, a: 1} + - _GlitterRandomRotationSpeed: {r: 0, g: 0, b: 0, a: 0} + - _GlitterUVPanning: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskMinMaxSlider_0: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_1: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_10: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_11: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_12: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_13: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_14: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_15: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_2: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_3: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_4: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_5: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_6: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_7: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_8: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_9: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskTexture0Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalThemeColor0: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor1: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor2: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor3: {r: 1, g: 1, b: 1, a: 1} + - _GreenColor: {r: 1, g: 1, b: 1, a: 1} + - _GreenTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _HeightMapPan: {r: 0, g: 0, b: 0, a: 0} + - _HeightmaskPan: {r: 0, g: 0, b: 0, a: 0} + - _HighColor: {r: 1, g: 1, b: 1, a: 1} + - _HighColor_TexPan: {r: 0, g: 0, b: 0, a: 0} + - _LTCGI_DiffuseColor: {r: 1, g: 1, b: 1, a: 1} + - _LTCGI_SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _LightDataSDFMapPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingAOMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingDetailShadowMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingForcedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingWrappedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightngForcedDirection: {r: 0, g: 0, b: 0, a: 1} + - _LineColor: {r: 1, g: 1, b: 1, a: 1} + - _LookAtAlphaDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtAlphaMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtBlueDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtBlueMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBluePivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBlueUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtGreenDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtGreenMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtRedMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _MainColorAdjustTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MainTexPan: {r: 0, g: 0, b: 0, a: 0} + - _MatCap2ndBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap3rdBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap4thBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCapBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap3MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap4MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Pan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapColor: {r: 1, g: 1, b: 1, a: 1} + - _MatcapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapPan: {r: 0, g: 0, b: 0, a: 0} + - _MirrorColor: {r: 1, g: 1, b: 1, a: 1} + - _MirrorTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _MochieSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _MultilayerMathBlurMapPan: {r: 0, g: 0, b: 0, a: 0} + - _NormalCorrectOrigin: {r: 0, g: 0.4, b: -0.025, a: 1} + - _OutlineDropShadowOffset: {r: 1, g: 0, b: 0, a: 0} + - _OutlineMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _OutlinePersonaDirection: {r: 1, g: 0, b: 0, a: 0} + - _OutlineTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _PBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _PPMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _PPRGB: {r: 1, g: 1, b: 1, a: 1} + - _PPTint: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ParallaxInternalMapPan: {r: 0, g: 0, b: 1, a: 1} + - _ParallaxInternalMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMinColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalPanDepthSpeed: {r: 0, g: 0, b: 1, a: 1} + - _PathALAutoCorrelatorRangeA: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeB: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeG: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeR: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALHistoryRangeA: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeB: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeG: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeR: {r: 0, g: 1, b: 0, a: 1} + - _PathColorA: {r: 1, g: 1, b: 1, a: 1} + - _PathColorB: {r: 1, g: 1, b: 1, a: 1} + - _PathColorG: {r: 1, g: 1, b: 1, a: 1} + - _PathColorR: {r: 1, g: 1, b: 1, a: 1} + - _PathEmissionStrength: {r: 0, g: 0, b: 0, a: 0} + - _PathGapLengths: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathOffset: {r: 0, g: 0, b: 0, a: 0} + - _PathRemapA: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapB: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapG: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapR: {r: 0, g: 1, b: 0, a: 1} + - _PathSegments: {r: 0, g: 0, b: 0, a: 0} + - _PathSoftness: {r: 1, g: 1, b: 1, a: 1} + - _PathSpeed: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathTime: {r: -999, g: -999, b: -999, a: -999} + - _PathWidth: {r: 0.03, g: 0.03, b: 0.03, a: 0.03} + - _PathingColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PathingMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PolarCenter: {r: 0.5, g: 0.5, b: 0, a: 0} + - _RGBAAlphaPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAAlphaPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAAlphaScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBABlueScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAGreenScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBARedPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBASmoothnessMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RedColor: {r: 1, g: 1, b: 1, a: 1} + - _RedTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _ReflectionColor: {r: 1, g: 1, b: 1, a: 1} + - _ReflectionCubeColor: {r: 0, g: 0, b: 0, a: 1} + - _RgbNormalAPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalBPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalGPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalRPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2Color: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _Rim2ColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2IndirColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2ShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _Rim2TexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimColor: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _RimColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimEnviroMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimIndirColor: {r: 1, g: 1, b: 1, a: 1} + - _RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _RimMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _RimTexPan: {r: 0, g: 0, b: 0, a: 0} + - _SDFForward: {r: 0, g: 0, b: 1, a: 0} + - _SDFLeft: {r: -1, g: 0, b: 0, a: 0} + - _SDFShadingTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOColor: {r: 0, g: 0, b: 0, a: 1} + - _SSAOColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOHSV: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaxDistanceFalloff: {r: 0.01, g: 0.1, b: 1, a: 1} + - _SSSColor: {r: 1, g: 0, b: 0, a: 1} + - _SSSThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_HighColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_Rim2LightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_RimLightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowAOShift: {r: 0, g: 1, b: 0, a: 1} + - _ShadowAOShift2: {r: 0, g: 1, b: 0, a: 1} + - _ShadowBorderColor: {r: 1, g: 0, b: 0, a: 1} + - _ShadowBorderMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowColor: {r: 0.7, g: 0.75, b: 0.85, a: 1} + - _ShadowColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowStrengthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SkinThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SphericalDissolveCenter: {r: 0, g: 0, b: 0, a: 1} + - _SssColorBleedAoWeights: {r: 0.4, g: 0.15, b: 0.13, a: 0} + - _SssTransmissionAbsorption: {r: -8, g: -40, b: -64, a: 0} + - _TPS_BuldgeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorForward: {r: 0, g: 0, b: 1, a: 0} + - _TPS_PenetratorRight: {r: 1, g: 0, b: 0, a: 0} + - _TPS_PenetratorScale: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorUp: {r: 0, g: 1, b: 0, a: 0} + - _TPS_SqueezeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSScale: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericColor: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericScale: {r: 1, g: 1, b: 1, a: 1} + - _TextPositionColor: {r: 1, g: 0, b: 1, a: 1} + - _TextPositionOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionScale: {r: 1, g: 1, b: 1, a: 1} + - _TextTimeColor: {r: 1, g: 0, b: 1, a: 1} + - _TextTimeOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextTimePadding: {r: 0, g: 0, b: 0, a: 0} + - _TextTimeScale: {r: 1, g: 1, b: 1, a: 1} + - _TruchetALAlpha: {r: 0, g: 0, b: 0, a: 0} + - _TruchetALEmission: {r: 0, g: 0, b: 0, a: 0} + - _TruchetChronoPanSpeed: {r: 0, g: 0, b: 0, a: 0} + - _TruchetColor: {r: 1, g: 1, b: 1, a: 1} + - _TruchetMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _TruchetPanOffset: {r: 0, g: 0, b: 0, a: 0} + - _TruchetTexPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexBasicsMaskUVPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalRotationAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalRotationCTALSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalScaleALMax: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalScaleALMin: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexLookAtAlphaAudiolink: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationHeightAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationHeightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationLocalRotation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalRotationSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalScale: {r: 1, g: 1, b: 1, a: 1} + - _VertexManipulationLocalTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationWorldTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexRoundingRangeAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexSpectrumOffsetMax: {r: 0, g: 0.1, b: 0, a: 1} + - _VertexSpectrumOffsetMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexSphereCenter: {r: 0, g: 0, b: 0, a: 1} + - _VertexWindDetailDirection: {r: 0, g: 1, b: 0, a: 0} + - _VertexWindPrimaryDirection: {r: 1, g: 0, b: 0, a: 0} + - _VertexWorldTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexWorldTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VideoMaskTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _VideoResolution: {r: 1280, g: 720, b: 0, a: 0} + - _VoronoiGradient: {r: 0, g: 0.5, b: 0, a: 0} + - _VoronoiInnerColor: {r: 1, g: 1, b: 1, a: 1} + - _VoronoiMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiOuterColor: {r: 0, g: 0, b: 0, a: 1} + - _VoronoiRandomMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiRandomMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiSpeed: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Quiz/Materials/DownCount/Clock.mat.meta b/Assets/Quiz/Materials/DownCount/Clock.mat.meta new file mode 100644 index 0000000..d784155 --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/Clock.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5c816e03b652658498610330ae7c0b66 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/DownCount/Floor.mat b/Assets/Quiz/Materials/DownCount/Floor.mat new file mode 100644 index 0000000..b89c75b --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/Floor.mat @@ -0,0 +1,3822 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Floor + m_Shader: {fileID: 4800000, guid: c1ee721674e170644a78537a421c6aad, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: + - BSSBLOOMFOGTYPE_HEIGHT + - MOCHIE_PBR + - POI_CLEARCOAT + - VIGNETTE_MASKED + - _EMISSION + - _LIGHTINGMODE_REALISTIC + - _RIM2STYLE_POIYOMI + - _RIMSTYLE_POIYOMI + - _STOCHASTICMODE_DELIOT_HEITZ + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + AllLockedGUIDS: 79104b7c72559ae419b9b5c0aaf3f627 + OriginalKeywords: BSSBLOOMFOGTYPE_HEIGHT MOCHIE_PBR POI_CLEARCOAT VIGNETTE_MASKED + _EMISSION _LIGHTINGMODE_REALISTIC _RIM2STYLE_POIYOMI _RIMSTYLE_POIYOMI _STOCHASTICMODE_DELIOT_HEITZ + OriginalShader: .poiyomi/Poiyomi Pro World + OriginalShaderGUID: a11582d439d5e494986c4b421999c03a + RenderType: Opaque + _stripped_tex__ClothDFG: 76d65cbce584df7449699fb8406f60ea + _stripped_tex__SkinLUT: d13510bb2be49aa40a66a0101efb6a36 + _stripped_tex__ToonRamp: 61bd594533da4fc42bd46ef93ba5a4f6 + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _AnisotropyMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 2800000, guid: dd526623e7f7bea42bc678fdaaa34e48, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ClearCoatFallback: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ClearCoatMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 2800000, guid: 0b021ae2081d45541a752b1d7ad0d570, type: 3} + m_Scale: {x: 3, y: 3} + m_Offset: {x: 0, y: 0} + - _EmissionMask: + m_Texture: {fileID: 2800000, guid: 1d95aee74be4c6d4a91f520a30d3f0bc, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionScrollingCurve: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightDataSDFMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingAOMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingDetailShadowMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 60389bb861590e745b808ac4308d4597, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MochieMetallicMaps: + m_Texture: {fileID: 2800000, guid: 80ff50b539b7f0b47b76ca5e3853c6e9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MochieReflCube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _UzumoreMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - DSGI: 0 + - GeometryShader_Enabled: 1 + - Instancing: 0 + - LightmapFlags: 0 + - Tessellation_Enabled: 1 + - VertexBasicsMaskUV: 0 + - _1st2nd_Shades_Feather: 0.0001 + - _1stShadeMapMask_Inverse: 0 + - _1st_ShadeMapUV: 0 + - _2ndShadeMapMask_Inverse: 0 + - _2nd_ShadeMapUV: 0 + - _ALDecalBandClipMax: 1 + - _ALDecalBandClipMin: 0 + - _ALDecalBandStep: 0 + - _ALDecalBaseBoost: 5 + - _ALDecalBlendAlpha: 1 + - _ALDecalBlendType: 0 + - _ALDecalColorMaskUV: 0 + - _ALDecalControlsAlpha: 0 + - _ALDecalGlobalMask: 0 + - _ALDecalGlobalMaskBlendType: 2 + - _ALDecalHighEmission: 0 + - _ALDecalLineWidth: 1 + - _ALDecalLowEmission: 0 + - _ALDecalMidEmission: 0 + - _ALDecalShapeClip: 0 + - _ALDecalShapeClipBandWidth: 0.5 + - _ALDecalShapeClipVolumeWidth: 0.5 + - _ALDecalTrebleBoost: 1 + - _ALDecalType: 0 + - _ALDecalUV: 0 + - _ALDecalUVMode: 0 + - _ALDecalVolume: 0.5 + - _ALDecalVolumeClipMax: 1 + - _ALDecalVolumeClipMin: 0 + - _ALDecalVolumeColorHighThemeIndex: 0 + - _ALDecalVolumeColorLowThemeIndex: 0 + - _ALDecalVolumeColorMidThemeIndex: 0 + - _ALDecalVolumeColorSource: 1 + - _ALDecalVolumeStep: 0 + - _ALHighEmission: 0 + - _ALLowEmission: 0 + - _ALMidEmission: 0 + - _ALUVRotation: 0 + - _ALUVRotationSpeed: 0 + - _ALVolumeColorBlendAlpha: 1 + - _ALVolumeColorBlendType: 0 + - _ALVolumeColorDirection: 0 + - _ALVolumeColorHighThemeIndex: 0 + - _ALVolumeColorLowThemeIndex: 0 + - _ALVolumeColorMidThemeIndex: 0 + - _ALVolumeColorUV: 0 + - _AddBlendOp: 4 + - _AddBlendOpAlpha: 4 + - _AddDstBlend: 1 + - _AddDstBlendAlpha: 1 + - _AddSrcBlend: 1 + - _AddSrcBlendAlpha: 0 + - _Add_Antipodean_Rim2Light: 0 + - _Add_Antipodean_RimLight: 0 + - _AlphaAlphaAdd: 0 + - _AlphaAngular: 0 + - _AlphaAngularGlobalMask: 0 + - _AlphaAudioLinkAddBand: 0 + - _AlphaAudioLinkEnabled: 0 + - _AlphaBoostFA: 10 + - _AlphaColorThemeIndex: 0 + - _AlphaDistanceFade: 0 + - _AlphaDistanceFadeGlobalMask: 0 + - _AlphaDistanceFadeMax: 0 + - _AlphaDistanceFadeMaxAlpha: 1 + - _AlphaDistanceFadeMin: 0 + - _AlphaDistanceFadeMinAlpha: 0 + - _AlphaDistanceFadeType: 1 + - _AlphaDitherBias: 0 + - _AlphaDitherGradient: 0.1 + - _AlphaDithering: 0 + - _AlphaForceOpaque: 1 + - _AlphaFresnel: 0 + - _AlphaFresnelAlpha: 0 + - _AlphaFresnelGlobalMask: 0 + - _AlphaFresnelInvert: 0 + - _AlphaFresnelSharpness: 0.5 + - _AlphaFresnelWidth: 0.5 + - _AlphaGlobalMask: 0 + - _AlphaGlobalMaskBlendType: 2 + - _AlphaMaskBlendStrength: 1 + - _AlphaMaskInvert: 0 + - _AlphaMaskUV: 0 + - _AlphaMaskValue: 0 + - _AlphaMipScale: 0.25 + - _AlphaMod: 0 + - _AlphaPremultiply: 0 + - _AlphaSharpenedA2C: 0 + - _AlphaTextureStochastic: 0 + - _AlphaTextureUV: 0 + - _AlphaToCoverage: 0 + - _AngleCompareTo: 0 + - _AngleMinAlpha: 0 + - _AngleType: 0 + - _Aniso0Blur: 0 + - _Aniso0Edge: 0.5 + - _Aniso0Offset: 0 + - _Aniso0OffsetMapStrength: 0 + - _Aniso0Power: 0 + - _Aniso0Strength: 1 + - _Aniso0SwitchDirection: 0 + - _Aniso0TintIndex: 0 + - _Aniso0ToonMode: 0 + - _Aniso1Blur: 0 + - _Aniso1Edge: 0.5 + - _Aniso1Offset: 0 + - _Aniso1OffsetMapStrength: 0 + - _Aniso1Power: 0.1 + - _Aniso1Strength: 1 + - _Aniso1SwitchDirection: 0 + - _Aniso1TintIndex: 0 + - _Aniso1ToonMode: 0 + - _AnisoAdd: 1 + - _AnisoColorMapUV: 0 + - _AnisoGlobalMask: 0 + - _AnisoGlobalMaskBlendType: 2 + - _AnisoHideInShadow: 1 + - _AnisoReplace: 0 + - _AnisoUseBaseColor: 0 + - _AnisoUseLightColor: 1 + - _Anisotropy: 0 + - _AnisotropyMapChannel: 0 + - _AnisotropyMapUV: 0 + - _Ap_Rim2Light_FeatherOff: 0 + - _Ap_Rim2Light_Power: 0.1 + - _Ap_RimLight_FeatherOff: 0 + - _Ap_RimLight_Power: 0.1 + - _ApplyReflection: 0 + - _ApplySpecular: 1 + - _ApplySpecularFA: 1 + - _AudioLinkAnimToggle: 1 + - _AudioLinkBandOverridesEnabled: 0 + - _AudioLinkDecal0AlphaBand: 0 + - _AudioLinkDecal0ChannelSeparationBand: 0 + - _AudioLinkDecal0EmissionBand: 0 + - _AudioLinkDecal0RotationBand: 0 + - _AudioLinkDecal0ScaleBand: 0 + - _AudioLinkDecal0SideBand: 0 + - _AudioLinkDecal1AlphaBand: 0 + - _AudioLinkDecal1ChannelSeparationBand: 0 + - _AudioLinkDecal1EmissionBand: 0 + - _AudioLinkDecal1RotationBand: 0 + - _AudioLinkDecal1ScaleBand: 0 + - _AudioLinkDecal1SideBand: 0 + - _AudioLinkDecal2AlphaBand: 0 + - _AudioLinkDecal2ChannelSeparationBand: 0 + - _AudioLinkDecal2EmissionBand: 0 + - _AudioLinkDecal2RotationBand: 0 + - _AudioLinkDecal2ScaleBand: 0 + - _AudioLinkDecal2SideBand: 0 + - _AudioLinkDecal3AlphaBand: 0 + - _AudioLinkDecal3ChannelSeparationBand: 0 + - _AudioLinkDecal3EmissionBand: 0 + - _AudioLinkDecal3RotationBand: 0 + - _AudioLinkDecal3ScaleBand: 0 + - _AudioLinkDecal3SideBand: 0 + - _AudioLinkDecalCC0: 0 + - _AudioLinkDecalCC1: 0 + - _AudioLinkDecalCC2: 0 + - _AudioLinkDecalCC3: 0 + - _AudioLinkDissolveAlphaBand: 0 + - _AudioLinkDissolveDetailBand: 0 + - _AudioLinkEmission0CenterOutBand: 0 + - _AudioLinkEmission0CenterOutDuration: 1 + - _AudioLinkEmission0CenterOutSize: 0 + - _AudioLinkEmission1CenterOutBand: 0 + - _AudioLinkEmission1CenterOutDuration: 1 + - _AudioLinkEmission1CenterOutSize: 0 + - _AudioLinkEmission2CenterOutBand: 0 + - _AudioLinkEmission2CenterOutDuration: 1 + - _AudioLinkEmission2CenterOutSize: 0 + - _AudioLinkEmission3CenterOutBand: 0 + - _AudioLinkEmission3CenterOutDuration: 1 + - _AudioLinkEmission3CenterOutSize: 0 + - _AudioLinkFlipbookAlphaBand: 0 + - _AudioLinkFlipbookEmissionBand: 0 + - _AudioLinkFlipbookFrameBand: 0 + - _AudioLinkFlipbookScaleBand: 0 + - _AudioLinkHelp: 0 + - _AudioLinkOutlineColorBand: 0 + - _AudioLinkOutlineEmissionBand: 0 + - _AudioLinkOutlineSizeBand: 0 + - _AudioLinkPathEmissionAddBandA: 0 + - _AudioLinkPathEmissionAddBandB: 0 + - _AudioLinkPathEmissionAddBandG: 0 + - _AudioLinkPathEmissionAddBandR: 0 + - _AudioLinkPathTimeOffsetBandA: 0 + - _AudioLinkPathTimeOffsetBandB: 0 + - _AudioLinkPathTimeOffsetBandG: 0 + - _AudioLinkPathTimeOffsetBandR: 0 + - _AudioLinkPathWidthOffsetBandA: 0 + - _AudioLinkPathWidthOffsetBandB: 0 + - _AudioLinkPathWidthOffsetBandG: 0 + - _AudioLinkPathWidthOffsetBandR: 0 + - _AudioLinkRim2BrightnessBand: 0 + - _AudioLinkRim2EmissionBand: 0 + - _AudioLinkRim2WidthBand: 0 + - _AudioLinkRimBrightnessBand: 0 + - _AudioLinkRimEmissionBand: 0 + - _AudioLinkRimWidthBand: 0 + - _AudioLinkSmoothingBass: 0 + - _AudioLinkSmoothingHighMid: 0 + - _AudioLinkSmoothingLowMid: 0 + - _AudioLinkSmoothingTreble: 0 + - _AudioLinkVoronoiChronoSpeedXBand: 0 + - _AudioLinkVoronoiChronoSpeedXSpeed: 0 + - _AudioLinkVoronoiChronoSpeedXType: 0 + - _AudioLinkVoronoiChronoSpeedYBand: 0 + - _AudioLinkVoronoiChronoSpeedYSpeed: 0 + - _AudioLinkVoronoiChronoSpeedYType: 0 + - _AudioLinkVoronoiChronoSpeedZBand: 0 + - _AudioLinkVoronoiChronoSpeedZSpeed: 0 + - _AudioLinkVoronoiChronoSpeedZType: 0 + - _AudioLinkVoronoiGradientMaxAdd: 0 + - _AudioLinkVoronoiGradientMaxAddBand: 0 + - _AudioLinkVoronoiGradientMinAdd: 0 + - _AudioLinkVoronoiGradientMinAddBand: 0 + - _AudioLinkVoronoiInnerEmissionBand: 0 + - _AudioLinkVoronoiOuterEmissionBand: 0 + - _BRDFTPSDepthEnabled: 0 + - _BRDFTPSReflectionMaskStrength: 1 + - _BRDFTPSSpecularMaskStrength: 1 + - _BSSBloomfog: 0 + - _BSSBloomfogType: 1 + - _BSSEnabled: 0 + - _BSSHelpBox1: 0 + - _BSSHelpBox2: 0 + - _BSSHelpBox3: 0 + - _BSSSpacer1: 0 + - _BSSSpacer2: 0 + - _BSSSpacer3: 0 + - _BackFaceColorThemeIndex: 0 + - _BackFaceDetailIntensity: 1 + - _BackFaceEmissionLimiter: 1 + - _BackFaceEmissionStrength: 0 + - _BackFaceEnabled: 0 + - _BackFaceHueSelectOrShift: 1 + - _BackFaceHueShift: 0 + - _BackFaceHueShiftEnabled: 0 + - _BackFaceHueShiftSpeed: 0 + - _BackFaceMaskChannel: 0 + - _BackFaceMaskUV: 0 + - _BackFaceReplaceAlpha: 0 + - _BackFaceShiftColorSpace: 0 + - _BackFaceTextureUV: 0 + - _BacklightBackfaceMask: 1 + - _BacklightBlur: 0.05 + - _BacklightBorder: 0.35 + - _BacklightColorTexUV: 0 + - _BacklightDirectivity: 5 + - _BacklightEnabled: 0 + - _BacklightMainStrength: 0 + - _BacklightNormalStrength: 1 + - _BacklightReceiveShadow: 1 + - _BacklightViewStrength: 1 + - _BaseColor_Step: 0.5 + - _BaseShade_Feather: 0.0001 + - _BlackLightMasking0GlobalMaskBlendType: 0 + - _BlackLightMasking0GlobalMaskIndex: 0 + - _BlackLightMasking0Key: 1 + - _BlackLightMasking1GlobalMaskBlendType: 0 + - _BlackLightMasking1GlobalMaskIndex: 0 + - _BlackLightMasking1Key: 2 + - _BlackLightMasking2GlobalMaskBlendType: 0 + - _BlackLightMasking2GlobalMaskIndex: 0 + - _BlackLightMasking2Key: 3 + - _BlackLightMasking3GlobalMaskBlendType: 0 + - _BlackLightMasking3GlobalMaskIndex: 0 + - _BlackLightMasking3Key: 4 + - _BlackLightMaskingEnabled: 0 + - _BlendOp: 0 + - _BlendOpAlpha: 0 + - _BlendshapeBadScaleFix: 1 + - _BlendshapePower: 1 + - _BlueAlphaAdd: 0 + - _BlueColorThemeIndex: 0 + - _BlueTextureStochastic: 0 + - _BlueTextureUV: 0 + - _BulgeOffset: 0 + - _BulgePower: 0 + - _BumpMapStochastic: 0 + - _BumpMapUV: 0 + - _BumpScale: 1 + - _CCIgnoreCastedShadows: 0 + - _CameraAngleMax: 90 + - _CameraAngleMin: 45 + - _CenterOutDissolveInvert: 0 + - _CenterOutDissolveMode: 1 + - _CenterOutDissolveNormals: 0 + - _CenterOutDissolvePower: 1 + - _ClearCoatBRDF: 1 + - _ClearCoatForceFallback: 0 + - _ClearCoatGSAAEnabled: 1 + - _ClearCoatGSAAThreshold: 0.1 + - _ClearCoatGSAAVariance: 0.15 + - _ClearCoatGlobalMask: 0 + - _ClearCoatGlobalMaskBlendType: 2 + - _ClearCoatLitFallback: 1 + - _ClearCoatMapsClearCoatMaskChannel: 0 + - _ClearCoatMapsReflectionMaskChannel: 2 + - _ClearCoatMapsRoughnessChannel: 1 + - _ClearCoatMapsSpecularMaskChannel: 3 + - _ClearCoatMapsStochastic: 0 + - _ClearCoatMapsUV: 0 + - _ClearCoatMaskInvert: 0 + - _ClearCoatNormalSelect: 0 + - _ClearCoatReflectionMaskInvert: 0 + - _ClearCoatReflectionStrength: 1 + - _ClearCoatReflectionStrengthGlobalMask: 0 + - _ClearCoatReflectionStrengthGlobalMaskBlendType: 2 + - _ClearCoatReflectionTintThemeIndex: 0 + - _ClearCoatSmoothness: 1 + - _ClearCoatSmoothnessGlobalMask: 0 + - _ClearCoatSmoothnessGlobalMaskBlendType: 2 + - _ClearCoatSmoothnessMapInvert: 0 + - _ClearCoatSpecularMaskInvert: 0 + - _ClearCoatSpecularStrength: 1 + - _ClearCoatSpecularStrengthGlobalMask: 0 + - _ClearCoatSpecularStrengthGlobalMaskBlendType: 2 + - _ClearCoatSpecularTintThemeIndex: 0 + - _ClearCoatStrength: 0.352 + - _ClearCoatTPSDepthMaskEnabled: 0 + - _ClearCoatTPSMaskStrength: 1 + - _ClearcoatExposureOcclusion: 0 + - _ClearcoatFresnelStrength: 0.5 + - _ClothLerp: 0 + - _ClothMetallicSmoothnessMapInvert: 0 + - _ClothMetallicSmoothnessMapUV: 0 + - _ClothReflectance: 0.5 + - _ClothSmoothness: 0.5 + - _ColorGradingToggle: 0 + - _ColorMask: 15 + - _ColorThemeIndex: 0 + - _ContinuousDissolve: 0 + - _CubeMapBlendAmount: 1 + - _CubeMapBrightness: 0 + - _CubeMapColorThemeIndex: 0 + - _CubeMapContrast: 1 + - _CubeMapEmissionStrength: 0 + - _CubeMapEnabled: 0 + - _CubeMapHueSelectOrShift: 1 + - _CubeMapHueShift: 0 + - _CubeMapHueShiftColorSpace: 0 + - _CubeMapHueShiftEnabled: 0 + - _CubeMapHueShiftSpeed: 0 + - _CubeMapIntensity: 1 + - _CubeMapLightMask: 0 + - _CubeMapMaskChannel: 0 + - _CubeMapMaskGlobalMask: 0 + - _CubeMapMaskGlobalMaskBlendType: 2 + - _CubeMapMaskInvert: 0 + - _CubeMapMaskUV: 0 + - _CubeMapNormal: 1 + - _CubeMapSaturation: 1 + - _CubeMapSmoothness: 1 + - _CubeMapUVMode: 1 + - _CubeMapWorldNormalsStrength: 1 + - _CubemapBlendType: 0 + - _Cull: 2 + - _CurvFix: 1 + - _Curvature: 0 + - _CurvatureU: 0 + - _CurvatureV: 0 + - _CustomColors: 0 + - _Cutoff: 0.5 + - _Decal0ApplyGlobalMaskBlendType: 0 + - _Decal0ApplyGlobalMaskIndex: 0 + - _Decal0ChannelSeparation: 0 + - _Decal0ChannelSeparationAngleStrength: 0 + - _Decal0ChannelSeparationEnable: 0 + - _Decal0ChannelSeparationHue: 0 + - _Decal0ChannelSeparationPremultiply: 0 + - _Decal0ChannelSeparationVertical: 0 + - _Decal0Depth: 0 + - _Decal0FaceMask: 0 + - _Decal0GlobalMask: 0 + - _Decal0GlobalMaskBlendType: 2 + - _Decal0HueAngleStrength: 0 + - _Decal0MaskChannel: 0 + - _Decal0OnlyVideo: 0 + - _Decal0OverrideAlphaMode: 0 + - _Decal0TPSMaskStrength: 1 + - _Decal0UseDecalAlpha: 0 + - _Decal0VideoAspectFix: 0 + - _Decal0VideoEmissionStrength: 0 + - _Decal0VideoEnabled: 0 + - _Decal0VideoFitToScale: 1 + - _Decal1ApplyGlobalMaskBlendType: 0 + - _Decal1ApplyGlobalMaskIndex: 0 + - _Decal1ChannelSeparation: 0 + - _Decal1ChannelSeparationAngleStrength: 0 + - _Decal1ChannelSeparationEnable: 0 + - _Decal1ChannelSeparationHue: 0 + - _Decal1ChannelSeparationPremultiply: 0 + - _Decal1ChannelSeparationVertical: 0 + - _Decal1Depth: 0 + - _Decal1FaceMask: 0 + - _Decal1GlobalMask: 0 + - _Decal1GlobalMaskBlendType: 2 + - _Decal1HueAngleStrength: 0 + - _Decal1MaskChannel: 1 + - _Decal1OnlyVideo: 0 + - _Decal1OverrideAlphaMode: 0 + - _Decal1TPSMaskStrength: 1 + - _Decal1UseDecalAlpha: 0 + - _Decal1VideoAspectFix: 0 + - _Decal1VideoEmissionStrength: 0 + - _Decal1VideoEnabled: 0 + - _Decal1VideoFitToScale: 1 + - _Decal2ApplyGlobalMaskBlendType: 0 + - _Decal2ApplyGlobalMaskIndex: 0 + - _Decal2ChannelSeparation: 0 + - _Decal2ChannelSeparationAngleStrength: 0 + - _Decal2ChannelSeparationEnable: 0 + - _Decal2ChannelSeparationHue: 0 + - _Decal2ChannelSeparationPremultiply: 0 + - _Decal2ChannelSeparationVertical: 0 + - _Decal2Depth: 0 + - _Decal2FaceMask: 0 + - _Decal2GlobalMask: 0 + - _Decal2GlobalMaskBlendType: 2 + - _Decal2HueAngleStrength: 0 + - _Decal2MaskChannel: 2 + - _Decal2OnlyVideo: 0 + - _Decal2OverrideAlphaMode: 0 + - _Decal2TPSMaskStrength: 1 + - _Decal2UseDecalAlpha: 0 + - _Decal2VideoAspectFix: 0 + - _Decal2VideoEmissionStrength: 0 + - _Decal2VideoEnabled: 0 + - _Decal2VideoFitToScale: 1 + - _Decal3ApplyGlobalMaskBlendType: 0 + - _Decal3ApplyGlobalMaskIndex: 0 + - _Decal3ChannelSeparation: 0 + - _Decal3ChannelSeparationAngleStrength: 0 + - _Decal3ChannelSeparationEnable: 0 + - _Decal3ChannelSeparationHue: 0 + - _Decal3ChannelSeparationPremultiply: 0 + - _Decal3ChannelSeparationVertical: 0 + - _Decal3Depth: 0 + - _Decal3FaceMask: 0 + - _Decal3GlobalMask: 0 + - _Decal3GlobalMaskBlendType: 2 + - _Decal3HueAngleStrength: 0 + - _Decal3MaskChannel: 3 + - _Decal3OnlyVideo: 0 + - _Decal3OverrideAlphaMode: 0 + - _Decal3TPSMaskStrength: 1 + - _Decal3UseDecalAlpha: 0 + - _Decal3VideoAspectFix: 0 + - _Decal3VideoEmissionStrength: 0 + - _Decal3VideoEnabled: 0 + - _Decal3VideoFitToScale: 1 + - _DecalBlendAlpha: 1 + - _DecalBlendAlpha1: 1 + - _DecalBlendAlpha2: 1 + - _DecalBlendAlpha3: 1 + - _DecalBlendType: 0 + - _DecalBlendType1: 0 + - _DecalBlendType2: 0 + - _DecalBlendType3: 0 + - _DecalColor1ThemeIndex: 0 + - _DecalColor2ThemeIndex: 0 + - _DecalColor3ThemeIndex: 0 + - _DecalColorThemeIndex: 0 + - _DecalEmissionStrength: 0 + - _DecalEmissionStrength1: 0 + - _DecalEmissionStrength2: 0 + - _DecalEmissionStrength3: 0 + - _DecalEnabled: 0 + - _DecalEnabled1: 0 + - _DecalEnabled2: 0 + - _DecalEnabled3: 0 + - _DecalHueShift: 0 + - _DecalHueShift1: 0 + - _DecalHueShift2: 0 + - _DecalHueShift3: 0 + - _DecalHueShiftColorSpace: 0 + - _DecalHueShiftColorSpace1: 0 + - _DecalHueShiftColorSpace2: 0 + - _DecalHueShiftColorSpace3: 0 + - _DecalHueShiftEnabled: 0 + - _DecalHueShiftEnabled1: 0 + - _DecalHueShiftEnabled2: 0 + - _DecalHueShiftEnabled3: 0 + - _DecalHueShiftSelectOrShift: 1 + - _DecalHueShiftSelectOrShift1: 1 + - _DecalHueShiftSelectOrShift2: 1 + - _DecalHueShiftSelectOrShift3: 1 + - _DecalHueShiftSpeed: 0 + - _DecalHueShiftSpeed1: 0 + - _DecalHueShiftSpeed2: 0 + - _DecalHueShiftSpeed3: 0 + - _DecalMaskUV: 0 + - _DecalMirroredUVMode: 0 + - _DecalMirroredUVMode1: 0 + - _DecalMirroredUVMode2: 0 + - _DecalMirroredUVMode3: 0 + - _DecalOverrideAlpha: 0 + - _DecalOverrideAlpha1: 0 + - _DecalOverrideAlpha2: 0 + - _DecalOverrideAlpha3: 0 + - _DecalRotation: 0 + - _DecalRotation1: 0 + - _DecalRotation2: 0 + - _DecalRotation3: 0 + - _DecalRotationCTALBand0: 0 + - _DecalRotationCTALBand1: 0 + - _DecalRotationCTALBand2: 0 + - _DecalRotationCTALBand3: 0 + - _DecalRotationCTALSpeed0: 0 + - _DecalRotationCTALSpeed1: 0 + - _DecalRotationCTALSpeed2: 0 + - _DecalRotationCTALSpeed3: 0 + - _DecalRotationCTALType0: 0 + - _DecalRotationCTALType1: 0 + - _DecalRotationCTALType2: 0 + - _DecalRotationCTALType3: 0 + - _DecalRotationSpeed: 0 + - _DecalRotationSpeed1: 0 + - _DecalRotationSpeed2: 0 + - _DecalRotationSpeed3: 0 + - _DecalSymmetryMode: 0 + - _DecalSymmetryMode1: 0 + - _DecalSymmetryMode2: 0 + - _DecalSymmetryMode3: 0 + - _DecalTPSDepthMaskEnabled: 0 + - _DecalTexture1UV: 0 + - _DecalTexture2UV: 0 + - _DecalTexture3UV: 0 + - _DecalTextureUV: 0 + - _DecalTiled: 0 + - _DecalTiled1: 0 + - _DecalTiled2: 0 + - _DecalTiled3: 0 + - _DepthAlphaMaxDepth: 1 + - _DepthAlphaMaxValue: 0 + - _DepthAlphaMinDepth: 0 + - _DepthAlphaMinValue: 1 + - _DepthAlphaToggle: 0 + - _DepthBulgeFadeLength: 0.02 + - _DepthBulgeHeight: 0.02 + - _DepthBulgeMaskChannel: 0 + - _DepthBulgeMaskUV: 0 + - _DepthBulgeWarning: 0 + - _DepthColorBlendMode: 0 + - _DepthColorMaxDepth: 1 + - _DepthColorMaxValue: 0 + - _DepthColorMinDepth: 0 + - _DepthColorMinValue: 1 + - _DepthColorThemeIndex: 0 + - _DepthColorToggle: 0 + - _DepthEmissionStrength: 0 + - _DepthFXWarning: 0 + - _DepthMaskChannel: 0 + - _DepthMaskGlobalMask: 0 + - _DepthMaskGlobalMaskBlendType: 2 + - _DepthMaskUV: 0 + - _DepthRimAdd: 0 + - _DepthRimAdditiveLighting: 0 + - _DepthRimBrightness: 1 + - _DepthRimColorThemeIndex: 0 + - _DepthRimEmission: 0 + - _DepthRimHideInShadow: 0 + - _DepthRimMixBaseColor: 0 + - _DepthRimMixLightColor: 0 + - _DepthRimMultiply: 0 + - _DepthRimNormalToUse: 1 + - _DepthRimReplace: 0 + - _DepthRimSharpness: 0.2 + - _DepthRimType: 0 + - _DepthRimWidth: 0.2 + - _DepthTextureUV: 0 + - _DetailBrightness: 1 + - _DetailEnabled: 0 + - _DetailMaskStochastic: 0 + - _DetailMaskUV: 0 + - _DetailNormalGlobalMask: 0 + - _DetailNormalGlobalMaskBlendType: 2 + - _DetailNormalMapScale: 1 + - _DetailNormalMapStochastic: 0 + - _DetailNormalMapUV: 0 + - _DetailTexGlobalMask: 0 + - _DetailTexGlobalMaskBlendType: 2 + - _DetailTexIntensity: 1 + - _DetailTexStochastic: 0 + - _DetailTexUV: 0 + - _DetailTintThemeIndex: 0 + - _DisableDirectionalInAdd: 1 + - _DissolveAlpha: 0 + - _DissolveAlpha0: 0 + - _DissolveAlpha1: 0 + - _DissolveAlpha2: 0 + - _DissolveAlpha3: 0 + - _DissolveAlpha4: 0 + - _DissolveAlpha5: 0 + - _DissolveAlpha6: 0 + - _DissolveAlpha7: 0 + - _DissolveAlpha8: 0 + - _DissolveAlpha9: 0 + - _DissolveApplyGlobalMaskBlendType: 0 + - _DissolveApplyGlobalMaskIndex: 0 + - _DissolveDetailEdgeSmoothing: 0 + - _DissolveDetailNoiseUV: 0 + - _DissolveDetailStrength: 0.1 + - _DissolveEdgeColorThemeIndex: 0 + - _DissolveEdgeEmission: 0 + - _DissolveEdgeHardness: 0.5 + - _DissolveEdgeHueSelectOrShift: 1 + - _DissolveEdgeHueShift: 0 + - _DissolveEdgeHueShiftColorSpace: 0 + - _DissolveEdgeHueShiftEnabled: 0 + - _DissolveEdgeHueShiftSpeed: 0 + - _DissolveEdgeWidth: 0.025 + - _DissolveHueSelectOrShift: 1 + - _DissolveHueShift: 0 + - _DissolveHueShiftColorSpace: 0 + - _DissolveHueShiftEnabled: 0 + - _DissolveHueShiftSpeed: 0 + - _DissolveInverseApplyGlobalMaskBlendType: 0 + - _DissolveInverseApplyGlobalMaskIndex: 0 + - _DissolveInvertDetailNoise: 0 + - _DissolveInvertNoise: 0 + - _DissolveMaskGlobalMask: 0 + - _DissolveMaskGlobalMaskBlendType: 2 + - _DissolveMaskInvert: 0 + - _DissolveMaskUV: 0 + - _DissolveNoiseTextureUV: 0 + - _DissolveP2PClamp: 0 + - _DissolveP2PEdgeLength: 0.1 + - _DissolveP2PWorldLocal: 0 + - _DissolveTextureColorThemeIndex: 0 + - _DissolveToEmissionStrength: 0 + - _DissolveToTextureUV: 0 + - _DissolveType: 1 + - _DissolveUseVertexColors: 0 + - _DistortionFlowTexture1UV: 0 + - _DistortionFlowTextureUV: 0 + - _DistortionMaskChannel: 0 + - _DistortionMaskUV: 0 + - _DistortionStrength: 0.03 + - _DistortionStrength1: 0.01 + - _DistortionStrength1AudioLinkBand: 0 + - _DistortionStrengthAudioLinkBand: 0 + - _DistortionUvToDistort: 0 + - _DstBlend: 0 + - _DstBlendAlpha: 10 + - _EmissionAL0Enabled: 0 + - _EmissionAL0MultipliersBand: 0 + - _EmissionAL0StrengthBand: 0 + - _EmissionAL1Enabled: 0 + - _EmissionAL1MultipliersBand: 0 + - _EmissionAL1StrengthBand: 0 + - _EmissionAL2Enabled: 0 + - _EmissionAL2MultipliersBand: 0 + - _EmissionAL2StrengthBand: 0 + - _EmissionAL3Enabled: 0 + - _EmissionAL3MultipliersBand: 0 + - _EmissionAL3StrengthBand: 0 + - _EmissionBaseColorAsMap: 0 + - _EmissionBaseColorAsMap1: 0 + - _EmissionBaseColorAsMap2: 0 + - _EmissionBaseColorAsMap3: 0 + - _EmissionBlinkingEnabled: 1 + - _EmissionBlinkingEnabled1: 0 + - _EmissionBlinkingEnabled2: 0 + - _EmissionBlinkingEnabled3: 0 + - _EmissionBlinkingOffset: 0 + - _EmissionBlinkingOffset1: 0 + - _EmissionBlinkingOffset2: 0 + - _EmissionBlinkingOffset3: 0 + - _EmissionCenterOutEnabled: 0 + - _EmissionCenterOutEnabled1: 0 + - _EmissionCenterOutEnabled2: 0 + - _EmissionCenterOutEnabled3: 0 + - _EmissionCenterOutSpeed: 5 + - _EmissionCenterOutSpeed1: 5 + - _EmissionCenterOutSpeed2: 5 + - _EmissionCenterOutSpeed3: 5 + - _EmissionColor1ThemeIndex: 0 + - _EmissionColor2ThemeIndex: 0 + - _EmissionColor3ThemeIndex: 0 + - _EmissionColorThemeIndex: 0 + - _EmissionFluorescence: 0 + - _EmissionFluorescence1: 0 + - _EmissionFluorescence2: 0 + - _EmissionFluorescence3: 0 + - _EmissionHueSelectOrShift: 1 + - _EmissionHueSelectOrShift1: 1 + - _EmissionHueSelectOrShift2: 1 + - _EmissionHueSelectOrShift3: 1 + - _EmissionHueShift: 0 + - _EmissionHueShift1: 0 + - _EmissionHueShift2: 0 + - _EmissionHueShift3: 0 + - _EmissionHueShiftColorSpace: 0 + - _EmissionHueShiftColorSpace1: 0 + - _EmissionHueShiftColorSpace2: 0 + - _EmissionHueShiftColorSpace3: 0 + - _EmissionHueShiftEnabled: 0 + - _EmissionHueShiftEnabled1: 0 + - _EmissionHueShiftEnabled2: 0 + - _EmissionHueShiftEnabled3: 0 + - _EmissionHueShiftSpeed: 0 + - _EmissionHueShiftSpeed1: 0 + - _EmissionHueShiftSpeed2: 0 + - _EmissionHueShiftSpeed3: 0 + - _EmissionMap1UV: 0 + - _EmissionMap2UV: 0 + - _EmissionMap3UV: 0 + - _EmissionMapUV: 0 + - _EmissionMask0GlobalMask: 0 + - _EmissionMask0GlobalMaskBlendType: 2 + - _EmissionMask1Channel: 0 + - _EmissionMask1GlobalMask: 0 + - _EmissionMask1GlobalMaskBlendType: 2 + - _EmissionMask1UV: 0 + - _EmissionMask2Channel: 0 + - _EmissionMask2GlobalMask: 0 + - _EmissionMask2GlobalMaskBlendType: 2 + - _EmissionMask2UV: 0 + - _EmissionMask3Channel: 0 + - _EmissionMask3GlobalMask: 0 + - _EmissionMask3GlobalMaskBlendType: 2 + - _EmissionMask3UV: 0 + - _EmissionMaskChannel: 0 + - _EmissionMaskInvert: 0 + - _EmissionMaskInvert1: 0 + - _EmissionMaskInvert2: 0 + - _EmissionMaskInvert3: 0 + - _EmissionMaskUV: 0 + - _EmissionReplace0: 0 + - _EmissionReplace1: 0 + - _EmissionReplace2: 0 + - _EmissionReplace3: 0 + - _EmissionSaturation: 0 + - _EmissionSaturation1: 0 + - _EmissionSaturation2: 0 + - _EmissionSaturation3: 0 + - _EmissionScrollingOffset: 0 + - _EmissionScrollingOffset1: 0 + - _EmissionScrollingOffset2: 0 + - _EmissionScrollingOffset3: 0 + - _EmissionScrollingUseCurve: 0 + - _EmissionScrollingUseCurve1: 0 + - _EmissionScrollingUseCurve2: 0 + - _EmissionScrollingUseCurve3: 0 + - _EmissionScrollingVertexColor: 0 + - _EmissionScrollingVertexColor1: 0 + - _EmissionScrollingVertexColor2: 0 + - _EmissionScrollingVertexColor3: 0 + - _EmissionStrength: 0.4 + - _EmissionStrength1: 0 + - _EmissionStrength2: 0 + - _EmissionStrength3: 0 + - _EmissiveBlink_Max: 0.64 + - _EmissiveBlink_Max1: 1 + - _EmissiveBlink_Max2: 1 + - _EmissiveBlink_Max3: 1 + - _EmissiveBlink_Min: 0.2 + - _EmissiveBlink_Min1: 0 + - _EmissiveBlink_Min2: 0 + - _EmissiveBlink_Min3: 0 + - _EmissiveBlink_Velocity: 1 + - _EmissiveBlink_Velocity1: 4 + - _EmissiveBlink_Velocity2: 4 + - _EmissiveBlink_Velocity3: 4 + - _EmissiveScroll_Interval: 100 + - _EmissiveScroll_Interval1: 20 + - _EmissiveScroll_Interval2: 20 + - _EmissiveScroll_Interval3: 20 + - _EmissiveScroll_Velocity: 2 + - _EmissiveScroll_Velocity1: 10 + - _EmissiveScroll_Velocity2: 10 + - _EmissiveScroll_Velocity3: 10 + - _EmissiveScroll_Width: 3 + - _EmissiveScroll_Width1: 10 + - _EmissiveScroll_Width2: 10 + - _EmissiveScroll_Width3: 10 + - _EnableALDecal: 0 + - _EnableAniso: 0 + - _EnableAudioLink: 0 + - _EnableDepthBulge: 0 + - _EnableDepthRimLighting: 0 + - _EnableDissolve: 0 + - _EnableDissolveAudioLink: 0 + - _EnableDistortion: 0 + - _EnableDistortionAudioLink: 0 + - _EnableEmission: 1 + - _EnableEmission1: 0 + - _EnableEmission2: 0 + - _EnableEmission3: 0 + - _EnableEnvironmentalRim: 0 + - _EnableFlipbook: 0 + - _EnableGITDEmission: 0 + - _EnableGITDEmission1: 0 + - _EnableGITDEmission2: 0 + - _EnableGITDEmission3: 0 + - _EnableMirrorOptions: 0 + - _EnableOutlines: 0 + - _EnablePathRemapping: 0 + - _EnablePathing: 0 + - _EnableRim2Lighting: 0 + - _EnableRimLighting: 0 + - _EnableTouchGlow: 0 + - _EnableTruchet: 0 + - _EnableUDIMDiscardOptions: 0 + - _EnableUDIMFaceDiscardOptions: 0 + - _EnableVolumeColor: 0 + - _EntranceStiffness: 0.01 + - _EntryOpenDuration: 0.1 + - _FFBFOutlineStencilHelp0: 0 + - _FFBFOutlineStencilHelp1: 0 + - _FFBFStencilHelp0: 0 + - _FFBFStencilHelp1: 0 + - _FXProximityColor: 0 + - _FXProximityColorBackFace: 0 + - _FXProximityColorMaxColorThemeIndex: 0 + - _FXProximityColorMaxDistance: 1 + - _FXProximityColorMinColorThemeIndex: 0 + - _FXProximityColorMinDistance: 0 + - _FXProximityColorType: 1 + - _FlipBackfaceNormals: 1 + - _FlipbookAlphaControlsFinalAlpha: 0 + - _FlipbookBlendType: 0 + - _FlipbookChronoType: 0 + - _FlipbookChronotensityBand: 0 + - _FlipbookChronotensityEnabled: 0 + - _FlipbookChronotensitySpeed: 0 + - _FlipbookColorReplaces: 0 + - _FlipbookColorThemeIndex: 0 + - _FlipbookCrossfadeEnabled: 0 + - _FlipbookCurrentFrame: 0 + - _FlipbookEmissionStrength: 0 + - _FlipbookEndFrame: 0 + - _FlipbookFPS: 30 + - _FlipbookFrameOffset: 0 + - _FlipbookHueSelectOrShift: 1 + - _FlipbookHueShift: 0 + - _FlipbookHueShiftColorSpace: 0 + - _FlipbookHueShiftEnabled: 0 + - _FlipbookHueShiftSpeed: 0 + - _FlipbookIntensityControlsAlpha: 0 + - _FlipbookManualFrameControl: 0 + - _FlipbookMaskChannel: 0 + - _FlipbookMaskGlobalMask: 0 + - _FlipbookMaskGlobalMaskBlendType: 2 + - _FlipbookMaskUV: 0 + - _FlipbookReplace: 1 + - _FlipbookRotation: 0 + - _FlipbookRotationSpeed: 0 + - _FlipbookStartAndEnd: 0 + - _FlipbookStartFrame: 0 + - _FlipbookTexArrayUV: 0 + - _FlipbookTiled: 0 + - _FogHeightOffset: 0 + - _FogHeightScale: 1 + - _FogScale: 1 + - _FogStartOffset: 0 + - _ForceFlatRampedLightmap: 1 + - _ForgotToLockMaterial: 1 + - _GGXAnisotropics: 0 + - _GIEmissionMultiplier: 1 + - _GITDEMaxEmissionMultiplier: 0 + - _GITDEMaxEmissionMultiplier1: 0 + - _GITDEMaxEmissionMultiplier2: 0 + - _GITDEMaxEmissionMultiplier3: 0 + - _GITDEMaxLight: 1 + - _GITDEMaxLight1: 1 + - _GITDEMaxLight2: 1 + - _GITDEMaxLight3: 1 + - _GITDEMinEmissionMultiplier: 1 + - _GITDEMinEmissionMultiplier1: 1 + - _GITDEMinEmissionMultiplier2: 1 + - _GITDEMinEmissionMultiplier3: 1 + - _GITDEMinLight: 0 + - _GITDEMinLight1: 0 + - _GITDEMinLight2: 0 + - _GITDEMinLight3: 0 + - _GITDEWorldOrMesh: 0 + - _GITDEWorldOrMesh1: 0 + - _GITDEWorldOrMesh2: 0 + - _GITDEWorldOrMesh3: 0 + - _GSAAStrength: 0 + - _GlitterALAlphaAddBand: 0 + - _GlitterALChronoRotationSpeed: 0 + - _GlitterALChronoRotationSpeedBand: 0 + - _GlitterALChronoRotationSpeedType: 0 + - _GlitterALChronoSparkleSpeed: 0 + - _GlitterALChronoSparkleSpeedBand: 0 + - _GlitterALChronoSparkleSpeedType: 0 + - _GlitterALEnabled: 0 + - _GlitterALMaxBrightnessBand: 0 + - _GlitterALSizeAddBand: 0 + - _GlitterAngleRange: 90 + - _GlitterBias: 0.8 + - _GlitterBlendType: 0 + - _GlitterBrightness: 3 + - _GlitterCenterSize: 0.08 + - _GlitterColorMapUV: 0 + - _GlitterColorThemeIndex: 0 + - _GlitterContrast: 300 + - _GlitterEnable: 0 + - _GlitterFrequency: 300 + - _GlitterHideInShadow: 0 + - _GlitterHueSelectOrShift: 1 + - _GlitterHueShift: 0 + - _GlitterHueShiftColorSpace: 0 + - _GlitterHueShiftEnabled: 0 + - _GlitterHueShiftSpeed: 0 + - _GlitterJaggyFix: 0 + - _GlitterLayers: 2 + - _GlitterMaskChannel: 0 + - _GlitterMaskGlobalMask: 0 + - _GlitterMaskGlobalMaskBlendType: 2 + - _GlitterMaskInvert: 0 + - _GlitterMaskUV: 0 + - _GlitterMinBrightness: 0 + - _GlitterMode: 0 + - _GlitterRandomColors: 0 + - _GlitterRandomLocation: 1 + - _GlitterRandomRotation: 0 + - _GlitterRandomSize: 0 + - _GlitterScaleWithLighting: 0 + - _GlitterShape: 0 + - _GlitterSize: 0.3 + - _GlitterSpeed: 10 + - _GlitterTextureRotation: 0 + - _GlitterUV: 0 + - _GlitterUseNormals: 0 + - _GlitterUseSurfaceColor: 0 + - _GlobalMaskBackface_0: 0 + - _GlobalMaskBackface_1: 0 + - _GlobalMaskBackface_10: 0 + - _GlobalMaskBackface_11: 0 + - _GlobalMaskBackface_12: 0 + - _GlobalMaskBackface_13: 0 + - _GlobalMaskBackface_14: 0 + - _GlobalMaskBackface_15: 0 + - _GlobalMaskBackface_2: 0 + - _GlobalMaskBackface_3: 0 + - _GlobalMaskBackface_4: 0 + - _GlobalMaskBackface_5: 0 + - _GlobalMaskBackface_6: 0 + - _GlobalMaskBackface_7: 0 + - _GlobalMaskBackface_8: 0 + - _GlobalMaskBackface_9: 0 + - _GlobalMaskCamera_0: 0 + - _GlobalMaskCamera_1: 0 + - _GlobalMaskCamera_10: 0 + - _GlobalMaskCamera_11: 0 + - _GlobalMaskCamera_12: 0 + - _GlobalMaskCamera_13: 0 + - _GlobalMaskCamera_14: 0 + - _GlobalMaskCamera_15: 0 + - _GlobalMaskCamera_2: 0 + - _GlobalMaskCamera_3: 0 + - _GlobalMaskCamera_4: 0 + - _GlobalMaskCamera_5: 0 + - _GlobalMaskCamera_6: 0 + - _GlobalMaskCamera_7: 0 + - _GlobalMaskCamera_8: 0 + - _GlobalMaskCamera_9: 0 + - _GlobalMaskDistanceBlendType_0: 0 + - _GlobalMaskDistanceBlendType_1: 0 + - _GlobalMaskDistanceBlendType_10: 0 + - _GlobalMaskDistanceBlendType_11: 0 + - _GlobalMaskDistanceBlendType_12: 0 + - _GlobalMaskDistanceBlendType_13: 0 + - _GlobalMaskDistanceBlendType_14: 0 + - _GlobalMaskDistanceBlendType_15: 0 + - _GlobalMaskDistanceBlendType_2: 0 + - _GlobalMaskDistanceBlendType_3: 0 + - _GlobalMaskDistanceBlendType_4: 0 + - _GlobalMaskDistanceBlendType_5: 0 + - _GlobalMaskDistanceBlendType_6: 0 + - _GlobalMaskDistanceBlendType_7: 0 + - _GlobalMaskDistanceBlendType_8: 0 + - _GlobalMaskDistanceBlendType_9: 0 + - _GlobalMaskDistanceEnable_0: 0 + - _GlobalMaskDistanceEnable_1: 0 + - _GlobalMaskDistanceEnable_10: 0 + - _GlobalMaskDistanceEnable_11: 0 + - _GlobalMaskDistanceEnable_12: 0 + - _GlobalMaskDistanceEnable_13: 0 + - _GlobalMaskDistanceEnable_14: 0 + - _GlobalMaskDistanceEnable_15: 0 + - _GlobalMaskDistanceEnable_2: 0 + - _GlobalMaskDistanceEnable_3: 0 + - _GlobalMaskDistanceEnable_4: 0 + - _GlobalMaskDistanceEnable_5: 0 + - _GlobalMaskDistanceEnable_6: 0 + - _GlobalMaskDistanceEnable_7: 0 + - _GlobalMaskDistanceEnable_8: 0 + - _GlobalMaskDistanceEnable_9: 0 + - _GlobalMaskDistanceMaxAlpha_0: 1 + - _GlobalMaskDistanceMaxAlpha_1: 1 + - _GlobalMaskDistanceMaxAlpha_10: 1 + - _GlobalMaskDistanceMaxAlpha_11: 1 + - _GlobalMaskDistanceMaxAlpha_12: 1 + - _GlobalMaskDistanceMaxAlpha_13: 1 + - _GlobalMaskDistanceMaxAlpha_14: 1 + - _GlobalMaskDistanceMaxAlpha_15: 1 + - _GlobalMaskDistanceMaxAlpha_2: 1 + - _GlobalMaskDistanceMaxAlpha_3: 1 + - _GlobalMaskDistanceMaxAlpha_4: 1 + - _GlobalMaskDistanceMaxAlpha_5: 1 + - _GlobalMaskDistanceMaxAlpha_6: 1 + - _GlobalMaskDistanceMaxAlpha_7: 1 + - _GlobalMaskDistanceMaxAlpha_8: 1 + - _GlobalMaskDistanceMaxAlpha_9: 1 + - _GlobalMaskDistanceMax_0: 2 + - _GlobalMaskDistanceMax_1: 2 + - _GlobalMaskDistanceMax_10: 2 + - _GlobalMaskDistanceMax_11: 2 + - _GlobalMaskDistanceMax_12: 2 + - _GlobalMaskDistanceMax_13: 2 + - _GlobalMaskDistanceMax_14: 2 + - _GlobalMaskDistanceMax_15: 2 + - _GlobalMaskDistanceMax_2: 2 + - _GlobalMaskDistanceMax_3: 2 + - _GlobalMaskDistanceMax_4: 2 + - _GlobalMaskDistanceMax_5: 2 + - _GlobalMaskDistanceMax_6: 2 + - _GlobalMaskDistanceMax_7: 2 + - _GlobalMaskDistanceMax_8: 2 + - _GlobalMaskDistanceMax_9: 2 + - _GlobalMaskDistanceMinAlpha_0: 0 + - _GlobalMaskDistanceMinAlpha_1: 0 + - _GlobalMaskDistanceMinAlpha_10: 0 + - _GlobalMaskDistanceMinAlpha_11: 0 + - _GlobalMaskDistanceMinAlpha_12: 0 + - _GlobalMaskDistanceMinAlpha_13: 0 + - _GlobalMaskDistanceMinAlpha_14: 0 + - _GlobalMaskDistanceMinAlpha_15: 0 + - _GlobalMaskDistanceMinAlpha_2: 0 + - _GlobalMaskDistanceMinAlpha_3: 0 + - _GlobalMaskDistanceMinAlpha_4: 0 + - _GlobalMaskDistanceMinAlpha_5: 0 + - _GlobalMaskDistanceMinAlpha_6: 0 + - _GlobalMaskDistanceMinAlpha_7: 0 + - _GlobalMaskDistanceMinAlpha_8: 0 + - _GlobalMaskDistanceMinAlpha_9: 0 + - _GlobalMaskDistanceMin_0: 1 + - _GlobalMaskDistanceMin_1: 1 + - _GlobalMaskDistanceMin_10: 1 + - _GlobalMaskDistanceMin_11: 1 + - _GlobalMaskDistanceMin_12: 1 + - _GlobalMaskDistanceMin_13: 1 + - _GlobalMaskDistanceMin_14: 1 + - _GlobalMaskDistanceMin_15: 1 + - _GlobalMaskDistanceMin_2: 1 + - _GlobalMaskDistanceMin_3: 1 + - _GlobalMaskDistanceMin_4: 1 + - _GlobalMaskDistanceMin_5: 1 + - _GlobalMaskDistanceMin_6: 1 + - _GlobalMaskDistanceMin_7: 1 + - _GlobalMaskDistanceMin_8: 1 + - _GlobalMaskDistanceMin_9: 1 + - _GlobalMaskDistanceType_0: 1 + - _GlobalMaskDistanceType_1: 1 + - _GlobalMaskDistanceType_10: 1 + - _GlobalMaskDistanceType_11: 1 + - _GlobalMaskDistanceType_12: 1 + - _GlobalMaskDistanceType_13: 1 + - _GlobalMaskDistanceType_14: 1 + - _GlobalMaskDistanceType_15: 1 + - _GlobalMaskDistanceType_2: 1 + - _GlobalMaskDistanceType_3: 1 + - _GlobalMaskDistanceType_4: 1 + - _GlobalMaskDistanceType_5: 1 + - _GlobalMaskDistanceType_6: 1 + - _GlobalMaskDistanceType_7: 1 + - _GlobalMaskDistanceType_8: 1 + - _GlobalMaskDistanceType_9: 1 + - _GlobalMaskMirrorVisibilityMode: 1 + - _GlobalMaskMirror_0: 0 + - _GlobalMaskMirror_1: 0 + - _GlobalMaskMirror_10: 0 + - _GlobalMaskMirror_11: 0 + - _GlobalMaskMirror_12: 0 + - _GlobalMaskMirror_13: 0 + - _GlobalMaskMirror_14: 0 + - _GlobalMaskMirror_15: 0 + - _GlobalMaskMirror_2: 0 + - _GlobalMaskMirror_3: 0 + - _GlobalMaskMirror_4: 0 + - _GlobalMaskMirror_5: 0 + - _GlobalMaskMirror_6: 0 + - _GlobalMaskMirror_7: 0 + - _GlobalMaskMirror_8: 0 + - _GlobalMaskMirror_9: 0 + - _GlobalMaskModifiersBackfaceEnable: 0 + - _GlobalMaskModifiersCameraEnable: 0 + - _GlobalMaskModifiersCameraInfo: 0 + - _GlobalMaskModifiersDistanceEnable: 0 + - _GlobalMaskModifiersMirrorEnable: 0 + - _GlobalMaskOptionsEnable: 0 + - _GlobalMaskOptionsType: 0 + - _GlobalMaskSlider_0: 0 + - _GlobalMaskSlider_1: 0 + - _GlobalMaskSlider_10: 0 + - _GlobalMaskSlider_11: 0 + - _GlobalMaskSlider_12: 0 + - _GlobalMaskSlider_13: 0 + - _GlobalMaskSlider_14: 0 + - _GlobalMaskSlider_15: 0 + - _GlobalMaskSlider_2: 0 + - _GlobalMaskSlider_3: 0 + - _GlobalMaskSlider_4: 0 + - _GlobalMaskSlider_5: 0 + - _GlobalMaskSlider_6: 0 + - _GlobalMaskSlider_7: 0 + - _GlobalMaskSlider_8: 0 + - _GlobalMaskSlider_9: 0 + - _GlobalMaskTexture0Split: 0 + - _GlobalMaskTexture0UV: 0 + - _GlobalMaskTexture1Split: 0 + - _GlobalMaskTexture1UV: 0 + - _GlobalMaskTexture2Split: 0 + - _GlobalMaskTexture2UV: 0 + - _GlobalMaskTexture3Split: 0 + - _GlobalMaskTexture3UV: 0 + - _GlobalMaskTexturesEnable: 0 + - _GlobalMaskToggleOff_0: 0 + - _GlobalMaskToggleOff_1: 0 + - _GlobalMaskToggleOff_10: 0 + - _GlobalMaskToggleOff_11: 0 + - _GlobalMaskToggleOff_12: 0 + - _GlobalMaskToggleOff_13: 0 + - _GlobalMaskToggleOff_14: 0 + - _GlobalMaskToggleOff_15: 0 + - _GlobalMaskToggleOff_2: 0 + - _GlobalMaskToggleOff_3: 0 + - _GlobalMaskToggleOff_4: 0 + - _GlobalMaskToggleOff_5: 0 + - _GlobalMaskToggleOff_6: 0 + - _GlobalMaskToggleOff_7: 0 + - _GlobalMaskToggleOff_8: 0 + - _GlobalMaskToggleOff_9: 0 + - _GlobalMaskToggleOn_0: 0 + - _GlobalMaskToggleOn_1: 0 + - _GlobalMaskToggleOn_10: 0 + - _GlobalMaskToggleOn_11: 0 + - _GlobalMaskToggleOn_12: 0 + - _GlobalMaskToggleOn_13: 0 + - _GlobalMaskToggleOn_14: 0 + - _GlobalMaskToggleOn_15: 0 + - _GlobalMaskToggleOn_2: 0 + - _GlobalMaskToggleOn_3: 0 + - _GlobalMaskToggleOn_4: 0 + - _GlobalMaskToggleOn_5: 0 + - _GlobalMaskToggleOn_6: 0 + - _GlobalMaskToggleOn_7: 0 + - _GlobalMaskToggleOn_8: 0 + - _GlobalMaskToggleOn_9: 0 + - _GlobalMaskVertexColorAlpha: 0 + - _GlobalMaskVertexColorAlphaBlendType: 2 + - _GlobalMaskVertexColorBlue: 0 + - _GlobalMaskVertexColorBlueBlendType: 2 + - _GlobalMaskVertexColorGreen: 0 + - _GlobalMaskVertexColorGreenBlendType: 2 + - _GlobalMaskVertexColorLinearSpace: 1 + - _GlobalMaskVertexColorRed: 0 + - _GlobalMaskVertexColorRedBlendType: 2 + - _GlobalThemeHue0: 0 + - _GlobalThemeHue1: 0 + - _GlobalThemeHue2: 0 + - _GlobalThemeHue3: 0 + - _GlobalThemeHueSpeed0: 0 + - _GlobalThemeHueSpeed1: 0 + - _GlobalThemeHueSpeed2: 0 + - _GlobalThemeHueSpeed3: 0 + - _GlobalThemeSaturation0: 0 + - _GlobalThemeSaturation1: 0 + - _GlobalThemeSaturation2: 0 + - _GlobalThemeSaturation3: 0 + - _GlobalThemeValue0: 0 + - _GlobalThemeValue1: 0 + - _GlobalThemeValue2: 0 + - _GlobalThemeValue3: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GreenAlphaAdd: 0 + - _GreenColorThemeIndex: 0 + - _GreenTextureStochastic: 0 + - _GreenTextureUV: 0 + - _HeightMapUV: 0 + - _HeightOffset: 0 + - _HeightStepsMax: 128 + - _HeightStepsMin: 10 + - _HeightStrength: 0.005 + - _HeightmaskChannel: 0 + - _HeightmaskInvert: 0 + - _HeightmaskUV: 0 + - _HighColorThemeIndex: 0 + - _HighColor_Power: 0.2 + - _HighColor_TexUV: 0 + - _IgnoreCastedShadows: 0 + - _IgnoreFog: 0 + - _Is_BlendAddToHiColor: 0 + - _Is_LightColor_Ap_Rim2Light: 1 + - _Is_LightColor_Ap_RimLight: 1 + - _Is_LightColor_Rim2Light: 1 + - _Is_LightColor_RimLight: 1 + - _Is_NormalMapToRim2Light: 1 + - _Is_NormalMapToRimLight: 1 + - _Is_SpecularToHighColor: 0 + - _LTCGIEnabled: 0 + - _LTCGI_AnimToggle: 1 + - _LTCGI_Attribution: 0 + - _LTCGI_DiffuseColorThemeIndex: 0 + - _LTCGI_Metallic: 0 + - _LTCGI_Smoothness: 0 + - _LTCGI_SpecularColorThemeIndex: 0 + - _LTCGI_UseEO: 0 + - _LTCGI_UsePBR: 1 + - _Layer1Strength: 1 + - _Layer2Size: 0 + - _Layer2Strength: 0 + - _Length: 0 + - _LightDataAOGlobalMaskBlendTypeR: 2 + - _LightDataAOGlobalMaskR: 0 + - _LightDataAOStrengthA: 0 + - _LightDataAOStrengthB: 0 + - _LightDataAOStrengthG: 0 + - _LightDataAOStrengthR: 1 + - _LightDataDebugEnabled: 0 + - _LightDataDetailShadowGlobalMaskBlendTypeR: 2 + - _LightDataDetailShadowGlobalMaskR: 0 + - _LightDataSDFBlendY: 1 + - _LightDataSDFMapLOD: 0 + - _LightDataSDFMapUV: 0 + - _LightDataShadowMaskGlobalMaskBlendTypeR: 2 + - _LightDataShadowMaskGlobalMaskR: 0 + - _LightDirection_MaskOn: 0 + - _LightDirection_MaskOn2: 0 + - _LightingAOMapsUV: 0 + - _LightingAddDetailShadowStrengthA: 0 + - _LightingAddDetailShadowStrengthB: 0 + - _LightingAddDetailShadowStrengthG: 0 + - _LightingAddDetailShadowStrengthR: 1 + - _LightingAdditiveCastedShadows: 1 + - _LightingAdditiveEnable: 1 + - _LightingAdditiveGradientEnd: 0.5 + - _LightingAdditiveGradientStart: 0 + - _LightingAdditiveLimit: 1 + - _LightingAdditiveLimited: 1 + - _LightingAdditiveMonochromatic: 0 + - _LightingAdditivePassthrough: 0.5 + - _LightingAdditiveType: 3 + - _LightingCap: 1 + - _LightingCapEnabled: 1 + - _LightingCastedShadows: 0 + - _LightingColorMode: 0 + - _LightingDebugVisualize: 0 + - _LightingDetailShadowMapsUV: 0 + - _LightingDetailShadowStrengthA: 0 + - _LightingDetailShadowStrengthB: 0 + - _LightingDetailShadowStrengthG: 0 + - _LightingDetailShadowStrengthR: 1 + - _LightingDirectionMode: 0 + - _LightingEnableLightVolumes: 1 + - _LightingForceColorEnabled: 0 + - _LightingForcedColorThemeIndex: 0 + - _LightingGradientEnd: 0.5 + - _LightingGradientStart: 0 + - _LightingIgnoreAmbientColor: 1 + - _LightingIndirectUsesNormals: 0 + - _LightingMapMode: 0 + - _LightingMinLightBrightness: 0 + - _LightingMirrorVertexLightingEnabled: 1 + - _LightingMode: 6 + - _LightingMonochromatic: 0 + - _LightingMulitlayerNonLinear: 1 + - _LightingShadowMaskStrengthA: 0 + - _LightingShadowMaskStrengthB: 0 + - _LightingShadowMaskStrengthG: 0 + - _LightingShadowMaskStrengthR: 1 + - _LightingShadowMasksUV: 0 + - _LightingVertexLightingEnabled: 1 + - _LightingViewDirOffsetPitch: 0 + - _LightingViewDirOffsetYaw: 0 + - _LightingWrappedNormalization: 0 + - _LightingWrappedWrap: 0 + - _LineColorThemeIndex: 0 + - _LineWidth: 1 + - _LookAtAlphaAlpha: 1 + - _LookAtAlphaMaskEnabled: 0 + - _LookAtAlphaTargetUp: 0 + - _LookAtBlueAlpha: 1 + - _LookAtBlueMaskEnabled: 0 + - _LookAtBlueTargetUp: 0 + - _LookAtGreenAlpha: 1 + - _LookAtGreenMaskEnabled: 0 + - _LookAtGreenTargetUp: 0 + - _LookAtMaskUV: 0 + - _LookAtRedAlpha: 1 + - _LookAtRedMaskEnabled: 1 + - _LookAtRedTargetUp: 0 + - _LookAtVisibilityEnabled: 0 + - _LookAtVisibilityMirror: 0 + - _LookAtVisibilityMode: 1 + - _LookAtVisibilityVRCCameraDesktop: 1 + - _LookAtVisibilityVRCCameraScreenshot: 1 + - _LookAtVisibilityVRCCameraVR: 1 + - _LookAtVisibilityVRCMirrorDesktop: 1 + - _LookAtVisibilityVRCMirrorVR: 1 + - _LookAtVisibilityVRCRegular: 1 + - _MainALHueShiftBand: 0 + - _MainALHueShiftCTIndex: 0 + - _MainAlphaMaskMode: 2 + - _MainBrightness: 0 + - _MainBrightnessGlobalMask: 0 + - _MainBrightnessGlobalMaskBlendType: 2 + - _MainColorAdjustTextureUV: 0 + - _MainColorAdjustToggle: 0 + - _MainGamma: 1 + - _MainGammaGlobalMask: 0 + - _MainGammaGlobalMaskBlendType: 2 + - _MainGradationStrength: 0 + - _MainHueALCTEnabled: 0 + - _MainHueALMotionSpeed: 1 + - _MainHueGlobalMask: 0 + - _MainHueGlobalMaskBlendType: 2 + - _MainHueShift: 0 + - _MainHueShiftColorSpace: 0 + - _MainHueShiftReplace: 1 + - _MainHueShiftSelectOrShift: 1 + - _MainHueShiftSpeed: 0 + - _MainHueShiftToggle: 0 + - _MainIgnoreTexAlpha: 0 + - _MainPixelMode: 0 + - _MainSaturationGlobalMask: 0 + - _MainSaturationGlobalMaskBlendType: 2 + - _MainTexStochastic: 0 + - _MainTexUV: 0 + - _MainUseVertexColorAlpha: 0 + - _MainVertexColoring: 0 + - _MainVertexColoringEnabled: 0 + - _MainVertexColoringLinearSpace: 1 + - _Matcap0ALAlphaAddBand: 0 + - _Matcap0ALChronoPanBand: 0 + - _Matcap0ALChronoPanSpeed: 0 + - _Matcap0ALChronoPanType: 0 + - _Matcap0ALEmissionAddBand: 0 + - _Matcap0ALEnabled: 0 + - _Matcap0ALIntensityAddBand: 0 + - _Matcap0CircleMaskBlur: 0.1 + - _Matcap0CircleMaskBorder: 0.45 + - _Matcap0CircleMaskEnabled: 0 + - _Matcap0CustomNormal: 0 + - _Matcap0NormalMapScale: 1 + - _Matcap0NormalMapUV: 0 + - _Matcap1ALAlphaAddBand: 0 + - _Matcap1ALChronoPanBand: 0 + - _Matcap1ALChronoPanSpeed: 0 + - _Matcap1ALChronoPanType: 0 + - _Matcap1ALEmissionAddBand: 0 + - _Matcap1ALEnabled: 0 + - _Matcap1ALIntensityAddBand: 0 + - _Matcap1CustomNormal: 0 + - _Matcap1NormalMapScale: 1 + - _Matcap1NormalMapUV: 0 + - _Matcap2ALAlphaAddBand: 0 + - _Matcap2ALChronoPanBand: 0 + - _Matcap2ALChronoPanSpeed: 0 + - _Matcap2ALChronoPanType: 0 + - _Matcap2ALEmissionAddBand: 0 + - _Matcap2ALEnabled: 0 + - _Matcap2ALIntensityAddBand: 0 + - _Matcap2Add: 0 + - _Matcap2AddToLight: 0 + - _Matcap2AlphaOverride: 0 + - _Matcap2ApplyToAlphaBlendType: 0 + - _Matcap2ApplyToAlphaBlending: 1 + - _Matcap2ApplyToAlphaEnabled: 0 + - _Matcap2ApplyToAlphaSourceBlend: 0 + - _Matcap2BaseColorMix: 0 + - _Matcap2Border: 0.5 + - _Matcap2CircleMaskBlur: 0.1 + - _Matcap2CircleMaskBorder: 0.45 + - _Matcap2CircleMaskEnabled: 0 + - _Matcap2ColorThemeIndex: 0 + - _Matcap2CustomNormal: 0 + - _Matcap2EmissionStrength: 0 + - _Matcap2Enable: 0 + - _Matcap2HueSelectOrShift: 1 + - _Matcap2HueShift: 0 + - _Matcap2HueShiftColorSpace: 0 + - _Matcap2HueShiftEnabled: 0 + - _Matcap2HueShiftSpeed: 0 + - _Matcap2Intensity: 1 + - _Matcap2LightColorMix: 0 + - _Matcap2LightMask: 0 + - _Matcap2MaskChannel: 0 + - _Matcap2MaskGlobalMask: 0 + - _Matcap2MaskGlobalMaskBlendType: 2 + - _Matcap2MaskInvert: 0 + - _Matcap2MaskSmoothnessApply: 0 + - _Matcap2MaskSmoothnessChannel: 3 + - _Matcap2MaskUV: 0 + - _Matcap2Mixed: 0 + - _Matcap2Multiply: 0 + - _Matcap2Normal: 1 + - _Matcap2NormalMapScale: 1 + - _Matcap2NormalMapUV: 0 + - _Matcap2Replace: 0 + - _Matcap2Rotation: 0 + - _Matcap2Screen: 0 + - _Matcap2Smoothness: 1 + - _Matcap2TPSDepthEnabled: 0 + - _Matcap2TPSMaskStrength: 1 + - _Matcap2UVMode: 1 + - _Matcap2UVToBlend: 1 + - _Matcap3ALAlphaAddBand: 0 + - _Matcap3ALChronoPanBand: 0 + - _Matcap3ALChronoPanSpeed: 0 + - _Matcap3ALChronoPanType: 0 + - _Matcap3ALEmissionAddBand: 0 + - _Matcap3ALEnabled: 0 + - _Matcap3ALIntensityAddBand: 0 + - _Matcap3Add: 0 + - _Matcap3AddToLight: 0 + - _Matcap3AlphaOverride: 0 + - _Matcap3ApplyToAlphaBlendType: 0 + - _Matcap3ApplyToAlphaBlending: 1 + - _Matcap3ApplyToAlphaEnabled: 0 + - _Matcap3ApplyToAlphaSourceBlend: 0 + - _Matcap3BaseColorMix: 0 + - _Matcap3Border: 0.5 + - _Matcap3CircleMaskBlur: 0.1 + - _Matcap3CircleMaskBorder: 0.45 + - _Matcap3CircleMaskEnabled: 0 + - _Matcap3ColorThemeIndex: 0 + - _Matcap3CustomNormal: 0 + - _Matcap3EmissionStrength: 0 + - _Matcap3Enable: 0 + - _Matcap3HueSelectOrShift: 1 + - _Matcap3HueShift: 0 + - _Matcap3HueShiftColorSpace: 0 + - _Matcap3HueShiftEnabled: 0 + - _Matcap3HueShiftSpeed: 0 + - _Matcap3Intensity: 1 + - _Matcap3LightColorMix: 0 + - _Matcap3LightMask: 0 + - _Matcap3MaskChannel: 0 + - _Matcap3MaskGlobalMask: 0 + - _Matcap3MaskGlobalMaskBlendType: 2 + - _Matcap3MaskInvert: 0 + - _Matcap3MaskSmoothnessApply: 0 + - _Matcap3MaskSmoothnessChannel: 3 + - _Matcap3MaskUV: 0 + - _Matcap3Mixed: 0 + - _Matcap3Multiply: 0 + - _Matcap3Normal: 1 + - _Matcap3NormalMapScale: 1 + - _Matcap3NormalMapUV: 0 + - _Matcap3Replace: 0 + - _Matcap3Rotation: 0 + - _Matcap3Screen: 0 + - _Matcap3Smoothness: 1 + - _Matcap3TPSDepthEnabled: 0 + - _Matcap3TPSMaskStrength: 1 + - _Matcap3UVMode: 1 + - _Matcap3UVToBlend: 1 + - _Matcap4Add: 0 + - _Matcap4AddToLight: 0 + - _Matcap4AlphaOverride: 0 + - _Matcap4ApplyToAlphaBlendType: 0 + - _Matcap4ApplyToAlphaBlending: 1 + - _Matcap4ApplyToAlphaEnabled: 0 + - _Matcap4ApplyToAlphaSourceBlend: 0 + - _Matcap4BaseColorMix: 0 + - _Matcap4Border: 0.5 + - _Matcap4CircleMaskBlur: 0.1 + - _Matcap4CircleMaskBorder: 0.45 + - _Matcap4CircleMaskEnabled: 0 + - _Matcap4ColorThemeIndex: 0 + - _Matcap4EmissionStrength: 0 + - _Matcap4Enable: 0 + - _Matcap4HueSelectOrShift: 1 + - _Matcap4HueShift: 0 + - _Matcap4HueShiftColorSpace: 0 + - _Matcap4HueShiftEnabled: 0 + - _Matcap4HueShiftSpeed: 0 + - _Matcap4Intensity: 1 + - _Matcap4LightColorMix: 0 + - _Matcap4LightMask: 0 + - _Matcap4MaskChannel: 0 + - _Matcap4MaskGlobalMask: 0 + - _Matcap4MaskGlobalMaskBlendType: 2 + - _Matcap4MaskInvert: 0 + - _Matcap4MaskSmoothnessApply: 0 + - _Matcap4MaskSmoothnessChannel: 3 + - _Matcap4MaskUV: 0 + - _Matcap4Mixed: 0 + - _Matcap4Multiply: 0 + - _Matcap4Normal: 1 + - _Matcap4Replace: 0 + - _Matcap4Rotation: 0 + - _Matcap4Screen: 0 + - _Matcap4Smoothness: 1 + - _Matcap4TPSDepthEnabled: 0 + - _Matcap4TPSMaskStrength: 1 + - _Matcap4UVMode: 1 + - _Matcap4UVToBlend: 1 + - _MatcapAdd: 0 + - _MatcapAddToLight: 0 + - _MatcapAlphaOverride: 0 + - _MatcapApplyToAlphaBlendType: 0 + - _MatcapApplyToAlphaBlending: 1 + - _MatcapApplyToAlphaEnabled: 0 + - _MatcapApplyToAlphaSourceBlend: 0 + - _MatcapBaseColorMix: 0 + - _MatcapBorder: 0.5 + - _MatcapColorThemeIndex: 0 + - _MatcapEmissionStrength: 0 + - _MatcapEnable: 0 + - _MatcapHueSelectOrShift: 1 + - _MatcapHueShift: 0 + - _MatcapHueShiftColorSpace: 0 + - _MatcapHueShiftEnabled: 0 + - _MatcapHueShiftSpeed: 0 + - _MatcapIntensity: 1 + - _MatcapLightColorMix: 0 + - _MatcapLightMask: 0 + - _MatcapMaskChannel: 0 + - _MatcapMaskGlobalMask: 0 + - _MatcapMaskGlobalMaskBlendType: 2 + - _MatcapMaskInvert: 0 + - _MatcapMaskSmoothnessApply: 0 + - _MatcapMaskSmoothnessChannel: 3 + - _MatcapMaskUV: 0 + - _MatcapMixed: 0 + - _MatcapMultiply: 0 + - _MatcapNormal: 1 + - _MatcapReplace: 1 + - _MatcapRotation: 0 + - _MatcapScreen: 0 + - _MatcapSmoothness: 1 + - _MatcapTPSDepthEnabled: 0 + - _MatcapTPSMaskStrength: 1 + - _MatcapUVMode: 1 + - _MatcapUVToBlend: 1 + - _Metallic: 0 + - _Mirror: 0 + - _MirrorColorThemeIndex: 0 + - _MirrorTextureBlendType: 0 + - _MirrorTextureEnabled: 0 + - _MirrorTextureForceEnabled: 0 + - _MirrorTextureUV: 0 + - _MochieBRDF: 1 + - _MochieForceFallback: 0 + - _MochieGSAAEnabled: 1 + - _MochieLitFallback: 1 + - _MochieMetallicGlobalMask: 0 + - _MochieMetallicGlobalMaskBlendType: 2 + - _MochieMetallicMapInvert: 0 + - _MochieMetallicMapsMetallicChannel: 0 + - _MochieMetallicMapsReflectionMaskChannel: 2 + - _MochieMetallicMapsRoughnessChannel: 1 + - _MochieMetallicMapsSpecularMaskChannel: 3 + - _MochieMetallicMapsStochastic: 0 + - _MochieMetallicMapsUV: 0 + - _MochieMetallicMasksUV: 0 + - _MochieMetallicMultiplier: 1 + - _MochieReflectionMaskInvert: 0 + - _MochieReflectionStrength: 1 + - _MochieReflectionStrengthGlobalMask: 0 + - _MochieReflectionStrengthGlobalMaskBlendType: 2 + - _MochieReflectionTintThemeIndex: 0 + - _MochieRoughnessMapInvert: 0 + - _MochieRoughnessMultiplier: 1 + - _MochieRoughnessMultiplier2: 1 + - _MochieSmoothnessGlobalMask: 0 + - _MochieSmoothnessGlobalMaskBlendType: 2 + - _MochieSpecularMaskInvert: 0 + - _MochieSpecularStrength: 0 + - _MochieSpecularStrength2: 1 + - _MochieSpecularStrengthGlobalMask: 0 + - _MochieSpecularStrengthGlobalMaskBlendType: 2 + - _MochieSpecularTintThemeIndex: 0 + - _Mode: 0 + - _ModelAngleMax: 90 + - _ModelAngleMin: 45 + - _MultilayerMathBlurMapUV: 0 + - _NormalCorrect: 0 + - _NormalCorrectAmount: 0.9 + - _OcclusionStrength: 1 + - _OffsetFactor: 0 + - _OffsetUnits: 0 + - _Offset_Z: 0 + - _OrifaceEnabled: 0 + - _OrificeChannel: 0 + - _OutlineALColorEnabled: 0 + - _OutlineAlphaDistanceFade: 0 + - _OutlineAlphaDistanceFadeMax: 0 + - _OutlineAlphaDistanceFadeMaxAlpha: 1 + - _OutlineAlphaDistanceFadeMin: 0 + - _OutlineAlphaDistanceFadeMinAlpha: 0 + - _OutlineAlphaDistanceFadeType: 1 + - _OutlineBlendOp: 0 + - _OutlineBlendOpAlpha: 4 + - _OutlineClipAtZeroWidth: 1 + - _OutlineCull: 1 + - _OutlineDstBlend: 0 + - _OutlineDstBlendAlpha: 0 + - _OutlineEmission: 0 + - _OutlineExpansionMode: 1 + - _OutlineFixWidth: 0.5 + - _OutlineFixedSize: 1 + - _OutlineGamma: 1 + - _OutlineHue: 0 + - _OutlineHueOffsetSpeed: 0 + - _OutlineHueShift: 0 + - _OutlineLit: 1 + - _OutlineMaskChannel: 0 + - _OutlineMaskUV: 0 + - _OutlineOverrideAlpha: 0 + - _OutlineRimLightBlend: 0 + - _OutlineSaturation: 1 + - _OutlineShadowStrength: 0 + - _OutlineSpace: 0 + - _OutlineSrcBlend: 1 + - _OutlineSrcBlendAlpha: 1 + - _OutlineStencilBackCompareFunction: 8 + - _OutlineStencilBackFailOp: 0 + - _OutlineStencilBackPassOp: 0 + - _OutlineStencilBackZFailOp: 0 + - _OutlineStencilCompareFunction: 8 + - _OutlineStencilFailOp: 0 + - _OutlineStencilFrontCompareFunction: 8 + - _OutlineStencilFrontFailOp: 0 + - _OutlineStencilFrontPassOp: 0 + - _OutlineStencilFrontZFailOp: 0 + - _OutlineStencilPassOp: 0 + - _OutlineStencilReadMask: 255 + - _OutlineStencilRef: 0 + - _OutlineStencilType: 0 + - _OutlineStencilWriteMask: 255 + - _OutlineStencilZFailOp: 0 + - _OutlineTextureUV: 0 + - _OutlineTintMix: 0 + - _OutlineUseVertexColorNormals: 0 + - _OutlineValue: 1 + - _OutlineVertexColorMask: 0 + - _OutlineVertexColorMaskStrength: 1 + - _OutlineZOffsetChannel: 0 + - _OutlineZOffsetInvertMaskChannel: 0 + - _OutlineZOffsetMaskStrength: 1 + - _OutlineZOffsetVertexColor: 0 + - _OutlineZOffsetVertexColorStrength: 1 + - _OutlineZTest: 4 + - _OutlineZWrite: 1 + - _OutlinesMaxDistance: 1 + - _PBRNormalSelect: 1 + - _PBRSplitMaskSample: 0 + - _PBRSplitMaskStochastic: 0 + - _PPBrightness: 1 + - _PPContrast: 1 + - _PPEmissionMultiplier: 1 + - _PPFinalColorMultiplier: 1 + - _PPHDR: 0 + - _PPHelp: 0 + - _PPHue: 0 + - _PPHueShiftColorSpace: 0 + - _PPLightingAddition: 0 + - _PPLightingMultiplier: 1 + - _PPLightness: 0 + - _PPMaskChannel: 0 + - _PPMaskInvert: 0 + - _PPMaskUV: 0 + - _PPPosterization: 0 + - _PPPosterizationAmount: 4 + - _PPSaturation: 1 + - _PanoUseBothEyes: 1 + - _Parallax: 0.02 + - _ParallaxAnisotropic: 1 + - _ParallaxAnisotropyScale: 1 + - _ParallaxBinarySteps: 8 + - _ParallaxConeRatio: 1 + - _ParallaxInternalBlendMode: 0 + - _ParallaxInternalHeightFromAlpha: 0 + - _ParallaxInternalHeightmapMode: 0 + - _ParallaxInternalHueSelectOrShift: 1 + - _ParallaxInternalHueShift: 0 + - _ParallaxInternalHueShiftColorSpace: 0 + - _ParallaxInternalHueShiftEnabled: 0 + - _ParallaxInternalHueShiftPerLevel: 0 + - _ParallaxInternalHueShiftSpeed: 0 + - _ParallaxInternalIterations: 4 + - _ParallaxInternalMapMaskChannel: 0 + - _ParallaxInternalMapMaskUV: 0 + - _ParallaxInternalMaxColorThemeIndex: 0 + - _ParallaxInternalMaxDepth: 0.1 + - _ParallaxInternalMaxFade: 0.1 + - _ParallaxInternalMinColorThemeIndex: 0 + - _ParallaxInternalMinDepth: 0 + - _ParallaxInternalMinFade: 1 + - _ParallaxInternalSurfaceBlendMode: 8 + - _ParallaxMipBias: 0 + - _ParallaxRelaxedCone: 1 + - _ParallaxUV: 0 + - _PathALAutoCorrelator: 0 + - _PathALAutoCorrelatorA: 0 + - _PathALAutoCorrelatorB: 0 + - _PathALAutoCorrelatorG: 0 + - _PathALAutoCorrelatorMode: 0 + - _PathALAutoCorrelatorR: 0 + - _PathALCCA: 0 + - _PathALCCB: 0 + - _PathALCCG: 0 + - _PathALCCR: 0 + - _PathALChrono: 0 + - _PathALColorChord: 0 + - _PathALEmissionOffset: 0 + - _PathALHistory: 0 + - _PathALHistoryA: 0 + - _PathALHistoryB: 0 + - _PathALHistoryBandA: 0 + - _PathALHistoryBandB: 0 + - _PathALHistoryBandG: 0 + - _PathALHistoryBandR: 0 + - _PathALHistoryG: 0 + - _PathALHistoryMode: 0 + - _PathALHistoryR: 0 + - _PathALTimeOffset: 0 + - _PathALWidthOffset: 0 + - _PathChronoBandA: 0 + - _PathChronoBandB: 0 + - _PathChronoBandG: 0 + - _PathChronoBandR: 0 + - _PathChronoSpeedA: 0 + - _PathChronoSpeedB: 0 + - _PathChronoSpeedG: 0 + - _PathChronoSpeedR: 0 + - _PathChronoTypeA: 0 + - _PathChronoTypeB: 0 + - _PathChronoTypeG: 0 + - _PathChronoTypeR: 0 + - _PathColorAThemeIndex: 0 + - _PathColorBThemeIndex: 0 + - _PathColorGThemeIndex: 0 + - _PathColorRThemeIndex: 0 + - _PathGradientType: 0 + - _PathPointSampling: 1 + - _PathSource: 0 + - _PathSourceDirA: 0 + - _PathSourceDirB: 0 + - _PathSourceDirG: 0 + - _PathSourceDirR: 0 + - _PathSurfaceBlendMode: 0 + - _PathTypeA: 2 + - _PathTypeB: 2 + - _PathTypeG: 2 + - _PathTypeR: 2 + - _PathingColorMapUV: 0 + - _PathingMapUV: 0 + - _PathingOverrideAlpha: 0 + - _PathingUVSelect: 0 + - _PenetratorEnabled: 0 + - _PoiGSAAThreshold: 0.1 + - _PoiGSAAVariance: 0.15 + - _PoiInternalParallax: 0 + - _PoiParallax: 0 + - _PoiUTSStyleOutlineBlend: 0 + - _PolarLengthScale: 1 + - _PolarRadialScale: 1 + - _PolarSpiralPower: 0 + - _PolarUV: 0 + - _PostProcess: 0 + - _RGBAAlphaBlendType: 0 + - _RGBAAlphaEmissionStrength: 0 + - _RGBAAlphaEnable: 0 + - _RGBAAlphaMetallicInvert: 0 + - _RGBAAlphaPBRSplitMaskSample: 0 + - _RGBAAlphaPBRSplitMaskStochastic: 0 + - _RGBAAlphaPBRUV: 0 + - _RGBAAlphaSmoothnessInvert: 0 + - _RGBABlueBlendType: 0 + - _RGBABlueEmissionStrength: 0 + - _RGBABlueEnable: 0 + - _RGBABlueMetallicInvert: 0 + - _RGBABluePBRSplitMaskSample: 0 + - _RGBABluePBRSplitMaskStochastic: 0 + - _RGBABluePBRUV: 0 + - _RGBABlueSmoothnessInvert: 0 + - _RGBAGreenBlendType: 0 + - _RGBAGreenEmissionStrength: 0 + - _RGBAGreenEnable: 0 + - _RGBAGreenMetallicInvert: 0 + - _RGBAGreenPBRSplitMaskSample: 0 + - _RGBAGreenPBRSplitMaskStochastic: 0 + - _RGBAGreenPBRUV: 0 + - _RGBAGreenSmoothnessInvert: 0 + - _RGBAMetallicMapsStochastic: 0 + - _RGBAMetallicMapsUV: 0 + - _RGBAPBRAlphaEnabled: 0 + - _RGBAPBRBlueEnabled: 0 + - _RGBAPBRGreenEnabled: 0 + - _RGBAPBRRedEnabled: 0 + - _RGBARedBlendType: 0 + - _RGBARedEmissionStrength: 0 + - _RGBARedEnable: 0 + - _RGBARedMetallicInvert: 0 + - _RGBARedPBRSplitMaskSample: 0 + - _RGBARedPBRSplitMaskStochastic: 0 + - _RGBARedPBRUV: 0 + - _RGBARedSmoothnessInvert: 0 + - _RGBASmoothnessMapsStochastic: 0 + - _RGBASmoothnessMapsUV: 0 + - _RGBMaskEnabled: 0 + - _RGBMaskType: 0 + - _RGBMaskUV: 0 + - _RalivAdvancedHelp: 0 + - _RalivDPSDisableShadowCaster: 1 + - _RalivDPSDisableShadowCasterHelp: 0 + - _RalivHelp: 0 + - _ReCurvature: 0 + - _RedAlphaAdd: 0 + - _RedColorThemeIndex: 0 + - _RedTextureStochastic: 0 + - _RedTextureUV: 0 + - _RefSpecFresnelStrength: 0.5 + - _Reflectance: 0.04 + - _ReflectionAnisotropicStretch: 1 + - _ReflectionApplyTransparency: 1 + - _ReflectionBlendMode: 1 + - _ReflectionCubeEnableLighting: 1 + - _ReflectionCubeOverride: 0 + - _ReflectionNormalStrength: 1 + - _RenderingAOBlockerEnabled: 0 + - _RenderingAOBlockerFlipNormal: 0 + - _RenderingAOBlockerNote: 0 + - _RenderingAOBlockerUVChannel: 0 + - _RenderingEarlyZEnabled: 0 + - _RenderingReduceClipDistance: 0 + - _RgbAlphaGlobalMaskBlendType: 2 + - _RgbAlphaGlobalMaskChannel: 0 + - _RgbAlphaMaskChannel: 3 + - _RgbBlueGlobalMaskBlendType: 2 + - _RgbBlueGlobalMaskChannel: 0 + - _RgbBlueMaskChannel: 2 + - _RgbGreenGlobalMaskBlendType: 2 + - _RgbGreenGlobalMaskChannel: 0 + - _RgbGreenMaskChannel: 1 + - _RgbNormalAGlobalMaskBlendType: 2 + - _RgbNormalAGlobalMaskChannel: 0 + - _RgbNormalAMaskChannel: 3 + - _RgbNormalAScale: 0 + - _RgbNormalAStochastic: 0 + - _RgbNormalAUV: 0 + - _RgbNormalAlphaBlendMode: 0 + - _RgbNormalBGlobalMaskBlendType: 2 + - _RgbNormalBGlobalMaskChannel: 0 + - _RgbNormalBMaskChannel: 2 + - _RgbNormalBScale: 0 + - _RgbNormalBStochastic: 0 + - _RgbNormalBUV: 0 + - _RgbNormalBlueBlendMode: 0 + - _RgbNormalGGlobalMaskBlendType: 2 + - _RgbNormalGGlobalMaskChannel: 0 + - _RgbNormalGMaskChannel: 1 + - _RgbNormalGScale: 0 + - _RgbNormalGStochastic: 0 + - _RgbNormalGUV: 0 + - _RgbNormalGreenBlendMode: 0 + - _RgbNormalRGlobalMaskBlendType: 2 + - _RgbNormalRGlobalMaskChannel: 0 + - _RgbNormalRMaskChannel: 0 + - _RgbNormalRScale: 0 + - _RgbNormalRStochastic: 0 + - _RgbNormalRUV: 0 + - _RgbNormalRedBlendMode: 0 + - _RgbRedGlobalMaskBlendType: 2 + - _RgbRedGlobalMaskChannel: 0 + - _RgbRedMaskChannel: 0 + - _Rim2ApColorThemeIndex: 0 + - _Rim2ApplyAlpha: 0 + - _Rim2ApplyAlphaBlend: 1 + - _Rim2ApplyGlobalMaskBlendType: 2 + - _Rim2ApplyGlobalMaskIndex: 0 + - _Rim2BackfaceMask: 1 + - _Rim2BaseColorMix: 0 + - _Rim2BiasIntensity: 0 + - _Rim2BlendMode: 1 + - _Rim2BlendStrength: 1 + - _Rim2Blur: 0.65 + - _Rim2Border: 0.5 + - _Rim2Brightness: 1 + - _Rim2ColorTexUV: 0 + - _Rim2DirRange: 0 + - _Rim2DirStrength: 0 + - _Rim2EnableLighting: 1 + - _Rim2FresnelPower: 3.5 + - _Rim2GlobalMask: 0 + - _Rim2GlobalMaskBlendType: 2 + - _Rim2HueSelectOrShift: 1 + - _Rim2HueShift: 0 + - _Rim2HueShiftColorSpace: 0 + - _Rim2HueShiftEnabled: 0 + - _Rim2HueShiftSpeed: 0 + - _Rim2IndirBlur: 0.1 + - _Rim2IndirBorder: 0.5 + - _Rim2IndirRange: 0 + - _Rim2LightColorThemeIndex: 0 + - _Rim2Light_FeatherOff: 0 + - _Rim2Light_InsideMask: 0.0001 + - _Rim2Light_Power: 0.1 + - _Rim2LightingInvert: 0 + - _Rim2MainStrength: 0 + - _Rim2MaskChannel: 0 + - _Rim2MaskInvert: 0 + - _Rim2MaskOnlyMask: 0 + - _Rim2MaskUV: 0 + - _Rim2NormalStrength: 1 + - _Rim2Power: 1 + - _Rim2ShadowMask: 0.5 + - _Rim2ShadowMaskInvert: 0 + - _Rim2ShadowMaskRampType: 0 + - _Rim2ShadowMaskStrength: 1 + - _Rim2ShadowToggle: 0 + - _Rim2ShadowWidth: 0 + - _Rim2Sharpness: 0.25 + - _Rim2Strength: 0 + - _Rim2Style: 0 + - _Rim2TexUV: 0 + - _Rim2VRParallaxStrength: 1 + - _Rim2Width: 0.8 + - _RimApColorThemeIndex: 0 + - _RimApplyAlpha: 0 + - _RimApplyAlphaBlend: 1 + - _RimApplyGlobalMaskBlendType: 2 + - _RimApplyGlobalMaskIndex: 0 + - _RimBackfaceMask: 1 + - _RimBaseColorMix: 0 + - _RimBiasIntensity: 0 + - _RimBlendMode: 1 + - _RimBlendStrength: 1 + - _RimBlur: 0.65 + - _RimBorder: 0.5 + - _RimBrightness: 1 + - _RimColorTexUV: 0 + - _RimDirRange: 0 + - _RimDirStrength: 0 + - _RimEnableLighting: 1 + - _RimEnviroBlur: 0.7 + - _RimEnviroChannel: 0 + - _RimEnviroIntensity: 1 + - _RimEnviroMaskUV: 0 + - _RimEnviroMinBrightness: 0 + - _RimEnviroSharpness: 0 + - _RimEnviroWidth: 0.45 + - _RimFresnelPower: 3.5 + - _RimGlobalMask: 0 + - _RimGlobalMaskBlendType: 2 + - _RimHueSelectOrShift: 1 + - _RimHueShift: 0 + - _RimHueShiftColorSpace: 0 + - _RimHueShiftEnabled: 0 + - _RimHueShiftSpeed: 0 + - _RimIndirBlur: 0.1 + - _RimIndirBorder: 0.5 + - _RimIndirRange: 0 + - _RimLightColorThemeIndex: 0 + - _RimLight_FeatherOff: 0 + - _RimLight_InsideMask: 0.0001 + - _RimLight_Power: 0.1 + - _RimLightingInvert: 0 + - _RimMainStrength: 0 + - _RimMaskChannel: 0 + - _RimMaskInvert: 0 + - _RimMaskOnlyMask: 0 + - _RimMaskUV: 0 + - _RimNormalStrength: 1 + - _RimPoi2BlendMode: 0 + - _RimPoiBlendMode: 0 + - _RimPower: 1 + - _RimShadowMask: 0.5 + - _RimShadowMaskInvert: 0 + - _RimShadowMaskRampType: 0 + - _RimShadowMaskStrength: 1 + - _RimShadowToggle: 0 + - _RimShadowWidth: 0 + - _RimSharpness: 0.25 + - _RimStrength: 0 + - _RimStyle: 0 + - _RimTexUV: 0 + - _RimVRParallaxStrength: 1 + - _RimWidth: 0.8 + - _RoughnessAnisotropy: 1 + - _SDFBlur: 0.1 + - _SDFShadingTextureUV: 0 + - _SFExposureOcclusion: 0 + - _SSAOAlphaFade: 1 + - _SSAOAnimationToggle: 1 + - _SSAOApplyGlobalMaskBlendType: 0 + - _SSAOApplyGlobalMaskIndex: 0 + - _SSAOAsRamp: 0 + - _SSAOBias: 0.003 + - _SSAOBlendType: 2 + - _SSAOCenterImportance: 1 + - _SSAOColorMapUV: 0 + - _SSAOColorThemeIndex: 0 + - _SSAOCone: 0 + - _SSAODepthGetWarning: 0 + - _SSAOEnableColorTexture: 0 + - _SSAOEnableMaskTexture: 0 + - _SSAOEnabled: 0 + - _SSAOFalloffEnd: 8 + - _SSAOFalloffStart: 6 + - _SSAOGlobalMaskBlendType: 2 + - _SSAOGlobalMaskIndex: 0 + - _SSAOHideByRampedLightMap: 0 + - _SSAOIntensity: 1 + - _SSAOMaskChannel: 0 + - _SSAOMaskInvert: 0 + - _SSAOMaskUV: 0 + - _SSAOQuality: 2.4 + - _SSAORadius: 0.002 + - _SSAORandomScale: 0 + - _SSAOUseNormals: 0 + - _SSAOUseSurfaceColor: 0 + - _SSIgnoreCastedShadows: 0 + - _SSSBaseColorMix: 0 + - _SSSDistortion: 1 + - _SSSSpread: 5 + - _SSSStrength: 0.25 + - _SSSThicknessMapChannel: 0 + - _SSSThicknessMapUV: 0 + - _SSSThicknessMod: -1 + - _Saturation: 0 + - _ScrollingEmission: 0 + - _ScrollingEmission1: 0 + - _ScrollingEmission2: 0 + - _ScrollingEmission3: 0 + - _Set_HighColorMaskChannel: 1 + - _Set_HighColorMaskUV: 0 + - _Set_Rim2LightMaskChannel: 1 + - _Set_Rim2LightMaskUV: 0 + - _Set_RimLightMaskChannel: 1 + - _Set_RimLightMaskUV: 0 + - _ShadeColor_Step: 0 + - _ShaderOptimizerEnabled: 1 + - _ShaderUIWarning0: -0 + - _ShaderUIWarning1: -0 + - _ShadingEnabled: 1 + - _ShadingRampedLightMapApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapApplyGlobalMaskIndex: 0 + - _ShadingRampedLightMapInverseApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapInverseApplyGlobalMaskIndex: 0 + - _ShadingShadeMapBlendType: 0 + - _Shadow2ndBlur: 0.3 + - _Shadow2ndBorder: 0.5 + - _Shadow2ndColorTexUV: 0 + - _Shadow2ndReceive: 0 + - _Shadow3rdBlur: 0.1 + - _Shadow3rdBorder: 0.25 + - _Shadow3rdColorTexUV: 0 + - _Shadow3rdReceive: 0 + - _ShadowBlur: 0.1 + - _ShadowBorder: 0.5 + - _ShadowBorderMapToggle: 0 + - _ShadowBorderMaskLOD: 0 + - _ShadowBorderMaskUV: 0 + - _ShadowBorderRange: 0 + - _ShadowColorTexUV: 0 + - _ShadowEnvStrength: 0 + - _ShadowFlatBlur: 1 + - _ShadowFlatBorder: 1 + - _ShadowMainStrength: 0 + - _ShadowMaskType: 0 + - _ShadowOffset: 0 + - _ShadowPostAO: 0 + - _ShadowReceive: 0 + - _ShadowStrength: 1 + - _ShadowStrengthMaskUV: 0 + - _Shape1Depth: 0.1 + - _Shape1Duration: 0.1 + - _Shape2Depth: 0.2 + - _Shape2Duration: 0.1 + - _Shape3Depth: 0.3 + - _Shape3Duration: 0.1 + - _SkinThicknessMapInvert: 0 + - _SkinThicknessMapUV: 0 + - _SkinThicknessPower: 1 + - _Smoothness: 1 + - _SmoothnessTextureChannel: 0 + - _Specular2ndLayer: 0 + - _SpecularBlur: 0 + - _SpecularBorder: 0.5 + - _SpecularHighlights: 1 + - _SpecularNormalStrength: 1 + - _SpecularToon: 1 + - _SphericalDissolveClamp: 0 + - _SphericalDissolveInvert: 0 + - _SphericalDissolveRadius: 1.5 + - _Squeeze: 0 + - _SqueezeDist: 0 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _SssBumpBlur: 0.7 + - _SssScale: 1 + - _StencilBackCompareFunction: 8 + - _StencilBackFailOp: 0 + - _StencilBackPassOp: 0 + - _StencilBackZFailOp: 0 + - _StencilCompareFunction: 8 + - _StencilFailOp: 0 + - _StencilFrontCompareFunction: 8 + - _StencilFrontFailOp: 0 + - _StencilFrontPassOp: 0 + - _StencilFrontZFailOp: 0 + - _StencilPassOp: 0 + - _StencilReadMask: 255 + - _StencilRef: 0 + - _StencilType: 0 + - _StencilWriteMask: 255 + - _StencilZFailOp: 0 + - _StereoEnabled: 0 + - _StochasticDeliotHeitzDensity: 1 + - _StochasticHexFallOffContrast: 0.6 + - _StochasticHexFallOffPower: 7 + - _StochasticHexGridDensity: 1 + - _StochasticHexRotationStrength: 0 + - _StochasticMode: 0 + - _StylizedReflectionMode: 0 + - _StylizedSpecular: 0 + - _StylizedSpecular2Feather: 0 + - _StylizedSpecularFeather: 0 + - _StylizedSpecularIgnoreNormal: 0 + - _StylizedSpecularIgnoreShadow: 0 + - _StylizedSpecularInvertMask: 0 + - _StylizedSpecularNormalStrength: 1 + - _StylizedSpecularStrength: 1 + - _SubsurfaceScattering: 0 + - _TPSHelpbox: 0 + - _TPSPenetratorEnabled: 0 + - _TPS_AnimatedToggle: 1 + - _TPS_BezierSmoothness: 0.4 + - _TPS_BezierStart: 0 + - _TPS_BufferedDepth: 0 + - _TPS_BufferedStrength: 0 + - _TPS_Buldge: 0.3 + - _TPS_BuldgeDistance: 0.2 + - _TPS_BuldgeFalloffDistance: 0.05 + - _TPS_Channel: 0 + - _TPS_ChannelWarning: 0 + - _TPS_IdleGravity: 0 + - _TPS_IdleSkrinkLength: 1 + - _TPS_IdleSkrinkWidth: 1 + - _TPS_IsSkinnedMeshRenderer: 0 + - _TPS_PenetratorLength: 1 + - _TPS_PumpingSpeed: 1 + - _TPS_PumpingStrength: 0 + - _TPS_PumpingWidth: 0.2 + - _TPS_SmoothStart: 1 + - _TPS_Squeeze: 0.3 + - _TPS_SqueezeDistance: 0.2 + - _TextEnabled: 0 + - _TextFPSColorThemeIndex: 0 + - _TextFPSEmissionStrength: 0 + - _TextFPSEnabled: 0 + - _TextFPSRotation: 0 + - _TextFPSUV: 0 + - _TextNumericColorThemeIndex: 0 + - _TextNumericDecimalDigits: 0 + - _TextNumericEmissionStrength: 0 + - _TextNumericEnabled: 0 + - _TextNumericRotation: 0 + - _TextNumericTrimZeroes: 0 + - _TextNumericUV: 0 + - _TextNumericValue: 0 + - _TextNumericWholeDigits: 4 + - _TextPixelRange: 4 + - _TextPositionColorThemeIndex: 0 + - _TextPositionEmissionStrength: 0 + - _TextPositionEnabled: 0 + - _TextPositionRotation: 0 + - _TextPositionUV: 0 + - _TextTimeColorThemeIndex: 0 + - _TextTimeEmissionStrength: 0 + - _TextTimeEnabled: 0 + - _TextTimeRotation: 0 + - _TextTimeUV: 0 + - _ToonRampCount: 1 + - _ToonRampUVSelector: 1 + - _TruchetALAlphaBand: 0 + - _TruchetALAlphaToggle: 0 + - _TruchetALEmissionBand: 0 + - _TruchetALEmissionToggle: 0 + - _TruchetAlpha: 1 + - _TruchetBlendType: 0 + - _TruchetChronoPanBand: 0 + - _TruchetChronoPanToggle: 0 + - _TruchetChronoPanType: 0 + - _TruchetColorThemeIndex: 0 + - _TruchetDensity: 10 + - _TruchetEdgeSharpness: 1 + - _TruchetEmissionStrength: 0 + - _TruchetHideWhenNoAL: 0 + - _TruchetMaskChannel: 0 + - _TruchetMaskGlobalMask: 0 + - _TruchetMaskGlobalMaskBlendType: 2 + - _TruchetMaskIntensity: 1 + - _TruchetMaskInvert: 0 + - _TruchetMaskUV: 0 + - _TruchetOverrideAlpha: 0 + - _TruchetThiccness: 0.1 + - _TruchetUV: 0 + - _Tweak_HighColorMaskLevel: 0 + - _Tweak_LightDirection_MaskLevel: 0 + - _Tweak_LightDirection_MaskLevel2: 0 + - _Tweak_Rim2LightMaskLevel: 0 + - _Tweak_RimLightMaskLevel: 0 + - _UDIMDiscardHelpbox: 0 + - _UDIMDiscardMode: 0 + - _UDIMDiscardRow0_0: 0 + - _UDIMDiscardRow0_1: 0 + - _UDIMDiscardRow0_2: 0 + - _UDIMDiscardRow0_3: 0 + - _UDIMDiscardRow1_0: 0 + - _UDIMDiscardRow1_1: 0 + - _UDIMDiscardRow1_2: 0 + - _UDIMDiscardRow1_3: 0 + - _UDIMDiscardRow2_0: 0 + - _UDIMDiscardRow2_1: 0 + - _UDIMDiscardRow2_2: 0 + - _UDIMDiscardRow2_3: 0 + - _UDIMDiscardRow3_0: 0 + - _UDIMDiscardRow3_1: 0 + - _UDIMDiscardRow3_2: 0 + - _UDIMDiscardRow3_3: 0 + - _UDIMDiscardUV: 0 + - _UDIMFaceDiscardFace: 0 + - _UDIMFaceDiscardRow0_0: 0 + - _UDIMFaceDiscardRow0_1: 0 + - _UDIMFaceDiscardRow0_2: 0 + - _UDIMFaceDiscardRow0_3: 0 + - _UDIMFaceDiscardRow1_0: 0 + - _UDIMFaceDiscardRow1_1: 0 + - _UDIMFaceDiscardRow1_2: 0 + - _UDIMFaceDiscardRow1_3: 0 + - _UDIMFaceDiscardRow2_0: 0 + - _UDIMFaceDiscardRow2_1: 0 + - _UDIMFaceDiscardRow2_2: 0 + - _UDIMFaceDiscardRow2_3: 0 + - _UDIMFaceDiscardRow3_0: 0 + - _UDIMFaceDiscardRow3_1: 0 + - _UDIMFaceDiscardRow3_2: 0 + - _UDIMFaceDiscardRow3_3: 0 + - _UDIMFaceDiscardUV: 0 + - _UVModLocalPos0: 0 + - _UVModLocalPos1: 1 + - _UVModWorldPos0: 0 + - _UVModWorldPos1: 2 + - _UVSec: 0 + - _UVTileDissolveAlpha_Row0_0: 0 + - _UVTileDissolveAlpha_Row0_1: 0 + - _UVTileDissolveAlpha_Row0_2: 0 + - _UVTileDissolveAlpha_Row0_3: 0 + - _UVTileDissolveAlpha_Row1_0: 0 + - _UVTileDissolveAlpha_Row1_1: 0 + - _UVTileDissolveAlpha_Row1_2: 0 + - _UVTileDissolveAlpha_Row1_3: 0 + - _UVTileDissolveAlpha_Row2_0: 0 + - _UVTileDissolveAlpha_Row2_1: 0 + - _UVTileDissolveAlpha_Row2_2: 0 + - _UVTileDissolveAlpha_Row2_3: 0 + - _UVTileDissolveAlpha_Row3_0: 0 + - _UVTileDissolveAlpha_Row3_1: 0 + - _UVTileDissolveAlpha_Row3_2: 0 + - _UVTileDissolveAlpha_Row3_3: 0 + - _UVTileDissolveDiscardAtMax: 1 + - _UVTileDissolveEnabled: 0 + - _UVTileDissolveUV: 0 + - _Unlit_Intensity: 1 + - _UseLightColor: 1 + - _UseReflection: 0 + - _Use_1stAs2nd: 0 + - _Use_1stShadeMapAlpha_As_ShadowMask: 0 + - _Use_2ndShadeMapAlpha_As_ShadowMask: 0 + - _Use_BaseAs1st: 0 + - _UzumoreAmount: 0.1 + - _UzumoreBias: 0.001 + - _UzumoreCategoryToggle: 0 + - _UzumoreEnabled: 1 + - _UzumoreMaskUV: 3 + - _VertexAudioLinkEnabled: 0 + - _VertexBarrelAlpha: 0 + - _VertexBarrelHeight: 0 + - _VertexBarrelMaskChannel: 0 + - _VertexBarrelMode: 0 + - _VertexBarrelWidth: 0.2 + - _VertexBasicsMaskChannel: 0 + - _VertexGlitchDensity: 10 + - _VertexGlitchFrequency: 1 + - _VertexGlitchMapPanSpeed: 10 + - _VertexGlitchMirror: 0 + - _VertexGlitchMirrorEnable: 0 + - _VertexGlitchStrength: 1 + - _VertexGlitchThreshold: 1 + - _VertexGlitchingAudioLinkBand: 0 + - _VertexGlitchingAudioLinkEnabled: 0 + - _VertexGlitchingAudiolinkOverride: 1 + - _VertexGlitchingEnabled: 0 + - _VertexGlitchingUseTexture: 0 + - _VertexLocalRotationALBandX: 0 + - _VertexLocalRotationALBandY: 0 + - _VertexLocalRotationALBandZ: 0 + - _VertexLocalRotationCTALBandX: 0 + - _VertexLocalRotationCTALBandY: 0 + - _VertexLocalRotationCTALBandZ: 0 + - _VertexLocalRotationCTALTypeX: 0 + - _VertexLocalRotationCTALTypeY: 0 + - _VertexLocalRotationCTALTypeZ: 0 + - _VertexLocalScaleALBand: 0 + - _VertexLocalTranslationALBand: 0 + - _VertexLookAtAudioLinkBand: 0 + - _VertexLookAtAudioLinkEnabled: 0 + - _VertexLookAtEnabled: 0 + - _VertexManipulationHeight: 0 + - _VertexManipulationHeightBand: 0 + - _VertexManipulationHeightBias: 0 + - _VertexManipulationHeightMapChannel: 0 + - _VertexManipulationHeightMaskChannel: 0 + - _VertexManipulationHeightMaskUV: 0 + - _VertexManipulationsEnabled: 0 + - _VertexRoundingDivision: 0.02 + - _VertexRoundingEnabled: 0 + - _VertexRoundingMaskChannel: 0 + - _VertexRoundingRangeBand: 0 + - _VertexRoundingSpace: 0 + - _VertexSpectrumMotion: 0 + - _VertexSpectrumUV: 0 + - _VertexSpectrumUVDirection: 0 + - _VertexSphereAlpha: 0 + - _VertexSphereHeight: 1 + - _VertexSphereMaskChannel: 0 + - _VertexSphereMode: 0 + - _VertexSphereRadius: 1 + - _VertexTornadoBaseHeight: 0 + - _VertexTornadoFunnelShape: 1 + - _VertexTornadoIntensity: 100 + - _VertexTornadoMaskChannel: 0 + - _VertexTornadoMode: 0 + - _VertexTornadoRadius: 1 + - _VertexTornadoSpeed: 5 + - _VertexTornadoTopHeight: 1 + - _VertexTornadoVerticalPull: 0 + - _VertexWindDetailAmplitude: 0.05 + - _VertexWindDetailFrequency: 5 + - _VertexWindDetailSpeed: 2.5 + - _VertexWindEnabled: 0 + - _VertexWindMaskChannel: 0 + - _VertexWindNoiseChannel: 0 + - _VertexWindNoiseScale: 10 + - _VertexWindNoiseSpeed: 0.5 + - _VertexWindNoiseStrength: 0.5 + - _VertexWindPrimaryAmplitude: 0.1 + - _VertexWindPrimaryFrequency: 1 + - _VertexWindPrimarySpeed: 1 + - _VertexWorldTranslationALBand: 0 + - _VideoBacklight: 1 + - _VideoCRTPixelEnergizedTime: 1.9 + - _VideoCRTRefreshRate: 24 + - _VideoContrast: 0 + - _VideoEffectsEnable: 0 + - _VideoEmissionEnabled: 1 + - _VideoMaskTextureChannel: 0 + - _VideoMaskTextureUV: 0 + - _VideoPixelTextureUV: 0 + - _VideoPixelateToResolution: 0 + - _VideoSaturation: 0 + - _VideoType: 3 + - _VisibilityMode: 1 + - _VisibilityVRCCameraDesktop: 1 + - _VisibilityVRCCameraScreenshot: 1 + - _VisibilityVRCCameraVR: 1 + - _VisibilityVRCMirrorDesktop: 1 + - _VisibilityVRCMirrorVR: 1 + - _VisibilityVRCRegular: 1 + - _VoronoiAffectsMaterialAlpha: 0 + - _VoronoiBlend: 0 + - _VoronoiEnableRandomCellColor: 0 + - _VoronoiEnabled: 0 + - _VoronoiGlobalMask: 0 + - _VoronoiGlobalMaskBlendType: 2 + - _VoronoiInnerEmissionStrength: 0 + - _VoronoiMaskChannel: 0 + - _VoronoiMaskUV: 0 + - _VoronoiNoiseChannel: 0 + - _VoronoiNoiseIntensity: 0.1 + - _VoronoiNoiseUV: 0 + - _VoronoiOuterEmissionStrength: 0 + - _VoronoiPower: 0.45454544 + - _VoronoiScale: 5 + - _VoronoiSpace: 0 + - _VoronoiType: 1 + - _Wriggle: 0 + - _WriggleSpeed: 0.28 + - _ZClip: 1 + - _ZTest: 4 + - _ZWrite: 1 + - _ppHueSelectOrShift: 1 + - footer_bluesky: 0 + - footer_discord: 0 + - footer_github: 0 + - footer_patreon: 0 + - footer_twitter: 0 + - footer_website: 0 + - footer_youtube: 0 + - g_end_tps_bezier: 0 + - g_end_tps_buldge: 0 + - g_end_tps_idle: 0 + - g_end_tps_pulsing: 0 + - g_end_tps_squeeze: 0 + - g_start_tps_bezier: 0 + - g_start_tps_buldge: 0 + - g_start_tps_idle: 0 + - g_start_tps_pulsing: 0 + - g_start_tps_squeeze: 0 + - m_AudioLinkCategory: 0 + - m_OutlineCategory: 0 + - m_end_ALDecalSpectrum: 0 + - m_end_ALVolumeColor: 0 + - m_end_Alpha: 0 + - m_end_Ansio: 0 + - m_end_BeatsaberBloomFog: 0 + - m_end_BeatsaberOptions: 0 + - m_end_BlackLightMasking: 0 + - m_end_BonusSliders: 0 + - m_end_CRT: 0 + - m_end_CenterOutDissolve: 0 + - m_end_ColorAdjust: 0 + - m_end_CubeMap: 0 + - m_end_Decal0: 0 + - m_end_Decal0AudioLink: 0 + - m_end_Decal1: 0 + - m_end_Decal1AudioLink: 0 + - m_end_Decal2: 0 + - m_end_Decal2AudioLink: 0 + - m_end_Decal3: 0 + - m_end_Decal3AudioLink: 0 + - m_end_DecalSection: 0 + - m_end_DepthBulge: 0 + - m_end_DetailOptions: 0 + - m_end_DistortionAudioLink: 0 + - m_end_FXProximityColor: 0 + - m_end_FlipbookAudioLink: 0 + - m_end_Gameboy: 0 + - m_end_GlobalMask: 0 + - m_end_GlobalMaskDistanceM_0: 0 + - m_end_GlobalMaskDistanceM_1: 0 + - m_end_GlobalMaskDistanceM_10: 0 + - m_end_GlobalMaskDistanceM_11: 0 + - m_end_GlobalMaskDistanceM_12: 0 + - m_end_GlobalMaskDistanceM_13: 0 + - m_end_GlobalMaskDistanceM_14: 0 + - m_end_GlobalMaskDistanceM_15: 0 + - m_end_GlobalMaskDistanceM_2: 0 + - m_end_GlobalMaskDistanceM_3: 0 + - m_end_GlobalMaskDistanceM_4: 0 + - m_end_GlobalMaskDistanceM_5: 0 + - m_end_GlobalMaskDistanceM_6: 0 + - m_end_GlobalMaskDistanceM_7: 0 + - m_end_GlobalMaskDistanceM_8: 0 + - m_end_GlobalMaskDistanceM_9: 0 + - m_end_GlobalMaskModifiers: 0 + - m_end_GlobalMaskModifiersBackface: 0 + - m_end_GlobalMaskModifiersCamera: 0 + - m_end_GlobalMaskModifiersDistance: 0 + - m_end_GlobalMaskModifiersMirror: 0 + - m_end_GlobalMaskOptions: 0 + - m_end_GlobalMaskTextures: 0 + - m_end_GlobalMaskVertexColors: 0 + - m_end_GlobalThemeColor0: 0 + - m_end_GlobalThemeColor1: 0 + - m_end_GlobalThemeColor2: 0 + - m_end_GlobalThemeColor3: 0 + - m_end_GlobalThemes: 0 + - m_end_LTCGI: 0 + - m_end_MainVertexColors: 0 + - m_end_Matcap2: 0 + - m_end_Matcap3: 0 + - m_end_Matcap4: 0 + - m_end_OutlineAudioLink: 0 + - m_end_OutlineStencil: 0 + - m_end_OutlineStencilPassBackOptions: 0 + - m_end_OutlineStencilPassFrontOptions: 0 + - m_end_PPAnimations: 0 + - m_end_PathAudioLink: 0 + - m_end_PoiGlobalCategory: 0 + - m_end_PoiLightData: 0 + - m_end_PoiPostProcessingCategory: 0 + - m_end_PoiShading: 0 + - m_end_PoiUVCategory: 0 + - m_end_RGBMask: 0 + - m_end_Rim2AudioLink: 0 + - m_end_RimAudioLink: 0 + - m_end_SphericalDissolve: 0 + - m_end_StencilPassBackOptions: 0 + - m_end_StencilPassFrontOptions: 0 + - m_end_StencilPassOptions: 0 + - m_end_Stochastic: 0 + - m_end_Text: 0 + - m_end_TextFPS: 0 + - m_end_TextInstanceTime: 0 + - m_end_TextNumeric: 0 + - m_end_TextPosition: 0 + - m_end_TruchetAudioLink: 0 + - m_end_UVTileDissolve: 0 + - m_end_Uzumore: 0 + - m_end_VideoSettings: 0 + - m_end_VoronoiAudioLink: 0 + - m_end_WorldAOBlocker: 0 + - m_end_alphaBlending: 0 + - m_end_audioLink: 0 + - m_end_audioLinkOverrides: 0 + - m_end_backFace: 0 + - m_end_backlight: 0 + - m_end_bakedLighting: 0 + - m_end_blending: 0 + - m_end_brdf: 0 + - m_end_clearCoat: 0 + - m_end_clearcoatadvanced: 0 + - m_end_clearcoatglobalmask: 0 + - m_end_depthFX: 0 + - m_end_depthRimLightOptions: 0 + - m_end_dissolve: 0 + - m_end_dissolveHueShift: 0 + - m_end_emission1Options: 0 + - m_end_emission2Options: 0 + - m_end_emission3Options: 0 + - m_end_emissionOptions: 0 + - m_end_flipBook: 0 + - m_end_glitter: 0 + - m_end_internalparallax: 0 + - m_end_matcap: 0 + - m_end_mirrorOptions: 0 + - m_end_normalCorrect: 0 + - m_end_outlineAlphaBlending: 0 + - m_end_outlineBlending: 0 + - m_end_parallax: 0 + - m_end_pathing: 0 + - m_end_pen_autoConfig: 0 + - m_end_poiSSAO: 0 + - m_end_pointToPoint: 0 + - m_end_postprocess: 0 + - m_end_raliv: 0 + - m_end_ralivAdvanced: 0 + - m_end_ralivOriface: 0 + - m_end_ralivPenetrator: 0 + - m_end_reflectionRim: 0 + - m_end_rim1LightOptions: 0 + - m_end_rim2LightOptions: 0 + - m_end_stylizedSpec: 0 + - m_end_subsurfaceScattering: 0 + - m_end_tps_penetrator: 0 + - m_end_truchet: 0 + - m_end_udimdiscardOptions: 0 + - m_end_udimfacediscardOptions: 0 + - m_end_uvDistortion: 0 + - m_end_uvLocalWorld: 0 + - m_end_uvPanosphere: 0 + - m_end_uvPolar: 0 + - m_end_vertexGlitching: 0 + - m_end_vertexLookAt: 0 + - m_end_vertexManipulation: 0 + - m_end_videoEffects: 0 + - m_end_voronoi: 0 + - m_end_voronoiRandom: 0 + - m_lightingCategory: 1 + - m_mainCategory: 1 + - m_modifierCategory: 0 + - m_renderingCategory: 0 + - m_specialFXCategory: 1 + - m_start_ALDecalSpectrum: 0 + - m_start_ALVolumeColor: 0 + - m_start_Alpha: 0 + - m_start_Aniso: 0 + - m_start_BeatsaberBloomFog: 0 + - m_start_BeatsaberOptions: 0 + - m_start_BlackLightMasking: 0 + - m_start_BonusSliders: 0 + - m_start_CRT: 0 + - m_start_CenterOutDissolve: 0 + - m_start_ColorAdjust: 0 + - m_start_CubeMap: 0 + - m_start_Decal0: 0 + - m_start_Decal0AudioLink: 0 + - m_start_Decal1: 0 + - m_start_Decal1AudioLink: 0 + - m_start_Decal2: 0 + - m_start_Decal2AudioLink: 0 + - m_start_Decal3: 0 + - m_start_Decal3AudioLink: 0 + - m_start_DecalSection: 0 + - m_start_DepthBulge: 0 + - m_start_DetailOptions: 0 + - m_start_DistortionAudioLink: 0 + - m_start_FXProximityColor: 0 + - m_start_FlipbookAudioLink: 0 + - m_start_Gameboy: 0 + - m_start_GlobalMask: 0 + - m_start_GlobalMaskDistanceM_0: 0 + - m_start_GlobalMaskDistanceM_1: 0 + - m_start_GlobalMaskDistanceM_10: 0 + - m_start_GlobalMaskDistanceM_11: 0 + - m_start_GlobalMaskDistanceM_12: 0 + - m_start_GlobalMaskDistanceM_13: 0 + - m_start_GlobalMaskDistanceM_14: 0 + - m_start_GlobalMaskDistanceM_15: 0 + - m_start_GlobalMaskDistanceM_2: 0 + - m_start_GlobalMaskDistanceM_3: 0 + - m_start_GlobalMaskDistanceM_4: 0 + - m_start_GlobalMaskDistanceM_5: 0 + - m_start_GlobalMaskDistanceM_6: 0 + - m_start_GlobalMaskDistanceM_7: 0 + - m_start_GlobalMaskDistanceM_8: 0 + - m_start_GlobalMaskDistanceM_9: 0 + - m_start_GlobalMaskModifiers: 0 + - m_start_GlobalMaskModifiersBackface: 0 + - m_start_GlobalMaskModifiersCamera: 0 + - m_start_GlobalMaskModifiersDistance: 0 + - m_start_GlobalMaskModifiersMirror: 0 + - m_start_GlobalMaskOptions: 0 + - m_start_GlobalMaskTextures: 0 + - m_start_GlobalMaskVertexColors: 0 + - m_start_GlobalThemeColor0: 0 + - m_start_GlobalThemeColor1: 0 + - m_start_GlobalThemeColor2: 0 + - m_start_GlobalThemeColor3: 0 + - m_start_GlobalThemes: 0 + - m_start_LTCGI: 0 + - m_start_MainVertexColors: 0 + - m_start_Matcap2: 0 + - m_start_Matcap3: 0 + - m_start_Matcap4: 0 + - m_start_OutlineAudioLink: 0 + - m_start_OutlineStencil: 0 + - m_start_OutlineStencilPassBackOptions: 0 + - m_start_OutlineStencilPassFrontOptions: 0 + - m_start_PPAnimations: 0 + - m_start_PathAudioLink: 0 + - m_start_PoiGlobalCategory: 0 + - m_start_PoiLightData: 0 + - m_start_PoiPostProcessingCategory: 0 + - m_start_PoiShading: 0 + - m_start_PoiUVCategory: 0 + - m_start_RGBMask: 0 + - m_start_Rim2AudioLink: 0 + - m_start_RimAudioLink: 0 + - m_start_SphericalDissolve: 0 + - m_start_StencilPassBackOptions: 0 + - m_start_StencilPassFrontOptions: 0 + - m_start_StencilPassOptions: 0 + - m_start_Stochastic: 0 + - m_start_Text: 0 + - m_start_TextFPS: 0 + - m_start_TextInstanceTime: 0 + - m_start_TextNumeric: 0 + - m_start_TextPosition: 0 + - m_start_TruchetAudioLink: 0 + - m_start_UVTileDissolve: 0 + - m_start_Uzumore: 0 + - m_start_VideoSettings: 0 + - m_start_VoronoiAudioLink: 0 + - m_start_WorldAOBlocker: 0 + - m_start_alphaBlending: 0 + - m_start_audioLink: 0 + - m_start_audioLinkOverrides: 0 + - m_start_backFace: 0 + - m_start_backlight: 0 + - m_start_bakedLighting: 0 + - m_start_blending: 0 + - m_start_brdf: 0 + - m_start_clearCoat: 0 + - m_start_clearcoatadvanced: 0 + - m_start_clearcoatglobalmask: 0 + - m_start_depthFX: 0 + - m_start_depthRimLightOptions: 0 + - m_start_dissolve: 0 + - m_start_dissolveHueShift: 0 + - m_start_emission1Options: 0 + - m_start_emission2Options: 0 + - m_start_emission3Options: 0 + - m_start_emissionOptions: 1 + - m_start_flipBook: 0 + - m_start_glitter: 0 + - m_start_internalparallax: 0 + - m_start_matcap: 0 + - m_start_mirrorOptions: 0 + - m_start_normalCorrect: 0 + - m_start_outlineAlphaBlending: 0 + - m_start_outlineBlending: 0 + - m_start_parallax: 0 + - m_start_pathing: 0 + - m_start_pen_autoConfig: 0 + - m_start_poiSSAO: 0 + - m_start_pointToPoint: 0 + - m_start_postprocess: 0 + - m_start_raliv: 0 + - m_start_ralivAdvanced: 0 + - m_start_ralivOriface: 0 + - m_start_ralivPenetrator: 0 + - m_start_reflectionRim: 0 + - m_start_rim2LightOptions: 0 + - m_start_rimLight1Options: 0 + - m_start_stylizedSpec: 0 + - m_start_subsurfaceScattering: 0 + - m_start_tps_penetrator: 0 + - m_start_truchet: 0 + - m_start_udimdiscardOptions: 0 + - m_start_udimfacediscardOptions: 0 + - m_start_uvDistortion: 0 + - m_start_uvLocalWorld: 0 + - m_start_uvPanosphere: 0 + - m_start_uvPolar: 0 + - m_start_vertexGlitching: 0 + - m_start_vertexLookAt: 0 + - m_start_vertexManipulation: 0 + - m_start_videoEffects: 0 + - m_start_voronoi: 0 + - m_start_voronoiRandom: 0 + - m_thirdpartyCategory: 0 + - m_vertexCategory: 0 + - s_end_ALAlpha: 0 + - s_end_ALDecalAudioModsOptions: 0 + - s_end_ALDecalBand: 0 + - s_end_ALDecalColorsBlendingOptions: 0 + - s_end_ALDecalShapeClipOptions: 0 + - s_end_ALDecalVolumeOptions: 0 + - s_end_ALSpectrumMotion: 0 + - s_end_ALVertexGlitching: 0 + - s_end_ALVertexHeight: 0 + - s_end_ALVertexLookAtAL: 0 + - s_end_AlphaAdvanced: 0 + - s_end_AlphaAngular: 0 + - s_end_AlphaDistanceFade: 0 + - s_end_AlphaDithering: 0 + - s_end_AlphaFresnel: 0 + - s_end_AlphaToCoverage: 0 + - s_end_AnisoBottomLayer: 0 + - s_end_AnisoTopLayer: 1 + - s_end_AudioLinkBandOverrides: 0 + - s_end_BRDFTPSMaskGroup: 0 + - s_end_BackFaceHueShift: 0 + - s_end_BackfaceMods: 0 + - s_end_CCopt: 1 + - s_end_ClearCoatTPSMaskGroup: 0 + - s_end_ColorAdjustColorGrading: 0 + - s_end_ContinuousRotation: 0 + - s_end_CubeMapColorAdjust: 0 + - s_end_CubeMapMasking: 0 + - s_end_Decal0ChannelSeparation: 0 + - s_end_Decal0GlobalMasking: 0 + - s_end_Decal0HueShift: 0 + - s_end_Decal0Video: 0 + - s_end_Decal1ChannelSeparation: 0 + - s_end_Decal1GlobalMasking: 0 + - s_end_Decal1HueShift: 0 + - s_end_Decal1Video: 0 + - s_end_Decal2ChannelSeparation: 0 + - s_end_Decal2GlobalMasking: 0 + - s_end_Decal2HueShift: 0 + - s_end_Decal2Video: 0 + - s_end_Decal3ChannelSeparation: 0 + - s_end_Decal3GlobalMasking: 0 + - s_end_Decal3HueShift: 0 + - s_end_Decal3Video: 0 + - s_end_DecalTPSMaskGroup: 0 + - s_end_DepthAlpha: 0 + - s_end_DepthFXColorEmission: 0 + - s_end_DetailNormal: 0 + - s_end_DetailTexture: 0 + - s_end_DissolveAudioLink: 0 + - s_end_DissolvedMenu: 0 + - s_end_EdgeMenu: 0 + - s_end_EmissionAL0Add: 0 + - s_end_EmissionAL0COut: 0 + - s_end_EmissionAL0Multiply: 0 + - s_end_EmissionAL1Add: 0 + - s_end_EmissionAL1COut: 0 + - s_end_EmissionAL1Multiply: 0 + - s_end_EmissionAL2Add: 0 + - s_end_EmissionAL2COut: 0 + - s_end_EmissionAL2Multiply: 0 + - s_end_EmissionAL3Add: 0 + - s_end_EmissionAL3COut: 0 + - s_end_EmissionAL3Multiply: 0 + - s_end_EmissionBlinking0: 0 + - s_end_EmissionBlinking1: 0 + - s_end_EmissionBlinking2: 0 + - s_end_EmissionBlinking3: 0 + - s_end_EmissionCenterOut0: 0 + - s_end_EmissionCenterOut1: 0 + - s_end_EmissionCenterOut2: 0 + - s_end_EmissionCenterOut3: 0 + - s_end_EmissionHueShift0: 0 + - s_end_EmissionHueShift1: 0 + - s_end_EmissionHueShift2: 0 + - s_end_EmissionHueShift3: 0 + - s_end_EmissionLightBased0: 0 + - s_end_EmissionLightBased1: 0 + - s_end_EmissionLightBased2: 0 + - s_end_EmissionLightBased3: 0 + - s_end_FixedRimBlending: 0 + - s_end_FixedRimColor: 0 + - s_end_FixedRimShapeControl: 0 + - s_end_FlipbookCrossfade: 0 + - s_end_FlipbookHueShift: 0 + - s_end_FlipbookManualFrameControl: 0 + - s_end_FlipbookStartAndEnd: 0 + - s_end_GlitterAudioLink: 0 + - s_end_GlitterColorAndShape: 0 + - s_end_GlitterHueShiftSection: 0 + - s_end_GlitterMask: 0 + - s_end_GlitterPositionSize: 0 + - s_end_GlitterRotationSection: 0 + - s_end_GlitterSparkleControl: 0 + - s_end_GlobalMaskOptionsForceToggles: 0 + - s_end_GlobalMaskOptionsMinMaxSliders: 0 + - s_end_GlobalMaskOptionsSliders: 0 + - s_end_LightDataAddPass: 1 + - s_end_LightDataBasePass: 1 + - s_end_LightDataDebug: 0 + - s_end_LightDataSDF: 1 + - s_end_LocalRotation: 0 + - s_end_LocalTranslation: 0 + - s_end_LookAtAlphaMask: 0 + - s_end_LookAtBlueMask: 0 + - s_end_LookAtGreenMask: 0 + - s_end_LookAtRedMask: 0 + - s_end_LookAtVisibility: 0 + - s_end_MainHueShift: 0 + - s_end_MainHueShiftAL: 0 + - s_end_MainHueShiftGlobalMask: 0 + - s_end_MaskingMenu: 0 + - s_end_Matcap0AudioLink: 0 + - s_end_Matcap0Blending: 0 + - s_end_Matcap0Masking: 0 + - s_end_Matcap1AudioLink: 0 + - s_end_Matcap1Blending: 0 + - s_end_Matcap1HueShift: 0 + - s_end_Matcap1Masking: 0 + - s_end_Matcap1Normal: 0 + - s_end_Matcap1Smoothness: 0 + - s_end_Matcap2AudioLink: 0 + - s_end_Matcap2Blending: 0 + - s_end_Matcap2HueShift: 0 + - s_end_Matcap2Masking: 0 + - s_end_Matcap2Normal: 0 + - s_end_Matcap2Smoothness: 0 + - s_end_Matcap2TPSMaskGroup: 0 + - s_end_Matcap3AudioLink: 0 + - s_end_Matcap3Blending: 0 + - s_end_Matcap3HueShift: 0 + - s_end_Matcap3Masking: 0 + - s_end_Matcap3Normal: 0 + - s_end_Matcap3Smoothness: 0 + - s_end_Matcap3TPSMaskGroup: 0 + - s_end_Matcap4TPSMaskGroup: 0 + - s_end_MatcapHueShift: 0 + - s_end_MatcapNormal: 0 + - s_end_MatcapSmoothness: 0 + - s_end_MatcapTPSMaskGroup: 0 + - s_end_MirrorTexture: 0 + - s_end_MultilayerMath1stLayer: 1 + - s_end_MultilayerMath2ndLayer: 0 + - s_end_MultilayerMath3rdLayer: 0 + - s_end_MultilayerMathBorder: 1 + - s_end_MultilayerMathBorderMap: 1 + - s_end_MultilayerShadowMap: 0 + - s_end_OutlineAlphaDistanceFade: 0 + - s_end_OutlineColorAdjust: 0 + - s_end_OutlineFixedSize: 0 + - s_end_OutlineLighting: 0 + - s_end_OutlineRenderingOptions: 0 + - s_end_OutlineZOffset: 0 + - s_end_PBRSecondSpecular: 0 + - s_end_PBRSplitMaskSample: 0 + - s_end_ParallaxInternalHueShift: 0 + - s_end_ParallaxInternalLayerColoring: 0 + - s_end_ParallaxInternalLayerControls: 0 + - s_end_PathAppearance: 0 + - s_end_PathColors: 0 + - s_end_PathRemapping: 0 + - s_end_PathSourceDirections: 0 + - s_end_PathTypes: 0 + - s_end_Positioning: 0 + - s_end_RGBAlpha: 0 + - s_end_RGBBlue: 0 + - s_end_RGBGreen: 0 + - s_end_RGBRed: 0 + - s_end_RimLight0Color: 0 + - s_end_RimLight0GlobalMasking: 0 + - s_end_RimLight0HueShift: 0 + - s_end_RimLight0LightDirMask: 0 + - s_end_RimLight0ShapeControls: 0 + - s_end_RimLight1Color: 0 + - s_end_RimLight1GlobalMasking: 0 + - s_end_RimLight1HueShift: 0 + - s_end_RimLight1LightDirMask: 0 + - s_end_RimLight1ShapeControls: 0 + - s_end_RimLight2DirectionMask: 0 + - s_end_RimLightDirectionMask: 0 + - s_end_SSAOAdvanced: 0 + - s_end_SSAOColorAndMasking: 0 + - s_end_ScrollingEmission0: 0 + - s_end_ScrollingEmission1: 0 + - s_end_ScrollingEmission2: 0 + - s_end_ScrollingEmission3: 0 + - s_end_ShadingAddPass: 0 + - s_end_ShadingGlobalMask: 0 + - s_end_StylizedReflectionLilEnviroReflections: 1 + - s_end_StylizedReflectionLilSpecular: 1 + - s_end_StylizedReflectionMode0: 1 + - s_end_StylizedReflectionMode1: 1 + - s_end_StylizedSpecularAdvanced: 0 + - s_end_StylizedSpecularLayer0: 0 + - s_end_StylizedSpecularLayer1: 0 + - s_end_TimingOptions: 0 + - s_end_TransitionMenu: 0 + - s_end_UVTileDissolveRow0: 0 + - s_end_UVTileDissolveRow1: 0 + - s_end_UVTileDissolveRow2: 0 + - s_end_UVTileDissolveRow3: 0 + - s_end_VertAL: 0 + - s_end_VertexBarrelMode: 0 + - s_end_VertexColors: 0 + - s_end_VertexGlitchMirror: 0 + - s_end_VertexGlitchTexture: 0 + - s_end_VertexManipulationHeight: 0 + - s_end_VertexRoundingAL: 0 + - s_end_VertexScale: 0 + - s_end_VertexSphereMode: 0 + - s_end_VertexTornadoMode: 0 + - s_end_VertexWind: 0 + - s_end_WorldTranslation: 0 + - s_end_brdfadvanced: 0 + - s_end_decal1_position: 0 + - s_end_decal2_position: 0 + - s_end_decal3_position: 0 + - s_end_decal_position: 0 + - s_end_deliot: 0 + - s_end_fogOpt: 1 + - s_end_ggxanisotropics: 0 + - s_end_heightFogOpt: 1 + - s_end_hextile: 0 + - s_end_liltoon_rim2_lightdir: 0 + - s_end_liltoon_rim_lightdir: 0 + - s_end_matcap1ApplyToAlpha: 0 + - s_end_matcap2ApplyToAlpha: 0 + - s_end_matcap3ApplyToAlpha: 0 + - s_end_matcapApplyToAlpha: 0 + - s_end_outline_al_color: 0 + - s_end_parallaxAdvanced: 0 + - s_end_vertexRounding: 0 + - s_start_ALAlpha: 0 + - s_start_ALDecalAudioModsOptions: 1 + - s_start_ALDecalBandOptions: 1 + - s_start_ALDecalColorsBlendingOptions: 1 + - s_start_ALDecalShapeClipOptions: 1 + - s_start_ALDecalVolumeOptions: 1 + - s_start_ALSpectrumMotion: 0 + - s_start_ALVertexGlitching: 0 + - s_start_ALVertexHeight: 0 + - s_start_ALVertexLookAtAL: 0 + - s_start_AlphaAdvanced: 0 + - s_start_AlphaAngular: 0 + - s_start_AlphaDistanceFade: 0 + - s_start_AlphaDithering: 0 + - s_start_AlphaFresnel: 0 + - s_start_AlphaToCoverage: 0 + - s_start_AnisoBottomLayer: 0 + - s_start_AnisoTopLayer: 1 + - s_start_AudioLinkBandOverrides: 1 + - s_start_BRDFTPSMaskGroup: 0 + - s_start_BackFaceHueShift: 0 + - s_start_BackfaceMods: 0 + - s_start_CCopt: 1 + - s_start_ClearCoatTPSMaskGroup: 0 + - s_start_ColorAdjustColorGrading: 0 + - s_start_ContinuousRotation: 0 + - s_start_CubeMapColorAdjust: 0 + - s_start_CubeMapMasking: 1 + - s_start_Decal0ChannelSeparation: 0 + - s_start_Decal0GlobalMasking: 0 + - s_start_Decal0HueShift: 0 + - s_start_Decal0Video: 0 + - s_start_Decal1ChannelSeparation: 0 + - s_start_Decal1GlobalMasking: 0 + - s_start_Decal1HueShift: 0 + - s_start_Decal1Video: 0 + - s_start_Decal2ChannelSeparation: 0 + - s_start_Decal2GlobalMasking: 0 + - s_start_Decal2HueShift: 0 + - s_start_Decal2Video: 0 + - s_start_Decal3ChannelSeparation: 0 + - s_start_Decal3GlobalMasking: 0 + - s_start_Decal3HueShift: 0 + - s_start_Decal3Video: 0 + - s_start_DecalTPSMaskGroup: 0 + - s_start_DepthAlpha: 0 + - s_start_DepthFXColorEmission: 0 + - s_start_DetailNormal: 0 + - s_start_DetailTexture: 0 + - s_start_DissolveAudioLink: 0 + - s_start_DissolvedMenu: 0 + - s_start_EdgeMenu: 0 + - s_start_EmissionAL0Add: 0 + - s_start_EmissionAL0COut: 0 + - s_start_EmissionAL0Multiply: 0 + - s_start_EmissionAL1Add: 0 + - s_start_EmissionAL1COut: 0 + - s_start_EmissionAL1Multiply: 0 + - s_start_EmissionAL2Add: 0 + - s_start_EmissionAL2COut: 0 + - s_start_EmissionAL2Multiply: 0 + - s_start_EmissionAL3Add: 0 + - s_start_EmissionAL3COut: 0 + - s_start_EmissionAL3Multiply: 0 + - s_start_EmissionBlinking0: 1 + - s_start_EmissionBlinking1: 0 + - s_start_EmissionBlinking2: 0 + - s_start_EmissionBlinking3: 0 + - s_start_EmissionCenterOut0: 0 + - s_start_EmissionCenterOut1: 0 + - s_start_EmissionCenterOut2: 0 + - s_start_EmissionCenterOut3: 0 + - s_start_EmissionHueShift0: 0 + - s_start_EmissionHueShift1: 0 + - s_start_EmissionHueShift2: 0 + - s_start_EmissionHueShift3: 0 + - s_start_EmissionLightBased0: 0 + - s_start_EmissionLightBased1: 0 + - s_start_EmissionLightBased2: 0 + - s_start_EmissionLightBased3: 0 + - s_start_FixedRimBlending: 1 + - s_start_FixedRimColor: 1 + - s_start_FixedRimShapeControl: 1 + - s_start_FlipbookCrossfade: 0 + - s_start_FlipbookHueShift: 0 + - s_start_FlipbookManualFrameControl: 0 + - s_start_FlipbookStartAndEnd: 0 + - s_start_GlitterAudioLink: 0 + - s_start_GlitterColorAndShape: 1 + - s_start_GlitterHueShiftSection: 0 + - s_start_GlitterMask: 0 + - s_start_GlitterPositionSize: 0 + - s_start_GlitterRotationSection: 0 + - s_start_GlitterSparkleControl: 1 + - s_start_GlobalMaskOptionsForceToggles: 0 + - s_start_GlobalMaskOptionsMinMaxSliders: 0 + - s_start_GlobalMaskOptionsSliders: 0 + - s_start_LightDataAddPass: 1 + - s_start_LightDataBasePass: 1 + - s_start_LightDataDebug: 0 + - s_start_LightDataSDF: 1 + - s_start_LocalRotation: 0 + - s_start_LocalTranslation: 0 + - s_start_LookAtAlphaMask: 0 + - s_start_LookAtBlueMask: 0 + - s_start_LookAtGreenMask: 0 + - s_start_LookAtRedMask: 1 + - s_start_LookAtVisibility: 0 + - s_start_MainHueShift: 1 + - s_start_MainHueShiftAL: 0 + - s_start_MainHueShiftGlobalMask: 0 + - s_start_MaskingMenu: 0 + - s_start_Matcap0AudioLink: 0 + - s_start_Matcap0Blending: 1 + - s_start_Matcap0Masking: 1 + - s_start_Matcap1AudioLink: 0 + - s_start_Matcap1Blending: 1 + - s_start_Matcap1HueShift: 0 + - s_start_Matcap1Masking: 1 + - s_start_Matcap1Normal: 0 + - s_start_Matcap1Smoothness: 0 + - s_start_Matcap2AudioLink: 0 + - s_start_Matcap2Blending: 1 + - s_start_Matcap2HueShift: 0 + - s_start_Matcap2Masking: 1 + - s_start_Matcap2Normal: 0 + - s_start_Matcap2Smoothness: 0 + - s_start_Matcap2TPSMaskGroup: 0 + - s_start_Matcap3AudioLink: 0 + - s_start_Matcap3Blending: 1 + - s_start_Matcap3HueShift: 0 + - s_start_Matcap3Masking: 1 + - s_start_Matcap3Normal: 0 + - s_start_Matcap3Smoothness: 0 + - s_start_Matcap3TPSMaskGroup: 0 + - s_start_Matcap4TPSMaskGroup: 0 + - s_start_MatcapHueShift: 0 + - s_start_MatcapNormal: 0 + - s_start_MatcapSmoothness: 0 + - s_start_MatcapTPSMaskGroup: 0 + - s_start_MirrorTexture: 1 + - s_start_MultilayerMath1stLayer: 1 + - s_start_MultilayerMath2ndLayer: 0 + - s_start_MultilayerMath3rdLayer: 0 + - s_start_MultilayerMathBorder: 1 + - s_start_MultilayerMathBorderMap: 0 + - s_start_MultilayerShadowMap: 0 + - s_start_OutlineAlphaDistanceFade: 0 + - s_start_OutlineColorAdjust: 0 + - s_start_OutlineFixedSize: 0 + - s_start_OutlineLighting: 0 + - s_start_OutlineRenderingOptions: 0 + - s_start_OutlineZOffset: 0 + - s_start_PBRSecondSpecular: 0 + - s_start_PBRSplitMaskSample: 0 + - s_start_ParallaxInternalHueShift: 0 + - s_start_ParallaxInternalLayerColoring: 1 + - s_start_ParallaxInternalLayerControls: 1 + - s_start_PathAppearance: 1 + - s_start_PathColors: 1 + - s_start_PathRemapping: 1 + - s_start_PathSourceDirections: 1 + - s_start_PathTypes: 1 + - s_start_Positioning: 1 + - s_start_RGBAlpha: 0 + - s_start_RGBBlue: 0 + - s_start_RGBGreen: 0 + - s_start_RGBRed: 0 + - s_start_RimLight0Color: 1 + - s_start_RimLight0GlobalMasking: 0 + - s_start_RimLight0HueShift: 0 + - s_start_RimLight0LightDirMask: 0 + - s_start_RimLight0ShapeControls: 1 + - s_start_RimLight1Color: 1 + - s_start_RimLight1GlobalMasking: 0 + - s_start_RimLight1HueShift: 0 + - s_start_RimLight1LightDirMask: 0 + - s_start_RimLight1ShapeControls: 1 + - s_start_RimLight2DirectionMask: 0 + - s_start_RimLightDirectionMask: 0 + - s_start_SSAOAdvanced: 0 + - s_start_SSAOColorAndMasking: 1 + - s_start_ScrollingEmission0: 0 + - s_start_ScrollingEmission1: 0 + - s_start_ScrollingEmission2: 0 + - s_start_ScrollingEmission3: 0 + - s_start_ShadingAddPass: 0 + - s_start_ShadingGlobalMask: 0 + - s_start_StylizedReflectionLilEnviroReflections: 1 + - s_start_StylizedReflectionLilSpecular: 1 + - s_start_StylizedReflectionMode0: 1 + - s_start_StylizedReflectionMode1: 1 + - s_start_StylizedSpecularAdvanced: 0 + - s_start_StylizedSpecularLayer0: 1 + - s_start_StylizedSpecularLayer1: 1 + - s_start_TimingOptions: 1 + - s_start_TransitionMenu: 0 + - s_start_UVTileDissolveRow0: 0 + - s_start_UVTileDissolveRow1: 0 + - s_start_UVTileDissolveRow2: 0 + - s_start_UVTileDissolveRow3: 0 + - s_start_VertAL: 0 + - s_start_VertexBarrelMode: 0 + - s_start_VertexColors: 0 + - s_start_VertexGlitchMirror: 0 + - s_start_VertexGlitchTexture: 1 + - s_start_VertexManipulationHeight: 1 + - s_start_VertexScale: 0 + - s_start_VertexSphereMode: 0 + - s_start_VertexTornadoMode: 0 + - s_start_VertexWind: 0 + - s_start_WorldTranslation: 0 + - s_start_brdfadvanced: 0 + - s_start_decal1_position: 1 + - s_start_decal2_position: 1 + - s_start_decal3_position: 1 + - s_start_decal_position: 1 + - s_start_deliot: 0 + - s_start_fogOpt: 1 + - s_start_ggxanisotropics: 0 + - s_start_heightFogOpt: 1 + - s_start_hextile: 0 + - s_start_liltoon_rim2_lightdir: 0 + - s_start_liltoon_rim_lightdir: 0 + - s_start_matcap1ApplyToAlpha: 0 + - s_start_matcap2ApplyToAlpha: 0 + - s_start_matcap3ApplyToAlpha: 0 + - s_start_matcapApplyToAlpha: 0 + - s_start_outline_al_color: 0 + - s_start_parallaxAdvanced: 0 + - s_start_vertexRounding: 0 + - s_start_vertexRoundingAL: 0 + - shader_is_using_thry_editor: 0 + - shader_locale: 0 + - shader_master_label: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _1st_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALDecalVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALDecalVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _ALDecaldCircleDimensions: {r: 0, g: 1, b: 0, a: 1} + - _ALUVPosition: {r: 0.5, g: 0.5, b: 1, a: 1} + - _ALUVScale: {r: 1, g: 1, b: 1, a: 1} + - _ALVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _AlphaAudioLinkAddRange: {r: 0, g: 0, b: 0, a: 1} + - _AlphaColor: {r: 1, g: 1, b: 1, a: 1} + - _AlphaMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _AlphaTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _AngleForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _Aniso0Tint: {r: 1, g: 1, b: 1, a: 1} + - _Aniso1Tint: {r: 1, g: 1, b: 1, a: 1} + - _AnisoColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _AnisotropyMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Ap_Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Ap_RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkBandOverrideSliders: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveDetail: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission0CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission1CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission2CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission3CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookFrame: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookScale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkOutlineColorMod: {r: 0, g: 1, b: 0, a: 0} + - _AudioLinkOutlineEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineSize: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkPathEmissionAddA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkRim2BrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2EmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2WidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimWidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiInnerEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiOuterEmission: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceColor: {r: 1, g: 1, b: 1, a: 1} + - _BackFaceMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BacklightColor: {r: 0.85, g: 0.8, b: 0.7, a: 1} + - _BacklightColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _BlackLightMasking0Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking1Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking2Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking3Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlueColor: {r: 1, g: 1, b: 1, a: 1} + - _BlueTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BumpMapPan: {r: 0, g: 0, b: 0, a: 0} + - _CenterOutDissolveDirection: {r: 0, g: 0, b: 1, a: 0} + - _ClearCoatMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _ClearCoatReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _ClearCoatSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _ClothMetallicSmoothnessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapColor: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotation: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotationPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalColor: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor1: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor2: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor3: {r: 1, g: 1, b: 1, a: 1} + - _DecalMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalPosition: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition1: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition2: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition3: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalScale: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale1: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale2: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale3: {r: 1, g: 1, b: 1, a: 0} + - _DecalSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset1: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset2: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset3: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DepthColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DepthRimColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DetailMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailNormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTexPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTint: {r: 1, g: 1, b: 1, a: 1} + - _DissolveDetailNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveEdgeColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveEndPoint: {r: 0, g: 1, b: 0, a: 0} + - _DissolveMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveNoiseTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveStartPoint: {r: 0, g: -1, b: 0, a: 0} + - _DissolveTextureColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveToTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrength1AudioLink: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrengthAudioLink: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL0Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL0StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL1Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL1StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL2Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL2StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL3Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL3StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor1: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor2: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor3: {r: 1, g: 1, b: 1, a: 1} + - _EmissionMap1Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMapPan: {r: 0.5, g: 0, b: 0, a: 0} + - _EmissionMask1Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _EmissiveScroll_Direction: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction1: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction2: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction3: {r: 0, g: -10, b: 0, a: 0} + - _FXProximityColorMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _FXProximityColorMinColor: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookColor: {r: 1, g: 1, b: 1, a: 1} + - _FlipbookCrossfadeRange: {r: 0.75, g: 1, b: 0, a: 1} + - _FlipbookMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookPanning: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _FlipbookSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookTexArrayPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALMaxBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALSizeAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterColor: {r: 1, g: 1, b: 1, a: 1} + - _GlitterColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSize: {r: 0.1, g: 0.5, b: 0, a: 1} + - _GlitterRandomRotationSpeed: {r: 0, g: 0, b: 0, a: 0} + - _GlitterUVPanning: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskMinMaxSlider_0: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_1: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_10: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_11: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_12: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_13: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_14: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_15: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_2: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_3: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_4: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_5: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_6: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_7: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_8: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_9: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskTexture0Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalThemeColor0: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor1: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor2: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor3: {r: 1, g: 1, b: 1, a: 1} + - _GreenColor: {r: 1, g: 1, b: 1, a: 1} + - _GreenTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _HeightMapPan: {r: 0, g: 0, b: 0, a: 0} + - _HeightmaskPan: {r: 0, g: 0, b: 0, a: 0} + - _HighColor: {r: 1, g: 1, b: 1, a: 1} + - _HighColor_TexPan: {r: 0, g: 0, b: 0, a: 0} + - _LTCGI_DiffuseColor: {r: 1, g: 1, b: 1, a: 1} + - _LTCGI_SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _LightDataSDFMapPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingAOMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingDetailShadowMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingForcedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingWrappedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightngForcedDirection: {r: 0, g: 0, b: 0, a: 1} + - _LineColor: {r: 1, g: 1, b: 1, a: 1} + - _LookAtAlphaDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtAlphaMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtBlueDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtBlueMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBluePivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBlueUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtGreenDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtGreenMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtRedMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _MainColorAdjustTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MainTexPan: {r: 0, g: 0, b: 0, a: 0} + - _MatCap2ndBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap3rdBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap4thBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCapBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap3MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap4MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Pan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapColor: {r: 1, g: 1, b: 1, a: 1} + - _MatcapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapPan: {r: 0, g: 0, b: 0, a: 0} + - _MirrorColor: {r: 1, g: 1, b: 1, a: 1} + - _MirrorTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _MochieSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _MultilayerMathBlurMapPan: {r: 0, g: 0, b: 0, a: 0} + - _NormalCorrectOrigin: {r: 0, g: 0.4, b: -0.025, a: 1} + - _OutlineDropShadowOffset: {r: 1, g: 0, b: 0, a: 0} + - _OutlineMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _OutlinePersonaDirection: {r: 1, g: 0, b: 0, a: 0} + - _OutlineTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _PBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _PPMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _PPRGB: {r: 1, g: 1, b: 1, a: 1} + - _PPTint: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ParallaxInternalMapPan: {r: 0, g: 0, b: 1, a: 1} + - _ParallaxInternalMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMinColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalPanDepthSpeed: {r: 0, g: 0, b: 1, a: 1} + - _PathALAutoCorrelatorRangeA: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeB: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeG: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeR: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALHistoryRangeA: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeB: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeG: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeR: {r: 0, g: 1, b: 0, a: 1} + - _PathColorA: {r: 1, g: 1, b: 1, a: 1} + - _PathColorB: {r: 1, g: 1, b: 1, a: 1} + - _PathColorG: {r: 1, g: 1, b: 1, a: 1} + - _PathColorR: {r: 1, g: 1, b: 1, a: 1} + - _PathEmissionStrength: {r: 0, g: 0, b: 0, a: 0} + - _PathGapLengths: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathOffset: {r: 0, g: 0, b: 0, a: 0} + - _PathRemapA: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapB: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapG: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapR: {r: 0, g: 1, b: 0, a: 1} + - _PathSegments: {r: 0, g: 0, b: 0, a: 0} + - _PathSoftness: {r: 1, g: 1, b: 1, a: 1} + - _PathSpeed: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathTime: {r: -999, g: -999, b: -999, a: -999} + - _PathWidth: {r: 0.03, g: 0.03, b: 0.03, a: 0.03} + - _PathingColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PathingMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PolarCenter: {r: 0.5, g: 0.5, b: 0, a: 0} + - _RGBAAlphaPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAAlphaPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAAlphaScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBABlueScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAGreenScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBARedPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBASmoothnessMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RedColor: {r: 1, g: 1, b: 1, a: 1} + - _RedTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _ReflectionColor: {r: 1, g: 1, b: 1, a: 1} + - _ReflectionCubeColor: {r: 0, g: 0, b: 0, a: 1} + - _RgbNormalAPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalBPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalGPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalRPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2Color: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _Rim2ColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2IndirColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2ShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _Rim2TexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimColor: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _RimColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimEnviroMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimIndirColor: {r: 1, g: 1, b: 1, a: 1} + - _RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _RimMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _RimTexPan: {r: 0, g: 0, b: 0, a: 0} + - _SDFForward: {r: 0, g: 0, b: 1, a: 0} + - _SDFLeft: {r: -1, g: 0, b: 0, a: 0} + - _SDFShadingTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOColor: {r: 0, g: 0, b: 0, a: 1} + - _SSAOColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOHSV: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaxDistanceFalloff: {r: 0.01, g: 0.1, b: 1, a: 1} + - _SSSColor: {r: 1, g: 0, b: 0, a: 1} + - _SSSThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_HighColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_Rim2LightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_RimLightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowAOShift: {r: 0, g: 1, b: 0, a: 1} + - _ShadowAOShift2: {r: 0, g: 1, b: 0, a: 1} + - _ShadowBorderColor: {r: 1, g: 0, b: 0, a: 1} + - _ShadowBorderMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowColor: {r: 0.7, g: 0.75, b: 0.85, a: 1} + - _ShadowColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowStrengthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SkinThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SphericalDissolveCenter: {r: 0, g: 0, b: 0, a: 1} + - _SssColorBleedAoWeights: {r: 0.4, g: 0.15, b: 0.13, a: 0} + - _SssTransmissionAbsorption: {r: -8, g: -40, b: -64, a: 0} + - _TPS_BuldgeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorForward: {r: 0, g: 0, b: 1, a: 0} + - _TPS_PenetratorRight: {r: 1, g: 0, b: 0, a: 0} + - _TPS_PenetratorScale: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorUp: {r: 0, g: 1, b: 0, a: 0} + - _TPS_SqueezeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSScale: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericColor: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericScale: {r: 1, g: 1, b: 1, a: 1} + - _TextPositionColor: {r: 1, g: 0, b: 1, a: 1} + - _TextPositionOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionScale: {r: 1, g: 1, b: 1, a: 1} + - _TextTimeColor: {r: 1, g: 0, b: 1, a: 1} + - _TextTimeOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextTimePadding: {r: 0, g: 0, b: 0, a: 0} + - _TextTimeScale: {r: 1, g: 1, b: 1, a: 1} + - _TruchetALAlpha: {r: 0, g: 0, b: 0, a: 0} + - _TruchetALEmission: {r: 0, g: 0, b: 0, a: 0} + - _TruchetChronoPanSpeed: {r: 0, g: 0, b: 0, a: 0} + - _TruchetColor: {r: 1, g: 1, b: 1, a: 1} + - _TruchetMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _TruchetPanOffset: {r: 0, g: 0, b: 0, a: 0} + - _TruchetTexPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexBasicsMaskUVPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalRotationAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalRotationCTALSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalScaleALMax: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalScaleALMin: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexLookAtAlphaAudiolink: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationHeightAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationHeightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationLocalRotation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalRotationSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalScale: {r: 1, g: 1, b: 1, a: 1} + - _VertexManipulationLocalTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationWorldTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexRoundingRangeAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexSpectrumOffsetMax: {r: 0, g: 0.1, b: 0, a: 1} + - _VertexSpectrumOffsetMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexSphereCenter: {r: 0, g: 0, b: 0, a: 1} + - _VertexWindDetailDirection: {r: 0, g: 1, b: 0, a: 0} + - _VertexWindPrimaryDirection: {r: 1, g: 0, b: 0, a: 0} + - _VertexWorldTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexWorldTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VideoMaskTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _VideoResolution: {r: 1280, g: 720, b: 0, a: 0} + - _VoronoiGradient: {r: 0, g: 0.5, b: 0, a: 0} + - _VoronoiInnerColor: {r: 1, g: 1, b: 1, a: 1} + - _VoronoiMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiOuterColor: {r: 0, g: 0, b: 0, a: 1} + - _VoronoiRandomMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiRandomMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiSpeed: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Quiz/Materials/DownCount/Floor.mat.meta b/Assets/Quiz/Materials/DownCount/Floor.mat.meta new file mode 100644 index 0000000..1191bbd --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/Floor.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 79104b7c72559ae419b9b5c0aaf3f627 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/DownCount/OptimizedShaders.meta b/Assets/Quiz/Materials/DownCount/OptimizedShaders.meta new file mode 100644 index 0000000..2080187 --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/OptimizedShaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c39ef70215844d6458746aec5f8b7257 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/DownCount/OptimizedShaders/Clock.meta b/Assets/Quiz/Materials/DownCount/OptimizedShaders/Clock.meta new file mode 100644 index 0000000..eb3d6ee --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/OptimizedShaders/Clock.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 658a0e53b96261444a552934a01f4f61 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/DownCount/OptimizedShaders/Clock/Poiyomi Pro World.shader b/Assets/Quiz/Materials/DownCount/OptimizedShaders/Clock/Poiyomi Pro World.shader new file mode 100644 index 0000000..06722a0 --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/OptimizedShaders/Clock/Poiyomi Pro World.shader @@ -0,0 +1,12782 @@ +Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/5c816e03b652658498610330ae7c0b66" +{ + Properties + { + [HideInInspector] shader_master_label ("Poiyomi 9.3.48", Float) = 0 + [HideInInspector] shader_is_using_thry_editor ("", Float) = 0 + [HideInInspector] shader_locale ("0db0b86376c3dca4b9a6828ef8615fe0", Float) = 0 + [HideInInspector] footer_website ("{texture:{name:icon-poilogo,height:24},action:{type:URL,data:https://www.poiyomi.com},hover:WEBSITE}", Float) = 0 + [HideInInspector] footer_discord ("{texture:{name:icon-discord,height:24},action:{type:URL,data:https://discord.gg/Ays52PY},hover:DISCORD}", Float) = 0 + [HideInInspector] footer_patreon ("{texture:{name:icon-patreon-new,height:24},action:{type:URL,data:https://www.patreon.com/poiyomi},hover:PATREON}", Float) = 0 + [HideInInspector] footer_youtube ("{texture:{name:icon-youtube,height:24},action:{type:URL,data:https://www.youtube.com/poiyomi},hover:YOUTUBE}", Float) = 0 + [HideInInspector] footer_github ("{texture:{name:icon-github,height:24},action:{type:URL,data:https://github.com/poiyomi/PoiyomiToonShader},hover:GITHUB}", Float) = 0 + [HideInInspector] footer_bluesky ("{texture:{name:icon-bluesky,height:24},action:{type:URL,data:https://bsky.app/profile/poiyomi.com},hover:BLUESKY}", Float) = 0 + [HideInInspector] footer_twitter ("{texture:{name:icon-twitter,height:24},action:{type:URL,data:https://x.com/poiyomi},hover:X}", Float) = 0 + [Header(POIYOMI SHADER UI FAILED TO LOAD)] + [Header(. This is caused by scripts failing to compile. It can be fixed.)] + [Header(. The inspector will look broken and will not work properly until fixed.)] + [Header(. Please check your console for script errors.)] + [Header(. You can filter by errors in the console window.)] + [Header(. Often the topmost error points to the erroring script.)] + [Space(30)][Header(Common Error Causes)] + [Header(. Installing multiple Poiyomi Shader packages)] + [Header(. Make sure to delete the Poiyomi shader folder before you update Poiyomi.)] + [Header(. If a package came with Poiyomi this is bad practice and can cause issues.)] + [Header(. Delete the package and import it without any Poiyomi components.)] + [Header(. Bad VRCSDK installation (e.g. Both VCC and Standalone))] + [Header(. Delete the VRCSDK Folder in Assets if you are using the VCC.)] + [Header(. Avoid using third party SDKs. They can cause incompatibility.)] + [Header(. Script Errors in other scripts)] + [Header(. Outdated tools or prefabs can cause this.)] + [Header(. Update things that are throwing errors or move them outside the project.)] + [Space(30)][Header(Visit Our Discord to Ask For Help)] + [Space(5)]_ShaderUIWarning0 (" → discord.gg/poiyomi ← We can help you get it fixed! --{condition_showS:(0==1)}", Int) = -0 + [Space(1400)][Header(POIYOMI SHADER UI FAILED TO LOAD)] + _ShaderUIWarning1 ("Please scroll up for more information! --{condition_showS:(0==1)}", Int) = -0 + [HideInInspector] _ForgotToLockMaterial (";;YOU_FORGOT_TO_LOCK_THIS_MATERIAL;", Int) = 1 + [ThryShaderOptimizerLockButton] _ShaderOptimizerEnabled ("", Int) = 1 + [HideInInspector] GeometryShader_Enabled("GEOMETRY SHADER ENABLED", Float) = 1 + [HideInInspector] Tessellation_Enabled("TESSELLATION ENABLED", Float) = 1 + [ThryWideEnum(Opaque, 0, Cutout, 1, TransClipping, 9, Fade, 2, Transparent, 3, Additive, 4, Soft Additive, 5, Multiplicative, 6, 2x Multiplicative, 7)]_Mode("Rendering Preset--{on_value_actions:[ + {value:0,actions:[{type:SET_PROPERTY,data:render_queue=2000},{type:SET_PROPERTY,data:_AlphaForceOpaque=1}, {type:SET_PROPERTY,data:render_type=Opaque}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=0}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:1,actions:[{type:SET_PROPERTY,data:render_queue=2450},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=.5}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:9,actions:[{type:SET_PROPERTY,data:render_queue=2460},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.01}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:2,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.002}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:3,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=1}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:4,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:5,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=4}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=4}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=4}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:6,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:7,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=3}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=3}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]} + }]}]}", Int) = 0 + [HideInInspector] m_mainCategory ("Color & Normals--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/main},hover:Documentation}}", Float) = 0 + _Color ("Color & Alpha--{reference_property:_ColorThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _ColorThemeIndex ("", Int) = 0 + [sRGBWarning(true)]_MainTex ("Texture--{reference_properties:[_MainTexPan, _MainTexUV, _MainPixelMode, _MainTexStochastic, _MainIgnoreTexAlpha]}", 2D) = "white" { } + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _MainTexUV ("UV", Int) = 0 + [HideInInspector][Vector2]_MainTexPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ToggleUI]_MainPixelMode ("Pixel Mode", Float) = 0 + [HideInInspector][ToggleUI]_MainTexStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][ToggleUI]_MainIgnoreTexAlpha ("Ignore Alpha", Float) = 0 + [Normal]_BumpMap ("Normal Map--{reference_properties:[_BumpMapPan, _BumpMapUV, _BumpScale, _BumpMapStochastic]}", 2D) = "bump" { } + [HideInInspector][Vector2]_BumpMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _BumpMapUV ("UV", Int) = 0 + [HideInInspector]_BumpScale ("Intensity", Range(0, 10)) = 1 + [HideInInspector][ToggleUI]_BumpMapStochastic ("Stochastic Sampling", Float) = 0 + [sRGBWarning]_AlphaMask ("Alpha Map--{reference_properties:[_AlphaMaskPan, _AlphaMaskUV, _AlphaMaskInvert, _MainAlphaMaskMode, _AlphaMaskBlendStrength, _AlphaMaskValue], alts:[_AlphaMap]}", 2D) = "white" { } + [HideInInspector][Vector2]_AlphaMaskPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _AlphaMaskUV ("UV", Int) = 0 + [HideInInspector][ThryWideEnum(Off, 0, Replace, 1, Multiply, 2, Add, 3, Subtract, 4)]_MainAlphaMaskMode ("Blend Mode", Int) = 2 + [HideInInspector]_AlphaMaskBlendStrength ("Blend Strength", Float) = 1 + [HideInInspector]_AlphaMaskValue ("Blend Offset", Float) = 0 + [HideInInspector][ToggleUI]_AlphaMaskInvert ("Invert", Float) = 0 + _Cutoff ("Alpha Cutoff", Range(0, 1.001)) = 0.5 + [HideInInspector] m_start_Alpha ("Alpha Options--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/alpha-options},hover:Documentation}}", Float) = 0 + [ToggleUI]_AlphaForceOpaque ("Force Opaque", Float) = 1 + _AlphaMod ("Alpha Mod", Range(-1, 1)) = 0.0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _AlphaGlobalMask ("Global Mask--{reference_property:_AlphaGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _AlphaGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] m_end_Alpha ("Alpha Options", Float) = 0 + [HideInInspector] m_lightingCategory ("Shading", Float) = 0 + [HideInInspector] m_start_PoiLightData ("Light Data--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/light-data},hover:Documentation}}", Float) = 0 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingAOMaps ("AO Maps (expand)--{reference_properties:[_LightingAOMapsPan, _LightingAOMapsUV,_LightDataAOStrengthR,_LightDataAOStrengthG,_LightDataAOStrengthB,_LightDataAOStrengthA, _LightDataAOGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingAOMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingAOMapsUV ("UV", Int) = 0 + [HideInInspector]_LightDataAOStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightDataAOStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataAOGlobalMaskR ("Global Mask--{reference_property:_LightDataAOGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataAOGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingDetailShadowMaps ("Shadow Map (expand)--{reference_properties:[_LightingDetailShadowMapsPan, _LightingDetailShadowMapsUV,_LightingDetailShadowStrengthR,_LightingDetailShadowStrengthG,_LightingDetailShadowStrengthB,_LightingDetailShadowStrengthA,_LightingAddDetailShadowStrengthR,_LightingAddDetailShadowStrengthG,_LightingAddDetailShadowStrengthB,_LightingAddDetailShadowStrengthA, _LightDataDetailShadowGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingDetailShadowMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingDetailShadowMapsUV ("UV", Int) = 0 + [HideInInspector]_LightingDetailShadowStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingDetailShadowStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthR ("Additive R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingAddDetailShadowStrengthG ("Additive G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthB ("Additive B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthA ("Additive A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataDetailShadowGlobalMaskR ("Global Mask--{reference_property:_LightDataDetailShadowGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataDetailShadowGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingShadowMasks ("Shadow Masks (expand)--{reference_properties:[_LightingShadowMasksPan, _LightingShadowMasksUV,_LightingShadowMaskStrengthR,_LightingShadowMaskStrengthG,_LightingShadowMaskStrengthB,_LightingShadowMaskStrengthA, _LightDataShadowMaskGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingShadowMasksPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingShadowMasksUV ("UV", Int) = 0 + [HideInInspector]_LightingShadowMaskStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingShadowMaskStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataShadowMaskGlobalMaskR ("Global Mask--{reference_property:_LightDataShadowMaskGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataShadowMaskGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [HideInInspector] s_start_LightDataBasePass ("Base Pass (Directional & Baked Lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [Enum(Poi Custom, 0, Standard, 1, UTS2, 2, OpenLit(lil toon), 3)] _LightingColorMode ("Light Color Mode", Int) = 0 + [Enum(Poi Custom, 0, Normalized NDotL, 1, Saturated NDotL, 2, Casted Shadows Only, 3, SDF, 4)] _LightingMapMode ("Light Map Mode", Int) = 0 + [HideInInspector] s_start_LightDataSDF ("Signed Distance fields--{persistent_expand:true,default_expand:true, condition_showS:(_LightingMapMode==4)}", Float) = 1 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, Nothing, Nothing, Linear, false)]_LightDataSDFMap ("SDF Map (expand)--{reference_properties:[_LightDataSDFMapPan, _LightDataSDFMapUV]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightDataSDFMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightDataSDFMapUV ("UV", Int) = 0 + _LightDataSDFMapLOD ("LOD", Range(0, 1)) = 0 + _LightDataSDFBlendY ("Blend Y Direction", Range(0.001, 2)) = 1 + [HideInInspector] s_end_LightDataSDF ("Signed Distance fields", Float) = 1 + [Enum(Poi Custom, 0, Forced Local Direction, 1, Forced World Direction, 2, UTS2, 3, OpenLit(lil toon), 4, View Direction, 5)] _LightingDirectionMode ("Light Direction Mode", Int) = 0 + [Vector3]_LightngForcedDirection ("Forced Direction--{condition_showS:(_LightingDirectionMode==1 || _LightingDirectionMode==2)}", Vector) = (0, 0, 0) + _LightingViewDirOffsetPitch ("View Dir Offset Pitch--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + _LightingViewDirOffsetYaw ("View Dir Offset Yaw--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + [ToggleUI]_LightingForceColorEnabled ("Force Light Color", Float) = 0 + _LightingForcedColor ("Forced Color--{condition_showS:(_LightingForceColorEnabled==1), reference_property:_LightingForcedColorThemeIndex}", Color) = (1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _LightingForcedColorThemeIndex ("", Int) = 0 + _Unlit_Intensity ("Unlit_Intensity--{condition_showS:(_LightingColorMode==2)}", Range(0.001, 4)) = 1 + [DoNotLock][ToggleUI]_LightingCapEnabled ("Limit Brightness", Float) = 1 + [DoNotLock]_LightingCap ("Max Brightness--{condition_showS:(_LightingCapEnabled==1)}", Range(0, 10)) = 1 + [DoNotLock]_LightingMinLightBrightness ("Min Brightness", Range(0, 1)) = 0 + _LightingIndirectUsesNormals ("Indirect Uses Normals--{condition_showS:(_LightingColorMode==0)}", Range(0, 1)) = 0 + _LightingCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 0 + [DoNotLock]_LightingMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + [ToggleUI]_LightingVertexLightingEnabled ("Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingMirrorVertexLightingEnabled ("Mirror Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingEnableLightVolumes ("Light Volumes", Float) = 1 + [HideInInspector] s_end_LightDataBasePass ("Base Pass", Float) = 1 + [HideInInspector] s_start_LightDataAddPass ("Add Pass (Point & Spot lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [ToggleUI]_LightingAdditiveEnable ("Pixel lights (Important)", Float) = 1 + [ToggleUI]_DisableDirectionalInAdd ("Ignore Directional Lights--{condition_showS:(_LightingAdditiveEnable==1)}", Float) = 1 + [ToggleUI]_LightingAdditiveLimited ("Limit Brightness", Float) = 1 + _LightingAdditiveLimit ("Max Brightness--{condition_showS:(_LightingAdditiveLimited==1)}", Range(0, 10)) = 1 + _LightingAdditiveCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 1 + _LightingAdditiveMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + _LightingAdditivePassthrough ("Point Light Passthrough--{condition_showS:(_LightingAdditiveEnable==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_LightDataAddPass ("Add Pass", Float) = 1 + [HideInInspector] s_start_LightDataDebug ("Debug / Data Visualizations--{reference_property:_LightDataDebugEnabled,persistent_expand:true}", Float) = 0 + [HideInInspector][DoNotAnimate][ThryToggleUI(false)]_LightDataDebugEnabled ("Debug", Float) = 0 + [ThryWideEnum(Direct Color, 0, Indirect Color, 1, Light Map, 2, Attenuation, 3, N Dot L, 4, Half Dir, 5, Direction, 6, Add Color, 7, Add Attenuation, 8, Add Shadow, 9, Add N Dot L, 10)] _LightingDebugVisualize ("Visualize", Int) = 0 + [HideInInspector] s_end_LightDataDebug ("Debug", Float) = 0 + [HideInInspector] m_end_PoiLightData ("Light Data", Float) = 0 + [HideInInspector] m_start_bakedLighting ("Baked Lighting", Float) = 0 + _GIEmissionMultiplier ("GI Emission Multiplier", Float) = 1 + [HideInInspector] DSGI ("DSGI", Float) = 0 //add this property for double sided illumination settings to be shown + [HideInInspector] LightmapFlags ("Lightmap Flags", Float) = 0 //add this property for lightmap flags settings to be shown + [HideInInspector] m_end_bakedLighting ("Baked Lighting", Float) = 0 + [HideInInspector] m_start_PoiShading (" Shading--{reference_property:_ShadingEnabled,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/main},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(VIGNETTE_MASKED)]_ShadingEnabled ("Enable Shading", Float) = 1 + [DoNotAnimate][KeywordEnum(TextureRamp, Multilayer Math, Wrapped, Skin, ShadeMap, Flat, Realistic, Cloth, SDF)] _LightingMode ("Lighting Type", Float) = 5 + _LightingShadowColor ("Shadow Tint--{condition_showS:(_LightingMode!=4 && _LightingMode!=1 && _LightingMode!=5)}", Color) = (1, 1, 1) + _ShadowStrength ("Shadow Strength--{condition_showS:(_LightingMode<=4 || _LightingMode==8)}", Range(0, 1)) = 1 + _LightingIgnoreAmbientColor ("Ignore Indirect Shadow Color--{condition_showS:(_LightingMode<=3 || _LightingMode==8)}", Range(0, 1)) = 1 + [Space(15)] + [HideInInspector] s_start_ShadingAddPass ("Add Pass (Point & Spot Lights)--{persistent_expand:true,default_expand:false}", Float) = 0 + [Enum(Realistic, 0, Toon, 1, Same as Base Pass, 3)] _LightingAdditiveType ("Lighting Type", Int) = 3 + _LightingAdditiveGradientStart ("Gradient Start--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = 0 + _LightingAdditiveGradientEnd ("Gradient End--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_ShadingAddPass ("Add Pass", Float) = 0 + [HideInInspector] s_start_ShadingGlobalMask ("Global Masks--{persistent_expand:true,default_expand:false}", Float) = 0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapApplyGlobalMaskIndex ("LightMap to Global Mask--{reference_property:_ShadingRampedLightMapApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapApplyGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapInverseApplyGlobalMaskIndex ("Inversed LightMap to Global Mask--{reference_property:_ShadingRampedLightMapInverseApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapInverseApplyGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] s_end_ShadingGlobalMask ("Global Masks", Float) = 0 + [HideInInspector] m_end_PoiShading ("Shading", Float) = 0 + [HideInInspector] m_start_brdf (" Reflections & Specular--{reference_property:_MochieBRDF,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/reflections-and-specular},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(MOCHIE_PBR)]_MochieBRDF ("Enable", Float) = 0 + _MochieMetallicMultiplier ("Metallic", Range(0, 1)) = 0 + _MochieRoughnessMultiplier ("Smoothness", Range(0, 1)) = 1 + _MochieReflectionTint ("Reflection Tint--{reference_property:_MochieReflectionTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _MochieReflectionTintThemeIndex ("", Int) = 0 + _MochieSpecularTint ("Specular Tint--{reference_property:_MochieSpecularTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _MochieSpecularTintThemeIndex ("", Int) = 0 + [sRGBWarning][ThryRGBAPacker(R Metallic Map, G Smoothness Map, B Reflection Mask, A Specular Mask, linear, false)]_MochieMetallicMaps ("Packed Maps [Click to Expand]--{reference_properties:[_MochieMetallicMapsPan, _MochieMetallicMapsUV, _MochieMetallicMapsStochastic, _MochieMetallicMapsMetallicChannel, _MochieMetallicMapsRoughnessChannel, _MochieMetallicMapsReflectionMaskChannel, _MochieMetallicMapsSpecularMaskChannel, _MochieMetallicMapInvert, _MochieRoughnessMapInvert, _MochieReflectionMaskInvert, _MochieSpecularMaskInvert]}", 2D) = "white" { } + [HideInInspector][Vector2]_MochieMetallicMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)]_MochieMetallicMapsUV ("UV", Int) = 0 + [HideInInspector][ToggleUI]_MochieMetallicMapsStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsMetallicChannel ("Metallic Channel", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsRoughnessChannel ("Smoothness Channel", Float) = 1 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsReflectionMaskChannel ("Reflection Mask Channel", Float) = 2 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsSpecularMaskChannel ("Specular Mask Channel", Float) = 3 + [HideInInspector][ToggleUI]_MochieMetallicMapInvert ("Invert Metallic", Float) = 0 + [HideInInspector][ToggleUI]_MochieRoughnessMapInvert ("Invert Smoothness", Float) = 0 + [HideInInspector][ToggleUI]_MochieReflectionMaskInvert ("Invert Reflection Mask", Float) = 0 + [HideInInspector][ToggleUI]_MochieSpecularMaskInvert ("Invert Specular Mask", Float) = 0 + [Space(10)] + _MochieReflectionStrength ("Reflection Visibility", Range(0, 1)) = 1 + _MochieSpecularStrength ("Specular Visibility", Range(0, 5)) = 1 + _RefSpecFresnelStrength ("Fresnel Strength", Range(0, 1)) = .5 + _SFExposureOcclusion ("Exposure Occlusion", Range(0, 1)) = 0 + [Space(10)] + [ThryTexture][NoScaleOffset]_MochieReflCube ("Cubemap", Cube) = "" { } + [ToggleUI]_MochieForceFallback ("Force Fallback", Int) = 0 + [HideInInspector] s_start_BRDFTPSMaskGroup ("TPS--{condition_showS:(_TPSPenetratorEnabled==1)}", Float) = 0 + [ThryToggleUI(true)] _BRDFTPSDepthEnabled (" TPS Depth Enabled", Float) = 0 + _BRDFTPSReflectionMaskStrength ("Reflection Mask Strength--{condition_showS:(_BRDFTPSDepthEnabled==1)}", Range(0, 1)) = 1 + _BRDFTPSSpecularMaskStrength ("Specular Mask Strength--{condition_showS:(_BRDFTPSDepthEnabled==1)}", Range(0, 1)) = 1 + [HideInInspector] s_end_BRDFTPSMaskGroup ("", Float) = 0 + [HideInInspector] s_start_ggxanisotropics(" Anisotropics--{reference_property:_GGXAnisotropics,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ThryToggle(GGX_ANISOTROPICS)]_GGXAnisotropics ("Enable", Float) = 0 + [sRGBWarning]_AnisotropyMap("Anisotropy Map--{reference_properties:[_AnisotropyMapPan, _AnisotropyMapUV, _AnisotropyMapChannel]}", 2D) = "bump" { } + [HideInInspector][Vector2]_AnisotropyMapPan("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _AnisotropyMapUV ("UV", Int) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3)]_AnisotropyMapChannel ("Channel", Float) = 0 + _Anisotropy ("Anisotropy", Range(-1, 1)) = 0 + _ReflectionAnisotropicStretch("Reflection Stretch", Range(1, 5)) = 1 + _RoughnessAnisotropy("Roughness Anisotropy", Range(0, 1)) = 1 + [HideInInspector] s_end_ggxanisotropics ("", Float) = 0 + [HideInInspector] s_start_PBRSecondSpecular ("2nd Specular--{reference_property:_Specular2ndLayer,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_Specular2ndLayer ("2nd Specular", Float) = 0 + _MochieSpecularStrength2 ("Visibility", Range(0, 5)) = 1 + _MochieRoughnessMultiplier2 ("Smoothness", Range(0, 1)) = 1 + [HideInInspector] s_end_PBRSecondSpecular ("Name", Float) = 0 + [HideInInspector] s_start_PBRSplitMaskSample ("Split Mask Sampling--{reference_property:_PBRSplitMaskSample,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_PBRSplitMaskSample ("Split Mask Sampling", Float) = 0 + [VectorLabel(tX, tY, oX, oY)]_PBRMaskScaleTiling ("Tiling/Offset", Vector) = (1, 1, 0, 0) + [ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)]_MochieMetallicMasksUV ("UV", Int) = 0 + [ToggleUI]_PBRSplitMaskStochastic ("Stochastic Sampling", Float) = 0 + [Vector2]_MochieMetallicMasksPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector] s_end_PBRSplitMaskSample ("Split Mask Sampling", Float) = 0 + [HideInInspector] s_start_brdfadvanced ("GSAA & Advanced Controls--{persistent_expand:true,default_expand:false}", Float) = 0 + [ToggleUI]_MochieLitFallback ("Lit Fallback", Float) = 1 + [ToggleUI]_IgnoreCastedShadows ("Ignore Casted Shadows", Float) = 0 + _PBRNormalSelect ("Pixel Normal Mix", Range(0, 1)) = 1 + [ThryToggleUI(true)]_MochieGSAAEnabled (" GSAA", Float) = 1 + _PoiGSAAVariance ("GSAA Variance--{condition_showS:(_MochieGSAAEnabled==1)}", Range(0, 1)) = 0.15 + _PoiGSAAThreshold ("GSAA Threshold--{condition_showS:(_MochieGSAAEnabled==1)}", Range(0, 1)) = 0.1 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieMetallicGlobalMask ("Metallic--{reference_property:_MochieMetallicGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieMetallicGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieSmoothnessGlobalMask ("Smoothness--{reference_property:_MochieSmoothnessGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieSmoothnessGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieReflectionStrengthGlobalMask ("Reflection Strength--{reference_property:_MochieReflectionStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieReflectionStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieSpecularStrengthGlobalMask ("Specular Strength--{reference_property:_MochieSpecularStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieSpecularStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] s_end_brdfadvanced ("", Float) = 0 + [HideInInspector] m_end_brdf ("", Float) = 0 + [HideInInspector] m_OutlineCategory (" Outlines--{reference_property:_EnableOutlines,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/outlines/main},hover:Documentation}}", Float) = 0 + [HideInInspector] m_specialFXCategory ("Special FX", Float) = 0 + [HideInInspector] m_vertexCategory ("Vertex Options", Float) = 0 + [HideInInspector] m_start_Uzumore (" View Clip Prevention (Uzumore)--{reference_property:_UzumoreCategoryToggle,button_author:{text:sigmal00,action:{type:URL,data:https://github.com/sigmal00},hover:GitHub}}, button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/vertex-options/view-clip-prevention},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(POI_UZUMORE)] _UzumoreCategoryToggle (" View Clip Prevention (Uzumore)", Float) = 0 + [ToggleUI] _UzumoreEnabled ("Animation Toggle", Float) = 1 + _UzumoreAmount ("Push Amount (m)", Float) = 0.1 + _UzumoreBias ("Push Bias", Float) = 0.001 + [sRGBWarning]_UzumoreMask ("Push Mask (A)", 2D) = "white" { } + [ThryWideEnum(R, 0, G, 1, B, 2, A, 3)] _UzumoreMaskUV ("Push Mask Channel", Float) = 3 + [HideInInspector] m_end_Uzumore ("Camera Push Back", Float) = 0 + [HideInInspector] m_modifierCategory ("Global Modifiers & Data", Float) = 0 + [HideInInspector] m_start_PoiGlobalCategory ("Global Data and Masks", Float) = 0 + [HideInInspector] m_start_GlobalThemes ("Global Themes--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/global-themes},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HDR]_GlobalThemeColor0 ("Theme Color 0", Color ) = (1, 1, 1, 1) + _GlobalThemeHue0 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed0 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation0 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue0 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HDR]_GlobalThemeColor1 ("Theme Color 1", Color ) = (1, 1, 1, 1) + _GlobalThemeHue1 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed1 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation1 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue1 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HDR]_GlobalThemeColor2 ("Theme Color 2", Color ) = (1, 1, 1, 1) + _GlobalThemeHue2 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed2 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation2 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue2 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HDR]_GlobalThemeColor3 ("Theme Color 3", Color ) = (1, 1, 1, 1) + _GlobalThemeHue3 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed3 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation3 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue3 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HideInInspector] m_end_GlobalThemes ("Global Themes", Float ) = 0 + [HideInInspector] m_start_GlobalMask ("Global Mask--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/global-masks},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalMaskModifiers ("Modifiers", Float) = 0 + [HideInInspector] m_end_GlobalMaskModifiers ("", Float) = 0 + [HideInInspector] m_end_GlobalMask ("Global Mask", Float) = 0 + [HideInInspector] m_end_PoiGlobalCategory ("Global Data and Masks ", Float) = 0 + [HideInInspector] m_start_PoiUVCategory ("UVs", Float) = 0 + [HideInInspector] m_start_Stochastic ("Stochastic Sampling--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/stochastic-sampling},hover:Documentation}}", Float) = 0 + [KeywordEnum(Deliot Heitz, Hextile, None)] _StochasticMode ("Sampling Mode", Float) = 0 + [HideInInspector] s_start_deliot ("Deliot Heitz--{persistent_expand:true,default_expand:false,condition_show:_StochasticMode==0}", Float) = 0 + _StochasticDeliotHeitzDensity ("Detiling Density", Range(0.1, 10)) = 1 + [HideInInspector] s_end_deliot ("Deliot Heitz", Float) = 0 + [HideInInspector] m_end_Stochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector] m_start_uvLocalWorld ("Local World UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/local-world-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos0 ("Local X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos1 ("Local Y", Int) = 1 + [Space(10)] + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos0 ("World X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos1 ("World Y", Int) = 2 + [HideInInspector] m_end_uvLocalWorld ("Local World UV", Float) = 0 + [HideInInspector] m_start_uvPanosphere ("Panosphere UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/panosphere-uv},hover:Documentation}}", Float) = 0 + [ToggleUI] _StereoEnabled ("Stereo Enabled", Float) = 0 + [ToggleUI] _PanoUseBothEyes ("Perspective Correct (VR)", Float) = 1 + [HideInInspector] m_end_uvPanosphere ("Panosphere UV", Float) = 0 + [HideInInspector] m_start_uvPolar ("Polar UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/polar-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8)] _PolarUV ("UV", Int) = 0 + [Vector2]_PolarCenter ("Center Coordinate", Vector) = (.5, .5, 0, 0) + _PolarRadialScale ("Radial Scale", Float) = 1 + _PolarLengthScale ("Length Scale", Float) = 1 + _PolarSpiralPower ("Spiral Power", Float) = 0 + [HideInInspector] m_end_uvPolar ("Polar UV", Float) = 0 + [HideInInspector] m_end_PoiUVCategory ("UVs ", Float) = 0 + [HideInInspector] m_start_PoiPostProcessingCategory ("Post Processing", Float) = 0 + [HideInInspector] m_start_PPAnimations ("PP Animations--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/post-processing/pp-animations},hover:Documentation}}", Float) = 0 + [Helpbox(1)] _PPHelp ("This section meant for real time adjustments through animations and not to be changed in unity", Int) = 0 + _PPLightingMultiplier ("Lighting Mulitplier", Float) = 1 + _PPLightingAddition ("Lighting Add", Float) = 0 + _PPEmissionMultiplier ("Emission Multiplier", Float) = 1 + _PPFinalColorMultiplier ("Final Color Multiplier", Float) = 1 + [HideInInspector] m_end_PPAnimations ("PP Animations ", Float) = 0 + [HideInInspector] m_end_PoiPostProcessingCategory ("Post Processing ", Float) = 0 + [HideInInspector] m_thirdpartyCategory ("Third Party", Float) = 0 + [HideInInspector] m_renderingCategory ("Rendering--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/main},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.CullMode)] _Cull ("Cull", Float) = 2 + [DoNotAnimate][Enum(UnityEngine.Rendering.CompareFunction)] _ZTest ("ZTest", Float) = 4 + [DoNotAnimate][Enum(Off, 0, On, 1)] _ZWrite ("ZWrite", Int) = 1 + [DoNotAnimate][ThryMask(Thry.ColorMaskFlags)] _ColorMask ("Color Mask", Int) = 15 + [DoNotAnimate] _OffsetFactor ("Offset Factor", Float) = 0.0 + [DoNotAnimate] _OffsetUnits ("Offset Units", Float) = 0.0 + [DoNotAnimate][ToggleUI] _RenderingReduceClipDistance ("Reduce Clip Distance", Float) = 0 + [DoNotAnimate][ToggleUI] _ZClip ("Z Clip", Float) = 1 + [DoNotAnimate][ToggleUI] _IgnoreFog ("Ignore Fog", Float) = 0 + [DoNotAnimate][ToggleUI]_FlipBackfaceNormals ("Flip Backface Normals", Int) = 1 + [DoNotAnimate][HideInInspector] Instancing ("Instancing", Float) = 0 //add this property for instancing variants settings to be shown + [ToggleUI] _RenderingEarlyZEnabled ("Early Z", Float) = 0 + [HideInInspector] m_start_blending ("Blending--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/blending},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOp ("RGB Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlend ("RGB Destination Blend", Int) = 0 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOp ("RGB Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlend ("RGB Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_start_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOpAlpha ("Alpha Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlendAlpha ("Alpha Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlendAlpha ("Alpha Destination Blend", Int) = 10 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOpAlpha ("Alpha Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlendAlpha ("Alpha Source Blend", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlendAlpha ("Alpha Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_end_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [HideInInspector] m_end_blending ("Blending", Float) = 0 + [HideInInspector] m_start_StencilPassOptions ("Stencil--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/stencil},hover:Documentation}}", Float) = 0 + [ThryWideEnum(Simple, 0, Front Face vs Back Face, 1)] _StencilType ("Stencil Type", Float) = 0 + [IntRange] _StencilRef ("Stencil Reference Value", Range(0, 255)) = 0 + [IntRange] _StencilReadMask ("Stencil ReadMask Value", Range(0, 255)) = 255 + [IntRange] _StencilWriteMask ("Stencil WriteMask Value", Range(0, 255)) = 255 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilPassOp ("Stencil Pass Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFailOp ("Stencil Fail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilZFailOp ("Stencil ZFail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilCompareFunction ("Stencil Compare Function--{condition_showS:(_StencilType==0)}", Float) = 8 + [HideInInspector] m_start_StencilPassBackOptions("Back--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp0 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackPassOp ("Back Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackFailOp ("Back Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackZFailOp ("Back ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilBackCompareFunction ("Back Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassBackOptions("Back", Float) = 0 + [HideInInspector] m_start_StencilPassFrontOptions("Front--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp1 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontPassOp ("Front Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontFailOp ("Front Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontZFailOp ("Front ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilFrontCompareFunction ("Front Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassFrontOptions("Front", Float) = 0 + [HideInInspector] m_end_StencilPassOptions ("Stencil", Float) = 0 + } + SubShader + { + Tags { "RenderType" = "Opaque" "Queue" = "Geometry" "VRCFallback" = "Standard" } + Pass + { + Name "Base" + Tags { "LightMode" = "ForwardBase" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Back + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_MOCHIEMETALLICMAPS + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdbase + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #pragma multi_compile_fragment _ VERTEXLIGHT_ON + #define POI_PASS_BASE + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + #ifndef VRC_LIGHT_VOLUMES_INCLUDED + #define VRC_LIGHT_VOLUMES_INCLUDED + #define VRCLV_VERSION 2 + #define VRCLV_MAX_VOLUMES_COUNT 32 + #define VRCLV_MAX_LIGHTS_COUNT 128 + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + cbuffer LightVolumeUniforms { + #endif + uniform float _UdonLightVolumeEnabled; + uniform float _UdonLightVolumeVersion; + uniform float _UdonLightVolumeCount; + uniform float _UdonLightVolumeAdditiveMaxOverdraw; + uniform float _UdonLightVolumeAdditiveCount; + uniform float _UdonLightVolumeProbesBlend; + uniform float _UdonLightVolumeSharpBounds; + uniform float4x4 _UdonLightVolumeInvWorldMatrix[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeRotation[VRCLV_MAX_VOLUMES_COUNT * 2]; // Legacy! Used in this version to have back compatibility with older worlds. Array commented above will be used in future releases! Legacy! + uniform float3 _UdonLightVolumeInvLocalEdgeSmooth[VRCLV_MAX_VOLUMES_COUNT]; + uniform float3 _UdonLightVolumeUvw[VRCLV_MAX_VOLUMES_COUNT * 6]; // Legacy! AABB Bounds of islands on the 3D Texture atlas. Array commented above will be used in future releases! Legacy! + uniform float4 _UdonLightVolumeOcclusionUvw[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeColor[VRCLV_MAX_VOLUMES_COUNT]; + uniform float _UdonPointLightVolumeCount; + uniform float _UdonPointLightVolumeCubeCount; + uniform float4 _UdonPointLightVolumePosition[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeColor[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeDirection[VRCLV_MAX_LIGHTS_COUNT]; + uniform float3 _UdonPointLightVolumeCustomID[VRCLV_MAX_LIGHTS_COUNT]; + uniform float _UdonLightBrightnessCutoff; + uniform float _UdonLightVolumeOcclusionCount; + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + } + #endif + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + uniform Texture3D _UdonLightVolume; + uniform SamplerState sampler_UdonLightVolume; + uniform Texture2DArray _UdonPointLightVolumeTexture; + #define LV_SAMPLE(tex, uvw) tex.SampleLevel(sampler_UdonLightVolume, uvw, 0) + #else + #define LV_SAMPLE(tex, uvw) float4(0,0,0,0) + #endif + #define LV_PI 3.141592653589793f + #define LV_PI2 6.283185307179586f + float LV_Smoothstep01(float x) { + return x * x * (3 - 2 * x); + } + float3 LV_MultiplyVectorByQuaternion(float3 v, float4 q) { + float3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); + } + float3 LV_MultiplyVectorByMatrix2x3(float3 v, float3 r0, float3 r1) { + float3 r2 = cross(r0, r1); + return float3(dot(v, r0), dot(v, r1), dot(v, r2)); + } + float LV_FastAcos(float x) { + float absX = abs(x); + float res = -0.156583f * absX + LV_PI * 0.5f; + res *= sqrt(1.0f - absX); + return (x >= 0) ? res : (LV_PI - res); + } + float LV_DistributionGGX(float NoH, float roughness) { + float f = (roughness - 1) * ((roughness + 1) * (NoH * NoH)) + 1; + return (roughness * roughness) / ((float) LV_PI * f * f); + } + bool LV_PointLocalAABB(float3 localUVW) { + return all(abs(localUVW) <= 0.5); + } + float3 LV_LocalFromVolume(uint volumeID, float3 worldPos) { + return mul(_UdonLightVolumeInvWorldMatrix[volumeID], float4(worldPos, 1.0)).xyz; + } + float LV_EvaluateSH(float L0, float3 L1, float3 n) { + return L0 + dot(L1, n); + } + float4 LV_SampleCubemapArray(uint id, float3 dir) { + float3 absDir = abs(dir); + float2 uv; + uint face; + if (absDir.x >= absDir.y && absDir.x >= absDir.z) { + face = dir.x > 0 ? 0 : 1; + uv = float2((dir.x > 0 ? -dir.z : dir.z), -dir.y) * rcp(absDir.x); + } else if (absDir.y >= absDir.z) { + face = dir.y > 0 ? 2 : 3; + uv = float2(dir.x, (dir.y > 0 ? dir.z : -dir.z)) * rcp(absDir.y); + } else { + face = dir.z > 0 ? 4 : 5; + uv = float2((dir.z > 0 ? dir.x : -dir.x), -dir.y) * rcp(absDir.z); + } + float3 uvid = float3(uv * 0.5 + 0.5, id * 6 + face); + return LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + } + float4 LV_ProjectQuadLightIrradianceSH(float3 shadingPosition, float3 lightVertices[4]) { + [unroll] for (uint edge0 = 0; edge0 < 4; edge0++) { + lightVertices[edge0] = normalize(lightVertices[edge0] - shadingPosition); + } + const float3 zhDir0 = float3(0.866025, -0.500001, -0.000004); + const float3 zhDir1 = float3(-0.759553, 0.438522, -0.480394); + const float3 zhDir2 = float3(-0.000002, 0.638694, 0.769461); + const float3 zhWeightL1y = float3(2.1995339f, 2.50785367f, 1.56572711f); + const float3 zhWeightL1z = float3(-1.82572523f, -2.08165037f, 0.00000000f); + const float3 zhWeightL1x = float3(2.42459869f, 1.44790525f, 0.90397552f); + float solidAngle = 0.0; + float3 surfaceIntegral = 0.0; + [loop] for (uint edge1 = 0; edge1 < 4; edge1++) { + uint next = (edge1 + 1) % 4; + uint prev = (edge1 + 4 - 1) % 4; + float3 prevVert = lightVertices[prev]; + float3 thisVert = lightVertices[edge1]; + float3 nextVert = lightVertices[next]; + float3 a = cross(thisVert, prevVert); + float3 b = cross(thisVert, nextVert); + float lenA = length(a); + float lenB = length(b); + solidAngle += LV_FastAcos(clamp(dot(a, b) / (lenA * lenB), -1, 1)); + float3 mu = b * rcp(lenB); + float cosGamma = dot(thisVert, nextVert); + float gamma = LV_FastAcos(clamp(cosGamma, -1, 1)); + surfaceIntegral.x += gamma * dot(zhDir0, mu); + surfaceIntegral.y += gamma * dot(zhDir1, mu); + surfaceIntegral.z += gamma * dot(zhDir2, mu); + } + solidAngle = solidAngle - LV_PI2; + surfaceIntegral *= 0.5; + const float normalizationL0 = 0.5f * sqrt(1.0f / LV_PI); + float l0 = normalizationL0 * solidAngle; + float l1y = dot(zhWeightL1y, surfaceIntegral); + float l1z = dot(zhWeightL1z, surfaceIntegral); + float l1x = dot(zhWeightL1x, surfaceIntegral); + const float cosineKernelL0 = LV_PI; // (1) + const float cosineKernelL1 = LV_PI2 / 3.0f; // (1) + const float oneOverPi = 1.0f / LV_PI; // (2) + const float normalizationL1 = 0.5f * sqrt(3.0f / LV_PI); // (3) + const float weightL0 = cosineKernelL0 * normalizationL0 * oneOverPi; // (1), (2), (3) + const float weightL1 = cosineKernelL1 * normalizationL1 * oneOverPi; // (1), (2), (3) + l0 *= weightL0; + l1y *= weightL1; + l1z *= weightL1; + l1x *= weightL1; + return float4(l1x, l1y, l1z, l0); + } + void LV_QuadLight(float3 worldPos, float3 centroidPos, float4 rotationQuat, float2 size, float3 color, float sqMaxDist, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 lightToWorldPos = worldPos - centroidPos; + float3 normal = LV_MultiplyVectorByQuaternion(float3(0, 0, 1), rotationQuat); + if (dot(normal, lightToWorldPos) < 0.0) return; + float sqCutoffDist = sqMaxDist - dot(lightToWorldPos, lightToWorldPos); + color.rgb *= saturate(sqCutoffDist / sqMaxDist) * LV_PI * occlusion; + float2 halfSize = size * 0.5f; + float3 xAxis = LV_MultiplyVectorByQuaternion(float3(1, 0, 0), rotationQuat); + float3 yAxis = cross(normal, xAxis); + float3 verts[4]; + verts[0] = centroidPos + (-halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[1] = centroidPos + ( halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[2] = centroidPos + ( halfSize.x * xAxis) + (-halfSize.y * yAxis); + verts[3] = centroidPos + (-halfSize.x * xAxis) + (-halfSize.y * yAxis); + float4 areaLightSH = LV_ProjectQuadLightIrradianceSH(worldPos, verts); + float lenL1 = length(areaLightSH.xyz); + if (lenL1 > areaLightSH.w) areaLightSH.xyz *= areaLightSH.w / lenL1; + L0 += areaLightSH.w * color.rgb; + L1r += areaLightSH.xyz * color.r; + L1g += areaLightSH.xyz * color.g; + L1b += areaLightSH.xyz * color.b; + count++; + } + float3 LV_PointLightAttenuation(float sqdist, float sqlightSize, float3 color, float brightnessCutoff, float sqMaxDist) { + float mask = saturate(1 - sqdist / sqMaxDist); + return mask * mask * color * sqlightSize / (sqdist + sqlightSize); + } + float LV_PointLightSolidAngle(float sqdist, float sqlightSize) { + return saturate(sqrt(sqdist / (sqlightSize + sqdist))); + } + void LV_SphereLight(float sqdist, float3 dirN, float sqlightSize, float3 color, float occlusion, float sqMaxDist, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 att = LV_PointLightAttenuation(sqdist, sqlightSize, color, _UdonLightBrightnessCutoff, sqMaxDist); + float3 l0 = att * occlusion; + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLight(float sqdist, float3 dirN, float sqlightSize, float3 att, float spotMask, float cosAngle, float coneFalloff, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float smoothedCone = LV_Smoothstep01(saturate(spotMask * coneFalloff)); + float3 l0 = att * (occlusion * smoothedCone); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * saturate(1 - cosAngle)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightCookie(float sqdist, float3 dirN, float sqlightSize, float3 att, float4 lightRot, float tanAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 localDir = LV_MultiplyVectorByQuaternion(-dirN, lightRot); + float2 uv = localDir.xy * rcp(localDir.z * tanAngle); + if ( + localDir.z <= 0.0 || // Culling by direction + abs(uv.x) > 1.0 || abs(uv.y) > 1.0 // Culling by UV + ) return; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 - customId - 1; + float3 uvid = float3(uv * 0.5 + 0.5, id); + float angleSize = saturate(rsqrt(1 + tanAngle * tanAngle)); + float4 cookie = LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + float3 l0 = att * cookie.rgb * (cookie.a * occlusion); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * (1 - angleSize)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightAttenuationLUT(float sqdist, float3 dirN, float sqlightSize, float3 color, float spotMask, float cosAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float dirRadius = sqdist * abs(sqlightSize); + float spot = 1 - saturate(spotMask * rcp(1 - cosAngle)); + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId - 1; + float3 uvid = float3(sqrt(float2(spot, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * occlusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } + void LV_PointLight(uint id, float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 customID_data = _UdonPointLightVolumeCustomID[id]; + int shadowId = (int) customID_data.y; // Shadowmask id + int customId = (int) customID_data.x; // Custom Texture ID + float sqrRange = customID_data.z; // Squared culling distance + float4 pos = _UdonPointLightVolumePosition[id]; // Light position and inversed squared range + float3 dir = pos.xyz - worldPos; + float sqlen = max(dot(dir, dir), 1e-6); + if (sqlen > sqrRange) return; // Early distance based culling + float3 dirN = dir * rsqrt(sqlen); + float lightOcclusion = 1; + if (_UdonLightVolumeOcclusionCount != 0 && shadowId >= 0) { + lightOcclusion = dot(occlusion, float4(shadowId == 0, shadowId == 1, shadowId == 2, shadowId == 3)); + } + float4 color = _UdonPointLightVolumeColor[id]; // Color, angle + float4 ldir = _UdonPointLightVolumeDirection[id]; // Dir + falloff or Rotation + if (pos.w < 0) { // It is a spot light + float angle = color.w; + float spotMask = dot(ldir.xyz, -dirN) - angle; + if(customId >= 0 && spotMask < 0) return; // Spot cone based culling + if (customId > 0) { // If it uses Attenuation LUT + LV_SphereSpotLightAttenuationLUT(sqlen, dirN, -pos.w, color.rgb, spotMask, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + float3 att = LV_PointLightAttenuation(sqlen, -pos.w, color.rgb, _UdonLightBrightnessCutoff, sqrRange); + if (customId < 0) { // If uses cookie + LV_SphereSpotLightCookie(sqlen, dirN, -pos.w, att, ldir, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + LV_SphereSpotLight(sqlen, dirN, -pos.w, att, spotMask, angle, ldir.w, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + } else if (color.w <= 1.5f) { // It is a point light + if (customId > 0) { // Using LUT + float invSqRange = abs(pos.w); // Sign of range defines if it's point light (positive) or a spot light (negative) + float dirRadius = sqlen * invSqRange; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId; + float3 uvid = float3(sqrt(float2(0, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * lightOcclusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } else { // If it uses default parametric attenuation + float3 l0 = 0, l1r = 0, l1g = 0, l1b = 0; + LV_SphereLight(sqlen, dirN, pos.w, color.rgb, lightOcclusion, sqrRange, l0, l1r, l1g, l1b, count); + float3 cubeColor = 1; + if (customId < 0) { // If it uses a cubemap + uint id = -customId - 1; // Cubemap ID starts from zero and should not take in count texture array slices count. + cubeColor = LV_SampleCubemapArray(id, LV_MultiplyVectorByQuaternion(dirN, ldir)).xyz; + } + L0 += l0 * cubeColor; + L1r += l1r * cubeColor.r; + L1g += l1g * cubeColor.g; + L1b += l1b * cubeColor.b; + } + } else { // It is an area light + LV_QuadLight(worldPos, pos.xyz, ldir, float2(pos.w, color.w - 2.0f), color.rgb, sqrRange, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + void LV_SampleLightVolumeTex(float3 uvw0, float3 uvw1, float3 uvw2, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b) { + float4 tex0 = LV_SAMPLE(_UdonLightVolume, uvw0); + float4 tex1 = LV_SAMPLE(_UdonLightVolume, uvw1); + float4 tex2 = LV_SAMPLE(_UdonLightVolume, uvw2); + L0 = tex0.rgb; + L1r = float3(tex1.r, tex2.r, tex0.a); + L1g = float3(tex1.g, tex2.g, tex1.a); + L1b = float3(tex1.b, tex2.b, tex2.a); + } + float LV_BoundsMask(float3 localUVW, float3 invLocalEdgeSmooth) { + float3 distToMin = (localUVW + 0.5) * invLocalEdgeSmooth; + float3 distToMax = (0.5 - localUVW) * invLocalEdgeSmooth; + float3 fade = saturate(min(distToMin, distToMax)); + return fade.x * fade.y * fade.z; + } + void LV_SampleLightProbe(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz; + L1g += unity_SHAg.xyz; + L1b += unity_SHAb.xyz; + } + void LV_SampleLightProbeDering(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz * 0.565f; + L1g += unity_SHAg.xyz * 0.565f; + L1b += unity_SHAb.xyz * 0.565f; + } + void LV_SampleVolume(uint id, float3 localUVW, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + float3 uvw0 = uvwScaled + _UdonLightVolumeUvw[uvwID].xyz; + float3 uvw1 = uvwScaled + _UdonLightVolumeUvw[uvwID + 2].xyz; + float3 uvw2 = uvwScaled + _UdonLightVolumeUvw[uvwID + 4].xyz; + float3 l0, l1r, l1g, l1b; + LV_SampleLightVolumeTex(uvw0, uvw1, uvw2, l0, l1r, l1g, l1b); + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + occlusion = 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + occlusion = 1; + } + float4 color = _UdonLightVolumeColor[id]; + L0 += l0 * color.rgb; + l1r *= color.r; + l1g *= color.g; + l1b *= color.b; + if (color.a != 0) { + float3 r0 = _UdonLightVolumeRotation[id * 2].xyz; + float3 r1 = _UdonLightVolumeRotation[id * 2 + 1].xyz; + L1r += LV_MultiplyVectorByMatrix2x3(l1r, r0, r1); + L1g += LV_MultiplyVectorByMatrix2x3(l1g, r0, r1); + L1b += LV_MultiplyVectorByMatrix2x3(l1b, r0, r1); + } else { + L1r += l1r; + L1g += l1g; + L1b += l1b; + } + } + float4 LV_SampleVolumeOcclusion(uint id, float3 localUVW) { + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + return 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + return 1; + } + } + void LV_PointLightVolumeSH(float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + uint pointCount = min((uint) _UdonPointLightVolumeCount, VRCLV_MAX_LIGHTS_COUNT); + if (pointCount == 0) return; + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_LIGHTS_COUNT); + uint pcount = 0; // Point lights counter + [loop] for (uint pid = 0; pid < pointCount && pcount < maxOverdraw; pid++) { + LV_PointLight(pid, worldPos, occlusion, L0, L1r, L1g, L1b, pcount); + } + } + void LV_LightVolumeSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + if (volumesCount == 0) { // Legacy! Fallback to default light probes if Light Volume are not enabled or a version is too old to have a support. Legacy! + LV_SampleLightProbe(L0, L1r, L1g, L1b); + return; + } + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + bool lightProbesBlend = _UdonLightVolumeProbesBlend; + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + [loop] for (uint id = 0; id < volumesCount; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA && lightProbesBlend) { + LV_SampleLightProbe(L0, L1r, L1g, L1b); + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + float3 L0_A = 0; + float3 L1r_A = 0; + float3 L1g_A = 0; + float3 L1b_A = 0; + float4 occlusion_A = 1; + LV_SampleVolume(volumeID_A, localUVW_A, L0_A, L1r_A, L1g_A, L1b_A, occlusion_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || isNoA || (_UdonLightVolumeSharpBounds && isNoB)) { // Returning SH A result if it's the center of mask or out of bounds + L0 += L0_A; + L1r += L1r_A; + L1g += L1g_A; + L1b += L1b_A; + occlusion = occlusion_A; + occlusion *= mOcclusion; + return; + } + float3 L0_B = 0; + float3 L1r_B = 0; + float3 L1g_B = 0; + float3 L1b_B = 0; + float4 occlusion_B = 1; + if (isNoB && lightProbesBlend) { // No Volume found and light volumes blending enabled + LV_SampleLightProbe(L0_B, L1r_B, L1g_B, L1b_B); + } else { // Blending Volume A and Volume B + localUVW_B = isNoB ? localUVW : localUVW_B; + volumeID_B = isNoB ? volumesCount - 1 : volumeID_B; + LV_SampleVolume(volumeID_B, localUVW_B, L0_B, L1r_B, L1g_B, L1b_B, occlusion_B); + } + occlusion = lerp(occlusion_B, occlusion_A, mask); + occlusion *= mOcclusion; + L0 += lerp(L0_B, L0_A, mask); + L1r += lerp(L1r_B, L1r_A, mask); + L1g += lerp(L1g_B, L1g_A, mask); + L1b += lerp(L1b_B, L1b_A, mask); + } + void LV_LightVolumeAdditiveSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + if (additiveCount == 0 && (uint) _UdonPointLightVolumeCount == 0) return; // Legacy! + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW for Y Axis and Free rotations + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + uint count = min(_UdonLightVolumeOcclusionCount == 0 ? additiveCount : volumesCount, VRCLV_MAX_VOLUMES_COUNT); // Only use all volumes if occlusion volumes are enabled + [loop] for (uint id = 0; id < count; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA || _UdonLightVolumeOcclusionCount == 0) { + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + occlusion = LV_SampleVolumeOcclusion(volumeID_A, localUVW_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || (_UdonLightVolumeSharpBounds && isNoB)) { + occlusion *= mOcclusion; + return; // Returning A result if it's the center of mask or out of bounds + } + if (isNoB) occlusion = lerp(1, occlusion, mask); + else occlusion = lerp(LV_SampleVolumeOcclusion(volumeID_B, localUVW_B), occlusion, mask); + occlusion *= mOcclusion; + } + float3 LightVolumeSpecular(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specColor = max(float3(dot(reflect(-L1r, worldNormal), viewDir), dot(reflect(-L1g, worldNormal), viewDir), dot(reflect(-L1b, worldNormal), viewDir)), 0); + float3 rDir = normalize(normalize(L1r) + viewDir); + float3 gDir = normalize(normalize(L1g) + viewDir); + float3 bDir = normalize(normalize(L1b) + viewDir); + float rNh = saturate(dot(worldNormal, rDir)); + float gNh = saturate(dot(worldNormal, gDir)); + float bNh = saturate(dot(worldNormal, bDir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float rSpec = LV_DistributionGGX(rNh, roughExp); + float gSpec = LV_DistributionGGX(gNh, roughExp); + float bSpec = LV_DistributionGGX(bNh, roughExp); + float3 specs = (rSpec + gSpec + bSpec) * f0; + float3 coloredSpecs = specs * specColor; + float3 a = coloredSpecs + specs * L0; + float3 b = coloredSpecs * 3; + return max(lerp(a, b, smoothness) * 0.5f, 0.0); + } + float3 LightVolumeSpecular(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecular(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeSpecularDominant(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 dominantDir = L1r + L1g + L1b; + float3 dir = normalize(normalize(dominantDir) + viewDir); + float nh = saturate(dot(worldNormal, dir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float spec = LV_DistributionGGX(nh, roughExp); + return max(spec * L0 * f0, 0.0) * 1.5f; + } + float3 LightVolumeSpecularDominant(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecularDominant(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeEvaluate(float3 worldNormal, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + return float3(LV_EvaluateSH(L0.r, L1r, worldNormal), LV_EvaluateSH(L0.g, L1g, worldNormal), LV_EvaluateSH(L0.b, L1b, worldNormal)); + } + void LightVolumeSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled == 0) { + LV_SampleLightProbeDering(L0, L1r, L1g, L1b); + } else { + float4 occlusion = 1; + LV_LightVolumeSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + void LightVolumeAdditiveSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled != 0) { + float4 occlusion = 1; + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + float3 LightVolumeSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float3 LightVolumeAdditiveSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return 0; + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float LightVolumesEnabled() { + return _UdonLightVolumeEnabled; + } + float LightVolumesVersion() { + return _UdonLightVolumeVersion == 0 ? _UdonLightVolumeEnabled : _UdonLightVolumeVersion; + } + #endif + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + #ifdef MOCHIE_PBR + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _MochieMetallicMaps; + float _PBRMapsStochastic; + #endif + float4 _MochieMetallicMaps_ST; + float2 _MochieMetallicMapsPan; + float _MochieMetallicMapsUV; + float _MochieMetallicMapsStochastic; + float _MochieMetallicMapInvert; + float _MochieRoughnessMapInvert; + float _MochieReflectionMaskInvert; + float _MochieSpecularMaskInvert; + float _MochieMetallicMapsMetallicChannel; + float _MochieMetallicMapsRoughnessChannel; + float _MochieMetallicMapsReflectionMaskChannel; + float _MochieMetallicMapsSpecularMaskChannel; + float _PBRNormalSelect; + float _MochieReflectionTintThemeIndex; + float _MochieSpecularTintThemeIndex; + float _MochieRoughnessMultiplier; + float _MochieMetallicMultiplier; + float _MochieReflectionStrength; + float _MochieSpecularStrength; + float4 _MochieSpecularTint; + float4 _MochieReflectionTint; + float _MochieLitFallback; + float _IgnoreCastedShadows; + float _PBRSplitMaskSample; + float _PBRSplitMaskStochastic; + float4 _PBRMaskScaleTiling; + float _MochieMetallicMasksUV; + float4 _MochieMetallicMasksPan; + float _Specular2ndLayer; + float _MochieSpecularStrength2; + float _MochieRoughnessMultiplier2; + float _RefSpecFresnelStrength; + float _SFExposureOcclusion; + TextureCube _MochieReflCube; + float4 _MochieReflCube_HDR; + float _MochieForceFallback; + float _MochieGSAAEnabled; + float _PoiGSAAVariance; + float _PoiGSAAThreshold; + float _BRDFTPSReflectionMaskStrength; + float _BRDFTPSSpecularMaskStrength; + float _BRDFTPSDepthEnabled; + float _MochieMetallicGlobalMask; + float _MochieMetallicGlobalMaskBlendType; + float _MochieSmoothnessGlobalMask; + float _MochieSmoothnessGlobalMaskBlendType; + float _MochieReflectionStrengthGlobalMask; + float _MochieReflectionStrengthGlobalMaskBlendType; + float _MochieSpecularStrengthGlobalMask; + float _MochieSpecularStrengthGlobalMaskBlendType; + #endif + float _PPLightingMultiplier; + float _PPLightingAddition; + float _PPEmissionMultiplier; + float _PPFinalColorMultiplier; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef VIGNETTE_MASKED + #ifdef _LIGHTINGMODE_REALISTIC + #if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) + #if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) + #define SUBTRACTIVE_LIGHTING 1 + #endif + #endif + float FadeShadows(float attenuation, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if HANDLE_SHADOWS_BLENDING_IN_GI || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + #if ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + attenuation = poiLight.attenuation; + #endif + float viewZ = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float shadowFadeDistance = UnityComputeShadowFadeDistance(poiMesh.worldPos, viewZ); + float shadowFade = UnityComputeShadowFade(shadowFadeDistance); + float bakedAttenuation = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + attenuation = UnityMixRealtimeAndBakedShadows(attenuation, bakedAttenuation, shadowFade); + #endif + return attenuation; + } + void ApplySubtractiveLighting(inout UnityIndirect indirectLight, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if SUBTRACTIVE_LIGHTING + poiLight.attenuation = FadeShadows(poiLight.attenuation, poiLight, poiMesh, poiCam); + float ndotl = saturate(dot(poiMesh.normals[0], _WorldSpaceLightPos0.xyz)); + float3 shadowedLightEstimate = ndotl * (1 - poiLight.attenuation) * _LightColor0.rgb; + float3 subtractedLight = indirectLight.diffuse - shadowedLightEstimate; + subtractedLight = max(subtractedLight, unity_ShadowColor.rgb); + subtractedLight = lerp(subtractedLight, indirectLight.diffuse, _LightShadowData.x); + indirectLight.diffuse = min(subtractedLight, indirectLight.diffuse); + #endif + } + UnityIndirect CreateIndirectLight(in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight) + { + UnityIndirect indirectLight; + indirectLight.diffuse = 0; + indirectLight.specular = 0; + #if defined(LIGHTMAP_ON) + indirectLight.diffuse = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, poiMesh.lightmapUV.xy)); + #if defined(DIRLIGHTMAP_COMBINED) + float4 lightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, poiMesh.lightmapUV.xy); + indirectLight.diffuse = DecodeDirectionalLightmap(indirectLight.diffuse, lightmapDirection, poiMesh.normals[1]); + #endif + ApplySubtractiveLighting(indirectLight, poiLight, poiMesh, poiCam); + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float3 dynamicLightDiffuse = DecodeRealtimeLightmap( + UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, poiMesh.lightmapUV.zw) + ); + #if defined(DIRLIGHTMAP_COMBINED) + float4 dynamicLightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_DynamicDirectionality, unity_DynamicLightmap, poiMesh.lightmapUV.zw); + indirectLight.diffuse += DecodeDirectionalLightmap(dynamicLightDiffuse, dynamicLightmapDirection, poiMesh.normals[1]); + #else + indirectLight.diffuse += dynamicLightDiffuse; + #endif + #endif + #if !defined(LIGHTMAP_ON) && !defined(DYNAMICLIGHTMAP_ON) + #if UNITY_LIGHT_PROBE_PROXY_VOLUME + if (unity_ProbeVolumeParams.x == 1) + { + indirectLight.diffuse = SHEvalLinearL0L1_SampleProbeVolume( + float4(poiMesh.normals[1], 1), poiMesh.worldPos + ); + indirectLight.diffuse = max(0, indirectLight.diffuse); + #if defined(UNITY_COLORSPACE_GAMMA) + indirectLight.diffuse = LinearToGammaSpace(indirectLight.diffuse); + #endif + } + else + { + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + } + #else + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + #endif + #endif + indirectLight.diffuse *= poiLight.occlusion; + return indirectLight; + } + #endif + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_REALISTIC + UnityLight light; + light.dir = poiLight.direction; + light.color = max(0, _LightColor0.rgb) * saturate(shadowAttenuation * attenuation * poiLight.detailShadow); + light.ndotl = poiLight.nDotLSaturated; + UnityIndirect indirectLight = (UnityIndirect)0; + #ifdef UNITY_PASS_FORWARDBASE + indirectLight = CreateIndirectLight(poiMesh, poiCam, poiLight); + #endif + #ifdef UNITY_PASS_FORWARDBASE + light.color = max(light.color * 1.0, 0); + light.color = max(light.color + 0.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse * 1.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse + 0.0, 0); + #endif + poiLight.rampedLightMap = poiLight.nDotLSaturated; + poiLight.finalLighting = max(POI_BRDF_PBS(1, 0, 0, 0, poiMesh.normals[1], poiCam.viewDir, light, indirectLight).xyz, _LightingMinLightBrightness); + #ifdef UNITY_PASS_FORWARDBASE + if (_UdonLightVolumeEnabled && 1.0) + { + float3 L0 = 0; + float3 L1r = 0; + float3 L1g = 0; + float3 L1b = 0; + #ifdef LIGHTMAP_ON + LightVolumeAdditiveSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + poiLight.finalLighting += clamp(LightVolumeEvaluate(poiMesh.normals[1], L0, L1r, L1g, L1b), _LightingMinLightBrightness, _LightingCap); + #endif + } + #endif + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + #if defined(MOCHIE_PBR) || defined(POI_CLEARCOAT) + float GSAA_Filament(float3 worldNormal, float perceptualRoughness, float gsaaVariance, float gsaaThreshold) + { + float3 du = ddx(worldNormal); + float3 dv = ddy(worldNormal); + float variance = gsaaVariance * (dot(du, du) + dot(dv, dv)); + float roughness = perceptualRoughness * perceptualRoughness; + float kernelRoughness = min(2.0 * variance, gsaaThreshold); + float squareRoughness = saturate(roughness * roughness + kernelRoughness); + return sqrt(sqrt(squareRoughness)); + } + float3 GetWorldReflections(float3 reflDir, float3 worldPos, float roughness) + { + float3 baseReflDir = reflDir; + reflDir = BoxProjection(reflDir, worldPos, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax); + float4 envSample0 = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, reflDir, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p0 = DecodeHDR(envSample0, unity_SpecCube0_HDR); + float interpolator = unity_SpecCube0_BoxMin.w; + + if (interpolator < 0.99999) + { + float3 refDirBlend = BoxProjection(baseReflDir, worldPos, unity_SpecCube1_ProbePosition, unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax); + float4 envSample1 = UNITY_SAMPLE_TEXCUBE_SAMPLER_LOD(unity_SpecCube1, unity_SpecCube0, refDirBlend, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p1 = DecodeHDR(envSample1, unity_SpecCube1_HDR); + p0 = lerp(p1, p0, interpolator); + } + return p0; + } + float3 GetReflections(in PoiCam poiCam, in PoiLight pl, in PoiMesh poiMesh, float roughness, float ForceFallback, float LightFallback, TextureCube reflectionCube, float4 hdrData, float3 reflectionDir) + { + float3 reflections = 0; + float3 lighting = pl.finalLighting; + if (ForceFallback == 0) + { + + if (SceneHasReflections()) + { + #ifdef UNITY_PASS_FORWARDBASE + reflections = GetWorldReflections(reflectionDir, poiMesh.worldPos.xyz, roughness); + #endif + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + reflections *= pl.occlusion; + return reflections; + } + float GetGGXTerm(float nDotL, float nDotV, float nDotH, float roughness) + { + float visibilityTerm = 0; + if (nDotL > 0) + { + float lambdaV = nDotL * (nDotV * (1 - roughness) + roughness); + float lambdaL = nDotV * (nDotL * (1 - roughness) + roughness); + visibilityTerm = 0.5f / (lambdaV + lambdaL + 1e-5f); + float a = nDotH * roughness; + float k = roughness / (1.0 - nDotH * nDotH + a * a+ 1e-5f); + float dotTerm = k * k * UNITY_INV_PI; + visibilityTerm *= dotTerm; + } + return visibilityTerm; + } + void GetSpecFresTerm(float nDotL, float nDotV, float nDotH, float lDotH, inout float3 specularTerm, inout float3 fresnelTerm, float3 specCol, float roughness) + { + specularTerm = GetGGXTerm(nDotL, nDotV, nDotH, roughness); + fresnelTerm = FresnelTerm(specCol, lDotH); + specularTerm = max(0, specularTerm * max(0.00001, nDotL)); + } + float GetRoughness(float smoothness) + { + float rough = 1 - smoothness; + rough *= 1.7 - 0.7 * rough; + return rough; + } + float SFVisibility(float brdfRoughness, float3 directColor, float NDotV, float ExposureOcclusion) + { + float Visibility = saturate(length(directColor + EPSILON) * (1.0/(ExposureOcclusion))); //Using direct color because I think it should be generally more forgiving + return saturate(pow(NDotV + Visibility, exp2(-16.0 * brdfRoughness - 1.0)) - 1.0 + Visibility); + } + #endif + #ifdef MOCHIE_PBR + void MetallicAndSpecularFragDataInit(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + float smoothness = 1.0; + float smoothness2 = 1.0; + float metallic = 0.0; + float specularMask = 1; + float reflectionMask = 1; + smoothness *= poiFragData.smoothness; + smoothness2 *= poiFragData.smoothness2; + metallic *= poiFragData.metallic; + specularMask *= poiFragData.specularMask; + reflectionMask *= poiFragData.reflectionMask; + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + + if (0.0) + { + float4 PBRSplitMask = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy, 0.0); + assignValueToVectorFromIndex(PBRMaps, 2.0, PBRSplitMask[2.0]); + assignValueToVectorFromIndex(PBRMaps, 3.0, PBRSplitMask[3.0]); + } + if (0.0 < 4) + { + metallic *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + smoothness2 *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + reflectionMask *= 1.0; + specularMask *= 1.0; + if (0.0) + { + metallic = 1 - metallic; + } + if (0.0) + { + smoothness = 1 - smoothness; + smoothness2 = 1 - smoothness2; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + poiFragData.smoothness *= smoothness; + poiFragData.smoothness2 *= smoothness2; + poiFragData.metallic *= metallic; + poiFragData.specularMask *= specularMask; + poiFragData.reflectionMask *= reflectionMask; + } + void MochieBRDF(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, inout PoiMods poiMods) + { + float smoothness = poiFragData.smoothness; + float smoothness2 = poiFragData.smoothness2; + float metallic = poiFragData.metallic; + float specularMask = poiFragData.specularMask; + float reflectionMask = poiFragData.reflectionMask; + if (0.0 > 0) + { + metallic = customBlend(metallic, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + smoothness2 = customBlend(smoothness2, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef TPS_Penetrator + if (0.0) + { + reflectionMask = lerp(0, reflectionMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + specularMask = lerp(0, specularMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float roughness2 = GetRoughness(smoothness2); + float3 specCol = lerp(unity_ColorSpaceDielectricSpec.rgb, poiFragData.baseColor, metallic); + float omr = unity_ColorSpaceDielectricSpec.a - metallic * unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + float percepRough2 = 1 - smoothness2; + + if (1.0) + { + float3 normals = lerp(poiMesh.normals[0], poiMesh.normals[1], 1.0); + percepRough = GSAA_Filament(normals, percepRough, 0.15, 0.1); + if (0.0 == 1 && 1.0 > 0) + { + percepRough2 = GSAA_Filament(normals, percepRough2, 0.15, 0.1); + } + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float brdfRoughness2 = percepRough2 * percepRough2; + brdfRoughness2 = max(brdfRoughness2, 0.002); + float3 diffuse = poiFragData.baseColor; + float3 specular = 0; + float3 specular2 = 0; + float3 vSpecular = 0; + float3 vSpecular2 = 0; + float3 reflections = 0; + float3 environment = 0; + #if defined(POINT) || defined(SPOT) + float attenuation = lerp(poiLight.additiveShadow, 1, 0.0); + #else + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + #endif + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float pbrNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 1.0); + float pbrNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 1.0); + float pbrNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 1.0); + float3 pbrReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 1.0); + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + if (0.0 == 1) + { + float3 fresnelTerm = 1; + float3 specularTerm = 1; + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness2); + specular2 = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation * 1.0; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness2); + vSpecular2 += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * 1.0; + } + #endif + } + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _MochieReflCube, _MochieReflCube_HDR, pbrReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, pbrNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, pbrNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + reflections *= reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = max(specular + vSpecular, specular2 + vSpecular2); + environment += reflections; + diffuse *= poiLight.finalLighting; + poiFragData.finalColor = diffuse; + poiLight.finalLightAdd += environment; + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0004882813,0.0004882813,2048,2048), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #if defined(MOCHIE_PBR) + MetallicAndSpecularFragDataInit(poiFragData, poiMesh, poiMods); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #ifdef MOCHIE_PBR + MochieBRDF(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + #ifdef UNITY_PASS_FORWARDBASE + poiFragData.emission = max(poiFragData.emission * 1.0, 0); + poiFragData.finalColor = max(poiFragData.finalColor * 1.0, 0); + #endif + if (0.0 == POI_MODE_OPAQUE) + { + } + clip(poiFragData.alpha - 0.5); + if (0.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + poiFragData.finalColor += poiFragData.emission * poiMods.globalEmission; + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "Add" + Tags { "LightMode" = "ForwardAdd" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite Off + Cull Back + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_AddBlendOp], [_AddBlendOpAlpha] + Blend [_AddSrcBlend] [_AddDstBlend], [_AddSrcBlendAlpha] [_AddDstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_MOCHIEMETALLICMAPS + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdadd_fullshadows + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_ADD + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + #ifdef MOCHIE_PBR + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _MochieMetallicMaps; + float _PBRMapsStochastic; + #endif + float4 _MochieMetallicMaps_ST; + float2 _MochieMetallicMapsPan; + float _MochieMetallicMapsUV; + float _MochieMetallicMapsStochastic; + float _MochieMetallicMapInvert; + float _MochieRoughnessMapInvert; + float _MochieReflectionMaskInvert; + float _MochieSpecularMaskInvert; + float _MochieMetallicMapsMetallicChannel; + float _MochieMetallicMapsRoughnessChannel; + float _MochieMetallicMapsReflectionMaskChannel; + float _MochieMetallicMapsSpecularMaskChannel; + float _PBRNormalSelect; + float _MochieReflectionTintThemeIndex; + float _MochieSpecularTintThemeIndex; + float _MochieRoughnessMultiplier; + float _MochieMetallicMultiplier; + float _MochieReflectionStrength; + float _MochieSpecularStrength; + float4 _MochieSpecularTint; + float4 _MochieReflectionTint; + float _MochieLitFallback; + float _IgnoreCastedShadows; + float _PBRSplitMaskSample; + float _PBRSplitMaskStochastic; + float4 _PBRMaskScaleTiling; + float _MochieMetallicMasksUV; + float4 _MochieMetallicMasksPan; + float _Specular2ndLayer; + float _MochieSpecularStrength2; + float _MochieRoughnessMultiplier2; + float _RefSpecFresnelStrength; + float _SFExposureOcclusion; + TextureCube _MochieReflCube; + float4 _MochieReflCube_HDR; + float _MochieForceFallback; + float _MochieGSAAEnabled; + float _PoiGSAAVariance; + float _PoiGSAAThreshold; + float _BRDFTPSReflectionMaskStrength; + float _BRDFTPSSpecularMaskStrength; + float _BRDFTPSDepthEnabled; + float _MochieMetallicGlobalMask; + float _MochieMetallicGlobalMaskBlendType; + float _MochieSmoothnessGlobalMask; + float _MochieSmoothnessGlobalMaskBlendType; + float _MochieReflectionStrengthGlobalMask; + float _MochieReflectionStrengthGlobalMaskBlendType; + float _MochieSpecularStrengthGlobalMask; + float _MochieSpecularStrengthGlobalMaskBlendType; + #endif + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef VIGNETTE_MASKED + #ifdef _LIGHTINGMODE_REALISTIC + #if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) + #if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) + #define SUBTRACTIVE_LIGHTING 1 + #endif + #endif + float FadeShadows(float attenuation, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if HANDLE_SHADOWS_BLENDING_IN_GI || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + #if ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + attenuation = poiLight.attenuation; + #endif + float viewZ = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float shadowFadeDistance = UnityComputeShadowFadeDistance(poiMesh.worldPos, viewZ); + float shadowFade = UnityComputeShadowFade(shadowFadeDistance); + float bakedAttenuation = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + attenuation = UnityMixRealtimeAndBakedShadows(attenuation, bakedAttenuation, shadowFade); + #endif + return attenuation; + } + void ApplySubtractiveLighting(inout UnityIndirect indirectLight, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if SUBTRACTIVE_LIGHTING + poiLight.attenuation = FadeShadows(poiLight.attenuation, poiLight, poiMesh, poiCam); + float ndotl = saturate(dot(poiMesh.normals[0], _WorldSpaceLightPos0.xyz)); + float3 shadowedLightEstimate = ndotl * (1 - poiLight.attenuation) * _LightColor0.rgb; + float3 subtractedLight = indirectLight.diffuse - shadowedLightEstimate; + subtractedLight = max(subtractedLight, unity_ShadowColor.rgb); + subtractedLight = lerp(subtractedLight, indirectLight.diffuse, _LightShadowData.x); + indirectLight.diffuse = min(subtractedLight, indirectLight.diffuse); + #endif + } + UnityIndirect CreateIndirectLight(in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight) + { + UnityIndirect indirectLight; + indirectLight.diffuse = 0; + indirectLight.specular = 0; + #if defined(LIGHTMAP_ON) + indirectLight.diffuse = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, poiMesh.lightmapUV.xy)); + #if defined(DIRLIGHTMAP_COMBINED) + float4 lightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, poiMesh.lightmapUV.xy); + indirectLight.diffuse = DecodeDirectionalLightmap(indirectLight.diffuse, lightmapDirection, poiMesh.normals[1]); + #endif + ApplySubtractiveLighting(indirectLight, poiLight, poiMesh, poiCam); + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float3 dynamicLightDiffuse = DecodeRealtimeLightmap( + UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, poiMesh.lightmapUV.zw) + ); + #if defined(DIRLIGHTMAP_COMBINED) + float4 dynamicLightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_DynamicDirectionality, unity_DynamicLightmap, poiMesh.lightmapUV.zw); + indirectLight.diffuse += DecodeDirectionalLightmap(dynamicLightDiffuse, dynamicLightmapDirection, poiMesh.normals[1]); + #else + indirectLight.diffuse += dynamicLightDiffuse; + #endif + #endif + #if !defined(LIGHTMAP_ON) && !defined(DYNAMICLIGHTMAP_ON) + #if UNITY_LIGHT_PROBE_PROXY_VOLUME + if (unity_ProbeVolumeParams.x == 1) + { + indirectLight.diffuse = SHEvalLinearL0L1_SampleProbeVolume( + float4(poiMesh.normals[1], 1), poiMesh.worldPos + ); + indirectLight.diffuse = max(0, indirectLight.diffuse); + #if defined(UNITY_COLORSPACE_GAMMA) + indirectLight.diffuse = LinearToGammaSpace(indirectLight.diffuse); + #endif + } + else + { + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + } + #else + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + #endif + #endif + indirectLight.diffuse *= poiLight.occlusion; + return indirectLight; + } + #endif + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_REALISTIC + UnityLight light; + light.dir = poiLight.direction; + light.color = max(0, _LightColor0.rgb) * saturate(shadowAttenuation * attenuation * poiLight.detailShadow); + light.ndotl = poiLight.nDotLSaturated; + UnityIndirect indirectLight = (UnityIndirect)0; + #ifdef UNITY_PASS_FORWARDBASE + indirectLight = CreateIndirectLight(poiMesh, poiCam, poiLight); + #endif + #ifdef UNITY_PASS_FORWARDBASE + light.color = max(light.color * 1.0, 0); + light.color = max(light.color + 0.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse * 1.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse + 0.0, 0); + #endif + poiLight.rampedLightMap = poiLight.nDotLSaturated; + poiLight.finalLighting = max(POI_BRDF_PBS(1, 0, 0, 0, poiMesh.normals[1], poiCam.viewDir, light, indirectLight).xyz, _LightingMinLightBrightness); + #ifdef UNITY_PASS_FORWARDBASE + if (_UdonLightVolumeEnabled && 1.0) + { + float3 L0 = 0; + float3 L1r = 0; + float3 L1g = 0; + float3 L1b = 0; + #ifdef LIGHTMAP_ON + LightVolumeAdditiveSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + poiLight.finalLighting += clamp(LightVolumeEvaluate(poiMesh.normals[1], L0, L1r, L1g, L1b), _LightingMinLightBrightness, _LightingCap); + #endif + } + #endif + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + #if defined(MOCHIE_PBR) || defined(POI_CLEARCOAT) + float GSAA_Filament(float3 worldNormal, float perceptualRoughness, float gsaaVariance, float gsaaThreshold) + { + float3 du = ddx(worldNormal); + float3 dv = ddy(worldNormal); + float variance = gsaaVariance * (dot(du, du) + dot(dv, dv)); + float roughness = perceptualRoughness * perceptualRoughness; + float kernelRoughness = min(2.0 * variance, gsaaThreshold); + float squareRoughness = saturate(roughness * roughness + kernelRoughness); + return sqrt(sqrt(squareRoughness)); + } + float3 GetWorldReflections(float3 reflDir, float3 worldPos, float roughness) + { + float3 baseReflDir = reflDir; + reflDir = BoxProjection(reflDir, worldPos, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax); + float4 envSample0 = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, reflDir, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p0 = DecodeHDR(envSample0, unity_SpecCube0_HDR); + float interpolator = unity_SpecCube0_BoxMin.w; + + if (interpolator < 0.99999) + { + float3 refDirBlend = BoxProjection(baseReflDir, worldPos, unity_SpecCube1_ProbePosition, unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax); + float4 envSample1 = UNITY_SAMPLE_TEXCUBE_SAMPLER_LOD(unity_SpecCube1, unity_SpecCube0, refDirBlend, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p1 = DecodeHDR(envSample1, unity_SpecCube1_HDR); + p0 = lerp(p1, p0, interpolator); + } + return p0; + } + float3 GetReflections(in PoiCam poiCam, in PoiLight pl, in PoiMesh poiMesh, float roughness, float ForceFallback, float LightFallback, TextureCube reflectionCube, float4 hdrData, float3 reflectionDir) + { + float3 reflections = 0; + float3 lighting = pl.finalLighting; + if (ForceFallback == 0) + { + + if (SceneHasReflections()) + { + #ifdef UNITY_PASS_FORWARDBASE + reflections = GetWorldReflections(reflectionDir, poiMesh.worldPos.xyz, roughness); + #endif + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + reflections *= pl.occlusion; + return reflections; + } + float GetGGXTerm(float nDotL, float nDotV, float nDotH, float roughness) + { + float visibilityTerm = 0; + if (nDotL > 0) + { + float lambdaV = nDotL * (nDotV * (1 - roughness) + roughness); + float lambdaL = nDotV * (nDotL * (1 - roughness) + roughness); + visibilityTerm = 0.5f / (lambdaV + lambdaL + 1e-5f); + float a = nDotH * roughness; + float k = roughness / (1.0 - nDotH * nDotH + a * a+ 1e-5f); + float dotTerm = k * k * UNITY_INV_PI; + visibilityTerm *= dotTerm; + } + return visibilityTerm; + } + void GetSpecFresTerm(float nDotL, float nDotV, float nDotH, float lDotH, inout float3 specularTerm, inout float3 fresnelTerm, float3 specCol, float roughness) + { + specularTerm = GetGGXTerm(nDotL, nDotV, nDotH, roughness); + fresnelTerm = FresnelTerm(specCol, lDotH); + specularTerm = max(0, specularTerm * max(0.00001, nDotL)); + } + float GetRoughness(float smoothness) + { + float rough = 1 - smoothness; + rough *= 1.7 - 0.7 * rough; + return rough; + } + float SFVisibility(float brdfRoughness, float3 directColor, float NDotV, float ExposureOcclusion) + { + float Visibility = saturate(length(directColor + EPSILON) * (1.0/(ExposureOcclusion))); //Using direct color because I think it should be generally more forgiving + return saturate(pow(NDotV + Visibility, exp2(-16.0 * brdfRoughness - 1.0)) - 1.0 + Visibility); + } + #endif + #ifdef MOCHIE_PBR + void MetallicAndSpecularFragDataInit(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + float smoothness = 1.0; + float smoothness2 = 1.0; + float metallic = 0.0; + float specularMask = 1; + float reflectionMask = 1; + smoothness *= poiFragData.smoothness; + smoothness2 *= poiFragData.smoothness2; + metallic *= poiFragData.metallic; + specularMask *= poiFragData.specularMask; + reflectionMask *= poiFragData.reflectionMask; + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + + if (0.0) + { + float4 PBRSplitMask = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy, 0.0); + assignValueToVectorFromIndex(PBRMaps, 2.0, PBRSplitMask[2.0]); + assignValueToVectorFromIndex(PBRMaps, 3.0, PBRSplitMask[3.0]); + } + if (0.0 < 4) + { + metallic *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + smoothness2 *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + reflectionMask *= 1.0; + specularMask *= 1.0; + if (0.0) + { + metallic = 1 - metallic; + } + if (0.0) + { + smoothness = 1 - smoothness; + smoothness2 = 1 - smoothness2; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + poiFragData.smoothness *= smoothness; + poiFragData.smoothness2 *= smoothness2; + poiFragData.metallic *= metallic; + poiFragData.specularMask *= specularMask; + poiFragData.reflectionMask *= reflectionMask; + } + void MochieBRDF(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, inout PoiMods poiMods) + { + float smoothness = poiFragData.smoothness; + float smoothness2 = poiFragData.smoothness2; + float metallic = poiFragData.metallic; + float specularMask = poiFragData.specularMask; + float reflectionMask = poiFragData.reflectionMask; + if (0.0 > 0) + { + metallic = customBlend(metallic, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + smoothness2 = customBlend(smoothness2, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef TPS_Penetrator + if (0.0) + { + reflectionMask = lerp(0, reflectionMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + specularMask = lerp(0, specularMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float roughness2 = GetRoughness(smoothness2); + float3 specCol = lerp(unity_ColorSpaceDielectricSpec.rgb, poiFragData.baseColor, metallic); + float omr = unity_ColorSpaceDielectricSpec.a - metallic * unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + float percepRough2 = 1 - smoothness2; + + if (1.0) + { + float3 normals = lerp(poiMesh.normals[0], poiMesh.normals[1], 1.0); + percepRough = GSAA_Filament(normals, percepRough, 0.15, 0.1); + if (0.0 == 1 && 1.0 > 0) + { + percepRough2 = GSAA_Filament(normals, percepRough2, 0.15, 0.1); + } + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float brdfRoughness2 = percepRough2 * percepRough2; + brdfRoughness2 = max(brdfRoughness2, 0.002); + float3 diffuse = poiFragData.baseColor; + float3 specular = 0; + float3 specular2 = 0; + float3 vSpecular = 0; + float3 vSpecular2 = 0; + float3 reflections = 0; + float3 environment = 0; + #if defined(POINT) || defined(SPOT) + float attenuation = lerp(poiLight.additiveShadow, 1, 0.0); + #else + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + #endif + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float pbrNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 1.0); + float pbrNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 1.0); + float pbrNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 1.0); + float3 pbrReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 1.0); + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + if (0.0 == 1) + { + float3 fresnelTerm = 1; + float3 specularTerm = 1; + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness2); + specular2 = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation * 1.0; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness2); + vSpecular2 += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * 1.0; + } + #endif + } + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _MochieReflCube, _MochieReflCube_HDR, pbrReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, pbrNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, pbrNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + reflections *= reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = max(specular + vSpecular, specular2 + vSpecular2); + environment += reflections; + diffuse *= poiLight.finalLighting; + poiFragData.finalColor = diffuse; + poiLight.finalLightAdd += environment; + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0004882813,0.0004882813,2048,2048), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #if defined(MOCHIE_PBR) + MetallicAndSpecularFragDataInit(poiFragData, poiMesh, poiMods); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #ifdef MOCHIE_PBR + MochieBRDF(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + if (0.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + if (4.0 == 4) + { + poiFragData.alpha = saturate(poiFragData.alpha * 10.0); + } + if (0.0 != POI_MODE_TRANSPARENT) + { + poiFragData.finalColor *= poiFragData.alpha; + } + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Back + AlphaToMask Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_MOCHIEMETALLICMAPS + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_instancing + #pragma multi_compile_shadowcaster + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_SHADOW + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0004882813,0.0004882813,2048,2048), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + poiFragData.finalColor = poiFragData.baseColor; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "META" + Tags { "LightMode" = "Meta" } + ZWrite [_ZWrite] + Cull Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_MOCHIEMETALLICMAPS + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_instancing + #pragma multi_compile_fragment _ VERTEXLIGHT_ON + #define POI_PASS_META + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + #include "UnityMetaPass.cginc" + #ifndef VRC_LIGHT_VOLUMES_INCLUDED + #define VRC_LIGHT_VOLUMES_INCLUDED + #define VRCLV_VERSION 2 + #define VRCLV_MAX_VOLUMES_COUNT 32 + #define VRCLV_MAX_LIGHTS_COUNT 128 + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + cbuffer LightVolumeUniforms { + #endif + uniform float _UdonLightVolumeEnabled; + uniform float _UdonLightVolumeVersion; + uniform float _UdonLightVolumeCount; + uniform float _UdonLightVolumeAdditiveMaxOverdraw; + uniform float _UdonLightVolumeAdditiveCount; + uniform float _UdonLightVolumeProbesBlend; + uniform float _UdonLightVolumeSharpBounds; + uniform float4x4 _UdonLightVolumeInvWorldMatrix[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeRotation[VRCLV_MAX_VOLUMES_COUNT * 2]; // Legacy! Used in this version to have back compatibility with older worlds. Array commented above will be used in future releases! Legacy! + uniform float3 _UdonLightVolumeInvLocalEdgeSmooth[VRCLV_MAX_VOLUMES_COUNT]; + uniform float3 _UdonLightVolumeUvw[VRCLV_MAX_VOLUMES_COUNT * 6]; // Legacy! AABB Bounds of islands on the 3D Texture atlas. Array commented above will be used in future releases! Legacy! + uniform float4 _UdonLightVolumeOcclusionUvw[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeColor[VRCLV_MAX_VOLUMES_COUNT]; + uniform float _UdonPointLightVolumeCount; + uniform float _UdonPointLightVolumeCubeCount; + uniform float4 _UdonPointLightVolumePosition[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeColor[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeDirection[VRCLV_MAX_LIGHTS_COUNT]; + uniform float3 _UdonPointLightVolumeCustomID[VRCLV_MAX_LIGHTS_COUNT]; + uniform float _UdonLightBrightnessCutoff; + uniform float _UdonLightVolumeOcclusionCount; + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + } + #endif + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + uniform Texture3D _UdonLightVolume; + uniform SamplerState sampler_UdonLightVolume; + uniform Texture2DArray _UdonPointLightVolumeTexture; + #define LV_SAMPLE(tex, uvw) tex.SampleLevel(sampler_UdonLightVolume, uvw, 0) + #else + #define LV_SAMPLE(tex, uvw) float4(0,0,0,0) + #endif + #define LV_PI 3.141592653589793f + #define LV_PI2 6.283185307179586f + float LV_Smoothstep01(float x) { + return x * x * (3 - 2 * x); + } + float3 LV_MultiplyVectorByQuaternion(float3 v, float4 q) { + float3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); + } + float3 LV_MultiplyVectorByMatrix2x3(float3 v, float3 r0, float3 r1) { + float3 r2 = cross(r0, r1); + return float3(dot(v, r0), dot(v, r1), dot(v, r2)); + } + float LV_FastAcos(float x) { + float absX = abs(x); + float res = -0.156583f * absX + LV_PI * 0.5f; + res *= sqrt(1.0f - absX); + return (x >= 0) ? res : (LV_PI - res); + } + float LV_DistributionGGX(float NoH, float roughness) { + float f = (roughness - 1) * ((roughness + 1) * (NoH * NoH)) + 1; + return (roughness * roughness) / ((float) LV_PI * f * f); + } + bool LV_PointLocalAABB(float3 localUVW) { + return all(abs(localUVW) <= 0.5); + } + float3 LV_LocalFromVolume(uint volumeID, float3 worldPos) { + return mul(_UdonLightVolumeInvWorldMatrix[volumeID], float4(worldPos, 1.0)).xyz; + } + float LV_EvaluateSH(float L0, float3 L1, float3 n) { + return L0 + dot(L1, n); + } + float4 LV_SampleCubemapArray(uint id, float3 dir) { + float3 absDir = abs(dir); + float2 uv; + uint face; + if (absDir.x >= absDir.y && absDir.x >= absDir.z) { + face = dir.x > 0 ? 0 : 1; + uv = float2((dir.x > 0 ? -dir.z : dir.z), -dir.y) * rcp(absDir.x); + } else if (absDir.y >= absDir.z) { + face = dir.y > 0 ? 2 : 3; + uv = float2(dir.x, (dir.y > 0 ? dir.z : -dir.z)) * rcp(absDir.y); + } else { + face = dir.z > 0 ? 4 : 5; + uv = float2((dir.z > 0 ? dir.x : -dir.x), -dir.y) * rcp(absDir.z); + } + float3 uvid = float3(uv * 0.5 + 0.5, id * 6 + face); + return LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + } + float4 LV_ProjectQuadLightIrradianceSH(float3 shadingPosition, float3 lightVertices[4]) { + [unroll] for (uint edge0 = 0; edge0 < 4; edge0++) { + lightVertices[edge0] = normalize(lightVertices[edge0] - shadingPosition); + } + const float3 zhDir0 = float3(0.866025, -0.500001, -0.000004); + const float3 zhDir1 = float3(-0.759553, 0.438522, -0.480394); + const float3 zhDir2 = float3(-0.000002, 0.638694, 0.769461); + const float3 zhWeightL1y = float3(2.1995339f, 2.50785367f, 1.56572711f); + const float3 zhWeightL1z = float3(-1.82572523f, -2.08165037f, 0.00000000f); + const float3 zhWeightL1x = float3(2.42459869f, 1.44790525f, 0.90397552f); + float solidAngle = 0.0; + float3 surfaceIntegral = 0.0; + [loop] for (uint edge1 = 0; edge1 < 4; edge1++) { + uint next = (edge1 + 1) % 4; + uint prev = (edge1 + 4 - 1) % 4; + float3 prevVert = lightVertices[prev]; + float3 thisVert = lightVertices[edge1]; + float3 nextVert = lightVertices[next]; + float3 a = cross(thisVert, prevVert); + float3 b = cross(thisVert, nextVert); + float lenA = length(a); + float lenB = length(b); + solidAngle += LV_FastAcos(clamp(dot(a, b) / (lenA * lenB), -1, 1)); + float3 mu = b * rcp(lenB); + float cosGamma = dot(thisVert, nextVert); + float gamma = LV_FastAcos(clamp(cosGamma, -1, 1)); + surfaceIntegral.x += gamma * dot(zhDir0, mu); + surfaceIntegral.y += gamma * dot(zhDir1, mu); + surfaceIntegral.z += gamma * dot(zhDir2, mu); + } + solidAngle = solidAngle - LV_PI2; + surfaceIntegral *= 0.5; + const float normalizationL0 = 0.5f * sqrt(1.0f / LV_PI); + float l0 = normalizationL0 * solidAngle; + float l1y = dot(zhWeightL1y, surfaceIntegral); + float l1z = dot(zhWeightL1z, surfaceIntegral); + float l1x = dot(zhWeightL1x, surfaceIntegral); + const float cosineKernelL0 = LV_PI; // (1) + const float cosineKernelL1 = LV_PI2 / 3.0f; // (1) + const float oneOverPi = 1.0f / LV_PI; // (2) + const float normalizationL1 = 0.5f * sqrt(3.0f / LV_PI); // (3) + const float weightL0 = cosineKernelL0 * normalizationL0 * oneOverPi; // (1), (2), (3) + const float weightL1 = cosineKernelL1 * normalizationL1 * oneOverPi; // (1), (2), (3) + l0 *= weightL0; + l1y *= weightL1; + l1z *= weightL1; + l1x *= weightL1; + return float4(l1x, l1y, l1z, l0); + } + void LV_QuadLight(float3 worldPos, float3 centroidPos, float4 rotationQuat, float2 size, float3 color, float sqMaxDist, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 lightToWorldPos = worldPos - centroidPos; + float3 normal = LV_MultiplyVectorByQuaternion(float3(0, 0, 1), rotationQuat); + if (dot(normal, lightToWorldPos) < 0.0) return; + float sqCutoffDist = sqMaxDist - dot(lightToWorldPos, lightToWorldPos); + color.rgb *= saturate(sqCutoffDist / sqMaxDist) * LV_PI * occlusion; + float2 halfSize = size * 0.5f; + float3 xAxis = LV_MultiplyVectorByQuaternion(float3(1, 0, 0), rotationQuat); + float3 yAxis = cross(normal, xAxis); + float3 verts[4]; + verts[0] = centroidPos + (-halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[1] = centroidPos + ( halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[2] = centroidPos + ( halfSize.x * xAxis) + (-halfSize.y * yAxis); + verts[3] = centroidPos + (-halfSize.x * xAxis) + (-halfSize.y * yAxis); + float4 areaLightSH = LV_ProjectQuadLightIrradianceSH(worldPos, verts); + float lenL1 = length(areaLightSH.xyz); + if (lenL1 > areaLightSH.w) areaLightSH.xyz *= areaLightSH.w / lenL1; + L0 += areaLightSH.w * color.rgb; + L1r += areaLightSH.xyz * color.r; + L1g += areaLightSH.xyz * color.g; + L1b += areaLightSH.xyz * color.b; + count++; + } + float3 LV_PointLightAttenuation(float sqdist, float sqlightSize, float3 color, float brightnessCutoff, float sqMaxDist) { + float mask = saturate(1 - sqdist / sqMaxDist); + return mask * mask * color * sqlightSize / (sqdist + sqlightSize); + } + float LV_PointLightSolidAngle(float sqdist, float sqlightSize) { + return saturate(sqrt(sqdist / (sqlightSize + sqdist))); + } + void LV_SphereLight(float sqdist, float3 dirN, float sqlightSize, float3 color, float occlusion, float sqMaxDist, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 att = LV_PointLightAttenuation(sqdist, sqlightSize, color, _UdonLightBrightnessCutoff, sqMaxDist); + float3 l0 = att * occlusion; + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLight(float sqdist, float3 dirN, float sqlightSize, float3 att, float spotMask, float cosAngle, float coneFalloff, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float smoothedCone = LV_Smoothstep01(saturate(spotMask * coneFalloff)); + float3 l0 = att * (occlusion * smoothedCone); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * saturate(1 - cosAngle)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightCookie(float sqdist, float3 dirN, float sqlightSize, float3 att, float4 lightRot, float tanAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 localDir = LV_MultiplyVectorByQuaternion(-dirN, lightRot); + float2 uv = localDir.xy * rcp(localDir.z * tanAngle); + if ( + localDir.z <= 0.0 || // Culling by direction + abs(uv.x) > 1.0 || abs(uv.y) > 1.0 // Culling by UV + ) return; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 - customId - 1; + float3 uvid = float3(uv * 0.5 + 0.5, id); + float angleSize = saturate(rsqrt(1 + tanAngle * tanAngle)); + float4 cookie = LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + float3 l0 = att * cookie.rgb * (cookie.a * occlusion); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * (1 - angleSize)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightAttenuationLUT(float sqdist, float3 dirN, float sqlightSize, float3 color, float spotMask, float cosAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float dirRadius = sqdist * abs(sqlightSize); + float spot = 1 - saturate(spotMask * rcp(1 - cosAngle)); + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId - 1; + float3 uvid = float3(sqrt(float2(spot, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * occlusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } + void LV_PointLight(uint id, float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 customID_data = _UdonPointLightVolumeCustomID[id]; + int shadowId = (int) customID_data.y; // Shadowmask id + int customId = (int) customID_data.x; // Custom Texture ID + float sqrRange = customID_data.z; // Squared culling distance + float4 pos = _UdonPointLightVolumePosition[id]; // Light position and inversed squared range + float3 dir = pos.xyz - worldPos; + float sqlen = max(dot(dir, dir), 1e-6); + if (sqlen > sqrRange) return; // Early distance based culling + float3 dirN = dir * rsqrt(sqlen); + float lightOcclusion = 1; + if (_UdonLightVolumeOcclusionCount != 0 && shadowId >= 0) { + lightOcclusion = dot(occlusion, float4(shadowId == 0, shadowId == 1, shadowId == 2, shadowId == 3)); + } + float4 color = _UdonPointLightVolumeColor[id]; // Color, angle + float4 ldir = _UdonPointLightVolumeDirection[id]; // Dir + falloff or Rotation + if (pos.w < 0) { // It is a spot light + float angle = color.w; + float spotMask = dot(ldir.xyz, -dirN) - angle; + if(customId >= 0 && spotMask < 0) return; // Spot cone based culling + if (customId > 0) { // If it uses Attenuation LUT + LV_SphereSpotLightAttenuationLUT(sqlen, dirN, -pos.w, color.rgb, spotMask, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + float3 att = LV_PointLightAttenuation(sqlen, -pos.w, color.rgb, _UdonLightBrightnessCutoff, sqrRange); + if (customId < 0) { // If uses cookie + LV_SphereSpotLightCookie(sqlen, dirN, -pos.w, att, ldir, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + LV_SphereSpotLight(sqlen, dirN, -pos.w, att, spotMask, angle, ldir.w, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + } else if (color.w <= 1.5f) { // It is a point light + if (customId > 0) { // Using LUT + float invSqRange = abs(pos.w); // Sign of range defines if it's point light (positive) or a spot light (negative) + float dirRadius = sqlen * invSqRange; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId; + float3 uvid = float3(sqrt(float2(0, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * lightOcclusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } else { // If it uses default parametric attenuation + float3 l0 = 0, l1r = 0, l1g = 0, l1b = 0; + LV_SphereLight(sqlen, dirN, pos.w, color.rgb, lightOcclusion, sqrRange, l0, l1r, l1g, l1b, count); + float3 cubeColor = 1; + if (customId < 0) { // If it uses a cubemap + uint id = -customId - 1; // Cubemap ID starts from zero and should not take in count texture array slices count. + cubeColor = LV_SampleCubemapArray(id, LV_MultiplyVectorByQuaternion(dirN, ldir)).xyz; + } + L0 += l0 * cubeColor; + L1r += l1r * cubeColor.r; + L1g += l1g * cubeColor.g; + L1b += l1b * cubeColor.b; + } + } else { // It is an area light + LV_QuadLight(worldPos, pos.xyz, ldir, float2(pos.w, color.w - 2.0f), color.rgb, sqrRange, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + void LV_SampleLightVolumeTex(float3 uvw0, float3 uvw1, float3 uvw2, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b) { + float4 tex0 = LV_SAMPLE(_UdonLightVolume, uvw0); + float4 tex1 = LV_SAMPLE(_UdonLightVolume, uvw1); + float4 tex2 = LV_SAMPLE(_UdonLightVolume, uvw2); + L0 = tex0.rgb; + L1r = float3(tex1.r, tex2.r, tex0.a); + L1g = float3(tex1.g, tex2.g, tex1.a); + L1b = float3(tex1.b, tex2.b, tex2.a); + } + float LV_BoundsMask(float3 localUVW, float3 invLocalEdgeSmooth) { + float3 distToMin = (localUVW + 0.5) * invLocalEdgeSmooth; + float3 distToMax = (0.5 - localUVW) * invLocalEdgeSmooth; + float3 fade = saturate(min(distToMin, distToMax)); + return fade.x * fade.y * fade.z; + } + void LV_SampleLightProbe(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz; + L1g += unity_SHAg.xyz; + L1b += unity_SHAb.xyz; + } + void LV_SampleLightProbeDering(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz * 0.565f; + L1g += unity_SHAg.xyz * 0.565f; + L1b += unity_SHAb.xyz * 0.565f; + } + void LV_SampleVolume(uint id, float3 localUVW, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + float3 uvw0 = uvwScaled + _UdonLightVolumeUvw[uvwID].xyz; + float3 uvw1 = uvwScaled + _UdonLightVolumeUvw[uvwID + 2].xyz; + float3 uvw2 = uvwScaled + _UdonLightVolumeUvw[uvwID + 4].xyz; + float3 l0, l1r, l1g, l1b; + LV_SampleLightVolumeTex(uvw0, uvw1, uvw2, l0, l1r, l1g, l1b); + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + occlusion = 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + occlusion = 1; + } + float4 color = _UdonLightVolumeColor[id]; + L0 += l0 * color.rgb; + l1r *= color.r; + l1g *= color.g; + l1b *= color.b; + if (color.a != 0) { + float3 r0 = _UdonLightVolumeRotation[id * 2].xyz; + float3 r1 = _UdonLightVolumeRotation[id * 2 + 1].xyz; + L1r += LV_MultiplyVectorByMatrix2x3(l1r, r0, r1); + L1g += LV_MultiplyVectorByMatrix2x3(l1g, r0, r1); + L1b += LV_MultiplyVectorByMatrix2x3(l1b, r0, r1); + } else { + L1r += l1r; + L1g += l1g; + L1b += l1b; + } + } + float4 LV_SampleVolumeOcclusion(uint id, float3 localUVW) { + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + return 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + return 1; + } + } + void LV_PointLightVolumeSH(float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + uint pointCount = min((uint) _UdonPointLightVolumeCount, VRCLV_MAX_LIGHTS_COUNT); + if (pointCount == 0) return; + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_LIGHTS_COUNT); + uint pcount = 0; // Point lights counter + [loop] for (uint pid = 0; pid < pointCount && pcount < maxOverdraw; pid++) { + LV_PointLight(pid, worldPos, occlusion, L0, L1r, L1g, L1b, pcount); + } + } + void LV_LightVolumeSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + if (volumesCount == 0) { // Legacy! Fallback to default light probes if Light Volume are not enabled or a version is too old to have a support. Legacy! + LV_SampleLightProbe(L0, L1r, L1g, L1b); + return; + } + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + bool lightProbesBlend = _UdonLightVolumeProbesBlend; + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + [loop] for (uint id = 0; id < volumesCount; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA && lightProbesBlend) { + LV_SampleLightProbe(L0, L1r, L1g, L1b); + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + float3 L0_A = 0; + float3 L1r_A = 0; + float3 L1g_A = 0; + float3 L1b_A = 0; + float4 occlusion_A = 1; + LV_SampleVolume(volumeID_A, localUVW_A, L0_A, L1r_A, L1g_A, L1b_A, occlusion_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || isNoA || (_UdonLightVolumeSharpBounds && isNoB)) { // Returning SH A result if it's the center of mask or out of bounds + L0 += L0_A; + L1r += L1r_A; + L1g += L1g_A; + L1b += L1b_A; + occlusion = occlusion_A; + occlusion *= mOcclusion; + return; + } + float3 L0_B = 0; + float3 L1r_B = 0; + float3 L1g_B = 0; + float3 L1b_B = 0; + float4 occlusion_B = 1; + if (isNoB && lightProbesBlend) { // No Volume found and light volumes blending enabled + LV_SampleLightProbe(L0_B, L1r_B, L1g_B, L1b_B); + } else { // Blending Volume A and Volume B + localUVW_B = isNoB ? localUVW : localUVW_B; + volumeID_B = isNoB ? volumesCount - 1 : volumeID_B; + LV_SampleVolume(volumeID_B, localUVW_B, L0_B, L1r_B, L1g_B, L1b_B, occlusion_B); + } + occlusion = lerp(occlusion_B, occlusion_A, mask); + occlusion *= mOcclusion; + L0 += lerp(L0_B, L0_A, mask); + L1r += lerp(L1r_B, L1r_A, mask); + L1g += lerp(L1g_B, L1g_A, mask); + L1b += lerp(L1b_B, L1b_A, mask); + } + void LV_LightVolumeAdditiveSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + if (additiveCount == 0 && (uint) _UdonPointLightVolumeCount == 0) return; // Legacy! + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW for Y Axis and Free rotations + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + uint count = min(_UdonLightVolumeOcclusionCount == 0 ? additiveCount : volumesCount, VRCLV_MAX_VOLUMES_COUNT); // Only use all volumes if occlusion volumes are enabled + [loop] for (uint id = 0; id < count; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA || _UdonLightVolumeOcclusionCount == 0) { + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + occlusion = LV_SampleVolumeOcclusion(volumeID_A, localUVW_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || (_UdonLightVolumeSharpBounds && isNoB)) { + occlusion *= mOcclusion; + return; // Returning A result if it's the center of mask or out of bounds + } + if (isNoB) occlusion = lerp(1, occlusion, mask); + else occlusion = lerp(LV_SampleVolumeOcclusion(volumeID_B, localUVW_B), occlusion, mask); + occlusion *= mOcclusion; + } + float3 LightVolumeSpecular(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specColor = max(float3(dot(reflect(-L1r, worldNormal), viewDir), dot(reflect(-L1g, worldNormal), viewDir), dot(reflect(-L1b, worldNormal), viewDir)), 0); + float3 rDir = normalize(normalize(L1r) + viewDir); + float3 gDir = normalize(normalize(L1g) + viewDir); + float3 bDir = normalize(normalize(L1b) + viewDir); + float rNh = saturate(dot(worldNormal, rDir)); + float gNh = saturate(dot(worldNormal, gDir)); + float bNh = saturate(dot(worldNormal, bDir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float rSpec = LV_DistributionGGX(rNh, roughExp); + float gSpec = LV_DistributionGGX(gNh, roughExp); + float bSpec = LV_DistributionGGX(bNh, roughExp); + float3 specs = (rSpec + gSpec + bSpec) * f0; + float3 coloredSpecs = specs * specColor; + float3 a = coloredSpecs + specs * L0; + float3 b = coloredSpecs * 3; + return max(lerp(a, b, smoothness) * 0.5f, 0.0); + } + float3 LightVolumeSpecular(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecular(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeSpecularDominant(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 dominantDir = L1r + L1g + L1b; + float3 dir = normalize(normalize(dominantDir) + viewDir); + float nh = saturate(dot(worldNormal, dir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float spec = LV_DistributionGGX(nh, roughExp); + return max(spec * L0 * f0, 0.0) * 1.5f; + } + float3 LightVolumeSpecularDominant(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecularDominant(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeEvaluate(float3 worldNormal, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + return float3(LV_EvaluateSH(L0.r, L1r, worldNormal), LV_EvaluateSH(L0.g, L1g, worldNormal), LV_EvaluateSH(L0.b, L1b, worldNormal)); + } + void LightVolumeSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled == 0) { + LV_SampleLightProbeDering(L0, L1r, L1g, L1b); + } else { + float4 occlusion = 1; + LV_LightVolumeSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + void LightVolumeAdditiveSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled != 0) { + float4 occlusion = 1; + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + float3 LightVolumeSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float3 LightVolumeAdditiveSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return 0; + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float LightVolumesEnabled() { + return _UdonLightVolumeEnabled; + } + float LightVolumesVersion() { + return _UdonLightVolumeVersion == 0 ? _UdonLightVolumeEnabled : _UdonLightVolumeVersion; + } + #endif + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float _GIEmissionMultiplier; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0004882813,0.0004882813,2048,2048), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + #ifdef POI_PASS_META + UnityMetaInput meta; + UNITY_INITIALIZE_OUTPUT(UnityMetaInput, meta); + meta.Emission = poiFragData.emission * 1.0 * poiMods.globalEmission; + meta.Albedo = saturate(poiFragData.finalColor.rgb); + meta.SpecularColor = poiLight.finalLightAdd; + return UnityMetaFragment(meta) + POI_SAFE_RGB0; + #endif + poiFragData.finalColor += poiFragData.emission * poiMods.globalEmission; + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + } + CustomEditor "Thry.ShaderEditor" +} diff --git a/Assets/Quiz/Materials/DownCount/OptimizedShaders/Clock/Poiyomi Pro World.shader.meta b/Assets/Quiz/Materials/DownCount/OptimizedShaders/Clock/Poiyomi Pro World.shader.meta new file mode 100644 index 0000000..cde4493 --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/OptimizedShaders/Clock/Poiyomi Pro World.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3d743798a82d6744782b4cb59aee8244 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/DownCount/OptimizedShaders/Floor.meta b/Assets/Quiz/Materials/DownCount/OptimizedShaders/Floor.meta new file mode 100644 index 0000000..55c3a73 --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/OptimizedShaders/Floor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 838d352d9ca45df438e68404e1d6842b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/DownCount/OptimizedShaders/Floor/Poiyomi Pro World.shader b/Assets/Quiz/Materials/DownCount/OptimizedShaders/Floor/Poiyomi Pro World.shader new file mode 100644 index 0000000..93a03a9 --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/OptimizedShaders/Floor/Poiyomi Pro World.shader @@ -0,0 +1,13689 @@ +Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/79104b7c72559ae419b9b5c0aaf3f627" +{ + Properties + { + [HideInInspector] shader_master_label ("Poiyomi 9.3.48", Float) = 0 + [HideInInspector] shader_is_using_thry_editor ("", Float) = 0 + [HideInInspector] shader_locale ("0db0b86376c3dca4b9a6828ef8615fe0", Float) = 0 + [HideInInspector] footer_website ("{texture:{name:icon-poilogo,height:24},action:{type:URL,data:https://www.poiyomi.com},hover:WEBSITE}", Float) = 0 + [HideInInspector] footer_discord ("{texture:{name:icon-discord,height:24},action:{type:URL,data:https://discord.gg/Ays52PY},hover:DISCORD}", Float) = 0 + [HideInInspector] footer_patreon ("{texture:{name:icon-patreon-new,height:24},action:{type:URL,data:https://www.patreon.com/poiyomi},hover:PATREON}", Float) = 0 + [HideInInspector] footer_youtube ("{texture:{name:icon-youtube,height:24},action:{type:URL,data:https://www.youtube.com/poiyomi},hover:YOUTUBE}", Float) = 0 + [HideInInspector] footer_github ("{texture:{name:icon-github,height:24},action:{type:URL,data:https://github.com/poiyomi/PoiyomiToonShader},hover:GITHUB}", Float) = 0 + [HideInInspector] footer_bluesky ("{texture:{name:icon-bluesky,height:24},action:{type:URL,data:https://bsky.app/profile/poiyomi.com},hover:BLUESKY}", Float) = 0 + [HideInInspector] footer_twitter ("{texture:{name:icon-twitter,height:24},action:{type:URL,data:https://x.com/poiyomi},hover:X}", Float) = 0 + [Header(POIYOMI SHADER UI FAILED TO LOAD)] + [Header(. This is caused by scripts failing to compile. It can be fixed.)] + [Header(. The inspector will look broken and will not work properly until fixed.)] + [Header(. Please check your console for script errors.)] + [Header(. You can filter by errors in the console window.)] + [Header(. Often the topmost error points to the erroring script.)] + [Space(30)][Header(Common Error Causes)] + [Header(. Installing multiple Poiyomi Shader packages)] + [Header(. Make sure to delete the Poiyomi shader folder before you update Poiyomi.)] + [Header(. If a package came with Poiyomi this is bad practice and can cause issues.)] + [Header(. Delete the package and import it without any Poiyomi components.)] + [Header(. Bad VRCSDK installation (e.g. Both VCC and Standalone))] + [Header(. Delete the VRCSDK Folder in Assets if you are using the VCC.)] + [Header(. Avoid using third party SDKs. They can cause incompatibility.)] + [Header(. Script Errors in other scripts)] + [Header(. Outdated tools or prefabs can cause this.)] + [Header(. Update things that are throwing errors or move them outside the project.)] + [Space(30)][Header(Visit Our Discord to Ask For Help)] + [Space(5)]_ShaderUIWarning0 (" → discord.gg/poiyomi ← We can help you get it fixed! --{condition_showS:(0==1)}", Int) = -0 + [Space(1400)][Header(POIYOMI SHADER UI FAILED TO LOAD)] + _ShaderUIWarning1 ("Please scroll up for more information! --{condition_showS:(0==1)}", Int) = -0 + [HideInInspector] _ForgotToLockMaterial (";;YOU_FORGOT_TO_LOCK_THIS_MATERIAL;", Int) = 1 + [ThryShaderOptimizerLockButton] _ShaderOptimizerEnabled ("", Int) = 1 + [HideInInspector] GeometryShader_Enabled("GEOMETRY SHADER ENABLED", Float) = 1 + [HideInInspector] Tessellation_Enabled("TESSELLATION ENABLED", Float) = 1 + [ThryWideEnum(Opaque, 0, Cutout, 1, TransClipping, 9, Fade, 2, Transparent, 3, Additive, 4, Soft Additive, 5, Multiplicative, 6, 2x Multiplicative, 7)]_Mode("Rendering Preset--{on_value_actions:[ + {value:0,actions:[{type:SET_PROPERTY,data:render_queue=2000},{type:SET_PROPERTY,data:_AlphaForceOpaque=1}, {type:SET_PROPERTY,data:render_type=Opaque}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=0}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:1,actions:[{type:SET_PROPERTY,data:render_queue=2450},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=.5}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:9,actions:[{type:SET_PROPERTY,data:render_queue=2460},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.01}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:2,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.002}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:3,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=1}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:4,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:5,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=4}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=4}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=4}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:6,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:7,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=3}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=3}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]} + }]}]}", Int) = 0 + [HideInInspector] m_mainCategory ("Color & Normals--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/main},hover:Documentation}}", Float) = 0 + _Color ("Color & Alpha--{reference_property:_ColorThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _ColorThemeIndex ("", Int) = 0 + [sRGBWarning(true)]_MainTex ("Texture--{reference_properties:[_MainTexPan, _MainTexUV, _MainPixelMode, _MainTexStochastic, _MainIgnoreTexAlpha]}", 2D) = "white" { } + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _MainTexUV ("UV", Int) = 0 + [HideInInspector][Vector2]_MainTexPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ToggleUI]_MainPixelMode ("Pixel Mode", Float) = 0 + [HideInInspector][ToggleUI]_MainTexStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][ToggleUI]_MainIgnoreTexAlpha ("Ignore Alpha", Float) = 0 + [Normal]_BumpMap ("Normal Map--{reference_properties:[_BumpMapPan, _BumpMapUV, _BumpScale, _BumpMapStochastic]}", 2D) = "bump" { } + [HideInInspector][Vector2]_BumpMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _BumpMapUV ("UV", Int) = 0 + [HideInInspector]_BumpScale ("Intensity", Range(0, 10)) = 1 + [HideInInspector][ToggleUI]_BumpMapStochastic ("Stochastic Sampling", Float) = 0 + [sRGBWarning]_AlphaMask ("Alpha Map--{reference_properties:[_AlphaMaskPan, _AlphaMaskUV, _AlphaMaskInvert, _MainAlphaMaskMode, _AlphaMaskBlendStrength, _AlphaMaskValue], alts:[_AlphaMap]}", 2D) = "white" { } + [HideInInspector][Vector2]_AlphaMaskPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _AlphaMaskUV ("UV", Int) = 0 + [HideInInspector][ThryWideEnum(Off, 0, Replace, 1, Multiply, 2, Add, 3, Subtract, 4)]_MainAlphaMaskMode ("Blend Mode", Int) = 2 + [HideInInspector]_AlphaMaskBlendStrength ("Blend Strength", Float) = 1 + [HideInInspector]_AlphaMaskValue ("Blend Offset", Float) = 0 + [HideInInspector][ToggleUI]_AlphaMaskInvert ("Invert", Float) = 0 + _Cutoff ("Alpha Cutoff", Range(0, 1.001)) = 0.5 + [HideInInspector] m_start_Alpha ("Alpha Options--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/alpha-options},hover:Documentation}}", Float) = 0 + [ToggleUI]_AlphaForceOpaque ("Force Opaque", Float) = 1 + _AlphaMod ("Alpha Mod", Range(-1, 1)) = 0.0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _AlphaGlobalMask ("Global Mask--{reference_property:_AlphaGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _AlphaGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] m_end_Alpha ("Alpha Options", Float) = 0 + [HideInInspector] m_lightingCategory ("Shading", Float) = 0 + [HideInInspector] m_start_PoiLightData ("Light Data--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/light-data},hover:Documentation}}", Float) = 0 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingAOMaps ("AO Maps (expand)--{reference_properties:[_LightingAOMapsPan, _LightingAOMapsUV,_LightDataAOStrengthR,_LightDataAOStrengthG,_LightDataAOStrengthB,_LightDataAOStrengthA, _LightDataAOGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingAOMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingAOMapsUV ("UV", Int) = 0 + [HideInInspector]_LightDataAOStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightDataAOStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataAOGlobalMaskR ("Global Mask--{reference_property:_LightDataAOGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataAOGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingDetailShadowMaps ("Shadow Map (expand)--{reference_properties:[_LightingDetailShadowMapsPan, _LightingDetailShadowMapsUV,_LightingDetailShadowStrengthR,_LightingDetailShadowStrengthG,_LightingDetailShadowStrengthB,_LightingDetailShadowStrengthA,_LightingAddDetailShadowStrengthR,_LightingAddDetailShadowStrengthG,_LightingAddDetailShadowStrengthB,_LightingAddDetailShadowStrengthA, _LightDataDetailShadowGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingDetailShadowMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingDetailShadowMapsUV ("UV", Int) = 0 + [HideInInspector]_LightingDetailShadowStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingDetailShadowStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthR ("Additive R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingAddDetailShadowStrengthG ("Additive G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthB ("Additive B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthA ("Additive A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataDetailShadowGlobalMaskR ("Global Mask--{reference_property:_LightDataDetailShadowGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataDetailShadowGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingShadowMasks ("Shadow Masks (expand)--{reference_properties:[_LightingShadowMasksPan, _LightingShadowMasksUV,_LightingShadowMaskStrengthR,_LightingShadowMaskStrengthG,_LightingShadowMaskStrengthB,_LightingShadowMaskStrengthA, _LightDataShadowMaskGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingShadowMasksPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingShadowMasksUV ("UV", Int) = 0 + [HideInInspector]_LightingShadowMaskStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingShadowMaskStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataShadowMaskGlobalMaskR ("Global Mask--{reference_property:_LightDataShadowMaskGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataShadowMaskGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [HideInInspector] s_start_LightDataBasePass ("Base Pass (Directional & Baked Lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [Enum(Poi Custom, 0, Standard, 1, UTS2, 2, OpenLit(lil toon), 3)] _LightingColorMode ("Light Color Mode", Int) = 0 + [Enum(Poi Custom, 0, Normalized NDotL, 1, Saturated NDotL, 2, Casted Shadows Only, 3, SDF, 4)] _LightingMapMode ("Light Map Mode", Int) = 0 + [HideInInspector] s_start_LightDataSDF ("Signed Distance fields--{persistent_expand:true,default_expand:true, condition_showS:(_LightingMapMode==4)}", Float) = 1 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, Nothing, Nothing, Linear, false)]_LightDataSDFMap ("SDF Map (expand)--{reference_properties:[_LightDataSDFMapPan, _LightDataSDFMapUV]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightDataSDFMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightDataSDFMapUV ("UV", Int) = 0 + _LightDataSDFMapLOD ("LOD", Range(0, 1)) = 0 + _LightDataSDFBlendY ("Blend Y Direction", Range(0.001, 2)) = 1 + [HideInInspector] s_end_LightDataSDF ("Signed Distance fields", Float) = 1 + [Enum(Poi Custom, 0, Forced Local Direction, 1, Forced World Direction, 2, UTS2, 3, OpenLit(lil toon), 4, View Direction, 5)] _LightingDirectionMode ("Light Direction Mode", Int) = 0 + [Vector3]_LightngForcedDirection ("Forced Direction--{condition_showS:(_LightingDirectionMode==1 || _LightingDirectionMode==2)}", Vector) = (0, 0, 0) + _LightingViewDirOffsetPitch ("View Dir Offset Pitch--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + _LightingViewDirOffsetYaw ("View Dir Offset Yaw--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + [ToggleUI]_LightingForceColorEnabled ("Force Light Color", Float) = 0 + _LightingForcedColor ("Forced Color--{condition_showS:(_LightingForceColorEnabled==1), reference_property:_LightingForcedColorThemeIndex}", Color) = (1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _LightingForcedColorThemeIndex ("", Int) = 0 + _Unlit_Intensity ("Unlit_Intensity--{condition_showS:(_LightingColorMode==2)}", Range(0.001, 4)) = 1 + [DoNotLock][ToggleUI]_LightingCapEnabled ("Limit Brightness", Float) = 1 + [DoNotLock]_LightingCap ("Max Brightness--{condition_showS:(_LightingCapEnabled==1)}", Range(0, 10)) = 1 + [DoNotLock]_LightingMinLightBrightness ("Min Brightness", Range(0, 1)) = 0 + _LightingIndirectUsesNormals ("Indirect Uses Normals--{condition_showS:(_LightingColorMode==0)}", Range(0, 1)) = 0 + _LightingCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 0 + [DoNotLock]_LightingMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + [ToggleUI]_LightingVertexLightingEnabled ("Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingMirrorVertexLightingEnabled ("Mirror Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingEnableLightVolumes ("Light Volumes", Float) = 1 + [HideInInspector] s_end_LightDataBasePass ("Base Pass", Float) = 1 + [HideInInspector] s_start_LightDataAddPass ("Add Pass (Point & Spot lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [ToggleUI]_LightingAdditiveEnable ("Pixel lights (Important)", Float) = 1 + [ToggleUI]_DisableDirectionalInAdd ("Ignore Directional Lights--{condition_showS:(_LightingAdditiveEnable==1)}", Float) = 1 + [ToggleUI]_LightingAdditiveLimited ("Limit Brightness", Float) = 1 + _LightingAdditiveLimit ("Max Brightness--{condition_showS:(_LightingAdditiveLimited==1)}", Range(0, 10)) = 1 + _LightingAdditiveCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 1 + _LightingAdditiveMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + _LightingAdditivePassthrough ("Point Light Passthrough--{condition_showS:(_LightingAdditiveEnable==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_LightDataAddPass ("Add Pass", Float) = 1 + [HideInInspector] s_start_LightDataDebug ("Debug / Data Visualizations--{reference_property:_LightDataDebugEnabled,persistent_expand:true}", Float) = 0 + [HideInInspector][DoNotAnimate][ThryToggleUI(false)]_LightDataDebugEnabled ("Debug", Float) = 0 + [ThryWideEnum(Direct Color, 0, Indirect Color, 1, Light Map, 2, Attenuation, 3, N Dot L, 4, Half Dir, 5, Direction, 6, Add Color, 7, Add Attenuation, 8, Add Shadow, 9, Add N Dot L, 10)] _LightingDebugVisualize ("Visualize", Int) = 0 + [HideInInspector] s_end_LightDataDebug ("Debug", Float) = 0 + [HideInInspector] m_end_PoiLightData ("Light Data", Float) = 0 + [HideInInspector] m_start_bakedLighting ("Baked Lighting", Float) = 0 + _GIEmissionMultiplier ("GI Emission Multiplier", Float) = 1 + [HideInInspector] DSGI ("DSGI", Float) = 0 //add this property for double sided illumination settings to be shown + [HideInInspector] LightmapFlags ("Lightmap Flags", Float) = 0 //add this property for lightmap flags settings to be shown + [HideInInspector] m_end_bakedLighting ("Baked Lighting", Float) = 0 + [HideInInspector] m_start_PoiShading (" Shading--{reference_property:_ShadingEnabled,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/main},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(VIGNETTE_MASKED)]_ShadingEnabled ("Enable Shading", Float) = 1 + [DoNotAnimate][KeywordEnum(TextureRamp, Multilayer Math, Wrapped, Skin, ShadeMap, Flat, Realistic, Cloth, SDF)] _LightingMode ("Lighting Type", Float) = 5 + _LightingShadowColor ("Shadow Tint--{condition_showS:(_LightingMode!=4 && _LightingMode!=1 && _LightingMode!=5)}", Color) = (1, 1, 1) + _ShadowStrength ("Shadow Strength--{condition_showS:(_LightingMode<=4 || _LightingMode==8)}", Range(0, 1)) = 1 + _LightingIgnoreAmbientColor ("Ignore Indirect Shadow Color--{condition_showS:(_LightingMode<=3 || _LightingMode==8)}", Range(0, 1)) = 1 + [Space(15)] + [HideInInspector] s_start_ShadingAddPass ("Add Pass (Point & Spot Lights)--{persistent_expand:true,default_expand:false}", Float) = 0 + [Enum(Realistic, 0, Toon, 1, Same as Base Pass, 3)] _LightingAdditiveType ("Lighting Type", Int) = 3 + _LightingAdditiveGradientStart ("Gradient Start--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = 0 + _LightingAdditiveGradientEnd ("Gradient End--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_ShadingAddPass ("Add Pass", Float) = 0 + [HideInInspector] s_start_ShadingGlobalMask ("Global Masks--{persistent_expand:true,default_expand:false}", Float) = 0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapApplyGlobalMaskIndex ("LightMap to Global Mask--{reference_property:_ShadingRampedLightMapApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapApplyGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapInverseApplyGlobalMaskIndex ("Inversed LightMap to Global Mask--{reference_property:_ShadingRampedLightMapInverseApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapInverseApplyGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] s_end_ShadingGlobalMask ("Global Masks", Float) = 0 + [HideInInspector] m_end_PoiShading ("Shading", Float) = 0 + [HideInInspector] m_start_brdf (" Reflections & Specular--{reference_property:_MochieBRDF,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/reflections-and-specular},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(MOCHIE_PBR)]_MochieBRDF ("Enable", Float) = 0 + _MochieMetallicMultiplier ("Metallic", Range(0, 1)) = 0 + _MochieRoughnessMultiplier ("Smoothness", Range(0, 1)) = 1 + _MochieReflectionTint ("Reflection Tint--{reference_property:_MochieReflectionTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _MochieReflectionTintThemeIndex ("", Int) = 0 + _MochieSpecularTint ("Specular Tint--{reference_property:_MochieSpecularTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _MochieSpecularTintThemeIndex ("", Int) = 0 + [sRGBWarning][ThryRGBAPacker(R Metallic Map, G Smoothness Map, B Reflection Mask, A Specular Mask, linear, false)]_MochieMetallicMaps ("Packed Maps [Click to Expand]--{reference_properties:[_MochieMetallicMapsPan, _MochieMetallicMapsUV, _MochieMetallicMapsStochastic, _MochieMetallicMapsMetallicChannel, _MochieMetallicMapsRoughnessChannel, _MochieMetallicMapsReflectionMaskChannel, _MochieMetallicMapsSpecularMaskChannel, _MochieMetallicMapInvert, _MochieRoughnessMapInvert, _MochieReflectionMaskInvert, _MochieSpecularMaskInvert]}", 2D) = "white" { } + [HideInInspector][Vector2]_MochieMetallicMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)]_MochieMetallicMapsUV ("UV", Int) = 0 + [HideInInspector][ToggleUI]_MochieMetallicMapsStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsMetallicChannel ("Metallic Channel", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsRoughnessChannel ("Smoothness Channel", Float) = 1 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsReflectionMaskChannel ("Reflection Mask Channel", Float) = 2 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsSpecularMaskChannel ("Specular Mask Channel", Float) = 3 + [HideInInspector][ToggleUI]_MochieMetallicMapInvert ("Invert Metallic", Float) = 0 + [HideInInspector][ToggleUI]_MochieRoughnessMapInvert ("Invert Smoothness", Float) = 0 + [HideInInspector][ToggleUI]_MochieReflectionMaskInvert ("Invert Reflection Mask", Float) = 0 + [HideInInspector][ToggleUI]_MochieSpecularMaskInvert ("Invert Specular Mask", Float) = 0 + [Space(10)] + _MochieReflectionStrength ("Reflection Visibility", Range(0, 1)) = 1 + _MochieSpecularStrength ("Specular Visibility", Range(0, 5)) = 1 + _RefSpecFresnelStrength ("Fresnel Strength", Range(0, 1)) = .5 + _SFExposureOcclusion ("Exposure Occlusion", Range(0, 1)) = 0 + [Space(10)] + [ThryTexture][NoScaleOffset]_MochieReflCube ("Cubemap", Cube) = "" { } + [ToggleUI]_MochieForceFallback ("Force Fallback", Int) = 0 + [HideInInspector] s_start_BRDFTPSMaskGroup ("TPS--{condition_showS:(_TPSPenetratorEnabled==1)}", Float) = 0 + [ThryToggleUI(true)] _BRDFTPSDepthEnabled (" TPS Depth Enabled", Float) = 0 + _BRDFTPSReflectionMaskStrength ("Reflection Mask Strength--{condition_showS:(_BRDFTPSDepthEnabled==1)}", Range(0, 1)) = 1 + _BRDFTPSSpecularMaskStrength ("Specular Mask Strength--{condition_showS:(_BRDFTPSDepthEnabled==1)}", Range(0, 1)) = 1 + [HideInInspector] s_end_BRDFTPSMaskGroup ("", Float) = 0 + [HideInInspector] s_start_ggxanisotropics(" Anisotropics--{reference_property:_GGXAnisotropics,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ThryToggle(GGX_ANISOTROPICS)]_GGXAnisotropics ("Enable", Float) = 0 + [sRGBWarning]_AnisotropyMap("Anisotropy Map--{reference_properties:[_AnisotropyMapPan, _AnisotropyMapUV, _AnisotropyMapChannel]}", 2D) = "bump" { } + [HideInInspector][Vector2]_AnisotropyMapPan("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _AnisotropyMapUV ("UV", Int) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3)]_AnisotropyMapChannel ("Channel", Float) = 0 + _Anisotropy ("Anisotropy", Range(-1, 1)) = 0 + _ReflectionAnisotropicStretch("Reflection Stretch", Range(1, 5)) = 1 + _RoughnessAnisotropy("Roughness Anisotropy", Range(0, 1)) = 1 + [HideInInspector] s_end_ggxanisotropics ("", Float) = 0 + [HideInInspector] s_start_PBRSecondSpecular ("2nd Specular--{reference_property:_Specular2ndLayer,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_Specular2ndLayer ("2nd Specular", Float) = 0 + _MochieSpecularStrength2 ("Visibility", Range(0, 5)) = 1 + _MochieRoughnessMultiplier2 ("Smoothness", Range(0, 1)) = 1 + [HideInInspector] s_end_PBRSecondSpecular ("Name", Float) = 0 + [HideInInspector] s_start_PBRSplitMaskSample ("Split Mask Sampling--{reference_property:_PBRSplitMaskSample,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_PBRSplitMaskSample ("Split Mask Sampling", Float) = 0 + [VectorLabel(tX, tY, oX, oY)]_PBRMaskScaleTiling ("Tiling/Offset", Vector) = (1, 1, 0, 0) + [ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)]_MochieMetallicMasksUV ("UV", Int) = 0 + [ToggleUI]_PBRSplitMaskStochastic ("Stochastic Sampling", Float) = 0 + [Vector2]_MochieMetallicMasksPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector] s_end_PBRSplitMaskSample ("Split Mask Sampling", Float) = 0 + [HideInInspector] s_start_brdfadvanced ("GSAA & Advanced Controls--{persistent_expand:true,default_expand:false}", Float) = 0 + [ToggleUI]_MochieLitFallback ("Lit Fallback", Float) = 1 + [ToggleUI]_IgnoreCastedShadows ("Ignore Casted Shadows", Float) = 0 + _PBRNormalSelect ("Pixel Normal Mix", Range(0, 1)) = 1 + [ThryToggleUI(true)]_MochieGSAAEnabled (" GSAA", Float) = 1 + _PoiGSAAVariance ("GSAA Variance--{condition_showS:(_MochieGSAAEnabled==1)}", Range(0, 1)) = 0.15 + _PoiGSAAThreshold ("GSAA Threshold--{condition_showS:(_MochieGSAAEnabled==1)}", Range(0, 1)) = 0.1 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieMetallicGlobalMask ("Metallic--{reference_property:_MochieMetallicGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieMetallicGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieSmoothnessGlobalMask ("Smoothness--{reference_property:_MochieSmoothnessGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieSmoothnessGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieReflectionStrengthGlobalMask ("Reflection Strength--{reference_property:_MochieReflectionStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieReflectionStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieSpecularStrengthGlobalMask ("Specular Strength--{reference_property:_MochieSpecularStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieSpecularStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] s_end_brdfadvanced ("", Float) = 0 + [HideInInspector] m_end_brdf ("", Float) = 0 + [HideInInspector] m_start_clearCoat (" Clear Coat--{reference_property:_ClearCoatBRDF,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/clear-coat},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(POI_CLEARCOAT)]_ClearCoatBRDF ("Enable", Float) = 0 + _ClearCoatStrength ("ClearCoat Visibility", Range(0, 1)) = 1 + _ClearCoatSmoothness ("Smoothness", Range(0, 1)) = 1 + _ClearCoatReflectionStrength ("Reflections Visibility", Range(0, 1)) = 1 + _ClearCoatSpecularStrength ("Specular Visibility", Range(0, 1)) = 1 + _ClearcoatFresnelStrength ("Fresnel Strength", Range(0, 1)) = .5 + _ClearcoatExposureOcclusion ("Exposure Occlusion", Range(0, 1)) = 0 + _ClearCoatReflectionTint ("Reflection Tint--{reference_property:_ClearCoatReflectionTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _ClearCoatReflectionTintThemeIndex ("", Int) = 0 + _ClearCoatSpecularTint ("Specular Tint--{reference_property:_ClearCoatSpecularTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _ClearCoatSpecularTintThemeIndex ("", Int) = 0 + [Space(8)] + [sRGBWarning][ThryRGBAPacker(ClearCoat Mask, Smoothness Map, Reflection Mask, Specular Mask, linear, false)]_ClearCoatMaps ("Packed Maps [Click to Expand]--{reference_properties:[_ClearCoatMapsPan, _ClearCoatMapsUV, _ClearCoatMapsStochastic, _ClearCoatMapsClearCoatMaskChannel, _ClearCoatMapsRoughnessChannel, _ClearCoatMapsReflectionMaskChannel, _ClearCoatMapsSpecularMaskChannel, _ClearCoatMaskInvert, _ClearCoatSmoothnessMapInvert, _ClearCoatReflectionMaskInvert, _ClearCoatSpecularMaskInvert]}", 2D) = "white" { } + [HideInInspector][Vector2]_ClearCoatMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)]_ClearCoatMapsUV ("UV", Int) = 0 + [HideInInspector][ToggleUI]_ClearCoatMapsStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_ClearCoatMapsClearCoatMaskChannel ("ClearCoat Mask Channel", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_ClearCoatMapsRoughnessChannel ("Smoothness Channel", Float) = 1 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_ClearCoatMapsReflectionMaskChannel ("Reflection Mask Channel", Float) = 2 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_ClearCoatMapsSpecularMaskChannel ("Specular Mask Channel", Float) = 3 + [HideInInspector][ToggleUI]_ClearCoatMaskInvert ("Invert ClearCoat Mask", Float) = 0 + [HideInInspector][ToggleUI]_ClearCoatSmoothnessMapInvert ("Invert Smoothness", Float) = 0 + [HideInInspector][ToggleUI]_ClearCoatReflectionMaskInvert ("Invert Reflection Mask", Float) = 0 + [HideInInspector][ToggleUI]_ClearCoatSpecularMaskInvert ("Invert Specular Mask", Float) = 0 + [Space(4)] + [ThryTexture][NoScaleOffset]_ClearCoatFallback ("Fallback Cubemap", Cube) = "" { } + [ToggleUI]_ClearCoatForceFallback ("Force Fallback", Int) = 0 + [HideInInspector] m_start_clearcoatadvanced ("Advanced", Float) = 0 + [ToggleUI]_ClearCoatLitFallback ("Lit Fallback", Float) = 1 + [ToggleUI]_CCIgnoreCastedShadows ("Ignore Casted Shadows", Float) = 0 + _ClearCoatNormalSelect ("Pixel Normal Mix", Range(0, 1)) = 0 + [ThryToggleUI(true)]_ClearCoatGSAAEnabled (" GSAA", Float) = 1 + _ClearCoatGSAAVariance ("GSAA Variance", Range(0, 1)) = 0.15 + _ClearCoatGSAAThreshold ("GSAA Threshold", Range(0, 1)) = 0.1 + [HideInInspector] s_start_ClearCoatTPSMaskGroup ("TPS Mask--{reference_property:_ClearCoatTPSDepthMaskEnabled, persistent_expand:true,default_expand:false,condition_showS:(_TPSPenetratorEnabled==1)}", Float) = 0 + [HideInInspector][ToggleUI] _ClearCoatTPSDepthMaskEnabled ("TPS Depth Enabled", Float) = 0 + _ClearCoatTPSMaskStrength ("Mask Strength}", Range(0, 1)) = 1 + [HideInInspector] s_end_ClearCoatTPSMaskGroup ("", Float) = 0 + [HideInInspector] m_end_clearcoatadvanced ("", Float) = 0 + [HideInInspector] m_start_clearcoatglobalmask ("Global Mask", Float) = 0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ClearCoatGlobalMask ("ClearCoat--{reference_property:_ClearCoatGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ClearCoatGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ClearCoatSmoothnessGlobalMask ("Smoothness--{reference_property:_ClearCoatSmoothnessGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ClearCoatSmoothnessGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ClearCoatReflectionStrengthGlobalMask ("Reflection Strength--{reference_property:_ClearCoatReflectionStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ClearCoatReflectionStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ClearCoatSpecularStrengthGlobalMask ("Specular Strength--{reference_property:_ClearCoatSpecularStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ClearCoatSpecularStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] m_end_clearcoatglobalmask ("", Float) = 0 + [HideInInspector] m_end_clearCoat ("", Float) = 0 + [HideInInspector] m_OutlineCategory (" Outlines--{reference_property:_EnableOutlines,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/outlines/main},hover:Documentation}}", Float) = 0 + [HideInInspector] m_specialFXCategory ("Special FX", Float) = 0 + [HideInInspector] m_start_emissionOptions (" Emission 0--{reference_property:_EnableEmission,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/special-fx/emission},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(_EMISSION)] + _EnableEmission ("Enable Emission 0", Float) = 0 + [sRGBWarning]_EmissionMask ("Emission Mask--{reference_properties:[_EmissionMaskPan, _EmissionMaskUV, _EmissionMaskChannel, _EmissionMaskInvert, _EmissionMask0GlobalMask]}", 2D) = "white" { } + [HideInInspector][Vector2]_EmissionMaskPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _EmissionMaskUV ("UV", Int) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3)]_EmissionMaskChannel ("Channel", Float) = 0 + [HideInInspector][ToggleUI]_EmissionMaskInvert ("Invert", Float) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _EmissionMask0GlobalMask ("Global Mask--{reference_property:_EmissionMask0GlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)]_EmissionMask0GlobalMaskBlendType ("Blending", Range(0, 1)) = 2 + [HDR]_EmissionColor ("Emission Color--{reference_property:_EmissionColorThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _EmissionColorThemeIndex ("", Int) = 0 + [sRGBWarning(true)][Gradient]_EmissionMap ("Emission Map--{reference_properties:[_EmissionMapPan, _EmissionMapUV]}", 2D) = "white" { } + [HideInInspector][Vector2]_EmissionMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _EmissionMapUV ("UV", Int) = 0 + _EmissionStrength ("Emission Strength", Range(0, 20)) = 0 + [ToggleUI]_EmissionBaseColorAsMap ("Use Base Colors", Float) = 0 + [ToggleUI]_EmissionReplace0 ("Override Base Color", Float) = 0 + _EmissionFluorescence ("Fluorescence", Range(0, 1)) = 0 + [HideInInspector] s_start_EmissionHueShift0 ("Color Adjust--{reference_property:_EmissionHueShiftEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionHueShiftEnabled ("Hue Shift", Float) = 0 + [ThryWideEnum(OKLab, 0, HSV, 1)] _EmissionHueShiftColorSpace ("Color Space", Int) = 0 + [ThryWideEnum(Hue Select, 0, Hue Shift, 1)] _EmissionHueSelectOrShift ("Select or Shift", Int) = 1 + _EmissionSaturation ("Saturation", Range(-1, 10)) = 0 + _EmissionHueShift ("Hue Shift", Range(0, 1)) = 0 + _EmissionHueShiftSpeed ("Hue Shift Speed", Float) = 0 + [HideInInspector] s_end_EmissionHueShift0 ("", Float) = 0 + [HideInInspector] s_start_EmissionCenterOut0 ("Center Out--{reference_property:_EmissionCenterOutEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionCenterOutEnabled ("Center Out", Float) = 0 + _EmissionCenterOutSpeed ("Flow Speed", Float) = 5 + [HideInInspector] s_end_EmissionCenterOut0 ("", Float) = 0 + [HideInInspector] s_start_EmissionLightBased0 ("Light Based--{reference_property:_EnableGITDEmission,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EnableGITDEmission ("Light Based", Float) = 0 + [Enum(World, 0, Mesh, 1)] _GITDEWorldOrMesh ("Lighting Type", Int) = 0 + _GITDEMinEmissionMultiplier ("Min Emission Multiplier", Range(0, 1)) = 1 + _GITDEMaxEmissionMultiplier ("Max Emission Multiplier", Range(0, 1)) = 0 + _GITDEMinLight ("Min Lighting", Range(0, 1)) = 0 + _GITDEMaxLight ("Max Lighting", Range(0, 1)) = 1 + [HideInInspector] s_end_EmissionLightBased0 ("", Float) = 0 + [HideInInspector] s_start_EmissionBlinking0 ("Blinking--{reference_property:_EmissionBlinkingEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionBlinkingEnabled ("Blinking", Float) = 0 + _EmissiveBlink_Min ("Emissive Blink Min", Float) = 0 + _EmissiveBlink_Max ("Emissive Blink Max", Float) = 1 + _EmissiveBlink_Velocity ("Emissive Blink Velocity", Float) = 4 + _EmissionBlinkingOffset ("Offset", Float) = 0 + [HideInInspector] s_end_EmissionBlinking0 ("", Float) = 0 + [HideInInspector] s_start_ScrollingEmission0 ("Scrolling--{reference_property:_ScrollingEmission,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI] _ScrollingEmission ("Scrolling", Float) = 0 + [ToggleUI]_EmissionScrollingUseCurve ("Use Curve", float) = 0 + [Curve]_EmissionScrollingCurve ("Curve--{condition_showS:(_EmissionScrollingUseCurve==1)}", 2D) = "white" { } + [ToggleUI]_EmissionScrollingVertexColor ("VColor as position", float) = 0 + _EmissiveScroll_Direction ("Direction", Vector) = (0, -10, 0, 0) + _EmissiveScroll_Width ("Width", Float) = 10 + _EmissiveScroll_Velocity ("Velocity", Float) = 10 + _EmissiveScroll_Interval ("Interval", Float) = 20 + _EmissionScrollingOffset ("Offset", Float) = 0 + [HideInInspector] s_end_ScrollingEmission0 ("", Float) = 0 + [Space(4)] + [ThryToggleUI(true)] _EmissionAL0Enabled (" Audio Link--{ condition_showS:_EnableAudioLink==1}", Float) = 0 + [HideInInspector] s_start_EmissionAL0Multiply ("Strength Multiply--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _EmissionAL0MultipliersBand ("Band", Int) = 0 + [VectorLabel(Min, Max)]_EmissionAL0Multipliers ("Multiplier", Vector) = (1, 1, 0, 0) + [HideInInspector] s_end_EmissionAL0Multiply ("Strength Multiply", Float) = 0 + [HideInInspector] s_start_EmissionAL0Add ("Strength Add--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _EmissionAL0StrengthBand ("Band", Int) = 0 + [VectorLabel(Min, Max)]_EmissionAL0StrengthMod ("Strength", Vector) = (0, 0, 0, 0) + [HideInInspector] s_end_EmissionAL0Add ("Strength Add", Float) = 0 + [HideInInspector] s_start_EmissionAL0COut ("Center Out--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _AudioLinkEmission0CenterOutBand ("Band", Int) = 0 + [VectorLabel(Min, Max)] _AudioLinkEmission0CenterOut ("Strength", Vector) = (0, 0, 0, 0) + _AudioLinkEmission0CenterOutSize ("Intensity Threshold", Range(0, 1)) = 0 + _AudioLinkEmission0CenterOutDuration ("Duration", Range(-1, 1)) = 1 + [HideInInspector] s_end_EmissionAL0COut ("Center Out", Float) = 0 + [HideInInspector] m_end_emissionOptions ("", Float) = 0 + [HideInInspector] m_vertexCategory ("Vertex Options", Float) = 0 + [HideInInspector] m_start_Uzumore (" View Clip Prevention (Uzumore)--{reference_property:_UzumoreCategoryToggle,button_author:{text:sigmal00,action:{type:URL,data:https://github.com/sigmal00},hover:GitHub}}, button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/vertex-options/view-clip-prevention},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(POI_UZUMORE)] _UzumoreCategoryToggle (" View Clip Prevention (Uzumore)", Float) = 0 + [ToggleUI] _UzumoreEnabled ("Animation Toggle", Float) = 1 + _UzumoreAmount ("Push Amount (m)", Float) = 0.1 + _UzumoreBias ("Push Bias", Float) = 0.001 + [sRGBWarning]_UzumoreMask ("Push Mask (A)", 2D) = "white" { } + [ThryWideEnum(R, 0, G, 1, B, 2, A, 3)] _UzumoreMaskUV ("Push Mask Channel", Float) = 3 + [HideInInspector] m_end_Uzumore ("Camera Push Back", Float) = 0 + [HideInInspector] m_modifierCategory ("Global Modifiers & Data", Float) = 0 + [HideInInspector] m_start_PoiGlobalCategory ("Global Data and Masks", Float) = 0 + [HideInInspector] m_start_GlobalThemes ("Global Themes--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/global-themes},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HDR]_GlobalThemeColor0 ("Theme Color 0", Color ) = (1, 1, 1, 1) + _GlobalThemeHue0 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed0 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation0 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue0 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HDR]_GlobalThemeColor1 ("Theme Color 1", Color ) = (1, 1, 1, 1) + _GlobalThemeHue1 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed1 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation1 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue1 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HDR]_GlobalThemeColor2 ("Theme Color 2", Color ) = (1, 1, 1, 1) + _GlobalThemeHue2 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed2 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation2 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue2 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HDR]_GlobalThemeColor3 ("Theme Color 3", Color ) = (1, 1, 1, 1) + _GlobalThemeHue3 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed3 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation3 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue3 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HideInInspector] m_end_GlobalThemes ("Global Themes", Float ) = 0 + [HideInInspector] m_start_GlobalMask ("Global Mask--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/global-masks},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalMaskModifiers ("Modifiers", Float) = 0 + [HideInInspector] m_end_GlobalMaskModifiers ("", Float) = 0 + [HideInInspector] m_end_GlobalMask ("Global Mask", Float) = 0 + [HideInInspector] m_end_PoiGlobalCategory ("Global Data and Masks ", Float) = 0 + [HideInInspector] m_start_PoiUVCategory ("UVs", Float) = 0 + [HideInInspector] m_start_Stochastic ("Stochastic Sampling--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/stochastic-sampling},hover:Documentation}}", Float) = 0 + [KeywordEnum(Deliot Heitz, Hextile, None)] _StochasticMode ("Sampling Mode", Float) = 0 + [HideInInspector] s_start_deliot ("Deliot Heitz--{persistent_expand:true,default_expand:false,condition_show:_StochasticMode==0}", Float) = 0 + _StochasticDeliotHeitzDensity ("Detiling Density", Range(0.1, 10)) = 1 + [HideInInspector] s_end_deliot ("Deliot Heitz", Float) = 0 + [HideInInspector] m_end_Stochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector] m_start_uvLocalWorld ("Local World UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/local-world-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos0 ("Local X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos1 ("Local Y", Int) = 1 + [Space(10)] + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos0 ("World X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos1 ("World Y", Int) = 2 + [HideInInspector] m_end_uvLocalWorld ("Local World UV", Float) = 0 + [HideInInspector] m_start_uvPanosphere ("Panosphere UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/panosphere-uv},hover:Documentation}}", Float) = 0 + [ToggleUI] _StereoEnabled ("Stereo Enabled", Float) = 0 + [ToggleUI] _PanoUseBothEyes ("Perspective Correct (VR)", Float) = 1 + [HideInInspector] m_end_uvPanosphere ("Panosphere UV", Float) = 0 + [HideInInspector] m_start_uvPolar ("Polar UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/polar-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8)] _PolarUV ("UV", Int) = 0 + [Vector2]_PolarCenter ("Center Coordinate", Vector) = (.5, .5, 0, 0) + _PolarRadialScale ("Radial Scale", Float) = 1 + _PolarLengthScale ("Length Scale", Float) = 1 + _PolarSpiralPower ("Spiral Power", Float) = 0 + [HideInInspector] m_end_uvPolar ("Polar UV", Float) = 0 + [HideInInspector] m_end_PoiUVCategory ("UVs ", Float) = 0 + [HideInInspector] m_start_PoiPostProcessingCategory ("Post Processing", Float) = 0 + [HideInInspector] m_start_PPAnimations ("PP Animations--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/post-processing/pp-animations},hover:Documentation}}", Float) = 0 + [Helpbox(1)] _PPHelp ("This section meant for real time adjustments through animations and not to be changed in unity", Int) = 0 + _PPLightingMultiplier ("Lighting Mulitplier", Float) = 1 + _PPLightingAddition ("Lighting Add", Float) = 0 + _PPEmissionMultiplier ("Emission Multiplier", Float) = 1 + _PPFinalColorMultiplier ("Final Color Multiplier", Float) = 1 + [HideInInspector] m_end_PPAnimations ("PP Animations ", Float) = 0 + [HideInInspector] m_end_PoiPostProcessingCategory ("Post Processing ", Float) = 0 + [HideInInspector] m_thirdpartyCategory ("Third Party", Float) = 0 + [HideInInspector] m_renderingCategory ("Rendering--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/main},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.CullMode)] _Cull ("Cull", Float) = 2 + [DoNotAnimate][Enum(UnityEngine.Rendering.CompareFunction)] _ZTest ("ZTest", Float) = 4 + [DoNotAnimate][Enum(Off, 0, On, 1)] _ZWrite ("ZWrite", Int) = 1 + [DoNotAnimate][ThryMask(Thry.ColorMaskFlags)] _ColorMask ("Color Mask", Int) = 15 + [DoNotAnimate] _OffsetFactor ("Offset Factor", Float) = 0.0 + [DoNotAnimate] _OffsetUnits ("Offset Units", Float) = 0.0 + [DoNotAnimate][ToggleUI] _RenderingReduceClipDistance ("Reduce Clip Distance", Float) = 0 + [DoNotAnimate][ToggleUI] _ZClip ("Z Clip", Float) = 1 + [DoNotAnimate][ToggleUI] _IgnoreFog ("Ignore Fog", Float) = 0 + [DoNotAnimate][ToggleUI]_FlipBackfaceNormals ("Flip Backface Normals", Int) = 1 + [DoNotAnimate][HideInInspector] Instancing ("Instancing", Float) = 0 //add this property for instancing variants settings to be shown + [ToggleUI] _RenderingEarlyZEnabled ("Early Z", Float) = 0 + [HideInInspector] m_start_blending ("Blending--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/blending},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOp ("RGB Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlend ("RGB Destination Blend", Int) = 0 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOp ("RGB Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlend ("RGB Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_start_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOpAlpha ("Alpha Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlendAlpha ("Alpha Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlendAlpha ("Alpha Destination Blend", Int) = 10 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOpAlpha ("Alpha Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlendAlpha ("Alpha Source Blend", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlendAlpha ("Alpha Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_end_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [HideInInspector] m_end_blending ("Blending", Float) = 0 + [HideInInspector] m_start_StencilPassOptions ("Stencil--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/stencil},hover:Documentation}}", Float) = 0 + [ThryWideEnum(Simple, 0, Front Face vs Back Face, 1)] _StencilType ("Stencil Type", Float) = 0 + [IntRange] _StencilRef ("Stencil Reference Value", Range(0, 255)) = 0 + [IntRange] _StencilReadMask ("Stencil ReadMask Value", Range(0, 255)) = 255 + [IntRange] _StencilWriteMask ("Stencil WriteMask Value", Range(0, 255)) = 255 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilPassOp ("Stencil Pass Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFailOp ("Stencil Fail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilZFailOp ("Stencil ZFail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilCompareFunction ("Stencil Compare Function--{condition_showS:(_StencilType==0)}", Float) = 8 + [HideInInspector] m_start_StencilPassBackOptions("Back--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp0 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackPassOp ("Back Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackFailOp ("Back Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackZFailOp ("Back ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilBackCompareFunction ("Back Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassBackOptions("Back", Float) = 0 + [HideInInspector] m_start_StencilPassFrontOptions("Front--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp1 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontPassOp ("Front Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontFailOp ("Front Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontZFailOp ("Front ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilFrontCompareFunction ("Front Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassFrontOptions("Front", Float) = 0 + [HideInInspector] m_end_StencilPassOptions ("Stencil", Float) = 0 + } + SubShader + { + Tags { "RenderType" = "Opaque" "Queue" = "Geometry" "VRCFallback" = "Standard" } + Pass + { + Name "Base" + Tags { "LightMode" = "ForwardBase" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Back + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define POI_CLEARCOAT + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_MOCHIEMETALLICMAPS + #define PROP_EMISSIONMASK + #define PROP_EMISSIONMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdbase + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #pragma multi_compile_fragment _ VERTEXLIGHT_ON + #define POI_PASS_BASE + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + #ifndef VRC_LIGHT_VOLUMES_INCLUDED + #define VRC_LIGHT_VOLUMES_INCLUDED + #define VRCLV_VERSION 2 + #define VRCLV_MAX_VOLUMES_COUNT 32 + #define VRCLV_MAX_LIGHTS_COUNT 128 + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + cbuffer LightVolumeUniforms { + #endif + uniform float _UdonLightVolumeEnabled; + uniform float _UdonLightVolumeVersion; + uniform float _UdonLightVolumeCount; + uniform float _UdonLightVolumeAdditiveMaxOverdraw; + uniform float _UdonLightVolumeAdditiveCount; + uniform float _UdonLightVolumeProbesBlend; + uniform float _UdonLightVolumeSharpBounds; + uniform float4x4 _UdonLightVolumeInvWorldMatrix[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeRotation[VRCLV_MAX_VOLUMES_COUNT * 2]; // Legacy! Used in this version to have back compatibility with older worlds. Array commented above will be used in future releases! Legacy! + uniform float3 _UdonLightVolumeInvLocalEdgeSmooth[VRCLV_MAX_VOLUMES_COUNT]; + uniform float3 _UdonLightVolumeUvw[VRCLV_MAX_VOLUMES_COUNT * 6]; // Legacy! AABB Bounds of islands on the 3D Texture atlas. Array commented above will be used in future releases! Legacy! + uniform float4 _UdonLightVolumeOcclusionUvw[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeColor[VRCLV_MAX_VOLUMES_COUNT]; + uniform float _UdonPointLightVolumeCount; + uniform float _UdonPointLightVolumeCubeCount; + uniform float4 _UdonPointLightVolumePosition[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeColor[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeDirection[VRCLV_MAX_LIGHTS_COUNT]; + uniform float3 _UdonPointLightVolumeCustomID[VRCLV_MAX_LIGHTS_COUNT]; + uniform float _UdonLightBrightnessCutoff; + uniform float _UdonLightVolumeOcclusionCount; + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + } + #endif + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + uniform Texture3D _UdonLightVolume; + uniform SamplerState sampler_UdonLightVolume; + uniform Texture2DArray _UdonPointLightVolumeTexture; + #define LV_SAMPLE(tex, uvw) tex.SampleLevel(sampler_UdonLightVolume, uvw, 0) + #else + #define LV_SAMPLE(tex, uvw) float4(0,0,0,0) + #endif + #define LV_PI 3.141592653589793f + #define LV_PI2 6.283185307179586f + float LV_Smoothstep01(float x) { + return x * x * (3 - 2 * x); + } + float3 LV_MultiplyVectorByQuaternion(float3 v, float4 q) { + float3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); + } + float3 LV_MultiplyVectorByMatrix2x3(float3 v, float3 r0, float3 r1) { + float3 r2 = cross(r0, r1); + return float3(dot(v, r0), dot(v, r1), dot(v, r2)); + } + float LV_FastAcos(float x) { + float absX = abs(x); + float res = -0.156583f * absX + LV_PI * 0.5f; + res *= sqrt(1.0f - absX); + return (x >= 0) ? res : (LV_PI - res); + } + float LV_DistributionGGX(float NoH, float roughness) { + float f = (roughness - 1) * ((roughness + 1) * (NoH * NoH)) + 1; + return (roughness * roughness) / ((float) LV_PI * f * f); + } + bool LV_PointLocalAABB(float3 localUVW) { + return all(abs(localUVW) <= 0.5); + } + float3 LV_LocalFromVolume(uint volumeID, float3 worldPos) { + return mul(_UdonLightVolumeInvWorldMatrix[volumeID], float4(worldPos, 1.0)).xyz; + } + float LV_EvaluateSH(float L0, float3 L1, float3 n) { + return L0 + dot(L1, n); + } + float4 LV_SampleCubemapArray(uint id, float3 dir) { + float3 absDir = abs(dir); + float2 uv; + uint face; + if (absDir.x >= absDir.y && absDir.x >= absDir.z) { + face = dir.x > 0 ? 0 : 1; + uv = float2((dir.x > 0 ? -dir.z : dir.z), -dir.y) * rcp(absDir.x); + } else if (absDir.y >= absDir.z) { + face = dir.y > 0 ? 2 : 3; + uv = float2(dir.x, (dir.y > 0 ? dir.z : -dir.z)) * rcp(absDir.y); + } else { + face = dir.z > 0 ? 4 : 5; + uv = float2((dir.z > 0 ? dir.x : -dir.x), -dir.y) * rcp(absDir.z); + } + float3 uvid = float3(uv * 0.5 + 0.5, id * 6 + face); + return LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + } + float4 LV_ProjectQuadLightIrradianceSH(float3 shadingPosition, float3 lightVertices[4]) { + [unroll] for (uint edge0 = 0; edge0 < 4; edge0++) { + lightVertices[edge0] = normalize(lightVertices[edge0] - shadingPosition); + } + const float3 zhDir0 = float3(0.866025, -0.500001, -0.000004); + const float3 zhDir1 = float3(-0.759553, 0.438522, -0.480394); + const float3 zhDir2 = float3(-0.000002, 0.638694, 0.769461); + const float3 zhWeightL1y = float3(2.1995339f, 2.50785367f, 1.56572711f); + const float3 zhWeightL1z = float3(-1.82572523f, -2.08165037f, 0.00000000f); + const float3 zhWeightL1x = float3(2.42459869f, 1.44790525f, 0.90397552f); + float solidAngle = 0.0; + float3 surfaceIntegral = 0.0; + [loop] for (uint edge1 = 0; edge1 < 4; edge1++) { + uint next = (edge1 + 1) % 4; + uint prev = (edge1 + 4 - 1) % 4; + float3 prevVert = lightVertices[prev]; + float3 thisVert = lightVertices[edge1]; + float3 nextVert = lightVertices[next]; + float3 a = cross(thisVert, prevVert); + float3 b = cross(thisVert, nextVert); + float lenA = length(a); + float lenB = length(b); + solidAngle += LV_FastAcos(clamp(dot(a, b) / (lenA * lenB), -1, 1)); + float3 mu = b * rcp(lenB); + float cosGamma = dot(thisVert, nextVert); + float gamma = LV_FastAcos(clamp(cosGamma, -1, 1)); + surfaceIntegral.x += gamma * dot(zhDir0, mu); + surfaceIntegral.y += gamma * dot(zhDir1, mu); + surfaceIntegral.z += gamma * dot(zhDir2, mu); + } + solidAngle = solidAngle - LV_PI2; + surfaceIntegral *= 0.5; + const float normalizationL0 = 0.5f * sqrt(1.0f / LV_PI); + float l0 = normalizationL0 * solidAngle; + float l1y = dot(zhWeightL1y, surfaceIntegral); + float l1z = dot(zhWeightL1z, surfaceIntegral); + float l1x = dot(zhWeightL1x, surfaceIntegral); + const float cosineKernelL0 = LV_PI; // (1) + const float cosineKernelL1 = LV_PI2 / 3.0f; // (1) + const float oneOverPi = 1.0f / LV_PI; // (2) + const float normalizationL1 = 0.5f * sqrt(3.0f / LV_PI); // (3) + const float weightL0 = cosineKernelL0 * normalizationL0 * oneOverPi; // (1), (2), (3) + const float weightL1 = cosineKernelL1 * normalizationL1 * oneOverPi; // (1), (2), (3) + l0 *= weightL0; + l1y *= weightL1; + l1z *= weightL1; + l1x *= weightL1; + return float4(l1x, l1y, l1z, l0); + } + void LV_QuadLight(float3 worldPos, float3 centroidPos, float4 rotationQuat, float2 size, float3 color, float sqMaxDist, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 lightToWorldPos = worldPos - centroidPos; + float3 normal = LV_MultiplyVectorByQuaternion(float3(0, 0, 1), rotationQuat); + if (dot(normal, lightToWorldPos) < 0.0) return; + float sqCutoffDist = sqMaxDist - dot(lightToWorldPos, lightToWorldPos); + color.rgb *= saturate(sqCutoffDist / sqMaxDist) * LV_PI * occlusion; + float2 halfSize = size * 0.5f; + float3 xAxis = LV_MultiplyVectorByQuaternion(float3(1, 0, 0), rotationQuat); + float3 yAxis = cross(normal, xAxis); + float3 verts[4]; + verts[0] = centroidPos + (-halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[1] = centroidPos + ( halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[2] = centroidPos + ( halfSize.x * xAxis) + (-halfSize.y * yAxis); + verts[3] = centroidPos + (-halfSize.x * xAxis) + (-halfSize.y * yAxis); + float4 areaLightSH = LV_ProjectQuadLightIrradianceSH(worldPos, verts); + float lenL1 = length(areaLightSH.xyz); + if (lenL1 > areaLightSH.w) areaLightSH.xyz *= areaLightSH.w / lenL1; + L0 += areaLightSH.w * color.rgb; + L1r += areaLightSH.xyz * color.r; + L1g += areaLightSH.xyz * color.g; + L1b += areaLightSH.xyz * color.b; + count++; + } + float3 LV_PointLightAttenuation(float sqdist, float sqlightSize, float3 color, float brightnessCutoff, float sqMaxDist) { + float mask = saturate(1 - sqdist / sqMaxDist); + return mask * mask * color * sqlightSize / (sqdist + sqlightSize); + } + float LV_PointLightSolidAngle(float sqdist, float sqlightSize) { + return saturate(sqrt(sqdist / (sqlightSize + sqdist))); + } + void LV_SphereLight(float sqdist, float3 dirN, float sqlightSize, float3 color, float occlusion, float sqMaxDist, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 att = LV_PointLightAttenuation(sqdist, sqlightSize, color, _UdonLightBrightnessCutoff, sqMaxDist); + float3 l0 = att * occlusion; + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLight(float sqdist, float3 dirN, float sqlightSize, float3 att, float spotMask, float cosAngle, float coneFalloff, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float smoothedCone = LV_Smoothstep01(saturate(spotMask * coneFalloff)); + float3 l0 = att * (occlusion * smoothedCone); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * saturate(1 - cosAngle)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightCookie(float sqdist, float3 dirN, float sqlightSize, float3 att, float4 lightRot, float tanAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 localDir = LV_MultiplyVectorByQuaternion(-dirN, lightRot); + float2 uv = localDir.xy * rcp(localDir.z * tanAngle); + if ( + localDir.z <= 0.0 || // Culling by direction + abs(uv.x) > 1.0 || abs(uv.y) > 1.0 // Culling by UV + ) return; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 - customId - 1; + float3 uvid = float3(uv * 0.5 + 0.5, id); + float angleSize = saturate(rsqrt(1 + tanAngle * tanAngle)); + float4 cookie = LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + float3 l0 = att * cookie.rgb * (cookie.a * occlusion); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * (1 - angleSize)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightAttenuationLUT(float sqdist, float3 dirN, float sqlightSize, float3 color, float spotMask, float cosAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float dirRadius = sqdist * abs(sqlightSize); + float spot = 1 - saturate(spotMask * rcp(1 - cosAngle)); + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId - 1; + float3 uvid = float3(sqrt(float2(spot, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * occlusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } + void LV_PointLight(uint id, float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 customID_data = _UdonPointLightVolumeCustomID[id]; + int shadowId = (int) customID_data.y; // Shadowmask id + int customId = (int) customID_data.x; // Custom Texture ID + float sqrRange = customID_data.z; // Squared culling distance + float4 pos = _UdonPointLightVolumePosition[id]; // Light position and inversed squared range + float3 dir = pos.xyz - worldPos; + float sqlen = max(dot(dir, dir), 1e-6); + if (sqlen > sqrRange) return; // Early distance based culling + float3 dirN = dir * rsqrt(sqlen); + float lightOcclusion = 1; + if (_UdonLightVolumeOcclusionCount != 0 && shadowId >= 0) { + lightOcclusion = dot(occlusion, float4(shadowId == 0, shadowId == 1, shadowId == 2, shadowId == 3)); + } + float4 color = _UdonPointLightVolumeColor[id]; // Color, angle + float4 ldir = _UdonPointLightVolumeDirection[id]; // Dir + falloff or Rotation + if (pos.w < 0) { // It is a spot light + float angle = color.w; + float spotMask = dot(ldir.xyz, -dirN) - angle; + if(customId >= 0 && spotMask < 0) return; // Spot cone based culling + if (customId > 0) { // If it uses Attenuation LUT + LV_SphereSpotLightAttenuationLUT(sqlen, dirN, -pos.w, color.rgb, spotMask, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + float3 att = LV_PointLightAttenuation(sqlen, -pos.w, color.rgb, _UdonLightBrightnessCutoff, sqrRange); + if (customId < 0) { // If uses cookie + LV_SphereSpotLightCookie(sqlen, dirN, -pos.w, att, ldir, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + LV_SphereSpotLight(sqlen, dirN, -pos.w, att, spotMask, angle, ldir.w, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + } else if (color.w <= 1.5f) { // It is a point light + if (customId > 0) { // Using LUT + float invSqRange = abs(pos.w); // Sign of range defines if it's point light (positive) or a spot light (negative) + float dirRadius = sqlen * invSqRange; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId; + float3 uvid = float3(sqrt(float2(0, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * lightOcclusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } else { // If it uses default parametric attenuation + float3 l0 = 0, l1r = 0, l1g = 0, l1b = 0; + LV_SphereLight(sqlen, dirN, pos.w, color.rgb, lightOcclusion, sqrRange, l0, l1r, l1g, l1b, count); + float3 cubeColor = 1; + if (customId < 0) { // If it uses a cubemap + uint id = -customId - 1; // Cubemap ID starts from zero and should not take in count texture array slices count. + cubeColor = LV_SampleCubemapArray(id, LV_MultiplyVectorByQuaternion(dirN, ldir)).xyz; + } + L0 += l0 * cubeColor; + L1r += l1r * cubeColor.r; + L1g += l1g * cubeColor.g; + L1b += l1b * cubeColor.b; + } + } else { // It is an area light + LV_QuadLight(worldPos, pos.xyz, ldir, float2(pos.w, color.w - 2.0f), color.rgb, sqrRange, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + void LV_SampleLightVolumeTex(float3 uvw0, float3 uvw1, float3 uvw2, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b) { + float4 tex0 = LV_SAMPLE(_UdonLightVolume, uvw0); + float4 tex1 = LV_SAMPLE(_UdonLightVolume, uvw1); + float4 tex2 = LV_SAMPLE(_UdonLightVolume, uvw2); + L0 = tex0.rgb; + L1r = float3(tex1.r, tex2.r, tex0.a); + L1g = float3(tex1.g, tex2.g, tex1.a); + L1b = float3(tex1.b, tex2.b, tex2.a); + } + float LV_BoundsMask(float3 localUVW, float3 invLocalEdgeSmooth) { + float3 distToMin = (localUVW + 0.5) * invLocalEdgeSmooth; + float3 distToMax = (0.5 - localUVW) * invLocalEdgeSmooth; + float3 fade = saturate(min(distToMin, distToMax)); + return fade.x * fade.y * fade.z; + } + void LV_SampleLightProbe(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz; + L1g += unity_SHAg.xyz; + L1b += unity_SHAb.xyz; + } + void LV_SampleLightProbeDering(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz * 0.565f; + L1g += unity_SHAg.xyz * 0.565f; + L1b += unity_SHAb.xyz * 0.565f; + } + void LV_SampleVolume(uint id, float3 localUVW, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + float3 uvw0 = uvwScaled + _UdonLightVolumeUvw[uvwID].xyz; + float3 uvw1 = uvwScaled + _UdonLightVolumeUvw[uvwID + 2].xyz; + float3 uvw2 = uvwScaled + _UdonLightVolumeUvw[uvwID + 4].xyz; + float3 l0, l1r, l1g, l1b; + LV_SampleLightVolumeTex(uvw0, uvw1, uvw2, l0, l1r, l1g, l1b); + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + occlusion = 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + occlusion = 1; + } + float4 color = _UdonLightVolumeColor[id]; + L0 += l0 * color.rgb; + l1r *= color.r; + l1g *= color.g; + l1b *= color.b; + if (color.a != 0) { + float3 r0 = _UdonLightVolumeRotation[id * 2].xyz; + float3 r1 = _UdonLightVolumeRotation[id * 2 + 1].xyz; + L1r += LV_MultiplyVectorByMatrix2x3(l1r, r0, r1); + L1g += LV_MultiplyVectorByMatrix2x3(l1g, r0, r1); + L1b += LV_MultiplyVectorByMatrix2x3(l1b, r0, r1); + } else { + L1r += l1r; + L1g += l1g; + L1b += l1b; + } + } + float4 LV_SampleVolumeOcclusion(uint id, float3 localUVW) { + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + return 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + return 1; + } + } + void LV_PointLightVolumeSH(float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + uint pointCount = min((uint) _UdonPointLightVolumeCount, VRCLV_MAX_LIGHTS_COUNT); + if (pointCount == 0) return; + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_LIGHTS_COUNT); + uint pcount = 0; // Point lights counter + [loop] for (uint pid = 0; pid < pointCount && pcount < maxOverdraw; pid++) { + LV_PointLight(pid, worldPos, occlusion, L0, L1r, L1g, L1b, pcount); + } + } + void LV_LightVolumeSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + if (volumesCount == 0) { // Legacy! Fallback to default light probes if Light Volume are not enabled or a version is too old to have a support. Legacy! + LV_SampleLightProbe(L0, L1r, L1g, L1b); + return; + } + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + bool lightProbesBlend = _UdonLightVolumeProbesBlend; + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + [loop] for (uint id = 0; id < volumesCount; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA && lightProbesBlend) { + LV_SampleLightProbe(L0, L1r, L1g, L1b); + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + float3 L0_A = 0; + float3 L1r_A = 0; + float3 L1g_A = 0; + float3 L1b_A = 0; + float4 occlusion_A = 1; + LV_SampleVolume(volumeID_A, localUVW_A, L0_A, L1r_A, L1g_A, L1b_A, occlusion_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || isNoA || (_UdonLightVolumeSharpBounds && isNoB)) { // Returning SH A result if it's the center of mask or out of bounds + L0 += L0_A; + L1r += L1r_A; + L1g += L1g_A; + L1b += L1b_A; + occlusion = occlusion_A; + occlusion *= mOcclusion; + return; + } + float3 L0_B = 0; + float3 L1r_B = 0; + float3 L1g_B = 0; + float3 L1b_B = 0; + float4 occlusion_B = 1; + if (isNoB && lightProbesBlend) { // No Volume found and light volumes blending enabled + LV_SampleLightProbe(L0_B, L1r_B, L1g_B, L1b_B); + } else { // Blending Volume A and Volume B + localUVW_B = isNoB ? localUVW : localUVW_B; + volumeID_B = isNoB ? volumesCount - 1 : volumeID_B; + LV_SampleVolume(volumeID_B, localUVW_B, L0_B, L1r_B, L1g_B, L1b_B, occlusion_B); + } + occlusion = lerp(occlusion_B, occlusion_A, mask); + occlusion *= mOcclusion; + L0 += lerp(L0_B, L0_A, mask); + L1r += lerp(L1r_B, L1r_A, mask); + L1g += lerp(L1g_B, L1g_A, mask); + L1b += lerp(L1b_B, L1b_A, mask); + } + void LV_LightVolumeAdditiveSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + if (additiveCount == 0 && (uint) _UdonPointLightVolumeCount == 0) return; // Legacy! + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW for Y Axis and Free rotations + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + uint count = min(_UdonLightVolumeOcclusionCount == 0 ? additiveCount : volumesCount, VRCLV_MAX_VOLUMES_COUNT); // Only use all volumes if occlusion volumes are enabled + [loop] for (uint id = 0; id < count; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA || _UdonLightVolumeOcclusionCount == 0) { + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + occlusion = LV_SampleVolumeOcclusion(volumeID_A, localUVW_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || (_UdonLightVolumeSharpBounds && isNoB)) { + occlusion *= mOcclusion; + return; // Returning A result if it's the center of mask or out of bounds + } + if (isNoB) occlusion = lerp(1, occlusion, mask); + else occlusion = lerp(LV_SampleVolumeOcclusion(volumeID_B, localUVW_B), occlusion, mask); + occlusion *= mOcclusion; + } + float3 LightVolumeSpecular(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specColor = max(float3(dot(reflect(-L1r, worldNormal), viewDir), dot(reflect(-L1g, worldNormal), viewDir), dot(reflect(-L1b, worldNormal), viewDir)), 0); + float3 rDir = normalize(normalize(L1r) + viewDir); + float3 gDir = normalize(normalize(L1g) + viewDir); + float3 bDir = normalize(normalize(L1b) + viewDir); + float rNh = saturate(dot(worldNormal, rDir)); + float gNh = saturate(dot(worldNormal, gDir)); + float bNh = saturate(dot(worldNormal, bDir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float rSpec = LV_DistributionGGX(rNh, roughExp); + float gSpec = LV_DistributionGGX(gNh, roughExp); + float bSpec = LV_DistributionGGX(bNh, roughExp); + float3 specs = (rSpec + gSpec + bSpec) * f0; + float3 coloredSpecs = specs * specColor; + float3 a = coloredSpecs + specs * L0; + float3 b = coloredSpecs * 3; + return max(lerp(a, b, smoothness) * 0.5f, 0.0); + } + float3 LightVolumeSpecular(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecular(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeSpecularDominant(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 dominantDir = L1r + L1g + L1b; + float3 dir = normalize(normalize(dominantDir) + viewDir); + float nh = saturate(dot(worldNormal, dir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float spec = LV_DistributionGGX(nh, roughExp); + return max(spec * L0 * f0, 0.0) * 1.5f; + } + float3 LightVolumeSpecularDominant(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecularDominant(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeEvaluate(float3 worldNormal, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + return float3(LV_EvaluateSH(L0.r, L1r, worldNormal), LV_EvaluateSH(L0.g, L1g, worldNormal), LV_EvaluateSH(L0.b, L1b, worldNormal)); + } + void LightVolumeSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled == 0) { + LV_SampleLightProbeDering(L0, L1r, L1g, L1b); + } else { + float4 occlusion = 1; + LV_LightVolumeSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + void LightVolumeAdditiveSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled != 0) { + float4 occlusion = 1; + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + float3 LightVolumeSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float3 LightVolumeAdditiveSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return 0; + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float LightVolumesEnabled() { + return _UdonLightVolumeEnabled; + } + float LightVolumesVersion() { + return _UdonLightVolumeVersion == 0 ? _UdonLightVolumeEnabled : _UdonLightVolumeVersion; + } + #endif + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + #ifdef _EMISSION + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMap; + #endif + float4 _EmissionMap_ST; + float2 _EmissionMapPan; + float _EmissionMapUV; + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMask; + #endif + float4 _EmissionMask_ST; + float2 _EmissionMaskPan; + float _EmissionMaskUV; + float _EmissionMaskInvert; + float _EmissionMaskChannel; + float _EmissionMask0GlobalMask; + float _EmissionMask0GlobalMaskBlendType; + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionScrollingCurve; + #endif + float4 _EmissionScrollingCurve_ST; + float _EmissionFluorescence; + float4 _EmissionColor; + float _EmissionBaseColorAsMap; + float _EmissionStrength; + float _EmissionHueShiftEnabled; + float _EmissionHueShiftColorSpace; + float _EmissionHueSelectOrShift; + float _EmissionSaturation; + float _EmissionHueShift; + float _EmissionHueShiftSpeed; + float _EmissionCenterOutEnabled; + float _EmissionCenterOutSpeed; + float _EnableGITDEmission; + float _GITDEWorldOrMesh; + float _GITDEMinEmissionMultiplier; + float _GITDEMaxEmissionMultiplier; + float _GITDEMinLight; + float _GITDEMaxLight; + float _EmissionBlinkingEnabled; + float _EmissiveBlink_Min; + float _EmissiveBlink_Max; + float _EmissiveBlink_Velocity; + float _EmissionBlinkingOffset; + float _ScrollingEmission; + float4 _EmissiveScroll_Direction; + float _EmissiveScroll_Width; + float _EmissiveScroll_Velocity; + float _EmissiveScroll_Interval; + float _EmissionScrollingOffset; + float _EmissionReplace0; + float _EmissionScrollingVertexColor; + float _EmissionScrollingUseCurve; + float _EmissionColorThemeIndex; + float _EmissionAL0Enabled; + float2 _EmissionAL0StrengthMod; + float _EmissionAL0StrengthBand; + float2 _AudioLinkEmission0CenterOut; + float _AudioLinkEmission0CenterOutSize; + float _AudioLinkEmission0CenterOutBand; + float _AudioLinkEmission0CenterOutDuration; + float2 _EmissionAL0Multipliers; + float _EmissionAL0MultipliersBand; + #endif + #ifdef MOCHIE_PBR + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _MochieMetallicMaps; + float _PBRMapsStochastic; + #endif + float4 _MochieMetallicMaps_ST; + float2 _MochieMetallicMapsPan; + float _MochieMetallicMapsUV; + float _MochieMetallicMapsStochastic; + float _MochieMetallicMapInvert; + float _MochieRoughnessMapInvert; + float _MochieReflectionMaskInvert; + float _MochieSpecularMaskInvert; + float _MochieMetallicMapsMetallicChannel; + float _MochieMetallicMapsRoughnessChannel; + float _MochieMetallicMapsReflectionMaskChannel; + float _MochieMetallicMapsSpecularMaskChannel; + float _PBRNormalSelect; + float _MochieReflectionTintThemeIndex; + float _MochieSpecularTintThemeIndex; + float _MochieRoughnessMultiplier; + float _MochieMetallicMultiplier; + float _MochieReflectionStrength; + float _MochieSpecularStrength; + float4 _MochieSpecularTint; + float4 _MochieReflectionTint; + float _MochieLitFallback; + float _IgnoreCastedShadows; + float _PBRSplitMaskSample; + float _PBRSplitMaskStochastic; + float4 _PBRMaskScaleTiling; + float _MochieMetallicMasksUV; + float4 _MochieMetallicMasksPan; + float _Specular2ndLayer; + float _MochieSpecularStrength2; + float _MochieRoughnessMultiplier2; + float _RefSpecFresnelStrength; + float _SFExposureOcclusion; + TextureCube _MochieReflCube; + float4 _MochieReflCube_HDR; + float _MochieForceFallback; + float _MochieGSAAEnabled; + float _PoiGSAAVariance; + float _PoiGSAAThreshold; + float _BRDFTPSReflectionMaskStrength; + float _BRDFTPSSpecularMaskStrength; + float _BRDFTPSDepthEnabled; + float _MochieMetallicGlobalMask; + float _MochieMetallicGlobalMaskBlendType; + float _MochieSmoothnessGlobalMask; + float _MochieSmoothnessGlobalMaskBlendType; + float _MochieReflectionStrengthGlobalMask; + float _MochieReflectionStrengthGlobalMaskBlendType; + float _MochieSpecularStrengthGlobalMask; + float _MochieSpecularStrengthGlobalMaskBlendType; + #endif + #ifdef POI_CLEARCOAT + #if defined(PROP_CLEARCOATMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _ClearCoatMaps; + float4 _ClearCoatMaps_ST; + float2 _ClearCoatMapsPan; + float _ClearCoatMapsUV; + float _ClearCoatMapsStochastic; + #endif + float _ClearCoatMapsClearCoatMaskChannel; + float _ClearCoatMapsRoughnessChannel; + float _ClearCoatMapsReflectionMaskChannel; + float _ClearCoatMapsSpecularMaskChannel; + float _ClearCoatBRDF; + float _ClearCoatReflectionStrength; + float _ClearCoatSpecularStrength; + float _ClearCoatStrength; + float _ClearCoatSmoothness; + float4 _ClearCoatReflectionTint; + float _ClearCoatReflectionTintThemeIndex; + float4 _ClearCoatSpecularTint; + float _ClearCoatSpecularTintThemeIndex; + float _ClearCoatSmoothnessMapInvert; + float _ClearCoatMaskInvert; + float _ClearCoatReflectionMaskInvert; + float _ClearCoatSpecularMaskInvert; + float _ClearCoatTPSMaskStrength; + float _ClearCoatTPSDepthMaskEnabled; + float _ClearCoatNormalSelect; + TextureCube _ClearCoatFallback; + float4 _ClearCoatFallback_HDR; + float _ClearCoatForceFallback; + float _ClearCoatLitFallback; + float _CCIgnoreCastedShadows; + float _ClearCoatGSAAEnabled; + float _ClearCoatGSAAVariance; + float _ClearCoatGSAAThreshold; + float _ClearcoatFresnelStrength; + float _ClearcoatExposureOcclusion; + float _ClearCoatGlobalMask; + float _ClearCoatGlobalMaskBlendType; + float _ClearCoatSmoothnessGlobalMask; + float _ClearCoatSmoothnessGlobalMaskBlendType; + float _ClearCoatReflectionStrengthGlobalMask; + float _ClearCoatReflectionStrengthGlobalMaskBlendType; + float _ClearCoatSpecularStrengthGlobalMask; + float _ClearCoatSpecularStrengthGlobalMaskBlendType; + #endif + float _PPLightingMultiplier; + float _PPLightingAddition; + float _PPEmissionMultiplier; + float _PPFinalColorMultiplier; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef VIGNETTE_MASKED + #ifdef _LIGHTINGMODE_REALISTIC + #if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) + #if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) + #define SUBTRACTIVE_LIGHTING 1 + #endif + #endif + float FadeShadows(float attenuation, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if HANDLE_SHADOWS_BLENDING_IN_GI || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + #if ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + attenuation = poiLight.attenuation; + #endif + float viewZ = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float shadowFadeDistance = UnityComputeShadowFadeDistance(poiMesh.worldPos, viewZ); + float shadowFade = UnityComputeShadowFade(shadowFadeDistance); + float bakedAttenuation = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + attenuation = UnityMixRealtimeAndBakedShadows(attenuation, bakedAttenuation, shadowFade); + #endif + return attenuation; + } + void ApplySubtractiveLighting(inout UnityIndirect indirectLight, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if SUBTRACTIVE_LIGHTING + poiLight.attenuation = FadeShadows(poiLight.attenuation, poiLight, poiMesh, poiCam); + float ndotl = saturate(dot(poiMesh.normals[0], _WorldSpaceLightPos0.xyz)); + float3 shadowedLightEstimate = ndotl * (1 - poiLight.attenuation) * _LightColor0.rgb; + float3 subtractedLight = indirectLight.diffuse - shadowedLightEstimate; + subtractedLight = max(subtractedLight, unity_ShadowColor.rgb); + subtractedLight = lerp(subtractedLight, indirectLight.diffuse, _LightShadowData.x); + indirectLight.diffuse = min(subtractedLight, indirectLight.diffuse); + #endif + } + UnityIndirect CreateIndirectLight(in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight) + { + UnityIndirect indirectLight; + indirectLight.diffuse = 0; + indirectLight.specular = 0; + #if defined(LIGHTMAP_ON) + indirectLight.diffuse = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, poiMesh.lightmapUV.xy)); + #if defined(DIRLIGHTMAP_COMBINED) + float4 lightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, poiMesh.lightmapUV.xy); + indirectLight.diffuse = DecodeDirectionalLightmap(indirectLight.diffuse, lightmapDirection, poiMesh.normals[1]); + #endif + ApplySubtractiveLighting(indirectLight, poiLight, poiMesh, poiCam); + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float3 dynamicLightDiffuse = DecodeRealtimeLightmap( + UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, poiMesh.lightmapUV.zw) + ); + #if defined(DIRLIGHTMAP_COMBINED) + float4 dynamicLightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_DynamicDirectionality, unity_DynamicLightmap, poiMesh.lightmapUV.zw); + indirectLight.diffuse += DecodeDirectionalLightmap(dynamicLightDiffuse, dynamicLightmapDirection, poiMesh.normals[1]); + #else + indirectLight.diffuse += dynamicLightDiffuse; + #endif + #endif + #if !defined(LIGHTMAP_ON) && !defined(DYNAMICLIGHTMAP_ON) + #if UNITY_LIGHT_PROBE_PROXY_VOLUME + if (unity_ProbeVolumeParams.x == 1) + { + indirectLight.diffuse = SHEvalLinearL0L1_SampleProbeVolume( + float4(poiMesh.normals[1], 1), poiMesh.worldPos + ); + indirectLight.diffuse = max(0, indirectLight.diffuse); + #if defined(UNITY_COLORSPACE_GAMMA) + indirectLight.diffuse = LinearToGammaSpace(indirectLight.diffuse); + #endif + } + else + { + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + } + #else + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + #endif + #endif + indirectLight.diffuse *= poiLight.occlusion; + return indirectLight; + } + #endif + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_REALISTIC + UnityLight light; + light.dir = poiLight.direction; + light.color = max(0, _LightColor0.rgb) * saturate(shadowAttenuation * attenuation * poiLight.detailShadow); + light.ndotl = poiLight.nDotLSaturated; + UnityIndirect indirectLight = (UnityIndirect)0; + #ifdef UNITY_PASS_FORWARDBASE + indirectLight = CreateIndirectLight(poiMesh, poiCam, poiLight); + #endif + #ifdef UNITY_PASS_FORWARDBASE + light.color = max(light.color * 1.0, 0); + light.color = max(light.color + 0.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse * 1.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse + 0.0, 0); + #endif + poiLight.rampedLightMap = poiLight.nDotLSaturated; + poiLight.finalLighting = max(POI_BRDF_PBS(1, 0, 0, 0, poiMesh.normals[1], poiCam.viewDir, light, indirectLight).xyz, _LightingMinLightBrightness); + #ifdef UNITY_PASS_FORWARDBASE + if (_UdonLightVolumeEnabled && 1.0) + { + float3 L0 = 0; + float3 L1r = 0; + float3 L1g = 0; + float3 L1b = 0; + #ifdef LIGHTMAP_ON + LightVolumeAdditiveSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + poiLight.finalLighting += clamp(LightVolumeEvaluate(poiMesh.normals[1], L0, L1r, L1g, L1b), _LightingMinLightBrightness, _LightingCap); + #endif + } + #endif + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + float calculateGlowInTheDark(in float minLight, in float maxLight, in float minEmissionMultiplier, in float maxEmissionMultiplier, in float enabled, in float worldOrMesh, in PoiLight poiLight) + { + float glowInTheDarkMultiplier = 1; + if (enabled) + { + float3 lightValue = worldOrMesh ? calculateluminance(poiLight.finalLighting.rgb) : calculateluminance(poiLight.directColor.rgb); + float gitdeAlpha = saturate(inverseLerp(minLight, maxLight, lightValue)); + glowInTheDarkMultiplier = lerp(minEmissionMultiplier, maxEmissionMultiplier, gitdeAlpha); + } + return glowInTheDarkMultiplier; + } + float calculateScrollingEmission(in float3 direction, in float velocity, in float interval, in float scrollWidth, float offset, float3 position) + { + scrollWidth = max(scrollWidth, 0); + float phase = 0; + phase = dot(position, direction); + phase -= (_Time.y + offset) * velocity; + phase /= interval; + phase -= floor(phase); + phase = saturate(phase); + return (pow(phase, scrollWidth) + pow(1 - phase, scrollWidth * 4)) * 0.5; + } + float calculateBlinkingEmission(in float blinkMin, in float blinkMax, in float blinkVelocity, float offset) + { + float amplitude = (blinkMax - blinkMin) * 0.5f; + float base = blinkMin + amplitude; + return sin((_Time.y + offset) * blinkVelocity) * amplitude + base; + } + void applyALEmmissionStrength(in PoiMods poiMods, inout float emissionStrength, in float2 emissionStrengthMod, in float emissionStrengthBand, in float2 _EmissionALMultipliers, in float _EmissionALMultipliersBand, in float enabled) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + emissionStrength += lerp(emissionStrengthMod.x, emissionStrengthMod.y, poiMods.audioLink[emissionStrengthBand]); + emissionStrength *= lerp(_EmissionALMultipliers.x, _EmissionALMultipliers.y, poiMods.audioLink[_EmissionALMultipliersBand]); + } + #endif + } + void applyALCenterOutEmission(in PoiMods poiMods, in float nDotV, inout float emissionStrength, in float size, in float band, in float2 emissionToAdd, in float enabled, in float duration) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + float intensity; + [flatten] + if (duration >= 0) + { + intensity = getBandAtTime(band, saturate(remap(nDotV, 1, 0, 0, duration)), size); + } + else + { + duration *= -1; + intensity = getBandAtTime(band, saturate(remap(pow(nDotV, 2), 0, 1 + duration, 0, duration)), size); + } + emissionStrength += lerp(emissionToAdd[0], emissionToAdd[1], intensity); + } + #endif + } + #ifdef _EMISSION + float3 applyEmission(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiLight poiLight, in PoiCam poiCam, in PoiMods poiMods) + { + float3 emission0 = 0; + float emissionAlpha = 1; + float emissionStrength0 = 0.4; + float3 emissionColor0 = 0; + applyALEmmissionStrength(poiMods, emissionStrength0, float4(0,0,0,0), 0.0, float4(1,1,0,0), 0.0, 0.0); + applyALCenterOutEmission(poiMods, poiLight.nDotV, emissionStrength0, 0.0, 0.0, float4(0,0,0,0), 0.0, 1.0); + float glowInTheDarkMultiplier0 = calculateGlowInTheDark(0.0, 1.0, 1.0, 0.0, 0.0, 0.0, poiLight); + #ifdef POI_GRABPASS + float mixBaseColor = 0; + #else + float mixBaseColor = 0.0; + #endif + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + float4 emissionTex = 0; + if (!0.0) + { + emissionTex = POI2D_SAMPLER_PAN(_EmissionMap, _MainTex, poiUV(poiMesh.uv[0.0], float4(3,3,0,0)), float4(0.5,0,0,0)); + } + else + { + emissionTex = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMap, _MainTex, ((.5 + poiLight.nDotV * .5) * float4(3,3,0,0).xy) + _Time.x * 5.0); + } + emissionColor0 = emissionTex.rgb * lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + emissionAlpha = emissionTex.a; + #else + emissionColor0 = lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + #endif + float3 inverseLighting = saturate((1.0 - poiLight.directColor) * sqrt(poiLight.directColor)); + emissionColor0 = lerp(emissionColor0.rgb, emissionColor0.rgb * inverseLighting, 0.0); + emissionStrength0 *= emissionAlpha; + if (0.0) + { + float3 pos = poiMesh.localPos; + if (0.0) + { + pos = poiMesh.vertexColor.rgb; + } + if (0.0) + { + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + emissionStrength0 *= UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionScrollingCurve, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + (dot(pos, float4(0,-10,0,0).xyz) * 100.0) + _Time.x * 2.0).r; + #endif + } + else + { + emissionStrength0 *= calculateScrollingEmission(float4(0,-10,0,0).xyz, 2.0, 100.0, 3.0, 0.0, pos); + } + } + if (1.0) + { + emissionStrength0 *= calculateBlinkingEmission(0.2, 0.64, 1.0, 0.0); + } + if(0.0) + { + emissionColor0 = hueShift(emissionColor0, frac(0.0 + 0.0 * _Time.x), 0.0, 1.0); + emissionColor0 = lerp(emissionColor0, dot(emissionColor0, float3(0.3, 0.59, 0.11)), - (0.0)); + } + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + float emissionMask0 = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + _Time.x * float4(0,0,0,0))[0.0]; + #else + float emissionMask0 = 1; + #endif + if (0.0) + { + emissionMask0 = 1 - emissionMask0; + } + if (0.0 > 0) + { + emissionMask0 = maskBlend(emissionMask0, poiMods.globalMask[0.0 - 1], 2.0); + } + emissionStrength0 *= glowInTheDarkMultiplier0 * emissionMask0; + emission0 = max(emissionStrength0 * emissionColor0, 0); + #ifdef POI_DISSOLVE + if (_DissolveEmissionSide != 2) + { + emission0 *= lerp(1 - dissolveAlpha, dissolveAlpha, _DissolveEmissionSide); + } + #endif + poiFragData.emission += emission0; + return emission0 * 0.0; + } + #endif + #if defined(MOCHIE_PBR) || defined(POI_CLEARCOAT) + float GSAA_Filament(float3 worldNormal, float perceptualRoughness, float gsaaVariance, float gsaaThreshold) + { + float3 du = ddx(worldNormal); + float3 dv = ddy(worldNormal); + float variance = gsaaVariance * (dot(du, du) + dot(dv, dv)); + float roughness = perceptualRoughness * perceptualRoughness; + float kernelRoughness = min(2.0 * variance, gsaaThreshold); + float squareRoughness = saturate(roughness * roughness + kernelRoughness); + return sqrt(sqrt(squareRoughness)); + } + float3 GetWorldReflections(float3 reflDir, float3 worldPos, float roughness) + { + float3 baseReflDir = reflDir; + reflDir = BoxProjection(reflDir, worldPos, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax); + float4 envSample0 = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, reflDir, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p0 = DecodeHDR(envSample0, unity_SpecCube0_HDR); + float interpolator = unity_SpecCube0_BoxMin.w; + + if (interpolator < 0.99999) + { + float3 refDirBlend = BoxProjection(baseReflDir, worldPos, unity_SpecCube1_ProbePosition, unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax); + float4 envSample1 = UNITY_SAMPLE_TEXCUBE_SAMPLER_LOD(unity_SpecCube1, unity_SpecCube0, refDirBlend, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p1 = DecodeHDR(envSample1, unity_SpecCube1_HDR); + p0 = lerp(p1, p0, interpolator); + } + return p0; + } + float3 GetReflections(in PoiCam poiCam, in PoiLight pl, in PoiMesh poiMesh, float roughness, float ForceFallback, float LightFallback, TextureCube reflectionCube, float4 hdrData, float3 reflectionDir) + { + float3 reflections = 0; + float3 lighting = pl.finalLighting; + if (ForceFallback == 0) + { + + if (SceneHasReflections()) + { + #ifdef UNITY_PASS_FORWARDBASE + reflections = GetWorldReflections(reflectionDir, poiMesh.worldPos.xyz, roughness); + #endif + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + reflections *= pl.occlusion; + return reflections; + } + float GetGGXTerm(float nDotL, float nDotV, float nDotH, float roughness) + { + float visibilityTerm = 0; + if (nDotL > 0) + { + float lambdaV = nDotL * (nDotV * (1 - roughness) + roughness); + float lambdaL = nDotV * (nDotL * (1 - roughness) + roughness); + visibilityTerm = 0.5f / (lambdaV + lambdaL + 1e-5f); + float a = nDotH * roughness; + float k = roughness / (1.0 - nDotH * nDotH + a * a+ 1e-5f); + float dotTerm = k * k * UNITY_INV_PI; + visibilityTerm *= dotTerm; + } + return visibilityTerm; + } + void GetSpecFresTerm(float nDotL, float nDotV, float nDotH, float lDotH, inout float3 specularTerm, inout float3 fresnelTerm, float3 specCol, float roughness) + { + specularTerm = GetGGXTerm(nDotL, nDotV, nDotH, roughness); + fresnelTerm = FresnelTerm(specCol, lDotH); + specularTerm = max(0, specularTerm * max(0.00001, nDotL)); + } + float GetRoughness(float smoothness) + { + float rough = 1 - smoothness; + rough *= 1.7 - 0.7 * rough; + return rough; + } + float SFVisibility(float brdfRoughness, float3 directColor, float NDotV, float ExposureOcclusion) + { + float Visibility = saturate(length(directColor + EPSILON) * (1.0/(ExposureOcclusion))); //Using direct color because I think it should be generally more forgiving + return saturate(pow(NDotV + Visibility, exp2(-16.0 * brdfRoughness - 1.0)) - 1.0 + Visibility); + } + #endif + #ifdef MOCHIE_PBR + void MetallicAndSpecularFragDataInit(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + float smoothness = 1.0; + float smoothness2 = 1.0; + float metallic = 1.0; + float specularMask = 1; + float reflectionMask = 1; + smoothness *= poiFragData.smoothness; + smoothness2 *= poiFragData.smoothness2; + metallic *= poiFragData.metallic; + specularMask *= poiFragData.specularMask; + reflectionMask *= poiFragData.reflectionMask; + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + + if (0.0) + { + float4 PBRSplitMask = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy, 0.0); + assignValueToVectorFromIndex(PBRMaps, 2.0, PBRSplitMask[2.0]); + assignValueToVectorFromIndex(PBRMaps, 3.0, PBRSplitMask[3.0]); + } + if (0.0 < 4) + { + metallic *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + smoothness2 *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + reflectionMask *= 1.0; + specularMask *= 0.0; + if (0.0) + { + metallic = 1 - metallic; + } + if (0.0) + { + smoothness = 1 - smoothness; + smoothness2 = 1 - smoothness2; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + poiFragData.smoothness *= smoothness; + poiFragData.smoothness2 *= smoothness2; + poiFragData.metallic *= metallic; + poiFragData.specularMask *= specularMask; + poiFragData.reflectionMask *= reflectionMask; + } + void MochieBRDF(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, inout PoiMods poiMods) + { + float smoothness = poiFragData.smoothness; + float smoothness2 = poiFragData.smoothness2; + float metallic = poiFragData.metallic; + float specularMask = poiFragData.specularMask; + float reflectionMask = poiFragData.reflectionMask; + if (0.0 > 0) + { + metallic = customBlend(metallic, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + smoothness2 = customBlend(smoothness2, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef TPS_Penetrator + if (0.0) + { + reflectionMask = lerp(0, reflectionMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + specularMask = lerp(0, specularMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float roughness2 = GetRoughness(smoothness2); + float3 specCol = lerp(unity_ColorSpaceDielectricSpec.rgb, poiFragData.baseColor, metallic); + float omr = unity_ColorSpaceDielectricSpec.a - metallic * unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + float percepRough2 = 1 - smoothness2; + + if (1.0) + { + float3 normals = lerp(poiMesh.normals[0], poiMesh.normals[1], 1.0); + percepRough = GSAA_Filament(normals, percepRough, 0.15, 0.1); + if (0.0 == 1 && 1.0 > 0) + { + percepRough2 = GSAA_Filament(normals, percepRough2, 0.15, 0.1); + } + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float brdfRoughness2 = percepRough2 * percepRough2; + brdfRoughness2 = max(brdfRoughness2, 0.002); + float3 diffuse = poiFragData.baseColor; + float3 specular = 0; + float3 specular2 = 0; + float3 vSpecular = 0; + float3 vSpecular2 = 0; + float3 reflections = 0; + float3 environment = 0; + #if defined(POINT) || defined(SPOT) + float attenuation = lerp(poiLight.additiveShadow, 1, 0.0); + #else + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + #endif + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float pbrNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 1.0); + float pbrNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 1.0); + float pbrNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 1.0); + float3 pbrReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 1.0); + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + if (0.0 == 1) + { + float3 fresnelTerm = 1; + float3 specularTerm = 1; + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness2); + specular2 = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation * 1.0; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness2); + vSpecular2 += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * 1.0; + } + #endif + } + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _MochieReflCube, _MochieReflCube_HDR, pbrReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, pbrNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, pbrNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + reflections *= reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = max(specular + vSpecular, specular2 + vSpecular2); + environment += reflections; + diffuse *= poiLight.finalLighting; + poiFragData.finalColor = diffuse; + poiLight.finalLightAdd += environment; + } + #endif + #ifdef POI_CLEARCOAT + void poiClearCoat(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiMods poiMods) + { + float clearCoatMask = 0.352; + float smoothness = 1.0; + float reflectionMask = 1.0; + float specularMask = 1.0; + #if defined(PROP_CLEARCOATMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_ClearCoatMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + if (0.0 < 4) + { + clearCoatMask *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + if (0.0 > 0) + { + clearCoatMask = customBlend(clearCoatMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0) + { + clearCoatMask = 1 - clearCoatMask; + } + if (0.0) + { + smoothness = 1 - smoothness; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + #ifdef TPS_Penetrator + if (0.0) + { + clearCoatMask = lerp(0, clearCoatMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float3 specCol = 0.220916301; + float omr = unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + + if (1.0) + { + percepRough = GSAA_Filament(poiMesh.normals[0.0], percepRough, 0.15, 0.1); + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float3 diffuse = 0; + float3 specular = 0; + float3 vSpecular = 0; + float3 reflections = 0; + float3 environment = 0; + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float clearcoatNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 0.0); + float clearcoatNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 0.0); + float clearcoatNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 0.0); + float3 clearcoatReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 0.0); + GetSpecFresTerm(clearcoatNDotL, clearcoatNDotV, clearcoatNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float clearcoatVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 0.0); + float clearcoatVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 0.0); + GetSpecFresTerm(clearcoatVDotNL, clearcoatNDotV, clearcoatVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _ClearCoatFallback, _ClearCoatFallback_HDR, clearcoatReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, clearcoatNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, clearcoatNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = specular + vSpecular; + #ifdef UNITY_PASS_FORWARDBASE + environment += reflections; + #endif + diffuse += environment; + poiLight.finalLightAdd += saturate(diffuse * clearCoatMask); + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0004882813,0.0004882813,2048,2048), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #if defined(MOCHIE_PBR) + MetallicAndSpecularFragDataInit(poiFragData, poiMesh, poiMods); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) + float3 emissionBaseReplace = 0;// + #endif + #ifdef _EMISSION + emissionBaseReplace += applyEmission(poiFragData, poiMesh, poiLight, poiCam, poiMods); + #endif + #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) + poiFragData.baseColor.rgb = lerp(poiFragData.baseColor.rgb, saturate(emissionBaseReplace), poiMax(emissionBaseReplace)); + #endif + + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #ifdef MOCHIE_PBR + MochieBRDF(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #ifdef POI_CLEARCOAT + poiClearCoat(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + #ifdef UNITY_PASS_FORWARDBASE + poiFragData.emission = max(poiFragData.emission * 1.0, 0); + poiFragData.finalColor = max(poiFragData.finalColor * 1.0, 0); + #endif + if (0.0 == POI_MODE_OPAQUE) + { + } + clip(poiFragData.alpha - 0.5); + if (0.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + poiFragData.finalColor += poiFragData.emission * poiMods.globalEmission; + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "Add" + Tags { "LightMode" = "ForwardAdd" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite Off + Cull Back + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_AddBlendOp], [_AddBlendOpAlpha] + Blend [_AddSrcBlend] [_AddDstBlend], [_AddSrcBlendAlpha] [_AddDstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define POI_CLEARCOAT + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_MOCHIEMETALLICMAPS + #define PROP_EMISSIONMASK + #define PROP_EMISSIONMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdadd_fullshadows + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_ADD + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + #ifdef MOCHIE_PBR + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _MochieMetallicMaps; + float _PBRMapsStochastic; + #endif + float4 _MochieMetallicMaps_ST; + float2 _MochieMetallicMapsPan; + float _MochieMetallicMapsUV; + float _MochieMetallicMapsStochastic; + float _MochieMetallicMapInvert; + float _MochieRoughnessMapInvert; + float _MochieReflectionMaskInvert; + float _MochieSpecularMaskInvert; + float _MochieMetallicMapsMetallicChannel; + float _MochieMetallicMapsRoughnessChannel; + float _MochieMetallicMapsReflectionMaskChannel; + float _MochieMetallicMapsSpecularMaskChannel; + float _PBRNormalSelect; + float _MochieReflectionTintThemeIndex; + float _MochieSpecularTintThemeIndex; + float _MochieRoughnessMultiplier; + float _MochieMetallicMultiplier; + float _MochieReflectionStrength; + float _MochieSpecularStrength; + float4 _MochieSpecularTint; + float4 _MochieReflectionTint; + float _MochieLitFallback; + float _IgnoreCastedShadows; + float _PBRSplitMaskSample; + float _PBRSplitMaskStochastic; + float4 _PBRMaskScaleTiling; + float _MochieMetallicMasksUV; + float4 _MochieMetallicMasksPan; + float _Specular2ndLayer; + float _MochieSpecularStrength2; + float _MochieRoughnessMultiplier2; + float _RefSpecFresnelStrength; + float _SFExposureOcclusion; + TextureCube _MochieReflCube; + float4 _MochieReflCube_HDR; + float _MochieForceFallback; + float _MochieGSAAEnabled; + float _PoiGSAAVariance; + float _PoiGSAAThreshold; + float _BRDFTPSReflectionMaskStrength; + float _BRDFTPSSpecularMaskStrength; + float _BRDFTPSDepthEnabled; + float _MochieMetallicGlobalMask; + float _MochieMetallicGlobalMaskBlendType; + float _MochieSmoothnessGlobalMask; + float _MochieSmoothnessGlobalMaskBlendType; + float _MochieReflectionStrengthGlobalMask; + float _MochieReflectionStrengthGlobalMaskBlendType; + float _MochieSpecularStrengthGlobalMask; + float _MochieSpecularStrengthGlobalMaskBlendType; + #endif + #ifdef POI_CLEARCOAT + #if defined(PROP_CLEARCOATMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _ClearCoatMaps; + float4 _ClearCoatMaps_ST; + float2 _ClearCoatMapsPan; + float _ClearCoatMapsUV; + float _ClearCoatMapsStochastic; + #endif + float _ClearCoatMapsClearCoatMaskChannel; + float _ClearCoatMapsRoughnessChannel; + float _ClearCoatMapsReflectionMaskChannel; + float _ClearCoatMapsSpecularMaskChannel; + float _ClearCoatBRDF; + float _ClearCoatReflectionStrength; + float _ClearCoatSpecularStrength; + float _ClearCoatStrength; + float _ClearCoatSmoothness; + float4 _ClearCoatReflectionTint; + float _ClearCoatReflectionTintThemeIndex; + float4 _ClearCoatSpecularTint; + float _ClearCoatSpecularTintThemeIndex; + float _ClearCoatSmoothnessMapInvert; + float _ClearCoatMaskInvert; + float _ClearCoatReflectionMaskInvert; + float _ClearCoatSpecularMaskInvert; + float _ClearCoatTPSMaskStrength; + float _ClearCoatTPSDepthMaskEnabled; + float _ClearCoatNormalSelect; + TextureCube _ClearCoatFallback; + float4 _ClearCoatFallback_HDR; + float _ClearCoatForceFallback; + float _ClearCoatLitFallback; + float _CCIgnoreCastedShadows; + float _ClearCoatGSAAEnabled; + float _ClearCoatGSAAVariance; + float _ClearCoatGSAAThreshold; + float _ClearcoatFresnelStrength; + float _ClearcoatExposureOcclusion; + float _ClearCoatGlobalMask; + float _ClearCoatGlobalMaskBlendType; + float _ClearCoatSmoothnessGlobalMask; + float _ClearCoatSmoothnessGlobalMaskBlendType; + float _ClearCoatReflectionStrengthGlobalMask; + float _ClearCoatReflectionStrengthGlobalMaskBlendType; + float _ClearCoatSpecularStrengthGlobalMask; + float _ClearCoatSpecularStrengthGlobalMaskBlendType; + #endif + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef VIGNETTE_MASKED + #ifdef _LIGHTINGMODE_REALISTIC + #if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) + #if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) + #define SUBTRACTIVE_LIGHTING 1 + #endif + #endif + float FadeShadows(float attenuation, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if HANDLE_SHADOWS_BLENDING_IN_GI || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + #if ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + attenuation = poiLight.attenuation; + #endif + float viewZ = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float shadowFadeDistance = UnityComputeShadowFadeDistance(poiMesh.worldPos, viewZ); + float shadowFade = UnityComputeShadowFade(shadowFadeDistance); + float bakedAttenuation = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + attenuation = UnityMixRealtimeAndBakedShadows(attenuation, bakedAttenuation, shadowFade); + #endif + return attenuation; + } + void ApplySubtractiveLighting(inout UnityIndirect indirectLight, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if SUBTRACTIVE_LIGHTING + poiLight.attenuation = FadeShadows(poiLight.attenuation, poiLight, poiMesh, poiCam); + float ndotl = saturate(dot(poiMesh.normals[0], _WorldSpaceLightPos0.xyz)); + float3 shadowedLightEstimate = ndotl * (1 - poiLight.attenuation) * _LightColor0.rgb; + float3 subtractedLight = indirectLight.diffuse - shadowedLightEstimate; + subtractedLight = max(subtractedLight, unity_ShadowColor.rgb); + subtractedLight = lerp(subtractedLight, indirectLight.diffuse, _LightShadowData.x); + indirectLight.diffuse = min(subtractedLight, indirectLight.diffuse); + #endif + } + UnityIndirect CreateIndirectLight(in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight) + { + UnityIndirect indirectLight; + indirectLight.diffuse = 0; + indirectLight.specular = 0; + #if defined(LIGHTMAP_ON) + indirectLight.diffuse = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, poiMesh.lightmapUV.xy)); + #if defined(DIRLIGHTMAP_COMBINED) + float4 lightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, poiMesh.lightmapUV.xy); + indirectLight.diffuse = DecodeDirectionalLightmap(indirectLight.diffuse, lightmapDirection, poiMesh.normals[1]); + #endif + ApplySubtractiveLighting(indirectLight, poiLight, poiMesh, poiCam); + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float3 dynamicLightDiffuse = DecodeRealtimeLightmap( + UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, poiMesh.lightmapUV.zw) + ); + #if defined(DIRLIGHTMAP_COMBINED) + float4 dynamicLightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_DynamicDirectionality, unity_DynamicLightmap, poiMesh.lightmapUV.zw); + indirectLight.diffuse += DecodeDirectionalLightmap(dynamicLightDiffuse, dynamicLightmapDirection, poiMesh.normals[1]); + #else + indirectLight.diffuse += dynamicLightDiffuse; + #endif + #endif + #if !defined(LIGHTMAP_ON) && !defined(DYNAMICLIGHTMAP_ON) + #if UNITY_LIGHT_PROBE_PROXY_VOLUME + if (unity_ProbeVolumeParams.x == 1) + { + indirectLight.diffuse = SHEvalLinearL0L1_SampleProbeVolume( + float4(poiMesh.normals[1], 1), poiMesh.worldPos + ); + indirectLight.diffuse = max(0, indirectLight.diffuse); + #if defined(UNITY_COLORSPACE_GAMMA) + indirectLight.diffuse = LinearToGammaSpace(indirectLight.diffuse); + #endif + } + else + { + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + } + #else + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + #endif + #endif + indirectLight.diffuse *= poiLight.occlusion; + return indirectLight; + } + #endif + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_REALISTIC + UnityLight light; + light.dir = poiLight.direction; + light.color = max(0, _LightColor0.rgb) * saturate(shadowAttenuation * attenuation * poiLight.detailShadow); + light.ndotl = poiLight.nDotLSaturated; + UnityIndirect indirectLight = (UnityIndirect)0; + #ifdef UNITY_PASS_FORWARDBASE + indirectLight = CreateIndirectLight(poiMesh, poiCam, poiLight); + #endif + #ifdef UNITY_PASS_FORWARDBASE + light.color = max(light.color * 1.0, 0); + light.color = max(light.color + 0.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse * 1.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse + 0.0, 0); + #endif + poiLight.rampedLightMap = poiLight.nDotLSaturated; + poiLight.finalLighting = max(POI_BRDF_PBS(1, 0, 0, 0, poiMesh.normals[1], poiCam.viewDir, light, indirectLight).xyz, _LightingMinLightBrightness); + #ifdef UNITY_PASS_FORWARDBASE + if (_UdonLightVolumeEnabled && 1.0) + { + float3 L0 = 0; + float3 L1r = 0; + float3 L1g = 0; + float3 L1b = 0; + #ifdef LIGHTMAP_ON + LightVolumeAdditiveSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + poiLight.finalLighting += clamp(LightVolumeEvaluate(poiMesh.normals[1], L0, L1r, L1g, L1b), _LightingMinLightBrightness, _LightingCap); + #endif + } + #endif + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + #if defined(MOCHIE_PBR) || defined(POI_CLEARCOAT) + float GSAA_Filament(float3 worldNormal, float perceptualRoughness, float gsaaVariance, float gsaaThreshold) + { + float3 du = ddx(worldNormal); + float3 dv = ddy(worldNormal); + float variance = gsaaVariance * (dot(du, du) + dot(dv, dv)); + float roughness = perceptualRoughness * perceptualRoughness; + float kernelRoughness = min(2.0 * variance, gsaaThreshold); + float squareRoughness = saturate(roughness * roughness + kernelRoughness); + return sqrt(sqrt(squareRoughness)); + } + float3 GetWorldReflections(float3 reflDir, float3 worldPos, float roughness) + { + float3 baseReflDir = reflDir; + reflDir = BoxProjection(reflDir, worldPos, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax); + float4 envSample0 = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, reflDir, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p0 = DecodeHDR(envSample0, unity_SpecCube0_HDR); + float interpolator = unity_SpecCube0_BoxMin.w; + + if (interpolator < 0.99999) + { + float3 refDirBlend = BoxProjection(baseReflDir, worldPos, unity_SpecCube1_ProbePosition, unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax); + float4 envSample1 = UNITY_SAMPLE_TEXCUBE_SAMPLER_LOD(unity_SpecCube1, unity_SpecCube0, refDirBlend, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p1 = DecodeHDR(envSample1, unity_SpecCube1_HDR); + p0 = lerp(p1, p0, interpolator); + } + return p0; + } + float3 GetReflections(in PoiCam poiCam, in PoiLight pl, in PoiMesh poiMesh, float roughness, float ForceFallback, float LightFallback, TextureCube reflectionCube, float4 hdrData, float3 reflectionDir) + { + float3 reflections = 0; + float3 lighting = pl.finalLighting; + if (ForceFallback == 0) + { + + if (SceneHasReflections()) + { + #ifdef UNITY_PASS_FORWARDBASE + reflections = GetWorldReflections(reflectionDir, poiMesh.worldPos.xyz, roughness); + #endif + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + reflections *= pl.occlusion; + return reflections; + } + float GetGGXTerm(float nDotL, float nDotV, float nDotH, float roughness) + { + float visibilityTerm = 0; + if (nDotL > 0) + { + float lambdaV = nDotL * (nDotV * (1 - roughness) + roughness); + float lambdaL = nDotV * (nDotL * (1 - roughness) + roughness); + visibilityTerm = 0.5f / (lambdaV + lambdaL + 1e-5f); + float a = nDotH * roughness; + float k = roughness / (1.0 - nDotH * nDotH + a * a+ 1e-5f); + float dotTerm = k * k * UNITY_INV_PI; + visibilityTerm *= dotTerm; + } + return visibilityTerm; + } + void GetSpecFresTerm(float nDotL, float nDotV, float nDotH, float lDotH, inout float3 specularTerm, inout float3 fresnelTerm, float3 specCol, float roughness) + { + specularTerm = GetGGXTerm(nDotL, nDotV, nDotH, roughness); + fresnelTerm = FresnelTerm(specCol, lDotH); + specularTerm = max(0, specularTerm * max(0.00001, nDotL)); + } + float GetRoughness(float smoothness) + { + float rough = 1 - smoothness; + rough *= 1.7 - 0.7 * rough; + return rough; + } + float SFVisibility(float brdfRoughness, float3 directColor, float NDotV, float ExposureOcclusion) + { + float Visibility = saturate(length(directColor + EPSILON) * (1.0/(ExposureOcclusion))); //Using direct color because I think it should be generally more forgiving + return saturate(pow(NDotV + Visibility, exp2(-16.0 * brdfRoughness - 1.0)) - 1.0 + Visibility); + } + #endif + #ifdef MOCHIE_PBR + void MetallicAndSpecularFragDataInit(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + float smoothness = 1.0; + float smoothness2 = 1.0; + float metallic = 1.0; + float specularMask = 1; + float reflectionMask = 1; + smoothness *= poiFragData.smoothness; + smoothness2 *= poiFragData.smoothness2; + metallic *= poiFragData.metallic; + specularMask *= poiFragData.specularMask; + reflectionMask *= poiFragData.reflectionMask; + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + + if (0.0) + { + float4 PBRSplitMask = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy, 0.0); + assignValueToVectorFromIndex(PBRMaps, 2.0, PBRSplitMask[2.0]); + assignValueToVectorFromIndex(PBRMaps, 3.0, PBRSplitMask[3.0]); + } + if (0.0 < 4) + { + metallic *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + smoothness2 *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + reflectionMask *= 1.0; + specularMask *= 0.0; + if (0.0) + { + metallic = 1 - metallic; + } + if (0.0) + { + smoothness = 1 - smoothness; + smoothness2 = 1 - smoothness2; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + poiFragData.smoothness *= smoothness; + poiFragData.smoothness2 *= smoothness2; + poiFragData.metallic *= metallic; + poiFragData.specularMask *= specularMask; + poiFragData.reflectionMask *= reflectionMask; + } + void MochieBRDF(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, inout PoiMods poiMods) + { + float smoothness = poiFragData.smoothness; + float smoothness2 = poiFragData.smoothness2; + float metallic = poiFragData.metallic; + float specularMask = poiFragData.specularMask; + float reflectionMask = poiFragData.reflectionMask; + if (0.0 > 0) + { + metallic = customBlend(metallic, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + smoothness2 = customBlend(smoothness2, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef TPS_Penetrator + if (0.0) + { + reflectionMask = lerp(0, reflectionMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + specularMask = lerp(0, specularMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float roughness2 = GetRoughness(smoothness2); + float3 specCol = lerp(unity_ColorSpaceDielectricSpec.rgb, poiFragData.baseColor, metallic); + float omr = unity_ColorSpaceDielectricSpec.a - metallic * unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + float percepRough2 = 1 - smoothness2; + + if (1.0) + { + float3 normals = lerp(poiMesh.normals[0], poiMesh.normals[1], 1.0); + percepRough = GSAA_Filament(normals, percepRough, 0.15, 0.1); + if (0.0 == 1 && 1.0 > 0) + { + percepRough2 = GSAA_Filament(normals, percepRough2, 0.15, 0.1); + } + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float brdfRoughness2 = percepRough2 * percepRough2; + brdfRoughness2 = max(brdfRoughness2, 0.002); + float3 diffuse = poiFragData.baseColor; + float3 specular = 0; + float3 specular2 = 0; + float3 vSpecular = 0; + float3 vSpecular2 = 0; + float3 reflections = 0; + float3 environment = 0; + #if defined(POINT) || defined(SPOT) + float attenuation = lerp(poiLight.additiveShadow, 1, 0.0); + #else + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + #endif + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float pbrNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 1.0); + float pbrNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 1.0); + float pbrNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 1.0); + float3 pbrReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 1.0); + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + if (0.0 == 1) + { + float3 fresnelTerm = 1; + float3 specularTerm = 1; + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness2); + specular2 = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation * 1.0; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness2); + vSpecular2 += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * 1.0; + } + #endif + } + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _MochieReflCube, _MochieReflCube_HDR, pbrReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, pbrNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, pbrNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + reflections *= reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = max(specular + vSpecular, specular2 + vSpecular2); + environment += reflections; + diffuse *= poiLight.finalLighting; + poiFragData.finalColor = diffuse; + poiLight.finalLightAdd += environment; + } + #endif + #ifdef POI_CLEARCOAT + void poiClearCoat(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiMods poiMods) + { + float clearCoatMask = 0.352; + float smoothness = 1.0; + float reflectionMask = 1.0; + float specularMask = 1.0; + #if defined(PROP_CLEARCOATMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_ClearCoatMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + if (0.0 < 4) + { + clearCoatMask *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + if (0.0 > 0) + { + clearCoatMask = customBlend(clearCoatMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0) + { + clearCoatMask = 1 - clearCoatMask; + } + if (0.0) + { + smoothness = 1 - smoothness; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + #ifdef TPS_Penetrator + if (0.0) + { + clearCoatMask = lerp(0, clearCoatMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float3 specCol = 0.220916301; + float omr = unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + + if (1.0) + { + percepRough = GSAA_Filament(poiMesh.normals[0.0], percepRough, 0.15, 0.1); + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float3 diffuse = 0; + float3 specular = 0; + float3 vSpecular = 0; + float3 reflections = 0; + float3 environment = 0; + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float clearcoatNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 0.0); + float clearcoatNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 0.0); + float clearcoatNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 0.0); + float3 clearcoatReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 0.0); + GetSpecFresTerm(clearcoatNDotL, clearcoatNDotV, clearcoatNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float clearcoatVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 0.0); + float clearcoatVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 0.0); + GetSpecFresTerm(clearcoatVDotNL, clearcoatNDotV, clearcoatVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _ClearCoatFallback, _ClearCoatFallback_HDR, clearcoatReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, clearcoatNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, clearcoatNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = specular + vSpecular; + #ifdef UNITY_PASS_FORWARDBASE + environment += reflections; + #endif + diffuse += environment; + poiLight.finalLightAdd += saturate(diffuse * clearCoatMask); + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0004882813,0.0004882813,2048,2048), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #if defined(MOCHIE_PBR) + MetallicAndSpecularFragDataInit(poiFragData, poiMesh, poiMods); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #ifdef MOCHIE_PBR + MochieBRDF(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #ifdef POI_CLEARCOAT + poiClearCoat(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + if (0.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + if (4.0 == 4) + { + poiFragData.alpha = saturate(poiFragData.alpha * 10.0); + } + if (0.0 != POI_MODE_TRANSPARENT) + { + poiFragData.finalColor *= poiFragData.alpha; + } + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Back + AlphaToMask Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define POI_CLEARCOAT + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_MOCHIEMETALLICMAPS + #define PROP_EMISSIONMASK + #define PROP_EMISSIONMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_instancing + #pragma multi_compile_shadowcaster + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_SHADOW + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0004882813,0.0004882813,2048,2048), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + poiFragData.finalColor = poiFragData.baseColor; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "META" + Tags { "LightMode" = "Meta" } + ZWrite [_ZWrite] + Cull Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define POI_CLEARCOAT + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_MOCHIEMETALLICMAPS + #define PROP_EMISSIONMASK + #define PROP_EMISSIONMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_instancing + #pragma multi_compile_fragment _ VERTEXLIGHT_ON + #define POI_PASS_META + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + #include "UnityMetaPass.cginc" + #ifndef VRC_LIGHT_VOLUMES_INCLUDED + #define VRC_LIGHT_VOLUMES_INCLUDED + #define VRCLV_VERSION 2 + #define VRCLV_MAX_VOLUMES_COUNT 32 + #define VRCLV_MAX_LIGHTS_COUNT 128 + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + cbuffer LightVolumeUniforms { + #endif + uniform float _UdonLightVolumeEnabled; + uniform float _UdonLightVolumeVersion; + uniform float _UdonLightVolumeCount; + uniform float _UdonLightVolumeAdditiveMaxOverdraw; + uniform float _UdonLightVolumeAdditiveCount; + uniform float _UdonLightVolumeProbesBlend; + uniform float _UdonLightVolumeSharpBounds; + uniform float4x4 _UdonLightVolumeInvWorldMatrix[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeRotation[VRCLV_MAX_VOLUMES_COUNT * 2]; // Legacy! Used in this version to have back compatibility with older worlds. Array commented above will be used in future releases! Legacy! + uniform float3 _UdonLightVolumeInvLocalEdgeSmooth[VRCLV_MAX_VOLUMES_COUNT]; + uniform float3 _UdonLightVolumeUvw[VRCLV_MAX_VOLUMES_COUNT * 6]; // Legacy! AABB Bounds of islands on the 3D Texture atlas. Array commented above will be used in future releases! Legacy! + uniform float4 _UdonLightVolumeOcclusionUvw[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeColor[VRCLV_MAX_VOLUMES_COUNT]; + uniform float _UdonPointLightVolumeCount; + uniform float _UdonPointLightVolumeCubeCount; + uniform float4 _UdonPointLightVolumePosition[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeColor[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeDirection[VRCLV_MAX_LIGHTS_COUNT]; + uniform float3 _UdonPointLightVolumeCustomID[VRCLV_MAX_LIGHTS_COUNT]; + uniform float _UdonLightBrightnessCutoff; + uniform float _UdonLightVolumeOcclusionCount; + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + } + #endif + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + uniform Texture3D _UdonLightVolume; + uniform SamplerState sampler_UdonLightVolume; + uniform Texture2DArray _UdonPointLightVolumeTexture; + #define LV_SAMPLE(tex, uvw) tex.SampleLevel(sampler_UdonLightVolume, uvw, 0) + #else + #define LV_SAMPLE(tex, uvw) float4(0,0,0,0) + #endif + #define LV_PI 3.141592653589793f + #define LV_PI2 6.283185307179586f + float LV_Smoothstep01(float x) { + return x * x * (3 - 2 * x); + } + float3 LV_MultiplyVectorByQuaternion(float3 v, float4 q) { + float3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); + } + float3 LV_MultiplyVectorByMatrix2x3(float3 v, float3 r0, float3 r1) { + float3 r2 = cross(r0, r1); + return float3(dot(v, r0), dot(v, r1), dot(v, r2)); + } + float LV_FastAcos(float x) { + float absX = abs(x); + float res = -0.156583f * absX + LV_PI * 0.5f; + res *= sqrt(1.0f - absX); + return (x >= 0) ? res : (LV_PI - res); + } + float LV_DistributionGGX(float NoH, float roughness) { + float f = (roughness - 1) * ((roughness + 1) * (NoH * NoH)) + 1; + return (roughness * roughness) / ((float) LV_PI * f * f); + } + bool LV_PointLocalAABB(float3 localUVW) { + return all(abs(localUVW) <= 0.5); + } + float3 LV_LocalFromVolume(uint volumeID, float3 worldPos) { + return mul(_UdonLightVolumeInvWorldMatrix[volumeID], float4(worldPos, 1.0)).xyz; + } + float LV_EvaluateSH(float L0, float3 L1, float3 n) { + return L0 + dot(L1, n); + } + float4 LV_SampleCubemapArray(uint id, float3 dir) { + float3 absDir = abs(dir); + float2 uv; + uint face; + if (absDir.x >= absDir.y && absDir.x >= absDir.z) { + face = dir.x > 0 ? 0 : 1; + uv = float2((dir.x > 0 ? -dir.z : dir.z), -dir.y) * rcp(absDir.x); + } else if (absDir.y >= absDir.z) { + face = dir.y > 0 ? 2 : 3; + uv = float2(dir.x, (dir.y > 0 ? dir.z : -dir.z)) * rcp(absDir.y); + } else { + face = dir.z > 0 ? 4 : 5; + uv = float2((dir.z > 0 ? dir.x : -dir.x), -dir.y) * rcp(absDir.z); + } + float3 uvid = float3(uv * 0.5 + 0.5, id * 6 + face); + return LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + } + float4 LV_ProjectQuadLightIrradianceSH(float3 shadingPosition, float3 lightVertices[4]) { + [unroll] for (uint edge0 = 0; edge0 < 4; edge0++) { + lightVertices[edge0] = normalize(lightVertices[edge0] - shadingPosition); + } + const float3 zhDir0 = float3(0.866025, -0.500001, -0.000004); + const float3 zhDir1 = float3(-0.759553, 0.438522, -0.480394); + const float3 zhDir2 = float3(-0.000002, 0.638694, 0.769461); + const float3 zhWeightL1y = float3(2.1995339f, 2.50785367f, 1.56572711f); + const float3 zhWeightL1z = float3(-1.82572523f, -2.08165037f, 0.00000000f); + const float3 zhWeightL1x = float3(2.42459869f, 1.44790525f, 0.90397552f); + float solidAngle = 0.0; + float3 surfaceIntegral = 0.0; + [loop] for (uint edge1 = 0; edge1 < 4; edge1++) { + uint next = (edge1 + 1) % 4; + uint prev = (edge1 + 4 - 1) % 4; + float3 prevVert = lightVertices[prev]; + float3 thisVert = lightVertices[edge1]; + float3 nextVert = lightVertices[next]; + float3 a = cross(thisVert, prevVert); + float3 b = cross(thisVert, nextVert); + float lenA = length(a); + float lenB = length(b); + solidAngle += LV_FastAcos(clamp(dot(a, b) / (lenA * lenB), -1, 1)); + float3 mu = b * rcp(lenB); + float cosGamma = dot(thisVert, nextVert); + float gamma = LV_FastAcos(clamp(cosGamma, -1, 1)); + surfaceIntegral.x += gamma * dot(zhDir0, mu); + surfaceIntegral.y += gamma * dot(zhDir1, mu); + surfaceIntegral.z += gamma * dot(zhDir2, mu); + } + solidAngle = solidAngle - LV_PI2; + surfaceIntegral *= 0.5; + const float normalizationL0 = 0.5f * sqrt(1.0f / LV_PI); + float l0 = normalizationL0 * solidAngle; + float l1y = dot(zhWeightL1y, surfaceIntegral); + float l1z = dot(zhWeightL1z, surfaceIntegral); + float l1x = dot(zhWeightL1x, surfaceIntegral); + const float cosineKernelL0 = LV_PI; // (1) + const float cosineKernelL1 = LV_PI2 / 3.0f; // (1) + const float oneOverPi = 1.0f / LV_PI; // (2) + const float normalizationL1 = 0.5f * sqrt(3.0f / LV_PI); // (3) + const float weightL0 = cosineKernelL0 * normalizationL0 * oneOverPi; // (1), (2), (3) + const float weightL1 = cosineKernelL1 * normalizationL1 * oneOverPi; // (1), (2), (3) + l0 *= weightL0; + l1y *= weightL1; + l1z *= weightL1; + l1x *= weightL1; + return float4(l1x, l1y, l1z, l0); + } + void LV_QuadLight(float3 worldPos, float3 centroidPos, float4 rotationQuat, float2 size, float3 color, float sqMaxDist, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 lightToWorldPos = worldPos - centroidPos; + float3 normal = LV_MultiplyVectorByQuaternion(float3(0, 0, 1), rotationQuat); + if (dot(normal, lightToWorldPos) < 0.0) return; + float sqCutoffDist = sqMaxDist - dot(lightToWorldPos, lightToWorldPos); + color.rgb *= saturate(sqCutoffDist / sqMaxDist) * LV_PI * occlusion; + float2 halfSize = size * 0.5f; + float3 xAxis = LV_MultiplyVectorByQuaternion(float3(1, 0, 0), rotationQuat); + float3 yAxis = cross(normal, xAxis); + float3 verts[4]; + verts[0] = centroidPos + (-halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[1] = centroidPos + ( halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[2] = centroidPos + ( halfSize.x * xAxis) + (-halfSize.y * yAxis); + verts[3] = centroidPos + (-halfSize.x * xAxis) + (-halfSize.y * yAxis); + float4 areaLightSH = LV_ProjectQuadLightIrradianceSH(worldPos, verts); + float lenL1 = length(areaLightSH.xyz); + if (lenL1 > areaLightSH.w) areaLightSH.xyz *= areaLightSH.w / lenL1; + L0 += areaLightSH.w * color.rgb; + L1r += areaLightSH.xyz * color.r; + L1g += areaLightSH.xyz * color.g; + L1b += areaLightSH.xyz * color.b; + count++; + } + float3 LV_PointLightAttenuation(float sqdist, float sqlightSize, float3 color, float brightnessCutoff, float sqMaxDist) { + float mask = saturate(1 - sqdist / sqMaxDist); + return mask * mask * color * sqlightSize / (sqdist + sqlightSize); + } + float LV_PointLightSolidAngle(float sqdist, float sqlightSize) { + return saturate(sqrt(sqdist / (sqlightSize + sqdist))); + } + void LV_SphereLight(float sqdist, float3 dirN, float sqlightSize, float3 color, float occlusion, float sqMaxDist, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 att = LV_PointLightAttenuation(sqdist, sqlightSize, color, _UdonLightBrightnessCutoff, sqMaxDist); + float3 l0 = att * occlusion; + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLight(float sqdist, float3 dirN, float sqlightSize, float3 att, float spotMask, float cosAngle, float coneFalloff, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float smoothedCone = LV_Smoothstep01(saturate(spotMask * coneFalloff)); + float3 l0 = att * (occlusion * smoothedCone); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * saturate(1 - cosAngle)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightCookie(float sqdist, float3 dirN, float sqlightSize, float3 att, float4 lightRot, float tanAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 localDir = LV_MultiplyVectorByQuaternion(-dirN, lightRot); + float2 uv = localDir.xy * rcp(localDir.z * tanAngle); + if ( + localDir.z <= 0.0 || // Culling by direction + abs(uv.x) > 1.0 || abs(uv.y) > 1.0 // Culling by UV + ) return; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 - customId - 1; + float3 uvid = float3(uv * 0.5 + 0.5, id); + float angleSize = saturate(rsqrt(1 + tanAngle * tanAngle)); + float4 cookie = LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + float3 l0 = att * cookie.rgb * (cookie.a * occlusion); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * (1 - angleSize)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightAttenuationLUT(float sqdist, float3 dirN, float sqlightSize, float3 color, float spotMask, float cosAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float dirRadius = sqdist * abs(sqlightSize); + float spot = 1 - saturate(spotMask * rcp(1 - cosAngle)); + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId - 1; + float3 uvid = float3(sqrt(float2(spot, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * occlusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } + void LV_PointLight(uint id, float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 customID_data = _UdonPointLightVolumeCustomID[id]; + int shadowId = (int) customID_data.y; // Shadowmask id + int customId = (int) customID_data.x; // Custom Texture ID + float sqrRange = customID_data.z; // Squared culling distance + float4 pos = _UdonPointLightVolumePosition[id]; // Light position and inversed squared range + float3 dir = pos.xyz - worldPos; + float sqlen = max(dot(dir, dir), 1e-6); + if (sqlen > sqrRange) return; // Early distance based culling + float3 dirN = dir * rsqrt(sqlen); + float lightOcclusion = 1; + if (_UdonLightVolumeOcclusionCount != 0 && shadowId >= 0) { + lightOcclusion = dot(occlusion, float4(shadowId == 0, shadowId == 1, shadowId == 2, shadowId == 3)); + } + float4 color = _UdonPointLightVolumeColor[id]; // Color, angle + float4 ldir = _UdonPointLightVolumeDirection[id]; // Dir + falloff or Rotation + if (pos.w < 0) { // It is a spot light + float angle = color.w; + float spotMask = dot(ldir.xyz, -dirN) - angle; + if(customId >= 0 && spotMask < 0) return; // Spot cone based culling + if (customId > 0) { // If it uses Attenuation LUT + LV_SphereSpotLightAttenuationLUT(sqlen, dirN, -pos.w, color.rgb, spotMask, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + float3 att = LV_PointLightAttenuation(sqlen, -pos.w, color.rgb, _UdonLightBrightnessCutoff, sqrRange); + if (customId < 0) { // If uses cookie + LV_SphereSpotLightCookie(sqlen, dirN, -pos.w, att, ldir, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + LV_SphereSpotLight(sqlen, dirN, -pos.w, att, spotMask, angle, ldir.w, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + } else if (color.w <= 1.5f) { // It is a point light + if (customId > 0) { // Using LUT + float invSqRange = abs(pos.w); // Sign of range defines if it's point light (positive) or a spot light (negative) + float dirRadius = sqlen * invSqRange; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId; + float3 uvid = float3(sqrt(float2(0, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * lightOcclusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } else { // If it uses default parametric attenuation + float3 l0 = 0, l1r = 0, l1g = 0, l1b = 0; + LV_SphereLight(sqlen, dirN, pos.w, color.rgb, lightOcclusion, sqrRange, l0, l1r, l1g, l1b, count); + float3 cubeColor = 1; + if (customId < 0) { // If it uses a cubemap + uint id = -customId - 1; // Cubemap ID starts from zero and should not take in count texture array slices count. + cubeColor = LV_SampleCubemapArray(id, LV_MultiplyVectorByQuaternion(dirN, ldir)).xyz; + } + L0 += l0 * cubeColor; + L1r += l1r * cubeColor.r; + L1g += l1g * cubeColor.g; + L1b += l1b * cubeColor.b; + } + } else { // It is an area light + LV_QuadLight(worldPos, pos.xyz, ldir, float2(pos.w, color.w - 2.0f), color.rgb, sqrRange, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + void LV_SampleLightVolumeTex(float3 uvw0, float3 uvw1, float3 uvw2, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b) { + float4 tex0 = LV_SAMPLE(_UdonLightVolume, uvw0); + float4 tex1 = LV_SAMPLE(_UdonLightVolume, uvw1); + float4 tex2 = LV_SAMPLE(_UdonLightVolume, uvw2); + L0 = tex0.rgb; + L1r = float3(tex1.r, tex2.r, tex0.a); + L1g = float3(tex1.g, tex2.g, tex1.a); + L1b = float3(tex1.b, tex2.b, tex2.a); + } + float LV_BoundsMask(float3 localUVW, float3 invLocalEdgeSmooth) { + float3 distToMin = (localUVW + 0.5) * invLocalEdgeSmooth; + float3 distToMax = (0.5 - localUVW) * invLocalEdgeSmooth; + float3 fade = saturate(min(distToMin, distToMax)); + return fade.x * fade.y * fade.z; + } + void LV_SampleLightProbe(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz; + L1g += unity_SHAg.xyz; + L1b += unity_SHAb.xyz; + } + void LV_SampleLightProbeDering(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz * 0.565f; + L1g += unity_SHAg.xyz * 0.565f; + L1b += unity_SHAb.xyz * 0.565f; + } + void LV_SampleVolume(uint id, float3 localUVW, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + float3 uvw0 = uvwScaled + _UdonLightVolumeUvw[uvwID].xyz; + float3 uvw1 = uvwScaled + _UdonLightVolumeUvw[uvwID + 2].xyz; + float3 uvw2 = uvwScaled + _UdonLightVolumeUvw[uvwID + 4].xyz; + float3 l0, l1r, l1g, l1b; + LV_SampleLightVolumeTex(uvw0, uvw1, uvw2, l0, l1r, l1g, l1b); + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + occlusion = 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + occlusion = 1; + } + float4 color = _UdonLightVolumeColor[id]; + L0 += l0 * color.rgb; + l1r *= color.r; + l1g *= color.g; + l1b *= color.b; + if (color.a != 0) { + float3 r0 = _UdonLightVolumeRotation[id * 2].xyz; + float3 r1 = _UdonLightVolumeRotation[id * 2 + 1].xyz; + L1r += LV_MultiplyVectorByMatrix2x3(l1r, r0, r1); + L1g += LV_MultiplyVectorByMatrix2x3(l1g, r0, r1); + L1b += LV_MultiplyVectorByMatrix2x3(l1b, r0, r1); + } else { + L1r += l1r; + L1g += l1g; + L1b += l1b; + } + } + float4 LV_SampleVolumeOcclusion(uint id, float3 localUVW) { + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + return 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + return 1; + } + } + void LV_PointLightVolumeSH(float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + uint pointCount = min((uint) _UdonPointLightVolumeCount, VRCLV_MAX_LIGHTS_COUNT); + if (pointCount == 0) return; + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_LIGHTS_COUNT); + uint pcount = 0; // Point lights counter + [loop] for (uint pid = 0; pid < pointCount && pcount < maxOverdraw; pid++) { + LV_PointLight(pid, worldPos, occlusion, L0, L1r, L1g, L1b, pcount); + } + } + void LV_LightVolumeSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + if (volumesCount == 0) { // Legacy! Fallback to default light probes if Light Volume are not enabled or a version is too old to have a support. Legacy! + LV_SampleLightProbe(L0, L1r, L1g, L1b); + return; + } + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + bool lightProbesBlend = _UdonLightVolumeProbesBlend; + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + [loop] for (uint id = 0; id < volumesCount; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA && lightProbesBlend) { + LV_SampleLightProbe(L0, L1r, L1g, L1b); + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + float3 L0_A = 0; + float3 L1r_A = 0; + float3 L1g_A = 0; + float3 L1b_A = 0; + float4 occlusion_A = 1; + LV_SampleVolume(volumeID_A, localUVW_A, L0_A, L1r_A, L1g_A, L1b_A, occlusion_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || isNoA || (_UdonLightVolumeSharpBounds && isNoB)) { // Returning SH A result if it's the center of mask or out of bounds + L0 += L0_A; + L1r += L1r_A; + L1g += L1g_A; + L1b += L1b_A; + occlusion = occlusion_A; + occlusion *= mOcclusion; + return; + } + float3 L0_B = 0; + float3 L1r_B = 0; + float3 L1g_B = 0; + float3 L1b_B = 0; + float4 occlusion_B = 1; + if (isNoB && lightProbesBlend) { // No Volume found and light volumes blending enabled + LV_SampleLightProbe(L0_B, L1r_B, L1g_B, L1b_B); + } else { // Blending Volume A and Volume B + localUVW_B = isNoB ? localUVW : localUVW_B; + volumeID_B = isNoB ? volumesCount - 1 : volumeID_B; + LV_SampleVolume(volumeID_B, localUVW_B, L0_B, L1r_B, L1g_B, L1b_B, occlusion_B); + } + occlusion = lerp(occlusion_B, occlusion_A, mask); + occlusion *= mOcclusion; + L0 += lerp(L0_B, L0_A, mask); + L1r += lerp(L1r_B, L1r_A, mask); + L1g += lerp(L1g_B, L1g_A, mask); + L1b += lerp(L1b_B, L1b_A, mask); + } + void LV_LightVolumeAdditiveSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + if (additiveCount == 0 && (uint) _UdonPointLightVolumeCount == 0) return; // Legacy! + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW for Y Axis and Free rotations + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + uint count = min(_UdonLightVolumeOcclusionCount == 0 ? additiveCount : volumesCount, VRCLV_MAX_VOLUMES_COUNT); // Only use all volumes if occlusion volumes are enabled + [loop] for (uint id = 0; id < count; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA || _UdonLightVolumeOcclusionCount == 0) { + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + occlusion = LV_SampleVolumeOcclusion(volumeID_A, localUVW_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || (_UdonLightVolumeSharpBounds && isNoB)) { + occlusion *= mOcclusion; + return; // Returning A result if it's the center of mask or out of bounds + } + if (isNoB) occlusion = lerp(1, occlusion, mask); + else occlusion = lerp(LV_SampleVolumeOcclusion(volumeID_B, localUVW_B), occlusion, mask); + occlusion *= mOcclusion; + } + float3 LightVolumeSpecular(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specColor = max(float3(dot(reflect(-L1r, worldNormal), viewDir), dot(reflect(-L1g, worldNormal), viewDir), dot(reflect(-L1b, worldNormal), viewDir)), 0); + float3 rDir = normalize(normalize(L1r) + viewDir); + float3 gDir = normalize(normalize(L1g) + viewDir); + float3 bDir = normalize(normalize(L1b) + viewDir); + float rNh = saturate(dot(worldNormal, rDir)); + float gNh = saturate(dot(worldNormal, gDir)); + float bNh = saturate(dot(worldNormal, bDir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float rSpec = LV_DistributionGGX(rNh, roughExp); + float gSpec = LV_DistributionGGX(gNh, roughExp); + float bSpec = LV_DistributionGGX(bNh, roughExp); + float3 specs = (rSpec + gSpec + bSpec) * f0; + float3 coloredSpecs = specs * specColor; + float3 a = coloredSpecs + specs * L0; + float3 b = coloredSpecs * 3; + return max(lerp(a, b, smoothness) * 0.5f, 0.0); + } + float3 LightVolumeSpecular(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecular(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeSpecularDominant(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 dominantDir = L1r + L1g + L1b; + float3 dir = normalize(normalize(dominantDir) + viewDir); + float nh = saturate(dot(worldNormal, dir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float spec = LV_DistributionGGX(nh, roughExp); + return max(spec * L0 * f0, 0.0) * 1.5f; + } + float3 LightVolumeSpecularDominant(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecularDominant(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeEvaluate(float3 worldNormal, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + return float3(LV_EvaluateSH(L0.r, L1r, worldNormal), LV_EvaluateSH(L0.g, L1g, worldNormal), LV_EvaluateSH(L0.b, L1b, worldNormal)); + } + void LightVolumeSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled == 0) { + LV_SampleLightProbeDering(L0, L1r, L1g, L1b); + } else { + float4 occlusion = 1; + LV_LightVolumeSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + void LightVolumeAdditiveSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled != 0) { + float4 occlusion = 1; + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + float3 LightVolumeSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float3 LightVolumeAdditiveSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return 0; + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float LightVolumesEnabled() { + return _UdonLightVolumeEnabled; + } + float LightVolumesVersion() { + return _UdonLightVolumeVersion == 0 ? _UdonLightVolumeEnabled : _UdonLightVolumeVersion; + } + #endif + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float _GIEmissionMultiplier; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + #ifdef _EMISSION + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMap; + #endif + float4 _EmissionMap_ST; + float2 _EmissionMapPan; + float _EmissionMapUV; + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMask; + #endif + float4 _EmissionMask_ST; + float2 _EmissionMaskPan; + float _EmissionMaskUV; + float _EmissionMaskInvert; + float _EmissionMaskChannel; + float _EmissionMask0GlobalMask; + float _EmissionMask0GlobalMaskBlendType; + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionScrollingCurve; + #endif + float4 _EmissionScrollingCurve_ST; + float _EmissionFluorescence; + float4 _EmissionColor; + float _EmissionBaseColorAsMap; + float _EmissionStrength; + float _EmissionHueShiftEnabled; + float _EmissionHueShiftColorSpace; + float _EmissionHueSelectOrShift; + float _EmissionSaturation; + float _EmissionHueShift; + float _EmissionHueShiftSpeed; + float _EmissionCenterOutEnabled; + float _EmissionCenterOutSpeed; + float _EnableGITDEmission; + float _GITDEWorldOrMesh; + float _GITDEMinEmissionMultiplier; + float _GITDEMaxEmissionMultiplier; + float _GITDEMinLight; + float _GITDEMaxLight; + float _EmissionBlinkingEnabled; + float _EmissiveBlink_Min; + float _EmissiveBlink_Max; + float _EmissiveBlink_Velocity; + float _EmissionBlinkingOffset; + float _ScrollingEmission; + float4 _EmissiveScroll_Direction; + float _EmissiveScroll_Width; + float _EmissiveScroll_Velocity; + float _EmissiveScroll_Interval; + float _EmissionScrollingOffset; + float _EmissionReplace0; + float _EmissionScrollingVertexColor; + float _EmissionScrollingUseCurve; + float _EmissionColorThemeIndex; + float _EmissionAL0Enabled; + float2 _EmissionAL0StrengthMod; + float _EmissionAL0StrengthBand; + float2 _AudioLinkEmission0CenterOut; + float _AudioLinkEmission0CenterOutSize; + float _AudioLinkEmission0CenterOutBand; + float _AudioLinkEmission0CenterOutDuration; + float2 _EmissionAL0Multipliers; + float _EmissionAL0MultipliersBand; + #endif + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + float calculateGlowInTheDark(in float minLight, in float maxLight, in float minEmissionMultiplier, in float maxEmissionMultiplier, in float enabled, in float worldOrMesh, in PoiLight poiLight) + { + float glowInTheDarkMultiplier = 1; + if (enabled) + { + float3 lightValue = worldOrMesh ? calculateluminance(poiLight.finalLighting.rgb) : calculateluminance(poiLight.directColor.rgb); + float gitdeAlpha = saturate(inverseLerp(minLight, maxLight, lightValue)); + glowInTheDarkMultiplier = lerp(minEmissionMultiplier, maxEmissionMultiplier, gitdeAlpha); + } + return glowInTheDarkMultiplier; + } + float calculateScrollingEmission(in float3 direction, in float velocity, in float interval, in float scrollWidth, float offset, float3 position) + { + scrollWidth = max(scrollWidth, 0); + float phase = 0; + phase = dot(position, direction); + phase -= (_Time.y + offset) * velocity; + phase /= interval; + phase -= floor(phase); + phase = saturate(phase); + return (pow(phase, scrollWidth) + pow(1 - phase, scrollWidth * 4)) * 0.5; + } + float calculateBlinkingEmission(in float blinkMin, in float blinkMax, in float blinkVelocity, float offset) + { + float amplitude = (blinkMax - blinkMin) * 0.5f; + float base = blinkMin + amplitude; + return sin((_Time.y + offset) * blinkVelocity) * amplitude + base; + } + void applyALEmmissionStrength(in PoiMods poiMods, inout float emissionStrength, in float2 emissionStrengthMod, in float emissionStrengthBand, in float2 _EmissionALMultipliers, in float _EmissionALMultipliersBand, in float enabled) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + emissionStrength += lerp(emissionStrengthMod.x, emissionStrengthMod.y, poiMods.audioLink[emissionStrengthBand]); + emissionStrength *= lerp(_EmissionALMultipliers.x, _EmissionALMultipliers.y, poiMods.audioLink[_EmissionALMultipliersBand]); + } + #endif + } + void applyALCenterOutEmission(in PoiMods poiMods, in float nDotV, inout float emissionStrength, in float size, in float band, in float2 emissionToAdd, in float enabled, in float duration) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + float intensity; + [flatten] + if (duration >= 0) + { + intensity = getBandAtTime(band, saturate(remap(nDotV, 1, 0, 0, duration)), size); + } + else + { + duration *= -1; + intensity = getBandAtTime(band, saturate(remap(pow(nDotV, 2), 0, 1 + duration, 0, duration)), size); + } + emissionStrength += lerp(emissionToAdd[0], emissionToAdd[1], intensity); + } + #endif + } + #ifdef _EMISSION + float3 applyEmission(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiLight poiLight, in PoiCam poiCam, in PoiMods poiMods) + { + float3 emission0 = 0; + float emissionAlpha = 1; + float emissionStrength0 = 0.4; + float3 emissionColor0 = 0; + applyALEmmissionStrength(poiMods, emissionStrength0, float4(0,0,0,0), 0.0, float4(1,1,0,0), 0.0, 0.0); + applyALCenterOutEmission(poiMods, poiLight.nDotV, emissionStrength0, 0.0, 0.0, float4(0,0,0,0), 0.0, 1.0); + float glowInTheDarkMultiplier0 = calculateGlowInTheDark(0.0, 1.0, 1.0, 0.0, 0.0, 0.0, poiLight); + #ifdef POI_GRABPASS + float mixBaseColor = 0; + #else + float mixBaseColor = 0.0; + #endif + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + float4 emissionTex = 0; + if (!0.0) + { + emissionTex = POI2D_SAMPLER_PAN(_EmissionMap, _MainTex, poiUV(poiMesh.uv[0.0], float4(3,3,0,0)), float4(0.5,0,0,0)); + } + else + { + emissionTex = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMap, _MainTex, ((.5 + poiLight.nDotV * .5) * float4(3,3,0,0).xy) + _Time.x * 5.0); + } + emissionColor0 = emissionTex.rgb * lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + emissionAlpha = emissionTex.a; + #else + emissionColor0 = lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + #endif + float3 inverseLighting = saturate((1.0 - poiLight.directColor) * sqrt(poiLight.directColor)); + emissionColor0 = lerp(emissionColor0.rgb, emissionColor0.rgb * inverseLighting, 0.0); + emissionStrength0 *= emissionAlpha; + if (0.0) + { + float3 pos = poiMesh.localPos; + if (0.0) + { + pos = poiMesh.vertexColor.rgb; + } + if (0.0) + { + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + emissionStrength0 *= UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionScrollingCurve, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + (dot(pos, float4(0,-10,0,0).xyz) * 100.0) + _Time.x * 2.0).r; + #endif + } + else + { + emissionStrength0 *= calculateScrollingEmission(float4(0,-10,0,0).xyz, 2.0, 100.0, 3.0, 0.0, pos); + } + } + if (1.0) + { + emissionStrength0 *= calculateBlinkingEmission(0.2, 0.64, 1.0, 0.0); + } + if(0.0) + { + emissionColor0 = hueShift(emissionColor0, frac(0.0 + 0.0 * _Time.x), 0.0, 1.0); + emissionColor0 = lerp(emissionColor0, dot(emissionColor0, float3(0.3, 0.59, 0.11)), - (0.0)); + } + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + float emissionMask0 = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + _Time.x * float4(0,0,0,0))[0.0]; + #else + float emissionMask0 = 1; + #endif + if (0.0) + { + emissionMask0 = 1 - emissionMask0; + } + if (0.0 > 0) + { + emissionMask0 = maskBlend(emissionMask0, poiMods.globalMask[0.0 - 1], 2.0); + } + emissionStrength0 *= glowInTheDarkMultiplier0 * emissionMask0; + emission0 = max(emissionStrength0 * emissionColor0, 0); + #ifdef POI_DISSOLVE + if (_DissolveEmissionSide != 2) + { + emission0 *= lerp(1 - dissolveAlpha, dissolveAlpha, _DissolveEmissionSide); + } + #endif + poiFragData.emission += emission0; + return emission0 * 0.0; + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0004882813,0.0004882813,2048,2048), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) + float3 emissionBaseReplace = 0;// + #endif + #ifdef _EMISSION + emissionBaseReplace += applyEmission(poiFragData, poiMesh, poiLight, poiCam, poiMods); + #endif + #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) + poiFragData.baseColor.rgb = lerp(poiFragData.baseColor.rgb, saturate(emissionBaseReplace), poiMax(emissionBaseReplace)); + #endif + + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + #ifdef POI_PASS_META + UnityMetaInput meta; + UNITY_INITIALIZE_OUTPUT(UnityMetaInput, meta); + meta.Emission = poiFragData.emission * 1.0 * poiMods.globalEmission; + meta.Albedo = saturate(poiFragData.finalColor.rgb); + meta.SpecularColor = poiLight.finalLightAdd; + return UnityMetaFragment(meta) + POI_SAFE_RGB0; + #endif + poiFragData.finalColor += poiFragData.emission * poiMods.globalEmission; + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + } + CustomEditor "Thry.ShaderEditor" +} diff --git a/Assets/Quiz/Materials/DownCount/OptimizedShaders/Floor/Poiyomi Pro World.shader.meta b/Assets/Quiz/Materials/DownCount/OptimizedShaders/Floor/Poiyomi Pro World.shader.meta new file mode 100644 index 0000000..31287c6 --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/OptimizedShaders/Floor/Poiyomi Pro World.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c1ee721674e170644a78537a421c6aad +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/DownCount/OptimizedShaders/PlayerDesk.meta b/Assets/Quiz/Materials/DownCount/OptimizedShaders/PlayerDesk.meta new file mode 100644 index 0000000..727c00c --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/OptimizedShaders/PlayerDesk.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c9ff1a336b385d24ebf2739c458a2e13 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/DownCount/OptimizedShaders/PlayerDesk/Poiyomi Pro World.shader b/Assets/Quiz/Materials/DownCount/OptimizedShaders/PlayerDesk/Poiyomi Pro World.shader new file mode 100644 index 0000000..c17913e --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/OptimizedShaders/PlayerDesk/Poiyomi Pro World.shader @@ -0,0 +1,13296 @@ +Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/026a7c368b9c59343bc40afa213abe94" +{ + Properties + { + [HideInInspector] shader_master_label ("Poiyomi 9.3.48", Float) = 0 + [HideInInspector] shader_is_using_thry_editor ("", Float) = 0 + [HideInInspector] shader_locale ("0db0b86376c3dca4b9a6828ef8615fe0", Float) = 0 + [HideInInspector] footer_website ("{texture:{name:icon-poilogo,height:24},action:{type:URL,data:https://www.poiyomi.com},hover:WEBSITE}", Float) = 0 + [HideInInspector] footer_discord ("{texture:{name:icon-discord,height:24},action:{type:URL,data:https://discord.gg/Ays52PY},hover:DISCORD}", Float) = 0 + [HideInInspector] footer_patreon ("{texture:{name:icon-patreon-new,height:24},action:{type:URL,data:https://www.patreon.com/poiyomi},hover:PATREON}", Float) = 0 + [HideInInspector] footer_youtube ("{texture:{name:icon-youtube,height:24},action:{type:URL,data:https://www.youtube.com/poiyomi},hover:YOUTUBE}", Float) = 0 + [HideInInspector] footer_github ("{texture:{name:icon-github,height:24},action:{type:URL,data:https://github.com/poiyomi/PoiyomiToonShader},hover:GITHUB}", Float) = 0 + [HideInInspector] footer_bluesky ("{texture:{name:icon-bluesky,height:24},action:{type:URL,data:https://bsky.app/profile/poiyomi.com},hover:BLUESKY}", Float) = 0 + [HideInInspector] footer_twitter ("{texture:{name:icon-twitter,height:24},action:{type:URL,data:https://x.com/poiyomi},hover:X}", Float) = 0 + [Header(POIYOMI SHADER UI FAILED TO LOAD)] + [Header(. This is caused by scripts failing to compile. It can be fixed.)] + [Header(. The inspector will look broken and will not work properly until fixed.)] + [Header(. Please check your console for script errors.)] + [Header(. You can filter by errors in the console window.)] + [Header(. Often the topmost error points to the erroring script.)] + [Space(30)][Header(Common Error Causes)] + [Header(. Installing multiple Poiyomi Shader packages)] + [Header(. Make sure to delete the Poiyomi shader folder before you update Poiyomi.)] + [Header(. If a package came with Poiyomi this is bad practice and can cause issues.)] + [Header(. Delete the package and import it without any Poiyomi components.)] + [Header(. Bad VRCSDK installation (e.g. Both VCC and Standalone))] + [Header(. Delete the VRCSDK Folder in Assets if you are using the VCC.)] + [Header(. Avoid using third party SDKs. They can cause incompatibility.)] + [Header(. Script Errors in other scripts)] + [Header(. Outdated tools or prefabs can cause this.)] + [Header(. Update things that are throwing errors or move them outside the project.)] + [Space(30)][Header(Visit Our Discord to Ask For Help)] + [Space(5)]_ShaderUIWarning0 (" → discord.gg/poiyomi ← We can help you get it fixed! --{condition_showS:(0==1)}", Int) = -0 + [Space(1400)][Header(POIYOMI SHADER UI FAILED TO LOAD)] + _ShaderUIWarning1 ("Please scroll up for more information! --{condition_showS:(0==1)}", Int) = -0 + [HideInInspector] _ForgotToLockMaterial (";;YOU_FORGOT_TO_LOCK_THIS_MATERIAL;", Int) = 1 + [ThryShaderOptimizerLockButton] _ShaderOptimizerEnabled ("", Int) = 1 + [HideInInspector] GeometryShader_Enabled("GEOMETRY SHADER ENABLED", Float) = 1 + [HideInInspector] Tessellation_Enabled("TESSELLATION ENABLED", Float) = 1 + [ThryWideEnum(Opaque, 0, Cutout, 1, TransClipping, 9, Fade, 2, Transparent, 3, Additive, 4, Soft Additive, 5, Multiplicative, 6, 2x Multiplicative, 7)]_Mode("Rendering Preset--{on_value_actions:[ + {value:0,actions:[{type:SET_PROPERTY,data:render_queue=2000},{type:SET_PROPERTY,data:_AlphaForceOpaque=1}, {type:SET_PROPERTY,data:render_type=Opaque}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=0}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:1,actions:[{type:SET_PROPERTY,data:render_queue=2450},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=.5}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:9,actions:[{type:SET_PROPERTY,data:render_queue=2460},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.01}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:2,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.002}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:3,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=1}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:4,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:5,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=4}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=4}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=4}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:6,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:7,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=3}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=3}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]} + }]}]}", Int) = 0 + [HideInInspector] m_mainCategory ("Color & Normals--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/main},hover:Documentation}}", Float) = 0 + _Color ("Color & Alpha--{reference_property:_ColorThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _ColorThemeIndex ("", Int) = 0 + [sRGBWarning(true)]_MainTex ("Texture--{reference_properties:[_MainTexPan, _MainTexUV, _MainPixelMode, _MainTexStochastic, _MainIgnoreTexAlpha]}", 2D) = "white" { } + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _MainTexUV ("UV", Int) = 0 + [HideInInspector][Vector2]_MainTexPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ToggleUI]_MainPixelMode ("Pixel Mode", Float) = 0 + [HideInInspector][ToggleUI]_MainTexStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][ToggleUI]_MainIgnoreTexAlpha ("Ignore Alpha", Float) = 0 + [Normal]_BumpMap ("Normal Map--{reference_properties:[_BumpMapPan, _BumpMapUV, _BumpScale, _BumpMapStochastic]}", 2D) = "bump" { } + [HideInInspector][Vector2]_BumpMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _BumpMapUV ("UV", Int) = 0 + [HideInInspector]_BumpScale ("Intensity", Range(0, 10)) = 1 + [HideInInspector][ToggleUI]_BumpMapStochastic ("Stochastic Sampling", Float) = 0 + [sRGBWarning]_AlphaMask ("Alpha Map--{reference_properties:[_AlphaMaskPan, _AlphaMaskUV, _AlphaMaskInvert, _MainAlphaMaskMode, _AlphaMaskBlendStrength, _AlphaMaskValue], alts:[_AlphaMap]}", 2D) = "white" { } + [HideInInspector][Vector2]_AlphaMaskPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _AlphaMaskUV ("UV", Int) = 0 + [HideInInspector][ThryWideEnum(Off, 0, Replace, 1, Multiply, 2, Add, 3, Subtract, 4)]_MainAlphaMaskMode ("Blend Mode", Int) = 2 + [HideInInspector]_AlphaMaskBlendStrength ("Blend Strength", Float) = 1 + [HideInInspector]_AlphaMaskValue ("Blend Offset", Float) = 0 + [HideInInspector][ToggleUI]_AlphaMaskInvert ("Invert", Float) = 0 + _Cutoff ("Alpha Cutoff", Range(0, 1.001)) = 0.5 + [HideInInspector] m_start_Alpha ("Alpha Options--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/alpha-options},hover:Documentation}}", Float) = 0 + [ToggleUI]_AlphaForceOpaque ("Force Opaque", Float) = 1 + _AlphaMod ("Alpha Mod", Range(-1, 1)) = 0.0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _AlphaGlobalMask ("Global Mask--{reference_property:_AlphaGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _AlphaGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] m_end_Alpha ("Alpha Options", Float) = 0 + [HideInInspector] m_lightingCategory ("Shading", Float) = 0 + [HideInInspector] m_start_PoiLightData ("Light Data--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/light-data},hover:Documentation}}", Float) = 0 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingAOMaps ("AO Maps (expand)--{reference_properties:[_LightingAOMapsPan, _LightingAOMapsUV,_LightDataAOStrengthR,_LightDataAOStrengthG,_LightDataAOStrengthB,_LightDataAOStrengthA, _LightDataAOGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingAOMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingAOMapsUV ("UV", Int) = 0 + [HideInInspector]_LightDataAOStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightDataAOStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataAOGlobalMaskR ("Global Mask--{reference_property:_LightDataAOGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataAOGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingDetailShadowMaps ("Shadow Map (expand)--{reference_properties:[_LightingDetailShadowMapsPan, _LightingDetailShadowMapsUV,_LightingDetailShadowStrengthR,_LightingDetailShadowStrengthG,_LightingDetailShadowStrengthB,_LightingDetailShadowStrengthA,_LightingAddDetailShadowStrengthR,_LightingAddDetailShadowStrengthG,_LightingAddDetailShadowStrengthB,_LightingAddDetailShadowStrengthA, _LightDataDetailShadowGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingDetailShadowMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingDetailShadowMapsUV ("UV", Int) = 0 + [HideInInspector]_LightingDetailShadowStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingDetailShadowStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthR ("Additive R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingAddDetailShadowStrengthG ("Additive G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthB ("Additive B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthA ("Additive A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataDetailShadowGlobalMaskR ("Global Mask--{reference_property:_LightDataDetailShadowGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataDetailShadowGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingShadowMasks ("Shadow Masks (expand)--{reference_properties:[_LightingShadowMasksPan, _LightingShadowMasksUV,_LightingShadowMaskStrengthR,_LightingShadowMaskStrengthG,_LightingShadowMaskStrengthB,_LightingShadowMaskStrengthA, _LightDataShadowMaskGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingShadowMasksPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingShadowMasksUV ("UV", Int) = 0 + [HideInInspector]_LightingShadowMaskStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingShadowMaskStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataShadowMaskGlobalMaskR ("Global Mask--{reference_property:_LightDataShadowMaskGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataShadowMaskGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [HideInInspector] s_start_LightDataBasePass ("Base Pass (Directional & Baked Lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [Enum(Poi Custom, 0, Standard, 1, UTS2, 2, OpenLit(lil toon), 3)] _LightingColorMode ("Light Color Mode", Int) = 0 + [Enum(Poi Custom, 0, Normalized NDotL, 1, Saturated NDotL, 2, Casted Shadows Only, 3, SDF, 4)] _LightingMapMode ("Light Map Mode", Int) = 0 + [HideInInspector] s_start_LightDataSDF ("Signed Distance fields--{persistent_expand:true,default_expand:true, condition_showS:(_LightingMapMode==4)}", Float) = 1 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, Nothing, Nothing, Linear, false)]_LightDataSDFMap ("SDF Map (expand)--{reference_properties:[_LightDataSDFMapPan, _LightDataSDFMapUV]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightDataSDFMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightDataSDFMapUV ("UV", Int) = 0 + _LightDataSDFMapLOD ("LOD", Range(0, 1)) = 0 + _LightDataSDFBlendY ("Blend Y Direction", Range(0.001, 2)) = 1 + [HideInInspector] s_end_LightDataSDF ("Signed Distance fields", Float) = 1 + [Enum(Poi Custom, 0, Forced Local Direction, 1, Forced World Direction, 2, UTS2, 3, OpenLit(lil toon), 4, View Direction, 5)] _LightingDirectionMode ("Light Direction Mode", Int) = 0 + [Vector3]_LightngForcedDirection ("Forced Direction--{condition_showS:(_LightingDirectionMode==1 || _LightingDirectionMode==2)}", Vector) = (0, 0, 0) + _LightingViewDirOffsetPitch ("View Dir Offset Pitch--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + _LightingViewDirOffsetYaw ("View Dir Offset Yaw--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + [ToggleUI]_LightingForceColorEnabled ("Force Light Color", Float) = 0 + _LightingForcedColor ("Forced Color--{condition_showS:(_LightingForceColorEnabled==1), reference_property:_LightingForcedColorThemeIndex}", Color) = (1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _LightingForcedColorThemeIndex ("", Int) = 0 + _Unlit_Intensity ("Unlit_Intensity--{condition_showS:(_LightingColorMode==2)}", Range(0.001, 4)) = 1 + [DoNotLock][ToggleUI]_LightingCapEnabled ("Limit Brightness", Float) = 1 + [DoNotLock]_LightingCap ("Max Brightness--{condition_showS:(_LightingCapEnabled==1)}", Range(0, 10)) = 1 + [DoNotLock]_LightingMinLightBrightness ("Min Brightness", Range(0, 1)) = 0 + _LightingIndirectUsesNormals ("Indirect Uses Normals--{condition_showS:(_LightingColorMode==0)}", Range(0, 1)) = 0 + _LightingCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 0 + [DoNotLock]_LightingMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + [ToggleUI]_LightingVertexLightingEnabled ("Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingMirrorVertexLightingEnabled ("Mirror Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingEnableLightVolumes ("Light Volumes", Float) = 1 + [HideInInspector] s_end_LightDataBasePass ("Base Pass", Float) = 1 + [HideInInspector] s_start_LightDataAddPass ("Add Pass (Point & Spot lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [ToggleUI]_LightingAdditiveEnable ("Pixel lights (Important)", Float) = 1 + [ToggleUI]_DisableDirectionalInAdd ("Ignore Directional Lights--{condition_showS:(_LightingAdditiveEnable==1)}", Float) = 1 + [ToggleUI]_LightingAdditiveLimited ("Limit Brightness", Float) = 1 + _LightingAdditiveLimit ("Max Brightness--{condition_showS:(_LightingAdditiveLimited==1)}", Range(0, 10)) = 1 + _LightingAdditiveCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 1 + _LightingAdditiveMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + _LightingAdditivePassthrough ("Point Light Passthrough--{condition_showS:(_LightingAdditiveEnable==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_LightDataAddPass ("Add Pass", Float) = 1 + [HideInInspector] s_start_LightDataDebug ("Debug / Data Visualizations--{reference_property:_LightDataDebugEnabled,persistent_expand:true}", Float) = 0 + [HideInInspector][DoNotAnimate][ThryToggleUI(false)]_LightDataDebugEnabled ("Debug", Float) = 0 + [ThryWideEnum(Direct Color, 0, Indirect Color, 1, Light Map, 2, Attenuation, 3, N Dot L, 4, Half Dir, 5, Direction, 6, Add Color, 7, Add Attenuation, 8, Add Shadow, 9, Add N Dot L, 10)] _LightingDebugVisualize ("Visualize", Int) = 0 + [HideInInspector] s_end_LightDataDebug ("Debug", Float) = 0 + [HideInInspector] m_end_PoiLightData ("Light Data", Float) = 0 + [HideInInspector] m_start_bakedLighting ("Baked Lighting", Float) = 0 + _GIEmissionMultiplier ("GI Emission Multiplier", Float) = 1 + [HideInInspector] DSGI ("DSGI", Float) = 0 //add this property for double sided illumination settings to be shown + [HideInInspector] LightmapFlags ("Lightmap Flags", Float) = 0 //add this property for lightmap flags settings to be shown + [HideInInspector] m_end_bakedLighting ("Baked Lighting", Float) = 0 + [HideInInspector] m_start_PoiShading (" Shading--{reference_property:_ShadingEnabled,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/main},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(VIGNETTE_MASKED)]_ShadingEnabled ("Enable Shading", Float) = 1 + [DoNotAnimate][KeywordEnum(TextureRamp, Multilayer Math, Wrapped, Skin, ShadeMap, Flat, Realistic, Cloth, SDF)] _LightingMode ("Lighting Type", Float) = 5 + _LightingShadowColor ("Shadow Tint--{condition_showS:(_LightingMode!=4 && _LightingMode!=1 && _LightingMode!=5)}", Color) = (1, 1, 1) + _ShadowStrength ("Shadow Strength--{condition_showS:(_LightingMode<=4 || _LightingMode==8)}", Range(0, 1)) = 1 + _LightingIgnoreAmbientColor ("Ignore Indirect Shadow Color--{condition_showS:(_LightingMode<=3 || _LightingMode==8)}", Range(0, 1)) = 1 + [Space(15)] + [HideInInspector] s_start_ShadingAddPass ("Add Pass (Point & Spot Lights)--{persistent_expand:true,default_expand:false}", Float) = 0 + [Enum(Realistic, 0, Toon, 1, Same as Base Pass, 3)] _LightingAdditiveType ("Lighting Type", Int) = 3 + _LightingAdditiveGradientStart ("Gradient Start--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = 0 + _LightingAdditiveGradientEnd ("Gradient End--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_ShadingAddPass ("Add Pass", Float) = 0 + [HideInInspector] s_start_ShadingGlobalMask ("Global Masks--{persistent_expand:true,default_expand:false}", Float) = 0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapApplyGlobalMaskIndex ("LightMap to Global Mask--{reference_property:_ShadingRampedLightMapApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapApplyGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapInverseApplyGlobalMaskIndex ("Inversed LightMap to Global Mask--{reference_property:_ShadingRampedLightMapInverseApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapInverseApplyGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] s_end_ShadingGlobalMask ("Global Masks", Float) = 0 + [HideInInspector] m_end_PoiShading ("Shading", Float) = 0 + [HideInInspector] m_start_brdf (" Reflections & Specular--{reference_property:_MochieBRDF,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/reflections-and-specular},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(MOCHIE_PBR)]_MochieBRDF ("Enable", Float) = 0 + _MochieMetallicMultiplier ("Metallic", Range(0, 1)) = 0 + _MochieRoughnessMultiplier ("Smoothness", Range(0, 1)) = 1 + _MochieReflectionTint ("Reflection Tint--{reference_property:_MochieReflectionTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _MochieReflectionTintThemeIndex ("", Int) = 0 + _MochieSpecularTint ("Specular Tint--{reference_property:_MochieSpecularTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _MochieSpecularTintThemeIndex ("", Int) = 0 + [sRGBWarning][ThryRGBAPacker(R Metallic Map, G Smoothness Map, B Reflection Mask, A Specular Mask, linear, false)]_MochieMetallicMaps ("Packed Maps [Click to Expand]--{reference_properties:[_MochieMetallicMapsPan, _MochieMetallicMapsUV, _MochieMetallicMapsStochastic, _MochieMetallicMapsMetallicChannel, _MochieMetallicMapsRoughnessChannel, _MochieMetallicMapsReflectionMaskChannel, _MochieMetallicMapsSpecularMaskChannel, _MochieMetallicMapInvert, _MochieRoughnessMapInvert, _MochieReflectionMaskInvert, _MochieSpecularMaskInvert]}", 2D) = "white" { } + [HideInInspector][Vector2]_MochieMetallicMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)]_MochieMetallicMapsUV ("UV", Int) = 0 + [HideInInspector][ToggleUI]_MochieMetallicMapsStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsMetallicChannel ("Metallic Channel", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsRoughnessChannel ("Smoothness Channel", Float) = 1 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsReflectionMaskChannel ("Reflection Mask Channel", Float) = 2 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsSpecularMaskChannel ("Specular Mask Channel", Float) = 3 + [HideInInspector][ToggleUI]_MochieMetallicMapInvert ("Invert Metallic", Float) = 0 + [HideInInspector][ToggleUI]_MochieRoughnessMapInvert ("Invert Smoothness", Float) = 0 + [HideInInspector][ToggleUI]_MochieReflectionMaskInvert ("Invert Reflection Mask", Float) = 0 + [HideInInspector][ToggleUI]_MochieSpecularMaskInvert ("Invert Specular Mask", Float) = 0 + [Space(10)] + _MochieReflectionStrength ("Reflection Visibility", Range(0, 1)) = 1 + _MochieSpecularStrength ("Specular Visibility", Range(0, 5)) = 1 + _RefSpecFresnelStrength ("Fresnel Strength", Range(0, 1)) = .5 + _SFExposureOcclusion ("Exposure Occlusion", Range(0, 1)) = 0 + [Space(10)] + [ThryTexture][NoScaleOffset]_MochieReflCube ("Cubemap", Cube) = "" { } + [ToggleUI]_MochieForceFallback ("Force Fallback", Int) = 0 + [HideInInspector] s_start_BRDFTPSMaskGroup ("TPS--{condition_showS:(_TPSPenetratorEnabled==1)}", Float) = 0 + [ThryToggleUI(true)] _BRDFTPSDepthEnabled (" TPS Depth Enabled", Float) = 0 + _BRDFTPSReflectionMaskStrength ("Reflection Mask Strength--{condition_showS:(_BRDFTPSDepthEnabled==1)}", Range(0, 1)) = 1 + _BRDFTPSSpecularMaskStrength ("Specular Mask Strength--{condition_showS:(_BRDFTPSDepthEnabled==1)}", Range(0, 1)) = 1 + [HideInInspector] s_end_BRDFTPSMaskGroup ("", Float) = 0 + [HideInInspector] s_start_ggxanisotropics(" Anisotropics--{reference_property:_GGXAnisotropics,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ThryToggle(GGX_ANISOTROPICS)]_GGXAnisotropics ("Enable", Float) = 0 + [sRGBWarning]_AnisotropyMap("Anisotropy Map--{reference_properties:[_AnisotropyMapPan, _AnisotropyMapUV, _AnisotropyMapChannel]}", 2D) = "bump" { } + [HideInInspector][Vector2]_AnisotropyMapPan("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _AnisotropyMapUV ("UV", Int) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3)]_AnisotropyMapChannel ("Channel", Float) = 0 + _Anisotropy ("Anisotropy", Range(-1, 1)) = 0 + _ReflectionAnisotropicStretch("Reflection Stretch", Range(1, 5)) = 1 + _RoughnessAnisotropy("Roughness Anisotropy", Range(0, 1)) = 1 + [HideInInspector] s_end_ggxanisotropics ("", Float) = 0 + [HideInInspector] s_start_PBRSecondSpecular ("2nd Specular--{reference_property:_Specular2ndLayer,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_Specular2ndLayer ("2nd Specular", Float) = 0 + _MochieSpecularStrength2 ("Visibility", Range(0, 5)) = 1 + _MochieRoughnessMultiplier2 ("Smoothness", Range(0, 1)) = 1 + [HideInInspector] s_end_PBRSecondSpecular ("Name", Float) = 0 + [HideInInspector] s_start_PBRSplitMaskSample ("Split Mask Sampling--{reference_property:_PBRSplitMaskSample,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_PBRSplitMaskSample ("Split Mask Sampling", Float) = 0 + [VectorLabel(tX, tY, oX, oY)]_PBRMaskScaleTiling ("Tiling/Offset", Vector) = (1, 1, 0, 0) + [ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)]_MochieMetallicMasksUV ("UV", Int) = 0 + [ToggleUI]_PBRSplitMaskStochastic ("Stochastic Sampling", Float) = 0 + [Vector2]_MochieMetallicMasksPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector] s_end_PBRSplitMaskSample ("Split Mask Sampling", Float) = 0 + [HideInInspector] s_start_brdfadvanced ("GSAA & Advanced Controls--{persistent_expand:true,default_expand:false}", Float) = 0 + [ToggleUI]_MochieLitFallback ("Lit Fallback", Float) = 1 + [ToggleUI]_IgnoreCastedShadows ("Ignore Casted Shadows", Float) = 0 + _PBRNormalSelect ("Pixel Normal Mix", Range(0, 1)) = 1 + [ThryToggleUI(true)]_MochieGSAAEnabled (" GSAA", Float) = 1 + _PoiGSAAVariance ("GSAA Variance--{condition_showS:(_MochieGSAAEnabled==1)}", Range(0, 1)) = 0.15 + _PoiGSAAThreshold ("GSAA Threshold--{condition_showS:(_MochieGSAAEnabled==1)}", Range(0, 1)) = 0.1 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieMetallicGlobalMask ("Metallic--{reference_property:_MochieMetallicGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieMetallicGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieSmoothnessGlobalMask ("Smoothness--{reference_property:_MochieSmoothnessGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieSmoothnessGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieReflectionStrengthGlobalMask ("Reflection Strength--{reference_property:_MochieReflectionStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieReflectionStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieSpecularStrengthGlobalMask ("Specular Strength--{reference_property:_MochieSpecularStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieSpecularStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] s_end_brdfadvanced ("", Float) = 0 + [HideInInspector] m_end_brdf ("", Float) = 0 + [HideInInspector] m_OutlineCategory (" Outlines--{reference_property:_EnableOutlines,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/outlines/main},hover:Documentation}}", Float) = 0 + [HideInInspector] m_specialFXCategory ("Special FX", Float) = 0 + [HideInInspector] m_start_emissionOptions (" Emission 0--{reference_property:_EnableEmission,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/special-fx/emission},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(_EMISSION)] + _EnableEmission ("Enable Emission 0", Float) = 0 + [sRGBWarning]_EmissionMask ("Emission Mask--{reference_properties:[_EmissionMaskPan, _EmissionMaskUV, _EmissionMaskChannel, _EmissionMaskInvert, _EmissionMask0GlobalMask]}", 2D) = "white" { } + [HideInInspector][Vector2]_EmissionMaskPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _EmissionMaskUV ("UV", Int) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3)]_EmissionMaskChannel ("Channel", Float) = 0 + [HideInInspector][ToggleUI]_EmissionMaskInvert ("Invert", Float) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _EmissionMask0GlobalMask ("Global Mask--{reference_property:_EmissionMask0GlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)]_EmissionMask0GlobalMaskBlendType ("Blending", Range(0, 1)) = 2 + [HDR]_EmissionColor ("Emission Color--{reference_property:_EmissionColorThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _EmissionColorThemeIndex ("", Int) = 0 + [sRGBWarning(true)][Gradient]_EmissionMap ("Emission Map--{reference_properties:[_EmissionMapPan, _EmissionMapUV]}", 2D) = "white" { } + [HideInInspector][Vector2]_EmissionMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _EmissionMapUV ("UV", Int) = 0 + _EmissionStrength ("Emission Strength", Range(0, 20)) = 0 + [ToggleUI]_EmissionBaseColorAsMap ("Use Base Colors", Float) = 0 + [ToggleUI]_EmissionReplace0 ("Override Base Color", Float) = 0 + _EmissionFluorescence ("Fluorescence", Range(0, 1)) = 0 + [HideInInspector] s_start_EmissionHueShift0 ("Color Adjust--{reference_property:_EmissionHueShiftEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionHueShiftEnabled ("Hue Shift", Float) = 0 + [ThryWideEnum(OKLab, 0, HSV, 1)] _EmissionHueShiftColorSpace ("Color Space", Int) = 0 + [ThryWideEnum(Hue Select, 0, Hue Shift, 1)] _EmissionHueSelectOrShift ("Select or Shift", Int) = 1 + _EmissionSaturation ("Saturation", Range(-1, 10)) = 0 + _EmissionHueShift ("Hue Shift", Range(0, 1)) = 0 + _EmissionHueShiftSpeed ("Hue Shift Speed", Float) = 0 + [HideInInspector] s_end_EmissionHueShift0 ("", Float) = 0 + [HideInInspector] s_start_EmissionCenterOut0 ("Center Out--{reference_property:_EmissionCenterOutEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionCenterOutEnabled ("Center Out", Float) = 0 + _EmissionCenterOutSpeed ("Flow Speed", Float) = 5 + [HideInInspector] s_end_EmissionCenterOut0 ("", Float) = 0 + [HideInInspector] s_start_EmissionLightBased0 ("Light Based--{reference_property:_EnableGITDEmission,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EnableGITDEmission ("Light Based", Float) = 0 + [Enum(World, 0, Mesh, 1)] _GITDEWorldOrMesh ("Lighting Type", Int) = 0 + _GITDEMinEmissionMultiplier ("Min Emission Multiplier", Range(0, 1)) = 1 + _GITDEMaxEmissionMultiplier ("Max Emission Multiplier", Range(0, 1)) = 0 + _GITDEMinLight ("Min Lighting", Range(0, 1)) = 0 + _GITDEMaxLight ("Max Lighting", Range(0, 1)) = 1 + [HideInInspector] s_end_EmissionLightBased0 ("", Float) = 0 + [HideInInspector] s_start_EmissionBlinking0 ("Blinking--{reference_property:_EmissionBlinkingEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionBlinkingEnabled ("Blinking", Float) = 0 + _EmissiveBlink_Min ("Emissive Blink Min", Float) = 0 + _EmissiveBlink_Max ("Emissive Blink Max", Float) = 1 + _EmissiveBlink_Velocity ("Emissive Blink Velocity", Float) = 4 + _EmissionBlinkingOffset ("Offset", Float) = 0 + [HideInInspector] s_end_EmissionBlinking0 ("", Float) = 0 + [HideInInspector] s_start_ScrollingEmission0 ("Scrolling--{reference_property:_ScrollingEmission,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI] _ScrollingEmission ("Scrolling", Float) = 0 + [ToggleUI]_EmissionScrollingUseCurve ("Use Curve", float) = 0 + [Curve]_EmissionScrollingCurve ("Curve--{condition_showS:(_EmissionScrollingUseCurve==1)}", 2D) = "white" { } + [ToggleUI]_EmissionScrollingVertexColor ("VColor as position", float) = 0 + _EmissiveScroll_Direction ("Direction", Vector) = (0, -10, 0, 0) + _EmissiveScroll_Width ("Width", Float) = 10 + _EmissiveScroll_Velocity ("Velocity", Float) = 10 + _EmissiveScroll_Interval ("Interval", Float) = 20 + _EmissionScrollingOffset ("Offset", Float) = 0 + [HideInInspector] s_end_ScrollingEmission0 ("", Float) = 0 + [Space(4)] + [ThryToggleUI(true)] _EmissionAL0Enabled (" Audio Link--{ condition_showS:_EnableAudioLink==1}", Float) = 0 + [HideInInspector] s_start_EmissionAL0Multiply ("Strength Multiply--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _EmissionAL0MultipliersBand ("Band", Int) = 0 + [VectorLabel(Min, Max)]_EmissionAL0Multipliers ("Multiplier", Vector) = (1, 1, 0, 0) + [HideInInspector] s_end_EmissionAL0Multiply ("Strength Multiply", Float) = 0 + [HideInInspector] s_start_EmissionAL0Add ("Strength Add--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _EmissionAL0StrengthBand ("Band", Int) = 0 + [VectorLabel(Min, Max)]_EmissionAL0StrengthMod ("Strength", Vector) = (0, 0, 0, 0) + [HideInInspector] s_end_EmissionAL0Add ("Strength Add", Float) = 0 + [HideInInspector] s_start_EmissionAL0COut ("Center Out--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _AudioLinkEmission0CenterOutBand ("Band", Int) = 0 + [VectorLabel(Min, Max)] _AudioLinkEmission0CenterOut ("Strength", Vector) = (0, 0, 0, 0) + _AudioLinkEmission0CenterOutSize ("Intensity Threshold", Range(0, 1)) = 0 + _AudioLinkEmission0CenterOutDuration ("Duration", Range(-1, 1)) = 1 + [HideInInspector] s_end_EmissionAL0COut ("Center Out", Float) = 0 + [HideInInspector] m_end_emissionOptions ("", Float) = 0 + [HideInInspector] m_vertexCategory ("Vertex Options", Float) = 0 + [HideInInspector] m_start_Uzumore (" View Clip Prevention (Uzumore)--{reference_property:_UzumoreCategoryToggle,button_author:{text:sigmal00,action:{type:URL,data:https://github.com/sigmal00},hover:GitHub}}, button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/vertex-options/view-clip-prevention},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(POI_UZUMORE)] _UzumoreCategoryToggle (" View Clip Prevention (Uzumore)", Float) = 0 + [ToggleUI] _UzumoreEnabled ("Animation Toggle", Float) = 1 + _UzumoreAmount ("Push Amount (m)", Float) = 0.1 + _UzumoreBias ("Push Bias", Float) = 0.001 + [sRGBWarning]_UzumoreMask ("Push Mask (A)", 2D) = "white" { } + [ThryWideEnum(R, 0, G, 1, B, 2, A, 3)] _UzumoreMaskUV ("Push Mask Channel", Float) = 3 + [HideInInspector] m_end_Uzumore ("Camera Push Back", Float) = 0 + [HideInInspector] m_modifierCategory ("Global Modifiers & Data", Float) = 0 + [HideInInspector] m_start_PoiGlobalCategory ("Global Data and Masks", Float) = 0 + [HideInInspector] m_start_GlobalThemes ("Global Themes--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/global-themes},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HDR]_GlobalThemeColor0 ("Theme Color 0", Color ) = (1, 1, 1, 1) + _GlobalThemeHue0 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed0 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation0 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue0 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HDR]_GlobalThemeColor1 ("Theme Color 1", Color ) = (1, 1, 1, 1) + _GlobalThemeHue1 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed1 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation1 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue1 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HDR]_GlobalThemeColor2 ("Theme Color 2", Color ) = (1, 1, 1, 1) + _GlobalThemeHue2 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed2 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation2 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue2 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HDR]_GlobalThemeColor3 ("Theme Color 3", Color ) = (1, 1, 1, 1) + _GlobalThemeHue3 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed3 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation3 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue3 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HideInInspector] m_end_GlobalThemes ("Global Themes", Float ) = 0 + [HideInInspector] m_start_GlobalMask ("Global Mask--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/global-masks},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalMaskModifiers ("Modifiers", Float) = 0 + [HideInInspector] m_end_GlobalMaskModifiers ("", Float) = 0 + [HideInInspector] m_end_GlobalMask ("Global Mask", Float) = 0 + [HideInInspector] m_end_PoiGlobalCategory ("Global Data and Masks ", Float) = 0 + [HideInInspector] m_start_PoiUVCategory ("UVs", Float) = 0 + [HideInInspector] m_start_Stochastic ("Stochastic Sampling--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/stochastic-sampling},hover:Documentation}}", Float) = 0 + [KeywordEnum(Deliot Heitz, Hextile, None)] _StochasticMode ("Sampling Mode", Float) = 0 + [HideInInspector] s_start_deliot ("Deliot Heitz--{persistent_expand:true,default_expand:false,condition_show:_StochasticMode==0}", Float) = 0 + _StochasticDeliotHeitzDensity ("Detiling Density", Range(0.1, 10)) = 1 + [HideInInspector] s_end_deliot ("Deliot Heitz", Float) = 0 + [HideInInspector] m_end_Stochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector] m_start_uvLocalWorld ("Local World UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/local-world-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos0 ("Local X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos1 ("Local Y", Int) = 1 + [Space(10)] + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos0 ("World X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos1 ("World Y", Int) = 2 + [HideInInspector] m_end_uvLocalWorld ("Local World UV", Float) = 0 + [HideInInspector] m_start_uvPanosphere ("Panosphere UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/panosphere-uv},hover:Documentation}}", Float) = 0 + [ToggleUI] _StereoEnabled ("Stereo Enabled", Float) = 0 + [ToggleUI] _PanoUseBothEyes ("Perspective Correct (VR)", Float) = 1 + [HideInInspector] m_end_uvPanosphere ("Panosphere UV", Float) = 0 + [HideInInspector] m_start_uvPolar ("Polar UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/polar-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8)] _PolarUV ("UV", Int) = 0 + [Vector2]_PolarCenter ("Center Coordinate", Vector) = (.5, .5, 0, 0) + _PolarRadialScale ("Radial Scale", Float) = 1 + _PolarLengthScale ("Length Scale", Float) = 1 + _PolarSpiralPower ("Spiral Power", Float) = 0 + [HideInInspector] m_end_uvPolar ("Polar UV", Float) = 0 + [HideInInspector] m_end_PoiUVCategory ("UVs ", Float) = 0 + [HideInInspector] m_start_PoiPostProcessingCategory ("Post Processing", Float) = 0 + [HideInInspector] m_start_PPAnimations ("PP Animations--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/post-processing/pp-animations},hover:Documentation}}", Float) = 0 + [Helpbox(1)] _PPHelp ("This section meant for real time adjustments through animations and not to be changed in unity", Int) = 0 + _PPLightingMultiplier ("Lighting Mulitplier", Float) = 1 + _PPLightingAddition ("Lighting Add", Float) = 0 + _PPEmissionMultiplier ("Emission Multiplier", Float) = 1 + _PPFinalColorMultiplier ("Final Color Multiplier", Float) = 1 + [HideInInspector] m_end_PPAnimations ("PP Animations ", Float) = 0 + [HideInInspector] m_end_PoiPostProcessingCategory ("Post Processing ", Float) = 0 + [HideInInspector] m_thirdpartyCategory ("Third Party", Float) = 0 + [HideInInspector] m_renderingCategory ("Rendering--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/main},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.CullMode)] _Cull ("Cull", Float) = 2 + [DoNotAnimate][Enum(UnityEngine.Rendering.CompareFunction)] _ZTest ("ZTest", Float) = 4 + [DoNotAnimate][Enum(Off, 0, On, 1)] _ZWrite ("ZWrite", Int) = 1 + [DoNotAnimate][ThryMask(Thry.ColorMaskFlags)] _ColorMask ("Color Mask", Int) = 15 + [DoNotAnimate] _OffsetFactor ("Offset Factor", Float) = 0.0 + [DoNotAnimate] _OffsetUnits ("Offset Units", Float) = 0.0 + [DoNotAnimate][ToggleUI] _RenderingReduceClipDistance ("Reduce Clip Distance", Float) = 0 + [DoNotAnimate][ToggleUI] _ZClip ("Z Clip", Float) = 1 + [DoNotAnimate][ToggleUI] _IgnoreFog ("Ignore Fog", Float) = 0 + [DoNotAnimate][ToggleUI]_FlipBackfaceNormals ("Flip Backface Normals", Int) = 1 + [DoNotAnimate][HideInInspector] Instancing ("Instancing", Float) = 0 //add this property for instancing variants settings to be shown + [ToggleUI] _RenderingEarlyZEnabled ("Early Z", Float) = 0 + [HideInInspector] m_start_blending ("Blending--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/blending},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOp ("RGB Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlend ("RGB Destination Blend", Int) = 0 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOp ("RGB Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlend ("RGB Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_start_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOpAlpha ("Alpha Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlendAlpha ("Alpha Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlendAlpha ("Alpha Destination Blend", Int) = 10 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOpAlpha ("Alpha Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlendAlpha ("Alpha Source Blend", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlendAlpha ("Alpha Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_end_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [HideInInspector] m_end_blending ("Blending", Float) = 0 + [HideInInspector] m_start_StencilPassOptions ("Stencil--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/stencil},hover:Documentation}}", Float) = 0 + [ThryWideEnum(Simple, 0, Front Face vs Back Face, 1)] _StencilType ("Stencil Type", Float) = 0 + [IntRange] _StencilRef ("Stencil Reference Value", Range(0, 255)) = 0 + [IntRange] _StencilReadMask ("Stencil ReadMask Value", Range(0, 255)) = 255 + [IntRange] _StencilWriteMask ("Stencil WriteMask Value", Range(0, 255)) = 255 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilPassOp ("Stencil Pass Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFailOp ("Stencil Fail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilZFailOp ("Stencil ZFail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilCompareFunction ("Stencil Compare Function--{condition_showS:(_StencilType==0)}", Float) = 8 + [HideInInspector] m_start_StencilPassBackOptions("Back--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp0 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackPassOp ("Back Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackFailOp ("Back Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackZFailOp ("Back ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilBackCompareFunction ("Back Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassBackOptions("Back", Float) = 0 + [HideInInspector] m_start_StencilPassFrontOptions("Front--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp1 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontPassOp ("Front Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontFailOp ("Front Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontZFailOp ("Front ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilFrontCompareFunction ("Front Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassFrontOptions("Front", Float) = 0 + [HideInInspector] m_end_StencilPassOptions ("Stencil", Float) = 0 + } + SubShader + { + Tags { "RenderType" = "Opaque" "Queue" = "Geometry" "VRCFallback" = "Standard" } + Pass + { + Name "Base" + Tags { "LightMode" = "ForwardBase" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Back + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_MOCHIEMETALLICMAPS + #define PROP_EMISSIONMASK + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdbase + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #pragma multi_compile_fragment _ VERTEXLIGHT_ON + #define POI_PASS_BASE + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + #ifndef VRC_LIGHT_VOLUMES_INCLUDED + #define VRC_LIGHT_VOLUMES_INCLUDED + #define VRCLV_VERSION 2 + #define VRCLV_MAX_VOLUMES_COUNT 32 + #define VRCLV_MAX_LIGHTS_COUNT 128 + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + cbuffer LightVolumeUniforms { + #endif + uniform float _UdonLightVolumeEnabled; + uniform float _UdonLightVolumeVersion; + uniform float _UdonLightVolumeCount; + uniform float _UdonLightVolumeAdditiveMaxOverdraw; + uniform float _UdonLightVolumeAdditiveCount; + uniform float _UdonLightVolumeProbesBlend; + uniform float _UdonLightVolumeSharpBounds; + uniform float4x4 _UdonLightVolumeInvWorldMatrix[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeRotation[VRCLV_MAX_VOLUMES_COUNT * 2]; // Legacy! Used in this version to have back compatibility with older worlds. Array commented above will be used in future releases! Legacy! + uniform float3 _UdonLightVolumeInvLocalEdgeSmooth[VRCLV_MAX_VOLUMES_COUNT]; + uniform float3 _UdonLightVolumeUvw[VRCLV_MAX_VOLUMES_COUNT * 6]; // Legacy! AABB Bounds of islands on the 3D Texture atlas. Array commented above will be used in future releases! Legacy! + uniform float4 _UdonLightVolumeOcclusionUvw[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeColor[VRCLV_MAX_VOLUMES_COUNT]; + uniform float _UdonPointLightVolumeCount; + uniform float _UdonPointLightVolumeCubeCount; + uniform float4 _UdonPointLightVolumePosition[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeColor[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeDirection[VRCLV_MAX_LIGHTS_COUNT]; + uniform float3 _UdonPointLightVolumeCustomID[VRCLV_MAX_LIGHTS_COUNT]; + uniform float _UdonLightBrightnessCutoff; + uniform float _UdonLightVolumeOcclusionCount; + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + } + #endif + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + uniform Texture3D _UdonLightVolume; + uniform SamplerState sampler_UdonLightVolume; + uniform Texture2DArray _UdonPointLightVolumeTexture; + #define LV_SAMPLE(tex, uvw) tex.SampleLevel(sampler_UdonLightVolume, uvw, 0) + #else + #define LV_SAMPLE(tex, uvw) float4(0,0,0,0) + #endif + #define LV_PI 3.141592653589793f + #define LV_PI2 6.283185307179586f + float LV_Smoothstep01(float x) { + return x * x * (3 - 2 * x); + } + float3 LV_MultiplyVectorByQuaternion(float3 v, float4 q) { + float3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); + } + float3 LV_MultiplyVectorByMatrix2x3(float3 v, float3 r0, float3 r1) { + float3 r2 = cross(r0, r1); + return float3(dot(v, r0), dot(v, r1), dot(v, r2)); + } + float LV_FastAcos(float x) { + float absX = abs(x); + float res = -0.156583f * absX + LV_PI * 0.5f; + res *= sqrt(1.0f - absX); + return (x >= 0) ? res : (LV_PI - res); + } + float LV_DistributionGGX(float NoH, float roughness) { + float f = (roughness - 1) * ((roughness + 1) * (NoH * NoH)) + 1; + return (roughness * roughness) / ((float) LV_PI * f * f); + } + bool LV_PointLocalAABB(float3 localUVW) { + return all(abs(localUVW) <= 0.5); + } + float3 LV_LocalFromVolume(uint volumeID, float3 worldPos) { + return mul(_UdonLightVolumeInvWorldMatrix[volumeID], float4(worldPos, 1.0)).xyz; + } + float LV_EvaluateSH(float L0, float3 L1, float3 n) { + return L0 + dot(L1, n); + } + float4 LV_SampleCubemapArray(uint id, float3 dir) { + float3 absDir = abs(dir); + float2 uv; + uint face; + if (absDir.x >= absDir.y && absDir.x >= absDir.z) { + face = dir.x > 0 ? 0 : 1; + uv = float2((dir.x > 0 ? -dir.z : dir.z), -dir.y) * rcp(absDir.x); + } else if (absDir.y >= absDir.z) { + face = dir.y > 0 ? 2 : 3; + uv = float2(dir.x, (dir.y > 0 ? dir.z : -dir.z)) * rcp(absDir.y); + } else { + face = dir.z > 0 ? 4 : 5; + uv = float2((dir.z > 0 ? dir.x : -dir.x), -dir.y) * rcp(absDir.z); + } + float3 uvid = float3(uv * 0.5 + 0.5, id * 6 + face); + return LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + } + float4 LV_ProjectQuadLightIrradianceSH(float3 shadingPosition, float3 lightVertices[4]) { + [unroll] for (uint edge0 = 0; edge0 < 4; edge0++) { + lightVertices[edge0] = normalize(lightVertices[edge0] - shadingPosition); + } + const float3 zhDir0 = float3(0.866025, -0.500001, -0.000004); + const float3 zhDir1 = float3(-0.759553, 0.438522, -0.480394); + const float3 zhDir2 = float3(-0.000002, 0.638694, 0.769461); + const float3 zhWeightL1y = float3(2.1995339f, 2.50785367f, 1.56572711f); + const float3 zhWeightL1z = float3(-1.82572523f, -2.08165037f, 0.00000000f); + const float3 zhWeightL1x = float3(2.42459869f, 1.44790525f, 0.90397552f); + float solidAngle = 0.0; + float3 surfaceIntegral = 0.0; + [loop] for (uint edge1 = 0; edge1 < 4; edge1++) { + uint next = (edge1 + 1) % 4; + uint prev = (edge1 + 4 - 1) % 4; + float3 prevVert = lightVertices[prev]; + float3 thisVert = lightVertices[edge1]; + float3 nextVert = lightVertices[next]; + float3 a = cross(thisVert, prevVert); + float3 b = cross(thisVert, nextVert); + float lenA = length(a); + float lenB = length(b); + solidAngle += LV_FastAcos(clamp(dot(a, b) / (lenA * lenB), -1, 1)); + float3 mu = b * rcp(lenB); + float cosGamma = dot(thisVert, nextVert); + float gamma = LV_FastAcos(clamp(cosGamma, -1, 1)); + surfaceIntegral.x += gamma * dot(zhDir0, mu); + surfaceIntegral.y += gamma * dot(zhDir1, mu); + surfaceIntegral.z += gamma * dot(zhDir2, mu); + } + solidAngle = solidAngle - LV_PI2; + surfaceIntegral *= 0.5; + const float normalizationL0 = 0.5f * sqrt(1.0f / LV_PI); + float l0 = normalizationL0 * solidAngle; + float l1y = dot(zhWeightL1y, surfaceIntegral); + float l1z = dot(zhWeightL1z, surfaceIntegral); + float l1x = dot(zhWeightL1x, surfaceIntegral); + const float cosineKernelL0 = LV_PI; // (1) + const float cosineKernelL1 = LV_PI2 / 3.0f; // (1) + const float oneOverPi = 1.0f / LV_PI; // (2) + const float normalizationL1 = 0.5f * sqrt(3.0f / LV_PI); // (3) + const float weightL0 = cosineKernelL0 * normalizationL0 * oneOverPi; // (1), (2), (3) + const float weightL1 = cosineKernelL1 * normalizationL1 * oneOverPi; // (1), (2), (3) + l0 *= weightL0; + l1y *= weightL1; + l1z *= weightL1; + l1x *= weightL1; + return float4(l1x, l1y, l1z, l0); + } + void LV_QuadLight(float3 worldPos, float3 centroidPos, float4 rotationQuat, float2 size, float3 color, float sqMaxDist, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 lightToWorldPos = worldPos - centroidPos; + float3 normal = LV_MultiplyVectorByQuaternion(float3(0, 0, 1), rotationQuat); + if (dot(normal, lightToWorldPos) < 0.0) return; + float sqCutoffDist = sqMaxDist - dot(lightToWorldPos, lightToWorldPos); + color.rgb *= saturate(sqCutoffDist / sqMaxDist) * LV_PI * occlusion; + float2 halfSize = size * 0.5f; + float3 xAxis = LV_MultiplyVectorByQuaternion(float3(1, 0, 0), rotationQuat); + float3 yAxis = cross(normal, xAxis); + float3 verts[4]; + verts[0] = centroidPos + (-halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[1] = centroidPos + ( halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[2] = centroidPos + ( halfSize.x * xAxis) + (-halfSize.y * yAxis); + verts[3] = centroidPos + (-halfSize.x * xAxis) + (-halfSize.y * yAxis); + float4 areaLightSH = LV_ProjectQuadLightIrradianceSH(worldPos, verts); + float lenL1 = length(areaLightSH.xyz); + if (lenL1 > areaLightSH.w) areaLightSH.xyz *= areaLightSH.w / lenL1; + L0 += areaLightSH.w * color.rgb; + L1r += areaLightSH.xyz * color.r; + L1g += areaLightSH.xyz * color.g; + L1b += areaLightSH.xyz * color.b; + count++; + } + float3 LV_PointLightAttenuation(float sqdist, float sqlightSize, float3 color, float brightnessCutoff, float sqMaxDist) { + float mask = saturate(1 - sqdist / sqMaxDist); + return mask * mask * color * sqlightSize / (sqdist + sqlightSize); + } + float LV_PointLightSolidAngle(float sqdist, float sqlightSize) { + return saturate(sqrt(sqdist / (sqlightSize + sqdist))); + } + void LV_SphereLight(float sqdist, float3 dirN, float sqlightSize, float3 color, float occlusion, float sqMaxDist, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 att = LV_PointLightAttenuation(sqdist, sqlightSize, color, _UdonLightBrightnessCutoff, sqMaxDist); + float3 l0 = att * occlusion; + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLight(float sqdist, float3 dirN, float sqlightSize, float3 att, float spotMask, float cosAngle, float coneFalloff, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float smoothedCone = LV_Smoothstep01(saturate(spotMask * coneFalloff)); + float3 l0 = att * (occlusion * smoothedCone); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * saturate(1 - cosAngle)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightCookie(float sqdist, float3 dirN, float sqlightSize, float3 att, float4 lightRot, float tanAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 localDir = LV_MultiplyVectorByQuaternion(-dirN, lightRot); + float2 uv = localDir.xy * rcp(localDir.z * tanAngle); + if ( + localDir.z <= 0.0 || // Culling by direction + abs(uv.x) > 1.0 || abs(uv.y) > 1.0 // Culling by UV + ) return; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 - customId - 1; + float3 uvid = float3(uv * 0.5 + 0.5, id); + float angleSize = saturate(rsqrt(1 + tanAngle * tanAngle)); + float4 cookie = LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + float3 l0 = att * cookie.rgb * (cookie.a * occlusion); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * (1 - angleSize)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightAttenuationLUT(float sqdist, float3 dirN, float sqlightSize, float3 color, float spotMask, float cosAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float dirRadius = sqdist * abs(sqlightSize); + float spot = 1 - saturate(spotMask * rcp(1 - cosAngle)); + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId - 1; + float3 uvid = float3(sqrt(float2(spot, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * occlusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } + void LV_PointLight(uint id, float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 customID_data = _UdonPointLightVolumeCustomID[id]; + int shadowId = (int) customID_data.y; // Shadowmask id + int customId = (int) customID_data.x; // Custom Texture ID + float sqrRange = customID_data.z; // Squared culling distance + float4 pos = _UdonPointLightVolumePosition[id]; // Light position and inversed squared range + float3 dir = pos.xyz - worldPos; + float sqlen = max(dot(dir, dir), 1e-6); + if (sqlen > sqrRange) return; // Early distance based culling + float3 dirN = dir * rsqrt(sqlen); + float lightOcclusion = 1; + if (_UdonLightVolumeOcclusionCount != 0 && shadowId >= 0) { + lightOcclusion = dot(occlusion, float4(shadowId == 0, shadowId == 1, shadowId == 2, shadowId == 3)); + } + float4 color = _UdonPointLightVolumeColor[id]; // Color, angle + float4 ldir = _UdonPointLightVolumeDirection[id]; // Dir + falloff or Rotation + if (pos.w < 0) { // It is a spot light + float angle = color.w; + float spotMask = dot(ldir.xyz, -dirN) - angle; + if(customId >= 0 && spotMask < 0) return; // Spot cone based culling + if (customId > 0) { // If it uses Attenuation LUT + LV_SphereSpotLightAttenuationLUT(sqlen, dirN, -pos.w, color.rgb, spotMask, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + float3 att = LV_PointLightAttenuation(sqlen, -pos.w, color.rgb, _UdonLightBrightnessCutoff, sqrRange); + if (customId < 0) { // If uses cookie + LV_SphereSpotLightCookie(sqlen, dirN, -pos.w, att, ldir, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + LV_SphereSpotLight(sqlen, dirN, -pos.w, att, spotMask, angle, ldir.w, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + } else if (color.w <= 1.5f) { // It is a point light + if (customId > 0) { // Using LUT + float invSqRange = abs(pos.w); // Sign of range defines if it's point light (positive) or a spot light (negative) + float dirRadius = sqlen * invSqRange; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId; + float3 uvid = float3(sqrt(float2(0, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * lightOcclusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } else { // If it uses default parametric attenuation + float3 l0 = 0, l1r = 0, l1g = 0, l1b = 0; + LV_SphereLight(sqlen, dirN, pos.w, color.rgb, lightOcclusion, sqrRange, l0, l1r, l1g, l1b, count); + float3 cubeColor = 1; + if (customId < 0) { // If it uses a cubemap + uint id = -customId - 1; // Cubemap ID starts from zero and should not take in count texture array slices count. + cubeColor = LV_SampleCubemapArray(id, LV_MultiplyVectorByQuaternion(dirN, ldir)).xyz; + } + L0 += l0 * cubeColor; + L1r += l1r * cubeColor.r; + L1g += l1g * cubeColor.g; + L1b += l1b * cubeColor.b; + } + } else { // It is an area light + LV_QuadLight(worldPos, pos.xyz, ldir, float2(pos.w, color.w - 2.0f), color.rgb, sqrRange, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + void LV_SampleLightVolumeTex(float3 uvw0, float3 uvw1, float3 uvw2, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b) { + float4 tex0 = LV_SAMPLE(_UdonLightVolume, uvw0); + float4 tex1 = LV_SAMPLE(_UdonLightVolume, uvw1); + float4 tex2 = LV_SAMPLE(_UdonLightVolume, uvw2); + L0 = tex0.rgb; + L1r = float3(tex1.r, tex2.r, tex0.a); + L1g = float3(tex1.g, tex2.g, tex1.a); + L1b = float3(tex1.b, tex2.b, tex2.a); + } + float LV_BoundsMask(float3 localUVW, float3 invLocalEdgeSmooth) { + float3 distToMin = (localUVW + 0.5) * invLocalEdgeSmooth; + float3 distToMax = (0.5 - localUVW) * invLocalEdgeSmooth; + float3 fade = saturate(min(distToMin, distToMax)); + return fade.x * fade.y * fade.z; + } + void LV_SampleLightProbe(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz; + L1g += unity_SHAg.xyz; + L1b += unity_SHAb.xyz; + } + void LV_SampleLightProbeDering(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz * 0.565f; + L1g += unity_SHAg.xyz * 0.565f; + L1b += unity_SHAb.xyz * 0.565f; + } + void LV_SampleVolume(uint id, float3 localUVW, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + float3 uvw0 = uvwScaled + _UdonLightVolumeUvw[uvwID].xyz; + float3 uvw1 = uvwScaled + _UdonLightVolumeUvw[uvwID + 2].xyz; + float3 uvw2 = uvwScaled + _UdonLightVolumeUvw[uvwID + 4].xyz; + float3 l0, l1r, l1g, l1b; + LV_SampleLightVolumeTex(uvw0, uvw1, uvw2, l0, l1r, l1g, l1b); + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + occlusion = 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + occlusion = 1; + } + float4 color = _UdonLightVolumeColor[id]; + L0 += l0 * color.rgb; + l1r *= color.r; + l1g *= color.g; + l1b *= color.b; + if (color.a != 0) { + float3 r0 = _UdonLightVolumeRotation[id * 2].xyz; + float3 r1 = _UdonLightVolumeRotation[id * 2 + 1].xyz; + L1r += LV_MultiplyVectorByMatrix2x3(l1r, r0, r1); + L1g += LV_MultiplyVectorByMatrix2x3(l1g, r0, r1); + L1b += LV_MultiplyVectorByMatrix2x3(l1b, r0, r1); + } else { + L1r += l1r; + L1g += l1g; + L1b += l1b; + } + } + float4 LV_SampleVolumeOcclusion(uint id, float3 localUVW) { + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + return 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + return 1; + } + } + void LV_PointLightVolumeSH(float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + uint pointCount = min((uint) _UdonPointLightVolumeCount, VRCLV_MAX_LIGHTS_COUNT); + if (pointCount == 0) return; + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_LIGHTS_COUNT); + uint pcount = 0; // Point lights counter + [loop] for (uint pid = 0; pid < pointCount && pcount < maxOverdraw; pid++) { + LV_PointLight(pid, worldPos, occlusion, L0, L1r, L1g, L1b, pcount); + } + } + void LV_LightVolumeSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + if (volumesCount == 0) { // Legacy! Fallback to default light probes if Light Volume are not enabled or a version is too old to have a support. Legacy! + LV_SampleLightProbe(L0, L1r, L1g, L1b); + return; + } + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + bool lightProbesBlend = _UdonLightVolumeProbesBlend; + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + [loop] for (uint id = 0; id < volumesCount; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA && lightProbesBlend) { + LV_SampleLightProbe(L0, L1r, L1g, L1b); + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + float3 L0_A = 0; + float3 L1r_A = 0; + float3 L1g_A = 0; + float3 L1b_A = 0; + float4 occlusion_A = 1; + LV_SampleVolume(volumeID_A, localUVW_A, L0_A, L1r_A, L1g_A, L1b_A, occlusion_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || isNoA || (_UdonLightVolumeSharpBounds && isNoB)) { // Returning SH A result if it's the center of mask or out of bounds + L0 += L0_A; + L1r += L1r_A; + L1g += L1g_A; + L1b += L1b_A; + occlusion = occlusion_A; + occlusion *= mOcclusion; + return; + } + float3 L0_B = 0; + float3 L1r_B = 0; + float3 L1g_B = 0; + float3 L1b_B = 0; + float4 occlusion_B = 1; + if (isNoB && lightProbesBlend) { // No Volume found and light volumes blending enabled + LV_SampleLightProbe(L0_B, L1r_B, L1g_B, L1b_B); + } else { // Blending Volume A and Volume B + localUVW_B = isNoB ? localUVW : localUVW_B; + volumeID_B = isNoB ? volumesCount - 1 : volumeID_B; + LV_SampleVolume(volumeID_B, localUVW_B, L0_B, L1r_B, L1g_B, L1b_B, occlusion_B); + } + occlusion = lerp(occlusion_B, occlusion_A, mask); + occlusion *= mOcclusion; + L0 += lerp(L0_B, L0_A, mask); + L1r += lerp(L1r_B, L1r_A, mask); + L1g += lerp(L1g_B, L1g_A, mask); + L1b += lerp(L1b_B, L1b_A, mask); + } + void LV_LightVolumeAdditiveSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + if (additiveCount == 0 && (uint) _UdonPointLightVolumeCount == 0) return; // Legacy! + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW for Y Axis and Free rotations + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + uint count = min(_UdonLightVolumeOcclusionCount == 0 ? additiveCount : volumesCount, VRCLV_MAX_VOLUMES_COUNT); // Only use all volumes if occlusion volumes are enabled + [loop] for (uint id = 0; id < count; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA || _UdonLightVolumeOcclusionCount == 0) { + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + occlusion = LV_SampleVolumeOcclusion(volumeID_A, localUVW_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || (_UdonLightVolumeSharpBounds && isNoB)) { + occlusion *= mOcclusion; + return; // Returning A result if it's the center of mask or out of bounds + } + if (isNoB) occlusion = lerp(1, occlusion, mask); + else occlusion = lerp(LV_SampleVolumeOcclusion(volumeID_B, localUVW_B), occlusion, mask); + occlusion *= mOcclusion; + } + float3 LightVolumeSpecular(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specColor = max(float3(dot(reflect(-L1r, worldNormal), viewDir), dot(reflect(-L1g, worldNormal), viewDir), dot(reflect(-L1b, worldNormal), viewDir)), 0); + float3 rDir = normalize(normalize(L1r) + viewDir); + float3 gDir = normalize(normalize(L1g) + viewDir); + float3 bDir = normalize(normalize(L1b) + viewDir); + float rNh = saturate(dot(worldNormal, rDir)); + float gNh = saturate(dot(worldNormal, gDir)); + float bNh = saturate(dot(worldNormal, bDir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float rSpec = LV_DistributionGGX(rNh, roughExp); + float gSpec = LV_DistributionGGX(gNh, roughExp); + float bSpec = LV_DistributionGGX(bNh, roughExp); + float3 specs = (rSpec + gSpec + bSpec) * f0; + float3 coloredSpecs = specs * specColor; + float3 a = coloredSpecs + specs * L0; + float3 b = coloredSpecs * 3; + return max(lerp(a, b, smoothness) * 0.5f, 0.0); + } + float3 LightVolumeSpecular(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecular(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeSpecularDominant(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 dominantDir = L1r + L1g + L1b; + float3 dir = normalize(normalize(dominantDir) + viewDir); + float nh = saturate(dot(worldNormal, dir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float spec = LV_DistributionGGX(nh, roughExp); + return max(spec * L0 * f0, 0.0) * 1.5f; + } + float3 LightVolumeSpecularDominant(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecularDominant(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeEvaluate(float3 worldNormal, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + return float3(LV_EvaluateSH(L0.r, L1r, worldNormal), LV_EvaluateSH(L0.g, L1g, worldNormal), LV_EvaluateSH(L0.b, L1b, worldNormal)); + } + void LightVolumeSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled == 0) { + LV_SampleLightProbeDering(L0, L1r, L1g, L1b); + } else { + float4 occlusion = 1; + LV_LightVolumeSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + void LightVolumeAdditiveSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled != 0) { + float4 occlusion = 1; + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + float3 LightVolumeSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float3 LightVolumeAdditiveSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return 0; + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float LightVolumesEnabled() { + return _UdonLightVolumeEnabled; + } + float LightVolumesVersion() { + return _UdonLightVolumeVersion == 0 ? _UdonLightVolumeEnabled : _UdonLightVolumeVersion; + } + #endif + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + #ifdef _EMISSION + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMap; + #endif + float4 _EmissionMap_ST; + float2 _EmissionMapPan; + float _EmissionMapUV; + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMask; + #endif + float4 _EmissionMask_ST; + float2 _EmissionMaskPan; + float _EmissionMaskUV; + float _EmissionMaskInvert; + float _EmissionMaskChannel; + float _EmissionMask0GlobalMask; + float _EmissionMask0GlobalMaskBlendType; + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionScrollingCurve; + #endif + float4 _EmissionScrollingCurve_ST; + float _EmissionFluorescence; + float4 _EmissionColor; + float _EmissionBaseColorAsMap; + float _EmissionStrength; + float _EmissionHueShiftEnabled; + float _EmissionHueShiftColorSpace; + float _EmissionHueSelectOrShift; + float _EmissionSaturation; + float _EmissionHueShift; + float _EmissionHueShiftSpeed; + float _EmissionCenterOutEnabled; + float _EmissionCenterOutSpeed; + float _EnableGITDEmission; + float _GITDEWorldOrMesh; + float _GITDEMinEmissionMultiplier; + float _GITDEMaxEmissionMultiplier; + float _GITDEMinLight; + float _GITDEMaxLight; + float _EmissionBlinkingEnabled; + float _EmissiveBlink_Min; + float _EmissiveBlink_Max; + float _EmissiveBlink_Velocity; + float _EmissionBlinkingOffset; + float _ScrollingEmission; + float4 _EmissiveScroll_Direction; + float _EmissiveScroll_Width; + float _EmissiveScroll_Velocity; + float _EmissiveScroll_Interval; + float _EmissionScrollingOffset; + float _EmissionReplace0; + float _EmissionScrollingVertexColor; + float _EmissionScrollingUseCurve; + float _EmissionColorThemeIndex; + float _EmissionAL0Enabled; + float2 _EmissionAL0StrengthMod; + float _EmissionAL0StrengthBand; + float2 _AudioLinkEmission0CenterOut; + float _AudioLinkEmission0CenterOutSize; + float _AudioLinkEmission0CenterOutBand; + float _AudioLinkEmission0CenterOutDuration; + float2 _EmissionAL0Multipliers; + float _EmissionAL0MultipliersBand; + #endif + #ifdef MOCHIE_PBR + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _MochieMetallicMaps; + float _PBRMapsStochastic; + #endif + float4 _MochieMetallicMaps_ST; + float2 _MochieMetallicMapsPan; + float _MochieMetallicMapsUV; + float _MochieMetallicMapsStochastic; + float _MochieMetallicMapInvert; + float _MochieRoughnessMapInvert; + float _MochieReflectionMaskInvert; + float _MochieSpecularMaskInvert; + float _MochieMetallicMapsMetallicChannel; + float _MochieMetallicMapsRoughnessChannel; + float _MochieMetallicMapsReflectionMaskChannel; + float _MochieMetallicMapsSpecularMaskChannel; + float _PBRNormalSelect; + float _MochieReflectionTintThemeIndex; + float _MochieSpecularTintThemeIndex; + float _MochieRoughnessMultiplier; + float _MochieMetallicMultiplier; + float _MochieReflectionStrength; + float _MochieSpecularStrength; + float4 _MochieSpecularTint; + float4 _MochieReflectionTint; + float _MochieLitFallback; + float _IgnoreCastedShadows; + float _PBRSplitMaskSample; + float _PBRSplitMaskStochastic; + float4 _PBRMaskScaleTiling; + float _MochieMetallicMasksUV; + float4 _MochieMetallicMasksPan; + float _Specular2ndLayer; + float _MochieSpecularStrength2; + float _MochieRoughnessMultiplier2; + float _RefSpecFresnelStrength; + float _SFExposureOcclusion; + TextureCube _MochieReflCube; + float4 _MochieReflCube_HDR; + float _MochieForceFallback; + float _MochieGSAAEnabled; + float _PoiGSAAVariance; + float _PoiGSAAThreshold; + float _BRDFTPSReflectionMaskStrength; + float _BRDFTPSSpecularMaskStrength; + float _BRDFTPSDepthEnabled; + float _MochieMetallicGlobalMask; + float _MochieMetallicGlobalMaskBlendType; + float _MochieSmoothnessGlobalMask; + float _MochieSmoothnessGlobalMaskBlendType; + float _MochieReflectionStrengthGlobalMask; + float _MochieReflectionStrengthGlobalMaskBlendType; + float _MochieSpecularStrengthGlobalMask; + float _MochieSpecularStrengthGlobalMaskBlendType; + #endif + float _PPLightingMultiplier; + float _PPLightingAddition; + float _PPEmissionMultiplier; + float _PPFinalColorMultiplier; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef VIGNETTE_MASKED + #ifdef _LIGHTINGMODE_REALISTIC + #if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) + #if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) + #define SUBTRACTIVE_LIGHTING 1 + #endif + #endif + float FadeShadows(float attenuation, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if HANDLE_SHADOWS_BLENDING_IN_GI || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + #if ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + attenuation = poiLight.attenuation; + #endif + float viewZ = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float shadowFadeDistance = UnityComputeShadowFadeDistance(poiMesh.worldPos, viewZ); + float shadowFade = UnityComputeShadowFade(shadowFadeDistance); + float bakedAttenuation = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + attenuation = UnityMixRealtimeAndBakedShadows(attenuation, bakedAttenuation, shadowFade); + #endif + return attenuation; + } + void ApplySubtractiveLighting(inout UnityIndirect indirectLight, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if SUBTRACTIVE_LIGHTING + poiLight.attenuation = FadeShadows(poiLight.attenuation, poiLight, poiMesh, poiCam); + float ndotl = saturate(dot(poiMesh.normals[0], _WorldSpaceLightPos0.xyz)); + float3 shadowedLightEstimate = ndotl * (1 - poiLight.attenuation) * _LightColor0.rgb; + float3 subtractedLight = indirectLight.diffuse - shadowedLightEstimate; + subtractedLight = max(subtractedLight, unity_ShadowColor.rgb); + subtractedLight = lerp(subtractedLight, indirectLight.diffuse, _LightShadowData.x); + indirectLight.diffuse = min(subtractedLight, indirectLight.diffuse); + #endif + } + UnityIndirect CreateIndirectLight(in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight) + { + UnityIndirect indirectLight; + indirectLight.diffuse = 0; + indirectLight.specular = 0; + #if defined(LIGHTMAP_ON) + indirectLight.diffuse = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, poiMesh.lightmapUV.xy)); + #if defined(DIRLIGHTMAP_COMBINED) + float4 lightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, poiMesh.lightmapUV.xy); + indirectLight.diffuse = DecodeDirectionalLightmap(indirectLight.diffuse, lightmapDirection, poiMesh.normals[1]); + #endif + ApplySubtractiveLighting(indirectLight, poiLight, poiMesh, poiCam); + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float3 dynamicLightDiffuse = DecodeRealtimeLightmap( + UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, poiMesh.lightmapUV.zw) + ); + #if defined(DIRLIGHTMAP_COMBINED) + float4 dynamicLightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_DynamicDirectionality, unity_DynamicLightmap, poiMesh.lightmapUV.zw); + indirectLight.diffuse += DecodeDirectionalLightmap(dynamicLightDiffuse, dynamicLightmapDirection, poiMesh.normals[1]); + #else + indirectLight.diffuse += dynamicLightDiffuse; + #endif + #endif + #if !defined(LIGHTMAP_ON) && !defined(DYNAMICLIGHTMAP_ON) + #if UNITY_LIGHT_PROBE_PROXY_VOLUME + if (unity_ProbeVolumeParams.x == 1) + { + indirectLight.diffuse = SHEvalLinearL0L1_SampleProbeVolume( + float4(poiMesh.normals[1], 1), poiMesh.worldPos + ); + indirectLight.diffuse = max(0, indirectLight.diffuse); + #if defined(UNITY_COLORSPACE_GAMMA) + indirectLight.diffuse = LinearToGammaSpace(indirectLight.diffuse); + #endif + } + else + { + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + } + #else + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + #endif + #endif + indirectLight.diffuse *= poiLight.occlusion; + return indirectLight; + } + #endif + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_REALISTIC + UnityLight light; + light.dir = poiLight.direction; + light.color = max(0, _LightColor0.rgb) * saturate(shadowAttenuation * attenuation * poiLight.detailShadow); + light.ndotl = poiLight.nDotLSaturated; + UnityIndirect indirectLight = (UnityIndirect)0; + #ifdef UNITY_PASS_FORWARDBASE + indirectLight = CreateIndirectLight(poiMesh, poiCam, poiLight); + #endif + #ifdef UNITY_PASS_FORWARDBASE + light.color = max(light.color * 1.0, 0); + light.color = max(light.color + 0.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse * 1.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse + 0.0, 0); + #endif + poiLight.rampedLightMap = poiLight.nDotLSaturated; + poiLight.finalLighting = max(POI_BRDF_PBS(1, 0, 0, 0, poiMesh.normals[1], poiCam.viewDir, light, indirectLight).xyz, _LightingMinLightBrightness); + #ifdef UNITY_PASS_FORWARDBASE + if (_UdonLightVolumeEnabled && 1.0) + { + float3 L0 = 0; + float3 L1r = 0; + float3 L1g = 0; + float3 L1b = 0; + #ifdef LIGHTMAP_ON + LightVolumeAdditiveSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + poiLight.finalLighting += clamp(LightVolumeEvaluate(poiMesh.normals[1], L0, L1r, L1g, L1b), _LightingMinLightBrightness, _LightingCap); + #endif + } + #endif + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + float calculateGlowInTheDark(in float minLight, in float maxLight, in float minEmissionMultiplier, in float maxEmissionMultiplier, in float enabled, in float worldOrMesh, in PoiLight poiLight) + { + float glowInTheDarkMultiplier = 1; + if (enabled) + { + float3 lightValue = worldOrMesh ? calculateluminance(poiLight.finalLighting.rgb) : calculateluminance(poiLight.directColor.rgb); + float gitdeAlpha = saturate(inverseLerp(minLight, maxLight, lightValue)); + glowInTheDarkMultiplier = lerp(minEmissionMultiplier, maxEmissionMultiplier, gitdeAlpha); + } + return glowInTheDarkMultiplier; + } + float calculateScrollingEmission(in float3 direction, in float velocity, in float interval, in float scrollWidth, float offset, float3 position) + { + scrollWidth = max(scrollWidth, 0); + float phase = 0; + phase = dot(position, direction); + phase -= (_Time.y + offset) * velocity; + phase /= interval; + phase -= floor(phase); + phase = saturate(phase); + return (pow(phase, scrollWidth) + pow(1 - phase, scrollWidth * 4)) * 0.5; + } + float calculateBlinkingEmission(in float blinkMin, in float blinkMax, in float blinkVelocity, float offset) + { + float amplitude = (blinkMax - blinkMin) * 0.5f; + float base = blinkMin + amplitude; + return sin((_Time.y + offset) * blinkVelocity) * amplitude + base; + } + void applyALEmmissionStrength(in PoiMods poiMods, inout float emissionStrength, in float2 emissionStrengthMod, in float emissionStrengthBand, in float2 _EmissionALMultipliers, in float _EmissionALMultipliersBand, in float enabled) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + emissionStrength += lerp(emissionStrengthMod.x, emissionStrengthMod.y, poiMods.audioLink[emissionStrengthBand]); + emissionStrength *= lerp(_EmissionALMultipliers.x, _EmissionALMultipliers.y, poiMods.audioLink[_EmissionALMultipliersBand]); + } + #endif + } + void applyALCenterOutEmission(in PoiMods poiMods, in float nDotV, inout float emissionStrength, in float size, in float band, in float2 emissionToAdd, in float enabled, in float duration) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + float intensity; + [flatten] + if (duration >= 0) + { + intensity = getBandAtTime(band, saturate(remap(nDotV, 1, 0, 0, duration)), size); + } + else + { + duration *= -1; + intensity = getBandAtTime(band, saturate(remap(pow(nDotV, 2), 0, 1 + duration, 0, duration)), size); + } + emissionStrength += lerp(emissionToAdd[0], emissionToAdd[1], intensity); + } + #endif + } + #ifdef _EMISSION + float3 applyEmission(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiLight poiLight, in PoiCam poiCam, in PoiMods poiMods) + { + float3 emission0 = 0; + float emissionAlpha = 1; + float emissionStrength0 = 2.0; + float3 emissionColor0 = 0; + applyALEmmissionStrength(poiMods, emissionStrength0, float4(0,0,0,0), 0.0, float4(1,1,0,0), 0.0, 0.0); + applyALCenterOutEmission(poiMods, poiLight.nDotV, emissionStrength0, 0.0, 0.0, float4(0,0,0,0), 0.0, 1.0); + float glowInTheDarkMultiplier0 = calculateGlowInTheDark(0.0, 1.0, 1.0, 0.0, 0.0, 0.0, poiLight); + #ifdef POI_GRABPASS + float mixBaseColor = 0; + #else + float mixBaseColor = 0.0; + #endif + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + float4 emissionTex = 0; + if (!0.0) + { + emissionTex = POI2D_SAMPLER_PAN(_EmissionMap, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + } + else + { + emissionTex = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMap, _MainTex, ((.5 + poiLight.nDotV * .5) * float4(1,1,0,0).xy) + _Time.x * 5.0); + } + emissionColor0 = emissionTex.rgb * lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(1,0.3279018,0,1).rgb, 0.0); + emissionAlpha = emissionTex.a; + #else + emissionColor0 = lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(1,0.3279018,0,1).rgb, 0.0); + #endif + float3 inverseLighting = saturate((1.0 - poiLight.directColor) * sqrt(poiLight.directColor)); + emissionColor0 = lerp(emissionColor0.rgb, emissionColor0.rgb * inverseLighting, 0.0); + emissionStrength0 *= emissionAlpha; + if (0.0) + { + float3 pos = poiMesh.localPos; + if (0.0) + { + pos = poiMesh.vertexColor.rgb; + } + if (0.0) + { + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + emissionStrength0 *= UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionScrollingCurve, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + (dot(pos, float4(0,-10,0,0).xyz) * 20.0) + _Time.x * 10.0).r; + #endif + } + else + { + emissionStrength0 *= calculateScrollingEmission(float4(0,-10,0,0).xyz, 10.0, 20.0, 10.0, 0.0, pos); + } + } + if (0.0) + { + emissionStrength0 *= calculateBlinkingEmission(0.0, 1.0, 4.0, 0.0); + } + if(0.0) + { + emissionColor0 = hueShift(emissionColor0, frac(0.0 + 0.0 * _Time.x), 0.0, 1.0); + emissionColor0 = lerp(emissionColor0, dot(emissionColor0, float3(0.3, 0.59, 0.11)), - (0.0)); + } + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + float emissionMask0 = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + _Time.x * float4(0,0,0,0))[0.0]; + #else + float emissionMask0 = 1; + #endif + if (0.0) + { + emissionMask0 = 1 - emissionMask0; + } + if (0.0 > 0) + { + emissionMask0 = maskBlend(emissionMask0, poiMods.globalMask[0.0 - 1], 2.0); + } + emissionStrength0 *= glowInTheDarkMultiplier0 * emissionMask0; + emission0 = max(emissionStrength0 * emissionColor0, 0); + #ifdef POI_DISSOLVE + if (_DissolveEmissionSide != 2) + { + emission0 *= lerp(1 - dissolveAlpha, dissolveAlpha, _DissolveEmissionSide); + } + #endif + poiFragData.emission += emission0; + return emission0 * 0.0; + } + #endif + #if defined(MOCHIE_PBR) || defined(POI_CLEARCOAT) + float GSAA_Filament(float3 worldNormal, float perceptualRoughness, float gsaaVariance, float gsaaThreshold) + { + float3 du = ddx(worldNormal); + float3 dv = ddy(worldNormal); + float variance = gsaaVariance * (dot(du, du) + dot(dv, dv)); + float roughness = perceptualRoughness * perceptualRoughness; + float kernelRoughness = min(2.0 * variance, gsaaThreshold); + float squareRoughness = saturate(roughness * roughness + kernelRoughness); + return sqrt(sqrt(squareRoughness)); + } + float3 GetWorldReflections(float3 reflDir, float3 worldPos, float roughness) + { + float3 baseReflDir = reflDir; + reflDir = BoxProjection(reflDir, worldPos, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax); + float4 envSample0 = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, reflDir, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p0 = DecodeHDR(envSample0, unity_SpecCube0_HDR); + float interpolator = unity_SpecCube0_BoxMin.w; + + if (interpolator < 0.99999) + { + float3 refDirBlend = BoxProjection(baseReflDir, worldPos, unity_SpecCube1_ProbePosition, unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax); + float4 envSample1 = UNITY_SAMPLE_TEXCUBE_SAMPLER_LOD(unity_SpecCube1, unity_SpecCube0, refDirBlend, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p1 = DecodeHDR(envSample1, unity_SpecCube1_HDR); + p0 = lerp(p1, p0, interpolator); + } + return p0; + } + float3 GetReflections(in PoiCam poiCam, in PoiLight pl, in PoiMesh poiMesh, float roughness, float ForceFallback, float LightFallback, TextureCube reflectionCube, float4 hdrData, float3 reflectionDir) + { + float3 reflections = 0; + float3 lighting = pl.finalLighting; + if (ForceFallback == 0) + { + + if (SceneHasReflections()) + { + #ifdef UNITY_PASS_FORWARDBASE + reflections = GetWorldReflections(reflectionDir, poiMesh.worldPos.xyz, roughness); + #endif + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + reflections *= pl.occlusion; + return reflections; + } + float GetGGXTerm(float nDotL, float nDotV, float nDotH, float roughness) + { + float visibilityTerm = 0; + if (nDotL > 0) + { + float lambdaV = nDotL * (nDotV * (1 - roughness) + roughness); + float lambdaL = nDotV * (nDotL * (1 - roughness) + roughness); + visibilityTerm = 0.5f / (lambdaV + lambdaL + 1e-5f); + float a = nDotH * roughness; + float k = roughness / (1.0 - nDotH * nDotH + a * a+ 1e-5f); + float dotTerm = k * k * UNITY_INV_PI; + visibilityTerm *= dotTerm; + } + return visibilityTerm; + } + void GetSpecFresTerm(float nDotL, float nDotV, float nDotH, float lDotH, inout float3 specularTerm, inout float3 fresnelTerm, float3 specCol, float roughness) + { + specularTerm = GetGGXTerm(nDotL, nDotV, nDotH, roughness); + fresnelTerm = FresnelTerm(specCol, lDotH); + specularTerm = max(0, specularTerm * max(0.00001, nDotL)); + } + float GetRoughness(float smoothness) + { + float rough = 1 - smoothness; + rough *= 1.7 - 0.7 * rough; + return rough; + } + float SFVisibility(float brdfRoughness, float3 directColor, float NDotV, float ExposureOcclusion) + { + float Visibility = saturate(length(directColor + EPSILON) * (1.0/(ExposureOcclusion))); //Using direct color because I think it should be generally more forgiving + return saturate(pow(NDotV + Visibility, exp2(-16.0 * brdfRoughness - 1.0)) - 1.0 + Visibility); + } + #endif + #ifdef MOCHIE_PBR + void MetallicAndSpecularFragDataInit(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + float smoothness = 1.0; + float smoothness2 = 1.0; + float metallic = 1.0; + float specularMask = 1; + float reflectionMask = 1; + smoothness *= poiFragData.smoothness; + smoothness2 *= poiFragData.smoothness2; + metallic *= poiFragData.metallic; + specularMask *= poiFragData.specularMask; + reflectionMask *= poiFragData.reflectionMask; + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + + if (0.0) + { + float4 PBRSplitMask = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy, 0.0); + assignValueToVectorFromIndex(PBRMaps, 2.0, PBRSplitMask[2.0]); + assignValueToVectorFromIndex(PBRMaps, 3.0, PBRSplitMask[3.0]); + } + if (0.0 < 4) + { + metallic *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + smoothness2 *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + reflectionMask *= 1.0; + specularMask *= 1.0; + if (0.0) + { + metallic = 1 - metallic; + } + if (0.0) + { + smoothness = 1 - smoothness; + smoothness2 = 1 - smoothness2; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + poiFragData.smoothness *= smoothness; + poiFragData.smoothness2 *= smoothness2; + poiFragData.metallic *= metallic; + poiFragData.specularMask *= specularMask; + poiFragData.reflectionMask *= reflectionMask; + } + void MochieBRDF(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, inout PoiMods poiMods) + { + float smoothness = poiFragData.smoothness; + float smoothness2 = poiFragData.smoothness2; + float metallic = poiFragData.metallic; + float specularMask = poiFragData.specularMask; + float reflectionMask = poiFragData.reflectionMask; + if (0.0 > 0) + { + metallic = customBlend(metallic, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + smoothness2 = customBlend(smoothness2, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef TPS_Penetrator + if (0.0) + { + reflectionMask = lerp(0, reflectionMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + specularMask = lerp(0, specularMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float roughness2 = GetRoughness(smoothness2); + float3 specCol = lerp(unity_ColorSpaceDielectricSpec.rgb, poiFragData.baseColor, metallic); + float omr = unity_ColorSpaceDielectricSpec.a - metallic * unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + float percepRough2 = 1 - smoothness2; + + if (1.0) + { + float3 normals = lerp(poiMesh.normals[0], poiMesh.normals[1], 1.0); + percepRough = GSAA_Filament(normals, percepRough, 0.15, 0.1); + if (0.0 == 1 && 1.0 > 0) + { + percepRough2 = GSAA_Filament(normals, percepRough2, 0.15, 0.1); + } + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float brdfRoughness2 = percepRough2 * percepRough2; + brdfRoughness2 = max(brdfRoughness2, 0.002); + float3 diffuse = poiFragData.baseColor; + float3 specular = 0; + float3 specular2 = 0; + float3 vSpecular = 0; + float3 vSpecular2 = 0; + float3 reflections = 0; + float3 environment = 0; + #if defined(POINT) || defined(SPOT) + float attenuation = lerp(poiLight.additiveShadow, 1, 0.0); + #else + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + #endif + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float pbrNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 1.0); + float pbrNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 1.0); + float pbrNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 1.0); + float3 pbrReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 1.0); + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + if (0.0 == 1) + { + float3 fresnelTerm = 1; + float3 specularTerm = 1; + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness2); + specular2 = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation * 1.0; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness2); + vSpecular2 += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * 1.0; + } + #endif + } + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _MochieReflCube, _MochieReflCube_HDR, pbrReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, pbrNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, pbrNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + reflections *= reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = max(specular + vSpecular, specular2 + vSpecular2); + environment += reflections; + diffuse *= poiLight.finalLighting; + poiFragData.finalColor = diffuse; + poiLight.finalLightAdd += environment; + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0004882813,0.0004882813,2048,2048), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #if defined(MOCHIE_PBR) + MetallicAndSpecularFragDataInit(poiFragData, poiMesh, poiMods); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) + float3 emissionBaseReplace = 0;// + #endif + #ifdef _EMISSION + emissionBaseReplace += applyEmission(poiFragData, poiMesh, poiLight, poiCam, poiMods); + #endif + #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) + poiFragData.baseColor.rgb = lerp(poiFragData.baseColor.rgb, saturate(emissionBaseReplace), poiMax(emissionBaseReplace)); + #endif + + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #ifdef MOCHIE_PBR + MochieBRDF(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + #ifdef UNITY_PASS_FORWARDBASE + poiFragData.emission = max(poiFragData.emission * 1.0, 0); + poiFragData.finalColor = max(poiFragData.finalColor * 1.0, 0); + #endif + if (0.0 == POI_MODE_OPAQUE) + { + } + clip(poiFragData.alpha - 0.5); + if (0.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + poiFragData.finalColor += poiFragData.emission * poiMods.globalEmission; + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "Add" + Tags { "LightMode" = "ForwardAdd" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite Off + Cull Back + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_AddBlendOp], [_AddBlendOpAlpha] + Blend [_AddSrcBlend] [_AddDstBlend], [_AddSrcBlendAlpha] [_AddDstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_MOCHIEMETALLICMAPS + #define PROP_EMISSIONMASK + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdadd_fullshadows + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_ADD + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + #ifdef MOCHIE_PBR + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _MochieMetallicMaps; + float _PBRMapsStochastic; + #endif + float4 _MochieMetallicMaps_ST; + float2 _MochieMetallicMapsPan; + float _MochieMetallicMapsUV; + float _MochieMetallicMapsStochastic; + float _MochieMetallicMapInvert; + float _MochieRoughnessMapInvert; + float _MochieReflectionMaskInvert; + float _MochieSpecularMaskInvert; + float _MochieMetallicMapsMetallicChannel; + float _MochieMetallicMapsRoughnessChannel; + float _MochieMetallicMapsReflectionMaskChannel; + float _MochieMetallicMapsSpecularMaskChannel; + float _PBRNormalSelect; + float _MochieReflectionTintThemeIndex; + float _MochieSpecularTintThemeIndex; + float _MochieRoughnessMultiplier; + float _MochieMetallicMultiplier; + float _MochieReflectionStrength; + float _MochieSpecularStrength; + float4 _MochieSpecularTint; + float4 _MochieReflectionTint; + float _MochieLitFallback; + float _IgnoreCastedShadows; + float _PBRSplitMaskSample; + float _PBRSplitMaskStochastic; + float4 _PBRMaskScaleTiling; + float _MochieMetallicMasksUV; + float4 _MochieMetallicMasksPan; + float _Specular2ndLayer; + float _MochieSpecularStrength2; + float _MochieRoughnessMultiplier2; + float _RefSpecFresnelStrength; + float _SFExposureOcclusion; + TextureCube _MochieReflCube; + float4 _MochieReflCube_HDR; + float _MochieForceFallback; + float _MochieGSAAEnabled; + float _PoiGSAAVariance; + float _PoiGSAAThreshold; + float _BRDFTPSReflectionMaskStrength; + float _BRDFTPSSpecularMaskStrength; + float _BRDFTPSDepthEnabled; + float _MochieMetallicGlobalMask; + float _MochieMetallicGlobalMaskBlendType; + float _MochieSmoothnessGlobalMask; + float _MochieSmoothnessGlobalMaskBlendType; + float _MochieReflectionStrengthGlobalMask; + float _MochieReflectionStrengthGlobalMaskBlendType; + float _MochieSpecularStrengthGlobalMask; + float _MochieSpecularStrengthGlobalMaskBlendType; + #endif + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef VIGNETTE_MASKED + #ifdef _LIGHTINGMODE_REALISTIC + #if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) + #if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) + #define SUBTRACTIVE_LIGHTING 1 + #endif + #endif + float FadeShadows(float attenuation, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if HANDLE_SHADOWS_BLENDING_IN_GI || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + #if ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + attenuation = poiLight.attenuation; + #endif + float viewZ = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float shadowFadeDistance = UnityComputeShadowFadeDistance(poiMesh.worldPos, viewZ); + float shadowFade = UnityComputeShadowFade(shadowFadeDistance); + float bakedAttenuation = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + attenuation = UnityMixRealtimeAndBakedShadows(attenuation, bakedAttenuation, shadowFade); + #endif + return attenuation; + } + void ApplySubtractiveLighting(inout UnityIndirect indirectLight, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if SUBTRACTIVE_LIGHTING + poiLight.attenuation = FadeShadows(poiLight.attenuation, poiLight, poiMesh, poiCam); + float ndotl = saturate(dot(poiMesh.normals[0], _WorldSpaceLightPos0.xyz)); + float3 shadowedLightEstimate = ndotl * (1 - poiLight.attenuation) * _LightColor0.rgb; + float3 subtractedLight = indirectLight.diffuse - shadowedLightEstimate; + subtractedLight = max(subtractedLight, unity_ShadowColor.rgb); + subtractedLight = lerp(subtractedLight, indirectLight.diffuse, _LightShadowData.x); + indirectLight.diffuse = min(subtractedLight, indirectLight.diffuse); + #endif + } + UnityIndirect CreateIndirectLight(in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight) + { + UnityIndirect indirectLight; + indirectLight.diffuse = 0; + indirectLight.specular = 0; + #if defined(LIGHTMAP_ON) + indirectLight.diffuse = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, poiMesh.lightmapUV.xy)); + #if defined(DIRLIGHTMAP_COMBINED) + float4 lightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, poiMesh.lightmapUV.xy); + indirectLight.diffuse = DecodeDirectionalLightmap(indirectLight.diffuse, lightmapDirection, poiMesh.normals[1]); + #endif + ApplySubtractiveLighting(indirectLight, poiLight, poiMesh, poiCam); + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float3 dynamicLightDiffuse = DecodeRealtimeLightmap( + UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, poiMesh.lightmapUV.zw) + ); + #if defined(DIRLIGHTMAP_COMBINED) + float4 dynamicLightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_DynamicDirectionality, unity_DynamicLightmap, poiMesh.lightmapUV.zw); + indirectLight.diffuse += DecodeDirectionalLightmap(dynamicLightDiffuse, dynamicLightmapDirection, poiMesh.normals[1]); + #else + indirectLight.diffuse += dynamicLightDiffuse; + #endif + #endif + #if !defined(LIGHTMAP_ON) && !defined(DYNAMICLIGHTMAP_ON) + #if UNITY_LIGHT_PROBE_PROXY_VOLUME + if (unity_ProbeVolumeParams.x == 1) + { + indirectLight.diffuse = SHEvalLinearL0L1_SampleProbeVolume( + float4(poiMesh.normals[1], 1), poiMesh.worldPos + ); + indirectLight.diffuse = max(0, indirectLight.diffuse); + #if defined(UNITY_COLORSPACE_GAMMA) + indirectLight.diffuse = LinearToGammaSpace(indirectLight.diffuse); + #endif + } + else + { + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + } + #else + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + #endif + #endif + indirectLight.diffuse *= poiLight.occlusion; + return indirectLight; + } + #endif + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_REALISTIC + UnityLight light; + light.dir = poiLight.direction; + light.color = max(0, _LightColor0.rgb) * saturate(shadowAttenuation * attenuation * poiLight.detailShadow); + light.ndotl = poiLight.nDotLSaturated; + UnityIndirect indirectLight = (UnityIndirect)0; + #ifdef UNITY_PASS_FORWARDBASE + indirectLight = CreateIndirectLight(poiMesh, poiCam, poiLight); + #endif + #ifdef UNITY_PASS_FORWARDBASE + light.color = max(light.color * 1.0, 0); + light.color = max(light.color + 0.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse * 1.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse + 0.0, 0); + #endif + poiLight.rampedLightMap = poiLight.nDotLSaturated; + poiLight.finalLighting = max(POI_BRDF_PBS(1, 0, 0, 0, poiMesh.normals[1], poiCam.viewDir, light, indirectLight).xyz, _LightingMinLightBrightness); + #ifdef UNITY_PASS_FORWARDBASE + if (_UdonLightVolumeEnabled && 1.0) + { + float3 L0 = 0; + float3 L1r = 0; + float3 L1g = 0; + float3 L1b = 0; + #ifdef LIGHTMAP_ON + LightVolumeAdditiveSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + poiLight.finalLighting += clamp(LightVolumeEvaluate(poiMesh.normals[1], L0, L1r, L1g, L1b), _LightingMinLightBrightness, _LightingCap); + #endif + } + #endif + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + #if defined(MOCHIE_PBR) || defined(POI_CLEARCOAT) + float GSAA_Filament(float3 worldNormal, float perceptualRoughness, float gsaaVariance, float gsaaThreshold) + { + float3 du = ddx(worldNormal); + float3 dv = ddy(worldNormal); + float variance = gsaaVariance * (dot(du, du) + dot(dv, dv)); + float roughness = perceptualRoughness * perceptualRoughness; + float kernelRoughness = min(2.0 * variance, gsaaThreshold); + float squareRoughness = saturate(roughness * roughness + kernelRoughness); + return sqrt(sqrt(squareRoughness)); + } + float3 GetWorldReflections(float3 reflDir, float3 worldPos, float roughness) + { + float3 baseReflDir = reflDir; + reflDir = BoxProjection(reflDir, worldPos, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax); + float4 envSample0 = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, reflDir, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p0 = DecodeHDR(envSample0, unity_SpecCube0_HDR); + float interpolator = unity_SpecCube0_BoxMin.w; + + if (interpolator < 0.99999) + { + float3 refDirBlend = BoxProjection(baseReflDir, worldPos, unity_SpecCube1_ProbePosition, unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax); + float4 envSample1 = UNITY_SAMPLE_TEXCUBE_SAMPLER_LOD(unity_SpecCube1, unity_SpecCube0, refDirBlend, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p1 = DecodeHDR(envSample1, unity_SpecCube1_HDR); + p0 = lerp(p1, p0, interpolator); + } + return p0; + } + float3 GetReflections(in PoiCam poiCam, in PoiLight pl, in PoiMesh poiMesh, float roughness, float ForceFallback, float LightFallback, TextureCube reflectionCube, float4 hdrData, float3 reflectionDir) + { + float3 reflections = 0; + float3 lighting = pl.finalLighting; + if (ForceFallback == 0) + { + + if (SceneHasReflections()) + { + #ifdef UNITY_PASS_FORWARDBASE + reflections = GetWorldReflections(reflectionDir, poiMesh.worldPos.xyz, roughness); + #endif + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + reflections *= pl.occlusion; + return reflections; + } + float GetGGXTerm(float nDotL, float nDotV, float nDotH, float roughness) + { + float visibilityTerm = 0; + if (nDotL > 0) + { + float lambdaV = nDotL * (nDotV * (1 - roughness) + roughness); + float lambdaL = nDotV * (nDotL * (1 - roughness) + roughness); + visibilityTerm = 0.5f / (lambdaV + lambdaL + 1e-5f); + float a = nDotH * roughness; + float k = roughness / (1.0 - nDotH * nDotH + a * a+ 1e-5f); + float dotTerm = k * k * UNITY_INV_PI; + visibilityTerm *= dotTerm; + } + return visibilityTerm; + } + void GetSpecFresTerm(float nDotL, float nDotV, float nDotH, float lDotH, inout float3 specularTerm, inout float3 fresnelTerm, float3 specCol, float roughness) + { + specularTerm = GetGGXTerm(nDotL, nDotV, nDotH, roughness); + fresnelTerm = FresnelTerm(specCol, lDotH); + specularTerm = max(0, specularTerm * max(0.00001, nDotL)); + } + float GetRoughness(float smoothness) + { + float rough = 1 - smoothness; + rough *= 1.7 - 0.7 * rough; + return rough; + } + float SFVisibility(float brdfRoughness, float3 directColor, float NDotV, float ExposureOcclusion) + { + float Visibility = saturate(length(directColor + EPSILON) * (1.0/(ExposureOcclusion))); //Using direct color because I think it should be generally more forgiving + return saturate(pow(NDotV + Visibility, exp2(-16.0 * brdfRoughness - 1.0)) - 1.0 + Visibility); + } + #endif + #ifdef MOCHIE_PBR + void MetallicAndSpecularFragDataInit(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + float smoothness = 1.0; + float smoothness2 = 1.0; + float metallic = 1.0; + float specularMask = 1; + float reflectionMask = 1; + smoothness *= poiFragData.smoothness; + smoothness2 *= poiFragData.smoothness2; + metallic *= poiFragData.metallic; + specularMask *= poiFragData.specularMask; + reflectionMask *= poiFragData.reflectionMask; + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + + if (0.0) + { + float4 PBRSplitMask = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy, 0.0); + assignValueToVectorFromIndex(PBRMaps, 2.0, PBRSplitMask[2.0]); + assignValueToVectorFromIndex(PBRMaps, 3.0, PBRSplitMask[3.0]); + } + if (0.0 < 4) + { + metallic *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + smoothness2 *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + reflectionMask *= 1.0; + specularMask *= 1.0; + if (0.0) + { + metallic = 1 - metallic; + } + if (0.0) + { + smoothness = 1 - smoothness; + smoothness2 = 1 - smoothness2; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + poiFragData.smoothness *= smoothness; + poiFragData.smoothness2 *= smoothness2; + poiFragData.metallic *= metallic; + poiFragData.specularMask *= specularMask; + poiFragData.reflectionMask *= reflectionMask; + } + void MochieBRDF(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, inout PoiMods poiMods) + { + float smoothness = poiFragData.smoothness; + float smoothness2 = poiFragData.smoothness2; + float metallic = poiFragData.metallic; + float specularMask = poiFragData.specularMask; + float reflectionMask = poiFragData.reflectionMask; + if (0.0 > 0) + { + metallic = customBlend(metallic, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + smoothness2 = customBlend(smoothness2, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef TPS_Penetrator + if (0.0) + { + reflectionMask = lerp(0, reflectionMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + specularMask = lerp(0, specularMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float roughness2 = GetRoughness(smoothness2); + float3 specCol = lerp(unity_ColorSpaceDielectricSpec.rgb, poiFragData.baseColor, metallic); + float omr = unity_ColorSpaceDielectricSpec.a - metallic * unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + float percepRough2 = 1 - smoothness2; + + if (1.0) + { + float3 normals = lerp(poiMesh.normals[0], poiMesh.normals[1], 1.0); + percepRough = GSAA_Filament(normals, percepRough, 0.15, 0.1); + if (0.0 == 1 && 1.0 > 0) + { + percepRough2 = GSAA_Filament(normals, percepRough2, 0.15, 0.1); + } + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float brdfRoughness2 = percepRough2 * percepRough2; + brdfRoughness2 = max(brdfRoughness2, 0.002); + float3 diffuse = poiFragData.baseColor; + float3 specular = 0; + float3 specular2 = 0; + float3 vSpecular = 0; + float3 vSpecular2 = 0; + float3 reflections = 0; + float3 environment = 0; + #if defined(POINT) || defined(SPOT) + float attenuation = lerp(poiLight.additiveShadow, 1, 0.0); + #else + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + #endif + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float pbrNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 1.0); + float pbrNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 1.0); + float pbrNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 1.0); + float3 pbrReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 1.0); + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + if (0.0 == 1) + { + float3 fresnelTerm = 1; + float3 specularTerm = 1; + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness2); + specular2 = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation * 1.0; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness2); + vSpecular2 += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * 1.0; + } + #endif + } + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _MochieReflCube, _MochieReflCube_HDR, pbrReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, pbrNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, pbrNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + reflections *= reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = max(specular + vSpecular, specular2 + vSpecular2); + environment += reflections; + diffuse *= poiLight.finalLighting; + poiFragData.finalColor = diffuse; + poiLight.finalLightAdd += environment; + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0004882813,0.0004882813,2048,2048), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #if defined(MOCHIE_PBR) + MetallicAndSpecularFragDataInit(poiFragData, poiMesh, poiMods); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #ifdef MOCHIE_PBR + MochieBRDF(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + if (0.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + if (4.0 == 4) + { + poiFragData.alpha = saturate(poiFragData.alpha * 10.0); + } + if (0.0 != POI_MODE_TRANSPARENT) + { + poiFragData.finalColor *= poiFragData.alpha; + } + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Back + AlphaToMask Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_MOCHIEMETALLICMAPS + #define PROP_EMISSIONMASK + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_instancing + #pragma multi_compile_shadowcaster + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_SHADOW + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0004882813,0.0004882813,2048,2048), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + poiFragData.finalColor = poiFragData.baseColor; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "META" + Tags { "LightMode" = "Meta" } + ZWrite [_ZWrite] + Cull Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_MOCHIEMETALLICMAPS + #define PROP_EMISSIONMASK + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_instancing + #pragma multi_compile_fragment _ VERTEXLIGHT_ON + #define POI_PASS_META + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + #include "UnityMetaPass.cginc" + #ifndef VRC_LIGHT_VOLUMES_INCLUDED + #define VRC_LIGHT_VOLUMES_INCLUDED + #define VRCLV_VERSION 2 + #define VRCLV_MAX_VOLUMES_COUNT 32 + #define VRCLV_MAX_LIGHTS_COUNT 128 + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + cbuffer LightVolumeUniforms { + #endif + uniform float _UdonLightVolumeEnabled; + uniform float _UdonLightVolumeVersion; + uniform float _UdonLightVolumeCount; + uniform float _UdonLightVolumeAdditiveMaxOverdraw; + uniform float _UdonLightVolumeAdditiveCount; + uniform float _UdonLightVolumeProbesBlend; + uniform float _UdonLightVolumeSharpBounds; + uniform float4x4 _UdonLightVolumeInvWorldMatrix[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeRotation[VRCLV_MAX_VOLUMES_COUNT * 2]; // Legacy! Used in this version to have back compatibility with older worlds. Array commented above will be used in future releases! Legacy! + uniform float3 _UdonLightVolumeInvLocalEdgeSmooth[VRCLV_MAX_VOLUMES_COUNT]; + uniform float3 _UdonLightVolumeUvw[VRCLV_MAX_VOLUMES_COUNT * 6]; // Legacy! AABB Bounds of islands on the 3D Texture atlas. Array commented above will be used in future releases! Legacy! + uniform float4 _UdonLightVolumeOcclusionUvw[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeColor[VRCLV_MAX_VOLUMES_COUNT]; + uniform float _UdonPointLightVolumeCount; + uniform float _UdonPointLightVolumeCubeCount; + uniform float4 _UdonPointLightVolumePosition[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeColor[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeDirection[VRCLV_MAX_LIGHTS_COUNT]; + uniform float3 _UdonPointLightVolumeCustomID[VRCLV_MAX_LIGHTS_COUNT]; + uniform float _UdonLightBrightnessCutoff; + uniform float _UdonLightVolumeOcclusionCount; + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + } + #endif + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + uniform Texture3D _UdonLightVolume; + uniform SamplerState sampler_UdonLightVolume; + uniform Texture2DArray _UdonPointLightVolumeTexture; + #define LV_SAMPLE(tex, uvw) tex.SampleLevel(sampler_UdonLightVolume, uvw, 0) + #else + #define LV_SAMPLE(tex, uvw) float4(0,0,0,0) + #endif + #define LV_PI 3.141592653589793f + #define LV_PI2 6.283185307179586f + float LV_Smoothstep01(float x) { + return x * x * (3 - 2 * x); + } + float3 LV_MultiplyVectorByQuaternion(float3 v, float4 q) { + float3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); + } + float3 LV_MultiplyVectorByMatrix2x3(float3 v, float3 r0, float3 r1) { + float3 r2 = cross(r0, r1); + return float3(dot(v, r0), dot(v, r1), dot(v, r2)); + } + float LV_FastAcos(float x) { + float absX = abs(x); + float res = -0.156583f * absX + LV_PI * 0.5f; + res *= sqrt(1.0f - absX); + return (x >= 0) ? res : (LV_PI - res); + } + float LV_DistributionGGX(float NoH, float roughness) { + float f = (roughness - 1) * ((roughness + 1) * (NoH * NoH)) + 1; + return (roughness * roughness) / ((float) LV_PI * f * f); + } + bool LV_PointLocalAABB(float3 localUVW) { + return all(abs(localUVW) <= 0.5); + } + float3 LV_LocalFromVolume(uint volumeID, float3 worldPos) { + return mul(_UdonLightVolumeInvWorldMatrix[volumeID], float4(worldPos, 1.0)).xyz; + } + float LV_EvaluateSH(float L0, float3 L1, float3 n) { + return L0 + dot(L1, n); + } + float4 LV_SampleCubemapArray(uint id, float3 dir) { + float3 absDir = abs(dir); + float2 uv; + uint face; + if (absDir.x >= absDir.y && absDir.x >= absDir.z) { + face = dir.x > 0 ? 0 : 1; + uv = float2((dir.x > 0 ? -dir.z : dir.z), -dir.y) * rcp(absDir.x); + } else if (absDir.y >= absDir.z) { + face = dir.y > 0 ? 2 : 3; + uv = float2(dir.x, (dir.y > 0 ? dir.z : -dir.z)) * rcp(absDir.y); + } else { + face = dir.z > 0 ? 4 : 5; + uv = float2((dir.z > 0 ? dir.x : -dir.x), -dir.y) * rcp(absDir.z); + } + float3 uvid = float3(uv * 0.5 + 0.5, id * 6 + face); + return LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + } + float4 LV_ProjectQuadLightIrradianceSH(float3 shadingPosition, float3 lightVertices[4]) { + [unroll] for (uint edge0 = 0; edge0 < 4; edge0++) { + lightVertices[edge0] = normalize(lightVertices[edge0] - shadingPosition); + } + const float3 zhDir0 = float3(0.866025, -0.500001, -0.000004); + const float3 zhDir1 = float3(-0.759553, 0.438522, -0.480394); + const float3 zhDir2 = float3(-0.000002, 0.638694, 0.769461); + const float3 zhWeightL1y = float3(2.1995339f, 2.50785367f, 1.56572711f); + const float3 zhWeightL1z = float3(-1.82572523f, -2.08165037f, 0.00000000f); + const float3 zhWeightL1x = float3(2.42459869f, 1.44790525f, 0.90397552f); + float solidAngle = 0.0; + float3 surfaceIntegral = 0.0; + [loop] for (uint edge1 = 0; edge1 < 4; edge1++) { + uint next = (edge1 + 1) % 4; + uint prev = (edge1 + 4 - 1) % 4; + float3 prevVert = lightVertices[prev]; + float3 thisVert = lightVertices[edge1]; + float3 nextVert = lightVertices[next]; + float3 a = cross(thisVert, prevVert); + float3 b = cross(thisVert, nextVert); + float lenA = length(a); + float lenB = length(b); + solidAngle += LV_FastAcos(clamp(dot(a, b) / (lenA * lenB), -1, 1)); + float3 mu = b * rcp(lenB); + float cosGamma = dot(thisVert, nextVert); + float gamma = LV_FastAcos(clamp(cosGamma, -1, 1)); + surfaceIntegral.x += gamma * dot(zhDir0, mu); + surfaceIntegral.y += gamma * dot(zhDir1, mu); + surfaceIntegral.z += gamma * dot(zhDir2, mu); + } + solidAngle = solidAngle - LV_PI2; + surfaceIntegral *= 0.5; + const float normalizationL0 = 0.5f * sqrt(1.0f / LV_PI); + float l0 = normalizationL0 * solidAngle; + float l1y = dot(zhWeightL1y, surfaceIntegral); + float l1z = dot(zhWeightL1z, surfaceIntegral); + float l1x = dot(zhWeightL1x, surfaceIntegral); + const float cosineKernelL0 = LV_PI; // (1) + const float cosineKernelL1 = LV_PI2 / 3.0f; // (1) + const float oneOverPi = 1.0f / LV_PI; // (2) + const float normalizationL1 = 0.5f * sqrt(3.0f / LV_PI); // (3) + const float weightL0 = cosineKernelL0 * normalizationL0 * oneOverPi; // (1), (2), (3) + const float weightL1 = cosineKernelL1 * normalizationL1 * oneOverPi; // (1), (2), (3) + l0 *= weightL0; + l1y *= weightL1; + l1z *= weightL1; + l1x *= weightL1; + return float4(l1x, l1y, l1z, l0); + } + void LV_QuadLight(float3 worldPos, float3 centroidPos, float4 rotationQuat, float2 size, float3 color, float sqMaxDist, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 lightToWorldPos = worldPos - centroidPos; + float3 normal = LV_MultiplyVectorByQuaternion(float3(0, 0, 1), rotationQuat); + if (dot(normal, lightToWorldPos) < 0.0) return; + float sqCutoffDist = sqMaxDist - dot(lightToWorldPos, lightToWorldPos); + color.rgb *= saturate(sqCutoffDist / sqMaxDist) * LV_PI * occlusion; + float2 halfSize = size * 0.5f; + float3 xAxis = LV_MultiplyVectorByQuaternion(float3(1, 0, 0), rotationQuat); + float3 yAxis = cross(normal, xAxis); + float3 verts[4]; + verts[0] = centroidPos + (-halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[1] = centroidPos + ( halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[2] = centroidPos + ( halfSize.x * xAxis) + (-halfSize.y * yAxis); + verts[3] = centroidPos + (-halfSize.x * xAxis) + (-halfSize.y * yAxis); + float4 areaLightSH = LV_ProjectQuadLightIrradianceSH(worldPos, verts); + float lenL1 = length(areaLightSH.xyz); + if (lenL1 > areaLightSH.w) areaLightSH.xyz *= areaLightSH.w / lenL1; + L0 += areaLightSH.w * color.rgb; + L1r += areaLightSH.xyz * color.r; + L1g += areaLightSH.xyz * color.g; + L1b += areaLightSH.xyz * color.b; + count++; + } + float3 LV_PointLightAttenuation(float sqdist, float sqlightSize, float3 color, float brightnessCutoff, float sqMaxDist) { + float mask = saturate(1 - sqdist / sqMaxDist); + return mask * mask * color * sqlightSize / (sqdist + sqlightSize); + } + float LV_PointLightSolidAngle(float sqdist, float sqlightSize) { + return saturate(sqrt(sqdist / (sqlightSize + sqdist))); + } + void LV_SphereLight(float sqdist, float3 dirN, float sqlightSize, float3 color, float occlusion, float sqMaxDist, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 att = LV_PointLightAttenuation(sqdist, sqlightSize, color, _UdonLightBrightnessCutoff, sqMaxDist); + float3 l0 = att * occlusion; + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLight(float sqdist, float3 dirN, float sqlightSize, float3 att, float spotMask, float cosAngle, float coneFalloff, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float smoothedCone = LV_Smoothstep01(saturate(spotMask * coneFalloff)); + float3 l0 = att * (occlusion * smoothedCone); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * saturate(1 - cosAngle)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightCookie(float sqdist, float3 dirN, float sqlightSize, float3 att, float4 lightRot, float tanAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 localDir = LV_MultiplyVectorByQuaternion(-dirN, lightRot); + float2 uv = localDir.xy * rcp(localDir.z * tanAngle); + if ( + localDir.z <= 0.0 || // Culling by direction + abs(uv.x) > 1.0 || abs(uv.y) > 1.0 // Culling by UV + ) return; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 - customId - 1; + float3 uvid = float3(uv * 0.5 + 0.5, id); + float angleSize = saturate(rsqrt(1 + tanAngle * tanAngle)); + float4 cookie = LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + float3 l0 = att * cookie.rgb * (cookie.a * occlusion); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * (1 - angleSize)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightAttenuationLUT(float sqdist, float3 dirN, float sqlightSize, float3 color, float spotMask, float cosAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float dirRadius = sqdist * abs(sqlightSize); + float spot = 1 - saturate(spotMask * rcp(1 - cosAngle)); + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId - 1; + float3 uvid = float3(sqrt(float2(spot, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * occlusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } + void LV_PointLight(uint id, float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 customID_data = _UdonPointLightVolumeCustomID[id]; + int shadowId = (int) customID_data.y; // Shadowmask id + int customId = (int) customID_data.x; // Custom Texture ID + float sqrRange = customID_data.z; // Squared culling distance + float4 pos = _UdonPointLightVolumePosition[id]; // Light position and inversed squared range + float3 dir = pos.xyz - worldPos; + float sqlen = max(dot(dir, dir), 1e-6); + if (sqlen > sqrRange) return; // Early distance based culling + float3 dirN = dir * rsqrt(sqlen); + float lightOcclusion = 1; + if (_UdonLightVolumeOcclusionCount != 0 && shadowId >= 0) { + lightOcclusion = dot(occlusion, float4(shadowId == 0, shadowId == 1, shadowId == 2, shadowId == 3)); + } + float4 color = _UdonPointLightVolumeColor[id]; // Color, angle + float4 ldir = _UdonPointLightVolumeDirection[id]; // Dir + falloff or Rotation + if (pos.w < 0) { // It is a spot light + float angle = color.w; + float spotMask = dot(ldir.xyz, -dirN) - angle; + if(customId >= 0 && spotMask < 0) return; // Spot cone based culling + if (customId > 0) { // If it uses Attenuation LUT + LV_SphereSpotLightAttenuationLUT(sqlen, dirN, -pos.w, color.rgb, spotMask, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + float3 att = LV_PointLightAttenuation(sqlen, -pos.w, color.rgb, _UdonLightBrightnessCutoff, sqrRange); + if (customId < 0) { // If uses cookie + LV_SphereSpotLightCookie(sqlen, dirN, -pos.w, att, ldir, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + LV_SphereSpotLight(sqlen, dirN, -pos.w, att, spotMask, angle, ldir.w, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + } else if (color.w <= 1.5f) { // It is a point light + if (customId > 0) { // Using LUT + float invSqRange = abs(pos.w); // Sign of range defines if it's point light (positive) or a spot light (negative) + float dirRadius = sqlen * invSqRange; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId; + float3 uvid = float3(sqrt(float2(0, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * lightOcclusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } else { // If it uses default parametric attenuation + float3 l0 = 0, l1r = 0, l1g = 0, l1b = 0; + LV_SphereLight(sqlen, dirN, pos.w, color.rgb, lightOcclusion, sqrRange, l0, l1r, l1g, l1b, count); + float3 cubeColor = 1; + if (customId < 0) { // If it uses a cubemap + uint id = -customId - 1; // Cubemap ID starts from zero and should not take in count texture array slices count. + cubeColor = LV_SampleCubemapArray(id, LV_MultiplyVectorByQuaternion(dirN, ldir)).xyz; + } + L0 += l0 * cubeColor; + L1r += l1r * cubeColor.r; + L1g += l1g * cubeColor.g; + L1b += l1b * cubeColor.b; + } + } else { // It is an area light + LV_QuadLight(worldPos, pos.xyz, ldir, float2(pos.w, color.w - 2.0f), color.rgb, sqrRange, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + void LV_SampleLightVolumeTex(float3 uvw0, float3 uvw1, float3 uvw2, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b) { + float4 tex0 = LV_SAMPLE(_UdonLightVolume, uvw0); + float4 tex1 = LV_SAMPLE(_UdonLightVolume, uvw1); + float4 tex2 = LV_SAMPLE(_UdonLightVolume, uvw2); + L0 = tex0.rgb; + L1r = float3(tex1.r, tex2.r, tex0.a); + L1g = float3(tex1.g, tex2.g, tex1.a); + L1b = float3(tex1.b, tex2.b, tex2.a); + } + float LV_BoundsMask(float3 localUVW, float3 invLocalEdgeSmooth) { + float3 distToMin = (localUVW + 0.5) * invLocalEdgeSmooth; + float3 distToMax = (0.5 - localUVW) * invLocalEdgeSmooth; + float3 fade = saturate(min(distToMin, distToMax)); + return fade.x * fade.y * fade.z; + } + void LV_SampleLightProbe(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz; + L1g += unity_SHAg.xyz; + L1b += unity_SHAb.xyz; + } + void LV_SampleLightProbeDering(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz * 0.565f; + L1g += unity_SHAg.xyz * 0.565f; + L1b += unity_SHAb.xyz * 0.565f; + } + void LV_SampleVolume(uint id, float3 localUVW, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + float3 uvw0 = uvwScaled + _UdonLightVolumeUvw[uvwID].xyz; + float3 uvw1 = uvwScaled + _UdonLightVolumeUvw[uvwID + 2].xyz; + float3 uvw2 = uvwScaled + _UdonLightVolumeUvw[uvwID + 4].xyz; + float3 l0, l1r, l1g, l1b; + LV_SampleLightVolumeTex(uvw0, uvw1, uvw2, l0, l1r, l1g, l1b); + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + occlusion = 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + occlusion = 1; + } + float4 color = _UdonLightVolumeColor[id]; + L0 += l0 * color.rgb; + l1r *= color.r; + l1g *= color.g; + l1b *= color.b; + if (color.a != 0) { + float3 r0 = _UdonLightVolumeRotation[id * 2].xyz; + float3 r1 = _UdonLightVolumeRotation[id * 2 + 1].xyz; + L1r += LV_MultiplyVectorByMatrix2x3(l1r, r0, r1); + L1g += LV_MultiplyVectorByMatrix2x3(l1g, r0, r1); + L1b += LV_MultiplyVectorByMatrix2x3(l1b, r0, r1); + } else { + L1r += l1r; + L1g += l1g; + L1b += l1b; + } + } + float4 LV_SampleVolumeOcclusion(uint id, float3 localUVW) { + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + return 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + return 1; + } + } + void LV_PointLightVolumeSH(float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + uint pointCount = min((uint) _UdonPointLightVolumeCount, VRCLV_MAX_LIGHTS_COUNT); + if (pointCount == 0) return; + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_LIGHTS_COUNT); + uint pcount = 0; // Point lights counter + [loop] for (uint pid = 0; pid < pointCount && pcount < maxOverdraw; pid++) { + LV_PointLight(pid, worldPos, occlusion, L0, L1r, L1g, L1b, pcount); + } + } + void LV_LightVolumeSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + if (volumesCount == 0) { // Legacy! Fallback to default light probes if Light Volume are not enabled or a version is too old to have a support. Legacy! + LV_SampleLightProbe(L0, L1r, L1g, L1b); + return; + } + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + bool lightProbesBlend = _UdonLightVolumeProbesBlend; + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + [loop] for (uint id = 0; id < volumesCount; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA && lightProbesBlend) { + LV_SampleLightProbe(L0, L1r, L1g, L1b); + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + float3 L0_A = 0; + float3 L1r_A = 0; + float3 L1g_A = 0; + float3 L1b_A = 0; + float4 occlusion_A = 1; + LV_SampleVolume(volumeID_A, localUVW_A, L0_A, L1r_A, L1g_A, L1b_A, occlusion_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || isNoA || (_UdonLightVolumeSharpBounds && isNoB)) { // Returning SH A result if it's the center of mask or out of bounds + L0 += L0_A; + L1r += L1r_A; + L1g += L1g_A; + L1b += L1b_A; + occlusion = occlusion_A; + occlusion *= mOcclusion; + return; + } + float3 L0_B = 0; + float3 L1r_B = 0; + float3 L1g_B = 0; + float3 L1b_B = 0; + float4 occlusion_B = 1; + if (isNoB && lightProbesBlend) { // No Volume found and light volumes blending enabled + LV_SampleLightProbe(L0_B, L1r_B, L1g_B, L1b_B); + } else { // Blending Volume A and Volume B + localUVW_B = isNoB ? localUVW : localUVW_B; + volumeID_B = isNoB ? volumesCount - 1 : volumeID_B; + LV_SampleVolume(volumeID_B, localUVW_B, L0_B, L1r_B, L1g_B, L1b_B, occlusion_B); + } + occlusion = lerp(occlusion_B, occlusion_A, mask); + occlusion *= mOcclusion; + L0 += lerp(L0_B, L0_A, mask); + L1r += lerp(L1r_B, L1r_A, mask); + L1g += lerp(L1g_B, L1g_A, mask); + L1b += lerp(L1b_B, L1b_A, mask); + } + void LV_LightVolumeAdditiveSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + if (additiveCount == 0 && (uint) _UdonPointLightVolumeCount == 0) return; // Legacy! + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW for Y Axis and Free rotations + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + uint count = min(_UdonLightVolumeOcclusionCount == 0 ? additiveCount : volumesCount, VRCLV_MAX_VOLUMES_COUNT); // Only use all volumes if occlusion volumes are enabled + [loop] for (uint id = 0; id < count; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA || _UdonLightVolumeOcclusionCount == 0) { + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + occlusion = LV_SampleVolumeOcclusion(volumeID_A, localUVW_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || (_UdonLightVolumeSharpBounds && isNoB)) { + occlusion *= mOcclusion; + return; // Returning A result if it's the center of mask or out of bounds + } + if (isNoB) occlusion = lerp(1, occlusion, mask); + else occlusion = lerp(LV_SampleVolumeOcclusion(volumeID_B, localUVW_B), occlusion, mask); + occlusion *= mOcclusion; + } + float3 LightVolumeSpecular(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specColor = max(float3(dot(reflect(-L1r, worldNormal), viewDir), dot(reflect(-L1g, worldNormal), viewDir), dot(reflect(-L1b, worldNormal), viewDir)), 0); + float3 rDir = normalize(normalize(L1r) + viewDir); + float3 gDir = normalize(normalize(L1g) + viewDir); + float3 bDir = normalize(normalize(L1b) + viewDir); + float rNh = saturate(dot(worldNormal, rDir)); + float gNh = saturate(dot(worldNormal, gDir)); + float bNh = saturate(dot(worldNormal, bDir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float rSpec = LV_DistributionGGX(rNh, roughExp); + float gSpec = LV_DistributionGGX(gNh, roughExp); + float bSpec = LV_DistributionGGX(bNh, roughExp); + float3 specs = (rSpec + gSpec + bSpec) * f0; + float3 coloredSpecs = specs * specColor; + float3 a = coloredSpecs + specs * L0; + float3 b = coloredSpecs * 3; + return max(lerp(a, b, smoothness) * 0.5f, 0.0); + } + float3 LightVolumeSpecular(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecular(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeSpecularDominant(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 dominantDir = L1r + L1g + L1b; + float3 dir = normalize(normalize(dominantDir) + viewDir); + float nh = saturate(dot(worldNormal, dir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float spec = LV_DistributionGGX(nh, roughExp); + return max(spec * L0 * f0, 0.0) * 1.5f; + } + float3 LightVolumeSpecularDominant(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecularDominant(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeEvaluate(float3 worldNormal, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + return float3(LV_EvaluateSH(L0.r, L1r, worldNormal), LV_EvaluateSH(L0.g, L1g, worldNormal), LV_EvaluateSH(L0.b, L1b, worldNormal)); + } + void LightVolumeSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled == 0) { + LV_SampleLightProbeDering(L0, L1r, L1g, L1b); + } else { + float4 occlusion = 1; + LV_LightVolumeSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + void LightVolumeAdditiveSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled != 0) { + float4 occlusion = 1; + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + float3 LightVolumeSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float3 LightVolumeAdditiveSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return 0; + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float LightVolumesEnabled() { + return _UdonLightVolumeEnabled; + } + float LightVolumesVersion() { + return _UdonLightVolumeVersion == 0 ? _UdonLightVolumeEnabled : _UdonLightVolumeVersion; + } + #endif + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float _GIEmissionMultiplier; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + #ifdef _EMISSION + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMap; + #endif + float4 _EmissionMap_ST; + float2 _EmissionMapPan; + float _EmissionMapUV; + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMask; + #endif + float4 _EmissionMask_ST; + float2 _EmissionMaskPan; + float _EmissionMaskUV; + float _EmissionMaskInvert; + float _EmissionMaskChannel; + float _EmissionMask0GlobalMask; + float _EmissionMask0GlobalMaskBlendType; + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionScrollingCurve; + #endif + float4 _EmissionScrollingCurve_ST; + float _EmissionFluorescence; + float4 _EmissionColor; + float _EmissionBaseColorAsMap; + float _EmissionStrength; + float _EmissionHueShiftEnabled; + float _EmissionHueShiftColorSpace; + float _EmissionHueSelectOrShift; + float _EmissionSaturation; + float _EmissionHueShift; + float _EmissionHueShiftSpeed; + float _EmissionCenterOutEnabled; + float _EmissionCenterOutSpeed; + float _EnableGITDEmission; + float _GITDEWorldOrMesh; + float _GITDEMinEmissionMultiplier; + float _GITDEMaxEmissionMultiplier; + float _GITDEMinLight; + float _GITDEMaxLight; + float _EmissionBlinkingEnabled; + float _EmissiveBlink_Min; + float _EmissiveBlink_Max; + float _EmissiveBlink_Velocity; + float _EmissionBlinkingOffset; + float _ScrollingEmission; + float4 _EmissiveScroll_Direction; + float _EmissiveScroll_Width; + float _EmissiveScroll_Velocity; + float _EmissiveScroll_Interval; + float _EmissionScrollingOffset; + float _EmissionReplace0; + float _EmissionScrollingVertexColor; + float _EmissionScrollingUseCurve; + float _EmissionColorThemeIndex; + float _EmissionAL0Enabled; + float2 _EmissionAL0StrengthMod; + float _EmissionAL0StrengthBand; + float2 _AudioLinkEmission0CenterOut; + float _AudioLinkEmission0CenterOutSize; + float _AudioLinkEmission0CenterOutBand; + float _AudioLinkEmission0CenterOutDuration; + float2 _EmissionAL0Multipliers; + float _EmissionAL0MultipliersBand; + #endif + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + float calculateGlowInTheDark(in float minLight, in float maxLight, in float minEmissionMultiplier, in float maxEmissionMultiplier, in float enabled, in float worldOrMesh, in PoiLight poiLight) + { + float glowInTheDarkMultiplier = 1; + if (enabled) + { + float3 lightValue = worldOrMesh ? calculateluminance(poiLight.finalLighting.rgb) : calculateluminance(poiLight.directColor.rgb); + float gitdeAlpha = saturate(inverseLerp(minLight, maxLight, lightValue)); + glowInTheDarkMultiplier = lerp(minEmissionMultiplier, maxEmissionMultiplier, gitdeAlpha); + } + return glowInTheDarkMultiplier; + } + float calculateScrollingEmission(in float3 direction, in float velocity, in float interval, in float scrollWidth, float offset, float3 position) + { + scrollWidth = max(scrollWidth, 0); + float phase = 0; + phase = dot(position, direction); + phase -= (_Time.y + offset) * velocity; + phase /= interval; + phase -= floor(phase); + phase = saturate(phase); + return (pow(phase, scrollWidth) + pow(1 - phase, scrollWidth * 4)) * 0.5; + } + float calculateBlinkingEmission(in float blinkMin, in float blinkMax, in float blinkVelocity, float offset) + { + float amplitude = (blinkMax - blinkMin) * 0.5f; + float base = blinkMin + amplitude; + return sin((_Time.y + offset) * blinkVelocity) * amplitude + base; + } + void applyALEmmissionStrength(in PoiMods poiMods, inout float emissionStrength, in float2 emissionStrengthMod, in float emissionStrengthBand, in float2 _EmissionALMultipliers, in float _EmissionALMultipliersBand, in float enabled) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + emissionStrength += lerp(emissionStrengthMod.x, emissionStrengthMod.y, poiMods.audioLink[emissionStrengthBand]); + emissionStrength *= lerp(_EmissionALMultipliers.x, _EmissionALMultipliers.y, poiMods.audioLink[_EmissionALMultipliersBand]); + } + #endif + } + void applyALCenterOutEmission(in PoiMods poiMods, in float nDotV, inout float emissionStrength, in float size, in float band, in float2 emissionToAdd, in float enabled, in float duration) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + float intensity; + [flatten] + if (duration >= 0) + { + intensity = getBandAtTime(band, saturate(remap(nDotV, 1, 0, 0, duration)), size); + } + else + { + duration *= -1; + intensity = getBandAtTime(band, saturate(remap(pow(nDotV, 2), 0, 1 + duration, 0, duration)), size); + } + emissionStrength += lerp(emissionToAdd[0], emissionToAdd[1], intensity); + } + #endif + } + #ifdef _EMISSION + float3 applyEmission(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiLight poiLight, in PoiCam poiCam, in PoiMods poiMods) + { + float3 emission0 = 0; + float emissionAlpha = 1; + float emissionStrength0 = 2.0; + float3 emissionColor0 = 0; + applyALEmmissionStrength(poiMods, emissionStrength0, float4(0,0,0,0), 0.0, float4(1,1,0,0), 0.0, 0.0); + applyALCenterOutEmission(poiMods, poiLight.nDotV, emissionStrength0, 0.0, 0.0, float4(0,0,0,0), 0.0, 1.0); + float glowInTheDarkMultiplier0 = calculateGlowInTheDark(0.0, 1.0, 1.0, 0.0, 0.0, 0.0, poiLight); + #ifdef POI_GRABPASS + float mixBaseColor = 0; + #else + float mixBaseColor = 0.0; + #endif + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + float4 emissionTex = 0; + if (!0.0) + { + emissionTex = POI2D_SAMPLER_PAN(_EmissionMap, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + } + else + { + emissionTex = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMap, _MainTex, ((.5 + poiLight.nDotV * .5) * float4(1,1,0,0).xy) + _Time.x * 5.0); + } + emissionColor0 = emissionTex.rgb * lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(1,0.3279018,0,1).rgb, 0.0); + emissionAlpha = emissionTex.a; + #else + emissionColor0 = lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(1,0.3279018,0,1).rgb, 0.0); + #endif + float3 inverseLighting = saturate((1.0 - poiLight.directColor) * sqrt(poiLight.directColor)); + emissionColor0 = lerp(emissionColor0.rgb, emissionColor0.rgb * inverseLighting, 0.0); + emissionStrength0 *= emissionAlpha; + if (0.0) + { + float3 pos = poiMesh.localPos; + if (0.0) + { + pos = poiMesh.vertexColor.rgb; + } + if (0.0) + { + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + emissionStrength0 *= UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionScrollingCurve, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + (dot(pos, float4(0,-10,0,0).xyz) * 20.0) + _Time.x * 10.0).r; + #endif + } + else + { + emissionStrength0 *= calculateScrollingEmission(float4(0,-10,0,0).xyz, 10.0, 20.0, 10.0, 0.0, pos); + } + } + if (0.0) + { + emissionStrength0 *= calculateBlinkingEmission(0.0, 1.0, 4.0, 0.0); + } + if(0.0) + { + emissionColor0 = hueShift(emissionColor0, frac(0.0 + 0.0 * _Time.x), 0.0, 1.0); + emissionColor0 = lerp(emissionColor0, dot(emissionColor0, float3(0.3, 0.59, 0.11)), - (0.0)); + } + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + float emissionMask0 = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + _Time.x * float4(0,0,0,0))[0.0]; + #else + float emissionMask0 = 1; + #endif + if (0.0) + { + emissionMask0 = 1 - emissionMask0; + } + if (0.0 > 0) + { + emissionMask0 = maskBlend(emissionMask0, poiMods.globalMask[0.0 - 1], 2.0); + } + emissionStrength0 *= glowInTheDarkMultiplier0 * emissionMask0; + emission0 = max(emissionStrength0 * emissionColor0, 0); + #ifdef POI_DISSOLVE + if (_DissolveEmissionSide != 2) + { + emission0 *= lerp(1 - dissolveAlpha, dissolveAlpha, _DissolveEmissionSide); + } + #endif + poiFragData.emission += emission0; + return emission0 * 0.0; + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0004882813,0.0004882813,2048,2048), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) + float3 emissionBaseReplace = 0;// + #endif + #ifdef _EMISSION + emissionBaseReplace += applyEmission(poiFragData, poiMesh, poiLight, poiCam, poiMods); + #endif + #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) + poiFragData.baseColor.rgb = lerp(poiFragData.baseColor.rgb, saturate(emissionBaseReplace), poiMax(emissionBaseReplace)); + #endif + + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + #ifdef POI_PASS_META + UnityMetaInput meta; + UNITY_INITIALIZE_OUTPUT(UnityMetaInput, meta); + meta.Emission = poiFragData.emission * 1.0 * poiMods.globalEmission; + meta.Albedo = saturate(poiFragData.finalColor.rgb); + meta.SpecularColor = poiLight.finalLightAdd; + return UnityMetaFragment(meta) + POI_SAFE_RGB0; + #endif + poiFragData.finalColor += poiFragData.emission * poiMods.globalEmission; + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + } + CustomEditor "Thry.ShaderEditor" +} diff --git a/Assets/Quiz/Materials/DownCount/OptimizedShaders/PlayerDesk/Poiyomi Pro World.shader.meta b/Assets/Quiz/Materials/DownCount/OptimizedShaders/PlayerDesk/Poiyomi Pro World.shader.meta new file mode 100644 index 0000000..11aa1e8 --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/OptimizedShaders/PlayerDesk/Poiyomi Pro World.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 491259bc930441f4b99e29403899a5ac +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/DownCount/OptimizedShaders/Walls.meta b/Assets/Quiz/Materials/DownCount/OptimizedShaders/Walls.meta new file mode 100644 index 0000000..3352e13 --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/OptimizedShaders/Walls.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7032cea7a3508854b9074e8289f2a9e3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/DownCount/OptimizedShaders/Walls/Poiyomi Pro World.shader b/Assets/Quiz/Materials/DownCount/OptimizedShaders/Walls/Poiyomi Pro World.shader new file mode 100644 index 0000000..281c2a9 --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/OptimizedShaders/Walls/Poiyomi Pro World.shader @@ -0,0 +1,13308 @@ +Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/6c802bc1dd1dee24095056a5f6da8a8a" +{ + Properties + { + [HideInInspector] shader_master_label ("Poiyomi 9.3.48", Float) = 0 + [HideInInspector] shader_is_using_thry_editor ("", Float) = 0 + [HideInInspector] shader_locale ("0db0b86376c3dca4b9a6828ef8615fe0", Float) = 0 + [HideInInspector] footer_website ("{texture:{name:icon-poilogo,height:24},action:{type:URL,data:https://www.poiyomi.com},hover:WEBSITE}", Float) = 0 + [HideInInspector] footer_discord ("{texture:{name:icon-discord,height:24},action:{type:URL,data:https://discord.gg/Ays52PY},hover:DISCORD}", Float) = 0 + [HideInInspector] footer_patreon ("{texture:{name:icon-patreon-new,height:24},action:{type:URL,data:https://www.patreon.com/poiyomi},hover:PATREON}", Float) = 0 + [HideInInspector] footer_youtube ("{texture:{name:icon-youtube,height:24},action:{type:URL,data:https://www.youtube.com/poiyomi},hover:YOUTUBE}", Float) = 0 + [HideInInspector] footer_github ("{texture:{name:icon-github,height:24},action:{type:URL,data:https://github.com/poiyomi/PoiyomiToonShader},hover:GITHUB}", Float) = 0 + [HideInInspector] footer_bluesky ("{texture:{name:icon-bluesky,height:24},action:{type:URL,data:https://bsky.app/profile/poiyomi.com},hover:BLUESKY}", Float) = 0 + [HideInInspector] footer_twitter ("{texture:{name:icon-twitter,height:24},action:{type:URL,data:https://x.com/poiyomi},hover:X}", Float) = 0 + [Header(POIYOMI SHADER UI FAILED TO LOAD)] + [Header(. This is caused by scripts failing to compile. It can be fixed.)] + [Header(. The inspector will look broken and will not work properly until fixed.)] + [Header(. Please check your console for script errors.)] + [Header(. You can filter by errors in the console window.)] + [Header(. Often the topmost error points to the erroring script.)] + [Space(30)][Header(Common Error Causes)] + [Header(. Installing multiple Poiyomi Shader packages)] + [Header(. Make sure to delete the Poiyomi shader folder before you update Poiyomi.)] + [Header(. If a package came with Poiyomi this is bad practice and can cause issues.)] + [Header(. Delete the package and import it without any Poiyomi components.)] + [Header(. Bad VRCSDK installation (e.g. Both VCC and Standalone))] + [Header(. Delete the VRCSDK Folder in Assets if you are using the VCC.)] + [Header(. Avoid using third party SDKs. They can cause incompatibility.)] + [Header(. Script Errors in other scripts)] + [Header(. Outdated tools or prefabs can cause this.)] + [Header(. Update things that are throwing errors or move them outside the project.)] + [Space(30)][Header(Visit Our Discord to Ask For Help)] + [Space(5)]_ShaderUIWarning0 (" → discord.gg/poiyomi ← We can help you get it fixed! --{condition_showS:(0==1)}", Int) = -0 + [Space(1400)][Header(POIYOMI SHADER UI FAILED TO LOAD)] + _ShaderUIWarning1 ("Please scroll up for more information! --{condition_showS:(0==1)}", Int) = -0 + [HideInInspector] _ForgotToLockMaterial (";;YOU_FORGOT_TO_LOCK_THIS_MATERIAL;", Int) = 1 + [ThryShaderOptimizerLockButton] _ShaderOptimizerEnabled ("", Int) = 1 + [HideInInspector] GeometryShader_Enabled("GEOMETRY SHADER ENABLED", Float) = 1 + [HideInInspector] Tessellation_Enabled("TESSELLATION ENABLED", Float) = 1 + [ThryWideEnum(Opaque, 0, Cutout, 1, TransClipping, 9, Fade, 2, Transparent, 3, Additive, 4, Soft Additive, 5, Multiplicative, 6, 2x Multiplicative, 7)]_Mode("Rendering Preset--{on_value_actions:[ + {value:0,actions:[{type:SET_PROPERTY,data:render_queue=2000},{type:SET_PROPERTY,data:_AlphaForceOpaque=1}, {type:SET_PROPERTY,data:render_type=Opaque}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=0}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:1,actions:[{type:SET_PROPERTY,data:render_queue=2450},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=.5}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:9,actions:[{type:SET_PROPERTY,data:render_queue=2460},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.01}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:2,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.002}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:3,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=1}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:4,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:5,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=4}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=4}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=4}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:6,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:7,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=3}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=3}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]} + }]}]}", Int) = 0 + [HideInInspector] m_mainCategory ("Color & Normals--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/main},hover:Documentation}}", Float) = 0 + _Color ("Color & Alpha--{reference_property:_ColorThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _ColorThemeIndex ("", Int) = 0 + [sRGBWarning(true)]_MainTex ("Texture--{reference_properties:[_MainTexPan, _MainTexUV, _MainPixelMode, _MainTexStochastic, _MainIgnoreTexAlpha]}", 2D) = "white" { } + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _MainTexUV ("UV", Int) = 0 + [HideInInspector][Vector2]_MainTexPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ToggleUI]_MainPixelMode ("Pixel Mode", Float) = 0 + [HideInInspector][ToggleUI]_MainTexStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][ToggleUI]_MainIgnoreTexAlpha ("Ignore Alpha", Float) = 0 + [Normal]_BumpMap ("Normal Map--{reference_properties:[_BumpMapPan, _BumpMapUV, _BumpScale, _BumpMapStochastic]}", 2D) = "bump" { } + [HideInInspector][Vector2]_BumpMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _BumpMapUV ("UV", Int) = 0 + [HideInInspector]_BumpScale ("Intensity", Range(0, 10)) = 1 + [HideInInspector][ToggleUI]_BumpMapStochastic ("Stochastic Sampling", Float) = 0 + [sRGBWarning]_AlphaMask ("Alpha Map--{reference_properties:[_AlphaMaskPan, _AlphaMaskUV, _AlphaMaskInvert, _MainAlphaMaskMode, _AlphaMaskBlendStrength, _AlphaMaskValue], alts:[_AlphaMap]}", 2D) = "white" { } + [HideInInspector][Vector2]_AlphaMaskPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _AlphaMaskUV ("UV", Int) = 0 + [HideInInspector][ThryWideEnum(Off, 0, Replace, 1, Multiply, 2, Add, 3, Subtract, 4)]_MainAlphaMaskMode ("Blend Mode", Int) = 2 + [HideInInspector]_AlphaMaskBlendStrength ("Blend Strength", Float) = 1 + [HideInInspector]_AlphaMaskValue ("Blend Offset", Float) = 0 + [HideInInspector][ToggleUI]_AlphaMaskInvert ("Invert", Float) = 0 + _Cutoff ("Alpha Cutoff", Range(0, 1.001)) = 0.5 + [HideInInspector] m_start_Alpha ("Alpha Options--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/alpha-options},hover:Documentation}}", Float) = 0 + [ToggleUI]_AlphaForceOpaque ("Force Opaque", Float) = 1 + _AlphaMod ("Alpha Mod", Range(-1, 1)) = 0.0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _AlphaGlobalMask ("Global Mask--{reference_property:_AlphaGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _AlphaGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] m_end_Alpha ("Alpha Options", Float) = 0 + [HideInInspector] m_lightingCategory ("Shading", Float) = 0 + [HideInInspector] m_start_PoiLightData ("Light Data--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/light-data},hover:Documentation}}", Float) = 0 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingAOMaps ("AO Maps (expand)--{reference_properties:[_LightingAOMapsPan, _LightingAOMapsUV,_LightDataAOStrengthR,_LightDataAOStrengthG,_LightDataAOStrengthB,_LightDataAOStrengthA, _LightDataAOGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingAOMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingAOMapsUV ("UV", Int) = 0 + [HideInInspector]_LightDataAOStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightDataAOStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataAOGlobalMaskR ("Global Mask--{reference_property:_LightDataAOGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataAOGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingDetailShadowMaps ("Shadow Map (expand)--{reference_properties:[_LightingDetailShadowMapsPan, _LightingDetailShadowMapsUV,_LightingDetailShadowStrengthR,_LightingDetailShadowStrengthG,_LightingDetailShadowStrengthB,_LightingDetailShadowStrengthA,_LightingAddDetailShadowStrengthR,_LightingAddDetailShadowStrengthG,_LightingAddDetailShadowStrengthB,_LightingAddDetailShadowStrengthA, _LightDataDetailShadowGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingDetailShadowMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingDetailShadowMapsUV ("UV", Int) = 0 + [HideInInspector]_LightingDetailShadowStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingDetailShadowStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthR ("Additive R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingAddDetailShadowStrengthG ("Additive G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthB ("Additive B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthA ("Additive A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataDetailShadowGlobalMaskR ("Global Mask--{reference_property:_LightDataDetailShadowGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataDetailShadowGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingShadowMasks ("Shadow Masks (expand)--{reference_properties:[_LightingShadowMasksPan, _LightingShadowMasksUV,_LightingShadowMaskStrengthR,_LightingShadowMaskStrengthG,_LightingShadowMaskStrengthB,_LightingShadowMaskStrengthA, _LightDataShadowMaskGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingShadowMasksPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingShadowMasksUV ("UV", Int) = 0 + [HideInInspector]_LightingShadowMaskStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingShadowMaskStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataShadowMaskGlobalMaskR ("Global Mask--{reference_property:_LightDataShadowMaskGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataShadowMaskGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [HideInInspector] s_start_LightDataBasePass ("Base Pass (Directional & Baked Lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [Enum(Poi Custom, 0, Standard, 1, UTS2, 2, OpenLit(lil toon), 3)] _LightingColorMode ("Light Color Mode", Int) = 0 + [Enum(Poi Custom, 0, Normalized NDotL, 1, Saturated NDotL, 2, Casted Shadows Only, 3, SDF, 4)] _LightingMapMode ("Light Map Mode", Int) = 0 + [HideInInspector] s_start_LightDataSDF ("Signed Distance fields--{persistent_expand:true,default_expand:true, condition_showS:(_LightingMapMode==4)}", Float) = 1 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, Nothing, Nothing, Linear, false)]_LightDataSDFMap ("SDF Map (expand)--{reference_properties:[_LightDataSDFMapPan, _LightDataSDFMapUV]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightDataSDFMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightDataSDFMapUV ("UV", Int) = 0 + _LightDataSDFMapLOD ("LOD", Range(0, 1)) = 0 + _LightDataSDFBlendY ("Blend Y Direction", Range(0.001, 2)) = 1 + [HideInInspector] s_end_LightDataSDF ("Signed Distance fields", Float) = 1 + [Enum(Poi Custom, 0, Forced Local Direction, 1, Forced World Direction, 2, UTS2, 3, OpenLit(lil toon), 4, View Direction, 5)] _LightingDirectionMode ("Light Direction Mode", Int) = 0 + [Vector3]_LightngForcedDirection ("Forced Direction--{condition_showS:(_LightingDirectionMode==1 || _LightingDirectionMode==2)}", Vector) = (0, 0, 0) + _LightingViewDirOffsetPitch ("View Dir Offset Pitch--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + _LightingViewDirOffsetYaw ("View Dir Offset Yaw--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + [ToggleUI]_LightingForceColorEnabled ("Force Light Color", Float) = 0 + _LightingForcedColor ("Forced Color--{condition_showS:(_LightingForceColorEnabled==1), reference_property:_LightingForcedColorThemeIndex}", Color) = (1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _LightingForcedColorThemeIndex ("", Int) = 0 + _Unlit_Intensity ("Unlit_Intensity--{condition_showS:(_LightingColorMode==2)}", Range(0.001, 4)) = 1 + [DoNotLock][ToggleUI]_LightingCapEnabled ("Limit Brightness", Float) = 1 + [DoNotLock]_LightingCap ("Max Brightness--{condition_showS:(_LightingCapEnabled==1)}", Range(0, 10)) = 1 + [DoNotLock]_LightingMinLightBrightness ("Min Brightness", Range(0, 1)) = 0 + _LightingIndirectUsesNormals ("Indirect Uses Normals--{condition_showS:(_LightingColorMode==0)}", Range(0, 1)) = 0 + _LightingCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 0 + [DoNotLock]_LightingMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + [ToggleUI]_LightingVertexLightingEnabled ("Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingMirrorVertexLightingEnabled ("Mirror Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingEnableLightVolumes ("Light Volumes", Float) = 1 + [HideInInspector] s_end_LightDataBasePass ("Base Pass", Float) = 1 + [HideInInspector] s_start_LightDataAddPass ("Add Pass (Point & Spot lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [ToggleUI]_LightingAdditiveEnable ("Pixel lights (Important)", Float) = 1 + [ToggleUI]_DisableDirectionalInAdd ("Ignore Directional Lights--{condition_showS:(_LightingAdditiveEnable==1)}", Float) = 1 + [ToggleUI]_LightingAdditiveLimited ("Limit Brightness", Float) = 1 + _LightingAdditiveLimit ("Max Brightness--{condition_showS:(_LightingAdditiveLimited==1)}", Range(0, 10)) = 1 + _LightingAdditiveCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 1 + _LightingAdditiveMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + _LightingAdditivePassthrough ("Point Light Passthrough--{condition_showS:(_LightingAdditiveEnable==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_LightDataAddPass ("Add Pass", Float) = 1 + [HideInInspector] s_start_LightDataDebug ("Debug / Data Visualizations--{reference_property:_LightDataDebugEnabled,persistent_expand:true}", Float) = 0 + [HideInInspector][DoNotAnimate][ThryToggleUI(false)]_LightDataDebugEnabled ("Debug", Float) = 0 + [ThryWideEnum(Direct Color, 0, Indirect Color, 1, Light Map, 2, Attenuation, 3, N Dot L, 4, Half Dir, 5, Direction, 6, Add Color, 7, Add Attenuation, 8, Add Shadow, 9, Add N Dot L, 10)] _LightingDebugVisualize ("Visualize", Int) = 0 + [HideInInspector] s_end_LightDataDebug ("Debug", Float) = 0 + [HideInInspector] m_end_PoiLightData ("Light Data", Float) = 0 + [HideInInspector] m_start_bakedLighting ("Baked Lighting", Float) = 0 + _GIEmissionMultiplier ("GI Emission Multiplier", Float) = 1 + [HideInInspector] DSGI ("DSGI", Float) = 0 //add this property for double sided illumination settings to be shown + [HideInInspector] LightmapFlags ("Lightmap Flags", Float) = 0 //add this property for lightmap flags settings to be shown + [HideInInspector] m_end_bakedLighting ("Baked Lighting", Float) = 0 + [HideInInspector] m_start_PoiShading (" Shading--{reference_property:_ShadingEnabled,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/main},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(VIGNETTE_MASKED)]_ShadingEnabled ("Enable Shading", Float) = 1 + [DoNotAnimate][KeywordEnum(TextureRamp, Multilayer Math, Wrapped, Skin, ShadeMap, Flat, Realistic, Cloth, SDF)] _LightingMode ("Lighting Type", Float) = 5 + _LightingShadowColor ("Shadow Tint--{condition_showS:(_LightingMode!=4 && _LightingMode!=1 && _LightingMode!=5)}", Color) = (1, 1, 1) + _ShadowStrength ("Shadow Strength--{condition_showS:(_LightingMode<=4 || _LightingMode==8)}", Range(0, 1)) = 1 + _LightingIgnoreAmbientColor ("Ignore Indirect Shadow Color--{condition_showS:(_LightingMode<=3 || _LightingMode==8)}", Range(0, 1)) = 1 + [Space(15)] + [HideInInspector] s_start_ShadingAddPass ("Add Pass (Point & Spot Lights)--{persistent_expand:true,default_expand:false}", Float) = 0 + [Enum(Realistic, 0, Toon, 1, Same as Base Pass, 3)] _LightingAdditiveType ("Lighting Type", Int) = 3 + _LightingAdditiveGradientStart ("Gradient Start--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = 0 + _LightingAdditiveGradientEnd ("Gradient End--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_ShadingAddPass ("Add Pass", Float) = 0 + [HideInInspector] s_start_ShadingGlobalMask ("Global Masks--{persistent_expand:true,default_expand:false}", Float) = 0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapApplyGlobalMaskIndex ("LightMap to Global Mask--{reference_property:_ShadingRampedLightMapApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapApplyGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapInverseApplyGlobalMaskIndex ("Inversed LightMap to Global Mask--{reference_property:_ShadingRampedLightMapInverseApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapInverseApplyGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] s_end_ShadingGlobalMask ("Global Masks", Float) = 0 + [HideInInspector] m_end_PoiShading ("Shading", Float) = 0 + [HideInInspector] m_start_brdf (" Reflections & Specular--{reference_property:_MochieBRDF,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/reflections-and-specular},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(MOCHIE_PBR)]_MochieBRDF ("Enable", Float) = 0 + _MochieMetallicMultiplier ("Metallic", Range(0, 1)) = 0 + _MochieRoughnessMultiplier ("Smoothness", Range(0, 1)) = 1 + _MochieReflectionTint ("Reflection Tint--{reference_property:_MochieReflectionTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _MochieReflectionTintThemeIndex ("", Int) = 0 + _MochieSpecularTint ("Specular Tint--{reference_property:_MochieSpecularTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _MochieSpecularTintThemeIndex ("", Int) = 0 + [sRGBWarning][ThryRGBAPacker(R Metallic Map, G Smoothness Map, B Reflection Mask, A Specular Mask, linear, false)]_MochieMetallicMaps ("Packed Maps [Click to Expand]--{reference_properties:[_MochieMetallicMapsPan, _MochieMetallicMapsUV, _MochieMetallicMapsStochastic, _MochieMetallicMapsMetallicChannel, _MochieMetallicMapsRoughnessChannel, _MochieMetallicMapsReflectionMaskChannel, _MochieMetallicMapsSpecularMaskChannel, _MochieMetallicMapInvert, _MochieRoughnessMapInvert, _MochieReflectionMaskInvert, _MochieSpecularMaskInvert]}", 2D) = "white" { } + [HideInInspector][Vector2]_MochieMetallicMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)]_MochieMetallicMapsUV ("UV", Int) = 0 + [HideInInspector][ToggleUI]_MochieMetallicMapsStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsMetallicChannel ("Metallic Channel", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsRoughnessChannel ("Smoothness Channel", Float) = 1 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsReflectionMaskChannel ("Reflection Mask Channel", Float) = 2 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsSpecularMaskChannel ("Specular Mask Channel", Float) = 3 + [HideInInspector][ToggleUI]_MochieMetallicMapInvert ("Invert Metallic", Float) = 0 + [HideInInspector][ToggleUI]_MochieRoughnessMapInvert ("Invert Smoothness", Float) = 0 + [HideInInspector][ToggleUI]_MochieReflectionMaskInvert ("Invert Reflection Mask", Float) = 0 + [HideInInspector][ToggleUI]_MochieSpecularMaskInvert ("Invert Specular Mask", Float) = 0 + [Space(10)] + _MochieReflectionStrength ("Reflection Visibility", Range(0, 1)) = 1 + _MochieSpecularStrength ("Specular Visibility", Range(0, 5)) = 1 + _RefSpecFresnelStrength ("Fresnel Strength", Range(0, 1)) = .5 + _SFExposureOcclusion ("Exposure Occlusion", Range(0, 1)) = 0 + [Space(10)] + [ThryTexture][NoScaleOffset]_MochieReflCube ("Cubemap", Cube) = "" { } + [ToggleUI]_MochieForceFallback ("Force Fallback", Int) = 0 + [HideInInspector] s_start_BRDFTPSMaskGroup ("TPS--{condition_showS:(_TPSPenetratorEnabled==1)}", Float) = 0 + [ThryToggleUI(true)] _BRDFTPSDepthEnabled (" TPS Depth Enabled", Float) = 0 + _BRDFTPSReflectionMaskStrength ("Reflection Mask Strength--{condition_showS:(_BRDFTPSDepthEnabled==1)}", Range(0, 1)) = 1 + _BRDFTPSSpecularMaskStrength ("Specular Mask Strength--{condition_showS:(_BRDFTPSDepthEnabled==1)}", Range(0, 1)) = 1 + [HideInInspector] s_end_BRDFTPSMaskGroup ("", Float) = 0 + [HideInInspector] s_start_ggxanisotropics(" Anisotropics--{reference_property:_GGXAnisotropics,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ThryToggle(GGX_ANISOTROPICS)]_GGXAnisotropics ("Enable", Float) = 0 + [sRGBWarning]_AnisotropyMap("Anisotropy Map--{reference_properties:[_AnisotropyMapPan, _AnisotropyMapUV, _AnisotropyMapChannel]}", 2D) = "bump" { } + [HideInInspector][Vector2]_AnisotropyMapPan("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _AnisotropyMapUV ("UV", Int) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3)]_AnisotropyMapChannel ("Channel", Float) = 0 + _Anisotropy ("Anisotropy", Range(-1, 1)) = 0 + _ReflectionAnisotropicStretch("Reflection Stretch", Range(1, 5)) = 1 + _RoughnessAnisotropy("Roughness Anisotropy", Range(0, 1)) = 1 + [HideInInspector] s_end_ggxanisotropics ("", Float) = 0 + [HideInInspector] s_start_PBRSecondSpecular ("2nd Specular--{reference_property:_Specular2ndLayer,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_Specular2ndLayer ("2nd Specular", Float) = 0 + _MochieSpecularStrength2 ("Visibility", Range(0, 5)) = 1 + _MochieRoughnessMultiplier2 ("Smoothness", Range(0, 1)) = 1 + [HideInInspector] s_end_PBRSecondSpecular ("Name", Float) = 0 + [HideInInspector] s_start_PBRSplitMaskSample ("Split Mask Sampling--{reference_property:_PBRSplitMaskSample,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_PBRSplitMaskSample ("Split Mask Sampling", Float) = 0 + [VectorLabel(tX, tY, oX, oY)]_PBRMaskScaleTiling ("Tiling/Offset", Vector) = (1, 1, 0, 0) + [ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)]_MochieMetallicMasksUV ("UV", Int) = 0 + [ToggleUI]_PBRSplitMaskStochastic ("Stochastic Sampling", Float) = 0 + [Vector2]_MochieMetallicMasksPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector] s_end_PBRSplitMaskSample ("Split Mask Sampling", Float) = 0 + [HideInInspector] s_start_brdfadvanced ("GSAA & Advanced Controls--{persistent_expand:true,default_expand:false}", Float) = 0 + [ToggleUI]_MochieLitFallback ("Lit Fallback", Float) = 1 + [ToggleUI]_IgnoreCastedShadows ("Ignore Casted Shadows", Float) = 0 + _PBRNormalSelect ("Pixel Normal Mix", Range(0, 1)) = 1 + [ThryToggleUI(true)]_MochieGSAAEnabled (" GSAA", Float) = 1 + _PoiGSAAVariance ("GSAA Variance--{condition_showS:(_MochieGSAAEnabled==1)}", Range(0, 1)) = 0.15 + _PoiGSAAThreshold ("GSAA Threshold--{condition_showS:(_MochieGSAAEnabled==1)}", Range(0, 1)) = 0.1 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieMetallicGlobalMask ("Metallic--{reference_property:_MochieMetallicGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieMetallicGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieSmoothnessGlobalMask ("Smoothness--{reference_property:_MochieSmoothnessGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieSmoothnessGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieReflectionStrengthGlobalMask ("Reflection Strength--{reference_property:_MochieReflectionStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieReflectionStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieSpecularStrengthGlobalMask ("Specular Strength--{reference_property:_MochieSpecularStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieSpecularStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] s_end_brdfadvanced ("", Float) = 0 + [HideInInspector] m_end_brdf ("", Float) = 0 + [HideInInspector] m_OutlineCategory (" Outlines--{reference_property:_EnableOutlines,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/outlines/main},hover:Documentation}}", Float) = 0 + [HideInInspector] m_specialFXCategory ("Special FX", Float) = 0 + [HideInInspector] m_start_emissionOptions (" Emission 0--{reference_property:_EnableEmission,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/special-fx/emission},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(_EMISSION)] + _EnableEmission ("Enable Emission 0", Float) = 0 + [sRGBWarning]_EmissionMask ("Emission Mask--{reference_properties:[_EmissionMaskPan, _EmissionMaskUV, _EmissionMaskChannel, _EmissionMaskInvert, _EmissionMask0GlobalMask]}", 2D) = "white" { } + [HideInInspector][Vector2]_EmissionMaskPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _EmissionMaskUV ("UV", Int) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3)]_EmissionMaskChannel ("Channel", Float) = 0 + [HideInInspector][ToggleUI]_EmissionMaskInvert ("Invert", Float) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _EmissionMask0GlobalMask ("Global Mask--{reference_property:_EmissionMask0GlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)]_EmissionMask0GlobalMaskBlendType ("Blending", Range(0, 1)) = 2 + [HDR]_EmissionColor ("Emission Color--{reference_property:_EmissionColorThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _EmissionColorThemeIndex ("", Int) = 0 + [sRGBWarning(true)][Gradient]_EmissionMap ("Emission Map--{reference_properties:[_EmissionMapPan, _EmissionMapUV]}", 2D) = "white" { } + [HideInInspector][Vector2]_EmissionMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _EmissionMapUV ("UV", Int) = 0 + _EmissionStrength ("Emission Strength", Range(0, 20)) = 0 + [ToggleUI]_EmissionBaseColorAsMap ("Use Base Colors", Float) = 0 + [ToggleUI]_EmissionReplace0 ("Override Base Color", Float) = 0 + _EmissionFluorescence ("Fluorescence", Range(0, 1)) = 0 + [HideInInspector] s_start_EmissionHueShift0 ("Color Adjust--{reference_property:_EmissionHueShiftEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionHueShiftEnabled ("Hue Shift", Float) = 0 + [ThryWideEnum(OKLab, 0, HSV, 1)] _EmissionHueShiftColorSpace ("Color Space", Int) = 0 + [ThryWideEnum(Hue Select, 0, Hue Shift, 1)] _EmissionHueSelectOrShift ("Select or Shift", Int) = 1 + _EmissionSaturation ("Saturation", Range(-1, 10)) = 0 + _EmissionHueShift ("Hue Shift", Range(0, 1)) = 0 + _EmissionHueShiftSpeed ("Hue Shift Speed", Float) = 0 + [HideInInspector] s_end_EmissionHueShift0 ("", Float) = 0 + [HideInInspector] s_start_EmissionCenterOut0 ("Center Out--{reference_property:_EmissionCenterOutEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionCenterOutEnabled ("Center Out", Float) = 0 + _EmissionCenterOutSpeed ("Flow Speed", Float) = 5 + [HideInInspector] s_end_EmissionCenterOut0 ("", Float) = 0 + [HideInInspector] s_start_EmissionLightBased0 ("Light Based--{reference_property:_EnableGITDEmission,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EnableGITDEmission ("Light Based", Float) = 0 + [Enum(World, 0, Mesh, 1)] _GITDEWorldOrMesh ("Lighting Type", Int) = 0 + _GITDEMinEmissionMultiplier ("Min Emission Multiplier", Range(0, 1)) = 1 + _GITDEMaxEmissionMultiplier ("Max Emission Multiplier", Range(0, 1)) = 0 + _GITDEMinLight ("Min Lighting", Range(0, 1)) = 0 + _GITDEMaxLight ("Max Lighting", Range(0, 1)) = 1 + [HideInInspector] s_end_EmissionLightBased0 ("", Float) = 0 + [HideInInspector] s_start_EmissionBlinking0 ("Blinking--{reference_property:_EmissionBlinkingEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionBlinkingEnabled ("Blinking", Float) = 0 + _EmissiveBlink_Min ("Emissive Blink Min", Float) = 0 + _EmissiveBlink_Max ("Emissive Blink Max", Float) = 1 + _EmissiveBlink_Velocity ("Emissive Blink Velocity", Float) = 4 + _EmissionBlinkingOffset ("Offset", Float) = 0 + [HideInInspector] s_end_EmissionBlinking0 ("", Float) = 0 + [HideInInspector] s_start_ScrollingEmission0 ("Scrolling--{reference_property:_ScrollingEmission,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI] _ScrollingEmission ("Scrolling", Float) = 0 + [ToggleUI]_EmissionScrollingUseCurve ("Use Curve", float) = 0 + [Curve]_EmissionScrollingCurve ("Curve--{condition_showS:(_EmissionScrollingUseCurve==1)}", 2D) = "white" { } + [ToggleUI]_EmissionScrollingVertexColor ("VColor as position", float) = 0 + _EmissiveScroll_Direction ("Direction", Vector) = (0, -10, 0, 0) + _EmissiveScroll_Width ("Width", Float) = 10 + _EmissiveScroll_Velocity ("Velocity", Float) = 10 + _EmissiveScroll_Interval ("Interval", Float) = 20 + _EmissionScrollingOffset ("Offset", Float) = 0 + [HideInInspector] s_end_ScrollingEmission0 ("", Float) = 0 + [Space(4)] + [ThryToggleUI(true)] _EmissionAL0Enabled (" Audio Link--{ condition_showS:_EnableAudioLink==1}", Float) = 0 + [HideInInspector] s_start_EmissionAL0Multiply ("Strength Multiply--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _EmissionAL0MultipliersBand ("Band", Int) = 0 + [VectorLabel(Min, Max)]_EmissionAL0Multipliers ("Multiplier", Vector) = (1, 1, 0, 0) + [HideInInspector] s_end_EmissionAL0Multiply ("Strength Multiply", Float) = 0 + [HideInInspector] s_start_EmissionAL0Add ("Strength Add--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _EmissionAL0StrengthBand ("Band", Int) = 0 + [VectorLabel(Min, Max)]_EmissionAL0StrengthMod ("Strength", Vector) = (0, 0, 0, 0) + [HideInInspector] s_end_EmissionAL0Add ("Strength Add", Float) = 0 + [HideInInspector] s_start_EmissionAL0COut ("Center Out--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _AudioLinkEmission0CenterOutBand ("Band", Int) = 0 + [VectorLabel(Min, Max)] _AudioLinkEmission0CenterOut ("Strength", Vector) = (0, 0, 0, 0) + _AudioLinkEmission0CenterOutSize ("Intensity Threshold", Range(0, 1)) = 0 + _AudioLinkEmission0CenterOutDuration ("Duration", Range(-1, 1)) = 1 + [HideInInspector] s_end_EmissionAL0COut ("Center Out", Float) = 0 + [HideInInspector] m_end_emissionOptions ("", Float) = 0 + [HideInInspector] m_vertexCategory ("Vertex Options", Float) = 0 + [HideInInspector] m_start_Uzumore (" View Clip Prevention (Uzumore)--{reference_property:_UzumoreCategoryToggle,button_author:{text:sigmal00,action:{type:URL,data:https://github.com/sigmal00},hover:GitHub}}, button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/vertex-options/view-clip-prevention},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(POI_UZUMORE)] _UzumoreCategoryToggle (" View Clip Prevention (Uzumore)", Float) = 0 + [ToggleUI] _UzumoreEnabled ("Animation Toggle", Float) = 1 + _UzumoreAmount ("Push Amount (m)", Float) = 0.1 + _UzumoreBias ("Push Bias", Float) = 0.001 + [sRGBWarning]_UzumoreMask ("Push Mask (A)", 2D) = "white" { } + [ThryWideEnum(R, 0, G, 1, B, 2, A, 3)] _UzumoreMaskUV ("Push Mask Channel", Float) = 3 + [HideInInspector] m_end_Uzumore ("Camera Push Back", Float) = 0 + [HideInInspector] m_modifierCategory ("Global Modifiers & Data", Float) = 0 + [HideInInspector] m_start_PoiGlobalCategory ("Global Data and Masks", Float) = 0 + [HideInInspector] m_start_GlobalThemes ("Global Themes--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/global-themes},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HDR]_GlobalThemeColor0 ("Theme Color 0", Color ) = (1, 1, 1, 1) + _GlobalThemeHue0 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed0 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation0 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue0 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HDR]_GlobalThemeColor1 ("Theme Color 1", Color ) = (1, 1, 1, 1) + _GlobalThemeHue1 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed1 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation1 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue1 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HDR]_GlobalThemeColor2 ("Theme Color 2", Color ) = (1, 1, 1, 1) + _GlobalThemeHue2 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed2 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation2 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue2 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HDR]_GlobalThemeColor3 ("Theme Color 3", Color ) = (1, 1, 1, 1) + _GlobalThemeHue3 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed3 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation3 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue3 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HideInInspector] m_end_GlobalThemes ("Global Themes", Float ) = 0 + [HideInInspector] m_start_GlobalMask ("Global Mask--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/global-masks},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalMaskModifiers ("Modifiers", Float) = 0 + [HideInInspector] m_end_GlobalMaskModifiers ("", Float) = 0 + [HideInInspector] m_end_GlobalMask ("Global Mask", Float) = 0 + [HideInInspector] m_end_PoiGlobalCategory ("Global Data and Masks ", Float) = 0 + [HideInInspector] m_start_PoiUVCategory ("UVs", Float) = 0 + [HideInInspector] m_start_Stochastic ("Stochastic Sampling--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/stochastic-sampling},hover:Documentation}}", Float) = 0 + [KeywordEnum(Deliot Heitz, Hextile, None)] _StochasticMode ("Sampling Mode", Float) = 0 + [HideInInspector] s_start_deliot ("Deliot Heitz--{persistent_expand:true,default_expand:false,condition_show:_StochasticMode==0}", Float) = 0 + _StochasticDeliotHeitzDensity ("Detiling Density", Range(0.1, 10)) = 1 + [HideInInspector] s_end_deliot ("Deliot Heitz", Float) = 0 + [HideInInspector] m_end_Stochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector] m_start_uvLocalWorld ("Local World UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/local-world-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos0 ("Local X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos1 ("Local Y", Int) = 1 + [Space(10)] + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos0 ("World X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos1 ("World Y", Int) = 2 + [HideInInspector] m_end_uvLocalWorld ("Local World UV", Float) = 0 + [HideInInspector] m_start_uvPanosphere ("Panosphere UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/panosphere-uv},hover:Documentation}}", Float) = 0 + [ToggleUI] _StereoEnabled ("Stereo Enabled", Float) = 0 + [ToggleUI] _PanoUseBothEyes ("Perspective Correct (VR)", Float) = 1 + [HideInInspector] m_end_uvPanosphere ("Panosphere UV", Float) = 0 + [HideInInspector] m_start_uvPolar ("Polar UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/polar-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8)] _PolarUV ("UV", Int) = 0 + [Vector2]_PolarCenter ("Center Coordinate", Vector) = (.5, .5, 0, 0) + _PolarRadialScale ("Radial Scale", Float) = 1 + _PolarLengthScale ("Length Scale", Float) = 1 + _PolarSpiralPower ("Spiral Power", Float) = 0 + [HideInInspector] m_end_uvPolar ("Polar UV", Float) = 0 + [HideInInspector] m_end_PoiUVCategory ("UVs ", Float) = 0 + [HideInInspector] m_start_PoiPostProcessingCategory ("Post Processing", Float) = 0 + [HideInInspector] m_start_PPAnimations ("PP Animations--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/post-processing/pp-animations},hover:Documentation}}", Float) = 0 + [Helpbox(1)] _PPHelp ("This section meant for real time adjustments through animations and not to be changed in unity", Int) = 0 + _PPLightingMultiplier ("Lighting Mulitplier", Float) = 1 + _PPLightingAddition ("Lighting Add", Float) = 0 + _PPEmissionMultiplier ("Emission Multiplier", Float) = 1 + _PPFinalColorMultiplier ("Final Color Multiplier", Float) = 1 + [HideInInspector] m_end_PPAnimations ("PP Animations ", Float) = 0 + [HideInInspector] m_end_PoiPostProcessingCategory ("Post Processing ", Float) = 0 + [HideInInspector] m_thirdpartyCategory ("Third Party", Float) = 0 + [HideInInspector] m_renderingCategory ("Rendering--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/main},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.CullMode)] _Cull ("Cull", Float) = 2 + [DoNotAnimate][Enum(UnityEngine.Rendering.CompareFunction)] _ZTest ("ZTest", Float) = 4 + [DoNotAnimate][Enum(Off, 0, On, 1)] _ZWrite ("ZWrite", Int) = 1 + [DoNotAnimate][ThryMask(Thry.ColorMaskFlags)] _ColorMask ("Color Mask", Int) = 15 + [DoNotAnimate] _OffsetFactor ("Offset Factor", Float) = 0.0 + [DoNotAnimate] _OffsetUnits ("Offset Units", Float) = 0.0 + [DoNotAnimate][ToggleUI] _RenderingReduceClipDistance ("Reduce Clip Distance", Float) = 0 + [DoNotAnimate][ToggleUI] _ZClip ("Z Clip", Float) = 1 + [DoNotAnimate][ToggleUI] _IgnoreFog ("Ignore Fog", Float) = 0 + [DoNotAnimate][ToggleUI]_FlipBackfaceNormals ("Flip Backface Normals", Int) = 1 + [DoNotAnimate][HideInInspector] Instancing ("Instancing", Float) = 0 //add this property for instancing variants settings to be shown + [ToggleUI] _RenderingEarlyZEnabled ("Early Z", Float) = 0 + [HideInInspector] m_start_blending ("Blending--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/blending},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOp ("RGB Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlend ("RGB Destination Blend", Int) = 0 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOp ("RGB Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlend ("RGB Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_start_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOpAlpha ("Alpha Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlendAlpha ("Alpha Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlendAlpha ("Alpha Destination Blend", Int) = 10 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOpAlpha ("Alpha Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlendAlpha ("Alpha Source Blend", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlendAlpha ("Alpha Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_end_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [HideInInspector] m_end_blending ("Blending", Float) = 0 + [HideInInspector] m_start_StencilPassOptions ("Stencil--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/stencil},hover:Documentation}}", Float) = 0 + [ThryWideEnum(Simple, 0, Front Face vs Back Face, 1)] _StencilType ("Stencil Type", Float) = 0 + [IntRange] _StencilRef ("Stencil Reference Value", Range(0, 255)) = 0 + [IntRange] _StencilReadMask ("Stencil ReadMask Value", Range(0, 255)) = 255 + [IntRange] _StencilWriteMask ("Stencil WriteMask Value", Range(0, 255)) = 255 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilPassOp ("Stencil Pass Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFailOp ("Stencil Fail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilZFailOp ("Stencil ZFail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilCompareFunction ("Stencil Compare Function--{condition_showS:(_StencilType==0)}", Float) = 8 + [HideInInspector] m_start_StencilPassBackOptions("Back--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp0 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackPassOp ("Back Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackFailOp ("Back Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackZFailOp ("Back ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilBackCompareFunction ("Back Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassBackOptions("Back", Float) = 0 + [HideInInspector] m_start_StencilPassFrontOptions("Front--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp1 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontPassOp ("Front Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontFailOp ("Front Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontZFailOp ("Front ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilFrontCompareFunction ("Front Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassFrontOptions("Front", Float) = 0 + [HideInInspector] m_end_StencilPassOptions ("Stencil", Float) = 0 + } + SubShader + { + Tags { "RenderType" = "Opaque" "Queue" = "Geometry" "VRCFallback" = "Standard" } + Pass + { + Name "Base" + Tags { "LightMode" = "ForwardBase" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Back + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define PROP_LIGHTINGAOMAPS + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_LIGHTINGAOMAPS + #define PROP_MOCHIEMETALLICMAPS + #define PROP_EMISSIONMASK + #define PROP_EMISSIONMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdbase + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #pragma multi_compile_fragment _ VERTEXLIGHT_ON + #define POI_PASS_BASE + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + #ifndef VRC_LIGHT_VOLUMES_INCLUDED + #define VRC_LIGHT_VOLUMES_INCLUDED + #define VRCLV_VERSION 2 + #define VRCLV_MAX_VOLUMES_COUNT 32 + #define VRCLV_MAX_LIGHTS_COUNT 128 + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + cbuffer LightVolumeUniforms { + #endif + uniform float _UdonLightVolumeEnabled; + uniform float _UdonLightVolumeVersion; + uniform float _UdonLightVolumeCount; + uniform float _UdonLightVolumeAdditiveMaxOverdraw; + uniform float _UdonLightVolumeAdditiveCount; + uniform float _UdonLightVolumeProbesBlend; + uniform float _UdonLightVolumeSharpBounds; + uniform float4x4 _UdonLightVolumeInvWorldMatrix[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeRotation[VRCLV_MAX_VOLUMES_COUNT * 2]; // Legacy! Used in this version to have back compatibility with older worlds. Array commented above will be used in future releases! Legacy! + uniform float3 _UdonLightVolumeInvLocalEdgeSmooth[VRCLV_MAX_VOLUMES_COUNT]; + uniform float3 _UdonLightVolumeUvw[VRCLV_MAX_VOLUMES_COUNT * 6]; // Legacy! AABB Bounds of islands on the 3D Texture atlas. Array commented above will be used in future releases! Legacy! + uniform float4 _UdonLightVolumeOcclusionUvw[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeColor[VRCLV_MAX_VOLUMES_COUNT]; + uniform float _UdonPointLightVolumeCount; + uniform float _UdonPointLightVolumeCubeCount; + uniform float4 _UdonPointLightVolumePosition[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeColor[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeDirection[VRCLV_MAX_LIGHTS_COUNT]; + uniform float3 _UdonPointLightVolumeCustomID[VRCLV_MAX_LIGHTS_COUNT]; + uniform float _UdonLightBrightnessCutoff; + uniform float _UdonLightVolumeOcclusionCount; + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + } + #endif + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + uniform Texture3D _UdonLightVolume; + uniform SamplerState sampler_UdonLightVolume; + uniform Texture2DArray _UdonPointLightVolumeTexture; + #define LV_SAMPLE(tex, uvw) tex.SampleLevel(sampler_UdonLightVolume, uvw, 0) + #else + #define LV_SAMPLE(tex, uvw) float4(0,0,0,0) + #endif + #define LV_PI 3.141592653589793f + #define LV_PI2 6.283185307179586f + float LV_Smoothstep01(float x) { + return x * x * (3 - 2 * x); + } + float3 LV_MultiplyVectorByQuaternion(float3 v, float4 q) { + float3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); + } + float3 LV_MultiplyVectorByMatrix2x3(float3 v, float3 r0, float3 r1) { + float3 r2 = cross(r0, r1); + return float3(dot(v, r0), dot(v, r1), dot(v, r2)); + } + float LV_FastAcos(float x) { + float absX = abs(x); + float res = -0.156583f * absX + LV_PI * 0.5f; + res *= sqrt(1.0f - absX); + return (x >= 0) ? res : (LV_PI - res); + } + float LV_DistributionGGX(float NoH, float roughness) { + float f = (roughness - 1) * ((roughness + 1) * (NoH * NoH)) + 1; + return (roughness * roughness) / ((float) LV_PI * f * f); + } + bool LV_PointLocalAABB(float3 localUVW) { + return all(abs(localUVW) <= 0.5); + } + float3 LV_LocalFromVolume(uint volumeID, float3 worldPos) { + return mul(_UdonLightVolumeInvWorldMatrix[volumeID], float4(worldPos, 1.0)).xyz; + } + float LV_EvaluateSH(float L0, float3 L1, float3 n) { + return L0 + dot(L1, n); + } + float4 LV_SampleCubemapArray(uint id, float3 dir) { + float3 absDir = abs(dir); + float2 uv; + uint face; + if (absDir.x >= absDir.y && absDir.x >= absDir.z) { + face = dir.x > 0 ? 0 : 1; + uv = float2((dir.x > 0 ? -dir.z : dir.z), -dir.y) * rcp(absDir.x); + } else if (absDir.y >= absDir.z) { + face = dir.y > 0 ? 2 : 3; + uv = float2(dir.x, (dir.y > 0 ? dir.z : -dir.z)) * rcp(absDir.y); + } else { + face = dir.z > 0 ? 4 : 5; + uv = float2((dir.z > 0 ? dir.x : -dir.x), -dir.y) * rcp(absDir.z); + } + float3 uvid = float3(uv * 0.5 + 0.5, id * 6 + face); + return LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + } + float4 LV_ProjectQuadLightIrradianceSH(float3 shadingPosition, float3 lightVertices[4]) { + [unroll] for (uint edge0 = 0; edge0 < 4; edge0++) { + lightVertices[edge0] = normalize(lightVertices[edge0] - shadingPosition); + } + const float3 zhDir0 = float3(0.866025, -0.500001, -0.000004); + const float3 zhDir1 = float3(-0.759553, 0.438522, -0.480394); + const float3 zhDir2 = float3(-0.000002, 0.638694, 0.769461); + const float3 zhWeightL1y = float3(2.1995339f, 2.50785367f, 1.56572711f); + const float3 zhWeightL1z = float3(-1.82572523f, -2.08165037f, 0.00000000f); + const float3 zhWeightL1x = float3(2.42459869f, 1.44790525f, 0.90397552f); + float solidAngle = 0.0; + float3 surfaceIntegral = 0.0; + [loop] for (uint edge1 = 0; edge1 < 4; edge1++) { + uint next = (edge1 + 1) % 4; + uint prev = (edge1 + 4 - 1) % 4; + float3 prevVert = lightVertices[prev]; + float3 thisVert = lightVertices[edge1]; + float3 nextVert = lightVertices[next]; + float3 a = cross(thisVert, prevVert); + float3 b = cross(thisVert, nextVert); + float lenA = length(a); + float lenB = length(b); + solidAngle += LV_FastAcos(clamp(dot(a, b) / (lenA * lenB), -1, 1)); + float3 mu = b * rcp(lenB); + float cosGamma = dot(thisVert, nextVert); + float gamma = LV_FastAcos(clamp(cosGamma, -1, 1)); + surfaceIntegral.x += gamma * dot(zhDir0, mu); + surfaceIntegral.y += gamma * dot(zhDir1, mu); + surfaceIntegral.z += gamma * dot(zhDir2, mu); + } + solidAngle = solidAngle - LV_PI2; + surfaceIntegral *= 0.5; + const float normalizationL0 = 0.5f * sqrt(1.0f / LV_PI); + float l0 = normalizationL0 * solidAngle; + float l1y = dot(zhWeightL1y, surfaceIntegral); + float l1z = dot(zhWeightL1z, surfaceIntegral); + float l1x = dot(zhWeightL1x, surfaceIntegral); + const float cosineKernelL0 = LV_PI; // (1) + const float cosineKernelL1 = LV_PI2 / 3.0f; // (1) + const float oneOverPi = 1.0f / LV_PI; // (2) + const float normalizationL1 = 0.5f * sqrt(3.0f / LV_PI); // (3) + const float weightL0 = cosineKernelL0 * normalizationL0 * oneOverPi; // (1), (2), (3) + const float weightL1 = cosineKernelL1 * normalizationL1 * oneOverPi; // (1), (2), (3) + l0 *= weightL0; + l1y *= weightL1; + l1z *= weightL1; + l1x *= weightL1; + return float4(l1x, l1y, l1z, l0); + } + void LV_QuadLight(float3 worldPos, float3 centroidPos, float4 rotationQuat, float2 size, float3 color, float sqMaxDist, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 lightToWorldPos = worldPos - centroidPos; + float3 normal = LV_MultiplyVectorByQuaternion(float3(0, 0, 1), rotationQuat); + if (dot(normal, lightToWorldPos) < 0.0) return; + float sqCutoffDist = sqMaxDist - dot(lightToWorldPos, lightToWorldPos); + color.rgb *= saturate(sqCutoffDist / sqMaxDist) * LV_PI * occlusion; + float2 halfSize = size * 0.5f; + float3 xAxis = LV_MultiplyVectorByQuaternion(float3(1, 0, 0), rotationQuat); + float3 yAxis = cross(normal, xAxis); + float3 verts[4]; + verts[0] = centroidPos + (-halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[1] = centroidPos + ( halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[2] = centroidPos + ( halfSize.x * xAxis) + (-halfSize.y * yAxis); + verts[3] = centroidPos + (-halfSize.x * xAxis) + (-halfSize.y * yAxis); + float4 areaLightSH = LV_ProjectQuadLightIrradianceSH(worldPos, verts); + float lenL1 = length(areaLightSH.xyz); + if (lenL1 > areaLightSH.w) areaLightSH.xyz *= areaLightSH.w / lenL1; + L0 += areaLightSH.w * color.rgb; + L1r += areaLightSH.xyz * color.r; + L1g += areaLightSH.xyz * color.g; + L1b += areaLightSH.xyz * color.b; + count++; + } + float3 LV_PointLightAttenuation(float sqdist, float sqlightSize, float3 color, float brightnessCutoff, float sqMaxDist) { + float mask = saturate(1 - sqdist / sqMaxDist); + return mask * mask * color * sqlightSize / (sqdist + sqlightSize); + } + float LV_PointLightSolidAngle(float sqdist, float sqlightSize) { + return saturate(sqrt(sqdist / (sqlightSize + sqdist))); + } + void LV_SphereLight(float sqdist, float3 dirN, float sqlightSize, float3 color, float occlusion, float sqMaxDist, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 att = LV_PointLightAttenuation(sqdist, sqlightSize, color, _UdonLightBrightnessCutoff, sqMaxDist); + float3 l0 = att * occlusion; + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLight(float sqdist, float3 dirN, float sqlightSize, float3 att, float spotMask, float cosAngle, float coneFalloff, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float smoothedCone = LV_Smoothstep01(saturate(spotMask * coneFalloff)); + float3 l0 = att * (occlusion * smoothedCone); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * saturate(1 - cosAngle)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightCookie(float sqdist, float3 dirN, float sqlightSize, float3 att, float4 lightRot, float tanAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 localDir = LV_MultiplyVectorByQuaternion(-dirN, lightRot); + float2 uv = localDir.xy * rcp(localDir.z * tanAngle); + if ( + localDir.z <= 0.0 || // Culling by direction + abs(uv.x) > 1.0 || abs(uv.y) > 1.0 // Culling by UV + ) return; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 - customId - 1; + float3 uvid = float3(uv * 0.5 + 0.5, id); + float angleSize = saturate(rsqrt(1 + tanAngle * tanAngle)); + float4 cookie = LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + float3 l0 = att * cookie.rgb * (cookie.a * occlusion); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * (1 - angleSize)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightAttenuationLUT(float sqdist, float3 dirN, float sqlightSize, float3 color, float spotMask, float cosAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float dirRadius = sqdist * abs(sqlightSize); + float spot = 1 - saturate(spotMask * rcp(1 - cosAngle)); + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId - 1; + float3 uvid = float3(sqrt(float2(spot, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * occlusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } + void LV_PointLight(uint id, float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 customID_data = _UdonPointLightVolumeCustomID[id]; + int shadowId = (int) customID_data.y; // Shadowmask id + int customId = (int) customID_data.x; // Custom Texture ID + float sqrRange = customID_data.z; // Squared culling distance + float4 pos = _UdonPointLightVolumePosition[id]; // Light position and inversed squared range + float3 dir = pos.xyz - worldPos; + float sqlen = max(dot(dir, dir), 1e-6); + if (sqlen > sqrRange) return; // Early distance based culling + float3 dirN = dir * rsqrt(sqlen); + float lightOcclusion = 1; + if (_UdonLightVolumeOcclusionCount != 0 && shadowId >= 0) { + lightOcclusion = dot(occlusion, float4(shadowId == 0, shadowId == 1, shadowId == 2, shadowId == 3)); + } + float4 color = _UdonPointLightVolumeColor[id]; // Color, angle + float4 ldir = _UdonPointLightVolumeDirection[id]; // Dir + falloff or Rotation + if (pos.w < 0) { // It is a spot light + float angle = color.w; + float spotMask = dot(ldir.xyz, -dirN) - angle; + if(customId >= 0 && spotMask < 0) return; // Spot cone based culling + if (customId > 0) { // If it uses Attenuation LUT + LV_SphereSpotLightAttenuationLUT(sqlen, dirN, -pos.w, color.rgb, spotMask, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + float3 att = LV_PointLightAttenuation(sqlen, -pos.w, color.rgb, _UdonLightBrightnessCutoff, sqrRange); + if (customId < 0) { // If uses cookie + LV_SphereSpotLightCookie(sqlen, dirN, -pos.w, att, ldir, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + LV_SphereSpotLight(sqlen, dirN, -pos.w, att, spotMask, angle, ldir.w, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + } else if (color.w <= 1.5f) { // It is a point light + if (customId > 0) { // Using LUT + float invSqRange = abs(pos.w); // Sign of range defines if it's point light (positive) or a spot light (negative) + float dirRadius = sqlen * invSqRange; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId; + float3 uvid = float3(sqrt(float2(0, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * lightOcclusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } else { // If it uses default parametric attenuation + float3 l0 = 0, l1r = 0, l1g = 0, l1b = 0; + LV_SphereLight(sqlen, dirN, pos.w, color.rgb, lightOcclusion, sqrRange, l0, l1r, l1g, l1b, count); + float3 cubeColor = 1; + if (customId < 0) { // If it uses a cubemap + uint id = -customId - 1; // Cubemap ID starts from zero and should not take in count texture array slices count. + cubeColor = LV_SampleCubemapArray(id, LV_MultiplyVectorByQuaternion(dirN, ldir)).xyz; + } + L0 += l0 * cubeColor; + L1r += l1r * cubeColor.r; + L1g += l1g * cubeColor.g; + L1b += l1b * cubeColor.b; + } + } else { // It is an area light + LV_QuadLight(worldPos, pos.xyz, ldir, float2(pos.w, color.w - 2.0f), color.rgb, sqrRange, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + void LV_SampleLightVolumeTex(float3 uvw0, float3 uvw1, float3 uvw2, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b) { + float4 tex0 = LV_SAMPLE(_UdonLightVolume, uvw0); + float4 tex1 = LV_SAMPLE(_UdonLightVolume, uvw1); + float4 tex2 = LV_SAMPLE(_UdonLightVolume, uvw2); + L0 = tex0.rgb; + L1r = float3(tex1.r, tex2.r, tex0.a); + L1g = float3(tex1.g, tex2.g, tex1.a); + L1b = float3(tex1.b, tex2.b, tex2.a); + } + float LV_BoundsMask(float3 localUVW, float3 invLocalEdgeSmooth) { + float3 distToMin = (localUVW + 0.5) * invLocalEdgeSmooth; + float3 distToMax = (0.5 - localUVW) * invLocalEdgeSmooth; + float3 fade = saturate(min(distToMin, distToMax)); + return fade.x * fade.y * fade.z; + } + void LV_SampleLightProbe(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz; + L1g += unity_SHAg.xyz; + L1b += unity_SHAb.xyz; + } + void LV_SampleLightProbeDering(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz * 0.565f; + L1g += unity_SHAg.xyz * 0.565f; + L1b += unity_SHAb.xyz * 0.565f; + } + void LV_SampleVolume(uint id, float3 localUVW, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + float3 uvw0 = uvwScaled + _UdonLightVolumeUvw[uvwID].xyz; + float3 uvw1 = uvwScaled + _UdonLightVolumeUvw[uvwID + 2].xyz; + float3 uvw2 = uvwScaled + _UdonLightVolumeUvw[uvwID + 4].xyz; + float3 l0, l1r, l1g, l1b; + LV_SampleLightVolumeTex(uvw0, uvw1, uvw2, l0, l1r, l1g, l1b); + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + occlusion = 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + occlusion = 1; + } + float4 color = _UdonLightVolumeColor[id]; + L0 += l0 * color.rgb; + l1r *= color.r; + l1g *= color.g; + l1b *= color.b; + if (color.a != 0) { + float3 r0 = _UdonLightVolumeRotation[id * 2].xyz; + float3 r1 = _UdonLightVolumeRotation[id * 2 + 1].xyz; + L1r += LV_MultiplyVectorByMatrix2x3(l1r, r0, r1); + L1g += LV_MultiplyVectorByMatrix2x3(l1g, r0, r1); + L1b += LV_MultiplyVectorByMatrix2x3(l1b, r0, r1); + } else { + L1r += l1r; + L1g += l1g; + L1b += l1b; + } + } + float4 LV_SampleVolumeOcclusion(uint id, float3 localUVW) { + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + return 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + return 1; + } + } + void LV_PointLightVolumeSH(float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + uint pointCount = min((uint) _UdonPointLightVolumeCount, VRCLV_MAX_LIGHTS_COUNT); + if (pointCount == 0) return; + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_LIGHTS_COUNT); + uint pcount = 0; // Point lights counter + [loop] for (uint pid = 0; pid < pointCount && pcount < maxOverdraw; pid++) { + LV_PointLight(pid, worldPos, occlusion, L0, L1r, L1g, L1b, pcount); + } + } + void LV_LightVolumeSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + if (volumesCount == 0) { // Legacy! Fallback to default light probes if Light Volume are not enabled or a version is too old to have a support. Legacy! + LV_SampleLightProbe(L0, L1r, L1g, L1b); + return; + } + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + bool lightProbesBlend = _UdonLightVolumeProbesBlend; + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + [loop] for (uint id = 0; id < volumesCount; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA && lightProbesBlend) { + LV_SampleLightProbe(L0, L1r, L1g, L1b); + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + float3 L0_A = 0; + float3 L1r_A = 0; + float3 L1g_A = 0; + float3 L1b_A = 0; + float4 occlusion_A = 1; + LV_SampleVolume(volumeID_A, localUVW_A, L0_A, L1r_A, L1g_A, L1b_A, occlusion_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || isNoA || (_UdonLightVolumeSharpBounds && isNoB)) { // Returning SH A result if it's the center of mask or out of bounds + L0 += L0_A; + L1r += L1r_A; + L1g += L1g_A; + L1b += L1b_A; + occlusion = occlusion_A; + occlusion *= mOcclusion; + return; + } + float3 L0_B = 0; + float3 L1r_B = 0; + float3 L1g_B = 0; + float3 L1b_B = 0; + float4 occlusion_B = 1; + if (isNoB && lightProbesBlend) { // No Volume found and light volumes blending enabled + LV_SampleLightProbe(L0_B, L1r_B, L1g_B, L1b_B); + } else { // Blending Volume A and Volume B + localUVW_B = isNoB ? localUVW : localUVW_B; + volumeID_B = isNoB ? volumesCount - 1 : volumeID_B; + LV_SampleVolume(volumeID_B, localUVW_B, L0_B, L1r_B, L1g_B, L1b_B, occlusion_B); + } + occlusion = lerp(occlusion_B, occlusion_A, mask); + occlusion *= mOcclusion; + L0 += lerp(L0_B, L0_A, mask); + L1r += lerp(L1r_B, L1r_A, mask); + L1g += lerp(L1g_B, L1g_A, mask); + L1b += lerp(L1b_B, L1b_A, mask); + } + void LV_LightVolumeAdditiveSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + if (additiveCount == 0 && (uint) _UdonPointLightVolumeCount == 0) return; // Legacy! + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW for Y Axis and Free rotations + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + uint count = min(_UdonLightVolumeOcclusionCount == 0 ? additiveCount : volumesCount, VRCLV_MAX_VOLUMES_COUNT); // Only use all volumes if occlusion volumes are enabled + [loop] for (uint id = 0; id < count; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA || _UdonLightVolumeOcclusionCount == 0) { + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + occlusion = LV_SampleVolumeOcclusion(volumeID_A, localUVW_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || (_UdonLightVolumeSharpBounds && isNoB)) { + occlusion *= mOcclusion; + return; // Returning A result if it's the center of mask or out of bounds + } + if (isNoB) occlusion = lerp(1, occlusion, mask); + else occlusion = lerp(LV_SampleVolumeOcclusion(volumeID_B, localUVW_B), occlusion, mask); + occlusion *= mOcclusion; + } + float3 LightVolumeSpecular(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specColor = max(float3(dot(reflect(-L1r, worldNormal), viewDir), dot(reflect(-L1g, worldNormal), viewDir), dot(reflect(-L1b, worldNormal), viewDir)), 0); + float3 rDir = normalize(normalize(L1r) + viewDir); + float3 gDir = normalize(normalize(L1g) + viewDir); + float3 bDir = normalize(normalize(L1b) + viewDir); + float rNh = saturate(dot(worldNormal, rDir)); + float gNh = saturate(dot(worldNormal, gDir)); + float bNh = saturate(dot(worldNormal, bDir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float rSpec = LV_DistributionGGX(rNh, roughExp); + float gSpec = LV_DistributionGGX(gNh, roughExp); + float bSpec = LV_DistributionGGX(bNh, roughExp); + float3 specs = (rSpec + gSpec + bSpec) * f0; + float3 coloredSpecs = specs * specColor; + float3 a = coloredSpecs + specs * L0; + float3 b = coloredSpecs * 3; + return max(lerp(a, b, smoothness) * 0.5f, 0.0); + } + float3 LightVolumeSpecular(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecular(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeSpecularDominant(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 dominantDir = L1r + L1g + L1b; + float3 dir = normalize(normalize(dominantDir) + viewDir); + float nh = saturate(dot(worldNormal, dir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float spec = LV_DistributionGGX(nh, roughExp); + return max(spec * L0 * f0, 0.0) * 1.5f; + } + float3 LightVolumeSpecularDominant(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecularDominant(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeEvaluate(float3 worldNormal, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + return float3(LV_EvaluateSH(L0.r, L1r, worldNormal), LV_EvaluateSH(L0.g, L1g, worldNormal), LV_EvaluateSH(L0.b, L1b, worldNormal)); + } + void LightVolumeSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled == 0) { + LV_SampleLightProbeDering(L0, L1r, L1g, L1b); + } else { + float4 occlusion = 1; + LV_LightVolumeSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + void LightVolumeAdditiveSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled != 0) { + float4 occlusion = 1; + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + float3 LightVolumeSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float3 LightVolumeAdditiveSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return 0; + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float LightVolumesEnabled() { + return _UdonLightVolumeEnabled; + } + float LightVolumesVersion() { + return _UdonLightVolumeVersion == 0 ? _UdonLightVolumeEnabled : _UdonLightVolumeVersion; + } + #endif + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + #ifdef _EMISSION + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMap; + #endif + float4 _EmissionMap_ST; + float2 _EmissionMapPan; + float _EmissionMapUV; + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMask; + #endif + float4 _EmissionMask_ST; + float2 _EmissionMaskPan; + float _EmissionMaskUV; + float _EmissionMaskInvert; + float _EmissionMaskChannel; + float _EmissionMask0GlobalMask; + float _EmissionMask0GlobalMaskBlendType; + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionScrollingCurve; + #endif + float4 _EmissionScrollingCurve_ST; + float _EmissionFluorescence; + float4 _EmissionColor; + float _EmissionBaseColorAsMap; + float _EmissionStrength; + float _EmissionHueShiftEnabled; + float _EmissionHueShiftColorSpace; + float _EmissionHueSelectOrShift; + float _EmissionSaturation; + float _EmissionHueShift; + float _EmissionHueShiftSpeed; + float _EmissionCenterOutEnabled; + float _EmissionCenterOutSpeed; + float _EnableGITDEmission; + float _GITDEWorldOrMesh; + float _GITDEMinEmissionMultiplier; + float _GITDEMaxEmissionMultiplier; + float _GITDEMinLight; + float _GITDEMaxLight; + float _EmissionBlinkingEnabled; + float _EmissiveBlink_Min; + float _EmissiveBlink_Max; + float _EmissiveBlink_Velocity; + float _EmissionBlinkingOffset; + float _ScrollingEmission; + float4 _EmissiveScroll_Direction; + float _EmissiveScroll_Width; + float _EmissiveScroll_Velocity; + float _EmissiveScroll_Interval; + float _EmissionScrollingOffset; + float _EmissionReplace0; + float _EmissionScrollingVertexColor; + float _EmissionScrollingUseCurve; + float _EmissionColorThemeIndex; + float _EmissionAL0Enabled; + float2 _EmissionAL0StrengthMod; + float _EmissionAL0StrengthBand; + float2 _AudioLinkEmission0CenterOut; + float _AudioLinkEmission0CenterOutSize; + float _AudioLinkEmission0CenterOutBand; + float _AudioLinkEmission0CenterOutDuration; + float2 _EmissionAL0Multipliers; + float _EmissionAL0MultipliersBand; + #endif + #ifdef MOCHIE_PBR + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _MochieMetallicMaps; + float _PBRMapsStochastic; + #endif + float4 _MochieMetallicMaps_ST; + float2 _MochieMetallicMapsPan; + float _MochieMetallicMapsUV; + float _MochieMetallicMapsStochastic; + float _MochieMetallicMapInvert; + float _MochieRoughnessMapInvert; + float _MochieReflectionMaskInvert; + float _MochieSpecularMaskInvert; + float _MochieMetallicMapsMetallicChannel; + float _MochieMetallicMapsRoughnessChannel; + float _MochieMetallicMapsReflectionMaskChannel; + float _MochieMetallicMapsSpecularMaskChannel; + float _PBRNormalSelect; + float _MochieReflectionTintThemeIndex; + float _MochieSpecularTintThemeIndex; + float _MochieRoughnessMultiplier; + float _MochieMetallicMultiplier; + float _MochieReflectionStrength; + float _MochieSpecularStrength; + float4 _MochieSpecularTint; + float4 _MochieReflectionTint; + float _MochieLitFallback; + float _IgnoreCastedShadows; + float _PBRSplitMaskSample; + float _PBRSplitMaskStochastic; + float4 _PBRMaskScaleTiling; + float _MochieMetallicMasksUV; + float4 _MochieMetallicMasksPan; + float _Specular2ndLayer; + float _MochieSpecularStrength2; + float _MochieRoughnessMultiplier2; + float _RefSpecFresnelStrength; + float _SFExposureOcclusion; + TextureCube _MochieReflCube; + float4 _MochieReflCube_HDR; + float _MochieForceFallback; + float _MochieGSAAEnabled; + float _PoiGSAAVariance; + float _PoiGSAAThreshold; + float _BRDFTPSReflectionMaskStrength; + float _BRDFTPSSpecularMaskStrength; + float _BRDFTPSDepthEnabled; + float _MochieMetallicGlobalMask; + float _MochieMetallicGlobalMaskBlendType; + float _MochieSmoothnessGlobalMask; + float _MochieSmoothnessGlobalMaskBlendType; + float _MochieReflectionStrengthGlobalMask; + float _MochieReflectionStrengthGlobalMaskBlendType; + float _MochieSpecularStrengthGlobalMask; + float _MochieSpecularStrengthGlobalMaskBlendType; + #endif + float _PPLightingMultiplier; + float _PPLightingAddition; + float _PPEmissionMultiplier; + float _PPFinalColorMultiplier; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef VIGNETTE_MASKED + #ifdef _LIGHTINGMODE_REALISTIC + #if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) + #if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) + #define SUBTRACTIVE_LIGHTING 1 + #endif + #endif + float FadeShadows(float attenuation, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if HANDLE_SHADOWS_BLENDING_IN_GI || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + #if ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + attenuation = poiLight.attenuation; + #endif + float viewZ = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float shadowFadeDistance = UnityComputeShadowFadeDistance(poiMesh.worldPos, viewZ); + float shadowFade = UnityComputeShadowFade(shadowFadeDistance); + float bakedAttenuation = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + attenuation = UnityMixRealtimeAndBakedShadows(attenuation, bakedAttenuation, shadowFade); + #endif + return attenuation; + } + void ApplySubtractiveLighting(inout UnityIndirect indirectLight, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if SUBTRACTIVE_LIGHTING + poiLight.attenuation = FadeShadows(poiLight.attenuation, poiLight, poiMesh, poiCam); + float ndotl = saturate(dot(poiMesh.normals[0], _WorldSpaceLightPos0.xyz)); + float3 shadowedLightEstimate = ndotl * (1 - poiLight.attenuation) * _LightColor0.rgb; + float3 subtractedLight = indirectLight.diffuse - shadowedLightEstimate; + subtractedLight = max(subtractedLight, unity_ShadowColor.rgb); + subtractedLight = lerp(subtractedLight, indirectLight.diffuse, _LightShadowData.x); + indirectLight.diffuse = min(subtractedLight, indirectLight.diffuse); + #endif + } + UnityIndirect CreateIndirectLight(in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight) + { + UnityIndirect indirectLight; + indirectLight.diffuse = 0; + indirectLight.specular = 0; + #if defined(LIGHTMAP_ON) + indirectLight.diffuse = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, poiMesh.lightmapUV.xy)); + #if defined(DIRLIGHTMAP_COMBINED) + float4 lightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, poiMesh.lightmapUV.xy); + indirectLight.diffuse = DecodeDirectionalLightmap(indirectLight.diffuse, lightmapDirection, poiMesh.normals[1]); + #endif + ApplySubtractiveLighting(indirectLight, poiLight, poiMesh, poiCam); + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float3 dynamicLightDiffuse = DecodeRealtimeLightmap( + UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, poiMesh.lightmapUV.zw) + ); + #if defined(DIRLIGHTMAP_COMBINED) + float4 dynamicLightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_DynamicDirectionality, unity_DynamicLightmap, poiMesh.lightmapUV.zw); + indirectLight.diffuse += DecodeDirectionalLightmap(dynamicLightDiffuse, dynamicLightmapDirection, poiMesh.normals[1]); + #else + indirectLight.diffuse += dynamicLightDiffuse; + #endif + #endif + #if !defined(LIGHTMAP_ON) && !defined(DYNAMICLIGHTMAP_ON) + #if UNITY_LIGHT_PROBE_PROXY_VOLUME + if (unity_ProbeVolumeParams.x == 1) + { + indirectLight.diffuse = SHEvalLinearL0L1_SampleProbeVolume( + float4(poiMesh.normals[1], 1), poiMesh.worldPos + ); + indirectLight.diffuse = max(0, indirectLight.diffuse); + #if defined(UNITY_COLORSPACE_GAMMA) + indirectLight.diffuse = LinearToGammaSpace(indirectLight.diffuse); + #endif + } + else + { + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + } + #else + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + #endif + #endif + indirectLight.diffuse *= poiLight.occlusion; + return indirectLight; + } + #endif + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_REALISTIC + UnityLight light; + light.dir = poiLight.direction; + light.color = max(0, _LightColor0.rgb) * saturate(shadowAttenuation * attenuation * poiLight.detailShadow); + light.ndotl = poiLight.nDotLSaturated; + UnityIndirect indirectLight = (UnityIndirect)0; + #ifdef UNITY_PASS_FORWARDBASE + indirectLight = CreateIndirectLight(poiMesh, poiCam, poiLight); + #endif + #ifdef UNITY_PASS_FORWARDBASE + light.color = max(light.color * 1.0, 0); + light.color = max(light.color + 0.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse * 1.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse + 0.0, 0); + #endif + poiLight.rampedLightMap = poiLight.nDotLSaturated; + poiLight.finalLighting = max(POI_BRDF_PBS(1, 0, 0, 0, poiMesh.normals[1], poiCam.viewDir, light, indirectLight).xyz, _LightingMinLightBrightness); + #ifdef UNITY_PASS_FORWARDBASE + if (_UdonLightVolumeEnabled && 1.0) + { + float3 L0 = 0; + float3 L1r = 0; + float3 L1g = 0; + float3 L1b = 0; + #ifdef LIGHTMAP_ON + LightVolumeAdditiveSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + poiLight.finalLighting += clamp(LightVolumeEvaluate(poiMesh.normals[1], L0, L1r, L1g, L1b), _LightingMinLightBrightness, _LightingCap); + #endif + } + #endif + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + float calculateGlowInTheDark(in float minLight, in float maxLight, in float minEmissionMultiplier, in float maxEmissionMultiplier, in float enabled, in float worldOrMesh, in PoiLight poiLight) + { + float glowInTheDarkMultiplier = 1; + if (enabled) + { + float3 lightValue = worldOrMesh ? calculateluminance(poiLight.finalLighting.rgb) : calculateluminance(poiLight.directColor.rgb); + float gitdeAlpha = saturate(inverseLerp(minLight, maxLight, lightValue)); + glowInTheDarkMultiplier = lerp(minEmissionMultiplier, maxEmissionMultiplier, gitdeAlpha); + } + return glowInTheDarkMultiplier; + } + float calculateScrollingEmission(in float3 direction, in float velocity, in float interval, in float scrollWidth, float offset, float3 position) + { + scrollWidth = max(scrollWidth, 0); + float phase = 0; + phase = dot(position, direction); + phase -= (_Time.y + offset) * velocity; + phase /= interval; + phase -= floor(phase); + phase = saturate(phase); + return (pow(phase, scrollWidth) + pow(1 - phase, scrollWidth * 4)) * 0.5; + } + float calculateBlinkingEmission(in float blinkMin, in float blinkMax, in float blinkVelocity, float offset) + { + float amplitude = (blinkMax - blinkMin) * 0.5f; + float base = blinkMin + amplitude; + return sin((_Time.y + offset) * blinkVelocity) * amplitude + base; + } + void applyALEmmissionStrength(in PoiMods poiMods, inout float emissionStrength, in float2 emissionStrengthMod, in float emissionStrengthBand, in float2 _EmissionALMultipliers, in float _EmissionALMultipliersBand, in float enabled) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + emissionStrength += lerp(emissionStrengthMod.x, emissionStrengthMod.y, poiMods.audioLink[emissionStrengthBand]); + emissionStrength *= lerp(_EmissionALMultipliers.x, _EmissionALMultipliers.y, poiMods.audioLink[_EmissionALMultipliersBand]); + } + #endif + } + void applyALCenterOutEmission(in PoiMods poiMods, in float nDotV, inout float emissionStrength, in float size, in float band, in float2 emissionToAdd, in float enabled, in float duration) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + float intensity; + [flatten] + if (duration >= 0) + { + intensity = getBandAtTime(band, saturate(remap(nDotV, 1, 0, 0, duration)), size); + } + else + { + duration *= -1; + intensity = getBandAtTime(band, saturate(remap(pow(nDotV, 2), 0, 1 + duration, 0, duration)), size); + } + emissionStrength += lerp(emissionToAdd[0], emissionToAdd[1], intensity); + } + #endif + } + #ifdef _EMISSION + float3 applyEmission(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiLight poiLight, in PoiCam poiCam, in PoiMods poiMods) + { + float3 emission0 = 0; + float emissionAlpha = 1; + float emissionStrength0 = 0.05; + float3 emissionColor0 = 0; + applyALEmmissionStrength(poiMods, emissionStrength0, float4(0,0,0,0), 0.0, float4(1,1,0,0), 0.0, 0.0); + applyALCenterOutEmission(poiMods, poiLight.nDotV, emissionStrength0, 0.0, 0.0, float4(0,0,0,0), 0.0, 1.0); + float glowInTheDarkMultiplier0 = calculateGlowInTheDark(0.0, 1.0, 1.0, 0.0, 0.0, 0.0, poiLight); + #ifdef POI_GRABPASS + float mixBaseColor = 0; + #else + float mixBaseColor = 0.0; + #endif + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + float4 emissionTex = 0; + if (!0.0) + { + emissionTex = POI2D_SAMPLER_PAN(_EmissionMap, _MainTex, poiUV(poiMesh.uv[0.0], float4(10,10,0,0)), float4(4,4,0,0)); + } + else + { + emissionTex = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMap, _MainTex, ((.5 + poiLight.nDotV * .5) * float4(10,10,0,0).xy) + _Time.x * 5.0); + } + emissionColor0 = emissionTex.rgb * lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(0.7028302,0.9937976,1,1).rgb, 0.0); + emissionAlpha = emissionTex.a; + #else + emissionColor0 = lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(0.7028302,0.9937976,1,1).rgb, 0.0); + #endif + float3 inverseLighting = saturate((1.0 - poiLight.directColor) * sqrt(poiLight.directColor)); + emissionColor0 = lerp(emissionColor0.rgb, emissionColor0.rgb * inverseLighting, 0.0); + emissionStrength0 *= emissionAlpha; + if (0.0) + { + float3 pos = poiMesh.localPos; + if (0.0) + { + pos = poiMesh.vertexColor.rgb; + } + if (0.0) + { + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + emissionStrength0 *= UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionScrollingCurve, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + (dot(pos, float4(0,-10,0,0).xyz) * 20.0) + _Time.x * 10.0).r; + #endif + } + else + { + emissionStrength0 *= calculateScrollingEmission(float4(0,-10,0,0).xyz, 10.0, 20.0, 10.0, 0.0, pos); + } + } + if (0.0) + { + emissionStrength0 *= calculateBlinkingEmission(0.0, 1.0, 4.0, 0.0); + } + if(0.0) + { + emissionColor0 = hueShift(emissionColor0, frac(0.0 + 0.0 * _Time.x), 0.0, 1.0); + emissionColor0 = lerp(emissionColor0, dot(emissionColor0, float3(0.3, 0.59, 0.11)), - (0.0)); + } + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + float emissionMask0 = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + _Time.x * float4(0,0,0,0))[0.0]; + #else + float emissionMask0 = 1; + #endif + if (0.0) + { + emissionMask0 = 1 - emissionMask0; + } + if (0.0 > 0) + { + emissionMask0 = maskBlend(emissionMask0, poiMods.globalMask[0.0 - 1], 2.0); + } + emissionStrength0 *= glowInTheDarkMultiplier0 * emissionMask0; + emission0 = max(emissionStrength0 * emissionColor0, 0); + #ifdef POI_DISSOLVE + if (_DissolveEmissionSide != 2) + { + emission0 *= lerp(1 - dissolveAlpha, dissolveAlpha, _DissolveEmissionSide); + } + #endif + poiFragData.emission += emission0; + return emission0 * 0.0; + } + #endif + #if defined(MOCHIE_PBR) || defined(POI_CLEARCOAT) + float GSAA_Filament(float3 worldNormal, float perceptualRoughness, float gsaaVariance, float gsaaThreshold) + { + float3 du = ddx(worldNormal); + float3 dv = ddy(worldNormal); + float variance = gsaaVariance * (dot(du, du) + dot(dv, dv)); + float roughness = perceptualRoughness * perceptualRoughness; + float kernelRoughness = min(2.0 * variance, gsaaThreshold); + float squareRoughness = saturate(roughness * roughness + kernelRoughness); + return sqrt(sqrt(squareRoughness)); + } + float3 GetWorldReflections(float3 reflDir, float3 worldPos, float roughness) + { + float3 baseReflDir = reflDir; + reflDir = BoxProjection(reflDir, worldPos, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax); + float4 envSample0 = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, reflDir, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p0 = DecodeHDR(envSample0, unity_SpecCube0_HDR); + float interpolator = unity_SpecCube0_BoxMin.w; + + if (interpolator < 0.99999) + { + float3 refDirBlend = BoxProjection(baseReflDir, worldPos, unity_SpecCube1_ProbePosition, unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax); + float4 envSample1 = UNITY_SAMPLE_TEXCUBE_SAMPLER_LOD(unity_SpecCube1, unity_SpecCube0, refDirBlend, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p1 = DecodeHDR(envSample1, unity_SpecCube1_HDR); + p0 = lerp(p1, p0, interpolator); + } + return p0; + } + float3 GetReflections(in PoiCam poiCam, in PoiLight pl, in PoiMesh poiMesh, float roughness, float ForceFallback, float LightFallback, TextureCube reflectionCube, float4 hdrData, float3 reflectionDir) + { + float3 reflections = 0; + float3 lighting = pl.finalLighting; + if (ForceFallback == 0) + { + + if (SceneHasReflections()) + { + #ifdef UNITY_PASS_FORWARDBASE + reflections = GetWorldReflections(reflectionDir, poiMesh.worldPos.xyz, roughness); + #endif + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + reflections *= pl.occlusion; + return reflections; + } + float GetGGXTerm(float nDotL, float nDotV, float nDotH, float roughness) + { + float visibilityTerm = 0; + if (nDotL > 0) + { + float lambdaV = nDotL * (nDotV * (1 - roughness) + roughness); + float lambdaL = nDotV * (nDotL * (1 - roughness) + roughness); + visibilityTerm = 0.5f / (lambdaV + lambdaL + 1e-5f); + float a = nDotH * roughness; + float k = roughness / (1.0 - nDotH * nDotH + a * a+ 1e-5f); + float dotTerm = k * k * UNITY_INV_PI; + visibilityTerm *= dotTerm; + } + return visibilityTerm; + } + void GetSpecFresTerm(float nDotL, float nDotV, float nDotH, float lDotH, inout float3 specularTerm, inout float3 fresnelTerm, float3 specCol, float roughness) + { + specularTerm = GetGGXTerm(nDotL, nDotV, nDotH, roughness); + fresnelTerm = FresnelTerm(specCol, lDotH); + specularTerm = max(0, specularTerm * max(0.00001, nDotL)); + } + float GetRoughness(float smoothness) + { + float rough = 1 - smoothness; + rough *= 1.7 - 0.7 * rough; + return rough; + } + float SFVisibility(float brdfRoughness, float3 directColor, float NDotV, float ExposureOcclusion) + { + float Visibility = saturate(length(directColor + EPSILON) * (1.0/(ExposureOcclusion))); //Using direct color because I think it should be generally more forgiving + return saturate(pow(NDotV + Visibility, exp2(-16.0 * brdfRoughness - 1.0)) - 1.0 + Visibility); + } + #endif + #ifdef MOCHIE_PBR + void MetallicAndSpecularFragDataInit(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + float smoothness = 1.0; + float smoothness2 = 1.0; + float metallic = 1.0; + float specularMask = 1; + float reflectionMask = 1; + smoothness *= poiFragData.smoothness; + smoothness2 *= poiFragData.smoothness2; + metallic *= poiFragData.metallic; + specularMask *= poiFragData.specularMask; + reflectionMask *= poiFragData.reflectionMask; + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + + if (0.0) + { + float4 PBRSplitMask = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy, 0.0); + assignValueToVectorFromIndex(PBRMaps, 2.0, PBRSplitMask[2.0]); + assignValueToVectorFromIndex(PBRMaps, 3.0, PBRSplitMask[3.0]); + } + if (0.0 < 4) + { + metallic *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + smoothness2 *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + reflectionMask *= 1.0; + specularMask *= 1.0; + if (0.0) + { + metallic = 1 - metallic; + } + if (0.0) + { + smoothness = 1 - smoothness; + smoothness2 = 1 - smoothness2; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + poiFragData.smoothness *= smoothness; + poiFragData.smoothness2 *= smoothness2; + poiFragData.metallic *= metallic; + poiFragData.specularMask *= specularMask; + poiFragData.reflectionMask *= reflectionMask; + } + void MochieBRDF(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, inout PoiMods poiMods) + { + float smoothness = poiFragData.smoothness; + float smoothness2 = poiFragData.smoothness2; + float metallic = poiFragData.metallic; + float specularMask = poiFragData.specularMask; + float reflectionMask = poiFragData.reflectionMask; + if (0.0 > 0) + { + metallic = customBlend(metallic, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + smoothness2 = customBlend(smoothness2, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef TPS_Penetrator + if (0.0) + { + reflectionMask = lerp(0, reflectionMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + specularMask = lerp(0, specularMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float roughness2 = GetRoughness(smoothness2); + float3 specCol = lerp(unity_ColorSpaceDielectricSpec.rgb, poiFragData.baseColor, metallic); + float omr = unity_ColorSpaceDielectricSpec.a - metallic * unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + float percepRough2 = 1 - smoothness2; + + if (1.0) + { + float3 normals = lerp(poiMesh.normals[0], poiMesh.normals[1], 1.0); + percepRough = GSAA_Filament(normals, percepRough, 0.15, 0.1); + if (0.0 == 1 && 1.0 > 0) + { + percepRough2 = GSAA_Filament(normals, percepRough2, 0.15, 0.1); + } + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float brdfRoughness2 = percepRough2 * percepRough2; + brdfRoughness2 = max(brdfRoughness2, 0.002); + float3 diffuse = poiFragData.baseColor; + float3 specular = 0; + float3 specular2 = 0; + float3 vSpecular = 0; + float3 vSpecular2 = 0; + float3 reflections = 0; + float3 environment = 0; + #if defined(POINT) || defined(SPOT) + float attenuation = lerp(poiLight.additiveShadow, 1, 0.0); + #else + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + #endif + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float pbrNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 1.0); + float pbrNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 1.0); + float pbrNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 1.0); + float3 pbrReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 1.0); + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + if (0.0 == 1) + { + float3 fresnelTerm = 1; + float3 specularTerm = 1; + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness2); + specular2 = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation * 1.0; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness2); + vSpecular2 += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * 1.0; + } + #endif + } + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _MochieReflCube, _MochieReflCube_HDR, pbrReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, pbrNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, pbrNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + reflections *= reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = max(specular + vSpecular, specular2 + vSpecular2); + environment += reflections; + diffuse *= poiLight.finalLighting; + poiFragData.finalColor = diffuse; + poiLight.finalLightAdd += environment; + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0004882813,0.0004882813,2048,2048), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #if defined(MOCHIE_PBR) + MetallicAndSpecularFragDataInit(poiFragData, poiMesh, poiMods); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) + float3 emissionBaseReplace = 0;// + #endif + #ifdef _EMISSION + emissionBaseReplace += applyEmission(poiFragData, poiMesh, poiLight, poiCam, poiMods); + #endif + #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) + poiFragData.baseColor.rgb = lerp(poiFragData.baseColor.rgb, saturate(emissionBaseReplace), poiMax(emissionBaseReplace)); + #endif + + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #ifdef MOCHIE_PBR + MochieBRDF(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + #ifdef UNITY_PASS_FORWARDBASE + poiFragData.emission = max(poiFragData.emission * 1.0, 0); + poiFragData.finalColor = max(poiFragData.finalColor * 1.0, 0); + #endif + if (0.0 == POI_MODE_OPAQUE) + { + } + clip(poiFragData.alpha - 0.5); + if (0.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + poiFragData.finalColor += poiFragData.emission * poiMods.globalEmission; + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "Add" + Tags { "LightMode" = "ForwardAdd" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite Off + Cull Back + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_AddBlendOp], [_AddBlendOpAlpha] + Blend [_AddSrcBlend] [_AddDstBlend], [_AddSrcBlendAlpha] [_AddDstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define PROP_LIGHTINGAOMAPS + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_LIGHTINGAOMAPS + #define PROP_MOCHIEMETALLICMAPS + #define PROP_EMISSIONMASK + #define PROP_EMISSIONMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdadd_fullshadows + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_ADD + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + #ifdef MOCHIE_PBR + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _MochieMetallicMaps; + float _PBRMapsStochastic; + #endif + float4 _MochieMetallicMaps_ST; + float2 _MochieMetallicMapsPan; + float _MochieMetallicMapsUV; + float _MochieMetallicMapsStochastic; + float _MochieMetallicMapInvert; + float _MochieRoughnessMapInvert; + float _MochieReflectionMaskInvert; + float _MochieSpecularMaskInvert; + float _MochieMetallicMapsMetallicChannel; + float _MochieMetallicMapsRoughnessChannel; + float _MochieMetallicMapsReflectionMaskChannel; + float _MochieMetallicMapsSpecularMaskChannel; + float _PBRNormalSelect; + float _MochieReflectionTintThemeIndex; + float _MochieSpecularTintThemeIndex; + float _MochieRoughnessMultiplier; + float _MochieMetallicMultiplier; + float _MochieReflectionStrength; + float _MochieSpecularStrength; + float4 _MochieSpecularTint; + float4 _MochieReflectionTint; + float _MochieLitFallback; + float _IgnoreCastedShadows; + float _PBRSplitMaskSample; + float _PBRSplitMaskStochastic; + float4 _PBRMaskScaleTiling; + float _MochieMetallicMasksUV; + float4 _MochieMetallicMasksPan; + float _Specular2ndLayer; + float _MochieSpecularStrength2; + float _MochieRoughnessMultiplier2; + float _RefSpecFresnelStrength; + float _SFExposureOcclusion; + TextureCube _MochieReflCube; + float4 _MochieReflCube_HDR; + float _MochieForceFallback; + float _MochieGSAAEnabled; + float _PoiGSAAVariance; + float _PoiGSAAThreshold; + float _BRDFTPSReflectionMaskStrength; + float _BRDFTPSSpecularMaskStrength; + float _BRDFTPSDepthEnabled; + float _MochieMetallicGlobalMask; + float _MochieMetallicGlobalMaskBlendType; + float _MochieSmoothnessGlobalMask; + float _MochieSmoothnessGlobalMaskBlendType; + float _MochieReflectionStrengthGlobalMask; + float _MochieReflectionStrengthGlobalMaskBlendType; + float _MochieSpecularStrengthGlobalMask; + float _MochieSpecularStrengthGlobalMaskBlendType; + #endif + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef VIGNETTE_MASKED + #ifdef _LIGHTINGMODE_REALISTIC + #if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) + #if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) + #define SUBTRACTIVE_LIGHTING 1 + #endif + #endif + float FadeShadows(float attenuation, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if HANDLE_SHADOWS_BLENDING_IN_GI || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + #if ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + attenuation = poiLight.attenuation; + #endif + float viewZ = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float shadowFadeDistance = UnityComputeShadowFadeDistance(poiMesh.worldPos, viewZ); + float shadowFade = UnityComputeShadowFade(shadowFadeDistance); + float bakedAttenuation = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + attenuation = UnityMixRealtimeAndBakedShadows(attenuation, bakedAttenuation, shadowFade); + #endif + return attenuation; + } + void ApplySubtractiveLighting(inout UnityIndirect indirectLight, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if SUBTRACTIVE_LIGHTING + poiLight.attenuation = FadeShadows(poiLight.attenuation, poiLight, poiMesh, poiCam); + float ndotl = saturate(dot(poiMesh.normals[0], _WorldSpaceLightPos0.xyz)); + float3 shadowedLightEstimate = ndotl * (1 - poiLight.attenuation) * _LightColor0.rgb; + float3 subtractedLight = indirectLight.diffuse - shadowedLightEstimate; + subtractedLight = max(subtractedLight, unity_ShadowColor.rgb); + subtractedLight = lerp(subtractedLight, indirectLight.diffuse, _LightShadowData.x); + indirectLight.diffuse = min(subtractedLight, indirectLight.diffuse); + #endif + } + UnityIndirect CreateIndirectLight(in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight) + { + UnityIndirect indirectLight; + indirectLight.diffuse = 0; + indirectLight.specular = 0; + #if defined(LIGHTMAP_ON) + indirectLight.diffuse = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, poiMesh.lightmapUV.xy)); + #if defined(DIRLIGHTMAP_COMBINED) + float4 lightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, poiMesh.lightmapUV.xy); + indirectLight.diffuse = DecodeDirectionalLightmap(indirectLight.diffuse, lightmapDirection, poiMesh.normals[1]); + #endif + ApplySubtractiveLighting(indirectLight, poiLight, poiMesh, poiCam); + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float3 dynamicLightDiffuse = DecodeRealtimeLightmap( + UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, poiMesh.lightmapUV.zw) + ); + #if defined(DIRLIGHTMAP_COMBINED) + float4 dynamicLightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_DynamicDirectionality, unity_DynamicLightmap, poiMesh.lightmapUV.zw); + indirectLight.diffuse += DecodeDirectionalLightmap(dynamicLightDiffuse, dynamicLightmapDirection, poiMesh.normals[1]); + #else + indirectLight.diffuse += dynamicLightDiffuse; + #endif + #endif + #if !defined(LIGHTMAP_ON) && !defined(DYNAMICLIGHTMAP_ON) + #if UNITY_LIGHT_PROBE_PROXY_VOLUME + if (unity_ProbeVolumeParams.x == 1) + { + indirectLight.diffuse = SHEvalLinearL0L1_SampleProbeVolume( + float4(poiMesh.normals[1], 1), poiMesh.worldPos + ); + indirectLight.diffuse = max(0, indirectLight.diffuse); + #if defined(UNITY_COLORSPACE_GAMMA) + indirectLight.diffuse = LinearToGammaSpace(indirectLight.diffuse); + #endif + } + else + { + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + } + #else + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + #endif + #endif + indirectLight.diffuse *= poiLight.occlusion; + return indirectLight; + } + #endif + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_REALISTIC + UnityLight light; + light.dir = poiLight.direction; + light.color = max(0, _LightColor0.rgb) * saturate(shadowAttenuation * attenuation * poiLight.detailShadow); + light.ndotl = poiLight.nDotLSaturated; + UnityIndirect indirectLight = (UnityIndirect)0; + #ifdef UNITY_PASS_FORWARDBASE + indirectLight = CreateIndirectLight(poiMesh, poiCam, poiLight); + #endif + #ifdef UNITY_PASS_FORWARDBASE + light.color = max(light.color * 1.0, 0); + light.color = max(light.color + 0.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse * 1.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse + 0.0, 0); + #endif + poiLight.rampedLightMap = poiLight.nDotLSaturated; + poiLight.finalLighting = max(POI_BRDF_PBS(1, 0, 0, 0, poiMesh.normals[1], poiCam.viewDir, light, indirectLight).xyz, _LightingMinLightBrightness); + #ifdef UNITY_PASS_FORWARDBASE + if (_UdonLightVolumeEnabled && 1.0) + { + float3 L0 = 0; + float3 L1r = 0; + float3 L1g = 0; + float3 L1b = 0; + #ifdef LIGHTMAP_ON + LightVolumeAdditiveSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + poiLight.finalLighting += clamp(LightVolumeEvaluate(poiMesh.normals[1], L0, L1r, L1g, L1b), _LightingMinLightBrightness, _LightingCap); + #endif + } + #endif + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + #if defined(MOCHIE_PBR) || defined(POI_CLEARCOAT) + float GSAA_Filament(float3 worldNormal, float perceptualRoughness, float gsaaVariance, float gsaaThreshold) + { + float3 du = ddx(worldNormal); + float3 dv = ddy(worldNormal); + float variance = gsaaVariance * (dot(du, du) + dot(dv, dv)); + float roughness = perceptualRoughness * perceptualRoughness; + float kernelRoughness = min(2.0 * variance, gsaaThreshold); + float squareRoughness = saturate(roughness * roughness + kernelRoughness); + return sqrt(sqrt(squareRoughness)); + } + float3 GetWorldReflections(float3 reflDir, float3 worldPos, float roughness) + { + float3 baseReflDir = reflDir; + reflDir = BoxProjection(reflDir, worldPos, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax); + float4 envSample0 = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, reflDir, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p0 = DecodeHDR(envSample0, unity_SpecCube0_HDR); + float interpolator = unity_SpecCube0_BoxMin.w; + + if (interpolator < 0.99999) + { + float3 refDirBlend = BoxProjection(baseReflDir, worldPos, unity_SpecCube1_ProbePosition, unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax); + float4 envSample1 = UNITY_SAMPLE_TEXCUBE_SAMPLER_LOD(unity_SpecCube1, unity_SpecCube0, refDirBlend, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p1 = DecodeHDR(envSample1, unity_SpecCube1_HDR); + p0 = lerp(p1, p0, interpolator); + } + return p0; + } + float3 GetReflections(in PoiCam poiCam, in PoiLight pl, in PoiMesh poiMesh, float roughness, float ForceFallback, float LightFallback, TextureCube reflectionCube, float4 hdrData, float3 reflectionDir) + { + float3 reflections = 0; + float3 lighting = pl.finalLighting; + if (ForceFallback == 0) + { + + if (SceneHasReflections()) + { + #ifdef UNITY_PASS_FORWARDBASE + reflections = GetWorldReflections(reflectionDir, poiMesh.worldPos.xyz, roughness); + #endif + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + reflections *= pl.occlusion; + return reflections; + } + float GetGGXTerm(float nDotL, float nDotV, float nDotH, float roughness) + { + float visibilityTerm = 0; + if (nDotL > 0) + { + float lambdaV = nDotL * (nDotV * (1 - roughness) + roughness); + float lambdaL = nDotV * (nDotL * (1 - roughness) + roughness); + visibilityTerm = 0.5f / (lambdaV + lambdaL + 1e-5f); + float a = nDotH * roughness; + float k = roughness / (1.0 - nDotH * nDotH + a * a+ 1e-5f); + float dotTerm = k * k * UNITY_INV_PI; + visibilityTerm *= dotTerm; + } + return visibilityTerm; + } + void GetSpecFresTerm(float nDotL, float nDotV, float nDotH, float lDotH, inout float3 specularTerm, inout float3 fresnelTerm, float3 specCol, float roughness) + { + specularTerm = GetGGXTerm(nDotL, nDotV, nDotH, roughness); + fresnelTerm = FresnelTerm(specCol, lDotH); + specularTerm = max(0, specularTerm * max(0.00001, nDotL)); + } + float GetRoughness(float smoothness) + { + float rough = 1 - smoothness; + rough *= 1.7 - 0.7 * rough; + return rough; + } + float SFVisibility(float brdfRoughness, float3 directColor, float NDotV, float ExposureOcclusion) + { + float Visibility = saturate(length(directColor + EPSILON) * (1.0/(ExposureOcclusion))); //Using direct color because I think it should be generally more forgiving + return saturate(pow(NDotV + Visibility, exp2(-16.0 * brdfRoughness - 1.0)) - 1.0 + Visibility); + } + #endif + #ifdef MOCHIE_PBR + void MetallicAndSpecularFragDataInit(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + float smoothness = 1.0; + float smoothness2 = 1.0; + float metallic = 1.0; + float specularMask = 1; + float reflectionMask = 1; + smoothness *= poiFragData.smoothness; + smoothness2 *= poiFragData.smoothness2; + metallic *= poiFragData.metallic; + specularMask *= poiFragData.specularMask; + reflectionMask *= poiFragData.reflectionMask; + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + + if (0.0) + { + float4 PBRSplitMask = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy, 0.0); + assignValueToVectorFromIndex(PBRMaps, 2.0, PBRSplitMask[2.0]); + assignValueToVectorFromIndex(PBRMaps, 3.0, PBRSplitMask[3.0]); + } + if (0.0 < 4) + { + metallic *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + smoothness2 *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + reflectionMask *= 1.0; + specularMask *= 1.0; + if (0.0) + { + metallic = 1 - metallic; + } + if (0.0) + { + smoothness = 1 - smoothness; + smoothness2 = 1 - smoothness2; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + poiFragData.smoothness *= smoothness; + poiFragData.smoothness2 *= smoothness2; + poiFragData.metallic *= metallic; + poiFragData.specularMask *= specularMask; + poiFragData.reflectionMask *= reflectionMask; + } + void MochieBRDF(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, inout PoiMods poiMods) + { + float smoothness = poiFragData.smoothness; + float smoothness2 = poiFragData.smoothness2; + float metallic = poiFragData.metallic; + float specularMask = poiFragData.specularMask; + float reflectionMask = poiFragData.reflectionMask; + if (0.0 > 0) + { + metallic = customBlend(metallic, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + smoothness2 = customBlend(smoothness2, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef TPS_Penetrator + if (0.0) + { + reflectionMask = lerp(0, reflectionMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + specularMask = lerp(0, specularMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float roughness2 = GetRoughness(smoothness2); + float3 specCol = lerp(unity_ColorSpaceDielectricSpec.rgb, poiFragData.baseColor, metallic); + float omr = unity_ColorSpaceDielectricSpec.a - metallic * unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + float percepRough2 = 1 - smoothness2; + + if (1.0) + { + float3 normals = lerp(poiMesh.normals[0], poiMesh.normals[1], 1.0); + percepRough = GSAA_Filament(normals, percepRough, 0.15, 0.1); + if (0.0 == 1 && 1.0 > 0) + { + percepRough2 = GSAA_Filament(normals, percepRough2, 0.15, 0.1); + } + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float brdfRoughness2 = percepRough2 * percepRough2; + brdfRoughness2 = max(brdfRoughness2, 0.002); + float3 diffuse = poiFragData.baseColor; + float3 specular = 0; + float3 specular2 = 0; + float3 vSpecular = 0; + float3 vSpecular2 = 0; + float3 reflections = 0; + float3 environment = 0; + #if defined(POINT) || defined(SPOT) + float attenuation = lerp(poiLight.additiveShadow, 1, 0.0); + #else + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + #endif + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float pbrNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 1.0); + float pbrNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 1.0); + float pbrNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 1.0); + float3 pbrReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 1.0); + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + if (0.0 == 1) + { + float3 fresnelTerm = 1; + float3 specularTerm = 1; + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness2); + specular2 = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation * 1.0; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness2); + vSpecular2 += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * 1.0; + } + #endif + } + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _MochieReflCube, _MochieReflCube_HDR, pbrReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, pbrNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, pbrNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + reflections *= reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = max(specular + vSpecular, specular2 + vSpecular2); + environment += reflections; + diffuse *= poiLight.finalLighting; + poiFragData.finalColor = diffuse; + poiLight.finalLightAdd += environment; + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0004882813,0.0004882813,2048,2048), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #if defined(MOCHIE_PBR) + MetallicAndSpecularFragDataInit(poiFragData, poiMesh, poiMods); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #ifdef MOCHIE_PBR + MochieBRDF(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + if (0.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + if (4.0 == 4) + { + poiFragData.alpha = saturate(poiFragData.alpha * 10.0); + } + if (0.0 != POI_MODE_TRANSPARENT) + { + poiFragData.finalColor *= poiFragData.alpha; + } + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Back + AlphaToMask Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define PROP_LIGHTINGAOMAPS + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_LIGHTINGAOMAPS + #define PROP_MOCHIEMETALLICMAPS + #define PROP_EMISSIONMASK + #define PROP_EMISSIONMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_instancing + #pragma multi_compile_shadowcaster + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_SHADOW + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0004882813,0.0004882813,2048,2048), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + poiFragData.finalColor = poiFragData.baseColor; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "META" + Tags { "LightMode" = "Meta" } + ZWrite [_ZWrite] + Cull Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define PROP_LIGHTINGAOMAPS + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_LIGHTINGAOMAPS + #define PROP_MOCHIEMETALLICMAPS + #define PROP_EMISSIONMASK + #define PROP_EMISSIONMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_instancing + #pragma multi_compile_fragment _ VERTEXLIGHT_ON + #define POI_PASS_META + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + #include "UnityMetaPass.cginc" + #ifndef VRC_LIGHT_VOLUMES_INCLUDED + #define VRC_LIGHT_VOLUMES_INCLUDED + #define VRCLV_VERSION 2 + #define VRCLV_MAX_VOLUMES_COUNT 32 + #define VRCLV_MAX_LIGHTS_COUNT 128 + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + cbuffer LightVolumeUniforms { + #endif + uniform float _UdonLightVolumeEnabled; + uniform float _UdonLightVolumeVersion; + uniform float _UdonLightVolumeCount; + uniform float _UdonLightVolumeAdditiveMaxOverdraw; + uniform float _UdonLightVolumeAdditiveCount; + uniform float _UdonLightVolumeProbesBlend; + uniform float _UdonLightVolumeSharpBounds; + uniform float4x4 _UdonLightVolumeInvWorldMatrix[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeRotation[VRCLV_MAX_VOLUMES_COUNT * 2]; // Legacy! Used in this version to have back compatibility with older worlds. Array commented above will be used in future releases! Legacy! + uniform float3 _UdonLightVolumeInvLocalEdgeSmooth[VRCLV_MAX_VOLUMES_COUNT]; + uniform float3 _UdonLightVolumeUvw[VRCLV_MAX_VOLUMES_COUNT * 6]; // Legacy! AABB Bounds of islands on the 3D Texture atlas. Array commented above will be used in future releases! Legacy! + uniform float4 _UdonLightVolumeOcclusionUvw[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeColor[VRCLV_MAX_VOLUMES_COUNT]; + uniform float _UdonPointLightVolumeCount; + uniform float _UdonPointLightVolumeCubeCount; + uniform float4 _UdonPointLightVolumePosition[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeColor[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeDirection[VRCLV_MAX_LIGHTS_COUNT]; + uniform float3 _UdonPointLightVolumeCustomID[VRCLV_MAX_LIGHTS_COUNT]; + uniform float _UdonLightBrightnessCutoff; + uniform float _UdonLightVolumeOcclusionCount; + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + } + #endif + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + uniform Texture3D _UdonLightVolume; + uniform SamplerState sampler_UdonLightVolume; + uniform Texture2DArray _UdonPointLightVolumeTexture; + #define LV_SAMPLE(tex, uvw) tex.SampleLevel(sampler_UdonLightVolume, uvw, 0) + #else + #define LV_SAMPLE(tex, uvw) float4(0,0,0,0) + #endif + #define LV_PI 3.141592653589793f + #define LV_PI2 6.283185307179586f + float LV_Smoothstep01(float x) { + return x * x * (3 - 2 * x); + } + float3 LV_MultiplyVectorByQuaternion(float3 v, float4 q) { + float3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); + } + float3 LV_MultiplyVectorByMatrix2x3(float3 v, float3 r0, float3 r1) { + float3 r2 = cross(r0, r1); + return float3(dot(v, r0), dot(v, r1), dot(v, r2)); + } + float LV_FastAcos(float x) { + float absX = abs(x); + float res = -0.156583f * absX + LV_PI * 0.5f; + res *= sqrt(1.0f - absX); + return (x >= 0) ? res : (LV_PI - res); + } + float LV_DistributionGGX(float NoH, float roughness) { + float f = (roughness - 1) * ((roughness + 1) * (NoH * NoH)) + 1; + return (roughness * roughness) / ((float) LV_PI * f * f); + } + bool LV_PointLocalAABB(float3 localUVW) { + return all(abs(localUVW) <= 0.5); + } + float3 LV_LocalFromVolume(uint volumeID, float3 worldPos) { + return mul(_UdonLightVolumeInvWorldMatrix[volumeID], float4(worldPos, 1.0)).xyz; + } + float LV_EvaluateSH(float L0, float3 L1, float3 n) { + return L0 + dot(L1, n); + } + float4 LV_SampleCubemapArray(uint id, float3 dir) { + float3 absDir = abs(dir); + float2 uv; + uint face; + if (absDir.x >= absDir.y && absDir.x >= absDir.z) { + face = dir.x > 0 ? 0 : 1; + uv = float2((dir.x > 0 ? -dir.z : dir.z), -dir.y) * rcp(absDir.x); + } else if (absDir.y >= absDir.z) { + face = dir.y > 0 ? 2 : 3; + uv = float2(dir.x, (dir.y > 0 ? dir.z : -dir.z)) * rcp(absDir.y); + } else { + face = dir.z > 0 ? 4 : 5; + uv = float2((dir.z > 0 ? dir.x : -dir.x), -dir.y) * rcp(absDir.z); + } + float3 uvid = float3(uv * 0.5 + 0.5, id * 6 + face); + return LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + } + float4 LV_ProjectQuadLightIrradianceSH(float3 shadingPosition, float3 lightVertices[4]) { + [unroll] for (uint edge0 = 0; edge0 < 4; edge0++) { + lightVertices[edge0] = normalize(lightVertices[edge0] - shadingPosition); + } + const float3 zhDir0 = float3(0.866025, -0.500001, -0.000004); + const float3 zhDir1 = float3(-0.759553, 0.438522, -0.480394); + const float3 zhDir2 = float3(-0.000002, 0.638694, 0.769461); + const float3 zhWeightL1y = float3(2.1995339f, 2.50785367f, 1.56572711f); + const float3 zhWeightL1z = float3(-1.82572523f, -2.08165037f, 0.00000000f); + const float3 zhWeightL1x = float3(2.42459869f, 1.44790525f, 0.90397552f); + float solidAngle = 0.0; + float3 surfaceIntegral = 0.0; + [loop] for (uint edge1 = 0; edge1 < 4; edge1++) { + uint next = (edge1 + 1) % 4; + uint prev = (edge1 + 4 - 1) % 4; + float3 prevVert = lightVertices[prev]; + float3 thisVert = lightVertices[edge1]; + float3 nextVert = lightVertices[next]; + float3 a = cross(thisVert, prevVert); + float3 b = cross(thisVert, nextVert); + float lenA = length(a); + float lenB = length(b); + solidAngle += LV_FastAcos(clamp(dot(a, b) / (lenA * lenB), -1, 1)); + float3 mu = b * rcp(lenB); + float cosGamma = dot(thisVert, nextVert); + float gamma = LV_FastAcos(clamp(cosGamma, -1, 1)); + surfaceIntegral.x += gamma * dot(zhDir0, mu); + surfaceIntegral.y += gamma * dot(zhDir1, mu); + surfaceIntegral.z += gamma * dot(zhDir2, mu); + } + solidAngle = solidAngle - LV_PI2; + surfaceIntegral *= 0.5; + const float normalizationL0 = 0.5f * sqrt(1.0f / LV_PI); + float l0 = normalizationL0 * solidAngle; + float l1y = dot(zhWeightL1y, surfaceIntegral); + float l1z = dot(zhWeightL1z, surfaceIntegral); + float l1x = dot(zhWeightL1x, surfaceIntegral); + const float cosineKernelL0 = LV_PI; // (1) + const float cosineKernelL1 = LV_PI2 / 3.0f; // (1) + const float oneOverPi = 1.0f / LV_PI; // (2) + const float normalizationL1 = 0.5f * sqrt(3.0f / LV_PI); // (3) + const float weightL0 = cosineKernelL0 * normalizationL0 * oneOverPi; // (1), (2), (3) + const float weightL1 = cosineKernelL1 * normalizationL1 * oneOverPi; // (1), (2), (3) + l0 *= weightL0; + l1y *= weightL1; + l1z *= weightL1; + l1x *= weightL1; + return float4(l1x, l1y, l1z, l0); + } + void LV_QuadLight(float3 worldPos, float3 centroidPos, float4 rotationQuat, float2 size, float3 color, float sqMaxDist, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 lightToWorldPos = worldPos - centroidPos; + float3 normal = LV_MultiplyVectorByQuaternion(float3(0, 0, 1), rotationQuat); + if (dot(normal, lightToWorldPos) < 0.0) return; + float sqCutoffDist = sqMaxDist - dot(lightToWorldPos, lightToWorldPos); + color.rgb *= saturate(sqCutoffDist / sqMaxDist) * LV_PI * occlusion; + float2 halfSize = size * 0.5f; + float3 xAxis = LV_MultiplyVectorByQuaternion(float3(1, 0, 0), rotationQuat); + float3 yAxis = cross(normal, xAxis); + float3 verts[4]; + verts[0] = centroidPos + (-halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[1] = centroidPos + ( halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[2] = centroidPos + ( halfSize.x * xAxis) + (-halfSize.y * yAxis); + verts[3] = centroidPos + (-halfSize.x * xAxis) + (-halfSize.y * yAxis); + float4 areaLightSH = LV_ProjectQuadLightIrradianceSH(worldPos, verts); + float lenL1 = length(areaLightSH.xyz); + if (lenL1 > areaLightSH.w) areaLightSH.xyz *= areaLightSH.w / lenL1; + L0 += areaLightSH.w * color.rgb; + L1r += areaLightSH.xyz * color.r; + L1g += areaLightSH.xyz * color.g; + L1b += areaLightSH.xyz * color.b; + count++; + } + float3 LV_PointLightAttenuation(float sqdist, float sqlightSize, float3 color, float brightnessCutoff, float sqMaxDist) { + float mask = saturate(1 - sqdist / sqMaxDist); + return mask * mask * color * sqlightSize / (sqdist + sqlightSize); + } + float LV_PointLightSolidAngle(float sqdist, float sqlightSize) { + return saturate(sqrt(sqdist / (sqlightSize + sqdist))); + } + void LV_SphereLight(float sqdist, float3 dirN, float sqlightSize, float3 color, float occlusion, float sqMaxDist, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 att = LV_PointLightAttenuation(sqdist, sqlightSize, color, _UdonLightBrightnessCutoff, sqMaxDist); + float3 l0 = att * occlusion; + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLight(float sqdist, float3 dirN, float sqlightSize, float3 att, float spotMask, float cosAngle, float coneFalloff, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float smoothedCone = LV_Smoothstep01(saturate(spotMask * coneFalloff)); + float3 l0 = att * (occlusion * smoothedCone); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * saturate(1 - cosAngle)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightCookie(float sqdist, float3 dirN, float sqlightSize, float3 att, float4 lightRot, float tanAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 localDir = LV_MultiplyVectorByQuaternion(-dirN, lightRot); + float2 uv = localDir.xy * rcp(localDir.z * tanAngle); + if ( + localDir.z <= 0.0 || // Culling by direction + abs(uv.x) > 1.0 || abs(uv.y) > 1.0 // Culling by UV + ) return; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 - customId - 1; + float3 uvid = float3(uv * 0.5 + 0.5, id); + float angleSize = saturate(rsqrt(1 + tanAngle * tanAngle)); + float4 cookie = LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + float3 l0 = att * cookie.rgb * (cookie.a * occlusion); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * (1 - angleSize)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightAttenuationLUT(float sqdist, float3 dirN, float sqlightSize, float3 color, float spotMask, float cosAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float dirRadius = sqdist * abs(sqlightSize); + float spot = 1 - saturate(spotMask * rcp(1 - cosAngle)); + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId - 1; + float3 uvid = float3(sqrt(float2(spot, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * occlusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } + void LV_PointLight(uint id, float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 customID_data = _UdonPointLightVolumeCustomID[id]; + int shadowId = (int) customID_data.y; // Shadowmask id + int customId = (int) customID_data.x; // Custom Texture ID + float sqrRange = customID_data.z; // Squared culling distance + float4 pos = _UdonPointLightVolumePosition[id]; // Light position and inversed squared range + float3 dir = pos.xyz - worldPos; + float sqlen = max(dot(dir, dir), 1e-6); + if (sqlen > sqrRange) return; // Early distance based culling + float3 dirN = dir * rsqrt(sqlen); + float lightOcclusion = 1; + if (_UdonLightVolumeOcclusionCount != 0 && shadowId >= 0) { + lightOcclusion = dot(occlusion, float4(shadowId == 0, shadowId == 1, shadowId == 2, shadowId == 3)); + } + float4 color = _UdonPointLightVolumeColor[id]; // Color, angle + float4 ldir = _UdonPointLightVolumeDirection[id]; // Dir + falloff or Rotation + if (pos.w < 0) { // It is a spot light + float angle = color.w; + float spotMask = dot(ldir.xyz, -dirN) - angle; + if(customId >= 0 && spotMask < 0) return; // Spot cone based culling + if (customId > 0) { // If it uses Attenuation LUT + LV_SphereSpotLightAttenuationLUT(sqlen, dirN, -pos.w, color.rgb, spotMask, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + float3 att = LV_PointLightAttenuation(sqlen, -pos.w, color.rgb, _UdonLightBrightnessCutoff, sqrRange); + if (customId < 0) { // If uses cookie + LV_SphereSpotLightCookie(sqlen, dirN, -pos.w, att, ldir, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + LV_SphereSpotLight(sqlen, dirN, -pos.w, att, spotMask, angle, ldir.w, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + } else if (color.w <= 1.5f) { // It is a point light + if (customId > 0) { // Using LUT + float invSqRange = abs(pos.w); // Sign of range defines if it's point light (positive) or a spot light (negative) + float dirRadius = sqlen * invSqRange; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId; + float3 uvid = float3(sqrt(float2(0, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * lightOcclusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } else { // If it uses default parametric attenuation + float3 l0 = 0, l1r = 0, l1g = 0, l1b = 0; + LV_SphereLight(sqlen, dirN, pos.w, color.rgb, lightOcclusion, sqrRange, l0, l1r, l1g, l1b, count); + float3 cubeColor = 1; + if (customId < 0) { // If it uses a cubemap + uint id = -customId - 1; // Cubemap ID starts from zero and should not take in count texture array slices count. + cubeColor = LV_SampleCubemapArray(id, LV_MultiplyVectorByQuaternion(dirN, ldir)).xyz; + } + L0 += l0 * cubeColor; + L1r += l1r * cubeColor.r; + L1g += l1g * cubeColor.g; + L1b += l1b * cubeColor.b; + } + } else { // It is an area light + LV_QuadLight(worldPos, pos.xyz, ldir, float2(pos.w, color.w - 2.0f), color.rgb, sqrRange, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + void LV_SampleLightVolumeTex(float3 uvw0, float3 uvw1, float3 uvw2, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b) { + float4 tex0 = LV_SAMPLE(_UdonLightVolume, uvw0); + float4 tex1 = LV_SAMPLE(_UdonLightVolume, uvw1); + float4 tex2 = LV_SAMPLE(_UdonLightVolume, uvw2); + L0 = tex0.rgb; + L1r = float3(tex1.r, tex2.r, tex0.a); + L1g = float3(tex1.g, tex2.g, tex1.a); + L1b = float3(tex1.b, tex2.b, tex2.a); + } + float LV_BoundsMask(float3 localUVW, float3 invLocalEdgeSmooth) { + float3 distToMin = (localUVW + 0.5) * invLocalEdgeSmooth; + float3 distToMax = (0.5 - localUVW) * invLocalEdgeSmooth; + float3 fade = saturate(min(distToMin, distToMax)); + return fade.x * fade.y * fade.z; + } + void LV_SampleLightProbe(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz; + L1g += unity_SHAg.xyz; + L1b += unity_SHAb.xyz; + } + void LV_SampleLightProbeDering(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz * 0.565f; + L1g += unity_SHAg.xyz * 0.565f; + L1b += unity_SHAb.xyz * 0.565f; + } + void LV_SampleVolume(uint id, float3 localUVW, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + float3 uvw0 = uvwScaled + _UdonLightVolumeUvw[uvwID].xyz; + float3 uvw1 = uvwScaled + _UdonLightVolumeUvw[uvwID + 2].xyz; + float3 uvw2 = uvwScaled + _UdonLightVolumeUvw[uvwID + 4].xyz; + float3 l0, l1r, l1g, l1b; + LV_SampleLightVolumeTex(uvw0, uvw1, uvw2, l0, l1r, l1g, l1b); + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + occlusion = 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + occlusion = 1; + } + float4 color = _UdonLightVolumeColor[id]; + L0 += l0 * color.rgb; + l1r *= color.r; + l1g *= color.g; + l1b *= color.b; + if (color.a != 0) { + float3 r0 = _UdonLightVolumeRotation[id * 2].xyz; + float3 r1 = _UdonLightVolumeRotation[id * 2 + 1].xyz; + L1r += LV_MultiplyVectorByMatrix2x3(l1r, r0, r1); + L1g += LV_MultiplyVectorByMatrix2x3(l1g, r0, r1); + L1b += LV_MultiplyVectorByMatrix2x3(l1b, r0, r1); + } else { + L1r += l1r; + L1g += l1g; + L1b += l1b; + } + } + float4 LV_SampleVolumeOcclusion(uint id, float3 localUVW) { + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + return 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + return 1; + } + } + void LV_PointLightVolumeSH(float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + uint pointCount = min((uint) _UdonPointLightVolumeCount, VRCLV_MAX_LIGHTS_COUNT); + if (pointCount == 0) return; + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_LIGHTS_COUNT); + uint pcount = 0; // Point lights counter + [loop] for (uint pid = 0; pid < pointCount && pcount < maxOverdraw; pid++) { + LV_PointLight(pid, worldPos, occlusion, L0, L1r, L1g, L1b, pcount); + } + } + void LV_LightVolumeSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + if (volumesCount == 0) { // Legacy! Fallback to default light probes if Light Volume are not enabled or a version is too old to have a support. Legacy! + LV_SampleLightProbe(L0, L1r, L1g, L1b); + return; + } + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + bool lightProbesBlend = _UdonLightVolumeProbesBlend; + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + [loop] for (uint id = 0; id < volumesCount; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA && lightProbesBlend) { + LV_SampleLightProbe(L0, L1r, L1g, L1b); + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + float3 L0_A = 0; + float3 L1r_A = 0; + float3 L1g_A = 0; + float3 L1b_A = 0; + float4 occlusion_A = 1; + LV_SampleVolume(volumeID_A, localUVW_A, L0_A, L1r_A, L1g_A, L1b_A, occlusion_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || isNoA || (_UdonLightVolumeSharpBounds && isNoB)) { // Returning SH A result if it's the center of mask or out of bounds + L0 += L0_A; + L1r += L1r_A; + L1g += L1g_A; + L1b += L1b_A; + occlusion = occlusion_A; + occlusion *= mOcclusion; + return; + } + float3 L0_B = 0; + float3 L1r_B = 0; + float3 L1g_B = 0; + float3 L1b_B = 0; + float4 occlusion_B = 1; + if (isNoB && lightProbesBlend) { // No Volume found and light volumes blending enabled + LV_SampleLightProbe(L0_B, L1r_B, L1g_B, L1b_B); + } else { // Blending Volume A and Volume B + localUVW_B = isNoB ? localUVW : localUVW_B; + volumeID_B = isNoB ? volumesCount - 1 : volumeID_B; + LV_SampleVolume(volumeID_B, localUVW_B, L0_B, L1r_B, L1g_B, L1b_B, occlusion_B); + } + occlusion = lerp(occlusion_B, occlusion_A, mask); + occlusion *= mOcclusion; + L0 += lerp(L0_B, L0_A, mask); + L1r += lerp(L1r_B, L1r_A, mask); + L1g += lerp(L1g_B, L1g_A, mask); + L1b += lerp(L1b_B, L1b_A, mask); + } + void LV_LightVolumeAdditiveSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + if (additiveCount == 0 && (uint) _UdonPointLightVolumeCount == 0) return; // Legacy! + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW for Y Axis and Free rotations + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + uint count = min(_UdonLightVolumeOcclusionCount == 0 ? additiveCount : volumesCount, VRCLV_MAX_VOLUMES_COUNT); // Only use all volumes if occlusion volumes are enabled + [loop] for (uint id = 0; id < count; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA || _UdonLightVolumeOcclusionCount == 0) { + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + occlusion = LV_SampleVolumeOcclusion(volumeID_A, localUVW_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || (_UdonLightVolumeSharpBounds && isNoB)) { + occlusion *= mOcclusion; + return; // Returning A result if it's the center of mask or out of bounds + } + if (isNoB) occlusion = lerp(1, occlusion, mask); + else occlusion = lerp(LV_SampleVolumeOcclusion(volumeID_B, localUVW_B), occlusion, mask); + occlusion *= mOcclusion; + } + float3 LightVolumeSpecular(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specColor = max(float3(dot(reflect(-L1r, worldNormal), viewDir), dot(reflect(-L1g, worldNormal), viewDir), dot(reflect(-L1b, worldNormal), viewDir)), 0); + float3 rDir = normalize(normalize(L1r) + viewDir); + float3 gDir = normalize(normalize(L1g) + viewDir); + float3 bDir = normalize(normalize(L1b) + viewDir); + float rNh = saturate(dot(worldNormal, rDir)); + float gNh = saturate(dot(worldNormal, gDir)); + float bNh = saturate(dot(worldNormal, bDir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float rSpec = LV_DistributionGGX(rNh, roughExp); + float gSpec = LV_DistributionGGX(gNh, roughExp); + float bSpec = LV_DistributionGGX(bNh, roughExp); + float3 specs = (rSpec + gSpec + bSpec) * f0; + float3 coloredSpecs = specs * specColor; + float3 a = coloredSpecs + specs * L0; + float3 b = coloredSpecs * 3; + return max(lerp(a, b, smoothness) * 0.5f, 0.0); + } + float3 LightVolumeSpecular(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecular(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeSpecularDominant(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 dominantDir = L1r + L1g + L1b; + float3 dir = normalize(normalize(dominantDir) + viewDir); + float nh = saturate(dot(worldNormal, dir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float spec = LV_DistributionGGX(nh, roughExp); + return max(spec * L0 * f0, 0.0) * 1.5f; + } + float3 LightVolumeSpecularDominant(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecularDominant(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeEvaluate(float3 worldNormal, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + return float3(LV_EvaluateSH(L0.r, L1r, worldNormal), LV_EvaluateSH(L0.g, L1g, worldNormal), LV_EvaluateSH(L0.b, L1b, worldNormal)); + } + void LightVolumeSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled == 0) { + LV_SampleLightProbeDering(L0, L1r, L1g, L1b); + } else { + float4 occlusion = 1; + LV_LightVolumeSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + void LightVolumeAdditiveSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled != 0) { + float4 occlusion = 1; + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + float3 LightVolumeSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float3 LightVolumeAdditiveSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return 0; + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float LightVolumesEnabled() { + return _UdonLightVolumeEnabled; + } + float LightVolumesVersion() { + return _UdonLightVolumeVersion == 0 ? _UdonLightVolumeEnabled : _UdonLightVolumeVersion; + } + #endif + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float _GIEmissionMultiplier; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + #ifdef _EMISSION + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMap; + #endif + float4 _EmissionMap_ST; + float2 _EmissionMapPan; + float _EmissionMapUV; + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMask; + #endif + float4 _EmissionMask_ST; + float2 _EmissionMaskPan; + float _EmissionMaskUV; + float _EmissionMaskInvert; + float _EmissionMaskChannel; + float _EmissionMask0GlobalMask; + float _EmissionMask0GlobalMaskBlendType; + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionScrollingCurve; + #endif + float4 _EmissionScrollingCurve_ST; + float _EmissionFluorescence; + float4 _EmissionColor; + float _EmissionBaseColorAsMap; + float _EmissionStrength; + float _EmissionHueShiftEnabled; + float _EmissionHueShiftColorSpace; + float _EmissionHueSelectOrShift; + float _EmissionSaturation; + float _EmissionHueShift; + float _EmissionHueShiftSpeed; + float _EmissionCenterOutEnabled; + float _EmissionCenterOutSpeed; + float _EnableGITDEmission; + float _GITDEWorldOrMesh; + float _GITDEMinEmissionMultiplier; + float _GITDEMaxEmissionMultiplier; + float _GITDEMinLight; + float _GITDEMaxLight; + float _EmissionBlinkingEnabled; + float _EmissiveBlink_Min; + float _EmissiveBlink_Max; + float _EmissiveBlink_Velocity; + float _EmissionBlinkingOffset; + float _ScrollingEmission; + float4 _EmissiveScroll_Direction; + float _EmissiveScroll_Width; + float _EmissiveScroll_Velocity; + float _EmissiveScroll_Interval; + float _EmissionScrollingOffset; + float _EmissionReplace0; + float _EmissionScrollingVertexColor; + float _EmissionScrollingUseCurve; + float _EmissionColorThemeIndex; + float _EmissionAL0Enabled; + float2 _EmissionAL0StrengthMod; + float _EmissionAL0StrengthBand; + float2 _AudioLinkEmission0CenterOut; + float _AudioLinkEmission0CenterOutSize; + float _AudioLinkEmission0CenterOutBand; + float _AudioLinkEmission0CenterOutDuration; + float2 _EmissionAL0Multipliers; + float _EmissionAL0MultipliersBand; + #endif + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + float calculateGlowInTheDark(in float minLight, in float maxLight, in float minEmissionMultiplier, in float maxEmissionMultiplier, in float enabled, in float worldOrMesh, in PoiLight poiLight) + { + float glowInTheDarkMultiplier = 1; + if (enabled) + { + float3 lightValue = worldOrMesh ? calculateluminance(poiLight.finalLighting.rgb) : calculateluminance(poiLight.directColor.rgb); + float gitdeAlpha = saturate(inverseLerp(minLight, maxLight, lightValue)); + glowInTheDarkMultiplier = lerp(minEmissionMultiplier, maxEmissionMultiplier, gitdeAlpha); + } + return glowInTheDarkMultiplier; + } + float calculateScrollingEmission(in float3 direction, in float velocity, in float interval, in float scrollWidth, float offset, float3 position) + { + scrollWidth = max(scrollWidth, 0); + float phase = 0; + phase = dot(position, direction); + phase -= (_Time.y + offset) * velocity; + phase /= interval; + phase -= floor(phase); + phase = saturate(phase); + return (pow(phase, scrollWidth) + pow(1 - phase, scrollWidth * 4)) * 0.5; + } + float calculateBlinkingEmission(in float blinkMin, in float blinkMax, in float blinkVelocity, float offset) + { + float amplitude = (blinkMax - blinkMin) * 0.5f; + float base = blinkMin + amplitude; + return sin((_Time.y + offset) * blinkVelocity) * amplitude + base; + } + void applyALEmmissionStrength(in PoiMods poiMods, inout float emissionStrength, in float2 emissionStrengthMod, in float emissionStrengthBand, in float2 _EmissionALMultipliers, in float _EmissionALMultipliersBand, in float enabled) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + emissionStrength += lerp(emissionStrengthMod.x, emissionStrengthMod.y, poiMods.audioLink[emissionStrengthBand]); + emissionStrength *= lerp(_EmissionALMultipliers.x, _EmissionALMultipliers.y, poiMods.audioLink[_EmissionALMultipliersBand]); + } + #endif + } + void applyALCenterOutEmission(in PoiMods poiMods, in float nDotV, inout float emissionStrength, in float size, in float band, in float2 emissionToAdd, in float enabled, in float duration) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + float intensity; + [flatten] + if (duration >= 0) + { + intensity = getBandAtTime(band, saturate(remap(nDotV, 1, 0, 0, duration)), size); + } + else + { + duration *= -1; + intensity = getBandAtTime(band, saturate(remap(pow(nDotV, 2), 0, 1 + duration, 0, duration)), size); + } + emissionStrength += lerp(emissionToAdd[0], emissionToAdd[1], intensity); + } + #endif + } + #ifdef _EMISSION + float3 applyEmission(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiLight poiLight, in PoiCam poiCam, in PoiMods poiMods) + { + float3 emission0 = 0; + float emissionAlpha = 1; + float emissionStrength0 = 0.05; + float3 emissionColor0 = 0; + applyALEmmissionStrength(poiMods, emissionStrength0, float4(0,0,0,0), 0.0, float4(1,1,0,0), 0.0, 0.0); + applyALCenterOutEmission(poiMods, poiLight.nDotV, emissionStrength0, 0.0, 0.0, float4(0,0,0,0), 0.0, 1.0); + float glowInTheDarkMultiplier0 = calculateGlowInTheDark(0.0, 1.0, 1.0, 0.0, 0.0, 0.0, poiLight); + #ifdef POI_GRABPASS + float mixBaseColor = 0; + #else + float mixBaseColor = 0.0; + #endif + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + float4 emissionTex = 0; + if (!0.0) + { + emissionTex = POI2D_SAMPLER_PAN(_EmissionMap, _MainTex, poiUV(poiMesh.uv[0.0], float4(10,10,0,0)), float4(4,4,0,0)); + } + else + { + emissionTex = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMap, _MainTex, ((.5 + poiLight.nDotV * .5) * float4(10,10,0,0).xy) + _Time.x * 5.0); + } + emissionColor0 = emissionTex.rgb * lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(0.7028302,0.9937976,1,1).rgb, 0.0); + emissionAlpha = emissionTex.a; + #else + emissionColor0 = lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(0.7028302,0.9937976,1,1).rgb, 0.0); + #endif + float3 inverseLighting = saturate((1.0 - poiLight.directColor) * sqrt(poiLight.directColor)); + emissionColor0 = lerp(emissionColor0.rgb, emissionColor0.rgb * inverseLighting, 0.0); + emissionStrength0 *= emissionAlpha; + if (0.0) + { + float3 pos = poiMesh.localPos; + if (0.0) + { + pos = poiMesh.vertexColor.rgb; + } + if (0.0) + { + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + emissionStrength0 *= UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionScrollingCurve, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + (dot(pos, float4(0,-10,0,0).xyz) * 20.0) + _Time.x * 10.0).r; + #endif + } + else + { + emissionStrength0 *= calculateScrollingEmission(float4(0,-10,0,0).xyz, 10.0, 20.0, 10.0, 0.0, pos); + } + } + if (0.0) + { + emissionStrength0 *= calculateBlinkingEmission(0.0, 1.0, 4.0, 0.0); + } + if(0.0) + { + emissionColor0 = hueShift(emissionColor0, frac(0.0 + 0.0 * _Time.x), 0.0, 1.0); + emissionColor0 = lerp(emissionColor0, dot(emissionColor0, float3(0.3, 0.59, 0.11)), - (0.0)); + } + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + float emissionMask0 = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + _Time.x * float4(0,0,0,0))[0.0]; + #else + float emissionMask0 = 1; + #endif + if (0.0) + { + emissionMask0 = 1 - emissionMask0; + } + if (0.0 > 0) + { + emissionMask0 = maskBlend(emissionMask0, poiMods.globalMask[0.0 - 1], 2.0); + } + emissionStrength0 *= glowInTheDarkMultiplier0 * emissionMask0; + emission0 = max(emissionStrength0 * emissionColor0, 0); + #ifdef POI_DISSOLVE + if (_DissolveEmissionSide != 2) + { + emission0 *= lerp(1 - dissolveAlpha, dissolveAlpha, _DissolveEmissionSide); + } + #endif + poiFragData.emission += emission0; + return emission0 * 0.0; + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0004882813,0.0004882813,2048,2048), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) + float3 emissionBaseReplace = 0;// + #endif + #ifdef _EMISSION + emissionBaseReplace += applyEmission(poiFragData, poiMesh, poiLight, poiCam, poiMods); + #endif + #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) + poiFragData.baseColor.rgb = lerp(poiFragData.baseColor.rgb, saturate(emissionBaseReplace), poiMax(emissionBaseReplace)); + #endif + + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + #ifdef POI_PASS_META + UnityMetaInput meta; + UNITY_INITIALIZE_OUTPUT(UnityMetaInput, meta); + meta.Emission = poiFragData.emission * 1.0 * poiMods.globalEmission; + meta.Albedo = saturate(poiFragData.finalColor.rgb); + meta.SpecularColor = poiLight.finalLightAdd; + return UnityMetaFragment(meta) + POI_SAFE_RGB0; + #endif + poiFragData.finalColor += poiFragData.emission * poiMods.globalEmission; + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + } + CustomEditor "Thry.ShaderEditor" +} diff --git a/Assets/Quiz/Materials/DownCount/OptimizedShaders/Walls/Poiyomi Pro World.shader.meta b/Assets/Quiz/Materials/DownCount/OptimizedShaders/Walls/Poiyomi Pro World.shader.meta new file mode 100644 index 0000000..123fb2f --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/OptimizedShaders/Walls/Poiyomi Pro World.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ae2ffd0bd8a5d534b8f8b7998dcb1116 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/DownCount/PlayerDesk.mat b/Assets/Quiz/Materials/DownCount/PlayerDesk.mat new file mode 100644 index 0000000..ce2c1ac --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/PlayerDesk.mat @@ -0,0 +1,3813 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: PlayerDesk + m_Shader: {fileID: 4800000, guid: 491259bc930441f4b99e29403899a5ac, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: + - BSSBLOOMFOGTYPE_HEIGHT + - MOCHIE_PBR + - VIGNETTE_MASKED + - _EMISSION + - _LIGHTINGMODE_REALISTIC + - _RIM2STYLE_POIYOMI + - _RIMSTYLE_POIYOMI + - _STOCHASTICMODE_DELIOT_HEITZ + m_LightmapFlags: 2 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + AllLockedGUIDS: 026a7c368b9c59343bc40afa213abe94 + OriginalKeywords: BSSBLOOMFOGTYPE_HEIGHT MOCHIE_PBR VIGNETTE_MASKED _EMISSION + _LIGHTINGMODE_REALISTIC _RIM2STYLE_POIYOMI _RIMSTYLE_POIYOMI _STOCHASTICMODE_DELIOT_HEITZ + OriginalShader: .poiyomi/Poiyomi Pro World + OriginalShaderGUID: a11582d439d5e494986c4b421999c03a + RenderType: Opaque + _stripped_tex__ClothDFG: 76d65cbce584df7449699fb8406f60ea + _stripped_tex__SkinLUT: d13510bb2be49aa40a66a0101efb6a36 + _stripped_tex__ToonRamp: 61bd594533da4fc42bd46ef93ba5a4f6 + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _AnisotropyMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 70fae7d1f55aa924fa736900ee4a5b55, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMask: + m_Texture: {fileID: 2800000, guid: be7ed85c7c7b6ac409888cd1d60c3c63, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionScrollingCurve: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightDataSDFMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingAOMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingDetailShadowMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 7d05f559f6e250548ad9c064a042e292, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MochieMetallicMaps: + m_Texture: {fileID: 2800000, guid: f5925b094980d204d8fd903d1d803f6a, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MochieReflCube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _UzumoreMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - DSGI: 0 + - GeometryShader_Enabled: 1 + - Instancing: 0 + - LightmapFlags: 0 + - Tessellation_Enabled: 1 + - VertexBasicsMaskUV: 0 + - _1st2nd_Shades_Feather: 0.0001 + - _1stShadeMapMask_Inverse: 0 + - _1st_ShadeMapUV: 0 + - _2ndShadeMapMask_Inverse: 0 + - _2nd_ShadeMapUV: 0 + - _ALDecalBandClipMax: 1 + - _ALDecalBandClipMin: 0 + - _ALDecalBandStep: 0 + - _ALDecalBaseBoost: 5 + - _ALDecalBlendAlpha: 1 + - _ALDecalBlendType: 0 + - _ALDecalColorMaskUV: 0 + - _ALDecalControlsAlpha: 0 + - _ALDecalGlobalMask: 0 + - _ALDecalGlobalMaskBlendType: 2 + - _ALDecalHighEmission: 0 + - _ALDecalLineWidth: 1 + - _ALDecalLowEmission: 0 + - _ALDecalMidEmission: 0 + - _ALDecalShapeClip: 0 + - _ALDecalShapeClipBandWidth: 0.5 + - _ALDecalShapeClipVolumeWidth: 0.5 + - _ALDecalTrebleBoost: 1 + - _ALDecalType: 0 + - _ALDecalUV: 0 + - _ALDecalUVMode: 0 + - _ALDecalVolume: 0.5 + - _ALDecalVolumeClipMax: 1 + - _ALDecalVolumeClipMin: 0 + - _ALDecalVolumeColorHighThemeIndex: 0 + - _ALDecalVolumeColorLowThemeIndex: 0 + - _ALDecalVolumeColorMidThemeIndex: 0 + - _ALDecalVolumeColorSource: 1 + - _ALDecalVolumeStep: 0 + - _ALHighEmission: 0 + - _ALLowEmission: 0 + - _ALMidEmission: 0 + - _ALUVRotation: 0 + - _ALUVRotationSpeed: 0 + - _ALVolumeColorBlendAlpha: 1 + - _ALVolumeColorBlendType: 0 + - _ALVolumeColorDirection: 0 + - _ALVolumeColorHighThemeIndex: 0 + - _ALVolumeColorLowThemeIndex: 0 + - _ALVolumeColorMidThemeIndex: 0 + - _ALVolumeColorUV: 0 + - _AddBlendOp: 4 + - _AddBlendOpAlpha: 4 + - _AddDstBlend: 1 + - _AddDstBlendAlpha: 1 + - _AddSrcBlend: 1 + - _AddSrcBlendAlpha: 0 + - _Add_Antipodean_Rim2Light: 0 + - _Add_Antipodean_RimLight: 0 + - _AlphaAlphaAdd: 0 + - _AlphaAngular: 0 + - _AlphaAngularGlobalMask: 0 + - _AlphaAudioLinkAddBand: 0 + - _AlphaAudioLinkEnabled: 0 + - _AlphaBoostFA: 10 + - _AlphaColorThemeIndex: 0 + - _AlphaDistanceFade: 0 + - _AlphaDistanceFadeGlobalMask: 0 + - _AlphaDistanceFadeMax: 0 + - _AlphaDistanceFadeMaxAlpha: 1 + - _AlphaDistanceFadeMin: 0 + - _AlphaDistanceFadeMinAlpha: 0 + - _AlphaDistanceFadeType: 1 + - _AlphaDitherBias: 0 + - _AlphaDitherGradient: 0.1 + - _AlphaDithering: 0 + - _AlphaForceOpaque: 1 + - _AlphaFresnel: 0 + - _AlphaFresnelAlpha: 0 + - _AlphaFresnelGlobalMask: 0 + - _AlphaFresnelInvert: 0 + - _AlphaFresnelSharpness: 0.5 + - _AlphaFresnelWidth: 0.5 + - _AlphaGlobalMask: 0 + - _AlphaGlobalMaskBlendType: 2 + - _AlphaMaskBlendStrength: 1 + - _AlphaMaskInvert: 0 + - _AlphaMaskUV: 0 + - _AlphaMaskValue: 0 + - _AlphaMipScale: 0.25 + - _AlphaMod: 0 + - _AlphaPremultiply: 0 + - _AlphaSharpenedA2C: 0 + - _AlphaTextureStochastic: 0 + - _AlphaTextureUV: 0 + - _AlphaToCoverage: 0 + - _AngleCompareTo: 0 + - _AngleMinAlpha: 0 + - _AngleType: 0 + - _Aniso0Blur: 0 + - _Aniso0Edge: 0.5 + - _Aniso0Offset: 0 + - _Aniso0OffsetMapStrength: 0 + - _Aniso0Power: 0 + - _Aniso0Strength: 1 + - _Aniso0SwitchDirection: 0 + - _Aniso0TintIndex: 0 + - _Aniso0ToonMode: 0 + - _Aniso1Blur: 0 + - _Aniso1Edge: 0.5 + - _Aniso1Offset: 0 + - _Aniso1OffsetMapStrength: 0 + - _Aniso1Power: 0.1 + - _Aniso1Strength: 1 + - _Aniso1SwitchDirection: 0 + - _Aniso1TintIndex: 0 + - _Aniso1ToonMode: 0 + - _AnisoAdd: 1 + - _AnisoColorMapUV: 0 + - _AnisoGlobalMask: 0 + - _AnisoGlobalMaskBlendType: 2 + - _AnisoHideInShadow: 1 + - _AnisoReplace: 0 + - _AnisoUseBaseColor: 0 + - _AnisoUseLightColor: 1 + - _Anisotropy: 0 + - _AnisotropyMapChannel: 0 + - _AnisotropyMapUV: 0 + - _Ap_Rim2Light_FeatherOff: 0 + - _Ap_Rim2Light_Power: 0.1 + - _Ap_RimLight_FeatherOff: 0 + - _Ap_RimLight_Power: 0.1 + - _ApplyReflection: 0 + - _ApplySpecular: 1 + - _ApplySpecularFA: 1 + - _AudioLinkAnimToggle: 1 + - _AudioLinkBandOverridesEnabled: 0 + - _AudioLinkDecal0AlphaBand: 0 + - _AudioLinkDecal0ChannelSeparationBand: 0 + - _AudioLinkDecal0EmissionBand: 0 + - _AudioLinkDecal0RotationBand: 0 + - _AudioLinkDecal0ScaleBand: 0 + - _AudioLinkDecal0SideBand: 0 + - _AudioLinkDecal1AlphaBand: 0 + - _AudioLinkDecal1ChannelSeparationBand: 0 + - _AudioLinkDecal1EmissionBand: 0 + - _AudioLinkDecal1RotationBand: 0 + - _AudioLinkDecal1ScaleBand: 0 + - _AudioLinkDecal1SideBand: 0 + - _AudioLinkDecal2AlphaBand: 0 + - _AudioLinkDecal2ChannelSeparationBand: 0 + - _AudioLinkDecal2EmissionBand: 0 + - _AudioLinkDecal2RotationBand: 0 + - _AudioLinkDecal2ScaleBand: 0 + - _AudioLinkDecal2SideBand: 0 + - _AudioLinkDecal3AlphaBand: 0 + - _AudioLinkDecal3ChannelSeparationBand: 0 + - _AudioLinkDecal3EmissionBand: 0 + - _AudioLinkDecal3RotationBand: 0 + - _AudioLinkDecal3ScaleBand: 0 + - _AudioLinkDecal3SideBand: 0 + - _AudioLinkDecalCC0: 0 + - _AudioLinkDecalCC1: 0 + - _AudioLinkDecalCC2: 0 + - _AudioLinkDecalCC3: 0 + - _AudioLinkDissolveAlphaBand: 0 + - _AudioLinkDissolveDetailBand: 0 + - _AudioLinkEmission0CenterOutBand: 0 + - _AudioLinkEmission0CenterOutDuration: 1 + - _AudioLinkEmission0CenterOutSize: 0 + - _AudioLinkEmission1CenterOutBand: 0 + - _AudioLinkEmission1CenterOutDuration: 1 + - _AudioLinkEmission1CenterOutSize: 0 + - _AudioLinkEmission2CenterOutBand: 0 + - _AudioLinkEmission2CenterOutDuration: 1 + - _AudioLinkEmission2CenterOutSize: 0 + - _AudioLinkEmission3CenterOutBand: 0 + - _AudioLinkEmission3CenterOutDuration: 1 + - _AudioLinkEmission3CenterOutSize: 0 + - _AudioLinkFlipbookAlphaBand: 0 + - _AudioLinkFlipbookEmissionBand: 0 + - _AudioLinkFlipbookFrameBand: 0 + - _AudioLinkFlipbookScaleBand: 0 + - _AudioLinkHelp: 0 + - _AudioLinkOutlineColorBand: 0 + - _AudioLinkOutlineEmissionBand: 0 + - _AudioLinkOutlineSizeBand: 0 + - _AudioLinkPathEmissionAddBandA: 0 + - _AudioLinkPathEmissionAddBandB: 0 + - _AudioLinkPathEmissionAddBandG: 0 + - _AudioLinkPathEmissionAddBandR: 0 + - _AudioLinkPathTimeOffsetBandA: 0 + - _AudioLinkPathTimeOffsetBandB: 0 + - _AudioLinkPathTimeOffsetBandG: 0 + - _AudioLinkPathTimeOffsetBandR: 0 + - _AudioLinkPathWidthOffsetBandA: 0 + - _AudioLinkPathWidthOffsetBandB: 0 + - _AudioLinkPathWidthOffsetBandG: 0 + - _AudioLinkPathWidthOffsetBandR: 0 + - _AudioLinkRim2BrightnessBand: 0 + - _AudioLinkRim2EmissionBand: 0 + - _AudioLinkRim2WidthBand: 0 + - _AudioLinkRimBrightnessBand: 0 + - _AudioLinkRimEmissionBand: 0 + - _AudioLinkRimWidthBand: 0 + - _AudioLinkSmoothingBass: 0 + - _AudioLinkSmoothingHighMid: 0 + - _AudioLinkSmoothingLowMid: 0 + - _AudioLinkSmoothingTreble: 0 + - _AudioLinkVoronoiChronoSpeedXBand: 0 + - _AudioLinkVoronoiChronoSpeedXSpeed: 0 + - _AudioLinkVoronoiChronoSpeedXType: 0 + - _AudioLinkVoronoiChronoSpeedYBand: 0 + - _AudioLinkVoronoiChronoSpeedYSpeed: 0 + - _AudioLinkVoronoiChronoSpeedYType: 0 + - _AudioLinkVoronoiChronoSpeedZBand: 0 + - _AudioLinkVoronoiChronoSpeedZSpeed: 0 + - _AudioLinkVoronoiChronoSpeedZType: 0 + - _AudioLinkVoronoiGradientMaxAdd: 0 + - _AudioLinkVoronoiGradientMaxAddBand: 0 + - _AudioLinkVoronoiGradientMinAdd: 0 + - _AudioLinkVoronoiGradientMinAddBand: 0 + - _AudioLinkVoronoiInnerEmissionBand: 0 + - _AudioLinkVoronoiOuterEmissionBand: 0 + - _BRDFTPSDepthEnabled: 0 + - _BRDFTPSReflectionMaskStrength: 1 + - _BRDFTPSSpecularMaskStrength: 1 + - _BSSBloomfog: 0 + - _BSSBloomfogType: 1 + - _BSSEnabled: 0 + - _BSSHelpBox1: 0 + - _BSSHelpBox2: 0 + - _BSSHelpBox3: 0 + - _BSSSpacer1: 0 + - _BSSSpacer2: 0 + - _BSSSpacer3: 0 + - _BackFaceColorThemeIndex: 0 + - _BackFaceDetailIntensity: 1 + - _BackFaceEmissionLimiter: 1 + - _BackFaceEmissionStrength: 0 + - _BackFaceEnabled: 0 + - _BackFaceHueSelectOrShift: 1 + - _BackFaceHueShift: 0 + - _BackFaceHueShiftEnabled: 0 + - _BackFaceHueShiftSpeed: 0 + - _BackFaceMaskChannel: 0 + - _BackFaceMaskUV: 0 + - _BackFaceReplaceAlpha: 0 + - _BackFaceShiftColorSpace: 0 + - _BackFaceTextureUV: 0 + - _BacklightBackfaceMask: 1 + - _BacklightBlur: 0.05 + - _BacklightBorder: 0.35 + - _BacklightColorTexUV: 0 + - _BacklightDirectivity: 5 + - _BacklightEnabled: 0 + - _BacklightMainStrength: 0 + - _BacklightNormalStrength: 1 + - _BacklightReceiveShadow: 1 + - _BacklightViewStrength: 1 + - _BaseColor_Step: 0.5 + - _BaseShade_Feather: 0.0001 + - _BlackLightMasking0GlobalMaskBlendType: 0 + - _BlackLightMasking0GlobalMaskIndex: 0 + - _BlackLightMasking0Key: 1 + - _BlackLightMasking1GlobalMaskBlendType: 0 + - _BlackLightMasking1GlobalMaskIndex: 0 + - _BlackLightMasking1Key: 2 + - _BlackLightMasking2GlobalMaskBlendType: 0 + - _BlackLightMasking2GlobalMaskIndex: 0 + - _BlackLightMasking2Key: 3 + - _BlackLightMasking3GlobalMaskBlendType: 0 + - _BlackLightMasking3GlobalMaskIndex: 0 + - _BlackLightMasking3Key: 4 + - _BlackLightMaskingEnabled: 0 + - _BlendOp: 0 + - _BlendOpAlpha: 0 + - _BlendshapeBadScaleFix: 1 + - _BlendshapePower: 1 + - _BlueAlphaAdd: 0 + - _BlueColorThemeIndex: 0 + - _BlueTextureStochastic: 0 + - _BlueTextureUV: 0 + - _BulgeOffset: 0 + - _BulgePower: 0 + - _BumpMapStochastic: 0 + - _BumpMapUV: 0 + - _BumpScale: 1 + - _CCIgnoreCastedShadows: 0 + - _CameraAngleMax: 90 + - _CameraAngleMin: 45 + - _CenterOutDissolveInvert: 0 + - _CenterOutDissolveMode: 1 + - _CenterOutDissolveNormals: 0 + - _CenterOutDissolvePower: 1 + - _ClearCoatBRDF: 0 + - _ClearCoatForceFallback: 0 + - _ClearCoatGSAAEnabled: 1 + - _ClearCoatGSAAThreshold: 0.1 + - _ClearCoatGSAAVariance: 0.15 + - _ClearCoatGlobalMask: 0 + - _ClearCoatGlobalMaskBlendType: 2 + - _ClearCoatLitFallback: 1 + - _ClearCoatMapsClearCoatMaskChannel: 0 + - _ClearCoatMapsReflectionMaskChannel: 2 + - _ClearCoatMapsRoughnessChannel: 1 + - _ClearCoatMapsSpecularMaskChannel: 3 + - _ClearCoatMapsStochastic: 0 + - _ClearCoatMapsUV: 0 + - _ClearCoatMaskInvert: 0 + - _ClearCoatNormalSelect: 0 + - _ClearCoatReflectionMaskInvert: 0 + - _ClearCoatReflectionStrength: 1 + - _ClearCoatReflectionStrengthGlobalMask: 0 + - _ClearCoatReflectionStrengthGlobalMaskBlendType: 2 + - _ClearCoatReflectionTintThemeIndex: 0 + - _ClearCoatSmoothness: 1 + - _ClearCoatSmoothnessGlobalMask: 0 + - _ClearCoatSmoothnessGlobalMaskBlendType: 2 + - _ClearCoatSmoothnessMapInvert: 0 + - _ClearCoatSpecularMaskInvert: 0 + - _ClearCoatSpecularStrength: 1 + - _ClearCoatSpecularStrengthGlobalMask: 0 + - _ClearCoatSpecularStrengthGlobalMaskBlendType: 2 + - _ClearCoatSpecularTintThemeIndex: 0 + - _ClearCoatStrength: 1 + - _ClearCoatTPSDepthMaskEnabled: 0 + - _ClearCoatTPSMaskStrength: 1 + - _ClearcoatExposureOcclusion: 0 + - _ClearcoatFresnelStrength: 0.5 + - _ClothLerp: 0 + - _ClothMetallicSmoothnessMapInvert: 0 + - _ClothMetallicSmoothnessMapUV: 0 + - _ClothReflectance: 0.5 + - _ClothSmoothness: 0.5 + - _ColorGradingToggle: 0 + - _ColorMask: 15 + - _ColorThemeIndex: 0 + - _ContinuousDissolve: 0 + - _CubeMapBlendAmount: 1 + - _CubeMapBrightness: 0 + - _CubeMapColorThemeIndex: 0 + - _CubeMapContrast: 1 + - _CubeMapEmissionStrength: 0 + - _CubeMapEnabled: 0 + - _CubeMapHueSelectOrShift: 1 + - _CubeMapHueShift: 0 + - _CubeMapHueShiftColorSpace: 0 + - _CubeMapHueShiftEnabled: 0 + - _CubeMapHueShiftSpeed: 0 + - _CubeMapIntensity: 1 + - _CubeMapLightMask: 0 + - _CubeMapMaskChannel: 0 + - _CubeMapMaskGlobalMask: 0 + - _CubeMapMaskGlobalMaskBlendType: 2 + - _CubeMapMaskInvert: 0 + - _CubeMapMaskUV: 0 + - _CubeMapNormal: 1 + - _CubeMapSaturation: 1 + - _CubeMapSmoothness: 1 + - _CubeMapUVMode: 1 + - _CubeMapWorldNormalsStrength: 1 + - _CubemapBlendType: 0 + - _Cull: 2 + - _CurvFix: 1 + - _Curvature: 0 + - _CurvatureU: 0 + - _CurvatureV: 0 + - _CustomColors: 0 + - _Cutoff: 0.5 + - _Decal0ApplyGlobalMaskBlendType: 0 + - _Decal0ApplyGlobalMaskIndex: 0 + - _Decal0ChannelSeparation: 0 + - _Decal0ChannelSeparationAngleStrength: 0 + - _Decal0ChannelSeparationEnable: 0 + - _Decal0ChannelSeparationHue: 0 + - _Decal0ChannelSeparationPremultiply: 0 + - _Decal0ChannelSeparationVertical: 0 + - _Decal0Depth: 0 + - _Decal0FaceMask: 0 + - _Decal0GlobalMask: 0 + - _Decal0GlobalMaskBlendType: 2 + - _Decal0HueAngleStrength: 0 + - _Decal0MaskChannel: 0 + - _Decal0OnlyVideo: 0 + - _Decal0OverrideAlphaMode: 0 + - _Decal0TPSMaskStrength: 1 + - _Decal0UseDecalAlpha: 0 + - _Decal0VideoAspectFix: 0 + - _Decal0VideoEmissionStrength: 0 + - _Decal0VideoEnabled: 0 + - _Decal0VideoFitToScale: 1 + - _Decal1ApplyGlobalMaskBlendType: 0 + - _Decal1ApplyGlobalMaskIndex: 0 + - _Decal1ChannelSeparation: 0 + - _Decal1ChannelSeparationAngleStrength: 0 + - _Decal1ChannelSeparationEnable: 0 + - _Decal1ChannelSeparationHue: 0 + - _Decal1ChannelSeparationPremultiply: 0 + - _Decal1ChannelSeparationVertical: 0 + - _Decal1Depth: 0 + - _Decal1FaceMask: 0 + - _Decal1GlobalMask: 0 + - _Decal1GlobalMaskBlendType: 2 + - _Decal1HueAngleStrength: 0 + - _Decal1MaskChannel: 1 + - _Decal1OnlyVideo: 0 + - _Decal1OverrideAlphaMode: 0 + - _Decal1TPSMaskStrength: 1 + - _Decal1UseDecalAlpha: 0 + - _Decal1VideoAspectFix: 0 + - _Decal1VideoEmissionStrength: 0 + - _Decal1VideoEnabled: 0 + - _Decal1VideoFitToScale: 1 + - _Decal2ApplyGlobalMaskBlendType: 0 + - _Decal2ApplyGlobalMaskIndex: 0 + - _Decal2ChannelSeparation: 0 + - _Decal2ChannelSeparationAngleStrength: 0 + - _Decal2ChannelSeparationEnable: 0 + - _Decal2ChannelSeparationHue: 0 + - _Decal2ChannelSeparationPremultiply: 0 + - _Decal2ChannelSeparationVertical: 0 + - _Decal2Depth: 0 + - _Decal2FaceMask: 0 + - _Decal2GlobalMask: 0 + - _Decal2GlobalMaskBlendType: 2 + - _Decal2HueAngleStrength: 0 + - _Decal2MaskChannel: 2 + - _Decal2OnlyVideo: 0 + - _Decal2OverrideAlphaMode: 0 + - _Decal2TPSMaskStrength: 1 + - _Decal2UseDecalAlpha: 0 + - _Decal2VideoAspectFix: 0 + - _Decal2VideoEmissionStrength: 0 + - _Decal2VideoEnabled: 0 + - _Decal2VideoFitToScale: 1 + - _Decal3ApplyGlobalMaskBlendType: 0 + - _Decal3ApplyGlobalMaskIndex: 0 + - _Decal3ChannelSeparation: 0 + - _Decal3ChannelSeparationAngleStrength: 0 + - _Decal3ChannelSeparationEnable: 0 + - _Decal3ChannelSeparationHue: 0 + - _Decal3ChannelSeparationPremultiply: 0 + - _Decal3ChannelSeparationVertical: 0 + - _Decal3Depth: 0 + - _Decal3FaceMask: 0 + - _Decal3GlobalMask: 0 + - _Decal3GlobalMaskBlendType: 2 + - _Decal3HueAngleStrength: 0 + - _Decal3MaskChannel: 3 + - _Decal3OnlyVideo: 0 + - _Decal3OverrideAlphaMode: 0 + - _Decal3TPSMaskStrength: 1 + - _Decal3UseDecalAlpha: 0 + - _Decal3VideoAspectFix: 0 + - _Decal3VideoEmissionStrength: 0 + - _Decal3VideoEnabled: 0 + - _Decal3VideoFitToScale: 1 + - _DecalBlendAlpha: 1 + - _DecalBlendAlpha1: 1 + - _DecalBlendAlpha2: 1 + - _DecalBlendAlpha3: 1 + - _DecalBlendType: 0 + - _DecalBlendType1: 0 + - _DecalBlendType2: 0 + - _DecalBlendType3: 0 + - _DecalColor1ThemeIndex: 0 + - _DecalColor2ThemeIndex: 0 + - _DecalColor3ThemeIndex: 0 + - _DecalColorThemeIndex: 0 + - _DecalEmissionStrength: 0 + - _DecalEmissionStrength1: 0 + - _DecalEmissionStrength2: 0 + - _DecalEmissionStrength3: 0 + - _DecalEnabled: 0 + - _DecalEnabled1: 0 + - _DecalEnabled2: 0 + - _DecalEnabled3: 0 + - _DecalHueShift: 0 + - _DecalHueShift1: 0 + - _DecalHueShift2: 0 + - _DecalHueShift3: 0 + - _DecalHueShiftColorSpace: 0 + - _DecalHueShiftColorSpace1: 0 + - _DecalHueShiftColorSpace2: 0 + - _DecalHueShiftColorSpace3: 0 + - _DecalHueShiftEnabled: 0 + - _DecalHueShiftEnabled1: 0 + - _DecalHueShiftEnabled2: 0 + - _DecalHueShiftEnabled3: 0 + - _DecalHueShiftSelectOrShift: 1 + - _DecalHueShiftSelectOrShift1: 1 + - _DecalHueShiftSelectOrShift2: 1 + - _DecalHueShiftSelectOrShift3: 1 + - _DecalHueShiftSpeed: 0 + - _DecalHueShiftSpeed1: 0 + - _DecalHueShiftSpeed2: 0 + - _DecalHueShiftSpeed3: 0 + - _DecalMaskUV: 0 + - _DecalMirroredUVMode: 0 + - _DecalMirroredUVMode1: 0 + - _DecalMirroredUVMode2: 0 + - _DecalMirroredUVMode3: 0 + - _DecalOverrideAlpha: 0 + - _DecalOverrideAlpha1: 0 + - _DecalOverrideAlpha2: 0 + - _DecalOverrideAlpha3: 0 + - _DecalRotation: 0 + - _DecalRotation1: 0 + - _DecalRotation2: 0 + - _DecalRotation3: 0 + - _DecalRotationCTALBand0: 0 + - _DecalRotationCTALBand1: 0 + - _DecalRotationCTALBand2: 0 + - _DecalRotationCTALBand3: 0 + - _DecalRotationCTALSpeed0: 0 + - _DecalRotationCTALSpeed1: 0 + - _DecalRotationCTALSpeed2: 0 + - _DecalRotationCTALSpeed3: 0 + - _DecalRotationCTALType0: 0 + - _DecalRotationCTALType1: 0 + - _DecalRotationCTALType2: 0 + - _DecalRotationCTALType3: 0 + - _DecalRotationSpeed: 0 + - _DecalRotationSpeed1: 0 + - _DecalRotationSpeed2: 0 + - _DecalRotationSpeed3: 0 + - _DecalSymmetryMode: 0 + - _DecalSymmetryMode1: 0 + - _DecalSymmetryMode2: 0 + - _DecalSymmetryMode3: 0 + - _DecalTPSDepthMaskEnabled: 0 + - _DecalTexture1UV: 0 + - _DecalTexture2UV: 0 + - _DecalTexture3UV: 0 + - _DecalTextureUV: 0 + - _DecalTiled: 0 + - _DecalTiled1: 0 + - _DecalTiled2: 0 + - _DecalTiled3: 0 + - _DepthAlphaMaxDepth: 1 + - _DepthAlphaMaxValue: 0 + - _DepthAlphaMinDepth: 0 + - _DepthAlphaMinValue: 1 + - _DepthAlphaToggle: 0 + - _DepthBulgeFadeLength: 0.02 + - _DepthBulgeHeight: 0.02 + - _DepthBulgeMaskChannel: 0 + - _DepthBulgeMaskUV: 0 + - _DepthBulgeWarning: 0 + - _DepthColorBlendMode: 0 + - _DepthColorMaxDepth: 1 + - _DepthColorMaxValue: 0 + - _DepthColorMinDepth: 0 + - _DepthColorMinValue: 1 + - _DepthColorThemeIndex: 0 + - _DepthColorToggle: 0 + - _DepthEmissionStrength: 0 + - _DepthFXWarning: 0 + - _DepthMaskChannel: 0 + - _DepthMaskGlobalMask: 0 + - _DepthMaskGlobalMaskBlendType: 2 + - _DepthMaskUV: 0 + - _DepthRimAdd: 0 + - _DepthRimAdditiveLighting: 0 + - _DepthRimBrightness: 1 + - _DepthRimColorThemeIndex: 0 + - _DepthRimEmission: 0 + - _DepthRimHideInShadow: 0 + - _DepthRimMixBaseColor: 0 + - _DepthRimMixLightColor: 0 + - _DepthRimMultiply: 0 + - _DepthRimNormalToUse: 1 + - _DepthRimReplace: 0 + - _DepthRimSharpness: 0.2 + - _DepthRimType: 0 + - _DepthRimWidth: 0.2 + - _DepthTextureUV: 0 + - _DetailBrightness: 1 + - _DetailEnabled: 0 + - _DetailMaskStochastic: 0 + - _DetailMaskUV: 0 + - _DetailNormalGlobalMask: 0 + - _DetailNormalGlobalMaskBlendType: 2 + - _DetailNormalMapScale: 1 + - _DetailNormalMapStochastic: 0 + - _DetailNormalMapUV: 0 + - _DetailTexGlobalMask: 0 + - _DetailTexGlobalMaskBlendType: 2 + - _DetailTexIntensity: 1 + - _DetailTexStochastic: 0 + - _DetailTexUV: 0 + - _DetailTintThemeIndex: 0 + - _DisableDirectionalInAdd: 1 + - _DissolveAlpha: 0 + - _DissolveAlpha0: 0 + - _DissolveAlpha1: 0 + - _DissolveAlpha2: 0 + - _DissolveAlpha3: 0 + - _DissolveAlpha4: 0 + - _DissolveAlpha5: 0 + - _DissolveAlpha6: 0 + - _DissolveAlpha7: 0 + - _DissolveAlpha8: 0 + - _DissolveAlpha9: 0 + - _DissolveApplyGlobalMaskBlendType: 0 + - _DissolveApplyGlobalMaskIndex: 0 + - _DissolveDetailEdgeSmoothing: 0 + - _DissolveDetailNoiseUV: 0 + - _DissolveDetailStrength: 0.1 + - _DissolveEdgeColorThemeIndex: 0 + - _DissolveEdgeEmission: 0 + - _DissolveEdgeHardness: 0.5 + - _DissolveEdgeHueSelectOrShift: 1 + - _DissolveEdgeHueShift: 0 + - _DissolveEdgeHueShiftColorSpace: 0 + - _DissolveEdgeHueShiftEnabled: 0 + - _DissolveEdgeHueShiftSpeed: 0 + - _DissolveEdgeWidth: 0.025 + - _DissolveHueSelectOrShift: 1 + - _DissolveHueShift: 0 + - _DissolveHueShiftColorSpace: 0 + - _DissolveHueShiftEnabled: 0 + - _DissolveHueShiftSpeed: 0 + - _DissolveInverseApplyGlobalMaskBlendType: 0 + - _DissolveInverseApplyGlobalMaskIndex: 0 + - _DissolveInvertDetailNoise: 0 + - _DissolveInvertNoise: 0 + - _DissolveMaskGlobalMask: 0 + - _DissolveMaskGlobalMaskBlendType: 2 + - _DissolveMaskInvert: 0 + - _DissolveMaskUV: 0 + - _DissolveNoiseTextureUV: 0 + - _DissolveP2PClamp: 0 + - _DissolveP2PEdgeLength: 0.1 + - _DissolveP2PWorldLocal: 0 + - _DissolveTextureColorThemeIndex: 0 + - _DissolveToEmissionStrength: 0 + - _DissolveToTextureUV: 0 + - _DissolveType: 1 + - _DissolveUseVertexColors: 0 + - _DistortionFlowTexture1UV: 0 + - _DistortionFlowTextureUV: 0 + - _DistortionMaskChannel: 0 + - _DistortionMaskUV: 0 + - _DistortionStrength: 0.03 + - _DistortionStrength1: 0.01 + - _DistortionStrength1AudioLinkBand: 0 + - _DistortionStrengthAudioLinkBand: 0 + - _DistortionUvToDistort: 0 + - _DstBlend: 0 + - _DstBlendAlpha: 10 + - _EmissionAL0Enabled: 0 + - _EmissionAL0MultipliersBand: 0 + - _EmissionAL0StrengthBand: 0 + - _EmissionAL1Enabled: 0 + - _EmissionAL1MultipliersBand: 0 + - _EmissionAL1StrengthBand: 0 + - _EmissionAL2Enabled: 0 + - _EmissionAL2MultipliersBand: 0 + - _EmissionAL2StrengthBand: 0 + - _EmissionAL3Enabled: 0 + - _EmissionAL3MultipliersBand: 0 + - _EmissionAL3StrengthBand: 0 + - _EmissionBaseColorAsMap: 0 + - _EmissionBaseColorAsMap1: 0 + - _EmissionBaseColorAsMap2: 0 + - _EmissionBaseColorAsMap3: 0 + - _EmissionBlinkingEnabled: 0 + - _EmissionBlinkingEnabled1: 0 + - _EmissionBlinkingEnabled2: 0 + - _EmissionBlinkingEnabled3: 0 + - _EmissionBlinkingOffset: 0 + - _EmissionBlinkingOffset1: 0 + - _EmissionBlinkingOffset2: 0 + - _EmissionBlinkingOffset3: 0 + - _EmissionCenterOutEnabled: 0 + - _EmissionCenterOutEnabled1: 0 + - _EmissionCenterOutEnabled2: 0 + - _EmissionCenterOutEnabled3: 0 + - _EmissionCenterOutSpeed: 5 + - _EmissionCenterOutSpeed1: 5 + - _EmissionCenterOutSpeed2: 5 + - _EmissionCenterOutSpeed3: 5 + - _EmissionColor1ThemeIndex: 0 + - _EmissionColor2ThemeIndex: 0 + - _EmissionColor3ThemeIndex: 0 + - _EmissionColorThemeIndex: 0 + - _EmissionFluorescence: 0 + - _EmissionFluorescence1: 0 + - _EmissionFluorescence2: 0 + - _EmissionFluorescence3: 0 + - _EmissionHueSelectOrShift: 1 + - _EmissionHueSelectOrShift1: 1 + - _EmissionHueSelectOrShift2: 1 + - _EmissionHueSelectOrShift3: 1 + - _EmissionHueShift: 0 + - _EmissionHueShift1: 0 + - _EmissionHueShift2: 0 + - _EmissionHueShift3: 0 + - _EmissionHueShiftColorSpace: 0 + - _EmissionHueShiftColorSpace1: 0 + - _EmissionHueShiftColorSpace2: 0 + - _EmissionHueShiftColorSpace3: 0 + - _EmissionHueShiftEnabled: 0 + - _EmissionHueShiftEnabled1: 0 + - _EmissionHueShiftEnabled2: 0 + - _EmissionHueShiftEnabled3: 0 + - _EmissionHueShiftSpeed: 0 + - _EmissionHueShiftSpeed1: 0 + - _EmissionHueShiftSpeed2: 0 + - _EmissionHueShiftSpeed3: 0 + - _EmissionMap1UV: 0 + - _EmissionMap2UV: 0 + - _EmissionMap3UV: 0 + - _EmissionMapUV: 0 + - _EmissionMask0GlobalMask: 0 + - _EmissionMask0GlobalMaskBlendType: 2 + - _EmissionMask1Channel: 0 + - _EmissionMask1GlobalMask: 0 + - _EmissionMask1GlobalMaskBlendType: 2 + - _EmissionMask1UV: 0 + - _EmissionMask2Channel: 0 + - _EmissionMask2GlobalMask: 0 + - _EmissionMask2GlobalMaskBlendType: 2 + - _EmissionMask2UV: 0 + - _EmissionMask3Channel: 0 + - _EmissionMask3GlobalMask: 0 + - _EmissionMask3GlobalMaskBlendType: 2 + - _EmissionMask3UV: 0 + - _EmissionMaskChannel: 0 + - _EmissionMaskInvert: 0 + - _EmissionMaskInvert1: 0 + - _EmissionMaskInvert2: 0 + - _EmissionMaskInvert3: 0 + - _EmissionMaskUV: 0 + - _EmissionReplace0: 0 + - _EmissionReplace1: 0 + - _EmissionReplace2: 0 + - _EmissionReplace3: 0 + - _EmissionSaturation: 0 + - _EmissionSaturation1: 0 + - _EmissionSaturation2: 0 + - _EmissionSaturation3: 0 + - _EmissionScrollingOffset: 0 + - _EmissionScrollingOffset1: 0 + - _EmissionScrollingOffset2: 0 + - _EmissionScrollingOffset3: 0 + - _EmissionScrollingUseCurve: 0 + - _EmissionScrollingUseCurve1: 0 + - _EmissionScrollingUseCurve2: 0 + - _EmissionScrollingUseCurve3: 0 + - _EmissionScrollingVertexColor: 0 + - _EmissionScrollingVertexColor1: 0 + - _EmissionScrollingVertexColor2: 0 + - _EmissionScrollingVertexColor3: 0 + - _EmissionStrength: 2 + - _EmissionStrength1: 0 + - _EmissionStrength2: 0 + - _EmissionStrength3: 0 + - _EmissiveBlink_Max: 1 + - _EmissiveBlink_Max1: 1 + - _EmissiveBlink_Max2: 1 + - _EmissiveBlink_Max3: 1 + - _EmissiveBlink_Min: 0 + - _EmissiveBlink_Min1: 0 + - _EmissiveBlink_Min2: 0 + - _EmissiveBlink_Min3: 0 + - _EmissiveBlink_Velocity: 4 + - _EmissiveBlink_Velocity1: 4 + - _EmissiveBlink_Velocity2: 4 + - _EmissiveBlink_Velocity3: 4 + - _EmissiveScroll_Interval: 20 + - _EmissiveScroll_Interval1: 20 + - _EmissiveScroll_Interval2: 20 + - _EmissiveScroll_Interval3: 20 + - _EmissiveScroll_Velocity: 10 + - _EmissiveScroll_Velocity1: 10 + - _EmissiveScroll_Velocity2: 10 + - _EmissiveScroll_Velocity3: 10 + - _EmissiveScroll_Width: 10 + - _EmissiveScroll_Width1: 10 + - _EmissiveScroll_Width2: 10 + - _EmissiveScroll_Width3: 10 + - _EnableALDecal: 0 + - _EnableAniso: 0 + - _EnableAudioLink: 0 + - _EnableDepthBulge: 0 + - _EnableDepthRimLighting: 0 + - _EnableDissolve: 0 + - _EnableDissolveAudioLink: 0 + - _EnableDistortion: 0 + - _EnableDistortionAudioLink: 0 + - _EnableEmission: 1 + - _EnableEmission1: 0 + - _EnableEmission2: 0 + - _EnableEmission3: 0 + - _EnableEnvironmentalRim: 0 + - _EnableFlipbook: 0 + - _EnableGITDEmission: 0 + - _EnableGITDEmission1: 0 + - _EnableGITDEmission2: 0 + - _EnableGITDEmission3: 0 + - _EnableMirrorOptions: 0 + - _EnableOutlines: 0 + - _EnablePathRemapping: 0 + - _EnablePathing: 0 + - _EnableRim2Lighting: 0 + - _EnableRimLighting: 0 + - _EnableTouchGlow: 0 + - _EnableTruchet: 0 + - _EnableUDIMDiscardOptions: 0 + - _EnableUDIMFaceDiscardOptions: 0 + - _EnableVolumeColor: 0 + - _EntranceStiffness: 0.01 + - _EntryOpenDuration: 0.1 + - _FFBFOutlineStencilHelp0: 0 + - _FFBFOutlineStencilHelp1: 0 + - _FFBFStencilHelp0: 0 + - _FFBFStencilHelp1: 0 + - _FXProximityColor: 0 + - _FXProximityColorBackFace: 0 + - _FXProximityColorMaxColorThemeIndex: 0 + - _FXProximityColorMaxDistance: 1 + - _FXProximityColorMinColorThemeIndex: 0 + - _FXProximityColorMinDistance: 0 + - _FXProximityColorType: 1 + - _FlipBackfaceNormals: 1 + - _FlipbookAlphaControlsFinalAlpha: 0 + - _FlipbookBlendType: 0 + - _FlipbookChronoType: 0 + - _FlipbookChronotensityBand: 0 + - _FlipbookChronotensityEnabled: 0 + - _FlipbookChronotensitySpeed: 0 + - _FlipbookColorReplaces: 0 + - _FlipbookColorThemeIndex: 0 + - _FlipbookCrossfadeEnabled: 0 + - _FlipbookCurrentFrame: 0 + - _FlipbookEmissionStrength: 0 + - _FlipbookEndFrame: 0 + - _FlipbookFPS: 30 + - _FlipbookFrameOffset: 0 + - _FlipbookHueSelectOrShift: 1 + - _FlipbookHueShift: 0 + - _FlipbookHueShiftColorSpace: 0 + - _FlipbookHueShiftEnabled: 0 + - _FlipbookHueShiftSpeed: 0 + - _FlipbookIntensityControlsAlpha: 0 + - _FlipbookManualFrameControl: 0 + - _FlipbookMaskChannel: 0 + - _FlipbookMaskGlobalMask: 0 + - _FlipbookMaskGlobalMaskBlendType: 2 + - _FlipbookMaskUV: 0 + - _FlipbookReplace: 1 + - _FlipbookRotation: 0 + - _FlipbookRotationSpeed: 0 + - _FlipbookStartAndEnd: 0 + - _FlipbookStartFrame: 0 + - _FlipbookTexArrayUV: 0 + - _FlipbookTiled: 0 + - _FogHeightOffset: 0 + - _FogHeightScale: 1 + - _FogScale: 1 + - _FogStartOffset: 0 + - _ForceFlatRampedLightmap: 1 + - _ForgotToLockMaterial: 1 + - _GGXAnisotropics: 0 + - _GIEmissionMultiplier: 1 + - _GITDEMaxEmissionMultiplier: 0 + - _GITDEMaxEmissionMultiplier1: 0 + - _GITDEMaxEmissionMultiplier2: 0 + - _GITDEMaxEmissionMultiplier3: 0 + - _GITDEMaxLight: 1 + - _GITDEMaxLight1: 1 + - _GITDEMaxLight2: 1 + - _GITDEMaxLight3: 1 + - _GITDEMinEmissionMultiplier: 1 + - _GITDEMinEmissionMultiplier1: 1 + - _GITDEMinEmissionMultiplier2: 1 + - _GITDEMinEmissionMultiplier3: 1 + - _GITDEMinLight: 0 + - _GITDEMinLight1: 0 + - _GITDEMinLight2: 0 + - _GITDEMinLight3: 0 + - _GITDEWorldOrMesh: 0 + - _GITDEWorldOrMesh1: 0 + - _GITDEWorldOrMesh2: 0 + - _GITDEWorldOrMesh3: 0 + - _GSAAStrength: 0 + - _GlitterALAlphaAddBand: 0 + - _GlitterALChronoRotationSpeed: 0 + - _GlitterALChronoRotationSpeedBand: 0 + - _GlitterALChronoRotationSpeedType: 0 + - _GlitterALChronoSparkleSpeed: 0 + - _GlitterALChronoSparkleSpeedBand: 0 + - _GlitterALChronoSparkleSpeedType: 0 + - _GlitterALEnabled: 0 + - _GlitterALMaxBrightnessBand: 0 + - _GlitterALSizeAddBand: 0 + - _GlitterAngleRange: 90 + - _GlitterBias: 0.8 + - _GlitterBlendType: 0 + - _GlitterBrightness: 3 + - _GlitterCenterSize: 0.08 + - _GlitterColorMapUV: 0 + - _GlitterColorThemeIndex: 0 + - _GlitterContrast: 300 + - _GlitterEnable: 0 + - _GlitterFrequency: 300 + - _GlitterHideInShadow: 0 + - _GlitterHueSelectOrShift: 1 + - _GlitterHueShift: 0 + - _GlitterHueShiftColorSpace: 0 + - _GlitterHueShiftEnabled: 0 + - _GlitterHueShiftSpeed: 0 + - _GlitterJaggyFix: 0 + - _GlitterLayers: 2 + - _GlitterMaskChannel: 0 + - _GlitterMaskGlobalMask: 0 + - _GlitterMaskGlobalMaskBlendType: 2 + - _GlitterMaskInvert: 0 + - _GlitterMaskUV: 0 + - _GlitterMinBrightness: 0 + - _GlitterMode: 0 + - _GlitterRandomColors: 0 + - _GlitterRandomLocation: 1 + - _GlitterRandomRotation: 0 + - _GlitterRandomSize: 0 + - _GlitterScaleWithLighting: 0 + - _GlitterShape: 0 + - _GlitterSize: 0.3 + - _GlitterSpeed: 10 + - _GlitterTextureRotation: 0 + - _GlitterUV: 0 + - _GlitterUseNormals: 0 + - _GlitterUseSurfaceColor: 0 + - _GlobalMaskBackface_0: 0 + - _GlobalMaskBackface_1: 0 + - _GlobalMaskBackface_10: 0 + - _GlobalMaskBackface_11: 0 + - _GlobalMaskBackface_12: 0 + - _GlobalMaskBackface_13: 0 + - _GlobalMaskBackface_14: 0 + - _GlobalMaskBackface_15: 0 + - _GlobalMaskBackface_2: 0 + - _GlobalMaskBackface_3: 0 + - _GlobalMaskBackface_4: 0 + - _GlobalMaskBackface_5: 0 + - _GlobalMaskBackface_6: 0 + - _GlobalMaskBackface_7: 0 + - _GlobalMaskBackface_8: 0 + - _GlobalMaskBackface_9: 0 + - _GlobalMaskCamera_0: 0 + - _GlobalMaskCamera_1: 0 + - _GlobalMaskCamera_10: 0 + - _GlobalMaskCamera_11: 0 + - _GlobalMaskCamera_12: 0 + - _GlobalMaskCamera_13: 0 + - _GlobalMaskCamera_14: 0 + - _GlobalMaskCamera_15: 0 + - _GlobalMaskCamera_2: 0 + - _GlobalMaskCamera_3: 0 + - _GlobalMaskCamera_4: 0 + - _GlobalMaskCamera_5: 0 + - _GlobalMaskCamera_6: 0 + - _GlobalMaskCamera_7: 0 + - _GlobalMaskCamera_8: 0 + - _GlobalMaskCamera_9: 0 + - _GlobalMaskDistanceBlendType_0: 0 + - _GlobalMaskDistanceBlendType_1: 0 + - _GlobalMaskDistanceBlendType_10: 0 + - _GlobalMaskDistanceBlendType_11: 0 + - _GlobalMaskDistanceBlendType_12: 0 + - _GlobalMaskDistanceBlendType_13: 0 + - _GlobalMaskDistanceBlendType_14: 0 + - _GlobalMaskDistanceBlendType_15: 0 + - _GlobalMaskDistanceBlendType_2: 0 + - _GlobalMaskDistanceBlendType_3: 0 + - _GlobalMaskDistanceBlendType_4: 0 + - _GlobalMaskDistanceBlendType_5: 0 + - _GlobalMaskDistanceBlendType_6: 0 + - _GlobalMaskDistanceBlendType_7: 0 + - _GlobalMaskDistanceBlendType_8: 0 + - _GlobalMaskDistanceBlendType_9: 0 + - _GlobalMaskDistanceEnable_0: 0 + - _GlobalMaskDistanceEnable_1: 0 + - _GlobalMaskDistanceEnable_10: 0 + - _GlobalMaskDistanceEnable_11: 0 + - _GlobalMaskDistanceEnable_12: 0 + - _GlobalMaskDistanceEnable_13: 0 + - _GlobalMaskDistanceEnable_14: 0 + - _GlobalMaskDistanceEnable_15: 0 + - _GlobalMaskDistanceEnable_2: 0 + - _GlobalMaskDistanceEnable_3: 0 + - _GlobalMaskDistanceEnable_4: 0 + - _GlobalMaskDistanceEnable_5: 0 + - _GlobalMaskDistanceEnable_6: 0 + - _GlobalMaskDistanceEnable_7: 0 + - _GlobalMaskDistanceEnable_8: 0 + - _GlobalMaskDistanceEnable_9: 0 + - _GlobalMaskDistanceMaxAlpha_0: 1 + - _GlobalMaskDistanceMaxAlpha_1: 1 + - _GlobalMaskDistanceMaxAlpha_10: 1 + - _GlobalMaskDistanceMaxAlpha_11: 1 + - _GlobalMaskDistanceMaxAlpha_12: 1 + - _GlobalMaskDistanceMaxAlpha_13: 1 + - _GlobalMaskDistanceMaxAlpha_14: 1 + - _GlobalMaskDistanceMaxAlpha_15: 1 + - _GlobalMaskDistanceMaxAlpha_2: 1 + - _GlobalMaskDistanceMaxAlpha_3: 1 + - _GlobalMaskDistanceMaxAlpha_4: 1 + - _GlobalMaskDistanceMaxAlpha_5: 1 + - _GlobalMaskDistanceMaxAlpha_6: 1 + - _GlobalMaskDistanceMaxAlpha_7: 1 + - _GlobalMaskDistanceMaxAlpha_8: 1 + - _GlobalMaskDistanceMaxAlpha_9: 1 + - _GlobalMaskDistanceMax_0: 2 + - _GlobalMaskDistanceMax_1: 2 + - _GlobalMaskDistanceMax_10: 2 + - _GlobalMaskDistanceMax_11: 2 + - _GlobalMaskDistanceMax_12: 2 + - _GlobalMaskDistanceMax_13: 2 + - _GlobalMaskDistanceMax_14: 2 + - _GlobalMaskDistanceMax_15: 2 + - _GlobalMaskDistanceMax_2: 2 + - _GlobalMaskDistanceMax_3: 2 + - _GlobalMaskDistanceMax_4: 2 + - _GlobalMaskDistanceMax_5: 2 + - _GlobalMaskDistanceMax_6: 2 + - _GlobalMaskDistanceMax_7: 2 + - _GlobalMaskDistanceMax_8: 2 + - _GlobalMaskDistanceMax_9: 2 + - _GlobalMaskDistanceMinAlpha_0: 0 + - _GlobalMaskDistanceMinAlpha_1: 0 + - _GlobalMaskDistanceMinAlpha_10: 0 + - _GlobalMaskDistanceMinAlpha_11: 0 + - _GlobalMaskDistanceMinAlpha_12: 0 + - _GlobalMaskDistanceMinAlpha_13: 0 + - _GlobalMaskDistanceMinAlpha_14: 0 + - _GlobalMaskDistanceMinAlpha_15: 0 + - _GlobalMaskDistanceMinAlpha_2: 0 + - _GlobalMaskDistanceMinAlpha_3: 0 + - _GlobalMaskDistanceMinAlpha_4: 0 + - _GlobalMaskDistanceMinAlpha_5: 0 + - _GlobalMaskDistanceMinAlpha_6: 0 + - _GlobalMaskDistanceMinAlpha_7: 0 + - _GlobalMaskDistanceMinAlpha_8: 0 + - _GlobalMaskDistanceMinAlpha_9: 0 + - _GlobalMaskDistanceMin_0: 1 + - _GlobalMaskDistanceMin_1: 1 + - _GlobalMaskDistanceMin_10: 1 + - _GlobalMaskDistanceMin_11: 1 + - _GlobalMaskDistanceMin_12: 1 + - _GlobalMaskDistanceMin_13: 1 + - _GlobalMaskDistanceMin_14: 1 + - _GlobalMaskDistanceMin_15: 1 + - _GlobalMaskDistanceMin_2: 1 + - _GlobalMaskDistanceMin_3: 1 + - _GlobalMaskDistanceMin_4: 1 + - _GlobalMaskDistanceMin_5: 1 + - _GlobalMaskDistanceMin_6: 1 + - _GlobalMaskDistanceMin_7: 1 + - _GlobalMaskDistanceMin_8: 1 + - _GlobalMaskDistanceMin_9: 1 + - _GlobalMaskDistanceType_0: 1 + - _GlobalMaskDistanceType_1: 1 + - _GlobalMaskDistanceType_10: 1 + - _GlobalMaskDistanceType_11: 1 + - _GlobalMaskDistanceType_12: 1 + - _GlobalMaskDistanceType_13: 1 + - _GlobalMaskDistanceType_14: 1 + - _GlobalMaskDistanceType_15: 1 + - _GlobalMaskDistanceType_2: 1 + - _GlobalMaskDistanceType_3: 1 + - _GlobalMaskDistanceType_4: 1 + - _GlobalMaskDistanceType_5: 1 + - _GlobalMaskDistanceType_6: 1 + - _GlobalMaskDistanceType_7: 1 + - _GlobalMaskDistanceType_8: 1 + - _GlobalMaskDistanceType_9: 1 + - _GlobalMaskMirrorVisibilityMode: 1 + - _GlobalMaskMirror_0: 0 + - _GlobalMaskMirror_1: 0 + - _GlobalMaskMirror_10: 0 + - _GlobalMaskMirror_11: 0 + - _GlobalMaskMirror_12: 0 + - _GlobalMaskMirror_13: 0 + - _GlobalMaskMirror_14: 0 + - _GlobalMaskMirror_15: 0 + - _GlobalMaskMirror_2: 0 + - _GlobalMaskMirror_3: 0 + - _GlobalMaskMirror_4: 0 + - _GlobalMaskMirror_5: 0 + - _GlobalMaskMirror_6: 0 + - _GlobalMaskMirror_7: 0 + - _GlobalMaskMirror_8: 0 + - _GlobalMaskMirror_9: 0 + - _GlobalMaskModifiersBackfaceEnable: 0 + - _GlobalMaskModifiersCameraEnable: 0 + - _GlobalMaskModifiersCameraInfo: 0 + - _GlobalMaskModifiersDistanceEnable: 0 + - _GlobalMaskModifiersMirrorEnable: 0 + - _GlobalMaskOptionsEnable: 0 + - _GlobalMaskOptionsType: 0 + - _GlobalMaskSlider_0: 0 + - _GlobalMaskSlider_1: 0 + - _GlobalMaskSlider_10: 0 + - _GlobalMaskSlider_11: 0 + - _GlobalMaskSlider_12: 0 + - _GlobalMaskSlider_13: 0 + - _GlobalMaskSlider_14: 0 + - _GlobalMaskSlider_15: 0 + - _GlobalMaskSlider_2: 0 + - _GlobalMaskSlider_3: 0 + - _GlobalMaskSlider_4: 0 + - _GlobalMaskSlider_5: 0 + - _GlobalMaskSlider_6: 0 + - _GlobalMaskSlider_7: 0 + - _GlobalMaskSlider_8: 0 + - _GlobalMaskSlider_9: 0 + - _GlobalMaskTexture0Split: 0 + - _GlobalMaskTexture0UV: 0 + - _GlobalMaskTexture1Split: 0 + - _GlobalMaskTexture1UV: 0 + - _GlobalMaskTexture2Split: 0 + - _GlobalMaskTexture2UV: 0 + - _GlobalMaskTexture3Split: 0 + - _GlobalMaskTexture3UV: 0 + - _GlobalMaskTexturesEnable: 0 + - _GlobalMaskToggleOff_0: 0 + - _GlobalMaskToggleOff_1: 0 + - _GlobalMaskToggleOff_10: 0 + - _GlobalMaskToggleOff_11: 0 + - _GlobalMaskToggleOff_12: 0 + - _GlobalMaskToggleOff_13: 0 + - _GlobalMaskToggleOff_14: 0 + - _GlobalMaskToggleOff_15: 0 + - _GlobalMaskToggleOff_2: 0 + - _GlobalMaskToggleOff_3: 0 + - _GlobalMaskToggleOff_4: 0 + - _GlobalMaskToggleOff_5: 0 + - _GlobalMaskToggleOff_6: 0 + - _GlobalMaskToggleOff_7: 0 + - _GlobalMaskToggleOff_8: 0 + - _GlobalMaskToggleOff_9: 0 + - _GlobalMaskToggleOn_0: 0 + - _GlobalMaskToggleOn_1: 0 + - _GlobalMaskToggleOn_10: 0 + - _GlobalMaskToggleOn_11: 0 + - _GlobalMaskToggleOn_12: 0 + - _GlobalMaskToggleOn_13: 0 + - _GlobalMaskToggleOn_14: 0 + - _GlobalMaskToggleOn_15: 0 + - _GlobalMaskToggleOn_2: 0 + - _GlobalMaskToggleOn_3: 0 + - _GlobalMaskToggleOn_4: 0 + - _GlobalMaskToggleOn_5: 0 + - _GlobalMaskToggleOn_6: 0 + - _GlobalMaskToggleOn_7: 0 + - _GlobalMaskToggleOn_8: 0 + - _GlobalMaskToggleOn_9: 0 + - _GlobalMaskVertexColorAlpha: 0 + - _GlobalMaskVertexColorAlphaBlendType: 2 + - _GlobalMaskVertexColorBlue: 0 + - _GlobalMaskVertexColorBlueBlendType: 2 + - _GlobalMaskVertexColorGreen: 0 + - _GlobalMaskVertexColorGreenBlendType: 2 + - _GlobalMaskVertexColorLinearSpace: 1 + - _GlobalMaskVertexColorRed: 0 + - _GlobalMaskVertexColorRedBlendType: 2 + - _GlobalThemeHue0: 0 + - _GlobalThemeHue1: 0 + - _GlobalThemeHue2: 0 + - _GlobalThemeHue3: 0 + - _GlobalThemeHueSpeed0: 0 + - _GlobalThemeHueSpeed1: 0 + - _GlobalThemeHueSpeed2: 0 + - _GlobalThemeHueSpeed3: 0 + - _GlobalThemeSaturation0: 0 + - _GlobalThemeSaturation1: 0 + - _GlobalThemeSaturation2: 0 + - _GlobalThemeSaturation3: 0 + - _GlobalThemeValue0: 0 + - _GlobalThemeValue1: 0 + - _GlobalThemeValue2: 0 + - _GlobalThemeValue3: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GreenAlphaAdd: 0 + - _GreenColorThemeIndex: 0 + - _GreenTextureStochastic: 0 + - _GreenTextureUV: 0 + - _HeightMapUV: 0 + - _HeightOffset: 0 + - _HeightStepsMax: 128 + - _HeightStepsMin: 10 + - _HeightStrength: 0.005 + - _HeightmaskChannel: 0 + - _HeightmaskInvert: 0 + - _HeightmaskUV: 0 + - _HighColorThemeIndex: 0 + - _HighColor_Power: 0.2 + - _HighColor_TexUV: 0 + - _IgnoreCastedShadows: 0 + - _IgnoreFog: 0 + - _Is_BlendAddToHiColor: 0 + - _Is_LightColor_Ap_Rim2Light: 1 + - _Is_LightColor_Ap_RimLight: 1 + - _Is_LightColor_Rim2Light: 1 + - _Is_LightColor_RimLight: 1 + - _Is_NormalMapToRim2Light: 1 + - _Is_NormalMapToRimLight: 1 + - _Is_SpecularToHighColor: 0 + - _LTCGIEnabled: 0 + - _LTCGI_AnimToggle: 1 + - _LTCGI_Attribution: 0 + - _LTCGI_DiffuseColorThemeIndex: 0 + - _LTCGI_Metallic: 0 + - _LTCGI_Smoothness: 0 + - _LTCGI_SpecularColorThemeIndex: 0 + - _LTCGI_UseEO: 0 + - _LTCGI_UsePBR: 1 + - _Layer1Strength: 1 + - _Layer2Size: 0 + - _Layer2Strength: 0 + - _Length: 0 + - _LightDataAOGlobalMaskBlendTypeR: 2 + - _LightDataAOGlobalMaskR: 0 + - _LightDataAOStrengthA: 0 + - _LightDataAOStrengthB: 0 + - _LightDataAOStrengthG: 0 + - _LightDataAOStrengthR: 1 + - _LightDataDebugEnabled: 0 + - _LightDataDetailShadowGlobalMaskBlendTypeR: 2 + - _LightDataDetailShadowGlobalMaskR: 0 + - _LightDataSDFBlendY: 1 + - _LightDataSDFMapLOD: 0 + - _LightDataSDFMapUV: 0 + - _LightDataShadowMaskGlobalMaskBlendTypeR: 2 + - _LightDataShadowMaskGlobalMaskR: 0 + - _LightDirection_MaskOn: 0 + - _LightDirection_MaskOn2: 0 + - _LightingAOMapsUV: 0 + - _LightingAddDetailShadowStrengthA: 0 + - _LightingAddDetailShadowStrengthB: 0 + - _LightingAddDetailShadowStrengthG: 0 + - _LightingAddDetailShadowStrengthR: 1 + - _LightingAdditiveCastedShadows: 1 + - _LightingAdditiveEnable: 1 + - _LightingAdditiveGradientEnd: 0.5 + - _LightingAdditiveGradientStart: 0 + - _LightingAdditiveLimit: 1 + - _LightingAdditiveLimited: 1 + - _LightingAdditiveMonochromatic: 0 + - _LightingAdditivePassthrough: 0.5 + - _LightingAdditiveType: 3 + - _LightingCap: 1 + - _LightingCapEnabled: 1 + - _LightingCastedShadows: 0 + - _LightingColorMode: 0 + - _LightingDebugVisualize: 0 + - _LightingDetailShadowMapsUV: 0 + - _LightingDetailShadowStrengthA: 0 + - _LightingDetailShadowStrengthB: 0 + - _LightingDetailShadowStrengthG: 0 + - _LightingDetailShadowStrengthR: 1 + - _LightingDirectionMode: 0 + - _LightingEnableLightVolumes: 1 + - _LightingForceColorEnabled: 0 + - _LightingForcedColorThemeIndex: 0 + - _LightingGradientEnd: 0.5 + - _LightingGradientStart: 0 + - _LightingIgnoreAmbientColor: 1 + - _LightingIndirectUsesNormals: 0 + - _LightingMapMode: 0 + - _LightingMinLightBrightness: 0 + - _LightingMirrorVertexLightingEnabled: 1 + - _LightingMode: 6 + - _LightingMonochromatic: 0 + - _LightingMulitlayerNonLinear: 1 + - _LightingShadowMaskStrengthA: 0 + - _LightingShadowMaskStrengthB: 0 + - _LightingShadowMaskStrengthG: 0 + - _LightingShadowMaskStrengthR: 1 + - _LightingShadowMasksUV: 0 + - _LightingVertexLightingEnabled: 1 + - _LightingViewDirOffsetPitch: 0 + - _LightingViewDirOffsetYaw: 0 + - _LightingWrappedNormalization: 0 + - _LightingWrappedWrap: 0 + - _LineColorThemeIndex: 0 + - _LineWidth: 1 + - _LookAtAlphaAlpha: 1 + - _LookAtAlphaMaskEnabled: 0 + - _LookAtAlphaTargetUp: 0 + - _LookAtBlueAlpha: 1 + - _LookAtBlueMaskEnabled: 0 + - _LookAtBlueTargetUp: 0 + - _LookAtGreenAlpha: 1 + - _LookAtGreenMaskEnabled: 0 + - _LookAtGreenTargetUp: 0 + - _LookAtMaskUV: 0 + - _LookAtRedAlpha: 1 + - _LookAtRedMaskEnabled: 1 + - _LookAtRedTargetUp: 0 + - _LookAtVisibilityEnabled: 0 + - _LookAtVisibilityMirror: 0 + - _LookAtVisibilityMode: 1 + - _LookAtVisibilityVRCCameraDesktop: 1 + - _LookAtVisibilityVRCCameraScreenshot: 1 + - _LookAtVisibilityVRCCameraVR: 1 + - _LookAtVisibilityVRCMirrorDesktop: 1 + - _LookAtVisibilityVRCMirrorVR: 1 + - _LookAtVisibilityVRCRegular: 1 + - _MainALHueShiftBand: 0 + - _MainALHueShiftCTIndex: 0 + - _MainAlphaMaskMode: 2 + - _MainBrightness: 0 + - _MainBrightnessGlobalMask: 0 + - _MainBrightnessGlobalMaskBlendType: 2 + - _MainColorAdjustTextureUV: 0 + - _MainColorAdjustToggle: 0 + - _MainGamma: 1 + - _MainGammaGlobalMask: 0 + - _MainGammaGlobalMaskBlendType: 2 + - _MainGradationStrength: 0 + - _MainHueALCTEnabled: 0 + - _MainHueALMotionSpeed: 1 + - _MainHueGlobalMask: 0 + - _MainHueGlobalMaskBlendType: 2 + - _MainHueShift: 0 + - _MainHueShiftColorSpace: 0 + - _MainHueShiftReplace: 1 + - _MainHueShiftSelectOrShift: 1 + - _MainHueShiftSpeed: 0 + - _MainHueShiftToggle: 0 + - _MainIgnoreTexAlpha: 0 + - _MainPixelMode: 0 + - _MainSaturationGlobalMask: 0 + - _MainSaturationGlobalMaskBlendType: 2 + - _MainTexStochastic: 0 + - _MainTexUV: 0 + - _MainUseVertexColorAlpha: 0 + - _MainVertexColoring: 0 + - _MainVertexColoringEnabled: 0 + - _MainVertexColoringLinearSpace: 1 + - _Matcap0ALAlphaAddBand: 0 + - _Matcap0ALChronoPanBand: 0 + - _Matcap0ALChronoPanSpeed: 0 + - _Matcap0ALChronoPanType: 0 + - _Matcap0ALEmissionAddBand: 0 + - _Matcap0ALEnabled: 0 + - _Matcap0ALIntensityAddBand: 0 + - _Matcap0CircleMaskBlur: 0.1 + - _Matcap0CircleMaskBorder: 0.45 + - _Matcap0CircleMaskEnabled: 0 + - _Matcap0CustomNormal: 0 + - _Matcap0NormalMapScale: 1 + - _Matcap0NormalMapUV: 0 + - _Matcap1ALAlphaAddBand: 0 + - _Matcap1ALChronoPanBand: 0 + - _Matcap1ALChronoPanSpeed: 0 + - _Matcap1ALChronoPanType: 0 + - _Matcap1ALEmissionAddBand: 0 + - _Matcap1ALEnabled: 0 + - _Matcap1ALIntensityAddBand: 0 + - _Matcap1CustomNormal: 0 + - _Matcap1NormalMapScale: 1 + - _Matcap1NormalMapUV: 0 + - _Matcap2ALAlphaAddBand: 0 + - _Matcap2ALChronoPanBand: 0 + - _Matcap2ALChronoPanSpeed: 0 + - _Matcap2ALChronoPanType: 0 + - _Matcap2ALEmissionAddBand: 0 + - _Matcap2ALEnabled: 0 + - _Matcap2ALIntensityAddBand: 0 + - _Matcap2Add: 0 + - _Matcap2AddToLight: 0 + - _Matcap2AlphaOverride: 0 + - _Matcap2ApplyToAlphaBlendType: 0 + - _Matcap2ApplyToAlphaBlending: 1 + - _Matcap2ApplyToAlphaEnabled: 0 + - _Matcap2ApplyToAlphaSourceBlend: 0 + - _Matcap2BaseColorMix: 0 + - _Matcap2Border: 0.5 + - _Matcap2CircleMaskBlur: 0.1 + - _Matcap2CircleMaskBorder: 0.45 + - _Matcap2CircleMaskEnabled: 0 + - _Matcap2ColorThemeIndex: 0 + - _Matcap2CustomNormal: 0 + - _Matcap2EmissionStrength: 0 + - _Matcap2Enable: 0 + - _Matcap2HueSelectOrShift: 1 + - _Matcap2HueShift: 0 + - _Matcap2HueShiftColorSpace: 0 + - _Matcap2HueShiftEnabled: 0 + - _Matcap2HueShiftSpeed: 0 + - _Matcap2Intensity: 1 + - _Matcap2LightColorMix: 0 + - _Matcap2LightMask: 0 + - _Matcap2MaskChannel: 0 + - _Matcap2MaskGlobalMask: 0 + - _Matcap2MaskGlobalMaskBlendType: 2 + - _Matcap2MaskInvert: 0 + - _Matcap2MaskSmoothnessApply: 0 + - _Matcap2MaskSmoothnessChannel: 3 + - _Matcap2MaskUV: 0 + - _Matcap2Mixed: 0 + - _Matcap2Multiply: 0 + - _Matcap2Normal: 1 + - _Matcap2NormalMapScale: 1 + - _Matcap2NormalMapUV: 0 + - _Matcap2Replace: 0 + - _Matcap2Rotation: 0 + - _Matcap2Screen: 0 + - _Matcap2Smoothness: 1 + - _Matcap2TPSDepthEnabled: 0 + - _Matcap2TPSMaskStrength: 1 + - _Matcap2UVMode: 1 + - _Matcap2UVToBlend: 1 + - _Matcap3ALAlphaAddBand: 0 + - _Matcap3ALChronoPanBand: 0 + - _Matcap3ALChronoPanSpeed: 0 + - _Matcap3ALChronoPanType: 0 + - _Matcap3ALEmissionAddBand: 0 + - _Matcap3ALEnabled: 0 + - _Matcap3ALIntensityAddBand: 0 + - _Matcap3Add: 0 + - _Matcap3AddToLight: 0 + - _Matcap3AlphaOverride: 0 + - _Matcap3ApplyToAlphaBlendType: 0 + - _Matcap3ApplyToAlphaBlending: 1 + - _Matcap3ApplyToAlphaEnabled: 0 + - _Matcap3ApplyToAlphaSourceBlend: 0 + - _Matcap3BaseColorMix: 0 + - _Matcap3Border: 0.5 + - _Matcap3CircleMaskBlur: 0.1 + - _Matcap3CircleMaskBorder: 0.45 + - _Matcap3CircleMaskEnabled: 0 + - _Matcap3ColorThemeIndex: 0 + - _Matcap3CustomNormal: 0 + - _Matcap3EmissionStrength: 0 + - _Matcap3Enable: 0 + - _Matcap3HueSelectOrShift: 1 + - _Matcap3HueShift: 0 + - _Matcap3HueShiftColorSpace: 0 + - _Matcap3HueShiftEnabled: 0 + - _Matcap3HueShiftSpeed: 0 + - _Matcap3Intensity: 1 + - _Matcap3LightColorMix: 0 + - _Matcap3LightMask: 0 + - _Matcap3MaskChannel: 0 + - _Matcap3MaskGlobalMask: 0 + - _Matcap3MaskGlobalMaskBlendType: 2 + - _Matcap3MaskInvert: 0 + - _Matcap3MaskSmoothnessApply: 0 + - _Matcap3MaskSmoothnessChannel: 3 + - _Matcap3MaskUV: 0 + - _Matcap3Mixed: 0 + - _Matcap3Multiply: 0 + - _Matcap3Normal: 1 + - _Matcap3NormalMapScale: 1 + - _Matcap3NormalMapUV: 0 + - _Matcap3Replace: 0 + - _Matcap3Rotation: 0 + - _Matcap3Screen: 0 + - _Matcap3Smoothness: 1 + - _Matcap3TPSDepthEnabled: 0 + - _Matcap3TPSMaskStrength: 1 + - _Matcap3UVMode: 1 + - _Matcap3UVToBlend: 1 + - _Matcap4Add: 0 + - _Matcap4AddToLight: 0 + - _Matcap4AlphaOverride: 0 + - _Matcap4ApplyToAlphaBlendType: 0 + - _Matcap4ApplyToAlphaBlending: 1 + - _Matcap4ApplyToAlphaEnabled: 0 + - _Matcap4ApplyToAlphaSourceBlend: 0 + - _Matcap4BaseColorMix: 0 + - _Matcap4Border: 0.5 + - _Matcap4CircleMaskBlur: 0.1 + - _Matcap4CircleMaskBorder: 0.45 + - _Matcap4CircleMaskEnabled: 0 + - _Matcap4ColorThemeIndex: 0 + - _Matcap4EmissionStrength: 0 + - _Matcap4Enable: 0 + - _Matcap4HueSelectOrShift: 1 + - _Matcap4HueShift: 0 + - _Matcap4HueShiftColorSpace: 0 + - _Matcap4HueShiftEnabled: 0 + - _Matcap4HueShiftSpeed: 0 + - _Matcap4Intensity: 1 + - _Matcap4LightColorMix: 0 + - _Matcap4LightMask: 0 + - _Matcap4MaskChannel: 0 + - _Matcap4MaskGlobalMask: 0 + - _Matcap4MaskGlobalMaskBlendType: 2 + - _Matcap4MaskInvert: 0 + - _Matcap4MaskSmoothnessApply: 0 + - _Matcap4MaskSmoothnessChannel: 3 + - _Matcap4MaskUV: 0 + - _Matcap4Mixed: 0 + - _Matcap4Multiply: 0 + - _Matcap4Normal: 1 + - _Matcap4Replace: 0 + - _Matcap4Rotation: 0 + - _Matcap4Screen: 0 + - _Matcap4Smoothness: 1 + - _Matcap4TPSDepthEnabled: 0 + - _Matcap4TPSMaskStrength: 1 + - _Matcap4UVMode: 1 + - _Matcap4UVToBlend: 1 + - _MatcapAdd: 0 + - _MatcapAddToLight: 0 + - _MatcapAlphaOverride: 0 + - _MatcapApplyToAlphaBlendType: 0 + - _MatcapApplyToAlphaBlending: 1 + - _MatcapApplyToAlphaEnabled: 0 + - _MatcapApplyToAlphaSourceBlend: 0 + - _MatcapBaseColorMix: 0 + - _MatcapBorder: 0.5 + - _MatcapColorThemeIndex: 0 + - _MatcapEmissionStrength: 0 + - _MatcapEnable: 0 + - _MatcapHueSelectOrShift: 1 + - _MatcapHueShift: 0 + - _MatcapHueShiftColorSpace: 0 + - _MatcapHueShiftEnabled: 0 + - _MatcapHueShiftSpeed: 0 + - _MatcapIntensity: 1 + - _MatcapLightColorMix: 0 + - _MatcapLightMask: 0 + - _MatcapMaskChannel: 0 + - _MatcapMaskGlobalMask: 0 + - _MatcapMaskGlobalMaskBlendType: 2 + - _MatcapMaskInvert: 0 + - _MatcapMaskSmoothnessApply: 0 + - _MatcapMaskSmoothnessChannel: 3 + - _MatcapMaskUV: 0 + - _MatcapMixed: 0 + - _MatcapMultiply: 0 + - _MatcapNormal: 1 + - _MatcapReplace: 1 + - _MatcapRotation: 0 + - _MatcapScreen: 0 + - _MatcapSmoothness: 1 + - _MatcapTPSDepthEnabled: 0 + - _MatcapTPSMaskStrength: 1 + - _MatcapUVMode: 1 + - _MatcapUVToBlend: 1 + - _Metallic: 0 + - _Mirror: 0 + - _MirrorColorThemeIndex: 0 + - _MirrorTextureBlendType: 0 + - _MirrorTextureEnabled: 0 + - _MirrorTextureForceEnabled: 0 + - _MirrorTextureUV: 0 + - _MochieBRDF: 1 + - _MochieForceFallback: 0 + - _MochieGSAAEnabled: 1 + - _MochieLitFallback: 1 + - _MochieMetallicGlobalMask: 0 + - _MochieMetallicGlobalMaskBlendType: 2 + - _MochieMetallicMapInvert: 0 + - _MochieMetallicMapsMetallicChannel: 0 + - _MochieMetallicMapsReflectionMaskChannel: 2 + - _MochieMetallicMapsRoughnessChannel: 1 + - _MochieMetallicMapsSpecularMaskChannel: 3 + - _MochieMetallicMapsStochastic: 0 + - _MochieMetallicMapsUV: 0 + - _MochieMetallicMasksUV: 0 + - _MochieMetallicMultiplier: 1 + - _MochieReflectionMaskInvert: 0 + - _MochieReflectionStrength: 1 + - _MochieReflectionStrengthGlobalMask: 0 + - _MochieReflectionStrengthGlobalMaskBlendType: 2 + - _MochieReflectionTintThemeIndex: 0 + - _MochieRoughnessMapInvert: 0 + - _MochieRoughnessMultiplier: 1 + - _MochieRoughnessMultiplier2: 1 + - _MochieSmoothnessGlobalMask: 0 + - _MochieSmoothnessGlobalMaskBlendType: 2 + - _MochieSpecularMaskInvert: 0 + - _MochieSpecularStrength: 1 + - _MochieSpecularStrength2: 1 + - _MochieSpecularStrengthGlobalMask: 0 + - _MochieSpecularStrengthGlobalMaskBlendType: 2 + - _MochieSpecularTintThemeIndex: 0 + - _Mode: 0 + - _ModelAngleMax: 90 + - _ModelAngleMin: 45 + - _MultilayerMathBlurMapUV: 0 + - _NormalCorrect: 0 + - _NormalCorrectAmount: 0.9 + - _OcclusionStrength: 1 + - _OffsetFactor: 0 + - _OffsetUnits: 0 + - _Offset_Z: 0 + - _OrifaceEnabled: 0 + - _OrificeChannel: 0 + - _OutlineALColorEnabled: 0 + - _OutlineAlphaDistanceFade: 0 + - _OutlineAlphaDistanceFadeMax: 0 + - _OutlineAlphaDistanceFadeMaxAlpha: 1 + - _OutlineAlphaDistanceFadeMin: 0 + - _OutlineAlphaDistanceFadeMinAlpha: 0 + - _OutlineAlphaDistanceFadeType: 1 + - _OutlineBlendOp: 0 + - _OutlineBlendOpAlpha: 4 + - _OutlineClipAtZeroWidth: 1 + - _OutlineCull: 1 + - _OutlineDstBlend: 0 + - _OutlineDstBlendAlpha: 0 + - _OutlineEmission: 0 + - _OutlineExpansionMode: 1 + - _OutlineFixWidth: 0.5 + - _OutlineFixedSize: 1 + - _OutlineGamma: 1 + - _OutlineHue: 0 + - _OutlineHueOffsetSpeed: 0 + - _OutlineHueShift: 0 + - _OutlineLit: 1 + - _OutlineMaskChannel: 0 + - _OutlineMaskUV: 0 + - _OutlineOverrideAlpha: 0 + - _OutlineRimLightBlend: 0 + - _OutlineSaturation: 1 + - _OutlineShadowStrength: 0 + - _OutlineSpace: 0 + - _OutlineSrcBlend: 1 + - _OutlineSrcBlendAlpha: 1 + - _OutlineStencilBackCompareFunction: 8 + - _OutlineStencilBackFailOp: 0 + - _OutlineStencilBackPassOp: 0 + - _OutlineStencilBackZFailOp: 0 + - _OutlineStencilCompareFunction: 8 + - _OutlineStencilFailOp: 0 + - _OutlineStencilFrontCompareFunction: 8 + - _OutlineStencilFrontFailOp: 0 + - _OutlineStencilFrontPassOp: 0 + - _OutlineStencilFrontZFailOp: 0 + - _OutlineStencilPassOp: 0 + - _OutlineStencilReadMask: 255 + - _OutlineStencilRef: 0 + - _OutlineStencilType: 0 + - _OutlineStencilWriteMask: 255 + - _OutlineStencilZFailOp: 0 + - _OutlineTextureUV: 0 + - _OutlineTintMix: 0 + - _OutlineUseVertexColorNormals: 0 + - _OutlineValue: 1 + - _OutlineVertexColorMask: 0 + - _OutlineVertexColorMaskStrength: 1 + - _OutlineZOffsetChannel: 0 + - _OutlineZOffsetInvertMaskChannel: 0 + - _OutlineZOffsetMaskStrength: 1 + - _OutlineZOffsetVertexColor: 0 + - _OutlineZOffsetVertexColorStrength: 1 + - _OutlineZTest: 4 + - _OutlineZWrite: 1 + - _OutlinesMaxDistance: 1 + - _PBRNormalSelect: 1 + - _PBRSplitMaskSample: 0 + - _PBRSplitMaskStochastic: 0 + - _PPBrightness: 1 + - _PPContrast: 1 + - _PPEmissionMultiplier: 1 + - _PPFinalColorMultiplier: 1 + - _PPHDR: 0 + - _PPHelp: 0 + - _PPHue: 0 + - _PPHueShiftColorSpace: 0 + - _PPLightingAddition: 0 + - _PPLightingMultiplier: 1 + - _PPLightness: 0 + - _PPMaskChannel: 0 + - _PPMaskInvert: 0 + - _PPMaskUV: 0 + - _PPPosterization: 0 + - _PPPosterizationAmount: 4 + - _PPSaturation: 1 + - _PanoUseBothEyes: 1 + - _Parallax: 0.02 + - _ParallaxAnisotropic: 1 + - _ParallaxAnisotropyScale: 1 + - _ParallaxBinarySteps: 8 + - _ParallaxConeRatio: 1 + - _ParallaxInternalBlendMode: 0 + - _ParallaxInternalHeightFromAlpha: 0 + - _ParallaxInternalHeightmapMode: 0 + - _ParallaxInternalHueSelectOrShift: 1 + - _ParallaxInternalHueShift: 0 + - _ParallaxInternalHueShiftColorSpace: 0 + - _ParallaxInternalHueShiftEnabled: 0 + - _ParallaxInternalHueShiftPerLevel: 0 + - _ParallaxInternalHueShiftSpeed: 0 + - _ParallaxInternalIterations: 4 + - _ParallaxInternalMapMaskChannel: 0 + - _ParallaxInternalMapMaskUV: 0 + - _ParallaxInternalMaxColorThemeIndex: 0 + - _ParallaxInternalMaxDepth: 0.1 + - _ParallaxInternalMaxFade: 0.1 + - _ParallaxInternalMinColorThemeIndex: 0 + - _ParallaxInternalMinDepth: 0 + - _ParallaxInternalMinFade: 1 + - _ParallaxInternalSurfaceBlendMode: 8 + - _ParallaxMipBias: 0 + - _ParallaxRelaxedCone: 1 + - _ParallaxUV: 0 + - _PathALAutoCorrelator: 0 + - _PathALAutoCorrelatorA: 0 + - _PathALAutoCorrelatorB: 0 + - _PathALAutoCorrelatorG: 0 + - _PathALAutoCorrelatorMode: 0 + - _PathALAutoCorrelatorR: 0 + - _PathALCCA: 0 + - _PathALCCB: 0 + - _PathALCCG: 0 + - _PathALCCR: 0 + - _PathALChrono: 0 + - _PathALColorChord: 0 + - _PathALEmissionOffset: 0 + - _PathALHistory: 0 + - _PathALHistoryA: 0 + - _PathALHistoryB: 0 + - _PathALHistoryBandA: 0 + - _PathALHistoryBandB: 0 + - _PathALHistoryBandG: 0 + - _PathALHistoryBandR: 0 + - _PathALHistoryG: 0 + - _PathALHistoryMode: 0 + - _PathALHistoryR: 0 + - _PathALTimeOffset: 0 + - _PathALWidthOffset: 0 + - _PathChronoBandA: 0 + - _PathChronoBandB: 0 + - _PathChronoBandG: 0 + - _PathChronoBandR: 0 + - _PathChronoSpeedA: 0 + - _PathChronoSpeedB: 0 + - _PathChronoSpeedG: 0 + - _PathChronoSpeedR: 0 + - _PathChronoTypeA: 0 + - _PathChronoTypeB: 0 + - _PathChronoTypeG: 0 + - _PathChronoTypeR: 0 + - _PathColorAThemeIndex: 0 + - _PathColorBThemeIndex: 0 + - _PathColorGThemeIndex: 0 + - _PathColorRThemeIndex: 0 + - _PathGradientType: 0 + - _PathPointSampling: 1 + - _PathSource: 0 + - _PathSourceDirA: 0 + - _PathSourceDirB: 0 + - _PathSourceDirG: 0 + - _PathSourceDirR: 0 + - _PathSurfaceBlendMode: 0 + - _PathTypeA: 2 + - _PathTypeB: 2 + - _PathTypeG: 2 + - _PathTypeR: 2 + - _PathingColorMapUV: 0 + - _PathingMapUV: 0 + - _PathingOverrideAlpha: 0 + - _PathingUVSelect: 0 + - _PenetratorEnabled: 0 + - _PoiGSAAThreshold: 0.1 + - _PoiGSAAVariance: 0.15 + - _PoiInternalParallax: 0 + - _PoiParallax: 0 + - _PoiUTSStyleOutlineBlend: 0 + - _PolarLengthScale: 1 + - _PolarRadialScale: 1 + - _PolarSpiralPower: 0 + - _PolarUV: 0 + - _PostProcess: 0 + - _RGBAAlphaBlendType: 0 + - _RGBAAlphaEmissionStrength: 0 + - _RGBAAlphaEnable: 0 + - _RGBAAlphaMetallicInvert: 0 + - _RGBAAlphaPBRSplitMaskSample: 0 + - _RGBAAlphaPBRSplitMaskStochastic: 0 + - _RGBAAlphaPBRUV: 0 + - _RGBAAlphaSmoothnessInvert: 0 + - _RGBABlueBlendType: 0 + - _RGBABlueEmissionStrength: 0 + - _RGBABlueEnable: 0 + - _RGBABlueMetallicInvert: 0 + - _RGBABluePBRSplitMaskSample: 0 + - _RGBABluePBRSplitMaskStochastic: 0 + - _RGBABluePBRUV: 0 + - _RGBABlueSmoothnessInvert: 0 + - _RGBAGreenBlendType: 0 + - _RGBAGreenEmissionStrength: 0 + - _RGBAGreenEnable: 0 + - _RGBAGreenMetallicInvert: 0 + - _RGBAGreenPBRSplitMaskSample: 0 + - _RGBAGreenPBRSplitMaskStochastic: 0 + - _RGBAGreenPBRUV: 0 + - _RGBAGreenSmoothnessInvert: 0 + - _RGBAMetallicMapsStochastic: 0 + - _RGBAMetallicMapsUV: 0 + - _RGBAPBRAlphaEnabled: 0 + - _RGBAPBRBlueEnabled: 0 + - _RGBAPBRGreenEnabled: 0 + - _RGBAPBRRedEnabled: 0 + - _RGBARedBlendType: 0 + - _RGBARedEmissionStrength: 0 + - _RGBARedEnable: 0 + - _RGBARedMetallicInvert: 0 + - _RGBARedPBRSplitMaskSample: 0 + - _RGBARedPBRSplitMaskStochastic: 0 + - _RGBARedPBRUV: 0 + - _RGBARedSmoothnessInvert: 0 + - _RGBASmoothnessMapsStochastic: 0 + - _RGBASmoothnessMapsUV: 0 + - _RGBMaskEnabled: 0 + - _RGBMaskType: 0 + - _RGBMaskUV: 0 + - _RalivAdvancedHelp: 0 + - _RalivDPSDisableShadowCaster: 1 + - _RalivDPSDisableShadowCasterHelp: 0 + - _RalivHelp: 0 + - _ReCurvature: 0 + - _RedAlphaAdd: 0 + - _RedColorThemeIndex: 0 + - _RedTextureStochastic: 0 + - _RedTextureUV: 0 + - _RefSpecFresnelStrength: 0.5 + - _Reflectance: 0.04 + - _ReflectionAnisotropicStretch: 1 + - _ReflectionApplyTransparency: 1 + - _ReflectionBlendMode: 1 + - _ReflectionCubeEnableLighting: 1 + - _ReflectionCubeOverride: 0 + - _ReflectionNormalStrength: 1 + - _RenderingAOBlockerEnabled: 0 + - _RenderingAOBlockerFlipNormal: 0 + - _RenderingAOBlockerNote: 0 + - _RenderingAOBlockerUVChannel: 0 + - _RenderingEarlyZEnabled: 0 + - _RenderingReduceClipDistance: 0 + - _RgbAlphaGlobalMaskBlendType: 2 + - _RgbAlphaGlobalMaskChannel: 0 + - _RgbAlphaMaskChannel: 3 + - _RgbBlueGlobalMaskBlendType: 2 + - _RgbBlueGlobalMaskChannel: 0 + - _RgbBlueMaskChannel: 2 + - _RgbGreenGlobalMaskBlendType: 2 + - _RgbGreenGlobalMaskChannel: 0 + - _RgbGreenMaskChannel: 1 + - _RgbNormalAGlobalMaskBlendType: 2 + - _RgbNormalAGlobalMaskChannel: 0 + - _RgbNormalAMaskChannel: 3 + - _RgbNormalAScale: 0 + - _RgbNormalAStochastic: 0 + - _RgbNormalAUV: 0 + - _RgbNormalAlphaBlendMode: 0 + - _RgbNormalBGlobalMaskBlendType: 2 + - _RgbNormalBGlobalMaskChannel: 0 + - _RgbNormalBMaskChannel: 2 + - _RgbNormalBScale: 0 + - _RgbNormalBStochastic: 0 + - _RgbNormalBUV: 0 + - _RgbNormalBlueBlendMode: 0 + - _RgbNormalGGlobalMaskBlendType: 2 + - _RgbNormalGGlobalMaskChannel: 0 + - _RgbNormalGMaskChannel: 1 + - _RgbNormalGScale: 0 + - _RgbNormalGStochastic: 0 + - _RgbNormalGUV: 0 + - _RgbNormalGreenBlendMode: 0 + - _RgbNormalRGlobalMaskBlendType: 2 + - _RgbNormalRGlobalMaskChannel: 0 + - _RgbNormalRMaskChannel: 0 + - _RgbNormalRScale: 0 + - _RgbNormalRStochastic: 0 + - _RgbNormalRUV: 0 + - _RgbNormalRedBlendMode: 0 + - _RgbRedGlobalMaskBlendType: 2 + - _RgbRedGlobalMaskChannel: 0 + - _RgbRedMaskChannel: 0 + - _Rim2ApColorThemeIndex: 0 + - _Rim2ApplyAlpha: 0 + - _Rim2ApplyAlphaBlend: 1 + - _Rim2ApplyGlobalMaskBlendType: 2 + - _Rim2ApplyGlobalMaskIndex: 0 + - _Rim2BackfaceMask: 1 + - _Rim2BaseColorMix: 0 + - _Rim2BiasIntensity: 0 + - _Rim2BlendMode: 1 + - _Rim2BlendStrength: 1 + - _Rim2Blur: 0.65 + - _Rim2Border: 0.5 + - _Rim2Brightness: 1 + - _Rim2ColorTexUV: 0 + - _Rim2DirRange: 0 + - _Rim2DirStrength: 0 + - _Rim2EnableLighting: 1 + - _Rim2FresnelPower: 3.5 + - _Rim2GlobalMask: 0 + - _Rim2GlobalMaskBlendType: 2 + - _Rim2HueSelectOrShift: 1 + - _Rim2HueShift: 0 + - _Rim2HueShiftColorSpace: 0 + - _Rim2HueShiftEnabled: 0 + - _Rim2HueShiftSpeed: 0 + - _Rim2IndirBlur: 0.1 + - _Rim2IndirBorder: 0.5 + - _Rim2IndirRange: 0 + - _Rim2LightColorThemeIndex: 0 + - _Rim2Light_FeatherOff: 0 + - _Rim2Light_InsideMask: 0.0001 + - _Rim2Light_Power: 0.1 + - _Rim2LightingInvert: 0 + - _Rim2MainStrength: 0 + - _Rim2MaskChannel: 0 + - _Rim2MaskInvert: 0 + - _Rim2MaskOnlyMask: 0 + - _Rim2MaskUV: 0 + - _Rim2NormalStrength: 1 + - _Rim2Power: 1 + - _Rim2ShadowMask: 0.5 + - _Rim2ShadowMaskInvert: 0 + - _Rim2ShadowMaskRampType: 0 + - _Rim2ShadowMaskStrength: 1 + - _Rim2ShadowToggle: 0 + - _Rim2ShadowWidth: 0 + - _Rim2Sharpness: 0.25 + - _Rim2Strength: 0 + - _Rim2Style: 0 + - _Rim2TexUV: 0 + - _Rim2VRParallaxStrength: 1 + - _Rim2Width: 0.8 + - _RimApColorThemeIndex: 0 + - _RimApplyAlpha: 0 + - _RimApplyAlphaBlend: 1 + - _RimApplyGlobalMaskBlendType: 2 + - _RimApplyGlobalMaskIndex: 0 + - _RimBackfaceMask: 1 + - _RimBaseColorMix: 0 + - _RimBiasIntensity: 0 + - _RimBlendMode: 1 + - _RimBlendStrength: 1 + - _RimBlur: 0.65 + - _RimBorder: 0.5 + - _RimBrightness: 1 + - _RimColorTexUV: 0 + - _RimDirRange: 0 + - _RimDirStrength: 0 + - _RimEnableLighting: 1 + - _RimEnviroBlur: 0.7 + - _RimEnviroChannel: 0 + - _RimEnviroIntensity: 1 + - _RimEnviroMaskUV: 0 + - _RimEnviroMinBrightness: 0 + - _RimEnviroSharpness: 0 + - _RimEnviroWidth: 0.45 + - _RimFresnelPower: 3.5 + - _RimGlobalMask: 0 + - _RimGlobalMaskBlendType: 2 + - _RimHueSelectOrShift: 1 + - _RimHueShift: 0 + - _RimHueShiftColorSpace: 0 + - _RimHueShiftEnabled: 0 + - _RimHueShiftSpeed: 0 + - _RimIndirBlur: 0.1 + - _RimIndirBorder: 0.5 + - _RimIndirRange: 0 + - _RimLightColorThemeIndex: 0 + - _RimLight_FeatherOff: 0 + - _RimLight_InsideMask: 0.0001 + - _RimLight_Power: 0.1 + - _RimLightingInvert: 0 + - _RimMainStrength: 0 + - _RimMaskChannel: 0 + - _RimMaskInvert: 0 + - _RimMaskOnlyMask: 0 + - _RimMaskUV: 0 + - _RimNormalStrength: 1 + - _RimPoi2BlendMode: 0 + - _RimPoiBlendMode: 0 + - _RimPower: 1 + - _RimShadowMask: 0.5 + - _RimShadowMaskInvert: 0 + - _RimShadowMaskRampType: 0 + - _RimShadowMaskStrength: 1 + - _RimShadowToggle: 0 + - _RimShadowWidth: 0 + - _RimSharpness: 0.25 + - _RimStrength: 0 + - _RimStyle: 0 + - _RimTexUV: 0 + - _RimVRParallaxStrength: 1 + - _RimWidth: 0.8 + - _RoughnessAnisotropy: 1 + - _SDFBlur: 0.1 + - _SDFShadingTextureUV: 0 + - _SFExposureOcclusion: 0 + - _SSAOAlphaFade: 1 + - _SSAOAnimationToggle: 1 + - _SSAOApplyGlobalMaskBlendType: 0 + - _SSAOApplyGlobalMaskIndex: 0 + - _SSAOAsRamp: 0 + - _SSAOBias: 0.003 + - _SSAOBlendType: 2 + - _SSAOCenterImportance: 1 + - _SSAOColorMapUV: 0 + - _SSAOColorThemeIndex: 0 + - _SSAOCone: 0 + - _SSAODepthGetWarning: 0 + - _SSAOEnableColorTexture: 0 + - _SSAOEnableMaskTexture: 0 + - _SSAOEnabled: 0 + - _SSAOFalloffEnd: 8 + - _SSAOFalloffStart: 6 + - _SSAOGlobalMaskBlendType: 2 + - _SSAOGlobalMaskIndex: 0 + - _SSAOHideByRampedLightMap: 0 + - _SSAOIntensity: 1 + - _SSAOMaskChannel: 0 + - _SSAOMaskInvert: 0 + - _SSAOMaskUV: 0 + - _SSAOQuality: 2.4 + - _SSAORadius: 0.002 + - _SSAORandomScale: 0 + - _SSAOUseNormals: 0 + - _SSAOUseSurfaceColor: 0 + - _SSIgnoreCastedShadows: 0 + - _SSSBaseColorMix: 0 + - _SSSDistortion: 1 + - _SSSSpread: 5 + - _SSSStrength: 0.25 + - _SSSThicknessMapChannel: 0 + - _SSSThicknessMapUV: 0 + - _SSSThicknessMod: -1 + - _Saturation: 0 + - _ScrollingEmission: 0 + - _ScrollingEmission1: 0 + - _ScrollingEmission2: 0 + - _ScrollingEmission3: 0 + - _Set_HighColorMaskChannel: 1 + - _Set_HighColorMaskUV: 0 + - _Set_Rim2LightMaskChannel: 1 + - _Set_Rim2LightMaskUV: 0 + - _Set_RimLightMaskChannel: 1 + - _Set_RimLightMaskUV: 0 + - _ShadeColor_Step: 0 + - _ShaderOptimizerEnabled: 1 + - _ShaderUIWarning0: -0 + - _ShaderUIWarning1: -0 + - _ShadingEnabled: 1 + - _ShadingRampedLightMapApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapApplyGlobalMaskIndex: 0 + - _ShadingRampedLightMapInverseApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapInverseApplyGlobalMaskIndex: 0 + - _ShadingShadeMapBlendType: 0 + - _Shadow2ndBlur: 0.3 + - _Shadow2ndBorder: 0.5 + - _Shadow2ndColorTexUV: 0 + - _Shadow2ndReceive: 0 + - _Shadow3rdBlur: 0.1 + - _Shadow3rdBorder: 0.25 + - _Shadow3rdColorTexUV: 0 + - _Shadow3rdReceive: 0 + - _ShadowBlur: 0.1 + - _ShadowBorder: 0.5 + - _ShadowBorderMapToggle: 0 + - _ShadowBorderMaskLOD: 0 + - _ShadowBorderMaskUV: 0 + - _ShadowBorderRange: 0 + - _ShadowColorTexUV: 0 + - _ShadowEnvStrength: 0 + - _ShadowFlatBlur: 1 + - _ShadowFlatBorder: 1 + - _ShadowMainStrength: 0 + - _ShadowMaskType: 0 + - _ShadowOffset: 0 + - _ShadowPostAO: 0 + - _ShadowReceive: 0 + - _ShadowStrength: 1 + - _ShadowStrengthMaskUV: 0 + - _Shape1Depth: 0.1 + - _Shape1Duration: 0.1 + - _Shape2Depth: 0.2 + - _Shape2Duration: 0.1 + - _Shape3Depth: 0.3 + - _Shape3Duration: 0.1 + - _SkinThicknessMapInvert: 0 + - _SkinThicknessMapUV: 0 + - _SkinThicknessPower: 1 + - _Smoothness: 1 + - _SmoothnessTextureChannel: 0 + - _Specular2ndLayer: 0 + - _SpecularBlur: 0 + - _SpecularBorder: 0.5 + - _SpecularHighlights: 1 + - _SpecularNormalStrength: 1 + - _SpecularToon: 1 + - _SphericalDissolveClamp: 0 + - _SphericalDissolveInvert: 0 + - _SphericalDissolveRadius: 1.5 + - _Squeeze: 0 + - _SqueezeDist: 0 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _SssBumpBlur: 0.7 + - _SssScale: 1 + - _StencilBackCompareFunction: 8 + - _StencilBackFailOp: 0 + - _StencilBackPassOp: 0 + - _StencilBackZFailOp: 0 + - _StencilCompareFunction: 8 + - _StencilFailOp: 0 + - _StencilFrontCompareFunction: 8 + - _StencilFrontFailOp: 0 + - _StencilFrontPassOp: 0 + - _StencilFrontZFailOp: 0 + - _StencilPassOp: 0 + - _StencilReadMask: 255 + - _StencilRef: 0 + - _StencilType: 0 + - _StencilWriteMask: 255 + - _StencilZFailOp: 0 + - _StereoEnabled: 0 + - _StochasticDeliotHeitzDensity: 1 + - _StochasticHexFallOffContrast: 0.6 + - _StochasticHexFallOffPower: 7 + - _StochasticHexGridDensity: 1 + - _StochasticHexRotationStrength: 0 + - _StochasticMode: 0 + - _StylizedReflectionMode: 0 + - _StylizedSpecular: 0 + - _StylizedSpecular2Feather: 0 + - _StylizedSpecularFeather: 0 + - _StylizedSpecularIgnoreNormal: 0 + - _StylizedSpecularIgnoreShadow: 0 + - _StylizedSpecularInvertMask: 0 + - _StylizedSpecularNormalStrength: 1 + - _StylizedSpecularStrength: 1 + - _SubsurfaceScattering: 0 + - _TPSHelpbox: 0 + - _TPSPenetratorEnabled: 0 + - _TPS_AnimatedToggle: 1 + - _TPS_BezierSmoothness: 0.4 + - _TPS_BezierStart: 0 + - _TPS_BufferedDepth: 0 + - _TPS_BufferedStrength: 0 + - _TPS_Buldge: 0.3 + - _TPS_BuldgeDistance: 0.2 + - _TPS_BuldgeFalloffDistance: 0.05 + - _TPS_Channel: 0 + - _TPS_ChannelWarning: 0 + - _TPS_IdleGravity: 0 + - _TPS_IdleSkrinkLength: 1 + - _TPS_IdleSkrinkWidth: 1 + - _TPS_IsSkinnedMeshRenderer: 0 + - _TPS_PenetratorLength: 1 + - _TPS_PumpingSpeed: 1 + - _TPS_PumpingStrength: 0 + - _TPS_PumpingWidth: 0.2 + - _TPS_SmoothStart: 1 + - _TPS_Squeeze: 0.3 + - _TPS_SqueezeDistance: 0.2 + - _TextEnabled: 0 + - _TextFPSColorThemeIndex: 0 + - _TextFPSEmissionStrength: 0 + - _TextFPSEnabled: 0 + - _TextFPSRotation: 0 + - _TextFPSUV: 0 + - _TextNumericColorThemeIndex: 0 + - _TextNumericDecimalDigits: 0 + - _TextNumericEmissionStrength: 0 + - _TextNumericEnabled: 0 + - _TextNumericRotation: 0 + - _TextNumericTrimZeroes: 0 + - _TextNumericUV: 0 + - _TextNumericValue: 0 + - _TextNumericWholeDigits: 4 + - _TextPixelRange: 4 + - _TextPositionColorThemeIndex: 0 + - _TextPositionEmissionStrength: 0 + - _TextPositionEnabled: 0 + - _TextPositionRotation: 0 + - _TextPositionUV: 0 + - _TextTimeColorThemeIndex: 0 + - _TextTimeEmissionStrength: 0 + - _TextTimeEnabled: 0 + - _TextTimeRotation: 0 + - _TextTimeUV: 0 + - _ToonRampCount: 1 + - _ToonRampUVSelector: 1 + - _TruchetALAlphaBand: 0 + - _TruchetALAlphaToggle: 0 + - _TruchetALEmissionBand: 0 + - _TruchetALEmissionToggle: 0 + - _TruchetAlpha: 1 + - _TruchetBlendType: 0 + - _TruchetChronoPanBand: 0 + - _TruchetChronoPanToggle: 0 + - _TruchetChronoPanType: 0 + - _TruchetColorThemeIndex: 0 + - _TruchetDensity: 10 + - _TruchetEdgeSharpness: 1 + - _TruchetEmissionStrength: 0 + - _TruchetHideWhenNoAL: 0 + - _TruchetMaskChannel: 0 + - _TruchetMaskGlobalMask: 0 + - _TruchetMaskGlobalMaskBlendType: 2 + - _TruchetMaskIntensity: 1 + - _TruchetMaskInvert: 0 + - _TruchetMaskUV: 0 + - _TruchetOverrideAlpha: 0 + - _TruchetThiccness: 0.1 + - _TruchetUV: 0 + - _Tweak_HighColorMaskLevel: 0 + - _Tweak_LightDirection_MaskLevel: 0 + - _Tweak_LightDirection_MaskLevel2: 0 + - _Tweak_Rim2LightMaskLevel: 0 + - _Tweak_RimLightMaskLevel: 0 + - _UDIMDiscardHelpbox: 0 + - _UDIMDiscardMode: 0 + - _UDIMDiscardRow0_0: 0 + - _UDIMDiscardRow0_1: 0 + - _UDIMDiscardRow0_2: 0 + - _UDIMDiscardRow0_3: 0 + - _UDIMDiscardRow1_0: 0 + - _UDIMDiscardRow1_1: 0 + - _UDIMDiscardRow1_2: 0 + - _UDIMDiscardRow1_3: 0 + - _UDIMDiscardRow2_0: 0 + - _UDIMDiscardRow2_1: 0 + - _UDIMDiscardRow2_2: 0 + - _UDIMDiscardRow2_3: 0 + - _UDIMDiscardRow3_0: 0 + - _UDIMDiscardRow3_1: 0 + - _UDIMDiscardRow3_2: 0 + - _UDIMDiscardRow3_3: 0 + - _UDIMDiscardUV: 0 + - _UDIMFaceDiscardFace: 0 + - _UDIMFaceDiscardRow0_0: 0 + - _UDIMFaceDiscardRow0_1: 0 + - _UDIMFaceDiscardRow0_2: 0 + - _UDIMFaceDiscardRow0_3: 0 + - _UDIMFaceDiscardRow1_0: 0 + - _UDIMFaceDiscardRow1_1: 0 + - _UDIMFaceDiscardRow1_2: 0 + - _UDIMFaceDiscardRow1_3: 0 + - _UDIMFaceDiscardRow2_0: 0 + - _UDIMFaceDiscardRow2_1: 0 + - _UDIMFaceDiscardRow2_2: 0 + - _UDIMFaceDiscardRow2_3: 0 + - _UDIMFaceDiscardRow3_0: 0 + - _UDIMFaceDiscardRow3_1: 0 + - _UDIMFaceDiscardRow3_2: 0 + - _UDIMFaceDiscardRow3_3: 0 + - _UDIMFaceDiscardUV: 0 + - _UVModLocalPos0: 0 + - _UVModLocalPos1: 1 + - _UVModWorldPos0: 0 + - _UVModWorldPos1: 2 + - _UVSec: 0 + - _UVTileDissolveAlpha_Row0_0: 0 + - _UVTileDissolveAlpha_Row0_1: 0 + - _UVTileDissolveAlpha_Row0_2: 0 + - _UVTileDissolveAlpha_Row0_3: 0 + - _UVTileDissolveAlpha_Row1_0: 0 + - _UVTileDissolveAlpha_Row1_1: 0 + - _UVTileDissolveAlpha_Row1_2: 0 + - _UVTileDissolveAlpha_Row1_3: 0 + - _UVTileDissolveAlpha_Row2_0: 0 + - _UVTileDissolveAlpha_Row2_1: 0 + - _UVTileDissolveAlpha_Row2_2: 0 + - _UVTileDissolveAlpha_Row2_3: 0 + - _UVTileDissolveAlpha_Row3_0: 0 + - _UVTileDissolveAlpha_Row3_1: 0 + - _UVTileDissolveAlpha_Row3_2: 0 + - _UVTileDissolveAlpha_Row3_3: 0 + - _UVTileDissolveDiscardAtMax: 1 + - _UVTileDissolveEnabled: 0 + - _UVTileDissolveUV: 0 + - _Unlit_Intensity: 1 + - _UseLightColor: 1 + - _UseReflection: 0 + - _Use_1stAs2nd: 0 + - _Use_1stShadeMapAlpha_As_ShadowMask: 0 + - _Use_2ndShadeMapAlpha_As_ShadowMask: 0 + - _Use_BaseAs1st: 0 + - _UzumoreAmount: 0.1 + - _UzumoreBias: 0.001 + - _UzumoreCategoryToggle: 0 + - _UzumoreEnabled: 1 + - _UzumoreMaskUV: 3 + - _VertexAudioLinkEnabled: 0 + - _VertexBarrelAlpha: 0 + - _VertexBarrelHeight: 0 + - _VertexBarrelMaskChannel: 0 + - _VertexBarrelMode: 0 + - _VertexBarrelWidth: 0.2 + - _VertexBasicsMaskChannel: 0 + - _VertexGlitchDensity: 10 + - _VertexGlitchFrequency: 1 + - _VertexGlitchMapPanSpeed: 10 + - _VertexGlitchMirror: 0 + - _VertexGlitchMirrorEnable: 0 + - _VertexGlitchStrength: 1 + - _VertexGlitchThreshold: 1 + - _VertexGlitchingAudioLinkBand: 0 + - _VertexGlitchingAudioLinkEnabled: 0 + - _VertexGlitchingAudiolinkOverride: 1 + - _VertexGlitchingEnabled: 0 + - _VertexGlitchingUseTexture: 0 + - _VertexLocalRotationALBandX: 0 + - _VertexLocalRotationALBandY: 0 + - _VertexLocalRotationALBandZ: 0 + - _VertexLocalRotationCTALBandX: 0 + - _VertexLocalRotationCTALBandY: 0 + - _VertexLocalRotationCTALBandZ: 0 + - _VertexLocalRotationCTALTypeX: 0 + - _VertexLocalRotationCTALTypeY: 0 + - _VertexLocalRotationCTALTypeZ: 0 + - _VertexLocalScaleALBand: 0 + - _VertexLocalTranslationALBand: 0 + - _VertexLookAtAudioLinkBand: 0 + - _VertexLookAtAudioLinkEnabled: 0 + - _VertexLookAtEnabled: 0 + - _VertexManipulationHeight: 0 + - _VertexManipulationHeightBand: 0 + - _VertexManipulationHeightBias: 0 + - _VertexManipulationHeightMapChannel: 0 + - _VertexManipulationHeightMaskChannel: 0 + - _VertexManipulationHeightMaskUV: 0 + - _VertexManipulationsEnabled: 0 + - _VertexRoundingDivision: 0.02 + - _VertexRoundingEnabled: 0 + - _VertexRoundingMaskChannel: 0 + - _VertexRoundingRangeBand: 0 + - _VertexRoundingSpace: 0 + - _VertexSpectrumMotion: 0 + - _VertexSpectrumUV: 0 + - _VertexSpectrumUVDirection: 0 + - _VertexSphereAlpha: 0 + - _VertexSphereHeight: 1 + - _VertexSphereMaskChannel: 0 + - _VertexSphereMode: 0 + - _VertexSphereRadius: 1 + - _VertexTornadoBaseHeight: 0 + - _VertexTornadoFunnelShape: 1 + - _VertexTornadoIntensity: 100 + - _VertexTornadoMaskChannel: 0 + - _VertexTornadoMode: 0 + - _VertexTornadoRadius: 1 + - _VertexTornadoSpeed: 5 + - _VertexTornadoTopHeight: 1 + - _VertexTornadoVerticalPull: 0 + - _VertexWindDetailAmplitude: 0.05 + - _VertexWindDetailFrequency: 5 + - _VertexWindDetailSpeed: 2.5 + - _VertexWindEnabled: 0 + - _VertexWindMaskChannel: 0 + - _VertexWindNoiseChannel: 0 + - _VertexWindNoiseScale: 10 + - _VertexWindNoiseSpeed: 0.5 + - _VertexWindNoiseStrength: 0.5 + - _VertexWindPrimaryAmplitude: 0.1 + - _VertexWindPrimaryFrequency: 1 + - _VertexWindPrimarySpeed: 1 + - _VertexWorldTranslationALBand: 0 + - _VideoBacklight: 1 + - _VideoCRTPixelEnergizedTime: 1.9 + - _VideoCRTRefreshRate: 24 + - _VideoContrast: 0 + - _VideoEffectsEnable: 0 + - _VideoEmissionEnabled: 1 + - _VideoMaskTextureChannel: 0 + - _VideoMaskTextureUV: 0 + - _VideoPixelTextureUV: 0 + - _VideoPixelateToResolution: 0 + - _VideoSaturation: 0 + - _VideoType: 3 + - _VisibilityMode: 1 + - _VisibilityVRCCameraDesktop: 1 + - _VisibilityVRCCameraScreenshot: 1 + - _VisibilityVRCCameraVR: 1 + - _VisibilityVRCMirrorDesktop: 1 + - _VisibilityVRCMirrorVR: 1 + - _VisibilityVRCRegular: 1 + - _VoronoiAffectsMaterialAlpha: 0 + - _VoronoiBlend: 0 + - _VoronoiEnableRandomCellColor: 0 + - _VoronoiEnabled: 0 + - _VoronoiGlobalMask: 0 + - _VoronoiGlobalMaskBlendType: 2 + - _VoronoiInnerEmissionStrength: 0 + - _VoronoiMaskChannel: 0 + - _VoronoiMaskUV: 0 + - _VoronoiNoiseChannel: 0 + - _VoronoiNoiseIntensity: 0.1 + - _VoronoiNoiseUV: 0 + - _VoronoiOuterEmissionStrength: 0 + - _VoronoiPower: 0.45454544 + - _VoronoiScale: 5 + - _VoronoiSpace: 0 + - _VoronoiType: 1 + - _Wriggle: 0 + - _WriggleSpeed: 0.28 + - _ZClip: 1 + - _ZTest: 4 + - _ZWrite: 1 + - _ppHueSelectOrShift: 1 + - footer_bluesky: 0 + - footer_discord: 0 + - footer_github: 0 + - footer_patreon: 0 + - footer_twitter: 0 + - footer_website: 0 + - footer_youtube: 0 + - g_end_tps_bezier: 0 + - g_end_tps_buldge: 0 + - g_end_tps_idle: 0 + - g_end_tps_pulsing: 0 + - g_end_tps_squeeze: 0 + - g_start_tps_bezier: 0 + - g_start_tps_buldge: 0 + - g_start_tps_idle: 0 + - g_start_tps_pulsing: 0 + - g_start_tps_squeeze: 0 + - m_AudioLinkCategory: 0 + - m_OutlineCategory: 0 + - m_end_ALDecalSpectrum: 0 + - m_end_ALVolumeColor: 0 + - m_end_Alpha: 0 + - m_end_Ansio: 0 + - m_end_BeatsaberBloomFog: 0 + - m_end_BeatsaberOptions: 0 + - m_end_BlackLightMasking: 0 + - m_end_BonusSliders: 0 + - m_end_CRT: 0 + - m_end_CenterOutDissolve: 0 + - m_end_ColorAdjust: 0 + - m_end_CubeMap: 0 + - m_end_Decal0: 0 + - m_end_Decal0AudioLink: 0 + - m_end_Decal1: 0 + - m_end_Decal1AudioLink: 0 + - m_end_Decal2: 0 + - m_end_Decal2AudioLink: 0 + - m_end_Decal3: 0 + - m_end_Decal3AudioLink: 0 + - m_end_DecalSection: 0 + - m_end_DepthBulge: 0 + - m_end_DetailOptions: 0 + - m_end_DistortionAudioLink: 0 + - m_end_FXProximityColor: 0 + - m_end_FlipbookAudioLink: 0 + - m_end_Gameboy: 0 + - m_end_GlobalMask: 0 + - m_end_GlobalMaskDistanceM_0: 0 + - m_end_GlobalMaskDistanceM_1: 0 + - m_end_GlobalMaskDistanceM_10: 0 + - m_end_GlobalMaskDistanceM_11: 0 + - m_end_GlobalMaskDistanceM_12: 0 + - m_end_GlobalMaskDistanceM_13: 0 + - m_end_GlobalMaskDistanceM_14: 0 + - m_end_GlobalMaskDistanceM_15: 0 + - m_end_GlobalMaskDistanceM_2: 0 + - m_end_GlobalMaskDistanceM_3: 0 + - m_end_GlobalMaskDistanceM_4: 0 + - m_end_GlobalMaskDistanceM_5: 0 + - m_end_GlobalMaskDistanceM_6: 0 + - m_end_GlobalMaskDistanceM_7: 0 + - m_end_GlobalMaskDistanceM_8: 0 + - m_end_GlobalMaskDistanceM_9: 0 + - m_end_GlobalMaskModifiers: 0 + - m_end_GlobalMaskModifiersBackface: 0 + - m_end_GlobalMaskModifiersCamera: 0 + - m_end_GlobalMaskModifiersDistance: 0 + - m_end_GlobalMaskModifiersMirror: 0 + - m_end_GlobalMaskOptions: 0 + - m_end_GlobalMaskTextures: 0 + - m_end_GlobalMaskVertexColors: 0 + - m_end_GlobalThemeColor0: 0 + - m_end_GlobalThemeColor1: 0 + - m_end_GlobalThemeColor2: 0 + - m_end_GlobalThemeColor3: 0 + - m_end_GlobalThemes: 0 + - m_end_LTCGI: 0 + - m_end_MainVertexColors: 0 + - m_end_Matcap2: 0 + - m_end_Matcap3: 0 + - m_end_Matcap4: 0 + - m_end_OutlineAudioLink: 0 + - m_end_OutlineStencil: 0 + - m_end_OutlineStencilPassBackOptions: 0 + - m_end_OutlineStencilPassFrontOptions: 0 + - m_end_PPAnimations: 0 + - m_end_PathAudioLink: 0 + - m_end_PoiGlobalCategory: 0 + - m_end_PoiLightData: 0 + - m_end_PoiPostProcessingCategory: 0 + - m_end_PoiShading: 0 + - m_end_PoiUVCategory: 0 + - m_end_RGBMask: 0 + - m_end_Rim2AudioLink: 0 + - m_end_RimAudioLink: 0 + - m_end_SphericalDissolve: 0 + - m_end_StencilPassBackOptions: 0 + - m_end_StencilPassFrontOptions: 0 + - m_end_StencilPassOptions: 0 + - m_end_Stochastic: 0 + - m_end_Text: 0 + - m_end_TextFPS: 0 + - m_end_TextInstanceTime: 0 + - m_end_TextNumeric: 0 + - m_end_TextPosition: 0 + - m_end_TruchetAudioLink: 0 + - m_end_UVTileDissolve: 0 + - m_end_Uzumore: 0 + - m_end_VideoSettings: 0 + - m_end_VoronoiAudioLink: 0 + - m_end_WorldAOBlocker: 0 + - m_end_alphaBlending: 0 + - m_end_audioLink: 0 + - m_end_audioLinkOverrides: 0 + - m_end_backFace: 0 + - m_end_backlight: 0 + - m_end_bakedLighting: 0 + - m_end_blending: 0 + - m_end_brdf: 0 + - m_end_clearCoat: 0 + - m_end_clearcoatadvanced: 0 + - m_end_clearcoatglobalmask: 0 + - m_end_depthFX: 0 + - m_end_depthRimLightOptions: 0 + - m_end_dissolve: 0 + - m_end_dissolveHueShift: 0 + - m_end_emission1Options: 0 + - m_end_emission2Options: 0 + - m_end_emission3Options: 0 + - m_end_emissionOptions: 0 + - m_end_flipBook: 0 + - m_end_glitter: 0 + - m_end_internalparallax: 0 + - m_end_matcap: 0 + - m_end_mirrorOptions: 0 + - m_end_normalCorrect: 0 + - m_end_outlineAlphaBlending: 0 + - m_end_outlineBlending: 0 + - m_end_parallax: 0 + - m_end_pathing: 0 + - m_end_pen_autoConfig: 0 + - m_end_poiSSAO: 0 + - m_end_pointToPoint: 0 + - m_end_postprocess: 0 + - m_end_raliv: 0 + - m_end_ralivAdvanced: 0 + - m_end_ralivOriface: 0 + - m_end_ralivPenetrator: 0 + - m_end_reflectionRim: 0 + - m_end_rim1LightOptions: 0 + - m_end_rim2LightOptions: 0 + - m_end_stylizedSpec: 0 + - m_end_subsurfaceScattering: 0 + - m_end_tps_penetrator: 0 + - m_end_truchet: 0 + - m_end_udimdiscardOptions: 0 + - m_end_udimfacediscardOptions: 0 + - m_end_uvDistortion: 0 + - m_end_uvLocalWorld: 0 + - m_end_uvPanosphere: 0 + - m_end_uvPolar: 0 + - m_end_vertexGlitching: 0 + - m_end_vertexLookAt: 0 + - m_end_vertexManipulation: 0 + - m_end_videoEffects: 0 + - m_end_voronoi: 0 + - m_end_voronoiRandom: 0 + - m_lightingCategory: 1 + - m_mainCategory: 1 + - m_modifierCategory: 0 + - m_renderingCategory: 0 + - m_specialFXCategory: 1 + - m_start_ALDecalSpectrum: 0 + - m_start_ALVolumeColor: 0 + - m_start_Alpha: 0 + - m_start_Aniso: 0 + - m_start_BeatsaberBloomFog: 0 + - m_start_BeatsaberOptions: 0 + - m_start_BlackLightMasking: 0 + - m_start_BonusSliders: 0 + - m_start_CRT: 0 + - m_start_CenterOutDissolve: 0 + - m_start_ColorAdjust: 0 + - m_start_CubeMap: 0 + - m_start_Decal0: 0 + - m_start_Decal0AudioLink: 0 + - m_start_Decal1: 0 + - m_start_Decal1AudioLink: 0 + - m_start_Decal2: 0 + - m_start_Decal2AudioLink: 0 + - m_start_Decal3: 0 + - m_start_Decal3AudioLink: 0 + - m_start_DecalSection: 0 + - m_start_DepthBulge: 0 + - m_start_DetailOptions: 0 + - m_start_DistortionAudioLink: 0 + - m_start_FXProximityColor: 0 + - m_start_FlipbookAudioLink: 0 + - m_start_Gameboy: 0 + - m_start_GlobalMask: 0 + - m_start_GlobalMaskDistanceM_0: 0 + - m_start_GlobalMaskDistanceM_1: 0 + - m_start_GlobalMaskDistanceM_10: 0 + - m_start_GlobalMaskDistanceM_11: 0 + - m_start_GlobalMaskDistanceM_12: 0 + - m_start_GlobalMaskDistanceM_13: 0 + - m_start_GlobalMaskDistanceM_14: 0 + - m_start_GlobalMaskDistanceM_15: 0 + - m_start_GlobalMaskDistanceM_2: 0 + - m_start_GlobalMaskDistanceM_3: 0 + - m_start_GlobalMaskDistanceM_4: 0 + - m_start_GlobalMaskDistanceM_5: 0 + - m_start_GlobalMaskDistanceM_6: 0 + - m_start_GlobalMaskDistanceM_7: 0 + - m_start_GlobalMaskDistanceM_8: 0 + - m_start_GlobalMaskDistanceM_9: 0 + - m_start_GlobalMaskModifiers: 0 + - m_start_GlobalMaskModifiersBackface: 0 + - m_start_GlobalMaskModifiersCamera: 0 + - m_start_GlobalMaskModifiersDistance: 0 + - m_start_GlobalMaskModifiersMirror: 0 + - m_start_GlobalMaskOptions: 0 + - m_start_GlobalMaskTextures: 0 + - m_start_GlobalMaskVertexColors: 0 + - m_start_GlobalThemeColor0: 0 + - m_start_GlobalThemeColor1: 0 + - m_start_GlobalThemeColor2: 0 + - m_start_GlobalThemeColor3: 0 + - m_start_GlobalThemes: 0 + - m_start_LTCGI: 0 + - m_start_MainVertexColors: 0 + - m_start_Matcap2: 0 + - m_start_Matcap3: 0 + - m_start_Matcap4: 0 + - m_start_OutlineAudioLink: 0 + - m_start_OutlineStencil: 0 + - m_start_OutlineStencilPassBackOptions: 0 + - m_start_OutlineStencilPassFrontOptions: 0 + - m_start_PPAnimations: 0 + - m_start_PathAudioLink: 0 + - m_start_PoiGlobalCategory: 0 + - m_start_PoiLightData: 1 + - m_start_PoiPostProcessingCategory: 0 + - m_start_PoiShading: 0 + - m_start_PoiUVCategory: 0 + - m_start_RGBMask: 0 + - m_start_Rim2AudioLink: 0 + - m_start_RimAudioLink: 0 + - m_start_SphericalDissolve: 0 + - m_start_StencilPassBackOptions: 0 + - m_start_StencilPassFrontOptions: 0 + - m_start_StencilPassOptions: 0 + - m_start_Stochastic: 0 + - m_start_Text: 0 + - m_start_TextFPS: 0 + - m_start_TextInstanceTime: 0 + - m_start_TextNumeric: 0 + - m_start_TextPosition: 0 + - m_start_TruchetAudioLink: 0 + - m_start_UVTileDissolve: 0 + - m_start_Uzumore: 0 + - m_start_VideoSettings: 0 + - m_start_VoronoiAudioLink: 0 + - m_start_WorldAOBlocker: 0 + - m_start_alphaBlending: 0 + - m_start_audioLink: 0 + - m_start_audioLinkOverrides: 0 + - m_start_backFace: 0 + - m_start_backlight: 0 + - m_start_bakedLighting: 0 + - m_start_blending: 0 + - m_start_brdf: 0 + - m_start_clearCoat: 0 + - m_start_clearcoatadvanced: 0 + - m_start_clearcoatglobalmask: 0 + - m_start_depthFX: 0 + - m_start_depthRimLightOptions: 0 + - m_start_dissolve: 0 + - m_start_dissolveHueShift: 0 + - m_start_emission1Options: 0 + - m_start_emission2Options: 0 + - m_start_emission3Options: 0 + - m_start_emissionOptions: 1 + - m_start_flipBook: 0 + - m_start_glitter: 0 + - m_start_internalparallax: 0 + - m_start_matcap: 0 + - m_start_mirrorOptions: 0 + - m_start_normalCorrect: 0 + - m_start_outlineAlphaBlending: 0 + - m_start_outlineBlending: 0 + - m_start_parallax: 0 + - m_start_pathing: 0 + - m_start_pen_autoConfig: 0 + - m_start_poiSSAO: 0 + - m_start_pointToPoint: 0 + - m_start_postprocess: 0 + - m_start_raliv: 0 + - m_start_ralivAdvanced: 0 + - m_start_ralivOriface: 0 + - m_start_ralivPenetrator: 0 + - m_start_reflectionRim: 0 + - m_start_rim2LightOptions: 0 + - m_start_rimLight1Options: 0 + - m_start_stylizedSpec: 0 + - m_start_subsurfaceScattering: 0 + - m_start_tps_penetrator: 0 + - m_start_truchet: 0 + - m_start_udimdiscardOptions: 0 + - m_start_udimfacediscardOptions: 0 + - m_start_uvDistortion: 0 + - m_start_uvLocalWorld: 0 + - m_start_uvPanosphere: 0 + - m_start_uvPolar: 0 + - m_start_vertexGlitching: 0 + - m_start_vertexLookAt: 0 + - m_start_vertexManipulation: 0 + - m_start_videoEffects: 0 + - m_start_voronoi: 0 + - m_start_voronoiRandom: 0 + - m_thirdpartyCategory: 0 + - m_vertexCategory: 0 + - s_end_ALAlpha: 0 + - s_end_ALDecalAudioModsOptions: 0 + - s_end_ALDecalBand: 0 + - s_end_ALDecalColorsBlendingOptions: 0 + - s_end_ALDecalShapeClipOptions: 0 + - s_end_ALDecalVolumeOptions: 0 + - s_end_ALSpectrumMotion: 0 + - s_end_ALVertexGlitching: 0 + - s_end_ALVertexHeight: 0 + - s_end_ALVertexLookAtAL: 0 + - s_end_AlphaAdvanced: 0 + - s_end_AlphaAngular: 0 + - s_end_AlphaDistanceFade: 0 + - s_end_AlphaDithering: 0 + - s_end_AlphaFresnel: 0 + - s_end_AlphaToCoverage: 0 + - s_end_AnisoBottomLayer: 0 + - s_end_AnisoTopLayer: 1 + - s_end_AudioLinkBandOverrides: 0 + - s_end_BRDFTPSMaskGroup: 0 + - s_end_BackFaceHueShift: 0 + - s_end_BackfaceMods: 0 + - s_end_CCopt: 1 + - s_end_ClearCoatTPSMaskGroup: 0 + - s_end_ColorAdjustColorGrading: 0 + - s_end_ContinuousRotation: 0 + - s_end_CubeMapColorAdjust: 0 + - s_end_CubeMapMasking: 0 + - s_end_Decal0ChannelSeparation: 0 + - s_end_Decal0GlobalMasking: 0 + - s_end_Decal0HueShift: 0 + - s_end_Decal0Video: 0 + - s_end_Decal1ChannelSeparation: 0 + - s_end_Decal1GlobalMasking: 0 + - s_end_Decal1HueShift: 0 + - s_end_Decal1Video: 0 + - s_end_Decal2ChannelSeparation: 0 + - s_end_Decal2GlobalMasking: 0 + - s_end_Decal2HueShift: 0 + - s_end_Decal2Video: 0 + - s_end_Decal3ChannelSeparation: 0 + - s_end_Decal3GlobalMasking: 0 + - s_end_Decal3HueShift: 0 + - s_end_Decal3Video: 0 + - s_end_DecalTPSMaskGroup: 0 + - s_end_DepthAlpha: 0 + - s_end_DepthFXColorEmission: 0 + - s_end_DetailNormal: 0 + - s_end_DetailTexture: 0 + - s_end_DissolveAudioLink: 0 + - s_end_DissolvedMenu: 0 + - s_end_EdgeMenu: 0 + - s_end_EmissionAL0Add: 0 + - s_end_EmissionAL0COut: 0 + - s_end_EmissionAL0Multiply: 0 + - s_end_EmissionAL1Add: 0 + - s_end_EmissionAL1COut: 0 + - s_end_EmissionAL1Multiply: 0 + - s_end_EmissionAL2Add: 0 + - s_end_EmissionAL2COut: 0 + - s_end_EmissionAL2Multiply: 0 + - s_end_EmissionAL3Add: 0 + - s_end_EmissionAL3COut: 0 + - s_end_EmissionAL3Multiply: 0 + - s_end_EmissionBlinking0: 0 + - s_end_EmissionBlinking1: 0 + - s_end_EmissionBlinking2: 0 + - s_end_EmissionBlinking3: 0 + - s_end_EmissionCenterOut0: 0 + - s_end_EmissionCenterOut1: 0 + - s_end_EmissionCenterOut2: 0 + - s_end_EmissionCenterOut3: 0 + - s_end_EmissionHueShift0: 0 + - s_end_EmissionHueShift1: 0 + - s_end_EmissionHueShift2: 0 + - s_end_EmissionHueShift3: 0 + - s_end_EmissionLightBased0: 0 + - s_end_EmissionLightBased1: 0 + - s_end_EmissionLightBased2: 0 + - s_end_EmissionLightBased3: 0 + - s_end_FixedRimBlending: 0 + - s_end_FixedRimColor: 0 + - s_end_FixedRimShapeControl: 0 + - s_end_FlipbookCrossfade: 0 + - s_end_FlipbookHueShift: 0 + - s_end_FlipbookManualFrameControl: 0 + - s_end_FlipbookStartAndEnd: 0 + - s_end_GlitterAudioLink: 0 + - s_end_GlitterColorAndShape: 0 + - s_end_GlitterHueShiftSection: 0 + - s_end_GlitterMask: 0 + - s_end_GlitterPositionSize: 0 + - s_end_GlitterRotationSection: 0 + - s_end_GlitterSparkleControl: 0 + - s_end_GlobalMaskOptionsForceToggles: 0 + - s_end_GlobalMaskOptionsMinMaxSliders: 0 + - s_end_GlobalMaskOptionsSliders: 0 + - s_end_LightDataAddPass: 1 + - s_end_LightDataBasePass: 1 + - s_end_LightDataDebug: 0 + - s_end_LightDataSDF: 1 + - s_end_LocalRotation: 0 + - s_end_LocalTranslation: 0 + - s_end_LookAtAlphaMask: 0 + - s_end_LookAtBlueMask: 0 + - s_end_LookAtGreenMask: 0 + - s_end_LookAtRedMask: 0 + - s_end_LookAtVisibility: 0 + - s_end_MainHueShift: 0 + - s_end_MainHueShiftAL: 0 + - s_end_MainHueShiftGlobalMask: 0 + - s_end_MaskingMenu: 0 + - s_end_Matcap0AudioLink: 0 + - s_end_Matcap0Blending: 0 + - s_end_Matcap0Masking: 0 + - s_end_Matcap1AudioLink: 0 + - s_end_Matcap1Blending: 0 + - s_end_Matcap1HueShift: 0 + - s_end_Matcap1Masking: 0 + - s_end_Matcap1Normal: 0 + - s_end_Matcap1Smoothness: 0 + - s_end_Matcap2AudioLink: 0 + - s_end_Matcap2Blending: 0 + - s_end_Matcap2HueShift: 0 + - s_end_Matcap2Masking: 0 + - s_end_Matcap2Normal: 0 + - s_end_Matcap2Smoothness: 0 + - s_end_Matcap2TPSMaskGroup: 0 + - s_end_Matcap3AudioLink: 0 + - s_end_Matcap3Blending: 0 + - s_end_Matcap3HueShift: 0 + - s_end_Matcap3Masking: 0 + - s_end_Matcap3Normal: 0 + - s_end_Matcap3Smoothness: 0 + - s_end_Matcap3TPSMaskGroup: 0 + - s_end_Matcap4TPSMaskGroup: 0 + - s_end_MatcapHueShift: 0 + - s_end_MatcapNormal: 0 + - s_end_MatcapSmoothness: 0 + - s_end_MatcapTPSMaskGroup: 0 + - s_end_MirrorTexture: 0 + - s_end_MultilayerMath1stLayer: 1 + - s_end_MultilayerMath2ndLayer: 0 + - s_end_MultilayerMath3rdLayer: 0 + - s_end_MultilayerMathBorder: 1 + - s_end_MultilayerMathBorderMap: 1 + - s_end_MultilayerShadowMap: 0 + - s_end_OutlineAlphaDistanceFade: 0 + - s_end_OutlineColorAdjust: 0 + - s_end_OutlineFixedSize: 0 + - s_end_OutlineLighting: 0 + - s_end_OutlineRenderingOptions: 0 + - s_end_OutlineZOffset: 0 + - s_end_PBRSecondSpecular: 0 + - s_end_PBRSplitMaskSample: 0 + - s_end_ParallaxInternalHueShift: 0 + - s_end_ParallaxInternalLayerColoring: 0 + - s_end_ParallaxInternalLayerControls: 0 + - s_end_PathAppearance: 0 + - s_end_PathColors: 0 + - s_end_PathRemapping: 0 + - s_end_PathSourceDirections: 0 + - s_end_PathTypes: 0 + - s_end_Positioning: 0 + - s_end_RGBAlpha: 0 + - s_end_RGBBlue: 0 + - s_end_RGBGreen: 0 + - s_end_RGBRed: 0 + - s_end_RimLight0Color: 0 + - s_end_RimLight0GlobalMasking: 0 + - s_end_RimLight0HueShift: 0 + - s_end_RimLight0LightDirMask: 0 + - s_end_RimLight0ShapeControls: 0 + - s_end_RimLight1Color: 0 + - s_end_RimLight1GlobalMasking: 0 + - s_end_RimLight1HueShift: 0 + - s_end_RimLight1LightDirMask: 0 + - s_end_RimLight1ShapeControls: 0 + - s_end_RimLight2DirectionMask: 0 + - s_end_RimLightDirectionMask: 0 + - s_end_SSAOAdvanced: 0 + - s_end_SSAOColorAndMasking: 0 + - s_end_ScrollingEmission0: 0 + - s_end_ScrollingEmission1: 0 + - s_end_ScrollingEmission2: 0 + - s_end_ScrollingEmission3: 0 + - s_end_ShadingAddPass: 0 + - s_end_ShadingGlobalMask: 0 + - s_end_StylizedReflectionLilEnviroReflections: 1 + - s_end_StylizedReflectionLilSpecular: 1 + - s_end_StylizedReflectionMode0: 1 + - s_end_StylizedReflectionMode1: 1 + - s_end_StylizedSpecularAdvanced: 0 + - s_end_StylizedSpecularLayer0: 0 + - s_end_StylizedSpecularLayer1: 0 + - s_end_TimingOptions: 0 + - s_end_TransitionMenu: 0 + - s_end_UVTileDissolveRow0: 0 + - s_end_UVTileDissolveRow1: 0 + - s_end_UVTileDissolveRow2: 0 + - s_end_UVTileDissolveRow3: 0 + - s_end_VertAL: 0 + - s_end_VertexBarrelMode: 0 + - s_end_VertexColors: 0 + - s_end_VertexGlitchMirror: 0 + - s_end_VertexGlitchTexture: 0 + - s_end_VertexManipulationHeight: 0 + - s_end_VertexRoundingAL: 0 + - s_end_VertexScale: 0 + - s_end_VertexSphereMode: 0 + - s_end_VertexTornadoMode: 0 + - s_end_VertexWind: 0 + - s_end_WorldTranslation: 0 + - s_end_brdfadvanced: 0 + - s_end_decal1_position: 0 + - s_end_decal2_position: 0 + - s_end_decal3_position: 0 + - s_end_decal_position: 0 + - s_end_deliot: 0 + - s_end_fogOpt: 1 + - s_end_ggxanisotropics: 0 + - s_end_heightFogOpt: 1 + - s_end_hextile: 0 + - s_end_liltoon_rim2_lightdir: 0 + - s_end_liltoon_rim_lightdir: 0 + - s_end_matcap1ApplyToAlpha: 0 + - s_end_matcap2ApplyToAlpha: 0 + - s_end_matcap3ApplyToAlpha: 0 + - s_end_matcapApplyToAlpha: 0 + - s_end_outline_al_color: 0 + - s_end_parallaxAdvanced: 0 + - s_end_vertexRounding: 0 + - s_start_ALAlpha: 0 + - s_start_ALDecalAudioModsOptions: 1 + - s_start_ALDecalBandOptions: 1 + - s_start_ALDecalColorsBlendingOptions: 1 + - s_start_ALDecalShapeClipOptions: 1 + - s_start_ALDecalVolumeOptions: 1 + - s_start_ALSpectrumMotion: 0 + - s_start_ALVertexGlitching: 0 + - s_start_ALVertexHeight: 0 + - s_start_ALVertexLookAtAL: 0 + - s_start_AlphaAdvanced: 0 + - s_start_AlphaAngular: 0 + - s_start_AlphaDistanceFade: 0 + - s_start_AlphaDithering: 0 + - s_start_AlphaFresnel: 0 + - s_start_AlphaToCoverage: 0 + - s_start_AnisoBottomLayer: 0 + - s_start_AnisoTopLayer: 1 + - s_start_AudioLinkBandOverrides: 1 + - s_start_BRDFTPSMaskGroup: 0 + - s_start_BackFaceHueShift: 0 + - s_start_BackfaceMods: 0 + - s_start_CCopt: 1 + - s_start_ClearCoatTPSMaskGroup: 0 + - s_start_ColorAdjustColorGrading: 0 + - s_start_ContinuousRotation: 0 + - s_start_CubeMapColorAdjust: 0 + - s_start_CubeMapMasking: 1 + - s_start_Decal0ChannelSeparation: 0 + - s_start_Decal0GlobalMasking: 0 + - s_start_Decal0HueShift: 0 + - s_start_Decal0Video: 0 + - s_start_Decal1ChannelSeparation: 0 + - s_start_Decal1GlobalMasking: 0 + - s_start_Decal1HueShift: 0 + - s_start_Decal1Video: 0 + - s_start_Decal2ChannelSeparation: 0 + - s_start_Decal2GlobalMasking: 0 + - s_start_Decal2HueShift: 0 + - s_start_Decal2Video: 0 + - s_start_Decal3ChannelSeparation: 0 + - s_start_Decal3GlobalMasking: 0 + - s_start_Decal3HueShift: 0 + - s_start_Decal3Video: 0 + - s_start_DecalTPSMaskGroup: 0 + - s_start_DepthAlpha: 0 + - s_start_DepthFXColorEmission: 0 + - s_start_DetailNormal: 0 + - s_start_DetailTexture: 0 + - s_start_DissolveAudioLink: 0 + - s_start_DissolvedMenu: 0 + - s_start_EdgeMenu: 0 + - s_start_EmissionAL0Add: 0 + - s_start_EmissionAL0COut: 0 + - s_start_EmissionAL0Multiply: 0 + - s_start_EmissionAL1Add: 0 + - s_start_EmissionAL1COut: 0 + - s_start_EmissionAL1Multiply: 0 + - s_start_EmissionAL2Add: 0 + - s_start_EmissionAL2COut: 0 + - s_start_EmissionAL2Multiply: 0 + - s_start_EmissionAL3Add: 0 + - s_start_EmissionAL3COut: 0 + - s_start_EmissionAL3Multiply: 0 + - s_start_EmissionBlinking0: 0 + - s_start_EmissionBlinking1: 0 + - s_start_EmissionBlinking2: 0 + - s_start_EmissionBlinking3: 0 + - s_start_EmissionCenterOut0: 0 + - s_start_EmissionCenterOut1: 0 + - s_start_EmissionCenterOut2: 0 + - s_start_EmissionCenterOut3: 0 + - s_start_EmissionHueShift0: 0 + - s_start_EmissionHueShift1: 0 + - s_start_EmissionHueShift2: 0 + - s_start_EmissionHueShift3: 0 + - s_start_EmissionLightBased0: 0 + - s_start_EmissionLightBased1: 0 + - s_start_EmissionLightBased2: 0 + - s_start_EmissionLightBased3: 0 + - s_start_FixedRimBlending: 1 + - s_start_FixedRimColor: 1 + - s_start_FixedRimShapeControl: 1 + - s_start_FlipbookCrossfade: 0 + - s_start_FlipbookHueShift: 0 + - s_start_FlipbookManualFrameControl: 0 + - s_start_FlipbookStartAndEnd: 0 + - s_start_GlitterAudioLink: 0 + - s_start_GlitterColorAndShape: 1 + - s_start_GlitterHueShiftSection: 0 + - s_start_GlitterMask: 0 + - s_start_GlitterPositionSize: 0 + - s_start_GlitterRotationSection: 0 + - s_start_GlitterSparkleControl: 1 + - s_start_GlobalMaskOptionsForceToggles: 0 + - s_start_GlobalMaskOptionsMinMaxSliders: 0 + - s_start_GlobalMaskOptionsSliders: 0 + - s_start_LightDataAddPass: 1 + - s_start_LightDataBasePass: 1 + - s_start_LightDataDebug: 0 + - s_start_LightDataSDF: 1 + - s_start_LocalRotation: 0 + - s_start_LocalTranslation: 0 + - s_start_LookAtAlphaMask: 0 + - s_start_LookAtBlueMask: 0 + - s_start_LookAtGreenMask: 0 + - s_start_LookAtRedMask: 1 + - s_start_LookAtVisibility: 0 + - s_start_MainHueShift: 1 + - s_start_MainHueShiftAL: 0 + - s_start_MainHueShiftGlobalMask: 0 + - s_start_MaskingMenu: 0 + - s_start_Matcap0AudioLink: 0 + - s_start_Matcap0Blending: 1 + - s_start_Matcap0Masking: 1 + - s_start_Matcap1AudioLink: 0 + - s_start_Matcap1Blending: 1 + - s_start_Matcap1HueShift: 0 + - s_start_Matcap1Masking: 1 + - s_start_Matcap1Normal: 0 + - s_start_Matcap1Smoothness: 0 + - s_start_Matcap2AudioLink: 0 + - s_start_Matcap2Blending: 1 + - s_start_Matcap2HueShift: 0 + - s_start_Matcap2Masking: 1 + - s_start_Matcap2Normal: 0 + - s_start_Matcap2Smoothness: 0 + - s_start_Matcap2TPSMaskGroup: 0 + - s_start_Matcap3AudioLink: 0 + - s_start_Matcap3Blending: 1 + - s_start_Matcap3HueShift: 0 + - s_start_Matcap3Masking: 1 + - s_start_Matcap3Normal: 0 + - s_start_Matcap3Smoothness: 0 + - s_start_Matcap3TPSMaskGroup: 0 + - s_start_Matcap4TPSMaskGroup: 0 + - s_start_MatcapHueShift: 0 + - s_start_MatcapNormal: 0 + - s_start_MatcapSmoothness: 0 + - s_start_MatcapTPSMaskGroup: 0 + - s_start_MirrorTexture: 1 + - s_start_MultilayerMath1stLayer: 1 + - s_start_MultilayerMath2ndLayer: 0 + - s_start_MultilayerMath3rdLayer: 0 + - s_start_MultilayerMathBorder: 1 + - s_start_MultilayerMathBorderMap: 0 + - s_start_MultilayerShadowMap: 0 + - s_start_OutlineAlphaDistanceFade: 0 + - s_start_OutlineColorAdjust: 0 + - s_start_OutlineFixedSize: 0 + - s_start_OutlineLighting: 0 + - s_start_OutlineRenderingOptions: 0 + - s_start_OutlineZOffset: 0 + - s_start_PBRSecondSpecular: 0 + - s_start_PBRSplitMaskSample: 0 + - s_start_ParallaxInternalHueShift: 0 + - s_start_ParallaxInternalLayerColoring: 1 + - s_start_ParallaxInternalLayerControls: 1 + - s_start_PathAppearance: 1 + - s_start_PathColors: 1 + - s_start_PathRemapping: 1 + - s_start_PathSourceDirections: 1 + - s_start_PathTypes: 1 + - s_start_Positioning: 1 + - s_start_RGBAlpha: 0 + - s_start_RGBBlue: 0 + - s_start_RGBGreen: 0 + - s_start_RGBRed: 0 + - s_start_RimLight0Color: 1 + - s_start_RimLight0GlobalMasking: 0 + - s_start_RimLight0HueShift: 0 + - s_start_RimLight0LightDirMask: 0 + - s_start_RimLight0ShapeControls: 1 + - s_start_RimLight1Color: 1 + - s_start_RimLight1GlobalMasking: 0 + - s_start_RimLight1HueShift: 0 + - s_start_RimLight1LightDirMask: 0 + - s_start_RimLight1ShapeControls: 1 + - s_start_RimLight2DirectionMask: 0 + - s_start_RimLightDirectionMask: 0 + - s_start_SSAOAdvanced: 0 + - s_start_SSAOColorAndMasking: 1 + - s_start_ScrollingEmission0: 0 + - s_start_ScrollingEmission1: 0 + - s_start_ScrollingEmission2: 0 + - s_start_ScrollingEmission3: 0 + - s_start_ShadingAddPass: 0 + - s_start_ShadingGlobalMask: 0 + - s_start_StylizedReflectionLilEnviroReflections: 1 + - s_start_StylizedReflectionLilSpecular: 1 + - s_start_StylizedReflectionMode0: 1 + - s_start_StylizedReflectionMode1: 1 + - s_start_StylizedSpecularAdvanced: 0 + - s_start_StylizedSpecularLayer0: 1 + - s_start_StylizedSpecularLayer1: 1 + - s_start_TimingOptions: 1 + - s_start_TransitionMenu: 0 + - s_start_UVTileDissolveRow0: 0 + - s_start_UVTileDissolveRow1: 0 + - s_start_UVTileDissolveRow2: 0 + - s_start_UVTileDissolveRow3: 0 + - s_start_VertAL: 0 + - s_start_VertexBarrelMode: 0 + - s_start_VertexColors: 0 + - s_start_VertexGlitchMirror: 0 + - s_start_VertexGlitchTexture: 1 + - s_start_VertexManipulationHeight: 1 + - s_start_VertexScale: 0 + - s_start_VertexSphereMode: 0 + - s_start_VertexTornadoMode: 0 + - s_start_VertexWind: 0 + - s_start_WorldTranslation: 0 + - s_start_brdfadvanced: 0 + - s_start_decal1_position: 1 + - s_start_decal2_position: 1 + - s_start_decal3_position: 1 + - s_start_decal_position: 1 + - s_start_deliot: 0 + - s_start_fogOpt: 1 + - s_start_ggxanisotropics: 0 + - s_start_heightFogOpt: 1 + - s_start_hextile: 0 + - s_start_liltoon_rim2_lightdir: 0 + - s_start_liltoon_rim_lightdir: 0 + - s_start_matcap1ApplyToAlpha: 0 + - s_start_matcap2ApplyToAlpha: 0 + - s_start_matcap3ApplyToAlpha: 0 + - s_start_matcapApplyToAlpha: 0 + - s_start_outline_al_color: 0 + - s_start_parallaxAdvanced: 0 + - s_start_vertexRounding: 0 + - s_start_vertexRoundingAL: 0 + - shader_is_using_thry_editor: 0 + - shader_locale: 0 + - shader_master_label: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _1st_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALDecalVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALDecalVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _ALDecaldCircleDimensions: {r: 0, g: 1, b: 0, a: 1} + - _ALUVPosition: {r: 0.5, g: 0.5, b: 1, a: 1} + - _ALUVScale: {r: 1, g: 1, b: 1, a: 1} + - _ALVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _AlphaAudioLinkAddRange: {r: 0, g: 0, b: 0, a: 1} + - _AlphaColor: {r: 1, g: 1, b: 1, a: 1} + - _AlphaMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _AlphaTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _AngleForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _Aniso0Tint: {r: 1, g: 1, b: 1, a: 1} + - _Aniso1Tint: {r: 1, g: 1, b: 1, a: 1} + - _AnisoColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _AnisotropyMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Ap_Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Ap_RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkBandOverrideSliders: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveDetail: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission0CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission1CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission2CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission3CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookFrame: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookScale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkOutlineColorMod: {r: 0, g: 1, b: 0, a: 0} + - _AudioLinkOutlineEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineSize: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkPathEmissionAddA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkRim2BrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2EmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2WidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimWidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiInnerEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiOuterEmission: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceColor: {r: 1, g: 1, b: 1, a: 1} + - _BackFaceMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BacklightColor: {r: 0.85, g: 0.8, b: 0.7, a: 1} + - _BacklightColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _BlackLightMasking0Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking1Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking2Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking3Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlueColor: {r: 1, g: 1, b: 1, a: 1} + - _BlueTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BumpMapPan: {r: 0, g: 0, b: 0, a: 0} + - _CenterOutDissolveDirection: {r: 0, g: 0, b: 1, a: 0} + - _ClearCoatMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _ClearCoatReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _ClearCoatSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _ClothMetallicSmoothnessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapColor: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotation: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotationPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalColor: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor1: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor2: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor3: {r: 1, g: 1, b: 1, a: 1} + - _DecalMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalPosition: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition1: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition2: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition3: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalScale: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale1: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale2: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale3: {r: 1, g: 1, b: 1, a: 0} + - _DecalSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset1: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset2: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset3: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DepthColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DepthRimColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DetailMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailNormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTexPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTint: {r: 1, g: 1, b: 1, a: 1} + - _DissolveDetailNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveEdgeColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveEndPoint: {r: 0, g: 1, b: 0, a: 0} + - _DissolveMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveNoiseTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveStartPoint: {r: 0, g: -1, b: 0, a: 0} + - _DissolveTextureColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveToTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrength1AudioLink: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrengthAudioLink: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL0Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL0StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL1Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL1StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL2Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL2StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL3Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL3StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColor: {r: 1, g: 0.32790178, b: 0, a: 1} + - _EmissionColor1: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor2: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor3: {r: 1, g: 1, b: 1, a: 1} + - _EmissionMap1Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMapPan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask1Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _EmissiveScroll_Direction: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction1: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction2: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction3: {r: 0, g: -10, b: 0, a: 0} + - _FXProximityColorMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _FXProximityColorMinColor: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookColor: {r: 1, g: 1, b: 1, a: 1} + - _FlipbookCrossfadeRange: {r: 0.75, g: 1, b: 0, a: 1} + - _FlipbookMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookPanning: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _FlipbookSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookTexArrayPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALMaxBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALSizeAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterColor: {r: 1, g: 1, b: 1, a: 1} + - _GlitterColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSize: {r: 0.1, g: 0.5, b: 0, a: 1} + - _GlitterRandomRotationSpeed: {r: 0, g: 0, b: 0, a: 0} + - _GlitterUVPanning: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskMinMaxSlider_0: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_1: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_10: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_11: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_12: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_13: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_14: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_15: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_2: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_3: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_4: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_5: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_6: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_7: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_8: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_9: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskTexture0Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalThemeColor0: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor1: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor2: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor3: {r: 1, g: 1, b: 1, a: 1} + - _GreenColor: {r: 1, g: 1, b: 1, a: 1} + - _GreenTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _HeightMapPan: {r: 0, g: 0, b: 0, a: 0} + - _HeightmaskPan: {r: 0, g: 0, b: 0, a: 0} + - _HighColor: {r: 1, g: 1, b: 1, a: 1} + - _HighColor_TexPan: {r: 0, g: 0, b: 0, a: 0} + - _LTCGI_DiffuseColor: {r: 1, g: 1, b: 1, a: 1} + - _LTCGI_SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _LightDataSDFMapPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingAOMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingDetailShadowMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingForcedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingWrappedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightngForcedDirection: {r: 0, g: 0, b: 0, a: 1} + - _LineColor: {r: 1, g: 1, b: 1, a: 1} + - _LookAtAlphaDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtAlphaMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtBlueDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtBlueMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBluePivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBlueUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtGreenDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtGreenMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtRedMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _MainColorAdjustTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MainTexPan: {r: 0, g: 0, b: 0, a: 0} + - _MatCap2ndBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap3rdBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap4thBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCapBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap3MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap4MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Pan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapColor: {r: 1, g: 1, b: 1, a: 1} + - _MatcapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapPan: {r: 0, g: 0, b: 0, a: 0} + - _MirrorColor: {r: 1, g: 1, b: 1, a: 1} + - _MirrorTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _MochieSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _MultilayerMathBlurMapPan: {r: 0, g: 0, b: 0, a: 0} + - _NormalCorrectOrigin: {r: 0, g: 0.4, b: -0.025, a: 1} + - _OutlineDropShadowOffset: {r: 1, g: 0, b: 0, a: 0} + - _OutlineMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _OutlinePersonaDirection: {r: 1, g: 0, b: 0, a: 0} + - _OutlineTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _PBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _PPMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _PPRGB: {r: 1, g: 1, b: 1, a: 1} + - _PPTint: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ParallaxInternalMapPan: {r: 0, g: 0, b: 1, a: 1} + - _ParallaxInternalMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMinColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalPanDepthSpeed: {r: 0, g: 0, b: 1, a: 1} + - _PathALAutoCorrelatorRangeA: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeB: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeG: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeR: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALHistoryRangeA: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeB: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeG: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeR: {r: 0, g: 1, b: 0, a: 1} + - _PathColorA: {r: 1, g: 1, b: 1, a: 1} + - _PathColorB: {r: 1, g: 1, b: 1, a: 1} + - _PathColorG: {r: 1, g: 1, b: 1, a: 1} + - _PathColorR: {r: 1, g: 1, b: 1, a: 1} + - _PathEmissionStrength: {r: 0, g: 0, b: 0, a: 0} + - _PathGapLengths: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathOffset: {r: 0, g: 0, b: 0, a: 0} + - _PathRemapA: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapB: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapG: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapR: {r: 0, g: 1, b: 0, a: 1} + - _PathSegments: {r: 0, g: 0, b: 0, a: 0} + - _PathSoftness: {r: 1, g: 1, b: 1, a: 1} + - _PathSpeed: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathTime: {r: -999, g: -999, b: -999, a: -999} + - _PathWidth: {r: 0.03, g: 0.03, b: 0.03, a: 0.03} + - _PathingColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PathingMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PolarCenter: {r: 0.5, g: 0.5, b: 0, a: 0} + - _RGBAAlphaPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAAlphaPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAAlphaScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBABlueScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAGreenScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBARedPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBASmoothnessMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RedColor: {r: 1, g: 1, b: 1, a: 1} + - _RedTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _ReflectionColor: {r: 1, g: 1, b: 1, a: 1} + - _ReflectionCubeColor: {r: 0, g: 0, b: 0, a: 1} + - _RgbNormalAPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalBPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalGPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalRPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2Color: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _Rim2ColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2IndirColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2ShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _Rim2TexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimColor: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _RimColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimEnviroMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimIndirColor: {r: 1, g: 1, b: 1, a: 1} + - _RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _RimMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _RimTexPan: {r: 0, g: 0, b: 0, a: 0} + - _SDFForward: {r: 0, g: 0, b: 1, a: 0} + - _SDFLeft: {r: -1, g: 0, b: 0, a: 0} + - _SDFShadingTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOColor: {r: 0, g: 0, b: 0, a: 1} + - _SSAOColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOHSV: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaxDistanceFalloff: {r: 0.01, g: 0.1, b: 1, a: 1} + - _SSSColor: {r: 1, g: 0, b: 0, a: 1} + - _SSSThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_HighColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_Rim2LightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_RimLightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowAOShift: {r: 0, g: 1, b: 0, a: 1} + - _ShadowAOShift2: {r: 0, g: 1, b: 0, a: 1} + - _ShadowBorderColor: {r: 1, g: 0, b: 0, a: 1} + - _ShadowBorderMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowColor: {r: 0.7, g: 0.75, b: 0.85, a: 1} + - _ShadowColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowStrengthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SkinThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SphericalDissolveCenter: {r: 0, g: 0, b: 0, a: 1} + - _SssColorBleedAoWeights: {r: 0.4, g: 0.15, b: 0.13, a: 0} + - _SssTransmissionAbsorption: {r: -8, g: -40, b: -64, a: 0} + - _TPS_BuldgeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorForward: {r: 0, g: 0, b: 1, a: 0} + - _TPS_PenetratorRight: {r: 1, g: 0, b: 0, a: 0} + - _TPS_PenetratorScale: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorUp: {r: 0, g: 1, b: 0, a: 0} + - _TPS_SqueezeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSScale: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericColor: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericScale: {r: 1, g: 1, b: 1, a: 1} + - _TextPositionColor: {r: 1, g: 0, b: 1, a: 1} + - _TextPositionOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionScale: {r: 1, g: 1, b: 1, a: 1} + - _TextTimeColor: {r: 1, g: 0, b: 1, a: 1} + - _TextTimeOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextTimePadding: {r: 0, g: 0, b: 0, a: 0} + - _TextTimeScale: {r: 1, g: 1, b: 1, a: 1} + - _TruchetALAlpha: {r: 0, g: 0, b: 0, a: 0} + - _TruchetALEmission: {r: 0, g: 0, b: 0, a: 0} + - _TruchetChronoPanSpeed: {r: 0, g: 0, b: 0, a: 0} + - _TruchetColor: {r: 1, g: 1, b: 1, a: 1} + - _TruchetMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _TruchetPanOffset: {r: 0, g: 0, b: 0, a: 0} + - _TruchetTexPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexBasicsMaskUVPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalRotationAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalRotationCTALSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalScaleALMax: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalScaleALMin: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexLookAtAlphaAudiolink: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationHeightAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationHeightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationLocalRotation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalRotationSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalScale: {r: 1, g: 1, b: 1, a: 1} + - _VertexManipulationLocalTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationWorldTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexRoundingRangeAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexSpectrumOffsetMax: {r: 0, g: 0.1, b: 0, a: 1} + - _VertexSpectrumOffsetMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexSphereCenter: {r: 0, g: 0, b: 0, a: 1} + - _VertexWindDetailDirection: {r: 0, g: 1, b: 0, a: 0} + - _VertexWindPrimaryDirection: {r: 1, g: 0, b: 0, a: 0} + - _VertexWorldTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexWorldTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VideoMaskTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _VideoResolution: {r: 1280, g: 720, b: 0, a: 0} + - _VoronoiGradient: {r: 0, g: 0.5, b: 0, a: 0} + - _VoronoiInnerColor: {r: 1, g: 1, b: 1, a: 1} + - _VoronoiMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiOuterColor: {r: 0, g: 0, b: 0, a: 1} + - _VoronoiRandomMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiRandomMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiSpeed: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Quiz/Materials/DownCount/PlayerDesk.mat.meta b/Assets/Quiz/Materials/DownCount/PlayerDesk.mat.meta new file mode 100644 index 0000000..65bb882 --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/PlayerDesk.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 026a7c368b9c59343bc40afa213abe94 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/DownCount/Walls.mat b/Assets/Quiz/Materials/DownCount/Walls.mat new file mode 100644 index 0000000..49a5529 --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/Walls.mat @@ -0,0 +1,3814 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Walls + m_Shader: {fileID: 4800000, guid: ae2ffd0bd8a5d534b8f8b7998dcb1116, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: + - BSSBLOOMFOGTYPE_HEIGHT + - MOCHIE_PBR + - PROP_LIGHTINGAOMAPS + - VIGNETTE_MASKED + - _EMISSION + - _LIGHTINGMODE_REALISTIC + - _RIM2STYLE_POIYOMI + - _RIMSTYLE_POIYOMI + - _STOCHASTICMODE_DELIOT_HEITZ + m_LightmapFlags: 2 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + AllLockedGUIDS: 6c802bc1dd1dee24095056a5f6da8a8a + OriginalKeywords: BSSBLOOMFOGTYPE_HEIGHT MOCHIE_PBR PROP_LIGHTINGAOMAPS VIGNETTE_MASKED + _EMISSION _LIGHTINGMODE_REALISTIC _RIM2STYLE_POIYOMI _RIMSTYLE_POIYOMI _STOCHASTICMODE_DELIOT_HEITZ + OriginalShader: .poiyomi/Poiyomi Pro World + OriginalShaderGUID: a11582d439d5e494986c4b421999c03a + RenderType: Opaque + _stripped_tex__ClothDFG: 76d65cbce584df7449699fb8406f60ea + _stripped_tex__SkinLUT: d13510bb2be49aa40a66a0101efb6a36 + _stripped_tex__ToonRamp: 61bd594533da4fc42bd46ef93ba5a4f6 + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _AnisotropyMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 11c8dc923a1337840a6a9ebf4a27aa70, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 2800000, guid: 384585c1d1eb2ae4293c37bc13542310, type: 3} + m_Scale: {x: 10, y: 10} + m_Offset: {x: 0, y: 0} + - _EmissionMask: + m_Texture: {fileID: 2800000, guid: 7b7275b808b61f1499ce6005ee06ba4c, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionScrollingCurve: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightDataSDFMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingAOMaps: + m_Texture: {fileID: 2800000, guid: 58de770f88430dc4f89dbeef68015f90, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingDetailShadowMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 5fe84a5a7d7b96541a716da6450912d7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MochieMetallicMaps: + m_Texture: {fileID: 2800000, guid: 487f8b323c297c945ab4bbdd7fefde3b, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MochieReflCube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _UzumoreMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - DSGI: 0 + - GeometryShader_Enabled: 1 + - Instancing: 0 + - LightmapFlags: 0 + - Tessellation_Enabled: 1 + - VertexBasicsMaskUV: 0 + - _1st2nd_Shades_Feather: 0.0001 + - _1stShadeMapMask_Inverse: 0 + - _1st_ShadeMapUV: 0 + - _2ndShadeMapMask_Inverse: 0 + - _2nd_ShadeMapUV: 0 + - _ALDecalBandClipMax: 1 + - _ALDecalBandClipMin: 0 + - _ALDecalBandStep: 0 + - _ALDecalBaseBoost: 5 + - _ALDecalBlendAlpha: 1 + - _ALDecalBlendType: 0 + - _ALDecalColorMaskUV: 0 + - _ALDecalControlsAlpha: 0 + - _ALDecalGlobalMask: 0 + - _ALDecalGlobalMaskBlendType: 2 + - _ALDecalHighEmission: 0 + - _ALDecalLineWidth: 1 + - _ALDecalLowEmission: 0 + - _ALDecalMidEmission: 0 + - _ALDecalShapeClip: 0 + - _ALDecalShapeClipBandWidth: 0.5 + - _ALDecalShapeClipVolumeWidth: 0.5 + - _ALDecalTrebleBoost: 1 + - _ALDecalType: 0 + - _ALDecalUV: 0 + - _ALDecalUVMode: 0 + - _ALDecalVolume: 0.5 + - _ALDecalVolumeClipMax: 1 + - _ALDecalVolumeClipMin: 0 + - _ALDecalVolumeColorHighThemeIndex: 0 + - _ALDecalVolumeColorLowThemeIndex: 0 + - _ALDecalVolumeColorMidThemeIndex: 0 + - _ALDecalVolumeColorSource: 1 + - _ALDecalVolumeStep: 0 + - _ALHighEmission: 0 + - _ALLowEmission: 0 + - _ALMidEmission: 0 + - _ALUVRotation: 0 + - _ALUVRotationSpeed: 0 + - _ALVolumeColorBlendAlpha: 1 + - _ALVolumeColorBlendType: 0 + - _ALVolumeColorDirection: 0 + - _ALVolumeColorHighThemeIndex: 0 + - _ALVolumeColorLowThemeIndex: 0 + - _ALVolumeColorMidThemeIndex: 0 + - _ALVolumeColorUV: 0 + - _AddBlendOp: 4 + - _AddBlendOpAlpha: 4 + - _AddDstBlend: 1 + - _AddDstBlendAlpha: 1 + - _AddSrcBlend: 1 + - _AddSrcBlendAlpha: 0 + - _Add_Antipodean_Rim2Light: 0 + - _Add_Antipodean_RimLight: 0 + - _AlphaAlphaAdd: 0 + - _AlphaAngular: 0 + - _AlphaAngularGlobalMask: 0 + - _AlphaAudioLinkAddBand: 0 + - _AlphaAudioLinkEnabled: 0 + - _AlphaBoostFA: 10 + - _AlphaColorThemeIndex: 0 + - _AlphaDistanceFade: 0 + - _AlphaDistanceFadeGlobalMask: 0 + - _AlphaDistanceFadeMax: 0 + - _AlphaDistanceFadeMaxAlpha: 1 + - _AlphaDistanceFadeMin: 0 + - _AlphaDistanceFadeMinAlpha: 0 + - _AlphaDistanceFadeType: 1 + - _AlphaDitherBias: 0 + - _AlphaDitherGradient: 0.1 + - _AlphaDithering: 0 + - _AlphaForceOpaque: 1 + - _AlphaFresnel: 0 + - _AlphaFresnelAlpha: 0 + - _AlphaFresnelGlobalMask: 0 + - _AlphaFresnelInvert: 0 + - _AlphaFresnelSharpness: 0.5 + - _AlphaFresnelWidth: 0.5 + - _AlphaGlobalMask: 0 + - _AlphaGlobalMaskBlendType: 2 + - _AlphaMaskBlendStrength: 1 + - _AlphaMaskInvert: 0 + - _AlphaMaskUV: 0 + - _AlphaMaskValue: 0 + - _AlphaMipScale: 0.25 + - _AlphaMod: 0 + - _AlphaPremultiply: 0 + - _AlphaSharpenedA2C: 0 + - _AlphaTextureStochastic: 0 + - _AlphaTextureUV: 0 + - _AlphaToCoverage: 0 + - _AngleCompareTo: 0 + - _AngleMinAlpha: 0 + - _AngleType: 0 + - _Aniso0Blur: 0 + - _Aniso0Edge: 0.5 + - _Aniso0Offset: 0 + - _Aniso0OffsetMapStrength: 0 + - _Aniso0Power: 0 + - _Aniso0Strength: 1 + - _Aniso0SwitchDirection: 0 + - _Aniso0TintIndex: 0 + - _Aniso0ToonMode: 0 + - _Aniso1Blur: 0 + - _Aniso1Edge: 0.5 + - _Aniso1Offset: 0 + - _Aniso1OffsetMapStrength: 0 + - _Aniso1Power: 0.1 + - _Aniso1Strength: 1 + - _Aniso1SwitchDirection: 0 + - _Aniso1TintIndex: 0 + - _Aniso1ToonMode: 0 + - _AnisoAdd: 1 + - _AnisoColorMapUV: 0 + - _AnisoGlobalMask: 0 + - _AnisoGlobalMaskBlendType: 2 + - _AnisoHideInShadow: 1 + - _AnisoReplace: 0 + - _AnisoUseBaseColor: 0 + - _AnisoUseLightColor: 1 + - _Anisotropy: 0 + - _AnisotropyMapChannel: 0 + - _AnisotropyMapUV: 0 + - _Ap_Rim2Light_FeatherOff: 0 + - _Ap_Rim2Light_Power: 0.1 + - _Ap_RimLight_FeatherOff: 0 + - _Ap_RimLight_Power: 0.1 + - _ApplyReflection: 0 + - _ApplySpecular: 1 + - _ApplySpecularFA: 1 + - _AudioLinkAnimToggle: 1 + - _AudioLinkBandOverridesEnabled: 0 + - _AudioLinkDecal0AlphaBand: 0 + - _AudioLinkDecal0ChannelSeparationBand: 0 + - _AudioLinkDecal0EmissionBand: 0 + - _AudioLinkDecal0RotationBand: 0 + - _AudioLinkDecal0ScaleBand: 0 + - _AudioLinkDecal0SideBand: 0 + - _AudioLinkDecal1AlphaBand: 0 + - _AudioLinkDecal1ChannelSeparationBand: 0 + - _AudioLinkDecal1EmissionBand: 0 + - _AudioLinkDecal1RotationBand: 0 + - _AudioLinkDecal1ScaleBand: 0 + - _AudioLinkDecal1SideBand: 0 + - _AudioLinkDecal2AlphaBand: 0 + - _AudioLinkDecal2ChannelSeparationBand: 0 + - _AudioLinkDecal2EmissionBand: 0 + - _AudioLinkDecal2RotationBand: 0 + - _AudioLinkDecal2ScaleBand: 0 + - _AudioLinkDecal2SideBand: 0 + - _AudioLinkDecal3AlphaBand: 0 + - _AudioLinkDecal3ChannelSeparationBand: 0 + - _AudioLinkDecal3EmissionBand: 0 + - _AudioLinkDecal3RotationBand: 0 + - _AudioLinkDecal3ScaleBand: 0 + - _AudioLinkDecal3SideBand: 0 + - _AudioLinkDecalCC0: 0 + - _AudioLinkDecalCC1: 0 + - _AudioLinkDecalCC2: 0 + - _AudioLinkDecalCC3: 0 + - _AudioLinkDissolveAlphaBand: 0 + - _AudioLinkDissolveDetailBand: 0 + - _AudioLinkEmission0CenterOutBand: 0 + - _AudioLinkEmission0CenterOutDuration: 1 + - _AudioLinkEmission0CenterOutSize: 0 + - _AudioLinkEmission1CenterOutBand: 0 + - _AudioLinkEmission1CenterOutDuration: 1 + - _AudioLinkEmission1CenterOutSize: 0 + - _AudioLinkEmission2CenterOutBand: 0 + - _AudioLinkEmission2CenterOutDuration: 1 + - _AudioLinkEmission2CenterOutSize: 0 + - _AudioLinkEmission3CenterOutBand: 0 + - _AudioLinkEmission3CenterOutDuration: 1 + - _AudioLinkEmission3CenterOutSize: 0 + - _AudioLinkFlipbookAlphaBand: 0 + - _AudioLinkFlipbookEmissionBand: 0 + - _AudioLinkFlipbookFrameBand: 0 + - _AudioLinkFlipbookScaleBand: 0 + - _AudioLinkHelp: 0 + - _AudioLinkOutlineColorBand: 0 + - _AudioLinkOutlineEmissionBand: 0 + - _AudioLinkOutlineSizeBand: 0 + - _AudioLinkPathEmissionAddBandA: 0 + - _AudioLinkPathEmissionAddBandB: 0 + - _AudioLinkPathEmissionAddBandG: 0 + - _AudioLinkPathEmissionAddBandR: 0 + - _AudioLinkPathTimeOffsetBandA: 0 + - _AudioLinkPathTimeOffsetBandB: 0 + - _AudioLinkPathTimeOffsetBandG: 0 + - _AudioLinkPathTimeOffsetBandR: 0 + - _AudioLinkPathWidthOffsetBandA: 0 + - _AudioLinkPathWidthOffsetBandB: 0 + - _AudioLinkPathWidthOffsetBandG: 0 + - _AudioLinkPathWidthOffsetBandR: 0 + - _AudioLinkRim2BrightnessBand: 0 + - _AudioLinkRim2EmissionBand: 0 + - _AudioLinkRim2WidthBand: 0 + - _AudioLinkRimBrightnessBand: 0 + - _AudioLinkRimEmissionBand: 0 + - _AudioLinkRimWidthBand: 0 + - _AudioLinkSmoothingBass: 0 + - _AudioLinkSmoothingHighMid: 0 + - _AudioLinkSmoothingLowMid: 0 + - _AudioLinkSmoothingTreble: 0 + - _AudioLinkVoronoiChronoSpeedXBand: 0 + - _AudioLinkVoronoiChronoSpeedXSpeed: 0 + - _AudioLinkVoronoiChronoSpeedXType: 0 + - _AudioLinkVoronoiChronoSpeedYBand: 0 + - _AudioLinkVoronoiChronoSpeedYSpeed: 0 + - _AudioLinkVoronoiChronoSpeedYType: 0 + - _AudioLinkVoronoiChronoSpeedZBand: 0 + - _AudioLinkVoronoiChronoSpeedZSpeed: 0 + - _AudioLinkVoronoiChronoSpeedZType: 0 + - _AudioLinkVoronoiGradientMaxAdd: 0 + - _AudioLinkVoronoiGradientMaxAddBand: 0 + - _AudioLinkVoronoiGradientMinAdd: 0 + - _AudioLinkVoronoiGradientMinAddBand: 0 + - _AudioLinkVoronoiInnerEmissionBand: 0 + - _AudioLinkVoronoiOuterEmissionBand: 0 + - _BRDFTPSDepthEnabled: 0 + - _BRDFTPSReflectionMaskStrength: 1 + - _BRDFTPSSpecularMaskStrength: 1 + - _BSSBloomfog: 0 + - _BSSBloomfogType: 1 + - _BSSEnabled: 0 + - _BSSHelpBox1: 0 + - _BSSHelpBox2: 0 + - _BSSHelpBox3: 0 + - _BSSSpacer1: 0 + - _BSSSpacer2: 0 + - _BSSSpacer3: 0 + - _BackFaceColorThemeIndex: 0 + - _BackFaceDetailIntensity: 1 + - _BackFaceEmissionLimiter: 1 + - _BackFaceEmissionStrength: 0 + - _BackFaceEnabled: 0 + - _BackFaceHueSelectOrShift: 1 + - _BackFaceHueShift: 0 + - _BackFaceHueShiftEnabled: 0 + - _BackFaceHueShiftSpeed: 0 + - _BackFaceMaskChannel: 0 + - _BackFaceMaskUV: 0 + - _BackFaceReplaceAlpha: 0 + - _BackFaceShiftColorSpace: 0 + - _BackFaceTextureUV: 0 + - _BacklightBackfaceMask: 1 + - _BacklightBlur: 0.05 + - _BacklightBorder: 0.35 + - _BacklightColorTexUV: 0 + - _BacklightDirectivity: 5 + - _BacklightEnabled: 0 + - _BacklightMainStrength: 0 + - _BacklightNormalStrength: 1 + - _BacklightReceiveShadow: 1 + - _BacklightViewStrength: 1 + - _BaseColor_Step: 0.5 + - _BaseShade_Feather: 0.0001 + - _BlackLightMasking0GlobalMaskBlendType: 0 + - _BlackLightMasking0GlobalMaskIndex: 0 + - _BlackLightMasking0Key: 1 + - _BlackLightMasking1GlobalMaskBlendType: 0 + - _BlackLightMasking1GlobalMaskIndex: 0 + - _BlackLightMasking1Key: 2 + - _BlackLightMasking2GlobalMaskBlendType: 0 + - _BlackLightMasking2GlobalMaskIndex: 0 + - _BlackLightMasking2Key: 3 + - _BlackLightMasking3GlobalMaskBlendType: 0 + - _BlackLightMasking3GlobalMaskIndex: 0 + - _BlackLightMasking3Key: 4 + - _BlackLightMaskingEnabled: 0 + - _BlendOp: 0 + - _BlendOpAlpha: 0 + - _BlendshapeBadScaleFix: 1 + - _BlendshapePower: 1 + - _BlueAlphaAdd: 0 + - _BlueColorThemeIndex: 0 + - _BlueTextureStochastic: 0 + - _BlueTextureUV: 0 + - _BulgeOffset: 0 + - _BulgePower: 0 + - _BumpMapStochastic: 0 + - _BumpMapUV: 0 + - _BumpScale: 1 + - _CCIgnoreCastedShadows: 0 + - _CameraAngleMax: 90 + - _CameraAngleMin: 45 + - _CenterOutDissolveInvert: 0 + - _CenterOutDissolveMode: 1 + - _CenterOutDissolveNormals: 0 + - _CenterOutDissolvePower: 1 + - _ClearCoatBRDF: 0 + - _ClearCoatForceFallback: 0 + - _ClearCoatGSAAEnabled: 1 + - _ClearCoatGSAAThreshold: 0.1 + - _ClearCoatGSAAVariance: 0.15 + - _ClearCoatGlobalMask: 0 + - _ClearCoatGlobalMaskBlendType: 2 + - _ClearCoatLitFallback: 1 + - _ClearCoatMapsClearCoatMaskChannel: 0 + - _ClearCoatMapsReflectionMaskChannel: 2 + - _ClearCoatMapsRoughnessChannel: 1 + - _ClearCoatMapsSpecularMaskChannel: 3 + - _ClearCoatMapsStochastic: 0 + - _ClearCoatMapsUV: 0 + - _ClearCoatMaskInvert: 0 + - _ClearCoatNormalSelect: 0 + - _ClearCoatReflectionMaskInvert: 0 + - _ClearCoatReflectionStrength: 1 + - _ClearCoatReflectionStrengthGlobalMask: 0 + - _ClearCoatReflectionStrengthGlobalMaskBlendType: 2 + - _ClearCoatReflectionTintThemeIndex: 0 + - _ClearCoatSmoothness: 1 + - _ClearCoatSmoothnessGlobalMask: 0 + - _ClearCoatSmoothnessGlobalMaskBlendType: 2 + - _ClearCoatSmoothnessMapInvert: 0 + - _ClearCoatSpecularMaskInvert: 0 + - _ClearCoatSpecularStrength: 1 + - _ClearCoatSpecularStrengthGlobalMask: 0 + - _ClearCoatSpecularStrengthGlobalMaskBlendType: 2 + - _ClearCoatSpecularTintThemeIndex: 0 + - _ClearCoatStrength: 1 + - _ClearCoatTPSDepthMaskEnabled: 0 + - _ClearCoatTPSMaskStrength: 1 + - _ClearcoatExposureOcclusion: 0 + - _ClearcoatFresnelStrength: 0.5 + - _ClothLerp: 0 + - _ClothMetallicSmoothnessMapInvert: 0 + - _ClothMetallicSmoothnessMapUV: 0 + - _ClothReflectance: 0.5 + - _ClothSmoothness: 0.5 + - _ColorGradingToggle: 0 + - _ColorMask: 15 + - _ColorThemeIndex: 0 + - _ContinuousDissolve: 0 + - _CubeMapBlendAmount: 1 + - _CubeMapBrightness: 0 + - _CubeMapColorThemeIndex: 0 + - _CubeMapContrast: 1 + - _CubeMapEmissionStrength: 0 + - _CubeMapEnabled: 0 + - _CubeMapHueSelectOrShift: 1 + - _CubeMapHueShift: 0 + - _CubeMapHueShiftColorSpace: 0 + - _CubeMapHueShiftEnabled: 0 + - _CubeMapHueShiftSpeed: 0 + - _CubeMapIntensity: 1 + - _CubeMapLightMask: 0 + - _CubeMapMaskChannel: 0 + - _CubeMapMaskGlobalMask: 0 + - _CubeMapMaskGlobalMaskBlendType: 2 + - _CubeMapMaskInvert: 0 + - _CubeMapMaskUV: 0 + - _CubeMapNormal: 1 + - _CubeMapSaturation: 1 + - _CubeMapSmoothness: 1 + - _CubeMapUVMode: 1 + - _CubeMapWorldNormalsStrength: 1 + - _CubemapBlendType: 0 + - _Cull: 2 + - _CurvFix: 1 + - _Curvature: 0 + - _CurvatureU: 0 + - _CurvatureV: 0 + - _CustomColors: 0 + - _Cutoff: 0.5 + - _Decal0ApplyGlobalMaskBlendType: 0 + - _Decal0ApplyGlobalMaskIndex: 0 + - _Decal0ChannelSeparation: 0 + - _Decal0ChannelSeparationAngleStrength: 0 + - _Decal0ChannelSeparationEnable: 0 + - _Decal0ChannelSeparationHue: 0 + - _Decal0ChannelSeparationPremultiply: 0 + - _Decal0ChannelSeparationVertical: 0 + - _Decal0Depth: 0 + - _Decal0FaceMask: 0 + - _Decal0GlobalMask: 0 + - _Decal0GlobalMaskBlendType: 2 + - _Decal0HueAngleStrength: 0 + - _Decal0MaskChannel: 0 + - _Decal0OnlyVideo: 0 + - _Decal0OverrideAlphaMode: 0 + - _Decal0TPSMaskStrength: 1 + - _Decal0UseDecalAlpha: 0 + - _Decal0VideoAspectFix: 0 + - _Decal0VideoEmissionStrength: 0 + - _Decal0VideoEnabled: 0 + - _Decal0VideoFitToScale: 1 + - _Decal1ApplyGlobalMaskBlendType: 0 + - _Decal1ApplyGlobalMaskIndex: 0 + - _Decal1ChannelSeparation: 0 + - _Decal1ChannelSeparationAngleStrength: 0 + - _Decal1ChannelSeparationEnable: 0 + - _Decal1ChannelSeparationHue: 0 + - _Decal1ChannelSeparationPremultiply: 0 + - _Decal1ChannelSeparationVertical: 0 + - _Decal1Depth: 0 + - _Decal1FaceMask: 0 + - _Decal1GlobalMask: 0 + - _Decal1GlobalMaskBlendType: 2 + - _Decal1HueAngleStrength: 0 + - _Decal1MaskChannel: 1 + - _Decal1OnlyVideo: 0 + - _Decal1OverrideAlphaMode: 0 + - _Decal1TPSMaskStrength: 1 + - _Decal1UseDecalAlpha: 0 + - _Decal1VideoAspectFix: 0 + - _Decal1VideoEmissionStrength: 0 + - _Decal1VideoEnabled: 0 + - _Decal1VideoFitToScale: 1 + - _Decal2ApplyGlobalMaskBlendType: 0 + - _Decal2ApplyGlobalMaskIndex: 0 + - _Decal2ChannelSeparation: 0 + - _Decal2ChannelSeparationAngleStrength: 0 + - _Decal2ChannelSeparationEnable: 0 + - _Decal2ChannelSeparationHue: 0 + - _Decal2ChannelSeparationPremultiply: 0 + - _Decal2ChannelSeparationVertical: 0 + - _Decal2Depth: 0 + - _Decal2FaceMask: 0 + - _Decal2GlobalMask: 0 + - _Decal2GlobalMaskBlendType: 2 + - _Decal2HueAngleStrength: 0 + - _Decal2MaskChannel: 2 + - _Decal2OnlyVideo: 0 + - _Decal2OverrideAlphaMode: 0 + - _Decal2TPSMaskStrength: 1 + - _Decal2UseDecalAlpha: 0 + - _Decal2VideoAspectFix: 0 + - _Decal2VideoEmissionStrength: 0 + - _Decal2VideoEnabled: 0 + - _Decal2VideoFitToScale: 1 + - _Decal3ApplyGlobalMaskBlendType: 0 + - _Decal3ApplyGlobalMaskIndex: 0 + - _Decal3ChannelSeparation: 0 + - _Decal3ChannelSeparationAngleStrength: 0 + - _Decal3ChannelSeparationEnable: 0 + - _Decal3ChannelSeparationHue: 0 + - _Decal3ChannelSeparationPremultiply: 0 + - _Decal3ChannelSeparationVertical: 0 + - _Decal3Depth: 0 + - _Decal3FaceMask: 0 + - _Decal3GlobalMask: 0 + - _Decal3GlobalMaskBlendType: 2 + - _Decal3HueAngleStrength: 0 + - _Decal3MaskChannel: 3 + - _Decal3OnlyVideo: 0 + - _Decal3OverrideAlphaMode: 0 + - _Decal3TPSMaskStrength: 1 + - _Decal3UseDecalAlpha: 0 + - _Decal3VideoAspectFix: 0 + - _Decal3VideoEmissionStrength: 0 + - _Decal3VideoEnabled: 0 + - _Decal3VideoFitToScale: 1 + - _DecalBlendAlpha: 1 + - _DecalBlendAlpha1: 1 + - _DecalBlendAlpha2: 1 + - _DecalBlendAlpha3: 1 + - _DecalBlendType: 0 + - _DecalBlendType1: 0 + - _DecalBlendType2: 0 + - _DecalBlendType3: 0 + - _DecalColor1ThemeIndex: 0 + - _DecalColor2ThemeIndex: 0 + - _DecalColor3ThemeIndex: 0 + - _DecalColorThemeIndex: 0 + - _DecalEmissionStrength: 0 + - _DecalEmissionStrength1: 0 + - _DecalEmissionStrength2: 0 + - _DecalEmissionStrength3: 0 + - _DecalEnabled: 0 + - _DecalEnabled1: 0 + - _DecalEnabled2: 0 + - _DecalEnabled3: 0 + - _DecalHueShift: 0 + - _DecalHueShift1: 0 + - _DecalHueShift2: 0 + - _DecalHueShift3: 0 + - _DecalHueShiftColorSpace: 0 + - _DecalHueShiftColorSpace1: 0 + - _DecalHueShiftColorSpace2: 0 + - _DecalHueShiftColorSpace3: 0 + - _DecalHueShiftEnabled: 0 + - _DecalHueShiftEnabled1: 0 + - _DecalHueShiftEnabled2: 0 + - _DecalHueShiftEnabled3: 0 + - _DecalHueShiftSelectOrShift: 1 + - _DecalHueShiftSelectOrShift1: 1 + - _DecalHueShiftSelectOrShift2: 1 + - _DecalHueShiftSelectOrShift3: 1 + - _DecalHueShiftSpeed: 0 + - _DecalHueShiftSpeed1: 0 + - _DecalHueShiftSpeed2: 0 + - _DecalHueShiftSpeed3: 0 + - _DecalMaskUV: 0 + - _DecalMirroredUVMode: 0 + - _DecalMirroredUVMode1: 0 + - _DecalMirroredUVMode2: 0 + - _DecalMirroredUVMode3: 0 + - _DecalOverrideAlpha: 0 + - _DecalOverrideAlpha1: 0 + - _DecalOverrideAlpha2: 0 + - _DecalOverrideAlpha3: 0 + - _DecalRotation: 0 + - _DecalRotation1: 0 + - _DecalRotation2: 0 + - _DecalRotation3: 0 + - _DecalRotationCTALBand0: 0 + - _DecalRotationCTALBand1: 0 + - _DecalRotationCTALBand2: 0 + - _DecalRotationCTALBand3: 0 + - _DecalRotationCTALSpeed0: 0 + - _DecalRotationCTALSpeed1: 0 + - _DecalRotationCTALSpeed2: 0 + - _DecalRotationCTALSpeed3: 0 + - _DecalRotationCTALType0: 0 + - _DecalRotationCTALType1: 0 + - _DecalRotationCTALType2: 0 + - _DecalRotationCTALType3: 0 + - _DecalRotationSpeed: 0 + - _DecalRotationSpeed1: 0 + - _DecalRotationSpeed2: 0 + - _DecalRotationSpeed3: 0 + - _DecalSymmetryMode: 0 + - _DecalSymmetryMode1: 0 + - _DecalSymmetryMode2: 0 + - _DecalSymmetryMode3: 0 + - _DecalTPSDepthMaskEnabled: 0 + - _DecalTexture1UV: 0 + - _DecalTexture2UV: 0 + - _DecalTexture3UV: 0 + - _DecalTextureUV: 0 + - _DecalTiled: 0 + - _DecalTiled1: 0 + - _DecalTiled2: 0 + - _DecalTiled3: 0 + - _DepthAlphaMaxDepth: 1 + - _DepthAlphaMaxValue: 0 + - _DepthAlphaMinDepth: 0 + - _DepthAlphaMinValue: 1 + - _DepthAlphaToggle: 0 + - _DepthBulgeFadeLength: 0.02 + - _DepthBulgeHeight: 0.02 + - _DepthBulgeMaskChannel: 0 + - _DepthBulgeMaskUV: 0 + - _DepthBulgeWarning: 0 + - _DepthColorBlendMode: 0 + - _DepthColorMaxDepth: 1 + - _DepthColorMaxValue: 0 + - _DepthColorMinDepth: 0 + - _DepthColorMinValue: 1 + - _DepthColorThemeIndex: 0 + - _DepthColorToggle: 0 + - _DepthEmissionStrength: 0 + - _DepthFXWarning: 0 + - _DepthMaskChannel: 0 + - _DepthMaskGlobalMask: 0 + - _DepthMaskGlobalMaskBlendType: 2 + - _DepthMaskUV: 0 + - _DepthRimAdd: 0 + - _DepthRimAdditiveLighting: 0 + - _DepthRimBrightness: 1 + - _DepthRimColorThemeIndex: 0 + - _DepthRimEmission: 0 + - _DepthRimHideInShadow: 0 + - _DepthRimMixBaseColor: 0 + - _DepthRimMixLightColor: 0 + - _DepthRimMultiply: 0 + - _DepthRimNormalToUse: 1 + - _DepthRimReplace: 0 + - _DepthRimSharpness: 0.2 + - _DepthRimType: 0 + - _DepthRimWidth: 0.2 + - _DepthTextureUV: 0 + - _DetailBrightness: 1 + - _DetailEnabled: 0 + - _DetailMaskStochastic: 0 + - _DetailMaskUV: 0 + - _DetailNormalGlobalMask: 0 + - _DetailNormalGlobalMaskBlendType: 2 + - _DetailNormalMapScale: 1 + - _DetailNormalMapStochastic: 0 + - _DetailNormalMapUV: 0 + - _DetailTexGlobalMask: 0 + - _DetailTexGlobalMaskBlendType: 2 + - _DetailTexIntensity: 1 + - _DetailTexStochastic: 0 + - _DetailTexUV: 0 + - _DetailTintThemeIndex: 0 + - _DisableDirectionalInAdd: 1 + - _DissolveAlpha: 0 + - _DissolveAlpha0: 0 + - _DissolveAlpha1: 0 + - _DissolveAlpha2: 0 + - _DissolveAlpha3: 0 + - _DissolveAlpha4: 0 + - _DissolveAlpha5: 0 + - _DissolveAlpha6: 0 + - _DissolveAlpha7: 0 + - _DissolveAlpha8: 0 + - _DissolveAlpha9: 0 + - _DissolveApplyGlobalMaskBlendType: 0 + - _DissolveApplyGlobalMaskIndex: 0 + - _DissolveDetailEdgeSmoothing: 0 + - _DissolveDetailNoiseUV: 0 + - _DissolveDetailStrength: 0.1 + - _DissolveEdgeColorThemeIndex: 0 + - _DissolveEdgeEmission: 0 + - _DissolveEdgeHardness: 0.5 + - _DissolveEdgeHueSelectOrShift: 1 + - _DissolveEdgeHueShift: 0 + - _DissolveEdgeHueShiftColorSpace: 0 + - _DissolveEdgeHueShiftEnabled: 0 + - _DissolveEdgeHueShiftSpeed: 0 + - _DissolveEdgeWidth: 0.025 + - _DissolveHueSelectOrShift: 1 + - _DissolveHueShift: 0 + - _DissolveHueShiftColorSpace: 0 + - _DissolveHueShiftEnabled: 0 + - _DissolveHueShiftSpeed: 0 + - _DissolveInverseApplyGlobalMaskBlendType: 0 + - _DissolveInverseApplyGlobalMaskIndex: 0 + - _DissolveInvertDetailNoise: 0 + - _DissolveInvertNoise: 0 + - _DissolveMaskGlobalMask: 0 + - _DissolveMaskGlobalMaskBlendType: 2 + - _DissolveMaskInvert: 0 + - _DissolveMaskUV: 0 + - _DissolveNoiseTextureUV: 0 + - _DissolveP2PClamp: 0 + - _DissolveP2PEdgeLength: 0.1 + - _DissolveP2PWorldLocal: 0 + - _DissolveTextureColorThemeIndex: 0 + - _DissolveToEmissionStrength: 0 + - _DissolveToTextureUV: 0 + - _DissolveType: 1 + - _DissolveUseVertexColors: 0 + - _DistortionFlowTexture1UV: 0 + - _DistortionFlowTextureUV: 0 + - _DistortionMaskChannel: 0 + - _DistortionMaskUV: 0 + - _DistortionStrength: 0.03 + - _DistortionStrength1: 0.01 + - _DistortionStrength1AudioLinkBand: 0 + - _DistortionStrengthAudioLinkBand: 0 + - _DistortionUvToDistort: 0 + - _DstBlend: 0 + - _DstBlendAlpha: 10 + - _EmissionAL0Enabled: 0 + - _EmissionAL0MultipliersBand: 0 + - _EmissionAL0StrengthBand: 0 + - _EmissionAL1Enabled: 0 + - _EmissionAL1MultipliersBand: 0 + - _EmissionAL1StrengthBand: 0 + - _EmissionAL2Enabled: 0 + - _EmissionAL2MultipliersBand: 0 + - _EmissionAL2StrengthBand: 0 + - _EmissionAL3Enabled: 0 + - _EmissionAL3MultipliersBand: 0 + - _EmissionAL3StrengthBand: 0 + - _EmissionBaseColorAsMap: 0 + - _EmissionBaseColorAsMap1: 0 + - _EmissionBaseColorAsMap2: 0 + - _EmissionBaseColorAsMap3: 0 + - _EmissionBlinkingEnabled: 0 + - _EmissionBlinkingEnabled1: 0 + - _EmissionBlinkingEnabled2: 0 + - _EmissionBlinkingEnabled3: 0 + - _EmissionBlinkingOffset: 0 + - _EmissionBlinkingOffset1: 0 + - _EmissionBlinkingOffset2: 0 + - _EmissionBlinkingOffset3: 0 + - _EmissionCenterOutEnabled: 0 + - _EmissionCenterOutEnabled1: 0 + - _EmissionCenterOutEnabled2: 0 + - _EmissionCenterOutEnabled3: 0 + - _EmissionCenterOutSpeed: 5 + - _EmissionCenterOutSpeed1: 5 + - _EmissionCenterOutSpeed2: 5 + - _EmissionCenterOutSpeed3: 5 + - _EmissionColor1ThemeIndex: 0 + - _EmissionColor2ThemeIndex: 0 + - _EmissionColor3ThemeIndex: 0 + - _EmissionColorThemeIndex: 0 + - _EmissionFluorescence: 0 + - _EmissionFluorescence1: 0 + - _EmissionFluorescence2: 0 + - _EmissionFluorescence3: 0 + - _EmissionHueSelectOrShift: 1 + - _EmissionHueSelectOrShift1: 1 + - _EmissionHueSelectOrShift2: 1 + - _EmissionHueSelectOrShift3: 1 + - _EmissionHueShift: 0 + - _EmissionHueShift1: 0 + - _EmissionHueShift2: 0 + - _EmissionHueShift3: 0 + - _EmissionHueShiftColorSpace: 0 + - _EmissionHueShiftColorSpace1: 0 + - _EmissionHueShiftColorSpace2: 0 + - _EmissionHueShiftColorSpace3: 0 + - _EmissionHueShiftEnabled: 0 + - _EmissionHueShiftEnabled1: 0 + - _EmissionHueShiftEnabled2: 0 + - _EmissionHueShiftEnabled3: 0 + - _EmissionHueShiftSpeed: 0 + - _EmissionHueShiftSpeed1: 0 + - _EmissionHueShiftSpeed2: 0 + - _EmissionHueShiftSpeed3: 0 + - _EmissionMap1UV: 0 + - _EmissionMap2UV: 0 + - _EmissionMap3UV: 0 + - _EmissionMapUV: 0 + - _EmissionMask0GlobalMask: 0 + - _EmissionMask0GlobalMaskBlendType: 2 + - _EmissionMask1Channel: 0 + - _EmissionMask1GlobalMask: 0 + - _EmissionMask1GlobalMaskBlendType: 2 + - _EmissionMask1UV: 0 + - _EmissionMask2Channel: 0 + - _EmissionMask2GlobalMask: 0 + - _EmissionMask2GlobalMaskBlendType: 2 + - _EmissionMask2UV: 0 + - _EmissionMask3Channel: 0 + - _EmissionMask3GlobalMask: 0 + - _EmissionMask3GlobalMaskBlendType: 2 + - _EmissionMask3UV: 0 + - _EmissionMaskChannel: 0 + - _EmissionMaskInvert: 0 + - _EmissionMaskInvert1: 0 + - _EmissionMaskInvert2: 0 + - _EmissionMaskInvert3: 0 + - _EmissionMaskUV: 0 + - _EmissionReplace0: 0 + - _EmissionReplace1: 0 + - _EmissionReplace2: 0 + - _EmissionReplace3: 0 + - _EmissionSaturation: 0 + - _EmissionSaturation1: 0 + - _EmissionSaturation2: 0 + - _EmissionSaturation3: 0 + - _EmissionScrollingOffset: 0 + - _EmissionScrollingOffset1: 0 + - _EmissionScrollingOffset2: 0 + - _EmissionScrollingOffset3: 0 + - _EmissionScrollingUseCurve: 0 + - _EmissionScrollingUseCurve1: 0 + - _EmissionScrollingUseCurve2: 0 + - _EmissionScrollingUseCurve3: 0 + - _EmissionScrollingVertexColor: 0 + - _EmissionScrollingVertexColor1: 0 + - _EmissionScrollingVertexColor2: 0 + - _EmissionScrollingVertexColor3: 0 + - _EmissionStrength: 0.05 + - _EmissionStrength1: 0 + - _EmissionStrength2: 0 + - _EmissionStrength3: 0 + - _EmissiveBlink_Max: 1 + - _EmissiveBlink_Max1: 1 + - _EmissiveBlink_Max2: 1 + - _EmissiveBlink_Max3: 1 + - _EmissiveBlink_Min: 0 + - _EmissiveBlink_Min1: 0 + - _EmissiveBlink_Min2: 0 + - _EmissiveBlink_Min3: 0 + - _EmissiveBlink_Velocity: 4 + - _EmissiveBlink_Velocity1: 4 + - _EmissiveBlink_Velocity2: 4 + - _EmissiveBlink_Velocity3: 4 + - _EmissiveScroll_Interval: 20 + - _EmissiveScroll_Interval1: 20 + - _EmissiveScroll_Interval2: 20 + - _EmissiveScroll_Interval3: 20 + - _EmissiveScroll_Velocity: 10 + - _EmissiveScroll_Velocity1: 10 + - _EmissiveScroll_Velocity2: 10 + - _EmissiveScroll_Velocity3: 10 + - _EmissiveScroll_Width: 10 + - _EmissiveScroll_Width1: 10 + - _EmissiveScroll_Width2: 10 + - _EmissiveScroll_Width3: 10 + - _EnableALDecal: 0 + - _EnableAniso: 0 + - _EnableAudioLink: 0 + - _EnableDepthBulge: 0 + - _EnableDepthRimLighting: 0 + - _EnableDissolve: 0 + - _EnableDissolveAudioLink: 0 + - _EnableDistortion: 0 + - _EnableDistortionAudioLink: 0 + - _EnableEmission: 1 + - _EnableEmission1: 0 + - _EnableEmission2: 0 + - _EnableEmission3: 0 + - _EnableEnvironmentalRim: 0 + - _EnableFlipbook: 0 + - _EnableGITDEmission: 0 + - _EnableGITDEmission1: 0 + - _EnableGITDEmission2: 0 + - _EnableGITDEmission3: 0 + - _EnableMirrorOptions: 0 + - _EnableOutlines: 0 + - _EnablePathRemapping: 0 + - _EnablePathing: 0 + - _EnableRim2Lighting: 0 + - _EnableRimLighting: 0 + - _EnableTouchGlow: 0 + - _EnableTruchet: 0 + - _EnableUDIMDiscardOptions: 0 + - _EnableUDIMFaceDiscardOptions: 0 + - _EnableVolumeColor: 0 + - _EntranceStiffness: 0.01 + - _EntryOpenDuration: 0.1 + - _FFBFOutlineStencilHelp0: 0 + - _FFBFOutlineStencilHelp1: 0 + - _FFBFStencilHelp0: 0 + - _FFBFStencilHelp1: 0 + - _FXProximityColor: 0 + - _FXProximityColorBackFace: 0 + - _FXProximityColorMaxColorThemeIndex: 0 + - _FXProximityColorMaxDistance: 1 + - _FXProximityColorMinColorThemeIndex: 0 + - _FXProximityColorMinDistance: 0 + - _FXProximityColorType: 1 + - _FlipBackfaceNormals: 1 + - _FlipbookAlphaControlsFinalAlpha: 0 + - _FlipbookBlendType: 0 + - _FlipbookChronoType: 0 + - _FlipbookChronotensityBand: 0 + - _FlipbookChronotensityEnabled: 0 + - _FlipbookChronotensitySpeed: 0 + - _FlipbookColorReplaces: 0 + - _FlipbookColorThemeIndex: 0 + - _FlipbookCrossfadeEnabled: 0 + - _FlipbookCurrentFrame: 0 + - _FlipbookEmissionStrength: 0 + - _FlipbookEndFrame: 0 + - _FlipbookFPS: 30 + - _FlipbookFrameOffset: 0 + - _FlipbookHueSelectOrShift: 1 + - _FlipbookHueShift: 0 + - _FlipbookHueShiftColorSpace: 0 + - _FlipbookHueShiftEnabled: 0 + - _FlipbookHueShiftSpeed: 0 + - _FlipbookIntensityControlsAlpha: 0 + - _FlipbookManualFrameControl: 0 + - _FlipbookMaskChannel: 0 + - _FlipbookMaskGlobalMask: 0 + - _FlipbookMaskGlobalMaskBlendType: 2 + - _FlipbookMaskUV: 0 + - _FlipbookReplace: 1 + - _FlipbookRotation: 0 + - _FlipbookRotationSpeed: 0 + - _FlipbookStartAndEnd: 0 + - _FlipbookStartFrame: 0 + - _FlipbookTexArrayUV: 0 + - _FlipbookTiled: 0 + - _FogHeightOffset: 0 + - _FogHeightScale: 1 + - _FogScale: 1 + - _FogStartOffset: 0 + - _ForceFlatRampedLightmap: 1 + - _ForgotToLockMaterial: 1 + - _GGXAnisotropics: 0 + - _GIEmissionMultiplier: 1 + - _GITDEMaxEmissionMultiplier: 0 + - _GITDEMaxEmissionMultiplier1: 0 + - _GITDEMaxEmissionMultiplier2: 0 + - _GITDEMaxEmissionMultiplier3: 0 + - _GITDEMaxLight: 1 + - _GITDEMaxLight1: 1 + - _GITDEMaxLight2: 1 + - _GITDEMaxLight3: 1 + - _GITDEMinEmissionMultiplier: 1 + - _GITDEMinEmissionMultiplier1: 1 + - _GITDEMinEmissionMultiplier2: 1 + - _GITDEMinEmissionMultiplier3: 1 + - _GITDEMinLight: 0 + - _GITDEMinLight1: 0 + - _GITDEMinLight2: 0 + - _GITDEMinLight3: 0 + - _GITDEWorldOrMesh: 0 + - _GITDEWorldOrMesh1: 0 + - _GITDEWorldOrMesh2: 0 + - _GITDEWorldOrMesh3: 0 + - _GSAAStrength: 0 + - _GlitterALAlphaAddBand: 0 + - _GlitterALChronoRotationSpeed: 0 + - _GlitterALChronoRotationSpeedBand: 0 + - _GlitterALChronoRotationSpeedType: 0 + - _GlitterALChronoSparkleSpeed: 0 + - _GlitterALChronoSparkleSpeedBand: 0 + - _GlitterALChronoSparkleSpeedType: 0 + - _GlitterALEnabled: 0 + - _GlitterALMaxBrightnessBand: 0 + - _GlitterALSizeAddBand: 0 + - _GlitterAngleRange: 90 + - _GlitterBias: 0.8 + - _GlitterBlendType: 0 + - _GlitterBrightness: 3 + - _GlitterCenterSize: 0.08 + - _GlitterColorMapUV: 0 + - _GlitterColorThemeIndex: 0 + - _GlitterContrast: 300 + - _GlitterEnable: 0 + - _GlitterFrequency: 300 + - _GlitterHideInShadow: 0 + - _GlitterHueSelectOrShift: 1 + - _GlitterHueShift: 0 + - _GlitterHueShiftColorSpace: 0 + - _GlitterHueShiftEnabled: 0 + - _GlitterHueShiftSpeed: 0 + - _GlitterJaggyFix: 0 + - _GlitterLayers: 2 + - _GlitterMaskChannel: 0 + - _GlitterMaskGlobalMask: 0 + - _GlitterMaskGlobalMaskBlendType: 2 + - _GlitterMaskInvert: 0 + - _GlitterMaskUV: 0 + - _GlitterMinBrightness: 0 + - _GlitterMode: 0 + - _GlitterRandomColors: 0 + - _GlitterRandomLocation: 1 + - _GlitterRandomRotation: 0 + - _GlitterRandomSize: 0 + - _GlitterScaleWithLighting: 0 + - _GlitterShape: 0 + - _GlitterSize: 0.3 + - _GlitterSpeed: 10 + - _GlitterTextureRotation: 0 + - _GlitterUV: 0 + - _GlitterUseNormals: 0 + - _GlitterUseSurfaceColor: 0 + - _GlobalMaskBackface_0: 0 + - _GlobalMaskBackface_1: 0 + - _GlobalMaskBackface_10: 0 + - _GlobalMaskBackface_11: 0 + - _GlobalMaskBackface_12: 0 + - _GlobalMaskBackface_13: 0 + - _GlobalMaskBackface_14: 0 + - _GlobalMaskBackface_15: 0 + - _GlobalMaskBackface_2: 0 + - _GlobalMaskBackface_3: 0 + - _GlobalMaskBackface_4: 0 + - _GlobalMaskBackface_5: 0 + - _GlobalMaskBackface_6: 0 + - _GlobalMaskBackface_7: 0 + - _GlobalMaskBackface_8: 0 + - _GlobalMaskBackface_9: 0 + - _GlobalMaskCamera_0: 0 + - _GlobalMaskCamera_1: 0 + - _GlobalMaskCamera_10: 0 + - _GlobalMaskCamera_11: 0 + - _GlobalMaskCamera_12: 0 + - _GlobalMaskCamera_13: 0 + - _GlobalMaskCamera_14: 0 + - _GlobalMaskCamera_15: 0 + - _GlobalMaskCamera_2: 0 + - _GlobalMaskCamera_3: 0 + - _GlobalMaskCamera_4: 0 + - _GlobalMaskCamera_5: 0 + - _GlobalMaskCamera_6: 0 + - _GlobalMaskCamera_7: 0 + - _GlobalMaskCamera_8: 0 + - _GlobalMaskCamera_9: 0 + - _GlobalMaskDistanceBlendType_0: 0 + - _GlobalMaskDistanceBlendType_1: 0 + - _GlobalMaskDistanceBlendType_10: 0 + - _GlobalMaskDistanceBlendType_11: 0 + - _GlobalMaskDistanceBlendType_12: 0 + - _GlobalMaskDistanceBlendType_13: 0 + - _GlobalMaskDistanceBlendType_14: 0 + - _GlobalMaskDistanceBlendType_15: 0 + - _GlobalMaskDistanceBlendType_2: 0 + - _GlobalMaskDistanceBlendType_3: 0 + - _GlobalMaskDistanceBlendType_4: 0 + - _GlobalMaskDistanceBlendType_5: 0 + - _GlobalMaskDistanceBlendType_6: 0 + - _GlobalMaskDistanceBlendType_7: 0 + - _GlobalMaskDistanceBlendType_8: 0 + - _GlobalMaskDistanceBlendType_9: 0 + - _GlobalMaskDistanceEnable_0: 0 + - _GlobalMaskDistanceEnable_1: 0 + - _GlobalMaskDistanceEnable_10: 0 + - _GlobalMaskDistanceEnable_11: 0 + - _GlobalMaskDistanceEnable_12: 0 + - _GlobalMaskDistanceEnable_13: 0 + - _GlobalMaskDistanceEnable_14: 0 + - _GlobalMaskDistanceEnable_15: 0 + - _GlobalMaskDistanceEnable_2: 0 + - _GlobalMaskDistanceEnable_3: 0 + - _GlobalMaskDistanceEnable_4: 0 + - _GlobalMaskDistanceEnable_5: 0 + - _GlobalMaskDistanceEnable_6: 0 + - _GlobalMaskDistanceEnable_7: 0 + - _GlobalMaskDistanceEnable_8: 0 + - _GlobalMaskDistanceEnable_9: 0 + - _GlobalMaskDistanceMaxAlpha_0: 1 + - _GlobalMaskDistanceMaxAlpha_1: 1 + - _GlobalMaskDistanceMaxAlpha_10: 1 + - _GlobalMaskDistanceMaxAlpha_11: 1 + - _GlobalMaskDistanceMaxAlpha_12: 1 + - _GlobalMaskDistanceMaxAlpha_13: 1 + - _GlobalMaskDistanceMaxAlpha_14: 1 + - _GlobalMaskDistanceMaxAlpha_15: 1 + - _GlobalMaskDistanceMaxAlpha_2: 1 + - _GlobalMaskDistanceMaxAlpha_3: 1 + - _GlobalMaskDistanceMaxAlpha_4: 1 + - _GlobalMaskDistanceMaxAlpha_5: 1 + - _GlobalMaskDistanceMaxAlpha_6: 1 + - _GlobalMaskDistanceMaxAlpha_7: 1 + - _GlobalMaskDistanceMaxAlpha_8: 1 + - _GlobalMaskDistanceMaxAlpha_9: 1 + - _GlobalMaskDistanceMax_0: 2 + - _GlobalMaskDistanceMax_1: 2 + - _GlobalMaskDistanceMax_10: 2 + - _GlobalMaskDistanceMax_11: 2 + - _GlobalMaskDistanceMax_12: 2 + - _GlobalMaskDistanceMax_13: 2 + - _GlobalMaskDistanceMax_14: 2 + - _GlobalMaskDistanceMax_15: 2 + - _GlobalMaskDistanceMax_2: 2 + - _GlobalMaskDistanceMax_3: 2 + - _GlobalMaskDistanceMax_4: 2 + - _GlobalMaskDistanceMax_5: 2 + - _GlobalMaskDistanceMax_6: 2 + - _GlobalMaskDistanceMax_7: 2 + - _GlobalMaskDistanceMax_8: 2 + - _GlobalMaskDistanceMax_9: 2 + - _GlobalMaskDistanceMinAlpha_0: 0 + - _GlobalMaskDistanceMinAlpha_1: 0 + - _GlobalMaskDistanceMinAlpha_10: 0 + - _GlobalMaskDistanceMinAlpha_11: 0 + - _GlobalMaskDistanceMinAlpha_12: 0 + - _GlobalMaskDistanceMinAlpha_13: 0 + - _GlobalMaskDistanceMinAlpha_14: 0 + - _GlobalMaskDistanceMinAlpha_15: 0 + - _GlobalMaskDistanceMinAlpha_2: 0 + - _GlobalMaskDistanceMinAlpha_3: 0 + - _GlobalMaskDistanceMinAlpha_4: 0 + - _GlobalMaskDistanceMinAlpha_5: 0 + - _GlobalMaskDistanceMinAlpha_6: 0 + - _GlobalMaskDistanceMinAlpha_7: 0 + - _GlobalMaskDistanceMinAlpha_8: 0 + - _GlobalMaskDistanceMinAlpha_9: 0 + - _GlobalMaskDistanceMin_0: 1 + - _GlobalMaskDistanceMin_1: 1 + - _GlobalMaskDistanceMin_10: 1 + - _GlobalMaskDistanceMin_11: 1 + - _GlobalMaskDistanceMin_12: 1 + - _GlobalMaskDistanceMin_13: 1 + - _GlobalMaskDistanceMin_14: 1 + - _GlobalMaskDistanceMin_15: 1 + - _GlobalMaskDistanceMin_2: 1 + - _GlobalMaskDistanceMin_3: 1 + - _GlobalMaskDistanceMin_4: 1 + - _GlobalMaskDistanceMin_5: 1 + - _GlobalMaskDistanceMin_6: 1 + - _GlobalMaskDistanceMin_7: 1 + - _GlobalMaskDistanceMin_8: 1 + - _GlobalMaskDistanceMin_9: 1 + - _GlobalMaskDistanceType_0: 1 + - _GlobalMaskDistanceType_1: 1 + - _GlobalMaskDistanceType_10: 1 + - _GlobalMaskDistanceType_11: 1 + - _GlobalMaskDistanceType_12: 1 + - _GlobalMaskDistanceType_13: 1 + - _GlobalMaskDistanceType_14: 1 + - _GlobalMaskDistanceType_15: 1 + - _GlobalMaskDistanceType_2: 1 + - _GlobalMaskDistanceType_3: 1 + - _GlobalMaskDistanceType_4: 1 + - _GlobalMaskDistanceType_5: 1 + - _GlobalMaskDistanceType_6: 1 + - _GlobalMaskDistanceType_7: 1 + - _GlobalMaskDistanceType_8: 1 + - _GlobalMaskDistanceType_9: 1 + - _GlobalMaskMirrorVisibilityMode: 1 + - _GlobalMaskMirror_0: 0 + - _GlobalMaskMirror_1: 0 + - _GlobalMaskMirror_10: 0 + - _GlobalMaskMirror_11: 0 + - _GlobalMaskMirror_12: 0 + - _GlobalMaskMirror_13: 0 + - _GlobalMaskMirror_14: 0 + - _GlobalMaskMirror_15: 0 + - _GlobalMaskMirror_2: 0 + - _GlobalMaskMirror_3: 0 + - _GlobalMaskMirror_4: 0 + - _GlobalMaskMirror_5: 0 + - _GlobalMaskMirror_6: 0 + - _GlobalMaskMirror_7: 0 + - _GlobalMaskMirror_8: 0 + - _GlobalMaskMirror_9: 0 + - _GlobalMaskModifiersBackfaceEnable: 0 + - _GlobalMaskModifiersCameraEnable: 0 + - _GlobalMaskModifiersCameraInfo: 0 + - _GlobalMaskModifiersDistanceEnable: 0 + - _GlobalMaskModifiersMirrorEnable: 0 + - _GlobalMaskOptionsEnable: 0 + - _GlobalMaskOptionsType: 0 + - _GlobalMaskSlider_0: 0 + - _GlobalMaskSlider_1: 0 + - _GlobalMaskSlider_10: 0 + - _GlobalMaskSlider_11: 0 + - _GlobalMaskSlider_12: 0 + - _GlobalMaskSlider_13: 0 + - _GlobalMaskSlider_14: 0 + - _GlobalMaskSlider_15: 0 + - _GlobalMaskSlider_2: 0 + - _GlobalMaskSlider_3: 0 + - _GlobalMaskSlider_4: 0 + - _GlobalMaskSlider_5: 0 + - _GlobalMaskSlider_6: 0 + - _GlobalMaskSlider_7: 0 + - _GlobalMaskSlider_8: 0 + - _GlobalMaskSlider_9: 0 + - _GlobalMaskTexture0Split: 0 + - _GlobalMaskTexture0UV: 0 + - _GlobalMaskTexture1Split: 0 + - _GlobalMaskTexture1UV: 0 + - _GlobalMaskTexture2Split: 0 + - _GlobalMaskTexture2UV: 0 + - _GlobalMaskTexture3Split: 0 + - _GlobalMaskTexture3UV: 0 + - _GlobalMaskTexturesEnable: 0 + - _GlobalMaskToggleOff_0: 0 + - _GlobalMaskToggleOff_1: 0 + - _GlobalMaskToggleOff_10: 0 + - _GlobalMaskToggleOff_11: 0 + - _GlobalMaskToggleOff_12: 0 + - _GlobalMaskToggleOff_13: 0 + - _GlobalMaskToggleOff_14: 0 + - _GlobalMaskToggleOff_15: 0 + - _GlobalMaskToggleOff_2: 0 + - _GlobalMaskToggleOff_3: 0 + - _GlobalMaskToggleOff_4: 0 + - _GlobalMaskToggleOff_5: 0 + - _GlobalMaskToggleOff_6: 0 + - _GlobalMaskToggleOff_7: 0 + - _GlobalMaskToggleOff_8: 0 + - _GlobalMaskToggleOff_9: 0 + - _GlobalMaskToggleOn_0: 0 + - _GlobalMaskToggleOn_1: 0 + - _GlobalMaskToggleOn_10: 0 + - _GlobalMaskToggleOn_11: 0 + - _GlobalMaskToggleOn_12: 0 + - _GlobalMaskToggleOn_13: 0 + - _GlobalMaskToggleOn_14: 0 + - _GlobalMaskToggleOn_15: 0 + - _GlobalMaskToggleOn_2: 0 + - _GlobalMaskToggleOn_3: 0 + - _GlobalMaskToggleOn_4: 0 + - _GlobalMaskToggleOn_5: 0 + - _GlobalMaskToggleOn_6: 0 + - _GlobalMaskToggleOn_7: 0 + - _GlobalMaskToggleOn_8: 0 + - _GlobalMaskToggleOn_9: 0 + - _GlobalMaskVertexColorAlpha: 0 + - _GlobalMaskVertexColorAlphaBlendType: 2 + - _GlobalMaskVertexColorBlue: 0 + - _GlobalMaskVertexColorBlueBlendType: 2 + - _GlobalMaskVertexColorGreen: 0 + - _GlobalMaskVertexColorGreenBlendType: 2 + - _GlobalMaskVertexColorLinearSpace: 1 + - _GlobalMaskVertexColorRed: 0 + - _GlobalMaskVertexColorRedBlendType: 2 + - _GlobalThemeHue0: 0 + - _GlobalThemeHue1: 0 + - _GlobalThemeHue2: 0 + - _GlobalThemeHue3: 0 + - _GlobalThemeHueSpeed0: 0 + - _GlobalThemeHueSpeed1: 0 + - _GlobalThemeHueSpeed2: 0 + - _GlobalThemeHueSpeed3: 0 + - _GlobalThemeSaturation0: 0 + - _GlobalThemeSaturation1: 0 + - _GlobalThemeSaturation2: 0 + - _GlobalThemeSaturation3: 0 + - _GlobalThemeValue0: 0 + - _GlobalThemeValue1: 0 + - _GlobalThemeValue2: 0 + - _GlobalThemeValue3: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GreenAlphaAdd: 0 + - _GreenColorThemeIndex: 0 + - _GreenTextureStochastic: 0 + - _GreenTextureUV: 0 + - _HeightMapUV: 0 + - _HeightOffset: 0 + - _HeightStepsMax: 128 + - _HeightStepsMin: 10 + - _HeightStrength: 0.005 + - _HeightmaskChannel: 0 + - _HeightmaskInvert: 0 + - _HeightmaskUV: 0 + - _HighColorThemeIndex: 0 + - _HighColor_Power: 0.2 + - _HighColor_TexUV: 0 + - _IgnoreCastedShadows: 0 + - _IgnoreFog: 0 + - _Is_BlendAddToHiColor: 0 + - _Is_LightColor_Ap_Rim2Light: 1 + - _Is_LightColor_Ap_RimLight: 1 + - _Is_LightColor_Rim2Light: 1 + - _Is_LightColor_RimLight: 1 + - _Is_NormalMapToRim2Light: 1 + - _Is_NormalMapToRimLight: 1 + - _Is_SpecularToHighColor: 0 + - _LTCGIEnabled: 0 + - _LTCGI_AnimToggle: 1 + - _LTCGI_Attribution: 0 + - _LTCGI_DiffuseColorThemeIndex: 0 + - _LTCGI_Metallic: 0 + - _LTCGI_Smoothness: 0 + - _LTCGI_SpecularColorThemeIndex: 0 + - _LTCGI_UseEO: 0 + - _LTCGI_UsePBR: 1 + - _Layer1Strength: 1 + - _Layer2Size: 0 + - _Layer2Strength: 0 + - _Length: 0 + - _LightDataAOGlobalMaskBlendTypeR: 2 + - _LightDataAOGlobalMaskR: 0 + - _LightDataAOStrengthA: 0 + - _LightDataAOStrengthB: 0 + - _LightDataAOStrengthG: 0 + - _LightDataAOStrengthR: 1 + - _LightDataDebugEnabled: 0 + - _LightDataDetailShadowGlobalMaskBlendTypeR: 2 + - _LightDataDetailShadowGlobalMaskR: 0 + - _LightDataSDFBlendY: 1 + - _LightDataSDFMapLOD: 0 + - _LightDataSDFMapUV: 0 + - _LightDataShadowMaskGlobalMaskBlendTypeR: 2 + - _LightDataShadowMaskGlobalMaskR: 0 + - _LightDirection_MaskOn: 0 + - _LightDirection_MaskOn2: 0 + - _LightingAOMapsUV: 0 + - _LightingAddDetailShadowStrengthA: 0 + - _LightingAddDetailShadowStrengthB: 0 + - _LightingAddDetailShadowStrengthG: 0 + - _LightingAddDetailShadowStrengthR: 1 + - _LightingAdditiveCastedShadows: 1 + - _LightingAdditiveEnable: 1 + - _LightingAdditiveGradientEnd: 0.5 + - _LightingAdditiveGradientStart: 0 + - _LightingAdditiveLimit: 1 + - _LightingAdditiveLimited: 1 + - _LightingAdditiveMonochromatic: 0 + - _LightingAdditivePassthrough: 0.5 + - _LightingAdditiveType: 3 + - _LightingCap: 1 + - _LightingCapEnabled: 1 + - _LightingCastedShadows: 0 + - _LightingColorMode: 0 + - _LightingDebugVisualize: 0 + - _LightingDetailShadowMapsUV: 0 + - _LightingDetailShadowStrengthA: 0 + - _LightingDetailShadowStrengthB: 0 + - _LightingDetailShadowStrengthG: 0 + - _LightingDetailShadowStrengthR: 1 + - _LightingDirectionMode: 0 + - _LightingEnableLightVolumes: 1 + - _LightingForceColorEnabled: 0 + - _LightingForcedColorThemeIndex: 0 + - _LightingGradientEnd: 0.5 + - _LightingGradientStart: 0 + - _LightingIgnoreAmbientColor: 1 + - _LightingIndirectUsesNormals: 0 + - _LightingMapMode: 0 + - _LightingMinLightBrightness: 0 + - _LightingMirrorVertexLightingEnabled: 1 + - _LightingMode: 6 + - _LightingMonochromatic: 0 + - _LightingMulitlayerNonLinear: 1 + - _LightingShadowMaskStrengthA: 0 + - _LightingShadowMaskStrengthB: 0 + - _LightingShadowMaskStrengthG: 0 + - _LightingShadowMaskStrengthR: 1 + - _LightingShadowMasksUV: 0 + - _LightingVertexLightingEnabled: 1 + - _LightingViewDirOffsetPitch: 0 + - _LightingViewDirOffsetYaw: 0 + - _LightingWrappedNormalization: 0 + - _LightingWrappedWrap: 0 + - _LineColorThemeIndex: 0 + - _LineWidth: 1 + - _LookAtAlphaAlpha: 1 + - _LookAtAlphaMaskEnabled: 0 + - _LookAtAlphaTargetUp: 0 + - _LookAtBlueAlpha: 1 + - _LookAtBlueMaskEnabled: 0 + - _LookAtBlueTargetUp: 0 + - _LookAtGreenAlpha: 1 + - _LookAtGreenMaskEnabled: 0 + - _LookAtGreenTargetUp: 0 + - _LookAtMaskUV: 0 + - _LookAtRedAlpha: 1 + - _LookAtRedMaskEnabled: 1 + - _LookAtRedTargetUp: 0 + - _LookAtVisibilityEnabled: 0 + - _LookAtVisibilityMirror: 0 + - _LookAtVisibilityMode: 1 + - _LookAtVisibilityVRCCameraDesktop: 1 + - _LookAtVisibilityVRCCameraScreenshot: 1 + - _LookAtVisibilityVRCCameraVR: 1 + - _LookAtVisibilityVRCMirrorDesktop: 1 + - _LookAtVisibilityVRCMirrorVR: 1 + - _LookAtVisibilityVRCRegular: 1 + - _MainALHueShiftBand: 0 + - _MainALHueShiftCTIndex: 0 + - _MainAlphaMaskMode: 2 + - _MainBrightness: 0 + - _MainBrightnessGlobalMask: 0 + - _MainBrightnessGlobalMaskBlendType: 2 + - _MainColorAdjustTextureUV: 0 + - _MainColorAdjustToggle: 0 + - _MainGamma: 1 + - _MainGammaGlobalMask: 0 + - _MainGammaGlobalMaskBlendType: 2 + - _MainGradationStrength: 0 + - _MainHueALCTEnabled: 0 + - _MainHueALMotionSpeed: 1 + - _MainHueGlobalMask: 0 + - _MainHueGlobalMaskBlendType: 2 + - _MainHueShift: 0 + - _MainHueShiftColorSpace: 0 + - _MainHueShiftReplace: 1 + - _MainHueShiftSelectOrShift: 1 + - _MainHueShiftSpeed: 0 + - _MainHueShiftToggle: 0 + - _MainIgnoreTexAlpha: 0 + - _MainPixelMode: 0 + - _MainSaturationGlobalMask: 0 + - _MainSaturationGlobalMaskBlendType: 2 + - _MainTexStochastic: 0 + - _MainTexUV: 0 + - _MainUseVertexColorAlpha: 0 + - _MainVertexColoring: 0 + - _MainVertexColoringEnabled: 0 + - _MainVertexColoringLinearSpace: 1 + - _Matcap0ALAlphaAddBand: 0 + - _Matcap0ALChronoPanBand: 0 + - _Matcap0ALChronoPanSpeed: 0 + - _Matcap0ALChronoPanType: 0 + - _Matcap0ALEmissionAddBand: 0 + - _Matcap0ALEnabled: 0 + - _Matcap0ALIntensityAddBand: 0 + - _Matcap0CircleMaskBlur: 0.1 + - _Matcap0CircleMaskBorder: 0.45 + - _Matcap0CircleMaskEnabled: 0 + - _Matcap0CustomNormal: 0 + - _Matcap0NormalMapScale: 1 + - _Matcap0NormalMapUV: 0 + - _Matcap1ALAlphaAddBand: 0 + - _Matcap1ALChronoPanBand: 0 + - _Matcap1ALChronoPanSpeed: 0 + - _Matcap1ALChronoPanType: 0 + - _Matcap1ALEmissionAddBand: 0 + - _Matcap1ALEnabled: 0 + - _Matcap1ALIntensityAddBand: 0 + - _Matcap1CustomNormal: 0 + - _Matcap1NormalMapScale: 1 + - _Matcap1NormalMapUV: 0 + - _Matcap2ALAlphaAddBand: 0 + - _Matcap2ALChronoPanBand: 0 + - _Matcap2ALChronoPanSpeed: 0 + - _Matcap2ALChronoPanType: 0 + - _Matcap2ALEmissionAddBand: 0 + - _Matcap2ALEnabled: 0 + - _Matcap2ALIntensityAddBand: 0 + - _Matcap2Add: 0 + - _Matcap2AddToLight: 0 + - _Matcap2AlphaOverride: 0 + - _Matcap2ApplyToAlphaBlendType: 0 + - _Matcap2ApplyToAlphaBlending: 1 + - _Matcap2ApplyToAlphaEnabled: 0 + - _Matcap2ApplyToAlphaSourceBlend: 0 + - _Matcap2BaseColorMix: 0 + - _Matcap2Border: 0.5 + - _Matcap2CircleMaskBlur: 0.1 + - _Matcap2CircleMaskBorder: 0.45 + - _Matcap2CircleMaskEnabled: 0 + - _Matcap2ColorThemeIndex: 0 + - _Matcap2CustomNormal: 0 + - _Matcap2EmissionStrength: 0 + - _Matcap2Enable: 0 + - _Matcap2HueSelectOrShift: 1 + - _Matcap2HueShift: 0 + - _Matcap2HueShiftColorSpace: 0 + - _Matcap2HueShiftEnabled: 0 + - _Matcap2HueShiftSpeed: 0 + - _Matcap2Intensity: 1 + - _Matcap2LightColorMix: 0 + - _Matcap2LightMask: 0 + - _Matcap2MaskChannel: 0 + - _Matcap2MaskGlobalMask: 0 + - _Matcap2MaskGlobalMaskBlendType: 2 + - _Matcap2MaskInvert: 0 + - _Matcap2MaskSmoothnessApply: 0 + - _Matcap2MaskSmoothnessChannel: 3 + - _Matcap2MaskUV: 0 + - _Matcap2Mixed: 0 + - _Matcap2Multiply: 0 + - _Matcap2Normal: 1 + - _Matcap2NormalMapScale: 1 + - _Matcap2NormalMapUV: 0 + - _Matcap2Replace: 0 + - _Matcap2Rotation: 0 + - _Matcap2Screen: 0 + - _Matcap2Smoothness: 1 + - _Matcap2TPSDepthEnabled: 0 + - _Matcap2TPSMaskStrength: 1 + - _Matcap2UVMode: 1 + - _Matcap2UVToBlend: 1 + - _Matcap3ALAlphaAddBand: 0 + - _Matcap3ALChronoPanBand: 0 + - _Matcap3ALChronoPanSpeed: 0 + - _Matcap3ALChronoPanType: 0 + - _Matcap3ALEmissionAddBand: 0 + - _Matcap3ALEnabled: 0 + - _Matcap3ALIntensityAddBand: 0 + - _Matcap3Add: 0 + - _Matcap3AddToLight: 0 + - _Matcap3AlphaOverride: 0 + - _Matcap3ApplyToAlphaBlendType: 0 + - _Matcap3ApplyToAlphaBlending: 1 + - _Matcap3ApplyToAlphaEnabled: 0 + - _Matcap3ApplyToAlphaSourceBlend: 0 + - _Matcap3BaseColorMix: 0 + - _Matcap3Border: 0.5 + - _Matcap3CircleMaskBlur: 0.1 + - _Matcap3CircleMaskBorder: 0.45 + - _Matcap3CircleMaskEnabled: 0 + - _Matcap3ColorThemeIndex: 0 + - _Matcap3CustomNormal: 0 + - _Matcap3EmissionStrength: 0 + - _Matcap3Enable: 0 + - _Matcap3HueSelectOrShift: 1 + - _Matcap3HueShift: 0 + - _Matcap3HueShiftColorSpace: 0 + - _Matcap3HueShiftEnabled: 0 + - _Matcap3HueShiftSpeed: 0 + - _Matcap3Intensity: 1 + - _Matcap3LightColorMix: 0 + - _Matcap3LightMask: 0 + - _Matcap3MaskChannel: 0 + - _Matcap3MaskGlobalMask: 0 + - _Matcap3MaskGlobalMaskBlendType: 2 + - _Matcap3MaskInvert: 0 + - _Matcap3MaskSmoothnessApply: 0 + - _Matcap3MaskSmoothnessChannel: 3 + - _Matcap3MaskUV: 0 + - _Matcap3Mixed: 0 + - _Matcap3Multiply: 0 + - _Matcap3Normal: 1 + - _Matcap3NormalMapScale: 1 + - _Matcap3NormalMapUV: 0 + - _Matcap3Replace: 0 + - _Matcap3Rotation: 0 + - _Matcap3Screen: 0 + - _Matcap3Smoothness: 1 + - _Matcap3TPSDepthEnabled: 0 + - _Matcap3TPSMaskStrength: 1 + - _Matcap3UVMode: 1 + - _Matcap3UVToBlend: 1 + - _Matcap4Add: 0 + - _Matcap4AddToLight: 0 + - _Matcap4AlphaOverride: 0 + - _Matcap4ApplyToAlphaBlendType: 0 + - _Matcap4ApplyToAlphaBlending: 1 + - _Matcap4ApplyToAlphaEnabled: 0 + - _Matcap4ApplyToAlphaSourceBlend: 0 + - _Matcap4BaseColorMix: 0 + - _Matcap4Border: 0.5 + - _Matcap4CircleMaskBlur: 0.1 + - _Matcap4CircleMaskBorder: 0.45 + - _Matcap4CircleMaskEnabled: 0 + - _Matcap4ColorThemeIndex: 0 + - _Matcap4EmissionStrength: 0 + - _Matcap4Enable: 0 + - _Matcap4HueSelectOrShift: 1 + - _Matcap4HueShift: 0 + - _Matcap4HueShiftColorSpace: 0 + - _Matcap4HueShiftEnabled: 0 + - _Matcap4HueShiftSpeed: 0 + - _Matcap4Intensity: 1 + - _Matcap4LightColorMix: 0 + - _Matcap4LightMask: 0 + - _Matcap4MaskChannel: 0 + - _Matcap4MaskGlobalMask: 0 + - _Matcap4MaskGlobalMaskBlendType: 2 + - _Matcap4MaskInvert: 0 + - _Matcap4MaskSmoothnessApply: 0 + - _Matcap4MaskSmoothnessChannel: 3 + - _Matcap4MaskUV: 0 + - _Matcap4Mixed: 0 + - _Matcap4Multiply: 0 + - _Matcap4Normal: 1 + - _Matcap4Replace: 0 + - _Matcap4Rotation: 0 + - _Matcap4Screen: 0 + - _Matcap4Smoothness: 1 + - _Matcap4TPSDepthEnabled: 0 + - _Matcap4TPSMaskStrength: 1 + - _Matcap4UVMode: 1 + - _Matcap4UVToBlend: 1 + - _MatcapAdd: 0 + - _MatcapAddToLight: 0 + - _MatcapAlphaOverride: 0 + - _MatcapApplyToAlphaBlendType: 0 + - _MatcapApplyToAlphaBlending: 1 + - _MatcapApplyToAlphaEnabled: 0 + - _MatcapApplyToAlphaSourceBlend: 0 + - _MatcapBaseColorMix: 0 + - _MatcapBorder: 0.5 + - _MatcapColorThemeIndex: 0 + - _MatcapEmissionStrength: 0 + - _MatcapEnable: 0 + - _MatcapHueSelectOrShift: 1 + - _MatcapHueShift: 0 + - _MatcapHueShiftColorSpace: 0 + - _MatcapHueShiftEnabled: 0 + - _MatcapHueShiftSpeed: 0 + - _MatcapIntensity: 1 + - _MatcapLightColorMix: 0 + - _MatcapLightMask: 0 + - _MatcapMaskChannel: 0 + - _MatcapMaskGlobalMask: 0 + - _MatcapMaskGlobalMaskBlendType: 2 + - _MatcapMaskInvert: 0 + - _MatcapMaskSmoothnessApply: 0 + - _MatcapMaskSmoothnessChannel: 3 + - _MatcapMaskUV: 0 + - _MatcapMixed: 0 + - _MatcapMultiply: 0 + - _MatcapNormal: 1 + - _MatcapReplace: 1 + - _MatcapRotation: 0 + - _MatcapScreen: 0 + - _MatcapSmoothness: 1 + - _MatcapTPSDepthEnabled: 0 + - _MatcapTPSMaskStrength: 1 + - _MatcapUVMode: 1 + - _MatcapUVToBlend: 1 + - _Metallic: 0 + - _Mirror: 0 + - _MirrorColorThemeIndex: 0 + - _MirrorTextureBlendType: 0 + - _MirrorTextureEnabled: 0 + - _MirrorTextureForceEnabled: 0 + - _MirrorTextureUV: 0 + - _MochieBRDF: 1 + - _MochieForceFallback: 0 + - _MochieGSAAEnabled: 1 + - _MochieLitFallback: 1 + - _MochieMetallicGlobalMask: 0 + - _MochieMetallicGlobalMaskBlendType: 2 + - _MochieMetallicMapInvert: 0 + - _MochieMetallicMapsMetallicChannel: 0 + - _MochieMetallicMapsReflectionMaskChannel: 2 + - _MochieMetallicMapsRoughnessChannel: 1 + - _MochieMetallicMapsSpecularMaskChannel: 3 + - _MochieMetallicMapsStochastic: 0 + - _MochieMetallicMapsUV: 0 + - _MochieMetallicMasksUV: 0 + - _MochieMetallicMultiplier: 1 + - _MochieReflectionMaskInvert: 0 + - _MochieReflectionStrength: 1 + - _MochieReflectionStrengthGlobalMask: 0 + - _MochieReflectionStrengthGlobalMaskBlendType: 2 + - _MochieReflectionTintThemeIndex: 0 + - _MochieRoughnessMapInvert: 0 + - _MochieRoughnessMultiplier: 1 + - _MochieRoughnessMultiplier2: 1 + - _MochieSmoothnessGlobalMask: 0 + - _MochieSmoothnessGlobalMaskBlendType: 2 + - _MochieSpecularMaskInvert: 0 + - _MochieSpecularStrength: 1 + - _MochieSpecularStrength2: 1 + - _MochieSpecularStrengthGlobalMask: 0 + - _MochieSpecularStrengthGlobalMaskBlendType: 2 + - _MochieSpecularTintThemeIndex: 0 + - _Mode: 0 + - _ModelAngleMax: 90 + - _ModelAngleMin: 45 + - _MultilayerMathBlurMapUV: 0 + - _NormalCorrect: 0 + - _NormalCorrectAmount: 0.9 + - _OcclusionStrength: 1 + - _OffsetFactor: 0 + - _OffsetUnits: 0 + - _Offset_Z: 0 + - _OrifaceEnabled: 0 + - _OrificeChannel: 0 + - _OutlineALColorEnabled: 0 + - _OutlineAlphaDistanceFade: 0 + - _OutlineAlphaDistanceFadeMax: 0 + - _OutlineAlphaDistanceFadeMaxAlpha: 1 + - _OutlineAlphaDistanceFadeMin: 0 + - _OutlineAlphaDistanceFadeMinAlpha: 0 + - _OutlineAlphaDistanceFadeType: 1 + - _OutlineBlendOp: 0 + - _OutlineBlendOpAlpha: 4 + - _OutlineClipAtZeroWidth: 1 + - _OutlineCull: 1 + - _OutlineDstBlend: 0 + - _OutlineDstBlendAlpha: 0 + - _OutlineEmission: 0 + - _OutlineExpansionMode: 1 + - _OutlineFixWidth: 0.5 + - _OutlineFixedSize: 1 + - _OutlineGamma: 1 + - _OutlineHue: 0 + - _OutlineHueOffsetSpeed: 0 + - _OutlineHueShift: 0 + - _OutlineLit: 1 + - _OutlineMaskChannel: 0 + - _OutlineMaskUV: 0 + - _OutlineOverrideAlpha: 0 + - _OutlineRimLightBlend: 0 + - _OutlineSaturation: 1 + - _OutlineShadowStrength: 0 + - _OutlineSpace: 0 + - _OutlineSrcBlend: 1 + - _OutlineSrcBlendAlpha: 1 + - _OutlineStencilBackCompareFunction: 8 + - _OutlineStencilBackFailOp: 0 + - _OutlineStencilBackPassOp: 0 + - _OutlineStencilBackZFailOp: 0 + - _OutlineStencilCompareFunction: 8 + - _OutlineStencilFailOp: 0 + - _OutlineStencilFrontCompareFunction: 8 + - _OutlineStencilFrontFailOp: 0 + - _OutlineStencilFrontPassOp: 0 + - _OutlineStencilFrontZFailOp: 0 + - _OutlineStencilPassOp: 0 + - _OutlineStencilReadMask: 255 + - _OutlineStencilRef: 0 + - _OutlineStencilType: 0 + - _OutlineStencilWriteMask: 255 + - _OutlineStencilZFailOp: 0 + - _OutlineTextureUV: 0 + - _OutlineTintMix: 0 + - _OutlineUseVertexColorNormals: 0 + - _OutlineValue: 1 + - _OutlineVertexColorMask: 0 + - _OutlineVertexColorMaskStrength: 1 + - _OutlineZOffsetChannel: 0 + - _OutlineZOffsetInvertMaskChannel: 0 + - _OutlineZOffsetMaskStrength: 1 + - _OutlineZOffsetVertexColor: 0 + - _OutlineZOffsetVertexColorStrength: 1 + - _OutlineZTest: 4 + - _OutlineZWrite: 1 + - _OutlinesMaxDistance: 1 + - _PBRNormalSelect: 1 + - _PBRSplitMaskSample: 0 + - _PBRSplitMaskStochastic: 0 + - _PPBrightness: 1 + - _PPContrast: 1 + - _PPEmissionMultiplier: 1 + - _PPFinalColorMultiplier: 1 + - _PPHDR: 0 + - _PPHelp: 0 + - _PPHue: 0 + - _PPHueShiftColorSpace: 0 + - _PPLightingAddition: 0 + - _PPLightingMultiplier: 1 + - _PPLightness: 0 + - _PPMaskChannel: 0 + - _PPMaskInvert: 0 + - _PPMaskUV: 0 + - _PPPosterization: 0 + - _PPPosterizationAmount: 4 + - _PPSaturation: 1 + - _PanoUseBothEyes: 1 + - _Parallax: 0.02 + - _ParallaxAnisotropic: 1 + - _ParallaxAnisotropyScale: 1 + - _ParallaxBinarySteps: 8 + - _ParallaxConeRatio: 1 + - _ParallaxInternalBlendMode: 0 + - _ParallaxInternalHeightFromAlpha: 0 + - _ParallaxInternalHeightmapMode: 0 + - _ParallaxInternalHueSelectOrShift: 1 + - _ParallaxInternalHueShift: 0 + - _ParallaxInternalHueShiftColorSpace: 0 + - _ParallaxInternalHueShiftEnabled: 0 + - _ParallaxInternalHueShiftPerLevel: 0 + - _ParallaxInternalHueShiftSpeed: 0 + - _ParallaxInternalIterations: 4 + - _ParallaxInternalMapMaskChannel: 0 + - _ParallaxInternalMapMaskUV: 0 + - _ParallaxInternalMaxColorThemeIndex: 0 + - _ParallaxInternalMaxDepth: 0.1 + - _ParallaxInternalMaxFade: 0.1 + - _ParallaxInternalMinColorThemeIndex: 0 + - _ParallaxInternalMinDepth: 0 + - _ParallaxInternalMinFade: 1 + - _ParallaxInternalSurfaceBlendMode: 8 + - _ParallaxMipBias: 0 + - _ParallaxRelaxedCone: 1 + - _ParallaxUV: 0 + - _PathALAutoCorrelator: 0 + - _PathALAutoCorrelatorA: 0 + - _PathALAutoCorrelatorB: 0 + - _PathALAutoCorrelatorG: 0 + - _PathALAutoCorrelatorMode: 0 + - _PathALAutoCorrelatorR: 0 + - _PathALCCA: 0 + - _PathALCCB: 0 + - _PathALCCG: 0 + - _PathALCCR: 0 + - _PathALChrono: 0 + - _PathALColorChord: 0 + - _PathALEmissionOffset: 0 + - _PathALHistory: 0 + - _PathALHistoryA: 0 + - _PathALHistoryB: 0 + - _PathALHistoryBandA: 0 + - _PathALHistoryBandB: 0 + - _PathALHistoryBandG: 0 + - _PathALHistoryBandR: 0 + - _PathALHistoryG: 0 + - _PathALHistoryMode: 0 + - _PathALHistoryR: 0 + - _PathALTimeOffset: 0 + - _PathALWidthOffset: 0 + - _PathChronoBandA: 0 + - _PathChronoBandB: 0 + - _PathChronoBandG: 0 + - _PathChronoBandR: 0 + - _PathChronoSpeedA: 0 + - _PathChronoSpeedB: 0 + - _PathChronoSpeedG: 0 + - _PathChronoSpeedR: 0 + - _PathChronoTypeA: 0 + - _PathChronoTypeB: 0 + - _PathChronoTypeG: 0 + - _PathChronoTypeR: 0 + - _PathColorAThemeIndex: 0 + - _PathColorBThemeIndex: 0 + - _PathColorGThemeIndex: 0 + - _PathColorRThemeIndex: 0 + - _PathGradientType: 0 + - _PathPointSampling: 1 + - _PathSource: 0 + - _PathSourceDirA: 0 + - _PathSourceDirB: 0 + - _PathSourceDirG: 0 + - _PathSourceDirR: 0 + - _PathSurfaceBlendMode: 0 + - _PathTypeA: 2 + - _PathTypeB: 2 + - _PathTypeG: 2 + - _PathTypeR: 2 + - _PathingColorMapUV: 0 + - _PathingMapUV: 0 + - _PathingOverrideAlpha: 0 + - _PathingUVSelect: 0 + - _PenetratorEnabled: 0 + - _PoiGSAAThreshold: 0.1 + - _PoiGSAAVariance: 0.15 + - _PoiInternalParallax: 0 + - _PoiParallax: 0 + - _PoiUTSStyleOutlineBlend: 0 + - _PolarLengthScale: 1 + - _PolarRadialScale: 1 + - _PolarSpiralPower: 0 + - _PolarUV: 0 + - _PostProcess: 0 + - _RGBAAlphaBlendType: 0 + - _RGBAAlphaEmissionStrength: 0 + - _RGBAAlphaEnable: 0 + - _RGBAAlphaMetallicInvert: 0 + - _RGBAAlphaPBRSplitMaskSample: 0 + - _RGBAAlphaPBRSplitMaskStochastic: 0 + - _RGBAAlphaPBRUV: 0 + - _RGBAAlphaSmoothnessInvert: 0 + - _RGBABlueBlendType: 0 + - _RGBABlueEmissionStrength: 0 + - _RGBABlueEnable: 0 + - _RGBABlueMetallicInvert: 0 + - _RGBABluePBRSplitMaskSample: 0 + - _RGBABluePBRSplitMaskStochastic: 0 + - _RGBABluePBRUV: 0 + - _RGBABlueSmoothnessInvert: 0 + - _RGBAGreenBlendType: 0 + - _RGBAGreenEmissionStrength: 0 + - _RGBAGreenEnable: 0 + - _RGBAGreenMetallicInvert: 0 + - _RGBAGreenPBRSplitMaskSample: 0 + - _RGBAGreenPBRSplitMaskStochastic: 0 + - _RGBAGreenPBRUV: 0 + - _RGBAGreenSmoothnessInvert: 0 + - _RGBAMetallicMapsStochastic: 0 + - _RGBAMetallicMapsUV: 0 + - _RGBAPBRAlphaEnabled: 0 + - _RGBAPBRBlueEnabled: 0 + - _RGBAPBRGreenEnabled: 0 + - _RGBAPBRRedEnabled: 0 + - _RGBARedBlendType: 0 + - _RGBARedEmissionStrength: 0 + - _RGBARedEnable: 0 + - _RGBARedMetallicInvert: 0 + - _RGBARedPBRSplitMaskSample: 0 + - _RGBARedPBRSplitMaskStochastic: 0 + - _RGBARedPBRUV: 0 + - _RGBARedSmoothnessInvert: 0 + - _RGBASmoothnessMapsStochastic: 0 + - _RGBASmoothnessMapsUV: 0 + - _RGBMaskEnabled: 0 + - _RGBMaskType: 0 + - _RGBMaskUV: 0 + - _RalivAdvancedHelp: 0 + - _RalivDPSDisableShadowCaster: 1 + - _RalivDPSDisableShadowCasterHelp: 0 + - _RalivHelp: 0 + - _ReCurvature: 0 + - _RedAlphaAdd: 0 + - _RedColorThemeIndex: 0 + - _RedTextureStochastic: 0 + - _RedTextureUV: 0 + - _RefSpecFresnelStrength: 0.5 + - _Reflectance: 0.04 + - _ReflectionAnisotropicStretch: 1 + - _ReflectionApplyTransparency: 1 + - _ReflectionBlendMode: 1 + - _ReflectionCubeEnableLighting: 1 + - _ReflectionCubeOverride: 0 + - _ReflectionNormalStrength: 1 + - _RenderingAOBlockerEnabled: 0 + - _RenderingAOBlockerFlipNormal: 0 + - _RenderingAOBlockerNote: 0 + - _RenderingAOBlockerUVChannel: 0 + - _RenderingEarlyZEnabled: 0 + - _RenderingReduceClipDistance: 0 + - _RgbAlphaGlobalMaskBlendType: 2 + - _RgbAlphaGlobalMaskChannel: 0 + - _RgbAlphaMaskChannel: 3 + - _RgbBlueGlobalMaskBlendType: 2 + - _RgbBlueGlobalMaskChannel: 0 + - _RgbBlueMaskChannel: 2 + - _RgbGreenGlobalMaskBlendType: 2 + - _RgbGreenGlobalMaskChannel: 0 + - _RgbGreenMaskChannel: 1 + - _RgbNormalAGlobalMaskBlendType: 2 + - _RgbNormalAGlobalMaskChannel: 0 + - _RgbNormalAMaskChannel: 3 + - _RgbNormalAScale: 0 + - _RgbNormalAStochastic: 0 + - _RgbNormalAUV: 0 + - _RgbNormalAlphaBlendMode: 0 + - _RgbNormalBGlobalMaskBlendType: 2 + - _RgbNormalBGlobalMaskChannel: 0 + - _RgbNormalBMaskChannel: 2 + - _RgbNormalBScale: 0 + - _RgbNormalBStochastic: 0 + - _RgbNormalBUV: 0 + - _RgbNormalBlueBlendMode: 0 + - _RgbNormalGGlobalMaskBlendType: 2 + - _RgbNormalGGlobalMaskChannel: 0 + - _RgbNormalGMaskChannel: 1 + - _RgbNormalGScale: 0 + - _RgbNormalGStochastic: 0 + - _RgbNormalGUV: 0 + - _RgbNormalGreenBlendMode: 0 + - _RgbNormalRGlobalMaskBlendType: 2 + - _RgbNormalRGlobalMaskChannel: 0 + - _RgbNormalRMaskChannel: 0 + - _RgbNormalRScale: 0 + - _RgbNormalRStochastic: 0 + - _RgbNormalRUV: 0 + - _RgbNormalRedBlendMode: 0 + - _RgbRedGlobalMaskBlendType: 2 + - _RgbRedGlobalMaskChannel: 0 + - _RgbRedMaskChannel: 0 + - _Rim2ApColorThemeIndex: 0 + - _Rim2ApplyAlpha: 0 + - _Rim2ApplyAlphaBlend: 1 + - _Rim2ApplyGlobalMaskBlendType: 2 + - _Rim2ApplyGlobalMaskIndex: 0 + - _Rim2BackfaceMask: 1 + - _Rim2BaseColorMix: 0 + - _Rim2BiasIntensity: 0 + - _Rim2BlendMode: 1 + - _Rim2BlendStrength: 1 + - _Rim2Blur: 0.65 + - _Rim2Border: 0.5 + - _Rim2Brightness: 1 + - _Rim2ColorTexUV: 0 + - _Rim2DirRange: 0 + - _Rim2DirStrength: 0 + - _Rim2EnableLighting: 1 + - _Rim2FresnelPower: 3.5 + - _Rim2GlobalMask: 0 + - _Rim2GlobalMaskBlendType: 2 + - _Rim2HueSelectOrShift: 1 + - _Rim2HueShift: 0 + - _Rim2HueShiftColorSpace: 0 + - _Rim2HueShiftEnabled: 0 + - _Rim2HueShiftSpeed: 0 + - _Rim2IndirBlur: 0.1 + - _Rim2IndirBorder: 0.5 + - _Rim2IndirRange: 0 + - _Rim2LightColorThemeIndex: 0 + - _Rim2Light_FeatherOff: 0 + - _Rim2Light_InsideMask: 0.0001 + - _Rim2Light_Power: 0.1 + - _Rim2LightingInvert: 0 + - _Rim2MainStrength: 0 + - _Rim2MaskChannel: 0 + - _Rim2MaskInvert: 0 + - _Rim2MaskOnlyMask: 0 + - _Rim2MaskUV: 0 + - _Rim2NormalStrength: 1 + - _Rim2Power: 1 + - _Rim2ShadowMask: 0.5 + - _Rim2ShadowMaskInvert: 0 + - _Rim2ShadowMaskRampType: 0 + - _Rim2ShadowMaskStrength: 1 + - _Rim2ShadowToggle: 0 + - _Rim2ShadowWidth: 0 + - _Rim2Sharpness: 0.25 + - _Rim2Strength: 0 + - _Rim2Style: 0 + - _Rim2TexUV: 0 + - _Rim2VRParallaxStrength: 1 + - _Rim2Width: 0.8 + - _RimApColorThemeIndex: 0 + - _RimApplyAlpha: 0 + - _RimApplyAlphaBlend: 1 + - _RimApplyGlobalMaskBlendType: 2 + - _RimApplyGlobalMaskIndex: 0 + - _RimBackfaceMask: 1 + - _RimBaseColorMix: 0 + - _RimBiasIntensity: 0 + - _RimBlendMode: 1 + - _RimBlendStrength: 1 + - _RimBlur: 0.65 + - _RimBorder: 0.5 + - _RimBrightness: 1 + - _RimColorTexUV: 0 + - _RimDirRange: 0 + - _RimDirStrength: 0 + - _RimEnableLighting: 1 + - _RimEnviroBlur: 0.7 + - _RimEnviroChannel: 0 + - _RimEnviroIntensity: 1 + - _RimEnviroMaskUV: 0 + - _RimEnviroMinBrightness: 0 + - _RimEnviroSharpness: 0 + - _RimEnviroWidth: 0.45 + - _RimFresnelPower: 3.5 + - _RimGlobalMask: 0 + - _RimGlobalMaskBlendType: 2 + - _RimHueSelectOrShift: 1 + - _RimHueShift: 0 + - _RimHueShiftColorSpace: 0 + - _RimHueShiftEnabled: 0 + - _RimHueShiftSpeed: 0 + - _RimIndirBlur: 0.1 + - _RimIndirBorder: 0.5 + - _RimIndirRange: 0 + - _RimLightColorThemeIndex: 0 + - _RimLight_FeatherOff: 0 + - _RimLight_InsideMask: 0.0001 + - _RimLight_Power: 0.1 + - _RimLightingInvert: 0 + - _RimMainStrength: 0 + - _RimMaskChannel: 0 + - _RimMaskInvert: 0 + - _RimMaskOnlyMask: 0 + - _RimMaskUV: 0 + - _RimNormalStrength: 1 + - _RimPoi2BlendMode: 0 + - _RimPoiBlendMode: 0 + - _RimPower: 1 + - _RimShadowMask: 0.5 + - _RimShadowMaskInvert: 0 + - _RimShadowMaskRampType: 0 + - _RimShadowMaskStrength: 1 + - _RimShadowToggle: 0 + - _RimShadowWidth: 0 + - _RimSharpness: 0.25 + - _RimStrength: 0 + - _RimStyle: 0 + - _RimTexUV: 0 + - _RimVRParallaxStrength: 1 + - _RimWidth: 0.8 + - _RoughnessAnisotropy: 1 + - _SDFBlur: 0.1 + - _SDFShadingTextureUV: 0 + - _SFExposureOcclusion: 0 + - _SSAOAlphaFade: 1 + - _SSAOAnimationToggle: 1 + - _SSAOApplyGlobalMaskBlendType: 0 + - _SSAOApplyGlobalMaskIndex: 0 + - _SSAOAsRamp: 0 + - _SSAOBias: 0.003 + - _SSAOBlendType: 2 + - _SSAOCenterImportance: 1 + - _SSAOColorMapUV: 0 + - _SSAOColorThemeIndex: 0 + - _SSAOCone: 0 + - _SSAODepthGetWarning: 0 + - _SSAOEnableColorTexture: 0 + - _SSAOEnableMaskTexture: 0 + - _SSAOEnabled: 0 + - _SSAOFalloffEnd: 8 + - _SSAOFalloffStart: 6 + - _SSAOGlobalMaskBlendType: 2 + - _SSAOGlobalMaskIndex: 0 + - _SSAOHideByRampedLightMap: 0 + - _SSAOIntensity: 1 + - _SSAOMaskChannel: 0 + - _SSAOMaskInvert: 0 + - _SSAOMaskUV: 0 + - _SSAOQuality: 2.4 + - _SSAORadius: 0.002 + - _SSAORandomScale: 0 + - _SSAOUseNormals: 0 + - _SSAOUseSurfaceColor: 0 + - _SSIgnoreCastedShadows: 0 + - _SSSBaseColorMix: 0 + - _SSSDistortion: 1 + - _SSSSpread: 5 + - _SSSStrength: 0.25 + - _SSSThicknessMapChannel: 0 + - _SSSThicknessMapUV: 0 + - _SSSThicknessMod: -1 + - _Saturation: 0 + - _ScrollingEmission: 0 + - _ScrollingEmission1: 0 + - _ScrollingEmission2: 0 + - _ScrollingEmission3: 0 + - _Set_HighColorMaskChannel: 1 + - _Set_HighColorMaskUV: 0 + - _Set_Rim2LightMaskChannel: 1 + - _Set_Rim2LightMaskUV: 0 + - _Set_RimLightMaskChannel: 1 + - _Set_RimLightMaskUV: 0 + - _ShadeColor_Step: 0 + - _ShaderOptimizerEnabled: 1 + - _ShaderUIWarning0: -0 + - _ShaderUIWarning1: -0 + - _ShadingEnabled: 1 + - _ShadingRampedLightMapApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapApplyGlobalMaskIndex: 0 + - _ShadingRampedLightMapInverseApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapInverseApplyGlobalMaskIndex: 0 + - _ShadingShadeMapBlendType: 0 + - _Shadow2ndBlur: 0.3 + - _Shadow2ndBorder: 0.5 + - _Shadow2ndColorTexUV: 0 + - _Shadow2ndReceive: 0 + - _Shadow3rdBlur: 0.1 + - _Shadow3rdBorder: 0.25 + - _Shadow3rdColorTexUV: 0 + - _Shadow3rdReceive: 0 + - _ShadowBlur: 0.1 + - _ShadowBorder: 0.5 + - _ShadowBorderMapToggle: 0 + - _ShadowBorderMaskLOD: 0 + - _ShadowBorderMaskUV: 0 + - _ShadowBorderRange: 0 + - _ShadowColorTexUV: 0 + - _ShadowEnvStrength: 0 + - _ShadowFlatBlur: 1 + - _ShadowFlatBorder: 1 + - _ShadowMainStrength: 0 + - _ShadowMaskType: 0 + - _ShadowOffset: 0 + - _ShadowPostAO: 0 + - _ShadowReceive: 0 + - _ShadowStrength: 1 + - _ShadowStrengthMaskUV: 0 + - _Shape1Depth: 0.1 + - _Shape1Duration: 0.1 + - _Shape2Depth: 0.2 + - _Shape2Duration: 0.1 + - _Shape3Depth: 0.3 + - _Shape3Duration: 0.1 + - _SkinThicknessMapInvert: 0 + - _SkinThicknessMapUV: 0 + - _SkinThicknessPower: 1 + - _Smoothness: 1 + - _SmoothnessTextureChannel: 0 + - _Specular2ndLayer: 0 + - _SpecularBlur: 0 + - _SpecularBorder: 0.5 + - _SpecularHighlights: 1 + - _SpecularNormalStrength: 1 + - _SpecularToon: 1 + - _SphericalDissolveClamp: 0 + - _SphericalDissolveInvert: 0 + - _SphericalDissolveRadius: 1.5 + - _Squeeze: 0 + - _SqueezeDist: 0 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _SssBumpBlur: 0.7 + - _SssScale: 1 + - _StencilBackCompareFunction: 8 + - _StencilBackFailOp: 0 + - _StencilBackPassOp: 0 + - _StencilBackZFailOp: 0 + - _StencilCompareFunction: 8 + - _StencilFailOp: 0 + - _StencilFrontCompareFunction: 8 + - _StencilFrontFailOp: 0 + - _StencilFrontPassOp: 0 + - _StencilFrontZFailOp: 0 + - _StencilPassOp: 0 + - _StencilReadMask: 255 + - _StencilRef: 0 + - _StencilType: 0 + - _StencilWriteMask: 255 + - _StencilZFailOp: 0 + - _StereoEnabled: 0 + - _StochasticDeliotHeitzDensity: 1 + - _StochasticHexFallOffContrast: 0.6 + - _StochasticHexFallOffPower: 7 + - _StochasticHexGridDensity: 1 + - _StochasticHexRotationStrength: 0 + - _StochasticMode: 0 + - _StylizedReflectionMode: 0 + - _StylizedSpecular: 0 + - _StylizedSpecular2Feather: 0 + - _StylizedSpecularFeather: 0 + - _StylizedSpecularIgnoreNormal: 0 + - _StylizedSpecularIgnoreShadow: 0 + - _StylizedSpecularInvertMask: 0 + - _StylizedSpecularNormalStrength: 1 + - _StylizedSpecularStrength: 1 + - _SubsurfaceScattering: 0 + - _TPSHelpbox: 0 + - _TPSPenetratorEnabled: 0 + - _TPS_AnimatedToggle: 1 + - _TPS_BezierSmoothness: 0.4 + - _TPS_BezierStart: 0 + - _TPS_BufferedDepth: 0 + - _TPS_BufferedStrength: 0 + - _TPS_Buldge: 0.3 + - _TPS_BuldgeDistance: 0.2 + - _TPS_BuldgeFalloffDistance: 0.05 + - _TPS_Channel: 0 + - _TPS_ChannelWarning: 0 + - _TPS_IdleGravity: 0 + - _TPS_IdleSkrinkLength: 1 + - _TPS_IdleSkrinkWidth: 1 + - _TPS_IsSkinnedMeshRenderer: 0 + - _TPS_PenetratorLength: 1 + - _TPS_PumpingSpeed: 1 + - _TPS_PumpingStrength: 0 + - _TPS_PumpingWidth: 0.2 + - _TPS_SmoothStart: 1 + - _TPS_Squeeze: 0.3 + - _TPS_SqueezeDistance: 0.2 + - _TextEnabled: 0 + - _TextFPSColorThemeIndex: 0 + - _TextFPSEmissionStrength: 0 + - _TextFPSEnabled: 0 + - _TextFPSRotation: 0 + - _TextFPSUV: 0 + - _TextNumericColorThemeIndex: 0 + - _TextNumericDecimalDigits: 0 + - _TextNumericEmissionStrength: 0 + - _TextNumericEnabled: 0 + - _TextNumericRotation: 0 + - _TextNumericTrimZeroes: 0 + - _TextNumericUV: 0 + - _TextNumericValue: 0 + - _TextNumericWholeDigits: 4 + - _TextPixelRange: 4 + - _TextPositionColorThemeIndex: 0 + - _TextPositionEmissionStrength: 0 + - _TextPositionEnabled: 0 + - _TextPositionRotation: 0 + - _TextPositionUV: 0 + - _TextTimeColorThemeIndex: 0 + - _TextTimeEmissionStrength: 0 + - _TextTimeEnabled: 0 + - _TextTimeRotation: 0 + - _TextTimeUV: 0 + - _ToonRampCount: 1 + - _ToonRampUVSelector: 1 + - _TruchetALAlphaBand: 0 + - _TruchetALAlphaToggle: 0 + - _TruchetALEmissionBand: 0 + - _TruchetALEmissionToggle: 0 + - _TruchetAlpha: 1 + - _TruchetBlendType: 0 + - _TruchetChronoPanBand: 0 + - _TruchetChronoPanToggle: 0 + - _TruchetChronoPanType: 0 + - _TruchetColorThemeIndex: 0 + - _TruchetDensity: 10 + - _TruchetEdgeSharpness: 1 + - _TruchetEmissionStrength: 0 + - _TruchetHideWhenNoAL: 0 + - _TruchetMaskChannel: 0 + - _TruchetMaskGlobalMask: 0 + - _TruchetMaskGlobalMaskBlendType: 2 + - _TruchetMaskIntensity: 1 + - _TruchetMaskInvert: 0 + - _TruchetMaskUV: 0 + - _TruchetOverrideAlpha: 0 + - _TruchetThiccness: 0.1 + - _TruchetUV: 0 + - _Tweak_HighColorMaskLevel: 0 + - _Tweak_LightDirection_MaskLevel: 0 + - _Tweak_LightDirection_MaskLevel2: 0 + - _Tweak_Rim2LightMaskLevel: 0 + - _Tweak_RimLightMaskLevel: 0 + - _UDIMDiscardHelpbox: 0 + - _UDIMDiscardMode: 0 + - _UDIMDiscardRow0_0: 0 + - _UDIMDiscardRow0_1: 0 + - _UDIMDiscardRow0_2: 0 + - _UDIMDiscardRow0_3: 0 + - _UDIMDiscardRow1_0: 0 + - _UDIMDiscardRow1_1: 0 + - _UDIMDiscardRow1_2: 0 + - _UDIMDiscardRow1_3: 0 + - _UDIMDiscardRow2_0: 0 + - _UDIMDiscardRow2_1: 0 + - _UDIMDiscardRow2_2: 0 + - _UDIMDiscardRow2_3: 0 + - _UDIMDiscardRow3_0: 0 + - _UDIMDiscardRow3_1: 0 + - _UDIMDiscardRow3_2: 0 + - _UDIMDiscardRow3_3: 0 + - _UDIMDiscardUV: 0 + - _UDIMFaceDiscardFace: 0 + - _UDIMFaceDiscardRow0_0: 0 + - _UDIMFaceDiscardRow0_1: 0 + - _UDIMFaceDiscardRow0_2: 0 + - _UDIMFaceDiscardRow0_3: 0 + - _UDIMFaceDiscardRow1_0: 0 + - _UDIMFaceDiscardRow1_1: 0 + - _UDIMFaceDiscardRow1_2: 0 + - _UDIMFaceDiscardRow1_3: 0 + - _UDIMFaceDiscardRow2_0: 0 + - _UDIMFaceDiscardRow2_1: 0 + - _UDIMFaceDiscardRow2_2: 0 + - _UDIMFaceDiscardRow2_3: 0 + - _UDIMFaceDiscardRow3_0: 0 + - _UDIMFaceDiscardRow3_1: 0 + - _UDIMFaceDiscardRow3_2: 0 + - _UDIMFaceDiscardRow3_3: 0 + - _UDIMFaceDiscardUV: 0 + - _UVModLocalPos0: 0 + - _UVModLocalPos1: 1 + - _UVModWorldPos0: 0 + - _UVModWorldPos1: 2 + - _UVSec: 0 + - _UVTileDissolveAlpha_Row0_0: 0 + - _UVTileDissolveAlpha_Row0_1: 0 + - _UVTileDissolveAlpha_Row0_2: 0 + - _UVTileDissolveAlpha_Row0_3: 0 + - _UVTileDissolveAlpha_Row1_0: 0 + - _UVTileDissolveAlpha_Row1_1: 0 + - _UVTileDissolveAlpha_Row1_2: 0 + - _UVTileDissolveAlpha_Row1_3: 0 + - _UVTileDissolveAlpha_Row2_0: 0 + - _UVTileDissolveAlpha_Row2_1: 0 + - _UVTileDissolveAlpha_Row2_2: 0 + - _UVTileDissolveAlpha_Row2_3: 0 + - _UVTileDissolveAlpha_Row3_0: 0 + - _UVTileDissolveAlpha_Row3_1: 0 + - _UVTileDissolveAlpha_Row3_2: 0 + - _UVTileDissolveAlpha_Row3_3: 0 + - _UVTileDissolveDiscardAtMax: 1 + - _UVTileDissolveEnabled: 0 + - _UVTileDissolveUV: 0 + - _Unlit_Intensity: 1 + - _UseLightColor: 1 + - _UseReflection: 0 + - _Use_1stAs2nd: 0 + - _Use_1stShadeMapAlpha_As_ShadowMask: 0 + - _Use_2ndShadeMapAlpha_As_ShadowMask: 0 + - _Use_BaseAs1st: 0 + - _UzumoreAmount: 0.1 + - _UzumoreBias: 0.001 + - _UzumoreCategoryToggle: 0 + - _UzumoreEnabled: 1 + - _UzumoreMaskUV: 3 + - _VertexAudioLinkEnabled: 0 + - _VertexBarrelAlpha: 0 + - _VertexBarrelHeight: 0 + - _VertexBarrelMaskChannel: 0 + - _VertexBarrelMode: 0 + - _VertexBarrelWidth: 0.2 + - _VertexBasicsMaskChannel: 0 + - _VertexGlitchDensity: 10 + - _VertexGlitchFrequency: 1 + - _VertexGlitchMapPanSpeed: 10 + - _VertexGlitchMirror: 0 + - _VertexGlitchMirrorEnable: 0 + - _VertexGlitchStrength: 1 + - _VertexGlitchThreshold: 1 + - _VertexGlitchingAudioLinkBand: 0 + - _VertexGlitchingAudioLinkEnabled: 0 + - _VertexGlitchingAudiolinkOverride: 1 + - _VertexGlitchingEnabled: 0 + - _VertexGlitchingUseTexture: 0 + - _VertexLocalRotationALBandX: 0 + - _VertexLocalRotationALBandY: 0 + - _VertexLocalRotationALBandZ: 0 + - _VertexLocalRotationCTALBandX: 0 + - _VertexLocalRotationCTALBandY: 0 + - _VertexLocalRotationCTALBandZ: 0 + - _VertexLocalRotationCTALTypeX: 0 + - _VertexLocalRotationCTALTypeY: 0 + - _VertexLocalRotationCTALTypeZ: 0 + - _VertexLocalScaleALBand: 0 + - _VertexLocalTranslationALBand: 0 + - _VertexLookAtAudioLinkBand: 0 + - _VertexLookAtAudioLinkEnabled: 0 + - _VertexLookAtEnabled: 0 + - _VertexManipulationHeight: 0 + - _VertexManipulationHeightBand: 0 + - _VertexManipulationHeightBias: 0 + - _VertexManipulationHeightMapChannel: 0 + - _VertexManipulationHeightMaskChannel: 0 + - _VertexManipulationHeightMaskUV: 0 + - _VertexManipulationsEnabled: 0 + - _VertexRoundingDivision: 0.02 + - _VertexRoundingEnabled: 0 + - _VertexRoundingMaskChannel: 0 + - _VertexRoundingRangeBand: 0 + - _VertexRoundingSpace: 0 + - _VertexSpectrumMotion: 0 + - _VertexSpectrumUV: 0 + - _VertexSpectrumUVDirection: 0 + - _VertexSphereAlpha: 0 + - _VertexSphereHeight: 1 + - _VertexSphereMaskChannel: 0 + - _VertexSphereMode: 0 + - _VertexSphereRadius: 1 + - _VertexTornadoBaseHeight: 0 + - _VertexTornadoFunnelShape: 1 + - _VertexTornadoIntensity: 100 + - _VertexTornadoMaskChannel: 0 + - _VertexTornadoMode: 0 + - _VertexTornadoRadius: 1 + - _VertexTornadoSpeed: 5 + - _VertexTornadoTopHeight: 1 + - _VertexTornadoVerticalPull: 0 + - _VertexWindDetailAmplitude: 0.05 + - _VertexWindDetailFrequency: 5 + - _VertexWindDetailSpeed: 2.5 + - _VertexWindEnabled: 0 + - _VertexWindMaskChannel: 0 + - _VertexWindNoiseChannel: 0 + - _VertexWindNoiseScale: 10 + - _VertexWindNoiseSpeed: 0.5 + - _VertexWindNoiseStrength: 0.5 + - _VertexWindPrimaryAmplitude: 0.1 + - _VertexWindPrimaryFrequency: 1 + - _VertexWindPrimarySpeed: 1 + - _VertexWorldTranslationALBand: 0 + - _VideoBacklight: 1 + - _VideoCRTPixelEnergizedTime: 1.9 + - _VideoCRTRefreshRate: 24 + - _VideoContrast: 0 + - _VideoEffectsEnable: 0 + - _VideoEmissionEnabled: 1 + - _VideoMaskTextureChannel: 0 + - _VideoMaskTextureUV: 0 + - _VideoPixelTextureUV: 0 + - _VideoPixelateToResolution: 0 + - _VideoSaturation: 0 + - _VideoType: 3 + - _VisibilityMode: 1 + - _VisibilityVRCCameraDesktop: 1 + - _VisibilityVRCCameraScreenshot: 1 + - _VisibilityVRCCameraVR: 1 + - _VisibilityVRCMirrorDesktop: 1 + - _VisibilityVRCMirrorVR: 1 + - _VisibilityVRCRegular: 1 + - _VoronoiAffectsMaterialAlpha: 0 + - _VoronoiBlend: 0 + - _VoronoiEnableRandomCellColor: 0 + - _VoronoiEnabled: 0 + - _VoronoiGlobalMask: 0 + - _VoronoiGlobalMaskBlendType: 2 + - _VoronoiInnerEmissionStrength: 0 + - _VoronoiMaskChannel: 0 + - _VoronoiMaskUV: 0 + - _VoronoiNoiseChannel: 0 + - _VoronoiNoiseIntensity: 0.1 + - _VoronoiNoiseUV: 0 + - _VoronoiOuterEmissionStrength: 0 + - _VoronoiPower: 0.45454544 + - _VoronoiScale: 5 + - _VoronoiSpace: 0 + - _VoronoiType: 1 + - _Wriggle: 0 + - _WriggleSpeed: 0.28 + - _ZClip: 1 + - _ZTest: 4 + - _ZWrite: 1 + - _ppHueSelectOrShift: 1 + - footer_bluesky: 0 + - footer_discord: 0 + - footer_github: 0 + - footer_patreon: 0 + - footer_twitter: 0 + - footer_website: 0 + - footer_youtube: 0 + - g_end_tps_bezier: 0 + - g_end_tps_buldge: 0 + - g_end_tps_idle: 0 + - g_end_tps_pulsing: 0 + - g_end_tps_squeeze: 0 + - g_start_tps_bezier: 0 + - g_start_tps_buldge: 0 + - g_start_tps_idle: 0 + - g_start_tps_pulsing: 0 + - g_start_tps_squeeze: 0 + - m_AudioLinkCategory: 0 + - m_OutlineCategory: 0 + - m_end_ALDecalSpectrum: 0 + - m_end_ALVolumeColor: 0 + - m_end_Alpha: 0 + - m_end_Ansio: 0 + - m_end_BeatsaberBloomFog: 0 + - m_end_BeatsaberOptions: 0 + - m_end_BlackLightMasking: 0 + - m_end_BonusSliders: 0 + - m_end_CRT: 0 + - m_end_CenterOutDissolve: 0 + - m_end_ColorAdjust: 0 + - m_end_CubeMap: 0 + - m_end_Decal0: 0 + - m_end_Decal0AudioLink: 0 + - m_end_Decal1: 0 + - m_end_Decal1AudioLink: 0 + - m_end_Decal2: 0 + - m_end_Decal2AudioLink: 0 + - m_end_Decal3: 0 + - m_end_Decal3AudioLink: 0 + - m_end_DecalSection: 0 + - m_end_DepthBulge: 0 + - m_end_DetailOptions: 0 + - m_end_DistortionAudioLink: 0 + - m_end_FXProximityColor: 0 + - m_end_FlipbookAudioLink: 0 + - m_end_Gameboy: 0 + - m_end_GlobalMask: 0 + - m_end_GlobalMaskDistanceM_0: 0 + - m_end_GlobalMaskDistanceM_1: 0 + - m_end_GlobalMaskDistanceM_10: 0 + - m_end_GlobalMaskDistanceM_11: 0 + - m_end_GlobalMaskDistanceM_12: 0 + - m_end_GlobalMaskDistanceM_13: 0 + - m_end_GlobalMaskDistanceM_14: 0 + - m_end_GlobalMaskDistanceM_15: 0 + - m_end_GlobalMaskDistanceM_2: 0 + - m_end_GlobalMaskDistanceM_3: 0 + - m_end_GlobalMaskDistanceM_4: 0 + - m_end_GlobalMaskDistanceM_5: 0 + - m_end_GlobalMaskDistanceM_6: 0 + - m_end_GlobalMaskDistanceM_7: 0 + - m_end_GlobalMaskDistanceM_8: 0 + - m_end_GlobalMaskDistanceM_9: 0 + - m_end_GlobalMaskModifiers: 0 + - m_end_GlobalMaskModifiersBackface: 0 + - m_end_GlobalMaskModifiersCamera: 0 + - m_end_GlobalMaskModifiersDistance: 0 + - m_end_GlobalMaskModifiersMirror: 0 + - m_end_GlobalMaskOptions: 0 + - m_end_GlobalMaskTextures: 0 + - m_end_GlobalMaskVertexColors: 0 + - m_end_GlobalThemeColor0: 0 + - m_end_GlobalThemeColor1: 0 + - m_end_GlobalThemeColor2: 0 + - m_end_GlobalThemeColor3: 0 + - m_end_GlobalThemes: 0 + - m_end_LTCGI: 0 + - m_end_MainVertexColors: 0 + - m_end_Matcap2: 0 + - m_end_Matcap3: 0 + - m_end_Matcap4: 0 + - m_end_OutlineAudioLink: 0 + - m_end_OutlineStencil: 0 + - m_end_OutlineStencilPassBackOptions: 0 + - m_end_OutlineStencilPassFrontOptions: 0 + - m_end_PPAnimations: 0 + - m_end_PathAudioLink: 0 + - m_end_PoiGlobalCategory: 0 + - m_end_PoiLightData: 0 + - m_end_PoiPostProcessingCategory: 0 + - m_end_PoiShading: 0 + - m_end_PoiUVCategory: 0 + - m_end_RGBMask: 0 + - m_end_Rim2AudioLink: 0 + - m_end_RimAudioLink: 0 + - m_end_SphericalDissolve: 0 + - m_end_StencilPassBackOptions: 0 + - m_end_StencilPassFrontOptions: 0 + - m_end_StencilPassOptions: 0 + - m_end_Stochastic: 0 + - m_end_Text: 0 + - m_end_TextFPS: 0 + - m_end_TextInstanceTime: 0 + - m_end_TextNumeric: 0 + - m_end_TextPosition: 0 + - m_end_TruchetAudioLink: 0 + - m_end_UVTileDissolve: 0 + - m_end_Uzumore: 0 + - m_end_VideoSettings: 0 + - m_end_VoronoiAudioLink: 0 + - m_end_WorldAOBlocker: 0 + - m_end_alphaBlending: 0 + - m_end_audioLink: 0 + - m_end_audioLinkOverrides: 0 + - m_end_backFace: 0 + - m_end_backlight: 0 + - m_end_bakedLighting: 0 + - m_end_blending: 0 + - m_end_brdf: 0 + - m_end_clearCoat: 0 + - m_end_clearcoatadvanced: 0 + - m_end_clearcoatglobalmask: 0 + - m_end_depthFX: 0 + - m_end_depthRimLightOptions: 0 + - m_end_dissolve: 0 + - m_end_dissolveHueShift: 0 + - m_end_emission1Options: 0 + - m_end_emission2Options: 0 + - m_end_emission3Options: 0 + - m_end_emissionOptions: 0 + - m_end_flipBook: 0 + - m_end_glitter: 0 + - m_end_internalparallax: 0 + - m_end_matcap: 0 + - m_end_mirrorOptions: 0 + - m_end_normalCorrect: 0 + - m_end_outlineAlphaBlending: 0 + - m_end_outlineBlending: 0 + - m_end_parallax: 0 + - m_end_pathing: 0 + - m_end_pen_autoConfig: 0 + - m_end_poiSSAO: 0 + - m_end_pointToPoint: 0 + - m_end_postprocess: 0 + - m_end_raliv: 0 + - m_end_ralivAdvanced: 0 + - m_end_ralivOriface: 0 + - m_end_ralivPenetrator: 0 + - m_end_reflectionRim: 0 + - m_end_rim1LightOptions: 0 + - m_end_rim2LightOptions: 0 + - m_end_stylizedSpec: 0 + - m_end_subsurfaceScattering: 0 + - m_end_tps_penetrator: 0 + - m_end_truchet: 0 + - m_end_udimdiscardOptions: 0 + - m_end_udimfacediscardOptions: 0 + - m_end_uvDistortion: 0 + - m_end_uvLocalWorld: 0 + - m_end_uvPanosphere: 0 + - m_end_uvPolar: 0 + - m_end_vertexGlitching: 0 + - m_end_vertexLookAt: 0 + - m_end_vertexManipulation: 0 + - m_end_videoEffects: 0 + - m_end_voronoi: 0 + - m_end_voronoiRandom: 0 + - m_lightingCategory: 1 + - m_mainCategory: 1 + - m_modifierCategory: 0 + - m_renderingCategory: 0 + - m_specialFXCategory: 1 + - m_start_ALDecalSpectrum: 0 + - m_start_ALVolumeColor: 0 + - m_start_Alpha: 0 + - m_start_Aniso: 0 + - m_start_BeatsaberBloomFog: 0 + - m_start_BeatsaberOptions: 0 + - m_start_BlackLightMasking: 0 + - m_start_BonusSliders: 0 + - m_start_CRT: 0 + - m_start_CenterOutDissolve: 0 + - m_start_ColorAdjust: 0 + - m_start_CubeMap: 0 + - m_start_Decal0: 0 + - m_start_Decal0AudioLink: 0 + - m_start_Decal1: 0 + - m_start_Decal1AudioLink: 0 + - m_start_Decal2: 0 + - m_start_Decal2AudioLink: 0 + - m_start_Decal3: 0 + - m_start_Decal3AudioLink: 0 + - m_start_DecalSection: 0 + - m_start_DepthBulge: 0 + - m_start_DetailOptions: 0 + - m_start_DistortionAudioLink: 0 + - m_start_FXProximityColor: 0 + - m_start_FlipbookAudioLink: 0 + - m_start_Gameboy: 0 + - m_start_GlobalMask: 0 + - m_start_GlobalMaskDistanceM_0: 0 + - m_start_GlobalMaskDistanceM_1: 0 + - m_start_GlobalMaskDistanceM_10: 0 + - m_start_GlobalMaskDistanceM_11: 0 + - m_start_GlobalMaskDistanceM_12: 0 + - m_start_GlobalMaskDistanceM_13: 0 + - m_start_GlobalMaskDistanceM_14: 0 + - m_start_GlobalMaskDistanceM_15: 0 + - m_start_GlobalMaskDistanceM_2: 0 + - m_start_GlobalMaskDistanceM_3: 0 + - m_start_GlobalMaskDistanceM_4: 0 + - m_start_GlobalMaskDistanceM_5: 0 + - m_start_GlobalMaskDistanceM_6: 0 + - m_start_GlobalMaskDistanceM_7: 0 + - m_start_GlobalMaskDistanceM_8: 0 + - m_start_GlobalMaskDistanceM_9: 0 + - m_start_GlobalMaskModifiers: 0 + - m_start_GlobalMaskModifiersBackface: 0 + - m_start_GlobalMaskModifiersCamera: 0 + - m_start_GlobalMaskModifiersDistance: 0 + - m_start_GlobalMaskModifiersMirror: 0 + - m_start_GlobalMaskOptions: 0 + - m_start_GlobalMaskTextures: 0 + - m_start_GlobalMaskVertexColors: 0 + - m_start_GlobalThemeColor0: 0 + - m_start_GlobalThemeColor1: 0 + - m_start_GlobalThemeColor2: 0 + - m_start_GlobalThemeColor3: 0 + - m_start_GlobalThemes: 0 + - m_start_LTCGI: 0 + - m_start_MainVertexColors: 0 + - m_start_Matcap2: 0 + - m_start_Matcap3: 0 + - m_start_Matcap4: 0 + - m_start_OutlineAudioLink: 0 + - m_start_OutlineStencil: 0 + - m_start_OutlineStencilPassBackOptions: 0 + - m_start_OutlineStencilPassFrontOptions: 0 + - m_start_PPAnimations: 0 + - m_start_PathAudioLink: 0 + - m_start_PoiGlobalCategory: 0 + - m_start_PoiLightData: 0 + - m_start_PoiPostProcessingCategory: 0 + - m_start_PoiShading: 0 + - m_start_PoiUVCategory: 0 + - m_start_RGBMask: 0 + - m_start_Rim2AudioLink: 0 + - m_start_RimAudioLink: 0 + - m_start_SphericalDissolve: 0 + - m_start_StencilPassBackOptions: 0 + - m_start_StencilPassFrontOptions: 0 + - m_start_StencilPassOptions: 0 + - m_start_Stochastic: 0 + - m_start_Text: 0 + - m_start_TextFPS: 0 + - m_start_TextInstanceTime: 0 + - m_start_TextNumeric: 0 + - m_start_TextPosition: 0 + - m_start_TruchetAudioLink: 0 + - m_start_UVTileDissolve: 0 + - m_start_Uzumore: 0 + - m_start_VideoSettings: 0 + - m_start_VoronoiAudioLink: 0 + - m_start_WorldAOBlocker: 0 + - m_start_alphaBlending: 0 + - m_start_audioLink: 0 + - m_start_audioLinkOverrides: 0 + - m_start_backFace: 0 + - m_start_backlight: 0 + - m_start_bakedLighting: 1 + - m_start_blending: 0 + - m_start_brdf: 0 + - m_start_clearCoat: 0 + - m_start_clearcoatadvanced: 0 + - m_start_clearcoatglobalmask: 0 + - m_start_depthFX: 0 + - m_start_depthRimLightOptions: 0 + - m_start_dissolve: 0 + - m_start_dissolveHueShift: 0 + - m_start_emission1Options: 0 + - m_start_emission2Options: 0 + - m_start_emission3Options: 0 + - m_start_emissionOptions: 1 + - m_start_flipBook: 0 + - m_start_glitter: 0 + - m_start_internalparallax: 0 + - m_start_matcap: 0 + - m_start_mirrorOptions: 0 + - m_start_normalCorrect: 0 + - m_start_outlineAlphaBlending: 0 + - m_start_outlineBlending: 0 + - m_start_parallax: 0 + - m_start_pathing: 0 + - m_start_pen_autoConfig: 0 + - m_start_poiSSAO: 0 + - m_start_pointToPoint: 0 + - m_start_postprocess: 0 + - m_start_raliv: 0 + - m_start_ralivAdvanced: 0 + - m_start_ralivOriface: 0 + - m_start_ralivPenetrator: 0 + - m_start_reflectionRim: 0 + - m_start_rim2LightOptions: 0 + - m_start_rimLight1Options: 0 + - m_start_stylizedSpec: 0 + - m_start_subsurfaceScattering: 0 + - m_start_tps_penetrator: 0 + - m_start_truchet: 0 + - m_start_udimdiscardOptions: 0 + - m_start_udimfacediscardOptions: 0 + - m_start_uvDistortion: 0 + - m_start_uvLocalWorld: 0 + - m_start_uvPanosphere: 0 + - m_start_uvPolar: 0 + - m_start_vertexGlitching: 0 + - m_start_vertexLookAt: 0 + - m_start_vertexManipulation: 0 + - m_start_videoEffects: 0 + - m_start_voronoi: 0 + - m_start_voronoiRandom: 0 + - m_thirdpartyCategory: 0 + - m_vertexCategory: 0 + - s_end_ALAlpha: 0 + - s_end_ALDecalAudioModsOptions: 0 + - s_end_ALDecalBand: 0 + - s_end_ALDecalColorsBlendingOptions: 0 + - s_end_ALDecalShapeClipOptions: 0 + - s_end_ALDecalVolumeOptions: 0 + - s_end_ALSpectrumMotion: 0 + - s_end_ALVertexGlitching: 0 + - s_end_ALVertexHeight: 0 + - s_end_ALVertexLookAtAL: 0 + - s_end_AlphaAdvanced: 0 + - s_end_AlphaAngular: 0 + - s_end_AlphaDistanceFade: 0 + - s_end_AlphaDithering: 0 + - s_end_AlphaFresnel: 0 + - s_end_AlphaToCoverage: 0 + - s_end_AnisoBottomLayer: 0 + - s_end_AnisoTopLayer: 1 + - s_end_AudioLinkBandOverrides: 0 + - s_end_BRDFTPSMaskGroup: 0 + - s_end_BackFaceHueShift: 0 + - s_end_BackfaceMods: 0 + - s_end_CCopt: 1 + - s_end_ClearCoatTPSMaskGroup: 0 + - s_end_ColorAdjustColorGrading: 0 + - s_end_ContinuousRotation: 0 + - s_end_CubeMapColorAdjust: 0 + - s_end_CubeMapMasking: 0 + - s_end_Decal0ChannelSeparation: 0 + - s_end_Decal0GlobalMasking: 0 + - s_end_Decal0HueShift: 0 + - s_end_Decal0Video: 0 + - s_end_Decal1ChannelSeparation: 0 + - s_end_Decal1GlobalMasking: 0 + - s_end_Decal1HueShift: 0 + - s_end_Decal1Video: 0 + - s_end_Decal2ChannelSeparation: 0 + - s_end_Decal2GlobalMasking: 0 + - s_end_Decal2HueShift: 0 + - s_end_Decal2Video: 0 + - s_end_Decal3ChannelSeparation: 0 + - s_end_Decal3GlobalMasking: 0 + - s_end_Decal3HueShift: 0 + - s_end_Decal3Video: 0 + - s_end_DecalTPSMaskGroup: 0 + - s_end_DepthAlpha: 0 + - s_end_DepthFXColorEmission: 0 + - s_end_DetailNormal: 0 + - s_end_DetailTexture: 0 + - s_end_DissolveAudioLink: 0 + - s_end_DissolvedMenu: 0 + - s_end_EdgeMenu: 0 + - s_end_EmissionAL0Add: 0 + - s_end_EmissionAL0COut: 0 + - s_end_EmissionAL0Multiply: 0 + - s_end_EmissionAL1Add: 0 + - s_end_EmissionAL1COut: 0 + - s_end_EmissionAL1Multiply: 0 + - s_end_EmissionAL2Add: 0 + - s_end_EmissionAL2COut: 0 + - s_end_EmissionAL2Multiply: 0 + - s_end_EmissionAL3Add: 0 + - s_end_EmissionAL3COut: 0 + - s_end_EmissionAL3Multiply: 0 + - s_end_EmissionBlinking0: 0 + - s_end_EmissionBlinking1: 0 + - s_end_EmissionBlinking2: 0 + - s_end_EmissionBlinking3: 0 + - s_end_EmissionCenterOut0: 0 + - s_end_EmissionCenterOut1: 0 + - s_end_EmissionCenterOut2: 0 + - s_end_EmissionCenterOut3: 0 + - s_end_EmissionHueShift0: 0 + - s_end_EmissionHueShift1: 0 + - s_end_EmissionHueShift2: 0 + - s_end_EmissionHueShift3: 0 + - s_end_EmissionLightBased0: 0 + - s_end_EmissionLightBased1: 0 + - s_end_EmissionLightBased2: 0 + - s_end_EmissionLightBased3: 0 + - s_end_FixedRimBlending: 0 + - s_end_FixedRimColor: 0 + - s_end_FixedRimShapeControl: 0 + - s_end_FlipbookCrossfade: 0 + - s_end_FlipbookHueShift: 0 + - s_end_FlipbookManualFrameControl: 0 + - s_end_FlipbookStartAndEnd: 0 + - s_end_GlitterAudioLink: 0 + - s_end_GlitterColorAndShape: 0 + - s_end_GlitterHueShiftSection: 0 + - s_end_GlitterMask: 0 + - s_end_GlitterPositionSize: 0 + - s_end_GlitterRotationSection: 0 + - s_end_GlitterSparkleControl: 0 + - s_end_GlobalMaskOptionsForceToggles: 0 + - s_end_GlobalMaskOptionsMinMaxSliders: 0 + - s_end_GlobalMaskOptionsSliders: 0 + - s_end_LightDataAddPass: 1 + - s_end_LightDataBasePass: 1 + - s_end_LightDataDebug: 0 + - s_end_LightDataSDF: 1 + - s_end_LocalRotation: 0 + - s_end_LocalTranslation: 0 + - s_end_LookAtAlphaMask: 0 + - s_end_LookAtBlueMask: 0 + - s_end_LookAtGreenMask: 0 + - s_end_LookAtRedMask: 0 + - s_end_LookAtVisibility: 0 + - s_end_MainHueShift: 0 + - s_end_MainHueShiftAL: 0 + - s_end_MainHueShiftGlobalMask: 0 + - s_end_MaskingMenu: 0 + - s_end_Matcap0AudioLink: 0 + - s_end_Matcap0Blending: 0 + - s_end_Matcap0Masking: 0 + - s_end_Matcap1AudioLink: 0 + - s_end_Matcap1Blending: 0 + - s_end_Matcap1HueShift: 0 + - s_end_Matcap1Masking: 0 + - s_end_Matcap1Normal: 0 + - s_end_Matcap1Smoothness: 0 + - s_end_Matcap2AudioLink: 0 + - s_end_Matcap2Blending: 0 + - s_end_Matcap2HueShift: 0 + - s_end_Matcap2Masking: 0 + - s_end_Matcap2Normal: 0 + - s_end_Matcap2Smoothness: 0 + - s_end_Matcap2TPSMaskGroup: 0 + - s_end_Matcap3AudioLink: 0 + - s_end_Matcap3Blending: 0 + - s_end_Matcap3HueShift: 0 + - s_end_Matcap3Masking: 0 + - s_end_Matcap3Normal: 0 + - s_end_Matcap3Smoothness: 0 + - s_end_Matcap3TPSMaskGroup: 0 + - s_end_Matcap4TPSMaskGroup: 0 + - s_end_MatcapHueShift: 0 + - s_end_MatcapNormal: 0 + - s_end_MatcapSmoothness: 0 + - s_end_MatcapTPSMaskGroup: 0 + - s_end_MirrorTexture: 0 + - s_end_MultilayerMath1stLayer: 1 + - s_end_MultilayerMath2ndLayer: 0 + - s_end_MultilayerMath3rdLayer: 0 + - s_end_MultilayerMathBorder: 1 + - s_end_MultilayerMathBorderMap: 1 + - s_end_MultilayerShadowMap: 0 + - s_end_OutlineAlphaDistanceFade: 0 + - s_end_OutlineColorAdjust: 0 + - s_end_OutlineFixedSize: 0 + - s_end_OutlineLighting: 0 + - s_end_OutlineRenderingOptions: 0 + - s_end_OutlineZOffset: 0 + - s_end_PBRSecondSpecular: 0 + - s_end_PBRSplitMaskSample: 0 + - s_end_ParallaxInternalHueShift: 0 + - s_end_ParallaxInternalLayerColoring: 0 + - s_end_ParallaxInternalLayerControls: 0 + - s_end_PathAppearance: 0 + - s_end_PathColors: 0 + - s_end_PathRemapping: 0 + - s_end_PathSourceDirections: 0 + - s_end_PathTypes: 0 + - s_end_Positioning: 0 + - s_end_RGBAlpha: 0 + - s_end_RGBBlue: 0 + - s_end_RGBGreen: 0 + - s_end_RGBRed: 0 + - s_end_RimLight0Color: 0 + - s_end_RimLight0GlobalMasking: 0 + - s_end_RimLight0HueShift: 0 + - s_end_RimLight0LightDirMask: 0 + - s_end_RimLight0ShapeControls: 0 + - s_end_RimLight1Color: 0 + - s_end_RimLight1GlobalMasking: 0 + - s_end_RimLight1HueShift: 0 + - s_end_RimLight1LightDirMask: 0 + - s_end_RimLight1ShapeControls: 0 + - s_end_RimLight2DirectionMask: 0 + - s_end_RimLightDirectionMask: 0 + - s_end_SSAOAdvanced: 0 + - s_end_SSAOColorAndMasking: 0 + - s_end_ScrollingEmission0: 0 + - s_end_ScrollingEmission1: 0 + - s_end_ScrollingEmission2: 0 + - s_end_ScrollingEmission3: 0 + - s_end_ShadingAddPass: 0 + - s_end_ShadingGlobalMask: 0 + - s_end_StylizedReflectionLilEnviroReflections: 1 + - s_end_StylizedReflectionLilSpecular: 1 + - s_end_StylizedReflectionMode0: 1 + - s_end_StylizedReflectionMode1: 1 + - s_end_StylizedSpecularAdvanced: 0 + - s_end_StylizedSpecularLayer0: 0 + - s_end_StylizedSpecularLayer1: 0 + - s_end_TimingOptions: 0 + - s_end_TransitionMenu: 0 + - s_end_UVTileDissolveRow0: 0 + - s_end_UVTileDissolveRow1: 0 + - s_end_UVTileDissolveRow2: 0 + - s_end_UVTileDissolveRow3: 0 + - s_end_VertAL: 0 + - s_end_VertexBarrelMode: 0 + - s_end_VertexColors: 0 + - s_end_VertexGlitchMirror: 0 + - s_end_VertexGlitchTexture: 0 + - s_end_VertexManipulationHeight: 0 + - s_end_VertexRoundingAL: 0 + - s_end_VertexScale: 0 + - s_end_VertexSphereMode: 0 + - s_end_VertexTornadoMode: 0 + - s_end_VertexWind: 0 + - s_end_WorldTranslation: 0 + - s_end_brdfadvanced: 0 + - s_end_decal1_position: 0 + - s_end_decal2_position: 0 + - s_end_decal3_position: 0 + - s_end_decal_position: 0 + - s_end_deliot: 0 + - s_end_fogOpt: 1 + - s_end_ggxanisotropics: 0 + - s_end_heightFogOpt: 1 + - s_end_hextile: 0 + - s_end_liltoon_rim2_lightdir: 0 + - s_end_liltoon_rim_lightdir: 0 + - s_end_matcap1ApplyToAlpha: 0 + - s_end_matcap2ApplyToAlpha: 0 + - s_end_matcap3ApplyToAlpha: 0 + - s_end_matcapApplyToAlpha: 0 + - s_end_outline_al_color: 0 + - s_end_parallaxAdvanced: 0 + - s_end_vertexRounding: 0 + - s_start_ALAlpha: 0 + - s_start_ALDecalAudioModsOptions: 1 + - s_start_ALDecalBandOptions: 1 + - s_start_ALDecalColorsBlendingOptions: 1 + - s_start_ALDecalShapeClipOptions: 1 + - s_start_ALDecalVolumeOptions: 1 + - s_start_ALSpectrumMotion: 0 + - s_start_ALVertexGlitching: 0 + - s_start_ALVertexHeight: 0 + - s_start_ALVertexLookAtAL: 0 + - s_start_AlphaAdvanced: 0 + - s_start_AlphaAngular: 0 + - s_start_AlphaDistanceFade: 0 + - s_start_AlphaDithering: 0 + - s_start_AlphaFresnel: 0 + - s_start_AlphaToCoverage: 0 + - s_start_AnisoBottomLayer: 0 + - s_start_AnisoTopLayer: 1 + - s_start_AudioLinkBandOverrides: 1 + - s_start_BRDFTPSMaskGroup: 0 + - s_start_BackFaceHueShift: 0 + - s_start_BackfaceMods: 0 + - s_start_CCopt: 1 + - s_start_ClearCoatTPSMaskGroup: 0 + - s_start_ColorAdjustColorGrading: 0 + - s_start_ContinuousRotation: 0 + - s_start_CubeMapColorAdjust: 0 + - s_start_CubeMapMasking: 1 + - s_start_Decal0ChannelSeparation: 0 + - s_start_Decal0GlobalMasking: 0 + - s_start_Decal0HueShift: 0 + - s_start_Decal0Video: 0 + - s_start_Decal1ChannelSeparation: 0 + - s_start_Decal1GlobalMasking: 0 + - s_start_Decal1HueShift: 0 + - s_start_Decal1Video: 0 + - s_start_Decal2ChannelSeparation: 0 + - s_start_Decal2GlobalMasking: 0 + - s_start_Decal2HueShift: 0 + - s_start_Decal2Video: 0 + - s_start_Decal3ChannelSeparation: 0 + - s_start_Decal3GlobalMasking: 0 + - s_start_Decal3HueShift: 0 + - s_start_Decal3Video: 0 + - s_start_DecalTPSMaskGroup: 0 + - s_start_DepthAlpha: 0 + - s_start_DepthFXColorEmission: 0 + - s_start_DetailNormal: 0 + - s_start_DetailTexture: 0 + - s_start_DissolveAudioLink: 0 + - s_start_DissolvedMenu: 0 + - s_start_EdgeMenu: 0 + - s_start_EmissionAL0Add: 0 + - s_start_EmissionAL0COut: 0 + - s_start_EmissionAL0Multiply: 0 + - s_start_EmissionAL1Add: 0 + - s_start_EmissionAL1COut: 0 + - s_start_EmissionAL1Multiply: 0 + - s_start_EmissionAL2Add: 0 + - s_start_EmissionAL2COut: 0 + - s_start_EmissionAL2Multiply: 0 + - s_start_EmissionAL3Add: 0 + - s_start_EmissionAL3COut: 0 + - s_start_EmissionAL3Multiply: 0 + - s_start_EmissionBlinking0: 0 + - s_start_EmissionBlinking1: 0 + - s_start_EmissionBlinking2: 0 + - s_start_EmissionBlinking3: 0 + - s_start_EmissionCenterOut0: 0 + - s_start_EmissionCenterOut1: 0 + - s_start_EmissionCenterOut2: 0 + - s_start_EmissionCenterOut3: 0 + - s_start_EmissionHueShift0: 0 + - s_start_EmissionHueShift1: 0 + - s_start_EmissionHueShift2: 0 + - s_start_EmissionHueShift3: 0 + - s_start_EmissionLightBased0: 0 + - s_start_EmissionLightBased1: 0 + - s_start_EmissionLightBased2: 0 + - s_start_EmissionLightBased3: 0 + - s_start_FixedRimBlending: 1 + - s_start_FixedRimColor: 1 + - s_start_FixedRimShapeControl: 1 + - s_start_FlipbookCrossfade: 0 + - s_start_FlipbookHueShift: 0 + - s_start_FlipbookManualFrameControl: 0 + - s_start_FlipbookStartAndEnd: 0 + - s_start_GlitterAudioLink: 0 + - s_start_GlitterColorAndShape: 1 + - s_start_GlitterHueShiftSection: 0 + - s_start_GlitterMask: 0 + - s_start_GlitterPositionSize: 0 + - s_start_GlitterRotationSection: 0 + - s_start_GlitterSparkleControl: 1 + - s_start_GlobalMaskOptionsForceToggles: 0 + - s_start_GlobalMaskOptionsMinMaxSliders: 0 + - s_start_GlobalMaskOptionsSliders: 0 + - s_start_LightDataAddPass: 1 + - s_start_LightDataBasePass: 1 + - s_start_LightDataDebug: 0 + - s_start_LightDataSDF: 1 + - s_start_LocalRotation: 0 + - s_start_LocalTranslation: 0 + - s_start_LookAtAlphaMask: 0 + - s_start_LookAtBlueMask: 0 + - s_start_LookAtGreenMask: 0 + - s_start_LookAtRedMask: 1 + - s_start_LookAtVisibility: 0 + - s_start_MainHueShift: 1 + - s_start_MainHueShiftAL: 0 + - s_start_MainHueShiftGlobalMask: 0 + - s_start_MaskingMenu: 0 + - s_start_Matcap0AudioLink: 0 + - s_start_Matcap0Blending: 1 + - s_start_Matcap0Masking: 1 + - s_start_Matcap1AudioLink: 0 + - s_start_Matcap1Blending: 1 + - s_start_Matcap1HueShift: 0 + - s_start_Matcap1Masking: 1 + - s_start_Matcap1Normal: 0 + - s_start_Matcap1Smoothness: 0 + - s_start_Matcap2AudioLink: 0 + - s_start_Matcap2Blending: 1 + - s_start_Matcap2HueShift: 0 + - s_start_Matcap2Masking: 1 + - s_start_Matcap2Normal: 0 + - s_start_Matcap2Smoothness: 0 + - s_start_Matcap2TPSMaskGroup: 0 + - s_start_Matcap3AudioLink: 0 + - s_start_Matcap3Blending: 1 + - s_start_Matcap3HueShift: 0 + - s_start_Matcap3Masking: 1 + - s_start_Matcap3Normal: 0 + - s_start_Matcap3Smoothness: 0 + - s_start_Matcap3TPSMaskGroup: 0 + - s_start_Matcap4TPSMaskGroup: 0 + - s_start_MatcapHueShift: 0 + - s_start_MatcapNormal: 0 + - s_start_MatcapSmoothness: 0 + - s_start_MatcapTPSMaskGroup: 0 + - s_start_MirrorTexture: 1 + - s_start_MultilayerMath1stLayer: 1 + - s_start_MultilayerMath2ndLayer: 0 + - s_start_MultilayerMath3rdLayer: 0 + - s_start_MultilayerMathBorder: 1 + - s_start_MultilayerMathBorderMap: 0 + - s_start_MultilayerShadowMap: 0 + - s_start_OutlineAlphaDistanceFade: 0 + - s_start_OutlineColorAdjust: 0 + - s_start_OutlineFixedSize: 0 + - s_start_OutlineLighting: 0 + - s_start_OutlineRenderingOptions: 0 + - s_start_OutlineZOffset: 0 + - s_start_PBRSecondSpecular: 0 + - s_start_PBRSplitMaskSample: 0 + - s_start_ParallaxInternalHueShift: 0 + - s_start_ParallaxInternalLayerColoring: 1 + - s_start_ParallaxInternalLayerControls: 1 + - s_start_PathAppearance: 1 + - s_start_PathColors: 1 + - s_start_PathRemapping: 1 + - s_start_PathSourceDirections: 1 + - s_start_PathTypes: 1 + - s_start_Positioning: 1 + - s_start_RGBAlpha: 0 + - s_start_RGBBlue: 0 + - s_start_RGBGreen: 0 + - s_start_RGBRed: 0 + - s_start_RimLight0Color: 1 + - s_start_RimLight0GlobalMasking: 0 + - s_start_RimLight0HueShift: 0 + - s_start_RimLight0LightDirMask: 0 + - s_start_RimLight0ShapeControls: 1 + - s_start_RimLight1Color: 1 + - s_start_RimLight1GlobalMasking: 0 + - s_start_RimLight1HueShift: 0 + - s_start_RimLight1LightDirMask: 0 + - s_start_RimLight1ShapeControls: 1 + - s_start_RimLight2DirectionMask: 0 + - s_start_RimLightDirectionMask: 0 + - s_start_SSAOAdvanced: 0 + - s_start_SSAOColorAndMasking: 1 + - s_start_ScrollingEmission0: 0 + - s_start_ScrollingEmission1: 0 + - s_start_ScrollingEmission2: 0 + - s_start_ScrollingEmission3: 0 + - s_start_ShadingAddPass: 0 + - s_start_ShadingGlobalMask: 0 + - s_start_StylizedReflectionLilEnviroReflections: 1 + - s_start_StylizedReflectionLilSpecular: 1 + - s_start_StylizedReflectionMode0: 1 + - s_start_StylizedReflectionMode1: 1 + - s_start_StylizedSpecularAdvanced: 0 + - s_start_StylizedSpecularLayer0: 1 + - s_start_StylizedSpecularLayer1: 1 + - s_start_TimingOptions: 1 + - s_start_TransitionMenu: 0 + - s_start_UVTileDissolveRow0: 0 + - s_start_UVTileDissolveRow1: 0 + - s_start_UVTileDissolveRow2: 0 + - s_start_UVTileDissolveRow3: 0 + - s_start_VertAL: 0 + - s_start_VertexBarrelMode: 0 + - s_start_VertexColors: 0 + - s_start_VertexGlitchMirror: 0 + - s_start_VertexGlitchTexture: 1 + - s_start_VertexManipulationHeight: 1 + - s_start_VertexScale: 0 + - s_start_VertexSphereMode: 0 + - s_start_VertexTornadoMode: 0 + - s_start_VertexWind: 0 + - s_start_WorldTranslation: 0 + - s_start_brdfadvanced: 0 + - s_start_decal1_position: 1 + - s_start_decal2_position: 1 + - s_start_decal3_position: 1 + - s_start_decal_position: 1 + - s_start_deliot: 0 + - s_start_fogOpt: 1 + - s_start_ggxanisotropics: 0 + - s_start_heightFogOpt: 1 + - s_start_hextile: 0 + - s_start_liltoon_rim2_lightdir: 0 + - s_start_liltoon_rim_lightdir: 0 + - s_start_matcap1ApplyToAlpha: 0 + - s_start_matcap2ApplyToAlpha: 0 + - s_start_matcap3ApplyToAlpha: 0 + - s_start_matcapApplyToAlpha: 0 + - s_start_outline_al_color: 0 + - s_start_parallaxAdvanced: 0 + - s_start_vertexRounding: 0 + - s_start_vertexRoundingAL: 0 + - shader_is_using_thry_editor: 0 + - shader_locale: 0 + - shader_master_label: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _1st_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALDecalVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALDecalVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _ALDecaldCircleDimensions: {r: 0, g: 1, b: 0, a: 1} + - _ALUVPosition: {r: 0.5, g: 0.5, b: 1, a: 1} + - _ALUVScale: {r: 1, g: 1, b: 1, a: 1} + - _ALVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _AlphaAudioLinkAddRange: {r: 0, g: 0, b: 0, a: 1} + - _AlphaColor: {r: 1, g: 1, b: 1, a: 1} + - _AlphaMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _AlphaTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _AngleForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _Aniso0Tint: {r: 1, g: 1, b: 1, a: 1} + - _Aniso1Tint: {r: 1, g: 1, b: 1, a: 1} + - _AnisoColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _AnisotropyMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Ap_Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Ap_RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkBandOverrideSliders: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveDetail: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission0CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission1CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission2CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission3CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookFrame: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookScale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkOutlineColorMod: {r: 0, g: 1, b: 0, a: 0} + - _AudioLinkOutlineEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineSize: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkPathEmissionAddA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkRim2BrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2EmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2WidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimWidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiInnerEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiOuterEmission: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceColor: {r: 1, g: 1, b: 1, a: 1} + - _BackFaceMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BacklightColor: {r: 0.85, g: 0.8, b: 0.7, a: 1} + - _BacklightColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _BlackLightMasking0Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking1Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking2Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking3Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlueColor: {r: 1, g: 1, b: 1, a: 1} + - _BlueTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BumpMapPan: {r: 0, g: 0, b: 0, a: 0} + - _CenterOutDissolveDirection: {r: 0, g: 0, b: 1, a: 0} + - _ClearCoatMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _ClearCoatReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _ClearCoatSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _ClothMetallicSmoothnessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapColor: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotation: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotationPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalColor: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor1: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor2: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor3: {r: 1, g: 1, b: 1, a: 1} + - _DecalMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalPosition: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition1: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition2: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition3: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalScale: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale1: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale2: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale3: {r: 1, g: 1, b: 1, a: 0} + - _DecalSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset1: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset2: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset3: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DepthColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DepthRimColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DetailMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailNormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTexPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTint: {r: 1, g: 1, b: 1, a: 1} + - _DissolveDetailNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveEdgeColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveEndPoint: {r: 0, g: 1, b: 0, a: 0} + - _DissolveMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveNoiseTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveStartPoint: {r: 0, g: -1, b: 0, a: 0} + - _DissolveTextureColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveToTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrength1AudioLink: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrengthAudioLink: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL0Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL0StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL1Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL1StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL2Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL2StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL3Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL3StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColor: {r: 0.7028302, g: 0.9937976, b: 1, a: 1} + - _EmissionColor1: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor2: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor3: {r: 1, g: 1, b: 1, a: 1} + - _EmissionMap1Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMapPan: {r: 4, g: 4, b: 0, a: 0} + - _EmissionMask1Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _EmissiveScroll_Direction: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction1: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction2: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction3: {r: 0, g: -10, b: 0, a: 0} + - _FXProximityColorMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _FXProximityColorMinColor: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookColor: {r: 1, g: 1, b: 1, a: 1} + - _FlipbookCrossfadeRange: {r: 0.75, g: 1, b: 0, a: 1} + - _FlipbookMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookPanning: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _FlipbookSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookTexArrayPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALMaxBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALSizeAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterColor: {r: 1, g: 1, b: 1, a: 1} + - _GlitterColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSize: {r: 0.1, g: 0.5, b: 0, a: 1} + - _GlitterRandomRotationSpeed: {r: 0, g: 0, b: 0, a: 0} + - _GlitterUVPanning: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskMinMaxSlider_0: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_1: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_10: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_11: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_12: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_13: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_14: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_15: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_2: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_3: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_4: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_5: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_6: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_7: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_8: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_9: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskTexture0Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalThemeColor0: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor1: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor2: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor3: {r: 1, g: 1, b: 1, a: 1} + - _GreenColor: {r: 1, g: 1, b: 1, a: 1} + - _GreenTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _HeightMapPan: {r: 0, g: 0, b: 0, a: 0} + - _HeightmaskPan: {r: 0, g: 0, b: 0, a: 0} + - _HighColor: {r: 1, g: 1, b: 1, a: 1} + - _HighColor_TexPan: {r: 0, g: 0, b: 0, a: 0} + - _LTCGI_DiffuseColor: {r: 1, g: 1, b: 1, a: 1} + - _LTCGI_SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _LightDataSDFMapPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingAOMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingDetailShadowMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingForcedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingWrappedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightngForcedDirection: {r: 0, g: 0, b: 0, a: 1} + - _LineColor: {r: 1, g: 1, b: 1, a: 1} + - _LookAtAlphaDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtAlphaMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtBlueDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtBlueMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBluePivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBlueUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtGreenDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtGreenMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtRedMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _MainColorAdjustTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MainTexPan: {r: 0, g: 0, b: 0, a: 0} + - _MatCap2ndBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap3rdBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap4thBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCapBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap3MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap4MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Pan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapColor: {r: 1, g: 1, b: 1, a: 1} + - _MatcapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapPan: {r: 0, g: 0, b: 0, a: 0} + - _MirrorColor: {r: 1, g: 1, b: 1, a: 1} + - _MirrorTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _MochieSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _MultilayerMathBlurMapPan: {r: 0, g: 0, b: 0, a: 0} + - _NormalCorrectOrigin: {r: 0, g: 0.4, b: -0.025, a: 1} + - _OutlineDropShadowOffset: {r: 1, g: 0, b: 0, a: 0} + - _OutlineMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _OutlinePersonaDirection: {r: 1, g: 0, b: 0, a: 0} + - _OutlineTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _PBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _PPMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _PPRGB: {r: 1, g: 1, b: 1, a: 1} + - _PPTint: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ParallaxInternalMapPan: {r: 0, g: 0, b: 1, a: 1} + - _ParallaxInternalMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMinColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalPanDepthSpeed: {r: 0, g: 0, b: 1, a: 1} + - _PathALAutoCorrelatorRangeA: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeB: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeG: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeR: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALHistoryRangeA: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeB: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeG: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeR: {r: 0, g: 1, b: 0, a: 1} + - _PathColorA: {r: 1, g: 1, b: 1, a: 1} + - _PathColorB: {r: 1, g: 1, b: 1, a: 1} + - _PathColorG: {r: 1, g: 1, b: 1, a: 1} + - _PathColorR: {r: 1, g: 1, b: 1, a: 1} + - _PathEmissionStrength: {r: 0, g: 0, b: 0, a: 0} + - _PathGapLengths: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathOffset: {r: 0, g: 0, b: 0, a: 0} + - _PathRemapA: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapB: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapG: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapR: {r: 0, g: 1, b: 0, a: 1} + - _PathSegments: {r: 0, g: 0, b: 0, a: 0} + - _PathSoftness: {r: 1, g: 1, b: 1, a: 1} + - _PathSpeed: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathTime: {r: -999, g: -999, b: -999, a: -999} + - _PathWidth: {r: 0.03, g: 0.03, b: 0.03, a: 0.03} + - _PathingColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PathingMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PolarCenter: {r: 0.5, g: 0.5, b: 0, a: 0} + - _RGBAAlphaPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAAlphaPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAAlphaScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBABlueScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAGreenScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBARedPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBASmoothnessMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RedColor: {r: 1, g: 1, b: 1, a: 1} + - _RedTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _ReflectionColor: {r: 1, g: 1, b: 1, a: 1} + - _ReflectionCubeColor: {r: 0, g: 0, b: 0, a: 1} + - _RgbNormalAPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalBPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalGPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalRPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2Color: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _Rim2ColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2IndirColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2ShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _Rim2TexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimColor: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _RimColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimEnviroMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimIndirColor: {r: 1, g: 1, b: 1, a: 1} + - _RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _RimMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _RimTexPan: {r: 0, g: 0, b: 0, a: 0} + - _SDFForward: {r: 0, g: 0, b: 1, a: 0} + - _SDFLeft: {r: -1, g: 0, b: 0, a: 0} + - _SDFShadingTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOColor: {r: 0, g: 0, b: 0, a: 1} + - _SSAOColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOHSV: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaxDistanceFalloff: {r: 0.01, g: 0.1, b: 1, a: 1} + - _SSSColor: {r: 1, g: 0, b: 0, a: 1} + - _SSSThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_HighColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_Rim2LightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_RimLightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowAOShift: {r: 0, g: 1, b: 0, a: 1} + - _ShadowAOShift2: {r: 0, g: 1, b: 0, a: 1} + - _ShadowBorderColor: {r: 1, g: 0, b: 0, a: 1} + - _ShadowBorderMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowColor: {r: 0.7, g: 0.75, b: 0.85, a: 1} + - _ShadowColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowStrengthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SkinThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SphericalDissolveCenter: {r: 0, g: 0, b: 0, a: 1} + - _SssColorBleedAoWeights: {r: 0.4, g: 0.15, b: 0.13, a: 0} + - _SssTransmissionAbsorption: {r: -8, g: -40, b: -64, a: 0} + - _TPS_BuldgeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorForward: {r: 0, g: 0, b: 1, a: 0} + - _TPS_PenetratorRight: {r: 1, g: 0, b: 0, a: 0} + - _TPS_PenetratorScale: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorUp: {r: 0, g: 1, b: 0, a: 0} + - _TPS_SqueezeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSScale: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericColor: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericScale: {r: 1, g: 1, b: 1, a: 1} + - _TextPositionColor: {r: 1, g: 0, b: 1, a: 1} + - _TextPositionOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionScale: {r: 1, g: 1, b: 1, a: 1} + - _TextTimeColor: {r: 1, g: 0, b: 1, a: 1} + - _TextTimeOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextTimePadding: {r: 0, g: 0, b: 0, a: 0} + - _TextTimeScale: {r: 1, g: 1, b: 1, a: 1} + - _TruchetALAlpha: {r: 0, g: 0, b: 0, a: 0} + - _TruchetALEmission: {r: 0, g: 0, b: 0, a: 0} + - _TruchetChronoPanSpeed: {r: 0, g: 0, b: 0, a: 0} + - _TruchetColor: {r: 1, g: 1, b: 1, a: 1} + - _TruchetMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _TruchetPanOffset: {r: 0, g: 0, b: 0, a: 0} + - _TruchetTexPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexBasicsMaskUVPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalRotationAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalRotationCTALSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalScaleALMax: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalScaleALMin: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexLookAtAlphaAudiolink: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationHeightAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationHeightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationLocalRotation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalRotationSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalScale: {r: 1, g: 1, b: 1, a: 1} + - _VertexManipulationLocalTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationWorldTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexRoundingRangeAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexSpectrumOffsetMax: {r: 0, g: 0.1, b: 0, a: 1} + - _VertexSpectrumOffsetMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexSphereCenter: {r: 0, g: 0, b: 0, a: 1} + - _VertexWindDetailDirection: {r: 0, g: 1, b: 0, a: 0} + - _VertexWindPrimaryDirection: {r: 1, g: 0, b: 0, a: 0} + - _VertexWorldTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexWorldTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VideoMaskTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _VideoResolution: {r: 1280, g: 720, b: 0, a: 0} + - _VoronoiGradient: {r: 0, g: 0.5, b: 0, a: 0} + - _VoronoiInnerColor: {r: 1, g: 1, b: 1, a: 1} + - _VoronoiMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiOuterColor: {r: 0, g: 0, b: 0, a: 1} + - _VoronoiRandomMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiRandomMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiSpeed: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Quiz/Materials/DownCount/Walls.mat.meta b/Assets/Quiz/Materials/DownCount/Walls.mat.meta new file mode 100644 index 0000000..ae351ef --- /dev/null +++ b/Assets/Quiz/Materials/DownCount/Walls.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6c802bc1dd1dee24095056a5f6da8a8a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/Fonts.meta b/Assets/Quiz/Materials/Fonts.meta new file mode 100644 index 0000000..2c72f1d --- /dev/null +++ b/Assets/Quiz/Materials/Fonts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a3bd4b21af67ff146a375a25585d16a5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/Fonts/BlackPaper.mat b/Assets/Quiz/Materials/Fonts/BlackPaper.mat new file mode 100644 index 0000000..55494e7 --- /dev/null +++ b/Assets/Quiz/Materials/Fonts/BlackPaper.mat @@ -0,0 +1,156 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: BlackPaper + m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _BumpScale: 1 + - _ColorMask: 15 + - _CullMode: 0 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _Diffuse: 0.5 + - _DstBlend: 0 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 5 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _Parallax: 0.02 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 1 + - _ScaleRatioB: 1 + - _ScaleRatioC: 1 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpecularPower: 2 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UVSec: 0 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.5 + - _WeightNormal: 0 + - _ZWrite: 1 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 0, g: 0, b: 0, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} + m_BuildTextureStacks: [] diff --git a/Assets/Quiz/Materials/Fonts/BlackPaper.mat.meta b/Assets/Quiz/Materials/Fonts/BlackPaper.mat.meta new file mode 100644 index 0000000..05b74f3 --- /dev/null +++ b/Assets/Quiz/Materials/Fonts/BlackPaper.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 84f6739abbf514043ba3c86bc241f9be +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/Lobby/LobbyRoom.mat b/Assets/Quiz/Materials/Lobby/LobbyRoom.mat index 1df6052..8e965ab 100644 --- a/Assets/Quiz/Materials/Lobby/LobbyRoom.mat +++ b/Assets/Quiz/Materials/Lobby/LobbyRoom.mat @@ -14,20 +14,43 @@ Material: m_ValidKeywords: - _EMISSION - _LIGHTMAPSPECULAR - - _METALLICGLOSSMAP - _NORMALMAP m_InvalidKeywords: + - BSSBLOOMFOGTYPE_HEIGHT + - MOCHIE_PBR + - VIGNETTE_MASKED - _BAKERY_NONE + - _LIGHTINGMODE_REALISTIC + - _RIM2STYLE_POIYOMI + - _RIMSTYLE_POIYOMI + - _STOCHASTICMODE_DELIOT_HEITZ m_LightmapFlags: 2 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 - stringTagMap: {} + stringTagMap: + AllLockedGUIDS: 3d8b322bfde7cb44badcb0272be09f88 + OriginalKeywords: BSSBLOOMFOGTYPE_HEIGHT MOCHIE_PBR VIGNETTE_MASKED _EMISSION + _LIGHTINGMODE_REALISTIC _RIM2STYLE_POIYOMI _RIMSTYLE_POIYOMI _STOCHASTICMODE_DELIOT_HEITZ + OriginalShader: .poiyomi/Poiyomi Pro + OriginalShaderGUID: 77f45810ea400c74e929db1f8ea09c47 + _stripped_tex__ClothDFG: 76d65cbce584df7449699fb8406f60ea + _stripped_tex__MetallicGlossMap: b89dad6e67a10794796f75999c75859a + _stripped_tex__SkinLUT: d13510bb2be49aa40a66a0101efb6a36 + _stripped_tex__ToonRamp: 61bd594533da4fc42bd46ef93ba5a4f6 disabledShaderPasses: [] m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: + - _AlphaMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _AnisotropyMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _BumpMap: m_Texture: {fileID: 2800000, guid: f1933d912bcd6584fa6d77a8d961b81d, type: 3} m_Scale: {x: 1, y: 1} @@ -52,7 +75,27 @@ Material: m_Texture: {fileID: 2800000, guid: b89dad6e67a10794796f75999c75859a, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _MOESMap: + - _EmissionMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionScrollingCurve: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightDataSDFMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingAOMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingDetailShadowMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingShadowMasks: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} @@ -61,7 +104,15 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MetallicGlossMap: - m_Texture: {fileID: 2800000, guid: b89dad6e67a10794796f75999c75859a, type: 3} + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MochieMetallicMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MochieReflCube: + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _OcclusionMap: @@ -84,50 +135,3738 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _SpecGlossMap: + - _UzumoreMask: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: + - GeometryShader_Enabled: 1 + - Instancing: 0 + - Tessellation_Enabled: 1 + - VertexBasicsMaskUV: 0 + - _1st2nd_Shades_Feather: 0.0001 + - _1stShadeMapMask_Inverse: 0 + - _1st_ShadeMapUV: 0 + - _2ndShadeMapMask_Inverse: 0 + - _2nd_ShadeMapUV: 0 + - _ALDecalBandClipMax: 1 + - _ALDecalBandClipMin: 0 + - _ALDecalBandStep: 0 + - _ALDecalBaseBoost: 5 + - _ALDecalBlendAlpha: 1 + - _ALDecalBlendType: 0 + - _ALDecalColorMaskUV: 0 + - _ALDecalControlsAlpha: 0 + - _ALDecalGlobalMask: 0 + - _ALDecalGlobalMaskBlendType: 2 + - _ALDecalHighEmission: 0 + - _ALDecalLineWidth: 1 + - _ALDecalLowEmission: 0 + - _ALDecalMidEmission: 0 + - _ALDecalShapeClip: 0 + - _ALDecalShapeClipBandWidth: 0.5 + - _ALDecalShapeClipVolumeWidth: 0.5 + - _ALDecalTrebleBoost: 1 + - _ALDecalType: 0 + - _ALDecalUV: 0 + - _ALDecalUVMode: 0 + - _ALDecalVolume: 0.5 + - _ALDecalVolumeClipMax: 1 + - _ALDecalVolumeClipMin: 0 + - _ALDecalVolumeColorHighThemeIndex: 0 + - _ALDecalVolumeColorLowThemeIndex: 0 + - _ALDecalVolumeColorMidThemeIndex: 0 + - _ALDecalVolumeColorSource: 1 + - _ALDecalVolumeStep: 0 + - _ALHighEmission: 0 + - _ALLowEmission: 0 + - _ALMidEmission: 0 + - _ALUVRotation: 0 + - _ALUVRotationSpeed: 0 + - _ALVolumeColorBlendAlpha: 1 + - _ALVolumeColorBlendType: 0 + - _ALVolumeColorDirection: 0 + - _ALVolumeColorHighThemeIndex: 0 + - _ALVolumeColorLowThemeIndex: 0 + - _ALVolumeColorMidThemeIndex: 0 + - _ALVolumeColorUV: 0 + - _AddBlendOp: 4 + - _AddBlendOpAlpha: 4 + - _AddDstBlend: 1 + - _AddDstBlendAlpha: 1 + - _AddSrcBlend: 1 + - _AddSrcBlendAlpha: 0 + - _Add_Antipodean_Rim2Light: 0 + - _Add_Antipodean_RimLight: 0 + - _AlphaAlphaAdd: 0 + - _AlphaAngular: 0 + - _AlphaAngularGlobalMask: 0 + - _AlphaAudioLinkAddBand: 0 + - _AlphaAudioLinkEnabled: 0 + - _AlphaBoostFA: 10 + - _AlphaColorThemeIndex: 0 + - _AlphaDistanceFade: 0 + - _AlphaDistanceFadeGlobalMask: 0 + - _AlphaDistanceFadeMax: 0 + - _AlphaDistanceFadeMaxAlpha: 1 + - _AlphaDistanceFadeMin: 0 + - _AlphaDistanceFadeMinAlpha: 0 + - _AlphaDistanceFadeType: 1 + - _AlphaDitherBias: 0 + - _AlphaDitherGradient: 0.1 + - _AlphaDithering: 0 + - _AlphaForceOpaque: 1 + - _AlphaFresnel: 0 + - _AlphaFresnelAlpha: 0 + - _AlphaFresnelGlobalMask: 0 + - _AlphaFresnelInvert: 0 + - _AlphaFresnelSharpness: 0.5 + - _AlphaFresnelWidth: 0.5 + - _AlphaGlobalMask: 0 + - _AlphaGlobalMaskBlendType: 2 + - _AlphaMaskBlendStrength: 1 + - _AlphaMaskInvert: 0 + - _AlphaMaskUV: 0 + - _AlphaMaskValue: 0 + - _AlphaMipScale: 0.25 + - _AlphaMod: 0 + - _AlphaPremultiply: 0 + - _AlphaSharpenedA2C: 0 + - _AlphaTextureStochastic: 0 + - _AlphaTextureUV: 0 + - _AlphaToCoverage: 0 - _AlphaToMaskMode: 0 + - _AngleCompareTo: 0 + - _AngleMinAlpha: 0 + - _AngleType: 0 + - _Aniso0Blur: 0 + - _Aniso0Edge: 0.5 + - _Aniso0Offset: 0 + - _Aniso0OffsetMapStrength: 0 + - _Aniso0Power: 0 + - _Aniso0Strength: 1 + - _Aniso0SwitchDirection: 0 + - _Aniso0TintIndex: 0 + - _Aniso0ToonMode: 0 + - _Aniso1Blur: 0 + - _Aniso1Edge: 0.5 + - _Aniso1Offset: 0 + - _Aniso1OffsetMapStrength: 0 + - _Aniso1Power: 0.1 + - _Aniso1Strength: 1 + - _Aniso1SwitchDirection: 0 + - _Aniso1TintIndex: 0 + - _Aniso1ToonMode: 0 + - _AnisoAdd: 1 + - _AnisoColorMapUV: 0 + - _AnisoGlobalMask: 0 + - _AnisoGlobalMaskBlendType: 2 + - _AnisoHideInShadow: 1 + - _AnisoReplace: 0 + - _AnisoUseBaseColor: 0 + - _AnisoUseLightColor: 1 + - _Anisotropy: 0 + - _AnisotropyMapChannel: 0 + - _AnisotropyMapUV: 0 + - _Ap_Rim2Light_FeatherOff: 0 + - _Ap_Rim2Light_Power: 0.1 + - _Ap_RimLight_FeatherOff: 0 + - _Ap_RimLight_Power: 0.1 + - _ApplyReflection: 0 + - _ApplySpecular: 1 + - _ApplySpecularFA: 1 + - _AudioLinkAnimToggle: 1 + - _AudioLinkBandOverridesEnabled: 0 + - _AudioLinkDecal0AlphaBand: 0 + - _AudioLinkDecal0ChannelSeparationBand: 0 + - _AudioLinkDecal0EmissionBand: 0 + - _AudioLinkDecal0RotationBand: 0 + - _AudioLinkDecal0ScaleBand: 0 + - _AudioLinkDecal0SideBand: 0 + - _AudioLinkDecal1AlphaBand: 0 + - _AudioLinkDecal1ChannelSeparationBand: 0 + - _AudioLinkDecal1EmissionBand: 0 + - _AudioLinkDecal1RotationBand: 0 + - _AudioLinkDecal1ScaleBand: 0 + - _AudioLinkDecal1SideBand: 0 + - _AudioLinkDecal2AlphaBand: 0 + - _AudioLinkDecal2ChannelSeparationBand: 0 + - _AudioLinkDecal2EmissionBand: 0 + - _AudioLinkDecal2RotationBand: 0 + - _AudioLinkDecal2ScaleBand: 0 + - _AudioLinkDecal2SideBand: 0 + - _AudioLinkDecal3AlphaBand: 0 + - _AudioLinkDecal3ChannelSeparationBand: 0 + - _AudioLinkDecal3EmissionBand: 0 + - _AudioLinkDecal3RotationBand: 0 + - _AudioLinkDecal3ScaleBand: 0 + - _AudioLinkDecal3SideBand: 0 + - _AudioLinkDecalCC0: 0 + - _AudioLinkDecalCC1: 0 + - _AudioLinkDecalCC2: 0 + - _AudioLinkDecalCC3: 0 + - _AudioLinkDissolveAlphaBand: 0 + - _AudioLinkDissolveDetailBand: 0 + - _AudioLinkEmission0CenterOutBand: 0 + - _AudioLinkEmission0CenterOutDuration: 1 + - _AudioLinkEmission0CenterOutSize: 0 + - _AudioLinkEmission1CenterOutBand: 0 + - _AudioLinkEmission1CenterOutDuration: 1 + - _AudioLinkEmission1CenterOutSize: 0 + - _AudioLinkEmission2CenterOutBand: 0 + - _AudioLinkEmission2CenterOutDuration: 1 + - _AudioLinkEmission2CenterOutSize: 0 + - _AudioLinkEmission3CenterOutBand: 0 + - _AudioLinkEmission3CenterOutDuration: 1 + - _AudioLinkEmission3CenterOutSize: 0 + - _AudioLinkFlipbookAlphaBand: 0 + - _AudioLinkFlipbookEmissionBand: 0 + - _AudioLinkFlipbookFrameBand: 0 + - _AudioLinkFlipbookScaleBand: 0 + - _AudioLinkHelp: 0 + - _AudioLinkOutlineColorBand: 0 + - _AudioLinkOutlineEmissionBand: 0 + - _AudioLinkOutlineSizeBand: 0 + - _AudioLinkPathEmissionAddBandA: 0 + - _AudioLinkPathEmissionAddBandB: 0 + - _AudioLinkPathEmissionAddBandG: 0 + - _AudioLinkPathEmissionAddBandR: 0 + - _AudioLinkPathTimeOffsetBandA: 0 + - _AudioLinkPathTimeOffsetBandB: 0 + - _AudioLinkPathTimeOffsetBandG: 0 + - _AudioLinkPathTimeOffsetBandR: 0 + - _AudioLinkPathWidthOffsetBandA: 0 + - _AudioLinkPathWidthOffsetBandB: 0 + - _AudioLinkPathWidthOffsetBandG: 0 + - _AudioLinkPathWidthOffsetBandR: 0 + - _AudioLinkRim2BrightnessBand: 0 + - _AudioLinkRim2EmissionBand: 0 + - _AudioLinkRim2WidthBand: 0 + - _AudioLinkRimBrightnessBand: 0 + - _AudioLinkRimEmissionBand: 0 + - _AudioLinkRimWidthBand: 0 + - _AudioLinkSmoothingBass: 0 + - _AudioLinkSmoothingHighMid: 0 + - _AudioLinkSmoothingLowMid: 0 + - _AudioLinkSmoothingTreble: 0 + - _AudioLinkVoronoiChronoSpeedXBand: 0 + - _AudioLinkVoronoiChronoSpeedXSpeed: 0 + - _AudioLinkVoronoiChronoSpeedXType: 0 + - _AudioLinkVoronoiChronoSpeedYBand: 0 + - _AudioLinkVoronoiChronoSpeedYSpeed: 0 + - _AudioLinkVoronoiChronoSpeedYType: 0 + - _AudioLinkVoronoiChronoSpeedZBand: 0 + - _AudioLinkVoronoiChronoSpeedZSpeed: 0 + - _AudioLinkVoronoiChronoSpeedZType: 0 + - _AudioLinkVoronoiGradientMaxAdd: 0 + - _AudioLinkVoronoiGradientMaxAddBand: 0 + - _AudioLinkVoronoiGradientMinAdd: 0 + - _AudioLinkVoronoiGradientMinAddBand: 0 + - _AudioLinkVoronoiInnerEmissionBand: 0 + - _AudioLinkVoronoiOuterEmissionBand: 0 + - _BRDFTPSDepthEnabled: 0 + - _BRDFTPSReflectionMaskStrength: 1 + - _BRDFTPSSpecularMaskStrength: 1 + - _BSSBloomfog: 0 + - _BSSBloomfogType: 1 + - _BSSEnabled: 0 + - _BSSHelpBox1: 0 + - _BSSHelpBox2: 0 + - _BSSHelpBox3: 0 + - _BSSSpacer1: 0 + - _BSSSpacer2: 0 + - _BSSSpacer3: 0 + - _BackFaceColorThemeIndex: 0 + - _BackFaceDetailIntensity: 1 + - _BackFaceEmissionLimiter: 1 + - _BackFaceEmissionStrength: 0 + - _BackFaceEnabled: 0 + - _BackFaceHueSelectOrShift: 1 + - _BackFaceHueShift: 0 + - _BackFaceHueShiftEnabled: 0 + - _BackFaceHueShiftSpeed: 0 + - _BackFaceMaskChannel: 0 + - _BackFaceMaskUV: 0 + - _BackFaceReplaceAlpha: 0 + - _BackFaceShiftColorSpace: 0 + - _BackFaceTextureUV: 0 + - _BacklightBackfaceMask: 1 + - _BacklightBlur: 0.05 + - _BacklightBorder: 0.35 + - _BacklightColorTexUV: 0 + - _BacklightDirectivity: 5 + - _BacklightEnabled: 0 + - _BacklightMainStrength: 0 + - _BacklightNormalStrength: 1 + - _BacklightReceiveShadow: 1 + - _BacklightViewStrength: 1 - _Bakery: 0 - _BakeryVertexLM: 0 + - _BaseColor_Step: 0.5 + - _BaseShade_Feather: 0.0001 + - _BlackLightMasking0GlobalMaskBlendType: 0 + - _BlackLightMasking0GlobalMaskIndex: 0 + - _BlackLightMasking0Key: 1 + - _BlackLightMasking1GlobalMaskBlendType: 0 + - _BlackLightMasking1GlobalMaskIndex: 0 + - _BlackLightMasking1Key: 2 + - _BlackLightMasking2GlobalMaskBlendType: 0 + - _BlackLightMasking2GlobalMaskIndex: 0 + - _BlackLightMasking2Key: 3 + - _BlackLightMasking3GlobalMaskBlendType: 0 + - _BlackLightMasking3GlobalMaskIndex: 0 + - _BlackLightMasking3Key: 4 + - _BlackLightMaskingEnabled: 0 + - _BlendOp: 0 + - _BlendOpAlpha: 0 + - _BlendshapeBadScaleFix: 1 + - _BlendshapePower: 1 + - _BlueAlphaAdd: 0 + - _BlueColorThemeIndex: 0 + - _BlueTextureStochastic: 0 + - _BlueTextureUV: 0 + - _BulgeOffset: 0 + - _BulgePower: 0 + - _BumpMapStochastic: 0 + - _BumpMapUV: 0 - _BumpScale: 1 - _BumpShadowHardness: 50 - _BumpShadowHeightScale: 0.2 + - _CCIgnoreCastedShadows: 0 + - _CameraAngleMax: 90 + - _CameraAngleMin: 45 + - _CenterOutDissolveInvert: 0 + - _CenterOutDissolveMode: 1 + - _CenterOutDissolveNormals: 0 + - _CenterOutDissolvePower: 1 + - _ClearCoatBRDF: 0 + - _ClearCoatForceFallback: 0 + - _ClearCoatGSAAEnabled: 1 + - _ClearCoatGSAAThreshold: 0.1 + - _ClearCoatGSAAVariance: 0.15 + - _ClearCoatGlobalMask: 0 + - _ClearCoatGlobalMaskBlendType: 2 + - _ClearCoatLitFallback: 1 + - _ClearCoatMapsClearCoatMaskChannel: 0 + - _ClearCoatMapsReflectionMaskChannel: 2 + - _ClearCoatMapsRoughnessChannel: 1 + - _ClearCoatMapsSpecularMaskChannel: 3 + - _ClearCoatMapsStochastic: 0 + - _ClearCoatMapsUV: 0 + - _ClearCoatMaskInvert: 0 + - _ClearCoatNormalSelect: 0 + - _ClearCoatReflectionMaskInvert: 0 + - _ClearCoatReflectionStrength: 1 + - _ClearCoatReflectionStrengthGlobalMask: 0 + - _ClearCoatReflectionStrengthGlobalMaskBlendType: 2 + - _ClearCoatReflectionTintThemeIndex: 0 + - _ClearCoatSmoothness: 1 + - _ClearCoatSmoothnessGlobalMask: 0 + - _ClearCoatSmoothnessGlobalMaskBlendType: 2 + - _ClearCoatSmoothnessMapInvert: 0 + - _ClearCoatSpecularMaskInvert: 0 + - _ClearCoatSpecularStrength: 1 + - _ClearCoatSpecularStrengthGlobalMask: 0 + - _ClearCoatSpecularStrengthGlobalMaskBlendType: 2 + - _ClearCoatSpecularTintThemeIndex: 0 + - _ClearCoatStrength: 1 + - _ClearCoatTPSDepthMaskEnabled: 0 + - _ClearCoatTPSMaskStrength: 1 + - _ClearcoatExposureOcclusion: 0 + - _ClearcoatFresnelStrength: 0.5 + - _ClothLerp: 0 + - _ClothMetallicSmoothnessMapInvert: 0 + - _ClothMetallicSmoothnessMapUV: 0 + - _ClothReflectance: 0.5 + - _ClothSmoothness: 0.5 + - _ColorGradingToggle: 0 + - _ColorMask: 15 + - _ColorThemeIndex: 0 + - _ContinuousDissolve: 0 + - _CubeMapBlendAmount: 1 + - _CubeMapBrightness: 0 + - _CubeMapColorThemeIndex: 0 + - _CubeMapContrast: 1 + - _CubeMapEmissionStrength: 0 + - _CubeMapEnabled: 0 + - _CubeMapHueSelectOrShift: 1 + - _CubeMapHueShift: 0 + - _CubeMapHueShiftColorSpace: 0 + - _CubeMapHueShiftEnabled: 0 + - _CubeMapHueShiftSpeed: 0 + - _CubeMapIntensity: 1 + - _CubeMapLightMask: 0 + - _CubeMapMaskChannel: 0 + - _CubeMapMaskGlobalMask: 0 + - _CubeMapMaskGlobalMaskBlendType: 2 + - _CubeMapMaskInvert: 0 + - _CubeMapMaskUV: 0 + - _CubeMapNormal: 1 + - _CubeMapSaturation: 1 + - _CubeMapSmoothness: 1 + - _CubeMapUVMode: 1 + - _CubeMapWorldNormalsStrength: 1 + - _CubemapBlendType: 0 + - _Cull: 2 - _CullMode: 2 + - _CurvFix: 1 + - _Curvature: 0 + - _CurvatureU: 0 + - _CurvatureV: 0 + - _CustomColors: 0 - _Cutoff: 0.5 + - _Decal0ApplyGlobalMaskBlendType: 0 + - _Decal0ApplyGlobalMaskIndex: 0 + - _Decal0ChannelSeparation: 0 + - _Decal0ChannelSeparationAngleStrength: 0 + - _Decal0ChannelSeparationEnable: 0 + - _Decal0ChannelSeparationHue: 0 + - _Decal0ChannelSeparationPremultiply: 0 + - _Decal0ChannelSeparationVertical: 0 + - _Decal0Depth: 0 + - _Decal0FaceMask: 0 + - _Decal0GlobalMask: 0 + - _Decal0GlobalMaskBlendType: 2 + - _Decal0HueAngleStrength: 0 + - _Decal0MaskChannel: 0 + - _Decal0OnlyVideo: 0 + - _Decal0OverrideAlphaMode: 0 + - _Decal0TPSMaskStrength: 1 + - _Decal0UseDecalAlpha: 0 + - _Decal0VideoAspectFix: 0 + - _Decal0VideoEmissionStrength: 0 + - _Decal0VideoEnabled: 0 + - _Decal0VideoFitToScale: 1 + - _Decal1ApplyGlobalMaskBlendType: 0 + - _Decal1ApplyGlobalMaskIndex: 0 + - _Decal1ChannelSeparation: 0 + - _Decal1ChannelSeparationAngleStrength: 0 + - _Decal1ChannelSeparationEnable: 0 + - _Decal1ChannelSeparationHue: 0 + - _Decal1ChannelSeparationPremultiply: 0 + - _Decal1ChannelSeparationVertical: 0 + - _Decal1Depth: 0 + - _Decal1FaceMask: 0 + - _Decal1GlobalMask: 0 + - _Decal1GlobalMaskBlendType: 2 + - _Decal1HueAngleStrength: 0 + - _Decal1MaskChannel: 1 + - _Decal1OnlyVideo: 0 + - _Decal1OverrideAlphaMode: 0 + - _Decal1TPSMaskStrength: 1 + - _Decal1UseDecalAlpha: 0 + - _Decal1VideoAspectFix: 0 + - _Decal1VideoEmissionStrength: 0 + - _Decal1VideoEnabled: 0 + - _Decal1VideoFitToScale: 1 + - _Decal2ApplyGlobalMaskBlendType: 0 + - _Decal2ApplyGlobalMaskIndex: 0 + - _Decal2ChannelSeparation: 0 + - _Decal2ChannelSeparationAngleStrength: 0 + - _Decal2ChannelSeparationEnable: 0 + - _Decal2ChannelSeparationHue: 0 + - _Decal2ChannelSeparationPremultiply: 0 + - _Decal2ChannelSeparationVertical: 0 + - _Decal2Depth: 0 + - _Decal2FaceMask: 0 + - _Decal2GlobalMask: 0 + - _Decal2GlobalMaskBlendType: 2 + - _Decal2HueAngleStrength: 0 + - _Decal2MaskChannel: 2 + - _Decal2OnlyVideo: 0 + - _Decal2OverrideAlphaMode: 0 + - _Decal2TPSMaskStrength: 1 + - _Decal2UseDecalAlpha: 0 + - _Decal2VideoAspectFix: 0 + - _Decal2VideoEmissionStrength: 0 + - _Decal2VideoEnabled: 0 + - _Decal2VideoFitToScale: 1 + - _Decal3ApplyGlobalMaskBlendType: 0 + - _Decal3ApplyGlobalMaskIndex: 0 + - _Decal3ChannelSeparation: 0 + - _Decal3ChannelSeparationAngleStrength: 0 + - _Decal3ChannelSeparationEnable: 0 + - _Decal3ChannelSeparationHue: 0 + - _Decal3ChannelSeparationPremultiply: 0 + - _Decal3ChannelSeparationVertical: 0 + - _Decal3Depth: 0 + - _Decal3FaceMask: 0 + - _Decal3GlobalMask: 0 + - _Decal3GlobalMaskBlendType: 2 + - _Decal3HueAngleStrength: 0 + - _Decal3MaskChannel: 3 + - _Decal3OnlyVideo: 0 + - _Decal3OverrideAlphaMode: 0 + - _Decal3TPSMaskStrength: 1 + - _Decal3UseDecalAlpha: 0 + - _Decal3VideoAspectFix: 0 + - _Decal3VideoEmissionStrength: 0 + - _Decal3VideoEnabled: 0 + - _Decal3VideoFitToScale: 1 + - _DecalBlendAlpha: 1 + - _DecalBlendAlpha1: 1 + - _DecalBlendAlpha2: 1 + - _DecalBlendAlpha3: 1 + - _DecalBlendType: 0 + - _DecalBlendType1: 0 + - _DecalBlendType2: 0 + - _DecalBlendType3: 0 + - _DecalColor1ThemeIndex: 0 + - _DecalColor2ThemeIndex: 0 + - _DecalColor3ThemeIndex: 0 + - _DecalColorThemeIndex: 0 + - _DecalEmissionStrength: 0 + - _DecalEmissionStrength1: 0 + - _DecalEmissionStrength2: 0 + - _DecalEmissionStrength3: 0 + - _DecalEnabled: 0 + - _DecalEnabled1: 0 + - _DecalEnabled2: 0 + - _DecalEnabled3: 0 + - _DecalHueShift: 0 + - _DecalHueShift1: 0 + - _DecalHueShift2: 0 + - _DecalHueShift3: 0 + - _DecalHueShiftColorSpace: 0 + - _DecalHueShiftColorSpace1: 0 + - _DecalHueShiftColorSpace2: 0 + - _DecalHueShiftColorSpace3: 0 + - _DecalHueShiftEnabled: 0 + - _DecalHueShiftEnabled1: 0 + - _DecalHueShiftEnabled2: 0 + - _DecalHueShiftEnabled3: 0 + - _DecalHueShiftSelectOrShift: 1 + - _DecalHueShiftSelectOrShift1: 1 + - _DecalHueShiftSelectOrShift2: 1 + - _DecalHueShiftSelectOrShift3: 1 + - _DecalHueShiftSpeed: 0 + - _DecalHueShiftSpeed1: 0 + - _DecalHueShiftSpeed2: 0 + - _DecalHueShiftSpeed3: 0 + - _DecalMaskUV: 0 + - _DecalMirroredUVMode: 0 + - _DecalMirroredUVMode1: 0 + - _DecalMirroredUVMode2: 0 + - _DecalMirroredUVMode3: 0 + - _DecalOverrideAlpha: 0 + - _DecalOverrideAlpha1: 0 + - _DecalOverrideAlpha2: 0 + - _DecalOverrideAlpha3: 0 + - _DecalRotation: 0 + - _DecalRotation1: 0 + - _DecalRotation2: 0 + - _DecalRotation3: 0 + - _DecalRotationCTALBand0: 0 + - _DecalRotationCTALBand1: 0 + - _DecalRotationCTALBand2: 0 + - _DecalRotationCTALBand3: 0 + - _DecalRotationCTALSpeed0: 0 + - _DecalRotationCTALSpeed1: 0 + - _DecalRotationCTALSpeed2: 0 + - _DecalRotationCTALSpeed3: 0 + - _DecalRotationCTALType0: 0 + - _DecalRotationCTALType1: 0 + - _DecalRotationCTALType2: 0 + - _DecalRotationCTALType3: 0 + - _DecalRotationSpeed: 0 + - _DecalRotationSpeed1: 0 + - _DecalRotationSpeed2: 0 + - _DecalRotationSpeed3: 0 + - _DecalSymmetryMode: 0 + - _DecalSymmetryMode1: 0 + - _DecalSymmetryMode2: 0 + - _DecalSymmetryMode3: 0 + - _DecalTPSDepthMaskEnabled: 0 + - _DecalTexture1UV: 0 + - _DecalTexture2UV: 0 + - _DecalTexture3UV: 0 + - _DecalTextureUV: 0 + - _DecalTiled: 0 + - _DecalTiled1: 0 + - _DecalTiled2: 0 + - _DecalTiled3: 0 + - _DepthAlphaMaxDepth: 1 + - _DepthAlphaMaxValue: 0 + - _DepthAlphaMinDepth: 0 + - _DepthAlphaMinValue: 1 + - _DepthAlphaToggle: 0 + - _DepthBulgeFadeLength: 0.02 + - _DepthBulgeHeight: 0.02 + - _DepthBulgeMaskChannel: 0 + - _DepthBulgeMaskUV: 0 + - _DepthBulgeWarning: 0 + - _DepthColorBlendMode: 0 + - _DepthColorMaxDepth: 1 + - _DepthColorMaxValue: 0 + - _DepthColorMinDepth: 0 + - _DepthColorMinValue: 1 + - _DepthColorThemeIndex: 0 + - _DepthColorToggle: 0 + - _DepthEmissionStrength: 0 + - _DepthFXWarning: 0 + - _DepthMaskChannel: 0 + - _DepthMaskGlobalMask: 0 + - _DepthMaskGlobalMaskBlendType: 2 + - _DepthMaskUV: 0 + - _DepthRimAdd: 0 + - _DepthRimAdditiveLighting: 0 + - _DepthRimBrightness: 1 + - _DepthRimColorThemeIndex: 0 + - _DepthRimEmission: 0 + - _DepthRimHideInShadow: 0 + - _DepthRimMixBaseColor: 0 + - _DepthRimMixLightColor: 0 + - _DepthRimMultiply: 0 + - _DepthRimNormalToUse: 1 + - _DepthRimReplace: 0 + - _DepthRimSharpness: 0.2 + - _DepthRimType: 0 + - _DepthRimWidth: 0.2 + - _DepthTextureUV: 0 + - _DetailBrightness: 1 + - _DetailEnabled: 0 + - _DetailMaskStochastic: 0 + - _DetailMaskUV: 0 + - _DetailNormalGlobalMask: 0 + - _DetailNormalGlobalMaskBlendType: 2 - _DetailNormalMapScale: 1 + - _DetailNormalMapStochastic: 0 + - _DetailNormalMapUV: 0 + - _DetailTexGlobalMask: 0 + - _DetailTexGlobalMaskBlendType: 2 + - _DetailTexIntensity: 1 + - _DetailTexStochastic: 0 + - _DetailTexUV: 0 + - _DetailTintThemeIndex: 0 + - _DisableDirectionalInAdd: 1 + - _DissolveAlpha: 0 + - _DissolveAlpha0: 0 + - _DissolveAlpha1: 0 + - _DissolveAlpha2: 0 + - _DissolveAlpha3: 0 + - _DissolveAlpha4: 0 + - _DissolveAlpha5: 0 + - _DissolveAlpha6: 0 + - _DissolveAlpha7: 0 + - _DissolveAlpha8: 0 + - _DissolveAlpha9: 0 + - _DissolveApplyGlobalMaskBlendType: 0 + - _DissolveApplyGlobalMaskIndex: 0 + - _DissolveDetailEdgeSmoothing: 0 + - _DissolveDetailNoiseUV: 0 + - _DissolveDetailStrength: 0.1 + - _DissolveEdgeColorThemeIndex: 0 + - _DissolveEdgeEmission: 0 + - _DissolveEdgeHardness: 0.5 + - _DissolveEdgeHueSelectOrShift: 1 + - _DissolveEdgeHueShift: 0 + - _DissolveEdgeHueShiftColorSpace: 0 + - _DissolveEdgeHueShiftEnabled: 0 + - _DissolveEdgeHueShiftSpeed: 0 + - _DissolveEdgeWidth: 0.025 + - _DissolveHueSelectOrShift: 1 + - _DissolveHueShift: 0 + - _DissolveHueShiftColorSpace: 0 + - _DissolveHueShiftEnabled: 0 + - _DissolveHueShiftSpeed: 0 + - _DissolveInverseApplyGlobalMaskBlendType: 0 + - _DissolveInverseApplyGlobalMaskIndex: 0 + - _DissolveInvertDetailNoise: 0 + - _DissolveInvertNoise: 0 + - _DissolveMaskGlobalMask: 0 + - _DissolveMaskGlobalMaskBlendType: 2 + - _DissolveMaskInvert: 0 + - _DissolveMaskUV: 0 + - _DissolveNoiseTextureUV: 0 + - _DissolveP2PClamp: 0 + - _DissolveP2PEdgeLength: 0.1 + - _DissolveP2PWorldLocal: 0 + - _DissolveTextureColorThemeIndex: 0 + - _DissolveToEmissionStrength: 0 + - _DissolveToTextureUV: 0 + - _DissolveType: 1 + - _DissolveUseVertexColors: 0 + - _DistortionFlowTexture1UV: 0 + - _DistortionFlowTextureUV: 0 + - _DistortionMaskChannel: 0 + - _DistortionMaskUV: 0 + - _DistortionStrength: 0.03 + - _DistortionStrength1: 0.01 + - _DistortionStrength1AudioLinkBand: 0 + - _DistortionStrengthAudioLinkBand: 0 + - _DistortionUvToDistort: 0 - _DstBlend: 0 + - _DstBlendAlpha: 10 - _Emission: 0 + - _EmissionAL0Enabled: 0 + - _EmissionAL0MultipliersBand: 0 + - _EmissionAL0StrengthBand: 0 + - _EmissionAL1Enabled: 0 + - _EmissionAL1MultipliersBand: 0 + - _EmissionAL1StrengthBand: 0 + - _EmissionAL2Enabled: 0 + - _EmissionAL2MultipliersBand: 0 + - _EmissionAL2StrengthBand: 0 + - _EmissionAL3Enabled: 0 + - _EmissionAL3MultipliersBand: 0 + - _EmissionAL3StrengthBand: 0 + - _EmissionBaseColorAsMap: 0 + - _EmissionBaseColorAsMap1: 0 + - _EmissionBaseColorAsMap2: 0 + - _EmissionBaseColorAsMap3: 0 + - _EmissionBlinkingEnabled: 0 + - _EmissionBlinkingEnabled1: 0 + - _EmissionBlinkingEnabled2: 0 + - _EmissionBlinkingEnabled3: 0 + - _EmissionBlinkingOffset: 0 + - _EmissionBlinkingOffset1: 0 + - _EmissionBlinkingOffset2: 0 + - _EmissionBlinkingOffset3: 0 + - _EmissionCenterOutEnabled: 0 + - _EmissionCenterOutEnabled1: 0 + - _EmissionCenterOutEnabled2: 0 + - _EmissionCenterOutEnabled3: 0 + - _EmissionCenterOutSpeed: 5 + - _EmissionCenterOutSpeed1: 5 + - _EmissionCenterOutSpeed2: 5 + - _EmissionCenterOutSpeed3: 5 + - _EmissionColor1ThemeIndex: 0 + - _EmissionColor2ThemeIndex: 0 + - _EmissionColor3ThemeIndex: 0 + - _EmissionColorThemeIndex: 0 + - _EmissionFluorescence: 0 + - _EmissionFluorescence1: 0 + - _EmissionFluorescence2: 0 + - _EmissionFluorescence3: 0 + - _EmissionHueSelectOrShift: 1 + - _EmissionHueSelectOrShift1: 1 + - _EmissionHueSelectOrShift2: 1 + - _EmissionHueSelectOrShift3: 1 + - _EmissionHueShift: 0 + - _EmissionHueShift1: 0 + - _EmissionHueShift2: 0 + - _EmissionHueShift3: 0 + - _EmissionHueShiftColorSpace: 0 + - _EmissionHueShiftColorSpace1: 0 + - _EmissionHueShiftColorSpace2: 0 + - _EmissionHueShiftColorSpace3: 0 + - _EmissionHueShiftEnabled: 0 + - _EmissionHueShiftEnabled1: 0 + - _EmissionHueShiftEnabled2: 0 + - _EmissionHueShiftEnabled3: 0 + - _EmissionHueShiftSpeed: 0 + - _EmissionHueShiftSpeed1: 0 + - _EmissionHueShiftSpeed2: 0 + - _EmissionHueShiftSpeed3: 0 + - _EmissionMap1UV: 0 + - _EmissionMap2UV: 0 + - _EmissionMap3UV: 0 + - _EmissionMapUV: 0 + - _EmissionMask0GlobalMask: 0 + - _EmissionMask0GlobalMaskBlendType: 2 + - _EmissionMask1Channel: 0 + - _EmissionMask1GlobalMask: 0 + - _EmissionMask1GlobalMaskBlendType: 2 + - _EmissionMask1UV: 0 + - _EmissionMask2Channel: 0 + - _EmissionMask2GlobalMask: 0 + - _EmissionMask2GlobalMaskBlendType: 2 + - _EmissionMask2UV: 0 + - _EmissionMask3Channel: 0 + - _EmissionMask3GlobalMask: 0 + - _EmissionMask3GlobalMaskBlendType: 2 + - _EmissionMask3UV: 0 + - _EmissionMaskChannel: 0 + - _EmissionMaskInvert: 0 + - _EmissionMaskInvert1: 0 + - _EmissionMaskInvert2: 0 + - _EmissionMaskInvert3: 0 + - _EmissionMaskUV: 0 + - _EmissionReplace0: 0 + - _EmissionReplace1: 0 + - _EmissionReplace2: 0 + - _EmissionReplace3: 0 + - _EmissionSaturation: 0 + - _EmissionSaturation1: 0 + - _EmissionSaturation2: 0 + - _EmissionSaturation3: 0 + - _EmissionScrollingOffset: 0 + - _EmissionScrollingOffset1: 0 + - _EmissionScrollingOffset2: 0 + - _EmissionScrollingOffset3: 0 + - _EmissionScrollingUseCurve: 0 + - _EmissionScrollingUseCurve1: 0 + - _EmissionScrollingUseCurve2: 0 + - _EmissionScrollingUseCurve3: 0 + - _EmissionScrollingVertexColor: 0 + - _EmissionScrollingVertexColor1: 0 + - _EmissionScrollingVertexColor2: 0 + - _EmissionScrollingVertexColor3: 0 + - _EmissionStrength: 1 + - _EmissionStrength1: 0 + - _EmissionStrength2: 0 + - _EmissionStrength3: 0 + - _EmissiveBlink_Max: 1 + - _EmissiveBlink_Max1: 1 + - _EmissiveBlink_Max2: 1 + - _EmissiveBlink_Max3: 1 + - _EmissiveBlink_Min: 0 + - _EmissiveBlink_Min1: 0 + - _EmissiveBlink_Min2: 0 + - _EmissiveBlink_Min3: 0 + - _EmissiveBlink_Velocity: 4 + - _EmissiveBlink_Velocity1: 4 + - _EmissiveBlink_Velocity2: 4 + - _EmissiveBlink_Velocity3: 4 + - _EmissiveScroll_Interval: 20 + - _EmissiveScroll_Interval1: 20 + - _EmissiveScroll_Interval2: 20 + - _EmissiveScroll_Interval3: 20 + - _EmissiveScroll_Velocity: 10 + - _EmissiveScroll_Velocity1: 10 + - _EmissiveScroll_Velocity2: 10 + - _EmissiveScroll_Velocity3: 10 + - _EmissiveScroll_Width: 10 + - _EmissiveScroll_Width1: 10 + - _EmissiveScroll_Width2: 10 + - _EmissiveScroll_Width3: 10 + - _EnableALDecal: 0 + - _EnableAniso: 0 + - _EnableAudioLink: 0 + - _EnableDepthBulge: 0 + - _EnableDepthRimLighting: 0 + - _EnableDissolve: 0 + - _EnableDissolveAudioLink: 0 + - _EnableDistortion: 0 + - _EnableDistortionAudioLink: 0 + - _EnableEmission: 1 + - _EnableEmission1: 0 + - _EnableEmission2: 0 + - _EnableEmission3: 0 + - _EnableEnvironmentalRim: 0 + - _EnableFlipbook: 0 + - _EnableGITDEmission: 0 + - _EnableGITDEmission1: 0 + - _EnableGITDEmission2: 0 + - _EnableGITDEmission3: 0 + - _EnableMirrorOptions: 0 + - _EnableOutlines: 0 + - _EnablePathRemapping: 0 + - _EnablePathing: 0 + - _EnableRim2Lighting: 0 + - _EnableRimLighting: 0 + - _EnableTouchGlow: 0 + - _EnableTruchet: 0 + - _EnableUDIMDiscardOptions: 0 + - _EnableUDIMFaceDiscardOptions: 0 + - _EnableVolumeColor: 0 + - _EntranceStiffness: 0.01 + - _EntryOpenDuration: 0.1 - _ExposureOcclusion: 0.2 + - _FFBFOutlineStencilHelp0: 0 + - _FFBFOutlineStencilHelp1: 0 + - _FFBFStencilHelp0: 0 + - _FFBFStencilHelp1: 0 + - _FXProximityColor: 0 + - _FXProximityColorBackFace: 0 + - _FXProximityColorMaxColorThemeIndex: 0 + - _FXProximityColorMaxDistance: 1 + - _FXProximityColorMinColorThemeIndex: 0 + - _FXProximityColorMinDistance: 0 + - _FXProximityColorType: 1 + - _FlipBackfaceNormals: 1 + - _FlipbookAlphaControlsFinalAlpha: 0 + - _FlipbookBlendType: 0 + - _FlipbookChronoType: 0 + - _FlipbookChronotensityBand: 0 + - _FlipbookChronotensityEnabled: 0 + - _FlipbookChronotensitySpeed: 0 + - _FlipbookColorReplaces: 0 + - _FlipbookColorThemeIndex: 0 + - _FlipbookCrossfadeEnabled: 0 + - _FlipbookCurrentFrame: 0 + - _FlipbookEmissionStrength: 0 + - _FlipbookEndFrame: 0 + - _FlipbookFPS: 30 + - _FlipbookFrameOffset: 0 + - _FlipbookHueSelectOrShift: 1 + - _FlipbookHueShift: 0 + - _FlipbookHueShiftColorSpace: 0 + - _FlipbookHueShiftEnabled: 0 + - _FlipbookHueShiftSpeed: 0 + - _FlipbookIntensityControlsAlpha: 0 + - _FlipbookManualFrameControl: 0 + - _FlipbookMaskChannel: 0 + - _FlipbookMaskGlobalMask: 0 + - _FlipbookMaskGlobalMaskBlendType: 2 + - _FlipbookMaskUV: 0 + - _FlipbookReplace: 1 + - _FlipbookRotation: 0 + - _FlipbookRotationSpeed: 0 + - _FlipbookStartAndEnd: 0 + - _FlipbookStartFrame: 0 + - _FlipbookTexArrayUV: 0 + - _FlipbookTiled: 0 + - _FogHeightOffset: 0 + - _FogHeightScale: 1 + - _FogScale: 1 + - _FogStartOffset: 0 + - _ForceFlatRampedLightmap: 1 + - _ForgotToLockMaterial: 1 + - _GGXAnisotropics: 0 + - _GITDEMaxEmissionMultiplier: 0 + - _GITDEMaxEmissionMultiplier1: 0 + - _GITDEMaxEmissionMultiplier2: 0 + - _GITDEMaxEmissionMultiplier3: 0 + - _GITDEMaxLight: 1 + - _GITDEMaxLight1: 1 + - _GITDEMaxLight2: 1 + - _GITDEMaxLight3: 1 + - _GITDEMinEmissionMultiplier: 1 + - _GITDEMinEmissionMultiplier1: 1 + - _GITDEMinEmissionMultiplier2: 1 + - _GITDEMinEmissionMultiplier3: 1 + - _GITDEMinLight: 0 + - _GITDEMinLight1: 0 + - _GITDEMinLight2: 0 + - _GITDEMinLight3: 0 + - _GITDEWorldOrMesh: 0 + - _GITDEWorldOrMesh1: 0 + - _GITDEWorldOrMesh2: 0 + - _GITDEWorldOrMesh3: 0 + - _GSAAStrength: 0 + - _GlitterALAlphaAddBand: 0 + - _GlitterALChronoRotationSpeed: 0 + - _GlitterALChronoRotationSpeedBand: 0 + - _GlitterALChronoRotationSpeedType: 0 + - _GlitterALChronoSparkleSpeed: 0 + - _GlitterALChronoSparkleSpeedBand: 0 + - _GlitterALChronoSparkleSpeedType: 0 + - _GlitterALEnabled: 0 + - _GlitterALMaxBrightnessBand: 0 + - _GlitterALSizeAddBand: 0 + - _GlitterAngleRange: 90 + - _GlitterBias: 0.8 + - _GlitterBlendType: 0 + - _GlitterBrightness: 3 + - _GlitterCenterSize: 0.08 + - _GlitterColorMapUV: 0 + - _GlitterColorThemeIndex: 0 + - _GlitterContrast: 300 + - _GlitterEnable: 0 + - _GlitterFrequency: 300 + - _GlitterHideInShadow: 0 + - _GlitterHueSelectOrShift: 1 + - _GlitterHueShift: 0 + - _GlitterHueShiftColorSpace: 0 + - _GlitterHueShiftEnabled: 0 + - _GlitterHueShiftSpeed: 0 + - _GlitterJaggyFix: 0 + - _GlitterLayers: 2 + - _GlitterMaskChannel: 0 + - _GlitterMaskGlobalMask: 0 + - _GlitterMaskGlobalMaskBlendType: 2 + - _GlitterMaskInvert: 0 + - _GlitterMaskUV: 0 + - _GlitterMinBrightness: 0 + - _GlitterMode: 0 + - _GlitterRandomColors: 0 + - _GlitterRandomLocation: 1 + - _GlitterRandomRotation: 0 + - _GlitterRandomSize: 0 + - _GlitterScaleWithLighting: 0 + - _GlitterShape: 0 + - _GlitterSize: 0.3 + - _GlitterSpeed: 10 + - _GlitterTextureRotation: 0 + - _GlitterUV: 0 + - _GlitterUseNormals: 0 + - _GlitterUseSurfaceColor: 0 + - _GlobalMaskBackface_0: 0 + - _GlobalMaskBackface_1: 0 + - _GlobalMaskBackface_10: 0 + - _GlobalMaskBackface_11: 0 + - _GlobalMaskBackface_12: 0 + - _GlobalMaskBackface_13: 0 + - _GlobalMaskBackface_14: 0 + - _GlobalMaskBackface_15: 0 + - _GlobalMaskBackface_2: 0 + - _GlobalMaskBackface_3: 0 + - _GlobalMaskBackface_4: 0 + - _GlobalMaskBackface_5: 0 + - _GlobalMaskBackface_6: 0 + - _GlobalMaskBackface_7: 0 + - _GlobalMaskBackface_8: 0 + - _GlobalMaskBackface_9: 0 + - _GlobalMaskCamera_0: 0 + - _GlobalMaskCamera_1: 0 + - _GlobalMaskCamera_10: 0 + - _GlobalMaskCamera_11: 0 + - _GlobalMaskCamera_12: 0 + - _GlobalMaskCamera_13: 0 + - _GlobalMaskCamera_14: 0 + - _GlobalMaskCamera_15: 0 + - _GlobalMaskCamera_2: 0 + - _GlobalMaskCamera_3: 0 + - _GlobalMaskCamera_4: 0 + - _GlobalMaskCamera_5: 0 + - _GlobalMaskCamera_6: 0 + - _GlobalMaskCamera_7: 0 + - _GlobalMaskCamera_8: 0 + - _GlobalMaskCamera_9: 0 + - _GlobalMaskDistanceBlendType_0: 0 + - _GlobalMaskDistanceBlendType_1: 0 + - _GlobalMaskDistanceBlendType_10: 0 + - _GlobalMaskDistanceBlendType_11: 0 + - _GlobalMaskDistanceBlendType_12: 0 + - _GlobalMaskDistanceBlendType_13: 0 + - _GlobalMaskDistanceBlendType_14: 0 + - _GlobalMaskDistanceBlendType_15: 0 + - _GlobalMaskDistanceBlendType_2: 0 + - _GlobalMaskDistanceBlendType_3: 0 + - _GlobalMaskDistanceBlendType_4: 0 + - _GlobalMaskDistanceBlendType_5: 0 + - _GlobalMaskDistanceBlendType_6: 0 + - _GlobalMaskDistanceBlendType_7: 0 + - _GlobalMaskDistanceBlendType_8: 0 + - _GlobalMaskDistanceBlendType_9: 0 + - _GlobalMaskDistanceEnable_0: 0 + - _GlobalMaskDistanceEnable_1: 0 + - _GlobalMaskDistanceEnable_10: 0 + - _GlobalMaskDistanceEnable_11: 0 + - _GlobalMaskDistanceEnable_12: 0 + - _GlobalMaskDistanceEnable_13: 0 + - _GlobalMaskDistanceEnable_14: 0 + - _GlobalMaskDistanceEnable_15: 0 + - _GlobalMaskDistanceEnable_2: 0 + - _GlobalMaskDistanceEnable_3: 0 + - _GlobalMaskDistanceEnable_4: 0 + - _GlobalMaskDistanceEnable_5: 0 + - _GlobalMaskDistanceEnable_6: 0 + - _GlobalMaskDistanceEnable_7: 0 + - _GlobalMaskDistanceEnable_8: 0 + - _GlobalMaskDistanceEnable_9: 0 + - _GlobalMaskDistanceMaxAlpha_0: 1 + - _GlobalMaskDistanceMaxAlpha_1: 1 + - _GlobalMaskDistanceMaxAlpha_10: 1 + - _GlobalMaskDistanceMaxAlpha_11: 1 + - _GlobalMaskDistanceMaxAlpha_12: 1 + - _GlobalMaskDistanceMaxAlpha_13: 1 + - _GlobalMaskDistanceMaxAlpha_14: 1 + - _GlobalMaskDistanceMaxAlpha_15: 1 + - _GlobalMaskDistanceMaxAlpha_2: 1 + - _GlobalMaskDistanceMaxAlpha_3: 1 + - _GlobalMaskDistanceMaxAlpha_4: 1 + - _GlobalMaskDistanceMaxAlpha_5: 1 + - _GlobalMaskDistanceMaxAlpha_6: 1 + - _GlobalMaskDistanceMaxAlpha_7: 1 + - _GlobalMaskDistanceMaxAlpha_8: 1 + - _GlobalMaskDistanceMaxAlpha_9: 1 + - _GlobalMaskDistanceMax_0: 2 + - _GlobalMaskDistanceMax_1: 2 + - _GlobalMaskDistanceMax_10: 2 + - _GlobalMaskDistanceMax_11: 2 + - _GlobalMaskDistanceMax_12: 2 + - _GlobalMaskDistanceMax_13: 2 + - _GlobalMaskDistanceMax_14: 2 + - _GlobalMaskDistanceMax_15: 2 + - _GlobalMaskDistanceMax_2: 2 + - _GlobalMaskDistanceMax_3: 2 + - _GlobalMaskDistanceMax_4: 2 + - _GlobalMaskDistanceMax_5: 2 + - _GlobalMaskDistanceMax_6: 2 + - _GlobalMaskDistanceMax_7: 2 + - _GlobalMaskDistanceMax_8: 2 + - _GlobalMaskDistanceMax_9: 2 + - _GlobalMaskDistanceMinAlpha_0: 0 + - _GlobalMaskDistanceMinAlpha_1: 0 + - _GlobalMaskDistanceMinAlpha_10: 0 + - _GlobalMaskDistanceMinAlpha_11: 0 + - _GlobalMaskDistanceMinAlpha_12: 0 + - _GlobalMaskDistanceMinAlpha_13: 0 + - _GlobalMaskDistanceMinAlpha_14: 0 + - _GlobalMaskDistanceMinAlpha_15: 0 + - _GlobalMaskDistanceMinAlpha_2: 0 + - _GlobalMaskDistanceMinAlpha_3: 0 + - _GlobalMaskDistanceMinAlpha_4: 0 + - _GlobalMaskDistanceMinAlpha_5: 0 + - _GlobalMaskDistanceMinAlpha_6: 0 + - _GlobalMaskDistanceMinAlpha_7: 0 + - _GlobalMaskDistanceMinAlpha_8: 0 + - _GlobalMaskDistanceMinAlpha_9: 0 + - _GlobalMaskDistanceMin_0: 1 + - _GlobalMaskDistanceMin_1: 1 + - _GlobalMaskDistanceMin_10: 1 + - _GlobalMaskDistanceMin_11: 1 + - _GlobalMaskDistanceMin_12: 1 + - _GlobalMaskDistanceMin_13: 1 + - _GlobalMaskDistanceMin_14: 1 + - _GlobalMaskDistanceMin_15: 1 + - _GlobalMaskDistanceMin_2: 1 + - _GlobalMaskDistanceMin_3: 1 + - _GlobalMaskDistanceMin_4: 1 + - _GlobalMaskDistanceMin_5: 1 + - _GlobalMaskDistanceMin_6: 1 + - _GlobalMaskDistanceMin_7: 1 + - _GlobalMaskDistanceMin_8: 1 + - _GlobalMaskDistanceMin_9: 1 + - _GlobalMaskDistanceType_0: 1 + - _GlobalMaskDistanceType_1: 1 + - _GlobalMaskDistanceType_10: 1 + - _GlobalMaskDistanceType_11: 1 + - _GlobalMaskDistanceType_12: 1 + - _GlobalMaskDistanceType_13: 1 + - _GlobalMaskDistanceType_14: 1 + - _GlobalMaskDistanceType_15: 1 + - _GlobalMaskDistanceType_2: 1 + - _GlobalMaskDistanceType_3: 1 + - _GlobalMaskDistanceType_4: 1 + - _GlobalMaskDistanceType_5: 1 + - _GlobalMaskDistanceType_6: 1 + - _GlobalMaskDistanceType_7: 1 + - _GlobalMaskDistanceType_8: 1 + - _GlobalMaskDistanceType_9: 1 + - _GlobalMaskMirrorVisibilityMode: 1 + - _GlobalMaskMirror_0: 0 + - _GlobalMaskMirror_1: 0 + - _GlobalMaskMirror_10: 0 + - _GlobalMaskMirror_11: 0 + - _GlobalMaskMirror_12: 0 + - _GlobalMaskMirror_13: 0 + - _GlobalMaskMirror_14: 0 + - _GlobalMaskMirror_15: 0 + - _GlobalMaskMirror_2: 0 + - _GlobalMaskMirror_3: 0 + - _GlobalMaskMirror_4: 0 + - _GlobalMaskMirror_5: 0 + - _GlobalMaskMirror_6: 0 + - _GlobalMaskMirror_7: 0 + - _GlobalMaskMirror_8: 0 + - _GlobalMaskMirror_9: 0 + - _GlobalMaskModifiersBackfaceEnable: 0 + - _GlobalMaskModifiersCameraEnable: 0 + - _GlobalMaskModifiersCameraInfo: 0 + - _GlobalMaskModifiersDistanceEnable: 0 + - _GlobalMaskModifiersMirrorEnable: 0 + - _GlobalMaskOptionsEnable: 0 + - _GlobalMaskOptionsType: 0 + - _GlobalMaskSlider_0: 0 + - _GlobalMaskSlider_1: 0 + - _GlobalMaskSlider_10: 0 + - _GlobalMaskSlider_11: 0 + - _GlobalMaskSlider_12: 0 + - _GlobalMaskSlider_13: 0 + - _GlobalMaskSlider_14: 0 + - _GlobalMaskSlider_15: 0 + - _GlobalMaskSlider_2: 0 + - _GlobalMaskSlider_3: 0 + - _GlobalMaskSlider_4: 0 + - _GlobalMaskSlider_5: 0 + - _GlobalMaskSlider_6: 0 + - _GlobalMaskSlider_7: 0 + - _GlobalMaskSlider_8: 0 + - _GlobalMaskSlider_9: 0 + - _GlobalMaskTexture0Split: 0 + - _GlobalMaskTexture0UV: 0 + - _GlobalMaskTexture1Split: 0 + - _GlobalMaskTexture1UV: 0 + - _GlobalMaskTexture2Split: 0 + - _GlobalMaskTexture2UV: 0 + - _GlobalMaskTexture3Split: 0 + - _GlobalMaskTexture3UV: 0 + - _GlobalMaskTexturesEnable: 0 + - _GlobalMaskToggleOff_0: 0 + - _GlobalMaskToggleOff_1: 0 + - _GlobalMaskToggleOff_10: 0 + - _GlobalMaskToggleOff_11: 0 + - _GlobalMaskToggleOff_12: 0 + - _GlobalMaskToggleOff_13: 0 + - _GlobalMaskToggleOff_14: 0 + - _GlobalMaskToggleOff_15: 0 + - _GlobalMaskToggleOff_2: 0 + - _GlobalMaskToggleOff_3: 0 + - _GlobalMaskToggleOff_4: 0 + - _GlobalMaskToggleOff_5: 0 + - _GlobalMaskToggleOff_6: 0 + - _GlobalMaskToggleOff_7: 0 + - _GlobalMaskToggleOff_8: 0 + - _GlobalMaskToggleOff_9: 0 + - _GlobalMaskToggleOn_0: 0 + - _GlobalMaskToggleOn_1: 0 + - _GlobalMaskToggleOn_10: 0 + - _GlobalMaskToggleOn_11: 0 + - _GlobalMaskToggleOn_12: 0 + - _GlobalMaskToggleOn_13: 0 + - _GlobalMaskToggleOn_14: 0 + - _GlobalMaskToggleOn_15: 0 + - _GlobalMaskToggleOn_2: 0 + - _GlobalMaskToggleOn_3: 0 + - _GlobalMaskToggleOn_4: 0 + - _GlobalMaskToggleOn_5: 0 + - _GlobalMaskToggleOn_6: 0 + - _GlobalMaskToggleOn_7: 0 + - _GlobalMaskToggleOn_8: 0 + - _GlobalMaskToggleOn_9: 0 + - _GlobalMaskVertexColorAlpha: 0 + - _GlobalMaskVertexColorAlphaBlendType: 2 + - _GlobalMaskVertexColorBlue: 0 + - _GlobalMaskVertexColorBlueBlendType: 2 + - _GlobalMaskVertexColorGreen: 0 + - _GlobalMaskVertexColorGreenBlendType: 2 + - _GlobalMaskVertexColorLinearSpace: 1 + - _GlobalMaskVertexColorRed: 0 + - _GlobalMaskVertexColorRedBlendType: 2 + - _GlobalThemeHue0: 0 + - _GlobalThemeHue1: 0 + - _GlobalThemeHue2: 0 + - _GlobalThemeHue3: 0 + - _GlobalThemeHueSpeed0: 0 + - _GlobalThemeHueSpeed1: 0 + - _GlobalThemeHueSpeed2: 0 + - _GlobalThemeHueSpeed3: 0 + - _GlobalThemeSaturation0: 0 + - _GlobalThemeSaturation1: 0 + - _GlobalThemeSaturation2: 0 + - _GlobalThemeSaturation3: 0 + - _GlobalThemeValue0: 0 + - _GlobalThemeValue1: 0 + - _GlobalThemeValue2: 0 + - _GlobalThemeValue3: 0 - _GlossMapScale: 0.7 - _Glossiness: 0.5 - _GlossyReflections: 1 + - _GreenAlphaAdd: 0 + - _GreenColorThemeIndex: 0 + - _GreenTextureStochastic: 0 + - _GreenTextureUV: 0 + - _HeightMapUV: 0 + - _HeightOffset: 0 + - _HeightStepsMax: 128 + - _HeightStepsMin: 10 + - _HeightStrength: 0.005 + - _HeightmaskChannel: 0 + - _HeightmaskInvert: 0 + - _HeightmaskUV: 0 + - _HighColorThemeIndex: 0 + - _HighColor_Power: 0.2 + - _HighColor_TexUV: 0 + - _IgnoreCastedShadows: 0 + - _IgnoreFog: 0 + - _Is_BlendAddToHiColor: 0 + - _Is_LightColor_Ap_Rim2Light: 1 + - _Is_LightColor_Ap_RimLight: 1 + - _Is_LightColor_Rim2Light: 1 + - _Is_LightColor_RimLight: 1 + - _Is_NormalMapToRim2Light: 1 + - _Is_NormalMapToRimLight: 1 + - _Is_SpecularToHighColor: 0 - _LTCGI: 0 + - _LTCGIEnabled: 0 + - _LTCGI_AnimToggle: 1 + - _LTCGI_Attribution: 0 + - _LTCGI_DiffuseColorThemeIndex: 0 + - _LTCGI_Metallic: 0 + - _LTCGI_Smoothness: 0 + - _LTCGI_SpecularColorThemeIndex: 0 + - _LTCGI_UseEO: 0 + - _LTCGI_UsePBR: 1 + - _Layer1Strength: 1 + - _Layer2Size: 0 + - _Layer2Strength: 0 + - _Length: 0 + - _LightDataAOGlobalMaskBlendTypeR: 2 + - _LightDataAOGlobalMaskR: 0 + - _LightDataAOStrengthA: 0 + - _LightDataAOStrengthB: 0 + - _LightDataAOStrengthG: 0 + - _LightDataAOStrengthR: 1 + - _LightDataDebugEnabled: 0 + - _LightDataDetailShadowGlobalMaskBlendTypeR: 2 + - _LightDataDetailShadowGlobalMaskR: 0 + - _LightDataSDFBlendY: 1 + - _LightDataSDFMapLOD: 0 + - _LightDataSDFMapUV: 0 + - _LightDataShadowMaskGlobalMaskBlendTypeR: 2 + - _LightDataShadowMaskGlobalMaskR: 0 + - _LightDirection_MaskOn: 0 + - _LightDirection_MaskOn2: 0 + - _LightingAOMapsUV: 0 + - _LightingAddDetailShadowStrengthA: 0 + - _LightingAddDetailShadowStrengthB: 0 + - _LightingAddDetailShadowStrengthG: 0 + - _LightingAddDetailShadowStrengthR: 1 + - _LightingAdditiveCastedShadows: 1 + - _LightingAdditiveEnable: 1 + - _LightingAdditiveGradientEnd: 0.5 + - _LightingAdditiveGradientStart: 0 + - _LightingAdditiveLimit: 1 + - _LightingAdditiveLimited: 1 + - _LightingAdditiveMonochromatic: 0 + - _LightingAdditivePassthrough: 0.5 + - _LightingAdditiveType: 3 + - _LightingCap: 1 + - _LightingCapEnabled: 1 + - _LightingCastedShadows: 0 + - _LightingColorMode: 0 + - _LightingDebugVisualize: 0 + - _LightingDetailShadowMapsUV: 0 + - _LightingDetailShadowStrengthA: 0 + - _LightingDetailShadowStrengthB: 0 + - _LightingDetailShadowStrengthG: 0 + - _LightingDetailShadowStrengthR: 1 + - _LightingDirectionMode: 0 + - _LightingEnableLightVolumes: 1 + - _LightingForceColorEnabled: 0 + - _LightingForcedColorThemeIndex: 0 + - _LightingGradientEnd: 0.5 + - _LightingGradientStart: 0 + - _LightingIgnoreAmbientColor: 1 + - _LightingIndirectUsesNormals: 0 + - _LightingMapMode: 0 + - _LightingMinLightBrightness: 0 + - _LightingMirrorVertexLightingEnabled: 1 + - _LightingMode: 6 + - _LightingMonochromatic: 0 + - _LightingMulitlayerNonLinear: 1 + - _LightingShadowMaskStrengthA: 0 + - _LightingShadowMaskStrengthB: 0 + - _LightingShadowMaskStrengthG: 0 + - _LightingShadowMaskStrengthR: 1 + - _LightingShadowMasksUV: 0 + - _LightingVertexLightingEnabled: 1 + - _LightingViewDirOffsetPitch: 0 + - _LightingViewDirOffsetYaw: 0 + - _LightingWrappedNormalization: 0 + - _LightingWrappedWrap: 0 - _LightmapSpecular: 1 - _LightmapSpecularMaxSmoothness: 0.9 + - _LineColorThemeIndex: 0 + - _LineWidth: 1 + - _LookAtAlphaAlpha: 1 + - _LookAtAlphaMaskEnabled: 0 + - _LookAtAlphaTargetUp: 0 + - _LookAtBlueAlpha: 1 + - _LookAtBlueMaskEnabled: 0 + - _LookAtBlueTargetUp: 0 + - _LookAtGreenAlpha: 1 + - _LookAtGreenMaskEnabled: 0 + - _LookAtGreenTargetUp: 0 + - _LookAtMaskUV: 0 + - _LookAtRedAlpha: 1 + - _LookAtRedMaskEnabled: 1 + - _LookAtRedTargetUp: 0 + - _LookAtVisibilityEnabled: 0 + - _LookAtVisibilityMirror: 0 + - _LookAtVisibilityMode: 1 + - _LookAtVisibilityVRCCameraDesktop: 1 + - _LookAtVisibilityVRCCameraScreenshot: 1 + - _LookAtVisibilityVRCCameraVR: 1 + - _LookAtVisibilityVRCMirrorDesktop: 1 + - _LookAtVisibilityVRCMirrorVR: 1 + - _LookAtVisibilityVRCRegular: 1 + - _MainALHueShiftBand: 0 + - _MainALHueShiftCTIndex: 0 + - _MainAlphaMaskMode: 2 + - _MainBrightness: 0 + - _MainBrightnessGlobalMask: 0 + - _MainBrightnessGlobalMaskBlendType: 2 + - _MainColorAdjustTextureUV: 0 + - _MainColorAdjustToggle: 0 + - _MainGamma: 1 + - _MainGammaGlobalMask: 0 + - _MainGammaGlobalMaskBlendType: 2 + - _MainGradationStrength: 0 + - _MainHueALCTEnabled: 0 + - _MainHueALMotionSpeed: 1 + - _MainHueGlobalMask: 0 + - _MainHueGlobalMaskBlendType: 2 + - _MainHueShift: 0 + - _MainHueShiftColorSpace: 0 + - _MainHueShiftReplace: 1 + - _MainHueShiftSelectOrShift: 1 + - _MainHueShiftSpeed: 0 + - _MainHueShiftToggle: 0 + - _MainIgnoreTexAlpha: 0 + - _MainPixelMode: 0 + - _MainSaturationGlobalMask: 0 + - _MainSaturationGlobalMaskBlendType: 2 + - _MainTexStochastic: 0 + - _MainTexUV: 0 + - _MainUseVertexColorAlpha: 0 + - _MainVertexColoring: 0 + - _MainVertexColoringEnabled: 0 + - _MainVertexColoringLinearSpace: 1 + - _Matcap0ALAlphaAddBand: 0 + - _Matcap0ALChronoPanBand: 0 + - _Matcap0ALChronoPanSpeed: 0 + - _Matcap0ALChronoPanType: 0 + - _Matcap0ALEmissionAddBand: 0 + - _Matcap0ALEnabled: 0 + - _Matcap0ALIntensityAddBand: 0 + - _Matcap0CircleMaskBlur: 0.1 + - _Matcap0CircleMaskBorder: 0.45 + - _Matcap0CircleMaskEnabled: 0 + - _Matcap0CustomNormal: 0 + - _Matcap0NormalMapScale: 1 + - _Matcap0NormalMapUV: 0 + - _Matcap1ALAlphaAddBand: 0 + - _Matcap1ALChronoPanBand: 0 + - _Matcap1ALChronoPanSpeed: 0 + - _Matcap1ALChronoPanType: 0 + - _Matcap1ALEmissionAddBand: 0 + - _Matcap1ALEnabled: 0 + - _Matcap1ALIntensityAddBand: 0 + - _Matcap1CustomNormal: 0 + - _Matcap1NormalMapScale: 1 + - _Matcap1NormalMapUV: 0 + - _Matcap2ALAlphaAddBand: 0 + - _Matcap2ALChronoPanBand: 0 + - _Matcap2ALChronoPanSpeed: 0 + - _Matcap2ALChronoPanType: 0 + - _Matcap2ALEmissionAddBand: 0 + - _Matcap2ALEnabled: 0 + - _Matcap2ALIntensityAddBand: 0 + - _Matcap2Add: 0 + - _Matcap2AddToLight: 0 + - _Matcap2AlphaOverride: 0 + - _Matcap2ApplyToAlphaBlendType: 0 + - _Matcap2ApplyToAlphaBlending: 1 + - _Matcap2ApplyToAlphaEnabled: 0 + - _Matcap2ApplyToAlphaSourceBlend: 0 + - _Matcap2BaseColorMix: 0 + - _Matcap2Border: 0.5 + - _Matcap2CircleMaskBlur: 0.1 + - _Matcap2CircleMaskBorder: 0.45 + - _Matcap2CircleMaskEnabled: 0 + - _Matcap2ColorThemeIndex: 0 + - _Matcap2CustomNormal: 0 + - _Matcap2EmissionStrength: 0 + - _Matcap2Enable: 0 + - _Matcap2HueSelectOrShift: 1 + - _Matcap2HueShift: 0 + - _Matcap2HueShiftColorSpace: 0 + - _Matcap2HueShiftEnabled: 0 + - _Matcap2HueShiftSpeed: 0 + - _Matcap2Intensity: 1 + - _Matcap2LightColorMix: 0 + - _Matcap2LightMask: 0 + - _Matcap2MaskChannel: 0 + - _Matcap2MaskGlobalMask: 0 + - _Matcap2MaskGlobalMaskBlendType: 2 + - _Matcap2MaskInvert: 0 + - _Matcap2MaskSmoothnessApply: 0 + - _Matcap2MaskSmoothnessChannel: 3 + - _Matcap2MaskUV: 0 + - _Matcap2Mixed: 0 + - _Matcap2Multiply: 0 + - _Matcap2Normal: 1 + - _Matcap2NormalMapScale: 1 + - _Matcap2NormalMapUV: 0 + - _Matcap2Replace: 0 + - _Matcap2Rotation: 0 + - _Matcap2Screen: 0 + - _Matcap2Smoothness: 1 + - _Matcap2TPSDepthEnabled: 0 + - _Matcap2TPSMaskStrength: 1 + - _Matcap2UVMode: 1 + - _Matcap2UVToBlend: 1 + - _Matcap3ALAlphaAddBand: 0 + - _Matcap3ALChronoPanBand: 0 + - _Matcap3ALChronoPanSpeed: 0 + - _Matcap3ALChronoPanType: 0 + - _Matcap3ALEmissionAddBand: 0 + - _Matcap3ALEnabled: 0 + - _Matcap3ALIntensityAddBand: 0 + - _Matcap3Add: 0 + - _Matcap3AddToLight: 0 + - _Matcap3AlphaOverride: 0 + - _Matcap3ApplyToAlphaBlendType: 0 + - _Matcap3ApplyToAlphaBlending: 1 + - _Matcap3ApplyToAlphaEnabled: 0 + - _Matcap3ApplyToAlphaSourceBlend: 0 + - _Matcap3BaseColorMix: 0 + - _Matcap3Border: 0.5 + - _Matcap3CircleMaskBlur: 0.1 + - _Matcap3CircleMaskBorder: 0.45 + - _Matcap3CircleMaskEnabled: 0 + - _Matcap3ColorThemeIndex: 0 + - _Matcap3CustomNormal: 0 + - _Matcap3EmissionStrength: 0 + - _Matcap3Enable: 0 + - _Matcap3HueSelectOrShift: 1 + - _Matcap3HueShift: 0 + - _Matcap3HueShiftColorSpace: 0 + - _Matcap3HueShiftEnabled: 0 + - _Matcap3HueShiftSpeed: 0 + - _Matcap3Intensity: 1 + - _Matcap3LightColorMix: 0 + - _Matcap3LightMask: 0 + - _Matcap3MaskChannel: 0 + - _Matcap3MaskGlobalMask: 0 + - _Matcap3MaskGlobalMaskBlendType: 2 + - _Matcap3MaskInvert: 0 + - _Matcap3MaskSmoothnessApply: 0 + - _Matcap3MaskSmoothnessChannel: 3 + - _Matcap3MaskUV: 0 + - _Matcap3Mixed: 0 + - _Matcap3Multiply: 0 + - _Matcap3Normal: 1 + - _Matcap3NormalMapScale: 1 + - _Matcap3NormalMapUV: 0 + - _Matcap3Replace: 0 + - _Matcap3Rotation: 0 + - _Matcap3Screen: 0 + - _Matcap3Smoothness: 1 + - _Matcap3TPSDepthEnabled: 0 + - _Matcap3TPSMaskStrength: 1 + - _Matcap3UVMode: 1 + - _Matcap3UVToBlend: 1 + - _Matcap4Add: 0 + - _Matcap4AddToLight: 0 + - _Matcap4AlphaOverride: 0 + - _Matcap4ApplyToAlphaBlendType: 0 + - _Matcap4ApplyToAlphaBlending: 1 + - _Matcap4ApplyToAlphaEnabled: 0 + - _Matcap4ApplyToAlphaSourceBlend: 0 + - _Matcap4BaseColorMix: 0 + - _Matcap4Border: 0.5 + - _Matcap4CircleMaskBlur: 0.1 + - _Matcap4CircleMaskBorder: 0.45 + - _Matcap4CircleMaskEnabled: 0 + - _Matcap4ColorThemeIndex: 0 + - _Matcap4EmissionStrength: 0 + - _Matcap4Enable: 0 + - _Matcap4HueSelectOrShift: 1 + - _Matcap4HueShift: 0 + - _Matcap4HueShiftColorSpace: 0 + - _Matcap4HueShiftEnabled: 0 + - _Matcap4HueShiftSpeed: 0 + - _Matcap4Intensity: 1 + - _Matcap4LightColorMix: 0 + - _Matcap4LightMask: 0 + - _Matcap4MaskChannel: 0 + - _Matcap4MaskGlobalMask: 0 + - _Matcap4MaskGlobalMaskBlendType: 2 + - _Matcap4MaskInvert: 0 + - _Matcap4MaskSmoothnessApply: 0 + - _Matcap4MaskSmoothnessChannel: 3 + - _Matcap4MaskUV: 0 + - _Matcap4Mixed: 0 + - _Matcap4Multiply: 0 + - _Matcap4Normal: 1 + - _Matcap4Replace: 0 + - _Matcap4Rotation: 0 + - _Matcap4Screen: 0 + - _Matcap4Smoothness: 1 + - _Matcap4TPSDepthEnabled: 0 + - _Matcap4TPSMaskStrength: 1 + - _Matcap4UVMode: 1 + - _Matcap4UVToBlend: 1 + - _MatcapAdd: 0 + - _MatcapAddToLight: 0 + - _MatcapAlphaOverride: 0 + - _MatcapApplyToAlphaBlendType: 0 + - _MatcapApplyToAlphaBlending: 1 + - _MatcapApplyToAlphaEnabled: 0 + - _MatcapApplyToAlphaSourceBlend: 0 + - _MatcapBaseColorMix: 0 + - _MatcapBorder: 0.5 + - _MatcapColorThemeIndex: 0 + - _MatcapEmissionStrength: 0 + - _MatcapEnable: 0 + - _MatcapHueSelectOrShift: 1 + - _MatcapHueShift: 0 + - _MatcapHueShiftColorSpace: 0 + - _MatcapHueShiftEnabled: 0 + - _MatcapHueShiftSpeed: 0 + - _MatcapIntensity: 1 + - _MatcapLightColorMix: 0 + - _MatcapLightMask: 0 + - _MatcapMaskChannel: 0 + - _MatcapMaskGlobalMask: 0 + - _MatcapMaskGlobalMaskBlendType: 2 + - _MatcapMaskInvert: 0 + - _MatcapMaskSmoothnessApply: 0 + - _MatcapMaskSmoothnessChannel: 3 + - _MatcapMaskUV: 0 + - _MatcapMixed: 0 + - _MatcapMultiply: 0 + - _MatcapNormal: 1 + - _MatcapReplace: 1 + - _MatcapRotation: 0 + - _MatcapScreen: 0 + - _MatcapSmoothness: 1 + - _MatcapTPSDepthEnabled: 0 + - _MatcapTPSMaskStrength: 1 + - _MatcapUVMode: 1 + - _MatcapUVToBlend: 1 - _Metallic: 0 - _MetallicScale: 0 + - _Mirror: 0 + - _MirrorColorThemeIndex: 0 + - _MirrorTextureBlendType: 0 + - _MirrorTextureEnabled: 0 + - _MirrorTextureForceEnabled: 0 + - _MirrorTextureUV: 0 + - _MochieBRDF: 1 + - _MochieForceFallback: 0 + - _MochieGSAAEnabled: 1 + - _MochieLitFallback: 1 + - _MochieMetallicGlobalMask: 0 + - _MochieMetallicGlobalMaskBlendType: 2 + - _MochieMetallicMapInvert: 0 + - _MochieMetallicMapsMetallicChannel: 0 + - _MochieMetallicMapsReflectionMaskChannel: 2 + - _MochieMetallicMapsRoughnessChannel: 1 + - _MochieMetallicMapsSpecularMaskChannel: 3 + - _MochieMetallicMapsStochastic: 0 + - _MochieMetallicMapsUV: 0 + - _MochieMetallicMasksUV: 0 + - _MochieMetallicMultiplier: 0 + - _MochieReflectionMaskInvert: 0 + - _MochieReflectionStrength: 1 + - _MochieReflectionStrengthGlobalMask: 0 + - _MochieReflectionStrengthGlobalMaskBlendType: 2 + - _MochieReflectionTintThemeIndex: 0 + - _MochieRoughnessMapInvert: 0 + - _MochieRoughnessMultiplier: 0.201 + - _MochieRoughnessMultiplier2: 1 + - _MochieSmoothnessGlobalMask: 0 + - _MochieSmoothnessGlobalMaskBlendType: 2 + - _MochieSpecularMaskInvert: 0 + - _MochieSpecularStrength: 1 + - _MochieSpecularStrength2: 1 + - _MochieSpecularStrengthGlobalMask: 0 + - _MochieSpecularStrengthGlobalMaskBlendType: 2 + - _MochieSpecularTintThemeIndex: 0 - _Mode: 0 + - _ModelAngleMax: 90 + - _ModelAngleMin: 45 + - _MultilayerMathBlurMapUV: 0 + - _NormalCorrect: 0 + - _NormalCorrectAmount: 0.9 - _NormalMapShadows: 0 - _OcclusionScale: 0 - _OcclusionStrength: 1 + - _OffsetFactor: 0 + - _OffsetUnits: 0 + - _Offset_Z: 0 + - _OrifaceEnabled: 0 + - _OrificeChannel: 0 + - _OutlineALColorEnabled: 0 + - _OutlineAlphaDistanceFade: 0 + - _OutlineAlphaDistanceFadeMax: 0 + - _OutlineAlphaDistanceFadeMaxAlpha: 1 + - _OutlineAlphaDistanceFadeMin: 0 + - _OutlineAlphaDistanceFadeMinAlpha: 0 + - _OutlineAlphaDistanceFadeType: 1 + - _OutlineBlendOp: 0 + - _OutlineBlendOpAlpha: 4 + - _OutlineClipAtZeroWidth: 1 + - _OutlineCull: 1 + - _OutlineDstBlend: 0 + - _OutlineDstBlendAlpha: 0 + - _OutlineEmission: 0 + - _OutlineExpansionMode: 1 + - _OutlineFixWidth: 0.5 + - _OutlineFixedSize: 1 + - _OutlineGamma: 1 + - _OutlineHue: 0 + - _OutlineHueOffsetSpeed: 0 + - _OutlineHueShift: 0 + - _OutlineLit: 1 + - _OutlineMaskChannel: 0 + - _OutlineMaskUV: 0 + - _OutlineOverrideAlpha: 0 + - _OutlineRimLightBlend: 0 + - _OutlineSaturation: 1 + - _OutlineShadowStrength: 0 + - _OutlineSpace: 0 + - _OutlineSrcBlend: 1 + - _OutlineSrcBlendAlpha: 1 + - _OutlineStencilBackCompareFunction: 8 + - _OutlineStencilBackFailOp: 0 + - _OutlineStencilBackPassOp: 0 + - _OutlineStencilBackZFailOp: 0 + - _OutlineStencilCompareFunction: 8 + - _OutlineStencilFailOp: 0 + - _OutlineStencilFrontCompareFunction: 8 + - _OutlineStencilFrontFailOp: 0 + - _OutlineStencilFrontPassOp: 0 + - _OutlineStencilFrontZFailOp: 0 + - _OutlineStencilPassOp: 0 + - _OutlineStencilReadMask: 255 + - _OutlineStencilRef: 0 + - _OutlineStencilType: 0 + - _OutlineStencilWriteMask: 255 + - _OutlineStencilZFailOp: 0 + - _OutlineTextureUV: 0 + - _OutlineTintMix: 0 + - _OutlineUseVertexColorNormals: 0 + - _OutlineValue: 1 + - _OutlineVertexColorMask: 0 + - _OutlineVertexColorMaskStrength: 1 + - _OutlineZOffsetChannel: 0 + - _OutlineZOffsetInvertMaskChannel: 0 + - _OutlineZOffsetMaskStrength: 1 + - _OutlineZOffsetVertexColor: 0 + - _OutlineZOffsetVertexColorStrength: 1 + - _OutlineZTest: 4 + - _OutlineZWrite: 1 + - _OutlinesMaxDistance: 1 + - _PBRNormalSelect: 1 + - _PBRSplitMaskSample: 0 + - _PBRSplitMaskStochastic: 0 + - _PPBrightness: 1 + - _PPContrast: 1 + - _PPEmissionMultiplier: 1 + - _PPFinalColorMultiplier: 1 + - _PPHDR: 0 + - _PPHelp: 0 + - _PPHue: 0 + - _PPHueShiftColorSpace: 0 + - _PPLightingAddition: 0 + - _PPLightingMultiplier: 1 + - _PPLightness: 0 + - _PPMaskChannel: 0 + - _PPMaskInvert: 0 + - _PPMaskUV: 0 + - _PPPosterization: 0 + - _PPPosterizationAmount: 4 + - _PPSaturation: 1 + - _PanoUseBothEyes: 1 - _Parallax: 0.25 + - _ParallaxAnisotropic: 1 + - _ParallaxAnisotropyScale: 1 + - _ParallaxBinarySteps: 8 + - _ParallaxConeRatio: 1 + - _ParallaxInternalBlendMode: 0 + - _ParallaxInternalHeightFromAlpha: 0 + - _ParallaxInternalHeightmapMode: 0 + - _ParallaxInternalHueSelectOrShift: 1 + - _ParallaxInternalHueShift: 0 + - _ParallaxInternalHueShiftColorSpace: 0 + - _ParallaxInternalHueShiftEnabled: 0 + - _ParallaxInternalHueShiftPerLevel: 0 + - _ParallaxInternalHueShiftSpeed: 0 + - _ParallaxInternalIterations: 4 + - _ParallaxInternalMapMaskChannel: 0 + - _ParallaxInternalMapMaskUV: 0 + - _ParallaxInternalMaxColorThemeIndex: 0 + - _ParallaxInternalMaxDepth: 0.1 + - _ParallaxInternalMaxFade: 0.1 + - _ParallaxInternalMinColorThemeIndex: 0 + - _ParallaxInternalMinDepth: 0 + - _ParallaxInternalMinFade: 1 + - _ParallaxInternalSurfaceBlendMode: 8 + - _ParallaxMipBias: 0 + - _ParallaxRelaxedCone: 1 + - _ParallaxUV: 0 + - _PathALAutoCorrelator: 0 + - _PathALAutoCorrelatorA: 0 + - _PathALAutoCorrelatorB: 0 + - _PathALAutoCorrelatorG: 0 + - _PathALAutoCorrelatorMode: 0 + - _PathALAutoCorrelatorR: 0 + - _PathALCCA: 0 + - _PathALCCB: 0 + - _PathALCCG: 0 + - _PathALCCR: 0 + - _PathALChrono: 0 + - _PathALColorChord: 0 + - _PathALEmissionOffset: 0 + - _PathALHistory: 0 + - _PathALHistoryA: 0 + - _PathALHistoryB: 0 + - _PathALHistoryBandA: 0 + - _PathALHistoryBandB: 0 + - _PathALHistoryBandG: 0 + - _PathALHistoryBandR: 0 + - _PathALHistoryG: 0 + - _PathALHistoryMode: 0 + - _PathALHistoryR: 0 + - _PathALTimeOffset: 0 + - _PathALWidthOffset: 0 + - _PathChronoBandA: 0 + - _PathChronoBandB: 0 + - _PathChronoBandG: 0 + - _PathChronoBandR: 0 + - _PathChronoSpeedA: 0 + - _PathChronoSpeedB: 0 + - _PathChronoSpeedG: 0 + - _PathChronoSpeedR: 0 + - _PathChronoTypeA: 0 + - _PathChronoTypeB: 0 + - _PathChronoTypeG: 0 + - _PathChronoTypeR: 0 + - _PathColorAThemeIndex: 0 + - _PathColorBThemeIndex: 0 + - _PathColorGThemeIndex: 0 + - _PathColorRThemeIndex: 0 + - _PathGradientType: 0 + - _PathPointSampling: 1 + - _PathSource: 0 + - _PathSourceDirA: 0 + - _PathSourceDirB: 0 + - _PathSourceDirG: 0 + - _PathSourceDirR: 0 + - _PathSurfaceBlendMode: 0 + - _PathTypeA: 2 + - _PathTypeB: 2 + - _PathTypeG: 2 + - _PathTypeR: 2 + - _PathingColorMapUV: 0 + - _PathingMapUV: 0 + - _PathingOverrideAlpha: 0 + - _PathingUVSelect: 0 + - _PenetratorEnabled: 0 + - _PoiGSAAThreshold: 0.1 + - _PoiGSAAVariance: 0.15 + - _PoiInternalParallax: 0 + - _PoiParallax: 0 + - _PoiUTSStyleOutlineBlend: 0 + - _PolarLengthScale: 1 + - _PolarRadialScale: 1 + - _PolarSpiralPower: 0 + - _PolarUV: 0 + - _PostProcess: 0 + - _RGBAAlphaBlendType: 0 + - _RGBAAlphaEmissionStrength: 0 + - _RGBAAlphaEnable: 0 + - _RGBAAlphaMetallicInvert: 0 + - _RGBAAlphaPBRSplitMaskSample: 0 + - _RGBAAlphaPBRSplitMaskStochastic: 0 + - _RGBAAlphaPBRUV: 0 + - _RGBAAlphaSmoothnessInvert: 0 + - _RGBABlueBlendType: 0 + - _RGBABlueEmissionStrength: 0 + - _RGBABlueEnable: 0 + - _RGBABlueMetallicInvert: 0 + - _RGBABluePBRSplitMaskSample: 0 + - _RGBABluePBRSplitMaskStochastic: 0 + - _RGBABluePBRUV: 0 + - _RGBABlueSmoothnessInvert: 0 + - _RGBAGreenBlendType: 0 + - _RGBAGreenEmissionStrength: 0 + - _RGBAGreenEnable: 0 + - _RGBAGreenMetallicInvert: 0 + - _RGBAGreenPBRSplitMaskSample: 0 + - _RGBAGreenPBRSplitMaskStochastic: 0 + - _RGBAGreenPBRUV: 0 + - _RGBAGreenSmoothnessInvert: 0 + - _RGBAMetallicMapsStochastic: 0 + - _RGBAMetallicMapsUV: 0 + - _RGBAPBRAlphaEnabled: 0 + - _RGBAPBRBlueEnabled: 0 + - _RGBAPBRGreenEnabled: 0 + - _RGBAPBRRedEnabled: 0 + - _RGBARedBlendType: 0 + - _RGBARedEmissionStrength: 0 + - _RGBARedEnable: 0 + - _RGBARedMetallicInvert: 0 + - _RGBARedPBRSplitMaskSample: 0 + - _RGBARedPBRSplitMaskStochastic: 0 + - _RGBARedPBRUV: 0 + - _RGBARedSmoothnessInvert: 0 + - _RGBASmoothnessMapsStochastic: 0 + - _RGBASmoothnessMapsUV: 0 + - _RGBMaskEnabled: 0 + - _RGBMaskType: 0 + - _RGBMaskUV: 0 + - _RalivAdvancedHelp: 0 + - _RalivDPSDisableShadowCaster: 1 + - _RalivDPSDisableShadowCasterHelp: 0 + - _RalivHelp: 0 + - _ReCurvature: 0 + - _RedAlphaAdd: 0 + - _RedColorThemeIndex: 0 + - _RedTextureStochastic: 0 + - _RedTextureUV: 0 + - _RefSpecFresnelStrength: 0.5 + - _Reflectance: 0.04 + - _ReflectionAnisotropicStretch: 1 + - _ReflectionApplyTransparency: 1 + - _ReflectionBlendMode: 1 + - _ReflectionCubeEnableLighting: 1 + - _ReflectionCubeOverride: 0 + - _ReflectionNormalStrength: 1 + - _RenderingAOBlockerEnabled: 0 + - _RenderingAOBlockerFlipNormal: 0 + - _RenderingAOBlockerNote: 0 + - _RenderingAOBlockerUVChannel: 0 + - _RenderingEarlyZEnabled: 0 + - _RenderingReduceClipDistance: 0 + - _RgbAlphaGlobalMaskBlendType: 2 + - _RgbAlphaGlobalMaskChannel: 0 + - _RgbAlphaMaskChannel: 3 + - _RgbBlueGlobalMaskBlendType: 2 + - _RgbBlueGlobalMaskChannel: 0 + - _RgbBlueMaskChannel: 2 + - _RgbGreenGlobalMaskBlendType: 2 + - _RgbGreenGlobalMaskChannel: 0 + - _RgbGreenMaskChannel: 1 + - _RgbNormalAGlobalMaskBlendType: 2 + - _RgbNormalAGlobalMaskChannel: 0 + - _RgbNormalAMaskChannel: 3 + - _RgbNormalAScale: 0 + - _RgbNormalAStochastic: 0 + - _RgbNormalAUV: 0 + - _RgbNormalAlphaBlendMode: 0 + - _RgbNormalBGlobalMaskBlendType: 2 + - _RgbNormalBGlobalMaskChannel: 0 + - _RgbNormalBMaskChannel: 2 + - _RgbNormalBScale: 0 + - _RgbNormalBStochastic: 0 + - _RgbNormalBUV: 0 + - _RgbNormalBlueBlendMode: 0 + - _RgbNormalGGlobalMaskBlendType: 2 + - _RgbNormalGGlobalMaskChannel: 0 + - _RgbNormalGMaskChannel: 1 + - _RgbNormalGScale: 0 + - _RgbNormalGStochastic: 0 + - _RgbNormalGUV: 0 + - _RgbNormalGreenBlendMode: 0 + - _RgbNormalRGlobalMaskBlendType: 2 + - _RgbNormalRGlobalMaskChannel: 0 + - _RgbNormalRMaskChannel: 0 + - _RgbNormalRScale: 0 + - _RgbNormalRStochastic: 0 + - _RgbNormalRUV: 0 + - _RgbNormalRedBlendMode: 0 + - _RgbRedGlobalMaskBlendType: 2 + - _RgbRedGlobalMaskChannel: 0 + - _RgbRedMaskChannel: 0 + - _Rim2ApColorThemeIndex: 0 + - _Rim2ApplyAlpha: 0 + - _Rim2ApplyAlphaBlend: 1 + - _Rim2ApplyGlobalMaskBlendType: 2 + - _Rim2ApplyGlobalMaskIndex: 0 + - _Rim2BackfaceMask: 1 + - _Rim2BaseColorMix: 0 + - _Rim2BiasIntensity: 0 + - _Rim2BlendMode: 1 + - _Rim2BlendStrength: 1 + - _Rim2Blur: 0.65 + - _Rim2Border: 0.5 + - _Rim2Brightness: 1 + - _Rim2ColorTexUV: 0 + - _Rim2DirRange: 0 + - _Rim2DirStrength: 0 + - _Rim2EnableLighting: 1 + - _Rim2FresnelPower: 3.5 + - _Rim2GlobalMask: 0 + - _Rim2GlobalMaskBlendType: 2 + - _Rim2HueSelectOrShift: 1 + - _Rim2HueShift: 0 + - _Rim2HueShiftColorSpace: 0 + - _Rim2HueShiftEnabled: 0 + - _Rim2HueShiftSpeed: 0 + - _Rim2IndirBlur: 0.1 + - _Rim2IndirBorder: 0.5 + - _Rim2IndirRange: 0 + - _Rim2LightColorThemeIndex: 0 + - _Rim2Light_FeatherOff: 0 + - _Rim2Light_InsideMask: 0.0001 + - _Rim2Light_Power: 0.1 + - _Rim2LightingInvert: 0 + - _Rim2MainStrength: 0 + - _Rim2MaskChannel: 0 + - _Rim2MaskInvert: 0 + - _Rim2MaskOnlyMask: 0 + - _Rim2MaskUV: 0 + - _Rim2NormalStrength: 1 + - _Rim2Power: 1 + - _Rim2ShadowMask: 0.5 + - _Rim2ShadowMaskInvert: 0 + - _Rim2ShadowMaskRampType: 0 + - _Rim2ShadowMaskStrength: 1 + - _Rim2ShadowToggle: 0 + - _Rim2ShadowWidth: 0 + - _Rim2Sharpness: 0.25 + - _Rim2Strength: 0 + - _Rim2Style: 0 + - _Rim2TexUV: 0 + - _Rim2VRParallaxStrength: 1 + - _Rim2Width: 0.8 + - _RimApColorThemeIndex: 0 + - _RimApplyAlpha: 0 + - _RimApplyAlphaBlend: 1 + - _RimApplyGlobalMaskBlendType: 2 + - _RimApplyGlobalMaskIndex: 0 + - _RimBackfaceMask: 1 + - _RimBaseColorMix: 0 + - _RimBiasIntensity: 0 + - _RimBlendMode: 1 + - _RimBlendStrength: 1 + - _RimBlur: 0.65 + - _RimBorder: 0.5 + - _RimBrightness: 1 + - _RimColorTexUV: 0 + - _RimDirRange: 0 + - _RimDirStrength: 0 + - _RimEnableLighting: 1 + - _RimEnviroBlur: 0.7 + - _RimEnviroChannel: 0 + - _RimEnviroIntensity: 1 + - _RimEnviroMaskUV: 0 + - _RimEnviroMinBrightness: 0 + - _RimEnviroSharpness: 0 + - _RimEnviroWidth: 0.45 + - _RimFresnelPower: 3.5 + - _RimGlobalMask: 0 + - _RimGlobalMaskBlendType: 2 + - _RimHueSelectOrShift: 1 + - _RimHueShift: 0 + - _RimHueShiftColorSpace: 0 + - _RimHueShiftEnabled: 0 + - _RimHueShiftSpeed: 0 + - _RimIndirBlur: 0.1 + - _RimIndirBorder: 0.5 + - _RimIndirRange: 0 + - _RimLightColorThemeIndex: 0 + - _RimLight_FeatherOff: 0 + - _RimLight_InsideMask: 0.0001 + - _RimLight_Power: 0.1 + - _RimLightingInvert: 0 + - _RimMainStrength: 0 + - _RimMaskChannel: 0 + - _RimMaskInvert: 0 + - _RimMaskOnlyMask: 0 + - _RimMaskUV: 0 + - _RimNormalStrength: 1 + - _RimPoi2BlendMode: 0 + - _RimPoiBlendMode: 0 + - _RimPower: 1 + - _RimShadowMask: 0.5 + - _RimShadowMaskInvert: 0 + - _RimShadowMaskRampType: 0 + - _RimShadowMaskStrength: 1 + - _RimShadowToggle: 0 + - _RimShadowWidth: 0 + - _RimSharpness: 0.25 + - _RimStrength: 0 + - _RimStyle: 0 + - _RimTexUV: 0 + - _RimVRParallaxStrength: 1 + - _RimWidth: 0.8 + - _RoughnessAnisotropy: 1 + - _SDFBlur: 0.1 + - _SDFShadingTextureUV: 0 + - _SFExposureOcclusion: 0 + - _SSAOAlphaFade: 1 + - _SSAOAnimationToggle: 1 + - _SSAOApplyGlobalMaskBlendType: 0 + - _SSAOApplyGlobalMaskIndex: 0 + - _SSAOAsRamp: 0 + - _SSAOBias: 0.003 + - _SSAOBlendType: 2 + - _SSAOCenterImportance: 1 + - _SSAOColorMapUV: 0 + - _SSAOColorThemeIndex: 0 + - _SSAOCone: 0 + - _SSAODepthGetWarning: 0 + - _SSAOEnableColorTexture: 0 + - _SSAOEnableMaskTexture: 0 + - _SSAOEnabled: 0 + - _SSAOFalloffEnd: 8 + - _SSAOFalloffStart: 6 + - _SSAOGlobalMaskBlendType: 2 + - _SSAOGlobalMaskIndex: 0 + - _SSAOHideByRampedLightMap: 0 + - _SSAOIntensity: 1 + - _SSAOMaskChannel: 0 + - _SSAOMaskInvert: 0 + - _SSAOMaskUV: 0 + - _SSAOQuality: 2.4 + - _SSAORadius: 0.002 + - _SSAORandomScale: 0 + - _SSAOUseNormals: 0 + - _SSAOUseSurfaceColor: 0 + - _SSIgnoreCastedShadows: 0 + - _SSSBaseColorMix: 0 + - _SSSDistortion: 1 + - _SSSSpread: 5 + - _SSSStrength: 0.25 + - _SSSThicknessMapChannel: 0 + - _SSSThicknessMapUV: 0 + - _SSSThicknessMod: -1 + - _Saturation: 0 + - _ScrollingEmission: 0 + - _ScrollingEmission1: 0 + - _ScrollingEmission2: 0 + - _ScrollingEmission3: 0 + - _Set_HighColorMaskChannel: 1 + - _Set_HighColorMaskUV: 0 + - _Set_Rim2LightMaskChannel: 1 + - _Set_Rim2LightMaskUV: 0 + - _Set_RimLightMaskChannel: 1 + - _Set_RimLightMaskUV: 0 + - _ShadeColor_Step: 0 + - _ShaderOptimizerEnabled: 1 - _ShaderType_Cloth: 1 + - _ShaderUIWarning0: -0 + - _ShaderUIWarning1: -0 + - _ShadingEnabled: 1 + - _ShadingRampedLightMapApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapApplyGlobalMaskIndex: 0 + - _ShadingRampedLightMapInverseApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapInverseApplyGlobalMaskIndex: 0 + - _ShadingShadeMapBlendType: 0 + - _Shadow2ndBlur: 0.3 + - _Shadow2ndBorder: 0.5 + - _Shadow2ndColorTexUV: 0 + - _Shadow2ndReceive: 0 + - _Shadow3rdBlur: 0.1 + - _Shadow3rdBorder: 0.25 + - _Shadow3rdColorTexUV: 0 + - _Shadow3rdReceive: 0 + - _ShadowBlur: 0.1 + - _ShadowBorder: 0.5 + - _ShadowBorderMapToggle: 0 + - _ShadowBorderMaskLOD: 0 + - _ShadowBorderMaskUV: 0 + - _ShadowBorderRange: 0 + - _ShadowColorTexUV: 0 + - _ShadowEnvStrength: 0 + - _ShadowFlatBlur: 1 + - _ShadowFlatBorder: 1 + - _ShadowMainStrength: 0 + - _ShadowMaskType: 0 + - _ShadowOffset: 0 + - _ShadowPostAO: 0 + - _ShadowReceive: 0 + - _ShadowStrength: 1 + - _ShadowStrengthMaskUV: 0 + - _Shape1Depth: 0.1 + - _Shape1Duration: 0.1 + - _Shape2Depth: 0.2 + - _Shape2Duration: 0.1 + - _Shape3Depth: 0.3 + - _Shape3Duration: 0.1 + - _SkinThicknessMapInvert: 0 + - _SkinThicknessMapUV: 0 + - _SkinThicknessPower: 1 + - _Smoothness: 1 - _SmoothnessScale: 0 - _SmoothnessTextureChannel: 0 + - _Specular2ndLayer: 0 + - _SpecularBlur: 0 + - _SpecularBorder: 0.5 - _SpecularHighlights: 1 + - _SpecularNormalStrength: 1 + - _SpecularToon: 1 + - _SphericalDissolveClamp: 0 + - _SphericalDissolveInvert: 0 + - _SphericalDissolveRadius: 1.5 + - _Squeeze: 0 + - _SqueezeDist: 0 - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _SssBumpBlur: 0.7 + - _SssScale: 1 + - _StencilBackCompareFunction: 8 + - _StencilBackFailOp: 0 + - _StencilBackPassOp: 0 + - _StencilBackZFailOp: 0 + - _StencilCompareFunction: 8 + - _StencilFailOp: 0 + - _StencilFrontCompareFunction: 8 + - _StencilFrontFailOp: 0 + - _StencilFrontPassOp: 0 + - _StencilFrontZFailOp: 0 + - _StencilPassOp: 0 + - _StencilReadMask: 255 + - _StencilRef: 0 + - _StencilType: 0 + - _StencilWriteMask: 255 + - _StencilZFailOp: 0 + - _StereoEnabled: 0 + - _StochasticDeliotHeitzDensity: 1 + - _StochasticHexFallOffContrast: 0.6 + - _StochasticHexFallOffPower: 7 + - _StochasticHexGridDensity: 1 + - _StochasticHexRotationStrength: 0 + - _StochasticMode: 0 + - _StylizedReflectionMode: 0 + - _StylizedSpecular: 0 + - _StylizedSpecular2Feather: 0 + - _StylizedSpecularFeather: 0 + - _StylizedSpecularIgnoreNormal: 0 + - _StylizedSpecularIgnoreShadow: 0 + - _StylizedSpecularInvertMask: 0 + - _StylizedSpecularNormalStrength: 1 + - _StylizedSpecularStrength: 1 + - _SubsurfaceScattering: 0 + - _TPSHelpbox: 0 + - _TPSPenetratorEnabled: 0 + - _TPS_AnimatedToggle: 1 + - _TPS_BezierSmoothness: 0.4 + - _TPS_BezierStart: 0 + - _TPS_BufferedDepth: 0 + - _TPS_BufferedStrength: 0 + - _TPS_Buldge: 0.3 + - _TPS_BuldgeDistance: 0.2 + - _TPS_BuldgeFalloffDistance: 0.05 + - _TPS_Channel: 0 + - _TPS_ChannelWarning: 0 + - _TPS_IdleGravity: 0 + - _TPS_IdleSkrinkLength: 1 + - _TPS_IdleSkrinkWidth: 1 + - _TPS_IsSkinnedMeshRenderer: 0 + - _TPS_PenetratorLength: 1 + - _TPS_PumpingSpeed: 1 + - _TPS_PumpingStrength: 0 + - _TPS_PumpingWidth: 0.2 + - _TPS_SmoothStart: 1 + - _TPS_Squeeze: 0.3 + - _TPS_SqueezeDistance: 0.2 + - _TextEnabled: 0 + - _TextFPSColorThemeIndex: 0 + - _TextFPSEmissionStrength: 0 + - _TextFPSEnabled: 0 + - _TextFPSRotation: 0 + - _TextFPSUV: 0 + - _TextNumericColorThemeIndex: 0 + - _TextNumericDecimalDigits: 0 + - _TextNumericEmissionStrength: 0 + - _TextNumericEnabled: 0 + - _TextNumericRotation: 0 + - _TextNumericTrimZeroes: 0 + - _TextNumericUV: 0 + - _TextNumericValue: 0 + - _TextNumericWholeDigits: 4 + - _TextPixelRange: 4 + - _TextPositionColorThemeIndex: 0 + - _TextPositionEmissionStrength: 0 + - _TextPositionEnabled: 0 + - _TextPositionRotation: 0 + - _TextPositionUV: 0 + - _TextTimeColorThemeIndex: 0 + - _TextTimeEmissionStrength: 0 + - _TextTimeEnabled: 0 + - _TextTimeRotation: 0 + - _TextTimeUV: 0 + - _ToonRampCount: 1 + - _ToonRampUVSelector: 1 + - _TruchetALAlphaBand: 0 + - _TruchetALAlphaToggle: 0 + - _TruchetALEmissionBand: 0 + - _TruchetALEmissionToggle: 0 + - _TruchetAlpha: 1 + - _TruchetBlendType: 0 + - _TruchetChronoPanBand: 0 + - _TruchetChronoPanToggle: 0 + - _TruchetChronoPanType: 0 + - _TruchetColorThemeIndex: 0 + - _TruchetDensity: 10 + - _TruchetEdgeSharpness: 1 + - _TruchetEmissionStrength: 0 + - _TruchetHideWhenNoAL: 0 + - _TruchetMaskChannel: 0 + - _TruchetMaskGlobalMask: 0 + - _TruchetMaskGlobalMaskBlendType: 2 + - _TruchetMaskIntensity: 1 + - _TruchetMaskInvert: 0 + - _TruchetMaskUV: 0 + - _TruchetOverrideAlpha: 0 + - _TruchetThiccness: 0.1 + - _TruchetUV: 0 + - _Tweak_HighColorMaskLevel: 0 + - _Tweak_LightDirection_MaskLevel: 0 + - _Tweak_LightDirection_MaskLevel2: 0 + - _Tweak_Rim2LightMaskLevel: 0 + - _Tweak_RimLightMaskLevel: 0 + - _UDIMDiscardHelpbox: 0 + - _UDIMDiscardMode: 0 + - _UDIMDiscardRow0_0: 0 + - _UDIMDiscardRow0_1: 0 + - _UDIMDiscardRow0_2: 0 + - _UDIMDiscardRow0_3: 0 + - _UDIMDiscardRow1_0: 0 + - _UDIMDiscardRow1_1: 0 + - _UDIMDiscardRow1_2: 0 + - _UDIMDiscardRow1_3: 0 + - _UDIMDiscardRow2_0: 0 + - _UDIMDiscardRow2_1: 0 + - _UDIMDiscardRow2_2: 0 + - _UDIMDiscardRow2_3: 0 + - _UDIMDiscardRow3_0: 0 + - _UDIMDiscardRow3_1: 0 + - _UDIMDiscardRow3_2: 0 + - _UDIMDiscardRow3_3: 0 + - _UDIMDiscardUV: 0 + - _UDIMFaceDiscardFace: 0 + - _UDIMFaceDiscardRow0_0: 0 + - _UDIMFaceDiscardRow0_1: 0 + - _UDIMFaceDiscardRow0_2: 0 + - _UDIMFaceDiscardRow0_3: 0 + - _UDIMFaceDiscardRow1_0: 0 + - _UDIMFaceDiscardRow1_1: 0 + - _UDIMFaceDiscardRow1_2: 0 + - _UDIMFaceDiscardRow1_3: 0 + - _UDIMFaceDiscardRow2_0: 0 + - _UDIMFaceDiscardRow2_1: 0 + - _UDIMFaceDiscardRow2_2: 0 + - _UDIMFaceDiscardRow2_3: 0 + - _UDIMFaceDiscardRow3_0: 0 + - _UDIMFaceDiscardRow3_1: 0 + - _UDIMFaceDiscardRow3_2: 0 + - _UDIMFaceDiscardRow3_3: 0 + - _UDIMFaceDiscardUV: 0 + - _UVModLocalPos0: 0 + - _UVModLocalPos1: 1 + - _UVModWorldPos0: 0 + - _UVModWorldPos1: 2 - _UVSec: 0 + - _UVTileDissolveAlpha_Row0_0: 0 + - _UVTileDissolveAlpha_Row0_1: 0 + - _UVTileDissolveAlpha_Row0_2: 0 + - _UVTileDissolveAlpha_Row0_3: 0 + - _UVTileDissolveAlpha_Row1_0: 0 + - _UVTileDissolveAlpha_Row1_1: 0 + - _UVTileDissolveAlpha_Row1_2: 0 + - _UVTileDissolveAlpha_Row1_3: 0 + - _UVTileDissolveAlpha_Row2_0: 0 + - _UVTileDissolveAlpha_Row2_1: 0 + - _UVTileDissolveAlpha_Row2_2: 0 + - _UVTileDissolveAlpha_Row2_3: 0 + - _UVTileDissolveAlpha_Row3_0: 0 + - _UVTileDissolveAlpha_Row3_1: 0 + - _UVTileDissolveAlpha_Row3_2: 0 + - _UVTileDissolveAlpha_Row3_3: 0 + - _UVTileDissolveDiscardAtMax: 1 + - _UVTileDissolveEnabled: 0 + - _UVTileDissolveUV: 0 + - _Unlit_Intensity: 1 + - _UseLightColor: 1 + - _UseReflection: 0 + - _Use_1stAs2nd: 0 + - _Use_1stShadeMapAlpha_As_ShadowMask: 0 + - _Use_2ndShadeMapAlpha_As_ShadowMask: 0 + - _Use_BaseAs1st: 0 + - _UzumoreAmount: 0.1 + - _UzumoreBias: 0.001 + - _UzumoreCategoryToggle: 0 + - _UzumoreEnabled: 1 + - _UzumoreMaskUV: 3 - _VRCLV: 0 - _VRCLVSurfaceBias: 0.05 + - _VertexAudioLinkEnabled: 0 + - _VertexBarrelAlpha: 0 + - _VertexBarrelHeight: 0 + - _VertexBarrelMaskChannel: 0 + - _VertexBarrelMode: 0 + - _VertexBarrelWidth: 0.2 + - _VertexBasicsMaskChannel: 0 + - _VertexGlitchDensity: 10 + - _VertexGlitchFrequency: 1 + - _VertexGlitchMapPanSpeed: 10 + - _VertexGlitchMirror: 0 + - _VertexGlitchMirrorEnable: 0 + - _VertexGlitchStrength: 1 + - _VertexGlitchThreshold: 1 + - _VertexGlitchingAudioLinkBand: 0 + - _VertexGlitchingAudioLinkEnabled: 0 + - _VertexGlitchingAudiolinkOverride: 1 + - _VertexGlitchingEnabled: 0 + - _VertexGlitchingUseTexture: 0 + - _VertexLocalRotationALBandX: 0 + - _VertexLocalRotationALBandY: 0 + - _VertexLocalRotationALBandZ: 0 + - _VertexLocalRotationCTALBandX: 0 + - _VertexLocalRotationCTALBandY: 0 + - _VertexLocalRotationCTALBandZ: 0 + - _VertexLocalRotationCTALTypeX: 0 + - _VertexLocalRotationCTALTypeY: 0 + - _VertexLocalRotationCTALTypeZ: 0 + - _VertexLocalScaleALBand: 0 + - _VertexLocalTranslationALBand: 0 + - _VertexLookAtAudioLinkBand: 0 + - _VertexLookAtAudioLinkEnabled: 0 + - _VertexLookAtEnabled: 0 + - _VertexManipulationHeight: 0 + - _VertexManipulationHeightBand: 0 + - _VertexManipulationHeightBias: 0 + - _VertexManipulationHeightMapChannel: 0 + - _VertexManipulationHeightMaskChannel: 0 + - _VertexManipulationHeightMaskUV: 0 + - _VertexManipulationsEnabled: 0 + - _VertexRoundingDivision: 0.02 + - _VertexRoundingEnabled: 0 + - _VertexRoundingMaskChannel: 0 + - _VertexRoundingRangeBand: 0 + - _VertexRoundingSpace: 0 + - _VertexSpectrumMotion: 0 + - _VertexSpectrumUV: 0 + - _VertexSpectrumUVDirection: 0 + - _VertexSphereAlpha: 0 + - _VertexSphereHeight: 1 + - _VertexSphereMaskChannel: 0 + - _VertexSphereMode: 0 + - _VertexSphereRadius: 1 + - _VertexTornadoBaseHeight: 0 + - _VertexTornadoFunnelShape: 1 + - _VertexTornadoIntensity: 100 + - _VertexTornadoMaskChannel: 0 + - _VertexTornadoMode: 0 + - _VertexTornadoRadius: 1 + - _VertexTornadoSpeed: 5 + - _VertexTornadoTopHeight: 1 + - _VertexTornadoVerticalPull: 0 + - _VertexWindDetailAmplitude: 0.05 + - _VertexWindDetailFrequency: 5 + - _VertexWindDetailSpeed: 2.5 + - _VertexWindEnabled: 0 + - _VertexWindMaskChannel: 0 + - _VertexWindNoiseChannel: 0 + - _VertexWindNoiseScale: 10 + - _VertexWindNoiseSpeed: 0.5 + - _VertexWindNoiseStrength: 0.5 + - _VertexWindPrimaryAmplitude: 0.1 + - _VertexWindPrimaryFrequency: 1 + - _VertexWindPrimarySpeed: 1 + - _VertexWorldTranslationALBand: 0 + - _VideoBacklight: 1 + - _VideoCRTPixelEnergizedTime: 1.9 + - _VideoCRTRefreshRate: 24 + - _VideoContrast: 0 + - _VideoEffectsEnable: 0 + - _VideoEmissionEnabled: 1 + - _VideoMaskTextureChannel: 0 + - _VideoMaskTextureUV: 0 + - _VideoPixelTextureUV: 0 + - _VideoPixelateToResolution: 0 + - _VideoSaturation: 0 + - _VideoType: 3 + - _VisibilityMode: 1 + - _VisibilityVRCCameraDesktop: 1 + - _VisibilityVRCCameraScreenshot: 1 + - _VisibilityVRCCameraVR: 1 + - _VisibilityVRCMirrorDesktop: 1 + - _VisibilityVRCMirrorVR: 1 + - _VisibilityVRCRegular: 1 + - _VoronoiAffectsMaterialAlpha: 0 + - _VoronoiBlend: 0 + - _VoronoiEnableRandomCellColor: 0 + - _VoronoiEnabled: 0 + - _VoronoiGlobalMask: 0 + - _VoronoiGlobalMaskBlendType: 2 + - _VoronoiInnerEmissionStrength: 0 + - _VoronoiMaskChannel: 0 + - _VoronoiMaskUV: 0 + - _VoronoiNoiseChannel: 0 + - _VoronoiNoiseIntensity: 0.1 + - _VoronoiNoiseUV: 0 + - _VoronoiOuterEmissionStrength: 0 + - _VoronoiPower: 0.45454544 + - _VoronoiScale: 5 + - _VoronoiSpace: 0 + - _VoronoiType: 1 + - _Wriggle: 0 + - _WriggleSpeed: 0.28 + - _ZClip: 1 + - _ZTest: 4 - _ZWrite: 1 + - _ppHueSelectOrShift: 1 - _specularAntiAliasingThreshold: 0.25 - _specularAntiAliasingVariance: 0.15 + - footer_bluesky: 0 + - footer_discord: 0 + - footer_github: 0 + - footer_patreon: 0 + - footer_twitter: 0 + - footer_website: 0 + - footer_youtube: 0 + - g_end_tps_bezier: 0 + - g_end_tps_buldge: 0 + - g_end_tps_idle: 0 + - g_end_tps_pulsing: 0 + - g_end_tps_squeeze: 0 + - g_start_tps_bezier: 0 + - g_start_tps_buldge: 0 + - g_start_tps_idle: 0 + - g_start_tps_pulsing: 0 + - g_start_tps_squeeze: 0 + - m_AudioLinkCategory: 0 + - m_OutlineCategory: 0 + - m_end_ALDecalSpectrum: 0 + - m_end_ALVolumeColor: 0 + - m_end_Alpha: 0 + - m_end_Ansio: 0 + - m_end_BeatsaberBloomFog: 0 + - m_end_BeatsaberOptions: 0 + - m_end_BlackLightMasking: 0 + - m_end_BonusSliders: 0 + - m_end_CRT: 0 + - m_end_CenterOutDissolve: 0 + - m_end_ColorAdjust: 0 + - m_end_CubeMap: 0 + - m_end_Decal0: 0 + - m_end_Decal0AudioLink: 0 + - m_end_Decal1: 0 + - m_end_Decal1AudioLink: 0 + - m_end_Decal2: 0 + - m_end_Decal2AudioLink: 0 + - m_end_Decal3: 0 + - m_end_Decal3AudioLink: 0 + - m_end_DecalSection: 0 + - m_end_DepthBulge: 0 + - m_end_DetailOptions: 0 + - m_end_DistortionAudioLink: 0 + - m_end_FXProximityColor: 0 + - m_end_FlipbookAudioLink: 0 + - m_end_Gameboy: 0 + - m_end_GlobalMask: 0 + - m_end_GlobalMaskDistanceM_0: 0 + - m_end_GlobalMaskDistanceM_1: 0 + - m_end_GlobalMaskDistanceM_10: 0 + - m_end_GlobalMaskDistanceM_11: 0 + - m_end_GlobalMaskDistanceM_12: 0 + - m_end_GlobalMaskDistanceM_13: 0 + - m_end_GlobalMaskDistanceM_14: 0 + - m_end_GlobalMaskDistanceM_15: 0 + - m_end_GlobalMaskDistanceM_2: 0 + - m_end_GlobalMaskDistanceM_3: 0 + - m_end_GlobalMaskDistanceM_4: 0 + - m_end_GlobalMaskDistanceM_5: 0 + - m_end_GlobalMaskDistanceM_6: 0 + - m_end_GlobalMaskDistanceM_7: 0 + - m_end_GlobalMaskDistanceM_8: 0 + - m_end_GlobalMaskDistanceM_9: 0 + - m_end_GlobalMaskModifiers: 0 + - m_end_GlobalMaskModifiersBackface: 0 + - m_end_GlobalMaskModifiersCamera: 0 + - m_end_GlobalMaskModifiersDistance: 0 + - m_end_GlobalMaskModifiersMirror: 0 + - m_end_GlobalMaskOptions: 0 + - m_end_GlobalMaskTextures: 0 + - m_end_GlobalMaskVertexColors: 0 + - m_end_GlobalThemeColor0: 0 + - m_end_GlobalThemeColor1: 0 + - m_end_GlobalThemeColor2: 0 + - m_end_GlobalThemeColor3: 0 + - m_end_GlobalThemes: 0 + - m_end_LTCGI: 0 + - m_end_MainVertexColors: 0 + - m_end_Matcap2: 0 + - m_end_Matcap3: 0 + - m_end_Matcap4: 0 + - m_end_OutlineAudioLink: 0 + - m_end_OutlineStencil: 0 + - m_end_OutlineStencilPassBackOptions: 0 + - m_end_OutlineStencilPassFrontOptions: 0 + - m_end_PPAnimations: 0 + - m_end_PathAudioLink: 0 + - m_end_PoiGlobalCategory: 0 + - m_end_PoiLightData: 0 + - m_end_PoiPostProcessingCategory: 0 + - m_end_PoiShading: 0 + - m_end_PoiUVCategory: 0 + - m_end_RGBMask: 0 + - m_end_Rim2AudioLink: 0 + - m_end_RimAudioLink: 0 + - m_end_SphericalDissolve: 0 + - m_end_StencilPassBackOptions: 0 + - m_end_StencilPassFrontOptions: 0 + - m_end_StencilPassOptions: 0 + - m_end_Stochastic: 0 + - m_end_Text: 0 + - m_end_TextFPS: 0 + - m_end_TextInstanceTime: 0 + - m_end_TextNumeric: 0 + - m_end_TextPosition: 0 + - m_end_TruchetAudioLink: 0 + - m_end_UVTileDissolve: 0 + - m_end_Uzumore: 0 + - m_end_VideoSettings: 0 + - m_end_VoronoiAudioLink: 0 + - m_end_WorldAOBlocker: 0 + - m_end_alphaBlending: 0 + - m_end_audioLink: 0 + - m_end_audioLinkOverrides: 0 + - m_end_backFace: 0 + - m_end_backlight: 0 + - m_end_blending: 0 + - m_end_brdf: 0 + - m_end_clearCoat: 0 + - m_end_clearcoatadvanced: 0 + - m_end_clearcoatglobalmask: 0 + - m_end_depthFX: 0 + - m_end_depthRimLightOptions: 0 + - m_end_dissolve: 0 + - m_end_dissolveHueShift: 0 + - m_end_emission1Options: 0 + - m_end_emission2Options: 0 + - m_end_emission3Options: 0 + - m_end_emissionOptions: 0 + - m_end_flipBook: 0 + - m_end_glitter: 0 + - m_end_internalparallax: 0 + - m_end_matcap: 0 + - m_end_mirrorOptions: 0 + - m_end_normalCorrect: 0 + - m_end_outlineAlphaBlending: 0 + - m_end_outlineBlending: 0 + - m_end_parallax: 0 + - m_end_pathing: 0 + - m_end_pen_autoConfig: 0 + - m_end_poiSSAO: 0 + - m_end_pointToPoint: 0 + - m_end_postprocess: 0 + - m_end_raliv: 0 + - m_end_ralivAdvanced: 0 + - m_end_ralivOriface: 0 + - m_end_ralivPenetrator: 0 + - m_end_reflectionRim: 0 + - m_end_rim1LightOptions: 0 + - m_end_rim2LightOptions: 0 + - m_end_stylizedSpec: 0 + - m_end_subsurfaceScattering: 0 + - m_end_tps_penetrator: 0 + - m_end_truchet: 0 + - m_end_udimdiscardOptions: 0 + - m_end_udimfacediscardOptions: 0 + - m_end_uvDistortion: 0 + - m_end_uvLocalWorld: 0 + - m_end_uvPanosphere: 0 + - m_end_uvPolar: 0 + - m_end_vertexGlitching: 0 + - m_end_vertexLookAt: 0 + - m_end_vertexManipulation: 0 + - m_end_videoEffects: 0 + - m_end_voronoi: 0 + - m_end_voronoiRandom: 0 + - m_lightingCategory: 1 + - m_mainCategory: 1 + - m_modifierCategory: 0 + - m_renderingCategory: 0 + - m_specialFXCategory: 1 + - m_start_ALDecalSpectrum: 0 + - m_start_ALVolumeColor: 0 + - m_start_Alpha: 0 + - m_start_Aniso: 0 + - m_start_BeatsaberBloomFog: 0 + - m_start_BeatsaberOptions: 0 + - m_start_BlackLightMasking: 0 + - m_start_BonusSliders: 0 + - m_start_CRT: 0 + - m_start_CenterOutDissolve: 0 + - m_start_ColorAdjust: 0 + - m_start_CubeMap: 0 + - m_start_Decal0: 0 + - m_start_Decal0AudioLink: 0 + - m_start_Decal1: 0 + - m_start_Decal1AudioLink: 0 + - m_start_Decal2: 0 + - m_start_Decal2AudioLink: 0 + - m_start_Decal3: 0 + - m_start_Decal3AudioLink: 0 + - m_start_DecalSection: 0 + - m_start_DepthBulge: 0 + - m_start_DetailOptions: 0 + - m_start_DistortionAudioLink: 0 + - m_start_FXProximityColor: 0 + - m_start_FlipbookAudioLink: 0 + - m_start_Gameboy: 0 + - m_start_GlobalMask: 0 + - m_start_GlobalMaskDistanceM_0: 0 + - m_start_GlobalMaskDistanceM_1: 0 + - m_start_GlobalMaskDistanceM_10: 0 + - m_start_GlobalMaskDistanceM_11: 0 + - m_start_GlobalMaskDistanceM_12: 0 + - m_start_GlobalMaskDistanceM_13: 0 + - m_start_GlobalMaskDistanceM_14: 0 + - m_start_GlobalMaskDistanceM_15: 0 + - m_start_GlobalMaskDistanceM_2: 0 + - m_start_GlobalMaskDistanceM_3: 0 + - m_start_GlobalMaskDistanceM_4: 0 + - m_start_GlobalMaskDistanceM_5: 0 + - m_start_GlobalMaskDistanceM_6: 0 + - m_start_GlobalMaskDistanceM_7: 0 + - m_start_GlobalMaskDistanceM_8: 0 + - m_start_GlobalMaskDistanceM_9: 0 + - m_start_GlobalMaskModifiers: 0 + - m_start_GlobalMaskModifiersBackface: 0 + - m_start_GlobalMaskModifiersCamera: 0 + - m_start_GlobalMaskModifiersDistance: 0 + - m_start_GlobalMaskModifiersMirror: 0 + - m_start_GlobalMaskOptions: 0 + - m_start_GlobalMaskTextures: 0 + - m_start_GlobalMaskVertexColors: 0 + - m_start_GlobalThemeColor0: 0 + - m_start_GlobalThemeColor1: 0 + - m_start_GlobalThemeColor2: 0 + - m_start_GlobalThemeColor3: 0 + - m_start_GlobalThemes: 0 + - m_start_LTCGI: 0 + - m_start_MainVertexColors: 0 + - m_start_Matcap2: 0 + - m_start_Matcap3: 0 + - m_start_Matcap4: 0 + - m_start_OutlineAudioLink: 0 + - m_start_OutlineStencil: 0 + - m_start_OutlineStencilPassBackOptions: 0 + - m_start_OutlineStencilPassFrontOptions: 0 + - m_start_PPAnimations: 0 + - m_start_PathAudioLink: 0 + - m_start_PoiGlobalCategory: 0 + - m_start_PoiLightData: 0 + - m_start_PoiPostProcessingCategory: 0 + - m_start_PoiShading: 0 + - m_start_PoiUVCategory: 0 + - m_start_RGBMask: 0 + - m_start_Rim2AudioLink: 0 + - m_start_RimAudioLink: 0 + - m_start_SphericalDissolve: 0 + - m_start_StencilPassBackOptions: 0 + - m_start_StencilPassFrontOptions: 0 + - m_start_StencilPassOptions: 0 + - m_start_Stochastic: 0 + - m_start_Text: 0 + - m_start_TextFPS: 0 + - m_start_TextInstanceTime: 0 + - m_start_TextNumeric: 0 + - m_start_TextPosition: 0 + - m_start_TruchetAudioLink: 0 + - m_start_UVTileDissolve: 0 + - m_start_Uzumore: 0 + - m_start_VideoSettings: 0 + - m_start_VoronoiAudioLink: 0 + - m_start_WorldAOBlocker: 0 + - m_start_alphaBlending: 0 + - m_start_audioLink: 0 + - m_start_audioLinkOverrides: 0 + - m_start_backFace: 0 + - m_start_backlight: 0 + - m_start_blending: 0 + - m_start_brdf: 0 + - m_start_clearCoat: 0 + - m_start_clearcoatadvanced: 0 + - m_start_clearcoatglobalmask: 0 + - m_start_depthFX: 0 + - m_start_depthRimLightOptions: 0 + - m_start_dissolve: 0 + - m_start_dissolveHueShift: 0 + - m_start_emission1Options: 0 + - m_start_emission2Options: 0 + - m_start_emission3Options: 0 + - m_start_emissionOptions: 1 + - m_start_flipBook: 0 + - m_start_glitter: 0 + - m_start_internalparallax: 0 + - m_start_matcap: 0 + - m_start_mirrorOptions: 0 + - m_start_normalCorrect: 0 + - m_start_outlineAlphaBlending: 0 + - m_start_outlineBlending: 0 + - m_start_parallax: 0 + - m_start_pathing: 0 + - m_start_pen_autoConfig: 0 + - m_start_poiSSAO: 0 + - m_start_pointToPoint: 0 + - m_start_postprocess: 0 + - m_start_raliv: 0 + - m_start_ralivAdvanced: 0 + - m_start_ralivOriface: 0 + - m_start_ralivPenetrator: 0 + - m_start_reflectionRim: 0 + - m_start_rim2LightOptions: 0 + - m_start_rimLight1Options: 0 + - m_start_stylizedSpec: 0 + - m_start_subsurfaceScattering: 0 + - m_start_tps_penetrator: 0 + - m_start_truchet: 0 + - m_start_udimdiscardOptions: 0 + - m_start_udimfacediscardOptions: 0 + - m_start_uvDistortion: 0 + - m_start_uvLocalWorld: 0 + - m_start_uvPanosphere: 0 + - m_start_uvPolar: 0 + - m_start_vertexGlitching: 0 + - m_start_vertexLookAt: 0 + - m_start_vertexManipulation: 0 + - m_start_videoEffects: 0 + - m_start_voronoi: 0 + - m_start_voronoiRandom: 0 + - m_thirdpartyCategory: 0 + - m_vertexCategory: 0 + - s_end_ALAlpha: 0 + - s_end_ALDecalAudioModsOptions: 0 + - s_end_ALDecalBand: 0 + - s_end_ALDecalColorsBlendingOptions: 0 + - s_end_ALDecalShapeClipOptions: 0 + - s_end_ALDecalVolumeOptions: 0 + - s_end_ALSpectrumMotion: 0 + - s_end_ALVertexGlitching: 0 + - s_end_ALVertexHeight: 0 + - s_end_ALVertexLookAtAL: 0 + - s_end_AlphaAdvanced: 0 + - s_end_AlphaAngular: 0 + - s_end_AlphaDistanceFade: 0 + - s_end_AlphaDithering: 0 + - s_end_AlphaFresnel: 0 + - s_end_AlphaToCoverage: 0 + - s_end_AnisoBottomLayer: 0 + - s_end_AnisoTopLayer: 1 + - s_end_AudioLinkBandOverrides: 0 + - s_end_BRDFTPSMaskGroup: 0 + - s_end_BackFaceHueShift: 0 + - s_end_BackfaceMods: 0 + - s_end_CCopt: 1 + - s_end_ClearCoatTPSMaskGroup: 0 + - s_end_ColorAdjustColorGrading: 0 + - s_end_ContinuousRotation: 0 + - s_end_CubeMapColorAdjust: 0 + - s_end_CubeMapMasking: 0 + - s_end_Decal0ChannelSeparation: 0 + - s_end_Decal0GlobalMasking: 0 + - s_end_Decal0HueShift: 0 + - s_end_Decal0Video: 0 + - s_end_Decal1ChannelSeparation: 0 + - s_end_Decal1GlobalMasking: 0 + - s_end_Decal1HueShift: 0 + - s_end_Decal1Video: 0 + - s_end_Decal2ChannelSeparation: 0 + - s_end_Decal2GlobalMasking: 0 + - s_end_Decal2HueShift: 0 + - s_end_Decal2Video: 0 + - s_end_Decal3ChannelSeparation: 0 + - s_end_Decal3GlobalMasking: 0 + - s_end_Decal3HueShift: 0 + - s_end_Decal3Video: 0 + - s_end_DecalTPSMaskGroup: 0 + - s_end_DepthAlpha: 0 + - s_end_DepthFXColorEmission: 0 + - s_end_DetailNormal: 0 + - s_end_DetailTexture: 0 + - s_end_DissolveAudioLink: 0 + - s_end_DissolvedMenu: 0 + - s_end_EdgeMenu: 0 + - s_end_EmissionAL0Add: 0 + - s_end_EmissionAL0COut: 0 + - s_end_EmissionAL0Multiply: 0 + - s_end_EmissionAL1Add: 0 + - s_end_EmissionAL1COut: 0 + - s_end_EmissionAL1Multiply: 0 + - s_end_EmissionAL2Add: 0 + - s_end_EmissionAL2COut: 0 + - s_end_EmissionAL2Multiply: 0 + - s_end_EmissionAL3Add: 0 + - s_end_EmissionAL3COut: 0 + - s_end_EmissionAL3Multiply: 0 + - s_end_EmissionBlinking0: 0 + - s_end_EmissionBlinking1: 0 + - s_end_EmissionBlinking2: 0 + - s_end_EmissionBlinking3: 0 + - s_end_EmissionCenterOut0: 0 + - s_end_EmissionCenterOut1: 0 + - s_end_EmissionCenterOut2: 0 + - s_end_EmissionCenterOut3: 0 + - s_end_EmissionHueShift0: 0 + - s_end_EmissionHueShift1: 0 + - s_end_EmissionHueShift2: 0 + - s_end_EmissionHueShift3: 0 + - s_end_EmissionLightBased0: 0 + - s_end_EmissionLightBased1: 0 + - s_end_EmissionLightBased2: 0 + - s_end_EmissionLightBased3: 0 + - s_end_FixedRimBlending: 0 + - s_end_FixedRimColor: 0 + - s_end_FixedRimShapeControl: 0 + - s_end_FlipbookCrossfade: 0 + - s_end_FlipbookHueShift: 0 + - s_end_FlipbookManualFrameControl: 0 + - s_end_FlipbookStartAndEnd: 0 + - s_end_GlitterAudioLink: 0 + - s_end_GlitterColorAndShape: 0 + - s_end_GlitterHueShiftSection: 0 + - s_end_GlitterMask: 0 + - s_end_GlitterPositionSize: 0 + - s_end_GlitterRotationSection: 0 + - s_end_GlitterSparkleControl: 0 + - s_end_GlobalMaskOptionsForceToggles: 0 + - s_end_GlobalMaskOptionsMinMaxSliders: 0 + - s_end_GlobalMaskOptionsSliders: 0 + - s_end_LightDataAddPass: 1 + - s_end_LightDataBasePass: 1 + - s_end_LightDataDebug: 0 + - s_end_LightDataSDF: 1 + - s_end_LocalRotation: 0 + - s_end_LocalTranslation: 0 + - s_end_LookAtAlphaMask: 0 + - s_end_LookAtBlueMask: 0 + - s_end_LookAtGreenMask: 0 + - s_end_LookAtRedMask: 0 + - s_end_LookAtVisibility: 0 + - s_end_MainHueShift: 0 + - s_end_MainHueShiftAL: 0 + - s_end_MainHueShiftGlobalMask: 0 + - s_end_MaskingMenu: 0 + - s_end_Matcap0AudioLink: 0 + - s_end_Matcap0Blending: 0 + - s_end_Matcap0Masking: 0 + - s_end_Matcap1AudioLink: 0 + - s_end_Matcap1Blending: 0 + - s_end_Matcap1HueShift: 0 + - s_end_Matcap1Masking: 0 + - s_end_Matcap1Normal: 0 + - s_end_Matcap1Smoothness: 0 + - s_end_Matcap2AudioLink: 0 + - s_end_Matcap2Blending: 0 + - s_end_Matcap2HueShift: 0 + - s_end_Matcap2Masking: 0 + - s_end_Matcap2Normal: 0 + - s_end_Matcap2Smoothness: 0 + - s_end_Matcap2TPSMaskGroup: 0 + - s_end_Matcap3AudioLink: 0 + - s_end_Matcap3Blending: 0 + - s_end_Matcap3HueShift: 0 + - s_end_Matcap3Masking: 0 + - s_end_Matcap3Normal: 0 + - s_end_Matcap3Smoothness: 0 + - s_end_Matcap3TPSMaskGroup: 0 + - s_end_Matcap4TPSMaskGroup: 0 + - s_end_MatcapHueShift: 0 + - s_end_MatcapNormal: 0 + - s_end_MatcapSmoothness: 0 + - s_end_MatcapTPSMaskGroup: 0 + - s_end_MirrorTexture: 0 + - s_end_MultilayerMath1stLayer: 1 + - s_end_MultilayerMath2ndLayer: 0 + - s_end_MultilayerMath3rdLayer: 0 + - s_end_MultilayerMathBorder: 1 + - s_end_MultilayerMathBorderMap: 1 + - s_end_MultilayerShadowMap: 0 + - s_end_OutlineAlphaDistanceFade: 0 + - s_end_OutlineColorAdjust: 0 + - s_end_OutlineFixedSize: 0 + - s_end_OutlineLighting: 0 + - s_end_OutlineRenderingOptions: 0 + - s_end_OutlineZOffset: 0 + - s_end_PBRSecondSpecular: 0 + - s_end_PBRSplitMaskSample: 0 + - s_end_ParallaxInternalHueShift: 0 + - s_end_ParallaxInternalLayerColoring: 0 + - s_end_ParallaxInternalLayerControls: 0 + - s_end_PathAppearance: 0 + - s_end_PathColors: 0 + - s_end_PathRemapping: 0 + - s_end_PathSourceDirections: 0 + - s_end_PathTypes: 0 + - s_end_Positioning: 0 + - s_end_RGBAlpha: 0 + - s_end_RGBBlue: 0 + - s_end_RGBGreen: 0 + - s_end_RGBRed: 0 + - s_end_RimLight0Color: 0 + - s_end_RimLight0GlobalMasking: 0 + - s_end_RimLight0HueShift: 0 + - s_end_RimLight0LightDirMask: 0 + - s_end_RimLight0ShapeControls: 0 + - s_end_RimLight1Color: 0 + - s_end_RimLight1GlobalMasking: 0 + - s_end_RimLight1HueShift: 0 + - s_end_RimLight1LightDirMask: 0 + - s_end_RimLight1ShapeControls: 0 + - s_end_RimLight2DirectionMask: 0 + - s_end_RimLightDirectionMask: 0 + - s_end_SSAOAdvanced: 0 + - s_end_SSAOColorAndMasking: 0 + - s_end_ScrollingEmission0: 0 + - s_end_ScrollingEmission1: 0 + - s_end_ScrollingEmission2: 0 + - s_end_ScrollingEmission3: 0 + - s_end_ShadingAddPass: 0 + - s_end_ShadingGlobalMask: 0 + - s_end_StylizedReflectionLilEnviroReflections: 1 + - s_end_StylizedReflectionLilSpecular: 1 + - s_end_StylizedReflectionMode0: 1 + - s_end_StylizedReflectionMode1: 1 + - s_end_StylizedSpecularAdvanced: 0 + - s_end_StylizedSpecularLayer0: 0 + - s_end_StylizedSpecularLayer1: 0 + - s_end_TimingOptions: 0 + - s_end_TransitionMenu: 0 + - s_end_UVTileDissolveRow0: 0 + - s_end_UVTileDissolveRow1: 0 + - s_end_UVTileDissolveRow2: 0 + - s_end_UVTileDissolveRow3: 0 + - s_end_VertAL: 0 + - s_end_VertexBarrelMode: 0 + - s_end_VertexColors: 0 + - s_end_VertexGlitchMirror: 0 + - s_end_VertexGlitchTexture: 0 + - s_end_VertexManipulationHeight: 0 + - s_end_VertexRoundingAL: 0 + - s_end_VertexScale: 0 + - s_end_VertexSphereMode: 0 + - s_end_VertexTornadoMode: 0 + - s_end_VertexWind: 0 + - s_end_WorldTranslation: 0 + - s_end_brdfadvanced: 0 + - s_end_decal1_position: 0 + - s_end_decal2_position: 0 + - s_end_decal3_position: 0 + - s_end_decal_position: 0 + - s_end_deliot: 0 + - s_end_fogOpt: 1 + - s_end_ggxanisotropics: 0 + - s_end_heightFogOpt: 1 + - s_end_hextile: 0 + - s_end_liltoon_rim2_lightdir: 0 + - s_end_liltoon_rim_lightdir: 0 + - s_end_matcap1ApplyToAlpha: 0 + - s_end_matcap2ApplyToAlpha: 0 + - s_end_matcap3ApplyToAlpha: 0 + - s_end_matcapApplyToAlpha: 0 + - s_end_outline_al_color: 0 + - s_end_parallaxAdvanced: 0 + - s_end_vertexRounding: 0 + - s_start_ALAlpha: 0 + - s_start_ALDecalAudioModsOptions: 1 + - s_start_ALDecalBandOptions: 1 + - s_start_ALDecalColorsBlendingOptions: 1 + - s_start_ALDecalShapeClipOptions: 1 + - s_start_ALDecalVolumeOptions: 1 + - s_start_ALSpectrumMotion: 0 + - s_start_ALVertexGlitching: 0 + - s_start_ALVertexHeight: 0 + - s_start_ALVertexLookAtAL: 0 + - s_start_AlphaAdvanced: 0 + - s_start_AlphaAngular: 0 + - s_start_AlphaDistanceFade: 0 + - s_start_AlphaDithering: 0 + - s_start_AlphaFresnel: 0 + - s_start_AlphaToCoverage: 0 + - s_start_AnisoBottomLayer: 0 + - s_start_AnisoTopLayer: 1 + - s_start_AudioLinkBandOverrides: 1 + - s_start_BRDFTPSMaskGroup: 0 + - s_start_BackFaceHueShift: 0 + - s_start_BackfaceMods: 0 + - s_start_CCopt: 1 + - s_start_ClearCoatTPSMaskGroup: 0 + - s_start_ColorAdjustColorGrading: 0 + - s_start_ContinuousRotation: 0 + - s_start_CubeMapColorAdjust: 0 + - s_start_CubeMapMasking: 1 + - s_start_Decal0ChannelSeparation: 0 + - s_start_Decal0GlobalMasking: 0 + - s_start_Decal0HueShift: 0 + - s_start_Decal0Video: 0 + - s_start_Decal1ChannelSeparation: 0 + - s_start_Decal1GlobalMasking: 0 + - s_start_Decal1HueShift: 0 + - s_start_Decal1Video: 0 + - s_start_Decal2ChannelSeparation: 0 + - s_start_Decal2GlobalMasking: 0 + - s_start_Decal2HueShift: 0 + - s_start_Decal2Video: 0 + - s_start_Decal3ChannelSeparation: 0 + - s_start_Decal3GlobalMasking: 0 + - s_start_Decal3HueShift: 0 + - s_start_Decal3Video: 0 + - s_start_DecalTPSMaskGroup: 0 + - s_start_DepthAlpha: 0 + - s_start_DepthFXColorEmission: 0 + - s_start_DetailNormal: 0 + - s_start_DetailTexture: 0 + - s_start_DissolveAudioLink: 0 + - s_start_DissolvedMenu: 0 + - s_start_EdgeMenu: 0 + - s_start_EmissionAL0Add: 0 + - s_start_EmissionAL0COut: 0 + - s_start_EmissionAL0Multiply: 0 + - s_start_EmissionAL1Add: 0 + - s_start_EmissionAL1COut: 0 + - s_start_EmissionAL1Multiply: 0 + - s_start_EmissionAL2Add: 0 + - s_start_EmissionAL2COut: 0 + - s_start_EmissionAL2Multiply: 0 + - s_start_EmissionAL3Add: 0 + - s_start_EmissionAL3COut: 0 + - s_start_EmissionAL3Multiply: 0 + - s_start_EmissionBlinking0: 0 + - s_start_EmissionBlinking1: 0 + - s_start_EmissionBlinking2: 0 + - s_start_EmissionBlinking3: 0 + - s_start_EmissionCenterOut0: 0 + - s_start_EmissionCenterOut1: 0 + - s_start_EmissionCenterOut2: 0 + - s_start_EmissionCenterOut3: 0 + - s_start_EmissionHueShift0: 0 + - s_start_EmissionHueShift1: 0 + - s_start_EmissionHueShift2: 0 + - s_start_EmissionHueShift3: 0 + - s_start_EmissionLightBased0: 0 + - s_start_EmissionLightBased1: 0 + - s_start_EmissionLightBased2: 0 + - s_start_EmissionLightBased3: 0 + - s_start_FixedRimBlending: 1 + - s_start_FixedRimColor: 1 + - s_start_FixedRimShapeControl: 1 + - s_start_FlipbookCrossfade: 0 + - s_start_FlipbookHueShift: 0 + - s_start_FlipbookManualFrameControl: 0 + - s_start_FlipbookStartAndEnd: 0 + - s_start_GlitterAudioLink: 0 + - s_start_GlitterColorAndShape: 1 + - s_start_GlitterHueShiftSection: 0 + - s_start_GlitterMask: 0 + - s_start_GlitterPositionSize: 0 + - s_start_GlitterRotationSection: 0 + - s_start_GlitterSparkleControl: 1 + - s_start_GlobalMaskOptionsForceToggles: 0 + - s_start_GlobalMaskOptionsMinMaxSliders: 0 + - s_start_GlobalMaskOptionsSliders: 0 + - s_start_LightDataAddPass: 1 + - s_start_LightDataBasePass: 1 + - s_start_LightDataDebug: 0 + - s_start_LightDataSDF: 1 + - s_start_LocalRotation: 0 + - s_start_LocalTranslation: 0 + - s_start_LookAtAlphaMask: 0 + - s_start_LookAtBlueMask: 0 + - s_start_LookAtGreenMask: 0 + - s_start_LookAtRedMask: 1 + - s_start_LookAtVisibility: 0 + - s_start_MainHueShift: 1 + - s_start_MainHueShiftAL: 0 + - s_start_MainHueShiftGlobalMask: 0 + - s_start_MaskingMenu: 0 + - s_start_Matcap0AudioLink: 0 + - s_start_Matcap0Blending: 1 + - s_start_Matcap0Masking: 1 + - s_start_Matcap1AudioLink: 0 + - s_start_Matcap1Blending: 1 + - s_start_Matcap1HueShift: 0 + - s_start_Matcap1Masking: 1 + - s_start_Matcap1Normal: 0 + - s_start_Matcap1Smoothness: 0 + - s_start_Matcap2AudioLink: 0 + - s_start_Matcap2Blending: 1 + - s_start_Matcap2HueShift: 0 + - s_start_Matcap2Masking: 1 + - s_start_Matcap2Normal: 0 + - s_start_Matcap2Smoothness: 0 + - s_start_Matcap2TPSMaskGroup: 0 + - s_start_Matcap3AudioLink: 0 + - s_start_Matcap3Blending: 1 + - s_start_Matcap3HueShift: 0 + - s_start_Matcap3Masking: 1 + - s_start_Matcap3Normal: 0 + - s_start_Matcap3Smoothness: 0 + - s_start_Matcap3TPSMaskGroup: 0 + - s_start_Matcap4TPSMaskGroup: 0 + - s_start_MatcapHueShift: 0 + - s_start_MatcapNormal: 0 + - s_start_MatcapSmoothness: 0 + - s_start_MatcapTPSMaskGroup: 0 + - s_start_MirrorTexture: 1 + - s_start_MultilayerMath1stLayer: 1 + - s_start_MultilayerMath2ndLayer: 0 + - s_start_MultilayerMath3rdLayer: 0 + - s_start_MultilayerMathBorder: 1 + - s_start_MultilayerMathBorderMap: 0 + - s_start_MultilayerShadowMap: 0 + - s_start_OutlineAlphaDistanceFade: 0 + - s_start_OutlineColorAdjust: 0 + - s_start_OutlineFixedSize: 0 + - s_start_OutlineLighting: 0 + - s_start_OutlineRenderingOptions: 0 + - s_start_OutlineZOffset: 0 + - s_start_PBRSecondSpecular: 0 + - s_start_PBRSplitMaskSample: 0 + - s_start_ParallaxInternalHueShift: 0 + - s_start_ParallaxInternalLayerColoring: 1 + - s_start_ParallaxInternalLayerControls: 1 + - s_start_PathAppearance: 1 + - s_start_PathColors: 1 + - s_start_PathRemapping: 1 + - s_start_PathSourceDirections: 1 + - s_start_PathTypes: 1 + - s_start_Positioning: 1 + - s_start_RGBAlpha: 0 + - s_start_RGBBlue: 0 + - s_start_RGBGreen: 0 + - s_start_RGBRed: 0 + - s_start_RimLight0Color: 1 + - s_start_RimLight0GlobalMasking: 0 + - s_start_RimLight0HueShift: 0 + - s_start_RimLight0LightDirMask: 0 + - s_start_RimLight0ShapeControls: 1 + - s_start_RimLight1Color: 1 + - s_start_RimLight1GlobalMasking: 0 + - s_start_RimLight1HueShift: 0 + - s_start_RimLight1LightDirMask: 0 + - s_start_RimLight1ShapeControls: 1 + - s_start_RimLight2DirectionMask: 0 + - s_start_RimLightDirectionMask: 0 + - s_start_SSAOAdvanced: 0 + - s_start_SSAOColorAndMasking: 1 + - s_start_ScrollingEmission0: 0 + - s_start_ScrollingEmission1: 0 + - s_start_ScrollingEmission2: 0 + - s_start_ScrollingEmission3: 0 + - s_start_ShadingAddPass: 0 + - s_start_ShadingGlobalMask: 0 + - s_start_StylizedReflectionLilEnviroReflections: 1 + - s_start_StylizedReflectionLilSpecular: 1 + - s_start_StylizedReflectionMode0: 1 + - s_start_StylizedReflectionMode1: 1 + - s_start_StylizedSpecularAdvanced: 0 + - s_start_StylizedSpecularLayer0: 1 + - s_start_StylizedSpecularLayer1: 1 + - s_start_TimingOptions: 1 + - s_start_TransitionMenu: 0 + - s_start_UVTileDissolveRow0: 0 + - s_start_UVTileDissolveRow1: 0 + - s_start_UVTileDissolveRow2: 0 + - s_start_UVTileDissolveRow3: 0 + - s_start_VertAL: 0 + - s_start_VertexBarrelMode: 0 + - s_start_VertexColors: 0 + - s_start_VertexGlitchMirror: 0 + - s_start_VertexGlitchTexture: 1 + - s_start_VertexManipulationHeight: 1 + - s_start_VertexScale: 0 + - s_start_VertexSphereMode: 0 + - s_start_VertexTornadoMode: 0 + - s_start_VertexWind: 0 + - s_start_WorldTranslation: 0 + - s_start_brdfadvanced: 0 + - s_start_decal1_position: 1 + - s_start_decal2_position: 1 + - s_start_decal3_position: 1 + - s_start_decal_position: 1 + - s_start_deliot: 0 + - s_start_fogOpt: 1 + - s_start_ggxanisotropics: 0 + - s_start_heightFogOpt: 1 + - s_start_hextile: 0 + - s_start_liltoon_rim2_lightdir: 0 + - s_start_liltoon_rim_lightdir: 0 + - s_start_matcap1ApplyToAlpha: 0 + - s_start_matcap2ApplyToAlpha: 0 + - s_start_matcap3ApplyToAlpha: 0 + - s_start_matcapApplyToAlpha: 0 + - s_start_outline_al_color: 0 + - s_start_parallaxAdvanced: 0 + - s_start_vertexRounding: 0 + - s_start_vertexRoundingAL: 0 + - shader_is_using_thry_editor: 0 + - shader_locale: 0 + - shader_master_label: 0 m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _1st_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALDecalVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALDecalVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _ALDecaldCircleDimensions: {r: 0, g: 1, b: 0, a: 1} + - _ALUVPosition: {r: 0.5, g: 0.5, b: 1, a: 1} + - _ALUVScale: {r: 1, g: 1, b: 1, a: 1} + - _ALVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _AlphaAudioLinkAddRange: {r: 0, g: 0, b: 0, a: 1} + - _AlphaColor: {r: 1, g: 1, b: 1, a: 1} + - _AlphaMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _AlphaTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _AngleForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _Aniso0Tint: {r: 1, g: 1, b: 1, a: 1} + - _Aniso1Tint: {r: 1, g: 1, b: 1, a: 1} + - _AnisoColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _AnisotropyMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Ap_Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Ap_RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkBandOverrideSliders: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveDetail: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission0CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission1CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission2CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission3CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookFrame: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookScale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkOutlineColorMod: {r: 0, g: 1, b: 0, a: 0} + - _AudioLinkOutlineEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineSize: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkPathEmissionAddA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkRim2BrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2EmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2WidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimWidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiInnerEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiOuterEmission: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceColor: {r: 1, g: 1, b: 1, a: 1} + - _BackFaceMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BacklightColor: {r: 0.85, g: 0.8, b: 0.7, a: 1} + - _BacklightColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _BlackLightMasking0Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking1Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking2Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking3Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlueColor: {r: 1, g: 1, b: 1, a: 1} + - _BlueTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BumpMapPan: {r: 0, g: 0, b: 0, a: 0} + - _CenterOutDissolveDirection: {r: 0, g: 0, b: 1, a: 0} + - _ClearCoatMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _ClearCoatReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _ClearCoatSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _ClothMetallicSmoothnessMapPan: {r: 0, g: 0, b: 0, a: 0} - _Color: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapColor: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotation: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotationPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalColor: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor1: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor2: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor3: {r: 1, g: 1, b: 1, a: 1} + - _DecalMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalPosition: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition1: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition2: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition3: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalScale: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale1: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale2: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale3: {r: 1, g: 1, b: 1, a: 0} + - _DecalSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset1: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset2: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset3: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DepthColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DepthRimColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DetailMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailNormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTexPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTint: {r: 1, g: 1, b: 1, a: 1} + - _DissolveDetailNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveEdgeColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveEndPoint: {r: 0, g: 1, b: 0, a: 0} + - _DissolveMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveNoiseTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveStartPoint: {r: 0, g: -1, b: 0, a: 0} + - _DissolveTextureColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveToTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrength1AudioLink: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrengthAudioLink: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL0Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL0StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL1Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL1StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL2Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL2StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL3Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL3StrengthMod: {r: 0, g: 0, b: 0, a: 0} - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor1: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor2: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor3: {r: 1, g: 1, b: 1, a: 1} + - _EmissionMap1Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMapPan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask1Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _EmissiveScroll_Direction: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction1: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction2: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction3: {r: 0, g: -10, b: 0, a: 0} + - _FXProximityColorMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _FXProximityColorMinColor: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookColor: {r: 1, g: 1, b: 1, a: 1} + - _FlipbookCrossfadeRange: {r: 0.75, g: 1, b: 0, a: 1} + - _FlipbookMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookPanning: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _FlipbookSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookTexArrayPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALMaxBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALSizeAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterColor: {r: 1, g: 1, b: 1, a: 1} + - _GlitterColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSize: {r: 0.1, g: 0.5, b: 0, a: 1} + - _GlitterRandomRotationSpeed: {r: 0, g: 0, b: 0, a: 0} + - _GlitterUVPanning: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskMinMaxSlider_0: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_1: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_10: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_11: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_12: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_13: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_14: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_15: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_2: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_3: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_4: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_5: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_6: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_7: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_8: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_9: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskTexture0Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalThemeColor0: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor1: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor2: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor3: {r: 1, g: 1, b: 1, a: 1} + - _GreenColor: {r: 1, g: 1, b: 1, a: 1} + - _GreenTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _HeightMapPan: {r: 0, g: 0, b: 0, a: 0} + - _HeightmaskPan: {r: 0, g: 0, b: 0, a: 0} + - _HighColor: {r: 1, g: 1, b: 1, a: 1} + - _HighColor_TexPan: {r: 0, g: 0, b: 0, a: 0} + - _LTCGI_DiffuseColor: {r: 1, g: 1, b: 1, a: 1} + - _LTCGI_SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _LightDataSDFMapPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingAOMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingDetailShadowMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingForcedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingWrappedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightngForcedDirection: {r: 0, g: 0, b: 0, a: 1} + - _LineColor: {r: 1, g: 1, b: 1, a: 1} + - _LookAtAlphaDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtAlphaMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtBlueDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtBlueMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBluePivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBlueUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtGreenDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtGreenMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtRedMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _MainColorAdjustTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MainTexPan: {r: 0, g: 0, b: 0, a: 0} + - _MatCap2ndBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap3rdBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap4thBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCapBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap3MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap4MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Pan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapColor: {r: 1, g: 1, b: 1, a: 1} + - _MatcapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapPan: {r: 0, g: 0, b: 0, a: 0} + - _MirrorColor: {r: 1, g: 1, b: 1, a: 1} + - _MirrorTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _MochieSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _MultilayerMathBlurMapPan: {r: 0, g: 0, b: 0, a: 0} + - _NormalCorrectOrigin: {r: 0, g: 0.4, b: -0.025, a: 1} + - _OutlineDropShadowOffset: {r: 1, g: 0, b: 0, a: 0} + - _OutlineMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _OutlinePersonaDirection: {r: 1, g: 0, b: 0, a: 0} + - _OutlineTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _PBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _PPMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _PPRGB: {r: 1, g: 1, b: 1, a: 1} + - _PPTint: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ParallaxInternalMapPan: {r: 0, g: 0, b: 1, a: 1} + - _ParallaxInternalMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMinColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalPanDepthSpeed: {r: 0, g: 0, b: 1, a: 1} + - _PathALAutoCorrelatorRangeA: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeB: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeG: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeR: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALHistoryRangeA: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeB: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeG: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeR: {r: 0, g: 1, b: 0, a: 1} + - _PathColorA: {r: 1, g: 1, b: 1, a: 1} + - _PathColorB: {r: 1, g: 1, b: 1, a: 1} + - _PathColorG: {r: 1, g: 1, b: 1, a: 1} + - _PathColorR: {r: 1, g: 1, b: 1, a: 1} + - _PathEmissionStrength: {r: 0, g: 0, b: 0, a: 0} + - _PathGapLengths: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathOffset: {r: 0, g: 0, b: 0, a: 0} + - _PathRemapA: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapB: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapG: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapR: {r: 0, g: 1, b: 0, a: 1} + - _PathSegments: {r: 0, g: 0, b: 0, a: 0} + - _PathSoftness: {r: 1, g: 1, b: 1, a: 1} + - _PathSpeed: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathTime: {r: -999, g: -999, b: -999, a: -999} + - _PathWidth: {r: 0.03, g: 0.03, b: 0.03, a: 0.03} + - _PathingColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PathingMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PolarCenter: {r: 0.5, g: 0.5, b: 0, a: 0} + - _RGBAAlphaPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAAlphaPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAAlphaScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBABlueScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAGreenScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBARedPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBASmoothnessMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RedColor: {r: 1, g: 1, b: 1, a: 1} + - _RedTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _ReflectionColor: {r: 1, g: 1, b: 1, a: 1} + - _ReflectionCubeColor: {r: 0, g: 0, b: 0, a: 1} + - _RgbNormalAPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalBPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalGPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalRPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2Color: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _Rim2ColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2IndirColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2ShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _Rim2TexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimColor: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _RimColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimEnviroMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimIndirColor: {r: 1, g: 1, b: 1, a: 1} + - _RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _RimMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _RimTexPan: {r: 0, g: 0, b: 0, a: 0} + - _SDFForward: {r: 0, g: 0, b: 1, a: 0} + - _SDFLeft: {r: -1, g: 0, b: 0, a: 0} + - _SDFShadingTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOColor: {r: 0, g: 0, b: 0, a: 1} + - _SSAOColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOHSV: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaxDistanceFalloff: {r: 0.01, g: 0.1, b: 1, a: 1} + - _SSSColor: {r: 1, g: 0, b: 0, a: 1} + - _SSSThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_HighColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_Rim2LightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_RimLightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowAOShift: {r: 0, g: 1, b: 0, a: 1} + - _ShadowAOShift2: {r: 0, g: 1, b: 0, a: 1} + - _ShadowBorderColor: {r: 1, g: 0, b: 0, a: 1} + - _ShadowBorderMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowColor: {r: 0.7, g: 0.75, b: 0.85, a: 1} + - _ShadowColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowStrengthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SkinThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + - _SphericalDissolveCenter: {r: 0, g: 0, b: 0, a: 1} + - _SssColorBleedAoWeights: {r: 0.4, g: 0.15, b: 0.13, a: 0} + - _SssTransmissionAbsorption: {r: -8, g: -40, b: -64, a: 0} + - _TPS_BuldgeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorForward: {r: 0, g: 0, b: 1, a: 0} + - _TPS_PenetratorRight: {r: 1, g: 0, b: 0, a: 0} + - _TPS_PenetratorScale: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorUp: {r: 0, g: 1, b: 0, a: 0} + - _TPS_SqueezeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSScale: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericColor: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericScale: {r: 1, g: 1, b: 1, a: 1} + - _TextPositionColor: {r: 1, g: 0, b: 1, a: 1} + - _TextPositionOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionScale: {r: 1, g: 1, b: 1, a: 1} + - _TextTimeColor: {r: 1, g: 0, b: 1, a: 1} + - _TextTimeOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextTimePadding: {r: 0, g: 0, b: 0, a: 0} + - _TextTimeScale: {r: 1, g: 1, b: 1, a: 1} + - _TruchetALAlpha: {r: 0, g: 0, b: 0, a: 0} + - _TruchetALEmission: {r: 0, g: 0, b: 0, a: 0} + - _TruchetChronoPanSpeed: {r: 0, g: 0, b: 0, a: 0} + - _TruchetColor: {r: 1, g: 1, b: 1, a: 1} + - _TruchetMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _TruchetPanOffset: {r: 0, g: 0, b: 0, a: 0} + - _TruchetTexPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexBasicsMaskUVPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalRotationAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalRotationCTALSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalScaleALMax: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalScaleALMin: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexLookAtAlphaAudiolink: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationHeightAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationHeightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationLocalRotation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalRotationSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalScale: {r: 1, g: 1, b: 1, a: 1} + - _VertexManipulationLocalTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationWorldTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexRoundingRangeAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexSpectrumOffsetMax: {r: 0, g: 0.1, b: 0, a: 1} + - _VertexSpectrumOffsetMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexSphereCenter: {r: 0, g: 0, b: 0, a: 1} + - _VertexWindDetailDirection: {r: 0, g: 1, b: 0, a: 0} + - _VertexWindPrimaryDirection: {r: 1, g: 0, b: 0, a: 0} + - _VertexWorldTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexWorldTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VideoMaskTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _VideoResolution: {r: 1280, g: 720, b: 0, a: 0} + - _VoronoiGradient: {r: 0, g: 0.5, b: 0, a: 0} + - _VoronoiInnerColor: {r: 1, g: 1, b: 1, a: 1} + - _VoronoiMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiOuterColor: {r: 0, g: 0, b: 0, a: 1} + - _VoronoiRandomMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiRandomMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiSpeed: {r: 1, g: 1, b: 1, a: 1} m_BuildTextureStacks: [] diff --git a/Assets/Quiz/Materials/Lobby/OptimizedShaders.meta b/Assets/Quiz/Materials/Lobby/OptimizedShaders.meta new file mode 100644 index 0000000..546446c --- /dev/null +++ b/Assets/Quiz/Materials/Lobby/OptimizedShaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7d9386fbf63f79d488b18fdc8ce2d9e6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/Lobby/OptimizedShaders/LobbyRoom.meta b/Assets/Quiz/Materials/Lobby/OptimizedShaders/LobbyRoom.meta new file mode 100644 index 0000000..539e445 --- /dev/null +++ b/Assets/Quiz/Materials/Lobby/OptimizedShaders/LobbyRoom.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4247ad4ad3429e5428e7e481f8ee262e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/Lobby/OptimizedShaders/LobbyRoom/Poiyomi Pro.shader b/Assets/Quiz/Materials/Lobby/OptimizedShaders/LobbyRoom/Poiyomi Pro.shader new file mode 100644 index 0000000..d916128 --- /dev/null +++ b/Assets/Quiz/Materials/Lobby/OptimizedShaders/LobbyRoom/Poiyomi Pro.shader @@ -0,0 +1,10250 @@ +Shader "Hidden/Locked/.poiyomi/Poiyomi Pro/3d8b322bfde7cb44badcb0272be09f88" +{ + Properties + { + [HideInInspector] shader_master_label ("Poiyomi 9.3.48", Float) = 0 + [HideInInspector] shader_is_using_thry_editor ("", Float) = 0 + [HideInInspector] shader_locale ("0db0b86376c3dca4b9a6828ef8615fe0", Float) = 0 + [HideInInspector] footer_website ("{texture:{name:icon-poilogo,height:24},action:{type:URL,data:https://www.poiyomi.com},hover:WEBSITE}", Float) = 0 + [HideInInspector] footer_discord ("{texture:{name:icon-discord,height:24},action:{type:URL,data:https://discord.gg/Ays52PY},hover:DISCORD}", Float) = 0 + [HideInInspector] footer_patreon ("{texture:{name:icon-patreon-new,height:24},action:{type:URL,data:https://www.patreon.com/poiyomi},hover:PATREON}", Float) = 0 + [HideInInspector] footer_youtube ("{texture:{name:icon-youtube,height:24},action:{type:URL,data:https://www.youtube.com/poiyomi},hover:YOUTUBE}", Float) = 0 + [HideInInspector] footer_github ("{texture:{name:icon-github,height:24},action:{type:URL,data:https://github.com/poiyomi/PoiyomiToonShader},hover:GITHUB}", Float) = 0 + [HideInInspector] footer_bluesky ("{texture:{name:icon-bluesky,height:24},action:{type:URL,data:https://bsky.app/profile/poiyomi.com},hover:BLUESKY}", Float) = 0 + [HideInInspector] footer_twitter ("{texture:{name:icon-twitter,height:24},action:{type:URL,data:https://x.com/poiyomi},hover:X}", Float) = 0 + [Header(POIYOMI SHADER UI FAILED TO LOAD)] + [Header(. This is caused by scripts failing to compile. It can be fixed.)] + [Header(. The inspector will look broken and will not work properly until fixed.)] + [Header(. Please check your console for script errors.)] + [Header(. You can filter by errors in the console window.)] + [Header(. Often the topmost error points to the erroring script.)] + [Space(30)][Header(Common Error Causes)] + [Header(. Installing multiple Poiyomi Shader packages)] + [Header(. Make sure to delete the Poiyomi shader folder before you update Poiyomi.)] + [Header(. If a package came with Poiyomi this is bad practice and can cause issues.)] + [Header(. Delete the package and import it without any Poiyomi components.)] + [Header(. Bad VRCSDK installation (e.g. Both VCC and Standalone))] + [Header(. Delete the VRCSDK Folder in Assets if you are using the VCC.)] + [Header(. Avoid using third party SDKs. They can cause incompatibility.)] + [Header(. Script Errors in other scripts)] + [Header(. Outdated tools or prefabs can cause this.)] + [Header(. Update things that are throwing errors or move them outside the project.)] + [Space(30)][Header(Visit Our Discord to Ask For Help)] + [Space(5)]_ShaderUIWarning0 (" → discord.gg/poiyomi ← We can help you get it fixed! --{condition_showS:(0==1)}", Int) = -0 + [Space(1400)][Header(POIYOMI SHADER UI FAILED TO LOAD)] + _ShaderUIWarning1 ("Please scroll up for more information! --{condition_showS:(0==1)}", Int) = -0 + [HideInInspector] _ForgotToLockMaterial (";;YOU_FORGOT_TO_LOCK_THIS_MATERIAL;", Int) = 1 + [ThryShaderOptimizerLockButton] _ShaderOptimizerEnabled ("", Int) = 1 + [HideInInspector] GeometryShader_Enabled("GEOMETRY SHADER ENABLED", Float) = 1 + [HideInInspector] Tessellation_Enabled("TESSELLATION ENABLED", Float) = 1 + [ThryWideEnum(Opaque, 0, Cutout, 1, TransClipping, 9, Fade, 2, Transparent, 3, Additive, 4, Soft Additive, 5, Multiplicative, 6, 2x Multiplicative, 7)]_Mode("Rendering Preset--{on_value_actions:[ + {value:0,actions:[{type:SET_PROPERTY,data:render_queue=2000},{type:SET_PROPERTY,data:_AlphaForceOpaque=1}, {type:SET_PROPERTY,data:render_type=Opaque}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=0}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:1,actions:[{type:SET_PROPERTY,data:render_queue=2450},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=.5}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:9,actions:[{type:SET_PROPERTY,data:render_queue=2460},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.01}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:2,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.002}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:3,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=1}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:4,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:5,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=4}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=4}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=4}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:6,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:7,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=3}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=3}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]} + }]}]}", Int) = 0 + [HideInInspector] m_mainCategory ("Color & Normals--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/main},hover:Documentation}}", Float) = 0 + _Color ("Color & Alpha--{reference_property:_ColorThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _ColorThemeIndex ("", Int) = 0 + [sRGBWarning(true)]_MainTex ("Texture--{reference_properties:[_MainTexPan, _MainTexUV, _MainPixelMode, _MainTexStochastic, _MainIgnoreTexAlpha]}", 2D) = "white" { } + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _MainTexUV ("UV", Int) = 0 + [HideInInspector][Vector2]_MainTexPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ToggleUI]_MainPixelMode ("Pixel Mode", Float) = 0 + [HideInInspector][ToggleUI]_MainTexStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][ToggleUI]_MainIgnoreTexAlpha ("Ignore Alpha", Float) = 0 + [Normal]_BumpMap ("Normal Map--{reference_properties:[_BumpMapPan, _BumpMapUV, _BumpScale, _BumpMapStochastic]}", 2D) = "bump" { } + [HideInInspector][Vector2]_BumpMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _BumpMapUV ("UV", Int) = 0 + [HideInInspector]_BumpScale ("Intensity", Range(0, 10)) = 1 + [HideInInspector][ToggleUI]_BumpMapStochastic ("Stochastic Sampling", Float) = 0 + [sRGBWarning]_AlphaMask ("Alpha Map--{reference_properties:[_AlphaMaskPan, _AlphaMaskUV, _AlphaMaskInvert, _MainAlphaMaskMode, _AlphaMaskBlendStrength, _AlphaMaskValue], alts:[_AlphaMap]}", 2D) = "white" { } + [HideInInspector][Vector2]_AlphaMaskPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _AlphaMaskUV ("UV", Int) = 0 + [HideInInspector][ThryWideEnum(Off, 0, Replace, 1, Multiply, 2, Add, 3, Subtract, 4)]_MainAlphaMaskMode ("Blend Mode", Int) = 2 + [HideInInspector]_AlphaMaskBlendStrength ("Blend Strength", Float) = 1 + [HideInInspector]_AlphaMaskValue ("Blend Offset", Float) = 0 + [HideInInspector][ToggleUI]_AlphaMaskInvert ("Invert", Float) = 0 + _Cutoff ("Alpha Cutoff", Range(0, 1.001)) = 0.5 + [HideInInspector] m_start_Alpha ("Alpha Options--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/alpha-options},hover:Documentation}}", Float) = 0 + [ToggleUI]_AlphaForceOpaque ("Force Opaque", Float) = 1 + _AlphaMod ("Alpha Mod", Range(-1, 1)) = 0.0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _AlphaGlobalMask ("Global Mask--{reference_property:_AlphaGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _AlphaGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] m_end_Alpha ("Alpha Options", Float) = 0 + [HideInInspector] m_lightingCategory ("Shading", Float) = 0 + [HideInInspector] m_start_PoiLightData ("Light Data--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/light-data},hover:Documentation}}", Float) = 0 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingAOMaps ("AO Maps (expand)--{reference_properties:[_LightingAOMapsPan, _LightingAOMapsUV,_LightDataAOStrengthR,_LightDataAOStrengthG,_LightDataAOStrengthB,_LightDataAOStrengthA, _LightDataAOGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingAOMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingAOMapsUV ("UV", Int) = 0 + [HideInInspector]_LightDataAOStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightDataAOStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataAOGlobalMaskR ("Global Mask--{reference_property:_LightDataAOGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataAOGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingDetailShadowMaps ("Shadow Map (expand)--{reference_properties:[_LightingDetailShadowMapsPan, _LightingDetailShadowMapsUV,_LightingDetailShadowStrengthR,_LightingDetailShadowStrengthG,_LightingDetailShadowStrengthB,_LightingDetailShadowStrengthA,_LightingAddDetailShadowStrengthR,_LightingAddDetailShadowStrengthG,_LightingAddDetailShadowStrengthB,_LightingAddDetailShadowStrengthA, _LightDataDetailShadowGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingDetailShadowMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingDetailShadowMapsUV ("UV", Int) = 0 + [HideInInspector]_LightingDetailShadowStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingDetailShadowStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthR ("Additive R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingAddDetailShadowStrengthG ("Additive G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthB ("Additive B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthA ("Additive A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataDetailShadowGlobalMaskR ("Global Mask--{reference_property:_LightDataDetailShadowGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataDetailShadowGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingShadowMasks ("Shadow Masks (expand)--{reference_properties:[_LightingShadowMasksPan, _LightingShadowMasksUV,_LightingShadowMaskStrengthR,_LightingShadowMaskStrengthG,_LightingShadowMaskStrengthB,_LightingShadowMaskStrengthA, _LightDataShadowMaskGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingShadowMasksPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingShadowMasksUV ("UV", Int) = 0 + [HideInInspector]_LightingShadowMaskStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingShadowMaskStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataShadowMaskGlobalMaskR ("Global Mask--{reference_property:_LightDataShadowMaskGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataShadowMaskGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [HideInInspector] s_start_LightDataBasePass ("Base Pass (Directional & Baked Lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [Enum(Poi Custom, 0, Standard, 1, UTS2, 2, OpenLit(lil toon), 3)] _LightingColorMode ("Light Color Mode", Int) = 0 + [Enum(Poi Custom, 0, Normalized NDotL, 1, Saturated NDotL, 2, Casted Shadows Only, 3, SDF, 4)] _LightingMapMode ("Light Map Mode", Int) = 0 + [HideInInspector] s_start_LightDataSDF ("Signed Distance fields--{persistent_expand:true,default_expand:true, condition_showS:(_LightingMapMode==4)}", Float) = 1 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, Nothing, Nothing, Linear, false)]_LightDataSDFMap ("SDF Map (expand)--{reference_properties:[_LightDataSDFMapPan, _LightDataSDFMapUV]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightDataSDFMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightDataSDFMapUV ("UV", Int) = 0 + _LightDataSDFMapLOD ("LOD", Range(0, 1)) = 0 + _LightDataSDFBlendY ("Blend Y Direction", Range(0.001, 2)) = 1 + [HideInInspector] s_end_LightDataSDF ("Signed Distance fields", Float) = 1 + [Enum(Poi Custom, 0, Forced Local Direction, 1, Forced World Direction, 2, UTS2, 3, OpenLit(lil toon), 4, View Direction, 5)] _LightingDirectionMode ("Light Direction Mode", Int) = 0 + [Vector3]_LightngForcedDirection ("Forced Direction--{condition_showS:(_LightingDirectionMode==1 || _LightingDirectionMode==2)}", Vector) = (0, 0, 0) + _LightingViewDirOffsetPitch ("View Dir Offset Pitch--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + _LightingViewDirOffsetYaw ("View Dir Offset Yaw--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + [ToggleUI]_LightingForceColorEnabled ("Force Light Color", Float) = 0 + _LightingForcedColor ("Forced Color--{condition_showS:(_LightingForceColorEnabled==1), reference_property:_LightingForcedColorThemeIndex}", Color) = (1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _LightingForcedColorThemeIndex ("", Int) = 0 + _Unlit_Intensity ("Unlit_Intensity--{condition_showS:(_LightingColorMode==2)}", Range(0.001, 4)) = 1 + [DoNotLock][ToggleUI]_LightingCapEnabled ("Limit Brightness", Float) = 1 + [DoNotLock]_LightingCap ("Max Brightness--{condition_showS:(_LightingCapEnabled==1)}", Range(0, 10)) = 1 + [DoNotLock]_LightingMinLightBrightness ("Min Brightness", Range(0, 1)) = 0 + _LightingIndirectUsesNormals ("Indirect Uses Normals--{condition_showS:(_LightingColorMode==0)}", Range(0, 1)) = 0 + _LightingCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 0 + [DoNotLock]_LightingMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + [ToggleUI]_LightingVertexLightingEnabled ("Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingMirrorVertexLightingEnabled ("Mirror Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingEnableLightVolumes ("Light Volumes", Float) = 1 + [HideInInspector] s_end_LightDataBasePass ("Base Pass", Float) = 1 + [HideInInspector] s_start_LightDataAddPass ("Add Pass (Point & Spot lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [ToggleUI]_LightingAdditiveEnable ("Pixel lights (Important)", Float) = 1 + [ToggleUI]_DisableDirectionalInAdd ("Ignore Directional Lights--{condition_showS:(_LightingAdditiveEnable==1)}", Float) = 1 + [ToggleUI]_LightingAdditiveLimited ("Limit Brightness", Float) = 1 + _LightingAdditiveLimit ("Max Brightness--{condition_showS:(_LightingAdditiveLimited==1)}", Range(0, 10)) = 1 + _LightingAdditiveCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 1 + _LightingAdditiveMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + _LightingAdditivePassthrough ("Point Light Passthrough--{condition_showS:(_LightingAdditiveEnable==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_LightDataAddPass ("Add Pass", Float) = 1 + [HideInInspector] s_start_LightDataDebug ("Debug / Data Visualizations--{reference_property:_LightDataDebugEnabled,persistent_expand:true}", Float) = 0 + [HideInInspector][DoNotAnimate][ThryToggleUI(false)]_LightDataDebugEnabled ("Debug", Float) = 0 + [ThryWideEnum(Direct Color, 0, Indirect Color, 1, Light Map, 2, Attenuation, 3, N Dot L, 4, Half Dir, 5, Direction, 6, Add Color, 7, Add Attenuation, 8, Add Shadow, 9, Add N Dot L, 10)] _LightingDebugVisualize ("Visualize", Int) = 0 + [HideInInspector] s_end_LightDataDebug ("Debug", Float) = 0 + [HideInInspector] m_end_PoiLightData ("Light Data", Float) = 0 + [HideInInspector] m_start_PoiShading (" Shading--{reference_property:_ShadingEnabled,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/main},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(VIGNETTE_MASKED)]_ShadingEnabled ("Enable Shading", Float) = 1 + [DoNotAnimate][KeywordEnum(TextureRamp, Multilayer Math, Wrapped, Skin, ShadeMap, Flat, Realistic, Cloth, SDF)] _LightingMode ("Lighting Type", Float) = 5 + _LightingShadowColor ("Shadow Tint--{condition_showS:(_LightingMode!=4 && _LightingMode!=1 && _LightingMode!=5)}", Color) = (1, 1, 1) + _ShadowStrength ("Shadow Strength--{condition_showS:(_LightingMode<=4 || _LightingMode==8)}", Range(0, 1)) = 1 + _LightingIgnoreAmbientColor ("Ignore Indirect Shadow Color--{condition_showS:(_LightingMode<=3 || _LightingMode==8)}", Range(0, 1)) = 1 + [Space(15)] + [HideInInspector] s_start_ShadingAddPass ("Add Pass (Point & Spot Lights)--{persistent_expand:true,default_expand:false}", Float) = 0 + [Enum(Realistic, 0, Toon, 1, Same as Base Pass, 3)] _LightingAdditiveType ("Lighting Type", Int) = 3 + _LightingAdditiveGradientStart ("Gradient Start--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = 0 + _LightingAdditiveGradientEnd ("Gradient End--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_ShadingAddPass ("Add Pass", Float) = 0 + [HideInInspector] s_start_ShadingGlobalMask ("Global Masks--{persistent_expand:true,default_expand:false}", Float) = 0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapApplyGlobalMaskIndex ("LightMap to Global Mask--{reference_property:_ShadingRampedLightMapApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapApplyGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapInverseApplyGlobalMaskIndex ("Inversed LightMap to Global Mask--{reference_property:_ShadingRampedLightMapInverseApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapInverseApplyGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] s_end_ShadingGlobalMask ("Global Masks", Float) = 0 + [HideInInspector] m_end_PoiShading ("Shading", Float) = 0 + [HideInInspector] m_start_brdf (" Reflections & Specular--{reference_property:_MochieBRDF,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/reflections-and-specular},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(MOCHIE_PBR)]_MochieBRDF ("Enable", Float) = 0 + _MochieMetallicMultiplier ("Metallic", Range(0, 1)) = 0 + _MochieRoughnessMultiplier ("Smoothness", Range(0, 1)) = 1 + _MochieReflectionTint ("Reflection Tint--{reference_property:_MochieReflectionTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _MochieReflectionTintThemeIndex ("", Int) = 0 + _MochieSpecularTint ("Specular Tint--{reference_property:_MochieSpecularTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _MochieSpecularTintThemeIndex ("", Int) = 0 + [sRGBWarning][ThryRGBAPacker(R Metallic Map, G Smoothness Map, B Reflection Mask, A Specular Mask, linear, false)]_MochieMetallicMaps ("Packed Maps [Click to Expand]--{reference_properties:[_MochieMetallicMapsPan, _MochieMetallicMapsUV, _MochieMetallicMapsStochastic, _MochieMetallicMapsMetallicChannel, _MochieMetallicMapsRoughnessChannel, _MochieMetallicMapsReflectionMaskChannel, _MochieMetallicMapsSpecularMaskChannel, _MochieMetallicMapInvert, _MochieRoughnessMapInvert, _MochieReflectionMaskInvert, _MochieSpecularMaskInvert]}", 2D) = "white" { } + [HideInInspector][Vector2]_MochieMetallicMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)]_MochieMetallicMapsUV ("UV", Int) = 0 + [HideInInspector][ToggleUI]_MochieMetallicMapsStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsMetallicChannel ("Metallic Channel", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsRoughnessChannel ("Smoothness Channel", Float) = 1 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsReflectionMaskChannel ("Reflection Mask Channel", Float) = 2 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsSpecularMaskChannel ("Specular Mask Channel", Float) = 3 + [HideInInspector][ToggleUI]_MochieMetallicMapInvert ("Invert Metallic", Float) = 0 + [HideInInspector][ToggleUI]_MochieRoughnessMapInvert ("Invert Smoothness", Float) = 0 + [HideInInspector][ToggleUI]_MochieReflectionMaskInvert ("Invert Reflection Mask", Float) = 0 + [HideInInspector][ToggleUI]_MochieSpecularMaskInvert ("Invert Specular Mask", Float) = 0 + [Space(10)] + _MochieReflectionStrength ("Reflection Visibility", Range(0, 1)) = 1 + _MochieSpecularStrength ("Specular Visibility", Range(0, 5)) = 1 + _RefSpecFresnelStrength ("Fresnel Strength", Range(0, 1)) = .5 + _SFExposureOcclusion ("Exposure Occlusion", Range(0, 1)) = 0 + [Space(10)] + [ThryTexture][NoScaleOffset]_MochieReflCube ("Cubemap", Cube) = "" { } + [ToggleUI]_MochieForceFallback ("Force Fallback", Int) = 0 + [HideInInspector] s_start_BRDFTPSMaskGroup ("TPS--{condition_showS:(_TPSPenetratorEnabled==1)}", Float) = 0 + [ThryToggleUI(true)] _BRDFTPSDepthEnabled (" TPS Depth Enabled", Float) = 0 + _BRDFTPSReflectionMaskStrength ("Reflection Mask Strength--{condition_showS:(_BRDFTPSDepthEnabled==1)}", Range(0, 1)) = 1 + _BRDFTPSSpecularMaskStrength ("Specular Mask Strength--{condition_showS:(_BRDFTPSDepthEnabled==1)}", Range(0, 1)) = 1 + [HideInInspector] s_end_BRDFTPSMaskGroup ("", Float) = 0 + [HideInInspector] s_start_ggxanisotropics(" Anisotropics--{reference_property:_GGXAnisotropics,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ThryToggle(GGX_ANISOTROPICS)]_GGXAnisotropics ("Enable", Float) = 0 + [sRGBWarning]_AnisotropyMap("Anisotropy Map--{reference_properties:[_AnisotropyMapPan, _AnisotropyMapUV, _AnisotropyMapChannel]}", 2D) = "bump" { } + [HideInInspector][Vector2]_AnisotropyMapPan("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _AnisotropyMapUV ("UV", Int) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3)]_AnisotropyMapChannel ("Channel", Float) = 0 + _Anisotropy ("Anisotropy", Range(-1, 1)) = 0 + _ReflectionAnisotropicStretch("Reflection Stretch", Range(1, 5)) = 1 + _RoughnessAnisotropy("Roughness Anisotropy", Range(0, 1)) = 1 + [HideInInspector] s_end_ggxanisotropics ("", Float) = 0 + [HideInInspector] s_start_PBRSecondSpecular ("2nd Specular--{reference_property:_Specular2ndLayer,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_Specular2ndLayer ("2nd Specular", Float) = 0 + _MochieSpecularStrength2 ("Visibility", Range(0, 5)) = 1 + _MochieRoughnessMultiplier2 ("Smoothness", Range(0, 1)) = 1 + [HideInInspector] s_end_PBRSecondSpecular ("Name", Float) = 0 + [HideInInspector] s_start_PBRSplitMaskSample ("Split Mask Sampling--{reference_property:_PBRSplitMaskSample,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_PBRSplitMaskSample ("Split Mask Sampling", Float) = 0 + [VectorLabel(tX, tY, oX, oY)]_PBRMaskScaleTiling ("Tiling/Offset", Vector) = (1, 1, 0, 0) + [ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)]_MochieMetallicMasksUV ("UV", Int) = 0 + [ToggleUI]_PBRSplitMaskStochastic ("Stochastic Sampling", Float) = 0 + [Vector2]_MochieMetallicMasksPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector] s_end_PBRSplitMaskSample ("Split Mask Sampling", Float) = 0 + [HideInInspector] s_start_brdfadvanced ("GSAA & Advanced Controls--{persistent_expand:true,default_expand:false}", Float) = 0 + [ToggleUI]_MochieLitFallback ("Lit Fallback", Float) = 1 + [ToggleUI]_IgnoreCastedShadows ("Ignore Casted Shadows", Float) = 0 + _PBRNormalSelect ("Pixel Normal Mix", Range(0, 1)) = 1 + [ThryToggleUI(true)]_MochieGSAAEnabled (" GSAA", Float) = 1 + _PoiGSAAVariance ("GSAA Variance--{condition_showS:(_MochieGSAAEnabled==1)}", Range(0, 1)) = 0.15 + _PoiGSAAThreshold ("GSAA Threshold--{condition_showS:(_MochieGSAAEnabled==1)}", Range(0, 1)) = 0.1 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieMetallicGlobalMask ("Metallic--{reference_property:_MochieMetallicGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieMetallicGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieSmoothnessGlobalMask ("Smoothness--{reference_property:_MochieSmoothnessGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieSmoothnessGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieReflectionStrengthGlobalMask ("Reflection Strength--{reference_property:_MochieReflectionStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieReflectionStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieSpecularStrengthGlobalMask ("Specular Strength--{reference_property:_MochieSpecularStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieSpecularStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] s_end_brdfadvanced ("", Float) = 0 + [HideInInspector] m_end_brdf ("", Float) = 0 + [HideInInspector] m_OutlineCategory (" Outlines--{reference_property:_EnableOutlines,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/outlines/main},hover:Documentation}}", Float) = 0 + [HideInInspector] m_specialFXCategory ("Special FX", Float) = 0 + [HideInInspector] m_start_emissionOptions (" Emission 0--{reference_property:_EnableEmission,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/special-fx/emission},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(_EMISSION)] + _EnableEmission ("Enable Emission 0", Float) = 0 + [sRGBWarning]_EmissionMask ("Emission Mask--{reference_properties:[_EmissionMaskPan, _EmissionMaskUV, _EmissionMaskChannel, _EmissionMaskInvert, _EmissionMask0GlobalMask]}", 2D) = "white" { } + [HideInInspector][Vector2]_EmissionMaskPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _EmissionMaskUV ("UV", Int) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3)]_EmissionMaskChannel ("Channel", Float) = 0 + [HideInInspector][ToggleUI]_EmissionMaskInvert ("Invert", Float) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _EmissionMask0GlobalMask ("Global Mask--{reference_property:_EmissionMask0GlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)]_EmissionMask0GlobalMaskBlendType ("Blending", Range(0, 1)) = 2 + [HDR]_EmissionColor ("Emission Color--{reference_property:_EmissionColorThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _EmissionColorThemeIndex ("", Int) = 0 + [sRGBWarning(true)][Gradient]_EmissionMap ("Emission Map--{reference_properties:[_EmissionMapPan, _EmissionMapUV]}", 2D) = "white" { } + [HideInInspector][Vector2]_EmissionMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _EmissionMapUV ("UV", Int) = 0 + _EmissionStrength ("Emission Strength", Range(0, 20)) = 0 + [ToggleUI]_EmissionBaseColorAsMap ("Use Base Colors", Float) = 0 + [ToggleUI]_EmissionReplace0 ("Override Base Color", Float) = 0 + _EmissionFluorescence ("Fluorescence", Range(0, 1)) = 0 + [HideInInspector] s_start_EmissionHueShift0 ("Color Adjust--{reference_property:_EmissionHueShiftEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionHueShiftEnabled ("Hue Shift", Float) = 0 + [ThryWideEnum(OKLab, 0, HSV, 1)] _EmissionHueShiftColorSpace ("Color Space", Int) = 0 + [ThryWideEnum(Hue Select, 0, Hue Shift, 1)] _EmissionHueSelectOrShift ("Select or Shift", Int) = 1 + _EmissionSaturation ("Saturation", Range(-1, 10)) = 0 + _EmissionHueShift ("Hue Shift", Range(0, 1)) = 0 + _EmissionHueShiftSpeed ("Hue Shift Speed", Float) = 0 + [HideInInspector] s_end_EmissionHueShift0 ("", Float) = 0 + [HideInInspector] s_start_EmissionCenterOut0 ("Center Out--{reference_property:_EmissionCenterOutEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionCenterOutEnabled ("Center Out", Float) = 0 + _EmissionCenterOutSpeed ("Flow Speed", Float) = 5 + [HideInInspector] s_end_EmissionCenterOut0 ("", Float) = 0 + [HideInInspector] s_start_EmissionLightBased0 ("Light Based--{reference_property:_EnableGITDEmission,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EnableGITDEmission ("Light Based", Float) = 0 + [Enum(World, 0, Mesh, 1)] _GITDEWorldOrMesh ("Lighting Type", Int) = 0 + _GITDEMinEmissionMultiplier ("Min Emission Multiplier", Range(0, 1)) = 1 + _GITDEMaxEmissionMultiplier ("Max Emission Multiplier", Range(0, 1)) = 0 + _GITDEMinLight ("Min Lighting", Range(0, 1)) = 0 + _GITDEMaxLight ("Max Lighting", Range(0, 1)) = 1 + [HideInInspector] s_end_EmissionLightBased0 ("", Float) = 0 + [HideInInspector] s_start_EmissionBlinking0 ("Blinking--{reference_property:_EmissionBlinkingEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionBlinkingEnabled ("Blinking", Float) = 0 + _EmissiveBlink_Min ("Emissive Blink Min", Float) = 0 + _EmissiveBlink_Max ("Emissive Blink Max", Float) = 1 + _EmissiveBlink_Velocity ("Emissive Blink Velocity", Float) = 4 + _EmissionBlinkingOffset ("Offset", Float) = 0 + [HideInInspector] s_end_EmissionBlinking0 ("", Float) = 0 + [HideInInspector] s_start_ScrollingEmission0 ("Scrolling--{reference_property:_ScrollingEmission,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI] _ScrollingEmission ("Scrolling", Float) = 0 + [ToggleUI]_EmissionScrollingUseCurve ("Use Curve", float) = 0 + [Curve]_EmissionScrollingCurve ("Curve--{condition_showS:(_EmissionScrollingUseCurve==1)}", 2D) = "white" { } + [ToggleUI]_EmissionScrollingVertexColor ("VColor as position", float) = 0 + _EmissiveScroll_Direction ("Direction", Vector) = (0, -10, 0, 0) + _EmissiveScroll_Width ("Width", Float) = 10 + _EmissiveScroll_Velocity ("Velocity", Float) = 10 + _EmissiveScroll_Interval ("Interval", Float) = 20 + _EmissionScrollingOffset ("Offset", Float) = 0 + [HideInInspector] s_end_ScrollingEmission0 ("", Float) = 0 + [Space(4)] + [ThryToggleUI(true)] _EmissionAL0Enabled (" Audio Link--{ condition_showS:_EnableAudioLink==1}", Float) = 0 + [HideInInspector] s_start_EmissionAL0Multiply ("Strength Multiply--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _EmissionAL0MultipliersBand ("Band", Int) = 0 + [VectorLabel(Min, Max)]_EmissionAL0Multipliers ("Multiplier", Vector) = (1, 1, 0, 0) + [HideInInspector] s_end_EmissionAL0Multiply ("Strength Multiply", Float) = 0 + [HideInInspector] s_start_EmissionAL0Add ("Strength Add--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _EmissionAL0StrengthBand ("Band", Int) = 0 + [VectorLabel(Min, Max)]_EmissionAL0StrengthMod ("Strength", Vector) = (0, 0, 0, 0) + [HideInInspector] s_end_EmissionAL0Add ("Strength Add", Float) = 0 + [HideInInspector] s_start_EmissionAL0COut ("Center Out--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _AudioLinkEmission0CenterOutBand ("Band", Int) = 0 + [VectorLabel(Min, Max)] _AudioLinkEmission0CenterOut ("Strength", Vector) = (0, 0, 0, 0) + _AudioLinkEmission0CenterOutSize ("Intensity Threshold", Range(0, 1)) = 0 + _AudioLinkEmission0CenterOutDuration ("Duration", Range(-1, 1)) = 1 + [HideInInspector] s_end_EmissionAL0COut ("Center Out", Float) = 0 + [HideInInspector] m_end_emissionOptions ("", Float) = 0 + [HideInInspector] m_vertexCategory ("Vertex Options", Float) = 0 + [HideInInspector] m_start_Uzumore (" View Clip Prevention (Uzumore)--{reference_property:_UzumoreCategoryToggle,button_author:{text:sigmal00,action:{type:URL,data:https://github.com/sigmal00},hover:GitHub}}, button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/vertex-options/view-clip-prevention},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(POI_UZUMORE)] _UzumoreCategoryToggle (" View Clip Prevention (Uzumore)", Float) = 0 + [ToggleUI] _UzumoreEnabled ("Animation Toggle", Float) = 1 + _UzumoreAmount ("Push Amount (m)", Float) = 0.1 + _UzumoreBias ("Push Bias", Float) = 0.001 + [sRGBWarning]_UzumoreMask ("Push Mask (A)", 2D) = "white" { } + [ThryWideEnum(R, 0, G, 1, B, 2, A, 3)] _UzumoreMaskUV ("Push Mask Channel", Float) = 3 + [HideInInspector] m_end_Uzumore ("Camera Push Back", Float) = 0 + [HideInInspector] m_modifierCategory ("Global Modifiers & Data", Float) = 0 + [HideInInspector] m_start_PoiGlobalCategory ("Global Data and Masks", Float) = 0 + [HideInInspector] m_start_GlobalThemes ("Global Themes--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/global-themes},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HDR]_GlobalThemeColor0 ("Theme Color 0", Color ) = (1, 1, 1, 1) + _GlobalThemeHue0 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed0 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation0 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue0 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HDR]_GlobalThemeColor1 ("Theme Color 1", Color ) = (1, 1, 1, 1) + _GlobalThemeHue1 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed1 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation1 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue1 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HDR]_GlobalThemeColor2 ("Theme Color 2", Color ) = (1, 1, 1, 1) + _GlobalThemeHue2 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed2 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation2 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue2 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HDR]_GlobalThemeColor3 ("Theme Color 3", Color ) = (1, 1, 1, 1) + _GlobalThemeHue3 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed3 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation3 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue3 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HideInInspector] m_end_GlobalThemes ("Global Themes", Float ) = 0 + [HideInInspector] m_start_GlobalMask ("Global Mask--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/global-masks},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalMaskModifiers ("Modifiers", Float) = 0 + [HideInInspector] m_end_GlobalMaskModifiers ("", Float) = 0 + [HideInInspector] m_end_GlobalMask ("Global Mask", Float) = 0 + [HideInInspector] m_end_PoiGlobalCategory ("Global Data and Masks ", Float) = 0 + [HideInInspector] m_start_PoiUVCategory ("UVs", Float) = 0 + [HideInInspector] m_start_Stochastic ("Stochastic Sampling--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/stochastic-sampling},hover:Documentation}}", Float) = 0 + [KeywordEnum(Deliot Heitz, Hextile, None)] _StochasticMode ("Sampling Mode", Float) = 0 + [HideInInspector] s_start_deliot ("Deliot Heitz--{persistent_expand:true,default_expand:false,condition_show:_StochasticMode==0}", Float) = 0 + _StochasticDeliotHeitzDensity ("Detiling Density", Range(0.1, 10)) = 1 + [HideInInspector] s_end_deliot ("Deliot Heitz", Float) = 0 + [HideInInspector] m_end_Stochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector] m_start_uvLocalWorld ("Local World UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/local-world-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos0 ("Local X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos1 ("Local Y", Int) = 1 + [Space(10)] + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos0 ("World X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos1 ("World Y", Int) = 2 + [HideInInspector] m_end_uvLocalWorld ("Local World UV", Float) = 0 + [HideInInspector] m_start_uvPanosphere ("Panosphere UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/panosphere-uv},hover:Documentation}}", Float) = 0 + [ToggleUI] _StereoEnabled ("Stereo Enabled", Float) = 0 + [ToggleUI] _PanoUseBothEyes ("Perspective Correct (VR)", Float) = 1 + [HideInInspector] m_end_uvPanosphere ("Panosphere UV", Float) = 0 + [HideInInspector] m_start_uvPolar ("Polar UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/polar-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8)] _PolarUV ("UV", Int) = 0 + [Vector2]_PolarCenter ("Center Coordinate", Vector) = (.5, .5, 0, 0) + _PolarRadialScale ("Radial Scale", Float) = 1 + _PolarLengthScale ("Length Scale", Float) = 1 + _PolarSpiralPower ("Spiral Power", Float) = 0 + [HideInInspector] m_end_uvPolar ("Polar UV", Float) = 0 + [HideInInspector] m_end_PoiUVCategory ("UVs ", Float) = 0 + [HideInInspector] m_start_PoiPostProcessingCategory ("Post Processing", Float) = 0 + [HideInInspector] m_start_PPAnimations ("PP Animations--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/post-processing/pp-animations},hover:Documentation}}", Float) = 0 + [Helpbox(1)] _PPHelp ("This section meant for real time adjustments through animations and not to be changed in unity", Int) = 0 + _PPLightingMultiplier ("Lighting Mulitplier", Float) = 1 + _PPLightingAddition ("Lighting Add", Float) = 0 + _PPEmissionMultiplier ("Emission Multiplier", Float) = 1 + _PPFinalColorMultiplier ("Final Color Multiplier", Float) = 1 + [HideInInspector] m_end_PPAnimations ("PP Animations ", Float) = 0 + [HideInInspector] m_end_PoiPostProcessingCategory ("Post Processing ", Float) = 0 + [HideInInspector] m_thirdpartyCategory ("Third Party", Float) = 0 + [HideInInspector] m_renderingCategory ("Rendering--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/main},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.CullMode)] _Cull ("Cull", Float) = 2 + [DoNotAnimate][Enum(UnityEngine.Rendering.CompareFunction)] _ZTest ("ZTest", Float) = 4 + [DoNotAnimate][Enum(Off, 0, On, 1)] _ZWrite ("ZWrite", Int) = 1 + [DoNotAnimate][ThryMask(Thry.ColorMaskFlags)] _ColorMask ("Color Mask", Int) = 15 + [DoNotAnimate] _OffsetFactor ("Offset Factor", Float) = 0.0 + [DoNotAnimate] _OffsetUnits ("Offset Units", Float) = 0.0 + [DoNotAnimate][ToggleUI] _RenderingReduceClipDistance ("Reduce Clip Distance", Float) = 0 + [DoNotAnimate][ToggleUI] _ZClip ("Z Clip", Float) = 1 + [DoNotAnimate][ToggleUI] _IgnoreFog ("Ignore Fog", Float) = 0 + [DoNotAnimate][ToggleUI]_FlipBackfaceNormals ("Flip Backface Normals", Int) = 1 + [DoNotAnimate][HideInInspector] Instancing ("Instancing", Float) = 0 //add this property for instancing variants settings to be shown + [ToggleUI] _RenderingEarlyZEnabled ("Early Z", Float) = 0 + [HideInInspector] m_start_blending ("Blending--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/blending},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOp ("RGB Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlend ("RGB Destination Blend", Int) = 0 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOp ("RGB Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlend ("RGB Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_start_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOpAlpha ("Alpha Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlendAlpha ("Alpha Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlendAlpha ("Alpha Destination Blend", Int) = 10 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOpAlpha ("Alpha Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlendAlpha ("Alpha Source Blend", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlendAlpha ("Alpha Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_end_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [HideInInspector] m_end_blending ("Blending", Float) = 0 + [HideInInspector] m_start_StencilPassOptions ("Stencil--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/stencil},hover:Documentation}}", Float) = 0 + [ThryWideEnum(Simple, 0, Front Face vs Back Face, 1)] _StencilType ("Stencil Type", Float) = 0 + [IntRange] _StencilRef ("Stencil Reference Value", Range(0, 255)) = 0 + [IntRange] _StencilReadMask ("Stencil ReadMask Value", Range(0, 255)) = 255 + [IntRange] _StencilWriteMask ("Stencil WriteMask Value", Range(0, 255)) = 255 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilPassOp ("Stencil Pass Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFailOp ("Stencil Fail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilZFailOp ("Stencil ZFail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilCompareFunction ("Stencil Compare Function--{condition_showS:(_StencilType==0)}", Float) = 8 + [HideInInspector] m_start_StencilPassBackOptions("Back--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp0 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackPassOp ("Back Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackFailOp ("Back Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackZFailOp ("Back ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilBackCompareFunction ("Back Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassBackOptions("Back", Float) = 0 + [HideInInspector] m_start_StencilPassFrontOptions("Front--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp1 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontPassOp ("Front Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontFailOp ("Front Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontZFailOp ("Front ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilFrontCompareFunction ("Front Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassFrontOptions("Front", Float) = 0 + [HideInInspector] m_end_StencilPassOptions ("Stencil", Float) = 0 + } + SubShader + { + Tags { "RenderType" = "Opaque" "Queue" = "Geometry" "VRCFallback" = "Standard" } + Pass + { + Name "Base" + Tags { "LightMode" = "ForwardBase" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Back + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_EMISSIONMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdbase + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #pragma multi_compile_fragment _ VERTEXLIGHT_ON + #define POI_PASS_BASE + #pragma skip_variants LIGHTMAP_ON DYNAMICLIGHTMAP_ON LIGHTMAP_SHADOW_MIXING SHADOWS_SHADOWMASK DIRLIGHTMAP_COMBINED _MIXED_LIGHTING_SUBTRACTIVE + #pragma skip_variants DECALS_OFF DECALS_3RT DECALS_4RT DECAL_SURFACE_GRADIENT _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + #pragma skip_variants _ADDITIONAL_LIGHT_SHADOWS + #pragma skip_variants PROBE_VOLUMES_OFF PROBE_VOLUMES_L1 PROBE_VOLUMES_L2 + #pragma skip_variants _SCREEN_SPACE_OCCLUSION + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + #ifndef VRC_LIGHT_VOLUMES_INCLUDED + #define VRC_LIGHT_VOLUMES_INCLUDED + #define VRCLV_VERSION 2 + #define VRCLV_MAX_VOLUMES_COUNT 32 + #define VRCLV_MAX_LIGHTS_COUNT 128 + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + cbuffer LightVolumeUniforms { + #endif + uniform float _UdonLightVolumeEnabled; + uniform float _UdonLightVolumeVersion; + uniform float _UdonLightVolumeCount; + uniform float _UdonLightVolumeAdditiveMaxOverdraw; + uniform float _UdonLightVolumeAdditiveCount; + uniform float _UdonLightVolumeProbesBlend; + uniform float _UdonLightVolumeSharpBounds; + uniform float4x4 _UdonLightVolumeInvWorldMatrix[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeRotation[VRCLV_MAX_VOLUMES_COUNT * 2]; // Legacy! Used in this version to have back compatibility with older worlds. Array commented above will be used in future releases! Legacy! + uniform float3 _UdonLightVolumeInvLocalEdgeSmooth[VRCLV_MAX_VOLUMES_COUNT]; + uniform float3 _UdonLightVolumeUvw[VRCLV_MAX_VOLUMES_COUNT * 6]; // Legacy! AABB Bounds of islands on the 3D Texture atlas. Array commented above will be used in future releases! Legacy! + uniform float4 _UdonLightVolumeOcclusionUvw[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeColor[VRCLV_MAX_VOLUMES_COUNT]; + uniform float _UdonPointLightVolumeCount; + uniform float _UdonPointLightVolumeCubeCount; + uniform float4 _UdonPointLightVolumePosition[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeColor[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeDirection[VRCLV_MAX_LIGHTS_COUNT]; + uniform float3 _UdonPointLightVolumeCustomID[VRCLV_MAX_LIGHTS_COUNT]; + uniform float _UdonLightBrightnessCutoff; + uniform float _UdonLightVolumeOcclusionCount; + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + } + #endif + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + uniform Texture3D _UdonLightVolume; + uniform SamplerState sampler_UdonLightVolume; + uniform Texture2DArray _UdonPointLightVolumeTexture; + #define LV_SAMPLE(tex, uvw) tex.SampleLevel(sampler_UdonLightVolume, uvw, 0) + #else + #define LV_SAMPLE(tex, uvw) float4(0,0,0,0) + #endif + #define LV_PI 3.141592653589793f + #define LV_PI2 6.283185307179586f + float LV_Smoothstep01(float x) { + return x * x * (3 - 2 * x); + } + float3 LV_MultiplyVectorByQuaternion(float3 v, float4 q) { + float3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); + } + float3 LV_MultiplyVectorByMatrix2x3(float3 v, float3 r0, float3 r1) { + float3 r2 = cross(r0, r1); + return float3(dot(v, r0), dot(v, r1), dot(v, r2)); + } + float LV_FastAcos(float x) { + float absX = abs(x); + float res = -0.156583f * absX + LV_PI * 0.5f; + res *= sqrt(1.0f - absX); + return (x >= 0) ? res : (LV_PI - res); + } + float LV_DistributionGGX(float NoH, float roughness) { + float f = (roughness - 1) * ((roughness + 1) * (NoH * NoH)) + 1; + return (roughness * roughness) / ((float) LV_PI * f * f); + } + bool LV_PointLocalAABB(float3 localUVW) { + return all(abs(localUVW) <= 0.5); + } + float3 LV_LocalFromVolume(uint volumeID, float3 worldPos) { + return mul(_UdonLightVolumeInvWorldMatrix[volumeID], float4(worldPos, 1.0)).xyz; + } + float LV_EvaluateSH(float L0, float3 L1, float3 n) { + return L0 + dot(L1, n); + } + float4 LV_SampleCubemapArray(uint id, float3 dir) { + float3 absDir = abs(dir); + float2 uv; + uint face; + if (absDir.x >= absDir.y && absDir.x >= absDir.z) { + face = dir.x > 0 ? 0 : 1; + uv = float2((dir.x > 0 ? -dir.z : dir.z), -dir.y) * rcp(absDir.x); + } else if (absDir.y >= absDir.z) { + face = dir.y > 0 ? 2 : 3; + uv = float2(dir.x, (dir.y > 0 ? dir.z : -dir.z)) * rcp(absDir.y); + } else { + face = dir.z > 0 ? 4 : 5; + uv = float2((dir.z > 0 ? dir.x : -dir.x), -dir.y) * rcp(absDir.z); + } + float3 uvid = float3(uv * 0.5 + 0.5, id * 6 + face); + return LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + } + float4 LV_ProjectQuadLightIrradianceSH(float3 shadingPosition, float3 lightVertices[4]) { + [unroll] for (uint edge0 = 0; edge0 < 4; edge0++) { + lightVertices[edge0] = normalize(lightVertices[edge0] - shadingPosition); + } + const float3 zhDir0 = float3(0.866025, -0.500001, -0.000004); + const float3 zhDir1 = float3(-0.759553, 0.438522, -0.480394); + const float3 zhDir2 = float3(-0.000002, 0.638694, 0.769461); + const float3 zhWeightL1y = float3(2.1995339f, 2.50785367f, 1.56572711f); + const float3 zhWeightL1z = float3(-1.82572523f, -2.08165037f, 0.00000000f); + const float3 zhWeightL1x = float3(2.42459869f, 1.44790525f, 0.90397552f); + float solidAngle = 0.0; + float3 surfaceIntegral = 0.0; + [loop] for (uint edge1 = 0; edge1 < 4; edge1++) { + uint next = (edge1 + 1) % 4; + uint prev = (edge1 + 4 - 1) % 4; + float3 prevVert = lightVertices[prev]; + float3 thisVert = lightVertices[edge1]; + float3 nextVert = lightVertices[next]; + float3 a = cross(thisVert, prevVert); + float3 b = cross(thisVert, nextVert); + float lenA = length(a); + float lenB = length(b); + solidAngle += LV_FastAcos(clamp(dot(a, b) / (lenA * lenB), -1, 1)); + float3 mu = b * rcp(lenB); + float cosGamma = dot(thisVert, nextVert); + float gamma = LV_FastAcos(clamp(cosGamma, -1, 1)); + surfaceIntegral.x += gamma * dot(zhDir0, mu); + surfaceIntegral.y += gamma * dot(zhDir1, mu); + surfaceIntegral.z += gamma * dot(zhDir2, mu); + } + solidAngle = solidAngle - LV_PI2; + surfaceIntegral *= 0.5; + const float normalizationL0 = 0.5f * sqrt(1.0f / LV_PI); + float l0 = normalizationL0 * solidAngle; + float l1y = dot(zhWeightL1y, surfaceIntegral); + float l1z = dot(zhWeightL1z, surfaceIntegral); + float l1x = dot(zhWeightL1x, surfaceIntegral); + const float cosineKernelL0 = LV_PI; // (1) + const float cosineKernelL1 = LV_PI2 / 3.0f; // (1) + const float oneOverPi = 1.0f / LV_PI; // (2) + const float normalizationL1 = 0.5f * sqrt(3.0f / LV_PI); // (3) + const float weightL0 = cosineKernelL0 * normalizationL0 * oneOverPi; // (1), (2), (3) + const float weightL1 = cosineKernelL1 * normalizationL1 * oneOverPi; // (1), (2), (3) + l0 *= weightL0; + l1y *= weightL1; + l1z *= weightL1; + l1x *= weightL1; + return float4(l1x, l1y, l1z, l0); + } + void LV_QuadLight(float3 worldPos, float3 centroidPos, float4 rotationQuat, float2 size, float3 color, float sqMaxDist, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 lightToWorldPos = worldPos - centroidPos; + float3 normal = LV_MultiplyVectorByQuaternion(float3(0, 0, 1), rotationQuat); + if (dot(normal, lightToWorldPos) < 0.0) return; + float sqCutoffDist = sqMaxDist - dot(lightToWorldPos, lightToWorldPos); + color.rgb *= saturate(sqCutoffDist / sqMaxDist) * LV_PI * occlusion; + float2 halfSize = size * 0.5f; + float3 xAxis = LV_MultiplyVectorByQuaternion(float3(1, 0, 0), rotationQuat); + float3 yAxis = cross(normal, xAxis); + float3 verts[4]; + verts[0] = centroidPos + (-halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[1] = centroidPos + ( halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[2] = centroidPos + ( halfSize.x * xAxis) + (-halfSize.y * yAxis); + verts[3] = centroidPos + (-halfSize.x * xAxis) + (-halfSize.y * yAxis); + float4 areaLightSH = LV_ProjectQuadLightIrradianceSH(worldPos, verts); + float lenL1 = length(areaLightSH.xyz); + if (lenL1 > areaLightSH.w) areaLightSH.xyz *= areaLightSH.w / lenL1; + L0 += areaLightSH.w * color.rgb; + L1r += areaLightSH.xyz * color.r; + L1g += areaLightSH.xyz * color.g; + L1b += areaLightSH.xyz * color.b; + count++; + } + float3 LV_PointLightAttenuation(float sqdist, float sqlightSize, float3 color, float brightnessCutoff, float sqMaxDist) { + float mask = saturate(1 - sqdist / sqMaxDist); + return mask * mask * color * sqlightSize / (sqdist + sqlightSize); + } + float LV_PointLightSolidAngle(float sqdist, float sqlightSize) { + return saturate(sqrt(sqdist / (sqlightSize + sqdist))); + } + void LV_SphereLight(float sqdist, float3 dirN, float sqlightSize, float3 color, float occlusion, float sqMaxDist, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 att = LV_PointLightAttenuation(sqdist, sqlightSize, color, _UdonLightBrightnessCutoff, sqMaxDist); + float3 l0 = att * occlusion; + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLight(float sqdist, float3 dirN, float sqlightSize, float3 att, float spotMask, float cosAngle, float coneFalloff, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float smoothedCone = LV_Smoothstep01(saturate(spotMask * coneFalloff)); + float3 l0 = att * (occlusion * smoothedCone); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * saturate(1 - cosAngle)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightCookie(float sqdist, float3 dirN, float sqlightSize, float3 att, float4 lightRot, float tanAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 localDir = LV_MultiplyVectorByQuaternion(-dirN, lightRot); + float2 uv = localDir.xy * rcp(localDir.z * tanAngle); + if ( + localDir.z <= 0.0 || // Culling by direction + abs(uv.x) > 1.0 || abs(uv.y) > 1.0 // Culling by UV + ) return; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 - customId - 1; + float3 uvid = float3(uv * 0.5 + 0.5, id); + float angleSize = saturate(rsqrt(1 + tanAngle * tanAngle)); + float4 cookie = LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + float3 l0 = att * cookie.rgb * (cookie.a * occlusion); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * (1 - angleSize)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightAttenuationLUT(float sqdist, float3 dirN, float sqlightSize, float3 color, float spotMask, float cosAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float dirRadius = sqdist * abs(sqlightSize); + float spot = 1 - saturate(spotMask * rcp(1 - cosAngle)); + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId - 1; + float3 uvid = float3(sqrt(float2(spot, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * occlusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } + void LV_PointLight(uint id, float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 customID_data = _UdonPointLightVolumeCustomID[id]; + int shadowId = (int) customID_data.y; // Shadowmask id + int customId = (int) customID_data.x; // Custom Texture ID + float sqrRange = customID_data.z; // Squared culling distance + float4 pos = _UdonPointLightVolumePosition[id]; // Light position and inversed squared range + float3 dir = pos.xyz - worldPos; + float sqlen = max(dot(dir, dir), 1e-6); + if (sqlen > sqrRange) return; // Early distance based culling + float3 dirN = dir * rsqrt(sqlen); + float lightOcclusion = 1; + if (_UdonLightVolumeOcclusionCount != 0 && shadowId >= 0) { + lightOcclusion = dot(occlusion, float4(shadowId == 0, shadowId == 1, shadowId == 2, shadowId == 3)); + } + float4 color = _UdonPointLightVolumeColor[id]; // Color, angle + float4 ldir = _UdonPointLightVolumeDirection[id]; // Dir + falloff or Rotation + if (pos.w < 0) { // It is a spot light + float angle = color.w; + float spotMask = dot(ldir.xyz, -dirN) - angle; + if(customId >= 0 && spotMask < 0) return; // Spot cone based culling + if (customId > 0) { // If it uses Attenuation LUT + LV_SphereSpotLightAttenuationLUT(sqlen, dirN, -pos.w, color.rgb, spotMask, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + float3 att = LV_PointLightAttenuation(sqlen, -pos.w, color.rgb, _UdonLightBrightnessCutoff, sqrRange); + if (customId < 0) { // If uses cookie + LV_SphereSpotLightCookie(sqlen, dirN, -pos.w, att, ldir, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + LV_SphereSpotLight(sqlen, dirN, -pos.w, att, spotMask, angle, ldir.w, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + } else if (color.w <= 1.5f) { // It is a point light + if (customId > 0) { // Using LUT + float invSqRange = abs(pos.w); // Sign of range defines if it's point light (positive) or a spot light (negative) + float dirRadius = sqlen * invSqRange; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId; + float3 uvid = float3(sqrt(float2(0, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * lightOcclusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } else { // If it uses default parametric attenuation + float3 l0 = 0, l1r = 0, l1g = 0, l1b = 0; + LV_SphereLight(sqlen, dirN, pos.w, color.rgb, lightOcclusion, sqrRange, l0, l1r, l1g, l1b, count); + float3 cubeColor = 1; + if (customId < 0) { // If it uses a cubemap + uint id = -customId - 1; // Cubemap ID starts from zero and should not take in count texture array slices count. + cubeColor = LV_SampleCubemapArray(id, LV_MultiplyVectorByQuaternion(dirN, ldir)).xyz; + } + L0 += l0 * cubeColor; + L1r += l1r * cubeColor.r; + L1g += l1g * cubeColor.g; + L1b += l1b * cubeColor.b; + } + } else { // It is an area light + LV_QuadLight(worldPos, pos.xyz, ldir, float2(pos.w, color.w - 2.0f), color.rgb, sqrRange, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + void LV_SampleLightVolumeTex(float3 uvw0, float3 uvw1, float3 uvw2, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b) { + float4 tex0 = LV_SAMPLE(_UdonLightVolume, uvw0); + float4 tex1 = LV_SAMPLE(_UdonLightVolume, uvw1); + float4 tex2 = LV_SAMPLE(_UdonLightVolume, uvw2); + L0 = tex0.rgb; + L1r = float3(tex1.r, tex2.r, tex0.a); + L1g = float3(tex1.g, tex2.g, tex1.a); + L1b = float3(tex1.b, tex2.b, tex2.a); + } + float LV_BoundsMask(float3 localUVW, float3 invLocalEdgeSmooth) { + float3 distToMin = (localUVW + 0.5) * invLocalEdgeSmooth; + float3 distToMax = (0.5 - localUVW) * invLocalEdgeSmooth; + float3 fade = saturate(min(distToMin, distToMax)); + return fade.x * fade.y * fade.z; + } + void LV_SampleLightProbe(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz; + L1g += unity_SHAg.xyz; + L1b += unity_SHAb.xyz; + } + void LV_SampleLightProbeDering(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz * 0.565f; + L1g += unity_SHAg.xyz * 0.565f; + L1b += unity_SHAb.xyz * 0.565f; + } + void LV_SampleVolume(uint id, float3 localUVW, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + float3 uvw0 = uvwScaled + _UdonLightVolumeUvw[uvwID].xyz; + float3 uvw1 = uvwScaled + _UdonLightVolumeUvw[uvwID + 2].xyz; + float3 uvw2 = uvwScaled + _UdonLightVolumeUvw[uvwID + 4].xyz; + float3 l0, l1r, l1g, l1b; + LV_SampleLightVolumeTex(uvw0, uvw1, uvw2, l0, l1r, l1g, l1b); + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + occlusion = 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + occlusion = 1; + } + float4 color = _UdonLightVolumeColor[id]; + L0 += l0 * color.rgb; + l1r *= color.r; + l1g *= color.g; + l1b *= color.b; + if (color.a != 0) { + float3 r0 = _UdonLightVolumeRotation[id * 2].xyz; + float3 r1 = _UdonLightVolumeRotation[id * 2 + 1].xyz; + L1r += LV_MultiplyVectorByMatrix2x3(l1r, r0, r1); + L1g += LV_MultiplyVectorByMatrix2x3(l1g, r0, r1); + L1b += LV_MultiplyVectorByMatrix2x3(l1b, r0, r1); + } else { + L1r += l1r; + L1g += l1g; + L1b += l1b; + } + } + float4 LV_SampleVolumeOcclusion(uint id, float3 localUVW) { + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + return 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + return 1; + } + } + void LV_PointLightVolumeSH(float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + uint pointCount = min((uint) _UdonPointLightVolumeCount, VRCLV_MAX_LIGHTS_COUNT); + if (pointCount == 0) return; + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_LIGHTS_COUNT); + uint pcount = 0; // Point lights counter + [loop] for (uint pid = 0; pid < pointCount && pcount < maxOverdraw; pid++) { + LV_PointLight(pid, worldPos, occlusion, L0, L1r, L1g, L1b, pcount); + } + } + void LV_LightVolumeSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + if (volumesCount == 0) { // Legacy! Fallback to default light probes if Light Volume are not enabled or a version is too old to have a support. Legacy! + LV_SampleLightProbe(L0, L1r, L1g, L1b); + return; + } + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + bool lightProbesBlend = _UdonLightVolumeProbesBlend; + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + [loop] for (uint id = 0; id < volumesCount; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA && lightProbesBlend) { + LV_SampleLightProbe(L0, L1r, L1g, L1b); + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + float3 L0_A = 0; + float3 L1r_A = 0; + float3 L1g_A = 0; + float3 L1b_A = 0; + float4 occlusion_A = 1; + LV_SampleVolume(volumeID_A, localUVW_A, L0_A, L1r_A, L1g_A, L1b_A, occlusion_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || isNoA || (_UdonLightVolumeSharpBounds && isNoB)) { // Returning SH A result if it's the center of mask or out of bounds + L0 += L0_A; + L1r += L1r_A; + L1g += L1g_A; + L1b += L1b_A; + occlusion = occlusion_A; + occlusion *= mOcclusion; + return; + } + float3 L0_B = 0; + float3 L1r_B = 0; + float3 L1g_B = 0; + float3 L1b_B = 0; + float4 occlusion_B = 1; + if (isNoB && lightProbesBlend) { // No Volume found and light volumes blending enabled + LV_SampleLightProbe(L0_B, L1r_B, L1g_B, L1b_B); + } else { // Blending Volume A and Volume B + localUVW_B = isNoB ? localUVW : localUVW_B; + volumeID_B = isNoB ? volumesCount - 1 : volumeID_B; + LV_SampleVolume(volumeID_B, localUVW_B, L0_B, L1r_B, L1g_B, L1b_B, occlusion_B); + } + occlusion = lerp(occlusion_B, occlusion_A, mask); + occlusion *= mOcclusion; + L0 += lerp(L0_B, L0_A, mask); + L1r += lerp(L1r_B, L1r_A, mask); + L1g += lerp(L1g_B, L1g_A, mask); + L1b += lerp(L1b_B, L1b_A, mask); + } + void LV_LightVolumeAdditiveSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + if (additiveCount == 0 && (uint) _UdonPointLightVolumeCount == 0) return; // Legacy! + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW for Y Axis and Free rotations + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + uint count = min(_UdonLightVolumeOcclusionCount == 0 ? additiveCount : volumesCount, VRCLV_MAX_VOLUMES_COUNT); // Only use all volumes if occlusion volumes are enabled + [loop] for (uint id = 0; id < count; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA || _UdonLightVolumeOcclusionCount == 0) { + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + occlusion = LV_SampleVolumeOcclusion(volumeID_A, localUVW_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || (_UdonLightVolumeSharpBounds && isNoB)) { + occlusion *= mOcclusion; + return; // Returning A result if it's the center of mask or out of bounds + } + if (isNoB) occlusion = lerp(1, occlusion, mask); + else occlusion = lerp(LV_SampleVolumeOcclusion(volumeID_B, localUVW_B), occlusion, mask); + occlusion *= mOcclusion; + } + float3 LightVolumeSpecular(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specColor = max(float3(dot(reflect(-L1r, worldNormal), viewDir), dot(reflect(-L1g, worldNormal), viewDir), dot(reflect(-L1b, worldNormal), viewDir)), 0); + float3 rDir = normalize(normalize(L1r) + viewDir); + float3 gDir = normalize(normalize(L1g) + viewDir); + float3 bDir = normalize(normalize(L1b) + viewDir); + float rNh = saturate(dot(worldNormal, rDir)); + float gNh = saturate(dot(worldNormal, gDir)); + float bNh = saturate(dot(worldNormal, bDir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float rSpec = LV_DistributionGGX(rNh, roughExp); + float gSpec = LV_DistributionGGX(gNh, roughExp); + float bSpec = LV_DistributionGGX(bNh, roughExp); + float3 specs = (rSpec + gSpec + bSpec) * f0; + float3 coloredSpecs = specs * specColor; + float3 a = coloredSpecs + specs * L0; + float3 b = coloredSpecs * 3; + return max(lerp(a, b, smoothness) * 0.5f, 0.0); + } + float3 LightVolumeSpecular(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecular(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeSpecularDominant(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 dominantDir = L1r + L1g + L1b; + float3 dir = normalize(normalize(dominantDir) + viewDir); + float nh = saturate(dot(worldNormal, dir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float spec = LV_DistributionGGX(nh, roughExp); + return max(spec * L0 * f0, 0.0) * 1.5f; + } + float3 LightVolumeSpecularDominant(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecularDominant(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeEvaluate(float3 worldNormal, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + return float3(LV_EvaluateSH(L0.r, L1r, worldNormal), LV_EvaluateSH(L0.g, L1g, worldNormal), LV_EvaluateSH(L0.b, L1b, worldNormal)); + } + void LightVolumeSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled == 0) { + LV_SampleLightProbeDering(L0, L1r, L1g, L1b); + } else { + float4 occlusion = 1; + LV_LightVolumeSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + void LightVolumeAdditiveSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled != 0) { + float4 occlusion = 1; + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + float3 LightVolumeSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float3 LightVolumeAdditiveSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return 0; + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float LightVolumesEnabled() { + return _UdonLightVolumeEnabled; + } + float LightVolumesVersion() { + return _UdonLightVolumeVersion == 0 ? _UdonLightVolumeEnabled : _UdonLightVolumeVersion; + } + #endif + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + #ifdef _EMISSION + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMap; + #endif + float4 _EmissionMap_ST; + float2 _EmissionMapPan; + float _EmissionMapUV; + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMask; + #endif + float4 _EmissionMask_ST; + float2 _EmissionMaskPan; + float _EmissionMaskUV; + float _EmissionMaskInvert; + float _EmissionMaskChannel; + float _EmissionMask0GlobalMask; + float _EmissionMask0GlobalMaskBlendType; + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionScrollingCurve; + #endif + float4 _EmissionScrollingCurve_ST; + float _EmissionFluorescence; + float4 _EmissionColor; + float _EmissionBaseColorAsMap; + float _EmissionStrength; + float _EmissionHueShiftEnabled; + float _EmissionHueShiftColorSpace; + float _EmissionHueSelectOrShift; + float _EmissionSaturation; + float _EmissionHueShift; + float _EmissionHueShiftSpeed; + float _EmissionCenterOutEnabled; + float _EmissionCenterOutSpeed; + float _EnableGITDEmission; + float _GITDEWorldOrMesh; + float _GITDEMinEmissionMultiplier; + float _GITDEMaxEmissionMultiplier; + float _GITDEMinLight; + float _GITDEMaxLight; + float _EmissionBlinkingEnabled; + float _EmissiveBlink_Min; + float _EmissiveBlink_Max; + float _EmissiveBlink_Velocity; + float _EmissionBlinkingOffset; + float _ScrollingEmission; + float4 _EmissiveScroll_Direction; + float _EmissiveScroll_Width; + float _EmissiveScroll_Velocity; + float _EmissiveScroll_Interval; + float _EmissionScrollingOffset; + float _EmissionReplace0; + float _EmissionScrollingVertexColor; + float _EmissionScrollingUseCurve; + float _EmissionColorThemeIndex; + float _EmissionAL0Enabled; + float2 _EmissionAL0StrengthMod; + float _EmissionAL0StrengthBand; + float2 _AudioLinkEmission0CenterOut; + float _AudioLinkEmission0CenterOutSize; + float _AudioLinkEmission0CenterOutBand; + float _AudioLinkEmission0CenterOutDuration; + float2 _EmissionAL0Multipliers; + float _EmissionAL0MultipliersBand; + #endif + #ifdef MOCHIE_PBR + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _MochieMetallicMaps; + float _PBRMapsStochastic; + #endif + float4 _MochieMetallicMaps_ST; + float2 _MochieMetallicMapsPan; + float _MochieMetallicMapsUV; + float _MochieMetallicMapsStochastic; + float _MochieMetallicMapInvert; + float _MochieRoughnessMapInvert; + float _MochieReflectionMaskInvert; + float _MochieSpecularMaskInvert; + float _MochieMetallicMapsMetallicChannel; + float _MochieMetallicMapsRoughnessChannel; + float _MochieMetallicMapsReflectionMaskChannel; + float _MochieMetallicMapsSpecularMaskChannel; + float _PBRNormalSelect; + float _MochieReflectionTintThemeIndex; + float _MochieSpecularTintThemeIndex; + float _MochieRoughnessMultiplier; + float _MochieMetallicMultiplier; + float _MochieReflectionStrength; + float _MochieSpecularStrength; + float4 _MochieSpecularTint; + float4 _MochieReflectionTint; + float _MochieLitFallback; + float _IgnoreCastedShadows; + float _PBRSplitMaskSample; + float _PBRSplitMaskStochastic; + float4 _PBRMaskScaleTiling; + float _MochieMetallicMasksUV; + float4 _MochieMetallicMasksPan; + float _Specular2ndLayer; + float _MochieSpecularStrength2; + float _MochieRoughnessMultiplier2; + float _RefSpecFresnelStrength; + float _SFExposureOcclusion; + TextureCube _MochieReflCube; + float4 _MochieReflCube_HDR; + float _MochieForceFallback; + float _MochieGSAAEnabled; + float _PoiGSAAVariance; + float _PoiGSAAThreshold; + float _BRDFTPSReflectionMaskStrength; + float _BRDFTPSSpecularMaskStrength; + float _BRDFTPSDepthEnabled; + float _MochieMetallicGlobalMask; + float _MochieMetallicGlobalMaskBlendType; + float _MochieSmoothnessGlobalMask; + float _MochieSmoothnessGlobalMaskBlendType; + float _MochieReflectionStrengthGlobalMask; + float _MochieReflectionStrengthGlobalMaskBlendType; + float _MochieSpecularStrengthGlobalMask; + float _MochieSpecularStrengthGlobalMaskBlendType; + #endif + float _PPLightingMultiplier; + float _PPLightingAddition; + float _PPEmissionMultiplier; + float _PPFinalColorMultiplier; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef VIGNETTE_MASKED + #ifdef _LIGHTINGMODE_REALISTIC + #if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) + #if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) + #define SUBTRACTIVE_LIGHTING 1 + #endif + #endif + float FadeShadows(float attenuation, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if HANDLE_SHADOWS_BLENDING_IN_GI || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + #if ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + attenuation = poiLight.attenuation; + #endif + float viewZ = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float shadowFadeDistance = UnityComputeShadowFadeDistance(poiMesh.worldPos, viewZ); + float shadowFade = UnityComputeShadowFade(shadowFadeDistance); + float bakedAttenuation = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + attenuation = UnityMixRealtimeAndBakedShadows(attenuation, bakedAttenuation, shadowFade); + #endif + return attenuation; + } + void ApplySubtractiveLighting(inout UnityIndirect indirectLight, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if SUBTRACTIVE_LIGHTING + poiLight.attenuation = FadeShadows(poiLight.attenuation, poiLight, poiMesh, poiCam); + float ndotl = saturate(dot(poiMesh.normals[0], _WorldSpaceLightPos0.xyz)); + float3 shadowedLightEstimate = ndotl * (1 - poiLight.attenuation) * _LightColor0.rgb; + float3 subtractedLight = indirectLight.diffuse - shadowedLightEstimate; + subtractedLight = max(subtractedLight, unity_ShadowColor.rgb); + subtractedLight = lerp(subtractedLight, indirectLight.diffuse, _LightShadowData.x); + indirectLight.diffuse = min(subtractedLight, indirectLight.diffuse); + #endif + } + UnityIndirect CreateIndirectLight(in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight) + { + UnityIndirect indirectLight; + indirectLight.diffuse = 0; + indirectLight.specular = 0; + #if defined(LIGHTMAP_ON) + indirectLight.diffuse = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, poiMesh.lightmapUV.xy)); + #if defined(DIRLIGHTMAP_COMBINED) + float4 lightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, poiMesh.lightmapUV.xy); + indirectLight.diffuse = DecodeDirectionalLightmap(indirectLight.diffuse, lightmapDirection, poiMesh.normals[1]); + #endif + ApplySubtractiveLighting(indirectLight, poiLight, poiMesh, poiCam); + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float3 dynamicLightDiffuse = DecodeRealtimeLightmap( + UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, poiMesh.lightmapUV.zw) + ); + #if defined(DIRLIGHTMAP_COMBINED) + float4 dynamicLightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_DynamicDirectionality, unity_DynamicLightmap, poiMesh.lightmapUV.zw); + indirectLight.diffuse += DecodeDirectionalLightmap(dynamicLightDiffuse, dynamicLightmapDirection, poiMesh.normals[1]); + #else + indirectLight.diffuse += dynamicLightDiffuse; + #endif + #endif + #if !defined(LIGHTMAP_ON) && !defined(DYNAMICLIGHTMAP_ON) + #if UNITY_LIGHT_PROBE_PROXY_VOLUME + if (unity_ProbeVolumeParams.x == 1) + { + indirectLight.diffuse = SHEvalLinearL0L1_SampleProbeVolume( + float4(poiMesh.normals[1], 1), poiMesh.worldPos + ); + indirectLight.diffuse = max(0, indirectLight.diffuse); + #if defined(UNITY_COLORSPACE_GAMMA) + indirectLight.diffuse = LinearToGammaSpace(indirectLight.diffuse); + #endif + } + else + { + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + } + #else + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + #endif + #endif + indirectLight.diffuse *= poiLight.occlusion; + return indirectLight; + } + #endif + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_REALISTIC + UnityLight light; + light.dir = poiLight.direction; + light.color = max(0, _LightColor0.rgb) * saturate(shadowAttenuation * attenuation * poiLight.detailShadow); + light.ndotl = poiLight.nDotLSaturated; + UnityIndirect indirectLight = (UnityIndirect)0; + #ifdef UNITY_PASS_FORWARDBASE + indirectLight = CreateIndirectLight(poiMesh, poiCam, poiLight); + #endif + #ifdef UNITY_PASS_FORWARDBASE + light.color = max(light.color * 1.0, 0); + light.color = max(light.color + 0.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse * 1.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse + 0.0, 0); + #endif + poiLight.rampedLightMap = poiLight.nDotLSaturated; + poiLight.finalLighting = max(POI_BRDF_PBS(1, 0, 0, 0, poiMesh.normals[1], poiCam.viewDir, light, indirectLight).xyz, _LightingMinLightBrightness); + #ifdef UNITY_PASS_FORWARDBASE + if (_UdonLightVolumeEnabled && 1.0) + { + float3 L0 = 0; + float3 L1r = 0; + float3 L1g = 0; + float3 L1b = 0; + #ifdef LIGHTMAP_ON + LightVolumeAdditiveSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + poiLight.finalLighting += clamp(LightVolumeEvaluate(poiMesh.normals[1], L0, L1r, L1g, L1b), _LightingMinLightBrightness, _LightingCap); + #endif + } + #endif + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + float calculateGlowInTheDark(in float minLight, in float maxLight, in float minEmissionMultiplier, in float maxEmissionMultiplier, in float enabled, in float worldOrMesh, in PoiLight poiLight) + { + float glowInTheDarkMultiplier = 1; + if (enabled) + { + float3 lightValue = worldOrMesh ? calculateluminance(poiLight.finalLighting.rgb) : calculateluminance(poiLight.directColor.rgb); + float gitdeAlpha = saturate(inverseLerp(minLight, maxLight, lightValue)); + glowInTheDarkMultiplier = lerp(minEmissionMultiplier, maxEmissionMultiplier, gitdeAlpha); + } + return glowInTheDarkMultiplier; + } + float calculateScrollingEmission(in float3 direction, in float velocity, in float interval, in float scrollWidth, float offset, float3 position) + { + scrollWidth = max(scrollWidth, 0); + float phase = 0; + phase = dot(position, direction); + phase -= (_Time.y + offset) * velocity; + phase /= interval; + phase -= floor(phase); + phase = saturate(phase); + return (pow(phase, scrollWidth) + pow(1 - phase, scrollWidth * 4)) * 0.5; + } + float calculateBlinkingEmission(in float blinkMin, in float blinkMax, in float blinkVelocity, float offset) + { + float amplitude = (blinkMax - blinkMin) * 0.5f; + float base = blinkMin + amplitude; + return sin((_Time.y + offset) * blinkVelocity) * amplitude + base; + } + void applyALEmmissionStrength(in PoiMods poiMods, inout float emissionStrength, in float2 emissionStrengthMod, in float emissionStrengthBand, in float2 _EmissionALMultipliers, in float _EmissionALMultipliersBand, in float enabled) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + emissionStrength += lerp(emissionStrengthMod.x, emissionStrengthMod.y, poiMods.audioLink[emissionStrengthBand]); + emissionStrength *= lerp(_EmissionALMultipliers.x, _EmissionALMultipliers.y, poiMods.audioLink[_EmissionALMultipliersBand]); + } + #endif + } + void applyALCenterOutEmission(in PoiMods poiMods, in float nDotV, inout float emissionStrength, in float size, in float band, in float2 emissionToAdd, in float enabled, in float duration) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + float intensity; + [flatten] + if (duration >= 0) + { + intensity = getBandAtTime(band, saturate(remap(nDotV, 1, 0, 0, duration)), size); + } + else + { + duration *= -1; + intensity = getBandAtTime(band, saturate(remap(pow(nDotV, 2), 0, 1 + duration, 0, duration)), size); + } + emissionStrength += lerp(emissionToAdd[0], emissionToAdd[1], intensity); + } + #endif + } + #ifdef _EMISSION + float3 applyEmission(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiLight poiLight, in PoiCam poiCam, in PoiMods poiMods) + { + float3 emission0 = 0; + float emissionAlpha = 1; + float emissionStrength0 = 1.0; + float3 emissionColor0 = 0; + applyALEmmissionStrength(poiMods, emissionStrength0, float4(0,0,0,0), 0.0, float4(1,1,0,0), 0.0, 0.0); + applyALCenterOutEmission(poiMods, poiLight.nDotV, emissionStrength0, 0.0, 0.0, float4(0,0,0,0), 0.0, 1.0); + float glowInTheDarkMultiplier0 = calculateGlowInTheDark(0.0, 1.0, 1.0, 0.0, 0.0, 0.0, poiLight); + #ifdef POI_GRABPASS + float mixBaseColor = 0; + #else + float mixBaseColor = 0.0; + #endif + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + float4 emissionTex = 0; + if (!0.0) + { + emissionTex = POI2D_SAMPLER_PAN(_EmissionMap, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + } + else + { + emissionTex = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMap, _MainTex, ((.5 + poiLight.nDotV * .5) * float4(1,1,0,0).xy) + _Time.x * 5.0); + } + emissionColor0 = emissionTex.rgb * lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + emissionAlpha = emissionTex.a; + #else + emissionColor0 = lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + #endif + float3 inverseLighting = saturate((1.0 - poiLight.directColor) * sqrt(poiLight.directColor)); + emissionColor0 = lerp(emissionColor0.rgb, emissionColor0.rgb * inverseLighting, 0.0); + emissionStrength0 *= emissionAlpha; + if (0.0) + { + float3 pos = poiMesh.localPos; + if (0.0) + { + pos = poiMesh.vertexColor.rgb; + } + if (0.0) + { + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + emissionStrength0 *= UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionScrollingCurve, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + (dot(pos, float4(0,-10,0,0).xyz) * 20.0) + _Time.x * 10.0).r; + #endif + } + else + { + emissionStrength0 *= calculateScrollingEmission(float4(0,-10,0,0).xyz, 10.0, 20.0, 10.0, 0.0, pos); + } + } + if (0.0) + { + emissionStrength0 *= calculateBlinkingEmission(0.0, 1.0, 4.0, 0.0); + } + if(0.0) + { + emissionColor0 = hueShift(emissionColor0, frac(0.0 + 0.0 * _Time.x), 0.0, 1.0); + emissionColor0 = lerp(emissionColor0, dot(emissionColor0, float3(0.3, 0.59, 0.11)), - (0.0)); + } + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + float emissionMask0 = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + _Time.x * float4(0,0,0,0))[0.0]; + #else + float emissionMask0 = 1; + #endif + if (0.0) + { + emissionMask0 = 1 - emissionMask0; + } + if (0.0 > 0) + { + emissionMask0 = maskBlend(emissionMask0, poiMods.globalMask[0.0 - 1], 2.0); + } + emissionStrength0 *= glowInTheDarkMultiplier0 * emissionMask0; + emission0 = max(emissionStrength0 * emissionColor0, 0); + #ifdef POI_DISSOLVE + if (_DissolveEmissionSide != 2) + { + emission0 *= lerp(1 - dissolveAlpha, dissolveAlpha, _DissolveEmissionSide); + } + #endif + poiFragData.emission += emission0; + return emission0 * 0.0; + } + #endif + #if defined(MOCHIE_PBR) || defined(POI_CLEARCOAT) + float GSAA_Filament(float3 worldNormal, float perceptualRoughness, float gsaaVariance, float gsaaThreshold) + { + float3 du = ddx(worldNormal); + float3 dv = ddy(worldNormal); + float variance = gsaaVariance * (dot(du, du) + dot(dv, dv)); + float roughness = perceptualRoughness * perceptualRoughness; + float kernelRoughness = min(2.0 * variance, gsaaThreshold); + float squareRoughness = saturate(roughness * roughness + kernelRoughness); + return sqrt(sqrt(squareRoughness)); + } + float3 GetWorldReflections(float3 reflDir, float3 worldPos, float roughness) + { + float3 baseReflDir = reflDir; + reflDir = BoxProjection(reflDir, worldPos, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax); + float4 envSample0 = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, reflDir, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p0 = DecodeHDR(envSample0, unity_SpecCube0_HDR); + float interpolator = unity_SpecCube0_BoxMin.w; + + if (interpolator < 0.99999) + { + float3 refDirBlend = BoxProjection(baseReflDir, worldPos, unity_SpecCube1_ProbePosition, unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax); + float4 envSample1 = UNITY_SAMPLE_TEXCUBE_SAMPLER_LOD(unity_SpecCube1, unity_SpecCube0, refDirBlend, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p1 = DecodeHDR(envSample1, unity_SpecCube1_HDR); + p0 = lerp(p1, p0, interpolator); + } + return p0; + } + float3 GetReflections(in PoiCam poiCam, in PoiLight pl, in PoiMesh poiMesh, float roughness, float ForceFallback, float LightFallback, TextureCube reflectionCube, float4 hdrData, float3 reflectionDir) + { + float3 reflections = 0; + float3 lighting = pl.finalLighting; + if (ForceFallback == 0) + { + + if (SceneHasReflections()) + { + #ifdef UNITY_PASS_FORWARDBASE + reflections = GetWorldReflections(reflectionDir, poiMesh.worldPos.xyz, roughness); + #endif + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + reflections *= pl.occlusion; + return reflections; + } + float GetGGXTerm(float nDotL, float nDotV, float nDotH, float roughness) + { + float visibilityTerm = 0; + if (nDotL > 0) + { + float lambdaV = nDotL * (nDotV * (1 - roughness) + roughness); + float lambdaL = nDotV * (nDotL * (1 - roughness) + roughness); + visibilityTerm = 0.5f / (lambdaV + lambdaL + 1e-5f); + float a = nDotH * roughness; + float k = roughness / (1.0 - nDotH * nDotH + a * a+ 1e-5f); + float dotTerm = k * k * UNITY_INV_PI; + visibilityTerm *= dotTerm; + } + return visibilityTerm; + } + void GetSpecFresTerm(float nDotL, float nDotV, float nDotH, float lDotH, inout float3 specularTerm, inout float3 fresnelTerm, float3 specCol, float roughness) + { + specularTerm = GetGGXTerm(nDotL, nDotV, nDotH, roughness); + fresnelTerm = FresnelTerm(specCol, lDotH); + specularTerm = max(0, specularTerm * max(0.00001, nDotL)); + } + float GetRoughness(float smoothness) + { + float rough = 1 - smoothness; + rough *= 1.7 - 0.7 * rough; + return rough; + } + float SFVisibility(float brdfRoughness, float3 directColor, float NDotV, float ExposureOcclusion) + { + float Visibility = saturate(length(directColor + EPSILON) * (1.0/(ExposureOcclusion))); //Using direct color because I think it should be generally more forgiving + return saturate(pow(NDotV + Visibility, exp2(-16.0 * brdfRoughness - 1.0)) - 1.0 + Visibility); + } + #endif + #ifdef MOCHIE_PBR + void MetallicAndSpecularFragDataInit(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + float smoothness = 0.201; + float smoothness2 = 1.0; + float metallic = 0.0; + float specularMask = 1; + float reflectionMask = 1; + smoothness *= poiFragData.smoothness; + smoothness2 *= poiFragData.smoothness2; + metallic *= poiFragData.metallic; + specularMask *= poiFragData.specularMask; + reflectionMask *= poiFragData.reflectionMask; + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + + if (0.0) + { + float4 PBRSplitMask = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy, 0.0); + assignValueToVectorFromIndex(PBRMaps, 2.0, PBRSplitMask[2.0]); + assignValueToVectorFromIndex(PBRMaps, 3.0, PBRSplitMask[3.0]); + } + if (0.0 < 4) + { + metallic *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + smoothness2 *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + reflectionMask *= 1.0; + specularMask *= 1.0; + if (0.0) + { + metallic = 1 - metallic; + } + if (0.0) + { + smoothness = 1 - smoothness; + smoothness2 = 1 - smoothness2; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + poiFragData.smoothness *= smoothness; + poiFragData.smoothness2 *= smoothness2; + poiFragData.metallic *= metallic; + poiFragData.specularMask *= specularMask; + poiFragData.reflectionMask *= reflectionMask; + } + void MochieBRDF(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, inout PoiMods poiMods) + { + float smoothness = poiFragData.smoothness; + float smoothness2 = poiFragData.smoothness2; + float metallic = poiFragData.metallic; + float specularMask = poiFragData.specularMask; + float reflectionMask = poiFragData.reflectionMask; + if (0.0 > 0) + { + metallic = customBlend(metallic, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + smoothness2 = customBlend(smoothness2, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef TPS_Penetrator + if (0.0) + { + reflectionMask = lerp(0, reflectionMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + specularMask = lerp(0, specularMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float roughness2 = GetRoughness(smoothness2); + float3 specCol = lerp(unity_ColorSpaceDielectricSpec.rgb, poiFragData.baseColor, metallic); + float omr = unity_ColorSpaceDielectricSpec.a - metallic * unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + float percepRough2 = 1 - smoothness2; + + if (1.0) + { + float3 normals = lerp(poiMesh.normals[0], poiMesh.normals[1], 1.0); + percepRough = GSAA_Filament(normals, percepRough, 0.15, 0.1); + if (0.0 == 1 && 1.0 > 0) + { + percepRough2 = GSAA_Filament(normals, percepRough2, 0.15, 0.1); + } + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float brdfRoughness2 = percepRough2 * percepRough2; + brdfRoughness2 = max(brdfRoughness2, 0.002); + float3 diffuse = poiFragData.baseColor; + float3 specular = 0; + float3 specular2 = 0; + float3 vSpecular = 0; + float3 vSpecular2 = 0; + float3 reflections = 0; + float3 environment = 0; + #if defined(POINT) || defined(SPOT) + float attenuation = lerp(poiLight.additiveShadow, 1, 0.0); + #else + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + #endif + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float pbrNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 1.0); + float pbrNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 1.0); + float pbrNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 1.0); + float3 pbrReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 1.0); + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + if (0.0 == 1) + { + float3 fresnelTerm = 1; + float3 specularTerm = 1; + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness2); + specular2 = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation * 1.0; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness2); + vSpecular2 += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * 1.0; + } + #endif + } + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _MochieReflCube, _MochieReflCube_HDR, pbrReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, pbrNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, pbrNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + reflections *= reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = max(specular + vSpecular, specular2 + vSpecular2); + environment += reflections; + diffuse *= poiLight.finalLighting; + poiFragData.finalColor = diffuse; + poiLight.finalLightAdd += environment; + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0002441406,0.0002441406,4096,4096), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #if defined(MOCHIE_PBR) + MetallicAndSpecularFragDataInit(poiFragData, poiMesh, poiMods); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) + float3 emissionBaseReplace = 0;// + #endif + #ifdef _EMISSION + emissionBaseReplace += applyEmission(poiFragData, poiMesh, poiLight, poiCam, poiMods); + #endif + #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) + poiFragData.baseColor.rgb = lerp(poiFragData.baseColor.rgb, saturate(emissionBaseReplace), poiMax(emissionBaseReplace)); + #endif + + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #ifdef MOCHIE_PBR + MochieBRDF(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + #ifdef UNITY_PASS_FORWARDBASE + poiFragData.emission = max(poiFragData.emission * 1.0, 0); + poiFragData.finalColor = max(poiFragData.finalColor * 1.0, 0); + #endif + if (0.0 == POI_MODE_OPAQUE) + { + } + clip(poiFragData.alpha - 0.5); + if (0.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + poiFragData.finalColor += poiFragData.emission * poiMods.globalEmission; + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "Add" + Tags { "LightMode" = "ForwardAdd" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite Off + Cull Back + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_AddBlendOp], [_AddBlendOpAlpha] + Blend [_AddSrcBlend] [_AddDstBlend], [_AddSrcBlendAlpha] [_AddDstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_EMISSIONMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdadd_fullshadows + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_ADD + #pragma skip_variants LIGHTMAP_ON DYNAMICLIGHTMAP_ON LIGHTMAP_SHADOW_MIXING SHADOWS_SHADOWMASK DIRLIGHTMAP_COMBINED _MIXED_LIGHTING_SUBTRACTIVE + #pragma skip_variants DECALS_OFF DECALS_3RT DECALS_4RT DECAL_SURFACE_GRADIENT _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + #pragma skip_variants _ADDITIONAL_LIGHT_SHADOWS + #pragma skip_variants PROBE_VOLUMES_OFF PROBE_VOLUMES_L1 PROBE_VOLUMES_L2 + #pragma skip_variants _SCREEN_SPACE_OCCLUSION + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + #ifdef MOCHIE_PBR + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _MochieMetallicMaps; + float _PBRMapsStochastic; + #endif + float4 _MochieMetallicMaps_ST; + float2 _MochieMetallicMapsPan; + float _MochieMetallicMapsUV; + float _MochieMetallicMapsStochastic; + float _MochieMetallicMapInvert; + float _MochieRoughnessMapInvert; + float _MochieReflectionMaskInvert; + float _MochieSpecularMaskInvert; + float _MochieMetallicMapsMetallicChannel; + float _MochieMetallicMapsRoughnessChannel; + float _MochieMetallicMapsReflectionMaskChannel; + float _MochieMetallicMapsSpecularMaskChannel; + float _PBRNormalSelect; + float _MochieReflectionTintThemeIndex; + float _MochieSpecularTintThemeIndex; + float _MochieRoughnessMultiplier; + float _MochieMetallicMultiplier; + float _MochieReflectionStrength; + float _MochieSpecularStrength; + float4 _MochieSpecularTint; + float4 _MochieReflectionTint; + float _MochieLitFallback; + float _IgnoreCastedShadows; + float _PBRSplitMaskSample; + float _PBRSplitMaskStochastic; + float4 _PBRMaskScaleTiling; + float _MochieMetallicMasksUV; + float4 _MochieMetallicMasksPan; + float _Specular2ndLayer; + float _MochieSpecularStrength2; + float _MochieRoughnessMultiplier2; + float _RefSpecFresnelStrength; + float _SFExposureOcclusion; + TextureCube _MochieReflCube; + float4 _MochieReflCube_HDR; + float _MochieForceFallback; + float _MochieGSAAEnabled; + float _PoiGSAAVariance; + float _PoiGSAAThreshold; + float _BRDFTPSReflectionMaskStrength; + float _BRDFTPSSpecularMaskStrength; + float _BRDFTPSDepthEnabled; + float _MochieMetallicGlobalMask; + float _MochieMetallicGlobalMaskBlendType; + float _MochieSmoothnessGlobalMask; + float _MochieSmoothnessGlobalMaskBlendType; + float _MochieReflectionStrengthGlobalMask; + float _MochieReflectionStrengthGlobalMaskBlendType; + float _MochieSpecularStrengthGlobalMask; + float _MochieSpecularStrengthGlobalMaskBlendType; + #endif + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef VIGNETTE_MASKED + #ifdef _LIGHTINGMODE_REALISTIC + #if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) + #if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) + #define SUBTRACTIVE_LIGHTING 1 + #endif + #endif + float FadeShadows(float attenuation, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if HANDLE_SHADOWS_BLENDING_IN_GI || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + #if ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + attenuation = poiLight.attenuation; + #endif + float viewZ = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float shadowFadeDistance = UnityComputeShadowFadeDistance(poiMesh.worldPos, viewZ); + float shadowFade = UnityComputeShadowFade(shadowFadeDistance); + float bakedAttenuation = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + attenuation = UnityMixRealtimeAndBakedShadows(attenuation, bakedAttenuation, shadowFade); + #endif + return attenuation; + } + void ApplySubtractiveLighting(inout UnityIndirect indirectLight, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if SUBTRACTIVE_LIGHTING + poiLight.attenuation = FadeShadows(poiLight.attenuation, poiLight, poiMesh, poiCam); + float ndotl = saturate(dot(poiMesh.normals[0], _WorldSpaceLightPos0.xyz)); + float3 shadowedLightEstimate = ndotl * (1 - poiLight.attenuation) * _LightColor0.rgb; + float3 subtractedLight = indirectLight.diffuse - shadowedLightEstimate; + subtractedLight = max(subtractedLight, unity_ShadowColor.rgb); + subtractedLight = lerp(subtractedLight, indirectLight.diffuse, _LightShadowData.x); + indirectLight.diffuse = min(subtractedLight, indirectLight.diffuse); + #endif + } + UnityIndirect CreateIndirectLight(in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight) + { + UnityIndirect indirectLight; + indirectLight.diffuse = 0; + indirectLight.specular = 0; + #if defined(LIGHTMAP_ON) + indirectLight.diffuse = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, poiMesh.lightmapUV.xy)); + #if defined(DIRLIGHTMAP_COMBINED) + float4 lightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, poiMesh.lightmapUV.xy); + indirectLight.diffuse = DecodeDirectionalLightmap(indirectLight.diffuse, lightmapDirection, poiMesh.normals[1]); + #endif + ApplySubtractiveLighting(indirectLight, poiLight, poiMesh, poiCam); + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float3 dynamicLightDiffuse = DecodeRealtimeLightmap( + UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, poiMesh.lightmapUV.zw) + ); + #if defined(DIRLIGHTMAP_COMBINED) + float4 dynamicLightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_DynamicDirectionality, unity_DynamicLightmap, poiMesh.lightmapUV.zw); + indirectLight.diffuse += DecodeDirectionalLightmap(dynamicLightDiffuse, dynamicLightmapDirection, poiMesh.normals[1]); + #else + indirectLight.diffuse += dynamicLightDiffuse; + #endif + #endif + #if !defined(LIGHTMAP_ON) && !defined(DYNAMICLIGHTMAP_ON) + #if UNITY_LIGHT_PROBE_PROXY_VOLUME + if (unity_ProbeVolumeParams.x == 1) + { + indirectLight.diffuse = SHEvalLinearL0L1_SampleProbeVolume( + float4(poiMesh.normals[1], 1), poiMesh.worldPos + ); + indirectLight.diffuse = max(0, indirectLight.diffuse); + #if defined(UNITY_COLORSPACE_GAMMA) + indirectLight.diffuse = LinearToGammaSpace(indirectLight.diffuse); + #endif + } + else + { + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + } + #else + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + #endif + #endif + indirectLight.diffuse *= poiLight.occlusion; + return indirectLight; + } + #endif + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_REALISTIC + UnityLight light; + light.dir = poiLight.direction; + light.color = max(0, _LightColor0.rgb) * saturate(shadowAttenuation * attenuation * poiLight.detailShadow); + light.ndotl = poiLight.nDotLSaturated; + UnityIndirect indirectLight = (UnityIndirect)0; + #ifdef UNITY_PASS_FORWARDBASE + indirectLight = CreateIndirectLight(poiMesh, poiCam, poiLight); + #endif + #ifdef UNITY_PASS_FORWARDBASE + light.color = max(light.color * 1.0, 0); + light.color = max(light.color + 0.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse * 1.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse + 0.0, 0); + #endif + poiLight.rampedLightMap = poiLight.nDotLSaturated; + poiLight.finalLighting = max(POI_BRDF_PBS(1, 0, 0, 0, poiMesh.normals[1], poiCam.viewDir, light, indirectLight).xyz, _LightingMinLightBrightness); + #ifdef UNITY_PASS_FORWARDBASE + if (_UdonLightVolumeEnabled && 1.0) + { + float3 L0 = 0; + float3 L1r = 0; + float3 L1g = 0; + float3 L1b = 0; + #ifdef LIGHTMAP_ON + LightVolumeAdditiveSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + poiLight.finalLighting += clamp(LightVolumeEvaluate(poiMesh.normals[1], L0, L1r, L1g, L1b), _LightingMinLightBrightness, _LightingCap); + #endif + } + #endif + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + #if defined(MOCHIE_PBR) || defined(POI_CLEARCOAT) + float GSAA_Filament(float3 worldNormal, float perceptualRoughness, float gsaaVariance, float gsaaThreshold) + { + float3 du = ddx(worldNormal); + float3 dv = ddy(worldNormal); + float variance = gsaaVariance * (dot(du, du) + dot(dv, dv)); + float roughness = perceptualRoughness * perceptualRoughness; + float kernelRoughness = min(2.0 * variance, gsaaThreshold); + float squareRoughness = saturate(roughness * roughness + kernelRoughness); + return sqrt(sqrt(squareRoughness)); + } + float3 GetWorldReflections(float3 reflDir, float3 worldPos, float roughness) + { + float3 baseReflDir = reflDir; + reflDir = BoxProjection(reflDir, worldPos, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax); + float4 envSample0 = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, reflDir, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p0 = DecodeHDR(envSample0, unity_SpecCube0_HDR); + float interpolator = unity_SpecCube0_BoxMin.w; + + if (interpolator < 0.99999) + { + float3 refDirBlend = BoxProjection(baseReflDir, worldPos, unity_SpecCube1_ProbePosition, unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax); + float4 envSample1 = UNITY_SAMPLE_TEXCUBE_SAMPLER_LOD(unity_SpecCube1, unity_SpecCube0, refDirBlend, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p1 = DecodeHDR(envSample1, unity_SpecCube1_HDR); + p0 = lerp(p1, p0, interpolator); + } + return p0; + } + float3 GetReflections(in PoiCam poiCam, in PoiLight pl, in PoiMesh poiMesh, float roughness, float ForceFallback, float LightFallback, TextureCube reflectionCube, float4 hdrData, float3 reflectionDir) + { + float3 reflections = 0; + float3 lighting = pl.finalLighting; + if (ForceFallback == 0) + { + + if (SceneHasReflections()) + { + #ifdef UNITY_PASS_FORWARDBASE + reflections = GetWorldReflections(reflectionDir, poiMesh.worldPos.xyz, roughness); + #endif + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + reflections *= pl.occlusion; + return reflections; + } + float GetGGXTerm(float nDotL, float nDotV, float nDotH, float roughness) + { + float visibilityTerm = 0; + if (nDotL > 0) + { + float lambdaV = nDotL * (nDotV * (1 - roughness) + roughness); + float lambdaL = nDotV * (nDotL * (1 - roughness) + roughness); + visibilityTerm = 0.5f / (lambdaV + lambdaL + 1e-5f); + float a = nDotH * roughness; + float k = roughness / (1.0 - nDotH * nDotH + a * a+ 1e-5f); + float dotTerm = k * k * UNITY_INV_PI; + visibilityTerm *= dotTerm; + } + return visibilityTerm; + } + void GetSpecFresTerm(float nDotL, float nDotV, float nDotH, float lDotH, inout float3 specularTerm, inout float3 fresnelTerm, float3 specCol, float roughness) + { + specularTerm = GetGGXTerm(nDotL, nDotV, nDotH, roughness); + fresnelTerm = FresnelTerm(specCol, lDotH); + specularTerm = max(0, specularTerm * max(0.00001, nDotL)); + } + float GetRoughness(float smoothness) + { + float rough = 1 - smoothness; + rough *= 1.7 - 0.7 * rough; + return rough; + } + float SFVisibility(float brdfRoughness, float3 directColor, float NDotV, float ExposureOcclusion) + { + float Visibility = saturate(length(directColor + EPSILON) * (1.0/(ExposureOcclusion))); //Using direct color because I think it should be generally more forgiving + return saturate(pow(NDotV + Visibility, exp2(-16.0 * brdfRoughness - 1.0)) - 1.0 + Visibility); + } + #endif + #ifdef MOCHIE_PBR + void MetallicAndSpecularFragDataInit(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + float smoothness = 0.201; + float smoothness2 = 1.0; + float metallic = 0.0; + float specularMask = 1; + float reflectionMask = 1; + smoothness *= poiFragData.smoothness; + smoothness2 *= poiFragData.smoothness2; + metallic *= poiFragData.metallic; + specularMask *= poiFragData.specularMask; + reflectionMask *= poiFragData.reflectionMask; + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + + if (0.0) + { + float4 PBRSplitMask = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy, 0.0); + assignValueToVectorFromIndex(PBRMaps, 2.0, PBRSplitMask[2.0]); + assignValueToVectorFromIndex(PBRMaps, 3.0, PBRSplitMask[3.0]); + } + if (0.0 < 4) + { + metallic *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + smoothness2 *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + reflectionMask *= 1.0; + specularMask *= 1.0; + if (0.0) + { + metallic = 1 - metallic; + } + if (0.0) + { + smoothness = 1 - smoothness; + smoothness2 = 1 - smoothness2; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + poiFragData.smoothness *= smoothness; + poiFragData.smoothness2 *= smoothness2; + poiFragData.metallic *= metallic; + poiFragData.specularMask *= specularMask; + poiFragData.reflectionMask *= reflectionMask; + } + void MochieBRDF(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, inout PoiMods poiMods) + { + float smoothness = poiFragData.smoothness; + float smoothness2 = poiFragData.smoothness2; + float metallic = poiFragData.metallic; + float specularMask = poiFragData.specularMask; + float reflectionMask = poiFragData.reflectionMask; + if (0.0 > 0) + { + metallic = customBlend(metallic, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + smoothness2 = customBlend(smoothness2, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef TPS_Penetrator + if (0.0) + { + reflectionMask = lerp(0, reflectionMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + specularMask = lerp(0, specularMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float roughness2 = GetRoughness(smoothness2); + float3 specCol = lerp(unity_ColorSpaceDielectricSpec.rgb, poiFragData.baseColor, metallic); + float omr = unity_ColorSpaceDielectricSpec.a - metallic * unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + float percepRough2 = 1 - smoothness2; + + if (1.0) + { + float3 normals = lerp(poiMesh.normals[0], poiMesh.normals[1], 1.0); + percepRough = GSAA_Filament(normals, percepRough, 0.15, 0.1); + if (0.0 == 1 && 1.0 > 0) + { + percepRough2 = GSAA_Filament(normals, percepRough2, 0.15, 0.1); + } + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float brdfRoughness2 = percepRough2 * percepRough2; + brdfRoughness2 = max(brdfRoughness2, 0.002); + float3 diffuse = poiFragData.baseColor; + float3 specular = 0; + float3 specular2 = 0; + float3 vSpecular = 0; + float3 vSpecular2 = 0; + float3 reflections = 0; + float3 environment = 0; + #if defined(POINT) || defined(SPOT) + float attenuation = lerp(poiLight.additiveShadow, 1, 0.0); + #else + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + #endif + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float pbrNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 1.0); + float pbrNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 1.0); + float pbrNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 1.0); + float3 pbrReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 1.0); + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + if (0.0 == 1) + { + float3 fresnelTerm = 1; + float3 specularTerm = 1; + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness2); + specular2 = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation * 1.0; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness2); + vSpecular2 += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * 1.0; + } + #endif + } + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _MochieReflCube, _MochieReflCube_HDR, pbrReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, pbrNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, pbrNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + reflections *= reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = max(specular + vSpecular, specular2 + vSpecular2); + environment += reflections; + diffuse *= poiLight.finalLighting; + poiFragData.finalColor = diffuse; + poiLight.finalLightAdd += environment; + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0002441406,0.0002441406,4096,4096), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #if defined(MOCHIE_PBR) + MetallicAndSpecularFragDataInit(poiFragData, poiMesh, poiMods); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #ifdef MOCHIE_PBR + MochieBRDF(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + if (0.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + if (4.0 == 4) + { + poiFragData.alpha = saturate(poiFragData.alpha * 10.0); + } + if (0.0 != POI_MODE_TRANSPARENT) + { + poiFragData.finalColor *= poiFragData.alpha; + } + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Back + AlphaToMask Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_EMISSIONMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_instancing + #pragma multi_compile_shadowcaster + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_SHADOW + #pragma skip_variants LIGHTMAP_ON DYNAMICLIGHTMAP_ON LIGHTMAP_SHADOW_MIXING SHADOWS_SHADOWMASK DIRLIGHTMAP_COMBINED _MIXED_LIGHTING_SUBTRACTIVE + #pragma skip_variants DECALS_OFF DECALS_3RT DECALS_4RT DECAL_SURFACE_GRADIENT _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + #pragma skip_variants _ADDITIONAL_LIGHT_SHADOWS + #pragma skip_variants PROBE_VOLUMES_OFF PROBE_VOLUMES_L1 PROBE_VOLUMES_L2 + #pragma skip_variants _SCREEN_SPACE_OCCLUSION + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0002441406,0.0002441406,4096,4096), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + poiFragData.finalColor = poiFragData.baseColor; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + } + CustomEditor "Thry.ShaderEditor" +} diff --git a/Assets/Quiz/Materials/Lobby/OptimizedShaders/LobbyRoom/Poiyomi Pro.shader.meta b/Assets/Quiz/Materials/Lobby/OptimizedShaders/LobbyRoom/Poiyomi Pro.shader.meta new file mode 100644 index 0000000..9f86bfb --- /dev/null +++ b/Assets/Quiz/Materials/Lobby/OptimizedShaders/LobbyRoom/Poiyomi Pro.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6a7cca6031b1a0a48b5c044fdf1bdff0 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/LukePaper.mat b/Assets/Quiz/Materials/LukePaper.mat new file mode 100644 index 0000000..c92ef22 --- /dev/null +++ b/Assets/Quiz/Materials/LukePaper.mat @@ -0,0 +1,3782 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LukePaper + m_Shader: {fileID: 4800000, guid: e13a7d52fee04b44f909f128c4724832, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: + - BSSBLOOMFOGTYPE_HEIGHT + - VIGNETTE_MASKED + - _LIGHTINGMODE_FLAT + - _RIM2STYLE_POIYOMI + - _RIMSTYLE_POIYOMI + - _STOCHASTICMODE_DELIOT_HEITZ + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + AllLockedGUIDS: 156868ebaeb510e49b9e98d3432f84d8 + OriginalKeywords: BSSBLOOMFOGTYPE_HEIGHT VIGNETTE_MASKED _LIGHTINGMODE_FLAT _RIM2STYLE_POIYOMI + _RIMSTYLE_POIYOMI _STOCHASTICMODE_DELIOT_HEITZ + OriginalShader: .poiyomi/Poiyomi Pro + OriginalShaderGUID: 77f45810ea400c74e929db1f8ea09c47 + RenderType: Opaque + _stripped_tex__ClothDFG: 76d65cbce584df7449699fb8406f60ea + _stripped_tex__SkinLUT: d13510bb2be49aa40a66a0101efb6a36 + _stripped_tex__ToonRamp: 61bd594533da4fc42bd46ef93ba5a4f6 + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightDataSDFMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingAOMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingDetailShadowMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _UzumoreMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - GeometryShader_Enabled: 1 + - Instancing: 0 + - Tessellation_Enabled: 1 + - VertexBasicsMaskUV: 0 + - _1st2nd_Shades_Feather: 0.0001 + - _1stShadeMapMask_Inverse: 0 + - _1st_ShadeMapUV: 0 + - _2ndShadeMapMask_Inverse: 0 + - _2nd_ShadeMapUV: 0 + - _ALDecalBandClipMax: 1 + - _ALDecalBandClipMin: 0 + - _ALDecalBandStep: 0 + - _ALDecalBaseBoost: 5 + - _ALDecalBlendAlpha: 1 + - _ALDecalBlendType: 0 + - _ALDecalColorMaskUV: 0 + - _ALDecalControlsAlpha: 0 + - _ALDecalGlobalMask: 0 + - _ALDecalGlobalMaskBlendType: 2 + - _ALDecalHighEmission: 0 + - _ALDecalLineWidth: 1 + - _ALDecalLowEmission: 0 + - _ALDecalMidEmission: 0 + - _ALDecalShapeClip: 0 + - _ALDecalShapeClipBandWidth: 0.5 + - _ALDecalShapeClipVolumeWidth: 0.5 + - _ALDecalTrebleBoost: 1 + - _ALDecalType: 0 + - _ALDecalUV: 0 + - _ALDecalUVMode: 0 + - _ALDecalVolume: 0.5 + - _ALDecalVolumeClipMax: 1 + - _ALDecalVolumeClipMin: 0 + - _ALDecalVolumeColorHighThemeIndex: 0 + - _ALDecalVolumeColorLowThemeIndex: 0 + - _ALDecalVolumeColorMidThemeIndex: 0 + - _ALDecalVolumeColorSource: 1 + - _ALDecalVolumeStep: 0 + - _ALHighEmission: 0 + - _ALLowEmission: 0 + - _ALMidEmission: 0 + - _ALUVRotation: 0 + - _ALUVRotationSpeed: 0 + - _ALVolumeColorBlendAlpha: 1 + - _ALVolumeColorBlendType: 0 + - _ALVolumeColorDirection: 0 + - _ALVolumeColorHighThemeIndex: 0 + - _ALVolumeColorLowThemeIndex: 0 + - _ALVolumeColorMidThemeIndex: 0 + - _ALVolumeColorUV: 0 + - _AddBlendOp: 4 + - _AddBlendOpAlpha: 4 + - _AddDstBlend: 1 + - _AddDstBlendAlpha: 1 + - _AddSrcBlend: 1 + - _AddSrcBlendAlpha: 0 + - _Add_Antipodean_Rim2Light: 0 + - _Add_Antipodean_RimLight: 0 + - _AlphaAlphaAdd: 0 + - _AlphaAngular: 0 + - _AlphaAngularGlobalMask: 0 + - _AlphaAudioLinkAddBand: 0 + - _AlphaAudioLinkEnabled: 0 + - _AlphaBoostFA: 10 + - _AlphaColorThemeIndex: 0 + - _AlphaDistanceFade: 0 + - _AlphaDistanceFadeGlobalMask: 0 + - _AlphaDistanceFadeMax: 0 + - _AlphaDistanceFadeMaxAlpha: 1 + - _AlphaDistanceFadeMin: 0 + - _AlphaDistanceFadeMinAlpha: 0 + - _AlphaDistanceFadeType: 1 + - _AlphaDitherBias: 0 + - _AlphaDitherGradient: 0.1 + - _AlphaDithering: 0 + - _AlphaForceOpaque: 1 + - _AlphaFresnel: 0 + - _AlphaFresnelAlpha: 0 + - _AlphaFresnelGlobalMask: 0 + - _AlphaFresnelInvert: 0 + - _AlphaFresnelSharpness: 0.5 + - _AlphaFresnelWidth: 0.5 + - _AlphaGlobalMask: 0 + - _AlphaGlobalMaskBlendType: 2 + - _AlphaMaskBlendStrength: 1 + - _AlphaMaskInvert: 0 + - _AlphaMaskUV: 0 + - _AlphaMaskValue: 0 + - _AlphaMipScale: 0.25 + - _AlphaMod: 0 + - _AlphaPremultiply: 0 + - _AlphaSharpenedA2C: 0 + - _AlphaTextureStochastic: 0 + - _AlphaTextureUV: 0 + - _AlphaToCoverage: 0 + - _AngleCompareTo: 0 + - _AngleMinAlpha: 0 + - _AngleType: 0 + - _Aniso0Blur: 0 + - _Aniso0Edge: 0.5 + - _Aniso0Offset: 0 + - _Aniso0OffsetMapStrength: 0 + - _Aniso0Power: 0 + - _Aniso0Strength: 1 + - _Aniso0SwitchDirection: 0 + - _Aniso0TintIndex: 0 + - _Aniso0ToonMode: 0 + - _Aniso1Blur: 0 + - _Aniso1Edge: 0.5 + - _Aniso1Offset: 0 + - _Aniso1OffsetMapStrength: 0 + - _Aniso1Power: 0.1 + - _Aniso1Strength: 1 + - _Aniso1SwitchDirection: 0 + - _Aniso1TintIndex: 0 + - _Aniso1ToonMode: 0 + - _AnisoAdd: 1 + - _AnisoColorMapUV: 0 + - _AnisoGlobalMask: 0 + - _AnisoGlobalMaskBlendType: 2 + - _AnisoHideInShadow: 1 + - _AnisoReplace: 0 + - _AnisoUseBaseColor: 0 + - _AnisoUseLightColor: 1 + - _Anisotropy: 0 + - _AnisotropyMapChannel: 0 + - _AnisotropyMapUV: 0 + - _Ap_Rim2Light_FeatherOff: 0 + - _Ap_Rim2Light_Power: 0.1 + - _Ap_RimLight_FeatherOff: 0 + - _Ap_RimLight_Power: 0.1 + - _ApplyReflection: 0 + - _ApplySpecular: 1 + - _ApplySpecularFA: 1 + - _AudioLinkAnimToggle: 1 + - _AudioLinkBandOverridesEnabled: 0 + - _AudioLinkDecal0AlphaBand: 0 + - _AudioLinkDecal0ChannelSeparationBand: 0 + - _AudioLinkDecal0EmissionBand: 0 + - _AudioLinkDecal0RotationBand: 0 + - _AudioLinkDecal0ScaleBand: 0 + - _AudioLinkDecal0SideBand: 0 + - _AudioLinkDecal1AlphaBand: 0 + - _AudioLinkDecal1ChannelSeparationBand: 0 + - _AudioLinkDecal1EmissionBand: 0 + - _AudioLinkDecal1RotationBand: 0 + - _AudioLinkDecal1ScaleBand: 0 + - _AudioLinkDecal1SideBand: 0 + - _AudioLinkDecal2AlphaBand: 0 + - _AudioLinkDecal2ChannelSeparationBand: 0 + - _AudioLinkDecal2EmissionBand: 0 + - _AudioLinkDecal2RotationBand: 0 + - _AudioLinkDecal2ScaleBand: 0 + - _AudioLinkDecal2SideBand: 0 + - _AudioLinkDecal3AlphaBand: 0 + - _AudioLinkDecal3ChannelSeparationBand: 0 + - _AudioLinkDecal3EmissionBand: 0 + - _AudioLinkDecal3RotationBand: 0 + - _AudioLinkDecal3ScaleBand: 0 + - _AudioLinkDecal3SideBand: 0 + - _AudioLinkDecalCC0: 0 + - _AudioLinkDecalCC1: 0 + - _AudioLinkDecalCC2: 0 + - _AudioLinkDecalCC3: 0 + - _AudioLinkDissolveAlphaBand: 0 + - _AudioLinkDissolveDetailBand: 0 + - _AudioLinkEmission0CenterOutBand: 0 + - _AudioLinkEmission0CenterOutDuration: 1 + - _AudioLinkEmission0CenterOutSize: 0 + - _AudioLinkEmission1CenterOutBand: 0 + - _AudioLinkEmission1CenterOutDuration: 1 + - _AudioLinkEmission1CenterOutSize: 0 + - _AudioLinkEmission2CenterOutBand: 0 + - _AudioLinkEmission2CenterOutDuration: 1 + - _AudioLinkEmission2CenterOutSize: 0 + - _AudioLinkEmission3CenterOutBand: 0 + - _AudioLinkEmission3CenterOutDuration: 1 + - _AudioLinkEmission3CenterOutSize: 0 + - _AudioLinkFlipbookAlphaBand: 0 + - _AudioLinkFlipbookEmissionBand: 0 + - _AudioLinkFlipbookFrameBand: 0 + - _AudioLinkFlipbookScaleBand: 0 + - _AudioLinkHelp: 0 + - _AudioLinkOutlineColorBand: 0 + - _AudioLinkOutlineEmissionBand: 0 + - _AudioLinkOutlineSizeBand: 0 + - _AudioLinkPathEmissionAddBandA: 0 + - _AudioLinkPathEmissionAddBandB: 0 + - _AudioLinkPathEmissionAddBandG: 0 + - _AudioLinkPathEmissionAddBandR: 0 + - _AudioLinkPathTimeOffsetBandA: 0 + - _AudioLinkPathTimeOffsetBandB: 0 + - _AudioLinkPathTimeOffsetBandG: 0 + - _AudioLinkPathTimeOffsetBandR: 0 + - _AudioLinkPathWidthOffsetBandA: 0 + - _AudioLinkPathWidthOffsetBandB: 0 + - _AudioLinkPathWidthOffsetBandG: 0 + - _AudioLinkPathWidthOffsetBandR: 0 + - _AudioLinkRim2BrightnessBand: 0 + - _AudioLinkRim2EmissionBand: 0 + - _AudioLinkRim2WidthBand: 0 + - _AudioLinkRimBrightnessBand: 0 + - _AudioLinkRimEmissionBand: 0 + - _AudioLinkRimWidthBand: 0 + - _AudioLinkSmoothingBass: 0 + - _AudioLinkSmoothingHighMid: 0 + - _AudioLinkSmoothingLowMid: 0 + - _AudioLinkSmoothingTreble: 0 + - _AudioLinkVoronoiChronoSpeedXBand: 0 + - _AudioLinkVoronoiChronoSpeedXSpeed: 0 + - _AudioLinkVoronoiChronoSpeedXType: 0 + - _AudioLinkVoronoiChronoSpeedYBand: 0 + - _AudioLinkVoronoiChronoSpeedYSpeed: 0 + - _AudioLinkVoronoiChronoSpeedYType: 0 + - _AudioLinkVoronoiChronoSpeedZBand: 0 + - _AudioLinkVoronoiChronoSpeedZSpeed: 0 + - _AudioLinkVoronoiChronoSpeedZType: 0 + - _AudioLinkVoronoiGradientMaxAdd: 0 + - _AudioLinkVoronoiGradientMaxAddBand: 0 + - _AudioLinkVoronoiGradientMinAdd: 0 + - _AudioLinkVoronoiGradientMinAddBand: 0 + - _AudioLinkVoronoiInnerEmissionBand: 0 + - _AudioLinkVoronoiOuterEmissionBand: 0 + - _BRDFTPSDepthEnabled: 0 + - _BRDFTPSReflectionMaskStrength: 1 + - _BRDFTPSSpecularMaskStrength: 1 + - _BSSBloomfog: 0 + - _BSSBloomfogType: 1 + - _BSSEnabled: 0 + - _BSSHelpBox1: 0 + - _BSSHelpBox2: 0 + - _BSSHelpBox3: 0 + - _BSSSpacer1: 0 + - _BSSSpacer2: 0 + - _BSSSpacer3: 0 + - _BackFaceColorThemeIndex: 0 + - _BackFaceDetailIntensity: 1 + - _BackFaceEmissionLimiter: 1 + - _BackFaceEmissionStrength: 0 + - _BackFaceEnabled: 0 + - _BackFaceHueSelectOrShift: 1 + - _BackFaceHueShift: 0 + - _BackFaceHueShiftEnabled: 0 + - _BackFaceHueShiftSpeed: 0 + - _BackFaceMaskChannel: 0 + - _BackFaceMaskUV: 0 + - _BackFaceReplaceAlpha: 0 + - _BackFaceShiftColorSpace: 0 + - _BackFaceTextureUV: 0 + - _BacklightBackfaceMask: 1 + - _BacklightBlur: 0.05 + - _BacklightBorder: 0.35 + - _BacklightColorTexUV: 0 + - _BacklightDirectivity: 5 + - _BacklightEnabled: 0 + - _BacklightMainStrength: 0 + - _BacklightNormalStrength: 1 + - _BacklightReceiveShadow: 1 + - _BacklightViewStrength: 1 + - _BaseColor_Step: 0.5 + - _BaseShade_Feather: 0.0001 + - _BlackLightMasking0GlobalMaskBlendType: 0 + - _BlackLightMasking0GlobalMaskIndex: 0 + - _BlackLightMasking0Key: 1 + - _BlackLightMasking1GlobalMaskBlendType: 0 + - _BlackLightMasking1GlobalMaskIndex: 0 + - _BlackLightMasking1Key: 2 + - _BlackLightMasking2GlobalMaskBlendType: 0 + - _BlackLightMasking2GlobalMaskIndex: 0 + - _BlackLightMasking2Key: 3 + - _BlackLightMasking3GlobalMaskBlendType: 0 + - _BlackLightMasking3GlobalMaskIndex: 0 + - _BlackLightMasking3Key: 4 + - _BlackLightMaskingEnabled: 0 + - _BlendOp: 0 + - _BlendOpAlpha: 0 + - _BlendshapeBadScaleFix: 1 + - _BlendshapePower: 1 + - _BlueAlphaAdd: 0 + - _BlueColorThemeIndex: 0 + - _BlueTextureStochastic: 0 + - _BlueTextureUV: 0 + - _BulgeOffset: 0 + - _BulgePower: 0 + - _BumpMapStochastic: 0 + - _BumpMapUV: 0 + - _BumpScale: 1 + - _CCIgnoreCastedShadows: 0 + - _CameraAngleMax: 90 + - _CameraAngleMin: 45 + - _CenterOutDissolveInvert: 0 + - _CenterOutDissolveMode: 1 + - _CenterOutDissolveNormals: 0 + - _CenterOutDissolvePower: 1 + - _ClearCoatBRDF: 0 + - _ClearCoatForceFallback: 0 + - _ClearCoatGSAAEnabled: 1 + - _ClearCoatGSAAThreshold: 0.1 + - _ClearCoatGSAAVariance: 0.15 + - _ClearCoatGlobalMask: 0 + - _ClearCoatGlobalMaskBlendType: 2 + - _ClearCoatLitFallback: 1 + - _ClearCoatMapsClearCoatMaskChannel: 0 + - _ClearCoatMapsReflectionMaskChannel: 2 + - _ClearCoatMapsRoughnessChannel: 1 + - _ClearCoatMapsSpecularMaskChannel: 3 + - _ClearCoatMapsStochastic: 0 + - _ClearCoatMapsUV: 0 + - _ClearCoatMaskInvert: 0 + - _ClearCoatNormalSelect: 0 + - _ClearCoatReflectionMaskInvert: 0 + - _ClearCoatReflectionStrength: 1 + - _ClearCoatReflectionStrengthGlobalMask: 0 + - _ClearCoatReflectionStrengthGlobalMaskBlendType: 2 + - _ClearCoatReflectionTintThemeIndex: 0 + - _ClearCoatSmoothness: 1 + - _ClearCoatSmoothnessGlobalMask: 0 + - _ClearCoatSmoothnessGlobalMaskBlendType: 2 + - _ClearCoatSmoothnessMapInvert: 0 + - _ClearCoatSpecularMaskInvert: 0 + - _ClearCoatSpecularStrength: 1 + - _ClearCoatSpecularStrengthGlobalMask: 0 + - _ClearCoatSpecularStrengthGlobalMaskBlendType: 2 + - _ClearCoatSpecularTintThemeIndex: 0 + - _ClearCoatStrength: 1 + - _ClearCoatTPSDepthMaskEnabled: 0 + - _ClearCoatTPSMaskStrength: 1 + - _ClearcoatExposureOcclusion: 0 + - _ClearcoatFresnelStrength: 0.5 + - _ClothLerp: 0 + - _ClothMetallicSmoothnessMapInvert: 0 + - _ClothMetallicSmoothnessMapUV: 0 + - _ClothReflectance: 0.5 + - _ClothSmoothness: 0.5 + - _ColorGradingToggle: 0 + - _ColorMask: 15 + - _ColorThemeIndex: 0 + - _ContinuousDissolve: 0 + - _CubeMapBlendAmount: 1 + - _CubeMapBrightness: 0 + - _CubeMapColorThemeIndex: 0 + - _CubeMapContrast: 1 + - _CubeMapEmissionStrength: 0 + - _CubeMapEnabled: 0 + - _CubeMapHueSelectOrShift: 1 + - _CubeMapHueShift: 0 + - _CubeMapHueShiftColorSpace: 0 + - _CubeMapHueShiftEnabled: 0 + - _CubeMapHueShiftSpeed: 0 + - _CubeMapIntensity: 1 + - _CubeMapLightMask: 0 + - _CubeMapMaskChannel: 0 + - _CubeMapMaskGlobalMask: 0 + - _CubeMapMaskGlobalMaskBlendType: 2 + - _CubeMapMaskInvert: 0 + - _CubeMapMaskUV: 0 + - _CubeMapNormal: 1 + - _CubeMapSaturation: 1 + - _CubeMapSmoothness: 1 + - _CubeMapUVMode: 1 + - _CubeMapWorldNormalsStrength: 1 + - _CubemapBlendType: 0 + - _Cull: 0 + - _CurvFix: 1 + - _Curvature: 0 + - _CurvatureU: 0 + - _CurvatureV: 0 + - _CustomColors: 0 + - _Cutoff: 0.5 + - _Decal0ApplyGlobalMaskBlendType: 0 + - _Decal0ApplyGlobalMaskIndex: 0 + - _Decal0ChannelSeparation: 0 + - _Decal0ChannelSeparationAngleStrength: 0 + - _Decal0ChannelSeparationEnable: 0 + - _Decal0ChannelSeparationHue: 0 + - _Decal0ChannelSeparationPremultiply: 0 + - _Decal0ChannelSeparationVertical: 0 + - _Decal0Depth: 0 + - _Decal0FaceMask: 0 + - _Decal0GlobalMask: 0 + - _Decal0GlobalMaskBlendType: 2 + - _Decal0HueAngleStrength: 0 + - _Decal0MaskChannel: 0 + - _Decal0OnlyVideo: 0 + - _Decal0OverrideAlphaMode: 0 + - _Decal0TPSMaskStrength: 1 + - _Decal0UseDecalAlpha: 0 + - _Decal0VideoAspectFix: 0 + - _Decal0VideoEmissionStrength: 0 + - _Decal0VideoEnabled: 0 + - _Decal0VideoFitToScale: 1 + - _Decal1ApplyGlobalMaskBlendType: 0 + - _Decal1ApplyGlobalMaskIndex: 0 + - _Decal1ChannelSeparation: 0 + - _Decal1ChannelSeparationAngleStrength: 0 + - _Decal1ChannelSeparationEnable: 0 + - _Decal1ChannelSeparationHue: 0 + - _Decal1ChannelSeparationPremultiply: 0 + - _Decal1ChannelSeparationVertical: 0 + - _Decal1Depth: 0 + - _Decal1FaceMask: 0 + - _Decal1GlobalMask: 0 + - _Decal1GlobalMaskBlendType: 2 + - _Decal1HueAngleStrength: 0 + - _Decal1MaskChannel: 1 + - _Decal1OnlyVideo: 0 + - _Decal1OverrideAlphaMode: 0 + - _Decal1TPSMaskStrength: 1 + - _Decal1UseDecalAlpha: 0 + - _Decal1VideoAspectFix: 0 + - _Decal1VideoEmissionStrength: 0 + - _Decal1VideoEnabled: 0 + - _Decal1VideoFitToScale: 1 + - _Decal2ApplyGlobalMaskBlendType: 0 + - _Decal2ApplyGlobalMaskIndex: 0 + - _Decal2ChannelSeparation: 0 + - _Decal2ChannelSeparationAngleStrength: 0 + - _Decal2ChannelSeparationEnable: 0 + - _Decal2ChannelSeparationHue: 0 + - _Decal2ChannelSeparationPremultiply: 0 + - _Decal2ChannelSeparationVertical: 0 + - _Decal2Depth: 0 + - _Decal2FaceMask: 0 + - _Decal2GlobalMask: 0 + - _Decal2GlobalMaskBlendType: 2 + - _Decal2HueAngleStrength: 0 + - _Decal2MaskChannel: 2 + - _Decal2OnlyVideo: 0 + - _Decal2OverrideAlphaMode: 0 + - _Decal2TPSMaskStrength: 1 + - _Decal2UseDecalAlpha: 0 + - _Decal2VideoAspectFix: 0 + - _Decal2VideoEmissionStrength: 0 + - _Decal2VideoEnabled: 0 + - _Decal2VideoFitToScale: 1 + - _Decal3ApplyGlobalMaskBlendType: 0 + - _Decal3ApplyGlobalMaskIndex: 0 + - _Decal3ChannelSeparation: 0 + - _Decal3ChannelSeparationAngleStrength: 0 + - _Decal3ChannelSeparationEnable: 0 + - _Decal3ChannelSeparationHue: 0 + - _Decal3ChannelSeparationPremultiply: 0 + - _Decal3ChannelSeparationVertical: 0 + - _Decal3Depth: 0 + - _Decal3FaceMask: 0 + - _Decal3GlobalMask: 0 + - _Decal3GlobalMaskBlendType: 2 + - _Decal3HueAngleStrength: 0 + - _Decal3MaskChannel: 3 + - _Decal3OnlyVideo: 0 + - _Decal3OverrideAlphaMode: 0 + - _Decal3TPSMaskStrength: 1 + - _Decal3UseDecalAlpha: 0 + - _Decal3VideoAspectFix: 0 + - _Decal3VideoEmissionStrength: 0 + - _Decal3VideoEnabled: 0 + - _Decal3VideoFitToScale: 1 + - _DecalBlendAlpha: 1 + - _DecalBlendAlpha1: 1 + - _DecalBlendAlpha2: 1 + - _DecalBlendAlpha3: 1 + - _DecalBlendType: 0 + - _DecalBlendType1: 0 + - _DecalBlendType2: 0 + - _DecalBlendType3: 0 + - _DecalColor1ThemeIndex: 0 + - _DecalColor2ThemeIndex: 0 + - _DecalColor3ThemeIndex: 0 + - _DecalColorThemeIndex: 0 + - _DecalEmissionStrength: 0 + - _DecalEmissionStrength1: 0 + - _DecalEmissionStrength2: 0 + - _DecalEmissionStrength3: 0 + - _DecalEnabled: 0 + - _DecalEnabled1: 0 + - _DecalEnabled2: 0 + - _DecalEnabled3: 0 + - _DecalHueShift: 0 + - _DecalHueShift1: 0 + - _DecalHueShift2: 0 + - _DecalHueShift3: 0 + - _DecalHueShiftColorSpace: 0 + - _DecalHueShiftColorSpace1: 0 + - _DecalHueShiftColorSpace2: 0 + - _DecalHueShiftColorSpace3: 0 + - _DecalHueShiftEnabled: 0 + - _DecalHueShiftEnabled1: 0 + - _DecalHueShiftEnabled2: 0 + - _DecalHueShiftEnabled3: 0 + - _DecalHueShiftSelectOrShift: 1 + - _DecalHueShiftSelectOrShift1: 1 + - _DecalHueShiftSelectOrShift2: 1 + - _DecalHueShiftSelectOrShift3: 1 + - _DecalHueShiftSpeed: 0 + - _DecalHueShiftSpeed1: 0 + - _DecalHueShiftSpeed2: 0 + - _DecalHueShiftSpeed3: 0 + - _DecalMaskUV: 0 + - _DecalMirroredUVMode: 0 + - _DecalMirroredUVMode1: 0 + - _DecalMirroredUVMode2: 0 + - _DecalMirroredUVMode3: 0 + - _DecalOverrideAlpha: 0 + - _DecalOverrideAlpha1: 0 + - _DecalOverrideAlpha2: 0 + - _DecalOverrideAlpha3: 0 + - _DecalRotation: 0 + - _DecalRotation1: 0 + - _DecalRotation2: 0 + - _DecalRotation3: 0 + - _DecalRotationCTALBand0: 0 + - _DecalRotationCTALBand1: 0 + - _DecalRotationCTALBand2: 0 + - _DecalRotationCTALBand3: 0 + - _DecalRotationCTALSpeed0: 0 + - _DecalRotationCTALSpeed1: 0 + - _DecalRotationCTALSpeed2: 0 + - _DecalRotationCTALSpeed3: 0 + - _DecalRotationCTALType0: 0 + - _DecalRotationCTALType1: 0 + - _DecalRotationCTALType2: 0 + - _DecalRotationCTALType3: 0 + - _DecalRotationSpeed: 0 + - _DecalRotationSpeed1: 0 + - _DecalRotationSpeed2: 0 + - _DecalRotationSpeed3: 0 + - _DecalSymmetryMode: 0 + - _DecalSymmetryMode1: 0 + - _DecalSymmetryMode2: 0 + - _DecalSymmetryMode3: 0 + - _DecalTPSDepthMaskEnabled: 0 + - _DecalTexture1UV: 0 + - _DecalTexture2UV: 0 + - _DecalTexture3UV: 0 + - _DecalTextureUV: 0 + - _DecalTiled: 0 + - _DecalTiled1: 0 + - _DecalTiled2: 0 + - _DecalTiled3: 0 + - _DepthAlphaMaxDepth: 1 + - _DepthAlphaMaxValue: 0 + - _DepthAlphaMinDepth: 0 + - _DepthAlphaMinValue: 1 + - _DepthAlphaToggle: 0 + - _DepthBulgeFadeLength: 0.02 + - _DepthBulgeHeight: 0.02 + - _DepthBulgeMaskChannel: 0 + - _DepthBulgeMaskUV: 0 + - _DepthBulgeWarning: 0 + - _DepthColorBlendMode: 0 + - _DepthColorMaxDepth: 1 + - _DepthColorMaxValue: 0 + - _DepthColorMinDepth: 0 + - _DepthColorMinValue: 1 + - _DepthColorThemeIndex: 0 + - _DepthColorToggle: 0 + - _DepthEmissionStrength: 0 + - _DepthFXWarning: 0 + - _DepthMaskChannel: 0 + - _DepthMaskGlobalMask: 0 + - _DepthMaskGlobalMaskBlendType: 2 + - _DepthMaskUV: 0 + - _DepthRimAdd: 0 + - _DepthRimAdditiveLighting: 0 + - _DepthRimBrightness: 1 + - _DepthRimColorThemeIndex: 0 + - _DepthRimEmission: 0 + - _DepthRimHideInShadow: 0 + - _DepthRimMixBaseColor: 0 + - _DepthRimMixLightColor: 0 + - _DepthRimMultiply: 0 + - _DepthRimNormalToUse: 1 + - _DepthRimReplace: 0 + - _DepthRimSharpness: 0.2 + - _DepthRimType: 0 + - _DepthRimWidth: 0.2 + - _DepthTextureUV: 0 + - _DetailBrightness: 1 + - _DetailEnabled: 0 + - _DetailMaskStochastic: 0 + - _DetailMaskUV: 0 + - _DetailNormalGlobalMask: 0 + - _DetailNormalGlobalMaskBlendType: 2 + - _DetailNormalMapScale: 1 + - _DetailNormalMapStochastic: 0 + - _DetailNormalMapUV: 0 + - _DetailTexGlobalMask: 0 + - _DetailTexGlobalMaskBlendType: 2 + - _DetailTexIntensity: 1 + - _DetailTexStochastic: 0 + - _DetailTexUV: 0 + - _DetailTintThemeIndex: 0 + - _DisableDirectionalInAdd: 1 + - _DissolveAlpha: 0 + - _DissolveAlpha0: 0 + - _DissolveAlpha1: 0 + - _DissolveAlpha2: 0 + - _DissolveAlpha3: 0 + - _DissolveAlpha4: 0 + - _DissolveAlpha5: 0 + - _DissolveAlpha6: 0 + - _DissolveAlpha7: 0 + - _DissolveAlpha8: 0 + - _DissolveAlpha9: 0 + - _DissolveApplyGlobalMaskBlendType: 0 + - _DissolveApplyGlobalMaskIndex: 0 + - _DissolveDetailEdgeSmoothing: 0 + - _DissolveDetailNoiseUV: 0 + - _DissolveDetailStrength: 0.1 + - _DissolveEdgeColorThemeIndex: 0 + - _DissolveEdgeEmission: 0 + - _DissolveEdgeHardness: 0.5 + - _DissolveEdgeHueSelectOrShift: 1 + - _DissolveEdgeHueShift: 0 + - _DissolveEdgeHueShiftColorSpace: 0 + - _DissolveEdgeHueShiftEnabled: 0 + - _DissolveEdgeHueShiftSpeed: 0 + - _DissolveEdgeWidth: 0.025 + - _DissolveHueSelectOrShift: 1 + - _DissolveHueShift: 0 + - _DissolveHueShiftColorSpace: 0 + - _DissolveHueShiftEnabled: 0 + - _DissolveHueShiftSpeed: 0 + - _DissolveInverseApplyGlobalMaskBlendType: 0 + - _DissolveInverseApplyGlobalMaskIndex: 0 + - _DissolveInvertDetailNoise: 0 + - _DissolveInvertNoise: 0 + - _DissolveMaskGlobalMask: 0 + - _DissolveMaskGlobalMaskBlendType: 2 + - _DissolveMaskInvert: 0 + - _DissolveMaskUV: 0 + - _DissolveNoiseTextureUV: 0 + - _DissolveP2PClamp: 0 + - _DissolveP2PEdgeLength: 0.1 + - _DissolveP2PWorldLocal: 0 + - _DissolveTextureColorThemeIndex: 0 + - _DissolveToEmissionStrength: 0 + - _DissolveToTextureUV: 0 + - _DissolveType: 1 + - _DissolveUseVertexColors: 0 + - _DistortionFlowTexture1UV: 0 + - _DistortionFlowTextureUV: 0 + - _DistortionMaskChannel: 0 + - _DistortionMaskUV: 0 + - _DistortionStrength: 0.03 + - _DistortionStrength1: 0.01 + - _DistortionStrength1AudioLinkBand: 0 + - _DistortionStrengthAudioLinkBand: 0 + - _DistortionUvToDistort: 0 + - _DstBlend: 0 + - _DstBlendAlpha: 10 + - _EmissionAL0Enabled: 0 + - _EmissionAL0MultipliersBand: 0 + - _EmissionAL0StrengthBand: 0 + - _EmissionAL1Enabled: 0 + - _EmissionAL1MultipliersBand: 0 + - _EmissionAL1StrengthBand: 0 + - _EmissionAL2Enabled: 0 + - _EmissionAL2MultipliersBand: 0 + - _EmissionAL2StrengthBand: 0 + - _EmissionAL3Enabled: 0 + - _EmissionAL3MultipliersBand: 0 + - _EmissionAL3StrengthBand: 0 + - _EmissionBaseColorAsMap: 0 + - _EmissionBaseColorAsMap1: 0 + - _EmissionBaseColorAsMap2: 0 + - _EmissionBaseColorAsMap3: 0 + - _EmissionBlinkingEnabled: 0 + - _EmissionBlinkingEnabled1: 0 + - _EmissionBlinkingEnabled2: 0 + - _EmissionBlinkingEnabled3: 0 + - _EmissionBlinkingOffset: 0 + - _EmissionBlinkingOffset1: 0 + - _EmissionBlinkingOffset2: 0 + - _EmissionBlinkingOffset3: 0 + - _EmissionCenterOutEnabled: 0 + - _EmissionCenterOutEnabled1: 0 + - _EmissionCenterOutEnabled2: 0 + - _EmissionCenterOutEnabled3: 0 + - _EmissionCenterOutSpeed: 5 + - _EmissionCenterOutSpeed1: 5 + - _EmissionCenterOutSpeed2: 5 + - _EmissionCenterOutSpeed3: 5 + - _EmissionColor1ThemeIndex: 0 + - _EmissionColor2ThemeIndex: 0 + - _EmissionColor3ThemeIndex: 0 + - _EmissionColorThemeIndex: 0 + - _EmissionFluorescence: 0 + - _EmissionFluorescence1: 0 + - _EmissionFluorescence2: 0 + - _EmissionFluorescence3: 0 + - _EmissionHueSelectOrShift: 1 + - _EmissionHueSelectOrShift1: 1 + - _EmissionHueSelectOrShift2: 1 + - _EmissionHueSelectOrShift3: 1 + - _EmissionHueShift: 0 + - _EmissionHueShift1: 0 + - _EmissionHueShift2: 0 + - _EmissionHueShift3: 0 + - _EmissionHueShiftColorSpace: 0 + - _EmissionHueShiftColorSpace1: 0 + - _EmissionHueShiftColorSpace2: 0 + - _EmissionHueShiftColorSpace3: 0 + - _EmissionHueShiftEnabled: 0 + - _EmissionHueShiftEnabled1: 0 + - _EmissionHueShiftEnabled2: 0 + - _EmissionHueShiftEnabled3: 0 + - _EmissionHueShiftSpeed: 0 + - _EmissionHueShiftSpeed1: 0 + - _EmissionHueShiftSpeed2: 0 + - _EmissionHueShiftSpeed3: 0 + - _EmissionMap1UV: 0 + - _EmissionMap2UV: 0 + - _EmissionMap3UV: 0 + - _EmissionMapUV: 0 + - _EmissionMask0GlobalMask: 0 + - _EmissionMask0GlobalMaskBlendType: 2 + - _EmissionMask1Channel: 0 + - _EmissionMask1GlobalMask: 0 + - _EmissionMask1GlobalMaskBlendType: 2 + - _EmissionMask1UV: 0 + - _EmissionMask2Channel: 0 + - _EmissionMask2GlobalMask: 0 + - _EmissionMask2GlobalMaskBlendType: 2 + - _EmissionMask2UV: 0 + - _EmissionMask3Channel: 0 + - _EmissionMask3GlobalMask: 0 + - _EmissionMask3GlobalMaskBlendType: 2 + - _EmissionMask3UV: 0 + - _EmissionMaskChannel: 0 + - _EmissionMaskInvert: 0 + - _EmissionMaskInvert1: 0 + - _EmissionMaskInvert2: 0 + - _EmissionMaskInvert3: 0 + - _EmissionMaskUV: 0 + - _EmissionReplace0: 0 + - _EmissionReplace1: 0 + - _EmissionReplace2: 0 + - _EmissionReplace3: 0 + - _EmissionSaturation: 0 + - _EmissionSaturation1: 0 + - _EmissionSaturation2: 0 + - _EmissionSaturation3: 0 + - _EmissionScrollingOffset: 0 + - _EmissionScrollingOffset1: 0 + - _EmissionScrollingOffset2: 0 + - _EmissionScrollingOffset3: 0 + - _EmissionScrollingUseCurve: 0 + - _EmissionScrollingUseCurve1: 0 + - _EmissionScrollingUseCurve2: 0 + - _EmissionScrollingUseCurve3: 0 + - _EmissionScrollingVertexColor: 0 + - _EmissionScrollingVertexColor1: 0 + - _EmissionScrollingVertexColor2: 0 + - _EmissionScrollingVertexColor3: 0 + - _EmissionStrength: 0 + - _EmissionStrength1: 0 + - _EmissionStrength2: 0 + - _EmissionStrength3: 0 + - _EmissiveBlink_Max: 1 + - _EmissiveBlink_Max1: 1 + - _EmissiveBlink_Max2: 1 + - _EmissiveBlink_Max3: 1 + - _EmissiveBlink_Min: 0 + - _EmissiveBlink_Min1: 0 + - _EmissiveBlink_Min2: 0 + - _EmissiveBlink_Min3: 0 + - _EmissiveBlink_Velocity: 4 + - _EmissiveBlink_Velocity1: 4 + - _EmissiveBlink_Velocity2: 4 + - _EmissiveBlink_Velocity3: 4 + - _EmissiveScroll_Interval: 20 + - _EmissiveScroll_Interval1: 20 + - _EmissiveScroll_Interval2: 20 + - _EmissiveScroll_Interval3: 20 + - _EmissiveScroll_Velocity: 10 + - _EmissiveScroll_Velocity1: 10 + - _EmissiveScroll_Velocity2: 10 + - _EmissiveScroll_Velocity3: 10 + - _EmissiveScroll_Width: 10 + - _EmissiveScroll_Width1: 10 + - _EmissiveScroll_Width2: 10 + - _EmissiveScroll_Width3: 10 + - _EnableALDecal: 0 + - _EnableAniso: 0 + - _EnableAudioLink: 0 + - _EnableDepthBulge: 0 + - _EnableDepthRimLighting: 0 + - _EnableDissolve: 0 + - _EnableDissolveAudioLink: 0 + - _EnableDistortion: 0 + - _EnableDistortionAudioLink: 0 + - _EnableEmission: 0 + - _EnableEmission1: 0 + - _EnableEmission2: 0 + - _EnableEmission3: 0 + - _EnableEnvironmentalRim: 0 + - _EnableFlipbook: 0 + - _EnableGITDEmission: 0 + - _EnableGITDEmission1: 0 + - _EnableGITDEmission2: 0 + - _EnableGITDEmission3: 0 + - _EnableMirrorOptions: 0 + - _EnableOutlines: 0 + - _EnablePathRemapping: 0 + - _EnablePathing: 0 + - _EnableRim2Lighting: 0 + - _EnableRimLighting: 0 + - _EnableTouchGlow: 0 + - _EnableTruchet: 0 + - _EnableUDIMDiscardOptions: 0 + - _EnableUDIMFaceDiscardOptions: 0 + - _EnableVolumeColor: 0 + - _EntranceStiffness: 0.01 + - _EntryOpenDuration: 0.1 + - _FFBFOutlineStencilHelp0: 0 + - _FFBFOutlineStencilHelp1: 0 + - _FFBFStencilHelp0: 0 + - _FFBFStencilHelp1: 0 + - _FXProximityColor: 0 + - _FXProximityColorBackFace: 0 + - _FXProximityColorMaxColorThemeIndex: 0 + - _FXProximityColorMaxDistance: 1 + - _FXProximityColorMinColorThemeIndex: 0 + - _FXProximityColorMinDistance: 0 + - _FXProximityColorType: 1 + - _FlipBackfaceNormals: 1 + - _FlipbookAlphaControlsFinalAlpha: 0 + - _FlipbookBlendType: 0 + - _FlipbookChronoType: 0 + - _FlipbookChronotensityBand: 0 + - _FlipbookChronotensityEnabled: 0 + - _FlipbookChronotensitySpeed: 0 + - _FlipbookColorReplaces: 0 + - _FlipbookColorThemeIndex: 0 + - _FlipbookCrossfadeEnabled: 0 + - _FlipbookCurrentFrame: 0 + - _FlipbookEmissionStrength: 0 + - _FlipbookEndFrame: 0 + - _FlipbookFPS: 30 + - _FlipbookFrameOffset: 0 + - _FlipbookHueSelectOrShift: 1 + - _FlipbookHueShift: 0 + - _FlipbookHueShiftColorSpace: 0 + - _FlipbookHueShiftEnabled: 0 + - _FlipbookHueShiftSpeed: 0 + - _FlipbookIntensityControlsAlpha: 0 + - _FlipbookManualFrameControl: 0 + - _FlipbookMaskChannel: 0 + - _FlipbookMaskGlobalMask: 0 + - _FlipbookMaskGlobalMaskBlendType: 2 + - _FlipbookMaskUV: 0 + - _FlipbookReplace: 1 + - _FlipbookRotation: 0 + - _FlipbookRotationSpeed: 0 + - _FlipbookStartAndEnd: 0 + - _FlipbookStartFrame: 0 + - _FlipbookTexArrayUV: 0 + - _FlipbookTiled: 0 + - _FogHeightOffset: 0 + - _FogHeightScale: 1 + - _FogScale: 1 + - _FogStartOffset: 0 + - _ForceFlatRampedLightmap: 1 + - _ForgotToLockMaterial: 1 + - _GGXAnisotropics: 0 + - _GITDEMaxEmissionMultiplier: 0 + - _GITDEMaxEmissionMultiplier1: 0 + - _GITDEMaxEmissionMultiplier2: 0 + - _GITDEMaxEmissionMultiplier3: 0 + - _GITDEMaxLight: 1 + - _GITDEMaxLight1: 1 + - _GITDEMaxLight2: 1 + - _GITDEMaxLight3: 1 + - _GITDEMinEmissionMultiplier: 1 + - _GITDEMinEmissionMultiplier1: 1 + - _GITDEMinEmissionMultiplier2: 1 + - _GITDEMinEmissionMultiplier3: 1 + - _GITDEMinLight: 0 + - _GITDEMinLight1: 0 + - _GITDEMinLight2: 0 + - _GITDEMinLight3: 0 + - _GITDEWorldOrMesh: 0 + - _GITDEWorldOrMesh1: 0 + - _GITDEWorldOrMesh2: 0 + - _GITDEWorldOrMesh3: 0 + - _GSAAStrength: 0 + - _GlitterALAlphaAddBand: 0 + - _GlitterALChronoRotationSpeed: 0 + - _GlitterALChronoRotationSpeedBand: 0 + - _GlitterALChronoRotationSpeedType: 0 + - _GlitterALChronoSparkleSpeed: 0 + - _GlitterALChronoSparkleSpeedBand: 0 + - _GlitterALChronoSparkleSpeedType: 0 + - _GlitterALEnabled: 0 + - _GlitterALMaxBrightnessBand: 0 + - _GlitterALSizeAddBand: 0 + - _GlitterAngleRange: 90 + - _GlitterBias: 0.8 + - _GlitterBlendType: 0 + - _GlitterBrightness: 3 + - _GlitterCenterSize: 0.08 + - _GlitterColorMapUV: 0 + - _GlitterColorThemeIndex: 0 + - _GlitterContrast: 300 + - _GlitterEnable: 0 + - _GlitterFrequency: 300 + - _GlitterHideInShadow: 0 + - _GlitterHueSelectOrShift: 1 + - _GlitterHueShift: 0 + - _GlitterHueShiftColorSpace: 0 + - _GlitterHueShiftEnabled: 0 + - _GlitterHueShiftSpeed: 0 + - _GlitterJaggyFix: 0 + - _GlitterLayers: 2 + - _GlitterMaskChannel: 0 + - _GlitterMaskGlobalMask: 0 + - _GlitterMaskGlobalMaskBlendType: 2 + - _GlitterMaskInvert: 0 + - _GlitterMaskUV: 0 + - _GlitterMinBrightness: 0 + - _GlitterMode: 0 + - _GlitterRandomColors: 0 + - _GlitterRandomLocation: 1 + - _GlitterRandomRotation: 0 + - _GlitterRandomSize: 0 + - _GlitterScaleWithLighting: 0 + - _GlitterShape: 0 + - _GlitterSize: 0.3 + - _GlitterSpeed: 10 + - _GlitterTextureRotation: 0 + - _GlitterUV: 0 + - _GlitterUseNormals: 0 + - _GlitterUseSurfaceColor: 0 + - _GlobalMaskBackface_0: 0 + - _GlobalMaskBackface_1: 0 + - _GlobalMaskBackface_10: 0 + - _GlobalMaskBackface_11: 0 + - _GlobalMaskBackface_12: 0 + - _GlobalMaskBackface_13: 0 + - _GlobalMaskBackface_14: 0 + - _GlobalMaskBackface_15: 0 + - _GlobalMaskBackface_2: 0 + - _GlobalMaskBackface_3: 0 + - _GlobalMaskBackface_4: 0 + - _GlobalMaskBackface_5: 0 + - _GlobalMaskBackface_6: 0 + - _GlobalMaskBackface_7: 0 + - _GlobalMaskBackface_8: 0 + - _GlobalMaskBackface_9: 0 + - _GlobalMaskCamera_0: 0 + - _GlobalMaskCamera_1: 0 + - _GlobalMaskCamera_10: 0 + - _GlobalMaskCamera_11: 0 + - _GlobalMaskCamera_12: 0 + - _GlobalMaskCamera_13: 0 + - _GlobalMaskCamera_14: 0 + - _GlobalMaskCamera_15: 0 + - _GlobalMaskCamera_2: 0 + - _GlobalMaskCamera_3: 0 + - _GlobalMaskCamera_4: 0 + - _GlobalMaskCamera_5: 0 + - _GlobalMaskCamera_6: 0 + - _GlobalMaskCamera_7: 0 + - _GlobalMaskCamera_8: 0 + - _GlobalMaskCamera_9: 0 + - _GlobalMaskDistanceBlendType_0: 0 + - _GlobalMaskDistanceBlendType_1: 0 + - _GlobalMaskDistanceBlendType_10: 0 + - _GlobalMaskDistanceBlendType_11: 0 + - _GlobalMaskDistanceBlendType_12: 0 + - _GlobalMaskDistanceBlendType_13: 0 + - _GlobalMaskDistanceBlendType_14: 0 + - _GlobalMaskDistanceBlendType_15: 0 + - _GlobalMaskDistanceBlendType_2: 0 + - _GlobalMaskDistanceBlendType_3: 0 + - _GlobalMaskDistanceBlendType_4: 0 + - _GlobalMaskDistanceBlendType_5: 0 + - _GlobalMaskDistanceBlendType_6: 0 + - _GlobalMaskDistanceBlendType_7: 0 + - _GlobalMaskDistanceBlendType_8: 0 + - _GlobalMaskDistanceBlendType_9: 0 + - _GlobalMaskDistanceEnable_0: 0 + - _GlobalMaskDistanceEnable_1: 0 + - _GlobalMaskDistanceEnable_10: 0 + - _GlobalMaskDistanceEnable_11: 0 + - _GlobalMaskDistanceEnable_12: 0 + - _GlobalMaskDistanceEnable_13: 0 + - _GlobalMaskDistanceEnable_14: 0 + - _GlobalMaskDistanceEnable_15: 0 + - _GlobalMaskDistanceEnable_2: 0 + - _GlobalMaskDistanceEnable_3: 0 + - _GlobalMaskDistanceEnable_4: 0 + - _GlobalMaskDistanceEnable_5: 0 + - _GlobalMaskDistanceEnable_6: 0 + - _GlobalMaskDistanceEnable_7: 0 + - _GlobalMaskDistanceEnable_8: 0 + - _GlobalMaskDistanceEnable_9: 0 + - _GlobalMaskDistanceMaxAlpha_0: 1 + - _GlobalMaskDistanceMaxAlpha_1: 1 + - _GlobalMaskDistanceMaxAlpha_10: 1 + - _GlobalMaskDistanceMaxAlpha_11: 1 + - _GlobalMaskDistanceMaxAlpha_12: 1 + - _GlobalMaskDistanceMaxAlpha_13: 1 + - _GlobalMaskDistanceMaxAlpha_14: 1 + - _GlobalMaskDistanceMaxAlpha_15: 1 + - _GlobalMaskDistanceMaxAlpha_2: 1 + - _GlobalMaskDistanceMaxAlpha_3: 1 + - _GlobalMaskDistanceMaxAlpha_4: 1 + - _GlobalMaskDistanceMaxAlpha_5: 1 + - _GlobalMaskDistanceMaxAlpha_6: 1 + - _GlobalMaskDistanceMaxAlpha_7: 1 + - _GlobalMaskDistanceMaxAlpha_8: 1 + - _GlobalMaskDistanceMaxAlpha_9: 1 + - _GlobalMaskDistanceMax_0: 2 + - _GlobalMaskDistanceMax_1: 2 + - _GlobalMaskDistanceMax_10: 2 + - _GlobalMaskDistanceMax_11: 2 + - _GlobalMaskDistanceMax_12: 2 + - _GlobalMaskDistanceMax_13: 2 + - _GlobalMaskDistanceMax_14: 2 + - _GlobalMaskDistanceMax_15: 2 + - _GlobalMaskDistanceMax_2: 2 + - _GlobalMaskDistanceMax_3: 2 + - _GlobalMaskDistanceMax_4: 2 + - _GlobalMaskDistanceMax_5: 2 + - _GlobalMaskDistanceMax_6: 2 + - _GlobalMaskDistanceMax_7: 2 + - _GlobalMaskDistanceMax_8: 2 + - _GlobalMaskDistanceMax_9: 2 + - _GlobalMaskDistanceMinAlpha_0: 0 + - _GlobalMaskDistanceMinAlpha_1: 0 + - _GlobalMaskDistanceMinAlpha_10: 0 + - _GlobalMaskDistanceMinAlpha_11: 0 + - _GlobalMaskDistanceMinAlpha_12: 0 + - _GlobalMaskDistanceMinAlpha_13: 0 + - _GlobalMaskDistanceMinAlpha_14: 0 + - _GlobalMaskDistanceMinAlpha_15: 0 + - _GlobalMaskDistanceMinAlpha_2: 0 + - _GlobalMaskDistanceMinAlpha_3: 0 + - _GlobalMaskDistanceMinAlpha_4: 0 + - _GlobalMaskDistanceMinAlpha_5: 0 + - _GlobalMaskDistanceMinAlpha_6: 0 + - _GlobalMaskDistanceMinAlpha_7: 0 + - _GlobalMaskDistanceMinAlpha_8: 0 + - _GlobalMaskDistanceMinAlpha_9: 0 + - _GlobalMaskDistanceMin_0: 1 + - _GlobalMaskDistanceMin_1: 1 + - _GlobalMaskDistanceMin_10: 1 + - _GlobalMaskDistanceMin_11: 1 + - _GlobalMaskDistanceMin_12: 1 + - _GlobalMaskDistanceMin_13: 1 + - _GlobalMaskDistanceMin_14: 1 + - _GlobalMaskDistanceMin_15: 1 + - _GlobalMaskDistanceMin_2: 1 + - _GlobalMaskDistanceMin_3: 1 + - _GlobalMaskDistanceMin_4: 1 + - _GlobalMaskDistanceMin_5: 1 + - _GlobalMaskDistanceMin_6: 1 + - _GlobalMaskDistanceMin_7: 1 + - _GlobalMaskDistanceMin_8: 1 + - _GlobalMaskDistanceMin_9: 1 + - _GlobalMaskDistanceType_0: 1 + - _GlobalMaskDistanceType_1: 1 + - _GlobalMaskDistanceType_10: 1 + - _GlobalMaskDistanceType_11: 1 + - _GlobalMaskDistanceType_12: 1 + - _GlobalMaskDistanceType_13: 1 + - _GlobalMaskDistanceType_14: 1 + - _GlobalMaskDistanceType_15: 1 + - _GlobalMaskDistanceType_2: 1 + - _GlobalMaskDistanceType_3: 1 + - _GlobalMaskDistanceType_4: 1 + - _GlobalMaskDistanceType_5: 1 + - _GlobalMaskDistanceType_6: 1 + - _GlobalMaskDistanceType_7: 1 + - _GlobalMaskDistanceType_8: 1 + - _GlobalMaskDistanceType_9: 1 + - _GlobalMaskMirrorVisibilityMode: 1 + - _GlobalMaskMirror_0: 0 + - _GlobalMaskMirror_1: 0 + - _GlobalMaskMirror_10: 0 + - _GlobalMaskMirror_11: 0 + - _GlobalMaskMirror_12: 0 + - _GlobalMaskMirror_13: 0 + - _GlobalMaskMirror_14: 0 + - _GlobalMaskMirror_15: 0 + - _GlobalMaskMirror_2: 0 + - _GlobalMaskMirror_3: 0 + - _GlobalMaskMirror_4: 0 + - _GlobalMaskMirror_5: 0 + - _GlobalMaskMirror_6: 0 + - _GlobalMaskMirror_7: 0 + - _GlobalMaskMirror_8: 0 + - _GlobalMaskMirror_9: 0 + - _GlobalMaskModifiersBackfaceEnable: 0 + - _GlobalMaskModifiersCameraEnable: 0 + - _GlobalMaskModifiersCameraInfo: 0 + - _GlobalMaskModifiersDistanceEnable: 0 + - _GlobalMaskModifiersMirrorEnable: 0 + - _GlobalMaskOptionsEnable: 0 + - _GlobalMaskOptionsType: 0 + - _GlobalMaskSlider_0: 0 + - _GlobalMaskSlider_1: 0 + - _GlobalMaskSlider_10: 0 + - _GlobalMaskSlider_11: 0 + - _GlobalMaskSlider_12: 0 + - _GlobalMaskSlider_13: 0 + - _GlobalMaskSlider_14: 0 + - _GlobalMaskSlider_15: 0 + - _GlobalMaskSlider_2: 0 + - _GlobalMaskSlider_3: 0 + - _GlobalMaskSlider_4: 0 + - _GlobalMaskSlider_5: 0 + - _GlobalMaskSlider_6: 0 + - _GlobalMaskSlider_7: 0 + - _GlobalMaskSlider_8: 0 + - _GlobalMaskSlider_9: 0 + - _GlobalMaskTexture0Split: 0 + - _GlobalMaskTexture0UV: 0 + - _GlobalMaskTexture1Split: 0 + - _GlobalMaskTexture1UV: 0 + - _GlobalMaskTexture2Split: 0 + - _GlobalMaskTexture2UV: 0 + - _GlobalMaskTexture3Split: 0 + - _GlobalMaskTexture3UV: 0 + - _GlobalMaskTexturesEnable: 0 + - _GlobalMaskToggleOff_0: 0 + - _GlobalMaskToggleOff_1: 0 + - _GlobalMaskToggleOff_10: 0 + - _GlobalMaskToggleOff_11: 0 + - _GlobalMaskToggleOff_12: 0 + - _GlobalMaskToggleOff_13: 0 + - _GlobalMaskToggleOff_14: 0 + - _GlobalMaskToggleOff_15: 0 + - _GlobalMaskToggleOff_2: 0 + - _GlobalMaskToggleOff_3: 0 + - _GlobalMaskToggleOff_4: 0 + - _GlobalMaskToggleOff_5: 0 + - _GlobalMaskToggleOff_6: 0 + - _GlobalMaskToggleOff_7: 0 + - _GlobalMaskToggleOff_8: 0 + - _GlobalMaskToggleOff_9: 0 + - _GlobalMaskToggleOn_0: 0 + - _GlobalMaskToggleOn_1: 0 + - _GlobalMaskToggleOn_10: 0 + - _GlobalMaskToggleOn_11: 0 + - _GlobalMaskToggleOn_12: 0 + - _GlobalMaskToggleOn_13: 0 + - _GlobalMaskToggleOn_14: 0 + - _GlobalMaskToggleOn_15: 0 + - _GlobalMaskToggleOn_2: 0 + - _GlobalMaskToggleOn_3: 0 + - _GlobalMaskToggleOn_4: 0 + - _GlobalMaskToggleOn_5: 0 + - _GlobalMaskToggleOn_6: 0 + - _GlobalMaskToggleOn_7: 0 + - _GlobalMaskToggleOn_8: 0 + - _GlobalMaskToggleOn_9: 0 + - _GlobalMaskVertexColorAlpha: 0 + - _GlobalMaskVertexColorAlphaBlendType: 2 + - _GlobalMaskVertexColorBlue: 0 + - _GlobalMaskVertexColorBlueBlendType: 2 + - _GlobalMaskVertexColorGreen: 0 + - _GlobalMaskVertexColorGreenBlendType: 2 + - _GlobalMaskVertexColorLinearSpace: 1 + - _GlobalMaskVertexColorRed: 0 + - _GlobalMaskVertexColorRedBlendType: 2 + - _GlobalThemeHue0: 0 + - _GlobalThemeHue1: 0 + - _GlobalThemeHue2: 0 + - _GlobalThemeHue3: 0 + - _GlobalThemeHueSpeed0: 0 + - _GlobalThemeHueSpeed1: 0 + - _GlobalThemeHueSpeed2: 0 + - _GlobalThemeHueSpeed3: 0 + - _GlobalThemeSaturation0: 0 + - _GlobalThemeSaturation1: 0 + - _GlobalThemeSaturation2: 0 + - _GlobalThemeSaturation3: 0 + - _GlobalThemeValue0: 0 + - _GlobalThemeValue1: 0 + - _GlobalThemeValue2: 0 + - _GlobalThemeValue3: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GreenAlphaAdd: 0 + - _GreenColorThemeIndex: 0 + - _GreenTextureStochastic: 0 + - _GreenTextureUV: 0 + - _HeightMapUV: 0 + - _HeightOffset: 0 + - _HeightStepsMax: 128 + - _HeightStepsMin: 10 + - _HeightStrength: 0.005 + - _HeightmaskChannel: 0 + - _HeightmaskInvert: 0 + - _HeightmaskUV: 0 + - _HighColorThemeIndex: 0 + - _HighColor_Power: 0.2 + - _HighColor_TexUV: 0 + - _IgnoreCastedShadows: 0 + - _IgnoreFog: 0 + - _Is_BlendAddToHiColor: 0 + - _Is_LightColor_Ap_Rim2Light: 1 + - _Is_LightColor_Ap_RimLight: 1 + - _Is_LightColor_Rim2Light: 1 + - _Is_LightColor_RimLight: 1 + - _Is_NormalMapToRim2Light: 1 + - _Is_NormalMapToRimLight: 1 + - _Is_SpecularToHighColor: 0 + - _LTCGIEnabled: 0 + - _LTCGI_AnimToggle: 1 + - _LTCGI_Attribution: 0 + - _LTCGI_DiffuseColorThemeIndex: 0 + - _LTCGI_Metallic: 0 + - _LTCGI_Smoothness: 0 + - _LTCGI_SpecularColorThemeIndex: 0 + - _LTCGI_UseEO: 0 + - _LTCGI_UsePBR: 1 + - _Layer1Strength: 1 + - _Layer2Size: 0 + - _Layer2Strength: 0 + - _Length: 0 + - _LightDataAOGlobalMaskBlendTypeR: 2 + - _LightDataAOGlobalMaskR: 0 + - _LightDataAOStrengthA: 0 + - _LightDataAOStrengthB: 0 + - _LightDataAOStrengthG: 0 + - _LightDataAOStrengthR: 1 + - _LightDataDebugEnabled: 0 + - _LightDataDetailShadowGlobalMaskBlendTypeR: 2 + - _LightDataDetailShadowGlobalMaskR: 0 + - _LightDataSDFBlendY: 1 + - _LightDataSDFMapLOD: 0 + - _LightDataSDFMapUV: 0 + - _LightDataShadowMaskGlobalMaskBlendTypeR: 2 + - _LightDataShadowMaskGlobalMaskR: 0 + - _LightDirection_MaskOn: 0 + - _LightDirection_MaskOn2: 0 + - _LightingAOMapsUV: 0 + - _LightingAddDetailShadowStrengthA: 0 + - _LightingAddDetailShadowStrengthB: 0 + - _LightingAddDetailShadowStrengthG: 0 + - _LightingAddDetailShadowStrengthR: 1 + - _LightingAdditiveCastedShadows: 1 + - _LightingAdditiveEnable: 1 + - _LightingAdditiveGradientEnd: 0.5 + - _LightingAdditiveGradientStart: 0 + - _LightingAdditiveLimit: 1 + - _LightingAdditiveLimited: 1 + - _LightingAdditiveMonochromatic: 0 + - _LightingAdditivePassthrough: 0.5 + - _LightingAdditiveType: 3 + - _LightingCap: 1 + - _LightingCapEnabled: 1 + - _LightingCastedShadows: 0 + - _LightingColorMode: 0 + - _LightingDebugVisualize: 0 + - _LightingDetailShadowMapsUV: 0 + - _LightingDetailShadowStrengthA: 0 + - _LightingDetailShadowStrengthB: 0 + - _LightingDetailShadowStrengthG: 0 + - _LightingDetailShadowStrengthR: 1 + - _LightingDirectionMode: 0 + - _LightingEnableLightVolumes: 1 + - _LightingForceColorEnabled: 0 + - _LightingForcedColorThemeIndex: 0 + - _LightingGradientEnd: 0.5 + - _LightingGradientStart: 0 + - _LightingIgnoreAmbientColor: 1 + - _LightingIndirectUsesNormals: 0 + - _LightingMapMode: 0 + - _LightingMinLightBrightness: 0 + - _LightingMirrorVertexLightingEnabled: 1 + - _LightingMode: 5 + - _LightingMonochromatic: 0 + - _LightingMulitlayerNonLinear: 1 + - _LightingShadowMaskStrengthA: 0 + - _LightingShadowMaskStrengthB: 0 + - _LightingShadowMaskStrengthG: 0 + - _LightingShadowMaskStrengthR: 1 + - _LightingShadowMasksUV: 0 + - _LightingVertexLightingEnabled: 1 + - _LightingViewDirOffsetPitch: 0 + - _LightingViewDirOffsetYaw: 0 + - _LightingWrappedNormalization: 0 + - _LightingWrappedWrap: 0 + - _LineColorThemeIndex: 0 + - _LineWidth: 1 + - _LookAtAlphaAlpha: 1 + - _LookAtAlphaMaskEnabled: 0 + - _LookAtAlphaTargetUp: 0 + - _LookAtBlueAlpha: 1 + - _LookAtBlueMaskEnabled: 0 + - _LookAtBlueTargetUp: 0 + - _LookAtGreenAlpha: 1 + - _LookAtGreenMaskEnabled: 0 + - _LookAtGreenTargetUp: 0 + - _LookAtMaskUV: 0 + - _LookAtRedAlpha: 1 + - _LookAtRedMaskEnabled: 1 + - _LookAtRedTargetUp: 0 + - _LookAtVisibilityEnabled: 0 + - _LookAtVisibilityMirror: 0 + - _LookAtVisibilityMode: 1 + - _LookAtVisibilityVRCCameraDesktop: 1 + - _LookAtVisibilityVRCCameraScreenshot: 1 + - _LookAtVisibilityVRCCameraVR: 1 + - _LookAtVisibilityVRCMirrorDesktop: 1 + - _LookAtVisibilityVRCMirrorVR: 1 + - _LookAtVisibilityVRCRegular: 1 + - _MainALHueShiftBand: 0 + - _MainALHueShiftCTIndex: 0 + - _MainAlphaMaskMode: 2 + - _MainBrightness: 0 + - _MainBrightnessGlobalMask: 0 + - _MainBrightnessGlobalMaskBlendType: 2 + - _MainColorAdjustTextureUV: 0 + - _MainColorAdjustToggle: 0 + - _MainGamma: 1 + - _MainGammaGlobalMask: 0 + - _MainGammaGlobalMaskBlendType: 2 + - _MainGradationStrength: 0 + - _MainHueALCTEnabled: 0 + - _MainHueALMotionSpeed: 1 + - _MainHueGlobalMask: 0 + - _MainHueGlobalMaskBlendType: 2 + - _MainHueShift: 0 + - _MainHueShiftColorSpace: 0 + - _MainHueShiftReplace: 1 + - _MainHueShiftSelectOrShift: 1 + - _MainHueShiftSpeed: 0 + - _MainHueShiftToggle: 0 + - _MainIgnoreTexAlpha: 0 + - _MainPixelMode: 0 + - _MainSaturationGlobalMask: 0 + - _MainSaturationGlobalMaskBlendType: 2 + - _MainTexStochastic: 0 + - _MainTexUV: 0 + - _MainUseVertexColorAlpha: 0 + - _MainVertexColoring: 0 + - _MainVertexColoringEnabled: 0 + - _MainVertexColoringLinearSpace: 1 + - _Matcap0ALAlphaAddBand: 0 + - _Matcap0ALChronoPanBand: 0 + - _Matcap0ALChronoPanSpeed: 0 + - _Matcap0ALChronoPanType: 0 + - _Matcap0ALEmissionAddBand: 0 + - _Matcap0ALEnabled: 0 + - _Matcap0ALIntensityAddBand: 0 + - _Matcap0CircleMaskBlur: 0.1 + - _Matcap0CircleMaskBorder: 0.45 + - _Matcap0CircleMaskEnabled: 0 + - _Matcap0CustomNormal: 0 + - _Matcap0NormalMapScale: 1 + - _Matcap0NormalMapUV: 0 + - _Matcap1ALAlphaAddBand: 0 + - _Matcap1ALChronoPanBand: 0 + - _Matcap1ALChronoPanSpeed: 0 + - _Matcap1ALChronoPanType: 0 + - _Matcap1ALEmissionAddBand: 0 + - _Matcap1ALEnabled: 0 + - _Matcap1ALIntensityAddBand: 0 + - _Matcap1CustomNormal: 0 + - _Matcap1NormalMapScale: 1 + - _Matcap1NormalMapUV: 0 + - _Matcap2ALAlphaAddBand: 0 + - _Matcap2ALChronoPanBand: 0 + - _Matcap2ALChronoPanSpeed: 0 + - _Matcap2ALChronoPanType: 0 + - _Matcap2ALEmissionAddBand: 0 + - _Matcap2ALEnabled: 0 + - _Matcap2ALIntensityAddBand: 0 + - _Matcap2Add: 0 + - _Matcap2AddToLight: 0 + - _Matcap2AlphaOverride: 0 + - _Matcap2ApplyToAlphaBlendType: 0 + - _Matcap2ApplyToAlphaBlending: 1 + - _Matcap2ApplyToAlphaEnabled: 0 + - _Matcap2ApplyToAlphaSourceBlend: 0 + - _Matcap2BaseColorMix: 0 + - _Matcap2Border: 0.5 + - _Matcap2CircleMaskBlur: 0.1 + - _Matcap2CircleMaskBorder: 0.45 + - _Matcap2CircleMaskEnabled: 0 + - _Matcap2ColorThemeIndex: 0 + - _Matcap2CustomNormal: 0 + - _Matcap2EmissionStrength: 0 + - _Matcap2Enable: 0 + - _Matcap2HueSelectOrShift: 1 + - _Matcap2HueShift: 0 + - _Matcap2HueShiftColorSpace: 0 + - _Matcap2HueShiftEnabled: 0 + - _Matcap2HueShiftSpeed: 0 + - _Matcap2Intensity: 1 + - _Matcap2LightColorMix: 0 + - _Matcap2LightMask: 0 + - _Matcap2MaskChannel: 0 + - _Matcap2MaskGlobalMask: 0 + - _Matcap2MaskGlobalMaskBlendType: 2 + - _Matcap2MaskInvert: 0 + - _Matcap2MaskSmoothnessApply: 0 + - _Matcap2MaskSmoothnessChannel: 3 + - _Matcap2MaskUV: 0 + - _Matcap2Mixed: 0 + - _Matcap2Multiply: 0 + - _Matcap2Normal: 1 + - _Matcap2NormalMapScale: 1 + - _Matcap2NormalMapUV: 0 + - _Matcap2Replace: 0 + - _Matcap2Rotation: 0 + - _Matcap2Screen: 0 + - _Matcap2Smoothness: 1 + - _Matcap2TPSDepthEnabled: 0 + - _Matcap2TPSMaskStrength: 1 + - _Matcap2UVMode: 1 + - _Matcap2UVToBlend: 1 + - _Matcap3ALAlphaAddBand: 0 + - _Matcap3ALChronoPanBand: 0 + - _Matcap3ALChronoPanSpeed: 0 + - _Matcap3ALChronoPanType: 0 + - _Matcap3ALEmissionAddBand: 0 + - _Matcap3ALEnabled: 0 + - _Matcap3ALIntensityAddBand: 0 + - _Matcap3Add: 0 + - _Matcap3AddToLight: 0 + - _Matcap3AlphaOverride: 0 + - _Matcap3ApplyToAlphaBlendType: 0 + - _Matcap3ApplyToAlphaBlending: 1 + - _Matcap3ApplyToAlphaEnabled: 0 + - _Matcap3ApplyToAlphaSourceBlend: 0 + - _Matcap3BaseColorMix: 0 + - _Matcap3Border: 0.5 + - _Matcap3CircleMaskBlur: 0.1 + - _Matcap3CircleMaskBorder: 0.45 + - _Matcap3CircleMaskEnabled: 0 + - _Matcap3ColorThemeIndex: 0 + - _Matcap3CustomNormal: 0 + - _Matcap3EmissionStrength: 0 + - _Matcap3Enable: 0 + - _Matcap3HueSelectOrShift: 1 + - _Matcap3HueShift: 0 + - _Matcap3HueShiftColorSpace: 0 + - _Matcap3HueShiftEnabled: 0 + - _Matcap3HueShiftSpeed: 0 + - _Matcap3Intensity: 1 + - _Matcap3LightColorMix: 0 + - _Matcap3LightMask: 0 + - _Matcap3MaskChannel: 0 + - _Matcap3MaskGlobalMask: 0 + - _Matcap3MaskGlobalMaskBlendType: 2 + - _Matcap3MaskInvert: 0 + - _Matcap3MaskSmoothnessApply: 0 + - _Matcap3MaskSmoothnessChannel: 3 + - _Matcap3MaskUV: 0 + - _Matcap3Mixed: 0 + - _Matcap3Multiply: 0 + - _Matcap3Normal: 1 + - _Matcap3NormalMapScale: 1 + - _Matcap3NormalMapUV: 0 + - _Matcap3Replace: 0 + - _Matcap3Rotation: 0 + - _Matcap3Screen: 0 + - _Matcap3Smoothness: 1 + - _Matcap3TPSDepthEnabled: 0 + - _Matcap3TPSMaskStrength: 1 + - _Matcap3UVMode: 1 + - _Matcap3UVToBlend: 1 + - _Matcap4Add: 0 + - _Matcap4AddToLight: 0 + - _Matcap4AlphaOverride: 0 + - _Matcap4ApplyToAlphaBlendType: 0 + - _Matcap4ApplyToAlphaBlending: 1 + - _Matcap4ApplyToAlphaEnabled: 0 + - _Matcap4ApplyToAlphaSourceBlend: 0 + - _Matcap4BaseColorMix: 0 + - _Matcap4Border: 0.5 + - _Matcap4CircleMaskBlur: 0.1 + - _Matcap4CircleMaskBorder: 0.45 + - _Matcap4CircleMaskEnabled: 0 + - _Matcap4ColorThemeIndex: 0 + - _Matcap4EmissionStrength: 0 + - _Matcap4Enable: 0 + - _Matcap4HueSelectOrShift: 1 + - _Matcap4HueShift: 0 + - _Matcap4HueShiftColorSpace: 0 + - _Matcap4HueShiftEnabled: 0 + - _Matcap4HueShiftSpeed: 0 + - _Matcap4Intensity: 1 + - _Matcap4LightColorMix: 0 + - _Matcap4LightMask: 0 + - _Matcap4MaskChannel: 0 + - _Matcap4MaskGlobalMask: 0 + - _Matcap4MaskGlobalMaskBlendType: 2 + - _Matcap4MaskInvert: 0 + - _Matcap4MaskSmoothnessApply: 0 + - _Matcap4MaskSmoothnessChannel: 3 + - _Matcap4MaskUV: 0 + - _Matcap4Mixed: 0 + - _Matcap4Multiply: 0 + - _Matcap4Normal: 1 + - _Matcap4Replace: 0 + - _Matcap4Rotation: 0 + - _Matcap4Screen: 0 + - _Matcap4Smoothness: 1 + - _Matcap4TPSDepthEnabled: 0 + - _Matcap4TPSMaskStrength: 1 + - _Matcap4UVMode: 1 + - _Matcap4UVToBlend: 1 + - _MatcapAdd: 0 + - _MatcapAddToLight: 0 + - _MatcapAlphaOverride: 0 + - _MatcapApplyToAlphaBlendType: 0 + - _MatcapApplyToAlphaBlending: 1 + - _MatcapApplyToAlphaEnabled: 0 + - _MatcapApplyToAlphaSourceBlend: 0 + - _MatcapBaseColorMix: 0 + - _MatcapBorder: 0.5 + - _MatcapColorThemeIndex: 0 + - _MatcapEmissionStrength: 0 + - _MatcapEnable: 0 + - _MatcapHueSelectOrShift: 1 + - _MatcapHueShift: 0 + - _MatcapHueShiftColorSpace: 0 + - _MatcapHueShiftEnabled: 0 + - _MatcapHueShiftSpeed: 0 + - _MatcapIntensity: 1 + - _MatcapLightColorMix: 0 + - _MatcapLightMask: 0 + - _MatcapMaskChannel: 0 + - _MatcapMaskGlobalMask: 0 + - _MatcapMaskGlobalMaskBlendType: 2 + - _MatcapMaskInvert: 0 + - _MatcapMaskSmoothnessApply: 0 + - _MatcapMaskSmoothnessChannel: 3 + - _MatcapMaskUV: 0 + - _MatcapMixed: 0 + - _MatcapMultiply: 0 + - _MatcapNormal: 1 + - _MatcapReplace: 1 + - _MatcapRotation: 0 + - _MatcapScreen: 0 + - _MatcapSmoothness: 1 + - _MatcapTPSDepthEnabled: 0 + - _MatcapTPSMaskStrength: 1 + - _MatcapUVMode: 1 + - _MatcapUVToBlend: 1 + - _Metallic: 0 + - _Mirror: 0 + - _MirrorColorThemeIndex: 0 + - _MirrorTextureBlendType: 0 + - _MirrorTextureEnabled: 0 + - _MirrorTextureForceEnabled: 0 + - _MirrorTextureUV: 0 + - _MochieBRDF: 0 + - _MochieForceFallback: 0 + - _MochieGSAAEnabled: 1 + - _MochieLitFallback: 1 + - _MochieMetallicGlobalMask: 0 + - _MochieMetallicGlobalMaskBlendType: 2 + - _MochieMetallicMapInvert: 0 + - _MochieMetallicMapsMetallicChannel: 0 + - _MochieMetallicMapsReflectionMaskChannel: 2 + - _MochieMetallicMapsRoughnessChannel: 1 + - _MochieMetallicMapsSpecularMaskChannel: 3 + - _MochieMetallicMapsStochastic: 0 + - _MochieMetallicMapsUV: 0 + - _MochieMetallicMasksUV: 0 + - _MochieMetallicMultiplier: 0 + - _MochieReflectionMaskInvert: 0 + - _MochieReflectionStrength: 1 + - _MochieReflectionStrengthGlobalMask: 0 + - _MochieReflectionStrengthGlobalMaskBlendType: 2 + - _MochieReflectionTintThemeIndex: 0 + - _MochieRoughnessMapInvert: 0 + - _MochieRoughnessMultiplier: 1 + - _MochieRoughnessMultiplier2: 1 + - _MochieSmoothnessGlobalMask: 0 + - _MochieSmoothnessGlobalMaskBlendType: 2 + - _MochieSpecularMaskInvert: 0 + - _MochieSpecularStrength: 1 + - _MochieSpecularStrength2: 1 + - _MochieSpecularStrengthGlobalMask: 0 + - _MochieSpecularStrengthGlobalMaskBlendType: 2 + - _MochieSpecularTintThemeIndex: 0 + - _Mode: 0 + - _ModelAngleMax: 90 + - _ModelAngleMin: 45 + - _MultilayerMathBlurMapUV: 0 + - _NormalCorrect: 0 + - _NormalCorrectAmount: 0.9 + - _OcclusionStrength: 1 + - _OffsetFactor: 0 + - _OffsetUnits: 0 + - _Offset_Z: 0 + - _OrifaceEnabled: 0 + - _OrificeChannel: 0 + - _OutlineALColorEnabled: 0 + - _OutlineAlphaDistanceFade: 0 + - _OutlineAlphaDistanceFadeMax: 0 + - _OutlineAlphaDistanceFadeMaxAlpha: 1 + - _OutlineAlphaDistanceFadeMin: 0 + - _OutlineAlphaDistanceFadeMinAlpha: 0 + - _OutlineAlphaDistanceFadeType: 1 + - _OutlineBlendOp: 0 + - _OutlineBlendOpAlpha: 4 + - _OutlineClipAtZeroWidth: 1 + - _OutlineCull: 1 + - _OutlineDstBlend: 0 + - _OutlineDstBlendAlpha: 0 + - _OutlineEmission: 0 + - _OutlineExpansionMode: 1 + - _OutlineFixWidth: 0.5 + - _OutlineFixedSize: 1 + - _OutlineGamma: 1 + - _OutlineHue: 0 + - _OutlineHueOffsetSpeed: 0 + - _OutlineHueShift: 0 + - _OutlineLit: 1 + - _OutlineMaskChannel: 0 + - _OutlineMaskUV: 0 + - _OutlineOverrideAlpha: 0 + - _OutlineRimLightBlend: 0 + - _OutlineSaturation: 1 + - _OutlineShadowStrength: 0 + - _OutlineSpace: 0 + - _OutlineSrcBlend: 1 + - _OutlineSrcBlendAlpha: 1 + - _OutlineStencilBackCompareFunction: 8 + - _OutlineStencilBackFailOp: 0 + - _OutlineStencilBackPassOp: 0 + - _OutlineStencilBackZFailOp: 0 + - _OutlineStencilCompareFunction: 8 + - _OutlineStencilFailOp: 0 + - _OutlineStencilFrontCompareFunction: 8 + - _OutlineStencilFrontFailOp: 0 + - _OutlineStencilFrontPassOp: 0 + - _OutlineStencilFrontZFailOp: 0 + - _OutlineStencilPassOp: 0 + - _OutlineStencilReadMask: 255 + - _OutlineStencilRef: 0 + - _OutlineStencilType: 0 + - _OutlineStencilWriteMask: 255 + - _OutlineStencilZFailOp: 0 + - _OutlineTextureUV: 0 + - _OutlineTintMix: 0 + - _OutlineUseVertexColorNormals: 0 + - _OutlineValue: 1 + - _OutlineVertexColorMask: 0 + - _OutlineVertexColorMaskStrength: 1 + - _OutlineZOffsetChannel: 0 + - _OutlineZOffsetInvertMaskChannel: 0 + - _OutlineZOffsetMaskStrength: 1 + - _OutlineZOffsetVertexColor: 0 + - _OutlineZOffsetVertexColorStrength: 1 + - _OutlineZTest: 4 + - _OutlineZWrite: 1 + - _OutlinesMaxDistance: 1 + - _PBRNormalSelect: 1 + - _PBRSplitMaskSample: 0 + - _PBRSplitMaskStochastic: 0 + - _PPBrightness: 1 + - _PPContrast: 1 + - _PPEmissionMultiplier: 1 + - _PPFinalColorMultiplier: 1 + - _PPHDR: 0 + - _PPHelp: 0 + - _PPHue: 0 + - _PPHueShiftColorSpace: 0 + - _PPLightingAddition: 0 + - _PPLightingMultiplier: 1 + - _PPLightness: 0 + - _PPMaskChannel: 0 + - _PPMaskInvert: 0 + - _PPMaskUV: 0 + - _PPPosterization: 0 + - _PPPosterizationAmount: 4 + - _PPSaturation: 1 + - _PanoUseBothEyes: 1 + - _Parallax: 0.02 + - _ParallaxAnisotropic: 1 + - _ParallaxAnisotropyScale: 1 + - _ParallaxBinarySteps: 8 + - _ParallaxConeRatio: 1 + - _ParallaxInternalBlendMode: 0 + - _ParallaxInternalHeightFromAlpha: 0 + - _ParallaxInternalHeightmapMode: 0 + - _ParallaxInternalHueSelectOrShift: 1 + - _ParallaxInternalHueShift: 0 + - _ParallaxInternalHueShiftColorSpace: 0 + - _ParallaxInternalHueShiftEnabled: 0 + - _ParallaxInternalHueShiftPerLevel: 0 + - _ParallaxInternalHueShiftSpeed: 0 + - _ParallaxInternalIterations: 4 + - _ParallaxInternalMapMaskChannel: 0 + - _ParallaxInternalMapMaskUV: 0 + - _ParallaxInternalMaxColorThemeIndex: 0 + - _ParallaxInternalMaxDepth: 0.1 + - _ParallaxInternalMaxFade: 0.1 + - _ParallaxInternalMinColorThemeIndex: 0 + - _ParallaxInternalMinDepth: 0 + - _ParallaxInternalMinFade: 1 + - _ParallaxInternalSurfaceBlendMode: 8 + - _ParallaxMipBias: 0 + - _ParallaxRelaxedCone: 1 + - _ParallaxUV: 0 + - _PathALAutoCorrelator: 0 + - _PathALAutoCorrelatorA: 0 + - _PathALAutoCorrelatorB: 0 + - _PathALAutoCorrelatorG: 0 + - _PathALAutoCorrelatorMode: 0 + - _PathALAutoCorrelatorR: 0 + - _PathALCCA: 0 + - _PathALCCB: 0 + - _PathALCCG: 0 + - _PathALCCR: 0 + - _PathALChrono: 0 + - _PathALColorChord: 0 + - _PathALEmissionOffset: 0 + - _PathALHistory: 0 + - _PathALHistoryA: 0 + - _PathALHistoryB: 0 + - _PathALHistoryBandA: 0 + - _PathALHistoryBandB: 0 + - _PathALHistoryBandG: 0 + - _PathALHistoryBandR: 0 + - _PathALHistoryG: 0 + - _PathALHistoryMode: 0 + - _PathALHistoryR: 0 + - _PathALTimeOffset: 0 + - _PathALWidthOffset: 0 + - _PathChronoBandA: 0 + - _PathChronoBandB: 0 + - _PathChronoBandG: 0 + - _PathChronoBandR: 0 + - _PathChronoSpeedA: 0 + - _PathChronoSpeedB: 0 + - _PathChronoSpeedG: 0 + - _PathChronoSpeedR: 0 + - _PathChronoTypeA: 0 + - _PathChronoTypeB: 0 + - _PathChronoTypeG: 0 + - _PathChronoTypeR: 0 + - _PathColorAThemeIndex: 0 + - _PathColorBThemeIndex: 0 + - _PathColorGThemeIndex: 0 + - _PathColorRThemeIndex: 0 + - _PathGradientType: 0 + - _PathPointSampling: 1 + - _PathSource: 0 + - _PathSourceDirA: 0 + - _PathSourceDirB: 0 + - _PathSourceDirG: 0 + - _PathSourceDirR: 0 + - _PathSurfaceBlendMode: 0 + - _PathTypeA: 2 + - _PathTypeB: 2 + - _PathTypeG: 2 + - _PathTypeR: 2 + - _PathingColorMapUV: 0 + - _PathingMapUV: 0 + - _PathingOverrideAlpha: 0 + - _PathingUVSelect: 0 + - _PenetratorEnabled: 0 + - _PoiGSAAThreshold: 0.1 + - _PoiGSAAVariance: 0.15 + - _PoiInternalParallax: 0 + - _PoiParallax: 0 + - _PoiUTSStyleOutlineBlend: 0 + - _PolarLengthScale: 1 + - _PolarRadialScale: 1 + - _PolarSpiralPower: 0 + - _PolarUV: 0 + - _PostProcess: 0 + - _RGBAAlphaBlendType: 0 + - _RGBAAlphaEmissionStrength: 0 + - _RGBAAlphaEnable: 0 + - _RGBAAlphaMetallicInvert: 0 + - _RGBAAlphaPBRSplitMaskSample: 0 + - _RGBAAlphaPBRSplitMaskStochastic: 0 + - _RGBAAlphaPBRUV: 0 + - _RGBAAlphaSmoothnessInvert: 0 + - _RGBABlueBlendType: 0 + - _RGBABlueEmissionStrength: 0 + - _RGBABlueEnable: 0 + - _RGBABlueMetallicInvert: 0 + - _RGBABluePBRSplitMaskSample: 0 + - _RGBABluePBRSplitMaskStochastic: 0 + - _RGBABluePBRUV: 0 + - _RGBABlueSmoothnessInvert: 0 + - _RGBAGreenBlendType: 0 + - _RGBAGreenEmissionStrength: 0 + - _RGBAGreenEnable: 0 + - _RGBAGreenMetallicInvert: 0 + - _RGBAGreenPBRSplitMaskSample: 0 + - _RGBAGreenPBRSplitMaskStochastic: 0 + - _RGBAGreenPBRUV: 0 + - _RGBAGreenSmoothnessInvert: 0 + - _RGBAMetallicMapsStochastic: 0 + - _RGBAMetallicMapsUV: 0 + - _RGBAPBRAlphaEnabled: 0 + - _RGBAPBRBlueEnabled: 0 + - _RGBAPBRGreenEnabled: 0 + - _RGBAPBRRedEnabled: 0 + - _RGBARedBlendType: 0 + - _RGBARedEmissionStrength: 0 + - _RGBARedEnable: 0 + - _RGBARedMetallicInvert: 0 + - _RGBARedPBRSplitMaskSample: 0 + - _RGBARedPBRSplitMaskStochastic: 0 + - _RGBARedPBRUV: 0 + - _RGBARedSmoothnessInvert: 0 + - _RGBASmoothnessMapsStochastic: 0 + - _RGBASmoothnessMapsUV: 0 + - _RGBMaskEnabled: 0 + - _RGBMaskType: 0 + - _RGBMaskUV: 0 + - _RalivAdvancedHelp: 0 + - _RalivDPSDisableShadowCaster: 1 + - _RalivDPSDisableShadowCasterHelp: 0 + - _RalivHelp: 0 + - _ReCurvature: 0 + - _RedAlphaAdd: 0 + - _RedColorThemeIndex: 0 + - _RedTextureStochastic: 0 + - _RedTextureUV: 0 + - _RefSpecFresnelStrength: 0.5 + - _Reflectance: 0.04 + - _ReflectionAnisotropicStretch: 1 + - _ReflectionApplyTransparency: 1 + - _ReflectionBlendMode: 1 + - _ReflectionCubeEnableLighting: 1 + - _ReflectionCubeOverride: 0 + - _ReflectionNormalStrength: 1 + - _RenderingAOBlockerEnabled: 0 + - _RenderingAOBlockerFlipNormal: 0 + - _RenderingAOBlockerNote: 0 + - _RenderingAOBlockerUVChannel: 0 + - _RenderingEarlyZEnabled: 0 + - _RenderingReduceClipDistance: 0 + - _RgbAlphaGlobalMaskBlendType: 2 + - _RgbAlphaGlobalMaskChannel: 0 + - _RgbAlphaMaskChannel: 3 + - _RgbBlueGlobalMaskBlendType: 2 + - _RgbBlueGlobalMaskChannel: 0 + - _RgbBlueMaskChannel: 2 + - _RgbGreenGlobalMaskBlendType: 2 + - _RgbGreenGlobalMaskChannel: 0 + - _RgbGreenMaskChannel: 1 + - _RgbNormalAGlobalMaskBlendType: 2 + - _RgbNormalAGlobalMaskChannel: 0 + - _RgbNormalAMaskChannel: 3 + - _RgbNormalAScale: 0 + - _RgbNormalAStochastic: 0 + - _RgbNormalAUV: 0 + - _RgbNormalAlphaBlendMode: 0 + - _RgbNormalBGlobalMaskBlendType: 2 + - _RgbNormalBGlobalMaskChannel: 0 + - _RgbNormalBMaskChannel: 2 + - _RgbNormalBScale: 0 + - _RgbNormalBStochastic: 0 + - _RgbNormalBUV: 0 + - _RgbNormalBlueBlendMode: 0 + - _RgbNormalGGlobalMaskBlendType: 2 + - _RgbNormalGGlobalMaskChannel: 0 + - _RgbNormalGMaskChannel: 1 + - _RgbNormalGScale: 0 + - _RgbNormalGStochastic: 0 + - _RgbNormalGUV: 0 + - _RgbNormalGreenBlendMode: 0 + - _RgbNormalRGlobalMaskBlendType: 2 + - _RgbNormalRGlobalMaskChannel: 0 + - _RgbNormalRMaskChannel: 0 + - _RgbNormalRScale: 0 + - _RgbNormalRStochastic: 0 + - _RgbNormalRUV: 0 + - _RgbNormalRedBlendMode: 0 + - _RgbRedGlobalMaskBlendType: 2 + - _RgbRedGlobalMaskChannel: 0 + - _RgbRedMaskChannel: 0 + - _Rim2ApColorThemeIndex: 0 + - _Rim2ApplyAlpha: 0 + - _Rim2ApplyAlphaBlend: 1 + - _Rim2ApplyGlobalMaskBlendType: 2 + - _Rim2ApplyGlobalMaskIndex: 0 + - _Rim2BackfaceMask: 1 + - _Rim2BaseColorMix: 0 + - _Rim2BiasIntensity: 0 + - _Rim2BlendMode: 1 + - _Rim2BlendStrength: 1 + - _Rim2Blur: 0.65 + - _Rim2Border: 0.5 + - _Rim2Brightness: 1 + - _Rim2ColorTexUV: 0 + - _Rim2DirRange: 0 + - _Rim2DirStrength: 0 + - _Rim2EnableLighting: 1 + - _Rim2FresnelPower: 3.5 + - _Rim2GlobalMask: 0 + - _Rim2GlobalMaskBlendType: 2 + - _Rim2HueSelectOrShift: 1 + - _Rim2HueShift: 0 + - _Rim2HueShiftColorSpace: 0 + - _Rim2HueShiftEnabled: 0 + - _Rim2HueShiftSpeed: 0 + - _Rim2IndirBlur: 0.1 + - _Rim2IndirBorder: 0.5 + - _Rim2IndirRange: 0 + - _Rim2LightColorThemeIndex: 0 + - _Rim2Light_FeatherOff: 0 + - _Rim2Light_InsideMask: 0.0001 + - _Rim2Light_Power: 0.1 + - _Rim2LightingInvert: 0 + - _Rim2MainStrength: 0 + - _Rim2MaskChannel: 0 + - _Rim2MaskInvert: 0 + - _Rim2MaskOnlyMask: 0 + - _Rim2MaskUV: 0 + - _Rim2NormalStrength: 1 + - _Rim2Power: 1 + - _Rim2ShadowMask: 0.5 + - _Rim2ShadowMaskInvert: 0 + - _Rim2ShadowMaskRampType: 0 + - _Rim2ShadowMaskStrength: 1 + - _Rim2ShadowToggle: 0 + - _Rim2ShadowWidth: 0 + - _Rim2Sharpness: 0.25 + - _Rim2Strength: 0 + - _Rim2Style: 0 + - _Rim2TexUV: 0 + - _Rim2VRParallaxStrength: 1 + - _Rim2Width: 0.8 + - _RimApColorThemeIndex: 0 + - _RimApplyAlpha: 0 + - _RimApplyAlphaBlend: 1 + - _RimApplyGlobalMaskBlendType: 2 + - _RimApplyGlobalMaskIndex: 0 + - _RimBackfaceMask: 1 + - _RimBaseColorMix: 0 + - _RimBiasIntensity: 0 + - _RimBlendMode: 1 + - _RimBlendStrength: 1 + - _RimBlur: 0.65 + - _RimBorder: 0.5 + - _RimBrightness: 1 + - _RimColorTexUV: 0 + - _RimDirRange: 0 + - _RimDirStrength: 0 + - _RimEnableLighting: 1 + - _RimEnviroBlur: 0.7 + - _RimEnviroChannel: 0 + - _RimEnviroIntensity: 1 + - _RimEnviroMaskUV: 0 + - _RimEnviroMinBrightness: 0 + - _RimEnviroSharpness: 0 + - _RimEnviroWidth: 0.45 + - _RimFresnelPower: 3.5 + - _RimGlobalMask: 0 + - _RimGlobalMaskBlendType: 2 + - _RimHueSelectOrShift: 1 + - _RimHueShift: 0 + - _RimHueShiftColorSpace: 0 + - _RimHueShiftEnabled: 0 + - _RimHueShiftSpeed: 0 + - _RimIndirBlur: 0.1 + - _RimIndirBorder: 0.5 + - _RimIndirRange: 0 + - _RimLightColorThemeIndex: 0 + - _RimLight_FeatherOff: 0 + - _RimLight_InsideMask: 0.0001 + - _RimLight_Power: 0.1 + - _RimLightingInvert: 0 + - _RimMainStrength: 0 + - _RimMaskChannel: 0 + - _RimMaskInvert: 0 + - _RimMaskOnlyMask: 0 + - _RimMaskUV: 0 + - _RimNormalStrength: 1 + - _RimPoi2BlendMode: 0 + - _RimPoiBlendMode: 0 + - _RimPower: 1 + - _RimShadowMask: 0.5 + - _RimShadowMaskInvert: 0 + - _RimShadowMaskRampType: 0 + - _RimShadowMaskStrength: 1 + - _RimShadowToggle: 0 + - _RimShadowWidth: 0 + - _RimSharpness: 0.25 + - _RimStrength: 0 + - _RimStyle: 0 + - _RimTexUV: 0 + - _RimVRParallaxStrength: 1 + - _RimWidth: 0.8 + - _RoughnessAnisotropy: 1 + - _SDFBlur: 0.1 + - _SDFShadingTextureUV: 0 + - _SFExposureOcclusion: 0 + - _SSAOAlphaFade: 1 + - _SSAOAnimationToggle: 1 + - _SSAOApplyGlobalMaskBlendType: 0 + - _SSAOApplyGlobalMaskIndex: 0 + - _SSAOAsRamp: 0 + - _SSAOBias: 0.003 + - _SSAOBlendType: 2 + - _SSAOCenterImportance: 1 + - _SSAOColorMapUV: 0 + - _SSAOColorThemeIndex: 0 + - _SSAOCone: 0 + - _SSAODepthGetWarning: 0 + - _SSAOEnableColorTexture: 0 + - _SSAOEnableMaskTexture: 0 + - _SSAOEnabled: 0 + - _SSAOFalloffEnd: 8 + - _SSAOFalloffStart: 6 + - _SSAOGlobalMaskBlendType: 2 + - _SSAOGlobalMaskIndex: 0 + - _SSAOHideByRampedLightMap: 0 + - _SSAOIntensity: 1 + - _SSAOMaskChannel: 0 + - _SSAOMaskInvert: 0 + - _SSAOMaskUV: 0 + - _SSAOQuality: 2.4 + - _SSAORadius: 0.002 + - _SSAORandomScale: 0 + - _SSAOUseNormals: 0 + - _SSAOUseSurfaceColor: 0 + - _SSIgnoreCastedShadows: 0 + - _SSSBaseColorMix: 0 + - _SSSDistortion: 1 + - _SSSSpread: 5 + - _SSSStrength: 0.25 + - _SSSThicknessMapChannel: 0 + - _SSSThicknessMapUV: 0 + - _SSSThicknessMod: -1 + - _Saturation: 0 + - _ScrollingEmission: 0 + - _ScrollingEmission1: 0 + - _ScrollingEmission2: 0 + - _ScrollingEmission3: 0 + - _Set_HighColorMaskChannel: 1 + - _Set_HighColorMaskUV: 0 + - _Set_Rim2LightMaskChannel: 1 + - _Set_Rim2LightMaskUV: 0 + - _Set_RimLightMaskChannel: 1 + - _Set_RimLightMaskUV: 0 + - _ShadeColor_Step: 0 + - _ShaderOptimizerEnabled: 1 + - _ShaderUIWarning0: -0 + - _ShaderUIWarning1: -0 + - _ShadingEnabled: 1 + - _ShadingRampedLightMapApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapApplyGlobalMaskIndex: 0 + - _ShadingRampedLightMapInverseApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapInverseApplyGlobalMaskIndex: 0 + - _ShadingShadeMapBlendType: 0 + - _Shadow2ndBlur: 0.3 + - _Shadow2ndBorder: 0.5 + - _Shadow2ndColorTexUV: 0 + - _Shadow2ndReceive: 0 + - _Shadow3rdBlur: 0.1 + - _Shadow3rdBorder: 0.25 + - _Shadow3rdColorTexUV: 0 + - _Shadow3rdReceive: 0 + - _ShadowBlur: 0.1 + - _ShadowBorder: 0.5 + - _ShadowBorderMapToggle: 0 + - _ShadowBorderMaskLOD: 0 + - _ShadowBorderMaskUV: 0 + - _ShadowBorderRange: 0 + - _ShadowColorTexUV: 0 + - _ShadowEnvStrength: 0 + - _ShadowFlatBlur: 1 + - _ShadowFlatBorder: 1 + - _ShadowMainStrength: 0 + - _ShadowMaskType: 0 + - _ShadowOffset: 0 + - _ShadowPostAO: 0 + - _ShadowReceive: 0 + - _ShadowStrength: 1 + - _ShadowStrengthMaskUV: 0 + - _Shape1Depth: 0.1 + - _Shape1Duration: 0.1 + - _Shape2Depth: 0.2 + - _Shape2Duration: 0.1 + - _Shape3Depth: 0.3 + - _Shape3Duration: 0.1 + - _SkinThicknessMapInvert: 0 + - _SkinThicknessMapUV: 0 + - _SkinThicknessPower: 1 + - _Smoothness: 1 + - _SmoothnessTextureChannel: 0 + - _Specular2ndLayer: 0 + - _SpecularBlur: 0 + - _SpecularBorder: 0.5 + - _SpecularHighlights: 1 + - _SpecularNormalStrength: 1 + - _SpecularToon: 1 + - _SphericalDissolveClamp: 0 + - _SphericalDissolveInvert: 0 + - _SphericalDissolveRadius: 1.5 + - _Squeeze: 0 + - _SqueezeDist: 0 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _SssBumpBlur: 0.7 + - _SssScale: 1 + - _StencilBackCompareFunction: 8 + - _StencilBackFailOp: 0 + - _StencilBackPassOp: 0 + - _StencilBackZFailOp: 0 + - _StencilCompareFunction: 8 + - _StencilFailOp: 0 + - _StencilFrontCompareFunction: 8 + - _StencilFrontFailOp: 0 + - _StencilFrontPassOp: 0 + - _StencilFrontZFailOp: 0 + - _StencilPassOp: 0 + - _StencilReadMask: 255 + - _StencilRef: 0 + - _StencilType: 0 + - _StencilWriteMask: 255 + - _StencilZFailOp: 0 + - _StereoEnabled: 0 + - _StochasticDeliotHeitzDensity: 1 + - _StochasticHexFallOffContrast: 0.6 + - _StochasticHexFallOffPower: 7 + - _StochasticHexGridDensity: 1 + - _StochasticHexRotationStrength: 0 + - _StochasticMode: 0 + - _StylizedReflectionMode: 0 + - _StylizedSpecular: 0 + - _StylizedSpecular2Feather: 0 + - _StylizedSpecularFeather: 0 + - _StylizedSpecularIgnoreNormal: 0 + - _StylizedSpecularIgnoreShadow: 0 + - _StylizedSpecularInvertMask: 0 + - _StylizedSpecularNormalStrength: 1 + - _StylizedSpecularStrength: 1 + - _SubsurfaceScattering: 0 + - _TPSHelpbox: 0 + - _TPSPenetratorEnabled: 0 + - _TPS_AnimatedToggle: 1 + - _TPS_BezierSmoothness: 0.4 + - _TPS_BezierStart: 0 + - _TPS_BufferedDepth: 0 + - _TPS_BufferedStrength: 0 + - _TPS_Buldge: 0.3 + - _TPS_BuldgeDistance: 0.2 + - _TPS_BuldgeFalloffDistance: 0.05 + - _TPS_Channel: 0 + - _TPS_ChannelWarning: 0 + - _TPS_IdleGravity: 0 + - _TPS_IdleSkrinkLength: 1 + - _TPS_IdleSkrinkWidth: 1 + - _TPS_IsSkinnedMeshRenderer: 0 + - _TPS_PenetratorLength: 1 + - _TPS_PumpingSpeed: 1 + - _TPS_PumpingStrength: 0 + - _TPS_PumpingWidth: 0.2 + - _TPS_SmoothStart: 1 + - _TPS_Squeeze: 0.3 + - _TPS_SqueezeDistance: 0.2 + - _TextEnabled: 0 + - _TextFPSColorThemeIndex: 0 + - _TextFPSEmissionStrength: 0 + - _TextFPSEnabled: 0 + - _TextFPSRotation: 0 + - _TextFPSUV: 0 + - _TextNumericColorThemeIndex: 0 + - _TextNumericDecimalDigits: 0 + - _TextNumericEmissionStrength: 0 + - _TextNumericEnabled: 0 + - _TextNumericRotation: 0 + - _TextNumericTrimZeroes: 0 + - _TextNumericUV: 0 + - _TextNumericValue: 0 + - _TextNumericWholeDigits: 4 + - _TextPixelRange: 4 + - _TextPositionColorThemeIndex: 0 + - _TextPositionEmissionStrength: 0 + - _TextPositionEnabled: 0 + - _TextPositionRotation: 0 + - _TextPositionUV: 0 + - _TextTimeColorThemeIndex: 0 + - _TextTimeEmissionStrength: 0 + - _TextTimeEnabled: 0 + - _TextTimeRotation: 0 + - _TextTimeUV: 0 + - _ToonRampCount: 1 + - _ToonRampUVSelector: 1 + - _TruchetALAlphaBand: 0 + - _TruchetALAlphaToggle: 0 + - _TruchetALEmissionBand: 0 + - _TruchetALEmissionToggle: 0 + - _TruchetAlpha: 1 + - _TruchetBlendType: 0 + - _TruchetChronoPanBand: 0 + - _TruchetChronoPanToggle: 0 + - _TruchetChronoPanType: 0 + - _TruchetColorThemeIndex: 0 + - _TruchetDensity: 10 + - _TruchetEdgeSharpness: 1 + - _TruchetEmissionStrength: 0 + - _TruchetHideWhenNoAL: 0 + - _TruchetMaskChannel: 0 + - _TruchetMaskGlobalMask: 0 + - _TruchetMaskGlobalMaskBlendType: 2 + - _TruchetMaskIntensity: 1 + - _TruchetMaskInvert: 0 + - _TruchetMaskUV: 0 + - _TruchetOverrideAlpha: 0 + - _TruchetThiccness: 0.1 + - _TruchetUV: 0 + - _Tweak_HighColorMaskLevel: 0 + - _Tweak_LightDirection_MaskLevel: 0 + - _Tweak_LightDirection_MaskLevel2: 0 + - _Tweak_Rim2LightMaskLevel: 0 + - _Tweak_RimLightMaskLevel: 0 + - _UDIMDiscardHelpbox: 0 + - _UDIMDiscardMode: 0 + - _UDIMDiscardRow0_0: 0 + - _UDIMDiscardRow0_1: 0 + - _UDIMDiscardRow0_2: 0 + - _UDIMDiscardRow0_3: 0 + - _UDIMDiscardRow1_0: 0 + - _UDIMDiscardRow1_1: 0 + - _UDIMDiscardRow1_2: 0 + - _UDIMDiscardRow1_3: 0 + - _UDIMDiscardRow2_0: 0 + - _UDIMDiscardRow2_1: 0 + - _UDIMDiscardRow2_2: 0 + - _UDIMDiscardRow2_3: 0 + - _UDIMDiscardRow3_0: 0 + - _UDIMDiscardRow3_1: 0 + - _UDIMDiscardRow3_2: 0 + - _UDIMDiscardRow3_3: 0 + - _UDIMDiscardUV: 0 + - _UDIMFaceDiscardFace: 0 + - _UDIMFaceDiscardRow0_0: 0 + - _UDIMFaceDiscardRow0_1: 0 + - _UDIMFaceDiscardRow0_2: 0 + - _UDIMFaceDiscardRow0_3: 0 + - _UDIMFaceDiscardRow1_0: 0 + - _UDIMFaceDiscardRow1_1: 0 + - _UDIMFaceDiscardRow1_2: 0 + - _UDIMFaceDiscardRow1_3: 0 + - _UDIMFaceDiscardRow2_0: 0 + - _UDIMFaceDiscardRow2_1: 0 + - _UDIMFaceDiscardRow2_2: 0 + - _UDIMFaceDiscardRow2_3: 0 + - _UDIMFaceDiscardRow3_0: 0 + - _UDIMFaceDiscardRow3_1: 0 + - _UDIMFaceDiscardRow3_2: 0 + - _UDIMFaceDiscardRow3_3: 0 + - _UDIMFaceDiscardUV: 0 + - _UVModLocalPos0: 0 + - _UVModLocalPos1: 1 + - _UVModWorldPos0: 0 + - _UVModWorldPos1: 2 + - _UVSec: 0 + - _UVTileDissolveAlpha_Row0_0: 0 + - _UVTileDissolveAlpha_Row0_1: 0 + - _UVTileDissolveAlpha_Row0_2: 0 + - _UVTileDissolveAlpha_Row0_3: 0 + - _UVTileDissolveAlpha_Row1_0: 0 + - _UVTileDissolveAlpha_Row1_1: 0 + - _UVTileDissolveAlpha_Row1_2: 0 + - _UVTileDissolveAlpha_Row1_3: 0 + - _UVTileDissolveAlpha_Row2_0: 0 + - _UVTileDissolveAlpha_Row2_1: 0 + - _UVTileDissolveAlpha_Row2_2: 0 + - _UVTileDissolveAlpha_Row2_3: 0 + - _UVTileDissolveAlpha_Row3_0: 0 + - _UVTileDissolveAlpha_Row3_1: 0 + - _UVTileDissolveAlpha_Row3_2: 0 + - _UVTileDissolveAlpha_Row3_3: 0 + - _UVTileDissolveDiscardAtMax: 1 + - _UVTileDissolveEnabled: 0 + - _UVTileDissolveUV: 0 + - _Unlit_Intensity: 1 + - _UseLightColor: 1 + - _UseReflection: 0 + - _Use_1stAs2nd: 0 + - _Use_1stShadeMapAlpha_As_ShadowMask: 0 + - _Use_2ndShadeMapAlpha_As_ShadowMask: 0 + - _Use_BaseAs1st: 0 + - _UzumoreAmount: 0.1 + - _UzumoreBias: 0.001 + - _UzumoreCategoryToggle: 0 + - _UzumoreEnabled: 1 + - _UzumoreMaskUV: 3 + - _VertexAudioLinkEnabled: 0 + - _VertexBarrelAlpha: 0 + - _VertexBarrelHeight: 0 + - _VertexBarrelMaskChannel: 0 + - _VertexBarrelMode: 0 + - _VertexBarrelWidth: 0.2 + - _VertexBasicsMaskChannel: 0 + - _VertexGlitchDensity: 10 + - _VertexGlitchFrequency: 1 + - _VertexGlitchMapPanSpeed: 10 + - _VertexGlitchMirror: 0 + - _VertexGlitchMirrorEnable: 0 + - _VertexGlitchStrength: 1 + - _VertexGlitchThreshold: 1 + - _VertexGlitchingAudioLinkBand: 0 + - _VertexGlitchingAudioLinkEnabled: 0 + - _VertexGlitchingAudiolinkOverride: 1 + - _VertexGlitchingEnabled: 0 + - _VertexGlitchingUseTexture: 0 + - _VertexLocalRotationALBandX: 0 + - _VertexLocalRotationALBandY: 0 + - _VertexLocalRotationALBandZ: 0 + - _VertexLocalRotationCTALBandX: 0 + - _VertexLocalRotationCTALBandY: 0 + - _VertexLocalRotationCTALBandZ: 0 + - _VertexLocalRotationCTALTypeX: 0 + - _VertexLocalRotationCTALTypeY: 0 + - _VertexLocalRotationCTALTypeZ: 0 + - _VertexLocalScaleALBand: 0 + - _VertexLocalTranslationALBand: 0 + - _VertexLookAtAudioLinkBand: 0 + - _VertexLookAtAudioLinkEnabled: 0 + - _VertexLookAtEnabled: 0 + - _VertexManipulationHeight: 0 + - _VertexManipulationHeightBand: 0 + - _VertexManipulationHeightBias: 0 + - _VertexManipulationHeightMapChannel: 0 + - _VertexManipulationHeightMaskChannel: 0 + - _VertexManipulationHeightMaskUV: 0 + - _VertexManipulationsEnabled: 0 + - _VertexRoundingDivision: 0.02 + - _VertexRoundingEnabled: 0 + - _VertexRoundingMaskChannel: 0 + - _VertexRoundingRangeBand: 0 + - _VertexRoundingSpace: 0 + - _VertexSpectrumMotion: 0 + - _VertexSpectrumUV: 0 + - _VertexSpectrumUVDirection: 0 + - _VertexSphereAlpha: 0 + - _VertexSphereHeight: 1 + - _VertexSphereMaskChannel: 0 + - _VertexSphereMode: 0 + - _VertexSphereRadius: 1 + - _VertexTornadoBaseHeight: 0 + - _VertexTornadoFunnelShape: 1 + - _VertexTornadoIntensity: 100 + - _VertexTornadoMaskChannel: 0 + - _VertexTornadoMode: 0 + - _VertexTornadoRadius: 1 + - _VertexTornadoSpeed: 5 + - _VertexTornadoTopHeight: 1 + - _VertexTornadoVerticalPull: 0 + - _VertexWindDetailAmplitude: 0.05 + - _VertexWindDetailFrequency: 5 + - _VertexWindDetailSpeed: 2.5 + - _VertexWindEnabled: 0 + - _VertexWindMaskChannel: 0 + - _VertexWindNoiseChannel: 0 + - _VertexWindNoiseScale: 10 + - _VertexWindNoiseSpeed: 0.5 + - _VertexWindNoiseStrength: 0.5 + - _VertexWindPrimaryAmplitude: 0.1 + - _VertexWindPrimaryFrequency: 1 + - _VertexWindPrimarySpeed: 1 + - _VertexWorldTranslationALBand: 0 + - _VideoBacklight: 1 + - _VideoCRTPixelEnergizedTime: 1.9 + - _VideoCRTRefreshRate: 24 + - _VideoContrast: 0 + - _VideoEffectsEnable: 0 + - _VideoEmissionEnabled: 1 + - _VideoMaskTextureChannel: 0 + - _VideoMaskTextureUV: 0 + - _VideoPixelTextureUV: 0 + - _VideoPixelateToResolution: 0 + - _VideoSaturation: 0 + - _VideoType: 3 + - _VisibilityMode: 1 + - _VisibilityVRCCameraDesktop: 1 + - _VisibilityVRCCameraScreenshot: 1 + - _VisibilityVRCCameraVR: 1 + - _VisibilityVRCMirrorDesktop: 1 + - _VisibilityVRCMirrorVR: 1 + - _VisibilityVRCRegular: 1 + - _VoronoiAffectsMaterialAlpha: 0 + - _VoronoiBlend: 0 + - _VoronoiEnableRandomCellColor: 0 + - _VoronoiEnabled: 0 + - _VoronoiGlobalMask: 0 + - _VoronoiGlobalMaskBlendType: 2 + - _VoronoiInnerEmissionStrength: 0 + - _VoronoiMaskChannel: 0 + - _VoronoiMaskUV: 0 + - _VoronoiNoiseChannel: 0 + - _VoronoiNoiseIntensity: 0.1 + - _VoronoiNoiseUV: 0 + - _VoronoiOuterEmissionStrength: 0 + - _VoronoiPower: 0.45454544 + - _VoronoiScale: 5 + - _VoronoiSpace: 0 + - _VoronoiType: 1 + - _Wriggle: 0 + - _WriggleSpeed: 0.28 + - _ZClip: 1 + - _ZTest: 4 + - _ZWrite: 1 + - _ppHueSelectOrShift: 1 + - footer_bluesky: 0 + - footer_discord: 0 + - footer_github: 0 + - footer_patreon: 0 + - footer_twitter: 0 + - footer_website: 0 + - footer_youtube: 0 + - g_end_tps_bezier: 0 + - g_end_tps_buldge: 0 + - g_end_tps_idle: 0 + - g_end_tps_pulsing: 0 + - g_end_tps_squeeze: 0 + - g_start_tps_bezier: 0 + - g_start_tps_buldge: 0 + - g_start_tps_idle: 0 + - g_start_tps_pulsing: 0 + - g_start_tps_squeeze: 0 + - m_AudioLinkCategory: 0 + - m_OutlineCategory: 0 + - m_end_ALDecalSpectrum: 0 + - m_end_ALVolumeColor: 0 + - m_end_Alpha: 0 + - m_end_Ansio: 0 + - m_end_BeatsaberBloomFog: 0 + - m_end_BeatsaberOptions: 0 + - m_end_BlackLightMasking: 0 + - m_end_BonusSliders: 0 + - m_end_CRT: 0 + - m_end_CenterOutDissolve: 0 + - m_end_ColorAdjust: 0 + - m_end_CubeMap: 0 + - m_end_Decal0: 0 + - m_end_Decal0AudioLink: 0 + - m_end_Decal1: 0 + - m_end_Decal1AudioLink: 0 + - m_end_Decal2: 0 + - m_end_Decal2AudioLink: 0 + - m_end_Decal3: 0 + - m_end_Decal3AudioLink: 0 + - m_end_DecalSection: 0 + - m_end_DepthBulge: 0 + - m_end_DetailOptions: 0 + - m_end_DistortionAudioLink: 0 + - m_end_FXProximityColor: 0 + - m_end_FlipbookAudioLink: 0 + - m_end_Gameboy: 0 + - m_end_GlobalMask: 0 + - m_end_GlobalMaskDistanceM_0: 0 + - m_end_GlobalMaskDistanceM_1: 0 + - m_end_GlobalMaskDistanceM_10: 0 + - m_end_GlobalMaskDistanceM_11: 0 + - m_end_GlobalMaskDistanceM_12: 0 + - m_end_GlobalMaskDistanceM_13: 0 + - m_end_GlobalMaskDistanceM_14: 0 + - m_end_GlobalMaskDistanceM_15: 0 + - m_end_GlobalMaskDistanceM_2: 0 + - m_end_GlobalMaskDistanceM_3: 0 + - m_end_GlobalMaskDistanceM_4: 0 + - m_end_GlobalMaskDistanceM_5: 0 + - m_end_GlobalMaskDistanceM_6: 0 + - m_end_GlobalMaskDistanceM_7: 0 + - m_end_GlobalMaskDistanceM_8: 0 + - m_end_GlobalMaskDistanceM_9: 0 + - m_end_GlobalMaskModifiers: 0 + - m_end_GlobalMaskModifiersBackface: 0 + - m_end_GlobalMaskModifiersCamera: 0 + - m_end_GlobalMaskModifiersDistance: 0 + - m_end_GlobalMaskModifiersMirror: 0 + - m_end_GlobalMaskOptions: 0 + - m_end_GlobalMaskTextures: 0 + - m_end_GlobalMaskVertexColors: 0 + - m_end_GlobalThemeColor0: 0 + - m_end_GlobalThemeColor1: 0 + - m_end_GlobalThemeColor2: 0 + - m_end_GlobalThemeColor3: 0 + - m_end_GlobalThemes: 0 + - m_end_LTCGI: 0 + - m_end_MainVertexColors: 0 + - m_end_Matcap2: 0 + - m_end_Matcap3: 0 + - m_end_Matcap4: 0 + - m_end_OutlineAudioLink: 0 + - m_end_OutlineStencil: 0 + - m_end_OutlineStencilPassBackOptions: 0 + - m_end_OutlineStencilPassFrontOptions: 0 + - m_end_PPAnimations: 0 + - m_end_PathAudioLink: 0 + - m_end_PoiGlobalCategory: 0 + - m_end_PoiLightData: 0 + - m_end_PoiPostProcessingCategory: 0 + - m_end_PoiShading: 0 + - m_end_PoiUVCategory: 0 + - m_end_RGBMask: 0 + - m_end_Rim2AudioLink: 0 + - m_end_RimAudioLink: 0 + - m_end_SphericalDissolve: 0 + - m_end_StencilPassBackOptions: 0 + - m_end_StencilPassFrontOptions: 0 + - m_end_StencilPassOptions: 0 + - m_end_Stochastic: 0 + - m_end_Text: 0 + - m_end_TextFPS: 0 + - m_end_TextInstanceTime: 0 + - m_end_TextNumeric: 0 + - m_end_TextPosition: 0 + - m_end_TruchetAudioLink: 0 + - m_end_UVTileDissolve: 0 + - m_end_Uzumore: 0 + - m_end_VideoSettings: 0 + - m_end_VoronoiAudioLink: 0 + - m_end_WorldAOBlocker: 0 + - m_end_alphaBlending: 0 + - m_end_audioLink: 0 + - m_end_audioLinkOverrides: 0 + - m_end_backFace: 0 + - m_end_backlight: 0 + - m_end_blending: 0 + - m_end_brdf: 0 + - m_end_clearCoat: 0 + - m_end_clearcoatadvanced: 0 + - m_end_clearcoatglobalmask: 0 + - m_end_depthFX: 0 + - m_end_depthRimLightOptions: 0 + - m_end_dissolve: 0 + - m_end_dissolveHueShift: 0 + - m_end_emission1Options: 0 + - m_end_emission2Options: 0 + - m_end_emission3Options: 0 + - m_end_emissionOptions: 0 + - m_end_flipBook: 0 + - m_end_glitter: 0 + - m_end_internalparallax: 0 + - m_end_matcap: 0 + - m_end_mirrorOptions: 0 + - m_end_normalCorrect: 0 + - m_end_outlineAlphaBlending: 0 + - m_end_outlineBlending: 0 + - m_end_parallax: 0 + - m_end_pathing: 0 + - m_end_pen_autoConfig: 0 + - m_end_poiSSAO: 0 + - m_end_pointToPoint: 0 + - m_end_postprocess: 0 + - m_end_raliv: 0 + - m_end_ralivAdvanced: 0 + - m_end_ralivOriface: 0 + - m_end_ralivPenetrator: 0 + - m_end_reflectionRim: 0 + - m_end_rim1LightOptions: 0 + - m_end_rim2LightOptions: 0 + - m_end_stylizedSpec: 0 + - m_end_subsurfaceScattering: 0 + - m_end_tps_penetrator: 0 + - m_end_truchet: 0 + - m_end_udimdiscardOptions: 0 + - m_end_udimfacediscardOptions: 0 + - m_end_uvDistortion: 0 + - m_end_uvLocalWorld: 0 + - m_end_uvPanosphere: 0 + - m_end_uvPolar: 0 + - m_end_vertexGlitching: 0 + - m_end_vertexLookAt: 0 + - m_end_vertexManipulation: 0 + - m_end_videoEffects: 0 + - m_end_voronoi: 0 + - m_end_voronoiRandom: 0 + - m_lightingCategory: 0 + - m_mainCategory: 0 + - m_modifierCategory: 0 + - m_renderingCategory: 1 + - m_specialFXCategory: 0 + - m_start_ALDecalSpectrum: 0 + - m_start_ALVolumeColor: 0 + - m_start_Alpha: 0 + - m_start_Aniso: 0 + - m_start_BeatsaberBloomFog: 0 + - m_start_BeatsaberOptions: 0 + - m_start_BlackLightMasking: 0 + - m_start_BonusSliders: 0 + - m_start_CRT: 0 + - m_start_CenterOutDissolve: 0 + - m_start_ColorAdjust: 0 + - m_start_CubeMap: 0 + - m_start_Decal0: 0 + - m_start_Decal0AudioLink: 0 + - m_start_Decal1: 0 + - m_start_Decal1AudioLink: 0 + - m_start_Decal2: 0 + - m_start_Decal2AudioLink: 0 + - m_start_Decal3: 0 + - m_start_Decal3AudioLink: 0 + - m_start_DecalSection: 0 + - m_start_DepthBulge: 0 + - m_start_DetailOptions: 0 + - m_start_DistortionAudioLink: 0 + - m_start_FXProximityColor: 0 + - m_start_FlipbookAudioLink: 0 + - m_start_Gameboy: 0 + - m_start_GlobalMask: 0 + - m_start_GlobalMaskDistanceM_0: 0 + - m_start_GlobalMaskDistanceM_1: 0 + - m_start_GlobalMaskDistanceM_10: 0 + - m_start_GlobalMaskDistanceM_11: 0 + - m_start_GlobalMaskDistanceM_12: 0 + - m_start_GlobalMaskDistanceM_13: 0 + - m_start_GlobalMaskDistanceM_14: 0 + - m_start_GlobalMaskDistanceM_15: 0 + - m_start_GlobalMaskDistanceM_2: 0 + - m_start_GlobalMaskDistanceM_3: 0 + - m_start_GlobalMaskDistanceM_4: 0 + - m_start_GlobalMaskDistanceM_5: 0 + - m_start_GlobalMaskDistanceM_6: 0 + - m_start_GlobalMaskDistanceM_7: 0 + - m_start_GlobalMaskDistanceM_8: 0 + - m_start_GlobalMaskDistanceM_9: 0 + - m_start_GlobalMaskModifiers: 0 + - m_start_GlobalMaskModifiersBackface: 0 + - m_start_GlobalMaskModifiersCamera: 0 + - m_start_GlobalMaskModifiersDistance: 0 + - m_start_GlobalMaskModifiersMirror: 0 + - m_start_GlobalMaskOptions: 0 + - m_start_GlobalMaskTextures: 0 + - m_start_GlobalMaskVertexColors: 0 + - m_start_GlobalThemeColor0: 0 + - m_start_GlobalThemeColor1: 0 + - m_start_GlobalThemeColor2: 0 + - m_start_GlobalThemeColor3: 0 + - m_start_GlobalThemes: 0 + - m_start_LTCGI: 0 + - m_start_MainVertexColors: 0 + - m_start_Matcap2: 0 + - m_start_Matcap3: 0 + - m_start_Matcap4: 0 + - m_start_OutlineAudioLink: 0 + - m_start_OutlineStencil: 0 + - m_start_OutlineStencilPassBackOptions: 0 + - m_start_OutlineStencilPassFrontOptions: 0 + - m_start_PPAnimations: 0 + - m_start_PathAudioLink: 0 + - m_start_PoiGlobalCategory: 0 + - m_start_PoiLightData: 0 + - m_start_PoiPostProcessingCategory: 0 + - m_start_PoiShading: 0 + - m_start_PoiUVCategory: 0 + - m_start_RGBMask: 0 + - m_start_Rim2AudioLink: 0 + - m_start_RimAudioLink: 0 + - m_start_SphericalDissolve: 0 + - m_start_StencilPassBackOptions: 0 + - m_start_StencilPassFrontOptions: 0 + - m_start_StencilPassOptions: 0 + - m_start_Stochastic: 0 + - m_start_Text: 0 + - m_start_TextFPS: 0 + - m_start_TextInstanceTime: 0 + - m_start_TextNumeric: 0 + - m_start_TextPosition: 0 + - m_start_TruchetAudioLink: 0 + - m_start_UVTileDissolve: 0 + - m_start_Uzumore: 0 + - m_start_VideoSettings: 0 + - m_start_VoronoiAudioLink: 0 + - m_start_WorldAOBlocker: 0 + - m_start_alphaBlending: 0 + - m_start_audioLink: 0 + - m_start_audioLinkOverrides: 0 + - m_start_backFace: 0 + - m_start_backlight: 0 + - m_start_blending: 0 + - m_start_brdf: 0 + - m_start_clearCoat: 0 + - m_start_clearcoatadvanced: 0 + - m_start_clearcoatglobalmask: 0 + - m_start_depthFX: 0 + - m_start_depthRimLightOptions: 0 + - m_start_dissolve: 0 + - m_start_dissolveHueShift: 0 + - m_start_emission1Options: 0 + - m_start_emission2Options: 0 + - m_start_emission3Options: 0 + - m_start_emissionOptions: 0 + - m_start_flipBook: 0 + - m_start_glitter: 0 + - m_start_internalparallax: 0 + - m_start_matcap: 0 + - m_start_mirrorOptions: 0 + - m_start_normalCorrect: 0 + - m_start_outlineAlphaBlending: 0 + - m_start_outlineBlending: 0 + - m_start_parallax: 0 + - m_start_pathing: 0 + - m_start_pen_autoConfig: 0 + - m_start_poiSSAO: 0 + - m_start_pointToPoint: 0 + - m_start_postprocess: 0 + - m_start_raliv: 0 + - m_start_ralivAdvanced: 0 + - m_start_ralivOriface: 0 + - m_start_ralivPenetrator: 0 + - m_start_reflectionRim: 0 + - m_start_rim2LightOptions: 0 + - m_start_rimLight1Options: 0 + - m_start_stylizedSpec: 0 + - m_start_subsurfaceScattering: 0 + - m_start_tps_penetrator: 0 + - m_start_truchet: 0 + - m_start_udimdiscardOptions: 0 + - m_start_udimfacediscardOptions: 0 + - m_start_uvDistortion: 0 + - m_start_uvLocalWorld: 0 + - m_start_uvPanosphere: 0 + - m_start_uvPolar: 0 + - m_start_vertexGlitching: 0 + - m_start_vertexLookAt: 0 + - m_start_vertexManipulation: 0 + - m_start_videoEffects: 0 + - m_start_voronoi: 0 + - m_start_voronoiRandom: 0 + - m_thirdpartyCategory: 0 + - m_vertexCategory: 0 + - s_end_ALAlpha: 0 + - s_end_ALDecalAudioModsOptions: 0 + - s_end_ALDecalBand: 0 + - s_end_ALDecalColorsBlendingOptions: 0 + - s_end_ALDecalShapeClipOptions: 0 + - s_end_ALDecalVolumeOptions: 0 + - s_end_ALSpectrumMotion: 0 + - s_end_ALVertexGlitching: 0 + - s_end_ALVertexHeight: 0 + - s_end_ALVertexLookAtAL: 0 + - s_end_AlphaAdvanced: 0 + - s_end_AlphaAngular: 0 + - s_end_AlphaDistanceFade: 0 + - s_end_AlphaDithering: 0 + - s_end_AlphaFresnel: 0 + - s_end_AlphaToCoverage: 0 + - s_end_AnisoBottomLayer: 0 + - s_end_AnisoTopLayer: 1 + - s_end_AudioLinkBandOverrides: 0 + - s_end_BRDFTPSMaskGroup: 0 + - s_end_BackFaceHueShift: 0 + - s_end_BackfaceMods: 0 + - s_end_CCopt: 1 + - s_end_ClearCoatTPSMaskGroup: 0 + - s_end_ColorAdjustColorGrading: 0 + - s_end_ContinuousRotation: 0 + - s_end_CubeMapColorAdjust: 0 + - s_end_CubeMapMasking: 0 + - s_end_Decal0ChannelSeparation: 0 + - s_end_Decal0GlobalMasking: 0 + - s_end_Decal0HueShift: 0 + - s_end_Decal0Video: 0 + - s_end_Decal1ChannelSeparation: 0 + - s_end_Decal1GlobalMasking: 0 + - s_end_Decal1HueShift: 0 + - s_end_Decal1Video: 0 + - s_end_Decal2ChannelSeparation: 0 + - s_end_Decal2GlobalMasking: 0 + - s_end_Decal2HueShift: 0 + - s_end_Decal2Video: 0 + - s_end_Decal3ChannelSeparation: 0 + - s_end_Decal3GlobalMasking: 0 + - s_end_Decal3HueShift: 0 + - s_end_Decal3Video: 0 + - s_end_DecalTPSMaskGroup: 0 + - s_end_DepthAlpha: 0 + - s_end_DepthFXColorEmission: 0 + - s_end_DetailNormal: 0 + - s_end_DetailTexture: 0 + - s_end_DissolveAudioLink: 0 + - s_end_DissolvedMenu: 0 + - s_end_EdgeMenu: 0 + - s_end_EmissionAL0Add: 0 + - s_end_EmissionAL0COut: 0 + - s_end_EmissionAL0Multiply: 0 + - s_end_EmissionAL1Add: 0 + - s_end_EmissionAL1COut: 0 + - s_end_EmissionAL1Multiply: 0 + - s_end_EmissionAL2Add: 0 + - s_end_EmissionAL2COut: 0 + - s_end_EmissionAL2Multiply: 0 + - s_end_EmissionAL3Add: 0 + - s_end_EmissionAL3COut: 0 + - s_end_EmissionAL3Multiply: 0 + - s_end_EmissionBlinking0: 0 + - s_end_EmissionBlinking1: 0 + - s_end_EmissionBlinking2: 0 + - s_end_EmissionBlinking3: 0 + - s_end_EmissionCenterOut0: 0 + - s_end_EmissionCenterOut1: 0 + - s_end_EmissionCenterOut2: 0 + - s_end_EmissionCenterOut3: 0 + - s_end_EmissionHueShift0: 0 + - s_end_EmissionHueShift1: 0 + - s_end_EmissionHueShift2: 0 + - s_end_EmissionHueShift3: 0 + - s_end_EmissionLightBased0: 0 + - s_end_EmissionLightBased1: 0 + - s_end_EmissionLightBased2: 0 + - s_end_EmissionLightBased3: 0 + - s_end_FixedRimBlending: 0 + - s_end_FixedRimColor: 0 + - s_end_FixedRimShapeControl: 0 + - s_end_FlipbookCrossfade: 0 + - s_end_FlipbookHueShift: 0 + - s_end_FlipbookManualFrameControl: 0 + - s_end_FlipbookStartAndEnd: 0 + - s_end_GlitterAudioLink: 0 + - s_end_GlitterColorAndShape: 0 + - s_end_GlitterHueShiftSection: 0 + - s_end_GlitterMask: 0 + - s_end_GlitterPositionSize: 0 + - s_end_GlitterRotationSection: 0 + - s_end_GlitterSparkleControl: 0 + - s_end_GlobalMaskOptionsForceToggles: 0 + - s_end_GlobalMaskOptionsMinMaxSliders: 0 + - s_end_GlobalMaskOptionsSliders: 0 + - s_end_LightDataAddPass: 1 + - s_end_LightDataBasePass: 1 + - s_end_LightDataDebug: 0 + - s_end_LightDataSDF: 1 + - s_end_LocalRotation: 0 + - s_end_LocalTranslation: 0 + - s_end_LookAtAlphaMask: 0 + - s_end_LookAtBlueMask: 0 + - s_end_LookAtGreenMask: 0 + - s_end_LookAtRedMask: 0 + - s_end_LookAtVisibility: 0 + - s_end_MainHueShift: 0 + - s_end_MainHueShiftAL: 0 + - s_end_MainHueShiftGlobalMask: 0 + - s_end_MaskingMenu: 0 + - s_end_Matcap0AudioLink: 0 + - s_end_Matcap0Blending: 0 + - s_end_Matcap0Masking: 0 + - s_end_Matcap1AudioLink: 0 + - s_end_Matcap1Blending: 0 + - s_end_Matcap1HueShift: 0 + - s_end_Matcap1Masking: 0 + - s_end_Matcap1Normal: 0 + - s_end_Matcap1Smoothness: 0 + - s_end_Matcap2AudioLink: 0 + - s_end_Matcap2Blending: 0 + - s_end_Matcap2HueShift: 0 + - s_end_Matcap2Masking: 0 + - s_end_Matcap2Normal: 0 + - s_end_Matcap2Smoothness: 0 + - s_end_Matcap2TPSMaskGroup: 0 + - s_end_Matcap3AudioLink: 0 + - s_end_Matcap3Blending: 0 + - s_end_Matcap3HueShift: 0 + - s_end_Matcap3Masking: 0 + - s_end_Matcap3Normal: 0 + - s_end_Matcap3Smoothness: 0 + - s_end_Matcap3TPSMaskGroup: 0 + - s_end_Matcap4TPSMaskGroup: 0 + - s_end_MatcapHueShift: 0 + - s_end_MatcapNormal: 0 + - s_end_MatcapSmoothness: 0 + - s_end_MatcapTPSMaskGroup: 0 + - s_end_MirrorTexture: 0 + - s_end_MultilayerMath1stLayer: 1 + - s_end_MultilayerMath2ndLayer: 0 + - s_end_MultilayerMath3rdLayer: 0 + - s_end_MultilayerMathBorder: 1 + - s_end_MultilayerMathBorderMap: 1 + - s_end_MultilayerShadowMap: 0 + - s_end_OutlineAlphaDistanceFade: 0 + - s_end_OutlineColorAdjust: 0 + - s_end_OutlineFixedSize: 0 + - s_end_OutlineLighting: 0 + - s_end_OutlineRenderingOptions: 0 + - s_end_OutlineZOffset: 0 + - s_end_PBRSecondSpecular: 0 + - s_end_PBRSplitMaskSample: 0 + - s_end_ParallaxInternalHueShift: 0 + - s_end_ParallaxInternalLayerColoring: 0 + - s_end_ParallaxInternalLayerControls: 0 + - s_end_PathAppearance: 0 + - s_end_PathColors: 0 + - s_end_PathRemapping: 0 + - s_end_PathSourceDirections: 0 + - s_end_PathTypes: 0 + - s_end_Positioning: 0 + - s_end_RGBAlpha: 0 + - s_end_RGBBlue: 0 + - s_end_RGBGreen: 0 + - s_end_RGBRed: 0 + - s_end_RimLight0Color: 0 + - s_end_RimLight0GlobalMasking: 0 + - s_end_RimLight0HueShift: 0 + - s_end_RimLight0LightDirMask: 0 + - s_end_RimLight0ShapeControls: 0 + - s_end_RimLight1Color: 0 + - s_end_RimLight1GlobalMasking: 0 + - s_end_RimLight1HueShift: 0 + - s_end_RimLight1LightDirMask: 0 + - s_end_RimLight1ShapeControls: 0 + - s_end_RimLight2DirectionMask: 0 + - s_end_RimLightDirectionMask: 0 + - s_end_SSAOAdvanced: 0 + - s_end_SSAOColorAndMasking: 0 + - s_end_ScrollingEmission0: 0 + - s_end_ScrollingEmission1: 0 + - s_end_ScrollingEmission2: 0 + - s_end_ScrollingEmission3: 0 + - s_end_ShadingAddPass: 0 + - s_end_ShadingGlobalMask: 0 + - s_end_StylizedReflectionLilEnviroReflections: 1 + - s_end_StylizedReflectionLilSpecular: 1 + - s_end_StylizedReflectionMode0: 1 + - s_end_StylizedReflectionMode1: 1 + - s_end_StylizedSpecularAdvanced: 0 + - s_end_StylizedSpecularLayer0: 0 + - s_end_StylizedSpecularLayer1: 0 + - s_end_TimingOptions: 0 + - s_end_TransitionMenu: 0 + - s_end_UVTileDissolveRow0: 0 + - s_end_UVTileDissolveRow1: 0 + - s_end_UVTileDissolveRow2: 0 + - s_end_UVTileDissolveRow3: 0 + - s_end_VertAL: 0 + - s_end_VertexBarrelMode: 0 + - s_end_VertexColors: 0 + - s_end_VertexGlitchMirror: 0 + - s_end_VertexGlitchTexture: 0 + - s_end_VertexManipulationHeight: 0 + - s_end_VertexRoundingAL: 0 + - s_end_VertexScale: 0 + - s_end_VertexSphereMode: 0 + - s_end_VertexTornadoMode: 0 + - s_end_VertexWind: 0 + - s_end_WorldTranslation: 0 + - s_end_brdfadvanced: 0 + - s_end_decal1_position: 0 + - s_end_decal2_position: 0 + - s_end_decal3_position: 0 + - s_end_decal_position: 0 + - s_end_deliot: 0 + - s_end_fogOpt: 1 + - s_end_ggxanisotropics: 0 + - s_end_heightFogOpt: 1 + - s_end_hextile: 0 + - s_end_liltoon_rim2_lightdir: 0 + - s_end_liltoon_rim_lightdir: 0 + - s_end_matcap1ApplyToAlpha: 0 + - s_end_matcap2ApplyToAlpha: 0 + - s_end_matcap3ApplyToAlpha: 0 + - s_end_matcapApplyToAlpha: 0 + - s_end_outline_al_color: 0 + - s_end_parallaxAdvanced: 0 + - s_end_vertexRounding: 0 + - s_start_ALAlpha: 0 + - s_start_ALDecalAudioModsOptions: 1 + - s_start_ALDecalBandOptions: 1 + - s_start_ALDecalColorsBlendingOptions: 1 + - s_start_ALDecalShapeClipOptions: 1 + - s_start_ALDecalVolumeOptions: 1 + - s_start_ALSpectrumMotion: 0 + - s_start_ALVertexGlitching: 0 + - s_start_ALVertexHeight: 0 + - s_start_ALVertexLookAtAL: 0 + - s_start_AlphaAdvanced: 0 + - s_start_AlphaAngular: 0 + - s_start_AlphaDistanceFade: 0 + - s_start_AlphaDithering: 0 + - s_start_AlphaFresnel: 0 + - s_start_AlphaToCoverage: 0 + - s_start_AnisoBottomLayer: 0 + - s_start_AnisoTopLayer: 1 + - s_start_AudioLinkBandOverrides: 1 + - s_start_BRDFTPSMaskGroup: 0 + - s_start_BackFaceHueShift: 0 + - s_start_BackfaceMods: 0 + - s_start_CCopt: 1 + - s_start_ClearCoatTPSMaskGroup: 0 + - s_start_ColorAdjustColorGrading: 0 + - s_start_ContinuousRotation: 0 + - s_start_CubeMapColorAdjust: 0 + - s_start_CubeMapMasking: 1 + - s_start_Decal0ChannelSeparation: 0 + - s_start_Decal0GlobalMasking: 0 + - s_start_Decal0HueShift: 0 + - s_start_Decal0Video: 0 + - s_start_Decal1ChannelSeparation: 0 + - s_start_Decal1GlobalMasking: 0 + - s_start_Decal1HueShift: 0 + - s_start_Decal1Video: 0 + - s_start_Decal2ChannelSeparation: 0 + - s_start_Decal2GlobalMasking: 0 + - s_start_Decal2HueShift: 0 + - s_start_Decal2Video: 0 + - s_start_Decal3ChannelSeparation: 0 + - s_start_Decal3GlobalMasking: 0 + - s_start_Decal3HueShift: 0 + - s_start_Decal3Video: 0 + - s_start_DecalTPSMaskGroup: 0 + - s_start_DepthAlpha: 0 + - s_start_DepthFXColorEmission: 0 + - s_start_DetailNormal: 0 + - s_start_DetailTexture: 0 + - s_start_DissolveAudioLink: 0 + - s_start_DissolvedMenu: 0 + - s_start_EdgeMenu: 0 + - s_start_EmissionAL0Add: 0 + - s_start_EmissionAL0COut: 0 + - s_start_EmissionAL0Multiply: 0 + - s_start_EmissionAL1Add: 0 + - s_start_EmissionAL1COut: 0 + - s_start_EmissionAL1Multiply: 0 + - s_start_EmissionAL2Add: 0 + - s_start_EmissionAL2COut: 0 + - s_start_EmissionAL2Multiply: 0 + - s_start_EmissionAL3Add: 0 + - s_start_EmissionAL3COut: 0 + - s_start_EmissionAL3Multiply: 0 + - s_start_EmissionBlinking0: 0 + - s_start_EmissionBlinking1: 0 + - s_start_EmissionBlinking2: 0 + - s_start_EmissionBlinking3: 0 + - s_start_EmissionCenterOut0: 0 + - s_start_EmissionCenterOut1: 0 + - s_start_EmissionCenterOut2: 0 + - s_start_EmissionCenterOut3: 0 + - s_start_EmissionHueShift0: 0 + - s_start_EmissionHueShift1: 0 + - s_start_EmissionHueShift2: 0 + - s_start_EmissionHueShift3: 0 + - s_start_EmissionLightBased0: 0 + - s_start_EmissionLightBased1: 0 + - s_start_EmissionLightBased2: 0 + - s_start_EmissionLightBased3: 0 + - s_start_FixedRimBlending: 1 + - s_start_FixedRimColor: 1 + - s_start_FixedRimShapeControl: 1 + - s_start_FlipbookCrossfade: 0 + - s_start_FlipbookHueShift: 0 + - s_start_FlipbookManualFrameControl: 0 + - s_start_FlipbookStartAndEnd: 0 + - s_start_GlitterAudioLink: 0 + - s_start_GlitterColorAndShape: 1 + - s_start_GlitterHueShiftSection: 0 + - s_start_GlitterMask: 0 + - s_start_GlitterPositionSize: 0 + - s_start_GlitterRotationSection: 0 + - s_start_GlitterSparkleControl: 1 + - s_start_GlobalMaskOptionsForceToggles: 0 + - s_start_GlobalMaskOptionsMinMaxSliders: 0 + - s_start_GlobalMaskOptionsSliders: 0 + - s_start_LightDataAddPass: 1 + - s_start_LightDataBasePass: 1 + - s_start_LightDataDebug: 0 + - s_start_LightDataSDF: 1 + - s_start_LocalRotation: 0 + - s_start_LocalTranslation: 0 + - s_start_LookAtAlphaMask: 0 + - s_start_LookAtBlueMask: 0 + - s_start_LookAtGreenMask: 0 + - s_start_LookAtRedMask: 1 + - s_start_LookAtVisibility: 0 + - s_start_MainHueShift: 1 + - s_start_MainHueShiftAL: 0 + - s_start_MainHueShiftGlobalMask: 0 + - s_start_MaskingMenu: 0 + - s_start_Matcap0AudioLink: 0 + - s_start_Matcap0Blending: 1 + - s_start_Matcap0Masking: 1 + - s_start_Matcap1AudioLink: 0 + - s_start_Matcap1Blending: 1 + - s_start_Matcap1HueShift: 0 + - s_start_Matcap1Masking: 1 + - s_start_Matcap1Normal: 0 + - s_start_Matcap1Smoothness: 0 + - s_start_Matcap2AudioLink: 0 + - s_start_Matcap2Blending: 1 + - s_start_Matcap2HueShift: 0 + - s_start_Matcap2Masking: 1 + - s_start_Matcap2Normal: 0 + - s_start_Matcap2Smoothness: 0 + - s_start_Matcap2TPSMaskGroup: 0 + - s_start_Matcap3AudioLink: 0 + - s_start_Matcap3Blending: 1 + - s_start_Matcap3HueShift: 0 + - s_start_Matcap3Masking: 1 + - s_start_Matcap3Normal: 0 + - s_start_Matcap3Smoothness: 0 + - s_start_Matcap3TPSMaskGroup: 0 + - s_start_Matcap4TPSMaskGroup: 0 + - s_start_MatcapHueShift: 0 + - s_start_MatcapNormal: 0 + - s_start_MatcapSmoothness: 0 + - s_start_MatcapTPSMaskGroup: 0 + - s_start_MirrorTexture: 1 + - s_start_MultilayerMath1stLayer: 1 + - s_start_MultilayerMath2ndLayer: 0 + - s_start_MultilayerMath3rdLayer: 0 + - s_start_MultilayerMathBorder: 1 + - s_start_MultilayerMathBorderMap: 0 + - s_start_MultilayerShadowMap: 0 + - s_start_OutlineAlphaDistanceFade: 0 + - s_start_OutlineColorAdjust: 0 + - s_start_OutlineFixedSize: 0 + - s_start_OutlineLighting: 0 + - s_start_OutlineRenderingOptions: 0 + - s_start_OutlineZOffset: 0 + - s_start_PBRSecondSpecular: 0 + - s_start_PBRSplitMaskSample: 0 + - s_start_ParallaxInternalHueShift: 0 + - s_start_ParallaxInternalLayerColoring: 1 + - s_start_ParallaxInternalLayerControls: 1 + - s_start_PathAppearance: 1 + - s_start_PathColors: 1 + - s_start_PathRemapping: 1 + - s_start_PathSourceDirections: 1 + - s_start_PathTypes: 1 + - s_start_Positioning: 1 + - s_start_RGBAlpha: 0 + - s_start_RGBBlue: 0 + - s_start_RGBGreen: 0 + - s_start_RGBRed: 0 + - s_start_RimLight0Color: 1 + - s_start_RimLight0GlobalMasking: 0 + - s_start_RimLight0HueShift: 0 + - s_start_RimLight0LightDirMask: 0 + - s_start_RimLight0ShapeControls: 1 + - s_start_RimLight1Color: 1 + - s_start_RimLight1GlobalMasking: 0 + - s_start_RimLight1HueShift: 0 + - s_start_RimLight1LightDirMask: 0 + - s_start_RimLight1ShapeControls: 1 + - s_start_RimLight2DirectionMask: 0 + - s_start_RimLightDirectionMask: 0 + - s_start_SSAOAdvanced: 0 + - s_start_SSAOColorAndMasking: 1 + - s_start_ScrollingEmission0: 0 + - s_start_ScrollingEmission1: 0 + - s_start_ScrollingEmission2: 0 + - s_start_ScrollingEmission3: 0 + - s_start_ShadingAddPass: 0 + - s_start_ShadingGlobalMask: 0 + - s_start_StylizedReflectionLilEnviroReflections: 1 + - s_start_StylizedReflectionLilSpecular: 1 + - s_start_StylizedReflectionMode0: 1 + - s_start_StylizedReflectionMode1: 1 + - s_start_StylizedSpecularAdvanced: 0 + - s_start_StylizedSpecularLayer0: 1 + - s_start_StylizedSpecularLayer1: 1 + - s_start_TimingOptions: 1 + - s_start_TransitionMenu: 0 + - s_start_UVTileDissolveRow0: 0 + - s_start_UVTileDissolveRow1: 0 + - s_start_UVTileDissolveRow2: 0 + - s_start_UVTileDissolveRow3: 0 + - s_start_VertAL: 0 + - s_start_VertexBarrelMode: 0 + - s_start_VertexColors: 0 + - s_start_VertexGlitchMirror: 0 + - s_start_VertexGlitchTexture: 1 + - s_start_VertexManipulationHeight: 1 + - s_start_VertexScale: 0 + - s_start_VertexSphereMode: 0 + - s_start_VertexTornadoMode: 0 + - s_start_VertexWind: 0 + - s_start_WorldTranslation: 0 + - s_start_brdfadvanced: 0 + - s_start_decal1_position: 1 + - s_start_decal2_position: 1 + - s_start_decal3_position: 1 + - s_start_decal_position: 1 + - s_start_deliot: 0 + - s_start_fogOpt: 1 + - s_start_ggxanisotropics: 0 + - s_start_heightFogOpt: 1 + - s_start_hextile: 0 + - s_start_liltoon_rim2_lightdir: 0 + - s_start_liltoon_rim_lightdir: 0 + - s_start_matcap1ApplyToAlpha: 0 + - s_start_matcap2ApplyToAlpha: 0 + - s_start_matcap3ApplyToAlpha: 0 + - s_start_matcapApplyToAlpha: 0 + - s_start_outline_al_color: 0 + - s_start_parallaxAdvanced: 0 + - s_start_vertexRounding: 0 + - s_start_vertexRoundingAL: 0 + - shader_is_using_thry_editor: 0 + - shader_locale: 0 + - shader_master_label: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _1st_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALDecalVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALDecalVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _ALDecaldCircleDimensions: {r: 0, g: 1, b: 0, a: 1} + - _ALUVPosition: {r: 0.5, g: 0.5, b: 1, a: 1} + - _ALUVScale: {r: 1, g: 1, b: 1, a: 1} + - _ALVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _AlphaAudioLinkAddRange: {r: 0, g: 0, b: 0, a: 1} + - _AlphaColor: {r: 1, g: 1, b: 1, a: 1} + - _AlphaMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _AlphaTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _AngleForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _Aniso0Tint: {r: 1, g: 1, b: 1, a: 1} + - _Aniso1Tint: {r: 1, g: 1, b: 1, a: 1} + - _AnisoColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _AnisotropyMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Ap_Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Ap_RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkBandOverrideSliders: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveDetail: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission0CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission1CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission2CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission3CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookFrame: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookScale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkOutlineColorMod: {r: 0, g: 1, b: 0, a: 0} + - _AudioLinkOutlineEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineSize: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkPathEmissionAddA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkRim2BrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2EmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2WidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimWidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiInnerEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiOuterEmission: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceColor: {r: 1, g: 1, b: 1, a: 1} + - _BackFaceMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BacklightColor: {r: 0.85, g: 0.8, b: 0.7, a: 1} + - _BacklightColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _BlackLightMasking0Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking1Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking2Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking3Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlueColor: {r: 1, g: 1, b: 1, a: 1} + - _BlueTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BumpMapPan: {r: 0, g: 0, b: 0, a: 0} + - _CenterOutDissolveDirection: {r: 0, g: 0, b: 1, a: 0} + - _ClearCoatMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _ClearCoatReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _ClearCoatSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _ClothMetallicSmoothnessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapColor: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotation: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotationPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalColor: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor1: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor2: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor3: {r: 1, g: 1, b: 1, a: 1} + - _DecalMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalPosition: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition1: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition2: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition3: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalScale: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale1: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale2: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale3: {r: 1, g: 1, b: 1, a: 0} + - _DecalSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset1: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset2: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset3: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DepthColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DepthRimColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DetailMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailNormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTexPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTint: {r: 1, g: 1, b: 1, a: 1} + - _DissolveDetailNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveEdgeColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveEndPoint: {r: 0, g: 1, b: 0, a: 0} + - _DissolveMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveNoiseTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveStartPoint: {r: 0, g: -1, b: 0, a: 0} + - _DissolveTextureColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveToTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrength1AudioLink: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrengthAudioLink: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL0Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL0StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL1Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL1StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL2Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL2StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL3Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL3StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColor1: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor2: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor3: {r: 1, g: 1, b: 1, a: 1} + - _EmissionMap1Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMapPan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask1Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _EmissiveScroll_Direction: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction1: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction2: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction3: {r: 0, g: -10, b: 0, a: 0} + - _FXProximityColorMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _FXProximityColorMinColor: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookColor: {r: 1, g: 1, b: 1, a: 1} + - _FlipbookCrossfadeRange: {r: 0.75, g: 1, b: 0, a: 1} + - _FlipbookMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookPanning: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _FlipbookSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookTexArrayPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALMaxBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALSizeAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterColor: {r: 1, g: 1, b: 1, a: 1} + - _GlitterColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSize: {r: 0.1, g: 0.5, b: 0, a: 1} + - _GlitterRandomRotationSpeed: {r: 0, g: 0, b: 0, a: 0} + - _GlitterUVPanning: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskMinMaxSlider_0: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_1: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_10: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_11: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_12: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_13: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_14: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_15: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_2: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_3: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_4: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_5: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_6: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_7: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_8: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_9: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskTexture0Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalThemeColor0: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor1: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor2: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor3: {r: 1, g: 1, b: 1, a: 1} + - _GreenColor: {r: 1, g: 1, b: 1, a: 1} + - _GreenTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _HeightMapPan: {r: 0, g: 0, b: 0, a: 0} + - _HeightmaskPan: {r: 0, g: 0, b: 0, a: 0} + - _HighColor: {r: 1, g: 1, b: 1, a: 1} + - _HighColor_TexPan: {r: 0, g: 0, b: 0, a: 0} + - _LTCGI_DiffuseColor: {r: 1, g: 1, b: 1, a: 1} + - _LTCGI_SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _LightDataSDFMapPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingAOMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingDetailShadowMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingForcedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingWrappedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightngForcedDirection: {r: 0, g: 0, b: 0, a: 1} + - _LineColor: {r: 1, g: 1, b: 1, a: 1} + - _LookAtAlphaDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtAlphaMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtBlueDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtBlueMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBluePivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBlueUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtGreenDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtGreenMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtRedMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _MainColorAdjustTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MainTexPan: {r: 0, g: 0, b: 0, a: 0} + - _MatCap2ndBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap3rdBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap4thBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCapBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap3MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap4MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Pan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapColor: {r: 1, g: 1, b: 1, a: 1} + - _MatcapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapPan: {r: 0, g: 0, b: 0, a: 0} + - _MirrorColor: {r: 1, g: 1, b: 1, a: 1} + - _MirrorTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _MochieSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _MultilayerMathBlurMapPan: {r: 0, g: 0, b: 0, a: 0} + - _NormalCorrectOrigin: {r: 0, g: 0.4, b: -0.025, a: 1} + - _OutlineDropShadowOffset: {r: 1, g: 0, b: 0, a: 0} + - _OutlineMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _OutlinePersonaDirection: {r: 1, g: 0, b: 0, a: 0} + - _OutlineTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _PBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _PPMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _PPRGB: {r: 1, g: 1, b: 1, a: 1} + - _PPTint: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ParallaxInternalMapPan: {r: 0, g: 0, b: 1, a: 1} + - _ParallaxInternalMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMinColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalPanDepthSpeed: {r: 0, g: 0, b: 1, a: 1} + - _PathALAutoCorrelatorRangeA: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeB: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeG: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeR: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALHistoryRangeA: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeB: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeG: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeR: {r: 0, g: 1, b: 0, a: 1} + - _PathColorA: {r: 1, g: 1, b: 1, a: 1} + - _PathColorB: {r: 1, g: 1, b: 1, a: 1} + - _PathColorG: {r: 1, g: 1, b: 1, a: 1} + - _PathColorR: {r: 1, g: 1, b: 1, a: 1} + - _PathEmissionStrength: {r: 0, g: 0, b: 0, a: 0} + - _PathGapLengths: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathOffset: {r: 0, g: 0, b: 0, a: 0} + - _PathRemapA: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapB: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapG: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapR: {r: 0, g: 1, b: 0, a: 1} + - _PathSegments: {r: 0, g: 0, b: 0, a: 0} + - _PathSoftness: {r: 1, g: 1, b: 1, a: 1} + - _PathSpeed: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathTime: {r: -999, g: -999, b: -999, a: -999} + - _PathWidth: {r: 0.03, g: 0.03, b: 0.03, a: 0.03} + - _PathingColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PathingMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PolarCenter: {r: 0.5, g: 0.5, b: 0, a: 0} + - _RGBAAlphaPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAAlphaPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAAlphaScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBABlueScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAGreenScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBARedPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBASmoothnessMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RedColor: {r: 1, g: 1, b: 1, a: 1} + - _RedTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _ReflectionColor: {r: 1, g: 1, b: 1, a: 1} + - _ReflectionCubeColor: {r: 0, g: 0, b: 0, a: 1} + - _RgbNormalAPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalBPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalGPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalRPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2Color: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _Rim2ColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2IndirColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2ShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _Rim2TexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimColor: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _RimColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimEnviroMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimIndirColor: {r: 1, g: 1, b: 1, a: 1} + - _RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _RimMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _RimTexPan: {r: 0, g: 0, b: 0, a: 0} + - _SDFForward: {r: 0, g: 0, b: 1, a: 0} + - _SDFLeft: {r: -1, g: 0, b: 0, a: 0} + - _SDFShadingTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOColor: {r: 0, g: 0, b: 0, a: 1} + - _SSAOColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOHSV: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaxDistanceFalloff: {r: 0.01, g: 0.1, b: 1, a: 1} + - _SSSColor: {r: 1, g: 0, b: 0, a: 1} + - _SSSThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_HighColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_Rim2LightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_RimLightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowAOShift: {r: 0, g: 1, b: 0, a: 1} + - _ShadowAOShift2: {r: 0, g: 1, b: 0, a: 1} + - _ShadowBorderColor: {r: 1, g: 0, b: 0, a: 1} + - _ShadowBorderMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowColor: {r: 0.7, g: 0.75, b: 0.85, a: 1} + - _ShadowColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowStrengthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SkinThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SphericalDissolveCenter: {r: 0, g: 0, b: 0, a: 1} + - _SssColorBleedAoWeights: {r: 0.4, g: 0.15, b: 0.13, a: 0} + - _SssTransmissionAbsorption: {r: -8, g: -40, b: -64, a: 0} + - _TPS_BuldgeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorForward: {r: 0, g: 0, b: 1, a: 0} + - _TPS_PenetratorRight: {r: 1, g: 0, b: 0, a: 0} + - _TPS_PenetratorScale: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorUp: {r: 0, g: 1, b: 0, a: 0} + - _TPS_SqueezeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSScale: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericColor: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericScale: {r: 1, g: 1, b: 1, a: 1} + - _TextPositionColor: {r: 1, g: 0, b: 1, a: 1} + - _TextPositionOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionScale: {r: 1, g: 1, b: 1, a: 1} + - _TextTimeColor: {r: 1, g: 0, b: 1, a: 1} + - _TextTimeOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextTimePadding: {r: 0, g: 0, b: 0, a: 0} + - _TextTimeScale: {r: 1, g: 1, b: 1, a: 1} + - _TruchetALAlpha: {r: 0, g: 0, b: 0, a: 0} + - _TruchetALEmission: {r: 0, g: 0, b: 0, a: 0} + - _TruchetChronoPanSpeed: {r: 0, g: 0, b: 0, a: 0} + - _TruchetColor: {r: 1, g: 1, b: 1, a: 1} + - _TruchetMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _TruchetPanOffset: {r: 0, g: 0, b: 0, a: 0} + - _TruchetTexPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexBasicsMaskUVPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalRotationAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalRotationCTALSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalScaleALMax: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalScaleALMin: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexLookAtAlphaAudiolink: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationHeightAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationHeightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationLocalRotation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalRotationSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalScale: {r: 1, g: 1, b: 1, a: 1} + - _VertexManipulationLocalTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationWorldTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexRoundingRangeAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexSpectrumOffsetMax: {r: 0, g: 0.1, b: 0, a: 1} + - _VertexSpectrumOffsetMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexSphereCenter: {r: 0, g: 0, b: 0, a: 1} + - _VertexWindDetailDirection: {r: 0, g: 1, b: 0, a: 0} + - _VertexWindPrimaryDirection: {r: 1, g: 0, b: 0, a: 0} + - _VertexWorldTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexWorldTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VideoMaskTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _VideoResolution: {r: 1280, g: 720, b: 0, a: 0} + - _VoronoiGradient: {r: 0, g: 0.5, b: 0, a: 0} + - _VoronoiInnerColor: {r: 1, g: 1, b: 1, a: 1} + - _VoronoiMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiOuterColor: {r: 0, g: 0, b: 0, a: 1} + - _VoronoiRandomMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiRandomMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiSpeed: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Quiz/Materials/LukePaper.mat.meta b/Assets/Quiz/Materials/LukePaper.mat.meta new file mode 100644 index 0000000..b90c2f3 --- /dev/null +++ b/Assets/Quiz/Materials/LukePaper.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 156868ebaeb510e49b9e98d3432f84d8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/NoPoints/Circle.mat b/Assets/Quiz/Materials/NoPoints/Circle.mat index 4346db3..18183a0 100644 --- a/Assets/Quiz/Materials/NoPoints/Circle.mat +++ b/Assets/Quiz/Materials/NoPoints/Circle.mat @@ -32,6 +32,7 @@ Material: OriginalShader: .poiyomi/Poiyomi Pro World OriginalShaderGUID: a11582d439d5e494986c4b421999c03a RenderType: Opaque + _EmissionColorAnimated: 1 _stripped_tex__ClothDFG: 76d65cbce584df7449699fb8406f60ea _stripped_tex__SkinLUT: d13510bb2be49aa40a66a0101efb6a36 _stripped_tex__ToonRamp: 61bd594533da4fc42bd46ef93ba5a4f6 @@ -2782,7 +2783,7 @@ Material: - m_start_backlight: 0 - m_start_bakedLighting: 1 - m_start_blending: 0 - - m_start_brdf: 1 + - m_start_brdf: 0 - m_start_clearCoat: 0 - m_start_clearcoatadvanced: 0 - m_start_clearcoatglobalmask: 0 @@ -2793,7 +2794,7 @@ Material: - m_start_emission1Options: 0 - m_start_emission2Options: 0 - m_start_emission3Options: 0 - - m_start_emissionOptions: 0 + - m_start_emissionOptions: 1 - m_start_flipBook: 0 - m_start_glitter: 0 - m_start_internalparallax: 0 @@ -3461,7 +3462,7 @@ Material: - _EmissionAL2StrengthMod: {r: 0, g: 0, b: 0, a: 0} - _EmissionAL3Multipliers: {r: 1, g: 1, b: 0, a: 0} - _EmissionAL3StrengthMod: {r: 0, g: 0, b: 0, a: 0} - - _EmissionColor: {r: 0.17144115, g: 0.67244333, b: 0.8549928, a: 1} + - _EmissionColor: {r: 0.1686, g: 0.6706, b: 0.8471, a: 1} - _EmissionColor1: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor2: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor3: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Quiz/Materials/NoPoints/HostDesk.mat b/Assets/Quiz/Materials/NoPoints/HostDesk.mat index e4a60aa..4b4f440 100644 --- a/Assets/Quiz/Materials/NoPoints/HostDesk.mat +++ b/Assets/Quiz/Materials/NoPoints/HostDesk.mat @@ -2755,7 +2755,7 @@ Material: - m_start_PoiGlobalCategory: 0 - m_start_PoiLightData: 0 - m_start_PoiPostProcessingCategory: 0 - - m_start_PoiShading: 0 + - m_start_PoiShading: 1 - m_start_PoiUVCategory: 0 - m_start_RGBMask: 0 - m_start_Rim2AudioLink: 0 diff --git a/Assets/Quiz/Materials/NoPoints/NoPointsMeter.mat b/Assets/Quiz/Materials/NoPoints/NoPointsMeter.mat index dcb5b94..dc4998f 100644 --- a/Assets/Quiz/Materials/NoPoints/NoPointsMeter.mat +++ b/Assets/Quiz/Materials/NoPoints/NoPointsMeter.mat @@ -8,7 +8,7 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: NoPointsMeter - m_Shader: {fileID: 4800000, guid: f821e5390e769bb47afe32fa4c27fd8f, type: 3} + m_Shader: {fileID: 4800000, guid: 8a6f6822e77565643bcb577f88f9b5f5, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: [] @@ -51,8 +51,8 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _DissolveDetailNoise: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} + m_Texture: {fileID: 2800000, guid: 5757e282ae2aac54e99d40378b103e7c, type: 3} + m_Scale: {x: 3, y: 10} m_Offset: {x: 0, y: 0} - _DissolveEdgeGradient: m_Texture: {fileID: 0} @@ -730,10 +730,10 @@ Material: - _DissolveApplyGlobalMaskIndex: 0 - _DissolveDetailEdgeSmoothing: 0 - _DissolveDetailNoiseUV: 0 - - _DissolveDetailStrength: 0.1 + - _DissolveDetailStrength: 0.098 - _DissolveEdgeColorThemeIndex: 0 - - _DissolveEdgeEmission: 0 - - _DissolveEdgeHardness: 0.5 + - _DissolveEdgeEmission: 2.34 + - _DissolveEdgeHardness: 0 - _DissolveEdgeHueSelectOrShift: 1 - _DissolveEdgeHueShift: 0 - _DissolveEdgeHueShiftColorSpace: 0 @@ -755,10 +755,10 @@ Material: - _DissolveMaskUV: 0 - _DissolveNoiseTextureUV: 0 - _DissolveP2PClamp: 0 - - _DissolveP2PEdgeLength: 0.1 + - _DissolveP2PEdgeLength: 0.05 - _DissolveP2PWorldLocal: 0 - _DissolveTextureColorThemeIndex: 0 - - _DissolveToEmissionStrength: 0.97 + - _DissolveToEmissionStrength: 0 - _DissolveToTextureUV: 0 - _DissolveType: 2 - _DissolveUseVertexColors: 0 @@ -2812,7 +2812,7 @@ Material: - m_start_depthRimLightOptions: 0 - m_start_dissolve: 1 - m_start_dissolveHueShift: 0 - - m_start_emission1Options: 1 + - m_start_emission1Options: 0 - m_start_emission2Options: 0 - m_start_emission3Options: 0 - m_start_emissionOptions: 1 @@ -3198,7 +3198,7 @@ Material: - s_start_MainHueShift: 1 - s_start_MainHueShiftAL: 0 - s_start_MainHueShiftGlobalMask: 0 - - s_start_MaskingMenu: 0 + - s_start_MaskingMenu: 1 - s_start_Matcap0AudioLink: 0 - s_start_Matcap0Blending: 1 - s_start_Matcap0Masking: 1 @@ -3462,8 +3462,8 @@ Material: - _DetailNormalMapPan: {r: 0, g: 0, b: 0, a: 0} - _DetailTexPan: {r: 0, g: 0, b: 0, a: 0} - _DetailTint: {r: 1, g: 1, b: 1, a: 1} - - _DissolveDetailNoisePan: {r: 0, g: 0, b: 0, a: 0} - - _DissolveEdgeColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveDetailNoisePan: {r: 0, g: -3, b: 0, a: 0} + - _DissolveEdgeColor: {r: 0, g: 1, b: 0.9578552, a: 1} - _DissolveEndPoint: {r: 0, g: -0.5, b: 0, a: 0} - _DissolveMaskPan: {r: 0, g: 0, b: 0, a: 0} - _DissolveNoiseTexturePan: {r: 0, g: 0, b: 0, a: 0} diff --git a/Assets/Quiz/Materials/NoPoints/NoPointsTrophyInner.mat b/Assets/Quiz/Materials/NoPoints/NoPointsTrophyInner.mat new file mode 100644 index 0000000..4fc9927 --- /dev/null +++ b/Assets/Quiz/Materials/NoPoints/NoPointsTrophyInner.mat @@ -0,0 +1,3783 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: NoPointsTrophyInner + m_Shader: {fileID: 4800000, guid: 76ffb24b294f50546bee6b34a4bb0f18, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: + - BSSBLOOMFOGTYPE_HEIGHT + - VIGNETTE_MASKED + - _LIGHTINGMODE_REALISTIC + - _RIM2STYLE_POIYOMI + - _RIMSTYLE_POIYOMI + - _STOCHASTICMODE_DELIOT_HEITZ + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: + AllLockedGUIDS: 9fa141bf96518154fb0b91e9f9d2831c + OriginalKeywords: BSSBLOOMFOGTYPE_HEIGHT VIGNETTE_MASKED _LIGHTINGMODE_REALISTIC + _RIM2STYLE_POIYOMI _RIMSTYLE_POIYOMI _STOCHASTICMODE_DELIOT_HEITZ + OriginalShader: .poiyomi/Poiyomi Pro + OriginalShaderGUID: 77f45810ea400c74e929db1f8ea09c47 + RenderType: Transparent + _stripped_tex__ClothDFG: 76d65cbce584df7449699fb8406f60ea + _stripped_tex__MochieMetallicMaps: 783c003699d6acb45a883ad2f443c621 + _stripped_tex__SkinLUT: d13510bb2be49aa40a66a0101efb6a36 + _stripped_tex__ToonRamp: 61bd594533da4fc42bd46ef93ba5a4f6 + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 067b6556edd6a794ab94bf18eb4658d7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightDataSDFMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingAOMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingDetailShadowMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 8f739ccd5d3d5d446a49ea4f861e81de, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _UzumoreMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - GeometryShader_Enabled: 1 + - Instancing: 0 + - Tessellation_Enabled: 1 + - VertexBasicsMaskUV: 0 + - _1st2nd_Shades_Feather: 0.0001 + - _1stShadeMapMask_Inverse: 0 + - _1st_ShadeMapUV: 0 + - _2ndShadeMapMask_Inverse: 0 + - _2nd_ShadeMapUV: 0 + - _ALDecalBandClipMax: 1 + - _ALDecalBandClipMin: 0 + - _ALDecalBandStep: 0 + - _ALDecalBaseBoost: 5 + - _ALDecalBlendAlpha: 1 + - _ALDecalBlendType: 0 + - _ALDecalColorMaskUV: 0 + - _ALDecalControlsAlpha: 0 + - _ALDecalGlobalMask: 0 + - _ALDecalGlobalMaskBlendType: 2 + - _ALDecalHighEmission: 0 + - _ALDecalLineWidth: 1 + - _ALDecalLowEmission: 0 + - _ALDecalMidEmission: 0 + - _ALDecalShapeClip: 0 + - _ALDecalShapeClipBandWidth: 0.5 + - _ALDecalShapeClipVolumeWidth: 0.5 + - _ALDecalTrebleBoost: 1 + - _ALDecalType: 0 + - _ALDecalUV: 0 + - _ALDecalUVMode: 0 + - _ALDecalVolume: 0.5 + - _ALDecalVolumeClipMax: 1 + - _ALDecalVolumeClipMin: 0 + - _ALDecalVolumeColorHighThemeIndex: 0 + - _ALDecalVolumeColorLowThemeIndex: 0 + - _ALDecalVolumeColorMidThemeIndex: 0 + - _ALDecalVolumeColorSource: 1 + - _ALDecalVolumeStep: 0 + - _ALHighEmission: 0 + - _ALLowEmission: 0 + - _ALMidEmission: 0 + - _ALUVRotation: 0 + - _ALUVRotationSpeed: 0 + - _ALVolumeColorBlendAlpha: 1 + - _ALVolumeColorBlendType: 0 + - _ALVolumeColorDirection: 0 + - _ALVolumeColorHighThemeIndex: 0 + - _ALVolumeColorLowThemeIndex: 0 + - _ALVolumeColorMidThemeIndex: 0 + - _ALVolumeColorUV: 0 + - _AddBlendOp: 4 + - _AddBlendOpAlpha: 4 + - _AddDstBlend: 1 + - _AddDstBlendAlpha: 1 + - _AddSrcBlend: 1 + - _AddSrcBlendAlpha: 0 + - _Add_Antipodean_Rim2Light: 0 + - _Add_Antipodean_RimLight: 0 + - _AlphaAlphaAdd: 0 + - _AlphaAngular: 0 + - _AlphaAngularGlobalMask: 0 + - _AlphaAudioLinkAddBand: 0 + - _AlphaAudioLinkEnabled: 0 + - _AlphaBoostFA: 10 + - _AlphaColorThemeIndex: 0 + - _AlphaDistanceFade: 0 + - _AlphaDistanceFadeGlobalMask: 0 + - _AlphaDistanceFadeMax: 0 + - _AlphaDistanceFadeMaxAlpha: 1 + - _AlphaDistanceFadeMin: 0 + - _AlphaDistanceFadeMinAlpha: 0 + - _AlphaDistanceFadeType: 1 + - _AlphaDitherBias: 0 + - _AlphaDitherGradient: 0.1 + - _AlphaDithering: 0 + - _AlphaForceOpaque: 0 + - _AlphaFresnel: 0 + - _AlphaFresnelAlpha: 0 + - _AlphaFresnelGlobalMask: 0 + - _AlphaFresnelInvert: 0 + - _AlphaFresnelSharpness: 0.5 + - _AlphaFresnelWidth: 0.5 + - _AlphaGlobalMask: 0 + - _AlphaGlobalMaskBlendType: 2 + - _AlphaMaskBlendStrength: 1 + - _AlphaMaskInvert: 0 + - _AlphaMaskUV: 0 + - _AlphaMaskValue: 0 + - _AlphaMipScale: 0.25 + - _AlphaMod: 0 + - _AlphaPremultiply: 1 + - _AlphaSharpenedA2C: 0 + - _AlphaTextureStochastic: 0 + - _AlphaTextureUV: 0 + - _AlphaToCoverage: 0 + - _AngleCompareTo: 0 + - _AngleMinAlpha: 0 + - _AngleType: 0 + - _Aniso0Blur: 0 + - _Aniso0Edge: 0.5 + - _Aniso0Offset: 0 + - _Aniso0OffsetMapStrength: 0 + - _Aniso0Power: 0 + - _Aniso0Strength: 1 + - _Aniso0SwitchDirection: 0 + - _Aniso0TintIndex: 0 + - _Aniso0ToonMode: 0 + - _Aniso1Blur: 0 + - _Aniso1Edge: 0.5 + - _Aniso1Offset: 0 + - _Aniso1OffsetMapStrength: 0 + - _Aniso1Power: 0.1 + - _Aniso1Strength: 1 + - _Aniso1SwitchDirection: 0 + - _Aniso1TintIndex: 0 + - _Aniso1ToonMode: 0 + - _AnisoAdd: 1 + - _AnisoColorMapUV: 0 + - _AnisoGlobalMask: 0 + - _AnisoGlobalMaskBlendType: 2 + - _AnisoHideInShadow: 1 + - _AnisoReplace: 0 + - _AnisoUseBaseColor: 0 + - _AnisoUseLightColor: 1 + - _Anisotropy: 0 + - _AnisotropyMapChannel: 0 + - _AnisotropyMapUV: 0 + - _Ap_Rim2Light_FeatherOff: 0 + - _Ap_Rim2Light_Power: 0.1 + - _Ap_RimLight_FeatherOff: 0 + - _Ap_RimLight_Power: 0.1 + - _ApplyReflection: 0 + - _ApplySpecular: 1 + - _ApplySpecularFA: 1 + - _AudioLinkAnimToggle: 1 + - _AudioLinkBandOverridesEnabled: 0 + - _AudioLinkDecal0AlphaBand: 0 + - _AudioLinkDecal0ChannelSeparationBand: 0 + - _AudioLinkDecal0EmissionBand: 0 + - _AudioLinkDecal0RotationBand: 0 + - _AudioLinkDecal0ScaleBand: 0 + - _AudioLinkDecal0SideBand: 0 + - _AudioLinkDecal1AlphaBand: 0 + - _AudioLinkDecal1ChannelSeparationBand: 0 + - _AudioLinkDecal1EmissionBand: 0 + - _AudioLinkDecal1RotationBand: 0 + - _AudioLinkDecal1ScaleBand: 0 + - _AudioLinkDecal1SideBand: 0 + - _AudioLinkDecal2AlphaBand: 0 + - _AudioLinkDecal2ChannelSeparationBand: 0 + - _AudioLinkDecal2EmissionBand: 0 + - _AudioLinkDecal2RotationBand: 0 + - _AudioLinkDecal2ScaleBand: 0 + - _AudioLinkDecal2SideBand: 0 + - _AudioLinkDecal3AlphaBand: 0 + - _AudioLinkDecal3ChannelSeparationBand: 0 + - _AudioLinkDecal3EmissionBand: 0 + - _AudioLinkDecal3RotationBand: 0 + - _AudioLinkDecal3ScaleBand: 0 + - _AudioLinkDecal3SideBand: 0 + - _AudioLinkDecalCC0: 0 + - _AudioLinkDecalCC1: 0 + - _AudioLinkDecalCC2: 0 + - _AudioLinkDecalCC3: 0 + - _AudioLinkDissolveAlphaBand: 0 + - _AudioLinkDissolveDetailBand: 0 + - _AudioLinkEmission0CenterOutBand: 0 + - _AudioLinkEmission0CenterOutDuration: 1 + - _AudioLinkEmission0CenterOutSize: 0 + - _AudioLinkEmission1CenterOutBand: 0 + - _AudioLinkEmission1CenterOutDuration: 1 + - _AudioLinkEmission1CenterOutSize: 0 + - _AudioLinkEmission2CenterOutBand: 0 + - _AudioLinkEmission2CenterOutDuration: 1 + - _AudioLinkEmission2CenterOutSize: 0 + - _AudioLinkEmission3CenterOutBand: 0 + - _AudioLinkEmission3CenterOutDuration: 1 + - _AudioLinkEmission3CenterOutSize: 0 + - _AudioLinkFlipbookAlphaBand: 0 + - _AudioLinkFlipbookEmissionBand: 0 + - _AudioLinkFlipbookFrameBand: 0 + - _AudioLinkFlipbookScaleBand: 0 + - _AudioLinkHelp: 0 + - _AudioLinkOutlineColorBand: 0 + - _AudioLinkOutlineEmissionBand: 0 + - _AudioLinkOutlineSizeBand: 0 + - _AudioLinkPathEmissionAddBandA: 0 + - _AudioLinkPathEmissionAddBandB: 0 + - _AudioLinkPathEmissionAddBandG: 0 + - _AudioLinkPathEmissionAddBandR: 0 + - _AudioLinkPathTimeOffsetBandA: 0 + - _AudioLinkPathTimeOffsetBandB: 0 + - _AudioLinkPathTimeOffsetBandG: 0 + - _AudioLinkPathTimeOffsetBandR: 0 + - _AudioLinkPathWidthOffsetBandA: 0 + - _AudioLinkPathWidthOffsetBandB: 0 + - _AudioLinkPathWidthOffsetBandG: 0 + - _AudioLinkPathWidthOffsetBandR: 0 + - _AudioLinkRim2BrightnessBand: 0 + - _AudioLinkRim2EmissionBand: 0 + - _AudioLinkRim2WidthBand: 0 + - _AudioLinkRimBrightnessBand: 0 + - _AudioLinkRimEmissionBand: 0 + - _AudioLinkRimWidthBand: 0 + - _AudioLinkSmoothingBass: 0 + - _AudioLinkSmoothingHighMid: 0 + - _AudioLinkSmoothingLowMid: 0 + - _AudioLinkSmoothingTreble: 0 + - _AudioLinkVoronoiChronoSpeedXBand: 0 + - _AudioLinkVoronoiChronoSpeedXSpeed: 0 + - _AudioLinkVoronoiChronoSpeedXType: 0 + - _AudioLinkVoronoiChronoSpeedYBand: 0 + - _AudioLinkVoronoiChronoSpeedYSpeed: 0 + - _AudioLinkVoronoiChronoSpeedYType: 0 + - _AudioLinkVoronoiChronoSpeedZBand: 0 + - _AudioLinkVoronoiChronoSpeedZSpeed: 0 + - _AudioLinkVoronoiChronoSpeedZType: 0 + - _AudioLinkVoronoiGradientMaxAdd: 0 + - _AudioLinkVoronoiGradientMaxAddBand: 0 + - _AudioLinkVoronoiGradientMinAdd: 0 + - _AudioLinkVoronoiGradientMinAddBand: 0 + - _AudioLinkVoronoiInnerEmissionBand: 0 + - _AudioLinkVoronoiOuterEmissionBand: 0 + - _BRDFTPSDepthEnabled: 0 + - _BRDFTPSReflectionMaskStrength: 1 + - _BRDFTPSSpecularMaskStrength: 1 + - _BSSBloomfog: 0 + - _BSSBloomfogType: 1 + - _BSSEnabled: 0 + - _BSSHelpBox1: 0 + - _BSSHelpBox2: 0 + - _BSSHelpBox3: 0 + - _BSSSpacer1: 0 + - _BSSSpacer2: 0 + - _BSSSpacer3: 0 + - _BackFaceColorThemeIndex: 0 + - _BackFaceDetailIntensity: 1 + - _BackFaceEmissionLimiter: 1 + - _BackFaceEmissionStrength: 0 + - _BackFaceEnabled: 0 + - _BackFaceHueSelectOrShift: 1 + - _BackFaceHueShift: 0 + - _BackFaceHueShiftEnabled: 0 + - _BackFaceHueShiftSpeed: 0 + - _BackFaceMaskChannel: 0 + - _BackFaceMaskUV: 0 + - _BackFaceReplaceAlpha: 0 + - _BackFaceShiftColorSpace: 0 + - _BackFaceTextureUV: 0 + - _BacklightBackfaceMask: 1 + - _BacklightBlur: 0.05 + - _BacklightBorder: 0.35 + - _BacklightColorTexUV: 0 + - _BacklightDirectivity: 5 + - _BacklightEnabled: 0 + - _BacklightMainStrength: 0 + - _BacklightNormalStrength: 1 + - _BacklightReceiveShadow: 1 + - _BacklightViewStrength: 1 + - _BaseColor_Step: 0.5 + - _BaseShade_Feather: 0.0001 + - _BlackLightMasking0GlobalMaskBlendType: 0 + - _BlackLightMasking0GlobalMaskIndex: 0 + - _BlackLightMasking0Key: 1 + - _BlackLightMasking1GlobalMaskBlendType: 0 + - _BlackLightMasking1GlobalMaskIndex: 0 + - _BlackLightMasking1Key: 2 + - _BlackLightMasking2GlobalMaskBlendType: 0 + - _BlackLightMasking2GlobalMaskIndex: 0 + - _BlackLightMasking2Key: 3 + - _BlackLightMasking3GlobalMaskBlendType: 0 + - _BlackLightMasking3GlobalMaskIndex: 0 + - _BlackLightMasking3Key: 4 + - _BlackLightMaskingEnabled: 0 + - _BlendOp: 0 + - _BlendOpAlpha: 4 + - _BlendshapeBadScaleFix: 1 + - _BlendshapePower: 1 + - _BlueAlphaAdd: 0 + - _BlueColorThemeIndex: 0 + - _BlueTextureStochastic: 0 + - _BlueTextureUV: 0 + - _BulgeOffset: 0 + - _BulgePower: 0 + - _BumpMapStochastic: 0 + - _BumpMapUV: 0 + - _BumpScale: 1 + - _CCIgnoreCastedShadows: 0 + - _CameraAngleMax: 90 + - _CameraAngleMin: 45 + - _CenterOutDissolveInvert: 0 + - _CenterOutDissolveMode: 1 + - _CenterOutDissolveNormals: 0 + - _CenterOutDissolvePower: 1 + - _ClearCoatBRDF: 0 + - _ClearCoatForceFallback: 0 + - _ClearCoatGSAAEnabled: 1 + - _ClearCoatGSAAThreshold: 0.1 + - _ClearCoatGSAAVariance: 0.15 + - _ClearCoatGlobalMask: 0 + - _ClearCoatGlobalMaskBlendType: 2 + - _ClearCoatLitFallback: 1 + - _ClearCoatMapsClearCoatMaskChannel: 0 + - _ClearCoatMapsReflectionMaskChannel: 2 + - _ClearCoatMapsRoughnessChannel: 1 + - _ClearCoatMapsSpecularMaskChannel: 3 + - _ClearCoatMapsStochastic: 0 + - _ClearCoatMapsUV: 0 + - _ClearCoatMaskInvert: 0 + - _ClearCoatNormalSelect: 0 + - _ClearCoatReflectionMaskInvert: 0 + - _ClearCoatReflectionStrength: 1 + - _ClearCoatReflectionStrengthGlobalMask: 0 + - _ClearCoatReflectionStrengthGlobalMaskBlendType: 2 + - _ClearCoatReflectionTintThemeIndex: 0 + - _ClearCoatSmoothness: 1 + - _ClearCoatSmoothnessGlobalMask: 0 + - _ClearCoatSmoothnessGlobalMaskBlendType: 2 + - _ClearCoatSmoothnessMapInvert: 0 + - _ClearCoatSpecularMaskInvert: 0 + - _ClearCoatSpecularStrength: 1 + - _ClearCoatSpecularStrengthGlobalMask: 0 + - _ClearCoatSpecularStrengthGlobalMaskBlendType: 2 + - _ClearCoatSpecularTintThemeIndex: 0 + - _ClearCoatStrength: 1 + - _ClearCoatTPSDepthMaskEnabled: 0 + - _ClearCoatTPSMaskStrength: 1 + - _ClearcoatExposureOcclusion: 0 + - _ClearcoatFresnelStrength: 0.5 + - _ClothLerp: 0 + - _ClothMetallicSmoothnessMapInvert: 0 + - _ClothMetallicSmoothnessMapUV: 0 + - _ClothReflectance: 0.5 + - _ClothSmoothness: 0.5 + - _ColorGradingToggle: 0 + - _ColorMask: 15 + - _ColorThemeIndex: 0 + - _ContinuousDissolve: 0 + - _CubeMapBlendAmount: 1 + - _CubeMapBrightness: 0 + - _CubeMapColorThemeIndex: 0 + - _CubeMapContrast: 1 + - _CubeMapEmissionStrength: 0 + - _CubeMapEnabled: 0 + - _CubeMapHueSelectOrShift: 1 + - _CubeMapHueShift: 0 + - _CubeMapHueShiftColorSpace: 0 + - _CubeMapHueShiftEnabled: 0 + - _CubeMapHueShiftSpeed: 0 + - _CubeMapIntensity: 1 + - _CubeMapLightMask: 0 + - _CubeMapMaskChannel: 0 + - _CubeMapMaskGlobalMask: 0 + - _CubeMapMaskGlobalMaskBlendType: 2 + - _CubeMapMaskInvert: 0 + - _CubeMapMaskUV: 0 + - _CubeMapNormal: 1 + - _CubeMapSaturation: 1 + - _CubeMapSmoothness: 1 + - _CubeMapUVMode: 1 + - _CubeMapWorldNormalsStrength: 1 + - _CubemapBlendType: 0 + - _Cull: 0 + - _CurvFix: 1 + - _Curvature: 0 + - _CurvatureU: 0 + - _CurvatureV: 0 + - _CustomColors: 0 + - _Cutoff: 0 + - _Decal0ApplyGlobalMaskBlendType: 0 + - _Decal0ApplyGlobalMaskIndex: 0 + - _Decal0ChannelSeparation: 0 + - _Decal0ChannelSeparationAngleStrength: 0 + - _Decal0ChannelSeparationEnable: 0 + - _Decal0ChannelSeparationHue: 0 + - _Decal0ChannelSeparationPremultiply: 0 + - _Decal0ChannelSeparationVertical: 0 + - _Decal0Depth: 0 + - _Decal0FaceMask: 0 + - _Decal0GlobalMask: 0 + - _Decal0GlobalMaskBlendType: 2 + - _Decal0HueAngleStrength: 0 + - _Decal0MaskChannel: 0 + - _Decal0OnlyVideo: 0 + - _Decal0OverrideAlphaMode: 0 + - _Decal0TPSMaskStrength: 1 + - _Decal0UseDecalAlpha: 0 + - _Decal0VideoAspectFix: 0 + - _Decal0VideoEmissionStrength: 0 + - _Decal0VideoEnabled: 0 + - _Decal0VideoFitToScale: 1 + - _Decal1ApplyGlobalMaskBlendType: 0 + - _Decal1ApplyGlobalMaskIndex: 0 + - _Decal1ChannelSeparation: 0 + - _Decal1ChannelSeparationAngleStrength: 0 + - _Decal1ChannelSeparationEnable: 0 + - _Decal1ChannelSeparationHue: 0 + - _Decal1ChannelSeparationPremultiply: 0 + - _Decal1ChannelSeparationVertical: 0 + - _Decal1Depth: 0 + - _Decal1FaceMask: 0 + - _Decal1GlobalMask: 0 + - _Decal1GlobalMaskBlendType: 2 + - _Decal1HueAngleStrength: 0 + - _Decal1MaskChannel: 1 + - _Decal1OnlyVideo: 0 + - _Decal1OverrideAlphaMode: 0 + - _Decal1TPSMaskStrength: 1 + - _Decal1UseDecalAlpha: 0 + - _Decal1VideoAspectFix: 0 + - _Decal1VideoEmissionStrength: 0 + - _Decal1VideoEnabled: 0 + - _Decal1VideoFitToScale: 1 + - _Decal2ApplyGlobalMaskBlendType: 0 + - _Decal2ApplyGlobalMaskIndex: 0 + - _Decal2ChannelSeparation: 0 + - _Decal2ChannelSeparationAngleStrength: 0 + - _Decal2ChannelSeparationEnable: 0 + - _Decal2ChannelSeparationHue: 0 + - _Decal2ChannelSeparationPremultiply: 0 + - _Decal2ChannelSeparationVertical: 0 + - _Decal2Depth: 0 + - _Decal2FaceMask: 0 + - _Decal2GlobalMask: 0 + - _Decal2GlobalMaskBlendType: 2 + - _Decal2HueAngleStrength: 0 + - _Decal2MaskChannel: 2 + - _Decal2OnlyVideo: 0 + - _Decal2OverrideAlphaMode: 0 + - _Decal2TPSMaskStrength: 1 + - _Decal2UseDecalAlpha: 0 + - _Decal2VideoAspectFix: 0 + - _Decal2VideoEmissionStrength: 0 + - _Decal2VideoEnabled: 0 + - _Decal2VideoFitToScale: 1 + - _Decal3ApplyGlobalMaskBlendType: 0 + - _Decal3ApplyGlobalMaskIndex: 0 + - _Decal3ChannelSeparation: 0 + - _Decal3ChannelSeparationAngleStrength: 0 + - _Decal3ChannelSeparationEnable: 0 + - _Decal3ChannelSeparationHue: 0 + - _Decal3ChannelSeparationPremultiply: 0 + - _Decal3ChannelSeparationVertical: 0 + - _Decal3Depth: 0 + - _Decal3FaceMask: 0 + - _Decal3GlobalMask: 0 + - _Decal3GlobalMaskBlendType: 2 + - _Decal3HueAngleStrength: 0 + - _Decal3MaskChannel: 3 + - _Decal3OnlyVideo: 0 + - _Decal3OverrideAlphaMode: 0 + - _Decal3TPSMaskStrength: 1 + - _Decal3UseDecalAlpha: 0 + - _Decal3VideoAspectFix: 0 + - _Decal3VideoEmissionStrength: 0 + - _Decal3VideoEnabled: 0 + - _Decal3VideoFitToScale: 1 + - _DecalBlendAlpha: 1 + - _DecalBlendAlpha1: 1 + - _DecalBlendAlpha2: 1 + - _DecalBlendAlpha3: 1 + - _DecalBlendType: 0 + - _DecalBlendType1: 0 + - _DecalBlendType2: 0 + - _DecalBlendType3: 0 + - _DecalColor1ThemeIndex: 0 + - _DecalColor2ThemeIndex: 0 + - _DecalColor3ThemeIndex: 0 + - _DecalColorThemeIndex: 0 + - _DecalEmissionStrength: 0 + - _DecalEmissionStrength1: 0 + - _DecalEmissionStrength2: 0 + - _DecalEmissionStrength3: 0 + - _DecalEnabled: 0 + - _DecalEnabled1: 0 + - _DecalEnabled2: 0 + - _DecalEnabled3: 0 + - _DecalHueShift: 0 + - _DecalHueShift1: 0 + - _DecalHueShift2: 0 + - _DecalHueShift3: 0 + - _DecalHueShiftColorSpace: 0 + - _DecalHueShiftColorSpace1: 0 + - _DecalHueShiftColorSpace2: 0 + - _DecalHueShiftColorSpace3: 0 + - _DecalHueShiftEnabled: 0 + - _DecalHueShiftEnabled1: 0 + - _DecalHueShiftEnabled2: 0 + - _DecalHueShiftEnabled3: 0 + - _DecalHueShiftSelectOrShift: 1 + - _DecalHueShiftSelectOrShift1: 1 + - _DecalHueShiftSelectOrShift2: 1 + - _DecalHueShiftSelectOrShift3: 1 + - _DecalHueShiftSpeed: 0 + - _DecalHueShiftSpeed1: 0 + - _DecalHueShiftSpeed2: 0 + - _DecalHueShiftSpeed3: 0 + - _DecalMaskUV: 0 + - _DecalMirroredUVMode: 0 + - _DecalMirroredUVMode1: 0 + - _DecalMirroredUVMode2: 0 + - _DecalMirroredUVMode3: 0 + - _DecalOverrideAlpha: 0 + - _DecalOverrideAlpha1: 0 + - _DecalOverrideAlpha2: 0 + - _DecalOverrideAlpha3: 0 + - _DecalRotation: 0 + - _DecalRotation1: 0 + - _DecalRotation2: 0 + - _DecalRotation3: 0 + - _DecalRotationCTALBand0: 0 + - _DecalRotationCTALBand1: 0 + - _DecalRotationCTALBand2: 0 + - _DecalRotationCTALBand3: 0 + - _DecalRotationCTALSpeed0: 0 + - _DecalRotationCTALSpeed1: 0 + - _DecalRotationCTALSpeed2: 0 + - _DecalRotationCTALSpeed3: 0 + - _DecalRotationCTALType0: 0 + - _DecalRotationCTALType1: 0 + - _DecalRotationCTALType2: 0 + - _DecalRotationCTALType3: 0 + - _DecalRotationSpeed: 0 + - _DecalRotationSpeed1: 0 + - _DecalRotationSpeed2: 0 + - _DecalRotationSpeed3: 0 + - _DecalSymmetryMode: 0 + - _DecalSymmetryMode1: 0 + - _DecalSymmetryMode2: 0 + - _DecalSymmetryMode3: 0 + - _DecalTPSDepthMaskEnabled: 0 + - _DecalTexture1UV: 0 + - _DecalTexture2UV: 0 + - _DecalTexture3UV: 0 + - _DecalTextureUV: 0 + - _DecalTiled: 0 + - _DecalTiled1: 0 + - _DecalTiled2: 0 + - _DecalTiled3: 0 + - _DepthAlphaMaxDepth: 1 + - _DepthAlphaMaxValue: 0 + - _DepthAlphaMinDepth: 0 + - _DepthAlphaMinValue: 1 + - _DepthAlphaToggle: 0 + - _DepthBulgeFadeLength: 0.02 + - _DepthBulgeHeight: 0.02 + - _DepthBulgeMaskChannel: 0 + - _DepthBulgeMaskUV: 0 + - _DepthBulgeWarning: 0 + - _DepthColorBlendMode: 0 + - _DepthColorMaxDepth: 1 + - _DepthColorMaxValue: 0 + - _DepthColorMinDepth: 0 + - _DepthColorMinValue: 1 + - _DepthColorThemeIndex: 0 + - _DepthColorToggle: 0 + - _DepthEmissionStrength: 0 + - _DepthFXWarning: 0 + - _DepthMaskChannel: 0 + - _DepthMaskGlobalMask: 0 + - _DepthMaskGlobalMaskBlendType: 2 + - _DepthMaskUV: 0 + - _DepthRimAdd: 0 + - _DepthRimAdditiveLighting: 0 + - _DepthRimBrightness: 1 + - _DepthRimColorThemeIndex: 0 + - _DepthRimEmission: 0 + - _DepthRimHideInShadow: 0 + - _DepthRimMixBaseColor: 0 + - _DepthRimMixLightColor: 0 + - _DepthRimMultiply: 0 + - _DepthRimNormalToUse: 1 + - _DepthRimReplace: 0 + - _DepthRimSharpness: 0.2 + - _DepthRimType: 0 + - _DepthRimWidth: 0.2 + - _DepthTextureUV: 0 + - _DetailBrightness: 1 + - _DetailEnabled: 0 + - _DetailMaskStochastic: 0 + - _DetailMaskUV: 0 + - _DetailNormalGlobalMask: 0 + - _DetailNormalGlobalMaskBlendType: 2 + - _DetailNormalMapScale: 1 + - _DetailNormalMapStochastic: 0 + - _DetailNormalMapUV: 0 + - _DetailTexGlobalMask: 0 + - _DetailTexGlobalMaskBlendType: 2 + - _DetailTexIntensity: 1 + - _DetailTexStochastic: 0 + - _DetailTexUV: 0 + - _DetailTintThemeIndex: 0 + - _DisableDirectionalInAdd: 1 + - _DissolveAlpha: 0 + - _DissolveAlpha0: 0 + - _DissolveAlpha1: 0 + - _DissolveAlpha2: 0 + - _DissolveAlpha3: 0 + - _DissolveAlpha4: 0 + - _DissolveAlpha5: 0 + - _DissolveAlpha6: 0 + - _DissolveAlpha7: 0 + - _DissolveAlpha8: 0 + - _DissolveAlpha9: 0 + - _DissolveApplyGlobalMaskBlendType: 0 + - _DissolveApplyGlobalMaskIndex: 0 + - _DissolveDetailEdgeSmoothing: 0 + - _DissolveDetailNoiseUV: 0 + - _DissolveDetailStrength: 0.1 + - _DissolveEdgeColorThemeIndex: 0 + - _DissolveEdgeEmission: 0 + - _DissolveEdgeHardness: 0.5 + - _DissolveEdgeHueSelectOrShift: 1 + - _DissolveEdgeHueShift: 0 + - _DissolveEdgeHueShiftColorSpace: 0 + - _DissolveEdgeHueShiftEnabled: 0 + - _DissolveEdgeHueShiftSpeed: 0 + - _DissolveEdgeWidth: 0.025 + - _DissolveHueSelectOrShift: 1 + - _DissolveHueShift: 0 + - _DissolveHueShiftColorSpace: 0 + - _DissolveHueShiftEnabled: 0 + - _DissolveHueShiftSpeed: 0 + - _DissolveInverseApplyGlobalMaskBlendType: 0 + - _DissolveInverseApplyGlobalMaskIndex: 0 + - _DissolveInvertDetailNoise: 0 + - _DissolveInvertNoise: 0 + - _DissolveMaskGlobalMask: 0 + - _DissolveMaskGlobalMaskBlendType: 2 + - _DissolveMaskInvert: 0 + - _DissolveMaskUV: 0 + - _DissolveNoiseTextureUV: 0 + - _DissolveP2PClamp: 0 + - _DissolveP2PEdgeLength: 0.1 + - _DissolveP2PWorldLocal: 0 + - _DissolveTextureColorThemeIndex: 0 + - _DissolveToEmissionStrength: 0 + - _DissolveToTextureUV: 0 + - _DissolveType: 1 + - _DissolveUseVertexColors: 0 + - _DistortionFlowTexture1UV: 0 + - _DistortionFlowTextureUV: 0 + - _DistortionMaskChannel: 0 + - _DistortionMaskUV: 0 + - _DistortionStrength: 0.03 + - _DistortionStrength1: 0.01 + - _DistortionStrength1AudioLinkBand: 0 + - _DistortionStrengthAudioLinkBand: 0 + - _DistortionUvToDistort: 0 + - _DstBlend: 10 + - _DstBlendAlpha: 1 + - _EmissionAL0Enabled: 0 + - _EmissionAL0MultipliersBand: 0 + - _EmissionAL0StrengthBand: 0 + - _EmissionAL1Enabled: 0 + - _EmissionAL1MultipliersBand: 0 + - _EmissionAL1StrengthBand: 0 + - _EmissionAL2Enabled: 0 + - _EmissionAL2MultipliersBand: 0 + - _EmissionAL2StrengthBand: 0 + - _EmissionAL3Enabled: 0 + - _EmissionAL3MultipliersBand: 0 + - _EmissionAL3StrengthBand: 0 + - _EmissionBaseColorAsMap: 0 + - _EmissionBaseColorAsMap1: 0 + - _EmissionBaseColorAsMap2: 0 + - _EmissionBaseColorAsMap3: 0 + - _EmissionBlinkingEnabled: 0 + - _EmissionBlinkingEnabled1: 0 + - _EmissionBlinkingEnabled2: 0 + - _EmissionBlinkingEnabled3: 0 + - _EmissionBlinkingOffset: 0 + - _EmissionBlinkingOffset1: 0 + - _EmissionBlinkingOffset2: 0 + - _EmissionBlinkingOffset3: 0 + - _EmissionCenterOutEnabled: 0 + - _EmissionCenterOutEnabled1: 0 + - _EmissionCenterOutEnabled2: 0 + - _EmissionCenterOutEnabled3: 0 + - _EmissionCenterOutSpeed: 5 + - _EmissionCenterOutSpeed1: 5 + - _EmissionCenterOutSpeed2: 5 + - _EmissionCenterOutSpeed3: 5 + - _EmissionColor1ThemeIndex: 0 + - _EmissionColor2ThemeIndex: 0 + - _EmissionColor3ThemeIndex: 0 + - _EmissionColorThemeIndex: 0 + - _EmissionFluorescence: 0 + - _EmissionFluorescence1: 0 + - _EmissionFluorescence2: 0 + - _EmissionFluorescence3: 0 + - _EmissionHueSelectOrShift: 1 + - _EmissionHueSelectOrShift1: 1 + - _EmissionHueSelectOrShift2: 1 + - _EmissionHueSelectOrShift3: 1 + - _EmissionHueShift: 0 + - _EmissionHueShift1: 0 + - _EmissionHueShift2: 0 + - _EmissionHueShift3: 0 + - _EmissionHueShiftColorSpace: 0 + - _EmissionHueShiftColorSpace1: 0 + - _EmissionHueShiftColorSpace2: 0 + - _EmissionHueShiftColorSpace3: 0 + - _EmissionHueShiftEnabled: 0 + - _EmissionHueShiftEnabled1: 0 + - _EmissionHueShiftEnabled2: 0 + - _EmissionHueShiftEnabled3: 0 + - _EmissionHueShiftSpeed: 0 + - _EmissionHueShiftSpeed1: 0 + - _EmissionHueShiftSpeed2: 0 + - _EmissionHueShiftSpeed3: 0 + - _EmissionMap1UV: 0 + - _EmissionMap2UV: 0 + - _EmissionMap3UV: 0 + - _EmissionMapUV: 0 + - _EmissionMask0GlobalMask: 0 + - _EmissionMask0GlobalMaskBlendType: 2 + - _EmissionMask1Channel: 0 + - _EmissionMask1GlobalMask: 0 + - _EmissionMask1GlobalMaskBlendType: 2 + - _EmissionMask1UV: 0 + - _EmissionMask2Channel: 0 + - _EmissionMask2GlobalMask: 0 + - _EmissionMask2GlobalMaskBlendType: 2 + - _EmissionMask2UV: 0 + - _EmissionMask3Channel: 0 + - _EmissionMask3GlobalMask: 0 + - _EmissionMask3GlobalMaskBlendType: 2 + - _EmissionMask3UV: 0 + - _EmissionMaskChannel: 0 + - _EmissionMaskInvert: 0 + - _EmissionMaskInvert1: 0 + - _EmissionMaskInvert2: 0 + - _EmissionMaskInvert3: 0 + - _EmissionMaskUV: 0 + - _EmissionReplace0: 0 + - _EmissionReplace1: 0 + - _EmissionReplace2: 0 + - _EmissionReplace3: 0 + - _EmissionSaturation: 0 + - _EmissionSaturation1: 0 + - _EmissionSaturation2: 0 + - _EmissionSaturation3: 0 + - _EmissionScrollingOffset: 0 + - _EmissionScrollingOffset1: 0 + - _EmissionScrollingOffset2: 0 + - _EmissionScrollingOffset3: 0 + - _EmissionScrollingUseCurve: 0 + - _EmissionScrollingUseCurve1: 0 + - _EmissionScrollingUseCurve2: 0 + - _EmissionScrollingUseCurve3: 0 + - _EmissionScrollingVertexColor: 0 + - _EmissionScrollingVertexColor1: 0 + - _EmissionScrollingVertexColor2: 0 + - _EmissionScrollingVertexColor3: 0 + - _EmissionStrength: 0 + - _EmissionStrength1: 0 + - _EmissionStrength2: 0 + - _EmissionStrength3: 0 + - _EmissiveBlink_Max: 1 + - _EmissiveBlink_Max1: 1 + - _EmissiveBlink_Max2: 1 + - _EmissiveBlink_Max3: 1 + - _EmissiveBlink_Min: 0 + - _EmissiveBlink_Min1: 0 + - _EmissiveBlink_Min2: 0 + - _EmissiveBlink_Min3: 0 + - _EmissiveBlink_Velocity: 4 + - _EmissiveBlink_Velocity1: 4 + - _EmissiveBlink_Velocity2: 4 + - _EmissiveBlink_Velocity3: 4 + - _EmissiveScroll_Interval: 20 + - _EmissiveScroll_Interval1: 20 + - _EmissiveScroll_Interval2: 20 + - _EmissiveScroll_Interval3: 20 + - _EmissiveScroll_Velocity: 10 + - _EmissiveScroll_Velocity1: 10 + - _EmissiveScroll_Velocity2: 10 + - _EmissiveScroll_Velocity3: 10 + - _EmissiveScroll_Width: 10 + - _EmissiveScroll_Width1: 10 + - _EmissiveScroll_Width2: 10 + - _EmissiveScroll_Width3: 10 + - _EnableALDecal: 0 + - _EnableAniso: 0 + - _EnableAudioLink: 0 + - _EnableDepthBulge: 0 + - _EnableDepthRimLighting: 0 + - _EnableDissolve: 0 + - _EnableDissolveAudioLink: 0 + - _EnableDistortion: 0 + - _EnableDistortionAudioLink: 0 + - _EnableEmission: 0 + - _EnableEmission1: 0 + - _EnableEmission2: 0 + - _EnableEmission3: 0 + - _EnableEnvironmentalRim: 0 + - _EnableFlipbook: 0 + - _EnableGITDEmission: 0 + - _EnableGITDEmission1: 0 + - _EnableGITDEmission2: 0 + - _EnableGITDEmission3: 0 + - _EnableMirrorOptions: 0 + - _EnableOutlines: 0 + - _EnablePathRemapping: 0 + - _EnablePathing: 0 + - _EnableRim2Lighting: 0 + - _EnableRimLighting: 0 + - _EnableTouchGlow: 0 + - _EnableTruchet: 0 + - _EnableUDIMDiscardOptions: 0 + - _EnableUDIMFaceDiscardOptions: 0 + - _EnableVolumeColor: 0 + - _EntranceStiffness: 0.01 + - _EntryOpenDuration: 0.1 + - _FFBFOutlineStencilHelp0: 0 + - _FFBFOutlineStencilHelp1: 0 + - _FFBFStencilHelp0: 0 + - _FFBFStencilHelp1: 0 + - _FXProximityColor: 0 + - _FXProximityColorBackFace: 0 + - _FXProximityColorMaxColorThemeIndex: 0 + - _FXProximityColorMaxDistance: 1 + - _FXProximityColorMinColorThemeIndex: 0 + - _FXProximityColorMinDistance: 0 + - _FXProximityColorType: 1 + - _FlipBackfaceNormals: 1 + - _FlipbookAlphaControlsFinalAlpha: 0 + - _FlipbookBlendType: 0 + - _FlipbookChronoType: 0 + - _FlipbookChronotensityBand: 0 + - _FlipbookChronotensityEnabled: 0 + - _FlipbookChronotensitySpeed: 0 + - _FlipbookColorReplaces: 0 + - _FlipbookColorThemeIndex: 0 + - _FlipbookCrossfadeEnabled: 0 + - _FlipbookCurrentFrame: 0 + - _FlipbookEmissionStrength: 0 + - _FlipbookEndFrame: 0 + - _FlipbookFPS: 30 + - _FlipbookFrameOffset: 0 + - _FlipbookHueSelectOrShift: 1 + - _FlipbookHueShift: 0 + - _FlipbookHueShiftColorSpace: 0 + - _FlipbookHueShiftEnabled: 0 + - _FlipbookHueShiftSpeed: 0 + - _FlipbookIntensityControlsAlpha: 0 + - _FlipbookManualFrameControl: 0 + - _FlipbookMaskChannel: 0 + - _FlipbookMaskGlobalMask: 0 + - _FlipbookMaskGlobalMaskBlendType: 2 + - _FlipbookMaskUV: 0 + - _FlipbookReplace: 1 + - _FlipbookRotation: 0 + - _FlipbookRotationSpeed: 0 + - _FlipbookStartAndEnd: 0 + - _FlipbookStartFrame: 0 + - _FlipbookTexArrayUV: 0 + - _FlipbookTiled: 0 + - _FogHeightOffset: 0 + - _FogHeightScale: 1 + - _FogScale: 1 + - _FogStartOffset: 0 + - _ForceFlatRampedLightmap: 1 + - _ForgotToLockMaterial: 1 + - _GGXAnisotropics: 0 + - _GITDEMaxEmissionMultiplier: 0 + - _GITDEMaxEmissionMultiplier1: 0 + - _GITDEMaxEmissionMultiplier2: 0 + - _GITDEMaxEmissionMultiplier3: 0 + - _GITDEMaxLight: 1 + - _GITDEMaxLight1: 1 + - _GITDEMaxLight2: 1 + - _GITDEMaxLight3: 1 + - _GITDEMinEmissionMultiplier: 1 + - _GITDEMinEmissionMultiplier1: 1 + - _GITDEMinEmissionMultiplier2: 1 + - _GITDEMinEmissionMultiplier3: 1 + - _GITDEMinLight: 0 + - _GITDEMinLight1: 0 + - _GITDEMinLight2: 0 + - _GITDEMinLight3: 0 + - _GITDEWorldOrMesh: 0 + - _GITDEWorldOrMesh1: 0 + - _GITDEWorldOrMesh2: 0 + - _GITDEWorldOrMesh3: 0 + - _GSAAStrength: 0 + - _GlitterALAlphaAddBand: 0 + - _GlitterALChronoRotationSpeed: 0 + - _GlitterALChronoRotationSpeedBand: 0 + - _GlitterALChronoRotationSpeedType: 0 + - _GlitterALChronoSparkleSpeed: 0 + - _GlitterALChronoSparkleSpeedBand: 0 + - _GlitterALChronoSparkleSpeedType: 0 + - _GlitterALEnabled: 0 + - _GlitterALMaxBrightnessBand: 0 + - _GlitterALSizeAddBand: 0 + - _GlitterAngleRange: 90 + - _GlitterBias: 0.8 + - _GlitterBlendType: 0 + - _GlitterBrightness: 3 + - _GlitterCenterSize: 0.08 + - _GlitterColorMapUV: 0 + - _GlitterColorThemeIndex: 0 + - _GlitterContrast: 300 + - _GlitterEnable: 0 + - _GlitterFrequency: 300 + - _GlitterHideInShadow: 0 + - _GlitterHueSelectOrShift: 1 + - _GlitterHueShift: 0 + - _GlitterHueShiftColorSpace: 0 + - _GlitterHueShiftEnabled: 0 + - _GlitterHueShiftSpeed: 0 + - _GlitterJaggyFix: 0 + - _GlitterLayers: 2 + - _GlitterMaskChannel: 0 + - _GlitterMaskGlobalMask: 0 + - _GlitterMaskGlobalMaskBlendType: 2 + - _GlitterMaskInvert: 0 + - _GlitterMaskUV: 0 + - _GlitterMinBrightness: 0 + - _GlitterMode: 0 + - _GlitterRandomColors: 0 + - _GlitterRandomLocation: 1 + - _GlitterRandomRotation: 0 + - _GlitterRandomSize: 0 + - _GlitterScaleWithLighting: 0 + - _GlitterShape: 0 + - _GlitterSize: 0.3 + - _GlitterSpeed: 10 + - _GlitterTextureRotation: 0 + - _GlitterUV: 0 + - _GlitterUseNormals: 0 + - _GlitterUseSurfaceColor: 0 + - _GlobalMaskBackface_0: 0 + - _GlobalMaskBackface_1: 0 + - _GlobalMaskBackface_10: 0 + - _GlobalMaskBackface_11: 0 + - _GlobalMaskBackface_12: 0 + - _GlobalMaskBackface_13: 0 + - _GlobalMaskBackface_14: 0 + - _GlobalMaskBackface_15: 0 + - _GlobalMaskBackface_2: 0 + - _GlobalMaskBackface_3: 0 + - _GlobalMaskBackface_4: 0 + - _GlobalMaskBackface_5: 0 + - _GlobalMaskBackface_6: 0 + - _GlobalMaskBackface_7: 0 + - _GlobalMaskBackface_8: 0 + - _GlobalMaskBackface_9: 0 + - _GlobalMaskCamera_0: 0 + - _GlobalMaskCamera_1: 0 + - _GlobalMaskCamera_10: 0 + - _GlobalMaskCamera_11: 0 + - _GlobalMaskCamera_12: 0 + - _GlobalMaskCamera_13: 0 + - _GlobalMaskCamera_14: 0 + - _GlobalMaskCamera_15: 0 + - _GlobalMaskCamera_2: 0 + - _GlobalMaskCamera_3: 0 + - _GlobalMaskCamera_4: 0 + - _GlobalMaskCamera_5: 0 + - _GlobalMaskCamera_6: 0 + - _GlobalMaskCamera_7: 0 + - _GlobalMaskCamera_8: 0 + - _GlobalMaskCamera_9: 0 + - _GlobalMaskDistanceBlendType_0: 0 + - _GlobalMaskDistanceBlendType_1: 0 + - _GlobalMaskDistanceBlendType_10: 0 + - _GlobalMaskDistanceBlendType_11: 0 + - _GlobalMaskDistanceBlendType_12: 0 + - _GlobalMaskDistanceBlendType_13: 0 + - _GlobalMaskDistanceBlendType_14: 0 + - _GlobalMaskDistanceBlendType_15: 0 + - _GlobalMaskDistanceBlendType_2: 0 + - _GlobalMaskDistanceBlendType_3: 0 + - _GlobalMaskDistanceBlendType_4: 0 + - _GlobalMaskDistanceBlendType_5: 0 + - _GlobalMaskDistanceBlendType_6: 0 + - _GlobalMaskDistanceBlendType_7: 0 + - _GlobalMaskDistanceBlendType_8: 0 + - _GlobalMaskDistanceBlendType_9: 0 + - _GlobalMaskDistanceEnable_0: 0 + - _GlobalMaskDistanceEnable_1: 0 + - _GlobalMaskDistanceEnable_10: 0 + - _GlobalMaskDistanceEnable_11: 0 + - _GlobalMaskDistanceEnable_12: 0 + - _GlobalMaskDistanceEnable_13: 0 + - _GlobalMaskDistanceEnable_14: 0 + - _GlobalMaskDistanceEnable_15: 0 + - _GlobalMaskDistanceEnable_2: 0 + - _GlobalMaskDistanceEnable_3: 0 + - _GlobalMaskDistanceEnable_4: 0 + - _GlobalMaskDistanceEnable_5: 0 + - _GlobalMaskDistanceEnable_6: 0 + - _GlobalMaskDistanceEnable_7: 0 + - _GlobalMaskDistanceEnable_8: 0 + - _GlobalMaskDistanceEnable_9: 0 + - _GlobalMaskDistanceMaxAlpha_0: 1 + - _GlobalMaskDistanceMaxAlpha_1: 1 + - _GlobalMaskDistanceMaxAlpha_10: 1 + - _GlobalMaskDistanceMaxAlpha_11: 1 + - _GlobalMaskDistanceMaxAlpha_12: 1 + - _GlobalMaskDistanceMaxAlpha_13: 1 + - _GlobalMaskDistanceMaxAlpha_14: 1 + - _GlobalMaskDistanceMaxAlpha_15: 1 + - _GlobalMaskDistanceMaxAlpha_2: 1 + - _GlobalMaskDistanceMaxAlpha_3: 1 + - _GlobalMaskDistanceMaxAlpha_4: 1 + - _GlobalMaskDistanceMaxAlpha_5: 1 + - _GlobalMaskDistanceMaxAlpha_6: 1 + - _GlobalMaskDistanceMaxAlpha_7: 1 + - _GlobalMaskDistanceMaxAlpha_8: 1 + - _GlobalMaskDistanceMaxAlpha_9: 1 + - _GlobalMaskDistanceMax_0: 2 + - _GlobalMaskDistanceMax_1: 2 + - _GlobalMaskDistanceMax_10: 2 + - _GlobalMaskDistanceMax_11: 2 + - _GlobalMaskDistanceMax_12: 2 + - _GlobalMaskDistanceMax_13: 2 + - _GlobalMaskDistanceMax_14: 2 + - _GlobalMaskDistanceMax_15: 2 + - _GlobalMaskDistanceMax_2: 2 + - _GlobalMaskDistanceMax_3: 2 + - _GlobalMaskDistanceMax_4: 2 + - _GlobalMaskDistanceMax_5: 2 + - _GlobalMaskDistanceMax_6: 2 + - _GlobalMaskDistanceMax_7: 2 + - _GlobalMaskDistanceMax_8: 2 + - _GlobalMaskDistanceMax_9: 2 + - _GlobalMaskDistanceMinAlpha_0: 0 + - _GlobalMaskDistanceMinAlpha_1: 0 + - _GlobalMaskDistanceMinAlpha_10: 0 + - _GlobalMaskDistanceMinAlpha_11: 0 + - _GlobalMaskDistanceMinAlpha_12: 0 + - _GlobalMaskDistanceMinAlpha_13: 0 + - _GlobalMaskDistanceMinAlpha_14: 0 + - _GlobalMaskDistanceMinAlpha_15: 0 + - _GlobalMaskDistanceMinAlpha_2: 0 + - _GlobalMaskDistanceMinAlpha_3: 0 + - _GlobalMaskDistanceMinAlpha_4: 0 + - _GlobalMaskDistanceMinAlpha_5: 0 + - _GlobalMaskDistanceMinAlpha_6: 0 + - _GlobalMaskDistanceMinAlpha_7: 0 + - _GlobalMaskDistanceMinAlpha_8: 0 + - _GlobalMaskDistanceMinAlpha_9: 0 + - _GlobalMaskDistanceMin_0: 1 + - _GlobalMaskDistanceMin_1: 1 + - _GlobalMaskDistanceMin_10: 1 + - _GlobalMaskDistanceMin_11: 1 + - _GlobalMaskDistanceMin_12: 1 + - _GlobalMaskDistanceMin_13: 1 + - _GlobalMaskDistanceMin_14: 1 + - _GlobalMaskDistanceMin_15: 1 + - _GlobalMaskDistanceMin_2: 1 + - _GlobalMaskDistanceMin_3: 1 + - _GlobalMaskDistanceMin_4: 1 + - _GlobalMaskDistanceMin_5: 1 + - _GlobalMaskDistanceMin_6: 1 + - _GlobalMaskDistanceMin_7: 1 + - _GlobalMaskDistanceMin_8: 1 + - _GlobalMaskDistanceMin_9: 1 + - _GlobalMaskDistanceType_0: 1 + - _GlobalMaskDistanceType_1: 1 + - _GlobalMaskDistanceType_10: 1 + - _GlobalMaskDistanceType_11: 1 + - _GlobalMaskDistanceType_12: 1 + - _GlobalMaskDistanceType_13: 1 + - _GlobalMaskDistanceType_14: 1 + - _GlobalMaskDistanceType_15: 1 + - _GlobalMaskDistanceType_2: 1 + - _GlobalMaskDistanceType_3: 1 + - _GlobalMaskDistanceType_4: 1 + - _GlobalMaskDistanceType_5: 1 + - _GlobalMaskDistanceType_6: 1 + - _GlobalMaskDistanceType_7: 1 + - _GlobalMaskDistanceType_8: 1 + - _GlobalMaskDistanceType_9: 1 + - _GlobalMaskMirrorVisibilityMode: 1 + - _GlobalMaskMirror_0: 0 + - _GlobalMaskMirror_1: 0 + - _GlobalMaskMirror_10: 0 + - _GlobalMaskMirror_11: 0 + - _GlobalMaskMirror_12: 0 + - _GlobalMaskMirror_13: 0 + - _GlobalMaskMirror_14: 0 + - _GlobalMaskMirror_15: 0 + - _GlobalMaskMirror_2: 0 + - _GlobalMaskMirror_3: 0 + - _GlobalMaskMirror_4: 0 + - _GlobalMaskMirror_5: 0 + - _GlobalMaskMirror_6: 0 + - _GlobalMaskMirror_7: 0 + - _GlobalMaskMirror_8: 0 + - _GlobalMaskMirror_9: 0 + - _GlobalMaskModifiersBackfaceEnable: 0 + - _GlobalMaskModifiersCameraEnable: 0 + - _GlobalMaskModifiersCameraInfo: 0 + - _GlobalMaskModifiersDistanceEnable: 0 + - _GlobalMaskModifiersMirrorEnable: 0 + - _GlobalMaskOptionsEnable: 0 + - _GlobalMaskOptionsType: 0 + - _GlobalMaskSlider_0: 0 + - _GlobalMaskSlider_1: 0 + - _GlobalMaskSlider_10: 0 + - _GlobalMaskSlider_11: 0 + - _GlobalMaskSlider_12: 0 + - _GlobalMaskSlider_13: 0 + - _GlobalMaskSlider_14: 0 + - _GlobalMaskSlider_15: 0 + - _GlobalMaskSlider_2: 0 + - _GlobalMaskSlider_3: 0 + - _GlobalMaskSlider_4: 0 + - _GlobalMaskSlider_5: 0 + - _GlobalMaskSlider_6: 0 + - _GlobalMaskSlider_7: 0 + - _GlobalMaskSlider_8: 0 + - _GlobalMaskSlider_9: 0 + - _GlobalMaskTexture0Split: 0 + - _GlobalMaskTexture0UV: 0 + - _GlobalMaskTexture1Split: 0 + - _GlobalMaskTexture1UV: 0 + - _GlobalMaskTexture2Split: 0 + - _GlobalMaskTexture2UV: 0 + - _GlobalMaskTexture3Split: 0 + - _GlobalMaskTexture3UV: 0 + - _GlobalMaskTexturesEnable: 0 + - _GlobalMaskToggleOff_0: 0 + - _GlobalMaskToggleOff_1: 0 + - _GlobalMaskToggleOff_10: 0 + - _GlobalMaskToggleOff_11: 0 + - _GlobalMaskToggleOff_12: 0 + - _GlobalMaskToggleOff_13: 0 + - _GlobalMaskToggleOff_14: 0 + - _GlobalMaskToggleOff_15: 0 + - _GlobalMaskToggleOff_2: 0 + - _GlobalMaskToggleOff_3: 0 + - _GlobalMaskToggleOff_4: 0 + - _GlobalMaskToggleOff_5: 0 + - _GlobalMaskToggleOff_6: 0 + - _GlobalMaskToggleOff_7: 0 + - _GlobalMaskToggleOff_8: 0 + - _GlobalMaskToggleOff_9: 0 + - _GlobalMaskToggleOn_0: 0 + - _GlobalMaskToggleOn_1: 0 + - _GlobalMaskToggleOn_10: 0 + - _GlobalMaskToggleOn_11: 0 + - _GlobalMaskToggleOn_12: 0 + - _GlobalMaskToggleOn_13: 0 + - _GlobalMaskToggleOn_14: 0 + - _GlobalMaskToggleOn_15: 0 + - _GlobalMaskToggleOn_2: 0 + - _GlobalMaskToggleOn_3: 0 + - _GlobalMaskToggleOn_4: 0 + - _GlobalMaskToggleOn_5: 0 + - _GlobalMaskToggleOn_6: 0 + - _GlobalMaskToggleOn_7: 0 + - _GlobalMaskToggleOn_8: 0 + - _GlobalMaskToggleOn_9: 0 + - _GlobalMaskVertexColorAlpha: 0 + - _GlobalMaskVertexColorAlphaBlendType: 2 + - _GlobalMaskVertexColorBlue: 0 + - _GlobalMaskVertexColorBlueBlendType: 2 + - _GlobalMaskVertexColorGreen: 0 + - _GlobalMaskVertexColorGreenBlendType: 2 + - _GlobalMaskVertexColorLinearSpace: 1 + - _GlobalMaskVertexColorRed: 0 + - _GlobalMaskVertexColorRedBlendType: 2 + - _GlobalThemeHue0: 0 + - _GlobalThemeHue1: 0 + - _GlobalThemeHue2: 0 + - _GlobalThemeHue3: 0 + - _GlobalThemeHueSpeed0: 0 + - _GlobalThemeHueSpeed1: 0 + - _GlobalThemeHueSpeed2: 0 + - _GlobalThemeHueSpeed3: 0 + - _GlobalThemeSaturation0: 0 + - _GlobalThemeSaturation1: 0 + - _GlobalThemeSaturation2: 0 + - _GlobalThemeSaturation3: 0 + - _GlobalThemeValue0: 0 + - _GlobalThemeValue1: 0 + - _GlobalThemeValue2: 0 + - _GlobalThemeValue3: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GreenAlphaAdd: 0 + - _GreenColorThemeIndex: 0 + - _GreenTextureStochastic: 0 + - _GreenTextureUV: 0 + - _HeightMapUV: 0 + - _HeightOffset: 0 + - _HeightStepsMax: 128 + - _HeightStepsMin: 10 + - _HeightStrength: 0.005 + - _HeightmaskChannel: 0 + - _HeightmaskInvert: 0 + - _HeightmaskUV: 0 + - _HighColorThemeIndex: 0 + - _HighColor_Power: 0.2 + - _HighColor_TexUV: 0 + - _IgnoreCastedShadows: 0 + - _IgnoreFog: 0 + - _Is_BlendAddToHiColor: 0 + - _Is_LightColor_Ap_Rim2Light: 1 + - _Is_LightColor_Ap_RimLight: 1 + - _Is_LightColor_Rim2Light: 1 + - _Is_LightColor_RimLight: 1 + - _Is_NormalMapToRim2Light: 1 + - _Is_NormalMapToRimLight: 1 + - _Is_SpecularToHighColor: 0 + - _LTCGIEnabled: 0 + - _LTCGI_AnimToggle: 1 + - _LTCGI_Attribution: 0 + - _LTCGI_DiffuseColorThemeIndex: 0 + - _LTCGI_Metallic: 0 + - _LTCGI_Smoothness: 0 + - _LTCGI_SpecularColorThemeIndex: 0 + - _LTCGI_UseEO: 0 + - _LTCGI_UsePBR: 1 + - _Layer1Strength: 1 + - _Layer2Size: 0 + - _Layer2Strength: 0 + - _Length: 0 + - _LightDataAOGlobalMaskBlendTypeR: 2 + - _LightDataAOGlobalMaskR: 0 + - _LightDataAOStrengthA: 0 + - _LightDataAOStrengthB: 0 + - _LightDataAOStrengthG: 0 + - _LightDataAOStrengthR: 1 + - _LightDataDebugEnabled: 0 + - _LightDataDetailShadowGlobalMaskBlendTypeR: 2 + - _LightDataDetailShadowGlobalMaskR: 0 + - _LightDataSDFBlendY: 1 + - _LightDataSDFMapLOD: 0 + - _LightDataSDFMapUV: 0 + - _LightDataShadowMaskGlobalMaskBlendTypeR: 2 + - _LightDataShadowMaskGlobalMaskR: 0 + - _LightDirection_MaskOn: 0 + - _LightDirection_MaskOn2: 0 + - _LightingAOMapsUV: 0 + - _LightingAddDetailShadowStrengthA: 0 + - _LightingAddDetailShadowStrengthB: 0 + - _LightingAddDetailShadowStrengthG: 0 + - _LightingAddDetailShadowStrengthR: 1 + - _LightingAdditiveCastedShadows: 1 + - _LightingAdditiveEnable: 1 + - _LightingAdditiveGradientEnd: 0.5 + - _LightingAdditiveGradientStart: 0 + - _LightingAdditiveLimit: 1 + - _LightingAdditiveLimited: 1 + - _LightingAdditiveMonochromatic: 0 + - _LightingAdditivePassthrough: 0.5 + - _LightingAdditiveType: 3 + - _LightingCap: 1 + - _LightingCapEnabled: 1 + - _LightingCastedShadows: 0 + - _LightingColorMode: 0 + - _LightingDebugVisualize: 0 + - _LightingDetailShadowMapsUV: 0 + - _LightingDetailShadowStrengthA: 0 + - _LightingDetailShadowStrengthB: 0 + - _LightingDetailShadowStrengthG: 0 + - _LightingDetailShadowStrengthR: 1 + - _LightingDirectionMode: 0 + - _LightingEnableLightVolumes: 1 + - _LightingForceColorEnabled: 0 + - _LightingForcedColorThemeIndex: 0 + - _LightingGradientEnd: 0.5 + - _LightingGradientStart: 0 + - _LightingIgnoreAmbientColor: 1 + - _LightingIndirectUsesNormals: 0 + - _LightingMapMode: 0 + - _LightingMinLightBrightness: 0 + - _LightingMirrorVertexLightingEnabled: 1 + - _LightingMode: 6 + - _LightingMonochromatic: 0 + - _LightingMulitlayerNonLinear: 1 + - _LightingShadowMaskStrengthA: 0 + - _LightingShadowMaskStrengthB: 0 + - _LightingShadowMaskStrengthG: 0 + - _LightingShadowMaskStrengthR: 1 + - _LightingShadowMasksUV: 0 + - _LightingVertexLightingEnabled: 1 + - _LightingViewDirOffsetPitch: 0 + - _LightingViewDirOffsetYaw: 0 + - _LightingWrappedNormalization: 0 + - _LightingWrappedWrap: 0 + - _LineColorThemeIndex: 0 + - _LineWidth: 1 + - _LookAtAlphaAlpha: 1 + - _LookAtAlphaMaskEnabled: 0 + - _LookAtAlphaTargetUp: 0 + - _LookAtBlueAlpha: 1 + - _LookAtBlueMaskEnabled: 0 + - _LookAtBlueTargetUp: 0 + - _LookAtGreenAlpha: 1 + - _LookAtGreenMaskEnabled: 0 + - _LookAtGreenTargetUp: 0 + - _LookAtMaskUV: 0 + - _LookAtRedAlpha: 1 + - _LookAtRedMaskEnabled: 1 + - _LookAtRedTargetUp: 0 + - _LookAtVisibilityEnabled: 0 + - _LookAtVisibilityMirror: 0 + - _LookAtVisibilityMode: 1 + - _LookAtVisibilityVRCCameraDesktop: 1 + - _LookAtVisibilityVRCCameraScreenshot: 1 + - _LookAtVisibilityVRCCameraVR: 1 + - _LookAtVisibilityVRCMirrorDesktop: 1 + - _LookAtVisibilityVRCMirrorVR: 1 + - _LookAtVisibilityVRCRegular: 1 + - _MainALHueShiftBand: 0 + - _MainALHueShiftCTIndex: 0 + - _MainAlphaMaskMode: 2 + - _MainBrightness: 0 + - _MainBrightnessGlobalMask: 0 + - _MainBrightnessGlobalMaskBlendType: 2 + - _MainColorAdjustTextureUV: 0 + - _MainColorAdjustToggle: 0 + - _MainGamma: 1 + - _MainGammaGlobalMask: 0 + - _MainGammaGlobalMaskBlendType: 2 + - _MainGradationStrength: 0 + - _MainHueALCTEnabled: 0 + - _MainHueALMotionSpeed: 1 + - _MainHueGlobalMask: 0 + - _MainHueGlobalMaskBlendType: 2 + - _MainHueShift: 0 + - _MainHueShiftColorSpace: 0 + - _MainHueShiftReplace: 1 + - _MainHueShiftSelectOrShift: 1 + - _MainHueShiftSpeed: 0 + - _MainHueShiftToggle: 0 + - _MainIgnoreTexAlpha: 0 + - _MainPixelMode: 0 + - _MainSaturationGlobalMask: 0 + - _MainSaturationGlobalMaskBlendType: 2 + - _MainTexStochastic: 0 + - _MainTexUV: 0 + - _MainUseVertexColorAlpha: 0 + - _MainVertexColoring: 0 + - _MainVertexColoringEnabled: 0 + - _MainVertexColoringLinearSpace: 1 + - _Matcap0ALAlphaAddBand: 0 + - _Matcap0ALChronoPanBand: 0 + - _Matcap0ALChronoPanSpeed: 0 + - _Matcap0ALChronoPanType: 0 + - _Matcap0ALEmissionAddBand: 0 + - _Matcap0ALEnabled: 0 + - _Matcap0ALIntensityAddBand: 0 + - _Matcap0CircleMaskBlur: 0.1 + - _Matcap0CircleMaskBorder: 0.45 + - _Matcap0CircleMaskEnabled: 0 + - _Matcap0CustomNormal: 0 + - _Matcap0NormalMapScale: 1 + - _Matcap0NormalMapUV: 0 + - _Matcap1ALAlphaAddBand: 0 + - _Matcap1ALChronoPanBand: 0 + - _Matcap1ALChronoPanSpeed: 0 + - _Matcap1ALChronoPanType: 0 + - _Matcap1ALEmissionAddBand: 0 + - _Matcap1ALEnabled: 0 + - _Matcap1ALIntensityAddBand: 0 + - _Matcap1CustomNormal: 0 + - _Matcap1NormalMapScale: 1 + - _Matcap1NormalMapUV: 0 + - _Matcap2ALAlphaAddBand: 0 + - _Matcap2ALChronoPanBand: 0 + - _Matcap2ALChronoPanSpeed: 0 + - _Matcap2ALChronoPanType: 0 + - _Matcap2ALEmissionAddBand: 0 + - _Matcap2ALEnabled: 0 + - _Matcap2ALIntensityAddBand: 0 + - _Matcap2Add: 0 + - _Matcap2AddToLight: 0 + - _Matcap2AlphaOverride: 0 + - _Matcap2ApplyToAlphaBlendType: 0 + - _Matcap2ApplyToAlphaBlending: 1 + - _Matcap2ApplyToAlphaEnabled: 0 + - _Matcap2ApplyToAlphaSourceBlend: 0 + - _Matcap2BaseColorMix: 0 + - _Matcap2Border: 0.5 + - _Matcap2CircleMaskBlur: 0.1 + - _Matcap2CircleMaskBorder: 0.45 + - _Matcap2CircleMaskEnabled: 0 + - _Matcap2ColorThemeIndex: 0 + - _Matcap2CustomNormal: 0 + - _Matcap2EmissionStrength: 0 + - _Matcap2Enable: 0 + - _Matcap2HueSelectOrShift: 1 + - _Matcap2HueShift: 0 + - _Matcap2HueShiftColorSpace: 0 + - _Matcap2HueShiftEnabled: 0 + - _Matcap2HueShiftSpeed: 0 + - _Matcap2Intensity: 1 + - _Matcap2LightColorMix: 0 + - _Matcap2LightMask: 0 + - _Matcap2MaskChannel: 0 + - _Matcap2MaskGlobalMask: 0 + - _Matcap2MaskGlobalMaskBlendType: 2 + - _Matcap2MaskInvert: 0 + - _Matcap2MaskSmoothnessApply: 0 + - _Matcap2MaskSmoothnessChannel: 3 + - _Matcap2MaskUV: 0 + - _Matcap2Mixed: 0 + - _Matcap2Multiply: 0 + - _Matcap2Normal: 1 + - _Matcap2NormalMapScale: 1 + - _Matcap2NormalMapUV: 0 + - _Matcap2Replace: 0 + - _Matcap2Rotation: 0 + - _Matcap2Screen: 0 + - _Matcap2Smoothness: 1 + - _Matcap2TPSDepthEnabled: 0 + - _Matcap2TPSMaskStrength: 1 + - _Matcap2UVMode: 1 + - _Matcap2UVToBlend: 1 + - _Matcap3ALAlphaAddBand: 0 + - _Matcap3ALChronoPanBand: 0 + - _Matcap3ALChronoPanSpeed: 0 + - _Matcap3ALChronoPanType: 0 + - _Matcap3ALEmissionAddBand: 0 + - _Matcap3ALEnabled: 0 + - _Matcap3ALIntensityAddBand: 0 + - _Matcap3Add: 0 + - _Matcap3AddToLight: 0 + - _Matcap3AlphaOverride: 0 + - _Matcap3ApplyToAlphaBlendType: 0 + - _Matcap3ApplyToAlphaBlending: 1 + - _Matcap3ApplyToAlphaEnabled: 0 + - _Matcap3ApplyToAlphaSourceBlend: 0 + - _Matcap3BaseColorMix: 0 + - _Matcap3Border: 0.5 + - _Matcap3CircleMaskBlur: 0.1 + - _Matcap3CircleMaskBorder: 0.45 + - _Matcap3CircleMaskEnabled: 0 + - _Matcap3ColorThemeIndex: 0 + - _Matcap3CustomNormal: 0 + - _Matcap3EmissionStrength: 0 + - _Matcap3Enable: 0 + - _Matcap3HueSelectOrShift: 1 + - _Matcap3HueShift: 0 + - _Matcap3HueShiftColorSpace: 0 + - _Matcap3HueShiftEnabled: 0 + - _Matcap3HueShiftSpeed: 0 + - _Matcap3Intensity: 1 + - _Matcap3LightColorMix: 0 + - _Matcap3LightMask: 0 + - _Matcap3MaskChannel: 0 + - _Matcap3MaskGlobalMask: 0 + - _Matcap3MaskGlobalMaskBlendType: 2 + - _Matcap3MaskInvert: 0 + - _Matcap3MaskSmoothnessApply: 0 + - _Matcap3MaskSmoothnessChannel: 3 + - _Matcap3MaskUV: 0 + - _Matcap3Mixed: 0 + - _Matcap3Multiply: 0 + - _Matcap3Normal: 1 + - _Matcap3NormalMapScale: 1 + - _Matcap3NormalMapUV: 0 + - _Matcap3Replace: 0 + - _Matcap3Rotation: 0 + - _Matcap3Screen: 0 + - _Matcap3Smoothness: 1 + - _Matcap3TPSDepthEnabled: 0 + - _Matcap3TPSMaskStrength: 1 + - _Matcap3UVMode: 1 + - _Matcap3UVToBlend: 1 + - _Matcap4Add: 0 + - _Matcap4AddToLight: 0 + - _Matcap4AlphaOverride: 0 + - _Matcap4ApplyToAlphaBlendType: 0 + - _Matcap4ApplyToAlphaBlending: 1 + - _Matcap4ApplyToAlphaEnabled: 0 + - _Matcap4ApplyToAlphaSourceBlend: 0 + - _Matcap4BaseColorMix: 0 + - _Matcap4Border: 0.5 + - _Matcap4CircleMaskBlur: 0.1 + - _Matcap4CircleMaskBorder: 0.45 + - _Matcap4CircleMaskEnabled: 0 + - _Matcap4ColorThemeIndex: 0 + - _Matcap4EmissionStrength: 0 + - _Matcap4Enable: 0 + - _Matcap4HueSelectOrShift: 1 + - _Matcap4HueShift: 0 + - _Matcap4HueShiftColorSpace: 0 + - _Matcap4HueShiftEnabled: 0 + - _Matcap4HueShiftSpeed: 0 + - _Matcap4Intensity: 1 + - _Matcap4LightColorMix: 0 + - _Matcap4LightMask: 0 + - _Matcap4MaskChannel: 0 + - _Matcap4MaskGlobalMask: 0 + - _Matcap4MaskGlobalMaskBlendType: 2 + - _Matcap4MaskInvert: 0 + - _Matcap4MaskSmoothnessApply: 0 + - _Matcap4MaskSmoothnessChannel: 3 + - _Matcap4MaskUV: 0 + - _Matcap4Mixed: 0 + - _Matcap4Multiply: 0 + - _Matcap4Normal: 1 + - _Matcap4Replace: 0 + - _Matcap4Rotation: 0 + - _Matcap4Screen: 0 + - _Matcap4Smoothness: 1 + - _Matcap4TPSDepthEnabled: 0 + - _Matcap4TPSMaskStrength: 1 + - _Matcap4UVMode: 1 + - _Matcap4UVToBlend: 1 + - _MatcapAdd: 0 + - _MatcapAddToLight: 0 + - _MatcapAlphaOverride: 0 + - _MatcapApplyToAlphaBlendType: 0 + - _MatcapApplyToAlphaBlending: 1 + - _MatcapApplyToAlphaEnabled: 0 + - _MatcapApplyToAlphaSourceBlend: 0 + - _MatcapBaseColorMix: 0 + - _MatcapBorder: 0.5 + - _MatcapColorThemeIndex: 0 + - _MatcapEmissionStrength: 0 + - _MatcapEnable: 0 + - _MatcapHueSelectOrShift: 1 + - _MatcapHueShift: 0 + - _MatcapHueShiftColorSpace: 0 + - _MatcapHueShiftEnabled: 0 + - _MatcapHueShiftSpeed: 0 + - _MatcapIntensity: 1 + - _MatcapLightColorMix: 0 + - _MatcapLightMask: 0 + - _MatcapMaskChannel: 0 + - _MatcapMaskGlobalMask: 0 + - _MatcapMaskGlobalMaskBlendType: 2 + - _MatcapMaskInvert: 0 + - _MatcapMaskSmoothnessApply: 0 + - _MatcapMaskSmoothnessChannel: 3 + - _MatcapMaskUV: 0 + - _MatcapMixed: 0 + - _MatcapMultiply: 0 + - _MatcapNormal: 1 + - _MatcapReplace: 1 + - _MatcapRotation: 0 + - _MatcapScreen: 0 + - _MatcapSmoothness: 1 + - _MatcapTPSDepthEnabled: 0 + - _MatcapTPSMaskStrength: 1 + - _MatcapUVMode: 1 + - _MatcapUVToBlend: 1 + - _Metallic: 0 + - _Mirror: 0 + - _MirrorColorThemeIndex: 0 + - _MirrorTextureBlendType: 0 + - _MirrorTextureEnabled: 0 + - _MirrorTextureForceEnabled: 0 + - _MirrorTextureUV: 0 + - _MochieBRDF: 0 + - _MochieForceFallback: 0 + - _MochieGSAAEnabled: 1 + - _MochieLitFallback: 1 + - _MochieMetallicGlobalMask: 0 + - _MochieMetallicGlobalMaskBlendType: 2 + - _MochieMetallicMapInvert: 0 + - _MochieMetallicMapsMetallicChannel: 0 + - _MochieMetallicMapsReflectionMaskChannel: 2 + - _MochieMetallicMapsRoughnessChannel: 1 + - _MochieMetallicMapsSpecularMaskChannel: 3 + - _MochieMetallicMapsStochastic: 0 + - _MochieMetallicMapsUV: 0 + - _MochieMetallicMasksUV: 0 + - _MochieMetallicMultiplier: 1 + - _MochieReflectionMaskInvert: 0 + - _MochieReflectionStrength: 1 + - _MochieReflectionStrengthGlobalMask: 0 + - _MochieReflectionStrengthGlobalMaskBlendType: 2 + - _MochieReflectionTintThemeIndex: 0 + - _MochieRoughnessMapInvert: 0 + - _MochieRoughnessMultiplier: 1 + - _MochieRoughnessMultiplier2: 1 + - _MochieSmoothnessGlobalMask: 0 + - _MochieSmoothnessGlobalMaskBlendType: 2 + - _MochieSpecularMaskInvert: 0 + - _MochieSpecularStrength: 1 + - _MochieSpecularStrength2: 1 + - _MochieSpecularStrengthGlobalMask: 0 + - _MochieSpecularStrengthGlobalMaskBlendType: 2 + - _MochieSpecularTintThemeIndex: 0 + - _Mode: 3 + - _ModelAngleMax: 90 + - _ModelAngleMin: 45 + - _MultilayerMathBlurMapUV: 0 + - _NormalCorrect: 0 + - _NormalCorrectAmount: 0.9 + - _OcclusionStrength: 1 + - _OffsetFactor: 0 + - _OffsetUnits: 0 + - _Offset_Z: 0 + - _OrifaceEnabled: 0 + - _OrificeChannel: 0 + - _OutlineALColorEnabled: 0 + - _OutlineAlphaDistanceFade: 0 + - _OutlineAlphaDistanceFadeMax: 0 + - _OutlineAlphaDistanceFadeMaxAlpha: 1 + - _OutlineAlphaDistanceFadeMin: 0 + - _OutlineAlphaDistanceFadeMinAlpha: 0 + - _OutlineAlphaDistanceFadeType: 1 + - _OutlineBlendOp: 0 + - _OutlineBlendOpAlpha: 4 + - _OutlineClipAtZeroWidth: 1 + - _OutlineCull: 1 + - _OutlineDstBlend: 10 + - _OutlineDstBlendAlpha: 1 + - _OutlineEmission: 0 + - _OutlineExpansionMode: 1 + - _OutlineFixWidth: 0.5 + - _OutlineFixedSize: 1 + - _OutlineGamma: 1 + - _OutlineHue: 0 + - _OutlineHueOffsetSpeed: 0 + - _OutlineHueShift: 0 + - _OutlineLit: 1 + - _OutlineMaskChannel: 0 + - _OutlineMaskUV: 0 + - _OutlineOverrideAlpha: 0 + - _OutlineRimLightBlend: 0 + - _OutlineSaturation: 1 + - _OutlineShadowStrength: 0 + - _OutlineSpace: 0 + - _OutlineSrcBlend: 1 + - _OutlineSrcBlendAlpha: 1 + - _OutlineStencilBackCompareFunction: 8 + - _OutlineStencilBackFailOp: 0 + - _OutlineStencilBackPassOp: 0 + - _OutlineStencilBackZFailOp: 0 + - _OutlineStencilCompareFunction: 8 + - _OutlineStencilFailOp: 0 + - _OutlineStencilFrontCompareFunction: 8 + - _OutlineStencilFrontFailOp: 0 + - _OutlineStencilFrontPassOp: 0 + - _OutlineStencilFrontZFailOp: 0 + - _OutlineStencilPassOp: 0 + - _OutlineStencilReadMask: 255 + - _OutlineStencilRef: 0 + - _OutlineStencilType: 0 + - _OutlineStencilWriteMask: 255 + - _OutlineStencilZFailOp: 0 + - _OutlineTextureUV: 0 + - _OutlineTintMix: 0 + - _OutlineUseVertexColorNormals: 0 + - _OutlineValue: 1 + - _OutlineVertexColorMask: 0 + - _OutlineVertexColorMaskStrength: 1 + - _OutlineZOffsetChannel: 0 + - _OutlineZOffsetInvertMaskChannel: 0 + - _OutlineZOffsetMaskStrength: 1 + - _OutlineZOffsetVertexColor: 0 + - _OutlineZOffsetVertexColorStrength: 1 + - _OutlineZTest: 4 + - _OutlineZWrite: 1 + - _OutlinesMaxDistance: 1 + - _PBRNormalSelect: 1 + - _PBRSplitMaskSample: 0 + - _PBRSplitMaskStochastic: 0 + - _PPBrightness: 1 + - _PPContrast: 1 + - _PPEmissionMultiplier: 1 + - _PPFinalColorMultiplier: 1 + - _PPHDR: 0 + - _PPHelp: 0 + - _PPHue: 0 + - _PPHueShiftColorSpace: 0 + - _PPLightingAddition: 0 + - _PPLightingMultiplier: 1 + - _PPLightness: 0 + - _PPMaskChannel: 0 + - _PPMaskInvert: 0 + - _PPMaskUV: 0 + - _PPPosterization: 0 + - _PPPosterizationAmount: 4 + - _PPSaturation: 1 + - _PanoUseBothEyes: 1 + - _Parallax: 0.02 + - _ParallaxAnisotropic: 1 + - _ParallaxAnisotropyScale: 1 + - _ParallaxBinarySteps: 8 + - _ParallaxConeRatio: 1 + - _ParallaxInternalBlendMode: 0 + - _ParallaxInternalHeightFromAlpha: 0 + - _ParallaxInternalHeightmapMode: 0 + - _ParallaxInternalHueSelectOrShift: 1 + - _ParallaxInternalHueShift: 0 + - _ParallaxInternalHueShiftColorSpace: 0 + - _ParallaxInternalHueShiftEnabled: 0 + - _ParallaxInternalHueShiftPerLevel: 0 + - _ParallaxInternalHueShiftSpeed: 0 + - _ParallaxInternalIterations: 4 + - _ParallaxInternalMapMaskChannel: 0 + - _ParallaxInternalMapMaskUV: 0 + - _ParallaxInternalMaxColorThemeIndex: 0 + - _ParallaxInternalMaxDepth: 0.1 + - _ParallaxInternalMaxFade: 0.1 + - _ParallaxInternalMinColorThemeIndex: 0 + - _ParallaxInternalMinDepth: 0 + - _ParallaxInternalMinFade: 1 + - _ParallaxInternalSurfaceBlendMode: 8 + - _ParallaxMipBias: 0 + - _ParallaxRelaxedCone: 1 + - _ParallaxUV: 0 + - _PathALAutoCorrelator: 0 + - _PathALAutoCorrelatorA: 0 + - _PathALAutoCorrelatorB: 0 + - _PathALAutoCorrelatorG: 0 + - _PathALAutoCorrelatorMode: 0 + - _PathALAutoCorrelatorR: 0 + - _PathALCCA: 0 + - _PathALCCB: 0 + - _PathALCCG: 0 + - _PathALCCR: 0 + - _PathALChrono: 0 + - _PathALColorChord: 0 + - _PathALEmissionOffset: 0 + - _PathALHistory: 0 + - _PathALHistoryA: 0 + - _PathALHistoryB: 0 + - _PathALHistoryBandA: 0 + - _PathALHistoryBandB: 0 + - _PathALHistoryBandG: 0 + - _PathALHistoryBandR: 0 + - _PathALHistoryG: 0 + - _PathALHistoryMode: 0 + - _PathALHistoryR: 0 + - _PathALTimeOffset: 0 + - _PathALWidthOffset: 0 + - _PathChronoBandA: 0 + - _PathChronoBandB: 0 + - _PathChronoBandG: 0 + - _PathChronoBandR: 0 + - _PathChronoSpeedA: 0 + - _PathChronoSpeedB: 0 + - _PathChronoSpeedG: 0 + - _PathChronoSpeedR: 0 + - _PathChronoTypeA: 0 + - _PathChronoTypeB: 0 + - _PathChronoTypeG: 0 + - _PathChronoTypeR: 0 + - _PathColorAThemeIndex: 0 + - _PathColorBThemeIndex: 0 + - _PathColorGThemeIndex: 0 + - _PathColorRThemeIndex: 0 + - _PathGradientType: 0 + - _PathPointSampling: 1 + - _PathSource: 0 + - _PathSourceDirA: 0 + - _PathSourceDirB: 0 + - _PathSourceDirG: 0 + - _PathSourceDirR: 0 + - _PathSurfaceBlendMode: 0 + - _PathTypeA: 2 + - _PathTypeB: 2 + - _PathTypeG: 2 + - _PathTypeR: 2 + - _PathingColorMapUV: 0 + - _PathingMapUV: 0 + - _PathingOverrideAlpha: 0 + - _PathingUVSelect: 0 + - _PenetratorEnabled: 0 + - _PoiGSAAThreshold: 0.1 + - _PoiGSAAVariance: 0.15 + - _PoiInternalParallax: 0 + - _PoiParallax: 0 + - _PoiUTSStyleOutlineBlend: 0 + - _PolarLengthScale: 1 + - _PolarRadialScale: 1 + - _PolarSpiralPower: 0 + - _PolarUV: 0 + - _PostProcess: 0 + - _RGBAAlphaBlendType: 0 + - _RGBAAlphaEmissionStrength: 0 + - _RGBAAlphaEnable: 0 + - _RGBAAlphaMetallicInvert: 0 + - _RGBAAlphaPBRSplitMaskSample: 0 + - _RGBAAlphaPBRSplitMaskStochastic: 0 + - _RGBAAlphaPBRUV: 0 + - _RGBAAlphaSmoothnessInvert: 0 + - _RGBABlueBlendType: 0 + - _RGBABlueEmissionStrength: 0 + - _RGBABlueEnable: 0 + - _RGBABlueMetallicInvert: 0 + - _RGBABluePBRSplitMaskSample: 0 + - _RGBABluePBRSplitMaskStochastic: 0 + - _RGBABluePBRUV: 0 + - _RGBABlueSmoothnessInvert: 0 + - _RGBAGreenBlendType: 0 + - _RGBAGreenEmissionStrength: 0 + - _RGBAGreenEnable: 0 + - _RGBAGreenMetallicInvert: 0 + - _RGBAGreenPBRSplitMaskSample: 0 + - _RGBAGreenPBRSplitMaskStochastic: 0 + - _RGBAGreenPBRUV: 0 + - _RGBAGreenSmoothnessInvert: 0 + - _RGBAMetallicMapsStochastic: 0 + - _RGBAMetallicMapsUV: 0 + - _RGBAPBRAlphaEnabled: 0 + - _RGBAPBRBlueEnabled: 0 + - _RGBAPBRGreenEnabled: 0 + - _RGBAPBRRedEnabled: 0 + - _RGBARedBlendType: 0 + - _RGBARedEmissionStrength: 0 + - _RGBARedEnable: 0 + - _RGBARedMetallicInvert: 0 + - _RGBARedPBRSplitMaskSample: 0 + - _RGBARedPBRSplitMaskStochastic: 0 + - _RGBARedPBRUV: 0 + - _RGBARedSmoothnessInvert: 0 + - _RGBASmoothnessMapsStochastic: 0 + - _RGBASmoothnessMapsUV: 0 + - _RGBMaskEnabled: 0 + - _RGBMaskType: 0 + - _RGBMaskUV: 0 + - _RalivAdvancedHelp: 0 + - _RalivDPSDisableShadowCaster: 1 + - _RalivDPSDisableShadowCasterHelp: 0 + - _RalivHelp: 0 + - _ReCurvature: 0 + - _RedAlphaAdd: 0 + - _RedColorThemeIndex: 0 + - _RedTextureStochastic: 0 + - _RedTextureUV: 0 + - _RefSpecFresnelStrength: 0.5 + - _Reflectance: 0.04 + - _ReflectionAnisotropicStretch: 1 + - _ReflectionApplyTransparency: 1 + - _ReflectionBlendMode: 1 + - _ReflectionCubeEnableLighting: 1 + - _ReflectionCubeOverride: 0 + - _ReflectionNormalStrength: 1 + - _RenderingAOBlockerEnabled: 0 + - _RenderingAOBlockerFlipNormal: 0 + - _RenderingAOBlockerNote: 0 + - _RenderingAOBlockerUVChannel: 0 + - _RenderingEarlyZEnabled: 0 + - _RenderingReduceClipDistance: 0 + - _RgbAlphaGlobalMaskBlendType: 2 + - _RgbAlphaGlobalMaskChannel: 0 + - _RgbAlphaMaskChannel: 3 + - _RgbBlueGlobalMaskBlendType: 2 + - _RgbBlueGlobalMaskChannel: 0 + - _RgbBlueMaskChannel: 2 + - _RgbGreenGlobalMaskBlendType: 2 + - _RgbGreenGlobalMaskChannel: 0 + - _RgbGreenMaskChannel: 1 + - _RgbNormalAGlobalMaskBlendType: 2 + - _RgbNormalAGlobalMaskChannel: 0 + - _RgbNormalAMaskChannel: 3 + - _RgbNormalAScale: 0 + - _RgbNormalAStochastic: 0 + - _RgbNormalAUV: 0 + - _RgbNormalAlphaBlendMode: 0 + - _RgbNormalBGlobalMaskBlendType: 2 + - _RgbNormalBGlobalMaskChannel: 0 + - _RgbNormalBMaskChannel: 2 + - _RgbNormalBScale: 0 + - _RgbNormalBStochastic: 0 + - _RgbNormalBUV: 0 + - _RgbNormalBlueBlendMode: 0 + - _RgbNormalGGlobalMaskBlendType: 2 + - _RgbNormalGGlobalMaskChannel: 0 + - _RgbNormalGMaskChannel: 1 + - _RgbNormalGScale: 0 + - _RgbNormalGStochastic: 0 + - _RgbNormalGUV: 0 + - _RgbNormalGreenBlendMode: 0 + - _RgbNormalRGlobalMaskBlendType: 2 + - _RgbNormalRGlobalMaskChannel: 0 + - _RgbNormalRMaskChannel: 0 + - _RgbNormalRScale: 0 + - _RgbNormalRStochastic: 0 + - _RgbNormalRUV: 0 + - _RgbNormalRedBlendMode: 0 + - _RgbRedGlobalMaskBlendType: 2 + - _RgbRedGlobalMaskChannel: 0 + - _RgbRedMaskChannel: 0 + - _Rim2ApColorThemeIndex: 0 + - _Rim2ApplyAlpha: 0 + - _Rim2ApplyAlphaBlend: 1 + - _Rim2ApplyGlobalMaskBlendType: 2 + - _Rim2ApplyGlobalMaskIndex: 0 + - _Rim2BackfaceMask: 1 + - _Rim2BaseColorMix: 0 + - _Rim2BiasIntensity: 0 + - _Rim2BlendMode: 1 + - _Rim2BlendStrength: 1 + - _Rim2Blur: 0.65 + - _Rim2Border: 0.5 + - _Rim2Brightness: 1 + - _Rim2ColorTexUV: 0 + - _Rim2DirRange: 0 + - _Rim2DirStrength: 0 + - _Rim2EnableLighting: 1 + - _Rim2FresnelPower: 3.5 + - _Rim2GlobalMask: 0 + - _Rim2GlobalMaskBlendType: 2 + - _Rim2HueSelectOrShift: 1 + - _Rim2HueShift: 0 + - _Rim2HueShiftColorSpace: 0 + - _Rim2HueShiftEnabled: 0 + - _Rim2HueShiftSpeed: 0 + - _Rim2IndirBlur: 0.1 + - _Rim2IndirBorder: 0.5 + - _Rim2IndirRange: 0 + - _Rim2LightColorThemeIndex: 0 + - _Rim2Light_FeatherOff: 0 + - _Rim2Light_InsideMask: 0.0001 + - _Rim2Light_Power: 0.1 + - _Rim2LightingInvert: 0 + - _Rim2MainStrength: 0 + - _Rim2MaskChannel: 0 + - _Rim2MaskInvert: 0 + - _Rim2MaskOnlyMask: 0 + - _Rim2MaskUV: 0 + - _Rim2NormalStrength: 1 + - _Rim2Power: 1 + - _Rim2ShadowMask: 0.5 + - _Rim2ShadowMaskInvert: 0 + - _Rim2ShadowMaskRampType: 0 + - _Rim2ShadowMaskStrength: 1 + - _Rim2ShadowToggle: 0 + - _Rim2ShadowWidth: 0 + - _Rim2Sharpness: 0.25 + - _Rim2Strength: 0 + - _Rim2Style: 0 + - _Rim2TexUV: 0 + - _Rim2VRParallaxStrength: 1 + - _Rim2Width: 0.8 + - _RimApColorThemeIndex: 0 + - _RimApplyAlpha: 0 + - _RimApplyAlphaBlend: 1 + - _RimApplyGlobalMaskBlendType: 2 + - _RimApplyGlobalMaskIndex: 0 + - _RimBackfaceMask: 1 + - _RimBaseColorMix: 0 + - _RimBiasIntensity: 0 + - _RimBlendMode: 1 + - _RimBlendStrength: 1 + - _RimBlur: 0.65 + - _RimBorder: 0.5 + - _RimBrightness: 1 + - _RimColorTexUV: 0 + - _RimDirRange: 0 + - _RimDirStrength: 0 + - _RimEnableLighting: 1 + - _RimEnviroBlur: 0.7 + - _RimEnviroChannel: 0 + - _RimEnviroIntensity: 1 + - _RimEnviroMaskUV: 0 + - _RimEnviroMinBrightness: 0 + - _RimEnviroSharpness: 0 + - _RimEnviroWidth: 0.45 + - _RimFresnelPower: 3.5 + - _RimGlobalMask: 0 + - _RimGlobalMaskBlendType: 2 + - _RimHueSelectOrShift: 1 + - _RimHueShift: 0 + - _RimHueShiftColorSpace: 0 + - _RimHueShiftEnabled: 0 + - _RimHueShiftSpeed: 0 + - _RimIndirBlur: 0.1 + - _RimIndirBorder: 0.5 + - _RimIndirRange: 0 + - _RimLightColorThemeIndex: 0 + - _RimLight_FeatherOff: 0 + - _RimLight_InsideMask: 0.0001 + - _RimLight_Power: 0.1 + - _RimLightingInvert: 0 + - _RimMainStrength: 0 + - _RimMaskChannel: 0 + - _RimMaskInvert: 0 + - _RimMaskOnlyMask: 0 + - _RimMaskUV: 0 + - _RimNormalStrength: 1 + - _RimPoi2BlendMode: 0 + - _RimPoiBlendMode: 0 + - _RimPower: 1 + - _RimShadowMask: 0.5 + - _RimShadowMaskInvert: 0 + - _RimShadowMaskRampType: 0 + - _RimShadowMaskStrength: 1 + - _RimShadowToggle: 0 + - _RimShadowWidth: 0 + - _RimSharpness: 0.25 + - _RimStrength: 0 + - _RimStyle: 0 + - _RimTexUV: 0 + - _RimVRParallaxStrength: 1 + - _RimWidth: 0.8 + - _RoughnessAnisotropy: 1 + - _SDFBlur: 0.1 + - _SDFShadingTextureUV: 0 + - _SFExposureOcclusion: 0 + - _SSAOAlphaFade: 1 + - _SSAOAnimationToggle: 1 + - _SSAOApplyGlobalMaskBlendType: 0 + - _SSAOApplyGlobalMaskIndex: 0 + - _SSAOAsRamp: 0 + - _SSAOBias: 0.003 + - _SSAOBlendType: 2 + - _SSAOCenterImportance: 1 + - _SSAOColorMapUV: 0 + - _SSAOColorThemeIndex: 0 + - _SSAOCone: 0 + - _SSAODepthGetWarning: 0 + - _SSAOEnableColorTexture: 0 + - _SSAOEnableMaskTexture: 0 + - _SSAOEnabled: 0 + - _SSAOFalloffEnd: 8 + - _SSAOFalloffStart: 6 + - _SSAOGlobalMaskBlendType: 2 + - _SSAOGlobalMaskIndex: 0 + - _SSAOHideByRampedLightMap: 0 + - _SSAOIntensity: 1 + - _SSAOMaskChannel: 0 + - _SSAOMaskInvert: 0 + - _SSAOMaskUV: 0 + - _SSAOQuality: 2.4 + - _SSAORadius: 0.002 + - _SSAORandomScale: 0 + - _SSAOUseNormals: 0 + - _SSAOUseSurfaceColor: 0 + - _SSIgnoreCastedShadows: 0 + - _SSSBaseColorMix: 0 + - _SSSDistortion: 1 + - _SSSSpread: 5 + - _SSSStrength: 0.25 + - _SSSThicknessMapChannel: 0 + - _SSSThicknessMapUV: 0 + - _SSSThicknessMod: -1 + - _Saturation: 0 + - _ScrollingEmission: 0 + - _ScrollingEmission1: 0 + - _ScrollingEmission2: 0 + - _ScrollingEmission3: 0 + - _Set_HighColorMaskChannel: 1 + - _Set_HighColorMaskUV: 0 + - _Set_Rim2LightMaskChannel: 1 + - _Set_Rim2LightMaskUV: 0 + - _Set_RimLightMaskChannel: 1 + - _Set_RimLightMaskUV: 0 + - _ShadeColor_Step: 0 + - _ShaderOptimizerEnabled: 1 + - _ShaderUIWarning0: -0 + - _ShaderUIWarning1: -0 + - _ShadingEnabled: 1 + - _ShadingRampedLightMapApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapApplyGlobalMaskIndex: 0 + - _ShadingRampedLightMapInverseApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapInverseApplyGlobalMaskIndex: 0 + - _ShadingShadeMapBlendType: 0 + - _Shadow2ndBlur: 0.3 + - _Shadow2ndBorder: 0.5 + - _Shadow2ndColorTexUV: 0 + - _Shadow2ndReceive: 0 + - _Shadow3rdBlur: 0.1 + - _Shadow3rdBorder: 0.25 + - _Shadow3rdColorTexUV: 0 + - _Shadow3rdReceive: 0 + - _ShadowBlur: 0.1 + - _ShadowBorder: 0.5 + - _ShadowBorderMapToggle: 0 + - _ShadowBorderMaskLOD: 0 + - _ShadowBorderMaskUV: 0 + - _ShadowBorderRange: 0 + - _ShadowColorTexUV: 0 + - _ShadowEnvStrength: 0 + - _ShadowFlatBlur: 1 + - _ShadowFlatBorder: 1 + - _ShadowMainStrength: 0 + - _ShadowMaskType: 0 + - _ShadowOffset: 0 + - _ShadowPostAO: 0 + - _ShadowReceive: 0 + - _ShadowStrength: 1 + - _ShadowStrengthMaskUV: 0 + - _Shape1Depth: 0.1 + - _Shape1Duration: 0.1 + - _Shape2Depth: 0.2 + - _Shape2Duration: 0.1 + - _Shape3Depth: 0.3 + - _Shape3Duration: 0.1 + - _SkinThicknessMapInvert: 0 + - _SkinThicknessMapUV: 0 + - _SkinThicknessPower: 1 + - _Smoothness: 1 + - _SmoothnessTextureChannel: 0 + - _Specular2ndLayer: 0 + - _SpecularBlur: 0 + - _SpecularBorder: 0.5 + - _SpecularHighlights: 1 + - _SpecularNormalStrength: 1 + - _SpecularToon: 1 + - _SphericalDissolveClamp: 0 + - _SphericalDissolveInvert: 0 + - _SphericalDissolveRadius: 1.5 + - _Squeeze: 0 + - _SqueezeDist: 0 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _SssBumpBlur: 0.7 + - _SssScale: 1 + - _StencilBackCompareFunction: 8 + - _StencilBackFailOp: 0 + - _StencilBackPassOp: 0 + - _StencilBackZFailOp: 0 + - _StencilCompareFunction: 8 + - _StencilFailOp: 0 + - _StencilFrontCompareFunction: 8 + - _StencilFrontFailOp: 0 + - _StencilFrontPassOp: 0 + - _StencilFrontZFailOp: 0 + - _StencilPassOp: 0 + - _StencilReadMask: 255 + - _StencilRef: 0 + - _StencilType: 0 + - _StencilWriteMask: 255 + - _StencilZFailOp: 0 + - _StereoEnabled: 0 + - _StochasticDeliotHeitzDensity: 1 + - _StochasticHexFallOffContrast: 0.6 + - _StochasticHexFallOffPower: 7 + - _StochasticHexGridDensity: 1 + - _StochasticHexRotationStrength: 0 + - _StochasticMode: 0 + - _StylizedReflectionMode: 0 + - _StylizedSpecular: 0 + - _StylizedSpecular2Feather: 0 + - _StylizedSpecularFeather: 0 + - _StylizedSpecularIgnoreNormal: 0 + - _StylizedSpecularIgnoreShadow: 0 + - _StylizedSpecularInvertMask: 0 + - _StylizedSpecularNormalStrength: 1 + - _StylizedSpecularStrength: 1 + - _SubsurfaceScattering: 0 + - _TPSHelpbox: 0 + - _TPSPenetratorEnabled: 0 + - _TPS_AnimatedToggle: 1 + - _TPS_BezierSmoothness: 0.4 + - _TPS_BezierStart: 0 + - _TPS_BufferedDepth: 0 + - _TPS_BufferedStrength: 0 + - _TPS_Buldge: 0.3 + - _TPS_BuldgeDistance: 0.2 + - _TPS_BuldgeFalloffDistance: 0.05 + - _TPS_Channel: 0 + - _TPS_ChannelWarning: 0 + - _TPS_IdleGravity: 0 + - _TPS_IdleSkrinkLength: 1 + - _TPS_IdleSkrinkWidth: 1 + - _TPS_IsSkinnedMeshRenderer: 0 + - _TPS_PenetratorLength: 1 + - _TPS_PumpingSpeed: 1 + - _TPS_PumpingStrength: 0 + - _TPS_PumpingWidth: 0.2 + - _TPS_SmoothStart: 1 + - _TPS_Squeeze: 0.3 + - _TPS_SqueezeDistance: 0.2 + - _TextEnabled: 0 + - _TextFPSColorThemeIndex: 0 + - _TextFPSEmissionStrength: 0 + - _TextFPSEnabled: 0 + - _TextFPSRotation: 0 + - _TextFPSUV: 0 + - _TextNumericColorThemeIndex: 0 + - _TextNumericDecimalDigits: 0 + - _TextNumericEmissionStrength: 0 + - _TextNumericEnabled: 0 + - _TextNumericRotation: 0 + - _TextNumericTrimZeroes: 0 + - _TextNumericUV: 0 + - _TextNumericValue: 0 + - _TextNumericWholeDigits: 4 + - _TextPixelRange: 4 + - _TextPositionColorThemeIndex: 0 + - _TextPositionEmissionStrength: 0 + - _TextPositionEnabled: 0 + - _TextPositionRotation: 0 + - _TextPositionUV: 0 + - _TextTimeColorThemeIndex: 0 + - _TextTimeEmissionStrength: 0 + - _TextTimeEnabled: 0 + - _TextTimeRotation: 0 + - _TextTimeUV: 0 + - _ToonRampCount: 1 + - _ToonRampUVSelector: 1 + - _TruchetALAlphaBand: 0 + - _TruchetALAlphaToggle: 0 + - _TruchetALEmissionBand: 0 + - _TruchetALEmissionToggle: 0 + - _TruchetAlpha: 1 + - _TruchetBlendType: 0 + - _TruchetChronoPanBand: 0 + - _TruchetChronoPanToggle: 0 + - _TruchetChronoPanType: 0 + - _TruchetColorThemeIndex: 0 + - _TruchetDensity: 10 + - _TruchetEdgeSharpness: 1 + - _TruchetEmissionStrength: 0 + - _TruchetHideWhenNoAL: 0 + - _TruchetMaskChannel: 0 + - _TruchetMaskGlobalMask: 0 + - _TruchetMaskGlobalMaskBlendType: 2 + - _TruchetMaskIntensity: 1 + - _TruchetMaskInvert: 0 + - _TruchetMaskUV: 0 + - _TruchetOverrideAlpha: 0 + - _TruchetThiccness: 0.1 + - _TruchetUV: 0 + - _Tweak_HighColorMaskLevel: 0 + - _Tweak_LightDirection_MaskLevel: 0 + - _Tweak_LightDirection_MaskLevel2: 0 + - _Tweak_Rim2LightMaskLevel: 0 + - _Tweak_RimLightMaskLevel: 0 + - _UDIMDiscardHelpbox: 0 + - _UDIMDiscardMode: 0 + - _UDIMDiscardRow0_0: 0 + - _UDIMDiscardRow0_1: 0 + - _UDIMDiscardRow0_2: 0 + - _UDIMDiscardRow0_3: 0 + - _UDIMDiscardRow1_0: 0 + - _UDIMDiscardRow1_1: 0 + - _UDIMDiscardRow1_2: 0 + - _UDIMDiscardRow1_3: 0 + - _UDIMDiscardRow2_0: 0 + - _UDIMDiscardRow2_1: 0 + - _UDIMDiscardRow2_2: 0 + - _UDIMDiscardRow2_3: 0 + - _UDIMDiscardRow3_0: 0 + - _UDIMDiscardRow3_1: 0 + - _UDIMDiscardRow3_2: 0 + - _UDIMDiscardRow3_3: 0 + - _UDIMDiscardUV: 0 + - _UDIMFaceDiscardFace: 0 + - _UDIMFaceDiscardRow0_0: 0 + - _UDIMFaceDiscardRow0_1: 0 + - _UDIMFaceDiscardRow0_2: 0 + - _UDIMFaceDiscardRow0_3: 0 + - _UDIMFaceDiscardRow1_0: 0 + - _UDIMFaceDiscardRow1_1: 0 + - _UDIMFaceDiscardRow1_2: 0 + - _UDIMFaceDiscardRow1_3: 0 + - _UDIMFaceDiscardRow2_0: 0 + - _UDIMFaceDiscardRow2_1: 0 + - _UDIMFaceDiscardRow2_2: 0 + - _UDIMFaceDiscardRow2_3: 0 + - _UDIMFaceDiscardRow3_0: 0 + - _UDIMFaceDiscardRow3_1: 0 + - _UDIMFaceDiscardRow3_2: 0 + - _UDIMFaceDiscardRow3_3: 0 + - _UDIMFaceDiscardUV: 0 + - _UVModLocalPos0: 0 + - _UVModLocalPos1: 1 + - _UVModWorldPos0: 0 + - _UVModWorldPos1: 2 + - _UVSec: 0 + - _UVTileDissolveAlpha_Row0_0: 0 + - _UVTileDissolveAlpha_Row0_1: 0 + - _UVTileDissolveAlpha_Row0_2: 0 + - _UVTileDissolveAlpha_Row0_3: 0 + - _UVTileDissolveAlpha_Row1_0: 0 + - _UVTileDissolveAlpha_Row1_1: 0 + - _UVTileDissolveAlpha_Row1_2: 0 + - _UVTileDissolveAlpha_Row1_3: 0 + - _UVTileDissolveAlpha_Row2_0: 0 + - _UVTileDissolveAlpha_Row2_1: 0 + - _UVTileDissolveAlpha_Row2_2: 0 + - _UVTileDissolveAlpha_Row2_3: 0 + - _UVTileDissolveAlpha_Row3_0: 0 + - _UVTileDissolveAlpha_Row3_1: 0 + - _UVTileDissolveAlpha_Row3_2: 0 + - _UVTileDissolveAlpha_Row3_3: 0 + - _UVTileDissolveDiscardAtMax: 1 + - _UVTileDissolveEnabled: 0 + - _UVTileDissolveUV: 0 + - _Unlit_Intensity: 1 + - _UseLightColor: 1 + - _UseReflection: 0 + - _Use_1stAs2nd: 0 + - _Use_1stShadeMapAlpha_As_ShadowMask: 0 + - _Use_2ndShadeMapAlpha_As_ShadowMask: 0 + - _Use_BaseAs1st: 0 + - _UzumoreAmount: 0.1 + - _UzumoreBias: 0.001 + - _UzumoreCategoryToggle: 0 + - _UzumoreEnabled: 1 + - _UzumoreMaskUV: 3 + - _VertexAudioLinkEnabled: 0 + - _VertexBarrelAlpha: 0 + - _VertexBarrelHeight: 0 + - _VertexBarrelMaskChannel: 0 + - _VertexBarrelMode: 0 + - _VertexBarrelWidth: 0.2 + - _VertexBasicsMaskChannel: 0 + - _VertexGlitchDensity: 10 + - _VertexGlitchFrequency: 1 + - _VertexGlitchMapPanSpeed: 10 + - _VertexGlitchMirror: 0 + - _VertexGlitchMirrorEnable: 0 + - _VertexGlitchStrength: 1 + - _VertexGlitchThreshold: 1 + - _VertexGlitchingAudioLinkBand: 0 + - _VertexGlitchingAudioLinkEnabled: 0 + - _VertexGlitchingAudiolinkOverride: 1 + - _VertexGlitchingEnabled: 0 + - _VertexGlitchingUseTexture: 0 + - _VertexLocalRotationALBandX: 0 + - _VertexLocalRotationALBandY: 0 + - _VertexLocalRotationALBandZ: 0 + - _VertexLocalRotationCTALBandX: 0 + - _VertexLocalRotationCTALBandY: 0 + - _VertexLocalRotationCTALBandZ: 0 + - _VertexLocalRotationCTALTypeX: 0 + - _VertexLocalRotationCTALTypeY: 0 + - _VertexLocalRotationCTALTypeZ: 0 + - _VertexLocalScaleALBand: 0 + - _VertexLocalTranslationALBand: 0 + - _VertexLookAtAudioLinkBand: 0 + - _VertexLookAtAudioLinkEnabled: 0 + - _VertexLookAtEnabled: 0 + - _VertexManipulationHeight: 0 + - _VertexManipulationHeightBand: 0 + - _VertexManipulationHeightBias: 0 + - _VertexManipulationHeightMapChannel: 0 + - _VertexManipulationHeightMaskChannel: 0 + - _VertexManipulationHeightMaskUV: 0 + - _VertexManipulationsEnabled: 0 + - _VertexRoundingDivision: 0.02 + - _VertexRoundingEnabled: 0 + - _VertexRoundingMaskChannel: 0 + - _VertexRoundingRangeBand: 0 + - _VertexRoundingSpace: 0 + - _VertexSpectrumMotion: 0 + - _VertexSpectrumUV: 0 + - _VertexSpectrumUVDirection: 0 + - _VertexSphereAlpha: 0 + - _VertexSphereHeight: 1 + - _VertexSphereMaskChannel: 0 + - _VertexSphereMode: 0 + - _VertexSphereRadius: 1 + - _VertexTornadoBaseHeight: 0 + - _VertexTornadoFunnelShape: 1 + - _VertexTornadoIntensity: 100 + - _VertexTornadoMaskChannel: 0 + - _VertexTornadoMode: 0 + - _VertexTornadoRadius: 1 + - _VertexTornadoSpeed: 5 + - _VertexTornadoTopHeight: 1 + - _VertexTornadoVerticalPull: 0 + - _VertexWindDetailAmplitude: 0.05 + - _VertexWindDetailFrequency: 5 + - _VertexWindDetailSpeed: 2.5 + - _VertexWindEnabled: 0 + - _VertexWindMaskChannel: 0 + - _VertexWindNoiseChannel: 0 + - _VertexWindNoiseScale: 10 + - _VertexWindNoiseSpeed: 0.5 + - _VertexWindNoiseStrength: 0.5 + - _VertexWindPrimaryAmplitude: 0.1 + - _VertexWindPrimaryFrequency: 1 + - _VertexWindPrimarySpeed: 1 + - _VertexWorldTranslationALBand: 0 + - _VideoBacklight: 1 + - _VideoCRTPixelEnergizedTime: 1.9 + - _VideoCRTRefreshRate: 24 + - _VideoContrast: 0 + - _VideoEffectsEnable: 0 + - _VideoEmissionEnabled: 1 + - _VideoMaskTextureChannel: 0 + - _VideoMaskTextureUV: 0 + - _VideoPixelTextureUV: 0 + - _VideoPixelateToResolution: 0 + - _VideoSaturation: 0 + - _VideoType: 3 + - _VisibilityMode: 1 + - _VisibilityVRCCameraDesktop: 1 + - _VisibilityVRCCameraScreenshot: 1 + - _VisibilityVRCCameraVR: 1 + - _VisibilityVRCMirrorDesktop: 1 + - _VisibilityVRCMirrorVR: 1 + - _VisibilityVRCRegular: 1 + - _VoronoiAffectsMaterialAlpha: 0 + - _VoronoiBlend: 0 + - _VoronoiEnableRandomCellColor: 0 + - _VoronoiEnabled: 0 + - _VoronoiGlobalMask: 0 + - _VoronoiGlobalMaskBlendType: 2 + - _VoronoiInnerEmissionStrength: 0 + - _VoronoiMaskChannel: 0 + - _VoronoiMaskUV: 0 + - _VoronoiNoiseChannel: 0 + - _VoronoiNoiseIntensity: 0.1 + - _VoronoiNoiseUV: 0 + - _VoronoiOuterEmissionStrength: 0 + - _VoronoiPower: 0.45454544 + - _VoronoiScale: 5 + - _VoronoiSpace: 0 + - _VoronoiType: 1 + - _Wriggle: 0 + - _WriggleSpeed: 0.28 + - _ZClip: 1 + - _ZTest: 4 + - _ZWrite: 0 + - _ppHueSelectOrShift: 1 + - footer_bluesky: 0 + - footer_discord: 0 + - footer_github: 0 + - footer_patreon: 0 + - footer_twitter: 0 + - footer_website: 0 + - footer_youtube: 0 + - g_end_tps_bezier: 0 + - g_end_tps_buldge: 0 + - g_end_tps_idle: 0 + - g_end_tps_pulsing: 0 + - g_end_tps_squeeze: 0 + - g_start_tps_bezier: 0 + - g_start_tps_buldge: 0 + - g_start_tps_idle: 0 + - g_start_tps_pulsing: 0 + - g_start_tps_squeeze: 0 + - m_AudioLinkCategory: 0 + - m_OutlineCategory: 0 + - m_end_ALDecalSpectrum: 0 + - m_end_ALVolumeColor: 0 + - m_end_Alpha: 0 + - m_end_Ansio: 0 + - m_end_BeatsaberBloomFog: 0 + - m_end_BeatsaberOptions: 0 + - m_end_BlackLightMasking: 0 + - m_end_BonusSliders: 0 + - m_end_CRT: 0 + - m_end_CenterOutDissolve: 0 + - m_end_ColorAdjust: 0 + - m_end_CubeMap: 0 + - m_end_Decal0: 0 + - m_end_Decal0AudioLink: 0 + - m_end_Decal1: 0 + - m_end_Decal1AudioLink: 0 + - m_end_Decal2: 0 + - m_end_Decal2AudioLink: 0 + - m_end_Decal3: 0 + - m_end_Decal3AudioLink: 0 + - m_end_DecalSection: 0 + - m_end_DepthBulge: 0 + - m_end_DetailOptions: 0 + - m_end_DistortionAudioLink: 0 + - m_end_FXProximityColor: 0 + - m_end_FlipbookAudioLink: 0 + - m_end_Gameboy: 0 + - m_end_GlobalMask: 0 + - m_end_GlobalMaskDistanceM_0: 0 + - m_end_GlobalMaskDistanceM_1: 0 + - m_end_GlobalMaskDistanceM_10: 0 + - m_end_GlobalMaskDistanceM_11: 0 + - m_end_GlobalMaskDistanceM_12: 0 + - m_end_GlobalMaskDistanceM_13: 0 + - m_end_GlobalMaskDistanceM_14: 0 + - m_end_GlobalMaskDistanceM_15: 0 + - m_end_GlobalMaskDistanceM_2: 0 + - m_end_GlobalMaskDistanceM_3: 0 + - m_end_GlobalMaskDistanceM_4: 0 + - m_end_GlobalMaskDistanceM_5: 0 + - m_end_GlobalMaskDistanceM_6: 0 + - m_end_GlobalMaskDistanceM_7: 0 + - m_end_GlobalMaskDistanceM_8: 0 + - m_end_GlobalMaskDistanceM_9: 0 + - m_end_GlobalMaskModifiers: 0 + - m_end_GlobalMaskModifiersBackface: 0 + - m_end_GlobalMaskModifiersCamera: 0 + - m_end_GlobalMaskModifiersDistance: 0 + - m_end_GlobalMaskModifiersMirror: 0 + - m_end_GlobalMaskOptions: 0 + - m_end_GlobalMaskTextures: 0 + - m_end_GlobalMaskVertexColors: 0 + - m_end_GlobalThemeColor0: 0 + - m_end_GlobalThemeColor1: 0 + - m_end_GlobalThemeColor2: 0 + - m_end_GlobalThemeColor3: 0 + - m_end_GlobalThemes: 0 + - m_end_LTCGI: 0 + - m_end_MainVertexColors: 0 + - m_end_Matcap2: 0 + - m_end_Matcap3: 0 + - m_end_Matcap4: 0 + - m_end_OutlineAudioLink: 0 + - m_end_OutlineStencil: 0 + - m_end_OutlineStencilPassBackOptions: 0 + - m_end_OutlineStencilPassFrontOptions: 0 + - m_end_PPAnimations: 0 + - m_end_PathAudioLink: 0 + - m_end_PoiGlobalCategory: 0 + - m_end_PoiLightData: 0 + - m_end_PoiPostProcessingCategory: 0 + - m_end_PoiShading: 0 + - m_end_PoiUVCategory: 0 + - m_end_RGBMask: 0 + - m_end_Rim2AudioLink: 0 + - m_end_RimAudioLink: 0 + - m_end_SphericalDissolve: 0 + - m_end_StencilPassBackOptions: 0 + - m_end_StencilPassFrontOptions: 0 + - m_end_StencilPassOptions: 0 + - m_end_Stochastic: 0 + - m_end_Text: 0 + - m_end_TextFPS: 0 + - m_end_TextInstanceTime: 0 + - m_end_TextNumeric: 0 + - m_end_TextPosition: 0 + - m_end_TruchetAudioLink: 0 + - m_end_UVTileDissolve: 0 + - m_end_Uzumore: 0 + - m_end_VideoSettings: 0 + - m_end_VoronoiAudioLink: 0 + - m_end_WorldAOBlocker: 0 + - m_end_alphaBlending: 0 + - m_end_audioLink: 0 + - m_end_audioLinkOverrides: 0 + - m_end_backFace: 0 + - m_end_backlight: 0 + - m_end_blending: 0 + - m_end_brdf: 0 + - m_end_clearCoat: 0 + - m_end_clearcoatadvanced: 0 + - m_end_clearcoatglobalmask: 0 + - m_end_depthFX: 0 + - m_end_depthRimLightOptions: 0 + - m_end_dissolve: 0 + - m_end_dissolveHueShift: 0 + - m_end_emission1Options: 0 + - m_end_emission2Options: 0 + - m_end_emission3Options: 0 + - m_end_emissionOptions: 0 + - m_end_flipBook: 0 + - m_end_glitter: 0 + - m_end_internalparallax: 0 + - m_end_matcap: 0 + - m_end_mirrorOptions: 0 + - m_end_normalCorrect: 0 + - m_end_outlineAlphaBlending: 0 + - m_end_outlineBlending: 0 + - m_end_parallax: 0 + - m_end_pathing: 0 + - m_end_pen_autoConfig: 0 + - m_end_poiSSAO: 0 + - m_end_pointToPoint: 0 + - m_end_postprocess: 0 + - m_end_raliv: 0 + - m_end_ralivAdvanced: 0 + - m_end_ralivOriface: 0 + - m_end_ralivPenetrator: 0 + - m_end_reflectionRim: 0 + - m_end_rim1LightOptions: 0 + - m_end_rim2LightOptions: 0 + - m_end_stylizedSpec: 0 + - m_end_subsurfaceScattering: 0 + - m_end_tps_penetrator: 0 + - m_end_truchet: 0 + - m_end_udimdiscardOptions: 0 + - m_end_udimfacediscardOptions: 0 + - m_end_uvDistortion: 0 + - m_end_uvLocalWorld: 0 + - m_end_uvPanosphere: 0 + - m_end_uvPolar: 0 + - m_end_vertexGlitching: 0 + - m_end_vertexLookAt: 0 + - m_end_vertexManipulation: 0 + - m_end_videoEffects: 0 + - m_end_voronoi: 0 + - m_end_voronoiRandom: 0 + - m_lightingCategory: 1 + - m_mainCategory: 1 + - m_modifierCategory: 0 + - m_renderingCategory: 1 + - m_specialFXCategory: 0 + - m_start_ALDecalSpectrum: 0 + - m_start_ALVolumeColor: 0 + - m_start_Alpha: 0 + - m_start_Aniso: 0 + - m_start_BeatsaberBloomFog: 0 + - m_start_BeatsaberOptions: 0 + - m_start_BlackLightMasking: 0 + - m_start_BonusSliders: 0 + - m_start_CRT: 0 + - m_start_CenterOutDissolve: 0 + - m_start_ColorAdjust: 0 + - m_start_CubeMap: 0 + - m_start_Decal0: 0 + - m_start_Decal0AudioLink: 0 + - m_start_Decal1: 0 + - m_start_Decal1AudioLink: 0 + - m_start_Decal2: 0 + - m_start_Decal2AudioLink: 0 + - m_start_Decal3: 0 + - m_start_Decal3AudioLink: 0 + - m_start_DecalSection: 0 + - m_start_DepthBulge: 0 + - m_start_DetailOptions: 0 + - m_start_DistortionAudioLink: 0 + - m_start_FXProximityColor: 0 + - m_start_FlipbookAudioLink: 0 + - m_start_Gameboy: 0 + - m_start_GlobalMask: 0 + - m_start_GlobalMaskDistanceM_0: 0 + - m_start_GlobalMaskDistanceM_1: 0 + - m_start_GlobalMaskDistanceM_10: 0 + - m_start_GlobalMaskDistanceM_11: 0 + - m_start_GlobalMaskDistanceM_12: 0 + - m_start_GlobalMaskDistanceM_13: 0 + - m_start_GlobalMaskDistanceM_14: 0 + - m_start_GlobalMaskDistanceM_15: 0 + - m_start_GlobalMaskDistanceM_2: 0 + - m_start_GlobalMaskDistanceM_3: 0 + - m_start_GlobalMaskDistanceM_4: 0 + - m_start_GlobalMaskDistanceM_5: 0 + - m_start_GlobalMaskDistanceM_6: 0 + - m_start_GlobalMaskDistanceM_7: 0 + - m_start_GlobalMaskDistanceM_8: 0 + - m_start_GlobalMaskDistanceM_9: 0 + - m_start_GlobalMaskModifiers: 0 + - m_start_GlobalMaskModifiersBackface: 0 + - m_start_GlobalMaskModifiersCamera: 0 + - m_start_GlobalMaskModifiersDistance: 0 + - m_start_GlobalMaskModifiersMirror: 0 + - m_start_GlobalMaskOptions: 0 + - m_start_GlobalMaskTextures: 0 + - m_start_GlobalMaskVertexColors: 0 + - m_start_GlobalThemeColor0: 0 + - m_start_GlobalThemeColor1: 0 + - m_start_GlobalThemeColor2: 0 + - m_start_GlobalThemeColor3: 0 + - m_start_GlobalThemes: 0 + - m_start_LTCGI: 0 + - m_start_MainVertexColors: 0 + - m_start_Matcap2: 0 + - m_start_Matcap3: 0 + - m_start_Matcap4: 0 + - m_start_OutlineAudioLink: 0 + - m_start_OutlineStencil: 0 + - m_start_OutlineStencilPassBackOptions: 0 + - m_start_OutlineStencilPassFrontOptions: 0 + - m_start_PPAnimations: 0 + - m_start_PathAudioLink: 0 + - m_start_PoiGlobalCategory: 0 + - m_start_PoiLightData: 0 + - m_start_PoiPostProcessingCategory: 0 + - m_start_PoiShading: 0 + - m_start_PoiUVCategory: 0 + - m_start_RGBMask: 0 + - m_start_Rim2AudioLink: 0 + - m_start_RimAudioLink: 0 + - m_start_SphericalDissolve: 0 + - m_start_StencilPassBackOptions: 0 + - m_start_StencilPassFrontOptions: 0 + - m_start_StencilPassOptions: 0 + - m_start_Stochastic: 0 + - m_start_Text: 0 + - m_start_TextFPS: 0 + - m_start_TextInstanceTime: 0 + - m_start_TextNumeric: 0 + - m_start_TextPosition: 0 + - m_start_TruchetAudioLink: 0 + - m_start_UVTileDissolve: 0 + - m_start_Uzumore: 0 + - m_start_VideoSettings: 0 + - m_start_VoronoiAudioLink: 0 + - m_start_WorldAOBlocker: 0 + - m_start_alphaBlending: 0 + - m_start_audioLink: 0 + - m_start_audioLinkOverrides: 0 + - m_start_backFace: 0 + - m_start_backlight: 0 + - m_start_blending: 0 + - m_start_brdf: 1 + - m_start_clearCoat: 0 + - m_start_clearcoatadvanced: 0 + - m_start_clearcoatglobalmask: 0 + - m_start_depthFX: 0 + - m_start_depthRimLightOptions: 0 + - m_start_dissolve: 0 + - m_start_dissolveHueShift: 0 + - m_start_emission1Options: 0 + - m_start_emission2Options: 0 + - m_start_emission3Options: 0 + - m_start_emissionOptions: 0 + - m_start_flipBook: 0 + - m_start_glitter: 0 + - m_start_internalparallax: 0 + - m_start_matcap: 0 + - m_start_mirrorOptions: 0 + - m_start_normalCorrect: 0 + - m_start_outlineAlphaBlending: 0 + - m_start_outlineBlending: 0 + - m_start_parallax: 0 + - m_start_pathing: 0 + - m_start_pen_autoConfig: 0 + - m_start_poiSSAO: 0 + - m_start_pointToPoint: 0 + - m_start_postprocess: 0 + - m_start_raliv: 0 + - m_start_ralivAdvanced: 0 + - m_start_ralivOriface: 0 + - m_start_ralivPenetrator: 0 + - m_start_reflectionRim: 0 + - m_start_rim2LightOptions: 0 + - m_start_rimLight1Options: 0 + - m_start_stylizedSpec: 0 + - m_start_subsurfaceScattering: 0 + - m_start_tps_penetrator: 0 + - m_start_truchet: 0 + - m_start_udimdiscardOptions: 0 + - m_start_udimfacediscardOptions: 0 + - m_start_uvDistortion: 0 + - m_start_uvLocalWorld: 0 + - m_start_uvPanosphere: 0 + - m_start_uvPolar: 0 + - m_start_vertexGlitching: 0 + - m_start_vertexLookAt: 0 + - m_start_vertexManipulation: 0 + - m_start_videoEffects: 0 + - m_start_voronoi: 0 + - m_start_voronoiRandom: 0 + - m_thirdpartyCategory: 0 + - m_vertexCategory: 0 + - s_end_ALAlpha: 0 + - s_end_ALDecalAudioModsOptions: 0 + - s_end_ALDecalBand: 0 + - s_end_ALDecalColorsBlendingOptions: 0 + - s_end_ALDecalShapeClipOptions: 0 + - s_end_ALDecalVolumeOptions: 0 + - s_end_ALSpectrumMotion: 0 + - s_end_ALVertexGlitching: 0 + - s_end_ALVertexHeight: 0 + - s_end_ALVertexLookAtAL: 0 + - s_end_AlphaAdvanced: 0 + - s_end_AlphaAngular: 0 + - s_end_AlphaDistanceFade: 0 + - s_end_AlphaDithering: 0 + - s_end_AlphaFresnel: 0 + - s_end_AlphaToCoverage: 0 + - s_end_AnisoBottomLayer: 0 + - s_end_AnisoTopLayer: 1 + - s_end_AudioLinkBandOverrides: 0 + - s_end_BRDFTPSMaskGroup: 0 + - s_end_BackFaceHueShift: 0 + - s_end_BackfaceMods: 0 + - s_end_CCopt: 1 + - s_end_ClearCoatTPSMaskGroup: 0 + - s_end_ColorAdjustColorGrading: 0 + - s_end_ContinuousRotation: 0 + - s_end_CubeMapColorAdjust: 0 + - s_end_CubeMapMasking: 0 + - s_end_Decal0ChannelSeparation: 0 + - s_end_Decal0GlobalMasking: 0 + - s_end_Decal0HueShift: 0 + - s_end_Decal0Video: 0 + - s_end_Decal1ChannelSeparation: 0 + - s_end_Decal1GlobalMasking: 0 + - s_end_Decal1HueShift: 0 + - s_end_Decal1Video: 0 + - s_end_Decal2ChannelSeparation: 0 + - s_end_Decal2GlobalMasking: 0 + - s_end_Decal2HueShift: 0 + - s_end_Decal2Video: 0 + - s_end_Decal3ChannelSeparation: 0 + - s_end_Decal3GlobalMasking: 0 + - s_end_Decal3HueShift: 0 + - s_end_Decal3Video: 0 + - s_end_DecalTPSMaskGroup: 0 + - s_end_DepthAlpha: 0 + - s_end_DepthFXColorEmission: 0 + - s_end_DetailNormal: 0 + - s_end_DetailTexture: 0 + - s_end_DissolveAudioLink: 0 + - s_end_DissolvedMenu: 0 + - s_end_EdgeMenu: 0 + - s_end_EmissionAL0Add: 0 + - s_end_EmissionAL0COut: 0 + - s_end_EmissionAL0Multiply: 0 + - s_end_EmissionAL1Add: 0 + - s_end_EmissionAL1COut: 0 + - s_end_EmissionAL1Multiply: 0 + - s_end_EmissionAL2Add: 0 + - s_end_EmissionAL2COut: 0 + - s_end_EmissionAL2Multiply: 0 + - s_end_EmissionAL3Add: 0 + - s_end_EmissionAL3COut: 0 + - s_end_EmissionAL3Multiply: 0 + - s_end_EmissionBlinking0: 0 + - s_end_EmissionBlinking1: 0 + - s_end_EmissionBlinking2: 0 + - s_end_EmissionBlinking3: 0 + - s_end_EmissionCenterOut0: 0 + - s_end_EmissionCenterOut1: 0 + - s_end_EmissionCenterOut2: 0 + - s_end_EmissionCenterOut3: 0 + - s_end_EmissionHueShift0: 0 + - s_end_EmissionHueShift1: 0 + - s_end_EmissionHueShift2: 0 + - s_end_EmissionHueShift3: 0 + - s_end_EmissionLightBased0: 0 + - s_end_EmissionLightBased1: 0 + - s_end_EmissionLightBased2: 0 + - s_end_EmissionLightBased3: 0 + - s_end_FixedRimBlending: 0 + - s_end_FixedRimColor: 0 + - s_end_FixedRimShapeControl: 0 + - s_end_FlipbookCrossfade: 0 + - s_end_FlipbookHueShift: 0 + - s_end_FlipbookManualFrameControl: 0 + - s_end_FlipbookStartAndEnd: 0 + - s_end_GlitterAudioLink: 0 + - s_end_GlitterColorAndShape: 0 + - s_end_GlitterHueShiftSection: 0 + - s_end_GlitterMask: 0 + - s_end_GlitterPositionSize: 0 + - s_end_GlitterRotationSection: 0 + - s_end_GlitterSparkleControl: 0 + - s_end_GlobalMaskOptionsForceToggles: 0 + - s_end_GlobalMaskOptionsMinMaxSliders: 0 + - s_end_GlobalMaskOptionsSliders: 0 + - s_end_LightDataAddPass: 1 + - s_end_LightDataBasePass: 1 + - s_end_LightDataDebug: 0 + - s_end_LightDataSDF: 1 + - s_end_LocalRotation: 0 + - s_end_LocalTranslation: 0 + - s_end_LookAtAlphaMask: 0 + - s_end_LookAtBlueMask: 0 + - s_end_LookAtGreenMask: 0 + - s_end_LookAtRedMask: 0 + - s_end_LookAtVisibility: 0 + - s_end_MainHueShift: 0 + - s_end_MainHueShiftAL: 0 + - s_end_MainHueShiftGlobalMask: 0 + - s_end_MaskingMenu: 0 + - s_end_Matcap0AudioLink: 0 + - s_end_Matcap0Blending: 0 + - s_end_Matcap0Masking: 0 + - s_end_Matcap1AudioLink: 0 + - s_end_Matcap1Blending: 0 + - s_end_Matcap1HueShift: 0 + - s_end_Matcap1Masking: 0 + - s_end_Matcap1Normal: 0 + - s_end_Matcap1Smoothness: 0 + - s_end_Matcap2AudioLink: 0 + - s_end_Matcap2Blending: 0 + - s_end_Matcap2HueShift: 0 + - s_end_Matcap2Masking: 0 + - s_end_Matcap2Normal: 0 + - s_end_Matcap2Smoothness: 0 + - s_end_Matcap2TPSMaskGroup: 0 + - s_end_Matcap3AudioLink: 0 + - s_end_Matcap3Blending: 0 + - s_end_Matcap3HueShift: 0 + - s_end_Matcap3Masking: 0 + - s_end_Matcap3Normal: 0 + - s_end_Matcap3Smoothness: 0 + - s_end_Matcap3TPSMaskGroup: 0 + - s_end_Matcap4TPSMaskGroup: 0 + - s_end_MatcapHueShift: 0 + - s_end_MatcapNormal: 0 + - s_end_MatcapSmoothness: 0 + - s_end_MatcapTPSMaskGroup: 0 + - s_end_MirrorTexture: 0 + - s_end_MultilayerMath1stLayer: 1 + - s_end_MultilayerMath2ndLayer: 0 + - s_end_MultilayerMath3rdLayer: 0 + - s_end_MultilayerMathBorder: 1 + - s_end_MultilayerMathBorderMap: 1 + - s_end_MultilayerShadowMap: 0 + - s_end_OutlineAlphaDistanceFade: 0 + - s_end_OutlineColorAdjust: 0 + - s_end_OutlineFixedSize: 0 + - s_end_OutlineLighting: 0 + - s_end_OutlineRenderingOptions: 0 + - s_end_OutlineZOffset: 0 + - s_end_PBRSecondSpecular: 0 + - s_end_PBRSplitMaskSample: 0 + - s_end_ParallaxInternalHueShift: 0 + - s_end_ParallaxInternalLayerColoring: 0 + - s_end_ParallaxInternalLayerControls: 0 + - s_end_PathAppearance: 0 + - s_end_PathColors: 0 + - s_end_PathRemapping: 0 + - s_end_PathSourceDirections: 0 + - s_end_PathTypes: 0 + - s_end_Positioning: 0 + - s_end_RGBAlpha: 0 + - s_end_RGBBlue: 0 + - s_end_RGBGreen: 0 + - s_end_RGBRed: 0 + - s_end_RimLight0Color: 0 + - s_end_RimLight0GlobalMasking: 0 + - s_end_RimLight0HueShift: 0 + - s_end_RimLight0LightDirMask: 0 + - s_end_RimLight0ShapeControls: 0 + - s_end_RimLight1Color: 0 + - s_end_RimLight1GlobalMasking: 0 + - s_end_RimLight1HueShift: 0 + - s_end_RimLight1LightDirMask: 0 + - s_end_RimLight1ShapeControls: 0 + - s_end_RimLight2DirectionMask: 0 + - s_end_RimLightDirectionMask: 0 + - s_end_SSAOAdvanced: 0 + - s_end_SSAOColorAndMasking: 0 + - s_end_ScrollingEmission0: 0 + - s_end_ScrollingEmission1: 0 + - s_end_ScrollingEmission2: 0 + - s_end_ScrollingEmission3: 0 + - s_end_ShadingAddPass: 0 + - s_end_ShadingGlobalMask: 0 + - s_end_StylizedReflectionLilEnviroReflections: 1 + - s_end_StylizedReflectionLilSpecular: 1 + - s_end_StylizedReflectionMode0: 1 + - s_end_StylizedReflectionMode1: 1 + - s_end_StylizedSpecularAdvanced: 0 + - s_end_StylizedSpecularLayer0: 0 + - s_end_StylizedSpecularLayer1: 0 + - s_end_TimingOptions: 0 + - s_end_TransitionMenu: 0 + - s_end_UVTileDissolveRow0: 0 + - s_end_UVTileDissolveRow1: 0 + - s_end_UVTileDissolveRow2: 0 + - s_end_UVTileDissolveRow3: 0 + - s_end_VertAL: 0 + - s_end_VertexBarrelMode: 0 + - s_end_VertexColors: 0 + - s_end_VertexGlitchMirror: 0 + - s_end_VertexGlitchTexture: 0 + - s_end_VertexManipulationHeight: 0 + - s_end_VertexRoundingAL: 0 + - s_end_VertexScale: 0 + - s_end_VertexSphereMode: 0 + - s_end_VertexTornadoMode: 0 + - s_end_VertexWind: 0 + - s_end_WorldTranslation: 0 + - s_end_brdfadvanced: 0 + - s_end_decal1_position: 0 + - s_end_decal2_position: 0 + - s_end_decal3_position: 0 + - s_end_decal_position: 0 + - s_end_deliot: 0 + - s_end_fogOpt: 1 + - s_end_ggxanisotropics: 0 + - s_end_heightFogOpt: 1 + - s_end_hextile: 0 + - s_end_liltoon_rim2_lightdir: 0 + - s_end_liltoon_rim_lightdir: 0 + - s_end_matcap1ApplyToAlpha: 0 + - s_end_matcap2ApplyToAlpha: 0 + - s_end_matcap3ApplyToAlpha: 0 + - s_end_matcapApplyToAlpha: 0 + - s_end_outline_al_color: 0 + - s_end_parallaxAdvanced: 0 + - s_end_vertexRounding: 0 + - s_start_ALAlpha: 0 + - s_start_ALDecalAudioModsOptions: 1 + - s_start_ALDecalBandOptions: 1 + - s_start_ALDecalColorsBlendingOptions: 1 + - s_start_ALDecalShapeClipOptions: 1 + - s_start_ALDecalVolumeOptions: 1 + - s_start_ALSpectrumMotion: 0 + - s_start_ALVertexGlitching: 0 + - s_start_ALVertexHeight: 0 + - s_start_ALVertexLookAtAL: 0 + - s_start_AlphaAdvanced: 0 + - s_start_AlphaAngular: 0 + - s_start_AlphaDistanceFade: 0 + - s_start_AlphaDithering: 0 + - s_start_AlphaFresnel: 0 + - s_start_AlphaToCoverage: 0 + - s_start_AnisoBottomLayer: 0 + - s_start_AnisoTopLayer: 1 + - s_start_AudioLinkBandOverrides: 1 + - s_start_BRDFTPSMaskGroup: 0 + - s_start_BackFaceHueShift: 0 + - s_start_BackfaceMods: 0 + - s_start_CCopt: 1 + - s_start_ClearCoatTPSMaskGroup: 0 + - s_start_ColorAdjustColorGrading: 0 + - s_start_ContinuousRotation: 0 + - s_start_CubeMapColorAdjust: 0 + - s_start_CubeMapMasking: 1 + - s_start_Decal0ChannelSeparation: 0 + - s_start_Decal0GlobalMasking: 0 + - s_start_Decal0HueShift: 0 + - s_start_Decal0Video: 0 + - s_start_Decal1ChannelSeparation: 0 + - s_start_Decal1GlobalMasking: 0 + - s_start_Decal1HueShift: 0 + - s_start_Decal1Video: 0 + - s_start_Decal2ChannelSeparation: 0 + - s_start_Decal2GlobalMasking: 0 + - s_start_Decal2HueShift: 0 + - s_start_Decal2Video: 0 + - s_start_Decal3ChannelSeparation: 0 + - s_start_Decal3GlobalMasking: 0 + - s_start_Decal3HueShift: 0 + - s_start_Decal3Video: 0 + - s_start_DecalTPSMaskGroup: 0 + - s_start_DepthAlpha: 0 + - s_start_DepthFXColorEmission: 0 + - s_start_DetailNormal: 0 + - s_start_DetailTexture: 0 + - s_start_DissolveAudioLink: 0 + - s_start_DissolvedMenu: 0 + - s_start_EdgeMenu: 0 + - s_start_EmissionAL0Add: 0 + - s_start_EmissionAL0COut: 0 + - s_start_EmissionAL0Multiply: 0 + - s_start_EmissionAL1Add: 0 + - s_start_EmissionAL1COut: 0 + - s_start_EmissionAL1Multiply: 0 + - s_start_EmissionAL2Add: 0 + - s_start_EmissionAL2COut: 0 + - s_start_EmissionAL2Multiply: 0 + - s_start_EmissionAL3Add: 0 + - s_start_EmissionAL3COut: 0 + - s_start_EmissionAL3Multiply: 0 + - s_start_EmissionBlinking0: 0 + - s_start_EmissionBlinking1: 0 + - s_start_EmissionBlinking2: 0 + - s_start_EmissionBlinking3: 0 + - s_start_EmissionCenterOut0: 0 + - s_start_EmissionCenterOut1: 0 + - s_start_EmissionCenterOut2: 0 + - s_start_EmissionCenterOut3: 0 + - s_start_EmissionHueShift0: 0 + - s_start_EmissionHueShift1: 0 + - s_start_EmissionHueShift2: 0 + - s_start_EmissionHueShift3: 0 + - s_start_EmissionLightBased0: 0 + - s_start_EmissionLightBased1: 0 + - s_start_EmissionLightBased2: 0 + - s_start_EmissionLightBased3: 0 + - s_start_FixedRimBlending: 1 + - s_start_FixedRimColor: 1 + - s_start_FixedRimShapeControl: 1 + - s_start_FlipbookCrossfade: 0 + - s_start_FlipbookHueShift: 0 + - s_start_FlipbookManualFrameControl: 0 + - s_start_FlipbookStartAndEnd: 0 + - s_start_GlitterAudioLink: 0 + - s_start_GlitterColorAndShape: 1 + - s_start_GlitterHueShiftSection: 0 + - s_start_GlitterMask: 0 + - s_start_GlitterPositionSize: 0 + - s_start_GlitterRotationSection: 0 + - s_start_GlitterSparkleControl: 1 + - s_start_GlobalMaskOptionsForceToggles: 0 + - s_start_GlobalMaskOptionsMinMaxSliders: 0 + - s_start_GlobalMaskOptionsSliders: 0 + - s_start_LightDataAddPass: 1 + - s_start_LightDataBasePass: 1 + - s_start_LightDataDebug: 0 + - s_start_LightDataSDF: 1 + - s_start_LocalRotation: 0 + - s_start_LocalTranslation: 0 + - s_start_LookAtAlphaMask: 0 + - s_start_LookAtBlueMask: 0 + - s_start_LookAtGreenMask: 0 + - s_start_LookAtRedMask: 1 + - s_start_LookAtVisibility: 0 + - s_start_MainHueShift: 1 + - s_start_MainHueShiftAL: 0 + - s_start_MainHueShiftGlobalMask: 0 + - s_start_MaskingMenu: 0 + - s_start_Matcap0AudioLink: 0 + - s_start_Matcap0Blending: 1 + - s_start_Matcap0Masking: 1 + - s_start_Matcap1AudioLink: 0 + - s_start_Matcap1Blending: 1 + - s_start_Matcap1HueShift: 0 + - s_start_Matcap1Masking: 1 + - s_start_Matcap1Normal: 0 + - s_start_Matcap1Smoothness: 0 + - s_start_Matcap2AudioLink: 0 + - s_start_Matcap2Blending: 1 + - s_start_Matcap2HueShift: 0 + - s_start_Matcap2Masking: 1 + - s_start_Matcap2Normal: 0 + - s_start_Matcap2Smoothness: 0 + - s_start_Matcap2TPSMaskGroup: 0 + - s_start_Matcap3AudioLink: 0 + - s_start_Matcap3Blending: 1 + - s_start_Matcap3HueShift: 0 + - s_start_Matcap3Masking: 1 + - s_start_Matcap3Normal: 0 + - s_start_Matcap3Smoothness: 0 + - s_start_Matcap3TPSMaskGroup: 0 + - s_start_Matcap4TPSMaskGroup: 0 + - s_start_MatcapHueShift: 0 + - s_start_MatcapNormal: 0 + - s_start_MatcapSmoothness: 0 + - s_start_MatcapTPSMaskGroup: 0 + - s_start_MirrorTexture: 1 + - s_start_MultilayerMath1stLayer: 1 + - s_start_MultilayerMath2ndLayer: 0 + - s_start_MultilayerMath3rdLayer: 0 + - s_start_MultilayerMathBorder: 1 + - s_start_MultilayerMathBorderMap: 0 + - s_start_MultilayerShadowMap: 0 + - s_start_OutlineAlphaDistanceFade: 0 + - s_start_OutlineColorAdjust: 0 + - s_start_OutlineFixedSize: 0 + - s_start_OutlineLighting: 0 + - s_start_OutlineRenderingOptions: 0 + - s_start_OutlineZOffset: 0 + - s_start_PBRSecondSpecular: 0 + - s_start_PBRSplitMaskSample: 0 + - s_start_ParallaxInternalHueShift: 0 + - s_start_ParallaxInternalLayerColoring: 1 + - s_start_ParallaxInternalLayerControls: 1 + - s_start_PathAppearance: 1 + - s_start_PathColors: 1 + - s_start_PathRemapping: 1 + - s_start_PathSourceDirections: 1 + - s_start_PathTypes: 1 + - s_start_Positioning: 1 + - s_start_RGBAlpha: 0 + - s_start_RGBBlue: 0 + - s_start_RGBGreen: 0 + - s_start_RGBRed: 0 + - s_start_RimLight0Color: 1 + - s_start_RimLight0GlobalMasking: 0 + - s_start_RimLight0HueShift: 0 + - s_start_RimLight0LightDirMask: 0 + - s_start_RimLight0ShapeControls: 1 + - s_start_RimLight1Color: 1 + - s_start_RimLight1GlobalMasking: 0 + - s_start_RimLight1HueShift: 0 + - s_start_RimLight1LightDirMask: 0 + - s_start_RimLight1ShapeControls: 1 + - s_start_RimLight2DirectionMask: 0 + - s_start_RimLightDirectionMask: 0 + - s_start_SSAOAdvanced: 0 + - s_start_SSAOColorAndMasking: 1 + - s_start_ScrollingEmission0: 0 + - s_start_ScrollingEmission1: 0 + - s_start_ScrollingEmission2: 0 + - s_start_ScrollingEmission3: 0 + - s_start_ShadingAddPass: 0 + - s_start_ShadingGlobalMask: 0 + - s_start_StylizedReflectionLilEnviroReflections: 1 + - s_start_StylizedReflectionLilSpecular: 1 + - s_start_StylizedReflectionMode0: 1 + - s_start_StylizedReflectionMode1: 1 + - s_start_StylizedSpecularAdvanced: 0 + - s_start_StylizedSpecularLayer0: 1 + - s_start_StylizedSpecularLayer1: 1 + - s_start_TimingOptions: 1 + - s_start_TransitionMenu: 0 + - s_start_UVTileDissolveRow0: 0 + - s_start_UVTileDissolveRow1: 0 + - s_start_UVTileDissolveRow2: 0 + - s_start_UVTileDissolveRow3: 0 + - s_start_VertAL: 0 + - s_start_VertexBarrelMode: 0 + - s_start_VertexColors: 0 + - s_start_VertexGlitchMirror: 0 + - s_start_VertexGlitchTexture: 1 + - s_start_VertexManipulationHeight: 1 + - s_start_VertexScale: 0 + - s_start_VertexSphereMode: 0 + - s_start_VertexTornadoMode: 0 + - s_start_VertexWind: 0 + - s_start_WorldTranslation: 0 + - s_start_brdfadvanced: 0 + - s_start_decal1_position: 1 + - s_start_decal2_position: 1 + - s_start_decal3_position: 1 + - s_start_decal_position: 1 + - s_start_deliot: 0 + - s_start_fogOpt: 1 + - s_start_ggxanisotropics: 0 + - s_start_heightFogOpt: 1 + - s_start_hextile: 0 + - s_start_liltoon_rim2_lightdir: 0 + - s_start_liltoon_rim_lightdir: 0 + - s_start_matcap1ApplyToAlpha: 0 + - s_start_matcap2ApplyToAlpha: 0 + - s_start_matcap3ApplyToAlpha: 0 + - s_start_matcapApplyToAlpha: 0 + - s_start_outline_al_color: 0 + - s_start_parallaxAdvanced: 0 + - s_start_vertexRounding: 0 + - s_start_vertexRoundingAL: 0 + - shader_is_using_thry_editor: 0 + - shader_locale: 0 + - shader_master_label: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _1st_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALDecalVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALDecalVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _ALDecaldCircleDimensions: {r: 0, g: 1, b: 0, a: 1} + - _ALUVPosition: {r: 0.5, g: 0.5, b: 1, a: 1} + - _ALUVScale: {r: 1, g: 1, b: 1, a: 1} + - _ALVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _AlphaAudioLinkAddRange: {r: 0, g: 0, b: 0, a: 1} + - _AlphaColor: {r: 1, g: 1, b: 1, a: 1} + - _AlphaMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _AlphaTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _AngleForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _Aniso0Tint: {r: 1, g: 1, b: 1, a: 1} + - _Aniso1Tint: {r: 1, g: 1, b: 1, a: 1} + - _AnisoColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _AnisotropyMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Ap_Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Ap_RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkBandOverrideSliders: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveDetail: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission0CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission1CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission2CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission3CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookFrame: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookScale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkOutlineColorMod: {r: 0, g: 1, b: 0, a: 0} + - _AudioLinkOutlineEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineSize: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkPathEmissionAddA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkRim2BrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2EmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2WidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimWidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiInnerEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiOuterEmission: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceColor: {r: 1, g: 1, b: 1, a: 1} + - _BackFaceMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BacklightColor: {r: 0.85, g: 0.8, b: 0.7, a: 1} + - _BacklightColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _BlackLightMasking0Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking1Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking2Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking3Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlueColor: {r: 1, g: 1, b: 1, a: 1} + - _BlueTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BumpMapPan: {r: 0, g: 0, b: 0, a: 0} + - _CenterOutDissolveDirection: {r: 0, g: 0, b: 1, a: 0} + - _ClearCoatMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _ClearCoatReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _ClearCoatSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _ClothMetallicSmoothnessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapColor: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotation: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotationPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalColor: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor1: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor2: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor3: {r: 1, g: 1, b: 1, a: 1} + - _DecalMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalPosition: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition1: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition2: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition3: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalScale: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale1: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale2: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale3: {r: 1, g: 1, b: 1, a: 0} + - _DecalSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset1: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset2: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset3: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DepthColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DepthRimColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DetailMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailNormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTexPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTint: {r: 1, g: 1, b: 1, a: 1} + - _DissolveDetailNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveEdgeColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveEndPoint: {r: 0, g: 1, b: 0, a: 0} + - _DissolveMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveNoiseTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveStartPoint: {r: 0, g: -1, b: 0, a: 0} + - _DissolveTextureColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveToTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrength1AudioLink: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrengthAudioLink: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL0Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL0StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL1Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL1StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL2Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL2StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL3Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL3StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColor1: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor2: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor3: {r: 1, g: 1, b: 1, a: 1} + - _EmissionMap1Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMapPan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask1Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _EmissiveScroll_Direction: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction1: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction2: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction3: {r: 0, g: -10, b: 0, a: 0} + - _FXProximityColorMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _FXProximityColorMinColor: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookColor: {r: 1, g: 1, b: 1, a: 1} + - _FlipbookCrossfadeRange: {r: 0.75, g: 1, b: 0, a: 1} + - _FlipbookMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookPanning: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _FlipbookSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookTexArrayPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALMaxBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALSizeAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterColor: {r: 1, g: 1, b: 1, a: 1} + - _GlitterColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSize: {r: 0.1, g: 0.5, b: 0, a: 1} + - _GlitterRandomRotationSpeed: {r: 0, g: 0, b: 0, a: 0} + - _GlitterUVPanning: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskMinMaxSlider_0: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_1: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_10: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_11: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_12: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_13: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_14: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_15: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_2: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_3: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_4: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_5: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_6: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_7: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_8: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_9: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskTexture0Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalThemeColor0: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor1: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor2: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor3: {r: 1, g: 1, b: 1, a: 1} + - _GreenColor: {r: 1, g: 1, b: 1, a: 1} + - _GreenTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _HeightMapPan: {r: 0, g: 0, b: 0, a: 0} + - _HeightmaskPan: {r: 0, g: 0, b: 0, a: 0} + - _HighColor: {r: 1, g: 1, b: 1, a: 1} + - _HighColor_TexPan: {r: 0, g: 0, b: 0, a: 0} + - _LTCGI_DiffuseColor: {r: 1, g: 1, b: 1, a: 1} + - _LTCGI_SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _LightDataSDFMapPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingAOMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingDetailShadowMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingForcedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingWrappedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightngForcedDirection: {r: 0, g: 0, b: 0, a: 1} + - _LineColor: {r: 1, g: 1, b: 1, a: 1} + - _LookAtAlphaDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtAlphaMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtBlueDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtBlueMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBluePivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBlueUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtGreenDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtGreenMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtRedMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _MainColorAdjustTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MainTexPan: {r: 0, g: 0, b: 0, a: 0} + - _MatCap2ndBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap3rdBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap4thBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCapBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap3MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap4MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Pan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapColor: {r: 1, g: 1, b: 1, a: 1} + - _MatcapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapPan: {r: 0, g: 0, b: 0, a: 0} + - _MirrorColor: {r: 1, g: 1, b: 1, a: 1} + - _MirrorTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _MochieSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _MultilayerMathBlurMapPan: {r: 0, g: 0, b: 0, a: 0} + - _NormalCorrectOrigin: {r: 0, g: 0.4, b: -0.025, a: 1} + - _OutlineDropShadowOffset: {r: 1, g: 0, b: 0, a: 0} + - _OutlineMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _OutlinePersonaDirection: {r: 1, g: 0, b: 0, a: 0} + - _OutlineTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _PBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _PPMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _PPRGB: {r: 1, g: 1, b: 1, a: 1} + - _PPTint: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ParallaxInternalMapPan: {r: 0, g: 0, b: 1, a: 1} + - _ParallaxInternalMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMinColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalPanDepthSpeed: {r: 0, g: 0, b: 1, a: 1} + - _PathALAutoCorrelatorRangeA: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeB: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeG: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeR: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALHistoryRangeA: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeB: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeG: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeR: {r: 0, g: 1, b: 0, a: 1} + - _PathColorA: {r: 1, g: 1, b: 1, a: 1} + - _PathColorB: {r: 1, g: 1, b: 1, a: 1} + - _PathColorG: {r: 1, g: 1, b: 1, a: 1} + - _PathColorR: {r: 1, g: 1, b: 1, a: 1} + - _PathEmissionStrength: {r: 0, g: 0, b: 0, a: 0} + - _PathGapLengths: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathOffset: {r: 0, g: 0, b: 0, a: 0} + - _PathRemapA: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapB: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapG: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapR: {r: 0, g: 1, b: 0, a: 1} + - _PathSegments: {r: 0, g: 0, b: 0, a: 0} + - _PathSoftness: {r: 1, g: 1, b: 1, a: 1} + - _PathSpeed: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathTime: {r: -999, g: -999, b: -999, a: -999} + - _PathWidth: {r: 0.03, g: 0.03, b: 0.03, a: 0.03} + - _PathingColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PathingMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PolarCenter: {r: 0.5, g: 0.5, b: 0, a: 0} + - _RGBAAlphaPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAAlphaPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAAlphaScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBABlueScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAGreenScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBARedPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBASmoothnessMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RedColor: {r: 1, g: 1, b: 1, a: 1} + - _RedTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _ReflectionColor: {r: 1, g: 1, b: 1, a: 1} + - _ReflectionCubeColor: {r: 0, g: 0, b: 0, a: 1} + - _RgbNormalAPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalBPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalGPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalRPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2Color: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _Rim2ColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2IndirColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2ShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _Rim2TexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimColor: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _RimColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimEnviroMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimIndirColor: {r: 1, g: 1, b: 1, a: 1} + - _RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _RimMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _RimTexPan: {r: 0, g: 0, b: 0, a: 0} + - _SDFForward: {r: 0, g: 0, b: 1, a: 0} + - _SDFLeft: {r: -1, g: 0, b: 0, a: 0} + - _SDFShadingTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOColor: {r: 0, g: 0, b: 0, a: 1} + - _SSAOColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOHSV: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaxDistanceFalloff: {r: 0.01, g: 0.1, b: 1, a: 1} + - _SSSColor: {r: 1, g: 0, b: 0, a: 1} + - _SSSThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_HighColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_Rim2LightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_RimLightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowAOShift: {r: 0, g: 1, b: 0, a: 1} + - _ShadowAOShift2: {r: 0, g: 1, b: 0, a: 1} + - _ShadowBorderColor: {r: 1, g: 0, b: 0, a: 1} + - _ShadowBorderMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowColor: {r: 0.7, g: 0.75, b: 0.85, a: 1} + - _ShadowColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowStrengthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SkinThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SphericalDissolveCenter: {r: 0, g: 0, b: 0, a: 1} + - _SssColorBleedAoWeights: {r: 0.4, g: 0.15, b: 0.13, a: 0} + - _SssTransmissionAbsorption: {r: -8, g: -40, b: -64, a: 0} + - _TPS_BuldgeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorForward: {r: 0, g: 0, b: 1, a: 0} + - _TPS_PenetratorRight: {r: 1, g: 0, b: 0, a: 0} + - _TPS_PenetratorScale: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorUp: {r: 0, g: 1, b: 0, a: 0} + - _TPS_SqueezeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSScale: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericColor: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericScale: {r: 1, g: 1, b: 1, a: 1} + - _TextPositionColor: {r: 1, g: 0, b: 1, a: 1} + - _TextPositionOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionScale: {r: 1, g: 1, b: 1, a: 1} + - _TextTimeColor: {r: 1, g: 0, b: 1, a: 1} + - _TextTimeOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextTimePadding: {r: 0, g: 0, b: 0, a: 0} + - _TextTimeScale: {r: 1, g: 1, b: 1, a: 1} + - _TruchetALAlpha: {r: 0, g: 0, b: 0, a: 0} + - _TruchetALEmission: {r: 0, g: 0, b: 0, a: 0} + - _TruchetChronoPanSpeed: {r: 0, g: 0, b: 0, a: 0} + - _TruchetColor: {r: 1, g: 1, b: 1, a: 1} + - _TruchetMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _TruchetPanOffset: {r: 0, g: 0, b: 0, a: 0} + - _TruchetTexPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexBasicsMaskUVPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalRotationAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalRotationCTALSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalScaleALMax: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalScaleALMin: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexLookAtAlphaAudiolink: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationHeightAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationHeightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationLocalRotation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalRotationSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalScale: {r: 1, g: 1, b: 1, a: 1} + - _VertexManipulationLocalTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationWorldTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexRoundingRangeAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexSpectrumOffsetMax: {r: 0, g: 0.1, b: 0, a: 1} + - _VertexSpectrumOffsetMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexSphereCenter: {r: 0, g: 0, b: 0, a: 1} + - _VertexWindDetailDirection: {r: 0, g: 1, b: 0, a: 0} + - _VertexWindPrimaryDirection: {r: 1, g: 0, b: 0, a: 0} + - _VertexWorldTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexWorldTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VideoMaskTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _VideoResolution: {r: 1280, g: 720, b: 0, a: 0} + - _VoronoiGradient: {r: 0, g: 0.5, b: 0, a: 0} + - _VoronoiInnerColor: {r: 1, g: 1, b: 1, a: 1} + - _VoronoiMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiOuterColor: {r: 0, g: 0, b: 0, a: 1} + - _VoronoiRandomMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiRandomMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiSpeed: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Quiz/Materials/NoPoints/NoPointsTrophyInner.mat.meta b/Assets/Quiz/Materials/NoPoints/NoPointsTrophyInner.mat.meta new file mode 100644 index 0000000..3667337 --- /dev/null +++ b/Assets/Quiz/Materials/NoPoints/NoPointsTrophyInner.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9fa141bf96518154fb0b91e9f9d2831c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/NoPoints/NoPointsTrophyOuter.mat b/Assets/Quiz/Materials/NoPoints/NoPointsTrophyOuter.mat new file mode 100644 index 0000000..fc0e441 --- /dev/null +++ b/Assets/Quiz/Materials/NoPoints/NoPointsTrophyOuter.mat @@ -0,0 +1,3808 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: NoPointsTrophyOuter + m_Shader: {fileID: 4800000, guid: f18550d3924a5eb45b4ac80db218f3e6, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: + - BSSBLOOMFOGTYPE_HEIGHT + - MOCHIE_PBR + - VIGNETTE_MASKED + - _EMISSION + - _LIGHTINGMODE_REALISTIC + - _RIM2STYLE_POIYOMI + - _RIMSTYLE_POIYOMI + - _STOCHASTICMODE_DELIOT_HEITZ + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: + AllLockedGUIDS: 6dba0e876b8368347a4fb3f027e9b50e + OriginalKeywords: BSSBLOOMFOGTYPE_HEIGHT MOCHIE_PBR VIGNETTE_MASKED _EMISSION + _LIGHTINGMODE_REALISTIC _RIM2STYLE_POIYOMI _RIMSTYLE_POIYOMI _STOCHASTICMODE_DELIOT_HEITZ + OriginalShader: .poiyomi/Poiyomi Pro + OriginalShaderGUID: 77f45810ea400c74e929db1f8ea09c47 + RenderType: Transparent + _stripped_tex__ClothDFG: 76d65cbce584df7449699fb8406f60ea + _stripped_tex__SkinLUT: d13510bb2be49aa40a66a0101efb6a36 + _stripped_tex__ToonRamp: 61bd594533da4fc42bd46ef93ba5a4f6 + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _AnisotropyMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 2800000, guid: f24d430227105c345b2947e209705074, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMask: + m_Texture: {fileID: 2800000, guid: 465e8ef1c9b54a24c8d069d3349868f8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionScrollingCurve: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightDataSDFMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingAOMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingDetailShadowMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MochieMetallicMaps: + m_Texture: {fileID: 2800000, guid: 83969fcdc479d8c44881063325ed42d9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MochieReflCube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _UzumoreMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - GeometryShader_Enabled: 1 + - Instancing: 0 + - Tessellation_Enabled: 1 + - VertexBasicsMaskUV: 0 + - _1st2nd_Shades_Feather: 0.0001 + - _1stShadeMapMask_Inverse: 0 + - _1st_ShadeMapUV: 0 + - _2ndShadeMapMask_Inverse: 0 + - _2nd_ShadeMapUV: 0 + - _ALDecalBandClipMax: 1 + - _ALDecalBandClipMin: 0 + - _ALDecalBandStep: 0 + - _ALDecalBaseBoost: 5 + - _ALDecalBlendAlpha: 1 + - _ALDecalBlendType: 0 + - _ALDecalColorMaskUV: 0 + - _ALDecalControlsAlpha: 0 + - _ALDecalGlobalMask: 0 + - _ALDecalGlobalMaskBlendType: 2 + - _ALDecalHighEmission: 0 + - _ALDecalLineWidth: 1 + - _ALDecalLowEmission: 0 + - _ALDecalMidEmission: 0 + - _ALDecalShapeClip: 0 + - _ALDecalShapeClipBandWidth: 0.5 + - _ALDecalShapeClipVolumeWidth: 0.5 + - _ALDecalTrebleBoost: 1 + - _ALDecalType: 0 + - _ALDecalUV: 0 + - _ALDecalUVMode: 0 + - _ALDecalVolume: 0.5 + - _ALDecalVolumeClipMax: 1 + - _ALDecalVolumeClipMin: 0 + - _ALDecalVolumeColorHighThemeIndex: 0 + - _ALDecalVolumeColorLowThemeIndex: 0 + - _ALDecalVolumeColorMidThemeIndex: 0 + - _ALDecalVolumeColorSource: 1 + - _ALDecalVolumeStep: 0 + - _ALHighEmission: 0 + - _ALLowEmission: 0 + - _ALMidEmission: 0 + - _ALUVRotation: 0 + - _ALUVRotationSpeed: 0 + - _ALVolumeColorBlendAlpha: 1 + - _ALVolumeColorBlendType: 0 + - _ALVolumeColorDirection: 0 + - _ALVolumeColorHighThemeIndex: 0 + - _ALVolumeColorLowThemeIndex: 0 + - _ALVolumeColorMidThemeIndex: 0 + - _ALVolumeColorUV: 0 + - _AddBlendOp: 4 + - _AddBlendOpAlpha: 4 + - _AddDstBlend: 1 + - _AddDstBlendAlpha: 1 + - _AddSrcBlend: 1 + - _AddSrcBlendAlpha: 0 + - _Add_Antipodean_Rim2Light: 0 + - _Add_Antipodean_RimLight: 0 + - _AlphaAlphaAdd: 0 + - _AlphaAngular: 0 + - _AlphaAngularGlobalMask: 0 + - _AlphaAudioLinkAddBand: 0 + - _AlphaAudioLinkEnabled: 0 + - _AlphaBoostFA: 10 + - _AlphaColorThemeIndex: 0 + - _AlphaDistanceFade: 0 + - _AlphaDistanceFadeGlobalMask: 0 + - _AlphaDistanceFadeMax: 0 + - _AlphaDistanceFadeMaxAlpha: 1 + - _AlphaDistanceFadeMin: 0 + - _AlphaDistanceFadeMinAlpha: 0 + - _AlphaDistanceFadeType: 1 + - _AlphaDitherBias: 0 + - _AlphaDitherGradient: 0.1 + - _AlphaDithering: 0 + - _AlphaForceOpaque: 0 + - _AlphaFresnel: 0 + - _AlphaFresnelAlpha: 0 + - _AlphaFresnelGlobalMask: 0 + - _AlphaFresnelInvert: 0 + - _AlphaFresnelSharpness: 0.5 + - _AlphaFresnelWidth: 0.5 + - _AlphaGlobalMask: 0 + - _AlphaGlobalMaskBlendType: 2 + - _AlphaMaskBlendStrength: 1 + - _AlphaMaskInvert: 0 + - _AlphaMaskUV: 0 + - _AlphaMaskValue: 0 + - _AlphaMipScale: 0.25 + - _AlphaMod: 0 + - _AlphaPremultiply: 0 + - _AlphaSharpenedA2C: 0 + - _AlphaTextureStochastic: 0 + - _AlphaTextureUV: 0 + - _AlphaToCoverage: 0 + - _AngleCompareTo: 0 + - _AngleMinAlpha: 0 + - _AngleType: 0 + - _Aniso0Blur: 0 + - _Aniso0Edge: 0.5 + - _Aniso0Offset: 0 + - _Aniso0OffsetMapStrength: 0 + - _Aniso0Power: 0 + - _Aniso0Strength: 1 + - _Aniso0SwitchDirection: 0 + - _Aniso0TintIndex: 0 + - _Aniso0ToonMode: 0 + - _Aniso1Blur: 0 + - _Aniso1Edge: 0.5 + - _Aniso1Offset: 0 + - _Aniso1OffsetMapStrength: 0 + - _Aniso1Power: 0.1 + - _Aniso1Strength: 1 + - _Aniso1SwitchDirection: 0 + - _Aniso1TintIndex: 0 + - _Aniso1ToonMode: 0 + - _AnisoAdd: 1 + - _AnisoColorMapUV: 0 + - _AnisoGlobalMask: 0 + - _AnisoGlobalMaskBlendType: 2 + - _AnisoHideInShadow: 1 + - _AnisoReplace: 0 + - _AnisoUseBaseColor: 0 + - _AnisoUseLightColor: 1 + - _Anisotropy: 0 + - _AnisotropyMapChannel: 0 + - _AnisotropyMapUV: 0 + - _Ap_Rim2Light_FeatherOff: 0 + - _Ap_Rim2Light_Power: 0.1 + - _Ap_RimLight_FeatherOff: 0 + - _Ap_RimLight_Power: 0.1 + - _ApplyReflection: 0 + - _ApplySpecular: 1 + - _ApplySpecularFA: 1 + - _AudioLinkAnimToggle: 1 + - _AudioLinkBandOverridesEnabled: 0 + - _AudioLinkDecal0AlphaBand: 0 + - _AudioLinkDecal0ChannelSeparationBand: 0 + - _AudioLinkDecal0EmissionBand: 0 + - _AudioLinkDecal0RotationBand: 0 + - _AudioLinkDecal0ScaleBand: 0 + - _AudioLinkDecal0SideBand: 0 + - _AudioLinkDecal1AlphaBand: 0 + - _AudioLinkDecal1ChannelSeparationBand: 0 + - _AudioLinkDecal1EmissionBand: 0 + - _AudioLinkDecal1RotationBand: 0 + - _AudioLinkDecal1ScaleBand: 0 + - _AudioLinkDecal1SideBand: 0 + - _AudioLinkDecal2AlphaBand: 0 + - _AudioLinkDecal2ChannelSeparationBand: 0 + - _AudioLinkDecal2EmissionBand: 0 + - _AudioLinkDecal2RotationBand: 0 + - _AudioLinkDecal2ScaleBand: 0 + - _AudioLinkDecal2SideBand: 0 + - _AudioLinkDecal3AlphaBand: 0 + - _AudioLinkDecal3ChannelSeparationBand: 0 + - _AudioLinkDecal3EmissionBand: 0 + - _AudioLinkDecal3RotationBand: 0 + - _AudioLinkDecal3ScaleBand: 0 + - _AudioLinkDecal3SideBand: 0 + - _AudioLinkDecalCC0: 0 + - _AudioLinkDecalCC1: 0 + - _AudioLinkDecalCC2: 0 + - _AudioLinkDecalCC3: 0 + - _AudioLinkDissolveAlphaBand: 0 + - _AudioLinkDissolveDetailBand: 0 + - _AudioLinkEmission0CenterOutBand: 0 + - _AudioLinkEmission0CenterOutDuration: 1 + - _AudioLinkEmission0CenterOutSize: 0 + - _AudioLinkEmission1CenterOutBand: 0 + - _AudioLinkEmission1CenterOutDuration: 1 + - _AudioLinkEmission1CenterOutSize: 0 + - _AudioLinkEmission2CenterOutBand: 0 + - _AudioLinkEmission2CenterOutDuration: 1 + - _AudioLinkEmission2CenterOutSize: 0 + - _AudioLinkEmission3CenterOutBand: 0 + - _AudioLinkEmission3CenterOutDuration: 1 + - _AudioLinkEmission3CenterOutSize: 0 + - _AudioLinkFlipbookAlphaBand: 0 + - _AudioLinkFlipbookEmissionBand: 0 + - _AudioLinkFlipbookFrameBand: 0 + - _AudioLinkFlipbookScaleBand: 0 + - _AudioLinkHelp: 0 + - _AudioLinkOutlineColorBand: 0 + - _AudioLinkOutlineEmissionBand: 0 + - _AudioLinkOutlineSizeBand: 0 + - _AudioLinkPathEmissionAddBandA: 0 + - _AudioLinkPathEmissionAddBandB: 0 + - _AudioLinkPathEmissionAddBandG: 0 + - _AudioLinkPathEmissionAddBandR: 0 + - _AudioLinkPathTimeOffsetBandA: 0 + - _AudioLinkPathTimeOffsetBandB: 0 + - _AudioLinkPathTimeOffsetBandG: 0 + - _AudioLinkPathTimeOffsetBandR: 0 + - _AudioLinkPathWidthOffsetBandA: 0 + - _AudioLinkPathWidthOffsetBandB: 0 + - _AudioLinkPathWidthOffsetBandG: 0 + - _AudioLinkPathWidthOffsetBandR: 0 + - _AudioLinkRim2BrightnessBand: 0 + - _AudioLinkRim2EmissionBand: 0 + - _AudioLinkRim2WidthBand: 0 + - _AudioLinkRimBrightnessBand: 0 + - _AudioLinkRimEmissionBand: 0 + - _AudioLinkRimWidthBand: 0 + - _AudioLinkSmoothingBass: 0 + - _AudioLinkSmoothingHighMid: 0 + - _AudioLinkSmoothingLowMid: 0 + - _AudioLinkSmoothingTreble: 0 + - _AudioLinkVoronoiChronoSpeedXBand: 0 + - _AudioLinkVoronoiChronoSpeedXSpeed: 0 + - _AudioLinkVoronoiChronoSpeedXType: 0 + - _AudioLinkVoronoiChronoSpeedYBand: 0 + - _AudioLinkVoronoiChronoSpeedYSpeed: 0 + - _AudioLinkVoronoiChronoSpeedYType: 0 + - _AudioLinkVoronoiChronoSpeedZBand: 0 + - _AudioLinkVoronoiChronoSpeedZSpeed: 0 + - _AudioLinkVoronoiChronoSpeedZType: 0 + - _AudioLinkVoronoiGradientMaxAdd: 0 + - _AudioLinkVoronoiGradientMaxAddBand: 0 + - _AudioLinkVoronoiGradientMinAdd: 0 + - _AudioLinkVoronoiGradientMinAddBand: 0 + - _AudioLinkVoronoiInnerEmissionBand: 0 + - _AudioLinkVoronoiOuterEmissionBand: 0 + - _BRDFTPSDepthEnabled: 0 + - _BRDFTPSReflectionMaskStrength: 1 + - _BRDFTPSSpecularMaskStrength: 1 + - _BSSBloomfog: 0 + - _BSSBloomfogType: 1 + - _BSSEnabled: 0 + - _BSSHelpBox1: 0 + - _BSSHelpBox2: 0 + - _BSSHelpBox3: 0 + - _BSSSpacer1: 0 + - _BSSSpacer2: 0 + - _BSSSpacer3: 0 + - _BackFaceColorThemeIndex: 0 + - _BackFaceDetailIntensity: 1 + - _BackFaceEmissionLimiter: 1 + - _BackFaceEmissionStrength: 0 + - _BackFaceEnabled: 0 + - _BackFaceHueSelectOrShift: 1 + - _BackFaceHueShift: 0 + - _BackFaceHueShiftEnabled: 0 + - _BackFaceHueShiftSpeed: 0 + - _BackFaceMaskChannel: 0 + - _BackFaceMaskUV: 0 + - _BackFaceReplaceAlpha: 0 + - _BackFaceShiftColorSpace: 0 + - _BackFaceTextureUV: 0 + - _BacklightBackfaceMask: 1 + - _BacklightBlur: 0.05 + - _BacklightBorder: 0.35 + - _BacklightColorTexUV: 0 + - _BacklightDirectivity: 5 + - _BacklightEnabled: 0 + - _BacklightMainStrength: 0 + - _BacklightNormalStrength: 1 + - _BacklightReceiveShadow: 1 + - _BacklightViewStrength: 1 + - _BaseColor_Step: 0.5 + - _BaseShade_Feather: 0.0001 + - _BlackLightMasking0GlobalMaskBlendType: 0 + - _BlackLightMasking0GlobalMaskIndex: 0 + - _BlackLightMasking0Key: 1 + - _BlackLightMasking1GlobalMaskBlendType: 0 + - _BlackLightMasking1GlobalMaskIndex: 0 + - _BlackLightMasking1Key: 2 + - _BlackLightMasking2GlobalMaskBlendType: 0 + - _BlackLightMasking2GlobalMaskIndex: 0 + - _BlackLightMasking2Key: 3 + - _BlackLightMasking3GlobalMaskBlendType: 0 + - _BlackLightMasking3GlobalMaskIndex: 0 + - _BlackLightMasking3Key: 4 + - _BlackLightMaskingEnabled: 0 + - _BlendOp: 0 + - _BlendOpAlpha: 4 + - _BlendshapeBadScaleFix: 1 + - _BlendshapePower: 1 + - _BlueAlphaAdd: 0 + - _BlueColorThemeIndex: 0 + - _BlueTextureStochastic: 0 + - _BlueTextureUV: 0 + - _BulgeOffset: 0 + - _BulgePower: 0 + - _BumpMapStochastic: 0 + - _BumpMapUV: 0 + - _BumpScale: 1 + - _CCIgnoreCastedShadows: 0 + - _CameraAngleMax: 90 + - _CameraAngleMin: 45 + - _CenterOutDissolveInvert: 0 + - _CenterOutDissolveMode: 1 + - _CenterOutDissolveNormals: 0 + - _CenterOutDissolvePower: 1 + - _ClearCoatBRDF: 0 + - _ClearCoatForceFallback: 0 + - _ClearCoatGSAAEnabled: 1 + - _ClearCoatGSAAThreshold: 0.1 + - _ClearCoatGSAAVariance: 0.15 + - _ClearCoatGlobalMask: 0 + - _ClearCoatGlobalMaskBlendType: 2 + - _ClearCoatLitFallback: 1 + - _ClearCoatMapsClearCoatMaskChannel: 0 + - _ClearCoatMapsReflectionMaskChannel: 2 + - _ClearCoatMapsRoughnessChannel: 1 + - _ClearCoatMapsSpecularMaskChannel: 3 + - _ClearCoatMapsStochastic: 0 + - _ClearCoatMapsUV: 0 + - _ClearCoatMaskInvert: 0 + - _ClearCoatNormalSelect: 0 + - _ClearCoatReflectionMaskInvert: 0 + - _ClearCoatReflectionStrength: 1 + - _ClearCoatReflectionStrengthGlobalMask: 0 + - _ClearCoatReflectionStrengthGlobalMaskBlendType: 2 + - _ClearCoatReflectionTintThemeIndex: 0 + - _ClearCoatSmoothness: 1 + - _ClearCoatSmoothnessGlobalMask: 0 + - _ClearCoatSmoothnessGlobalMaskBlendType: 2 + - _ClearCoatSmoothnessMapInvert: 0 + - _ClearCoatSpecularMaskInvert: 0 + - _ClearCoatSpecularStrength: 1 + - _ClearCoatSpecularStrengthGlobalMask: 0 + - _ClearCoatSpecularStrengthGlobalMaskBlendType: 2 + - _ClearCoatSpecularTintThemeIndex: 0 + - _ClearCoatStrength: 1 + - _ClearCoatTPSDepthMaskEnabled: 0 + - _ClearCoatTPSMaskStrength: 1 + - _ClearcoatExposureOcclusion: 0 + - _ClearcoatFresnelStrength: 0.5 + - _ClothLerp: 0 + - _ClothMetallicSmoothnessMapInvert: 0 + - _ClothMetallicSmoothnessMapUV: 0 + - _ClothReflectance: 0.5 + - _ClothSmoothness: 0.5 + - _ColorGradingToggle: 0 + - _ColorMask: 15 + - _ColorThemeIndex: 0 + - _ContinuousDissolve: 0 + - _CubeMapBlendAmount: 1 + - _CubeMapBrightness: 0 + - _CubeMapColorThemeIndex: 0 + - _CubeMapContrast: 1 + - _CubeMapEmissionStrength: 0 + - _CubeMapEnabled: 0 + - _CubeMapHueSelectOrShift: 1 + - _CubeMapHueShift: 0 + - _CubeMapHueShiftColorSpace: 0 + - _CubeMapHueShiftEnabled: 0 + - _CubeMapHueShiftSpeed: 0 + - _CubeMapIntensity: 1 + - _CubeMapLightMask: 0 + - _CubeMapMaskChannel: 0 + - _CubeMapMaskGlobalMask: 0 + - _CubeMapMaskGlobalMaskBlendType: 2 + - _CubeMapMaskInvert: 0 + - _CubeMapMaskUV: 0 + - _CubeMapNormal: 1 + - _CubeMapSaturation: 1 + - _CubeMapSmoothness: 1 + - _CubeMapUVMode: 1 + - _CubeMapWorldNormalsStrength: 1 + - _CubemapBlendType: 0 + - _Cull: 2 + - _CurvFix: 1 + - _Curvature: 0 + - _CurvatureU: 0 + - _CurvatureV: 0 + - _CustomColors: 0 + - _Cutoff: 0 + - _Decal0ApplyGlobalMaskBlendType: 0 + - _Decal0ApplyGlobalMaskIndex: 0 + - _Decal0ChannelSeparation: 0 + - _Decal0ChannelSeparationAngleStrength: 0 + - _Decal0ChannelSeparationEnable: 0 + - _Decal0ChannelSeparationHue: 0 + - _Decal0ChannelSeparationPremultiply: 0 + - _Decal0ChannelSeparationVertical: 0 + - _Decal0Depth: 0 + - _Decal0FaceMask: 0 + - _Decal0GlobalMask: 0 + - _Decal0GlobalMaskBlendType: 2 + - _Decal0HueAngleStrength: 0 + - _Decal0MaskChannel: 0 + - _Decal0OnlyVideo: 0 + - _Decal0OverrideAlphaMode: 0 + - _Decal0TPSMaskStrength: 1 + - _Decal0UseDecalAlpha: 0 + - _Decal0VideoAspectFix: 0 + - _Decal0VideoEmissionStrength: 0 + - _Decal0VideoEnabled: 0 + - _Decal0VideoFitToScale: 1 + - _Decal1ApplyGlobalMaskBlendType: 0 + - _Decal1ApplyGlobalMaskIndex: 0 + - _Decal1ChannelSeparation: 0 + - _Decal1ChannelSeparationAngleStrength: 0 + - _Decal1ChannelSeparationEnable: 0 + - _Decal1ChannelSeparationHue: 0 + - _Decal1ChannelSeparationPremultiply: 0 + - _Decal1ChannelSeparationVertical: 0 + - _Decal1Depth: 0 + - _Decal1FaceMask: 0 + - _Decal1GlobalMask: 0 + - _Decal1GlobalMaskBlendType: 2 + - _Decal1HueAngleStrength: 0 + - _Decal1MaskChannel: 1 + - _Decal1OnlyVideo: 0 + - _Decal1OverrideAlphaMode: 0 + - _Decal1TPSMaskStrength: 1 + - _Decal1UseDecalAlpha: 0 + - _Decal1VideoAspectFix: 0 + - _Decal1VideoEmissionStrength: 0 + - _Decal1VideoEnabled: 0 + - _Decal1VideoFitToScale: 1 + - _Decal2ApplyGlobalMaskBlendType: 0 + - _Decal2ApplyGlobalMaskIndex: 0 + - _Decal2ChannelSeparation: 0 + - _Decal2ChannelSeparationAngleStrength: 0 + - _Decal2ChannelSeparationEnable: 0 + - _Decal2ChannelSeparationHue: 0 + - _Decal2ChannelSeparationPremultiply: 0 + - _Decal2ChannelSeparationVertical: 0 + - _Decal2Depth: 0 + - _Decal2FaceMask: 0 + - _Decal2GlobalMask: 0 + - _Decal2GlobalMaskBlendType: 2 + - _Decal2HueAngleStrength: 0 + - _Decal2MaskChannel: 2 + - _Decal2OnlyVideo: 0 + - _Decal2OverrideAlphaMode: 0 + - _Decal2TPSMaskStrength: 1 + - _Decal2UseDecalAlpha: 0 + - _Decal2VideoAspectFix: 0 + - _Decal2VideoEmissionStrength: 0 + - _Decal2VideoEnabled: 0 + - _Decal2VideoFitToScale: 1 + - _Decal3ApplyGlobalMaskBlendType: 0 + - _Decal3ApplyGlobalMaskIndex: 0 + - _Decal3ChannelSeparation: 0 + - _Decal3ChannelSeparationAngleStrength: 0 + - _Decal3ChannelSeparationEnable: 0 + - _Decal3ChannelSeparationHue: 0 + - _Decal3ChannelSeparationPremultiply: 0 + - _Decal3ChannelSeparationVertical: 0 + - _Decal3Depth: 0 + - _Decal3FaceMask: 0 + - _Decal3GlobalMask: 0 + - _Decal3GlobalMaskBlendType: 2 + - _Decal3HueAngleStrength: 0 + - _Decal3MaskChannel: 3 + - _Decal3OnlyVideo: 0 + - _Decal3OverrideAlphaMode: 0 + - _Decal3TPSMaskStrength: 1 + - _Decal3UseDecalAlpha: 0 + - _Decal3VideoAspectFix: 0 + - _Decal3VideoEmissionStrength: 0 + - _Decal3VideoEnabled: 0 + - _Decal3VideoFitToScale: 1 + - _DecalBlendAlpha: 1 + - _DecalBlendAlpha1: 1 + - _DecalBlendAlpha2: 1 + - _DecalBlendAlpha3: 1 + - _DecalBlendType: 0 + - _DecalBlendType1: 0 + - _DecalBlendType2: 0 + - _DecalBlendType3: 0 + - _DecalColor1ThemeIndex: 0 + - _DecalColor2ThemeIndex: 0 + - _DecalColor3ThemeIndex: 0 + - _DecalColorThemeIndex: 0 + - _DecalEmissionStrength: 0 + - _DecalEmissionStrength1: 0 + - _DecalEmissionStrength2: 0 + - _DecalEmissionStrength3: 0 + - _DecalEnabled: 0 + - _DecalEnabled1: 0 + - _DecalEnabled2: 0 + - _DecalEnabled3: 0 + - _DecalHueShift: 0 + - _DecalHueShift1: 0 + - _DecalHueShift2: 0 + - _DecalHueShift3: 0 + - _DecalHueShiftColorSpace: 0 + - _DecalHueShiftColorSpace1: 0 + - _DecalHueShiftColorSpace2: 0 + - _DecalHueShiftColorSpace3: 0 + - _DecalHueShiftEnabled: 0 + - _DecalHueShiftEnabled1: 0 + - _DecalHueShiftEnabled2: 0 + - _DecalHueShiftEnabled3: 0 + - _DecalHueShiftSelectOrShift: 1 + - _DecalHueShiftSelectOrShift1: 1 + - _DecalHueShiftSelectOrShift2: 1 + - _DecalHueShiftSelectOrShift3: 1 + - _DecalHueShiftSpeed: 0 + - _DecalHueShiftSpeed1: 0 + - _DecalHueShiftSpeed2: 0 + - _DecalHueShiftSpeed3: 0 + - _DecalMaskUV: 0 + - _DecalMirroredUVMode: 0 + - _DecalMirroredUVMode1: 0 + - _DecalMirroredUVMode2: 0 + - _DecalMirroredUVMode3: 0 + - _DecalOverrideAlpha: 0 + - _DecalOverrideAlpha1: 0 + - _DecalOverrideAlpha2: 0 + - _DecalOverrideAlpha3: 0 + - _DecalRotation: 0 + - _DecalRotation1: 0 + - _DecalRotation2: 0 + - _DecalRotation3: 0 + - _DecalRotationCTALBand0: 0 + - _DecalRotationCTALBand1: 0 + - _DecalRotationCTALBand2: 0 + - _DecalRotationCTALBand3: 0 + - _DecalRotationCTALSpeed0: 0 + - _DecalRotationCTALSpeed1: 0 + - _DecalRotationCTALSpeed2: 0 + - _DecalRotationCTALSpeed3: 0 + - _DecalRotationCTALType0: 0 + - _DecalRotationCTALType1: 0 + - _DecalRotationCTALType2: 0 + - _DecalRotationCTALType3: 0 + - _DecalRotationSpeed: 0 + - _DecalRotationSpeed1: 0 + - _DecalRotationSpeed2: 0 + - _DecalRotationSpeed3: 0 + - _DecalSymmetryMode: 0 + - _DecalSymmetryMode1: 0 + - _DecalSymmetryMode2: 0 + - _DecalSymmetryMode3: 0 + - _DecalTPSDepthMaskEnabled: 0 + - _DecalTexture1UV: 0 + - _DecalTexture2UV: 0 + - _DecalTexture3UV: 0 + - _DecalTextureUV: 0 + - _DecalTiled: 0 + - _DecalTiled1: 0 + - _DecalTiled2: 0 + - _DecalTiled3: 0 + - _DepthAlphaMaxDepth: 1 + - _DepthAlphaMaxValue: 0 + - _DepthAlphaMinDepth: 0 + - _DepthAlphaMinValue: 1 + - _DepthAlphaToggle: 0 + - _DepthBulgeFadeLength: 0.02 + - _DepthBulgeHeight: 0.02 + - _DepthBulgeMaskChannel: 0 + - _DepthBulgeMaskUV: 0 + - _DepthBulgeWarning: 0 + - _DepthColorBlendMode: 0 + - _DepthColorMaxDepth: 1 + - _DepthColorMaxValue: 0 + - _DepthColorMinDepth: 0 + - _DepthColorMinValue: 1 + - _DepthColorThemeIndex: 0 + - _DepthColorToggle: 0 + - _DepthEmissionStrength: 0 + - _DepthFXWarning: 0 + - _DepthMaskChannel: 0 + - _DepthMaskGlobalMask: 0 + - _DepthMaskGlobalMaskBlendType: 2 + - _DepthMaskUV: 0 + - _DepthRimAdd: 0 + - _DepthRimAdditiveLighting: 0 + - _DepthRimBrightness: 1 + - _DepthRimColorThemeIndex: 0 + - _DepthRimEmission: 0 + - _DepthRimHideInShadow: 0 + - _DepthRimMixBaseColor: 0 + - _DepthRimMixLightColor: 0 + - _DepthRimMultiply: 0 + - _DepthRimNormalToUse: 1 + - _DepthRimReplace: 0 + - _DepthRimSharpness: 0.2 + - _DepthRimType: 0 + - _DepthRimWidth: 0.2 + - _DepthTextureUV: 0 + - _DetailBrightness: 1 + - _DetailEnabled: 0 + - _DetailMaskStochastic: 0 + - _DetailMaskUV: 0 + - _DetailNormalGlobalMask: 0 + - _DetailNormalGlobalMaskBlendType: 2 + - _DetailNormalMapScale: 1 + - _DetailNormalMapStochastic: 0 + - _DetailNormalMapUV: 0 + - _DetailTexGlobalMask: 0 + - _DetailTexGlobalMaskBlendType: 2 + - _DetailTexIntensity: 1 + - _DetailTexStochastic: 0 + - _DetailTexUV: 0 + - _DetailTintThemeIndex: 0 + - _DisableDirectionalInAdd: 1 + - _DissolveAlpha: 0 + - _DissolveAlpha0: 0 + - _DissolveAlpha1: 0 + - _DissolveAlpha2: 0 + - _DissolveAlpha3: 0 + - _DissolveAlpha4: 0 + - _DissolveAlpha5: 0 + - _DissolveAlpha6: 0 + - _DissolveAlpha7: 0 + - _DissolveAlpha8: 0 + - _DissolveAlpha9: 0 + - _DissolveApplyGlobalMaskBlendType: 0 + - _DissolveApplyGlobalMaskIndex: 0 + - _DissolveDetailEdgeSmoothing: 0 + - _DissolveDetailNoiseUV: 0 + - _DissolveDetailStrength: 0.1 + - _DissolveEdgeColorThemeIndex: 0 + - _DissolveEdgeEmission: 0 + - _DissolveEdgeHardness: 0.5 + - _DissolveEdgeHueSelectOrShift: 1 + - _DissolveEdgeHueShift: 0 + - _DissolveEdgeHueShiftColorSpace: 0 + - _DissolveEdgeHueShiftEnabled: 0 + - _DissolveEdgeHueShiftSpeed: 0 + - _DissolveEdgeWidth: 0.025 + - _DissolveHueSelectOrShift: 1 + - _DissolveHueShift: 0 + - _DissolveHueShiftColorSpace: 0 + - _DissolveHueShiftEnabled: 0 + - _DissolveHueShiftSpeed: 0 + - _DissolveInverseApplyGlobalMaskBlendType: 0 + - _DissolveInverseApplyGlobalMaskIndex: 0 + - _DissolveInvertDetailNoise: 0 + - _DissolveInvertNoise: 0 + - _DissolveMaskGlobalMask: 0 + - _DissolveMaskGlobalMaskBlendType: 2 + - _DissolveMaskInvert: 0 + - _DissolveMaskUV: 0 + - _DissolveNoiseTextureUV: 0 + - _DissolveP2PClamp: 0 + - _DissolveP2PEdgeLength: 0.1 + - _DissolveP2PWorldLocal: 0 + - _DissolveTextureColorThemeIndex: 0 + - _DissolveToEmissionStrength: 0 + - _DissolveToTextureUV: 0 + - _DissolveType: 1 + - _DissolveUseVertexColors: 0 + - _DistortionFlowTexture1UV: 0 + - _DistortionFlowTextureUV: 0 + - _DistortionMaskChannel: 0 + - _DistortionMaskUV: 0 + - _DistortionStrength: 0.03 + - _DistortionStrength1: 0.01 + - _DistortionStrength1AudioLinkBand: 0 + - _DistortionStrengthAudioLinkBand: 0 + - _DistortionUvToDistort: 0 + - _DstBlend: 1 + - _DstBlendAlpha: 1 + - _EmissionAL0Enabled: 0 + - _EmissionAL0MultipliersBand: 0 + - _EmissionAL0StrengthBand: 0 + - _EmissionAL1Enabled: 0 + - _EmissionAL1MultipliersBand: 0 + - _EmissionAL1StrengthBand: 0 + - _EmissionAL2Enabled: 0 + - _EmissionAL2MultipliersBand: 0 + - _EmissionAL2StrengthBand: 0 + - _EmissionAL3Enabled: 0 + - _EmissionAL3MultipliersBand: 0 + - _EmissionAL3StrengthBand: 0 + - _EmissionBaseColorAsMap: 0 + - _EmissionBaseColorAsMap1: 0 + - _EmissionBaseColorAsMap2: 0 + - _EmissionBaseColorAsMap3: 0 + - _EmissionBlinkingEnabled: 0 + - _EmissionBlinkingEnabled1: 0 + - _EmissionBlinkingEnabled2: 0 + - _EmissionBlinkingEnabled3: 0 + - _EmissionBlinkingOffset: 0 + - _EmissionBlinkingOffset1: 0 + - _EmissionBlinkingOffset2: 0 + - _EmissionBlinkingOffset3: 0 + - _EmissionCenterOutEnabled: 0 + - _EmissionCenterOutEnabled1: 0 + - _EmissionCenterOutEnabled2: 0 + - _EmissionCenterOutEnabled3: 0 + - _EmissionCenterOutSpeed: 5 + - _EmissionCenterOutSpeed1: 5 + - _EmissionCenterOutSpeed2: 5 + - _EmissionCenterOutSpeed3: 5 + - _EmissionColor1ThemeIndex: 0 + - _EmissionColor2ThemeIndex: 0 + - _EmissionColor3ThemeIndex: 0 + - _EmissionColorThemeIndex: 0 + - _EmissionFluorescence: 0 + - _EmissionFluorescence1: 0 + - _EmissionFluorescence2: 0 + - _EmissionFluorescence3: 0 + - _EmissionHueSelectOrShift: 1 + - _EmissionHueSelectOrShift1: 1 + - _EmissionHueSelectOrShift2: 1 + - _EmissionHueSelectOrShift3: 1 + - _EmissionHueShift: 0 + - _EmissionHueShift1: 0 + - _EmissionHueShift2: 0 + - _EmissionHueShift3: 0 + - _EmissionHueShiftColorSpace: 0 + - _EmissionHueShiftColorSpace1: 0 + - _EmissionHueShiftColorSpace2: 0 + - _EmissionHueShiftColorSpace3: 0 + - _EmissionHueShiftEnabled: 0 + - _EmissionHueShiftEnabled1: 0 + - _EmissionHueShiftEnabled2: 0 + - _EmissionHueShiftEnabled3: 0 + - _EmissionHueShiftSpeed: 0 + - _EmissionHueShiftSpeed1: 0 + - _EmissionHueShiftSpeed2: 0 + - _EmissionHueShiftSpeed3: 0 + - _EmissionMap1UV: 0 + - _EmissionMap2UV: 0 + - _EmissionMap3UV: 0 + - _EmissionMapUV: 0 + - _EmissionMask0GlobalMask: 0 + - _EmissionMask0GlobalMaskBlendType: 2 + - _EmissionMask1Channel: 0 + - _EmissionMask1GlobalMask: 0 + - _EmissionMask1GlobalMaskBlendType: 2 + - _EmissionMask1UV: 0 + - _EmissionMask2Channel: 0 + - _EmissionMask2GlobalMask: 0 + - _EmissionMask2GlobalMaskBlendType: 2 + - _EmissionMask2UV: 0 + - _EmissionMask3Channel: 0 + - _EmissionMask3GlobalMask: 0 + - _EmissionMask3GlobalMaskBlendType: 2 + - _EmissionMask3UV: 0 + - _EmissionMaskChannel: 0 + - _EmissionMaskInvert: 0 + - _EmissionMaskInvert1: 0 + - _EmissionMaskInvert2: 0 + - _EmissionMaskInvert3: 0 + - _EmissionMaskUV: 0 + - _EmissionReplace0: 0 + - _EmissionReplace1: 0 + - _EmissionReplace2: 0 + - _EmissionReplace3: 0 + - _EmissionSaturation: 0 + - _EmissionSaturation1: 0 + - _EmissionSaturation2: 0 + - _EmissionSaturation3: 0 + - _EmissionScrollingOffset: 0 + - _EmissionScrollingOffset1: 0 + - _EmissionScrollingOffset2: 0 + - _EmissionScrollingOffset3: 0 + - _EmissionScrollingUseCurve: 0 + - _EmissionScrollingUseCurve1: 0 + - _EmissionScrollingUseCurve2: 0 + - _EmissionScrollingUseCurve3: 0 + - _EmissionScrollingVertexColor: 0 + - _EmissionScrollingVertexColor1: 0 + - _EmissionScrollingVertexColor2: 0 + - _EmissionScrollingVertexColor3: 0 + - _EmissionStrength: 0.1 + - _EmissionStrength1: 0 + - _EmissionStrength2: 0 + - _EmissionStrength3: 0 + - _EmissiveBlink_Max: 1 + - _EmissiveBlink_Max1: 1 + - _EmissiveBlink_Max2: 1 + - _EmissiveBlink_Max3: 1 + - _EmissiveBlink_Min: 0 + - _EmissiveBlink_Min1: 0 + - _EmissiveBlink_Min2: 0 + - _EmissiveBlink_Min3: 0 + - _EmissiveBlink_Velocity: 4 + - _EmissiveBlink_Velocity1: 4 + - _EmissiveBlink_Velocity2: 4 + - _EmissiveBlink_Velocity3: 4 + - _EmissiveScroll_Interval: 20 + - _EmissiveScroll_Interval1: 20 + - _EmissiveScroll_Interval2: 20 + - _EmissiveScroll_Interval3: 20 + - _EmissiveScroll_Velocity: 10 + - _EmissiveScroll_Velocity1: 10 + - _EmissiveScroll_Velocity2: 10 + - _EmissiveScroll_Velocity3: 10 + - _EmissiveScroll_Width: 10 + - _EmissiveScroll_Width1: 10 + - _EmissiveScroll_Width2: 10 + - _EmissiveScroll_Width3: 10 + - _EnableALDecal: 0 + - _EnableAniso: 0 + - _EnableAudioLink: 0 + - _EnableDepthBulge: 0 + - _EnableDepthRimLighting: 0 + - _EnableDissolve: 0 + - _EnableDissolveAudioLink: 0 + - _EnableDistortion: 0 + - _EnableDistortionAudioLink: 0 + - _EnableEmission: 1 + - _EnableEmission1: 0 + - _EnableEmission2: 0 + - _EnableEmission3: 0 + - _EnableEnvironmentalRim: 0 + - _EnableFlipbook: 0 + - _EnableGITDEmission: 0 + - _EnableGITDEmission1: 0 + - _EnableGITDEmission2: 0 + - _EnableGITDEmission3: 0 + - _EnableMirrorOptions: 0 + - _EnableOutlines: 0 + - _EnablePathRemapping: 0 + - _EnablePathing: 0 + - _EnableRim2Lighting: 0 + - _EnableRimLighting: 0 + - _EnableTouchGlow: 0 + - _EnableTruchet: 0 + - _EnableUDIMDiscardOptions: 0 + - _EnableUDIMFaceDiscardOptions: 0 + - _EnableVolumeColor: 0 + - _EntranceStiffness: 0.01 + - _EntryOpenDuration: 0.1 + - _FFBFOutlineStencilHelp0: 0 + - _FFBFOutlineStencilHelp1: 0 + - _FFBFStencilHelp0: 0 + - _FFBFStencilHelp1: 0 + - _FXProximityColor: 0 + - _FXProximityColorBackFace: 0 + - _FXProximityColorMaxColorThemeIndex: 0 + - _FXProximityColorMaxDistance: 1 + - _FXProximityColorMinColorThemeIndex: 0 + - _FXProximityColorMinDistance: 0 + - _FXProximityColorType: 1 + - _FlipBackfaceNormals: 1 + - _FlipbookAlphaControlsFinalAlpha: 0 + - _FlipbookBlendType: 0 + - _FlipbookChronoType: 0 + - _FlipbookChronotensityBand: 0 + - _FlipbookChronotensityEnabled: 0 + - _FlipbookChronotensitySpeed: 0 + - _FlipbookColorReplaces: 0 + - _FlipbookColorThemeIndex: 0 + - _FlipbookCrossfadeEnabled: 0 + - _FlipbookCurrentFrame: 0 + - _FlipbookEmissionStrength: 0 + - _FlipbookEndFrame: 0 + - _FlipbookFPS: 30 + - _FlipbookFrameOffset: 0 + - _FlipbookHueSelectOrShift: 1 + - _FlipbookHueShift: 0 + - _FlipbookHueShiftColorSpace: 0 + - _FlipbookHueShiftEnabled: 0 + - _FlipbookHueShiftSpeed: 0 + - _FlipbookIntensityControlsAlpha: 0 + - _FlipbookManualFrameControl: 0 + - _FlipbookMaskChannel: 0 + - _FlipbookMaskGlobalMask: 0 + - _FlipbookMaskGlobalMaskBlendType: 2 + - _FlipbookMaskUV: 0 + - _FlipbookReplace: 1 + - _FlipbookRotation: 0 + - _FlipbookRotationSpeed: 0 + - _FlipbookStartAndEnd: 0 + - _FlipbookStartFrame: 0 + - _FlipbookTexArrayUV: 0 + - _FlipbookTiled: 0 + - _FogHeightOffset: 0 + - _FogHeightScale: 1 + - _FogScale: 1 + - _FogStartOffset: 0 + - _ForceFlatRampedLightmap: 1 + - _ForgotToLockMaterial: 1 + - _GGXAnisotropics: 0 + - _GITDEMaxEmissionMultiplier: 0 + - _GITDEMaxEmissionMultiplier1: 0 + - _GITDEMaxEmissionMultiplier2: 0 + - _GITDEMaxEmissionMultiplier3: 0 + - _GITDEMaxLight: 1 + - _GITDEMaxLight1: 1 + - _GITDEMaxLight2: 1 + - _GITDEMaxLight3: 1 + - _GITDEMinEmissionMultiplier: 1 + - _GITDEMinEmissionMultiplier1: 1 + - _GITDEMinEmissionMultiplier2: 1 + - _GITDEMinEmissionMultiplier3: 1 + - _GITDEMinLight: 0 + - _GITDEMinLight1: 0 + - _GITDEMinLight2: 0 + - _GITDEMinLight3: 0 + - _GITDEWorldOrMesh: 0 + - _GITDEWorldOrMesh1: 0 + - _GITDEWorldOrMesh2: 0 + - _GITDEWorldOrMesh3: 0 + - _GSAAStrength: 0 + - _GlitterALAlphaAddBand: 0 + - _GlitterALChronoRotationSpeed: 0 + - _GlitterALChronoRotationSpeedBand: 0 + - _GlitterALChronoRotationSpeedType: 0 + - _GlitterALChronoSparkleSpeed: 0 + - _GlitterALChronoSparkleSpeedBand: 0 + - _GlitterALChronoSparkleSpeedType: 0 + - _GlitterALEnabled: 0 + - _GlitterALMaxBrightnessBand: 0 + - _GlitterALSizeAddBand: 0 + - _GlitterAngleRange: 90 + - _GlitterBias: 0.8 + - _GlitterBlendType: 0 + - _GlitterBrightness: 3 + - _GlitterCenterSize: 0.08 + - _GlitterColorMapUV: 0 + - _GlitterColorThemeIndex: 0 + - _GlitterContrast: 300 + - _GlitterEnable: 0 + - _GlitterFrequency: 300 + - _GlitterHideInShadow: 0 + - _GlitterHueSelectOrShift: 1 + - _GlitterHueShift: 0 + - _GlitterHueShiftColorSpace: 0 + - _GlitterHueShiftEnabled: 0 + - _GlitterHueShiftSpeed: 0 + - _GlitterJaggyFix: 0 + - _GlitterLayers: 2 + - _GlitterMaskChannel: 0 + - _GlitterMaskGlobalMask: 0 + - _GlitterMaskGlobalMaskBlendType: 2 + - _GlitterMaskInvert: 0 + - _GlitterMaskUV: 0 + - _GlitterMinBrightness: 0 + - _GlitterMode: 0 + - _GlitterRandomColors: 0 + - _GlitterRandomLocation: 1 + - _GlitterRandomRotation: 0 + - _GlitterRandomSize: 0 + - _GlitterScaleWithLighting: 0 + - _GlitterShape: 0 + - _GlitterSize: 0.3 + - _GlitterSpeed: 10 + - _GlitterTextureRotation: 0 + - _GlitterUV: 0 + - _GlitterUseNormals: 0 + - _GlitterUseSurfaceColor: 0 + - _GlobalMaskBackface_0: 0 + - _GlobalMaskBackface_1: 0 + - _GlobalMaskBackface_10: 0 + - _GlobalMaskBackface_11: 0 + - _GlobalMaskBackface_12: 0 + - _GlobalMaskBackface_13: 0 + - _GlobalMaskBackface_14: 0 + - _GlobalMaskBackface_15: 0 + - _GlobalMaskBackface_2: 0 + - _GlobalMaskBackface_3: 0 + - _GlobalMaskBackface_4: 0 + - _GlobalMaskBackface_5: 0 + - _GlobalMaskBackface_6: 0 + - _GlobalMaskBackface_7: 0 + - _GlobalMaskBackface_8: 0 + - _GlobalMaskBackface_9: 0 + - _GlobalMaskCamera_0: 0 + - _GlobalMaskCamera_1: 0 + - _GlobalMaskCamera_10: 0 + - _GlobalMaskCamera_11: 0 + - _GlobalMaskCamera_12: 0 + - _GlobalMaskCamera_13: 0 + - _GlobalMaskCamera_14: 0 + - _GlobalMaskCamera_15: 0 + - _GlobalMaskCamera_2: 0 + - _GlobalMaskCamera_3: 0 + - _GlobalMaskCamera_4: 0 + - _GlobalMaskCamera_5: 0 + - _GlobalMaskCamera_6: 0 + - _GlobalMaskCamera_7: 0 + - _GlobalMaskCamera_8: 0 + - _GlobalMaskCamera_9: 0 + - _GlobalMaskDistanceBlendType_0: 0 + - _GlobalMaskDistanceBlendType_1: 0 + - _GlobalMaskDistanceBlendType_10: 0 + - _GlobalMaskDistanceBlendType_11: 0 + - _GlobalMaskDistanceBlendType_12: 0 + - _GlobalMaskDistanceBlendType_13: 0 + - _GlobalMaskDistanceBlendType_14: 0 + - _GlobalMaskDistanceBlendType_15: 0 + - _GlobalMaskDistanceBlendType_2: 0 + - _GlobalMaskDistanceBlendType_3: 0 + - _GlobalMaskDistanceBlendType_4: 0 + - _GlobalMaskDistanceBlendType_5: 0 + - _GlobalMaskDistanceBlendType_6: 0 + - _GlobalMaskDistanceBlendType_7: 0 + - _GlobalMaskDistanceBlendType_8: 0 + - _GlobalMaskDistanceBlendType_9: 0 + - _GlobalMaskDistanceEnable_0: 0 + - _GlobalMaskDistanceEnable_1: 0 + - _GlobalMaskDistanceEnable_10: 0 + - _GlobalMaskDistanceEnable_11: 0 + - _GlobalMaskDistanceEnable_12: 0 + - _GlobalMaskDistanceEnable_13: 0 + - _GlobalMaskDistanceEnable_14: 0 + - _GlobalMaskDistanceEnable_15: 0 + - _GlobalMaskDistanceEnable_2: 0 + - _GlobalMaskDistanceEnable_3: 0 + - _GlobalMaskDistanceEnable_4: 0 + - _GlobalMaskDistanceEnable_5: 0 + - _GlobalMaskDistanceEnable_6: 0 + - _GlobalMaskDistanceEnable_7: 0 + - _GlobalMaskDistanceEnable_8: 0 + - _GlobalMaskDistanceEnable_9: 0 + - _GlobalMaskDistanceMaxAlpha_0: 1 + - _GlobalMaskDistanceMaxAlpha_1: 1 + - _GlobalMaskDistanceMaxAlpha_10: 1 + - _GlobalMaskDistanceMaxAlpha_11: 1 + - _GlobalMaskDistanceMaxAlpha_12: 1 + - _GlobalMaskDistanceMaxAlpha_13: 1 + - _GlobalMaskDistanceMaxAlpha_14: 1 + - _GlobalMaskDistanceMaxAlpha_15: 1 + - _GlobalMaskDistanceMaxAlpha_2: 1 + - _GlobalMaskDistanceMaxAlpha_3: 1 + - _GlobalMaskDistanceMaxAlpha_4: 1 + - _GlobalMaskDistanceMaxAlpha_5: 1 + - _GlobalMaskDistanceMaxAlpha_6: 1 + - _GlobalMaskDistanceMaxAlpha_7: 1 + - _GlobalMaskDistanceMaxAlpha_8: 1 + - _GlobalMaskDistanceMaxAlpha_9: 1 + - _GlobalMaskDistanceMax_0: 2 + - _GlobalMaskDistanceMax_1: 2 + - _GlobalMaskDistanceMax_10: 2 + - _GlobalMaskDistanceMax_11: 2 + - _GlobalMaskDistanceMax_12: 2 + - _GlobalMaskDistanceMax_13: 2 + - _GlobalMaskDistanceMax_14: 2 + - _GlobalMaskDistanceMax_15: 2 + - _GlobalMaskDistanceMax_2: 2 + - _GlobalMaskDistanceMax_3: 2 + - _GlobalMaskDistanceMax_4: 2 + - _GlobalMaskDistanceMax_5: 2 + - _GlobalMaskDistanceMax_6: 2 + - _GlobalMaskDistanceMax_7: 2 + - _GlobalMaskDistanceMax_8: 2 + - _GlobalMaskDistanceMax_9: 2 + - _GlobalMaskDistanceMinAlpha_0: 0 + - _GlobalMaskDistanceMinAlpha_1: 0 + - _GlobalMaskDistanceMinAlpha_10: 0 + - _GlobalMaskDistanceMinAlpha_11: 0 + - _GlobalMaskDistanceMinAlpha_12: 0 + - _GlobalMaskDistanceMinAlpha_13: 0 + - _GlobalMaskDistanceMinAlpha_14: 0 + - _GlobalMaskDistanceMinAlpha_15: 0 + - _GlobalMaskDistanceMinAlpha_2: 0 + - _GlobalMaskDistanceMinAlpha_3: 0 + - _GlobalMaskDistanceMinAlpha_4: 0 + - _GlobalMaskDistanceMinAlpha_5: 0 + - _GlobalMaskDistanceMinAlpha_6: 0 + - _GlobalMaskDistanceMinAlpha_7: 0 + - _GlobalMaskDistanceMinAlpha_8: 0 + - _GlobalMaskDistanceMinAlpha_9: 0 + - _GlobalMaskDistanceMin_0: 1 + - _GlobalMaskDistanceMin_1: 1 + - _GlobalMaskDistanceMin_10: 1 + - _GlobalMaskDistanceMin_11: 1 + - _GlobalMaskDistanceMin_12: 1 + - _GlobalMaskDistanceMin_13: 1 + - _GlobalMaskDistanceMin_14: 1 + - _GlobalMaskDistanceMin_15: 1 + - _GlobalMaskDistanceMin_2: 1 + - _GlobalMaskDistanceMin_3: 1 + - _GlobalMaskDistanceMin_4: 1 + - _GlobalMaskDistanceMin_5: 1 + - _GlobalMaskDistanceMin_6: 1 + - _GlobalMaskDistanceMin_7: 1 + - _GlobalMaskDistanceMin_8: 1 + - _GlobalMaskDistanceMin_9: 1 + - _GlobalMaskDistanceType_0: 1 + - _GlobalMaskDistanceType_1: 1 + - _GlobalMaskDistanceType_10: 1 + - _GlobalMaskDistanceType_11: 1 + - _GlobalMaskDistanceType_12: 1 + - _GlobalMaskDistanceType_13: 1 + - _GlobalMaskDistanceType_14: 1 + - _GlobalMaskDistanceType_15: 1 + - _GlobalMaskDistanceType_2: 1 + - _GlobalMaskDistanceType_3: 1 + - _GlobalMaskDistanceType_4: 1 + - _GlobalMaskDistanceType_5: 1 + - _GlobalMaskDistanceType_6: 1 + - _GlobalMaskDistanceType_7: 1 + - _GlobalMaskDistanceType_8: 1 + - _GlobalMaskDistanceType_9: 1 + - _GlobalMaskMirrorVisibilityMode: 1 + - _GlobalMaskMirror_0: 0 + - _GlobalMaskMirror_1: 0 + - _GlobalMaskMirror_10: 0 + - _GlobalMaskMirror_11: 0 + - _GlobalMaskMirror_12: 0 + - _GlobalMaskMirror_13: 0 + - _GlobalMaskMirror_14: 0 + - _GlobalMaskMirror_15: 0 + - _GlobalMaskMirror_2: 0 + - _GlobalMaskMirror_3: 0 + - _GlobalMaskMirror_4: 0 + - _GlobalMaskMirror_5: 0 + - _GlobalMaskMirror_6: 0 + - _GlobalMaskMirror_7: 0 + - _GlobalMaskMirror_8: 0 + - _GlobalMaskMirror_9: 0 + - _GlobalMaskModifiersBackfaceEnable: 0 + - _GlobalMaskModifiersCameraEnable: 0 + - _GlobalMaskModifiersCameraInfo: 0 + - _GlobalMaskModifiersDistanceEnable: 0 + - _GlobalMaskModifiersMirrorEnable: 0 + - _GlobalMaskOptionsEnable: 0 + - _GlobalMaskOptionsType: 0 + - _GlobalMaskSlider_0: 0 + - _GlobalMaskSlider_1: 0 + - _GlobalMaskSlider_10: 0 + - _GlobalMaskSlider_11: 0 + - _GlobalMaskSlider_12: 0 + - _GlobalMaskSlider_13: 0 + - _GlobalMaskSlider_14: 0 + - _GlobalMaskSlider_15: 0 + - _GlobalMaskSlider_2: 0 + - _GlobalMaskSlider_3: 0 + - _GlobalMaskSlider_4: 0 + - _GlobalMaskSlider_5: 0 + - _GlobalMaskSlider_6: 0 + - _GlobalMaskSlider_7: 0 + - _GlobalMaskSlider_8: 0 + - _GlobalMaskSlider_9: 0 + - _GlobalMaskTexture0Split: 0 + - _GlobalMaskTexture0UV: 0 + - _GlobalMaskTexture1Split: 0 + - _GlobalMaskTexture1UV: 0 + - _GlobalMaskTexture2Split: 0 + - _GlobalMaskTexture2UV: 0 + - _GlobalMaskTexture3Split: 0 + - _GlobalMaskTexture3UV: 0 + - _GlobalMaskTexturesEnable: 0 + - _GlobalMaskToggleOff_0: 0 + - _GlobalMaskToggleOff_1: 0 + - _GlobalMaskToggleOff_10: 0 + - _GlobalMaskToggleOff_11: 0 + - _GlobalMaskToggleOff_12: 0 + - _GlobalMaskToggleOff_13: 0 + - _GlobalMaskToggleOff_14: 0 + - _GlobalMaskToggleOff_15: 0 + - _GlobalMaskToggleOff_2: 0 + - _GlobalMaskToggleOff_3: 0 + - _GlobalMaskToggleOff_4: 0 + - _GlobalMaskToggleOff_5: 0 + - _GlobalMaskToggleOff_6: 0 + - _GlobalMaskToggleOff_7: 0 + - _GlobalMaskToggleOff_8: 0 + - _GlobalMaskToggleOff_9: 0 + - _GlobalMaskToggleOn_0: 0 + - _GlobalMaskToggleOn_1: 0 + - _GlobalMaskToggleOn_10: 0 + - _GlobalMaskToggleOn_11: 0 + - _GlobalMaskToggleOn_12: 0 + - _GlobalMaskToggleOn_13: 0 + - _GlobalMaskToggleOn_14: 0 + - _GlobalMaskToggleOn_15: 0 + - _GlobalMaskToggleOn_2: 0 + - _GlobalMaskToggleOn_3: 0 + - _GlobalMaskToggleOn_4: 0 + - _GlobalMaskToggleOn_5: 0 + - _GlobalMaskToggleOn_6: 0 + - _GlobalMaskToggleOn_7: 0 + - _GlobalMaskToggleOn_8: 0 + - _GlobalMaskToggleOn_9: 0 + - _GlobalMaskVertexColorAlpha: 0 + - _GlobalMaskVertexColorAlphaBlendType: 2 + - _GlobalMaskVertexColorBlue: 0 + - _GlobalMaskVertexColorBlueBlendType: 2 + - _GlobalMaskVertexColorGreen: 0 + - _GlobalMaskVertexColorGreenBlendType: 2 + - _GlobalMaskVertexColorLinearSpace: 1 + - _GlobalMaskVertexColorRed: 0 + - _GlobalMaskVertexColorRedBlendType: 2 + - _GlobalThemeHue0: 0 + - _GlobalThemeHue1: 0 + - _GlobalThemeHue2: 0 + - _GlobalThemeHue3: 0 + - _GlobalThemeHueSpeed0: 0 + - _GlobalThemeHueSpeed1: 0 + - _GlobalThemeHueSpeed2: 0 + - _GlobalThemeHueSpeed3: 0 + - _GlobalThemeSaturation0: 0 + - _GlobalThemeSaturation1: 0 + - _GlobalThemeSaturation2: 0 + - _GlobalThemeSaturation3: 0 + - _GlobalThemeValue0: 0 + - _GlobalThemeValue1: 0 + - _GlobalThemeValue2: 0 + - _GlobalThemeValue3: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GreenAlphaAdd: 0 + - _GreenColorThemeIndex: 0 + - _GreenTextureStochastic: 0 + - _GreenTextureUV: 0 + - _HeightMapUV: 0 + - _HeightOffset: 0 + - _HeightStepsMax: 128 + - _HeightStepsMin: 10 + - _HeightStrength: 0.005 + - _HeightmaskChannel: 0 + - _HeightmaskInvert: 0 + - _HeightmaskUV: 0 + - _HighColorThemeIndex: 0 + - _HighColor_Power: 0.2 + - _HighColor_TexUV: 0 + - _IgnoreCastedShadows: 0 + - _IgnoreFog: 0 + - _Is_BlendAddToHiColor: 0 + - _Is_LightColor_Ap_Rim2Light: 1 + - _Is_LightColor_Ap_RimLight: 1 + - _Is_LightColor_Rim2Light: 1 + - _Is_LightColor_RimLight: 1 + - _Is_NormalMapToRim2Light: 1 + - _Is_NormalMapToRimLight: 1 + - _Is_SpecularToHighColor: 0 + - _LTCGIEnabled: 0 + - _LTCGI_AnimToggle: 1 + - _LTCGI_Attribution: 0 + - _LTCGI_DiffuseColorThemeIndex: 0 + - _LTCGI_Metallic: 0 + - _LTCGI_Smoothness: 0 + - _LTCGI_SpecularColorThemeIndex: 0 + - _LTCGI_UseEO: 0 + - _LTCGI_UsePBR: 1 + - _Layer1Strength: 1 + - _Layer2Size: 0 + - _Layer2Strength: 0 + - _Length: 0 + - _LightDataAOGlobalMaskBlendTypeR: 2 + - _LightDataAOGlobalMaskR: 0 + - _LightDataAOStrengthA: 0 + - _LightDataAOStrengthB: 0 + - _LightDataAOStrengthG: 0 + - _LightDataAOStrengthR: 1 + - _LightDataDebugEnabled: 0 + - _LightDataDetailShadowGlobalMaskBlendTypeR: 2 + - _LightDataDetailShadowGlobalMaskR: 0 + - _LightDataSDFBlendY: 1 + - _LightDataSDFMapLOD: 0 + - _LightDataSDFMapUV: 0 + - _LightDataShadowMaskGlobalMaskBlendTypeR: 2 + - _LightDataShadowMaskGlobalMaskR: 0 + - _LightDirection_MaskOn: 0 + - _LightDirection_MaskOn2: 0 + - _LightingAOMapsUV: 0 + - _LightingAddDetailShadowStrengthA: 0 + - _LightingAddDetailShadowStrengthB: 0 + - _LightingAddDetailShadowStrengthG: 0 + - _LightingAddDetailShadowStrengthR: 1 + - _LightingAdditiveCastedShadows: 1 + - _LightingAdditiveEnable: 1 + - _LightingAdditiveGradientEnd: 0.5 + - _LightingAdditiveGradientStart: 0 + - _LightingAdditiveLimit: 1 + - _LightingAdditiveLimited: 1 + - _LightingAdditiveMonochromatic: 0 + - _LightingAdditivePassthrough: 0.5 + - _LightingAdditiveType: 3 + - _LightingCap: 1 + - _LightingCapEnabled: 1 + - _LightingCastedShadows: 0 + - _LightingColorMode: 0 + - _LightingDebugVisualize: 0 + - _LightingDetailShadowMapsUV: 0 + - _LightingDetailShadowStrengthA: 0 + - _LightingDetailShadowStrengthB: 0 + - _LightingDetailShadowStrengthG: 0 + - _LightingDetailShadowStrengthR: 1 + - _LightingDirectionMode: 0 + - _LightingEnableLightVolumes: 1 + - _LightingForceColorEnabled: 0 + - _LightingForcedColorThemeIndex: 0 + - _LightingGradientEnd: 0.5 + - _LightingGradientStart: 0 + - _LightingIgnoreAmbientColor: 1 + - _LightingIndirectUsesNormals: 0 + - _LightingMapMode: 0 + - _LightingMinLightBrightness: 0 + - _LightingMirrorVertexLightingEnabled: 1 + - _LightingMode: 6 + - _LightingMonochromatic: 0 + - _LightingMulitlayerNonLinear: 1 + - _LightingShadowMaskStrengthA: 0 + - _LightingShadowMaskStrengthB: 0 + - _LightingShadowMaskStrengthG: 0 + - _LightingShadowMaskStrengthR: 1 + - _LightingShadowMasksUV: 0 + - _LightingVertexLightingEnabled: 1 + - _LightingViewDirOffsetPitch: 0 + - _LightingViewDirOffsetYaw: 0 + - _LightingWrappedNormalization: 0 + - _LightingWrappedWrap: 0 + - _LineColorThemeIndex: 0 + - _LineWidth: 1 + - _LookAtAlphaAlpha: 1 + - _LookAtAlphaMaskEnabled: 0 + - _LookAtAlphaTargetUp: 0 + - _LookAtBlueAlpha: 1 + - _LookAtBlueMaskEnabled: 0 + - _LookAtBlueTargetUp: 0 + - _LookAtGreenAlpha: 1 + - _LookAtGreenMaskEnabled: 0 + - _LookAtGreenTargetUp: 0 + - _LookAtMaskUV: 0 + - _LookAtRedAlpha: 1 + - _LookAtRedMaskEnabled: 1 + - _LookAtRedTargetUp: 0 + - _LookAtVisibilityEnabled: 0 + - _LookAtVisibilityMirror: 0 + - _LookAtVisibilityMode: 1 + - _LookAtVisibilityVRCCameraDesktop: 1 + - _LookAtVisibilityVRCCameraScreenshot: 1 + - _LookAtVisibilityVRCCameraVR: 1 + - _LookAtVisibilityVRCMirrorDesktop: 1 + - _LookAtVisibilityVRCMirrorVR: 1 + - _LookAtVisibilityVRCRegular: 1 + - _MainALHueShiftBand: 0 + - _MainALHueShiftCTIndex: 0 + - _MainAlphaMaskMode: 2 + - _MainBrightness: 0 + - _MainBrightnessGlobalMask: 0 + - _MainBrightnessGlobalMaskBlendType: 2 + - _MainColorAdjustTextureUV: 0 + - _MainColorAdjustToggle: 0 + - _MainGamma: 1 + - _MainGammaGlobalMask: 0 + - _MainGammaGlobalMaskBlendType: 2 + - _MainGradationStrength: 0 + - _MainHueALCTEnabled: 0 + - _MainHueALMotionSpeed: 1 + - _MainHueGlobalMask: 0 + - _MainHueGlobalMaskBlendType: 2 + - _MainHueShift: 0 + - _MainHueShiftColorSpace: 0 + - _MainHueShiftReplace: 1 + - _MainHueShiftSelectOrShift: 1 + - _MainHueShiftSpeed: 0 + - _MainHueShiftToggle: 0 + - _MainIgnoreTexAlpha: 0 + - _MainPixelMode: 0 + - _MainSaturationGlobalMask: 0 + - _MainSaturationGlobalMaskBlendType: 2 + - _MainTexStochastic: 0 + - _MainTexUV: 0 + - _MainUseVertexColorAlpha: 0 + - _MainVertexColoring: 0 + - _MainVertexColoringEnabled: 0 + - _MainVertexColoringLinearSpace: 1 + - _Matcap0ALAlphaAddBand: 0 + - _Matcap0ALChronoPanBand: 0 + - _Matcap0ALChronoPanSpeed: 0 + - _Matcap0ALChronoPanType: 0 + - _Matcap0ALEmissionAddBand: 0 + - _Matcap0ALEnabled: 0 + - _Matcap0ALIntensityAddBand: 0 + - _Matcap0CircleMaskBlur: 0.1 + - _Matcap0CircleMaskBorder: 0.45 + - _Matcap0CircleMaskEnabled: 0 + - _Matcap0CustomNormal: 0 + - _Matcap0NormalMapScale: 1 + - _Matcap0NormalMapUV: 0 + - _Matcap1ALAlphaAddBand: 0 + - _Matcap1ALChronoPanBand: 0 + - _Matcap1ALChronoPanSpeed: 0 + - _Matcap1ALChronoPanType: 0 + - _Matcap1ALEmissionAddBand: 0 + - _Matcap1ALEnabled: 0 + - _Matcap1ALIntensityAddBand: 0 + - _Matcap1CustomNormal: 0 + - _Matcap1NormalMapScale: 1 + - _Matcap1NormalMapUV: 0 + - _Matcap2ALAlphaAddBand: 0 + - _Matcap2ALChronoPanBand: 0 + - _Matcap2ALChronoPanSpeed: 0 + - _Matcap2ALChronoPanType: 0 + - _Matcap2ALEmissionAddBand: 0 + - _Matcap2ALEnabled: 0 + - _Matcap2ALIntensityAddBand: 0 + - _Matcap2Add: 0 + - _Matcap2AddToLight: 0 + - _Matcap2AlphaOverride: 0 + - _Matcap2ApplyToAlphaBlendType: 0 + - _Matcap2ApplyToAlphaBlending: 1 + - _Matcap2ApplyToAlphaEnabled: 0 + - _Matcap2ApplyToAlphaSourceBlend: 0 + - _Matcap2BaseColorMix: 0 + - _Matcap2Border: 0.5 + - _Matcap2CircleMaskBlur: 0.1 + - _Matcap2CircleMaskBorder: 0.45 + - _Matcap2CircleMaskEnabled: 0 + - _Matcap2ColorThemeIndex: 0 + - _Matcap2CustomNormal: 0 + - _Matcap2EmissionStrength: 0 + - _Matcap2Enable: 0 + - _Matcap2HueSelectOrShift: 1 + - _Matcap2HueShift: 0 + - _Matcap2HueShiftColorSpace: 0 + - _Matcap2HueShiftEnabled: 0 + - _Matcap2HueShiftSpeed: 0 + - _Matcap2Intensity: 1 + - _Matcap2LightColorMix: 0 + - _Matcap2LightMask: 0 + - _Matcap2MaskChannel: 0 + - _Matcap2MaskGlobalMask: 0 + - _Matcap2MaskGlobalMaskBlendType: 2 + - _Matcap2MaskInvert: 0 + - _Matcap2MaskSmoothnessApply: 0 + - _Matcap2MaskSmoothnessChannel: 3 + - _Matcap2MaskUV: 0 + - _Matcap2Mixed: 0 + - _Matcap2Multiply: 0 + - _Matcap2Normal: 1 + - _Matcap2NormalMapScale: 1 + - _Matcap2NormalMapUV: 0 + - _Matcap2Replace: 0 + - _Matcap2Rotation: 0 + - _Matcap2Screen: 0 + - _Matcap2Smoothness: 1 + - _Matcap2TPSDepthEnabled: 0 + - _Matcap2TPSMaskStrength: 1 + - _Matcap2UVMode: 1 + - _Matcap2UVToBlend: 1 + - _Matcap3ALAlphaAddBand: 0 + - _Matcap3ALChronoPanBand: 0 + - _Matcap3ALChronoPanSpeed: 0 + - _Matcap3ALChronoPanType: 0 + - _Matcap3ALEmissionAddBand: 0 + - _Matcap3ALEnabled: 0 + - _Matcap3ALIntensityAddBand: 0 + - _Matcap3Add: 0 + - _Matcap3AddToLight: 0 + - _Matcap3AlphaOverride: 0 + - _Matcap3ApplyToAlphaBlendType: 0 + - _Matcap3ApplyToAlphaBlending: 1 + - _Matcap3ApplyToAlphaEnabled: 0 + - _Matcap3ApplyToAlphaSourceBlend: 0 + - _Matcap3BaseColorMix: 0 + - _Matcap3Border: 0.5 + - _Matcap3CircleMaskBlur: 0.1 + - _Matcap3CircleMaskBorder: 0.45 + - _Matcap3CircleMaskEnabled: 0 + - _Matcap3ColorThemeIndex: 0 + - _Matcap3CustomNormal: 0 + - _Matcap3EmissionStrength: 0 + - _Matcap3Enable: 0 + - _Matcap3HueSelectOrShift: 1 + - _Matcap3HueShift: 0 + - _Matcap3HueShiftColorSpace: 0 + - _Matcap3HueShiftEnabled: 0 + - _Matcap3HueShiftSpeed: 0 + - _Matcap3Intensity: 1 + - _Matcap3LightColorMix: 0 + - _Matcap3LightMask: 0 + - _Matcap3MaskChannel: 0 + - _Matcap3MaskGlobalMask: 0 + - _Matcap3MaskGlobalMaskBlendType: 2 + - _Matcap3MaskInvert: 0 + - _Matcap3MaskSmoothnessApply: 0 + - _Matcap3MaskSmoothnessChannel: 3 + - _Matcap3MaskUV: 0 + - _Matcap3Mixed: 0 + - _Matcap3Multiply: 0 + - _Matcap3Normal: 1 + - _Matcap3NormalMapScale: 1 + - _Matcap3NormalMapUV: 0 + - _Matcap3Replace: 0 + - _Matcap3Rotation: 0 + - _Matcap3Screen: 0 + - _Matcap3Smoothness: 1 + - _Matcap3TPSDepthEnabled: 0 + - _Matcap3TPSMaskStrength: 1 + - _Matcap3UVMode: 1 + - _Matcap3UVToBlend: 1 + - _Matcap4Add: 0 + - _Matcap4AddToLight: 0 + - _Matcap4AlphaOverride: 0 + - _Matcap4ApplyToAlphaBlendType: 0 + - _Matcap4ApplyToAlphaBlending: 1 + - _Matcap4ApplyToAlphaEnabled: 0 + - _Matcap4ApplyToAlphaSourceBlend: 0 + - _Matcap4BaseColorMix: 0 + - _Matcap4Border: 0.5 + - _Matcap4CircleMaskBlur: 0.1 + - _Matcap4CircleMaskBorder: 0.45 + - _Matcap4CircleMaskEnabled: 0 + - _Matcap4ColorThemeIndex: 0 + - _Matcap4EmissionStrength: 0 + - _Matcap4Enable: 0 + - _Matcap4HueSelectOrShift: 1 + - _Matcap4HueShift: 0 + - _Matcap4HueShiftColorSpace: 0 + - _Matcap4HueShiftEnabled: 0 + - _Matcap4HueShiftSpeed: 0 + - _Matcap4Intensity: 1 + - _Matcap4LightColorMix: 0 + - _Matcap4LightMask: 0 + - _Matcap4MaskChannel: 0 + - _Matcap4MaskGlobalMask: 0 + - _Matcap4MaskGlobalMaskBlendType: 2 + - _Matcap4MaskInvert: 0 + - _Matcap4MaskSmoothnessApply: 0 + - _Matcap4MaskSmoothnessChannel: 3 + - _Matcap4MaskUV: 0 + - _Matcap4Mixed: 0 + - _Matcap4Multiply: 0 + - _Matcap4Normal: 1 + - _Matcap4Replace: 0 + - _Matcap4Rotation: 0 + - _Matcap4Screen: 0 + - _Matcap4Smoothness: 1 + - _Matcap4TPSDepthEnabled: 0 + - _Matcap4TPSMaskStrength: 1 + - _Matcap4UVMode: 1 + - _Matcap4UVToBlend: 1 + - _MatcapAdd: 0 + - _MatcapAddToLight: 0 + - _MatcapAlphaOverride: 0 + - _MatcapApplyToAlphaBlendType: 0 + - _MatcapApplyToAlphaBlending: 1 + - _MatcapApplyToAlphaEnabled: 0 + - _MatcapApplyToAlphaSourceBlend: 0 + - _MatcapBaseColorMix: 0 + - _MatcapBorder: 0.5 + - _MatcapColorThemeIndex: 0 + - _MatcapEmissionStrength: 0 + - _MatcapEnable: 0 + - _MatcapHueSelectOrShift: 1 + - _MatcapHueShift: 0 + - _MatcapHueShiftColorSpace: 0 + - _MatcapHueShiftEnabled: 0 + - _MatcapHueShiftSpeed: 0 + - _MatcapIntensity: 1 + - _MatcapLightColorMix: 0 + - _MatcapLightMask: 0 + - _MatcapMaskChannel: 0 + - _MatcapMaskGlobalMask: 0 + - _MatcapMaskGlobalMaskBlendType: 2 + - _MatcapMaskInvert: 0 + - _MatcapMaskSmoothnessApply: 0 + - _MatcapMaskSmoothnessChannel: 3 + - _MatcapMaskUV: 0 + - _MatcapMixed: 0 + - _MatcapMultiply: 0 + - _MatcapNormal: 1 + - _MatcapReplace: 1 + - _MatcapRotation: 0 + - _MatcapScreen: 0 + - _MatcapSmoothness: 1 + - _MatcapTPSDepthEnabled: 0 + - _MatcapTPSMaskStrength: 1 + - _MatcapUVMode: 1 + - _MatcapUVToBlend: 1 + - _Metallic: 0 + - _Mirror: 0 + - _MirrorColorThemeIndex: 0 + - _MirrorTextureBlendType: 0 + - _MirrorTextureEnabled: 0 + - _MirrorTextureForceEnabled: 0 + - _MirrorTextureUV: 0 + - _MochieBRDF: 1 + - _MochieForceFallback: 0 + - _MochieGSAAEnabled: 1 + - _MochieLitFallback: 1 + - _MochieMetallicGlobalMask: 0 + - _MochieMetallicGlobalMaskBlendType: 2 + - _MochieMetallicMapInvert: 0 + - _MochieMetallicMapsMetallicChannel: 0 + - _MochieMetallicMapsReflectionMaskChannel: 2 + - _MochieMetallicMapsRoughnessChannel: 1 + - _MochieMetallicMapsSpecularMaskChannel: 3 + - _MochieMetallicMapsStochastic: 0 + - _MochieMetallicMapsUV: 0 + - _MochieMetallicMasksUV: 0 + - _MochieMetallicMultiplier: 0.494 + - _MochieReflectionMaskInvert: 0 + - _MochieReflectionStrength: 1 + - _MochieReflectionStrengthGlobalMask: 0 + - _MochieReflectionStrengthGlobalMaskBlendType: 2 + - _MochieReflectionTintThemeIndex: 0 + - _MochieRoughnessMapInvert: 0 + - _MochieRoughnessMultiplier: 1 + - _MochieRoughnessMultiplier2: 1 + - _MochieSmoothnessGlobalMask: 0 + - _MochieSmoothnessGlobalMaskBlendType: 2 + - _MochieSpecularMaskInvert: 0 + - _MochieSpecularStrength: 5 + - _MochieSpecularStrength2: 1 + - _MochieSpecularStrengthGlobalMask: 0 + - _MochieSpecularStrengthGlobalMaskBlendType: 2 + - _MochieSpecularTintThemeIndex: 0 + - _Mode: 4 + - _ModelAngleMax: 90 + - _ModelAngleMin: 45 + - _MultilayerMathBlurMapUV: 0 + - _NormalCorrect: 0 + - _NormalCorrectAmount: 0.9 + - _OcclusionStrength: 1 + - _OffsetFactor: 0 + - _OffsetUnits: 0 + - _Offset_Z: 0 + - _OrifaceEnabled: 0 + - _OrificeChannel: 0 + - _OutlineALColorEnabled: 0 + - _OutlineAlphaDistanceFade: 0 + - _OutlineAlphaDistanceFadeMax: 0 + - _OutlineAlphaDistanceFadeMaxAlpha: 1 + - _OutlineAlphaDistanceFadeMin: 0 + - _OutlineAlphaDistanceFadeMinAlpha: 0 + - _OutlineAlphaDistanceFadeType: 1 + - _OutlineBlendOp: 0 + - _OutlineBlendOpAlpha: 4 + - _OutlineClipAtZeroWidth: 1 + - _OutlineCull: 1 + - _OutlineDstBlend: 1 + - _OutlineDstBlendAlpha: 1 + - _OutlineEmission: 0 + - _OutlineExpansionMode: 1 + - _OutlineFixWidth: 0.5 + - _OutlineFixedSize: 1 + - _OutlineGamma: 1 + - _OutlineHue: 0 + - _OutlineHueOffsetSpeed: 0 + - _OutlineHueShift: 0 + - _OutlineLit: 1 + - _OutlineMaskChannel: 0 + - _OutlineMaskUV: 0 + - _OutlineOverrideAlpha: 0 + - _OutlineRimLightBlend: 0 + - _OutlineSaturation: 1 + - _OutlineShadowStrength: 0 + - _OutlineSpace: 0 + - _OutlineSrcBlend: 1 + - _OutlineSrcBlendAlpha: 1 + - _OutlineStencilBackCompareFunction: 8 + - _OutlineStencilBackFailOp: 0 + - _OutlineStencilBackPassOp: 0 + - _OutlineStencilBackZFailOp: 0 + - _OutlineStencilCompareFunction: 8 + - _OutlineStencilFailOp: 0 + - _OutlineStencilFrontCompareFunction: 8 + - _OutlineStencilFrontFailOp: 0 + - _OutlineStencilFrontPassOp: 0 + - _OutlineStencilFrontZFailOp: 0 + - _OutlineStencilPassOp: 0 + - _OutlineStencilReadMask: 255 + - _OutlineStencilRef: 0 + - _OutlineStencilType: 0 + - _OutlineStencilWriteMask: 255 + - _OutlineStencilZFailOp: 0 + - _OutlineTextureUV: 0 + - _OutlineTintMix: 0 + - _OutlineUseVertexColorNormals: 0 + - _OutlineValue: 1 + - _OutlineVertexColorMask: 0 + - _OutlineVertexColorMaskStrength: 1 + - _OutlineZOffsetChannel: 0 + - _OutlineZOffsetInvertMaskChannel: 0 + - _OutlineZOffsetMaskStrength: 1 + - _OutlineZOffsetVertexColor: 0 + - _OutlineZOffsetVertexColorStrength: 1 + - _OutlineZTest: 4 + - _OutlineZWrite: 1 + - _OutlinesMaxDistance: 1 + - _PBRNormalSelect: 1 + - _PBRSplitMaskSample: 0 + - _PBRSplitMaskStochastic: 0 + - _PPBrightness: 1 + - _PPContrast: 1 + - _PPEmissionMultiplier: 1 + - _PPFinalColorMultiplier: 1 + - _PPHDR: 0 + - _PPHelp: 0 + - _PPHue: 0 + - _PPHueShiftColorSpace: 0 + - _PPLightingAddition: 0 + - _PPLightingMultiplier: 1 + - _PPLightness: 0 + - _PPMaskChannel: 0 + - _PPMaskInvert: 0 + - _PPMaskUV: 0 + - _PPPosterization: 0 + - _PPPosterizationAmount: 4 + - _PPSaturation: 1 + - _PanoUseBothEyes: 1 + - _Parallax: 0.02 + - _ParallaxAnisotropic: 1 + - _ParallaxAnisotropyScale: 1 + - _ParallaxBinarySteps: 8 + - _ParallaxConeRatio: 1 + - _ParallaxInternalBlendMode: 0 + - _ParallaxInternalHeightFromAlpha: 0 + - _ParallaxInternalHeightmapMode: 0 + - _ParallaxInternalHueSelectOrShift: 1 + - _ParallaxInternalHueShift: 0 + - _ParallaxInternalHueShiftColorSpace: 0 + - _ParallaxInternalHueShiftEnabled: 0 + - _ParallaxInternalHueShiftPerLevel: 0 + - _ParallaxInternalHueShiftSpeed: 0 + - _ParallaxInternalIterations: 4 + - _ParallaxInternalMapMaskChannel: 0 + - _ParallaxInternalMapMaskUV: 0 + - _ParallaxInternalMaxColorThemeIndex: 0 + - _ParallaxInternalMaxDepth: 0.1 + - _ParallaxInternalMaxFade: 0.1 + - _ParallaxInternalMinColorThemeIndex: 0 + - _ParallaxInternalMinDepth: 0 + - _ParallaxInternalMinFade: 1 + - _ParallaxInternalSurfaceBlendMode: 8 + - _ParallaxMipBias: 0 + - _ParallaxRelaxedCone: 1 + - _ParallaxUV: 0 + - _PathALAutoCorrelator: 0 + - _PathALAutoCorrelatorA: 0 + - _PathALAutoCorrelatorB: 0 + - _PathALAutoCorrelatorG: 0 + - _PathALAutoCorrelatorMode: 0 + - _PathALAutoCorrelatorR: 0 + - _PathALCCA: 0 + - _PathALCCB: 0 + - _PathALCCG: 0 + - _PathALCCR: 0 + - _PathALChrono: 0 + - _PathALColorChord: 0 + - _PathALEmissionOffset: 0 + - _PathALHistory: 0 + - _PathALHistoryA: 0 + - _PathALHistoryB: 0 + - _PathALHistoryBandA: 0 + - _PathALHistoryBandB: 0 + - _PathALHistoryBandG: 0 + - _PathALHistoryBandR: 0 + - _PathALHistoryG: 0 + - _PathALHistoryMode: 0 + - _PathALHistoryR: 0 + - _PathALTimeOffset: 0 + - _PathALWidthOffset: 0 + - _PathChronoBandA: 0 + - _PathChronoBandB: 0 + - _PathChronoBandG: 0 + - _PathChronoBandR: 0 + - _PathChronoSpeedA: 0 + - _PathChronoSpeedB: 0 + - _PathChronoSpeedG: 0 + - _PathChronoSpeedR: 0 + - _PathChronoTypeA: 0 + - _PathChronoTypeB: 0 + - _PathChronoTypeG: 0 + - _PathChronoTypeR: 0 + - _PathColorAThemeIndex: 0 + - _PathColorBThemeIndex: 0 + - _PathColorGThemeIndex: 0 + - _PathColorRThemeIndex: 0 + - _PathGradientType: 0 + - _PathPointSampling: 1 + - _PathSource: 0 + - _PathSourceDirA: 0 + - _PathSourceDirB: 0 + - _PathSourceDirG: 0 + - _PathSourceDirR: 0 + - _PathSurfaceBlendMode: 0 + - _PathTypeA: 2 + - _PathTypeB: 2 + - _PathTypeG: 2 + - _PathTypeR: 2 + - _PathingColorMapUV: 0 + - _PathingMapUV: 0 + - _PathingOverrideAlpha: 0 + - _PathingUVSelect: 0 + - _PenetratorEnabled: 0 + - _PoiGSAAThreshold: 0.1 + - _PoiGSAAVariance: 0.15 + - _PoiInternalParallax: 0 + - _PoiParallax: 0 + - _PoiUTSStyleOutlineBlend: 0 + - _PolarLengthScale: 1 + - _PolarRadialScale: 1 + - _PolarSpiralPower: 0 + - _PolarUV: 0 + - _PostProcess: 0 + - _RGBAAlphaBlendType: 0 + - _RGBAAlphaEmissionStrength: 0 + - _RGBAAlphaEnable: 0 + - _RGBAAlphaMetallicInvert: 0 + - _RGBAAlphaPBRSplitMaskSample: 0 + - _RGBAAlphaPBRSplitMaskStochastic: 0 + - _RGBAAlphaPBRUV: 0 + - _RGBAAlphaSmoothnessInvert: 0 + - _RGBABlueBlendType: 0 + - _RGBABlueEmissionStrength: 0 + - _RGBABlueEnable: 0 + - _RGBABlueMetallicInvert: 0 + - _RGBABluePBRSplitMaskSample: 0 + - _RGBABluePBRSplitMaskStochastic: 0 + - _RGBABluePBRUV: 0 + - _RGBABlueSmoothnessInvert: 0 + - _RGBAGreenBlendType: 0 + - _RGBAGreenEmissionStrength: 0 + - _RGBAGreenEnable: 0 + - _RGBAGreenMetallicInvert: 0 + - _RGBAGreenPBRSplitMaskSample: 0 + - _RGBAGreenPBRSplitMaskStochastic: 0 + - _RGBAGreenPBRUV: 0 + - _RGBAGreenSmoothnessInvert: 0 + - _RGBAMetallicMapsStochastic: 0 + - _RGBAMetallicMapsUV: 0 + - _RGBAPBRAlphaEnabled: 0 + - _RGBAPBRBlueEnabled: 0 + - _RGBAPBRGreenEnabled: 0 + - _RGBAPBRRedEnabled: 0 + - _RGBARedBlendType: 0 + - _RGBARedEmissionStrength: 0 + - _RGBARedEnable: 0 + - _RGBARedMetallicInvert: 0 + - _RGBARedPBRSplitMaskSample: 0 + - _RGBARedPBRSplitMaskStochastic: 0 + - _RGBARedPBRUV: 0 + - _RGBARedSmoothnessInvert: 0 + - _RGBASmoothnessMapsStochastic: 0 + - _RGBASmoothnessMapsUV: 0 + - _RGBMaskEnabled: 0 + - _RGBMaskType: 0 + - _RGBMaskUV: 0 + - _RalivAdvancedHelp: 0 + - _RalivDPSDisableShadowCaster: 1 + - _RalivDPSDisableShadowCasterHelp: 0 + - _RalivHelp: 0 + - _ReCurvature: 0 + - _RedAlphaAdd: 0 + - _RedColorThemeIndex: 0 + - _RedTextureStochastic: 0 + - _RedTextureUV: 0 + - _RefSpecFresnelStrength: 0.5 + - _Reflectance: 0.04 + - _ReflectionAnisotropicStretch: 1 + - _ReflectionApplyTransparency: 1 + - _ReflectionBlendMode: 1 + - _ReflectionCubeEnableLighting: 1 + - _ReflectionCubeOverride: 0 + - _ReflectionNormalStrength: 1 + - _RenderingAOBlockerEnabled: 0 + - _RenderingAOBlockerFlipNormal: 0 + - _RenderingAOBlockerNote: 0 + - _RenderingAOBlockerUVChannel: 0 + - _RenderingEarlyZEnabled: 0 + - _RenderingReduceClipDistance: 0 + - _RgbAlphaGlobalMaskBlendType: 2 + - _RgbAlphaGlobalMaskChannel: 0 + - _RgbAlphaMaskChannel: 3 + - _RgbBlueGlobalMaskBlendType: 2 + - _RgbBlueGlobalMaskChannel: 0 + - _RgbBlueMaskChannel: 2 + - _RgbGreenGlobalMaskBlendType: 2 + - _RgbGreenGlobalMaskChannel: 0 + - _RgbGreenMaskChannel: 1 + - _RgbNormalAGlobalMaskBlendType: 2 + - _RgbNormalAGlobalMaskChannel: 0 + - _RgbNormalAMaskChannel: 3 + - _RgbNormalAScale: 0 + - _RgbNormalAStochastic: 0 + - _RgbNormalAUV: 0 + - _RgbNormalAlphaBlendMode: 0 + - _RgbNormalBGlobalMaskBlendType: 2 + - _RgbNormalBGlobalMaskChannel: 0 + - _RgbNormalBMaskChannel: 2 + - _RgbNormalBScale: 0 + - _RgbNormalBStochastic: 0 + - _RgbNormalBUV: 0 + - _RgbNormalBlueBlendMode: 0 + - _RgbNormalGGlobalMaskBlendType: 2 + - _RgbNormalGGlobalMaskChannel: 0 + - _RgbNormalGMaskChannel: 1 + - _RgbNormalGScale: 0 + - _RgbNormalGStochastic: 0 + - _RgbNormalGUV: 0 + - _RgbNormalGreenBlendMode: 0 + - _RgbNormalRGlobalMaskBlendType: 2 + - _RgbNormalRGlobalMaskChannel: 0 + - _RgbNormalRMaskChannel: 0 + - _RgbNormalRScale: 0 + - _RgbNormalRStochastic: 0 + - _RgbNormalRUV: 0 + - _RgbNormalRedBlendMode: 0 + - _RgbRedGlobalMaskBlendType: 2 + - _RgbRedGlobalMaskChannel: 0 + - _RgbRedMaskChannel: 0 + - _Rim2ApColorThemeIndex: 0 + - _Rim2ApplyAlpha: 0 + - _Rim2ApplyAlphaBlend: 1 + - _Rim2ApplyGlobalMaskBlendType: 2 + - _Rim2ApplyGlobalMaskIndex: 0 + - _Rim2BackfaceMask: 1 + - _Rim2BaseColorMix: 0 + - _Rim2BiasIntensity: 0 + - _Rim2BlendMode: 1 + - _Rim2BlendStrength: 1 + - _Rim2Blur: 0.65 + - _Rim2Border: 0.5 + - _Rim2Brightness: 1 + - _Rim2ColorTexUV: 0 + - _Rim2DirRange: 0 + - _Rim2DirStrength: 0 + - _Rim2EnableLighting: 1 + - _Rim2FresnelPower: 3.5 + - _Rim2GlobalMask: 0 + - _Rim2GlobalMaskBlendType: 2 + - _Rim2HueSelectOrShift: 1 + - _Rim2HueShift: 0 + - _Rim2HueShiftColorSpace: 0 + - _Rim2HueShiftEnabled: 0 + - _Rim2HueShiftSpeed: 0 + - _Rim2IndirBlur: 0.1 + - _Rim2IndirBorder: 0.5 + - _Rim2IndirRange: 0 + - _Rim2LightColorThemeIndex: 0 + - _Rim2Light_FeatherOff: 0 + - _Rim2Light_InsideMask: 0.0001 + - _Rim2Light_Power: 0.1 + - _Rim2LightingInvert: 0 + - _Rim2MainStrength: 0 + - _Rim2MaskChannel: 0 + - _Rim2MaskInvert: 0 + - _Rim2MaskOnlyMask: 0 + - _Rim2MaskUV: 0 + - _Rim2NormalStrength: 1 + - _Rim2Power: 1 + - _Rim2ShadowMask: 0.5 + - _Rim2ShadowMaskInvert: 0 + - _Rim2ShadowMaskRampType: 0 + - _Rim2ShadowMaskStrength: 1 + - _Rim2ShadowToggle: 0 + - _Rim2ShadowWidth: 0 + - _Rim2Sharpness: 0.25 + - _Rim2Strength: 0 + - _Rim2Style: 0 + - _Rim2TexUV: 0 + - _Rim2VRParallaxStrength: 1 + - _Rim2Width: 0.8 + - _RimApColorThemeIndex: 0 + - _RimApplyAlpha: 0 + - _RimApplyAlphaBlend: 1 + - _RimApplyGlobalMaskBlendType: 2 + - _RimApplyGlobalMaskIndex: 0 + - _RimBackfaceMask: 1 + - _RimBaseColorMix: 0 + - _RimBiasIntensity: 0 + - _RimBlendMode: 1 + - _RimBlendStrength: 1 + - _RimBlur: 0.65 + - _RimBorder: 0.5 + - _RimBrightness: 1 + - _RimColorTexUV: 0 + - _RimDirRange: 0 + - _RimDirStrength: 0 + - _RimEnableLighting: 1 + - _RimEnviroBlur: 0.7 + - _RimEnviroChannel: 0 + - _RimEnviroIntensity: 1 + - _RimEnviroMaskUV: 0 + - _RimEnviroMinBrightness: 0 + - _RimEnviroSharpness: 0 + - _RimEnviroWidth: 0.45 + - _RimFresnelPower: 3.5 + - _RimGlobalMask: 0 + - _RimGlobalMaskBlendType: 2 + - _RimHueSelectOrShift: 1 + - _RimHueShift: 0 + - _RimHueShiftColorSpace: 0 + - _RimHueShiftEnabled: 0 + - _RimHueShiftSpeed: 0 + - _RimIndirBlur: 0.1 + - _RimIndirBorder: 0.5 + - _RimIndirRange: 0 + - _RimLightColorThemeIndex: 0 + - _RimLight_FeatherOff: 0 + - _RimLight_InsideMask: 0.0001 + - _RimLight_Power: 0.1 + - _RimLightingInvert: 0 + - _RimMainStrength: 0 + - _RimMaskChannel: 0 + - _RimMaskInvert: 0 + - _RimMaskOnlyMask: 0 + - _RimMaskUV: 0 + - _RimNormalStrength: 1 + - _RimPoi2BlendMode: 0 + - _RimPoiBlendMode: 0 + - _RimPower: 1 + - _RimShadowMask: 0.5 + - _RimShadowMaskInvert: 0 + - _RimShadowMaskRampType: 0 + - _RimShadowMaskStrength: 1 + - _RimShadowToggle: 0 + - _RimShadowWidth: 0 + - _RimSharpness: 0.25 + - _RimStrength: 0 + - _RimStyle: 0 + - _RimTexUV: 0 + - _RimVRParallaxStrength: 1 + - _RimWidth: 0.8 + - _RoughnessAnisotropy: 1 + - _SDFBlur: 0.1 + - _SDFShadingTextureUV: 0 + - _SFExposureOcclusion: 0 + - _SSAOAlphaFade: 1 + - _SSAOAnimationToggle: 1 + - _SSAOApplyGlobalMaskBlendType: 0 + - _SSAOApplyGlobalMaskIndex: 0 + - _SSAOAsRamp: 0 + - _SSAOBias: 0.003 + - _SSAOBlendType: 2 + - _SSAOCenterImportance: 1 + - _SSAOColorMapUV: 0 + - _SSAOColorThemeIndex: 0 + - _SSAOCone: 0 + - _SSAODepthGetWarning: 0 + - _SSAOEnableColorTexture: 0 + - _SSAOEnableMaskTexture: 0 + - _SSAOEnabled: 0 + - _SSAOFalloffEnd: 8 + - _SSAOFalloffStart: 6 + - _SSAOGlobalMaskBlendType: 2 + - _SSAOGlobalMaskIndex: 0 + - _SSAOHideByRampedLightMap: 0 + - _SSAOIntensity: 1 + - _SSAOMaskChannel: 0 + - _SSAOMaskInvert: 0 + - _SSAOMaskUV: 0 + - _SSAOQuality: 2.4 + - _SSAORadius: 0.002 + - _SSAORandomScale: 0 + - _SSAOUseNormals: 0 + - _SSAOUseSurfaceColor: 0 + - _SSIgnoreCastedShadows: 0 + - _SSSBaseColorMix: 0 + - _SSSDistortion: 1 + - _SSSSpread: 5 + - _SSSStrength: 0.25 + - _SSSThicknessMapChannel: 0 + - _SSSThicknessMapUV: 0 + - _SSSThicknessMod: -1 + - _Saturation: 0 + - _ScrollingEmission: 0 + - _ScrollingEmission1: 0 + - _ScrollingEmission2: 0 + - _ScrollingEmission3: 0 + - _Set_HighColorMaskChannel: 1 + - _Set_HighColorMaskUV: 0 + - _Set_Rim2LightMaskChannel: 1 + - _Set_Rim2LightMaskUV: 0 + - _Set_RimLightMaskChannel: 1 + - _Set_RimLightMaskUV: 0 + - _ShadeColor_Step: 0 + - _ShaderOptimizerEnabled: 1 + - _ShaderUIWarning0: -0 + - _ShaderUIWarning1: -0 + - _ShadingEnabled: 1 + - _ShadingRampedLightMapApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapApplyGlobalMaskIndex: 0 + - _ShadingRampedLightMapInverseApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapInverseApplyGlobalMaskIndex: 0 + - _ShadingShadeMapBlendType: 0 + - _Shadow2ndBlur: 0.3 + - _Shadow2ndBorder: 0.5 + - _Shadow2ndColorTexUV: 0 + - _Shadow2ndReceive: 0 + - _Shadow3rdBlur: 0.1 + - _Shadow3rdBorder: 0.25 + - _Shadow3rdColorTexUV: 0 + - _Shadow3rdReceive: 0 + - _ShadowBlur: 0.1 + - _ShadowBorder: 0.5 + - _ShadowBorderMapToggle: 0 + - _ShadowBorderMaskLOD: 0 + - _ShadowBorderMaskUV: 0 + - _ShadowBorderRange: 0 + - _ShadowColorTexUV: 0 + - _ShadowEnvStrength: 0 + - _ShadowFlatBlur: 1 + - _ShadowFlatBorder: 1 + - _ShadowMainStrength: 0 + - _ShadowMaskType: 0 + - _ShadowOffset: 0 + - _ShadowPostAO: 0 + - _ShadowReceive: 0 + - _ShadowStrength: 1 + - _ShadowStrengthMaskUV: 0 + - _Shape1Depth: 0.1 + - _Shape1Duration: 0.1 + - _Shape2Depth: 0.2 + - _Shape2Duration: 0.1 + - _Shape3Depth: 0.3 + - _Shape3Duration: 0.1 + - _SkinThicknessMapInvert: 0 + - _SkinThicknessMapUV: 0 + - _SkinThicknessPower: 1 + - _Smoothness: 1 + - _SmoothnessTextureChannel: 0 + - _Specular2ndLayer: 0 + - _SpecularBlur: 0 + - _SpecularBorder: 0.5 + - _SpecularHighlights: 1 + - _SpecularNormalStrength: 1 + - _SpecularToon: 1 + - _SphericalDissolveClamp: 0 + - _SphericalDissolveInvert: 0 + - _SphericalDissolveRadius: 1.5 + - _Squeeze: 0 + - _SqueezeDist: 0 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _SssBumpBlur: 0.7 + - _SssScale: 1 + - _StencilBackCompareFunction: 8 + - _StencilBackFailOp: 0 + - _StencilBackPassOp: 0 + - _StencilBackZFailOp: 0 + - _StencilCompareFunction: 8 + - _StencilFailOp: 0 + - _StencilFrontCompareFunction: 8 + - _StencilFrontFailOp: 0 + - _StencilFrontPassOp: 0 + - _StencilFrontZFailOp: 0 + - _StencilPassOp: 0 + - _StencilReadMask: 255 + - _StencilRef: 0 + - _StencilType: 0 + - _StencilWriteMask: 255 + - _StencilZFailOp: 0 + - _StereoEnabled: 0 + - _StochasticDeliotHeitzDensity: 1 + - _StochasticHexFallOffContrast: 0.6 + - _StochasticHexFallOffPower: 7 + - _StochasticHexGridDensity: 1 + - _StochasticHexRotationStrength: 0 + - _StochasticMode: 0 + - _StylizedReflectionMode: 0 + - _StylizedSpecular: 0 + - _StylizedSpecular2Feather: 0 + - _StylizedSpecularFeather: 0 + - _StylizedSpecularIgnoreNormal: 0 + - _StylizedSpecularIgnoreShadow: 0 + - _StylizedSpecularInvertMask: 0 + - _StylizedSpecularNormalStrength: 1 + - _StylizedSpecularStrength: 1 + - _SubsurfaceScattering: 0 + - _TPSHelpbox: 0 + - _TPSPenetratorEnabled: 0 + - _TPS_AnimatedToggle: 1 + - _TPS_BezierSmoothness: 0.4 + - _TPS_BezierStart: 0 + - _TPS_BufferedDepth: 0 + - _TPS_BufferedStrength: 0 + - _TPS_Buldge: 0.3 + - _TPS_BuldgeDistance: 0.2 + - _TPS_BuldgeFalloffDistance: 0.05 + - _TPS_Channel: 0 + - _TPS_ChannelWarning: 0 + - _TPS_IdleGravity: 0 + - _TPS_IdleSkrinkLength: 1 + - _TPS_IdleSkrinkWidth: 1 + - _TPS_IsSkinnedMeshRenderer: 0 + - _TPS_PenetratorLength: 1 + - _TPS_PumpingSpeed: 1 + - _TPS_PumpingStrength: 0 + - _TPS_PumpingWidth: 0.2 + - _TPS_SmoothStart: 1 + - _TPS_Squeeze: 0.3 + - _TPS_SqueezeDistance: 0.2 + - _TextEnabled: 0 + - _TextFPSColorThemeIndex: 0 + - _TextFPSEmissionStrength: 0 + - _TextFPSEnabled: 0 + - _TextFPSRotation: 0 + - _TextFPSUV: 0 + - _TextNumericColorThemeIndex: 0 + - _TextNumericDecimalDigits: 0 + - _TextNumericEmissionStrength: 0 + - _TextNumericEnabled: 0 + - _TextNumericRotation: 0 + - _TextNumericTrimZeroes: 0 + - _TextNumericUV: 0 + - _TextNumericValue: 0 + - _TextNumericWholeDigits: 4 + - _TextPixelRange: 4 + - _TextPositionColorThemeIndex: 0 + - _TextPositionEmissionStrength: 0 + - _TextPositionEnabled: 0 + - _TextPositionRotation: 0 + - _TextPositionUV: 0 + - _TextTimeColorThemeIndex: 0 + - _TextTimeEmissionStrength: 0 + - _TextTimeEnabled: 0 + - _TextTimeRotation: 0 + - _TextTimeUV: 0 + - _ToonRampCount: 1 + - _ToonRampUVSelector: 1 + - _TruchetALAlphaBand: 0 + - _TruchetALAlphaToggle: 0 + - _TruchetALEmissionBand: 0 + - _TruchetALEmissionToggle: 0 + - _TruchetAlpha: 1 + - _TruchetBlendType: 0 + - _TruchetChronoPanBand: 0 + - _TruchetChronoPanToggle: 0 + - _TruchetChronoPanType: 0 + - _TruchetColorThemeIndex: 0 + - _TruchetDensity: 10 + - _TruchetEdgeSharpness: 1 + - _TruchetEmissionStrength: 0 + - _TruchetHideWhenNoAL: 0 + - _TruchetMaskChannel: 0 + - _TruchetMaskGlobalMask: 0 + - _TruchetMaskGlobalMaskBlendType: 2 + - _TruchetMaskIntensity: 1 + - _TruchetMaskInvert: 0 + - _TruchetMaskUV: 0 + - _TruchetOverrideAlpha: 0 + - _TruchetThiccness: 0.1 + - _TruchetUV: 0 + - _Tweak_HighColorMaskLevel: 0 + - _Tweak_LightDirection_MaskLevel: 0 + - _Tweak_LightDirection_MaskLevel2: 0 + - _Tweak_Rim2LightMaskLevel: 0 + - _Tweak_RimLightMaskLevel: 0 + - _UDIMDiscardHelpbox: 0 + - _UDIMDiscardMode: 0 + - _UDIMDiscardRow0_0: 0 + - _UDIMDiscardRow0_1: 0 + - _UDIMDiscardRow0_2: 0 + - _UDIMDiscardRow0_3: 0 + - _UDIMDiscardRow1_0: 0 + - _UDIMDiscardRow1_1: 0 + - _UDIMDiscardRow1_2: 0 + - _UDIMDiscardRow1_3: 0 + - _UDIMDiscardRow2_0: 0 + - _UDIMDiscardRow2_1: 0 + - _UDIMDiscardRow2_2: 0 + - _UDIMDiscardRow2_3: 0 + - _UDIMDiscardRow3_0: 0 + - _UDIMDiscardRow3_1: 0 + - _UDIMDiscardRow3_2: 0 + - _UDIMDiscardRow3_3: 0 + - _UDIMDiscardUV: 0 + - _UDIMFaceDiscardFace: 0 + - _UDIMFaceDiscardRow0_0: 0 + - _UDIMFaceDiscardRow0_1: 0 + - _UDIMFaceDiscardRow0_2: 0 + - _UDIMFaceDiscardRow0_3: 0 + - _UDIMFaceDiscardRow1_0: 0 + - _UDIMFaceDiscardRow1_1: 0 + - _UDIMFaceDiscardRow1_2: 0 + - _UDIMFaceDiscardRow1_3: 0 + - _UDIMFaceDiscardRow2_0: 0 + - _UDIMFaceDiscardRow2_1: 0 + - _UDIMFaceDiscardRow2_2: 0 + - _UDIMFaceDiscardRow2_3: 0 + - _UDIMFaceDiscardRow3_0: 0 + - _UDIMFaceDiscardRow3_1: 0 + - _UDIMFaceDiscardRow3_2: 0 + - _UDIMFaceDiscardRow3_3: 0 + - _UDIMFaceDiscardUV: 0 + - _UVModLocalPos0: 0 + - _UVModLocalPos1: 1 + - _UVModWorldPos0: 0 + - _UVModWorldPos1: 2 + - _UVSec: 0 + - _UVTileDissolveAlpha_Row0_0: 0 + - _UVTileDissolveAlpha_Row0_1: 0 + - _UVTileDissolveAlpha_Row0_2: 0 + - _UVTileDissolveAlpha_Row0_3: 0 + - _UVTileDissolveAlpha_Row1_0: 0 + - _UVTileDissolveAlpha_Row1_1: 0 + - _UVTileDissolveAlpha_Row1_2: 0 + - _UVTileDissolveAlpha_Row1_3: 0 + - _UVTileDissolveAlpha_Row2_0: 0 + - _UVTileDissolveAlpha_Row2_1: 0 + - _UVTileDissolveAlpha_Row2_2: 0 + - _UVTileDissolveAlpha_Row2_3: 0 + - _UVTileDissolveAlpha_Row3_0: 0 + - _UVTileDissolveAlpha_Row3_1: 0 + - _UVTileDissolveAlpha_Row3_2: 0 + - _UVTileDissolveAlpha_Row3_3: 0 + - _UVTileDissolveDiscardAtMax: 1 + - _UVTileDissolveEnabled: 0 + - _UVTileDissolveUV: 0 + - _Unlit_Intensity: 1 + - _UseLightColor: 1 + - _UseReflection: 0 + - _Use_1stAs2nd: 0 + - _Use_1stShadeMapAlpha_As_ShadowMask: 0 + - _Use_2ndShadeMapAlpha_As_ShadowMask: 0 + - _Use_BaseAs1st: 0 + - _UzumoreAmount: 0.1 + - _UzumoreBias: 0.001 + - _UzumoreCategoryToggle: 0 + - _UzumoreEnabled: 1 + - _UzumoreMaskUV: 3 + - _VertexAudioLinkEnabled: 0 + - _VertexBarrelAlpha: 0 + - _VertexBarrelHeight: 0 + - _VertexBarrelMaskChannel: 0 + - _VertexBarrelMode: 0 + - _VertexBarrelWidth: 0.2 + - _VertexBasicsMaskChannel: 0 + - _VertexGlitchDensity: 10 + - _VertexGlitchFrequency: 1 + - _VertexGlitchMapPanSpeed: 10 + - _VertexGlitchMirror: 0 + - _VertexGlitchMirrorEnable: 0 + - _VertexGlitchStrength: 1 + - _VertexGlitchThreshold: 1 + - _VertexGlitchingAudioLinkBand: 0 + - _VertexGlitchingAudioLinkEnabled: 0 + - _VertexGlitchingAudiolinkOverride: 1 + - _VertexGlitchingEnabled: 0 + - _VertexGlitchingUseTexture: 0 + - _VertexLocalRotationALBandX: 0 + - _VertexLocalRotationALBandY: 0 + - _VertexLocalRotationALBandZ: 0 + - _VertexLocalRotationCTALBandX: 0 + - _VertexLocalRotationCTALBandY: 0 + - _VertexLocalRotationCTALBandZ: 0 + - _VertexLocalRotationCTALTypeX: 0 + - _VertexLocalRotationCTALTypeY: 0 + - _VertexLocalRotationCTALTypeZ: 0 + - _VertexLocalScaleALBand: 0 + - _VertexLocalTranslationALBand: 0 + - _VertexLookAtAudioLinkBand: 0 + - _VertexLookAtAudioLinkEnabled: 0 + - _VertexLookAtEnabled: 0 + - _VertexManipulationHeight: 0 + - _VertexManipulationHeightBand: 0 + - _VertexManipulationHeightBias: 0 + - _VertexManipulationHeightMapChannel: 0 + - _VertexManipulationHeightMaskChannel: 0 + - _VertexManipulationHeightMaskUV: 0 + - _VertexManipulationsEnabled: 0 + - _VertexRoundingDivision: 0.02 + - _VertexRoundingEnabled: 0 + - _VertexRoundingMaskChannel: 0 + - _VertexRoundingRangeBand: 0 + - _VertexRoundingSpace: 0 + - _VertexSpectrumMotion: 0 + - _VertexSpectrumUV: 0 + - _VertexSpectrumUVDirection: 0 + - _VertexSphereAlpha: 0 + - _VertexSphereHeight: 1 + - _VertexSphereMaskChannel: 0 + - _VertexSphereMode: 0 + - _VertexSphereRadius: 1 + - _VertexTornadoBaseHeight: 0 + - _VertexTornadoFunnelShape: 1 + - _VertexTornadoIntensity: 100 + - _VertexTornadoMaskChannel: 0 + - _VertexTornadoMode: 0 + - _VertexTornadoRadius: 1 + - _VertexTornadoSpeed: 5 + - _VertexTornadoTopHeight: 1 + - _VertexTornadoVerticalPull: 0 + - _VertexWindDetailAmplitude: 0.05 + - _VertexWindDetailFrequency: 5 + - _VertexWindDetailSpeed: 2.5 + - _VertexWindEnabled: 0 + - _VertexWindMaskChannel: 0 + - _VertexWindNoiseChannel: 0 + - _VertexWindNoiseScale: 10 + - _VertexWindNoiseSpeed: 0.5 + - _VertexWindNoiseStrength: 0.5 + - _VertexWindPrimaryAmplitude: 0.1 + - _VertexWindPrimaryFrequency: 1 + - _VertexWindPrimarySpeed: 1 + - _VertexWorldTranslationALBand: 0 + - _VideoBacklight: 1 + - _VideoCRTPixelEnergizedTime: 1.9 + - _VideoCRTRefreshRate: 24 + - _VideoContrast: 0 + - _VideoEffectsEnable: 0 + - _VideoEmissionEnabled: 1 + - _VideoMaskTextureChannel: 0 + - _VideoMaskTextureUV: 0 + - _VideoPixelTextureUV: 0 + - _VideoPixelateToResolution: 0 + - _VideoSaturation: 0 + - _VideoType: 3 + - _VisibilityMode: 1 + - _VisibilityVRCCameraDesktop: 1 + - _VisibilityVRCCameraScreenshot: 1 + - _VisibilityVRCCameraVR: 1 + - _VisibilityVRCMirrorDesktop: 1 + - _VisibilityVRCMirrorVR: 1 + - _VisibilityVRCRegular: 1 + - _VoronoiAffectsMaterialAlpha: 0 + - _VoronoiBlend: 0 + - _VoronoiEnableRandomCellColor: 0 + - _VoronoiEnabled: 0 + - _VoronoiGlobalMask: 0 + - _VoronoiGlobalMaskBlendType: 2 + - _VoronoiInnerEmissionStrength: 0 + - _VoronoiMaskChannel: 0 + - _VoronoiMaskUV: 0 + - _VoronoiNoiseChannel: 0 + - _VoronoiNoiseIntensity: 0.1 + - _VoronoiNoiseUV: 0 + - _VoronoiOuterEmissionStrength: 0 + - _VoronoiPower: 0.45454544 + - _VoronoiScale: 5 + - _VoronoiSpace: 0 + - _VoronoiType: 1 + - _Wriggle: 0 + - _WriggleSpeed: 0.28 + - _ZClip: 1 + - _ZTest: 4 + - _ZWrite: 0 + - _ppHueSelectOrShift: 1 + - footer_bluesky: 0 + - footer_discord: 0 + - footer_github: 0 + - footer_patreon: 0 + - footer_twitter: 0 + - footer_website: 0 + - footer_youtube: 0 + - g_end_tps_bezier: 0 + - g_end_tps_buldge: 0 + - g_end_tps_idle: 0 + - g_end_tps_pulsing: 0 + - g_end_tps_squeeze: 0 + - g_start_tps_bezier: 0 + - g_start_tps_buldge: 0 + - g_start_tps_idle: 0 + - g_start_tps_pulsing: 0 + - g_start_tps_squeeze: 0 + - m_AudioLinkCategory: 0 + - m_OutlineCategory: 0 + - m_end_ALDecalSpectrum: 0 + - m_end_ALVolumeColor: 0 + - m_end_Alpha: 0 + - m_end_Ansio: 0 + - m_end_BeatsaberBloomFog: 0 + - m_end_BeatsaberOptions: 0 + - m_end_BlackLightMasking: 0 + - m_end_BonusSliders: 0 + - m_end_CRT: 0 + - m_end_CenterOutDissolve: 0 + - m_end_ColorAdjust: 0 + - m_end_CubeMap: 0 + - m_end_Decal0: 0 + - m_end_Decal0AudioLink: 0 + - m_end_Decal1: 0 + - m_end_Decal1AudioLink: 0 + - m_end_Decal2: 0 + - m_end_Decal2AudioLink: 0 + - m_end_Decal3: 0 + - m_end_Decal3AudioLink: 0 + - m_end_DecalSection: 0 + - m_end_DepthBulge: 0 + - m_end_DetailOptions: 0 + - m_end_DistortionAudioLink: 0 + - m_end_FXProximityColor: 0 + - m_end_FlipbookAudioLink: 0 + - m_end_Gameboy: 0 + - m_end_GlobalMask: 0 + - m_end_GlobalMaskDistanceM_0: 0 + - m_end_GlobalMaskDistanceM_1: 0 + - m_end_GlobalMaskDistanceM_10: 0 + - m_end_GlobalMaskDistanceM_11: 0 + - m_end_GlobalMaskDistanceM_12: 0 + - m_end_GlobalMaskDistanceM_13: 0 + - m_end_GlobalMaskDistanceM_14: 0 + - m_end_GlobalMaskDistanceM_15: 0 + - m_end_GlobalMaskDistanceM_2: 0 + - m_end_GlobalMaskDistanceM_3: 0 + - m_end_GlobalMaskDistanceM_4: 0 + - m_end_GlobalMaskDistanceM_5: 0 + - m_end_GlobalMaskDistanceM_6: 0 + - m_end_GlobalMaskDistanceM_7: 0 + - m_end_GlobalMaskDistanceM_8: 0 + - m_end_GlobalMaskDistanceM_9: 0 + - m_end_GlobalMaskModifiers: 0 + - m_end_GlobalMaskModifiersBackface: 0 + - m_end_GlobalMaskModifiersCamera: 0 + - m_end_GlobalMaskModifiersDistance: 0 + - m_end_GlobalMaskModifiersMirror: 0 + - m_end_GlobalMaskOptions: 0 + - m_end_GlobalMaskTextures: 0 + - m_end_GlobalMaskVertexColors: 0 + - m_end_GlobalThemeColor0: 0 + - m_end_GlobalThemeColor1: 0 + - m_end_GlobalThemeColor2: 0 + - m_end_GlobalThemeColor3: 0 + - m_end_GlobalThemes: 0 + - m_end_LTCGI: 0 + - m_end_MainVertexColors: 0 + - m_end_Matcap2: 0 + - m_end_Matcap3: 0 + - m_end_Matcap4: 0 + - m_end_OutlineAudioLink: 0 + - m_end_OutlineStencil: 0 + - m_end_OutlineStencilPassBackOptions: 0 + - m_end_OutlineStencilPassFrontOptions: 0 + - m_end_PPAnimations: 0 + - m_end_PathAudioLink: 0 + - m_end_PoiGlobalCategory: 0 + - m_end_PoiLightData: 0 + - m_end_PoiPostProcessingCategory: 0 + - m_end_PoiShading: 0 + - m_end_PoiUVCategory: 0 + - m_end_RGBMask: 0 + - m_end_Rim2AudioLink: 0 + - m_end_RimAudioLink: 0 + - m_end_SphericalDissolve: 0 + - m_end_StencilPassBackOptions: 0 + - m_end_StencilPassFrontOptions: 0 + - m_end_StencilPassOptions: 0 + - m_end_Stochastic: 0 + - m_end_Text: 0 + - m_end_TextFPS: 0 + - m_end_TextInstanceTime: 0 + - m_end_TextNumeric: 0 + - m_end_TextPosition: 0 + - m_end_TruchetAudioLink: 0 + - m_end_UVTileDissolve: 0 + - m_end_Uzumore: 0 + - m_end_VideoSettings: 0 + - m_end_VoronoiAudioLink: 0 + - m_end_WorldAOBlocker: 0 + - m_end_alphaBlending: 0 + - m_end_audioLink: 0 + - m_end_audioLinkOverrides: 0 + - m_end_backFace: 0 + - m_end_backlight: 0 + - m_end_blending: 0 + - m_end_brdf: 0 + - m_end_clearCoat: 0 + - m_end_clearcoatadvanced: 0 + - m_end_clearcoatglobalmask: 0 + - m_end_depthFX: 0 + - m_end_depthRimLightOptions: 0 + - m_end_dissolve: 0 + - m_end_dissolveHueShift: 0 + - m_end_emission1Options: 0 + - m_end_emission2Options: 0 + - m_end_emission3Options: 0 + - m_end_emissionOptions: 0 + - m_end_flipBook: 0 + - m_end_glitter: 0 + - m_end_internalparallax: 0 + - m_end_matcap: 0 + - m_end_mirrorOptions: 0 + - m_end_normalCorrect: 0 + - m_end_outlineAlphaBlending: 0 + - m_end_outlineBlending: 0 + - m_end_parallax: 0 + - m_end_pathing: 0 + - m_end_pen_autoConfig: 0 + - m_end_poiSSAO: 0 + - m_end_pointToPoint: 0 + - m_end_postprocess: 0 + - m_end_raliv: 0 + - m_end_ralivAdvanced: 0 + - m_end_ralivOriface: 0 + - m_end_ralivPenetrator: 0 + - m_end_reflectionRim: 0 + - m_end_rim1LightOptions: 0 + - m_end_rim2LightOptions: 0 + - m_end_stylizedSpec: 0 + - m_end_subsurfaceScattering: 0 + - m_end_tps_penetrator: 0 + - m_end_truchet: 0 + - m_end_udimdiscardOptions: 0 + - m_end_udimfacediscardOptions: 0 + - m_end_uvDistortion: 0 + - m_end_uvLocalWorld: 0 + - m_end_uvPanosphere: 0 + - m_end_uvPolar: 0 + - m_end_vertexGlitching: 0 + - m_end_vertexLookAt: 0 + - m_end_vertexManipulation: 0 + - m_end_videoEffects: 0 + - m_end_voronoi: 0 + - m_end_voronoiRandom: 0 + - m_lightingCategory: 1 + - m_mainCategory: 0 + - m_modifierCategory: 0 + - m_renderingCategory: 0 + - m_specialFXCategory: 0 + - m_start_ALDecalSpectrum: 0 + - m_start_ALVolumeColor: 0 + - m_start_Alpha: 0 + - m_start_Aniso: 0 + - m_start_BeatsaberBloomFog: 0 + - m_start_BeatsaberOptions: 0 + - m_start_BlackLightMasking: 0 + - m_start_BonusSliders: 0 + - m_start_CRT: 0 + - m_start_CenterOutDissolve: 0 + - m_start_ColorAdjust: 0 + - m_start_CubeMap: 0 + - m_start_Decal0: 0 + - m_start_Decal0AudioLink: 0 + - m_start_Decal1: 0 + - m_start_Decal1AudioLink: 0 + - m_start_Decal2: 0 + - m_start_Decal2AudioLink: 0 + - m_start_Decal3: 0 + - m_start_Decal3AudioLink: 0 + - m_start_DecalSection: 0 + - m_start_DepthBulge: 0 + - m_start_DetailOptions: 0 + - m_start_DistortionAudioLink: 0 + - m_start_FXProximityColor: 0 + - m_start_FlipbookAudioLink: 0 + - m_start_Gameboy: 0 + - m_start_GlobalMask: 0 + - m_start_GlobalMaskDistanceM_0: 0 + - m_start_GlobalMaskDistanceM_1: 0 + - m_start_GlobalMaskDistanceM_10: 0 + - m_start_GlobalMaskDistanceM_11: 0 + - m_start_GlobalMaskDistanceM_12: 0 + - m_start_GlobalMaskDistanceM_13: 0 + - m_start_GlobalMaskDistanceM_14: 0 + - m_start_GlobalMaskDistanceM_15: 0 + - m_start_GlobalMaskDistanceM_2: 0 + - m_start_GlobalMaskDistanceM_3: 0 + - m_start_GlobalMaskDistanceM_4: 0 + - m_start_GlobalMaskDistanceM_5: 0 + - m_start_GlobalMaskDistanceM_6: 0 + - m_start_GlobalMaskDistanceM_7: 0 + - m_start_GlobalMaskDistanceM_8: 0 + - m_start_GlobalMaskDistanceM_9: 0 + - m_start_GlobalMaskModifiers: 0 + - m_start_GlobalMaskModifiersBackface: 0 + - m_start_GlobalMaskModifiersCamera: 0 + - m_start_GlobalMaskModifiersDistance: 0 + - m_start_GlobalMaskModifiersMirror: 0 + - m_start_GlobalMaskOptions: 0 + - m_start_GlobalMaskTextures: 0 + - m_start_GlobalMaskVertexColors: 0 + - m_start_GlobalThemeColor0: 0 + - m_start_GlobalThemeColor1: 0 + - m_start_GlobalThemeColor2: 0 + - m_start_GlobalThemeColor3: 0 + - m_start_GlobalThemes: 0 + - m_start_LTCGI: 0 + - m_start_MainVertexColors: 0 + - m_start_Matcap2: 0 + - m_start_Matcap3: 0 + - m_start_Matcap4: 0 + - m_start_OutlineAudioLink: 0 + - m_start_OutlineStencil: 0 + - m_start_OutlineStencilPassBackOptions: 0 + - m_start_OutlineStencilPassFrontOptions: 0 + - m_start_PPAnimations: 0 + - m_start_PathAudioLink: 0 + - m_start_PoiGlobalCategory: 0 + - m_start_PoiLightData: 0 + - m_start_PoiPostProcessingCategory: 0 + - m_start_PoiShading: 0 + - m_start_PoiUVCategory: 0 + - m_start_RGBMask: 0 + - m_start_Rim2AudioLink: 0 + - m_start_RimAudioLink: 0 + - m_start_SphericalDissolve: 0 + - m_start_StencilPassBackOptions: 0 + - m_start_StencilPassFrontOptions: 0 + - m_start_StencilPassOptions: 0 + - m_start_Stochastic: 0 + - m_start_Text: 0 + - m_start_TextFPS: 0 + - m_start_TextInstanceTime: 0 + - m_start_TextNumeric: 0 + - m_start_TextPosition: 0 + - m_start_TruchetAudioLink: 0 + - m_start_UVTileDissolve: 0 + - m_start_Uzumore: 0 + - m_start_VideoSettings: 0 + - m_start_VoronoiAudioLink: 0 + - m_start_WorldAOBlocker: 0 + - m_start_alphaBlending: 0 + - m_start_audioLink: 0 + - m_start_audioLinkOverrides: 0 + - m_start_backFace: 0 + - m_start_backlight: 0 + - m_start_blending: 0 + - m_start_brdf: 1 + - m_start_clearCoat: 0 + - m_start_clearcoatadvanced: 0 + - m_start_clearcoatglobalmask: 0 + - m_start_depthFX: 0 + - m_start_depthRimLightOptions: 0 + - m_start_dissolve: 0 + - m_start_dissolveHueShift: 0 + - m_start_emission1Options: 0 + - m_start_emission2Options: 0 + - m_start_emission3Options: 0 + - m_start_emissionOptions: 1 + - m_start_flipBook: 0 + - m_start_glitter: 0 + - m_start_internalparallax: 0 + - m_start_matcap: 0 + - m_start_mirrorOptions: 0 + - m_start_normalCorrect: 0 + - m_start_outlineAlphaBlending: 0 + - m_start_outlineBlending: 0 + - m_start_parallax: 0 + - m_start_pathing: 0 + - m_start_pen_autoConfig: 0 + - m_start_poiSSAO: 0 + - m_start_pointToPoint: 0 + - m_start_postprocess: 0 + - m_start_raliv: 0 + - m_start_ralivAdvanced: 0 + - m_start_ralivOriface: 0 + - m_start_ralivPenetrator: 0 + - m_start_reflectionRim: 0 + - m_start_rim2LightOptions: 0 + - m_start_rimLight1Options: 0 + - m_start_stylizedSpec: 0 + - m_start_subsurfaceScattering: 0 + - m_start_tps_penetrator: 0 + - m_start_truchet: 0 + - m_start_udimdiscardOptions: 0 + - m_start_udimfacediscardOptions: 0 + - m_start_uvDistortion: 0 + - m_start_uvLocalWorld: 0 + - m_start_uvPanosphere: 0 + - m_start_uvPolar: 0 + - m_start_vertexGlitching: 0 + - m_start_vertexLookAt: 0 + - m_start_vertexManipulation: 0 + - m_start_videoEffects: 0 + - m_start_voronoi: 0 + - m_start_voronoiRandom: 0 + - m_thirdpartyCategory: 0 + - m_vertexCategory: 0 + - s_end_ALAlpha: 0 + - s_end_ALDecalAudioModsOptions: 0 + - s_end_ALDecalBand: 0 + - s_end_ALDecalColorsBlendingOptions: 0 + - s_end_ALDecalShapeClipOptions: 0 + - s_end_ALDecalVolumeOptions: 0 + - s_end_ALSpectrumMotion: 0 + - s_end_ALVertexGlitching: 0 + - s_end_ALVertexHeight: 0 + - s_end_ALVertexLookAtAL: 0 + - s_end_AlphaAdvanced: 0 + - s_end_AlphaAngular: 0 + - s_end_AlphaDistanceFade: 0 + - s_end_AlphaDithering: 0 + - s_end_AlphaFresnel: 0 + - s_end_AlphaToCoverage: 0 + - s_end_AnisoBottomLayer: 0 + - s_end_AnisoTopLayer: 1 + - s_end_AudioLinkBandOverrides: 0 + - s_end_BRDFTPSMaskGroup: 0 + - s_end_BackFaceHueShift: 0 + - s_end_BackfaceMods: 0 + - s_end_CCopt: 1 + - s_end_ClearCoatTPSMaskGroup: 0 + - s_end_ColorAdjustColorGrading: 0 + - s_end_ContinuousRotation: 0 + - s_end_CubeMapColorAdjust: 0 + - s_end_CubeMapMasking: 0 + - s_end_Decal0ChannelSeparation: 0 + - s_end_Decal0GlobalMasking: 0 + - s_end_Decal0HueShift: 0 + - s_end_Decal0Video: 0 + - s_end_Decal1ChannelSeparation: 0 + - s_end_Decal1GlobalMasking: 0 + - s_end_Decal1HueShift: 0 + - s_end_Decal1Video: 0 + - s_end_Decal2ChannelSeparation: 0 + - s_end_Decal2GlobalMasking: 0 + - s_end_Decal2HueShift: 0 + - s_end_Decal2Video: 0 + - s_end_Decal3ChannelSeparation: 0 + - s_end_Decal3GlobalMasking: 0 + - s_end_Decal3HueShift: 0 + - s_end_Decal3Video: 0 + - s_end_DecalTPSMaskGroup: 0 + - s_end_DepthAlpha: 0 + - s_end_DepthFXColorEmission: 0 + - s_end_DetailNormal: 0 + - s_end_DetailTexture: 0 + - s_end_DissolveAudioLink: 0 + - s_end_DissolvedMenu: 0 + - s_end_EdgeMenu: 0 + - s_end_EmissionAL0Add: 0 + - s_end_EmissionAL0COut: 0 + - s_end_EmissionAL0Multiply: 0 + - s_end_EmissionAL1Add: 0 + - s_end_EmissionAL1COut: 0 + - s_end_EmissionAL1Multiply: 0 + - s_end_EmissionAL2Add: 0 + - s_end_EmissionAL2COut: 0 + - s_end_EmissionAL2Multiply: 0 + - s_end_EmissionAL3Add: 0 + - s_end_EmissionAL3COut: 0 + - s_end_EmissionAL3Multiply: 0 + - s_end_EmissionBlinking0: 0 + - s_end_EmissionBlinking1: 0 + - s_end_EmissionBlinking2: 0 + - s_end_EmissionBlinking3: 0 + - s_end_EmissionCenterOut0: 0 + - s_end_EmissionCenterOut1: 0 + - s_end_EmissionCenterOut2: 0 + - s_end_EmissionCenterOut3: 0 + - s_end_EmissionHueShift0: 0 + - s_end_EmissionHueShift1: 0 + - s_end_EmissionHueShift2: 0 + - s_end_EmissionHueShift3: 0 + - s_end_EmissionLightBased0: 0 + - s_end_EmissionLightBased1: 0 + - s_end_EmissionLightBased2: 0 + - s_end_EmissionLightBased3: 0 + - s_end_FixedRimBlending: 0 + - s_end_FixedRimColor: 0 + - s_end_FixedRimShapeControl: 0 + - s_end_FlipbookCrossfade: 0 + - s_end_FlipbookHueShift: 0 + - s_end_FlipbookManualFrameControl: 0 + - s_end_FlipbookStartAndEnd: 0 + - s_end_GlitterAudioLink: 0 + - s_end_GlitterColorAndShape: 0 + - s_end_GlitterHueShiftSection: 0 + - s_end_GlitterMask: 0 + - s_end_GlitterPositionSize: 0 + - s_end_GlitterRotationSection: 0 + - s_end_GlitterSparkleControl: 0 + - s_end_GlobalMaskOptionsForceToggles: 0 + - s_end_GlobalMaskOptionsMinMaxSliders: 0 + - s_end_GlobalMaskOptionsSliders: 0 + - s_end_LightDataAddPass: 1 + - s_end_LightDataBasePass: 1 + - s_end_LightDataDebug: 0 + - s_end_LightDataSDF: 1 + - s_end_LocalRotation: 0 + - s_end_LocalTranslation: 0 + - s_end_LookAtAlphaMask: 0 + - s_end_LookAtBlueMask: 0 + - s_end_LookAtGreenMask: 0 + - s_end_LookAtRedMask: 0 + - s_end_LookAtVisibility: 0 + - s_end_MainHueShift: 0 + - s_end_MainHueShiftAL: 0 + - s_end_MainHueShiftGlobalMask: 0 + - s_end_MaskingMenu: 0 + - s_end_Matcap0AudioLink: 0 + - s_end_Matcap0Blending: 0 + - s_end_Matcap0Masking: 0 + - s_end_Matcap1AudioLink: 0 + - s_end_Matcap1Blending: 0 + - s_end_Matcap1HueShift: 0 + - s_end_Matcap1Masking: 0 + - s_end_Matcap1Normal: 0 + - s_end_Matcap1Smoothness: 0 + - s_end_Matcap2AudioLink: 0 + - s_end_Matcap2Blending: 0 + - s_end_Matcap2HueShift: 0 + - s_end_Matcap2Masking: 0 + - s_end_Matcap2Normal: 0 + - s_end_Matcap2Smoothness: 0 + - s_end_Matcap2TPSMaskGroup: 0 + - s_end_Matcap3AudioLink: 0 + - s_end_Matcap3Blending: 0 + - s_end_Matcap3HueShift: 0 + - s_end_Matcap3Masking: 0 + - s_end_Matcap3Normal: 0 + - s_end_Matcap3Smoothness: 0 + - s_end_Matcap3TPSMaskGroup: 0 + - s_end_Matcap4TPSMaskGroup: 0 + - s_end_MatcapHueShift: 0 + - s_end_MatcapNormal: 0 + - s_end_MatcapSmoothness: 0 + - s_end_MatcapTPSMaskGroup: 0 + - s_end_MirrorTexture: 0 + - s_end_MultilayerMath1stLayer: 1 + - s_end_MultilayerMath2ndLayer: 0 + - s_end_MultilayerMath3rdLayer: 0 + - s_end_MultilayerMathBorder: 1 + - s_end_MultilayerMathBorderMap: 1 + - s_end_MultilayerShadowMap: 0 + - s_end_OutlineAlphaDistanceFade: 0 + - s_end_OutlineColorAdjust: 0 + - s_end_OutlineFixedSize: 0 + - s_end_OutlineLighting: 0 + - s_end_OutlineRenderingOptions: 0 + - s_end_OutlineZOffset: 0 + - s_end_PBRSecondSpecular: 0 + - s_end_PBRSplitMaskSample: 0 + - s_end_ParallaxInternalHueShift: 0 + - s_end_ParallaxInternalLayerColoring: 0 + - s_end_ParallaxInternalLayerControls: 0 + - s_end_PathAppearance: 0 + - s_end_PathColors: 0 + - s_end_PathRemapping: 0 + - s_end_PathSourceDirections: 0 + - s_end_PathTypes: 0 + - s_end_Positioning: 0 + - s_end_RGBAlpha: 0 + - s_end_RGBBlue: 0 + - s_end_RGBGreen: 0 + - s_end_RGBRed: 0 + - s_end_RimLight0Color: 0 + - s_end_RimLight0GlobalMasking: 0 + - s_end_RimLight0HueShift: 0 + - s_end_RimLight0LightDirMask: 0 + - s_end_RimLight0ShapeControls: 0 + - s_end_RimLight1Color: 0 + - s_end_RimLight1GlobalMasking: 0 + - s_end_RimLight1HueShift: 0 + - s_end_RimLight1LightDirMask: 0 + - s_end_RimLight1ShapeControls: 0 + - s_end_RimLight2DirectionMask: 0 + - s_end_RimLightDirectionMask: 0 + - s_end_SSAOAdvanced: 0 + - s_end_SSAOColorAndMasking: 0 + - s_end_ScrollingEmission0: 0 + - s_end_ScrollingEmission1: 0 + - s_end_ScrollingEmission2: 0 + - s_end_ScrollingEmission3: 0 + - s_end_ShadingAddPass: 0 + - s_end_ShadingGlobalMask: 0 + - s_end_StylizedReflectionLilEnviroReflections: 1 + - s_end_StylizedReflectionLilSpecular: 1 + - s_end_StylizedReflectionMode0: 1 + - s_end_StylizedReflectionMode1: 1 + - s_end_StylizedSpecularAdvanced: 0 + - s_end_StylizedSpecularLayer0: 0 + - s_end_StylizedSpecularLayer1: 0 + - s_end_TimingOptions: 0 + - s_end_TransitionMenu: 0 + - s_end_UVTileDissolveRow0: 0 + - s_end_UVTileDissolveRow1: 0 + - s_end_UVTileDissolveRow2: 0 + - s_end_UVTileDissolveRow3: 0 + - s_end_VertAL: 0 + - s_end_VertexBarrelMode: 0 + - s_end_VertexColors: 0 + - s_end_VertexGlitchMirror: 0 + - s_end_VertexGlitchTexture: 0 + - s_end_VertexManipulationHeight: 0 + - s_end_VertexRoundingAL: 0 + - s_end_VertexScale: 0 + - s_end_VertexSphereMode: 0 + - s_end_VertexTornadoMode: 0 + - s_end_VertexWind: 0 + - s_end_WorldTranslation: 0 + - s_end_brdfadvanced: 0 + - s_end_decal1_position: 0 + - s_end_decal2_position: 0 + - s_end_decal3_position: 0 + - s_end_decal_position: 0 + - s_end_deliot: 0 + - s_end_fogOpt: 1 + - s_end_ggxanisotropics: 0 + - s_end_heightFogOpt: 1 + - s_end_hextile: 0 + - s_end_liltoon_rim2_lightdir: 0 + - s_end_liltoon_rim_lightdir: 0 + - s_end_matcap1ApplyToAlpha: 0 + - s_end_matcap2ApplyToAlpha: 0 + - s_end_matcap3ApplyToAlpha: 0 + - s_end_matcapApplyToAlpha: 0 + - s_end_outline_al_color: 0 + - s_end_parallaxAdvanced: 0 + - s_end_vertexRounding: 0 + - s_start_ALAlpha: 0 + - s_start_ALDecalAudioModsOptions: 1 + - s_start_ALDecalBandOptions: 1 + - s_start_ALDecalColorsBlendingOptions: 1 + - s_start_ALDecalShapeClipOptions: 1 + - s_start_ALDecalVolumeOptions: 1 + - s_start_ALSpectrumMotion: 0 + - s_start_ALVertexGlitching: 0 + - s_start_ALVertexHeight: 0 + - s_start_ALVertexLookAtAL: 0 + - s_start_AlphaAdvanced: 0 + - s_start_AlphaAngular: 0 + - s_start_AlphaDistanceFade: 0 + - s_start_AlphaDithering: 0 + - s_start_AlphaFresnel: 0 + - s_start_AlphaToCoverage: 0 + - s_start_AnisoBottomLayer: 0 + - s_start_AnisoTopLayer: 1 + - s_start_AudioLinkBandOverrides: 1 + - s_start_BRDFTPSMaskGroup: 0 + - s_start_BackFaceHueShift: 0 + - s_start_BackfaceMods: 0 + - s_start_CCopt: 1 + - s_start_ClearCoatTPSMaskGroup: 0 + - s_start_ColorAdjustColorGrading: 0 + - s_start_ContinuousRotation: 0 + - s_start_CubeMapColorAdjust: 0 + - s_start_CubeMapMasking: 1 + - s_start_Decal0ChannelSeparation: 0 + - s_start_Decal0GlobalMasking: 0 + - s_start_Decal0HueShift: 0 + - s_start_Decal0Video: 0 + - s_start_Decal1ChannelSeparation: 0 + - s_start_Decal1GlobalMasking: 0 + - s_start_Decal1HueShift: 0 + - s_start_Decal1Video: 0 + - s_start_Decal2ChannelSeparation: 0 + - s_start_Decal2GlobalMasking: 0 + - s_start_Decal2HueShift: 0 + - s_start_Decal2Video: 0 + - s_start_Decal3ChannelSeparation: 0 + - s_start_Decal3GlobalMasking: 0 + - s_start_Decal3HueShift: 0 + - s_start_Decal3Video: 0 + - s_start_DecalTPSMaskGroup: 0 + - s_start_DepthAlpha: 0 + - s_start_DepthFXColorEmission: 0 + - s_start_DetailNormal: 0 + - s_start_DetailTexture: 0 + - s_start_DissolveAudioLink: 0 + - s_start_DissolvedMenu: 0 + - s_start_EdgeMenu: 0 + - s_start_EmissionAL0Add: 0 + - s_start_EmissionAL0COut: 0 + - s_start_EmissionAL0Multiply: 0 + - s_start_EmissionAL1Add: 0 + - s_start_EmissionAL1COut: 0 + - s_start_EmissionAL1Multiply: 0 + - s_start_EmissionAL2Add: 0 + - s_start_EmissionAL2COut: 0 + - s_start_EmissionAL2Multiply: 0 + - s_start_EmissionAL3Add: 0 + - s_start_EmissionAL3COut: 0 + - s_start_EmissionAL3Multiply: 0 + - s_start_EmissionBlinking0: 0 + - s_start_EmissionBlinking1: 0 + - s_start_EmissionBlinking2: 0 + - s_start_EmissionBlinking3: 0 + - s_start_EmissionCenterOut0: 0 + - s_start_EmissionCenterOut1: 0 + - s_start_EmissionCenterOut2: 0 + - s_start_EmissionCenterOut3: 0 + - s_start_EmissionHueShift0: 0 + - s_start_EmissionHueShift1: 0 + - s_start_EmissionHueShift2: 0 + - s_start_EmissionHueShift3: 0 + - s_start_EmissionLightBased0: 0 + - s_start_EmissionLightBased1: 0 + - s_start_EmissionLightBased2: 0 + - s_start_EmissionLightBased3: 0 + - s_start_FixedRimBlending: 1 + - s_start_FixedRimColor: 1 + - s_start_FixedRimShapeControl: 1 + - s_start_FlipbookCrossfade: 0 + - s_start_FlipbookHueShift: 0 + - s_start_FlipbookManualFrameControl: 0 + - s_start_FlipbookStartAndEnd: 0 + - s_start_GlitterAudioLink: 0 + - s_start_GlitterColorAndShape: 1 + - s_start_GlitterHueShiftSection: 0 + - s_start_GlitterMask: 0 + - s_start_GlitterPositionSize: 0 + - s_start_GlitterRotationSection: 0 + - s_start_GlitterSparkleControl: 1 + - s_start_GlobalMaskOptionsForceToggles: 0 + - s_start_GlobalMaskOptionsMinMaxSliders: 0 + - s_start_GlobalMaskOptionsSliders: 0 + - s_start_LightDataAddPass: 1 + - s_start_LightDataBasePass: 1 + - s_start_LightDataDebug: 0 + - s_start_LightDataSDF: 1 + - s_start_LocalRotation: 0 + - s_start_LocalTranslation: 0 + - s_start_LookAtAlphaMask: 0 + - s_start_LookAtBlueMask: 0 + - s_start_LookAtGreenMask: 0 + - s_start_LookAtRedMask: 1 + - s_start_LookAtVisibility: 0 + - s_start_MainHueShift: 1 + - s_start_MainHueShiftAL: 0 + - s_start_MainHueShiftGlobalMask: 0 + - s_start_MaskingMenu: 0 + - s_start_Matcap0AudioLink: 0 + - s_start_Matcap0Blending: 1 + - s_start_Matcap0Masking: 1 + - s_start_Matcap1AudioLink: 0 + - s_start_Matcap1Blending: 1 + - s_start_Matcap1HueShift: 0 + - s_start_Matcap1Masking: 1 + - s_start_Matcap1Normal: 0 + - s_start_Matcap1Smoothness: 0 + - s_start_Matcap2AudioLink: 0 + - s_start_Matcap2Blending: 1 + - s_start_Matcap2HueShift: 0 + - s_start_Matcap2Masking: 1 + - s_start_Matcap2Normal: 0 + - s_start_Matcap2Smoothness: 0 + - s_start_Matcap2TPSMaskGroup: 0 + - s_start_Matcap3AudioLink: 0 + - s_start_Matcap3Blending: 1 + - s_start_Matcap3HueShift: 0 + - s_start_Matcap3Masking: 1 + - s_start_Matcap3Normal: 0 + - s_start_Matcap3Smoothness: 0 + - s_start_Matcap3TPSMaskGroup: 0 + - s_start_Matcap4TPSMaskGroup: 0 + - s_start_MatcapHueShift: 0 + - s_start_MatcapNormal: 0 + - s_start_MatcapSmoothness: 0 + - s_start_MatcapTPSMaskGroup: 0 + - s_start_MirrorTexture: 1 + - s_start_MultilayerMath1stLayer: 1 + - s_start_MultilayerMath2ndLayer: 0 + - s_start_MultilayerMath3rdLayer: 0 + - s_start_MultilayerMathBorder: 1 + - s_start_MultilayerMathBorderMap: 0 + - s_start_MultilayerShadowMap: 0 + - s_start_OutlineAlphaDistanceFade: 0 + - s_start_OutlineColorAdjust: 0 + - s_start_OutlineFixedSize: 0 + - s_start_OutlineLighting: 0 + - s_start_OutlineRenderingOptions: 0 + - s_start_OutlineZOffset: 0 + - s_start_PBRSecondSpecular: 0 + - s_start_PBRSplitMaskSample: 0 + - s_start_ParallaxInternalHueShift: 0 + - s_start_ParallaxInternalLayerColoring: 1 + - s_start_ParallaxInternalLayerControls: 1 + - s_start_PathAppearance: 1 + - s_start_PathColors: 1 + - s_start_PathRemapping: 1 + - s_start_PathSourceDirections: 1 + - s_start_PathTypes: 1 + - s_start_Positioning: 1 + - s_start_RGBAlpha: 0 + - s_start_RGBBlue: 0 + - s_start_RGBGreen: 0 + - s_start_RGBRed: 0 + - s_start_RimLight0Color: 1 + - s_start_RimLight0GlobalMasking: 0 + - s_start_RimLight0HueShift: 0 + - s_start_RimLight0LightDirMask: 0 + - s_start_RimLight0ShapeControls: 1 + - s_start_RimLight1Color: 1 + - s_start_RimLight1GlobalMasking: 0 + - s_start_RimLight1HueShift: 0 + - s_start_RimLight1LightDirMask: 0 + - s_start_RimLight1ShapeControls: 1 + - s_start_RimLight2DirectionMask: 0 + - s_start_RimLightDirectionMask: 0 + - s_start_SSAOAdvanced: 0 + - s_start_SSAOColorAndMasking: 1 + - s_start_ScrollingEmission0: 0 + - s_start_ScrollingEmission1: 0 + - s_start_ScrollingEmission2: 0 + - s_start_ScrollingEmission3: 0 + - s_start_ShadingAddPass: 0 + - s_start_ShadingGlobalMask: 0 + - s_start_StylizedReflectionLilEnviroReflections: 1 + - s_start_StylizedReflectionLilSpecular: 1 + - s_start_StylizedReflectionMode0: 1 + - s_start_StylizedReflectionMode1: 1 + - s_start_StylizedSpecularAdvanced: 0 + - s_start_StylizedSpecularLayer0: 1 + - s_start_StylizedSpecularLayer1: 1 + - s_start_TimingOptions: 1 + - s_start_TransitionMenu: 0 + - s_start_UVTileDissolveRow0: 0 + - s_start_UVTileDissolveRow1: 0 + - s_start_UVTileDissolveRow2: 0 + - s_start_UVTileDissolveRow3: 0 + - s_start_VertAL: 0 + - s_start_VertexBarrelMode: 0 + - s_start_VertexColors: 0 + - s_start_VertexGlitchMirror: 0 + - s_start_VertexGlitchTexture: 1 + - s_start_VertexManipulationHeight: 1 + - s_start_VertexScale: 0 + - s_start_VertexSphereMode: 0 + - s_start_VertexTornadoMode: 0 + - s_start_VertexWind: 0 + - s_start_WorldTranslation: 0 + - s_start_brdfadvanced: 0 + - s_start_decal1_position: 1 + - s_start_decal2_position: 1 + - s_start_decal3_position: 1 + - s_start_decal_position: 1 + - s_start_deliot: 0 + - s_start_fogOpt: 1 + - s_start_ggxanisotropics: 0 + - s_start_heightFogOpt: 1 + - s_start_hextile: 0 + - s_start_liltoon_rim2_lightdir: 0 + - s_start_liltoon_rim_lightdir: 0 + - s_start_matcap1ApplyToAlpha: 0 + - s_start_matcap2ApplyToAlpha: 0 + - s_start_matcap3ApplyToAlpha: 0 + - s_start_matcapApplyToAlpha: 0 + - s_start_outline_al_color: 0 + - s_start_parallaxAdvanced: 0 + - s_start_vertexRounding: 0 + - s_start_vertexRoundingAL: 0 + - shader_is_using_thry_editor: 0 + - shader_locale: 0 + - shader_master_label: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _1st_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALDecalVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALDecalVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _ALDecaldCircleDimensions: {r: 0, g: 1, b: 0, a: 1} + - _ALUVPosition: {r: 0.5, g: 0.5, b: 1, a: 1} + - _ALUVScale: {r: 1, g: 1, b: 1, a: 1} + - _ALVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _AlphaAudioLinkAddRange: {r: 0, g: 0, b: 0, a: 1} + - _AlphaColor: {r: 1, g: 1, b: 1, a: 1} + - _AlphaMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _AlphaTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _AngleForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _Aniso0Tint: {r: 1, g: 1, b: 1, a: 1} + - _Aniso1Tint: {r: 1, g: 1, b: 1, a: 1} + - _AnisoColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _AnisotropyMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Ap_Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Ap_RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkBandOverrideSliders: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveDetail: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission0CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission1CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission2CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission3CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookFrame: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookScale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkOutlineColorMod: {r: 0, g: 1, b: 0, a: 0} + - _AudioLinkOutlineEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineSize: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkPathEmissionAddA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkRim2BrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2EmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2WidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimWidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiInnerEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiOuterEmission: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceColor: {r: 1, g: 1, b: 1, a: 1} + - _BackFaceMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BacklightColor: {r: 0.85, g: 0.8, b: 0.7, a: 1} + - _BacklightColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _BlackLightMasking0Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking1Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking2Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking3Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlueColor: {r: 1, g: 1, b: 1, a: 1} + - _BlueTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BumpMapPan: {r: 0, g: 0, b: 0, a: 0} + - _CenterOutDissolveDirection: {r: 0, g: 0, b: 1, a: 0} + - _ClearCoatMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _ClearCoatReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _ClearCoatSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _ClothMetallicSmoothnessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapColor: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotation: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotationPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalColor: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor1: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor2: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor3: {r: 1, g: 1, b: 1, a: 1} + - _DecalMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalPosition: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition1: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition2: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition3: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalScale: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale1: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale2: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale3: {r: 1, g: 1, b: 1, a: 0} + - _DecalSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset1: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset2: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset3: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DepthColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DepthRimColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DetailMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailNormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTexPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTint: {r: 1, g: 1, b: 1, a: 1} + - _DissolveDetailNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveEdgeColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveEndPoint: {r: 0, g: 1, b: 0, a: 0} + - _DissolveMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveNoiseTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveStartPoint: {r: 0, g: -1, b: 0, a: 0} + - _DissolveTextureColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveToTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrength1AudioLink: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrengthAudioLink: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL0Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL0StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL1Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL1StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL2Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL2StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL3Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL3StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor1: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor2: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor3: {r: 1, g: 1, b: 1, a: 1} + - _EmissionMap1Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMapPan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask1Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _EmissiveScroll_Direction: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction1: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction2: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction3: {r: 0, g: -10, b: 0, a: 0} + - _FXProximityColorMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _FXProximityColorMinColor: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookColor: {r: 1, g: 1, b: 1, a: 1} + - _FlipbookCrossfadeRange: {r: 0.75, g: 1, b: 0, a: 1} + - _FlipbookMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookPanning: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _FlipbookSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookTexArrayPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALMaxBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALSizeAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterColor: {r: 1, g: 1, b: 1, a: 1} + - _GlitterColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSize: {r: 0.1, g: 0.5, b: 0, a: 1} + - _GlitterRandomRotationSpeed: {r: 0, g: 0, b: 0, a: 0} + - _GlitterUVPanning: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskMinMaxSlider_0: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_1: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_10: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_11: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_12: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_13: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_14: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_15: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_2: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_3: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_4: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_5: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_6: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_7: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_8: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_9: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskTexture0Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalThemeColor0: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor1: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor2: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor3: {r: 1, g: 1, b: 1, a: 1} + - _GreenColor: {r: 1, g: 1, b: 1, a: 1} + - _GreenTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _HeightMapPan: {r: 0, g: 0, b: 0, a: 0} + - _HeightmaskPan: {r: 0, g: 0, b: 0, a: 0} + - _HighColor: {r: 1, g: 1, b: 1, a: 1} + - _HighColor_TexPan: {r: 0, g: 0, b: 0, a: 0} + - _LTCGI_DiffuseColor: {r: 1, g: 1, b: 1, a: 1} + - _LTCGI_SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _LightDataSDFMapPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingAOMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingDetailShadowMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingForcedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingWrappedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightngForcedDirection: {r: 0, g: 0, b: 0, a: 1} + - _LineColor: {r: 1, g: 1, b: 1, a: 1} + - _LookAtAlphaDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtAlphaMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtBlueDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtBlueMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBluePivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBlueUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtGreenDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtGreenMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtRedMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _MainColorAdjustTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MainTexPan: {r: 0, g: 0, b: 0, a: 0} + - _MatCap2ndBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap3rdBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap4thBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCapBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap3MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap4MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Pan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapColor: {r: 1, g: 1, b: 1, a: 1} + - _MatcapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapPan: {r: 0, g: 0, b: 0, a: 0} + - _MirrorColor: {r: 1, g: 1, b: 1, a: 1} + - _MirrorTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _MochieSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _MultilayerMathBlurMapPan: {r: 0, g: 0, b: 0, a: 0} + - _NormalCorrectOrigin: {r: 0, g: 0.4, b: -0.025, a: 1} + - _OutlineDropShadowOffset: {r: 1, g: 0, b: 0, a: 0} + - _OutlineMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _OutlinePersonaDirection: {r: 1, g: 0, b: 0, a: 0} + - _OutlineTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _PBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _PPMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _PPRGB: {r: 1, g: 1, b: 1, a: 1} + - _PPTint: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ParallaxInternalMapPan: {r: 0, g: 0, b: 1, a: 1} + - _ParallaxInternalMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMinColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalPanDepthSpeed: {r: 0, g: 0, b: 1, a: 1} + - _PathALAutoCorrelatorRangeA: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeB: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeG: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeR: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALHistoryRangeA: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeB: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeG: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeR: {r: 0, g: 1, b: 0, a: 1} + - _PathColorA: {r: 1, g: 1, b: 1, a: 1} + - _PathColorB: {r: 1, g: 1, b: 1, a: 1} + - _PathColorG: {r: 1, g: 1, b: 1, a: 1} + - _PathColorR: {r: 1, g: 1, b: 1, a: 1} + - _PathEmissionStrength: {r: 0, g: 0, b: 0, a: 0} + - _PathGapLengths: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathOffset: {r: 0, g: 0, b: 0, a: 0} + - _PathRemapA: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapB: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapG: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapR: {r: 0, g: 1, b: 0, a: 1} + - _PathSegments: {r: 0, g: 0, b: 0, a: 0} + - _PathSoftness: {r: 1, g: 1, b: 1, a: 1} + - _PathSpeed: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathTime: {r: -999, g: -999, b: -999, a: -999} + - _PathWidth: {r: 0.03, g: 0.03, b: 0.03, a: 0.03} + - _PathingColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PathingMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PolarCenter: {r: 0.5, g: 0.5, b: 0, a: 0} + - _RGBAAlphaPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAAlphaPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAAlphaScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBABlueScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAGreenScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBARedPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBASmoothnessMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RedColor: {r: 1, g: 1, b: 1, a: 1} + - _RedTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _ReflectionColor: {r: 1, g: 1, b: 1, a: 1} + - _ReflectionCubeColor: {r: 0, g: 0, b: 0, a: 1} + - _RgbNormalAPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalBPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalGPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalRPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2Color: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _Rim2ColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2IndirColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2ShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _Rim2TexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimColor: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _RimColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimEnviroMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimIndirColor: {r: 1, g: 1, b: 1, a: 1} + - _RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _RimMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _RimTexPan: {r: 0, g: 0, b: 0, a: 0} + - _SDFForward: {r: 0, g: 0, b: 1, a: 0} + - _SDFLeft: {r: -1, g: 0, b: 0, a: 0} + - _SDFShadingTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOColor: {r: 0, g: 0, b: 0, a: 1} + - _SSAOColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOHSV: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaxDistanceFalloff: {r: 0.01, g: 0.1, b: 1, a: 1} + - _SSSColor: {r: 1, g: 0, b: 0, a: 1} + - _SSSThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_HighColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_Rim2LightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_RimLightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowAOShift: {r: 0, g: 1, b: 0, a: 1} + - _ShadowAOShift2: {r: 0, g: 1, b: 0, a: 1} + - _ShadowBorderColor: {r: 1, g: 0, b: 0, a: 1} + - _ShadowBorderMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowColor: {r: 0.7, g: 0.75, b: 0.85, a: 1} + - _ShadowColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowStrengthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SkinThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SphericalDissolveCenter: {r: 0, g: 0, b: 0, a: 1} + - _SssColorBleedAoWeights: {r: 0.4, g: 0.15, b: 0.13, a: 0} + - _SssTransmissionAbsorption: {r: -8, g: -40, b: -64, a: 0} + - _TPS_BuldgeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorForward: {r: 0, g: 0, b: 1, a: 0} + - _TPS_PenetratorRight: {r: 1, g: 0, b: 0, a: 0} + - _TPS_PenetratorScale: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorUp: {r: 0, g: 1, b: 0, a: 0} + - _TPS_SqueezeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSScale: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericColor: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericScale: {r: 1, g: 1, b: 1, a: 1} + - _TextPositionColor: {r: 1, g: 0, b: 1, a: 1} + - _TextPositionOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionScale: {r: 1, g: 1, b: 1, a: 1} + - _TextTimeColor: {r: 1, g: 0, b: 1, a: 1} + - _TextTimeOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextTimePadding: {r: 0, g: 0, b: 0, a: 0} + - _TextTimeScale: {r: 1, g: 1, b: 1, a: 1} + - _TruchetALAlpha: {r: 0, g: 0, b: 0, a: 0} + - _TruchetALEmission: {r: 0, g: 0, b: 0, a: 0} + - _TruchetChronoPanSpeed: {r: 0, g: 0, b: 0, a: 0} + - _TruchetColor: {r: 1, g: 1, b: 1, a: 1} + - _TruchetMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _TruchetPanOffset: {r: 0, g: 0, b: 0, a: 0} + - _TruchetTexPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexBasicsMaskUVPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalRotationAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalRotationCTALSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalScaleALMax: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalScaleALMin: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexLookAtAlphaAudiolink: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationHeightAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationHeightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationLocalRotation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalRotationSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalScale: {r: 1, g: 1, b: 1, a: 1} + - _VertexManipulationLocalTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationWorldTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexRoundingRangeAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexSpectrumOffsetMax: {r: 0, g: 0.1, b: 0, a: 1} + - _VertexSpectrumOffsetMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexSphereCenter: {r: 0, g: 0, b: 0, a: 1} + - _VertexWindDetailDirection: {r: 0, g: 1, b: 0, a: 0} + - _VertexWindPrimaryDirection: {r: 1, g: 0, b: 0, a: 0} + - _VertexWorldTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexWorldTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VideoMaskTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _VideoResolution: {r: 1280, g: 720, b: 0, a: 0} + - _VoronoiGradient: {r: 0, g: 0.5, b: 0, a: 0} + - _VoronoiInnerColor: {r: 1, g: 1, b: 1, a: 1} + - _VoronoiMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiOuterColor: {r: 0, g: 0, b: 0, a: 1} + - _VoronoiRandomMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiRandomMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiSpeed: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Quiz/Materials/NoPoints/NoPointsTrophyOuter.mat.meta b/Assets/Quiz/Materials/NoPoints/NoPointsTrophyOuter.mat.meta new file mode 100644 index 0000000..22ea945 --- /dev/null +++ b/Assets/Quiz/Materials/NoPoints/NoPointsTrophyOuter.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6dba0e876b8368347a4fb3f027e9b50e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Circle/Poiyomi Pro World.shader b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Circle/Poiyomi Pro World.shader index 9c69799..1d4c886 100644 --- a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Circle/Poiyomi Pro World.shader +++ b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Circle/Poiyomi Pro World.shader @@ -3646,10 +3646,10 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/82f02b2138cfe1242990f0e41f2a761 { emissionTex = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMap, _MainTex, ((.5 + poiLight.nDotV * .5) * float4(1,1,0,0).xy) + _Time.x * 5.0); } - emissionColor0 = emissionTex.rgb * lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(0.1714412,0.6724433,0.8549928,1).rgb, 0.0); + emissionColor0 = emissionTex.rgb * lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, _EmissionColor.rgb, 0.0); emissionAlpha = emissionTex.a; #else - emissionColor0 = lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(0.1714412,0.6724433,0.8549928,1).rgb, 0.0); + emissionColor0 = lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, _EmissionColor.rgb, 0.0); #endif float3 inverseLighting = saturate((1.0 - poiLight.directColor) * sqrt(poiLight.directColor)); emissionColor0 = lerp(emissionColor0.rgb, emissionColor0.rgb * inverseLighting, 0.0); @@ -13024,10 +13024,10 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/82f02b2138cfe1242990f0e41f2a761 { emissionTex = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMap, _MainTex, ((.5 + poiLight.nDotV * .5) * float4(1,1,0,0).xy) + _Time.x * 5.0); } - emissionColor0 = emissionTex.rgb * lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(0.1714412,0.6724433,0.8549928,1).rgb, 0.0); + emissionColor0 = emissionTex.rgb * lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, _EmissionColor.rgb, 0.0); emissionAlpha = emissionTex.a; #else - emissionColor0 = lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(0.1714412,0.6724433,0.8549928,1).rgb, 0.0); + emissionColor0 = lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, _EmissionColor.rgb, 0.0); #endif float3 inverseLighting = saturate((1.0 - poiLight.directColor) * sqrt(poiLight.directColor)); emissionColor0 = lerp(emissionColor0.rgb, emissionColor0.rgb * inverseLighting, 0.0); diff --git a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsMeter.meta b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsMeter.meta index fa6523e..1442f40 100644 --- a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsMeter.meta +++ b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsMeter.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4ea595fc4bb3a644baacb481de9424c4 +guid: 5d0c1f153be06f542bfea090cda510d8 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsMeter/Poiyomi Pro World.shader b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsMeter/Poiyomi Pro World.shader index f8d2086..eeccbb3 100644 --- a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsMeter/Poiyomi Pro World.shader +++ b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsMeter/Poiyomi Pro World.shader @@ -623,6 +623,7 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f #define _EMISSION #define _LIGHTINGMODE_FLAT #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_DISSOLVEDETAILNOISE #define PROP_EMISSIONMASK1 #define OPTIMIZER_ENABLED #pragma target 5.0 @@ -3793,7 +3794,7 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f + 0.0 + 0.0 + 0.0; - float dds = 0.1; + float dds = 0.098; if (0.0) { float2 udim = floor(poiMesh.uv[(int)0.0]); @@ -3821,7 +3822,7 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f dissolveMask = 1 - dissolveMask; } #if defined(PROP_DISSOLVEDETAILNOISE) || !defined(OPTIMIZER_ENABLED) - float dissolveDetailNoise = POI2D_SAMPLER_PAN(_DissolveDetailNoise, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + float dissolveDetailNoise = POI2D_SAMPLER_PAN(_DissolveDetailNoise, _MainTex, poiUV(poiMesh.uv[0.0], float4(3,10,0,0)), float4(0,-3,0,0)); #else float dissolveDetailNoise = 0; #endif @@ -3866,14 +3867,14 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f { float3 pos = 0.0 == 0 ? poiMesh.localPos.rgb : poiMesh.vertexColor.rgb; distanceTo = dot(pos - currentPos, direction) - dissolveDetailNoise * dds; - edgeAlpha = smoothstep(0.1 + .00001, 0, distanceTo); + edgeAlpha = smoothstep(0.05 + .00001, 0, distanceTo); dissolveAlpha = step(distanceTo, 0); edgeAlpha *= 1 - dissolveAlpha; } else { distanceTo = dot(poiMesh.worldPos - currentPos, direction) - dissolveDetailNoise * dds; - edgeAlpha = smoothstep(0.1 + .00001, 0, distanceTo); + edgeAlpha = smoothstep(0.05 + .00001, 0, distanceTo); dissolveAlpha = (distanceTo < 0) ? 1 : 0; edgeAlpha *= 1 - dissolveAlpha; } @@ -3980,9 +3981,9 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f applyToGlobalMask(poiMods, 0.0 - 1, 0.0, 1 - (dissolveAlpha * .999999)); } - if (0.0 || (2.0 == 2 && 0.1 != 0)) + if (0.0 || (2.0 == 2 && 0.05 != 0)) { - edgeColor = _DissolveEdgeGradient.Sample(sampler_MainTex, poiUV(float2(edgeAlpha, edgeAlpha), float4(1,1,0,0))) * float4(poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0), float4(1,1,1,1).a); + edgeColor = _DissolveEdgeGradient.Sample(sampler_MainTex, poiUV(float2(edgeAlpha, edgeAlpha), float4(1,1,0,0))) * float4(poiThemeColor(poiMods, float4(0,1,0.9067923,1).rgb, 0.0), float4(0,1,0.9067923,1).a); #ifndef POI_SHADOW if (0.0 && 0.0) @@ -3990,9 +3991,9 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f edgeColor.rgb = hueShift(edgeColor.rgb, 0.0 + _Time.x * 0.0, 0.0, 1.0); } #endif - poiFragData.baseColor = lerp(poiFragData.baseColor, edgeColor.rgb, smoothstep(0, 1 - 0.5 * .99999999999, edgeAlpha)); + poiFragData.baseColor = lerp(poiFragData.baseColor, edgeColor.rgb, smoothstep(0, 1 - 0.0 * .99999999999, edgeAlpha)); } - poiFragData.emission += lerp(0, dissolveToTexture * 0.97, dissolveAlpha) + lerp(0, edgeColor.rgb * 0.0, smoothstep(0, 1 - 0.5 * .99999999999, edgeAlpha)); + poiFragData.emission += lerp(0, dissolveToTexture * 0.0, dissolveAlpha) + lerp(0, edgeColor.rgb * 2.34, smoothstep(0, 1 - 0.0 * .99999999999, edgeAlpha)); #endif } #endif @@ -4951,6 +4952,7 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f #define _EMISSION #define _LIGHTINGMODE_FLAT #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_DISSOLVEDETAILNOISE #define PROP_EMISSIONMASK1 #define OPTIMIZER_ENABLED #pragma target 5.0 @@ -7410,7 +7412,7 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f + 0.0 + 0.0 + 0.0; - float dds = 0.1; + float dds = 0.098; if (0.0) { float2 udim = floor(poiMesh.uv[(int)0.0]); @@ -7438,7 +7440,7 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f dissolveMask = 1 - dissolveMask; } #if defined(PROP_DISSOLVEDETAILNOISE) || !defined(OPTIMIZER_ENABLED) - float dissolveDetailNoise = POI2D_SAMPLER_PAN(_DissolveDetailNoise, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + float dissolveDetailNoise = POI2D_SAMPLER_PAN(_DissolveDetailNoise, _MainTex, poiUV(poiMesh.uv[0.0], float4(3,10,0,0)), float4(0,-3,0,0)); #else float dissolveDetailNoise = 0; #endif @@ -7483,14 +7485,14 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f { float3 pos = 0.0 == 0 ? poiMesh.localPos.rgb : poiMesh.vertexColor.rgb; distanceTo = dot(pos - currentPos, direction) - dissolveDetailNoise * dds; - edgeAlpha = smoothstep(0.1 + .00001, 0, distanceTo); + edgeAlpha = smoothstep(0.05 + .00001, 0, distanceTo); dissolveAlpha = step(distanceTo, 0); edgeAlpha *= 1 - dissolveAlpha; } else { distanceTo = dot(poiMesh.worldPos - currentPos, direction) - dissolveDetailNoise * dds; - edgeAlpha = smoothstep(0.1 + .00001, 0, distanceTo); + edgeAlpha = smoothstep(0.05 + .00001, 0, distanceTo); dissolveAlpha = (distanceTo < 0) ? 1 : 0; edgeAlpha *= 1 - dissolveAlpha; } @@ -7597,9 +7599,9 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f applyToGlobalMask(poiMods, 0.0 - 1, 0.0, 1 - (dissolveAlpha * .999999)); } - if (0.0 || (2.0 == 2 && 0.1 != 0)) + if (0.0 || (2.0 == 2 && 0.05 != 0)) { - edgeColor = _DissolveEdgeGradient.Sample(sampler_MainTex, poiUV(float2(edgeAlpha, edgeAlpha), float4(1,1,0,0))) * float4(poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0), float4(1,1,1,1).a); + edgeColor = _DissolveEdgeGradient.Sample(sampler_MainTex, poiUV(float2(edgeAlpha, edgeAlpha), float4(1,1,0,0))) * float4(poiThemeColor(poiMods, float4(0,1,0.9067923,1).rgb, 0.0), float4(0,1,0.9067923,1).a); #ifndef POI_SHADOW if (0.0 && 0.0) @@ -7607,9 +7609,9 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f edgeColor.rgb = hueShift(edgeColor.rgb, 0.0 + _Time.x * 0.0, 0.0, 1.0); } #endif - poiFragData.baseColor = lerp(poiFragData.baseColor, edgeColor.rgb, smoothstep(0, 1 - 0.5 * .99999999999, edgeAlpha)); + poiFragData.baseColor = lerp(poiFragData.baseColor, edgeColor.rgb, smoothstep(0, 1 - 0.0 * .99999999999, edgeAlpha)); } - poiFragData.emission += lerp(0, dissolveToTexture * 0.97, dissolveAlpha) + lerp(0, edgeColor.rgb * 0.0, smoothstep(0, 1 - 0.5 * .99999999999, edgeAlpha)); + poiFragData.emission += lerp(0, dissolveToTexture * 0.0, dissolveAlpha) + lerp(0, edgeColor.rgb * 2.34, smoothstep(0, 1 - 0.0 * .99999999999, edgeAlpha)); #endif } #endif @@ -8274,6 +8276,7 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f #define _EMISSION #define _LIGHTINGMODE_FLAT #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_DISSOLVEDETAILNOISE #define PROP_EMISSIONMASK1 #define OPTIMIZER_ENABLED #pragma target 5.0 @@ -10468,7 +10471,7 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f + 0.0 + 0.0 + 0.0; - float dds = 0.1; + float dds = 0.098; if (0.0) { float2 udim = floor(poiMesh.uv[(int)0.0]); @@ -10496,7 +10499,7 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f dissolveMask = 1 - dissolveMask; } #if defined(PROP_DISSOLVEDETAILNOISE) || !defined(OPTIMIZER_ENABLED) - float dissolveDetailNoise = POI2D_SAMPLER_PAN(_DissolveDetailNoise, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + float dissolveDetailNoise = POI2D_SAMPLER_PAN(_DissolveDetailNoise, _MainTex, poiUV(poiMesh.uv[0.0], float4(3,10,0,0)), float4(0,-3,0,0)); #else float dissolveDetailNoise = 0; #endif @@ -10541,14 +10544,14 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f { float3 pos = 0.0 == 0 ? poiMesh.localPos.rgb : poiMesh.vertexColor.rgb; distanceTo = dot(pos - currentPos, direction) - dissolveDetailNoise * dds; - edgeAlpha = smoothstep(0.1 + .00001, 0, distanceTo); + edgeAlpha = smoothstep(0.05 + .00001, 0, distanceTo); dissolveAlpha = step(distanceTo, 0); edgeAlpha *= 1 - dissolveAlpha; } else { distanceTo = dot(poiMesh.worldPos - currentPos, direction) - dissolveDetailNoise * dds; - edgeAlpha = smoothstep(0.1 + .00001, 0, distanceTo); + edgeAlpha = smoothstep(0.05 + .00001, 0, distanceTo); dissolveAlpha = (distanceTo < 0) ? 1 : 0; edgeAlpha *= 1 - dissolveAlpha; } @@ -10655,9 +10658,9 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f applyToGlobalMask(poiMods, 0.0 - 1, 0.0, 1 - (dissolveAlpha * .999999)); } - if (0.0 || (2.0 == 2 && 0.1 != 0)) + if (0.0 || (2.0 == 2 && 0.05 != 0)) { - edgeColor = _DissolveEdgeGradient.Sample(sampler_MainTex, poiUV(float2(edgeAlpha, edgeAlpha), float4(1,1,0,0))) * float4(poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0), float4(1,1,1,1).a); + edgeColor = _DissolveEdgeGradient.Sample(sampler_MainTex, poiUV(float2(edgeAlpha, edgeAlpha), float4(1,1,0,0))) * float4(poiThemeColor(poiMods, float4(0,1,0.9067923,1).rgb, 0.0), float4(0,1,0.9067923,1).a); #ifndef POI_SHADOW if (0.0 && 0.0) @@ -10665,9 +10668,9 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f edgeColor.rgb = hueShift(edgeColor.rgb, 0.0 + _Time.x * 0.0, 0.0, 1.0); } #endif - poiFragData.baseColor = lerp(poiFragData.baseColor, edgeColor.rgb, smoothstep(0, 1 - 0.5 * .99999999999, edgeAlpha)); + poiFragData.baseColor = lerp(poiFragData.baseColor, edgeColor.rgb, smoothstep(0, 1 - 0.0 * .99999999999, edgeAlpha)); } - poiFragData.emission += lerp(0, dissolveToTexture * 0.97, dissolveAlpha) + lerp(0, edgeColor.rgb * 0.0, smoothstep(0, 1 - 0.5 * .99999999999, edgeAlpha)); + poiFragData.emission += lerp(0, dissolveToTexture * 0.0, dissolveAlpha) + lerp(0, edgeColor.rgb * 2.34, smoothstep(0, 1 - 0.0 * .99999999999, edgeAlpha)); #endif } #endif @@ -10874,6 +10877,7 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f #define _EMISSION #define _LIGHTINGMODE_FLAT #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_DISSOLVEDETAILNOISE #define PROP_EMISSIONMASK1 #define OPTIMIZER_ENABLED #pragma target 5.0 @@ -13808,7 +13812,7 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f + 0.0 + 0.0 + 0.0; - float dds = 0.1; + float dds = 0.098; if (0.0) { float2 udim = floor(poiMesh.uv[(int)0.0]); @@ -13836,7 +13840,7 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f dissolveMask = 1 - dissolveMask; } #if defined(PROP_DISSOLVEDETAILNOISE) || !defined(OPTIMIZER_ENABLED) - float dissolveDetailNoise = POI2D_SAMPLER_PAN(_DissolveDetailNoise, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + float dissolveDetailNoise = POI2D_SAMPLER_PAN(_DissolveDetailNoise, _MainTex, poiUV(poiMesh.uv[0.0], float4(3,10,0,0)), float4(0,-3,0,0)); #else float dissolveDetailNoise = 0; #endif @@ -13881,14 +13885,14 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f { float3 pos = 0.0 == 0 ? poiMesh.localPos.rgb : poiMesh.vertexColor.rgb; distanceTo = dot(pos - currentPos, direction) - dissolveDetailNoise * dds; - edgeAlpha = smoothstep(0.1 + .00001, 0, distanceTo); + edgeAlpha = smoothstep(0.05 + .00001, 0, distanceTo); dissolveAlpha = step(distanceTo, 0); edgeAlpha *= 1 - dissolveAlpha; } else { distanceTo = dot(poiMesh.worldPos - currentPos, direction) - dissolveDetailNoise * dds; - edgeAlpha = smoothstep(0.1 + .00001, 0, distanceTo); + edgeAlpha = smoothstep(0.05 + .00001, 0, distanceTo); dissolveAlpha = (distanceTo < 0) ? 1 : 0; edgeAlpha *= 1 - dissolveAlpha; } @@ -13995,9 +13999,9 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f applyToGlobalMask(poiMods, 0.0 - 1, 0.0, 1 - (dissolveAlpha * .999999)); } - if (0.0 || (2.0 == 2 && 0.1 != 0)) + if (0.0 || (2.0 == 2 && 0.05 != 0)) { - edgeColor = _DissolveEdgeGradient.Sample(sampler_MainTex, poiUV(float2(edgeAlpha, edgeAlpha), float4(1,1,0,0))) * float4(poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0), float4(1,1,1,1).a); + edgeColor = _DissolveEdgeGradient.Sample(sampler_MainTex, poiUV(float2(edgeAlpha, edgeAlpha), float4(1,1,0,0))) * float4(poiThemeColor(poiMods, float4(0,1,0.9067923,1).rgb, 0.0), float4(0,1,0.9067923,1).a); #ifndef POI_SHADOW if (0.0 && 0.0) @@ -14005,9 +14009,9 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/0a7f557424e99564aadf76146dbd76f edgeColor.rgb = hueShift(edgeColor.rgb, 0.0 + _Time.x * 0.0, 0.0, 1.0); } #endif - poiFragData.baseColor = lerp(poiFragData.baseColor, edgeColor.rgb, smoothstep(0, 1 - 0.5 * .99999999999, edgeAlpha)); + poiFragData.baseColor = lerp(poiFragData.baseColor, edgeColor.rgb, smoothstep(0, 1 - 0.0 * .99999999999, edgeAlpha)); } - poiFragData.emission += lerp(0, dissolveToTexture * 0.97, dissolveAlpha) + lerp(0, edgeColor.rgb * 0.0, smoothstep(0, 1 - 0.5 * .99999999999, edgeAlpha)); + poiFragData.emission += lerp(0, dissolveToTexture * 0.0, dissolveAlpha) + lerp(0, edgeColor.rgb * 2.34, smoothstep(0, 1 - 0.0 * .99999999999, edgeAlpha)); #endif } #endif diff --git a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsMeter/Poiyomi Pro World.shader.meta b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsMeter/Poiyomi Pro World.shader.meta index fb7ebfd..1170f84 100644 --- a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsMeter/Poiyomi Pro World.shader.meta +++ b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsMeter/Poiyomi Pro World.shader.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f821e5390e769bb47afe32fa4c27fd8f +guid: 8a6f6822e77565643bcb577f88f9b5f5 ShaderImporter: externalObjects: {} defaultTextures: [] diff --git a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsTrophyInner.meta b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsTrophyInner.meta new file mode 100644 index 0000000..f6735a0 --- /dev/null +++ b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsTrophyInner.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fba70b05258df3047861ff36c0a33270 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsTrophyInner/Poiyomi Pro.shader b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsTrophyInner/Poiyomi Pro.shader new file mode 100644 index 0000000..54f6a13 --- /dev/null +++ b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsTrophyInner/Poiyomi Pro.shader @@ -0,0 +1,9165 @@ +Shader "Hidden/Locked/.poiyomi/Poiyomi Pro/9fa141bf96518154fb0b91e9f9d2831c" +{ + Properties + { + [HideInInspector] shader_master_label ("Poiyomi 9.3.48", Float) = 0 + [HideInInspector] shader_is_using_thry_editor ("", Float) = 0 + [HideInInspector] shader_locale ("0db0b86376c3dca4b9a6828ef8615fe0", Float) = 0 + [HideInInspector] footer_website ("{texture:{name:icon-poilogo,height:24},action:{type:URL,data:https://www.poiyomi.com},hover:WEBSITE}", Float) = 0 + [HideInInspector] footer_discord ("{texture:{name:icon-discord,height:24},action:{type:URL,data:https://discord.gg/Ays52PY},hover:DISCORD}", Float) = 0 + [HideInInspector] footer_patreon ("{texture:{name:icon-patreon-new,height:24},action:{type:URL,data:https://www.patreon.com/poiyomi},hover:PATREON}", Float) = 0 + [HideInInspector] footer_youtube ("{texture:{name:icon-youtube,height:24},action:{type:URL,data:https://www.youtube.com/poiyomi},hover:YOUTUBE}", Float) = 0 + [HideInInspector] footer_github ("{texture:{name:icon-github,height:24},action:{type:URL,data:https://github.com/poiyomi/PoiyomiToonShader},hover:GITHUB}", Float) = 0 + [HideInInspector] footer_bluesky ("{texture:{name:icon-bluesky,height:24},action:{type:URL,data:https://bsky.app/profile/poiyomi.com},hover:BLUESKY}", Float) = 0 + [HideInInspector] footer_twitter ("{texture:{name:icon-twitter,height:24},action:{type:URL,data:https://x.com/poiyomi},hover:X}", Float) = 0 + [Header(POIYOMI SHADER UI FAILED TO LOAD)] + [Header(. This is caused by scripts failing to compile. It can be fixed.)] + [Header(. The inspector will look broken and will not work properly until fixed.)] + [Header(. Please check your console for script errors.)] + [Header(. You can filter by errors in the console window.)] + [Header(. Often the topmost error points to the erroring script.)] + [Space(30)][Header(Common Error Causes)] + [Header(. Installing multiple Poiyomi Shader packages)] + [Header(. Make sure to delete the Poiyomi shader folder before you update Poiyomi.)] + [Header(. If a package came with Poiyomi this is bad practice and can cause issues.)] + [Header(. Delete the package and import it without any Poiyomi components.)] + [Header(. Bad VRCSDK installation (e.g. Both VCC and Standalone))] + [Header(. Delete the VRCSDK Folder in Assets if you are using the VCC.)] + [Header(. Avoid using third party SDKs. They can cause incompatibility.)] + [Header(. Script Errors in other scripts)] + [Header(. Outdated tools or prefabs can cause this.)] + [Header(. Update things that are throwing errors or move them outside the project.)] + [Space(30)][Header(Visit Our Discord to Ask For Help)] + [Space(5)]_ShaderUIWarning0 (" → discord.gg/poiyomi ← We can help you get it fixed! --{condition_showS:(0==1)}", Int) = -0 + [Space(1400)][Header(POIYOMI SHADER UI FAILED TO LOAD)] + _ShaderUIWarning1 ("Please scroll up for more information! --{condition_showS:(0==1)}", Int) = -0 + [HideInInspector] _ForgotToLockMaterial (";;YOU_FORGOT_TO_LOCK_THIS_MATERIAL;", Int) = 1 + [ThryShaderOptimizerLockButton] _ShaderOptimizerEnabled ("", Int) = 1 + [HideInInspector] GeometryShader_Enabled("GEOMETRY SHADER ENABLED", Float) = 1 + [HideInInspector] Tessellation_Enabled("TESSELLATION ENABLED", Float) = 1 + [ThryWideEnum(Opaque, 0, Cutout, 1, TransClipping, 9, Fade, 2, Transparent, 3, Additive, 4, Soft Additive, 5, Multiplicative, 6, 2x Multiplicative, 7)]_Mode("Rendering Preset--{on_value_actions:[ + {value:0,actions:[{type:SET_PROPERTY,data:render_queue=2000},{type:SET_PROPERTY,data:_AlphaForceOpaque=1}, {type:SET_PROPERTY,data:render_type=Opaque}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=0}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:1,actions:[{type:SET_PROPERTY,data:render_queue=2450},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=.5}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:9,actions:[{type:SET_PROPERTY,data:render_queue=2460},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.01}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:2,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.002}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:3,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=1}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:4,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:5,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=4}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=4}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=4}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:6,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:7,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=3}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=3}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]} + }]}]}", Int) = 0 + [HideInInspector] m_mainCategory ("Color & Normals--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/main},hover:Documentation}}", Float) = 0 + _Color ("Color & Alpha--{reference_property:_ColorThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _ColorThemeIndex ("", Int) = 0 + [sRGBWarning(true)]_MainTex ("Texture--{reference_properties:[_MainTexPan, _MainTexUV, _MainPixelMode, _MainTexStochastic, _MainIgnoreTexAlpha]}", 2D) = "white" { } + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _MainTexUV ("UV", Int) = 0 + [HideInInspector][Vector2]_MainTexPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ToggleUI]_MainPixelMode ("Pixel Mode", Float) = 0 + [HideInInspector][ToggleUI]_MainTexStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][ToggleUI]_MainIgnoreTexAlpha ("Ignore Alpha", Float) = 0 + [Normal]_BumpMap ("Normal Map--{reference_properties:[_BumpMapPan, _BumpMapUV, _BumpScale, _BumpMapStochastic]}", 2D) = "bump" { } + [HideInInspector][Vector2]_BumpMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _BumpMapUV ("UV", Int) = 0 + [HideInInspector]_BumpScale ("Intensity", Range(0, 10)) = 1 + [HideInInspector][ToggleUI]_BumpMapStochastic ("Stochastic Sampling", Float) = 0 + [sRGBWarning]_AlphaMask ("Alpha Map--{reference_properties:[_AlphaMaskPan, _AlphaMaskUV, _AlphaMaskInvert, _MainAlphaMaskMode, _AlphaMaskBlendStrength, _AlphaMaskValue], alts:[_AlphaMap]}", 2D) = "white" { } + [HideInInspector][Vector2]_AlphaMaskPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _AlphaMaskUV ("UV", Int) = 0 + [HideInInspector][ThryWideEnum(Off, 0, Replace, 1, Multiply, 2, Add, 3, Subtract, 4)]_MainAlphaMaskMode ("Blend Mode", Int) = 2 + [HideInInspector]_AlphaMaskBlendStrength ("Blend Strength", Float) = 1 + [HideInInspector]_AlphaMaskValue ("Blend Offset", Float) = 0 + [HideInInspector][ToggleUI]_AlphaMaskInvert ("Invert", Float) = 0 + _Cutoff ("Alpha Cutoff", Range(0, 1.001)) = 0.5 + [HideInInspector] m_start_Alpha ("Alpha Options--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/alpha-options},hover:Documentation}}", Float) = 0 + [ToggleUI]_AlphaForceOpaque ("Force Opaque", Float) = 1 + _AlphaMod ("Alpha Mod", Range(-1, 1)) = 0.0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _AlphaGlobalMask ("Global Mask--{reference_property:_AlphaGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _AlphaGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] m_end_Alpha ("Alpha Options", Float) = 0 + [HideInInspector] m_lightingCategory ("Shading", Float) = 0 + [HideInInspector] m_start_PoiLightData ("Light Data--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/light-data},hover:Documentation}}", Float) = 0 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingAOMaps ("AO Maps (expand)--{reference_properties:[_LightingAOMapsPan, _LightingAOMapsUV,_LightDataAOStrengthR,_LightDataAOStrengthG,_LightDataAOStrengthB,_LightDataAOStrengthA, _LightDataAOGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingAOMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingAOMapsUV ("UV", Int) = 0 + [HideInInspector]_LightDataAOStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightDataAOStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataAOGlobalMaskR ("Global Mask--{reference_property:_LightDataAOGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataAOGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingDetailShadowMaps ("Shadow Map (expand)--{reference_properties:[_LightingDetailShadowMapsPan, _LightingDetailShadowMapsUV,_LightingDetailShadowStrengthR,_LightingDetailShadowStrengthG,_LightingDetailShadowStrengthB,_LightingDetailShadowStrengthA,_LightingAddDetailShadowStrengthR,_LightingAddDetailShadowStrengthG,_LightingAddDetailShadowStrengthB,_LightingAddDetailShadowStrengthA, _LightDataDetailShadowGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingDetailShadowMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingDetailShadowMapsUV ("UV", Int) = 0 + [HideInInspector]_LightingDetailShadowStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingDetailShadowStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthR ("Additive R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingAddDetailShadowStrengthG ("Additive G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthB ("Additive B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthA ("Additive A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataDetailShadowGlobalMaskR ("Global Mask--{reference_property:_LightDataDetailShadowGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataDetailShadowGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingShadowMasks ("Shadow Masks (expand)--{reference_properties:[_LightingShadowMasksPan, _LightingShadowMasksUV,_LightingShadowMaskStrengthR,_LightingShadowMaskStrengthG,_LightingShadowMaskStrengthB,_LightingShadowMaskStrengthA, _LightDataShadowMaskGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingShadowMasksPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingShadowMasksUV ("UV", Int) = 0 + [HideInInspector]_LightingShadowMaskStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingShadowMaskStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataShadowMaskGlobalMaskR ("Global Mask--{reference_property:_LightDataShadowMaskGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataShadowMaskGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [HideInInspector] s_start_LightDataBasePass ("Base Pass (Directional & Baked Lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [Enum(Poi Custom, 0, Standard, 1, UTS2, 2, OpenLit(lil toon), 3)] _LightingColorMode ("Light Color Mode", Int) = 0 + [Enum(Poi Custom, 0, Normalized NDotL, 1, Saturated NDotL, 2, Casted Shadows Only, 3, SDF, 4)] _LightingMapMode ("Light Map Mode", Int) = 0 + [HideInInspector] s_start_LightDataSDF ("Signed Distance fields--{persistent_expand:true,default_expand:true, condition_showS:(_LightingMapMode==4)}", Float) = 1 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, Nothing, Nothing, Linear, false)]_LightDataSDFMap ("SDF Map (expand)--{reference_properties:[_LightDataSDFMapPan, _LightDataSDFMapUV]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightDataSDFMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightDataSDFMapUV ("UV", Int) = 0 + _LightDataSDFMapLOD ("LOD", Range(0, 1)) = 0 + _LightDataSDFBlendY ("Blend Y Direction", Range(0.001, 2)) = 1 + [HideInInspector] s_end_LightDataSDF ("Signed Distance fields", Float) = 1 + [Enum(Poi Custom, 0, Forced Local Direction, 1, Forced World Direction, 2, UTS2, 3, OpenLit(lil toon), 4, View Direction, 5)] _LightingDirectionMode ("Light Direction Mode", Int) = 0 + [Vector3]_LightngForcedDirection ("Forced Direction--{condition_showS:(_LightingDirectionMode==1 || _LightingDirectionMode==2)}", Vector) = (0, 0, 0) + _LightingViewDirOffsetPitch ("View Dir Offset Pitch--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + _LightingViewDirOffsetYaw ("View Dir Offset Yaw--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + [ToggleUI]_LightingForceColorEnabled ("Force Light Color", Float) = 0 + _LightingForcedColor ("Forced Color--{condition_showS:(_LightingForceColorEnabled==1), reference_property:_LightingForcedColorThemeIndex}", Color) = (1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _LightingForcedColorThemeIndex ("", Int) = 0 + _Unlit_Intensity ("Unlit_Intensity--{condition_showS:(_LightingColorMode==2)}", Range(0.001, 4)) = 1 + [DoNotLock][ToggleUI]_LightingCapEnabled ("Limit Brightness", Float) = 1 + [DoNotLock]_LightingCap ("Max Brightness--{condition_showS:(_LightingCapEnabled==1)}", Range(0, 10)) = 1 + [DoNotLock]_LightingMinLightBrightness ("Min Brightness", Range(0, 1)) = 0 + _LightingIndirectUsesNormals ("Indirect Uses Normals--{condition_showS:(_LightingColorMode==0)}", Range(0, 1)) = 0 + _LightingCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 0 + [DoNotLock]_LightingMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + [ToggleUI]_LightingVertexLightingEnabled ("Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingMirrorVertexLightingEnabled ("Mirror Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingEnableLightVolumes ("Light Volumes", Float) = 1 + [HideInInspector] s_end_LightDataBasePass ("Base Pass", Float) = 1 + [HideInInspector] s_start_LightDataAddPass ("Add Pass (Point & Spot lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [ToggleUI]_LightingAdditiveEnable ("Pixel lights (Important)", Float) = 1 + [ToggleUI]_DisableDirectionalInAdd ("Ignore Directional Lights--{condition_showS:(_LightingAdditiveEnable==1)}", Float) = 1 + [ToggleUI]_LightingAdditiveLimited ("Limit Brightness", Float) = 1 + _LightingAdditiveLimit ("Max Brightness--{condition_showS:(_LightingAdditiveLimited==1)}", Range(0, 10)) = 1 + _LightingAdditiveCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 1 + _LightingAdditiveMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + _LightingAdditivePassthrough ("Point Light Passthrough--{condition_showS:(_LightingAdditiveEnable==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_LightDataAddPass ("Add Pass", Float) = 1 + [HideInInspector] s_start_LightDataDebug ("Debug / Data Visualizations--{reference_property:_LightDataDebugEnabled,persistent_expand:true}", Float) = 0 + [HideInInspector][DoNotAnimate][ThryToggleUI(false)]_LightDataDebugEnabled ("Debug", Float) = 0 + [ThryWideEnum(Direct Color, 0, Indirect Color, 1, Light Map, 2, Attenuation, 3, N Dot L, 4, Half Dir, 5, Direction, 6, Add Color, 7, Add Attenuation, 8, Add Shadow, 9, Add N Dot L, 10)] _LightingDebugVisualize ("Visualize", Int) = 0 + [HideInInspector] s_end_LightDataDebug ("Debug", Float) = 0 + [HideInInspector] m_end_PoiLightData ("Light Data", Float) = 0 + [HideInInspector] m_start_PoiShading (" Shading--{reference_property:_ShadingEnabled,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/main},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(VIGNETTE_MASKED)]_ShadingEnabled ("Enable Shading", Float) = 1 + [DoNotAnimate][KeywordEnum(TextureRamp, Multilayer Math, Wrapped, Skin, ShadeMap, Flat, Realistic, Cloth, SDF)] _LightingMode ("Lighting Type", Float) = 5 + _LightingShadowColor ("Shadow Tint--{condition_showS:(_LightingMode!=4 && _LightingMode!=1 && _LightingMode!=5)}", Color) = (1, 1, 1) + _ShadowStrength ("Shadow Strength--{condition_showS:(_LightingMode<=4 || _LightingMode==8)}", Range(0, 1)) = 1 + _LightingIgnoreAmbientColor ("Ignore Indirect Shadow Color--{condition_showS:(_LightingMode<=3 || _LightingMode==8)}", Range(0, 1)) = 1 + [Space(15)] + [HideInInspector] s_start_ShadingAddPass ("Add Pass (Point & Spot Lights)--{persistent_expand:true,default_expand:false}", Float) = 0 + [Enum(Realistic, 0, Toon, 1, Same as Base Pass, 3)] _LightingAdditiveType ("Lighting Type", Int) = 3 + _LightingAdditiveGradientStart ("Gradient Start--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = 0 + _LightingAdditiveGradientEnd ("Gradient End--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_ShadingAddPass ("Add Pass", Float) = 0 + [HideInInspector] s_start_ShadingGlobalMask ("Global Masks--{persistent_expand:true,default_expand:false}", Float) = 0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapApplyGlobalMaskIndex ("LightMap to Global Mask--{reference_property:_ShadingRampedLightMapApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapApplyGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapInverseApplyGlobalMaskIndex ("Inversed LightMap to Global Mask--{reference_property:_ShadingRampedLightMapInverseApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapInverseApplyGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] s_end_ShadingGlobalMask ("Global Masks", Float) = 0 + [HideInInspector] m_end_PoiShading ("Shading", Float) = 0 + [HideInInspector] m_OutlineCategory (" Outlines--{reference_property:_EnableOutlines,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/outlines/main},hover:Documentation}}", Float) = 0 + [HideInInspector] m_specialFXCategory ("Special FX", Float) = 0 + [HideInInspector] m_vertexCategory ("Vertex Options", Float) = 0 + [HideInInspector] m_start_Uzumore (" View Clip Prevention (Uzumore)--{reference_property:_UzumoreCategoryToggle,button_author:{text:sigmal00,action:{type:URL,data:https://github.com/sigmal00},hover:GitHub}}, button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/vertex-options/view-clip-prevention},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(POI_UZUMORE)] _UzumoreCategoryToggle (" View Clip Prevention (Uzumore)", Float) = 0 + [ToggleUI] _UzumoreEnabled ("Animation Toggle", Float) = 1 + _UzumoreAmount ("Push Amount (m)", Float) = 0.1 + _UzumoreBias ("Push Bias", Float) = 0.001 + [sRGBWarning]_UzumoreMask ("Push Mask (A)", 2D) = "white" { } + [ThryWideEnum(R, 0, G, 1, B, 2, A, 3)] _UzumoreMaskUV ("Push Mask Channel", Float) = 3 + [HideInInspector] m_end_Uzumore ("Camera Push Back", Float) = 0 + [HideInInspector] m_modifierCategory ("Global Modifiers & Data", Float) = 0 + [HideInInspector] m_start_PoiGlobalCategory ("Global Data and Masks", Float) = 0 + [HideInInspector] m_start_GlobalThemes ("Global Themes--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/global-themes},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HDR]_GlobalThemeColor0 ("Theme Color 0", Color ) = (1, 1, 1, 1) + _GlobalThemeHue0 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed0 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation0 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue0 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HDR]_GlobalThemeColor1 ("Theme Color 1", Color ) = (1, 1, 1, 1) + _GlobalThemeHue1 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed1 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation1 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue1 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HDR]_GlobalThemeColor2 ("Theme Color 2", Color ) = (1, 1, 1, 1) + _GlobalThemeHue2 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed2 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation2 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue2 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HDR]_GlobalThemeColor3 ("Theme Color 3", Color ) = (1, 1, 1, 1) + _GlobalThemeHue3 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed3 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation3 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue3 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HideInInspector] m_end_GlobalThemes ("Global Themes", Float ) = 0 + [HideInInspector] m_start_GlobalMask ("Global Mask--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/global-masks},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalMaskModifiers ("Modifiers", Float) = 0 + [HideInInspector] m_end_GlobalMaskModifiers ("", Float) = 0 + [HideInInspector] m_end_GlobalMask ("Global Mask", Float) = 0 + [HideInInspector] m_end_PoiGlobalCategory ("Global Data and Masks ", Float) = 0 + [HideInInspector] m_start_PoiUVCategory ("UVs", Float) = 0 + [HideInInspector] m_start_Stochastic ("Stochastic Sampling--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/stochastic-sampling},hover:Documentation}}", Float) = 0 + [KeywordEnum(Deliot Heitz, Hextile, None)] _StochasticMode ("Sampling Mode", Float) = 0 + [HideInInspector] s_start_deliot ("Deliot Heitz--{persistent_expand:true,default_expand:false,condition_show:_StochasticMode==0}", Float) = 0 + _StochasticDeliotHeitzDensity ("Detiling Density", Range(0.1, 10)) = 1 + [HideInInspector] s_end_deliot ("Deliot Heitz", Float) = 0 + [HideInInspector] m_end_Stochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector] m_start_uvLocalWorld ("Local World UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/local-world-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos0 ("Local X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos1 ("Local Y", Int) = 1 + [Space(10)] + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos0 ("World X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos1 ("World Y", Int) = 2 + [HideInInspector] m_end_uvLocalWorld ("Local World UV", Float) = 0 + [HideInInspector] m_start_uvPanosphere ("Panosphere UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/panosphere-uv},hover:Documentation}}", Float) = 0 + [ToggleUI] _StereoEnabled ("Stereo Enabled", Float) = 0 + [ToggleUI] _PanoUseBothEyes ("Perspective Correct (VR)", Float) = 1 + [HideInInspector] m_end_uvPanosphere ("Panosphere UV", Float) = 0 + [HideInInspector] m_start_uvPolar ("Polar UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/polar-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8)] _PolarUV ("UV", Int) = 0 + [Vector2]_PolarCenter ("Center Coordinate", Vector) = (.5, .5, 0, 0) + _PolarRadialScale ("Radial Scale", Float) = 1 + _PolarLengthScale ("Length Scale", Float) = 1 + _PolarSpiralPower ("Spiral Power", Float) = 0 + [HideInInspector] m_end_uvPolar ("Polar UV", Float) = 0 + [HideInInspector] m_end_PoiUVCategory ("UVs ", Float) = 0 + [HideInInspector] m_start_PoiPostProcessingCategory ("Post Processing", Float) = 0 + [HideInInspector] m_start_PPAnimations ("PP Animations--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/post-processing/pp-animations},hover:Documentation}}", Float) = 0 + [Helpbox(1)] _PPHelp ("This section meant for real time adjustments through animations and not to be changed in unity", Int) = 0 + _PPLightingMultiplier ("Lighting Mulitplier", Float) = 1 + _PPLightingAddition ("Lighting Add", Float) = 0 + _PPEmissionMultiplier ("Emission Multiplier", Float) = 1 + _PPFinalColorMultiplier ("Final Color Multiplier", Float) = 1 + [HideInInspector] m_end_PPAnimations ("PP Animations ", Float) = 0 + [HideInInspector] m_end_PoiPostProcessingCategory ("Post Processing ", Float) = 0 + [HideInInspector] m_thirdpartyCategory ("Third Party", Float) = 0 + [HideInInspector] m_renderingCategory ("Rendering--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/main},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.CullMode)] _Cull ("Cull", Float) = 2 + [DoNotAnimate][Enum(UnityEngine.Rendering.CompareFunction)] _ZTest ("ZTest", Float) = 4 + [DoNotAnimate][Enum(Off, 0, On, 1)] _ZWrite ("ZWrite", Int) = 1 + [DoNotAnimate][ThryMask(Thry.ColorMaskFlags)] _ColorMask ("Color Mask", Int) = 15 + [DoNotAnimate] _OffsetFactor ("Offset Factor", Float) = 0.0 + [DoNotAnimate] _OffsetUnits ("Offset Units", Float) = 0.0 + [DoNotAnimate][ToggleUI] _RenderingReduceClipDistance ("Reduce Clip Distance", Float) = 0 + [DoNotAnimate][ToggleUI] _ZClip ("Z Clip", Float) = 1 + [DoNotAnimate][ToggleUI] _IgnoreFog ("Ignore Fog", Float) = 0 + [DoNotAnimate][ToggleUI]_FlipBackfaceNormals ("Flip Backface Normals", Int) = 1 + [DoNotAnimate][HideInInspector] Instancing ("Instancing", Float) = 0 //add this property for instancing variants settings to be shown + [ToggleUI] _RenderingEarlyZEnabled ("Early Z", Float) = 0 + [HideInInspector] m_start_blending ("Blending--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/blending},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOp ("RGB Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlend ("RGB Destination Blend", Int) = 0 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOp ("RGB Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlend ("RGB Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_start_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOpAlpha ("Alpha Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlendAlpha ("Alpha Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlendAlpha ("Alpha Destination Blend", Int) = 10 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOpAlpha ("Alpha Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlendAlpha ("Alpha Source Blend", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlendAlpha ("Alpha Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_end_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [HideInInspector] m_end_blending ("Blending", Float) = 0 + [HideInInspector] m_start_StencilPassOptions ("Stencil--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/stencil},hover:Documentation}}", Float) = 0 + [ThryWideEnum(Simple, 0, Front Face vs Back Face, 1)] _StencilType ("Stencil Type", Float) = 0 + [IntRange] _StencilRef ("Stencil Reference Value", Range(0, 255)) = 0 + [IntRange] _StencilReadMask ("Stencil ReadMask Value", Range(0, 255)) = 255 + [IntRange] _StencilWriteMask ("Stencil WriteMask Value", Range(0, 255)) = 255 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilPassOp ("Stencil Pass Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFailOp ("Stencil Fail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilZFailOp ("Stencil ZFail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilCompareFunction ("Stencil Compare Function--{condition_showS:(_StencilType==0)}", Float) = 8 + [HideInInspector] m_start_StencilPassBackOptions("Back--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp0 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackPassOp ("Back Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackFailOp ("Back Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackZFailOp ("Back ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilBackCompareFunction ("Back Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassBackOptions("Back", Float) = 0 + [HideInInspector] m_start_StencilPassFrontOptions("Front--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp1 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontPassOp ("Front Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontFailOp ("Front Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontZFailOp ("Front ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilFrontCompareFunction ("Front Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassFrontOptions("Front", Float) = 0 + [HideInInspector] m_end_StencilPassOptions ("Stencil", Float) = 0 + } + SubShader + { + Tags { "RenderType" = "Opaque" "Queue" = "Geometry" "VRCFallback" = "Standard" } + Pass + { + Name "Base" + Tags { "LightMode" = "ForwardBase" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define VIGNETTE_MASKED + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdbase + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #pragma multi_compile_fragment _ VERTEXLIGHT_ON + #define POI_PASS_BASE + #pragma skip_variants LIGHTMAP_ON DYNAMICLIGHTMAP_ON LIGHTMAP_SHADOW_MIXING SHADOWS_SHADOWMASK DIRLIGHTMAP_COMBINED _MIXED_LIGHTING_SUBTRACTIVE + #pragma skip_variants DECALS_OFF DECALS_3RT DECALS_4RT DECAL_SURFACE_GRADIENT _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + #pragma skip_variants _ADDITIONAL_LIGHT_SHADOWS + #pragma skip_variants PROBE_VOLUMES_OFF PROBE_VOLUMES_L1 PROBE_VOLUMES_L2 + #pragma skip_variants _SCREEN_SPACE_OCCLUSION + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + #ifndef VRC_LIGHT_VOLUMES_INCLUDED + #define VRC_LIGHT_VOLUMES_INCLUDED + #define VRCLV_VERSION 2 + #define VRCLV_MAX_VOLUMES_COUNT 32 + #define VRCLV_MAX_LIGHTS_COUNT 128 + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + cbuffer LightVolumeUniforms { + #endif + uniform float _UdonLightVolumeEnabled; + uniform float _UdonLightVolumeVersion; + uniform float _UdonLightVolumeCount; + uniform float _UdonLightVolumeAdditiveMaxOverdraw; + uniform float _UdonLightVolumeAdditiveCount; + uniform float _UdonLightVolumeProbesBlend; + uniform float _UdonLightVolumeSharpBounds; + uniform float4x4 _UdonLightVolumeInvWorldMatrix[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeRotation[VRCLV_MAX_VOLUMES_COUNT * 2]; // Legacy! Used in this version to have back compatibility with older worlds. Array commented above will be used in future releases! Legacy! + uniform float3 _UdonLightVolumeInvLocalEdgeSmooth[VRCLV_MAX_VOLUMES_COUNT]; + uniform float3 _UdonLightVolumeUvw[VRCLV_MAX_VOLUMES_COUNT * 6]; // Legacy! AABB Bounds of islands on the 3D Texture atlas. Array commented above will be used in future releases! Legacy! + uniform float4 _UdonLightVolumeOcclusionUvw[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeColor[VRCLV_MAX_VOLUMES_COUNT]; + uniform float _UdonPointLightVolumeCount; + uniform float _UdonPointLightVolumeCubeCount; + uniform float4 _UdonPointLightVolumePosition[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeColor[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeDirection[VRCLV_MAX_LIGHTS_COUNT]; + uniform float3 _UdonPointLightVolumeCustomID[VRCLV_MAX_LIGHTS_COUNT]; + uniform float _UdonLightBrightnessCutoff; + uniform float _UdonLightVolumeOcclusionCount; + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + } + #endif + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + uniform Texture3D _UdonLightVolume; + uniform SamplerState sampler_UdonLightVolume; + uniform Texture2DArray _UdonPointLightVolumeTexture; + #define LV_SAMPLE(tex, uvw) tex.SampleLevel(sampler_UdonLightVolume, uvw, 0) + #else + #define LV_SAMPLE(tex, uvw) float4(0,0,0,0) + #endif + #define LV_PI 3.141592653589793f + #define LV_PI2 6.283185307179586f + float LV_Smoothstep01(float x) { + return x * x * (3 - 2 * x); + } + float3 LV_MultiplyVectorByQuaternion(float3 v, float4 q) { + float3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); + } + float3 LV_MultiplyVectorByMatrix2x3(float3 v, float3 r0, float3 r1) { + float3 r2 = cross(r0, r1); + return float3(dot(v, r0), dot(v, r1), dot(v, r2)); + } + float LV_FastAcos(float x) { + float absX = abs(x); + float res = -0.156583f * absX + LV_PI * 0.5f; + res *= sqrt(1.0f - absX); + return (x >= 0) ? res : (LV_PI - res); + } + float LV_DistributionGGX(float NoH, float roughness) { + float f = (roughness - 1) * ((roughness + 1) * (NoH * NoH)) + 1; + return (roughness * roughness) / ((float) LV_PI * f * f); + } + bool LV_PointLocalAABB(float3 localUVW) { + return all(abs(localUVW) <= 0.5); + } + float3 LV_LocalFromVolume(uint volumeID, float3 worldPos) { + return mul(_UdonLightVolumeInvWorldMatrix[volumeID], float4(worldPos, 1.0)).xyz; + } + float LV_EvaluateSH(float L0, float3 L1, float3 n) { + return L0 + dot(L1, n); + } + float4 LV_SampleCubemapArray(uint id, float3 dir) { + float3 absDir = abs(dir); + float2 uv; + uint face; + if (absDir.x >= absDir.y && absDir.x >= absDir.z) { + face = dir.x > 0 ? 0 : 1; + uv = float2((dir.x > 0 ? -dir.z : dir.z), -dir.y) * rcp(absDir.x); + } else if (absDir.y >= absDir.z) { + face = dir.y > 0 ? 2 : 3; + uv = float2(dir.x, (dir.y > 0 ? dir.z : -dir.z)) * rcp(absDir.y); + } else { + face = dir.z > 0 ? 4 : 5; + uv = float2((dir.z > 0 ? dir.x : -dir.x), -dir.y) * rcp(absDir.z); + } + float3 uvid = float3(uv * 0.5 + 0.5, id * 6 + face); + return LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + } + float4 LV_ProjectQuadLightIrradianceSH(float3 shadingPosition, float3 lightVertices[4]) { + [unroll] for (uint edge0 = 0; edge0 < 4; edge0++) { + lightVertices[edge0] = normalize(lightVertices[edge0] - shadingPosition); + } + const float3 zhDir0 = float3(0.866025, -0.500001, -0.000004); + const float3 zhDir1 = float3(-0.759553, 0.438522, -0.480394); + const float3 zhDir2 = float3(-0.000002, 0.638694, 0.769461); + const float3 zhWeightL1y = float3(2.1995339f, 2.50785367f, 1.56572711f); + const float3 zhWeightL1z = float3(-1.82572523f, -2.08165037f, 0.00000000f); + const float3 zhWeightL1x = float3(2.42459869f, 1.44790525f, 0.90397552f); + float solidAngle = 0.0; + float3 surfaceIntegral = 0.0; + [loop] for (uint edge1 = 0; edge1 < 4; edge1++) { + uint next = (edge1 + 1) % 4; + uint prev = (edge1 + 4 - 1) % 4; + float3 prevVert = lightVertices[prev]; + float3 thisVert = lightVertices[edge1]; + float3 nextVert = lightVertices[next]; + float3 a = cross(thisVert, prevVert); + float3 b = cross(thisVert, nextVert); + float lenA = length(a); + float lenB = length(b); + solidAngle += LV_FastAcos(clamp(dot(a, b) / (lenA * lenB), -1, 1)); + float3 mu = b * rcp(lenB); + float cosGamma = dot(thisVert, nextVert); + float gamma = LV_FastAcos(clamp(cosGamma, -1, 1)); + surfaceIntegral.x += gamma * dot(zhDir0, mu); + surfaceIntegral.y += gamma * dot(zhDir1, mu); + surfaceIntegral.z += gamma * dot(zhDir2, mu); + } + solidAngle = solidAngle - LV_PI2; + surfaceIntegral *= 0.5; + const float normalizationL0 = 0.5f * sqrt(1.0f / LV_PI); + float l0 = normalizationL0 * solidAngle; + float l1y = dot(zhWeightL1y, surfaceIntegral); + float l1z = dot(zhWeightL1z, surfaceIntegral); + float l1x = dot(zhWeightL1x, surfaceIntegral); + const float cosineKernelL0 = LV_PI; // (1) + const float cosineKernelL1 = LV_PI2 / 3.0f; // (1) + const float oneOverPi = 1.0f / LV_PI; // (2) + const float normalizationL1 = 0.5f * sqrt(3.0f / LV_PI); // (3) + const float weightL0 = cosineKernelL0 * normalizationL0 * oneOverPi; // (1), (2), (3) + const float weightL1 = cosineKernelL1 * normalizationL1 * oneOverPi; // (1), (2), (3) + l0 *= weightL0; + l1y *= weightL1; + l1z *= weightL1; + l1x *= weightL1; + return float4(l1x, l1y, l1z, l0); + } + void LV_QuadLight(float3 worldPos, float3 centroidPos, float4 rotationQuat, float2 size, float3 color, float sqMaxDist, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 lightToWorldPos = worldPos - centroidPos; + float3 normal = LV_MultiplyVectorByQuaternion(float3(0, 0, 1), rotationQuat); + if (dot(normal, lightToWorldPos) < 0.0) return; + float sqCutoffDist = sqMaxDist - dot(lightToWorldPos, lightToWorldPos); + color.rgb *= saturate(sqCutoffDist / sqMaxDist) * LV_PI * occlusion; + float2 halfSize = size * 0.5f; + float3 xAxis = LV_MultiplyVectorByQuaternion(float3(1, 0, 0), rotationQuat); + float3 yAxis = cross(normal, xAxis); + float3 verts[4]; + verts[0] = centroidPos + (-halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[1] = centroidPos + ( halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[2] = centroidPos + ( halfSize.x * xAxis) + (-halfSize.y * yAxis); + verts[3] = centroidPos + (-halfSize.x * xAxis) + (-halfSize.y * yAxis); + float4 areaLightSH = LV_ProjectQuadLightIrradianceSH(worldPos, verts); + float lenL1 = length(areaLightSH.xyz); + if (lenL1 > areaLightSH.w) areaLightSH.xyz *= areaLightSH.w / lenL1; + L0 += areaLightSH.w * color.rgb; + L1r += areaLightSH.xyz * color.r; + L1g += areaLightSH.xyz * color.g; + L1b += areaLightSH.xyz * color.b; + count++; + } + float3 LV_PointLightAttenuation(float sqdist, float sqlightSize, float3 color, float brightnessCutoff, float sqMaxDist) { + float mask = saturate(1 - sqdist / sqMaxDist); + return mask * mask * color * sqlightSize / (sqdist + sqlightSize); + } + float LV_PointLightSolidAngle(float sqdist, float sqlightSize) { + return saturate(sqrt(sqdist / (sqlightSize + sqdist))); + } + void LV_SphereLight(float sqdist, float3 dirN, float sqlightSize, float3 color, float occlusion, float sqMaxDist, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 att = LV_PointLightAttenuation(sqdist, sqlightSize, color, _UdonLightBrightnessCutoff, sqMaxDist); + float3 l0 = att * occlusion; + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLight(float sqdist, float3 dirN, float sqlightSize, float3 att, float spotMask, float cosAngle, float coneFalloff, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float smoothedCone = LV_Smoothstep01(saturate(spotMask * coneFalloff)); + float3 l0 = att * (occlusion * smoothedCone); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * saturate(1 - cosAngle)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightCookie(float sqdist, float3 dirN, float sqlightSize, float3 att, float4 lightRot, float tanAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 localDir = LV_MultiplyVectorByQuaternion(-dirN, lightRot); + float2 uv = localDir.xy * rcp(localDir.z * tanAngle); + if ( + localDir.z <= 0.0 || // Culling by direction + abs(uv.x) > 1.0 || abs(uv.y) > 1.0 // Culling by UV + ) return; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 - customId - 1; + float3 uvid = float3(uv * 0.5 + 0.5, id); + float angleSize = saturate(rsqrt(1 + tanAngle * tanAngle)); + float4 cookie = LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + float3 l0 = att * cookie.rgb * (cookie.a * occlusion); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * (1 - angleSize)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightAttenuationLUT(float sqdist, float3 dirN, float sqlightSize, float3 color, float spotMask, float cosAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float dirRadius = sqdist * abs(sqlightSize); + float spot = 1 - saturate(spotMask * rcp(1 - cosAngle)); + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId - 1; + float3 uvid = float3(sqrt(float2(spot, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * occlusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } + void LV_PointLight(uint id, float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 customID_data = _UdonPointLightVolumeCustomID[id]; + int shadowId = (int) customID_data.y; // Shadowmask id + int customId = (int) customID_data.x; // Custom Texture ID + float sqrRange = customID_data.z; // Squared culling distance + float4 pos = _UdonPointLightVolumePosition[id]; // Light position and inversed squared range + float3 dir = pos.xyz - worldPos; + float sqlen = max(dot(dir, dir), 1e-6); + if (sqlen > sqrRange) return; // Early distance based culling + float3 dirN = dir * rsqrt(sqlen); + float lightOcclusion = 1; + if (_UdonLightVolumeOcclusionCount != 0 && shadowId >= 0) { + lightOcclusion = dot(occlusion, float4(shadowId == 0, shadowId == 1, shadowId == 2, shadowId == 3)); + } + float4 color = _UdonPointLightVolumeColor[id]; // Color, angle + float4 ldir = _UdonPointLightVolumeDirection[id]; // Dir + falloff or Rotation + if (pos.w < 0) { // It is a spot light + float angle = color.w; + float spotMask = dot(ldir.xyz, -dirN) - angle; + if(customId >= 0 && spotMask < 0) return; // Spot cone based culling + if (customId > 0) { // If it uses Attenuation LUT + LV_SphereSpotLightAttenuationLUT(sqlen, dirN, -pos.w, color.rgb, spotMask, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + float3 att = LV_PointLightAttenuation(sqlen, -pos.w, color.rgb, _UdonLightBrightnessCutoff, sqrRange); + if (customId < 0) { // If uses cookie + LV_SphereSpotLightCookie(sqlen, dirN, -pos.w, att, ldir, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + LV_SphereSpotLight(sqlen, dirN, -pos.w, att, spotMask, angle, ldir.w, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + } else if (color.w <= 1.5f) { // It is a point light + if (customId > 0) { // Using LUT + float invSqRange = abs(pos.w); // Sign of range defines if it's point light (positive) or a spot light (negative) + float dirRadius = sqlen * invSqRange; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId; + float3 uvid = float3(sqrt(float2(0, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * lightOcclusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } else { // If it uses default parametric attenuation + float3 l0 = 0, l1r = 0, l1g = 0, l1b = 0; + LV_SphereLight(sqlen, dirN, pos.w, color.rgb, lightOcclusion, sqrRange, l0, l1r, l1g, l1b, count); + float3 cubeColor = 1; + if (customId < 0) { // If it uses a cubemap + uint id = -customId - 1; // Cubemap ID starts from zero and should not take in count texture array slices count. + cubeColor = LV_SampleCubemapArray(id, LV_MultiplyVectorByQuaternion(dirN, ldir)).xyz; + } + L0 += l0 * cubeColor; + L1r += l1r * cubeColor.r; + L1g += l1g * cubeColor.g; + L1b += l1b * cubeColor.b; + } + } else { // It is an area light + LV_QuadLight(worldPos, pos.xyz, ldir, float2(pos.w, color.w - 2.0f), color.rgb, sqrRange, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + void LV_SampleLightVolumeTex(float3 uvw0, float3 uvw1, float3 uvw2, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b) { + float4 tex0 = LV_SAMPLE(_UdonLightVolume, uvw0); + float4 tex1 = LV_SAMPLE(_UdonLightVolume, uvw1); + float4 tex2 = LV_SAMPLE(_UdonLightVolume, uvw2); + L0 = tex0.rgb; + L1r = float3(tex1.r, tex2.r, tex0.a); + L1g = float3(tex1.g, tex2.g, tex1.a); + L1b = float3(tex1.b, tex2.b, tex2.a); + } + float LV_BoundsMask(float3 localUVW, float3 invLocalEdgeSmooth) { + float3 distToMin = (localUVW + 0.5) * invLocalEdgeSmooth; + float3 distToMax = (0.5 - localUVW) * invLocalEdgeSmooth; + float3 fade = saturate(min(distToMin, distToMax)); + return fade.x * fade.y * fade.z; + } + void LV_SampleLightProbe(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz; + L1g += unity_SHAg.xyz; + L1b += unity_SHAb.xyz; + } + void LV_SampleLightProbeDering(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz * 0.565f; + L1g += unity_SHAg.xyz * 0.565f; + L1b += unity_SHAb.xyz * 0.565f; + } + void LV_SampleVolume(uint id, float3 localUVW, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + float3 uvw0 = uvwScaled + _UdonLightVolumeUvw[uvwID].xyz; + float3 uvw1 = uvwScaled + _UdonLightVolumeUvw[uvwID + 2].xyz; + float3 uvw2 = uvwScaled + _UdonLightVolumeUvw[uvwID + 4].xyz; + float3 l0, l1r, l1g, l1b; + LV_SampleLightVolumeTex(uvw0, uvw1, uvw2, l0, l1r, l1g, l1b); + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + occlusion = 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + occlusion = 1; + } + float4 color = _UdonLightVolumeColor[id]; + L0 += l0 * color.rgb; + l1r *= color.r; + l1g *= color.g; + l1b *= color.b; + if (color.a != 0) { + float3 r0 = _UdonLightVolumeRotation[id * 2].xyz; + float3 r1 = _UdonLightVolumeRotation[id * 2 + 1].xyz; + L1r += LV_MultiplyVectorByMatrix2x3(l1r, r0, r1); + L1g += LV_MultiplyVectorByMatrix2x3(l1g, r0, r1); + L1b += LV_MultiplyVectorByMatrix2x3(l1b, r0, r1); + } else { + L1r += l1r; + L1g += l1g; + L1b += l1b; + } + } + float4 LV_SampleVolumeOcclusion(uint id, float3 localUVW) { + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + return 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + return 1; + } + } + void LV_PointLightVolumeSH(float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + uint pointCount = min((uint) _UdonPointLightVolumeCount, VRCLV_MAX_LIGHTS_COUNT); + if (pointCount == 0) return; + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_LIGHTS_COUNT); + uint pcount = 0; // Point lights counter + [loop] for (uint pid = 0; pid < pointCount && pcount < maxOverdraw; pid++) { + LV_PointLight(pid, worldPos, occlusion, L0, L1r, L1g, L1b, pcount); + } + } + void LV_LightVolumeSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + if (volumesCount == 0) { // Legacy! Fallback to default light probes if Light Volume are not enabled or a version is too old to have a support. Legacy! + LV_SampleLightProbe(L0, L1r, L1g, L1b); + return; + } + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + bool lightProbesBlend = _UdonLightVolumeProbesBlend; + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + [loop] for (uint id = 0; id < volumesCount; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA && lightProbesBlend) { + LV_SampleLightProbe(L0, L1r, L1g, L1b); + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + float3 L0_A = 0; + float3 L1r_A = 0; + float3 L1g_A = 0; + float3 L1b_A = 0; + float4 occlusion_A = 1; + LV_SampleVolume(volumeID_A, localUVW_A, L0_A, L1r_A, L1g_A, L1b_A, occlusion_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || isNoA || (_UdonLightVolumeSharpBounds && isNoB)) { // Returning SH A result if it's the center of mask or out of bounds + L0 += L0_A; + L1r += L1r_A; + L1g += L1g_A; + L1b += L1b_A; + occlusion = occlusion_A; + occlusion *= mOcclusion; + return; + } + float3 L0_B = 0; + float3 L1r_B = 0; + float3 L1g_B = 0; + float3 L1b_B = 0; + float4 occlusion_B = 1; + if (isNoB && lightProbesBlend) { // No Volume found and light volumes blending enabled + LV_SampleLightProbe(L0_B, L1r_B, L1g_B, L1b_B); + } else { // Blending Volume A and Volume B + localUVW_B = isNoB ? localUVW : localUVW_B; + volumeID_B = isNoB ? volumesCount - 1 : volumeID_B; + LV_SampleVolume(volumeID_B, localUVW_B, L0_B, L1r_B, L1g_B, L1b_B, occlusion_B); + } + occlusion = lerp(occlusion_B, occlusion_A, mask); + occlusion *= mOcclusion; + L0 += lerp(L0_B, L0_A, mask); + L1r += lerp(L1r_B, L1r_A, mask); + L1g += lerp(L1g_B, L1g_A, mask); + L1b += lerp(L1b_B, L1b_A, mask); + } + void LV_LightVolumeAdditiveSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + if (additiveCount == 0 && (uint) _UdonPointLightVolumeCount == 0) return; // Legacy! + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW for Y Axis and Free rotations + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + uint count = min(_UdonLightVolumeOcclusionCount == 0 ? additiveCount : volumesCount, VRCLV_MAX_VOLUMES_COUNT); // Only use all volumes if occlusion volumes are enabled + [loop] for (uint id = 0; id < count; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA || _UdonLightVolumeOcclusionCount == 0) { + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + occlusion = LV_SampleVolumeOcclusion(volumeID_A, localUVW_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || (_UdonLightVolumeSharpBounds && isNoB)) { + occlusion *= mOcclusion; + return; // Returning A result if it's the center of mask or out of bounds + } + if (isNoB) occlusion = lerp(1, occlusion, mask); + else occlusion = lerp(LV_SampleVolumeOcclusion(volumeID_B, localUVW_B), occlusion, mask); + occlusion *= mOcclusion; + } + float3 LightVolumeSpecular(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specColor = max(float3(dot(reflect(-L1r, worldNormal), viewDir), dot(reflect(-L1g, worldNormal), viewDir), dot(reflect(-L1b, worldNormal), viewDir)), 0); + float3 rDir = normalize(normalize(L1r) + viewDir); + float3 gDir = normalize(normalize(L1g) + viewDir); + float3 bDir = normalize(normalize(L1b) + viewDir); + float rNh = saturate(dot(worldNormal, rDir)); + float gNh = saturate(dot(worldNormal, gDir)); + float bNh = saturate(dot(worldNormal, bDir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float rSpec = LV_DistributionGGX(rNh, roughExp); + float gSpec = LV_DistributionGGX(gNh, roughExp); + float bSpec = LV_DistributionGGX(bNh, roughExp); + float3 specs = (rSpec + gSpec + bSpec) * f0; + float3 coloredSpecs = specs * specColor; + float3 a = coloredSpecs + specs * L0; + float3 b = coloredSpecs * 3; + return max(lerp(a, b, smoothness) * 0.5f, 0.0); + } + float3 LightVolumeSpecular(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecular(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeSpecularDominant(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 dominantDir = L1r + L1g + L1b; + float3 dir = normalize(normalize(dominantDir) + viewDir); + float nh = saturate(dot(worldNormal, dir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float spec = LV_DistributionGGX(nh, roughExp); + return max(spec * L0 * f0, 0.0) * 1.5f; + } + float3 LightVolumeSpecularDominant(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecularDominant(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeEvaluate(float3 worldNormal, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + return float3(LV_EvaluateSH(L0.r, L1r, worldNormal), LV_EvaluateSH(L0.g, L1g, worldNormal), LV_EvaluateSH(L0.b, L1b, worldNormal)); + } + void LightVolumeSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled == 0) { + LV_SampleLightProbeDering(L0, L1r, L1g, L1b); + } else { + float4 occlusion = 1; + LV_LightVolumeSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + void LightVolumeAdditiveSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled != 0) { + float4 occlusion = 1; + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + float3 LightVolumeSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float3 LightVolumeAdditiveSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return 0; + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float LightVolumesEnabled() { + return _UdonLightVolumeEnabled; + } + float LightVolumesVersion() { + return _UdonLightVolumeVersion == 0 ? _UdonLightVolumeEnabled : _UdonLightVolumeVersion; + } + #endif + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + float _PPLightingMultiplier; + float _PPLightingAddition; + float _PPEmissionMultiplier; + float _PPFinalColorMultiplier; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef VIGNETTE_MASKED + #ifdef _LIGHTINGMODE_REALISTIC + #if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) + #if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) + #define SUBTRACTIVE_LIGHTING 1 + #endif + #endif + float FadeShadows(float attenuation, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if HANDLE_SHADOWS_BLENDING_IN_GI || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + #if ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + attenuation = poiLight.attenuation; + #endif + float viewZ = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float shadowFadeDistance = UnityComputeShadowFadeDistance(poiMesh.worldPos, viewZ); + float shadowFade = UnityComputeShadowFade(shadowFadeDistance); + float bakedAttenuation = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + attenuation = UnityMixRealtimeAndBakedShadows(attenuation, bakedAttenuation, shadowFade); + #endif + return attenuation; + } + void ApplySubtractiveLighting(inout UnityIndirect indirectLight, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if SUBTRACTIVE_LIGHTING + poiLight.attenuation = FadeShadows(poiLight.attenuation, poiLight, poiMesh, poiCam); + float ndotl = saturate(dot(poiMesh.normals[0], _WorldSpaceLightPos0.xyz)); + float3 shadowedLightEstimate = ndotl * (1 - poiLight.attenuation) * _LightColor0.rgb; + float3 subtractedLight = indirectLight.diffuse - shadowedLightEstimate; + subtractedLight = max(subtractedLight, unity_ShadowColor.rgb); + subtractedLight = lerp(subtractedLight, indirectLight.diffuse, _LightShadowData.x); + indirectLight.diffuse = min(subtractedLight, indirectLight.diffuse); + #endif + } + UnityIndirect CreateIndirectLight(in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight) + { + UnityIndirect indirectLight; + indirectLight.diffuse = 0; + indirectLight.specular = 0; + #if defined(LIGHTMAP_ON) + indirectLight.diffuse = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, poiMesh.lightmapUV.xy)); + #if defined(DIRLIGHTMAP_COMBINED) + float4 lightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, poiMesh.lightmapUV.xy); + indirectLight.diffuse = DecodeDirectionalLightmap(indirectLight.diffuse, lightmapDirection, poiMesh.normals[1]); + #endif + ApplySubtractiveLighting(indirectLight, poiLight, poiMesh, poiCam); + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float3 dynamicLightDiffuse = DecodeRealtimeLightmap( + UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, poiMesh.lightmapUV.zw) + ); + #if defined(DIRLIGHTMAP_COMBINED) + float4 dynamicLightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_DynamicDirectionality, unity_DynamicLightmap, poiMesh.lightmapUV.zw); + indirectLight.diffuse += DecodeDirectionalLightmap(dynamicLightDiffuse, dynamicLightmapDirection, poiMesh.normals[1]); + #else + indirectLight.diffuse += dynamicLightDiffuse; + #endif + #endif + #if !defined(LIGHTMAP_ON) && !defined(DYNAMICLIGHTMAP_ON) + #if UNITY_LIGHT_PROBE_PROXY_VOLUME + if (unity_ProbeVolumeParams.x == 1) + { + indirectLight.diffuse = SHEvalLinearL0L1_SampleProbeVolume( + float4(poiMesh.normals[1], 1), poiMesh.worldPos + ); + indirectLight.diffuse = max(0, indirectLight.diffuse); + #if defined(UNITY_COLORSPACE_GAMMA) + indirectLight.diffuse = LinearToGammaSpace(indirectLight.diffuse); + #endif + } + else + { + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + } + #else + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + #endif + #endif + indirectLight.diffuse *= poiLight.occlusion; + return indirectLight; + } + #endif + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_REALISTIC + UnityLight light; + light.dir = poiLight.direction; + light.color = max(0, _LightColor0.rgb) * saturate(shadowAttenuation * attenuation * poiLight.detailShadow); + light.ndotl = poiLight.nDotLSaturated; + UnityIndirect indirectLight = (UnityIndirect)0; + #ifdef UNITY_PASS_FORWARDBASE + indirectLight = CreateIndirectLight(poiMesh, poiCam, poiLight); + #endif + #ifdef UNITY_PASS_FORWARDBASE + light.color = max(light.color * 1.0, 0); + light.color = max(light.color + 0.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse * 1.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse + 0.0, 0); + #endif + poiLight.rampedLightMap = poiLight.nDotLSaturated; + poiLight.finalLighting = max(POI_BRDF_PBS(1, 0, 0, 0, poiMesh.normals[1], poiCam.viewDir, light, indirectLight).xyz, _LightingMinLightBrightness); + #ifdef UNITY_PASS_FORWARDBASE + if (_UdonLightVolumeEnabled && 1.0) + { + float3 L0 = 0; + float3 L1r = 0; + float3 L1g = 0; + float3 L1b = 0; + #ifdef LIGHTMAP_ON + LightVolumeAdditiveSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + poiLight.finalLighting += clamp(LightVolumeEvaluate(poiMesh.normals[1], L0, L1r, L1g, L1b), _LightingMinLightBrightness, _LightingCap); + #endif + } + #endif + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0009765625,0.0009765625,1024,1024), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + + if (1.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 0.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + #ifdef UNITY_PASS_FORWARDBASE + poiFragData.emission = max(poiFragData.emission * 1.0, 0); + poiFragData.finalColor = max(poiFragData.finalColor * 1.0, 0); + #endif + if (3.0 == POI_MODE_OPAQUE) + { + } + clip(poiFragData.alpha - 0.0); + if (3.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + poiFragData.finalColor += poiFragData.emission * poiMods.globalEmission; + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "Add" + Tags { "LightMode" = "ForwardAdd" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite Off + Cull Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_AddBlendOp], [_AddBlendOpAlpha] + Blend [_AddSrcBlend] [_AddDstBlend], [_AddSrcBlendAlpha] [_AddDstBlendAlpha] + CGPROGRAM + #define VIGNETTE_MASKED + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdadd_fullshadows + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_ADD + #pragma skip_variants LIGHTMAP_ON DYNAMICLIGHTMAP_ON LIGHTMAP_SHADOW_MIXING SHADOWS_SHADOWMASK DIRLIGHTMAP_COMBINED _MIXED_LIGHTING_SUBTRACTIVE + #pragma skip_variants DECALS_OFF DECALS_3RT DECALS_4RT DECAL_SURFACE_GRADIENT _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + #pragma skip_variants _ADDITIONAL_LIGHT_SHADOWS + #pragma skip_variants PROBE_VOLUMES_OFF PROBE_VOLUMES_L1 PROBE_VOLUMES_L2 + #pragma skip_variants _SCREEN_SPACE_OCCLUSION + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef VIGNETTE_MASKED + #ifdef _LIGHTINGMODE_REALISTIC + #if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) + #if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) + #define SUBTRACTIVE_LIGHTING 1 + #endif + #endif + float FadeShadows(float attenuation, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if HANDLE_SHADOWS_BLENDING_IN_GI || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + #if ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + attenuation = poiLight.attenuation; + #endif + float viewZ = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float shadowFadeDistance = UnityComputeShadowFadeDistance(poiMesh.worldPos, viewZ); + float shadowFade = UnityComputeShadowFade(shadowFadeDistance); + float bakedAttenuation = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + attenuation = UnityMixRealtimeAndBakedShadows(attenuation, bakedAttenuation, shadowFade); + #endif + return attenuation; + } + void ApplySubtractiveLighting(inout UnityIndirect indirectLight, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if SUBTRACTIVE_LIGHTING + poiLight.attenuation = FadeShadows(poiLight.attenuation, poiLight, poiMesh, poiCam); + float ndotl = saturate(dot(poiMesh.normals[0], _WorldSpaceLightPos0.xyz)); + float3 shadowedLightEstimate = ndotl * (1 - poiLight.attenuation) * _LightColor0.rgb; + float3 subtractedLight = indirectLight.diffuse - shadowedLightEstimate; + subtractedLight = max(subtractedLight, unity_ShadowColor.rgb); + subtractedLight = lerp(subtractedLight, indirectLight.diffuse, _LightShadowData.x); + indirectLight.diffuse = min(subtractedLight, indirectLight.diffuse); + #endif + } + UnityIndirect CreateIndirectLight(in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight) + { + UnityIndirect indirectLight; + indirectLight.diffuse = 0; + indirectLight.specular = 0; + #if defined(LIGHTMAP_ON) + indirectLight.diffuse = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, poiMesh.lightmapUV.xy)); + #if defined(DIRLIGHTMAP_COMBINED) + float4 lightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, poiMesh.lightmapUV.xy); + indirectLight.diffuse = DecodeDirectionalLightmap(indirectLight.diffuse, lightmapDirection, poiMesh.normals[1]); + #endif + ApplySubtractiveLighting(indirectLight, poiLight, poiMesh, poiCam); + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float3 dynamicLightDiffuse = DecodeRealtimeLightmap( + UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, poiMesh.lightmapUV.zw) + ); + #if defined(DIRLIGHTMAP_COMBINED) + float4 dynamicLightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_DynamicDirectionality, unity_DynamicLightmap, poiMesh.lightmapUV.zw); + indirectLight.diffuse += DecodeDirectionalLightmap(dynamicLightDiffuse, dynamicLightmapDirection, poiMesh.normals[1]); + #else + indirectLight.diffuse += dynamicLightDiffuse; + #endif + #endif + #if !defined(LIGHTMAP_ON) && !defined(DYNAMICLIGHTMAP_ON) + #if UNITY_LIGHT_PROBE_PROXY_VOLUME + if (unity_ProbeVolumeParams.x == 1) + { + indirectLight.diffuse = SHEvalLinearL0L1_SampleProbeVolume( + float4(poiMesh.normals[1], 1), poiMesh.worldPos + ); + indirectLight.diffuse = max(0, indirectLight.diffuse); + #if defined(UNITY_COLORSPACE_GAMMA) + indirectLight.diffuse = LinearToGammaSpace(indirectLight.diffuse); + #endif + } + else + { + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + } + #else + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + #endif + #endif + indirectLight.diffuse *= poiLight.occlusion; + return indirectLight; + } + #endif + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_REALISTIC + UnityLight light; + light.dir = poiLight.direction; + light.color = max(0, _LightColor0.rgb) * saturate(shadowAttenuation * attenuation * poiLight.detailShadow); + light.ndotl = poiLight.nDotLSaturated; + UnityIndirect indirectLight = (UnityIndirect)0; + #ifdef UNITY_PASS_FORWARDBASE + indirectLight = CreateIndirectLight(poiMesh, poiCam, poiLight); + #endif + #ifdef UNITY_PASS_FORWARDBASE + light.color = max(light.color * 1.0, 0); + light.color = max(light.color + 0.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse * 1.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse + 0.0, 0); + #endif + poiLight.rampedLightMap = poiLight.nDotLSaturated; + poiLight.finalLighting = max(POI_BRDF_PBS(1, 0, 0, 0, poiMesh.normals[1], poiCam.viewDir, light, indirectLight).xyz, _LightingMinLightBrightness); + #ifdef UNITY_PASS_FORWARDBASE + if (_UdonLightVolumeEnabled && 1.0) + { + float3 L0 = 0; + float3 L1r = 0; + float3 L1g = 0; + float3 L1b = 0; + #ifdef LIGHTMAP_ON + LightVolumeAdditiveSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + poiLight.finalLighting += clamp(LightVolumeEvaluate(poiMesh.normals[1], L0, L1r, L1g, L1b), _LightingMinLightBrightness, _LightingCap); + #endif + } + #endif + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0009765625,0.0009765625,1024,1024), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + if (1.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 0.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + if (3.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.0); + if (3.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + if (4.0 == 4) + { + poiFragData.alpha = saturate(poiFragData.alpha * 10.0); + } + if (3.0 != POI_MODE_TRANSPARENT) + { + poiFragData.finalColor *= poiFragData.alpha; + } + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Off + AlphaToMask Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define VIGNETTE_MASKED + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_instancing + #pragma multi_compile_shadowcaster + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_SHADOW + #pragma skip_variants LIGHTMAP_ON DYNAMICLIGHTMAP_ON LIGHTMAP_SHADOW_MIXING SHADOWS_SHADOWMASK DIRLIGHTMAP_COMBINED _MIXED_LIGHTING_SUBTRACTIVE + #pragma skip_variants DECALS_OFF DECALS_3RT DECALS_4RT DECAL_SURFACE_GRADIENT _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + #pragma skip_variants _ADDITIONAL_LIGHT_SHADOWS + #pragma skip_variants PROBE_VOLUMES_OFF PROBE_VOLUMES_L1 PROBE_VOLUMES_L2 + #pragma skip_variants _SCREEN_SPACE_OCCLUSION + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0009765625,0.0009765625,1024,1024), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + poiFragData.finalColor = poiFragData.baseColor; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 0.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + if (3.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.0); + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + } + CustomEditor "Thry.ShaderEditor" +} diff --git a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsTrophyInner/Poiyomi Pro.shader.meta b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsTrophyInner/Poiyomi Pro.shader.meta new file mode 100644 index 0000000..db8c167 --- /dev/null +++ b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsTrophyInner/Poiyomi Pro.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 76ffb24b294f50546bee6b34a4bb0f18 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsTrophyOuter.meta b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsTrophyOuter.meta new file mode 100644 index 0000000..2449c68 --- /dev/null +++ b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsTrophyOuter.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dea999a546248ca4f8b5c39197f9ac5f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsTrophyOuter/Poiyomi Pro.shader b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsTrophyOuter/Poiyomi Pro.shader new file mode 100644 index 0000000..20ce5b8 --- /dev/null +++ b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsTrophyOuter/Poiyomi Pro.shader @@ -0,0 +1,10253 @@ +Shader "Hidden/Locked/.poiyomi/Poiyomi Pro/6dba0e876b8368347a4fb3f027e9b50e" +{ + Properties + { + [HideInInspector] shader_master_label ("Poiyomi 9.3.48", Float) = 0 + [HideInInspector] shader_is_using_thry_editor ("", Float) = 0 + [HideInInspector] shader_locale ("0db0b86376c3dca4b9a6828ef8615fe0", Float) = 0 + [HideInInspector] footer_website ("{texture:{name:icon-poilogo,height:24},action:{type:URL,data:https://www.poiyomi.com},hover:WEBSITE}", Float) = 0 + [HideInInspector] footer_discord ("{texture:{name:icon-discord,height:24},action:{type:URL,data:https://discord.gg/Ays52PY},hover:DISCORD}", Float) = 0 + [HideInInspector] footer_patreon ("{texture:{name:icon-patreon-new,height:24},action:{type:URL,data:https://www.patreon.com/poiyomi},hover:PATREON}", Float) = 0 + [HideInInspector] footer_youtube ("{texture:{name:icon-youtube,height:24},action:{type:URL,data:https://www.youtube.com/poiyomi},hover:YOUTUBE}", Float) = 0 + [HideInInspector] footer_github ("{texture:{name:icon-github,height:24},action:{type:URL,data:https://github.com/poiyomi/PoiyomiToonShader},hover:GITHUB}", Float) = 0 + [HideInInspector] footer_bluesky ("{texture:{name:icon-bluesky,height:24},action:{type:URL,data:https://bsky.app/profile/poiyomi.com},hover:BLUESKY}", Float) = 0 + [HideInInspector] footer_twitter ("{texture:{name:icon-twitter,height:24},action:{type:URL,data:https://x.com/poiyomi},hover:X}", Float) = 0 + [Header(POIYOMI SHADER UI FAILED TO LOAD)] + [Header(. This is caused by scripts failing to compile. It can be fixed.)] + [Header(. The inspector will look broken and will not work properly until fixed.)] + [Header(. Please check your console for script errors.)] + [Header(. You can filter by errors in the console window.)] + [Header(. Often the topmost error points to the erroring script.)] + [Space(30)][Header(Common Error Causes)] + [Header(. Installing multiple Poiyomi Shader packages)] + [Header(. Make sure to delete the Poiyomi shader folder before you update Poiyomi.)] + [Header(. If a package came with Poiyomi this is bad practice and can cause issues.)] + [Header(. Delete the package and import it without any Poiyomi components.)] + [Header(. Bad VRCSDK installation (e.g. Both VCC and Standalone))] + [Header(. Delete the VRCSDK Folder in Assets if you are using the VCC.)] + [Header(. Avoid using third party SDKs. They can cause incompatibility.)] + [Header(. Script Errors in other scripts)] + [Header(. Outdated tools or prefabs can cause this.)] + [Header(. Update things that are throwing errors or move them outside the project.)] + [Space(30)][Header(Visit Our Discord to Ask For Help)] + [Space(5)]_ShaderUIWarning0 (" → discord.gg/poiyomi ← We can help you get it fixed! --{condition_showS:(0==1)}", Int) = -0 + [Space(1400)][Header(POIYOMI SHADER UI FAILED TO LOAD)] + _ShaderUIWarning1 ("Please scroll up for more information! --{condition_showS:(0==1)}", Int) = -0 + [HideInInspector] _ForgotToLockMaterial (";;YOU_FORGOT_TO_LOCK_THIS_MATERIAL;", Int) = 1 + [ThryShaderOptimizerLockButton] _ShaderOptimizerEnabled ("", Int) = 1 + [HideInInspector] GeometryShader_Enabled("GEOMETRY SHADER ENABLED", Float) = 1 + [HideInInspector] Tessellation_Enabled("TESSELLATION ENABLED", Float) = 1 + [ThryWideEnum(Opaque, 0, Cutout, 1, TransClipping, 9, Fade, 2, Transparent, 3, Additive, 4, Soft Additive, 5, Multiplicative, 6, 2x Multiplicative, 7)]_Mode("Rendering Preset--{on_value_actions:[ + {value:0,actions:[{type:SET_PROPERTY,data:render_queue=2000},{type:SET_PROPERTY,data:_AlphaForceOpaque=1}, {type:SET_PROPERTY,data:render_type=Opaque}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=0}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:1,actions:[{type:SET_PROPERTY,data:render_queue=2450},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=.5}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:9,actions:[{type:SET_PROPERTY,data:render_queue=2460},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.01}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:2,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.002}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:3,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=1}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:4,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:5,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=4}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=4}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=4}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:6,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:7,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=3}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=3}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]} + }]}]}", Int) = 0 + [HideInInspector] m_mainCategory ("Color & Normals--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/main},hover:Documentation}}", Float) = 0 + _Color ("Color & Alpha--{reference_property:_ColorThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _ColorThemeIndex ("", Int) = 0 + [sRGBWarning(true)]_MainTex ("Texture--{reference_properties:[_MainTexPan, _MainTexUV, _MainPixelMode, _MainTexStochastic, _MainIgnoreTexAlpha]}", 2D) = "white" { } + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _MainTexUV ("UV", Int) = 0 + [HideInInspector][Vector2]_MainTexPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ToggleUI]_MainPixelMode ("Pixel Mode", Float) = 0 + [HideInInspector][ToggleUI]_MainTexStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][ToggleUI]_MainIgnoreTexAlpha ("Ignore Alpha", Float) = 0 + [Normal]_BumpMap ("Normal Map--{reference_properties:[_BumpMapPan, _BumpMapUV, _BumpScale, _BumpMapStochastic]}", 2D) = "bump" { } + [HideInInspector][Vector2]_BumpMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _BumpMapUV ("UV", Int) = 0 + [HideInInspector]_BumpScale ("Intensity", Range(0, 10)) = 1 + [HideInInspector][ToggleUI]_BumpMapStochastic ("Stochastic Sampling", Float) = 0 + [sRGBWarning]_AlphaMask ("Alpha Map--{reference_properties:[_AlphaMaskPan, _AlphaMaskUV, _AlphaMaskInvert, _MainAlphaMaskMode, _AlphaMaskBlendStrength, _AlphaMaskValue], alts:[_AlphaMap]}", 2D) = "white" { } + [HideInInspector][Vector2]_AlphaMaskPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _AlphaMaskUV ("UV", Int) = 0 + [HideInInspector][ThryWideEnum(Off, 0, Replace, 1, Multiply, 2, Add, 3, Subtract, 4)]_MainAlphaMaskMode ("Blend Mode", Int) = 2 + [HideInInspector]_AlphaMaskBlendStrength ("Blend Strength", Float) = 1 + [HideInInspector]_AlphaMaskValue ("Blend Offset", Float) = 0 + [HideInInspector][ToggleUI]_AlphaMaskInvert ("Invert", Float) = 0 + _Cutoff ("Alpha Cutoff", Range(0, 1.001)) = 0.5 + [HideInInspector] m_start_Alpha ("Alpha Options--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/alpha-options},hover:Documentation}}", Float) = 0 + [ToggleUI]_AlphaForceOpaque ("Force Opaque", Float) = 1 + _AlphaMod ("Alpha Mod", Range(-1, 1)) = 0.0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _AlphaGlobalMask ("Global Mask--{reference_property:_AlphaGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _AlphaGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] m_end_Alpha ("Alpha Options", Float) = 0 + [HideInInspector] m_lightingCategory ("Shading", Float) = 0 + [HideInInspector] m_start_PoiLightData ("Light Data--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/light-data},hover:Documentation}}", Float) = 0 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingAOMaps ("AO Maps (expand)--{reference_properties:[_LightingAOMapsPan, _LightingAOMapsUV,_LightDataAOStrengthR,_LightDataAOStrengthG,_LightDataAOStrengthB,_LightDataAOStrengthA, _LightDataAOGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingAOMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingAOMapsUV ("UV", Int) = 0 + [HideInInspector]_LightDataAOStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightDataAOStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataAOGlobalMaskR ("Global Mask--{reference_property:_LightDataAOGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataAOGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingDetailShadowMaps ("Shadow Map (expand)--{reference_properties:[_LightingDetailShadowMapsPan, _LightingDetailShadowMapsUV,_LightingDetailShadowStrengthR,_LightingDetailShadowStrengthG,_LightingDetailShadowStrengthB,_LightingDetailShadowStrengthA,_LightingAddDetailShadowStrengthR,_LightingAddDetailShadowStrengthG,_LightingAddDetailShadowStrengthB,_LightingAddDetailShadowStrengthA, _LightDataDetailShadowGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingDetailShadowMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingDetailShadowMapsUV ("UV", Int) = 0 + [HideInInspector]_LightingDetailShadowStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingDetailShadowStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthR ("Additive R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingAddDetailShadowStrengthG ("Additive G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthB ("Additive B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthA ("Additive A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataDetailShadowGlobalMaskR ("Global Mask--{reference_property:_LightDataDetailShadowGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataDetailShadowGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingShadowMasks ("Shadow Masks (expand)--{reference_properties:[_LightingShadowMasksPan, _LightingShadowMasksUV,_LightingShadowMaskStrengthR,_LightingShadowMaskStrengthG,_LightingShadowMaskStrengthB,_LightingShadowMaskStrengthA, _LightDataShadowMaskGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingShadowMasksPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingShadowMasksUV ("UV", Int) = 0 + [HideInInspector]_LightingShadowMaskStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingShadowMaskStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataShadowMaskGlobalMaskR ("Global Mask--{reference_property:_LightDataShadowMaskGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataShadowMaskGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [HideInInspector] s_start_LightDataBasePass ("Base Pass (Directional & Baked Lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [Enum(Poi Custom, 0, Standard, 1, UTS2, 2, OpenLit(lil toon), 3)] _LightingColorMode ("Light Color Mode", Int) = 0 + [Enum(Poi Custom, 0, Normalized NDotL, 1, Saturated NDotL, 2, Casted Shadows Only, 3, SDF, 4)] _LightingMapMode ("Light Map Mode", Int) = 0 + [HideInInspector] s_start_LightDataSDF ("Signed Distance fields--{persistent_expand:true,default_expand:true, condition_showS:(_LightingMapMode==4)}", Float) = 1 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, Nothing, Nothing, Linear, false)]_LightDataSDFMap ("SDF Map (expand)--{reference_properties:[_LightDataSDFMapPan, _LightDataSDFMapUV]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightDataSDFMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightDataSDFMapUV ("UV", Int) = 0 + _LightDataSDFMapLOD ("LOD", Range(0, 1)) = 0 + _LightDataSDFBlendY ("Blend Y Direction", Range(0.001, 2)) = 1 + [HideInInspector] s_end_LightDataSDF ("Signed Distance fields", Float) = 1 + [Enum(Poi Custom, 0, Forced Local Direction, 1, Forced World Direction, 2, UTS2, 3, OpenLit(lil toon), 4, View Direction, 5)] _LightingDirectionMode ("Light Direction Mode", Int) = 0 + [Vector3]_LightngForcedDirection ("Forced Direction--{condition_showS:(_LightingDirectionMode==1 || _LightingDirectionMode==2)}", Vector) = (0, 0, 0) + _LightingViewDirOffsetPitch ("View Dir Offset Pitch--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + _LightingViewDirOffsetYaw ("View Dir Offset Yaw--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + [ToggleUI]_LightingForceColorEnabled ("Force Light Color", Float) = 0 + _LightingForcedColor ("Forced Color--{condition_showS:(_LightingForceColorEnabled==1), reference_property:_LightingForcedColorThemeIndex}", Color) = (1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _LightingForcedColorThemeIndex ("", Int) = 0 + _Unlit_Intensity ("Unlit_Intensity--{condition_showS:(_LightingColorMode==2)}", Range(0.001, 4)) = 1 + [DoNotLock][ToggleUI]_LightingCapEnabled ("Limit Brightness", Float) = 1 + [DoNotLock]_LightingCap ("Max Brightness--{condition_showS:(_LightingCapEnabled==1)}", Range(0, 10)) = 1 + [DoNotLock]_LightingMinLightBrightness ("Min Brightness", Range(0, 1)) = 0 + _LightingIndirectUsesNormals ("Indirect Uses Normals--{condition_showS:(_LightingColorMode==0)}", Range(0, 1)) = 0 + _LightingCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 0 + [DoNotLock]_LightingMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + [ToggleUI]_LightingVertexLightingEnabled ("Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingMirrorVertexLightingEnabled ("Mirror Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingEnableLightVolumes ("Light Volumes", Float) = 1 + [HideInInspector] s_end_LightDataBasePass ("Base Pass", Float) = 1 + [HideInInspector] s_start_LightDataAddPass ("Add Pass (Point & Spot lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [ToggleUI]_LightingAdditiveEnable ("Pixel lights (Important)", Float) = 1 + [ToggleUI]_DisableDirectionalInAdd ("Ignore Directional Lights--{condition_showS:(_LightingAdditiveEnable==1)}", Float) = 1 + [ToggleUI]_LightingAdditiveLimited ("Limit Brightness", Float) = 1 + _LightingAdditiveLimit ("Max Brightness--{condition_showS:(_LightingAdditiveLimited==1)}", Range(0, 10)) = 1 + _LightingAdditiveCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 1 + _LightingAdditiveMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + _LightingAdditivePassthrough ("Point Light Passthrough--{condition_showS:(_LightingAdditiveEnable==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_LightDataAddPass ("Add Pass", Float) = 1 + [HideInInspector] s_start_LightDataDebug ("Debug / Data Visualizations--{reference_property:_LightDataDebugEnabled,persistent_expand:true}", Float) = 0 + [HideInInspector][DoNotAnimate][ThryToggleUI(false)]_LightDataDebugEnabled ("Debug", Float) = 0 + [ThryWideEnum(Direct Color, 0, Indirect Color, 1, Light Map, 2, Attenuation, 3, N Dot L, 4, Half Dir, 5, Direction, 6, Add Color, 7, Add Attenuation, 8, Add Shadow, 9, Add N Dot L, 10)] _LightingDebugVisualize ("Visualize", Int) = 0 + [HideInInspector] s_end_LightDataDebug ("Debug", Float) = 0 + [HideInInspector] m_end_PoiLightData ("Light Data", Float) = 0 + [HideInInspector] m_start_PoiShading (" Shading--{reference_property:_ShadingEnabled,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/main},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(VIGNETTE_MASKED)]_ShadingEnabled ("Enable Shading", Float) = 1 + [DoNotAnimate][KeywordEnum(TextureRamp, Multilayer Math, Wrapped, Skin, ShadeMap, Flat, Realistic, Cloth, SDF)] _LightingMode ("Lighting Type", Float) = 5 + _LightingShadowColor ("Shadow Tint--{condition_showS:(_LightingMode!=4 && _LightingMode!=1 && _LightingMode!=5)}", Color) = (1, 1, 1) + _ShadowStrength ("Shadow Strength--{condition_showS:(_LightingMode<=4 || _LightingMode==8)}", Range(0, 1)) = 1 + _LightingIgnoreAmbientColor ("Ignore Indirect Shadow Color--{condition_showS:(_LightingMode<=3 || _LightingMode==8)}", Range(0, 1)) = 1 + [Space(15)] + [HideInInspector] s_start_ShadingAddPass ("Add Pass (Point & Spot Lights)--{persistent_expand:true,default_expand:false}", Float) = 0 + [Enum(Realistic, 0, Toon, 1, Same as Base Pass, 3)] _LightingAdditiveType ("Lighting Type", Int) = 3 + _LightingAdditiveGradientStart ("Gradient Start--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = 0 + _LightingAdditiveGradientEnd ("Gradient End--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_ShadingAddPass ("Add Pass", Float) = 0 + [HideInInspector] s_start_ShadingGlobalMask ("Global Masks--{persistent_expand:true,default_expand:false}", Float) = 0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapApplyGlobalMaskIndex ("LightMap to Global Mask--{reference_property:_ShadingRampedLightMapApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapApplyGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapInverseApplyGlobalMaskIndex ("Inversed LightMap to Global Mask--{reference_property:_ShadingRampedLightMapInverseApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapInverseApplyGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] s_end_ShadingGlobalMask ("Global Masks", Float) = 0 + [HideInInspector] m_end_PoiShading ("Shading", Float) = 0 + [HideInInspector] m_start_brdf (" Reflections & Specular--{reference_property:_MochieBRDF,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/reflections-and-specular},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(MOCHIE_PBR)]_MochieBRDF ("Enable", Float) = 0 + _MochieMetallicMultiplier ("Metallic", Range(0, 1)) = 0 + _MochieRoughnessMultiplier ("Smoothness", Range(0, 1)) = 1 + _MochieReflectionTint ("Reflection Tint--{reference_property:_MochieReflectionTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _MochieReflectionTintThemeIndex ("", Int) = 0 + _MochieSpecularTint ("Specular Tint--{reference_property:_MochieSpecularTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _MochieSpecularTintThemeIndex ("", Int) = 0 + [sRGBWarning][ThryRGBAPacker(R Metallic Map, G Smoothness Map, B Reflection Mask, A Specular Mask, linear, false)]_MochieMetallicMaps ("Packed Maps [Click to Expand]--{reference_properties:[_MochieMetallicMapsPan, _MochieMetallicMapsUV, _MochieMetallicMapsStochastic, _MochieMetallicMapsMetallicChannel, _MochieMetallicMapsRoughnessChannel, _MochieMetallicMapsReflectionMaskChannel, _MochieMetallicMapsSpecularMaskChannel, _MochieMetallicMapInvert, _MochieRoughnessMapInvert, _MochieReflectionMaskInvert, _MochieSpecularMaskInvert]}", 2D) = "white" { } + [HideInInspector][Vector2]_MochieMetallicMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)]_MochieMetallicMapsUV ("UV", Int) = 0 + [HideInInspector][ToggleUI]_MochieMetallicMapsStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsMetallicChannel ("Metallic Channel", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsRoughnessChannel ("Smoothness Channel", Float) = 1 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsReflectionMaskChannel ("Reflection Mask Channel", Float) = 2 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsSpecularMaskChannel ("Specular Mask Channel", Float) = 3 + [HideInInspector][ToggleUI]_MochieMetallicMapInvert ("Invert Metallic", Float) = 0 + [HideInInspector][ToggleUI]_MochieRoughnessMapInvert ("Invert Smoothness", Float) = 0 + [HideInInspector][ToggleUI]_MochieReflectionMaskInvert ("Invert Reflection Mask", Float) = 0 + [HideInInspector][ToggleUI]_MochieSpecularMaskInvert ("Invert Specular Mask", Float) = 0 + [Space(10)] + _MochieReflectionStrength ("Reflection Visibility", Range(0, 1)) = 1 + _MochieSpecularStrength ("Specular Visibility", Range(0, 5)) = 1 + _RefSpecFresnelStrength ("Fresnel Strength", Range(0, 1)) = .5 + _SFExposureOcclusion ("Exposure Occlusion", Range(0, 1)) = 0 + [Space(10)] + [ThryTexture][NoScaleOffset]_MochieReflCube ("Cubemap", Cube) = "" { } + [ToggleUI]_MochieForceFallback ("Force Fallback", Int) = 0 + [HideInInspector] s_start_BRDFTPSMaskGroup ("TPS--{condition_showS:(_TPSPenetratorEnabled==1)}", Float) = 0 + [ThryToggleUI(true)] _BRDFTPSDepthEnabled (" TPS Depth Enabled", Float) = 0 + _BRDFTPSReflectionMaskStrength ("Reflection Mask Strength--{condition_showS:(_BRDFTPSDepthEnabled==1)}", Range(0, 1)) = 1 + _BRDFTPSSpecularMaskStrength ("Specular Mask Strength--{condition_showS:(_BRDFTPSDepthEnabled==1)}", Range(0, 1)) = 1 + [HideInInspector] s_end_BRDFTPSMaskGroup ("", Float) = 0 + [HideInInspector] s_start_ggxanisotropics(" Anisotropics--{reference_property:_GGXAnisotropics,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ThryToggle(GGX_ANISOTROPICS)]_GGXAnisotropics ("Enable", Float) = 0 + [sRGBWarning]_AnisotropyMap("Anisotropy Map--{reference_properties:[_AnisotropyMapPan, _AnisotropyMapUV, _AnisotropyMapChannel]}", 2D) = "bump" { } + [HideInInspector][Vector2]_AnisotropyMapPan("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _AnisotropyMapUV ("UV", Int) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3)]_AnisotropyMapChannel ("Channel", Float) = 0 + _Anisotropy ("Anisotropy", Range(-1, 1)) = 0 + _ReflectionAnisotropicStretch("Reflection Stretch", Range(1, 5)) = 1 + _RoughnessAnisotropy("Roughness Anisotropy", Range(0, 1)) = 1 + [HideInInspector] s_end_ggxanisotropics ("", Float) = 0 + [HideInInspector] s_start_PBRSecondSpecular ("2nd Specular--{reference_property:_Specular2ndLayer,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_Specular2ndLayer ("2nd Specular", Float) = 0 + _MochieSpecularStrength2 ("Visibility", Range(0, 5)) = 1 + _MochieRoughnessMultiplier2 ("Smoothness", Range(0, 1)) = 1 + [HideInInspector] s_end_PBRSecondSpecular ("Name", Float) = 0 + [HideInInspector] s_start_PBRSplitMaskSample ("Split Mask Sampling--{reference_property:_PBRSplitMaskSample,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_PBRSplitMaskSample ("Split Mask Sampling", Float) = 0 + [VectorLabel(tX, tY, oX, oY)]_PBRMaskScaleTiling ("Tiling/Offset", Vector) = (1, 1, 0, 0) + [ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)]_MochieMetallicMasksUV ("UV", Int) = 0 + [ToggleUI]_PBRSplitMaskStochastic ("Stochastic Sampling", Float) = 0 + [Vector2]_MochieMetallicMasksPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector] s_end_PBRSplitMaskSample ("Split Mask Sampling", Float) = 0 + [HideInInspector] s_start_brdfadvanced ("GSAA & Advanced Controls--{persistent_expand:true,default_expand:false}", Float) = 0 + [ToggleUI]_MochieLitFallback ("Lit Fallback", Float) = 1 + [ToggleUI]_IgnoreCastedShadows ("Ignore Casted Shadows", Float) = 0 + _PBRNormalSelect ("Pixel Normal Mix", Range(0, 1)) = 1 + [ThryToggleUI(true)]_MochieGSAAEnabled (" GSAA", Float) = 1 + _PoiGSAAVariance ("GSAA Variance--{condition_showS:(_MochieGSAAEnabled==1)}", Range(0, 1)) = 0.15 + _PoiGSAAThreshold ("GSAA Threshold--{condition_showS:(_MochieGSAAEnabled==1)}", Range(0, 1)) = 0.1 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieMetallicGlobalMask ("Metallic--{reference_property:_MochieMetallicGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieMetallicGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieSmoothnessGlobalMask ("Smoothness--{reference_property:_MochieSmoothnessGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieSmoothnessGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieReflectionStrengthGlobalMask ("Reflection Strength--{reference_property:_MochieReflectionStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieReflectionStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieSpecularStrengthGlobalMask ("Specular Strength--{reference_property:_MochieSpecularStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieSpecularStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] s_end_brdfadvanced ("", Float) = 0 + [HideInInspector] m_end_brdf ("", Float) = 0 + [HideInInspector] m_OutlineCategory (" Outlines--{reference_property:_EnableOutlines,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/outlines/main},hover:Documentation}}", Float) = 0 + [HideInInspector] m_specialFXCategory ("Special FX", Float) = 0 + [HideInInspector] m_start_emissionOptions (" Emission 0--{reference_property:_EnableEmission,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/special-fx/emission},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(_EMISSION)] + _EnableEmission ("Enable Emission 0", Float) = 0 + [sRGBWarning]_EmissionMask ("Emission Mask--{reference_properties:[_EmissionMaskPan, _EmissionMaskUV, _EmissionMaskChannel, _EmissionMaskInvert, _EmissionMask0GlobalMask]}", 2D) = "white" { } + [HideInInspector][Vector2]_EmissionMaskPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _EmissionMaskUV ("UV", Int) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3)]_EmissionMaskChannel ("Channel", Float) = 0 + [HideInInspector][ToggleUI]_EmissionMaskInvert ("Invert", Float) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _EmissionMask0GlobalMask ("Global Mask--{reference_property:_EmissionMask0GlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)]_EmissionMask0GlobalMaskBlendType ("Blending", Range(0, 1)) = 2 + [HDR]_EmissionColor ("Emission Color--{reference_property:_EmissionColorThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _EmissionColorThemeIndex ("", Int) = 0 + [sRGBWarning(true)][Gradient]_EmissionMap ("Emission Map--{reference_properties:[_EmissionMapPan, _EmissionMapUV]}", 2D) = "white" { } + [HideInInspector][Vector2]_EmissionMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _EmissionMapUV ("UV", Int) = 0 + _EmissionStrength ("Emission Strength", Range(0, 20)) = 0 + [ToggleUI]_EmissionBaseColorAsMap ("Use Base Colors", Float) = 0 + [ToggleUI]_EmissionReplace0 ("Override Base Color", Float) = 0 + _EmissionFluorescence ("Fluorescence", Range(0, 1)) = 0 + [HideInInspector] s_start_EmissionHueShift0 ("Color Adjust--{reference_property:_EmissionHueShiftEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionHueShiftEnabled ("Hue Shift", Float) = 0 + [ThryWideEnum(OKLab, 0, HSV, 1)] _EmissionHueShiftColorSpace ("Color Space", Int) = 0 + [ThryWideEnum(Hue Select, 0, Hue Shift, 1)] _EmissionHueSelectOrShift ("Select or Shift", Int) = 1 + _EmissionSaturation ("Saturation", Range(-1, 10)) = 0 + _EmissionHueShift ("Hue Shift", Range(0, 1)) = 0 + _EmissionHueShiftSpeed ("Hue Shift Speed", Float) = 0 + [HideInInspector] s_end_EmissionHueShift0 ("", Float) = 0 + [HideInInspector] s_start_EmissionCenterOut0 ("Center Out--{reference_property:_EmissionCenterOutEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionCenterOutEnabled ("Center Out", Float) = 0 + _EmissionCenterOutSpeed ("Flow Speed", Float) = 5 + [HideInInspector] s_end_EmissionCenterOut0 ("", Float) = 0 + [HideInInspector] s_start_EmissionLightBased0 ("Light Based--{reference_property:_EnableGITDEmission,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EnableGITDEmission ("Light Based", Float) = 0 + [Enum(World, 0, Mesh, 1)] _GITDEWorldOrMesh ("Lighting Type", Int) = 0 + _GITDEMinEmissionMultiplier ("Min Emission Multiplier", Range(0, 1)) = 1 + _GITDEMaxEmissionMultiplier ("Max Emission Multiplier", Range(0, 1)) = 0 + _GITDEMinLight ("Min Lighting", Range(0, 1)) = 0 + _GITDEMaxLight ("Max Lighting", Range(0, 1)) = 1 + [HideInInspector] s_end_EmissionLightBased0 ("", Float) = 0 + [HideInInspector] s_start_EmissionBlinking0 ("Blinking--{reference_property:_EmissionBlinkingEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionBlinkingEnabled ("Blinking", Float) = 0 + _EmissiveBlink_Min ("Emissive Blink Min", Float) = 0 + _EmissiveBlink_Max ("Emissive Blink Max", Float) = 1 + _EmissiveBlink_Velocity ("Emissive Blink Velocity", Float) = 4 + _EmissionBlinkingOffset ("Offset", Float) = 0 + [HideInInspector] s_end_EmissionBlinking0 ("", Float) = 0 + [HideInInspector] s_start_ScrollingEmission0 ("Scrolling--{reference_property:_ScrollingEmission,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI] _ScrollingEmission ("Scrolling", Float) = 0 + [ToggleUI]_EmissionScrollingUseCurve ("Use Curve", float) = 0 + [Curve]_EmissionScrollingCurve ("Curve--{condition_showS:(_EmissionScrollingUseCurve==1)}", 2D) = "white" { } + [ToggleUI]_EmissionScrollingVertexColor ("VColor as position", float) = 0 + _EmissiveScroll_Direction ("Direction", Vector) = (0, -10, 0, 0) + _EmissiveScroll_Width ("Width", Float) = 10 + _EmissiveScroll_Velocity ("Velocity", Float) = 10 + _EmissiveScroll_Interval ("Interval", Float) = 20 + _EmissionScrollingOffset ("Offset", Float) = 0 + [HideInInspector] s_end_ScrollingEmission0 ("", Float) = 0 + [Space(4)] + [ThryToggleUI(true)] _EmissionAL0Enabled (" Audio Link--{ condition_showS:_EnableAudioLink==1}", Float) = 0 + [HideInInspector] s_start_EmissionAL0Multiply ("Strength Multiply--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _EmissionAL0MultipliersBand ("Band", Int) = 0 + [VectorLabel(Min, Max)]_EmissionAL0Multipliers ("Multiplier", Vector) = (1, 1, 0, 0) + [HideInInspector] s_end_EmissionAL0Multiply ("Strength Multiply", Float) = 0 + [HideInInspector] s_start_EmissionAL0Add ("Strength Add--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _EmissionAL0StrengthBand ("Band", Int) = 0 + [VectorLabel(Min, Max)]_EmissionAL0StrengthMod ("Strength", Vector) = (0, 0, 0, 0) + [HideInInspector] s_end_EmissionAL0Add ("Strength Add", Float) = 0 + [HideInInspector] s_start_EmissionAL0COut ("Center Out--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _AudioLinkEmission0CenterOutBand ("Band", Int) = 0 + [VectorLabel(Min, Max)] _AudioLinkEmission0CenterOut ("Strength", Vector) = (0, 0, 0, 0) + _AudioLinkEmission0CenterOutSize ("Intensity Threshold", Range(0, 1)) = 0 + _AudioLinkEmission0CenterOutDuration ("Duration", Range(-1, 1)) = 1 + [HideInInspector] s_end_EmissionAL0COut ("Center Out", Float) = 0 + [HideInInspector] m_end_emissionOptions ("", Float) = 0 + [HideInInspector] m_vertexCategory ("Vertex Options", Float) = 0 + [HideInInspector] m_start_Uzumore (" View Clip Prevention (Uzumore)--{reference_property:_UzumoreCategoryToggle,button_author:{text:sigmal00,action:{type:URL,data:https://github.com/sigmal00},hover:GitHub}}, button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/vertex-options/view-clip-prevention},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(POI_UZUMORE)] _UzumoreCategoryToggle (" View Clip Prevention (Uzumore)", Float) = 0 + [ToggleUI] _UzumoreEnabled ("Animation Toggle", Float) = 1 + _UzumoreAmount ("Push Amount (m)", Float) = 0.1 + _UzumoreBias ("Push Bias", Float) = 0.001 + [sRGBWarning]_UzumoreMask ("Push Mask (A)", 2D) = "white" { } + [ThryWideEnum(R, 0, G, 1, B, 2, A, 3)] _UzumoreMaskUV ("Push Mask Channel", Float) = 3 + [HideInInspector] m_end_Uzumore ("Camera Push Back", Float) = 0 + [HideInInspector] m_modifierCategory ("Global Modifiers & Data", Float) = 0 + [HideInInspector] m_start_PoiGlobalCategory ("Global Data and Masks", Float) = 0 + [HideInInspector] m_start_GlobalThemes ("Global Themes--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/global-themes},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HDR]_GlobalThemeColor0 ("Theme Color 0", Color ) = (1, 1, 1, 1) + _GlobalThemeHue0 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed0 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation0 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue0 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HDR]_GlobalThemeColor1 ("Theme Color 1", Color ) = (1, 1, 1, 1) + _GlobalThemeHue1 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed1 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation1 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue1 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HDR]_GlobalThemeColor2 ("Theme Color 2", Color ) = (1, 1, 1, 1) + _GlobalThemeHue2 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed2 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation2 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue2 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HDR]_GlobalThemeColor3 ("Theme Color 3", Color ) = (1, 1, 1, 1) + _GlobalThemeHue3 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed3 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation3 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue3 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HideInInspector] m_end_GlobalThemes ("Global Themes", Float ) = 0 + [HideInInspector] m_start_GlobalMask ("Global Mask--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/global-masks},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalMaskModifiers ("Modifiers", Float) = 0 + [HideInInspector] m_end_GlobalMaskModifiers ("", Float) = 0 + [HideInInspector] m_end_GlobalMask ("Global Mask", Float) = 0 + [HideInInspector] m_end_PoiGlobalCategory ("Global Data and Masks ", Float) = 0 + [HideInInspector] m_start_PoiUVCategory ("UVs", Float) = 0 + [HideInInspector] m_start_Stochastic ("Stochastic Sampling--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/stochastic-sampling},hover:Documentation}}", Float) = 0 + [KeywordEnum(Deliot Heitz, Hextile, None)] _StochasticMode ("Sampling Mode", Float) = 0 + [HideInInspector] s_start_deliot ("Deliot Heitz--{persistent_expand:true,default_expand:false,condition_show:_StochasticMode==0}", Float) = 0 + _StochasticDeliotHeitzDensity ("Detiling Density", Range(0.1, 10)) = 1 + [HideInInspector] s_end_deliot ("Deliot Heitz", Float) = 0 + [HideInInspector] m_end_Stochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector] m_start_uvLocalWorld ("Local World UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/local-world-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos0 ("Local X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos1 ("Local Y", Int) = 1 + [Space(10)] + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos0 ("World X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos1 ("World Y", Int) = 2 + [HideInInspector] m_end_uvLocalWorld ("Local World UV", Float) = 0 + [HideInInspector] m_start_uvPanosphere ("Panosphere UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/panosphere-uv},hover:Documentation}}", Float) = 0 + [ToggleUI] _StereoEnabled ("Stereo Enabled", Float) = 0 + [ToggleUI] _PanoUseBothEyes ("Perspective Correct (VR)", Float) = 1 + [HideInInspector] m_end_uvPanosphere ("Panosphere UV", Float) = 0 + [HideInInspector] m_start_uvPolar ("Polar UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/polar-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8)] _PolarUV ("UV", Int) = 0 + [Vector2]_PolarCenter ("Center Coordinate", Vector) = (.5, .5, 0, 0) + _PolarRadialScale ("Radial Scale", Float) = 1 + _PolarLengthScale ("Length Scale", Float) = 1 + _PolarSpiralPower ("Spiral Power", Float) = 0 + [HideInInspector] m_end_uvPolar ("Polar UV", Float) = 0 + [HideInInspector] m_end_PoiUVCategory ("UVs ", Float) = 0 + [HideInInspector] m_start_PoiPostProcessingCategory ("Post Processing", Float) = 0 + [HideInInspector] m_start_PPAnimations ("PP Animations--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/post-processing/pp-animations},hover:Documentation}}", Float) = 0 + [Helpbox(1)] _PPHelp ("This section meant for real time adjustments through animations and not to be changed in unity", Int) = 0 + _PPLightingMultiplier ("Lighting Mulitplier", Float) = 1 + _PPLightingAddition ("Lighting Add", Float) = 0 + _PPEmissionMultiplier ("Emission Multiplier", Float) = 1 + _PPFinalColorMultiplier ("Final Color Multiplier", Float) = 1 + [HideInInspector] m_end_PPAnimations ("PP Animations ", Float) = 0 + [HideInInspector] m_end_PoiPostProcessingCategory ("Post Processing ", Float) = 0 + [HideInInspector] m_thirdpartyCategory ("Third Party", Float) = 0 + [HideInInspector] m_renderingCategory ("Rendering--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/main},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.CullMode)] _Cull ("Cull", Float) = 2 + [DoNotAnimate][Enum(UnityEngine.Rendering.CompareFunction)] _ZTest ("ZTest", Float) = 4 + [DoNotAnimate][Enum(Off, 0, On, 1)] _ZWrite ("ZWrite", Int) = 1 + [DoNotAnimate][ThryMask(Thry.ColorMaskFlags)] _ColorMask ("Color Mask", Int) = 15 + [DoNotAnimate] _OffsetFactor ("Offset Factor", Float) = 0.0 + [DoNotAnimate] _OffsetUnits ("Offset Units", Float) = 0.0 + [DoNotAnimate][ToggleUI] _RenderingReduceClipDistance ("Reduce Clip Distance", Float) = 0 + [DoNotAnimate][ToggleUI] _ZClip ("Z Clip", Float) = 1 + [DoNotAnimate][ToggleUI] _IgnoreFog ("Ignore Fog", Float) = 0 + [DoNotAnimate][ToggleUI]_FlipBackfaceNormals ("Flip Backface Normals", Int) = 1 + [DoNotAnimate][HideInInspector] Instancing ("Instancing", Float) = 0 //add this property for instancing variants settings to be shown + [ToggleUI] _RenderingEarlyZEnabled ("Early Z", Float) = 0 + [HideInInspector] m_start_blending ("Blending--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/blending},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOp ("RGB Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlend ("RGB Destination Blend", Int) = 0 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOp ("RGB Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlend ("RGB Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_start_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOpAlpha ("Alpha Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlendAlpha ("Alpha Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlendAlpha ("Alpha Destination Blend", Int) = 10 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOpAlpha ("Alpha Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlendAlpha ("Alpha Source Blend", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlendAlpha ("Alpha Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_end_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [HideInInspector] m_end_blending ("Blending", Float) = 0 + [HideInInspector] m_start_StencilPassOptions ("Stencil--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/stencil},hover:Documentation}}", Float) = 0 + [ThryWideEnum(Simple, 0, Front Face vs Back Face, 1)] _StencilType ("Stencil Type", Float) = 0 + [IntRange] _StencilRef ("Stencil Reference Value", Range(0, 255)) = 0 + [IntRange] _StencilReadMask ("Stencil ReadMask Value", Range(0, 255)) = 255 + [IntRange] _StencilWriteMask ("Stencil WriteMask Value", Range(0, 255)) = 255 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilPassOp ("Stencil Pass Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFailOp ("Stencil Fail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilZFailOp ("Stencil ZFail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilCompareFunction ("Stencil Compare Function--{condition_showS:(_StencilType==0)}", Float) = 8 + [HideInInspector] m_start_StencilPassBackOptions("Back--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp0 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackPassOp ("Back Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackFailOp ("Back Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackZFailOp ("Back ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilBackCompareFunction ("Back Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassBackOptions("Back", Float) = 0 + [HideInInspector] m_start_StencilPassFrontOptions("Front--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp1 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontPassOp ("Front Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontFailOp ("Front Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontZFailOp ("Front ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilFrontCompareFunction ("Front Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassFrontOptions("Front", Float) = 0 + [HideInInspector] m_end_StencilPassOptions ("Stencil", Float) = 0 + } + SubShader + { + Tags { "RenderType" = "Opaque" "Queue" = "Geometry" "VRCFallback" = "Standard" } + Pass + { + Name "Base" + Tags { "LightMode" = "ForwardBase" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Back + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_MOCHIEMETALLICMAPS + #define PROP_EMISSIONMASK + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdbase + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #pragma multi_compile_fragment _ VERTEXLIGHT_ON + #define POI_PASS_BASE + #pragma skip_variants LIGHTMAP_ON DYNAMICLIGHTMAP_ON LIGHTMAP_SHADOW_MIXING SHADOWS_SHADOWMASK DIRLIGHTMAP_COMBINED _MIXED_LIGHTING_SUBTRACTIVE + #pragma skip_variants DECALS_OFF DECALS_3RT DECALS_4RT DECAL_SURFACE_GRADIENT _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + #pragma skip_variants _ADDITIONAL_LIGHT_SHADOWS + #pragma skip_variants PROBE_VOLUMES_OFF PROBE_VOLUMES_L1 PROBE_VOLUMES_L2 + #pragma skip_variants _SCREEN_SPACE_OCCLUSION + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + #ifndef VRC_LIGHT_VOLUMES_INCLUDED + #define VRC_LIGHT_VOLUMES_INCLUDED + #define VRCLV_VERSION 2 + #define VRCLV_MAX_VOLUMES_COUNT 32 + #define VRCLV_MAX_LIGHTS_COUNT 128 + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + cbuffer LightVolumeUniforms { + #endif + uniform float _UdonLightVolumeEnabled; + uniform float _UdonLightVolumeVersion; + uniform float _UdonLightVolumeCount; + uniform float _UdonLightVolumeAdditiveMaxOverdraw; + uniform float _UdonLightVolumeAdditiveCount; + uniform float _UdonLightVolumeProbesBlend; + uniform float _UdonLightVolumeSharpBounds; + uniform float4x4 _UdonLightVolumeInvWorldMatrix[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeRotation[VRCLV_MAX_VOLUMES_COUNT * 2]; // Legacy! Used in this version to have back compatibility with older worlds. Array commented above will be used in future releases! Legacy! + uniform float3 _UdonLightVolumeInvLocalEdgeSmooth[VRCLV_MAX_VOLUMES_COUNT]; + uniform float3 _UdonLightVolumeUvw[VRCLV_MAX_VOLUMES_COUNT * 6]; // Legacy! AABB Bounds of islands on the 3D Texture atlas. Array commented above will be used in future releases! Legacy! + uniform float4 _UdonLightVolumeOcclusionUvw[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeColor[VRCLV_MAX_VOLUMES_COUNT]; + uniform float _UdonPointLightVolumeCount; + uniform float _UdonPointLightVolumeCubeCount; + uniform float4 _UdonPointLightVolumePosition[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeColor[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeDirection[VRCLV_MAX_LIGHTS_COUNT]; + uniform float3 _UdonPointLightVolumeCustomID[VRCLV_MAX_LIGHTS_COUNT]; + uniform float _UdonLightBrightnessCutoff; + uniform float _UdonLightVolumeOcclusionCount; + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + } + #endif + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + uniform Texture3D _UdonLightVolume; + uniform SamplerState sampler_UdonLightVolume; + uniform Texture2DArray _UdonPointLightVolumeTexture; + #define LV_SAMPLE(tex, uvw) tex.SampleLevel(sampler_UdonLightVolume, uvw, 0) + #else + #define LV_SAMPLE(tex, uvw) float4(0,0,0,0) + #endif + #define LV_PI 3.141592653589793f + #define LV_PI2 6.283185307179586f + float LV_Smoothstep01(float x) { + return x * x * (3 - 2 * x); + } + float3 LV_MultiplyVectorByQuaternion(float3 v, float4 q) { + float3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); + } + float3 LV_MultiplyVectorByMatrix2x3(float3 v, float3 r0, float3 r1) { + float3 r2 = cross(r0, r1); + return float3(dot(v, r0), dot(v, r1), dot(v, r2)); + } + float LV_FastAcos(float x) { + float absX = abs(x); + float res = -0.156583f * absX + LV_PI * 0.5f; + res *= sqrt(1.0f - absX); + return (x >= 0) ? res : (LV_PI - res); + } + float LV_DistributionGGX(float NoH, float roughness) { + float f = (roughness - 1) * ((roughness + 1) * (NoH * NoH)) + 1; + return (roughness * roughness) / ((float) LV_PI * f * f); + } + bool LV_PointLocalAABB(float3 localUVW) { + return all(abs(localUVW) <= 0.5); + } + float3 LV_LocalFromVolume(uint volumeID, float3 worldPos) { + return mul(_UdonLightVolumeInvWorldMatrix[volumeID], float4(worldPos, 1.0)).xyz; + } + float LV_EvaluateSH(float L0, float3 L1, float3 n) { + return L0 + dot(L1, n); + } + float4 LV_SampleCubemapArray(uint id, float3 dir) { + float3 absDir = abs(dir); + float2 uv; + uint face; + if (absDir.x >= absDir.y && absDir.x >= absDir.z) { + face = dir.x > 0 ? 0 : 1; + uv = float2((dir.x > 0 ? -dir.z : dir.z), -dir.y) * rcp(absDir.x); + } else if (absDir.y >= absDir.z) { + face = dir.y > 0 ? 2 : 3; + uv = float2(dir.x, (dir.y > 0 ? dir.z : -dir.z)) * rcp(absDir.y); + } else { + face = dir.z > 0 ? 4 : 5; + uv = float2((dir.z > 0 ? dir.x : -dir.x), -dir.y) * rcp(absDir.z); + } + float3 uvid = float3(uv * 0.5 + 0.5, id * 6 + face); + return LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + } + float4 LV_ProjectQuadLightIrradianceSH(float3 shadingPosition, float3 lightVertices[4]) { + [unroll] for (uint edge0 = 0; edge0 < 4; edge0++) { + lightVertices[edge0] = normalize(lightVertices[edge0] - shadingPosition); + } + const float3 zhDir0 = float3(0.866025, -0.500001, -0.000004); + const float3 zhDir1 = float3(-0.759553, 0.438522, -0.480394); + const float3 zhDir2 = float3(-0.000002, 0.638694, 0.769461); + const float3 zhWeightL1y = float3(2.1995339f, 2.50785367f, 1.56572711f); + const float3 zhWeightL1z = float3(-1.82572523f, -2.08165037f, 0.00000000f); + const float3 zhWeightL1x = float3(2.42459869f, 1.44790525f, 0.90397552f); + float solidAngle = 0.0; + float3 surfaceIntegral = 0.0; + [loop] for (uint edge1 = 0; edge1 < 4; edge1++) { + uint next = (edge1 + 1) % 4; + uint prev = (edge1 + 4 - 1) % 4; + float3 prevVert = lightVertices[prev]; + float3 thisVert = lightVertices[edge1]; + float3 nextVert = lightVertices[next]; + float3 a = cross(thisVert, prevVert); + float3 b = cross(thisVert, nextVert); + float lenA = length(a); + float lenB = length(b); + solidAngle += LV_FastAcos(clamp(dot(a, b) / (lenA * lenB), -1, 1)); + float3 mu = b * rcp(lenB); + float cosGamma = dot(thisVert, nextVert); + float gamma = LV_FastAcos(clamp(cosGamma, -1, 1)); + surfaceIntegral.x += gamma * dot(zhDir0, mu); + surfaceIntegral.y += gamma * dot(zhDir1, mu); + surfaceIntegral.z += gamma * dot(zhDir2, mu); + } + solidAngle = solidAngle - LV_PI2; + surfaceIntegral *= 0.5; + const float normalizationL0 = 0.5f * sqrt(1.0f / LV_PI); + float l0 = normalizationL0 * solidAngle; + float l1y = dot(zhWeightL1y, surfaceIntegral); + float l1z = dot(zhWeightL1z, surfaceIntegral); + float l1x = dot(zhWeightL1x, surfaceIntegral); + const float cosineKernelL0 = LV_PI; // (1) + const float cosineKernelL1 = LV_PI2 / 3.0f; // (1) + const float oneOverPi = 1.0f / LV_PI; // (2) + const float normalizationL1 = 0.5f * sqrt(3.0f / LV_PI); // (3) + const float weightL0 = cosineKernelL0 * normalizationL0 * oneOverPi; // (1), (2), (3) + const float weightL1 = cosineKernelL1 * normalizationL1 * oneOverPi; // (1), (2), (3) + l0 *= weightL0; + l1y *= weightL1; + l1z *= weightL1; + l1x *= weightL1; + return float4(l1x, l1y, l1z, l0); + } + void LV_QuadLight(float3 worldPos, float3 centroidPos, float4 rotationQuat, float2 size, float3 color, float sqMaxDist, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 lightToWorldPos = worldPos - centroidPos; + float3 normal = LV_MultiplyVectorByQuaternion(float3(0, 0, 1), rotationQuat); + if (dot(normal, lightToWorldPos) < 0.0) return; + float sqCutoffDist = sqMaxDist - dot(lightToWorldPos, lightToWorldPos); + color.rgb *= saturate(sqCutoffDist / sqMaxDist) * LV_PI * occlusion; + float2 halfSize = size * 0.5f; + float3 xAxis = LV_MultiplyVectorByQuaternion(float3(1, 0, 0), rotationQuat); + float3 yAxis = cross(normal, xAxis); + float3 verts[4]; + verts[0] = centroidPos + (-halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[1] = centroidPos + ( halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[2] = centroidPos + ( halfSize.x * xAxis) + (-halfSize.y * yAxis); + verts[3] = centroidPos + (-halfSize.x * xAxis) + (-halfSize.y * yAxis); + float4 areaLightSH = LV_ProjectQuadLightIrradianceSH(worldPos, verts); + float lenL1 = length(areaLightSH.xyz); + if (lenL1 > areaLightSH.w) areaLightSH.xyz *= areaLightSH.w / lenL1; + L0 += areaLightSH.w * color.rgb; + L1r += areaLightSH.xyz * color.r; + L1g += areaLightSH.xyz * color.g; + L1b += areaLightSH.xyz * color.b; + count++; + } + float3 LV_PointLightAttenuation(float sqdist, float sqlightSize, float3 color, float brightnessCutoff, float sqMaxDist) { + float mask = saturate(1 - sqdist / sqMaxDist); + return mask * mask * color * sqlightSize / (sqdist + sqlightSize); + } + float LV_PointLightSolidAngle(float sqdist, float sqlightSize) { + return saturate(sqrt(sqdist / (sqlightSize + sqdist))); + } + void LV_SphereLight(float sqdist, float3 dirN, float sqlightSize, float3 color, float occlusion, float sqMaxDist, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 att = LV_PointLightAttenuation(sqdist, sqlightSize, color, _UdonLightBrightnessCutoff, sqMaxDist); + float3 l0 = att * occlusion; + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLight(float sqdist, float3 dirN, float sqlightSize, float3 att, float spotMask, float cosAngle, float coneFalloff, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float smoothedCone = LV_Smoothstep01(saturate(spotMask * coneFalloff)); + float3 l0 = att * (occlusion * smoothedCone); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * saturate(1 - cosAngle)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightCookie(float sqdist, float3 dirN, float sqlightSize, float3 att, float4 lightRot, float tanAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 localDir = LV_MultiplyVectorByQuaternion(-dirN, lightRot); + float2 uv = localDir.xy * rcp(localDir.z * tanAngle); + if ( + localDir.z <= 0.0 || // Culling by direction + abs(uv.x) > 1.0 || abs(uv.y) > 1.0 // Culling by UV + ) return; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 - customId - 1; + float3 uvid = float3(uv * 0.5 + 0.5, id); + float angleSize = saturate(rsqrt(1 + tanAngle * tanAngle)); + float4 cookie = LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + float3 l0 = att * cookie.rgb * (cookie.a * occlusion); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * (1 - angleSize)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightAttenuationLUT(float sqdist, float3 dirN, float sqlightSize, float3 color, float spotMask, float cosAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float dirRadius = sqdist * abs(sqlightSize); + float spot = 1 - saturate(spotMask * rcp(1 - cosAngle)); + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId - 1; + float3 uvid = float3(sqrt(float2(spot, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * occlusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } + void LV_PointLight(uint id, float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 customID_data = _UdonPointLightVolumeCustomID[id]; + int shadowId = (int) customID_data.y; // Shadowmask id + int customId = (int) customID_data.x; // Custom Texture ID + float sqrRange = customID_data.z; // Squared culling distance + float4 pos = _UdonPointLightVolumePosition[id]; // Light position and inversed squared range + float3 dir = pos.xyz - worldPos; + float sqlen = max(dot(dir, dir), 1e-6); + if (sqlen > sqrRange) return; // Early distance based culling + float3 dirN = dir * rsqrt(sqlen); + float lightOcclusion = 1; + if (_UdonLightVolumeOcclusionCount != 0 && shadowId >= 0) { + lightOcclusion = dot(occlusion, float4(shadowId == 0, shadowId == 1, shadowId == 2, shadowId == 3)); + } + float4 color = _UdonPointLightVolumeColor[id]; // Color, angle + float4 ldir = _UdonPointLightVolumeDirection[id]; // Dir + falloff or Rotation + if (pos.w < 0) { // It is a spot light + float angle = color.w; + float spotMask = dot(ldir.xyz, -dirN) - angle; + if(customId >= 0 && spotMask < 0) return; // Spot cone based culling + if (customId > 0) { // If it uses Attenuation LUT + LV_SphereSpotLightAttenuationLUT(sqlen, dirN, -pos.w, color.rgb, spotMask, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + float3 att = LV_PointLightAttenuation(sqlen, -pos.w, color.rgb, _UdonLightBrightnessCutoff, sqrRange); + if (customId < 0) { // If uses cookie + LV_SphereSpotLightCookie(sqlen, dirN, -pos.w, att, ldir, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + LV_SphereSpotLight(sqlen, dirN, -pos.w, att, spotMask, angle, ldir.w, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + } else if (color.w <= 1.5f) { // It is a point light + if (customId > 0) { // Using LUT + float invSqRange = abs(pos.w); // Sign of range defines if it's point light (positive) or a spot light (negative) + float dirRadius = sqlen * invSqRange; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId; + float3 uvid = float3(sqrt(float2(0, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * lightOcclusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } else { // If it uses default parametric attenuation + float3 l0 = 0, l1r = 0, l1g = 0, l1b = 0; + LV_SphereLight(sqlen, dirN, pos.w, color.rgb, lightOcclusion, sqrRange, l0, l1r, l1g, l1b, count); + float3 cubeColor = 1; + if (customId < 0) { // If it uses a cubemap + uint id = -customId - 1; // Cubemap ID starts from zero and should not take in count texture array slices count. + cubeColor = LV_SampleCubemapArray(id, LV_MultiplyVectorByQuaternion(dirN, ldir)).xyz; + } + L0 += l0 * cubeColor; + L1r += l1r * cubeColor.r; + L1g += l1g * cubeColor.g; + L1b += l1b * cubeColor.b; + } + } else { // It is an area light + LV_QuadLight(worldPos, pos.xyz, ldir, float2(pos.w, color.w - 2.0f), color.rgb, sqrRange, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + void LV_SampleLightVolumeTex(float3 uvw0, float3 uvw1, float3 uvw2, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b) { + float4 tex0 = LV_SAMPLE(_UdonLightVolume, uvw0); + float4 tex1 = LV_SAMPLE(_UdonLightVolume, uvw1); + float4 tex2 = LV_SAMPLE(_UdonLightVolume, uvw2); + L0 = tex0.rgb; + L1r = float3(tex1.r, tex2.r, tex0.a); + L1g = float3(tex1.g, tex2.g, tex1.a); + L1b = float3(tex1.b, tex2.b, tex2.a); + } + float LV_BoundsMask(float3 localUVW, float3 invLocalEdgeSmooth) { + float3 distToMin = (localUVW + 0.5) * invLocalEdgeSmooth; + float3 distToMax = (0.5 - localUVW) * invLocalEdgeSmooth; + float3 fade = saturate(min(distToMin, distToMax)); + return fade.x * fade.y * fade.z; + } + void LV_SampleLightProbe(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz; + L1g += unity_SHAg.xyz; + L1b += unity_SHAb.xyz; + } + void LV_SampleLightProbeDering(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz * 0.565f; + L1g += unity_SHAg.xyz * 0.565f; + L1b += unity_SHAb.xyz * 0.565f; + } + void LV_SampleVolume(uint id, float3 localUVW, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + float3 uvw0 = uvwScaled + _UdonLightVolumeUvw[uvwID].xyz; + float3 uvw1 = uvwScaled + _UdonLightVolumeUvw[uvwID + 2].xyz; + float3 uvw2 = uvwScaled + _UdonLightVolumeUvw[uvwID + 4].xyz; + float3 l0, l1r, l1g, l1b; + LV_SampleLightVolumeTex(uvw0, uvw1, uvw2, l0, l1r, l1g, l1b); + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + occlusion = 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + occlusion = 1; + } + float4 color = _UdonLightVolumeColor[id]; + L0 += l0 * color.rgb; + l1r *= color.r; + l1g *= color.g; + l1b *= color.b; + if (color.a != 0) { + float3 r0 = _UdonLightVolumeRotation[id * 2].xyz; + float3 r1 = _UdonLightVolumeRotation[id * 2 + 1].xyz; + L1r += LV_MultiplyVectorByMatrix2x3(l1r, r0, r1); + L1g += LV_MultiplyVectorByMatrix2x3(l1g, r0, r1); + L1b += LV_MultiplyVectorByMatrix2x3(l1b, r0, r1); + } else { + L1r += l1r; + L1g += l1g; + L1b += l1b; + } + } + float4 LV_SampleVolumeOcclusion(uint id, float3 localUVW) { + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + return 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + return 1; + } + } + void LV_PointLightVolumeSH(float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + uint pointCount = min((uint) _UdonPointLightVolumeCount, VRCLV_MAX_LIGHTS_COUNT); + if (pointCount == 0) return; + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_LIGHTS_COUNT); + uint pcount = 0; // Point lights counter + [loop] for (uint pid = 0; pid < pointCount && pcount < maxOverdraw; pid++) { + LV_PointLight(pid, worldPos, occlusion, L0, L1r, L1g, L1b, pcount); + } + } + void LV_LightVolumeSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + if (volumesCount == 0) { // Legacy! Fallback to default light probes if Light Volume are not enabled or a version is too old to have a support. Legacy! + LV_SampleLightProbe(L0, L1r, L1g, L1b); + return; + } + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + bool lightProbesBlend = _UdonLightVolumeProbesBlend; + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + [loop] for (uint id = 0; id < volumesCount; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA && lightProbesBlend) { + LV_SampleLightProbe(L0, L1r, L1g, L1b); + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + float3 L0_A = 0; + float3 L1r_A = 0; + float3 L1g_A = 0; + float3 L1b_A = 0; + float4 occlusion_A = 1; + LV_SampleVolume(volumeID_A, localUVW_A, L0_A, L1r_A, L1g_A, L1b_A, occlusion_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || isNoA || (_UdonLightVolumeSharpBounds && isNoB)) { // Returning SH A result if it's the center of mask or out of bounds + L0 += L0_A; + L1r += L1r_A; + L1g += L1g_A; + L1b += L1b_A; + occlusion = occlusion_A; + occlusion *= mOcclusion; + return; + } + float3 L0_B = 0; + float3 L1r_B = 0; + float3 L1g_B = 0; + float3 L1b_B = 0; + float4 occlusion_B = 1; + if (isNoB && lightProbesBlend) { // No Volume found and light volumes blending enabled + LV_SampleLightProbe(L0_B, L1r_B, L1g_B, L1b_B); + } else { // Blending Volume A and Volume B + localUVW_B = isNoB ? localUVW : localUVW_B; + volumeID_B = isNoB ? volumesCount - 1 : volumeID_B; + LV_SampleVolume(volumeID_B, localUVW_B, L0_B, L1r_B, L1g_B, L1b_B, occlusion_B); + } + occlusion = lerp(occlusion_B, occlusion_A, mask); + occlusion *= mOcclusion; + L0 += lerp(L0_B, L0_A, mask); + L1r += lerp(L1r_B, L1r_A, mask); + L1g += lerp(L1g_B, L1g_A, mask); + L1b += lerp(L1b_B, L1b_A, mask); + } + void LV_LightVolumeAdditiveSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + if (additiveCount == 0 && (uint) _UdonPointLightVolumeCount == 0) return; // Legacy! + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW for Y Axis and Free rotations + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + uint count = min(_UdonLightVolumeOcclusionCount == 0 ? additiveCount : volumesCount, VRCLV_MAX_VOLUMES_COUNT); // Only use all volumes if occlusion volumes are enabled + [loop] for (uint id = 0; id < count; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA || _UdonLightVolumeOcclusionCount == 0) { + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + occlusion = LV_SampleVolumeOcclusion(volumeID_A, localUVW_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || (_UdonLightVolumeSharpBounds && isNoB)) { + occlusion *= mOcclusion; + return; // Returning A result if it's the center of mask or out of bounds + } + if (isNoB) occlusion = lerp(1, occlusion, mask); + else occlusion = lerp(LV_SampleVolumeOcclusion(volumeID_B, localUVW_B), occlusion, mask); + occlusion *= mOcclusion; + } + float3 LightVolumeSpecular(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specColor = max(float3(dot(reflect(-L1r, worldNormal), viewDir), dot(reflect(-L1g, worldNormal), viewDir), dot(reflect(-L1b, worldNormal), viewDir)), 0); + float3 rDir = normalize(normalize(L1r) + viewDir); + float3 gDir = normalize(normalize(L1g) + viewDir); + float3 bDir = normalize(normalize(L1b) + viewDir); + float rNh = saturate(dot(worldNormal, rDir)); + float gNh = saturate(dot(worldNormal, gDir)); + float bNh = saturate(dot(worldNormal, bDir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float rSpec = LV_DistributionGGX(rNh, roughExp); + float gSpec = LV_DistributionGGX(gNh, roughExp); + float bSpec = LV_DistributionGGX(bNh, roughExp); + float3 specs = (rSpec + gSpec + bSpec) * f0; + float3 coloredSpecs = specs * specColor; + float3 a = coloredSpecs + specs * L0; + float3 b = coloredSpecs * 3; + return max(lerp(a, b, smoothness) * 0.5f, 0.0); + } + float3 LightVolumeSpecular(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecular(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeSpecularDominant(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 dominantDir = L1r + L1g + L1b; + float3 dir = normalize(normalize(dominantDir) + viewDir); + float nh = saturate(dot(worldNormal, dir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float spec = LV_DistributionGGX(nh, roughExp); + return max(spec * L0 * f0, 0.0) * 1.5f; + } + float3 LightVolumeSpecularDominant(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecularDominant(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeEvaluate(float3 worldNormal, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + return float3(LV_EvaluateSH(L0.r, L1r, worldNormal), LV_EvaluateSH(L0.g, L1g, worldNormal), LV_EvaluateSH(L0.b, L1b, worldNormal)); + } + void LightVolumeSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled == 0) { + LV_SampleLightProbeDering(L0, L1r, L1g, L1b); + } else { + float4 occlusion = 1; + LV_LightVolumeSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + void LightVolumeAdditiveSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled != 0) { + float4 occlusion = 1; + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + float3 LightVolumeSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float3 LightVolumeAdditiveSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return 0; + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float LightVolumesEnabled() { + return _UdonLightVolumeEnabled; + } + float LightVolumesVersion() { + return _UdonLightVolumeVersion == 0 ? _UdonLightVolumeEnabled : _UdonLightVolumeVersion; + } + #endif + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + #ifdef _EMISSION + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMap; + #endif + float4 _EmissionMap_ST; + float2 _EmissionMapPan; + float _EmissionMapUV; + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMask; + #endif + float4 _EmissionMask_ST; + float2 _EmissionMaskPan; + float _EmissionMaskUV; + float _EmissionMaskInvert; + float _EmissionMaskChannel; + float _EmissionMask0GlobalMask; + float _EmissionMask0GlobalMaskBlendType; + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionScrollingCurve; + #endif + float4 _EmissionScrollingCurve_ST; + float _EmissionFluorescence; + float4 _EmissionColor; + float _EmissionBaseColorAsMap; + float _EmissionStrength; + float _EmissionHueShiftEnabled; + float _EmissionHueShiftColorSpace; + float _EmissionHueSelectOrShift; + float _EmissionSaturation; + float _EmissionHueShift; + float _EmissionHueShiftSpeed; + float _EmissionCenterOutEnabled; + float _EmissionCenterOutSpeed; + float _EnableGITDEmission; + float _GITDEWorldOrMesh; + float _GITDEMinEmissionMultiplier; + float _GITDEMaxEmissionMultiplier; + float _GITDEMinLight; + float _GITDEMaxLight; + float _EmissionBlinkingEnabled; + float _EmissiveBlink_Min; + float _EmissiveBlink_Max; + float _EmissiveBlink_Velocity; + float _EmissionBlinkingOffset; + float _ScrollingEmission; + float4 _EmissiveScroll_Direction; + float _EmissiveScroll_Width; + float _EmissiveScroll_Velocity; + float _EmissiveScroll_Interval; + float _EmissionScrollingOffset; + float _EmissionReplace0; + float _EmissionScrollingVertexColor; + float _EmissionScrollingUseCurve; + float _EmissionColorThemeIndex; + float _EmissionAL0Enabled; + float2 _EmissionAL0StrengthMod; + float _EmissionAL0StrengthBand; + float2 _AudioLinkEmission0CenterOut; + float _AudioLinkEmission0CenterOutSize; + float _AudioLinkEmission0CenterOutBand; + float _AudioLinkEmission0CenterOutDuration; + float2 _EmissionAL0Multipliers; + float _EmissionAL0MultipliersBand; + #endif + #ifdef MOCHIE_PBR + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _MochieMetallicMaps; + float _PBRMapsStochastic; + #endif + float4 _MochieMetallicMaps_ST; + float2 _MochieMetallicMapsPan; + float _MochieMetallicMapsUV; + float _MochieMetallicMapsStochastic; + float _MochieMetallicMapInvert; + float _MochieRoughnessMapInvert; + float _MochieReflectionMaskInvert; + float _MochieSpecularMaskInvert; + float _MochieMetallicMapsMetallicChannel; + float _MochieMetallicMapsRoughnessChannel; + float _MochieMetallicMapsReflectionMaskChannel; + float _MochieMetallicMapsSpecularMaskChannel; + float _PBRNormalSelect; + float _MochieReflectionTintThemeIndex; + float _MochieSpecularTintThemeIndex; + float _MochieRoughnessMultiplier; + float _MochieMetallicMultiplier; + float _MochieReflectionStrength; + float _MochieSpecularStrength; + float4 _MochieSpecularTint; + float4 _MochieReflectionTint; + float _MochieLitFallback; + float _IgnoreCastedShadows; + float _PBRSplitMaskSample; + float _PBRSplitMaskStochastic; + float4 _PBRMaskScaleTiling; + float _MochieMetallicMasksUV; + float4 _MochieMetallicMasksPan; + float _Specular2ndLayer; + float _MochieSpecularStrength2; + float _MochieRoughnessMultiplier2; + float _RefSpecFresnelStrength; + float _SFExposureOcclusion; + TextureCube _MochieReflCube; + float4 _MochieReflCube_HDR; + float _MochieForceFallback; + float _MochieGSAAEnabled; + float _PoiGSAAVariance; + float _PoiGSAAThreshold; + float _BRDFTPSReflectionMaskStrength; + float _BRDFTPSSpecularMaskStrength; + float _BRDFTPSDepthEnabled; + float _MochieMetallicGlobalMask; + float _MochieMetallicGlobalMaskBlendType; + float _MochieSmoothnessGlobalMask; + float _MochieSmoothnessGlobalMaskBlendType; + float _MochieReflectionStrengthGlobalMask; + float _MochieReflectionStrengthGlobalMaskBlendType; + float _MochieSpecularStrengthGlobalMask; + float _MochieSpecularStrengthGlobalMaskBlendType; + #endif + float _PPLightingMultiplier; + float _PPLightingAddition; + float _PPEmissionMultiplier; + float _PPFinalColorMultiplier; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef VIGNETTE_MASKED + #ifdef _LIGHTINGMODE_REALISTIC + #if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) + #if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) + #define SUBTRACTIVE_LIGHTING 1 + #endif + #endif + float FadeShadows(float attenuation, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if HANDLE_SHADOWS_BLENDING_IN_GI || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + #if ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + attenuation = poiLight.attenuation; + #endif + float viewZ = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float shadowFadeDistance = UnityComputeShadowFadeDistance(poiMesh.worldPos, viewZ); + float shadowFade = UnityComputeShadowFade(shadowFadeDistance); + float bakedAttenuation = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + attenuation = UnityMixRealtimeAndBakedShadows(attenuation, bakedAttenuation, shadowFade); + #endif + return attenuation; + } + void ApplySubtractiveLighting(inout UnityIndirect indirectLight, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if SUBTRACTIVE_LIGHTING + poiLight.attenuation = FadeShadows(poiLight.attenuation, poiLight, poiMesh, poiCam); + float ndotl = saturate(dot(poiMesh.normals[0], _WorldSpaceLightPos0.xyz)); + float3 shadowedLightEstimate = ndotl * (1 - poiLight.attenuation) * _LightColor0.rgb; + float3 subtractedLight = indirectLight.diffuse - shadowedLightEstimate; + subtractedLight = max(subtractedLight, unity_ShadowColor.rgb); + subtractedLight = lerp(subtractedLight, indirectLight.diffuse, _LightShadowData.x); + indirectLight.diffuse = min(subtractedLight, indirectLight.diffuse); + #endif + } + UnityIndirect CreateIndirectLight(in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight) + { + UnityIndirect indirectLight; + indirectLight.diffuse = 0; + indirectLight.specular = 0; + #if defined(LIGHTMAP_ON) + indirectLight.diffuse = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, poiMesh.lightmapUV.xy)); + #if defined(DIRLIGHTMAP_COMBINED) + float4 lightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, poiMesh.lightmapUV.xy); + indirectLight.diffuse = DecodeDirectionalLightmap(indirectLight.diffuse, lightmapDirection, poiMesh.normals[1]); + #endif + ApplySubtractiveLighting(indirectLight, poiLight, poiMesh, poiCam); + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float3 dynamicLightDiffuse = DecodeRealtimeLightmap( + UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, poiMesh.lightmapUV.zw) + ); + #if defined(DIRLIGHTMAP_COMBINED) + float4 dynamicLightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_DynamicDirectionality, unity_DynamicLightmap, poiMesh.lightmapUV.zw); + indirectLight.diffuse += DecodeDirectionalLightmap(dynamicLightDiffuse, dynamicLightmapDirection, poiMesh.normals[1]); + #else + indirectLight.diffuse += dynamicLightDiffuse; + #endif + #endif + #if !defined(LIGHTMAP_ON) && !defined(DYNAMICLIGHTMAP_ON) + #if UNITY_LIGHT_PROBE_PROXY_VOLUME + if (unity_ProbeVolumeParams.x == 1) + { + indirectLight.diffuse = SHEvalLinearL0L1_SampleProbeVolume( + float4(poiMesh.normals[1], 1), poiMesh.worldPos + ); + indirectLight.diffuse = max(0, indirectLight.diffuse); + #if defined(UNITY_COLORSPACE_GAMMA) + indirectLight.diffuse = LinearToGammaSpace(indirectLight.diffuse); + #endif + } + else + { + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + } + #else + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + #endif + #endif + indirectLight.diffuse *= poiLight.occlusion; + return indirectLight; + } + #endif + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_REALISTIC + UnityLight light; + light.dir = poiLight.direction; + light.color = max(0, _LightColor0.rgb) * saturate(shadowAttenuation * attenuation * poiLight.detailShadow); + light.ndotl = poiLight.nDotLSaturated; + UnityIndirect indirectLight = (UnityIndirect)0; + #ifdef UNITY_PASS_FORWARDBASE + indirectLight = CreateIndirectLight(poiMesh, poiCam, poiLight); + #endif + #ifdef UNITY_PASS_FORWARDBASE + light.color = max(light.color * 1.0, 0); + light.color = max(light.color + 0.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse * 1.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse + 0.0, 0); + #endif + poiLight.rampedLightMap = poiLight.nDotLSaturated; + poiLight.finalLighting = max(POI_BRDF_PBS(1, 0, 0, 0, poiMesh.normals[1], poiCam.viewDir, light, indirectLight).xyz, _LightingMinLightBrightness); + #ifdef UNITY_PASS_FORWARDBASE + if (_UdonLightVolumeEnabled && 1.0) + { + float3 L0 = 0; + float3 L1r = 0; + float3 L1g = 0; + float3 L1b = 0; + #ifdef LIGHTMAP_ON + LightVolumeAdditiveSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + poiLight.finalLighting += clamp(LightVolumeEvaluate(poiMesh.normals[1], L0, L1r, L1g, L1b), _LightingMinLightBrightness, _LightingCap); + #endif + } + #endif + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + float calculateGlowInTheDark(in float minLight, in float maxLight, in float minEmissionMultiplier, in float maxEmissionMultiplier, in float enabled, in float worldOrMesh, in PoiLight poiLight) + { + float glowInTheDarkMultiplier = 1; + if (enabled) + { + float3 lightValue = worldOrMesh ? calculateluminance(poiLight.finalLighting.rgb) : calculateluminance(poiLight.directColor.rgb); + float gitdeAlpha = saturate(inverseLerp(minLight, maxLight, lightValue)); + glowInTheDarkMultiplier = lerp(minEmissionMultiplier, maxEmissionMultiplier, gitdeAlpha); + } + return glowInTheDarkMultiplier; + } + float calculateScrollingEmission(in float3 direction, in float velocity, in float interval, in float scrollWidth, float offset, float3 position) + { + scrollWidth = max(scrollWidth, 0); + float phase = 0; + phase = dot(position, direction); + phase -= (_Time.y + offset) * velocity; + phase /= interval; + phase -= floor(phase); + phase = saturate(phase); + return (pow(phase, scrollWidth) + pow(1 - phase, scrollWidth * 4)) * 0.5; + } + float calculateBlinkingEmission(in float blinkMin, in float blinkMax, in float blinkVelocity, float offset) + { + float amplitude = (blinkMax - blinkMin) * 0.5f; + float base = blinkMin + amplitude; + return sin((_Time.y + offset) * blinkVelocity) * amplitude + base; + } + void applyALEmmissionStrength(in PoiMods poiMods, inout float emissionStrength, in float2 emissionStrengthMod, in float emissionStrengthBand, in float2 _EmissionALMultipliers, in float _EmissionALMultipliersBand, in float enabled) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + emissionStrength += lerp(emissionStrengthMod.x, emissionStrengthMod.y, poiMods.audioLink[emissionStrengthBand]); + emissionStrength *= lerp(_EmissionALMultipliers.x, _EmissionALMultipliers.y, poiMods.audioLink[_EmissionALMultipliersBand]); + } + #endif + } + void applyALCenterOutEmission(in PoiMods poiMods, in float nDotV, inout float emissionStrength, in float size, in float band, in float2 emissionToAdd, in float enabled, in float duration) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + float intensity; + [flatten] + if (duration >= 0) + { + intensity = getBandAtTime(band, saturate(remap(nDotV, 1, 0, 0, duration)), size); + } + else + { + duration *= -1; + intensity = getBandAtTime(band, saturate(remap(pow(nDotV, 2), 0, 1 + duration, 0, duration)), size); + } + emissionStrength += lerp(emissionToAdd[0], emissionToAdd[1], intensity); + } + #endif + } + #ifdef _EMISSION + float3 applyEmission(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiLight poiLight, in PoiCam poiCam, in PoiMods poiMods) + { + float3 emission0 = 0; + float emissionAlpha = 1; + float emissionStrength0 = 0.1; + float3 emissionColor0 = 0; + applyALEmmissionStrength(poiMods, emissionStrength0, float4(0,0,0,0), 0.0, float4(1,1,0,0), 0.0, 0.0); + applyALCenterOutEmission(poiMods, poiLight.nDotV, emissionStrength0, 0.0, 0.0, float4(0,0,0,0), 0.0, 1.0); + float glowInTheDarkMultiplier0 = calculateGlowInTheDark(0.0, 1.0, 1.0, 0.0, 0.0, 0.0, poiLight); + #ifdef POI_GRABPASS + float mixBaseColor = 0; + #else + float mixBaseColor = 0.0; + #endif + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + float4 emissionTex = 0; + if (!0.0) + { + emissionTex = POI2D_SAMPLER_PAN(_EmissionMap, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + } + else + { + emissionTex = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMap, _MainTex, ((.5 + poiLight.nDotV * .5) * float4(1,1,0,0).xy) + _Time.x * 5.0); + } + emissionColor0 = emissionTex.rgb * lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + emissionAlpha = emissionTex.a; + #else + emissionColor0 = lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + #endif + float3 inverseLighting = saturate((1.0 - poiLight.directColor) * sqrt(poiLight.directColor)); + emissionColor0 = lerp(emissionColor0.rgb, emissionColor0.rgb * inverseLighting, 0.0); + emissionStrength0 *= emissionAlpha; + if (0.0) + { + float3 pos = poiMesh.localPos; + if (0.0) + { + pos = poiMesh.vertexColor.rgb; + } + if (0.0) + { + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + emissionStrength0 *= UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionScrollingCurve, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + (dot(pos, float4(0,-10,0,0).xyz) * 20.0) + _Time.x * 10.0).r; + #endif + } + else + { + emissionStrength0 *= calculateScrollingEmission(float4(0,-10,0,0).xyz, 10.0, 20.0, 10.0, 0.0, pos); + } + } + if (0.0) + { + emissionStrength0 *= calculateBlinkingEmission(0.0, 1.0, 4.0, 0.0); + } + if(0.0) + { + emissionColor0 = hueShift(emissionColor0, frac(0.0 + 0.0 * _Time.x), 0.0, 1.0); + emissionColor0 = lerp(emissionColor0, dot(emissionColor0, float3(0.3, 0.59, 0.11)), - (0.0)); + } + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + float emissionMask0 = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + _Time.x * float4(0,0,0,0))[0.0]; + #else + float emissionMask0 = 1; + #endif + if (0.0) + { + emissionMask0 = 1 - emissionMask0; + } + if (0.0 > 0) + { + emissionMask0 = maskBlend(emissionMask0, poiMods.globalMask[0.0 - 1], 2.0); + } + emissionStrength0 *= glowInTheDarkMultiplier0 * emissionMask0; + emission0 = max(emissionStrength0 * emissionColor0, 0); + #ifdef POI_DISSOLVE + if (_DissolveEmissionSide != 2) + { + emission0 *= lerp(1 - dissolveAlpha, dissolveAlpha, _DissolveEmissionSide); + } + #endif + poiFragData.emission += emission0; + return emission0 * 0.0; + } + #endif + #if defined(MOCHIE_PBR) || defined(POI_CLEARCOAT) + float GSAA_Filament(float3 worldNormal, float perceptualRoughness, float gsaaVariance, float gsaaThreshold) + { + float3 du = ddx(worldNormal); + float3 dv = ddy(worldNormal); + float variance = gsaaVariance * (dot(du, du) + dot(dv, dv)); + float roughness = perceptualRoughness * perceptualRoughness; + float kernelRoughness = min(2.0 * variance, gsaaThreshold); + float squareRoughness = saturate(roughness * roughness + kernelRoughness); + return sqrt(sqrt(squareRoughness)); + } + float3 GetWorldReflections(float3 reflDir, float3 worldPos, float roughness) + { + float3 baseReflDir = reflDir; + reflDir = BoxProjection(reflDir, worldPos, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax); + float4 envSample0 = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, reflDir, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p0 = DecodeHDR(envSample0, unity_SpecCube0_HDR); + float interpolator = unity_SpecCube0_BoxMin.w; + + if (interpolator < 0.99999) + { + float3 refDirBlend = BoxProjection(baseReflDir, worldPos, unity_SpecCube1_ProbePosition, unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax); + float4 envSample1 = UNITY_SAMPLE_TEXCUBE_SAMPLER_LOD(unity_SpecCube1, unity_SpecCube0, refDirBlend, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p1 = DecodeHDR(envSample1, unity_SpecCube1_HDR); + p0 = lerp(p1, p0, interpolator); + } + return p0; + } + float3 GetReflections(in PoiCam poiCam, in PoiLight pl, in PoiMesh poiMesh, float roughness, float ForceFallback, float LightFallback, TextureCube reflectionCube, float4 hdrData, float3 reflectionDir) + { + float3 reflections = 0; + float3 lighting = pl.finalLighting; + if (ForceFallback == 0) + { + + if (SceneHasReflections()) + { + #ifdef UNITY_PASS_FORWARDBASE + reflections = GetWorldReflections(reflectionDir, poiMesh.worldPos.xyz, roughness); + #endif + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + reflections *= pl.occlusion; + return reflections; + } + float GetGGXTerm(float nDotL, float nDotV, float nDotH, float roughness) + { + float visibilityTerm = 0; + if (nDotL > 0) + { + float lambdaV = nDotL * (nDotV * (1 - roughness) + roughness); + float lambdaL = nDotV * (nDotL * (1 - roughness) + roughness); + visibilityTerm = 0.5f / (lambdaV + lambdaL + 1e-5f); + float a = nDotH * roughness; + float k = roughness / (1.0 - nDotH * nDotH + a * a+ 1e-5f); + float dotTerm = k * k * UNITY_INV_PI; + visibilityTerm *= dotTerm; + } + return visibilityTerm; + } + void GetSpecFresTerm(float nDotL, float nDotV, float nDotH, float lDotH, inout float3 specularTerm, inout float3 fresnelTerm, float3 specCol, float roughness) + { + specularTerm = GetGGXTerm(nDotL, nDotV, nDotH, roughness); + fresnelTerm = FresnelTerm(specCol, lDotH); + specularTerm = max(0, specularTerm * max(0.00001, nDotL)); + } + float GetRoughness(float smoothness) + { + float rough = 1 - smoothness; + rough *= 1.7 - 0.7 * rough; + return rough; + } + float SFVisibility(float brdfRoughness, float3 directColor, float NDotV, float ExposureOcclusion) + { + float Visibility = saturate(length(directColor + EPSILON) * (1.0/(ExposureOcclusion))); //Using direct color because I think it should be generally more forgiving + return saturate(pow(NDotV + Visibility, exp2(-16.0 * brdfRoughness - 1.0)) - 1.0 + Visibility); + } + #endif + #ifdef MOCHIE_PBR + void MetallicAndSpecularFragDataInit(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + float smoothness = 1.0; + float smoothness2 = 1.0; + float metallic = 0.494; + float specularMask = 1; + float reflectionMask = 1; + smoothness *= poiFragData.smoothness; + smoothness2 *= poiFragData.smoothness2; + metallic *= poiFragData.metallic; + specularMask *= poiFragData.specularMask; + reflectionMask *= poiFragData.reflectionMask; + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + + if (0.0) + { + float4 PBRSplitMask = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy, 0.0); + assignValueToVectorFromIndex(PBRMaps, 2.0, PBRSplitMask[2.0]); + assignValueToVectorFromIndex(PBRMaps, 3.0, PBRSplitMask[3.0]); + } + if (0.0 < 4) + { + metallic *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + smoothness2 *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + reflectionMask *= 1.0; + specularMask *= 5.0; + if (0.0) + { + metallic = 1 - metallic; + } + if (0.0) + { + smoothness = 1 - smoothness; + smoothness2 = 1 - smoothness2; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + poiFragData.smoothness *= smoothness; + poiFragData.smoothness2 *= smoothness2; + poiFragData.metallic *= metallic; + poiFragData.specularMask *= specularMask; + poiFragData.reflectionMask *= reflectionMask; + } + void MochieBRDF(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, inout PoiMods poiMods) + { + float smoothness = poiFragData.smoothness; + float smoothness2 = poiFragData.smoothness2; + float metallic = poiFragData.metallic; + float specularMask = poiFragData.specularMask; + float reflectionMask = poiFragData.reflectionMask; + if (0.0 > 0) + { + metallic = customBlend(metallic, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + smoothness2 = customBlend(smoothness2, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef TPS_Penetrator + if (0.0) + { + reflectionMask = lerp(0, reflectionMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + specularMask = lerp(0, specularMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float roughness2 = GetRoughness(smoothness2); + float3 specCol = lerp(unity_ColorSpaceDielectricSpec.rgb, poiFragData.baseColor, metallic); + float omr = unity_ColorSpaceDielectricSpec.a - metallic * unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + float percepRough2 = 1 - smoothness2; + + if (1.0) + { + float3 normals = lerp(poiMesh.normals[0], poiMesh.normals[1], 1.0); + percepRough = GSAA_Filament(normals, percepRough, 0.15, 0.1); + if (0.0 == 1 && 1.0 > 0) + { + percepRough2 = GSAA_Filament(normals, percepRough2, 0.15, 0.1); + } + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float brdfRoughness2 = percepRough2 * percepRough2; + brdfRoughness2 = max(brdfRoughness2, 0.002); + float3 diffuse = poiFragData.baseColor; + float3 specular = 0; + float3 specular2 = 0; + float3 vSpecular = 0; + float3 vSpecular2 = 0; + float3 reflections = 0; + float3 environment = 0; + #if defined(POINT) || defined(SPOT) + float attenuation = lerp(poiLight.additiveShadow, 1, 0.0); + #else + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + #endif + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float pbrNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 1.0); + float pbrNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 1.0); + float pbrNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 1.0); + float3 pbrReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 1.0); + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + if (0.0 == 1) + { + float3 fresnelTerm = 1; + float3 specularTerm = 1; + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness2); + specular2 = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation * 1.0; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness2); + vSpecular2 += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * 1.0; + } + #endif + } + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _MochieReflCube, _MochieReflCube_HDR, pbrReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, pbrNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, pbrNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + reflections *= reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = max(specular + vSpecular, specular2 + vSpecular2); + environment += reflections; + diffuse *= poiLight.finalLighting; + poiFragData.finalColor = diffuse; + poiLight.finalLightAdd += environment; + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(1,1,1,1), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #if defined(MOCHIE_PBR) + MetallicAndSpecularFragDataInit(poiFragData, poiMesh, poiMods); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) + float3 emissionBaseReplace = 0;// + #endif + #ifdef _EMISSION + emissionBaseReplace += applyEmission(poiFragData, poiMesh, poiLight, poiCam, poiMods); + #endif + #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) + poiFragData.baseColor.rgb = lerp(poiFragData.baseColor.rgb, saturate(emissionBaseReplace), poiMax(emissionBaseReplace)); + #endif + + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #ifdef MOCHIE_PBR + MochieBRDF(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 0.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + #ifdef UNITY_PASS_FORWARDBASE + poiFragData.emission = max(poiFragData.emission * 1.0, 0); + poiFragData.finalColor = max(poiFragData.finalColor * 1.0, 0); + #endif + if (4.0 == POI_MODE_OPAQUE) + { + } + clip(poiFragData.alpha - 0.0); + if (4.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + poiFragData.finalColor += poiFragData.emission * poiMods.globalEmission; + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "Add" + Tags { "LightMode" = "ForwardAdd" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite Off + Cull Back + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_AddBlendOp], [_AddBlendOpAlpha] + Blend [_AddSrcBlend] [_AddDstBlend], [_AddSrcBlendAlpha] [_AddDstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_MOCHIEMETALLICMAPS + #define PROP_EMISSIONMASK + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdadd_fullshadows + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_ADD + #pragma skip_variants LIGHTMAP_ON DYNAMICLIGHTMAP_ON LIGHTMAP_SHADOW_MIXING SHADOWS_SHADOWMASK DIRLIGHTMAP_COMBINED _MIXED_LIGHTING_SUBTRACTIVE + #pragma skip_variants DECALS_OFF DECALS_3RT DECALS_4RT DECAL_SURFACE_GRADIENT _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + #pragma skip_variants _ADDITIONAL_LIGHT_SHADOWS + #pragma skip_variants PROBE_VOLUMES_OFF PROBE_VOLUMES_L1 PROBE_VOLUMES_L2 + #pragma skip_variants _SCREEN_SPACE_OCCLUSION + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + #ifdef MOCHIE_PBR + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _MochieMetallicMaps; + float _PBRMapsStochastic; + #endif + float4 _MochieMetallicMaps_ST; + float2 _MochieMetallicMapsPan; + float _MochieMetallicMapsUV; + float _MochieMetallicMapsStochastic; + float _MochieMetallicMapInvert; + float _MochieRoughnessMapInvert; + float _MochieReflectionMaskInvert; + float _MochieSpecularMaskInvert; + float _MochieMetallicMapsMetallicChannel; + float _MochieMetallicMapsRoughnessChannel; + float _MochieMetallicMapsReflectionMaskChannel; + float _MochieMetallicMapsSpecularMaskChannel; + float _PBRNormalSelect; + float _MochieReflectionTintThemeIndex; + float _MochieSpecularTintThemeIndex; + float _MochieRoughnessMultiplier; + float _MochieMetallicMultiplier; + float _MochieReflectionStrength; + float _MochieSpecularStrength; + float4 _MochieSpecularTint; + float4 _MochieReflectionTint; + float _MochieLitFallback; + float _IgnoreCastedShadows; + float _PBRSplitMaskSample; + float _PBRSplitMaskStochastic; + float4 _PBRMaskScaleTiling; + float _MochieMetallicMasksUV; + float4 _MochieMetallicMasksPan; + float _Specular2ndLayer; + float _MochieSpecularStrength2; + float _MochieRoughnessMultiplier2; + float _RefSpecFresnelStrength; + float _SFExposureOcclusion; + TextureCube _MochieReflCube; + float4 _MochieReflCube_HDR; + float _MochieForceFallback; + float _MochieGSAAEnabled; + float _PoiGSAAVariance; + float _PoiGSAAThreshold; + float _BRDFTPSReflectionMaskStrength; + float _BRDFTPSSpecularMaskStrength; + float _BRDFTPSDepthEnabled; + float _MochieMetallicGlobalMask; + float _MochieMetallicGlobalMaskBlendType; + float _MochieSmoothnessGlobalMask; + float _MochieSmoothnessGlobalMaskBlendType; + float _MochieReflectionStrengthGlobalMask; + float _MochieReflectionStrengthGlobalMaskBlendType; + float _MochieSpecularStrengthGlobalMask; + float _MochieSpecularStrengthGlobalMaskBlendType; + #endif + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef VIGNETTE_MASKED + #ifdef _LIGHTINGMODE_REALISTIC + #if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) + #if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) + #define SUBTRACTIVE_LIGHTING 1 + #endif + #endif + float FadeShadows(float attenuation, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if HANDLE_SHADOWS_BLENDING_IN_GI || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + #if ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + attenuation = poiLight.attenuation; + #endif + float viewZ = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float shadowFadeDistance = UnityComputeShadowFadeDistance(poiMesh.worldPos, viewZ); + float shadowFade = UnityComputeShadowFade(shadowFadeDistance); + float bakedAttenuation = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + attenuation = UnityMixRealtimeAndBakedShadows(attenuation, bakedAttenuation, shadowFade); + #endif + return attenuation; + } + void ApplySubtractiveLighting(inout UnityIndirect indirectLight, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if SUBTRACTIVE_LIGHTING + poiLight.attenuation = FadeShadows(poiLight.attenuation, poiLight, poiMesh, poiCam); + float ndotl = saturate(dot(poiMesh.normals[0], _WorldSpaceLightPos0.xyz)); + float3 shadowedLightEstimate = ndotl * (1 - poiLight.attenuation) * _LightColor0.rgb; + float3 subtractedLight = indirectLight.diffuse - shadowedLightEstimate; + subtractedLight = max(subtractedLight, unity_ShadowColor.rgb); + subtractedLight = lerp(subtractedLight, indirectLight.diffuse, _LightShadowData.x); + indirectLight.diffuse = min(subtractedLight, indirectLight.diffuse); + #endif + } + UnityIndirect CreateIndirectLight(in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight) + { + UnityIndirect indirectLight; + indirectLight.diffuse = 0; + indirectLight.specular = 0; + #if defined(LIGHTMAP_ON) + indirectLight.diffuse = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, poiMesh.lightmapUV.xy)); + #if defined(DIRLIGHTMAP_COMBINED) + float4 lightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, poiMesh.lightmapUV.xy); + indirectLight.diffuse = DecodeDirectionalLightmap(indirectLight.diffuse, lightmapDirection, poiMesh.normals[1]); + #endif + ApplySubtractiveLighting(indirectLight, poiLight, poiMesh, poiCam); + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float3 dynamicLightDiffuse = DecodeRealtimeLightmap( + UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, poiMesh.lightmapUV.zw) + ); + #if defined(DIRLIGHTMAP_COMBINED) + float4 dynamicLightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_DynamicDirectionality, unity_DynamicLightmap, poiMesh.lightmapUV.zw); + indirectLight.diffuse += DecodeDirectionalLightmap(dynamicLightDiffuse, dynamicLightmapDirection, poiMesh.normals[1]); + #else + indirectLight.diffuse += dynamicLightDiffuse; + #endif + #endif + #if !defined(LIGHTMAP_ON) && !defined(DYNAMICLIGHTMAP_ON) + #if UNITY_LIGHT_PROBE_PROXY_VOLUME + if (unity_ProbeVolumeParams.x == 1) + { + indirectLight.diffuse = SHEvalLinearL0L1_SampleProbeVolume( + float4(poiMesh.normals[1], 1), poiMesh.worldPos + ); + indirectLight.diffuse = max(0, indirectLight.diffuse); + #if defined(UNITY_COLORSPACE_GAMMA) + indirectLight.diffuse = LinearToGammaSpace(indirectLight.diffuse); + #endif + } + else + { + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + } + #else + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + #endif + #endif + indirectLight.diffuse *= poiLight.occlusion; + return indirectLight; + } + #endif + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_REALISTIC + UnityLight light; + light.dir = poiLight.direction; + light.color = max(0, _LightColor0.rgb) * saturate(shadowAttenuation * attenuation * poiLight.detailShadow); + light.ndotl = poiLight.nDotLSaturated; + UnityIndirect indirectLight = (UnityIndirect)0; + #ifdef UNITY_PASS_FORWARDBASE + indirectLight = CreateIndirectLight(poiMesh, poiCam, poiLight); + #endif + #ifdef UNITY_PASS_FORWARDBASE + light.color = max(light.color * 1.0, 0); + light.color = max(light.color + 0.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse * 1.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse + 0.0, 0); + #endif + poiLight.rampedLightMap = poiLight.nDotLSaturated; + poiLight.finalLighting = max(POI_BRDF_PBS(1, 0, 0, 0, poiMesh.normals[1], poiCam.viewDir, light, indirectLight).xyz, _LightingMinLightBrightness); + #ifdef UNITY_PASS_FORWARDBASE + if (_UdonLightVolumeEnabled && 1.0) + { + float3 L0 = 0; + float3 L1r = 0; + float3 L1g = 0; + float3 L1b = 0; + #ifdef LIGHTMAP_ON + LightVolumeAdditiveSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + poiLight.finalLighting += clamp(LightVolumeEvaluate(poiMesh.normals[1], L0, L1r, L1g, L1b), _LightingMinLightBrightness, _LightingCap); + #endif + } + #endif + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + #if defined(MOCHIE_PBR) || defined(POI_CLEARCOAT) + float GSAA_Filament(float3 worldNormal, float perceptualRoughness, float gsaaVariance, float gsaaThreshold) + { + float3 du = ddx(worldNormal); + float3 dv = ddy(worldNormal); + float variance = gsaaVariance * (dot(du, du) + dot(dv, dv)); + float roughness = perceptualRoughness * perceptualRoughness; + float kernelRoughness = min(2.0 * variance, gsaaThreshold); + float squareRoughness = saturate(roughness * roughness + kernelRoughness); + return sqrt(sqrt(squareRoughness)); + } + float3 GetWorldReflections(float3 reflDir, float3 worldPos, float roughness) + { + float3 baseReflDir = reflDir; + reflDir = BoxProjection(reflDir, worldPos, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax); + float4 envSample0 = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, reflDir, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p0 = DecodeHDR(envSample0, unity_SpecCube0_HDR); + float interpolator = unity_SpecCube0_BoxMin.w; + + if (interpolator < 0.99999) + { + float3 refDirBlend = BoxProjection(baseReflDir, worldPos, unity_SpecCube1_ProbePosition, unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax); + float4 envSample1 = UNITY_SAMPLE_TEXCUBE_SAMPLER_LOD(unity_SpecCube1, unity_SpecCube0, refDirBlend, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p1 = DecodeHDR(envSample1, unity_SpecCube1_HDR); + p0 = lerp(p1, p0, interpolator); + } + return p0; + } + float3 GetReflections(in PoiCam poiCam, in PoiLight pl, in PoiMesh poiMesh, float roughness, float ForceFallback, float LightFallback, TextureCube reflectionCube, float4 hdrData, float3 reflectionDir) + { + float3 reflections = 0; + float3 lighting = pl.finalLighting; + if (ForceFallback == 0) + { + + if (SceneHasReflections()) + { + #ifdef UNITY_PASS_FORWARDBASE + reflections = GetWorldReflections(reflectionDir, poiMesh.worldPos.xyz, roughness); + #endif + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + reflections *= pl.occlusion; + return reflections; + } + float GetGGXTerm(float nDotL, float nDotV, float nDotH, float roughness) + { + float visibilityTerm = 0; + if (nDotL > 0) + { + float lambdaV = nDotL * (nDotV * (1 - roughness) + roughness); + float lambdaL = nDotV * (nDotL * (1 - roughness) + roughness); + visibilityTerm = 0.5f / (lambdaV + lambdaL + 1e-5f); + float a = nDotH * roughness; + float k = roughness / (1.0 - nDotH * nDotH + a * a+ 1e-5f); + float dotTerm = k * k * UNITY_INV_PI; + visibilityTerm *= dotTerm; + } + return visibilityTerm; + } + void GetSpecFresTerm(float nDotL, float nDotV, float nDotH, float lDotH, inout float3 specularTerm, inout float3 fresnelTerm, float3 specCol, float roughness) + { + specularTerm = GetGGXTerm(nDotL, nDotV, nDotH, roughness); + fresnelTerm = FresnelTerm(specCol, lDotH); + specularTerm = max(0, specularTerm * max(0.00001, nDotL)); + } + float GetRoughness(float smoothness) + { + float rough = 1 - smoothness; + rough *= 1.7 - 0.7 * rough; + return rough; + } + float SFVisibility(float brdfRoughness, float3 directColor, float NDotV, float ExposureOcclusion) + { + float Visibility = saturate(length(directColor + EPSILON) * (1.0/(ExposureOcclusion))); //Using direct color because I think it should be generally more forgiving + return saturate(pow(NDotV + Visibility, exp2(-16.0 * brdfRoughness - 1.0)) - 1.0 + Visibility); + } + #endif + #ifdef MOCHIE_PBR + void MetallicAndSpecularFragDataInit(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + float smoothness = 1.0; + float smoothness2 = 1.0; + float metallic = 0.494; + float specularMask = 1; + float reflectionMask = 1; + smoothness *= poiFragData.smoothness; + smoothness2 *= poiFragData.smoothness2; + metallic *= poiFragData.metallic; + specularMask *= poiFragData.specularMask; + reflectionMask *= poiFragData.reflectionMask; + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + + if (0.0) + { + float4 PBRSplitMask = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy, 0.0); + assignValueToVectorFromIndex(PBRMaps, 2.0, PBRSplitMask[2.0]); + assignValueToVectorFromIndex(PBRMaps, 3.0, PBRSplitMask[3.0]); + } + if (0.0 < 4) + { + metallic *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + smoothness2 *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + reflectionMask *= 1.0; + specularMask *= 5.0; + if (0.0) + { + metallic = 1 - metallic; + } + if (0.0) + { + smoothness = 1 - smoothness; + smoothness2 = 1 - smoothness2; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + poiFragData.smoothness *= smoothness; + poiFragData.smoothness2 *= smoothness2; + poiFragData.metallic *= metallic; + poiFragData.specularMask *= specularMask; + poiFragData.reflectionMask *= reflectionMask; + } + void MochieBRDF(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, inout PoiMods poiMods) + { + float smoothness = poiFragData.smoothness; + float smoothness2 = poiFragData.smoothness2; + float metallic = poiFragData.metallic; + float specularMask = poiFragData.specularMask; + float reflectionMask = poiFragData.reflectionMask; + if (0.0 > 0) + { + metallic = customBlend(metallic, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + smoothness2 = customBlend(smoothness2, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef TPS_Penetrator + if (0.0) + { + reflectionMask = lerp(0, reflectionMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + specularMask = lerp(0, specularMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float roughness2 = GetRoughness(smoothness2); + float3 specCol = lerp(unity_ColorSpaceDielectricSpec.rgb, poiFragData.baseColor, metallic); + float omr = unity_ColorSpaceDielectricSpec.a - metallic * unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + float percepRough2 = 1 - smoothness2; + + if (1.0) + { + float3 normals = lerp(poiMesh.normals[0], poiMesh.normals[1], 1.0); + percepRough = GSAA_Filament(normals, percepRough, 0.15, 0.1); + if (0.0 == 1 && 1.0 > 0) + { + percepRough2 = GSAA_Filament(normals, percepRough2, 0.15, 0.1); + } + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float brdfRoughness2 = percepRough2 * percepRough2; + brdfRoughness2 = max(brdfRoughness2, 0.002); + float3 diffuse = poiFragData.baseColor; + float3 specular = 0; + float3 specular2 = 0; + float3 vSpecular = 0; + float3 vSpecular2 = 0; + float3 reflections = 0; + float3 environment = 0; + #if defined(POINT) || defined(SPOT) + float attenuation = lerp(poiLight.additiveShadow, 1, 0.0); + #else + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + #endif + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float pbrNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 1.0); + float pbrNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 1.0); + float pbrNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 1.0); + float3 pbrReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 1.0); + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + if (0.0 == 1) + { + float3 fresnelTerm = 1; + float3 specularTerm = 1; + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness2); + specular2 = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation * 1.0; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness2); + vSpecular2 += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * 1.0; + } + #endif + } + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _MochieReflCube, _MochieReflCube_HDR, pbrReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, pbrNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, pbrNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + reflections *= reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = max(specular + vSpecular, specular2 + vSpecular2); + environment += reflections; + diffuse *= poiLight.finalLighting; + poiFragData.finalColor = diffuse; + poiLight.finalLightAdd += environment; + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(1,1,1,1), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #if defined(MOCHIE_PBR) + MetallicAndSpecularFragDataInit(poiFragData, poiMesh, poiMods); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #ifdef MOCHIE_PBR + MochieBRDF(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 0.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + if (4.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.0); + if (4.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + if (4.0 == 4) + { + poiFragData.alpha = saturate(poiFragData.alpha * 10.0); + } + if (4.0 != POI_MODE_TRANSPARENT) + { + poiFragData.finalColor *= poiFragData.alpha; + } + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Back + AlphaToMask Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_MOCHIEMETALLICMAPS + #define PROP_EMISSIONMASK + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_instancing + #pragma multi_compile_shadowcaster + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_SHADOW + #pragma skip_variants LIGHTMAP_ON DYNAMICLIGHTMAP_ON LIGHTMAP_SHADOW_MIXING SHADOWS_SHADOWMASK DIRLIGHTMAP_COMBINED _MIXED_LIGHTING_SUBTRACTIVE + #pragma skip_variants DECALS_OFF DECALS_3RT DECALS_4RT DECAL_SURFACE_GRADIENT _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + #pragma skip_variants _ADDITIONAL_LIGHT_SHADOWS + #pragma skip_variants PROBE_VOLUMES_OFF PROBE_VOLUMES_L1 PROBE_VOLUMES_L2 + #pragma skip_variants _SCREEN_SPACE_OCCLUSION + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(1,1,1,1), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + poiFragData.finalColor = poiFragData.baseColor; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 0.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + if (4.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.0); + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + } + CustomEditor "Thry.ShaderEditor" +} diff --git a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsTrophyOuter/Poiyomi Pro.shader.meta b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsTrophyOuter/Poiyomi Pro.shader.meta new file mode 100644 index 0000000..93d7cef --- /dev/null +++ b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/NoPointsTrophyOuter/Poiyomi Pro.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f18550d3924a5eb45b4ac80db218f3e6 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Platform.meta b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Platform.meta new file mode 100644 index 0000000..933101b --- /dev/null +++ b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Platform.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: df8ec1d642cffa548b2db74aed78f6e4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Platform/Poiyomi Pro World.shader b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Platform/Poiyomi Pro World.shader new file mode 100644 index 0000000..20dae3c --- /dev/null +++ b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Platform/Poiyomi Pro World.shader @@ -0,0 +1,13681 @@ +Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/b7744b7dccafd7c479db7f7db6f5e317" +{ + Properties + { + [HideInInspector] shader_master_label ("Poiyomi 9.3.48", Float) = 0 + [HideInInspector] shader_is_using_thry_editor ("", Float) = 0 + [HideInInspector] shader_locale ("0db0b86376c3dca4b9a6828ef8615fe0", Float) = 0 + [HideInInspector] footer_website ("{texture:{name:icon-poilogo,height:24},action:{type:URL,data:https://www.poiyomi.com},hover:WEBSITE}", Float) = 0 + [HideInInspector] footer_discord ("{texture:{name:icon-discord,height:24},action:{type:URL,data:https://discord.gg/Ays52PY},hover:DISCORD}", Float) = 0 + [HideInInspector] footer_patreon ("{texture:{name:icon-patreon-new,height:24},action:{type:URL,data:https://www.patreon.com/poiyomi},hover:PATREON}", Float) = 0 + [HideInInspector] footer_youtube ("{texture:{name:icon-youtube,height:24},action:{type:URL,data:https://www.youtube.com/poiyomi},hover:YOUTUBE}", Float) = 0 + [HideInInspector] footer_github ("{texture:{name:icon-github,height:24},action:{type:URL,data:https://github.com/poiyomi/PoiyomiToonShader},hover:GITHUB}", Float) = 0 + [HideInInspector] footer_bluesky ("{texture:{name:icon-bluesky,height:24},action:{type:URL,data:https://bsky.app/profile/poiyomi.com},hover:BLUESKY}", Float) = 0 + [HideInInspector] footer_twitter ("{texture:{name:icon-twitter,height:24},action:{type:URL,data:https://x.com/poiyomi},hover:X}", Float) = 0 + [Header(POIYOMI SHADER UI FAILED TO LOAD)] + [Header(. This is caused by scripts failing to compile. It can be fixed.)] + [Header(. The inspector will look broken and will not work properly until fixed.)] + [Header(. Please check your console for script errors.)] + [Header(. You can filter by errors in the console window.)] + [Header(. Often the topmost error points to the erroring script.)] + [Space(30)][Header(Common Error Causes)] + [Header(. Installing multiple Poiyomi Shader packages)] + [Header(. Make sure to delete the Poiyomi shader folder before you update Poiyomi.)] + [Header(. If a package came with Poiyomi this is bad practice and can cause issues.)] + [Header(. Delete the package and import it without any Poiyomi components.)] + [Header(. Bad VRCSDK installation (e.g. Both VCC and Standalone))] + [Header(. Delete the VRCSDK Folder in Assets if you are using the VCC.)] + [Header(. Avoid using third party SDKs. They can cause incompatibility.)] + [Header(. Script Errors in other scripts)] + [Header(. Outdated tools or prefabs can cause this.)] + [Header(. Update things that are throwing errors or move them outside the project.)] + [Space(30)][Header(Visit Our Discord to Ask For Help)] + [Space(5)]_ShaderUIWarning0 (" → discord.gg/poiyomi ← We can help you get it fixed! --{condition_showS:(0==1)}", Int) = -0 + [Space(1400)][Header(POIYOMI SHADER UI FAILED TO LOAD)] + _ShaderUIWarning1 ("Please scroll up for more information! --{condition_showS:(0==1)}", Int) = -0 + [HideInInspector] _ForgotToLockMaterial (";;YOU_FORGOT_TO_LOCK_THIS_MATERIAL;", Int) = 1 + [ThryShaderOptimizerLockButton] _ShaderOptimizerEnabled ("", Int) = 1 + [HideInInspector] GeometryShader_Enabled("GEOMETRY SHADER ENABLED", Float) = 1 + [HideInInspector] Tessellation_Enabled("TESSELLATION ENABLED", Float) = 1 + [ThryWideEnum(Opaque, 0, Cutout, 1, TransClipping, 9, Fade, 2, Transparent, 3, Additive, 4, Soft Additive, 5, Multiplicative, 6, 2x Multiplicative, 7)]_Mode("Rendering Preset--{on_value_actions:[ + {value:0,actions:[{type:SET_PROPERTY,data:render_queue=2000},{type:SET_PROPERTY,data:_AlphaForceOpaque=1}, {type:SET_PROPERTY,data:render_type=Opaque}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=0}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:1,actions:[{type:SET_PROPERTY,data:render_queue=2450},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=.5}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:9,actions:[{type:SET_PROPERTY,data:render_queue=2460},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.01}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:2,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.002}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:3,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=1}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:4,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:5,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=4}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=4}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=4}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:6,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:7,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=3}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=3}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]} + }]}]}", Int) = 0 + [HideInInspector] m_mainCategory ("Color & Normals--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/main},hover:Documentation}}", Float) = 0 + _Color ("Color & Alpha--{reference_property:_ColorThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _ColorThemeIndex ("", Int) = 0 + [sRGBWarning(true)]_MainTex ("Texture--{reference_properties:[_MainTexPan, _MainTexUV, _MainPixelMode, _MainTexStochastic, _MainIgnoreTexAlpha]}", 2D) = "white" { } + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _MainTexUV ("UV", Int) = 0 + [HideInInspector][Vector2]_MainTexPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ToggleUI]_MainPixelMode ("Pixel Mode", Float) = 0 + [HideInInspector][ToggleUI]_MainTexStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][ToggleUI]_MainIgnoreTexAlpha ("Ignore Alpha", Float) = 0 + [Normal]_BumpMap ("Normal Map--{reference_properties:[_BumpMapPan, _BumpMapUV, _BumpScale, _BumpMapStochastic]}", 2D) = "bump" { } + [HideInInspector][Vector2]_BumpMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _BumpMapUV ("UV", Int) = 0 + [HideInInspector]_BumpScale ("Intensity", Range(0, 10)) = 1 + [HideInInspector][ToggleUI]_BumpMapStochastic ("Stochastic Sampling", Float) = 0 + [sRGBWarning]_AlphaMask ("Alpha Map--{reference_properties:[_AlphaMaskPan, _AlphaMaskUV, _AlphaMaskInvert, _MainAlphaMaskMode, _AlphaMaskBlendStrength, _AlphaMaskValue], alts:[_AlphaMap]}", 2D) = "white" { } + [HideInInspector][Vector2]_AlphaMaskPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _AlphaMaskUV ("UV", Int) = 0 + [HideInInspector][ThryWideEnum(Off, 0, Replace, 1, Multiply, 2, Add, 3, Subtract, 4)]_MainAlphaMaskMode ("Blend Mode", Int) = 2 + [HideInInspector]_AlphaMaskBlendStrength ("Blend Strength", Float) = 1 + [HideInInspector]_AlphaMaskValue ("Blend Offset", Float) = 0 + [HideInInspector][ToggleUI]_AlphaMaskInvert ("Invert", Float) = 0 + _Cutoff ("Alpha Cutoff", Range(0, 1.001)) = 0.5 + [HideInInspector] m_start_Alpha ("Alpha Options--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/alpha-options},hover:Documentation}}", Float) = 0 + [ToggleUI]_AlphaForceOpaque ("Force Opaque", Float) = 1 + _AlphaMod ("Alpha Mod", Range(-1, 1)) = 0.0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _AlphaGlobalMask ("Global Mask--{reference_property:_AlphaGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _AlphaGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] m_end_Alpha ("Alpha Options", Float) = 0 + [HideInInspector] m_lightingCategory ("Shading", Float) = 0 + [HideInInspector] m_start_PoiLightData ("Light Data--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/light-data},hover:Documentation}}", Float) = 0 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingAOMaps ("AO Maps (expand)--{reference_properties:[_LightingAOMapsPan, _LightingAOMapsUV,_LightDataAOStrengthR,_LightDataAOStrengthG,_LightDataAOStrengthB,_LightDataAOStrengthA, _LightDataAOGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingAOMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingAOMapsUV ("UV", Int) = 0 + [HideInInspector]_LightDataAOStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightDataAOStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataAOGlobalMaskR ("Global Mask--{reference_property:_LightDataAOGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataAOGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingDetailShadowMaps ("Shadow Map (expand)--{reference_properties:[_LightingDetailShadowMapsPan, _LightingDetailShadowMapsUV,_LightingDetailShadowStrengthR,_LightingDetailShadowStrengthG,_LightingDetailShadowStrengthB,_LightingDetailShadowStrengthA,_LightingAddDetailShadowStrengthR,_LightingAddDetailShadowStrengthG,_LightingAddDetailShadowStrengthB,_LightingAddDetailShadowStrengthA, _LightDataDetailShadowGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingDetailShadowMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingDetailShadowMapsUV ("UV", Int) = 0 + [HideInInspector]_LightingDetailShadowStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingDetailShadowStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthR ("Additive R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingAddDetailShadowStrengthG ("Additive G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthB ("Additive B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthA ("Additive A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataDetailShadowGlobalMaskR ("Global Mask--{reference_property:_LightDataDetailShadowGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataDetailShadowGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingShadowMasks ("Shadow Masks (expand)--{reference_properties:[_LightingShadowMasksPan, _LightingShadowMasksUV,_LightingShadowMaskStrengthR,_LightingShadowMaskStrengthG,_LightingShadowMaskStrengthB,_LightingShadowMaskStrengthA, _LightDataShadowMaskGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingShadowMasksPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingShadowMasksUV ("UV", Int) = 0 + [HideInInspector]_LightingShadowMaskStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingShadowMaskStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataShadowMaskGlobalMaskR ("Global Mask--{reference_property:_LightDataShadowMaskGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataShadowMaskGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [HideInInspector] s_start_LightDataBasePass ("Base Pass (Directional & Baked Lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [Enum(Poi Custom, 0, Standard, 1, UTS2, 2, OpenLit(lil toon), 3)] _LightingColorMode ("Light Color Mode", Int) = 0 + [Enum(Poi Custom, 0, Normalized NDotL, 1, Saturated NDotL, 2, Casted Shadows Only, 3, SDF, 4)] _LightingMapMode ("Light Map Mode", Int) = 0 + [HideInInspector] s_start_LightDataSDF ("Signed Distance fields--{persistent_expand:true,default_expand:true, condition_showS:(_LightingMapMode==4)}", Float) = 1 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, Nothing, Nothing, Linear, false)]_LightDataSDFMap ("SDF Map (expand)--{reference_properties:[_LightDataSDFMapPan, _LightDataSDFMapUV]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightDataSDFMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightDataSDFMapUV ("UV", Int) = 0 + _LightDataSDFMapLOD ("LOD", Range(0, 1)) = 0 + _LightDataSDFBlendY ("Blend Y Direction", Range(0.001, 2)) = 1 + [HideInInspector] s_end_LightDataSDF ("Signed Distance fields", Float) = 1 + [Enum(Poi Custom, 0, Forced Local Direction, 1, Forced World Direction, 2, UTS2, 3, OpenLit(lil toon), 4, View Direction, 5)] _LightingDirectionMode ("Light Direction Mode", Int) = 0 + [Vector3]_LightngForcedDirection ("Forced Direction--{condition_showS:(_LightingDirectionMode==1 || _LightingDirectionMode==2)}", Vector) = (0, 0, 0) + _LightingViewDirOffsetPitch ("View Dir Offset Pitch--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + _LightingViewDirOffsetYaw ("View Dir Offset Yaw--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + [ToggleUI]_LightingForceColorEnabled ("Force Light Color", Float) = 0 + _LightingForcedColor ("Forced Color--{condition_showS:(_LightingForceColorEnabled==1), reference_property:_LightingForcedColorThemeIndex}", Color) = (1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _LightingForcedColorThemeIndex ("", Int) = 0 + _Unlit_Intensity ("Unlit_Intensity--{condition_showS:(_LightingColorMode==2)}", Range(0.001, 4)) = 1 + [DoNotLock][ToggleUI]_LightingCapEnabled ("Limit Brightness", Float) = 1 + [DoNotLock]_LightingCap ("Max Brightness--{condition_showS:(_LightingCapEnabled==1)}", Range(0, 10)) = 1 + [DoNotLock]_LightingMinLightBrightness ("Min Brightness", Range(0, 1)) = 0 + _LightingIndirectUsesNormals ("Indirect Uses Normals--{condition_showS:(_LightingColorMode==0)}", Range(0, 1)) = 0 + _LightingCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 0 + [DoNotLock]_LightingMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + [ToggleUI]_LightingVertexLightingEnabled ("Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingMirrorVertexLightingEnabled ("Mirror Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingEnableLightVolumes ("Light Volumes", Float) = 1 + [HideInInspector] s_end_LightDataBasePass ("Base Pass", Float) = 1 + [HideInInspector] s_start_LightDataAddPass ("Add Pass (Point & Spot lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [ToggleUI]_LightingAdditiveEnable ("Pixel lights (Important)", Float) = 1 + [ToggleUI]_DisableDirectionalInAdd ("Ignore Directional Lights--{condition_showS:(_LightingAdditiveEnable==1)}", Float) = 1 + [ToggleUI]_LightingAdditiveLimited ("Limit Brightness", Float) = 1 + _LightingAdditiveLimit ("Max Brightness--{condition_showS:(_LightingAdditiveLimited==1)}", Range(0, 10)) = 1 + _LightingAdditiveCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 1 + _LightingAdditiveMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + _LightingAdditivePassthrough ("Point Light Passthrough--{condition_showS:(_LightingAdditiveEnable==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_LightDataAddPass ("Add Pass", Float) = 1 + [HideInInspector] s_start_LightDataDebug ("Debug / Data Visualizations--{reference_property:_LightDataDebugEnabled,persistent_expand:true}", Float) = 0 + [HideInInspector][DoNotAnimate][ThryToggleUI(false)]_LightDataDebugEnabled ("Debug", Float) = 0 + [ThryWideEnum(Direct Color, 0, Indirect Color, 1, Light Map, 2, Attenuation, 3, N Dot L, 4, Half Dir, 5, Direction, 6, Add Color, 7, Add Attenuation, 8, Add Shadow, 9, Add N Dot L, 10)] _LightingDebugVisualize ("Visualize", Int) = 0 + [HideInInspector] s_end_LightDataDebug ("Debug", Float) = 0 + [HideInInspector] m_end_PoiLightData ("Light Data", Float) = 0 + [HideInInspector] m_start_bakedLighting ("Baked Lighting", Float) = 0 + _GIEmissionMultiplier ("GI Emission Multiplier", Float) = 1 + [HideInInspector] DSGI ("DSGI", Float) = 0 //add this property for double sided illumination settings to be shown + [HideInInspector] LightmapFlags ("Lightmap Flags", Float) = 0 //add this property for lightmap flags settings to be shown + [HideInInspector] m_end_bakedLighting ("Baked Lighting", Float) = 0 + [HideInInspector] m_start_PoiShading (" Shading--{reference_property:_ShadingEnabled,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/main},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(VIGNETTE_MASKED)]_ShadingEnabled ("Enable Shading", Float) = 1 + [DoNotAnimate][KeywordEnum(TextureRamp, Multilayer Math, Wrapped, Skin, ShadeMap, Flat, Realistic, Cloth, SDF)] _LightingMode ("Lighting Type", Float) = 5 + _LightingShadowColor ("Shadow Tint--{condition_showS:(_LightingMode!=4 && _LightingMode!=1 && _LightingMode!=5)}", Color) = (1, 1, 1) + _ShadowStrength ("Shadow Strength--{condition_showS:(_LightingMode<=4 || _LightingMode==8)}", Range(0, 1)) = 1 + _LightingIgnoreAmbientColor ("Ignore Indirect Shadow Color--{condition_showS:(_LightingMode<=3 || _LightingMode==8)}", Range(0, 1)) = 1 + [Space(15)] + [HideInInspector] s_start_ShadingAddPass ("Add Pass (Point & Spot Lights)--{persistent_expand:true,default_expand:false}", Float) = 0 + [Enum(Realistic, 0, Toon, 1, Same as Base Pass, 3)] _LightingAdditiveType ("Lighting Type", Int) = 3 + _LightingAdditiveGradientStart ("Gradient Start--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = 0 + _LightingAdditiveGradientEnd ("Gradient End--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_ShadingAddPass ("Add Pass", Float) = 0 + [HideInInspector] s_start_ShadingGlobalMask ("Global Masks--{persistent_expand:true,default_expand:false}", Float) = 0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapApplyGlobalMaskIndex ("LightMap to Global Mask--{reference_property:_ShadingRampedLightMapApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapApplyGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapInverseApplyGlobalMaskIndex ("Inversed LightMap to Global Mask--{reference_property:_ShadingRampedLightMapInverseApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapInverseApplyGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] s_end_ShadingGlobalMask ("Global Masks", Float) = 0 + [HideInInspector] m_end_PoiShading ("Shading", Float) = 0 + [HideInInspector] m_start_brdf (" Reflections & Specular--{reference_property:_MochieBRDF,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/reflections-and-specular},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(MOCHIE_PBR)]_MochieBRDF ("Enable", Float) = 0 + _MochieMetallicMultiplier ("Metallic", Range(0, 1)) = 0 + _MochieRoughnessMultiplier ("Smoothness", Range(0, 1)) = 1 + _MochieReflectionTint ("Reflection Tint--{reference_property:_MochieReflectionTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _MochieReflectionTintThemeIndex ("", Int) = 0 + _MochieSpecularTint ("Specular Tint--{reference_property:_MochieSpecularTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _MochieSpecularTintThemeIndex ("", Int) = 0 + [sRGBWarning][ThryRGBAPacker(R Metallic Map, G Smoothness Map, B Reflection Mask, A Specular Mask, linear, false)]_MochieMetallicMaps ("Packed Maps [Click to Expand]--{reference_properties:[_MochieMetallicMapsPan, _MochieMetallicMapsUV, _MochieMetallicMapsStochastic, _MochieMetallicMapsMetallicChannel, _MochieMetallicMapsRoughnessChannel, _MochieMetallicMapsReflectionMaskChannel, _MochieMetallicMapsSpecularMaskChannel, _MochieMetallicMapInvert, _MochieRoughnessMapInvert, _MochieReflectionMaskInvert, _MochieSpecularMaskInvert]}", 2D) = "white" { } + [HideInInspector][Vector2]_MochieMetallicMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)]_MochieMetallicMapsUV ("UV", Int) = 0 + [HideInInspector][ToggleUI]_MochieMetallicMapsStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsMetallicChannel ("Metallic Channel", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsRoughnessChannel ("Smoothness Channel", Float) = 1 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsReflectionMaskChannel ("Reflection Mask Channel", Float) = 2 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsSpecularMaskChannel ("Specular Mask Channel", Float) = 3 + [HideInInspector][ToggleUI]_MochieMetallicMapInvert ("Invert Metallic", Float) = 0 + [HideInInspector][ToggleUI]_MochieRoughnessMapInvert ("Invert Smoothness", Float) = 0 + [HideInInspector][ToggleUI]_MochieReflectionMaskInvert ("Invert Reflection Mask", Float) = 0 + [HideInInspector][ToggleUI]_MochieSpecularMaskInvert ("Invert Specular Mask", Float) = 0 + [Space(10)] + _MochieReflectionStrength ("Reflection Visibility", Range(0, 1)) = 1 + _MochieSpecularStrength ("Specular Visibility", Range(0, 5)) = 1 + _RefSpecFresnelStrength ("Fresnel Strength", Range(0, 1)) = .5 + _SFExposureOcclusion ("Exposure Occlusion", Range(0, 1)) = 0 + [Space(10)] + [ThryTexture][NoScaleOffset]_MochieReflCube ("Cubemap", Cube) = "" { } + [ToggleUI]_MochieForceFallback ("Force Fallback", Int) = 0 + [HideInInspector] s_start_BRDFTPSMaskGroup ("TPS--{condition_showS:(_TPSPenetratorEnabled==1)}", Float) = 0 + [ThryToggleUI(true)] _BRDFTPSDepthEnabled (" TPS Depth Enabled", Float) = 0 + _BRDFTPSReflectionMaskStrength ("Reflection Mask Strength--{condition_showS:(_BRDFTPSDepthEnabled==1)}", Range(0, 1)) = 1 + _BRDFTPSSpecularMaskStrength ("Specular Mask Strength--{condition_showS:(_BRDFTPSDepthEnabled==1)}", Range(0, 1)) = 1 + [HideInInspector] s_end_BRDFTPSMaskGroup ("", Float) = 0 + [HideInInspector] s_start_ggxanisotropics(" Anisotropics--{reference_property:_GGXAnisotropics,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ThryToggle(GGX_ANISOTROPICS)]_GGXAnisotropics ("Enable", Float) = 0 + [sRGBWarning]_AnisotropyMap("Anisotropy Map--{reference_properties:[_AnisotropyMapPan, _AnisotropyMapUV, _AnisotropyMapChannel]}", 2D) = "bump" { } + [HideInInspector][Vector2]_AnisotropyMapPan("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _AnisotropyMapUV ("UV", Int) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3)]_AnisotropyMapChannel ("Channel", Float) = 0 + _Anisotropy ("Anisotropy", Range(-1, 1)) = 0 + _ReflectionAnisotropicStretch("Reflection Stretch", Range(1, 5)) = 1 + _RoughnessAnisotropy("Roughness Anisotropy", Range(0, 1)) = 1 + [HideInInspector] s_end_ggxanisotropics ("", Float) = 0 + [HideInInspector] s_start_PBRSecondSpecular ("2nd Specular--{reference_property:_Specular2ndLayer,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_Specular2ndLayer ("2nd Specular", Float) = 0 + _MochieSpecularStrength2 ("Visibility", Range(0, 5)) = 1 + _MochieRoughnessMultiplier2 ("Smoothness", Range(0, 1)) = 1 + [HideInInspector] s_end_PBRSecondSpecular ("Name", Float) = 0 + [HideInInspector] s_start_PBRSplitMaskSample ("Split Mask Sampling--{reference_property:_PBRSplitMaskSample,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_PBRSplitMaskSample ("Split Mask Sampling", Float) = 0 + [VectorLabel(tX, tY, oX, oY)]_PBRMaskScaleTiling ("Tiling/Offset", Vector) = (1, 1, 0, 0) + [ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)]_MochieMetallicMasksUV ("UV", Int) = 0 + [ToggleUI]_PBRSplitMaskStochastic ("Stochastic Sampling", Float) = 0 + [Vector2]_MochieMetallicMasksPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector] s_end_PBRSplitMaskSample ("Split Mask Sampling", Float) = 0 + [HideInInspector] s_start_brdfadvanced ("GSAA & Advanced Controls--{persistent_expand:true,default_expand:false}", Float) = 0 + [ToggleUI]_MochieLitFallback ("Lit Fallback", Float) = 1 + [ToggleUI]_IgnoreCastedShadows ("Ignore Casted Shadows", Float) = 0 + _PBRNormalSelect ("Pixel Normal Mix", Range(0, 1)) = 1 + [ThryToggleUI(true)]_MochieGSAAEnabled (" GSAA", Float) = 1 + _PoiGSAAVariance ("GSAA Variance--{condition_showS:(_MochieGSAAEnabled==1)}", Range(0, 1)) = 0.15 + _PoiGSAAThreshold ("GSAA Threshold--{condition_showS:(_MochieGSAAEnabled==1)}", Range(0, 1)) = 0.1 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieMetallicGlobalMask ("Metallic--{reference_property:_MochieMetallicGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieMetallicGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieSmoothnessGlobalMask ("Smoothness--{reference_property:_MochieSmoothnessGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieSmoothnessGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieReflectionStrengthGlobalMask ("Reflection Strength--{reference_property:_MochieReflectionStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieReflectionStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieSpecularStrengthGlobalMask ("Specular Strength--{reference_property:_MochieSpecularStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieSpecularStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] s_end_brdfadvanced ("", Float) = 0 + [HideInInspector] m_end_brdf ("", Float) = 0 + [HideInInspector] m_start_clearCoat (" Clear Coat--{reference_property:_ClearCoatBRDF,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/clear-coat},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(POI_CLEARCOAT)]_ClearCoatBRDF ("Enable", Float) = 0 + _ClearCoatStrength ("ClearCoat Visibility", Range(0, 1)) = 1 + _ClearCoatSmoothness ("Smoothness", Range(0, 1)) = 1 + _ClearCoatReflectionStrength ("Reflections Visibility", Range(0, 1)) = 1 + _ClearCoatSpecularStrength ("Specular Visibility", Range(0, 1)) = 1 + _ClearcoatFresnelStrength ("Fresnel Strength", Range(0, 1)) = .5 + _ClearcoatExposureOcclusion ("Exposure Occlusion", Range(0, 1)) = 0 + _ClearCoatReflectionTint ("Reflection Tint--{reference_property:_ClearCoatReflectionTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _ClearCoatReflectionTintThemeIndex ("", Int) = 0 + _ClearCoatSpecularTint ("Specular Tint--{reference_property:_ClearCoatSpecularTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _ClearCoatSpecularTintThemeIndex ("", Int) = 0 + [Space(8)] + [sRGBWarning][ThryRGBAPacker(ClearCoat Mask, Smoothness Map, Reflection Mask, Specular Mask, linear, false)]_ClearCoatMaps ("Packed Maps [Click to Expand]--{reference_properties:[_ClearCoatMapsPan, _ClearCoatMapsUV, _ClearCoatMapsStochastic, _ClearCoatMapsClearCoatMaskChannel, _ClearCoatMapsRoughnessChannel, _ClearCoatMapsReflectionMaskChannel, _ClearCoatMapsSpecularMaskChannel, _ClearCoatMaskInvert, _ClearCoatSmoothnessMapInvert, _ClearCoatReflectionMaskInvert, _ClearCoatSpecularMaskInvert]}", 2D) = "white" { } + [HideInInspector][Vector2]_ClearCoatMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)]_ClearCoatMapsUV ("UV", Int) = 0 + [HideInInspector][ToggleUI]_ClearCoatMapsStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_ClearCoatMapsClearCoatMaskChannel ("ClearCoat Mask Channel", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_ClearCoatMapsRoughnessChannel ("Smoothness Channel", Float) = 1 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_ClearCoatMapsReflectionMaskChannel ("Reflection Mask Channel", Float) = 2 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_ClearCoatMapsSpecularMaskChannel ("Specular Mask Channel", Float) = 3 + [HideInInspector][ToggleUI]_ClearCoatMaskInvert ("Invert ClearCoat Mask", Float) = 0 + [HideInInspector][ToggleUI]_ClearCoatSmoothnessMapInvert ("Invert Smoothness", Float) = 0 + [HideInInspector][ToggleUI]_ClearCoatReflectionMaskInvert ("Invert Reflection Mask", Float) = 0 + [HideInInspector][ToggleUI]_ClearCoatSpecularMaskInvert ("Invert Specular Mask", Float) = 0 + [Space(4)] + [ThryTexture][NoScaleOffset]_ClearCoatFallback ("Fallback Cubemap", Cube) = "" { } + [ToggleUI]_ClearCoatForceFallback ("Force Fallback", Int) = 0 + [HideInInspector] m_start_clearcoatadvanced ("Advanced", Float) = 0 + [ToggleUI]_ClearCoatLitFallback ("Lit Fallback", Float) = 1 + [ToggleUI]_CCIgnoreCastedShadows ("Ignore Casted Shadows", Float) = 0 + _ClearCoatNormalSelect ("Pixel Normal Mix", Range(0, 1)) = 0 + [ThryToggleUI(true)]_ClearCoatGSAAEnabled (" GSAA", Float) = 1 + _ClearCoatGSAAVariance ("GSAA Variance", Range(0, 1)) = 0.15 + _ClearCoatGSAAThreshold ("GSAA Threshold", Range(0, 1)) = 0.1 + [HideInInspector] s_start_ClearCoatTPSMaskGroup ("TPS Mask--{reference_property:_ClearCoatTPSDepthMaskEnabled, persistent_expand:true,default_expand:false,condition_showS:(_TPSPenetratorEnabled==1)}", Float) = 0 + [HideInInspector][ToggleUI] _ClearCoatTPSDepthMaskEnabled ("TPS Depth Enabled", Float) = 0 + _ClearCoatTPSMaskStrength ("Mask Strength}", Range(0, 1)) = 1 + [HideInInspector] s_end_ClearCoatTPSMaskGroup ("", Float) = 0 + [HideInInspector] m_end_clearcoatadvanced ("", Float) = 0 + [HideInInspector] m_start_clearcoatglobalmask ("Global Mask", Float) = 0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ClearCoatGlobalMask ("ClearCoat--{reference_property:_ClearCoatGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ClearCoatGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ClearCoatSmoothnessGlobalMask ("Smoothness--{reference_property:_ClearCoatSmoothnessGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ClearCoatSmoothnessGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ClearCoatReflectionStrengthGlobalMask ("Reflection Strength--{reference_property:_ClearCoatReflectionStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ClearCoatReflectionStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ClearCoatSpecularStrengthGlobalMask ("Specular Strength--{reference_property:_ClearCoatSpecularStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ClearCoatSpecularStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] m_end_clearcoatglobalmask ("", Float) = 0 + [HideInInspector] m_end_clearCoat ("", Float) = 0 + [HideInInspector] m_OutlineCategory (" Outlines--{reference_property:_EnableOutlines,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/outlines/main},hover:Documentation}}", Float) = 0 + [HideInInspector] m_specialFXCategory ("Special FX", Float) = 0 + [HideInInspector] m_start_emissionOptions (" Emission 0--{reference_property:_EnableEmission,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/special-fx/emission},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(_EMISSION)] + _EnableEmission ("Enable Emission 0", Float) = 0 + [sRGBWarning]_EmissionMask ("Emission Mask--{reference_properties:[_EmissionMaskPan, _EmissionMaskUV, _EmissionMaskChannel, _EmissionMaskInvert, _EmissionMask0GlobalMask]}", 2D) = "white" { } + [HideInInspector][Vector2]_EmissionMaskPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _EmissionMaskUV ("UV", Int) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3)]_EmissionMaskChannel ("Channel", Float) = 0 + [HideInInspector][ToggleUI]_EmissionMaskInvert ("Invert", Float) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _EmissionMask0GlobalMask ("Global Mask--{reference_property:_EmissionMask0GlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)]_EmissionMask0GlobalMaskBlendType ("Blending", Range(0, 1)) = 2 + [HDR]_EmissionColor ("Emission Color--{reference_property:_EmissionColorThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _EmissionColorThemeIndex ("", Int) = 0 + [sRGBWarning(true)][Gradient]_EmissionMap ("Emission Map--{reference_properties:[_EmissionMapPan, _EmissionMapUV]}", 2D) = "white" { } + [HideInInspector][Vector2]_EmissionMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _EmissionMapUV ("UV", Int) = 0 + _EmissionStrength ("Emission Strength", Range(0, 20)) = 0 + [ToggleUI]_EmissionBaseColorAsMap ("Use Base Colors", Float) = 0 + [ToggleUI]_EmissionReplace0 ("Override Base Color", Float) = 0 + _EmissionFluorescence ("Fluorescence", Range(0, 1)) = 0 + [HideInInspector] s_start_EmissionHueShift0 ("Color Adjust--{reference_property:_EmissionHueShiftEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionHueShiftEnabled ("Hue Shift", Float) = 0 + [ThryWideEnum(OKLab, 0, HSV, 1)] _EmissionHueShiftColorSpace ("Color Space", Int) = 0 + [ThryWideEnum(Hue Select, 0, Hue Shift, 1)] _EmissionHueSelectOrShift ("Select or Shift", Int) = 1 + _EmissionSaturation ("Saturation", Range(-1, 10)) = 0 + _EmissionHueShift ("Hue Shift", Range(0, 1)) = 0 + _EmissionHueShiftSpeed ("Hue Shift Speed", Float) = 0 + [HideInInspector] s_end_EmissionHueShift0 ("", Float) = 0 + [HideInInspector] s_start_EmissionCenterOut0 ("Center Out--{reference_property:_EmissionCenterOutEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionCenterOutEnabled ("Center Out", Float) = 0 + _EmissionCenterOutSpeed ("Flow Speed", Float) = 5 + [HideInInspector] s_end_EmissionCenterOut0 ("", Float) = 0 + [HideInInspector] s_start_EmissionLightBased0 ("Light Based--{reference_property:_EnableGITDEmission,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EnableGITDEmission ("Light Based", Float) = 0 + [Enum(World, 0, Mesh, 1)] _GITDEWorldOrMesh ("Lighting Type", Int) = 0 + _GITDEMinEmissionMultiplier ("Min Emission Multiplier", Range(0, 1)) = 1 + _GITDEMaxEmissionMultiplier ("Max Emission Multiplier", Range(0, 1)) = 0 + _GITDEMinLight ("Min Lighting", Range(0, 1)) = 0 + _GITDEMaxLight ("Max Lighting", Range(0, 1)) = 1 + [HideInInspector] s_end_EmissionLightBased0 ("", Float) = 0 + [HideInInspector] s_start_EmissionBlinking0 ("Blinking--{reference_property:_EmissionBlinkingEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionBlinkingEnabled ("Blinking", Float) = 0 + _EmissiveBlink_Min ("Emissive Blink Min", Float) = 0 + _EmissiveBlink_Max ("Emissive Blink Max", Float) = 1 + _EmissiveBlink_Velocity ("Emissive Blink Velocity", Float) = 4 + _EmissionBlinkingOffset ("Offset", Float) = 0 + [HideInInspector] s_end_EmissionBlinking0 ("", Float) = 0 + [HideInInspector] s_start_ScrollingEmission0 ("Scrolling--{reference_property:_ScrollingEmission,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI] _ScrollingEmission ("Scrolling", Float) = 0 + [ToggleUI]_EmissionScrollingUseCurve ("Use Curve", float) = 0 + [Curve]_EmissionScrollingCurve ("Curve--{condition_showS:(_EmissionScrollingUseCurve==1)}", 2D) = "white" { } + [ToggleUI]_EmissionScrollingVertexColor ("VColor as position", float) = 0 + _EmissiveScroll_Direction ("Direction", Vector) = (0, -10, 0, 0) + _EmissiveScroll_Width ("Width", Float) = 10 + _EmissiveScroll_Velocity ("Velocity", Float) = 10 + _EmissiveScroll_Interval ("Interval", Float) = 20 + _EmissionScrollingOffset ("Offset", Float) = 0 + [HideInInspector] s_end_ScrollingEmission0 ("", Float) = 0 + [Space(4)] + [ThryToggleUI(true)] _EmissionAL0Enabled (" Audio Link--{ condition_showS:_EnableAudioLink==1}", Float) = 0 + [HideInInspector] s_start_EmissionAL0Multiply ("Strength Multiply--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _EmissionAL0MultipliersBand ("Band", Int) = 0 + [VectorLabel(Min, Max)]_EmissionAL0Multipliers ("Multiplier", Vector) = (1, 1, 0, 0) + [HideInInspector] s_end_EmissionAL0Multiply ("Strength Multiply", Float) = 0 + [HideInInspector] s_start_EmissionAL0Add ("Strength Add--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _EmissionAL0StrengthBand ("Band", Int) = 0 + [VectorLabel(Min, Max)]_EmissionAL0StrengthMod ("Strength", Vector) = (0, 0, 0, 0) + [HideInInspector] s_end_EmissionAL0Add ("Strength Add", Float) = 0 + [HideInInspector] s_start_EmissionAL0COut ("Center Out--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _AudioLinkEmission0CenterOutBand ("Band", Int) = 0 + [VectorLabel(Min, Max)] _AudioLinkEmission0CenterOut ("Strength", Vector) = (0, 0, 0, 0) + _AudioLinkEmission0CenterOutSize ("Intensity Threshold", Range(0, 1)) = 0 + _AudioLinkEmission0CenterOutDuration ("Duration", Range(-1, 1)) = 1 + [HideInInspector] s_end_EmissionAL0COut ("Center Out", Float) = 0 + [HideInInspector] m_end_emissionOptions ("", Float) = 0 + [HideInInspector] m_vertexCategory ("Vertex Options", Float) = 0 + [HideInInspector] m_start_Uzumore (" View Clip Prevention (Uzumore)--{reference_property:_UzumoreCategoryToggle,button_author:{text:sigmal00,action:{type:URL,data:https://github.com/sigmal00},hover:GitHub}}, button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/vertex-options/view-clip-prevention},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(POI_UZUMORE)] _UzumoreCategoryToggle (" View Clip Prevention (Uzumore)", Float) = 0 + [ToggleUI] _UzumoreEnabled ("Animation Toggle", Float) = 1 + _UzumoreAmount ("Push Amount (m)", Float) = 0.1 + _UzumoreBias ("Push Bias", Float) = 0.001 + [sRGBWarning]_UzumoreMask ("Push Mask (A)", 2D) = "white" { } + [ThryWideEnum(R, 0, G, 1, B, 2, A, 3)] _UzumoreMaskUV ("Push Mask Channel", Float) = 3 + [HideInInspector] m_end_Uzumore ("Camera Push Back", Float) = 0 + [HideInInspector] m_modifierCategory ("Global Modifiers & Data", Float) = 0 + [HideInInspector] m_start_PoiGlobalCategory ("Global Data and Masks", Float) = 0 + [HideInInspector] m_start_GlobalThemes ("Global Themes--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/global-themes},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HDR]_GlobalThemeColor0 ("Theme Color 0", Color ) = (1, 1, 1, 1) + _GlobalThemeHue0 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed0 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation0 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue0 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HDR]_GlobalThemeColor1 ("Theme Color 1", Color ) = (1, 1, 1, 1) + _GlobalThemeHue1 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed1 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation1 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue1 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HDR]_GlobalThemeColor2 ("Theme Color 2", Color ) = (1, 1, 1, 1) + _GlobalThemeHue2 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed2 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation2 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue2 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HDR]_GlobalThemeColor3 ("Theme Color 3", Color ) = (1, 1, 1, 1) + _GlobalThemeHue3 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed3 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation3 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue3 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HideInInspector] m_end_GlobalThemes ("Global Themes", Float ) = 0 + [HideInInspector] m_start_GlobalMask ("Global Mask--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/global-masks},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalMaskModifiers ("Modifiers", Float) = 0 + [HideInInspector] m_end_GlobalMaskModifiers ("", Float) = 0 + [HideInInspector] m_end_GlobalMask ("Global Mask", Float) = 0 + [HideInInspector] m_end_PoiGlobalCategory ("Global Data and Masks ", Float) = 0 + [HideInInspector] m_start_PoiUVCategory ("UVs", Float) = 0 + [HideInInspector] m_start_Stochastic ("Stochastic Sampling--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/stochastic-sampling},hover:Documentation}}", Float) = 0 + [KeywordEnum(Deliot Heitz, Hextile, None)] _StochasticMode ("Sampling Mode", Float) = 0 + [HideInInspector] s_start_deliot ("Deliot Heitz--{persistent_expand:true,default_expand:false,condition_show:_StochasticMode==0}", Float) = 0 + _StochasticDeliotHeitzDensity ("Detiling Density", Range(0.1, 10)) = 1 + [HideInInspector] s_end_deliot ("Deliot Heitz", Float) = 0 + [HideInInspector] m_end_Stochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector] m_start_uvLocalWorld ("Local World UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/local-world-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos0 ("Local X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos1 ("Local Y", Int) = 1 + [Space(10)] + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos0 ("World X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos1 ("World Y", Int) = 2 + [HideInInspector] m_end_uvLocalWorld ("Local World UV", Float) = 0 + [HideInInspector] m_start_uvPanosphere ("Panosphere UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/panosphere-uv},hover:Documentation}}", Float) = 0 + [ToggleUI] _StereoEnabled ("Stereo Enabled", Float) = 0 + [ToggleUI] _PanoUseBothEyes ("Perspective Correct (VR)", Float) = 1 + [HideInInspector] m_end_uvPanosphere ("Panosphere UV", Float) = 0 + [HideInInspector] m_start_uvPolar ("Polar UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/polar-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8)] _PolarUV ("UV", Int) = 0 + [Vector2]_PolarCenter ("Center Coordinate", Vector) = (.5, .5, 0, 0) + _PolarRadialScale ("Radial Scale", Float) = 1 + _PolarLengthScale ("Length Scale", Float) = 1 + _PolarSpiralPower ("Spiral Power", Float) = 0 + [HideInInspector] m_end_uvPolar ("Polar UV", Float) = 0 + [HideInInspector] m_end_PoiUVCategory ("UVs ", Float) = 0 + [HideInInspector] m_start_PoiPostProcessingCategory ("Post Processing", Float) = 0 + [HideInInspector] m_start_PPAnimations ("PP Animations--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/post-processing/pp-animations},hover:Documentation}}", Float) = 0 + [Helpbox(1)] _PPHelp ("This section meant for real time adjustments through animations and not to be changed in unity", Int) = 0 + _PPLightingMultiplier ("Lighting Mulitplier", Float) = 1 + _PPLightingAddition ("Lighting Add", Float) = 0 + _PPEmissionMultiplier ("Emission Multiplier", Float) = 1 + _PPFinalColorMultiplier ("Final Color Multiplier", Float) = 1 + [HideInInspector] m_end_PPAnimations ("PP Animations ", Float) = 0 + [HideInInspector] m_end_PoiPostProcessingCategory ("Post Processing ", Float) = 0 + [HideInInspector] m_thirdpartyCategory ("Third Party", Float) = 0 + [HideInInspector] m_renderingCategory ("Rendering--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/main},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.CullMode)] _Cull ("Cull", Float) = 2 + [DoNotAnimate][Enum(UnityEngine.Rendering.CompareFunction)] _ZTest ("ZTest", Float) = 4 + [DoNotAnimate][Enum(Off, 0, On, 1)] _ZWrite ("ZWrite", Int) = 1 + [DoNotAnimate][ThryMask(Thry.ColorMaskFlags)] _ColorMask ("Color Mask", Int) = 15 + [DoNotAnimate] _OffsetFactor ("Offset Factor", Float) = 0.0 + [DoNotAnimate] _OffsetUnits ("Offset Units", Float) = 0.0 + [DoNotAnimate][ToggleUI] _RenderingReduceClipDistance ("Reduce Clip Distance", Float) = 0 + [DoNotAnimate][ToggleUI] _ZClip ("Z Clip", Float) = 1 + [DoNotAnimate][ToggleUI] _IgnoreFog ("Ignore Fog", Float) = 0 + [DoNotAnimate][ToggleUI]_FlipBackfaceNormals ("Flip Backface Normals", Int) = 1 + [DoNotAnimate][HideInInspector] Instancing ("Instancing", Float) = 0 //add this property for instancing variants settings to be shown + [ToggleUI] _RenderingEarlyZEnabled ("Early Z", Float) = 0 + [HideInInspector] m_start_blending ("Blending--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/blending},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOp ("RGB Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlend ("RGB Destination Blend", Int) = 0 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOp ("RGB Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlend ("RGB Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_start_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOpAlpha ("Alpha Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlendAlpha ("Alpha Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlendAlpha ("Alpha Destination Blend", Int) = 10 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOpAlpha ("Alpha Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlendAlpha ("Alpha Source Blend", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlendAlpha ("Alpha Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_end_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [HideInInspector] m_end_blending ("Blending", Float) = 0 + [HideInInspector] m_start_StencilPassOptions ("Stencil--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/stencil},hover:Documentation}}", Float) = 0 + [ThryWideEnum(Simple, 0, Front Face vs Back Face, 1)] _StencilType ("Stencil Type", Float) = 0 + [IntRange] _StencilRef ("Stencil Reference Value", Range(0, 255)) = 0 + [IntRange] _StencilReadMask ("Stencil ReadMask Value", Range(0, 255)) = 255 + [IntRange] _StencilWriteMask ("Stencil WriteMask Value", Range(0, 255)) = 255 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilPassOp ("Stencil Pass Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFailOp ("Stencil Fail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilZFailOp ("Stencil ZFail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilCompareFunction ("Stencil Compare Function--{condition_showS:(_StencilType==0)}", Float) = 8 + [HideInInspector] m_start_StencilPassBackOptions("Back--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp0 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackPassOp ("Back Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackFailOp ("Back Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackZFailOp ("Back ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilBackCompareFunction ("Back Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassBackOptions("Back", Float) = 0 + [HideInInspector] m_start_StencilPassFrontOptions("Front--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp1 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontPassOp ("Front Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontFailOp ("Front Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontZFailOp ("Front ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilFrontCompareFunction ("Front Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassFrontOptions("Front", Float) = 0 + [HideInInspector] m_end_StencilPassOptions ("Stencil", Float) = 0 + } + SubShader + { + Tags { "RenderType" = "Opaque" "Queue" = "Geometry" "VRCFallback" = "Standard" } + Pass + { + Name "Base" + Tags { "LightMode" = "ForwardBase" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Back + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define POI_CLEARCOAT + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_EMISSIONMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdbase + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #pragma multi_compile_fragment _ VERTEXLIGHT_ON + #define POI_PASS_BASE + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + #ifndef VRC_LIGHT_VOLUMES_INCLUDED + #define VRC_LIGHT_VOLUMES_INCLUDED + #define VRCLV_VERSION 2 + #define VRCLV_MAX_VOLUMES_COUNT 32 + #define VRCLV_MAX_LIGHTS_COUNT 128 + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + cbuffer LightVolumeUniforms { + #endif + uniform float _UdonLightVolumeEnabled; + uniform float _UdonLightVolumeVersion; + uniform float _UdonLightVolumeCount; + uniform float _UdonLightVolumeAdditiveMaxOverdraw; + uniform float _UdonLightVolumeAdditiveCount; + uniform float _UdonLightVolumeProbesBlend; + uniform float _UdonLightVolumeSharpBounds; + uniform float4x4 _UdonLightVolumeInvWorldMatrix[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeRotation[VRCLV_MAX_VOLUMES_COUNT * 2]; // Legacy! Used in this version to have back compatibility with older worlds. Array commented above will be used in future releases! Legacy! + uniform float3 _UdonLightVolumeInvLocalEdgeSmooth[VRCLV_MAX_VOLUMES_COUNT]; + uniform float3 _UdonLightVolumeUvw[VRCLV_MAX_VOLUMES_COUNT * 6]; // Legacy! AABB Bounds of islands on the 3D Texture atlas. Array commented above will be used in future releases! Legacy! + uniform float4 _UdonLightVolumeOcclusionUvw[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeColor[VRCLV_MAX_VOLUMES_COUNT]; + uniform float _UdonPointLightVolumeCount; + uniform float _UdonPointLightVolumeCubeCount; + uniform float4 _UdonPointLightVolumePosition[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeColor[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeDirection[VRCLV_MAX_LIGHTS_COUNT]; + uniform float3 _UdonPointLightVolumeCustomID[VRCLV_MAX_LIGHTS_COUNT]; + uniform float _UdonLightBrightnessCutoff; + uniform float _UdonLightVolumeOcclusionCount; + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + } + #endif + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + uniform Texture3D _UdonLightVolume; + uniform SamplerState sampler_UdonLightVolume; + uniform Texture2DArray _UdonPointLightVolumeTexture; + #define LV_SAMPLE(tex, uvw) tex.SampleLevel(sampler_UdonLightVolume, uvw, 0) + #else + #define LV_SAMPLE(tex, uvw) float4(0,0,0,0) + #endif + #define LV_PI 3.141592653589793f + #define LV_PI2 6.283185307179586f + float LV_Smoothstep01(float x) { + return x * x * (3 - 2 * x); + } + float3 LV_MultiplyVectorByQuaternion(float3 v, float4 q) { + float3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); + } + float3 LV_MultiplyVectorByMatrix2x3(float3 v, float3 r0, float3 r1) { + float3 r2 = cross(r0, r1); + return float3(dot(v, r0), dot(v, r1), dot(v, r2)); + } + float LV_FastAcos(float x) { + float absX = abs(x); + float res = -0.156583f * absX + LV_PI * 0.5f; + res *= sqrt(1.0f - absX); + return (x >= 0) ? res : (LV_PI - res); + } + float LV_DistributionGGX(float NoH, float roughness) { + float f = (roughness - 1) * ((roughness + 1) * (NoH * NoH)) + 1; + return (roughness * roughness) / ((float) LV_PI * f * f); + } + bool LV_PointLocalAABB(float3 localUVW) { + return all(abs(localUVW) <= 0.5); + } + float3 LV_LocalFromVolume(uint volumeID, float3 worldPos) { + return mul(_UdonLightVolumeInvWorldMatrix[volumeID], float4(worldPos, 1.0)).xyz; + } + float LV_EvaluateSH(float L0, float3 L1, float3 n) { + return L0 + dot(L1, n); + } + float4 LV_SampleCubemapArray(uint id, float3 dir) { + float3 absDir = abs(dir); + float2 uv; + uint face; + if (absDir.x >= absDir.y && absDir.x >= absDir.z) { + face = dir.x > 0 ? 0 : 1; + uv = float2((dir.x > 0 ? -dir.z : dir.z), -dir.y) * rcp(absDir.x); + } else if (absDir.y >= absDir.z) { + face = dir.y > 0 ? 2 : 3; + uv = float2(dir.x, (dir.y > 0 ? dir.z : -dir.z)) * rcp(absDir.y); + } else { + face = dir.z > 0 ? 4 : 5; + uv = float2((dir.z > 0 ? dir.x : -dir.x), -dir.y) * rcp(absDir.z); + } + float3 uvid = float3(uv * 0.5 + 0.5, id * 6 + face); + return LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + } + float4 LV_ProjectQuadLightIrradianceSH(float3 shadingPosition, float3 lightVertices[4]) { + [unroll] for (uint edge0 = 0; edge0 < 4; edge0++) { + lightVertices[edge0] = normalize(lightVertices[edge0] - shadingPosition); + } + const float3 zhDir0 = float3(0.866025, -0.500001, -0.000004); + const float3 zhDir1 = float3(-0.759553, 0.438522, -0.480394); + const float3 zhDir2 = float3(-0.000002, 0.638694, 0.769461); + const float3 zhWeightL1y = float3(2.1995339f, 2.50785367f, 1.56572711f); + const float3 zhWeightL1z = float3(-1.82572523f, -2.08165037f, 0.00000000f); + const float3 zhWeightL1x = float3(2.42459869f, 1.44790525f, 0.90397552f); + float solidAngle = 0.0; + float3 surfaceIntegral = 0.0; + [loop] for (uint edge1 = 0; edge1 < 4; edge1++) { + uint next = (edge1 + 1) % 4; + uint prev = (edge1 + 4 - 1) % 4; + float3 prevVert = lightVertices[prev]; + float3 thisVert = lightVertices[edge1]; + float3 nextVert = lightVertices[next]; + float3 a = cross(thisVert, prevVert); + float3 b = cross(thisVert, nextVert); + float lenA = length(a); + float lenB = length(b); + solidAngle += LV_FastAcos(clamp(dot(a, b) / (lenA * lenB), -1, 1)); + float3 mu = b * rcp(lenB); + float cosGamma = dot(thisVert, nextVert); + float gamma = LV_FastAcos(clamp(cosGamma, -1, 1)); + surfaceIntegral.x += gamma * dot(zhDir0, mu); + surfaceIntegral.y += gamma * dot(zhDir1, mu); + surfaceIntegral.z += gamma * dot(zhDir2, mu); + } + solidAngle = solidAngle - LV_PI2; + surfaceIntegral *= 0.5; + const float normalizationL0 = 0.5f * sqrt(1.0f / LV_PI); + float l0 = normalizationL0 * solidAngle; + float l1y = dot(zhWeightL1y, surfaceIntegral); + float l1z = dot(zhWeightL1z, surfaceIntegral); + float l1x = dot(zhWeightL1x, surfaceIntegral); + const float cosineKernelL0 = LV_PI; // (1) + const float cosineKernelL1 = LV_PI2 / 3.0f; // (1) + const float oneOverPi = 1.0f / LV_PI; // (2) + const float normalizationL1 = 0.5f * sqrt(3.0f / LV_PI); // (3) + const float weightL0 = cosineKernelL0 * normalizationL0 * oneOverPi; // (1), (2), (3) + const float weightL1 = cosineKernelL1 * normalizationL1 * oneOverPi; // (1), (2), (3) + l0 *= weightL0; + l1y *= weightL1; + l1z *= weightL1; + l1x *= weightL1; + return float4(l1x, l1y, l1z, l0); + } + void LV_QuadLight(float3 worldPos, float3 centroidPos, float4 rotationQuat, float2 size, float3 color, float sqMaxDist, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 lightToWorldPos = worldPos - centroidPos; + float3 normal = LV_MultiplyVectorByQuaternion(float3(0, 0, 1), rotationQuat); + if (dot(normal, lightToWorldPos) < 0.0) return; + float sqCutoffDist = sqMaxDist - dot(lightToWorldPos, lightToWorldPos); + color.rgb *= saturate(sqCutoffDist / sqMaxDist) * LV_PI * occlusion; + float2 halfSize = size * 0.5f; + float3 xAxis = LV_MultiplyVectorByQuaternion(float3(1, 0, 0), rotationQuat); + float3 yAxis = cross(normal, xAxis); + float3 verts[4]; + verts[0] = centroidPos + (-halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[1] = centroidPos + ( halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[2] = centroidPos + ( halfSize.x * xAxis) + (-halfSize.y * yAxis); + verts[3] = centroidPos + (-halfSize.x * xAxis) + (-halfSize.y * yAxis); + float4 areaLightSH = LV_ProjectQuadLightIrradianceSH(worldPos, verts); + float lenL1 = length(areaLightSH.xyz); + if (lenL1 > areaLightSH.w) areaLightSH.xyz *= areaLightSH.w / lenL1; + L0 += areaLightSH.w * color.rgb; + L1r += areaLightSH.xyz * color.r; + L1g += areaLightSH.xyz * color.g; + L1b += areaLightSH.xyz * color.b; + count++; + } + float3 LV_PointLightAttenuation(float sqdist, float sqlightSize, float3 color, float brightnessCutoff, float sqMaxDist) { + float mask = saturate(1 - sqdist / sqMaxDist); + return mask * mask * color * sqlightSize / (sqdist + sqlightSize); + } + float LV_PointLightSolidAngle(float sqdist, float sqlightSize) { + return saturate(sqrt(sqdist / (sqlightSize + sqdist))); + } + void LV_SphereLight(float sqdist, float3 dirN, float sqlightSize, float3 color, float occlusion, float sqMaxDist, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 att = LV_PointLightAttenuation(sqdist, sqlightSize, color, _UdonLightBrightnessCutoff, sqMaxDist); + float3 l0 = att * occlusion; + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLight(float sqdist, float3 dirN, float sqlightSize, float3 att, float spotMask, float cosAngle, float coneFalloff, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float smoothedCone = LV_Smoothstep01(saturate(spotMask * coneFalloff)); + float3 l0 = att * (occlusion * smoothedCone); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * saturate(1 - cosAngle)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightCookie(float sqdist, float3 dirN, float sqlightSize, float3 att, float4 lightRot, float tanAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 localDir = LV_MultiplyVectorByQuaternion(-dirN, lightRot); + float2 uv = localDir.xy * rcp(localDir.z * tanAngle); + if ( + localDir.z <= 0.0 || // Culling by direction + abs(uv.x) > 1.0 || abs(uv.y) > 1.0 // Culling by UV + ) return; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 - customId - 1; + float3 uvid = float3(uv * 0.5 + 0.5, id); + float angleSize = saturate(rsqrt(1 + tanAngle * tanAngle)); + float4 cookie = LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + float3 l0 = att * cookie.rgb * (cookie.a * occlusion); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * (1 - angleSize)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightAttenuationLUT(float sqdist, float3 dirN, float sqlightSize, float3 color, float spotMask, float cosAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float dirRadius = sqdist * abs(sqlightSize); + float spot = 1 - saturate(spotMask * rcp(1 - cosAngle)); + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId - 1; + float3 uvid = float3(sqrt(float2(spot, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * occlusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } + void LV_PointLight(uint id, float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 customID_data = _UdonPointLightVolumeCustomID[id]; + int shadowId = (int) customID_data.y; // Shadowmask id + int customId = (int) customID_data.x; // Custom Texture ID + float sqrRange = customID_data.z; // Squared culling distance + float4 pos = _UdonPointLightVolumePosition[id]; // Light position and inversed squared range + float3 dir = pos.xyz - worldPos; + float sqlen = max(dot(dir, dir), 1e-6); + if (sqlen > sqrRange) return; // Early distance based culling + float3 dirN = dir * rsqrt(sqlen); + float lightOcclusion = 1; + if (_UdonLightVolumeOcclusionCount != 0 && shadowId >= 0) { + lightOcclusion = dot(occlusion, float4(shadowId == 0, shadowId == 1, shadowId == 2, shadowId == 3)); + } + float4 color = _UdonPointLightVolumeColor[id]; // Color, angle + float4 ldir = _UdonPointLightVolumeDirection[id]; // Dir + falloff or Rotation + if (pos.w < 0) { // It is a spot light + float angle = color.w; + float spotMask = dot(ldir.xyz, -dirN) - angle; + if(customId >= 0 && spotMask < 0) return; // Spot cone based culling + if (customId > 0) { // If it uses Attenuation LUT + LV_SphereSpotLightAttenuationLUT(sqlen, dirN, -pos.w, color.rgb, spotMask, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + float3 att = LV_PointLightAttenuation(sqlen, -pos.w, color.rgb, _UdonLightBrightnessCutoff, sqrRange); + if (customId < 0) { // If uses cookie + LV_SphereSpotLightCookie(sqlen, dirN, -pos.w, att, ldir, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + LV_SphereSpotLight(sqlen, dirN, -pos.w, att, spotMask, angle, ldir.w, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + } else if (color.w <= 1.5f) { // It is a point light + if (customId > 0) { // Using LUT + float invSqRange = abs(pos.w); // Sign of range defines if it's point light (positive) or a spot light (negative) + float dirRadius = sqlen * invSqRange; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId; + float3 uvid = float3(sqrt(float2(0, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * lightOcclusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } else { // If it uses default parametric attenuation + float3 l0 = 0, l1r = 0, l1g = 0, l1b = 0; + LV_SphereLight(sqlen, dirN, pos.w, color.rgb, lightOcclusion, sqrRange, l0, l1r, l1g, l1b, count); + float3 cubeColor = 1; + if (customId < 0) { // If it uses a cubemap + uint id = -customId - 1; // Cubemap ID starts from zero and should not take in count texture array slices count. + cubeColor = LV_SampleCubemapArray(id, LV_MultiplyVectorByQuaternion(dirN, ldir)).xyz; + } + L0 += l0 * cubeColor; + L1r += l1r * cubeColor.r; + L1g += l1g * cubeColor.g; + L1b += l1b * cubeColor.b; + } + } else { // It is an area light + LV_QuadLight(worldPos, pos.xyz, ldir, float2(pos.w, color.w - 2.0f), color.rgb, sqrRange, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + void LV_SampleLightVolumeTex(float3 uvw0, float3 uvw1, float3 uvw2, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b) { + float4 tex0 = LV_SAMPLE(_UdonLightVolume, uvw0); + float4 tex1 = LV_SAMPLE(_UdonLightVolume, uvw1); + float4 tex2 = LV_SAMPLE(_UdonLightVolume, uvw2); + L0 = tex0.rgb; + L1r = float3(tex1.r, tex2.r, tex0.a); + L1g = float3(tex1.g, tex2.g, tex1.a); + L1b = float3(tex1.b, tex2.b, tex2.a); + } + float LV_BoundsMask(float3 localUVW, float3 invLocalEdgeSmooth) { + float3 distToMin = (localUVW + 0.5) * invLocalEdgeSmooth; + float3 distToMax = (0.5 - localUVW) * invLocalEdgeSmooth; + float3 fade = saturate(min(distToMin, distToMax)); + return fade.x * fade.y * fade.z; + } + void LV_SampleLightProbe(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz; + L1g += unity_SHAg.xyz; + L1b += unity_SHAb.xyz; + } + void LV_SampleLightProbeDering(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz * 0.565f; + L1g += unity_SHAg.xyz * 0.565f; + L1b += unity_SHAb.xyz * 0.565f; + } + void LV_SampleVolume(uint id, float3 localUVW, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + float3 uvw0 = uvwScaled + _UdonLightVolumeUvw[uvwID].xyz; + float3 uvw1 = uvwScaled + _UdonLightVolumeUvw[uvwID + 2].xyz; + float3 uvw2 = uvwScaled + _UdonLightVolumeUvw[uvwID + 4].xyz; + float3 l0, l1r, l1g, l1b; + LV_SampleLightVolumeTex(uvw0, uvw1, uvw2, l0, l1r, l1g, l1b); + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + occlusion = 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + occlusion = 1; + } + float4 color = _UdonLightVolumeColor[id]; + L0 += l0 * color.rgb; + l1r *= color.r; + l1g *= color.g; + l1b *= color.b; + if (color.a != 0) { + float3 r0 = _UdonLightVolumeRotation[id * 2].xyz; + float3 r1 = _UdonLightVolumeRotation[id * 2 + 1].xyz; + L1r += LV_MultiplyVectorByMatrix2x3(l1r, r0, r1); + L1g += LV_MultiplyVectorByMatrix2x3(l1g, r0, r1); + L1b += LV_MultiplyVectorByMatrix2x3(l1b, r0, r1); + } else { + L1r += l1r; + L1g += l1g; + L1b += l1b; + } + } + float4 LV_SampleVolumeOcclusion(uint id, float3 localUVW) { + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + return 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + return 1; + } + } + void LV_PointLightVolumeSH(float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + uint pointCount = min((uint) _UdonPointLightVolumeCount, VRCLV_MAX_LIGHTS_COUNT); + if (pointCount == 0) return; + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_LIGHTS_COUNT); + uint pcount = 0; // Point lights counter + [loop] for (uint pid = 0; pid < pointCount && pcount < maxOverdraw; pid++) { + LV_PointLight(pid, worldPos, occlusion, L0, L1r, L1g, L1b, pcount); + } + } + void LV_LightVolumeSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + if (volumesCount == 0) { // Legacy! Fallback to default light probes if Light Volume are not enabled or a version is too old to have a support. Legacy! + LV_SampleLightProbe(L0, L1r, L1g, L1b); + return; + } + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + bool lightProbesBlend = _UdonLightVolumeProbesBlend; + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + [loop] for (uint id = 0; id < volumesCount; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA && lightProbesBlend) { + LV_SampleLightProbe(L0, L1r, L1g, L1b); + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + float3 L0_A = 0; + float3 L1r_A = 0; + float3 L1g_A = 0; + float3 L1b_A = 0; + float4 occlusion_A = 1; + LV_SampleVolume(volumeID_A, localUVW_A, L0_A, L1r_A, L1g_A, L1b_A, occlusion_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || isNoA || (_UdonLightVolumeSharpBounds && isNoB)) { // Returning SH A result if it's the center of mask or out of bounds + L0 += L0_A; + L1r += L1r_A; + L1g += L1g_A; + L1b += L1b_A; + occlusion = occlusion_A; + occlusion *= mOcclusion; + return; + } + float3 L0_B = 0; + float3 L1r_B = 0; + float3 L1g_B = 0; + float3 L1b_B = 0; + float4 occlusion_B = 1; + if (isNoB && lightProbesBlend) { // No Volume found and light volumes blending enabled + LV_SampleLightProbe(L0_B, L1r_B, L1g_B, L1b_B); + } else { // Blending Volume A and Volume B + localUVW_B = isNoB ? localUVW : localUVW_B; + volumeID_B = isNoB ? volumesCount - 1 : volumeID_B; + LV_SampleVolume(volumeID_B, localUVW_B, L0_B, L1r_B, L1g_B, L1b_B, occlusion_B); + } + occlusion = lerp(occlusion_B, occlusion_A, mask); + occlusion *= mOcclusion; + L0 += lerp(L0_B, L0_A, mask); + L1r += lerp(L1r_B, L1r_A, mask); + L1g += lerp(L1g_B, L1g_A, mask); + L1b += lerp(L1b_B, L1b_A, mask); + } + void LV_LightVolumeAdditiveSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + if (additiveCount == 0 && (uint) _UdonPointLightVolumeCount == 0) return; // Legacy! + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW for Y Axis and Free rotations + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + uint count = min(_UdonLightVolumeOcclusionCount == 0 ? additiveCount : volumesCount, VRCLV_MAX_VOLUMES_COUNT); // Only use all volumes if occlusion volumes are enabled + [loop] for (uint id = 0; id < count; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA || _UdonLightVolumeOcclusionCount == 0) { + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + occlusion = LV_SampleVolumeOcclusion(volumeID_A, localUVW_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || (_UdonLightVolumeSharpBounds && isNoB)) { + occlusion *= mOcclusion; + return; // Returning A result if it's the center of mask or out of bounds + } + if (isNoB) occlusion = lerp(1, occlusion, mask); + else occlusion = lerp(LV_SampleVolumeOcclusion(volumeID_B, localUVW_B), occlusion, mask); + occlusion *= mOcclusion; + } + float3 LightVolumeSpecular(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specColor = max(float3(dot(reflect(-L1r, worldNormal), viewDir), dot(reflect(-L1g, worldNormal), viewDir), dot(reflect(-L1b, worldNormal), viewDir)), 0); + float3 rDir = normalize(normalize(L1r) + viewDir); + float3 gDir = normalize(normalize(L1g) + viewDir); + float3 bDir = normalize(normalize(L1b) + viewDir); + float rNh = saturate(dot(worldNormal, rDir)); + float gNh = saturate(dot(worldNormal, gDir)); + float bNh = saturate(dot(worldNormal, bDir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float rSpec = LV_DistributionGGX(rNh, roughExp); + float gSpec = LV_DistributionGGX(gNh, roughExp); + float bSpec = LV_DistributionGGX(bNh, roughExp); + float3 specs = (rSpec + gSpec + bSpec) * f0; + float3 coloredSpecs = specs * specColor; + float3 a = coloredSpecs + specs * L0; + float3 b = coloredSpecs * 3; + return max(lerp(a, b, smoothness) * 0.5f, 0.0); + } + float3 LightVolumeSpecular(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecular(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeSpecularDominant(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 dominantDir = L1r + L1g + L1b; + float3 dir = normalize(normalize(dominantDir) + viewDir); + float nh = saturate(dot(worldNormal, dir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float spec = LV_DistributionGGX(nh, roughExp); + return max(spec * L0 * f0, 0.0) * 1.5f; + } + float3 LightVolumeSpecularDominant(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecularDominant(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeEvaluate(float3 worldNormal, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + return float3(LV_EvaluateSH(L0.r, L1r, worldNormal), LV_EvaluateSH(L0.g, L1g, worldNormal), LV_EvaluateSH(L0.b, L1b, worldNormal)); + } + void LightVolumeSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled == 0) { + LV_SampleLightProbeDering(L0, L1r, L1g, L1b); + } else { + float4 occlusion = 1; + LV_LightVolumeSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + void LightVolumeAdditiveSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled != 0) { + float4 occlusion = 1; + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + float3 LightVolumeSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float3 LightVolumeAdditiveSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return 0; + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float LightVolumesEnabled() { + return _UdonLightVolumeEnabled; + } + float LightVolumesVersion() { + return _UdonLightVolumeVersion == 0 ? _UdonLightVolumeEnabled : _UdonLightVolumeVersion; + } + #endif + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + #ifdef _EMISSION + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMap; + #endif + float4 _EmissionMap_ST; + float2 _EmissionMapPan; + float _EmissionMapUV; + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMask; + #endif + float4 _EmissionMask_ST; + float2 _EmissionMaskPan; + float _EmissionMaskUV; + float _EmissionMaskInvert; + float _EmissionMaskChannel; + float _EmissionMask0GlobalMask; + float _EmissionMask0GlobalMaskBlendType; + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionScrollingCurve; + #endif + float4 _EmissionScrollingCurve_ST; + float _EmissionFluorescence; + float4 _EmissionColor; + float _EmissionBaseColorAsMap; + float _EmissionStrength; + float _EmissionHueShiftEnabled; + float _EmissionHueShiftColorSpace; + float _EmissionHueSelectOrShift; + float _EmissionSaturation; + float _EmissionHueShift; + float _EmissionHueShiftSpeed; + float _EmissionCenterOutEnabled; + float _EmissionCenterOutSpeed; + float _EnableGITDEmission; + float _GITDEWorldOrMesh; + float _GITDEMinEmissionMultiplier; + float _GITDEMaxEmissionMultiplier; + float _GITDEMinLight; + float _GITDEMaxLight; + float _EmissionBlinkingEnabled; + float _EmissiveBlink_Min; + float _EmissiveBlink_Max; + float _EmissiveBlink_Velocity; + float _EmissionBlinkingOffset; + float _ScrollingEmission; + float4 _EmissiveScroll_Direction; + float _EmissiveScroll_Width; + float _EmissiveScroll_Velocity; + float _EmissiveScroll_Interval; + float _EmissionScrollingOffset; + float _EmissionReplace0; + float _EmissionScrollingVertexColor; + float _EmissionScrollingUseCurve; + float _EmissionColorThemeIndex; + float _EmissionAL0Enabled; + float2 _EmissionAL0StrengthMod; + float _EmissionAL0StrengthBand; + float2 _AudioLinkEmission0CenterOut; + float _AudioLinkEmission0CenterOutSize; + float _AudioLinkEmission0CenterOutBand; + float _AudioLinkEmission0CenterOutDuration; + float2 _EmissionAL0Multipliers; + float _EmissionAL0MultipliersBand; + #endif + #ifdef MOCHIE_PBR + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _MochieMetallicMaps; + float _PBRMapsStochastic; + #endif + float4 _MochieMetallicMaps_ST; + float2 _MochieMetallicMapsPan; + float _MochieMetallicMapsUV; + float _MochieMetallicMapsStochastic; + float _MochieMetallicMapInvert; + float _MochieRoughnessMapInvert; + float _MochieReflectionMaskInvert; + float _MochieSpecularMaskInvert; + float _MochieMetallicMapsMetallicChannel; + float _MochieMetallicMapsRoughnessChannel; + float _MochieMetallicMapsReflectionMaskChannel; + float _MochieMetallicMapsSpecularMaskChannel; + float _PBRNormalSelect; + float _MochieReflectionTintThemeIndex; + float _MochieSpecularTintThemeIndex; + float _MochieRoughnessMultiplier; + float _MochieMetallicMultiplier; + float _MochieReflectionStrength; + float _MochieSpecularStrength; + float4 _MochieSpecularTint; + float4 _MochieReflectionTint; + float _MochieLitFallback; + float _IgnoreCastedShadows; + float _PBRSplitMaskSample; + float _PBRSplitMaskStochastic; + float4 _PBRMaskScaleTiling; + float _MochieMetallicMasksUV; + float4 _MochieMetallicMasksPan; + float _Specular2ndLayer; + float _MochieSpecularStrength2; + float _MochieRoughnessMultiplier2; + float _RefSpecFresnelStrength; + float _SFExposureOcclusion; + TextureCube _MochieReflCube; + float4 _MochieReflCube_HDR; + float _MochieForceFallback; + float _MochieGSAAEnabled; + float _PoiGSAAVariance; + float _PoiGSAAThreshold; + float _BRDFTPSReflectionMaskStrength; + float _BRDFTPSSpecularMaskStrength; + float _BRDFTPSDepthEnabled; + float _MochieMetallicGlobalMask; + float _MochieMetallicGlobalMaskBlendType; + float _MochieSmoothnessGlobalMask; + float _MochieSmoothnessGlobalMaskBlendType; + float _MochieReflectionStrengthGlobalMask; + float _MochieReflectionStrengthGlobalMaskBlendType; + float _MochieSpecularStrengthGlobalMask; + float _MochieSpecularStrengthGlobalMaskBlendType; + #endif + #ifdef POI_CLEARCOAT + #if defined(PROP_CLEARCOATMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _ClearCoatMaps; + float4 _ClearCoatMaps_ST; + float2 _ClearCoatMapsPan; + float _ClearCoatMapsUV; + float _ClearCoatMapsStochastic; + #endif + float _ClearCoatMapsClearCoatMaskChannel; + float _ClearCoatMapsRoughnessChannel; + float _ClearCoatMapsReflectionMaskChannel; + float _ClearCoatMapsSpecularMaskChannel; + float _ClearCoatBRDF; + float _ClearCoatReflectionStrength; + float _ClearCoatSpecularStrength; + float _ClearCoatStrength; + float _ClearCoatSmoothness; + float4 _ClearCoatReflectionTint; + float _ClearCoatReflectionTintThemeIndex; + float4 _ClearCoatSpecularTint; + float _ClearCoatSpecularTintThemeIndex; + float _ClearCoatSmoothnessMapInvert; + float _ClearCoatMaskInvert; + float _ClearCoatReflectionMaskInvert; + float _ClearCoatSpecularMaskInvert; + float _ClearCoatTPSMaskStrength; + float _ClearCoatTPSDepthMaskEnabled; + float _ClearCoatNormalSelect; + TextureCube _ClearCoatFallback; + float4 _ClearCoatFallback_HDR; + float _ClearCoatForceFallback; + float _ClearCoatLitFallback; + float _CCIgnoreCastedShadows; + float _ClearCoatGSAAEnabled; + float _ClearCoatGSAAVariance; + float _ClearCoatGSAAThreshold; + float _ClearcoatFresnelStrength; + float _ClearcoatExposureOcclusion; + float _ClearCoatGlobalMask; + float _ClearCoatGlobalMaskBlendType; + float _ClearCoatSmoothnessGlobalMask; + float _ClearCoatSmoothnessGlobalMaskBlendType; + float _ClearCoatReflectionStrengthGlobalMask; + float _ClearCoatReflectionStrengthGlobalMaskBlendType; + float _ClearCoatSpecularStrengthGlobalMask; + float _ClearCoatSpecularStrengthGlobalMaskBlendType; + #endif + float _PPLightingMultiplier; + float _PPLightingAddition; + float _PPEmissionMultiplier; + float _PPFinalColorMultiplier; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef VIGNETTE_MASKED + #ifdef _LIGHTINGMODE_REALISTIC + #if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) + #if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) + #define SUBTRACTIVE_LIGHTING 1 + #endif + #endif + float FadeShadows(float attenuation, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if HANDLE_SHADOWS_BLENDING_IN_GI || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + #if ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + attenuation = poiLight.attenuation; + #endif + float viewZ = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float shadowFadeDistance = UnityComputeShadowFadeDistance(poiMesh.worldPos, viewZ); + float shadowFade = UnityComputeShadowFade(shadowFadeDistance); + float bakedAttenuation = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + attenuation = UnityMixRealtimeAndBakedShadows(attenuation, bakedAttenuation, shadowFade); + #endif + return attenuation; + } + void ApplySubtractiveLighting(inout UnityIndirect indirectLight, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if SUBTRACTIVE_LIGHTING + poiLight.attenuation = FadeShadows(poiLight.attenuation, poiLight, poiMesh, poiCam); + float ndotl = saturate(dot(poiMesh.normals[0], _WorldSpaceLightPos0.xyz)); + float3 shadowedLightEstimate = ndotl * (1 - poiLight.attenuation) * _LightColor0.rgb; + float3 subtractedLight = indirectLight.diffuse - shadowedLightEstimate; + subtractedLight = max(subtractedLight, unity_ShadowColor.rgb); + subtractedLight = lerp(subtractedLight, indirectLight.diffuse, _LightShadowData.x); + indirectLight.diffuse = min(subtractedLight, indirectLight.diffuse); + #endif + } + UnityIndirect CreateIndirectLight(in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight) + { + UnityIndirect indirectLight; + indirectLight.diffuse = 0; + indirectLight.specular = 0; + #if defined(LIGHTMAP_ON) + indirectLight.diffuse = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, poiMesh.lightmapUV.xy)); + #if defined(DIRLIGHTMAP_COMBINED) + float4 lightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, poiMesh.lightmapUV.xy); + indirectLight.diffuse = DecodeDirectionalLightmap(indirectLight.diffuse, lightmapDirection, poiMesh.normals[1]); + #endif + ApplySubtractiveLighting(indirectLight, poiLight, poiMesh, poiCam); + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float3 dynamicLightDiffuse = DecodeRealtimeLightmap( + UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, poiMesh.lightmapUV.zw) + ); + #if defined(DIRLIGHTMAP_COMBINED) + float4 dynamicLightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_DynamicDirectionality, unity_DynamicLightmap, poiMesh.lightmapUV.zw); + indirectLight.diffuse += DecodeDirectionalLightmap(dynamicLightDiffuse, dynamicLightmapDirection, poiMesh.normals[1]); + #else + indirectLight.diffuse += dynamicLightDiffuse; + #endif + #endif + #if !defined(LIGHTMAP_ON) && !defined(DYNAMICLIGHTMAP_ON) + #if UNITY_LIGHT_PROBE_PROXY_VOLUME + if (unity_ProbeVolumeParams.x == 1) + { + indirectLight.diffuse = SHEvalLinearL0L1_SampleProbeVolume( + float4(poiMesh.normals[1], 1), poiMesh.worldPos + ); + indirectLight.diffuse = max(0, indirectLight.diffuse); + #if defined(UNITY_COLORSPACE_GAMMA) + indirectLight.diffuse = LinearToGammaSpace(indirectLight.diffuse); + #endif + } + else + { + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + } + #else + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + #endif + #endif + indirectLight.diffuse *= poiLight.occlusion; + return indirectLight; + } + #endif + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_REALISTIC + UnityLight light; + light.dir = poiLight.direction; + light.color = max(0, _LightColor0.rgb) * saturate(shadowAttenuation * attenuation * poiLight.detailShadow); + light.ndotl = poiLight.nDotLSaturated; + UnityIndirect indirectLight = (UnityIndirect)0; + #ifdef UNITY_PASS_FORWARDBASE + indirectLight = CreateIndirectLight(poiMesh, poiCam, poiLight); + #endif + #ifdef UNITY_PASS_FORWARDBASE + light.color = max(light.color * 1.0, 0); + light.color = max(light.color + 0.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse * 1.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse + 0.0, 0); + #endif + poiLight.rampedLightMap = poiLight.nDotLSaturated; + poiLight.finalLighting = max(POI_BRDF_PBS(1, 0, 0, 0, poiMesh.normals[1], poiCam.viewDir, light, indirectLight).xyz, _LightingMinLightBrightness); + #ifdef UNITY_PASS_FORWARDBASE + if (_UdonLightVolumeEnabled && 1.0) + { + float3 L0 = 0; + float3 L1r = 0; + float3 L1g = 0; + float3 L1b = 0; + #ifdef LIGHTMAP_ON + LightVolumeAdditiveSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + poiLight.finalLighting += clamp(LightVolumeEvaluate(poiMesh.normals[1], L0, L1r, L1g, L1b), _LightingMinLightBrightness, _LightingCap); + #endif + } + #endif + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + float calculateGlowInTheDark(in float minLight, in float maxLight, in float minEmissionMultiplier, in float maxEmissionMultiplier, in float enabled, in float worldOrMesh, in PoiLight poiLight) + { + float glowInTheDarkMultiplier = 1; + if (enabled) + { + float3 lightValue = worldOrMesh ? calculateluminance(poiLight.finalLighting.rgb) : calculateluminance(poiLight.directColor.rgb); + float gitdeAlpha = saturate(inverseLerp(minLight, maxLight, lightValue)); + glowInTheDarkMultiplier = lerp(minEmissionMultiplier, maxEmissionMultiplier, gitdeAlpha); + } + return glowInTheDarkMultiplier; + } + float calculateScrollingEmission(in float3 direction, in float velocity, in float interval, in float scrollWidth, float offset, float3 position) + { + scrollWidth = max(scrollWidth, 0); + float phase = 0; + phase = dot(position, direction); + phase -= (_Time.y + offset) * velocity; + phase /= interval; + phase -= floor(phase); + phase = saturate(phase); + return (pow(phase, scrollWidth) + pow(1 - phase, scrollWidth * 4)) * 0.5; + } + float calculateBlinkingEmission(in float blinkMin, in float blinkMax, in float blinkVelocity, float offset) + { + float amplitude = (blinkMax - blinkMin) * 0.5f; + float base = blinkMin + amplitude; + return sin((_Time.y + offset) * blinkVelocity) * amplitude + base; + } + void applyALEmmissionStrength(in PoiMods poiMods, inout float emissionStrength, in float2 emissionStrengthMod, in float emissionStrengthBand, in float2 _EmissionALMultipliers, in float _EmissionALMultipliersBand, in float enabled) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + emissionStrength += lerp(emissionStrengthMod.x, emissionStrengthMod.y, poiMods.audioLink[emissionStrengthBand]); + emissionStrength *= lerp(_EmissionALMultipliers.x, _EmissionALMultipliers.y, poiMods.audioLink[_EmissionALMultipliersBand]); + } + #endif + } + void applyALCenterOutEmission(in PoiMods poiMods, in float nDotV, inout float emissionStrength, in float size, in float band, in float2 emissionToAdd, in float enabled, in float duration) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + float intensity; + [flatten] + if (duration >= 0) + { + intensity = getBandAtTime(band, saturate(remap(nDotV, 1, 0, 0, duration)), size); + } + else + { + duration *= -1; + intensity = getBandAtTime(band, saturate(remap(pow(nDotV, 2), 0, 1 + duration, 0, duration)), size); + } + emissionStrength += lerp(emissionToAdd[0], emissionToAdd[1], intensity); + } + #endif + } + #ifdef _EMISSION + float3 applyEmission(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiLight poiLight, in PoiCam poiCam, in PoiMods poiMods) + { + float3 emission0 = 0; + float emissionAlpha = 1; + float emissionStrength0 = 1.0; + float3 emissionColor0 = 0; + applyALEmmissionStrength(poiMods, emissionStrength0, float4(0,0,0,0), 0.0, float4(1,1,0,0), 0.0, 0.0); + applyALCenterOutEmission(poiMods, poiLight.nDotV, emissionStrength0, 0.0, 0.0, float4(0,0,0,0), 0.0, 1.0); + float glowInTheDarkMultiplier0 = calculateGlowInTheDark(0.0, 1.0, 1.0, 0.0, 0.0, 0.0, poiLight); + #ifdef POI_GRABPASS + float mixBaseColor = 0; + #else + float mixBaseColor = 0.0; + #endif + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + float4 emissionTex = 0; + if (!0.0) + { + emissionTex = POI2D_SAMPLER_PAN(_EmissionMap, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + } + else + { + emissionTex = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMap, _MainTex, ((.5 + poiLight.nDotV * .5) * float4(1,1,0,0).xy) + _Time.x * 5.0); + } + emissionColor0 = emissionTex.rgb * lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, _EmissionColor.rgb, 0.0); + emissionAlpha = emissionTex.a; + #else + emissionColor0 = lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, _EmissionColor.rgb, 0.0); + #endif + float3 inverseLighting = saturate((1.0 - poiLight.directColor) * sqrt(poiLight.directColor)); + emissionColor0 = lerp(emissionColor0.rgb, emissionColor0.rgb * inverseLighting, 0.0); + emissionStrength0 *= emissionAlpha; + if (0.0) + { + float3 pos = poiMesh.localPos; + if (0.0) + { + pos = poiMesh.vertexColor.rgb; + } + if (0.0) + { + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + emissionStrength0 *= UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionScrollingCurve, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + (dot(pos, float4(0,-10,0,0).xyz) * 20.0) + _Time.x * 10.0).r; + #endif + } + else + { + emissionStrength0 *= calculateScrollingEmission(float4(0,-10,0,0).xyz, 10.0, 20.0, 10.0, 0.0, pos); + } + } + if (0.0) + { + emissionStrength0 *= calculateBlinkingEmission(0.0, 1.0, 4.0, 0.0); + } + if(0.0) + { + emissionColor0 = hueShift(emissionColor0, frac(0.0 + 0.0 * _Time.x), 0.0, 1.0); + emissionColor0 = lerp(emissionColor0, dot(emissionColor0, float3(0.3, 0.59, 0.11)), - (0.0)); + } + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + float emissionMask0 = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + _Time.x * float4(0,0,0,0))[0.0]; + #else + float emissionMask0 = 1; + #endif + if (0.0) + { + emissionMask0 = 1 - emissionMask0; + } + if (0.0 > 0) + { + emissionMask0 = maskBlend(emissionMask0, poiMods.globalMask[0.0 - 1], 2.0); + } + emissionStrength0 *= glowInTheDarkMultiplier0 * emissionMask0; + emission0 = max(emissionStrength0 * emissionColor0, 0); + #ifdef POI_DISSOLVE + if (_DissolveEmissionSide != 2) + { + emission0 *= lerp(1 - dissolveAlpha, dissolveAlpha, _DissolveEmissionSide); + } + #endif + poiFragData.emission += emission0; + return emission0 * 0.0; + } + #endif + #if defined(MOCHIE_PBR) || defined(POI_CLEARCOAT) + float GSAA_Filament(float3 worldNormal, float perceptualRoughness, float gsaaVariance, float gsaaThreshold) + { + float3 du = ddx(worldNormal); + float3 dv = ddy(worldNormal); + float variance = gsaaVariance * (dot(du, du) + dot(dv, dv)); + float roughness = perceptualRoughness * perceptualRoughness; + float kernelRoughness = min(2.0 * variance, gsaaThreshold); + float squareRoughness = saturate(roughness * roughness + kernelRoughness); + return sqrt(sqrt(squareRoughness)); + } + float3 GetWorldReflections(float3 reflDir, float3 worldPos, float roughness) + { + float3 baseReflDir = reflDir; + reflDir = BoxProjection(reflDir, worldPos, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax); + float4 envSample0 = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, reflDir, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p0 = DecodeHDR(envSample0, unity_SpecCube0_HDR); + float interpolator = unity_SpecCube0_BoxMin.w; + + if (interpolator < 0.99999) + { + float3 refDirBlend = BoxProjection(baseReflDir, worldPos, unity_SpecCube1_ProbePosition, unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax); + float4 envSample1 = UNITY_SAMPLE_TEXCUBE_SAMPLER_LOD(unity_SpecCube1, unity_SpecCube0, refDirBlend, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p1 = DecodeHDR(envSample1, unity_SpecCube1_HDR); + p0 = lerp(p1, p0, interpolator); + } + return p0; + } + float3 GetReflections(in PoiCam poiCam, in PoiLight pl, in PoiMesh poiMesh, float roughness, float ForceFallback, float LightFallback, TextureCube reflectionCube, float4 hdrData, float3 reflectionDir) + { + float3 reflections = 0; + float3 lighting = pl.finalLighting; + if (ForceFallback == 0) + { + + if (SceneHasReflections()) + { + #ifdef UNITY_PASS_FORWARDBASE + reflections = GetWorldReflections(reflectionDir, poiMesh.worldPos.xyz, roughness); + #endif + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + reflections *= pl.occlusion; + return reflections; + } + float GetGGXTerm(float nDotL, float nDotV, float nDotH, float roughness) + { + float visibilityTerm = 0; + if (nDotL > 0) + { + float lambdaV = nDotL * (nDotV * (1 - roughness) + roughness); + float lambdaL = nDotV * (nDotL * (1 - roughness) + roughness); + visibilityTerm = 0.5f / (lambdaV + lambdaL + 1e-5f); + float a = nDotH * roughness; + float k = roughness / (1.0 - nDotH * nDotH + a * a+ 1e-5f); + float dotTerm = k * k * UNITY_INV_PI; + visibilityTerm *= dotTerm; + } + return visibilityTerm; + } + void GetSpecFresTerm(float nDotL, float nDotV, float nDotH, float lDotH, inout float3 specularTerm, inout float3 fresnelTerm, float3 specCol, float roughness) + { + specularTerm = GetGGXTerm(nDotL, nDotV, nDotH, roughness); + fresnelTerm = FresnelTerm(specCol, lDotH); + specularTerm = max(0, specularTerm * max(0.00001, nDotL)); + } + float GetRoughness(float smoothness) + { + float rough = 1 - smoothness; + rough *= 1.7 - 0.7 * rough; + return rough; + } + float SFVisibility(float brdfRoughness, float3 directColor, float NDotV, float ExposureOcclusion) + { + float Visibility = saturate(length(directColor + EPSILON) * (1.0/(ExposureOcclusion))); //Using direct color because I think it should be generally more forgiving + return saturate(pow(NDotV + Visibility, exp2(-16.0 * brdfRoughness - 1.0)) - 1.0 + Visibility); + } + #endif + #ifdef MOCHIE_PBR + void MetallicAndSpecularFragDataInit(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + float smoothness = 0.874; + float smoothness2 = 1.0; + float metallic = 0.729; + float specularMask = 1; + float reflectionMask = 1; + smoothness *= poiFragData.smoothness; + smoothness2 *= poiFragData.smoothness2; + metallic *= poiFragData.metallic; + specularMask *= poiFragData.specularMask; + reflectionMask *= poiFragData.reflectionMask; + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + + if (0.0) + { + float4 PBRSplitMask = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy, 0.0); + assignValueToVectorFromIndex(PBRMaps, 2.0, PBRSplitMask[2.0]); + assignValueToVectorFromIndex(PBRMaps, 3.0, PBRSplitMask[3.0]); + } + if (0.0 < 4) + { + metallic *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + smoothness2 *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + reflectionMask *= 1.0; + specularMask *= 1.0; + if (0.0) + { + metallic = 1 - metallic; + } + if (0.0) + { + smoothness = 1 - smoothness; + smoothness2 = 1 - smoothness2; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + poiFragData.smoothness *= smoothness; + poiFragData.smoothness2 *= smoothness2; + poiFragData.metallic *= metallic; + poiFragData.specularMask *= specularMask; + poiFragData.reflectionMask *= reflectionMask; + } + void MochieBRDF(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, inout PoiMods poiMods) + { + float smoothness = poiFragData.smoothness; + float smoothness2 = poiFragData.smoothness2; + float metallic = poiFragData.metallic; + float specularMask = poiFragData.specularMask; + float reflectionMask = poiFragData.reflectionMask; + if (0.0 > 0) + { + metallic = customBlend(metallic, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + smoothness2 = customBlend(smoothness2, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef TPS_Penetrator + if (0.0) + { + reflectionMask = lerp(0, reflectionMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + specularMask = lerp(0, specularMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float roughness2 = GetRoughness(smoothness2); + float3 specCol = lerp(unity_ColorSpaceDielectricSpec.rgb, poiFragData.baseColor, metallic); + float omr = unity_ColorSpaceDielectricSpec.a - metallic * unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + float percepRough2 = 1 - smoothness2; + + if (1.0) + { + float3 normals = lerp(poiMesh.normals[0], poiMesh.normals[1], 1.0); + percepRough = GSAA_Filament(normals, percepRough, 0.15, 0.1); + if (0.0 == 1 && 1.0 > 0) + { + percepRough2 = GSAA_Filament(normals, percepRough2, 0.15, 0.1); + } + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float brdfRoughness2 = percepRough2 * percepRough2; + brdfRoughness2 = max(brdfRoughness2, 0.002); + float3 diffuse = poiFragData.baseColor; + float3 specular = 0; + float3 specular2 = 0; + float3 vSpecular = 0; + float3 vSpecular2 = 0; + float3 reflections = 0; + float3 environment = 0; + #if defined(POINT) || defined(SPOT) + float attenuation = lerp(poiLight.additiveShadow, 1, 0.0); + #else + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + #endif + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float pbrNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 1.0); + float pbrNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 1.0); + float pbrNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 1.0); + float3 pbrReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 1.0); + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + if (0.0 == 1) + { + float3 fresnelTerm = 1; + float3 specularTerm = 1; + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness2); + specular2 = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation * 1.0; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness2); + vSpecular2 += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * 1.0; + } + #endif + } + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _MochieReflCube, _MochieReflCube_HDR, pbrReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, pbrNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, pbrNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + reflections *= reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = max(specular + vSpecular, specular2 + vSpecular2); + environment += reflections; + diffuse *= poiLight.finalLighting; + poiFragData.finalColor = diffuse; + poiLight.finalLightAdd += environment; + } + #endif + #ifdef POI_CLEARCOAT + void poiClearCoat(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiMods poiMods) + { + float clearCoatMask = 0.111; + float smoothness = 1.0; + float reflectionMask = 1.0; + float specularMask = 1.0; + #if defined(PROP_CLEARCOATMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_ClearCoatMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + if (0.0 < 4) + { + clearCoatMask *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + if (0.0 > 0) + { + clearCoatMask = customBlend(clearCoatMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0) + { + clearCoatMask = 1 - clearCoatMask; + } + if (0.0) + { + smoothness = 1 - smoothness; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + #ifdef TPS_Penetrator + if (0.0) + { + clearCoatMask = lerp(0, clearCoatMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float3 specCol = 0.220916301; + float omr = unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + + if (1.0) + { + percepRough = GSAA_Filament(poiMesh.normals[0.0], percepRough, 0.15, 0.1); + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float3 diffuse = 0; + float3 specular = 0; + float3 vSpecular = 0; + float3 reflections = 0; + float3 environment = 0; + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float clearcoatNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 0.0); + float clearcoatNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 0.0); + float clearcoatNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 0.0); + float3 clearcoatReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 0.0); + GetSpecFresTerm(clearcoatNDotL, clearcoatNDotV, clearcoatNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float clearcoatVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 0.0); + float clearcoatVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 0.0); + GetSpecFresTerm(clearcoatVDotNL, clearcoatNDotV, clearcoatVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _ClearCoatFallback, _ClearCoatFallback_HDR, clearcoatReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, clearcoatNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, clearcoatNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = specular + vSpecular; + #ifdef UNITY_PASS_FORWARDBASE + environment += reflections; + #endif + diffuse += environment; + poiLight.finalLightAdd += saturate(diffuse * clearCoatMask); + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(1,1,1,1), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #if defined(MOCHIE_PBR) + MetallicAndSpecularFragDataInit(poiFragData, poiMesh, poiMods); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) + float3 emissionBaseReplace = 0;// + #endif + #ifdef _EMISSION + emissionBaseReplace += applyEmission(poiFragData, poiMesh, poiLight, poiCam, poiMods); + #endif + #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) + poiFragData.baseColor.rgb = lerp(poiFragData.baseColor.rgb, saturate(emissionBaseReplace), poiMax(emissionBaseReplace)); + #endif + + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #ifdef MOCHIE_PBR + MochieBRDF(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #ifdef POI_CLEARCOAT + poiClearCoat(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + #ifdef UNITY_PASS_FORWARDBASE + poiFragData.emission = max(poiFragData.emission * 1.0, 0); + poiFragData.finalColor = max(poiFragData.finalColor * 1.0, 0); + #endif + if (0.0 == POI_MODE_OPAQUE) + { + } + clip(poiFragData.alpha - 0.5); + if (0.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + poiFragData.finalColor += poiFragData.emission * poiMods.globalEmission; + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "Add" + Tags { "LightMode" = "ForwardAdd" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite Off + Cull Back + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_AddBlendOp], [_AddBlendOpAlpha] + Blend [_AddSrcBlend] [_AddDstBlend], [_AddSrcBlendAlpha] [_AddDstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define POI_CLEARCOAT + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_EMISSIONMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdadd_fullshadows + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_ADD + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + #ifdef MOCHIE_PBR + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _MochieMetallicMaps; + float _PBRMapsStochastic; + #endif + float4 _MochieMetallicMaps_ST; + float2 _MochieMetallicMapsPan; + float _MochieMetallicMapsUV; + float _MochieMetallicMapsStochastic; + float _MochieMetallicMapInvert; + float _MochieRoughnessMapInvert; + float _MochieReflectionMaskInvert; + float _MochieSpecularMaskInvert; + float _MochieMetallicMapsMetallicChannel; + float _MochieMetallicMapsRoughnessChannel; + float _MochieMetallicMapsReflectionMaskChannel; + float _MochieMetallicMapsSpecularMaskChannel; + float _PBRNormalSelect; + float _MochieReflectionTintThemeIndex; + float _MochieSpecularTintThemeIndex; + float _MochieRoughnessMultiplier; + float _MochieMetallicMultiplier; + float _MochieReflectionStrength; + float _MochieSpecularStrength; + float4 _MochieSpecularTint; + float4 _MochieReflectionTint; + float _MochieLitFallback; + float _IgnoreCastedShadows; + float _PBRSplitMaskSample; + float _PBRSplitMaskStochastic; + float4 _PBRMaskScaleTiling; + float _MochieMetallicMasksUV; + float4 _MochieMetallicMasksPan; + float _Specular2ndLayer; + float _MochieSpecularStrength2; + float _MochieRoughnessMultiplier2; + float _RefSpecFresnelStrength; + float _SFExposureOcclusion; + TextureCube _MochieReflCube; + float4 _MochieReflCube_HDR; + float _MochieForceFallback; + float _MochieGSAAEnabled; + float _PoiGSAAVariance; + float _PoiGSAAThreshold; + float _BRDFTPSReflectionMaskStrength; + float _BRDFTPSSpecularMaskStrength; + float _BRDFTPSDepthEnabled; + float _MochieMetallicGlobalMask; + float _MochieMetallicGlobalMaskBlendType; + float _MochieSmoothnessGlobalMask; + float _MochieSmoothnessGlobalMaskBlendType; + float _MochieReflectionStrengthGlobalMask; + float _MochieReflectionStrengthGlobalMaskBlendType; + float _MochieSpecularStrengthGlobalMask; + float _MochieSpecularStrengthGlobalMaskBlendType; + #endif + #ifdef POI_CLEARCOAT + #if defined(PROP_CLEARCOATMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _ClearCoatMaps; + float4 _ClearCoatMaps_ST; + float2 _ClearCoatMapsPan; + float _ClearCoatMapsUV; + float _ClearCoatMapsStochastic; + #endif + float _ClearCoatMapsClearCoatMaskChannel; + float _ClearCoatMapsRoughnessChannel; + float _ClearCoatMapsReflectionMaskChannel; + float _ClearCoatMapsSpecularMaskChannel; + float _ClearCoatBRDF; + float _ClearCoatReflectionStrength; + float _ClearCoatSpecularStrength; + float _ClearCoatStrength; + float _ClearCoatSmoothness; + float4 _ClearCoatReflectionTint; + float _ClearCoatReflectionTintThemeIndex; + float4 _ClearCoatSpecularTint; + float _ClearCoatSpecularTintThemeIndex; + float _ClearCoatSmoothnessMapInvert; + float _ClearCoatMaskInvert; + float _ClearCoatReflectionMaskInvert; + float _ClearCoatSpecularMaskInvert; + float _ClearCoatTPSMaskStrength; + float _ClearCoatTPSDepthMaskEnabled; + float _ClearCoatNormalSelect; + TextureCube _ClearCoatFallback; + float4 _ClearCoatFallback_HDR; + float _ClearCoatForceFallback; + float _ClearCoatLitFallback; + float _CCIgnoreCastedShadows; + float _ClearCoatGSAAEnabled; + float _ClearCoatGSAAVariance; + float _ClearCoatGSAAThreshold; + float _ClearcoatFresnelStrength; + float _ClearcoatExposureOcclusion; + float _ClearCoatGlobalMask; + float _ClearCoatGlobalMaskBlendType; + float _ClearCoatSmoothnessGlobalMask; + float _ClearCoatSmoothnessGlobalMaskBlendType; + float _ClearCoatReflectionStrengthGlobalMask; + float _ClearCoatReflectionStrengthGlobalMaskBlendType; + float _ClearCoatSpecularStrengthGlobalMask; + float _ClearCoatSpecularStrengthGlobalMaskBlendType; + #endif + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef VIGNETTE_MASKED + #ifdef _LIGHTINGMODE_REALISTIC + #if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) + #if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) + #define SUBTRACTIVE_LIGHTING 1 + #endif + #endif + float FadeShadows(float attenuation, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if HANDLE_SHADOWS_BLENDING_IN_GI || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + #if ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + attenuation = poiLight.attenuation; + #endif + float viewZ = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float shadowFadeDistance = UnityComputeShadowFadeDistance(poiMesh.worldPos, viewZ); + float shadowFade = UnityComputeShadowFade(shadowFadeDistance); + float bakedAttenuation = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + attenuation = UnityMixRealtimeAndBakedShadows(attenuation, bakedAttenuation, shadowFade); + #endif + return attenuation; + } + void ApplySubtractiveLighting(inout UnityIndirect indirectLight, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if SUBTRACTIVE_LIGHTING + poiLight.attenuation = FadeShadows(poiLight.attenuation, poiLight, poiMesh, poiCam); + float ndotl = saturate(dot(poiMesh.normals[0], _WorldSpaceLightPos0.xyz)); + float3 shadowedLightEstimate = ndotl * (1 - poiLight.attenuation) * _LightColor0.rgb; + float3 subtractedLight = indirectLight.diffuse - shadowedLightEstimate; + subtractedLight = max(subtractedLight, unity_ShadowColor.rgb); + subtractedLight = lerp(subtractedLight, indirectLight.diffuse, _LightShadowData.x); + indirectLight.diffuse = min(subtractedLight, indirectLight.diffuse); + #endif + } + UnityIndirect CreateIndirectLight(in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight) + { + UnityIndirect indirectLight; + indirectLight.diffuse = 0; + indirectLight.specular = 0; + #if defined(LIGHTMAP_ON) + indirectLight.diffuse = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, poiMesh.lightmapUV.xy)); + #if defined(DIRLIGHTMAP_COMBINED) + float4 lightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, poiMesh.lightmapUV.xy); + indirectLight.diffuse = DecodeDirectionalLightmap(indirectLight.diffuse, lightmapDirection, poiMesh.normals[1]); + #endif + ApplySubtractiveLighting(indirectLight, poiLight, poiMesh, poiCam); + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float3 dynamicLightDiffuse = DecodeRealtimeLightmap( + UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, poiMesh.lightmapUV.zw) + ); + #if defined(DIRLIGHTMAP_COMBINED) + float4 dynamicLightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_DynamicDirectionality, unity_DynamicLightmap, poiMesh.lightmapUV.zw); + indirectLight.diffuse += DecodeDirectionalLightmap(dynamicLightDiffuse, dynamicLightmapDirection, poiMesh.normals[1]); + #else + indirectLight.diffuse += dynamicLightDiffuse; + #endif + #endif + #if !defined(LIGHTMAP_ON) && !defined(DYNAMICLIGHTMAP_ON) + #if UNITY_LIGHT_PROBE_PROXY_VOLUME + if (unity_ProbeVolumeParams.x == 1) + { + indirectLight.diffuse = SHEvalLinearL0L1_SampleProbeVolume( + float4(poiMesh.normals[1], 1), poiMesh.worldPos + ); + indirectLight.diffuse = max(0, indirectLight.diffuse); + #if defined(UNITY_COLORSPACE_GAMMA) + indirectLight.diffuse = LinearToGammaSpace(indirectLight.diffuse); + #endif + } + else + { + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + } + #else + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + #endif + #endif + indirectLight.diffuse *= poiLight.occlusion; + return indirectLight; + } + #endif + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_REALISTIC + UnityLight light; + light.dir = poiLight.direction; + light.color = max(0, _LightColor0.rgb) * saturate(shadowAttenuation * attenuation * poiLight.detailShadow); + light.ndotl = poiLight.nDotLSaturated; + UnityIndirect indirectLight = (UnityIndirect)0; + #ifdef UNITY_PASS_FORWARDBASE + indirectLight = CreateIndirectLight(poiMesh, poiCam, poiLight); + #endif + #ifdef UNITY_PASS_FORWARDBASE + light.color = max(light.color * 1.0, 0); + light.color = max(light.color + 0.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse * 1.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse + 0.0, 0); + #endif + poiLight.rampedLightMap = poiLight.nDotLSaturated; + poiLight.finalLighting = max(POI_BRDF_PBS(1, 0, 0, 0, poiMesh.normals[1], poiCam.viewDir, light, indirectLight).xyz, _LightingMinLightBrightness); + #ifdef UNITY_PASS_FORWARDBASE + if (_UdonLightVolumeEnabled && 1.0) + { + float3 L0 = 0; + float3 L1r = 0; + float3 L1g = 0; + float3 L1b = 0; + #ifdef LIGHTMAP_ON + LightVolumeAdditiveSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + poiLight.finalLighting += clamp(LightVolumeEvaluate(poiMesh.normals[1], L0, L1r, L1g, L1b), _LightingMinLightBrightness, _LightingCap); + #endif + } + #endif + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + #if defined(MOCHIE_PBR) || defined(POI_CLEARCOAT) + float GSAA_Filament(float3 worldNormal, float perceptualRoughness, float gsaaVariance, float gsaaThreshold) + { + float3 du = ddx(worldNormal); + float3 dv = ddy(worldNormal); + float variance = gsaaVariance * (dot(du, du) + dot(dv, dv)); + float roughness = perceptualRoughness * perceptualRoughness; + float kernelRoughness = min(2.0 * variance, gsaaThreshold); + float squareRoughness = saturate(roughness * roughness + kernelRoughness); + return sqrt(sqrt(squareRoughness)); + } + float3 GetWorldReflections(float3 reflDir, float3 worldPos, float roughness) + { + float3 baseReflDir = reflDir; + reflDir = BoxProjection(reflDir, worldPos, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax); + float4 envSample0 = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, reflDir, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p0 = DecodeHDR(envSample0, unity_SpecCube0_HDR); + float interpolator = unity_SpecCube0_BoxMin.w; + + if (interpolator < 0.99999) + { + float3 refDirBlend = BoxProjection(baseReflDir, worldPos, unity_SpecCube1_ProbePosition, unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax); + float4 envSample1 = UNITY_SAMPLE_TEXCUBE_SAMPLER_LOD(unity_SpecCube1, unity_SpecCube0, refDirBlend, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p1 = DecodeHDR(envSample1, unity_SpecCube1_HDR); + p0 = lerp(p1, p0, interpolator); + } + return p0; + } + float3 GetReflections(in PoiCam poiCam, in PoiLight pl, in PoiMesh poiMesh, float roughness, float ForceFallback, float LightFallback, TextureCube reflectionCube, float4 hdrData, float3 reflectionDir) + { + float3 reflections = 0; + float3 lighting = pl.finalLighting; + if (ForceFallback == 0) + { + + if (SceneHasReflections()) + { + #ifdef UNITY_PASS_FORWARDBASE + reflections = GetWorldReflections(reflectionDir, poiMesh.worldPos.xyz, roughness); + #endif + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + reflections *= pl.occlusion; + return reflections; + } + float GetGGXTerm(float nDotL, float nDotV, float nDotH, float roughness) + { + float visibilityTerm = 0; + if (nDotL > 0) + { + float lambdaV = nDotL * (nDotV * (1 - roughness) + roughness); + float lambdaL = nDotV * (nDotL * (1 - roughness) + roughness); + visibilityTerm = 0.5f / (lambdaV + lambdaL + 1e-5f); + float a = nDotH * roughness; + float k = roughness / (1.0 - nDotH * nDotH + a * a+ 1e-5f); + float dotTerm = k * k * UNITY_INV_PI; + visibilityTerm *= dotTerm; + } + return visibilityTerm; + } + void GetSpecFresTerm(float nDotL, float nDotV, float nDotH, float lDotH, inout float3 specularTerm, inout float3 fresnelTerm, float3 specCol, float roughness) + { + specularTerm = GetGGXTerm(nDotL, nDotV, nDotH, roughness); + fresnelTerm = FresnelTerm(specCol, lDotH); + specularTerm = max(0, specularTerm * max(0.00001, nDotL)); + } + float GetRoughness(float smoothness) + { + float rough = 1 - smoothness; + rough *= 1.7 - 0.7 * rough; + return rough; + } + float SFVisibility(float brdfRoughness, float3 directColor, float NDotV, float ExposureOcclusion) + { + float Visibility = saturate(length(directColor + EPSILON) * (1.0/(ExposureOcclusion))); //Using direct color because I think it should be generally more forgiving + return saturate(pow(NDotV + Visibility, exp2(-16.0 * brdfRoughness - 1.0)) - 1.0 + Visibility); + } + #endif + #ifdef MOCHIE_PBR + void MetallicAndSpecularFragDataInit(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + float smoothness = 0.874; + float smoothness2 = 1.0; + float metallic = 0.729; + float specularMask = 1; + float reflectionMask = 1; + smoothness *= poiFragData.smoothness; + smoothness2 *= poiFragData.smoothness2; + metallic *= poiFragData.metallic; + specularMask *= poiFragData.specularMask; + reflectionMask *= poiFragData.reflectionMask; + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + + if (0.0) + { + float4 PBRSplitMask = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy, 0.0); + assignValueToVectorFromIndex(PBRMaps, 2.0, PBRSplitMask[2.0]); + assignValueToVectorFromIndex(PBRMaps, 3.0, PBRSplitMask[3.0]); + } + if (0.0 < 4) + { + metallic *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + smoothness2 *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + reflectionMask *= 1.0; + specularMask *= 1.0; + if (0.0) + { + metallic = 1 - metallic; + } + if (0.0) + { + smoothness = 1 - smoothness; + smoothness2 = 1 - smoothness2; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + poiFragData.smoothness *= smoothness; + poiFragData.smoothness2 *= smoothness2; + poiFragData.metallic *= metallic; + poiFragData.specularMask *= specularMask; + poiFragData.reflectionMask *= reflectionMask; + } + void MochieBRDF(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, inout PoiMods poiMods) + { + float smoothness = poiFragData.smoothness; + float smoothness2 = poiFragData.smoothness2; + float metallic = poiFragData.metallic; + float specularMask = poiFragData.specularMask; + float reflectionMask = poiFragData.reflectionMask; + if (0.0 > 0) + { + metallic = customBlend(metallic, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + smoothness2 = customBlend(smoothness2, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef TPS_Penetrator + if (0.0) + { + reflectionMask = lerp(0, reflectionMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + specularMask = lerp(0, specularMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float roughness2 = GetRoughness(smoothness2); + float3 specCol = lerp(unity_ColorSpaceDielectricSpec.rgb, poiFragData.baseColor, metallic); + float omr = unity_ColorSpaceDielectricSpec.a - metallic * unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + float percepRough2 = 1 - smoothness2; + + if (1.0) + { + float3 normals = lerp(poiMesh.normals[0], poiMesh.normals[1], 1.0); + percepRough = GSAA_Filament(normals, percepRough, 0.15, 0.1); + if (0.0 == 1 && 1.0 > 0) + { + percepRough2 = GSAA_Filament(normals, percepRough2, 0.15, 0.1); + } + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float brdfRoughness2 = percepRough2 * percepRough2; + brdfRoughness2 = max(brdfRoughness2, 0.002); + float3 diffuse = poiFragData.baseColor; + float3 specular = 0; + float3 specular2 = 0; + float3 vSpecular = 0; + float3 vSpecular2 = 0; + float3 reflections = 0; + float3 environment = 0; + #if defined(POINT) || defined(SPOT) + float attenuation = lerp(poiLight.additiveShadow, 1, 0.0); + #else + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + #endif + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float pbrNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 1.0); + float pbrNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 1.0); + float pbrNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 1.0); + float3 pbrReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 1.0); + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + if (0.0 == 1) + { + float3 fresnelTerm = 1; + float3 specularTerm = 1; + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness2); + specular2 = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation * 1.0; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness2); + vSpecular2 += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * 1.0; + } + #endif + } + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _MochieReflCube, _MochieReflCube_HDR, pbrReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, pbrNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, pbrNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + reflections *= reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = max(specular + vSpecular, specular2 + vSpecular2); + environment += reflections; + diffuse *= poiLight.finalLighting; + poiFragData.finalColor = diffuse; + poiLight.finalLightAdd += environment; + } + #endif + #ifdef POI_CLEARCOAT + void poiClearCoat(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiMods poiMods) + { + float clearCoatMask = 0.111; + float smoothness = 1.0; + float reflectionMask = 1.0; + float specularMask = 1.0; + #if defined(PROP_CLEARCOATMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_ClearCoatMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + if (0.0 < 4) + { + clearCoatMask *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + if (0.0 > 0) + { + clearCoatMask = customBlend(clearCoatMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0) + { + clearCoatMask = 1 - clearCoatMask; + } + if (0.0) + { + smoothness = 1 - smoothness; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + #ifdef TPS_Penetrator + if (0.0) + { + clearCoatMask = lerp(0, clearCoatMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float3 specCol = 0.220916301; + float omr = unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + + if (1.0) + { + percepRough = GSAA_Filament(poiMesh.normals[0.0], percepRough, 0.15, 0.1); + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float3 diffuse = 0; + float3 specular = 0; + float3 vSpecular = 0; + float3 reflections = 0; + float3 environment = 0; + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float clearcoatNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 0.0); + float clearcoatNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 0.0); + float clearcoatNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 0.0); + float3 clearcoatReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 0.0); + GetSpecFresTerm(clearcoatNDotL, clearcoatNDotV, clearcoatNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float clearcoatVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 0.0); + float clearcoatVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 0.0); + GetSpecFresTerm(clearcoatVDotNL, clearcoatNDotV, clearcoatVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _ClearCoatFallback, _ClearCoatFallback_HDR, clearcoatReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, clearcoatNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, clearcoatNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = specular + vSpecular; + #ifdef UNITY_PASS_FORWARDBASE + environment += reflections; + #endif + diffuse += environment; + poiLight.finalLightAdd += saturate(diffuse * clearCoatMask); + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(1,1,1,1), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #if defined(MOCHIE_PBR) + MetallicAndSpecularFragDataInit(poiFragData, poiMesh, poiMods); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #ifdef MOCHIE_PBR + MochieBRDF(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #ifdef POI_CLEARCOAT + poiClearCoat(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + if (0.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + if (4.0 == 4) + { + poiFragData.alpha = saturate(poiFragData.alpha * 10.0); + } + if (0.0 != POI_MODE_TRANSPARENT) + { + poiFragData.finalColor *= poiFragData.alpha; + } + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Back + AlphaToMask Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define POI_CLEARCOAT + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_EMISSIONMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_instancing + #pragma multi_compile_shadowcaster + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_SHADOW + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(1,1,1,1), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + poiFragData.finalColor = poiFragData.baseColor; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "META" + Tags { "LightMode" = "Meta" } + ZWrite [_ZWrite] + Cull Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define POI_CLEARCOAT + #define VIGNETTE_MASKED + #define _EMISSION + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_EMISSIONMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_instancing + #pragma multi_compile_fragment _ VERTEXLIGHT_ON + #define POI_PASS_META + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + #include "UnityMetaPass.cginc" + #ifndef VRC_LIGHT_VOLUMES_INCLUDED + #define VRC_LIGHT_VOLUMES_INCLUDED + #define VRCLV_VERSION 2 + #define VRCLV_MAX_VOLUMES_COUNT 32 + #define VRCLV_MAX_LIGHTS_COUNT 128 + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + cbuffer LightVolumeUniforms { + #endif + uniform float _UdonLightVolumeEnabled; + uniform float _UdonLightVolumeVersion; + uniform float _UdonLightVolumeCount; + uniform float _UdonLightVolumeAdditiveMaxOverdraw; + uniform float _UdonLightVolumeAdditiveCount; + uniform float _UdonLightVolumeProbesBlend; + uniform float _UdonLightVolumeSharpBounds; + uniform float4x4 _UdonLightVolumeInvWorldMatrix[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeRotation[VRCLV_MAX_VOLUMES_COUNT * 2]; // Legacy! Used in this version to have back compatibility with older worlds. Array commented above will be used in future releases! Legacy! + uniform float3 _UdonLightVolumeInvLocalEdgeSmooth[VRCLV_MAX_VOLUMES_COUNT]; + uniform float3 _UdonLightVolumeUvw[VRCLV_MAX_VOLUMES_COUNT * 6]; // Legacy! AABB Bounds of islands on the 3D Texture atlas. Array commented above will be used in future releases! Legacy! + uniform float4 _UdonLightVolumeOcclusionUvw[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeColor[VRCLV_MAX_VOLUMES_COUNT]; + uniform float _UdonPointLightVolumeCount; + uniform float _UdonPointLightVolumeCubeCount; + uniform float4 _UdonPointLightVolumePosition[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeColor[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeDirection[VRCLV_MAX_LIGHTS_COUNT]; + uniform float3 _UdonPointLightVolumeCustomID[VRCLV_MAX_LIGHTS_COUNT]; + uniform float _UdonLightBrightnessCutoff; + uniform float _UdonLightVolumeOcclusionCount; + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + } + #endif + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + uniform Texture3D _UdonLightVolume; + uniform SamplerState sampler_UdonLightVolume; + uniform Texture2DArray _UdonPointLightVolumeTexture; + #define LV_SAMPLE(tex, uvw) tex.SampleLevel(sampler_UdonLightVolume, uvw, 0) + #else + #define LV_SAMPLE(tex, uvw) float4(0,0,0,0) + #endif + #define LV_PI 3.141592653589793f + #define LV_PI2 6.283185307179586f + float LV_Smoothstep01(float x) { + return x * x * (3 - 2 * x); + } + float3 LV_MultiplyVectorByQuaternion(float3 v, float4 q) { + float3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); + } + float3 LV_MultiplyVectorByMatrix2x3(float3 v, float3 r0, float3 r1) { + float3 r2 = cross(r0, r1); + return float3(dot(v, r0), dot(v, r1), dot(v, r2)); + } + float LV_FastAcos(float x) { + float absX = abs(x); + float res = -0.156583f * absX + LV_PI * 0.5f; + res *= sqrt(1.0f - absX); + return (x >= 0) ? res : (LV_PI - res); + } + float LV_DistributionGGX(float NoH, float roughness) { + float f = (roughness - 1) * ((roughness + 1) * (NoH * NoH)) + 1; + return (roughness * roughness) / ((float) LV_PI * f * f); + } + bool LV_PointLocalAABB(float3 localUVW) { + return all(abs(localUVW) <= 0.5); + } + float3 LV_LocalFromVolume(uint volumeID, float3 worldPos) { + return mul(_UdonLightVolumeInvWorldMatrix[volumeID], float4(worldPos, 1.0)).xyz; + } + float LV_EvaluateSH(float L0, float3 L1, float3 n) { + return L0 + dot(L1, n); + } + float4 LV_SampleCubemapArray(uint id, float3 dir) { + float3 absDir = abs(dir); + float2 uv; + uint face; + if (absDir.x >= absDir.y && absDir.x >= absDir.z) { + face = dir.x > 0 ? 0 : 1; + uv = float2((dir.x > 0 ? -dir.z : dir.z), -dir.y) * rcp(absDir.x); + } else if (absDir.y >= absDir.z) { + face = dir.y > 0 ? 2 : 3; + uv = float2(dir.x, (dir.y > 0 ? dir.z : -dir.z)) * rcp(absDir.y); + } else { + face = dir.z > 0 ? 4 : 5; + uv = float2((dir.z > 0 ? dir.x : -dir.x), -dir.y) * rcp(absDir.z); + } + float3 uvid = float3(uv * 0.5 + 0.5, id * 6 + face); + return LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + } + float4 LV_ProjectQuadLightIrradianceSH(float3 shadingPosition, float3 lightVertices[4]) { + [unroll] for (uint edge0 = 0; edge0 < 4; edge0++) { + lightVertices[edge0] = normalize(lightVertices[edge0] - shadingPosition); + } + const float3 zhDir0 = float3(0.866025, -0.500001, -0.000004); + const float3 zhDir1 = float3(-0.759553, 0.438522, -0.480394); + const float3 zhDir2 = float3(-0.000002, 0.638694, 0.769461); + const float3 zhWeightL1y = float3(2.1995339f, 2.50785367f, 1.56572711f); + const float3 zhWeightL1z = float3(-1.82572523f, -2.08165037f, 0.00000000f); + const float3 zhWeightL1x = float3(2.42459869f, 1.44790525f, 0.90397552f); + float solidAngle = 0.0; + float3 surfaceIntegral = 0.0; + [loop] for (uint edge1 = 0; edge1 < 4; edge1++) { + uint next = (edge1 + 1) % 4; + uint prev = (edge1 + 4 - 1) % 4; + float3 prevVert = lightVertices[prev]; + float3 thisVert = lightVertices[edge1]; + float3 nextVert = lightVertices[next]; + float3 a = cross(thisVert, prevVert); + float3 b = cross(thisVert, nextVert); + float lenA = length(a); + float lenB = length(b); + solidAngle += LV_FastAcos(clamp(dot(a, b) / (lenA * lenB), -1, 1)); + float3 mu = b * rcp(lenB); + float cosGamma = dot(thisVert, nextVert); + float gamma = LV_FastAcos(clamp(cosGamma, -1, 1)); + surfaceIntegral.x += gamma * dot(zhDir0, mu); + surfaceIntegral.y += gamma * dot(zhDir1, mu); + surfaceIntegral.z += gamma * dot(zhDir2, mu); + } + solidAngle = solidAngle - LV_PI2; + surfaceIntegral *= 0.5; + const float normalizationL0 = 0.5f * sqrt(1.0f / LV_PI); + float l0 = normalizationL0 * solidAngle; + float l1y = dot(zhWeightL1y, surfaceIntegral); + float l1z = dot(zhWeightL1z, surfaceIntegral); + float l1x = dot(zhWeightL1x, surfaceIntegral); + const float cosineKernelL0 = LV_PI; // (1) + const float cosineKernelL1 = LV_PI2 / 3.0f; // (1) + const float oneOverPi = 1.0f / LV_PI; // (2) + const float normalizationL1 = 0.5f * sqrt(3.0f / LV_PI); // (3) + const float weightL0 = cosineKernelL0 * normalizationL0 * oneOverPi; // (1), (2), (3) + const float weightL1 = cosineKernelL1 * normalizationL1 * oneOverPi; // (1), (2), (3) + l0 *= weightL0; + l1y *= weightL1; + l1z *= weightL1; + l1x *= weightL1; + return float4(l1x, l1y, l1z, l0); + } + void LV_QuadLight(float3 worldPos, float3 centroidPos, float4 rotationQuat, float2 size, float3 color, float sqMaxDist, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 lightToWorldPos = worldPos - centroidPos; + float3 normal = LV_MultiplyVectorByQuaternion(float3(0, 0, 1), rotationQuat); + if (dot(normal, lightToWorldPos) < 0.0) return; + float sqCutoffDist = sqMaxDist - dot(lightToWorldPos, lightToWorldPos); + color.rgb *= saturate(sqCutoffDist / sqMaxDist) * LV_PI * occlusion; + float2 halfSize = size * 0.5f; + float3 xAxis = LV_MultiplyVectorByQuaternion(float3(1, 0, 0), rotationQuat); + float3 yAxis = cross(normal, xAxis); + float3 verts[4]; + verts[0] = centroidPos + (-halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[1] = centroidPos + ( halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[2] = centroidPos + ( halfSize.x * xAxis) + (-halfSize.y * yAxis); + verts[3] = centroidPos + (-halfSize.x * xAxis) + (-halfSize.y * yAxis); + float4 areaLightSH = LV_ProjectQuadLightIrradianceSH(worldPos, verts); + float lenL1 = length(areaLightSH.xyz); + if (lenL1 > areaLightSH.w) areaLightSH.xyz *= areaLightSH.w / lenL1; + L0 += areaLightSH.w * color.rgb; + L1r += areaLightSH.xyz * color.r; + L1g += areaLightSH.xyz * color.g; + L1b += areaLightSH.xyz * color.b; + count++; + } + float3 LV_PointLightAttenuation(float sqdist, float sqlightSize, float3 color, float brightnessCutoff, float sqMaxDist) { + float mask = saturate(1 - sqdist / sqMaxDist); + return mask * mask * color * sqlightSize / (sqdist + sqlightSize); + } + float LV_PointLightSolidAngle(float sqdist, float sqlightSize) { + return saturate(sqrt(sqdist / (sqlightSize + sqdist))); + } + void LV_SphereLight(float sqdist, float3 dirN, float sqlightSize, float3 color, float occlusion, float sqMaxDist, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 att = LV_PointLightAttenuation(sqdist, sqlightSize, color, _UdonLightBrightnessCutoff, sqMaxDist); + float3 l0 = att * occlusion; + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLight(float sqdist, float3 dirN, float sqlightSize, float3 att, float spotMask, float cosAngle, float coneFalloff, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float smoothedCone = LV_Smoothstep01(saturate(spotMask * coneFalloff)); + float3 l0 = att * (occlusion * smoothedCone); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * saturate(1 - cosAngle)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightCookie(float sqdist, float3 dirN, float sqlightSize, float3 att, float4 lightRot, float tanAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 localDir = LV_MultiplyVectorByQuaternion(-dirN, lightRot); + float2 uv = localDir.xy * rcp(localDir.z * tanAngle); + if ( + localDir.z <= 0.0 || // Culling by direction + abs(uv.x) > 1.0 || abs(uv.y) > 1.0 // Culling by UV + ) return; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 - customId - 1; + float3 uvid = float3(uv * 0.5 + 0.5, id); + float angleSize = saturate(rsqrt(1 + tanAngle * tanAngle)); + float4 cookie = LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + float3 l0 = att * cookie.rgb * (cookie.a * occlusion); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * (1 - angleSize)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightAttenuationLUT(float sqdist, float3 dirN, float sqlightSize, float3 color, float spotMask, float cosAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float dirRadius = sqdist * abs(sqlightSize); + float spot = 1 - saturate(spotMask * rcp(1 - cosAngle)); + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId - 1; + float3 uvid = float3(sqrt(float2(spot, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * occlusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } + void LV_PointLight(uint id, float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 customID_data = _UdonPointLightVolumeCustomID[id]; + int shadowId = (int) customID_data.y; // Shadowmask id + int customId = (int) customID_data.x; // Custom Texture ID + float sqrRange = customID_data.z; // Squared culling distance + float4 pos = _UdonPointLightVolumePosition[id]; // Light position and inversed squared range + float3 dir = pos.xyz - worldPos; + float sqlen = max(dot(dir, dir), 1e-6); + if (sqlen > sqrRange) return; // Early distance based culling + float3 dirN = dir * rsqrt(sqlen); + float lightOcclusion = 1; + if (_UdonLightVolumeOcclusionCount != 0 && shadowId >= 0) { + lightOcclusion = dot(occlusion, float4(shadowId == 0, shadowId == 1, shadowId == 2, shadowId == 3)); + } + float4 color = _UdonPointLightVolumeColor[id]; // Color, angle + float4 ldir = _UdonPointLightVolumeDirection[id]; // Dir + falloff or Rotation + if (pos.w < 0) { // It is a spot light + float angle = color.w; + float spotMask = dot(ldir.xyz, -dirN) - angle; + if(customId >= 0 && spotMask < 0) return; // Spot cone based culling + if (customId > 0) { // If it uses Attenuation LUT + LV_SphereSpotLightAttenuationLUT(sqlen, dirN, -pos.w, color.rgb, spotMask, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + float3 att = LV_PointLightAttenuation(sqlen, -pos.w, color.rgb, _UdonLightBrightnessCutoff, sqrRange); + if (customId < 0) { // If uses cookie + LV_SphereSpotLightCookie(sqlen, dirN, -pos.w, att, ldir, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + LV_SphereSpotLight(sqlen, dirN, -pos.w, att, spotMask, angle, ldir.w, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + } else if (color.w <= 1.5f) { // It is a point light + if (customId > 0) { // Using LUT + float invSqRange = abs(pos.w); // Sign of range defines if it's point light (positive) or a spot light (negative) + float dirRadius = sqlen * invSqRange; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId; + float3 uvid = float3(sqrt(float2(0, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * lightOcclusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } else { // If it uses default parametric attenuation + float3 l0 = 0, l1r = 0, l1g = 0, l1b = 0; + LV_SphereLight(sqlen, dirN, pos.w, color.rgb, lightOcclusion, sqrRange, l0, l1r, l1g, l1b, count); + float3 cubeColor = 1; + if (customId < 0) { // If it uses a cubemap + uint id = -customId - 1; // Cubemap ID starts from zero and should not take in count texture array slices count. + cubeColor = LV_SampleCubemapArray(id, LV_MultiplyVectorByQuaternion(dirN, ldir)).xyz; + } + L0 += l0 * cubeColor; + L1r += l1r * cubeColor.r; + L1g += l1g * cubeColor.g; + L1b += l1b * cubeColor.b; + } + } else { // It is an area light + LV_QuadLight(worldPos, pos.xyz, ldir, float2(pos.w, color.w - 2.0f), color.rgb, sqrRange, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + void LV_SampleLightVolumeTex(float3 uvw0, float3 uvw1, float3 uvw2, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b) { + float4 tex0 = LV_SAMPLE(_UdonLightVolume, uvw0); + float4 tex1 = LV_SAMPLE(_UdonLightVolume, uvw1); + float4 tex2 = LV_SAMPLE(_UdonLightVolume, uvw2); + L0 = tex0.rgb; + L1r = float3(tex1.r, tex2.r, tex0.a); + L1g = float3(tex1.g, tex2.g, tex1.a); + L1b = float3(tex1.b, tex2.b, tex2.a); + } + float LV_BoundsMask(float3 localUVW, float3 invLocalEdgeSmooth) { + float3 distToMin = (localUVW + 0.5) * invLocalEdgeSmooth; + float3 distToMax = (0.5 - localUVW) * invLocalEdgeSmooth; + float3 fade = saturate(min(distToMin, distToMax)); + return fade.x * fade.y * fade.z; + } + void LV_SampleLightProbe(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz; + L1g += unity_SHAg.xyz; + L1b += unity_SHAb.xyz; + } + void LV_SampleLightProbeDering(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz * 0.565f; + L1g += unity_SHAg.xyz * 0.565f; + L1b += unity_SHAb.xyz * 0.565f; + } + void LV_SampleVolume(uint id, float3 localUVW, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + float3 uvw0 = uvwScaled + _UdonLightVolumeUvw[uvwID].xyz; + float3 uvw1 = uvwScaled + _UdonLightVolumeUvw[uvwID + 2].xyz; + float3 uvw2 = uvwScaled + _UdonLightVolumeUvw[uvwID + 4].xyz; + float3 l0, l1r, l1g, l1b; + LV_SampleLightVolumeTex(uvw0, uvw1, uvw2, l0, l1r, l1g, l1b); + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + occlusion = 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + occlusion = 1; + } + float4 color = _UdonLightVolumeColor[id]; + L0 += l0 * color.rgb; + l1r *= color.r; + l1g *= color.g; + l1b *= color.b; + if (color.a != 0) { + float3 r0 = _UdonLightVolumeRotation[id * 2].xyz; + float3 r1 = _UdonLightVolumeRotation[id * 2 + 1].xyz; + L1r += LV_MultiplyVectorByMatrix2x3(l1r, r0, r1); + L1g += LV_MultiplyVectorByMatrix2x3(l1g, r0, r1); + L1b += LV_MultiplyVectorByMatrix2x3(l1b, r0, r1); + } else { + L1r += l1r; + L1g += l1g; + L1b += l1b; + } + } + float4 LV_SampleVolumeOcclusion(uint id, float3 localUVW) { + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + return 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + return 1; + } + } + void LV_PointLightVolumeSH(float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + uint pointCount = min((uint) _UdonPointLightVolumeCount, VRCLV_MAX_LIGHTS_COUNT); + if (pointCount == 0) return; + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_LIGHTS_COUNT); + uint pcount = 0; // Point lights counter + [loop] for (uint pid = 0; pid < pointCount && pcount < maxOverdraw; pid++) { + LV_PointLight(pid, worldPos, occlusion, L0, L1r, L1g, L1b, pcount); + } + } + void LV_LightVolumeSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + if (volumesCount == 0) { // Legacy! Fallback to default light probes if Light Volume are not enabled or a version is too old to have a support. Legacy! + LV_SampleLightProbe(L0, L1r, L1g, L1b); + return; + } + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + bool lightProbesBlend = _UdonLightVolumeProbesBlend; + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + [loop] for (uint id = 0; id < volumesCount; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA && lightProbesBlend) { + LV_SampleLightProbe(L0, L1r, L1g, L1b); + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + float3 L0_A = 0; + float3 L1r_A = 0; + float3 L1g_A = 0; + float3 L1b_A = 0; + float4 occlusion_A = 1; + LV_SampleVolume(volumeID_A, localUVW_A, L0_A, L1r_A, L1g_A, L1b_A, occlusion_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || isNoA || (_UdonLightVolumeSharpBounds && isNoB)) { // Returning SH A result if it's the center of mask or out of bounds + L0 += L0_A; + L1r += L1r_A; + L1g += L1g_A; + L1b += L1b_A; + occlusion = occlusion_A; + occlusion *= mOcclusion; + return; + } + float3 L0_B = 0; + float3 L1r_B = 0; + float3 L1g_B = 0; + float3 L1b_B = 0; + float4 occlusion_B = 1; + if (isNoB && lightProbesBlend) { // No Volume found and light volumes blending enabled + LV_SampleLightProbe(L0_B, L1r_B, L1g_B, L1b_B); + } else { // Blending Volume A and Volume B + localUVW_B = isNoB ? localUVW : localUVW_B; + volumeID_B = isNoB ? volumesCount - 1 : volumeID_B; + LV_SampleVolume(volumeID_B, localUVW_B, L0_B, L1r_B, L1g_B, L1b_B, occlusion_B); + } + occlusion = lerp(occlusion_B, occlusion_A, mask); + occlusion *= mOcclusion; + L0 += lerp(L0_B, L0_A, mask); + L1r += lerp(L1r_B, L1r_A, mask); + L1g += lerp(L1g_B, L1g_A, mask); + L1b += lerp(L1b_B, L1b_A, mask); + } + void LV_LightVolumeAdditiveSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + if (additiveCount == 0 && (uint) _UdonPointLightVolumeCount == 0) return; // Legacy! + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW for Y Axis and Free rotations + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + uint count = min(_UdonLightVolumeOcclusionCount == 0 ? additiveCount : volumesCount, VRCLV_MAX_VOLUMES_COUNT); // Only use all volumes if occlusion volumes are enabled + [loop] for (uint id = 0; id < count; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA || _UdonLightVolumeOcclusionCount == 0) { + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + occlusion = LV_SampleVolumeOcclusion(volumeID_A, localUVW_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || (_UdonLightVolumeSharpBounds && isNoB)) { + occlusion *= mOcclusion; + return; // Returning A result if it's the center of mask or out of bounds + } + if (isNoB) occlusion = lerp(1, occlusion, mask); + else occlusion = lerp(LV_SampleVolumeOcclusion(volumeID_B, localUVW_B), occlusion, mask); + occlusion *= mOcclusion; + } + float3 LightVolumeSpecular(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specColor = max(float3(dot(reflect(-L1r, worldNormal), viewDir), dot(reflect(-L1g, worldNormal), viewDir), dot(reflect(-L1b, worldNormal), viewDir)), 0); + float3 rDir = normalize(normalize(L1r) + viewDir); + float3 gDir = normalize(normalize(L1g) + viewDir); + float3 bDir = normalize(normalize(L1b) + viewDir); + float rNh = saturate(dot(worldNormal, rDir)); + float gNh = saturate(dot(worldNormal, gDir)); + float bNh = saturate(dot(worldNormal, bDir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float rSpec = LV_DistributionGGX(rNh, roughExp); + float gSpec = LV_DistributionGGX(gNh, roughExp); + float bSpec = LV_DistributionGGX(bNh, roughExp); + float3 specs = (rSpec + gSpec + bSpec) * f0; + float3 coloredSpecs = specs * specColor; + float3 a = coloredSpecs + specs * L0; + float3 b = coloredSpecs * 3; + return max(lerp(a, b, smoothness) * 0.5f, 0.0); + } + float3 LightVolumeSpecular(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecular(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeSpecularDominant(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 dominantDir = L1r + L1g + L1b; + float3 dir = normalize(normalize(dominantDir) + viewDir); + float nh = saturate(dot(worldNormal, dir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float spec = LV_DistributionGGX(nh, roughExp); + return max(spec * L0 * f0, 0.0) * 1.5f; + } + float3 LightVolumeSpecularDominant(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecularDominant(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeEvaluate(float3 worldNormal, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + return float3(LV_EvaluateSH(L0.r, L1r, worldNormal), LV_EvaluateSH(L0.g, L1g, worldNormal), LV_EvaluateSH(L0.b, L1b, worldNormal)); + } + void LightVolumeSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled == 0) { + LV_SampleLightProbeDering(L0, L1r, L1g, L1b); + } else { + float4 occlusion = 1; + LV_LightVolumeSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + void LightVolumeAdditiveSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled != 0) { + float4 occlusion = 1; + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + float3 LightVolumeSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float3 LightVolumeAdditiveSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return 0; + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float LightVolumesEnabled() { + return _UdonLightVolumeEnabled; + } + float LightVolumesVersion() { + return _UdonLightVolumeVersion == 0 ? _UdonLightVolumeEnabled : _UdonLightVolumeVersion; + } + #endif + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float _GIEmissionMultiplier; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + #ifdef _EMISSION + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMap; + #endif + float4 _EmissionMap_ST; + float2 _EmissionMapPan; + float _EmissionMapUV; + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMask; + #endif + float4 _EmissionMask_ST; + float2 _EmissionMaskPan; + float _EmissionMaskUV; + float _EmissionMaskInvert; + float _EmissionMaskChannel; + float _EmissionMask0GlobalMask; + float _EmissionMask0GlobalMaskBlendType; + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionScrollingCurve; + #endif + float4 _EmissionScrollingCurve_ST; + float _EmissionFluorescence; + float4 _EmissionColor; + float _EmissionBaseColorAsMap; + float _EmissionStrength; + float _EmissionHueShiftEnabled; + float _EmissionHueShiftColorSpace; + float _EmissionHueSelectOrShift; + float _EmissionSaturation; + float _EmissionHueShift; + float _EmissionHueShiftSpeed; + float _EmissionCenterOutEnabled; + float _EmissionCenterOutSpeed; + float _EnableGITDEmission; + float _GITDEWorldOrMesh; + float _GITDEMinEmissionMultiplier; + float _GITDEMaxEmissionMultiplier; + float _GITDEMinLight; + float _GITDEMaxLight; + float _EmissionBlinkingEnabled; + float _EmissiveBlink_Min; + float _EmissiveBlink_Max; + float _EmissiveBlink_Velocity; + float _EmissionBlinkingOffset; + float _ScrollingEmission; + float4 _EmissiveScroll_Direction; + float _EmissiveScroll_Width; + float _EmissiveScroll_Velocity; + float _EmissiveScroll_Interval; + float _EmissionScrollingOffset; + float _EmissionReplace0; + float _EmissionScrollingVertexColor; + float _EmissionScrollingUseCurve; + float _EmissionColorThemeIndex; + float _EmissionAL0Enabled; + float2 _EmissionAL0StrengthMod; + float _EmissionAL0StrengthBand; + float2 _AudioLinkEmission0CenterOut; + float _AudioLinkEmission0CenterOutSize; + float _AudioLinkEmission0CenterOutBand; + float _AudioLinkEmission0CenterOutDuration; + float2 _EmissionAL0Multipliers; + float _EmissionAL0MultipliersBand; + #endif + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + float calculateGlowInTheDark(in float minLight, in float maxLight, in float minEmissionMultiplier, in float maxEmissionMultiplier, in float enabled, in float worldOrMesh, in PoiLight poiLight) + { + float glowInTheDarkMultiplier = 1; + if (enabled) + { + float3 lightValue = worldOrMesh ? calculateluminance(poiLight.finalLighting.rgb) : calculateluminance(poiLight.directColor.rgb); + float gitdeAlpha = saturate(inverseLerp(minLight, maxLight, lightValue)); + glowInTheDarkMultiplier = lerp(minEmissionMultiplier, maxEmissionMultiplier, gitdeAlpha); + } + return glowInTheDarkMultiplier; + } + float calculateScrollingEmission(in float3 direction, in float velocity, in float interval, in float scrollWidth, float offset, float3 position) + { + scrollWidth = max(scrollWidth, 0); + float phase = 0; + phase = dot(position, direction); + phase -= (_Time.y + offset) * velocity; + phase /= interval; + phase -= floor(phase); + phase = saturate(phase); + return (pow(phase, scrollWidth) + pow(1 - phase, scrollWidth * 4)) * 0.5; + } + float calculateBlinkingEmission(in float blinkMin, in float blinkMax, in float blinkVelocity, float offset) + { + float amplitude = (blinkMax - blinkMin) * 0.5f; + float base = blinkMin + amplitude; + return sin((_Time.y + offset) * blinkVelocity) * amplitude + base; + } + void applyALEmmissionStrength(in PoiMods poiMods, inout float emissionStrength, in float2 emissionStrengthMod, in float emissionStrengthBand, in float2 _EmissionALMultipliers, in float _EmissionALMultipliersBand, in float enabled) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + emissionStrength += lerp(emissionStrengthMod.x, emissionStrengthMod.y, poiMods.audioLink[emissionStrengthBand]); + emissionStrength *= lerp(_EmissionALMultipliers.x, _EmissionALMultipliers.y, poiMods.audioLink[_EmissionALMultipliersBand]); + } + #endif + } + void applyALCenterOutEmission(in PoiMods poiMods, in float nDotV, inout float emissionStrength, in float size, in float band, in float2 emissionToAdd, in float enabled, in float duration) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + float intensity; + [flatten] + if (duration >= 0) + { + intensity = getBandAtTime(band, saturate(remap(nDotV, 1, 0, 0, duration)), size); + } + else + { + duration *= -1; + intensity = getBandAtTime(band, saturate(remap(pow(nDotV, 2), 0, 1 + duration, 0, duration)), size); + } + emissionStrength += lerp(emissionToAdd[0], emissionToAdd[1], intensity); + } + #endif + } + #ifdef _EMISSION + float3 applyEmission(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiLight poiLight, in PoiCam poiCam, in PoiMods poiMods) + { + float3 emission0 = 0; + float emissionAlpha = 1; + float emissionStrength0 = 1.0; + float3 emissionColor0 = 0; + applyALEmmissionStrength(poiMods, emissionStrength0, float4(0,0,0,0), 0.0, float4(1,1,0,0), 0.0, 0.0); + applyALCenterOutEmission(poiMods, poiLight.nDotV, emissionStrength0, 0.0, 0.0, float4(0,0,0,0), 0.0, 1.0); + float glowInTheDarkMultiplier0 = calculateGlowInTheDark(0.0, 1.0, 1.0, 0.0, 0.0, 0.0, poiLight); + #ifdef POI_GRABPASS + float mixBaseColor = 0; + #else + float mixBaseColor = 0.0; + #endif + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + float4 emissionTex = 0; + if (!0.0) + { + emissionTex = POI2D_SAMPLER_PAN(_EmissionMap, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + } + else + { + emissionTex = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMap, _MainTex, ((.5 + poiLight.nDotV * .5) * float4(1,1,0,0).xy) + _Time.x * 5.0); + } + emissionColor0 = emissionTex.rgb * lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, _EmissionColor.rgb, 0.0); + emissionAlpha = emissionTex.a; + #else + emissionColor0 = lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, _EmissionColor.rgb, 0.0); + #endif + float3 inverseLighting = saturate((1.0 - poiLight.directColor) * sqrt(poiLight.directColor)); + emissionColor0 = lerp(emissionColor0.rgb, emissionColor0.rgb * inverseLighting, 0.0); + emissionStrength0 *= emissionAlpha; + if (0.0) + { + float3 pos = poiMesh.localPos; + if (0.0) + { + pos = poiMesh.vertexColor.rgb; + } + if (0.0) + { + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + emissionStrength0 *= UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionScrollingCurve, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + (dot(pos, float4(0,-10,0,0).xyz) * 20.0) + _Time.x * 10.0).r; + #endif + } + else + { + emissionStrength0 *= calculateScrollingEmission(float4(0,-10,0,0).xyz, 10.0, 20.0, 10.0, 0.0, pos); + } + } + if (0.0) + { + emissionStrength0 *= calculateBlinkingEmission(0.0, 1.0, 4.0, 0.0); + } + if(0.0) + { + emissionColor0 = hueShift(emissionColor0, frac(0.0 + 0.0 * _Time.x), 0.0, 1.0); + emissionColor0 = lerp(emissionColor0, dot(emissionColor0, float3(0.3, 0.59, 0.11)), - (0.0)); + } + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + float emissionMask0 = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + _Time.x * float4(0,0,0,0))[0.0]; + #else + float emissionMask0 = 1; + #endif + if (0.0) + { + emissionMask0 = 1 - emissionMask0; + } + if (0.0 > 0) + { + emissionMask0 = maskBlend(emissionMask0, poiMods.globalMask[0.0 - 1], 2.0); + } + emissionStrength0 *= glowInTheDarkMultiplier0 * emissionMask0; + emission0 = max(emissionStrength0 * emissionColor0, 0); + #ifdef POI_DISSOLVE + if (_DissolveEmissionSide != 2) + { + emission0 *= lerp(1 - dissolveAlpha, dissolveAlpha, _DissolveEmissionSide); + } + #endif + poiFragData.emission += emission0; + return emission0 * 0.0; + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(1,1,1,1), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) + float3 emissionBaseReplace = 0;// + #endif + #ifdef _EMISSION + emissionBaseReplace += applyEmission(poiFragData, poiMesh, poiLight, poiCam, poiMods); + #endif + #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) + poiFragData.baseColor.rgb = lerp(poiFragData.baseColor.rgb, saturate(emissionBaseReplace), poiMax(emissionBaseReplace)); + #endif + + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + #ifdef POI_PASS_META + UnityMetaInput meta; + UNITY_INITIALIZE_OUTPUT(UnityMetaInput, meta); + meta.Emission = poiFragData.emission * 1.0 * poiMods.globalEmission; + meta.Albedo = saturate(poiFragData.finalColor.rgb); + meta.SpecularColor = poiLight.finalLightAdd; + return UnityMetaFragment(meta) + POI_SAFE_RGB0; + #endif + poiFragData.finalColor += poiFragData.emission * poiMods.globalEmission; + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + } + CustomEditor "Thry.ShaderEditor" +} diff --git a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Platform/Poiyomi Pro World.shader.meta b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Platform/Poiyomi Pro World.shader.meta new file mode 100644 index 0000000..035b432 --- /dev/null +++ b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Platform/Poiyomi Pro World.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f2f7816b401ce3c4da1f888b7ad1895f +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/PointsMeterColumn/Poiyomi Toon World.shader b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/PointsMeterColumn/Poiyomi Toon World.shader index cc55027..ed9d19b 100644 --- a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/PointsMeterColumn/Poiyomi Toon World.shader +++ b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/PointsMeterColumn/Poiyomi Toon World.shader @@ -3654,10 +3654,10 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Toon World/e5e3830988904fb4e8ddda8116c9f8 { emissionTex = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMap, _MainTex, ((.5 + poiLight.nDotV * .5) * float4(1,1,0,0).xy) + _Time.x * 5.0); } - emissionColor0 = emissionTex.rgb * lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(0.1682695,0.6724433,0.8468735,1).rgb, 0.0); + emissionColor0 = emissionTex.rgb * lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, _EmissionColor.rgb, 0.0); emissionAlpha = emissionTex.a; #else - emissionColor0 = lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(0.1682695,0.6724433,0.8468735,1).rgb, 0.0); + emissionColor0 = lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, _EmissionColor.rgb, 0.0); #endif float3 inverseLighting = saturate((1.0 - poiLight.directColor) * sqrt(poiLight.directColor)); emissionColor0 = lerp(emissionColor0.rgb, emissionColor0.rgb * inverseLighting, 0.0); @@ -12560,10 +12560,10 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Toon World/e5e3830988904fb4e8ddda8116c9f8 { emissionTex = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMap, _MainTex, ((.5 + poiLight.nDotV * .5) * float4(1,1,0,0).xy) + _Time.x * 5.0); } - emissionColor0 = emissionTex.rgb * lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(0.1682695,0.6724433,0.8468735,1).rgb, 0.0); + emissionColor0 = emissionTex.rgb * lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, _EmissionColor.rgb, 0.0); emissionAlpha = emissionTex.a; #else - emissionColor0 = lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, float4(0.1682695,0.6724433,0.8468735,1).rgb, 0.0); + emissionColor0 = lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, _EmissionColor.rgb, 0.0); #endif float3 inverseLighting = saturate((1.0 - poiLight.directColor) * sqrt(poiLight.directColor)); emissionColor0 = lerp(emissionColor0.rgb, emissionColor0.rgb * inverseLighting, 0.0); diff --git a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Screen.meta b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Screen.meta index 3b72e98..a43eeda 100644 --- a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Screen.meta +++ b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Screen.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 00c2d17bb6cc1c44ab8ee0259a839426 +guid: c8a0aa73cfd7c664295cf935df6d5886 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Screen/Poiyomi Pro World.shader b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Screen/Poiyomi Pro World.shader index 9bb52da..614a0e5 100644 --- a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Screen/Poiyomi Pro World.shader +++ b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Screen/Poiyomi Pro World.shader @@ -249,6 +249,80 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/360a40a163e0f3347b5b14b9771d2ab [HideInInspector] m_end_brdf ("", Float) = 0 [HideInInspector] m_OutlineCategory (" Outlines--{reference_property:_EnableOutlines,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/outlines/main},hover:Documentation}}", Float) = 0 [HideInInspector] m_specialFXCategory ("Special FX", Float) = 0 + [HideInInspector] m_start_emissionOptions (" Emission 0--{reference_property:_EnableEmission,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/special-fx/emission},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(_EMISSION)] + _EnableEmission ("Enable Emission 0", Float) = 0 + [sRGBWarning]_EmissionMask ("Emission Mask--{reference_properties:[_EmissionMaskPan, _EmissionMaskUV, _EmissionMaskChannel, _EmissionMaskInvert, _EmissionMask0GlobalMask]}", 2D) = "white" { } + [HideInInspector][Vector2]_EmissionMaskPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _EmissionMaskUV ("UV", Int) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3)]_EmissionMaskChannel ("Channel", Float) = 0 + [HideInInspector][ToggleUI]_EmissionMaskInvert ("Invert", Float) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _EmissionMask0GlobalMask ("Global Mask--{reference_property:_EmissionMask0GlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)]_EmissionMask0GlobalMaskBlendType ("Blending", Range(0, 1)) = 2 + [HDR]_EmissionColor ("Emission Color--{reference_property:_EmissionColorThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _EmissionColorThemeIndex ("", Int) = 0 + [sRGBWarning(true)][Gradient]_EmissionMap ("Emission Map--{reference_properties:[_EmissionMapPan, _EmissionMapUV]}", 2D) = "white" { } + [HideInInspector][Vector2]_EmissionMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _EmissionMapUV ("UV", Int) = 0 + _EmissionStrength ("Emission Strength", Range(0, 20)) = 0 + [ToggleUI]_EmissionBaseColorAsMap ("Use Base Colors", Float) = 0 + [ToggleUI]_EmissionReplace0 ("Override Base Color", Float) = 0 + _EmissionFluorescence ("Fluorescence", Range(0, 1)) = 0 + [HideInInspector] s_start_EmissionHueShift0 ("Color Adjust--{reference_property:_EmissionHueShiftEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionHueShiftEnabled ("Hue Shift", Float) = 0 + [ThryWideEnum(OKLab, 0, HSV, 1)] _EmissionHueShiftColorSpace ("Color Space", Int) = 0 + [ThryWideEnum(Hue Select, 0, Hue Shift, 1)] _EmissionHueSelectOrShift ("Select or Shift", Int) = 1 + _EmissionSaturation ("Saturation", Range(-1, 10)) = 0 + _EmissionHueShift ("Hue Shift", Range(0, 1)) = 0 + _EmissionHueShiftSpeed ("Hue Shift Speed", Float) = 0 + [HideInInspector] s_end_EmissionHueShift0 ("", Float) = 0 + [HideInInspector] s_start_EmissionCenterOut0 ("Center Out--{reference_property:_EmissionCenterOutEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionCenterOutEnabled ("Center Out", Float) = 0 + _EmissionCenterOutSpeed ("Flow Speed", Float) = 5 + [HideInInspector] s_end_EmissionCenterOut0 ("", Float) = 0 + [HideInInspector] s_start_EmissionLightBased0 ("Light Based--{reference_property:_EnableGITDEmission,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EnableGITDEmission ("Light Based", Float) = 0 + [Enum(World, 0, Mesh, 1)] _GITDEWorldOrMesh ("Lighting Type", Int) = 0 + _GITDEMinEmissionMultiplier ("Min Emission Multiplier", Range(0, 1)) = 1 + _GITDEMaxEmissionMultiplier ("Max Emission Multiplier", Range(0, 1)) = 0 + _GITDEMinLight ("Min Lighting", Range(0, 1)) = 0 + _GITDEMaxLight ("Max Lighting", Range(0, 1)) = 1 + [HideInInspector] s_end_EmissionLightBased0 ("", Float) = 0 + [HideInInspector] s_start_EmissionBlinking0 ("Blinking--{reference_property:_EmissionBlinkingEnabled,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_EmissionBlinkingEnabled ("Blinking", Float) = 0 + _EmissiveBlink_Min ("Emissive Blink Min", Float) = 0 + _EmissiveBlink_Max ("Emissive Blink Max", Float) = 1 + _EmissiveBlink_Velocity ("Emissive Blink Velocity", Float) = 4 + _EmissionBlinkingOffset ("Offset", Float) = 0 + [HideInInspector] s_end_EmissionBlinking0 ("", Float) = 0 + [HideInInspector] s_start_ScrollingEmission0 ("Scrolling--{reference_property:_ScrollingEmission,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI] _ScrollingEmission ("Scrolling", Float) = 0 + [ToggleUI]_EmissionScrollingUseCurve ("Use Curve", float) = 0 + [Curve]_EmissionScrollingCurve ("Curve--{condition_showS:(_EmissionScrollingUseCurve==1)}", 2D) = "white" { } + [ToggleUI]_EmissionScrollingVertexColor ("VColor as position", float) = 0 + _EmissiveScroll_Direction ("Direction", Vector) = (0, -10, 0, 0) + _EmissiveScroll_Width ("Width", Float) = 10 + _EmissiveScroll_Velocity ("Velocity", Float) = 10 + _EmissiveScroll_Interval ("Interval", Float) = 20 + _EmissionScrollingOffset ("Offset", Float) = 0 + [HideInInspector] s_end_ScrollingEmission0 ("", Float) = 0 + [Space(4)] + [ThryToggleUI(true)] _EmissionAL0Enabled (" Audio Link--{ condition_showS:_EnableAudioLink==1}", Float) = 0 + [HideInInspector] s_start_EmissionAL0Multiply ("Strength Multiply--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _EmissionAL0MultipliersBand ("Band", Int) = 0 + [VectorLabel(Min, Max)]_EmissionAL0Multipliers ("Multiplier", Vector) = (1, 1, 0, 0) + [HideInInspector] s_end_EmissionAL0Multiply ("Strength Multiply", Float) = 0 + [HideInInspector] s_start_EmissionAL0Add ("Strength Add--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _EmissionAL0StrengthBand ("Band", Int) = 0 + [VectorLabel(Min, Max)]_EmissionAL0StrengthMod ("Strength", Vector) = (0, 0, 0, 0) + [HideInInspector] s_end_EmissionAL0Add ("Strength Add", Float) = 0 + [HideInInspector] s_start_EmissionAL0COut ("Center Out--{persistent_expand:true,default_expand:false, condition_showS:(_EmissionAL0Enabled==1 && _EnableAudioLink==1)}", Float) = 0 + [Enum(Bass, 0, Low Mid, 1, High Mid, 2, Treble, 3, Volume, 4)] _AudioLinkEmission0CenterOutBand ("Band", Int) = 0 + [VectorLabel(Min, Max)] _AudioLinkEmission0CenterOut ("Strength", Vector) = (0, 0, 0, 0) + _AudioLinkEmission0CenterOutSize ("Intensity Threshold", Range(0, 1)) = 0 + _AudioLinkEmission0CenterOutDuration ("Duration", Range(-1, 1)) = 1 + [HideInInspector] s_end_EmissionAL0COut ("Center Out", Float) = 0 + [HideInInspector] m_end_emissionOptions ("", Float) = 0 [HideInInspector] m_start_emission1Options (" Emission 1--{reference_property:_EnableEmission1,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/special-fx/emission},hover:Documentation}}", Float) = 0 [HideInInspector][ThryToggle(POI_EMISSION_1)] _EnableEmission1 ("Enable Emission 0", Float) = 0 @@ -490,11 +564,13 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/360a40a163e0f3347b5b14b9771d2ab #define POI_EMISSION_1 #define PROP_LIGHTINGAOMAPS #define VIGNETTE_MASKED + #define _EMISSION #define _LIGHTINGMODE_REALISTIC #define _STOCHASTICMODE_DELIOT_HEITZ #define PROP_BUMPMAP #define PROP_LIGHTINGAOMAPS #define PROP_MOCHIEMETALLICMAPS + #define PROP_EMISSIONMASK #define PROP_EMISSIONMASK1 #define OPTIMIZER_ENABLED #pragma target 5.0 @@ -1385,6 +1461,70 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/360a40a163e0f3347b5b14b9771d2ab float matcapALChronoPanBand; float matcapALChronoPanSpeed; }; + #ifdef _EMISSION + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMap; + #endif + float4 _EmissionMap_ST; + float2 _EmissionMapPan; + float _EmissionMapUV; + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMask; + #endif + float4 _EmissionMask_ST; + float2 _EmissionMaskPan; + float _EmissionMaskUV; + float _EmissionMaskInvert; + float _EmissionMaskChannel; + float _EmissionMask0GlobalMask; + float _EmissionMask0GlobalMaskBlendType; + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionScrollingCurve; + #endif + float4 _EmissionScrollingCurve_ST; + float _EmissionFluorescence; + float4 _EmissionColor; + float _EmissionBaseColorAsMap; + float _EmissionStrength; + float _EmissionHueShiftEnabled; + float _EmissionHueShiftColorSpace; + float _EmissionHueSelectOrShift; + float _EmissionSaturation; + float _EmissionHueShift; + float _EmissionHueShiftSpeed; + float _EmissionCenterOutEnabled; + float _EmissionCenterOutSpeed; + float _EnableGITDEmission; + float _GITDEWorldOrMesh; + float _GITDEMinEmissionMultiplier; + float _GITDEMaxEmissionMultiplier; + float _GITDEMinLight; + float _GITDEMaxLight; + float _EmissionBlinkingEnabled; + float _EmissiveBlink_Min; + float _EmissiveBlink_Max; + float _EmissiveBlink_Velocity; + float _EmissionBlinkingOffset; + float _ScrollingEmission; + float4 _EmissiveScroll_Direction; + float _EmissiveScroll_Width; + float _EmissiveScroll_Velocity; + float _EmissiveScroll_Interval; + float _EmissionScrollingOffset; + float _EmissionReplace0; + float _EmissionScrollingVertexColor; + float _EmissionScrollingUseCurve; + float _EmissionColorThemeIndex; + float _EmissionAL0Enabled; + float2 _EmissionAL0StrengthMod; + float _EmissionAL0StrengthBand; + float2 _AudioLinkEmission0CenterOut; + float _AudioLinkEmission0CenterOutSize; + float _AudioLinkEmission0CenterOutBand; + float _AudioLinkEmission0CenterOutDuration; + float2 _EmissionAL0Multipliers; + float _EmissionAL0MultipliersBand; + #endif #ifdef POI_EMISSION_1 #if defined(PROP_EMISSIONMAP1) || !defined(OPTIMIZER_ENABLED) Texture2D _EmissionMap1; @@ -3565,6 +3705,149 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/360a40a163e0f3347b5b14b9771d2ab } } #endif + float calculateGlowInTheDark(in float minLight, in float maxLight, in float minEmissionMultiplier, in float maxEmissionMultiplier, in float enabled, in float worldOrMesh, in PoiLight poiLight) + { + float glowInTheDarkMultiplier = 1; + if (enabled) + { + float3 lightValue = worldOrMesh ? calculateluminance(poiLight.finalLighting.rgb) : calculateluminance(poiLight.directColor.rgb); + float gitdeAlpha = saturate(inverseLerp(minLight, maxLight, lightValue)); + glowInTheDarkMultiplier = lerp(minEmissionMultiplier, maxEmissionMultiplier, gitdeAlpha); + } + return glowInTheDarkMultiplier; + } + float calculateScrollingEmission(in float3 direction, in float velocity, in float interval, in float scrollWidth, float offset, float3 position) + { + scrollWidth = max(scrollWidth, 0); + float phase = 0; + phase = dot(position, direction); + phase -= (_Time.y + offset) * velocity; + phase /= interval; + phase -= floor(phase); + phase = saturate(phase); + return (pow(phase, scrollWidth) + pow(1 - phase, scrollWidth * 4)) * 0.5; + } + float calculateBlinkingEmission(in float blinkMin, in float blinkMax, in float blinkVelocity, float offset) + { + float amplitude = (blinkMax - blinkMin) * 0.5f; + float base = blinkMin + amplitude; + return sin((_Time.y + offset) * blinkVelocity) * amplitude + base; + } + void applyALEmmissionStrength(in PoiMods poiMods, inout float emissionStrength, in float2 emissionStrengthMod, in float emissionStrengthBand, in float2 _EmissionALMultipliers, in float _EmissionALMultipliersBand, in float enabled) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + emissionStrength += lerp(emissionStrengthMod.x, emissionStrengthMod.y, poiMods.audioLink[emissionStrengthBand]); + emissionStrength *= lerp(_EmissionALMultipliers.x, _EmissionALMultipliers.y, poiMods.audioLink[_EmissionALMultipliersBand]); + } + #endif + } + void applyALCenterOutEmission(in PoiMods poiMods, in float nDotV, inout float emissionStrength, in float size, in float band, in float2 emissionToAdd, in float enabled, in float duration) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + float intensity; + [flatten] + if (duration >= 0) + { + intensity = getBandAtTime(band, saturate(remap(nDotV, 1, 0, 0, duration)), size); + } + else + { + duration *= -1; + intensity = getBandAtTime(band, saturate(remap(pow(nDotV, 2), 0, 1 + duration, 0, duration)), size); + } + emissionStrength += lerp(emissionToAdd[0], emissionToAdd[1], intensity); + } + #endif + } + #ifdef _EMISSION + float3 applyEmission(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiLight poiLight, in PoiCam poiCam, in PoiMods poiMods) + { + float3 emission0 = 0; + float emissionAlpha = 1; + float emissionStrength0 = 1.0; + float3 emissionColor0 = 0; + applyALEmmissionStrength(poiMods, emissionStrength0, float4(0,0,0,0), 0.0, float4(1,1,0,0), 0.0, 0.0); + applyALCenterOutEmission(poiMods, poiLight.nDotV, emissionStrength0, 0.0, 0.0, float4(0,0,0,0), 0.0, 1.0); + float glowInTheDarkMultiplier0 = calculateGlowInTheDark(0.0, 1.0, 1.0, 0.0, 0.0, 0.0, poiLight); + #ifdef POI_GRABPASS + float mixBaseColor = 0; + #else + float mixBaseColor = 0.0; + #endif + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + float4 emissionTex = 0; + if (!0.0) + { + emissionTex = POI2D_SAMPLER_PAN(_EmissionMap, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + } + else + { + emissionTex = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMap, _MainTex, ((.5 + poiLight.nDotV * .5) * float4(1,1,0,0).xy) + _Time.x * 5.0); + } + emissionColor0 = emissionTex.rgb * lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, _EmissionColor.rgb, 0.0); + emissionAlpha = emissionTex.a; + #else + emissionColor0 = lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, _EmissionColor.rgb, 0.0); + #endif + float3 inverseLighting = saturate((1.0 - poiLight.directColor) * sqrt(poiLight.directColor)); + emissionColor0 = lerp(emissionColor0.rgb, emissionColor0.rgb * inverseLighting, 0.0); + emissionStrength0 *= emissionAlpha; + if (0.0) + { + float3 pos = poiMesh.localPos; + if (0.0) + { + pos = poiMesh.vertexColor.rgb; + } + if (0.0) + { + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + emissionStrength0 *= UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionScrollingCurve, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + (dot(pos, float4(0,-10,0,0).xyz) * 20.0) + _Time.x * 10.0).r; + #endif + } + else + { + emissionStrength0 *= calculateScrollingEmission(float4(0,-10,0,0).xyz, 10.0, 20.0, 10.0, 0.0, pos); + } + } + if (0.0) + { + emissionStrength0 *= calculateBlinkingEmission(0.0, 1.0, 4.0, 0.0); + } + if(0.0) + { + emissionColor0 = hueShift(emissionColor0, frac(0.0 + 0.0 * _Time.x), 0.0, 1.0); + emissionColor0 = lerp(emissionColor0, dot(emissionColor0, float3(0.3, 0.59, 0.11)), - (0.0)); + } + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + float emissionMask0 = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + _Time.x * float4(0,0,0,0))[0.0]; + #else + float emissionMask0 = 1; + #endif + if (0.0) + { + emissionMask0 = 1 - emissionMask0; + } + if (0.0 > 0) + { + emissionMask0 = maskBlend(emissionMask0, poiMods.globalMask[0.0 - 1], 2.0); + } + emissionStrength0 *= glowInTheDarkMultiplier0 * emissionMask0; + emission0 = max(emissionStrength0 * emissionColor0, 0); + #ifdef POI_DISSOLVE + if (_DissolveEmissionSide != 2) + { + emission0 *= lerp(1 - dissolveAlpha, dissolveAlpha, _DissolveEmissionSide); + } + #endif + poiFragData.emission += emission0; + return emission0 * 0.0; + } + #endif float calculateGlowInTheDark__1(in float minLight, in float maxLight, in float minEmissionMultiplier, in float maxEmissionMultiplier, in float enabled, in float worldOrMesh, in PoiLight poiLight) { float glowInTheDarkMultiplier__1 = 1; @@ -3648,15 +3931,15 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/360a40a163e0f3347b5b14b9771d2ab { emissionTex__1 = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMap1, _MainTex, ((.5 + poiLight.nDotV * .5) * float4(1,1,0,0).xy) + _Time.x * 5.0); } - emissionColor0__1 = emissionTex__1.rgb * lerp(1, poiFragData.baseColor, mixBaseColor__1).rgb * poiThemeColor(poiMods, float4(0.2195262,0.7230554,0.8962696,1).rgb, 0.0); + emissionColor0__1 = emissionTex__1.rgb * lerp(1, poiFragData.baseColor, mixBaseColor__1).rgb * poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); emissionAlpha__1 = emissionTex__1.a; #else - emissionColor0__1 = lerp(1, poiFragData.baseColor, mixBaseColor__1).rgb * poiThemeColor(poiMods, float4(0.2195262,0.7230554,0.8962696,1).rgb, 0.0); + emissionColor0__1 = lerp(1, poiFragData.baseColor, mixBaseColor__1).rgb * poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); #endif float3 inverseLighting__1 = saturate((1.0 - poiLight.directColor) * sqrt(poiLight.directColor)); emissionColor0__1 = lerp(emissionColor0__1.rgb, emissionColor0__1.rgb * inverseLighting__1, 0.0); emissionStrength0__1 *= emissionAlpha__1; - if (0.0) + if (1.0) { float3 pos__1 = poiMesh.localPos; if (0.0) @@ -3666,12 +3949,12 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/360a40a163e0f3347b5b14b9771d2ab if (0.0) { #if defined(PROP_EMISSIONSCROLLINGCURVE1) || !defined(OPTIMIZER_ENABLED) - emissionStrength0__1 *= UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionScrollingCurve1, _MainTex, poiUV(poiMesh.uv[0.0], _EmissionScrollingCurve_ST__1) + (dot(pos__1, float4(0,-10,0,0).xyz) * 20.0) + _Time.x * 10.0).r; + emissionStrength0__1 *= UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionScrollingCurve1, _MainTex, poiUV(poiMesh.uv[0.0], _EmissionScrollingCurve_ST__1) + (dot(pos__1, float4(0,-10,0,0).xyz) * 100.0) + _Time.x * 10.0).r; #endif } else { - emissionStrength0__1 *= calculateScrollingEmission__1(float4(0,-10,0,0).xyz, 10.0, 20.0, 10.0, 0.0, pos__1); + emissionStrength0__1 *= calculateScrollingEmission__1(float4(0,-10,0,0).xyz, 10.0, 100.0, 3.0, 0.0, pos__1); } } if (0.0) @@ -4604,6 +4887,9 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/360a40a163e0f3347b5b14b9771d2ab #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) float3 emissionBaseReplace = 0;// #endif + #ifdef _EMISSION + emissionBaseReplace += applyEmission(poiFragData, poiMesh, poiLight, poiCam, poiMods); + #endif #ifdef POI_EMISSION_1 emissionBaseReplace += applyEmission__1(poiFragData, poiMesh, poiLight, poiCam, poiMods); #endif @@ -4670,11 +4956,13 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/360a40a163e0f3347b5b14b9771d2ab #define POI_EMISSION_1 #define PROP_LIGHTINGAOMAPS #define VIGNETTE_MASKED + #define _EMISSION #define _LIGHTINGMODE_REALISTIC #define _STOCHASTICMODE_DELIOT_HEITZ #define PROP_BUMPMAP #define PROP_LIGHTINGAOMAPS #define PROP_MOCHIEMETALLICMAPS + #define PROP_EMISSIONMASK #define PROP_EMISSIONMASK1 #define OPTIMIZER_ENABLED #pragma target 5.0 @@ -8055,11 +8343,13 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/360a40a163e0f3347b5b14b9771d2ab #define POI_EMISSION_1 #define PROP_LIGHTINGAOMAPS #define VIGNETTE_MASKED + #define _EMISSION #define _LIGHTINGMODE_REALISTIC #define _STOCHASTICMODE_DELIOT_HEITZ #define PROP_BUMPMAP #define PROP_LIGHTINGAOMAPS #define PROP_MOCHIEMETALLICMAPS + #define PROP_EMISSIONMASK #define PROP_EMISSIONMASK1 #define OPTIMIZER_ENABLED #pragma target 5.0 @@ -10263,11 +10553,13 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/360a40a163e0f3347b5b14b9771d2ab #define POI_EMISSION_1 #define PROP_LIGHTINGAOMAPS #define VIGNETTE_MASKED + #define _EMISSION #define _LIGHTINGMODE_REALISTIC #define _STOCHASTICMODE_DELIOT_HEITZ #define PROP_BUMPMAP #define PROP_LIGHTINGAOMAPS #define PROP_MOCHIEMETALLICMAPS + #define PROP_EMISSIONMASK #define PROP_EMISSIONMASK1 #define OPTIMIZER_ENABLED #pragma target 5.0 @@ -11057,6 +11349,70 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/360a40a163e0f3347b5b14b9771d2ab float _UVModWorldPos1; float _UVModLocalPos0; float _UVModLocalPos1; + #ifdef _EMISSION + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMap; + #endif + float4 _EmissionMap_ST; + float2 _EmissionMapPan; + float _EmissionMapUV; + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionMask; + #endif + float4 _EmissionMask_ST; + float2 _EmissionMaskPan; + float _EmissionMaskUV; + float _EmissionMaskInvert; + float _EmissionMaskChannel; + float _EmissionMask0GlobalMask; + float _EmissionMask0GlobalMaskBlendType; + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + Texture2D _EmissionScrollingCurve; + #endif + float4 _EmissionScrollingCurve_ST; + float _EmissionFluorescence; + float4 _EmissionColor; + float _EmissionBaseColorAsMap; + float _EmissionStrength; + float _EmissionHueShiftEnabled; + float _EmissionHueShiftColorSpace; + float _EmissionHueSelectOrShift; + float _EmissionSaturation; + float _EmissionHueShift; + float _EmissionHueShiftSpeed; + float _EmissionCenterOutEnabled; + float _EmissionCenterOutSpeed; + float _EnableGITDEmission; + float _GITDEWorldOrMesh; + float _GITDEMinEmissionMultiplier; + float _GITDEMaxEmissionMultiplier; + float _GITDEMinLight; + float _GITDEMaxLight; + float _EmissionBlinkingEnabled; + float _EmissiveBlink_Min; + float _EmissiveBlink_Max; + float _EmissiveBlink_Velocity; + float _EmissionBlinkingOffset; + float _ScrollingEmission; + float4 _EmissiveScroll_Direction; + float _EmissiveScroll_Width; + float _EmissiveScroll_Velocity; + float _EmissiveScroll_Interval; + float _EmissionScrollingOffset; + float _EmissionReplace0; + float _EmissionScrollingVertexColor; + float _EmissionScrollingUseCurve; + float _EmissionColorThemeIndex; + float _EmissionAL0Enabled; + float2 _EmissionAL0StrengthMod; + float _EmissionAL0StrengthBand; + float2 _AudioLinkEmission0CenterOut; + float _AudioLinkEmission0CenterOutSize; + float _AudioLinkEmission0CenterOutBand; + float _AudioLinkEmission0CenterOutDuration; + float2 _EmissionAL0Multipliers; + float _EmissionAL0MultipliersBand; + #endif #ifdef POI_EMISSION_1 #if defined(PROP_EMISSIONMAP1) || !defined(OPTIMIZER_ENABLED) Texture2D _EmissionMap1; @@ -12949,6 +13305,149 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/360a40a163e0f3347b5b14b9771d2ab float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); } + float calculateGlowInTheDark(in float minLight, in float maxLight, in float minEmissionMultiplier, in float maxEmissionMultiplier, in float enabled, in float worldOrMesh, in PoiLight poiLight) + { + float glowInTheDarkMultiplier = 1; + if (enabled) + { + float3 lightValue = worldOrMesh ? calculateluminance(poiLight.finalLighting.rgb) : calculateluminance(poiLight.directColor.rgb); + float gitdeAlpha = saturate(inverseLerp(minLight, maxLight, lightValue)); + glowInTheDarkMultiplier = lerp(minEmissionMultiplier, maxEmissionMultiplier, gitdeAlpha); + } + return glowInTheDarkMultiplier; + } + float calculateScrollingEmission(in float3 direction, in float velocity, in float interval, in float scrollWidth, float offset, float3 position) + { + scrollWidth = max(scrollWidth, 0); + float phase = 0; + phase = dot(position, direction); + phase -= (_Time.y + offset) * velocity; + phase /= interval; + phase -= floor(phase); + phase = saturate(phase); + return (pow(phase, scrollWidth) + pow(1 - phase, scrollWidth * 4)) * 0.5; + } + float calculateBlinkingEmission(in float blinkMin, in float blinkMax, in float blinkVelocity, float offset) + { + float amplitude = (blinkMax - blinkMin) * 0.5f; + float base = blinkMin + amplitude; + return sin((_Time.y + offset) * blinkVelocity) * amplitude + base; + } + void applyALEmmissionStrength(in PoiMods poiMods, inout float emissionStrength, in float2 emissionStrengthMod, in float emissionStrengthBand, in float2 _EmissionALMultipliers, in float _EmissionALMultipliersBand, in float enabled) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + emissionStrength += lerp(emissionStrengthMod.x, emissionStrengthMod.y, poiMods.audioLink[emissionStrengthBand]); + emissionStrength *= lerp(_EmissionALMultipliers.x, _EmissionALMultipliers.y, poiMods.audioLink[_EmissionALMultipliersBand]); + } + #endif + } + void applyALCenterOutEmission(in PoiMods poiMods, in float nDotV, inout float emissionStrength, in float size, in float band, in float2 emissionToAdd, in float enabled, in float duration) + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable && enabled) + { + float intensity; + [flatten] + if (duration >= 0) + { + intensity = getBandAtTime(band, saturate(remap(nDotV, 1, 0, 0, duration)), size); + } + else + { + duration *= -1; + intensity = getBandAtTime(band, saturate(remap(pow(nDotV, 2), 0, 1 + duration, 0, duration)), size); + } + emissionStrength += lerp(emissionToAdd[0], emissionToAdd[1], intensity); + } + #endif + } + #ifdef _EMISSION + float3 applyEmission(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiLight poiLight, in PoiCam poiCam, in PoiMods poiMods) + { + float3 emission0 = 0; + float emissionAlpha = 1; + float emissionStrength0 = 1.0; + float3 emissionColor0 = 0; + applyALEmmissionStrength(poiMods, emissionStrength0, float4(0,0,0,0), 0.0, float4(1,1,0,0), 0.0, 0.0); + applyALCenterOutEmission(poiMods, poiLight.nDotV, emissionStrength0, 0.0, 0.0, float4(0,0,0,0), 0.0, 1.0); + float glowInTheDarkMultiplier0 = calculateGlowInTheDark(0.0, 1.0, 1.0, 0.0, 0.0, 0.0, poiLight); + #ifdef POI_GRABPASS + float mixBaseColor = 0; + #else + float mixBaseColor = 0.0; + #endif + #if defined(PROP_EMISSIONMAP) || !defined(OPTIMIZER_ENABLED) + float4 emissionTex = 0; + if (!0.0) + { + emissionTex = POI2D_SAMPLER_PAN(_EmissionMap, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + } + else + { + emissionTex = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMap, _MainTex, ((.5 + poiLight.nDotV * .5) * float4(1,1,0,0).xy) + _Time.x * 5.0); + } + emissionColor0 = emissionTex.rgb * lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, _EmissionColor.rgb, 0.0); + emissionAlpha = emissionTex.a; + #else + emissionColor0 = lerp(1, poiFragData.baseColor, mixBaseColor).rgb * poiThemeColor(poiMods, _EmissionColor.rgb, 0.0); + #endif + float3 inverseLighting = saturate((1.0 - poiLight.directColor) * sqrt(poiLight.directColor)); + emissionColor0 = lerp(emissionColor0.rgb, emissionColor0.rgb * inverseLighting, 0.0); + emissionStrength0 *= emissionAlpha; + if (0.0) + { + float3 pos = poiMesh.localPos; + if (0.0) + { + pos = poiMesh.vertexColor.rgb; + } + if (0.0) + { + #if defined(PROP_EMISSIONSCROLLINGCURVE) || !defined(OPTIMIZER_ENABLED) + emissionStrength0 *= UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionScrollingCurve, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + (dot(pos, float4(0,-10,0,0).xyz) * 20.0) + _Time.x * 10.0).r; + #endif + } + else + { + emissionStrength0 *= calculateScrollingEmission(float4(0,-10,0,0).xyz, 10.0, 20.0, 10.0, 0.0, pos); + } + } + if (0.0) + { + emissionStrength0 *= calculateBlinkingEmission(0.0, 1.0, 4.0, 0.0); + } + if(0.0) + { + emissionColor0 = hueShift(emissionColor0, frac(0.0 + 0.0 * _Time.x), 0.0, 1.0); + emissionColor0 = lerp(emissionColor0, dot(emissionColor0, float3(0.3, 0.59, 0.11)), - (0.0)); + } + #if defined(PROP_EMISSIONMASK) || !defined(OPTIMIZER_ENABLED) + float emissionMask0 = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)) + _Time.x * float4(0,0,0,0))[0.0]; + #else + float emissionMask0 = 1; + #endif + if (0.0) + { + emissionMask0 = 1 - emissionMask0; + } + if (0.0 > 0) + { + emissionMask0 = maskBlend(emissionMask0, poiMods.globalMask[0.0 - 1], 2.0); + } + emissionStrength0 *= glowInTheDarkMultiplier0 * emissionMask0; + emission0 = max(emissionStrength0 * emissionColor0, 0); + #ifdef POI_DISSOLVE + if (_DissolveEmissionSide != 2) + { + emission0 *= lerp(1 - dissolveAlpha, dissolveAlpha, _DissolveEmissionSide); + } + #endif + poiFragData.emission += emission0; + return emission0 * 0.0; + } + #endif float calculateGlowInTheDark__1(in float minLight, in float maxLight, in float minEmissionMultiplier, in float maxEmissionMultiplier, in float enabled, in float worldOrMesh, in PoiLight poiLight) { float glowInTheDarkMultiplier__1 = 1; @@ -13032,15 +13531,15 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/360a40a163e0f3347b5b14b9771d2ab { emissionTex__1 = UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionMap1, _MainTex, ((.5 + poiLight.nDotV * .5) * float4(1,1,0,0).xy) + _Time.x * 5.0); } - emissionColor0__1 = emissionTex__1.rgb * lerp(1, poiFragData.baseColor, mixBaseColor__1).rgb * poiThemeColor(poiMods, float4(0.2195262,0.7230554,0.8962696,1).rgb, 0.0); + emissionColor0__1 = emissionTex__1.rgb * lerp(1, poiFragData.baseColor, mixBaseColor__1).rgb * poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); emissionAlpha__1 = emissionTex__1.a; #else - emissionColor0__1 = lerp(1, poiFragData.baseColor, mixBaseColor__1).rgb * poiThemeColor(poiMods, float4(0.2195262,0.7230554,0.8962696,1).rgb, 0.0); + emissionColor0__1 = lerp(1, poiFragData.baseColor, mixBaseColor__1).rgb * poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); #endif float3 inverseLighting__1 = saturate((1.0 - poiLight.directColor) * sqrt(poiLight.directColor)); emissionColor0__1 = lerp(emissionColor0__1.rgb, emissionColor0__1.rgb * inverseLighting__1, 0.0); emissionStrength0__1 *= emissionAlpha__1; - if (0.0) + if (1.0) { float3 pos__1 = poiMesh.localPos; if (0.0) @@ -13050,12 +13549,12 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/360a40a163e0f3347b5b14b9771d2ab if (0.0) { #if defined(PROP_EMISSIONSCROLLINGCURVE1) || !defined(OPTIMIZER_ENABLED) - emissionStrength0__1 *= UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionScrollingCurve1, _MainTex, poiUV(poiMesh.uv[0.0], _EmissionScrollingCurve_ST__1) + (dot(pos__1, float4(0,-10,0,0).xyz) * 20.0) + _Time.x * 10.0).r; + emissionStrength0__1 *= UNITY_SAMPLE_TEX2D_SAMPLER(_EmissionScrollingCurve1, _MainTex, poiUV(poiMesh.uv[0.0], _EmissionScrollingCurve_ST__1) + (dot(pos__1, float4(0,-10,0,0).xyz) * 100.0) + _Time.x * 10.0).r; #endif } else { - emissionStrength0__1 *= calculateScrollingEmission__1(float4(0,-10,0,0).xyz, 10.0, 20.0, 10.0, 0.0, pos__1); + emissionStrength0__1 *= calculateScrollingEmission__1(float4(0,-10,0,0).xyz, 10.0, 100.0, 3.0, 0.0, pos__1); } } if (0.0) @@ -13262,6 +13761,9 @@ Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/360a40a163e0f3347b5b14b9771d2ab #if defined(_EMISSION)|| defined(POI_EMISSION_1)|| defined(POI_EMISSION_2)|| defined(POI_EMISSION_3) float3 emissionBaseReplace = 0;// #endif + #ifdef _EMISSION + emissionBaseReplace += applyEmission(poiFragData, poiMesh, poiLight, poiCam, poiMods); + #endif #ifdef POI_EMISSION_1 emissionBaseReplace += applyEmission__1(poiFragData, poiMesh, poiLight, poiCam, poiMods); #endif diff --git a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Screen/Poiyomi Pro World.shader.meta b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Screen/Poiyomi Pro World.shader.meta index 6aee1e1..bb2c8b4 100644 --- a/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Screen/Poiyomi Pro World.shader.meta +++ b/Assets/Quiz/Materials/NoPoints/OptimizedShaders/Screen/Poiyomi Pro World.shader.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 94d7cc74d88811045ac98b21dd8431cd +guid: ca131fec60225814499f4124bff1e32e ShaderImporter: externalObjects: {} defaultTextures: [] diff --git a/Assets/Quiz/Materials/NoPoints/Platform.mat b/Assets/Quiz/Materials/NoPoints/Platform.mat index 5fc5906..1061b96 100644 --- a/Assets/Quiz/Materials/NoPoints/Platform.mat +++ b/Assets/Quiz/Materials/NoPoints/Platform.mat @@ -8,119 +8,3837 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Platform - m_Shader: {fileID: 4800000, guid: 9829e18681954944a8b25de9b080a0b6, type: 3} + m_Shader: {fileID: 4800000, guid: f2f7816b401ce3c4da1f888b7ad1895f, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: - - _EMISSION - - _LIGHTMAPSPECULAR - - _NORMALMAP + m_ValidKeywords: [] m_InvalidKeywords: - - _BAKERY_NONE + - BSSBLOOMFOGTYPE_HEIGHT + - MOCHIE_PBR + - POI_CLEARCOAT + - VIGNETTE_MASKED + - _EMISSION + - _LIGHTINGMODE_REALISTIC + - _RIM2STYLE_POIYOMI + - _RIMSTYLE_POIYOMI + - _STOCHASTICMODE_DELIOT_HEITZ m_LightmapFlags: 2 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} + m_CustomRenderQueue: 2000 + stringTagMap: + AllLockedGUIDS: b7744b7dccafd7c479db7f7db6f5e317 + OriginalKeywords: BSSBLOOMFOGTYPE_HEIGHT MOCHIE_PBR POI_CLEARCOAT VIGNETTE_MASKED + _EMISSION _LIGHTINGMODE_REALISTIC _RIM2STYLE_POIYOMI _RIMSTYLE_POIYOMI _STOCHASTICMODE_DELIOT_HEITZ + OriginalShader: .poiyomi/Poiyomi Pro World + OriginalShaderGUID: a11582d439d5e494986c4b421999c03a + RenderType: Opaque + _EmissionColorAnimated: 1 + _stripped_tex__ClothDFG: 76d65cbce584df7449699fb8406f60ea + _stripped_tex__EmissionMask1: d5e4a521aa43ec742a51e66e8da2871a + _stripped_tex__EmissionScrollingCurve1: 6582252028d7aaa46bc192124b33d76c + _stripped_tex__SkinLUT: d13510bb2be49aa40a66a0101efb6a36 + _stripped_tex__ToonRamp: 61bd594533da4fc42bd46ef93ba5a4f6 disabledShaderPasses: [] m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: + - _AlphaMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _AnisotropyMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _BumpMap: m_Texture: {fileID: 2800000, guid: 7da04c5268a172043a54b30ea64e0db0, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _ClearCoatFallback: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ClearCoatMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _DFG: m_Texture: {fileID: 2800000, guid: b6b1f1fa6be1ce54f8bcd5428c160a28, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - _EmissionMap: m_Texture: {fileID: 2800000, guid: e5a58eba4d750fe409af8e07c76c62a6, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _EmissionMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionScrollingCurve: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightDataSDFMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingAOMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingDetailShadowMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: + - _MochieMetallicMaps: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _OcclusionMap: + - _MochieReflCube: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _RNM0: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _RNM1: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _RNM2: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ReflectionTex0: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ReflectionTex1: + - _UzumoreMask: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: + - DSGI: 0 + - GeometryShader_Enabled: 1 + - Instancing: 0 + - LightmapFlags: 0 + - Tessellation_Enabled: 1 + - VertexBasicsMaskUV: 0 + - _1st2nd_Shades_Feather: 0.0001 + - _1stShadeMapMask_Inverse: 0 + - _1st_ShadeMapUV: 0 + - _2ndShadeMapMask_Inverse: 0 + - _2nd_ShadeMapUV: 0 + - _ALDecalBandClipMax: 1 + - _ALDecalBandClipMin: 0 + - _ALDecalBandStep: 0 + - _ALDecalBaseBoost: 5 + - _ALDecalBlendAlpha: 1 + - _ALDecalBlendType: 0 + - _ALDecalColorMaskUV: 0 + - _ALDecalControlsAlpha: 0 + - _ALDecalGlobalMask: 0 + - _ALDecalGlobalMaskBlendType: 2 + - _ALDecalHighEmission: 0 + - _ALDecalLineWidth: 1 + - _ALDecalLowEmission: 0 + - _ALDecalMidEmission: 0 + - _ALDecalShapeClip: 0 + - _ALDecalShapeClipBandWidth: 0.5 + - _ALDecalShapeClipVolumeWidth: 0.5 + - _ALDecalTrebleBoost: 1 + - _ALDecalType: 0 + - _ALDecalUV: 0 + - _ALDecalUVMode: 0 + - _ALDecalVolume: 0.5 + - _ALDecalVolumeClipMax: 1 + - _ALDecalVolumeClipMin: 0 + - _ALDecalVolumeColorHighThemeIndex: 0 + - _ALDecalVolumeColorLowThemeIndex: 0 + - _ALDecalVolumeColorMidThemeIndex: 0 + - _ALDecalVolumeColorSource: 1 + - _ALDecalVolumeStep: 0 + - _ALHighEmission: 0 + - _ALLowEmission: 0 + - _ALMidEmission: 0 + - _ALUVRotation: 0 + - _ALUVRotationSpeed: 0 + - _ALVolumeColorBlendAlpha: 1 + - _ALVolumeColorBlendType: 0 + - _ALVolumeColorDirection: 0 + - _ALVolumeColorHighThemeIndex: 0 + - _ALVolumeColorLowThemeIndex: 0 + - _ALVolumeColorMidThemeIndex: 0 + - _ALVolumeColorUV: 0 + - _AddBlendOp: 4 + - _AddBlendOpAlpha: 4 + - _AddDstBlend: 1 + - _AddDstBlendAlpha: 1 + - _AddSrcBlend: 1 + - _AddSrcBlendAlpha: 0 + - _Add_Antipodean_Rim2Light: 0 + - _Add_Antipodean_RimLight: 0 + - _AlphaAlphaAdd: 0 + - _AlphaAngular: 0 + - _AlphaAngularGlobalMask: 0 + - _AlphaAudioLinkAddBand: 0 + - _AlphaAudioLinkEnabled: 0 + - _AlphaBoostFA: 10 + - _AlphaColorThemeIndex: 0 + - _AlphaDistanceFade: 0 + - _AlphaDistanceFadeGlobalMask: 0 + - _AlphaDistanceFadeMax: 0 + - _AlphaDistanceFadeMaxAlpha: 1 + - _AlphaDistanceFadeMin: 0 + - _AlphaDistanceFadeMinAlpha: 0 + - _AlphaDistanceFadeType: 1 + - _AlphaDitherBias: 0 + - _AlphaDitherGradient: 0.1 + - _AlphaDithering: 0 + - _AlphaForceOpaque: 1 + - _AlphaFresnel: 0 + - _AlphaFresnelAlpha: 0 + - _AlphaFresnelGlobalMask: 0 + - _AlphaFresnelInvert: 0 + - _AlphaFresnelSharpness: 0.5 + - _AlphaFresnelWidth: 0.5 + - _AlphaGlobalMask: 0 + - _AlphaGlobalMaskBlendType: 2 + - _AlphaMaskBlendStrength: 1 + - _AlphaMaskInvert: 0 + - _AlphaMaskUV: 0 + - _AlphaMaskValue: 0 + - _AlphaMipScale: 0.25 + - _AlphaMod: 0 + - _AlphaPremultiply: 0 + - _AlphaSharpenedA2C: 0 + - _AlphaTextureStochastic: 0 + - _AlphaTextureUV: 0 + - _AlphaToCoverage: 0 - _AlphaToMaskMode: 0 + - _AngleCompareTo: 0 + - _AngleMinAlpha: 0 + - _AngleType: 0 + - _Aniso0Blur: 0 + - _Aniso0Edge: 0.5 + - _Aniso0Offset: 0 + - _Aniso0OffsetMapStrength: 0 + - _Aniso0Power: 0 + - _Aniso0Strength: 1 + - _Aniso0SwitchDirection: 0 + - _Aniso0TintIndex: 0 + - _Aniso0ToonMode: 0 + - _Aniso1Blur: 0 + - _Aniso1Edge: 0.5 + - _Aniso1Offset: 0 + - _Aniso1OffsetMapStrength: 0 + - _Aniso1Power: 0.1 + - _Aniso1Strength: 1 + - _Aniso1SwitchDirection: 0 + - _Aniso1TintIndex: 0 + - _Aniso1ToonMode: 0 + - _AnisoAdd: 1 + - _AnisoColorMapUV: 0 + - _AnisoGlobalMask: 0 + - _AnisoGlobalMaskBlendType: 2 + - _AnisoHideInShadow: 1 + - _AnisoReplace: 0 + - _AnisoUseBaseColor: 0 + - _AnisoUseLightColor: 1 + - _Anisotropy: 0 + - _AnisotropyMapChannel: 0 + - _AnisotropyMapUV: 0 + - _Ap_Rim2Light_FeatherOff: 0 + - _Ap_Rim2Light_Power: 0.1 + - _Ap_RimLight_FeatherOff: 0 + - _Ap_RimLight_Power: 0.1 + - _ApplyReflection: 0 + - _ApplySpecular: 1 + - _ApplySpecularFA: 1 + - _AudioLinkAnimToggle: 1 + - _AudioLinkBandOverridesEnabled: 0 + - _AudioLinkDecal0AlphaBand: 0 + - _AudioLinkDecal0ChannelSeparationBand: 0 + - _AudioLinkDecal0EmissionBand: 0 + - _AudioLinkDecal0RotationBand: 0 + - _AudioLinkDecal0ScaleBand: 0 + - _AudioLinkDecal0SideBand: 0 + - _AudioLinkDecal1AlphaBand: 0 + - _AudioLinkDecal1ChannelSeparationBand: 0 + - _AudioLinkDecal1EmissionBand: 0 + - _AudioLinkDecal1RotationBand: 0 + - _AudioLinkDecal1ScaleBand: 0 + - _AudioLinkDecal1SideBand: 0 + - _AudioLinkDecal2AlphaBand: 0 + - _AudioLinkDecal2ChannelSeparationBand: 0 + - _AudioLinkDecal2EmissionBand: 0 + - _AudioLinkDecal2RotationBand: 0 + - _AudioLinkDecal2ScaleBand: 0 + - _AudioLinkDecal2SideBand: 0 + - _AudioLinkDecal3AlphaBand: 0 + - _AudioLinkDecal3ChannelSeparationBand: 0 + - _AudioLinkDecal3EmissionBand: 0 + - _AudioLinkDecal3RotationBand: 0 + - _AudioLinkDecal3ScaleBand: 0 + - _AudioLinkDecal3SideBand: 0 + - _AudioLinkDecalCC0: 0 + - _AudioLinkDecalCC1: 0 + - _AudioLinkDecalCC2: 0 + - _AudioLinkDecalCC3: 0 + - _AudioLinkDissolveAlphaBand: 0 + - _AudioLinkDissolveDetailBand: 0 + - _AudioLinkEmission0CenterOutBand: 0 + - _AudioLinkEmission0CenterOutDuration: 1 + - _AudioLinkEmission0CenterOutSize: 0 + - _AudioLinkEmission1CenterOutBand: 0 + - _AudioLinkEmission1CenterOutDuration: 1 + - _AudioLinkEmission1CenterOutSize: 0 + - _AudioLinkEmission2CenterOutBand: 0 + - _AudioLinkEmission2CenterOutDuration: 1 + - _AudioLinkEmission2CenterOutSize: 0 + - _AudioLinkEmission3CenterOutBand: 0 + - _AudioLinkEmission3CenterOutDuration: 1 + - _AudioLinkEmission3CenterOutSize: 0 + - _AudioLinkFlipbookAlphaBand: 0 + - _AudioLinkFlipbookEmissionBand: 0 + - _AudioLinkFlipbookFrameBand: 0 + - _AudioLinkFlipbookScaleBand: 0 + - _AudioLinkHelp: 0 + - _AudioLinkOutlineColorBand: 0 + - _AudioLinkOutlineEmissionBand: 0 + - _AudioLinkOutlineSizeBand: 0 + - _AudioLinkPathEmissionAddBandA: 0 + - _AudioLinkPathEmissionAddBandB: 0 + - _AudioLinkPathEmissionAddBandG: 0 + - _AudioLinkPathEmissionAddBandR: 0 + - _AudioLinkPathTimeOffsetBandA: 0 + - _AudioLinkPathTimeOffsetBandB: 0 + - _AudioLinkPathTimeOffsetBandG: 0 + - _AudioLinkPathTimeOffsetBandR: 0 + - _AudioLinkPathWidthOffsetBandA: 0 + - _AudioLinkPathWidthOffsetBandB: 0 + - _AudioLinkPathWidthOffsetBandG: 0 + - _AudioLinkPathWidthOffsetBandR: 0 + - _AudioLinkRim2BrightnessBand: 0 + - _AudioLinkRim2EmissionBand: 0 + - _AudioLinkRim2WidthBand: 0 + - _AudioLinkRimBrightnessBand: 0 + - _AudioLinkRimEmissionBand: 0 + - _AudioLinkRimWidthBand: 0 + - _AudioLinkSmoothingBass: 0 + - _AudioLinkSmoothingHighMid: 0 + - _AudioLinkSmoothingLowMid: 0 + - _AudioLinkSmoothingTreble: 0 + - _AudioLinkVoronoiChronoSpeedXBand: 0 + - _AudioLinkVoronoiChronoSpeedXSpeed: 0 + - _AudioLinkVoronoiChronoSpeedXType: 0 + - _AudioLinkVoronoiChronoSpeedYBand: 0 + - _AudioLinkVoronoiChronoSpeedYSpeed: 0 + - _AudioLinkVoronoiChronoSpeedYType: 0 + - _AudioLinkVoronoiChronoSpeedZBand: 0 + - _AudioLinkVoronoiChronoSpeedZSpeed: 0 + - _AudioLinkVoronoiChronoSpeedZType: 0 + - _AudioLinkVoronoiGradientMaxAdd: 0 + - _AudioLinkVoronoiGradientMaxAddBand: 0 + - _AudioLinkVoronoiGradientMinAdd: 0 + - _AudioLinkVoronoiGradientMinAddBand: 0 + - _AudioLinkVoronoiInnerEmissionBand: 0 + - _AudioLinkVoronoiOuterEmissionBand: 0 + - _BRDFTPSDepthEnabled: 0 + - _BRDFTPSReflectionMaskStrength: 1 + - _BRDFTPSSpecularMaskStrength: 1 + - _BSSBloomfog: 0 + - _BSSBloomfogType: 1 + - _BSSEnabled: 0 + - _BSSHelpBox1: 0 + - _BSSHelpBox2: 0 + - _BSSHelpBox3: 0 + - _BSSSpacer1: 0 + - _BSSSpacer2: 0 + - _BSSSpacer3: 0 + - _BackFaceColorThemeIndex: 0 + - _BackFaceDetailIntensity: 1 + - _BackFaceEmissionLimiter: 1 + - _BackFaceEmissionStrength: 0 + - _BackFaceEnabled: 0 + - _BackFaceHueSelectOrShift: 1 + - _BackFaceHueShift: 0 + - _BackFaceHueShiftEnabled: 0 + - _BackFaceHueShiftSpeed: 0 + - _BackFaceMaskChannel: 0 + - _BackFaceMaskUV: 0 + - _BackFaceReplaceAlpha: 0 + - _BackFaceShiftColorSpace: 0 + - _BackFaceTextureUV: 0 + - _BacklightBackfaceMask: 1 + - _BacklightBlur: 0.05 + - _BacklightBorder: 0.35 + - _BacklightColorTexUV: 0 + - _BacklightDirectivity: 5 + - _BacklightEnabled: 0 + - _BacklightMainStrength: 0 + - _BacklightNormalStrength: 1 + - _BacklightReceiveShadow: 1 + - _BacklightViewStrength: 1 - _Bakery: 0 - _BakeryVertexLM: 0 + - _BaseColor_Step: 0.5 + - _BaseShade_Feather: 0.0001 + - _BlackLightMasking0GlobalMaskBlendType: 0 + - _BlackLightMasking0GlobalMaskIndex: 0 + - _BlackLightMasking0Key: 1 + - _BlackLightMasking1GlobalMaskBlendType: 0 + - _BlackLightMasking1GlobalMaskIndex: 0 + - _BlackLightMasking1Key: 2 + - _BlackLightMasking2GlobalMaskBlendType: 0 + - _BlackLightMasking2GlobalMaskIndex: 0 + - _BlackLightMasking2Key: 3 + - _BlackLightMasking3GlobalMaskBlendType: 0 + - _BlackLightMasking3GlobalMaskIndex: 0 + - _BlackLightMasking3Key: 4 + - _BlackLightMaskingEnabled: 0 + - _BlendOp: 0 + - _BlendOpAlpha: 0 + - _BlendshapeBadScaleFix: 1 + - _BlendshapePower: 1 + - _BlueAlphaAdd: 0 + - _BlueColorThemeIndex: 0 + - _BlueTextureStochastic: 0 + - _BlueTextureUV: 0 + - _BulgeOffset: 0 + - _BulgePower: 0 + - _BumpMapStochastic: 0 + - _BumpMapUV: 0 - _BumpScale: 1 - _BumpShadowHardness: 50 - _BumpShadowHeightScale: 0.2 + - _CCIgnoreCastedShadows: 0 + - _CameraAngleMax: 90 + - _CameraAngleMin: 45 + - _CenterOutDissolveInvert: 0 + - _CenterOutDissolveMode: 1 + - _CenterOutDissolveNormals: 0 + - _CenterOutDissolvePower: 1 + - _ClearCoatBRDF: 1 + - _ClearCoatForceFallback: 0 + - _ClearCoatGSAAEnabled: 1 + - _ClearCoatGSAAThreshold: 0.1 + - _ClearCoatGSAAVariance: 0.15 + - _ClearCoatGlobalMask: 0 + - _ClearCoatGlobalMaskBlendType: 2 + - _ClearCoatLitFallback: 1 + - _ClearCoatMapsClearCoatMaskChannel: 0 + - _ClearCoatMapsReflectionMaskChannel: 2 + - _ClearCoatMapsRoughnessChannel: 1 + - _ClearCoatMapsSpecularMaskChannel: 3 + - _ClearCoatMapsStochastic: 0 + - _ClearCoatMapsUV: 0 + - _ClearCoatMaskInvert: 0 + - _ClearCoatNormalSelect: 0 + - _ClearCoatReflectionMaskInvert: 0 + - _ClearCoatReflectionStrength: 1 + - _ClearCoatReflectionStrengthGlobalMask: 0 + - _ClearCoatReflectionStrengthGlobalMaskBlendType: 2 + - _ClearCoatReflectionTintThemeIndex: 0 + - _ClearCoatSmoothness: 1 + - _ClearCoatSmoothnessGlobalMask: 0 + - _ClearCoatSmoothnessGlobalMaskBlendType: 2 + - _ClearCoatSmoothnessMapInvert: 0 + - _ClearCoatSpecularMaskInvert: 0 + - _ClearCoatSpecularStrength: 1 + - _ClearCoatSpecularStrengthGlobalMask: 0 + - _ClearCoatSpecularStrengthGlobalMaskBlendType: 2 + - _ClearCoatSpecularTintThemeIndex: 0 + - _ClearCoatStrength: 0.111 + - _ClearCoatTPSDepthMaskEnabled: 0 + - _ClearCoatTPSMaskStrength: 1 + - _ClearcoatExposureOcclusion: 0 + - _ClearcoatFresnelStrength: 0.5 + - _ClothLerp: 0 + - _ClothMetallicSmoothnessMapInvert: 0 + - _ClothMetallicSmoothnessMapUV: 0 + - _ClothReflectance: 0.5 + - _ClothSmoothness: 0.5 + - _ColorGradingToggle: 0 + - _ColorMask: 15 + - _ColorThemeIndex: 0 + - _ContinuousDissolve: 0 + - _CubeMapBlendAmount: 1 + - _CubeMapBrightness: 0 + - _CubeMapColorThemeIndex: 0 + - _CubeMapContrast: 1 + - _CubeMapEmissionStrength: 0 + - _CubeMapEnabled: 0 + - _CubeMapHueSelectOrShift: 1 + - _CubeMapHueShift: 0 + - _CubeMapHueShiftColorSpace: 0 + - _CubeMapHueShiftEnabled: 0 + - _CubeMapHueShiftSpeed: 0 + - _CubeMapIntensity: 1 + - _CubeMapLightMask: 0 + - _CubeMapMaskChannel: 0 + - _CubeMapMaskGlobalMask: 0 + - _CubeMapMaskGlobalMaskBlendType: 2 + - _CubeMapMaskInvert: 0 + - _CubeMapMaskUV: 0 + - _CubeMapNormal: 1 + - _CubeMapSaturation: 1 + - _CubeMapSmoothness: 1 + - _CubeMapUVMode: 1 + - _CubeMapWorldNormalsStrength: 1 + - _CubemapBlendType: 0 + - _Cull: 2 - _CullMode: 2 + - _CurvFix: 1 + - _Curvature: 0 + - _CurvatureU: 0 + - _CurvatureV: 0 + - _CustomColors: 0 - _Cutoff: 0.5 + - _Decal0ApplyGlobalMaskBlendType: 0 + - _Decal0ApplyGlobalMaskIndex: 0 + - _Decal0ChannelSeparation: 0 + - _Decal0ChannelSeparationAngleStrength: 0 + - _Decal0ChannelSeparationEnable: 0 + - _Decal0ChannelSeparationHue: 0 + - _Decal0ChannelSeparationPremultiply: 0 + - _Decal0ChannelSeparationVertical: 0 + - _Decal0Depth: 0 + - _Decal0FaceMask: 0 + - _Decal0GlobalMask: 0 + - _Decal0GlobalMaskBlendType: 2 + - _Decal0HueAngleStrength: 0 + - _Decal0MaskChannel: 0 + - _Decal0OnlyVideo: 0 + - _Decal0OverrideAlphaMode: 0 + - _Decal0TPSMaskStrength: 1 + - _Decal0UseDecalAlpha: 0 + - _Decal0VideoAspectFix: 0 + - _Decal0VideoEmissionStrength: 0 + - _Decal0VideoEnabled: 0 + - _Decal0VideoFitToScale: 1 + - _Decal1ApplyGlobalMaskBlendType: 0 + - _Decal1ApplyGlobalMaskIndex: 0 + - _Decal1ChannelSeparation: 0 + - _Decal1ChannelSeparationAngleStrength: 0 + - _Decal1ChannelSeparationEnable: 0 + - _Decal1ChannelSeparationHue: 0 + - _Decal1ChannelSeparationPremultiply: 0 + - _Decal1ChannelSeparationVertical: 0 + - _Decal1Depth: 0 + - _Decal1FaceMask: 0 + - _Decal1GlobalMask: 0 + - _Decal1GlobalMaskBlendType: 2 + - _Decal1HueAngleStrength: 0 + - _Decal1MaskChannel: 1 + - _Decal1OnlyVideo: 0 + - _Decal1OverrideAlphaMode: 0 + - _Decal1TPSMaskStrength: 1 + - _Decal1UseDecalAlpha: 0 + - _Decal1VideoAspectFix: 0 + - _Decal1VideoEmissionStrength: 0 + - _Decal1VideoEnabled: 0 + - _Decal1VideoFitToScale: 1 + - _Decal2ApplyGlobalMaskBlendType: 0 + - _Decal2ApplyGlobalMaskIndex: 0 + - _Decal2ChannelSeparation: 0 + - _Decal2ChannelSeparationAngleStrength: 0 + - _Decal2ChannelSeparationEnable: 0 + - _Decal2ChannelSeparationHue: 0 + - _Decal2ChannelSeparationPremultiply: 0 + - _Decal2ChannelSeparationVertical: 0 + - _Decal2Depth: 0 + - _Decal2FaceMask: 0 + - _Decal2GlobalMask: 0 + - _Decal2GlobalMaskBlendType: 2 + - _Decal2HueAngleStrength: 0 + - _Decal2MaskChannel: 2 + - _Decal2OnlyVideo: 0 + - _Decal2OverrideAlphaMode: 0 + - _Decal2TPSMaskStrength: 1 + - _Decal2UseDecalAlpha: 0 + - _Decal2VideoAspectFix: 0 + - _Decal2VideoEmissionStrength: 0 + - _Decal2VideoEnabled: 0 + - _Decal2VideoFitToScale: 1 + - _Decal3ApplyGlobalMaskBlendType: 0 + - _Decal3ApplyGlobalMaskIndex: 0 + - _Decal3ChannelSeparation: 0 + - _Decal3ChannelSeparationAngleStrength: 0 + - _Decal3ChannelSeparationEnable: 0 + - _Decal3ChannelSeparationHue: 0 + - _Decal3ChannelSeparationPremultiply: 0 + - _Decal3ChannelSeparationVertical: 0 + - _Decal3Depth: 0 + - _Decal3FaceMask: 0 + - _Decal3GlobalMask: 0 + - _Decal3GlobalMaskBlendType: 2 + - _Decal3HueAngleStrength: 0 + - _Decal3MaskChannel: 3 + - _Decal3OnlyVideo: 0 + - _Decal3OverrideAlphaMode: 0 + - _Decal3TPSMaskStrength: 1 + - _Decal3UseDecalAlpha: 0 + - _Decal3VideoAspectFix: 0 + - _Decal3VideoEmissionStrength: 0 + - _Decal3VideoEnabled: 0 + - _Decal3VideoFitToScale: 1 + - _DecalBlendAlpha: 1 + - _DecalBlendAlpha1: 1 + - _DecalBlendAlpha2: 1 + - _DecalBlendAlpha3: 1 + - _DecalBlendType: 0 + - _DecalBlendType1: 0 + - _DecalBlendType2: 0 + - _DecalBlendType3: 0 + - _DecalColor1ThemeIndex: 0 + - _DecalColor2ThemeIndex: 0 + - _DecalColor3ThemeIndex: 0 + - _DecalColorThemeIndex: 0 + - _DecalEmissionStrength: 0 + - _DecalEmissionStrength1: 0 + - _DecalEmissionStrength2: 0 + - _DecalEmissionStrength3: 0 + - _DecalEnabled: 0 + - _DecalEnabled1: 0 + - _DecalEnabled2: 0 + - _DecalEnabled3: 0 + - _DecalHueShift: 0 + - _DecalHueShift1: 0 + - _DecalHueShift2: 0 + - _DecalHueShift3: 0 + - _DecalHueShiftColorSpace: 0 + - _DecalHueShiftColorSpace1: 0 + - _DecalHueShiftColorSpace2: 0 + - _DecalHueShiftColorSpace3: 0 + - _DecalHueShiftEnabled: 0 + - _DecalHueShiftEnabled1: 0 + - _DecalHueShiftEnabled2: 0 + - _DecalHueShiftEnabled3: 0 + - _DecalHueShiftSelectOrShift: 1 + - _DecalHueShiftSelectOrShift1: 1 + - _DecalHueShiftSelectOrShift2: 1 + - _DecalHueShiftSelectOrShift3: 1 + - _DecalHueShiftSpeed: 0 + - _DecalHueShiftSpeed1: 0 + - _DecalHueShiftSpeed2: 0 + - _DecalHueShiftSpeed3: 0 + - _DecalMaskUV: 0 + - _DecalMirroredUVMode: 0 + - _DecalMirroredUVMode1: 0 + - _DecalMirroredUVMode2: 0 + - _DecalMirroredUVMode3: 0 + - _DecalOverrideAlpha: 0 + - _DecalOverrideAlpha1: 0 + - _DecalOverrideAlpha2: 0 + - _DecalOverrideAlpha3: 0 + - _DecalRotation: 0 + - _DecalRotation1: 0 + - _DecalRotation2: 0 + - _DecalRotation3: 0 + - _DecalRotationCTALBand0: 0 + - _DecalRotationCTALBand1: 0 + - _DecalRotationCTALBand2: 0 + - _DecalRotationCTALBand3: 0 + - _DecalRotationCTALSpeed0: 0 + - _DecalRotationCTALSpeed1: 0 + - _DecalRotationCTALSpeed2: 0 + - _DecalRotationCTALSpeed3: 0 + - _DecalRotationCTALType0: 0 + - _DecalRotationCTALType1: 0 + - _DecalRotationCTALType2: 0 + - _DecalRotationCTALType3: 0 + - _DecalRotationSpeed: 0 + - _DecalRotationSpeed1: 0 + - _DecalRotationSpeed2: 0 + - _DecalRotationSpeed3: 0 + - _DecalSymmetryMode: 0 + - _DecalSymmetryMode1: 0 + - _DecalSymmetryMode2: 0 + - _DecalSymmetryMode3: 0 + - _DecalTPSDepthMaskEnabled: 0 + - _DecalTexture1UV: 0 + - _DecalTexture2UV: 0 + - _DecalTexture3UV: 0 + - _DecalTextureUV: 0 + - _DecalTiled: 0 + - _DecalTiled1: 0 + - _DecalTiled2: 0 + - _DecalTiled3: 0 + - _DepthAlphaMaxDepth: 1 + - _DepthAlphaMaxValue: 0 + - _DepthAlphaMinDepth: 0 + - _DepthAlphaMinValue: 1 + - _DepthAlphaToggle: 0 + - _DepthBulgeFadeLength: 0.02 + - _DepthBulgeHeight: 0.02 + - _DepthBulgeMaskChannel: 0 + - _DepthBulgeMaskUV: 0 + - _DepthBulgeWarning: 0 + - _DepthColorBlendMode: 0 + - _DepthColorMaxDepth: 1 + - _DepthColorMaxValue: 0 + - _DepthColorMinDepth: 0 + - _DepthColorMinValue: 1 + - _DepthColorThemeIndex: 0 + - _DepthColorToggle: 0 + - _DepthEmissionStrength: 0 + - _DepthFXWarning: 0 + - _DepthMaskChannel: 0 + - _DepthMaskGlobalMask: 0 + - _DepthMaskGlobalMaskBlendType: 2 + - _DepthMaskUV: 0 + - _DepthRimAdd: 0 + - _DepthRimAdditiveLighting: 0 + - _DepthRimBrightness: 1 + - _DepthRimColorThemeIndex: 0 + - _DepthRimEmission: 0 + - _DepthRimHideInShadow: 0 + - _DepthRimMixBaseColor: 0 + - _DepthRimMixLightColor: 0 + - _DepthRimMultiply: 0 + - _DepthRimNormalToUse: 1 + - _DepthRimReplace: 0 + - _DepthRimSharpness: 0.2 + - _DepthRimType: 0 + - _DepthRimWidth: 0.2 + - _DepthTextureUV: 0 + - _DetailBrightness: 1 + - _DetailEnabled: 0 + - _DetailMaskStochastic: 0 + - _DetailMaskUV: 0 + - _DetailNormalGlobalMask: 0 + - _DetailNormalGlobalMaskBlendType: 2 - _DetailNormalMapScale: 1 + - _DetailNormalMapStochastic: 0 + - _DetailNormalMapUV: 0 + - _DetailTexGlobalMask: 0 + - _DetailTexGlobalMaskBlendType: 2 + - _DetailTexIntensity: 1 + - _DetailTexStochastic: 0 + - _DetailTexUV: 0 + - _DetailTintThemeIndex: 0 + - _DisableDirectionalInAdd: 1 + - _DissolveAlpha: 0 + - _DissolveAlpha0: 0 + - _DissolveAlpha1: 0 + - _DissolveAlpha2: 0 + - _DissolveAlpha3: 0 + - _DissolveAlpha4: 0 + - _DissolveAlpha5: 0 + - _DissolveAlpha6: 0 + - _DissolveAlpha7: 0 + - _DissolveAlpha8: 0 + - _DissolveAlpha9: 0 + - _DissolveApplyGlobalMaskBlendType: 0 + - _DissolveApplyGlobalMaskIndex: 0 + - _DissolveDetailEdgeSmoothing: 0 + - _DissolveDetailNoiseUV: 0 + - _DissolveDetailStrength: 0.1 + - _DissolveEdgeColorThemeIndex: 0 + - _DissolveEdgeEmission: 0 + - _DissolveEdgeHardness: 0.5 + - _DissolveEdgeHueSelectOrShift: 1 + - _DissolveEdgeHueShift: 0 + - _DissolveEdgeHueShiftColorSpace: 0 + - _DissolveEdgeHueShiftEnabled: 0 + - _DissolveEdgeHueShiftSpeed: 0 + - _DissolveEdgeWidth: 0.025 + - _DissolveHueSelectOrShift: 1 + - _DissolveHueShift: 0 + - _DissolveHueShiftColorSpace: 0 + - _DissolveHueShiftEnabled: 0 + - _DissolveHueShiftSpeed: 0 + - _DissolveInverseApplyGlobalMaskBlendType: 0 + - _DissolveInverseApplyGlobalMaskIndex: 0 + - _DissolveInvertDetailNoise: 0 + - _DissolveInvertNoise: 0 + - _DissolveMaskGlobalMask: 0 + - _DissolveMaskGlobalMaskBlendType: 2 + - _DissolveMaskInvert: 0 + - _DissolveMaskUV: 0 + - _DissolveNoiseTextureUV: 0 + - _DissolveP2PClamp: 0 + - _DissolveP2PEdgeLength: 0.1 + - _DissolveP2PWorldLocal: 0 + - _DissolveTextureColorThemeIndex: 0 + - _DissolveToEmissionStrength: 0 + - _DissolveToTextureUV: 0 + - _DissolveType: 1 + - _DissolveUseVertexColors: 0 + - _DistortionFlowTexture1UV: 0 + - _DistortionFlowTextureUV: 0 + - _DistortionMaskChannel: 0 + - _DistortionMaskUV: 0 + - _DistortionStrength: 0.03 + - _DistortionStrength1: 0.01 + - _DistortionStrength1AudioLinkBand: 0 + - _DistortionStrengthAudioLinkBand: 0 + - _DistortionUvToDistort: 0 - _DstBlend: 0 + - _DstBlendAlpha: 10 + - _EmissionAL0Enabled: 0 + - _EmissionAL0MultipliersBand: 0 + - _EmissionAL0StrengthBand: 0 + - _EmissionAL1Enabled: 0 + - _EmissionAL1MultipliersBand: 0 + - _EmissionAL1StrengthBand: 0 + - _EmissionAL2Enabled: 0 + - _EmissionAL2MultipliersBand: 0 + - _EmissionAL2StrengthBand: 0 + - _EmissionAL3Enabled: 0 + - _EmissionAL3MultipliersBand: 0 + - _EmissionAL3StrengthBand: 0 + - _EmissionBaseColorAsMap: 0 + - _EmissionBaseColorAsMap1: 0 + - _EmissionBaseColorAsMap2: 0 + - _EmissionBaseColorAsMap3: 0 + - _EmissionBlinkingEnabled: 0 + - _EmissionBlinkingEnabled1: 0 + - _EmissionBlinkingEnabled2: 0 + - _EmissionBlinkingEnabled3: 0 + - _EmissionBlinkingOffset: 0 + - _EmissionBlinkingOffset1: 0 + - _EmissionBlinkingOffset2: 0 + - _EmissionBlinkingOffset3: 0 + - _EmissionCenterOutEnabled: 0 + - _EmissionCenterOutEnabled1: 0 + - _EmissionCenterOutEnabled2: 0 + - _EmissionCenterOutEnabled3: 0 + - _EmissionCenterOutSpeed: 5 + - _EmissionCenterOutSpeed1: 2 + - _EmissionCenterOutSpeed2: 5 + - _EmissionCenterOutSpeed3: 5 + - _EmissionColor1ThemeIndex: 0 + - _EmissionColor2ThemeIndex: 0 + - _EmissionColor3ThemeIndex: 0 + - _EmissionColorThemeIndex: 0 + - _EmissionFluorescence: 0 + - _EmissionFluorescence1: 0 + - _EmissionFluorescence2: 0 + - _EmissionFluorescence3: 0 + - _EmissionHueSelectOrShift: 1 + - _EmissionHueSelectOrShift1: 1 + - _EmissionHueSelectOrShift2: 1 + - _EmissionHueSelectOrShift3: 1 + - _EmissionHueShift: 0 + - _EmissionHueShift1: 0 + - _EmissionHueShift2: 0 + - _EmissionHueShift3: 0 + - _EmissionHueShiftColorSpace: 0 + - _EmissionHueShiftColorSpace1: 0 + - _EmissionHueShiftColorSpace2: 0 + - _EmissionHueShiftColorSpace3: 0 + - _EmissionHueShiftEnabled: 0 + - _EmissionHueShiftEnabled1: 0 + - _EmissionHueShiftEnabled2: 0 + - _EmissionHueShiftEnabled3: 0 + - _EmissionHueShiftSpeed: 0 + - _EmissionHueShiftSpeed1: 0 + - _EmissionHueShiftSpeed2: 0 + - _EmissionHueShiftSpeed3: 0 + - _EmissionMap1UV: 0 + - _EmissionMap2UV: 0 + - _EmissionMap3UV: 0 + - _EmissionMapUV: 0 + - _EmissionMask0GlobalMask: 0 + - _EmissionMask0GlobalMaskBlendType: 2 + - _EmissionMask1Channel: 0 + - _EmissionMask1GlobalMask: 0 + - _EmissionMask1GlobalMaskBlendType: 2 + - _EmissionMask1UV: 0 + - _EmissionMask2Channel: 0 + - _EmissionMask2GlobalMask: 0 + - _EmissionMask2GlobalMaskBlendType: 2 + - _EmissionMask2UV: 0 + - _EmissionMask3Channel: 0 + - _EmissionMask3GlobalMask: 0 + - _EmissionMask3GlobalMaskBlendType: 2 + - _EmissionMask3UV: 0 + - _EmissionMaskChannel: 0 + - _EmissionMaskInvert: 0 + - _EmissionMaskInvert1: 0 + - _EmissionMaskInvert2: 0 + - _EmissionMaskInvert3: 0 + - _EmissionMaskUV: 0 + - _EmissionReplace0: 0 + - _EmissionReplace1: 0 + - _EmissionReplace2: 0 + - _EmissionReplace3: 0 + - _EmissionSaturation: 0 + - _EmissionSaturation1: 0 + - _EmissionSaturation2: 0 + - _EmissionSaturation3: 0 + - _EmissionScrollingOffset: 0 + - _EmissionScrollingOffset1: 0 + - _EmissionScrollingOffset2: 0 + - _EmissionScrollingOffset3: 0 + - _EmissionScrollingUseCurve: 0 + - _EmissionScrollingUseCurve1: 0 + - _EmissionScrollingUseCurve2: 0 + - _EmissionScrollingUseCurve3: 0 + - _EmissionScrollingVertexColor: 0 + - _EmissionScrollingVertexColor1: 1 + - _EmissionScrollingVertexColor2: 0 + - _EmissionScrollingVertexColor3: 0 + - _EmissionStrength: 1 + - _EmissionStrength1: 1 + - _EmissionStrength2: 0 + - _EmissionStrength3: 0 + - _EmissiveBlink_Max: 1 + - _EmissiveBlink_Max1: 1 + - _EmissiveBlink_Max2: 1 + - _EmissiveBlink_Max3: 1 + - _EmissiveBlink_Min: 0 + - _EmissiveBlink_Min1: 0 + - _EmissiveBlink_Min2: 0 + - _EmissiveBlink_Min3: 0 + - _EmissiveBlink_Velocity: 4 + - _EmissiveBlink_Velocity1: 4 + - _EmissiveBlink_Velocity2: 4 + - _EmissiveBlink_Velocity3: 4 + - _EmissiveScroll_Interval: 20 + - _EmissiveScroll_Interval1: 10 + - _EmissiveScroll_Interval2: 20 + - _EmissiveScroll_Interval3: 20 + - _EmissiveScroll_Velocity: 10 + - _EmissiveScroll_Velocity1: 5 + - _EmissiveScroll_Velocity2: 10 + - _EmissiveScroll_Velocity3: 10 + - _EmissiveScroll_Width: 10 + - _EmissiveScroll_Width1: 2 + - _EmissiveScroll_Width2: 10 + - _EmissiveScroll_Width3: 10 + - _EnableALDecal: 0 + - _EnableAniso: 0 + - _EnableAudioLink: 0 + - _EnableDepthBulge: 0 + - _EnableDepthRimLighting: 0 + - _EnableDissolve: 0 + - _EnableDissolveAudioLink: 0 + - _EnableDistortion: 0 + - _EnableDistortionAudioLink: 0 + - _EnableEmission: 1 + - _EnableEmission1: 0 + - _EnableEmission2: 0 + - _EnableEmission3: 0 + - _EnableEnvironmentalRim: 0 + - _EnableFlipbook: 0 + - _EnableGITDEmission: 0 + - _EnableGITDEmission1: 0 + - _EnableGITDEmission2: 0 + - _EnableGITDEmission3: 0 + - _EnableMirrorOptions: 0 + - _EnableOutlines: 0 + - _EnablePathRemapping: 0 + - _EnablePathing: 0 + - _EnableRim2Lighting: 0 + - _EnableRimLighting: 0 + - _EnableTouchGlow: 0 + - _EnableTruchet: 0 + - _EnableUDIMDiscardOptions: 0 + - _EnableUDIMFaceDiscardOptions: 0 + - _EnableVolumeColor: 0 + - _EntranceStiffness: 0.01 + - _EntryOpenDuration: 0.1 - _ExposureOcclusion: 0.2 + - _FFBFOutlineStencilHelp0: 0 + - _FFBFOutlineStencilHelp1: 0 + - _FFBFStencilHelp0: 0 + - _FFBFStencilHelp1: 0 + - _FXProximityColor: 0 + - _FXProximityColorBackFace: 0 + - _FXProximityColorMaxColorThemeIndex: 0 + - _FXProximityColorMaxDistance: 1 + - _FXProximityColorMinColorThemeIndex: 0 + - _FXProximityColorMinDistance: 0 + - _FXProximityColorType: 1 + - _FlipBackfaceNormals: 1 + - _FlipbookAlphaControlsFinalAlpha: 0 + - _FlipbookBlendType: 0 + - _FlipbookChronoType: 0 + - _FlipbookChronotensityBand: 0 + - _FlipbookChronotensityEnabled: 0 + - _FlipbookChronotensitySpeed: 0 + - _FlipbookColorReplaces: 0 + - _FlipbookColorThemeIndex: 0 + - _FlipbookCrossfadeEnabled: 0 + - _FlipbookCurrentFrame: 0 + - _FlipbookEmissionStrength: 0 + - _FlipbookEndFrame: 0 + - _FlipbookFPS: 30 + - _FlipbookFrameOffset: 0 + - _FlipbookHueSelectOrShift: 1 + - _FlipbookHueShift: 0 + - _FlipbookHueShiftColorSpace: 0 + - _FlipbookHueShiftEnabled: 0 + - _FlipbookHueShiftSpeed: 0 + - _FlipbookIntensityControlsAlpha: 0 + - _FlipbookManualFrameControl: 0 + - _FlipbookMaskChannel: 0 + - _FlipbookMaskGlobalMask: 0 + - _FlipbookMaskGlobalMaskBlendType: 2 + - _FlipbookMaskUV: 0 + - _FlipbookReplace: 1 + - _FlipbookRotation: 0 + - _FlipbookRotationSpeed: 0 + - _FlipbookStartAndEnd: 0 + - _FlipbookStartFrame: 0 + - _FlipbookTexArrayUV: 0 + - _FlipbookTiled: 0 + - _FogHeightOffset: 0 + - _FogHeightScale: 1 + - _FogScale: 1 + - _FogStartOffset: 0 + - _ForceFlatRampedLightmap: 1 + - _ForgotToLockMaterial: 1 + - _GGXAnisotropics: 0 + - _GIEmissionMultiplier: 1 + - _GITDEMaxEmissionMultiplier: 0 + - _GITDEMaxEmissionMultiplier1: 0 + - _GITDEMaxEmissionMultiplier2: 0 + - _GITDEMaxEmissionMultiplier3: 0 + - _GITDEMaxLight: 1 + - _GITDEMaxLight1: 1 + - _GITDEMaxLight2: 1 + - _GITDEMaxLight3: 1 + - _GITDEMinEmissionMultiplier: 1 + - _GITDEMinEmissionMultiplier1: 1 + - _GITDEMinEmissionMultiplier2: 1 + - _GITDEMinEmissionMultiplier3: 1 + - _GITDEMinLight: 0 + - _GITDEMinLight1: 0 + - _GITDEMinLight2: 0 + - _GITDEMinLight3: 0 + - _GITDEWorldOrMesh: 0 + - _GITDEWorldOrMesh1: 0 + - _GITDEWorldOrMesh2: 0 + - _GITDEWorldOrMesh3: 0 + - _GSAAStrength: 0 + - _GlitterALAlphaAddBand: 0 + - _GlitterALChronoRotationSpeed: 0 + - _GlitterALChronoRotationSpeedBand: 0 + - _GlitterALChronoRotationSpeedType: 0 + - _GlitterALChronoSparkleSpeed: 0 + - _GlitterALChronoSparkleSpeedBand: 0 + - _GlitterALChronoSparkleSpeedType: 0 + - _GlitterALEnabled: 0 + - _GlitterALMaxBrightnessBand: 0 + - _GlitterALSizeAddBand: 0 + - _GlitterAngleRange: 90 + - _GlitterBias: 0.8 + - _GlitterBlendType: 0 + - _GlitterBrightness: 3 + - _GlitterCenterSize: 0.08 + - _GlitterColorMapUV: 0 + - _GlitterColorThemeIndex: 0 + - _GlitterContrast: 300 + - _GlitterEnable: 0 + - _GlitterFrequency: 300 + - _GlitterHideInShadow: 0 + - _GlitterHueSelectOrShift: 1 + - _GlitterHueShift: 0 + - _GlitterHueShiftColorSpace: 0 + - _GlitterHueShiftEnabled: 0 + - _GlitterHueShiftSpeed: 0 + - _GlitterJaggyFix: 0 + - _GlitterLayers: 2 + - _GlitterMaskChannel: 0 + - _GlitterMaskGlobalMask: 0 + - _GlitterMaskGlobalMaskBlendType: 2 + - _GlitterMaskInvert: 0 + - _GlitterMaskUV: 0 + - _GlitterMinBrightness: 0 + - _GlitterMode: 0 + - _GlitterRandomColors: 0 + - _GlitterRandomLocation: 1 + - _GlitterRandomRotation: 0 + - _GlitterRandomSize: 0 + - _GlitterScaleWithLighting: 0 + - _GlitterShape: 0 + - _GlitterSize: 0.3 + - _GlitterSpeed: 10 + - _GlitterTextureRotation: 0 + - _GlitterUV: 0 + - _GlitterUseNormals: 0 + - _GlitterUseSurfaceColor: 0 + - _GlobalMaskBackface_0: 0 + - _GlobalMaskBackface_1: 0 + - _GlobalMaskBackface_10: 0 + - _GlobalMaskBackface_11: 0 + - _GlobalMaskBackface_12: 0 + - _GlobalMaskBackface_13: 0 + - _GlobalMaskBackface_14: 0 + - _GlobalMaskBackface_15: 0 + - _GlobalMaskBackface_2: 0 + - _GlobalMaskBackface_3: 0 + - _GlobalMaskBackface_4: 0 + - _GlobalMaskBackface_5: 0 + - _GlobalMaskBackface_6: 0 + - _GlobalMaskBackface_7: 0 + - _GlobalMaskBackface_8: 0 + - _GlobalMaskBackface_9: 0 + - _GlobalMaskCamera_0: 0 + - _GlobalMaskCamera_1: 0 + - _GlobalMaskCamera_10: 0 + - _GlobalMaskCamera_11: 0 + - _GlobalMaskCamera_12: 0 + - _GlobalMaskCamera_13: 0 + - _GlobalMaskCamera_14: 0 + - _GlobalMaskCamera_15: 0 + - _GlobalMaskCamera_2: 0 + - _GlobalMaskCamera_3: 0 + - _GlobalMaskCamera_4: 0 + - _GlobalMaskCamera_5: 0 + - _GlobalMaskCamera_6: 0 + - _GlobalMaskCamera_7: 0 + - _GlobalMaskCamera_8: 0 + - _GlobalMaskCamera_9: 0 + - _GlobalMaskDistanceBlendType_0: 0 + - _GlobalMaskDistanceBlendType_1: 0 + - _GlobalMaskDistanceBlendType_10: 0 + - _GlobalMaskDistanceBlendType_11: 0 + - _GlobalMaskDistanceBlendType_12: 0 + - _GlobalMaskDistanceBlendType_13: 0 + - _GlobalMaskDistanceBlendType_14: 0 + - _GlobalMaskDistanceBlendType_15: 0 + - _GlobalMaskDistanceBlendType_2: 0 + - _GlobalMaskDistanceBlendType_3: 0 + - _GlobalMaskDistanceBlendType_4: 0 + - _GlobalMaskDistanceBlendType_5: 0 + - _GlobalMaskDistanceBlendType_6: 0 + - _GlobalMaskDistanceBlendType_7: 0 + - _GlobalMaskDistanceBlendType_8: 0 + - _GlobalMaskDistanceBlendType_9: 0 + - _GlobalMaskDistanceEnable_0: 0 + - _GlobalMaskDistanceEnable_1: 0 + - _GlobalMaskDistanceEnable_10: 0 + - _GlobalMaskDistanceEnable_11: 0 + - _GlobalMaskDistanceEnable_12: 0 + - _GlobalMaskDistanceEnable_13: 0 + - _GlobalMaskDistanceEnable_14: 0 + - _GlobalMaskDistanceEnable_15: 0 + - _GlobalMaskDistanceEnable_2: 0 + - _GlobalMaskDistanceEnable_3: 0 + - _GlobalMaskDistanceEnable_4: 0 + - _GlobalMaskDistanceEnable_5: 0 + - _GlobalMaskDistanceEnable_6: 0 + - _GlobalMaskDistanceEnable_7: 0 + - _GlobalMaskDistanceEnable_8: 0 + - _GlobalMaskDistanceEnable_9: 0 + - _GlobalMaskDistanceMaxAlpha_0: 1 + - _GlobalMaskDistanceMaxAlpha_1: 1 + - _GlobalMaskDistanceMaxAlpha_10: 1 + - _GlobalMaskDistanceMaxAlpha_11: 1 + - _GlobalMaskDistanceMaxAlpha_12: 1 + - _GlobalMaskDistanceMaxAlpha_13: 1 + - _GlobalMaskDistanceMaxAlpha_14: 1 + - _GlobalMaskDistanceMaxAlpha_15: 1 + - _GlobalMaskDistanceMaxAlpha_2: 1 + - _GlobalMaskDistanceMaxAlpha_3: 1 + - _GlobalMaskDistanceMaxAlpha_4: 1 + - _GlobalMaskDistanceMaxAlpha_5: 1 + - _GlobalMaskDistanceMaxAlpha_6: 1 + - _GlobalMaskDistanceMaxAlpha_7: 1 + - _GlobalMaskDistanceMaxAlpha_8: 1 + - _GlobalMaskDistanceMaxAlpha_9: 1 + - _GlobalMaskDistanceMax_0: 2 + - _GlobalMaskDistanceMax_1: 2 + - _GlobalMaskDistanceMax_10: 2 + - _GlobalMaskDistanceMax_11: 2 + - _GlobalMaskDistanceMax_12: 2 + - _GlobalMaskDistanceMax_13: 2 + - _GlobalMaskDistanceMax_14: 2 + - _GlobalMaskDistanceMax_15: 2 + - _GlobalMaskDistanceMax_2: 2 + - _GlobalMaskDistanceMax_3: 2 + - _GlobalMaskDistanceMax_4: 2 + - _GlobalMaskDistanceMax_5: 2 + - _GlobalMaskDistanceMax_6: 2 + - _GlobalMaskDistanceMax_7: 2 + - _GlobalMaskDistanceMax_8: 2 + - _GlobalMaskDistanceMax_9: 2 + - _GlobalMaskDistanceMinAlpha_0: 0 + - _GlobalMaskDistanceMinAlpha_1: 0 + - _GlobalMaskDistanceMinAlpha_10: 0 + - _GlobalMaskDistanceMinAlpha_11: 0 + - _GlobalMaskDistanceMinAlpha_12: 0 + - _GlobalMaskDistanceMinAlpha_13: 0 + - _GlobalMaskDistanceMinAlpha_14: 0 + - _GlobalMaskDistanceMinAlpha_15: 0 + - _GlobalMaskDistanceMinAlpha_2: 0 + - _GlobalMaskDistanceMinAlpha_3: 0 + - _GlobalMaskDistanceMinAlpha_4: 0 + - _GlobalMaskDistanceMinAlpha_5: 0 + - _GlobalMaskDistanceMinAlpha_6: 0 + - _GlobalMaskDistanceMinAlpha_7: 0 + - _GlobalMaskDistanceMinAlpha_8: 0 + - _GlobalMaskDistanceMinAlpha_9: 0 + - _GlobalMaskDistanceMin_0: 1 + - _GlobalMaskDistanceMin_1: 1 + - _GlobalMaskDistanceMin_10: 1 + - _GlobalMaskDistanceMin_11: 1 + - _GlobalMaskDistanceMin_12: 1 + - _GlobalMaskDistanceMin_13: 1 + - _GlobalMaskDistanceMin_14: 1 + - _GlobalMaskDistanceMin_15: 1 + - _GlobalMaskDistanceMin_2: 1 + - _GlobalMaskDistanceMin_3: 1 + - _GlobalMaskDistanceMin_4: 1 + - _GlobalMaskDistanceMin_5: 1 + - _GlobalMaskDistanceMin_6: 1 + - _GlobalMaskDistanceMin_7: 1 + - _GlobalMaskDistanceMin_8: 1 + - _GlobalMaskDistanceMin_9: 1 + - _GlobalMaskDistanceType_0: 1 + - _GlobalMaskDistanceType_1: 1 + - _GlobalMaskDistanceType_10: 1 + - _GlobalMaskDistanceType_11: 1 + - _GlobalMaskDistanceType_12: 1 + - _GlobalMaskDistanceType_13: 1 + - _GlobalMaskDistanceType_14: 1 + - _GlobalMaskDistanceType_15: 1 + - _GlobalMaskDistanceType_2: 1 + - _GlobalMaskDistanceType_3: 1 + - _GlobalMaskDistanceType_4: 1 + - _GlobalMaskDistanceType_5: 1 + - _GlobalMaskDistanceType_6: 1 + - _GlobalMaskDistanceType_7: 1 + - _GlobalMaskDistanceType_8: 1 + - _GlobalMaskDistanceType_9: 1 + - _GlobalMaskMirrorVisibilityMode: 1 + - _GlobalMaskMirror_0: 0 + - _GlobalMaskMirror_1: 0 + - _GlobalMaskMirror_10: 0 + - _GlobalMaskMirror_11: 0 + - _GlobalMaskMirror_12: 0 + - _GlobalMaskMirror_13: 0 + - _GlobalMaskMirror_14: 0 + - _GlobalMaskMirror_15: 0 + - _GlobalMaskMirror_2: 0 + - _GlobalMaskMirror_3: 0 + - _GlobalMaskMirror_4: 0 + - _GlobalMaskMirror_5: 0 + - _GlobalMaskMirror_6: 0 + - _GlobalMaskMirror_7: 0 + - _GlobalMaskMirror_8: 0 + - _GlobalMaskMirror_9: 0 + - _GlobalMaskModifiersBackfaceEnable: 0 + - _GlobalMaskModifiersCameraEnable: 0 + - _GlobalMaskModifiersCameraInfo: 0 + - _GlobalMaskModifiersDistanceEnable: 0 + - _GlobalMaskModifiersMirrorEnable: 0 + - _GlobalMaskOptionsEnable: 0 + - _GlobalMaskOptionsType: 0 + - _GlobalMaskSlider_0: 0 + - _GlobalMaskSlider_1: 0 + - _GlobalMaskSlider_10: 0 + - _GlobalMaskSlider_11: 0 + - _GlobalMaskSlider_12: 0 + - _GlobalMaskSlider_13: 0 + - _GlobalMaskSlider_14: 0 + - _GlobalMaskSlider_15: 0 + - _GlobalMaskSlider_2: 0 + - _GlobalMaskSlider_3: 0 + - _GlobalMaskSlider_4: 0 + - _GlobalMaskSlider_5: 0 + - _GlobalMaskSlider_6: 0 + - _GlobalMaskSlider_7: 0 + - _GlobalMaskSlider_8: 0 + - _GlobalMaskSlider_9: 0 + - _GlobalMaskTexture0Split: 0 + - _GlobalMaskTexture0UV: 0 + - _GlobalMaskTexture1Split: 0 + - _GlobalMaskTexture1UV: 0 + - _GlobalMaskTexture2Split: 0 + - _GlobalMaskTexture2UV: 0 + - _GlobalMaskTexture3Split: 0 + - _GlobalMaskTexture3UV: 0 + - _GlobalMaskTexturesEnable: 0 + - _GlobalMaskToggleOff_0: 0 + - _GlobalMaskToggleOff_1: 0 + - _GlobalMaskToggleOff_10: 0 + - _GlobalMaskToggleOff_11: 0 + - _GlobalMaskToggleOff_12: 0 + - _GlobalMaskToggleOff_13: 0 + - _GlobalMaskToggleOff_14: 0 + - _GlobalMaskToggleOff_15: 0 + - _GlobalMaskToggleOff_2: 0 + - _GlobalMaskToggleOff_3: 0 + - _GlobalMaskToggleOff_4: 0 + - _GlobalMaskToggleOff_5: 0 + - _GlobalMaskToggleOff_6: 0 + - _GlobalMaskToggleOff_7: 0 + - _GlobalMaskToggleOff_8: 0 + - _GlobalMaskToggleOff_9: 0 + - _GlobalMaskToggleOn_0: 0 + - _GlobalMaskToggleOn_1: 0 + - _GlobalMaskToggleOn_10: 0 + - _GlobalMaskToggleOn_11: 0 + - _GlobalMaskToggleOn_12: 0 + - _GlobalMaskToggleOn_13: 0 + - _GlobalMaskToggleOn_14: 0 + - _GlobalMaskToggleOn_15: 0 + - _GlobalMaskToggleOn_2: 0 + - _GlobalMaskToggleOn_3: 0 + - _GlobalMaskToggleOn_4: 0 + - _GlobalMaskToggleOn_5: 0 + - _GlobalMaskToggleOn_6: 0 + - _GlobalMaskToggleOn_7: 0 + - _GlobalMaskToggleOn_8: 0 + - _GlobalMaskToggleOn_9: 0 + - _GlobalMaskVertexColorAlpha: 0 + - _GlobalMaskVertexColorAlphaBlendType: 2 + - _GlobalMaskVertexColorBlue: 0 + - _GlobalMaskVertexColorBlueBlendType: 2 + - _GlobalMaskVertexColorGreen: 0 + - _GlobalMaskVertexColorGreenBlendType: 2 + - _GlobalMaskVertexColorLinearSpace: 1 + - _GlobalMaskVertexColorRed: 0 + - _GlobalMaskVertexColorRedBlendType: 2 + - _GlobalThemeHue0: 0 + - _GlobalThemeHue1: 0 + - _GlobalThemeHue2: 0 + - _GlobalThemeHue3: 0 + - _GlobalThemeHueSpeed0: 0 + - _GlobalThemeHueSpeed1: 0 + - _GlobalThemeHueSpeed2: 0 + - _GlobalThemeHueSpeed3: 0 + - _GlobalThemeSaturation0: 0 + - _GlobalThemeSaturation1: 0 + - _GlobalThemeSaturation2: 0 + - _GlobalThemeSaturation3: 0 + - _GlobalThemeValue0: 0 + - _GlobalThemeValue1: 0 + - _GlobalThemeValue2: 0 + - _GlobalThemeValue3: 0 - _GlossMapScale: 1 - _Glossiness: 0.807 - _GlossyReflections: 1 + - _GreenAlphaAdd: 0 + - _GreenColorThemeIndex: 0 + - _GreenTextureStochastic: 0 + - _GreenTextureUV: 0 + - _HeightMapUV: 0 + - _HeightOffset: 0 + - _HeightStepsMax: 128 + - _HeightStepsMin: 10 + - _HeightStrength: 0.005 + - _HeightmaskChannel: 0 + - _HeightmaskInvert: 0 + - _HeightmaskUV: 0 + - _HighColorThemeIndex: 0 + - _HighColor_Power: 0.2 + - _HighColor_TexUV: 0 + - _IgnoreCastedShadows: 0 + - _IgnoreFog: 0 + - _Is_BlendAddToHiColor: 0 + - _Is_LightColor_Ap_Rim2Light: 1 + - _Is_LightColor_Ap_RimLight: 1 + - _Is_LightColor_Rim2Light: 1 + - _Is_LightColor_RimLight: 1 + - _Is_NormalMapToRim2Light: 1 + - _Is_NormalMapToRimLight: 1 + - _Is_SpecularToHighColor: 0 - _LTCGI: 0 + - _LTCGIEnabled: 0 + - _LTCGI_AnimToggle: 1 + - _LTCGI_Attribution: 0 + - _LTCGI_DiffuseColorThemeIndex: 0 + - _LTCGI_Metallic: 0 + - _LTCGI_Smoothness: 0 + - _LTCGI_SpecularColorThemeIndex: 0 + - _LTCGI_UseEO: 0 + - _LTCGI_UsePBR: 1 + - _Layer1Strength: 1 + - _Layer2Size: 0 + - _Layer2Strength: 0 + - _Length: 0 + - _LightDataAOGlobalMaskBlendTypeR: 2 + - _LightDataAOGlobalMaskR: 0 + - _LightDataAOStrengthA: 0 + - _LightDataAOStrengthB: 0 + - _LightDataAOStrengthG: 0 + - _LightDataAOStrengthR: 1 + - _LightDataDebugEnabled: 0 + - _LightDataDetailShadowGlobalMaskBlendTypeR: 2 + - _LightDataDetailShadowGlobalMaskR: 0 + - _LightDataSDFBlendY: 1 + - _LightDataSDFMapLOD: 0 + - _LightDataSDFMapUV: 0 + - _LightDataShadowMaskGlobalMaskBlendTypeR: 2 + - _LightDataShadowMaskGlobalMaskR: 0 + - _LightDirection_MaskOn: 0 + - _LightDirection_MaskOn2: 0 + - _LightingAOMapsUV: 0 + - _LightingAddDetailShadowStrengthA: 0 + - _LightingAddDetailShadowStrengthB: 0 + - _LightingAddDetailShadowStrengthG: 0 + - _LightingAddDetailShadowStrengthR: 1 + - _LightingAdditiveCastedShadows: 1 + - _LightingAdditiveEnable: 1 + - _LightingAdditiveGradientEnd: 0.5 + - _LightingAdditiveGradientStart: 0 + - _LightingAdditiveLimit: 1 + - _LightingAdditiveLimited: 1 + - _LightingAdditiveMonochromatic: 0 + - _LightingAdditivePassthrough: 0.5 + - _LightingAdditiveType: 3 + - _LightingCap: 1 + - _LightingCapEnabled: 1 + - _LightingCastedShadows: 0 + - _LightingColorMode: 0 + - _LightingDebugVisualize: 0 + - _LightingDetailShadowMapsUV: 0 + - _LightingDetailShadowStrengthA: 0 + - _LightingDetailShadowStrengthB: 0 + - _LightingDetailShadowStrengthG: 0 + - _LightingDetailShadowStrengthR: 1 + - _LightingDirectionMode: 0 + - _LightingEnableLightVolumes: 1 + - _LightingForceColorEnabled: 0 + - _LightingForcedColorThemeIndex: 0 + - _LightingGradientEnd: 0.5 + - _LightingGradientStart: 0 + - _LightingIgnoreAmbientColor: 1 + - _LightingIndirectUsesNormals: 0 + - _LightingMapMode: 0 + - _LightingMinLightBrightness: 0 + - _LightingMirrorVertexLightingEnabled: 1 + - _LightingMode: 6 + - _LightingMonochromatic: 0 + - _LightingMulitlayerNonLinear: 1 + - _LightingShadowMaskStrengthA: 0 + - _LightingShadowMaskStrengthB: 0 + - _LightingShadowMaskStrengthG: 0 + - _LightingShadowMaskStrengthR: 1 + - _LightingShadowMasksUV: 0 + - _LightingVertexLightingEnabled: 1 + - _LightingViewDirOffsetPitch: 0 + - _LightingViewDirOffsetYaw: 0 + - _LightingWrappedNormalization: 0 + - _LightingWrappedWrap: 0 - _LightmapSpecular: 1 - _LightmapSpecularMaxSmoothness: 0.9 + - _LineColorThemeIndex: 0 + - _LineWidth: 1 + - _LookAtAlphaAlpha: 1 + - _LookAtAlphaMaskEnabled: 0 + - _LookAtAlphaTargetUp: 0 + - _LookAtBlueAlpha: 1 + - _LookAtBlueMaskEnabled: 0 + - _LookAtBlueTargetUp: 0 + - _LookAtGreenAlpha: 1 + - _LookAtGreenMaskEnabled: 0 + - _LookAtGreenTargetUp: 0 + - _LookAtMaskUV: 0 + - _LookAtRedAlpha: 1 + - _LookAtRedMaskEnabled: 1 + - _LookAtRedTargetUp: 0 + - _LookAtVisibilityEnabled: 0 + - _LookAtVisibilityMirror: 0 + - _LookAtVisibilityMode: 1 + - _LookAtVisibilityVRCCameraDesktop: 1 + - _LookAtVisibilityVRCCameraScreenshot: 1 + - _LookAtVisibilityVRCCameraVR: 1 + - _LookAtVisibilityVRCMirrorDesktop: 1 + - _LookAtVisibilityVRCMirrorVR: 1 + - _LookAtVisibilityVRCRegular: 1 + - _MainALHueShiftBand: 0 + - _MainALHueShiftCTIndex: 0 + - _MainAlphaMaskMode: 2 + - _MainBrightness: 0 + - _MainBrightnessGlobalMask: 0 + - _MainBrightnessGlobalMaskBlendType: 2 + - _MainColorAdjustTextureUV: 0 + - _MainColorAdjustToggle: 0 + - _MainGamma: 1 + - _MainGammaGlobalMask: 0 + - _MainGammaGlobalMaskBlendType: 2 + - _MainGradationStrength: 0 + - _MainHueALCTEnabled: 0 + - _MainHueALMotionSpeed: 1 + - _MainHueGlobalMask: 0 + - _MainHueGlobalMaskBlendType: 2 + - _MainHueShift: 0 + - _MainHueShiftColorSpace: 0 + - _MainHueShiftReplace: 1 + - _MainHueShiftSelectOrShift: 1 + - _MainHueShiftSpeed: 0 + - _MainHueShiftToggle: 0 + - _MainIgnoreTexAlpha: 0 + - _MainPixelMode: 0 + - _MainSaturationGlobalMask: 0 + - _MainSaturationGlobalMaskBlendType: 2 + - _MainTexStochastic: 0 + - _MainTexUV: 0 + - _MainUseVertexColorAlpha: 0 + - _MainVertexColoring: 0 + - _MainVertexColoringEnabled: 0 + - _MainVertexColoringLinearSpace: 1 + - _Matcap0ALAlphaAddBand: 0 + - _Matcap0ALChronoPanBand: 0 + - _Matcap0ALChronoPanSpeed: 0 + - _Matcap0ALChronoPanType: 0 + - _Matcap0ALEmissionAddBand: 0 + - _Matcap0ALEnabled: 0 + - _Matcap0ALIntensityAddBand: 0 + - _Matcap0CircleMaskBlur: 0.1 + - _Matcap0CircleMaskBorder: 0.45 + - _Matcap0CircleMaskEnabled: 0 + - _Matcap0CustomNormal: 0 + - _Matcap0NormalMapScale: 1 + - _Matcap0NormalMapUV: 0 + - _Matcap1ALAlphaAddBand: 0 + - _Matcap1ALChronoPanBand: 0 + - _Matcap1ALChronoPanSpeed: 0 + - _Matcap1ALChronoPanType: 0 + - _Matcap1ALEmissionAddBand: 0 + - _Matcap1ALEnabled: 0 + - _Matcap1ALIntensityAddBand: 0 + - _Matcap1CustomNormal: 0 + - _Matcap1NormalMapScale: 1 + - _Matcap1NormalMapUV: 0 + - _Matcap2ALAlphaAddBand: 0 + - _Matcap2ALChronoPanBand: 0 + - _Matcap2ALChronoPanSpeed: 0 + - _Matcap2ALChronoPanType: 0 + - _Matcap2ALEmissionAddBand: 0 + - _Matcap2ALEnabled: 0 + - _Matcap2ALIntensityAddBand: 0 + - _Matcap2Add: 0 + - _Matcap2AddToLight: 0 + - _Matcap2AlphaOverride: 0 + - _Matcap2ApplyToAlphaBlendType: 0 + - _Matcap2ApplyToAlphaBlending: 1 + - _Matcap2ApplyToAlphaEnabled: 0 + - _Matcap2ApplyToAlphaSourceBlend: 0 + - _Matcap2BaseColorMix: 0 + - _Matcap2Border: 0.5 + - _Matcap2CircleMaskBlur: 0.1 + - _Matcap2CircleMaskBorder: 0.45 + - _Matcap2CircleMaskEnabled: 0 + - _Matcap2ColorThemeIndex: 0 + - _Matcap2CustomNormal: 0 + - _Matcap2EmissionStrength: 0 + - _Matcap2Enable: 0 + - _Matcap2HueSelectOrShift: 1 + - _Matcap2HueShift: 0 + - _Matcap2HueShiftColorSpace: 0 + - _Matcap2HueShiftEnabled: 0 + - _Matcap2HueShiftSpeed: 0 + - _Matcap2Intensity: 1 + - _Matcap2LightColorMix: 0 + - _Matcap2LightMask: 0 + - _Matcap2MaskChannel: 0 + - _Matcap2MaskGlobalMask: 0 + - _Matcap2MaskGlobalMaskBlendType: 2 + - _Matcap2MaskInvert: 0 + - _Matcap2MaskSmoothnessApply: 0 + - _Matcap2MaskSmoothnessChannel: 3 + - _Matcap2MaskUV: 0 + - _Matcap2Mixed: 0 + - _Matcap2Multiply: 0 + - _Matcap2Normal: 1 + - _Matcap2NormalMapScale: 1 + - _Matcap2NormalMapUV: 0 + - _Matcap2Replace: 0 + - _Matcap2Rotation: 0 + - _Matcap2Screen: 0 + - _Matcap2Smoothness: 1 + - _Matcap2TPSDepthEnabled: 0 + - _Matcap2TPSMaskStrength: 1 + - _Matcap2UVMode: 1 + - _Matcap2UVToBlend: 1 + - _Matcap3ALAlphaAddBand: 0 + - _Matcap3ALChronoPanBand: 0 + - _Matcap3ALChronoPanSpeed: 0 + - _Matcap3ALChronoPanType: 0 + - _Matcap3ALEmissionAddBand: 0 + - _Matcap3ALEnabled: 0 + - _Matcap3ALIntensityAddBand: 0 + - _Matcap3Add: 0 + - _Matcap3AddToLight: 0 + - _Matcap3AlphaOverride: 0 + - _Matcap3ApplyToAlphaBlendType: 0 + - _Matcap3ApplyToAlphaBlending: 1 + - _Matcap3ApplyToAlphaEnabled: 0 + - _Matcap3ApplyToAlphaSourceBlend: 0 + - _Matcap3BaseColorMix: 0 + - _Matcap3Border: 0.5 + - _Matcap3CircleMaskBlur: 0.1 + - _Matcap3CircleMaskBorder: 0.45 + - _Matcap3CircleMaskEnabled: 0 + - _Matcap3ColorThemeIndex: 0 + - _Matcap3CustomNormal: 0 + - _Matcap3EmissionStrength: 0 + - _Matcap3Enable: 0 + - _Matcap3HueSelectOrShift: 1 + - _Matcap3HueShift: 0 + - _Matcap3HueShiftColorSpace: 0 + - _Matcap3HueShiftEnabled: 0 + - _Matcap3HueShiftSpeed: 0 + - _Matcap3Intensity: 1 + - _Matcap3LightColorMix: 0 + - _Matcap3LightMask: 0 + - _Matcap3MaskChannel: 0 + - _Matcap3MaskGlobalMask: 0 + - _Matcap3MaskGlobalMaskBlendType: 2 + - _Matcap3MaskInvert: 0 + - _Matcap3MaskSmoothnessApply: 0 + - _Matcap3MaskSmoothnessChannel: 3 + - _Matcap3MaskUV: 0 + - _Matcap3Mixed: 0 + - _Matcap3Multiply: 0 + - _Matcap3Normal: 1 + - _Matcap3NormalMapScale: 1 + - _Matcap3NormalMapUV: 0 + - _Matcap3Replace: 0 + - _Matcap3Rotation: 0 + - _Matcap3Screen: 0 + - _Matcap3Smoothness: 1 + - _Matcap3TPSDepthEnabled: 0 + - _Matcap3TPSMaskStrength: 1 + - _Matcap3UVMode: 1 + - _Matcap3UVToBlend: 1 + - _Matcap4Add: 0 + - _Matcap4AddToLight: 0 + - _Matcap4AlphaOverride: 0 + - _Matcap4ApplyToAlphaBlendType: 0 + - _Matcap4ApplyToAlphaBlending: 1 + - _Matcap4ApplyToAlphaEnabled: 0 + - _Matcap4ApplyToAlphaSourceBlend: 0 + - _Matcap4BaseColorMix: 0 + - _Matcap4Border: 0.5 + - _Matcap4CircleMaskBlur: 0.1 + - _Matcap4CircleMaskBorder: 0.45 + - _Matcap4CircleMaskEnabled: 0 + - _Matcap4ColorThemeIndex: 0 + - _Matcap4EmissionStrength: 0 + - _Matcap4Enable: 0 + - _Matcap4HueSelectOrShift: 1 + - _Matcap4HueShift: 0 + - _Matcap4HueShiftColorSpace: 0 + - _Matcap4HueShiftEnabled: 0 + - _Matcap4HueShiftSpeed: 0 + - _Matcap4Intensity: 1 + - _Matcap4LightColorMix: 0 + - _Matcap4LightMask: 0 + - _Matcap4MaskChannel: 0 + - _Matcap4MaskGlobalMask: 0 + - _Matcap4MaskGlobalMaskBlendType: 2 + - _Matcap4MaskInvert: 0 + - _Matcap4MaskSmoothnessApply: 0 + - _Matcap4MaskSmoothnessChannel: 3 + - _Matcap4MaskUV: 0 + - _Matcap4Mixed: 0 + - _Matcap4Multiply: 0 + - _Matcap4Normal: 1 + - _Matcap4Replace: 0 + - _Matcap4Rotation: 0 + - _Matcap4Screen: 0 + - _Matcap4Smoothness: 1 + - _Matcap4TPSDepthEnabled: 0 + - _Matcap4TPSMaskStrength: 1 + - _Matcap4UVMode: 1 + - _Matcap4UVToBlend: 1 + - _MatcapAdd: 0 + - _MatcapAddToLight: 0 + - _MatcapAlphaOverride: 0 + - _MatcapApplyToAlphaBlendType: 0 + - _MatcapApplyToAlphaBlending: 1 + - _MatcapApplyToAlphaEnabled: 0 + - _MatcapApplyToAlphaSourceBlend: 0 + - _MatcapBaseColorMix: 0 + - _MatcapBorder: 0.5 + - _MatcapColorThemeIndex: 0 + - _MatcapEmissionStrength: 0 + - _MatcapEnable: 0 + - _MatcapHueSelectOrShift: 1 + - _MatcapHueShift: 0 + - _MatcapHueShiftColorSpace: 0 + - _MatcapHueShiftEnabled: 0 + - _MatcapHueShiftSpeed: 0 + - _MatcapIntensity: 1 + - _MatcapLightColorMix: 0 + - _MatcapLightMask: 0 + - _MatcapMaskChannel: 0 + - _MatcapMaskGlobalMask: 0 + - _MatcapMaskGlobalMaskBlendType: 2 + - _MatcapMaskInvert: 0 + - _MatcapMaskSmoothnessApply: 0 + - _MatcapMaskSmoothnessChannel: 3 + - _MatcapMaskUV: 0 + - _MatcapMixed: 0 + - _MatcapMultiply: 0 + - _MatcapNormal: 1 + - _MatcapReplace: 1 + - _MatcapRotation: 0 + - _MatcapScreen: 0 + - _MatcapSmoothness: 1 + - _MatcapTPSDepthEnabled: 0 + - _MatcapTPSMaskStrength: 1 + - _MatcapUVMode: 1 + - _MatcapUVToBlend: 1 - _Metallic: 0.831 + - _Mirror: 0 + - _MirrorColorThemeIndex: 0 + - _MirrorTextureBlendType: 0 + - _MirrorTextureEnabled: 0 + - _MirrorTextureForceEnabled: 0 + - _MirrorTextureUV: 0 + - _MochieBRDF: 1 + - _MochieForceFallback: 0 + - _MochieGSAAEnabled: 1 + - _MochieLitFallback: 1 + - _MochieMetallicGlobalMask: 0 + - _MochieMetallicGlobalMaskBlendType: 2 + - _MochieMetallicMapInvert: 0 + - _MochieMetallicMapsMetallicChannel: 0 + - _MochieMetallicMapsReflectionMaskChannel: 2 + - _MochieMetallicMapsRoughnessChannel: 1 + - _MochieMetallicMapsSpecularMaskChannel: 3 + - _MochieMetallicMapsStochastic: 0 + - _MochieMetallicMapsUV: 0 + - _MochieMetallicMasksUV: 0 + - _MochieMetallicMultiplier: 0.729 + - _MochieReflectionMaskInvert: 0 + - _MochieReflectionStrength: 1 + - _MochieReflectionStrengthGlobalMask: 0 + - _MochieReflectionStrengthGlobalMaskBlendType: 2 + - _MochieReflectionTintThemeIndex: 0 + - _MochieRoughnessMapInvert: 0 + - _MochieRoughnessMultiplier: 0.874 + - _MochieRoughnessMultiplier2: 1 + - _MochieSmoothnessGlobalMask: 0 + - _MochieSmoothnessGlobalMaskBlendType: 2 + - _MochieSpecularMaskInvert: 0 + - _MochieSpecularStrength: 1 + - _MochieSpecularStrength2: 1 + - _MochieSpecularStrengthGlobalMask: 0 + - _MochieSpecularStrengthGlobalMaskBlendType: 2 + - _MochieSpecularTintThemeIndex: 0 - _Mode: 0 + - _ModelAngleMax: 90 + - _ModelAngleMin: 45 + - _MultilayerMathBlurMapUV: 0 + - _NormalCorrect: 0 + - _NormalCorrectAmount: 0.9 - _NormalMapShadows: 0 - _OcclusionStrength: 1 + - _OffsetFactor: 0 + - _OffsetUnits: 0 + - _Offset_Z: 0 + - _OrifaceEnabled: 0 + - _OrificeChannel: 0 + - _OutlineALColorEnabled: 0 + - _OutlineAlphaDistanceFade: 0 + - _OutlineAlphaDistanceFadeMax: 0 + - _OutlineAlphaDistanceFadeMaxAlpha: 1 + - _OutlineAlphaDistanceFadeMin: 0 + - _OutlineAlphaDistanceFadeMinAlpha: 0 + - _OutlineAlphaDistanceFadeType: 1 + - _OutlineBlendOp: 0 + - _OutlineBlendOpAlpha: 4 + - _OutlineClipAtZeroWidth: 1 + - _OutlineCull: 1 + - _OutlineDstBlend: 0 + - _OutlineDstBlendAlpha: 0 + - _OutlineEmission: 0 + - _OutlineExpansionMode: 1 + - _OutlineFixWidth: 0.5 + - _OutlineFixedSize: 1 + - _OutlineGamma: 1 + - _OutlineHue: 0 + - _OutlineHueOffsetSpeed: 0 + - _OutlineHueShift: 0 + - _OutlineLit: 1 + - _OutlineMaskChannel: 0 + - _OutlineMaskUV: 0 + - _OutlineOverrideAlpha: 0 + - _OutlineRimLightBlend: 0 + - _OutlineSaturation: 1 + - _OutlineShadowStrength: 0 + - _OutlineSpace: 0 + - _OutlineSrcBlend: 1 + - _OutlineSrcBlendAlpha: 1 + - _OutlineStencilBackCompareFunction: 8 + - _OutlineStencilBackFailOp: 0 + - _OutlineStencilBackPassOp: 0 + - _OutlineStencilBackZFailOp: 0 + - _OutlineStencilCompareFunction: 8 + - _OutlineStencilFailOp: 0 + - _OutlineStencilFrontCompareFunction: 8 + - _OutlineStencilFrontFailOp: 0 + - _OutlineStencilFrontPassOp: 0 + - _OutlineStencilFrontZFailOp: 0 + - _OutlineStencilPassOp: 0 + - _OutlineStencilReadMask: 255 + - _OutlineStencilRef: 0 + - _OutlineStencilType: 0 + - _OutlineStencilWriteMask: 255 + - _OutlineStencilZFailOp: 0 + - _OutlineTextureUV: 0 + - _OutlineTintMix: 0 + - _OutlineUseVertexColorNormals: 0 + - _OutlineValue: 1 + - _OutlineVertexColorMask: 0 + - _OutlineVertexColorMaskStrength: 1 + - _OutlineZOffsetChannel: 0 + - _OutlineZOffsetInvertMaskChannel: 0 + - _OutlineZOffsetMaskStrength: 1 + - _OutlineZOffsetVertexColor: 0 + - _OutlineZOffsetVertexColorStrength: 1 + - _OutlineZTest: 4 + - _OutlineZWrite: 1 + - _OutlinesMaxDistance: 1 + - _PBRNormalSelect: 1 + - _PBRSplitMaskSample: 0 + - _PBRSplitMaskStochastic: 0 + - _PPBrightness: 1 + - _PPContrast: 1 + - _PPEmissionMultiplier: 1 + - _PPFinalColorMultiplier: 1 + - _PPHDR: 0 + - _PPHelp: 0 + - _PPHue: 0 + - _PPHueShiftColorSpace: 0 + - _PPLightingAddition: 0 + - _PPLightingMultiplier: 1 + - _PPLightness: 0 + - _PPMaskChannel: 0 + - _PPMaskInvert: 0 + - _PPMaskUV: 0 + - _PPPosterization: 0 + - _PPPosterizationAmount: 4 + - _PPSaturation: 1 + - _PanoUseBothEyes: 1 - _Parallax: 0.011 + - _ParallaxAnisotropic: 1 + - _ParallaxAnisotropyScale: 1 + - _ParallaxBinarySteps: 8 + - _ParallaxConeRatio: 1 + - _ParallaxInternalBlendMode: 0 + - _ParallaxInternalHeightFromAlpha: 0 + - _ParallaxInternalHeightmapMode: 0 + - _ParallaxInternalHueSelectOrShift: 1 + - _ParallaxInternalHueShift: 0 + - _ParallaxInternalHueShiftColorSpace: 0 + - _ParallaxInternalHueShiftEnabled: 0 + - _ParallaxInternalHueShiftPerLevel: 0 + - _ParallaxInternalHueShiftSpeed: 0 + - _ParallaxInternalIterations: 4 + - _ParallaxInternalMapMaskChannel: 0 + - _ParallaxInternalMapMaskUV: 0 + - _ParallaxInternalMaxColorThemeIndex: 0 + - _ParallaxInternalMaxDepth: 0.1 + - _ParallaxInternalMaxFade: 0.1 + - _ParallaxInternalMinColorThemeIndex: 0 + - _ParallaxInternalMinDepth: 0 + - _ParallaxInternalMinFade: 1 + - _ParallaxInternalSurfaceBlendMode: 8 + - _ParallaxMipBias: 0 + - _ParallaxRelaxedCone: 1 + - _ParallaxUV: 0 + - _PathALAutoCorrelator: 0 + - _PathALAutoCorrelatorA: 0 + - _PathALAutoCorrelatorB: 0 + - _PathALAutoCorrelatorG: 0 + - _PathALAutoCorrelatorMode: 0 + - _PathALAutoCorrelatorR: 0 + - _PathALCCA: 0 + - _PathALCCB: 0 + - _PathALCCG: 0 + - _PathALCCR: 0 + - _PathALChrono: 0 + - _PathALColorChord: 0 + - _PathALEmissionOffset: 0 + - _PathALHistory: 0 + - _PathALHistoryA: 0 + - _PathALHistoryB: 0 + - _PathALHistoryBandA: 0 + - _PathALHistoryBandB: 0 + - _PathALHistoryBandG: 0 + - _PathALHistoryBandR: 0 + - _PathALHistoryG: 0 + - _PathALHistoryMode: 0 + - _PathALHistoryR: 0 + - _PathALTimeOffset: 0 + - _PathALWidthOffset: 0 + - _PathChronoBandA: 0 + - _PathChronoBandB: 0 + - _PathChronoBandG: 0 + - _PathChronoBandR: 0 + - _PathChronoSpeedA: 0 + - _PathChronoSpeedB: 0 + - _PathChronoSpeedG: 0 + - _PathChronoSpeedR: 0 + - _PathChronoTypeA: 0 + - _PathChronoTypeB: 0 + - _PathChronoTypeG: 0 + - _PathChronoTypeR: 0 + - _PathColorAThemeIndex: 0 + - _PathColorBThemeIndex: 0 + - _PathColorGThemeIndex: 0 + - _PathColorRThemeIndex: 0 + - _PathGradientType: 0 + - _PathPointSampling: 1 + - _PathSource: 0 + - _PathSourceDirA: 0 + - _PathSourceDirB: 0 + - _PathSourceDirG: 0 + - _PathSourceDirR: 0 + - _PathSurfaceBlendMode: 0 + - _PathTypeA: 2 + - _PathTypeB: 2 + - _PathTypeG: 2 + - _PathTypeR: 2 + - _PathingColorMapUV: 0 + - _PathingMapUV: 0 + - _PathingOverrideAlpha: 0 + - _PathingUVSelect: 0 + - _PenetratorEnabled: 0 + - _PoiGSAAThreshold: 0.1 + - _PoiGSAAVariance: 0.15 + - _PoiInternalParallax: 0 + - _PoiParallax: 0 + - _PoiUTSStyleOutlineBlend: 0 + - _PolarLengthScale: 1 + - _PolarRadialScale: 1 + - _PolarSpiralPower: 0 + - _PolarUV: 0 + - _PostProcess: 0 + - _RGBAAlphaBlendType: 0 + - _RGBAAlphaEmissionStrength: 0 + - _RGBAAlphaEnable: 0 + - _RGBAAlphaMetallicInvert: 0 + - _RGBAAlphaPBRSplitMaskSample: 0 + - _RGBAAlphaPBRSplitMaskStochastic: 0 + - _RGBAAlphaPBRUV: 0 + - _RGBAAlphaSmoothnessInvert: 0 + - _RGBABlueBlendType: 0 + - _RGBABlueEmissionStrength: 0 + - _RGBABlueEnable: 0 + - _RGBABlueMetallicInvert: 0 + - _RGBABluePBRSplitMaskSample: 0 + - _RGBABluePBRSplitMaskStochastic: 0 + - _RGBABluePBRUV: 0 + - _RGBABlueSmoothnessInvert: 0 + - _RGBAGreenBlendType: 0 + - _RGBAGreenEmissionStrength: 0 + - _RGBAGreenEnable: 0 + - _RGBAGreenMetallicInvert: 0 + - _RGBAGreenPBRSplitMaskSample: 0 + - _RGBAGreenPBRSplitMaskStochastic: 0 + - _RGBAGreenPBRUV: 0 + - _RGBAGreenSmoothnessInvert: 0 + - _RGBAMetallicMapsStochastic: 0 + - _RGBAMetallicMapsUV: 0 + - _RGBAPBRAlphaEnabled: 0 + - _RGBAPBRBlueEnabled: 0 + - _RGBAPBRGreenEnabled: 0 + - _RGBAPBRRedEnabled: 0 + - _RGBARedBlendType: 0 + - _RGBARedEmissionStrength: 0 + - _RGBARedEnable: 0 + - _RGBARedMetallicInvert: 0 + - _RGBARedPBRSplitMaskSample: 0 + - _RGBARedPBRSplitMaskStochastic: 0 + - _RGBARedPBRUV: 0 + - _RGBARedSmoothnessInvert: 0 + - _RGBASmoothnessMapsStochastic: 0 + - _RGBASmoothnessMapsUV: 0 + - _RGBMaskEnabled: 0 + - _RGBMaskType: 0 + - _RGBMaskUV: 0 + - _RalivAdvancedHelp: 0 + - _RalivDPSDisableShadowCaster: 1 + - _RalivDPSDisableShadowCasterHelp: 0 + - _RalivHelp: 0 + - _ReCurvature: 0 + - _RedAlphaAdd: 0 + - _RedColorThemeIndex: 0 + - _RedTextureStochastic: 0 + - _RedTextureUV: 0 + - _RefSpecFresnelStrength: 0.5 + - _Reflectance: 0.04 + - _ReflectionAnisotropicStretch: 1 + - _ReflectionApplyTransparency: 1 + - _ReflectionBlendMode: 1 + - _ReflectionCubeEnableLighting: 1 + - _ReflectionCubeOverride: 0 + - _ReflectionNormalStrength: 1 + - _RenderingAOBlockerEnabled: 0 + - _RenderingAOBlockerFlipNormal: 0 + - _RenderingAOBlockerNote: 0 + - _RenderingAOBlockerUVChannel: 0 + - _RenderingEarlyZEnabled: 0 + - _RenderingReduceClipDistance: 0 + - _RgbAlphaGlobalMaskBlendType: 2 + - _RgbAlphaGlobalMaskChannel: 0 + - _RgbAlphaMaskChannel: 3 + - _RgbBlueGlobalMaskBlendType: 2 + - _RgbBlueGlobalMaskChannel: 0 + - _RgbBlueMaskChannel: 2 + - _RgbGreenGlobalMaskBlendType: 2 + - _RgbGreenGlobalMaskChannel: 0 + - _RgbGreenMaskChannel: 1 + - _RgbNormalAGlobalMaskBlendType: 2 + - _RgbNormalAGlobalMaskChannel: 0 + - _RgbNormalAMaskChannel: 3 + - _RgbNormalAScale: 0 + - _RgbNormalAStochastic: 0 + - _RgbNormalAUV: 0 + - _RgbNormalAlphaBlendMode: 0 + - _RgbNormalBGlobalMaskBlendType: 2 + - _RgbNormalBGlobalMaskChannel: 0 + - _RgbNormalBMaskChannel: 2 + - _RgbNormalBScale: 0 + - _RgbNormalBStochastic: 0 + - _RgbNormalBUV: 0 + - _RgbNormalBlueBlendMode: 0 + - _RgbNormalGGlobalMaskBlendType: 2 + - _RgbNormalGGlobalMaskChannel: 0 + - _RgbNormalGMaskChannel: 1 + - _RgbNormalGScale: 0 + - _RgbNormalGStochastic: 0 + - _RgbNormalGUV: 0 + - _RgbNormalGreenBlendMode: 0 + - _RgbNormalRGlobalMaskBlendType: 2 + - _RgbNormalRGlobalMaskChannel: 0 + - _RgbNormalRMaskChannel: 0 + - _RgbNormalRScale: 0 + - _RgbNormalRStochastic: 0 + - _RgbNormalRUV: 0 + - _RgbNormalRedBlendMode: 0 + - _RgbRedGlobalMaskBlendType: 2 + - _RgbRedGlobalMaskChannel: 0 + - _RgbRedMaskChannel: 0 + - _Rim2ApColorThemeIndex: 0 + - _Rim2ApplyAlpha: 0 + - _Rim2ApplyAlphaBlend: 1 + - _Rim2ApplyGlobalMaskBlendType: 2 + - _Rim2ApplyGlobalMaskIndex: 0 + - _Rim2BackfaceMask: 1 + - _Rim2BaseColorMix: 0 + - _Rim2BiasIntensity: 0 + - _Rim2BlendMode: 1 + - _Rim2BlendStrength: 1 + - _Rim2Blur: 0.65 + - _Rim2Border: 0.5 + - _Rim2Brightness: 1 + - _Rim2ColorTexUV: 0 + - _Rim2DirRange: 0 + - _Rim2DirStrength: 0 + - _Rim2EnableLighting: 1 + - _Rim2FresnelPower: 3.5 + - _Rim2GlobalMask: 0 + - _Rim2GlobalMaskBlendType: 2 + - _Rim2HueSelectOrShift: 1 + - _Rim2HueShift: 0 + - _Rim2HueShiftColorSpace: 0 + - _Rim2HueShiftEnabled: 0 + - _Rim2HueShiftSpeed: 0 + - _Rim2IndirBlur: 0.1 + - _Rim2IndirBorder: 0.5 + - _Rim2IndirRange: 0 + - _Rim2LightColorThemeIndex: 0 + - _Rim2Light_FeatherOff: 0 + - _Rim2Light_InsideMask: 0.0001 + - _Rim2Light_Power: 0.1 + - _Rim2LightingInvert: 0 + - _Rim2MainStrength: 0 + - _Rim2MaskChannel: 0 + - _Rim2MaskInvert: 0 + - _Rim2MaskOnlyMask: 0 + - _Rim2MaskUV: 0 + - _Rim2NormalStrength: 1 + - _Rim2Power: 1 + - _Rim2ShadowMask: 0.5 + - _Rim2ShadowMaskInvert: 0 + - _Rim2ShadowMaskRampType: 0 + - _Rim2ShadowMaskStrength: 1 + - _Rim2ShadowToggle: 0 + - _Rim2ShadowWidth: 0 + - _Rim2Sharpness: 0.25 + - _Rim2Strength: 0 + - _Rim2Style: 0 + - _Rim2TexUV: 0 + - _Rim2VRParallaxStrength: 1 + - _Rim2Width: 0.8 + - _RimApColorThemeIndex: 0 + - _RimApplyAlpha: 0 + - _RimApplyAlphaBlend: 1 + - _RimApplyGlobalMaskBlendType: 2 + - _RimApplyGlobalMaskIndex: 0 + - _RimBackfaceMask: 1 + - _RimBaseColorMix: 0 + - _RimBiasIntensity: 0 + - _RimBlendMode: 1 + - _RimBlendStrength: 1 + - _RimBlur: 0.65 + - _RimBorder: 0.5 + - _RimBrightness: 1 + - _RimColorTexUV: 0 + - _RimDirRange: 0 + - _RimDirStrength: 0 + - _RimEnableLighting: 1 + - _RimEnviroBlur: 0.7 + - _RimEnviroChannel: 0 + - _RimEnviroIntensity: 1 + - _RimEnviroMaskUV: 0 + - _RimEnviroMinBrightness: 0 + - _RimEnviroSharpness: 0 + - _RimEnviroWidth: 0.45 + - _RimFresnelPower: 3.5 + - _RimGlobalMask: 0 + - _RimGlobalMaskBlendType: 2 + - _RimHueSelectOrShift: 1 + - _RimHueShift: 0 + - _RimHueShiftColorSpace: 0 + - _RimHueShiftEnabled: 0 + - _RimHueShiftSpeed: 0 + - _RimIndirBlur: 0.1 + - _RimIndirBorder: 0.5 + - _RimIndirRange: 0 + - _RimLightColorThemeIndex: 0 + - _RimLight_FeatherOff: 0 + - _RimLight_InsideMask: 0.0001 + - _RimLight_Power: 0.1 + - _RimLightingInvert: 0 + - _RimMainStrength: 0 + - _RimMaskChannel: 0 + - _RimMaskInvert: 0 + - _RimMaskOnlyMask: 0 + - _RimMaskUV: 0 + - _RimNormalStrength: 1 + - _RimPoi2BlendMode: 0 + - _RimPoiBlendMode: 0 + - _RimPower: 1 + - _RimShadowMask: 0.5 + - _RimShadowMaskInvert: 0 + - _RimShadowMaskRampType: 0 + - _RimShadowMaskStrength: 1 + - _RimShadowToggle: 0 + - _RimShadowWidth: 0 + - _RimSharpness: 0.25 + - _RimStrength: 0 + - _RimStyle: 0 + - _RimTexUV: 0 + - _RimVRParallaxStrength: 1 + - _RimWidth: 0.8 + - _RoughnessAnisotropy: 1 + - _SDFBlur: 0.1 + - _SDFShadingTextureUV: 0 + - _SFExposureOcclusion: 0 + - _SSAOAlphaFade: 1 + - _SSAOAnimationToggle: 1 + - _SSAOApplyGlobalMaskBlendType: 0 + - _SSAOApplyGlobalMaskIndex: 0 + - _SSAOAsRamp: 0 + - _SSAOBias: 0.003 + - _SSAOBlendType: 2 + - _SSAOCenterImportance: 1 + - _SSAOColorMapUV: 0 + - _SSAOColorThemeIndex: 0 + - _SSAOCone: 0 + - _SSAODepthGetWarning: 0 + - _SSAOEnableColorTexture: 0 + - _SSAOEnableMaskTexture: 0 + - _SSAOEnabled: 0 + - _SSAOFalloffEnd: 8 + - _SSAOFalloffStart: 6 + - _SSAOGlobalMaskBlendType: 2 + - _SSAOGlobalMaskIndex: 0 + - _SSAOHideByRampedLightMap: 0 + - _SSAOIntensity: 1 + - _SSAOMaskChannel: 0 + - _SSAOMaskInvert: 0 + - _SSAOMaskUV: 0 + - _SSAOQuality: 2.4 + - _SSAORadius: 0.002 + - _SSAORandomScale: 0 + - _SSAOUseNormals: 0 + - _SSAOUseSurfaceColor: 0 + - _SSIgnoreCastedShadows: 0 + - _SSSBaseColorMix: 0 + - _SSSDistortion: 1 + - _SSSSpread: 5 + - _SSSStrength: 0.25 + - _SSSThicknessMapChannel: 0 + - _SSSThicknessMapUV: 0 + - _SSSThicknessMod: -1 + - _Saturation: 0 + - _ScrollingEmission: 0 + - _ScrollingEmission1: 1 + - _ScrollingEmission2: 0 + - _ScrollingEmission3: 0 + - _Set_HighColorMaskChannel: 1 + - _Set_HighColorMaskUV: 0 + - _Set_Rim2LightMaskChannel: 1 + - _Set_Rim2LightMaskUV: 0 + - _Set_RimLightMaskChannel: 1 + - _Set_RimLightMaskUV: 0 + - _ShadeColor_Step: 0 + - _ShaderOptimizerEnabled: 1 + - _ShaderUIWarning0: -0 + - _ShaderUIWarning1: -0 + - _ShadingEnabled: 1 + - _ShadingRampedLightMapApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapApplyGlobalMaskIndex: 0 + - _ShadingRampedLightMapInverseApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapInverseApplyGlobalMaskIndex: 0 + - _ShadingShadeMapBlendType: 0 + - _Shadow2ndBlur: 0.3 + - _Shadow2ndBorder: 0.5 + - _Shadow2ndColorTexUV: 0 + - _Shadow2ndReceive: 0 + - _Shadow3rdBlur: 0.1 + - _Shadow3rdBorder: 0.25 + - _Shadow3rdColorTexUV: 0 + - _Shadow3rdReceive: 0 + - _ShadowBlur: 0.1 + - _ShadowBorder: 0.5 + - _ShadowBorderMapToggle: 0 + - _ShadowBorderMaskLOD: 0 + - _ShadowBorderMaskUV: 0 + - _ShadowBorderRange: 0 + - _ShadowColorTexUV: 0 + - _ShadowEnvStrength: 0 + - _ShadowFlatBlur: 1 + - _ShadowFlatBorder: 1 + - _ShadowMainStrength: 0 + - _ShadowMaskType: 0 + - _ShadowOffset: 0 + - _ShadowPostAO: 0 + - _ShadowReceive: 0 + - _ShadowStrength: 1 + - _ShadowStrengthMaskUV: 0 + - _Shape1Depth: 0.1 + - _Shape1Duration: 0.1 + - _Shape2Depth: 0.2 + - _Shape2Duration: 0.1 + - _Shape3Depth: 0.3 + - _Shape3Duration: 0.1 + - _SkinThicknessMapInvert: 0 + - _SkinThicknessMapUV: 0 + - _SkinThicknessPower: 1 + - _Smoothness: 1 - _SmoothnessTextureChannel: 0 + - _Specular2ndLayer: 0 + - _SpecularBlur: 0 + - _SpecularBorder: 0.5 - _SpecularHighlights: 1 + - _SpecularNormalStrength: 1 + - _SpecularToon: 1 + - _SphericalDissolveClamp: 0 + - _SphericalDissolveInvert: 0 + - _SphericalDissolveRadius: 1.5 + - _Squeeze: 0 + - _SqueezeDist: 0 - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _SssBumpBlur: 0.7 + - _SssScale: 1 + - _StencilBackCompareFunction: 8 + - _StencilBackFailOp: 0 + - _StencilBackPassOp: 0 + - _StencilBackZFailOp: 0 + - _StencilCompareFunction: 8 + - _StencilFailOp: 0 + - _StencilFrontCompareFunction: 8 + - _StencilFrontFailOp: 0 + - _StencilFrontPassOp: 0 + - _StencilFrontZFailOp: 0 + - _StencilPassOp: 0 + - _StencilReadMask: 255 + - _StencilRef: 0 + - _StencilType: 0 + - _StencilWriteMask: 255 + - _StencilZFailOp: 0 + - _StereoEnabled: 0 + - _StochasticDeliotHeitzDensity: 1 + - _StochasticHexFallOffContrast: 0.6 + - _StochasticHexFallOffPower: 7 + - _StochasticHexGridDensity: 1 + - _StochasticHexRotationStrength: 0 + - _StochasticMode: 0 + - _StylizedReflectionMode: 0 + - _StylizedSpecular: 0 + - _StylizedSpecular2Feather: 0 + - _StylizedSpecularFeather: 0 + - _StylizedSpecularIgnoreNormal: 0 + - _StylizedSpecularIgnoreShadow: 0 + - _StylizedSpecularInvertMask: 0 + - _StylizedSpecularNormalStrength: 1 + - _StylizedSpecularStrength: 1 + - _SubsurfaceScattering: 0 + - _TPSHelpbox: 0 + - _TPSPenetratorEnabled: 0 + - _TPS_AnimatedToggle: 1 + - _TPS_BezierSmoothness: 0.4 + - _TPS_BezierStart: 0 + - _TPS_BufferedDepth: 0 + - _TPS_BufferedStrength: 0 + - _TPS_Buldge: 0.3 + - _TPS_BuldgeDistance: 0.2 + - _TPS_BuldgeFalloffDistance: 0.05 + - _TPS_Channel: 0 + - _TPS_ChannelWarning: 0 + - _TPS_IdleGravity: 0 + - _TPS_IdleSkrinkLength: 1 + - _TPS_IdleSkrinkWidth: 1 + - _TPS_IsSkinnedMeshRenderer: 0 + - _TPS_PenetratorLength: 1 + - _TPS_PumpingSpeed: 1 + - _TPS_PumpingStrength: 0 + - _TPS_PumpingWidth: 0.2 + - _TPS_SmoothStart: 1 + - _TPS_Squeeze: 0.3 + - _TPS_SqueezeDistance: 0.2 + - _TextEnabled: 0 + - _TextFPSColorThemeIndex: 0 + - _TextFPSEmissionStrength: 0 + - _TextFPSEnabled: 0 + - _TextFPSRotation: 0 + - _TextFPSUV: 0 + - _TextNumericColorThemeIndex: 0 + - _TextNumericDecimalDigits: 0 + - _TextNumericEmissionStrength: 0 + - _TextNumericEnabled: 0 + - _TextNumericRotation: 0 + - _TextNumericTrimZeroes: 0 + - _TextNumericUV: 0 + - _TextNumericValue: 0 + - _TextNumericWholeDigits: 4 + - _TextPixelRange: 4 + - _TextPositionColorThemeIndex: 0 + - _TextPositionEmissionStrength: 0 + - _TextPositionEnabled: 0 + - _TextPositionRotation: 0 + - _TextPositionUV: 0 + - _TextTimeColorThemeIndex: 0 + - _TextTimeEmissionStrength: 0 + - _TextTimeEnabled: 0 + - _TextTimeRotation: 0 + - _TextTimeUV: 0 + - _ToonRampCount: 1 + - _ToonRampUVSelector: 1 + - _TruchetALAlphaBand: 0 + - _TruchetALAlphaToggle: 0 + - _TruchetALEmissionBand: 0 + - _TruchetALEmissionToggle: 0 + - _TruchetAlpha: 1 + - _TruchetBlendType: 0 + - _TruchetChronoPanBand: 0 + - _TruchetChronoPanToggle: 0 + - _TruchetChronoPanType: 0 + - _TruchetColorThemeIndex: 0 + - _TruchetDensity: 10 + - _TruchetEdgeSharpness: 1 + - _TruchetEmissionStrength: 0 + - _TruchetHideWhenNoAL: 0 + - _TruchetMaskChannel: 0 + - _TruchetMaskGlobalMask: 0 + - _TruchetMaskGlobalMaskBlendType: 2 + - _TruchetMaskIntensity: 1 + - _TruchetMaskInvert: 0 + - _TruchetMaskUV: 0 + - _TruchetOverrideAlpha: 0 + - _TruchetThiccness: 0.1 + - _TruchetUV: 0 + - _Tweak_HighColorMaskLevel: 0 + - _Tweak_LightDirection_MaskLevel: 0 + - _Tweak_LightDirection_MaskLevel2: 0 + - _Tweak_Rim2LightMaskLevel: 0 + - _Tweak_RimLightMaskLevel: 0 + - _UDIMDiscardHelpbox: 0 + - _UDIMDiscardMode: 0 + - _UDIMDiscardRow0_0: 0 + - _UDIMDiscardRow0_1: 0 + - _UDIMDiscardRow0_2: 0 + - _UDIMDiscardRow0_3: 0 + - _UDIMDiscardRow1_0: 0 + - _UDIMDiscardRow1_1: 0 + - _UDIMDiscardRow1_2: 0 + - _UDIMDiscardRow1_3: 0 + - _UDIMDiscardRow2_0: 0 + - _UDIMDiscardRow2_1: 0 + - _UDIMDiscardRow2_2: 0 + - _UDIMDiscardRow2_3: 0 + - _UDIMDiscardRow3_0: 0 + - _UDIMDiscardRow3_1: 0 + - _UDIMDiscardRow3_2: 0 + - _UDIMDiscardRow3_3: 0 + - _UDIMDiscardUV: 0 + - _UDIMFaceDiscardFace: 0 + - _UDIMFaceDiscardRow0_0: 0 + - _UDIMFaceDiscardRow0_1: 0 + - _UDIMFaceDiscardRow0_2: 0 + - _UDIMFaceDiscardRow0_3: 0 + - _UDIMFaceDiscardRow1_0: 0 + - _UDIMFaceDiscardRow1_1: 0 + - _UDIMFaceDiscardRow1_2: 0 + - _UDIMFaceDiscardRow1_3: 0 + - _UDIMFaceDiscardRow2_0: 0 + - _UDIMFaceDiscardRow2_1: 0 + - _UDIMFaceDiscardRow2_2: 0 + - _UDIMFaceDiscardRow2_3: 0 + - _UDIMFaceDiscardRow3_0: 0 + - _UDIMFaceDiscardRow3_1: 0 + - _UDIMFaceDiscardRow3_2: 0 + - _UDIMFaceDiscardRow3_3: 0 + - _UDIMFaceDiscardUV: 0 + - _UVModLocalPos0: 0 + - _UVModLocalPos1: 1 + - _UVModWorldPos0: 0 + - _UVModWorldPos1: 2 - _UVSec: 0 + - _UVTileDissolveAlpha_Row0_0: 0 + - _UVTileDissolveAlpha_Row0_1: 0 + - _UVTileDissolveAlpha_Row0_2: 0 + - _UVTileDissolveAlpha_Row0_3: 0 + - _UVTileDissolveAlpha_Row1_0: 0 + - _UVTileDissolveAlpha_Row1_1: 0 + - _UVTileDissolveAlpha_Row1_2: 0 + - _UVTileDissolveAlpha_Row1_3: 0 + - _UVTileDissolveAlpha_Row2_0: 0 + - _UVTileDissolveAlpha_Row2_1: 0 + - _UVTileDissolveAlpha_Row2_2: 0 + - _UVTileDissolveAlpha_Row2_3: 0 + - _UVTileDissolveAlpha_Row3_0: 0 + - _UVTileDissolveAlpha_Row3_1: 0 + - _UVTileDissolveAlpha_Row3_2: 0 + - _UVTileDissolveAlpha_Row3_3: 0 + - _UVTileDissolveDiscardAtMax: 1 + - _UVTileDissolveEnabled: 0 + - _UVTileDissolveUV: 0 + - _Unlit_Intensity: 1 + - _UseLightColor: 1 + - _UseReflection: 0 + - _Use_1stAs2nd: 0 + - _Use_1stShadeMapAlpha_As_ShadowMask: 0 + - _Use_2ndShadeMapAlpha_As_ShadowMask: 0 + - _Use_BaseAs1st: 0 + - _UzumoreAmount: 0.1 + - _UzumoreBias: 0.001 + - _UzumoreCategoryToggle: 0 + - _UzumoreEnabled: 1 + - _UzumoreMaskUV: 3 - _VRCLV: 0 - _VRCLVSurfaceBias: 0.05 + - _VertexAudioLinkEnabled: 0 + - _VertexBarrelAlpha: 0 + - _VertexBarrelHeight: 0 + - _VertexBarrelMaskChannel: 0 + - _VertexBarrelMode: 0 + - _VertexBarrelWidth: 0.2 + - _VertexBasicsMaskChannel: 0 + - _VertexGlitchDensity: 10 + - _VertexGlitchFrequency: 1 + - _VertexGlitchMapPanSpeed: 10 + - _VertexGlitchMirror: 0 + - _VertexGlitchMirrorEnable: 0 + - _VertexGlitchStrength: 1 + - _VertexGlitchThreshold: 1 + - _VertexGlitchingAudioLinkBand: 0 + - _VertexGlitchingAudioLinkEnabled: 0 + - _VertexGlitchingAudiolinkOverride: 1 + - _VertexGlitchingEnabled: 0 + - _VertexGlitchingUseTexture: 0 + - _VertexLocalRotationALBandX: 0 + - _VertexLocalRotationALBandY: 0 + - _VertexLocalRotationALBandZ: 0 + - _VertexLocalRotationCTALBandX: 0 + - _VertexLocalRotationCTALBandY: 0 + - _VertexLocalRotationCTALBandZ: 0 + - _VertexLocalRotationCTALTypeX: 0 + - _VertexLocalRotationCTALTypeY: 0 + - _VertexLocalRotationCTALTypeZ: 0 + - _VertexLocalScaleALBand: 0 + - _VertexLocalTranslationALBand: 0 + - _VertexLookAtAudioLinkBand: 0 + - _VertexLookAtAudioLinkEnabled: 0 + - _VertexLookAtEnabled: 0 + - _VertexManipulationHeight: 0 + - _VertexManipulationHeightBand: 0 + - _VertexManipulationHeightBias: 0 + - _VertexManipulationHeightMapChannel: 0 + - _VertexManipulationHeightMaskChannel: 0 + - _VertexManipulationHeightMaskUV: 0 + - _VertexManipulationsEnabled: 0 + - _VertexRoundingDivision: 0.02 + - _VertexRoundingEnabled: 0 + - _VertexRoundingMaskChannel: 0 + - _VertexRoundingRangeBand: 0 + - _VertexRoundingSpace: 0 + - _VertexSpectrumMotion: 0 + - _VertexSpectrumUV: 0 + - _VertexSpectrumUVDirection: 0 + - _VertexSphereAlpha: 0 + - _VertexSphereHeight: 1 + - _VertexSphereMaskChannel: 0 + - _VertexSphereMode: 0 + - _VertexSphereRadius: 1 + - _VertexTornadoBaseHeight: 0 + - _VertexTornadoFunnelShape: 1 + - _VertexTornadoIntensity: 100 + - _VertexTornadoMaskChannel: 0 + - _VertexTornadoMode: 0 + - _VertexTornadoRadius: 1 + - _VertexTornadoSpeed: 5 + - _VertexTornadoTopHeight: 1 + - _VertexTornadoVerticalPull: 0 + - _VertexWindDetailAmplitude: 0.05 + - _VertexWindDetailFrequency: 5 + - _VertexWindDetailSpeed: 2.5 + - _VertexWindEnabled: 0 + - _VertexWindMaskChannel: 0 + - _VertexWindNoiseChannel: 0 + - _VertexWindNoiseScale: 10 + - _VertexWindNoiseSpeed: 0.5 + - _VertexWindNoiseStrength: 0.5 + - _VertexWindPrimaryAmplitude: 0.1 + - _VertexWindPrimaryFrequency: 1 + - _VertexWindPrimarySpeed: 1 + - _VertexWorldTranslationALBand: 0 + - _VideoBacklight: 1 + - _VideoCRTPixelEnergizedTime: 1.9 + - _VideoCRTRefreshRate: 24 + - _VideoContrast: 0 + - _VideoEffectsEnable: 0 + - _VideoEmissionEnabled: 1 + - _VideoMaskTextureChannel: 0 + - _VideoMaskTextureUV: 0 + - _VideoPixelTextureUV: 0 + - _VideoPixelateToResolution: 0 + - _VideoSaturation: 0 + - _VideoType: 3 + - _VisibilityMode: 1 + - _VisibilityVRCCameraDesktop: 1 + - _VisibilityVRCCameraScreenshot: 1 + - _VisibilityVRCCameraVR: 1 + - _VisibilityVRCMirrorDesktop: 1 + - _VisibilityVRCMirrorVR: 1 + - _VisibilityVRCRegular: 1 + - _VoronoiAffectsMaterialAlpha: 0 + - _VoronoiBlend: 0 + - _VoronoiEnableRandomCellColor: 0 + - _VoronoiEnabled: 0 + - _VoronoiGlobalMask: 0 + - _VoronoiGlobalMaskBlendType: 2 + - _VoronoiInnerEmissionStrength: 0 + - _VoronoiMaskChannel: 0 + - _VoronoiMaskUV: 0 + - _VoronoiNoiseChannel: 0 + - _VoronoiNoiseIntensity: 0.1 + - _VoronoiNoiseUV: 0 + - _VoronoiOuterEmissionStrength: 0 + - _VoronoiPower: 0.45454544 + - _VoronoiScale: 5 + - _VoronoiSpace: 0 + - _VoronoiType: 1 + - _Wriggle: 0 + - _WriggleSpeed: 0.28 + - _ZClip: 1 + - _ZTest: 4 - _ZWrite: 1 + - _ppHueSelectOrShift: 1 - _specularAntiAliasingThreshold: 0.25 - _specularAntiAliasingVariance: 0.15 + - footer_bluesky: 0 + - footer_discord: 0 + - footer_github: 0 + - footer_patreon: 0 + - footer_twitter: 0 + - footer_website: 0 + - footer_youtube: 0 + - g_end_tps_bezier: 0 + - g_end_tps_buldge: 0 + - g_end_tps_idle: 0 + - g_end_tps_pulsing: 0 + - g_end_tps_squeeze: 0 + - g_start_tps_bezier: 0 + - g_start_tps_buldge: 0 + - g_start_tps_idle: 0 + - g_start_tps_pulsing: 0 + - g_start_tps_squeeze: 0 + - m_AudioLinkCategory: 0 + - m_OutlineCategory: 0 + - m_end_ALDecalSpectrum: 0 + - m_end_ALVolumeColor: 0 + - m_end_Alpha: 0 + - m_end_Ansio: 0 + - m_end_BeatsaberBloomFog: 0 + - m_end_BeatsaberOptions: 0 + - m_end_BlackLightMasking: 0 + - m_end_BonusSliders: 0 + - m_end_CRT: 0 + - m_end_CenterOutDissolve: 0 + - m_end_ColorAdjust: 0 + - m_end_CubeMap: 0 + - m_end_Decal0: 0 + - m_end_Decal0AudioLink: 0 + - m_end_Decal1: 0 + - m_end_Decal1AudioLink: 0 + - m_end_Decal2: 0 + - m_end_Decal2AudioLink: 0 + - m_end_Decal3: 0 + - m_end_Decal3AudioLink: 0 + - m_end_DecalSection: 0 + - m_end_DepthBulge: 0 + - m_end_DetailOptions: 0 + - m_end_DistortionAudioLink: 0 + - m_end_FXProximityColor: 0 + - m_end_FlipbookAudioLink: 0 + - m_end_Gameboy: 0 + - m_end_GlobalMask: 0 + - m_end_GlobalMaskDistanceM_0: 0 + - m_end_GlobalMaskDistanceM_1: 0 + - m_end_GlobalMaskDistanceM_10: 0 + - m_end_GlobalMaskDistanceM_11: 0 + - m_end_GlobalMaskDistanceM_12: 0 + - m_end_GlobalMaskDistanceM_13: 0 + - m_end_GlobalMaskDistanceM_14: 0 + - m_end_GlobalMaskDistanceM_15: 0 + - m_end_GlobalMaskDistanceM_2: 0 + - m_end_GlobalMaskDistanceM_3: 0 + - m_end_GlobalMaskDistanceM_4: 0 + - m_end_GlobalMaskDistanceM_5: 0 + - m_end_GlobalMaskDistanceM_6: 0 + - m_end_GlobalMaskDistanceM_7: 0 + - m_end_GlobalMaskDistanceM_8: 0 + - m_end_GlobalMaskDistanceM_9: 0 + - m_end_GlobalMaskModifiers: 0 + - m_end_GlobalMaskModifiersBackface: 0 + - m_end_GlobalMaskModifiersCamera: 0 + - m_end_GlobalMaskModifiersDistance: 0 + - m_end_GlobalMaskModifiersMirror: 0 + - m_end_GlobalMaskOptions: 0 + - m_end_GlobalMaskTextures: 0 + - m_end_GlobalMaskVertexColors: 0 + - m_end_GlobalThemeColor0: 0 + - m_end_GlobalThemeColor1: 0 + - m_end_GlobalThemeColor2: 0 + - m_end_GlobalThemeColor3: 0 + - m_end_GlobalThemes: 0 + - m_end_LTCGI: 0 + - m_end_MainVertexColors: 0 + - m_end_Matcap2: 0 + - m_end_Matcap3: 0 + - m_end_Matcap4: 0 + - m_end_OutlineAudioLink: 0 + - m_end_OutlineStencil: 0 + - m_end_OutlineStencilPassBackOptions: 0 + - m_end_OutlineStencilPassFrontOptions: 0 + - m_end_PPAnimations: 0 + - m_end_PathAudioLink: 0 + - m_end_PoiGlobalCategory: 0 + - m_end_PoiLightData: 0 + - m_end_PoiPostProcessingCategory: 0 + - m_end_PoiShading: 0 + - m_end_PoiUVCategory: 0 + - m_end_RGBMask: 0 + - m_end_Rim2AudioLink: 0 + - m_end_RimAudioLink: 0 + - m_end_SphericalDissolve: 0 + - m_end_StencilPassBackOptions: 0 + - m_end_StencilPassFrontOptions: 0 + - m_end_StencilPassOptions: 0 + - m_end_Stochastic: 0 + - m_end_Text: 0 + - m_end_TextFPS: 0 + - m_end_TextInstanceTime: 0 + - m_end_TextNumeric: 0 + - m_end_TextPosition: 0 + - m_end_TruchetAudioLink: 0 + - m_end_UVTileDissolve: 0 + - m_end_Uzumore: 0 + - m_end_VideoSettings: 0 + - m_end_VoronoiAudioLink: 0 + - m_end_WorldAOBlocker: 0 + - m_end_alphaBlending: 0 + - m_end_audioLink: 0 + - m_end_audioLinkOverrides: 0 + - m_end_backFace: 0 + - m_end_backlight: 0 + - m_end_bakedLighting: 0 + - m_end_blending: 0 + - m_end_brdf: 0 + - m_end_clearCoat: 0 + - m_end_clearcoatadvanced: 0 + - m_end_clearcoatglobalmask: 0 + - m_end_depthFX: 0 + - m_end_depthRimLightOptions: 0 + - m_end_dissolve: 0 + - m_end_dissolveHueShift: 0 + - m_end_emission1Options: 0 + - m_end_emission2Options: 0 + - m_end_emission3Options: 0 + - m_end_emissionOptions: 0 + - m_end_flipBook: 0 + - m_end_glitter: 0 + - m_end_internalparallax: 0 + - m_end_matcap: 0 + - m_end_mirrorOptions: 0 + - m_end_normalCorrect: 0 + - m_end_outlineAlphaBlending: 0 + - m_end_outlineBlending: 0 + - m_end_parallax: 0 + - m_end_pathing: 0 + - m_end_pen_autoConfig: 0 + - m_end_poiSSAO: 0 + - m_end_pointToPoint: 0 + - m_end_postprocess: 0 + - m_end_raliv: 0 + - m_end_ralivAdvanced: 0 + - m_end_ralivOriface: 0 + - m_end_ralivPenetrator: 0 + - m_end_reflectionRim: 0 + - m_end_rim1LightOptions: 0 + - m_end_rim2LightOptions: 0 + - m_end_stylizedSpec: 0 + - m_end_subsurfaceScattering: 0 + - m_end_tps_penetrator: 0 + - m_end_truchet: 0 + - m_end_udimdiscardOptions: 0 + - m_end_udimfacediscardOptions: 0 + - m_end_uvDistortion: 0 + - m_end_uvLocalWorld: 0 + - m_end_uvPanosphere: 0 + - m_end_uvPolar: 0 + - m_end_vertexGlitching: 0 + - m_end_vertexLookAt: 0 + - m_end_vertexManipulation: 0 + - m_end_videoEffects: 0 + - m_end_voronoi: 0 + - m_end_voronoiRandom: 0 + - m_lightingCategory: 1 + - m_mainCategory: 1 + - m_modifierCategory: 0 + - m_renderingCategory: 0 + - m_specialFXCategory: 1 + - m_start_ALDecalSpectrum: 0 + - m_start_ALVolumeColor: 0 + - m_start_Alpha: 0 + - m_start_Aniso: 0 + - m_start_BeatsaberBloomFog: 0 + - m_start_BeatsaberOptions: 0 + - m_start_BlackLightMasking: 0 + - m_start_BonusSliders: 0 + - m_start_CRT: 0 + - m_start_CenterOutDissolve: 0 + - m_start_ColorAdjust: 0 + - m_start_CubeMap: 0 + - m_start_Decal0: 0 + - m_start_Decal0AudioLink: 0 + - m_start_Decal1: 0 + - m_start_Decal1AudioLink: 0 + - m_start_Decal2: 0 + - m_start_Decal2AudioLink: 0 + - m_start_Decal3: 0 + - m_start_Decal3AudioLink: 0 + - m_start_DecalSection: 0 + - m_start_DepthBulge: 0 + - m_start_DetailOptions: 0 + - m_start_DistortionAudioLink: 0 + - m_start_FXProximityColor: 0 + - m_start_FlipbookAudioLink: 0 + - m_start_Gameboy: 0 + - m_start_GlobalMask: 0 + - m_start_GlobalMaskDistanceM_0: 0 + - m_start_GlobalMaskDistanceM_1: 0 + - m_start_GlobalMaskDistanceM_10: 0 + - m_start_GlobalMaskDistanceM_11: 0 + - m_start_GlobalMaskDistanceM_12: 0 + - m_start_GlobalMaskDistanceM_13: 0 + - m_start_GlobalMaskDistanceM_14: 0 + - m_start_GlobalMaskDistanceM_15: 0 + - m_start_GlobalMaskDistanceM_2: 0 + - m_start_GlobalMaskDistanceM_3: 0 + - m_start_GlobalMaskDistanceM_4: 0 + - m_start_GlobalMaskDistanceM_5: 0 + - m_start_GlobalMaskDistanceM_6: 0 + - m_start_GlobalMaskDistanceM_7: 0 + - m_start_GlobalMaskDistanceM_8: 0 + - m_start_GlobalMaskDistanceM_9: 0 + - m_start_GlobalMaskModifiers: 0 + - m_start_GlobalMaskModifiersBackface: 0 + - m_start_GlobalMaskModifiersCamera: 0 + - m_start_GlobalMaskModifiersDistance: 0 + - m_start_GlobalMaskModifiersMirror: 0 + - m_start_GlobalMaskOptions: 0 + - m_start_GlobalMaskTextures: 0 + - m_start_GlobalMaskVertexColors: 0 + - m_start_GlobalThemeColor0: 0 + - m_start_GlobalThemeColor1: 0 + - m_start_GlobalThemeColor2: 0 + - m_start_GlobalThemeColor3: 0 + - m_start_GlobalThemes: 0 + - m_start_LTCGI: 0 + - m_start_MainVertexColors: 0 + - m_start_Matcap2: 0 + - m_start_Matcap3: 0 + - m_start_Matcap4: 0 + - m_start_OutlineAudioLink: 0 + - m_start_OutlineStencil: 0 + - m_start_OutlineStencilPassBackOptions: 0 + - m_start_OutlineStencilPassFrontOptions: 0 + - m_start_PPAnimations: 0 + - m_start_PathAudioLink: 0 + - m_start_PoiGlobalCategory: 0 + - m_start_PoiLightData: 0 + - m_start_PoiPostProcessingCategory: 0 + - m_start_PoiShading: 1 + - m_start_PoiUVCategory: 0 + - m_start_RGBMask: 0 + - m_start_Rim2AudioLink: 0 + - m_start_RimAudioLink: 0 + - m_start_SphericalDissolve: 0 + - m_start_StencilPassBackOptions: 0 + - m_start_StencilPassFrontOptions: 0 + - m_start_StencilPassOptions: 0 + - m_start_Stochastic: 0 + - m_start_Text: 0 + - m_start_TextFPS: 0 + - m_start_TextInstanceTime: 0 + - m_start_TextNumeric: 0 + - m_start_TextPosition: 0 + - m_start_TruchetAudioLink: 0 + - m_start_UVTileDissolve: 0 + - m_start_Uzumore: 0 + - m_start_VideoSettings: 0 + - m_start_VoronoiAudioLink: 0 + - m_start_WorldAOBlocker: 0 + - m_start_alphaBlending: 0 + - m_start_audioLink: 0 + - m_start_audioLinkOverrides: 0 + - m_start_backFace: 0 + - m_start_backlight: 0 + - m_start_bakedLighting: 0 + - m_start_blending: 0 + - m_start_brdf: 0 + - m_start_clearCoat: 1 + - m_start_clearcoatadvanced: 0 + - m_start_clearcoatglobalmask: 0 + - m_start_depthFX: 0 + - m_start_depthRimLightOptions: 0 + - m_start_dissolve: 0 + - m_start_dissolveHueShift: 0 + - m_start_emission1Options: 0 + - m_start_emission2Options: 0 + - m_start_emission3Options: 0 + - m_start_emissionOptions: 0 + - m_start_flipBook: 0 + - m_start_glitter: 0 + - m_start_internalparallax: 0 + - m_start_matcap: 0 + - m_start_mirrorOptions: 0 + - m_start_normalCorrect: 0 + - m_start_outlineAlphaBlending: 0 + - m_start_outlineBlending: 0 + - m_start_parallax: 0 + - m_start_pathing: 0 + - m_start_pen_autoConfig: 0 + - m_start_poiSSAO: 0 + - m_start_pointToPoint: 0 + - m_start_postprocess: 0 + - m_start_raliv: 0 + - m_start_ralivAdvanced: 0 + - m_start_ralivOriface: 0 + - m_start_ralivPenetrator: 0 + - m_start_reflectionRim: 0 + - m_start_rim2LightOptions: 0 + - m_start_rimLight1Options: 0 + - m_start_stylizedSpec: 0 + - m_start_subsurfaceScattering: 0 + - m_start_tps_penetrator: 0 + - m_start_truchet: 0 + - m_start_udimdiscardOptions: 0 + - m_start_udimfacediscardOptions: 0 + - m_start_uvDistortion: 0 + - m_start_uvLocalWorld: 0 + - m_start_uvPanosphere: 0 + - m_start_uvPolar: 0 + - m_start_vertexGlitching: 0 + - m_start_vertexLookAt: 0 + - m_start_vertexManipulation: 0 + - m_start_videoEffects: 0 + - m_start_voronoi: 0 + - m_start_voronoiRandom: 0 + - m_thirdpartyCategory: 0 + - m_vertexCategory: 0 + - s_end_ALAlpha: 0 + - s_end_ALDecalAudioModsOptions: 0 + - s_end_ALDecalBand: 0 + - s_end_ALDecalColorsBlendingOptions: 0 + - s_end_ALDecalShapeClipOptions: 0 + - s_end_ALDecalVolumeOptions: 0 + - s_end_ALSpectrumMotion: 0 + - s_end_ALVertexGlitching: 0 + - s_end_ALVertexHeight: 0 + - s_end_ALVertexLookAtAL: 0 + - s_end_AlphaAdvanced: 0 + - s_end_AlphaAngular: 0 + - s_end_AlphaDistanceFade: 0 + - s_end_AlphaDithering: 0 + - s_end_AlphaFresnel: 0 + - s_end_AlphaToCoverage: 0 + - s_end_AnisoBottomLayer: 0 + - s_end_AnisoTopLayer: 1 + - s_end_AudioLinkBandOverrides: 0 + - s_end_BRDFTPSMaskGroup: 0 + - s_end_BackFaceHueShift: 0 + - s_end_BackfaceMods: 0 + - s_end_CCopt: 1 + - s_end_ClearCoatTPSMaskGroup: 0 + - s_end_ColorAdjustColorGrading: 0 + - s_end_ContinuousRotation: 0 + - s_end_CubeMapColorAdjust: 0 + - s_end_CubeMapMasking: 0 + - s_end_Decal0ChannelSeparation: 0 + - s_end_Decal0GlobalMasking: 0 + - s_end_Decal0HueShift: 0 + - s_end_Decal0Video: 0 + - s_end_Decal1ChannelSeparation: 0 + - s_end_Decal1GlobalMasking: 0 + - s_end_Decal1HueShift: 0 + - s_end_Decal1Video: 0 + - s_end_Decal2ChannelSeparation: 0 + - s_end_Decal2GlobalMasking: 0 + - s_end_Decal2HueShift: 0 + - s_end_Decal2Video: 0 + - s_end_Decal3ChannelSeparation: 0 + - s_end_Decal3GlobalMasking: 0 + - s_end_Decal3HueShift: 0 + - s_end_Decal3Video: 0 + - s_end_DecalTPSMaskGroup: 0 + - s_end_DepthAlpha: 0 + - s_end_DepthFXColorEmission: 0 + - s_end_DetailNormal: 0 + - s_end_DetailTexture: 0 + - s_end_DissolveAudioLink: 0 + - s_end_DissolvedMenu: 0 + - s_end_EdgeMenu: 0 + - s_end_EmissionAL0Add: 0 + - s_end_EmissionAL0COut: 0 + - s_end_EmissionAL0Multiply: 0 + - s_end_EmissionAL1Add: 0 + - s_end_EmissionAL1COut: 0 + - s_end_EmissionAL1Multiply: 0 + - s_end_EmissionAL2Add: 0 + - s_end_EmissionAL2COut: 0 + - s_end_EmissionAL2Multiply: 0 + - s_end_EmissionAL3Add: 0 + - s_end_EmissionAL3COut: 0 + - s_end_EmissionAL3Multiply: 0 + - s_end_EmissionBlinking0: 0 + - s_end_EmissionBlinking1: 0 + - s_end_EmissionBlinking2: 0 + - s_end_EmissionBlinking3: 0 + - s_end_EmissionCenterOut0: 0 + - s_end_EmissionCenterOut1: 0 + - s_end_EmissionCenterOut2: 0 + - s_end_EmissionCenterOut3: 0 + - s_end_EmissionHueShift0: 0 + - s_end_EmissionHueShift1: 0 + - s_end_EmissionHueShift2: 0 + - s_end_EmissionHueShift3: 0 + - s_end_EmissionLightBased0: 0 + - s_end_EmissionLightBased1: 0 + - s_end_EmissionLightBased2: 0 + - s_end_EmissionLightBased3: 0 + - s_end_FixedRimBlending: 0 + - s_end_FixedRimColor: 0 + - s_end_FixedRimShapeControl: 0 + - s_end_FlipbookCrossfade: 0 + - s_end_FlipbookHueShift: 0 + - s_end_FlipbookManualFrameControl: 0 + - s_end_FlipbookStartAndEnd: 0 + - s_end_GlitterAudioLink: 0 + - s_end_GlitterColorAndShape: 0 + - s_end_GlitterHueShiftSection: 0 + - s_end_GlitterMask: 0 + - s_end_GlitterPositionSize: 0 + - s_end_GlitterRotationSection: 0 + - s_end_GlitterSparkleControl: 0 + - s_end_GlobalMaskOptionsForceToggles: 0 + - s_end_GlobalMaskOptionsMinMaxSliders: 0 + - s_end_GlobalMaskOptionsSliders: 0 + - s_end_LightDataAddPass: 1 + - s_end_LightDataBasePass: 1 + - s_end_LightDataDebug: 0 + - s_end_LightDataSDF: 1 + - s_end_LocalRotation: 0 + - s_end_LocalTranslation: 0 + - s_end_LookAtAlphaMask: 0 + - s_end_LookAtBlueMask: 0 + - s_end_LookAtGreenMask: 0 + - s_end_LookAtRedMask: 0 + - s_end_LookAtVisibility: 0 + - s_end_MainHueShift: 0 + - s_end_MainHueShiftAL: 0 + - s_end_MainHueShiftGlobalMask: 0 + - s_end_MaskingMenu: 0 + - s_end_Matcap0AudioLink: 0 + - s_end_Matcap0Blending: 0 + - s_end_Matcap0Masking: 0 + - s_end_Matcap1AudioLink: 0 + - s_end_Matcap1Blending: 0 + - s_end_Matcap1HueShift: 0 + - s_end_Matcap1Masking: 0 + - s_end_Matcap1Normal: 0 + - s_end_Matcap1Smoothness: 0 + - s_end_Matcap2AudioLink: 0 + - s_end_Matcap2Blending: 0 + - s_end_Matcap2HueShift: 0 + - s_end_Matcap2Masking: 0 + - s_end_Matcap2Normal: 0 + - s_end_Matcap2Smoothness: 0 + - s_end_Matcap2TPSMaskGroup: 0 + - s_end_Matcap3AudioLink: 0 + - s_end_Matcap3Blending: 0 + - s_end_Matcap3HueShift: 0 + - s_end_Matcap3Masking: 0 + - s_end_Matcap3Normal: 0 + - s_end_Matcap3Smoothness: 0 + - s_end_Matcap3TPSMaskGroup: 0 + - s_end_Matcap4TPSMaskGroup: 0 + - s_end_MatcapHueShift: 0 + - s_end_MatcapNormal: 0 + - s_end_MatcapSmoothness: 0 + - s_end_MatcapTPSMaskGroup: 0 + - s_end_MirrorTexture: 0 + - s_end_MultilayerMath1stLayer: 1 + - s_end_MultilayerMath2ndLayer: 0 + - s_end_MultilayerMath3rdLayer: 0 + - s_end_MultilayerMathBorder: 1 + - s_end_MultilayerMathBorderMap: 1 + - s_end_MultilayerShadowMap: 0 + - s_end_OutlineAlphaDistanceFade: 0 + - s_end_OutlineColorAdjust: 0 + - s_end_OutlineFixedSize: 0 + - s_end_OutlineLighting: 0 + - s_end_OutlineRenderingOptions: 0 + - s_end_OutlineZOffset: 0 + - s_end_PBRSecondSpecular: 0 + - s_end_PBRSplitMaskSample: 0 + - s_end_ParallaxInternalHueShift: 0 + - s_end_ParallaxInternalLayerColoring: 0 + - s_end_ParallaxInternalLayerControls: 0 + - s_end_PathAppearance: 0 + - s_end_PathColors: 0 + - s_end_PathRemapping: 0 + - s_end_PathSourceDirections: 0 + - s_end_PathTypes: 0 + - s_end_Positioning: 0 + - s_end_RGBAlpha: 0 + - s_end_RGBBlue: 0 + - s_end_RGBGreen: 0 + - s_end_RGBRed: 0 + - s_end_RimLight0Color: 0 + - s_end_RimLight0GlobalMasking: 0 + - s_end_RimLight0HueShift: 0 + - s_end_RimLight0LightDirMask: 0 + - s_end_RimLight0ShapeControls: 0 + - s_end_RimLight1Color: 0 + - s_end_RimLight1GlobalMasking: 0 + - s_end_RimLight1HueShift: 0 + - s_end_RimLight1LightDirMask: 0 + - s_end_RimLight1ShapeControls: 0 + - s_end_RimLight2DirectionMask: 0 + - s_end_RimLightDirectionMask: 0 + - s_end_SSAOAdvanced: 0 + - s_end_SSAOColorAndMasking: 0 + - s_end_ScrollingEmission0: 0 + - s_end_ScrollingEmission1: 0 + - s_end_ScrollingEmission2: 0 + - s_end_ScrollingEmission3: 0 + - s_end_ShadingAddPass: 0 + - s_end_ShadingGlobalMask: 0 + - s_end_StylizedReflectionLilEnviroReflections: 1 + - s_end_StylizedReflectionLilSpecular: 1 + - s_end_StylizedReflectionMode0: 1 + - s_end_StylizedReflectionMode1: 1 + - s_end_StylizedSpecularAdvanced: 0 + - s_end_StylizedSpecularLayer0: 0 + - s_end_StylizedSpecularLayer1: 0 + - s_end_TimingOptions: 0 + - s_end_TransitionMenu: 0 + - s_end_UVTileDissolveRow0: 0 + - s_end_UVTileDissolveRow1: 0 + - s_end_UVTileDissolveRow2: 0 + - s_end_UVTileDissolveRow3: 0 + - s_end_VertAL: 0 + - s_end_VertexBarrelMode: 0 + - s_end_VertexColors: 0 + - s_end_VertexGlitchMirror: 0 + - s_end_VertexGlitchTexture: 0 + - s_end_VertexManipulationHeight: 0 + - s_end_VertexRoundingAL: 0 + - s_end_VertexScale: 0 + - s_end_VertexSphereMode: 0 + - s_end_VertexTornadoMode: 0 + - s_end_VertexWind: 0 + - s_end_WorldTranslation: 0 + - s_end_brdfadvanced: 0 + - s_end_decal1_position: 0 + - s_end_decal2_position: 0 + - s_end_decal3_position: 0 + - s_end_decal_position: 0 + - s_end_deliot: 0 + - s_end_fogOpt: 1 + - s_end_ggxanisotropics: 0 + - s_end_heightFogOpt: 1 + - s_end_hextile: 0 + - s_end_liltoon_rim2_lightdir: 0 + - s_end_liltoon_rim_lightdir: 0 + - s_end_matcap1ApplyToAlpha: 0 + - s_end_matcap2ApplyToAlpha: 0 + - s_end_matcap3ApplyToAlpha: 0 + - s_end_matcapApplyToAlpha: 0 + - s_end_outline_al_color: 0 + - s_end_parallaxAdvanced: 0 + - s_end_vertexRounding: 0 + - s_start_ALAlpha: 0 + - s_start_ALDecalAudioModsOptions: 1 + - s_start_ALDecalBandOptions: 1 + - s_start_ALDecalColorsBlendingOptions: 1 + - s_start_ALDecalShapeClipOptions: 1 + - s_start_ALDecalVolumeOptions: 1 + - s_start_ALSpectrumMotion: 0 + - s_start_ALVertexGlitching: 0 + - s_start_ALVertexHeight: 0 + - s_start_ALVertexLookAtAL: 0 + - s_start_AlphaAdvanced: 0 + - s_start_AlphaAngular: 0 + - s_start_AlphaDistanceFade: 0 + - s_start_AlphaDithering: 0 + - s_start_AlphaFresnel: 0 + - s_start_AlphaToCoverage: 0 + - s_start_AnisoBottomLayer: 0 + - s_start_AnisoTopLayer: 1 + - s_start_AudioLinkBandOverrides: 1 + - s_start_BRDFTPSMaskGroup: 0 + - s_start_BackFaceHueShift: 0 + - s_start_BackfaceMods: 0 + - s_start_CCopt: 1 + - s_start_ClearCoatTPSMaskGroup: 0 + - s_start_ColorAdjustColorGrading: 0 + - s_start_ContinuousRotation: 0 + - s_start_CubeMapColorAdjust: 0 + - s_start_CubeMapMasking: 1 + - s_start_Decal0ChannelSeparation: 0 + - s_start_Decal0GlobalMasking: 0 + - s_start_Decal0HueShift: 0 + - s_start_Decal0Video: 0 + - s_start_Decal1ChannelSeparation: 0 + - s_start_Decal1GlobalMasking: 0 + - s_start_Decal1HueShift: 0 + - s_start_Decal1Video: 0 + - s_start_Decal2ChannelSeparation: 0 + - s_start_Decal2GlobalMasking: 0 + - s_start_Decal2HueShift: 0 + - s_start_Decal2Video: 0 + - s_start_Decal3ChannelSeparation: 0 + - s_start_Decal3GlobalMasking: 0 + - s_start_Decal3HueShift: 0 + - s_start_Decal3Video: 0 + - s_start_DecalTPSMaskGroup: 0 + - s_start_DepthAlpha: 0 + - s_start_DepthFXColorEmission: 0 + - s_start_DetailNormal: 0 + - s_start_DetailTexture: 0 + - s_start_DissolveAudioLink: 0 + - s_start_DissolvedMenu: 0 + - s_start_EdgeMenu: 0 + - s_start_EmissionAL0Add: 0 + - s_start_EmissionAL0COut: 0 + - s_start_EmissionAL0Multiply: 0 + - s_start_EmissionAL1Add: 0 + - s_start_EmissionAL1COut: 0 + - s_start_EmissionAL1Multiply: 0 + - s_start_EmissionAL2Add: 0 + - s_start_EmissionAL2COut: 0 + - s_start_EmissionAL2Multiply: 0 + - s_start_EmissionAL3Add: 0 + - s_start_EmissionAL3COut: 0 + - s_start_EmissionAL3Multiply: 0 + - s_start_EmissionBlinking0: 0 + - s_start_EmissionBlinking1: 0 + - s_start_EmissionBlinking2: 0 + - s_start_EmissionBlinking3: 0 + - s_start_EmissionCenterOut0: 0 + - s_start_EmissionCenterOut1: 0 + - s_start_EmissionCenterOut2: 0 + - s_start_EmissionCenterOut3: 0 + - s_start_EmissionHueShift0: 0 + - s_start_EmissionHueShift1: 0 + - s_start_EmissionHueShift2: 0 + - s_start_EmissionHueShift3: 0 + - s_start_EmissionLightBased0: 0 + - s_start_EmissionLightBased1: 0 + - s_start_EmissionLightBased2: 0 + - s_start_EmissionLightBased3: 0 + - s_start_FixedRimBlending: 1 + - s_start_FixedRimColor: 1 + - s_start_FixedRimShapeControl: 1 + - s_start_FlipbookCrossfade: 0 + - s_start_FlipbookHueShift: 0 + - s_start_FlipbookManualFrameControl: 0 + - s_start_FlipbookStartAndEnd: 0 + - s_start_GlitterAudioLink: 0 + - s_start_GlitterColorAndShape: 1 + - s_start_GlitterHueShiftSection: 0 + - s_start_GlitterMask: 0 + - s_start_GlitterPositionSize: 0 + - s_start_GlitterRotationSection: 0 + - s_start_GlitterSparkleControl: 1 + - s_start_GlobalMaskOptionsForceToggles: 0 + - s_start_GlobalMaskOptionsMinMaxSliders: 0 + - s_start_GlobalMaskOptionsSliders: 0 + - s_start_LightDataAddPass: 1 + - s_start_LightDataBasePass: 1 + - s_start_LightDataDebug: 0 + - s_start_LightDataSDF: 1 + - s_start_LocalRotation: 0 + - s_start_LocalTranslation: 0 + - s_start_LookAtAlphaMask: 0 + - s_start_LookAtBlueMask: 0 + - s_start_LookAtGreenMask: 0 + - s_start_LookAtRedMask: 1 + - s_start_LookAtVisibility: 0 + - s_start_MainHueShift: 1 + - s_start_MainHueShiftAL: 0 + - s_start_MainHueShiftGlobalMask: 0 + - s_start_MaskingMenu: 0 + - s_start_Matcap0AudioLink: 0 + - s_start_Matcap0Blending: 1 + - s_start_Matcap0Masking: 1 + - s_start_Matcap1AudioLink: 0 + - s_start_Matcap1Blending: 1 + - s_start_Matcap1HueShift: 0 + - s_start_Matcap1Masking: 1 + - s_start_Matcap1Normal: 0 + - s_start_Matcap1Smoothness: 0 + - s_start_Matcap2AudioLink: 0 + - s_start_Matcap2Blending: 1 + - s_start_Matcap2HueShift: 0 + - s_start_Matcap2Masking: 1 + - s_start_Matcap2Normal: 0 + - s_start_Matcap2Smoothness: 0 + - s_start_Matcap2TPSMaskGroup: 0 + - s_start_Matcap3AudioLink: 0 + - s_start_Matcap3Blending: 1 + - s_start_Matcap3HueShift: 0 + - s_start_Matcap3Masking: 1 + - s_start_Matcap3Normal: 0 + - s_start_Matcap3Smoothness: 0 + - s_start_Matcap3TPSMaskGroup: 0 + - s_start_Matcap4TPSMaskGroup: 0 + - s_start_MatcapHueShift: 0 + - s_start_MatcapNormal: 0 + - s_start_MatcapSmoothness: 0 + - s_start_MatcapTPSMaskGroup: 0 + - s_start_MirrorTexture: 1 + - s_start_MultilayerMath1stLayer: 1 + - s_start_MultilayerMath2ndLayer: 0 + - s_start_MultilayerMath3rdLayer: 0 + - s_start_MultilayerMathBorder: 1 + - s_start_MultilayerMathBorderMap: 0 + - s_start_MultilayerShadowMap: 0 + - s_start_OutlineAlphaDistanceFade: 0 + - s_start_OutlineColorAdjust: 0 + - s_start_OutlineFixedSize: 0 + - s_start_OutlineLighting: 0 + - s_start_OutlineRenderingOptions: 0 + - s_start_OutlineZOffset: 0 + - s_start_PBRSecondSpecular: 0 + - s_start_PBRSplitMaskSample: 0 + - s_start_ParallaxInternalHueShift: 0 + - s_start_ParallaxInternalLayerColoring: 1 + - s_start_ParallaxInternalLayerControls: 1 + - s_start_PathAppearance: 1 + - s_start_PathColors: 1 + - s_start_PathRemapping: 1 + - s_start_PathSourceDirections: 1 + - s_start_PathTypes: 1 + - s_start_Positioning: 1 + - s_start_RGBAlpha: 0 + - s_start_RGBBlue: 0 + - s_start_RGBGreen: 0 + - s_start_RGBRed: 0 + - s_start_RimLight0Color: 1 + - s_start_RimLight0GlobalMasking: 0 + - s_start_RimLight0HueShift: 0 + - s_start_RimLight0LightDirMask: 0 + - s_start_RimLight0ShapeControls: 1 + - s_start_RimLight1Color: 1 + - s_start_RimLight1GlobalMasking: 0 + - s_start_RimLight1HueShift: 0 + - s_start_RimLight1LightDirMask: 0 + - s_start_RimLight1ShapeControls: 1 + - s_start_RimLight2DirectionMask: 0 + - s_start_RimLightDirectionMask: 0 + - s_start_SSAOAdvanced: 0 + - s_start_SSAOColorAndMasking: 1 + - s_start_ScrollingEmission0: 0 + - s_start_ScrollingEmission1: 1 + - s_start_ScrollingEmission2: 0 + - s_start_ScrollingEmission3: 0 + - s_start_ShadingAddPass: 0 + - s_start_ShadingGlobalMask: 0 + - s_start_StylizedReflectionLilEnviroReflections: 1 + - s_start_StylizedReflectionLilSpecular: 1 + - s_start_StylizedReflectionMode0: 1 + - s_start_StylizedReflectionMode1: 1 + - s_start_StylizedSpecularAdvanced: 0 + - s_start_StylizedSpecularLayer0: 1 + - s_start_StylizedSpecularLayer1: 1 + - s_start_TimingOptions: 1 + - s_start_TransitionMenu: 0 + - s_start_UVTileDissolveRow0: 0 + - s_start_UVTileDissolveRow1: 0 + - s_start_UVTileDissolveRow2: 0 + - s_start_UVTileDissolveRow3: 0 + - s_start_VertAL: 0 + - s_start_VertexBarrelMode: 0 + - s_start_VertexColors: 0 + - s_start_VertexGlitchMirror: 0 + - s_start_VertexGlitchTexture: 1 + - s_start_VertexManipulationHeight: 1 + - s_start_VertexScale: 0 + - s_start_VertexSphereMode: 0 + - s_start_VertexTornadoMode: 0 + - s_start_VertexWind: 0 + - s_start_WorldTranslation: 0 + - s_start_brdfadvanced: 0 + - s_start_decal1_position: 1 + - s_start_decal2_position: 1 + - s_start_decal3_position: 1 + - s_start_decal_position: 1 + - s_start_deliot: 0 + - s_start_fogOpt: 1 + - s_start_ggxanisotropics: 0 + - s_start_heightFogOpt: 1 + - s_start_hextile: 0 + - s_start_liltoon_rim2_lightdir: 0 + - s_start_liltoon_rim_lightdir: 0 + - s_start_matcap1ApplyToAlpha: 0 + - s_start_matcap2ApplyToAlpha: 0 + - s_start_matcap3ApplyToAlpha: 0 + - s_start_matcapApplyToAlpha: 0 + - s_start_outline_al_color: 0 + - s_start_parallaxAdvanced: 0 + - s_start_vertexRounding: 0 + - s_start_vertexRoundingAL: 0 + - shader_is_using_thry_editor: 0 + - shader_locale: 0 + - shader_master_label: 0 m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _1st_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALDecalVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALDecalVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _ALDecaldCircleDimensions: {r: 0, g: 1, b: 0, a: 1} + - _ALUVPosition: {r: 0.5, g: 0.5, b: 1, a: 1} + - _ALUVScale: {r: 1, g: 1, b: 1, a: 1} + - _ALVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _AlphaAudioLinkAddRange: {r: 0, g: 0, b: 0, a: 1} + - _AlphaColor: {r: 1, g: 1, b: 1, a: 1} + - _AlphaMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _AlphaTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _AngleForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _Aniso0Tint: {r: 1, g: 1, b: 1, a: 1} + - _Aniso1Tint: {r: 1, g: 1, b: 1, a: 1} + - _AnisoColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _AnisotropyMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Ap_Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Ap_RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkBandOverrideSliders: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveDetail: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission0CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission1CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission2CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission3CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookFrame: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookScale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkOutlineColorMod: {r: 0, g: 1, b: 0, a: 0} + - _AudioLinkOutlineEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineSize: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkPathEmissionAddA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkRim2BrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2EmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2WidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimWidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiInnerEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiOuterEmission: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceColor: {r: 1, g: 1, b: 1, a: 1} + - _BackFaceMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BacklightColor: {r: 0.85, g: 0.8, b: 0.7, a: 1} + - _BacklightColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _BlackLightMasking0Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking1Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking2Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking3Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlueColor: {r: 1, g: 1, b: 1, a: 1} + - _BlueTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BumpMapPan: {r: 0, g: 0, b: 0, a: 0} + - _CenterOutDissolveDirection: {r: 0, g: 0, b: 1, a: 0} + - _ClearCoatMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _ClearCoatReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _ClearCoatSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _ClothMetallicSmoothnessMapPan: {r: 0, g: 0, b: 0, a: 0} - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapColor: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotation: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotationPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalColor: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor1: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor2: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor3: {r: 1, g: 1, b: 1, a: 1} + - _DecalMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalPosition: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition1: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition2: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition3: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalScale: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale1: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale2: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale3: {r: 1, g: 1, b: 1, a: 0} + - _DecalSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset1: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset2: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset3: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DepthColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DepthRimColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DetailMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailNormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTexPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTint: {r: 1, g: 1, b: 1, a: 1} + - _DissolveDetailNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveEdgeColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveEndPoint: {r: 0, g: 1, b: 0, a: 0} + - _DissolveMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveNoiseTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveStartPoint: {r: 0, g: -1, b: 0, a: 0} + - _DissolveTextureColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveToTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrength1AudioLink: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrengthAudioLink: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL0Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL0StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL1Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL1StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL2Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL2StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL3Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL3StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColor: {r: 0.1686, g: 0.6706, b: 0.8471, a: 1} + - _EmissionColor1: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor2: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor3: {r: 1, g: 1, b: 1, a: 1} + - _EmissionMap1Pan: {r: 1, g: 2, b: 0, a: 0} + - _EmissionMap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMapPan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask1Pan: {r: 3, g: 3, b: 0, a: 0} + - _EmissionMask2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _EmissiveScroll_Direction: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction1: {r: 5, g: 0, b: 5, a: 0} + - _EmissiveScroll_Direction2: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction3: {r: 0, g: -10, b: 0, a: 0} + - _FXProximityColorMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _FXProximityColorMinColor: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookColor: {r: 1, g: 1, b: 1, a: 1} + - _FlipbookCrossfadeRange: {r: 0.75, g: 1, b: 0, a: 1} + - _FlipbookMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookPanning: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _FlipbookSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookTexArrayPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALMaxBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALSizeAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterColor: {r: 1, g: 1, b: 1, a: 1} + - _GlitterColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSize: {r: 0.1, g: 0.5, b: 0, a: 1} + - _GlitterRandomRotationSpeed: {r: 0, g: 0, b: 0, a: 0} + - _GlitterUVPanning: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskMinMaxSlider_0: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_1: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_10: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_11: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_12: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_13: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_14: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_15: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_2: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_3: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_4: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_5: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_6: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_7: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_8: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_9: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskTexture0Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalThemeColor0: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor1: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor2: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor3: {r: 1, g: 1, b: 1, a: 1} + - _GreenColor: {r: 1, g: 1, b: 1, a: 1} + - _GreenTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _HeightMapPan: {r: 0, g: 0, b: 0, a: 0} + - _HeightmaskPan: {r: 0, g: 0, b: 0, a: 0} + - _HighColor: {r: 1, g: 1, b: 1, a: 1} + - _HighColor_TexPan: {r: 0, g: 0, b: 0, a: 0} + - _LTCGI_DiffuseColor: {r: 1, g: 1, b: 1, a: 1} + - _LTCGI_SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _LightDataSDFMapPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingAOMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingDetailShadowMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingForcedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingWrappedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightngForcedDirection: {r: 0, g: 0, b: 0, a: 1} + - _LineColor: {r: 1, g: 1, b: 1, a: 1} + - _LookAtAlphaDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtAlphaMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtBlueDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtBlueMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBluePivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBlueUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtGreenDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtGreenMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtRedMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _MainColorAdjustTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MainTexPan: {r: 0, g: 0, b: 0, a: 0} + - _MatCap2ndBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap3rdBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap4thBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCapBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap3MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap4MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Pan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapColor: {r: 1, g: 1, b: 1, a: 1} + - _MatcapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapPan: {r: 0, g: 0, b: 0, a: 0} + - _MirrorColor: {r: 1, g: 1, b: 1, a: 1} + - _MirrorTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _MochieSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _MultilayerMathBlurMapPan: {r: 0, g: 0, b: 0, a: 0} + - _NormalCorrectOrigin: {r: 0, g: 0.4, b: -0.025, a: 1} + - _OutlineDropShadowOffset: {r: 1, g: 0, b: 0, a: 0} + - _OutlineMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _OutlinePersonaDirection: {r: 1, g: 0, b: 0, a: 0} + - _OutlineTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _PBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _PPMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _PPRGB: {r: 1, g: 1, b: 1, a: 1} + - _PPTint: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ParallaxInternalMapPan: {r: 0, g: 0, b: 1, a: 1} + - _ParallaxInternalMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMinColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalPanDepthSpeed: {r: 0, g: 0, b: 1, a: 1} + - _PathALAutoCorrelatorRangeA: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeB: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeG: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeR: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALHistoryRangeA: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeB: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeG: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeR: {r: 0, g: 1, b: 0, a: 1} + - _PathColorA: {r: 1, g: 1, b: 1, a: 1} + - _PathColorB: {r: 1, g: 1, b: 1, a: 1} + - _PathColorG: {r: 1, g: 1, b: 1, a: 1} + - _PathColorR: {r: 1, g: 1, b: 1, a: 1} + - _PathEmissionStrength: {r: 0, g: 0, b: 0, a: 0} + - _PathGapLengths: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathOffset: {r: 0, g: 0, b: 0, a: 0} + - _PathRemapA: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapB: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapG: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapR: {r: 0, g: 1, b: 0, a: 1} + - _PathSegments: {r: 0, g: 0, b: 0, a: 0} + - _PathSoftness: {r: 1, g: 1, b: 1, a: 1} + - _PathSpeed: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathTime: {r: -999, g: -999, b: -999, a: -999} + - _PathWidth: {r: 0.03, g: 0.03, b: 0.03, a: 0.03} + - _PathingColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PathingMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PolarCenter: {r: 0.5, g: 0.5, b: 0, a: 0} + - _RGBAAlphaPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAAlphaPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAAlphaScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBABlueScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAGreenScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBARedPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBASmoothnessMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RedColor: {r: 1, g: 1, b: 1, a: 1} + - _RedTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _ReflectionColor: {r: 1, g: 1, b: 1, a: 1} + - _ReflectionCubeColor: {r: 0, g: 0, b: 0, a: 1} + - _RgbNormalAPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalBPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalGPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalRPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2Color: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _Rim2ColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2IndirColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2ShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _Rim2TexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimColor: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _RimColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimEnviroMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimIndirColor: {r: 1, g: 1, b: 1, a: 1} + - _RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _RimMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _RimTexPan: {r: 0, g: 0, b: 0, a: 0} + - _SDFForward: {r: 0, g: 0, b: 1, a: 0} + - _SDFLeft: {r: -1, g: 0, b: 0, a: 0} + - _SDFShadingTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOColor: {r: 0, g: 0, b: 0, a: 1} + - _SSAOColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOHSV: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaxDistanceFalloff: {r: 0.01, g: 0.1, b: 1, a: 1} + - _SSSColor: {r: 1, g: 0, b: 0, a: 1} + - _SSSThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_HighColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_Rim2LightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_RimLightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowAOShift: {r: 0, g: 1, b: 0, a: 1} + - _ShadowAOShift2: {r: 0, g: 1, b: 0, a: 1} + - _ShadowBorderColor: {r: 1, g: 0, b: 0, a: 1} + - _ShadowBorderMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowColor: {r: 0.7, g: 0.75, b: 0.85, a: 1} + - _ShadowColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowStrengthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SkinThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SphericalDissolveCenter: {r: 0, g: 0, b: 0, a: 1} + - _SssColorBleedAoWeights: {r: 0.4, g: 0.15, b: 0.13, a: 0} + - _SssTransmissionAbsorption: {r: -8, g: -40, b: -64, a: 0} + - _TPS_BuldgeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorForward: {r: 0, g: 0, b: 1, a: 0} + - _TPS_PenetratorRight: {r: 1, g: 0, b: 0, a: 0} + - _TPS_PenetratorScale: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorUp: {r: 0, g: 1, b: 0, a: 0} + - _TPS_SqueezeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSScale: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericColor: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericScale: {r: 1, g: 1, b: 1, a: 1} + - _TextPositionColor: {r: 1, g: 0, b: 1, a: 1} + - _TextPositionOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionScale: {r: 1, g: 1, b: 1, a: 1} + - _TextTimeColor: {r: 1, g: 0, b: 1, a: 1} + - _TextTimeOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextTimePadding: {r: 0, g: 0, b: 0, a: 0} + - _TextTimeScale: {r: 1, g: 1, b: 1, a: 1} + - _TruchetALAlpha: {r: 0, g: 0, b: 0, a: 0} + - _TruchetALEmission: {r: 0, g: 0, b: 0, a: 0} + - _TruchetChronoPanSpeed: {r: 0, g: 0, b: 0, a: 0} + - _TruchetColor: {r: 1, g: 1, b: 1, a: 1} + - _TruchetMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _TruchetPanOffset: {r: 0, g: 0, b: 0, a: 0} + - _TruchetTexPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexBasicsMaskUVPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalRotationAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalRotationCTALSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalScaleALMax: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalScaleALMin: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexLookAtAlphaAudiolink: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationHeightAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationHeightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationLocalRotation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalRotationSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalScale: {r: 1, g: 1, b: 1, a: 1} + - _VertexManipulationLocalTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationWorldTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexRoundingRangeAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexSpectrumOffsetMax: {r: 0, g: 0.1, b: 0, a: 1} + - _VertexSpectrumOffsetMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexSphereCenter: {r: 0, g: 0, b: 0, a: 1} + - _VertexWindDetailDirection: {r: 0, g: 1, b: 0, a: 0} + - _VertexWindPrimaryDirection: {r: 1, g: 0, b: 0, a: 0} + - _VertexWorldTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexWorldTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VideoMaskTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _VideoResolution: {r: 1280, g: 720, b: 0, a: 0} + - _VoronoiGradient: {r: 0, g: 0.5, b: 0, a: 0} + - _VoronoiInnerColor: {r: 1, g: 1, b: 1, a: 1} + - _VoronoiMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiOuterColor: {r: 0, g: 0, b: 0, a: 1} + - _VoronoiRandomMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiRandomMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiSpeed: {r: 1, g: 1, b: 1, a: 1} m_BuildTextureStacks: [] diff --git a/Assets/Quiz/Materials/NoPoints/PointsMeterColumn.mat b/Assets/Quiz/Materials/NoPoints/PointsMeterColumn.mat index c4f264f..e005a6f 100644 --- a/Assets/Quiz/Materials/NoPoints/PointsMeterColumn.mat +++ b/Assets/Quiz/Materials/NoPoints/PointsMeterColumn.mat @@ -32,6 +32,7 @@ Material: OriginalShader: .poiyomi/Poiyomi Toon World OriginalShaderGUID: 1b58d372fe360874a8fb767d53f955b0 RenderType: Opaque + _EmissionColorAnimated: 1 _stripped_tex__ClothDFG: 76d65cbce584df7449699fb8406f60ea _stripped_tex__MetallicGlossMap: 2cdd6091ba5336c448a7d955ff917488 _stripped_tex__SkinLUT: d13510bb2be49aa40a66a0101efb6a36 @@ -2715,10 +2716,10 @@ Material: - m_start_depthRimLightOptions: 0 - m_start_dissolve: 0 - m_start_dissolveHueShift: 0 - - m_start_emission1Options: 1 + - m_start_emission1Options: 0 - m_start_emission2Options: 0 - m_start_emission3Options: 0 - - m_start_emissionOptions: 0 + - m_start_emissionOptions: 1 - m_start_flipBook: 0 - m_start_glitter: 0 - m_start_internalparallax: 0 @@ -3375,7 +3376,7 @@ Material: - _EmissionAL2StrengthMod: {r: 0, g: 0, b: 0, a: 0} - _EmissionAL3Multipliers: {r: 1, g: 1, b: 0, a: 0} - _EmissionAL3StrengthMod: {r: 0, g: 0, b: 0, a: 0} - - _EmissionColor: {r: 0.16826946, g: 0.67244333, b: 0.84687346, a: 1} + - _EmissionColor: {r: 0.1686, g: 0.6706, b: 0.8471, a: 1} - _EmissionColor1: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor2: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor3: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Quiz/Materials/NoPoints/Screen.mat b/Assets/Quiz/Materials/NoPoints/Screen.mat index 925579f..56ed123 100644 --- a/Assets/Quiz/Materials/NoPoints/Screen.mat +++ b/Assets/Quiz/Materials/NoPoints/Screen.mat @@ -8,7 +8,7 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Screen - m_Shader: {fileID: 4800000, guid: 94d7cc74d88811045ac98b21dd8431cd, type: 3} + m_Shader: {fileID: 4800000, guid: ca131fec60225814499f4124bff1e32e, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: [] @@ -18,22 +18,24 @@ Material: - POI_EMISSION_1 - PROP_LIGHTINGAOMAPS - VIGNETTE_MASKED + - _EMISSION - _LIGHTINGMODE_REALISTIC - _RIM2STYLE_POIYOMI - _RIMSTYLE_POIYOMI - _STOCHASTICMODE_DELIOT_HEITZ - m_LightmapFlags: 6 + m_LightmapFlags: 2 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: 2000 stringTagMap: AllLockedGUIDS: 360a40a163e0f3347b5b14b9771d2ab5 OriginalKeywords: BSSBLOOMFOGTYPE_HEIGHT MOCHIE_PBR POI_EMISSION_1 PROP_LIGHTINGAOMAPS - VIGNETTE_MASKED _LIGHTINGMODE_REALISTIC _RIM2STYLE_POIYOMI _RIMSTYLE_POIYOMI + VIGNETTE_MASKED _EMISSION _LIGHTINGMODE_REALISTIC _RIM2STYLE_POIYOMI _RIMSTYLE_POIYOMI _STOCHASTICMODE_DELIOT_HEITZ OriginalShader: .poiyomi/Poiyomi Pro World OriginalShaderGUID: a11582d439d5e494986c4b421999c03a RenderType: Opaque + _EmissionColorAnimated: 1 _stripped_tex__ClothDFG: 76d65cbce584df7449699fb8406f60ea _stripped_tex__SkinLUT: d13510bb2be49aa40a66a0101efb6a36 _stripped_tex__ToonRamp: 61bd594533da4fc42bd46ef93ba5a4f6 @@ -54,14 +56,26 @@ Material: m_Texture: {fileID: 2800000, guid: 638b570fce9f52e4e8d51f9c3c0a878e, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _EmissionMap1: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _EmissionMask: + m_Texture: {fileID: 2800000, guid: 9ca4fc309871b644d90b998b684e8e58, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _EmissionMask1: m_Texture: {fileID: 2800000, guid: 9ca4fc309871b644d90b998b684e8e58, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _EmissionScrollingCurve: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _EmissionScrollingCurve1: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -857,7 +871,7 @@ Material: - _EmissionScrollingVertexColor1: 0 - _EmissionScrollingVertexColor2: 0 - _EmissionScrollingVertexColor3: 0 - - _EmissionStrength: 0 + - _EmissionStrength: 1 - _EmissionStrength1: 1 - _EmissionStrength2: 0 - _EmissionStrength3: 0 @@ -874,7 +888,7 @@ Material: - _EmissiveBlink_Velocity2: 4 - _EmissiveBlink_Velocity3: 4 - _EmissiveScroll_Interval: 20 - - _EmissiveScroll_Interval1: 20 + - _EmissiveScroll_Interval1: 100 - _EmissiveScroll_Interval2: 20 - _EmissiveScroll_Interval3: 20 - _EmissiveScroll_Velocity: 10 @@ -882,7 +896,7 @@ Material: - _EmissiveScroll_Velocity2: 10 - _EmissiveScroll_Velocity3: 10 - _EmissiveScroll_Width: 10 - - _EmissiveScroll_Width1: 10 + - _EmissiveScroll_Width1: 3 - _EmissiveScroll_Width2: 10 - _EmissiveScroll_Width3: 10 - _EnableALDecal: 0 @@ -894,7 +908,7 @@ Material: - _EnableDissolveAudioLink: 0 - _EnableDistortion: 0 - _EnableDistortionAudioLink: 0 - - _EnableEmission: 0 + - _EnableEmission: 1 - _EnableEmission1: 1 - _EnableEmission2: 0 - _EnableEmission3: 0 @@ -2141,7 +2155,7 @@ Material: - _SSSThicknessMod: -1 - _Saturation: 0 - _ScrollingEmission: 0 - - _ScrollingEmission1: 0 + - _ScrollingEmission1: 1 - _ScrollingEmission2: 0 - _ScrollingEmission3: 0 - _Set_HighColorMaskChannel: 1 @@ -2795,7 +2809,7 @@ Material: - m_start_emission1Options: 1 - m_start_emission2Options: 0 - m_start_emission3Options: 0 - - m_start_emissionOptions: 0 + - m_start_emissionOptions: 1 - m_start_flipBook: 0 - m_start_glitter: 0 - m_start_internalparallax: 0 @@ -3463,8 +3477,8 @@ Material: - _EmissionAL2StrengthMod: {r: 0, g: 0, b: 0, a: 0} - _EmissionAL3Multipliers: {r: 1, g: 1, b: 0, a: 0} - _EmissionAL3StrengthMod: {r: 0, g: 0, b: 0, a: 0} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _EmissionColor1: {r: 0.21952623, g: 0.72305536, b: 0.89626956, a: 1} + - _EmissionColor: {r: 0.1686, g: 0.6706, b: 0.8471, a: 1} + - _EmissionColor1: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor2: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor3: {r: 1, g: 1, b: 1, a: 1} - _EmissionMap1Pan: {r: 0, g: 0, b: 0, a: 0} diff --git a/Assets/Quiz/Materials/OfficeChair.mat b/Assets/Quiz/Materials/OfficeChair.mat new file mode 100644 index 0000000..b2a0bfe --- /dev/null +++ b/Assets/Quiz/Materials/OfficeChair.mat @@ -0,0 +1,3800 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: OfficeChair + m_Shader: {fileID: 4800000, guid: b9758309ae566dd4abe6ee85b975d7ac, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: + - BSSBLOOMFOGTYPE_HEIGHT + - MOCHIE_PBR + - VIGNETTE_MASKED + - _LIGHTINGMODE_REALISTIC + - _RIM2STYLE_POIYOMI + - _RIMSTYLE_POIYOMI + - _STOCHASTICMODE_DELIOT_HEITZ + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + AllLockedGUIDS: f45e687b234af6948b76b2622ed33647 + OriginalKeywords: BSSBLOOMFOGTYPE_HEIGHT MOCHIE_PBR VIGNETTE_MASKED _LIGHTINGMODE_REALISTIC + _RIM2STYLE_POIYOMI _RIMSTYLE_POIYOMI _STOCHASTICMODE_DELIOT_HEITZ + OriginalShader: .poiyomi/Poiyomi Pro World + OriginalShaderGUID: a11582d439d5e494986c4b421999c03a + RenderType: Opaque + _stripped_tex__ClothDFG: 76d65cbce584df7449699fb8406f60ea + _stripped_tex__SkinLUT: d13510bb2be49aa40a66a0101efb6a36 + _stripped_tex__ToonRamp: 61bd594533da4fc42bd46ef93ba5a4f6 + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _AnisotropyMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 13a546a670af67640b830b231316b04f, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightDataSDFMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingAOMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingDetailShadowMaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LightingShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 64613c407de9568478ee03d84f975b60, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MochieMetallicMaps: + m_Texture: {fileID: 2800000, guid: 034e874b7e431464bb4ab5171bbcae9c, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MochieReflCube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _UzumoreMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - DSGI: 0 + - GeometryShader_Enabled: 1 + - Instancing: 0 + - LightmapFlags: 0 + - Tessellation_Enabled: 1 + - VertexBasicsMaskUV: 0 + - _1st2nd_Shades_Feather: 0.0001 + - _1stShadeMapMask_Inverse: 0 + - _1st_ShadeMapUV: 0 + - _2ndShadeMapMask_Inverse: 0 + - _2nd_ShadeMapUV: 0 + - _ALDecalBandClipMax: 1 + - _ALDecalBandClipMin: 0 + - _ALDecalBandStep: 0 + - _ALDecalBaseBoost: 5 + - _ALDecalBlendAlpha: 1 + - _ALDecalBlendType: 0 + - _ALDecalColorMaskUV: 0 + - _ALDecalControlsAlpha: 0 + - _ALDecalGlobalMask: 0 + - _ALDecalGlobalMaskBlendType: 2 + - _ALDecalHighEmission: 0 + - _ALDecalLineWidth: 1 + - _ALDecalLowEmission: 0 + - _ALDecalMidEmission: 0 + - _ALDecalShapeClip: 0 + - _ALDecalShapeClipBandWidth: 0.5 + - _ALDecalShapeClipVolumeWidth: 0.5 + - _ALDecalTrebleBoost: 1 + - _ALDecalType: 0 + - _ALDecalUV: 0 + - _ALDecalUVMode: 0 + - _ALDecalVolume: 0.5 + - _ALDecalVolumeClipMax: 1 + - _ALDecalVolumeClipMin: 0 + - _ALDecalVolumeColorHighThemeIndex: 0 + - _ALDecalVolumeColorLowThemeIndex: 0 + - _ALDecalVolumeColorMidThemeIndex: 0 + - _ALDecalVolumeColorSource: 1 + - _ALDecalVolumeStep: 0 + - _ALHighEmission: 0 + - _ALLowEmission: 0 + - _ALMidEmission: 0 + - _ALUVRotation: 0 + - _ALUVRotationSpeed: 0 + - _ALVolumeColorBlendAlpha: 1 + - _ALVolumeColorBlendType: 0 + - _ALVolumeColorDirection: 0 + - _ALVolumeColorHighThemeIndex: 0 + - _ALVolumeColorLowThemeIndex: 0 + - _ALVolumeColorMidThemeIndex: 0 + - _ALVolumeColorUV: 0 + - _AddBlendOp: 4 + - _AddBlendOpAlpha: 4 + - _AddDstBlend: 1 + - _AddDstBlendAlpha: 1 + - _AddSrcBlend: 1 + - _AddSrcBlendAlpha: 0 + - _Add_Antipodean_Rim2Light: 0 + - _Add_Antipodean_RimLight: 0 + - _AlphaAlphaAdd: 0 + - _AlphaAngular: 0 + - _AlphaAngularGlobalMask: 0 + - _AlphaAudioLinkAddBand: 0 + - _AlphaAudioLinkEnabled: 0 + - _AlphaBoostFA: 10 + - _AlphaColorThemeIndex: 0 + - _AlphaDistanceFade: 0 + - _AlphaDistanceFadeGlobalMask: 0 + - _AlphaDistanceFadeMax: 0 + - _AlphaDistanceFadeMaxAlpha: 1 + - _AlphaDistanceFadeMin: 0 + - _AlphaDistanceFadeMinAlpha: 0 + - _AlphaDistanceFadeType: 1 + - _AlphaDitherBias: 0 + - _AlphaDitherGradient: 0.1 + - _AlphaDithering: 0 + - _AlphaForceOpaque: 1 + - _AlphaFresnel: 0 + - _AlphaFresnelAlpha: 0 + - _AlphaFresnelGlobalMask: 0 + - _AlphaFresnelInvert: 0 + - _AlphaFresnelSharpness: 0.5 + - _AlphaFresnelWidth: 0.5 + - _AlphaGlobalMask: 0 + - _AlphaGlobalMaskBlendType: 2 + - _AlphaMaskBlendStrength: 1 + - _AlphaMaskInvert: 0 + - _AlphaMaskUV: 0 + - _AlphaMaskValue: 0 + - _AlphaMipScale: 0.25 + - _AlphaMod: 0 + - _AlphaPremultiply: 0 + - _AlphaSharpenedA2C: 0 + - _AlphaTextureStochastic: 0 + - _AlphaTextureUV: 0 + - _AlphaToCoverage: 0 + - _AngleCompareTo: 0 + - _AngleMinAlpha: 0 + - _AngleType: 0 + - _Aniso0Blur: 0 + - _Aniso0Edge: 0.5 + - _Aniso0Offset: 0 + - _Aniso0OffsetMapStrength: 0 + - _Aniso0Power: 0 + - _Aniso0Strength: 1 + - _Aniso0SwitchDirection: 0 + - _Aniso0TintIndex: 0 + - _Aniso0ToonMode: 0 + - _Aniso1Blur: 0 + - _Aniso1Edge: 0.5 + - _Aniso1Offset: 0 + - _Aniso1OffsetMapStrength: 0 + - _Aniso1Power: 0.1 + - _Aniso1Strength: 1 + - _Aniso1SwitchDirection: 0 + - _Aniso1TintIndex: 0 + - _Aniso1ToonMode: 0 + - _AnisoAdd: 1 + - _AnisoColorMapUV: 0 + - _AnisoGlobalMask: 0 + - _AnisoGlobalMaskBlendType: 2 + - _AnisoHideInShadow: 1 + - _AnisoReplace: 0 + - _AnisoUseBaseColor: 0 + - _AnisoUseLightColor: 1 + - _Anisotropy: 0 + - _AnisotropyMapChannel: 0 + - _AnisotropyMapUV: 0 + - _Ap_Rim2Light_FeatherOff: 0 + - _Ap_Rim2Light_Power: 0.1 + - _Ap_RimLight_FeatherOff: 0 + - _Ap_RimLight_Power: 0.1 + - _ApplyReflection: 0 + - _ApplySpecular: 1 + - _ApplySpecularFA: 1 + - _AudioLinkAnimToggle: 1 + - _AudioLinkBandOverridesEnabled: 0 + - _AudioLinkDecal0AlphaBand: 0 + - _AudioLinkDecal0ChannelSeparationBand: 0 + - _AudioLinkDecal0EmissionBand: 0 + - _AudioLinkDecal0RotationBand: 0 + - _AudioLinkDecal0ScaleBand: 0 + - _AudioLinkDecal0SideBand: 0 + - _AudioLinkDecal1AlphaBand: 0 + - _AudioLinkDecal1ChannelSeparationBand: 0 + - _AudioLinkDecal1EmissionBand: 0 + - _AudioLinkDecal1RotationBand: 0 + - _AudioLinkDecal1ScaleBand: 0 + - _AudioLinkDecal1SideBand: 0 + - _AudioLinkDecal2AlphaBand: 0 + - _AudioLinkDecal2ChannelSeparationBand: 0 + - _AudioLinkDecal2EmissionBand: 0 + - _AudioLinkDecal2RotationBand: 0 + - _AudioLinkDecal2ScaleBand: 0 + - _AudioLinkDecal2SideBand: 0 + - _AudioLinkDecal3AlphaBand: 0 + - _AudioLinkDecal3ChannelSeparationBand: 0 + - _AudioLinkDecal3EmissionBand: 0 + - _AudioLinkDecal3RotationBand: 0 + - _AudioLinkDecal3ScaleBand: 0 + - _AudioLinkDecal3SideBand: 0 + - _AudioLinkDecalCC0: 0 + - _AudioLinkDecalCC1: 0 + - _AudioLinkDecalCC2: 0 + - _AudioLinkDecalCC3: 0 + - _AudioLinkDissolveAlphaBand: 0 + - _AudioLinkDissolveDetailBand: 0 + - _AudioLinkEmission0CenterOutBand: 0 + - _AudioLinkEmission0CenterOutDuration: 1 + - _AudioLinkEmission0CenterOutSize: 0 + - _AudioLinkEmission1CenterOutBand: 0 + - _AudioLinkEmission1CenterOutDuration: 1 + - _AudioLinkEmission1CenterOutSize: 0 + - _AudioLinkEmission2CenterOutBand: 0 + - _AudioLinkEmission2CenterOutDuration: 1 + - _AudioLinkEmission2CenterOutSize: 0 + - _AudioLinkEmission3CenterOutBand: 0 + - _AudioLinkEmission3CenterOutDuration: 1 + - _AudioLinkEmission3CenterOutSize: 0 + - _AudioLinkFlipbookAlphaBand: 0 + - _AudioLinkFlipbookEmissionBand: 0 + - _AudioLinkFlipbookFrameBand: 0 + - _AudioLinkFlipbookScaleBand: 0 + - _AudioLinkHelp: 0 + - _AudioLinkOutlineColorBand: 0 + - _AudioLinkOutlineEmissionBand: 0 + - _AudioLinkOutlineSizeBand: 0 + - _AudioLinkPathEmissionAddBandA: 0 + - _AudioLinkPathEmissionAddBandB: 0 + - _AudioLinkPathEmissionAddBandG: 0 + - _AudioLinkPathEmissionAddBandR: 0 + - _AudioLinkPathTimeOffsetBandA: 0 + - _AudioLinkPathTimeOffsetBandB: 0 + - _AudioLinkPathTimeOffsetBandG: 0 + - _AudioLinkPathTimeOffsetBandR: 0 + - _AudioLinkPathWidthOffsetBandA: 0 + - _AudioLinkPathWidthOffsetBandB: 0 + - _AudioLinkPathWidthOffsetBandG: 0 + - _AudioLinkPathWidthOffsetBandR: 0 + - _AudioLinkRim2BrightnessBand: 0 + - _AudioLinkRim2EmissionBand: 0 + - _AudioLinkRim2WidthBand: 0 + - _AudioLinkRimBrightnessBand: 0 + - _AudioLinkRimEmissionBand: 0 + - _AudioLinkRimWidthBand: 0 + - _AudioLinkSmoothingBass: 0 + - _AudioLinkSmoothingHighMid: 0 + - _AudioLinkSmoothingLowMid: 0 + - _AudioLinkSmoothingTreble: 0 + - _AudioLinkVoronoiChronoSpeedXBand: 0 + - _AudioLinkVoronoiChronoSpeedXSpeed: 0 + - _AudioLinkVoronoiChronoSpeedXType: 0 + - _AudioLinkVoronoiChronoSpeedYBand: 0 + - _AudioLinkVoronoiChronoSpeedYSpeed: 0 + - _AudioLinkVoronoiChronoSpeedYType: 0 + - _AudioLinkVoronoiChronoSpeedZBand: 0 + - _AudioLinkVoronoiChronoSpeedZSpeed: 0 + - _AudioLinkVoronoiChronoSpeedZType: 0 + - _AudioLinkVoronoiGradientMaxAdd: 0 + - _AudioLinkVoronoiGradientMaxAddBand: 0 + - _AudioLinkVoronoiGradientMinAdd: 0 + - _AudioLinkVoronoiGradientMinAddBand: 0 + - _AudioLinkVoronoiInnerEmissionBand: 0 + - _AudioLinkVoronoiOuterEmissionBand: 0 + - _BRDFTPSDepthEnabled: 0 + - _BRDFTPSReflectionMaskStrength: 1 + - _BRDFTPSSpecularMaskStrength: 1 + - _BSSBloomfog: 0 + - _BSSBloomfogType: 1 + - _BSSEnabled: 0 + - _BSSHelpBox1: 0 + - _BSSHelpBox2: 0 + - _BSSHelpBox3: 0 + - _BSSSpacer1: 0 + - _BSSSpacer2: 0 + - _BSSSpacer3: 0 + - _BackFaceColorThemeIndex: 0 + - _BackFaceDetailIntensity: 1 + - _BackFaceEmissionLimiter: 1 + - _BackFaceEmissionStrength: 0 + - _BackFaceEnabled: 0 + - _BackFaceHueSelectOrShift: 1 + - _BackFaceHueShift: 0 + - _BackFaceHueShiftEnabled: 0 + - _BackFaceHueShiftSpeed: 0 + - _BackFaceMaskChannel: 0 + - _BackFaceMaskUV: 0 + - _BackFaceReplaceAlpha: 0 + - _BackFaceShiftColorSpace: 0 + - _BackFaceTextureUV: 0 + - _BacklightBackfaceMask: 1 + - _BacklightBlur: 0.05 + - _BacklightBorder: 0.35 + - _BacklightColorTexUV: 0 + - _BacklightDirectivity: 5 + - _BacklightEnabled: 0 + - _BacklightMainStrength: 0 + - _BacklightNormalStrength: 1 + - _BacklightReceiveShadow: 1 + - _BacklightViewStrength: 1 + - _BaseColor_Step: 0.5 + - _BaseShade_Feather: 0.0001 + - _BlackLightMasking0GlobalMaskBlendType: 0 + - _BlackLightMasking0GlobalMaskIndex: 0 + - _BlackLightMasking0Key: 1 + - _BlackLightMasking1GlobalMaskBlendType: 0 + - _BlackLightMasking1GlobalMaskIndex: 0 + - _BlackLightMasking1Key: 2 + - _BlackLightMasking2GlobalMaskBlendType: 0 + - _BlackLightMasking2GlobalMaskIndex: 0 + - _BlackLightMasking2Key: 3 + - _BlackLightMasking3GlobalMaskBlendType: 0 + - _BlackLightMasking3GlobalMaskIndex: 0 + - _BlackLightMasking3Key: 4 + - _BlackLightMaskingEnabled: 0 + - _BlendOp: 0 + - _BlendOpAlpha: 0 + - _BlendshapeBadScaleFix: 1 + - _BlendshapePower: 1 + - _BlueAlphaAdd: 0 + - _BlueColorThemeIndex: 0 + - _BlueTextureStochastic: 0 + - _BlueTextureUV: 0 + - _BulgeOffset: 0 + - _BulgePower: 0 + - _BumpMapStochastic: 0 + - _BumpMapUV: 0 + - _BumpScale: 1 + - _CCIgnoreCastedShadows: 0 + - _CameraAngleMax: 90 + - _CameraAngleMin: 45 + - _CenterOutDissolveInvert: 0 + - _CenterOutDissolveMode: 1 + - _CenterOutDissolveNormals: 0 + - _CenterOutDissolvePower: 1 + - _ClearCoatBRDF: 0 + - _ClearCoatForceFallback: 0 + - _ClearCoatGSAAEnabled: 1 + - _ClearCoatGSAAThreshold: 0.1 + - _ClearCoatGSAAVariance: 0.15 + - _ClearCoatGlobalMask: 0 + - _ClearCoatGlobalMaskBlendType: 2 + - _ClearCoatLitFallback: 1 + - _ClearCoatMapsClearCoatMaskChannel: 0 + - _ClearCoatMapsReflectionMaskChannel: 2 + - _ClearCoatMapsRoughnessChannel: 1 + - _ClearCoatMapsSpecularMaskChannel: 3 + - _ClearCoatMapsStochastic: 0 + - _ClearCoatMapsUV: 0 + - _ClearCoatMaskInvert: 0 + - _ClearCoatNormalSelect: 0 + - _ClearCoatReflectionMaskInvert: 0 + - _ClearCoatReflectionStrength: 1 + - _ClearCoatReflectionStrengthGlobalMask: 0 + - _ClearCoatReflectionStrengthGlobalMaskBlendType: 2 + - _ClearCoatReflectionTintThemeIndex: 0 + - _ClearCoatSmoothness: 1 + - _ClearCoatSmoothnessGlobalMask: 0 + - _ClearCoatSmoothnessGlobalMaskBlendType: 2 + - _ClearCoatSmoothnessMapInvert: 0 + - _ClearCoatSpecularMaskInvert: 0 + - _ClearCoatSpecularStrength: 1 + - _ClearCoatSpecularStrengthGlobalMask: 0 + - _ClearCoatSpecularStrengthGlobalMaskBlendType: 2 + - _ClearCoatSpecularTintThemeIndex: 0 + - _ClearCoatStrength: 1 + - _ClearCoatTPSDepthMaskEnabled: 0 + - _ClearCoatTPSMaskStrength: 1 + - _ClearcoatExposureOcclusion: 0 + - _ClearcoatFresnelStrength: 0.5 + - _ClothLerp: 0 + - _ClothMetallicSmoothnessMapInvert: 0 + - _ClothMetallicSmoothnessMapUV: 0 + - _ClothReflectance: 0.5 + - _ClothSmoothness: 0.5 + - _ColorGradingToggle: 0 + - _ColorMask: 15 + - _ColorThemeIndex: 0 + - _ContinuousDissolve: 0 + - _CubeMapBlendAmount: 1 + - _CubeMapBrightness: 0 + - _CubeMapColorThemeIndex: 0 + - _CubeMapContrast: 1 + - _CubeMapEmissionStrength: 0 + - _CubeMapEnabled: 0 + - _CubeMapHueSelectOrShift: 1 + - _CubeMapHueShift: 0 + - _CubeMapHueShiftColorSpace: 0 + - _CubeMapHueShiftEnabled: 0 + - _CubeMapHueShiftSpeed: 0 + - _CubeMapIntensity: 1 + - _CubeMapLightMask: 0 + - _CubeMapMaskChannel: 0 + - _CubeMapMaskGlobalMask: 0 + - _CubeMapMaskGlobalMaskBlendType: 2 + - _CubeMapMaskInvert: 0 + - _CubeMapMaskUV: 0 + - _CubeMapNormal: 1 + - _CubeMapSaturation: 1 + - _CubeMapSmoothness: 1 + - _CubeMapUVMode: 1 + - _CubeMapWorldNormalsStrength: 1 + - _CubemapBlendType: 0 + - _Cull: 2 + - _CurvFix: 1 + - _Curvature: 0 + - _CurvatureU: 0 + - _CurvatureV: 0 + - _CustomColors: 0 + - _Cutoff: 0.5 + - _Decal0ApplyGlobalMaskBlendType: 0 + - _Decal0ApplyGlobalMaskIndex: 0 + - _Decal0ChannelSeparation: 0 + - _Decal0ChannelSeparationAngleStrength: 0 + - _Decal0ChannelSeparationEnable: 0 + - _Decal0ChannelSeparationHue: 0 + - _Decal0ChannelSeparationPremultiply: 0 + - _Decal0ChannelSeparationVertical: 0 + - _Decal0Depth: 0 + - _Decal0FaceMask: 0 + - _Decal0GlobalMask: 0 + - _Decal0GlobalMaskBlendType: 2 + - _Decal0HueAngleStrength: 0 + - _Decal0MaskChannel: 0 + - _Decal0OnlyVideo: 0 + - _Decal0OverrideAlphaMode: 0 + - _Decal0TPSMaskStrength: 1 + - _Decal0UseDecalAlpha: 0 + - _Decal0VideoAspectFix: 0 + - _Decal0VideoEmissionStrength: 0 + - _Decal0VideoEnabled: 0 + - _Decal0VideoFitToScale: 1 + - _Decal1ApplyGlobalMaskBlendType: 0 + - _Decal1ApplyGlobalMaskIndex: 0 + - _Decal1ChannelSeparation: 0 + - _Decal1ChannelSeparationAngleStrength: 0 + - _Decal1ChannelSeparationEnable: 0 + - _Decal1ChannelSeparationHue: 0 + - _Decal1ChannelSeparationPremultiply: 0 + - _Decal1ChannelSeparationVertical: 0 + - _Decal1Depth: 0 + - _Decal1FaceMask: 0 + - _Decal1GlobalMask: 0 + - _Decal1GlobalMaskBlendType: 2 + - _Decal1HueAngleStrength: 0 + - _Decal1MaskChannel: 1 + - _Decal1OnlyVideo: 0 + - _Decal1OverrideAlphaMode: 0 + - _Decal1TPSMaskStrength: 1 + - _Decal1UseDecalAlpha: 0 + - _Decal1VideoAspectFix: 0 + - _Decal1VideoEmissionStrength: 0 + - _Decal1VideoEnabled: 0 + - _Decal1VideoFitToScale: 1 + - _Decal2ApplyGlobalMaskBlendType: 0 + - _Decal2ApplyGlobalMaskIndex: 0 + - _Decal2ChannelSeparation: 0 + - _Decal2ChannelSeparationAngleStrength: 0 + - _Decal2ChannelSeparationEnable: 0 + - _Decal2ChannelSeparationHue: 0 + - _Decal2ChannelSeparationPremultiply: 0 + - _Decal2ChannelSeparationVertical: 0 + - _Decal2Depth: 0 + - _Decal2FaceMask: 0 + - _Decal2GlobalMask: 0 + - _Decal2GlobalMaskBlendType: 2 + - _Decal2HueAngleStrength: 0 + - _Decal2MaskChannel: 2 + - _Decal2OnlyVideo: 0 + - _Decal2OverrideAlphaMode: 0 + - _Decal2TPSMaskStrength: 1 + - _Decal2UseDecalAlpha: 0 + - _Decal2VideoAspectFix: 0 + - _Decal2VideoEmissionStrength: 0 + - _Decal2VideoEnabled: 0 + - _Decal2VideoFitToScale: 1 + - _Decal3ApplyGlobalMaskBlendType: 0 + - _Decal3ApplyGlobalMaskIndex: 0 + - _Decal3ChannelSeparation: 0 + - _Decal3ChannelSeparationAngleStrength: 0 + - _Decal3ChannelSeparationEnable: 0 + - _Decal3ChannelSeparationHue: 0 + - _Decal3ChannelSeparationPremultiply: 0 + - _Decal3ChannelSeparationVertical: 0 + - _Decal3Depth: 0 + - _Decal3FaceMask: 0 + - _Decal3GlobalMask: 0 + - _Decal3GlobalMaskBlendType: 2 + - _Decal3HueAngleStrength: 0 + - _Decal3MaskChannel: 3 + - _Decal3OnlyVideo: 0 + - _Decal3OverrideAlphaMode: 0 + - _Decal3TPSMaskStrength: 1 + - _Decal3UseDecalAlpha: 0 + - _Decal3VideoAspectFix: 0 + - _Decal3VideoEmissionStrength: 0 + - _Decal3VideoEnabled: 0 + - _Decal3VideoFitToScale: 1 + - _DecalBlendAlpha: 1 + - _DecalBlendAlpha1: 1 + - _DecalBlendAlpha2: 1 + - _DecalBlendAlpha3: 1 + - _DecalBlendType: 0 + - _DecalBlendType1: 0 + - _DecalBlendType2: 0 + - _DecalBlendType3: 0 + - _DecalColor1ThemeIndex: 0 + - _DecalColor2ThemeIndex: 0 + - _DecalColor3ThemeIndex: 0 + - _DecalColorThemeIndex: 0 + - _DecalEmissionStrength: 0 + - _DecalEmissionStrength1: 0 + - _DecalEmissionStrength2: 0 + - _DecalEmissionStrength3: 0 + - _DecalEnabled: 0 + - _DecalEnabled1: 0 + - _DecalEnabled2: 0 + - _DecalEnabled3: 0 + - _DecalHueShift: 0 + - _DecalHueShift1: 0 + - _DecalHueShift2: 0 + - _DecalHueShift3: 0 + - _DecalHueShiftColorSpace: 0 + - _DecalHueShiftColorSpace1: 0 + - _DecalHueShiftColorSpace2: 0 + - _DecalHueShiftColorSpace3: 0 + - _DecalHueShiftEnabled: 0 + - _DecalHueShiftEnabled1: 0 + - _DecalHueShiftEnabled2: 0 + - _DecalHueShiftEnabled3: 0 + - _DecalHueShiftSelectOrShift: 1 + - _DecalHueShiftSelectOrShift1: 1 + - _DecalHueShiftSelectOrShift2: 1 + - _DecalHueShiftSelectOrShift3: 1 + - _DecalHueShiftSpeed: 0 + - _DecalHueShiftSpeed1: 0 + - _DecalHueShiftSpeed2: 0 + - _DecalHueShiftSpeed3: 0 + - _DecalMaskUV: 0 + - _DecalMirroredUVMode: 0 + - _DecalMirroredUVMode1: 0 + - _DecalMirroredUVMode2: 0 + - _DecalMirroredUVMode3: 0 + - _DecalOverrideAlpha: 0 + - _DecalOverrideAlpha1: 0 + - _DecalOverrideAlpha2: 0 + - _DecalOverrideAlpha3: 0 + - _DecalRotation: 0 + - _DecalRotation1: 0 + - _DecalRotation2: 0 + - _DecalRotation3: 0 + - _DecalRotationCTALBand0: 0 + - _DecalRotationCTALBand1: 0 + - _DecalRotationCTALBand2: 0 + - _DecalRotationCTALBand3: 0 + - _DecalRotationCTALSpeed0: 0 + - _DecalRotationCTALSpeed1: 0 + - _DecalRotationCTALSpeed2: 0 + - _DecalRotationCTALSpeed3: 0 + - _DecalRotationCTALType0: 0 + - _DecalRotationCTALType1: 0 + - _DecalRotationCTALType2: 0 + - _DecalRotationCTALType3: 0 + - _DecalRotationSpeed: 0 + - _DecalRotationSpeed1: 0 + - _DecalRotationSpeed2: 0 + - _DecalRotationSpeed3: 0 + - _DecalSymmetryMode: 0 + - _DecalSymmetryMode1: 0 + - _DecalSymmetryMode2: 0 + - _DecalSymmetryMode3: 0 + - _DecalTPSDepthMaskEnabled: 0 + - _DecalTexture1UV: 0 + - _DecalTexture2UV: 0 + - _DecalTexture3UV: 0 + - _DecalTextureUV: 0 + - _DecalTiled: 0 + - _DecalTiled1: 0 + - _DecalTiled2: 0 + - _DecalTiled3: 0 + - _DepthAlphaMaxDepth: 1 + - _DepthAlphaMaxValue: 0 + - _DepthAlphaMinDepth: 0 + - _DepthAlphaMinValue: 1 + - _DepthAlphaToggle: 0 + - _DepthBulgeFadeLength: 0.02 + - _DepthBulgeHeight: 0.02 + - _DepthBulgeMaskChannel: 0 + - _DepthBulgeMaskUV: 0 + - _DepthBulgeWarning: 0 + - _DepthColorBlendMode: 0 + - _DepthColorMaxDepth: 1 + - _DepthColorMaxValue: 0 + - _DepthColorMinDepth: 0 + - _DepthColorMinValue: 1 + - _DepthColorThemeIndex: 0 + - _DepthColorToggle: 0 + - _DepthEmissionStrength: 0 + - _DepthFXWarning: 0 + - _DepthMaskChannel: 0 + - _DepthMaskGlobalMask: 0 + - _DepthMaskGlobalMaskBlendType: 2 + - _DepthMaskUV: 0 + - _DepthRimAdd: 0 + - _DepthRimAdditiveLighting: 0 + - _DepthRimBrightness: 1 + - _DepthRimColorThemeIndex: 0 + - _DepthRimEmission: 0 + - _DepthRimHideInShadow: 0 + - _DepthRimMixBaseColor: 0 + - _DepthRimMixLightColor: 0 + - _DepthRimMultiply: 0 + - _DepthRimNormalToUse: 1 + - _DepthRimReplace: 0 + - _DepthRimSharpness: 0.2 + - _DepthRimType: 0 + - _DepthRimWidth: 0.2 + - _DepthTextureUV: 0 + - _DetailBrightness: 1 + - _DetailEnabled: 0 + - _DetailMaskStochastic: 0 + - _DetailMaskUV: 0 + - _DetailNormalGlobalMask: 0 + - _DetailNormalGlobalMaskBlendType: 2 + - _DetailNormalMapScale: 1 + - _DetailNormalMapStochastic: 0 + - _DetailNormalMapUV: 0 + - _DetailTexGlobalMask: 0 + - _DetailTexGlobalMaskBlendType: 2 + - _DetailTexIntensity: 1 + - _DetailTexStochastic: 0 + - _DetailTexUV: 0 + - _DetailTintThemeIndex: 0 + - _DisableDirectionalInAdd: 1 + - _DissolveAlpha: 0 + - _DissolveAlpha0: 0 + - _DissolveAlpha1: 0 + - _DissolveAlpha2: 0 + - _DissolveAlpha3: 0 + - _DissolveAlpha4: 0 + - _DissolveAlpha5: 0 + - _DissolveAlpha6: 0 + - _DissolveAlpha7: 0 + - _DissolveAlpha8: 0 + - _DissolveAlpha9: 0 + - _DissolveApplyGlobalMaskBlendType: 0 + - _DissolveApplyGlobalMaskIndex: 0 + - _DissolveDetailEdgeSmoothing: 0 + - _DissolveDetailNoiseUV: 0 + - _DissolveDetailStrength: 0.1 + - _DissolveEdgeColorThemeIndex: 0 + - _DissolveEdgeEmission: 0 + - _DissolveEdgeHardness: 0.5 + - _DissolveEdgeHueSelectOrShift: 1 + - _DissolveEdgeHueShift: 0 + - _DissolveEdgeHueShiftColorSpace: 0 + - _DissolveEdgeHueShiftEnabled: 0 + - _DissolveEdgeHueShiftSpeed: 0 + - _DissolveEdgeWidth: 0.025 + - _DissolveHueSelectOrShift: 1 + - _DissolveHueShift: 0 + - _DissolveHueShiftColorSpace: 0 + - _DissolveHueShiftEnabled: 0 + - _DissolveHueShiftSpeed: 0 + - _DissolveInverseApplyGlobalMaskBlendType: 0 + - _DissolveInverseApplyGlobalMaskIndex: 0 + - _DissolveInvertDetailNoise: 0 + - _DissolveInvertNoise: 0 + - _DissolveMaskGlobalMask: 0 + - _DissolveMaskGlobalMaskBlendType: 2 + - _DissolveMaskInvert: 0 + - _DissolveMaskUV: 0 + - _DissolveNoiseTextureUV: 0 + - _DissolveP2PClamp: 0 + - _DissolveP2PEdgeLength: 0.1 + - _DissolveP2PWorldLocal: 0 + - _DissolveTextureColorThemeIndex: 0 + - _DissolveToEmissionStrength: 0 + - _DissolveToTextureUV: 0 + - _DissolveType: 1 + - _DissolveUseVertexColors: 0 + - _DistortionFlowTexture1UV: 0 + - _DistortionFlowTextureUV: 0 + - _DistortionMaskChannel: 0 + - _DistortionMaskUV: 0 + - _DistortionStrength: 0.03 + - _DistortionStrength1: 0.01 + - _DistortionStrength1AudioLinkBand: 0 + - _DistortionStrengthAudioLinkBand: 0 + - _DistortionUvToDistort: 0 + - _DstBlend: 0 + - _DstBlendAlpha: 10 + - _EmissionAL0Enabled: 0 + - _EmissionAL0MultipliersBand: 0 + - _EmissionAL0StrengthBand: 0 + - _EmissionAL1Enabled: 0 + - _EmissionAL1MultipliersBand: 0 + - _EmissionAL1StrengthBand: 0 + - _EmissionAL2Enabled: 0 + - _EmissionAL2MultipliersBand: 0 + - _EmissionAL2StrengthBand: 0 + - _EmissionAL3Enabled: 0 + - _EmissionAL3MultipliersBand: 0 + - _EmissionAL3StrengthBand: 0 + - _EmissionBaseColorAsMap: 0 + - _EmissionBaseColorAsMap1: 0 + - _EmissionBaseColorAsMap2: 0 + - _EmissionBaseColorAsMap3: 0 + - _EmissionBlinkingEnabled: 0 + - _EmissionBlinkingEnabled1: 0 + - _EmissionBlinkingEnabled2: 0 + - _EmissionBlinkingEnabled3: 0 + - _EmissionBlinkingOffset: 0 + - _EmissionBlinkingOffset1: 0 + - _EmissionBlinkingOffset2: 0 + - _EmissionBlinkingOffset3: 0 + - _EmissionCenterOutEnabled: 0 + - _EmissionCenterOutEnabled1: 0 + - _EmissionCenterOutEnabled2: 0 + - _EmissionCenterOutEnabled3: 0 + - _EmissionCenterOutSpeed: 5 + - _EmissionCenterOutSpeed1: 5 + - _EmissionCenterOutSpeed2: 5 + - _EmissionCenterOutSpeed3: 5 + - _EmissionColor1ThemeIndex: 0 + - _EmissionColor2ThemeIndex: 0 + - _EmissionColor3ThemeIndex: 0 + - _EmissionColorThemeIndex: 0 + - _EmissionFluorescence: 0 + - _EmissionFluorescence1: 0 + - _EmissionFluorescence2: 0 + - _EmissionFluorescence3: 0 + - _EmissionHueSelectOrShift: 1 + - _EmissionHueSelectOrShift1: 1 + - _EmissionHueSelectOrShift2: 1 + - _EmissionHueSelectOrShift3: 1 + - _EmissionHueShift: 0 + - _EmissionHueShift1: 0 + - _EmissionHueShift2: 0 + - _EmissionHueShift3: 0 + - _EmissionHueShiftColorSpace: 0 + - _EmissionHueShiftColorSpace1: 0 + - _EmissionHueShiftColorSpace2: 0 + - _EmissionHueShiftColorSpace3: 0 + - _EmissionHueShiftEnabled: 0 + - _EmissionHueShiftEnabled1: 0 + - _EmissionHueShiftEnabled2: 0 + - _EmissionHueShiftEnabled3: 0 + - _EmissionHueShiftSpeed: 0 + - _EmissionHueShiftSpeed1: 0 + - _EmissionHueShiftSpeed2: 0 + - _EmissionHueShiftSpeed3: 0 + - _EmissionMap1UV: 0 + - _EmissionMap2UV: 0 + - _EmissionMap3UV: 0 + - _EmissionMapUV: 0 + - _EmissionMask0GlobalMask: 0 + - _EmissionMask0GlobalMaskBlendType: 2 + - _EmissionMask1Channel: 0 + - _EmissionMask1GlobalMask: 0 + - _EmissionMask1GlobalMaskBlendType: 2 + - _EmissionMask1UV: 0 + - _EmissionMask2Channel: 0 + - _EmissionMask2GlobalMask: 0 + - _EmissionMask2GlobalMaskBlendType: 2 + - _EmissionMask2UV: 0 + - _EmissionMask3Channel: 0 + - _EmissionMask3GlobalMask: 0 + - _EmissionMask3GlobalMaskBlendType: 2 + - _EmissionMask3UV: 0 + - _EmissionMaskChannel: 0 + - _EmissionMaskInvert: 0 + - _EmissionMaskInvert1: 0 + - _EmissionMaskInvert2: 0 + - _EmissionMaskInvert3: 0 + - _EmissionMaskUV: 0 + - _EmissionReplace0: 0 + - _EmissionReplace1: 0 + - _EmissionReplace2: 0 + - _EmissionReplace3: 0 + - _EmissionSaturation: 0 + - _EmissionSaturation1: 0 + - _EmissionSaturation2: 0 + - _EmissionSaturation3: 0 + - _EmissionScrollingOffset: 0 + - _EmissionScrollingOffset1: 0 + - _EmissionScrollingOffset2: 0 + - _EmissionScrollingOffset3: 0 + - _EmissionScrollingUseCurve: 0 + - _EmissionScrollingUseCurve1: 0 + - _EmissionScrollingUseCurve2: 0 + - _EmissionScrollingUseCurve3: 0 + - _EmissionScrollingVertexColor: 0 + - _EmissionScrollingVertexColor1: 0 + - _EmissionScrollingVertexColor2: 0 + - _EmissionScrollingVertexColor3: 0 + - _EmissionStrength: 0 + - _EmissionStrength1: 0 + - _EmissionStrength2: 0 + - _EmissionStrength3: 0 + - _EmissiveBlink_Max: 1 + - _EmissiveBlink_Max1: 1 + - _EmissiveBlink_Max2: 1 + - _EmissiveBlink_Max3: 1 + - _EmissiveBlink_Min: 0 + - _EmissiveBlink_Min1: 0 + - _EmissiveBlink_Min2: 0 + - _EmissiveBlink_Min3: 0 + - _EmissiveBlink_Velocity: 4 + - _EmissiveBlink_Velocity1: 4 + - _EmissiveBlink_Velocity2: 4 + - _EmissiveBlink_Velocity3: 4 + - _EmissiveScroll_Interval: 20 + - _EmissiveScroll_Interval1: 20 + - _EmissiveScroll_Interval2: 20 + - _EmissiveScroll_Interval3: 20 + - _EmissiveScroll_Velocity: 10 + - _EmissiveScroll_Velocity1: 10 + - _EmissiveScroll_Velocity2: 10 + - _EmissiveScroll_Velocity3: 10 + - _EmissiveScroll_Width: 10 + - _EmissiveScroll_Width1: 10 + - _EmissiveScroll_Width2: 10 + - _EmissiveScroll_Width3: 10 + - _EnableALDecal: 0 + - _EnableAniso: 0 + - _EnableAudioLink: 0 + - _EnableDepthBulge: 0 + - _EnableDepthRimLighting: 0 + - _EnableDissolve: 0 + - _EnableDissolveAudioLink: 0 + - _EnableDistortion: 0 + - _EnableDistortionAudioLink: 0 + - _EnableEmission: 0 + - _EnableEmission1: 0 + - _EnableEmission2: 0 + - _EnableEmission3: 0 + - _EnableEnvironmentalRim: 0 + - _EnableFlipbook: 0 + - _EnableGITDEmission: 0 + - _EnableGITDEmission1: 0 + - _EnableGITDEmission2: 0 + - _EnableGITDEmission3: 0 + - _EnableMirrorOptions: 0 + - _EnableOutlines: 0 + - _EnablePathRemapping: 0 + - _EnablePathing: 0 + - _EnableRim2Lighting: 0 + - _EnableRimLighting: 0 + - _EnableTouchGlow: 0 + - _EnableTruchet: 0 + - _EnableUDIMDiscardOptions: 0 + - _EnableUDIMFaceDiscardOptions: 0 + - _EnableVolumeColor: 0 + - _EntranceStiffness: 0.01 + - _EntryOpenDuration: 0.1 + - _FFBFOutlineStencilHelp0: 0 + - _FFBFOutlineStencilHelp1: 0 + - _FFBFStencilHelp0: 0 + - _FFBFStencilHelp1: 0 + - _FXProximityColor: 0 + - _FXProximityColorBackFace: 0 + - _FXProximityColorMaxColorThemeIndex: 0 + - _FXProximityColorMaxDistance: 1 + - _FXProximityColorMinColorThemeIndex: 0 + - _FXProximityColorMinDistance: 0 + - _FXProximityColorType: 1 + - _FlipBackfaceNormals: 1 + - _FlipbookAlphaControlsFinalAlpha: 0 + - _FlipbookBlendType: 0 + - _FlipbookChronoType: 0 + - _FlipbookChronotensityBand: 0 + - _FlipbookChronotensityEnabled: 0 + - _FlipbookChronotensitySpeed: 0 + - _FlipbookColorReplaces: 0 + - _FlipbookColorThemeIndex: 0 + - _FlipbookCrossfadeEnabled: 0 + - _FlipbookCurrentFrame: 0 + - _FlipbookEmissionStrength: 0 + - _FlipbookEndFrame: 0 + - _FlipbookFPS: 30 + - _FlipbookFrameOffset: 0 + - _FlipbookHueSelectOrShift: 1 + - _FlipbookHueShift: 0 + - _FlipbookHueShiftColorSpace: 0 + - _FlipbookHueShiftEnabled: 0 + - _FlipbookHueShiftSpeed: 0 + - _FlipbookIntensityControlsAlpha: 0 + - _FlipbookManualFrameControl: 0 + - _FlipbookMaskChannel: 0 + - _FlipbookMaskGlobalMask: 0 + - _FlipbookMaskGlobalMaskBlendType: 2 + - _FlipbookMaskUV: 0 + - _FlipbookReplace: 1 + - _FlipbookRotation: 0 + - _FlipbookRotationSpeed: 0 + - _FlipbookStartAndEnd: 0 + - _FlipbookStartFrame: 0 + - _FlipbookTexArrayUV: 0 + - _FlipbookTiled: 0 + - _FogHeightOffset: 0 + - _FogHeightScale: 1 + - _FogScale: 1 + - _FogStartOffset: 0 + - _ForceFlatRampedLightmap: 1 + - _ForgotToLockMaterial: 1 + - _GGXAnisotropics: 0 + - _GIEmissionMultiplier: 1 + - _GITDEMaxEmissionMultiplier: 0 + - _GITDEMaxEmissionMultiplier1: 0 + - _GITDEMaxEmissionMultiplier2: 0 + - _GITDEMaxEmissionMultiplier3: 0 + - _GITDEMaxLight: 1 + - _GITDEMaxLight1: 1 + - _GITDEMaxLight2: 1 + - _GITDEMaxLight3: 1 + - _GITDEMinEmissionMultiplier: 1 + - _GITDEMinEmissionMultiplier1: 1 + - _GITDEMinEmissionMultiplier2: 1 + - _GITDEMinEmissionMultiplier3: 1 + - _GITDEMinLight: 0 + - _GITDEMinLight1: 0 + - _GITDEMinLight2: 0 + - _GITDEMinLight3: 0 + - _GITDEWorldOrMesh: 0 + - _GITDEWorldOrMesh1: 0 + - _GITDEWorldOrMesh2: 0 + - _GITDEWorldOrMesh3: 0 + - _GSAAStrength: 0 + - _GlitterALAlphaAddBand: 0 + - _GlitterALChronoRotationSpeed: 0 + - _GlitterALChronoRotationSpeedBand: 0 + - _GlitterALChronoRotationSpeedType: 0 + - _GlitterALChronoSparkleSpeed: 0 + - _GlitterALChronoSparkleSpeedBand: 0 + - _GlitterALChronoSparkleSpeedType: 0 + - _GlitterALEnabled: 0 + - _GlitterALMaxBrightnessBand: 0 + - _GlitterALSizeAddBand: 0 + - _GlitterAngleRange: 90 + - _GlitterBias: 0.8 + - _GlitterBlendType: 0 + - _GlitterBrightness: 3 + - _GlitterCenterSize: 0.08 + - _GlitterColorMapUV: 0 + - _GlitterColorThemeIndex: 0 + - _GlitterContrast: 300 + - _GlitterEnable: 0 + - _GlitterFrequency: 300 + - _GlitterHideInShadow: 0 + - _GlitterHueSelectOrShift: 1 + - _GlitterHueShift: 0 + - _GlitterHueShiftColorSpace: 0 + - _GlitterHueShiftEnabled: 0 + - _GlitterHueShiftSpeed: 0 + - _GlitterJaggyFix: 0 + - _GlitterLayers: 2 + - _GlitterMaskChannel: 0 + - _GlitterMaskGlobalMask: 0 + - _GlitterMaskGlobalMaskBlendType: 2 + - _GlitterMaskInvert: 0 + - _GlitterMaskUV: 0 + - _GlitterMinBrightness: 0 + - _GlitterMode: 0 + - _GlitterRandomColors: 0 + - _GlitterRandomLocation: 1 + - _GlitterRandomRotation: 0 + - _GlitterRandomSize: 0 + - _GlitterScaleWithLighting: 0 + - _GlitterShape: 0 + - _GlitterSize: 0.3 + - _GlitterSpeed: 10 + - _GlitterTextureRotation: 0 + - _GlitterUV: 0 + - _GlitterUseNormals: 0 + - _GlitterUseSurfaceColor: 0 + - _GlobalMaskBackface_0: 0 + - _GlobalMaskBackface_1: 0 + - _GlobalMaskBackface_10: 0 + - _GlobalMaskBackface_11: 0 + - _GlobalMaskBackface_12: 0 + - _GlobalMaskBackface_13: 0 + - _GlobalMaskBackface_14: 0 + - _GlobalMaskBackface_15: 0 + - _GlobalMaskBackface_2: 0 + - _GlobalMaskBackface_3: 0 + - _GlobalMaskBackface_4: 0 + - _GlobalMaskBackface_5: 0 + - _GlobalMaskBackface_6: 0 + - _GlobalMaskBackface_7: 0 + - _GlobalMaskBackface_8: 0 + - _GlobalMaskBackface_9: 0 + - _GlobalMaskCamera_0: 0 + - _GlobalMaskCamera_1: 0 + - _GlobalMaskCamera_10: 0 + - _GlobalMaskCamera_11: 0 + - _GlobalMaskCamera_12: 0 + - _GlobalMaskCamera_13: 0 + - _GlobalMaskCamera_14: 0 + - _GlobalMaskCamera_15: 0 + - _GlobalMaskCamera_2: 0 + - _GlobalMaskCamera_3: 0 + - _GlobalMaskCamera_4: 0 + - _GlobalMaskCamera_5: 0 + - _GlobalMaskCamera_6: 0 + - _GlobalMaskCamera_7: 0 + - _GlobalMaskCamera_8: 0 + - _GlobalMaskCamera_9: 0 + - _GlobalMaskDistanceBlendType_0: 0 + - _GlobalMaskDistanceBlendType_1: 0 + - _GlobalMaskDistanceBlendType_10: 0 + - _GlobalMaskDistanceBlendType_11: 0 + - _GlobalMaskDistanceBlendType_12: 0 + - _GlobalMaskDistanceBlendType_13: 0 + - _GlobalMaskDistanceBlendType_14: 0 + - _GlobalMaskDistanceBlendType_15: 0 + - _GlobalMaskDistanceBlendType_2: 0 + - _GlobalMaskDistanceBlendType_3: 0 + - _GlobalMaskDistanceBlendType_4: 0 + - _GlobalMaskDistanceBlendType_5: 0 + - _GlobalMaskDistanceBlendType_6: 0 + - _GlobalMaskDistanceBlendType_7: 0 + - _GlobalMaskDistanceBlendType_8: 0 + - _GlobalMaskDistanceBlendType_9: 0 + - _GlobalMaskDistanceEnable_0: 0 + - _GlobalMaskDistanceEnable_1: 0 + - _GlobalMaskDistanceEnable_10: 0 + - _GlobalMaskDistanceEnable_11: 0 + - _GlobalMaskDistanceEnable_12: 0 + - _GlobalMaskDistanceEnable_13: 0 + - _GlobalMaskDistanceEnable_14: 0 + - _GlobalMaskDistanceEnable_15: 0 + - _GlobalMaskDistanceEnable_2: 0 + - _GlobalMaskDistanceEnable_3: 0 + - _GlobalMaskDistanceEnable_4: 0 + - _GlobalMaskDistanceEnable_5: 0 + - _GlobalMaskDistanceEnable_6: 0 + - _GlobalMaskDistanceEnable_7: 0 + - _GlobalMaskDistanceEnable_8: 0 + - _GlobalMaskDistanceEnable_9: 0 + - _GlobalMaskDistanceMaxAlpha_0: 1 + - _GlobalMaskDistanceMaxAlpha_1: 1 + - _GlobalMaskDistanceMaxAlpha_10: 1 + - _GlobalMaskDistanceMaxAlpha_11: 1 + - _GlobalMaskDistanceMaxAlpha_12: 1 + - _GlobalMaskDistanceMaxAlpha_13: 1 + - _GlobalMaskDistanceMaxAlpha_14: 1 + - _GlobalMaskDistanceMaxAlpha_15: 1 + - _GlobalMaskDistanceMaxAlpha_2: 1 + - _GlobalMaskDistanceMaxAlpha_3: 1 + - _GlobalMaskDistanceMaxAlpha_4: 1 + - _GlobalMaskDistanceMaxAlpha_5: 1 + - _GlobalMaskDistanceMaxAlpha_6: 1 + - _GlobalMaskDistanceMaxAlpha_7: 1 + - _GlobalMaskDistanceMaxAlpha_8: 1 + - _GlobalMaskDistanceMaxAlpha_9: 1 + - _GlobalMaskDistanceMax_0: 2 + - _GlobalMaskDistanceMax_1: 2 + - _GlobalMaskDistanceMax_10: 2 + - _GlobalMaskDistanceMax_11: 2 + - _GlobalMaskDistanceMax_12: 2 + - _GlobalMaskDistanceMax_13: 2 + - _GlobalMaskDistanceMax_14: 2 + - _GlobalMaskDistanceMax_15: 2 + - _GlobalMaskDistanceMax_2: 2 + - _GlobalMaskDistanceMax_3: 2 + - _GlobalMaskDistanceMax_4: 2 + - _GlobalMaskDistanceMax_5: 2 + - _GlobalMaskDistanceMax_6: 2 + - _GlobalMaskDistanceMax_7: 2 + - _GlobalMaskDistanceMax_8: 2 + - _GlobalMaskDistanceMax_9: 2 + - _GlobalMaskDistanceMinAlpha_0: 0 + - _GlobalMaskDistanceMinAlpha_1: 0 + - _GlobalMaskDistanceMinAlpha_10: 0 + - _GlobalMaskDistanceMinAlpha_11: 0 + - _GlobalMaskDistanceMinAlpha_12: 0 + - _GlobalMaskDistanceMinAlpha_13: 0 + - _GlobalMaskDistanceMinAlpha_14: 0 + - _GlobalMaskDistanceMinAlpha_15: 0 + - _GlobalMaskDistanceMinAlpha_2: 0 + - _GlobalMaskDistanceMinAlpha_3: 0 + - _GlobalMaskDistanceMinAlpha_4: 0 + - _GlobalMaskDistanceMinAlpha_5: 0 + - _GlobalMaskDistanceMinAlpha_6: 0 + - _GlobalMaskDistanceMinAlpha_7: 0 + - _GlobalMaskDistanceMinAlpha_8: 0 + - _GlobalMaskDistanceMinAlpha_9: 0 + - _GlobalMaskDistanceMin_0: 1 + - _GlobalMaskDistanceMin_1: 1 + - _GlobalMaskDistanceMin_10: 1 + - _GlobalMaskDistanceMin_11: 1 + - _GlobalMaskDistanceMin_12: 1 + - _GlobalMaskDistanceMin_13: 1 + - _GlobalMaskDistanceMin_14: 1 + - _GlobalMaskDistanceMin_15: 1 + - _GlobalMaskDistanceMin_2: 1 + - _GlobalMaskDistanceMin_3: 1 + - _GlobalMaskDistanceMin_4: 1 + - _GlobalMaskDistanceMin_5: 1 + - _GlobalMaskDistanceMin_6: 1 + - _GlobalMaskDistanceMin_7: 1 + - _GlobalMaskDistanceMin_8: 1 + - _GlobalMaskDistanceMin_9: 1 + - _GlobalMaskDistanceType_0: 1 + - _GlobalMaskDistanceType_1: 1 + - _GlobalMaskDistanceType_10: 1 + - _GlobalMaskDistanceType_11: 1 + - _GlobalMaskDistanceType_12: 1 + - _GlobalMaskDistanceType_13: 1 + - _GlobalMaskDistanceType_14: 1 + - _GlobalMaskDistanceType_15: 1 + - _GlobalMaskDistanceType_2: 1 + - _GlobalMaskDistanceType_3: 1 + - _GlobalMaskDistanceType_4: 1 + - _GlobalMaskDistanceType_5: 1 + - _GlobalMaskDistanceType_6: 1 + - _GlobalMaskDistanceType_7: 1 + - _GlobalMaskDistanceType_8: 1 + - _GlobalMaskDistanceType_9: 1 + - _GlobalMaskMirrorVisibilityMode: 1 + - _GlobalMaskMirror_0: 0 + - _GlobalMaskMirror_1: 0 + - _GlobalMaskMirror_10: 0 + - _GlobalMaskMirror_11: 0 + - _GlobalMaskMirror_12: 0 + - _GlobalMaskMirror_13: 0 + - _GlobalMaskMirror_14: 0 + - _GlobalMaskMirror_15: 0 + - _GlobalMaskMirror_2: 0 + - _GlobalMaskMirror_3: 0 + - _GlobalMaskMirror_4: 0 + - _GlobalMaskMirror_5: 0 + - _GlobalMaskMirror_6: 0 + - _GlobalMaskMirror_7: 0 + - _GlobalMaskMirror_8: 0 + - _GlobalMaskMirror_9: 0 + - _GlobalMaskModifiersBackfaceEnable: 0 + - _GlobalMaskModifiersCameraEnable: 0 + - _GlobalMaskModifiersCameraInfo: 0 + - _GlobalMaskModifiersDistanceEnable: 0 + - _GlobalMaskModifiersMirrorEnable: 0 + - _GlobalMaskOptionsEnable: 0 + - _GlobalMaskOptionsType: 0 + - _GlobalMaskSlider_0: 0 + - _GlobalMaskSlider_1: 0 + - _GlobalMaskSlider_10: 0 + - _GlobalMaskSlider_11: 0 + - _GlobalMaskSlider_12: 0 + - _GlobalMaskSlider_13: 0 + - _GlobalMaskSlider_14: 0 + - _GlobalMaskSlider_15: 0 + - _GlobalMaskSlider_2: 0 + - _GlobalMaskSlider_3: 0 + - _GlobalMaskSlider_4: 0 + - _GlobalMaskSlider_5: 0 + - _GlobalMaskSlider_6: 0 + - _GlobalMaskSlider_7: 0 + - _GlobalMaskSlider_8: 0 + - _GlobalMaskSlider_9: 0 + - _GlobalMaskTexture0Split: 0 + - _GlobalMaskTexture0UV: 0 + - _GlobalMaskTexture1Split: 0 + - _GlobalMaskTexture1UV: 0 + - _GlobalMaskTexture2Split: 0 + - _GlobalMaskTexture2UV: 0 + - _GlobalMaskTexture3Split: 0 + - _GlobalMaskTexture3UV: 0 + - _GlobalMaskTexturesEnable: 0 + - _GlobalMaskToggleOff_0: 0 + - _GlobalMaskToggleOff_1: 0 + - _GlobalMaskToggleOff_10: 0 + - _GlobalMaskToggleOff_11: 0 + - _GlobalMaskToggleOff_12: 0 + - _GlobalMaskToggleOff_13: 0 + - _GlobalMaskToggleOff_14: 0 + - _GlobalMaskToggleOff_15: 0 + - _GlobalMaskToggleOff_2: 0 + - _GlobalMaskToggleOff_3: 0 + - _GlobalMaskToggleOff_4: 0 + - _GlobalMaskToggleOff_5: 0 + - _GlobalMaskToggleOff_6: 0 + - _GlobalMaskToggleOff_7: 0 + - _GlobalMaskToggleOff_8: 0 + - _GlobalMaskToggleOff_9: 0 + - _GlobalMaskToggleOn_0: 0 + - _GlobalMaskToggleOn_1: 0 + - _GlobalMaskToggleOn_10: 0 + - _GlobalMaskToggleOn_11: 0 + - _GlobalMaskToggleOn_12: 0 + - _GlobalMaskToggleOn_13: 0 + - _GlobalMaskToggleOn_14: 0 + - _GlobalMaskToggleOn_15: 0 + - _GlobalMaskToggleOn_2: 0 + - _GlobalMaskToggleOn_3: 0 + - _GlobalMaskToggleOn_4: 0 + - _GlobalMaskToggleOn_5: 0 + - _GlobalMaskToggleOn_6: 0 + - _GlobalMaskToggleOn_7: 0 + - _GlobalMaskToggleOn_8: 0 + - _GlobalMaskToggleOn_9: 0 + - _GlobalMaskVertexColorAlpha: 0 + - _GlobalMaskVertexColorAlphaBlendType: 2 + - _GlobalMaskVertexColorBlue: 0 + - _GlobalMaskVertexColorBlueBlendType: 2 + - _GlobalMaskVertexColorGreen: 0 + - _GlobalMaskVertexColorGreenBlendType: 2 + - _GlobalMaskVertexColorLinearSpace: 1 + - _GlobalMaskVertexColorRed: 0 + - _GlobalMaskVertexColorRedBlendType: 2 + - _GlobalThemeHue0: 0 + - _GlobalThemeHue1: 0 + - _GlobalThemeHue2: 0 + - _GlobalThemeHue3: 0 + - _GlobalThemeHueSpeed0: 0 + - _GlobalThemeHueSpeed1: 0 + - _GlobalThemeHueSpeed2: 0 + - _GlobalThemeHueSpeed3: 0 + - _GlobalThemeSaturation0: 0 + - _GlobalThemeSaturation1: 0 + - _GlobalThemeSaturation2: 0 + - _GlobalThemeSaturation3: 0 + - _GlobalThemeValue0: 0 + - _GlobalThemeValue1: 0 + - _GlobalThemeValue2: 0 + - _GlobalThemeValue3: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GreenAlphaAdd: 0 + - _GreenColorThemeIndex: 0 + - _GreenTextureStochastic: 0 + - _GreenTextureUV: 0 + - _HeightMapUV: 0 + - _HeightOffset: 0 + - _HeightStepsMax: 128 + - _HeightStepsMin: 10 + - _HeightStrength: 0.005 + - _HeightmaskChannel: 0 + - _HeightmaskInvert: 0 + - _HeightmaskUV: 0 + - _HighColorThemeIndex: 0 + - _HighColor_Power: 0.2 + - _HighColor_TexUV: 0 + - _IgnoreCastedShadows: 0 + - _IgnoreFog: 0 + - _Is_BlendAddToHiColor: 0 + - _Is_LightColor_Ap_Rim2Light: 1 + - _Is_LightColor_Ap_RimLight: 1 + - _Is_LightColor_Rim2Light: 1 + - _Is_LightColor_RimLight: 1 + - _Is_NormalMapToRim2Light: 1 + - _Is_NormalMapToRimLight: 1 + - _Is_SpecularToHighColor: 0 + - _LTCGIEnabled: 0 + - _LTCGI_AnimToggle: 1 + - _LTCGI_Attribution: 0 + - _LTCGI_DiffuseColorThemeIndex: 0 + - _LTCGI_Metallic: 0 + - _LTCGI_Smoothness: 0 + - _LTCGI_SpecularColorThemeIndex: 0 + - _LTCGI_UseEO: 0 + - _LTCGI_UsePBR: 1 + - _Layer1Strength: 1 + - _Layer2Size: 0 + - _Layer2Strength: 0 + - _Length: 0 + - _LightDataAOGlobalMaskBlendTypeR: 2 + - _LightDataAOGlobalMaskR: 0 + - _LightDataAOStrengthA: 0 + - _LightDataAOStrengthB: 0 + - _LightDataAOStrengthG: 0 + - _LightDataAOStrengthR: 1 + - _LightDataDebugEnabled: 0 + - _LightDataDetailShadowGlobalMaskBlendTypeR: 2 + - _LightDataDetailShadowGlobalMaskR: 0 + - _LightDataSDFBlendY: 1 + - _LightDataSDFMapLOD: 0 + - _LightDataSDFMapUV: 0 + - _LightDataShadowMaskGlobalMaskBlendTypeR: 2 + - _LightDataShadowMaskGlobalMaskR: 0 + - _LightDirection_MaskOn: 0 + - _LightDirection_MaskOn2: 0 + - _LightingAOMapsUV: 0 + - _LightingAddDetailShadowStrengthA: 0 + - _LightingAddDetailShadowStrengthB: 0 + - _LightingAddDetailShadowStrengthG: 0 + - _LightingAddDetailShadowStrengthR: 1 + - _LightingAdditiveCastedShadows: 1 + - _LightingAdditiveEnable: 1 + - _LightingAdditiveGradientEnd: 0.5 + - _LightingAdditiveGradientStart: 0 + - _LightingAdditiveLimit: 1 + - _LightingAdditiveLimited: 1 + - _LightingAdditiveMonochromatic: 0 + - _LightingAdditivePassthrough: 0.5 + - _LightingAdditiveType: 3 + - _LightingCap: 1 + - _LightingCapEnabled: 1 + - _LightingCastedShadows: 0 + - _LightingColorMode: 0 + - _LightingDebugVisualize: 0 + - _LightingDetailShadowMapsUV: 0 + - _LightingDetailShadowStrengthA: 0 + - _LightingDetailShadowStrengthB: 0 + - _LightingDetailShadowStrengthG: 0 + - _LightingDetailShadowStrengthR: 1 + - _LightingDirectionMode: 0 + - _LightingEnableLightVolumes: 1 + - _LightingForceColorEnabled: 0 + - _LightingForcedColorThemeIndex: 0 + - _LightingGradientEnd: 0.5 + - _LightingGradientStart: 0 + - _LightingIgnoreAmbientColor: 1 + - _LightingIndirectUsesNormals: 0 + - _LightingMapMode: 0 + - _LightingMinLightBrightness: 0 + - _LightingMirrorVertexLightingEnabled: 1 + - _LightingMode: 6 + - _LightingMonochromatic: 0 + - _LightingMulitlayerNonLinear: 1 + - _LightingShadowMaskStrengthA: 0 + - _LightingShadowMaskStrengthB: 0 + - _LightingShadowMaskStrengthG: 0 + - _LightingShadowMaskStrengthR: 1 + - _LightingShadowMasksUV: 0 + - _LightingVertexLightingEnabled: 1 + - _LightingViewDirOffsetPitch: 0 + - _LightingViewDirOffsetYaw: 0 + - _LightingWrappedNormalization: 0 + - _LightingWrappedWrap: 0 + - _LineColorThemeIndex: 0 + - _LineWidth: 1 + - _LookAtAlphaAlpha: 1 + - _LookAtAlphaMaskEnabled: 0 + - _LookAtAlphaTargetUp: 0 + - _LookAtBlueAlpha: 1 + - _LookAtBlueMaskEnabled: 0 + - _LookAtBlueTargetUp: 0 + - _LookAtGreenAlpha: 1 + - _LookAtGreenMaskEnabled: 0 + - _LookAtGreenTargetUp: 0 + - _LookAtMaskUV: 0 + - _LookAtRedAlpha: 1 + - _LookAtRedMaskEnabled: 1 + - _LookAtRedTargetUp: 0 + - _LookAtVisibilityEnabled: 0 + - _LookAtVisibilityMirror: 0 + - _LookAtVisibilityMode: 1 + - _LookAtVisibilityVRCCameraDesktop: 1 + - _LookAtVisibilityVRCCameraScreenshot: 1 + - _LookAtVisibilityVRCCameraVR: 1 + - _LookAtVisibilityVRCMirrorDesktop: 1 + - _LookAtVisibilityVRCMirrorVR: 1 + - _LookAtVisibilityVRCRegular: 1 + - _MainALHueShiftBand: 0 + - _MainALHueShiftCTIndex: 0 + - _MainAlphaMaskMode: 2 + - _MainBrightness: 0 + - _MainBrightnessGlobalMask: 0 + - _MainBrightnessGlobalMaskBlendType: 2 + - _MainColorAdjustTextureUV: 0 + - _MainColorAdjustToggle: 0 + - _MainGamma: 1 + - _MainGammaGlobalMask: 0 + - _MainGammaGlobalMaskBlendType: 2 + - _MainGradationStrength: 0 + - _MainHueALCTEnabled: 0 + - _MainHueALMotionSpeed: 1 + - _MainHueGlobalMask: 0 + - _MainHueGlobalMaskBlendType: 2 + - _MainHueShift: 0 + - _MainHueShiftColorSpace: 0 + - _MainHueShiftReplace: 1 + - _MainHueShiftSelectOrShift: 1 + - _MainHueShiftSpeed: 0 + - _MainHueShiftToggle: 0 + - _MainIgnoreTexAlpha: 0 + - _MainPixelMode: 0 + - _MainSaturationGlobalMask: 0 + - _MainSaturationGlobalMaskBlendType: 2 + - _MainTexStochastic: 0 + - _MainTexUV: 0 + - _MainUseVertexColorAlpha: 0 + - _MainVertexColoring: 0 + - _MainVertexColoringEnabled: 0 + - _MainVertexColoringLinearSpace: 1 + - _Matcap0ALAlphaAddBand: 0 + - _Matcap0ALChronoPanBand: 0 + - _Matcap0ALChronoPanSpeed: 0 + - _Matcap0ALChronoPanType: 0 + - _Matcap0ALEmissionAddBand: 0 + - _Matcap0ALEnabled: 0 + - _Matcap0ALIntensityAddBand: 0 + - _Matcap0CircleMaskBlur: 0.1 + - _Matcap0CircleMaskBorder: 0.45 + - _Matcap0CircleMaskEnabled: 0 + - _Matcap0CustomNormal: 0 + - _Matcap0NormalMapScale: 1 + - _Matcap0NormalMapUV: 0 + - _Matcap1ALAlphaAddBand: 0 + - _Matcap1ALChronoPanBand: 0 + - _Matcap1ALChronoPanSpeed: 0 + - _Matcap1ALChronoPanType: 0 + - _Matcap1ALEmissionAddBand: 0 + - _Matcap1ALEnabled: 0 + - _Matcap1ALIntensityAddBand: 0 + - _Matcap1CustomNormal: 0 + - _Matcap1NormalMapScale: 1 + - _Matcap1NormalMapUV: 0 + - _Matcap2ALAlphaAddBand: 0 + - _Matcap2ALChronoPanBand: 0 + - _Matcap2ALChronoPanSpeed: 0 + - _Matcap2ALChronoPanType: 0 + - _Matcap2ALEmissionAddBand: 0 + - _Matcap2ALEnabled: 0 + - _Matcap2ALIntensityAddBand: 0 + - _Matcap2Add: 0 + - _Matcap2AddToLight: 0 + - _Matcap2AlphaOverride: 0 + - _Matcap2ApplyToAlphaBlendType: 0 + - _Matcap2ApplyToAlphaBlending: 1 + - _Matcap2ApplyToAlphaEnabled: 0 + - _Matcap2ApplyToAlphaSourceBlend: 0 + - _Matcap2BaseColorMix: 0 + - _Matcap2Border: 0.5 + - _Matcap2CircleMaskBlur: 0.1 + - _Matcap2CircleMaskBorder: 0.45 + - _Matcap2CircleMaskEnabled: 0 + - _Matcap2ColorThemeIndex: 0 + - _Matcap2CustomNormal: 0 + - _Matcap2EmissionStrength: 0 + - _Matcap2Enable: 0 + - _Matcap2HueSelectOrShift: 1 + - _Matcap2HueShift: 0 + - _Matcap2HueShiftColorSpace: 0 + - _Matcap2HueShiftEnabled: 0 + - _Matcap2HueShiftSpeed: 0 + - _Matcap2Intensity: 1 + - _Matcap2LightColorMix: 0 + - _Matcap2LightMask: 0 + - _Matcap2MaskChannel: 0 + - _Matcap2MaskGlobalMask: 0 + - _Matcap2MaskGlobalMaskBlendType: 2 + - _Matcap2MaskInvert: 0 + - _Matcap2MaskSmoothnessApply: 0 + - _Matcap2MaskSmoothnessChannel: 3 + - _Matcap2MaskUV: 0 + - _Matcap2Mixed: 0 + - _Matcap2Multiply: 0 + - _Matcap2Normal: 1 + - _Matcap2NormalMapScale: 1 + - _Matcap2NormalMapUV: 0 + - _Matcap2Replace: 0 + - _Matcap2Rotation: 0 + - _Matcap2Screen: 0 + - _Matcap2Smoothness: 1 + - _Matcap2TPSDepthEnabled: 0 + - _Matcap2TPSMaskStrength: 1 + - _Matcap2UVMode: 1 + - _Matcap2UVToBlend: 1 + - _Matcap3ALAlphaAddBand: 0 + - _Matcap3ALChronoPanBand: 0 + - _Matcap3ALChronoPanSpeed: 0 + - _Matcap3ALChronoPanType: 0 + - _Matcap3ALEmissionAddBand: 0 + - _Matcap3ALEnabled: 0 + - _Matcap3ALIntensityAddBand: 0 + - _Matcap3Add: 0 + - _Matcap3AddToLight: 0 + - _Matcap3AlphaOverride: 0 + - _Matcap3ApplyToAlphaBlendType: 0 + - _Matcap3ApplyToAlphaBlending: 1 + - _Matcap3ApplyToAlphaEnabled: 0 + - _Matcap3ApplyToAlphaSourceBlend: 0 + - _Matcap3BaseColorMix: 0 + - _Matcap3Border: 0.5 + - _Matcap3CircleMaskBlur: 0.1 + - _Matcap3CircleMaskBorder: 0.45 + - _Matcap3CircleMaskEnabled: 0 + - _Matcap3ColorThemeIndex: 0 + - _Matcap3CustomNormal: 0 + - _Matcap3EmissionStrength: 0 + - _Matcap3Enable: 0 + - _Matcap3HueSelectOrShift: 1 + - _Matcap3HueShift: 0 + - _Matcap3HueShiftColorSpace: 0 + - _Matcap3HueShiftEnabled: 0 + - _Matcap3HueShiftSpeed: 0 + - _Matcap3Intensity: 1 + - _Matcap3LightColorMix: 0 + - _Matcap3LightMask: 0 + - _Matcap3MaskChannel: 0 + - _Matcap3MaskGlobalMask: 0 + - _Matcap3MaskGlobalMaskBlendType: 2 + - _Matcap3MaskInvert: 0 + - _Matcap3MaskSmoothnessApply: 0 + - _Matcap3MaskSmoothnessChannel: 3 + - _Matcap3MaskUV: 0 + - _Matcap3Mixed: 0 + - _Matcap3Multiply: 0 + - _Matcap3Normal: 1 + - _Matcap3NormalMapScale: 1 + - _Matcap3NormalMapUV: 0 + - _Matcap3Replace: 0 + - _Matcap3Rotation: 0 + - _Matcap3Screen: 0 + - _Matcap3Smoothness: 1 + - _Matcap3TPSDepthEnabled: 0 + - _Matcap3TPSMaskStrength: 1 + - _Matcap3UVMode: 1 + - _Matcap3UVToBlend: 1 + - _Matcap4Add: 0 + - _Matcap4AddToLight: 0 + - _Matcap4AlphaOverride: 0 + - _Matcap4ApplyToAlphaBlendType: 0 + - _Matcap4ApplyToAlphaBlending: 1 + - _Matcap4ApplyToAlphaEnabled: 0 + - _Matcap4ApplyToAlphaSourceBlend: 0 + - _Matcap4BaseColorMix: 0 + - _Matcap4Border: 0.5 + - _Matcap4CircleMaskBlur: 0.1 + - _Matcap4CircleMaskBorder: 0.45 + - _Matcap4CircleMaskEnabled: 0 + - _Matcap4ColorThemeIndex: 0 + - _Matcap4EmissionStrength: 0 + - _Matcap4Enable: 0 + - _Matcap4HueSelectOrShift: 1 + - _Matcap4HueShift: 0 + - _Matcap4HueShiftColorSpace: 0 + - _Matcap4HueShiftEnabled: 0 + - _Matcap4HueShiftSpeed: 0 + - _Matcap4Intensity: 1 + - _Matcap4LightColorMix: 0 + - _Matcap4LightMask: 0 + - _Matcap4MaskChannel: 0 + - _Matcap4MaskGlobalMask: 0 + - _Matcap4MaskGlobalMaskBlendType: 2 + - _Matcap4MaskInvert: 0 + - _Matcap4MaskSmoothnessApply: 0 + - _Matcap4MaskSmoothnessChannel: 3 + - _Matcap4MaskUV: 0 + - _Matcap4Mixed: 0 + - _Matcap4Multiply: 0 + - _Matcap4Normal: 1 + - _Matcap4Replace: 0 + - _Matcap4Rotation: 0 + - _Matcap4Screen: 0 + - _Matcap4Smoothness: 1 + - _Matcap4TPSDepthEnabled: 0 + - _Matcap4TPSMaskStrength: 1 + - _Matcap4UVMode: 1 + - _Matcap4UVToBlend: 1 + - _MatcapAdd: 0 + - _MatcapAddToLight: 0 + - _MatcapAlphaOverride: 0 + - _MatcapApplyToAlphaBlendType: 0 + - _MatcapApplyToAlphaBlending: 1 + - _MatcapApplyToAlphaEnabled: 0 + - _MatcapApplyToAlphaSourceBlend: 0 + - _MatcapBaseColorMix: 0 + - _MatcapBorder: 0.5 + - _MatcapColorThemeIndex: 0 + - _MatcapEmissionStrength: 0 + - _MatcapEnable: 0 + - _MatcapHueSelectOrShift: 1 + - _MatcapHueShift: 0 + - _MatcapHueShiftColorSpace: 0 + - _MatcapHueShiftEnabled: 0 + - _MatcapHueShiftSpeed: 0 + - _MatcapIntensity: 1 + - _MatcapLightColorMix: 0 + - _MatcapLightMask: 0 + - _MatcapMaskChannel: 0 + - _MatcapMaskGlobalMask: 0 + - _MatcapMaskGlobalMaskBlendType: 2 + - _MatcapMaskInvert: 0 + - _MatcapMaskSmoothnessApply: 0 + - _MatcapMaskSmoothnessChannel: 3 + - _MatcapMaskUV: 0 + - _MatcapMixed: 0 + - _MatcapMultiply: 0 + - _MatcapNormal: 1 + - _MatcapReplace: 1 + - _MatcapRotation: 0 + - _MatcapScreen: 0 + - _MatcapSmoothness: 1 + - _MatcapTPSDepthEnabled: 0 + - _MatcapTPSMaskStrength: 1 + - _MatcapUVMode: 1 + - _MatcapUVToBlend: 1 + - _Metallic: 0 + - _Mirror: 0 + - _MirrorColorThemeIndex: 0 + - _MirrorTextureBlendType: 0 + - _MirrorTextureEnabled: 0 + - _MirrorTextureForceEnabled: 0 + - _MirrorTextureUV: 0 + - _MochieBRDF: 1 + - _MochieForceFallback: 0 + - _MochieGSAAEnabled: 1 + - _MochieLitFallback: 1 + - _MochieMetallicGlobalMask: 0 + - _MochieMetallicGlobalMaskBlendType: 2 + - _MochieMetallicMapInvert: 0 + - _MochieMetallicMapsMetallicChannel: 0 + - _MochieMetallicMapsReflectionMaskChannel: 2 + - _MochieMetallicMapsRoughnessChannel: 1 + - _MochieMetallicMapsSpecularMaskChannel: 3 + - _MochieMetallicMapsStochastic: 0 + - _MochieMetallicMapsUV: 0 + - _MochieMetallicMasksUV: 0 + - _MochieMetallicMultiplier: 1 + - _MochieReflectionMaskInvert: 0 + - _MochieReflectionStrength: 1 + - _MochieReflectionStrengthGlobalMask: 0 + - _MochieReflectionStrengthGlobalMaskBlendType: 2 + - _MochieReflectionTintThemeIndex: 0 + - _MochieRoughnessMapInvert: 0 + - _MochieRoughnessMultiplier: 1 + - _MochieRoughnessMultiplier2: 1 + - _MochieSmoothnessGlobalMask: 0 + - _MochieSmoothnessGlobalMaskBlendType: 2 + - _MochieSpecularMaskInvert: 0 + - _MochieSpecularStrength: 1 + - _MochieSpecularStrength2: 1 + - _MochieSpecularStrengthGlobalMask: 0 + - _MochieSpecularStrengthGlobalMaskBlendType: 2 + - _MochieSpecularTintThemeIndex: 0 + - _Mode: 0 + - _ModelAngleMax: 90 + - _ModelAngleMin: 45 + - _MultilayerMathBlurMapUV: 0 + - _NormalCorrect: 0 + - _NormalCorrectAmount: 0.9 + - _OcclusionStrength: 1 + - _OffsetFactor: 0 + - _OffsetUnits: 0 + - _Offset_Z: 0 + - _OrifaceEnabled: 0 + - _OrificeChannel: 0 + - _OutlineALColorEnabled: 0 + - _OutlineAlphaDistanceFade: 0 + - _OutlineAlphaDistanceFadeMax: 0 + - _OutlineAlphaDistanceFadeMaxAlpha: 1 + - _OutlineAlphaDistanceFadeMin: 0 + - _OutlineAlphaDistanceFadeMinAlpha: 0 + - _OutlineAlphaDistanceFadeType: 1 + - _OutlineBlendOp: 0 + - _OutlineBlendOpAlpha: 4 + - _OutlineClipAtZeroWidth: 1 + - _OutlineCull: 1 + - _OutlineDstBlend: 0 + - _OutlineDstBlendAlpha: 0 + - _OutlineEmission: 0 + - _OutlineExpansionMode: 1 + - _OutlineFixWidth: 0.5 + - _OutlineFixedSize: 1 + - _OutlineGamma: 1 + - _OutlineHue: 0 + - _OutlineHueOffsetSpeed: 0 + - _OutlineHueShift: 0 + - _OutlineLit: 1 + - _OutlineMaskChannel: 0 + - _OutlineMaskUV: 0 + - _OutlineOverrideAlpha: 0 + - _OutlineRimLightBlend: 0 + - _OutlineSaturation: 1 + - _OutlineShadowStrength: 0 + - _OutlineSpace: 0 + - _OutlineSrcBlend: 1 + - _OutlineSrcBlendAlpha: 1 + - _OutlineStencilBackCompareFunction: 8 + - _OutlineStencilBackFailOp: 0 + - _OutlineStencilBackPassOp: 0 + - _OutlineStencilBackZFailOp: 0 + - _OutlineStencilCompareFunction: 8 + - _OutlineStencilFailOp: 0 + - _OutlineStencilFrontCompareFunction: 8 + - _OutlineStencilFrontFailOp: 0 + - _OutlineStencilFrontPassOp: 0 + - _OutlineStencilFrontZFailOp: 0 + - _OutlineStencilPassOp: 0 + - _OutlineStencilReadMask: 255 + - _OutlineStencilRef: 0 + - _OutlineStencilType: 0 + - _OutlineStencilWriteMask: 255 + - _OutlineStencilZFailOp: 0 + - _OutlineTextureUV: 0 + - _OutlineTintMix: 0 + - _OutlineUseVertexColorNormals: 0 + - _OutlineValue: 1 + - _OutlineVertexColorMask: 0 + - _OutlineVertexColorMaskStrength: 1 + - _OutlineZOffsetChannel: 0 + - _OutlineZOffsetInvertMaskChannel: 0 + - _OutlineZOffsetMaskStrength: 1 + - _OutlineZOffsetVertexColor: 0 + - _OutlineZOffsetVertexColorStrength: 1 + - _OutlineZTest: 4 + - _OutlineZWrite: 1 + - _OutlinesMaxDistance: 1 + - _PBRNormalSelect: 1 + - _PBRSplitMaskSample: 0 + - _PBRSplitMaskStochastic: 0 + - _PPBrightness: 1 + - _PPContrast: 1 + - _PPEmissionMultiplier: 1 + - _PPFinalColorMultiplier: 1 + - _PPHDR: 0 + - _PPHelp: 0 + - _PPHue: 0 + - _PPHueShiftColorSpace: 0 + - _PPLightingAddition: 0 + - _PPLightingMultiplier: 1 + - _PPLightness: 0 + - _PPMaskChannel: 0 + - _PPMaskInvert: 0 + - _PPMaskUV: 0 + - _PPPosterization: 0 + - _PPPosterizationAmount: 4 + - _PPSaturation: 1 + - _PanoUseBothEyes: 1 + - _Parallax: 0.02 + - _ParallaxAnisotropic: 1 + - _ParallaxAnisotropyScale: 1 + - _ParallaxBinarySteps: 8 + - _ParallaxConeRatio: 1 + - _ParallaxInternalBlendMode: 0 + - _ParallaxInternalHeightFromAlpha: 0 + - _ParallaxInternalHeightmapMode: 0 + - _ParallaxInternalHueSelectOrShift: 1 + - _ParallaxInternalHueShift: 0 + - _ParallaxInternalHueShiftColorSpace: 0 + - _ParallaxInternalHueShiftEnabled: 0 + - _ParallaxInternalHueShiftPerLevel: 0 + - _ParallaxInternalHueShiftSpeed: 0 + - _ParallaxInternalIterations: 4 + - _ParallaxInternalMapMaskChannel: 0 + - _ParallaxInternalMapMaskUV: 0 + - _ParallaxInternalMaxColorThemeIndex: 0 + - _ParallaxInternalMaxDepth: 0.1 + - _ParallaxInternalMaxFade: 0.1 + - _ParallaxInternalMinColorThemeIndex: 0 + - _ParallaxInternalMinDepth: 0 + - _ParallaxInternalMinFade: 1 + - _ParallaxInternalSurfaceBlendMode: 8 + - _ParallaxMipBias: 0 + - _ParallaxRelaxedCone: 1 + - _ParallaxUV: 0 + - _PathALAutoCorrelator: 0 + - _PathALAutoCorrelatorA: 0 + - _PathALAutoCorrelatorB: 0 + - _PathALAutoCorrelatorG: 0 + - _PathALAutoCorrelatorMode: 0 + - _PathALAutoCorrelatorR: 0 + - _PathALCCA: 0 + - _PathALCCB: 0 + - _PathALCCG: 0 + - _PathALCCR: 0 + - _PathALChrono: 0 + - _PathALColorChord: 0 + - _PathALEmissionOffset: 0 + - _PathALHistory: 0 + - _PathALHistoryA: 0 + - _PathALHistoryB: 0 + - _PathALHistoryBandA: 0 + - _PathALHistoryBandB: 0 + - _PathALHistoryBandG: 0 + - _PathALHistoryBandR: 0 + - _PathALHistoryG: 0 + - _PathALHistoryMode: 0 + - _PathALHistoryR: 0 + - _PathALTimeOffset: 0 + - _PathALWidthOffset: 0 + - _PathChronoBandA: 0 + - _PathChronoBandB: 0 + - _PathChronoBandG: 0 + - _PathChronoBandR: 0 + - _PathChronoSpeedA: 0 + - _PathChronoSpeedB: 0 + - _PathChronoSpeedG: 0 + - _PathChronoSpeedR: 0 + - _PathChronoTypeA: 0 + - _PathChronoTypeB: 0 + - _PathChronoTypeG: 0 + - _PathChronoTypeR: 0 + - _PathColorAThemeIndex: 0 + - _PathColorBThemeIndex: 0 + - _PathColorGThemeIndex: 0 + - _PathColorRThemeIndex: 0 + - _PathGradientType: 0 + - _PathPointSampling: 1 + - _PathSource: 0 + - _PathSourceDirA: 0 + - _PathSourceDirB: 0 + - _PathSourceDirG: 0 + - _PathSourceDirR: 0 + - _PathSurfaceBlendMode: 0 + - _PathTypeA: 2 + - _PathTypeB: 2 + - _PathTypeG: 2 + - _PathTypeR: 2 + - _PathingColorMapUV: 0 + - _PathingMapUV: 0 + - _PathingOverrideAlpha: 0 + - _PathingUVSelect: 0 + - _PenetratorEnabled: 0 + - _PoiGSAAThreshold: 0.1 + - _PoiGSAAVariance: 0.15 + - _PoiInternalParallax: 0 + - _PoiParallax: 0 + - _PoiUTSStyleOutlineBlend: 0 + - _PolarLengthScale: 1 + - _PolarRadialScale: 1 + - _PolarSpiralPower: 0 + - _PolarUV: 0 + - _PostProcess: 0 + - _RGBAAlphaBlendType: 0 + - _RGBAAlphaEmissionStrength: 0 + - _RGBAAlphaEnable: 0 + - _RGBAAlphaMetallicInvert: 0 + - _RGBAAlphaPBRSplitMaskSample: 0 + - _RGBAAlphaPBRSplitMaskStochastic: 0 + - _RGBAAlphaPBRUV: 0 + - _RGBAAlphaSmoothnessInvert: 0 + - _RGBABlueBlendType: 0 + - _RGBABlueEmissionStrength: 0 + - _RGBABlueEnable: 0 + - _RGBABlueMetallicInvert: 0 + - _RGBABluePBRSplitMaskSample: 0 + - _RGBABluePBRSplitMaskStochastic: 0 + - _RGBABluePBRUV: 0 + - _RGBABlueSmoothnessInvert: 0 + - _RGBAGreenBlendType: 0 + - _RGBAGreenEmissionStrength: 0 + - _RGBAGreenEnable: 0 + - _RGBAGreenMetallicInvert: 0 + - _RGBAGreenPBRSplitMaskSample: 0 + - _RGBAGreenPBRSplitMaskStochastic: 0 + - _RGBAGreenPBRUV: 0 + - _RGBAGreenSmoothnessInvert: 0 + - _RGBAMetallicMapsStochastic: 0 + - _RGBAMetallicMapsUV: 0 + - _RGBAPBRAlphaEnabled: 0 + - _RGBAPBRBlueEnabled: 0 + - _RGBAPBRGreenEnabled: 0 + - _RGBAPBRRedEnabled: 0 + - _RGBARedBlendType: 0 + - _RGBARedEmissionStrength: 0 + - _RGBARedEnable: 0 + - _RGBARedMetallicInvert: 0 + - _RGBARedPBRSplitMaskSample: 0 + - _RGBARedPBRSplitMaskStochastic: 0 + - _RGBARedPBRUV: 0 + - _RGBARedSmoothnessInvert: 0 + - _RGBASmoothnessMapsStochastic: 0 + - _RGBASmoothnessMapsUV: 0 + - _RGBMaskEnabled: 0 + - _RGBMaskType: 0 + - _RGBMaskUV: 0 + - _RalivAdvancedHelp: 0 + - _RalivDPSDisableShadowCaster: 1 + - _RalivDPSDisableShadowCasterHelp: 0 + - _RalivHelp: 0 + - _ReCurvature: 0 + - _RedAlphaAdd: 0 + - _RedColorThemeIndex: 0 + - _RedTextureStochastic: 0 + - _RedTextureUV: 0 + - _RefSpecFresnelStrength: 0.5 + - _Reflectance: 0.04 + - _ReflectionAnisotropicStretch: 1 + - _ReflectionApplyTransparency: 1 + - _ReflectionBlendMode: 1 + - _ReflectionCubeEnableLighting: 1 + - _ReflectionCubeOverride: 0 + - _ReflectionNormalStrength: 1 + - _RenderingAOBlockerEnabled: 0 + - _RenderingAOBlockerFlipNormal: 0 + - _RenderingAOBlockerNote: 0 + - _RenderingAOBlockerUVChannel: 0 + - _RenderingEarlyZEnabled: 0 + - _RenderingReduceClipDistance: 0 + - _RgbAlphaGlobalMaskBlendType: 2 + - _RgbAlphaGlobalMaskChannel: 0 + - _RgbAlphaMaskChannel: 3 + - _RgbBlueGlobalMaskBlendType: 2 + - _RgbBlueGlobalMaskChannel: 0 + - _RgbBlueMaskChannel: 2 + - _RgbGreenGlobalMaskBlendType: 2 + - _RgbGreenGlobalMaskChannel: 0 + - _RgbGreenMaskChannel: 1 + - _RgbNormalAGlobalMaskBlendType: 2 + - _RgbNormalAGlobalMaskChannel: 0 + - _RgbNormalAMaskChannel: 3 + - _RgbNormalAScale: 0 + - _RgbNormalAStochastic: 0 + - _RgbNormalAUV: 0 + - _RgbNormalAlphaBlendMode: 0 + - _RgbNormalBGlobalMaskBlendType: 2 + - _RgbNormalBGlobalMaskChannel: 0 + - _RgbNormalBMaskChannel: 2 + - _RgbNormalBScale: 0 + - _RgbNormalBStochastic: 0 + - _RgbNormalBUV: 0 + - _RgbNormalBlueBlendMode: 0 + - _RgbNormalGGlobalMaskBlendType: 2 + - _RgbNormalGGlobalMaskChannel: 0 + - _RgbNormalGMaskChannel: 1 + - _RgbNormalGScale: 0 + - _RgbNormalGStochastic: 0 + - _RgbNormalGUV: 0 + - _RgbNormalGreenBlendMode: 0 + - _RgbNormalRGlobalMaskBlendType: 2 + - _RgbNormalRGlobalMaskChannel: 0 + - _RgbNormalRMaskChannel: 0 + - _RgbNormalRScale: 0 + - _RgbNormalRStochastic: 0 + - _RgbNormalRUV: 0 + - _RgbNormalRedBlendMode: 0 + - _RgbRedGlobalMaskBlendType: 2 + - _RgbRedGlobalMaskChannel: 0 + - _RgbRedMaskChannel: 0 + - _Rim2ApColorThemeIndex: 0 + - _Rim2ApplyAlpha: 0 + - _Rim2ApplyAlphaBlend: 1 + - _Rim2ApplyGlobalMaskBlendType: 2 + - _Rim2ApplyGlobalMaskIndex: 0 + - _Rim2BackfaceMask: 1 + - _Rim2BaseColorMix: 0 + - _Rim2BiasIntensity: 0 + - _Rim2BlendMode: 1 + - _Rim2BlendStrength: 1 + - _Rim2Blur: 0.65 + - _Rim2Border: 0.5 + - _Rim2Brightness: 1 + - _Rim2ColorTexUV: 0 + - _Rim2DirRange: 0 + - _Rim2DirStrength: 0 + - _Rim2EnableLighting: 1 + - _Rim2FresnelPower: 3.5 + - _Rim2GlobalMask: 0 + - _Rim2GlobalMaskBlendType: 2 + - _Rim2HueSelectOrShift: 1 + - _Rim2HueShift: 0 + - _Rim2HueShiftColorSpace: 0 + - _Rim2HueShiftEnabled: 0 + - _Rim2HueShiftSpeed: 0 + - _Rim2IndirBlur: 0.1 + - _Rim2IndirBorder: 0.5 + - _Rim2IndirRange: 0 + - _Rim2LightColorThemeIndex: 0 + - _Rim2Light_FeatherOff: 0 + - _Rim2Light_InsideMask: 0.0001 + - _Rim2Light_Power: 0.1 + - _Rim2LightingInvert: 0 + - _Rim2MainStrength: 0 + - _Rim2MaskChannel: 0 + - _Rim2MaskInvert: 0 + - _Rim2MaskOnlyMask: 0 + - _Rim2MaskUV: 0 + - _Rim2NormalStrength: 1 + - _Rim2Power: 1 + - _Rim2ShadowMask: 0.5 + - _Rim2ShadowMaskInvert: 0 + - _Rim2ShadowMaskRampType: 0 + - _Rim2ShadowMaskStrength: 1 + - _Rim2ShadowToggle: 0 + - _Rim2ShadowWidth: 0 + - _Rim2Sharpness: 0.25 + - _Rim2Strength: 0 + - _Rim2Style: 0 + - _Rim2TexUV: 0 + - _Rim2VRParallaxStrength: 1 + - _Rim2Width: 0.8 + - _RimApColorThemeIndex: 0 + - _RimApplyAlpha: 0 + - _RimApplyAlphaBlend: 1 + - _RimApplyGlobalMaskBlendType: 2 + - _RimApplyGlobalMaskIndex: 0 + - _RimBackfaceMask: 1 + - _RimBaseColorMix: 0 + - _RimBiasIntensity: 0 + - _RimBlendMode: 1 + - _RimBlendStrength: 1 + - _RimBlur: 0.65 + - _RimBorder: 0.5 + - _RimBrightness: 1 + - _RimColorTexUV: 0 + - _RimDirRange: 0 + - _RimDirStrength: 0 + - _RimEnableLighting: 1 + - _RimEnviroBlur: 0.7 + - _RimEnviroChannel: 0 + - _RimEnviroIntensity: 1 + - _RimEnviroMaskUV: 0 + - _RimEnviroMinBrightness: 0 + - _RimEnviroSharpness: 0 + - _RimEnviroWidth: 0.45 + - _RimFresnelPower: 3.5 + - _RimGlobalMask: 0 + - _RimGlobalMaskBlendType: 2 + - _RimHueSelectOrShift: 1 + - _RimHueShift: 0 + - _RimHueShiftColorSpace: 0 + - _RimHueShiftEnabled: 0 + - _RimHueShiftSpeed: 0 + - _RimIndirBlur: 0.1 + - _RimIndirBorder: 0.5 + - _RimIndirRange: 0 + - _RimLightColorThemeIndex: 0 + - _RimLight_FeatherOff: 0 + - _RimLight_InsideMask: 0.0001 + - _RimLight_Power: 0.1 + - _RimLightingInvert: 0 + - _RimMainStrength: 0 + - _RimMaskChannel: 0 + - _RimMaskInvert: 0 + - _RimMaskOnlyMask: 0 + - _RimMaskUV: 0 + - _RimNormalStrength: 1 + - _RimPoi2BlendMode: 0 + - _RimPoiBlendMode: 0 + - _RimPower: 1 + - _RimShadowMask: 0.5 + - _RimShadowMaskInvert: 0 + - _RimShadowMaskRampType: 0 + - _RimShadowMaskStrength: 1 + - _RimShadowToggle: 0 + - _RimShadowWidth: 0 + - _RimSharpness: 0.25 + - _RimStrength: 0 + - _RimStyle: 0 + - _RimTexUV: 0 + - _RimVRParallaxStrength: 1 + - _RimWidth: 0.8 + - _RoughnessAnisotropy: 1 + - _SDFBlur: 0.1 + - _SDFShadingTextureUV: 0 + - _SFExposureOcclusion: 0 + - _SSAOAlphaFade: 1 + - _SSAOAnimationToggle: 1 + - _SSAOApplyGlobalMaskBlendType: 0 + - _SSAOApplyGlobalMaskIndex: 0 + - _SSAOAsRamp: 0 + - _SSAOBias: 0.003 + - _SSAOBlendType: 2 + - _SSAOCenterImportance: 1 + - _SSAOColorMapUV: 0 + - _SSAOColorThemeIndex: 0 + - _SSAOCone: 0 + - _SSAODepthGetWarning: 0 + - _SSAOEnableColorTexture: 0 + - _SSAOEnableMaskTexture: 0 + - _SSAOEnabled: 0 + - _SSAOFalloffEnd: 8 + - _SSAOFalloffStart: 6 + - _SSAOGlobalMaskBlendType: 2 + - _SSAOGlobalMaskIndex: 0 + - _SSAOHideByRampedLightMap: 0 + - _SSAOIntensity: 1 + - _SSAOMaskChannel: 0 + - _SSAOMaskInvert: 0 + - _SSAOMaskUV: 0 + - _SSAOQuality: 2.4 + - _SSAORadius: 0.002 + - _SSAORandomScale: 0 + - _SSAOUseNormals: 0 + - _SSAOUseSurfaceColor: 0 + - _SSIgnoreCastedShadows: 0 + - _SSSBaseColorMix: 0 + - _SSSDistortion: 1 + - _SSSSpread: 5 + - _SSSStrength: 0.25 + - _SSSThicknessMapChannel: 0 + - _SSSThicknessMapUV: 0 + - _SSSThicknessMod: -1 + - _Saturation: 0 + - _ScrollingEmission: 0 + - _ScrollingEmission1: 0 + - _ScrollingEmission2: 0 + - _ScrollingEmission3: 0 + - _Set_HighColorMaskChannel: 1 + - _Set_HighColorMaskUV: 0 + - _Set_Rim2LightMaskChannel: 1 + - _Set_Rim2LightMaskUV: 0 + - _Set_RimLightMaskChannel: 1 + - _Set_RimLightMaskUV: 0 + - _ShadeColor_Step: 0 + - _ShaderOptimizerEnabled: 1 + - _ShaderUIWarning0: -0 + - _ShaderUIWarning1: -0 + - _ShadingEnabled: 1 + - _ShadingRampedLightMapApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapApplyGlobalMaskIndex: 0 + - _ShadingRampedLightMapInverseApplyGlobalMaskBlendType: 2 + - _ShadingRampedLightMapInverseApplyGlobalMaskIndex: 0 + - _ShadingShadeMapBlendType: 0 + - _Shadow2ndBlur: 0.3 + - _Shadow2ndBorder: 0.5 + - _Shadow2ndColorTexUV: 0 + - _Shadow2ndReceive: 0 + - _Shadow3rdBlur: 0.1 + - _Shadow3rdBorder: 0.25 + - _Shadow3rdColorTexUV: 0 + - _Shadow3rdReceive: 0 + - _ShadowBlur: 0.1 + - _ShadowBorder: 0.5 + - _ShadowBorderMapToggle: 0 + - _ShadowBorderMaskLOD: 0 + - _ShadowBorderMaskUV: 0 + - _ShadowBorderRange: 0 + - _ShadowColorTexUV: 0 + - _ShadowEnvStrength: 0 + - _ShadowFlatBlur: 1 + - _ShadowFlatBorder: 1 + - _ShadowMainStrength: 0 + - _ShadowMaskType: 0 + - _ShadowOffset: 0 + - _ShadowPostAO: 0 + - _ShadowReceive: 0 + - _ShadowStrength: 1 + - _ShadowStrengthMaskUV: 0 + - _Shape1Depth: 0.1 + - _Shape1Duration: 0.1 + - _Shape2Depth: 0.2 + - _Shape2Duration: 0.1 + - _Shape3Depth: 0.3 + - _Shape3Duration: 0.1 + - _SkinThicknessMapInvert: 0 + - _SkinThicknessMapUV: 0 + - _SkinThicknessPower: 1 + - _Smoothness: 1 + - _SmoothnessTextureChannel: 0 + - _Specular2ndLayer: 0 + - _SpecularBlur: 0 + - _SpecularBorder: 0.5 + - _SpecularHighlights: 1 + - _SpecularNormalStrength: 1 + - _SpecularToon: 1 + - _SphericalDissolveClamp: 0 + - _SphericalDissolveInvert: 0 + - _SphericalDissolveRadius: 1.5 + - _Squeeze: 0 + - _SqueezeDist: 0 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _SssBumpBlur: 0.7 + - _SssScale: 1 + - _StencilBackCompareFunction: 8 + - _StencilBackFailOp: 0 + - _StencilBackPassOp: 0 + - _StencilBackZFailOp: 0 + - _StencilCompareFunction: 8 + - _StencilFailOp: 0 + - _StencilFrontCompareFunction: 8 + - _StencilFrontFailOp: 0 + - _StencilFrontPassOp: 0 + - _StencilFrontZFailOp: 0 + - _StencilPassOp: 0 + - _StencilReadMask: 255 + - _StencilRef: 0 + - _StencilType: 0 + - _StencilWriteMask: 255 + - _StencilZFailOp: 0 + - _StereoEnabled: 0 + - _StochasticDeliotHeitzDensity: 1 + - _StochasticHexFallOffContrast: 0.6 + - _StochasticHexFallOffPower: 7 + - _StochasticHexGridDensity: 1 + - _StochasticHexRotationStrength: 0 + - _StochasticMode: 0 + - _StylizedReflectionMode: 0 + - _StylizedSpecular: 0 + - _StylizedSpecular2Feather: 0 + - _StylizedSpecularFeather: 0 + - _StylizedSpecularIgnoreNormal: 0 + - _StylizedSpecularIgnoreShadow: 0 + - _StylizedSpecularInvertMask: 0 + - _StylizedSpecularNormalStrength: 1 + - _StylizedSpecularStrength: 1 + - _SubsurfaceScattering: 0 + - _TPSHelpbox: 0 + - _TPSPenetratorEnabled: 0 + - _TPS_AnimatedToggle: 1 + - _TPS_BezierSmoothness: 0.4 + - _TPS_BezierStart: 0 + - _TPS_BufferedDepth: 0 + - _TPS_BufferedStrength: 0 + - _TPS_Buldge: 0.3 + - _TPS_BuldgeDistance: 0.2 + - _TPS_BuldgeFalloffDistance: 0.05 + - _TPS_Channel: 0 + - _TPS_ChannelWarning: 0 + - _TPS_IdleGravity: 0 + - _TPS_IdleSkrinkLength: 1 + - _TPS_IdleSkrinkWidth: 1 + - _TPS_IsSkinnedMeshRenderer: 0 + - _TPS_PenetratorLength: 1 + - _TPS_PumpingSpeed: 1 + - _TPS_PumpingStrength: 0 + - _TPS_PumpingWidth: 0.2 + - _TPS_SmoothStart: 1 + - _TPS_Squeeze: 0.3 + - _TPS_SqueezeDistance: 0.2 + - _TextEnabled: 0 + - _TextFPSColorThemeIndex: 0 + - _TextFPSEmissionStrength: 0 + - _TextFPSEnabled: 0 + - _TextFPSRotation: 0 + - _TextFPSUV: 0 + - _TextNumericColorThemeIndex: 0 + - _TextNumericDecimalDigits: 0 + - _TextNumericEmissionStrength: 0 + - _TextNumericEnabled: 0 + - _TextNumericRotation: 0 + - _TextNumericTrimZeroes: 0 + - _TextNumericUV: 0 + - _TextNumericValue: 0 + - _TextNumericWholeDigits: 4 + - _TextPixelRange: 4 + - _TextPositionColorThemeIndex: 0 + - _TextPositionEmissionStrength: 0 + - _TextPositionEnabled: 0 + - _TextPositionRotation: 0 + - _TextPositionUV: 0 + - _TextTimeColorThemeIndex: 0 + - _TextTimeEmissionStrength: 0 + - _TextTimeEnabled: 0 + - _TextTimeRotation: 0 + - _TextTimeUV: 0 + - _ToonRampCount: 1 + - _ToonRampUVSelector: 1 + - _TruchetALAlphaBand: 0 + - _TruchetALAlphaToggle: 0 + - _TruchetALEmissionBand: 0 + - _TruchetALEmissionToggle: 0 + - _TruchetAlpha: 1 + - _TruchetBlendType: 0 + - _TruchetChronoPanBand: 0 + - _TruchetChronoPanToggle: 0 + - _TruchetChronoPanType: 0 + - _TruchetColorThemeIndex: 0 + - _TruchetDensity: 10 + - _TruchetEdgeSharpness: 1 + - _TruchetEmissionStrength: 0 + - _TruchetHideWhenNoAL: 0 + - _TruchetMaskChannel: 0 + - _TruchetMaskGlobalMask: 0 + - _TruchetMaskGlobalMaskBlendType: 2 + - _TruchetMaskIntensity: 1 + - _TruchetMaskInvert: 0 + - _TruchetMaskUV: 0 + - _TruchetOverrideAlpha: 0 + - _TruchetThiccness: 0.1 + - _TruchetUV: 0 + - _Tweak_HighColorMaskLevel: 0 + - _Tweak_LightDirection_MaskLevel: 0 + - _Tweak_LightDirection_MaskLevel2: 0 + - _Tweak_Rim2LightMaskLevel: 0 + - _Tweak_RimLightMaskLevel: 0 + - _UDIMDiscardHelpbox: 0 + - _UDIMDiscardMode: 0 + - _UDIMDiscardRow0_0: 0 + - _UDIMDiscardRow0_1: 0 + - _UDIMDiscardRow0_2: 0 + - _UDIMDiscardRow0_3: 0 + - _UDIMDiscardRow1_0: 0 + - _UDIMDiscardRow1_1: 0 + - _UDIMDiscardRow1_2: 0 + - _UDIMDiscardRow1_3: 0 + - _UDIMDiscardRow2_0: 0 + - _UDIMDiscardRow2_1: 0 + - _UDIMDiscardRow2_2: 0 + - _UDIMDiscardRow2_3: 0 + - _UDIMDiscardRow3_0: 0 + - _UDIMDiscardRow3_1: 0 + - _UDIMDiscardRow3_2: 0 + - _UDIMDiscardRow3_3: 0 + - _UDIMDiscardUV: 0 + - _UDIMFaceDiscardFace: 0 + - _UDIMFaceDiscardRow0_0: 0 + - _UDIMFaceDiscardRow0_1: 0 + - _UDIMFaceDiscardRow0_2: 0 + - _UDIMFaceDiscardRow0_3: 0 + - _UDIMFaceDiscardRow1_0: 0 + - _UDIMFaceDiscardRow1_1: 0 + - _UDIMFaceDiscardRow1_2: 0 + - _UDIMFaceDiscardRow1_3: 0 + - _UDIMFaceDiscardRow2_0: 0 + - _UDIMFaceDiscardRow2_1: 0 + - _UDIMFaceDiscardRow2_2: 0 + - _UDIMFaceDiscardRow2_3: 0 + - _UDIMFaceDiscardRow3_0: 0 + - _UDIMFaceDiscardRow3_1: 0 + - _UDIMFaceDiscardRow3_2: 0 + - _UDIMFaceDiscardRow3_3: 0 + - _UDIMFaceDiscardUV: 0 + - _UVModLocalPos0: 0 + - _UVModLocalPos1: 1 + - _UVModWorldPos0: 0 + - _UVModWorldPos1: 2 + - _UVSec: 0 + - _UVTileDissolveAlpha_Row0_0: 0 + - _UVTileDissolveAlpha_Row0_1: 0 + - _UVTileDissolveAlpha_Row0_2: 0 + - _UVTileDissolveAlpha_Row0_3: 0 + - _UVTileDissolveAlpha_Row1_0: 0 + - _UVTileDissolveAlpha_Row1_1: 0 + - _UVTileDissolveAlpha_Row1_2: 0 + - _UVTileDissolveAlpha_Row1_3: 0 + - _UVTileDissolveAlpha_Row2_0: 0 + - _UVTileDissolveAlpha_Row2_1: 0 + - _UVTileDissolveAlpha_Row2_2: 0 + - _UVTileDissolveAlpha_Row2_3: 0 + - _UVTileDissolveAlpha_Row3_0: 0 + - _UVTileDissolveAlpha_Row3_1: 0 + - _UVTileDissolveAlpha_Row3_2: 0 + - _UVTileDissolveAlpha_Row3_3: 0 + - _UVTileDissolveDiscardAtMax: 1 + - _UVTileDissolveEnabled: 0 + - _UVTileDissolveUV: 0 + - _Unlit_Intensity: 1 + - _UseLightColor: 1 + - _UseReflection: 0 + - _Use_1stAs2nd: 0 + - _Use_1stShadeMapAlpha_As_ShadowMask: 0 + - _Use_2ndShadeMapAlpha_As_ShadowMask: 0 + - _Use_BaseAs1st: 0 + - _UzumoreAmount: 0.1 + - _UzumoreBias: 0.001 + - _UzumoreCategoryToggle: 0 + - _UzumoreEnabled: 1 + - _UzumoreMaskUV: 3 + - _VertexAudioLinkEnabled: 0 + - _VertexBarrelAlpha: 0 + - _VertexBarrelHeight: 0 + - _VertexBarrelMaskChannel: 0 + - _VertexBarrelMode: 0 + - _VertexBarrelWidth: 0.2 + - _VertexBasicsMaskChannel: 0 + - _VertexGlitchDensity: 10 + - _VertexGlitchFrequency: 1 + - _VertexGlitchMapPanSpeed: 10 + - _VertexGlitchMirror: 0 + - _VertexGlitchMirrorEnable: 0 + - _VertexGlitchStrength: 1 + - _VertexGlitchThreshold: 1 + - _VertexGlitchingAudioLinkBand: 0 + - _VertexGlitchingAudioLinkEnabled: 0 + - _VertexGlitchingAudiolinkOverride: 1 + - _VertexGlitchingEnabled: 0 + - _VertexGlitchingUseTexture: 0 + - _VertexLocalRotationALBandX: 0 + - _VertexLocalRotationALBandY: 0 + - _VertexLocalRotationALBandZ: 0 + - _VertexLocalRotationCTALBandX: 0 + - _VertexLocalRotationCTALBandY: 0 + - _VertexLocalRotationCTALBandZ: 0 + - _VertexLocalRotationCTALTypeX: 0 + - _VertexLocalRotationCTALTypeY: 0 + - _VertexLocalRotationCTALTypeZ: 0 + - _VertexLocalScaleALBand: 0 + - _VertexLocalTranslationALBand: 0 + - _VertexLookAtAudioLinkBand: 0 + - _VertexLookAtAudioLinkEnabled: 0 + - _VertexLookAtEnabled: 0 + - _VertexManipulationHeight: 0 + - _VertexManipulationHeightBand: 0 + - _VertexManipulationHeightBias: 0 + - _VertexManipulationHeightMapChannel: 0 + - _VertexManipulationHeightMaskChannel: 0 + - _VertexManipulationHeightMaskUV: 0 + - _VertexManipulationsEnabled: 0 + - _VertexRoundingDivision: 0.02 + - _VertexRoundingEnabled: 0 + - _VertexRoundingMaskChannel: 0 + - _VertexRoundingRangeBand: 0 + - _VertexRoundingSpace: 0 + - _VertexSpectrumMotion: 0 + - _VertexSpectrumUV: 0 + - _VertexSpectrumUVDirection: 0 + - _VertexSphereAlpha: 0 + - _VertexSphereHeight: 1 + - _VertexSphereMaskChannel: 0 + - _VertexSphereMode: 0 + - _VertexSphereRadius: 1 + - _VertexTornadoBaseHeight: 0 + - _VertexTornadoFunnelShape: 1 + - _VertexTornadoIntensity: 100 + - _VertexTornadoMaskChannel: 0 + - _VertexTornadoMode: 0 + - _VertexTornadoRadius: 1 + - _VertexTornadoSpeed: 5 + - _VertexTornadoTopHeight: 1 + - _VertexTornadoVerticalPull: 0 + - _VertexWindDetailAmplitude: 0.05 + - _VertexWindDetailFrequency: 5 + - _VertexWindDetailSpeed: 2.5 + - _VertexWindEnabled: 0 + - _VertexWindMaskChannel: 0 + - _VertexWindNoiseChannel: 0 + - _VertexWindNoiseScale: 10 + - _VertexWindNoiseSpeed: 0.5 + - _VertexWindNoiseStrength: 0.5 + - _VertexWindPrimaryAmplitude: 0.1 + - _VertexWindPrimaryFrequency: 1 + - _VertexWindPrimarySpeed: 1 + - _VertexWorldTranslationALBand: 0 + - _VideoBacklight: 1 + - _VideoCRTPixelEnergizedTime: 1.9 + - _VideoCRTRefreshRate: 24 + - _VideoContrast: 0 + - _VideoEffectsEnable: 0 + - _VideoEmissionEnabled: 1 + - _VideoMaskTextureChannel: 0 + - _VideoMaskTextureUV: 0 + - _VideoPixelTextureUV: 0 + - _VideoPixelateToResolution: 0 + - _VideoSaturation: 0 + - _VideoType: 3 + - _VisibilityMode: 1 + - _VisibilityVRCCameraDesktop: 1 + - _VisibilityVRCCameraScreenshot: 1 + - _VisibilityVRCCameraVR: 1 + - _VisibilityVRCMirrorDesktop: 1 + - _VisibilityVRCMirrorVR: 1 + - _VisibilityVRCRegular: 1 + - _VoronoiAffectsMaterialAlpha: 0 + - _VoronoiBlend: 0 + - _VoronoiEnableRandomCellColor: 0 + - _VoronoiEnabled: 0 + - _VoronoiGlobalMask: 0 + - _VoronoiGlobalMaskBlendType: 2 + - _VoronoiInnerEmissionStrength: 0 + - _VoronoiMaskChannel: 0 + - _VoronoiMaskUV: 0 + - _VoronoiNoiseChannel: 0 + - _VoronoiNoiseIntensity: 0.1 + - _VoronoiNoiseUV: 0 + - _VoronoiOuterEmissionStrength: 0 + - _VoronoiPower: 0.45454544 + - _VoronoiScale: 5 + - _VoronoiSpace: 0 + - _VoronoiType: 1 + - _Wriggle: 0 + - _WriggleSpeed: 0.28 + - _ZClip: 1 + - _ZTest: 4 + - _ZWrite: 1 + - _ppHueSelectOrShift: 1 + - footer_bluesky: 0 + - footer_discord: 0 + - footer_github: 0 + - footer_patreon: 0 + - footer_twitter: 0 + - footer_website: 0 + - footer_youtube: 0 + - g_end_tps_bezier: 0 + - g_end_tps_buldge: 0 + - g_end_tps_idle: 0 + - g_end_tps_pulsing: 0 + - g_end_tps_squeeze: 0 + - g_start_tps_bezier: 0 + - g_start_tps_buldge: 0 + - g_start_tps_idle: 0 + - g_start_tps_pulsing: 0 + - g_start_tps_squeeze: 0 + - m_AudioLinkCategory: 0 + - m_OutlineCategory: 0 + - m_end_ALDecalSpectrum: 0 + - m_end_ALVolumeColor: 0 + - m_end_Alpha: 0 + - m_end_Ansio: 0 + - m_end_BeatsaberBloomFog: 0 + - m_end_BeatsaberOptions: 0 + - m_end_BlackLightMasking: 0 + - m_end_BonusSliders: 0 + - m_end_CRT: 0 + - m_end_CenterOutDissolve: 0 + - m_end_ColorAdjust: 0 + - m_end_CubeMap: 0 + - m_end_Decal0: 0 + - m_end_Decal0AudioLink: 0 + - m_end_Decal1: 0 + - m_end_Decal1AudioLink: 0 + - m_end_Decal2: 0 + - m_end_Decal2AudioLink: 0 + - m_end_Decal3: 0 + - m_end_Decal3AudioLink: 0 + - m_end_DecalSection: 0 + - m_end_DepthBulge: 0 + - m_end_DetailOptions: 0 + - m_end_DistortionAudioLink: 0 + - m_end_FXProximityColor: 0 + - m_end_FlipbookAudioLink: 0 + - m_end_Gameboy: 0 + - m_end_GlobalMask: 0 + - m_end_GlobalMaskDistanceM_0: 0 + - m_end_GlobalMaskDistanceM_1: 0 + - m_end_GlobalMaskDistanceM_10: 0 + - m_end_GlobalMaskDistanceM_11: 0 + - m_end_GlobalMaskDistanceM_12: 0 + - m_end_GlobalMaskDistanceM_13: 0 + - m_end_GlobalMaskDistanceM_14: 0 + - m_end_GlobalMaskDistanceM_15: 0 + - m_end_GlobalMaskDistanceM_2: 0 + - m_end_GlobalMaskDistanceM_3: 0 + - m_end_GlobalMaskDistanceM_4: 0 + - m_end_GlobalMaskDistanceM_5: 0 + - m_end_GlobalMaskDistanceM_6: 0 + - m_end_GlobalMaskDistanceM_7: 0 + - m_end_GlobalMaskDistanceM_8: 0 + - m_end_GlobalMaskDistanceM_9: 0 + - m_end_GlobalMaskModifiers: 0 + - m_end_GlobalMaskModifiersBackface: 0 + - m_end_GlobalMaskModifiersCamera: 0 + - m_end_GlobalMaskModifiersDistance: 0 + - m_end_GlobalMaskModifiersMirror: 0 + - m_end_GlobalMaskOptions: 0 + - m_end_GlobalMaskTextures: 0 + - m_end_GlobalMaskVertexColors: 0 + - m_end_GlobalThemeColor0: 0 + - m_end_GlobalThemeColor1: 0 + - m_end_GlobalThemeColor2: 0 + - m_end_GlobalThemeColor3: 0 + - m_end_GlobalThemes: 0 + - m_end_LTCGI: 0 + - m_end_MainVertexColors: 0 + - m_end_Matcap2: 0 + - m_end_Matcap3: 0 + - m_end_Matcap4: 0 + - m_end_OutlineAudioLink: 0 + - m_end_OutlineStencil: 0 + - m_end_OutlineStencilPassBackOptions: 0 + - m_end_OutlineStencilPassFrontOptions: 0 + - m_end_PPAnimations: 0 + - m_end_PathAudioLink: 0 + - m_end_PoiGlobalCategory: 0 + - m_end_PoiLightData: 0 + - m_end_PoiPostProcessingCategory: 0 + - m_end_PoiShading: 0 + - m_end_PoiUVCategory: 0 + - m_end_RGBMask: 0 + - m_end_Rim2AudioLink: 0 + - m_end_RimAudioLink: 0 + - m_end_SphericalDissolve: 0 + - m_end_StencilPassBackOptions: 0 + - m_end_StencilPassFrontOptions: 0 + - m_end_StencilPassOptions: 0 + - m_end_Stochastic: 0 + - m_end_Text: 0 + - m_end_TextFPS: 0 + - m_end_TextInstanceTime: 0 + - m_end_TextNumeric: 0 + - m_end_TextPosition: 0 + - m_end_TruchetAudioLink: 0 + - m_end_UVTileDissolve: 0 + - m_end_Uzumore: 0 + - m_end_VideoSettings: 0 + - m_end_VoronoiAudioLink: 0 + - m_end_WorldAOBlocker: 0 + - m_end_alphaBlending: 0 + - m_end_audioLink: 0 + - m_end_audioLinkOverrides: 0 + - m_end_backFace: 0 + - m_end_backlight: 0 + - m_end_bakedLighting: 0 + - m_end_blending: 0 + - m_end_brdf: 0 + - m_end_clearCoat: 0 + - m_end_clearcoatadvanced: 0 + - m_end_clearcoatglobalmask: 0 + - m_end_depthFX: 0 + - m_end_depthRimLightOptions: 0 + - m_end_dissolve: 0 + - m_end_dissolveHueShift: 0 + - m_end_emission1Options: 0 + - m_end_emission2Options: 0 + - m_end_emission3Options: 0 + - m_end_emissionOptions: 0 + - m_end_flipBook: 0 + - m_end_glitter: 0 + - m_end_internalparallax: 0 + - m_end_matcap: 0 + - m_end_mirrorOptions: 0 + - m_end_normalCorrect: 0 + - m_end_outlineAlphaBlending: 0 + - m_end_outlineBlending: 0 + - m_end_parallax: 0 + - m_end_pathing: 0 + - m_end_pen_autoConfig: 0 + - m_end_poiSSAO: 0 + - m_end_pointToPoint: 0 + - m_end_postprocess: 0 + - m_end_raliv: 0 + - m_end_ralivAdvanced: 0 + - m_end_ralivOriface: 0 + - m_end_ralivPenetrator: 0 + - m_end_reflectionRim: 0 + - m_end_rim1LightOptions: 0 + - m_end_rim2LightOptions: 0 + - m_end_stylizedSpec: 0 + - m_end_subsurfaceScattering: 0 + - m_end_tps_penetrator: 0 + - m_end_truchet: 0 + - m_end_udimdiscardOptions: 0 + - m_end_udimfacediscardOptions: 0 + - m_end_uvDistortion: 0 + - m_end_uvLocalWorld: 0 + - m_end_uvPanosphere: 0 + - m_end_uvPolar: 0 + - m_end_vertexGlitching: 0 + - m_end_vertexLookAt: 0 + - m_end_vertexManipulation: 0 + - m_end_videoEffects: 0 + - m_end_voronoi: 0 + - m_end_voronoiRandom: 0 + - m_lightingCategory: 0 + - m_mainCategory: 0 + - m_modifierCategory: 0 + - m_renderingCategory: 0 + - m_specialFXCategory: 0 + - m_start_ALDecalSpectrum: 0 + - m_start_ALVolumeColor: 0 + - m_start_Alpha: 0 + - m_start_Aniso: 0 + - m_start_BeatsaberBloomFog: 0 + - m_start_BeatsaberOptions: 0 + - m_start_BlackLightMasking: 0 + - m_start_BonusSliders: 0 + - m_start_CRT: 0 + - m_start_CenterOutDissolve: 0 + - m_start_ColorAdjust: 0 + - m_start_CubeMap: 0 + - m_start_Decal0: 0 + - m_start_Decal0AudioLink: 0 + - m_start_Decal1: 0 + - m_start_Decal1AudioLink: 0 + - m_start_Decal2: 0 + - m_start_Decal2AudioLink: 0 + - m_start_Decal3: 0 + - m_start_Decal3AudioLink: 0 + - m_start_DecalSection: 0 + - m_start_DepthBulge: 0 + - m_start_DetailOptions: 0 + - m_start_DistortionAudioLink: 0 + - m_start_FXProximityColor: 0 + - m_start_FlipbookAudioLink: 0 + - m_start_Gameboy: 0 + - m_start_GlobalMask: 0 + - m_start_GlobalMaskDistanceM_0: 0 + - m_start_GlobalMaskDistanceM_1: 0 + - m_start_GlobalMaskDistanceM_10: 0 + - m_start_GlobalMaskDistanceM_11: 0 + - m_start_GlobalMaskDistanceM_12: 0 + - m_start_GlobalMaskDistanceM_13: 0 + - m_start_GlobalMaskDistanceM_14: 0 + - m_start_GlobalMaskDistanceM_15: 0 + - m_start_GlobalMaskDistanceM_2: 0 + - m_start_GlobalMaskDistanceM_3: 0 + - m_start_GlobalMaskDistanceM_4: 0 + - m_start_GlobalMaskDistanceM_5: 0 + - m_start_GlobalMaskDistanceM_6: 0 + - m_start_GlobalMaskDistanceM_7: 0 + - m_start_GlobalMaskDistanceM_8: 0 + - m_start_GlobalMaskDistanceM_9: 0 + - m_start_GlobalMaskModifiers: 0 + - m_start_GlobalMaskModifiersBackface: 0 + - m_start_GlobalMaskModifiersCamera: 0 + - m_start_GlobalMaskModifiersDistance: 0 + - m_start_GlobalMaskModifiersMirror: 0 + - m_start_GlobalMaskOptions: 0 + - m_start_GlobalMaskTextures: 0 + - m_start_GlobalMaskVertexColors: 0 + - m_start_GlobalThemeColor0: 0 + - m_start_GlobalThemeColor1: 0 + - m_start_GlobalThemeColor2: 0 + - m_start_GlobalThemeColor3: 0 + - m_start_GlobalThemes: 0 + - m_start_LTCGI: 0 + - m_start_MainVertexColors: 0 + - m_start_Matcap2: 0 + - m_start_Matcap3: 0 + - m_start_Matcap4: 0 + - m_start_OutlineAudioLink: 0 + - m_start_OutlineStencil: 0 + - m_start_OutlineStencilPassBackOptions: 0 + - m_start_OutlineStencilPassFrontOptions: 0 + - m_start_PPAnimations: 0 + - m_start_PathAudioLink: 0 + - m_start_PoiGlobalCategory: 0 + - m_start_PoiLightData: 0 + - m_start_PoiPostProcessingCategory: 0 + - m_start_PoiShading: 1 + - m_start_PoiUVCategory: 0 + - m_start_RGBMask: 0 + - m_start_Rim2AudioLink: 0 + - m_start_RimAudioLink: 0 + - m_start_SphericalDissolve: 0 + - m_start_StencilPassBackOptions: 0 + - m_start_StencilPassFrontOptions: 0 + - m_start_StencilPassOptions: 0 + - m_start_Stochastic: 0 + - m_start_Text: 0 + - m_start_TextFPS: 0 + - m_start_TextInstanceTime: 0 + - m_start_TextNumeric: 0 + - m_start_TextPosition: 0 + - m_start_TruchetAudioLink: 0 + - m_start_UVTileDissolve: 0 + - m_start_Uzumore: 0 + - m_start_VideoSettings: 0 + - m_start_VoronoiAudioLink: 0 + - m_start_WorldAOBlocker: 0 + - m_start_alphaBlending: 0 + - m_start_audioLink: 0 + - m_start_audioLinkOverrides: 0 + - m_start_backFace: 0 + - m_start_backlight: 0 + - m_start_bakedLighting: 0 + - m_start_blending: 0 + - m_start_brdf: 1 + - m_start_clearCoat: 0 + - m_start_clearcoatadvanced: 0 + - m_start_clearcoatglobalmask: 0 + - m_start_depthFX: 0 + - m_start_depthRimLightOptions: 0 + - m_start_dissolve: 0 + - m_start_dissolveHueShift: 0 + - m_start_emission1Options: 0 + - m_start_emission2Options: 0 + - m_start_emission3Options: 0 + - m_start_emissionOptions: 0 + - m_start_flipBook: 0 + - m_start_glitter: 0 + - m_start_internalparallax: 0 + - m_start_matcap: 0 + - m_start_mirrorOptions: 0 + - m_start_normalCorrect: 0 + - m_start_outlineAlphaBlending: 0 + - m_start_outlineBlending: 0 + - m_start_parallax: 0 + - m_start_pathing: 0 + - m_start_pen_autoConfig: 0 + - m_start_poiSSAO: 0 + - m_start_pointToPoint: 0 + - m_start_postprocess: 0 + - m_start_raliv: 0 + - m_start_ralivAdvanced: 0 + - m_start_ralivOriface: 0 + - m_start_ralivPenetrator: 0 + - m_start_reflectionRim: 0 + - m_start_rim2LightOptions: 0 + - m_start_rimLight1Options: 0 + - m_start_stylizedSpec: 0 + - m_start_subsurfaceScattering: 0 + - m_start_tps_penetrator: 0 + - m_start_truchet: 0 + - m_start_udimdiscardOptions: 0 + - m_start_udimfacediscardOptions: 0 + - m_start_uvDistortion: 0 + - m_start_uvLocalWorld: 0 + - m_start_uvPanosphere: 0 + - m_start_uvPolar: 0 + - m_start_vertexGlitching: 0 + - m_start_vertexLookAt: 0 + - m_start_vertexManipulation: 0 + - m_start_videoEffects: 0 + - m_start_voronoi: 0 + - m_start_voronoiRandom: 0 + - m_thirdpartyCategory: 0 + - m_vertexCategory: 0 + - s_end_ALAlpha: 0 + - s_end_ALDecalAudioModsOptions: 0 + - s_end_ALDecalBand: 0 + - s_end_ALDecalColorsBlendingOptions: 0 + - s_end_ALDecalShapeClipOptions: 0 + - s_end_ALDecalVolumeOptions: 0 + - s_end_ALSpectrumMotion: 0 + - s_end_ALVertexGlitching: 0 + - s_end_ALVertexHeight: 0 + - s_end_ALVertexLookAtAL: 0 + - s_end_AlphaAdvanced: 0 + - s_end_AlphaAngular: 0 + - s_end_AlphaDistanceFade: 0 + - s_end_AlphaDithering: 0 + - s_end_AlphaFresnel: 0 + - s_end_AlphaToCoverage: 0 + - s_end_AnisoBottomLayer: 0 + - s_end_AnisoTopLayer: 1 + - s_end_AudioLinkBandOverrides: 0 + - s_end_BRDFTPSMaskGroup: 0 + - s_end_BackFaceHueShift: 0 + - s_end_BackfaceMods: 0 + - s_end_CCopt: 1 + - s_end_ClearCoatTPSMaskGroup: 0 + - s_end_ColorAdjustColorGrading: 0 + - s_end_ContinuousRotation: 0 + - s_end_CubeMapColorAdjust: 0 + - s_end_CubeMapMasking: 0 + - s_end_Decal0ChannelSeparation: 0 + - s_end_Decal0GlobalMasking: 0 + - s_end_Decal0HueShift: 0 + - s_end_Decal0Video: 0 + - s_end_Decal1ChannelSeparation: 0 + - s_end_Decal1GlobalMasking: 0 + - s_end_Decal1HueShift: 0 + - s_end_Decal1Video: 0 + - s_end_Decal2ChannelSeparation: 0 + - s_end_Decal2GlobalMasking: 0 + - s_end_Decal2HueShift: 0 + - s_end_Decal2Video: 0 + - s_end_Decal3ChannelSeparation: 0 + - s_end_Decal3GlobalMasking: 0 + - s_end_Decal3HueShift: 0 + - s_end_Decal3Video: 0 + - s_end_DecalTPSMaskGroup: 0 + - s_end_DepthAlpha: 0 + - s_end_DepthFXColorEmission: 0 + - s_end_DetailNormal: 0 + - s_end_DetailTexture: 0 + - s_end_DissolveAudioLink: 0 + - s_end_DissolvedMenu: 0 + - s_end_EdgeMenu: 0 + - s_end_EmissionAL0Add: 0 + - s_end_EmissionAL0COut: 0 + - s_end_EmissionAL0Multiply: 0 + - s_end_EmissionAL1Add: 0 + - s_end_EmissionAL1COut: 0 + - s_end_EmissionAL1Multiply: 0 + - s_end_EmissionAL2Add: 0 + - s_end_EmissionAL2COut: 0 + - s_end_EmissionAL2Multiply: 0 + - s_end_EmissionAL3Add: 0 + - s_end_EmissionAL3COut: 0 + - s_end_EmissionAL3Multiply: 0 + - s_end_EmissionBlinking0: 0 + - s_end_EmissionBlinking1: 0 + - s_end_EmissionBlinking2: 0 + - s_end_EmissionBlinking3: 0 + - s_end_EmissionCenterOut0: 0 + - s_end_EmissionCenterOut1: 0 + - s_end_EmissionCenterOut2: 0 + - s_end_EmissionCenterOut3: 0 + - s_end_EmissionHueShift0: 0 + - s_end_EmissionHueShift1: 0 + - s_end_EmissionHueShift2: 0 + - s_end_EmissionHueShift3: 0 + - s_end_EmissionLightBased0: 0 + - s_end_EmissionLightBased1: 0 + - s_end_EmissionLightBased2: 0 + - s_end_EmissionLightBased3: 0 + - s_end_FixedRimBlending: 0 + - s_end_FixedRimColor: 0 + - s_end_FixedRimShapeControl: 0 + - s_end_FlipbookCrossfade: 0 + - s_end_FlipbookHueShift: 0 + - s_end_FlipbookManualFrameControl: 0 + - s_end_FlipbookStartAndEnd: 0 + - s_end_GlitterAudioLink: 0 + - s_end_GlitterColorAndShape: 0 + - s_end_GlitterHueShiftSection: 0 + - s_end_GlitterMask: 0 + - s_end_GlitterPositionSize: 0 + - s_end_GlitterRotationSection: 0 + - s_end_GlitterSparkleControl: 0 + - s_end_GlobalMaskOptionsForceToggles: 0 + - s_end_GlobalMaskOptionsMinMaxSliders: 0 + - s_end_GlobalMaskOptionsSliders: 0 + - s_end_LightDataAddPass: 1 + - s_end_LightDataBasePass: 1 + - s_end_LightDataDebug: 0 + - s_end_LightDataSDF: 1 + - s_end_LocalRotation: 0 + - s_end_LocalTranslation: 0 + - s_end_LookAtAlphaMask: 0 + - s_end_LookAtBlueMask: 0 + - s_end_LookAtGreenMask: 0 + - s_end_LookAtRedMask: 0 + - s_end_LookAtVisibility: 0 + - s_end_MainHueShift: 0 + - s_end_MainHueShiftAL: 0 + - s_end_MainHueShiftGlobalMask: 0 + - s_end_MaskingMenu: 0 + - s_end_Matcap0AudioLink: 0 + - s_end_Matcap0Blending: 0 + - s_end_Matcap0Masking: 0 + - s_end_Matcap1AudioLink: 0 + - s_end_Matcap1Blending: 0 + - s_end_Matcap1HueShift: 0 + - s_end_Matcap1Masking: 0 + - s_end_Matcap1Normal: 0 + - s_end_Matcap1Smoothness: 0 + - s_end_Matcap2AudioLink: 0 + - s_end_Matcap2Blending: 0 + - s_end_Matcap2HueShift: 0 + - s_end_Matcap2Masking: 0 + - s_end_Matcap2Normal: 0 + - s_end_Matcap2Smoothness: 0 + - s_end_Matcap2TPSMaskGroup: 0 + - s_end_Matcap3AudioLink: 0 + - s_end_Matcap3Blending: 0 + - s_end_Matcap3HueShift: 0 + - s_end_Matcap3Masking: 0 + - s_end_Matcap3Normal: 0 + - s_end_Matcap3Smoothness: 0 + - s_end_Matcap3TPSMaskGroup: 0 + - s_end_Matcap4TPSMaskGroup: 0 + - s_end_MatcapHueShift: 0 + - s_end_MatcapNormal: 0 + - s_end_MatcapSmoothness: 0 + - s_end_MatcapTPSMaskGroup: 0 + - s_end_MirrorTexture: 0 + - s_end_MultilayerMath1stLayer: 1 + - s_end_MultilayerMath2ndLayer: 0 + - s_end_MultilayerMath3rdLayer: 0 + - s_end_MultilayerMathBorder: 1 + - s_end_MultilayerMathBorderMap: 1 + - s_end_MultilayerShadowMap: 0 + - s_end_OutlineAlphaDistanceFade: 0 + - s_end_OutlineColorAdjust: 0 + - s_end_OutlineFixedSize: 0 + - s_end_OutlineLighting: 0 + - s_end_OutlineRenderingOptions: 0 + - s_end_OutlineZOffset: 0 + - s_end_PBRSecondSpecular: 0 + - s_end_PBRSplitMaskSample: 0 + - s_end_ParallaxInternalHueShift: 0 + - s_end_ParallaxInternalLayerColoring: 0 + - s_end_ParallaxInternalLayerControls: 0 + - s_end_PathAppearance: 0 + - s_end_PathColors: 0 + - s_end_PathRemapping: 0 + - s_end_PathSourceDirections: 0 + - s_end_PathTypes: 0 + - s_end_Positioning: 0 + - s_end_RGBAlpha: 0 + - s_end_RGBBlue: 0 + - s_end_RGBGreen: 0 + - s_end_RGBRed: 0 + - s_end_RimLight0Color: 0 + - s_end_RimLight0GlobalMasking: 0 + - s_end_RimLight0HueShift: 0 + - s_end_RimLight0LightDirMask: 0 + - s_end_RimLight0ShapeControls: 0 + - s_end_RimLight1Color: 0 + - s_end_RimLight1GlobalMasking: 0 + - s_end_RimLight1HueShift: 0 + - s_end_RimLight1LightDirMask: 0 + - s_end_RimLight1ShapeControls: 0 + - s_end_RimLight2DirectionMask: 0 + - s_end_RimLightDirectionMask: 0 + - s_end_SSAOAdvanced: 0 + - s_end_SSAOColorAndMasking: 0 + - s_end_ScrollingEmission0: 0 + - s_end_ScrollingEmission1: 0 + - s_end_ScrollingEmission2: 0 + - s_end_ScrollingEmission3: 0 + - s_end_ShadingAddPass: 0 + - s_end_ShadingGlobalMask: 0 + - s_end_StylizedReflectionLilEnviroReflections: 1 + - s_end_StylizedReflectionLilSpecular: 1 + - s_end_StylizedReflectionMode0: 1 + - s_end_StylizedReflectionMode1: 1 + - s_end_StylizedSpecularAdvanced: 0 + - s_end_StylizedSpecularLayer0: 0 + - s_end_StylizedSpecularLayer1: 0 + - s_end_TimingOptions: 0 + - s_end_TransitionMenu: 0 + - s_end_UVTileDissolveRow0: 0 + - s_end_UVTileDissolveRow1: 0 + - s_end_UVTileDissolveRow2: 0 + - s_end_UVTileDissolveRow3: 0 + - s_end_VertAL: 0 + - s_end_VertexBarrelMode: 0 + - s_end_VertexColors: 0 + - s_end_VertexGlitchMirror: 0 + - s_end_VertexGlitchTexture: 0 + - s_end_VertexManipulationHeight: 0 + - s_end_VertexRoundingAL: 0 + - s_end_VertexScale: 0 + - s_end_VertexSphereMode: 0 + - s_end_VertexTornadoMode: 0 + - s_end_VertexWind: 0 + - s_end_WorldTranslation: 0 + - s_end_brdfadvanced: 0 + - s_end_decal1_position: 0 + - s_end_decal2_position: 0 + - s_end_decal3_position: 0 + - s_end_decal_position: 0 + - s_end_deliot: 0 + - s_end_fogOpt: 1 + - s_end_ggxanisotropics: 0 + - s_end_heightFogOpt: 1 + - s_end_hextile: 0 + - s_end_liltoon_rim2_lightdir: 0 + - s_end_liltoon_rim_lightdir: 0 + - s_end_matcap1ApplyToAlpha: 0 + - s_end_matcap2ApplyToAlpha: 0 + - s_end_matcap3ApplyToAlpha: 0 + - s_end_matcapApplyToAlpha: 0 + - s_end_outline_al_color: 0 + - s_end_parallaxAdvanced: 0 + - s_end_vertexRounding: 0 + - s_start_ALAlpha: 0 + - s_start_ALDecalAudioModsOptions: 1 + - s_start_ALDecalBandOptions: 1 + - s_start_ALDecalColorsBlendingOptions: 1 + - s_start_ALDecalShapeClipOptions: 1 + - s_start_ALDecalVolumeOptions: 1 + - s_start_ALSpectrumMotion: 0 + - s_start_ALVertexGlitching: 0 + - s_start_ALVertexHeight: 0 + - s_start_ALVertexLookAtAL: 0 + - s_start_AlphaAdvanced: 0 + - s_start_AlphaAngular: 0 + - s_start_AlphaDistanceFade: 0 + - s_start_AlphaDithering: 0 + - s_start_AlphaFresnel: 0 + - s_start_AlphaToCoverage: 0 + - s_start_AnisoBottomLayer: 0 + - s_start_AnisoTopLayer: 1 + - s_start_AudioLinkBandOverrides: 1 + - s_start_BRDFTPSMaskGroup: 0 + - s_start_BackFaceHueShift: 0 + - s_start_BackfaceMods: 0 + - s_start_CCopt: 1 + - s_start_ClearCoatTPSMaskGroup: 0 + - s_start_ColorAdjustColorGrading: 0 + - s_start_ContinuousRotation: 0 + - s_start_CubeMapColorAdjust: 0 + - s_start_CubeMapMasking: 1 + - s_start_Decal0ChannelSeparation: 0 + - s_start_Decal0GlobalMasking: 0 + - s_start_Decal0HueShift: 0 + - s_start_Decal0Video: 0 + - s_start_Decal1ChannelSeparation: 0 + - s_start_Decal1GlobalMasking: 0 + - s_start_Decal1HueShift: 0 + - s_start_Decal1Video: 0 + - s_start_Decal2ChannelSeparation: 0 + - s_start_Decal2GlobalMasking: 0 + - s_start_Decal2HueShift: 0 + - s_start_Decal2Video: 0 + - s_start_Decal3ChannelSeparation: 0 + - s_start_Decal3GlobalMasking: 0 + - s_start_Decal3HueShift: 0 + - s_start_Decal3Video: 0 + - s_start_DecalTPSMaskGroup: 0 + - s_start_DepthAlpha: 0 + - s_start_DepthFXColorEmission: 0 + - s_start_DetailNormal: 0 + - s_start_DetailTexture: 0 + - s_start_DissolveAudioLink: 0 + - s_start_DissolvedMenu: 0 + - s_start_EdgeMenu: 0 + - s_start_EmissionAL0Add: 0 + - s_start_EmissionAL0COut: 0 + - s_start_EmissionAL0Multiply: 0 + - s_start_EmissionAL1Add: 0 + - s_start_EmissionAL1COut: 0 + - s_start_EmissionAL1Multiply: 0 + - s_start_EmissionAL2Add: 0 + - s_start_EmissionAL2COut: 0 + - s_start_EmissionAL2Multiply: 0 + - s_start_EmissionAL3Add: 0 + - s_start_EmissionAL3COut: 0 + - s_start_EmissionAL3Multiply: 0 + - s_start_EmissionBlinking0: 0 + - s_start_EmissionBlinking1: 0 + - s_start_EmissionBlinking2: 0 + - s_start_EmissionBlinking3: 0 + - s_start_EmissionCenterOut0: 0 + - s_start_EmissionCenterOut1: 0 + - s_start_EmissionCenterOut2: 0 + - s_start_EmissionCenterOut3: 0 + - s_start_EmissionHueShift0: 0 + - s_start_EmissionHueShift1: 0 + - s_start_EmissionHueShift2: 0 + - s_start_EmissionHueShift3: 0 + - s_start_EmissionLightBased0: 0 + - s_start_EmissionLightBased1: 0 + - s_start_EmissionLightBased2: 0 + - s_start_EmissionLightBased3: 0 + - s_start_FixedRimBlending: 1 + - s_start_FixedRimColor: 1 + - s_start_FixedRimShapeControl: 1 + - s_start_FlipbookCrossfade: 0 + - s_start_FlipbookHueShift: 0 + - s_start_FlipbookManualFrameControl: 0 + - s_start_FlipbookStartAndEnd: 0 + - s_start_GlitterAudioLink: 0 + - s_start_GlitterColorAndShape: 1 + - s_start_GlitterHueShiftSection: 0 + - s_start_GlitterMask: 0 + - s_start_GlitterPositionSize: 0 + - s_start_GlitterRotationSection: 0 + - s_start_GlitterSparkleControl: 1 + - s_start_GlobalMaskOptionsForceToggles: 0 + - s_start_GlobalMaskOptionsMinMaxSliders: 0 + - s_start_GlobalMaskOptionsSliders: 0 + - s_start_LightDataAddPass: 1 + - s_start_LightDataBasePass: 1 + - s_start_LightDataDebug: 0 + - s_start_LightDataSDF: 1 + - s_start_LocalRotation: 0 + - s_start_LocalTranslation: 0 + - s_start_LookAtAlphaMask: 0 + - s_start_LookAtBlueMask: 0 + - s_start_LookAtGreenMask: 0 + - s_start_LookAtRedMask: 1 + - s_start_LookAtVisibility: 0 + - s_start_MainHueShift: 1 + - s_start_MainHueShiftAL: 0 + - s_start_MainHueShiftGlobalMask: 0 + - s_start_MaskingMenu: 0 + - s_start_Matcap0AudioLink: 0 + - s_start_Matcap0Blending: 1 + - s_start_Matcap0Masking: 1 + - s_start_Matcap1AudioLink: 0 + - s_start_Matcap1Blending: 1 + - s_start_Matcap1HueShift: 0 + - s_start_Matcap1Masking: 1 + - s_start_Matcap1Normal: 0 + - s_start_Matcap1Smoothness: 0 + - s_start_Matcap2AudioLink: 0 + - s_start_Matcap2Blending: 1 + - s_start_Matcap2HueShift: 0 + - s_start_Matcap2Masking: 1 + - s_start_Matcap2Normal: 0 + - s_start_Matcap2Smoothness: 0 + - s_start_Matcap2TPSMaskGroup: 0 + - s_start_Matcap3AudioLink: 0 + - s_start_Matcap3Blending: 1 + - s_start_Matcap3HueShift: 0 + - s_start_Matcap3Masking: 1 + - s_start_Matcap3Normal: 0 + - s_start_Matcap3Smoothness: 0 + - s_start_Matcap3TPSMaskGroup: 0 + - s_start_Matcap4TPSMaskGroup: 0 + - s_start_MatcapHueShift: 0 + - s_start_MatcapNormal: 0 + - s_start_MatcapSmoothness: 0 + - s_start_MatcapTPSMaskGroup: 0 + - s_start_MirrorTexture: 1 + - s_start_MultilayerMath1stLayer: 1 + - s_start_MultilayerMath2ndLayer: 0 + - s_start_MultilayerMath3rdLayer: 0 + - s_start_MultilayerMathBorder: 1 + - s_start_MultilayerMathBorderMap: 0 + - s_start_MultilayerShadowMap: 0 + - s_start_OutlineAlphaDistanceFade: 0 + - s_start_OutlineColorAdjust: 0 + - s_start_OutlineFixedSize: 0 + - s_start_OutlineLighting: 0 + - s_start_OutlineRenderingOptions: 0 + - s_start_OutlineZOffset: 0 + - s_start_PBRSecondSpecular: 0 + - s_start_PBRSplitMaskSample: 0 + - s_start_ParallaxInternalHueShift: 0 + - s_start_ParallaxInternalLayerColoring: 1 + - s_start_ParallaxInternalLayerControls: 1 + - s_start_PathAppearance: 1 + - s_start_PathColors: 1 + - s_start_PathRemapping: 1 + - s_start_PathSourceDirections: 1 + - s_start_PathTypes: 1 + - s_start_Positioning: 1 + - s_start_RGBAlpha: 0 + - s_start_RGBBlue: 0 + - s_start_RGBGreen: 0 + - s_start_RGBRed: 0 + - s_start_RimLight0Color: 1 + - s_start_RimLight0GlobalMasking: 0 + - s_start_RimLight0HueShift: 0 + - s_start_RimLight0LightDirMask: 0 + - s_start_RimLight0ShapeControls: 1 + - s_start_RimLight1Color: 1 + - s_start_RimLight1GlobalMasking: 0 + - s_start_RimLight1HueShift: 0 + - s_start_RimLight1LightDirMask: 0 + - s_start_RimLight1ShapeControls: 1 + - s_start_RimLight2DirectionMask: 0 + - s_start_RimLightDirectionMask: 0 + - s_start_SSAOAdvanced: 0 + - s_start_SSAOColorAndMasking: 1 + - s_start_ScrollingEmission0: 0 + - s_start_ScrollingEmission1: 0 + - s_start_ScrollingEmission2: 0 + - s_start_ScrollingEmission3: 0 + - s_start_ShadingAddPass: 0 + - s_start_ShadingGlobalMask: 0 + - s_start_StylizedReflectionLilEnviroReflections: 1 + - s_start_StylizedReflectionLilSpecular: 1 + - s_start_StylizedReflectionMode0: 1 + - s_start_StylizedReflectionMode1: 1 + - s_start_StylizedSpecularAdvanced: 0 + - s_start_StylizedSpecularLayer0: 1 + - s_start_StylizedSpecularLayer1: 1 + - s_start_TimingOptions: 1 + - s_start_TransitionMenu: 0 + - s_start_UVTileDissolveRow0: 0 + - s_start_UVTileDissolveRow1: 0 + - s_start_UVTileDissolveRow2: 0 + - s_start_UVTileDissolveRow3: 0 + - s_start_VertAL: 0 + - s_start_VertexBarrelMode: 0 + - s_start_VertexColors: 0 + - s_start_VertexGlitchMirror: 0 + - s_start_VertexGlitchTexture: 1 + - s_start_VertexManipulationHeight: 1 + - s_start_VertexScale: 0 + - s_start_VertexSphereMode: 0 + - s_start_VertexTornadoMode: 0 + - s_start_VertexWind: 0 + - s_start_WorldTranslation: 0 + - s_start_brdfadvanced: 0 + - s_start_decal1_position: 1 + - s_start_decal2_position: 1 + - s_start_decal3_position: 1 + - s_start_decal_position: 1 + - s_start_deliot: 0 + - s_start_fogOpt: 1 + - s_start_ggxanisotropics: 0 + - s_start_heightFogOpt: 1 + - s_start_hextile: 0 + - s_start_liltoon_rim2_lightdir: 0 + - s_start_liltoon_rim_lightdir: 0 + - s_start_matcap1ApplyToAlpha: 0 + - s_start_matcap2ApplyToAlpha: 0 + - s_start_matcap3ApplyToAlpha: 0 + - s_start_matcapApplyToAlpha: 0 + - s_start_outline_al_color: 0 + - s_start_parallaxAdvanced: 0 + - s_start_vertexRounding: 0 + - s_start_vertexRoundingAL: 0 + - shader_is_using_thry_editor: 0 + - shader_locale: 0 + - shader_master_label: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _1st_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeMapPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ALDecalVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALDecalVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALDecalVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _ALDecaldCircleDimensions: {r: 0, g: 1, b: 0, a: 1} + - _ALUVPosition: {r: 0.5, g: 0.5, b: 1, a: 1} + - _ALUVScale: {r: 1, g: 1, b: 1, a: 1} + - _ALVolumeColorHigh: {r: 1, g: 0, b: 0, a: 1} + - _ALVolumeColorLow: {r: 0, g: 0, b: 1, a: 1} + - _ALVolumeColorMid: {r: 0, g: 1, b: 0, a: 1} + - _AlphaAudioLinkAddRange: {r: 0, g: 0, b: 0, a: 1} + - _AlphaColor: {r: 1, g: 1, b: 1, a: 1} + - _AlphaMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _AlphaTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _AngleForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _Aniso0Tint: {r: 1, g: 1, b: 1, a: 1} + - _Aniso1Tint: {r: 1, g: 1, b: 1, a: 1} + - _AnisoColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _AnisotropyMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Ap_Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Ap_RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkBandOverrideSliders: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal0SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal1SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal2SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Alpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3ChannelSeparation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Emission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Rotation: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3Scale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMax: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDecal3SideMin: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkDissolveDetail: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission0CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission1CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission2CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkEmission3CenterOut: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookAlpha: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookFrame: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkFlipbookScale: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _AudioLinkOutlineColorMod: {r: 0, g: 1, b: 0, a: 0} + - _AudioLinkOutlineEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkOutlineSize: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkPathEmissionAddA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathEmissionAddR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathTimeOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetA: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetB: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetG: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkPathWidthOffsetR: {r: 0, g: 0, b: 0, a: 1} + - _AudioLinkRim2BrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2EmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRim2WidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkRimWidthAdd: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiInnerEmission: {r: 0, g: 0, b: 0, a: 0} + - _AudioLinkVoronoiOuterEmission: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceColor: {r: 1, g: 1, b: 1, a: 1} + - _BackFaceMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _BackFaceTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BacklightColor: {r: 0.85, g: 0.8, b: 0.7, a: 1} + - _BacklightColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _BlackLightMasking0Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking1Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking2Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlackLightMasking3Range: {r: 0.1, g: 0.5, b: 0, a: 0} + - _BlueColor: {r: 1, g: 1, b: 1, a: 1} + - _BlueTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _BumpMapPan: {r: 0, g: 0, b: 0, a: 0} + - _CenterOutDissolveDirection: {r: 0, g: 0, b: 1, a: 0} + - _ClearCoatMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _ClearCoatReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _ClearCoatSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _ClothMetallicSmoothnessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapColor: {r: 1, g: 1, b: 1, a: 1} + - _CubeMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotation: {r: 0, g: 0, b: 0, a: 0} + - _CubeMapRotationPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalColor: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor1: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor2: {r: 1, g: 1, b: 1, a: 1} + - _DecalColor3: {r: 1, g: 1, b: 1, a: 1} + - _DecalMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DecalPosition: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition1: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition2: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalPosition3: {r: 0.5, g: 0.5, b: 0, a: 0} + - _DecalScale: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale1: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale2: {r: 1, g: 1, b: 1, a: 0} + - _DecalScale3: {r: 1, g: 1, b: 1, a: 0} + - _DecalSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset1: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset2: {r: 0, g: 0, b: 0, a: 0} + - _DecalSideOffset3: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _DecalTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DepthColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DepthRimColor: {r: 1, g: 1, b: 1, a: 1} + - _DepthTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DetailMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailNormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTexPan: {r: 0, g: 0, b: 0, a: 0} + - _DetailTint: {r: 1, g: 1, b: 1, a: 1} + - _DissolveDetailNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveEdgeColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveEndPoint: {r: 0, g: 1, b: 0, a: 0} + - _DissolveMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveNoiseTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DissolveStartPoint: {r: 0, g: -1, b: 0, a: 0} + - _DissolveTextureColor: {r: 1, g: 1, b: 1, a: 1} + - _DissolveToTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionFlowTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrength1AudioLink: {r: 0, g: 0, b: 0, a: 0} + - _DistortionStrengthAudioLink: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL0Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL0StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL1Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL1StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL2Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL2StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionAL3Multipliers: {r: 1, g: 1, b: 0, a: 0} + - _EmissionAL3StrengthMod: {r: 0, g: 0, b: 0, a: 0} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColor1: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor2: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor3: {r: 1, g: 1, b: 1, a: 1} + - _EmissionMap1Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMapPan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask1Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask2Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMask3Pan: {r: 0, g: 0, b: 0, a: 0} + - _EmissionMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _EmissiveScroll_Direction: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction1: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction2: {r: 0, g: -10, b: 0, a: 0} + - _EmissiveScroll_Direction3: {r: 0, g: -10, b: 0, a: 0} + - _FXProximityColorMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _FXProximityColorMinColor: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookColor: {r: 1, g: 1, b: 1, a: 1} + - _FlipbookCrossfadeRange: {r: 0.75, g: 1, b: 0, a: 1} + - _FlipbookMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookPanning: {r: 0, g: 0, b: 0, a: 1} + - _FlipbookScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _FlipbookSideOffset: {r: 0, g: 0, b: 0, a: 0} + - _FlipbookTexArrayPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALMaxBrightnessAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterALSizeAdd: {r: 0, g: 0, b: 0, a: 0} + - _GlitterColor: {r: 1, g: 1, b: 1, a: 1} + - _GlitterColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _GlitterMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _GlitterMinMaxSize: {r: 0.1, g: 0.5, b: 0, a: 1} + - _GlitterRandomRotationSpeed: {r: 0, g: 0, b: 0, a: 0} + - _GlitterUVPanning: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskMinMaxSlider_0: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_1: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_10: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_11: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_12: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_13: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_14: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_15: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_2: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_3: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_4: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_5: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_6: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_7: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_8: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskMinMaxSlider_9: {r: 0, g: 1, b: 0, a: 1} + - _GlobalMaskTexture0Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture0SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture1SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture2SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3Pan: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_A: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_B: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitPan_G: {r: 0, g: 0, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_A: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_B: {r: 1, g: 1, b: 0, a: 0} + - _GlobalMaskTexture3SplitTilingOffset_G: {r: 1, g: 1, b: 0, a: 0} + - _GlobalThemeColor0: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor1: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor2: {r: 1, g: 1, b: 1, a: 1} + - _GlobalThemeColor3: {r: 1, g: 1, b: 1, a: 1} + - _GreenColor: {r: 1, g: 1, b: 1, a: 1} + - _GreenTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _HeightMapPan: {r: 0, g: 0, b: 0, a: 0} + - _HeightmaskPan: {r: 0, g: 0, b: 0, a: 0} + - _HighColor: {r: 1, g: 1, b: 1, a: 1} + - _HighColor_TexPan: {r: 0, g: 0, b: 0, a: 0} + - _LTCGI_DiffuseColor: {r: 1, g: 1, b: 1, a: 1} + - _LTCGI_SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _LightDataSDFMapPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingAOMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingDetailShadowMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingForcedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowColor: {r: 1, g: 1, b: 1, a: 1} + - _LightingShadowMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _LightingWrappedColor: {r: 1, g: 1, b: 1, a: 1} + - _LightngForcedDirection: {r: 0, g: 0, b: 0, a: 1} + - _LineColor: {r: 1, g: 1, b: 1, a: 1} + - _LookAtAlphaDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtAlphaForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtAlphaMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtAlphaOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtAlphaUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtBlueDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtBlueForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtBlueMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtBlueOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBluePivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtBlueUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtGreenDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtGreenForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtGreenMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtGreenOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtGreenUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _LookAtMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedDistanceFalloff: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedFoV: {r: 0, g: 0, b: 0, a: 0} + - _LookAtRedForwardDirection: {r: 0, g: 0, b: 1, a: 1} + - _LookAtRedMaxPitchAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxRollAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedMaxYawAngle: {r: -180, g: 180, b: -180, a: 180} + - _LookAtRedOriginOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedPivotOffset: {r: 0, g: 0, b: 0, a: 1} + - _LookAtRedUpDirection: {r: 0, g: 1, b: 0, a: 1} + - _MainColorAdjustTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MainTexPan: {r: 0, g: 0, b: 0, a: 0} + - _MatCap2ndBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap3rdBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCap4thBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _MatCapBlendUV1: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap0NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap1NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap2Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALAlphaAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALEmissionAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3ALIntensityAdd: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap3MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3NormalMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap3Pan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Color: {r: 1, g: 1, b: 1, a: 1} + - _Matcap4MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Matcap4Pan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapColor: {r: 1, g: 1, b: 1, a: 1} + - _MatcapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _MatcapPan: {r: 0, g: 0, b: 0, a: 0} + - _MirrorColor: {r: 1, g: 1, b: 1, a: 1} + - _MirrorTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieMetallicMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _MochieReflectionTint: {r: 1, g: 1, b: 1, a: 1} + - _MochieSpecularTint: {r: 1, g: 1, b: 1, a: 1} + - _MultilayerMathBlurMapPan: {r: 0, g: 0, b: 0, a: 0} + - _NormalCorrectOrigin: {r: 0, g: 0.4, b: -0.025, a: 1} + - _OutlineDropShadowOffset: {r: 1, g: 0, b: 0, a: 0} + - _OutlineMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _OutlinePersonaDirection: {r: 1, g: 0, b: 0, a: 0} + - _OutlineTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _PBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _PPMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _PPRGB: {r: 1, g: 1, b: 1, a: 1} + - _PPTint: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMapMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ParallaxInternalMapPan: {r: 0, g: 0, b: 1, a: 1} + - _ParallaxInternalMaxColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalMinColor: {r: 1, g: 1, b: 1, a: 1} + - _ParallaxInternalPanDepthSpeed: {r: 0, g: 0, b: 1, a: 1} + - _PathALAutoCorrelatorRangeA: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeB: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeG: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALAutoCorrelatorRangeR: {r: 0.1, g: 0.9, b: 0, a: 1} + - _PathALHistoryRangeA: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeB: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeG: {r: 0, g: 1, b: 0, a: 1} + - _PathALHistoryRangeR: {r: 0, g: 1, b: 0, a: 1} + - _PathColorA: {r: 1, g: 1, b: 1, a: 1} + - _PathColorB: {r: 1, g: 1, b: 1, a: 1} + - _PathColorG: {r: 1, g: 1, b: 1, a: 1} + - _PathColorR: {r: 1, g: 1, b: 1, a: 1} + - _PathEmissionStrength: {r: 0, g: 0, b: 0, a: 0} + - _PathGapLengths: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathOffset: {r: 0, g: 0, b: 0, a: 0} + - _PathRemapA: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapB: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapG: {r: 0, g: 1, b: 0, a: 1} + - _PathRemapR: {r: 0, g: 1, b: 0, a: 1} + - _PathSegments: {r: 0, g: 0, b: 0, a: 0} + - _PathSoftness: {r: 1, g: 1, b: 1, a: 1} + - _PathSpeed: {r: 0.1, g: 0.1, b: 0.1, a: 0.1} + - _PathTime: {r: -999, g: -999, b: -999, a: -999} + - _PathWidth: {r: 0.03, g: 0.03, b: 0.03, a: 0.03} + - _PathingColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PathingMapPan: {r: 0, g: 0, b: 0, a: 0} + - _PolarCenter: {r: 0.5, g: 0.5, b: 0, a: 0} + - _RGBAAlphaPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAAlphaPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAAlphaScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBABluePBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBABlueScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBAGreenPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBAGreenScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBAMetallicMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedPBRMaskScaleTiling: {r: 1, g: 1, b: 0, a: 0} + - _RGBARedPBRMasksPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBARedScaleOffset: {r: 1, g: 1, b: 0, a: 0} + - _RGBASmoothnessMapsPan: {r: 0, g: 0, b: 0, a: 0} + - _RGBMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RedColor: {r: 1, g: 1, b: 1, a: 1} + - _RedTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _ReflectionColor: {r: 1, g: 1, b: 1, a: 1} + - _ReflectionCubeColor: {r: 0, g: 0, b: 0, a: 1} + - _RgbNormalAPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalBPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalGPan: {r: 0, g: 0, b: 0, a: 0} + - _RgbNormalRPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2Color: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _Rim2ColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2IndirColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2LightColor: {r: 1, g: 1, b: 1, a: 1} + - _Rim2MaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Rim2ShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _Rim2TexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimColor: {r: 0.65999997, g: 0.5, b: 0.47999996, a: 1} + - _RimColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _RimEnviroMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimIndirColor: {r: 1, g: 1, b: 1, a: 1} + - _RimLightColor: {r: 1, g: 1, b: 1, a: 1} + - _RimMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _RimShadowAlpha: {r: 0, g: 0, b: 0, a: 1} + - _RimTexPan: {r: 0, g: 0, b: 0, a: 0} + - _SDFForward: {r: 0, g: 0, b: 1, a: 0} + - _SDFLeft: {r: -1, g: 0, b: 0, a: 0} + - _SDFShadingTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOColor: {r: 0, g: 0, b: 0, a: 1} + - _SSAOColorMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOHSV: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SSAOMaxDistanceFalloff: {r: 0.01, g: 0.1, b: 1, a: 1} + - _SSSColor: {r: 1, g: 0, b: 0, a: 1} + - _SSSThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_HighColorMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_Rim2LightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Set_RimLightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow2ndColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColor: {r: 0, g: 0, b: 0, a: 0} + - _Shadow3rdColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowAOShift: {r: 0, g: 1, b: 0, a: 1} + - _ShadowAOShift2: {r: 0, g: 1, b: 0, a: 1} + - _ShadowBorderColor: {r: 1, g: 0, b: 0, a: 1} + - _ShadowBorderMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowColor: {r: 0.7, g: 0.75, b: 0.85, a: 1} + - _ShadowColorTexPan: {r: 0, g: 0, b: 0, a: 0} + - _ShadowStrengthMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _SkinThicknessMapPan: {r: 0, g: 0, b: 0, a: 0} + - _SphericalDissolveCenter: {r: 0, g: 0, b: 0, a: 1} + - _SssColorBleedAoWeights: {r: 0.4, g: 0.15, b: 0.13, a: 0} + - _SssTransmissionAbsorption: {r: -8, g: -40, b: -64, a: 0} + - _TPS_BuldgeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorForward: {r: 0, g: 0, b: 1, a: 0} + - _TPS_PenetratorRight: {r: 1, g: 0, b: 0, a: 0} + - _TPS_PenetratorScale: {r: 1, g: 1, b: 1, a: 1} + - _TPS_PenetratorUp: {r: 0, g: 1, b: 0, a: 0} + - _TPS_SqueezeTypeMultiplier: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSOutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _TextFPSPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextFPSScale: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericColor: {r: 1, g: 1, b: 1, a: 1} + - _TextNumericOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextNumericScale: {r: 1, g: 1, b: 1, a: 1} + - _TextPositionColor: {r: 1, g: 0, b: 1, a: 1} + - _TextPositionOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionPadding: {r: 0, g: 0, b: 0, a: 0} + - _TextPositionScale: {r: 1, g: 1, b: 1, a: 1} + - _TextTimeColor: {r: 1, g: 0, b: 1, a: 1} + - _TextTimeOffset: {r: 0, g: 0, b: 0, a: 0} + - _TextTimePadding: {r: 0, g: 0, b: 0, a: 0} + - _TextTimeScale: {r: 1, g: 1, b: 1, a: 1} + - _TruchetALAlpha: {r: 0, g: 0, b: 0, a: 0} + - _TruchetALEmission: {r: 0, g: 0, b: 0, a: 0} + - _TruchetChronoPanSpeed: {r: 0, g: 0, b: 0, a: 0} + - _TruchetColor: {r: 1, g: 1, b: 1, a: 1} + - _TruchetMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _TruchetPanOffset: {r: 0, g: 0, b: 0, a: 0} + - _TruchetTexPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexBasicsMaskUVPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalRotationAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalRotationCTALSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalScaleALMax: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalScaleALMin: {r: 0, g: 0, b: 0, a: 0} + - _VertexLocalTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexLocalTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexLookAtAlphaAudiolink: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationHeightAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationHeightMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VertexManipulationLocalRotation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalRotationSpeed: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationLocalScale: {r: 1, g: 1, b: 1, a: 1} + - _VertexManipulationLocalTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexManipulationWorldTranslation: {r: 0, g: 0, b: 0, a: 1} + - _VertexRoundingRangeAL: {r: 0, g: 0, b: 0, a: 1} + - _VertexSpectrumOffsetMax: {r: 0, g: 0.1, b: 0, a: 1} + - _VertexSpectrumOffsetMin: {r: 0, g: 0, b: 0, a: 1} + - _VertexSphereCenter: {r: 0, g: 0, b: 0, a: 1} + - _VertexWindDetailDirection: {r: 0, g: 1, b: 0, a: 0} + - _VertexWindPrimaryDirection: {r: 1, g: 0, b: 0, a: 0} + - _VertexWorldTranslationALMax: {r: 0, g: 0, b: 0, a: 1} + - _VertexWorldTranslationALMin: {r: 0, g: 0, b: 0, a: 1} + - _VideoMaskTexturePan: {r: 0, g: 0, b: 0, a: 0} + - _VideoResolution: {r: 1280, g: 720, b: 0, a: 0} + - _VoronoiGradient: {r: 0, g: 0.5, b: 0, a: 0} + - _VoronoiInnerColor: {r: 1, g: 1, b: 1, a: 1} + - _VoronoiMaskPan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiNoisePan: {r: 0, g: 0, b: 0, a: 0} + - _VoronoiOuterColor: {r: 0, g: 0, b: 0, a: 1} + - _VoronoiRandomMinMaxBrightness: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiRandomMinMaxSaturation: {r: 0.8, g: 1, b: 0, a: 1} + - _VoronoiSpeed: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Quiz/Materials/OfficeChair.mat.meta b/Assets/Quiz/Materials/OfficeChair.mat.meta new file mode 100644 index 0000000..5ca271f --- /dev/null +++ b/Assets/Quiz/Materials/OfficeChair.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f45e687b234af6948b76b2622ed33647 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/OneSidedUI.mat b/Assets/Quiz/Materials/OneSidedUI.mat new file mode 100644 index 0000000..ae89935 --- /dev/null +++ b/Assets/Quiz/Materials/OneSidedUI.mat @@ -0,0 +1,41 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: OneSidedUI + m_Shader: {fileID: 4800000, guid: 435d5a2da449f0340bc5300e4e9247f2, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _ColorMask: 15 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UseUIAlphaClip: 0 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Quiz/Materials/OneSidedUI.mat.meta b/Assets/Quiz/Materials/OneSidedUI.mat.meta new file mode 100644 index 0000000..5ebc950 --- /dev/null +++ b/Assets/Quiz/Materials/OneSidedUI.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c9a75b790a45e0447bc87a8b5827d764 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/OneSidedUI.shader b/Assets/Quiz/Materials/OneSidedUI.shader new file mode 100644 index 0000000..e14805e --- /dev/null +++ b/Assets/Quiz/Materials/OneSidedUI.shader @@ -0,0 +1,118 @@ +Shader "Custom/OneSidedUI" +{ + Properties + { + [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} + _Color ("Tint", Color) = (1,1,1,1) + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + _ColorMask ("Color Mask", Float) = 15 + + [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0 + } + + SubShader + { + Tags + { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + "PreviewType"="Plane" + "CanUseSpriteAtlas"="True" + } + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + // CULLING SET TO BACK (Makes it one-sided) + Cull Back + + Lighting Off + ZWrite Off + ZTest [unity_GUIZTestMode] + Blend SrcAlpha OneMinusSrcAlpha + ColorMask [_ColorMask] + + Pass + { + Name "Default" + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma target 2.0 + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + + #pragma multi_compile_local _ UNITY_UI_CLIP_RECT + #pragma multi_compile_local _ UNITY_UI_ALPHACLIP + + struct appdata_t + { + float4 vertex : POSITION; + float4 color : COLOR; + float2 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct v2f + { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + float2 texcoord : TEXCOORD0; + float4 worldPosition : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO + }; + + sampler2D _MainTex; + fixed4 _Color; + float4 _ClipRect; + float4 _MainTex_ST; + + // --- THIS WAS MISSING IN THE PREVIOUS VERSION --- + float4 _TextureSampleAdd; + // ------------------------------------------------ + + v2f vert(appdata_t v) + { + v2f OUT; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT); + OUT.worldPosition = v.vertex; + OUT.vertex = UnityObjectToClipPos(OUT.worldPosition); + + OUT.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex); + + OUT.color = v.color * _Color; + return OUT; + } + + fixed4 frag(v2f IN) : SV_Target + { + half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color; + + #ifdef UNITY_UI_CLIP_RECT + color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect); + #endif + + #ifdef UNITY_UI_ALPHACLIP + clip (color.a - 0.001); + #endif + + return color; + } + ENDCG + } + } +} \ No newline at end of file diff --git a/Assets/Quiz/Materials/OneSidedUI.shader.meta b/Assets/Quiz/Materials/OneSidedUI.shader.meta new file mode 100644 index 0000000..03fbe68 --- /dev/null +++ b/Assets/Quiz/Materials/OneSidedUI.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 435d5a2da449f0340bc5300e4e9247f2 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/OptimizedShaders/Camera.meta b/Assets/Quiz/Materials/OptimizedShaders/Camera.meta new file mode 100644 index 0000000..a4bee25 --- /dev/null +++ b/Assets/Quiz/Materials/OptimizedShaders/Camera.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 65401dd965210b149817778ccb5f54bf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/OptimizedShaders/Camera/Poiyomi Pro World.shader b/Assets/Quiz/Materials/OptimizedShaders/Camera/Poiyomi Pro World.shader new file mode 100644 index 0000000..568f414 --- /dev/null +++ b/Assets/Quiz/Materials/OptimizedShaders/Camera/Poiyomi Pro World.shader @@ -0,0 +1,13038 @@ +Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/670c93b6400cecc4d9427ca653ff6a79" +{ + Properties + { + [HideInInspector] shader_master_label ("Poiyomi 9.3.48", Float) = 0 + [HideInInspector] shader_is_using_thry_editor ("", Float) = 0 + [HideInInspector] shader_locale ("0db0b86376c3dca4b9a6828ef8615fe0", Float) = 0 + [HideInInspector] footer_website ("{texture:{name:icon-poilogo,height:24},action:{type:URL,data:https://www.poiyomi.com},hover:WEBSITE}", Float) = 0 + [HideInInspector] footer_discord ("{texture:{name:icon-discord,height:24},action:{type:URL,data:https://discord.gg/Ays52PY},hover:DISCORD}", Float) = 0 + [HideInInspector] footer_patreon ("{texture:{name:icon-patreon-new,height:24},action:{type:URL,data:https://www.patreon.com/poiyomi},hover:PATREON}", Float) = 0 + [HideInInspector] footer_youtube ("{texture:{name:icon-youtube,height:24},action:{type:URL,data:https://www.youtube.com/poiyomi},hover:YOUTUBE}", Float) = 0 + [HideInInspector] footer_github ("{texture:{name:icon-github,height:24},action:{type:URL,data:https://github.com/poiyomi/PoiyomiToonShader},hover:GITHUB}", Float) = 0 + [HideInInspector] footer_bluesky ("{texture:{name:icon-bluesky,height:24},action:{type:URL,data:https://bsky.app/profile/poiyomi.com},hover:BLUESKY}", Float) = 0 + [HideInInspector] footer_twitter ("{texture:{name:icon-twitter,height:24},action:{type:URL,data:https://x.com/poiyomi},hover:X}", Float) = 0 + [Header(POIYOMI SHADER UI FAILED TO LOAD)] + [Header(. This is caused by scripts failing to compile. It can be fixed.)] + [Header(. The inspector will look broken and will not work properly until fixed.)] + [Header(. Please check your console for script errors.)] + [Header(. You can filter by errors in the console window.)] + [Header(. Often the topmost error points to the erroring script.)] + [Space(30)][Header(Common Error Causes)] + [Header(. Installing multiple Poiyomi Shader packages)] + [Header(. Make sure to delete the Poiyomi shader folder before you update Poiyomi.)] + [Header(. If a package came with Poiyomi this is bad practice and can cause issues.)] + [Header(. Delete the package and import it without any Poiyomi components.)] + [Header(. Bad VRCSDK installation (e.g. Both VCC and Standalone))] + [Header(. Delete the VRCSDK Folder in Assets if you are using the VCC.)] + [Header(. Avoid using third party SDKs. They can cause incompatibility.)] + [Header(. Script Errors in other scripts)] + [Header(. Outdated tools or prefabs can cause this.)] + [Header(. Update things that are throwing errors or move them outside the project.)] + [Space(30)][Header(Visit Our Discord to Ask For Help)] + [Space(5)]_ShaderUIWarning0 (" → discord.gg/poiyomi ← We can help you get it fixed! --{condition_showS:(0==1)}", Int) = -0 + [Space(1400)][Header(POIYOMI SHADER UI FAILED TO LOAD)] + _ShaderUIWarning1 ("Please scroll up for more information! --{condition_showS:(0==1)}", Int) = -0 + [HideInInspector] _ForgotToLockMaterial (";;YOU_FORGOT_TO_LOCK_THIS_MATERIAL;", Int) = 1 + [ThryShaderOptimizerLockButton] _ShaderOptimizerEnabled ("", Int) = 1 + [HideInInspector] GeometryShader_Enabled("GEOMETRY SHADER ENABLED", Float) = 1 + [HideInInspector] Tessellation_Enabled("TESSELLATION ENABLED", Float) = 1 + [ThryWideEnum(Opaque, 0, Cutout, 1, TransClipping, 9, Fade, 2, Transparent, 3, Additive, 4, Soft Additive, 5, Multiplicative, 6, 2x Multiplicative, 7)]_Mode("Rendering Preset--{on_value_actions:[ + {value:0,actions:[{type:SET_PROPERTY,data:render_queue=2000},{type:SET_PROPERTY,data:_AlphaForceOpaque=1}, {type:SET_PROPERTY,data:render_type=Opaque}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=0}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:1,actions:[{type:SET_PROPERTY,data:render_queue=2450},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=.5}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:9,actions:[{type:SET_PROPERTY,data:render_queue=2460},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.01}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:2,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.002}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:3,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=1}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:4,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:5,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=4}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=4}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=4}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:6,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:7,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=3}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=3}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]} + }]}]}", Int) = 0 + [HideInInspector] m_mainCategory ("Color & Normals--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/main},hover:Documentation}}", Float) = 0 + _Color ("Color & Alpha--{reference_property:_ColorThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _ColorThemeIndex ("", Int) = 0 + [sRGBWarning(true)]_MainTex ("Texture--{reference_properties:[_MainTexPan, _MainTexUV, _MainPixelMode, _MainTexStochastic, _MainIgnoreTexAlpha]}", 2D) = "white" { } + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _MainTexUV ("UV", Int) = 0 + [HideInInspector][Vector2]_MainTexPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ToggleUI]_MainPixelMode ("Pixel Mode", Float) = 0 + [HideInInspector][ToggleUI]_MainTexStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][ToggleUI]_MainIgnoreTexAlpha ("Ignore Alpha", Float) = 0 + [Normal]_BumpMap ("Normal Map--{reference_properties:[_BumpMapPan, _BumpMapUV, _BumpScale, _BumpMapStochastic]}", 2D) = "bump" { } + [HideInInspector][Vector2]_BumpMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _BumpMapUV ("UV", Int) = 0 + [HideInInspector]_BumpScale ("Intensity", Range(0, 10)) = 1 + [HideInInspector][ToggleUI]_BumpMapStochastic ("Stochastic Sampling", Float) = 0 + [sRGBWarning]_AlphaMask ("Alpha Map--{reference_properties:[_AlphaMaskPan, _AlphaMaskUV, _AlphaMaskInvert, _MainAlphaMaskMode, _AlphaMaskBlendStrength, _AlphaMaskValue], alts:[_AlphaMap]}", 2D) = "white" { } + [HideInInspector][Vector2]_AlphaMaskPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _AlphaMaskUV ("UV", Int) = 0 + [HideInInspector][ThryWideEnum(Off, 0, Replace, 1, Multiply, 2, Add, 3, Subtract, 4)]_MainAlphaMaskMode ("Blend Mode", Int) = 2 + [HideInInspector]_AlphaMaskBlendStrength ("Blend Strength", Float) = 1 + [HideInInspector]_AlphaMaskValue ("Blend Offset", Float) = 0 + [HideInInspector][ToggleUI]_AlphaMaskInvert ("Invert", Float) = 0 + _Cutoff ("Alpha Cutoff", Range(0, 1.001)) = 0.5 + [HideInInspector] m_start_DetailOptions (" Detail Normals & Texture--{reference_property:_DetailEnabled,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/details},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(FINALPASS)]_DetailEnabled ("Enable", Float) = 0 + [sRGBWarning][ThryRGBAPacker(R Texture Mask, G Normal Mask, B Nothing, A Nothing, linear, false)]_DetailMask ("Detail Mask (Expand)--{reference_properties:[_DetailMaskPan, _DetailMaskUV, _DetailMaskStochastic]}", 2D) = "white" { } + [HideInInspector][Vector2]_DetailMaskPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _DetailMaskUV ("UV", Int) = 0 + [HideInInspector][ToggleUI]_DetailMaskStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector] s_start_DetailTexture ("Detail Texture--{persistent_expand:false,default_expand:true}", Float) = 0 + _DetailTint ("Tint--{reference_property:_DetailTintThemeIndex}", Color) = (1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _DetailTintThemeIndex ("", Int) = 0 + [sRGBWarning(true)]_DetailTex ("Detail Texture--{reference_properties:[_DetailTexPan, _DetailTexUV, _DetailTexStochastic]}", 2D) = "gray" { } + [HideInInspector][Vector2]_DetailTexPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _DetailTexUV ("UV", Int) = 0 + [HideInInspector][ToggleUI]_DetailTexStochastic ("Stochastic Sampling", Float) = 0 + _DetailTexIntensity ("Intensity", Range(0, 10)) = 1 + _DetailBrightness ("Brightness", Range(0, 2)) = 1 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _DetailTexGlobalMask ("Global Mask--{reference_property:_DetailTexGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)]_DetailTexGlobalMaskBlendType ("Blending", Range(0, 1)) = 2 + [HideInInspector] s_end_DetailTexture ("Detail Texture", Float) = 0 + [HideInInspector] s_start_DetailNormal ("Detail Normal--{persistent_expand:false,default_expand:true}", Float) = 0 + [Normal]_DetailNormalMap ("Detail Normal--{reference_properties:[_DetailNormalMapPan, _DetailNormalMapUV, _DetailNormalMapScale, _DetailNormalMapStochastic]}", 2D) = "bump" { } + [HideInInspector]_DetailNormalMapScale ("Intensity", Range(0, 10)) = 1 + [HideInInspector][Vector2]_DetailNormalMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _DetailNormalMapUV ("UV", Int) = 0 + [HideInInspector][ToggleUI]_DetailNormalMapStochastic ("Stochastic Sampling", Float) = 0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _DetailNormalGlobalMask ("Global Mask--{reference_property:_DetailNormalGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)]_DetailNormalGlobalMaskBlendType ("Blending", Range(0, 1)) = 2 + [HideInInspector] s_end_DetailNormal ("Detail Normal", Float) = 0 + [HideInInspector] m_end_DetailOptions ("Details", Float) = 0 + [HideInInspector] m_start_Alpha ("Alpha Options--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/alpha-options},hover:Documentation}}", Float) = 0 + [ToggleUI]_AlphaForceOpaque ("Force Opaque", Float) = 1 + _AlphaMod ("Alpha Mod", Range(-1, 1)) = 0.0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _AlphaGlobalMask ("Global Mask--{reference_property:_AlphaGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _AlphaGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] m_end_Alpha ("Alpha Options", Float) = 0 + [HideInInspector] m_lightingCategory ("Shading", Float) = 0 + [HideInInspector] m_start_PoiLightData ("Light Data--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/light-data},hover:Documentation}}", Float) = 0 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingAOMaps ("AO Maps (expand)--{reference_properties:[_LightingAOMapsPan, _LightingAOMapsUV,_LightDataAOStrengthR,_LightDataAOStrengthG,_LightDataAOStrengthB,_LightDataAOStrengthA, _LightDataAOGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingAOMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingAOMapsUV ("UV", Int) = 0 + [HideInInspector]_LightDataAOStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightDataAOStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataAOGlobalMaskR ("Global Mask--{reference_property:_LightDataAOGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataAOGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingDetailShadowMaps ("Shadow Map (expand)--{reference_properties:[_LightingDetailShadowMapsPan, _LightingDetailShadowMapsUV,_LightingDetailShadowStrengthR,_LightingDetailShadowStrengthG,_LightingDetailShadowStrengthB,_LightingDetailShadowStrengthA,_LightingAddDetailShadowStrengthR,_LightingAddDetailShadowStrengthG,_LightingAddDetailShadowStrengthB,_LightingAddDetailShadowStrengthA, _LightDataDetailShadowGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingDetailShadowMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingDetailShadowMapsUV ("UV", Int) = 0 + [HideInInspector]_LightingDetailShadowStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingDetailShadowStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthR ("Additive R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingAddDetailShadowStrengthG ("Additive G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthB ("Additive B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthA ("Additive A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataDetailShadowGlobalMaskR ("Global Mask--{reference_property:_LightDataDetailShadowGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataDetailShadowGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingShadowMasks ("Shadow Masks (expand)--{reference_properties:[_LightingShadowMasksPan, _LightingShadowMasksUV,_LightingShadowMaskStrengthR,_LightingShadowMaskStrengthG,_LightingShadowMaskStrengthB,_LightingShadowMaskStrengthA, _LightDataShadowMaskGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingShadowMasksPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingShadowMasksUV ("UV", Int) = 0 + [HideInInspector]_LightingShadowMaskStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingShadowMaskStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataShadowMaskGlobalMaskR ("Global Mask--{reference_property:_LightDataShadowMaskGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataShadowMaskGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [HideInInspector] s_start_LightDataBasePass ("Base Pass (Directional & Baked Lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [Enum(Poi Custom, 0, Standard, 1, UTS2, 2, OpenLit(lil toon), 3)] _LightingColorMode ("Light Color Mode", Int) = 0 + [Enum(Poi Custom, 0, Normalized NDotL, 1, Saturated NDotL, 2, Casted Shadows Only, 3, SDF, 4)] _LightingMapMode ("Light Map Mode", Int) = 0 + [HideInInspector] s_start_LightDataSDF ("Signed Distance fields--{persistent_expand:true,default_expand:true, condition_showS:(_LightingMapMode==4)}", Float) = 1 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, Nothing, Nothing, Linear, false)]_LightDataSDFMap ("SDF Map (expand)--{reference_properties:[_LightDataSDFMapPan, _LightDataSDFMapUV]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightDataSDFMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightDataSDFMapUV ("UV", Int) = 0 + _LightDataSDFMapLOD ("LOD", Range(0, 1)) = 0 + _LightDataSDFBlendY ("Blend Y Direction", Range(0.001, 2)) = 1 + [HideInInspector] s_end_LightDataSDF ("Signed Distance fields", Float) = 1 + [Enum(Poi Custom, 0, Forced Local Direction, 1, Forced World Direction, 2, UTS2, 3, OpenLit(lil toon), 4, View Direction, 5)] _LightingDirectionMode ("Light Direction Mode", Int) = 0 + [Vector3]_LightngForcedDirection ("Forced Direction--{condition_showS:(_LightingDirectionMode==1 || _LightingDirectionMode==2)}", Vector) = (0, 0, 0) + _LightingViewDirOffsetPitch ("View Dir Offset Pitch--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + _LightingViewDirOffsetYaw ("View Dir Offset Yaw--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + [ToggleUI]_LightingForceColorEnabled ("Force Light Color", Float) = 0 + _LightingForcedColor ("Forced Color--{condition_showS:(_LightingForceColorEnabled==1), reference_property:_LightingForcedColorThemeIndex}", Color) = (1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _LightingForcedColorThemeIndex ("", Int) = 0 + _Unlit_Intensity ("Unlit_Intensity--{condition_showS:(_LightingColorMode==2)}", Range(0.001, 4)) = 1 + [DoNotLock][ToggleUI]_LightingCapEnabled ("Limit Brightness", Float) = 1 + [DoNotLock]_LightingCap ("Max Brightness--{condition_showS:(_LightingCapEnabled==1)}", Range(0, 10)) = 1 + [DoNotLock]_LightingMinLightBrightness ("Min Brightness", Range(0, 1)) = 0 + _LightingIndirectUsesNormals ("Indirect Uses Normals--{condition_showS:(_LightingColorMode==0)}", Range(0, 1)) = 0 + _LightingCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 0 + [DoNotLock]_LightingMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + [ToggleUI]_LightingVertexLightingEnabled ("Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingMirrorVertexLightingEnabled ("Mirror Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingEnableLightVolumes ("Light Volumes", Float) = 1 + [HideInInspector] s_end_LightDataBasePass ("Base Pass", Float) = 1 + [HideInInspector] s_start_LightDataAddPass ("Add Pass (Point & Spot lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [ToggleUI]_LightingAdditiveEnable ("Pixel lights (Important)", Float) = 1 + [ToggleUI]_DisableDirectionalInAdd ("Ignore Directional Lights--{condition_showS:(_LightingAdditiveEnable==1)}", Float) = 1 + [ToggleUI]_LightingAdditiveLimited ("Limit Brightness", Float) = 1 + _LightingAdditiveLimit ("Max Brightness--{condition_showS:(_LightingAdditiveLimited==1)}", Range(0, 10)) = 1 + _LightingAdditiveCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 1 + _LightingAdditiveMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + _LightingAdditivePassthrough ("Point Light Passthrough--{condition_showS:(_LightingAdditiveEnable==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_LightDataAddPass ("Add Pass", Float) = 1 + [HideInInspector] s_start_LightDataDebug ("Debug / Data Visualizations--{reference_property:_LightDataDebugEnabled,persistent_expand:true}", Float) = 0 + [HideInInspector][DoNotAnimate][ThryToggleUI(false)]_LightDataDebugEnabled ("Debug", Float) = 0 + [ThryWideEnum(Direct Color, 0, Indirect Color, 1, Light Map, 2, Attenuation, 3, N Dot L, 4, Half Dir, 5, Direction, 6, Add Color, 7, Add Attenuation, 8, Add Shadow, 9, Add N Dot L, 10)] _LightingDebugVisualize ("Visualize", Int) = 0 + [HideInInspector] s_end_LightDataDebug ("Debug", Float) = 0 + [HideInInspector] m_end_PoiLightData ("Light Data", Float) = 0 + [HideInInspector] m_start_bakedLighting ("Baked Lighting", Float) = 0 + _GIEmissionMultiplier ("GI Emission Multiplier", Float) = 1 + [HideInInspector] DSGI ("DSGI", Float) = 0 //add this property for double sided illumination settings to be shown + [HideInInspector] LightmapFlags ("Lightmap Flags", Float) = 0 //add this property for lightmap flags settings to be shown + [HideInInspector] m_end_bakedLighting ("Baked Lighting", Float) = 0 + [HideInInspector] m_start_PoiShading (" Shading--{reference_property:_ShadingEnabled,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/main},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(VIGNETTE_MASKED)]_ShadingEnabled ("Enable Shading", Float) = 1 + [DoNotAnimate][KeywordEnum(TextureRamp, Multilayer Math, Wrapped, Skin, ShadeMap, Flat, Realistic, Cloth, SDF)] _LightingMode ("Lighting Type", Float) = 5 + _LightingShadowColor ("Shadow Tint--{condition_showS:(_LightingMode!=4 && _LightingMode!=1 && _LightingMode!=5)}", Color) = (1, 1, 1) + _ShadowStrength ("Shadow Strength--{condition_showS:(_LightingMode<=4 || _LightingMode==8)}", Range(0, 1)) = 1 + _LightingIgnoreAmbientColor ("Ignore Indirect Shadow Color--{condition_showS:(_LightingMode<=3 || _LightingMode==8)}", Range(0, 1)) = 1 + [Space(15)] + [HideInInspector] s_start_ShadingAddPass ("Add Pass (Point & Spot Lights)--{persistent_expand:true,default_expand:false}", Float) = 0 + [Enum(Realistic, 0, Toon, 1, Same as Base Pass, 3)] _LightingAdditiveType ("Lighting Type", Int) = 3 + _LightingAdditiveGradientStart ("Gradient Start--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = 0 + _LightingAdditiveGradientEnd ("Gradient End--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_ShadingAddPass ("Add Pass", Float) = 0 + [HideInInspector] s_start_ShadingGlobalMask ("Global Masks--{persistent_expand:true,default_expand:false}", Float) = 0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapApplyGlobalMaskIndex ("LightMap to Global Mask--{reference_property:_ShadingRampedLightMapApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapApplyGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapInverseApplyGlobalMaskIndex ("Inversed LightMap to Global Mask--{reference_property:_ShadingRampedLightMapInverseApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapInverseApplyGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] s_end_ShadingGlobalMask ("Global Masks", Float) = 0 + [HideInInspector] m_end_PoiShading ("Shading", Float) = 0 + [HideInInspector] m_start_brdf (" Reflections & Specular--{reference_property:_MochieBRDF,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/reflections-and-specular},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(MOCHIE_PBR)]_MochieBRDF ("Enable", Float) = 0 + _MochieMetallicMultiplier ("Metallic", Range(0, 1)) = 0 + _MochieRoughnessMultiplier ("Smoothness", Range(0, 1)) = 1 + _MochieReflectionTint ("Reflection Tint--{reference_property:_MochieReflectionTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _MochieReflectionTintThemeIndex ("", Int) = 0 + _MochieSpecularTint ("Specular Tint--{reference_property:_MochieSpecularTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _MochieSpecularTintThemeIndex ("", Int) = 0 + [sRGBWarning][ThryRGBAPacker(R Metallic Map, G Smoothness Map, B Reflection Mask, A Specular Mask, linear, false)]_MochieMetallicMaps ("Packed Maps [Click to Expand]--{reference_properties:[_MochieMetallicMapsPan, _MochieMetallicMapsUV, _MochieMetallicMapsStochastic, _MochieMetallicMapsMetallicChannel, _MochieMetallicMapsRoughnessChannel, _MochieMetallicMapsReflectionMaskChannel, _MochieMetallicMapsSpecularMaskChannel, _MochieMetallicMapInvert, _MochieRoughnessMapInvert, _MochieReflectionMaskInvert, _MochieSpecularMaskInvert]}", 2D) = "white" { } + [HideInInspector][Vector2]_MochieMetallicMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)]_MochieMetallicMapsUV ("UV", Int) = 0 + [HideInInspector][ToggleUI]_MochieMetallicMapsStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsMetallicChannel ("Metallic Channel", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsRoughnessChannel ("Smoothness Channel", Float) = 1 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsReflectionMaskChannel ("Reflection Mask Channel", Float) = 2 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsSpecularMaskChannel ("Specular Mask Channel", Float) = 3 + [HideInInspector][ToggleUI]_MochieMetallicMapInvert ("Invert Metallic", Float) = 0 + [HideInInspector][ToggleUI]_MochieRoughnessMapInvert ("Invert Smoothness", Float) = 0 + [HideInInspector][ToggleUI]_MochieReflectionMaskInvert ("Invert Reflection Mask", Float) = 0 + [HideInInspector][ToggleUI]_MochieSpecularMaskInvert ("Invert Specular Mask", Float) = 0 + [Space(10)] + _MochieReflectionStrength ("Reflection Visibility", Range(0, 1)) = 1 + _MochieSpecularStrength ("Specular Visibility", Range(0, 5)) = 1 + _RefSpecFresnelStrength ("Fresnel Strength", Range(0, 1)) = .5 + _SFExposureOcclusion ("Exposure Occlusion", Range(0, 1)) = 0 + [Space(10)] + [ThryTexture][NoScaleOffset]_MochieReflCube ("Cubemap", Cube) = "" { } + [ToggleUI]_MochieForceFallback ("Force Fallback", Int) = 0 + [HideInInspector] s_start_BRDFTPSMaskGroup ("TPS--{condition_showS:(_TPSPenetratorEnabled==1)}", Float) = 0 + [ThryToggleUI(true)] _BRDFTPSDepthEnabled (" TPS Depth Enabled", Float) = 0 + _BRDFTPSReflectionMaskStrength ("Reflection Mask Strength--{condition_showS:(_BRDFTPSDepthEnabled==1)}", Range(0, 1)) = 1 + _BRDFTPSSpecularMaskStrength ("Specular Mask Strength--{condition_showS:(_BRDFTPSDepthEnabled==1)}", Range(0, 1)) = 1 + [HideInInspector] s_end_BRDFTPSMaskGroup ("", Float) = 0 + [HideInInspector] s_start_ggxanisotropics(" Anisotropics--{reference_property:_GGXAnisotropics,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ThryToggle(GGX_ANISOTROPICS)]_GGXAnisotropics ("Enable", Float) = 0 + [sRGBWarning]_AnisotropyMap("Anisotropy Map--{reference_properties:[_AnisotropyMapPan, _AnisotropyMapUV, _AnisotropyMapChannel]}", 2D) = "bump" { } + [HideInInspector][Vector2]_AnisotropyMapPan("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _AnisotropyMapUV ("UV", Int) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3)]_AnisotropyMapChannel ("Channel", Float) = 0 + _Anisotropy ("Anisotropy", Range(-1, 1)) = 0 + _ReflectionAnisotropicStretch("Reflection Stretch", Range(1, 5)) = 1 + _RoughnessAnisotropy("Roughness Anisotropy", Range(0, 1)) = 1 + [HideInInspector] s_end_ggxanisotropics ("", Float) = 0 + [HideInInspector] s_start_PBRSecondSpecular ("2nd Specular--{reference_property:_Specular2ndLayer,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_Specular2ndLayer ("2nd Specular", Float) = 0 + _MochieSpecularStrength2 ("Visibility", Range(0, 5)) = 1 + _MochieRoughnessMultiplier2 ("Smoothness", Range(0, 1)) = 1 + [HideInInspector] s_end_PBRSecondSpecular ("Name", Float) = 0 + [HideInInspector] s_start_PBRSplitMaskSample ("Split Mask Sampling--{reference_property:_PBRSplitMaskSample,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_PBRSplitMaskSample ("Split Mask Sampling", Float) = 0 + [VectorLabel(tX, tY, oX, oY)]_PBRMaskScaleTiling ("Tiling/Offset", Vector) = (1, 1, 0, 0) + [ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)]_MochieMetallicMasksUV ("UV", Int) = 0 + [ToggleUI]_PBRSplitMaskStochastic ("Stochastic Sampling", Float) = 0 + [Vector2]_MochieMetallicMasksPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector] s_end_PBRSplitMaskSample ("Split Mask Sampling", Float) = 0 + [HideInInspector] s_start_brdfadvanced ("GSAA & Advanced Controls--{persistent_expand:true,default_expand:false}", Float) = 0 + [ToggleUI]_MochieLitFallback ("Lit Fallback", Float) = 1 + [ToggleUI]_IgnoreCastedShadows ("Ignore Casted Shadows", Float) = 0 + _PBRNormalSelect ("Pixel Normal Mix", Range(0, 1)) = 1 + [ThryToggleUI(true)]_MochieGSAAEnabled (" GSAA", Float) = 1 + _PoiGSAAVariance ("GSAA Variance--{condition_showS:(_MochieGSAAEnabled==1)}", Range(0, 1)) = 0.15 + _PoiGSAAThreshold ("GSAA Threshold--{condition_showS:(_MochieGSAAEnabled==1)}", Range(0, 1)) = 0.1 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieMetallicGlobalMask ("Metallic--{reference_property:_MochieMetallicGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieMetallicGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieSmoothnessGlobalMask ("Smoothness--{reference_property:_MochieSmoothnessGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieSmoothnessGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieReflectionStrengthGlobalMask ("Reflection Strength--{reference_property:_MochieReflectionStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieReflectionStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieSpecularStrengthGlobalMask ("Specular Strength--{reference_property:_MochieSpecularStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieSpecularStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] s_end_brdfadvanced ("", Float) = 0 + [HideInInspector] m_end_brdf ("", Float) = 0 + [HideInInspector] m_OutlineCategory (" Outlines--{reference_property:_EnableOutlines,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/outlines/main},hover:Documentation}}", Float) = 0 + [HideInInspector] m_specialFXCategory ("Special FX", Float) = 0 + [HideInInspector] m_vertexCategory ("Vertex Options", Float) = 0 + [HideInInspector] m_start_Uzumore (" View Clip Prevention (Uzumore)--{reference_property:_UzumoreCategoryToggle,button_author:{text:sigmal00,action:{type:URL,data:https://github.com/sigmal00},hover:GitHub}}, button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/vertex-options/view-clip-prevention},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(POI_UZUMORE)] _UzumoreCategoryToggle (" View Clip Prevention (Uzumore)", Float) = 0 + [ToggleUI] _UzumoreEnabled ("Animation Toggle", Float) = 1 + _UzumoreAmount ("Push Amount (m)", Float) = 0.1 + _UzumoreBias ("Push Bias", Float) = 0.001 + [sRGBWarning]_UzumoreMask ("Push Mask (A)", 2D) = "white" { } + [ThryWideEnum(R, 0, G, 1, B, 2, A, 3)] _UzumoreMaskUV ("Push Mask Channel", Float) = 3 + [HideInInspector] m_end_Uzumore ("Camera Push Back", Float) = 0 + [HideInInspector] m_modifierCategory ("Global Modifiers & Data", Float) = 0 + [HideInInspector] m_start_PoiGlobalCategory ("Global Data and Masks", Float) = 0 + [HideInInspector] m_start_GlobalThemes ("Global Themes--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/global-themes},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HDR]_GlobalThemeColor0 ("Theme Color 0", Color ) = (1, 1, 1, 1) + _GlobalThemeHue0 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed0 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation0 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue0 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HDR]_GlobalThemeColor1 ("Theme Color 1", Color ) = (1, 1, 1, 1) + _GlobalThemeHue1 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed1 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation1 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue1 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HDR]_GlobalThemeColor2 ("Theme Color 2", Color ) = (1, 1, 1, 1) + _GlobalThemeHue2 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed2 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation2 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue2 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HDR]_GlobalThemeColor3 ("Theme Color 3", Color ) = (1, 1, 1, 1) + _GlobalThemeHue3 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed3 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation3 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue3 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HideInInspector] m_end_GlobalThemes ("Global Themes", Float ) = 0 + [HideInInspector] m_start_GlobalMask ("Global Mask--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/global-masks},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalMaskModifiers ("Modifiers", Float) = 0 + [HideInInspector] m_end_GlobalMaskModifiers ("", Float) = 0 + [HideInInspector] m_end_GlobalMask ("Global Mask", Float) = 0 + [HideInInspector] m_end_PoiGlobalCategory ("Global Data and Masks ", Float) = 0 + [HideInInspector] m_start_PoiUVCategory ("UVs", Float) = 0 + [HideInInspector] m_start_Stochastic ("Stochastic Sampling--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/stochastic-sampling},hover:Documentation}}", Float) = 0 + [KeywordEnum(Deliot Heitz, Hextile, None)] _StochasticMode ("Sampling Mode", Float) = 0 + [HideInInspector] s_start_deliot ("Deliot Heitz--{persistent_expand:true,default_expand:false,condition_show:_StochasticMode==0}", Float) = 0 + _StochasticDeliotHeitzDensity ("Detiling Density", Range(0.1, 10)) = 1 + [HideInInspector] s_end_deliot ("Deliot Heitz", Float) = 0 + [HideInInspector] m_end_Stochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector] m_start_uvLocalWorld ("Local World UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/local-world-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos0 ("Local X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos1 ("Local Y", Int) = 1 + [Space(10)] + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos0 ("World X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos1 ("World Y", Int) = 2 + [HideInInspector] m_end_uvLocalWorld ("Local World UV", Float) = 0 + [HideInInspector] m_start_uvPanosphere ("Panosphere UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/panosphere-uv},hover:Documentation}}", Float) = 0 + [ToggleUI] _StereoEnabled ("Stereo Enabled", Float) = 0 + [ToggleUI] _PanoUseBothEyes ("Perspective Correct (VR)", Float) = 1 + [HideInInspector] m_end_uvPanosphere ("Panosphere UV", Float) = 0 + [HideInInspector] m_start_uvPolar ("Polar UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/polar-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8)] _PolarUV ("UV", Int) = 0 + [Vector2]_PolarCenter ("Center Coordinate", Vector) = (.5, .5, 0, 0) + _PolarRadialScale ("Radial Scale", Float) = 1 + _PolarLengthScale ("Length Scale", Float) = 1 + _PolarSpiralPower ("Spiral Power", Float) = 0 + [HideInInspector] m_end_uvPolar ("Polar UV", Float) = 0 + [HideInInspector] m_end_PoiUVCategory ("UVs ", Float) = 0 + [HideInInspector] m_start_PoiPostProcessingCategory ("Post Processing", Float) = 0 + [HideInInspector] m_start_PPAnimations ("PP Animations--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/post-processing/pp-animations},hover:Documentation}}", Float) = 0 + [Helpbox(1)] _PPHelp ("This section meant for real time adjustments through animations and not to be changed in unity", Int) = 0 + _PPLightingMultiplier ("Lighting Mulitplier", Float) = 1 + _PPLightingAddition ("Lighting Add", Float) = 0 + _PPEmissionMultiplier ("Emission Multiplier", Float) = 1 + _PPFinalColorMultiplier ("Final Color Multiplier", Float) = 1 + [HideInInspector] m_end_PPAnimations ("PP Animations ", Float) = 0 + [HideInInspector] m_end_PoiPostProcessingCategory ("Post Processing ", Float) = 0 + [HideInInspector] m_thirdpartyCategory ("Third Party", Float) = 0 + [HideInInspector] m_renderingCategory ("Rendering--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/main},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.CullMode)] _Cull ("Cull", Float) = 2 + [DoNotAnimate][Enum(UnityEngine.Rendering.CompareFunction)] _ZTest ("ZTest", Float) = 4 + [DoNotAnimate][Enum(Off, 0, On, 1)] _ZWrite ("ZWrite", Int) = 1 + [DoNotAnimate][ThryMask(Thry.ColorMaskFlags)] _ColorMask ("Color Mask", Int) = 15 + [DoNotAnimate] _OffsetFactor ("Offset Factor", Float) = 0.0 + [DoNotAnimate] _OffsetUnits ("Offset Units", Float) = 0.0 + [DoNotAnimate][ToggleUI] _RenderingReduceClipDistance ("Reduce Clip Distance", Float) = 0 + [DoNotAnimate][ToggleUI] _ZClip ("Z Clip", Float) = 1 + [DoNotAnimate][ToggleUI] _IgnoreFog ("Ignore Fog", Float) = 0 + [DoNotAnimate][ToggleUI]_FlipBackfaceNormals ("Flip Backface Normals", Int) = 1 + [DoNotAnimate][HideInInspector] Instancing ("Instancing", Float) = 0 //add this property for instancing variants settings to be shown + [ToggleUI] _RenderingEarlyZEnabled ("Early Z", Float) = 0 + [HideInInspector] m_start_blending ("Blending--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/blending},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOp ("RGB Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlend ("RGB Destination Blend", Int) = 0 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOp ("RGB Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlend ("RGB Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_start_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOpAlpha ("Alpha Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlendAlpha ("Alpha Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlendAlpha ("Alpha Destination Blend", Int) = 10 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOpAlpha ("Alpha Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlendAlpha ("Alpha Source Blend", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlendAlpha ("Alpha Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_end_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [HideInInspector] m_end_blending ("Blending", Float) = 0 + [HideInInspector] m_start_StencilPassOptions ("Stencil--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/stencil},hover:Documentation}}", Float) = 0 + [ThryWideEnum(Simple, 0, Front Face vs Back Face, 1)] _StencilType ("Stencil Type", Float) = 0 + [IntRange] _StencilRef ("Stencil Reference Value", Range(0, 255)) = 0 + [IntRange] _StencilReadMask ("Stencil ReadMask Value", Range(0, 255)) = 255 + [IntRange] _StencilWriteMask ("Stencil WriteMask Value", Range(0, 255)) = 255 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilPassOp ("Stencil Pass Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFailOp ("Stencil Fail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilZFailOp ("Stencil ZFail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilCompareFunction ("Stencil Compare Function--{condition_showS:(_StencilType==0)}", Float) = 8 + [HideInInspector] m_start_StencilPassBackOptions("Back--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp0 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackPassOp ("Back Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackFailOp ("Back Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackZFailOp ("Back ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilBackCompareFunction ("Back Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassBackOptions("Back", Float) = 0 + [HideInInspector] m_start_StencilPassFrontOptions("Front--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp1 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontPassOp ("Front Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontFailOp ("Front Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontZFailOp ("Front ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilFrontCompareFunction ("Front Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassFrontOptions("Front", Float) = 0 + [HideInInspector] m_end_StencilPassOptions ("Stencil", Float) = 0 + } + SubShader + { + Tags { "RenderType" = "Opaque" "Queue" = "Geometry" "VRCFallback" = "Standard" } + Pass + { + Name "Base" + Tags { "LightMode" = "ForwardBase" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Back + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define FINALPASS + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_DETAILNORMALMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdbase + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #pragma multi_compile_fragment _ VERTEXLIGHT_ON + #define POI_PASS_BASE + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + #ifndef VRC_LIGHT_VOLUMES_INCLUDED + #define VRC_LIGHT_VOLUMES_INCLUDED + #define VRCLV_VERSION 2 + #define VRCLV_MAX_VOLUMES_COUNT 32 + #define VRCLV_MAX_LIGHTS_COUNT 128 + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + cbuffer LightVolumeUniforms { + #endif + uniform float _UdonLightVolumeEnabled; + uniform float _UdonLightVolumeVersion; + uniform float _UdonLightVolumeCount; + uniform float _UdonLightVolumeAdditiveMaxOverdraw; + uniform float _UdonLightVolumeAdditiveCount; + uniform float _UdonLightVolumeProbesBlend; + uniform float _UdonLightVolumeSharpBounds; + uniform float4x4 _UdonLightVolumeInvWorldMatrix[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeRotation[VRCLV_MAX_VOLUMES_COUNT * 2]; // Legacy! Used in this version to have back compatibility with older worlds. Array commented above will be used in future releases! Legacy! + uniform float3 _UdonLightVolumeInvLocalEdgeSmooth[VRCLV_MAX_VOLUMES_COUNT]; + uniform float3 _UdonLightVolumeUvw[VRCLV_MAX_VOLUMES_COUNT * 6]; // Legacy! AABB Bounds of islands on the 3D Texture atlas. Array commented above will be used in future releases! Legacy! + uniform float4 _UdonLightVolumeOcclusionUvw[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeColor[VRCLV_MAX_VOLUMES_COUNT]; + uniform float _UdonPointLightVolumeCount; + uniform float _UdonPointLightVolumeCubeCount; + uniform float4 _UdonPointLightVolumePosition[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeColor[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeDirection[VRCLV_MAX_LIGHTS_COUNT]; + uniform float3 _UdonPointLightVolumeCustomID[VRCLV_MAX_LIGHTS_COUNT]; + uniform float _UdonLightBrightnessCutoff; + uniform float _UdonLightVolumeOcclusionCount; + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + } + #endif + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + uniform Texture3D _UdonLightVolume; + uniform SamplerState sampler_UdonLightVolume; + uniform Texture2DArray _UdonPointLightVolumeTexture; + #define LV_SAMPLE(tex, uvw) tex.SampleLevel(sampler_UdonLightVolume, uvw, 0) + #else + #define LV_SAMPLE(tex, uvw) float4(0,0,0,0) + #endif + #define LV_PI 3.141592653589793f + #define LV_PI2 6.283185307179586f + float LV_Smoothstep01(float x) { + return x * x * (3 - 2 * x); + } + float3 LV_MultiplyVectorByQuaternion(float3 v, float4 q) { + float3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); + } + float3 LV_MultiplyVectorByMatrix2x3(float3 v, float3 r0, float3 r1) { + float3 r2 = cross(r0, r1); + return float3(dot(v, r0), dot(v, r1), dot(v, r2)); + } + float LV_FastAcos(float x) { + float absX = abs(x); + float res = -0.156583f * absX + LV_PI * 0.5f; + res *= sqrt(1.0f - absX); + return (x >= 0) ? res : (LV_PI - res); + } + float LV_DistributionGGX(float NoH, float roughness) { + float f = (roughness - 1) * ((roughness + 1) * (NoH * NoH)) + 1; + return (roughness * roughness) / ((float) LV_PI * f * f); + } + bool LV_PointLocalAABB(float3 localUVW) { + return all(abs(localUVW) <= 0.5); + } + float3 LV_LocalFromVolume(uint volumeID, float3 worldPos) { + return mul(_UdonLightVolumeInvWorldMatrix[volumeID], float4(worldPos, 1.0)).xyz; + } + float LV_EvaluateSH(float L0, float3 L1, float3 n) { + return L0 + dot(L1, n); + } + float4 LV_SampleCubemapArray(uint id, float3 dir) { + float3 absDir = abs(dir); + float2 uv; + uint face; + if (absDir.x >= absDir.y && absDir.x >= absDir.z) { + face = dir.x > 0 ? 0 : 1; + uv = float2((dir.x > 0 ? -dir.z : dir.z), -dir.y) * rcp(absDir.x); + } else if (absDir.y >= absDir.z) { + face = dir.y > 0 ? 2 : 3; + uv = float2(dir.x, (dir.y > 0 ? dir.z : -dir.z)) * rcp(absDir.y); + } else { + face = dir.z > 0 ? 4 : 5; + uv = float2((dir.z > 0 ? dir.x : -dir.x), -dir.y) * rcp(absDir.z); + } + float3 uvid = float3(uv * 0.5 + 0.5, id * 6 + face); + return LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + } + float4 LV_ProjectQuadLightIrradianceSH(float3 shadingPosition, float3 lightVertices[4]) { + [unroll] for (uint edge0 = 0; edge0 < 4; edge0++) { + lightVertices[edge0] = normalize(lightVertices[edge0] - shadingPosition); + } + const float3 zhDir0 = float3(0.866025, -0.500001, -0.000004); + const float3 zhDir1 = float3(-0.759553, 0.438522, -0.480394); + const float3 zhDir2 = float3(-0.000002, 0.638694, 0.769461); + const float3 zhWeightL1y = float3(2.1995339f, 2.50785367f, 1.56572711f); + const float3 zhWeightL1z = float3(-1.82572523f, -2.08165037f, 0.00000000f); + const float3 zhWeightL1x = float3(2.42459869f, 1.44790525f, 0.90397552f); + float solidAngle = 0.0; + float3 surfaceIntegral = 0.0; + [loop] for (uint edge1 = 0; edge1 < 4; edge1++) { + uint next = (edge1 + 1) % 4; + uint prev = (edge1 + 4 - 1) % 4; + float3 prevVert = lightVertices[prev]; + float3 thisVert = lightVertices[edge1]; + float3 nextVert = lightVertices[next]; + float3 a = cross(thisVert, prevVert); + float3 b = cross(thisVert, nextVert); + float lenA = length(a); + float lenB = length(b); + solidAngle += LV_FastAcos(clamp(dot(a, b) / (lenA * lenB), -1, 1)); + float3 mu = b * rcp(lenB); + float cosGamma = dot(thisVert, nextVert); + float gamma = LV_FastAcos(clamp(cosGamma, -1, 1)); + surfaceIntegral.x += gamma * dot(zhDir0, mu); + surfaceIntegral.y += gamma * dot(zhDir1, mu); + surfaceIntegral.z += gamma * dot(zhDir2, mu); + } + solidAngle = solidAngle - LV_PI2; + surfaceIntegral *= 0.5; + const float normalizationL0 = 0.5f * sqrt(1.0f / LV_PI); + float l0 = normalizationL0 * solidAngle; + float l1y = dot(zhWeightL1y, surfaceIntegral); + float l1z = dot(zhWeightL1z, surfaceIntegral); + float l1x = dot(zhWeightL1x, surfaceIntegral); + const float cosineKernelL0 = LV_PI; // (1) + const float cosineKernelL1 = LV_PI2 / 3.0f; // (1) + const float oneOverPi = 1.0f / LV_PI; // (2) + const float normalizationL1 = 0.5f * sqrt(3.0f / LV_PI); // (3) + const float weightL0 = cosineKernelL0 * normalizationL0 * oneOverPi; // (1), (2), (3) + const float weightL1 = cosineKernelL1 * normalizationL1 * oneOverPi; // (1), (2), (3) + l0 *= weightL0; + l1y *= weightL1; + l1z *= weightL1; + l1x *= weightL1; + return float4(l1x, l1y, l1z, l0); + } + void LV_QuadLight(float3 worldPos, float3 centroidPos, float4 rotationQuat, float2 size, float3 color, float sqMaxDist, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 lightToWorldPos = worldPos - centroidPos; + float3 normal = LV_MultiplyVectorByQuaternion(float3(0, 0, 1), rotationQuat); + if (dot(normal, lightToWorldPos) < 0.0) return; + float sqCutoffDist = sqMaxDist - dot(lightToWorldPos, lightToWorldPos); + color.rgb *= saturate(sqCutoffDist / sqMaxDist) * LV_PI * occlusion; + float2 halfSize = size * 0.5f; + float3 xAxis = LV_MultiplyVectorByQuaternion(float3(1, 0, 0), rotationQuat); + float3 yAxis = cross(normal, xAxis); + float3 verts[4]; + verts[0] = centroidPos + (-halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[1] = centroidPos + ( halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[2] = centroidPos + ( halfSize.x * xAxis) + (-halfSize.y * yAxis); + verts[3] = centroidPos + (-halfSize.x * xAxis) + (-halfSize.y * yAxis); + float4 areaLightSH = LV_ProjectQuadLightIrradianceSH(worldPos, verts); + float lenL1 = length(areaLightSH.xyz); + if (lenL1 > areaLightSH.w) areaLightSH.xyz *= areaLightSH.w / lenL1; + L0 += areaLightSH.w * color.rgb; + L1r += areaLightSH.xyz * color.r; + L1g += areaLightSH.xyz * color.g; + L1b += areaLightSH.xyz * color.b; + count++; + } + float3 LV_PointLightAttenuation(float sqdist, float sqlightSize, float3 color, float brightnessCutoff, float sqMaxDist) { + float mask = saturate(1 - sqdist / sqMaxDist); + return mask * mask * color * sqlightSize / (sqdist + sqlightSize); + } + float LV_PointLightSolidAngle(float sqdist, float sqlightSize) { + return saturate(sqrt(sqdist / (sqlightSize + sqdist))); + } + void LV_SphereLight(float sqdist, float3 dirN, float sqlightSize, float3 color, float occlusion, float sqMaxDist, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 att = LV_PointLightAttenuation(sqdist, sqlightSize, color, _UdonLightBrightnessCutoff, sqMaxDist); + float3 l0 = att * occlusion; + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLight(float sqdist, float3 dirN, float sqlightSize, float3 att, float spotMask, float cosAngle, float coneFalloff, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float smoothedCone = LV_Smoothstep01(saturate(spotMask * coneFalloff)); + float3 l0 = att * (occlusion * smoothedCone); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * saturate(1 - cosAngle)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightCookie(float sqdist, float3 dirN, float sqlightSize, float3 att, float4 lightRot, float tanAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 localDir = LV_MultiplyVectorByQuaternion(-dirN, lightRot); + float2 uv = localDir.xy * rcp(localDir.z * tanAngle); + if ( + localDir.z <= 0.0 || // Culling by direction + abs(uv.x) > 1.0 || abs(uv.y) > 1.0 // Culling by UV + ) return; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 - customId - 1; + float3 uvid = float3(uv * 0.5 + 0.5, id); + float angleSize = saturate(rsqrt(1 + tanAngle * tanAngle)); + float4 cookie = LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + float3 l0 = att * cookie.rgb * (cookie.a * occlusion); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * (1 - angleSize)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightAttenuationLUT(float sqdist, float3 dirN, float sqlightSize, float3 color, float spotMask, float cosAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float dirRadius = sqdist * abs(sqlightSize); + float spot = 1 - saturate(spotMask * rcp(1 - cosAngle)); + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId - 1; + float3 uvid = float3(sqrt(float2(spot, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * occlusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } + void LV_PointLight(uint id, float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 customID_data = _UdonPointLightVolumeCustomID[id]; + int shadowId = (int) customID_data.y; // Shadowmask id + int customId = (int) customID_data.x; // Custom Texture ID + float sqrRange = customID_data.z; // Squared culling distance + float4 pos = _UdonPointLightVolumePosition[id]; // Light position and inversed squared range + float3 dir = pos.xyz - worldPos; + float sqlen = max(dot(dir, dir), 1e-6); + if (sqlen > sqrRange) return; // Early distance based culling + float3 dirN = dir * rsqrt(sqlen); + float lightOcclusion = 1; + if (_UdonLightVolumeOcclusionCount != 0 && shadowId >= 0) { + lightOcclusion = dot(occlusion, float4(shadowId == 0, shadowId == 1, shadowId == 2, shadowId == 3)); + } + float4 color = _UdonPointLightVolumeColor[id]; // Color, angle + float4 ldir = _UdonPointLightVolumeDirection[id]; // Dir + falloff or Rotation + if (pos.w < 0) { // It is a spot light + float angle = color.w; + float spotMask = dot(ldir.xyz, -dirN) - angle; + if(customId >= 0 && spotMask < 0) return; // Spot cone based culling + if (customId > 0) { // If it uses Attenuation LUT + LV_SphereSpotLightAttenuationLUT(sqlen, dirN, -pos.w, color.rgb, spotMask, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + float3 att = LV_PointLightAttenuation(sqlen, -pos.w, color.rgb, _UdonLightBrightnessCutoff, sqrRange); + if (customId < 0) { // If uses cookie + LV_SphereSpotLightCookie(sqlen, dirN, -pos.w, att, ldir, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + LV_SphereSpotLight(sqlen, dirN, -pos.w, att, spotMask, angle, ldir.w, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + } else if (color.w <= 1.5f) { // It is a point light + if (customId > 0) { // Using LUT + float invSqRange = abs(pos.w); // Sign of range defines if it's point light (positive) or a spot light (negative) + float dirRadius = sqlen * invSqRange; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId; + float3 uvid = float3(sqrt(float2(0, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * lightOcclusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } else { // If it uses default parametric attenuation + float3 l0 = 0, l1r = 0, l1g = 0, l1b = 0; + LV_SphereLight(sqlen, dirN, pos.w, color.rgb, lightOcclusion, sqrRange, l0, l1r, l1g, l1b, count); + float3 cubeColor = 1; + if (customId < 0) { // If it uses a cubemap + uint id = -customId - 1; // Cubemap ID starts from zero and should not take in count texture array slices count. + cubeColor = LV_SampleCubemapArray(id, LV_MultiplyVectorByQuaternion(dirN, ldir)).xyz; + } + L0 += l0 * cubeColor; + L1r += l1r * cubeColor.r; + L1g += l1g * cubeColor.g; + L1b += l1b * cubeColor.b; + } + } else { // It is an area light + LV_QuadLight(worldPos, pos.xyz, ldir, float2(pos.w, color.w - 2.0f), color.rgb, sqrRange, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + void LV_SampleLightVolumeTex(float3 uvw0, float3 uvw1, float3 uvw2, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b) { + float4 tex0 = LV_SAMPLE(_UdonLightVolume, uvw0); + float4 tex1 = LV_SAMPLE(_UdonLightVolume, uvw1); + float4 tex2 = LV_SAMPLE(_UdonLightVolume, uvw2); + L0 = tex0.rgb; + L1r = float3(tex1.r, tex2.r, tex0.a); + L1g = float3(tex1.g, tex2.g, tex1.a); + L1b = float3(tex1.b, tex2.b, tex2.a); + } + float LV_BoundsMask(float3 localUVW, float3 invLocalEdgeSmooth) { + float3 distToMin = (localUVW + 0.5) * invLocalEdgeSmooth; + float3 distToMax = (0.5 - localUVW) * invLocalEdgeSmooth; + float3 fade = saturate(min(distToMin, distToMax)); + return fade.x * fade.y * fade.z; + } + void LV_SampleLightProbe(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz; + L1g += unity_SHAg.xyz; + L1b += unity_SHAb.xyz; + } + void LV_SampleLightProbeDering(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz * 0.565f; + L1g += unity_SHAg.xyz * 0.565f; + L1b += unity_SHAb.xyz * 0.565f; + } + void LV_SampleVolume(uint id, float3 localUVW, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + float3 uvw0 = uvwScaled + _UdonLightVolumeUvw[uvwID].xyz; + float3 uvw1 = uvwScaled + _UdonLightVolumeUvw[uvwID + 2].xyz; + float3 uvw2 = uvwScaled + _UdonLightVolumeUvw[uvwID + 4].xyz; + float3 l0, l1r, l1g, l1b; + LV_SampleLightVolumeTex(uvw0, uvw1, uvw2, l0, l1r, l1g, l1b); + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + occlusion = 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + occlusion = 1; + } + float4 color = _UdonLightVolumeColor[id]; + L0 += l0 * color.rgb; + l1r *= color.r; + l1g *= color.g; + l1b *= color.b; + if (color.a != 0) { + float3 r0 = _UdonLightVolumeRotation[id * 2].xyz; + float3 r1 = _UdonLightVolumeRotation[id * 2 + 1].xyz; + L1r += LV_MultiplyVectorByMatrix2x3(l1r, r0, r1); + L1g += LV_MultiplyVectorByMatrix2x3(l1g, r0, r1); + L1b += LV_MultiplyVectorByMatrix2x3(l1b, r0, r1); + } else { + L1r += l1r; + L1g += l1g; + L1b += l1b; + } + } + float4 LV_SampleVolumeOcclusion(uint id, float3 localUVW) { + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + return 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + return 1; + } + } + void LV_PointLightVolumeSH(float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + uint pointCount = min((uint) _UdonPointLightVolumeCount, VRCLV_MAX_LIGHTS_COUNT); + if (pointCount == 0) return; + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_LIGHTS_COUNT); + uint pcount = 0; // Point lights counter + [loop] for (uint pid = 0; pid < pointCount && pcount < maxOverdraw; pid++) { + LV_PointLight(pid, worldPos, occlusion, L0, L1r, L1g, L1b, pcount); + } + } + void LV_LightVolumeSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + if (volumesCount == 0) { // Legacy! Fallback to default light probes if Light Volume are not enabled or a version is too old to have a support. Legacy! + LV_SampleLightProbe(L0, L1r, L1g, L1b); + return; + } + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + bool lightProbesBlend = _UdonLightVolumeProbesBlend; + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + [loop] for (uint id = 0; id < volumesCount; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA && lightProbesBlend) { + LV_SampleLightProbe(L0, L1r, L1g, L1b); + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + float3 L0_A = 0; + float3 L1r_A = 0; + float3 L1g_A = 0; + float3 L1b_A = 0; + float4 occlusion_A = 1; + LV_SampleVolume(volumeID_A, localUVW_A, L0_A, L1r_A, L1g_A, L1b_A, occlusion_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || isNoA || (_UdonLightVolumeSharpBounds && isNoB)) { // Returning SH A result if it's the center of mask or out of bounds + L0 += L0_A; + L1r += L1r_A; + L1g += L1g_A; + L1b += L1b_A; + occlusion = occlusion_A; + occlusion *= mOcclusion; + return; + } + float3 L0_B = 0; + float3 L1r_B = 0; + float3 L1g_B = 0; + float3 L1b_B = 0; + float4 occlusion_B = 1; + if (isNoB && lightProbesBlend) { // No Volume found and light volumes blending enabled + LV_SampleLightProbe(L0_B, L1r_B, L1g_B, L1b_B); + } else { // Blending Volume A and Volume B + localUVW_B = isNoB ? localUVW : localUVW_B; + volumeID_B = isNoB ? volumesCount - 1 : volumeID_B; + LV_SampleVolume(volumeID_B, localUVW_B, L0_B, L1r_B, L1g_B, L1b_B, occlusion_B); + } + occlusion = lerp(occlusion_B, occlusion_A, mask); + occlusion *= mOcclusion; + L0 += lerp(L0_B, L0_A, mask); + L1r += lerp(L1r_B, L1r_A, mask); + L1g += lerp(L1g_B, L1g_A, mask); + L1b += lerp(L1b_B, L1b_A, mask); + } + void LV_LightVolumeAdditiveSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + if (additiveCount == 0 && (uint) _UdonPointLightVolumeCount == 0) return; // Legacy! + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW for Y Axis and Free rotations + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + uint count = min(_UdonLightVolumeOcclusionCount == 0 ? additiveCount : volumesCount, VRCLV_MAX_VOLUMES_COUNT); // Only use all volumes if occlusion volumes are enabled + [loop] for (uint id = 0; id < count; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA || _UdonLightVolumeOcclusionCount == 0) { + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + occlusion = LV_SampleVolumeOcclusion(volumeID_A, localUVW_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || (_UdonLightVolumeSharpBounds && isNoB)) { + occlusion *= mOcclusion; + return; // Returning A result if it's the center of mask or out of bounds + } + if (isNoB) occlusion = lerp(1, occlusion, mask); + else occlusion = lerp(LV_SampleVolumeOcclusion(volumeID_B, localUVW_B), occlusion, mask); + occlusion *= mOcclusion; + } + float3 LightVolumeSpecular(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specColor = max(float3(dot(reflect(-L1r, worldNormal), viewDir), dot(reflect(-L1g, worldNormal), viewDir), dot(reflect(-L1b, worldNormal), viewDir)), 0); + float3 rDir = normalize(normalize(L1r) + viewDir); + float3 gDir = normalize(normalize(L1g) + viewDir); + float3 bDir = normalize(normalize(L1b) + viewDir); + float rNh = saturate(dot(worldNormal, rDir)); + float gNh = saturate(dot(worldNormal, gDir)); + float bNh = saturate(dot(worldNormal, bDir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float rSpec = LV_DistributionGGX(rNh, roughExp); + float gSpec = LV_DistributionGGX(gNh, roughExp); + float bSpec = LV_DistributionGGX(bNh, roughExp); + float3 specs = (rSpec + gSpec + bSpec) * f0; + float3 coloredSpecs = specs * specColor; + float3 a = coloredSpecs + specs * L0; + float3 b = coloredSpecs * 3; + return max(lerp(a, b, smoothness) * 0.5f, 0.0); + } + float3 LightVolumeSpecular(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecular(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeSpecularDominant(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 dominantDir = L1r + L1g + L1b; + float3 dir = normalize(normalize(dominantDir) + viewDir); + float nh = saturate(dot(worldNormal, dir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float spec = LV_DistributionGGX(nh, roughExp); + return max(spec * L0 * f0, 0.0) * 1.5f; + } + float3 LightVolumeSpecularDominant(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecularDominant(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeEvaluate(float3 worldNormal, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + return float3(LV_EvaluateSH(L0.r, L1r, worldNormal), LV_EvaluateSH(L0.g, L1g, worldNormal), LV_EvaluateSH(L0.b, L1b, worldNormal)); + } + void LightVolumeSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled == 0) { + LV_SampleLightProbeDering(L0, L1r, L1g, L1b); + } else { + float4 occlusion = 1; + LV_LightVolumeSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + void LightVolumeAdditiveSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled != 0) { + float4 occlusion = 1; + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + float3 LightVolumeSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float3 LightVolumeAdditiveSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return 0; + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float LightVolumesEnabled() { + return _UdonLightVolumeEnabled; + } + float LightVolumesVersion() { + return _UdonLightVolumeVersion == 0 ? _UdonLightVolumeEnabled : _UdonLightVolumeVersion; + } + #endif + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + #ifdef FINALPASS + #if defined(PROP_DETAILMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _DetailMask; + #endif + float4 _DetailMask_ST; + float2 _DetailMaskPan; + float _DetailMaskUV; + float _DetailMaskStochastic; + #if defined(PROP_DETAILNORMALMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _DetailNormalMap; + #endif + float4 _DetailNormalMap_ST; + float2 _DetailNormalMapPan; + float _DetailNormalMapUV; + float _DetailNormalMapScale; + float _DetailNormalMapStochastic; + float _DetailNormalGlobalMask; + float _DetailNormalGlobalMaskBlendType; + #if defined(PROP_DETAILTEX) || !defined(OPTIMIZER_ENABLED) + Texture2D _DetailTex; + #endif + float4 _DetailTex_ST; + float2 _DetailTexPan; + float _DetailTexUV; + float _DetailTexStochastic; + float3 _DetailTint; + float _DetailTintThemeIndex; + float _DetailTexIntensity; + float _DetailBrightness; + float _DetailTexGlobalMask; + float _DetailTexGlobalMaskBlendType; + #endif + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + #ifdef MOCHIE_PBR + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _MochieMetallicMaps; + float _PBRMapsStochastic; + #endif + float4 _MochieMetallicMaps_ST; + float2 _MochieMetallicMapsPan; + float _MochieMetallicMapsUV; + float _MochieMetallicMapsStochastic; + float _MochieMetallicMapInvert; + float _MochieRoughnessMapInvert; + float _MochieReflectionMaskInvert; + float _MochieSpecularMaskInvert; + float _MochieMetallicMapsMetallicChannel; + float _MochieMetallicMapsRoughnessChannel; + float _MochieMetallicMapsReflectionMaskChannel; + float _MochieMetallicMapsSpecularMaskChannel; + float _PBRNormalSelect; + float _MochieReflectionTintThemeIndex; + float _MochieSpecularTintThemeIndex; + float _MochieRoughnessMultiplier; + float _MochieMetallicMultiplier; + float _MochieReflectionStrength; + float _MochieSpecularStrength; + float4 _MochieSpecularTint; + float4 _MochieReflectionTint; + float _MochieLitFallback; + float _IgnoreCastedShadows; + float _PBRSplitMaskSample; + float _PBRSplitMaskStochastic; + float4 _PBRMaskScaleTiling; + float _MochieMetallicMasksUV; + float4 _MochieMetallicMasksPan; + float _Specular2ndLayer; + float _MochieSpecularStrength2; + float _MochieRoughnessMultiplier2; + float _RefSpecFresnelStrength; + float _SFExposureOcclusion; + TextureCube _MochieReflCube; + float4 _MochieReflCube_HDR; + float _MochieForceFallback; + float _MochieGSAAEnabled; + float _PoiGSAAVariance; + float _PoiGSAAThreshold; + float _BRDFTPSReflectionMaskStrength; + float _BRDFTPSSpecularMaskStrength; + float _BRDFTPSDepthEnabled; + float _MochieMetallicGlobalMask; + float _MochieMetallicGlobalMaskBlendType; + float _MochieSmoothnessGlobalMask; + float _MochieSmoothnessGlobalMaskBlendType; + float _MochieReflectionStrengthGlobalMask; + float _MochieReflectionStrengthGlobalMaskBlendType; + float _MochieSpecularStrengthGlobalMask; + float _MochieSpecularStrengthGlobalMaskBlendType; + #endif + float _PPLightingMultiplier; + float _PPLightingAddition; + float _PPEmissionMultiplier; + float _PPFinalColorMultiplier; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef FINALPASS + void ApplyDetailColor(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + #if defined(PROP_DETAILTEX) || !defined(OPTIMIZER_ENABLED) + half3 detailTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_DetailTex, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0).rgb * poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + #else + half3 detailTexture = 0.21763764082 * poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + #endif + poiFragData.baseColor.rgb *= LerpWhiteTo(detailTexture * 1.0 * unity_ColorSpaceDouble.rgb, poiMods.detailMask.r * 1.0); + } + void ApplyDetailNormal(inout PoiMods poiMods, inout PoiMesh poiMesh) + { + #if defined(PROP_DETAILMASK) || !defined(OPTIMIZER_ENABLED) + poiMods.detailMask = POI2D_SAMPLER_PAN_STOCHASTIC(_DetailMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0).rg; + #else + poiMods.detailMask = 1; + #endif + #ifdef POI_BACKFACE + if (!poiMesh.isFrontFace) + { + poiMods.detailMask.rg *= 1.0; + } + #endif + if (0.0 > 0) + { + poiMods.detailMask.r = maskBlend(poiMods.detailMask.r, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + poiMods.detailMask.g = maskBlend(poiMods.detailMask.g, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_DETAILNORMALMAP) || !defined(OPTIMIZER_ENABLED) + half3 detailNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_DetailNormalMap, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0), 0.38 * poiMods.detailMask.g); + poiMesh.tangentSpaceNormal = BlendNormals(detailNormal, poiMesh.tangentSpaceNormal); + #endif + } + #endif + #ifdef VIGNETTE_MASKED + #ifdef _LIGHTINGMODE_REALISTIC + #if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) + #if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) + #define SUBTRACTIVE_LIGHTING 1 + #endif + #endif + float FadeShadows(float attenuation, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if HANDLE_SHADOWS_BLENDING_IN_GI || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + #if ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + attenuation = poiLight.attenuation; + #endif + float viewZ = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float shadowFadeDistance = UnityComputeShadowFadeDistance(poiMesh.worldPos, viewZ); + float shadowFade = UnityComputeShadowFade(shadowFadeDistance); + float bakedAttenuation = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + attenuation = UnityMixRealtimeAndBakedShadows(attenuation, bakedAttenuation, shadowFade); + #endif + return attenuation; + } + void ApplySubtractiveLighting(inout UnityIndirect indirectLight, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if SUBTRACTIVE_LIGHTING + poiLight.attenuation = FadeShadows(poiLight.attenuation, poiLight, poiMesh, poiCam); + float ndotl = saturate(dot(poiMesh.normals[0], _WorldSpaceLightPos0.xyz)); + float3 shadowedLightEstimate = ndotl * (1 - poiLight.attenuation) * _LightColor0.rgb; + float3 subtractedLight = indirectLight.diffuse - shadowedLightEstimate; + subtractedLight = max(subtractedLight, unity_ShadowColor.rgb); + subtractedLight = lerp(subtractedLight, indirectLight.diffuse, _LightShadowData.x); + indirectLight.diffuse = min(subtractedLight, indirectLight.diffuse); + #endif + } + UnityIndirect CreateIndirectLight(in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight) + { + UnityIndirect indirectLight; + indirectLight.diffuse = 0; + indirectLight.specular = 0; + #if defined(LIGHTMAP_ON) + indirectLight.diffuse = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, poiMesh.lightmapUV.xy)); + #if defined(DIRLIGHTMAP_COMBINED) + float4 lightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, poiMesh.lightmapUV.xy); + indirectLight.diffuse = DecodeDirectionalLightmap(indirectLight.diffuse, lightmapDirection, poiMesh.normals[1]); + #endif + ApplySubtractiveLighting(indirectLight, poiLight, poiMesh, poiCam); + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float3 dynamicLightDiffuse = DecodeRealtimeLightmap( + UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, poiMesh.lightmapUV.zw) + ); + #if defined(DIRLIGHTMAP_COMBINED) + float4 dynamicLightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_DynamicDirectionality, unity_DynamicLightmap, poiMesh.lightmapUV.zw); + indirectLight.diffuse += DecodeDirectionalLightmap(dynamicLightDiffuse, dynamicLightmapDirection, poiMesh.normals[1]); + #else + indirectLight.diffuse += dynamicLightDiffuse; + #endif + #endif + #if !defined(LIGHTMAP_ON) && !defined(DYNAMICLIGHTMAP_ON) + #if UNITY_LIGHT_PROBE_PROXY_VOLUME + if (unity_ProbeVolumeParams.x == 1) + { + indirectLight.diffuse = SHEvalLinearL0L1_SampleProbeVolume( + float4(poiMesh.normals[1], 1), poiMesh.worldPos + ); + indirectLight.diffuse = max(0, indirectLight.diffuse); + #if defined(UNITY_COLORSPACE_GAMMA) + indirectLight.diffuse = LinearToGammaSpace(indirectLight.diffuse); + #endif + } + else + { + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + } + #else + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + #endif + #endif + indirectLight.diffuse *= poiLight.occlusion; + return indirectLight; + } + #endif + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_REALISTIC + UnityLight light; + light.dir = poiLight.direction; + light.color = max(0, _LightColor0.rgb) * saturate(shadowAttenuation * attenuation * poiLight.detailShadow); + light.ndotl = poiLight.nDotLSaturated; + UnityIndirect indirectLight = (UnityIndirect)0; + #ifdef UNITY_PASS_FORWARDBASE + indirectLight = CreateIndirectLight(poiMesh, poiCam, poiLight); + #endif + #ifdef UNITY_PASS_FORWARDBASE + light.color = max(light.color * 1.0, 0); + light.color = max(light.color + 0.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse * 1.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse + 0.0, 0); + #endif + poiLight.rampedLightMap = poiLight.nDotLSaturated; + poiLight.finalLighting = max(POI_BRDF_PBS(1, 0, 0, 0, poiMesh.normals[1], poiCam.viewDir, light, indirectLight).xyz, _LightingMinLightBrightness); + #ifdef UNITY_PASS_FORWARDBASE + if (_UdonLightVolumeEnabled && 1.0) + { + float3 L0 = 0; + float3 L1r = 0; + float3 L1g = 0; + float3 L1b = 0; + #ifdef LIGHTMAP_ON + LightVolumeAdditiveSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + poiLight.finalLighting += clamp(LightVolumeEvaluate(poiMesh.normals[1], L0, L1r, L1g, L1b), _LightingMinLightBrightness, _LightingCap); + #endif + } + #endif + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + #if defined(MOCHIE_PBR) || defined(POI_CLEARCOAT) + float GSAA_Filament(float3 worldNormal, float perceptualRoughness, float gsaaVariance, float gsaaThreshold) + { + float3 du = ddx(worldNormal); + float3 dv = ddy(worldNormal); + float variance = gsaaVariance * (dot(du, du) + dot(dv, dv)); + float roughness = perceptualRoughness * perceptualRoughness; + float kernelRoughness = min(2.0 * variance, gsaaThreshold); + float squareRoughness = saturate(roughness * roughness + kernelRoughness); + return sqrt(sqrt(squareRoughness)); + } + float3 GetWorldReflections(float3 reflDir, float3 worldPos, float roughness) + { + float3 baseReflDir = reflDir; + reflDir = BoxProjection(reflDir, worldPos, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax); + float4 envSample0 = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, reflDir, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p0 = DecodeHDR(envSample0, unity_SpecCube0_HDR); + float interpolator = unity_SpecCube0_BoxMin.w; + + if (interpolator < 0.99999) + { + float3 refDirBlend = BoxProjection(baseReflDir, worldPos, unity_SpecCube1_ProbePosition, unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax); + float4 envSample1 = UNITY_SAMPLE_TEXCUBE_SAMPLER_LOD(unity_SpecCube1, unity_SpecCube0, refDirBlend, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p1 = DecodeHDR(envSample1, unity_SpecCube1_HDR); + p0 = lerp(p1, p0, interpolator); + } + return p0; + } + float3 GetReflections(in PoiCam poiCam, in PoiLight pl, in PoiMesh poiMesh, float roughness, float ForceFallback, float LightFallback, TextureCube reflectionCube, float4 hdrData, float3 reflectionDir) + { + float3 reflections = 0; + float3 lighting = pl.finalLighting; + if (ForceFallback == 0) + { + + if (SceneHasReflections()) + { + #ifdef UNITY_PASS_FORWARDBASE + reflections = GetWorldReflections(reflectionDir, poiMesh.worldPos.xyz, roughness); + #endif + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + reflections *= pl.occlusion; + return reflections; + } + float GetGGXTerm(float nDotL, float nDotV, float nDotH, float roughness) + { + float visibilityTerm = 0; + if (nDotL > 0) + { + float lambdaV = nDotL * (nDotV * (1 - roughness) + roughness); + float lambdaL = nDotV * (nDotL * (1 - roughness) + roughness); + visibilityTerm = 0.5f / (lambdaV + lambdaL + 1e-5f); + float a = nDotH * roughness; + float k = roughness / (1.0 - nDotH * nDotH + a * a+ 1e-5f); + float dotTerm = k * k * UNITY_INV_PI; + visibilityTerm *= dotTerm; + } + return visibilityTerm; + } + void GetSpecFresTerm(float nDotL, float nDotV, float nDotH, float lDotH, inout float3 specularTerm, inout float3 fresnelTerm, float3 specCol, float roughness) + { + specularTerm = GetGGXTerm(nDotL, nDotV, nDotH, roughness); + fresnelTerm = FresnelTerm(specCol, lDotH); + specularTerm = max(0, specularTerm * max(0.00001, nDotL)); + } + float GetRoughness(float smoothness) + { + float rough = 1 - smoothness; + rough *= 1.7 - 0.7 * rough; + return rough; + } + float SFVisibility(float brdfRoughness, float3 directColor, float NDotV, float ExposureOcclusion) + { + float Visibility = saturate(length(directColor + EPSILON) * (1.0/(ExposureOcclusion))); //Using direct color because I think it should be generally more forgiving + return saturate(pow(NDotV + Visibility, exp2(-16.0 * brdfRoughness - 1.0)) - 1.0 + Visibility); + } + #endif + #ifdef MOCHIE_PBR + void MetallicAndSpecularFragDataInit(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + float smoothness = 0.0; + float smoothness2 = 1.0; + float metallic = 0.0; + float specularMask = 1; + float reflectionMask = 1; + smoothness *= poiFragData.smoothness; + smoothness2 *= poiFragData.smoothness2; + metallic *= poiFragData.metallic; + specularMask *= poiFragData.specularMask; + reflectionMask *= poiFragData.reflectionMask; + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + + if (0.0) + { + float4 PBRSplitMask = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy, 0.0); + assignValueToVectorFromIndex(PBRMaps, 2.0, PBRSplitMask[2.0]); + assignValueToVectorFromIndex(PBRMaps, 3.0, PBRSplitMask[3.0]); + } + if (0.0 < 4) + { + metallic *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + smoothness2 *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + reflectionMask *= 1.0; + specularMask *= 1.0; + if (0.0) + { + metallic = 1 - metallic; + } + if (0.0) + { + smoothness = 1 - smoothness; + smoothness2 = 1 - smoothness2; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + poiFragData.smoothness *= smoothness; + poiFragData.smoothness2 *= smoothness2; + poiFragData.metallic *= metallic; + poiFragData.specularMask *= specularMask; + poiFragData.reflectionMask *= reflectionMask; + } + void MochieBRDF(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, inout PoiMods poiMods) + { + float smoothness = poiFragData.smoothness; + float smoothness2 = poiFragData.smoothness2; + float metallic = poiFragData.metallic; + float specularMask = poiFragData.specularMask; + float reflectionMask = poiFragData.reflectionMask; + if (0.0 > 0) + { + metallic = customBlend(metallic, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + smoothness2 = customBlend(smoothness2, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef TPS_Penetrator + if (0.0) + { + reflectionMask = lerp(0, reflectionMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + specularMask = lerp(0, specularMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float roughness2 = GetRoughness(smoothness2); + float3 specCol = lerp(unity_ColorSpaceDielectricSpec.rgb, poiFragData.baseColor, metallic); + float omr = unity_ColorSpaceDielectricSpec.a - metallic * unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + float percepRough2 = 1 - smoothness2; + + if (1.0) + { + float3 normals = lerp(poiMesh.normals[0], poiMesh.normals[1], 1.0); + percepRough = GSAA_Filament(normals, percepRough, 0.15, 0.1); + if (0.0 == 1 && 1.0 > 0) + { + percepRough2 = GSAA_Filament(normals, percepRough2, 0.15, 0.1); + } + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float brdfRoughness2 = percepRough2 * percepRough2; + brdfRoughness2 = max(brdfRoughness2, 0.002); + float3 diffuse = poiFragData.baseColor; + float3 specular = 0; + float3 specular2 = 0; + float3 vSpecular = 0; + float3 vSpecular2 = 0; + float3 reflections = 0; + float3 environment = 0; + #if defined(POINT) || defined(SPOT) + float attenuation = lerp(poiLight.additiveShadow, 1, 0.0); + #else + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + #endif + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float pbrNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 1.0); + float pbrNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 1.0); + float pbrNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 1.0); + float3 pbrReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 1.0); + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + if (0.0 == 1) + { + float3 fresnelTerm = 1; + float3 specularTerm = 1; + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness2); + specular2 = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation * 1.0; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness2); + vSpecular2 += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * 1.0; + } + #endif + } + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _MochieReflCube, _MochieReflCube_HDR, pbrReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, pbrNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, pbrNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + reflections *= reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = max(specular + vSpecular, specular2 + vSpecular2); + environment += reflections; + diffuse *= poiLight.finalLighting; + poiFragData.finalColor = diffuse; + poiLight.finalLightAdd += environment; + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(1,1,1,1), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + #if defined(FINALPASS) && !defined(UNITY_PASS_SHADOWCASTER) && !defined(POI_PASS_OUTLINE) + ApplyDetailNormal(poiMods, poiMesh); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #if defined(MOCHIE_PBR) + MetallicAndSpecularFragDataInit(poiFragData, poiMesh, poiMods); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(0.02968646,0.02968646,0.02968646,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(0.02968646,0.02968646,0.02968646,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #ifdef FINALPASS + ApplyDetailColor(poiFragData, poiMesh, poiMods); + #endif + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #ifdef MOCHIE_PBR + MochieBRDF(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + #ifdef UNITY_PASS_FORWARDBASE + poiFragData.emission = max(poiFragData.emission * 1.0, 0); + poiFragData.finalColor = max(poiFragData.finalColor * 1.0, 0); + #endif + if (0.0 == POI_MODE_OPAQUE) + { + } + clip(poiFragData.alpha - 0.5); + if (0.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + poiFragData.finalColor += poiFragData.emission * poiMods.globalEmission; + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "Add" + Tags { "LightMode" = "ForwardAdd" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite Off + Cull Back + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_AddBlendOp], [_AddBlendOpAlpha] + Blend [_AddSrcBlend] [_AddDstBlend], [_AddSrcBlendAlpha] [_AddDstBlendAlpha] + CGPROGRAM + #define FINALPASS + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_DETAILNORMALMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdadd_fullshadows + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_ADD + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + #ifdef FINALPASS + #if defined(PROP_DETAILMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _DetailMask; + #endif + float4 _DetailMask_ST; + float2 _DetailMaskPan; + float _DetailMaskUV; + float _DetailMaskStochastic; + #if defined(PROP_DETAILNORMALMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _DetailNormalMap; + #endif + float4 _DetailNormalMap_ST; + float2 _DetailNormalMapPan; + float _DetailNormalMapUV; + float _DetailNormalMapScale; + float _DetailNormalMapStochastic; + float _DetailNormalGlobalMask; + float _DetailNormalGlobalMaskBlendType; + #if defined(PROP_DETAILTEX) || !defined(OPTIMIZER_ENABLED) + Texture2D _DetailTex; + #endif + float4 _DetailTex_ST; + float2 _DetailTexPan; + float _DetailTexUV; + float _DetailTexStochastic; + float3 _DetailTint; + float _DetailTintThemeIndex; + float _DetailTexIntensity; + float _DetailBrightness; + float _DetailTexGlobalMask; + float _DetailTexGlobalMaskBlendType; + #endif + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + #ifdef MOCHIE_PBR + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _MochieMetallicMaps; + float _PBRMapsStochastic; + #endif + float4 _MochieMetallicMaps_ST; + float2 _MochieMetallicMapsPan; + float _MochieMetallicMapsUV; + float _MochieMetallicMapsStochastic; + float _MochieMetallicMapInvert; + float _MochieRoughnessMapInvert; + float _MochieReflectionMaskInvert; + float _MochieSpecularMaskInvert; + float _MochieMetallicMapsMetallicChannel; + float _MochieMetallicMapsRoughnessChannel; + float _MochieMetallicMapsReflectionMaskChannel; + float _MochieMetallicMapsSpecularMaskChannel; + float _PBRNormalSelect; + float _MochieReflectionTintThemeIndex; + float _MochieSpecularTintThemeIndex; + float _MochieRoughnessMultiplier; + float _MochieMetallicMultiplier; + float _MochieReflectionStrength; + float _MochieSpecularStrength; + float4 _MochieSpecularTint; + float4 _MochieReflectionTint; + float _MochieLitFallback; + float _IgnoreCastedShadows; + float _PBRSplitMaskSample; + float _PBRSplitMaskStochastic; + float4 _PBRMaskScaleTiling; + float _MochieMetallicMasksUV; + float4 _MochieMetallicMasksPan; + float _Specular2ndLayer; + float _MochieSpecularStrength2; + float _MochieRoughnessMultiplier2; + float _RefSpecFresnelStrength; + float _SFExposureOcclusion; + TextureCube _MochieReflCube; + float4 _MochieReflCube_HDR; + float _MochieForceFallback; + float _MochieGSAAEnabled; + float _PoiGSAAVariance; + float _PoiGSAAThreshold; + float _BRDFTPSReflectionMaskStrength; + float _BRDFTPSSpecularMaskStrength; + float _BRDFTPSDepthEnabled; + float _MochieMetallicGlobalMask; + float _MochieMetallicGlobalMaskBlendType; + float _MochieSmoothnessGlobalMask; + float _MochieSmoothnessGlobalMaskBlendType; + float _MochieReflectionStrengthGlobalMask; + float _MochieReflectionStrengthGlobalMaskBlendType; + float _MochieSpecularStrengthGlobalMask; + float _MochieSpecularStrengthGlobalMaskBlendType; + #endif + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef FINALPASS + void ApplyDetailColor(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + #if defined(PROP_DETAILTEX) || !defined(OPTIMIZER_ENABLED) + half3 detailTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_DetailTex, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0).rgb * poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + #else + half3 detailTexture = 0.21763764082 * poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + #endif + poiFragData.baseColor.rgb *= LerpWhiteTo(detailTexture * 1.0 * unity_ColorSpaceDouble.rgb, poiMods.detailMask.r * 1.0); + } + void ApplyDetailNormal(inout PoiMods poiMods, inout PoiMesh poiMesh) + { + #if defined(PROP_DETAILMASK) || !defined(OPTIMIZER_ENABLED) + poiMods.detailMask = POI2D_SAMPLER_PAN_STOCHASTIC(_DetailMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0).rg; + #else + poiMods.detailMask = 1; + #endif + #ifdef POI_BACKFACE + if (!poiMesh.isFrontFace) + { + poiMods.detailMask.rg *= 1.0; + } + #endif + if (0.0 > 0) + { + poiMods.detailMask.r = maskBlend(poiMods.detailMask.r, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + poiMods.detailMask.g = maskBlend(poiMods.detailMask.g, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_DETAILNORMALMAP) || !defined(OPTIMIZER_ENABLED) + half3 detailNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_DetailNormalMap, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0), 0.38 * poiMods.detailMask.g); + poiMesh.tangentSpaceNormal = BlendNormals(detailNormal, poiMesh.tangentSpaceNormal); + #endif + } + #endif + #ifdef VIGNETTE_MASKED + #ifdef _LIGHTINGMODE_REALISTIC + #if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) + #if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) + #define SUBTRACTIVE_LIGHTING 1 + #endif + #endif + float FadeShadows(float attenuation, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if HANDLE_SHADOWS_BLENDING_IN_GI || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + #if ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + attenuation = poiLight.attenuation; + #endif + float viewZ = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float shadowFadeDistance = UnityComputeShadowFadeDistance(poiMesh.worldPos, viewZ); + float shadowFade = UnityComputeShadowFade(shadowFadeDistance); + float bakedAttenuation = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + attenuation = UnityMixRealtimeAndBakedShadows(attenuation, bakedAttenuation, shadowFade); + #endif + return attenuation; + } + void ApplySubtractiveLighting(inout UnityIndirect indirectLight, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if SUBTRACTIVE_LIGHTING + poiLight.attenuation = FadeShadows(poiLight.attenuation, poiLight, poiMesh, poiCam); + float ndotl = saturate(dot(poiMesh.normals[0], _WorldSpaceLightPos0.xyz)); + float3 shadowedLightEstimate = ndotl * (1 - poiLight.attenuation) * _LightColor0.rgb; + float3 subtractedLight = indirectLight.diffuse - shadowedLightEstimate; + subtractedLight = max(subtractedLight, unity_ShadowColor.rgb); + subtractedLight = lerp(subtractedLight, indirectLight.diffuse, _LightShadowData.x); + indirectLight.diffuse = min(subtractedLight, indirectLight.diffuse); + #endif + } + UnityIndirect CreateIndirectLight(in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight) + { + UnityIndirect indirectLight; + indirectLight.diffuse = 0; + indirectLight.specular = 0; + #if defined(LIGHTMAP_ON) + indirectLight.diffuse = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, poiMesh.lightmapUV.xy)); + #if defined(DIRLIGHTMAP_COMBINED) + float4 lightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, poiMesh.lightmapUV.xy); + indirectLight.diffuse = DecodeDirectionalLightmap(indirectLight.diffuse, lightmapDirection, poiMesh.normals[1]); + #endif + ApplySubtractiveLighting(indirectLight, poiLight, poiMesh, poiCam); + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float3 dynamicLightDiffuse = DecodeRealtimeLightmap( + UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, poiMesh.lightmapUV.zw) + ); + #if defined(DIRLIGHTMAP_COMBINED) + float4 dynamicLightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_DynamicDirectionality, unity_DynamicLightmap, poiMesh.lightmapUV.zw); + indirectLight.diffuse += DecodeDirectionalLightmap(dynamicLightDiffuse, dynamicLightmapDirection, poiMesh.normals[1]); + #else + indirectLight.diffuse += dynamicLightDiffuse; + #endif + #endif + #if !defined(LIGHTMAP_ON) && !defined(DYNAMICLIGHTMAP_ON) + #if UNITY_LIGHT_PROBE_PROXY_VOLUME + if (unity_ProbeVolumeParams.x == 1) + { + indirectLight.diffuse = SHEvalLinearL0L1_SampleProbeVolume( + float4(poiMesh.normals[1], 1), poiMesh.worldPos + ); + indirectLight.diffuse = max(0, indirectLight.diffuse); + #if defined(UNITY_COLORSPACE_GAMMA) + indirectLight.diffuse = LinearToGammaSpace(indirectLight.diffuse); + #endif + } + else + { + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + } + #else + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + #endif + #endif + indirectLight.diffuse *= poiLight.occlusion; + return indirectLight; + } + #endif + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_REALISTIC + UnityLight light; + light.dir = poiLight.direction; + light.color = max(0, _LightColor0.rgb) * saturate(shadowAttenuation * attenuation * poiLight.detailShadow); + light.ndotl = poiLight.nDotLSaturated; + UnityIndirect indirectLight = (UnityIndirect)0; + #ifdef UNITY_PASS_FORWARDBASE + indirectLight = CreateIndirectLight(poiMesh, poiCam, poiLight); + #endif + #ifdef UNITY_PASS_FORWARDBASE + light.color = max(light.color * 1.0, 0); + light.color = max(light.color + 0.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse * 1.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse + 0.0, 0); + #endif + poiLight.rampedLightMap = poiLight.nDotLSaturated; + poiLight.finalLighting = max(POI_BRDF_PBS(1, 0, 0, 0, poiMesh.normals[1], poiCam.viewDir, light, indirectLight).xyz, _LightingMinLightBrightness); + #ifdef UNITY_PASS_FORWARDBASE + if (_UdonLightVolumeEnabled && 1.0) + { + float3 L0 = 0; + float3 L1r = 0; + float3 L1g = 0; + float3 L1b = 0; + #ifdef LIGHTMAP_ON + LightVolumeAdditiveSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + poiLight.finalLighting += clamp(LightVolumeEvaluate(poiMesh.normals[1], L0, L1r, L1g, L1b), _LightingMinLightBrightness, _LightingCap); + #endif + } + #endif + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + #if defined(MOCHIE_PBR) || defined(POI_CLEARCOAT) + float GSAA_Filament(float3 worldNormal, float perceptualRoughness, float gsaaVariance, float gsaaThreshold) + { + float3 du = ddx(worldNormal); + float3 dv = ddy(worldNormal); + float variance = gsaaVariance * (dot(du, du) + dot(dv, dv)); + float roughness = perceptualRoughness * perceptualRoughness; + float kernelRoughness = min(2.0 * variance, gsaaThreshold); + float squareRoughness = saturate(roughness * roughness + kernelRoughness); + return sqrt(sqrt(squareRoughness)); + } + float3 GetWorldReflections(float3 reflDir, float3 worldPos, float roughness) + { + float3 baseReflDir = reflDir; + reflDir = BoxProjection(reflDir, worldPos, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax); + float4 envSample0 = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, reflDir, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p0 = DecodeHDR(envSample0, unity_SpecCube0_HDR); + float interpolator = unity_SpecCube0_BoxMin.w; + + if (interpolator < 0.99999) + { + float3 refDirBlend = BoxProjection(baseReflDir, worldPos, unity_SpecCube1_ProbePosition, unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax); + float4 envSample1 = UNITY_SAMPLE_TEXCUBE_SAMPLER_LOD(unity_SpecCube1, unity_SpecCube0, refDirBlend, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p1 = DecodeHDR(envSample1, unity_SpecCube1_HDR); + p0 = lerp(p1, p0, interpolator); + } + return p0; + } + float3 GetReflections(in PoiCam poiCam, in PoiLight pl, in PoiMesh poiMesh, float roughness, float ForceFallback, float LightFallback, TextureCube reflectionCube, float4 hdrData, float3 reflectionDir) + { + float3 reflections = 0; + float3 lighting = pl.finalLighting; + if (ForceFallback == 0) + { + + if (SceneHasReflections()) + { + #ifdef UNITY_PASS_FORWARDBASE + reflections = GetWorldReflections(reflectionDir, poiMesh.worldPos.xyz, roughness); + #endif + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + reflections *= pl.occlusion; + return reflections; + } + float GetGGXTerm(float nDotL, float nDotV, float nDotH, float roughness) + { + float visibilityTerm = 0; + if (nDotL > 0) + { + float lambdaV = nDotL * (nDotV * (1 - roughness) + roughness); + float lambdaL = nDotV * (nDotL * (1 - roughness) + roughness); + visibilityTerm = 0.5f / (lambdaV + lambdaL + 1e-5f); + float a = nDotH * roughness; + float k = roughness / (1.0 - nDotH * nDotH + a * a+ 1e-5f); + float dotTerm = k * k * UNITY_INV_PI; + visibilityTerm *= dotTerm; + } + return visibilityTerm; + } + void GetSpecFresTerm(float nDotL, float nDotV, float nDotH, float lDotH, inout float3 specularTerm, inout float3 fresnelTerm, float3 specCol, float roughness) + { + specularTerm = GetGGXTerm(nDotL, nDotV, nDotH, roughness); + fresnelTerm = FresnelTerm(specCol, lDotH); + specularTerm = max(0, specularTerm * max(0.00001, nDotL)); + } + float GetRoughness(float smoothness) + { + float rough = 1 - smoothness; + rough *= 1.7 - 0.7 * rough; + return rough; + } + float SFVisibility(float brdfRoughness, float3 directColor, float NDotV, float ExposureOcclusion) + { + float Visibility = saturate(length(directColor + EPSILON) * (1.0/(ExposureOcclusion))); //Using direct color because I think it should be generally more forgiving + return saturate(pow(NDotV + Visibility, exp2(-16.0 * brdfRoughness - 1.0)) - 1.0 + Visibility); + } + #endif + #ifdef MOCHIE_PBR + void MetallicAndSpecularFragDataInit(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + float smoothness = 0.0; + float smoothness2 = 1.0; + float metallic = 0.0; + float specularMask = 1; + float reflectionMask = 1; + smoothness *= poiFragData.smoothness; + smoothness2 *= poiFragData.smoothness2; + metallic *= poiFragData.metallic; + specularMask *= poiFragData.specularMask; + reflectionMask *= poiFragData.reflectionMask; + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + + if (0.0) + { + float4 PBRSplitMask = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy, 0.0); + assignValueToVectorFromIndex(PBRMaps, 2.0, PBRSplitMask[2.0]); + assignValueToVectorFromIndex(PBRMaps, 3.0, PBRSplitMask[3.0]); + } + if (0.0 < 4) + { + metallic *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + smoothness2 *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + reflectionMask *= 1.0; + specularMask *= 1.0; + if (0.0) + { + metallic = 1 - metallic; + } + if (0.0) + { + smoothness = 1 - smoothness; + smoothness2 = 1 - smoothness2; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + poiFragData.smoothness *= smoothness; + poiFragData.smoothness2 *= smoothness2; + poiFragData.metallic *= metallic; + poiFragData.specularMask *= specularMask; + poiFragData.reflectionMask *= reflectionMask; + } + void MochieBRDF(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, inout PoiMods poiMods) + { + float smoothness = poiFragData.smoothness; + float smoothness2 = poiFragData.smoothness2; + float metallic = poiFragData.metallic; + float specularMask = poiFragData.specularMask; + float reflectionMask = poiFragData.reflectionMask; + if (0.0 > 0) + { + metallic = customBlend(metallic, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + smoothness2 = customBlend(smoothness2, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef TPS_Penetrator + if (0.0) + { + reflectionMask = lerp(0, reflectionMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + specularMask = lerp(0, specularMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float roughness2 = GetRoughness(smoothness2); + float3 specCol = lerp(unity_ColorSpaceDielectricSpec.rgb, poiFragData.baseColor, metallic); + float omr = unity_ColorSpaceDielectricSpec.a - metallic * unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + float percepRough2 = 1 - smoothness2; + + if (1.0) + { + float3 normals = lerp(poiMesh.normals[0], poiMesh.normals[1], 1.0); + percepRough = GSAA_Filament(normals, percepRough, 0.15, 0.1); + if (0.0 == 1 && 1.0 > 0) + { + percepRough2 = GSAA_Filament(normals, percepRough2, 0.15, 0.1); + } + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float brdfRoughness2 = percepRough2 * percepRough2; + brdfRoughness2 = max(brdfRoughness2, 0.002); + float3 diffuse = poiFragData.baseColor; + float3 specular = 0; + float3 specular2 = 0; + float3 vSpecular = 0; + float3 vSpecular2 = 0; + float3 reflections = 0; + float3 environment = 0; + #if defined(POINT) || defined(SPOT) + float attenuation = lerp(poiLight.additiveShadow, 1, 0.0); + #else + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + #endif + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float pbrNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 1.0); + float pbrNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 1.0); + float pbrNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 1.0); + float3 pbrReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 1.0); + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + if (0.0 == 1) + { + float3 fresnelTerm = 1; + float3 specularTerm = 1; + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness2); + specular2 = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation * 1.0; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness2); + vSpecular2 += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * 1.0; + } + #endif + } + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _MochieReflCube, _MochieReflCube_HDR, pbrReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, pbrNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, pbrNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + reflections *= reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = max(specular + vSpecular, specular2 + vSpecular2); + environment += reflections; + diffuse *= poiLight.finalLighting; + poiFragData.finalColor = diffuse; + poiLight.finalLightAdd += environment; + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(1,1,1,1), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + #if defined(FINALPASS) && !defined(UNITY_PASS_SHADOWCASTER) && !defined(POI_PASS_OUTLINE) + ApplyDetailNormal(poiMods, poiMesh); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #if defined(MOCHIE_PBR) + MetallicAndSpecularFragDataInit(poiFragData, poiMesh, poiMods); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(0.02968646,0.02968646,0.02968646,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(0.02968646,0.02968646,0.02968646,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #ifdef FINALPASS + ApplyDetailColor(poiFragData, poiMesh, poiMods); + #endif + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #ifdef MOCHIE_PBR + MochieBRDF(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + if (0.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + if (4.0 == 4) + { + poiFragData.alpha = saturate(poiFragData.alpha * 10.0); + } + if (0.0 != POI_MODE_TRANSPARENT) + { + poiFragData.finalColor *= poiFragData.alpha; + } + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Back + AlphaToMask Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define FINALPASS + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_DETAILNORMALMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_instancing + #pragma multi_compile_shadowcaster + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_SHADOW + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(1,1,1,1), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + #if defined(FINALPASS) && !defined(UNITY_PASS_SHADOWCASTER) && !defined(POI_PASS_OUTLINE) + ApplyDetailNormal(poiMods, poiMesh); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(0.02968646,0.02968646,0.02968646,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(0.02968646,0.02968646,0.02968646,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + poiFragData.finalColor = poiFragData.baseColor; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "META" + Tags { "LightMode" = "Meta" } + ZWrite [_ZWrite] + Cull Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define FINALPASS + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_DETAILNORMALMAP + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_instancing + #pragma multi_compile_fragment _ VERTEXLIGHT_ON + #define POI_PASS_META + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + #include "UnityMetaPass.cginc" + #ifndef VRC_LIGHT_VOLUMES_INCLUDED + #define VRC_LIGHT_VOLUMES_INCLUDED + #define VRCLV_VERSION 2 + #define VRCLV_MAX_VOLUMES_COUNT 32 + #define VRCLV_MAX_LIGHTS_COUNT 128 + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + cbuffer LightVolumeUniforms { + #endif + uniform float _UdonLightVolumeEnabled; + uniform float _UdonLightVolumeVersion; + uniform float _UdonLightVolumeCount; + uniform float _UdonLightVolumeAdditiveMaxOverdraw; + uniform float _UdonLightVolumeAdditiveCount; + uniform float _UdonLightVolumeProbesBlend; + uniform float _UdonLightVolumeSharpBounds; + uniform float4x4 _UdonLightVolumeInvWorldMatrix[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeRotation[VRCLV_MAX_VOLUMES_COUNT * 2]; // Legacy! Used in this version to have back compatibility with older worlds. Array commented above will be used in future releases! Legacy! + uniform float3 _UdonLightVolumeInvLocalEdgeSmooth[VRCLV_MAX_VOLUMES_COUNT]; + uniform float3 _UdonLightVolumeUvw[VRCLV_MAX_VOLUMES_COUNT * 6]; // Legacy! AABB Bounds of islands on the 3D Texture atlas. Array commented above will be used in future releases! Legacy! + uniform float4 _UdonLightVolumeOcclusionUvw[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeColor[VRCLV_MAX_VOLUMES_COUNT]; + uniform float _UdonPointLightVolumeCount; + uniform float _UdonPointLightVolumeCubeCount; + uniform float4 _UdonPointLightVolumePosition[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeColor[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeDirection[VRCLV_MAX_LIGHTS_COUNT]; + uniform float3 _UdonPointLightVolumeCustomID[VRCLV_MAX_LIGHTS_COUNT]; + uniform float _UdonLightBrightnessCutoff; + uniform float _UdonLightVolumeOcclusionCount; + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + } + #endif + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + uniform Texture3D _UdonLightVolume; + uniform SamplerState sampler_UdonLightVolume; + uniform Texture2DArray _UdonPointLightVolumeTexture; + #define LV_SAMPLE(tex, uvw) tex.SampleLevel(sampler_UdonLightVolume, uvw, 0) + #else + #define LV_SAMPLE(tex, uvw) float4(0,0,0,0) + #endif + #define LV_PI 3.141592653589793f + #define LV_PI2 6.283185307179586f + float LV_Smoothstep01(float x) { + return x * x * (3 - 2 * x); + } + float3 LV_MultiplyVectorByQuaternion(float3 v, float4 q) { + float3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); + } + float3 LV_MultiplyVectorByMatrix2x3(float3 v, float3 r0, float3 r1) { + float3 r2 = cross(r0, r1); + return float3(dot(v, r0), dot(v, r1), dot(v, r2)); + } + float LV_FastAcos(float x) { + float absX = abs(x); + float res = -0.156583f * absX + LV_PI * 0.5f; + res *= sqrt(1.0f - absX); + return (x >= 0) ? res : (LV_PI - res); + } + float LV_DistributionGGX(float NoH, float roughness) { + float f = (roughness - 1) * ((roughness + 1) * (NoH * NoH)) + 1; + return (roughness * roughness) / ((float) LV_PI * f * f); + } + bool LV_PointLocalAABB(float3 localUVW) { + return all(abs(localUVW) <= 0.5); + } + float3 LV_LocalFromVolume(uint volumeID, float3 worldPos) { + return mul(_UdonLightVolumeInvWorldMatrix[volumeID], float4(worldPos, 1.0)).xyz; + } + float LV_EvaluateSH(float L0, float3 L1, float3 n) { + return L0 + dot(L1, n); + } + float4 LV_SampleCubemapArray(uint id, float3 dir) { + float3 absDir = abs(dir); + float2 uv; + uint face; + if (absDir.x >= absDir.y && absDir.x >= absDir.z) { + face = dir.x > 0 ? 0 : 1; + uv = float2((dir.x > 0 ? -dir.z : dir.z), -dir.y) * rcp(absDir.x); + } else if (absDir.y >= absDir.z) { + face = dir.y > 0 ? 2 : 3; + uv = float2(dir.x, (dir.y > 0 ? dir.z : -dir.z)) * rcp(absDir.y); + } else { + face = dir.z > 0 ? 4 : 5; + uv = float2((dir.z > 0 ? dir.x : -dir.x), -dir.y) * rcp(absDir.z); + } + float3 uvid = float3(uv * 0.5 + 0.5, id * 6 + face); + return LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + } + float4 LV_ProjectQuadLightIrradianceSH(float3 shadingPosition, float3 lightVertices[4]) { + [unroll] for (uint edge0 = 0; edge0 < 4; edge0++) { + lightVertices[edge0] = normalize(lightVertices[edge0] - shadingPosition); + } + const float3 zhDir0 = float3(0.866025, -0.500001, -0.000004); + const float3 zhDir1 = float3(-0.759553, 0.438522, -0.480394); + const float3 zhDir2 = float3(-0.000002, 0.638694, 0.769461); + const float3 zhWeightL1y = float3(2.1995339f, 2.50785367f, 1.56572711f); + const float3 zhWeightL1z = float3(-1.82572523f, -2.08165037f, 0.00000000f); + const float3 zhWeightL1x = float3(2.42459869f, 1.44790525f, 0.90397552f); + float solidAngle = 0.0; + float3 surfaceIntegral = 0.0; + [loop] for (uint edge1 = 0; edge1 < 4; edge1++) { + uint next = (edge1 + 1) % 4; + uint prev = (edge1 + 4 - 1) % 4; + float3 prevVert = lightVertices[prev]; + float3 thisVert = lightVertices[edge1]; + float3 nextVert = lightVertices[next]; + float3 a = cross(thisVert, prevVert); + float3 b = cross(thisVert, nextVert); + float lenA = length(a); + float lenB = length(b); + solidAngle += LV_FastAcos(clamp(dot(a, b) / (lenA * lenB), -1, 1)); + float3 mu = b * rcp(lenB); + float cosGamma = dot(thisVert, nextVert); + float gamma = LV_FastAcos(clamp(cosGamma, -1, 1)); + surfaceIntegral.x += gamma * dot(zhDir0, mu); + surfaceIntegral.y += gamma * dot(zhDir1, mu); + surfaceIntegral.z += gamma * dot(zhDir2, mu); + } + solidAngle = solidAngle - LV_PI2; + surfaceIntegral *= 0.5; + const float normalizationL0 = 0.5f * sqrt(1.0f / LV_PI); + float l0 = normalizationL0 * solidAngle; + float l1y = dot(zhWeightL1y, surfaceIntegral); + float l1z = dot(zhWeightL1z, surfaceIntegral); + float l1x = dot(zhWeightL1x, surfaceIntegral); + const float cosineKernelL0 = LV_PI; // (1) + const float cosineKernelL1 = LV_PI2 / 3.0f; // (1) + const float oneOverPi = 1.0f / LV_PI; // (2) + const float normalizationL1 = 0.5f * sqrt(3.0f / LV_PI); // (3) + const float weightL0 = cosineKernelL0 * normalizationL0 * oneOverPi; // (1), (2), (3) + const float weightL1 = cosineKernelL1 * normalizationL1 * oneOverPi; // (1), (2), (3) + l0 *= weightL0; + l1y *= weightL1; + l1z *= weightL1; + l1x *= weightL1; + return float4(l1x, l1y, l1z, l0); + } + void LV_QuadLight(float3 worldPos, float3 centroidPos, float4 rotationQuat, float2 size, float3 color, float sqMaxDist, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 lightToWorldPos = worldPos - centroidPos; + float3 normal = LV_MultiplyVectorByQuaternion(float3(0, 0, 1), rotationQuat); + if (dot(normal, lightToWorldPos) < 0.0) return; + float sqCutoffDist = sqMaxDist - dot(lightToWorldPos, lightToWorldPos); + color.rgb *= saturate(sqCutoffDist / sqMaxDist) * LV_PI * occlusion; + float2 halfSize = size * 0.5f; + float3 xAxis = LV_MultiplyVectorByQuaternion(float3(1, 0, 0), rotationQuat); + float3 yAxis = cross(normal, xAxis); + float3 verts[4]; + verts[0] = centroidPos + (-halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[1] = centroidPos + ( halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[2] = centroidPos + ( halfSize.x * xAxis) + (-halfSize.y * yAxis); + verts[3] = centroidPos + (-halfSize.x * xAxis) + (-halfSize.y * yAxis); + float4 areaLightSH = LV_ProjectQuadLightIrradianceSH(worldPos, verts); + float lenL1 = length(areaLightSH.xyz); + if (lenL1 > areaLightSH.w) areaLightSH.xyz *= areaLightSH.w / lenL1; + L0 += areaLightSH.w * color.rgb; + L1r += areaLightSH.xyz * color.r; + L1g += areaLightSH.xyz * color.g; + L1b += areaLightSH.xyz * color.b; + count++; + } + float3 LV_PointLightAttenuation(float sqdist, float sqlightSize, float3 color, float brightnessCutoff, float sqMaxDist) { + float mask = saturate(1 - sqdist / sqMaxDist); + return mask * mask * color * sqlightSize / (sqdist + sqlightSize); + } + float LV_PointLightSolidAngle(float sqdist, float sqlightSize) { + return saturate(sqrt(sqdist / (sqlightSize + sqdist))); + } + void LV_SphereLight(float sqdist, float3 dirN, float sqlightSize, float3 color, float occlusion, float sqMaxDist, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 att = LV_PointLightAttenuation(sqdist, sqlightSize, color, _UdonLightBrightnessCutoff, sqMaxDist); + float3 l0 = att * occlusion; + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLight(float sqdist, float3 dirN, float sqlightSize, float3 att, float spotMask, float cosAngle, float coneFalloff, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float smoothedCone = LV_Smoothstep01(saturate(spotMask * coneFalloff)); + float3 l0 = att * (occlusion * smoothedCone); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * saturate(1 - cosAngle)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightCookie(float sqdist, float3 dirN, float sqlightSize, float3 att, float4 lightRot, float tanAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 localDir = LV_MultiplyVectorByQuaternion(-dirN, lightRot); + float2 uv = localDir.xy * rcp(localDir.z * tanAngle); + if ( + localDir.z <= 0.0 || // Culling by direction + abs(uv.x) > 1.0 || abs(uv.y) > 1.0 // Culling by UV + ) return; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 - customId - 1; + float3 uvid = float3(uv * 0.5 + 0.5, id); + float angleSize = saturate(rsqrt(1 + tanAngle * tanAngle)); + float4 cookie = LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + float3 l0 = att * cookie.rgb * (cookie.a * occlusion); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * (1 - angleSize)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightAttenuationLUT(float sqdist, float3 dirN, float sqlightSize, float3 color, float spotMask, float cosAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float dirRadius = sqdist * abs(sqlightSize); + float spot = 1 - saturate(spotMask * rcp(1 - cosAngle)); + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId - 1; + float3 uvid = float3(sqrt(float2(spot, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * occlusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } + void LV_PointLight(uint id, float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 customID_data = _UdonPointLightVolumeCustomID[id]; + int shadowId = (int) customID_data.y; // Shadowmask id + int customId = (int) customID_data.x; // Custom Texture ID + float sqrRange = customID_data.z; // Squared culling distance + float4 pos = _UdonPointLightVolumePosition[id]; // Light position and inversed squared range + float3 dir = pos.xyz - worldPos; + float sqlen = max(dot(dir, dir), 1e-6); + if (sqlen > sqrRange) return; // Early distance based culling + float3 dirN = dir * rsqrt(sqlen); + float lightOcclusion = 1; + if (_UdonLightVolumeOcclusionCount != 0 && shadowId >= 0) { + lightOcclusion = dot(occlusion, float4(shadowId == 0, shadowId == 1, shadowId == 2, shadowId == 3)); + } + float4 color = _UdonPointLightVolumeColor[id]; // Color, angle + float4 ldir = _UdonPointLightVolumeDirection[id]; // Dir + falloff or Rotation + if (pos.w < 0) { // It is a spot light + float angle = color.w; + float spotMask = dot(ldir.xyz, -dirN) - angle; + if(customId >= 0 && spotMask < 0) return; // Spot cone based culling + if (customId > 0) { // If it uses Attenuation LUT + LV_SphereSpotLightAttenuationLUT(sqlen, dirN, -pos.w, color.rgb, spotMask, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + float3 att = LV_PointLightAttenuation(sqlen, -pos.w, color.rgb, _UdonLightBrightnessCutoff, sqrRange); + if (customId < 0) { // If uses cookie + LV_SphereSpotLightCookie(sqlen, dirN, -pos.w, att, ldir, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + LV_SphereSpotLight(sqlen, dirN, -pos.w, att, spotMask, angle, ldir.w, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + } else if (color.w <= 1.5f) { // It is a point light + if (customId > 0) { // Using LUT + float invSqRange = abs(pos.w); // Sign of range defines if it's point light (positive) or a spot light (negative) + float dirRadius = sqlen * invSqRange; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId; + float3 uvid = float3(sqrt(float2(0, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * lightOcclusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } else { // If it uses default parametric attenuation + float3 l0 = 0, l1r = 0, l1g = 0, l1b = 0; + LV_SphereLight(sqlen, dirN, pos.w, color.rgb, lightOcclusion, sqrRange, l0, l1r, l1g, l1b, count); + float3 cubeColor = 1; + if (customId < 0) { // If it uses a cubemap + uint id = -customId - 1; // Cubemap ID starts from zero and should not take in count texture array slices count. + cubeColor = LV_SampleCubemapArray(id, LV_MultiplyVectorByQuaternion(dirN, ldir)).xyz; + } + L0 += l0 * cubeColor; + L1r += l1r * cubeColor.r; + L1g += l1g * cubeColor.g; + L1b += l1b * cubeColor.b; + } + } else { // It is an area light + LV_QuadLight(worldPos, pos.xyz, ldir, float2(pos.w, color.w - 2.0f), color.rgb, sqrRange, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + void LV_SampleLightVolumeTex(float3 uvw0, float3 uvw1, float3 uvw2, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b) { + float4 tex0 = LV_SAMPLE(_UdonLightVolume, uvw0); + float4 tex1 = LV_SAMPLE(_UdonLightVolume, uvw1); + float4 tex2 = LV_SAMPLE(_UdonLightVolume, uvw2); + L0 = tex0.rgb; + L1r = float3(tex1.r, tex2.r, tex0.a); + L1g = float3(tex1.g, tex2.g, tex1.a); + L1b = float3(tex1.b, tex2.b, tex2.a); + } + float LV_BoundsMask(float3 localUVW, float3 invLocalEdgeSmooth) { + float3 distToMin = (localUVW + 0.5) * invLocalEdgeSmooth; + float3 distToMax = (0.5 - localUVW) * invLocalEdgeSmooth; + float3 fade = saturate(min(distToMin, distToMax)); + return fade.x * fade.y * fade.z; + } + void LV_SampleLightProbe(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz; + L1g += unity_SHAg.xyz; + L1b += unity_SHAb.xyz; + } + void LV_SampleLightProbeDering(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz * 0.565f; + L1g += unity_SHAg.xyz * 0.565f; + L1b += unity_SHAb.xyz * 0.565f; + } + void LV_SampleVolume(uint id, float3 localUVW, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + float3 uvw0 = uvwScaled + _UdonLightVolumeUvw[uvwID].xyz; + float3 uvw1 = uvwScaled + _UdonLightVolumeUvw[uvwID + 2].xyz; + float3 uvw2 = uvwScaled + _UdonLightVolumeUvw[uvwID + 4].xyz; + float3 l0, l1r, l1g, l1b; + LV_SampleLightVolumeTex(uvw0, uvw1, uvw2, l0, l1r, l1g, l1b); + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + occlusion = 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + occlusion = 1; + } + float4 color = _UdonLightVolumeColor[id]; + L0 += l0 * color.rgb; + l1r *= color.r; + l1g *= color.g; + l1b *= color.b; + if (color.a != 0) { + float3 r0 = _UdonLightVolumeRotation[id * 2].xyz; + float3 r1 = _UdonLightVolumeRotation[id * 2 + 1].xyz; + L1r += LV_MultiplyVectorByMatrix2x3(l1r, r0, r1); + L1g += LV_MultiplyVectorByMatrix2x3(l1g, r0, r1); + L1b += LV_MultiplyVectorByMatrix2x3(l1b, r0, r1); + } else { + L1r += l1r; + L1g += l1g; + L1b += l1b; + } + } + float4 LV_SampleVolumeOcclusion(uint id, float3 localUVW) { + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + return 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + return 1; + } + } + void LV_PointLightVolumeSH(float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + uint pointCount = min((uint) _UdonPointLightVolumeCount, VRCLV_MAX_LIGHTS_COUNT); + if (pointCount == 0) return; + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_LIGHTS_COUNT); + uint pcount = 0; // Point lights counter + [loop] for (uint pid = 0; pid < pointCount && pcount < maxOverdraw; pid++) { + LV_PointLight(pid, worldPos, occlusion, L0, L1r, L1g, L1b, pcount); + } + } + void LV_LightVolumeSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + if (volumesCount == 0) { // Legacy! Fallback to default light probes if Light Volume are not enabled or a version is too old to have a support. Legacy! + LV_SampleLightProbe(L0, L1r, L1g, L1b); + return; + } + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + bool lightProbesBlend = _UdonLightVolumeProbesBlend; + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + [loop] for (uint id = 0; id < volumesCount; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA && lightProbesBlend) { + LV_SampleLightProbe(L0, L1r, L1g, L1b); + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + float3 L0_A = 0; + float3 L1r_A = 0; + float3 L1g_A = 0; + float3 L1b_A = 0; + float4 occlusion_A = 1; + LV_SampleVolume(volumeID_A, localUVW_A, L0_A, L1r_A, L1g_A, L1b_A, occlusion_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || isNoA || (_UdonLightVolumeSharpBounds && isNoB)) { // Returning SH A result if it's the center of mask or out of bounds + L0 += L0_A; + L1r += L1r_A; + L1g += L1g_A; + L1b += L1b_A; + occlusion = occlusion_A; + occlusion *= mOcclusion; + return; + } + float3 L0_B = 0; + float3 L1r_B = 0; + float3 L1g_B = 0; + float3 L1b_B = 0; + float4 occlusion_B = 1; + if (isNoB && lightProbesBlend) { // No Volume found and light volumes blending enabled + LV_SampleLightProbe(L0_B, L1r_B, L1g_B, L1b_B); + } else { // Blending Volume A and Volume B + localUVW_B = isNoB ? localUVW : localUVW_B; + volumeID_B = isNoB ? volumesCount - 1 : volumeID_B; + LV_SampleVolume(volumeID_B, localUVW_B, L0_B, L1r_B, L1g_B, L1b_B, occlusion_B); + } + occlusion = lerp(occlusion_B, occlusion_A, mask); + occlusion *= mOcclusion; + L0 += lerp(L0_B, L0_A, mask); + L1r += lerp(L1r_B, L1r_A, mask); + L1g += lerp(L1g_B, L1g_A, mask); + L1b += lerp(L1b_B, L1b_A, mask); + } + void LV_LightVolumeAdditiveSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + if (additiveCount == 0 && (uint) _UdonPointLightVolumeCount == 0) return; // Legacy! + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW for Y Axis and Free rotations + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + uint count = min(_UdonLightVolumeOcclusionCount == 0 ? additiveCount : volumesCount, VRCLV_MAX_VOLUMES_COUNT); // Only use all volumes if occlusion volumes are enabled + [loop] for (uint id = 0; id < count; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA || _UdonLightVolumeOcclusionCount == 0) { + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + occlusion = LV_SampleVolumeOcclusion(volumeID_A, localUVW_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || (_UdonLightVolumeSharpBounds && isNoB)) { + occlusion *= mOcclusion; + return; // Returning A result if it's the center of mask or out of bounds + } + if (isNoB) occlusion = lerp(1, occlusion, mask); + else occlusion = lerp(LV_SampleVolumeOcclusion(volumeID_B, localUVW_B), occlusion, mask); + occlusion *= mOcclusion; + } + float3 LightVolumeSpecular(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specColor = max(float3(dot(reflect(-L1r, worldNormal), viewDir), dot(reflect(-L1g, worldNormal), viewDir), dot(reflect(-L1b, worldNormal), viewDir)), 0); + float3 rDir = normalize(normalize(L1r) + viewDir); + float3 gDir = normalize(normalize(L1g) + viewDir); + float3 bDir = normalize(normalize(L1b) + viewDir); + float rNh = saturate(dot(worldNormal, rDir)); + float gNh = saturate(dot(worldNormal, gDir)); + float bNh = saturate(dot(worldNormal, bDir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float rSpec = LV_DistributionGGX(rNh, roughExp); + float gSpec = LV_DistributionGGX(gNh, roughExp); + float bSpec = LV_DistributionGGX(bNh, roughExp); + float3 specs = (rSpec + gSpec + bSpec) * f0; + float3 coloredSpecs = specs * specColor; + float3 a = coloredSpecs + specs * L0; + float3 b = coloredSpecs * 3; + return max(lerp(a, b, smoothness) * 0.5f, 0.0); + } + float3 LightVolumeSpecular(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecular(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeSpecularDominant(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 dominantDir = L1r + L1g + L1b; + float3 dir = normalize(normalize(dominantDir) + viewDir); + float nh = saturate(dot(worldNormal, dir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float spec = LV_DistributionGGX(nh, roughExp); + return max(spec * L0 * f0, 0.0) * 1.5f; + } + float3 LightVolumeSpecularDominant(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecularDominant(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeEvaluate(float3 worldNormal, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + return float3(LV_EvaluateSH(L0.r, L1r, worldNormal), LV_EvaluateSH(L0.g, L1g, worldNormal), LV_EvaluateSH(L0.b, L1b, worldNormal)); + } + void LightVolumeSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled == 0) { + LV_SampleLightProbeDering(L0, L1r, L1g, L1b); + } else { + float4 occlusion = 1; + LV_LightVolumeSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + void LightVolumeAdditiveSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled != 0) { + float4 occlusion = 1; + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + float3 LightVolumeSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float3 LightVolumeAdditiveSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return 0; + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float LightVolumesEnabled() { + return _UdonLightVolumeEnabled; + } + float LightVolumesVersion() { + return _UdonLightVolumeVersion == 0 ? _UdonLightVolumeEnabled : _UdonLightVolumeVersion; + } + #endif + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float _GIEmissionMultiplier; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + #ifdef FINALPASS + #if defined(PROP_DETAILMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _DetailMask; + #endif + float4 _DetailMask_ST; + float2 _DetailMaskPan; + float _DetailMaskUV; + float _DetailMaskStochastic; + #if defined(PROP_DETAILNORMALMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _DetailNormalMap; + #endif + float4 _DetailNormalMap_ST; + float2 _DetailNormalMapPan; + float _DetailNormalMapUV; + float _DetailNormalMapScale; + float _DetailNormalMapStochastic; + float _DetailNormalGlobalMask; + float _DetailNormalGlobalMaskBlendType; + #if defined(PROP_DETAILTEX) || !defined(OPTIMIZER_ENABLED) + Texture2D _DetailTex; + #endif + float4 _DetailTex_ST; + float2 _DetailTexPan; + float _DetailTexUV; + float _DetailTexStochastic; + float3 _DetailTint; + float _DetailTintThemeIndex; + float _DetailTexIntensity; + float _DetailBrightness; + float _DetailTexGlobalMask; + float _DetailTexGlobalMaskBlendType; + #endif + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef FINALPASS + void ApplyDetailColor(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + #if defined(PROP_DETAILTEX) || !defined(OPTIMIZER_ENABLED) + half3 detailTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_DetailTex, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0).rgb * poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + #else + half3 detailTexture = 0.21763764082 * poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + #endif + poiFragData.baseColor.rgb *= LerpWhiteTo(detailTexture * 1.0 * unity_ColorSpaceDouble.rgb, poiMods.detailMask.r * 1.0); + } + void ApplyDetailNormal(inout PoiMods poiMods, inout PoiMesh poiMesh) + { + #if defined(PROP_DETAILMASK) || !defined(OPTIMIZER_ENABLED) + poiMods.detailMask = POI2D_SAMPLER_PAN_STOCHASTIC(_DetailMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0).rg; + #else + poiMods.detailMask = 1; + #endif + #ifdef POI_BACKFACE + if (!poiMesh.isFrontFace) + { + poiMods.detailMask.rg *= 1.0; + } + #endif + if (0.0 > 0) + { + poiMods.detailMask.r = maskBlend(poiMods.detailMask.r, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + poiMods.detailMask.g = maskBlend(poiMods.detailMask.g, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_DETAILNORMALMAP) || !defined(OPTIMIZER_ENABLED) + half3 detailNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_DetailNormalMap, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0), 0.38 * poiMods.detailMask.g); + poiMesh.tangentSpaceNormal = BlendNormals(detailNormal, poiMesh.tangentSpaceNormal); + #endif + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(1,1,1,1), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + #if defined(FINALPASS) && !defined(UNITY_PASS_SHADOWCASTER) && !defined(POI_PASS_OUTLINE) + ApplyDetailNormal(poiMods, poiMesh); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(0.02968646,0.02968646,0.02968646,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(0.02968646,0.02968646,0.02968646,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #ifdef FINALPASS + ApplyDetailColor(poiFragData, poiMesh, poiMods); + #endif + + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + #ifdef POI_PASS_META + UnityMetaInput meta; + UNITY_INITIALIZE_OUTPUT(UnityMetaInput, meta); + meta.Emission = poiFragData.emission * 1.0 * poiMods.globalEmission; + meta.Albedo = saturate(poiFragData.finalColor.rgb); + meta.SpecularColor = poiLight.finalLightAdd; + return UnityMetaFragment(meta) + POI_SAFE_RGB0; + #endif + poiFragData.finalColor += poiFragData.emission * poiMods.globalEmission; + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + } + CustomEditor "Thry.ShaderEditor" +} diff --git a/Assets/Quiz/Materials/OptimizedShaders/Camera/Poiyomi Pro World.shader.meta b/Assets/Quiz/Materials/OptimizedShaders/Camera/Poiyomi Pro World.shader.meta new file mode 100644 index 0000000..33ef19d --- /dev/null +++ b/Assets/Quiz/Materials/OptimizedShaders/Camera/Poiyomi Pro World.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 39066899ca76afc4fa77309ab646e2fe +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/OptimizedShaders/LukePaper.meta b/Assets/Quiz/Materials/OptimizedShaders/LukePaper.meta new file mode 100644 index 0000000..045b642 --- /dev/null +++ b/Assets/Quiz/Materials/OptimizedShaders/LukePaper.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 82ce4c55eb6a8384aaf82975081e8c3c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/OptimizedShaders/LukePaper/Poiyomi Pro.shader b/Assets/Quiz/Materials/OptimizedShaders/LukePaper/Poiyomi Pro.shader new file mode 100644 index 0000000..c1e2ac7 --- /dev/null +++ b/Assets/Quiz/Materials/OptimizedShaders/LukePaper/Poiyomi Pro.shader @@ -0,0 +1,8969 @@ +Shader "Hidden/Locked/.poiyomi/Poiyomi Pro/156868ebaeb510e49b9e98d3432f84d8" +{ + Properties + { + [HideInInspector] shader_master_label ("Poiyomi 9.3.48", Float) = 0 + [HideInInspector] shader_is_using_thry_editor ("", Float) = 0 + [HideInInspector] shader_locale ("0db0b86376c3dca4b9a6828ef8615fe0", Float) = 0 + [HideInInspector] footer_website ("{texture:{name:icon-poilogo,height:24},action:{type:URL,data:https://www.poiyomi.com},hover:WEBSITE}", Float) = 0 + [HideInInspector] footer_discord ("{texture:{name:icon-discord,height:24},action:{type:URL,data:https://discord.gg/Ays52PY},hover:DISCORD}", Float) = 0 + [HideInInspector] footer_patreon ("{texture:{name:icon-patreon-new,height:24},action:{type:URL,data:https://www.patreon.com/poiyomi},hover:PATREON}", Float) = 0 + [HideInInspector] footer_youtube ("{texture:{name:icon-youtube,height:24},action:{type:URL,data:https://www.youtube.com/poiyomi},hover:YOUTUBE}", Float) = 0 + [HideInInspector] footer_github ("{texture:{name:icon-github,height:24},action:{type:URL,data:https://github.com/poiyomi/PoiyomiToonShader},hover:GITHUB}", Float) = 0 + [HideInInspector] footer_bluesky ("{texture:{name:icon-bluesky,height:24},action:{type:URL,data:https://bsky.app/profile/poiyomi.com},hover:BLUESKY}", Float) = 0 + [HideInInspector] footer_twitter ("{texture:{name:icon-twitter,height:24},action:{type:URL,data:https://x.com/poiyomi},hover:X}", Float) = 0 + [Header(POIYOMI SHADER UI FAILED TO LOAD)] + [Header(. This is caused by scripts failing to compile. It can be fixed.)] + [Header(. The inspector will look broken and will not work properly until fixed.)] + [Header(. Please check your console for script errors.)] + [Header(. You can filter by errors in the console window.)] + [Header(. Often the topmost error points to the erroring script.)] + [Space(30)][Header(Common Error Causes)] + [Header(. Installing multiple Poiyomi Shader packages)] + [Header(. Make sure to delete the Poiyomi shader folder before you update Poiyomi.)] + [Header(. If a package came with Poiyomi this is bad practice and can cause issues.)] + [Header(. Delete the package and import it without any Poiyomi components.)] + [Header(. Bad VRCSDK installation (e.g. Both VCC and Standalone))] + [Header(. Delete the VRCSDK Folder in Assets if you are using the VCC.)] + [Header(. Avoid using third party SDKs. They can cause incompatibility.)] + [Header(. Script Errors in other scripts)] + [Header(. Outdated tools or prefabs can cause this.)] + [Header(. Update things that are throwing errors or move them outside the project.)] + [Space(30)][Header(Visit Our Discord to Ask For Help)] + [Space(5)]_ShaderUIWarning0 (" → discord.gg/poiyomi ← We can help you get it fixed! --{condition_showS:(0==1)}", Int) = -0 + [Space(1400)][Header(POIYOMI SHADER UI FAILED TO LOAD)] + _ShaderUIWarning1 ("Please scroll up for more information! --{condition_showS:(0==1)}", Int) = -0 + [HideInInspector] _ForgotToLockMaterial (";;YOU_FORGOT_TO_LOCK_THIS_MATERIAL;", Int) = 1 + [ThryShaderOptimizerLockButton] _ShaderOptimizerEnabled ("", Int) = 1 + [HideInInspector] GeometryShader_Enabled("GEOMETRY SHADER ENABLED", Float) = 1 + [HideInInspector] Tessellation_Enabled("TESSELLATION ENABLED", Float) = 1 + [ThryWideEnum(Opaque, 0, Cutout, 1, TransClipping, 9, Fade, 2, Transparent, 3, Additive, 4, Soft Additive, 5, Multiplicative, 6, 2x Multiplicative, 7)]_Mode("Rendering Preset--{on_value_actions:[ + {value:0,actions:[{type:SET_PROPERTY,data:render_queue=2000},{type:SET_PROPERTY,data:_AlphaForceOpaque=1}, {type:SET_PROPERTY,data:render_type=Opaque}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=0}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:1,actions:[{type:SET_PROPERTY,data:render_queue=2450},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=.5}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:9,actions:[{type:SET_PROPERTY,data:render_queue=2460},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.01}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:2,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.002}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:3,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=1}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:4,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:5,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=4}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=4}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=4}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:6,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:7,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=3}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=3}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]} + }]}]}", Int) = 0 + [HideInInspector] m_mainCategory ("Color & Normals--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/main},hover:Documentation}}", Float) = 0 + _Color ("Color & Alpha--{reference_property:_ColorThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _ColorThemeIndex ("", Int) = 0 + [sRGBWarning(true)]_MainTex ("Texture--{reference_properties:[_MainTexPan, _MainTexUV, _MainPixelMode, _MainTexStochastic, _MainIgnoreTexAlpha]}", 2D) = "white" { } + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _MainTexUV ("UV", Int) = 0 + [HideInInspector][Vector2]_MainTexPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ToggleUI]_MainPixelMode ("Pixel Mode", Float) = 0 + [HideInInspector][ToggleUI]_MainTexStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][ToggleUI]_MainIgnoreTexAlpha ("Ignore Alpha", Float) = 0 + [Normal]_BumpMap ("Normal Map--{reference_properties:[_BumpMapPan, _BumpMapUV, _BumpScale, _BumpMapStochastic]}", 2D) = "bump" { } + [HideInInspector][Vector2]_BumpMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _BumpMapUV ("UV", Int) = 0 + [HideInInspector]_BumpScale ("Intensity", Range(0, 10)) = 1 + [HideInInspector][ToggleUI]_BumpMapStochastic ("Stochastic Sampling", Float) = 0 + [sRGBWarning]_AlphaMask ("Alpha Map--{reference_properties:[_AlphaMaskPan, _AlphaMaskUV, _AlphaMaskInvert, _MainAlphaMaskMode, _AlphaMaskBlendStrength, _AlphaMaskValue], alts:[_AlphaMap]}", 2D) = "white" { } + [HideInInspector][Vector2]_AlphaMaskPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _AlphaMaskUV ("UV", Int) = 0 + [HideInInspector][ThryWideEnum(Off, 0, Replace, 1, Multiply, 2, Add, 3, Subtract, 4)]_MainAlphaMaskMode ("Blend Mode", Int) = 2 + [HideInInspector]_AlphaMaskBlendStrength ("Blend Strength", Float) = 1 + [HideInInspector]_AlphaMaskValue ("Blend Offset", Float) = 0 + [HideInInspector][ToggleUI]_AlphaMaskInvert ("Invert", Float) = 0 + _Cutoff ("Alpha Cutoff", Range(0, 1.001)) = 0.5 + [HideInInspector] m_start_Alpha ("Alpha Options--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/alpha-options},hover:Documentation}}", Float) = 0 + [ToggleUI]_AlphaForceOpaque ("Force Opaque", Float) = 1 + _AlphaMod ("Alpha Mod", Range(-1, 1)) = 0.0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _AlphaGlobalMask ("Global Mask--{reference_property:_AlphaGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _AlphaGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] m_end_Alpha ("Alpha Options", Float) = 0 + [HideInInspector] m_lightingCategory ("Shading", Float) = 0 + [HideInInspector] m_start_PoiLightData ("Light Data--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/light-data},hover:Documentation}}", Float) = 0 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingAOMaps ("AO Maps (expand)--{reference_properties:[_LightingAOMapsPan, _LightingAOMapsUV,_LightDataAOStrengthR,_LightDataAOStrengthG,_LightDataAOStrengthB,_LightDataAOStrengthA, _LightDataAOGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingAOMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingAOMapsUV ("UV", Int) = 0 + [HideInInspector]_LightDataAOStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightDataAOStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataAOGlobalMaskR ("Global Mask--{reference_property:_LightDataAOGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataAOGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingDetailShadowMaps ("Shadow Map (expand)--{reference_properties:[_LightingDetailShadowMapsPan, _LightingDetailShadowMapsUV,_LightingDetailShadowStrengthR,_LightingDetailShadowStrengthG,_LightingDetailShadowStrengthB,_LightingDetailShadowStrengthA,_LightingAddDetailShadowStrengthR,_LightingAddDetailShadowStrengthG,_LightingAddDetailShadowStrengthB,_LightingAddDetailShadowStrengthA, _LightDataDetailShadowGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingDetailShadowMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingDetailShadowMapsUV ("UV", Int) = 0 + [HideInInspector]_LightingDetailShadowStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingDetailShadowStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthR ("Additive R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingAddDetailShadowStrengthG ("Additive G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthB ("Additive B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthA ("Additive A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataDetailShadowGlobalMaskR ("Global Mask--{reference_property:_LightDataDetailShadowGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataDetailShadowGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingShadowMasks ("Shadow Masks (expand)--{reference_properties:[_LightingShadowMasksPan, _LightingShadowMasksUV,_LightingShadowMaskStrengthR,_LightingShadowMaskStrengthG,_LightingShadowMaskStrengthB,_LightingShadowMaskStrengthA, _LightDataShadowMaskGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingShadowMasksPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingShadowMasksUV ("UV", Int) = 0 + [HideInInspector]_LightingShadowMaskStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingShadowMaskStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataShadowMaskGlobalMaskR ("Global Mask--{reference_property:_LightDataShadowMaskGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataShadowMaskGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [HideInInspector] s_start_LightDataBasePass ("Base Pass (Directional & Baked Lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [Enum(Poi Custom, 0, Standard, 1, UTS2, 2, OpenLit(lil toon), 3)] _LightingColorMode ("Light Color Mode", Int) = 0 + [Enum(Poi Custom, 0, Normalized NDotL, 1, Saturated NDotL, 2, Casted Shadows Only, 3, SDF, 4)] _LightingMapMode ("Light Map Mode", Int) = 0 + [HideInInspector] s_start_LightDataSDF ("Signed Distance fields--{persistent_expand:true,default_expand:true, condition_showS:(_LightingMapMode==4)}", Float) = 1 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, Nothing, Nothing, Linear, false)]_LightDataSDFMap ("SDF Map (expand)--{reference_properties:[_LightDataSDFMapPan, _LightDataSDFMapUV]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightDataSDFMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightDataSDFMapUV ("UV", Int) = 0 + _LightDataSDFMapLOD ("LOD", Range(0, 1)) = 0 + _LightDataSDFBlendY ("Blend Y Direction", Range(0.001, 2)) = 1 + [HideInInspector] s_end_LightDataSDF ("Signed Distance fields", Float) = 1 + [Enum(Poi Custom, 0, Forced Local Direction, 1, Forced World Direction, 2, UTS2, 3, OpenLit(lil toon), 4, View Direction, 5)] _LightingDirectionMode ("Light Direction Mode", Int) = 0 + [Vector3]_LightngForcedDirection ("Forced Direction--{condition_showS:(_LightingDirectionMode==1 || _LightingDirectionMode==2)}", Vector) = (0, 0, 0) + _LightingViewDirOffsetPitch ("View Dir Offset Pitch--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + _LightingViewDirOffsetYaw ("View Dir Offset Yaw--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + [ToggleUI]_LightingForceColorEnabled ("Force Light Color", Float) = 0 + _LightingForcedColor ("Forced Color--{condition_showS:(_LightingForceColorEnabled==1), reference_property:_LightingForcedColorThemeIndex}", Color) = (1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _LightingForcedColorThemeIndex ("", Int) = 0 + _Unlit_Intensity ("Unlit_Intensity--{condition_showS:(_LightingColorMode==2)}", Range(0.001, 4)) = 1 + [DoNotLock][ToggleUI]_LightingCapEnabled ("Limit Brightness", Float) = 1 + [DoNotLock]_LightingCap ("Max Brightness--{condition_showS:(_LightingCapEnabled==1)}", Range(0, 10)) = 1 + [DoNotLock]_LightingMinLightBrightness ("Min Brightness", Range(0, 1)) = 0 + _LightingIndirectUsesNormals ("Indirect Uses Normals--{condition_showS:(_LightingColorMode==0)}", Range(0, 1)) = 0 + _LightingCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 0 + [DoNotLock]_LightingMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + [ToggleUI]_LightingVertexLightingEnabled ("Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingMirrorVertexLightingEnabled ("Mirror Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingEnableLightVolumes ("Light Volumes", Float) = 1 + [HideInInspector] s_end_LightDataBasePass ("Base Pass", Float) = 1 + [HideInInspector] s_start_LightDataAddPass ("Add Pass (Point & Spot lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [ToggleUI]_LightingAdditiveEnable ("Pixel lights (Important)", Float) = 1 + [ToggleUI]_DisableDirectionalInAdd ("Ignore Directional Lights--{condition_showS:(_LightingAdditiveEnable==1)}", Float) = 1 + [ToggleUI]_LightingAdditiveLimited ("Limit Brightness", Float) = 1 + _LightingAdditiveLimit ("Max Brightness--{condition_showS:(_LightingAdditiveLimited==1)}", Range(0, 10)) = 1 + _LightingAdditiveCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 1 + _LightingAdditiveMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + _LightingAdditivePassthrough ("Point Light Passthrough--{condition_showS:(_LightingAdditiveEnable==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_LightDataAddPass ("Add Pass", Float) = 1 + [HideInInspector] s_start_LightDataDebug ("Debug / Data Visualizations--{reference_property:_LightDataDebugEnabled,persistent_expand:true}", Float) = 0 + [HideInInspector][DoNotAnimate][ThryToggleUI(false)]_LightDataDebugEnabled ("Debug", Float) = 0 + [ThryWideEnum(Direct Color, 0, Indirect Color, 1, Light Map, 2, Attenuation, 3, N Dot L, 4, Half Dir, 5, Direction, 6, Add Color, 7, Add Attenuation, 8, Add Shadow, 9, Add N Dot L, 10)] _LightingDebugVisualize ("Visualize", Int) = 0 + [HideInInspector] s_end_LightDataDebug ("Debug", Float) = 0 + [HideInInspector] m_end_PoiLightData ("Light Data", Float) = 0 + [HideInInspector] m_start_PoiShading (" Shading--{reference_property:_ShadingEnabled,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/main},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(VIGNETTE_MASKED)]_ShadingEnabled ("Enable Shading", Float) = 1 + [DoNotAnimate][KeywordEnum(TextureRamp, Multilayer Math, Wrapped, Skin, ShadeMap, Flat, Realistic, Cloth, SDF)] _LightingMode ("Lighting Type", Float) = 5 + _LightingShadowColor ("Shadow Tint--{condition_showS:(_LightingMode!=4 && _LightingMode!=1 && _LightingMode!=5)}", Color) = (1, 1, 1) + [ToggleUI]_ForceFlatRampedLightmap ("Force Ramped Lightmap--{condition_showS:(_LightingMode==5)}", Range(0, 1)) = 1 + _ShadowStrength ("Shadow Strength--{condition_showS:(_LightingMode<=4 || _LightingMode==8)}", Range(0, 1)) = 1 + _LightingIgnoreAmbientColor ("Ignore Indirect Shadow Color--{condition_showS:(_LightingMode<=3 || _LightingMode==8)}", Range(0, 1)) = 1 + [Space(15)] + [HideInInspector] s_start_ShadingAddPass ("Add Pass (Point & Spot Lights)--{persistent_expand:true,default_expand:false}", Float) = 0 + [Enum(Realistic, 0, Toon, 1, Same as Base Pass, 3)] _LightingAdditiveType ("Lighting Type", Int) = 3 + _LightingAdditiveGradientStart ("Gradient Start--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = 0 + _LightingAdditiveGradientEnd ("Gradient End--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_ShadingAddPass ("Add Pass", Float) = 0 + [HideInInspector] s_start_ShadingGlobalMask ("Global Masks--{persistent_expand:true,default_expand:false}", Float) = 0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapApplyGlobalMaskIndex ("LightMap to Global Mask--{reference_property:_ShadingRampedLightMapApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapApplyGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapInverseApplyGlobalMaskIndex ("Inversed LightMap to Global Mask--{reference_property:_ShadingRampedLightMapInverseApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapInverseApplyGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] s_end_ShadingGlobalMask ("Global Masks", Float) = 0 + [HideInInspector] m_end_PoiShading ("Shading", Float) = 0 + [HideInInspector] m_OutlineCategory (" Outlines--{reference_property:_EnableOutlines,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/outlines/main},hover:Documentation}}", Float) = 0 + [HideInInspector] m_specialFXCategory ("Special FX", Float) = 0 + [HideInInspector] m_vertexCategory ("Vertex Options", Float) = 0 + [HideInInspector] m_start_Uzumore (" View Clip Prevention (Uzumore)--{reference_property:_UzumoreCategoryToggle,button_author:{text:sigmal00,action:{type:URL,data:https://github.com/sigmal00},hover:GitHub}}, button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/vertex-options/view-clip-prevention},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(POI_UZUMORE)] _UzumoreCategoryToggle (" View Clip Prevention (Uzumore)", Float) = 0 + [ToggleUI] _UzumoreEnabled ("Animation Toggle", Float) = 1 + _UzumoreAmount ("Push Amount (m)", Float) = 0.1 + _UzumoreBias ("Push Bias", Float) = 0.001 + [sRGBWarning]_UzumoreMask ("Push Mask (A)", 2D) = "white" { } + [ThryWideEnum(R, 0, G, 1, B, 2, A, 3)] _UzumoreMaskUV ("Push Mask Channel", Float) = 3 + [HideInInspector] m_end_Uzumore ("Camera Push Back", Float) = 0 + [HideInInspector] m_modifierCategory ("Global Modifiers & Data", Float) = 0 + [HideInInspector] m_start_PoiGlobalCategory ("Global Data and Masks", Float) = 0 + [HideInInspector] m_start_GlobalThemes ("Global Themes--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/global-themes},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HDR]_GlobalThemeColor0 ("Theme Color 0", Color ) = (1, 1, 1, 1) + _GlobalThemeHue0 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed0 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation0 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue0 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HDR]_GlobalThemeColor1 ("Theme Color 1", Color ) = (1, 1, 1, 1) + _GlobalThemeHue1 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed1 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation1 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue1 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HDR]_GlobalThemeColor2 ("Theme Color 2", Color ) = (1, 1, 1, 1) + _GlobalThemeHue2 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed2 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation2 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue2 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HDR]_GlobalThemeColor3 ("Theme Color 3", Color ) = (1, 1, 1, 1) + _GlobalThemeHue3 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed3 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation3 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue3 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HideInInspector] m_end_GlobalThemes ("Global Themes", Float ) = 0 + [HideInInspector] m_start_GlobalMask ("Global Mask--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/global-masks},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalMaskModifiers ("Modifiers", Float) = 0 + [HideInInspector] m_end_GlobalMaskModifiers ("", Float) = 0 + [HideInInspector] m_end_GlobalMask ("Global Mask", Float) = 0 + [HideInInspector] m_end_PoiGlobalCategory ("Global Data and Masks ", Float) = 0 + [HideInInspector] m_start_PoiUVCategory ("UVs", Float) = 0 + [HideInInspector] m_start_Stochastic ("Stochastic Sampling--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/stochastic-sampling},hover:Documentation}}", Float) = 0 + [KeywordEnum(Deliot Heitz, Hextile, None)] _StochasticMode ("Sampling Mode", Float) = 0 + [HideInInspector] s_start_deliot ("Deliot Heitz--{persistent_expand:true,default_expand:false,condition_show:_StochasticMode==0}", Float) = 0 + _StochasticDeliotHeitzDensity ("Detiling Density", Range(0.1, 10)) = 1 + [HideInInspector] s_end_deliot ("Deliot Heitz", Float) = 0 + [HideInInspector] m_end_Stochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector] m_start_uvLocalWorld ("Local World UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/local-world-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos0 ("Local X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos1 ("Local Y", Int) = 1 + [Space(10)] + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos0 ("World X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos1 ("World Y", Int) = 2 + [HideInInspector] m_end_uvLocalWorld ("Local World UV", Float) = 0 + [HideInInspector] m_start_uvPanosphere ("Panosphere UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/panosphere-uv},hover:Documentation}}", Float) = 0 + [ToggleUI] _StereoEnabled ("Stereo Enabled", Float) = 0 + [ToggleUI] _PanoUseBothEyes ("Perspective Correct (VR)", Float) = 1 + [HideInInspector] m_end_uvPanosphere ("Panosphere UV", Float) = 0 + [HideInInspector] m_start_uvPolar ("Polar UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/polar-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8)] _PolarUV ("UV", Int) = 0 + [Vector2]_PolarCenter ("Center Coordinate", Vector) = (.5, .5, 0, 0) + _PolarRadialScale ("Radial Scale", Float) = 1 + _PolarLengthScale ("Length Scale", Float) = 1 + _PolarSpiralPower ("Spiral Power", Float) = 0 + [HideInInspector] m_end_uvPolar ("Polar UV", Float) = 0 + [HideInInspector] m_end_PoiUVCategory ("UVs ", Float) = 0 + [HideInInspector] m_start_PoiPostProcessingCategory ("Post Processing", Float) = 0 + [HideInInspector] m_start_PPAnimations ("PP Animations--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/post-processing/pp-animations},hover:Documentation}}", Float) = 0 + [Helpbox(1)] _PPHelp ("This section meant for real time adjustments through animations and not to be changed in unity", Int) = 0 + _PPLightingMultiplier ("Lighting Mulitplier", Float) = 1 + _PPLightingAddition ("Lighting Add", Float) = 0 + _PPEmissionMultiplier ("Emission Multiplier", Float) = 1 + _PPFinalColorMultiplier ("Final Color Multiplier", Float) = 1 + [HideInInspector] m_end_PPAnimations ("PP Animations ", Float) = 0 + [HideInInspector] m_end_PoiPostProcessingCategory ("Post Processing ", Float) = 0 + [HideInInspector] m_thirdpartyCategory ("Third Party", Float) = 0 + [HideInInspector] m_renderingCategory ("Rendering--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/main},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.CullMode)] _Cull ("Cull", Float) = 2 + [DoNotAnimate][Enum(UnityEngine.Rendering.CompareFunction)] _ZTest ("ZTest", Float) = 4 + [DoNotAnimate][Enum(Off, 0, On, 1)] _ZWrite ("ZWrite", Int) = 1 + [DoNotAnimate][ThryMask(Thry.ColorMaskFlags)] _ColorMask ("Color Mask", Int) = 15 + [DoNotAnimate] _OffsetFactor ("Offset Factor", Float) = 0.0 + [DoNotAnimate] _OffsetUnits ("Offset Units", Float) = 0.0 + [DoNotAnimate][ToggleUI] _RenderingReduceClipDistance ("Reduce Clip Distance", Float) = 0 + [DoNotAnimate][ToggleUI] _ZClip ("Z Clip", Float) = 1 + [DoNotAnimate][ToggleUI] _IgnoreFog ("Ignore Fog", Float) = 0 + [DoNotAnimate][ToggleUI]_FlipBackfaceNormals ("Flip Backface Normals", Int) = 1 + [DoNotAnimate][HideInInspector] Instancing ("Instancing", Float) = 0 //add this property for instancing variants settings to be shown + [ToggleUI] _RenderingEarlyZEnabled ("Early Z", Float) = 0 + [HideInInspector] m_start_blending ("Blending--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/blending},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOp ("RGB Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlend ("RGB Destination Blend", Int) = 0 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOp ("RGB Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlend ("RGB Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_start_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOpAlpha ("Alpha Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlendAlpha ("Alpha Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlendAlpha ("Alpha Destination Blend", Int) = 10 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOpAlpha ("Alpha Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlendAlpha ("Alpha Source Blend", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlendAlpha ("Alpha Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_end_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [HideInInspector] m_end_blending ("Blending", Float) = 0 + [HideInInspector] m_start_StencilPassOptions ("Stencil--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/stencil},hover:Documentation}}", Float) = 0 + [ThryWideEnum(Simple, 0, Front Face vs Back Face, 1)] _StencilType ("Stencil Type", Float) = 0 + [IntRange] _StencilRef ("Stencil Reference Value", Range(0, 255)) = 0 + [IntRange] _StencilReadMask ("Stencil ReadMask Value", Range(0, 255)) = 255 + [IntRange] _StencilWriteMask ("Stencil WriteMask Value", Range(0, 255)) = 255 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilPassOp ("Stencil Pass Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFailOp ("Stencil Fail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilZFailOp ("Stencil ZFail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilCompareFunction ("Stencil Compare Function--{condition_showS:(_StencilType==0)}", Float) = 8 + [HideInInspector] m_start_StencilPassBackOptions("Back--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp0 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackPassOp ("Back Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackFailOp ("Back Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackZFailOp ("Back ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilBackCompareFunction ("Back Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassBackOptions("Back", Float) = 0 + [HideInInspector] m_start_StencilPassFrontOptions("Front--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp1 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontPassOp ("Front Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontFailOp ("Front Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontZFailOp ("Front ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilFrontCompareFunction ("Front Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassFrontOptions("Front", Float) = 0 + [HideInInspector] m_end_StencilPassOptions ("Stencil", Float) = 0 + } + SubShader + { + Tags { "RenderType" = "Opaque" "Queue" = "Geometry" "VRCFallback" = "Standard" } + Pass + { + Name "Base" + Tags { "LightMode" = "ForwardBase" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define VIGNETTE_MASKED + #define _LIGHTINGMODE_FLAT + #define _STOCHASTICMODE_DELIOT_HEITZ + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdbase + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #pragma multi_compile_fragment _ VERTEXLIGHT_ON + #define POI_PASS_BASE + #pragma skip_variants LIGHTMAP_ON DYNAMICLIGHTMAP_ON LIGHTMAP_SHADOW_MIXING SHADOWS_SHADOWMASK DIRLIGHTMAP_COMBINED _MIXED_LIGHTING_SUBTRACTIVE + #pragma skip_variants DECALS_OFF DECALS_3RT DECALS_4RT DECAL_SURFACE_GRADIENT _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + #pragma skip_variants _ADDITIONAL_LIGHT_SHADOWS + #pragma skip_variants PROBE_VOLUMES_OFF PROBE_VOLUMES_L1 PROBE_VOLUMES_L2 + #pragma skip_variants _SCREEN_SPACE_OCCLUSION + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + #ifndef VRC_LIGHT_VOLUMES_INCLUDED + #define VRC_LIGHT_VOLUMES_INCLUDED + #define VRCLV_VERSION 2 + #define VRCLV_MAX_VOLUMES_COUNT 32 + #define VRCLV_MAX_LIGHTS_COUNT 128 + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + cbuffer LightVolumeUniforms { + #endif + uniform float _UdonLightVolumeEnabled; + uniform float _UdonLightVolumeVersion; + uniform float _UdonLightVolumeCount; + uniform float _UdonLightVolumeAdditiveMaxOverdraw; + uniform float _UdonLightVolumeAdditiveCount; + uniform float _UdonLightVolumeProbesBlend; + uniform float _UdonLightVolumeSharpBounds; + uniform float4x4 _UdonLightVolumeInvWorldMatrix[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeRotation[VRCLV_MAX_VOLUMES_COUNT * 2]; // Legacy! Used in this version to have back compatibility with older worlds. Array commented above will be used in future releases! Legacy! + uniform float3 _UdonLightVolumeInvLocalEdgeSmooth[VRCLV_MAX_VOLUMES_COUNT]; + uniform float3 _UdonLightVolumeUvw[VRCLV_MAX_VOLUMES_COUNT * 6]; // Legacy! AABB Bounds of islands on the 3D Texture atlas. Array commented above will be used in future releases! Legacy! + uniform float4 _UdonLightVolumeOcclusionUvw[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeColor[VRCLV_MAX_VOLUMES_COUNT]; + uniform float _UdonPointLightVolumeCount; + uniform float _UdonPointLightVolumeCubeCount; + uniform float4 _UdonPointLightVolumePosition[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeColor[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeDirection[VRCLV_MAX_LIGHTS_COUNT]; + uniform float3 _UdonPointLightVolumeCustomID[VRCLV_MAX_LIGHTS_COUNT]; + uniform float _UdonLightBrightnessCutoff; + uniform float _UdonLightVolumeOcclusionCount; + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + } + #endif + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + uniform Texture3D _UdonLightVolume; + uniform SamplerState sampler_UdonLightVolume; + uniform Texture2DArray _UdonPointLightVolumeTexture; + #define LV_SAMPLE(tex, uvw) tex.SampleLevel(sampler_UdonLightVolume, uvw, 0) + #else + #define LV_SAMPLE(tex, uvw) float4(0,0,0,0) + #endif + #define LV_PI 3.141592653589793f + #define LV_PI2 6.283185307179586f + float LV_Smoothstep01(float x) { + return x * x * (3 - 2 * x); + } + float3 LV_MultiplyVectorByQuaternion(float3 v, float4 q) { + float3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); + } + float3 LV_MultiplyVectorByMatrix2x3(float3 v, float3 r0, float3 r1) { + float3 r2 = cross(r0, r1); + return float3(dot(v, r0), dot(v, r1), dot(v, r2)); + } + float LV_FastAcos(float x) { + float absX = abs(x); + float res = -0.156583f * absX + LV_PI * 0.5f; + res *= sqrt(1.0f - absX); + return (x >= 0) ? res : (LV_PI - res); + } + float LV_DistributionGGX(float NoH, float roughness) { + float f = (roughness - 1) * ((roughness + 1) * (NoH * NoH)) + 1; + return (roughness * roughness) / ((float) LV_PI * f * f); + } + bool LV_PointLocalAABB(float3 localUVW) { + return all(abs(localUVW) <= 0.5); + } + float3 LV_LocalFromVolume(uint volumeID, float3 worldPos) { + return mul(_UdonLightVolumeInvWorldMatrix[volumeID], float4(worldPos, 1.0)).xyz; + } + float LV_EvaluateSH(float L0, float3 L1, float3 n) { + return L0 + dot(L1, n); + } + float4 LV_SampleCubemapArray(uint id, float3 dir) { + float3 absDir = abs(dir); + float2 uv; + uint face; + if (absDir.x >= absDir.y && absDir.x >= absDir.z) { + face = dir.x > 0 ? 0 : 1; + uv = float2((dir.x > 0 ? -dir.z : dir.z), -dir.y) * rcp(absDir.x); + } else if (absDir.y >= absDir.z) { + face = dir.y > 0 ? 2 : 3; + uv = float2(dir.x, (dir.y > 0 ? dir.z : -dir.z)) * rcp(absDir.y); + } else { + face = dir.z > 0 ? 4 : 5; + uv = float2((dir.z > 0 ? dir.x : -dir.x), -dir.y) * rcp(absDir.z); + } + float3 uvid = float3(uv * 0.5 + 0.5, id * 6 + face); + return LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + } + float4 LV_ProjectQuadLightIrradianceSH(float3 shadingPosition, float3 lightVertices[4]) { + [unroll] for (uint edge0 = 0; edge0 < 4; edge0++) { + lightVertices[edge0] = normalize(lightVertices[edge0] - shadingPosition); + } + const float3 zhDir0 = float3(0.866025, -0.500001, -0.000004); + const float3 zhDir1 = float3(-0.759553, 0.438522, -0.480394); + const float3 zhDir2 = float3(-0.000002, 0.638694, 0.769461); + const float3 zhWeightL1y = float3(2.1995339f, 2.50785367f, 1.56572711f); + const float3 zhWeightL1z = float3(-1.82572523f, -2.08165037f, 0.00000000f); + const float3 zhWeightL1x = float3(2.42459869f, 1.44790525f, 0.90397552f); + float solidAngle = 0.0; + float3 surfaceIntegral = 0.0; + [loop] for (uint edge1 = 0; edge1 < 4; edge1++) { + uint next = (edge1 + 1) % 4; + uint prev = (edge1 + 4 - 1) % 4; + float3 prevVert = lightVertices[prev]; + float3 thisVert = lightVertices[edge1]; + float3 nextVert = lightVertices[next]; + float3 a = cross(thisVert, prevVert); + float3 b = cross(thisVert, nextVert); + float lenA = length(a); + float lenB = length(b); + solidAngle += LV_FastAcos(clamp(dot(a, b) / (lenA * lenB), -1, 1)); + float3 mu = b * rcp(lenB); + float cosGamma = dot(thisVert, nextVert); + float gamma = LV_FastAcos(clamp(cosGamma, -1, 1)); + surfaceIntegral.x += gamma * dot(zhDir0, mu); + surfaceIntegral.y += gamma * dot(zhDir1, mu); + surfaceIntegral.z += gamma * dot(zhDir2, mu); + } + solidAngle = solidAngle - LV_PI2; + surfaceIntegral *= 0.5; + const float normalizationL0 = 0.5f * sqrt(1.0f / LV_PI); + float l0 = normalizationL0 * solidAngle; + float l1y = dot(zhWeightL1y, surfaceIntegral); + float l1z = dot(zhWeightL1z, surfaceIntegral); + float l1x = dot(zhWeightL1x, surfaceIntegral); + const float cosineKernelL0 = LV_PI; // (1) + const float cosineKernelL1 = LV_PI2 / 3.0f; // (1) + const float oneOverPi = 1.0f / LV_PI; // (2) + const float normalizationL1 = 0.5f * sqrt(3.0f / LV_PI); // (3) + const float weightL0 = cosineKernelL0 * normalizationL0 * oneOverPi; // (1), (2), (3) + const float weightL1 = cosineKernelL1 * normalizationL1 * oneOverPi; // (1), (2), (3) + l0 *= weightL0; + l1y *= weightL1; + l1z *= weightL1; + l1x *= weightL1; + return float4(l1x, l1y, l1z, l0); + } + void LV_QuadLight(float3 worldPos, float3 centroidPos, float4 rotationQuat, float2 size, float3 color, float sqMaxDist, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 lightToWorldPos = worldPos - centroidPos; + float3 normal = LV_MultiplyVectorByQuaternion(float3(0, 0, 1), rotationQuat); + if (dot(normal, lightToWorldPos) < 0.0) return; + float sqCutoffDist = sqMaxDist - dot(lightToWorldPos, lightToWorldPos); + color.rgb *= saturate(sqCutoffDist / sqMaxDist) * LV_PI * occlusion; + float2 halfSize = size * 0.5f; + float3 xAxis = LV_MultiplyVectorByQuaternion(float3(1, 0, 0), rotationQuat); + float3 yAxis = cross(normal, xAxis); + float3 verts[4]; + verts[0] = centroidPos + (-halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[1] = centroidPos + ( halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[2] = centroidPos + ( halfSize.x * xAxis) + (-halfSize.y * yAxis); + verts[3] = centroidPos + (-halfSize.x * xAxis) + (-halfSize.y * yAxis); + float4 areaLightSH = LV_ProjectQuadLightIrradianceSH(worldPos, verts); + float lenL1 = length(areaLightSH.xyz); + if (lenL1 > areaLightSH.w) areaLightSH.xyz *= areaLightSH.w / lenL1; + L0 += areaLightSH.w * color.rgb; + L1r += areaLightSH.xyz * color.r; + L1g += areaLightSH.xyz * color.g; + L1b += areaLightSH.xyz * color.b; + count++; + } + float3 LV_PointLightAttenuation(float sqdist, float sqlightSize, float3 color, float brightnessCutoff, float sqMaxDist) { + float mask = saturate(1 - sqdist / sqMaxDist); + return mask * mask * color * sqlightSize / (sqdist + sqlightSize); + } + float LV_PointLightSolidAngle(float sqdist, float sqlightSize) { + return saturate(sqrt(sqdist / (sqlightSize + sqdist))); + } + void LV_SphereLight(float sqdist, float3 dirN, float sqlightSize, float3 color, float occlusion, float sqMaxDist, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 att = LV_PointLightAttenuation(sqdist, sqlightSize, color, _UdonLightBrightnessCutoff, sqMaxDist); + float3 l0 = att * occlusion; + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLight(float sqdist, float3 dirN, float sqlightSize, float3 att, float spotMask, float cosAngle, float coneFalloff, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float smoothedCone = LV_Smoothstep01(saturate(spotMask * coneFalloff)); + float3 l0 = att * (occlusion * smoothedCone); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * saturate(1 - cosAngle)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightCookie(float sqdist, float3 dirN, float sqlightSize, float3 att, float4 lightRot, float tanAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 localDir = LV_MultiplyVectorByQuaternion(-dirN, lightRot); + float2 uv = localDir.xy * rcp(localDir.z * tanAngle); + if ( + localDir.z <= 0.0 || // Culling by direction + abs(uv.x) > 1.0 || abs(uv.y) > 1.0 // Culling by UV + ) return; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 - customId - 1; + float3 uvid = float3(uv * 0.5 + 0.5, id); + float angleSize = saturate(rsqrt(1 + tanAngle * tanAngle)); + float4 cookie = LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + float3 l0 = att * cookie.rgb * (cookie.a * occlusion); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * (1 - angleSize)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightAttenuationLUT(float sqdist, float3 dirN, float sqlightSize, float3 color, float spotMask, float cosAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float dirRadius = sqdist * abs(sqlightSize); + float spot = 1 - saturate(spotMask * rcp(1 - cosAngle)); + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId - 1; + float3 uvid = float3(sqrt(float2(spot, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * occlusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } + void LV_PointLight(uint id, float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 customID_data = _UdonPointLightVolumeCustomID[id]; + int shadowId = (int) customID_data.y; // Shadowmask id + int customId = (int) customID_data.x; // Custom Texture ID + float sqrRange = customID_data.z; // Squared culling distance + float4 pos = _UdonPointLightVolumePosition[id]; // Light position and inversed squared range + float3 dir = pos.xyz - worldPos; + float sqlen = max(dot(dir, dir), 1e-6); + if (sqlen > sqrRange) return; // Early distance based culling + float3 dirN = dir * rsqrt(sqlen); + float lightOcclusion = 1; + if (_UdonLightVolumeOcclusionCount != 0 && shadowId >= 0) { + lightOcclusion = dot(occlusion, float4(shadowId == 0, shadowId == 1, shadowId == 2, shadowId == 3)); + } + float4 color = _UdonPointLightVolumeColor[id]; // Color, angle + float4 ldir = _UdonPointLightVolumeDirection[id]; // Dir + falloff or Rotation + if (pos.w < 0) { // It is a spot light + float angle = color.w; + float spotMask = dot(ldir.xyz, -dirN) - angle; + if(customId >= 0 && spotMask < 0) return; // Spot cone based culling + if (customId > 0) { // If it uses Attenuation LUT + LV_SphereSpotLightAttenuationLUT(sqlen, dirN, -pos.w, color.rgb, spotMask, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + float3 att = LV_PointLightAttenuation(sqlen, -pos.w, color.rgb, _UdonLightBrightnessCutoff, sqrRange); + if (customId < 0) { // If uses cookie + LV_SphereSpotLightCookie(sqlen, dirN, -pos.w, att, ldir, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + LV_SphereSpotLight(sqlen, dirN, -pos.w, att, spotMask, angle, ldir.w, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + } else if (color.w <= 1.5f) { // It is a point light + if (customId > 0) { // Using LUT + float invSqRange = abs(pos.w); // Sign of range defines if it's point light (positive) or a spot light (negative) + float dirRadius = sqlen * invSqRange; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId; + float3 uvid = float3(sqrt(float2(0, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * lightOcclusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } else { // If it uses default parametric attenuation + float3 l0 = 0, l1r = 0, l1g = 0, l1b = 0; + LV_SphereLight(sqlen, dirN, pos.w, color.rgb, lightOcclusion, sqrRange, l0, l1r, l1g, l1b, count); + float3 cubeColor = 1; + if (customId < 0) { // If it uses a cubemap + uint id = -customId - 1; // Cubemap ID starts from zero and should not take in count texture array slices count. + cubeColor = LV_SampleCubemapArray(id, LV_MultiplyVectorByQuaternion(dirN, ldir)).xyz; + } + L0 += l0 * cubeColor; + L1r += l1r * cubeColor.r; + L1g += l1g * cubeColor.g; + L1b += l1b * cubeColor.b; + } + } else { // It is an area light + LV_QuadLight(worldPos, pos.xyz, ldir, float2(pos.w, color.w - 2.0f), color.rgb, sqrRange, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + void LV_SampleLightVolumeTex(float3 uvw0, float3 uvw1, float3 uvw2, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b) { + float4 tex0 = LV_SAMPLE(_UdonLightVolume, uvw0); + float4 tex1 = LV_SAMPLE(_UdonLightVolume, uvw1); + float4 tex2 = LV_SAMPLE(_UdonLightVolume, uvw2); + L0 = tex0.rgb; + L1r = float3(tex1.r, tex2.r, tex0.a); + L1g = float3(tex1.g, tex2.g, tex1.a); + L1b = float3(tex1.b, tex2.b, tex2.a); + } + float LV_BoundsMask(float3 localUVW, float3 invLocalEdgeSmooth) { + float3 distToMin = (localUVW + 0.5) * invLocalEdgeSmooth; + float3 distToMax = (0.5 - localUVW) * invLocalEdgeSmooth; + float3 fade = saturate(min(distToMin, distToMax)); + return fade.x * fade.y * fade.z; + } + void LV_SampleLightProbe(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz; + L1g += unity_SHAg.xyz; + L1b += unity_SHAb.xyz; + } + void LV_SampleLightProbeDering(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz * 0.565f; + L1g += unity_SHAg.xyz * 0.565f; + L1b += unity_SHAb.xyz * 0.565f; + } + void LV_SampleVolume(uint id, float3 localUVW, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + float3 uvw0 = uvwScaled + _UdonLightVolumeUvw[uvwID].xyz; + float3 uvw1 = uvwScaled + _UdonLightVolumeUvw[uvwID + 2].xyz; + float3 uvw2 = uvwScaled + _UdonLightVolumeUvw[uvwID + 4].xyz; + float3 l0, l1r, l1g, l1b; + LV_SampleLightVolumeTex(uvw0, uvw1, uvw2, l0, l1r, l1g, l1b); + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + occlusion = 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + occlusion = 1; + } + float4 color = _UdonLightVolumeColor[id]; + L0 += l0 * color.rgb; + l1r *= color.r; + l1g *= color.g; + l1b *= color.b; + if (color.a != 0) { + float3 r0 = _UdonLightVolumeRotation[id * 2].xyz; + float3 r1 = _UdonLightVolumeRotation[id * 2 + 1].xyz; + L1r += LV_MultiplyVectorByMatrix2x3(l1r, r0, r1); + L1g += LV_MultiplyVectorByMatrix2x3(l1g, r0, r1); + L1b += LV_MultiplyVectorByMatrix2x3(l1b, r0, r1); + } else { + L1r += l1r; + L1g += l1g; + L1b += l1b; + } + } + float4 LV_SampleVolumeOcclusion(uint id, float3 localUVW) { + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + return 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + return 1; + } + } + void LV_PointLightVolumeSH(float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + uint pointCount = min((uint) _UdonPointLightVolumeCount, VRCLV_MAX_LIGHTS_COUNT); + if (pointCount == 0) return; + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_LIGHTS_COUNT); + uint pcount = 0; // Point lights counter + [loop] for (uint pid = 0; pid < pointCount && pcount < maxOverdraw; pid++) { + LV_PointLight(pid, worldPos, occlusion, L0, L1r, L1g, L1b, pcount); + } + } + void LV_LightVolumeSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + if (volumesCount == 0) { // Legacy! Fallback to default light probes if Light Volume are not enabled or a version is too old to have a support. Legacy! + LV_SampleLightProbe(L0, L1r, L1g, L1b); + return; + } + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + bool lightProbesBlend = _UdonLightVolumeProbesBlend; + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + [loop] for (uint id = 0; id < volumesCount; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA && lightProbesBlend) { + LV_SampleLightProbe(L0, L1r, L1g, L1b); + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + float3 L0_A = 0; + float3 L1r_A = 0; + float3 L1g_A = 0; + float3 L1b_A = 0; + float4 occlusion_A = 1; + LV_SampleVolume(volumeID_A, localUVW_A, L0_A, L1r_A, L1g_A, L1b_A, occlusion_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || isNoA || (_UdonLightVolumeSharpBounds && isNoB)) { // Returning SH A result if it's the center of mask or out of bounds + L0 += L0_A; + L1r += L1r_A; + L1g += L1g_A; + L1b += L1b_A; + occlusion = occlusion_A; + occlusion *= mOcclusion; + return; + } + float3 L0_B = 0; + float3 L1r_B = 0; + float3 L1g_B = 0; + float3 L1b_B = 0; + float4 occlusion_B = 1; + if (isNoB && lightProbesBlend) { // No Volume found and light volumes blending enabled + LV_SampleLightProbe(L0_B, L1r_B, L1g_B, L1b_B); + } else { // Blending Volume A and Volume B + localUVW_B = isNoB ? localUVW : localUVW_B; + volumeID_B = isNoB ? volumesCount - 1 : volumeID_B; + LV_SampleVolume(volumeID_B, localUVW_B, L0_B, L1r_B, L1g_B, L1b_B, occlusion_B); + } + occlusion = lerp(occlusion_B, occlusion_A, mask); + occlusion *= mOcclusion; + L0 += lerp(L0_B, L0_A, mask); + L1r += lerp(L1r_B, L1r_A, mask); + L1g += lerp(L1g_B, L1g_A, mask); + L1b += lerp(L1b_B, L1b_A, mask); + } + void LV_LightVolumeAdditiveSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + if (additiveCount == 0 && (uint) _UdonPointLightVolumeCount == 0) return; // Legacy! + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW for Y Axis and Free rotations + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + uint count = min(_UdonLightVolumeOcclusionCount == 0 ? additiveCount : volumesCount, VRCLV_MAX_VOLUMES_COUNT); // Only use all volumes if occlusion volumes are enabled + [loop] for (uint id = 0; id < count; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA || _UdonLightVolumeOcclusionCount == 0) { + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + occlusion = LV_SampleVolumeOcclusion(volumeID_A, localUVW_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || (_UdonLightVolumeSharpBounds && isNoB)) { + occlusion *= mOcclusion; + return; // Returning A result if it's the center of mask or out of bounds + } + if (isNoB) occlusion = lerp(1, occlusion, mask); + else occlusion = lerp(LV_SampleVolumeOcclusion(volumeID_B, localUVW_B), occlusion, mask); + occlusion *= mOcclusion; + } + float3 LightVolumeSpecular(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specColor = max(float3(dot(reflect(-L1r, worldNormal), viewDir), dot(reflect(-L1g, worldNormal), viewDir), dot(reflect(-L1b, worldNormal), viewDir)), 0); + float3 rDir = normalize(normalize(L1r) + viewDir); + float3 gDir = normalize(normalize(L1g) + viewDir); + float3 bDir = normalize(normalize(L1b) + viewDir); + float rNh = saturate(dot(worldNormal, rDir)); + float gNh = saturate(dot(worldNormal, gDir)); + float bNh = saturate(dot(worldNormal, bDir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float rSpec = LV_DistributionGGX(rNh, roughExp); + float gSpec = LV_DistributionGGX(gNh, roughExp); + float bSpec = LV_DistributionGGX(bNh, roughExp); + float3 specs = (rSpec + gSpec + bSpec) * f0; + float3 coloredSpecs = specs * specColor; + float3 a = coloredSpecs + specs * L0; + float3 b = coloredSpecs * 3; + return max(lerp(a, b, smoothness) * 0.5f, 0.0); + } + float3 LightVolumeSpecular(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecular(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeSpecularDominant(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 dominantDir = L1r + L1g + L1b; + float3 dir = normalize(normalize(dominantDir) + viewDir); + float nh = saturate(dot(worldNormal, dir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float spec = LV_DistributionGGX(nh, roughExp); + return max(spec * L0 * f0, 0.0) * 1.5f; + } + float3 LightVolumeSpecularDominant(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecularDominant(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeEvaluate(float3 worldNormal, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + return float3(LV_EvaluateSH(L0.r, L1r, worldNormal), LV_EvaluateSH(L0.g, L1g, worldNormal), LV_EvaluateSH(L0.b, L1b, worldNormal)); + } + void LightVolumeSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled == 0) { + LV_SampleLightProbeDering(L0, L1r, L1g, L1b); + } else { + float4 occlusion = 1; + LV_LightVolumeSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + void LightVolumeAdditiveSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled != 0) { + float4 occlusion = 1; + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + float3 LightVolumeSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float3 LightVolumeAdditiveSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return 0; + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float LightVolumesEnabled() { + return _UdonLightVolumeEnabled; + } + float LightVolumesVersion() { + return _UdonLightVolumeVersion == 0 ? _UdonLightVolumeEnabled : _UdonLightVolumeVersion; + } + #endif + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + #ifdef _LIGHTINGMODE_FLAT + float _ForceFlatRampedLightmap; + #endif + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + float _PPLightingMultiplier; + float _PPLightingAddition; + float _PPEmissionMultiplier; + float _PPFinalColorMultiplier; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef VIGNETTE_MASKED + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_FLAT + poiLight.finalLighting = poiLight.directColor * attenuation * shadowAttenuation; + if (1.0) + { + poiLight.rampedLightMap = smoothstep(0.4, 0.6, poiLight.nDotLNormalized); + } + else + { + poiLight.rampedLightMap = 1; + } + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(1,1,1,1), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + #ifdef UNITY_PASS_FORWARDBASE + poiFragData.emission = max(poiFragData.emission * 1.0, 0); + poiFragData.finalColor = max(poiFragData.finalColor * 1.0, 0); + #endif + if (0.0 == POI_MODE_OPAQUE) + { + } + clip(poiFragData.alpha - 0.5); + if (0.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + poiFragData.finalColor += poiFragData.emission * poiMods.globalEmission; + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "Add" + Tags { "LightMode" = "ForwardAdd" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite Off + Cull Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_AddBlendOp], [_AddBlendOpAlpha] + Blend [_AddSrcBlend] [_AddDstBlend], [_AddSrcBlendAlpha] [_AddDstBlendAlpha] + CGPROGRAM + #define VIGNETTE_MASKED + #define _LIGHTINGMODE_FLAT + #define _STOCHASTICMODE_DELIOT_HEITZ + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdadd_fullshadows + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_ADD + #pragma skip_variants LIGHTMAP_ON DYNAMICLIGHTMAP_ON LIGHTMAP_SHADOW_MIXING SHADOWS_SHADOWMASK DIRLIGHTMAP_COMBINED _MIXED_LIGHTING_SUBTRACTIVE + #pragma skip_variants DECALS_OFF DECALS_3RT DECALS_4RT DECAL_SURFACE_GRADIENT _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + #pragma skip_variants _ADDITIONAL_LIGHT_SHADOWS + #pragma skip_variants PROBE_VOLUMES_OFF PROBE_VOLUMES_L1 PROBE_VOLUMES_L2 + #pragma skip_variants _SCREEN_SPACE_OCCLUSION + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + #ifdef _LIGHTINGMODE_FLAT + float _ForceFlatRampedLightmap; + #endif + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef VIGNETTE_MASKED + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_FLAT + poiLight.finalLighting = poiLight.directColor * attenuation * shadowAttenuation; + if (1.0) + { + poiLight.rampedLightMap = smoothstep(0.4, 0.6, poiLight.nDotLNormalized); + } + else + { + poiLight.rampedLightMap = 1; + } + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(1,1,1,1), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + if (0.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + if (4.0 == 4) + { + poiFragData.alpha = saturate(poiFragData.alpha * 10.0); + } + if (0.0 != POI_MODE_TRANSPARENT) + { + poiFragData.finalColor *= poiFragData.alpha; + } + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Off + AlphaToMask Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define VIGNETTE_MASKED + #define _LIGHTINGMODE_FLAT + #define _STOCHASTICMODE_DELIOT_HEITZ + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_instancing + #pragma multi_compile_shadowcaster + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_SHADOW + #pragma skip_variants LIGHTMAP_ON DYNAMICLIGHTMAP_ON LIGHTMAP_SHADOW_MIXING SHADOWS_SHADOWMASK DIRLIGHTMAP_COMBINED _MIXED_LIGHTING_SUBTRACTIVE + #pragma skip_variants DECALS_OFF DECALS_3RT DECALS_4RT DECAL_SURFACE_GRADIENT _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + #pragma skip_variants _ADDITIONAL_LIGHT_SHADOWS + #pragma skip_variants PROBE_VOLUMES_OFF PROBE_VOLUMES_L1 PROBE_VOLUMES_L2 + #pragma skip_variants _SCREEN_SPACE_OCCLUSION + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(1,1,1,1), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + poiFragData.finalColor = poiFragData.baseColor; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + } + CustomEditor "Thry.ShaderEditor" +} diff --git a/Assets/Quiz/Materials/OptimizedShaders/LukePaper/Poiyomi Pro.shader.meta b/Assets/Quiz/Materials/OptimizedShaders/LukePaper/Poiyomi Pro.shader.meta new file mode 100644 index 0000000..1265205 --- /dev/null +++ b/Assets/Quiz/Materials/OptimizedShaders/LukePaper/Poiyomi Pro.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e13a7d52fee04b44f909f128c4724832 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/OptimizedShaders/OfficeChair.meta b/Assets/Quiz/Materials/OptimizedShaders/OfficeChair.meta new file mode 100644 index 0000000..c6ded03 --- /dev/null +++ b/Assets/Quiz/Materials/OptimizedShaders/OfficeChair.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 13f27f78497822d4e9b891d8b72ba4f2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Materials/OptimizedShaders/OfficeChair/Poiyomi Pro World.shader b/Assets/Quiz/Materials/OptimizedShaders/OfficeChair/Poiyomi Pro World.shader new file mode 100644 index 0000000..2547fee --- /dev/null +++ b/Assets/Quiz/Materials/OptimizedShaders/OfficeChair/Poiyomi Pro World.shader @@ -0,0 +1,12782 @@ +Shader "Hidden/Locked/.poiyomi/Poiyomi Pro World/f45e687b234af6948b76b2622ed33647" +{ + Properties + { + [HideInInspector] shader_master_label ("Poiyomi 9.3.48", Float) = 0 + [HideInInspector] shader_is_using_thry_editor ("", Float) = 0 + [HideInInspector] shader_locale ("0db0b86376c3dca4b9a6828ef8615fe0", Float) = 0 + [HideInInspector] footer_website ("{texture:{name:icon-poilogo,height:24},action:{type:URL,data:https://www.poiyomi.com},hover:WEBSITE}", Float) = 0 + [HideInInspector] footer_discord ("{texture:{name:icon-discord,height:24},action:{type:URL,data:https://discord.gg/Ays52PY},hover:DISCORD}", Float) = 0 + [HideInInspector] footer_patreon ("{texture:{name:icon-patreon-new,height:24},action:{type:URL,data:https://www.patreon.com/poiyomi},hover:PATREON}", Float) = 0 + [HideInInspector] footer_youtube ("{texture:{name:icon-youtube,height:24},action:{type:URL,data:https://www.youtube.com/poiyomi},hover:YOUTUBE}", Float) = 0 + [HideInInspector] footer_github ("{texture:{name:icon-github,height:24},action:{type:URL,data:https://github.com/poiyomi/PoiyomiToonShader},hover:GITHUB}", Float) = 0 + [HideInInspector] footer_bluesky ("{texture:{name:icon-bluesky,height:24},action:{type:URL,data:https://bsky.app/profile/poiyomi.com},hover:BLUESKY}", Float) = 0 + [HideInInspector] footer_twitter ("{texture:{name:icon-twitter,height:24},action:{type:URL,data:https://x.com/poiyomi},hover:X}", Float) = 0 + [Header(POIYOMI SHADER UI FAILED TO LOAD)] + [Header(. This is caused by scripts failing to compile. It can be fixed.)] + [Header(. The inspector will look broken and will not work properly until fixed.)] + [Header(. Please check your console for script errors.)] + [Header(. You can filter by errors in the console window.)] + [Header(. Often the topmost error points to the erroring script.)] + [Space(30)][Header(Common Error Causes)] + [Header(. Installing multiple Poiyomi Shader packages)] + [Header(. Make sure to delete the Poiyomi shader folder before you update Poiyomi.)] + [Header(. If a package came with Poiyomi this is bad practice and can cause issues.)] + [Header(. Delete the package and import it without any Poiyomi components.)] + [Header(. Bad VRCSDK installation (e.g. Both VCC and Standalone))] + [Header(. Delete the VRCSDK Folder in Assets if you are using the VCC.)] + [Header(. Avoid using third party SDKs. They can cause incompatibility.)] + [Header(. Script Errors in other scripts)] + [Header(. Outdated tools or prefabs can cause this.)] + [Header(. Update things that are throwing errors or move them outside the project.)] + [Space(30)][Header(Visit Our Discord to Ask For Help)] + [Space(5)]_ShaderUIWarning0 (" → discord.gg/poiyomi ← We can help you get it fixed! --{condition_showS:(0==1)}", Int) = -0 + [Space(1400)][Header(POIYOMI SHADER UI FAILED TO LOAD)] + _ShaderUIWarning1 ("Please scroll up for more information! --{condition_showS:(0==1)}", Int) = -0 + [HideInInspector] _ForgotToLockMaterial (";;YOU_FORGOT_TO_LOCK_THIS_MATERIAL;", Int) = 1 + [ThryShaderOptimizerLockButton] _ShaderOptimizerEnabled ("", Int) = 1 + [HideInInspector] GeometryShader_Enabled("GEOMETRY SHADER ENABLED", Float) = 1 + [HideInInspector] Tessellation_Enabled("TESSELLATION ENABLED", Float) = 1 + [ThryWideEnum(Opaque, 0, Cutout, 1, TransClipping, 9, Fade, 2, Transparent, 3, Additive, 4, Soft Additive, 5, Multiplicative, 6, 2x Multiplicative, 7)]_Mode("Rendering Preset--{on_value_actions:[ + {value:0,actions:[{type:SET_PROPERTY,data:render_queue=2000},{type:SET_PROPERTY,data:_AlphaForceOpaque=1}, {type:SET_PROPERTY,data:render_type=Opaque}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=0}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:1,actions:[{type:SET_PROPERTY,data:render_queue=2450},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=.5}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:9,actions:[{type:SET_PROPERTY,data:render_queue=2460},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=TransparentCutout}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.01}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=1}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:2,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0.002}, {type:SET_PROPERTY,data:_SrcBlend=5}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=5}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=5}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:3,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=10}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=1}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=10}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:4,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=1}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=1}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=1}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:5,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=4}, {type:SET_PROPERTY,data:_DstBlend=1}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=4}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=4}, {type:SET_PROPERTY,data:_OutlineDstBlend=1}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:6,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=0}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=0}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]}, + {value:7,actions:[{type:SET_PROPERTY,data:render_queue=3000},{type:SET_PROPERTY,data:_AlphaForceOpaque=0}, {type:SET_PROPERTY,data:render_type=Transparent}, {type:SET_PROPERTY,data:_BlendOp=0}, {type:SET_PROPERTY,data:_BlendOpAlpha=4}, {type:SET_PROPERTY,data:_Cutoff=0}, {type:SET_PROPERTY,data:_SrcBlend=2}, {type:SET_PROPERTY,data:_DstBlend=3}, {type:SET_PROPERTY,data:_SrcBlendAlpha=1}, {type:SET_PROPERTY,data:_DstBlendAlpha=1}, {type:SET_PROPERTY,data:_AddSrcBlend=2}, {type:SET_PROPERTY,data:_AddDstBlend=1}, {type:SET_PROPERTY,data:_AddSrcBlendAlpha=0}, {type:SET_PROPERTY,data:_AddDstBlendAlpha=1}, {type:SET_PROPERTY,data:_AlphaToCoverage=0}, {type:SET_PROPERTY,data:_ZWrite=0}, {type:SET_PROPERTY,data:_ZTest=4}, {type:SET_PROPERTY,data:_AlphaPremultiply=0}, {type:SET_PROPERTY,data:_OutlineSrcBlend=2}, {type:SET_PROPERTY,data:_OutlineDstBlend=3}, {type:SET_PROPERTY,data:_OutlineSrcBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineDstBlendAlpha=1}, {type:SET_PROPERTY,data:_OutlineBlendOp=0}, {type:SET_PROPERTY,data:_OutlineBlendOpAlpha=4}]} + }]}]}", Int) = 0 + [HideInInspector] m_mainCategory ("Color & Normals--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/main},hover:Documentation}}", Float) = 0 + _Color ("Color & Alpha--{reference_property:_ColorThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _ColorThemeIndex ("", Int) = 0 + [sRGBWarning(true)]_MainTex ("Texture--{reference_properties:[_MainTexPan, _MainTexUV, _MainPixelMode, _MainTexStochastic, _MainIgnoreTexAlpha]}", 2D) = "white" { } + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _MainTexUV ("UV", Int) = 0 + [HideInInspector][Vector2]_MainTexPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ToggleUI]_MainPixelMode ("Pixel Mode", Float) = 0 + [HideInInspector][ToggleUI]_MainTexStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][ToggleUI]_MainIgnoreTexAlpha ("Ignore Alpha", Float) = 0 + [Normal]_BumpMap ("Normal Map--{reference_properties:[_BumpMapPan, _BumpMapUV, _BumpScale, _BumpMapStochastic]}", 2D) = "bump" { } + [HideInInspector][Vector2]_BumpMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _BumpMapUV ("UV", Int) = 0 + [HideInInspector]_BumpScale ("Intensity", Range(0, 10)) = 1 + [HideInInspector][ToggleUI]_BumpMapStochastic ("Stochastic Sampling", Float) = 0 + [sRGBWarning]_AlphaMask ("Alpha Map--{reference_properties:[_AlphaMaskPan, _AlphaMaskUV, _AlphaMaskInvert, _MainAlphaMaskMode, _AlphaMaskBlendStrength, _AlphaMaskValue], alts:[_AlphaMap]}", 2D) = "white" { } + [HideInInspector][Vector2]_AlphaMaskPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _AlphaMaskUV ("UV", Int) = 0 + [HideInInspector][ThryWideEnum(Off, 0, Replace, 1, Multiply, 2, Add, 3, Subtract, 4)]_MainAlphaMaskMode ("Blend Mode", Int) = 2 + [HideInInspector]_AlphaMaskBlendStrength ("Blend Strength", Float) = 1 + [HideInInspector]_AlphaMaskValue ("Blend Offset", Float) = 0 + [HideInInspector][ToggleUI]_AlphaMaskInvert ("Invert", Float) = 0 + _Cutoff ("Alpha Cutoff", Range(0, 1.001)) = 0.5 + [HideInInspector] m_start_Alpha ("Alpha Options--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/alpha-options},hover:Documentation}}", Float) = 0 + [ToggleUI]_AlphaForceOpaque ("Force Opaque", Float) = 1 + _AlphaMod ("Alpha Mod", Range(-1, 1)) = 0.0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _AlphaGlobalMask ("Global Mask--{reference_property:_AlphaGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _AlphaGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] m_end_Alpha ("Alpha Options", Float) = 0 + [HideInInspector] m_lightingCategory ("Shading", Float) = 0 + [HideInInspector] m_start_PoiLightData ("Light Data--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/light-data},hover:Documentation}}", Float) = 0 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingAOMaps ("AO Maps (expand)--{reference_properties:[_LightingAOMapsPan, _LightingAOMapsUV,_LightDataAOStrengthR,_LightDataAOStrengthG,_LightDataAOStrengthB,_LightDataAOStrengthA, _LightDataAOGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingAOMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingAOMapsUV ("UV", Int) = 0 + [HideInInspector]_LightDataAOStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightDataAOStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightDataAOStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataAOGlobalMaskR ("Global Mask--{reference_property:_LightDataAOGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataAOGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingDetailShadowMaps ("Shadow Map (expand)--{reference_properties:[_LightingDetailShadowMapsPan, _LightingDetailShadowMapsUV,_LightingDetailShadowStrengthR,_LightingDetailShadowStrengthG,_LightingDetailShadowStrengthB,_LightingDetailShadowStrengthA,_LightingAddDetailShadowStrengthR,_LightingAddDetailShadowStrengthG,_LightingAddDetailShadowStrengthB,_LightingAddDetailShadowStrengthA, _LightDataDetailShadowGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingDetailShadowMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingDetailShadowMapsUV ("UV", Int) = 0 + [HideInInspector]_LightingDetailShadowStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingDetailShadowStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingDetailShadowStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthR ("Additive R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingAddDetailShadowStrengthG ("Additive G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthB ("Additive B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingAddDetailShadowStrengthA ("Additive A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataDetailShadowGlobalMaskR ("Global Mask--{reference_property:_LightDataDetailShadowGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataDetailShadowGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, B, A, Linear, false)]_LightingShadowMasks ("Shadow Masks (expand)--{reference_properties:[_LightingShadowMasksPan, _LightingShadowMasksUV,_LightingShadowMaskStrengthR,_LightingShadowMaskStrengthG,_LightingShadowMaskStrengthB,_LightingShadowMaskStrengthA, _LightDataShadowMaskGlobalMaskR]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightingShadowMasksPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightingShadowMasksUV ("UV", Int) = 0 + [HideInInspector]_LightingShadowMaskStrengthR ("R Strength", Range(0, 1)) = 1 + [HideInInspector]_LightingShadowMaskStrengthG ("G Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthB ("B Strength", Range(0, 1)) = 0 + [HideInInspector]_LightingShadowMaskStrengthA ("A Strength", Range(0, 1)) = 0 + [HideInInspector][ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _LightDataShadowMaskGlobalMaskR ("Global Mask--{reference_property:_LightDataShadowMaskGlobalMaskBlendTypeR}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _LightDataShadowMaskGlobalMaskBlendTypeR ("Blending", Range(0, 1)) = 2 + [HideInInspector] s_start_LightDataBasePass ("Base Pass (Directional & Baked Lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [Enum(Poi Custom, 0, Standard, 1, UTS2, 2, OpenLit(lil toon), 3)] _LightingColorMode ("Light Color Mode", Int) = 0 + [Enum(Poi Custom, 0, Normalized NDotL, 1, Saturated NDotL, 2, Casted Shadows Only, 3, SDF, 4)] _LightingMapMode ("Light Map Mode", Int) = 0 + [HideInInspector] s_start_LightDataSDF ("Signed Distance fields--{persistent_expand:true,default_expand:true, condition_showS:(_LightingMapMode==4)}", Float) = 1 + [TextureKeyword][sRGBWarning][ThryRGBAPacker(R, G, Nothing, Nothing, Linear, false)]_LightDataSDFMap ("SDF Map (expand)--{reference_properties:[_LightDataSDFMapPan, _LightDataSDFMapUV]}", 2D) = "white" { } + [HideInInspector][Vector2]_LightDataSDFMapPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _LightDataSDFMapUV ("UV", Int) = 0 + _LightDataSDFMapLOD ("LOD", Range(0, 1)) = 0 + _LightDataSDFBlendY ("Blend Y Direction", Range(0.001, 2)) = 1 + [HideInInspector] s_end_LightDataSDF ("Signed Distance fields", Float) = 1 + [Enum(Poi Custom, 0, Forced Local Direction, 1, Forced World Direction, 2, UTS2, 3, OpenLit(lil toon), 4, View Direction, 5)] _LightingDirectionMode ("Light Direction Mode", Int) = 0 + [Vector3]_LightngForcedDirection ("Forced Direction--{condition_showS:(_LightingDirectionMode==1 || _LightingDirectionMode==2)}", Vector) = (0, 0, 0) + _LightingViewDirOffsetPitch ("View Dir Offset Pitch--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + _LightingViewDirOffsetYaw ("View Dir Offset Yaw--{condition_showS:_LightingDirectionMode==5}", Range(-90, 90)) = 0 + [ToggleUI]_LightingForceColorEnabled ("Force Light Color", Float) = 0 + _LightingForcedColor ("Forced Color--{condition_showS:(_LightingForceColorEnabled==1), reference_property:_LightingForcedColorThemeIndex}", Color) = (1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _LightingForcedColorThemeIndex ("", Int) = 0 + _Unlit_Intensity ("Unlit_Intensity--{condition_showS:(_LightingColorMode==2)}", Range(0.001, 4)) = 1 + [DoNotLock][ToggleUI]_LightingCapEnabled ("Limit Brightness", Float) = 1 + [DoNotLock]_LightingCap ("Max Brightness--{condition_showS:(_LightingCapEnabled==1)}", Range(0, 10)) = 1 + [DoNotLock]_LightingMinLightBrightness ("Min Brightness", Range(0, 1)) = 0 + _LightingIndirectUsesNormals ("Indirect Uses Normals--{condition_showS:(_LightingColorMode==0)}", Range(0, 1)) = 0 + _LightingCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 0 + [DoNotLock]_LightingMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + [ToggleUI]_LightingVertexLightingEnabled ("Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingMirrorVertexLightingEnabled ("Mirror Vertex lights (Non-Important)", Float) = 1 + [ToggleUI]_LightingEnableLightVolumes ("Light Volumes", Float) = 1 + [HideInInspector] s_end_LightDataBasePass ("Base Pass", Float) = 1 + [HideInInspector] s_start_LightDataAddPass ("Add Pass (Point & Spot lights)--{persistent_expand:true,default_expand:true}", Float) = 1 + [ToggleUI]_LightingAdditiveEnable ("Pixel lights (Important)", Float) = 1 + [ToggleUI]_DisableDirectionalInAdd ("Ignore Directional Lights--{condition_showS:(_LightingAdditiveEnable==1)}", Float) = 1 + [ToggleUI]_LightingAdditiveLimited ("Limit Brightness", Float) = 1 + _LightingAdditiveLimit ("Max Brightness--{condition_showS:(_LightingAdditiveLimited==1)}", Range(0, 10)) = 1 + _LightingAdditiveCastedShadows ("Receive Casted Shadows", Range(0, 1)) = 1 + _LightingAdditiveMonochromatic ("Grayscale Lighting", Range(0, 1)) = 0 + _LightingAdditivePassthrough ("Point Light Passthrough--{condition_showS:(_LightingAdditiveEnable==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_LightDataAddPass ("Add Pass", Float) = 1 + [HideInInspector] s_start_LightDataDebug ("Debug / Data Visualizations--{reference_property:_LightDataDebugEnabled,persistent_expand:true}", Float) = 0 + [HideInInspector][DoNotAnimate][ThryToggleUI(false)]_LightDataDebugEnabled ("Debug", Float) = 0 + [ThryWideEnum(Direct Color, 0, Indirect Color, 1, Light Map, 2, Attenuation, 3, N Dot L, 4, Half Dir, 5, Direction, 6, Add Color, 7, Add Attenuation, 8, Add Shadow, 9, Add N Dot L, 10)] _LightingDebugVisualize ("Visualize", Int) = 0 + [HideInInspector] s_end_LightDataDebug ("Debug", Float) = 0 + [HideInInspector] m_end_PoiLightData ("Light Data", Float) = 0 + [HideInInspector] m_start_bakedLighting ("Baked Lighting", Float) = 0 + _GIEmissionMultiplier ("GI Emission Multiplier", Float) = 1 + [HideInInspector] DSGI ("DSGI", Float) = 0 //add this property for double sided illumination settings to be shown + [HideInInspector] LightmapFlags ("Lightmap Flags", Float) = 0 //add this property for lightmap flags settings to be shown + [HideInInspector] m_end_bakedLighting ("Baked Lighting", Float) = 0 + [HideInInspector] m_start_PoiShading (" Shading--{reference_property:_ShadingEnabled,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/main},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(VIGNETTE_MASKED)]_ShadingEnabled ("Enable Shading", Float) = 1 + [DoNotAnimate][KeywordEnum(TextureRamp, Multilayer Math, Wrapped, Skin, ShadeMap, Flat, Realistic, Cloth, SDF)] _LightingMode ("Lighting Type", Float) = 5 + _LightingShadowColor ("Shadow Tint--{condition_showS:(_LightingMode!=4 && _LightingMode!=1 && _LightingMode!=5)}", Color) = (1, 1, 1) + _ShadowStrength ("Shadow Strength--{condition_showS:(_LightingMode<=4 || _LightingMode==8)}", Range(0, 1)) = 1 + _LightingIgnoreAmbientColor ("Ignore Indirect Shadow Color--{condition_showS:(_LightingMode<=3 || _LightingMode==8)}", Range(0, 1)) = 1 + [Space(15)] + [HideInInspector] s_start_ShadingAddPass ("Add Pass (Point & Spot Lights)--{persistent_expand:true,default_expand:false}", Float) = 0 + [Enum(Realistic, 0, Toon, 1, Same as Base Pass, 3)] _LightingAdditiveType ("Lighting Type", Int) = 3 + _LightingAdditiveGradientStart ("Gradient Start--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = 0 + _LightingAdditiveGradientEnd ("Gradient End--{condition_showS:(_LightingAdditiveType==1)}", Range(0, 1)) = .5 + [HideInInspector] s_end_ShadingAddPass ("Add Pass", Float) = 0 + [HideInInspector] s_start_ShadingGlobalMask ("Global Masks--{persistent_expand:true,default_expand:false}", Float) = 0 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapApplyGlobalMaskIndex ("LightMap to Global Mask--{reference_property:_ShadingRampedLightMapApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapApplyGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _ShadingRampedLightMapInverseApplyGlobalMaskIndex ("Inversed LightMap to Global Mask--{reference_property:_ShadingRampedLightMapInverseApplyGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _ShadingRampedLightMapInverseApplyGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] s_end_ShadingGlobalMask ("Global Masks", Float) = 0 + [HideInInspector] m_end_PoiShading ("Shading", Float) = 0 + [HideInInspector] m_start_brdf (" Reflections & Specular--{reference_property:_MochieBRDF,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/shading/reflections-and-specular},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(MOCHIE_PBR)]_MochieBRDF ("Enable", Float) = 0 + _MochieMetallicMultiplier ("Metallic", Range(0, 1)) = 0 + _MochieRoughnessMultiplier ("Smoothness", Range(0, 1)) = 1 + _MochieReflectionTint ("Reflection Tint--{reference_property:_MochieReflectionTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _MochieReflectionTintThemeIndex ("", Int) = 0 + _MochieSpecularTint ("Specular Tint--{reference_property:_MochieSpecularTintThemeIndex}", Color) = (1, 1, 1, 1) + [HideInInspector][ThryWideEnum(Off, 0, Theme Color 0, 1, Theme Color 1, 2, Theme Color 2, 3, Theme Color 3, 4, ColorChord 0, 5, ColorChord 1, 6, ColorChord 2, 7, ColorChord 3, 8, AL Theme 0, 9, AL Theme 1, 10, AL Theme 2, 11, AL Theme 3, 12)] _MochieSpecularTintThemeIndex ("", Int) = 0 + [sRGBWarning][ThryRGBAPacker(R Metallic Map, G Smoothness Map, B Reflection Mask, A Specular Mask, linear, false)]_MochieMetallicMaps ("Packed Maps [Click to Expand]--{reference_properties:[_MochieMetallicMapsPan, _MochieMetallicMapsUV, _MochieMetallicMapsStochastic, _MochieMetallicMapsMetallicChannel, _MochieMetallicMapsRoughnessChannel, _MochieMetallicMapsReflectionMaskChannel, _MochieMetallicMapsSpecularMaskChannel, _MochieMetallicMapInvert, _MochieRoughnessMapInvert, _MochieReflectionMaskInvert, _MochieSpecularMaskInvert]}", 2D) = "white" { } + [HideInInspector][Vector2]_MochieMetallicMapsPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)]_MochieMetallicMapsUV ("UV", Int) = 0 + [HideInInspector][ToggleUI]_MochieMetallicMapsStochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsMetallicChannel ("Metallic Channel", Float) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsRoughnessChannel ("Smoothness Channel", Float) = 1 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsReflectionMaskChannel ("Reflection Mask Channel", Float) = 2 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3, White, 4)]_MochieMetallicMapsSpecularMaskChannel ("Specular Mask Channel", Float) = 3 + [HideInInspector][ToggleUI]_MochieMetallicMapInvert ("Invert Metallic", Float) = 0 + [HideInInspector][ToggleUI]_MochieRoughnessMapInvert ("Invert Smoothness", Float) = 0 + [HideInInspector][ToggleUI]_MochieReflectionMaskInvert ("Invert Reflection Mask", Float) = 0 + [HideInInspector][ToggleUI]_MochieSpecularMaskInvert ("Invert Specular Mask", Float) = 0 + [Space(10)] + _MochieReflectionStrength ("Reflection Visibility", Range(0, 1)) = 1 + _MochieSpecularStrength ("Specular Visibility", Range(0, 5)) = 1 + _RefSpecFresnelStrength ("Fresnel Strength", Range(0, 1)) = .5 + _SFExposureOcclusion ("Exposure Occlusion", Range(0, 1)) = 0 + [Space(10)] + [ThryTexture][NoScaleOffset]_MochieReflCube ("Cubemap", Cube) = "" { } + [ToggleUI]_MochieForceFallback ("Force Fallback", Int) = 0 + [HideInInspector] s_start_BRDFTPSMaskGroup ("TPS--{condition_showS:(_TPSPenetratorEnabled==1)}", Float) = 0 + [ThryToggleUI(true)] _BRDFTPSDepthEnabled (" TPS Depth Enabled", Float) = 0 + _BRDFTPSReflectionMaskStrength ("Reflection Mask Strength--{condition_showS:(_BRDFTPSDepthEnabled==1)}", Range(0, 1)) = 1 + _BRDFTPSSpecularMaskStrength ("Specular Mask Strength--{condition_showS:(_BRDFTPSDepthEnabled==1)}", Range(0, 1)) = 1 + [HideInInspector] s_end_BRDFTPSMaskGroup ("", Float) = 0 + [HideInInspector] s_start_ggxanisotropics(" Anisotropics--{reference_property:_GGXAnisotropics,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ThryToggle(GGX_ANISOTROPICS)]_GGXAnisotropics ("Enable", Float) = 0 + [sRGBWarning]_AnisotropyMap("Anisotropy Map--{reference_properties:[_AnisotropyMapPan, _AnisotropyMapUV, _AnisotropyMapChannel]}", 2D) = "bump" { } + [HideInInspector][Vector2]_AnisotropyMapPan("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector][ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)] _AnisotropyMapUV ("UV", Int) = 0 + [HideInInspector][Enum(R, 0, G, 1, B, 2, A, 3)]_AnisotropyMapChannel ("Channel", Float) = 0 + _Anisotropy ("Anisotropy", Range(-1, 1)) = 0 + _ReflectionAnisotropicStretch("Reflection Stretch", Range(1, 5)) = 1 + _RoughnessAnisotropy("Roughness Anisotropy", Range(0, 1)) = 1 + [HideInInspector] s_end_ggxanisotropics ("", Float) = 0 + [HideInInspector] s_start_PBRSecondSpecular ("2nd Specular--{reference_property:_Specular2ndLayer,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_Specular2ndLayer ("2nd Specular", Float) = 0 + _MochieSpecularStrength2 ("Visibility", Range(0, 5)) = 1 + _MochieRoughnessMultiplier2 ("Smoothness", Range(0, 1)) = 1 + [HideInInspector] s_end_PBRSecondSpecular ("Name", Float) = 0 + [HideInInspector] s_start_PBRSplitMaskSample ("Split Mask Sampling--{reference_property:_PBRSplitMaskSample,persistent_expand:true,default_expand:false}", Float) = 0 + [HideInInspector][ToggleUI]_PBRSplitMaskSample ("Split Mask Sampling", Float) = 0 + [VectorLabel(tX, tY, oX, oY)]_PBRMaskScaleTiling ("Tiling/Offset", Vector) = (1, 1, 0, 0) + [ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8, Polar UV, 6, Distorted UV, 7, Matcap, 9)]_MochieMetallicMasksUV ("UV", Int) = 0 + [ToggleUI]_PBRSplitMaskStochastic ("Stochastic Sampling", Float) = 0 + [Vector2]_MochieMetallicMasksPan ("Panning", Vector) = (0, 0, 0, 0) + [HideInInspector] s_end_PBRSplitMaskSample ("Split Mask Sampling", Float) = 0 + [HideInInspector] s_start_brdfadvanced ("GSAA & Advanced Controls--{persistent_expand:true,default_expand:false}", Float) = 0 + [ToggleUI]_MochieLitFallback ("Lit Fallback", Float) = 1 + [ToggleUI]_IgnoreCastedShadows ("Ignore Casted Shadows", Float) = 0 + _PBRNormalSelect ("Pixel Normal Mix", Range(0, 1)) = 1 + [ThryToggleUI(true)]_MochieGSAAEnabled (" GSAA", Float) = 1 + _PoiGSAAVariance ("GSAA Variance--{condition_showS:(_MochieGSAAEnabled==1)}", Range(0, 1)) = 0.15 + _PoiGSAAThreshold ("GSAA Threshold--{condition_showS:(_MochieGSAAEnabled==1)}", Range(0, 1)) = 0.1 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieMetallicGlobalMask ("Metallic--{reference_property:_MochieMetallicGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieMetallicGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieSmoothnessGlobalMask ("Smoothness--{reference_property:_MochieSmoothnessGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieSmoothnessGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieReflectionStrengthGlobalMask ("Reflection Strength--{reference_property:_MochieReflectionStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieReflectionStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [ThryWideEnum(Off, 0, 1R, 1, 1G, 2, 1B, 3, 1A, 4, 2R, 5, 2G, 6, 2B, 7, 2A, 8, 3R, 9, 3G, 10, 3B, 11, 3A, 12, 4R, 13, 4G, 14, 4B, 15, 4A, 16)] _MochieSpecularStrengthGlobalMask ("Specular Strength--{reference_property:_MochieSpecularStrengthGlobalMaskBlendType}", Int) = 0 + [HideInInspector][ThryWideEnum(Add, 7, Subtract, 1, Multiply, 2, Divide, 3, Min, 4, Max, 5, Average, 6, Replace, 0)] _MochieSpecularStrengthGlobalMaskBlendType ("Blending", Int) = 2 + [HideInInspector] s_end_brdfadvanced ("", Float) = 0 + [HideInInspector] m_end_brdf ("", Float) = 0 + [HideInInspector] m_OutlineCategory (" Outlines--{reference_property:_EnableOutlines,button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/outlines/main},hover:Documentation}}", Float) = 0 + [HideInInspector] m_specialFXCategory ("Special FX", Float) = 0 + [HideInInspector] m_vertexCategory ("Vertex Options", Float) = 0 + [HideInInspector] m_start_Uzumore (" View Clip Prevention (Uzumore)--{reference_property:_UzumoreCategoryToggle,button_author:{text:sigmal00,action:{type:URL,data:https://github.com/sigmal00},hover:GitHub}}, button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/vertex-options/view-clip-prevention},hover:Documentation}}", Float) = 0 + [HideInInspector][ThryToggle(POI_UZUMORE)] _UzumoreCategoryToggle (" View Clip Prevention (Uzumore)", Float) = 0 + [ToggleUI] _UzumoreEnabled ("Animation Toggle", Float) = 1 + _UzumoreAmount ("Push Amount (m)", Float) = 0.1 + _UzumoreBias ("Push Bias", Float) = 0.001 + [sRGBWarning]_UzumoreMask ("Push Mask (A)", 2D) = "white" { } + [ThryWideEnum(R, 0, G, 1, B, 2, A, 3)] _UzumoreMaskUV ("Push Mask Channel", Float) = 3 + [HideInInspector] m_end_Uzumore ("Camera Push Back", Float) = 0 + [HideInInspector] m_modifierCategory ("Global Modifiers & Data", Float) = 0 + [HideInInspector] m_start_PoiGlobalCategory ("Global Data and Masks", Float) = 0 + [HideInInspector] m_start_GlobalThemes ("Global Themes--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/color-and-normals/global-themes},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HDR]_GlobalThemeColor0 ("Theme Color 0", Color ) = (1, 1, 1, 1) + _GlobalThemeHue0 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed0 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation0 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue0 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor0 ("Theme Color 0", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HDR]_GlobalThemeColor1 ("Theme Color 1", Color ) = (1, 1, 1, 1) + _GlobalThemeHue1 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed1 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation1 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue1 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor1 ("Theme Color 1", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HDR]_GlobalThemeColor2 ("Theme Color 2", Color ) = (1, 1, 1, 1) + _GlobalThemeHue2 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed2 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation2 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue2 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor2 ("Theme Color 2", Float) = 0 + [HideInInspector] m_start_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HDR]_GlobalThemeColor3 ("Theme Color 3", Color ) = (1, 1, 1, 1) + _GlobalThemeHue3 ("Hue Adjust", Range( 0, 1)) = 0 + _GlobalThemeHueSpeed3 ("Hue Adjust Speed", Float ) = 0 + _GlobalThemeSaturation3 ("Saturation Adjust", Range(-1, 1)) = 0 + _GlobalThemeValue3 ("Value Adjust", Range(-1, 1)) = 0 + [HideInInspector] m_end_GlobalThemeColor3 ("Theme Color 3", Float) = 0 + [HideInInspector] m_end_GlobalThemes ("Global Themes", Float ) = 0 + [HideInInspector] m_start_GlobalMask ("Global Mask--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/global-masks},hover:Documentation}}", Float) = 0 + [HideInInspector] m_start_GlobalMaskModifiers ("Modifiers", Float) = 0 + [HideInInspector] m_end_GlobalMaskModifiers ("", Float) = 0 + [HideInInspector] m_end_GlobalMask ("Global Mask", Float) = 0 + [HideInInspector] m_end_PoiGlobalCategory ("Global Data and Masks ", Float) = 0 + [HideInInspector] m_start_PoiUVCategory ("UVs", Float) = 0 + [HideInInspector] m_start_Stochastic ("Stochastic Sampling--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/stochastic-sampling},hover:Documentation}}", Float) = 0 + [KeywordEnum(Deliot Heitz, Hextile, None)] _StochasticMode ("Sampling Mode", Float) = 0 + [HideInInspector] s_start_deliot ("Deliot Heitz--{persistent_expand:true,default_expand:false,condition_show:_StochasticMode==0}", Float) = 0 + _StochasticDeliotHeitzDensity ("Detiling Density", Range(0.1, 10)) = 1 + [HideInInspector] s_end_deliot ("Deliot Heitz", Float) = 0 + [HideInInspector] m_end_Stochastic ("Stochastic Sampling", Float) = 0 + [HideInInspector] m_start_uvLocalWorld ("Local World UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/local-world-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos0 ("Local X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3, VColor R, 4, VColor G, 5, VColor B, 6, VColor A, 7)] _UVModLocalPos1 ("Local Y", Int) = 1 + [Space(10)] + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos0 ("World X", Int) = 0 + [ThryWideEnum(X, 0, Y, 1, Z, 2, Zero, 3)] _UVModWorldPos1 ("World Y", Int) = 2 + [HideInInspector] m_end_uvLocalWorld ("Local World UV", Float) = 0 + [HideInInspector] m_start_uvPanosphere ("Panosphere UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/panosphere-uv},hover:Documentation}}", Float) = 0 + [ToggleUI] _StereoEnabled ("Stereo Enabled", Float) = 0 + [ToggleUI] _PanoUseBothEyes ("Perspective Correct (VR)", Float) = 1 + [HideInInspector] m_end_uvPanosphere ("Panosphere UV", Float) = 0 + [HideInInspector] m_start_uvPolar ("Polar UV--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/modifiers/uvs/polar-uv},hover:Documentation}}", Float) = 0 + [ThryWideEnum(UV0, 0, UV1, 1, UV2, 2, UV3, 3, Panosphere, 4, World Pos, 5, Local Pos, 8)] _PolarUV ("UV", Int) = 0 + [Vector2]_PolarCenter ("Center Coordinate", Vector) = (.5, .5, 0, 0) + _PolarRadialScale ("Radial Scale", Float) = 1 + _PolarLengthScale ("Length Scale", Float) = 1 + _PolarSpiralPower ("Spiral Power", Float) = 0 + [HideInInspector] m_end_uvPolar ("Polar UV", Float) = 0 + [HideInInspector] m_end_PoiUVCategory ("UVs ", Float) = 0 + [HideInInspector] m_start_PoiPostProcessingCategory ("Post Processing", Float) = 0 + [HideInInspector] m_start_PPAnimations ("PP Animations--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/post-processing/pp-animations},hover:Documentation}}", Float) = 0 + [Helpbox(1)] _PPHelp ("This section meant for real time adjustments through animations and not to be changed in unity", Int) = 0 + _PPLightingMultiplier ("Lighting Mulitplier", Float) = 1 + _PPLightingAddition ("Lighting Add", Float) = 0 + _PPEmissionMultiplier ("Emission Multiplier", Float) = 1 + _PPFinalColorMultiplier ("Final Color Multiplier", Float) = 1 + [HideInInspector] m_end_PPAnimations ("PP Animations ", Float) = 0 + [HideInInspector] m_end_PoiPostProcessingCategory ("Post Processing ", Float) = 0 + [HideInInspector] m_thirdpartyCategory ("Third Party", Float) = 0 + [HideInInspector] m_renderingCategory ("Rendering--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/main},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.CullMode)] _Cull ("Cull", Float) = 2 + [DoNotAnimate][Enum(UnityEngine.Rendering.CompareFunction)] _ZTest ("ZTest", Float) = 4 + [DoNotAnimate][Enum(Off, 0, On, 1)] _ZWrite ("ZWrite", Int) = 1 + [DoNotAnimate][ThryMask(Thry.ColorMaskFlags)] _ColorMask ("Color Mask", Int) = 15 + [DoNotAnimate] _OffsetFactor ("Offset Factor", Float) = 0.0 + [DoNotAnimate] _OffsetUnits ("Offset Units", Float) = 0.0 + [DoNotAnimate][ToggleUI] _RenderingReduceClipDistance ("Reduce Clip Distance", Float) = 0 + [DoNotAnimate][ToggleUI] _ZClip ("Z Clip", Float) = 1 + [DoNotAnimate][ToggleUI] _IgnoreFog ("Ignore Fog", Float) = 0 + [DoNotAnimate][ToggleUI]_FlipBackfaceNormals ("Flip Backface Normals", Int) = 1 + [DoNotAnimate][HideInInspector] Instancing ("Instancing", Float) = 0 //add this property for instancing variants settings to be shown + [ToggleUI] _RenderingEarlyZEnabled ("Early Z", Float) = 0 + [HideInInspector] m_start_blending ("Blending--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/blending},hover:Documentation}}", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOp ("RGB Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlend ("RGB Destination Blend", Int) = 0 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOp ("RGB Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlend ("RGB Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlend ("RGB Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_start_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [DoNotAnimate][Enum(Thry.BlendOp)] _BlendOpAlpha ("Alpha Blend Op", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _SrcBlendAlpha ("Alpha Source Blend", Int) = 1 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _DstBlendAlpha ("Alpha Destination Blend", Int) = 10 + [DoNotAnimate][Space][ThryHeaderLabel(Additive Blending, 13)] + [DoNotAnimate][Enum(Thry.BlendOp)] _AddBlendOpAlpha ("Alpha Blend Op", Int) = 4 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddSrcBlendAlpha ("Alpha Source Blend", Int) = 0 + [DoNotAnimate][Enum(UnityEngine.Rendering.BlendMode)] _AddDstBlendAlpha ("Alpha Destination Blend", Int) = 1 + [DoNotAnimate][HideInInspector] m_end_alphaBlending ("Advanced Alpha Blending", Float) = 0 + [HideInInspector] m_end_blending ("Blending", Float) = 0 + [HideInInspector] m_start_StencilPassOptions ("Stencil--{button_help:{text:Tutorial,action:{type:URL,data:https://www.poiyomi.com/rendering/stencil},hover:Documentation}}", Float) = 0 + [ThryWideEnum(Simple, 0, Front Face vs Back Face, 1)] _StencilType ("Stencil Type", Float) = 0 + [IntRange] _StencilRef ("Stencil Reference Value", Range(0, 255)) = 0 + [IntRange] _StencilReadMask ("Stencil ReadMask Value", Range(0, 255)) = 255 + [IntRange] _StencilWriteMask ("Stencil WriteMask Value", Range(0, 255)) = 255 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilPassOp ("Stencil Pass Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFailOp ("Stencil Fail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilZFailOp ("Stencil ZFail Op--{condition_showS:(_StencilType==0)}", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilCompareFunction ("Stencil Compare Function--{condition_showS:(_StencilType==0)}", Float) = 8 + [HideInInspector] m_start_StencilPassBackOptions("Back--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp0 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackPassOp ("Back Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackFailOp ("Back Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilBackZFailOp ("Back ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilBackCompareFunction ("Back Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassBackOptions("Back", Float) = 0 + [HideInInspector] m_start_StencilPassFrontOptions("Front--{condition_showS:(_StencilType==1)}", Float) = 0 + [Helpbox(1)] _FFBFStencilHelp1 ("Front Face and Back Face Stencils only work when locked in due to Unity's Stencil managment", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontPassOp ("Front Pass Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontFailOp ("Front Fail Op", Float) = 0 + [Enum(UnityEngine.Rendering.StencilOp)] _StencilFrontZFailOp ("Front ZFail Op", Float) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)] _StencilFrontCompareFunction ("Front Compare Function", Float) = 8 + [HideInInspector] m_end_StencilPassFrontOptions("Front", Float) = 0 + [HideInInspector] m_end_StencilPassOptions ("Stencil", Float) = 0 + } + SubShader + { + Tags { "RenderType" = "Opaque" "Queue" = "Geometry" "VRCFallback" = "Standard" } + Pass + { + Name "Base" + Tags { "LightMode" = "ForwardBase" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Back + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_MOCHIEMETALLICMAPS + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdbase + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #pragma multi_compile_fragment _ VERTEXLIGHT_ON + #define POI_PASS_BASE + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + #ifndef VRC_LIGHT_VOLUMES_INCLUDED + #define VRC_LIGHT_VOLUMES_INCLUDED + #define VRCLV_VERSION 2 + #define VRCLV_MAX_VOLUMES_COUNT 32 + #define VRCLV_MAX_LIGHTS_COUNT 128 + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + cbuffer LightVolumeUniforms { + #endif + uniform float _UdonLightVolumeEnabled; + uniform float _UdonLightVolumeVersion; + uniform float _UdonLightVolumeCount; + uniform float _UdonLightVolumeAdditiveMaxOverdraw; + uniform float _UdonLightVolumeAdditiveCount; + uniform float _UdonLightVolumeProbesBlend; + uniform float _UdonLightVolumeSharpBounds; + uniform float4x4 _UdonLightVolumeInvWorldMatrix[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeRotation[VRCLV_MAX_VOLUMES_COUNT * 2]; // Legacy! Used in this version to have back compatibility with older worlds. Array commented above will be used in future releases! Legacy! + uniform float3 _UdonLightVolumeInvLocalEdgeSmooth[VRCLV_MAX_VOLUMES_COUNT]; + uniform float3 _UdonLightVolumeUvw[VRCLV_MAX_VOLUMES_COUNT * 6]; // Legacy! AABB Bounds of islands on the 3D Texture atlas. Array commented above will be used in future releases! Legacy! + uniform float4 _UdonLightVolumeOcclusionUvw[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeColor[VRCLV_MAX_VOLUMES_COUNT]; + uniform float _UdonPointLightVolumeCount; + uniform float _UdonPointLightVolumeCubeCount; + uniform float4 _UdonPointLightVolumePosition[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeColor[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeDirection[VRCLV_MAX_LIGHTS_COUNT]; + uniform float3 _UdonPointLightVolumeCustomID[VRCLV_MAX_LIGHTS_COUNT]; + uniform float _UdonLightBrightnessCutoff; + uniform float _UdonLightVolumeOcclusionCount; + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + } + #endif + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + uniform Texture3D _UdonLightVolume; + uniform SamplerState sampler_UdonLightVolume; + uniform Texture2DArray _UdonPointLightVolumeTexture; + #define LV_SAMPLE(tex, uvw) tex.SampleLevel(sampler_UdonLightVolume, uvw, 0) + #else + #define LV_SAMPLE(tex, uvw) float4(0,0,0,0) + #endif + #define LV_PI 3.141592653589793f + #define LV_PI2 6.283185307179586f + float LV_Smoothstep01(float x) { + return x * x * (3 - 2 * x); + } + float3 LV_MultiplyVectorByQuaternion(float3 v, float4 q) { + float3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); + } + float3 LV_MultiplyVectorByMatrix2x3(float3 v, float3 r0, float3 r1) { + float3 r2 = cross(r0, r1); + return float3(dot(v, r0), dot(v, r1), dot(v, r2)); + } + float LV_FastAcos(float x) { + float absX = abs(x); + float res = -0.156583f * absX + LV_PI * 0.5f; + res *= sqrt(1.0f - absX); + return (x >= 0) ? res : (LV_PI - res); + } + float LV_DistributionGGX(float NoH, float roughness) { + float f = (roughness - 1) * ((roughness + 1) * (NoH * NoH)) + 1; + return (roughness * roughness) / ((float) LV_PI * f * f); + } + bool LV_PointLocalAABB(float3 localUVW) { + return all(abs(localUVW) <= 0.5); + } + float3 LV_LocalFromVolume(uint volumeID, float3 worldPos) { + return mul(_UdonLightVolumeInvWorldMatrix[volumeID], float4(worldPos, 1.0)).xyz; + } + float LV_EvaluateSH(float L0, float3 L1, float3 n) { + return L0 + dot(L1, n); + } + float4 LV_SampleCubemapArray(uint id, float3 dir) { + float3 absDir = abs(dir); + float2 uv; + uint face; + if (absDir.x >= absDir.y && absDir.x >= absDir.z) { + face = dir.x > 0 ? 0 : 1; + uv = float2((dir.x > 0 ? -dir.z : dir.z), -dir.y) * rcp(absDir.x); + } else if (absDir.y >= absDir.z) { + face = dir.y > 0 ? 2 : 3; + uv = float2(dir.x, (dir.y > 0 ? dir.z : -dir.z)) * rcp(absDir.y); + } else { + face = dir.z > 0 ? 4 : 5; + uv = float2((dir.z > 0 ? dir.x : -dir.x), -dir.y) * rcp(absDir.z); + } + float3 uvid = float3(uv * 0.5 + 0.5, id * 6 + face); + return LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + } + float4 LV_ProjectQuadLightIrradianceSH(float3 shadingPosition, float3 lightVertices[4]) { + [unroll] for (uint edge0 = 0; edge0 < 4; edge0++) { + lightVertices[edge0] = normalize(lightVertices[edge0] - shadingPosition); + } + const float3 zhDir0 = float3(0.866025, -0.500001, -0.000004); + const float3 zhDir1 = float3(-0.759553, 0.438522, -0.480394); + const float3 zhDir2 = float3(-0.000002, 0.638694, 0.769461); + const float3 zhWeightL1y = float3(2.1995339f, 2.50785367f, 1.56572711f); + const float3 zhWeightL1z = float3(-1.82572523f, -2.08165037f, 0.00000000f); + const float3 zhWeightL1x = float3(2.42459869f, 1.44790525f, 0.90397552f); + float solidAngle = 0.0; + float3 surfaceIntegral = 0.0; + [loop] for (uint edge1 = 0; edge1 < 4; edge1++) { + uint next = (edge1 + 1) % 4; + uint prev = (edge1 + 4 - 1) % 4; + float3 prevVert = lightVertices[prev]; + float3 thisVert = lightVertices[edge1]; + float3 nextVert = lightVertices[next]; + float3 a = cross(thisVert, prevVert); + float3 b = cross(thisVert, nextVert); + float lenA = length(a); + float lenB = length(b); + solidAngle += LV_FastAcos(clamp(dot(a, b) / (lenA * lenB), -1, 1)); + float3 mu = b * rcp(lenB); + float cosGamma = dot(thisVert, nextVert); + float gamma = LV_FastAcos(clamp(cosGamma, -1, 1)); + surfaceIntegral.x += gamma * dot(zhDir0, mu); + surfaceIntegral.y += gamma * dot(zhDir1, mu); + surfaceIntegral.z += gamma * dot(zhDir2, mu); + } + solidAngle = solidAngle - LV_PI2; + surfaceIntegral *= 0.5; + const float normalizationL0 = 0.5f * sqrt(1.0f / LV_PI); + float l0 = normalizationL0 * solidAngle; + float l1y = dot(zhWeightL1y, surfaceIntegral); + float l1z = dot(zhWeightL1z, surfaceIntegral); + float l1x = dot(zhWeightL1x, surfaceIntegral); + const float cosineKernelL0 = LV_PI; // (1) + const float cosineKernelL1 = LV_PI2 / 3.0f; // (1) + const float oneOverPi = 1.0f / LV_PI; // (2) + const float normalizationL1 = 0.5f * sqrt(3.0f / LV_PI); // (3) + const float weightL0 = cosineKernelL0 * normalizationL0 * oneOverPi; // (1), (2), (3) + const float weightL1 = cosineKernelL1 * normalizationL1 * oneOverPi; // (1), (2), (3) + l0 *= weightL0; + l1y *= weightL1; + l1z *= weightL1; + l1x *= weightL1; + return float4(l1x, l1y, l1z, l0); + } + void LV_QuadLight(float3 worldPos, float3 centroidPos, float4 rotationQuat, float2 size, float3 color, float sqMaxDist, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 lightToWorldPos = worldPos - centroidPos; + float3 normal = LV_MultiplyVectorByQuaternion(float3(0, 0, 1), rotationQuat); + if (dot(normal, lightToWorldPos) < 0.0) return; + float sqCutoffDist = sqMaxDist - dot(lightToWorldPos, lightToWorldPos); + color.rgb *= saturate(sqCutoffDist / sqMaxDist) * LV_PI * occlusion; + float2 halfSize = size * 0.5f; + float3 xAxis = LV_MultiplyVectorByQuaternion(float3(1, 0, 0), rotationQuat); + float3 yAxis = cross(normal, xAxis); + float3 verts[4]; + verts[0] = centroidPos + (-halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[1] = centroidPos + ( halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[2] = centroidPos + ( halfSize.x * xAxis) + (-halfSize.y * yAxis); + verts[3] = centroidPos + (-halfSize.x * xAxis) + (-halfSize.y * yAxis); + float4 areaLightSH = LV_ProjectQuadLightIrradianceSH(worldPos, verts); + float lenL1 = length(areaLightSH.xyz); + if (lenL1 > areaLightSH.w) areaLightSH.xyz *= areaLightSH.w / lenL1; + L0 += areaLightSH.w * color.rgb; + L1r += areaLightSH.xyz * color.r; + L1g += areaLightSH.xyz * color.g; + L1b += areaLightSH.xyz * color.b; + count++; + } + float3 LV_PointLightAttenuation(float sqdist, float sqlightSize, float3 color, float brightnessCutoff, float sqMaxDist) { + float mask = saturate(1 - sqdist / sqMaxDist); + return mask * mask * color * sqlightSize / (sqdist + sqlightSize); + } + float LV_PointLightSolidAngle(float sqdist, float sqlightSize) { + return saturate(sqrt(sqdist / (sqlightSize + sqdist))); + } + void LV_SphereLight(float sqdist, float3 dirN, float sqlightSize, float3 color, float occlusion, float sqMaxDist, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 att = LV_PointLightAttenuation(sqdist, sqlightSize, color, _UdonLightBrightnessCutoff, sqMaxDist); + float3 l0 = att * occlusion; + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLight(float sqdist, float3 dirN, float sqlightSize, float3 att, float spotMask, float cosAngle, float coneFalloff, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float smoothedCone = LV_Smoothstep01(saturate(spotMask * coneFalloff)); + float3 l0 = att * (occlusion * smoothedCone); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * saturate(1 - cosAngle)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightCookie(float sqdist, float3 dirN, float sqlightSize, float3 att, float4 lightRot, float tanAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 localDir = LV_MultiplyVectorByQuaternion(-dirN, lightRot); + float2 uv = localDir.xy * rcp(localDir.z * tanAngle); + if ( + localDir.z <= 0.0 || // Culling by direction + abs(uv.x) > 1.0 || abs(uv.y) > 1.0 // Culling by UV + ) return; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 - customId - 1; + float3 uvid = float3(uv * 0.5 + 0.5, id); + float angleSize = saturate(rsqrt(1 + tanAngle * tanAngle)); + float4 cookie = LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + float3 l0 = att * cookie.rgb * (cookie.a * occlusion); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * (1 - angleSize)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightAttenuationLUT(float sqdist, float3 dirN, float sqlightSize, float3 color, float spotMask, float cosAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float dirRadius = sqdist * abs(sqlightSize); + float spot = 1 - saturate(spotMask * rcp(1 - cosAngle)); + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId - 1; + float3 uvid = float3(sqrt(float2(spot, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * occlusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } + void LV_PointLight(uint id, float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 customID_data = _UdonPointLightVolumeCustomID[id]; + int shadowId = (int) customID_data.y; // Shadowmask id + int customId = (int) customID_data.x; // Custom Texture ID + float sqrRange = customID_data.z; // Squared culling distance + float4 pos = _UdonPointLightVolumePosition[id]; // Light position and inversed squared range + float3 dir = pos.xyz - worldPos; + float sqlen = max(dot(dir, dir), 1e-6); + if (sqlen > sqrRange) return; // Early distance based culling + float3 dirN = dir * rsqrt(sqlen); + float lightOcclusion = 1; + if (_UdonLightVolumeOcclusionCount != 0 && shadowId >= 0) { + lightOcclusion = dot(occlusion, float4(shadowId == 0, shadowId == 1, shadowId == 2, shadowId == 3)); + } + float4 color = _UdonPointLightVolumeColor[id]; // Color, angle + float4 ldir = _UdonPointLightVolumeDirection[id]; // Dir + falloff or Rotation + if (pos.w < 0) { // It is a spot light + float angle = color.w; + float spotMask = dot(ldir.xyz, -dirN) - angle; + if(customId >= 0 && spotMask < 0) return; // Spot cone based culling + if (customId > 0) { // If it uses Attenuation LUT + LV_SphereSpotLightAttenuationLUT(sqlen, dirN, -pos.w, color.rgb, spotMask, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + float3 att = LV_PointLightAttenuation(sqlen, -pos.w, color.rgb, _UdonLightBrightnessCutoff, sqrRange); + if (customId < 0) { // If uses cookie + LV_SphereSpotLightCookie(sqlen, dirN, -pos.w, att, ldir, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + LV_SphereSpotLight(sqlen, dirN, -pos.w, att, spotMask, angle, ldir.w, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + } else if (color.w <= 1.5f) { // It is a point light + if (customId > 0) { // Using LUT + float invSqRange = abs(pos.w); // Sign of range defines if it's point light (positive) or a spot light (negative) + float dirRadius = sqlen * invSqRange; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId; + float3 uvid = float3(sqrt(float2(0, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * lightOcclusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } else { // If it uses default parametric attenuation + float3 l0 = 0, l1r = 0, l1g = 0, l1b = 0; + LV_SphereLight(sqlen, dirN, pos.w, color.rgb, lightOcclusion, sqrRange, l0, l1r, l1g, l1b, count); + float3 cubeColor = 1; + if (customId < 0) { // If it uses a cubemap + uint id = -customId - 1; // Cubemap ID starts from zero and should not take in count texture array slices count. + cubeColor = LV_SampleCubemapArray(id, LV_MultiplyVectorByQuaternion(dirN, ldir)).xyz; + } + L0 += l0 * cubeColor; + L1r += l1r * cubeColor.r; + L1g += l1g * cubeColor.g; + L1b += l1b * cubeColor.b; + } + } else { // It is an area light + LV_QuadLight(worldPos, pos.xyz, ldir, float2(pos.w, color.w - 2.0f), color.rgb, sqrRange, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + void LV_SampleLightVolumeTex(float3 uvw0, float3 uvw1, float3 uvw2, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b) { + float4 tex0 = LV_SAMPLE(_UdonLightVolume, uvw0); + float4 tex1 = LV_SAMPLE(_UdonLightVolume, uvw1); + float4 tex2 = LV_SAMPLE(_UdonLightVolume, uvw2); + L0 = tex0.rgb; + L1r = float3(tex1.r, tex2.r, tex0.a); + L1g = float3(tex1.g, tex2.g, tex1.a); + L1b = float3(tex1.b, tex2.b, tex2.a); + } + float LV_BoundsMask(float3 localUVW, float3 invLocalEdgeSmooth) { + float3 distToMin = (localUVW + 0.5) * invLocalEdgeSmooth; + float3 distToMax = (0.5 - localUVW) * invLocalEdgeSmooth; + float3 fade = saturate(min(distToMin, distToMax)); + return fade.x * fade.y * fade.z; + } + void LV_SampleLightProbe(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz; + L1g += unity_SHAg.xyz; + L1b += unity_SHAb.xyz; + } + void LV_SampleLightProbeDering(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz * 0.565f; + L1g += unity_SHAg.xyz * 0.565f; + L1b += unity_SHAb.xyz * 0.565f; + } + void LV_SampleVolume(uint id, float3 localUVW, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + float3 uvw0 = uvwScaled + _UdonLightVolumeUvw[uvwID].xyz; + float3 uvw1 = uvwScaled + _UdonLightVolumeUvw[uvwID + 2].xyz; + float3 uvw2 = uvwScaled + _UdonLightVolumeUvw[uvwID + 4].xyz; + float3 l0, l1r, l1g, l1b; + LV_SampleLightVolumeTex(uvw0, uvw1, uvw2, l0, l1r, l1g, l1b); + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + occlusion = 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + occlusion = 1; + } + float4 color = _UdonLightVolumeColor[id]; + L0 += l0 * color.rgb; + l1r *= color.r; + l1g *= color.g; + l1b *= color.b; + if (color.a != 0) { + float3 r0 = _UdonLightVolumeRotation[id * 2].xyz; + float3 r1 = _UdonLightVolumeRotation[id * 2 + 1].xyz; + L1r += LV_MultiplyVectorByMatrix2x3(l1r, r0, r1); + L1g += LV_MultiplyVectorByMatrix2x3(l1g, r0, r1); + L1b += LV_MultiplyVectorByMatrix2x3(l1b, r0, r1); + } else { + L1r += l1r; + L1g += l1g; + L1b += l1b; + } + } + float4 LV_SampleVolumeOcclusion(uint id, float3 localUVW) { + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + return 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + return 1; + } + } + void LV_PointLightVolumeSH(float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + uint pointCount = min((uint) _UdonPointLightVolumeCount, VRCLV_MAX_LIGHTS_COUNT); + if (pointCount == 0) return; + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_LIGHTS_COUNT); + uint pcount = 0; // Point lights counter + [loop] for (uint pid = 0; pid < pointCount && pcount < maxOverdraw; pid++) { + LV_PointLight(pid, worldPos, occlusion, L0, L1r, L1g, L1b, pcount); + } + } + void LV_LightVolumeSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + if (volumesCount == 0) { // Legacy! Fallback to default light probes if Light Volume are not enabled or a version is too old to have a support. Legacy! + LV_SampleLightProbe(L0, L1r, L1g, L1b); + return; + } + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + bool lightProbesBlend = _UdonLightVolumeProbesBlend; + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + [loop] for (uint id = 0; id < volumesCount; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA && lightProbesBlend) { + LV_SampleLightProbe(L0, L1r, L1g, L1b); + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + float3 L0_A = 0; + float3 L1r_A = 0; + float3 L1g_A = 0; + float3 L1b_A = 0; + float4 occlusion_A = 1; + LV_SampleVolume(volumeID_A, localUVW_A, L0_A, L1r_A, L1g_A, L1b_A, occlusion_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || isNoA || (_UdonLightVolumeSharpBounds && isNoB)) { // Returning SH A result if it's the center of mask or out of bounds + L0 += L0_A; + L1r += L1r_A; + L1g += L1g_A; + L1b += L1b_A; + occlusion = occlusion_A; + occlusion *= mOcclusion; + return; + } + float3 L0_B = 0; + float3 L1r_B = 0; + float3 L1g_B = 0; + float3 L1b_B = 0; + float4 occlusion_B = 1; + if (isNoB && lightProbesBlend) { // No Volume found and light volumes blending enabled + LV_SampleLightProbe(L0_B, L1r_B, L1g_B, L1b_B); + } else { // Blending Volume A and Volume B + localUVW_B = isNoB ? localUVW : localUVW_B; + volumeID_B = isNoB ? volumesCount - 1 : volumeID_B; + LV_SampleVolume(volumeID_B, localUVW_B, L0_B, L1r_B, L1g_B, L1b_B, occlusion_B); + } + occlusion = lerp(occlusion_B, occlusion_A, mask); + occlusion *= mOcclusion; + L0 += lerp(L0_B, L0_A, mask); + L1r += lerp(L1r_B, L1r_A, mask); + L1g += lerp(L1g_B, L1g_A, mask); + L1b += lerp(L1b_B, L1b_A, mask); + } + void LV_LightVolumeAdditiveSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + if (additiveCount == 0 && (uint) _UdonPointLightVolumeCount == 0) return; // Legacy! + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW for Y Axis and Free rotations + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + uint count = min(_UdonLightVolumeOcclusionCount == 0 ? additiveCount : volumesCount, VRCLV_MAX_VOLUMES_COUNT); // Only use all volumes if occlusion volumes are enabled + [loop] for (uint id = 0; id < count; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA || _UdonLightVolumeOcclusionCount == 0) { + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + occlusion = LV_SampleVolumeOcclusion(volumeID_A, localUVW_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || (_UdonLightVolumeSharpBounds && isNoB)) { + occlusion *= mOcclusion; + return; // Returning A result if it's the center of mask or out of bounds + } + if (isNoB) occlusion = lerp(1, occlusion, mask); + else occlusion = lerp(LV_SampleVolumeOcclusion(volumeID_B, localUVW_B), occlusion, mask); + occlusion *= mOcclusion; + } + float3 LightVolumeSpecular(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specColor = max(float3(dot(reflect(-L1r, worldNormal), viewDir), dot(reflect(-L1g, worldNormal), viewDir), dot(reflect(-L1b, worldNormal), viewDir)), 0); + float3 rDir = normalize(normalize(L1r) + viewDir); + float3 gDir = normalize(normalize(L1g) + viewDir); + float3 bDir = normalize(normalize(L1b) + viewDir); + float rNh = saturate(dot(worldNormal, rDir)); + float gNh = saturate(dot(worldNormal, gDir)); + float bNh = saturate(dot(worldNormal, bDir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float rSpec = LV_DistributionGGX(rNh, roughExp); + float gSpec = LV_DistributionGGX(gNh, roughExp); + float bSpec = LV_DistributionGGX(bNh, roughExp); + float3 specs = (rSpec + gSpec + bSpec) * f0; + float3 coloredSpecs = specs * specColor; + float3 a = coloredSpecs + specs * L0; + float3 b = coloredSpecs * 3; + return max(lerp(a, b, smoothness) * 0.5f, 0.0); + } + float3 LightVolumeSpecular(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecular(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeSpecularDominant(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 dominantDir = L1r + L1g + L1b; + float3 dir = normalize(normalize(dominantDir) + viewDir); + float nh = saturate(dot(worldNormal, dir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float spec = LV_DistributionGGX(nh, roughExp); + return max(spec * L0 * f0, 0.0) * 1.5f; + } + float3 LightVolumeSpecularDominant(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecularDominant(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeEvaluate(float3 worldNormal, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + return float3(LV_EvaluateSH(L0.r, L1r, worldNormal), LV_EvaluateSH(L0.g, L1g, worldNormal), LV_EvaluateSH(L0.b, L1b, worldNormal)); + } + void LightVolumeSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled == 0) { + LV_SampleLightProbeDering(L0, L1r, L1g, L1b); + } else { + float4 occlusion = 1; + LV_LightVolumeSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + void LightVolumeAdditiveSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled != 0) { + float4 occlusion = 1; + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + float3 LightVolumeSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float3 LightVolumeAdditiveSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return 0; + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float LightVolumesEnabled() { + return _UdonLightVolumeEnabled; + } + float LightVolumesVersion() { + return _UdonLightVolumeVersion == 0 ? _UdonLightVolumeEnabled : _UdonLightVolumeVersion; + } + #endif + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + #ifdef MOCHIE_PBR + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _MochieMetallicMaps; + float _PBRMapsStochastic; + #endif + float4 _MochieMetallicMaps_ST; + float2 _MochieMetallicMapsPan; + float _MochieMetallicMapsUV; + float _MochieMetallicMapsStochastic; + float _MochieMetallicMapInvert; + float _MochieRoughnessMapInvert; + float _MochieReflectionMaskInvert; + float _MochieSpecularMaskInvert; + float _MochieMetallicMapsMetallicChannel; + float _MochieMetallicMapsRoughnessChannel; + float _MochieMetallicMapsReflectionMaskChannel; + float _MochieMetallicMapsSpecularMaskChannel; + float _PBRNormalSelect; + float _MochieReflectionTintThemeIndex; + float _MochieSpecularTintThemeIndex; + float _MochieRoughnessMultiplier; + float _MochieMetallicMultiplier; + float _MochieReflectionStrength; + float _MochieSpecularStrength; + float4 _MochieSpecularTint; + float4 _MochieReflectionTint; + float _MochieLitFallback; + float _IgnoreCastedShadows; + float _PBRSplitMaskSample; + float _PBRSplitMaskStochastic; + float4 _PBRMaskScaleTiling; + float _MochieMetallicMasksUV; + float4 _MochieMetallicMasksPan; + float _Specular2ndLayer; + float _MochieSpecularStrength2; + float _MochieRoughnessMultiplier2; + float _RefSpecFresnelStrength; + float _SFExposureOcclusion; + TextureCube _MochieReflCube; + float4 _MochieReflCube_HDR; + float _MochieForceFallback; + float _MochieGSAAEnabled; + float _PoiGSAAVariance; + float _PoiGSAAThreshold; + float _BRDFTPSReflectionMaskStrength; + float _BRDFTPSSpecularMaskStrength; + float _BRDFTPSDepthEnabled; + float _MochieMetallicGlobalMask; + float _MochieMetallicGlobalMaskBlendType; + float _MochieSmoothnessGlobalMask; + float _MochieSmoothnessGlobalMaskBlendType; + float _MochieReflectionStrengthGlobalMask; + float _MochieReflectionStrengthGlobalMaskBlendType; + float _MochieSpecularStrengthGlobalMask; + float _MochieSpecularStrengthGlobalMaskBlendType; + #endif + float _PPLightingMultiplier; + float _PPLightingAddition; + float _PPEmissionMultiplier; + float _PPFinalColorMultiplier; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef VIGNETTE_MASKED + #ifdef _LIGHTINGMODE_REALISTIC + #if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) + #if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) + #define SUBTRACTIVE_LIGHTING 1 + #endif + #endif + float FadeShadows(float attenuation, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if HANDLE_SHADOWS_BLENDING_IN_GI || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + #if ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + attenuation = poiLight.attenuation; + #endif + float viewZ = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float shadowFadeDistance = UnityComputeShadowFadeDistance(poiMesh.worldPos, viewZ); + float shadowFade = UnityComputeShadowFade(shadowFadeDistance); + float bakedAttenuation = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + attenuation = UnityMixRealtimeAndBakedShadows(attenuation, bakedAttenuation, shadowFade); + #endif + return attenuation; + } + void ApplySubtractiveLighting(inout UnityIndirect indirectLight, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if SUBTRACTIVE_LIGHTING + poiLight.attenuation = FadeShadows(poiLight.attenuation, poiLight, poiMesh, poiCam); + float ndotl = saturate(dot(poiMesh.normals[0], _WorldSpaceLightPos0.xyz)); + float3 shadowedLightEstimate = ndotl * (1 - poiLight.attenuation) * _LightColor0.rgb; + float3 subtractedLight = indirectLight.diffuse - shadowedLightEstimate; + subtractedLight = max(subtractedLight, unity_ShadowColor.rgb); + subtractedLight = lerp(subtractedLight, indirectLight.diffuse, _LightShadowData.x); + indirectLight.diffuse = min(subtractedLight, indirectLight.diffuse); + #endif + } + UnityIndirect CreateIndirectLight(in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight) + { + UnityIndirect indirectLight; + indirectLight.diffuse = 0; + indirectLight.specular = 0; + #if defined(LIGHTMAP_ON) + indirectLight.diffuse = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, poiMesh.lightmapUV.xy)); + #if defined(DIRLIGHTMAP_COMBINED) + float4 lightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, poiMesh.lightmapUV.xy); + indirectLight.diffuse = DecodeDirectionalLightmap(indirectLight.diffuse, lightmapDirection, poiMesh.normals[1]); + #endif + ApplySubtractiveLighting(indirectLight, poiLight, poiMesh, poiCam); + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float3 dynamicLightDiffuse = DecodeRealtimeLightmap( + UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, poiMesh.lightmapUV.zw) + ); + #if defined(DIRLIGHTMAP_COMBINED) + float4 dynamicLightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_DynamicDirectionality, unity_DynamicLightmap, poiMesh.lightmapUV.zw); + indirectLight.diffuse += DecodeDirectionalLightmap(dynamicLightDiffuse, dynamicLightmapDirection, poiMesh.normals[1]); + #else + indirectLight.diffuse += dynamicLightDiffuse; + #endif + #endif + #if !defined(LIGHTMAP_ON) && !defined(DYNAMICLIGHTMAP_ON) + #if UNITY_LIGHT_PROBE_PROXY_VOLUME + if (unity_ProbeVolumeParams.x == 1) + { + indirectLight.diffuse = SHEvalLinearL0L1_SampleProbeVolume( + float4(poiMesh.normals[1], 1), poiMesh.worldPos + ); + indirectLight.diffuse = max(0, indirectLight.diffuse); + #if defined(UNITY_COLORSPACE_GAMMA) + indirectLight.diffuse = LinearToGammaSpace(indirectLight.diffuse); + #endif + } + else + { + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + } + #else + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + #endif + #endif + indirectLight.diffuse *= poiLight.occlusion; + return indirectLight; + } + #endif + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_REALISTIC + UnityLight light; + light.dir = poiLight.direction; + light.color = max(0, _LightColor0.rgb) * saturate(shadowAttenuation * attenuation * poiLight.detailShadow); + light.ndotl = poiLight.nDotLSaturated; + UnityIndirect indirectLight = (UnityIndirect)0; + #ifdef UNITY_PASS_FORWARDBASE + indirectLight = CreateIndirectLight(poiMesh, poiCam, poiLight); + #endif + #ifdef UNITY_PASS_FORWARDBASE + light.color = max(light.color * 1.0, 0); + light.color = max(light.color + 0.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse * 1.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse + 0.0, 0); + #endif + poiLight.rampedLightMap = poiLight.nDotLSaturated; + poiLight.finalLighting = max(POI_BRDF_PBS(1, 0, 0, 0, poiMesh.normals[1], poiCam.viewDir, light, indirectLight).xyz, _LightingMinLightBrightness); + #ifdef UNITY_PASS_FORWARDBASE + if (_UdonLightVolumeEnabled && 1.0) + { + float3 L0 = 0; + float3 L1r = 0; + float3 L1g = 0; + float3 L1b = 0; + #ifdef LIGHTMAP_ON + LightVolumeAdditiveSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + poiLight.finalLighting += clamp(LightVolumeEvaluate(poiMesh.normals[1], L0, L1r, L1g, L1b), _LightingMinLightBrightness, _LightingCap); + #endif + } + #endif + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + #if defined(MOCHIE_PBR) || defined(POI_CLEARCOAT) + float GSAA_Filament(float3 worldNormal, float perceptualRoughness, float gsaaVariance, float gsaaThreshold) + { + float3 du = ddx(worldNormal); + float3 dv = ddy(worldNormal); + float variance = gsaaVariance * (dot(du, du) + dot(dv, dv)); + float roughness = perceptualRoughness * perceptualRoughness; + float kernelRoughness = min(2.0 * variance, gsaaThreshold); + float squareRoughness = saturate(roughness * roughness + kernelRoughness); + return sqrt(sqrt(squareRoughness)); + } + float3 GetWorldReflections(float3 reflDir, float3 worldPos, float roughness) + { + float3 baseReflDir = reflDir; + reflDir = BoxProjection(reflDir, worldPos, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax); + float4 envSample0 = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, reflDir, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p0 = DecodeHDR(envSample0, unity_SpecCube0_HDR); + float interpolator = unity_SpecCube0_BoxMin.w; + + if (interpolator < 0.99999) + { + float3 refDirBlend = BoxProjection(baseReflDir, worldPos, unity_SpecCube1_ProbePosition, unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax); + float4 envSample1 = UNITY_SAMPLE_TEXCUBE_SAMPLER_LOD(unity_SpecCube1, unity_SpecCube0, refDirBlend, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p1 = DecodeHDR(envSample1, unity_SpecCube1_HDR); + p0 = lerp(p1, p0, interpolator); + } + return p0; + } + float3 GetReflections(in PoiCam poiCam, in PoiLight pl, in PoiMesh poiMesh, float roughness, float ForceFallback, float LightFallback, TextureCube reflectionCube, float4 hdrData, float3 reflectionDir) + { + float3 reflections = 0; + float3 lighting = pl.finalLighting; + if (ForceFallback == 0) + { + + if (SceneHasReflections()) + { + #ifdef UNITY_PASS_FORWARDBASE + reflections = GetWorldReflections(reflectionDir, poiMesh.worldPos.xyz, roughness); + #endif + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + reflections *= pl.occlusion; + return reflections; + } + float GetGGXTerm(float nDotL, float nDotV, float nDotH, float roughness) + { + float visibilityTerm = 0; + if (nDotL > 0) + { + float lambdaV = nDotL * (nDotV * (1 - roughness) + roughness); + float lambdaL = nDotV * (nDotL * (1 - roughness) + roughness); + visibilityTerm = 0.5f / (lambdaV + lambdaL + 1e-5f); + float a = nDotH * roughness; + float k = roughness / (1.0 - nDotH * nDotH + a * a+ 1e-5f); + float dotTerm = k * k * UNITY_INV_PI; + visibilityTerm *= dotTerm; + } + return visibilityTerm; + } + void GetSpecFresTerm(float nDotL, float nDotV, float nDotH, float lDotH, inout float3 specularTerm, inout float3 fresnelTerm, float3 specCol, float roughness) + { + specularTerm = GetGGXTerm(nDotL, nDotV, nDotH, roughness); + fresnelTerm = FresnelTerm(specCol, lDotH); + specularTerm = max(0, specularTerm * max(0.00001, nDotL)); + } + float GetRoughness(float smoothness) + { + float rough = 1 - smoothness; + rough *= 1.7 - 0.7 * rough; + return rough; + } + float SFVisibility(float brdfRoughness, float3 directColor, float NDotV, float ExposureOcclusion) + { + float Visibility = saturate(length(directColor + EPSILON) * (1.0/(ExposureOcclusion))); //Using direct color because I think it should be generally more forgiving + return saturate(pow(NDotV + Visibility, exp2(-16.0 * brdfRoughness - 1.0)) - 1.0 + Visibility); + } + #endif + #ifdef MOCHIE_PBR + void MetallicAndSpecularFragDataInit(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + float smoothness = 1.0; + float smoothness2 = 1.0; + float metallic = 1.0; + float specularMask = 1; + float reflectionMask = 1; + smoothness *= poiFragData.smoothness; + smoothness2 *= poiFragData.smoothness2; + metallic *= poiFragData.metallic; + specularMask *= poiFragData.specularMask; + reflectionMask *= poiFragData.reflectionMask; + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + + if (0.0) + { + float4 PBRSplitMask = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy, 0.0); + assignValueToVectorFromIndex(PBRMaps, 2.0, PBRSplitMask[2.0]); + assignValueToVectorFromIndex(PBRMaps, 3.0, PBRSplitMask[3.0]); + } + if (0.0 < 4) + { + metallic *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + smoothness2 *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + reflectionMask *= 1.0; + specularMask *= 1.0; + if (0.0) + { + metallic = 1 - metallic; + } + if (0.0) + { + smoothness = 1 - smoothness; + smoothness2 = 1 - smoothness2; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + poiFragData.smoothness *= smoothness; + poiFragData.smoothness2 *= smoothness2; + poiFragData.metallic *= metallic; + poiFragData.specularMask *= specularMask; + poiFragData.reflectionMask *= reflectionMask; + } + void MochieBRDF(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, inout PoiMods poiMods) + { + float smoothness = poiFragData.smoothness; + float smoothness2 = poiFragData.smoothness2; + float metallic = poiFragData.metallic; + float specularMask = poiFragData.specularMask; + float reflectionMask = poiFragData.reflectionMask; + if (0.0 > 0) + { + metallic = customBlend(metallic, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + smoothness2 = customBlend(smoothness2, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef TPS_Penetrator + if (0.0) + { + reflectionMask = lerp(0, reflectionMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + specularMask = lerp(0, specularMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float roughness2 = GetRoughness(smoothness2); + float3 specCol = lerp(unity_ColorSpaceDielectricSpec.rgb, poiFragData.baseColor, metallic); + float omr = unity_ColorSpaceDielectricSpec.a - metallic * unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + float percepRough2 = 1 - smoothness2; + + if (1.0) + { + float3 normals = lerp(poiMesh.normals[0], poiMesh.normals[1], 1.0); + percepRough = GSAA_Filament(normals, percepRough, 0.15, 0.1); + if (0.0 == 1 && 1.0 > 0) + { + percepRough2 = GSAA_Filament(normals, percepRough2, 0.15, 0.1); + } + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float brdfRoughness2 = percepRough2 * percepRough2; + brdfRoughness2 = max(brdfRoughness2, 0.002); + float3 diffuse = poiFragData.baseColor; + float3 specular = 0; + float3 specular2 = 0; + float3 vSpecular = 0; + float3 vSpecular2 = 0; + float3 reflections = 0; + float3 environment = 0; + #if defined(POINT) || defined(SPOT) + float attenuation = lerp(poiLight.additiveShadow, 1, 0.0); + #else + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + #endif + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float pbrNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 1.0); + float pbrNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 1.0); + float pbrNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 1.0); + float3 pbrReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 1.0); + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + if (0.0 == 1) + { + float3 fresnelTerm = 1; + float3 specularTerm = 1; + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness2); + specular2 = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation * 1.0; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness2); + vSpecular2 += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * 1.0; + } + #endif + } + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _MochieReflCube, _MochieReflCube_HDR, pbrReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, pbrNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, pbrNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + reflections *= reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = max(specular + vSpecular, specular2 + vSpecular2); + environment += reflections; + diffuse *= poiLight.finalLighting; + poiFragData.finalColor = diffuse; + poiLight.finalLightAdd += environment; + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0004882813,0.0004882813,2048,2048), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #if defined(MOCHIE_PBR) + MetallicAndSpecularFragDataInit(poiFragData, poiMesh, poiMods); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #ifdef MOCHIE_PBR + MochieBRDF(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + #ifdef UNITY_PASS_FORWARDBASE + poiFragData.emission = max(poiFragData.emission * 1.0, 0); + poiFragData.finalColor = max(poiFragData.finalColor * 1.0, 0); + #endif + if (0.0 == POI_MODE_OPAQUE) + { + } + clip(poiFragData.alpha - 0.5); + if (0.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + poiFragData.finalColor += poiFragData.emission * poiMods.globalEmission; + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "Add" + Tags { "LightMode" = "ForwardAdd" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite Off + Cull Back + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_AddBlendOp], [_AddBlendOpAlpha] + Blend [_AddSrcBlend] [_AddDstBlend], [_AddSrcBlendAlpha] [_AddDstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_MOCHIEMETALLICMAPS + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_fwdadd_fullshadows + #pragma multi_compile_instancing + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_ADD + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + #if defined(PROP_LIGHTINGAOMAPS) + Texture2D _LightingAOMaps; + #endif + float4 _LightingAOMaps_ST; + float2 _LightingAOMapsPan; + float _LightingAOMapsUV; + float _LightDataAOStrengthR; + float _LightDataAOStrengthG; + float _LightDataAOStrengthB; + float _LightDataAOStrengthA; + float _LightDataAOGlobalMaskR; + float _LightDataAOGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + Texture2D _LightingDetailShadowMaps; + #endif + float4 _LightingDetailShadowMaps_ST; + float2 _LightingDetailShadowMapsPan; + float _LightingDetailShadowMapsUV; + float _LightingDetailShadowStrengthR; + float _LightingDetailShadowStrengthG; + float _LightingDetailShadowStrengthB; + float _LightingDetailShadowStrengthA; + float _LightingAddDetailShadowStrengthR; + float _LightingAddDetailShadowStrengthG; + float _LightingAddDetailShadowStrengthB; + float _LightingAddDetailShadowStrengthA; + float _LightDataDetailShadowGlobalMaskR; + float _LightDataDetailShadowGlobalMaskBlendTypeR; + #if defined(PROP_LIGHTINGSHADOWMASKS) + Texture2D _LightingShadowMasks; + #endif + float4 _LightingShadowMasks_ST; + float2 _LightingShadowMasksPan; + float _LightingShadowMasksUV; + float _LightingShadowMaskStrengthR; + float _LightingShadowMaskStrengthG; + float _LightingShadowMaskStrengthB; + float _LightingShadowMaskStrengthA; + float _LightDataShadowMaskGlobalMaskR; + float _LightDataShadowMaskGlobalMaskBlendTypeR; + float _Unlit_Intensity; + float _LightingColorMode; + float _LightingMapMode; + #if defined(PROP_LIGHTDATASDFMAP) + Texture2D _LightDataSDFMap; + float4 _LightDataSDFMap_ST; + float2 _LightDataSDFMapPan; + float _LightDataSDFMapUV; + float _LightDataSDFMapLOD; + float _LightDataSDFBlendY; + #endif + float _LightingDirectionMode; + float3 _LightngForcedDirection; + float _LightingViewDirOffsetPitch; + float _LightingViewDirOffsetYaw; + float _LightingIndirectUsesNormals; + float _LightingCapEnabled; + float _LightingCap; + float _LightingForceColorEnabled; + float3 _LightingForcedColor; + float _LightingForcedColorThemeIndex; + float _LightingCastedShadows; + float _LightingMonochromatic; + float _LightingMinLightBrightness; + float _LightingAdditiveEnable; + float _LightingAdditiveLimited; + float _LightingAdditiveLimit; + float _LightingAdditiveCastedShadows; + float _LightingAdditiveMonochromatic; + float _LightingAdditivePassthrough; + float _DisableDirectionalInAdd; + float _LightingVertexLightingEnabled; + float _LightingMirrorVertexLightingEnabled; + float _LightingEnableLightVolumes; + float _LightDataDebugEnabled; + float _LightingDebugVisualize; + uint _UdonForceSceneLighting; + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + float _ShadowStrength; + float _LightingIgnoreAmbientColor; + float3 _LightingShadowColor; + float _ShadingRampedLightMapApplyGlobalMaskIndex; + float _ShadingRampedLightMapApplyGlobalMaskBlendType; + float _ShadingRampedLightMapInverseApplyGlobalMaskIndex; + float _ShadingRampedLightMapInverseApplyGlobalMaskBlendType; + float _LightingAdditiveType; + float _LightingAdditiveGradientStart; + float _LightingAdditiveGradientEnd; + float _LightingAdditiveDetailStrength; + struct MatcapAudioLinkData + { + float matcapALEnabled; + float matcapALAlphaAddBand; + float4 matcapALAlphaAdd; + float matcapALEmissionAddBand; + float4 matcapALEmissionAdd; + float matcapALIntensityAddBand; + float4 matcapALIntensityAdd; + float matcapALChronoPanType; + float matcapALChronoPanBand; + float matcapALChronoPanSpeed; + }; + #ifdef MOCHIE_PBR + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + Texture2D _MochieMetallicMaps; + float _PBRMapsStochastic; + #endif + float4 _MochieMetallicMaps_ST; + float2 _MochieMetallicMapsPan; + float _MochieMetallicMapsUV; + float _MochieMetallicMapsStochastic; + float _MochieMetallicMapInvert; + float _MochieRoughnessMapInvert; + float _MochieReflectionMaskInvert; + float _MochieSpecularMaskInvert; + float _MochieMetallicMapsMetallicChannel; + float _MochieMetallicMapsRoughnessChannel; + float _MochieMetallicMapsReflectionMaskChannel; + float _MochieMetallicMapsSpecularMaskChannel; + float _PBRNormalSelect; + float _MochieReflectionTintThemeIndex; + float _MochieSpecularTintThemeIndex; + float _MochieRoughnessMultiplier; + float _MochieMetallicMultiplier; + float _MochieReflectionStrength; + float _MochieSpecularStrength; + float4 _MochieSpecularTint; + float4 _MochieReflectionTint; + float _MochieLitFallback; + float _IgnoreCastedShadows; + float _PBRSplitMaskSample; + float _PBRSplitMaskStochastic; + float4 _PBRMaskScaleTiling; + float _MochieMetallicMasksUV; + float4 _MochieMetallicMasksPan; + float _Specular2ndLayer; + float _MochieSpecularStrength2; + float _MochieRoughnessMultiplier2; + float _RefSpecFresnelStrength; + float _SFExposureOcclusion; + TextureCube _MochieReflCube; + float4 _MochieReflCube_HDR; + float _MochieForceFallback; + float _MochieGSAAEnabled; + float _PoiGSAAVariance; + float _PoiGSAAThreshold; + float _BRDFTPSReflectionMaskStrength; + float _BRDFTPSSpecularMaskStrength; + float _BRDFTPSDepthEnabled; + float _MochieMetallicGlobalMask; + float _MochieMetallicGlobalMaskBlendType; + float _MochieSmoothnessGlobalMask; + float _MochieSmoothnessGlobalMaskBlendType; + float _MochieReflectionStrengthGlobalMask; + float _MochieReflectionStrengthGlobalMaskBlendType; + float _MochieSpecularStrengthGlobalMask; + float _MochieSpecularStrengthGlobalMaskBlendType; + #endif + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + #ifdef VIGNETTE_MASKED + #ifdef _LIGHTINGMODE_REALISTIC + #if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) + #if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) + #define SUBTRACTIVE_LIGHTING 1 + #endif + #endif + float FadeShadows(float attenuation, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if HANDLE_SHADOWS_BLENDING_IN_GI || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + #if ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS + attenuation = poiLight.attenuation; + #endif + float viewZ = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float shadowFadeDistance = UnityComputeShadowFadeDistance(poiMesh.worldPos, viewZ); + float shadowFade = UnityComputeShadowFade(shadowFadeDistance); + float bakedAttenuation = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + attenuation = UnityMixRealtimeAndBakedShadows(attenuation, bakedAttenuation, shadowFade); + #endif + return attenuation; + } + void ApplySubtractiveLighting(inout UnityIndirect indirectLight, inout PoiLight poiLight, in PoiMesh poiMesh, in PoiCam poiCam) + { + #if SUBTRACTIVE_LIGHTING + poiLight.attenuation = FadeShadows(poiLight.attenuation, poiLight, poiMesh, poiCam); + float ndotl = saturate(dot(poiMesh.normals[0], _WorldSpaceLightPos0.xyz)); + float3 shadowedLightEstimate = ndotl * (1 - poiLight.attenuation) * _LightColor0.rgb; + float3 subtractedLight = indirectLight.diffuse - shadowedLightEstimate; + subtractedLight = max(subtractedLight, unity_ShadowColor.rgb); + subtractedLight = lerp(subtractedLight, indirectLight.diffuse, _LightShadowData.x); + indirectLight.diffuse = min(subtractedLight, indirectLight.diffuse); + #endif + } + UnityIndirect CreateIndirectLight(in PoiMesh poiMesh, in PoiCam poiCam, in PoiLight poiLight) + { + UnityIndirect indirectLight; + indirectLight.diffuse = 0; + indirectLight.specular = 0; + #if defined(LIGHTMAP_ON) + indirectLight.diffuse = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, poiMesh.lightmapUV.xy)); + #if defined(DIRLIGHTMAP_COMBINED) + float4 lightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd, unity_Lightmap, poiMesh.lightmapUV.xy); + indirectLight.diffuse = DecodeDirectionalLightmap(indirectLight.diffuse, lightmapDirection, poiMesh.normals[1]); + #endif + ApplySubtractiveLighting(indirectLight, poiLight, poiMesh, poiCam); + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float3 dynamicLightDiffuse = DecodeRealtimeLightmap( + UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, poiMesh.lightmapUV.zw) + ); + #if defined(DIRLIGHTMAP_COMBINED) + float4 dynamicLightmapDirection = UNITY_SAMPLE_TEX2D_SAMPLER(unity_DynamicDirectionality, unity_DynamicLightmap, poiMesh.lightmapUV.zw); + indirectLight.diffuse += DecodeDirectionalLightmap(dynamicLightDiffuse, dynamicLightmapDirection, poiMesh.normals[1]); + #else + indirectLight.diffuse += dynamicLightDiffuse; + #endif + #endif + #if !defined(LIGHTMAP_ON) && !defined(DYNAMICLIGHTMAP_ON) + #if UNITY_LIGHT_PROBE_PROXY_VOLUME + if (unity_ProbeVolumeParams.x == 1) + { + indirectLight.diffuse = SHEvalLinearL0L1_SampleProbeVolume( + float4(poiMesh.normals[1], 1), poiMesh.worldPos + ); + indirectLight.diffuse = max(0, indirectLight.diffuse); + #if defined(UNITY_COLORSPACE_GAMMA) + indirectLight.diffuse = LinearToGammaSpace(indirectLight.diffuse); + #endif + } + else + { + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + } + #else + indirectLight.diffuse += max(0, PoiShadeSH9(float4(poiMesh.normals[1], 1))); + #endif + #endif + indirectLight.diffuse *= poiLight.occlusion; + return indirectLight; + } + #endif + float GetRemapMinValue(float scale, float offset) + { + return clamp(-offset / scale, -0.01f, 1.01f); // Remap min + } + float GetRemapMaxValue(float scale, float offset) + { + return clamp((1.0f - offset) / scale, -0.01f, 1.01f); // Remap Max + } + sampler2D_float unity_NHxRoughness; + half3 BRDF3_Direct(half3 diffColor, half3 specColor, half rlPow4, half smoothness) + { + half LUT_RANGE = 16.0; // must match range in NHxRoughness() function in GeneratedTextures.cpp + half specular = tex2D(unity_NHxRoughness, half2(rlPow4, 1 - smoothness)).r * LUT_RANGE; + #if defined(_SPECULARHIGHLIGHTS_OFF) + specular = 0.0; + #endif + return diffColor + specular * specColor; + } + half3 BRDF3_Indirect(half3 diffColor, half3 specColor, UnityIndirect indirect, half grazingTerm, half fresnelTerm) + { + half3 c = indirect.diffuse * diffColor; + c += indirect.specular * lerp(specColor, grazingTerm, fresnelTerm); + return c; + } + half4 POI_BRDF_PBS(half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, float3 normal, float3 viewDir, UnityLight light, UnityIndirect gi) + { + float3 reflDir = reflect(viewDir, normal); + half nl = saturate(dot(normal, light.dir)); + half nv = saturate(dot(normal, viewDir)); + half2 rlPow4AndFresnelTerm = Pow4(float2(dot(reflDir, light.dir), 1 - nv)); // use R.L instead of N.H to save couple of instructions + half rlPow4 = rlPow4AndFresnelTerm.x; // power exponent must match kHorizontalWarpExp in NHxRoughness() function in GeneratedTextures.cpp + half fresnelTerm = rlPow4AndFresnelTerm.y; + half grazingTerm = saturate(smoothness + (1 - oneMinusReflectivity)); + half3 color = BRDF3_Direct(diffColor, specColor, rlPow4, smoothness); + color *= light.color * nl; + color += BRDF3_Indirect(diffColor, specColor, gi, grazingTerm, fresnelTerm); + return half4(color, 1); + } + void calculateShading(inout PoiLight poiLight, inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam) + { + float shadowAttenuation = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + float attenuation = 1; + #if defined(POINT) || defined(SPOT) + shadowAttenuation = lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #ifdef POI_PASS_ADD + if (3.0 == 3) + { + #if defined(POINT) || defined(SPOT) + #if defined(_LIGHTINGMODE_REALISTIC) || defined(_LIGHTINGMODE_CLOTH) || defined(_LIGHTINGMODE_WRAPPED) + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + #endif + #endif + } + if (3.0 == 0) + { + poiLight.rampedLightMap = max(0, poiLight.nDotL); + poiLight.finalLighting = poiLight.directColor * attenuation * max(0, poiLight.nDotL) * poiLight.detailShadow * shadowAttenuation; + return; + } + if (3.0 == 1) + { + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + float passthrough = 0; + #else + float passthrough = 0.5; + #endif + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + poiLight.rampedLightMap = smoothstep(ToonAddGradient.y, ToonAddGradient.x, 1 - (.5 * poiLight.nDotL + .5)); + #if defined(POINT) || defined(SPOT) + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.additiveShadow, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #else + poiLight.finalLighting = lerp(poiLight.directColor * max(min(poiLight.attenuation, poiLight.detailShadow), passthrough), poiLight.indirectColor, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.nDotL + .5))); + #endif + return; + } + #endif + float shadowStrength = 1.0 * poiLight.shadowMask; + #ifdef POI_PASS_OUTLINE + shadowStrength = lerp(0, shadowStrength, 0.0); + #endif + #ifdef _LIGHTINGMODE_REALISTIC + UnityLight light; + light.dir = poiLight.direction; + light.color = max(0, _LightColor0.rgb) * saturate(shadowAttenuation * attenuation * poiLight.detailShadow); + light.ndotl = poiLight.nDotLSaturated; + UnityIndirect indirectLight = (UnityIndirect)0; + #ifdef UNITY_PASS_FORWARDBASE + indirectLight = CreateIndirectLight(poiMesh, poiCam, poiLight); + #endif + #ifdef UNITY_PASS_FORWARDBASE + light.color = max(light.color * 1.0, 0); + light.color = max(light.color + 0.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse * 1.0, 0); + indirectLight.diffuse = max(indirectLight.diffuse + 0.0, 0); + #endif + poiLight.rampedLightMap = poiLight.nDotLSaturated; + poiLight.finalLighting = max(POI_BRDF_PBS(1, 0, 0, 0, poiMesh.normals[1], poiCam.viewDir, light, indirectLight).xyz, _LightingMinLightBrightness); + #ifdef UNITY_PASS_FORWARDBASE + if (_UdonLightVolumeEnabled && 1.0) + { + float3 L0 = 0; + float3 L1r = 0; + float3 L1g = 0; + float3 L1b = 0; + #ifdef LIGHTMAP_ON + LightVolumeAdditiveSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + poiLight.finalLighting += clamp(LightVolumeEvaluate(poiMesh.normals[1], L0, L1r, L1g, L1b), _LightingMinLightBrightness, _LightingCap); + #endif + } + #endif + #endif + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + float3 vertexLighting = float3(0, 0, 0); + for (int index = 0; index < 4; index++) + { + float lightingMode = 3.0; + if (lightingMode == 3) + { + #if defined(_LIGHTINGMODE_REALISTIC) + lightingMode = 0; + #else + lightingMode = 1; + #endif + } + if (lightingMode == 0) + { + vertexLighting = max(vertexLighting, poiLight.vColor[index] * poiLight.vSaturatedDotNL[index] * poiLight.detailShadow); // Realistic + } + if (lightingMode == 1) + { + float2 ToonAddGradient = float2(0.0, 0.5); + if (ToonAddGradient.x == ToonAddGradient.y) ToonAddGradient.y += 0.0001; + vertexLighting = max(vertexLighting, lerp(poiLight.vColor[index], poiLight.vColor[index] * 0.5, smoothstep(ToonAddGradient.x, ToonAddGradient.y, 1 - (.5 * poiLight.vDotNL[index] + .5))) * poiLight.detailShadow); + } + } + float3 mixedLight = poiLight.finalLighting; + poiLight.finalLighting = max(vertexLighting, poiLight.finalLighting); + #endif + } + } + #endif + #if defined(MOCHIE_PBR) || defined(POI_CLEARCOAT) + float GSAA_Filament(float3 worldNormal, float perceptualRoughness, float gsaaVariance, float gsaaThreshold) + { + float3 du = ddx(worldNormal); + float3 dv = ddy(worldNormal); + float variance = gsaaVariance * (dot(du, du) + dot(dv, dv)); + float roughness = perceptualRoughness * perceptualRoughness; + float kernelRoughness = min(2.0 * variance, gsaaThreshold); + float squareRoughness = saturate(roughness * roughness + kernelRoughness); + return sqrt(sqrt(squareRoughness)); + } + float3 GetWorldReflections(float3 reflDir, float3 worldPos, float roughness) + { + float3 baseReflDir = reflDir; + reflDir = BoxProjection(reflDir, worldPos, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax); + float4 envSample0 = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, reflDir, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p0 = DecodeHDR(envSample0, unity_SpecCube0_HDR); + float interpolator = unity_SpecCube0_BoxMin.w; + + if (interpolator < 0.99999) + { + float3 refDirBlend = BoxProjection(baseReflDir, worldPos, unity_SpecCube1_ProbePosition, unity_SpecCube1_BoxMin, unity_SpecCube1_BoxMax); + float4 envSample1 = UNITY_SAMPLE_TEXCUBE_SAMPLER_LOD(unity_SpecCube1, unity_SpecCube0, refDirBlend, roughness * UNITY_SPECCUBE_LOD_STEPS); + float3 p1 = DecodeHDR(envSample1, unity_SpecCube1_HDR); + p0 = lerp(p1, p0, interpolator); + } + return p0; + } + float3 GetReflections(in PoiCam poiCam, in PoiLight pl, in PoiMesh poiMesh, float roughness, float ForceFallback, float LightFallback, TextureCube reflectionCube, float4 hdrData, float3 reflectionDir) + { + float3 reflections = 0; + float3 lighting = pl.finalLighting; + if (ForceFallback == 0) + { + + if (SceneHasReflections()) + { + #ifdef UNITY_PASS_FORWARDBASE + reflections = GetWorldReflections(reflectionDir, poiMesh.worldPos.xyz, roughness); + #endif + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + } + else + { + #ifdef UNITY_PASS_FORWARDBASE + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * lerp(1, pl.finalLighting, LightFallback); + #endif + #ifdef POI_PASS_ADD + if (LightFallback) + { + float mipLevel = roughness * UNITY_SPECCUBE_LOD_STEPS; + reflections = reflectionCube.SampleLevel(sampler_linear_clamp, reflectionDir, mipLevel); + reflections = DecodeHDR(float4(reflections, 1), hdrData) * pl.finalLighting; + } + #endif + } + reflections *= pl.occlusion; + return reflections; + } + float GetGGXTerm(float nDotL, float nDotV, float nDotH, float roughness) + { + float visibilityTerm = 0; + if (nDotL > 0) + { + float lambdaV = nDotL * (nDotV * (1 - roughness) + roughness); + float lambdaL = nDotV * (nDotL * (1 - roughness) + roughness); + visibilityTerm = 0.5f / (lambdaV + lambdaL + 1e-5f); + float a = nDotH * roughness; + float k = roughness / (1.0 - nDotH * nDotH + a * a+ 1e-5f); + float dotTerm = k * k * UNITY_INV_PI; + visibilityTerm *= dotTerm; + } + return visibilityTerm; + } + void GetSpecFresTerm(float nDotL, float nDotV, float nDotH, float lDotH, inout float3 specularTerm, inout float3 fresnelTerm, float3 specCol, float roughness) + { + specularTerm = GetGGXTerm(nDotL, nDotV, nDotH, roughness); + fresnelTerm = FresnelTerm(specCol, lDotH); + specularTerm = max(0, specularTerm * max(0.00001, nDotL)); + } + float GetRoughness(float smoothness) + { + float rough = 1 - smoothness; + rough *= 1.7 - 0.7 * rough; + return rough; + } + float SFVisibility(float brdfRoughness, float3 directColor, float NDotV, float ExposureOcclusion) + { + float Visibility = saturate(length(directColor + EPSILON) * (1.0/(ExposureOcclusion))); //Using direct color because I think it should be generally more forgiving + return saturate(pow(NDotV + Visibility, exp2(-16.0 * brdfRoughness - 1.0)) - 1.0 + Visibility); + } + #endif + #ifdef MOCHIE_PBR + void MetallicAndSpecularFragDataInit(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiMods poiMods) + { + float smoothness = 1.0; + float smoothness2 = 1.0; + float metallic = 1.0; + float specularMask = 1; + float reflectionMask = 1; + smoothness *= poiFragData.smoothness; + smoothness2 *= poiFragData.smoothness2; + metallic *= poiFragData.metallic; + specularMask *= poiFragData.specularMask; + reflectionMask *= poiFragData.reflectionMask; + #if defined(PROP_MOCHIEMETALLICMAPS) || !defined(OPTIMIZER_ENABLED) + float4 PBRMaps = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), 0.0); + + if (0.0) + { + float4 PBRSplitMask = POI2D_SAMPLER_PAN_STOCHASTIC(_MochieMetallicMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy, 0.0); + assignValueToVectorFromIndex(PBRMaps, 2.0, PBRSplitMask[2.0]); + assignValueToVectorFromIndex(PBRMaps, 3.0, PBRSplitMask[3.0]); + } + if (0.0 < 4) + { + metallic *= PBRMaps[0.0]; + } + if (1.0 < 4) + { + smoothness *= PBRMaps[1.0]; + smoothness2 *= PBRMaps[1.0]; + } + if (2.0 < 4) + { + reflectionMask *= PBRMaps[2.0]; + } + if (3.0 < 4) + { + specularMask *= PBRMaps[3.0]; + } + #endif + reflectionMask *= 1.0; + specularMask *= 1.0; + if (0.0) + { + metallic = 1 - metallic; + } + if (0.0) + { + smoothness = 1 - smoothness; + smoothness2 = 1 - smoothness2; + } + if (0.0) + { + reflectionMask = 1 - reflectionMask; + } + if (0.0) + { + specularMask = 1 - specularMask; + } + poiFragData.smoothness *= smoothness; + poiFragData.smoothness2 *= smoothness2; + poiFragData.metallic *= metallic; + poiFragData.specularMask *= specularMask; + poiFragData.reflectionMask *= reflectionMask; + } + void MochieBRDF(inout PoiFragData poiFragData, in PoiCam poiCam, inout PoiLight poiLight, in PoiMesh poiMesh, inout PoiMods poiMods) + { + float smoothness = poiFragData.smoothness; + float smoothness2 = poiFragData.smoothness2; + float metallic = poiFragData.metallic; + float specularMask = poiFragData.specularMask; + float reflectionMask = poiFragData.reflectionMask; + if (0.0 > 0) + { + metallic = customBlend(metallic, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + smoothness = customBlend(smoothness, poiMods.globalMask[0.0 - 1], 2.0); + smoothness2 = customBlend(smoothness2, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + reflectionMask = customBlend(reflectionMask, poiMods.globalMask[0.0 - 1], 2.0); + } + if (0.0 > 0) + { + specularMask = customBlend(specularMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef TPS_Penetrator + if (0.0) + { + reflectionMask = lerp(0, reflectionMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + specularMask = lerp(0, specularMask * TPSBufferedDepth(poiMesh.localPos, poiMesh.vertexColor), 1.0); + } + #endif + float roughness = GetRoughness(smoothness); + float roughness2 = GetRoughness(smoothness2); + float3 specCol = lerp(unity_ColorSpaceDielectricSpec.rgb, poiFragData.baseColor, metallic); + float omr = unity_ColorSpaceDielectricSpec.a - metallic * unity_ColorSpaceDielectricSpec.a; + float percepRough = 1 - smoothness; + float percepRough2 = 1 - smoothness2; + + if (1.0) + { + float3 normals = lerp(poiMesh.normals[0], poiMesh.normals[1], 1.0); + percepRough = GSAA_Filament(normals, percepRough, 0.15, 0.1); + if (0.0 == 1 && 1.0 > 0) + { + percepRough2 = GSAA_Filament(normals, percepRough2, 0.15, 0.1); + } + } + float brdfRoughness = percepRough * percepRough; + brdfRoughness = max(brdfRoughness, 0.002); + float brdfRoughness2 = percepRough2 * percepRough2; + brdfRoughness2 = max(brdfRoughness2, 0.002); + float3 diffuse = poiFragData.baseColor; + float3 specular = 0; + float3 specular2 = 0; + float3 vSpecular = 0; + float3 vSpecular2 = 0; + float3 reflections = 0; + float3 environment = 0; + #if defined(POINT) || defined(SPOT) + float attenuation = lerp(poiLight.additiveShadow, 1, 0.0); + #else + float attenuation = min(poiLight.nDotLSaturated, lerp(poiLight.attenuation, 1, 0.0)); + #endif + float3 fresnelTerm = 1; + float3 specularTerm = 1; + float pbrNDotL = lerp(poiLight.vertexNDotL, poiLight.nDotL, 1.0); + float pbrNDotV = lerp(poiLight.vertexNDotV, poiLight.nDotV, 1.0); + float pbrNDotH = lerp(poiLight.vertexNDotH, poiLight.nDotH, 1.0); + float3 pbrReflectionDir = lerp(poiCam.vertexReflectionDir, poiCam.reflectionDir, 1.0); + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness); + specular = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness); + vSpecular += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion; + } + #endif + } + if (0.0 == 1) + { + float3 fresnelTerm = 1; + float3 specularTerm = 1; + GetSpecFresTerm(pbrNDotL, pbrNDotV, pbrNDotH, poiLight.lDotH, specularTerm, fresnelTerm, specCol, brdfRoughness2); + specular2 = poiLight.directColor * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * attenuation * 1.0; + if (poiFragData.toggleVertexLights) + { + #if defined(VERTEXLIGHT_ON) + for (int index = 0; index < 4; index++) + { + fresnelTerm = 1; + specularTerm = 1; + float pbrVDotNL = lerp(poiLight.vertexVDotNL[index], poiLight.vDotNL[index], 1.0); + float pbrVDotNH = lerp(poiLight.vertexVDotNH[index], poiLight.vDotNH[index], 1.0); + GetSpecFresTerm(pbrVDotNL, pbrNDotV, pbrVDotNH, poiLight.vDotLH[index], specularTerm, fresnelTerm, specCol, brdfRoughness2); + vSpecular2 += poiLight.vColor[index] * specularTerm * fresnelTerm * specularMask * poiThemeColor(poiMods, float4(1,1,1,1), 0.0) * poiLight.occlusion * 1.0; + } + #endif + } + } + float surfaceReduction = (1.0 / (brdfRoughness * brdfRoughness + 1.0)); + float grazingTerm = saturate(smoothness + (1 - omr)); + float3 reflCol = GetReflections(poiCam, poiLight, poiMesh, roughness, 0.0, 1.0, _MochieReflCube, _MochieReflCube_HDR, pbrReflectionDir); + reflections = surfaceReduction * reflCol * FresnelLerp(specCol, specCol + lerp(specCol, 1, 0.5) * 0.5, pbrNDotV) * SFVisibility(brdfRoughness, poiLight.directColor, pbrNDotV, 0.0); + reflections *= poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + reflections *= reflectionMask; + diffuse = lerp(diffuse, diffuse * omr, reflectionMask); + environment = max(specular + vSpecular, specular2 + vSpecular2); + environment += reflections; + diffuse *= poiLight.finalLighting; + poiFragData.finalColor = diffuse; + poiLight.finalLightAdd += environment; + } + #endif + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0004882813,0.0004882813,2048,2048), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + if (_UdonForceSceneLighting) + { + _LightingMinLightBrightness = 0; + _LightingCapEnabled = 0; + _LightingMonochromatic = 0; + } + poiLight.finalLightAdd = 0; + #ifdef UNITY_PASS_FORWARDBASE + float3 L0 = float3(0, 0, 0); + float3 L1r = float3(0, 0, 0); + float3 L1g = float3(0, 0, 0); + float3 L1b = float3(0, 0, 0); + if (_UdonLightVolumeEnabled && 1.0) + { + LightVolumeSH(poiMesh.worldPos, L0, L1r, L1g, L1b); + PoiSHAr = float4(L1r, L0.r); + PoiSHAg = float4(L1g, L0.g); + PoiSHAb = float4(L1b, L0.b); + PoiSHBr = 0; + PoiSHBg = 0; + PoiSHBb = 0; + PoiSHC = 0; + } + #endif + #if defined(PROP_LIGHTINGAOMAPS) + float4 AOMaps = POI2D_SAMPLER_PAN(_LightingAOMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.occlusion = min(min(min(lerp(1, AOMaps.r, 1.0), lerp(1, AOMaps.g, 0.0)), lerp(1, AOMaps.b, 0.0)), lerp(1, AOMaps.a, 0.0)); + #else + poiLight.occlusion = 1; + #endif + if (0.0 > 0) + { + poiLight.occlusion = maskBlend(poiLight.occlusion, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGDETAILSHADOWMAPS) + float4 DetailShadows = POI2D_SAMPLER_PAN(_LightingDetailShadowMaps, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + #ifndef POI_PASS_ADD + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #else + poiLight.detailShadow = lerp(1, DetailShadows.r, 1.0) * lerp(1, DetailShadows.g, 0.0) * lerp(1, DetailShadows.b, 0.0) * lerp(1, DetailShadows.a, 0.0); + #endif + #else + poiLight.detailShadow = 1; + #endif + if (0.0 > 0) + { + poiLight.detailShadow = maskBlend(poiLight.detailShadow, poiMods.globalMask[0.0 - 1], 2.0); + } + #if defined(PROP_LIGHTINGSHADOWMASKS) + float4 ShadowMasks = POI2D_SAMPLER_PAN(_LightingShadowMasks, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)); + poiLight.shadowMask = lerp(1, ShadowMasks.r, 1.0) * lerp(1, ShadowMasks.g, 0.0) * lerp(1, ShadowMasks.b, 0.0) * lerp(1, ShadowMasks.a, 0.0); + #else + poiLight.shadowMask = 1; + #endif + if (0.0 > 0) + { + poiLight.shadowMask = maskBlend(poiLight.shadowMask, poiMods.globalMask[0.0 - 1], 2.0); + } + #ifdef UNITY_PASS_FORWARDBASE + bool lightExists = false; + if (any(_LightColor0.rgb >= 0.002)) + { + lightExists = true; + } + if (1.0) + { + poiFragData.toggleVertexLights = 1; + } + if (IsInMirror() && 1.0 == 0) + { + poiFragData.toggleVertexLights = 0; + } + if (1.0) + { + #if defined(VERTEXLIGHT_ON) + float4 toLightX = unity_4LightPosX0 - i.worldPos.x; + float4 toLightY = unity_4LightPosY0 - i.worldPos.y; + float4 toLightZ = unity_4LightPosZ0 - i.worldPos.z; + float4 lengthSq = 0; + lengthSq += toLightX * toLightX; + lengthSq += toLightY * toLightY; + lengthSq += toLightZ * toLightZ; + float4 lightAttenSq = unity_4LightAtten0; + float4 atten = 1.0 / (1.0 + lengthSq * lightAttenSq); + float4 vLightWeight = saturate(1 - (lengthSq * lightAttenSq / 25)); + poiLight.vAttenuation = min(atten, vLightWeight * vLightWeight); + poiLight.vDotNL = 0; + poiLight.vDotNL += toLightX * poiMesh.normals[1].x; + poiLight.vDotNL += toLightY * poiMesh.normals[1].y; + poiLight.vDotNL += toLightZ * poiMesh.normals[1].z; + float4 corr = rsqrt(lengthSq); + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vertexVDotNL = 0; + poiLight.vertexVDotNL += toLightX * poiMesh.normals[0].x; + poiLight.vertexVDotNL += toLightY * poiMesh.normals[0].y; + poiLight.vertexVDotNL += toLightZ * poiMesh.normals[0].z; + poiLight.vertexVDotNL = max(0, poiLight.vDotNL * corr); + poiLight.vSaturatedDotNL = saturate(poiLight.vDotNL); + [unroll] + for (int index = 0; index < 4; index++) + { + poiLight.vPosition[index] = float3(unity_4LightPosX0[index], unity_4LightPosY0[index], unity_4LightPosZ0[index]); + float3 vertexToLightSource = poiLight.vPosition[index] - poiMesh.worldPos; + poiLight.vDirection[index] = normalize(vertexToLightSource); + poiLight.vColor[index] = 1.0 ? MaxLuminance(unity_LightColor[index].rgb * poiLight.vAttenuation[index], 1.0) : unity_LightColor[index].rgb * poiLight.vAttenuation[index]; + poiLight.vColor[index] = lerp(poiLight.vColor[index], dot(poiLight.vColor[index], float3(0.299, 0.587, 0.114)), 0.0); + poiLight.vHalfDir[index] = Unity_SafeNormalize(poiLight.vDirection[index] + poiCam.viewDir); + poiLight.vDotNL[index] = dot(poiMesh.normals[1], poiLight.vDirection[index]); + poiLight.vCorrectedDotNL[index] = .5 * (poiLight.vDotNL[index] + 1); + poiLight.vDotLH[index] = saturate(dot(poiLight.vDirection[index], poiLight.vHalfDir[index])); + poiLight.vDotNH[index] = dot(poiMesh.normals[1], poiLight.vHalfDir[index]); + poiLight.vertexVDotNH[index] = saturate(dot(poiMesh.normals[0], poiLight.vHalfDir[index])); + } + #endif + } + if (0.0 == 0) // Poi Custom Light Color + { + float3 magic = max(BetterSH9(normalize(PoiSHAr + PoiSHAg + PoiSHAb)), 0); + float3 normalLight = _LightColor0.rgb + BetterSH9(float4(0, 0, 0, 1)); + float magiLumi = calculateluminance(magic); + float normaLumi = calculateluminance(normalLight); + float maginormalumi = magiLumi + normaLumi; + float magiratio = magiLumi / maginormalumi; + float normaRatio = normaLumi / maginormalumi; + float target = calculateluminance(magic * magiratio + normalLight * normaRatio); + float3 properLightColor = magic + normalLight; + float properLuminance = calculateluminance(magic + normalLight); + poiLight.directColor = properLightColor * max(0.0001, (target / properLuminance)); + poiLight.indirectColor = BetterSH9(float4(lerp(0, poiMesh.normals[1], 0.0), 1)); + } + if (0.0 == 1) // More standard approach to light color + { + float3 indirectColor = BetterSH9(float4(poiMesh.normals[1], 1)); + if (lightExists) + { + poiLight.directColor = _LightColor0.rgb; + poiLight.indirectColor = indirectColor; + } + else + { + poiLight.directColor = indirectColor * 0.6; + poiLight.indirectColor = indirectColor * 0.5; + } + } + if (0.0 == 2) // UTS style + { + poiLight.indirectColor = saturate(max(half3(0.05, 0.05, 0.05) * 1.0, max(PoiShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), PoiShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * 1.0)); + poiLight.directColor = max(poiLight.indirectColor, _LightColor0.rgb); + } + if (0.0 == 3) // OpenLit + { + float3 lightDirectionForSH9 = OpenLitLightingDirectionForSH9(); + OpenLitShadeSH9ToonDouble(lightDirectionForSH9, poiLight.directColor, poiLight.indirectColor); + poiLight.directColor += _LightColor0.rgb; + } + float lightMapMode = 0.0; + if (0.0 == 0) + { + poiLight.direction = calculateluminance(_LightColor0.rgb) * _WorldSpaceLightPos0.xyz + 0.2 * PoiSHAr.xyz + 0.333333 * PoiSHAg.xyz + 0.333333 * PoiSHAb.xyz + 0.333333; + } + if (0.0 == 1 || 0.0 == 2) + { + if (0.0 == 1) + { + poiLight.direction = mul(unity_ObjectToWorld, float4(0,0,0,1)).xyz;; + } + if (0.0 == 2) + { + poiLight.direction = float4(0,0,0,1); + } + if (lightMapMode == 0) + { + lightMapMode = 1; + } + } + if (0.0 == 3) // UTS + { + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float3 lightDirection = normalize(lerp(defaultLightDirection, _WorldSpaceLightPos0.xyz, any(_WorldSpaceLightPos0.xyz))); + poiLight.direction = lightDirection; + } + if (0.0 == 4) // OpenLit + { + poiLight.direction = OpenLitLightingDirection(); // float4 customDir = 0; // Do we want to give users to alter this (OpenLit always does!)? + } + if (0.0 == 5) // View Direction + { + float3 upViewDir = normalize(UNITY_MATRIX_V[1].xyz); + float3 rightViewDir = normalize(UNITY_MATRIX_V[0].xyz); + float yawOffset_Rads = radians(!IsInMirror() ? - 0.0 : 0.0); + float3 rotatedViewYaw = normalize(RotateAroundAxis(rightViewDir, upViewDir, yawOffset_Rads)); + float3 rotatedViewCameraMeshOffset = RotateAroundAxis((getCameraPosition() - (poiMesh.worldPos)), upViewDir, yawOffset_Rads); + float pitchOffset_Rads = radians(!IsInMirror() ? 0.0 : - 0.0); + float3 rotatedViewPitch = RotateAroundAxis(rotatedViewCameraMeshOffset, rotatedViewYaw, pitchOffset_Rads); + poiLight.direction = normalize(rotatedViewPitch); + } + if (!any(poiLight.direction)) + { + poiLight.direction = float3(.4, 1, .4); + } + poiLight.direction = normalize(poiLight.direction); + poiLight.attenuationStrength = 0.0; + poiLight.attenuation = 1; + if (!all(_LightColor0.rgb == 0.0)) + { + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation *= attenuation; + } + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(poiMesh.lightmapUV.xy, poiMesh.worldPos); + float zDist = dot(_WorldSpaceCameraPos - poiMesh.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(poiMesh.worldPos, zDist); + poiLight.attenuation = UnityMixRealtimeAndBakedShadows(poiLight.attenuation, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + #ifdef RALIV_PENETRATION + if (0.0 || 0.0) + { + if (1.0) + { + poiLight.attenuation = 1; + } + } + #endif + if (!any(poiLight.directColor) && !any(poiLight.indirectColor) && lightMapMode == 0) + { + lightMapMode = 1; + if (0.0 == 0) + { + poiLight.direction = normalize(float3(.4, 1, .4)); + } + } + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotVCentered = abs(dot(poiMesh.normals[1], normalize(getCameraPosition() - i.worldPos.xyz))); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = max(0.00001, dot(poiLight.direction, poiLight.halfDir)); + if (lightMapMode == 0) + { + float3 ShadeSH9Plus = GetSHLength(); + float3 ShadeSH9Minus = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + float3 greyScaleVector = float3(.33333, .33333, .33333); + float bw_lightColor = dot(poiLight.directColor, greyScaleVector); + float bw_directLighting = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor * lerp(1, poiLight.attenuation, poiLight.attenuationStrength)) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_directLightingNoAtten = (((poiLight.nDotL * 0.5 + 0.5) * bw_lightColor) + dot(PoiShadeSH9(float4(poiMesh.normals[1], 1)), greyScaleVector)); + float bw_bottomIndirectLighting = dot(ShadeSH9Minus, greyScaleVector); + float bw_topIndirectLighting = dot(ShadeSH9Plus, greyScaleVector); + float lightDifference = ((bw_topIndirectLighting + bw_lightColor) - bw_bottomIndirectLighting); + poiLight.lightMap = smoothstep(0, lightDifference, bw_directLighting - bw_bottomIndirectLighting); + poiLight.lightMapNoAttenuation = smoothstep(0, lightDifference, bw_directLightingNoAtten - bw_bottomIndirectLighting); + } + if (lightMapMode == 1) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 2) + { + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + poiLight.lightMap = poiLight.nDotLSaturated * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 3) + { + poiLight.lightMapNoAttenuation = 1; + poiLight.lightMap = lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + } + if (lightMapMode == 4) + { + #if defined(PROP_LIGHTDATASDFMAP) + float2 lightDataSDFMap = 1; + if (0.0 > 0) + { + float sdfLod = pow(0.0, 4.0); + lightDataSDFMap = POI2D_SAMPLER_PANGRAD(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0), max(poiMesh.dx, sdfLod), max(poiMesh.dy, sdfLod)).rg; + } + else + { + lightDataSDFMap = POI2D_SAMPLER_PAN(_LightDataSDFMap, _linear_repeat, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0)).rg; + } + poiLight.lightMapNoAttenuation = poiLight.nDotLSaturated; + float3 faceR = mul((float3x3)unity_ObjectToWorld, float3(-1.0, 0.0, 0.0)); + float LdotR = dot(poiLight.direction.xz, faceR.xz); + float sdf = LdotR < 0 ? lightDataSDFMap.g : lightDataSDFMap.r; + float3 faceF = mul((float3x3)unity_ObjectToWorld, float3(0.0, 0.0, 1.0)).xyz; + faceF.y *= 1.0; + faceF = dot(faceF, faceF) == 0 ? 0 : normalize(faceF); + float3 faceL = poiLight.direction; + faceL.y *= 1.0; + faceL = dot(faceL, faceL) == 0 ? 0 : normalize(faceL); + float lnSDF = dot(faceL, faceF); + poiLight.lightMapNoAttenuation = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25); + poiLight.lightMap = saturate(lnSDF * 0.5 + sdf * 0.5 + 0.25) * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #else + poiLight.lightMapNoAttenuation = poiLight.nDotLNormalized; + poiLight.lightMap = poiLight.nDotLNormalized * lerp(1, poiLight.attenuation, poiLight.attenuationStrength); + #endif + } + poiLight.lightMapNoAttenuation *= poiLight.detailShadow; + poiLight.lightMap *= poiLight.detailShadow; + poiLight.directColor = max(poiLight.directColor, 0.0001); + poiLight.indirectColor = max(poiLight.indirectColor, 0.0001); + if (0.0 == 3) + { + poiLight.directColor = max(poiLight.directColor, _LightingMinLightBrightness); + } + else + { + poiLight.directColor = max(poiLight.directColor, poiLight.directColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.directColor))))); + poiLight.indirectColor = max(poiLight.indirectColor, poiLight.indirectColor * min(10000, (_LightingMinLightBrightness * rcp(calculateluminance(poiLight.indirectColor))))); + } + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), _LightingMonochromatic); + if (_LightingCapEnabled) + { + poiLight.directColor = min(poiLight.directColor, _LightingCap); + poiLight.indirectColor = min(poiLight.indirectColor, _LightingCap); + } + if (0.0) + { + poiLight.directColor = poiThemeColor(poiMods, float4(1,1,1,1), 0.0); + } + #ifdef UNITY_PASS_FORWARDBASE + poiLight.directColor = max(poiLight.directColor * 1.0, 0); + poiLight.directColor = max(poiLight.directColor + 0.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor * 1.0, 0); + poiLight.indirectColor = max(poiLight.indirectColor + 0.0, 0); + #endif + #endif + #ifdef POI_PASS_ADD + if (!1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #if defined(DIRECTIONAL) + if (1.0) + { + return float4(mainTexture.rgb * .0001, 1); + } + #endif + poiLight.direction = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz * _WorldSpaceLightPos0.w); + #if defined(POINT) || defined(SPOT) + #ifdef POINT + unityShadowCoord3 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)).xyz; + poiLight.attenuation = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).r; + #endif + #ifdef SPOT + unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(poiMesh.worldPos, 1)); + poiLight.attenuation = (lightCoord.z > 0) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz); + #endif + #else + UNITY_LIGHT_ATTENUATION(attenuation, i, poiMesh.worldPos) + poiLight.attenuation = attenuation; + #endif + poiLight.additiveShadow = UNITY_SHADOW_ATTENUATION(i, poiMesh.worldPos); + poiLight.attenuationStrength = 1.0; + poiLight.directColor = 1.0 ? MaxLuminance(_LightColor0.rgb * poiLight.attenuation, 1.0) : _LightColor0.rgb * poiLight.attenuation; + #if defined(POINT_COOKIE) || defined(DIRECTIONAL_COOKIE) + poiLight.indirectColor = 0; + #else + poiLight.indirectColor = lerp(0, poiLight.directColor, 0.5); + poiLight.indirectColor = 1.0 ? MaxLuminance(poiLight.indirectColor, 1.0) : poiLight.indirectColor; + #endif + poiLight.directColor = lerp(poiLight.directColor, dot(poiLight.directColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.indirectColor = lerp(poiLight.indirectColor, dot(poiLight.indirectColor, float3(0.299, 0.587, 0.114)), 0.0); + poiLight.halfDir = normalize(poiLight.direction + poiCam.viewDir); + poiLight.nDotL = dot(poiMesh.normals[1], poiLight.direction); + poiLight.nDotLSaturated = saturate(poiLight.nDotL); + poiLight.nDotLNormalized = (poiLight.nDotL + 1) * 0.5; + poiLight.nDotV = abs(dot(poiMesh.normals[1], poiCam.viewDir)); + poiLight.nDotH = dot(poiMesh.normals[1], poiLight.halfDir); + poiLight.lDotv = dot(poiLight.direction, poiCam.viewDir); + poiLight.lDotH = dot(poiLight.direction, poiLight.halfDir); + poiLight.vertexNDotL = dot(poiMesh.normals[0], poiLight.direction); + poiLight.vertexNDotV = abs(dot(poiMesh.normals[0], poiCam.viewDir)); + poiLight.vertexNDotH = max(0.00001, dot(poiMesh.normals[0], poiLight.halfDir)); + if (0.0 == 0 || 0.0 == 1 || 0.0 == 2) + { + poiLight.lightMap = poiLight.nDotLNormalized; + } + if (0.0 == 3) + { + poiLight.lightMap = 1; + } + poiLight.lightMap *= poiLight.detailShadow; + poiLight.lightMapNoAttenuation = poiLight.lightMap; + poiLight.lightMap *= lerp(1, poiLight.additiveShadow, poiLight.attenuationStrength); + #endif + #if defined(MOCHIE_PBR) + MetallicAndSpecularFragDataInit(poiFragData, poiMesh, poiMods); + #endif + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + #if defined(_LIGHTINGMODE_SHADEMAP) && defined(VIGNETTE_MASKED) + #ifndef POI_PASS_OUTLINE + #endif + #endif + #ifdef VIGNETTE_MASKED + #ifdef POI_PASS_OUTLINE + if (1.0) + { + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + } + else + { + poiLight.finalLighting = 1; + } + #else + calculateShading(poiLight, poiFragData, poiMesh, poiCam); + #endif + #else + poiLight.finalLighting = 1; + poiLight.rampedLightMap = poiEdgeNonLinear(poiLight.nDotL, 0.1, .1); + #endif + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, poiLight.rampedLightMap); + } + if (0.0 > 0) + { + applyToGlobalMask(poiMods, 0.0 - 1, 2.0, 1 - poiLight.rampedLightMap); + } + poiLight.directLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.indirectLuminance = dot(poiLight.directColor, float3(0.299, 0.587, 0.114)); + poiLight.finalLuminance = dot(poiLight.finalLighting, float3(0.299, 0.587, 0.114)); + #ifdef POI_GRABPASS + poiLight.finalLighting = max(poiLight.finalLighting, 0.0001); + #endif + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + poiFragData.finalColor = poiFragData.baseColor * poiLight.finalLighting; + #ifdef MOCHIE_PBR + MochieBRDF(poiFragData, poiCam, poiLight, poiMesh, poiMods); + #endif + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + if (0.0 == POI_MODE_CUTOUT && !0.0) + { + poiFragData.alpha = 1; + } + if (4.0 == 4) + { + poiFragData.alpha = saturate(poiFragData.alpha * 10.0); + } + if (0.0 != POI_MODE_TRANSPARENT) + { + poiFragData.finalColor *= poiFragData.alpha; + } + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + Stencil + { + Ref [_StencilRef] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilCompareFunction] + Pass [_StencilPassOp] + Fail [_StencilFailOp] + ZFail [_StencilZFailOp] + } + ZWrite [_ZWrite] + Cull Back + AlphaToMask Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_MOCHIEMETALLICMAPS + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_instancing + #pragma multi_compile_shadowcaster + #pragma multi_compile_vertex _ FOG_EXP2 + #define POI_PASS_SHADOW + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0004882813,0.0004882813,2048,2048), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + poiFragData.finalColor = poiFragData.baseColor; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + Pass + { + Name "META" + Tags { "LightMode" = "Meta" } + ZWrite [_ZWrite] + Cull Off + ZTest [_ZTest] + ColorMask RGBA + Offset [_OffsetFactor], [_OffsetUnits] + BlendOp [_BlendOp], [_BlendOpAlpha] + Blend [_SrcBlend] [_DstBlend], [_SrcBlendAlpha] [_DstBlendAlpha] + CGPROGRAM + #define MOCHIE_PBR + #define VIGNETTE_MASKED + #define _LIGHTINGMODE_REALISTIC + #define _STOCHASTICMODE_DELIOT_HEITZ + #define PROP_BUMPMAP + #define PROP_MOCHIEMETALLICMAPS + #define OPTIMIZER_ENABLED + #pragma target 5.0 + #pragma multi_compile_instancing + #pragma multi_compile_fragment _ VERTEXLIGHT_ON + #define POI_PASS_META + #define POI_WORLD + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + #include "AutoLight.cginc" + #include "UnityMetaPass.cginc" + #ifndef VRC_LIGHT_VOLUMES_INCLUDED + #define VRC_LIGHT_VOLUMES_INCLUDED + #define VRCLV_VERSION 2 + #define VRCLV_MAX_VOLUMES_COUNT 32 + #define VRCLV_MAX_LIGHTS_COUNT 128 + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + cbuffer LightVolumeUniforms { + #endif + uniform float _UdonLightVolumeEnabled; + uniform float _UdonLightVolumeVersion; + uniform float _UdonLightVolumeCount; + uniform float _UdonLightVolumeAdditiveMaxOverdraw; + uniform float _UdonLightVolumeAdditiveCount; + uniform float _UdonLightVolumeProbesBlend; + uniform float _UdonLightVolumeSharpBounds; + uniform float4x4 _UdonLightVolumeInvWorldMatrix[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeRotation[VRCLV_MAX_VOLUMES_COUNT * 2]; // Legacy! Used in this version to have back compatibility with older worlds. Array commented above will be used in future releases! Legacy! + uniform float3 _UdonLightVolumeInvLocalEdgeSmooth[VRCLV_MAX_VOLUMES_COUNT]; + uniform float3 _UdonLightVolumeUvw[VRCLV_MAX_VOLUMES_COUNT * 6]; // Legacy! AABB Bounds of islands on the 3D Texture atlas. Array commented above will be used in future releases! Legacy! + uniform float4 _UdonLightVolumeOcclusionUvw[VRCLV_MAX_VOLUMES_COUNT]; + uniform float4 _UdonLightVolumeColor[VRCLV_MAX_VOLUMES_COUNT]; + uniform float _UdonPointLightVolumeCount; + uniform float _UdonPointLightVolumeCubeCount; + uniform float4 _UdonPointLightVolumePosition[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeColor[VRCLV_MAX_LIGHTS_COUNT]; + uniform float4 _UdonPointLightVolumeDirection[VRCLV_MAX_LIGHTS_COUNT]; + uniform float3 _UdonPointLightVolumeCustomID[VRCLV_MAX_LIGHTS_COUNT]; + uniform float _UdonLightBrightnessCutoff; + uniform float _UdonLightVolumeOcclusionCount; + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + } + #endif + #ifndef SHADER_TARGET_SURFACE_ANALYSIS + uniform Texture3D _UdonLightVolume; + uniform SamplerState sampler_UdonLightVolume; + uniform Texture2DArray _UdonPointLightVolumeTexture; + #define LV_SAMPLE(tex, uvw) tex.SampleLevel(sampler_UdonLightVolume, uvw, 0) + #else + #define LV_SAMPLE(tex, uvw) float4(0,0,0,0) + #endif + #define LV_PI 3.141592653589793f + #define LV_PI2 6.283185307179586f + float LV_Smoothstep01(float x) { + return x * x * (3 - 2 * x); + } + float3 LV_MultiplyVectorByQuaternion(float3 v, float4 q) { + float3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); + } + float3 LV_MultiplyVectorByMatrix2x3(float3 v, float3 r0, float3 r1) { + float3 r2 = cross(r0, r1); + return float3(dot(v, r0), dot(v, r1), dot(v, r2)); + } + float LV_FastAcos(float x) { + float absX = abs(x); + float res = -0.156583f * absX + LV_PI * 0.5f; + res *= sqrt(1.0f - absX); + return (x >= 0) ? res : (LV_PI - res); + } + float LV_DistributionGGX(float NoH, float roughness) { + float f = (roughness - 1) * ((roughness + 1) * (NoH * NoH)) + 1; + return (roughness * roughness) / ((float) LV_PI * f * f); + } + bool LV_PointLocalAABB(float3 localUVW) { + return all(abs(localUVW) <= 0.5); + } + float3 LV_LocalFromVolume(uint volumeID, float3 worldPos) { + return mul(_UdonLightVolumeInvWorldMatrix[volumeID], float4(worldPos, 1.0)).xyz; + } + float LV_EvaluateSH(float L0, float3 L1, float3 n) { + return L0 + dot(L1, n); + } + float4 LV_SampleCubemapArray(uint id, float3 dir) { + float3 absDir = abs(dir); + float2 uv; + uint face; + if (absDir.x >= absDir.y && absDir.x >= absDir.z) { + face = dir.x > 0 ? 0 : 1; + uv = float2((dir.x > 0 ? -dir.z : dir.z), -dir.y) * rcp(absDir.x); + } else if (absDir.y >= absDir.z) { + face = dir.y > 0 ? 2 : 3; + uv = float2(dir.x, (dir.y > 0 ? dir.z : -dir.z)) * rcp(absDir.y); + } else { + face = dir.z > 0 ? 4 : 5; + uv = float2((dir.z > 0 ? dir.x : -dir.x), -dir.y) * rcp(absDir.z); + } + float3 uvid = float3(uv * 0.5 + 0.5, id * 6 + face); + return LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + } + float4 LV_ProjectQuadLightIrradianceSH(float3 shadingPosition, float3 lightVertices[4]) { + [unroll] for (uint edge0 = 0; edge0 < 4; edge0++) { + lightVertices[edge0] = normalize(lightVertices[edge0] - shadingPosition); + } + const float3 zhDir0 = float3(0.866025, -0.500001, -0.000004); + const float3 zhDir1 = float3(-0.759553, 0.438522, -0.480394); + const float3 zhDir2 = float3(-0.000002, 0.638694, 0.769461); + const float3 zhWeightL1y = float3(2.1995339f, 2.50785367f, 1.56572711f); + const float3 zhWeightL1z = float3(-1.82572523f, -2.08165037f, 0.00000000f); + const float3 zhWeightL1x = float3(2.42459869f, 1.44790525f, 0.90397552f); + float solidAngle = 0.0; + float3 surfaceIntegral = 0.0; + [loop] for (uint edge1 = 0; edge1 < 4; edge1++) { + uint next = (edge1 + 1) % 4; + uint prev = (edge1 + 4 - 1) % 4; + float3 prevVert = lightVertices[prev]; + float3 thisVert = lightVertices[edge1]; + float3 nextVert = lightVertices[next]; + float3 a = cross(thisVert, prevVert); + float3 b = cross(thisVert, nextVert); + float lenA = length(a); + float lenB = length(b); + solidAngle += LV_FastAcos(clamp(dot(a, b) / (lenA * lenB), -1, 1)); + float3 mu = b * rcp(lenB); + float cosGamma = dot(thisVert, nextVert); + float gamma = LV_FastAcos(clamp(cosGamma, -1, 1)); + surfaceIntegral.x += gamma * dot(zhDir0, mu); + surfaceIntegral.y += gamma * dot(zhDir1, mu); + surfaceIntegral.z += gamma * dot(zhDir2, mu); + } + solidAngle = solidAngle - LV_PI2; + surfaceIntegral *= 0.5; + const float normalizationL0 = 0.5f * sqrt(1.0f / LV_PI); + float l0 = normalizationL0 * solidAngle; + float l1y = dot(zhWeightL1y, surfaceIntegral); + float l1z = dot(zhWeightL1z, surfaceIntegral); + float l1x = dot(zhWeightL1x, surfaceIntegral); + const float cosineKernelL0 = LV_PI; // (1) + const float cosineKernelL1 = LV_PI2 / 3.0f; // (1) + const float oneOverPi = 1.0f / LV_PI; // (2) + const float normalizationL1 = 0.5f * sqrt(3.0f / LV_PI); // (3) + const float weightL0 = cosineKernelL0 * normalizationL0 * oneOverPi; // (1), (2), (3) + const float weightL1 = cosineKernelL1 * normalizationL1 * oneOverPi; // (1), (2), (3) + l0 *= weightL0; + l1y *= weightL1; + l1z *= weightL1; + l1x *= weightL1; + return float4(l1x, l1y, l1z, l0); + } + void LV_QuadLight(float3 worldPos, float3 centroidPos, float4 rotationQuat, float2 size, float3 color, float sqMaxDist, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 lightToWorldPos = worldPos - centroidPos; + float3 normal = LV_MultiplyVectorByQuaternion(float3(0, 0, 1), rotationQuat); + if (dot(normal, lightToWorldPos) < 0.0) return; + float sqCutoffDist = sqMaxDist - dot(lightToWorldPos, lightToWorldPos); + color.rgb *= saturate(sqCutoffDist / sqMaxDist) * LV_PI * occlusion; + float2 halfSize = size * 0.5f; + float3 xAxis = LV_MultiplyVectorByQuaternion(float3(1, 0, 0), rotationQuat); + float3 yAxis = cross(normal, xAxis); + float3 verts[4]; + verts[0] = centroidPos + (-halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[1] = centroidPos + ( halfSize.x * xAxis) + ( halfSize.y * yAxis); + verts[2] = centroidPos + ( halfSize.x * xAxis) + (-halfSize.y * yAxis); + verts[3] = centroidPos + (-halfSize.x * xAxis) + (-halfSize.y * yAxis); + float4 areaLightSH = LV_ProjectQuadLightIrradianceSH(worldPos, verts); + float lenL1 = length(areaLightSH.xyz); + if (lenL1 > areaLightSH.w) areaLightSH.xyz *= areaLightSH.w / lenL1; + L0 += areaLightSH.w * color.rgb; + L1r += areaLightSH.xyz * color.r; + L1g += areaLightSH.xyz * color.g; + L1b += areaLightSH.xyz * color.b; + count++; + } + float3 LV_PointLightAttenuation(float sqdist, float sqlightSize, float3 color, float brightnessCutoff, float sqMaxDist) { + float mask = saturate(1 - sqdist / sqMaxDist); + return mask * mask * color * sqlightSize / (sqdist + sqlightSize); + } + float LV_PointLightSolidAngle(float sqdist, float sqlightSize) { + return saturate(sqrt(sqdist / (sqlightSize + sqdist))); + } + void LV_SphereLight(float sqdist, float3 dirN, float sqlightSize, float3 color, float occlusion, float sqMaxDist, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 att = LV_PointLightAttenuation(sqdist, sqlightSize, color, _UdonLightBrightnessCutoff, sqMaxDist); + float3 l0 = att * occlusion; + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLight(float sqdist, float3 dirN, float sqlightSize, float3 att, float spotMask, float cosAngle, float coneFalloff, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float smoothedCone = LV_Smoothstep01(saturate(spotMask * coneFalloff)); + float3 l0 = att * (occlusion * smoothedCone); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * saturate(1 - cosAngle)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightCookie(float sqdist, float3 dirN, float sqlightSize, float3 att, float4 lightRot, float tanAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 localDir = LV_MultiplyVectorByQuaternion(-dirN, lightRot); + float2 uv = localDir.xy * rcp(localDir.z * tanAngle); + if ( + localDir.z <= 0.0 || // Culling by direction + abs(uv.x) > 1.0 || abs(uv.y) > 1.0 // Culling by UV + ) return; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 - customId - 1; + float3 uvid = float3(uv * 0.5 + 0.5, id); + float angleSize = saturate(rsqrt(1 + tanAngle * tanAngle)); + float4 cookie = LV_SAMPLE(_UdonPointLightVolumeTexture, uvid); + float3 l0 = att * cookie.rgb * (cookie.a * occlusion); + float3 l1 = dirN * LV_PointLightSolidAngle(sqdist, sqlightSize * (1 - angleSize)); + L0 += l0; + L1r += l0.r * l1; + L1g += l0.g * l1; + L1b += l0.b * l1; + count++; + } + void LV_SphereSpotLightAttenuationLUT(float sqdist, float3 dirN, float sqlightSize, float3 color, float spotMask, float cosAngle, uint customId, float occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float dirRadius = sqdist * abs(sqlightSize); + float spot = 1 - saturate(spotMask * rcp(1 - cosAngle)); + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId - 1; + float3 uvid = float3(sqrt(float2(spot, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * occlusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } + void LV_PointLight(uint id, float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, inout uint count) { + float3 customID_data = _UdonPointLightVolumeCustomID[id]; + int shadowId = (int) customID_data.y; // Shadowmask id + int customId = (int) customID_data.x; // Custom Texture ID + float sqrRange = customID_data.z; // Squared culling distance + float4 pos = _UdonPointLightVolumePosition[id]; // Light position and inversed squared range + float3 dir = pos.xyz - worldPos; + float sqlen = max(dot(dir, dir), 1e-6); + if (sqlen > sqrRange) return; // Early distance based culling + float3 dirN = dir * rsqrt(sqlen); + float lightOcclusion = 1; + if (_UdonLightVolumeOcclusionCount != 0 && shadowId >= 0) { + lightOcclusion = dot(occlusion, float4(shadowId == 0, shadowId == 1, shadowId == 2, shadowId == 3)); + } + float4 color = _UdonPointLightVolumeColor[id]; // Color, angle + float4 ldir = _UdonPointLightVolumeDirection[id]; // Dir + falloff or Rotation + if (pos.w < 0) { // It is a spot light + float angle = color.w; + float spotMask = dot(ldir.xyz, -dirN) - angle; + if(customId >= 0 && spotMask < 0) return; // Spot cone based culling + if (customId > 0) { // If it uses Attenuation LUT + LV_SphereSpotLightAttenuationLUT(sqlen, dirN, -pos.w, color.rgb, spotMask, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + float3 att = LV_PointLightAttenuation(sqlen, -pos.w, color.rgb, _UdonLightBrightnessCutoff, sqrRange); + if (customId < 0) { // If uses cookie + LV_SphereSpotLightCookie(sqlen, dirN, -pos.w, att, ldir, angle, customId, lightOcclusion, L0, L1r, L1g, L1b, count); + } else { // If it uses default parametric attenuation + LV_SphereSpotLight(sqlen, dirN, -pos.w, att, spotMask, angle, ldir.w, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + } else if (color.w <= 1.5f) { // It is a point light + if (customId > 0) { // Using LUT + float invSqRange = abs(pos.w); // Sign of range defines if it's point light (positive) or a spot light (negative) + float dirRadius = sqlen * invSqRange; + uint id = (uint) _UdonPointLightVolumeCubeCount * 5 + customId; + float3 uvid = float3(sqrt(float2(0, dirRadius)), id); + float3 att = color.rgb * LV_SAMPLE(_UdonPointLightVolumeTexture, uvid).xyz * lightOcclusion; + L0 += att; + L1r += dirN * att.r; + L1g += dirN * att.g; + L1b += dirN * att.b; + count++; + } else { // If it uses default parametric attenuation + float3 l0 = 0, l1r = 0, l1g = 0, l1b = 0; + LV_SphereLight(sqlen, dirN, pos.w, color.rgb, lightOcclusion, sqrRange, l0, l1r, l1g, l1b, count); + float3 cubeColor = 1; + if (customId < 0) { // If it uses a cubemap + uint id = -customId - 1; // Cubemap ID starts from zero and should not take in count texture array slices count. + cubeColor = LV_SampleCubemapArray(id, LV_MultiplyVectorByQuaternion(dirN, ldir)).xyz; + } + L0 += l0 * cubeColor; + L1r += l1r * cubeColor.r; + L1g += l1g * cubeColor.g; + L1b += l1b * cubeColor.b; + } + } else { // It is an area light + LV_QuadLight(worldPos, pos.xyz, ldir, float2(pos.w, color.w - 2.0f), color.rgb, sqrRange, lightOcclusion, L0, L1r, L1g, L1b, count); + } + } + void LV_SampleLightVolumeTex(float3 uvw0, float3 uvw1, float3 uvw2, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b) { + float4 tex0 = LV_SAMPLE(_UdonLightVolume, uvw0); + float4 tex1 = LV_SAMPLE(_UdonLightVolume, uvw1); + float4 tex2 = LV_SAMPLE(_UdonLightVolume, uvw2); + L0 = tex0.rgb; + L1r = float3(tex1.r, tex2.r, tex0.a); + L1g = float3(tex1.g, tex2.g, tex1.a); + L1b = float3(tex1.b, tex2.b, tex2.a); + } + float LV_BoundsMask(float3 localUVW, float3 invLocalEdgeSmooth) { + float3 distToMin = (localUVW + 0.5) * invLocalEdgeSmooth; + float3 distToMax = (0.5 - localUVW) * invLocalEdgeSmooth; + float3 fade = saturate(min(distToMin, distToMax)); + return fade.x * fade.y * fade.z; + } + void LV_SampleLightProbe(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz; + L1g += unity_SHAg.xyz; + L1b += unity_SHAb.xyz; + } + void LV_SampleLightProbeDering(inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + L0 += float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + L1r += unity_SHAr.xyz * 0.565f; + L1g += unity_SHAg.xyz * 0.565f; + L1b += unity_SHAb.xyz * 0.565f; + } + void LV_SampleVolume(uint id, float3 localUVW, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + float3 uvw0 = uvwScaled + _UdonLightVolumeUvw[uvwID].xyz; + float3 uvw1 = uvwScaled + _UdonLightVolumeUvw[uvwID + 2].xyz; + float3 uvw2 = uvwScaled + _UdonLightVolumeUvw[uvwID + 4].xyz; + float3 l0, l1r, l1g, l1b; + LV_SampleLightVolumeTex(uvw0, uvw1, uvw2, l0, l1r, l1g, l1b); + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + occlusion = 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + occlusion = 1; + } + float4 color = _UdonLightVolumeColor[id]; + L0 += l0 * color.rgb; + l1r *= color.r; + l1g *= color.g; + l1b *= color.b; + if (color.a != 0) { + float3 r0 = _UdonLightVolumeRotation[id * 2].xyz; + float3 r1 = _UdonLightVolumeRotation[id * 2 + 1].xyz; + L1r += LV_MultiplyVectorByMatrix2x3(l1r, r0, r1); + L1g += LV_MultiplyVectorByMatrix2x3(l1g, r0, r1); + L1b += LV_MultiplyVectorByMatrix2x3(l1b, r0, r1); + } else { + L1r += l1r; + L1g += l1g; + L1b += l1b; + } + } + float4 LV_SampleVolumeOcclusion(uint id, float3 localUVW) { + float4 uvwOcclusion = _UdonLightVolumeOcclusionUvw[id]; + if (uvwOcclusion.x >= 0) { + uint uvwID = id * 6; + float3 uvwScaled = saturate(localUVW + 0.5) * (_UdonLightVolumeUvw[uvwID + 1].xyz - _UdonLightVolumeUvw[uvwID].xyz); + return 1.0f - LV_SAMPLE(_UdonLightVolume, uvwOcclusion.xyz + uvwScaled * uvwOcclusion.w); + } else { + return 1; + } + } + void LV_PointLightVolumeSH(float3 worldPos, float4 occlusion, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b) { + uint pointCount = min((uint) _UdonPointLightVolumeCount, VRCLV_MAX_LIGHTS_COUNT); + if (pointCount == 0) return; + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_LIGHTS_COUNT); + uint pcount = 0; // Point lights counter + [loop] for (uint pid = 0; pid < pointCount && pcount < maxOverdraw; pid++) { + LV_PointLight(pid, worldPos, occlusion, L0, L1r, L1g, L1b, pcount); + } + } + void LV_LightVolumeSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + if (volumesCount == 0) { // Legacy! Fallback to default light probes if Light Volume are not enabled or a version is too old to have a support. Legacy! + LV_SampleLightProbe(L0, L1r, L1g, L1b); + return; + } + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + bool lightProbesBlend = _UdonLightVolumeProbesBlend; + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + [loop] for (uint id = 0; id < volumesCount; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA && lightProbesBlend) { + LV_SampleLightProbe(L0, L1r, L1g, L1b); + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + float3 L0_A = 0; + float3 L1r_A = 0; + float3 L1g_A = 0; + float3 L1b_A = 0; + float4 occlusion_A = 1; + LV_SampleVolume(volumeID_A, localUVW_A, L0_A, L1r_A, L1g_A, L1b_A, occlusion_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || isNoA || (_UdonLightVolumeSharpBounds && isNoB)) { // Returning SH A result if it's the center of mask or out of bounds + L0 += L0_A; + L1r += L1r_A; + L1g += L1g_A; + L1b += L1b_A; + occlusion = occlusion_A; + occlusion *= mOcclusion; + return; + } + float3 L0_B = 0; + float3 L1r_B = 0; + float3 L1g_B = 0; + float3 L1b_B = 0; + float4 occlusion_B = 1; + if (isNoB && lightProbesBlend) { // No Volume found and light volumes blending enabled + LV_SampleLightProbe(L0_B, L1r_B, L1g_B, L1b_B); + } else { // Blending Volume A and Volume B + localUVW_B = isNoB ? localUVW : localUVW_B; + volumeID_B = isNoB ? volumesCount - 1 : volumeID_B; + LV_SampleVolume(volumeID_B, localUVW_B, L0_B, L1r_B, L1g_B, L1b_B, occlusion_B); + } + occlusion = lerp(occlusion_B, occlusion_A, mask); + occlusion *= mOcclusion; + L0 += lerp(L0_B, L0_A, mask); + L1r += lerp(L1r_B, L1r_A, mask); + L1g += lerp(L1g_B, L1g_A, mask); + L1b += lerp(L1b_B, L1b_A, mask); + } + void LV_LightVolumeAdditiveSH(float3 worldPos, inout float3 L0, inout float3 L1r, inout float3 L1g, inout float3 L1b, out float4 occlusion) { + occlusion = 1; + float4 mOcclusion = 1; // Multiplicative occlusion. Applies on top of regular occlusion + uint additiveCount = min((uint) _UdonLightVolumeAdditiveCount, VRCLV_MAX_VOLUMES_COUNT); + if (additiveCount == 0 && (uint) _UdonPointLightVolumeCount == 0) return; // Legacy! + uint volumesCount = min((uint) _UdonLightVolumeCount, VRCLV_MAX_VOLUMES_COUNT); + uint maxOverdraw = min((uint) _UdonLightVolumeAdditiveMaxOverdraw, VRCLV_MAX_VOLUMES_COUNT); + uint volumeID_A = -1; // Main, dominant volume ID + uint volumeID_B = -1; // Secondary volume ID to blend main with + float3 localUVW = 0; // Last local UVW to use in disabled Light Probes mode + float3 localUVW_A = 0; // Main local UVW for Y Axis and Free rotations + float3 localUVW_B = 0; // Secondary local UVW + bool isNoA = true; + bool isNoB = true; + uint addVolumesCount = 0; + uint count = min(_UdonLightVolumeOcclusionCount == 0 ? additiveCount : volumesCount, VRCLV_MAX_VOLUMES_COUNT); // Only use all volumes if occlusion volumes are enabled + [loop] for (uint id = 0; id < count; id++) { + localUVW = LV_LocalFromVolume(id, worldPos); + if (LV_PointLocalAABB(localUVW)) { // Intersection test + if (id < additiveCount) { // Sampling additive volumes + if (addVolumesCount < maxOverdraw) { + float4 occ; // Multiplicative occlusion + LV_SampleVolume(id, localUVW, L0, L1r, L1g, L1b, occ); + mOcclusion *= occ; + addVolumesCount++; + } + } else if (isNoA) { // First, searching for volume A + volumeID_A = id; + localUVW_A = localUVW; + isNoA = false; + } else { // Next, searching for volume B if A found + volumeID_B = id; + localUVW_B = localUVW; + isNoB = false; + break; + } + } + } + if (isNoA || _UdonLightVolumeOcclusionCount == 0) { + occlusion *= mOcclusion; + return; + } + localUVW_A = isNoA ? localUVW : localUVW_A; + volumeID_A = isNoA ? volumesCount - 1 : volumeID_A; + occlusion = LV_SampleVolumeOcclusion(volumeID_A, localUVW_A); + float mask = LV_BoundsMask(localUVW_A, _UdonLightVolumeInvLocalEdgeSmooth[volumeID_A]); + if (mask == 1 || (_UdonLightVolumeSharpBounds && isNoB)) { + occlusion *= mOcclusion; + return; // Returning A result if it's the center of mask or out of bounds + } + if (isNoB) occlusion = lerp(1, occlusion, mask); + else occlusion = lerp(LV_SampleVolumeOcclusion(volumeID_B, localUVW_B), occlusion, mask); + occlusion *= mOcclusion; + } + float3 LightVolumeSpecular(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specColor = max(float3(dot(reflect(-L1r, worldNormal), viewDir), dot(reflect(-L1g, worldNormal), viewDir), dot(reflect(-L1b, worldNormal), viewDir)), 0); + float3 rDir = normalize(normalize(L1r) + viewDir); + float3 gDir = normalize(normalize(L1g) + viewDir); + float3 bDir = normalize(normalize(L1b) + viewDir); + float rNh = saturate(dot(worldNormal, rDir)); + float gNh = saturate(dot(worldNormal, gDir)); + float bNh = saturate(dot(worldNormal, bDir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float rSpec = LV_DistributionGGX(rNh, roughExp); + float gSpec = LV_DistributionGGX(gNh, roughExp); + float bSpec = LV_DistributionGGX(bNh, roughExp); + float3 specs = (rSpec + gSpec + bSpec) * f0; + float3 coloredSpecs = specs * specColor; + float3 a = coloredSpecs + specs * L0; + float3 b = coloredSpecs * 3; + return max(lerp(a, b, smoothness) * 0.5f, 0.0); + } + float3 LightVolumeSpecular(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecular(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeSpecularDominant(float3 f0, float smoothness, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 dominantDir = L1r + L1g + L1b; + float3 dir = normalize(normalize(dominantDir) + viewDir); + float nh = saturate(dot(worldNormal, dir)); + float roughness = 1 - smoothness * 0.9f; + float roughExp = roughness * roughness; + float spec = LV_DistributionGGX(nh, roughExp); + return max(spec * L0 * f0, 0.0) * 1.5f; + } + float3 LightVolumeSpecularDominant(float3 albedo, float smoothness, float metallic, float3 worldNormal, float3 viewDir, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + float3 specularf0 = lerp(0.04f, albedo, metallic); + return LightVolumeSpecularDominant(specularf0, smoothness, worldNormal, viewDir, L0, L1r, L1g, L1b); + } + float3 LightVolumeEvaluate(float3 worldNormal, float3 L0, float3 L1r, float3 L1g, float3 L1b) { + return float3(LV_EvaluateSH(L0.r, L1r, worldNormal), LV_EvaluateSH(L0.g, L1g, worldNormal), LV_EvaluateSH(L0.b, L1b, worldNormal)); + } + void LightVolumeSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled == 0) { + LV_SampleLightProbeDering(L0, L1r, L1g, L1b); + } else { + float4 occlusion = 1; + LV_LightVolumeSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + void LightVolumeAdditiveSH(float3 worldPos, out float3 L0, out float3 L1r, out float3 L1g, out float3 L1b, float3 worldPosOffset = 0) { + L0 = 0; L1r = 0; L1g = 0; L1b = 0; + if (_UdonLightVolumeEnabled != 0) { + float4 occlusion = 1; + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, L1r, L1g, L1b, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, L1r, L1g, L1b); + } + } + float3 LightVolumeSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w); + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float3 LightVolumeAdditiveSH_L0(float3 worldPos, float3 worldPosOffset = 0) { + if (_UdonLightVolumeEnabled == 0) { + return 0; + } else { + float3 L0 = 0; float4 occlusion = 1; + float3 unused_L1; // Let's just pray that compiler will strip everything x.x + LV_LightVolumeAdditiveSH(worldPos + worldPosOffset, L0, unused_L1, unused_L1, unused_L1, occlusion); + LV_PointLightVolumeSH(worldPos, occlusion, L0, unused_L1, unused_L1, unused_L1); + return L0; + } + } + float LightVolumesEnabled() { + return _UdonLightVolumeEnabled; + } + float LightVolumesVersion() { + return _UdonLightVolumeVersion == 0 ? _UdonLightVolumeEnabled : _UdonLightVolumeVersion; + } + #endif + SamplerState sampler_linear_clamp; + SamplerState sampler_linear_repeat; + SamplerState sampler_trilinear_clamp; + SamplerState sampler_trilinear_repeat; + SamplerState sampler_point_clamp; + SamplerState sampler_point_repeat; + #define DielectricSpec float4(0.04, 0.04, 0.04, 1.0 - 0.04) + #define HALF_PI float(1.5707964) + #define PI float(3.14159265359) + #define TWO_PI float(6.28318530718) + #define PI_OVER_2 1.5707963f + #define PI_OVER_4 0.785398f + #define EPSILON 0.000001f + #define POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, samplertex, coord, dx, dy) tex.SampleGrad(sampler##samplertex, coord, dx, dy) + #define POI2D_SAMPLE_TEX2D_SAMPLERGRADD(tex, samp, uv, pan, dx, dy) tex.SampleGrad(samp, POI_PAN_UV(uv, pan), dx, dy) + #define POI_PAN_UV(uv, pan) (uv + _Time.x * pan) + #define POI2D_SAMPLER_PAN(tex, texSampler, uv, pan) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, POI_PAN_UV(uv, pan))) + #define POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, POI_PAN_UV(uv, pan), dx, dy)) + #define POI2D_SAMPLER(tex, texSampler, uv) (UNITY_SAMPLE_TEX2D_SAMPLER(tex, texSampler, uv)) + #define POI_SAMPLE_1D_X(tex, samp, uv) tex.Sample(samp, float2(uv, 0.5)) + #define POI2D_SAMPLER_GRAD(tex, texSampler, uv, dx, dy) (POI2D_SAMPLE_TEX2D_SAMPLERGRAD(tex, texSampler, uv, dx, dy)) + #define POI2D_SAMPLER_GRADD(tex, texSampler, uv, dx, dy) tex.SampleGrad(texSampler, uv, dx, dy) + #define POI2D_PAN(tex, uv, pan) (tex2D(tex, POI_PAN_UV(uv, pan))) + #define POI2D(tex, uv) (tex2D(tex, uv)) + #define POI_SAMPLE_TEX2D(tex, uv) (UNITY_SAMPLE_TEX2D(tex, uv)) + #define POI_SAMPLE_TEX2D_PAN(tex, uv, pan) (UNITY_SAMPLE_TEX2D(tex, POI_PAN_UV(uv, pan))) + #define POI_SAMPLE_CUBE_LOD(tex, sampler, coord, lod) tex.SampleLevel(sampler, coord, lod) + #if defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED) + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, float3(uv, unity_StereoEyeIndex)) + #else + #define POI_SAMPLE_SCREEN(tex, samp, uv) tex.Sample(samp, uv) + #endif + #define POI_SAFE_RGB0 float4(mainTexture.rgb * .0001, 0) + #define POI_SAFE_RGB1 float4(mainTexture.rgb * .0001, 1) + #define POI_SAFE_RGBA mainTexture + #if defined(UNITY_COMPILER_HLSL) + #define PoiInitStruct(type, name) name = (type)0; + #else + #define PoiInitStruct(type, name) + #endif + #define POI_ERROR(poiMesh, gridSize) lerp(float3(1, 0, 1), float3(0, 0, 0), fmod(floor((poiMesh.worldPos.x) * gridSize) + floor((poiMesh.worldPos.y) * gridSize) + floor((poiMesh.worldPos.z) * gridSize), 2) == 0) + #define POI_NAN (asfloat(-1)) + #define POI_MODE_OPAQUE 0 + #define POI_MODE_CUTOUT 1 + #define POI_MODE_FADE 2 + #define POI_MODE_TRANSPARENT 3 + #define POI_MODE_ADDITIVE 4 + #define POI_MODE_SOFTADDITIVE 5 + #define POI_MODE_MULTIPLICATIVE 6 + #define POI_MODE_2XMULTIPLICATIVE 7 + #define POI_MODE_TRANSCLIPPING 9 + #ifndef UNITY_SPECCUBE_LOD_STEPS + #define UNITY_SPECCUBE_LOD_STEPS (6) + #endif + #ifndef UNITY_LIGHTING_COMMON_INCLUDED + #define UNITY_LIGHTING_COMMON_INCLUDED + fixed4 _LightColor0; + fixed4 _SpecColor; + struct UnityLight + { + half3 color; + half3 dir; + half ndotl; + }; + struct UnityIndirect + { + half3 diffuse; + half3 specular; + }; + struct UnityGI + { + UnityLight light; + UnityIndirect indirect; + }; + struct UnityGIInput + { + UnityLight light; + float3 worldPos; + half3 worldViewDir; + half atten; + half3 ambient; + #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) || defined(UNITY_ENABLE_REFLECTION_BUFFERS) + float4 boxMin[2]; + #endif + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + float4 boxMax[2]; + float4 probePosition[2]; + #endif + float4 probeHDR[2]; + }; + #endif + float _GrabMode; + float _Mode; + struct Unity_GlossyEnvironmentData + { + half roughness; + half3 reflUVW; + }; + #ifndef _STOCHASTICMODE_NONE + #ifdef _STOCHASTICMODE_DELIOT_HEITZ + float _StochasticDeliotHeitzDensity; + #endif + #endif + float4 _Color; + float _ColorThemeIndex; + UNITY_DECLARE_TEX2D(_MainTex); + #ifdef UNITY_STEREO_INSTANCING_ENABLED + #define STEREO_UV(uv) float3(uv, unity_StereoEyeIndex) + Texture2DArray _CameraDepthTexture; + #else + #define STEREO_UV(uv) uv + Texture2D _CameraDepthTexture; + #endif + float SampleScreenDepth(float2 uv) + { + uv.y = _ProjectionParams.x * 0.5 + 0.5 - uv.y * _ProjectionParams.x; + return _CameraDepthTexture.SampleLevel(sampler_point_clamp, STEREO_UV(uv), 0); + } + bool DepthTextureExists() + { + #ifdef UNITY_STEREO_INSTANCING_ENABLED + float3 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y, dTexDim.z); + #else + float2 dTexDim; + _CameraDepthTexture.GetDimensions(dTexDim.x, dTexDim.y); + #endif + return dTexDim.x > 16; + } + float _MainPixelMode; + float4 _MainTex_ST; + float2 _MainTexPan; + float _MainTexUV; + float4 _MainTex_TexelSize; + float _MainTexStochastic; + float _MainIgnoreTexAlpha; + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + Texture2D _BumpMap; + #endif + float4 _BumpMap_ST; + float2 _BumpMapPan; + float _BumpMapUV; + float _BumpScale; + float _BumpMapStochastic; + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + Texture2D _AlphaMask; + #endif + float4 _AlphaMask_ST; + float2 _AlphaMaskPan; + float _AlphaMaskUV; + float _AlphaMaskInvert; + float _MainAlphaMaskMode; + float _AlphaMaskBlendStrength; + float _AlphaMaskValue; + float _Cutoff; + float _AlphaForceOpaque; + float _AlphaMod; + float _AlphaPremultiply; + float _AlphaBoostFA; + float _AlphaGlobalMask; + float _AlphaGlobalMaskBlendType; + float _IgnoreFog; + float _RenderingReduceClipDistance; + int _FlipBackfaceNormals; + float _AddBlendOp; + float _Cull; + float _GIEmissionMultiplier; + float4 _GlobalThemeColor0; + float4 _GlobalThemeColor1; + float4 _GlobalThemeColor2; + float4 _GlobalThemeColor3; + float _GlobalThemeHue0; + float _GlobalThemeHue1; + float _GlobalThemeHue2; + float _GlobalThemeHue3; + float _GlobalThemeHueSpeed0; + float _GlobalThemeHueSpeed1; + float _GlobalThemeHueSpeed2; + float _GlobalThemeHueSpeed3; + float _GlobalThemeSaturation0; + float _GlobalThemeSaturation1; + float _GlobalThemeSaturation2; + float _GlobalThemeSaturation3; + float _GlobalThemeValue0; + float _GlobalThemeValue1; + float _GlobalThemeValue2; + float _GlobalThemeValue3; + int _GlobalMaskVertexColorLinearSpace; + float _StereoEnabled; + float _PolarUV; + float2 _PolarCenter; + float _PolarRadialScale; + float _PolarLengthScale; + float _PolarSpiralPower; + float _PanoUseBothEyes; + float _UVModWorldPos0; + float _UVModWorldPos1; + float _UVModLocalPos0; + float _UVModLocalPos1; + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 color : COLOR; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + #ifndef POI_TESSELLATED + uint vertexId : SV_VertexID; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct VertexOut + { + float4 pos : SV_POSITION; + float4 uv[2] : TEXCOORD0; + float3 normal : TEXCOORD2; + float4 tangent : TEXCOORD3; + float4 worldPos : TEXCOORD4; + float4 localPos : TEXCOORD5; + float4 vertexColor : TEXCOORD6; + float4 lightmapUV : TEXCOORD7; + float worldDir : TEXCOORD8; + float2 fogData: TEXCOORD10; + UNITY_SHADOW_COORDS(12) + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + struct PoiMesh + { + float3 normals[2]; + float3 objNormal; + float3 tangentSpaceNormal; + float3 binormal[2]; + float3 tangent[2]; + float3 worldPos; + float3 localPos; + float3 objectPosition; + float isFrontFace; + float4 vertexColor; + float4 lightmapUV; + float2 uv[10]; + float2 parallaxUV; + float2 dx; + float2 dy; + uint isRightHand; + }; + struct PoiCam + { + float3 viewDir; + float3 forwardDir; + float3 worldPos; + float distanceToVert; + float4 clipPos; + float4 screenSpacePosition; + float3 reflectionDir; + float3 vertexReflectionDir; + float3 tangentViewDir; + float4 posScreenSpace; + float2 posScreenPixels; + float2 screenUV; + float vDotN; + float4 worldDirection; + }; + struct PoiMods + { + float4 Mask; + float audioLink[5]; + float audioLinkAvailable; + float audioLinkVersion; + float4 audioLinkTexture; + float2 detailMask; + float2 backFaceDetailIntensity; + float globalEmission; + float4 globalColorTheme[12]; + float globalMask[16]; + float ALTime[8]; + }; + struct PoiLight + { + float3 direction; + float nDotVCentered; + float attenuation; + float attenuationStrength; + float3 directColor; + float3 indirectColor; + float occlusion; + float shadowMask; + float detailShadow; + float3 halfDir; + float lightMap; + float lightMapNoAttenuation; + float3 rampedLightMap; + float vertexNDotL; + float nDotL; + float nDotV; + float vertexNDotV; + float nDotH; + float vertexNDotH; + float lDotv; + float lDotH; + float nDotLSaturated; + float nDotLNormalized; + #ifdef POI_PASS_ADD + float additiveShadow; + #endif + float3 finalLighting; + float3 finalLightAdd; + float3 LTCGISpecular; + float3 LTCGIDiffuse; + float directLuminance; + float indirectLuminance; + float finalLuminance; + #if defined(VERTEXLIGHT_ON) + float4 vDotNL; + float4 vertexVDotNL; + float3 vColor[4]; + float4 vCorrectedDotNL; + float4 vAttenuation; + float4 vSaturatedDotNL; + float3 vPosition[4]; + float3 vDirection[4]; + float3 vFinalLighting; + float3 vHalfDir[4]; + half4 vDotNH; + half4 vertexVDotNH; + half4 vDotLH; + #endif + }; + struct PoiVertexLights + { + float3 direction; + float3 color; + float attenuation; + }; + struct PoiFragData + { + float smoothness; + float smoothness2; + float metallic; + float specularMask; + float reflectionMask; + float3 baseColor; + float3 finalColor; + float alpha; + float3 emission; + float toggleVertexLights; + }; + float4 poiTransformClipSpacetoScreenSpaceFrag(float4 clipPos) + { + float4 positionSS = float4(clipPos.xyz * clipPos.w, clipPos.w); + positionSS.xy = positionSS.xy / _ScreenParams.xy; + return positionSS; + } + static float4 PoiSHAr = 0; + static float4 PoiSHAg = 0; + static float4 PoiSHAb = 0; + static float4 PoiSHBr = 0; + static float4 PoiSHBg = 0; + static float4 PoiSHBb = 0; + static float4 PoiSHC = 0; + half3 PoiSHEval_L0L1(half4 normal) + { + half3 x; + x.r = dot(PoiSHAr, normal); + x.g = dot(PoiSHAg, normal); + x.b = dot(PoiSHAb, normal); + return x; + } + half3 PoiSHEval_L2(half4 normal) + { + half3 x1, x2; + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(PoiSHBr, vB); + x1.g = dot(PoiSHBg, vB); + x1.b = dot(PoiSHBb, vB); + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = PoiSHC.rgb * vC; + return x1 + x2; + } + half3 PoiShadeSH9 (half4 normal) + { + half3 res = PoiSHEval_L0L1(normal); + res += PoiSHEval_L2(normal); + #ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + #endif + return res; + } + inline half4 Pow5(half4 x) + { + return x * x * x * x * x; + } + inline half3 FresnelLerp(half3 F0, half3 F90, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return lerp(F0, F90, t); + } + inline half3 FresnelTerm(half3 F0, half cosA) + { + half t = Pow5(1 - cosA); // ala Schlick interpoliation + return F0 + (1 - F0) * t; + } + half perceptualRoughnessToMipmapLevel(half perceptualRoughness) + { + return perceptualRoughness * UNITY_SPECCUBE_LOD_STEPS; + } + half3 Unity_GlossyEnvironment(UNITY_ARGS_TEXCUBE(tex), half4 hdr, Unity_GlossyEnvironmentData glossIn) + { + half perceptualRoughness = glossIn.roughness /* perceptualRoughness */ ; + #if 0 + float m = PerceptualRoughnessToRoughness(perceptualRoughness); // m is the real roughness parameter + const float fEps = 1.192092896e-07F; // smallest such that 1.0+FLT_EPSILON != 1.0 (+1e-4h is NOT good here. is visibly very wrong) + float n = (2.0 / max(fEps, m * m)) - 2.0; // remap to spec power. See eq. 21 in --> https://dl.dropboxusercontent.com/u/55891920/papers/mm_brdf.pdf + n /= 4; // remap from n_dot_h formulatino to n_dot_r. See section "Pre-convolved Cube Maps vs Path Tracers" --> https://s3.amazonaws.com/docs.knaldtech.com/knald/1.0.0/lys_power_drops.html + perceptualRoughness = pow(2 / (n + 2), 0.25); // remap back to square root of real roughness (0.25 include both the sqrt root of the conversion and sqrt for going from roughness to perceptualRoughness) + #else + perceptualRoughness = perceptualRoughness * (1.7 - 0.7 * perceptualRoughness); + #endif + half mip = perceptualRoughnessToMipmapLevel(perceptualRoughness); + half3 R = glossIn.reflUVW; + half4 rgbm = UNITY_SAMPLE_TEXCUBE_LOD(tex, R, mip); + return DecodeHDR(rgbm, hdr); + } + half3 UnpackScaleNormalDXT5nm(half4 packednormal, half bumpScale) + { + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 LerpWhiteTo(half3 b, half t) + { + half oneMinusT = 1 - t; + return half3(oneMinusT, oneMinusT, oneMinusT) + b * t; + } + inline float GGXTerm(float NdotH, float roughness) + { + float a2 = roughness * roughness; + float d = (NdotH * a2 - NdotH) * NdotH + 1.0f; // 2 mad + return UNITY_INV_PI * a2 / (d * d + 1e-7f); // This function is not intended to be running on Mobile, + } + Unity_GlossyEnvironmentData UnityGlossyEnvironmentSetup(half Smoothness, half3 worldViewDir, half3 Normal, half3 fresnel0) + { + Unity_GlossyEnvironmentData g; + g.roughness /* perceptualRoughness */ = 1 - Smoothness; + g.reflUVW = reflect(-worldViewDir, Normal); + return g; + } + half3 UnpackScaleNormalRGorAG(half4 packednormal, half bumpScale) + { + #if defined(UNITY_NO_DXT5nm) + half3 normal = packednormal.xyz * 2 - 1; + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + return normal; + #elif defined(UNITY_ASTC_NORMALMAP_ENCODING) + half3 normal; + normal.xy = (packednormal.wy * 2 - 1); + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + normal.xy *= bumpScale; + return normal; + #else + packednormal.x *= packednormal.w; + half3 normal; + normal.xy = (packednormal.xy * 2 - 1); + #if (SHADER_TARGET >= 30) + normal.xy *= bumpScale; + #endif + normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy))); + return normal; + #endif + } + half3 UnpackScaleNormal(half4 packednormal, half bumpScale) + { + return UnpackScaleNormalRGorAG(packednormal, bumpScale); + } + half3 BlendNormals(half3 n1, half3 n2) + { + return normalize(half3(n1.xy + n2.xy, n1.z * n2.z)); + } + inline float2 Pow4(float2 x) + { + return x * x * x * x; + } + inline float3 Unity_SafeNormalize(float3 inVec) + { + float dp3 = max(0.001f, dot(inVec, inVec)); + return inVec * rsqrt(dp3); + } + inline float3 BoxProjectedCubemapDirection(float3 worldRefl, float3 worldPos, float4 cubemapCenter, float4 boxMin, float4 boxMax) + { + + if (cubemapCenter.w > 0.0) + { + float3 nrdir = normalize(worldRefl); + #if 1 + float3 rbmax = (boxMax.xyz - worldPos) / nrdir; + float3 rbmin = (boxMin.xyz - worldPos) / nrdir; + float3 rbminmax = (nrdir > 0.0f) ? rbmax : rbmin; + #else // Optimized version + float3 rbmax = (boxMax.xyz - worldPos); + float3 rbmin = (boxMin.xyz - worldPos); + float3 select = step(float3(0, 0, 0), nrdir); + float3 rbminmax = lerp(rbmax, rbmin, select); + rbminmax /= nrdir; + #endif + float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z); + worldPos -= cubemapCenter.xyz; + worldRefl = worldPos + nrdir * fa; + } + return worldRefl; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, Unity_GlossyEnvironmentData glossIn) + { + half3 specular; + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + half3 originalReflUVW = glossIn.reflUVW; + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[0], data.boxMin[0], data.boxMax[0]); + #endif + #ifdef _GLOSSYREFLECTIONS_OFF + specular = unity_IndirectSpecColor.rgb; + #else + half3 env0 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE(unity_SpecCube0), data.probeHDR[0], glossIn); + #ifdef UNITY_SPECCUBE_BLENDING + const float kBlendFactor = 0.99999; + float blendLerp = data.boxMin[0].w; + + if (blendLerp < kBlendFactor) + { + #ifdef UNITY_SPECCUBE_BOX_PROJECTION + glossIn.reflUVW = BoxProjectedCubemapDirection(originalReflUVW, data.worldPos, data.probePosition[1], data.boxMin[1], data.boxMax[1]); + #endif + half3 env1 = Unity_GlossyEnvironment(UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1, unity_SpecCube0), data.probeHDR[1], glossIn); + specular = lerp(env1, env0, blendLerp); + } + else + { + specular = env0; + } + #else + specular = env0; + #endif + #endif + return specular * occlusion; + } + inline half3 UnityGI_IndirectSpecular(UnityGIInput data, half occlusion, half3 normalWorld, Unity_GlossyEnvironmentData glossIn) + { + return UnityGI_IndirectSpecular(data, occlusion, glossIn); + } + #ifndef glsl_mod + #define glsl_mod(x, y) (((x) - (y) * floor((x) / (y)))) + #endif + uniform float random_uniform_float_only_used_to_stop_compiler_warnings = 0.0f; + float2 poiUV(float2 uv, float4 tex_st) + { + return uv * tex_st.xy + tex_st.zw; + } + float2 vertexUV(in VertexOut o, int index) + { + switch(index) + { + case 0: + return o.uv[0].xy; + case 1: + return o.uv[0].zw; + case 2: + return o.uv[1].xy; + case 3: + return o.uv[1].zw; + default: + return o.uv[0].xy; + } + } + float2 vertexUV(in appdata v, int index) + { + switch(index) + { + case 0: + return v.uv0.xy; + case 1: + return v.uv1.xy; + case 2: + return v.uv2.xy; + case 3: + return v.uv3.xy; + default: + return v.uv0.xy; + } + } + float calculateluminance(float3 color) + { + return color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + } + float dotToDegrees(float dot) + { + dot = clamp(dot, -1.0, 1.0); + return degrees(acos(dot)); + } + float dotToDegrees(float3 a, float3 b) + { + return dotToDegrees(dot(normalize(a), normalize(b))); + } + float _VRChatCameraMode; + float _VRChatMirrorMode; + float VRCCameraMode() + { + return _VRChatCameraMode; + } + float VRCMirrorMode() + { + return _VRChatMirrorMode; + } + bool IsInMirror() + { + return unity_CameraProjection[2][0] != 0.f || unity_CameraProjection[2][1] != 0.f; + } + bool IsOrthographicCamera() + { + return unity_OrthoParams.w == 1 || UNITY_MATRIX_P[3][3] == 1; + } + float shEvaluateDiffuseL1Geomerics_local(float L0, float3 L1, float3 n) + { + float R0 = max(0, L0); + float3 R1 = 0.5f * L1; + float lenR1 = length(R1); + float q = dot(normalize(R1), n) * 0.5 + 0.5; + q = saturate(q); // Thanks to ScruffyRuffles for the bug identity. + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + return R0 * (a + (1.0f - a) * (p + 1.0f) * pow(q, p)); + } + half3 BetterSH9(half4 normal) + { + float3 indirect; + float3 L0 = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w) + float3(PoiSHBr.z, PoiSHBg.z, PoiSHBb.z) / 3.0; + indirect.r = shEvaluateDiffuseL1Geomerics_local(L0.r, PoiSHAr.xyz, normal.xyz); + indirect.g = shEvaluateDiffuseL1Geomerics_local(L0.g, PoiSHAg.xyz, normal.xyz); + indirect.b = shEvaluateDiffuseL1Geomerics_local(L0.b, PoiSHAb.xyz, normal.xyz); + indirect = max(0, indirect); + indirect += SHEvalLinearL2(normal); + return indirect; + } + float3 getCameraForward() + { + #if UNITY_SINGLE_PASS_STEREO + float3 p1 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 1, 1)); + float3 p2 = mul(unity_StereoCameraToWorld[0], float4(0, 0, 0, 1)); + #else + float3 p1 = mul(unity_CameraToWorld, float4(0, 0, 1, 1)).xyz; + float3 p2 = mul(unity_CameraToWorld, float4(0, 0, 0, 1)).xyz; + #endif + return normalize(p2 - p1); + } + half3 GetSHLength() + { + half3 x, x1; + x.r = length(PoiSHAr); + x.g = length(PoiSHAg); + x.b = length(PoiSHAb); + x1.r = length(PoiSHBr); + x1.g = length(PoiSHBg); + x1.b = length(PoiSHBb); + return x + x1; + } + float3 BoxProjection(float3 direction, float3 position, float4 cubemapPosition, float3 boxMin, float3 boxMax) + { + #if UNITY_SPECCUBE_BOX_PROJECTION + if (cubemapPosition.w > 0) + { + float3 factors = ((direction > 0 ? boxMax : boxMin) - position) / direction; + float scalar = min(min(factors.x, factors.y), factors.z); + direction = direction * scalar + (position - cubemapPosition.xyz); + } + #endif + return direction; + } + float poiMax(float2 i) + { + return max(i.x, i.y); + } + float poiMax(float3 i) + { + return max(max(i.x, i.y), i.z); + } + float poiMax(float4 i) + { + return max(max(max(i.x, i.y), i.z), i.w); + } + float3 calculateNormal(in float3 baseNormal, in PoiMesh poiMesh, in Texture2D normalTexture, in float4 normal_ST, in float2 normalPan, in float normalUV, in float normalIntensity) + { + float3 normal = UnpackScaleNormal(POI2D_SAMPLER_PAN(normalTexture, _MainTex, poiUV(poiMesh.uv[normalUV], normal_ST), normalPan), normalIntensity); + return normalize( + normal.x * poiMesh.tangent[0] + + normal.y * poiMesh.binormal[0] + + normal.z * baseNormal + ); + } + float remap(float x, float minOld, float maxOld, float minNew = 0, float maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float2 remap(float2 x, float2 minOld, float2 maxOld, float2 minNew = 0, float2 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float3 remap(float3 x, float3 minOld, float3 maxOld, float3 minNew = 0, float3 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float4 remap(float4 x, float4 minOld, float4 maxOld, float4 minNew = 0, float4 maxNew = 1) + { + return minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld); + } + float remapClamped(float minOld, float maxOld, float x, float minNew = 0, float maxNew = 1) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 remapClamped(float2 minOld, float2 maxOld, float2 x, float2 minNew, float2 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float3 remapClamped(float3 minOld, float3 maxOld, float3 x, float3 minNew, float3 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float4 remapClamped(float4 minOld, float4 maxOld, float4 x, float4 minNew, float4 maxNew) + { + return clamp(minNew + (x - minOld) * (maxNew - minNew) / (maxOld - minOld), minNew, maxNew); + } + float2 calcParallax(in float height, in PoiCam poiCam) + { + return ((height * - 1) + 1) * (poiCam.tangentViewDir.xy / poiCam.tangentViewDir.z); + } + float4 poiBlend(const float sourceFactor, const float4 sourceColor, const float destinationFactor, const float4 destinationColor, const float4 blendFactor) + { + float4 sA = 1 - blendFactor; + const float4 blendData[11] = { + float4(0.0, 0.0, 0.0, 0.0), + float4(1.0, 1.0, 1.0, 1.0), + destinationColor, + sourceColor, + float4(1.0, 1.0, 1.0, 1.0) - destinationColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sourceColor, + sA, + float4(1.0, 1.0, 1.0, 1.0) - sA, + saturate(sourceColor.aaaa), + 1 - sA, + }; + return lerp(blendData[sourceFactor] * sourceColor + blendData[destinationFactor] * destinationColor, sourceColor, sA); + } + float blendColorBurn(float base, float blend) + { + return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) * rcp(random_uniform_float_only_used_to_stop_compiler_warnings + blend))), 0.0); + } + float3 blendColorBurn(float3 base, float3 blend) + { + return float3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b)); + } + float blendColorDodge(float base, float blend) + { + return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0); + } + float3 blendColorDodge(float3 base, float3 blend) + { + return float3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b)); + } + float blendDarken(float base, float blend) + { + return min(blend, base); + } + float3 blendDarken(float3 base, float3 blend) + { + return float3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b)); + } + float blendOverlay(float base, float blend) + { + return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)); + } + float3 blendOverlay(float3 base, float3 blend) + { + return float3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b)); + } + float blendLighten(float base, float blend) + { + return max(blend, base); + } + float3 blendLighten(float3 base, float3 blend) + { + return float3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b)); + } + float blendLinearDodge(float base, float blend) + { + return min(base + blend, 1.0); + } + float3 blendLinearDodge(float3 base, float3 blend) + { + return base + blend; + } + float blendMultiply(float base, float blend) + { + return base * blend; + } + float3 blendMultiply(float3 base, float3 blend) + { + return base * blend; + } + float blendNormal(float base, float blend) + { + return blend; + } + float3 blendNormal(float3 base, float3 blend) + { + return blend; + } + float blendScreen(float base, float blend) + { + return 1.0 - ((1.0 - base) * (1.0 - blend)); + } + float3 blendScreen(float3 base, float3 blend) + { + return float3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b)); + } + float blendSubtract(float base, float blend) + { + return max(base - blend, 0.0); + } + float3 blendSubtract(float3 base, float3 blend) + { + return max(base - blend, 0.0); + } + float blendMixed(float base, float blend) + { + return base + base * blend; + } + float3 blendMixed(float3 base, float3 blend) + { + return base + base * blend; + } + float3 customBlend(float3 base, float3 blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 1: output = lerp(base, blendDarken(base, blend), alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + float3 customBlend(float base, float blend, float blendType, float alpha = 1) + { + float3 output = base; + switch(blendType) + { + case 0: output = lerp(base, blend, alpha); break; + case 2: output = base * lerp(1, blend, alpha); break; + case 5: output = lerp(base, blendLighten(base, blend), alpha); break; + case 6: output = lerp(base, blendScreen(base, blend), alpha); break; + case 7: output = blendSubtract(base, blend * alpha); break; + case 8: output = lerp(base, blendLinearDodge(base, blend), alpha); break; + case 9: output = lerp(base, blendOverlay(base, blend), alpha); break; + case 20: output = lerp(base, blendMixed(base, blend), alpha); break; + default: output = 0; break; + } + return output; + } + #define REPLACE 0 + #define SUBSTRACT 1 + #define MULTIPLY 2 + #define DIVIDE 3 + #define MIN 4 + #define MAX 5 + #define AVERAGE 6 + #define ADD 7 + float maskBlend(float baseMask, float blendMask, float blendType) + { + float output = 0; + switch(blendType) + { + case REPLACE: output = blendMask; break; + case SUBSTRACT: output = baseMask - blendMask; break; + case MULTIPLY: output = baseMask * blendMask; break; + case DIVIDE: output = baseMask / blendMask; break; + case MIN: output = min(baseMask, blendMask); break; + case MAX: output = max(baseMask, blendMask); break; + case AVERAGE: output = (baseMask + blendMask) * 0.5; break; + case ADD: output = baseMask + blendMask; break; + } + return saturate(output); + } + float globalMaskBlend(float baseMask, float globalMaskIndex, float blendType, PoiMods poiMods) + { + if (globalMaskIndex == 0) + { + return baseMask; + } + else + { + return maskBlend(baseMask, poiMods.globalMask[globalMaskIndex - 1], blendType); + } + } + inline float poiRand(float2 co) + { + float3 p3 = frac(float3(co.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.x + p3.y) * p3.z); + } + inline float4 poiRand4(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + float2 a = frac((p3.xx + p3.yz) * p3.zy); + float2 s2 = seed + 37.0; + float3 q3 = frac(float3(s2.xyx) * 0.1031); + q3 += dot(q3, q3.yzx + 33.33); + float2 b = frac((q3.xx + q3.yz) * q3.zy); + return float4(a, b); + } + inline float2 poiRand2(float seed) + { + float2 x = float2(seed, seed * 1.3); + float3 p3 = frac(float3(x.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float2 poiRand2(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx + p3.yz) * p3.zy); + } + inline float poiRand3(float seed) + { + float p = frac(seed * 0.1031); + p *= p + 33.33; + p *= p + p; + return frac(p); + } + inline float3 poiRand3(float2 seed) + { + float3 p3 = frac(float3(seed.xyx) * 0.1031); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3(float3 seed) + { + float3 p3 = frac(seed * 0.1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.xxy + p3.yzz) * p3.zyx); + } + inline float3 poiRand3Range(float2 Seed, float Range) + { + float3 r = poiRand3(Seed); + return (r * 2.0 - 1.0) * Range; + } + float3 randomFloat3WiggleRange(float2 Seed, float Range, float wiggleSpeed, float timeOffset) + { + float3 rando = (float3( + frac(sin(dot(Seed.xy, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(Seed.yx, float2(12.9898, 78.233))) * 43758.5453), + frac(sin(dot(float2(Seed.x * Seed.y, Seed.y + Seed.x), float2(12.9898, 78.233))) * 43758.5453) + ) * 2 - 1); + float speed = 1 + wiggleSpeed; + return float3(sin(((_Time.x + timeOffset) + rando.x * PI) * speed), sin(((_Time.x + timeOffset) + rando.y * PI) * speed), sin(((_Time.x + timeOffset) + rando.z * PI) * speed)) * Range; + } + static const float3 HCYwts = float3(0.299, 0.587, 0.114); + static const float HCLgamma = 3; + static const float HCLy0 = 100; + static const float HCLmaxL = 0.530454533953517; // == exp(HCLgamma / HCLy0) - 0.5 + static const float3 wref = float3(1.0, 1.0, 1.0); + #define TAU 6.28318531 + float3 HUEtoRGB(in float H) + { + float R = abs(H * 6 - 3) - 1; + float G = 2 - abs(H * 6 - 2); + float B = 2 - abs(H * 6 - 4); + return saturate(float3(R, G, B)); + } + float3 RGBtoHCV(in float3 RGB) + { + float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0 / 3.0) : float4(RGB.gb, 0.0, -1.0 / 3.0); + float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx); + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6 * C + EPSILON) + Q.z); + return float3(H, C, Q.x); + } + float3 RGBtoHSV(float3 c) + { + float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); + float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float3 HSVtoRGB(float3 c) + { + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } + void DecomposeHDRColor(in float3 linearColorHDR, out float3 baseLinearColor, out float exposure) + { + float maxColorComponent = max(linearColorHDR.r, max(linearColorHDR.g, linearColorHDR.b)); + bool isSDR = maxColorComponent <= 1.0; + float scaleFactor = isSDR ? 1.0 : (1.0 / maxColorComponent); + exposure = isSDR ? 0.0 : log(maxColorComponent) * 1.44269504089; // ln(2) + baseLinearColor = scaleFactor * linearColorHDR; + } + float3 ApplyHDRExposure(float3 linearColor, float exposure) + { + return linearColor * pow(2, exposure); + } + float3 ModifyViaHSV(float3 color, float h, float s, float v) + { + float3 colorHSV = RGBtoHSV(color); + colorHSV.x = frac(colorHSV.x + h); + colorHSV.y = saturate(colorHSV.y + s); + colorHSV.z = saturate(colorHSV.z + v); + return HSVtoRGB(colorHSV); + } + float3 ModifyViaHSV(float3 color, float3 HSVMod) + { + return ModifyViaHSV(color, HSVMod.x, HSVMod.y, HSVMod.z); + } + float4x4 brightnessMatrix(float brightness) + { + return float4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + brightness, brightness, brightness, 1 + ); + } + float4x4 contrastMatrix(float contrast) + { + float t = (1.0 - contrast) / 2.0; + return float4x4( + contrast, 0, 0, 0, + 0, contrast, 0, 0, + 0, 0, contrast, 0, + t, t, t, 1 + ); + } + float4x4 saturationMatrix(float saturation) + { + float3 luminance = float3(0.3086, 0.6094, 0.0820); + float oneMinusSat = 1.0 - saturation; + float3 red = luminance.x * oneMinusSat; + red += float3(saturation, 0, 0); + float3 green = luminance.y * oneMinusSat; + green += float3(0, saturation, 0); + float3 blue = luminance.z * oneMinusSat; + blue += float3(0, 0, saturation); + return float4x4( + red, 0, + green, 0, + blue, 0, + 0, 0, 0, 1 + ); + } + float4 PoiColorBCS(float4 color, float brightness, float contrast, float saturation) + { + return mul(color, mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))); + } + float3 PoiColorBCS(float3 color, float brightness, float contrast, float saturation) + { + return mul(float4(color, 1), mul(brightnessMatrix(brightness), mul(contrastMatrix(contrast), saturationMatrix(saturation)))).rgb; + } + float3 linear_srgb_to_oklab(float3 c) + { + float l = 0.4122214708 * c.x + 0.5363325363 * c.y + 0.0514459929 * c.z; + float m = 0.2119034982 * c.x + 0.6806995451 * c.y + 0.1073969566 * c.z; + float s = 0.0883024619 * c.x + 0.2817188376 * c.y + 0.6299787005 * c.z; + float l_ = pow(l, 1.0 / 3.0); + float m_ = pow(m, 1.0 / 3.0); + float s_ = pow(s, 1.0 / 3.0); + return float3( + 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_, + 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_, + 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_ + ); + } + float3 oklab_to_linear_srgb(float3 c) + { + float l_ = c.x + 0.3963377774 * c.y + 0.2158037573 * c.z; + float m_ = c.x - 0.1055613458 * c.y - 0.0638541728 * c.z; + float s_ = c.x - 0.0894841775 * c.y - 1.2914855480 * c.z; + float l = l_ * l_ * l_; + float m = m_ * m_ * m_; + float s = s_ * s_ * s_; + return float3( + + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + - 1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + - 0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s + ); + } + float3 hueShiftOKLab(float3 color, float shift, float selectOrShift) + { + float3 oklab = linear_srgb_to_oklab(color); + float chroma = length(oklab.yz); + if (chroma < 1e-5) + { + return color; + } + float hue = atan2(oklab.z, oklab.y); + hue = shift * TWO_PI + hue * selectOrShift; // Add the hue shift + oklab.y = cos(hue) * chroma; + oklab.z = sin(hue) * chroma; + return oklab_to_linear_srgb(oklab); + } + float3 hueShiftHSV(float3 color, float hueOffset, float selectOrShift) + { + float3 hsvCol = RGBtoHSV(color); + hsvCol.x = hsvCol.x * selectOrShift + hueOffset; + return HSVtoRGB(hsvCol); + } + float3 hueShift(float3 color, float shift, float ColorSpace, float selectOrShift) + { + switch(ColorSpace) + { + case 0.0: + return hueShiftOKLab(color, shift, selectOrShift); + case 1.0: + return hueShiftHSV(color, shift, selectOrShift); + default: + return float3(1.0, 0.0, 0.0); + } + } + float4 hueShift(float4 color, float shift, float ColorSpace, float selectOrShift) + { + return float4(hueShift(color.rgb, shift, ColorSpace, selectOrShift), color.a); + } + float4x4 poiRotationMatrixFromAngles(float x, float y, float z) + { + float angleX = radians(x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float4x4 poiRotationMatrixFromAngles(float3 angles) + { + float angleX = radians(angles.x); + float c = cos(angleX); + float s = sin(angleX); + float4x4 rotateXMatrix = float4x4(1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1); + float angleY = radians(angles.y); + c = cos(angleY); + s = sin(angleY); + float4x4 rotateYMatrix = float4x4(c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1); + float angleZ = radians(angles.z); + c = cos(angleZ); + s = sin(angleZ); + float4x4 rotateZMatrix = float4x4(c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + return mul(mul(rotateXMatrix, rotateYMatrix), rotateZMatrix); + } + float3 _VRChatMirrorCameraPos; + float3 getCameraPosition() + { + #ifdef USING_STEREO_MATRICES + return unity_StereoWorldSpaceCameraPos[0] * .5 + unity_StereoWorldSpaceCameraPos[1] * .5; + #endif + return _VRChatMirrorMode == 1 ? _VRChatMirrorCameraPos : _WorldSpaceCameraPos; + } + #ifdef POI_AUDIOLINK + inline int poiALBandPass(int bandIdx) + { + bandIdx = clamp(bandIdx, 0, 3); + return bandIdx == 0 ? ALPASS_AUDIOBASS : bandIdx == 1 ? ALPASS_AUDIOLOWMIDS : bandIdx == 2 ? ALPASS_AUDIOHIGHMIDS : ALPASS_AUDIOTREBLE; + } + #endif + float2 calcPixelScreenUVs(half4 grabPos) + { + half2 uv = grabPos.xy / (grabPos.w + 0.0000000001); + #if UNITY_SINGLE_PASS_STEREO + uv.xy *= half2(_ScreenParams.x * 2, _ScreenParams.y); + #else + uv.xy *= _ScreenParams.xy; + #endif + return uv; + } + float CalcMipLevel(float2 texture_coord) + { + float2 dx = ddx(texture_coord); + float2 dy = ddy(texture_coord); + float delta_max_sqr = max(dot(dx, dx), dot(dy, dy)); + return 0.5 * log2(delta_max_sqr); + } + float inverseLerp(float A, float B, float T) + { + return (T - A) / (B - A); + } + float inverseLerp2(float2 a, float2 b, float2 value) + { + float2 AB = b - a; + float2 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp3(float3 a, float3 b, float3 value) + { + float3 AB = b - a; + float3 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float inverseLerp4(float4 a, float4 b, float4 value) + { + float4 AB = b - a; + float4 AV = value - a; + return dot(AV, AB) / dot(AB, AB); + } + float4 QuaternionFromMatrix( + float m00, float m01, float m02, + float m10, float m11, float m12, + float m20, float m21, float m22) + { + float4 q; + float trace = m00 + m11 + m22; + if (trace > 0) + { + float s = sqrt(trace + 1) * 2; + q.w = 0.25 * s; + q.x = (m21 - m12) / s; + q.y = (m02 - m20) / s; + q.z = (m10 - m01) / s; + } + else if (m00 > m11 && m00 > m22) + { + float s = sqrt(1 + m00 - m11 - m22) * 2; + q.w = (m21 - m12) / s; + q.x = 0.25 * s; + q.y = (m01 + m10) / s; + q.z = (m02 + m20) / s; + } + else if (m11 > m22) + { + float s = sqrt(1 + m11 - m00 - m22) * 2; + q.w = (m02 - m20) / s; + q.x = (m01 + m10) / s; + q.y = 0.25 * s; + q.z = (m12 + m21) / s; + } + else + { + float s = sqrt(1 + m22 - m00 - m11) * 2; + q.w = (m10 - m01) / s; + q.x = (m02 + m20) / s; + q.y = (m12 + m21) / s; + q.z = 0.25 * s; + } + return q; + } + float4 MulQuat(float4 a, float4 b) + { + return float4( + a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y, + a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x, + a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w, + a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z + ); + } + float4 QuaternionFromBasis(float3 sx, float3 sy, float3 sz) + { + return QuaternionFromMatrix( + sx.x, sy.x, sz.x, + sx.y, sy.y, sz.y, + sx.z, sy.z, sz.z + ); + } + float4 BuildQuatFromForwardUp(float3 forward, float3 up) + { + float3 f = normalize(forward); + float3 u = normalize(up); + float3 x = normalize(cross(u, f)); + float3 y = cross(f, x); + return QuaternionFromBasis(x, y, f); + } + float3 QuaternionToEuler(float4 q) + { + float3 euler; + float sinr_cosp = 2 * (q.w * q.z + q.x * q.y); + float cosr_cosp = 1 - 2 * (q.z * q.z + q.x * q.x); + euler.z = atan2(sinr_cosp, cosr_cosp) * 57.2958; + float sinp = 2 * (q.w * q.x - q.y * q.z); + if (abs(sinp) >= 1) + euler.x = (sinp >= 0 ? 1 : - 1) * 90; + else + euler.x = asin(sinp) * 57.2958; + float siny_cosp = 2 * (q.w * q.y + q.z * q.x); + float cosy_cosp = 1 - 2 * (q.x * q.x + q.y * q.y); + euler.y = atan2(siny_cosp, cosy_cosp) * 57.2958; + return euler; + } + float4 EulerToQuaternion(float3 euler) + { + float3 eulerRad = euler * 0.0174533; + float cx = cos(eulerRad.x * 0.5); + float sx = sin(eulerRad.x * 0.5); + float cy = cos(eulerRad.y * 0.5); + float sy = sin(eulerRad.y * 0.5); + float cz = cos(eulerRad.z * 0.5); + float sz = sin(eulerRad.z * 0.5); + float4 q; + q.w = cx * cy * cz + sx * sy * sz; + q.x = sx * cy * cz - cx * sy * sz; + q.y = cx * sy * cz + sx * cy * sz; + q.z = cx * cy * sz - sx * sy * cz; + return q; + } + float4 quaternion_conjugate(float4 v) + { + return float4( + v.x, -v.yzw + ); + } + float4 quaternion_mul(float4 v1, float4 v2) + { + float4 result1 = (v1.x * v2 + v1 * v2.x); + float4 result2 = float4( + - dot(v1.yzw, v2.yzw), + cross(v1.yzw, v2.yzw) + ); + return float4(result1 + result2); + } + float4 get_quaternion_from_angle(float3 axis, float angle) + { + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return float4(axis * sn, cs); + } + float4 quaternion_from_vector(float3 inVec) + { + return float4(0.0, inVec); + } + float degree_to_radius(float degree) + { + return ( + degree / 180.0 * PI + ); + } + float3 rotate_with_quaternion(float3 inVec, float3 rotation) + { + float4 qx = get_quaternion_from_angle(float3(1, 0, 0), radians(rotation.x)); + float4 qy = get_quaternion_from_angle(float3(0, 1, 0), radians(rotation.y)); + float4 qz = get_quaternion_from_angle(float3(0, 0, 1), radians(rotation.z)); + #define MUL3(A, B, C) quaternion_mul(quaternion_mul((A), (B)), (C)) + float4 quaternion = normalize(MUL3(qx, qy, qz)); + float4 conjugate = quaternion_conjugate(quaternion); + float4 inVecQ = quaternion_from_vector(inVec); + float3 rotated = ( + MUL3(quaternion, inVecQ, conjugate) + ).yzw; + return rotated; + } + float3 RotateByQuaternion(float4 q, float3 v) + { + float3 u = q.xyz; + float s = q.w; + return 2.0 * dot(u, v) * u + + (s * s - dot(u, u)) * v + + 2.0 * s * cross(u, v); + } + float4 SlerpQuaternion(float4 qa, float4 qb, float t) + { + float cosHalfTheta = dot(qa, qb); + if (cosHalfTheta < 0.0) + { + qb = -qb; + cosHalfTheta = -cosHalfTheta; + } + if (cosHalfTheta > 0.9995) + { + float4 qr = normalize(qa * (1 - t) + qb * t); + return qr; + } + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta); + float a = sin((1 - t) * halfTheta) / sinHalfTheta; + float b = sin(t * halfTheta) / sinHalfTheta; + return qa * a + qb * b; + } + float4 transform(float4 input, float4 pos, float4 rotation, float4 scale) + { + input.rgb *= (scale.xyz * scale.w); + input = float4(rotate_with_quaternion(input.xyz, rotation.xyz * rotation.w) + (pos.xyz * pos.w), input.w); + return input; + } + float2 RotateUV(float2 _uv, float _radian, float2 _piv, float _time) + { + float RotateUV_ang = _radian; + float RotateUV_cos = cos(_time * RotateUV_ang); + float RotateUV_sin = sin(_time * RotateUV_ang); + return (mul(_uv - _piv, float2x2(RotateUV_cos, -RotateUV_sin, RotateUV_sin, RotateUV_cos)) + _piv); + } + float3 RotateAroundAxis(float3 original, float3 axis, float radian) + { + float s = sin(radian); + float c = cos(radian); + float one_minus_c = 1.0 - c; + axis = normalize(axis); + float3x3 rot_mat = { + one_minus_c * axis.x * axis.x + c, one_minus_c * axis.x * axis.y - axis.z * s, one_minus_c * axis.z * axis.x + axis.y * s, + one_minus_c * axis.x * axis.y + axis.z * s, one_minus_c * axis.y * axis.y + c, one_minus_c * axis.y * axis.z - axis.x * s, + one_minus_c * axis.z * axis.x - axis.y * s, one_minus_c * axis.y * axis.z + axis.x * s, one_minus_c * axis.z * axis.z + c + }; + return mul(rot_mat, original); + } + float3 poiThemeColor(in PoiMods poiMods, in float3 srcColor, in float themeIndex) + { + float3 outputColor = srcColor; + if (themeIndex != 0) + { + themeIndex = max(themeIndex - 1, 0); + if (themeIndex <= 3) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + else + { + #ifdef POI_AUDIOLINK + if (poiMods.audioLinkAvailable) + { + outputColor = poiMods.globalColorTheme[themeIndex]; + } + #endif + } + } + return outputColor; + } + float3 lilToneCorrection(float3 c, float4 hsvg) + { + c = pow(abs(c), hsvg.w); + float4 p = (c.b > c.g) ? float4(c.bg, -1.0, 2.0 / 3.0) : float4(c.gb, 0.0, -1.0 / 3.0); + float4 q = (p.x > c.r) ? float4(p.xyw, c.r) : float4(c.r, p.yzx); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + float3 hsv = float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + hsv = float3(hsv.x + hsvg.x, saturate(hsv.y * hsvg.y), saturate(hsv.z * hsvg.z)); + return hsv.z - hsv.z * hsv.y + hsv.z * hsv.y * saturate(abs(frac(hsv.x + float3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) - 1.0); + } + float3 lilBlendColor(float3 dstCol, float3 srcCol, float3 srcA, int blendMode) + { + float3 ad = dstCol + srcCol; + float3 mu = dstCol * srcCol; + float3 outCol = float3(0, 0, 0); + if (blendMode == 0) outCol = srcCol; // Normal + if (blendMode == 1) outCol = ad; // Add + if (blendMode == 2) outCol = max(ad - mu, dstCol); // Screen + if (blendMode == 3) outCol = mu; // Multiply + return lerp(dstCol, outCol, srcA); + } + float lilIsIn0to1(float f) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, 1.0)); + } + float lilIsIn0to1(float f, float nv) + { + float value = 0.5 - abs(f - 0.5); + return saturate(value / clamp(fwidth(value), 0.0001, nv)); + } + float poiEdgeLinearNoSaturate(float value, float border) + { + return (value - border) / clamp(fwidth(value), 0.0001, 1.0); + } + float3 poiEdgeLinearNoSaturate(float value, float3 border) + { + return float3( + (value - border.x) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.y) / clamp(fwidth(value), 0.0001, 1.0), + (value - border.z) / clamp(fwidth(value), 0.0001, 1.0) + ); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur) + { + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return (value - borderMin) / max(saturate(borderMax - borderMin + fwidth(value)), .0001); + } + float poiEdgeNonLinearNoSaturate(float value, float border) + { + float fwidthValue = fwidth(value); + return smoothstep(border - fwidthValue, border + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinearNoSaturate(float value, float border, float blur, float borderRange) + { + float fwidthValue = fwidth(value); + float borderMin = saturate(border - blur * 0.5 - borderRange); + float borderMax = saturate(border + blur * 0.5); + return smoothstep(borderMin - fwidthValue, borderMax + fwidthValue, value); + } + float poiEdgeNonLinear(float value, float border) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border)); + } + float poiEdgeNonLinear(float value, float border, float blur) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur)); + } + float poiEdgeNonLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeNonLinearNoSaturate(value, border, blur, borderRange)); + } + float poiEdgeLinear(float value, float border) + { + return saturate(poiEdgeLinearNoSaturate(value, border)); + } + float poiEdgeLinear(float value, float border, float blur) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur)); + } + float poiEdgeLinear(float value, float border, float blur, float borderRange) + { + return saturate(poiEdgeLinearNoSaturate(value, border, blur, borderRange)); + } + float3 OpenLitLinearToSRGB(float3 col) + { + return LinearToGammaSpace(col); + } + float3 OpenLitSRGBToLinear(float3 col) + { + return GammaToLinearSpace(col); + } + float OpenLitLuminance(float3 rgb) + { + #if defined(UNITY_COLORSPACE_GAMMA) + return dot(rgb, float3(0.22, 0.707, 0.071)); + #else + return dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + } + float3 AdjustLitLuminance(float3 rgb, float targetLuminance) + { + float currentLuminance; + #if defined(UNITY_COLORSPACE_GAMMA) + currentLuminance = dot(rgb, float3(0.22, 0.707, 0.071)); + #else + currentLuminance = dot(rgb, float3(0.0396819152, 0.458021790, 0.00609653955)); + #endif + float luminanceRatio = targetLuminance / currentLuminance; + return rgb * luminanceRatio; + } + float3 ClampLuminance(float3 rgb, float minLuminance, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float minRatio = (currentLuminance != 0) ? minLuminance / currentLuminance : 1.0; + float maxRatio = (currentLuminance != 0) ? maxLuminance / currentLuminance : 1.0; + float luminanceRatio = clamp(min(maxRatio, max(minRatio, 1.0)), 0.0, 1.0); + return lerp(rgb, rgb * luminanceRatio, luminanceRatio < 1.0); + } + float3 MaxLuminance(float3 rgb, float maxLuminance) + { + float currentLuminance = dot(rgb, float3(0.299, 0.587, 0.114)); + float luminanceRatio = (currentLuminance != 0) ? maxLuminance / max(currentLuminance, 0.00001) : 1.0; + return lerp(rgb, rgb * luminanceRatio, currentLuminance > maxLuminance); + } + float OpenLitGray(float3 rgb) + { + return dot(rgb, float3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0)); + } + void OpenLitShadeSH9ToonDouble(float3 lightDirection, out float3 shMax, out float3 shMin) + { + #if !defined(LIGHTMAP_ON) + float3 N = lightDirection * 0.666666; + float4 vB = N.xyzz * N.yzzx; + float3 res = float3(PoiSHAr.w, PoiSHAg.w, PoiSHAb.w); + res.r += dot(PoiSHBr, vB); + res.g += dot(PoiSHBg, vB); + res.b += dot(PoiSHBb, vB); + res += PoiSHC.rgb * (N.x * N.x - N.y * N.y); + float3 l1; + l1.r = dot(PoiSHAr.rgb, N); + l1.g = dot(PoiSHAg.rgb, N); + l1.b = dot(PoiSHAb.rgb, N); + shMax = res + l1; + shMin = res - l1; + #if defined(UNITY_COLORSPACE_GAMMA) + shMax = OpenLitLinearToSRGB(shMax); + shMin = OpenLitLinearToSRGB(shMin); + #endif + #else + shMax = 0.0; + shMin = 0.0; + #endif + } + float3 OpenLitComputeCustomLightDirection(float4 lightDirectionOverride) + { + float3 customDir = length(lightDirectionOverride.xyz) * normalize(mul((float3x3)unity_ObjectToWorld, lightDirectionOverride.xyz)); + return lightDirectionOverride.w ? customDir : lightDirectionOverride.xyz; // .w isn't doc'd anywhere and is always 0 unless end user changes it + } + float3 OpenLitLightingDirectionForSH9() + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 lightDirectionForSH9 = sh9Dir + mainDir; + lightDirectionForSH9 = dot(lightDirectionForSH9, lightDirectionForSH9) < 0.000001 ? 0 : normalize(lightDirectionForSH9); + return lightDirectionForSH9; + } + float3 OpenLitLightingDirection(float4 lightDirectionOverride) + { + float3 mainDir = _WorldSpaceLightPos0.xyz * OpenLitLuminance(_LightColor0.rgb); + #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH + float3 sh9Dir = PoiSHAr.xyz * 0.333333 + PoiSHAg.xyz * 0.333333 + PoiSHAb.xyz * 0.333333; + float3 sh9DirAbs = float3(sh9Dir.x, abs(sh9Dir.y), sh9Dir.z); + #else + float3 sh9Dir = 0; + float3 sh9DirAbs = 0; + #endif + float3 customDir = OpenLitComputeCustomLightDirection(lightDirectionOverride); + return normalize(sh9DirAbs + mainDir + customDir); + } + float3 OpenLitLightingDirection() + { + float4 customDir = float4(0.001, 0.002, 0.001, 0.0); + return OpenLitLightingDirection(customDir); + } + inline float4 CalculateFrustumCorrection() + { + float x1 = -UNITY_MATRIX_P._31 / (UNITY_MATRIX_P._11 * UNITY_MATRIX_P._34); + float x2 = -UNITY_MATRIX_P._32 / (UNITY_MATRIX_P._22 * UNITY_MATRIX_P._34); + return float4(x1, x2, 0, UNITY_MATRIX_P._33 / UNITY_MATRIX_P._34 + x1 * UNITY_MATRIX_P._13 + x2 * UNITY_MATRIX_P._23); + } + inline float CorrectedLinearEyeDepth(float z, float correctionFactor) + { + return 1.f / (z / UNITY_MATRIX_P._34 + correctionFactor); + } + float evalRamp4(float time, float4 ramp) + { + return lerp(ramp.x, ramp.y, smoothstep(ramp.z, ramp.w, time)); + } + float2 sharpSample(float4 texelSize, float2 p) + { + p = p * texelSize.zw; + float2 c = max(0.0, fwidth(p)); + p = floor(p) + saturate(frac(p) / c); + p = (p - 0.5) * texelSize.xy; + return p; + } + void applyToGlobalMask(inout PoiMods poiMods, int index, int blendType, float val) + { + float valBlended = saturate(maskBlend(poiMods.globalMask[index], val, blendType)); + switch(index) + { + case 0: poiMods.globalMask[0] = valBlended; break; + case 1: poiMods.globalMask[1] = valBlended; break; + case 2: poiMods.globalMask[2] = valBlended; break; + case 3: poiMods.globalMask[3] = valBlended; break; + case 4: poiMods.globalMask[4] = valBlended; break; + case 5: poiMods.globalMask[5] = valBlended; break; + case 6: poiMods.globalMask[6] = valBlended; break; + case 7: poiMods.globalMask[7] = valBlended; break; + case 8: poiMods.globalMask[8] = valBlended; break; + case 9: poiMods.globalMask[9] = valBlended; break; + case 10: poiMods.globalMask[10] = valBlended; break; + case 11: poiMods.globalMask[11] = valBlended; break; + case 12: poiMods.globalMask[12] = valBlended; break; + case 13: poiMods.globalMask[13] = valBlended; break; + case 14: poiMods.globalMask[14] = valBlended; break; + case 15: poiMods.globalMask[15] = valBlended; break; + } + } + void assignValueToVectorFromIndex(inout float4 vec, int index, float value) + { + switch(index) + { + case 0: vec[0] = value; break; + case 1: vec[1] = value; break; + case 2: vec[2] = value; break; + case 3: vec[3] = value; break; + } + } + float3 mod289(float3 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float2 mod289(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + float3 permute(float3 x) + { + return mod289(((x * 34.0) + 1.0) * x); + } + float snoise(float2 v) + { + const float4 C = float4(0.211324865405187, // (3.0 - sqrt(3.0)) / 6.0 + 0.366025403784439, // 0.5 * (sqrt(3.0) - 1.0) + - 0.577350269189626, // - 1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + float2 i = floor(v + dot(v, C.yy)); + float2 x0 = v - i + dot(i, C.xx); + float2 i1; + i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); + float4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + i = mod289(i); // Avoid truncation effects in permutation + float3 p = permute(permute(i.y + float3(0.0, i1.y, 1.0)) + + i.x + float3(0.0, i1.x, 1.0)); + float3 m = max(0.5 - float3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m = m * m ; + m = m * m ; + float3 x = 2.0 * frac(p * C.www) - 1.0; + float3 h = abs(x) - 0.5; + float3 ox = floor(x + 0.5); + float3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + float3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); + } + float poiInvertToggle(in float value, in float toggle) + { + return (toggle == 0 ? value : 1 - value); + } + float3 PoiBlendNormal(float3 dstNormal, float3 srcNormal) + { + return float3(dstNormal.xy + srcNormal.xy, dstNormal.z * srcNormal.z); + } + float3 lilTransformDirOStoWS(float3 directionOS, bool doNormalize) + { + if (doNormalize) return normalize(mul((float3x3)unity_ObjectToWorld, directionOS)); + else return mul((float3x3)unity_ObjectToWorld, directionOS); + } + float2 poiGetWidthAndHeight(Texture2D tex) + { + uint width, height; + tex.GetDimensions(width, height); + return float2(width, height); + } + float2 poiGetWidthAndHeight(Texture2DArray tex) + { + uint width, height, element; + tex.GetDimensions(width, height, element); + return float2(width, height); + } + bool SceneHasReflections() + { + float width, height; + unity_SpecCube0.GetDimensions(width, height); + return !(width * height < 2); + } + void applyUnityFog(inout float3 col, float2 fogData) + { + float fogFactor = 1.0; + float depth = UNITY_Z_0_FAR_FROM_CLIPSPACE(fogData.x); + if (unity_FogParams.z != unity_FogParams.w) + { + fogFactor = depth * unity_FogParams.z + unity_FogParams.w; + } + else if (fogData.y) + { + float exponent_val = unity_FogParams.x * depth; + fogFactor = exp2(-exponent_val * exponent_val); + } + else if (unity_FogParams.y != 0.0f) + { + float exponent = unity_FogParams.y * depth; + fogFactor = exp2(-exponent); + } + fixed3 appliedFogColor = unity_FogColor.rgb; + #if defined(UNITY_PASS_FORWARDADD) + appliedFogColor = fixed3(0, 0, 0); + #endif + col.rgb = lerp(appliedFogColor, col.rgb, saturate(fogFactor)); + } + void applyReducedRenderClipDistance(inout VertexOut o) + { + if (o.pos.w < _ProjectionParams.y * 1.01 && o.pos.w > 0) + { + #if defined(UNITY_REVERSED_Z) // DirectX + o.pos.z = o.pos.z * 0.0001 + o.pos.w * 0.999; + #else // OpenGL + o.pos.z = o.pos.z * 0.0001 - o.pos.w * 0.999; + #endif + } + } + VertexOut vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + VertexOut o; + PoiInitStruct(VertexOut, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + #ifdef POI_TESSELLATED + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(v); + #endif + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + #ifdef POI_AUDIOLINK + float vertexAudioLink[5]; + vertexAudioLink[0] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 0))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 0))[0]; + vertexAudioLink[1] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 1))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 1))[0]; + vertexAudioLink[2] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 2))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 2))[0]; + vertexAudioLink[3] = 0.0 == 0 ? AudioLinkData(ALPASS_AUDIOLINK + float2(0, 3))[0] : AudioLinkData(ALPASS_FILTEREDAUDIOLINK + float2((1 - 0.0) * 15.95, 3))[0]; + vertexAudioLink[4] = AudioLinkData(ALPASS_GENERALVU + float2(8, 0))[0]; + #endif + o.normal = UnityObjectToWorldNormal(v.normal); + o.tangent.xyz = UnityObjectToWorldDir(v.tangent); + o.tangent.w = v.tangent.w; + o.vertexColor = v.color; + o.uv[0] = float4(v.uv0.xy, v.uv1.xy); + o.uv[1] = float4(v.uv2.xy, v.uv3.xy); + #if defined(LIGHTMAP_ON) + o.lightmapUV.xy = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #endif + #ifdef DYNAMICLIGHTMAP_ON + o.lightmapUV.zw = v.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #endif + o.localPos = v.vertex; + o.worldPos = mul(unity_ObjectToWorld, o.localPos); + float3 localOffset = float3(0, 0, 0); + float3 worldOffset = float3(0, 0, 0); + o.localPos.rgb += localOffset; + o.worldPos.rgb += worldOffset; + o.pos = UnityObjectToClipPos(o.localPos); + o.fogData.x = o.pos.z; // This is used for fog calculations, so we need to ensure it's in clip space + #ifdef FOG_EXP2 + o.fogData.y = 1; + #else + o.fogData.y = 0; + #endif + #ifndef FORWARD_META_PASS + #if !defined(UNITY_PASS_SHADOWCASTER) + UNITY_TRANSFER_SHADOW(o, o.uv[0].xy); + #else + v.vertex.xyz = o.localPos.xyz; + TRANSFER_SHADOW_CASTER_NOPOS(o, o.pos); + #endif + #endif + o.worldDir = dot(o.pos, CalculateFrustumCorrection()); + if (0.0) + { + applyReducedRenderClipDistance(o); + } + #ifdef POI_PASS_META + o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST); + #endif + #ifdef POI_PASS_LILFUR + #endif + return o; + } + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + #define POI2D_SAMPLER_STOCHASTIC(tex, texSampler, uv, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, uv) : POI2D_SAMPLER(tex, texSampler, uv)) + #define POI2D_SAMPLER_PAN_STOCHASTIC(tex, texSampler, uv, pan, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan)) : POI2D_SAMPLER_PAN(tex, texSampler, uv, pan)) + #define POI2D_SAMPLER_PANGRAD_STOCHASTIC(tex, texSampler, uv, pan, dx, dy, useStochastic) (useStochastic ? DeliotHeitzSampleTexture(tex, sampler##texSampler, POI_PAN_UV(uv, pan), dx, dy) : POI2D_SAMPLER_PANGRAD(tex, texSampler, uv, pan, dx, dy)) + #endif + #if !defined(_STOCHASTICMODE_NONE) + float2 StochasticHash2D2D(float2 s) + { + return frac(sin(glsl_mod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + #endif + #if defined(_STOCHASTICMODE_DELIOT_HEITZ) + float3x3 DeliotHeitzStochasticUVBW(float2 uv) + { + const float2x2 stochasticSkewedGrid = float2x2(1.0, -0.57735027, 0.0, 1.15470054); + float2 skewUV = mul(stochasticSkewedGrid, uv * 3.4641 * 1.0); + float2 vxID = floor(skewUV); + float3 bary = float3(frac(skewUV), 0); + bary.z = 1.0 - bary.x - bary.y; + float3x3 pos = float3x3( + float3(vxID, bary.z), + float3(vxID + float2(0, 1), bary.y), + float3(vxID + float2(1, 0), bary.x) + ); + float3x3 neg = float3x3( + float3(vxID + float2(1, 1), -bary.z), + float3(vxID + float2(1, 0), 1.0 - bary.y), + float3(vxID + float2(0, 1), 1.0 - bary.x) + ); + return (bary.z > 0) ? pos : neg; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv, float2 dx, float2 dy) + { + float3x3 UVBW = DeliotHeitzStochasticUVBW(uv); + return mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[0].xy), dx, dy), UVBW[0].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[1].xy), dx, dy), UVBW[1].z) + + mul(tex.SampleGrad(texSampler, uv + StochasticHash2D2D(UVBW[2].xy), dx, dy), UVBW[2].z) ; + } + float4 DeliotHeitzSampleTexture(Texture2D tex, SamplerState texSampler, float2 uv) + { + float2 dx = ddx(uv), dy = ddy(uv); + return DeliotHeitzSampleTexture(tex, texSampler, uv, dx, dy); + } + #endif // defined(_STOCHASTICMODE_DELIOT_HEITZ) + void applyAlphaOptions(inout PoiFragData poiFragData, in PoiMesh poiMesh, in PoiCam poiCam, in PoiMods poiMods) + { + poiFragData.alpha = saturate(poiFragData.alpha + 0.0); + if (0.0 > 0) + { + poiFragData.alpha = maskBlend(poiFragData.alpha, poiMods.globalMask[0.0 - 1], 2.0); + } + } + void calculateGlobalThemes(inout PoiMods poiMods) + { + float4 themeColorExposures = 0; + float4 themeColor0, themeColor1, themeColor2, themeColor3 = 0; + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor0.rgb, themeColorExposures.x); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor1.rgb, themeColorExposures.y); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor2.rgb, themeColorExposures.z); + DecomposeHDRColor(float4(1,1,1,1).rgb, themeColor3.rgb, themeColorExposures.w); + poiMods.globalColorTheme[0] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor0.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.x), float4(1,1,1,1).a); + poiMods.globalColorTheme[1] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor1.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.y), float4(1,1,1,1).a); + poiMods.globalColorTheme[2] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor2.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.z), float4(1,1,1,1).a); + poiMods.globalColorTheme[3] = float4(ApplyHDRExposure(ModifyViaHSV(themeColor3.rgb, frac(0.0 + 0.0 * _Time.x), 0.0, 0.0), themeColorExposures.w), float4(1,1,1,1).a); + } + void ApplyGlobalMaskModifiers(in PoiMesh poiMesh, inout PoiMods poiMods, in PoiCam poiCam) + { + } + float2 calculatePolarCoordinate(in PoiMesh poiMesh) + { + float2 delta = poiMesh.uv[0.0] - float4(0.5,0.5,0,0); + float radius = length(delta) * 2 * 1.0; + float angle = atan2(delta.x, delta.y); + float phi = angle / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + angle = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + angle *= 1.0; + return float2(radius, angle + distance(poiMesh.uv[0.0], float4(0.5,0.5,0,0)) * 0.0); + } + float2 MonoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(1.0, 1.0 / UNITY_PI); + sphereCoords = float2(1.0, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 1.0).zw; + } + float2 StereoPanoProjection(float3 coords) + { + float3 normalizedCoords = normalize(coords); + float latitude = acos(normalizedCoords.y); + float longitude = atan2(normalizedCoords.z, normalizedCoords.x); + float phi = longitude / (UNITY_PI * 2.0); + float phi_frac = frac(phi); + longitude = fwidth(phi) - 0.0001 < fwidth(phi_frac) ? phi : phi_frac; + longitude *= 2; + float2 sphereCoords = float2(longitude, latitude) * float2(0.5, 1.0 / UNITY_PI); + sphereCoords = float2(0.5, 1.0) - sphereCoords; + return (sphereCoords + float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).xy) * float4(0, 1 - unity_StereoEyeIndex, 1, 0.5).zw; + } + float2 calculateWorldUV(in PoiMesh poiMesh) + { + return float2(0.0 != 3 ? poiMesh.worldPos[ 0.0] : 0.0f, 2.0 != 3 ? poiMesh.worldPos[2.0] : 0.0f); + } + float2 calculatelocalUV(in PoiMesh poiMesh) + { + float localUVs[8]; + localUVs[0] = poiMesh.localPos.x; + localUVs[1] = poiMesh.localPos.y; + localUVs[2] = poiMesh.localPos.z; + localUVs[3] = 0; + localUVs[4] = poiMesh.vertexColor.r; + localUVs[5] = poiMesh.vertexColor.g; + localUVs[6] = poiMesh.vertexColor.b; + localUVs[7] = poiMesh.vertexColor.a; + return float2(localUVs[0.0],localUVs[1.0]); + } + float2 calculatePanosphereUV(in PoiMesh poiMesh) + { + float3 viewDirection = normalize(lerp(getCameraPosition().xyz, _WorldSpaceCameraPos.xyz, 1.0) - poiMesh.worldPos.xyz) * - 1; + return lerp(MonoPanoProjection(viewDirection), StereoPanoProjection(viewDirection), 0.0); + } + float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + PoiSHAr = unity_SHAr; + PoiSHAg = unity_SHAg; + PoiSHAb = unity_SHAb; + PoiSHBr = unity_SHBr; + PoiSHBg = unity_SHBg; + PoiSHBb = unity_SHBb; + PoiSHC = unity_SHC; + PoiMesh poiMesh; + PoiInitStruct(PoiMesh, poiMesh); + PoiLight poiLight; + PoiInitStruct(PoiLight, poiLight); + PoiVertexLights poiVertexLights; + PoiInitStruct(PoiVertexLights, poiVertexLights); + PoiCam poiCam; + PoiInitStruct(PoiCam, poiCam); + PoiMods poiMods; + PoiInitStruct(PoiMods, poiMods); + poiMods.globalEmission = 1; + PoiFragData poiFragData; + poiFragData.smoothness = 1; + poiFragData.smoothness2 = 1; + poiFragData.metallic = 1; + poiFragData.specularMask = 1; + poiFragData.reflectionMask = 1; + poiFragData.emission = 0; + poiFragData.baseColor = float3(0, 0, 0); + poiFragData.finalColor = float3(0, 0, 0); + poiFragData.alpha = 1; + poiFragData.toggleVertexLights = 0; + #ifdef POI_UDIMDISCARD + applyUDIMDiscard(i, facing); + #endif + poiMesh.objectPosition = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz; + poiMesh.objNormal = mul(unity_WorldToObject, i.normal); + poiMesh.normals[0] = i.normal; + poiMesh.tangent[0] = i.tangent.xyz; + poiMesh.binormal[0] = cross(i.normal, i.tangent.xyz) * (i.tangent.w * unity_WorldTransformParams.w); + poiMesh.worldPos = i.worldPos.xyz; + poiMesh.localPos = i.localPos.xyz; + poiMesh.vertexColor = i.vertexColor; + poiMesh.isFrontFace = facing; + poiMesh.dx = ddx(poiMesh.uv[0]); + poiMesh.dy = ddy(poiMesh.uv[0]); + poiMesh.isRightHand = i.tangent.w > 0.0; + #ifndef POI_PASS_OUTLINE + if (!poiMesh.isFrontFace && 1) + { + poiMesh.normals[0] *= -1; + poiMesh.tangent[0] *= -1; + poiMesh.binormal[0] *= -1; + } + #endif + poiCam.viewDir = !IsOrthographicCamera() ? normalize(_WorldSpaceCameraPos - i.worldPos.xyz) : normalize(UNITY_MATRIX_I_V._m02_m12_m22); + float3 tanToWorld0 = float3(poiMesh.tangent[0].x, poiMesh.binormal[0].x, poiMesh.normals[0].x); + float3 tanToWorld1 = float3(poiMesh.tangent[0].y, poiMesh.binormal[0].y, poiMesh.normals[0].y); + float3 tanToWorld2 = float3(poiMesh.tangent[0].z, poiMesh.binormal[0].z, poiMesh.normals[0].z); + float3 ase_tanViewDir = tanToWorld0 * poiCam.viewDir.x + tanToWorld1 * poiCam.viewDir.y + tanToWorld2 * poiCam.viewDir.z; + poiCam.tangentViewDir = normalize(ase_tanViewDir); + #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) + poiMesh.lightmapUV = i.lightmapUV; + #endif + poiMesh.parallaxUV = poiCam.tangentViewDir.xy / max(poiCam.tangentViewDir.z, 0.0001); + poiMesh.uv[0] = i.uv[0].xy; + poiMesh.uv[1] = i.uv[0].zw; + poiMesh.uv[2] = i.uv[1].xy; + poiMesh.uv[3] = i.uv[1].zw; + poiMesh.uv[4] = poiMesh.uv[0]; + poiMesh.uv[5] = poiMesh.uv[0]; + poiMesh.uv[6] = poiMesh.uv[0]; + poiMesh.uv[7] = poiMesh.uv[0]; + poiMesh.uv[8] = poiMesh.uv[0]; + poiMesh.uv[4] = calculatePanosphereUV(poiMesh); + poiMesh.uv[5] = calculateWorldUV(poiMesh); + poiMesh.uv[6] = calculatePolarCoordinate(poiMesh); + poiMesh.uv[8] = calculatelocalUV(poiMesh); + float3 worldViewUp = normalize(float3(0, 1, 0) - poiCam.viewDir * dot(poiCam.viewDir, float3(0, 1, 0))); + float3 worldViewRight = normalize(cross(poiCam.viewDir, worldViewUp)); + poiMesh.uv[9] = float2(dot(worldViewRight, poiMesh.normals[0]), dot(worldViewUp, poiMesh.normals[0])) * 0.5 + 0.5; + poiMods.globalMask[0] = 1; + poiMods.globalMask[1] = 1; + poiMods.globalMask[2] = 1; + poiMods.globalMask[3] = 1; + poiMods.globalMask[4] = 1; + poiMods.globalMask[5] = 1; + poiMods.globalMask[6] = 1; + poiMods.globalMask[7] = 1; + poiMods.globalMask[8] = 1; + poiMods.globalMask[9] = 1; + poiMods.globalMask[10] = 1; + poiMods.globalMask[11] = 1; + poiMods.globalMask[12] = 1; + poiMods.globalMask[13] = 1; + poiMods.globalMask[14] = 1; + poiMods.globalMask[15] = 1; + ApplyGlobalMaskModifiers(poiMesh, poiMods, poiCam); + float2 mainUV = poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)); + if (0.0) + { + mainUV = sharpSample(float4(0.0004882813,0.0004882813,2048,2048), mainUV); + } + float4 mainTexture = POI2D_SAMPLER_PAN_STOCHASTIC(_MainTex, _MainTex, mainUV, float4(0,0,0,0), 0.0); + mainTexture.a = max(mainTexture.a, 0.0); + #if defined(PROP_BUMPMAP) || !defined(OPTIMIZER_ENABLED) + poiMesh.tangentSpaceNormal = UnpackScaleNormal(POI2D_SAMPLER_PAN_STOCHASTIC(_BumpMap, _MainTex, poiUV(poiMesh.uv[0.0].xy, float4(1,1,0,0)), float4(0,0,0,0), 0.0), 1.0); + #else + poiMesh.tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + #endif + float3 tangentSpaceNormal = UnpackNormal(float4(0.5, 0.5, 1, 1)); + poiMesh.normals[0] = normalize( + tangentSpaceNormal.x * poiMesh.tangent[0] + + tangentSpaceNormal.y * poiMesh.binormal[0] + + tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.normals[1] = normalize( + poiMesh.tangentSpaceNormal.x * poiMesh.tangent[0] + + poiMesh.tangentSpaceNormal.y * poiMesh.binormal[0] + + poiMesh.tangentSpaceNormal.z * poiMesh.normals[0] + ); + poiMesh.tangent[1] = cross(poiMesh.binormal[0], -poiMesh.normals[1]); + poiMesh.binormal[1] = cross(-poiMesh.normals[1], poiMesh.tangent[0]); + poiCam.forwardDir = getCameraForward(); + poiCam.worldPos = _WorldSpaceCameraPos; + poiCam.reflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[1]); + poiCam.vertexReflectionDir = reflect(-poiCam.viewDir, poiMesh.normals[0]); + poiCam.clipPos = i.pos; + poiCam.distanceToVert = distance(poiMesh.worldPos, poiCam.worldPos); + poiCam.posScreenSpace = poiTransformClipSpacetoScreenSpaceFrag(poiCam.clipPos); + #if defined(POI_GRABPASS) && defined(POI_PASS_BASE) + poiCam.screenUV = poiCam.clipPos.xy / poiGetWidthAndHeight(_PoiGrab2); + #else + poiCam.screenUV = poiCam.clipPos.xy / _ScreenParams.xy; + #endif + #ifdef UNITY_SINGLE_PASS_STEREO + poiCam.posScreenSpace.x = poiCam.posScreenSpace.x * 0.5; + #endif + poiCam.posScreenPixels = calcPixelScreenUVs(poiCam.posScreenSpace); + poiCam.vDotN = abs(dot(poiCam.viewDir, poiMesh.normals[1])); + poiCam.worldDirection.xyz = poiMesh.worldPos.xyz - poiCam.worldPos; + poiCam.worldDirection.w = i.worldDir; + calculateGlobalThemes(poiMods); + poiFragData.baseColor = mainTexture.rgb; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.baseColor *= poiThemeColor(poiMods, float4(1,1,1,1).rgb, 0.0); + poiFragData.alpha = mainTexture.a * float4(1,1,1,1).a; + #else + poiFragData.baseColor *= poiThemeColor(poiMods, _TwoPassColor.rgb, _TwoPassColorThemeIndex); + poiFragData.alpha = mainTexture.a * _TwoPassColor.a; + #endif + if (2.0) + { + #if defined(PROP_ALPHAMASK) || !defined(OPTIMIZER_ENABLED) + float alphaMask = POI2D_SAMPLER_PAN(_AlphaMask, _MainTex, poiUV(poiMesh.uv[0.0], float4(1,1,0,0)), float4(0,0,0,0).xy).r; + #else + float alphaMask = 1; + #endif + alphaMask = saturate(alphaMask * 1.0 + (0.0 ? 0.0 * - 1 : 0.0)); + if (0.0) alphaMask = 1 - alphaMask; + if (2.0 == 1) poiFragData.alpha = alphaMask; + if (2.0 == 2) poiFragData.alpha = poiFragData.alpha * alphaMask; + if (2.0 == 3) poiFragData.alpha = saturate(poiFragData.alpha + alphaMask); + if (2.0 == 4) poiFragData.alpha = saturate(poiFragData.alpha - alphaMask); + } + applyAlphaOptions(poiFragData, poiMesh, poiCam, poiMods); + + if (0.0) + { + poiFragData.baseColor *= saturate(poiFragData.alpha); + } + poiFragData.finalColor = poiFragData.baseColor; + #if !defined(POI_PASS_BASETWO) && !defined(POI_PASS_ADDTWO) + poiFragData.alpha = 1.0 ? 1 : poiFragData.alpha; + #else + poiFragData.alpha = _AlphaForceOpaque2 ? 1 : poiFragData.alpha; + #endif + poiFragData.finalColor += poiLight.finalLightAdd; + if (0.0 == POI_MODE_OPAQUE) + { + poiFragData.alpha = 1; + } + clip(poiFragData.alpha - 0.5); + #ifdef POI_PASS_META + UnityMetaInput meta; + UNITY_INITIALIZE_OUTPUT(UnityMetaInput, meta); + meta.Emission = poiFragData.emission * 1.0 * poiMods.globalEmission; + meta.Albedo = saturate(poiFragData.finalColor.rgb); + meta.SpecularColor = poiLight.finalLightAdd; + return UnityMetaFragment(meta) + POI_SAFE_RGB0; + #endif + poiFragData.finalColor += poiFragData.emission * poiMods.globalEmission; + applyUnityFog(poiFragData.finalColor, i.fogData); + return float4(poiFragData.finalColor, poiFragData.alpha) + POI_SAFE_RGB0; + } + ENDCG + } + } + CustomEditor "Thry.ShaderEditor" +} diff --git a/Assets/Quiz/Materials/OptimizedShaders/OfficeChair/Poiyomi Pro World.shader.meta b/Assets/Quiz/Materials/OptimizedShaders/OfficeChair/Poiyomi Pro World.shader.meta new file mode 100644 index 0000000..1dafa85 --- /dev/null +++ b/Assets/Quiz/Materials/OptimizedShaders/OfficeChair/Poiyomi Pro World.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b9758309ae566dd4abe6ee85b975d7ac +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Models/Camera.fbx b/Assets/Quiz/Models/Camera.fbx new file mode 100644 index 0000000..dbda848 Binary files /dev/null and b/Assets/Quiz/Models/Camera.fbx differ diff --git a/Assets/Quiz/Models/Camera.fbx.meta b/Assets/Quiz/Models/Camera.fbx.meta new file mode 100644 index 0000000..a440ea4 --- /dev/null +++ b/Assets/Quiz/Models/Camera.fbx.meta @@ -0,0 +1,110 @@ +fileFormatVersion: 2 +guid: f1545e25aa69a6345a6d3f60f9447381 +ModelImporter: + serializedVersion: 22200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: + - '#BAKERY{"meshName":["cinecam"],"padding":[47],"unwrapper":[0]}' + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 1 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Models/Corridor/CorridorWall.fbx.meta b/Assets/Quiz/Models/Corridor/CorridorWall.fbx.meta index d1517c7..ecbceaa 100644 --- a/Assets/Quiz/Models/Corridor/CorridorWall.fbx.meta +++ b/Assets/Quiz/Models/Corridor/CorridorWall.fbx.meta @@ -30,8 +30,7 @@ ModelImporter: animationScaleError: 0.5 animationWrapMode: 0 extraExposedTransformPaths: [] - extraUserProperties: - - '#BAKERY{"meshName":["CorridorWall"],"padding":[12],"unwrapper":[0]}' + extraUserProperties: [] clipAnimations: [] isReadable: 0 meshes: @@ -49,7 +48,7 @@ ModelImporter: nodeNameCollisionStrategy: 1 fileIdsGeneration: 2 swapUVChannels: 0 - generateSecondaryUV: 1 + generateSecondaryUV: 0 useFileUnits: 1 keepQuads: 0 weldVertices: 1 diff --git a/Assets/Quiz/Models/Corridor/TinyRoom.fbx b/Assets/Quiz/Models/Corridor/TinyRoom.fbx new file mode 100644 index 0000000..d7ce724 Binary files /dev/null and b/Assets/Quiz/Models/Corridor/TinyRoom.fbx differ diff --git a/Assets/Quiz/Models/Corridor/TinyRoom.fbx.meta b/Assets/Quiz/Models/Corridor/TinyRoom.fbx.meta new file mode 100644 index 0000000..1c5526e --- /dev/null +++ b/Assets/Quiz/Models/Corridor/TinyRoom.fbx.meta @@ -0,0 +1,109 @@ +fileFormatVersion: 2 +guid: 299117bf4be2de4429aa6f98e0322f4f +ModelImporter: + serializedVersion: 22200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Models/DownCount.meta b/Assets/Quiz/Models/DownCount.meta new file mode 100644 index 0000000..b741b2f --- /dev/null +++ b/Assets/Quiz/Models/DownCount.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b77408efeaeec0b4baeef55cc6a35cf4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Models/DownCount/Clock.fbx b/Assets/Quiz/Models/DownCount/Clock.fbx new file mode 100644 index 0000000..81a64b3 Binary files /dev/null and b/Assets/Quiz/Models/DownCount/Clock.fbx differ diff --git a/Assets/Quiz/Models/DownCount/Clock.fbx.meta b/Assets/Quiz/Models/DownCount/Clock.fbx.meta new file mode 100644 index 0000000..b8c430d --- /dev/null +++ b/Assets/Quiz/Models/DownCount/Clock.fbx.meta @@ -0,0 +1,109 @@ +fileFormatVersion: 2 +guid: ee1ce01d54aed114aa407e302147481f +ModelImporter: + serializedVersion: 22200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 1 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Models/DownCount/ClockHand.fbx b/Assets/Quiz/Models/DownCount/ClockHand.fbx new file mode 100644 index 0000000..60edfb2 Binary files /dev/null and b/Assets/Quiz/Models/DownCount/ClockHand.fbx differ diff --git a/Assets/Quiz/Models/DownCount/ClockHand.fbx.meta b/Assets/Quiz/Models/DownCount/ClockHand.fbx.meta new file mode 100644 index 0000000..efb5b79 --- /dev/null +++ b/Assets/Quiz/Models/DownCount/ClockHand.fbx.meta @@ -0,0 +1,109 @@ +fileFormatVersion: 2 +guid: 1c7ee18c931fd454cadaa750534e1d95 +ModelImporter: + serializedVersion: 22200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Models/DownCount/DowncountPlayerDesk.fbx b/Assets/Quiz/Models/DownCount/DowncountPlayerDesk.fbx new file mode 100644 index 0000000..b995390 Binary files /dev/null and b/Assets/Quiz/Models/DownCount/DowncountPlayerDesk.fbx differ diff --git a/Assets/Quiz/Models/DownCount/DowncountPlayerDesk.fbx.meta b/Assets/Quiz/Models/DownCount/DowncountPlayerDesk.fbx.meta new file mode 100644 index 0000000..c7bdcc0 --- /dev/null +++ b/Assets/Quiz/Models/DownCount/DowncountPlayerDesk.fbx.meta @@ -0,0 +1,109 @@ +fileFormatVersion: 2 +guid: b215af399afe2f14e96c213518ac905c +ModelImporter: + serializedVersion: 22200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Models/DownCount/Floor.fbx b/Assets/Quiz/Models/DownCount/Floor.fbx new file mode 100644 index 0000000..ce66267 Binary files /dev/null and b/Assets/Quiz/Models/DownCount/Floor.fbx differ diff --git a/Assets/Quiz/Models/DownCount/Floor.fbx.meta b/Assets/Quiz/Models/DownCount/Floor.fbx.meta new file mode 100644 index 0000000..d6e4b6e --- /dev/null +++ b/Assets/Quiz/Models/DownCount/Floor.fbx.meta @@ -0,0 +1,110 @@ +fileFormatVersion: 2 +guid: 031b327695a211149b112576815b9c21 +ModelImporter: + serializedVersion: 22200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: + - '#BAKERY{"meshName":["Cylinder"],"padding":[3],"unwrapper":[0]}' + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 1 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Models/DownCount/WallSingle.fbx b/Assets/Quiz/Models/DownCount/WallSingle.fbx new file mode 100644 index 0000000..e52b97f Binary files /dev/null and b/Assets/Quiz/Models/DownCount/WallSingle.fbx differ diff --git a/Assets/Quiz/Models/DownCount/WallSingle.fbx.meta b/Assets/Quiz/Models/DownCount/WallSingle.fbx.meta new file mode 100644 index 0000000..eca7088 --- /dev/null +++ b/Assets/Quiz/Models/DownCount/WallSingle.fbx.meta @@ -0,0 +1,109 @@ +fileFormatVersion: 2 +guid: d12bf3d7f969d9a438edde912f2009da +ModelImporter: + serializedVersion: 22200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 1 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Models/DownCount/Walls.fbx b/Assets/Quiz/Models/DownCount/Walls.fbx new file mode 100644 index 0000000..a1b69d8 Binary files /dev/null and b/Assets/Quiz/Models/DownCount/Walls.fbx differ diff --git a/Assets/Quiz/Models/DownCount/Walls.fbx.meta b/Assets/Quiz/Models/DownCount/Walls.fbx.meta new file mode 100644 index 0000000..d125ef5 --- /dev/null +++ b/Assets/Quiz/Models/DownCount/Walls.fbx.meta @@ -0,0 +1,110 @@ +fileFormatVersion: 2 +guid: 85585303349fb4849b6c9f2825e34d67 +ModelImporter: + serializedVersion: 22200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: + - '#BAKERY{"meshName":["BackdropWall"],"padding":[3],"unwrapper":[0]}' + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 1 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Models/GameRoom.fbx b/Assets/Quiz/Models/GameRoom.fbx index a2bbcf2..f42b697 100644 Binary files a/Assets/Quiz/Models/GameRoom.fbx and b/Assets/Quiz/Models/GameRoom.fbx differ diff --git a/Assets/Quiz/Models/Lobby/EndTable.fbx.meta b/Assets/Quiz/Models/Lobby/EndTable.fbx.meta index 8308d80..be363a5 100644 --- a/Assets/Quiz/Models/Lobby/EndTable.fbx.meta +++ b/Assets/Quiz/Models/Lobby/EndTable.fbx.meta @@ -31,7 +31,7 @@ ModelImporter: animationWrapMode: 0 extraExposedTransformPaths: [] extraUserProperties: - - '#BAKERY{"meshName":["Cube"],"padding":[25],"unwrapper":[0]}' + - '#BAKERY{"meshName":["Cube"],"padding":[28],"unwrapper":[0]}' clipAnimations: [] isReadable: 0 meshes: diff --git a/Assets/Quiz/Models/NoPoints/NoPointsTrophy.fbx b/Assets/Quiz/Models/NoPoints/NoPointsTrophy.fbx new file mode 100644 index 0000000..ed6c53b Binary files /dev/null and b/Assets/Quiz/Models/NoPoints/NoPointsTrophy.fbx differ diff --git a/Assets/Quiz/Models/NoPoints/NoPointsTrophy.fbx.meta b/Assets/Quiz/Models/NoPoints/NoPointsTrophy.fbx.meta new file mode 100644 index 0000000..ccb53e8 --- /dev/null +++ b/Assets/Quiz/Models/NoPoints/NoPointsTrophy.fbx.meta @@ -0,0 +1,109 @@ +fileFormatVersion: 2 +guid: b62c0ec4025b4d14a87b276f5269ea5f +ModelImporter: + serializedVersion: 22200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Models/OfficeChair.fbx b/Assets/Quiz/Models/OfficeChair.fbx new file mode 100644 index 0000000..f751ac7 Binary files /dev/null and b/Assets/Quiz/Models/OfficeChair.fbx differ diff --git a/Assets/Quiz/Models/OfficeChair.fbx.meta b/Assets/Quiz/Models/OfficeChair.fbx.meta new file mode 100644 index 0000000..3b3b917 --- /dev/null +++ b/Assets/Quiz/Models/OfficeChair.fbx.meta @@ -0,0 +1,109 @@ +fileFormatVersion: 2 +guid: 4484e3331bc52724593257a69e2553b8 +ModelImporter: + serializedVersion: 22200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Prefabs/CorridorWall.prefab b/Assets/Quiz/Prefabs/CorridorWall.prefab new file mode 100644 index 0000000..aa318e9 --- /dev/null +++ b/Assets/Quiz/Prefabs/CorridorWall.prefab @@ -0,0 +1,92 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &3651339275059786394 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} + propertyPath: m_LocalPosition.x + value: -28 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} + propertyPath: m_LocalPosition.y + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} + propertyPath: m_LocalPosition.z + value: 5.5 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000003774895 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} + propertyPath: m_Name + value: CorridorWall + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} + insertIndex: -1 + addedObject: {fileID: 1474013086938093665} + m_SourcePrefab: {fileID: 100100000, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} +--- !u!1 &4498322420252528587 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} + m_PrefabInstance: {fileID: 3651339275059786394} + m_PrefabAsset: {fileID: 0} +--- !u!65 &1474013086938093665 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4498322420252528587} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 0.01, y: 12, z: 2.800001} + m_Center: {x: 0.050000668, y: 6, z: 0.00000035762787} diff --git a/Assets/Quiz/Prefabs/CorridorWall.prefab.meta b/Assets/Quiz/Prefabs/CorridorWall.prefab.meta new file mode 100644 index 0000000..a52e4bb --- /dev/null +++ b/Assets/Quiz/Prefabs/CorridorWall.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: acde36bc75391a540a76c589339eeb32 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Prefabs/IndustrialLamp.prefab b/Assets/Quiz/Prefabs/IndustrialLamp.prefab new file mode 100644 index 0000000..60ca87a --- /dev/null +++ b/Assets/Quiz/Prefabs/IndustrialLamp.prefab @@ -0,0 +1,146 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &542809459100716633 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8055001841607343021} + - component: {fileID: 3333092910885952640} + m_Layer: 0 + m_Name: PointLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8055001841607343021 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 542809459100716633} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: 0.70710576, z: -0, w: 0.70710784} + m_LocalPosition: {x: -0, y: -0, z: 0.1726} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7797344969400887727} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3333092910885952640 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 542809459100716633} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 57f24a4aaa0761b45ba25e7e5108e2c7, type: 3} + m_Name: + m_EditorClassIdentifier: + UID: 661693733 + color: {r: 1, g: 1, b: 1, a: 1} + intensity: 1 + shadowSpread: 0.05 + cutoff: 10 + realisticFalloff: 0 + legacySampling: 1 + samples: 8 + projMode: 0 + cookie: {fileID: 0} + angle: 30 + innerAngle: 0 + cubemap: {fileID: 0} + iesFile: {fileID: 0} + bitmask: 1 + bakeToIndirect: 0 + shadowmask: 0 + shadowmaskFalloff: 0 + indirectIntensity: 1 + falloffMinRadius: 1 + shadowmaskGroupID: 0 + directionMode: 0 + maskChannel: -1 +--- !u!1001 &7763927089286008388 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} + propertyPath: m_LocalPosition.x + value: -2 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} + propertyPath: m_LocalPosition.y + value: 1.5 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} + propertyPath: m_LocalPosition.z + value: 0.000005954502 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} + propertyPath: m_LocalRotation.w + value: -0.70710367 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} + propertyPath: m_LocalRotation.x + value: -0.000000026692438 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} + propertyPath: m_LocalRotation.y + value: -0.7071099 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} + propertyPath: m_LocalRotation.z + value: -0.000000026692863 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: -269.999 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 1ede16ef59ea59a45abdc8068755a357, type: 2} + - target: {fileID: -7511558181221131132, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} + propertyPath: m_Materials.Array.data[1] + value: + objectReference: {fileID: 2100000, guid: 4d93572e13ca9ce489fe617e57fe7930, type: 2} + - target: {fileID: 919132149155446097, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} + propertyPath: m_Name + value: IndustrialLamp (4) + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} + insertIndex: -1 + addedObject: {fileID: 8055001841607343021} + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} +--- !u!4 &7797344969400887727 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} + m_PrefabInstance: {fileID: 7763927089286008388} + m_PrefabAsset: {fileID: 0} diff --git a/Assets/Quiz/Prefabs/IndustrialLamp.prefab.meta b/Assets/Quiz/Prefabs/IndustrialLamp.prefab.meta new file mode 100644 index 0000000..db45257 --- /dev/null +++ b/Assets/Quiz/Prefabs/IndustrialLamp.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 87958fc281472354fb5c86b6da9b46fa +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Prefabs/NoPoints/AnswerInfoTile.prefab b/Assets/Quiz/Prefabs/NoPoints/AnswerInfoTile.prefab index b356686..b08da2e 100644 --- a/Assets/Quiz/Prefabs/NoPoints/AnswerInfoTile.prefab +++ b/Assets/Quiz/Prefabs/NoPoints/AnswerInfoTile.prefab @@ -61,15 +61,15 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.2735849, g: 0.2735849, b: 0.2735849, a: 1} + m_Color: {r: 0.6039216, g: 0.9490197, b: 1, a: 0.30588236} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 0 + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -77,7 +77,7 @@ MonoBehaviour: m_FillClockwise: 1 m_FillOrigin: 0 m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 + m_PixelsPerUnitMultiplier: 0.08 --- !u!114 &4618688362851603960 MonoBehaviour: m_ObjectHideFlags: 0 @@ -218,11 +218,11 @@ MonoBehaviour: m_faceColor: serializedVersion: 2 rgba: 4294967295 - m_fontSize: 128 + m_fontSize: 64 m_fontSizeBase: 36 m_fontWeight: 400 m_enableAutoSizing: 1 - m_fontSizeMin: 128 + m_fontSizeMin: 64 m_fontSizeMax: 384 m_fontStyle: 0 m_HorizontalAlignment: 2 @@ -254,7 +254,7 @@ MonoBehaviour: m_VertexBufferAutoSizeReduction: 0 m_useMaxVisibleDescender: 1 m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} + m_margin: {x: 20, y: 20, z: 20, w: 20} m_isUsingLegacyAnimationComponent: 0 m_isVolumetricText: 0 m_hasFontAssetChanged: 0 diff --git a/Assets/Quiz/Prefabs/NoPoints/DeskManager.prefab b/Assets/Quiz/Prefabs/NoPoints/DeskManager.prefab new file mode 100644 index 0000000..150bbb5 --- /dev/null +++ b/Assets/Quiz/Prefabs/NoPoints/DeskManager.prefab @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &6812330130097005368 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3025554242730436730} + - component: {fileID: 3641202643626132809} + - component: {fileID: 9102503068247604632} + m_Layer: 0 + m_Name: DeskManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3025554242730436730 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6812330130097005368} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3641202643626132809 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6812330130097005368} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 49ba8138bafa3df4fb2a0f99842d8768, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 9102503068247604632} + playerScreens: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} +--- !u!114 &9102503068247604632 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6812330130097005368} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 2 + serializedProgramAsset: {fileID: 11400000, guid: 38e58b2c6ec82a540b5c26f7c771a794, type: 2} + programSource: {fileID: 11400000, guid: f105e1f1c6b2fe14786ff87c06b7adf4, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 diff --git a/Assets/Quiz/Prefabs/NoPoints/DeskManager.prefab.meta b/Assets/Quiz/Prefabs/NoPoints/DeskManager.prefab.meta new file mode 100644 index 0000000..fa7a7b4 --- /dev/null +++ b/Assets/Quiz/Prefabs/NoPoints/DeskManager.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ca60051a13afba44fbb404c7a714cf65 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Prefabs/NoPoints/PlayerScreen.prefab b/Assets/Quiz/Prefabs/NoPoints/PlayerScreen.prefab new file mode 100644 index 0000000..3469556 --- /dev/null +++ b/Assets/Quiz/Prefabs/NoPoints/PlayerScreen.prefab @@ -0,0 +1,1663 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2024148484739527143 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2057165422975922020} + - component: {fileID: 3297272132795370398} + - component: {fileID: 273696054788786958} + m_Layer: 0 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2057165422975922020 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2024148484739527143} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3716415793365571919} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 600, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3297272132795370398 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2024148484739527143} + m_CullTransparentMesh: 1 +--- !u!114 &273696054788786958 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2024148484739527143} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Unclaimed + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 36 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &2308783395970571873 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8346188081186406468} + - component: {fileID: 926850523716670472} + - component: {fileID: 7878560134436543613} + m_Layer: 0 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8346188081186406468 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2308783395970571873} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3662269154795675314} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &926850523716670472 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2308783395970571873} + m_CullTransparentMesh: 1 +--- !u!114 &7878560134436543613 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2308783395970571873} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "\u200B" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 72 + m_fontSizeBase: 14 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 0 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 1 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &2737420868954809884 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4543960930793675888} + - component: {fileID: 1056501917747416874} + - component: {fileID: 4878233961602180523} + m_Layer: 0 + m_Name: InputRow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &4543960930793675888 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2737420868954809884} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7951387167283517149} + - {fileID: 4546179431493546672} + m_Father: {fileID: 3716415793365571919} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 300, y: -75.22} + m_SizeDelta: {x: 600, y: 70} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1056501917747416874 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2737420868954809884} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 10 + m_Right: 10 + m_Top: 10 + m_Bottom: 10 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &4878233961602180523 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2737420868954809884} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &2979866248588625033 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4432893219812820625} + - component: {fileID: 7164655092032200304} + - component: {fileID: 4160707210316029505} + m_Layer: 0 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4432893219812820625 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2979866248588625033} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2445452320142851734} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7164655092032200304 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2979866248588625033} + m_CullTransparentMesh: 1 +--- !u!114 &4160707210316029505 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2979866248588625033} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Claim + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 44.75 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &3278418850886979727 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4939662888192960213} + - component: {fileID: 7423932798302153612} + - component: {fileID: 8224181693025657970} + m_Layer: 0 + m_Name: SuggestionList + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4939662888192960213 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3278418850886979727} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3716415793365571919} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 600, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &7423932798302153612 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3278418850886979727} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: 1 + m_LayoutPriority: 1 +--- !u!114 &8224181693025657970 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3278418850886979727} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &4629521715708032355 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4546179431493546672} + - component: {fileID: 698758598353584518} + - component: {fileID: 3692739284170986421} + - component: {fileID: 8927692616018867817} + - component: {fileID: 7723045755234519577} + m_Layer: 0 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4546179431493546672 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4629521715708032355} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3378828649375978054} + m_Father: {fileID: 4543960930793675888} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 540, y: -35} + m_SizeDelta: {x: 100, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &698758598353584518 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4629521715708032355} + m_CullTransparentMesh: 1 +--- !u!114 &3692739284170986421 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4629521715708032355} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.44001427, g: 0.9056604, b: 0.51322, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &8927692616018867817 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4629521715708032355} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 3692739284170986421} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 5036292086828114111} + m_TargetAssemblyTypeName: + m_MethodName: SendCustomEvent + m_Mode: 5 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: HandleSendButtonPress + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &7723045755234519577 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4629521715708032355} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 100 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &4797528878629505869 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2445452320142851734} + - component: {fileID: 6542457408607677422} + - component: {fileID: 6372714776671193989} + - component: {fileID: 5135837117263825464} + - component: {fileID: 7899076549845947600} + m_Layer: 0 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2445452320142851734 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4797528878629505869} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4432893219812820625} + m_Father: {fileID: 3716415793365571919} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 600, y: 0} + m_Pivot: {x: 0.5, y: 0} +--- !u!222 &6542457408607677422 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4797528878629505869} + m_CullTransparentMesh: 1 +--- !u!114 &6372714776671193989 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4797528878629505869} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 2100000, guid: c9a75b790a45e0447bc87a8b5827d764, type: 2} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &5135837117263825464 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4797528878629505869} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 6372714776671193989} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 5036292086828114111} + m_TargetAssemblyTypeName: + m_MethodName: SendCustomEvent + m_Mode: 5 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: HandleClaimButtonPress + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &7899076549845947600 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4797528878629505869} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: 50 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &5462303266958129892 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 557975278052010855} + - component: {fileID: 408607411156130189} + - component: {fileID: 9212818341041154999} + - component: {fileID: 7878852752190796547} + m_Layer: 0 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &557975278052010855 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5462303266958129892} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3662269154795675314} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &408607411156130189 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5462303266958129892} + m_CullTransparentMesh: 1 +--- !u!114 &9212818341041154999 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5462303266958129892} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Suggest an answer... + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 2150773298 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 33.1 + m_fontSizeBase: 14 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 2 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 0 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 1 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &7878852752190796547 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5462303266958129892} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 1 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &7633606338643260750 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7951387167283517149} + - component: {fileID: 8121517649527495704} + - component: {fileID: 8060766842135696868} + - component: {fileID: 7582453958296444560} + - component: {fileID: 1556253795167308342} + m_Layer: 0 + m_Name: InputField (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7951387167283517149 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7633606338643260750} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3662269154795675314} + m_Father: {fileID: 4543960930793675888} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 250, y: -35} + m_SizeDelta: {x: 480, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8121517649527495704 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7633606338643260750} + m_CullTransparentMesh: 1 +--- !u!114 &8060766842135696868 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7633606338643260750} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &7582453958296444560 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7633606338643260750} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 8060766842135696868} + m_TextViewport: {fileID: 3662269154795675314} + m_TextComponent: {fileID: 7878560134436543613} + m_Placeholder: {fileID: 9212818341041154999} + m_VerticalScrollbar: {fileID: 0} + m_VerticalScrollbarEventHandler: {fileID: 0} + m_LayoutGroup: {fileID: 0} + m_ScrollSensitivity: 1 + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_HideSoftKeyboard: 0 + m_CharacterValidation: 0 + m_RegexValue: + m_GlobalPointSize: 14 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: [] + m_OnSubmit: + m_PersistentCalls: + m_Calls: [] + m_OnSelect: + m_PersistentCalls: + m_Calls: [] + m_OnDeselect: + m_PersistentCalls: + m_Calls: [] + m_OnTextSelection: + m_PersistentCalls: + m_Calls: [] + m_OnEndTextSelection: + m_PersistentCalls: + m_Calls: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_OnTouchScreenKeyboardStatusChanged: + m_PersistentCalls: + m_Calls: [] + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 + m_RichText: 1 + m_GlobalFontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_OnFocusSelectAll: 1 + m_ResetOnDeActivation: 1 + m_RestoreOriginalTextOnEscape: 1 + m_isRichTextEditingAllowed: 0 + m_LineLimit: 0 + m_InputValidator: {fileID: 0} +--- !u!114 &1556253795167308342 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7633606338643260750} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &7674615891777835683 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3662269154795675314} + - component: {fileID: 7791829887425781138} + m_Layer: 0 + m_Name: Text Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3662269154795675314 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7674615891777835683} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 557975278052010855} + - {fileID: 8346188081186406468} + m_Father: {fileID: 7951387167283517149} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &7791829887425781138 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7674615891777835683} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: {x: -8, y: -5, z: -8, w: -5} + m_Softness: {x: 0, y: 0} +--- !u!1 &8379790806586723610 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3716415793365571919} + - component: {fileID: 7108692838769143914} + - component: {fileID: 1831648391729385026} + - component: {fileID: 2719447513721024038} + - component: {fileID: 4833923604363845078} + - component: {fileID: 7192476002663072915} + - component: {fileID: 5036292086828114111} + - component: {fileID: 5891771235192546703} + - component: {fileID: 1334921770929932144} + - component: {fileID: 7498268152467676155} + m_Layer: 0 + m_Name: PlayerScreen + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3716415793365571919 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8379790806586723610} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.001, y: 0.001, z: 0.001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2057165422975922020} + - {fileID: 4543960930793675888} + - {fileID: 4939662888192960213} + - {fileID: 2445452320142851734} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 1.163} + m_SizeDelta: {x: 600, y: 600} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &7108692838769143914 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8379790806586723610} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &1831648391729385026 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8379790806586723610} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!114 &2719447513721024038 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8379790806586723610} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &4833923604363845078 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8379790806586723610} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1533785930, guid: 661092b4961be7145bfbe56e1e62337b, type: 3} + m_Name: + m_EditorClassIdentifier: + AllowFocusView: 1 +--- !u!114 &7192476002663072915 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8379790806586723610} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56226d676b0e8a94e9461ad87a1c012e, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: + - Name: claimedPlayer + Entry: 6 + Data: + _udonSharpBackingUdonBehaviour: {fileID: 5036292086828114111} + playerNameDisplay: {fileID: 273696054788786958} + claimButtonText: {fileID: 4160707210316029505} + suggestionInputField: {fileID: 7582453958296444560} + deskManager: {fileID: 0} + inputRow: {fileID: 2737420868954809884} + suggestionDisplay: {fileID: 3278418850886979727} + suggestionPrefab: {fileID: 1120341787029746481, guid: 610890d2b221dfa4b9921aab6bc68010, type: 3} + claimedPlayerId: 0 +--- !u!114 &5036292086828114111 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8379790806586723610} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 2 + serializedProgramAsset: {fileID: 11400000, guid: 14514685a562edb4e839700a8ba17202, type: 2} + programSource: {fileID: 11400000, guid: e4d9c8e9ec3e9af4e9bbd288b60f982f, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!114 &5891771235192546703 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8379790806586723610} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!222 &1334921770929932144 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8379790806586723610} + m_CullTransparentMesh: 1 +--- !u!114 &7498268152467676155 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8379790806586723610} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 2100000, guid: c9a75b790a45e0447bc87a8b5827d764, type: 2} + m_Color: {r: 0, g: 0, b: 0, a: 0.84313726} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &9199933441131759322 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3378828649375978054} + - component: {fileID: 2311708741097392020} + - component: {fileID: 3403168220198988084} + m_Layer: 0 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3378828649375978054 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9199933441131759322} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4546179431493546672} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2311708741097392020 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9199933441131759322} + m_CullTransparentMesh: 1 +--- !u!114 &3403168220198988084 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9199933441131759322} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Send + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} diff --git a/Assets/Quiz/Prefabs/NoPoints/PlayerScreen.prefab.meta b/Assets/Quiz/Prefabs/NoPoints/PlayerScreen.prefab.meta new file mode 100644 index 0000000..7a5d13b --- /dev/null +++ b/Assets/Quiz/Prefabs/NoPoints/PlayerScreen.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 45eee8952e906cc48aeccfacdeaef466 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Prefabs/NoPoints/Suggestion.prefab b/Assets/Quiz/Prefabs/NoPoints/Suggestion.prefab new file mode 100644 index 0000000..2c6d843 --- /dev/null +++ b/Assets/Quiz/Prefabs/NoPoints/Suggestion.prefab @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1120341787029746481 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4520190631650258332} + - component: {fileID: 6442813775354838617} + - component: {fileID: 3160408695904730396} + m_Layer: 0 + m_Name: Suggestion + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4520190631650258332 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1120341787029746481} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 600, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6442813775354838617 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1120341787029746481} + m_CullTransparentMesh: 1 +--- !u!114 &3160408695904730396 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1120341787029746481} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 36 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} diff --git a/Assets/Quiz/Prefabs/NoPoints/Suggestion.prefab.meta b/Assets/Quiz/Prefabs/NoPoints/Suggestion.prefab.meta new file mode 100644 index 0000000..66956c2 --- /dev/null +++ b/Assets/Quiz/Prefabs/NoPoints/Suggestion.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 610890d2b221dfa4b9921aab6bc68010 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/QuizScene.unity b/Assets/Quiz/QuizScene.unity index d4b5748..e8f1b1e 100644 --- a/Assets/Quiz/QuizScene.unity +++ b/Assets/Quiz/QuizScene.unity @@ -32,11 +32,11 @@ RenderSettings: m_FlareFadeSpeed: 3 m_HaloTexture: {fileID: 0} m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 + m_DefaultReflectionMode: 1 m_DefaultReflectionResolution: 128 m_ReflectionBounces: 1 m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} + m_CustomReflection: {fileID: 8900000, guid: c290f0dc1f7a6964189bb5df7c62a504, type: 3} m_Sun: {fileID: 0} m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 @@ -97,7 +97,7 @@ LightmapSettings: m_ExportTrainingData: 0 m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 112000000, guid: bec44cf7632dbc245a9c3712730cbdd2, type: 2} + m_LightingDataAsset: {fileID: 112000002, guid: a95df8239daedb8489d82c9fcf2fc126, type: 2} m_LightingSettings: {fileID: 1610029753} --- !u!196 &4 NavMeshSettings: @@ -197,6 +197,117 @@ Transform: m_CorrespondingSourceObject: {fileID: 1863247904194952148, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} m_PrefabInstance: {fileID: 2148583} m_PrefabAsset: {fileID: 0} +--- !u!1 &8066934 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8066935} + - component: {fileID: 8066937} + - component: {fileID: 8066936} + m_Layer: 0 + m_Name: Question9 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8066935 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8066934} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1177781895} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8066936 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8066934} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 2 + serializedProgramAsset: {fileID: 11400000, guid: 1a3121a400bb97a4798c930d280db074, type: 2} + programSource: {fileID: 11400000, guid: d18e451e2b012944899ec95f8a380e52, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!114 &8066937 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8066934} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66abc497563d35d46b551af57cb77e18, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 8066936} + questionTitle: ICONIC ALBUM COVERS + questionDescription: We are going to give you clues to twelve iconic album covers, + with the name of the singer or band in brackets. We would like you to give us + the title of the album. + answerInfo: + - 1. A baby swims for a dollar (Nirvana) + - 2. Public Enemy behind bars (Public Enemy) + - 3. A man smoking (Arctic Monkeys) + - 4. Two greyhounds (Blur) + - 5. Four men seated at a table in the desert (Muse) + - 6. Michael Jackson reclining in a white suit (Michael Jackson) + - 7. The original cover featured a working zip- per (The Rolling Stones) + - 8. Visual representation of the first pulsar discovered (Joy Division) + - 9. Paul Simonon smashing his bass on stage (The Clash) + - 10. A red cap in the back pocket of a pair of jeans (Bruce Springsteen) + - 11. A man dressed as a teddy bear sits on a bench (Kanye West) + - 12. A prism divides light (Pink Floyd) + answerText: + - 1. NEVERMIND + - 2. IT TAKES A NATION OF MILLIONS TO HOLD US BACK + - 3. WHATEVER PEOPLE SAY I AM, THAT'S WHAT IM NOT + - 4. PARKLIFE + - 5. BLACK HOLES AND REVELATIONS + - 6. THRILLER + - 7. STICKY FINGERS + - 8. UNKNOWN PLEASURES + - 9. LONDON CALLING + - 10. BORN IN THE USA + - 11. THE COLLEGE DROPOUT + - 12. THE DARK SIDE OF THE MOON + answerPoints: 1500000002000000050000000d000000020000001400000009000000040000000600000012000000000000001e000000 --- !u!1001 &15354955 PrefabInstance: m_ObjectHideFlags: 0 @@ -263,21 +374,146 @@ Transform: m_CorrespondingSourceObject: {fileID: 1863247904194952148, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} m_PrefabInstance: {fileID: 15354955} m_PrefabAsset: {fileID: 0} ---- !u!1 &19161767 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} - m_PrefabInstance: {fileID: 473457878} - m_PrefabAsset: {fileID: 0} ---- !u!1 &32070979 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 3579776820605786274, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 1121960421} - m_PrefabAsset: {fileID: 0} --- !u!23 &32070981 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 7547418677490389003, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 1121960421} m_PrefabAsset: {fileID: 0} +--- !u!1 &32952642 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: b62c0ec4025b4d14a87b276f5269ea5f, type: 3} + m_PrefabInstance: {fileID: 1354535475} + m_PrefabAsset: {fileID: 0} +--- !u!65 &32952646 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 32952642} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 0.12403906, y: 0.36201942, z: 0.12403906} + m_Center: {x: -0.00000094622374, y: 0.18100983, z: -0.00000094622374} +--- !u!114 &32952647 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 32952642} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1804438810, guid: 661092b4961be7145bfbe56e1e62337b, type: 3} + m_Name: + m_EditorClassIdentifier: + MomentumTransferMethod: 0 + DisallowTheft: 0 + ExactGun: {fileID: 0} + ExactGrip: {fileID: 0} + allowManipulationWhenEquipped: 0 + orientation: 0 + AutoHold: 0 + InteractionText: + UseText: Use + useEventBroadcastType: 0 + UseDownEventName: + UseUpEventName: + pickupDropEventBroadcastType: 0 + PickupEventName: + DropEventName: + ThrowVelocityBoostMinSpeed: 1 + ThrowVelocityBoostScale: 1 + currentlyHeldBy: {fileID: 0} + pickupable: 1 + proximity: 2 + version: 1 +--- !u!54 &32952648 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 32952642} + serializedVersion: 4 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!114 &32952649 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 32952642} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1783056023, guid: 661092b4961be7145bfbe56e1e62337b, type: 3} + m_Name: + m_EditorClassIdentifier: + AllowCollisionOwnershipTransfer: 1 + ForceKinematicOnRemote: 0 +--- !u!1 &47997570 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 47997571} + m_Layer: 0 + m_Name: SecondCorridor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &47997571 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 47997570} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2123724542} + - {fileID: 369696551} + - {fileID: 446262685} + - {fileID: 992013940} + m_Father: {fileID: 1083390546} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &50750186 GameObject: m_ObjectHideFlags: 0 @@ -308,13 +544,10 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1338781419} + - {fileID: 1594525690} + - {fileID: 1864825429} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &54118399 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1337646829457088878, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} - m_PrefabInstance: {fileID: 267155291} - m_PrefabAsset: {fileID: 0} --- !u!1001 &57583866 PrefabInstance: m_ObjectHideFlags: 0 @@ -389,11 +622,6 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: c41fbbe45cf06584d86ed41a751ef268, type: 3} m_PrefabInstance: {fileID: 57583866} m_PrefabAsset: {fileID: 0} ---- !u!1 &64486097 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9189557463581648220, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 445112381} - m_PrefabAsset: {fileID: 0} --- !u!1001 &65376844 PrefabInstance: m_ObjectHideFlags: 0 @@ -754,9 +982,9 @@ MonoBehaviour: m_Extent: {x: 9.847621, y: 3.9696257, z: 7.404206} adaptiveRes: 0 voxelsPerUnit: 0.5 - resolutionX: 59 - resolutionY: 24 - resolutionZ: 44 + resolutionX: 20 + resolutionY: 8 + resolutionZ: 15 encoding: 0 shadowmaskEncoding: 0 firstLightIsAlwaysAlpha: 0 @@ -783,11 +1011,73 @@ Transform: m_Children: [] m_Father: {fileID: 1338781419} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &70118288 stripped +--- !u!1 &77699394 GameObject: - m_CorrespondingSourceObject: {fileID: 9189557463581648220, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 3663352991328551858} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 77699396} + - component: {fileID: 77699395} + m_Layer: 0 + m_Name: SpotLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &77699395 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 77699394} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 57f24a4aaa0761b45ba25e7e5108e2c7, type: 3} + m_Name: + m_EditorClassIdentifier: + UID: -358973351 + color: {r: 0.9245283, g: 0.872153, b: 0.745728, a: 1} + intensity: 2 + shadowSpread: 0.05 + cutoff: 20 + realisticFalloff: 0 + legacySampling: 1 + samples: 8 + projMode: 1 + cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} + angle: 179 + innerAngle: 0 + cubemap: {fileID: 0} + iesFile: {fileID: 0} + bitmask: 1 + bakeToIndirect: 0 + shadowmask: 0 + shadowmaskFalloff: 0 + indirectIntensity: 1 + falloffMinRadius: 1 + shadowmaskGroupID: 0 + directionMode: 0 + maskChannel: -1 +--- !u!4 &77699396 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 77699394} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: 0.70710576, z: -0, w: 0.70710784} + m_LocalPosition: {x: 6.663, y: 3.0555, z: -21.5007} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} --- !u!1 &81331872 GameObject: m_ObjectHideFlags: 0 @@ -1073,6 +1363,89 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 87994260} m_CullTransparentMesh: 1 +--- !u!1001 &88149414 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1743423422} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} + propertyPath: m_LocalPosition.x + value: -9.4999695 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} + propertyPath: m_LocalPosition.y + value: 0.10000014 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} + propertyPath: m_LocalPosition.z + value: -29.00004 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} + propertyPath: m_LocalRotation.w + value: 0.0000029504295 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} + propertyPath: m_LocalRotation.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 180 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: f06733e6df5d5584b9e5c62de0310e00, type: 2} + - target: {fileID: 919132149155446097, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} + propertyPath: m_Name + value: GameRoom + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} + insertIndex: -1 + addedObject: {fileID: 2072299826} + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} +--- !u!4 &88149415 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} + m_PrefabInstance: {fileID: 88149414} + m_PrefabAsset: {fileID: 0} +--- !u!1 &88149416 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} + m_PrefabInstance: {fileID: 88149414} + m_PrefabAsset: {fileID: 0} +--- !u!23 &88149417 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} + m_PrefabInstance: {fileID: 88149414} + m_PrefabAsset: {fileID: 0} --- !u!1 &90357859 GameObject: m_ObjectHideFlags: 0 @@ -1442,6 +1815,83 @@ GameObject: m_CorrespondingSourceObject: {fileID: 2880588319250313143, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 1121960421} m_PrefabAsset: {fileID: 0} +--- !u!1001 &139112631 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 303549434} + m_Modifications: + - target: {fileID: 7457516078518891285, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_Name + value: IndustrialLamp (1) + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalPosition.x + value: 1.4999 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalPosition.y + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalPosition.z + value: -14 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071078 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalRotation.x + value: -0.000000026692952 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalRotation.y + value: -0.7071058 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalRotation.z + value: 0.000000026692378 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: -90 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} +--- !u!4 &139112632 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + m_PrefabInstance: {fileID: 139112631} + m_PrefabAsset: {fileID: 0} +--- !u!1 &139112633 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 542809459100716633, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + m_PrefabInstance: {fileID: 139112631} + m_PrefabAsset: {fileID: 0} +--- !u!1 &139112634 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 7457516078518891285, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + m_PrefabInstance: {fileID: 139112631} + m_PrefabAsset: {fileID: 0} +--- !u!23 &139112635 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: 8970773725826667200, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + m_PrefabInstance: {fileID: 139112631} + m_PrefabAsset: {fileID: 0} --- !u!1001 &145950628 PrefabInstance: m_ObjectHideFlags: 0 @@ -1538,21 +1988,73 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: 6747071118349076704, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 3663352991328551858} m_PrefabAsset: {fileID: 0} ---- !u!1 &169504786 stripped +--- !u!1 &178208185 GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 75a87d382e24fff4c9574ad4107b134b, type: 3} - m_PrefabInstance: {fileID: 1939462321} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} ---- !u!1 &176401568 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1337646829457088878, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} - m_PrefabInstance: {fileID: 1641041688} + serializedVersion: 6 + m_Component: + - component: {fileID: 178208186} + - component: {fileID: 178208187} + m_Layer: 0 + m_Name: PointLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &178208186 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} ---- !u!1 &180390131 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1337646829457088878, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} - m_PrefabInstance: {fileID: 295151166} + m_GameObject: {fileID: 178208185} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -1, z: -0, w: 0.0000029504295} + m_LocalPosition: {x: -11.974779, y: 6.6928186, z: -10.745737} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 303549434} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &178208187 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 178208185} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 57f24a4aaa0761b45ba25e7e5108e2c7, type: 3} + m_Name: + m_EditorClassIdentifier: + UID: -919113235 + color: {r: 0.89411765, g: 0.9764706, b: 1, a: 1} + intensity: 1 + shadowSpread: 0.05 + cutoff: 30 + realisticFalloff: 0 + legacySampling: 1 + samples: 8 + projMode: 0 + cookie: {fileID: 0} + angle: 30 + innerAngle: 0 + cubemap: {fileID: 0} + iesFile: {fileID: 0} + bitmask: 1 + bakeToIndirect: 0 + shadowmask: 0 + shadowmaskFalloff: 0 + indirectIntensity: 1 + falloffMinRadius: 1 + shadowmaskGroupID: 0 + directionMode: 0 + maskChannel: -1 --- !u!1 &182613272 stripped GameObject: m_CorrespondingSourceObject: {fileID: 100590131341888120, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -1563,11 +2065,6 @@ GameObject: m_CorrespondingSourceObject: {fileID: 100590131341888120, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 1121960421} m_PrefabAsset: {fileID: 0} ---- !u!1 &199916733 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1337646829457088878, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} - m_PrefabInstance: {fileID: 400902254} - m_PrefabAsset: {fileID: 0} --- !u!1 &200905685 GameObject: m_ObjectHideFlags: 0 @@ -1643,11 +2140,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 200905685} m_CullTransparentMesh: 1 ---- !u!1 &207070945 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1337646829457088878, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} - m_PrefabInstance: {fileID: 1362277936} - m_PrefabAsset: {fileID: 0} --- !u!1001 &213150830 PrefabInstance: m_ObjectHideFlags: 0 @@ -1714,6 +2206,321 @@ Transform: m_CorrespondingSourceObject: {fileID: 1863247904194952148, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} m_PrefabInstance: {fileID: 213150830} m_PrefabAsset: {fileID: 0} +--- !u!1 &213412048 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 213412049} + - component: {fileID: 213412052} + - component: {fileID: 213412051} + - component: {fileID: 213412055} + - component: {fileID: 213412054} + - component: {fileID: 213412053} + - component: {fileID: 213412056} + m_Layer: 0 + m_Name: Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &213412049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 213412048} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -1.5, y: 0.754, z: 0} + m_LocalScale: {x: 0.0304758, y: 0.022815216, z: 0.022815216} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1733785282} + m_Father: {fileID: 1375130216} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &213412051 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 213412048} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 156868ebaeb510e49b9e98d3432f84d8, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &213412052 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 213412048} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &213412053 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 213412048} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1783056023, guid: 661092b4961be7145bfbe56e1e62337b, type: 3} + m_Name: + m_EditorClassIdentifier: + AllowCollisionOwnershipTransfer: 1 + ForceKinematicOnRemote: 0 +--- !u!114 &213412054 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 213412048} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1804438810, guid: 661092b4961be7145bfbe56e1e62337b, type: 3} + m_Name: + m_EditorClassIdentifier: + MomentumTransferMethod: 0 + DisallowTheft: 0 + ExactGun: {fileID: 0} + ExactGrip: {fileID: 0} + allowManipulationWhenEquipped: 0 + orientation: 0 + AutoHold: 0 + InteractionText: + UseText: Use + useEventBroadcastType: 0 + UseDownEventName: + UseUpEventName: + pickupDropEventBroadcastType: 0 + PickupEventName: + DropEventName: + ThrowVelocityBoostMinSpeed: 1 + ThrowVelocityBoostScale: 1 + currentlyHeldBy: {fileID: 0} + pickupable: 1 + proximity: 2 + version: 1 +--- !u!54 &213412055 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 213412048} + serializedVersion: 4 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!65 &213412056 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 213412048} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 10, y: -0.01, z: 10} + m_Center: {x: 0, y: -0.0000038146973, z: 0} +--- !u!1 &218699819 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 218699820} + - component: {fileID: 218699822} + - component: {fileID: 218699821} + m_Layer: 0 + m_Name: Question5 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &218699820 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 218699819} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1177781895} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &218699821 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 218699819} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 2 + serializedProgramAsset: {fileID: 11400000, guid: 1a3121a400bb97a4798c930d280db074, type: 2} + programSource: {fileID: 11400000, guid: d18e451e2b012944899ec95f8a380e52, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!114 &218699822 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 218699819} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66abc497563d35d46b551af57cb77e18, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 218699821} + questionTitle: ISLANDS OF THE WORLD + questionDescription: 'Here is a list of clues to well-known + + islands around + the world. We would + + like you to tell us the name of the + + island described + by each clue please. + + In the case of islands which are part of + + a country, + we are looking for the name + + of the island itself, rather than the + + name + of the country, although some of + + the islands may be countries in their + + own + right' + answerInfo: + - 1. The largest and southernmost of the Channel Islands + - 2. One of the Galapagos Islands, which was the original home of Lonesome George + - 3. Canadian island which gave its name to a breed of working dog + - 4. Island which was awarded the George Cross in 1942 + - 5. Australian island state, discovered by a Dutch explorer in 1642 + - 6. French island, birthplace of Napoleon Bonaparte + - 7. The largest of Ireland's 'Aran Islands' + - 8. Island which is divided between Indonesia, Malaysia and Brunei + - 9. Largest island in the Mediterranean located at the tip of Italy + - 10. Large island country near Africa to which many species of lemur are indigenous + - 11. One of the world's largest islands, part of the Kingdom of Denmark + - 12. English name for the island of 'Rapa Nui', famed for its giant stone statues + answerText: + - 1. JERSEY + - 2. PINTA + - 3. NEWFOUNDLAND + - 4. MALTA + - 5. TASMANIA + - 6. CORSICA + - 7. INISHMORE + - 8. BORNEO + - 9. SICILY + - 10. MADAGASCAR + - 11. GREENLAND + - 12. EASTER ISLAND + answerPoints: 290000000100000009000000160000001c00000012000000000000000300000023000000150000000d0000001c000000 --- !u!1 &220095148 GameObject: m_ObjectHideFlags: 0 @@ -1854,11 +2661,6 @@ GameObject: m_CorrespondingSourceObject: {fileID: 7004038606463852389, guid: 844da2a9bfdfa474784b61993287bcc8, type: 3} m_PrefabInstance: {fileID: 497102803} m_PrefabAsset: {fileID: 0} ---- !u!1 &242024050 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 6515456391347357321, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 3663352991328551858} - m_PrefabAsset: {fileID: 0} --- !u!23 &242024053 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 3578079415854012088, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -2311,11 +3113,6 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 273509086} m_Mesh: {fileID: -5388294574167003846, guid: 58cb7a72284678249ab615e41dca85f1, type: 3} ---- !u!1 &274411456 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d51ae1dacdaaef642abce7df79a0f2f9, type: 3} - m_PrefabInstance: {fileID: 1790682403} - m_PrefabAsset: {fileID: 0} --- !u!1 &277019528 stripped GameObject: m_CorrespondingSourceObject: {fileID: 6935029945803984122, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -2326,11 +3123,6 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: 8880764824548044079, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 3663352991328551858} m_PrefabAsset: {fileID: 0} ---- !u!1 &278415026 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} - m_PrefabInstance: {fileID: 1813498669} - m_PrefabAsset: {fileID: 0} --- !u!1001 &281560271 PrefabInstance: m_ObjectHideFlags: 0 @@ -2349,7 +3141,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: 242ec4ca0ae9b8d4ea897a028f436065, type: 3} propertyPath: m_LocalPosition.z - value: -0.303 + value: -1.578 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: 242ec4ca0ae9b8d4ea897a028f436065, type: 3} propertyPath: m_LocalRotation.w @@ -2397,12 +3189,12 @@ PrefabInstance: m_AddedComponents: - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 242ec4ca0ae9b8d4ea897a028f436065, type: 3} insertIndex: -1 - addedObject: {fileID: 1959297856} + addedObject: {fileID: 1959297861} m_SourcePrefab: {fileID: 100100000, guid: 242ec4ca0ae9b8d4ea897a028f436065, type: 3} ---- !u!1 &284581924 stripped +--- !u!1 &284328717 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 1337646829457088878, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} - m_PrefabInstance: {fileID: 905496709} + m_CorrespondingSourceObject: {fileID: 542809459100716633, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + m_PrefabInstance: {fileID: 6641770535126847926} m_PrefabAsset: {fileID: 0} --- !u!1001 &285759822 PrefabInstance: @@ -2580,14 +3372,19 @@ MonoBehaviour: targetScore: 100 isCounting: 0 networkTargetScore: 100 - targetRenderer: {fileID: 999167989} propertyName: _DissolveAlpha0 + pointBarMaterial: {fileID: 2100000, guid: 0a7f557424e99564aadf76146dbd76f5, type: 2} + pointMeterMaterial: {fileID: 2100000, guid: e5e3830988904fb4e8ddda8116c9f883, type: 2} + screenMaterial: {fileID: 2100000, guid: 360a40a163e0f3347b5b14b9771d2ab5, type: 2} + platformMaterial: {fileID: 2100000, guid: b7744b7dccafd7c479db7f7db6f5e317, type: 2} + circlesMaterial: {fileID: 2100000, guid: 82f02b2138cfe1242990f0e41f2a7612, type: 2} baseSpeed: 15 scoreText: {fileID: 504183044} audioSource: {fileID: 285759832} pointsMeterBar: {fileID: 8300000, guid: 1a896a5f077c7f446afdb9ec02c0e571, type: 3} pointsMeterStops: {fileID: 8300000, guid: aa9a9ca9c2ab4804a9df72067943c5c3, type: 3} pointlessAnswer: {fileID: 8300000, guid: 81ec4b826e414c241bfdca0ccca12bdc, type: 3} + incorrectAnswer: {fileID: 8300000, guid: 0c921fa1348e428408ff19ea6f5b3a2a, type: 3} --- !u!114 &285759831 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2600,7 +3397,7 @@ MonoBehaviour: m_Script: {fileID: -617992517, guid: 661092b4961be7145bfbe56e1e62337b, type: 3} m_Name: m_EditorClassIdentifier: - Gain: 15 + Gain: 20 Far: 40 Near: 0 VolumetricRadius: 0 @@ -2956,6 +3753,135 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: 689256096079544507, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} m_PrefabInstance: {fileID: 295151166} m_PrefabAsset: {fileID: 0} +--- !u!1001 &302151436 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1743423422} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalScale.x + value: 0.016027614 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalScale.y + value: 0.016027616 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalScale.z + value: 0.016027616 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalPosition.x + value: 3.656335 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalPosition.y + value: 0.277 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalPosition.z + value: -16.647507 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.w + value: -0.33430052 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.x + value: -1.8557422e-15 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.y + value: 0.9424666 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.z + value: -5.2317583e-15 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 219.06 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: f45e687b234af6948b76b2622ed33647, type: 2} + - target: {fileID: 919132149155446097, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_Name + value: OfficeChair (1) + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 4484e3331bc52724593257a69e2553b8, type: 3} +--- !u!4 &302151437 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + m_PrefabInstance: {fileID: 302151436} + m_PrefabAsset: {fileID: 0} +--- !u!1 &302151438 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + m_PrefabInstance: {fileID: 302151436} + m_PrefabAsset: {fileID: 0} +--- !u!23 &302151439 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + m_PrefabInstance: {fileID: 302151436} + m_PrefabAsset: {fileID: 0} +--- !u!1 &303549433 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 303549434} + m_Layer: 0 + m_Name: Lighting + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &303549434 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 303549433} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: 1, z: -0, w: 0.0000029504295} + m_LocalPosition: {x: -9.4, y: 0.10000014, z: -29.1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 599447121} + - {fileID: 139112632} + - {fileID: 983550722} + - {fileID: 178208186} + - {fileID: 1673173618} + - {fileID: 1389625175} + m_Father: {fileID: 1743423422} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &304729489 PrefabInstance: m_ObjectHideFlags: 0 @@ -3030,6 +3956,11 @@ Transform: m_CorrespondingSourceObject: {fileID: 1863247904194952148, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} m_PrefabInstance: {fileID: 304729489} m_PrefabAsset: {fileID: 0} +--- !u!1 &333723323 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 100590131341888120, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 446262684} + m_PrefabAsset: {fileID: 0} --- !u!1001 &350653488 PrefabInstance: m_ObjectHideFlags: 0 @@ -3176,6 +4107,68 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &369696550 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 47997571} + m_Modifications: + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalPosition.x + value: -7.9499974 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalPosition.y + value: 0.099999905 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalPosition.z + value: -12.499999 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalRotation.w + value: 0.0000029504295 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalRotation.x + value: -1.1191047e-13 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalRotation.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalRotation.z + value: 0.00000003774896 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4498322420252528587, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_Name + value: CorridorWall (1) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: acde36bc75391a540a76c589339eeb32, type: 3} +--- !u!4 &369696551 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + m_PrefabInstance: {fileID: 369696550} + m_PrefabAsset: {fileID: 0} --- !u!1001 &382860427 PrefabInstance: m_ObjectHideFlags: 0 @@ -3254,11 +4247,6 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 2f5faf56eef0ad748ad331a95b4b2abc, type: 3} m_PrefabInstance: {fileID: 382860427} m_PrefabAsset: {fileID: 0} ---- !u!1 &382860429 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 2f5faf56eef0ad748ad331a95b4b2abc, type: 3} - m_PrefabInstance: {fileID: 382860427} - m_PrefabAsset: {fileID: 0} --- !u!23 &382860430 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 2f5faf56eef0ad748ad331a95b4b2abc, type: 3} @@ -3400,11 +4388,116 @@ MonoBehaviour: - YEREVAN - "ZAGRE\u0412" answerPoints: 2500000001000000010000001000000000000000040000003e0000000b000000040000002a000000040000000e00000000000000240000002a000000100000000200000028000000010000005d000000000000004100000001000000010000000e000000020000002700000062000000000000001b000000040000000800000042000000000000000000000001000000090000001e00000007000000000000000000000002000000010000000e00000002000000100000000000000003000000 ---- !u!1 &386455101 stripped +--- !u!1 &388563200 GameObject: - m_CorrespondingSourceObject: {fileID: 1337646829457088878, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} - m_PrefabInstance: {fileID: 444596391} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 388563201} + - component: {fileID: 388563203} + - component: {fileID: 388563202} + m_Layer: 0 + m_Name: Question13 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &388563201 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 388563200} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1177781895} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &388563202 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 388563200} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 2 + serializedProgramAsset: {fileID: 11400000, guid: 1a3121a400bb97a4798c930d280db074, type: 2} + programSource: {fileID: 11400000, guid: d18e451e2b012944899ec95f8a380e52, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!114 &388563203 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 388563200} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66abc497563d35d46b551af57cb77e18, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 388563202} + questionTitle: WINES AND THEIR REGIONS + questionDescription: The following are all wines or wine regions. We want to know + the name of the countries with which they are most closely associated. + answerInfo: + - CHAMPAGNE + - STELLENBOSCH + - DAO VALLEY + - CHIANTI + - HUNTER VALLEY + - RETSINA + - SANCERRE + - BAROLO + - LIEBFRAUMILCH + - MENDOZA + - TOKAJI + - RIOJA + answerText: + - FRANCE + - SOUTH AFRICA + - PORTUGAL + - ITALY + - AUSTRALIA + - GREECE + - FRANCE + - ITALY + - GERMANY + - ARGENTINA + - HUNGARY + - SPAIN + answerPoints: 5400000009000000040000003e0000001100000020000000240000000f0000005000000005000000070000002e000000 --- !u!1001 &400902254 PrefabInstance: m_ObjectHideFlags: 0 @@ -3489,80 +4582,6 @@ GameObject: m_CorrespondingSourceObject: {fileID: 8313676601306732379, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 1235844105} m_PrefabAsset: {fileID: 0} ---- !u!1001 &413934237 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1981248638} - m_Modifications: - - target: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} - propertyPath: m_LocalPosition.x - value: -27.95 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} - propertyPath: m_LocalPosition.y - value: 0.099999905 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} - propertyPath: m_LocalPosition.z - value: 5.499998 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} - propertyPath: m_LocalRotation.x - value: -0.00000003774895 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -7511558181221131132, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} - propertyPath: m_Enabled - value: 1 - objectReference: {fileID: 0} - - target: {fileID: -7511558181221131132, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} - propertyPath: m_Materials.Array.data[0] - value: - objectReference: {fileID: 2100000, guid: b9257d637744d15458654516d0135220, type: 2} - - target: {fileID: 919132149155446097, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} - propertyPath: m_Name - value: CorridorWall - objectReference: {fileID: 0} - - target: {fileID: 919132149155446097, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} - propertyPath: m_StaticEditorFlags - value: 2147483647 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} ---- !u!4 &413934238 stripped -Transform: - m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} - m_PrefabInstance: {fileID: 413934237} - m_PrefabAsset: {fileID: 0} --- !u!1001 &414844755 PrefabInstance: m_ObjectHideFlags: 0 @@ -3858,21 +4877,11 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} m_PrefabInstance: {fileID: 421169973} m_PrefabAsset: {fileID: 0} ---- !u!1 &428010771 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9077638431373897945, guid: 844da2a9bfdfa474784b61993287bcc8, type: 3} - m_PrefabInstance: {fileID: 1786457057} - m_PrefabAsset: {fileID: 0} --- !u!23 &428010774 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 1600512188104761576, guid: 844da2a9bfdfa474784b61993287bcc8, type: 3} m_PrefabInstance: {fileID: 1786457057} m_PrefabAsset: {fileID: 0} ---- !u!1 &429145264 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 3579776820605786274, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 2086896412} - m_PrefabAsset: {fileID: 0} --- !u!23 &429145266 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 7547418677490389003, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -4131,6 +5140,42 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: 6747071118349076704, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 445112381} m_PrefabAsset: {fileID: 0} +--- !u!1 &445776557 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 445776558} + m_Layer: 0 + m_Name: Props + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &445776558 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 445776557} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1851354687} + - {fileID: 1378939247} + - {fileID: 448309810} + - {fileID: 593901291} + - {fileID: 910520423} + m_Father: {fileID: 1743423422} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &445817681 GameObject: m_ObjectHideFlags: 0 @@ -4198,6 +5243,246 @@ Transform: m_Children: [] m_Father: {fileID: 1032527761} m_LocalEulerAnglesHint: {x: 70.756, y: -137.586, z: -180.993} +--- !u!1001 &446262684 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 47997571} + m_Modifications: + - target: {fileID: 223847633031129388, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 223847633031129388, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + - target: {fileID: 355342777818069682, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_text + value: studio 328 + objectReference: {fileID: 0} + - target: {fileID: 779405444076784686, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_text + value: studio 479 + objectReference: {fileID: 0} + - target: {fileID: 2128584790989480836, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 2128584790989480836, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + - target: {fileID: 2202015379683200006, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_text + value: Why can't I actually Taste the difference? A TRM8 investigation + objectReference: {fileID: 0} + - target: {fileID: 2202015379683200006, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_fontStyle + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2202015379683200006, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_isRightToLeft + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2704409226975317219, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 2704409226975317219, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + - target: {fileID: 4040741186597562825, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_text + value: No Points + objectReference: {fileID: 0} + - target: {fileID: 4257864789549434443, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 4257864789549434443, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + - target: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_LocalPosition.x + value: -20 + objectReference: {fileID: 0} + - target: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_LocalPosition.z + value: -12.4 + objectReference: {fileID: 0} + - target: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000003774895 + objectReference: {fileID: 0} + - target: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9189557463581648220, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_Name + value: CorridorDoors + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} +--- !u!4 &446262685 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 446262684} + m_PrefabAsset: {fileID: 0} +--- !u!23 &446262687 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: 7547418677490389003, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 446262684} + m_PrefabAsset: {fileID: 0} +--- !u!23 &446262689 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: 3578079415854012088, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 446262684} + m_PrefabAsset: {fileID: 0} +--- !u!1 &446262690 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 5089794491235248437, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 446262684} + m_PrefabAsset: {fileID: 0} +--- !u!23 &446262691 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: 6747071118349076704, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 446262684} + m_PrefabAsset: {fileID: 0} +--- !u!23 &446262693 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: 5629896105277814212, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 446262684} + m_PrefabAsset: {fileID: 0} +--- !u!23 &446262695 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: 1674034645716136823, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 446262684} + m_PrefabAsset: {fileID: 0} +--- !u!1 &446262696 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 6935029945803984122, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 446262684} + m_PrefabAsset: {fileID: 0} +--- !u!23 &446262697 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: 8880764824548044079, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 446262684} + m_PrefabAsset: {fileID: 0} +--- !u!1 &446262698 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 8313676601306732379, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 446262684} + m_PrefabAsset: {fileID: 0} +--- !u!23 &446262700 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: 7243795509972649097, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 446262684} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &448309809 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 445776558} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalScale.x + value: 1.01 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalScale.y + value: 1.01 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalPosition.x + value: 2.116 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalPosition.y + value: 0.8499999 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalPosition.z + value: -21.28 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalRotation.w + value: 0.0000020340083 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalRotation.x + value: 0.0000020489094 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalRotation.y + value: 0.7071067 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalRotation.z + value: -0.7071069 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 90 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: -180 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 6c802bc1dd1dee24095056a5f6da8a8a, type: 2} + - target: {fileID: 919132149155446097, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_Name + value: Walls (1) + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} +--- !u!4 &448309810 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + m_PrefabInstance: {fileID: 448309809} + m_PrefabAsset: {fileID: 0} +--- !u!1 &448309811 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + m_PrefabInstance: {fileID: 448309809} + m_PrefabAsset: {fileID: 0} +--- !u!23 &448309812 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + m_PrefabInstance: {fileID: 448309809} + m_PrefabAsset: {fileID: 0} --- !u!1 &458289728 GameObject: m_ObjectHideFlags: 0 @@ -4208,7 +5493,6 @@ GameObject: m_Component: - component: {fileID: 458289729} - component: {fileID: 458289732} - - component: {fileID: 458289731} - component: {fileID: 458289730} - component: {fileID: 458289733} m_Layer: 0 @@ -4261,36 +5545,6 @@ MonoBehaviour: m_FlexibleWidth: 1 m_FlexibleHeight: -1 m_LayoutPriority: 1 ---- !u!114 &458289731 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 458289728} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 2100000, guid: 35630e38b4e5ffb40b44ec5348b4333f, type: 2} - m_Color: {r: 0.54369885, g: 0.76275307, b: 0.7735849, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 --- !u!222 &458289732 CanvasRenderer: m_ObjectHideFlags: 0 @@ -4325,11 +5579,6 @@ MonoBehaviour: m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 m_ReverseArrangement: 0 ---- !u!1 &458921920 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1671211409786305901, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 2086896412} - m_PrefabAsset: {fileID: 0} --- !u!23 &458921922 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 5629896105277814212, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -4458,26 +5707,11 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: -20, y: -20} m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &485857146 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: c9fb1b8a20728b94881a9f11328bf52a, type: 3} - m_PrefabInstance: {fileID: 2129333575} - m_PrefabAsset: {fileID: 0} ---- !u!1 &486021624 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 6515456391347357321, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 2086896412} - m_PrefabAsset: {fileID: 0} --- !u!23 &486021627 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 3578079415854012088, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 2086896412} m_PrefabAsset: {fileID: 0} ---- !u!1 &495994987 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1671211409786305901, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 1121960421} - m_PrefabAsset: {fileID: 0} --- !u!23 &495994989 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 5629896105277814212, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -4622,11 +5856,126 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: 8805562501103746736, guid: 844da2a9bfdfa474784b61993287bcc8, type: 3} m_PrefabInstance: {fileID: 497102803} m_PrefabAsset: {fileID: 0} ---- !u!1 &501135176 stripped +--- !u!1 &498870969 GameObject: - m_CorrespondingSourceObject: {fileID: 6515456391347357321, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 1235844105} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 498870970} + - component: {fileID: 498870972} + - component: {fileID: 498870971} + m_Layer: 0 + m_Name: Question3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &498870970 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 498870969} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1177781895} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &498870971 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 498870969} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 2 + serializedProgramAsset: {fileID: 11400000, guid: 1a3121a400bb97a4798c930d280db074, type: 2} + programSource: {fileID: 11400000, guid: d18e451e2b012944899ec95f8a380e52, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!114 &498870972 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 498870969} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66abc497563d35d46b551af57cb77e18, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 498870971} + questionTitle: US STATES THAT ARE SMALLER THAN ENGLAND + questionDescription: 'We are looking for any of the twentytwo US states that are + smaller than + + England in terms of total land area. + + We are only counting + land area, so are + + not including water areas a state may + + possess including + inland, coastal, + + Great Lakes, and territorial waters.' + answerInfo: [] + answerText: + - CONNECTICUT + - DELAWARE + - HAWAIl + - INDIANA + - KENTUCKY + - LOUISIANA + - MAINE + - MARYLAND + - MASSACHUSETTS + - MISSISSIPPI + - NEW HAMPSHIRE + - NEW JERSEY + - NEW YORK + - NORTH CAROLINA + - OHIO + - PENNSYLVANIA + - RHODE ISLAND + - SOUTH CAROLINA + - TENNESSEE + - VERMONT + - VIRGINIA + - WEST VIRGINIA + answerPoints: 0f000000090000001e000000030000000700000005000000120000000b0000000d00000003000000090000000f0000001c0000000800000012000000030000000f00000009000000050000000b0000000800000007000000 --- !u!1 &504183042 GameObject: m_ObjectHideFlags: 0 @@ -4818,14 +6167,9 @@ MonoBehaviour: m_StartCorner: 0 m_StartAxis: 0 m_CellSize: {x: 1700, y: 460} - m_Spacing: {x: 100, y: 100} + m_Spacing: {x: 50, y: 50} m_Constraint: 1 m_ConstraintCount: 2 ---- !u!1 &509532019 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 94cf32329dec20b47b6af8d21a3fae29, type: 3} - m_PrefabInstance: {fileID: 1038648716} - m_PrefabAsset: {fileID: 0} --- !u!1 &512638319 GameObject: m_ObjectHideFlags: 0 @@ -4942,65 +6286,11 @@ Canvas: m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 ---- !u!1 &512815369 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1337646829457088878, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} - m_PrefabInstance: {fileID: 286595926} - m_PrefabAsset: {fileID: 0} --- !u!23 &512815370 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 689256096079544507, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} m_PrefabInstance: {fileID: 286595926} m_PrefabAsset: {fileID: 0} ---- !u!114 &516164608 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ec0b4dd729a12d046982652f834580a2, type: 3} - m_Name: QuizScene_LMA1 - m_EditorClassIdentifier: - resolution: 2048 - bitmask: 1 - id: 1 - sortingID: 2 - isImplicit: 1 - area: 0 - totalVertexCount: 0 - vertexCounter: 0 - sceneLodLevel: -1 - autoResolution: 0 - sceneName: - tag: -1 - containsTerrains: 0 - probes: 0 - mode: 1 - renderMode: 1000 - renderDirMode: 1000 - atlasPacker: 1000 - holeFilling: 0 - computeSSS: 0 - sssSamples: 16 - sssDensity: 10 - sssColor: {r: 1, g: 1, b: 1, a: 1} - sssScale: 1 - fakeShadowBias: 0 - transparentSelfShadow: 0 - flipNormal: 0 - parentName: - overridePath: - fixPos3D: 0 - voxelSize: {x: 1, y: 1, z: 1} - passedFilter: 0 ---- !u!1 &523431839 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 623a2f04d46c8684382c2188c99eeea0, type: 3} - m_PrefabInstance: {fileID: 1230064628} - m_PrefabAsset: {fileID: 0} --- !u!1 &524486020 GameObject: m_ObjectHideFlags: 0 @@ -5095,6 +6385,139 @@ Light: m_UseViewFrustumForShadowCasterCull: 1 m_ShadowRadius: 0 m_ShadowAngle: 0 +--- !u!1 &528146572 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 528146573} + - component: {fileID: 528146576} + - component: {fileID: 528146575} + - component: {fileID: 528146574} + m_Layer: 0 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &528146573 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 528146572} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1315194808} + m_Father: {fileID: 694385050} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 320, y: 80} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &528146574 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 528146572} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 0.9339623, g: 0.53306335, b: 0.53306335, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 528146575} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 285759829} + m_TargetAssemblyTypeName: VRC.Udon.UdonBehaviour, VRC.Udon + m_MethodName: SendCustomEvent + m_Mode: 5 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: ResetMeterNetworked + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &528146575 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 528146572} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 2100000, guid: 35630e38b4e5ffb40b44ec5348b4333f, type: 2} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &528146576 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 528146572} + m_CullTransparentMesh: 1 --- !u!23 &531545497 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 8880764824548044079, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -5749,6 +7172,11 @@ Transform: - {fileID: 697177927} m_Father: {fileID: 1678696536} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &590443805 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 6812330130097005368, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + m_PrefabInstance: {fileID: 983768279} + m_PrefabAsset: {fileID: 0} --- !u!1 &590607346 GameObject: m_ObjectHideFlags: 0 @@ -5833,6 +7261,168 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 590607346} m_Mesh: {fileID: -5388294574167003846, guid: 58cb7a72284678249ab615e41dca85f1, type: 3} +--- !u!1001 &593901290 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 445776558} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: b215af399afe2f14e96c213518ac905c, type: 3} + propertyPath: m_LocalPosition.x + value: 0.419389 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: b215af399afe2f14e96c213518ac905c, type: 3} + propertyPath: m_LocalPosition.y + value: 0.119 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: b215af399afe2f14e96c213518ac905c, type: 3} + propertyPath: m_LocalPosition.z + value: -21.40666 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: b215af399afe2f14e96c213518ac905c, type: 3} + propertyPath: m_LocalRotation.w + value: 0.0000029802318 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: b215af399afe2f14e96c213518ac905c, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: b215af399afe2f14e96c213518ac905c, type: 3} + propertyPath: m_LocalRotation.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: b215af399afe2f14e96c213518ac905c, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: b215af399afe2f14e96c213518ac905c, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: b215af399afe2f14e96c213518ac905c, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 180 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: b215af399afe2f14e96c213518ac905c, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: b215af399afe2f14e96c213518ac905c, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 026a7c368b9c59343bc40afa213abe94, type: 2} + - target: {fileID: 919132149155446097, guid: b215af399afe2f14e96c213518ac905c, type: 3} + propertyPath: m_Name + value: DowncountPlayerDesk + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: b215af399afe2f14e96c213518ac905c, type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: b215af399afe2f14e96c213518ac905c, type: 3} +--- !u!4 &593901291 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: b215af399afe2f14e96c213518ac905c, type: 3} + m_PrefabInstance: {fileID: 593901290} + m_PrefabAsset: {fileID: 0} +--- !u!1 &593901292 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: b215af399afe2f14e96c213518ac905c, type: 3} + m_PrefabInstance: {fileID: 593901290} + m_PrefabAsset: {fileID: 0} +--- !u!23 &593901293 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: b215af399afe2f14e96c213518ac905c, type: 3} + m_PrefabInstance: {fileID: 593901290} + m_PrefabAsset: {fileID: 0} +--- !u!23 &599148971 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: 2697018564455198238, guid: acde36bc75391a540a76c589339eeb32, type: 3} + m_PrefabInstance: {fileID: 369696550} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &599447120 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 303549434} + m_Modifications: + - target: {fileID: 7457516078518891285, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_Name + value: IndustrialLamp + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalPosition.x + value: 1.5005 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalPosition.y + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalPosition.z + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071078 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalRotation.x + value: -0.000000026692952 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalRotation.y + value: -0.7071058 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalRotation.z + value: 0.000000026692378 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: -90 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} +--- !u!4 &599447121 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + m_PrefabInstance: {fileID: 599447120} + m_PrefabAsset: {fileID: 0} +--- !u!1 &599447122 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 542809459100716633, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + m_PrefabInstance: {fileID: 599447120} + m_PrefabAsset: {fileID: 0} +--- !u!1 &599447123 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 7457516078518891285, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + m_PrefabInstance: {fileID: 599447120} + m_PrefabAsset: {fileID: 0} +--- !u!23 &599447124 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: 8970773725826667200, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + m_PrefabInstance: {fileID: 599447120} + m_PrefabAsset: {fileID: 0} --- !u!1 &614442977 GameObject: m_ObjectHideFlags: 0 @@ -5908,11 +7498,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 614442977} m_CullTransparentMesh: 1 ---- !u!1 &619445892 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: c612308e343bb894f8c1de3fa055f069, type: 3} - m_PrefabInstance: {fileID: 1688320098} - m_PrefabAsset: {fileID: 0} --- !u!1 &619504801 GameObject: m_ObjectHideFlags: 0 @@ -6019,6 +7604,141 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 619504801} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &620422904 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 620422905} + - component: {fileID: 620422907} + - component: {fileID: 620422906} + m_Layer: 0 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &620422905 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620422904} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1733785282} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -0.00035858154, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &620422906 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620422904} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 'DONT: Passive aggressively message discord saying "guess you''ll congratulate + yourself"' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 2458ae1ee426e7e468f747ab9acfb8ca, type: 2} + m_sharedMaterial: {fileID: 4574574079457850067, guid: 2458ae1ee426e7e468f747ab9acfb8ca, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 16 + m_fontSizeBase: 16 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &620422907 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620422904} + m_CullTransparentMesh: 1 --- !u!1001 &633509196 PrefabInstance: m_ObjectHideFlags: 0 @@ -6101,11 +7821,6 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 7992a19655656c746acc0bd847ed5831, type: 3} m_PrefabInstance: {fileID: 633509196} m_PrefabAsset: {fileID: 0} ---- !u!1 &636200867 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 1a9ac63d1cbd6864d964409c223c9cc3, type: 3} - m_PrefabInstance: {fileID: 1272306630} - m_PrefabAsset: {fileID: 0} --- !u!1 &641951130 GameObject: m_ObjectHideFlags: 0 @@ -6182,6 +7897,8 @@ MonoBehaviour: LightsBrightnessCutoff: 0.35 LightVolumeInstances: - {fileID: 1338781417} + - {fileID: 1594525688} + - {fileID: 1864825431} PointLightVolumeInstances: [] CustomTextures: {fileID: 0} CubemapsCount: 0 @@ -6200,8 +7917,12 @@ MonoBehaviour: m_EditorClassIdentifier: LightVolumes: - {fileID: 1338781416} + - {fileID: 1594525687} + - {fileID: 1864825432} LightVolumesWeights: - - 0 + - 2 + - 2 + - 1 PointLightVolumes: [] Resolution: 128 Format: 17 @@ -6219,8 +7940,12 @@ MonoBehaviour: AdditiveMaxOverdraw: 4 DestroyInPlayMode: 0 LightVolumeDataList: - - Weight: 0 + - Weight: 2 LightVolumeInstance: {fileID: 1338781417} + - Weight: 2 + LightVolumeInstance: {fileID: 1594525688} + - Weight: 1 + LightVolumeInstance: {fileID: 1864825431} LightVolumeManager: {fileID: 641951132} _bakingModePrev: 1 IsLegacyUVWConverted: 1 @@ -6430,31 +8155,16 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 649765431} m_CullTransparentMesh: 1 ---- !u!1 &652178688 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1337646829457088878, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} - m_PrefabInstance: {fileID: 2148583} - m_PrefabAsset: {fileID: 0} --- !u!23 &652178689 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 689256096079544507, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} m_PrefabInstance: {fileID: 2148583} m_PrefabAsset: {fileID: 0} ---- !u!1 &656351594 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 3579776820605786274, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 445112381} - m_PrefabAsset: {fileID: 0} --- !u!23 &656351596 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 7547418677490389003, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 445112381} m_PrefabAsset: {fileID: 0} ---- !u!1 &659242416 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 9ba4a22547ccc7c4f8f57c7b57da4904, type: 3} - m_PrefabInstance: {fileID: 1564889613} - m_PrefabAsset: {fileID: 0} --- !u!1001 &660518649 PrefabInstance: m_ObjectHideFlags: 0 @@ -6537,11 +8247,6 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 73d5da89642a53445a6bfd1c9c31386f, type: 3} m_PrefabInstance: {fileID: 660518649} m_PrefabAsset: {fileID: 0} ---- !u!1 &660518651 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 73d5da89642a53445a6bfd1c9c31386f, type: 3} - m_PrefabInstance: {fileID: 660518649} - m_PrefabAsset: {fileID: 0} --- !u!23 &660518652 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 73d5da89642a53445a6bfd1c9c31386f, type: 3} @@ -6588,6 +8293,50 @@ GameObject: m_CorrespondingSourceObject: {fileID: 8313676601306732379, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 1725237038} m_PrefabAsset: {fileID: 0} +--- !u!114 &664424129 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec0b4dd729a12d046982652f834580a2, type: 3} + m_Name: QuizScene_LMA1 + m_EditorClassIdentifier: + resolution: 2048 + bitmask: 1 + id: 1 + sortingID: 1 + isImplicit: 1 + area: 0 + totalVertexCount: 0 + vertexCounter: 0 + sceneLodLevel: -1 + autoResolution: 0 + sceneName: + tag: -1 + containsTerrains: 0 + probes: 0 + mode: 1 + renderMode: 1000 + renderDirMode: 1000 + atlasPacker: 1000 + holeFilling: 0 + computeSSS: 0 + sssSamples: 16 + sssDensity: 10 + sssColor: {r: 1, g: 1, b: 1, a: 1} + sssScale: 1 + fakeShadowBias: 0 + transparentSelfShadow: 0 + flipNormal: 0 + parentName: + overridePath: + fixPos3D: 0 + voxelSize: {x: 1, y: 1, z: 1} + passedFilter: 0 --- !u!1 &679006202 GameObject: m_ObjectHideFlags: 0 @@ -6723,11 +8472,300 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 679006202} m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &690928970 stripped +--- !u!1 &685262447 GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 75a87d382e24fff4c9574ad4107b134b, type: 3} - m_PrefabInstance: {fileID: 1299859832} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 685262448} + - component: {fileID: 685262450} + - component: {fileID: 685262449} + m_Layer: 0 + m_Name: Question7 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &685262448 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 685262447} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1177781895} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &685262449 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 685262447} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 2 + serializedProgramAsset: {fileID: 11400000, guid: 1a3121a400bb97a4798c930d280db074, type: 2} + programSource: {fileID: 11400000, guid: d18e451e2b012944899ec95f8a380e52, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!114 &685262450 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 685262447} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66abc497563d35d46b551af57cb77e18, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 685262449} + questionTitle: CHEESE COUNTRIES + questionDescription: We are going to show you the names of twelve types of cheese. + We would like you to tell us the country where that cheese was originally made + or with which it is most commonly associated. + answerInfo: + - 1. BRIE + - "2. RABA\xC7AL" + - 3. MANCHEGO + - 4. JARLSBERG + - 5. GORGONZOLA + - 6. ASADERO + - "7. HARZER K\xC4SE" + - 8. MONTEREY JACK + - 9. GOUDA + - 10. BALATON + - 11. EMMENTAL + - 12. HAVARTI + answerText: + - 1. FRANCE + - 2. PORTUGAL + - 3. SPAIN + - 4. NORWAY + - 5. ITALY + - 6. MEXICO + - 7. GERMANY + - 8. USA + - 9. NETHERLANDS + - 10. HUNGARY + - 11. SWITZERLAND + - 12. DENMARK + answerPoints: 5e00000002000000160000000c0000003f000000030000000e0000002900000043000000030000002d00000000000000 +--- !u!1 &688445501 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 688445503} + - component: {fileID: 688445502} + m_Layer: 0 + m_Name: SpotLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &688445502 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 688445501} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 57f24a4aaa0761b45ba25e7e5108e2c7, type: 3} + m_Name: + m_EditorClassIdentifier: + UID: 1343850227 + color: {r: 1, g: 1, b: 1, a: 1} + intensity: 3 + shadowSpread: 0.05 + cutoff: 60 + realisticFalloff: 0 + legacySampling: 1 + samples: 8 + projMode: 1 + cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} + angle: 40 + innerAngle: 0 + cubemap: {fileID: 0} + iesFile: {fileID: 0} + bitmask: 1 + bakeToIndirect: 0 + shadowmask: 0 + shadowmaskFalloff: 0 + indirectIntensity: 1 + falloffMinRadius: 1 + shadowmaskGroupID: 0 + directionMode: 0 + maskChannel: -1 +--- !u!4 &688445503 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 688445501} + serializedVersion: 2 + m_LocalRotation: {x: 0.70710576, y: -0, z: -0, w: 0.7071079} + m_LocalPosition: {x: 0.5020771, y: 6.682452, z: -21.673576} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!1 &694385049 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 694385050} + - component: {fileID: 694385054} + - component: {fileID: 694385053} + - component: {fileID: 694385052} + - component: {fileID: 694385051} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &694385050 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 694385049} + m_LocalRotation: {x: -0.000000029802322, y: 0.7071068, z: -0.70710677, w: -0.000000029802322} + m_LocalPosition: {x: 0, y: 0, z: 0.1718232} + m_LocalScale: {x: 0.001, y: 0.0016807707, z: 0.00059496524} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 528146573} + m_Father: {fileID: 1069630398} + m_LocalEulerAnglesHint: {x: -270, y: 180, z: -307.066} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -31.773046, y: 1.0327996} + m_SizeDelta: {x: 385, y: 110.8} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &694385051 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 694385049} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1533785930, guid: 661092b4961be7145bfbe56e1e62337b, type: 3} + m_Name: + m_EditorClassIdentifier: + AllowFocusView: 1 +--- !u!114 &694385052 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 694385049} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &694385053 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 694385049} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 1 +--- !u!223 &694385054 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 694385049} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 --- !u!1 &696345237 GameObject: m_ObjectHideFlags: 0 @@ -6738,7 +8776,6 @@ GameObject: m_Component: - component: {fileID: 696345238} - component: {fileID: 696345242} - - component: {fileID: 696345241} - component: {fileID: 696345240} - component: {fileID: 696345243} m_Layer: 0 @@ -6800,36 +8837,6 @@ MonoBehaviour: m_OnValueChanged: m_PersistentCalls: m_Calls: [] ---- !u!114 &696345241 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 696345237} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 2100000, guid: 35630e38b4e5ffb40b44ec5348b4333f, type: 2} - m_Color: {r: 1, g: 1, b: 1, a: 0.392} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 --- !u!222 &696345242 CanvasRenderer: m_ObjectHideFlags: 0 @@ -6925,11 +8932,6 @@ Transform: m_Children: [] m_Father: {fileID: 588054620} m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} ---- !u!1 &697589666 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: f5df33c049e47e349b68e4159cb7dcf4, type: 3} - m_PrefabInstance: {fileID: 1516427551} - m_PrefabAsset: {fileID: 0} --- !u!1 &705607181 stripped GameObject: m_CorrespondingSourceObject: {fileID: 1337646829457088878, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} @@ -7035,16 +9037,125 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 2f5faf56eef0ad748ad331a95b4b2abc, type: 3} m_PrefabInstance: {fileID: 706963242} m_PrefabAsset: {fileID: 0} ---- !u!1 &706963244 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 2f5faf56eef0ad748ad331a95b4b2abc, type: 3} - m_PrefabInstance: {fileID: 706963242} - m_PrefabAsset: {fileID: 0} --- !u!23 &706963245 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 2f5faf56eef0ad748ad331a95b4b2abc, type: 3} m_PrefabInstance: {fileID: 706963242} m_PrefabAsset: {fileID: 0} +--- !u!1 &718461062 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 718461063} + - component: {fileID: 718461065} + - component: {fileID: 718461064} + m_Layer: 0 + m_Name: Question4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &718461063 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 718461062} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1177781895} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &718461064 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 718461062} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 2 + serializedProgramAsset: {fileID: 11400000, guid: 1a3121a400bb97a4798c930d280db074, type: 2} + programSource: {fileID: 11400000, guid: d18e451e2b012944899ec95f8a380e52, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!114 &718461065 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 718461062} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66abc497563d35d46b551af57cb77e18, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 718461064} + questionTitle: GERMAN BODY PARTS + questionDescription: 'We are going to show you the names + + of twelve body parts + in German. We''d + + like you to tell us their English translations.' + answerInfo: + - 1. DAS AUGE + - 2. DER KOPF + - 3. DAS KNIE + - 4. DER NAGEL + - 5. DAS OHR + - 6. DIE ZUNGE + - 7. DIE NASE + - 8. DER ZEH + - 9. DAS KINN + - 10. DER ELLENBOGEN + - 11. DER MAGEN + - "12. DER FINGERKN\xD6CHEL" + answerText: + - DAS AUGE - EYE + - DER KOPF - HEAD + - DAS KNIE - KNEE + - DER NAGEL - NAIL + - DAS OHR - EAR + - DIE ZUNGE - TONGUE + - DIE NASE - NOSE + - DER ZEH - TOE + - DAS KINN - CHIN + - DER ELLENBOGEN - ELBOW + - DER MAGEN - STOMACH + - "DER FINGERKN\xD6CHEL - KNUCKLE" + answerPoints: 0e000000250000003c00000009000000160000000a00000056000000040000000c000000200000000300000022000000 --- !u!1 &721237959 GameObject: m_ObjectHideFlags: 0 @@ -7646,31 +9757,16 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 752396811} m_CullTransparentMesh: 1 ---- !u!1 &756087330 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 6515456391347357321, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 576108662} - m_PrefabAsset: {fileID: 0} --- !u!23 &756087333 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 3578079415854012088, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 576108662} m_PrefabAsset: {fileID: 0} ---- !u!1 &758170911 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9004724186224534342, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 1235844105} - m_PrefabAsset: {fileID: 0} --- !u!23 &758170914 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 1674034645716136823, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 1235844105} m_PrefabAsset: {fileID: 0} ---- !u!1 &762187142 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9004724186224534342, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 1121960421} - m_PrefabAsset: {fileID: 0} --- !u!23 &762187145 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 1674034645716136823, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -7681,50 +9777,6 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: 8880764824548044079, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 576108662} m_PrefabAsset: {fileID: 0} ---- !u!114 &776333169 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ec0b4dd729a12d046982652f834580a2, type: 3} - m_Name: volumes - m_EditorClassIdentifier: - resolution: 16 - bitmask: 1 - id: 2 - sortingID: 0 - isImplicit: 1 - area: 0 - totalVertexCount: 62304 - vertexCounter: 0 - sceneLodLevel: -1 - autoResolution: 0 - sceneName: - tag: -1 - containsTerrains: 0 - probes: 1 - mode: 2 - renderMode: 1000 - renderDirMode: 5 - atlasPacker: 1000 - holeFilling: 0 - computeSSS: 0 - sssSamples: 16 - sssDensity: 10 - sssColor: {r: 1, g: 1, b: 1, a: 1} - sssScale: 1 - fakeShadowBias: 0 - transparentSelfShadow: 0 - flipNormal: 0 - parentName: - overridePath: - fixPos3D: 1 - voxelSize: {x: 0.3338177, y: 0.3308021, z: 0.3365548} - passedFilter: 0 --- !u!1 &780542785 GameObject: m_ObjectHideFlags: 0 @@ -7741,6 +9793,7 @@ GameObject: - component: {fileID: 780542787} - component: {fileID: 780542793} - component: {fileID: 780542792} + - component: {fileID: 780542794} m_Layer: 0 m_Name: Colliders m_TagString: Untagged @@ -7782,8 +9835,8 @@ BoxCollider: m_ProvidesContacts: 0 m_Enabled: 1 serializedVersion: 3 - m_Size: {x: 19.8, y: 8, z: 0.1} - m_Center: {x: -8.5, y: 3.95, z: -14.95} + m_Size: {x: 18, y: 8, z: 0.10000038} + m_Center: {x: -9.5, y: 3.9499998, z: -14.95} --- !u!65 &780542788 BoxCollider: m_ObjectHideFlags: 0 @@ -7910,6 +9963,27 @@ BoxCollider: serializedVersion: 3 m_Size: {x: 18, y: 8, z: 0.1} m_Center: {x: -9.5, y: 3.95, z: -0.05} +--- !u!65 &780542794 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 780542785} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 0.9, y: 8, z: 0.1} + m_Center: {x: 0.95, y: 3.95, z: -14.95} --- !u!1 &783662497 stripped GameObject: m_CorrespondingSourceObject: {fileID: 6935029945803984122, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -7930,6 +10004,380 @@ GameObject: m_CorrespondingSourceObject: {fileID: 2807030296090541096, guid: 844da2a9bfdfa474784b61993287bcc8, type: 3} m_PrefabInstance: {fileID: 497102803} m_PrefabAsset: {fileID: 0} +--- !u!1 &806040157 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 806040158} + - component: {fileID: 806040160} + - component: {fileID: 806040159} + m_Layer: 0 + m_Name: Question6 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &806040158 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 806040157} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1177781895} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &806040159 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 806040157} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 2 + serializedProgramAsset: {fileID: 11400000, guid: 1a3121a400bb97a4798c930d280db074, type: 2} + programSource: {fileID: 11400000, guid: d18e451e2b012944899ec95f8a380e52, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!114 &806040160 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 806040157} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66abc497563d35d46b551af57cb77e18, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 806040159} + questionTitle: BERRIES + questionDescription: We are looking for the name of any plant, or fruit of a plant, + that has its own entry in the Oxford Dictionary of English, whose name ends in + the let- ters 'B-E-R-R-Y'. We are only looking for one-word answers. So we will + not accept 'Goji Berry' for example. + answerInfo: [] + answerText: + - BANEBERRY + - BARBERRY + - BAYBERRY + - BEARBERRY + - BILBERRY + - BLACKBERRY + - BLAEBERRY + - BLUEBERRY + - BOYSENBERRY + - BUNCHBERRY + - CANDLEBERRY + - CHECKERBERRY + - CHINABERRY + - CHOKEBERRY + - CLOUDBERRY + - CORALBERRY + - COWBERRY + - CRANBERRY + - CROWBERRY + - DEWBERRY + - DOGBERRY + - ELDERBERRY + - FARKLEBERRY + - FENBERRY + - GALLBERRY + - GOOSEBERRY + - HACKBERRY + - HUCKLEBERRY + - INKBERRY + - JUNEBERRY + - LINGONBERRY + - LOGANBERRY + - MULBERRY + - NASEBERRY + - PARTRIDGEBERRY + - PEABERRY + - RASPBERRY + - SALMONBERRY + - SERVICEBERRY + - SILVERBERRY + - SNOWBERRY + - SOAPBERRY + - SQUASHBERRY + - STRAWBERRY + - TAYBERRY + - THIMBLEBERRY + - VEITCHBERRY + - WAXBERRY + - WHORTLEBERRY + - WINEBERRY + - WINTERBERRY + - WOLFBERRY + - YOUNGBERRY + answerPoints: 00000000010000000000000002000000080000005400000003000000490000000300000000000000000000000000000000000000000000000500000000000000000000001c000000010000000100000000000000100000000000000000000000000000003d00000000000000000000000000000000000000020000003c00000006000000000000000000000000000000570000000000000000000000000000000100000000000000000000005c000000080000000000000000000000000000000400000001000000000000000300000000000000 +--- !u!1001 &823932916 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1534685191} + m_Modifications: + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3692739284170986421, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 2100000, guid: 35630e38b4e5ffb40b44ec5348b4333f, type: 2} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.x + value: 600 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 600 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9238798 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.x + value: 0.38268274 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: -0.9999981 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 1.0779 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 45 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: deskManager + value: + objectReference: {fileID: 1712227389} + - target: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8060766842135696868, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 2100000, guid: 35630e38b4e5ffb40b44ec5348b4333f, type: 2} + - target: {fileID: 8379790806586723610, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Name + value: PlayerScreen (1) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} --- !u!1 &831209428 GameObject: m_ObjectHideFlags: 0 @@ -7956,13 +10404,13 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 831209428} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -33.526, y: 2.818, z: 2.435} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.006000519, y: 2.6180003, z: -0.07500005} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1626245480} - m_Father: {fileID: 1780541056} + m_Father: {fileID: 1211523183} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &831209430 MonoBehaviour: @@ -8093,11 +10541,6 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 2f5faf56eef0ad748ad331a95b4b2abc, type: 3} m_PrefabInstance: {fileID: 837570458} m_PrefabAsset: {fileID: 0} ---- !u!1 &837570460 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 2f5faf56eef0ad748ad331a95b4b2abc, type: 3} - m_PrefabInstance: {fileID: 837570458} - m_PrefabAsset: {fileID: 0} --- !u!23 &837570461 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 2f5faf56eef0ad748ad331a95b4b2abc, type: 3} @@ -8163,11 +10606,6 @@ MonoBehaviour: previewTempObjects: [] previewEnabled: 0 bakeChildLightProbeGroups: 0 ---- !u!1 &860730342 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: f890bc351c3a8ac4083a912069bfac26, type: 3} - m_PrefabInstance: {fileID: 65376844} - m_PrefabAsset: {fileID: 0} --- !u!1 &861281453 GameObject: m_ObjectHideFlags: 0 @@ -8319,16 +10757,6 @@ Canvas: m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 ---- !u!1 &864290492 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 96cdea5358afe6548b7079063386f7fc, type: 3} - m_PrefabInstance: {fileID: 1381876078} - m_PrefabAsset: {fileID: 0} ---- !u!1 &872361898 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 1611d9bc5e3b2d348887fbca07869875, type: 3} - m_PrefabInstance: {fileID: 1476782021} - m_PrefabAsset: {fileID: 0} --- !u!1001 &874610116 PrefabInstance: m_ObjectHideFlags: 0 @@ -8411,26 +10839,435 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 73d5da89642a53445a6bfd1c9c31386f, type: 3} m_PrefabInstance: {fileID: 874610116} m_PrefabAsset: {fileID: 0} ---- !u!1 &874610118 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 73d5da89642a53445a6bfd1c9c31386f, type: 3} - m_PrefabInstance: {fileID: 874610116} - m_PrefabAsset: {fileID: 0} --- !u!23 &874610119 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 73d5da89642a53445a6bfd1c9c31386f, type: 3} m_PrefabInstance: {fileID: 874610116} m_PrefabAsset: {fileID: 0} ---- !u!1 &898508163 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9004724186224534342, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 3663352991328551858} +--- !u!1001 &882053293 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1743423422} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalScale.x + value: 0.016027614 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalScale.y + value: 0.016027616 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalScale.z + value: 0.016027616 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalPosition.x + value: 4.866784 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalPosition.y + value: 0.277 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalPosition.z + value: -25.243782 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.w + value: -0.8869719 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.x + value: -4.923712e-15 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.y + value: 0.4618234 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.z + value: -2.5636509e-15 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 304.99 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: f45e687b234af6948b76b2622ed33647, type: 2} + - target: {fileID: 919132149155446097, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_Name + value: OfficeChair (4) + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 4484e3331bc52724593257a69e2553b8, type: 3} +--- !u!4 &882053294 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + m_PrefabInstance: {fileID: 882053293} m_PrefabAsset: {fileID: 0} +--- !u!1 &882053295 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + m_PrefabInstance: {fileID: 882053293} + m_PrefabAsset: {fileID: 0} +--- !u!23 &882053296 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + m_PrefabInstance: {fileID: 882053293} + m_PrefabAsset: {fileID: 0} +--- !u!1 &884135815 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 884135816} + - component: {fileID: 884135818} + - component: {fileID: 884135817} + m_Layer: 0 + m_Name: Question14 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &884135816 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 884135815} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1177781895} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &884135817 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 884135815} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 2 + serializedProgramAsset: {fileID: 11400000, guid: 1a3121a400bb97a4798c930d280db074, type: 2} + programSource: {fileID: 11400000, guid: d18e451e2b012944899ec95f8a380e52, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!114 &884135818 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 884135815} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66abc497563d35d46b551af57cb77e18, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 884135817} + questionTitle: + questionDescription: + answerInfo: [] + answerText: [] + answerPoints: --- !u!23 &898508166 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 1674034645716136823, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 3663352991328551858} m_PrefabAsset: {fileID: 0} +--- !u!1001 &900851002 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1084975125} + m_Modifications: + - target: {fileID: 1831648391729385026, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_PresetInfoIsWorld + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3692739284170986421, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 2100000, guid: 35630e38b4e5ffb40b44ec5348b4333f, type: 2} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.x + value: 600 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 600 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalPosition.z + value: 0.00000030361116 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9238794 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.x + value: 0.38268384 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.y + value: 0.0000004917383 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.z + value: -0.000000048428774 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 1.0000013 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 1.0756 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 45 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: deskManager + value: + objectReference: {fileID: 983768282} + - target: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8060766842135696868, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 2100000, guid: 35630e38b4e5ffb40b44ec5348b4333f, type: 2} + - target: {fileID: 8379790806586723610, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Name + value: PlayerScreen (2) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} +--- !u!224 &900851003 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + m_PrefabInstance: {fileID: 900851002} + m_PrefabAsset: {fileID: 0} --- !u!1001 &905496709 PrefabInstance: m_ObjectHideFlags: 0 @@ -8502,15 +11339,88 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: 689256096079544507, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} m_PrefabInstance: {fileID: 905496709} m_PrefabAsset: {fileID: 0} ---- !u!1 &909557901 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} - m_PrefabInstance: {fileID: 2067310247} +--- !u!1001 &910520422 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 445776558} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: ee1ce01d54aed114aa407e302147481f, type: 3} + propertyPath: m_LocalPosition.x + value: 7.7500677 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: ee1ce01d54aed114aa407e302147481f, type: 3} + propertyPath: m_LocalPosition.y + value: 0.75 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: ee1ce01d54aed114aa407e302147481f, type: 3} + propertyPath: m_LocalPosition.z + value: -21.499996 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: ee1ce01d54aed114aa407e302147481f, type: 3} + propertyPath: m_LocalRotation.w + value: 0.0000029504295 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: ee1ce01d54aed114aa407e302147481f, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: ee1ce01d54aed114aa407e302147481f, type: 3} + propertyPath: m_LocalRotation.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: ee1ce01d54aed114aa407e302147481f, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: ee1ce01d54aed114aa407e302147481f, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: ee1ce01d54aed114aa407e302147481f, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 180 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: ee1ce01d54aed114aa407e302147481f, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: ee1ce01d54aed114aa407e302147481f, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 5c816e03b652658498610330ae7c0b66, type: 2} + - target: {fileID: 919132149155446097, guid: ee1ce01d54aed114aa407e302147481f, type: 3} + propertyPath: m_Name + value: Clock + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: ee1ce01d54aed114aa407e302147481f, type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: ee1ce01d54aed114aa407e302147481f, type: 3} + insertIndex: -1 + addedObject: {fileID: 2092212185} + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ee1ce01d54aed114aa407e302147481f, type: 3} +--- !u!4 &910520423 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: ee1ce01d54aed114aa407e302147481f, type: 3} + m_PrefabInstance: {fileID: 910520422} m_PrefabAsset: {fileID: 0} ---- !u!1 &924447928 stripped +--- !u!1 &910520424 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3579776820605786274, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 1725237038} + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: ee1ce01d54aed114aa407e302147481f, type: 3} + m_PrefabInstance: {fileID: 910520422} + m_PrefabAsset: {fileID: 0} +--- !u!23 &910520425 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: ee1ce01d54aed114aa407e302147481f, type: 3} + m_PrefabInstance: {fileID: 910520422} m_PrefabAsset: {fileID: 0} --- !u!23 &924447930 stripped MeshRenderer: @@ -8812,7 +11722,8 @@ RectTransform: m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0.001, y: 0.001, z: 0.001} m_ConstrainProportionsScale: 0 - m_Children: [] + m_Children: + - {fileID: 1402935898} m_Father: {fileID: 1841401749} m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} @@ -8930,7 +11841,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -0.0006713867} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 1} --- !u!114 &945192843 @@ -9055,6 +11966,71 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} m_PrefabInstance: {fileID: 973142249} m_PrefabAsset: {fileID: 0} +--- !u!1 &983550721 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 983550722} + - component: {fileID: 983550723} + m_Layer: 0 + m_Name: Reflection Probe + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &983550722 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 983550721} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -9.827948, y: 1.636966, z: -7.4667196} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 303549434} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!215 &983550723 +ReflectionProbe: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 983550721} + m_Enabled: 1 + serializedVersion: 2 + m_Type: 0 + m_Mode: 0 + m_RefreshMode: 0 + m_TimeSlicingMode: 0 + m_Resolution: 128 + m_UpdateFrequency: 0 + m_BoxSize: {x: 19.927046, y: 7.9966507, z: 14.975739} + m_BoxOffset: {x: -1.336093, y: 2.3248816, z: 0.062099457} + m_NearClip: 0.3 + m_FarClip: 1000 + m_ShadowDistance: 100 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_IntensityMultiplier: 1 + m_BlendDistance: 1 + m_HDR: 1 + m_BoxProjection: 1 + m_RenderDynamicObjects: 0 + m_UseOcclusionCulling: 1 + m_Importance: 1 + m_CustomBakedTexture: {fileID: 0} --- !u!1 &983561334 GameObject: m_ObjectHideFlags: 0 @@ -9115,28 +12091,347 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 983561334} serializedVersion: 2 - m_LocalRotation: {x: 0.50962734, y: 0.21596071, z: -0.6215126, w: 0.5544034} + m_LocalRotation: {x: 0.544016, y: 0.24701938, z: -0.59164554, w: 0.54127955} m_LocalPosition: {x: -7.438999, y: 6.3982706, z: -6.75} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1032527761} - m_LocalEulerAnglesHint: {x: 56.462, y: -45.494, z: -121.905} ---- !u!1 &995669711 stripped + m_LocalEulerAnglesHint: {x: 61.791, y: -52.76, z: -128.15} +--- !u!1001 &983768279 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1084975125} + m_Modifications: + - target: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3641202643626132809, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 3641202643626132809, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + - target: {fileID: 3641202643626132809, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: playerScreens.Array.data[0] + value: + objectReference: {fileID: 1718745625} + - target: {fileID: 3641202643626132809, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: playerScreens.Array.data[1] + value: + objectReference: {fileID: 1793540286} + - target: {fileID: 3641202643626132809, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: playerScreens.Array.data[2] + value: + objectReference: {fileID: 2118838068} + - target: {fileID: 6812330130097005368, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_Name + value: DeskManager + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} +--- !u!4 &983768280 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + m_PrefabInstance: {fileID: 983768279} + m_PrefabAsset: {fileID: 0} +--- !u!114 &983768282 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 3641202643626132809, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + m_PrefabInstance: {fileID: 983768279} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 590443805} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 49ba8138bafa3df4fb2a0f99842d8768, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &988134731 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 1671211409786305901, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 1725237038} + m_CorrespondingSourceObject: {fileID: 8379790806586723610, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + m_PrefabInstance: {fileID: 7408260600576464514} + m_PrefabAsset: {fileID: 0} +--- !u!224 &988134732 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + m_PrefabInstance: {fileID: 7408260600576464514} + m_PrefabAsset: {fileID: 0} +--- !u!114 &988134738 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + m_PrefabInstance: {fileID: 7408260600576464514} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 988134731} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56226d676b0e8a94e9461ad87a1c012e, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &992013939 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 47997571} + m_Modifications: + - target: {fileID: 223847633031129388, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 223847633031129388, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + - target: {fileID: 355342777818069682, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_text + value: studio 326 + objectReference: {fileID: 0} + - target: {fileID: 779405444076784686, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_text + value: studio 477 + objectReference: {fileID: 0} + - target: {fileID: 2128584790989480836, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 2128584790989480836, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + - target: {fileID: 2202015379683200006, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_text + value: Downcount + objectReference: {fileID: 0} + - target: {fileID: 2704409226975317219, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 2704409226975317219, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + - target: {fileID: 4040741186597562825, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_text + value: 'Do''s & Dont''s: How to get your people to congratulate your engagement' + objectReference: {fileID: 0} + - target: {fileID: 4040741186597562825, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_fontSize + value: 31.35 + objectReference: {fileID: 0} + - target: {fileID: 4040741186597562825, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_enableAutoSizing + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4257864789549434443, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 4257864789549434443, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + - target: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_LocalPosition.x + value: -12 + objectReference: {fileID: 0} + - target: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_LocalPosition.z + value: -12.4 + objectReference: {fileID: 0} + - target: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000003774895 + objectReference: {fileID: 0} + - target: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9189557463581648220, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + propertyPath: m_Name + value: CorridorDoors (1) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + insertIndex: -1 + addedObject: {fileID: 1375130216} + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} +--- !u!4 &992013940 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 8416116645870878694, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 992013939} + m_PrefabAsset: {fileID: 0} +--- !u!23 &992013942 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: 7547418677490389003, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 992013939} + m_PrefabAsset: {fileID: 0} +--- !u!23 &992013944 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: 3578079415854012088, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 992013939} + m_PrefabAsset: {fileID: 0} +--- !u!1 &992013945 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 5089794491235248437, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 992013939} + m_PrefabAsset: {fileID: 0} +--- !u!23 &992013946 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: 6747071118349076704, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 992013939} + m_PrefabAsset: {fileID: 0} +--- !u!23 &992013948 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: 5629896105277814212, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 992013939} + m_PrefabAsset: {fileID: 0} +--- !u!23 &992013950 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: 1674034645716136823, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 992013939} + m_PrefabAsset: {fileID: 0} +--- !u!1 &992013951 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 6935029945803984122, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 992013939} + m_PrefabAsset: {fileID: 0} +--- !u!23 &992013952 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: 8880764824548044079, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 992013939} + m_PrefabAsset: {fileID: 0} +--- !u!1 &992013953 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 8313676601306732379, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 992013939} + m_PrefabAsset: {fileID: 0} +--- !u!23 &992013955 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: 7243795509972649097, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 992013939} m_PrefabAsset: {fileID: 0} --- !u!23 &995669713 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 5629896105277814212, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 1725237038} m_PrefabAsset: {fileID: 0} ---- !u!1 &998344274 stripped +--- !u!1 &997517101 GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 7992a19655656c746acc0bd847ed5831, type: 3} - m_PrefabInstance: {fileID: 633509196} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 997517103} + - component: {fileID: 997517102} + m_Layer: 0 + m_Name: Bakery Volume - LobbyLightVolume + m_TagString: EditorOnly + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &997517102 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 997517101} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 17ce3c1d3490b7143a67ebdc73cab6c1, type: 3} + m_Name: + m_EditorClassIdentifier: + enableBaking: 1 + bounds: + m_Center: {x: -0.028148651, y: 1.6078486, z: -0.021120071} + m_Extent: {x: 3.9635973, y: 1.5418944, z: 3.9847252} + adaptiveRes: 0 + voxelsPerUnit: 0.5 + resolutionX: 8 + resolutionY: 3 + resolutionZ: 8 + encoding: 0 + shadowmaskEncoding: 0 + firstLightIsAlwaysAlpha: 0 + denoise: 1 + isGlobal: 0 + bakedTexture0: {fileID: 11700000, guid: 8a5a6948b8f79754fa771d8299ec1baf, type: 2} + bakedTexture1: {fileID: 11700000, guid: c06fbde891ea2e44aace8c20b071c68b, type: 2} + bakedTexture2: {fileID: 11700000, guid: c5fb4f72ff52028479bca2f2614494c0, type: 2} + bakedTexture3: {fileID: 0} + bakedMask: {fileID: 0} + supportRotationAfterBake: 0 +--- !u!4 &997517103 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 997517101} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1594525690} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &998344275 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 7992a19655656c746acc0bd847ed5831, type: 3} @@ -9224,11 +12519,6 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 73d5da89642a53445a6bfd1c9c31386f, type: 3} m_PrefabInstance: {fileID: 998546392} m_PrefabAsset: {fileID: 0} ---- !u!1 &998546394 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 73d5da89642a53445a6bfd1c9c31386f, type: 3} - m_PrefabInstance: {fileID: 998546392} - m_PrefabAsset: {fileID: 0} --- !u!23 &998546395 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 73d5da89642a53445a6bfd1c9c31386f, type: 3} @@ -9413,21 +12703,11 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 09436c050a69bf0449a0a979b01268b7, type: 3} m_PrefabInstance: {fileID: 1007569567} m_PrefabAsset: {fileID: 0} ---- !u!1 &1010830668 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1337646829457088878, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} - m_PrefabInstance: {fileID: 15354955} - m_PrefabAsset: {fileID: 0} --- !u!23 &1010830669 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 689256096079544507, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} m_PrefabInstance: {fileID: 15354955} m_PrefabAsset: {fileID: 0} ---- !u!1 &1011382460 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9189557463581648220, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 1725237038} - m_PrefabAsset: {fileID: 0} --- !u!1 &1014855729 stripped GameObject: m_CorrespondingSourceObject: {fileID: 2880588319250313143, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -9609,6 +12889,78 @@ Canvas: m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 +--- !u!1 &1026306405 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 100590131341888120, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 992013939} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1028628261 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1028628262} + - component: {fileID: 1028628263} + m_Layer: 0 + m_Name: PointLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1028628262 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1028628261} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.1210003, y: 7.365, z: -0.421} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1032527761} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1028628263 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1028628261} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 57f24a4aaa0761b45ba25e7e5108e2c7, type: 3} + m_Name: + m_EditorClassIdentifier: + UID: -2048554123 + color: {r: 1, g: 1, b: 1, a: 1} + intensity: 1 + shadowSpread: 0.05 + cutoff: 15 + realisticFalloff: 0 + legacySampling: 1 + samples: 8 + projMode: 0 + cookie: {fileID: 0} + angle: 30 + innerAngle: 0 + cubemap: {fileID: 0} + iesFile: {fileID: 0} + bitmask: 1 + bakeToIndirect: 0 + shadowmask: 0 + shadowmaskFalloff: 0 + indirectIntensity: 1 + falloffMinRadius: 1 + shadowmaskGroupID: 0 + directionMode: 0 + maskChannel: -1 --- !u!1 &1029309904 stripped GameObject: m_CorrespondingSourceObject: {fileID: 100590131341888120, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -9647,6 +12999,8 @@ Transform: - {fileID: 445817683} - {fileID: 721237961} - {fileID: 983561336} + - {fileID: 1028628262} + - {fileID: 1366527142} m_Father: {fileID: 1780541056} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1037287742 @@ -10258,17 +13612,17 @@ MonoBehaviour: us their names.' answerInfo: - - BUSHY CROFTER (presenter) - - BATTIER EXPORT (illustrator and writer) - - NOW ACE SAINT (physicist) - - SCRAWLIER HAND (naturalist) - - I AM A WEAKISH SPELLER (playwright) + - 1. BUSHY CROFTER (presenter) + - 2. BATTIER EXPORT (illustrator and writer) + - 3. NOW ACE SAINT (physicist) + - 4. SCRAWLIER HAND (naturalist) + - 5. I AM A WEAKISH SPELLER (playwright) answerText: - - BRUCE FORSYTH - - BEATRIX POTTER - - ISAAC NEWTON - - CHARLES DARWIN - - WILLIAM SHAKESPEARE + - 1. BRUCE FORSYTH + - 2. BEATRIX POTTER + - 3. ISAAC NEWTON + - 4. CHARLES DARWIN + - 5. WILLIAM SHAKESPEARE answerPoints: 0200000004000000070000000d0000001e000000 --- !u!1 &1066129050 GameObject: @@ -10372,11 +13726,12 @@ Transform: m_GameObject: {fileID: 1069630397} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalPosition: {x: 0, y: 0, z: -1.275} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1857316188} + - {fileID: 694385050} m_Father: {fileID: 1780541056} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1069902874 @@ -10464,7 +13819,7 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1069902874} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0.00000023841855, z: -0, w: 1} m_LocalPosition: {x: 0, y: 1.5, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -10505,6 +13860,8 @@ Transform: - {fileID: 843122634} - {fileID: 116019993} - {fileID: 1780541056} + - {fileID: 47997571} + - {fileID: 1743423422} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1084975124 @@ -10529,7 +13886,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} propertyPath: m_LocalRotation.w - value: 0.9866797 + value: 0.9715362 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} propertyPath: m_LocalRotation.x @@ -10537,7 +13894,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} propertyPath: m_LocalRotation.y - value: 0.16267522 + value: 0.23689112 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} propertyPath: m_LocalRotation.z @@ -10549,7 +13906,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} propertyPath: m_LocalEulerAnglesHint.y - value: 18.724 + value: 27.406 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} propertyPath: m_LocalEulerAnglesHint.z @@ -10569,7 +13926,19 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] - m_AddedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} + insertIndex: -1 + addedObject: {fileID: 983768280} + - targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} + insertIndex: -1 + addedObject: {fileID: 1718745620} + - targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} + insertIndex: -1 + addedObject: {fileID: 1732251926} + - targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} + insertIndex: -1 + addedObject: {fileID: 900851003} m_AddedComponents: - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: b15b36c582a62d645acac3788ddc723e, type: 3} insertIndex: -1 @@ -10611,11 +13980,6 @@ BoxCollider: serializedVersion: 3 m_Size: {x: 3.7465565, y: 0.86141926, z: 0.71520543} m_Center: {x: 0, y: 0.43070963, z: -0.00000037252903} ---- !u!1 &1100610989 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: c612308e343bb894f8c1de3fa055f069, type: 3} - m_PrefabInstance: {fileID: 1110630393} - m_PrefabAsset: {fileID: 0} --- !u!1001 &1110630393 PrefabInstance: m_ObjectHideFlags: 0 @@ -10707,6 +14071,70 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: c612308e343bb894f8c1de3fa055f069, type: 3} m_PrefabInstance: {fileID: 1110630393} m_PrefabAsset: {fileID: 0} +--- !u!1 &1116979438 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1116979439} + - component: {fileID: 1116979440} + m_Layer: 0 + m_Name: Bakery Volume - FirstCorridorLightVolume + m_TagString: EditorOnly + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1116979439 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1116979438} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1864825429} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1116979440 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1116979438} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 17ce3c1d3490b7143a67ebdc73cab6c1, type: 3} + m_Name: + m_EditorClassIdentifier: + enableBaking: 1 + bounds: + m_Center: {x: -8.324139, y: 3.0074248, z: 5.5170593} + m_Extent: {x: 19.41729, y: 3.0459888, z: 1.4460368} + adaptiveRes: 0 + voxelsPerUnit: 0.5 + resolutionX: 39 + resolutionY: 6 + resolutionZ: 3 + encoding: 0 + shadowmaskEncoding: 0 + firstLightIsAlwaysAlpha: 0 + denoise: 1 + isGlobal: 0 + bakedTexture0: {fileID: 11700000, guid: 97502640ba8093f44bc1b76d6c9b50c8, type: 2} + bakedTexture1: {fileID: 11700000, guid: 7a20bd65aa8aa634691271b2935eb2ac, type: 2} + bakedTexture2: {fileID: 11700000, guid: aa5ad81283b32354aa1fa50a28efae58, type: 2} + bakedTexture3: {fileID: 0} + bakedMask: {fileID: 0} + supportRotationAfterBake: 0 --- !u!1 &1117713373 GameObject: m_ObjectHideFlags: 0 @@ -10717,7 +14145,6 @@ GameObject: m_Component: - component: {fileID: 1117713374} - component: {fileID: 1117713378} - - component: {fileID: 1117713377} - component: {fileID: 1117713376} - component: {fileID: 1117713375} m_Layer: 0 @@ -10799,36 +14226,6 @@ MonoBehaviour: m_OnValueChanged: m_PersistentCalls: m_Calls: [] ---- !u!114 &1117713377 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1117713373} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 2100000, guid: 35630e38b4e5ffb40b44ec5348b4333f, type: 2} - m_Color: {r: 1, g: 1, b: 1, a: 0.392} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 --- !u!222 &1117713378 CanvasRenderer: m_ObjectHideFlags: 0 @@ -11060,11 +14457,6 @@ RectTransform: m_CorrespondingSourceObject: {fileID: 4190840084691999592, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 1235844105} m_PrefabAsset: {fileID: 0} ---- !u!1 &1154805462 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} - m_PrefabInstance: {fileID: 1951785634} - m_PrefabAsset: {fileID: 0} --- !u!1001 &1158088443 PrefabInstance: m_ObjectHideFlags: 0 @@ -11231,11 +14623,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1159989516} m_CullTransparentMesh: 1 ---- !u!1 &1161580039 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1671211409786305901, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 1235844105} - m_PrefabAsset: {fileID: 0} --- !u!23 &1161580041 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 5629896105277814212, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -11425,11 +14812,6 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 2f5faf56eef0ad748ad331a95b4b2abc, type: 3} m_PrefabInstance: {fileID: 1167160674} m_PrefabAsset: {fileID: 0} ---- !u!1 &1167160676 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 2f5faf56eef0ad748ad331a95b4b2abc, type: 3} - m_PrefabInstance: {fileID: 1167160674} - m_PrefabAsset: {fileID: 0} --- !u!23 &1167160677 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 2f5faf56eef0ad748ad331a95b4b2abc, type: 3} @@ -11576,21 +14958,11 @@ BoxCollider: serializedVersion: 3 m_Size: {x: 8, y: 0.1, z: 3} m_Center: {x: 0, y: 0.05, z: 0} ---- !u!1 &1171278108 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9004724186224534342, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 1725237038} - m_PrefabAsset: {fileID: 0} --- !u!23 &1171278111 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 1674034645716136823, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 1725237038} m_PrefabAsset: {fileID: 0} ---- !u!1 &1175818454 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1602191932284858098, guid: 844da2a9bfdfa474784b61993287bcc8, type: 3} - m_PrefabInstance: {fileID: 497102803} - m_PrefabAsset: {fileID: 0} --- !u!23 &1175818456 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 5704965970850866779, guid: 844da2a9bfdfa474784b61993287bcc8, type: 3} @@ -11764,6 +15136,19 @@ Transform: m_Children: - {fileID: 386146000} - {fileID: 1063988527} + - {fileID: 498870970} + - {fileID: 718461063} + - {fileID: 218699820} + - {fileID: 806040158} + - {fileID: 685262448} + - {fileID: 1843492939} + - {fileID: 8066935} + - {fileID: 1594174616} + - {fileID: 2108277323} + - {fileID: 2138198204} + - {fileID: 388563201} + - {fileID: 884135816} + - {fileID: 2118094028} m_Father: {fileID: 1780541056} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1177781898 @@ -11816,18 +15201,65 @@ MonoBehaviour: questions: - {fileID: 386146002} - {fileID: 1063988529} - - {fileID: 0} + - {fileID: 498870972} + - {fileID: 718461065} + - {fileID: 218699822} + - {fileID: 806040160} currentQuestion: {fileID: 0} ---- !u!1 &1180520676 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: e0c20034b53a10b46a77b3bd46e1c232, type: 3} - m_PrefabInstance: {fileID: 350653488} - m_PrefabAsset: {fileID: 0} --- !u!23 &1180520677 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: e0c20034b53a10b46a77b3bd46e1c232, type: 3} m_PrefabInstance: {fileID: 350653488} m_PrefabAsset: {fileID: 0} +--- !u!1 &1185645801 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + m_PrefabInstance: {fileID: 1378939246} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1194338542 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec0b4dd729a12d046982652f834580a2, type: 3} + m_Name: QuizScene_LMA3 + m_EditorClassIdentifier: + resolution: 1024 + bitmask: 1 + id: 3 + sortingID: 3 + isImplicit: 1 + area: 0 + totalVertexCount: 0 + vertexCounter: 0 + sceneLodLevel: -1 + autoResolution: 0 + sceneName: + tag: -1 + containsTerrains: 0 + probes: 0 + mode: 1 + renderMode: 1000 + renderDirMode: 1000 + atlasPacker: 1000 + holeFilling: 0 + computeSSS: 0 + sssSamples: 16 + sssDensity: 10 + sssColor: {r: 1, g: 1, b: 1, a: 1} + sssScale: 1 + fakeShadowBias: 0 + transparentSelfShadow: 0 + flipNormal: 0 + parentName: + overridePath: + fixPos3D: 0 + voxelSize: {x: 1, y: 1, z: 1} + passedFilter: 0 --- !u!1001 &1196589733 PrefabInstance: m_ObjectHideFlags: 0 @@ -11906,21 +15338,11 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 2f5faf56eef0ad748ad331a95b4b2abc, type: 3} m_PrefabInstance: {fileID: 1196589733} m_PrefabAsset: {fileID: 0} ---- !u!1 &1196589735 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 2f5faf56eef0ad748ad331a95b4b2abc, type: 3} - m_PrefabInstance: {fileID: 1196589733} - m_PrefabAsset: {fileID: 0} --- !u!23 &1196589736 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 2f5faf56eef0ad748ad331a95b4b2abc, type: 3} m_PrefabInstance: {fileID: 1196589733} m_PrefabAsset: {fileID: 0} ---- !u!1 &1200045622 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 6515456391347357321, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 1725237038} - m_PrefabAsset: {fileID: 0} --- !u!23 &1200045625 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 3578079415854012088, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -11991,11 +15413,6 @@ ReflectionProbe: m_UseOcclusionCulling: 1 m_Importance: 1 m_CustomBakedTexture: {fileID: 0} ---- !u!1 &1202813578 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9004724186224534342, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 2086896412} - m_PrefabAsset: {fileID: 0} --- !u!23 &1202813581 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 1674034645716136823, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -12107,6 +15524,16 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1206777342} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1208938231 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + m_PrefabInstance: {fileID: 7577744586880749714} + m_PrefabAsset: {fileID: 0} +--- !u!23 &1208938234 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: 2697018564455198238, guid: acde36bc75391a540a76c589339eeb32, type: 3} + m_PrefabInstance: {fileID: 7577744586880749714} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1211523182 PrefabInstance: m_ObjectHideFlags: 0 @@ -12125,7 +15552,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: 2c956306fc5b5ee4a87cfb0d2f12d3b3, type: 3} propertyPath: m_LocalPosition.z - value: 2.51 + value: 1.035 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: 2c956306fc5b5ee4a87cfb0d2f12d3b3, type: 3} propertyPath: m_LocalRotation.w @@ -12177,7 +15604,10 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] - m_AddedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: 2c956306fc5b5ee4a87cfb0d2f12d3b3, type: 3} + insertIndex: -1 + addedObject: {fileID: 831209429} m_AddedComponents: - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 2c956306fc5b5ee4a87cfb0d2f12d3b3, type: 3} insertIndex: -1 @@ -12219,11 +15649,6 @@ BoxCollider: serializedVersion: 3 m_Size: {x: 5.249424, y: 5.249423, z: 0.20371175} m_Center: {x: -0.0000017881393, y: 2.6247115, z: 0.033294916} ---- !u!1 &1215367026 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9077638431373897945, guid: 844da2a9bfdfa474784b61993287bcc8, type: 3} - m_PrefabInstance: {fileID: 497102803} - m_PrefabAsset: {fileID: 0} --- !u!23 &1215367029 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 1600512188104761576, guid: 844da2a9bfdfa474784b61993287bcc8, type: 3} @@ -13158,11 +16583,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: df6e8d6ea43de87479510788c8e2f15d, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &1248951362 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1337646829457088878, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} - m_PrefabInstance: {fileID: 2143233303} - m_PrefabAsset: {fileID: 0} --- !u!1001 &1249668048 PrefabInstance: m_ObjectHideFlags: 0 @@ -13237,11 +16657,6 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 09436c050a69bf0449a0a979b01268b7, type: 3} m_PrefabInstance: {fileID: 1249668048} m_PrefabAsset: {fileID: 0} ---- !u!1 &1249782216 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1671211409786305901, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 576108662} - m_PrefabAsset: {fileID: 0} --- !u!23 &1249782218 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 5629896105277814212, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -13756,21 +17171,11 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: 6747071118349076704, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 1235844105} m_PrefabAsset: {fileID: 0} ---- !u!1 &1283295609 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1671211409786305901, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 445112381} - m_PrefabAsset: {fileID: 0} --- !u!23 &1283295611 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 5629896105277814212, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 445112381} m_PrefabAsset: {fileID: 0} ---- !u!1 &1284703410 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1337646829457088878, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} - m_PrefabInstance: {fileID: 1258962441} - m_PrefabAsset: {fileID: 0} --- !u!23 &1284703411 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 689256096079544507, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} @@ -14045,18 +17450,243 @@ Transform: - {fileID: 1534685191} - {fileID: 1084975125} - {fileID: 1022957621} + - {fileID: 1354535476} + - {fileID: 1935895838} + - {fileID: 1965163776} + - {fileID: 1754882562} m_Father: {fileID: 1780541056} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1305487867 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9189557463581648220, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 2086896412} - m_PrefabAsset: {fileID: 0} --- !u!1 &1305506285 stripped GameObject: m_CorrespondingSourceObject: {fileID: 2880588319250313143, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 3663352991328551858} m_PrefabAsset: {fileID: 0} +--- !u!1001 &1307231586 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1743423422} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalScale.x + value: 0.016027614 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalScale.y + value: 0.016027616 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalScale.z + value: 0.016027616 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalPosition.x + value: 3.41 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalPosition.y + value: 0.27911305 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalPosition.z + value: -26.56 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.w + value: -0.9468482 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.x + value: 0.022720505 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.y + value: 0.32074976 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.z + value: -0.009043885 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: -2.133 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 322.538 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 1.818 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: f45e687b234af6948b76b2622ed33647, type: 2} + - target: {fileID: 919132149155446097, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_Name + value: OfficeChair (5) + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 4484e3331bc52724593257a69e2553b8, type: 3} +--- !u!4 &1307231587 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + m_PrefabInstance: {fileID: 1307231586} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1307231588 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + m_PrefabInstance: {fileID: 1307231586} + m_PrefabAsset: {fileID: 0} +--- !u!23 &1307231589 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + m_PrefabInstance: {fileID: 1307231586} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1315194807 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1315194808} + - component: {fileID: 1315194810} + - component: {fileID: 1315194809} + m_Layer: 0 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1315194808 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1315194807} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 528146573} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1315194809 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1315194807} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: RESET METER + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1315194810 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1315194807} + m_CullTransparentMesh: 1 --- !u!1 &1326121075 GameObject: m_ObjectHideFlags: 1 @@ -14097,10 +17727,10 @@ MonoBehaviour: renderSettingsPerformRendering: 1 renderSettingsUserRenderMode: 0 renderSettingsDistanceShadowmask: 0 - renderSettingsSettingsMode: 0 + renderSettingsSettingsMode: 1 renderSettingsFixSeams: 1 renderSettingsDenoise: 1 - renderSettingsDenoise2x: 0 + renderSettingsDenoise2x: 1 renderSettingsEncode: 1 renderSettingsEncodeMode: 0 renderSettingsOverwriteWarning: 0 @@ -14124,10 +17754,10 @@ MonoBehaviour: renderSettingsHackAOSamples: 16 renderSettingsHackAORadius: 1 renderSettingsShowAOSettings: 0 - renderSettingsShowTasks: 0 + renderSettingsShowTasks: 1 renderSettingsShowTasks2: 1 renderSettingsShowPaths: 1 - renderSettingsShowNet: 1 + renderSettingsShowNet: 0 renderSettingsOcclusionProbes: 0 renderSettingsTexelsPerMap: 0 renderSettingsTexelsColor: 1 @@ -14141,7 +17771,7 @@ MonoBehaviour: renderSettingsPrefabWarning: 1 renderSettingsSplitByScene: 0 renderSettingsSplitByTag: 0 - renderSettingsUVPaddingMax: 0 + renderSettingsUVPaddingMax: 1 renderSettingsPostPacking: 1 renderSettingsHoleFilling: 0 renderSettingsBeepOnFinish: 1 @@ -14159,13 +17789,13 @@ MonoBehaviour: renderSettingsBatchPoints: 1 renderSettingsCompressVolumes: 0 renderSettingsBatchAreaLightSampleLimit: 0 - renderSettingsSector: {fileID: 0} + renderSettingsSector: {fileID: 1743423423} renderSettingsRTPVExport: 1 renderSettingsRTPVSceneView: 1 renderSettingsRTPVHDR: 0 - renderSettingsRTPVWidth: 1530 - renderSettingsRTPVHeight: 856 - lastBakeTime: 41 + renderSettingsRTPVWidth: 1645 + renderSettingsRTPVHeight: 901 + lastBakeTime: 45 enlightenWarningShown: 0 enlightenWarningShown2: 0 uniqueLights: @@ -14178,21 +17808,33 @@ MonoBehaviour: - {fileID: 1246946031} - {fileID: 1432026712} - {fileID: 1983330141} - - {fileID: 289797912} - - {fileID: 402041232} - - {fileID: 445817681} - - {fileID: 565587541} - - {fileID: 663255357} - - {fileID: 697177925} - - {fileID: 721237959} - - {fileID: 970991428} - - {fileID: 983561334} - - {fileID: 1417368005} + - {fileID: 688445501} + - {fileID: 1673173617} - {fileID: 1561780499} - - {fileID: 1773291424} + - {fileID: 1389625174} + - {fileID: 1366527141} + - {fileID: 1028628261} + - {fileID: 983561334} + - {fileID: 721237959} + - {fileID: 697177925} + - {fileID: 565587541} + - {fileID: 445817681} + - {fileID: 178208185} - {fileID: 1780240771} - - {fileID: 1826036082} + - {fileID: 139112633} - {fileID: 2005781144} + - {fileID: 402041232} + - {fileID: 970991428} + - {fileID: 446262698} + - {fileID: 1773291424} + - {fileID: 1417368005} + - {fileID: 284328717} + - {fileID: 289797912} + - {fileID: 992013953} + - {fileID: 663255357} + - {fileID: 77699394} + - {fileID: 599447122} + - {fileID: 1826036082} lights: - tform: e00: 1 @@ -14477,22 +18119,22 @@ MonoBehaviour: e00: 1 e01: 0 e02: 0 - e03: -8 + e03: 0.5020771 e10: 0 - e11: 0.0000029961254 + e11: 0.0000029206276 e12: -1.0000001 - e13: 8 + e13: 6.682452 e20: 0 e21: 1.0000001 - e22: 0.0000029961254 - e23: 5.4999995 + e22: 0.0000029206276 + e23: -21.673576 e30: 0 e31: 0 e32: 0 e33: 1 color: {r: 1, g: 1, b: 1, a: 1} - intensity: 1 - range: 50 + intensity: 3 + range: 60 radius: 0.05 samples: 8 samples2: 0 @@ -14502,90 +18144,28 @@ MonoBehaviour: realisticFalloff: 0 projMode: 1 cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} - angle: 90 + angle: 40 UID: 10 - tform: e00: 1 e01: 0 e02: 0 - e03: -16 - e10: 0 - e11: 0.0000029961254 - e12: -1.0000001 - e13: 8 - e20: 0 - e21: 1.0000001 - e22: 0.0000029961254 - e23: 5.4999995 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - color: {r: 1, g: 1, b: 1, a: 1} - intensity: 1 - range: 50 - radius: 0.05 - samples: 8 - samples2: 0 - bitmask: 0 - bakeToIndirect: 0 - selfShadow: 0 - realisticFalloff: 0 - projMode: 1 - cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} - angle: 90 - UID: 11 - - tform: - e00: 0.72713447 - e01: 0.64950275 - e02: -0.22230984 - e03: -29.778 - e10: 0.0057148337 - e11: -0.32954895 - e12: -0.94412136 - e13: 6.498271 - e20: -0.6864713 - e21: 0.68523276 - e22: -0.24333823 - e23: -6.746 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - color: {r: 0, g: 0.065570354, b: 1, a: 1} - intensity: 1 - range: 20 - radius: 0.05 - samples: 8 - samples2: 0 - bitmask: 0 - bakeToIndirect: 0 - selfShadow: 0 - realisticFalloff: 0 - projMode: 1 - cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} - angle: 62 - UID: 12 - - tform: - e00: 0.9999999 - e01: 0 - e02: 0 - e03: -27.925985 + e03: 8.574717 e10: 0 e11: 1 e12: 0 - e13: 2.1 + e13: 7.292819 e20: 0 e21: 0 - e22: 0.9999999 - e23: 8.420183 + e22: 1 + e23: -21.604193 e30: 0 e31: 0 e32: 0 e33: 1 - color: {r: 1, g: 1, b: 1, a: 1} + color: {r: 0.89411765, g: 0.9764706, b: 1, a: 1} intensity: 1 - range: 10 + range: 30 radius: 0.05 samples: 8 samples2: 0 @@ -14596,193 +18176,7 @@ MonoBehaviour: projMode: 0 cookie: {fileID: 0} angle: 30 - UID: 13 - - tform: - e00: 0.98817784 - e01: 0.0000006631017 - e02: -0.15331212 - e03: 32 - e10: -0.15331212 - e11: 0.0000035325672 - e12: -0.9881778 - e13: 4.18 - e20: -0.00000011508513 - e21: 1 - e22: 0.0000035912794 - e23: 5.4999995 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - color: {r: 1, g: 1, b: 1, a: 1} - intensity: 1 - range: 50 - radius: 0.05 - samples: 8 - samples2: 0 - bitmask: 0 - bakeToIndirect: 0 - selfShadow: 0 - realisticFalloff: 0 - projMode: 1 - cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} - angle: 90 - UID: 14 - - tform: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 0.0000029961254 - e12: -1.0000001 - e13: 8 - e20: 0 - e21: 1.0000001 - e22: 0.0000029961254 - e23: 5.4999995 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - color: {r: 1, g: 1, b: 1, a: 1} - intensity: 1 - range: 50 - radius: 0.05 - samples: 8 - samples2: 0 - bitmask: 0 - bakeToIndirect: 0 - selfShadow: 0 - realisticFalloff: 0 - projMode: 1 - cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} - angle: 90 - UID: 15 - - tform: - e00: 0.72713447 - e01: 0.64950275 - e02: -0.22230984 - e03: -34.41 - e10: 0.0057148337 - e11: -0.32954895 - e12: -0.94412136 - e13: 6.498271 - e20: -0.6864713 - e21: 0.68523276 - e22: -0.24333823 - e23: -5.17 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - color: {r: 1, g: 0.06152262, b: 0, a: 1} - intensity: 1 - range: 20 - radius: 0.05 - samples: 8 - samples2: 0 - bitmask: 0 - bakeToIndirect: 0 - selfShadow: 0 - realisticFalloff: 0 - projMode: 1 - cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} - angle: 62 - UID: 16 - - tform: - e00: 0.993534 - e01: -0.0000003501773 - e02: 0.11353491 - e03: 24 - e10: 0.11353491 - e11: 0.0000031749394 - e12: -0.993534 - e13: 6.81 - e20: -0.000000019747517 - e21: 1 - e22: 0.0000031744512 - e23: 5.4999995 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - color: {r: 1, g: 1, b: 1, a: 1} - intensity: 1 - range: 50 - radius: 0.05 - samples: 8 - samples2: 0 - bitmask: 0 - bakeToIndirect: 0 - selfShadow: 0 - realisticFalloff: 0 - projMode: 1 - cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} - angle: 90 - UID: 17 - - tform: - e00: 0.13416612 - e01: 0.90925634 - e02: -0.3940209 - e03: -28.939 - e10: -0.46901843 - e11: -0.29199588 - e12: -0.83352286 - e13: 6.498271 - e20: -0.8729383 - e21: 0.29663366 - e22: 0.3872819 - e23: -2.75 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - color: {r: 0.9433962, g: 0.8966422, b: 0.83214664, a: 1} - intensity: 1 - range: 20 - radius: 0.05 - samples: 8 - samples2: 0 - bitmask: 0 - bakeToIndirect: 0 - selfShadow: 0 - realisticFalloff: 0 - projMode: 1 - cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} - angle: 44.9 - UID: 18 - - tform: - e00: 1 - e01: 0 - e02: 0 - e03: 16 - e10: 0 - e11: 0.0000029961254 - e12: -1.0000001 - e13: 8 - e20: 0 - e21: 1.0000001 - e22: 0.0000029961254 - e23: 5.4999995 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - color: {r: 1, g: 1, b: 1, a: 1} - intensity: 1 - range: 50 - radius: 0.05 - samples: 8 - samples2: 0 - bitmask: 0 - bakeToIndirect: 0 - selfShadow: 0 - realisticFalloff: 0 - projMode: 1 - cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} - angle: 90 - UID: 19 + UID: 11 - tform: e00: 0.9999999 e01: 0 @@ -14813,12 +18207,167 @@ MonoBehaviour: projMode: 0 cookie: {fileID: 0} angle: 30 - UID: 20 + UID: 12 - tform: e00: 1 e01: 0 e02: 0 - e03: -24 + e03: 2.5747156 + e10: 0 + e11: 1 + e12: 0 + e13: 6.792819 + e20: 0 + e21: 0 + e22: 1 + e23: -25.104193 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + color: {r: 0.8915094, g: 0.97609526, b: 1, a: 1} + intensity: 1 + range: 30 + radius: 0.05 + samples: 8 + samples2: 0 + bitmask: 0 + bakeToIndirect: 0 + selfShadow: 0 + realisticFalloff: 0 + projMode: 0 + cookie: {fileID: 0} + angle: 30 + UID: 13 + - tform: + e00: 1 + e01: 0 + e02: 0 + e03: -20.379 + e10: 0 + e11: 1 + e12: 0 + e13: 7.465 + e20: 0 + e21: 0 + e22: 1 + e23: -10.671 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + color: {r: 1, g: 1, b: 1, a: 1} + intensity: 1 + range: 15 + radius: 0.05 + samples: 8 + samples2: 0 + bitmask: 0 + bakeToIndirect: 0 + selfShadow: 0 + realisticFalloff: 0 + projMode: 0 + cookie: {fileID: 0} + angle: 30 + UID: 14 + - tform: + e00: 1 + e01: 0 + e02: 0 + e03: -20.379 + e10: 0 + e11: 1 + e12: 0 + e13: 7.465 + e20: 0 + e21: 0 + e22: 1 + e23: 3.579 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + color: {r: 1, g: 1, b: 1, a: 1} + intensity: 1 + range: 15 + radius: 0.05 + samples: 8 + samples2: 0 + bitmask: 0 + bakeToIndirect: 0 + selfShadow: 0 + realisticFalloff: 0 + projMode: 0 + cookie: {fileID: 0} + angle: 30 + UID: 15 + - tform: + e00: 0.17787397 + e01: 0.9092562 + e02: -0.3763162 + e03: -28.939 + e10: -0.37172624 + e11: -0.29199576 + e12: -0.88122535 + e13: 6.498271 + e20: -0.91114235 + e21: 0.29663363 + e22: 0.28605598 + e23: -2.75 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + color: {r: 0.9433962, g: 0.8966422, b: 0.83214664, a: 1} + intensity: 1 + range: 20 + radius: 0.05 + samples: 8 + samples2: 0 + bitmask: 0 + bakeToIndirect: 0 + selfShadow: 0 + realisticFalloff: 0 + projMode: 1 + cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} + angle: 44.9 + UID: 16 + - tform: + e00: 0.72713447 + e01: 0.64950275 + e02: -0.22230984 + e03: -34.41 + e10: 0.0057148337 + e11: -0.32954895 + e12: -0.94412136 + e13: 6.498271 + e20: -0.6864713 + e21: 0.68523276 + e22: -0.24333823 + e23: -5.17 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + color: {r: 1, g: 0.055045873, b: 0, a: 1} + intensity: 1 + range: 20 + radius: 0.05 + samples: 8 + samples2: 0 + bitmask: 0 + bakeToIndirect: 0 + selfShadow: 0 + realisticFalloff: 0 + projMode: 1 + cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} + angle: 62 + UID: 17 + - tform: + e00: 1 + e01: 0 + e02: 0 + e03: 0 e10: 0 e11: 0.0000029961254 e12: -1.0000001 @@ -14844,6 +18393,99 @@ MonoBehaviour: projMode: 1 cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} angle: 90 + UID: 18 + - tform: + e00: 0.9999999 + e01: 0 + e02: 0 + e03: -27.925985 + e10: 0 + e11: 1 + e12: 0 + e13: 2.1 + e20: 0 + e21: 0 + e22: 0.9999999 + e23: 8.420183 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + color: {r: 1, g: 1, b: 1, a: 1} + intensity: 1 + range: 10 + radius: 0.05 + samples: 8 + samples2: 0 + bitmask: 0 + bakeToIndirect: 0 + selfShadow: 0 + realisticFalloff: 0 + projMode: 0 + cookie: {fileID: 0} + angle: 30 + UID: 19 + - tform: + e00: 0.72713447 + e01: 0.64950275 + e02: -0.22230984 + e03: -29.778 + e10: 0.0057148337 + e11: -0.32954895 + e12: -0.94412136 + e13: 6.498271 + e20: -0.6864713 + e21: 0.68523276 + e22: -0.24333823 + e23: -6.7460003 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + color: {r: 0, g: 0.065570354, b: 1, a: 1} + intensity: 1 + range: 20 + radius: 0.05 + samples: 8 + samples2: 0 + bitmask: 0 + bakeToIndirect: 0 + selfShadow: 0 + realisticFalloff: 0 + projMode: 1 + cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} + angle: 62 + UID: 20 + - tform: + e00: 1 + e01: 0 + e02: 0 + e03: 2.5747166 + e10: 0 + e11: 1 + e12: 0 + e13: 6.792819 + e20: 0 + e21: 0 + e22: 1 + e23: -18.354193 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + color: {r: 0.89411765, g: 0.9764706, b: 1, a: 1} + intensity: 1 + range: 30 + radius: 0.05 + samples: 8 + samples2: 0 + bitmask: 0 + bakeToIndirect: 0 + selfShadow: 0 + realisticFalloff: 0 + projMode: 0 + cookie: {fileID: 0} + angle: 30 UID: 21 - tform: e00: 1 @@ -14877,18 +18519,18 @@ MonoBehaviour: angle: 30 UID: 22 - tform: - e00: 1 - e01: 0 - e02: 0 - e03: -23.075 - e10: 0 + e00: -1 + e01: -1.1524945e-12 + e02: 0.000006079673 + e03: -10.727383 + e10: -6.960978e-13 e11: 1 - e12: 0 - e13: 2.1 - e20: 0 - e21: 0 - e22: 1 - e23: 8.420195 + e12: 0.000000075498264 + e13: 7.1000004 + e20: -0.000006079673 + e21: 0.00000007549826 + e22: -1 + e23: -15.100008 e30: 0 e31: 0 e32: 0 @@ -14938,294 +18580,418 @@ MonoBehaviour: cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} angle: 90 UID: 24 + - tform: + e00: 1 + e01: 0 + e02: 0 + e03: -16 + e10: 0 + e11: 0.0000029961254 + e12: -1.0000001 + e13: 8 + e20: 0 + e21: 1.0000001 + e22: 0.0000029961254 + e23: 5.4999995 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + color: {r: 1, g: 1, b: 1, a: 1} + intensity: 1 + range: 50 + radius: 0.05 + samples: 8 + samples2: 0 + bitmask: 0 + bakeToIndirect: 0 + selfShadow: 0 + realisticFalloff: 0 + projMode: 1 + cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} + angle: 90 + UID: 25 + - tform: + e00: 0.993534 + e01: -0.0000003501773 + e02: 0.11353491 + e03: 24 + e10: 0.11353491 + e11: 0.0000031749394 + e12: -0.993534 + e13: 6.81 + e20: -0.000000019747517 + e21: 1 + e22: 0.0000031744512 + e23: 5.4999995 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + color: {r: 1, g: 1, b: 1, a: 1} + intensity: 1 + range: 50 + radius: 0.05 + samples: 8 + samples2: 0 + bitmask: 0 + bakeToIndirect: 0 + selfShadow: 0 + realisticFalloff: 0 + projMode: 1 + cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} + angle: 90 + UID: 26 + - tform: + e00: 1 + e01: 0 + e02: 0 + e03: -20 + e10: 0 + e11: 0.0000029961254 + e12: -1.0000001 + e13: 8 + e20: 0 + e21: 1.0000001 + e22: 0.0000029961254 + e23: -12.5 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + color: {r: 1, g: 1, b: 1, a: 1} + intensity: 1 + range: 50 + radius: 0.05 + samples: 8 + samples2: 0 + bitmask: 0 + bakeToIndirect: 0 + selfShadow: 0 + realisticFalloff: 0 + projMode: 1 + cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} + angle: 90 + UID: 27 + - tform: + e00: 1 + e01: 0 + e02: 0 + e03: -24 + e10: 0 + e11: 0.0000029961254 + e12: -1.0000001 + e13: 8 + e20: 0 + e21: 1.0000001 + e22: 0.0000029961254 + e23: 5.4999995 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + color: {r: 1, g: 1, b: 1, a: 1} + intensity: 1 + range: 50 + radius: 0.05 + samples: 8 + samples2: 0 + bitmask: 0 + bakeToIndirect: 0 + selfShadow: 0 + realisticFalloff: 0 + projMode: 1 + cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} + angle: 90 + UID: 28 + - tform: + e00: 1 + e01: 0 + e02: 0 + e03: 16 + e10: 0 + e11: 0.0000029961254 + e12: -1.0000001 + e13: 8 + e20: 0 + e21: 1.0000001 + e22: 0.0000029961254 + e23: 5.4999995 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + color: {r: 1, g: 1, b: 1, a: 1} + intensity: 1 + range: 50 + radius: 0.05 + samples: 8 + samples2: 0 + bitmask: 0 + bakeToIndirect: 0 + selfShadow: 0 + realisticFalloff: 0 + projMode: 1 + cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} + angle: 90 + UID: 29 + - tform: + e00: 0.0000030994415 + e01: 3.055326e-13 + e02: -1 + e03: -13.500001 + e10: -2.629008e-13 + e11: 1 + e12: 3.1240578e-13 + e13: 1.6000004 + e20: 1 + e21: 2.629008e-13 + e22: 0.0000030994415 + e23: -9.322601 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + color: {r: 1, g: 1, b: 1, a: 1} + intensity: 1 + range: 10 + radius: 0.05 + samples: 8 + samples2: 0 + bitmask: 0 + bakeToIndirect: 0 + selfShadow: 0 + realisticFalloff: 0 + projMode: 0 + cookie: {fileID: 0} + angle: 30 + UID: 30 + - tform: + e00: 1 + e01: 0 + e02: 0 + e03: -8 + e10: 0 + e11: 0.0000029961254 + e12: -1.0000001 + e13: 8 + e20: 0 + e21: 1.0000001 + e22: 0.0000029961254 + e23: 5.4999995 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + color: {r: 1, g: 1, b: 1, a: 1} + intensity: 1 + range: 50 + radius: 0.05 + samples: 8 + samples2: 0 + bitmask: 0 + bakeToIndirect: 0 + selfShadow: 0 + realisticFalloff: 0 + projMode: 1 + cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} + angle: 90 + UID: 31 + - tform: + e00: 1 + e01: 0 + e02: 0 + e03: -12 + e10: 0 + e11: 0.0000029961254 + e12: -1.0000001 + e13: 8 + e20: 0 + e21: 1.0000001 + e22: 0.0000029961254 + e23: -12.5 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + color: {r: 1, g: 1, b: 1, a: 1} + intensity: 1 + range: 50 + radius: 0.05 + samples: 8 + samples2: 0 + bitmask: 0 + bakeToIndirect: 0 + selfShadow: 0 + realisticFalloff: 0 + projMode: 1 + cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} + angle: 90 + UID: 32 + - tform: + e00: 0.98817784 + e01: 0.0000006631017 + e02: -0.15331212 + e03: 32 + e10: -0.15331212 + e11: 0.0000035325672 + e12: -0.9881778 + e13: 4.18 + e20: -0.00000011508513 + e21: 1 + e22: 0.0000035912794 + e23: 5.4999995 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + color: {r: 1, g: 1, b: 1, a: 1} + intensity: 1 + range: 50 + radius: 0.05 + samples: 8 + samples2: 0 + bitmask: 0 + bakeToIndirect: 0 + selfShadow: 0 + realisticFalloff: 0 + projMode: 1 + cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} + angle: 90 + UID: 33 + - tform: + e00: 0.0000029206276 + e01: 0 + e02: 1 + e03: 6.663 + e10: 0 + e11: 1 + e12: 0 + e13: 3.0555 + e20: -1 + e21: 0 + e22: 0.0000029206276 + e23: -21.5007 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + color: {r: 0.9245283, g: 0.872153, b: 0.745728, a: 1} + intensity: 2 + range: 20 + radius: 0.05 + samples: 8 + samples2: 0 + bitmask: 0 + bakeToIndirect: 0 + selfShadow: 0 + realisticFalloff: 0 + projMode: 1 + cookie: {fileID: 2800000, guid: 3a66602b8cc7fdd4ab57d07b4176432b, type: 3} + angle: 179 + UID: 34 + - tform: + e00: -1 + e01: -1.1524945e-12 + e02: 0.000006079673 + e03: -10.727905 + e10: -6.960978e-13 + e11: 1 + e12: 0.000000075498264 + e13: 7.1000004 + e20: -0.000006079673 + e21: 0.00000007549826 + e22: -1 + e23: -28.100008 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + color: {r: 1, g: 1, b: 1, a: 1} + intensity: 1 + range: 10 + radius: 0.05 + samples: 8 + samples2: 0 + bitmask: 0 + bakeToIndirect: 0 + selfShadow: 0 + realisticFalloff: 0 + projMode: 0 + cookie: {fileID: 0} + angle: 30 + UID: 35 + - tform: + e00: 1 + e01: 0 + e02: 0 + e03: -23.075 + e10: 0 + e11: 1 + e12: 0 + e13: 2.1 + e20: 0 + e21: 0 + e22: 1 + e23: 8.420195 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + color: {r: 1, g: 1, b: 1, a: 1} + intensity: 1 + range: 10 + radius: 0.05 + samples: 8 + samples2: 0 + bitmask: 0 + bakeToIndirect: 0 + selfShadow: 0 + realisticFalloff: 0 + projMode: 0 + cookie: {fileID: 0} + angle: 30 + UID: 36 implicitGroups: - - {fileID: 776333169} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 516164608} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 516164608} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 516164608} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 516164608} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 516164608} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 516164608} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 516164608} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 516164608} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 516164608} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 516164608} - - {fileID: 1387059607} - - {fileID: 516164608} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} - - {fileID: 1387059607} + - {fileID: 2136442879} + - {fileID: 2136442879} + - {fileID: 664424129} + - {fileID: 1495929848} + - {fileID: 664424129} + - {fileID: 2136442879} + - {fileID: 664424129} + - {fileID: 664424129} + - {fileID: 1194338542} + - {fileID: 664424129} + - {fileID: 664424129} + - {fileID: 664424129} + - {fileID: 664424129} + - {fileID: 664424129} implicitGroupedObjects: - - {fileID: 0} - - {fileID: 19161767} - - {fileID: 32070979} - - {fileID: 54118399} - - {fileID: 64486097} - - {fileID: 70118288} - - {fileID: 85469500} - - {fileID: 148729729} - - {fileID: 169504786} - - {fileID: 176401568} - - {fileID: 180390131} - - {fileID: 199916733} - - {fileID: 207070945} - - {fileID: 236465231} - - {fileID: 242024050} - - {fileID: 273509086} - - {fileID: 274411456} - - {fileID: 277019528} - - {fileID: 278415026} - - {fileID: 284581924} - - {fileID: 285759824} - - {fileID: 382860429} - - {fileID: 386455101} - - {fileID: 421169974} - - {fileID: 428010771} - - {fileID: 429145264} - - {fileID: 445112392} - - {fileID: 445112395} - - {fileID: 458921920} - - {fileID: 485857146} - - {fileID: 486021624} - - {fileID: 495994987} - - {fileID: 501135176} - - {fileID: 509532019} - - {fileID: 512815369} - - {fileID: 523431839} - - {fileID: 590607346} - - {fileID: 619445892} - - {fileID: 619504801} - - {fileID: 636200867} - - {fileID: 652178688} - - {fileID: 656351594} - - {fileID: 659242416} - - {fileID: 660518651} - - {fileID: 690928970} - - {fileID: 697589666} - - {fileID: 705607181} - - {fileID: 706963244} - - {fileID: 722406035} - - {fileID: 756087330} - - {fileID: 758170911} - - {fileID: 762187142} - - {fileID: 783662497} - - {fileID: 783662500} - - {fileID: 837570460} - - {fileID: 860730342} - - {fileID: 864290492} - - {fileID: 872361898} - - {fileID: 874610118} - - {fileID: 898508163} - - {fileID: 909557901} - - {fileID: 924447928} - - {fileID: 925244475} - - {fileID: 929868508} - - {fileID: 995669711} - - {fileID: 998344274} - - {fileID: 998546394} - - {fileID: 1010830668} - - {fileID: 1011382460} - - {fileID: 1037297637} - - {fileID: 1084975126} - - {fileID: 1100610989} - - {fileID: 1121960432} - - {fileID: 1121960435} - - {fileID: 1154805462} - - {fileID: 1158088445} - - {fileID: 1161580039} - - {fileID: 1165789005} - - {fileID: 1167160676} - - {fileID: 1171278108} - - {fileID: 1175818454} - - {fileID: 1180520676} - - {fileID: 1196589735} - - {fileID: 1200045622} - - {fileID: 1202813578} - - {fileID: 1206777342} - - {fileID: 1211523184} - - {fileID: 1215367026} - - {fileID: 1248951362} - - {fileID: 1249782216} - - {fileID: 1282017661} - - {fileID: 1282017664} - - {fileID: 1283295609} - - {fileID: 1284703410} - - {fileID: 1305487867} - - {fileID: 1337770351} - - {fileID: 1367130176} - - {fileID: 1380217926} - - {fileID: 1410397139} - - {fileID: 1419124788} - - {fileID: 1419986015} - - {fileID: 1454042550} - - {fileID: 1467392866} - - {fileID: 1510596813} - - {fileID: 1513055745} - - {fileID: 1534685192} - - {fileID: 1559809792} - - {fileID: 1611991887} - - {fileID: 1635795633} - - {fileID: 1653014922} - - {fileID: 1656331689} - - {fileID: 1691059347} - - {fileID: 1691725976} - - {fileID: 1696707624} - - {fileID: 1699025118} - - {fileID: 1725237049} - - {fileID: 1725237052} - - {fileID: 1807744145} - - {fileID: 1824004555} - - {fileID: 1830291155} - - {fileID: 1834286058} - - {fileID: 1841159996} - - {fileID: 1848060571} - - {fileID: 1882895674} - - {fileID: 1889234630} - - {fileID: 1900556503} - - {fileID: 1922623931} - - {fileID: 1941564312} - - {fileID: 1959297855} - - {fileID: 1967346538} - - {fileID: 1977449746} - - {fileID: 2016568205} - - {fileID: 2034465665} - - {fileID: 2086896423} - - {fileID: 2086896426} - - {fileID: 2091574339} - - {fileID: 2102041128} - - {fileID: 2108197827} - - {fileID: 2122982386} + - {fileID: 88149416} + - {fileID: 139112634} + - {fileID: 302151438} + - {fileID: 448309811} + - {fileID: 593901292} + - {fileID: 599447123} + - {fileID: 882053295} + - {fileID: 910520424} + - {fileID: 1185645801} + - {fileID: 1307231588} + - {fileID: 1625315257} + - {fileID: 1851354688} + - {fileID: 2055335470} + - {fileID: 2067418217} bounds: - - m_Center: {x: -1.9928131, y: 5.61931, z: 1.0951881} - m_Extent: {x: 37.992813, y: 6.48069, z: 12.053319} - - m_Center: {x: -1.9678154, y: 6.022871, z: 4.232814} - m_Extent: {x: 38.01781, y: 6.0771294, z: 6.441847} - - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 5000, y: 5000, z: 5000} - hasEmissive: 0101 + - m_Center: {x: -1.0002375, y: 4.049999, z: -21.49999} + m_Extent: {x: 9.900268, y: 3.9499998, z: 7.500059} + - m_Center: {x: 1.599957, y: 2.3910067, z: -21.599934} + m_Extent: {x: 7.4000435, y: 2.1910067, z: 7.4000435} + - m_Center: {x: 1.9088712, y: 5.800132, z: -21.598242} + m_Extent: {x: 7.1201906, y: 2.5000038, z: 7.4840517} + - m_Center: {x: 1.5899221, y: 2.8001318, z: -21.59509} + m_Extent: {x: 7.049694, y: 2.5000038, z: 7.409952} + hasEmissive: 01010101 uvBuffOffsets: uvBuffLengths: uvSrcBuff: [] @@ -15237,79 +19003,82 @@ MonoBehaviour: lmGroupMinLOD: lmGroupLODMatrix: serverGetFileList: [] - lightmapHasColor: 010101 - lightmapHasMask: 000000000000000000000000 - lightmapHasDir: 000000 - lightmapHasRNM: 000001 + lightmapHasColor: 01010101 + lightmapHasMask: 00000000000000000000000000000000 + lightmapHasDir: 00000000 + lightmapHasRNM: 00000000 modifiedAssetPathList: - - Assets/Quiz/Models/TeamMachineRoom/IndustrialLamp.fbx - - Assets/Quiz/Models/Door.fbx - Assets/Quiz/Models/Lobby/LobbyChair.fbx - - Assets/Quiz/Models/Corridor/CorridorDoors.fbx + - Assets/Quiz/Models/Corridor/Debris/Barrel2.fbx - Assets/Quiz/Models/Lobby/LobbyPlant.fbx - - Assets/Quiz/Models/Corridor/Debris/BigChunk4.fbx - - Assets/Quiz/Models/Corridor/Debris/Ladder2.fbx + - Assets/Quiz/Models/GameRoom.fbx + - Assets/Quiz/Models/TeamMachineRoom/IndustrialLamp.fbx + - Assets/Quiz/Models/Corridor/Debris/Brick1.fbx + - Assets/Quiz/Models/Door.fbx - Assets/Quiz/Models/NoPoints/PointsMeter.fbx - Assets/Quiz/Models/StudioCurtain.fbx - Assets/Quiz/Models/Lobby/EndTable.fbx + - Assets/Quiz/Models/Corridor/CorridorDoors.fbx - Assets/Quiz/Models/Lobby/NewspaperUnfolded 1.fbx - - Assets/Quiz/Models/Corridor/Debris/BigChunk1.fbx - Assets/Quiz/Models/Lobby/PinBoard.fbx - - Assets/Quiz/Models/Corridor/Debris/Brick1.fbx + - Assets/Quiz/Models/DownCount/DowncountPlayerDesk.fbx - Assets/Quiz/Models/Lobby/Newspaper.fbx - - Assets/Quiz/Models/Corridor/Debris/Barrel1.fbx - Assets/Quiz/Models/NoPoints/Circles_NoPoints.fbx - - Assets/Quiz/Models/Corridor/Debris/Brick3.fbx - - Assets/Quiz/Models/Corridor/Debris/BigChunk5.fbx - - Assets/Quiz/Models/TeamMachineRoom/TeamMachineRoom.fbx - Assets/Quiz/Models/Lobby/Table.fbx - Assets/Quiz/Models/Lobby/Blinds.fbx - - Assets/Quiz/Models/NoPoints/PlayerDesk_NoPoints.fbx - - Assets/Quiz/Models/Corridor/CorridorWall.fbx - - Assets/Quiz/Models/Lobby/LobbyWindow.fbx - - Assets/Quiz/Models/NoPoints/Screen_NoPoints.fbx - - Assets/Quiz/Models/TeamMachineRoom/TeamMachine.fbx - - Assets/Quiz/Models/Lobby/TV.fbx - - Assets/Quiz/Models/Corridor/Debris/Barrel2.fbx - - Assets/Quiz/Models/Corridor/Debris/Chunk6.fbx - Assets/Quiz/Models/Corridor/Debris/Chunk5.fbx + - Assets/Quiz/Models/Corridor/Debris/BigChunk1.fbx + - Assets/Quiz/Models/NoPoints/PlayerDesk_NoPoints.fbx + - Assets/Quiz/Models/Lobby/LobbyWindow.fbx + - Assets/Quiz/Models/DownCount/Walls.fbx + - Assets/Quiz/Models/NoPoints/Screen_NoPoints.fbx + - Assets/Quiz/Models/Corridor/Debris/Chunk6.fbx + - Assets/Quiz/Models/Corridor/Debris/BigChunk4.fbx + - Assets/Quiz/Models/TeamMachineRoom/TeamMachine.fbx + - Assets/Quiz/Models/Corridor/Debris/BigChunk5.fbx - Assets/Quiz/Models/Corridor/Debris/Chunk3.fbx - - Assets/Quiz/Models/NoPoints/Platform_NoPoints.fbx + - Assets/Quiz/Models/Lobby/TV.fbx + - Assets/Quiz/Models/TeamMachineRoom/TeamMachineRoom.fbx + - Assets/Quiz/Models/Corridor/Debris/Brick3.fbx + - Assets/Quiz/Models/Corridor/Debris/Barrel1.fbx - Assets/Quiz/Models/Corridor/CorridorDoorsWindow.fbx + - Assets/Quiz/Models/Corridor/Debris/Ladder2.fbx + - Assets/Quiz/Models/NoPoints/Platform_NoPoints.fbx + - Assets/Quiz/Models/DownCount/Floor.fbx + - Assets/Quiz/Models/Camera.fbx - Assets/Quiz/Models/NoPoints/HostDesk_NoPoints.fbx - Assets/Quiz/Models/Lobby/LobbyRoom.fbx - - Assets/Quiz/Models/GameRoom.fbx modifiedAssets: + - meshName: + - LobbyChair + padding: 32000000 + unwrapper: 00000000 + - meshName: + - Barrel2 + padding: 21000000 + unwrapper: 00000000 + - meshName: + - Plant + padding: 21000000 + unwrapper: 00000000 + - meshName: + - GameRoom + padding: 02000000 + unwrapper: 00000000 - meshName: - industrial_wall_lamp padding: 6c000000 unwrapper: 00000000 + - meshName: + - Brick1 + padding: bf000000 + unwrapper: 00000000 - meshName: - DoorFrame - Door - DoorSign padding: 2700000023000000ba000000 unwrapper: 000000000000000000000000 - - meshName: - - LobbyChair - padding: 32000000 - unwrapper: 00000000 - - meshName: - - DoorCorridor - padding: 04000000 - unwrapper: 00000000 - - meshName: - - Plant - padding: 21000000 - unwrapper: 00000000 - - meshName: - - Chunk4 - padding: 13000000 - unwrapper: 00000000 - - meshName: - - Ladder2 - padding: 23000000 - unwrapper: 00000000 - meshName: - PointsMeterColumn padding: 09000000 @@ -15320,48 +19089,32 @@ MonoBehaviour: unwrapper: 00000000 - meshName: - Cube - padding: 19000000 + padding: 1c000000 + unwrapper: 00000000 + - meshName: + - DoorCorridor + padding: 04000000 unwrapper: 00000000 - meshName: - Cube padding: 87000000 unwrapper: 00000000 - - meshName: - - Chunk1 - padding: 18000000 - unwrapper: 00000000 - meshName: - CorkBoard padding: 17000000 unwrapper: 00000000 - meshName: - - Brick1 - padding: bf000000 + - PlayerDesk.001 + padding: 09000000 unwrapper: 00000000 - meshName: - Plane padding: 60000000 unwrapper: 00000000 - - meshName: - - Barrel1 - padding: 21000000 - unwrapper: 00000000 - meshName: - Roof Circle padding: 13000000 unwrapper: 00000000 - - meshName: - - Brick3 - padding: 00010000 - unwrapper: 00000000 - - meshName: - - Chunk5 - padding: 14000000 - unwrapper: 00000000 - - meshName: - - TeamRoom - padding: 06000000 - unwrapper: 00000000 - meshName: - Table padding: 1a000000 @@ -15371,53 +19124,85 @@ MonoBehaviour: padding: 1a000000 unwrapper: 00000000 - meshName: - - PlayerDesk - padding: 16000000 + - Chunk7 + padding: 25000000 unwrapper: 00000000 - meshName: - - CorridorWall - padding: 0c000000 + - Chunk1 + padding: 18000000 + unwrapper: 00000000 + - meshName: + - PlayerDesk + padding: 16000000 unwrapper: 00000000 - meshName: - Window padding: 11000000 unwrapper: 00000000 + - meshName: + - BackdropWall + padding: 03000000 + unwrapper: 00000000 - meshName: - Screen padding: 08000000 unwrapper: 00000000 - - meshName: - - TeamMachineSub - padding: 0d000000 - unwrapper: 00000000 - - meshName: - - TV - padding: 1e000000 - unwrapper: 00000000 - - meshName: - - Barrel2 - padding: 21000000 - unwrapper: 00000000 - meshName: - Chunk6 padding: 3c000000 unwrapper: 00000000 - meshName: - - Chunk7 - padding: 25000000 + - Chunk4 + padding: 13000000 + unwrapper: 00000000 + - meshName: + - TeamMachineSub + padding: 0d000000 + unwrapper: 00000000 + - meshName: + - Chunk5 + padding: 14000000 unwrapper: 00000000 - meshName: - Chunk9 padding: 2b000000 unwrapper: 00000000 - meshName: - - Platform - padding: 04000000 + - TV + padding: 1e000000 + unwrapper: 00000000 + - meshName: + - TeamRoom + padding: 06000000 + unwrapper: 00000000 + - meshName: + - Brick3 + padding: 00010000 + unwrapper: 00000000 + - meshName: + - Barrel1 + padding: 21000000 unwrapper: 00000000 - meshName: - DoorCorridorWindow padding: 05000000 unwrapper: 00000000 + - meshName: + - Ladder2 + padding: 23000000 + unwrapper: 00000000 + - meshName: + - Platform + padding: 04000000 + unwrapper: 00000000 + - meshName: + - Cylinder + padding: 03000000 + unwrapper: 00000000 + - meshName: + - cinecam + padding: 2f000000 + unwrapper: 00000000 - meshName: - HostDesk padding: 15000000 @@ -15426,11 +19211,14 @@ MonoBehaviour: - LobbyRoom padding: 04000000 unwrapper: 00000000 - - meshName: - - GameRoom - padding: 02000000 - unwrapper: 00000000 maps: + - {fileID: 2800000, guid: a171eca5a41371b49af1a8486f069191, type: 3} + - {fileID: 2800000, guid: 3bb4b8df33acc844d86b745ad5142f4d, type: 3} + - {fileID: 2800000, guid: 2c4a25ba39330d04bb43765156c38b60, type: 3} + - {fileID: 2800000, guid: 5c4db802caf40924d9e1219ab9502d53, type: 3} + - {fileID: 2800000, guid: fc08048a164c31e468f4a469ef35e727, type: 3} + - {fileID: 2800000, guid: 84471ec69056d9e468388f1ded2b85d9, type: 3} + - {fileID: 0} - {fileID: 2800000, guid: 874308a4b83c69048b7ac52347edd255, type: 3} - {fileID: 2800000, guid: b9b4faf4a4bf2a442bae5fb7a10d9cff, type: 3} masks: [] @@ -15440,303 +19228,357 @@ MonoBehaviour: rnmMaps2: [] mapsMode: bakedRenderers: - - {fileID: 473457880} - - {fileID: 32070981} + - {fileID: 88149417} + - {fileID: 139112635} + - {fileID: 302151439} + - {fileID: 448309812} + - {fileID: 593901293} + - {fileID: 599447124} + - {fileID: 882053296} + - {fileID: 910520425} + - {fileID: 1378939248} + - {fileID: 1307231589} + - {fileID: 1625315258} + - {fileID: 1851354689} + - {fileID: 2055335471} + - {fileID: 2067418218} - {fileID: 267155293} - - {fileID: 445112383} - - {fileID: 1636968102} - {fileID: 85469504} - - {fileID: 90357862} - - {fileID: 148729736} - - {fileID: 1939462325} - {fileID: 1641041690} - {fileID: 295151168} - {fileID: 400902256} - {fileID: 1362277938} - - {fileID: 220095151} - - {fileID: 497102810} - - {fileID: 242024053} - - {fileID: 245385924} - - {fileID: 273509088} - - {fileID: 1790682407} - - {fileID: 277019535} - - {fileID: 1813498671} - {fileID: 905496711} - - {fileID: 285759825} - - {fileID: 382860430} - {fileID: 444596393} - {fileID: 421169978} - - {fileID: 428010774} - - {fileID: 429145266} - - {fileID: 470987956} - - {fileID: 445112402} - - {fileID: 458921922} - {fileID: 2129333577} - - {fileID: 486021627} - - {fileID: 495994989} - - {fileID: 1291532161} - - {fileID: 1038648720} - {fileID: 512815370} - {fileID: 1230064630} - - {fileID: 590607348} - - {fileID: 1688320102} - {fileID: 619504804} - {fileID: 1272306634} - {fileID: 652178689} - - {fileID: 656351596} - - {fileID: 1564889617} - - {fileID: 660518652} - - {fileID: 679006205} - - {fileID: 1299859836} - - {fileID: 1516427555} - {fileID: 705607186} - - {fileID: 706963245} - - {fileID: 1247771532} - - {fileID: 732949856} - - {fileID: 756087333} - - {fileID: 758170914} - - {fileID: 762187145} - - {fileID: 772063725} - - {fileID: 783662507} - - {fileID: 837570461} - - {fileID: 1859244109} - - {fileID: 1381876080} - - {fileID: 1476782023} - - {fileID: 874610119} - - {fileID: 898508166} - - {fileID: 2067310249} - - {fileID: 924447930} - {fileID: 925244479} - - {fileID: 929868517} - - {fileID: 995669713} - {fileID: 998344275} - - {fileID: 998546395} - {fileID: 1010830669} - - {fileID: 1725237040} - {fileID: 1037297641} - - {fileID: 1084975127} - - {fileID: 1110630397} - - {fileID: 2029171463} - - {fileID: 1121960442} - - {fileID: 1951785636} - {fileID: 1158088447} - - {fileID: 1161580041} - {fileID: 1165789008} - - {fileID: 1167160677} - - {fileID: 1171278111} - - {fileID: 1175818456} - - {fileID: 1177050921} - {fileID: 1180520677} - - {fileID: 1196589736} - - {fileID: 1200045625} - - {fileID: 1202813581} - {fileID: 1206777345} - - {fileID: 1211523185} - - {fileID: 1215367029} - - {fileID: 1246946034} - {fileID: 2143233305} - - {fileID: 1249782218} - - {fileID: 1132664197} - - {fileID: 1282017671} - - {fileID: 1283295611} - {fileID: 1284703411} - - {fileID: 2086896414} - {fileID: 1487057095} - - {fileID: 1715216235} - - {fileID: 1380217928} - - {fileID: 1410397140} - - {fileID: 1419124789} - {fileID: 1419986018} - - {fileID: 1432026715} - - {fileID: 1454042551} - - {fileID: 1467392867} - - {fileID: 1786457064} - - {fileID: 1513055747} - - {fileID: 1534685193} - - {fileID: 1559809794} - - {fileID: 1611991890} - - {fileID: 1635795634} - - {fileID: 1653014925} - - {fileID: 1656331692} - {fileID: 1691059348} - {fileID: 1691725977} - {fileID: 1696707626} + - {fileID: 1889234631} + - {fileID: 2016568206} + - {fileID: 2091574342} + - {fileID: 1467392867} + - {fileID: 1859244109} + - {fileID: 2108197828} + - {fileID: 148729736} + - {fileID: 497102810} + - {fileID: 273509088} + - {fileID: 277019535} + - {fileID: 285759825} + - {fileID: 382860430} + - {fileID: 656351596} + - {fileID: 1656331692} + - {fileID: 1283295611} + - {fileID: 1653014925} + - {fileID: 445112383} + - {fileID: 470987956} + - {fileID: 445112402} + - {fileID: 446262687} + - {fileID: 446262689} + - {fileID: 446262691} + - {fileID: 446262693} + - {fileID: 446262695} + - {fileID: 446262697} + - {fileID: 446262700} + - {fileID: 473457880} + - {fileID: 2123724544} + - {fileID: 1175818456} + - {fileID: 1215367029} + - {fileID: 1513055747} + - {fileID: 756087333} + - {fileID: 1249782218} + - {fileID: 1611991890} + - {fileID: 1941564313} + - {fileID: 590607348} + - {fileID: 599148971} + - {fileID: 660518652} + - {fileID: 706963245} + - {fileID: 1247771532} + - {fileID: 772063725} + - {fileID: 783662507} + - {fileID: 837570461} + - {fileID: 874610119} + - {fileID: 929868517} + - {fileID: 1454042551} + - {fileID: 992013942} + - {fileID: 992013944} + - {fileID: 992013946} + - {fileID: 992013948} + - {fileID: 992013950} + - {fileID: 992013952} + - {fileID: 992013955} + - {fileID: 998546395} + - {fileID: 1848060572} + - {fileID: 1419124789} + - {fileID: 1038648720} + - {fileID: 1084975127} + - {fileID: 1110630397} + - {fileID: 32070981} + - {fileID: 1900556506} + - {fileID: 495994989} + - {fileID: 762187145} + - {fileID: 1830291156} + - {fileID: 2029171463} + - {fileID: 1121960442} + - {fileID: 1167160677} + - {fileID: 1196589736} + - {fileID: 1208938234} + - {fileID: 1211523185} + - {fileID: 1380217928} + - {fileID: 1291532161} + - {fileID: 1161580041} + - {fileID: 758170914} + - {fileID: 1882895675} + - {fileID: 1635795634} - {fileID: 1699025119} + - {fileID: 1132664197} + - {fileID: 1282017671} + - {fileID: 1299859836} + - {fileID: 1715216235} + - {fileID: 1375130218} + - {fileID: 1381876080} + - {fileID: 1807744146} + - {fileID: 1410118924} + - {fileID: 1426648475} + - {fileID: 1476782023} + - {fileID: 1786457064} + - {fileID: 1516427555} + - {fileID: 1534685193} + - {fileID: 1564889617} + - {fileID: 1841159997} + - {fileID: 1688320102} + - {fileID: 924447930} + - {fileID: 1200045625} + - {fileID: 995669713} + - {fileID: 1171278111} + - {fileID: 1725237040} - {fileID: 1367084273} - {fileID: 1725237059} - - {fileID: 1807744146} - - {fileID: 1824004554} - - {fileID: 1830291156} - - {fileID: 1834286059} - - {fileID: 1841159997} - - {fileID: 1848060572} - - {fileID: 1882895675} - - {fileID: 1889234631} - - {fileID: 1900556506} + - {fileID: 1754882564} - {fileID: 1922623933} - - {fileID: 1941564313} + - {fileID: 428010774} + - {fileID: 1790682407} + - {fileID: 2122982387} + - {fileID: 1813498671} + - {fileID: 1824004554} + - {fileID: 1834286059} + - {fileID: 1935895835} + - {fileID: 1939462325} + - {fileID: 1951785636} - {fileID: 1959297857} - - {fileID: 1967346540} + - {fileID: 1965163774} - {fileID: 1977449748} - - {fileID: 1983330144} - - {fileID: 2016568206} - {fileID: 2034465666} + - {fileID: 2067310249} + - {fileID: 429145266} + - {fileID: 486021627} + - {fileID: 458921922} + - {fileID: 1202813581} + - {fileID: 2086896414} - {fileID: 531545497} - {fileID: 2086896433} - - {fileID: 2091574342} - {fileID: 2102041130} - - {fileID: 2108197828} - - {fileID: 2122982387} - bakedIDs: 000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000ffffffff0000000000000000ffffffff0000000001000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000000000000000000000000000000000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000010000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000010000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000000000000000000000000000000000000000000000000000000000000 + - {fileID: 1967346540} + - {fileID: 242024053} + - {fileID: 1559809794} + - {fileID: 898508166} + - {fileID: 1636968102} + bakedIDs: 000000000000000001000000020000000100000000000000010000000100000003000000010000000100000001000000010000000100000005000000040000000400000004000000040000000400000004000000040000000400000004000000040000000400000004000000040000000400000004000000040000000400000004000000040000000400000004000000050000000400000004000000040000000400000004000000040000000400000004000000040000000400000004000000070000000700000007000000080000000800000007000000080000000800000008000000070000000700000007000000080000000700000008000000080000000700000008000000080000000700000007000000080000000800000007000000080000000700000007000000070000000700000007000000070000000700000007000000080000000700000008000000080000000800000008000000080000000700000008000000070000000700000008000000080000000700000007000000080000000800000007000000080000000700000007000000070000000700000007000000070000000700000007000000070000000800000007000000080000000800000008000000080000000700000008000000070000000700000008000000070000000800000008000000080000000700000007000000070000000700000007000000070000000700000008000000080000000700000007000000070000000800000007000000070000000700000007000000070000000700000008000000080000000800000007000000070000000800000007000000070000000700000008000000070000000700000008000000070000000700000007000000070000000700000007000000080000000700000007000000080000000800000008000000070000000700000007000000070000000800000008000000 bakedScaleOffset: - - {x: 0.0086271735, y: 0.0086004995, z: 0.6873811, w: 0.3065835} - - {x: 0.0045998143, y: 0.004599815, z: 0.6833797, w: 0.33046544} - - {x: 0.020062037, y: 0.020058453, z: 0.5217158, w: 0.9772722} - - {x: 0.2439894, y: 0.24428546, z: 0.20158303, w: 0.46465147} - - {x: 0.2439894, y: 0.24428546, z: 0.40338615, w: 0.7065723} - - {x: 0.030220358, y: 0.030226223, z: 0.43339258, w: 0.94847345} - - {x: 1, y: 1, z: 0, w: 0} - - {x: 0.02543959, y: 0.025448551, z: 0.5788644, w: 0.97387606} - - {x: 0.052194577, y: 0.052192856, z: 0.8994094, w: 0.37060547} - - {x: 0.020062044, y: 0.020058462, z: 0.9755385, w: 0.09293793} - - {x: 0.020062042, y: 0.02005846, z: 0.8071345, w: 0.44113553} - - {x: 0.020062042, y: 0.02005846, z: 0.76705015, w: 0.44113553} - - {x: 0.020062039, y: 0.020058457, z: 0.37963703, w: 0.9484681} - - {x: 1, y: 1, z: 0, w: 0} - - {x: 0.02543959, y: 0.025448551, z: 0.76616514, w: 0.8395735} - - {x: 0.028944563, y: 0.028957346, z: 0.550275, w: 0.9484578} - - {x: 1, y: 1, z: 0, w: 0} - - {x: 0.0010953962, y: 0.0010953972, z: 0.6957346, w: 0.23680617} - - {x: 0.06085292, y: 0.06084255, z: 0.82695085, w: 0.22004092} - - {x: 0.025439575, y: 0.025448538, z: 0.76616514, w: 0.9665621} - - {x: 0.0086271735, y: 0.0086005, z: 0.6779831, w: 0.3065835} - - {x: 0.020062037, y: 0.020058453, z: 0.49314693, w: 0.9772722} - - {x: 0.2247571, y: 0.22474566, z: 0.76841396, w: -0.0012230546} - - {x: 0.18739685, y: 0.1873968, z: 0.60522735, w: 0.6521592} - - {x: 0.020062042, y: 0.02005846, z: 0.34934574, w: 0.97892195} - - {x: 0.038820285, y: 0.0388238, z: 0.20158835, w: 0.9484996} - - {x: 0.02894457, y: 0.028957354, z: 0.5217061, w: 0.9484578} - - {x: 0.0045998143, y: 0.004599815, z: 0.6887391, w: 0.33582482} - - {x: 0.025439575, y: 0.025448538, z: 0.76616514, w: 0.9411644} - - {x: 0.025439624, y: 0.025448587, z: 0.4999725, w: 0.4381362} - - {x: 0.0045998152, y: 0.004599816, z: 0.6780203, w: 0.32510602} - - {x: 0.006764387, y: 0.0067599635, z: 0.68862194, w: 0.2861983} - - {x: 0.028944554, y: 0.028957335, z: 0.9690748, w: 0.94925797} - - {x: 0.0045998143, y: 0.004599815, z: 0.6887391, w: 0.33046544} - - {x: 0.06101925, y: 0.061032366, z: 0.7683037, w: 0.27915868} - - {x: 0.041759875, y: 0.04173455, z: 0.9559772, w: 0.31507498} - - {x: 0.020062042, y: 0.02005846, z: 0.8472189, w: 0.44113553} - - {x: 0.043846563, y: 0.043844014, z: 0.9548743, w: 0.16922604} - - {x: 0.0013466624, y: 0.0013466632, z: 0.6940107, w: 0.27437642} - - {x: 0.0045280647, y: 0.004587517, z: 0.67801577, w: 0.35725227} - - {x: 0.015930155, y: 0.015930155, z: 0.67843807, w: 0.23690565} - - {x: 0.0107313, y: 0.010684692, z: 0.677432, w: 0.2856422} - - {x: 0.020062042, y: 0.02005846, z: 0.86726105, w: 0.44113553} - - {x: 0.0045998143, y: 0.004599815, z: 0.6780203, w: 0.33582482} - - {x: 0.030483074, y: 0.030491354, z: 0.349343, w: 0.9484649} - - {x: 0.05679792, y: 0.05676915, z: 0.899324, w: 0.3149998} - - {x: 1, y: 1, z: 0, w: 0} - - {x: 0.052194573, y: 0.052192852, z: 0.9119578, w: 0.8395743} - - {x: 0.0027340353, y: 0.002677817, z: 0.6937912, w: 0.27059436} - - {x: 0.020062042, y: 0.02005846, z: 0.8271767, w: 0.44113553} - - {x: 0.18739687, y: 0.18739681, z: 0.7927031, w: 0.46469066} - - {x: 0.08278943, y: 0.082574464, z: 0.9003245, w: 0.24260066} - - {x: 1, y: 1, z: 0, w: 0} - - {x: 0.028944556, y: 0.028957339, z: 0.9690748, w: 0.92045385} - - {x: 0.028944563, y: 0.028957346, z: 0.9690748, w: 0.8916497} - - {x: 0.028944563, y: 0.028957346, z: 0.91193694, w: 0.8916497} - - {x: 0.025439622, y: 0.025448585, z: 0.5788644, w: 0.9484783} - - {x: 0.025439624, y: 0.025448587, z: 0.5252251, w: 0.4381362} - - {x: 0.18739688, y: 0.18739684, z: 0.60522735, w: 0.46469066} - - {x: 0.014313849, y: 0.014315716, z: 0.6784167, w: 0.27090755} - - {x: 0.049227666, y: 0.049211357, z: 0.100838795, w: 0.9484863} - - {x: 0.1633054, y: 0.16324005, z: 0.6051855, w: 0.83958626} - - {x: 0.09635275, y: 0.09632398, z: 0.8983936, w: -0.001054301} - - {x: 0.06101925, y: 0.061032366, z: 0.7683037, w: 0.22003442} - - {x: 0.008627173, y: 0.0086004995, z: 0.6779831, w: 0.31582686} - - {x: 0.0045998143, y: 0.004599815, z: 0.6887391, w: 0.32510602} - - {x: 0.038389403, y: 0.038404047, z: 0.24031854, w: 0.94847244} - - {x: 0.05688337, y: 0.05666275, z: 0.942401, w: 0.222084} - - {x: 0.0045998143, y: 0.004599815, z: 0.6780203, w: 0.33046544} - - {x: 0.038115468, y: 0.038113464, z: 0.27836093, w: 0.9484798} - - {x: 0.051978763, y: 0.05194999, z: -0.00023148941, w: 0.9484836} - - {x: 0.020062042, y: 0.02005846, z: 0.74700797, w: 0.44113553} - - {x: 0.2439894, y: 0.24428546, z: 0.6974251, w: -0.00022127977} - - {x: 0.030220361, y: 0.030226225, z: 0.40336534, w: 0.94847345} - - {x: 0.046493415, y: 0.046411037, z: 0.9515352, w: 0.41821933} - - {x: 0.004528062, y: 0.0045875143, z: 0.6832395, w: 0.35725227} - - {x: 0.025439622, y: 0.025448585, z: 0.6262355, w: 0.4381362} - - {x: 0.025439624, y: 0.025448587, z: 0.47471988, w: 0.4381362} - - {x: 0.7197327, y: 0.7146735, z: -0.007682119, w: 0.37718093} - - {x: 0.020062039, y: 0.020058457, z: 0.40335968, w: 0.97860926} - - {x: 0.0045998143, y: 0.004599815, z: 0.6833797, w: 0.34654358} - - {x: 0.00857845, y: 0.00857845, z: 0.67843807, w: 0.29699266} - - {x: 0.38617244, y: 0.38617238, z: -0.0011333586, w: -0.0011333583} - - {x: 0.028944563, y: 0.028957346, z: 0.9640931, w: 0.8395529} - - {x: 0.0045998143, y: 0.004599815, z: 0.6780203, w: 0.3411842} - - {x: 1, y: 1, z: 0, w: 0} - - {x: 0.05715396, y: 0.057194512, z: 0.8992325, w: 0.1692613} - - {x: 0.18739681, y: 0.18739675, z: 0.7927031, w: 0.6521592} - - {x: 0.028944595, y: 0.028957378, z: 0.9548698, w: 0.21253294} - - {x: 0.028944563, y: 0.028957346, z: 0.94050586, w: 0.8916497} - - {x: 0.0038373927, y: 0.0038373927, z: 0.6837975, w: 0.35232073} - - {x: 0.14128216, y: 0.14152555, z: 0.7925143, w: 0.839437} - - {x: 0.028944572, y: 0.028957356, z: 0.49313718, w: 0.9484578} - - {x: 1, y: 1, z: 0, w: 0} - - {x: 0.020062046, y: 0.020058464, z: 0.67673, w: 0.438126} - - {x: 0.0045998143, y: 0.004599815, z: 0.6780203, w: 0.35190296} - - {x: 0.025439622, y: 0.025448585, z: 0.6514881, w: 0.4381362} - - {x: 0.025439622, y: 0.025448585, z: 0.5757303, w: 0.4381362} - - {x: 0.0045998143, y: 0.004599815, z: 0.6833797, w: 0.33582482} - - {x: 0.020062044, y: 0.020058462, z: 0.9755385, w: 0.13293183} - - {x: 0.2439894, y: 0.24428546, z: 0.40338615, w: 0.46465147} - - {x: 0.020062039, y: 0.020058457, z: 0.43338692, w: 0.97860926} - - {x: 0.07632527, y: 0.076324426, z: 0.89921236, w: 0.09294839} - - {x: 0.0045998143, y: 0.004599815, z: 0.6780203, w: 0.34654358} - - {x: 0.7197327, y: 0.7146735, z: -0.007682119, w: 0.5416238} - - {x: 0.04175986, y: 0.041734528, z: 0.8993991, w: 0.42269257} - - {x: 0.031924754, y: 0.031924862, z: 0.3174051, w: 0.9494475} - - {x: 1, y: 1, z: 0, w: 0} - - {x: 0.008627174, y: 0.0086005, z: 0.6880275, w: 0.29653913} - - {x: 0.032467805, y: 0.03259056, z: 0.4633474, w: 0.9483972} - - {x: 0.025439583, y: 0.025448548, z: 0.76616514, w: 0.8649712} - - {x: 0.0045998143, y: 0.004599815, z: 0.6887391, w: 0.34654358} - - {x: 0.0464934, y: 0.04641102, z: 0.14996669, w: 0.94845045} - - {x: 0.0045998143, y: 0.004599815, z: 0.6887391, w: 0.3411842} - - {x: 0.028944563, y: 0.028957346, z: 0.91193694, w: 0.92045385} - - {x: 0.0188792, y: 0.018707968, z: 0.67733186, w: 0.25320557} - - {x: 0.028944554, y: 0.028957335, z: 0.94050586, w: 0.94925797} - - {x: 0.028944556, y: 0.028957339, z: 0.94050586, w: 0.92045385} - - {x: 0.020062042, y: 0.02005846, z: 0.7870923, w: 0.44113553} - - {x: 0.020062039, y: 0.020058457, z: 0.37963703, w: 0.968465} - - {x: 0.020062042, y: 0.02005846, z: 0.7269658, w: 0.44113553} - - {x: 0.05775376, y: 0.05776087, z: 0.826944, w: 0.27794513} - - {x: 0.025439622, y: 0.025448585, z: 0.6009829, w: 0.4381362} - - {x: 0.025439583, y: 0.025448548, z: 0.76616514, w: 0.89036894} - - {x: 0.03022248, y: 0.029768664, z: 0.6971091, w: 0.4408649} - - {x: 0.24111411, y: 0.24120533, z: 0.4747469, w: -0.00020924806} - - {x: 0.2439894, y: 0.24428546, z: -0.0002201232, w: 0.46465147} - - {x: 0.38617238, y: 0.38617232, z: 0.38368523, w: -0.001133358} - - {x: 0.20465058, y: 0.20463155, z: 0.6973789, w: 0.24165471} - - {x: 0.05775374, y: 0.057760853, z: 0.885228, w: 0.22003344} - - {x: 0.2439894, y: 0.24428546, z: 0.20158303, w: 0.7065723} - - {x: 0.020062044, y: 0.020058462, z: 0.9755385, w: 0.11293487} - - {x: 0.028944556, y: 0.028957339, z: 0.91193694, w: 0.94925797} - - {x: 0.0045998143, y: 0.004599815, z: 0.6833797, w: 0.32510602} - - {x: 0.2439894, y: 0.24428546, z: -0.0002201232, w: 0.7065723} - - {x: 0.048376806, y: 0.048359077, z: 0.951542, w: 0.37058216} - - {x: 0.0045998143, y: 0.004599815, z: 0.6833797, w: 0.3411842} - - {x: 0.0010531794, y: 0.0010531804, z: 0.69573843, w: 0.23920313} - - {x: 1, y: 1, z: 0, w: 0} - - {x: 0.2025129, y: 0.20250891, z: 0.4748977, w: 0.2361146} - - {x: 0.48151132, y: 0.48147902, z: -0.00020749152, w: -0.00020742841} - - {x: 0.025439583, y: 0.025448548, z: 0.76616514, w: 0.91576666} - - {x: 0.025439622, y: 0.025448585, z: 0.55047774, w: 0.4381362} - - {x: 0.005665356, y: 0.005665356, z: 0.68783605, w: 0.3162804} - - {x: 0.0007427804, y: 0.00074278127, z: 0.6957666, w: 0.24158868} - - {x: 0.004528061, y: 0.004587514, z: 0.6884633, w: 0.35725227} - - {x: 0.04922767, y: 0.04921136, z: 0.05167349, w: 0.9484863} - bakedVertexOffset: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + - {x: 0.9763147, y: 0.97625685, z: -0.00041782347, w: -0.0004177105} + - {x: 0.01752652, y: 0.017472332, z: 0.96237993, w: 0.00056764873} + - {x: 0.07570291, y: 0.075702794, z: 0.24777927, w: 0.68150604} + - {x: 1.0012718, y: 1.0013535, z: -0.0004162471, w: -0.00041648623} + - {x: 0.24445435, y: 0.24413465, z: 0.0009855471, w: 0.6027217} + - {x: 0.01752649, y: 0.017472303, z: 0.9814724, w: 0.0005676503} + - {x: 0.07570294, y: 0.07570282, z: 0.4046089, w: 0.60309446} + - {x: 0.17672753, y: 0.17673127, z: -0.00079548685, w: 0.8232806} + - {x: 1.0196207, y: 1.0034717, z: -0.0015223261, w: -0.0014750147} + - {x: 0.075702935, y: 0.075702816, z: 0.4830237, w: 0.60309446} + - {x: 0.07570295, y: 0.07570283, z: 0.32619408, w: 0.60309446} + - {x: 0.6093728, y: 0.6093729, z: -0.00031559673, w: -0.000315597} + - {x: 0.07570296, y: 0.07570284, z: 0.24777927, w: 0.60309446} + - {x: 0.075702906, y: 0.07570279, z: 0.24777927, w: 0.75991756} + - {x: 0.2702117, y: 0.2701885, z: -0.008445248, w: 0.7324447} + - {x: 0.12100871, y: 0.12103219, z: 0.119270645, w: 0.8086851} + - {x: 0.080332674, y: 0.08031833, z: 0.23948325, w: 0.8887358} + - {x: 0.08033267, y: 0.080318324, z: 0.56049633, w: 0.8086638} + - {x: 0.08033267, y: 0.080318324, z: 0.48024306, w: 0.8086638} + - {x: 0.08033265, y: 0.08031831, z: 0.7210028, w: 0.8887358} + - {x: 0.080332644, y: 0.080318294, z: 0.8815093, w: 0.8887358} + - {x: 0.08033267, y: 0.080318324, z: 0.7210028, w: 0.8086638} + - {x: 0.15544464, y: 0.1554587, z: 0.81099105, w: 0.17256947} + - {x: 0.027086038, y: 0.027068326, z: 0.96819246, w: 0.17458056} + - {x: 0.08033267, y: 0.080318324, z: 0.6407496, w: 0.8086638} + - {x: 0.17557092, y: 0.17556071, z: 0.8108426, w: -0.0010083298} + - {x: 0.06378771, y: 0.06378771, z: 0.0029349283, w: 0.93327737} + - {x: 0.042970397, y: 0.04278377, z: 0.8107576, w: 0.76576364} + - {x: 0.08033267, y: 0.080318324, z: 0.6407496, w: 0.8887358} + - {x: 0.08033267, y: 0.080318324, z: 0.56049633, w: 0.8887358} + - {x: 0.1537193, y: 0.15377794, z: 0.81088305, w: 0.32801017} + - {x: 0.1526224, y: 0.15261437, z: 0.8109109, w: 0.48180455} + - {x: 0.08033267, y: 0.080318324, z: 0.39998978, w: 0.8887358} + - {x: 0.121008724, y: 0.1210322, z: -0.0009647669, w: 0.8086851} + - {x: 0.08033265, y: 0.08031831, z: 0.80125606, w: 0.8887358} + - {x: 0.03434993, y: 0.03434993, z: 0.8573498, w: 0.7697746} + - {x: 0.7505877, y: 0.75085044, z: -0.007712246, w: -0.0077166073} + - {x: 0.015365732, y: 0.015365732, z: 0.9699779, w: 0.2344883} + - {x: 0.08033268, y: 0.08031834, z: 0.23948325, w: 0.8086638} + - {x: 0.080332674, y: 0.08031833, z: 0.31973654, w: 0.8887358} + - {x: 0.08033265, y: 0.08031831, z: 0.8815093, w: 0.8086638} + - {x: 0.12783347, y: 0.1278339, z: 0.8147861, w: 0.6379454} + - {x: 0.08033267, y: 0.080318324, z: 0.48024306, w: 0.8887358} + - {x: 0.08033265, y: 0.08031831, z: 0.80125606, w: 0.8086638} + - {x: 0.08033267, y: 0.080318324, z: 0.39998978, w: 0.8086638} + - {x: 0.080332674, y: 0.08031833, z: 0.31973654, w: 0.8086638} + - {x: 0.8109045, y: 0.8108885, z: -0.00023266759, w: -0.00023260494} + - {x: 0.022685284, y: 0.022685284, z: 0.9699779, w: 0.20593315} + - {x: 0.03244883, y: 0.032571513, z: 0.122880764, w: 0.9660029} + - {x: 0.014305484, y: 0.01430735, z: 0.2796342, w: 0.9180352} + - {x: 0.004525415, y: 0.004584833, z: 0.2949192, w: 0.9284343} + - {x: 0.025529254, y: 0.025538247, z: 0.68352854, w: 0.18789218} + - {x: 0.025529254, y: 0.025538247, z: 0.68352854, w: 0.21337941} + - {x: 0.0010947561, y: 0.001094757, z: 0.997992, w: 0.10737011} + - {x: 0.02552924, y: 0.025538234, z: 0.7595532, w: 0.18789218} + - {x: 0.10913667, y: 0.10912547, z: 0.7829909, w: 0.24255002} + - {x: 0.18805735, y: 0.18805729, z: 0.2023317, w: 0.24259087} + - {x: 0.004597126, y: 0.0045971265, z: 0.9948133, w: 0.3374936} + - {x: 0.02892764, y: 0.028940415, z: 0.92902434, w: 0.9476159} + - {x: 0.004597126, y: 0.0045971265, z: 0.9948133, w: 0.34284985} + - {x: 0.02904657, y: 0.029059397, z: -0.00025725897, w: 0.97083664} + - {x: 0.2438468, y: 0.24414271, z: 0.7862994, w: 0.7058718} + - {x: 0.02552924, y: 0.025538234, z: 0.7342117, w: 0.21337941} + - {x: 0.025529288, y: 0.025538282, z: 0.45869082, w: 0.19992697} + - {x: 0.0045971014, y: 0.004597102, z: 0.99278957, w: 0.42888954} + - {x: 0.02904657, y: 0.029059397, z: 0.14309077, w: 0.97083664} + - {x: 0.025529273, y: 0.025538266, z: 0.6581869, w: 0.18789218} + - {x: 0.004597126, y: 0.0045971265, z: 0.99278957, w: 0.40746453} + - {x: 0.028927648, y: 0.028940424, z: 0.6580924, w: 0.9476159} + - {x: 0.025529277, y: 0.025538273, z: 0.63284534, w: 0.21337944} + - {x: 0.24484934, y: 0.24514647, z: 0.20229352, w: -0.00022205968} + - {x: 0.008622131, y: 0.008595473, z: 0.24047874, w: 0.99104124} + - {x: 0.55827975, y: 0.56625754, z: 0.3577508, w: 0.38386807} + - {x: 0.004597126, y: 0.0045971265, z: 0.9927896, w: 0.3728341} + - {x: 0.028927656, y: 0.028940432, z: 0.52222776, w: 0.9703635} + - {x: 0.004597126, y: 0.0045971265, z: 0.99278957, w: 0.4128208} + - {x: 0.02892764, y: 0.028940415, z: 0.9575766, w: 0.9476159} + - {x: 0.004597126, y: 0.0045971265, z: 0.99278957, w: 0.41817704} + - {x: 0.028927647, y: 0.028940422, z: 0.84336764, w: 0.9476159} + - {x: 0.2438468, y: 0.24414271, z: 0.58461416, w: 0.7058718} + - {x: 0.0013458754, y: 0.0013458763, z: 0.99796915, w: 0.10474303} + - {x: 0.5582799, y: 0.56625766, z: 0.11656421, w: 0.38386807} + - {x: 0.05676473, y: 0.056735974, z: 0.5221633, w: 0.75348777} + - {x: 0.18805736, y: 0.1880573, z: 0.7956943, w: -0.00018270484} + - {x: 0.08308122, y: 0.0828655, z: 0.89293456, w: 0.24345574} + - {x: 0.025529286, y: 0.02553828, z: 0.63284534, w: 0.18789218} + - {x: 0.025529288, y: 0.025538282, z: 0.48403242, w: 0.19992697} + - {x: 0.18805738, y: 0.18805733, z: 0.6075578, w: -0.00018270499} + - {x: 0.096296445, y: 0.09626769, z: 0.20157659, w: 0.7631847} + - {x: 0.027073583, y: 0.026857862, z: 0.7965951, w: 0.1888475} + - {x: 0.008622132, y: 0.008595474, z: 0.22169371, w: 0.99104124} + - {x: 0.0045971014, y: 0.004597102, z: 0.99278957, w: 0.4235333} + - {x: 0.02904657, y: 0.029059397, z: 0.11442116, w: 0.97083664} + - {x: 0.025529273, y: 0.025538266, z: 0.6581869, w: 0.21337943} + - {x: 0.004597126, y: 0.0045971265, z: 0.9927896, w: 0.38890284} + - {x: 0.028927641, y: 0.028940419, z: 0.8719199, w: 0.9476159} + - {x: 0.025529232, y: 0.025538225, z: 0.7595532, w: 0.2133794} + - {x: 0.24484934, y: 0.24514647, z: -0.00022089905, w: -0.00022205968} + - {x: 0.051948387, y: 0.05191963, z: 0.9460961, w: 0.15668273} + - {x: 0.027443325, y: 0.027450273, z: 0.43172213, w: 0.19990776} + - {x: 0.041735455, y: 0.04171014, z: 0.5222383, w: 0.8523378} + - {x: 0.04173547, y: 0.04171016, z: 0.25803044, w: 0.9333722} + - {x: 0.046466216, y: 0.046383888, z: 0.94606173, w: 0.396173} + - {x: 0.004525416, y: 0.0045848335, z: 0.2949192, w: 0.92303175} + - {x: 0.004597126, y: 0.0045971265, z: 0.9948133, w: 0.3267811} + - {x: 0.02892764, y: 0.028940415, z: 0.9004721, w: 0.9476159} + - {x: 0.004597126, y: 0.0045971265, z: 0.9948133, w: 0.33213735} + - {x: 0.028927647, y: 0.028940422, z: 0.7437491, w: 0.9476159} + - {x: 0.2438468, y: 0.24414271, z: 0.7862994, w: 0.4640923} + - {x: 0.025529286, y: 0.02553828, z: 0.6075037, w: 0.18789218} + - {x: 0.025424758, y: 0.025433714, z: 0.25804028, w: 0.97429806} + - {x: 0.1880573, y: 0.18805724, z: 0.2023317, w: 0.6188493} + - {x: 0.1880573, y: 0.18805724, z: 0.2023317, w: 0.4307201} + - {x: 0.55827975, y: 0.5662576, z: 0.27735528, w: 0.38386807} + - {x: 0.14178012, y: 0.14202437, z: 0.5518378, w: 0.24239956} + - {x: 0.004597126, y: 0.0045971265, z: 0.99278957, w: 0.39675203} + - {x: 0.02904657, y: 0.029059397, z: 0.085751556, w: 0.97083664} + - {x: 0.004597126, y: 0.0045971265, z: 0.99278957, w: 0.40210828} + - {x: 0.028927647, y: 0.028940422, z: 0.8148154, w: 0.9476159} + - {x: 0.24484934, y: 0.24514647, z: -0.00022089905, w: 0.24255152} + - {x: 0.018868167, y: 0.018697036, z: 0.56546956, w: 0.8263192} + - {x: 0.027443333, y: 0.02745028, z: 0.40477276, w: 0.19990776} + - {x: 0.025529286, y: 0.02553828, z: 0.6075037, w: 0.21337944} + - {x: 0.025529286, y: 0.02553828, z: 0.53471565, w: 0.19992697} + - {x: 0.05216407, y: 0.052162353, z: 0.9460921, w: 0.051831044} + - {x: 0.07628066, y: 0.07627982, z: 0.20239493, w: 0.85713243} + - {x: 0.16805795, y: 0.16822259, z: 0.92678535, w: 0.09029153} + - {x: 0.049198896, y: 0.049182598, z: 0.9460991, w: 0.25620037} + - {x: 0.030204816, y: 0.029751267, z: 0.94579166, w: 0.4397015} + - {x: 0.035516005, y: 0.0355163, z: 0.62264967, w: 0.9476339} + - {x: 0.008622126, y: 0.0085954685, z: 0.28379178, w: 0.98405135} + - {x: 0.16388099, y: 0.1638154, z: 0.3904262, w: 0.24254927} + - {x: 0.025529247, y: 0.025538243, z: 0.7088701, w: 0.18789218} + - {x: 0.0027324376, y: 0.002676252, z: 0.99585503, w: 0.20821382} + - {x: 0.046466228, y: 0.04638389, z: 0.94606173, w: 0.35239172} + - {x: 0.03046526, y: 0.030473534, z: 0.032651756, w: 0.9660705} + - {x: 0.20537189, y: 0.2053528, z: 0.40476158, w: -0.00026715547} + - {x: 0.004525419, y: 0.0045848363, z: 0.2949192, w: 0.9176291} + - {x: 0.004597126, y: 0.0045971265, z: 0.9948133, w: 0.3160686} + - {x: 0.028927678, y: 0.028940454, z: 0.15265311, w: 0.9660634} + - {x: 0.004597126, y: 0.0045971265, z: 0.9948133, w: 0.32142484} + - {x: 0.028927647, y: 0.028940422, z: 0.71519685, w: 0.9476159} + - {x: 0.2438468, y: 0.24414271, z: 0.58461416, w: 0.4640923} + - {x: 0.025529286, y: 0.02553828, z: 0.5600573, w: 0.19992697} + - {x: 0.025529247, y: 0.025538243, z: 0.7088701, w: 0.21337941} + - {x: 0.018152576, y: 0.019545564, z: 0.71296847, w: 0.39832696} + - {x: 0.004597126, y: 0.0045971265, z: 0.9948133, w: 0.31071234} + - {x: 0.028927654, y: 0.02894043, z: 0.55078, w: 0.9703635} + - {x: 0.028962461, y: 0.028952325, z: 0.17176326, w: 0.9708403} + - {x: 0.0491989, y: 0.0491826, z: 0.9460991, w: 0.20758776} + - {x: 0.008622131, y: 0.008595474, z: 0.23108622, w: 0.99104124} + - {x: 0.2409732, y: 0.24106437, z: 0.299716, w: 0.7535988} + - {x: 0.18805727, y: 0.18805721, z: 0.2023317, w: 0.80697846} + - {x: 0.019876927, y: 0.01987699, z: 0.1821941, w: 0.9670526} + - {x: 0.052164074, y: 0.052162357, z: 0.9460921, w: -0.0002353242} + - {x: 0.55827975, y: 0.5662576, z: 0.1969598, w: 0.38386807} + - {x: 0.048348546, y: 0.048330832, z: 0.9460685, w: 0.3047824} + - {x: 0.01987693, y: 0.019876994, z: 0.97660995, w: 0.4409508} + - {x: 0.0010525639, y: 0.0010525649, z: 0.9979958, w: 0.10976565} + - {x: 0.4802968, y: 0.48026833, z: 0.47295818, w: -0.00020549214} + - {x: 0.00862213, y: 0.008595473, z: 0.28379178, w: 0.9748134} + - {x: 0.004597126, y: 0.0045971265, z: 0.9927896, w: 0.36747783} + - {x: 0.02904657, y: 0.029059397, z: 0.028412346, w: 0.97083664} + - {x: 0.004597127, y: 0.004597128, z: 0.9948133, w: 0.30535606} + - {x: 0.028927647, y: 0.028940422, z: 0.78626317, w: 0.9476159} + - {x: 0.24484934, y: 0.24514647, z: -0.00022089905, w: 0.48532513} + - {x: 0.025529247, y: 0.025538243, z: 0.7342117, w: 0.18789218} + - {x: 0.025529286, y: 0.02553828, z: 0.5093741, w: 0.19992697} + - {x: 0.00074234634, y: 0.0007423472, z: 0.998024, w: 0.11214982} + - {x: 0.004597126, y: 0.0045971265, z: 0.9927896, w: 0.37819034} + - {x: 0.028927647, y: 0.028940422, z: 0.6866446, w: 0.9476159} + - {x: 0.004597126, y: 0.0045971265, z: 0.9927896, w: 0.3835466} + - {x: 0.02904657, y: 0.029059397, z: 0.057081953, w: 0.97083664} + - {x: 0.24484934, y: 0.24514647, z: -0.00022089905, w: 0.72809863} + bakedVertexOffset: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff bakedVertexColorMesh: - {fileID: 0} - {fileID: 0} @@ -15885,6 +19727,33 @@ MonoBehaviour: - {fileID: 0} - {fileID: 0} - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} nonBakedRenderers: [] bakedLights: [] bakedLightChannels: @@ -15893,17 +19762,23 @@ MonoBehaviour: bakedScaleOffsetTerrain: [] assetList: [] uvOverlapAssetList: - idremap: 0000000001000000 + idremap: 000000000100000002000000030000000400000005000000060000000600000007000000 usesRealtimeGI: 0 emptyDirectionTex: {fileID: 2800000, guid: 04afea73344b7d049b5b7ac5ae315dd5, type: 3} - anyVolumes: 1 + anyVolumes: 0 compressedVolumes: 0 sectors: - name: $G maps: + - {fileID: 2800000, guid: a171eca5a41371b49af1a8486f069191, type: 3} + - {fileID: 2800000, guid: 3bb4b8df33acc844d86b745ad5142f4d, type: 3} + - {fileID: 2800000, guid: 2c4a25ba39330d04bb43765156c38b60, type: 3} + - {fileID: 2800000, guid: 5c4db802caf40924d9e1219ab9502d53, type: 3} + - {fileID: 2800000, guid: fc08048a164c31e468f4a469ef35e727, type: 3} + - {fileID: 2800000, guid: 84471ec69056d9e468388f1ded2b85d9, type: 3} + - {fileID: 0} - {fileID: 2800000, guid: 874308a4b83c69048b7ac52347edd255, type: 3} - {fileID: 2800000, guid: b9b4faf4a4bf2a442bae5fb7a10d9cff, type: 3} - - {fileID: 2800000, guid: 9feffb1c841c33840ad754d789595753, type: 3} masks: [] dirMaps: [] rnmMaps0: [] @@ -15911,42 +19786,356 @@ MonoBehaviour: rnmMaps2: [] mapsMode: bakedRenderers: + - {fileID: 2055335471} + - {fileID: 882053296} + - {fileID: 302151439} + - {fileID: 1625315258} + - {fileID: 2067418218} + - {fileID: 1307231589} + - {fileID: 88149417} + - {fileID: 139112635} + - {fileID: 448309812} + - {fileID: 593901293} + - {fileID: 599447124} + - {fileID: 910520425} + - {fileID: 1378939248} + - {fileID: 1851354689} + - {fileID: 267155293} + - {fileID: 85469504} + - {fileID: 1641041690} + - {fileID: 295151168} + - {fileID: 400902256} + - {fileID: 1362277938} + - {fileID: 905496711} + - {fileID: 444596393} + - {fileID: 421169978} + - {fileID: 2129333577} + - {fileID: 512815370} + - {fileID: 1230064630} + - {fileID: 619504804} + - {fileID: 1272306634} + - {fileID: 652178689} + - {fileID: 705607186} + - {fileID: 925244479} + - {fileID: 998344275} + - {fileID: 1010830669} + - {fileID: 1037297641} + - {fileID: 1158088447} + - {fileID: 1165789008} + - {fileID: 1180520677} + - {fileID: 1206777345} + - {fileID: 2143233305} + - {fileID: 1284703411} + - {fileID: 1487057095} + - {fileID: 1419986018} + - {fileID: 1691059348} + - {fileID: 1691725977} + - {fileID: 1696707626} + - {fileID: 1889234631} + - {fileID: 2016568206} + - {fileID: 2091574342} + - {fileID: 1467392867} + - {fileID: 1859244109} + - {fileID: 2108197828} + - {fileID: 148729736} + - {fileID: 497102810} + - {fileID: 273509088} + - {fileID: 277019535} - {fileID: 285759825} - {fileID: 382860430} + - {fileID: 656351596} + - {fileID: 1656331692} + - {fileID: 1283295611} + - {fileID: 1653014925} + - {fileID: 445112383} + - {fileID: 470987956} + - {fileID: 445112402} + - {fileID: 446262687} + - {fileID: 446262689} + - {fileID: 446262691} + - {fileID: 446262693} + - {fileID: 446262695} + - {fileID: 446262697} + - {fileID: 446262700} + - {fileID: 473457880} + - {fileID: 2123724544} + - {fileID: 1175818456} + - {fileID: 1215367029} + - {fileID: 1513055747} + - {fileID: 756087333} + - {fileID: 1249782218} + - {fileID: 1611991890} + - {fileID: 1941564313} + - {fileID: 590607348} + - {fileID: 599148971} - {fileID: 660518652} - {fileID: 706963245} - {fileID: 1247771532} + - {fileID: 772063725} + - {fileID: 783662507} - {fileID: 837570461} - {fileID: 874610119} + - {fileID: 929868517} + - {fileID: 1454042551} + - {fileID: 992013942} + - {fileID: 992013944} + - {fileID: 992013946} + - {fileID: 992013948} + - {fileID: 992013950} + - {fileID: 992013952} + - {fileID: 992013955} - {fileID: 998546395} + - {fileID: 1848060572} + - {fileID: 1419124789} + - {fileID: 1038648720} - {fileID: 1084975127} + - {fileID: 1110630397} + - {fileID: 32070981} + - {fileID: 1900556506} + - {fileID: 495994989} + - {fileID: 762187145} + - {fileID: 1830291156} + - {fileID: 2029171463} + - {fileID: 1121960442} - {fileID: 1167160677} - {fileID: 1196589736} + - {fileID: 1208938234} - {fileID: 1211523185} + - {fileID: 1380217928} + - {fileID: 1291532161} + - {fileID: 1161580041} + - {fileID: 758170914} + - {fileID: 1882895675} + - {fileID: 1635795634} + - {fileID: 1699025119} + - {fileID: 1132664197} + - {fileID: 1282017671} + - {fileID: 1299859836} + - {fileID: 1715216235} + - {fileID: 1375130218} + - {fileID: 1381876080} + - {fileID: 1807744146} + - {fileID: 1410118924} + - {fileID: 1426648475} + - {fileID: 1476782023} + - {fileID: 1786457064} + - {fileID: 1516427555} - {fileID: 1534685193} + - {fileID: 1564889617} + - {fileID: 1841159997} + - {fileID: 1688320102} + - {fileID: 924447930} + - {fileID: 1200045625} + - {fileID: 995669713} + - {fileID: 1171278111} + - {fileID: 1725237040} + - {fileID: 1367084273} + - {fileID: 1725237059} + - {fileID: 1754882564} + - {fileID: 1922623933} + - {fileID: 428010774} + - {fileID: 1790682407} + - {fileID: 2122982387} + - {fileID: 1813498671} - {fileID: 1824004554} - {fileID: 1834286059} + - {fileID: 1935895835} + - {fileID: 1939462325} + - {fileID: 1951785636} - {fileID: 1959297857} + - {fileID: 1965163774} + - {fileID: 1977449748} - {fileID: 2034465666} - bakedIDs: 0100000001000000010000000100000001000000010000000100000001000000010000000200000002000000020000000100000001000000020000000100000000000000 + - {fileID: 2067310249} + - {fileID: 429145266} + - {fileID: 486021627} + - {fileID: 458921922} + - {fileID: 1202813581} + - {fileID: 2086896414} + - {fileID: 531545497} + - {fileID: 2086896433} + - {fileID: 2102041130} + - {fileID: 1967346540} + - {fileID: 242024053} + - {fileID: 1559809794} + - {fileID: 898508166} + - {fileID: 1636968102} + bakedIDs: 010000000100000001000000010000000100000001000000000000000000000002000000010000000000000001000000030000000100000005000000040000000400000004000000040000000400000004000000040000000400000004000000040000000400000004000000040000000400000004000000040000000400000004000000040000000400000004000000050000000400000004000000040000000400000004000000040000000400000004000000040000000400000004000000070000000700000007000000080000000800000007000000080000000800000008000000070000000700000007000000080000000700000008000000080000000700000008000000080000000700000007000000080000000800000007000000080000000700000007000000070000000700000007000000070000000700000007000000080000000700000008000000080000000800000008000000080000000700000008000000070000000700000008000000080000000700000007000000080000000800000007000000080000000700000007000000070000000700000007000000070000000700000007000000070000000800000007000000080000000800000008000000080000000700000008000000070000000700000008000000070000000800000008000000080000000700000007000000070000000700000007000000070000000700000008000000080000000700000007000000070000000800000007000000070000000700000007000000070000000700000008000000080000000800000007000000070000000800000007000000070000000700000008000000070000000700000008000000070000000700000007000000070000000700000007000000080000000700000007000000080000000800000008000000070000000700000007000000070000000800000008000000 bakedScaleOffset: - - {x: 0.21880183, y: 0.21877937, z: 0.44758224, w: 0.75389075} - - {x: 0.37702534, y: 0.37702522, z: 0.44766435, w: 0.3768032} - - {x: 0.11427223, y: 0.114214346, z: 0.16865377, w: 0.85168284} - - {x: 0.37702537, y: 0.37702525, z: 0.44766435, w: -0.0003662944} - - {x: 0.16656476, y: 0.16613227, z: 0.0013673218, w: 0.85369503} - - {x: 0.3770254, y: 0.3770253, z: -0.00036629513, w: 0.4747916} - - {x: 0.19385293, y: 0.19379506, z: 0.66451234, w: 0.7522178} - - {x: 0.10457652, y: 0.10451863, z: 0.2826637, w: 0.8518627} - - {x: 0.093540505, y: 0.09337477, z: 0.8246797, w: 0.095320985} - - {x: 0.3791466, y: 0.3791465, z: 0.37893778, w: -0.00036835478} - - {x: 0.3791466, y: 0.3791465, z: -0.0003683554, w: -0.00036835478} - - {x: 0.2858461, y: 0.28633857, z: 0.75786203, w: -0.00075407367} - - {x: 0.093540475, y: 0.09337473, z: 0.8246797, w: 0.18345645} - - {x: 0.48509955, y: 0.4852831, z: -0.00042027092, w: -0.00042098798} - - {x: 0.37914655, y: 0.37914643, z: -0.00036835507, w: 0.37892318} - - {x: 0.09732971, y: 0.09729405, z: 0.8246933, w: -0.00052063883} - - {x: 1.0138023, y: 1.0137343, z: -0.00043686488, w: -0.000436732} + - {x: 0.07570296, y: 0.07570284, z: 0.24777927, w: 0.60309446} + - {x: 0.07570294, y: 0.07570282, z: 0.4046089, w: 0.60309446} + - {x: 0.07570291, y: 0.075702794, z: 0.24777927, w: 0.68150604} + - {x: 0.07570295, y: 0.07570283, z: 0.32619408, w: 0.60309446} + - {x: 0.075702906, y: 0.07570279, z: 0.24777927, w: 0.75991756} + - {x: 0.075702935, y: 0.075702816, z: 0.4830237, w: 0.60309446} + - {x: 0.9763147, y: 0.97625685, z: -0.00041782347, w: -0.0004177105} + - {x: 0.01752652, y: 0.017472332, z: 0.96237993, w: 0.00056764873} + - {x: 1.0012718, y: 1.0013535, z: -0.0004162471, w: -0.00041648623} + - {x: 0.24445435, y: 0.24413465, z: 0.0009855471, w: 0.6027217} + - {x: 0.01752649, y: 0.017472303, z: 0.9814724, w: 0.0005676503} + - {x: 0.17672753, y: 0.17673127, z: -0.00079548685, w: 0.8232806} + - {x: 1.0196207, y: 1.0034717, z: -0.0015223261, w: -0.0014750147} + - {x: 0.6093728, y: 0.6093729, z: -0.00031559673, w: -0.000315597} + - {x: 0.2702117, y: 0.2701885, z: -0.008445248, w: 0.7324447} + - {x: 0.12100871, y: 0.12103219, z: 0.119270645, w: 0.8086851} + - {x: 0.080332674, y: 0.08031833, z: 0.23948325, w: 0.8887358} + - {x: 0.08033267, y: 0.080318324, z: 0.56049633, w: 0.8086638} + - {x: 0.08033267, y: 0.080318324, z: 0.48024306, w: 0.8086638} + - {x: 0.08033265, y: 0.08031831, z: 0.7210028, w: 0.8887358} + - {x: 0.080332644, y: 0.080318294, z: 0.8815093, w: 0.8887358} + - {x: 0.08033267, y: 0.080318324, z: 0.7210028, w: 0.8086638} + - {x: 0.15544464, y: 0.1554587, z: 0.81099105, w: 0.17256947} + - {x: 0.027086038, y: 0.027068326, z: 0.96819246, w: 0.17458056} + - {x: 0.08033267, y: 0.080318324, z: 0.6407496, w: 0.8086638} + - {x: 0.17557092, y: 0.17556071, z: 0.8108426, w: -0.0010083298} + - {x: 0.06378771, y: 0.06378771, z: 0.0029349283, w: 0.93327737} + - {x: 0.042970397, y: 0.04278377, z: 0.8107576, w: 0.76576364} + - {x: 0.08033267, y: 0.080318324, z: 0.6407496, w: 0.8887358} + - {x: 0.08033267, y: 0.080318324, z: 0.56049633, w: 0.8887358} + - {x: 0.1537193, y: 0.15377794, z: 0.81088305, w: 0.32801017} + - {x: 0.1526224, y: 0.15261437, z: 0.8109109, w: 0.48180455} + - {x: 0.08033267, y: 0.080318324, z: 0.39998978, w: 0.8887358} + - {x: 0.121008724, y: 0.1210322, z: -0.0009647669, w: 0.8086851} + - {x: 0.08033265, y: 0.08031831, z: 0.80125606, w: 0.8887358} + - {x: 0.03434993, y: 0.03434993, z: 0.8573498, w: 0.7697746} + - {x: 0.7505877, y: 0.75085044, z: -0.007712246, w: -0.0077166073} + - {x: 0.015365732, y: 0.015365732, z: 0.9699779, w: 0.2344883} + - {x: 0.08033268, y: 0.08031834, z: 0.23948325, w: 0.8086638} + - {x: 0.080332674, y: 0.08031833, z: 0.31973654, w: 0.8887358} + - {x: 0.08033265, y: 0.08031831, z: 0.8815093, w: 0.8086638} + - {x: 0.12783347, y: 0.1278339, z: 0.8147861, w: 0.6379454} + - {x: 0.08033267, y: 0.080318324, z: 0.48024306, w: 0.8887358} + - {x: 0.08033265, y: 0.08031831, z: 0.80125606, w: 0.8086638} + - {x: 0.08033267, y: 0.080318324, z: 0.39998978, w: 0.8086638} + - {x: 0.080332674, y: 0.08031833, z: 0.31973654, w: 0.8086638} + - {x: 0.8109045, y: 0.8108885, z: -0.00023266759, w: -0.00023260494} + - {x: 0.022685284, y: 0.022685284, z: 0.9699779, w: 0.20593315} + - {x: 0.03244883, y: 0.032571513, z: 0.122880764, w: 0.9660029} + - {x: 0.014305484, y: 0.01430735, z: 0.2796342, w: 0.9180352} + - {x: 0.004525415, y: 0.004584833, z: 0.2949192, w: 0.9284343} + - {x: 0.025529254, y: 0.025538247, z: 0.68352854, w: 0.18789218} + - {x: 0.025529254, y: 0.025538247, z: 0.68352854, w: 0.21337941} + - {x: 0.0010947561, y: 0.001094757, z: 0.997992, w: 0.10737011} + - {x: 0.02552924, y: 0.025538234, z: 0.7595532, w: 0.18789218} + - {x: 0.10913667, y: 0.10912547, z: 0.7829909, w: 0.24255002} + - {x: 0.18805735, y: 0.18805729, z: 0.2023317, w: 0.24259087} + - {x: 0.004597126, y: 0.0045971265, z: 0.9948133, w: 0.3374936} + - {x: 0.02892764, y: 0.028940415, z: 0.92902434, w: 0.9476159} + - {x: 0.004597126, y: 0.0045971265, z: 0.9948133, w: 0.34284985} + - {x: 0.02904657, y: 0.029059397, z: -0.00025725897, w: 0.97083664} + - {x: 0.2438468, y: 0.24414271, z: 0.7862994, w: 0.7058718} + - {x: 0.02552924, y: 0.025538234, z: 0.7342117, w: 0.21337941} + - {x: 0.025529288, y: 0.025538282, z: 0.45869082, w: 0.19992697} + - {x: 0.0045971014, y: 0.004597102, z: 0.99278957, w: 0.42888954} + - {x: 0.02904657, y: 0.029059397, z: 0.14309077, w: 0.97083664} + - {x: 0.025529273, y: 0.025538266, z: 0.6581869, w: 0.18789218} + - {x: 0.004597126, y: 0.0045971265, z: 0.99278957, w: 0.40746453} + - {x: 0.028927648, y: 0.028940424, z: 0.6580924, w: 0.9476159} + - {x: 0.025529277, y: 0.025538273, z: 0.63284534, w: 0.21337944} + - {x: 0.24484934, y: 0.24514647, z: 0.20229352, w: -0.00022205968} + - {x: 0.008622131, y: 0.008595473, z: 0.24047874, w: 0.99104124} + - {x: 0.55827975, y: 0.56625754, z: 0.3577508, w: 0.38386807} + - {x: 0.004597126, y: 0.0045971265, z: 0.9927896, w: 0.3728341} + - {x: 0.028927656, y: 0.028940432, z: 0.52222776, w: 0.9703635} + - {x: 0.004597126, y: 0.0045971265, z: 0.99278957, w: 0.4128208} + - {x: 0.02892764, y: 0.028940415, z: 0.9575766, w: 0.9476159} + - {x: 0.004597126, y: 0.0045971265, z: 0.99278957, w: 0.41817704} + - {x: 0.028927647, y: 0.028940422, z: 0.84336764, w: 0.9476159} + - {x: 0.2438468, y: 0.24414271, z: 0.58461416, w: 0.7058718} + - {x: 0.0013458754, y: 0.0013458763, z: 0.99796915, w: 0.10474303} + - {x: 0.5582799, y: 0.56625766, z: 0.11656421, w: 0.38386807} + - {x: 0.05676473, y: 0.056735974, z: 0.5221633, w: 0.75348777} + - {x: 0.18805736, y: 0.1880573, z: 0.7956943, w: -0.00018270484} + - {x: 0.08308122, y: 0.0828655, z: 0.89293456, w: 0.24345574} + - {x: 0.025529286, y: 0.02553828, z: 0.63284534, w: 0.18789218} + - {x: 0.025529288, y: 0.025538282, z: 0.48403242, w: 0.19992697} + - {x: 0.18805738, y: 0.18805733, z: 0.6075578, w: -0.00018270499} + - {x: 0.096296445, y: 0.09626769, z: 0.20157659, w: 0.7631847} + - {x: 0.027073583, y: 0.026857862, z: 0.7965951, w: 0.1888475} + - {x: 0.008622132, y: 0.008595474, z: 0.22169371, w: 0.99104124} + - {x: 0.0045971014, y: 0.004597102, z: 0.99278957, w: 0.4235333} + - {x: 0.02904657, y: 0.029059397, z: 0.11442116, w: 0.97083664} + - {x: 0.025529273, y: 0.025538266, z: 0.6581869, w: 0.21337943} + - {x: 0.004597126, y: 0.0045971265, z: 0.9927896, w: 0.38890284} + - {x: 0.028927641, y: 0.028940419, z: 0.8719199, w: 0.9476159} + - {x: 0.025529232, y: 0.025538225, z: 0.7595532, w: 0.2133794} + - {x: 0.24484934, y: 0.24514647, z: -0.00022089905, w: -0.00022205968} + - {x: 0.051948387, y: 0.05191963, z: 0.9460961, w: 0.15668273} + - {x: 0.027443325, y: 0.027450273, z: 0.43172213, w: 0.19990776} + - {x: 0.041735455, y: 0.04171014, z: 0.5222383, w: 0.8523378} + - {x: 0.04173547, y: 0.04171016, z: 0.25803044, w: 0.9333722} + - {x: 0.046466216, y: 0.046383888, z: 0.94606173, w: 0.396173} + - {x: 0.004525416, y: 0.0045848335, z: 0.2949192, w: 0.92303175} + - {x: 0.004597126, y: 0.0045971265, z: 0.9948133, w: 0.3267811} + - {x: 0.02892764, y: 0.028940415, z: 0.9004721, w: 0.9476159} + - {x: 0.004597126, y: 0.0045971265, z: 0.9948133, w: 0.33213735} + - {x: 0.028927647, y: 0.028940422, z: 0.7437491, w: 0.9476159} + - {x: 0.2438468, y: 0.24414271, z: 0.7862994, w: 0.4640923} + - {x: 0.025529286, y: 0.02553828, z: 0.6075037, w: 0.18789218} + - {x: 0.025424758, y: 0.025433714, z: 0.25804028, w: 0.97429806} + - {x: 0.1880573, y: 0.18805724, z: 0.2023317, w: 0.6188493} + - {x: 0.1880573, y: 0.18805724, z: 0.2023317, w: 0.4307201} + - {x: 0.55827975, y: 0.5662576, z: 0.27735528, w: 0.38386807} + - {x: 0.14178012, y: 0.14202437, z: 0.5518378, w: 0.24239956} + - {x: 0.004597126, y: 0.0045971265, z: 0.99278957, w: 0.39675203} + - {x: 0.02904657, y: 0.029059397, z: 0.085751556, w: 0.97083664} + - {x: 0.004597126, y: 0.0045971265, z: 0.99278957, w: 0.40210828} + - {x: 0.028927647, y: 0.028940422, z: 0.8148154, w: 0.9476159} + - {x: 0.24484934, y: 0.24514647, z: -0.00022089905, w: 0.24255152} + - {x: 0.018868167, y: 0.018697036, z: 0.56546956, w: 0.8263192} + - {x: 0.027443333, y: 0.02745028, z: 0.40477276, w: 0.19990776} + - {x: 0.025529286, y: 0.02553828, z: 0.6075037, w: 0.21337944} + - {x: 0.025529286, y: 0.02553828, z: 0.53471565, w: 0.19992697} + - {x: 0.05216407, y: 0.052162353, z: 0.9460921, w: 0.051831044} + - {x: 0.07628066, y: 0.07627982, z: 0.20239493, w: 0.85713243} + - {x: 0.16805795, y: 0.16822259, z: 0.92678535, w: 0.09029153} + - {x: 0.049198896, y: 0.049182598, z: 0.9460991, w: 0.25620037} + - {x: 0.030204816, y: 0.029751267, z: 0.94579166, w: 0.4397015} + - {x: 0.035516005, y: 0.0355163, z: 0.62264967, w: 0.9476339} + - {x: 0.008622126, y: 0.0085954685, z: 0.28379178, w: 0.98405135} + - {x: 0.16388099, y: 0.1638154, z: 0.3904262, w: 0.24254927} + - {x: 0.025529247, y: 0.025538243, z: 0.7088701, w: 0.18789218} + - {x: 0.0027324376, y: 0.002676252, z: 0.99585503, w: 0.20821382} + - {x: 0.046466228, y: 0.04638389, z: 0.94606173, w: 0.35239172} + - {x: 0.03046526, y: 0.030473534, z: 0.032651756, w: 0.9660705} + - {x: 0.20537189, y: 0.2053528, z: 0.40476158, w: -0.00026715547} + - {x: 0.004525419, y: 0.0045848363, z: 0.2949192, w: 0.9176291} + - {x: 0.004597126, y: 0.0045971265, z: 0.9948133, w: 0.3160686} + - {x: 0.028927678, y: 0.028940454, z: 0.15265311, w: 0.9660634} + - {x: 0.004597126, y: 0.0045971265, z: 0.9948133, w: 0.32142484} + - {x: 0.028927647, y: 0.028940422, z: 0.71519685, w: 0.9476159} + - {x: 0.2438468, y: 0.24414271, z: 0.58461416, w: 0.4640923} + - {x: 0.025529286, y: 0.02553828, z: 0.5600573, w: 0.19992697} + - {x: 0.025529247, y: 0.025538243, z: 0.7088701, w: 0.21337941} + - {x: 0.018152576, y: 0.019545564, z: 0.71296847, w: 0.39832696} + - {x: 0.004597126, y: 0.0045971265, z: 0.9948133, w: 0.31071234} + - {x: 0.028927654, y: 0.02894043, z: 0.55078, w: 0.9703635} + - {x: 0.028962461, y: 0.028952325, z: 0.17176326, w: 0.9708403} + - {x: 0.0491989, y: 0.0491826, z: 0.9460991, w: 0.20758776} + - {x: 0.008622131, y: 0.008595474, z: 0.23108622, w: 0.99104124} + - {x: 0.2409732, y: 0.24106437, z: 0.299716, w: 0.7535988} + - {x: 0.18805727, y: 0.18805721, z: 0.2023317, w: 0.80697846} + - {x: 0.019876927, y: 0.01987699, z: 0.1821941, w: 0.9670526} + - {x: 0.052164074, y: 0.052162357, z: 0.9460921, w: -0.0002353242} + - {x: 0.55827975, y: 0.5662576, z: 0.1969598, w: 0.38386807} + - {x: 0.048348546, y: 0.048330832, z: 0.9460685, w: 0.3047824} + - {x: 0.01987693, y: 0.019876994, z: 0.97660995, w: 0.4409508} + - {x: 0.0010525639, y: 0.0010525649, z: 0.9979958, w: 0.10976565} + - {x: 0.4802968, y: 0.48026833, z: 0.47295818, w: -0.00020549214} + - {x: 0.00862213, y: 0.008595473, z: 0.28379178, w: 0.9748134} + - {x: 0.004597126, y: 0.0045971265, z: 0.9927896, w: 0.36747783} + - {x: 0.02904657, y: 0.029059397, z: 0.028412346, w: 0.97083664} + - {x: 0.004597127, y: 0.004597128, z: 0.9948133, w: 0.30535606} + - {x: 0.028927647, y: 0.028940422, z: 0.78626317, w: 0.9476159} + - {x: 0.24484934, y: 0.24514647, z: -0.00022089905, w: 0.48532513} + - {x: 0.025529247, y: 0.025538243, z: 0.7342117, w: 0.18789218} + - {x: 0.025529286, y: 0.02553828, z: 0.5093741, w: 0.19992697} + - {x: 0.00074234634, y: 0.0007423472, z: 0.998024, w: 0.11214982} + - {x: 0.004597126, y: 0.0045971265, z: 0.9927896, w: 0.37819034} + - {x: 0.028927647, y: 0.028940422, z: 0.6866446, w: 0.9476159} + - {x: 0.004597126, y: 0.0045971265, z: 0.9927896, w: 0.3835466} + - {x: 0.02904657, y: 0.029059397, z: 0.057081953, w: 0.97083664} + - {x: 0.24484934, y: 0.24514647, z: -0.00022089905, w: 0.72809863} bakedVertexColorMesh: - {fileID: 0} - {fileID: 0} @@ -15965,15 +20154,171 @@ MonoBehaviour: - {fileID: 0} - {fileID: 0} - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} bakedRenderersTerrain: [] bakedIDsTerrain: bakedScaleOffsetTerrain: [] nonBakedRenderers: [] - - name: NoPoints + - name: Lobby maps: - - {fileID: 2800000, guid: 0a1f2738044d4da4da8b5a20336ddc39, type: 3} - - {fileID: 2800000, guid: ff30a56cf94c8a64d8d604b45055e952, type: 3} - - {fileID: 2800000, guid: 38e13a5b6317e9240a7e11a90abe8069, type: 3} + - {fileID: 2800000, guid: fc08048a164c31e468f4a469ef35e727, type: 3} + - {fileID: 2800000, guid: 84471ec69056d9e468388f1ded2b85d9, type: 3} masks: [] dirMaps: [] rnmMaps0: [] @@ -15981,42 +20326,94 @@ MonoBehaviour: rnmMaps2: [] mapsMode: bakedRenderers: - - {fileID: 285759825} - - {fileID: 382860430} - - {fileID: 660518652} - - {fileID: 706963245} - - {fileID: 1247771532} - - {fileID: 837570461} - - {fileID: 874610119} - - {fileID: 998546395} - - {fileID: 1084975127} - - {fileID: 1167160677} - - {fileID: 1196589736} - - {fileID: 1211523185} - - {fileID: 1534685193} - - {fileID: 1824004554} - - {fileID: 1834286059} - - {fileID: 1959297857} - - {fileID: 2034465666} - bakedIDs: 0100000001000000010000000200000001000000010000000100000001000000010000000200000001000000020000000100000001000000020000000100000000000000 + - {fileID: 267155293} + - {fileID: 85469504} + - {fileID: 90357862} + - {fileID: 1641041690} + - {fileID: 295151168} + - {fileID: 400902256} + - {fileID: 1362277938} + - {fileID: 220095151} + - {fileID: 245385924} + - {fileID: 905496711} + - {fileID: 444596393} + - {fileID: 421169978} + - {fileID: 2129333577} + - {fileID: 512815370} + - {fileID: 1230064630} + - {fileID: 619504804} + - {fileID: 1272306634} + - {fileID: 652178689} + - {fileID: 679006205} + - {fileID: 705607186} + - {fileID: 732949856} + - {fileID: 925244479} + - {fileID: 998344275} + - {fileID: 1010830669} + - {fileID: 1037297641} + - {fileID: 1158088447} + - {fileID: 1165789008} + - {fileID: 1177050921} + - {fileID: 1180520677} + - {fileID: 1206777345} + - {fileID: 1246946034} + - {fileID: 2143233305} + - {fileID: 1284703411} + - {fileID: 1487057095} + - {fileID: 1419986018} + - {fileID: 1432026715} + - {fileID: 1691059348} + - {fileID: 1691725977} + - {fileID: 1696707626} + - {fileID: 1889234631} + - {fileID: 1983330144} + - {fileID: 2016568206} + - {fileID: 2091574342} + bakedIDs: 0100000000000000ffffffff00000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000ffffffff000000000000000000000000000000000000000000000000ffffffff0100000000000000ffffffff00000000000000000000000000000000ffffffff00000000000000000000000000000000ffffffff0000000000000000 bakedScaleOffset: - - {x: 0.21781398, y: 0.21779163, z: 0.44556153, w: 0.75048685} - - {x: 0.37309682, y: 0.37309426, z: 0.0013101152, w: 0.45107937} - - {x: 0.11192442, y: 0.111915946, z: 0.16776991, w: 0.8244708} - - {x: 0.37665918, y: 0.37665662, z: 0.0013226247, w: 0.0013226258} - - {x: 0.16581276, y: 0.16538222, z: 0.0013611487, w: 0.8265973} - - {x: 0.37309673, y: 0.3730942, z: 0.44731802, w: 0.37677667} - - {x: 0.18990387, y: 0.1898954, z: 0.6613038, w: 0.74861217} - - {x: 0.10242384, y: 0.10241538, z: 0.27946857, w: 0.8246604} - - {x: 0.0895003, y: 0.089452974, z: 0.8211525, w: 0.094771035} - - {x: 0.37665915, y: 0.3766566, z: 0.38070512, w: 0.0013226258} - - {x: 0.37309682, y: 0.37309426, z: 0.44731802, w: 0.0013101164} - - {x: 0.28663036, y: 0.28712654, z: 0.7577567, w: -0.0010125795} - - {x: 0.08950027, y: 0.08945294, z: 0.9102514, w: 0.094771035} - - {x: 0.45593676, y: 0.45596203, z: -0.0006542783, w: -0.00065439596} - - {x: 0.37665907, y: 0.3766565, z: 0.0013226247, w: 0.38037416} - - {x: 0.0966523, y: 0.09662476, z: 0.82116735, w: -0.0006342802} - - {x: 1.0138023, y: 1.0137343, z: -0.00043686488, w: -0.000436732} + - {x: 0.2702117, y: 0.2701885, z: -0.008445248, w: 0.7324447} + - {x: 0.12100871, y: 0.12103219, z: 0.119270645, w: 0.8086851} + - {x: 1, y: 1, z: 0, w: 0} + - {x: 0.080332674, y: 0.08031833, z: 0.23948325, w: 0.8887358} + - {x: 0.08033267, y: 0.080318324, z: 0.56049633, w: 0.8086638} + - {x: 0.08033267, y: 0.080318324, z: 0.48024306, w: 0.8086638} + - {x: 0.08033265, y: 0.08031831, z: 0.7210028, w: 0.8887358} + - {x: 1, y: 1, z: 0, w: 0} + - {x: 1, y: 1, z: 0, w: 0} + - {x: 0.080332644, y: 0.080318294, z: 0.8815093, w: 0.8887358} + - {x: 0.08033267, y: 0.080318324, z: 0.7210028, w: 0.8086638} + - {x: 0.15544464, y: 0.1554587, z: 0.81099105, w: 0.17256947} + - {x: 0.027086038, y: 0.027068326, z: 0.96819246, w: 0.17458056} + - {x: 0.08033267, y: 0.080318324, z: 0.6407496, w: 0.8086638} + - {x: 0.17557092, y: 0.17556071, z: 0.8108426, w: -0.0010083298} + - {x: 0.06378771, y: 0.06378771, z: 0.0029349283, w: 0.93327737} + - {x: 0.042970397, y: 0.04278377, z: 0.8107576, w: 0.76576364} + - {x: 0.08033267, y: 0.080318324, z: 0.6407496, w: 0.8887358} + - {x: 1, y: 1, z: 0, w: 0} + - {x: 0.08033267, y: 0.080318324, z: 0.56049633, w: 0.8887358} + - {x: 1, y: 1, z: 0, w: 0} + - {x: 0.1537193, y: 0.15377794, z: 0.81088305, w: 0.32801017} + - {x: 0.1526224, y: 0.15261437, z: 0.8109109, w: 0.48180455} + - {x: 0.08033267, y: 0.080318324, z: 0.39998978, w: 0.8887358} + - {x: 0.121008724, y: 0.1210322, z: -0.0009647669, w: 0.8086851} + - {x: 0.08033265, y: 0.08031831, z: 0.80125606, w: 0.8887358} + - {x: 0.03434993, y: 0.03434993, z: 0.8573498, w: 0.7697746} + - {x: 1, y: 1, z: 0, w: 0} + - {x: 0.7505877, y: 0.75085044, z: -0.007712246, w: -0.0077166073} + - {x: 0.015365732, y: 0.015365732, z: 0.9699779, w: 0.2344883} + - {x: 1, y: 1, z: 0, w: 0} + - {x: 0.08033268, y: 0.08031834, z: 0.23948325, w: 0.8086638} + - {x: 0.080332674, y: 0.08031833, z: 0.31973654, w: 0.8887358} + - {x: 0.08033265, y: 0.08031831, z: 0.8815093, w: 0.8086638} + - {x: 0.12783347, y: 0.1278339, z: 0.8147861, w: 0.6379454} + - {x: 1, y: 1, z: 0, w: 0} + - {x: 0.08033267, y: 0.080318324, z: 0.48024306, w: 0.8887358} + - {x: 0.08033265, y: 0.08031831, z: 0.80125606, w: 0.8086638} + - {x: 0.08033267, y: 0.080318324, z: 0.39998978, w: 0.8086638} + - {x: 0.080332674, y: 0.08031833, z: 0.31973654, w: 0.8086638} + - {x: 1, y: 1, z: 0, w: 0} + - {x: 0.8109045, y: 0.8108885, z: -0.00023266759, w: -0.00023260494} + - {x: 0.022685284, y: 0.022685284, z: 0.9699779, w: 0.20593315} bakedVertexColorMesh: - {fileID: 0} - {fileID: 0} @@ -16035,6 +20432,94 @@ MonoBehaviour: - {fileID: 0} - {fileID: 0} - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + bakedRenderersTerrain: [] + bakedIDsTerrain: + bakedScaleOffsetTerrain: [] + nonBakedRenderers: [] + - name: DownCount + maps: + - {fileID: 2800000, guid: a171eca5a41371b49af1a8486f069191, type: 3} + - {fileID: 2800000, guid: 3bb4b8df33acc844d86b745ad5142f4d, type: 3} + - {fileID: 2800000, guid: 2c4a25ba39330d04bb43765156c38b60, type: 3} + - {fileID: 2800000, guid: 5c4db802caf40924d9e1219ab9502d53, type: 3} + masks: [] + dirMaps: [] + rnmMaps0: [] + rnmMaps1: [] + rnmMaps2: [] + mapsMode: + bakedRenderers: + - {fileID: 88149417} + - {fileID: 139112635} + - {fileID: 302151439} + - {fileID: 448309812} + - {fileID: 593901293} + - {fileID: 599447124} + - {fileID: 882053296} + - {fileID: 910520425} + - {fileID: 1378939248} + - {fileID: 1307231589} + - {fileID: 1625315258} + - {fileID: 1851354689} + - {fileID: 2055335471} + - {fileID: 2067418218} + bakedIDs: 0000000000000000010000000200000001000000000000000100000001000000030000000100000001000000010000000100000001000000 + bakedScaleOffset: + - {x: 0.9763147, y: 0.97625685, z: -0.00041782347, w: -0.0004177105} + - {x: 0.01752652, y: 0.017472332, z: 0.96237993, w: 0.00056764873} + - {x: 0.07570291, y: 0.075702794, z: 0.24777927, w: 0.68150604} + - {x: 1.0012718, y: 1.0013535, z: -0.0004162471, w: -0.00041648623} + - {x: 0.24445435, y: 0.24413465, z: 0.0009855471, w: 0.6027217} + - {x: 0.01752649, y: 0.017472303, z: 0.9814724, w: 0.0005676503} + - {x: 0.07570294, y: 0.07570282, z: 0.4046089, w: 0.60309446} + - {x: 0.17672753, y: 0.17673127, z: -0.00079548685, w: 0.8232806} + - {x: 1.0196207, y: 1.0034717, z: -0.0015223261, w: -0.0014750147} + - {x: 0.075702935, y: 0.075702816, z: 0.4830237, w: 0.60309446} + - {x: 0.07570295, y: 0.07570283, z: 0.32619408, w: 0.60309446} + - {x: 0.6093728, y: 0.6093729, z: -0.00031559673, w: -0.000315597} + - {x: 0.07570296, y: 0.07570284, z: 0.24777927, w: 0.60309446} + - {x: 0.075702906, y: 0.07570279, z: 0.24777927, w: 0.75991756} + bakedVertexColorMesh: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} bakedRenderersTerrain: [] bakedIDsTerrain: bakedScaleOffsetTerrain: [] @@ -17176,11 +21661,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1337770351 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1337646829457088878, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} - m_PrefabInstance: {fileID: 1487057093} - m_PrefabAsset: {fileID: 0} --- !u!1 &1338781415 GameObject: m_ObjectHideFlags: 0 @@ -17229,8 +21709,8 @@ MonoBehaviour: ShadowsScale: 1 BlurShadows: 1 AdaptiveResolution: 1 - VoxelsPerUnit: 3 - Resolution: {x: 59, y: 24, z: 44} + VoxelsPerUnit: 1 + Resolution: {x: 20, y: 8, z: 15} PreviewVoxels: 0 BakeryVolume: {fileID: 69741267} LightVolumeInstance: {fileID: 1338781417} @@ -17262,13 +21742,13 @@ MonoBehaviour: IsDynamic: 0 IsAdditive: 0 InvBakedRotation: {x: -0, y: -0, z: -0, w: 1} - BoundsUvwMin0: {x: 0.016393442, y: 0.03846154, z: 0.007246377, w: 0.96721315} - BoundsUvwMin1: {x: 0.016393442, y: 0.03846154, z: 0.34057972, w: 0.92307687} - BoundsUvwMin2: {x: 0.016393442, y: 0.03846154, z: 0.67391306, w: 0.3188406} + BoundsUvwMin0: {x: 0.024390243, y: 0.1, z: 0.015151516, w: 0.48780486} + BoundsUvwMin1: {x: 0.024390243, y: 0.1, z: 0.27272728, w: 0.79999995} + BoundsUvwMin2: {x: 0.024390243, y: 0.1, z: 0.530303, w: 0.22727273} BoundsUvwMinOcclusion: {x: 0, y: 0, z: 0, w: 1} - BoundsUvwMax0: {x: 0.9836066, y: 0.96153843, z: 0.32608697, w: 0} - BoundsUvwMax1: {x: 0.9836066, y: 0.96153843, z: 0.6594203, w: 0} - BoundsUvwMax2: {x: 0.9836066, y: 0.96153843, z: 0.9927536, w: 0} + BoundsUvwMax0: {x: 0.5121951, y: 0.9, z: 0.24242425, w: 0} + BoundsUvwMax1: {x: 0.5121951, y: 0.9, z: 0.5, w: 0} + BoundsUvwMax2: {x: 0.5121951, y: 0.9, z: 0.75757575, w: 0} InvLocalEdgeSmoothing: {x: 78.78097, y: 31.757006, z: 59.233646, w: 0} InvWorldMatrix: e00: 0.050773684 @@ -17341,6 +21821,88 @@ GameObject: m_CorrespondingSourceObject: {fileID: 2880588319250313143, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 445112381} m_PrefabAsset: {fileID: 0} +--- !u!1001 &1354535475 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1304742900} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: b62c0ec4025b4d14a87b276f5269ea5f, type: 3} + propertyPath: m_LocalPosition.x + value: -39.716 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: b62c0ec4025b4d14a87b276f5269ea5f, type: 3} + propertyPath: m_LocalPosition.y + value: 0.14 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: b62c0ec4025b4d14a87b276f5269ea5f, type: 3} + propertyPath: m_LocalPosition.z + value: 3.7743 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: b62c0ec4025b4d14a87b276f5269ea5f, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: b62c0ec4025b4d14a87b276f5269ea5f, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: b62c0ec4025b4d14a87b276f5269ea5f, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: b62c0ec4025b4d14a87b276f5269ea5f, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: b62c0ec4025b4d14a87b276f5269ea5f, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: b62c0ec4025b4d14a87b276f5269ea5f, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: b62c0ec4025b4d14a87b276f5269ea5f, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: b62c0ec4025b4d14a87b276f5269ea5f, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 6dba0e876b8368347a4fb3f027e9b50e, type: 2} + - target: {fileID: -7511558181221131132, guid: b62c0ec4025b4d14a87b276f5269ea5f, type: 3} + propertyPath: m_Materials.Array.data[1] + value: + objectReference: {fileID: 2100000, guid: 9fa141bf96518154fb0b91e9f9d2831c, type: 2} + - target: {fileID: 919132149155446097, guid: b62c0ec4025b4d14a87b276f5269ea5f, type: 3} + propertyPath: m_Name + value: NoPointsTrophy + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: b62c0ec4025b4d14a87b276f5269ea5f, type: 3} + insertIndex: -1 + addedObject: {fileID: 32952648} + - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: b62c0ec4025b4d14a87b276f5269ea5f, type: 3} + insertIndex: -1 + addedObject: {fileID: 32952647} + - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: b62c0ec4025b4d14a87b276f5269ea5f, type: 3} + insertIndex: -1 + addedObject: {fileID: 32952646} + - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: b62c0ec4025b4d14a87b276f5269ea5f, type: 3} + insertIndex: -1 + addedObject: {fileID: 32952649} + m_SourcePrefab: {fileID: 100100000, guid: b62c0ec4025b4d14a87b276f5269ea5f, type: 3} +--- !u!4 &1354535476 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: b62c0ec4025b4d14a87b276f5269ea5f, type: 3} + m_PrefabInstance: {fileID: 1354535475} + m_PrefabAsset: {fileID: 0} --- !u!1 &1361438329 GameObject: m_ObjectHideFlags: 0 @@ -17503,6 +22065,73 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: 689256096079544507, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} m_PrefabInstance: {fileID: 1362277936} m_PrefabAsset: {fileID: 0} +--- !u!1 &1366527141 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1366527142} + - component: {fileID: 1366527143} + m_Layer: 0 + m_Name: PointLight (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1366527142 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1366527141} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.1210003, y: 7.365, z: -14.671} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1032527761} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1366527143 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1366527141} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 57f24a4aaa0761b45ba25e7e5108e2c7, type: 3} + m_Name: + m_EditorClassIdentifier: + UID: -2048554123 + color: {r: 1, g: 1, b: 1, a: 1} + intensity: 1 + shadowSpread: 0.05 + cutoff: 15 + realisticFalloff: 0 + legacySampling: 1 + samples: 8 + projMode: 0 + cookie: {fileID: 0} + angle: 30 + innerAngle: 0 + cubemap: {fileID: 0} + iesFile: {fileID: 0} + bitmask: 1 + bakeToIndirect: 0 + shadowmask: 0 + shadowmaskFalloff: 0 + indirectIntensity: 1 + falloffMinRadius: 1 + shadowmaskGroupID: 0 + directionMode: 0 + maskChannel: -1 --- !u!23 &1367084273 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 8880764824548044079, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -17513,10 +22142,261 @@ GameObject: m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: cb7fb80e6c856fc478acc8b306610246, type: 3} m_PrefabInstance: {fileID: 1715216228} m_PrefabAsset: {fileID: 0} ---- !u!1 &1380217926 stripped +--- !u!1001 &1375130215 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 992013940} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + propertyPath: m_LocalPosition.x + value: -1.5 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + propertyPath: m_LocalPosition.y + value: 0.100000225 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + propertyPath: m_LocalPosition.z + value: 1.2499981 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + propertyPath: m_LocalRotation.w + value: 0.70710784 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + propertyPath: m_LocalRotation.x + value: -7.1054274e-15 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + propertyPath: m_LocalRotation.y + value: 0.70710576 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + propertyPath: m_LocalRotation.z + value: 0.000000053385 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 90 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + propertyPath: m_Name + value: TinyRoom + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + insertIndex: -1 + addedObject: {fileID: 1410118921} + - targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + insertIndex: -1 + addedObject: {fileID: 1426648473} + - targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + insertIndex: -1 + addedObject: {fileID: 213412049} + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + insertIndex: -1 + addedObject: {fileID: 1375130222} + - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + insertIndex: -1 + addedObject: {fileID: 1375130221} + - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + insertIndex: -1 + addedObject: {fileID: 1375130220} + - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + insertIndex: -1 + addedObject: {fileID: 1375130219} + m_SourcePrefab: {fileID: 100100000, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} +--- !u!4 &1375130216 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + m_PrefabInstance: {fileID: 1375130215} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1375130217 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3579776820605786274, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 1235844105} + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + m_PrefabInstance: {fileID: 1375130215} + m_PrefabAsset: {fileID: 0} +--- !u!23 &1375130218 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + m_PrefabInstance: {fileID: 1375130215} + m_PrefabAsset: {fileID: 0} +--- !u!65 &1375130219 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1375130217} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1.958333, y: 0.05, z: 0.9998877} + m_Center: {x: -1.029166, y: -0.02, z: -0.000054314733} +--- !u!65 &1375130220 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1375130217} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 0.05, y: 2.0000005, z: 0.9998877} + m_Center: {x: -2.03, y: 1.0000002, z: -0.000054314733} +--- !u!65 &1375130221 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1375130217} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1.958333, y: 2.0000005, z: 0.05} + m_Center: {x: -1.029166, y: 1.0000002, z: -0.53} +--- !u!65 &1375130222 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1375130217} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1.958333, y: 2.0000005, z: 0.05} + m_Center: {x: -1.029166, y: 1.0000002, z: 0.53} +--- !u!1001 &1378939246 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 445776558} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalPosition.x + value: 1.795 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalPosition.y + value: -2.15 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalPosition.z + value: -21.28 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalRotation.w + value: 0.0000020340083 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalRotation.x + value: 0.0000020489094 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalRotation.y + value: 0.7071067 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalRotation.z + value: -0.7071069 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 90 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: -180 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 6c802bc1dd1dee24095056a5f6da8a8a, type: 2} + - target: {fileID: 919132149155446097, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_Name + value: Walls + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} +--- !u!4 &1378939247 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + m_PrefabInstance: {fileID: 1378939246} + m_PrefabAsset: {fileID: 0} +--- !u!23 &1378939248 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 85585303349fb4849b6c9f2825e34d67, type: 3} + m_PrefabInstance: {fileID: 1378939246} m_PrefabAsset: {fileID: 0} --- !u!23 &1380217928 stripped MeshRenderer: @@ -17602,50 +22482,73 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 96cdea5358afe6548b7079063386f7fc, type: 3} m_PrefabInstance: {fileID: 1381876078} m_PrefabAsset: {fileID: 0} ---- !u!114 &1387059607 +--- !u!1 &1389625174 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1389625175} + - component: {fileID: 1389625176} + m_Layer: 0 + m_Name: PointLight (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1389625175 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1389625174} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -1, z: -0, w: 0.0000029504295} + m_LocalPosition: {x: -11.974739, y: 6.6928186, z: -3.995737} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 303549434} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1389625176 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} + m_GameObject: {fileID: 1389625174} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ec0b4dd729a12d046982652f834580a2, type: 3} - m_Name: QuizScene_LM0 + m_Script: {fileID: 11500000, guid: 57f24a4aaa0761b45ba25e7e5108e2c7, type: 3} + m_Name: m_EditorClassIdentifier: - resolution: 4096 + UID: -919113235 + color: {r: 0.8915094, g: 0.97609526, b: 1, a: 1} + intensity: 1 + shadowSpread: 0.05 + cutoff: 30 + realisticFalloff: 0 + legacySampling: 1 + samples: 8 + projMode: 0 + cookie: {fileID: 0} + angle: 30 + innerAngle: 0 + cubemap: {fileID: 0} + iesFile: {fileID: 0} bitmask: 1 - id: 0 - sortingID: 1 - isImplicit: 1 - area: 10474.33 - totalVertexCount: 0 - vertexCounter: 0 - sceneLodLevel: -1 - autoResolution: 0 - sceneName: - tag: -1 - containsTerrains: 0 - probes: 0 - mode: 1 - renderMode: 1000 - renderDirMode: 1000 - atlasPacker: 1000 - holeFilling: 0 - computeSSS: 0 - sssSamples: 16 - sssDensity: 10 - sssColor: {r: 1, g: 1, b: 1, a: 1} - sssScale: 1 - fakeShadowBias: 0 - transparentSelfShadow: 0 - flipNormal: 0 - parentName: - overridePath: - fixPos3D: 0 - voxelSize: {x: 1, y: 1, z: 1} - passedFilter: 0 + bakeToIndirect: 0 + shadowmask: 0 + shadowmaskFalloff: 0 + indirectIntensity: 1 + falloffMinRadius: 1 + shadowmaskGroupID: 0 + directionMode: 0 + maskChannel: -1 --- !u!1001 &1402901523 PrefabInstance: m_ObjectHideFlags: 0 @@ -17720,6 +22623,41 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 4631ded14b341484caf4fdb04e1fd32f, type: 3} m_PrefabInstance: {fileID: 1402901523} m_PrefabAsset: {fileID: 0} +--- !u!1 &1402935897 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1402935898} + m_Layer: 0 + m_Name: Scoreboard + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1402935898 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1402935897} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 942075418} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1001 &1407078581 PrefabInstance: m_ObjectHideFlags: 0 @@ -17794,26 +22732,127 @@ Transform: m_CorrespondingSourceObject: {fileID: 1863247904194952148, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} m_PrefabInstance: {fileID: 1407078581} m_PrefabAsset: {fileID: 0} ---- !u!1 &1410397139 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} - m_PrefabInstance: {fileID: 413934237} +--- !u!1001 &1410118920 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1375130216} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} + propertyPath: m_LocalScale.x + value: 0.30019978 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} + propertyPath: m_LocalScale.z + value: 0.24232203 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} + propertyPath: m_LocalPosition.x + value: -1.5 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} + propertyPath: m_LocalPosition.y + value: -3.410605e-13 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} + propertyPath: m_LocalPosition.z + value: 0.0000044107437 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} + propertyPath: m_LocalRotation.x + value: -0.000000037779092 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} + propertyPath: m_LocalRotation.y + value: -0.00000008940697 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} + propertyPath: m_LocalRotation.z + value: 1.4715745e-15 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 90 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} + propertyPath: m_Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 5e3993f6e7b9d1540b8bb266ccaed08c, type: 2} + - target: {fileID: 919132149155446097, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} + propertyPath: m_Name + value: EndTable (1) + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} + insertIndex: -1 + addedObject: {fileID: 1410118923} + m_SourcePrefab: {fileID: 100100000, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} +--- !u!4 &1410118921 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} + m_PrefabInstance: {fileID: 1410118920} m_PrefabAsset: {fileID: 0} ---- !u!23 &1410397140 stripped +--- !u!1 &1410118922 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} + m_PrefabInstance: {fileID: 1410118920} + m_PrefabAsset: {fileID: 0} +--- !u!65 &1410118923 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410118922} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 3.0302172, y: 3.6831207, z: 4.093485} + m_Center: {x: -0.12746769, y: 1.8415606, z: 0.0005403757} +--- !u!23 &1410118924 stripped MeshRenderer: - m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} - m_PrefabInstance: {fileID: 413934237} + m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 1889e704c53edfb4eb6edb8e84d049ab, type: 3} + m_PrefabInstance: {fileID: 1410118920} m_PrefabAsset: {fileID: 0} --- !u!1 &1417368005 stripped GameObject: m_CorrespondingSourceObject: {fileID: 8313676601306732379, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 445112381} m_PrefabAsset: {fileID: 0} ---- !u!1 &1419124788 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 94cf32329dec20b47b6af8d21a3fae29, type: 3} - m_PrefabInstance: {fileID: 1022578039} - m_PrefabAsset: {fileID: 0} --- !u!23 &1419124789 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 94cf32329dec20b47b6af8d21a3fae29, type: 3} @@ -17850,6 +22889,16 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: c7c49b161bf2ede449f099db8f5f5a20, type: 3} m_PrefabInstance: {fileID: 290633020} m_PrefabAsset: {fileID: 0} +--- !u!4 &1426648473 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + m_PrefabInstance: {fileID: 6641770535126847926} + m_PrefabAsset: {fileID: 0} +--- !u!23 &1426648475 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: 8970773725826667200, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + m_PrefabInstance: {fileID: 6641770535126847926} + m_PrefabAsset: {fileID: 0} --- !u!1 &1432026712 GameObject: m_ObjectHideFlags: 0 @@ -17985,6 +23034,27 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1432026712} m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1438229301 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 8379790806586723610, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + m_PrefabInstance: {fileID: 823932916} + m_PrefabAsset: {fileID: 0} +--- !u!224 &1438229302 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + m_PrefabInstance: {fileID: 823932916} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1438229307 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + m_PrefabInstance: {fileID: 823932916} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1438229301} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56226d676b0e8a94e9461ad87a1c012e, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &1443523168 stripped GameObject: m_CorrespondingSourceObject: {fileID: 5671964725706159495, guid: aa832477f436d4445a29aadaf09a92ce, type: 3} @@ -18001,21 +23071,11 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 732f797707519ce41893310c02586f5b, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &1454042550 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} - m_PrefabInstance: {fileID: 973142249} - m_PrefabAsset: {fileID: 0} --- !u!23 &1454042551 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} m_PrefabInstance: {fileID: 973142249} m_PrefabAsset: {fileID: 0} ---- !u!1 &1467392866 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: c41fbbe45cf06584d86ed41a751ef268, type: 3} - m_PrefabInstance: {fileID: 57583866} - m_PrefabAsset: {fileID: 0} --- !u!23 &1467392867 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: c41fbbe45cf06584d86ed41a751ef268, type: 3} @@ -18363,16 +23423,55 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: 689256096079544507, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} m_PrefabInstance: {fileID: 1487057093} m_PrefabAsset: {fileID: 0} +--- !u!114 &1495929848 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec0b4dd729a12d046982652f834580a2, type: 3} + m_Name: QuizScene_LMA2 + m_EditorClassIdentifier: + resolution: 2048 + bitmask: 1 + id: 2 + sortingID: 2 + isImplicit: 1 + area: 0 + totalVertexCount: 0 + vertexCounter: 0 + sceneLodLevel: -1 + autoResolution: 0 + sceneName: + tag: -1 + containsTerrains: 0 + probes: 0 + mode: 1 + renderMode: 1000 + renderDirMode: 1000 + atlasPacker: 1000 + holeFilling: 0 + computeSSS: 0 + sssSamples: 16 + sssDensity: 10 + sssColor: {r: 1, g: 1, b: 1, a: 1} + sssScale: 1 + fakeShadowBias: 0 + transparentSelfShadow: 0 + flipNormal: 0 + parentName: + overridePath: + fixPos3D: 0 + voxelSize: {x: 1, y: 1, z: 1} + passedFilter: 0 --- !u!1 &1510596813 stripped GameObject: m_CorrespondingSourceObject: {fileID: 7004038606463852389, guid: 844da2a9bfdfa474784b61993287bcc8, type: 3} m_PrefabInstance: {fileID: 1786457057} m_PrefabAsset: {fileID: 0} ---- !u!1 &1513055745 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 3579776820605786274, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 576108662} - m_PrefabAsset: {fileID: 0} --- !u!23 &1513055747 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 7547418677490389003, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -18529,7 +23628,7 @@ MonoBehaviour: m_text: Show answer Info m_isRightToLeft: 0 m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2100000, guid: 834be2e59b4432149a2b52b7d71e976f, type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -18613,7 +23712,7 @@ PrefabInstance: m_Modifications: - target: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} propertyPath: m_LocalPosition.x - value: -31.361002 + value: -31.421 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} propertyPath: m_LocalPosition.y @@ -18621,11 +23720,11 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} propertyPath: m_LocalPosition.z - value: -7.908 + value: -7.77 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} propertyPath: m_LocalRotation.w - value: 1 + value: 0.99222857 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} propertyPath: m_LocalRotation.x @@ -18633,7 +23732,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} propertyPath: m_LocalRotation.y - value: -0 + value: -0.124428846 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} propertyPath: m_LocalRotation.z @@ -18645,7 +23744,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} propertyPath: m_LocalEulerAnglesHint.y - value: 0 + value: -14.296 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} propertyPath: m_LocalEulerAnglesHint.z @@ -18665,7 +23764,19 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] - m_AddedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} + insertIndex: -1 + addedObject: {fileID: 1712227388} + - targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} + insertIndex: -1 + addedObject: {fileID: 988134732} + - targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} + insertIndex: -1 + addedObject: {fileID: 1438229302} + - targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: b15b36c582a62d645acac3788ddc723e, type: 3} + insertIndex: -1 + addedObject: {fileID: 1658098797} m_AddedComponents: - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: b15b36c582a62d645acac3788ddc723e, type: 3} insertIndex: -1 @@ -18707,11 +23818,6 @@ BoxCollider: serializedVersion: 3 m_Size: {x: 3.7465565, y: 0.86141926, z: 0.71520543} m_Center: {x: 0, y: 0.43070963, z: -0.00000037252903} ---- !u!1 &1559809792 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1671211409786305901, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 3663352991328551858} - m_PrefabAsset: {fileID: 0} --- !u!23 &1559809794 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 5629896105277814212, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -19028,6 +24134,264 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1580518677} m_CullTransparentMesh: 1 +--- !u!1 &1582765397 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 2880588319250313143, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 446262684} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1594174615 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1594174616} + - component: {fileID: 1594174618} + - component: {fileID: 1594174617} + m_Layer: 0 + m_Name: Question10 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1594174616 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1594174615} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1177781895} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1594174617 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1594174615} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 2 + serializedProgramAsset: {fileID: 11400000, guid: 1a3121a400bb97a4798c930d280db074, type: 2} + programSource: {fileID: 11400000, guid: d18e451e2b012944899ec95f8a380e52, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!114 &1594174618 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1594174615} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66abc497563d35d46b551af57cb77e18, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 1594174617} + questionTitle: COCKTAILS + questionDescription: We will give you the initial letters of the names of cocktails, + and a list of some of the main ingredients typically used to make them according + to the International Bartenders Association. What we want you to do is name the + cocktail. + answerInfo: + - 1. PC - WHITE RUM, COCONUT CREAM, PINEAPPLE JUICE + - 2. CL - RUM, COLA, LIME + - 3. M - RUM, MINT, SUGAR, LIME JUICE + - 4. SB - VODKA, CRANBERRY JUICE, GRAPEFRUIT JUICE + - 5. KR - CREME DE CASSIS, CHAMPAGNE + answerText: + - 1. PINA COLADA + - 2. CUBA LIBRE + - 3. MOJITO + - 4. SEA BREEZE + - 5. KIR ROYALE + answerPoints: 390000000f000000140000000300000018000000 +--- !u!1 &1594525686 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1594525690} + - component: {fileID: 1594525687} + - component: {fileID: 1594525688} + - component: {fileID: 1594525689} + m_Layer: 0 + m_Name: LobbyLightVolume + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1594525687 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1594525686} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c7cdafe690df4b545944c1a3d0c49e71, type: 3} + m_Name: + m_EditorClassIdentifier: + Dynamic: 0 + Additive: 0 + Color: {r: 1, g: 1, b: 1, a: 1} + Intensity: 1 + SmoothBlending: 0.25 + Texture0: {fileID: 11700000, guid: 8a5a6948b8f79754fa771d8299ec1baf, type: 2} + Texture1: {fileID: 11700000, guid: c06fbde891ea2e44aace8c20b071c68b, type: 2} + Texture2: {fileID: 11700000, guid: c5fb4f72ff52028479bca2f2614494c0, type: 2} + ShadowsTexture: {fileID: 0} + Exposure: 0 + Shadows: 0 + Highlights: 0 + Bake: 1 + PointLightShadows: 1 + ShadowsScale: 1 + BlurShadows: 1 + AdaptiveResolution: 1 + VoxelsPerUnit: 1 + Resolution: {x: 8, y: 3, z: 8} + PreviewVoxels: 0 + BakeryVolume: {fileID: 997517102} + LightVolumeInstance: {fileID: 1594525688} + LightVolumeSetup: {fileID: 641951133} +--- !u!114 &1594525688 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1594525686} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 21bc8ec8ba5e5f3408667533e591f313, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 1594525689} + Color: {r: 1, g: 1, b: 1, a: 1} + Intensity: 1 + IsDynamic: 0 + IsAdditive: 0 + InvBakedRotation: {x: -0, y: -0, z: -0, w: 1} + BoundsUvwMin0: {x: 0.5609756, y: 0.1, z: 0.015151516, w: 0.19512194} + BoundsUvwMin1: {x: 0.5609756, y: 0.1, z: 0.27272728, w: 0.3} + BoundsUvwMin2: {x: 0.5609756, y: 0.1, z: 0.530303, w: 0.121212125} + BoundsUvwMinOcclusion: {x: 0, y: 0, z: 0, w: 1} + BoundsUvwMax0: {x: 0.75609756, y: 0.4, z: 0.13636364, w: 0} + BoundsUvwMax1: {x: 0.75609756, y: 0.4, z: 0.3939394, w: 0} + BoundsUvwMax2: {x: 0.75609756, y: 0.4, z: 0.6515151, w: 0} + InvLocalEdgeSmoothing: {x: 31.708778, y: 12.3351555, z: 31.877802, w: 0} + InvWorldMatrix: + e00: 0.12614803 + e01: 0 + e02: 0 + e03: 0.003550897 + e10: 0 + e11: 0.32427642 + e12: 0 + e13: -0.5213874 + e20: 0 + e21: 0 + e22: 0.12547916 + e23: 0.002650129 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + RelativeRotation: {x: 0, y: 0, z: 0, w: 1} + RelativeRotationRow0: {x: 1, y: 0, z: 0} + RelativeRotationRow1: {x: 0, y: 1, z: 0} + IsRotated: 0 + BakeOcclusion: 0 + IsInitialized: 1 + LightVolumeManager: {fileID: 641951132} + IsIterartedThrough: 0 +--- !u!114 &1594525689 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1594525686} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 1 + serializedProgramAsset: {fileID: 11400000, guid: cd780fa212378b04a8c7775caae2eaa9, type: 2} + programSource: {fileID: 11400000, guid: 78b75a58aad622e40bdf6e6d713d2487, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!4 &1594525690 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1594525686} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 42.891293, y: 4.6989565, z: 4.858307} + m_LocalScale: {x: 7.9271946, y: 3.0837889, z: 7.9694505} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 997517103} + m_Father: {fileID: 50750187} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1598276051 GameObject: m_ObjectHideFlags: 0 @@ -19167,11 +24531,6 @@ LightingSettings: m_PVRTiledBaking: 0 m_NumRaysToShootPerTexel: -1 m_RespectSceneVisibilityWhenBakingGI: 0 ---- !u!1 &1611991887 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9004724186224534342, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 576108662} - m_PrefabAsset: {fileID: 0} --- !u!23 &1611991890 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 1674034645716136823, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -19305,6 +24664,98 @@ GameObject: m_CorrespondingSourceObject: {fileID: 6502798789971202652, guid: 89fe58bd9a2f5c240b10c836e11bb5ac, type: 3} m_PrefabInstance: {fileID: 1612549483} m_PrefabAsset: {fileID: 0} +--- !u!1001 &1625315255 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1743423422} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalScale.x + value: 0.016027614 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalScale.y + value: 0.016027616 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalScale.z + value: 0.016027616 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalPosition.x + value: 4.96 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalPosition.y + value: 0.277 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalPosition.z + value: -18.06 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.w + value: -0.45276037 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.x + value: -2.5133289e-15 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.y + value: 0.89163226 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.z + value: -4.9495655e-15 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 233.84201 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: f45e687b234af6948b76b2622ed33647, type: 2} + - target: {fileID: 919132149155446097, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_Name + value: OfficeChair + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 4484e3331bc52724593257a69e2553b8, type: 3} +--- !u!4 &1625315256 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + m_PrefabInstance: {fileID: 1625315255} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1625315257 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + m_PrefabInstance: {fileID: 1625315255} + m_PrefabAsset: {fileID: 0} +--- !u!23 &1625315258 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + m_PrefabInstance: {fileID: 1625315255} + m_PrefabAsset: {fileID: 0} --- !u!1 &1626245479 GameObject: m_ObjectHideFlags: 0 @@ -19507,11 +24958,6 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 08740414457cb8e4286799f156a8ef71, type: 3} m_PrefabInstance: {fileID: 1633629520} m_PrefabAsset: {fileID: 0} ---- !u!1 &1635795633 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 9f005117537dd2541978269e113924fe, type: 3} - m_PrefabInstance: {fileID: 1237957709} - m_PrefabAsset: {fileID: 0} --- !u!23 &1635795634 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 9f005117537dd2541978269e113924fe, type: 3} @@ -19598,26 +25044,42 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: 689256096079544507, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} m_PrefabInstance: {fileID: 1641041688} m_PrefabAsset: {fileID: 0} ---- !u!1 &1653014922 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9004724186224534342, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 445112381} - m_PrefabAsset: {fileID: 0} --- !u!23 &1653014925 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 1674034645716136823, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 445112381} m_PrefabAsset: {fileID: 0} ---- !u!1 &1656331689 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 6515456391347357321, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 445112381} - m_PrefabAsset: {fileID: 0} --- !u!23 &1656331692 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 3578079415854012088, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 445112381} m_PrefabAsset: {fileID: 0} +--- !u!1 &1658098796 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 8379790806586723610, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + m_PrefabInstance: {fileID: 2127800736} + m_PrefabAsset: {fileID: 0} +--- !u!224 &1658098797 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + m_PrefabInstance: {fileID: 2127800736} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1658098802 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + m_PrefabInstance: {fileID: 2127800736} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1658098796} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56226d676b0e8a94e9461ad87a1c012e, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1663184057 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 8379790806586723610, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + m_PrefabInstance: {fileID: 1718745619} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1668206597 PrefabInstance: m_ObjectHideFlags: 0 @@ -19796,6 +25258,73 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 5c40cf8d61da6e44eb6de89d5dca8708, type: 3} m_PrefabInstance: {fileID: 1668206597} m_PrefabAsset: {fileID: 0} +--- !u!1 &1673173617 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1673173618} + - component: {fileID: 1673173619} + m_Layer: 0 + m_Name: PointLight (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1673173618 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1673173617} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -1, z: -0, w: 0.0000029504295} + m_LocalPosition: {x: -17.97476, y: 7.1928186, z: -7.495702} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 303549434} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1673173619 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1673173617} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 57f24a4aaa0761b45ba25e7e5108e2c7, type: 3} + m_Name: + m_EditorClassIdentifier: + UID: -919113235 + color: {r: 0.89411765, g: 0.9764706, b: 1, a: 1} + intensity: 1 + shadowSpread: 0.05 + cutoff: 30 + realisticFalloff: 0 + legacySampling: 1 + samples: 8 + projMode: 0 + cookie: {fileID: 0} + angle: 30 + innerAngle: 0 + cubemap: {fileID: 0} + iesFile: {fileID: 0} + bitmask: 1 + bakeToIndirect: 0 + shadowmask: 0 + shadowmaskFalloff: 0 + indirectIntensity: 1 + falloffMinRadius: 1 + shadowmaskGroupID: 0 + directionMode: 0 + maskChannel: -1 --- !u!1001 &1678696535 PrefabInstance: m_ObjectHideFlags: 0 @@ -19987,21 +25516,11 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: c612308e343bb894f8c1de3fa055f069, type: 3} m_PrefabInstance: {fileID: 1688320098} m_PrefabAsset: {fileID: 0} ---- !u!1 &1691059347 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1337646829457088878, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} - m_PrefabInstance: {fileID: 213150830} - m_PrefabAsset: {fileID: 0} --- !u!23 &1691059348 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 689256096079544507, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} m_PrefabInstance: {fileID: 213150830} m_PrefabAsset: {fileID: 0} ---- !u!1 &1691725976 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1337646829457088878, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} - m_PrefabInstance: {fileID: 1407078581} - m_PrefabAsset: {fileID: 0} --- !u!23 &1691725977 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 689256096079544507, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} @@ -20098,16 +25617,32 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: 689256096079544507, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} m_PrefabInstance: {fileID: 1696707622} m_PrefabAsset: {fileID: 0} ---- !u!1 &1699025118 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 09436c050a69bf0449a0a979b01268b7, type: 3} - m_PrefabInstance: {fileID: 1249668048} - m_PrefabAsset: {fileID: 0} --- !u!23 &1699025119 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 09436c050a69bf0449a0a979b01268b7, type: 3} m_PrefabInstance: {fileID: 1249668048} m_PrefabAsset: {fileID: 0} +--- !u!1 &1712227387 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 6812330130097005368, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + m_PrefabInstance: {fileID: 7252627961903531244} + m_PrefabAsset: {fileID: 0} +--- !u!4 &1712227388 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + m_PrefabInstance: {fileID: 7252627961903531244} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1712227389 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 3641202643626132809, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + m_PrefabInstance: {fileID: 7252627961903531244} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1712227387} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 49ba8138bafa3df4fb2a0f99842d8768, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1001 &1715216228 PrefabInstance: m_ObjectHideFlags: 0 @@ -20334,6 +25869,264 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: cb7fb80e6c856fc478acc8b306610246, type: 3} m_PrefabInstance: {fileID: 1715216228} m_PrefabAsset: {fileID: 0} +--- !u!1001 &1718745619 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1084975125} + m_Modifications: + - target: {fileID: 1831648391729385026, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_PresetInfoIsWorld + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3692739284170986421, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 2100000, guid: 35630e38b4e5ffb40b44ec5348b4333f, type: 2} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.x + value: 600 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 600 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalPosition.z + value: -0.00000030361116 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9238794 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.x + value: 0.38268384 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.y + value: 0.0000004917383 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.z + value: -0.000000048428774 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: -1.0000013 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 1.0756 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 45 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: deskManager + value: + objectReference: {fileID: 983768282} + - target: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8060766842135696868, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 2100000, guid: 35630e38b4e5ffb40b44ec5348b4333f, type: 2} + - target: {fileID: 8379790806586723610, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Name + value: PlayerScreen + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} +--- !u!224 &1718745620 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + m_PrefabInstance: {fileID: 1718745619} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1718745625 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + m_PrefabInstance: {fileID: 1718745619} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1663184057} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56226d676b0e8a94e9461ad87a1c012e, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1722439368 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 2880588319250313143, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} + m_PrefabInstance: {fileID: 992013939} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1725237038 PrefabInstance: m_ObjectHideFlags: 0 @@ -20622,9 +26415,6 @@ PrefabInstance: - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d52bd7e9131901e40a0effcd276b963d, type: 3} insertIndex: -1 addedObject: {fileID: 1841401753} - - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d52bd7e9131901e40a0effcd276b963d, type: 3} - insertIndex: -1 - addedObject: {fileID: 1841401752} - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: d52bd7e9131901e40a0effcd276b963d, type: 3} insertIndex: -1 addedObject: {fileID: 1841401751} @@ -20635,6 +26425,1085 @@ PrefabInstance: insertIndex: -1 addedObject: {fileID: 1841401754} m_SourcePrefab: {fileID: 100100000, guid: d52bd7e9131901e40a0effcd276b963d, type: 3} +--- !u!1001 &1732251925 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1084975125} + m_Modifications: + - target: {fileID: 1831648391729385026, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_PresetInfoIsWorld + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3692739284170986421, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 2100000, guid: 35630e38b4e5ffb40b44ec5348b4333f, type: 2} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.x + value: 600 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 600 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9238794 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.x + value: 0.38268384 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.y + value: 0.0000004917383 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.z + value: -0.000000048428774 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 1.0756 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 45 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: deskManager + value: + objectReference: {fileID: 983768282} + - target: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8060766842135696868, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 2100000, guid: 35630e38b4e5ffb40b44ec5348b4333f, type: 2} + - target: {fileID: 8379790806586723610, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Name + value: PlayerScreen (1) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} +--- !u!224 &1732251926 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + m_PrefabInstance: {fileID: 1732251925} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1733785281 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1733785282} + - component: {fileID: 1733785286} + - component: {fileID: 1733785285} + - component: {fileID: 1733785284} + - component: {fileID: 1733785283} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1733785282 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733785281} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.043830402, y: 0.043830402, z: 0.03281292} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 620422905} + m_Father: {fileID: 213412049} + m_LocalEulerAnglesHint: {x: 90, y: -90, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0.001} + m_SizeDelta: {x: 200, y: 200} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1733785283 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733785281} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1533785930, guid: 661092b4961be7145bfbe56e1e62337b, type: 3} + m_Name: + m_EditorClassIdentifier: + AllowFocusView: 1 +--- !u!114 &1733785284 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733785281} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1733785285 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733785281} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 1 +--- !u!223 &1733785286 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733785281} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &1743423421 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1743423422} + - component: {fileID: 1743423423} + m_Layer: 0 + m_Name: DownCount + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1743423422 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1743423421} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 88149415} + - {fileID: 303549434} + - {fileID: 445776558} + - {fileID: 1625315256} + - {fileID: 2067418216} + - {fileID: 2055335469} + - {fileID: 882053294} + - {fileID: 1307231587} + - {fileID: 302151437} + m_Father: {fileID: 1083390546} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1743423423 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1743423421} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d10ab396b89a06942afcc1005cd4e1f2, type: 3} + m_Name: + m_EditorClassIdentifier: + captureMode: 0 + captureAssetName: + captureAsset: {fileID: 0} + allowUVPaddingAdjustment: 0 + tforms: [] + cpoints: [] + previewDisabledRenderers: [] + previewTempObjects: [] + previewEnabled: 0 + bakeChildLightProbeGroups: 0 +--- !u!1 &1754882560 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1754882562} + - component: {fileID: 1754882561} + - component: {fileID: 1754882565} + - component: {fileID: 1754882564} + - component: {fileID: 1754882563} + m_Layer: 0 + m_Name: Spline + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!114 &1754882561 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1754882560} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dab5c7d4c32e743048dfca98e2d5914f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Spline: + m_EditModeType: 1 + m_Knots: [] + m_MetaData: [] + m_Closed: 0 + m_IntData: + m_Data: [] + m_FloatData: + m_Data: [] + m_Float4Data: + m_Data: [] + m_ObjectData: + m_Data: [] + m_Splines: + - m_EditModeType: 1 + m_Knots: + - Position: + x: -0.09748268 + y: -0.00032746792 + z: 0.058725417 + TangentIn: + x: -0 + y: -0 + z: -0.16180146 + TangentOut: + x: 0 + y: 0 + z: 0.16180146 + Rotation: + value: + x: 0.18833406 + y: 0.7922709 + z: -0.47763318 + w: 0.32970238 + - Position: + x: 0.45671654 + y: -1.4258275 + z: -0.46927458 + TangentIn: + x: -0 + y: -0 + z: -0.40843335 + TangentOut: + x: 0 + y: 0 + z: 0.37383422 + Rotation: + value: + x: 0.23460409 + y: 0.6440325 + z: -0.22653802 + w: 0.6919998 + - Position: + x: 1.6787167 + y: -1.5558274 + z: 0.102725446 + TangentIn: + x: -0 + y: -0 + z: -0.3099894 + TangentOut: + x: 0 + y: 0 + z: 0.3129618 + Rotation: + value: + x: 0.0496806 + y: 0.15399376 + z: -0.0077593317 + w: 0.98679155 + - Position: + x: 1.0051422 + y: -1.6128273 + z: 1.3076768 + TangentIn: + x: -0 + y: -0 + z: -0.26998436 + TangentOut: + x: 0 + y: 0 + z: 0.24520656 + Rotation: + value: + x: 0.0051465863 + y: -0.65069103 + z: 0.0044047837 + w: 0.75931245 + - Position: + x: 0.1737175 + y: -1.5848274 + z: 0.52872545 + TangentIn: + x: -0 + y: -0 + z: -0.23848319 + TangentOut: + x: 0 + y: 0 + z: 0.22580613 + Rotation: + value: + x: 0.000028014412 + y: 0.9996748 + z: -0.0010982177 + w: 0.02547323 + - Position: + x: 0.9862671 + y: -1.6128273 + z: -0.090048134 + TangentIn: + x: -0 + y: -0 + z: -0.30789775 + TangentOut: + x: 0 + y: 0 + z: 0.27466553 + Rotation: + value: + x: 0.004058183 + y: 0.8230662 + z: -0.005882022 + w: 0.5679006 + - Position: + x: 1.7970467 + y: -1.6128273 + z: -0.15096086 + TangentIn: + x: -0 + y: -0 + z: -0.19048426 + TangentOut: + x: 0 + y: 0 + z: 0.2201047 + Rotation: + value: + x: 0.000000011885188 + y: 0.38475895 + z: -0.0000000049543316 + w: 0.9230171 + - Position: + x: 1.7254524 + y: -1.6128273 + z: 0.932265 + TangentIn: + x: -0 + y: -0 + z: -0.25194514 + TangentOut: + x: 0 + y: 0 + z: 0.23203808 + Rotation: + value: + x: -0.012471838 + y: -0.4002932 + z: -0.0054520713 + w: 0.91628605 + - Position: + x: 0.805418 + y: -1.5764275 + z: 0.92172545 + TangentIn: + x: -0 + y: -0 + z: -0.34668037 + TangentOut: + x: 0 + y: 0 + z: 0.52233297 + Rotation: + value: + x: -0.008851311 + y: -0.5781903 + z: -0.0062746666 + w: 0.81582975 + - Position: + x: -0.8112831 + y: -1.5738275 + z: 2.2467253 + TangentIn: + x: -0 + y: -0 + z: -0.712973 + TangentOut: + x: 0 + y: 0 + z: 0.7674176 + Rotation: + value: + x: -0.35811114 + y: -0.3462381 + z: 0.5989898 + w: 0.62696636 + - Position: + x: -3.0644608 + y: -1.4130609 + z: 3.1197255 + TangentIn: + x: -0 + y: -0 + z: -0.24217317 + TangentOut: + x: 0 + y: 0 + z: 0.24217317 + Rotation: + value: + x: -0.4126356 + y: -0.386638 + z: 0.56018925 + w: 0.60533535 + m_MetaData: + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + m_Closed: 0 + m_IntData: + m_Data: [] + m_FloatData: + m_Data: [] + m_Float4Data: + m_Data: [] + m_ObjectData: + m_Data: [] + - m_EditModeType: 1 + m_Knots: + - Position: + x: 0.025917053 + y: 0.001072526 + z: -9.822274 + TangentIn: + x: -0 + y: -0 + z: -0.1597322 + TangentOut: + x: 0 + y: 0 + z: 0.1597322 + Rotation: + value: + x: 0.09674214 + y: 0.8221625 + z: -0.52887374 + w: 0.18703586 + - Position: + x: 0.3537178 + y: -1.4458275 + z: -10.414274 + TangentIn: + x: -0 + y: -0 + z: -0.43551916 + TangentOut: + x: 0 + y: 0 + z: 0.40393195 + Rotation: + value: + x: 0.11824816 + y: 0.8647975 + z: -0.28293294 + w: 0.39760762 + - Position: + x: 1.5217171 + y: -1.5638274 + z: -11.128274 + TangentIn: + x: -0 + y: -0 + z: -0.4173728 + TangentOut: + x: 0 + y: 0 + z: 0.4699474 + Rotation: + value: + x: 0.023283882 + y: 0.7111285 + z: -0.023593891 + w: 0.7022802 + - Position: + x: 3.0313835 + y: -1.6128273 + z: -10.260508 + TangentIn: + x: -0 + y: -0 + z: -0.40618926 + TangentOut: + x: 0 + y: 0 + z: 0.45166114 + Rotation: + value: + x: 0.010530684 + y: 0.10213691 + z: -0.0010827862 + w: 0.9947141 + - Position: + x: 1.7461967 + y: -1.6128273 + z: -8.532124 + TangentIn: + x: -0 + y: -0 + z: -0.59287006 + TangentOut: + x: 0 + y: 0 + z: 0.53161526 + Rotation: + value: + x: -0.000000023622063 + y: -0.54304236 + z: -0.000000014014006 + w: 0.83970535 + - Position: + x: 0.020839691 + y: -1.6128272 + z: -8.680958 + TangentIn: + x: -0 + y: -0 + z: -0.21449633 + TangentOut: + x: 0 + y: 0 + z: 0.25987682 + Rotation: + value: + x: 0.0000000025872424 + y: 0.99156517 + z: 0.000000019793541 + w: -0.1296089 + - Position: + x: 2.1103096 + y: -1.6128273 + z: -10.128761 + TangentIn: + x: -0 + y: -0 + z: -0.48828754 + TangentOut: + x: 0 + y: 0 + z: 0.21340056 + Rotation: + value: + x: 0.000000023419897 + y: 0.79890525 + z: -0.000000046171937 + w: 0.601457 + - Position: + x: 2.5953426 + y: -1.6128274 + z: -10.106604 + TangentIn: + x: -0 + y: -0 + z: -0.123409934 + TangentOut: + x: 0 + y: 0 + z: 0.14219217 + Rotation: + value: + x: -0.000000034801978 + y: 0.36483416 + z: 0.0000000028105909 + w: 0.9310725 + - Position: + x: 2.5751534 + y: -1.6128272 + z: -9.462342 + TangentIn: + x: -0 + y: -0 + z: -0.1934562 + TangentOut: + x: 0 + y: 0 + z: 0.20941706 + Rotation: + value: + x: -0.000000050368456 + y: -0.27386948 + z: -0.000000016672084 + w: 0.96176684 + - Position: + x: 1.909584 + y: -1.6128273 + z: -9.105224 + TangentIn: + x: -0 + y: -0 + z: -0.1919716 + TangentOut: + x: 0 + y: 0 + z: 0.1565693 + Rotation: + value: + x: 0.011228775 + y: 0.7292661 + z: 0.011978629 + w: -0.68403316 + - Position: + x: 1.5017166 + y: -1.5848274 + z: -9.397274 + TangentIn: + x: -0 + y: -0 + z: -0.18304306 + TangentOut: + x: 0 + y: 0 + z: 0.2681303 + Rotation: + value: + x: 0.0021871312 + y: 0.9627808 + z: 0.0077894256 + w: -0.27016225 + - Position: + x: 1.3455486 + y: -1.6128273 + z: -10.4636345 + TangentIn: + x: -0 + y: -0 + z: -0.35410425 + TangentOut: + x: 0 + y: 0 + z: 0.3713977 + Rotation: + value: + x: -0.0014069154 + y: 0.97798586 + z: -0.0065982533 + w: -0.20856212 + - Position: + x: 0.58613586 + y: -1.6128273 + z: -11.374581 + TangentIn: + x: -0 + y: -0 + z: -0.4370268 + TangentOut: + x: 0 + y: 0 + z: 0.643609 + Rotation: + value: + x: 0 + y: 0.8586019 + z: 0 + w: -0.5126429 + - Position: + x: -1.9697399 + y: -1.6128273 + z: -11.663809 + TangentIn: + x: -0 + y: -0 + z: -0.25721884 + TangentOut: + x: 0 + y: 0 + z: 0.25721884 + Rotation: + value: + x: 0 + y: 0.74580294 + z: 0 + w: -0.66616654 + m_MetaData: + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + - Mode: 0 + Tension: 0.5 + m_Closed: 0 + m_IntData: + m_Data: [] + m_FloatData: + m_Data: [] + m_Float4Data: + m_Data: [] + m_ObjectData: + m_Data: [] + m_Knots: + m_KnotsLink: [] +--- !u!4 &1754882562 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1754882560} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -26.194717, y: 1.7128274, z: 0.78027457} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1304742900} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1754882563 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1754882560} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 222dc08d484f16869bdd89edd9d368fc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Container: {fileID: 1754882561} + m_RebuildOnSplineChange: 0 + m_RebuildFrequency: 30 + m_UpdateColliders: 1 + m_Sides: 8 + m_SegmentsPerUnit: 4 + m_Capped: 1 + m_Radius: 0.01 + m_Range: {x: 0, y: 1} +--- !u!23 &1754882564 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1754882560} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 670c93b6400cecc4d9427ca653ff6a79, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1754882565 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1754882560} + m_Mesh: {fileID: 4300000, guid: 028092ce0a797424db309b9ea103879e, type: 2} --- !u!1 &1773291424 stripped GameObject: m_CorrespondingSourceObject: {fileID: 8313676601306732379, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -20740,7 +27609,6 @@ Transform: - {fileID: 2034465664} - {fileID: 1304742900} - {fileID: 1032527761} - - {fileID: 831209429} - {fileID: 1069630398} - {fileID: 1177781895} m_Father: {fileID: 1083390546} @@ -21027,6 +27895,22 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 96cdea5358afe6548b7079063386f7fc, type: 3} m_PrefabInstance: {fileID: 1793287739} m_PrefabAsset: {fileID: 0} +--- !u!1 &1793540281 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 8379790806586723610, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + m_PrefabInstance: {fileID: 1732251925} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1793540286 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + m_PrefabInstance: {fileID: 1732251925} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1793540281} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56226d676b0e8a94e9461ad87a1c012e, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &1793738517 GameObject: m_ObjectHideFlags: 0 @@ -21037,7 +27921,6 @@ GameObject: m_Component: - component: {fileID: 1793738518} - component: {fileID: 1793738523} - - component: {fileID: 1793738522} - component: {fileID: 1793738526} - component: {fileID: 1793738525} - component: {fileID: 1793738527} @@ -21069,36 +27952,6 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1793738522 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1793738517} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 2100000, guid: 35630e38b4e5ffb40b44ec5348b4333f, type: 2} - m_Color: {r: 0, g: 0, b: 0, a: 0.44705883} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 --- !u!222 &1793738523 CanvasRenderer: m_ObjectHideFlags: 0 @@ -21163,6 +28016,7 @@ MonoBehaviour: questionDescriptionText: {fileID: 2139680469} noPointsScreen: {fileID: 831209431} noPointsMeter: {fileID: 285759830} + resetMeterButton: {fileID: 694385049} --- !u!114 &1793738527 MonoBehaviour: m_ObjectHideFlags: 0 @@ -21269,11 +28123,6 @@ GameObject: m_CorrespondingSourceObject: {fileID: 100590131341888120, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 576108662} m_PrefabAsset: {fileID: 0} ---- !u!1 &1807744145 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 4631ded14b341484caf4fdb04e1fd32f, type: 3} - m_PrefabInstance: {fileID: 1402901523} - m_PrefabAsset: {fileID: 0} --- !u!23 &1807744146 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 4631ded14b341484caf4fdb04e1fd32f, type: 3} @@ -21618,11 +28467,6 @@ GameObject: m_CorrespondingSourceObject: {fileID: 2880588319250313143, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 1235844105} m_PrefabAsset: {fileID: 0} ---- !u!1 &1830291155 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9189557463581648220, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 1121960421} - m_PrefabAsset: {fileID: 0} --- !u!23 &1830291156 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 7243795509972649097, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -21706,11 +28550,6 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 2f5faf56eef0ad748ad331a95b4b2abc, type: 3} m_PrefabInstance: {fileID: 1834286056} m_PrefabAsset: {fileID: 0} ---- !u!1 &1834286058 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 2f5faf56eef0ad748ad331a95b4b2abc, type: 3} - m_PrefabInstance: {fileID: 1834286056} - m_PrefabAsset: {fileID: 0} --- !u!23 &1834286059 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 2f5faf56eef0ad748ad331a95b4b2abc, type: 3} @@ -21842,11 +28681,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1839145136} m_CullTransparentMesh: 1 ---- !u!1 &1841159996 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 0559fb43973f08141ba9df521c0e1cc7, type: 3} - m_PrefabInstance: {fileID: 1678696535} - m_PrefabAsset: {fileID: 0} --- !u!23 &1841159997 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 0559fb43973f08141ba9df521c0e1cc7, type: 3} @@ -21922,27 +28756,6 @@ Rigidbody: m_Interpolate: 0 m_Constraints: 0 m_CollisionDetection: 0 ---- !u!65 &1841401752 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1841401746} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 3 - m_Size: {x: 0.052550793, y: 0.034168866, z: 0.15444541} - m_Center: {x: 0.17030835, y: 0.01708441, z: 0.0007378012} --- !u!65 &1841401753 BoxCollider: m_ObjectHideFlags: 0 @@ -21958,7 +28771,7 @@ BoxCollider: serializedVersion: 2 m_Bits: 0 m_LayerOverridePriority: 0 - m_IsTrigger: 0 + m_IsTrigger: 1 m_ProvidesContacts: 0 m_Enabled: 1 serializedVersion: 3 @@ -21978,16 +28791,211 @@ MonoBehaviour: m_EditorClassIdentifier: AllowCollisionOwnershipTransfer: 0 ForceKinematicOnRemote: 0 ---- !u!1 &1848060571 stripped +--- !u!1 &1843492938 GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 09436c050a69bf0449a0a979b01268b7, type: 3} - m_PrefabInstance: {fileID: 1007569567} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1843492939} + - component: {fileID: 1843492941} + - component: {fileID: 1843492940} + m_Layer: 0 + m_Name: Question8 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1843492939 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1843492938} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1177781895} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1843492940 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1843492938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 2 + serializedProgramAsset: {fileID: 11400000, guid: 1a3121a400bb97a4798c930d280db074, type: 2} + programSource: {fileID: 11400000, guid: d18e451e2b012944899ec95f8a380e52, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!114 &1843492941 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1843492938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66abc497563d35d46b551af57cb77e18, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 1843492940} + questionTitle: MAINLAND AFRICAN COUNTRIES WITH A COASTLINE + questionDescription: "Any country wholly or partly on the African mainland that + has a coastline \u2014 that is, any part of its border on any sea or ocean. Countries + must be wholly or partly on the mainland of Africa \u2014 we're not looking for + island nations." + answerInfo: [] + answerText: + - ALGERIA + - ANGOLA + - BENIN + - CAMEROON + - DEMOCRATIC REPUBLIC OF THE CONGO + - DJIBOUTI + - EGYPT + - EQUATORIAL GUINEA + - ERITREA + - GABON + - GHANA + - GUINEA + - GUINEA-BISSAU + - IVORY COAST + - KENYA + - LIBERIA + - LIBYA + - MAURITANIA + - MOROCCO + - MOZAMBIQUE + - NAMIBIA + - NIGERIA + - REPUBLIC OF THE CONGO + - SENEGAL + - SIERRA LEONE + - SOMALIA + - SOUTH AFRICA + - SUDAN + - TANZANIA + - THE GAMBIA + - TOGO + - TUNISIA + answerPoints: 0b000000070000000200000001000000010000000200000024000000010000000300000003000000140000000100000000000000130000002300000006000000180000000400000025000000090000000b0000000c00000005000000080000000500000013000000330000000d0000000900000007000000020000001d000000 --- !u!23 &1848060572 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 09436c050a69bf0449a0a979b01268b7, type: 3} m_PrefabInstance: {fileID: 1007569567} m_PrefabAsset: {fileID: 0} +--- !u!1001 &1851354686 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 445776558} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 031b327695a211149b112576815b9c21, type: 3} + propertyPath: m_LocalPosition.x + value: 1.5999565 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 031b327695a211149b112576815b9c21, type: 3} + propertyPath: m_LocalPosition.y + value: 0.35000017 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 031b327695a211149b112576815b9c21, type: 3} + propertyPath: m_LocalPosition.z + value: -21.599936 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 031b327695a211149b112576815b9c21, type: 3} + propertyPath: m_LocalRotation.w + value: 0.0000029504295 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 031b327695a211149b112576815b9c21, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 031b327695a211149b112576815b9c21, type: 3} + propertyPath: m_LocalRotation.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 031b327695a211149b112576815b9c21, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 031b327695a211149b112576815b9c21, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 031b327695a211149b112576815b9c21, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 031b327695a211149b112576815b9c21, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: 031b327695a211149b112576815b9c21, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 79104b7c72559ae419b9b5c0aaf3f627, type: 2} + - target: {fileID: 919132149155446097, guid: 031b327695a211149b112576815b9c21, type: 3} + propertyPath: m_Name + value: Floor + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 031b327695a211149b112576815b9c21, type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 031b327695a211149b112576815b9c21, type: 3} +--- !u!4 &1851354687 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 031b327695a211149b112576815b9c21, type: 3} + m_PrefabInstance: {fileID: 1851354686} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1851354688 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 031b327695a211149b112576815b9c21, type: 3} + m_PrefabInstance: {fileID: 1851354686} + m_PrefabAsset: {fileID: 0} +--- !u!23 &1851354689 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 031b327695a211149b112576815b9c21, type: 3} + m_PrefabInstance: {fileID: 1851354686} + m_PrefabAsset: {fileID: 0} --- !u!1 &1857316187 GameObject: m_ObjectHideFlags: 0 @@ -22001,6 +29009,8 @@ GameObject: - component: {fileID: 1857316191} - component: {fileID: 1857316190} - component: {fileID: 1857316189} + - component: {fileID: 1857316194} + - component: {fileID: 1857316193} m_Layer: 0 m_Name: Canvas m_TagString: Untagged @@ -22104,6 +29114,44 @@ Canvas: m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 +--- !u!114 &1857316193 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1857316187} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 2100000, guid: c9a75b790a45e0447bc87a8b5827d764, type: 2} + m_Color: {r: 0, g: 0, b: 0, a: 0.6117647} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1857316194 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1857316187} + m_CullTransparentMesh: 1 --- !u!4 &1859244108 stripped Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: f890bc351c3a8ac4083a912069bfac26, type: 3} @@ -22114,6 +29162,161 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: f890bc351c3a8ac4083a912069bfac26, type: 3} m_PrefabInstance: {fileID: 65376844} m_PrefabAsset: {fileID: 0} +--- !u!1 &1864825428 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1864825429} + - component: {fileID: 1864825432} + - component: {fileID: 1864825431} + - component: {fileID: 1864825430} + m_Layer: 0 + m_Name: FirstCorridorLightVolume + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1864825429 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1864825428} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 34.595303, y: 6.0985327, z: 10.396486} + m_LocalScale: {x: 38.83458, y: 6.0919776, z: 2.8920736} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1116979439} + m_Father: {fileID: 50750187} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1864825430 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1864825428} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 1 + serializedProgramAsset: {fileID: 11400000, guid: cd780fa212378b04a8c7775caae2eaa9, type: 2} + programSource: {fileID: 11400000, guid: 78b75a58aad622e40bdf6e6d713d2487, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!114 &1864825431 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1864825428} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 21bc8ec8ba5e5f3408667533e591f313, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 1864825430} + Color: {r: 1, g: 1, b: 1, a: 1} + Intensity: 1 + IsDynamic: 0 + IsAdditive: 0 + InvBakedRotation: {x: -0, y: -0, z: -0, w: 1} + BoundsUvwMin0: {x: 0.024390243, y: 0.1, z: 0.7878788, w: 0.95121956} + BoundsUvwMin1: {x: 0.024390243, y: 0.1, z: 0.8636364, w: 0.59999996} + BoundsUvwMin2: {x: 0.024390243, y: 0.1, z: 0.93939394, w: 0.045454502} + BoundsUvwMinOcclusion: {x: 0, y: 0, z: 0, w: 1} + BoundsUvwMax0: {x: 0.9756098, y: 0.7, z: 0.8333333, w: 0} + BoundsUvwMax1: {x: 0.9756098, y: 0.7, z: 0.90909094, w: 0} + BoundsUvwMax2: {x: 0.9756098, y: 0.7, z: 0.9848485, w: 0} + InvLocalEdgeSmoothing: {x: 155.33832, y: 24.36791, z: 11.568295, w: 0} + InvWorldMatrix: + e00: 0.025750246 + e01: 0 + e02: 0 + e03: 0.21434861 + e10: 0 + e11: 0.16415031 + e12: 0 + e13: -0.49366972 + e20: 0 + e21: 0 + e22: 0.34577265 + e23: -1.9076482 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + RelativeRotation: {x: 0, y: 0, z: 0, w: 1} + RelativeRotationRow0: {x: 1, y: 0, z: 0} + RelativeRotationRow1: {x: 0, y: 1, z: 0} + IsRotated: 0 + BakeOcclusion: 0 + IsInitialized: 1 + LightVolumeManager: {fileID: 641951132} + IsIterartedThrough: 0 +--- !u!114 &1864825432 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1864825428} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c7cdafe690df4b545944c1a3d0c49e71, type: 3} + m_Name: + m_EditorClassIdentifier: + Dynamic: 0 + Additive: 0 + Color: {r: 1, g: 1, b: 1, a: 1} + Intensity: 1 + SmoothBlending: 0.25 + Texture0: {fileID: 11700000, guid: 97502640ba8093f44bc1b76d6c9b50c8, type: 2} + Texture1: {fileID: 11700000, guid: 7a20bd65aa8aa634691271b2935eb2ac, type: 2} + Texture2: {fileID: 11700000, guid: aa5ad81283b32354aa1fa50a28efae58, type: 2} + ShadowsTexture: {fileID: 0} + Exposure: 0 + Shadows: 0 + Highlights: 0 + Bake: 1 + PointLightShadows: 1 + ShadowsScale: 1 + BlurShadows: 1 + AdaptiveResolution: 1 + VoxelsPerUnit: 1 + Resolution: {x: 39, y: 6, z: 3} + PreviewVoxels: 1 + BakeryVolume: {fileID: 1116979440} + LightVolumeInstance: {fileID: 1864825431} + LightVolumeSetup: {fileID: 641951133} --- !u!1 &1878226201 stripped GameObject: m_CorrespondingSourceObject: {fileID: 5671964725706159495, guid: aa832477f436d4445a29aadaf09a92ce, type: 3} @@ -22130,31 +29333,16 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 732f797707519ce41893310c02586f5b, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &1882895674 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9189557463581648220, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 1235844105} - m_PrefabAsset: {fileID: 0} --- !u!23 &1882895675 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 7243795509972649097, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 1235844105} m_PrefabAsset: {fileID: 0} ---- !u!1 &1889234630 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1337646829457088878, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} - m_PrefabInstance: {fileID: 304729489} - m_PrefabAsset: {fileID: 0} --- !u!23 &1889234631 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 689256096079544507, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} m_PrefabInstance: {fileID: 304729489} m_PrefabAsset: {fileID: 0} ---- !u!1 &1900556503 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 6515456391347357321, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 1121960421} - m_PrefabAsset: {fileID: 0} --- !u!23 &1900556506 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 3578079415854012088, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -22428,16 +29616,119 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1920120335} m_CullTransparentMesh: 1 ---- !u!1 &1922623931 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1602191932284858098, guid: 844da2a9bfdfa474784b61993287bcc8, type: 3} - m_PrefabInstance: {fileID: 1786457057} - m_PrefabAsset: {fileID: 0} --- !u!23 &1922623933 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 5704965970850866779, guid: 844da2a9bfdfa474784b61993287bcc8, type: 3} m_PrefabInstance: {fileID: 1786457057} m_PrefabAsset: {fileID: 0} +--- !u!1001 &1935895833 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1304742900} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalScale.z + value: 3 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalPosition.x + value: -26.478666 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalPosition.y + value: 0.10000014 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalPosition.z + value: 0.67363787 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalRotation.w + value: 0.42437947 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalRotation.y + value: 0.90548444 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 129.777 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 670c93b6400cecc4d9427ca653ff6a79, type: 2} + - target: {fileID: 919132149155446097, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_Name + value: Camera + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + insertIndex: -1 + addedObject: {fileID: 1935895836} + m_SourcePrefab: {fileID: 100100000, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} +--- !u!1 &1935895834 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + m_PrefabInstance: {fileID: 1935895833} + m_PrefabAsset: {fileID: 0} +--- !u!23 &1935895835 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + m_PrefabInstance: {fileID: 1935895833} + m_PrefabAsset: {fileID: 0} +--- !u!65 &1935895836 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1935895834} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: -0.007, y: 0.5915856, z: 0.1} + m_Center: {x: -0.0012457294, y: 0.2957928, z: 0} +--- !u!4 &1935895838 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + m_PrefabInstance: {fileID: 1935895833} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1939462321 PrefabInstance: m_ObjectHideFlags: 0 @@ -22517,11 +29808,6 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 75a87d382e24fff4c9574ad4107b134b, type: 3} m_PrefabInstance: {fileID: 1939462321} m_PrefabAsset: {fileID: 0} ---- !u!1 &1941564312 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9189557463581648220, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 576108662} - m_PrefabAsset: {fileID: 0} --- !u!23 &1941564313 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: 7243795509972649097, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} @@ -22676,8 +29962,18 @@ GameObject: m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 242ec4ca0ae9b8d4ea897a028f436065, type: 3} m_PrefabInstance: {fileID: 281560271} m_PrefabAsset: {fileID: 0} ---- !u!65 &1959297856 -BoxCollider: +--- !u!23 &1959297857 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 242ec4ca0ae9b8d4ea897a028f436065, type: 3} + m_PrefabInstance: {fileID: 281560271} + m_PrefabAsset: {fileID: 0} +--- !u!4 &1959297859 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 242ec4ca0ae9b8d4ea897a028f436065, type: 3} + m_PrefabInstance: {fileID: 281560271} + m_PrefabAsset: {fileID: 0} +--- !u!64 &1959297861 +MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -22694,19 +29990,10 @@ BoxCollider: m_IsTrigger: 0 m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 3 - m_Size: {x: 1.2416126, y: 0.83162373, z: 2.0602107} - m_Center: {x: 0, y: 0.41581187, z: 0.030105352} ---- !u!23 &1959297857 stripped -MeshRenderer: - m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 242ec4ca0ae9b8d4ea897a028f436065, type: 3} - m_PrefabInstance: {fileID: 281560271} - m_PrefabAsset: {fileID: 0} ---- !u!4 &1959297859 stripped -Transform: - m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 242ec4ca0ae9b8d4ea897a028f436065, type: 3} - m_PrefabInstance: {fileID: 281560271} - m_PrefabAsset: {fileID: 0} + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 2331240411380376733, guid: 242ec4ca0ae9b8d4ea897a028f436065, type: 3} --- !u!1 &1962562132 GameObject: m_ObjectHideFlags: 0 @@ -22769,10 +30056,113 @@ Transform: - {fileID: 290633021} m_Father: {fileID: 1277988419} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1967346538 stripped +--- !u!1001 &1965163771 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1304742900} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalScale.z + value: 3 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalPosition.x + value: -26.406462 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalPosition.y + value: 0.10000014 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalPosition.z + value: -8.958161 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalRotation.w + value: -0.08521785 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalRotation.y + value: 0.9963624 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 189.777 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 670c93b6400cecc4d9427ca653ff6a79, type: 2} + - target: {fileID: 919132149155446097, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_Name + value: Camera (1) + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + insertIndex: -1 + addedObject: {fileID: 1965163773} + m_SourcePrefab: {fileID: 100100000, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} +--- !u!1 &1965163772 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3579776820605786274, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} - m_PrefabInstance: {fileID: 3663352991328551858} + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + m_PrefabInstance: {fileID: 1965163771} + m_PrefabAsset: {fileID: 0} +--- !u!65 &1965163773 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1965163772} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: -0.007, y: 0.5915856, z: 0.1} + m_Center: {x: -0.0012457294, y: 0.2957928, z: 0} +--- !u!23 &1965163774 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + m_PrefabInstance: {fileID: 1965163771} + m_PrefabAsset: {fileID: 0} +--- !u!4 &1965163776 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: f1545e25aa69a6345a6d3f60f9447381, type: 3} + m_PrefabInstance: {fileID: 1965163771} m_PrefabAsset: {fileID: 0} --- !u!23 &1967346540 stripped MeshRenderer: @@ -23086,7 +30476,7 @@ Transform: - {fileID: 1235844106} - {fileID: 576108663} - {fileID: 646311431} - - {fileID: 413934238} + - {fileID: 1208938231} m_Father: {fileID: 1083390546} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1981248639 @@ -23541,11 +30931,6 @@ GameObject: m_CorrespondingSourceObject: {fileID: 2880588319250313143, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 2086896412} m_PrefabAsset: {fileID: 0} ---- !u!1 &2016568205 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 08740414457cb8e4286799f156a8ef71, type: 3} - m_PrefabInstance: {fileID: 1633629520} - m_PrefabAsset: {fileID: 0} --- !u!23 &2016568206 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 08740414457cb8e4286799f156a8ef71, type: 3} @@ -23629,16 +31014,103 @@ Transform: m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} m_PrefabInstance: {fileID: 2034465663} m_PrefabAsset: {fileID: 0} ---- !u!1 &2034465665 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} - m_PrefabInstance: {fileID: 2034465663} - m_PrefabAsset: {fileID: 0} --- !u!23 &2034465666 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 864b654b07e5bc142b4622f196ca3b41, type: 3} m_PrefabInstance: {fileID: 2034465663} m_PrefabAsset: {fileID: 0} +--- !u!1001 &2055335468 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1743423422} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalScale.x + value: 0.016027614 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalScale.y + value: 0.016027616 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalScale.z + value: 0.016027616 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalPosition.x + value: 5.689589 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalPosition.y + value: 0.277 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalPosition.z + value: -23.411692 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.w + value: -0.77606773 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.x + value: -4.3080617e-15 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.y + value: 0.6306496 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.z + value: -3.5008147e-15 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 281.80402 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: f45e687b234af6948b76b2622ed33647, type: 2} + - target: {fileID: 919132149155446097, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_Name + value: OfficeChair (3) + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 4484e3331bc52724593257a69e2553b8, type: 3} +--- !u!4 &2055335469 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + m_PrefabInstance: {fileID: 2055335468} + m_PrefabAsset: {fileID: 0} +--- !u!1 &2055335470 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + m_PrefabInstance: {fileID: 2055335468} + m_PrefabAsset: {fileID: 0} +--- !u!23 &2055335471 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + m_PrefabInstance: {fileID: 2055335468} + m_PrefabAsset: {fileID: 0} --- !u!1001 &2067310247 PrefabInstance: m_ObjectHideFlags: 0 @@ -23721,6 +31193,98 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: d881b302dcb6b72459187d107c9a86a6, type: 3} m_PrefabInstance: {fileID: 2067310247} m_PrefabAsset: {fileID: 0} +--- !u!1001 &2067418215 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1743423422} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalScale.x + value: 0.016027616 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalScale.y + value: 0.016027616 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalScale.z + value: 0.016027618 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalPosition.x + value: 5.6999063 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalPosition.y + value: 0.277 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalPosition.z + value: -19.73952 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.w + value: -0.63983285 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.x + value: -3.5517915e-15 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.y + value: 0.7685141 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalRotation.z + value: -4.2661263e-15 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 259.559 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: f45e687b234af6948b76b2622ed33647, type: 2} + - target: {fileID: 919132149155446097, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_Name + value: OfficeChair (2) + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + propertyPath: m_StaticEditorFlags + value: 2147483647 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 4484e3331bc52724593257a69e2553b8, type: 3} +--- !u!4 &2067418216 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + m_PrefabInstance: {fileID: 2067418215} + m_PrefabAsset: {fileID: 0} +--- !u!1 &2067418217 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + m_PrefabInstance: {fileID: 2067418215} + m_PrefabAsset: {fileID: 0} +--- !u!23 &2067418218 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 4484e3331bc52724593257a69e2553b8, type: 3} + m_PrefabInstance: {fileID: 2067418215} + m_PrefabAsset: {fileID: 0} --- !u!1 &2070989776 GameObject: m_ObjectHideFlags: 0 @@ -23855,6 +31419,213 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2070989776} m_CullTransparentMesh: 1 +--- !u!1 &2072299825 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2072299826} + - component: {fileID: 2072299834} + - component: {fileID: 2072299833} + - component: {fileID: 2072299832} + - component: {fileID: 2072299831} + - component: {fileID: 2072299830} + - component: {fileID: 2072299829} + - component: {fileID: 2072299828} + - component: {fileID: 2072299827} + m_Layer: 0 + m_Name: Colliders + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2072299826 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2072299825} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 88149415} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2072299827 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2072299825} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 0.9, y: 8, z: 0.1} + m_Center: {x: 0.95, y: 3.95, z: -14.95} +--- !u!65 &2072299828 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2072299825} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 0.9, y: 8, z: 0.1} + m_Center: {x: 0.95, y: 3.95, z: -0.05} +--- !u!65 &2072299829 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2072299825} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 18, y: 8, z: 0.1} + m_Center: {x: -9.5, y: 3.95, z: -0.05} +--- !u!65 &2072299830 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2072299825} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 18, y: 8, z: 0.10000038} + m_Center: {x: -9.5, y: 3.9499998, z: -14.95} +--- !u!65 &2072299831 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2072299825} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 0.1, y: 8, z: 14.8} + m_Center: {x: 1.45, y: 3.95, z: -7.5} +--- !u!65 &2072299832 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2072299825} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 0.1, y: 8, z: 14.8} + m_Center: {x: -18.45, y: 3.95, z: -7.5} +--- !u!65 &2072299833 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2072299825} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 19.8, y: 0.1, z: 14.8} + m_Center: {x: -8.5, y: 7.95, z: -7.5} +--- !u!65 &2072299834 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2072299825} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 19.8, y: 0.1, z: 14.8} + m_Center: {x: -8.5, y: -0.05, z: -7.5} --- !u!1001 &2086896412 PrefabInstance: m_ObjectHideFlags: 0 @@ -24215,6 +31986,80 @@ BoxCollider: serializedVersion: 3 m_Size: {x: 4.7583256, y: 3.6343517, z: 2.786868} m_Center: {x: 6.418954, y: -0.010146618, z: 0.61509657} +--- !u!1001 &2092212184 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 910520423} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 1c7ee18c931fd454cadaa750534e1d95, type: 3} + propertyPath: m_LocalScale.x + value: 0.14623012 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1c7ee18c931fd454cadaa750534e1d95, type: 3} + propertyPath: m_LocalScale.z + value: 0.11628806 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1c7ee18c931fd454cadaa750534e1d95, type: 3} + propertyPath: m_LocalPosition.x + value: 0.596 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1c7ee18c931fd454cadaa750534e1d95, type: 3} + propertyPath: m_LocalPosition.y + value: 2.275 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1c7ee18c931fd454cadaa750534e1d95, type: 3} + propertyPath: m_LocalPosition.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1c7ee18c931fd454cadaa750534e1d95, type: 3} + propertyPath: m_LocalRotation.w + value: 0.0000020862688 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1c7ee18c931fd454cadaa750534e1d95, type: 3} + propertyPath: m_LocalRotation.x + value: -0.7071067 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1c7ee18c931fd454cadaa750534e1d95, type: 3} + propertyPath: m_LocalRotation.y + value: -0.7071068 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1c7ee18c931fd454cadaa750534e1d95, type: 3} + propertyPath: m_LocalRotation.z + value: 0.0000020862685 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1c7ee18c931fd454cadaa750534e1d95, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1c7ee18c931fd454cadaa750534e1d95, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 1c7ee18c931fd454cadaa750534e1d95, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: 1c7ee18c931fd454cadaa750534e1d95, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 5c816e03b652658498610330ae7c0b66, type: 2} + - target: {fileID: 919132149155446097, guid: 1c7ee18c931fd454cadaa750534e1d95, type: 3} + propertyPath: m_Name + value: ClockHand + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1c7ee18c931fd454cadaa750534e1d95, type: 3} +--- !u!4 &2092212185 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 1c7ee18c931fd454cadaa750534e1d95, type: 3} + m_PrefabInstance: {fileID: 2092212184} + m_PrefabAsset: {fileID: 0} --- !u!1 &2099851975 GameObject: m_ObjectHideFlags: 0 @@ -24416,31 +32261,524 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2102041128} m_Mesh: {fileID: -5388294574167003846, guid: 58cb7a72284678249ab615e41dca85f1, type: 3} ---- !u!1 &2108197827 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: c612308e343bb894f8c1de3fa055f069, type: 3} - m_PrefabInstance: {fileID: 145950628} - m_PrefabAsset: {fileID: 0} --- !u!23 &2108197828 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: c612308e343bb894f8c1de3fa055f069, type: 3} m_PrefabInstance: {fileID: 145950628} m_PrefabAsset: {fileID: 0} +--- !u!1 &2108277322 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2108277323} + - component: {fileID: 2108277325} + - component: {fileID: 2108277324} + m_Layer: 0 + m_Name: Question11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2108277323 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2108277322} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1177781895} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2108277324 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2108277322} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 2 + serializedProgramAsset: {fileID: 11400000, guid: 1a3121a400bb97a4798c930d280db074, type: 2} + programSource: {fileID: 11400000, guid: d18e451e2b012944899ec95f8a380e52, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!114 &2108277325 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2108277322} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66abc497563d35d46b551af57cb77e18, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 2108277324} + questionTitle: BRITISH LANDMARKS + questionDescription: We are going to show you five ana- grams of famous landmarks + from the UK. We would like you to identify the landmarks. For landmarks that + traditionally have a 'the' before their names, we have excluded the 'the' from + the anagram. + answerInfo: + - 1. HONEST GENE + - 2 .LOONIES FAR UP THAMES + - 3. WORST CHIEF FIVEFOLD + - 4. UP RAMPANT CHOCOLATE + - 5. LECH SONS + answerText: + - 1. STONEHENGE + - 2. HOUSES OF PARLIAMENT + - 3.WHITE CLIFFS OF DOVER + - 4. HAMPTON COURT PALACE + - 5. LOCH NESS + answerPoints: 1a0000000400000002000000000000001e000000 --- !u!1 &2110043619 stripped GameObject: m_CorrespondingSourceObject: {fileID: 2880588319250313143, guid: 79fd3af9a2caf6d408aac61db7c37819, type: 3} m_PrefabInstance: {fileID: 576108662} m_PrefabAsset: {fileID: 0} ---- !u!1 &2122982386 stripped +--- !u!1 &2118094027 GameObject: - m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 96cdea5358afe6548b7079063386f7fc, type: 3} - m_PrefabInstance: {fileID: 1793287739} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2118094028} + - component: {fileID: 2118094030} + - component: {fileID: 2118094029} + m_Layer: 0 + m_Name: Question15 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2118094028 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2118094027} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1177781895} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2118094029 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2118094027} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 2 + serializedProgramAsset: {fileID: 11400000, guid: 1a3121a400bb97a4798c930d280db074, type: 2} + programSource: {fileID: 11400000, guid: d18e451e2b012944899ec95f8a380e52, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!114 &2118094030 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2118094027} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66abc497563d35d46b551af57cb77e18, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 2118094029} + questionTitle: + questionDescription: + answerInfo: [] + answerText: [] + answerPoints: +--- !u!1 &2118838063 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 8379790806586723610, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + m_PrefabInstance: {fileID: 900851002} + m_PrefabAsset: {fileID: 0} +--- !u!114 &2118838068 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + m_PrefabInstance: {fileID: 900851002} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2118838063} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56226d676b0e8a94e9461ad87a1c012e, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!23 &2122982387 stripped MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: 96cdea5358afe6548b7079063386f7fc, type: 3} m_PrefabInstance: {fileID: 1793287739} m_PrefabAsset: {fileID: 0} +--- !u!1001 &2123724541 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 47997571} + m_Modifications: + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalPosition.x + value: -24.05 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalPosition.y + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalPosition.z + value: -12.5 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000003774895 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4498322420252528587, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_Name + value: CorridorWall + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: acde36bc75391a540a76c589339eeb32, type: 3} +--- !u!4 &2123724542 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + m_PrefabInstance: {fileID: 2123724541} + m_PrefabAsset: {fileID: 0} +--- !u!23 &2123724544 stripped +MeshRenderer: + m_CorrespondingSourceObject: {fileID: 2697018564455198238, guid: acde36bc75391a540a76c589339eeb32, type: 3} + m_PrefabInstance: {fileID: 2123724541} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &2127800736 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1534685191} + m_Modifications: + - target: {fileID: 1831648391729385026, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_PresetInfoIsWorld + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3692739284170986421, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 2100000, guid: 35630e38b4e5ffb40b44ec5348b4333f, type: 2} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.x + value: 600 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 600 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9238798 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.x + value: 0.38268274 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 1.0000019 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 1.0779 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 45 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: deskManager + value: + objectReference: {fileID: 1712227389} + - target: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8060766842135696868, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 2100000, guid: 35630e38b4e5ffb40b44ec5348b4333f, type: 2} + - target: {fileID: 8379790806586723610, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Name + value: PlayerScreen (2) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} --- !u!1001 &2129333575 PrefabInstance: m_ObjectHideFlags: 0 @@ -24532,6 +32870,162 @@ MeshRenderer: m_CorrespondingSourceObject: {fileID: -7511558181221131132, guid: c9fb1b8a20728b94881a9f11328bf52a, type: 3} m_PrefabInstance: {fileID: 2129333575} m_PrefabAsset: {fileID: 0} +--- !u!114 &2136442879 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ec0b4dd729a12d046982652f834580a2, type: 3} + m_Name: QuizScene_LM0 + m_EditorClassIdentifier: + resolution: 2048 + bitmask: 1 + id: 0 + sortingID: 0 + isImplicit: 1 + area: 5220.649 + totalVertexCount: 0 + vertexCounter: 0 + sceneLodLevel: -1 + autoResolution: 0 + sceneName: + tag: -1 + containsTerrains: 0 + probes: 0 + mode: 1 + renderMode: 1000 + renderDirMode: 1000 + atlasPacker: 1000 + holeFilling: 0 + computeSSS: 0 + sssSamples: 16 + sssDensity: 10 + sssColor: {r: 1, g: 1, b: 1, a: 1} + sssScale: 1 + fakeShadowBias: 0 + transparentSelfShadow: 0 + flipNormal: 0 + parentName: + overridePath: + fixPos3D: 0 + voxelSize: {x: 1, y: 1, z: 1} + passedFilter: 0 +--- !u!1 &2138198203 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2138198204} + - component: {fileID: 2138198206} + - component: {fileID: 2138198205} + m_Layer: 0 + m_Name: Question12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2138198204 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2138198203} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1177781895} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2138198205 +MonoBehaviour: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2138198203} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 2 + serializedProgramAsset: {fileID: 11400000, guid: 1a3121a400bb97a4798c930d280db074, type: 2} + programSource: {fileID: 11400000, guid: d18e451e2b012944899ec95f8a380e52, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!114 &2138198206 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2138198203} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66abc497563d35d46b551af57cb77e18, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 2138198205} + questionTitle: PHILOSOPHERS AND THEIR FIRST NAMES + questionDescription: We're going to show you twelve famous philosophers, with their + ini- tials and dates of birth. We are looking for their usual first names as + repre- sented by these initials. Where we give more than one initial we need + the names represented by both initials. + answerInfo: + - 1. N. CHOMSKY (1928) + - 2. T. AQUINAS (1225) + - 3. F. BACON (1561) + - 4. L. WITTGENSTEIN (1889) + - 5. B. RUSSEL (1872) + - 6. R. DESCARTES (1596) + - 7. J-P. SARTRE (1905) + - 8. B. PASCAL (1623) + - 9. F. NIETZSCHE (1844) + - 10. A. RAND (1905) + - 11. J. BENTHAM (1748) + - 12. K. MARX (1818) + answerText: + - NOAM + - THOMAS + - FRANCIS + - LUDWIG + - BERTRAND + - "REN\xC9" + - JEAN-PAUL + - BLAISE + - FRIEDRICH + - AYN + - JEREMY + - KARL + answerPoints: 11000000210000003e000000090000001d0000001a0000001a0000001a0000001a0000001a0000001a0000001a000000 --- !u!1 &2139680467 GameObject: m_ObjectHideFlags: 0 @@ -24770,13 +33264,13 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3480278762663670689} serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0.39083293, z: -0, w: 0.9204617} - m_LocalPosition: {x: -32.365, y: 0.379, z: -4.86} + m_LocalRotation: {x: -0, y: 0.7015017, z: -0, w: 0.7126678} + m_LocalPosition: {x: -5.03, y: 0.379, z: -22.41} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: -46.013, z: 0} + m_LocalEulerAnglesHint: {x: 0, y: 89.095, z: 0} --- !u!1 &3480278762663670689 GameObject: m_ObjectHideFlags: 0 @@ -24836,7 +33330,7 @@ MonoBehaviour: m_EditorClassIdentifier: launchedFromSDKPipeline: 0 completedSDKPipeline: 0 - blueprintId: + blueprintId: wrld_c51a5443-4671-40bd-91d7-33530542ab2d contentType: 1 assetBundleUnityVersion: fallbackStatus: 0 @@ -25077,6 +33571,63 @@ PrefabInstance: insertIndex: -1 addedObject: {fileID: 705607185} m_SourcePrefab: {fileID: 100100000, guid: 958bb1f4471ffc744b9726403c33780c, type: 3} +--- !u!1001 &6641770535126847926 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1375130216} + m_Modifications: + - target: {fileID: 7457516078518891285, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_Name + value: IndustrialLamp (4) + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalPosition.x + value: -2 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalPosition.y + value: 1.5 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalPosition.z + value: 0.000005954502 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalRotation.w + value: -0.70710367 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalRotation.x + value: -0.000000026692438 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalRotation.y + value: -0.7071099 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalRotation.z + value: -0.000000026692863 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: -269.999 + objectReference: {fileID: 0} + - target: {fileID: 7797344969400887727, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 87958fc281472354fb5c86b6da9b46fa, type: 3} --- !u!114 &7111575897785925491 MonoBehaviour: m_ObjectHideFlags: 0 @@ -25118,35 +33669,47 @@ MonoBehaviour: useAssignedLayers: 0 DynamicPrefabs: [] DynamicMaterials: + - {fileID: 2100000, guid: 85980b42c2579134d951ee2c7bf3c7f6, type: 2} + - {fileID: 2100000, guid: 41c915fe141e9bb46a82cc8f3146d7d7, type: 2} + - {fileID: 2100000, guid: 40ac1972b558b66459a6c2d0d9a2785a, type: 2} - {fileID: 2100000, guid: 1ede16ef59ea59a45abdc8068755a357, type: 2} - {fileID: 2100000, guid: 4d93572e13ca9ce489fe617e57fe7930, type: 2} - {fileID: 2100000, guid: b26dcac062b7da14fb6e50fc6b69aa77, type: 2} - - {fileID: 2100000, guid: 40ac1972b558b66459a6c2d0d9a2785a, type: 2} - - {fileID: 2100000, guid: b9257d637744d15458654516d0135220, type: 2} - {fileID: 2100000, guid: 2aff5bcb44571d145a53916006e5b0fc, type: 2} - - {fileID: 2100000, guid: 7c5c11e2849673c43945d9ded9767ef0, type: 2} - - {fileID: 2100000, guid: eb8a9840e6536604fac38ad9b70e6704, type: 2} - - {fileID: 2100000, guid: ea803d5e2c877f84e8ca6599c9cefb15, type: 2} - - {fileID: 2100000, guid: 41c915fe141e9bb46a82cc8f3146d7d7, type: 2} - - {fileID: 2100000, guid: 14e760d35eccd27408ac66474dcc0fd6, type: 2} - - {fileID: 2100000, guid: 04e6c9ad0e6dc494cb9dfad9e0fbc1dc, type: 2} - - {fileID: 2100000, guid: dd0230fc1fb9dc141a4bf63f069a8c5d, type: 2} - - {fileID: 2100000, guid: 85980b42c2579134d951ee2c7bf3c7f6, type: 2} - - {fileID: 2100000, guid: 51fd67e1cb8077d45bb1d5f36612a67f, type: 2} - - {fileID: 2100000, guid: e5e3830988904fb4e8ddda8116c9f883, type: 2} - - {fileID: 2100000, guid: 53c3b33ab44d5b842ac7c8a095901308, type: 2} - - {fileID: 2100000, guid: 6e335a1ff69fc8445ae83f96fb249293, type: 2} - - {fileID: 2100000, guid: 5e3993f6e7b9d1540b8bb266ccaed08c, type: 2} - - {fileID: 2100000, guid: 00d0f1c2ffc2d1046a472d8e2becbc85, type: 2} - - {fileID: 2100000, guid: dfde93b45f020924693e2e504123dbf6, type: 2} - - {fileID: 2100000, guid: b5b5ef0f1e1cc6e44b1d8cf76075f710, type: 2} - - {fileID: 2100000, guid: 8d933e10488cb884cba7c4b078d7981a, type: 2} + - {fileID: 2100000, guid: b9257d637744d15458654516d0135220, type: 2} + - {fileID: -876546973899608171, guid: 5c44459d12f34ed4fa7e98f2698e61f2, type: 3} - {fileID: 2100000, guid: 82f02b2138cfe1242990f0e41f2a7612, type: 2} - - {fileID: 2100000, guid: 9d4f93f40c09a9b4e9d40d594df2436b, type: 2} - - {fileID: 2100000, guid: d9d7a7e28039eb14f98a63d3f0943c0a, type: 2} + - {fileID: 2100000, guid: 6e335a1ff69fc8445ae83f96fb249293, type: 2} + - {fileID: -876546973899608171, guid: 299117bf4be2de4429aa6f98e0322f4f, type: 3} + - {fileID: 2100000, guid: 5e3993f6e7b9d1540b8bb266ccaed08c, type: 2} + - {fileID: 2100000, guid: 156868ebaeb510e49b9e98d3432f84d8, type: 2} + - {fileID: 2100000, guid: 8d933e10488cb884cba7c4b078d7981a, type: 2} + - {fileID: 2100000, guid: dfde93b45f020924693e2e504123dbf6, type: 2} + - {fileID: 2100000, guid: 04e6c9ad0e6dc494cb9dfad9e0fbc1dc, type: 2} + - {fileID: 2100000, guid: 7c5c11e2849673c43945d9ded9767ef0, type: 2} + - {fileID: 2100000, guid: f06733e6df5d5584b9e5c62de0310e00, type: 2} + - {fileID: 2100000, guid: 00d0f1c2ffc2d1046a472d8e2becbc85, type: 2} + - {fileID: 2100000, guid: 51fd67e1cb8077d45bb1d5f36612a67f, type: 2} - {fileID: 2100000, guid: 3d8b322bfde7cb44badcb0272be09f88, type: 2} + - {fileID: 2100000, guid: d9d7a7e28039eb14f98a63d3f0943c0a, type: 2} + - {fileID: 2100000, guid: 5c816e03b652658498610330ae7c0b66, type: 2} - {fileID: 2100000, guid: 13ade2f118ed20c41b162069a6ffbdc9, type: 2} - {fileID: 2100000, guid: 5042a64b6c663ec468f108fe586bbd3e, type: 2} + - {fileID: 2100000, guid: 6dba0e876b8368347a4fb3f027e9b50e, type: 2} + - {fileID: 2100000, guid: 9fa141bf96518154fb0b91e9f9d2831c, type: 2} + - {fileID: 2100000, guid: eb8a9840e6536604fac38ad9b70e6704, type: 2} + - {fileID: 2100000, guid: ea803d5e2c877f84e8ca6599c9cefb15, type: 2} + - {fileID: 2100000, guid: 14e760d35eccd27408ac66474dcc0fd6, type: 2} + - {fileID: 2100000, guid: dd0230fc1fb9dc141a4bf63f069a8c5d, type: 2} + - {fileID: 2100000, guid: e5e3830988904fb4e8ddda8116c9f883, type: 2} + - {fileID: 2100000, guid: 53c3b33ab44d5b842ac7c8a095901308, type: 2} + - {fileID: 2100000, guid: 0a7f557424e99564aadf76146dbd76f5, type: 2} + - {fileID: 2100000, guid: f45e687b234af6948b76b2622ed33647, type: 2} + - {fileID: 2100000, guid: 79104b7c72559ae419b9b5c0aaf3f627, type: 2} + - {fileID: 2100000, guid: 6c802bc1dd1dee24095056a5f6da8a8a, type: 2} + - {fileID: 2100000, guid: 026a7c368b9c59343bc40afa213abe94, type: 2} + - {fileID: 2100000, guid: b5b5ef0f1e1cc6e44b1d8cf76075f710, type: 2} + - {fileID: 2100000, guid: 9d4f93f40c09a9b4e9d40d594df2436b, type: 2} - {fileID: 2100000, guid: b7be153c528feb64cab96881ac827d25, type: 2} - {fileID: 2100000, guid: ce4127123ba573342a780b21837bdbd4, type: 2} - {fileID: 2100000, guid: f92b4067bd487c648aa84b0580a3f05c, type: 2} @@ -25154,12 +33717,12 @@ MonoBehaviour: - {fileID: 2100000, guid: 37e60f16e5a8fad48bd1749b9fe09a02, type: 2} - {fileID: 6151071871934886045, guid: c7c49b161bf2ede449f099db8f5f5a20, type: 3} - {fileID: 7539852561095912346, guid: c7c49b161bf2ede449f099db8f5f5a20, type: 3} - - {fileID: 2100000, guid: f06733e6df5d5584b9e5c62de0310e00, type: 2} - {fileID: 2100000, guid: b7744b7dccafd7c479db7f7db6f5e317, type: 2} - {fileID: 2100000, guid: 360a40a163e0f3347b5b14b9771d2ab5, type: 2} - {fileID: 2100000, guid: ff8623efa30a1f349a02f4ebab214ae7, type: 2} - {fileID: 2100000, guid: ec1099b4f6a3bbc48a1f538071108a81, type: 2} - {fileID: 2100000, guid: d00efd7b6e40bb84fbca65c86683a186, type: 2} + - {fileID: 2100000, guid: 670c93b6400cecc4d9427ca653ff6a79, type: 2} - {fileID: 2100000, guid: 8e426db1d50e4f848b63563a5ca89a4e, type: 2} LightMapsNear: [] LightMapsFar: [] @@ -25431,10 +33994,511 @@ MonoBehaviour: ID: 66 SerializedTypeNames: - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 988134731} + ID: 67 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 1712227387} + ID: 68 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 1438229301} + ID: 69 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 1658098796} + ID: 70 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 590443805} + ID: 71 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 1663184057} + ID: 72 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 1793540281} + ID: 73 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 2118838063} + ID: 74 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 498870969} + ID: 75 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 718461062} + ID: 76 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 218699819} + ID: 77 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 806040157} + ID: 78 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 685262447} + ID: 79 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 1864825428} + ID: 80 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 1594525686} + ID: 81 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 1594174615} + ID: 82 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 2108277322} + ID: 83 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 2138198203} + ID: 84 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 388563200} + ID: 85 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 884135815} + ID: 86 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 2118094027} + ID: 87 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 1843492938} + ID: 88 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 8066934} + ID: 89 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 992013951} + ID: 91 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 992013945} + ID: 92 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 1026306405} + ID: 93 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 1722439368} + ID: 94 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 213412048} + ID: 95 + SerializedTypeNames: + - VRC.SDK3.Components.VRCPickup + - VRC.SDK3.Components.VRCObjectSync + - gameObject: {fileID: 446262696} + ID: 96 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 446262690} + ID: 97 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 333723323} + ID: 98 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 1582765397} + ID: 99 + SerializedTypeNames: + - VRC.Udon.UdonBehaviour + - gameObject: {fileID: 32952642} + ID: 90 + SerializedTypeNames: + - VRC.SDK3.Components.VRCPickup + - VRC.SDK3.Components.VRCObjectSync portraitCameraPositionOffset: {x: 0, y: 0, z: 0} portraitCameraRotationOffset: {x: 0, y: 1, z: 0, w: -0.00000004371139} PlayerPersistence: [] NavigationAreas: [] +--- !u!1001 &7252627961903531244 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1534685191} + m_Modifications: + - target: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3025554242730436730, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3641202643626132809, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 3641202643626132809, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + - target: {fileID: 3641202643626132809, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: playerScreens.Array.data[0] + value: + objectReference: {fileID: 988134738} + - target: {fileID: 3641202643626132809, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: playerScreens.Array.data[1] + value: + objectReference: {fileID: 1438229307} + - target: {fileID: 3641202643626132809, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: playerScreens.Array.data[2] + value: + objectReference: {fileID: 1658098802} + - target: {fileID: 6812330130097005368, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} + propertyPath: m_Name + value: DeskManager + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ca60051a13afba44fbb404c7a714cf65, type: 3} +--- !u!1001 &7408260600576464514 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1534685191} + m_Modifications: + - target: {fileID: 1831648391729385026, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_PresetInfoIsWorld + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2057165422975922020, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2445452320142851734, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3692739284170986421, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 2100000, guid: 35630e38b4e5ffb40b44ec5348b4333f, type: 2} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.x + value: 600 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 600 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9238798 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.x + value: 0.38268274 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 1.0779 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 45 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3716415793365571919, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4543960930793675888, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4546179431493546672, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4939662888192960213, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: deskManager + value: + objectReference: {fileID: 1712227389} + - target: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: serializationData.Prefab + value: + objectReference: {fileID: 7192476002663072915, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7951387167283517149, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8060766842135696868, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 2100000, guid: 35630e38b4e5ffb40b44ec5348b4333f, type: 2} + - target: {fileID: 8379790806586723610, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} + propertyPath: m_Name + value: PlayerScreen + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 45eee8952e906cc48aeccfacdeaef466, type: 3} +--- !u!1001 &7577744586880749714 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1981248638} + m_Modifications: + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalPosition.x + value: -28 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalPosition.y + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalPosition.z + value: 5.5 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000003774895 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3829907708419741041, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4498322420252528587, guid: acde36bc75391a540a76c589339eeb32, type: 3} + propertyPath: m_Name + value: CorridorWall + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: acde36bc75391a540a76c589339eeb32, type: 3} --- !u!1001 &7609136500483677183 PrefabInstance: m_ObjectHideFlags: 0 @@ -25664,3 +34728,5 @@ SceneRoots: - {fileID: 414844755} - {fileID: 641951134} - {fileID: 50750187} + - {fileID: 77699396} + - {fileID: 688445503} diff --git a/Assets/Quiz/QuizScene/ReflectionProbe-0.exr b/Assets/Quiz/QuizScene/ReflectionProbe-0.exr index 9756cef..7277f21 100644 Binary files a/Assets/Quiz/QuizScene/ReflectionProbe-0.exr and b/Assets/Quiz/QuizScene/ReflectionProbe-0.exr differ diff --git a/Assets/Quiz/QuizScene/ReflectionProbe-1.exr b/Assets/Quiz/QuizScene/ReflectionProbe-1.exr index 3658844..f344ac0 100644 Binary files a/Assets/Quiz/QuizScene/ReflectionProbe-1.exr and b/Assets/Quiz/QuizScene/ReflectionProbe-1.exr differ diff --git a/Assets/Quiz/QuizScene/ReflectionProbe-10.exr b/Assets/Quiz/QuizScene/ReflectionProbe-10.exr index 3fba287..e415aec 100644 Binary files a/Assets/Quiz/QuizScene/ReflectionProbe-10.exr and b/Assets/Quiz/QuizScene/ReflectionProbe-10.exr differ diff --git a/Assets/Quiz/QuizScene/ReflectionProbe-11.exr b/Assets/Quiz/QuizScene/ReflectionProbe-11.exr index 30bca8a..06be547 100644 Binary files a/Assets/Quiz/QuizScene/ReflectionProbe-11.exr and b/Assets/Quiz/QuizScene/ReflectionProbe-11.exr differ diff --git a/Assets/Quiz/QuizScene/ReflectionProbe-12.exr b/Assets/Quiz/QuizScene/ReflectionProbe-12.exr index 6d14c2e..7bd885e 100644 Binary files a/Assets/Quiz/QuizScene/ReflectionProbe-12.exr and b/Assets/Quiz/QuizScene/ReflectionProbe-12.exr differ diff --git a/Assets/Quiz/QuizScene/ReflectionProbe-13.exr b/Assets/Quiz/QuizScene/ReflectionProbe-13.exr index cf1bc1d..955f5c3 100644 Binary files a/Assets/Quiz/QuizScene/ReflectionProbe-13.exr and b/Assets/Quiz/QuizScene/ReflectionProbe-13.exr differ diff --git a/Assets/Quiz/QuizScene/ReflectionProbe-14.exr b/Assets/Quiz/QuizScene/ReflectionProbe-14.exr index 7457a40..b9526e8 100644 Binary files a/Assets/Quiz/QuizScene/ReflectionProbe-14.exr and b/Assets/Quiz/QuizScene/ReflectionProbe-14.exr differ diff --git a/Assets/Quiz/QuizScene/ReflectionProbe-2.exr b/Assets/Quiz/QuizScene/ReflectionProbe-2.exr index b1936e2..82eb64b 100644 Binary files a/Assets/Quiz/QuizScene/ReflectionProbe-2.exr and b/Assets/Quiz/QuizScene/ReflectionProbe-2.exr differ diff --git a/Assets/Quiz/QuizScene/ReflectionProbe-3.exr b/Assets/Quiz/QuizScene/ReflectionProbe-3.exr index 7577525..717a315 100644 Binary files a/Assets/Quiz/QuizScene/ReflectionProbe-3.exr and b/Assets/Quiz/QuizScene/ReflectionProbe-3.exr differ diff --git a/Assets/Quiz/QuizScene/SplineExtrude_Spline 1.asset b/Assets/Quiz/QuizScene/SplineExtrude_Spline 1.asset new file mode 100644 index 0000000..68eb2f0 --- /dev/null +++ b/Assets/Quiz/QuizScene/SplineExtrude_Spline 1.asset @@ -0,0 +1,167 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!43 &4300000 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SplineExtrude_Spline 1 + serializedVersion: 11 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 6360 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 1096 + localAABB: + m_Center: {x: -0.014277935, y: -0.8108885, z: -4.272346} + m_Extent: {x: 3.053774, y: 0.81617975, z: 7.401399} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_BonesAABB: [] + m_VariableBoneCountWeights: + m_Data: + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 0 + m_KeepIndices: 0 + m_IndexFormat: 0 + m_IndexBuffer: 00000100080001000900080001000200090002000a000900020003000a0003000b000a00030004000b0004000c000b00040005000c0005000d000c00050006000d0006000e000d00060007000e0007000f000e00070000000f00000008000f0008000900100009001100100009000a0011000a00120011000a000b0012000b00130012000b000c0013000c00140013000c000d0014000d00150014000d000e0015000e00160015000e000f0016000f00170016000f000800170008001000170010001100180011001900180011001200190012001a001900120013001a0013001b001a00130014001b0014001c001b00140015001c0015001d001c00150016001d0016001e001d00160017001e0017001f001e00170010001f00100018001f0018001900200019002100200019001a0021001a00220021001a001b0022001b00230022001b001c0023001c00240023001c001d0024001d00250024001d001e0025001e00260025001e001f0026001f00270026001f001800270018002000270020002100280021002900280021002200290022002a002900220023002a0023002b002a00230024002b0024002c002b00240025002c0025002d002c00250026002d0026002e002d00260027002e0027002f002e00270020002f00200028002f0028002900300029003100300029002a0031002a00320031002a002b0032002b00330032002b002c0033002c00340033002c002d0034002d00350034002d002e0035002e00360035002e002f0036002f00370036002f002800370028003000370030003100380031003900380031003200390032003a003900320033003a0033003b003a00330034003b0034003c003b00340035003c0035003d003c00350036003d0036003e003d00360037003e0037003f003e00370030003f00300038003f0038003900400039004100400039003a0041003a00420041003a003b0042003b00430042003b003c0043003c00440043003c003d0044003d00450044003d003e0045003e00460045003e003f0046003f00470046003f003800470038004000470040004100480041004900480041004200490042004a004900420043004a0043004b004a00430044004b0044004c004b00440045004c0045004d004c00450046004d0046004e004d00460047004e0047004f004e00470040004f00400048004f0048004900500049005100500049004a0051004a00520051004a004b0052004b00530052004b004c0053004c00540053004c004d0054004d00550054004d004e0055004e00560055004e004f0056004f00570056004f004800570048005000570050005100580051005900580051005200590052005a005900520053005a0053005b005a00530054005b0054005c005b00540055005c0055005d005c00550056005d0056005e005d00560057005e0057005f005e00570050005f00500058005f0058005900600059006100600059005a0061005a00620061005a005b0062005b00630062005b005c0063005c00640063005c005d0064005d00650064005d005e0065005e00660065005e005f0066005f00670066005f005800670058006000670060006100680061006900680061006200690062006a006900620063006a0063006b006a00630064006b0064006c006b00640065006c0065006d006c00650066006d0066006e006d00660067006e0067006f006e00670060006f00600068006f0068006900700069007100700069006a0071006a00720071006a006b0072006b00730072006b006c0073006c00740073006c006d0074006d00750074006d006e0075006e00760075006e006f0076006f00770076006f006800770068007000770070007100780071007900780071007200790072007a007900720073007a0073007b007a00730074007b0074007c007b00740075007c0075007d007c00750076007d0076007e007d00760077007e0077007f007e00770070007f00700078007f0078007900800079008100800079007a0081007a00820081007a007b0082007b00830082007b007c0083007c00840083007c007d0084007d00850084007d007e0085007e00860085007e007f0086007f00870086007f007800870078008000870080008100880081008900880081008200890082008a008900820083008a0083008b008a00830084008b0084008c008b00840085008c0085008d008c00850086008d0086008e008d00860087008e0087008f008e00870080008f00800088008f0088008900900089009100900089008a0091008a00920091008a008b0092008b00930092008b008c0093008c00940093008c008d0094008d00950094008d008e0095008e00960095008e008f0096008f00970096008f008800970088009000970090009100980091009900980091009200990092009a009900920093009a0093009b009a00930094009b0094009c009b00940095009c0095009d009c00950096009d0096009e009d00960097009e0097009f009e00970090009f00900098009f0098009900a0009900a100a00099009a00a1009a00a200a1009a009b00a2009b00a300a2009b009c00a3009c00a400a3009c009d00a4009d00a500a4009d009e00a5009e00a600a5009e009f00a6009f00a700a6009f009800a7009800a000a700a000a100a800a100a900a800a100a200a900a200aa00a900a200a300aa00a300ab00aa00a300a400ab00a400ac00ab00a400a500ac00a500ad00ac00a500a600ad00a600ae00ad00a600a700ae00a700af00ae00a700a000af00a000a800af00a800a900b000a900b100b000a900aa00b100aa00b200b100aa00ab00b200ab00b300b200ab00ac00b300ac00b400b300ac00ad00b400ad00b500b400ad00ae00b500ae00b600b500ae00af00b600af00b700b600af00a800b700a800b000b700b000b100b800b100b900b800b100b200b900b200ba00b900b200b300ba00b300bb00ba00b300b400bb00b400bc00bb00b400b500bc00b500bd00bc00b500b600bd00b600be00bd00b600b700be00b700bf00be00b700b000bf00b000b800bf00b800b900c000b900c100c000b900ba00c100ba00c200c100ba00bb00c200bb00c300c200bb00bc00c300bc00c400c300bc00bd00c400bd00c500c400bd00be00c500be00c600c500be00bf00c600bf00c700c600bf00b800c700b800c000c700c000c100c800c100c900c800c100c200c900c200ca00c900c200c300ca00c300cb00ca00c300c400cb00c400cc00cb00c400c500cc00c500cd00cc00c500c600cd00c600ce00cd00c600c700ce00c700cf00ce00c700c000cf00c000c800cf00c800c900d000c900d100d000c900ca00d100ca00d200d100ca00cb00d200cb00d300d200cb00cc00d300cc00d400d300cc00cd00d400cd00d500d400cd00ce00d500ce00d600d500ce00cf00d600cf00d700d600cf00c800d700c800d000d700d000d100d800d100d900d800d100d200d900d200da00d900d200d300da00d300db00da00d300d400db00d400dc00db00d400d500dc00d500dd00dc00d500d600dd00d600de00dd00d600d700de00d700df00de00d700d000df00d000d800df00d800d900e000d900e100e000d900da00e100da00e200e100da00db00e200db00e300e200db00dc00e300dc00e400e300dc00dd00e400dd00e500e400dd00de00e500de00e600e500de00df00e600df00e700e600df00d800e700d800e000e700e000e100e800e100e900e800e100e200e900e200ea00e900e200e300ea00e300eb00ea00e300e400eb00e400ec00eb00e400e500ec00e500ed00ec00e500e600ed00e600ee00ed00e600e700ee00e700ef00ee00e700e000ef00e000e800ef00e800e900f000e900f100f000e900ea00f100ea00f200f100ea00eb00f200eb00f300f200eb00ec00f300ec00f400f300ec00ed00f400ed00f500f400ed00ee00f500ee00f600f500ee00ef00f600ef00f700f600ef00e800f700e800f000f700f000f100f800f100f900f800f100f200f900f200fa00f900f200f300fa00f300fb00fa00f300f400fb00f400fc00fb00f400f500fc00f500fd00fc00f500f600fd00f600fe00fd00f600f700fe00f700ff00fe00f700f000ff00f000f800ff00f800f9000001f90001010001f900fa000101fa0002010101fa00fb000201fb0003010201fb00fc000301fc0004010301fc00fd000401fd0005010401fd00fe000501fe0006010501fe00ff000601ff0007010601ff00f8000701f8000001070100010101080101010901080101010201090102010a010901020103010a0103010b010a01030104010b0104010c010b01040105010c0105010d010c01050106010d0106010e010d01060107010e0107010f010e01070100010f01000108010f0108010901100109011101100109010a0111010a01120111010a010b0112010b01130112010b010c0113010c01140113010c010d0114010d01150114010d010e0115010e01160115010e010f0116010f01170116010f010801170108011001170110011101180111011901180111011201190112011a011901120113011a0113011b011a01130114011b0114011c011b01140115011c0115011d011c01150116011d0116011e011d01160117011e0117011f011e01170110011f01100118011f0118011901200119012101200119011a0121011a01220121011a011b0122011b01230122011b011c0123011c01240123011c011d0124011d01250124011d011e0125011e01260125011e011f0126011f01270126011f011801270118012001270120012101280121012901280121012201290122012a012901220123012a0123012b012a01230124012b0124012c012b01240125012c0125012d012c01250126012d0126012e012d01260127012e0127012f012e01270120012f01200128012f0128012901300129013101300129012a0131012a01320131012a012b0132012b01330132012b012c0133012c01340133012c012d0134012d01350134012d012e0135012e01360135012e012f0136012f01370136012f012801370128013001370130013101380131013901380131013201390132013a013901320133013a0133013b013a01330134013b0134013c013b01340135013c0135013d013c01350136013d0136013e013d01360137013e0137013f013e01370130013f01300138013f0138013901400139014101400139013a0141013a01420141013a013b0142013b01430142013b013c0143013c01440143013c013d0144013d01450144013d013e0145013e01460145013e013f0146013f01470146013f013801470138014001470140014101480141014901480141014201490142014a014901420143014a0143014b014a01430144014b0144014c014b01440145014c0145014d014c01450146014d0146014e014d01460147014e0147014f014e01470140014f01400148014f0148014901500149015101500149014a0151014a01520151014a014b0152014b01530152014b014c0153014c01540153014c014d0154014d01550154014d014e0155014e01560155014e014f0156014f01570156014f014801570148015001570150015101580151015901580151015201590152015a015901520153015a0153015b015a01530154015b0154015c015b01540155015c0155015d015c01550156015d0156015e015d01560157015e0157015f015e01570150015f01500158015f0158015901600159016101600159015a0161015a01620161015a015b0162015b01630162015b015c0163015c01640163015c015d0164015d01650164015d015e0165015e01660165015e015f0166015f01670166015f015801670158016001670160016101680161016901680161016201690162016a016901620163016a0163016b016a01630164016b0164016c016b01640165016c0165016d016c01650166016d0166016e016d01660167016e0167016f016e01670160016f01600168016f0168016901700169017101700169016a0171016a01720171016a016b0172016b01730172016b016c0173016c01740173016c016d0174016d01750174016d016e0175016e01760175016e016f0176016f01770176016f016801770168017001770170017101780171017901780171017201790172017a017901720173017a0173017b017a01730174017b0174017c017b01740175017c0175017d017c01750176017d0176017e017d01760177017e0177017f017e01770170017f01700178017f0178017901800179018101800179017a0181017a01820181017a017b0182017b01830182017b017c0183017c01840183017c017d0184017d01850184017d017e0185017e01860185017e017f0186017f01870186017f017801870178018001870180018101880181018901880181018201890182018a018901820183018a0183018b018a01830184018b0184018c018b01840185018c0185018d018c01850186018d0186018e018d01860187018e0187018f018e01870180018f01800188018f0188018901900189019101900189018a0191018a01920191018a018b0192018b01930192018b018c0193018c01940193018c018d0194018d01950194018d018e0195018e01960195018e018f0196018f01970196018f018801970188019001970190019101980191019901980191019201990192019a019901920193019a0193019b019a01930194019b0194019c019b01940195019c0195019d019c01950196019d0196019e019d01960197019e0197019f019e01970190019f01900198019f0198019901a0019901a101a00199019a01a1019a01a201a1019a019b01a2019b01a301a2019b019c01a3019c01a401a3019c019d01a4019d01a501a4019d019e01a5019e01a601a5019e019f01a6019f01a701a6019f019801a7019801a001a701a001a101a801a101a901a801a101a201a901a201aa01a901a201a301aa01a301ab01aa01a301a401ab01a401ac01ab01a401a501ac01a501ad01ac01a501a601ad01a601ae01ad01a601a701ae01a701af01ae01a701a001af01a001a801af01a801a901b001a901b101b001a901aa01b101aa01b201b101aa01ab01b201ab01b301b201ab01ac01b301ac01b401b301ac01ad01b401ad01b501b401ad01ae01b501ae01b601b501ae01af01b601af01b701b601af01a801b701a801b001b701b001b101b801b101b901b801b101b201b901b201ba01b901b201b301ba01b301bb01ba01b301b401bb01b401bc01bb01b401b501bc01b501bd01bc01b501b601bd01b601be01bd01b601b701be01b701bf01be01b701b001bf01b001b801bf01b801b901c001b901c101c001b901ba01c101ba01c201c101ba01bb01c201bb01c301c201bb01bc01c301bc01c401c301bc01bd01c401bd01c501c401bd01be01c501be01c601c501be01bf01c601bf01c701c601bf01b801c701b801c001c701c801ca01c901c801cb01ca01c801cc01cb01c801cd01cc01c801ce01cd01c801cf01ce01d001d101d201d001d201d301d001d301d401d001d401d501d001d501d601d001d601d701d801d901e001d901e101e001d901da01e101da01e201e101da01db01e201db01e301e201db01dc01e301dc01e401e301dc01dd01e401dd01e501e401dd01de01e501de01e601e501de01df01e601df01e701e601df01d801e701d801e001e701e001e101e801e101e901e801e101e201e901e201ea01e901e201e301ea01e301eb01ea01e301e401eb01e401ec01eb01e401e501ec01e501ed01ec01e501e601ed01e601ee01ed01e601e701ee01e701ef01ee01e701e001ef01e001e801ef01e801e901f001e901f101f001e901ea01f101ea01f201f101ea01eb01f201eb01f301f201eb01ec01f301ec01f401f301ec01ed01f401ed01f501f401ed01ee01f501ee01f601f501ee01ef01f601ef01f701f601ef01e801f701e801f001f701f001f101f801f101f901f801f101f201f901f201fa01f901f201f301fa01f301fb01fa01f301f401fb01f401fc01fb01f401f501fc01f501fd01fc01f501f601fd01f601fe01fd01f601f701fe01f701ff01fe01f701f001ff01f001f801ff01f801f9010002f90101020002f901fa010102fa0102020102fa01fb010202fb0103020202fb01fc010302fc0104020302fc01fd010402fd0105020402fd01fe010502fe0106020502fe01ff010602ff0107020602ff01f8010702f8010002070200020102080201020902080201020202090202020a020902020203020a0203020b020a02030204020b0204020c020b02040205020c0205020d020c02050206020d0206020e020d02060207020e0207020f020e02070200020f02000208020f0208020902100209021102100209020a0211020a02120211020a020b0212020b02130212020b020c0213020c02140213020c020d0214020d02150214020d020e0215020e02160215020e020f0216020f02170216020f020802170208021002170210021102180211021902180211021202190212021a021902120213021a0213021b021a02130214021b0214021c021b02140215021c0215021d021c02150216021d0216021e021d02160217021e0217021f021e02170210021f02100218021f0218021902200219022102200219021a0221021a02220221021a021b0222021b02230222021b021c0223021c02240223021c021d0224021d02250224021d021e0225021e02260225021e021f0226021f02270226021f021802270218022002270220022102280221022902280221022202290222022a022902220223022a0223022b022a02230224022b0224022c022b02240225022c0225022d022c02250226022d0226022e022d02260227022e0227022f022e02270220022f02200228022f0228022902300229023102300229022a0231022a02320231022a022b0232022b02330232022b022c0233022c02340233022c022d0234022d02350234022d022e0235022e02360235022e022f0236022f02370236022f022802370228023002370230023102380231023902380231023202390232023a023902320233023a0233023b023a02330234023b0234023c023b02340235023c0235023d023c02350236023d0236023e023d02360237023e0237023f023e02370230023f02300238023f0238023902400239024102400239023a0241023a02420241023a023b0242023b02430242023b023c0243023c02440243023c023d0244023d02450244023d023e0245023e02460245023e023f0246023f02470246023f023802470238024002470240024102480241024902480241024202490242024a024902420243024a0243024b024a02430244024b0244024c024b02440245024c0245024d024c02450246024d0246024e024d02460247024e0247024f024e02470240024f02400248024f0248024902500249025102500249024a0251024a02520251024a024b0252024b02530252024b024c0253024c02540253024c024d0254024d02550254024d024e0255024e02560255024e024f0256024f02570256024f024802570248025002570250025102580251025902580251025202590252025a025902520253025a0253025b025a02530254025b0254025c025b02540255025c0255025d025c02550256025d0256025e025d02560257025e0257025f025e02570250025f02500258025f0258025902600259026102600259025a0261025a02620261025a025b0262025b02630262025b025c0263025c02640263025c025d0264025d02650264025d025e0265025e02660265025e025f0266025f02670266025f025802670258026002670260026102680261026902680261026202690262026a026902620263026a0263026b026a02630264026b0264026c026b02640265026c0265026d026c02650266026d0266026e026d02660267026e0267026f026e02670260026f02600268026f0268026902700269027102700269026a0271026a02720271026a026b0272026b02730272026b026c0273026c02740273026c026d0274026d02750274026d026e0275026e02760275026e026f0276026f02770276026f026802770268027002770270027102780271027902780271027202790272027a027902720273027a0273027b027a02730274027b0274027c027b02740275027c0275027d027c02750276027d0276027e027d02760277027e0277027f027e02770270027f02700278027f0278027902800279028102800279027a0281027a02820281027a027b0282027b02830282027b027c0283027c02840283027c027d0284027d02850284027d027e0285027e02860285027e027f0286027f02870286027f027802870278028002870280028102880281028902880281028202890282028a028902820283028a0283028b028a02830284028b0284028c028b02840285028c0285028d028c02850286028d0286028e028d02860287028e0287028f028e02870280028f02800288028f0288028902900289029102900289028a0291028a02920291028a028b0292028b02930292028b028c0293028c02940293028c028d0294028d02950294028d028e0295028e02960295028e028f0296028f02970296028f028802970288029002970290029102980291029902980291029202990292029a029902920293029a0293029b029a02930294029b0294029c029b02940295029c0295029d029c02950296029d0296029e029d02960297029e0297029f029e02970290029f02900298029f0298029902a0029902a102a00299029a02a1029a02a202a1029a029b02a2029b02a302a2029b029c02a3029c02a402a3029c029d02a4029d02a502a4029d029e02a5029e02a602a5029e029f02a6029f02a702a6029f029802a7029802a002a702a002a102a802a102a902a802a102a202a902a202aa02a902a202a302aa02a302ab02aa02a302a402ab02a402ac02ab02a402a502ac02a502ad02ac02a502a602ad02a602ae02ad02a602a702ae02a702af02ae02a702a002af02a002a802af02a802a902b002a902b102b002a902aa02b102aa02b202b102aa02ab02b202ab02b302b202ab02ac02b302ac02b402b302ac02ad02b402ad02b502b402ad02ae02b502ae02b602b502ae02af02b602af02b702b602af02a802b702a802b002b702b002b102b802b102b902b802b102b202b902b202ba02b902b202b302ba02b302bb02ba02b302b402bb02b402bc02bb02b402b502bc02b502bd02bc02b502b602bd02b602be02bd02b602b702be02b702bf02be02b702b002bf02b002b802bf02b802b902c002b902c102c002b902ba02c102ba02c202c102ba02bb02c202bb02c302c202bb02bc02c302bc02c402c302bc02bd02c402bd02c502c402bd02be02c502be02c602c502be02bf02c602bf02c702c602bf02b802c702b802c002c702c002c102c802c102c902c802c102c202c902c202ca02c902c202c302ca02c302cb02ca02c302c402cb02c402cc02cb02c402c502cc02c502cd02cc02c502c602cd02c602ce02cd02c602c702ce02c702cf02ce02c702c002cf02c002c802cf02c802c902d002c902d102d002c902ca02d102ca02d202d102ca02cb02d202cb02d302d202cb02cc02d302cc02d402d302cc02cd02d402cd02d502d402cd02ce02d502ce02d602d502ce02cf02d602cf02d702d602cf02c802d702c802d002d702d002d102d802d102d902d802d102d202d902d202da02d902d202d302da02d302db02da02d302d402db02d402dc02db02d402d502dc02d502dd02dc02d502d602dd02d602de02dd02d602d702de02d702df02de02d702d002df02d002d802df02d802d902e002d902e102e002d902da02e102da02e202e102da02db02e202db02e302e202db02dc02e302dc02e402e302dc02dd02e402dd02e502e402dd02de02e502de02e602e502de02df02e602df02e702e602df02d802e702d802e002e702e002e102e802e102e902e802e102e202e902e202ea02e902e202e302ea02e302eb02ea02e302e402eb02e402ec02eb02e402e502ec02e502ed02ec02e502e602ed02e602ee02ed02e602e702ee02e702ef02ee02e702e002ef02e002e802ef02e802e902f002e902f102f002e902ea02f102ea02f202f102ea02eb02f202eb02f302f202eb02ec02f302ec02f402f302ec02ed02f402ed02f502f402ed02ee02f502ee02f602f502ee02ef02f602ef02f702f602ef02e802f702e802f002f702f002f102f802f102f902f802f102f202f902f202fa02f902f202f302fa02f302fb02fa02f302f402fb02f402fc02fb02f402f502fc02f502fd02fc02f502f602fd02f602fe02fd02f602f702fe02f702ff02fe02f702f002ff02f002f802ff02f802f9020003f90201030003f902fa020103fa0202030103fa02fb020203fb0203030203fb02fc020303fc0204030303fc02fd020403fd0205030403fd02fe020503fe0206030503fe02ff020603ff0207030603ff02f8020703f8020003070300030103080301030903080301030203090302030a030903020303030a0303030b030a03030304030b0304030c030b03040305030c0305030d030c03050306030d0306030e030d03060307030e0307030f030e03070300030f03000308030f0308030903100309031103100309030a0311030a03120311030a030b0312030b03130312030b030c0313030c03140313030c030d0314030d03150314030d030e0315030e03160315030e030f0316030f03170316030f030803170308031003170310031103180311031903180311031203190312031a031903120313031a0313031b031a03130314031b0314031c031b03140315031c0315031d031c03150316031d0316031e031d03160317031e0317031f031e03170310031f03100318031f0318031903200319032103200319031a0321031a03220321031a031b0322031b03230322031b031c0323031c03240323031c031d0324031d03250324031d031e0325031e03260325031e031f0326031f03270326031f031803270318032003270320032103280321032903280321032203290322032a032903220323032a0323032b032a03230324032b0324032c032b03240325032c0325032d032c03250326032d0326032e032d03260327032e0327032f032e03270320032f03200328032f0328032903300329033103300329032a0331032a03320331032a032b0332032b03330332032b032c0333032c03340333032c032d0334032d03350334032d032e0335032e03360335032e032f0336032f03370336032f032803370328033003370330033103380331033903380331033203390332033a033903320333033a0333033b033a03330334033b0334033c033b03340335033c0335033d033c03350336033d0336033e033d03360337033e0337033f033e03370330033f03300338033f0338033903400339034103400339033a0341033a03420341033a033b0342033b03430342033b033c0343033c03440343033c033d0344033d03450344033d033e0345033e03460345033e033f0346033f03470346033f033803470338034003470340034103480341034903480341034203490342034a034903420343034a0343034b034a03430344034b0344034c034b03440345034c0345034d034c03450346034d0346034e034d03460347034e0347034f034e03470340034f03400348034f0348034903500349035103500349034a0351034a03520351034a034b0352034b03530352034b034c0353034c03540353034c034d0354034d03550354034d034e0355034e03560355034e034f0356034f03570356034f034803570348035003570350035103580351035903580351035203590352035a035903520353035a0353035b035a03530354035b0354035c035b03540355035c0355035d035c03550356035d0356035e035d03560357035e0357035f035e03570350035f03500358035f0358035903600359036103600359035a0361035a03620361035a035b0362035b03630362035b035c0363035c03640363035c035d0364035d03650364035d035e0365035e03660365035e035f0366035f03670366035f035803670358036003670360036103680361036903680361036203690362036a036903620363036a0363036b036a03630364036b0364036c036b03640365036c0365036d036c03650366036d0366036e036d03660367036e0367036f036e03670360036f03600368036f0368036903700369037103700369036a0371036a03720371036a036b0372036b03730372036b036c0373036c03740373036c036d0374036d03750374036d036e0375036e03760375036e036f0376036f03770376036f036803770368037003770370037103780371037903780371037203790372037a037903720373037a0373037b037a03730374037b0374037c037b03740375037c0375037d037c03750376037d0376037e037d03760377037e0377037f037e03770370037f03700378037f0378037903800379038103800379037a0381037a03820381037a037b0382037b03830382037b037c0383037c03840383037c037d0384037d03850384037d037e0385037e03860385037e037f0386037f03870386037f037803870378038003870380038103880381038903880381038203890382038a038903820383038a0383038b038a03830384038b0384038c038b03840385038c0385038d038c03850386038d0386038e038d03860387038e0387038f038e03870380038f03800388038f0388038903900389039103900389038a0391038a03920391038a038b0392038b03930392038b038c0393038c03940393038c038d0394038d03950394038d038e0395038e03960395038e038f0396038f03970396038f038803970388039003970390039103980391039903980391039203990392039a039903920393039a0393039b039a03930394039b0394039c039b03940395039c0395039d039c03950396039d0396039e039d03960397039e0397039f039e03970390039f03900398039f0398039903a0039903a103a00399039a03a1039a03a203a1039a039b03a2039b03a303a2039b039c03a3039c03a403a3039c039d03a4039d03a503a4039d039e03a5039e03a603a5039e039f03a6039f03a703a6039f039803a7039803a003a703a003a103a803a103a903a803a103a203a903a203aa03a903a203a303aa03a303ab03aa03a303a403ab03a403ac03ab03a403a503ac03a503ad03ac03a503a603ad03a603ae03ad03a603a703ae03a703af03ae03a703a003af03a003a803af03a803a903b003a903b103b003a903aa03b103aa03b203b103aa03ab03b203ab03b303b203ab03ac03b303ac03b403b303ac03ad03b403ad03b503b403ad03ae03b503ae03b603b503ae03af03b603af03b703b603af03a803b703a803b003b703b003b103b803b103b903b803b103b203b903b203ba03b903b203b303ba03b303bb03ba03b303b403bb03b403bc03bb03b403b503bc03b503bd03bc03b503b603bd03b603be03bd03b603b703be03b703bf03be03b703b003bf03b003b803bf03b803b903c003b903c103c003b903ba03c103ba03c203c103ba03bb03c203bb03c303c203bb03bc03c303bc03c403c303bc03bd03c403bd03c503c403bd03be03c503be03c603c503be03bf03c603bf03c703c603bf03b803c703b803c003c703c003c103c803c103c903c803c103c203c903c203ca03c903c203c303ca03c303cb03ca03c303c403cb03c403cc03cb03c403c503cc03c503cd03cc03c503c603cd03c603ce03cd03c603c703ce03c703cf03ce03c703c003cf03c003c803cf03c803c903d003c903d103d003c903ca03d103ca03d203d103ca03cb03d203cb03d303d203cb03cc03d303cc03d403d303cc03cd03d403cd03d503d403cd03ce03d503ce03d603d503ce03cf03d603cf03d703d603cf03c803d703c803d003d703d003d103d803d103d903d803d103d203d903d203da03d903d203d303da03d303db03da03d303d403db03d403dc03db03d403d503dc03d503dd03dc03d503d603dd03d603de03dd03d603d703de03d703df03de03d703d003df03d003d803df03d803d903e003d903e103e003d903da03e103da03e203e103da03db03e203db03e303e203db03dc03e303dc03e403e303dc03dd03e403dd03e503e403dd03de03e503de03e603e503de03df03e603df03e703e603df03d803e703d803e003e703e003e103e803e103e903e803e103e203e903e203ea03e903e203e303ea03e303eb03ea03e303e403eb03e403ec03eb03e403e503ec03e503ed03ec03e503e603ed03e603ee03ed03e603e703ee03e703ef03ee03e703e003ef03e003e803ef03e803e903f003e903f103f003e903ea03f103ea03f203f103ea03eb03f203eb03f303f203eb03ec03f303ec03f403f303ec03ed03f403ed03f503f403ed03ee03f503ee03f603f503ee03ef03f603ef03f703f603ef03e803f703e803f003f703f003f103f803f103f903f803f103f203f903f203fa03f903f203f303fa03f303fb03fa03f303f403fb03f403fc03fb03f403f503fc03f503fd03fc03f503f603fd03f603fe03fd03f603f703fe03f703ff03fe03f703f003ff03f003f803ff03f803f9030004f90301040004f903fa030104fa0302040104fa03fb030204fb0303040204fb03fc030304fc0304040304fc03fd030404fd0305040404fd03fe030504fe0306040504fe03ff030604ff0307040604ff03f8030704f8030004070400040104080401040904080401040204090402040a040904020403040a0403040b040a04030404040b0404040c040b04040405040c0405040d040c04050406040d0406040e040d04060407040e0407040f040e04070400040f04000408040f0408040904100409041104100409040a0411040a04120411040a040b0412040b04130412040b040c0413040c04140413040c040d0414040d04150414040d040e0415040e04160415040e040f0416040f04170416040f040804170408041004170410041104180411041904180411041204190412041a041904120413041a0413041b041a04130414041b0414041c041b04140415041c0415041d041c04150416041d0416041e041d04160417041e0417041f041e04170410041f04100418041f0418041904200419042104200419041a0421041a04220421041a041b0422041b04230422041b041c0423041c04240423041c041d0424041d04250424041d041e0425041e04260425041e041f0426041f04270426041f041804270418042004270420042104280421042904280421042204290422042a042904220423042a0423042b042a04230424042b0424042c042b04240425042c0425042d042c04250426042d0426042e042d04260427042e0427042f042e04270420042f04200428042f0428042904300429043104300429042a0431042a04320431042a042b0432042b04330432042b042c0433042c04340433042c042d0434042d04350434042d042e0435042e04360435042e042f0436042f04370436042f042804370428043004370438043a04390438043b043a0438043c043b0438043d043c0438043e043d0438043f043e04400441044204400442044304400443044404400444044504400445044604400446044704 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 1096 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 12 + format: 0 + dimension: 3 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 24 + format: 0 + dimension: 2 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 35072 + _typelessdata: 1d38d6bd582d01ba88c5533de92e36bfb26a87bc50cc33bf00000000000000005611c9bdccf93d3bcddf493d98518ebd582fa53e23a871bf0000803e000000002415bbbdce31903b56a0563d3f061d3f0412f23eccf421bf0000003f00000000c074b4bde44b4d3bd28e723d26db6f3f7f27b13ecddb493d0000403f00000000e311b9bdc00a2ab94ca7863de92e363f996a873c50cc333f0000803f00000000aa38c6bdd0e568bb2a9a8b3d95518e3d572fa5be23a8713f0000403f00000000dc34d4bdcea7a5bbe539853d3f061dbf0412f2beccf4213f0000003f0000000040d5dabde23778bb4d856e3d26db6fbf7d27b1be31dc49bd0000803e000000008f8435bdbca465be0e9a41bdeaf623bf9907363ec8423fbf000000005ff2813e378018bd372763beb80c48bdc7218b3dca87d73e738f67bf0000803e5ff2813e523afabc1e3063be5fcb38bd4d8f3c3fa6cad53e033708bf0000003f5ff2813ebfcce6bc3bba65beb4c51cbdb745793ffda12d3e9bb11b3e0000403f5ff2813e950c01bdba4869bef66504bdeaf6233f990736bec8423f3f0000803f5ff2813eee101ebd3fc66bbe98e6fbbcf9218bbdca87d7be738f673f0000403f5ff2813efb7339bd58bd6bbea5340dbd4d8f3cbfa6cad5be0337083f0000003f5ff2813ec42a43bd3b3369be503a29bdb74579bfffa12dbe9db11bbe0000803e5ff2813e7c585a3ca198e6bebeb817bea1a60fbfd3b8503e355f4dbf000000005ff2013fbca2a83c956ee5be2a9718bea8ae283e14c9dc3eba1763bf0000803e5ff2013f9031dc3ca08fe5be612314bef9494b3fc3e0cf3e3092e7be0000003f5ff2013f07a5e93c68e8e6be0ff90cbed452753f5765123e93637d3e0000403f5ff2013f001cc93cf5aee8beba4a07bea1a60f3fd3b850be355f4d3f0000803f5ff2013f81a58d3c01d9e9be4e6c06beb4ae28be14c9dcbeba17633f0000403f5ff2013f5d2d343cf6b7e9be17e00abef8494bbfc5e0cfbe3292e73e0000003f5ff2013f6e46193c2e5fe8be690a12bed45275bf576512be93637dbe0000803e5ff2013f8a1d9e3db41f2dbf7a547bbef10cf7be74b7573e02a559bf000000008eeb423ff017ad3d278c2cbf3e7b7bbefbcd7e3ecb21df3e0d6e5dbf0000803e8eeb423f1e16b93de99f2cbfc47176bed39c553f5eb2cf3e7d02bfbe0000003f8eeb423f9d11bb3d664f2dbf692b6fbe79646e3f51310d3e57bbac3e0000403f8eeb423f22e1b13dd2332ebf1eeb69bef10cf73e74b757be02a5593f0000803f8eeb423fbce6a23d5fc72ebf5bc469be11ce7ebede21dfbe076e5d3f0000403f8eeb423f8ee8963d9db32ebfd4cd6ebed39c55bf5eb2cfbe7d02bf3e0000003f8eeb423f0fed943d20042ebf2f1476be79646ebf51310dbe57bbacbe0000803e8eeb423f06781b3e89d566bff762acbe47f1cabe65064f3ef84265bf000000005ff2813f38e4223e683966bf4f14acbe7030a83efe7ce13e32e655bf0000803e5ff2813ff957283e5a4666bf1f44a9be1c665c3ffa5fd73eae7992be0000003f5ff2813faea1283ec9f466bf4798a5beb098633f66321e3eaaa6dc3e0000403f5ff2813f2896233e87de67bf5337a3be47f1ca3e65064fbef842653f0000803f5ff2813ff6291c3ea87a68bffb85a3be7030a8befe7ce1be32e6553f0000403f5ff2813f35b6163eb66d68bf2b56a6be1c665cbffa5fd7beae79923e0000003f5ff2813f816c163e47bf67bf0302aabeab9863bf73321ebebca6dcbe0000803e5ff2813f421b7a3e6df88fbfb694d5be5c0d94bedee92d3e012d71bf00000000f76ea23f289e803e359c8fbfced2d4be4767d03e570ce73e9e4d4bbf0000803ef76ea23f28f6823e9c968fbf25afd1beb6635d3f88cbef3ece5a39be0000003ff76ea23f2ab6823ee9ea8fbf8100cebef7e3503f4326583e44c5093f0000403ff76ea23fa803803ebb6790bf12efcbbe5c0d943edee92dbe012d713f0000803ff76ea23f43e6783ef3c390bffab0ccbe1d67d0be5f0ce7bea54d4b3f0000403ff76ea23f4236743e8cc990bfa3d4cfbeb6635dbf88cbefbece5a393e0000003ff76ea23f3fb6743e3f7590bf4783d3beefe350bf542658be4fc509bf0000803ef76ea23fea5bbe3e9152abbf2683f2be1f61e2bd3f9e9e3d53a87dbf000000008eebc23fb25ec13e01cbaabf4e2bf1bee47df43e9d78fb3e2d803abf0000803e8eebc23fd6f2c23eb8a1aabf1ba4edbe0a2e493f62fd1d3ff28221bd0000003f8eebc23f982bc23ee5eeaabfa1fee9bedc43223f5564c33eaa392c3f0000403f8eebc23fae7dbf3e5385abbfb25de8be1f61e23d3f9e9ebd53a87d3f0000803f8eebc23fe67abc3ee30cacbf8ab5e9bee47df4be9d78fbbe2d803a3f0000403f8eebc23fc2e6ba3e2c36acbfbd3cedbe0a2e49bf62fd1dbff282213d0000003f8eebc23f00aebb3effe8abbf37e2f0bedc4322bf5564c3beaa392cbf0000803e8eebc23f999c123fa5b1bebffe56edbed710213e09854fbd017b7cbf000000002668e33f7628133f42d5bdbf6ad2ebbe2dcdbd3e21351f3f299630bf0000803e2668e33f0226133f3e70bdbf363ce8be3fe2bb3eea1f6e3f5206303c0000003f2668e33fae96123fc7bdbdbf42aee4be7dd1173ef78c313f9879343f0000403f2668e33f6fce113f7190bebf983de3bed71021be09854f3d017b7c3f0000803f2668e33f9242113fd46cbfbf2dc2e4be47cdbdbe36351fbf0f96303f0000403f2668e33f0645113fd8d1bfbf6058e8be3fe2bbbeea1f6ebf520630bc0000003f2668e33f5ad4113f4f84bfbf54e6ebbe7dd117bef78c31bf987934bf0000803e2668e33fc94f503f1216c6bfc65dd0be298a863e73096ebd1d8e76bf000000005ff20140585d503f102bc5bf7c00cfbec721913ed2b8283f8e5532bf0000803e5ff2014015fe4f3f91bec4bf558ccbbef96a0d3ee97b7d3fcec2b4bc0000003f5ff20140cd694f3f2310c5bf3c07c8bee88ab4bd4ac23d3ff0582a3f0000403f5ff201405df74e3ffcefc5bf0c81c6be298a86be73096e3d1d8e763f0000803f5ff20140cee94e3ffedac6bf56dec7bec72191bed2b828bf8e55323f0000403f5ff2014011494f3f7d47c7bf7d52cbbef96a0dbee97b7dbfcec2b43c0000003f5ff2014059dd4f3febf5c6bf96d7cebee88ab43d4ac23dbff0582abf0000803e5ff20140d218873f3b52c8bf637aa8befef1ae3e905644bd674770bf00000000ab301240eb00873f4166c7bf6134a7bef798893edd152c3fe49a30bf0000803eab3012406eb5863f4ffbc6bfb1dca3be5f2d1d3dc2a27f3fe0a817bd0000003fab3012409362863f0b50c7bf9468a0be2aa15bbe3c703d3f3933233f0000403fab301240e438863fd132c8bfefdd9ebefef1aebe9056443d6747703f0000803fab301240cb50863fcb1ec9bff123a0bef79889bedd152cbfe49a303f0000403fab301240489c863fbd89c9bfa17ba3be5f2d1dbdc2a27fbfe0a8173d0000003fab30124023ef863f0135c9bfbeefa6be2aa15b3e3c703dbf393323bf0000803eab301240c132a53fb420c8bf508f6cbe2726dd3e8e5801bd17bf66bf00000000f76e2240bd06a53f2c36c7bff5256abefa5f983ee8242f3f4b752abf0000803ef76e224098a1a43ff6cec6bf1fbe63bee23f35bcbec67f3f451325bd0000003ff76e2240933ea43f8927c7bf66185dbea861a0bee2933a3fb4dd1b3f0000403ff76e2240af17a43f020cc8bfa2195abe2726ddbe8e58013d17bf663f0000803ff76e2240b343a43f8bf6c8bffd825cbea95f98be53252fbff1742a3f0000403ff76e2240d8a8a43fc05dc9bfd2ea62bee13f353cbdc67fbfd414253d0000003ff76e2240dd0ba53f2d05c9bf8c9069bea861a03ee2933abfb4dd1bbf0000803ef76e2240bb83c13f82edc6bf7de0d4bd66b6143f134c01bcc55d50bf0000000042ad32404546c13f3405c6bfba63d0bd6064c93edd77333f394618bf0000803e42ad32404ebdc03f77a3c5bf26c4c4bd3edbc9bcb6d37f3f256ddfbc0000003f42ad32401239c03f8c01c6bfcfd0b8bda63bdbbe2d53363f7b660e3f0000403f42ad32400707c03f56e8c6bfd389b3bd66b614bf134c013cc55d503f0000803f42ad32407d44c03fa4d0c7bf9606b8bd6064c9bedd7733bf3946183f0000403f42ad324074cdc03f6132c8bf2aa6c3bd3edbc93cb6d37fbf256ddf3c0000003f42ad3240b051c13f4cd4c7bf8199cfbda63bdb3e2d5336bf7b660ebf0000803e42ad32401c7bd73f1dfac6bf30a0b03da8386e3f3be0c43bd772bbbe000000008eeb4240a227d73fcf13c6bf35fcb33d37012d3fd976353f73ec4ebe0000803e8eeb42406f52d63f91b5c5bfd6c4b93d3127ce3c5d177f3f8386a43d0000003f8eeb42406878d53f9816c6bfbd96be3d63e423bfcf49333f49a1a13e0000403f8eeb42404419d53f0dfec6bf1e9fbf3da8386ebf3be0c4bbd772bb3e0000803f8eeb4240be6cd53f5be4c7bf1943bc3d37012dbfd97635bf73ec4e3e0000403f8eeb4240f141d63f9942c8bf787ab63d3127cebc5d177fbf8386a4bd0000003f8eeb4240f81bd73f92e1c7bf91a8b13d63e4233fcf4933bf49a1a1be0000803e8eeb4240d80fd73f0b73c9bf36c8ae3e141a793fc8d5e7bc47536a3e00000000da295340d5b5d63f1689c8bf46a9ae3e3bc8323ffa882f3f4f28523e0000803eda295340c5d5d53fbe22c8bfc3ecad3ee2dd6e3c587d7f3f80867b3d0000003fda295340e9f2d43ff87bc8bf1a01ad3e55802dbf14c8393fa674f2bd0000403fda2953402492d43f7f60c9bf5670ac3e141a79bfc8d5e73c47536abe0000803fda29534027ecd43f744acabf468fac3e3bc832bffa882fbf4f2852be0000403fda29534037ccd53fccb0cabfc94bad3ee2dd6ebc587d7fbf80867bbd0000003fda29534013afd63f9257cabf7237ae3e55802d3f14c839bfa674f23d0000803eda295340727fcc3fcdfdcabfb528153f822c6b3fd983cbbc19e1c93e0000000026686340d328cc3ffa13cabffcf2143f3f80273f7c50303f82e89f3e0000803e266863409c54cb3f5baec9bf5d45143ff4bfda3be2b47f3ff623423d0000003f266863401d7fca3f7708cabf8c85133fe01525bf3c4f393fcc2d7bbe0000403f266863406625ca3f85edcabfe523133f822c6bbfd983cb3c19e1c9be0000803f26686340057cca3f58d7cbbf9e59133f3f8027bf7c5030bf82e89fbe0000403f266863403c50cb3ff73cccbf3d07143ff4bfdabbe2b47fbff62342bd0000003f26686340bb25cc3fdbe2cbbf0ec7143fe015253f3c4f39bfcc2d7b3e0000803e2668634054e6bd3f4c2cccbf797d4f3fc16e5e3fdb0595bc6148fd3e0000000071a67340d192bd3f0343cbbff72f4f3fba301d3ff698313f30bbc03e0000803e71a6734071c9bc3fe3decabff3514e3fd17f09ba81d17f3f4c3f1a3d0000003f71a673402b00bc3f953acbbf79654d3ffc601dbfb12e383f4b77a5be0000403f71a67340e6acbb3f6020ccbf11f54c3fc16e5ebfdb05953c6148fdbe0000803f71a673406900bc3fa909cdbf93424d3fba301dbff69831bf30bbc0be0000403f71a67340c9c9bc3fc96dcdbf97204e3fd17f093a81d17fbf4c3f1abd0000003f71a673400f93bd3f1712cdbf110d4f3ffc601d3fb12e38bf4b77a53e0000803e71a673409d37ac3f0c25cdbfb226833f47894e3fdd952fbc823b173f000000005ff2814066e8ab3f6b3cccbfa3f4823f83a6103f7dff323fe13fe03e0000803e5ff28140ba2cab3f00dacbbf816e823f22f4fbbb2be37f3f20abea3c0000003f5ff281408772aa3f7337ccbfe0e2813fc76f13bf39e1363fea80cbbe0000403f5ff28140e126aa3f061ecdbf8aa3813f47894ebfdd952f3c823b17bf0000803f5ff281401876aa3fa706cebf99d5813f83a610bf7dff32bfe13fe0be0000403f5ff28140c431ab3f1269cebfbb5b823f22f4fb3b2be37fbf20abeabc0000003f5ff28140f7ebab3f9f0bcebf5ce7823fc76f133f39e136bfea80cb3e0000803e5ff281402fbb963f43f5cdbf17d09b3f4fe72c3f08584abbefc83c3f0000000085118a40f176963f530dcdbf6b8d9b3fc82def3e3a69343f96b2083f0000803e85118a4008d9953fa8acccbf3fe49a3fdacb71bc98ee7f3fe904913c0000003f85118a40f43d953fe40bcdbfae379a3fa2ddf9bee187353f214902bf0000403f85118a408d00953f3df3cdbfcdec993f4fe72cbf08584a3befc83cbf0000803f85118a40cb44953f2ddbcebf7a2f9a3f2b2eefbe856934bf06b208bf0000403f85118a40b4e2953fd83bcfbfa5d89a3fdacb713c98ee7fbfe90491bc0000003f85118a40c87d963f9cdccebf36859b3fa2ddf93ee18735bf2149023f0000803e85118a404bfc713f8378cebf2e7da83fec7624bebb2f59bbd8ac7c3f00000000ab309240201d723f7e90cdbf641fa83f7b54e2bd9b6a343f3b67333f0000803eab3092406268723fc02fcdbf153ba73fd5998d3bdafe7f3fd8cf843b0000003fab309240fcb1723ff58ecdbf0056a63fe8daee3dc69d353fceee31bf0000403fab309240cfce723f5776cebf54f6a53fec76243ebb2f593bd8ac7cbf0000803fab309240faad723f5c5ecfbf1e54a63f7b54e23d9b6a34bf3b6733bf0000403fab309240b862723f1abfcfbf6d38a73fd5998dbbdafe7fbfd8cf84bb0000003fab3092401e19723fe55fcfbf821da83fe8daeebdc69d35bfceee313f0000803eab309240434a363fa6d9cdbf46e59a3f656f0dbff92f0ebbbe61553f00000000d04f9a40e8bd363fd1f1ccbf0f999a3ffb85c0be4290343fd9d6193f0000803ed04f9a40e7c1373f5f91ccbf7fd9993f7594a93c37e97f3ff7c9853c0000003fd04f9a40f4bd383fcff0ccbfcc16993f5d83cf3eb859353f7bed13bf0000403fd04f9a40691e393f3ad8cdbf04c3983f656f0d3ff92f0e3bbe6155bf0000803fd04f9a40c4aa383f0fc0cebf3b0f993ffb85c03e429034bfd9d619bf0000403fd04f9a40c5a6373f8120cfbfcbce993f7594a9bc37e97fbff7c985bc0000003fd04f9a40b8aa363f11c1cebf7e919a3f5d83cfbeb85935bf7bed133f0000803ed04f9a40c809033fd6eaccbf18a4863fd3d32cbf11c816bbf5da3c3f00000000f76ea240f594033f0403ccbf6762863f30ececbe2985343f8188093f0000803ef76ea240c8d1043f8da2cbbf96b9853fd987a93c05e27f3fd6a9b43c0000003ff76ea240a806063ff301ccbf8a0c853fb5e7fb3eb65a353f2b8c01bf0000403ff76ea240a87e063f54e9ccbfa0c0843fd3d32c3f11c8163bf5da3cbf0000803ff76ea2407bf3053f26d1cdbf5102853f30ecec3e298534bf818809bf0000403ff76ea240a8b6043f9d31cebf22ab853fd987a9bc05e27fbfd6a9b4bc0000003ff76ea240c881033f37d2cdbf2e58863fb5e7fbbeb65a35bf2b8c013f0000803ef76ea240fcddab3e5befcbbf421b5e3f623545bf07182bbb223b233f000000001c8eaa406315ad3e8107cbbf3aac5d3f506308bf5377343f1bb8ef3e0000803e1c8eaa40d9e5af3ef7a6cabf74895c3ff3798a3cefe27f3f6dd4c83c0000003f1c8eaa4054a9b23e4b06cbbf445d5b3fcc810e3f5b69353f28f8ddbe0000403f1c8eaa4066c1b33ea5edcbbf84d75a3f6235453f07182b3b223b23bf0000803f1c8eaa40ff89b23e7fd5ccbf8c465b3f5063083f537734bf1bb8efbe0000403f1c8eaa4089b9af3e0936cdbf52695c3ff3798abcefe27fbf6dd4c8bc0000003f1c8eaa400ef6ac3eb5d6ccbf82955d3fcc810ebf5b6935bf28f8dd3e0000803e1c8eaa401158473efb0fcbbf7a77273f1ae068bf0c4083ba5ca6d43e0000000042adb24035214a3e3c28cabfeb30273fb63b23bfd4cb343fc4869d3e0000803e42adb2407dbd503e0cc8c9bf3f74263f04e2013c20f17f3f0503a23c0000003f42adb240994d573ec527cabffbaf253f6d1a263fbc28353f13358fbe0000403f42adb24059f9593e530fcbbf1857253f1ae0683f0c40833a5ca6d4be0000803f42adb2403530573e12f7cbbfa79d253fb63b233fd4cb34bfc4869dbe0000403f42adb240ed93503e4257ccbf535a263f04e201bc20f17fbf0503a2bc0000003f42adb240d1034a3e89f7cbbf971e273f6d1a26bfbc2835bf13358f3e0000803e42adb240f66d573e591dcbbfb496cf3e77b754bfffaf4cbbb16e0ebf0000000069ccba400c005a3e6935cabf1858d03e467314bfc166343f4252d1be0000803e69ccba409c0c603ebed4c9bf6353d23e9eaf313c93ec7f3f9e90b2bc0000003f69ccba408408663ef733cabf6a5fd43e5260183fc887353f9a89c13e0000403f69ccba406672683e4d1bcbbf3649d53e77b7543fffaf4c3bb16e0e3f0000803f69ccba4050e0653e3d03ccbfd287d43e4673143fc16634bf4252d13e0000403f69ccba40c0d35f3ee863ccbf878cd23e9eaf31bc93ec7fbf9e90b23c0000003f69ccba40d8d7593eaf04ccbf8080d03e526018bfc88735bf9a89c1be0000803e69ccba40157ac83e0a13ccbfa510663e14241cbf036ccfbbecdc4abf000000008eebc240fa77c93ed92acbbfe443683eb31ad5be72c7333fc4db13bf0000803e8eebc24072b5cb3e75c9cabf0fee6d3e0f83ae3ca6dd7f3ff1b1c7bc0000003f8eebc2408fe2cd3eea27cbbfa9bd733e5187e43eff11363f5c080b3f0000403f8eebc240f7b8ce3ee40eccbf474b763e14241c3f036ccf3becdc4a3f0000803f8eebc24012bbcd3e15f7ccbf0818743eb31ad53e72c733bfc4db133f0000403f8eebc2409a7dcb3e7958cdbfdd6d6e3e0f83aebca6dd7fbff1b1c73c0000003f8eebc2407d50c93e04faccbf439e683e5187e4beff1136bf5c080bbf0000803e8eebc24071991a3f3019cdbf9d92ab3d610101bffc23a9bb731d5dbf00000000b40acb403c051b3f1931ccbf2f77b03d0eccadbe8dff333f38f41fbf0000803eb40acb4058f31b3ff9cfcbbfb6dabc3dbb9ac33c56e07f3fb707a3bc0000003fb40acb4049d81c3fb52eccbf5c7bc93de115bf3ebadd353fc9bf183f0000403fb40acb40f32d1d3fce15cdbf7df3ce3d6101013ffc23a93b731d5d3f0000803fb40acb4028c21c3fe5fdcdbfeb0eca3d0eccad3e8dff33bf38f41f3f0000403fb40acb400cd41b3f055fcebf64abbd3dbb9ac3bc56e07fbfb707a33c0000003fb40acb401bef1a3f4900cebfbd0ab13ddb15bfbeb5dd35bfd1bf18bf0000803eb40acb406b5f543f3c03cebf801e0cbd7674d8bef80f24bb1fff67bf00000000da29d3407aba543f5c1bcdbfae9d01bda85091bec982343fe55926bf0000803eda29d3407e82553fd6baccbfe30acfbc8e25af3cb5eb7f3fc9a350bc0000003fda29d3404d42563f331acdbffb3d9abcdfcba03ec16a353f95bd213f0000403fda29d3408b89563f9801cebfa7c283bc7374d83ef60f243b1fff673f0000803fda29d3407c2e563f78e9cebf4ec498bcab50913ecc8234bfe159263f0000403fda29d3407866553ffe49cfbfc5f4ccbc8e25afbcb5eb7fbfc9a3503c0000003fda29d340a9a6543fa1eacebfd7e000bdddcba0bebf6a35bf96bd21bf0000803eda29d340066f883fff90cebfdd1704bead07a2befd5f38bab5d772bf000000000049db40238f883f3ca9cdbf8e4501bee8b45fbe60e2343f214e2cbf0000803e0049db402fd9883f1949cdbf5fd3f4bd3318f63bcdfd7f3f2d4855bb0000003f0049db40ca21893fe8a8cdbfa311e7bd6b956a3e1a24353f9d202b3f0000403f0049db406c3e893f8990cebfe454e1bdad07a23efd5f383ab5d7723f0000803f0049db404f1e893f4c78cfbf82f9e6bde8b45f3e60e234bf214e2c3f0000403f0049db4043d4883f6fd8cfbf3fb1f4bd3318f6bbcdfd7fbf2d48553b0000003f0049db40a88b883fa078cfbf7e3901be64956abe142435bfa4202bbf0000803e0049db4013e8a73f63aacebf7fbb48bea5ba51be0650dcba9b927abf000000002668e34077fba73f85c2cdbfb7ce45bef42115be12b7343fd87231bf0000803e2668e340d12aa83f2862cdbf83b93ebef86f94bae2ff7f3ff6f1c1ba0000003f2668e340625aa83fbec1cdbf09a237be377c133eb552353fe6e9303f0000403f2668e3404d6ea83f49a9cebfc5af34bea5ba513e0650dc3a9b927a3f0000803f2668e340e95aa83f2791cfbf8e9c37befe21153e1eb734bfcb72313f0000403f2668e3408f2ba83f84f1cfbfc1b13ebef86f943ae2ff7fbff6f1c13a0000003f2668e340fefba73fee91cfbf3bc945be377c13beb55235bfe6e930bf0000803e2668e340e65fc83f1691cebf9cff67be01b491bb0250dcba43ff7fbf000000004c87eb403f5fc83f39a9cdbfe30265be19f0d2bb95b6343f455135bf0000803e4c87eb40d55fc83fdc48cdbf8bc65dbe075898bb33ff7f3f0a30d9ba0000003f4c87eb404f61c83f72a8cdbfa78756be0e0016b90952353fbdb7343f0000403f4c87eb40d062c83ffc8fcebfca8453be01b4913b0250dc3a43ff7f3f0000803f4c87eb407763c83fd977cfbf838156be19f0d23b95b634bf4551353f0000403f4c87eb40e162c83f36d8cfbfdbbd5dbe0758983b33ff7fbf0a30d93a0000003f4c87eb406761c83fa078cfbfbffc64be0e001639095235bfbdb734bf0000803e4c87eb40b595e73f3371cebf90531cbe00623d3ff8ff47b711402cbf0000000071a6f340ce4ee73f7e89cdbf1b4e1abe87fd053f9404353f466ff3be0000803e71a6f34070a3e63f8429cdbf896e15be0b00e139fdff7f3f0cb8ec390000003f71a6f340fcf7e53f7d89cdbfa88f10be71d605bf5305353f04c3f33e0000403f71a6f340e3b0e53f3171cebfe08b0ebe00623dbff8ff473711402c3f0000803f71a6f340caf7e53fe658cfbf559110be87fd05bf940435bf466ff33e0000403f71a6f34028a3e63fe0b8cfbfe77015be0b00e1b9fdff7fbf0cb8ecb90000003f71a6f3409c4ee73fe758cfbfc84f1abe71d6053f530535bf04c3f3be0000803e71a6f340f534f23fcb97cebfeee4b83d33fc7d3fe5d76fbbaf2a00be0000000097c5fb40bdd6f13fbeafcdbfd3b7b93d9c60343f5c5a343f14f4adbd0000803e97c5fb4046f1f03fec4ecdbf948fbb3d19cc8d3b8efe7f3fdd35a53b0000003f97c5fb40fa0af03f0caecdbfda57bd3ddecf32bf76ad353fcb8ebc3d0000403f97c5fb40c1aaef3f6595cebf5c05be3d33fc7dbfe5d76f3baf2a003e0000803f97c5fb40f908f03f727dcfbf7732bd3d9c6034bf5c5a34bf14f4ad3d0000403f97c5fb4070eef03f44decfbfb65abb3d19cc8dbb8efe7fbfdd35a5bb0000003f97c5fb40bcd4f13f247fcfbf7092b93ddecf323f76ad35bfcb8ebcbd0000803e97c5fb40f05af33f14c2cebf79cbb03efdc77f3f36b0b3bb92cf273d000000005ff2014147fcf23fdbd9cdbfc6bfb03ed4d3353f5305343f1f40033d0000803e5ff201414815f23f9c78cdbf799bb03e0e38ae3b75fe7f3f0c7b8e3b0000003f5ff20141432df13f4fd7cdbfd573b03e19e733bf2802363fd021d4bc0000403f5ff2014124ccf03f7cbecebf1360b03efdc77fbf36b0b33b92cf27bd0000803f5ff20141cd2af13fb6a6cfbfc66bb03e70d335bfb80534bfd73f03bd0000403f5ff20141cc11f23ff407d0bf1390b03e0e38aebb75fe7fbf0c7b8ebb0000003f5ff20141d1f9f23f41a9cfbfb7b7b03e19e7333f280236bfd021d43c0000803e5ff201416ac3ef3f28d7cebf304e193ff5a97b3f28e0ddbb118b3b3e00000000f20106419866ef3fcfeecdbfbf2b193ffa25333f0aca333f91ba053e0000803ef20106417383ee3f448dcdbf2bd7183f1968d83b7efe7f3f1890c93a0000003ff2010641099fed3fabebcdbf0082183ff0c130bfd83d363f048003be0000403ff2010641283fed3fb8d2cebf225e183ff5a97bbf28e0dd3b118b3bbe0000803ff2010641fa9bed3f11bbcfbf9380183ffa2533bf0aca33bf91ba05be0000403ff20106411f7fee3f9c1cd0bf27d5183f1968d8bb7efe7fbf1890c9ba0000003ff20106418963ef3f35becfbf522a193ff0c1303fd83d36bf0480033e0000803ef2010641c43ce63f39b5cebf7601583f3626663f3a74d6bbdd2ee03e0000000085110a41f4e8e53fe9cccdbf35aa573f71ab243f91d1333fd2039c3e0000803e85110a41ab19e53f6d6bcdbff9dd563f2a9c2e3cb5fa7f3f36c2e2bb0000003f85110a415648e43fe0c9cdbf6514563feccf20bf9330363f9c06a1be0000403f85110a4196efe33fefb0cebf8ec3553f362666bf3a74d63bdd2ee0be0000803f85110a416643e43f3f99cfbfcf1a563f71ab24bf91d133bfd2039cbe0000403f85110a41af12e53fbbfacfbf0be7563f2a9c2ebcb5fa7fbf36c2e23b0000003f85110a4104e4e53f489ccfbf9fb0573feccf203f933036bf9c06a13e0000803e85110a413a85cc3f35b8cdbf63957d3f9777803d2026b13c966f7f3f0000000018210e414089cc3fddd2ccbf91ca7c3ff29c993ddfb5383f5035303f0000803e18210e41e07ecc3f0578ccbf80f77a3f298a313decae7f3fafa8c7bc0000003f18210e412f6ccc3fe3dcccbfca2d793f0e6a60bc4be1303f680839bf0000403f18210e411e5ccc3f61c6cdbf8f79783f977780bd2026b1bc966f7fbf0000803f18210e411858cc3fb9abcebf6144793ff29c99bddfb538bf503530bf0000403f18210e417862cc3f9106cfbf72177b3f298a31bdecae7fbfafa8c73c0000003f18210e412975cc3fb3a1cebf28e17c3f0e6a603c4be130bf6808393f0000803e18210e411413ac3f5e42ccbf0128753f1cbc57befca3e73c44267a3f00000000ab3012417932ac3faf5dcbbfdd63743fee40ebbdcae5393f2a882d3f0000803eab301241ea67ac3f6404cbbf7e9b723f9182453d86a87f3f8d9c97bc0000003fab3012411a94ac3fca6acbbf3ada703f8c763b3eada82f3f603b34bf0000403fab301241269dac3fe654ccbf3d27703f1cbc573efca3e7bc44267abf0000803fab301241c17dac3f9539cdbf61eb703fee40eb3dcae539bf2a882dbf0000403fab3012415048ac3fe092cdbfc0b3723f918245bd86a87fbf8d9c973c0000003fab301241201cac3f7a2ccdbf0575743f58763bbe7da82fbf933b343f0000803eab301241d24d8c3f50f1cabf2f1f693fc362f5bd02a5a03c2f1b7e3f000000003d40164198628c3fb30bcabfbe59683f6e1a67bdc267383ffafa303f0000803e3d40164133828c3f5cb0c9bfe68a663f40f7233d2cc47f3f605674bc0000003f3d4016411f9a8c3fca14cabfc8c1643f657ee73dc44d313ffb6036bf0000403f3d401641589c8c3f2afecabf290a643fc362f53d02a5a0bc2f1b7ebf0000803f3d40164192878c3fc7e3cbbf9acf643f6e1a673dc26738bffafa30bf0000403f3d401641f7678c3f1e3fccbf729e663f40f723bd2cc47fbf6056743c0000003f3d4016410b508c3fb0dacbbf9067683f657ee7bdc44d31bffb60363f0000803e3d401641bc01593f6fe7c9bfe8616b3f116a7a3edd7f3b3be939783f00000000d04f1a41c8dd583f1400c9bfa6a36a3fd73c423e717a353f2be82d3f0000803ed04f1a410371583fcca0c8bf99e0683f9649c23cf4ea7f3f103112bc0000003fd04f1a4122fb573f6701c9bff920673f65e61fbec671343f4a2331bf0000403fd04f1a4134c1573f4fe9c9bffc6a663f116a7abedd7f3bbbe93978bf0000803fd04f1a4128e5573faad0cabf3e29673fd73c42be717a35bf2be82dbf0000403fd04f1a41ed51583ff22fcbbf4bec683f9649c2bcf4ea7fbf1031123c0000003fd04f1a41cec7583f57cfcabfebab6a3f65e61f3ec67134bf4a23313f0000803ed04f1a4143081f3f633bc9bfb21a833fa409063f5434453ecb75543f00000000645f1e4142751e3f816ac8bff4a4823f833a993e967d543fbcf2f03e0000803e645f1e415d6f1d3ff238c8bfe1d4813f1f81cdbd11357b3f8b5528be0000003f645f1e41fe8f1c3fbfc3c8bf5c24813fb7e2e1be51c50e3f77fd33bf0000403f645f1e41fd591c3f99b9c9bfccfa803fa40906bf543445becb7554bf0000803f645f1e41feec1c3f7b8acabf8a70813f833a99be967d54bfbcf2f0be0000403f645f1e41e3f21d3f0abccabf9d40823f1f81cd3d11357bbf8b55283e0000003f645f1e4142d21e3f3d31cabf22f1823fb7e2e13e51c50ebf77fd333f0000803e645f1e415e25d63e7714c9bf994c963fb8db163f4b97c83e01e2343f00000000f76e2241be54d43ee464c8bf4ac4953f6a72703e5b766d3fe5c8943e0000803ef76e2241d5cfd13e5e67c8bf3304953f83b183be07876b3fb15a97be0000003ff76e22416910d03e721ac9bfdb7c943ff43b19bf673fbf3e376a35bf0000403ff76e2241921cd03e3915cabf897d943fb8db16bf4b97c8be01e234bf0000803ff76e224132edd13eccc4cabfd805953f6a7270be5b766dbfe5c894be0000403ff76e22411b72d43e52c2cabfefc5953f83b1833e07876bbfb15a973e0000003ff76e22418731d63e3e0fcabf474d963ff43b193f673fbfbe376a353f0000803ef76e224103156b3e0c2ec9bfe0f0ab3f726b113f30e80e3fd4cf1a3f000000008a7e2641c08a663e66a3c8bfa65aab3fba58ff3d0a3a7b3fddca153e0000803e8a7e26410841613e1fd5c8bf58a8aa3fd18fc8be9a61543f82b4cbbe0000003f8a7e2641d7505e3e16a6c9bf6942aa3fb0bc2dbf4782443ef77c35bf0000403f8a7e2641cd725f3ee49bcabf8e64aa3f726b11bf30e80ebfd4cf1abf0000803f8a7e264110fd633e8a26cbbfc8faaa3fba58ffbd0a3a7bbfddca15be0000403f8a7e2641c846693ed1f4cabf16adab3fd18fc83e9a6154bf82b4cb3e0000003f8a7e2641f9366c3eda23cabf0513ac3fb0bc2d3f478244bef77c353f0000803e8a7e2641d131433dbd5ac9bf338fc23f5a6b003f063d323fbe6f033f000000001c8e2a41a7ca2e3d42f7c8bfd8ecc13f477e663b08f57f3f0512933c0000803e1c8e2a41e24d1a3db253c9bf0a47c13f804afebe68bd373f9fe0f9be0000003f1c8e2a41d4bb113de739cabfebfec03f53b634bf3a06793cc24835bf0000403f1c8e2a41bb191a3d0723cbbfb93ec13f5a6b00bf063d32bfbe6f03bf0000803f1c8e2a41e5802e3d8286cbbf14e1c13f477e66bb08f57fbf051293bc0000403f1c8e2a41aafd423d122acbbfe286c23f804afe3e68bd37bf9fe0f93e0000003f1c8e2a41b88f4b3ddd43cabf01cfc23f53b6343f3a0679bcc248353f0000803e1c8e2a412a7f08bede7cc9bfcf5ad93f1441d13eb1094f3f338fd83e00000000af9d2e4119d90dbe3742c9bf38add83f3f3fe9bd5ddc7c3fcab3dabd0000803eaf9d2e41248412be28c5c9bf2014d83f0adc11bfda8f163f49f112bf0000003faf9d2e4141c413befeb8cabf35e9d73f9c1e31bf9abd1fbe9d7834bf0000403faf9d2e41ecdd10bee28ecbbf9d45d83f1441d1beb1094fbf338fd8be0000803faf9d2e41fd830bbe89c9cbbf34f3d83f3f3fe93d5ddc7cbfcab3da3d0000403faf9d2e41f2d806be9846cbbf4c8cd93f0adc113fda8f16bf49f1123f0000003faf9d2e41d59805bec252cabf37b7d93f9c1e313f9abd1f3e9d78343f0000803eaf9d2e4152bba2be4a7bc9bfd0aeef3f92c3993e5f89653f3197a63e0000000042ad3241a561a5bebf6ac9bfc9f6ee3f716a5ebeb575723f4de871be0000803e42ad32413361a7be0010cabf1a6cee3f4d841bbf7fb5e23ebfd228bf0000003f42ad3241538ea7be400acbbf0160ee3fbd5424bfaf4ea4be7b4632bf0000403f42ad324196cea5bee6c6cbbf94d9ee3f92c399be5f8965bf3197a6be0000803f42ad32414328a3be71d7cbbf9b91ef3f716a5e3eb57572bf4de8713e0000403f42ad3241b528a1be3032cbbf4a1cf03f4d841b3f7fb5e2bebfd2283f0000003f42ad324195fba0bef037cabf6328f03fbd54243faf4ea43e7b46323f0000803e42ad32411ca502bf423bc9bf9b700240d5f53e3ece8c753f22b3593e00000000d5bc364193e003bfd755c9bf0610024038fa96bedcc8603f48f8c0be0000803ed5bc3641d5aa04bff718cabf9dd30140ef7e1abf34af903e40e03ebf0000003fd5bc3641698d04bf5512cbbfc4de0140e8000fbf58f4f4be81732dbf0000403fd5bc36418a9903bfdeafcbbff12a0240d5f53ebece8c75bf22b359be0000803fd5bc3641135e02bf4995cbbf868b024038fa963edcc860bf48f8c03e0000403fd5bc3641d19301bf29d2cabfefc70240ef7e1a3f34af90be40e03e3f0000003fd5bc36413db101bfcbd8c9bfc8bc0240e8000f3f58f4f43e81732d3f0000803ed5bc36417c1337bfbc9bc8bf94070c40aadea53d486c7e3fa7ee9a3d0000000069cc3a41d72038bf24e2c8bfd3a30b4045f7a8be8b6a473f977f08bf0000803e69cc3a4181af38bf13bec9bf3f730b404b360cbfbdc0dc3d3b6754bf0000003f69cc3a41e76b38bfb2aecabf4c920b40489ce3be606420bfe9e223bf0000403f69cc3a41a47d37bf0e27cbbfcaee0b40aadea5bd486c7ebfa7ee9abd0000803f69cc3a41497036bfa6e0cabf8b520c4045f7a83e8b6a47bf977f083f0000403f69cc3a419fe135bfb704cabf1f830c404b360c3fbdc0dcbd3b67543f0000003f69cc3a41392536bf1814c9bf12640c40489ce33e6064203fe9e2233f0000803e69cc3a41ec1a6fbfce76c7bf542414408cb64d3d2ead7f3f0ec0f33a00000000fcdb3e4123fb6fbfe2d0c7bf98bd1340247495be7b4d393fdb0b20bf0000803efcdb3e414b6b70bfe6b5c8bfdd9213406713edbeff4bcc3c0fd062bf0000003ffcdb3e41b02970bfb49fc9bf2abd13406ad2b9bea94630bfd7b720bf0000403ffcdb3e41c05c6fbf5605cabfb82314408cb64dbd2ead7fbf0ec0f3ba0000803ffcdb3e41897c6ebf42abc9bf748a14402474953e7b4d39bfdb0b203f0000403ffcdb3e41610c6ebf3ec6c8bf2fb514406713ed3eff4bccbc0fd0623f0000003ffcdb3e41fc4d6ebf70dcc7bfe28a14406ad2b93ea946303fd7b7203f0000803efcdb3e417cb594bf16dbc5bfee401b400e2a733d5e8c7f3f08e092ba000000008eeb4241581b95bf6835c6bf9ed71a408dc280be52fc383f80d624bf0000803e8eeb4241ee5095bf6f1ac7bf1aac1a40707dd4be84d9c13c4ed568bf0000003f8eeb4241db3695bf0004c8bfe0d71a404dbfabbe9d6a30bf6b6f24bf0000403f8eeb424164dc94bf4a69c8bf4c411b400e2a73bd5e8c7fbf08e0923a0000803f8eeb4241887694bff80ec8bf9caa1b408dc2803e52fc38bf80d6243f0000403f8eeb4241f24094bff129c7bf20d61b40707dd43e84d9c1bc4ed5683f0000003f8eeb4241055b94bf6040c6bf5aaa1b404dbfab3e9d6a303f6b6f243f0000803e8eeb42415a76b2bf31f7c3bf50bd2140b90e863d42737f3ff8cf1dbb0000000021fb464176d5b2bfa751c4bf76522140a03066be87c7383fcd9227bf0000803e21fb46416b09b3bfa836c5bf6e2621409546c4beb8cabb3c955e6cbf0000003f21fb4641cbf3b2bf1120c6bf05532140087da2bedb7b30bf29b326bf0000403f21fb464140a1b2bf2585c6bf1abe2140b90e86bd42737fbff8cf1d3b0000803f21fb46412442b2bfaf2ac6bff4282240a030663e87c738bfcd92273f0000403f21fb46412f0eb2bfae45c5bffc5422409546c43eb8cabbbc955e6c3f0000003f21fb4641cf23b2bf455cc4bf65282240087da23edb7b303f29b3263f0000803e21fb4641a589d0bfbde3c1bf8ac8274092238f3d765f7f3fc39f3ebb00000000b40a4b41e8e3d0bf413ec2bfa75c2740387f52be69a8383f165129bf0000803eb40a4b41b616d1bf3a23c3bf3e3027402ba1b8be8bc3b83cc9b46ebf0000003fb40a4b414c04d1bf870cc4bf535d2740cfdb9bbed07d30bf5b4428bf0000403fb40a4b4173b7d0bf7f71c4bf7ec9274092238fbd765f7fbfc39f3e3b0000803fb40a4b41305dd0bffb16c4bf61352840387f523e69a838bf1651293f0000403fb40a4b41622ad0bf0232c3bfca6128402ba1b83e8bc3b8bcc9b46e3f0000003fb40a4b41cc3cd0bfb548c2bfb5342840cfdb9b3ed07d303f5b44283f0000803eb40a4b4117ddeebf48adbfbfeb812d40471f963d6b4f7f3f08a03ebb00000000471a4f41ad33efbfc907c0bf47152d40e68443be619a383fad7e2abf0000803e471a4f419d65efbfb5ecc0bf8fe82c40b8c9afbe2a47b83c975e70bf0000003f471a4f41a655efbff2d5c1bff4152d40abd796be7d7530bf9d7029bf0000403f471a4f41210defbfe03ac2bfdf822d40471f96bd6b4f7fbf08a03e3b0000803f471a4f418bb6eebf5fe0c1bf83ef2d40e684433e619a38bfad7e2a3f0000403f471a4f419b84eebf73fbc0bf3b1c2e40b8c9af3e2a47b8bc975e703f0000003f471a4f419294eebf3512c0bfd6ee2d405ad7963ee675303f4270293f0000803e471a4f411db106c0f85bbdbfbbfc32407cb69b3d12427f3ffcdf2bbb00000000da295341f9da06c069b6bdbf858f32409fc337beae99383f21502bbf0000803eda2953419cf306c0459bbebf88623240cadea8be7ebdb93ce79a71bf0000003fda29534197ec06c07a84bfbf20903240c2ef92bea16330bf385e2abf0000403fda29534107ca06c06ee9bfbf97fd32407cb69bbd12427fbffcdf2b3b0000803fda2953412ba006c0fd8ebfbfcd6a33409fc3373eae9938bf21502b3f0000403fda295341888706c021aabebfca973340cadea83e7ebdb9bce79a713f0000003fda2953418d8e06c0ecc0bdbf326a3340c2ef923ea163303f385e2a3f0000803eda295341050116c0b4f6babfcd443840da40a03dec367f3fe1cf04bb000000006d395741c52916c00751bbbf24d737403c8f2ebe08a6383f9ddc2bbf0000803e6d395741284216c0cd35bcbfeba937408b7da3be7c74bd3c8f8672bf0000003f6d395741e63b16c0041fbdbf9dd73740a1ee8fbe0b4730bf851f2bbf0000403f6d395741a91a16c00e84bdbf77453840da40a0bdec367fbfe1cf043b0000803f6d395741e9f115c0bb29bdbf20b338403c8f2e3e08a638bf9ddc2b3f0000403f6d39574186d915c0f544bcbf59e038408b7da33e7c74bdbc8f86723f0000003f6d395741c8df15c0be5bbbbfa7b23840a1ee8f3e0b47303f851f2b3f0000803e6d3957418f5b25c05c82b8bffc663d4046b8a33d362e7f3fcbff95ba0000000000495b41848325c07ddcb8bffff83c40eade27beafc4383f39262cbf0000803e00495b41bd9b25c027c1b9bf8ccb3c405fa19fbeb0fec33c9d2973bf0000003f00495b410a9625c06aaababf43f93c4037d28dbe541c30bf05bc2bbf0000403f00495b41c17525c0a00fbbbf5c673d4046b8a3bd362e7fbfcbff953a0000803f00495b41cc4d25c07fb5babf59d53d40eade273eafc438bf39262c3f0000403f00495b41933525c0d5d0b9bfcc023e405fa19f3eb0fec3bc9d29733f0000003f00495b41463b25c092e7b8bf15d53d4037d28d3e541c303f05bc2b3f0000803e00495b4176c834c05703b6bf63774240d186a53d97297f3fd27fa2390000000093585f4134f034c01e5db6bf4009424006a025be6f06393f67022cbf0000803e93585f416c0835c0a041b7bf99db41408f7e9ebe6c1ad03ca35673bf0000003f93585f41ee0235c0032bb8bf2d094240f4548dbe22d42fbfb41f2cbf0000403f93585f41f2e234c08f90b8bf49774240d186a5bd97297fbfd27fa2b90000803f93585f4134bb34c0c836b8bf6ce5424006a0253e6f0639bf67022c3f0000403f93585f41fca234c04652b7bf131343408f7e9e3e6c1ad0bca356733f0000003f93585f417aa834c0e368b6bf7fe54240f4548d3e22d42f3fb41f2c3f0000803e93585f41191444c06498b3bf88aa4740a857963d134e7f3f32d8bd3b00000000266863413a4144c0baf0b3bf313e47409ce24ebeb94a3a3f57cc27bf0000803e26686341f75a44c0bfd4b4bfc310474003e0b7be996b023d4ec86ebf0000003f266863413c5244c0e1beb5bfda3c474076979cbecdc32ebf25e429bf0000403f26686341272c44c0f825b6bfa2a84740a85796bd134e7fbf32d8bdbb0000803f2668634106ff43c0a2cdb5bff91448409ce24e3eb94a3abf57cc273f0000403f2668634149e543c09de9b4bf6742484003e0b73e996b02bd4ec86e3f0000003f2668634104ee43c07bffb3bf5016484076979c3ecdc32e3f25e4293f0000803e266863411d38d6bd582d01ba88c5533d875eafbe688a613f2f14a73e0000803f0000003f5611c9bdccf93d3bcddf493d875eafbe688a613f2f14a73e7a825a3f7a825a3f2415bbbdce31903b56a0563d875eafbe688a613f2f14a73effffff3e0000803fc074b4bde44b4d3bd28e723d875eafbe688a613f2f14a73e1af6153e7a825a3fe311b9bdc00a2ab94ca7863d875eafbe688a613f2f14a73e00000000ffffff3eaa38c6bdd0e568bb2a9a8b3d875eafbe688a613f2f14a73e1ef6153e16f6153edc34d4bdcea7a5bbe539853d875eafbe688a613f2f14a73e0000003f0000000040d5dabde23778bb4d856e3d875eafbe688a613f2f14a73e7c825a3f22f6153e191444c06498b3bf88aa4740a62e6ebf00f5873d9d91b83e000000000000003f3a4144c0baf0b3bf313e4740a62e6ebf00f5873d9d91b83e1af6153e7a825a3ff75a44c0bfd4b4bfc3104740a62e6ebf00f5873d9d91b83e0000003f0000803f3c5244c0e1beb5bfda3c4740a62e6ebf00f5873d9d91b83e7a825a3f7a825a3f272c44c0f825b6bfa2a84740a62e6ebf00f5873d9d91b83e0000803fffffff3e06ff43c0a2cdb5bff9144840a62e6ebf00f5873d9d91b83e78825a3f16f6153e49e543c09de9b4bf67424840a62e6ebf00f5873d9d91b83e0000003f0000000004ee43c07bffb3bf50164840a62e6ebf00f5873d9d91b83e12f6153e22f6153e4ca8893c3a8c333ad3381dc1c54b69bf30c31ebdbadcd1be0000000000000000ab32b43c2cd3773b0c4c1dc11ab6c8be52b28a3e611161bf0000803e00000000fc8cf13ce361ad3b2c4a1dc187beb63ec200d83e5b5c55bf0000003f0000000059e30e3ddadf8d3b4e341dc14d92653f81c3a63e165e99be0000403f00000000da7b0f3ddf61bf3a3f171dc1c54b693f24c31e3dbadcd13e0000803f00000000546df43c5c7ed6ba06041dc115b6c83e54b28abe6211613f0000403f000000000413b73cc62f4ebbe6051dc187beb6bec200d8be5b5c553f0000003f000000004cd98a3cb22b0fbbc41b1dc14f9265bf7cc3a6be135e993e0000803e000000003bde2e3dfe3170be0d841ec1f17d63bf5b7a8d3d5b20e8be000000009696803eda93463d0c1d6ebecb961ec1d69e9ebee9758b3eee3369bf0000803e9696803e6db8653d60aa6dbeae931ec15da9e63ee5daa13ee4bd55bf0000003f9696803ebc0d7a3d271d6fbe887c1ec19e6a723f93e1323eaa228abe0000403f9696803e93aa773d2e9c71bee95e1ec1f17d633f5b7a8dbd5b20e83e0000803f9696803ef4f45f3d20b173be2b4c1ec1d69e9e3ee9758bbeee33693f0000403f9696803e61d0403dcc2374be484f1ec15da9e6bee5daa1bee4bd553f0000003f9696803e127b2c3d05b172be6e661ec19e6a72bf93e132beaa228a3e0000803e9696803efe89873d5678f1be7cca1fc11beb5cbf69969b3d9ec1ffbe000000009696003f18e1933d6165f0beccdb1fc1305885bec14e923e80176cbf0000803e9696003f0758a33dd22df0befcd61fc15448fd3ebc02a83e2b034ebf0000003f9696003fb5dfac3d35f2f0beddbe1fc192c3753fbb95363e64ff5cbe0000403f9696003f00e3aa3d7e3ff2be90a11fc11beb5c3f69969bbd9ec1ff3e0000803f9696003fe68b9e3d7352f3be40901fc13058853ec14e92be80176c3f0000403f9696003ff7148f3d028af3be10951fc15448fdbebc02a8be2b034e3f0000003f9696003f498d853d9fc5f2be2fad1fc192c375bfbb9536be64ff5c3e0000803e9696003f03eec43d610335bf5b1e21c1e15356bfaf15973d18b80abf00000000e1e1403fef9ed13d546c34bf262e21c142c25ebe85c69b3e786b6dbf0000803ee1e1403ffbebe03d164a34bfb02721c11d92073f2488b63ec40b45bf0000003fe1e1403f98dee93db4b034bfc20e21c13a6b773fc1b94c3e4ef124be0000403fe1e1403ff938e73d136435bff7f120c1e153563faf1597bd18b80a3f0000803fe1e1403f0c88da3d20fb35bf2ce220c113c25e3e87c69bbe7b6b6d3f0000403fe1e1403f013bcb3d5e1d36bfa2e820c11d9207bf2488b6bec40b453f0000003fe1e1403f6348c23dc0b635bf900121c13a6b77bfb7b94cbe46f1243e0000803ee1e1403fff280c3eec6670bfd38722c12efa4ebfd8ef843debbb15bf000000009696803f7f9e123ee6b76fbfd09522c1c6fe35be46f8a93e2f286dbf0000803e9696803fec241a3e53886fbf928d22c1a3a10e3f6d24cf3ef8a539bf0000003f9696803fcc531e3e10f46fbfee7322c1dd34773f78ef753e1420cbbd0000403f9696803fd1b71c3e00bc70bfe95722c12efa4e3fd8ef84bdebbb153f0000803f9696803f5142163e066b71bfec4922c1c6fe353e46f8a9be2f286d3f0000403f9696803fe4bb0e3e999a71bf2a5222c1a3a10ebf6d24cfbef8a5393f0000003f9696803f048d0a3edc2e71bfce6b22c1dd3477bf78ef75be1420cb3d0000803e9696803f0dd1473e1dfe94bf281324c1cc9445bf517f3d3d7d5922bf000000003cbca03f9a434e3e049194bfa11e24c1439a11bebf28c23eb4106abf0000803e3cbca03f7f90553eb56c94bf2b1424c12d1c123fb1e2fa3e56ad28bf0000003f3cbca03ff470593e74a694bfe5f923c19307733f28a8a03e07f88ebc0000403f3cbca03f9d9f573e6f1c95bf34df23c1cc94453f517f3dbd7d59223f0000803f3cbca03f102d513e888995bfbbd323c1439a113ebf28c2beb4106a3f0000403f3cbca03f2be0493ed7ad95bf31de23c12d1c12bfb1e2fabe56ad283f0000003f3cbca03fb6ff453e187495bf77f823c1930773bf28a8a0be07f88e3c0000803e3cbca03fdba7923e756fafbfa4d825c112ba35bfbeb0e53bd54c34bf00000000e1e1c03fa5a0953e20d5aebf61df25c17d8704be63baf43e6e685ebf0000803ee1e1c03fcffc983e8b96aebf45d125c124de063f26422b3f783a06bf0000003fe1e1c03f79c49a3e5fd8aebf95b625c1a1dd5f3f65a9ef3e2646023e0000403fe1e1c03fb7ec993e0d74afbff29e25c112ba353fbeb0e5bbd54c343f0000803fe1e1c03fedf3963e620eb0bf359825c17d87043e63baf4be6e685e3f0000403fe1e1c03fc497933ef74cb0bf51a625c100de06bf38422bbf863a063f0000003fe1e1c03f19d0913e230bb0bf01c125c1a1dd5fbf65a9efbe264602be0000803ee1e1c03f5e20e13e8771c1bf230828c114e429bf69bc52bc4e793fbf000000008707e13fbb14e33e9598c0bf700628c16c5590befa30263fc9da34bf0000803e8707e13f8be1e53e403cc0bfc9f327c12bab873e0b556e3fcb9080be0000003f8707e13fe9e2e73e9f92c0bf1cdb27c12619283fa1d92a3f51e1b33e0000403f8707e13f1aece73e1969c1bfddca27c114e4293f69bc523c4e793f3f0000803f8707e13fbdf7e53e0b42c2bf90cc27c16c55903efa3026bfc9da343f0000403f8707e13fed2ae33e609ec2bf37df27c12bab87be0b556ebfcb90803e0000003f8707e13f8f29e13e0148c2bfe4f727c1261928bfa1d92abf51e1b3be0000803e8707e13f67b51f3fe4d3c8bfb7972ac14ecb25bf119572bcdb0543bf0000000096960040bc58203f8decc7bf35912ac1adfbcbbe75f2303f33591abf0000803e969600400495213fe289c7bf3c7c2ac1d975ac3d07077e3fd621babd0000003f96960040f7b0223fb0e5c7bf14652ac13d79043fb84d363fb5eaf23e0000403f969600404106233f30cac8bf4f592ac14ecb253f1195723cdb05433f0000803f96960040ec62223f87b1c9bfd15f2ac1adfbcb3e75f230bf33591a3f0000403f96960040a426213f3214cabfca742ac1d975acbd07077ebfd621ba3d0000003f96960040b00a203f64b8c9bff28b2ac1877904bf934d36bf84eaf2be0000803e9696004008cf513f6fa8cabffc1c2dc139591abfa09c80bc68324cbf0000000069a910402440523f41bfc9bfdc132dc18f56dcbee927323fba2b13bf0000803e69a910407556533fa75bc9bff1fc2cc1ea8bb9bb39f77f3fe28f7bbc0000003f69a91040f36e543ffab7c9bfa8e52cc1e93bd83e36d6373fc7990d3f0000403f69a910404ee5543f259ecabfa4db2cc139591a3fa09c803c68324c3f0000803f69a910403274543f5387cbbfc4e42cc18f56dc3ee92732bfba2b133f0000403f69a91040e15d533fedeacbbfaffb2cc1ea8bb93b39f77fbfe28f7b3c0000003f69a910406345523f9a8ecbbff8122dc1e93bd8be36d637bfc7990dbf0000803e69a91040f875833febd2c9bf82662fc181ea05bf96b532bc7f295abf000000003cbc2040879d833f70eac8bfd65b2fc1db06cebed5d5323f7e7717bf0000803e3cbc20405312843f0d88c8bff8422fc1bf3b3cbdeeb27f3f55207d3c0000003f3cbc2040f18f843f62e5c8bf792a2fc160bfac3e20c8363f320e1d3f0000403f3cbc2040cccc843fc5cbc9bfb2202fc181ea053f96b5323c7f295a3f0000803f3cbc20403da5843f40b4cabf5e2b2fc1db06ce3ed5d532bf7e77173f0000403f3cbc20407130843fa316cbbf3c442fc1bf3b3c3deeb27fbf55207dbc0000003f3cbc2040d3b2833f4eb9cabfbb5c2fc160bfacbe20c836bf320e1dbf0000803e3cbc2040632ba03faa30c8bf0a3f31c136f5bebe9a8089b94a876dbf000000000ecf3040ee45a03f2649c7bf743331c1777a95be10cd343ff41b25bf0000803e0ecf30408598a03f33e9c6bf641831c1ec7923bda9c37f3ff0e7803c0000003f0ecf3040c4f2a03f0649c7bfb5fd30c1c327713efae7343ffbcd2a3f0000403f0ecf3040cf1fa13f7e30c8bf08f330c136f5be3e9a8089394a876d3f0000803f0ecf30404405a13f0218c9bf9efe30c1777a953e10cd34bff41b253f0000403f0ecf3040adb2a03ff577c9bfae1931c1ec79233da9c37fbff0e780bc0000003f0ecf30406e58a03f2218c9bf5d3431c1c32771befae734bffbcd2abf0000803e0ecf304079afbf3f39fdc7bffa3232c15c3b64bd071a443be4997fbf00000000e1e1404098c0bf3f1a16c7bfff2632c1fe5663bb8253353fb3b534bf0000803ee1e1404061d2bf3ff2b6c6bf130a32c1d51a503d5bab7f3fd7ff47390000003fe1e140406adabf3f7e17c7bf29ed31c14d469a3dd43e343fa5c3343f0000403fe1e14040fdd3bf3f2fffc7bf30e131c15c3b643d071a44bbe4997f3f0000803fe1e14040dec2bf3f4ee6c8bf2bed31c1fe56633b825335bfb3b5343f0000403fe1e1404015b1bf3f7645c9bf170a32c1d51a50bd5bab7fbfd7ff47b90000003fe1e140400ca9bf3feae4c8bf012732c14d469abdd43e34bfa5c334bf0000803ee1e14040dddbdf3f8bb6c9bf2ccf31c11c614e3eee11d6bbc3bd7abf00000000b4f4504088d2df3f6ecec8bf5cc331c10535313eeaa9333fe5e630bf0000803eb4f45040fba7df3f076dc8bff7a631c1c4f3303da9c27f3fcfbf0f3b0000003fb4f450402475df3f66cbc8bf9f8a31c18f44e5bdd607363fd4b4313f0000403fb4f45040c957df3f43b2c9bff07e31c11c614ebeee11d63bc3bd7a3f0000803fb4f450401e61df3f609acabfc08a31c1053531beeaa933bfe5e6303f0000403fb4f45040ab8bdf3fc7fbcabf25a731c1c4f330bda9c27fbfcfbf0fbb0000003fb4f4504082bedf3f689dcabf7dc331c18f44e53dd60736bfd4b431bf0000803eb4f45040d7f6fe3f7ae0cabf6dbb30c19bdba43e98e8cbbb755c72bf000000008707614031dffe3f4bf8c9bff3af30c128d17f3e12ce333f5aa22abf0000803e870761409797fe3fec96c9bf7b9430c11a39003d54df7f3f1b60863b0000003f87076140fb49fe3f68f5c9bf1c7930c1717852be8d0d363fd71d2c3f0000403f87076140d323fe3f66dccabfdf6d30c19bdba4be98e8cb3b755c723f0000803f87076140793bfe3f96c4cbbf597930c19bd07fbe77ce33bffda12a3f0000403f870761401383fe3ff425ccbfd19430c11a3900bd54df7fbf1b6086bb0000003f87076140afd0fe3f78c7cbbf30b030c17178523e8d0d36bfd71d2cbf0000803e87076140e47a0e403ac1cbbf09412fc17100d13ee3a08cbb79b269bf000000005a1a7140156a0e402ed9cabfe9352fc1f5779c3ec92f343fb12824bf0000803e5a1a7140f23b0e403e78cabf661b2fc13baec43cedeb7f3f3be0c43b0000003f5a1a7140810b0e4031d7cabf08012fc11a178bbee4be353f4456263f0000403f5a1a714022f50d406abecbbf41f62ec17100d1bee3a08c3b79b2693f0000803f5a1a7140f1050e4076a6ccbf61012fc1f5779cbec92f34bfb128243f0000403f5a1a714014340e406607cdbfe41b2fc13baec4bcedeb7fbf3be0c4bb0000003f5a1a714085640e4073a8ccbf42362fc11a178b3ee4be35bf445626bf0000803e5a1a714008e61c404877ccbfc7722dc1c290f93e2dbef3ba54875fbf0000000096968040ced01c40728fcbbf10682dc1ca3bb73ec0a3343fe58f1cbf0000803e969680403b991c400f2fcbbfac4e2dc1c81f993c4bf27f3fceef073c0000003f96968040dd5f1c40968ecbbf7b352dc1feb2a9be6050353f49911f3f0000403f969680404e461c401076ccbf3f2b2dc1c290f9be2dbef33a54875f3f0000803f96968040885b1c40e65dcdbff6352dc1ca3bb7bec0a334bfe58f1c3f0000403f969680401b931c4049becdbf5a4f2dc1c81f99bc4bf27fbfceef07bc0000003f9696804079cc1c40c25ecdbf8b682dc1feb2a93e605035bf49911fbf0000803e9696804087942a406e13cdbf654e2bc16fa8133fa9fe2e3ae71f51bf0000000000a08840827a2a40d42bccbf47442bc1de02d63e871b353f92e511bf0000803e00a088405f382a4006cccbbf7c2c2bc14ec46a3c55f57f3f3bb0333c0000003f00a08840dcf42940232cccbff5142bc105a3cbbe23de343f54da153f0000403f00a0884085d72940de13cdbf790b2bc16fa813bfa9fe2ebae71f513f0000803f00a088408af1294078fbcdbf97152bc1de02d6be871b35bf92e5113f0000403f00a08840ad332a40465bcebf622d2bc14ec46abc55f57fbf3bb033bc0000003f00a0884030772a4029fbcdbfe9442bc105a3cb3e23de34bf54da15bf0000803e00a0884087113740f3a2cdbf98bd28c1fc4d333f6ff0393b6eb736bf0000000069a990401ff136408dbbccbf9fb428c1e5aa003f6381353f2b45fdbe0000803e69a990407aa03640405cccbfc79f28c10b502a3cd8f57f3f0fd0683c0000003f69a99040d64e3640debcccbf478b28c1d7cef9bef47a343fb2c3033f0000403f69a99040052c3640cfa4cdbf208328c1fc4d33bf6ff039bb6eb7363f0000803f69a990406d4c3640358ccebf198c28c1e5aa00bf638135bf2b45fd3e0000403f69a99040129d364082ebcebff1a028c10b502abcd8f57fbf0fd068bc0000003f69a99040b6ee3640e48acebf71b528c1d7cef93ef47a34bfb2c303bf0000803e69a990407bd640402538cebf0d8225c19160673fd5971e3b4417dbbe00000000d2b29840d3ab4040b850cdbf607c25c17aba243fef6b353f262594be0000803ed2b298406a43404052f1ccbfc26f25c1e31fcb3b4bf37f3fea1f993c0000003fd2b2984068da3f40d651cdbf976325c1737d22bff38c343f12aca13e0000403fd2b2984051ae3f40bb39cebfff5e25c1916067bfd5971ebb4417db3e0000803fd2b29840f9d83f402821cfbfac6425c17aba24bfef6b35bf2625943e0000403fd2b29840624140408e80cfbf4a7125c1e31fcbbb4bf37fbfea1f99bc0000003fd2b2984064aa40400a20cfbf757d25c1737d223ff38c34bf12aca1be0000803ed2b298401b874240b7c4cebf8d7d21c1ce2c7c3f4c2bb0bb4c44303e000000003cbca0403f58424082dccdbf4d7f21c18ff5323f8f08343fa184043e0000803e3cbca0404be641404b7bcdbf288421c1b6cf683bb7fb7f3fc81f323c0000003f3cbca0400074414005dacdbf458921c18fac31bfe8fa353f3e66e9bd0000403f3cbca0405144414031c1cebfa78b21c1ce2c7cbf4c2bb03b4c4430be0000803f3cbca0402d73414066a9cfbfe78921c18ff532bf8f0834bfa18404be0000403f3cbca04021e541409d0ad0bf0c8521c1b6cf68bbb7fb7fbfc81f32bc0000003f3cbca0406c574240e3abcfbfef7f21c18fac313fe8fa35bf3e66e93d0000803e3cbca040bf973d4098f5cebf60a11dc16e8d6a3fc8a6c5bb3c1fcd3e00000000a5c5a840496c3d40500dcebf0aa61dc1d1a6263f47ed333fc7d3923e0000803ea5c5a84059023d40f2abcdbf94b11dc117c08f3b89fe7f3f1ba0a53b0000003fa5c5a840fd973c40850acebf3ebd1dc10f1025bf521b363f55368fbe0000403fa5c5a840836b3c40a4f1cebf32c21dc16e8d6abfc8a6c53b3c1fcdbe0000803fa5c5a840f9963c40ecd9cfbf88bd1dc1d1a626bf47ed33bfc7d392be0000403fa5c5a840e9003d404a3bd0bffeb11dc117c08fbb89fe7fbf1ba0a5bb0000003fa5c5a840456b3d40b7dccfbf54a61dc10f10253f521b36bf55368f3e0000803ea5c5a8405d2b3640e4fdcebfae0c1ac179535c3f484cb3bbf558023f000000000ecfb040a2023640aa15cebfb8121ac171af1c3f4d07343f1935b93e0000803e0ecfb040299f35406cb4cdbf6f211ac1e8efa03b01ff7f3fe77f223b0000003f0ecfb040383b35402113cebf36301ac146e71abf7002363f3173b7be0000403f0ecfb040591135404efacebf64361ac179535cbf484cb33bf55802bf0000803f0ecfb040143a354088e2cfbf5a301ac171af1cbf4d0734bf1935b9be0000403f0ecfb0408d9d3540c643d0bfa3211ac1e8efa0bb01ff7fbfe77f22bb0000003f0ecfb0407e01364011e5cfbfdc121ac146e71a3f700236bf3173b73e0000803e0ecfb0406a5b2d4058f2cebffaab16c1b9ab503fb9789bbb314b143f0000000078d8b840e4342d40300acebfe6b216c1697a143f9129343f7710d23e0000803e78d8b840b5d62c401da9cdbfaac316c1f8f7a73b1cff7f3ff4ff793a0000003f78d8b84007782c40fd07cebf74d416c1a49f12bfcadf353f945fd1be0000403f78d8b84052502c403cefcebf6edb16c1b9ab50bfb9789b3b314b14bf0000803f78d8b840d8762c4064d7cfbf82d416c1697a14bf912934bf7710d2be0000403f78d8b84007d52c407738d0bfbec316c1f8f7a7bb1cff7fbff4ff79ba0000003f78d8b840b5332d4097d9cfbff4b216c1a49f123fcadf35bf945fd13e0000803e78d8b8408f902340bcdbcebfb07813c122f3453f16b081bb5c54223f00000000e1e1c0400a6c2340a7f3cdbf4b8013c14ee30c3f2f4d343f3197e53e0000803ee1e1c040b4122340c392cdbfa89213c1ff67a63b27ff7f3fffffc7380000003fe1e1c040e1b82240d1f1cdbf06a513c1290d0bbf98bc353ff98ae5be0000403fe1e1c0402f93224024d9cebfa2ac13c122f345bf16b0813b5c5422bf0000803fe1e1c040b4b7224039c1cfbf07a513c14ee30cbf2f4d34bf3197e5be0000403fe1e1c0400a1123401d22d0bfaa9213c1ff67a6bb27ff7fbfffffc7b80000003fe1e1c040dd6a23400fc3cfbf4c8013c1290d0b3f98bc35bff98ae53e0000803ee1e1c0400ef0184025bfcebfe47010c1e8c63a3f343f4ebb13122f3f000000004bebc84098cd184024d7cdbf1c7910c13def043f8472343f7a69f73e0000803e4bebc8404d7918407076cdbfec8c10c10d089d3b3dff7f3f1400fab90000003f4bebc8408b241840afd5cdbfb9a010c1853503bf9296353fddc1f7be0000403f4bebc840fa00184015bdcebfeaa810c1e8c63abf343f4e3b13122fbf0000803f4bebc8407023184016a5cfbfb2a010c13def04bf847234bf7a69f7be0000403f4bebc840bb771840ca05d0bfe28c10c10d089dbb3dff7fbf1400fa390000003f4bebc8407dcc18408ba6cfbf157910c18535033f929635bfddc1f73e0000803e4bebc8401c7f0d4086a0cebf78990dc1226c2d3fb47014bb244f3c3f00000000b4f4d040175f0d409bb8cdbf51a20dc1c6c7f63eb99b343f6b02053f0000803eb4f4d040d0100d401b58cdbfa1b70dc121488a3b65ff7f3f300048ba0000003fb4f4d04021c20c408eb7cdbfedcc0dc109baf3be876d353f284d05bf0000403fb4f4d04022a10c400a9fcebfbad50dc1226c2dbfb470143b244f3cbf0000803fb4f4d04027c10c40f586cfbfe1cc0dc1c6c7f6beb99b34bf6b0205bf0000403fb4f4d0406e0f0d4075e7cfbf91b70dc121488abb65ff7fbf3000483a0000003fb4f4d0401d5e0d400288cfbf45a20dc109baf33e876d35bf284d053f0000803eb4f4d040472401405084cebff2000bc13c6f1a3f3cbfa8bad22b4c3f000000001efed840b20701407d9ccdbf890a0bc13b8ddb3ea1c7343f553c103f0000803e1efed840f5c10040363ccdbfa5210bc1c5cf4f3ba7ff7f3fc7ff47ba0000003f1efed840ea7b0040e39bcdbfbc380bc1fc42d9befa40353fe88110bf0000403f1efed840995e00407883cebf48420bc13c6f1abf3cbfa83ad22b4cbf0000803f1efed8402e7b00404b6bcfbfb1380bc13b8ddbbea1c734bf553c10bf0000403f1efed840ebc0004092cbcfbf95210bc1c5cf4fbba7ff7fbfc7ff473a0000003f1efed840f6060140e56bcfbf7e0a0bc1fc42d93efa4035bfe881103f0000803e1efed840e734e73f3772cebf9bce08c15320ef3e3b7f54b92e5d623f000000008707e1404c08e73f7e8acdbf39d908c18c6fa93ed5fb343f0403203f0000803e8707e1402b9ce63f782acdbfd6f208c108e0763af8ff7f3f050096b90000003f8707e140dd2fe63f668acdbf710c09c129bfa8bec60e353f2f1c20bf0000403f8707e140d102e63f1572cebf0b1709c15320efbe3b7f54392e5d62bf0000803f8707e1406c2fe63fce59cfbf6d0c09c18c6fa9bed5fb34bf040320bf0000403f8707e1408d9be63fd4b9cfbfd0f208c108e076baf8ff7fbf050096390000003f8707e140db07e73fe659cfbf35d908c129bfa83ec60e35bf2f1c203f0000803e8707e1405bc8c83f2071cebf306e07c1fe7e633e00000000369a793f00000000f010e94008b3c83f6c89cdbfe37907c116de203e9105353f2b7e303f0000803ef010e9408e7fc83f7229cdbf209607c1000000000000803f000000000000003ff010e940144cc83f6c89cdbf5db207c116de20be9105353f2b7e30bf0000403ff010e940c136c83f2071cebf10be07c1fe7e63be00000000369a79bf0000803ff010e940144cc83fd458cfbf5db207c116de20be910535bf2b7e30bf0000403ff010e9408e7fc83fceb8cfbf209607c100000000000080bf000000000000003ff010e94008b3c83fd458cfbfe37907c116de203e910535bf2b7e303f0000803ef010e94099d5a83f2071cebfe2d506c13589ad3d000000004e147f3f000000005a1af14077cda83f6c89cdbfd6e106c1be68753d7004353fd05e343f0000803e5a1af140d5b9a83f7229cdbfb2fe06c1000000000000803f000000000000003f5a1af14033a6a83f6c89cdbf8e1b07c1be6875bd7004353fd05e34bf0000403f5a1af140119ea83f2071cebf822707c13589adbd000000004e147fbf0000803f5a1af14033a6a83fd458cfbf8e1b07c1be6875bd700435bfd05e34bf0000403f5a1af140d5b9a83fceb8cfbfb2fe06c100000000000080bf000000000000003f5a1af14077cda83fd458cfbfd6e106c1be68753d700435bfd05e343f0000803e5a1af1402695883f2071cebf11af06c17d9ea5bb000000002aff7f3f00000000c323f940a295883f6c89cdbf11bb06c10f626abb3706353f1703353f0000803ec323f940ce96883f7229cdbf07d806c1000000000000803f000000000000003fc323f940fa97883f6c89cdbffdf406c10f626a3b3706353f170335bf0000403fc323f9407698883f2071cebffd0007c17d9ea53b000000002aff7fbf0000803fc323f940fa97883fd458cfbffdf406c10f626a3b370635bf170335bf0000403fc323f940ce96883fceb8cfbf07d806c100000000000080bf000000000000003fc323f940a295883fd458cfbf11bb06c10f626abb370635bf1703353f0000803ec323f940bdba503f1f71cebfc5da06c131b3a0bd00000000ef357f3f0000000096960041cdc9503f6b89cdbfbae606c1033e63bdd603353f3777343f0000803e9696004129ee503f7129cdbf9a0307c1000000000000803f000000000000003f969600418512513f6b89cdbf7a2007c1033e633dd603353f377734bf0000403f969600419521513f1f71cebf6f2c07c131b3a03d00000000ef357fbf0000803f969600418512513fd358cfbf7a2007c1033e633dd60335bf377734bf0000403f9696004129ee503fcdb8cfbf9a0307c100000000000080bf000000000000003f96960041cdc9503fd358cfbfbae606c1033e63bdd60335bf3777343f0000803e9696004109a4103f2071cebf875107c1090a1dbe00000000bff87c3f000000004b9b044179c1103f6c89cdbf625d07c1d417debd4804353f69e1323f0000803e4b9b04418b08113f7229cdbf017a07c1000000000000803f000000000000003f4b9b04419d4f113f6c89cdbfa09607c1d417de3d4804353f69e132bf0000403f4b9b04410d6d113f2071cebf7ba207c1090a1d3e00000000bff87cbf0000803f4b9b04419d4f113fd458cfbfa09607c1d417de3d480435bf69e132bf0000403f4b9b04418b08113fceb8cfbf017a07c100000000000080bf000000000000003f4b9b044179c1103fd458cfbf625d07c1d417debd480435bf69e1323f0000803e4b9b0441fdbba23e1e71cebff02008c1fc7683be00000000cb6a773f0000000000a008418f1ea33e6a89cdbf882c08c19fea39beb604353f96f32e3f0000803e00a00841880ca43e7029cdbf864808c1000000000000803f000000000000003f00a0084181faa43e6a89cdbf846408c19fea393eb604353f96f32ebf0000403f00a00841135da53e1e71cebf1c7008c1fc76833e00000000cb6a77bf0000803f00a0084181faa43ed258cfbf846408c19fea393eb60435bf96f32ebf0000403f00a00841880ca43eccb8cfbf864808c100000000000080bf000000000000003f00a008418f1ea33ed258cfbf882c08c19fea39beb60435bf96f32e3f0000803e00a008417d23a73d1f71cebf1f9a09c19c1009bf000000003637583f00000000b4a40c41a659aa3d6b89cdbf41a409c1cad6c1bea905353f60e2183f0000803eb4a40c41841ab23d7129cdbfb7bc09c1000000000000803f000000000000003fb4a40c4162dbb93d6b89cdbf2dd509c1cad6c13ea905353f60e218bf0000403fb4a40c418b11bd3d1f71cebf4fdf09c19c10093f00000000363758bf0000803fb4a40c4162dbb93dd358cfbf2dd509c1cad6c13ea90535bf60e218bf0000403fb4a40c41841ab23dcdb8cfbfb7bc09c100000000000080bf000000000000003fb4a40c41a659aa3dd358cfbf41a409c1cad6c1bea90535bf60e2183f0000803eb4a40c4114c68c3d2071cebf5b250dc11db949bf000000007f9e1dbf0000000069a910411680913d6c89cdbff81d0dc1d7a30ebf3505353f38e7debe0000803e69a9104150e99c3d7229cdbf230c0dc10d0048b50000803f000000000000003f69a910418a52a83d6c89cdbf4efa0cc1c6a30e3f3f05353f44e7de3e0000403f69a910418e0cad3d2071cebfebf20cc11db9493f000000007f9e1d3f0000803f69a910418c52a83dd458cfbf4efa0cc1d7a30e3f350535bf38e7de3e0000403f69a9104152e99c3dceb8cfbf230c0dc10d004835000080bf000000000000003f69a910411880913dd458cfbff81d0dc1c6a30ebf3f0535bf44e7debe0000803e69a910416a5f7c3e1f71cebf730610c1a3d728bf00000000646d40bf000000001eae1441d2597e3e6b89cdbf6efd0fc1b4c9eebe3b05353fb40f08bf0000803e1eae14413390813e7129cdbfa9e70fc1000000000000803f000000000000003f1eae14417cf3833e6b89cdbfe4d10fc166c9ee3e4c05353fc10f083f0000403f1eae1441b1f0843e1f71cebfdfc80fc1a3d7283f00000000646d403f0000803f1eae14417df3833ed358cfbfe4d10fc1b4c9ee3e3b0535bfb40f083f0000403f1eae14413390813ecdb8cfbfa9e70fc100000000000080bf000000000000003f1eae1441d3597e3ed358cfbf6efd0fc18dc9eebe430535bfba0f08bf0000803e1eae1441c94ae23e1f71cebffb9212c175d81bbf00000000b2184bbf00000000d2b218417f34e33e6b89cdbf768912c14d68dcbe5505353f109b0fbf0000803ed2b21841bb68e53e7129cdbf7c7212c1000000000000803f000000000000003fd2b21841f79ce73e6b89cdbf825b12c14d68dc3e5505353f109b0f3f0000403fd2b21841ad86e83e1f71cebffd5112c175d81b3f00000000b2184b3f0000803fd2b21841f79ce73ed358cfbf825b12c14d68dc3e550535bf109b0f3f0000403fd2b21841bb68e53ecdb8cfbf7c7212c100000000000080bf000000000000003fd2b218417f34e33ed358cfbf768912c14d68dcbe550535bf109b0fbf0000803ed2b218411903253f2071cebf12f514c1d5e213bf00000000a3f650bf0000000087b71c41fb71253f6c89cdbf47eb14c1cf24d1be7605353faec113bf0000803e87b71c41ae7d263f7229cdbfa3d314c1000000000000803f000000000000003f87b71c416189273f6c89cdbfffbb14c1cf24d13e7605353faec1133f0000403f87b71c4143f8273f2071cebf34b214c1d5e2133f00000000a3f6503f0000803f87b71c416189273fd458cfbfffbb14c1cf24d13e760535bfaec1133f0000403f87b71c41ae7d263fceb8cfbfa3d314c100000000000080bf000000000000003f87b71c41fb71253fd458cfbf47eb14c1cf24d1be760535bfaec113bf0000803e87b71c41ab1e5a3f2071cebfc03b17c1d7de0dbf00000000e51755bf000000003cbc20410a895a3f6c89cdbfc43117c1eba0c8be9c04353ffdae16bf0000803e3cbc2041d8895b3f7229cdbfa81917c1000000000000803f000000000000003f3cbc2041a68a5c3f6c89cdbf8c0117c1eba0c83e9c04353ffdae163f0000403f3cbc204105f55c3f2071cebf90f716c1d7de0d3f00000000e517553f0000803f3cbc2041a68a5c3fd458cfbf8c0117c1eba0c83e9c0435bffdae163f0000403f3cbc2041d8895b3fceb8cfbfa81917c100000000000080bf000000000000003f3cbc20410a895a3fd458cfbfc43117c1eba0c8be9c0435bffdae16bf0000803e3cbc20410416883f2071cebf2d6c19c1b09e08bf00000000447f58bf00000000f1c024413c49883f6c89cdbf076219c11a39c1be9905353f521419bf0000803ef1c02441e5c4883f7229cdbf894919c1000000000000803f000000000000003ff1c024418e40893f6c89cdbf0b3119c11a39c13e9905353f5214193f0000403ff1c02441c673893f2071cebfe52619c1b09e083f00000000447f583f0000803ff1c024418e40893fd458cfbf0b3119c11a39c13e990535bf5214193f0000403ff1c02441e5c4883fceb8cfbf894919c100000000000080bf000000000000003ff1c024413c49883fd458cfbf076219c11a39c1be990535bf521419bf0000803ef1c024414784a33f1f71cebfc2871bc1887203bf0000000015ad5bbf00000000a5c528418eb5a33f6b89cdbf767d1bc1f5e7b9beec05353f9d531bbf0000803ea5c52841882ca43f7129cdbf9c641bc1000000000000803f000000000000003fa5c5284181a3a43f6b89cdbfc24b1bc19ae6b93e2006353fc9531b3f0000403fa5c52841c9d4a43f1f71cebf76411bc18872033f0000000015ad5b3f0000803fa5c5284182a3a43fd358cfbfc24b1bc1f5e7b93eec0535bf9d531b3f0000403fa5c52841882ca43fcdb8cfbf9c641bc100000000000080bf000000000000003fa5c528418eb5a33fd358cfbf767d1bc1f5e7b9beec0535bf9d531bbf0000803ea5c528418e54bf3f2071cebff78c1dc10630fbbe000000000d135fbf000000005aca2c41a383bf3f6c89cdbf83821dc1369eb1be8604353f29bd1dbf0000803e5aca2c4150f5bf3f7229cdbf46691dc1000000000000803f000000000000003f5aca2c41fc66c03f6c89cdbf09501dc1d79cb13eb704353f54bd1d3f0000403f5aca2c411296c03f2071cebf95451dc10630fb3e000000000d135f3f0000803f5aca2c41fd66c03fd458cfbf09501dc1369eb13e860435bf29bd1d3f0000403f5aca2c4150f5bf3fceb8cfbf46691dc100000000000080bf000000000000003f5aca2c41a483bf3fd458cfbf83821dc1d79cb1beb70435bf54bd1dbf0000803e5aca2c4147b4db3f2071cebf8f781fc12a36ebbe00000000166363bf000000000ecf30415fe0db3f6c89cdbfe76d1fc1d151a6be4a04353f34ca20bf0000803e0ecf3041d14adc3f7229cdbf2d541fc1000000000000803f000000000000003f0ecf304143b5dc3f6c89cdbf733a1fc1d151a63e4a04353f34ca203f0000403f0ecf30415be1dc3f2071cebfcb2f1fc12a36eb3e000000001663633f0000803f0ecf304143b5dc3fd458cfbf733a1fc1d151a63e4a0435bf34ca203f0000403f0ecf3041d14adc3fceb8cfbf2d541fc100000000000080bf000000000000003f0ecf30415fe0db3fd458cfbfe76d1fc1d151a6be4a0435bf34ca20bf0000803e0ecf3041f8bdf83f2071cebfbd3821c1aa53cdbe0000000042836abf00000000c4d3344175e4f83f6c89cdbfbf2d21c1c33291be2f05353f83d225bf0000803ec4d334416241f93f7229cdbf371321c1000000000000803f000000000000003fc4d334414f9ef93f6c89cdbfaff820c1c332913e2f05353f83d2253f0000403fc4d33441ccc4f93f2071cebfb1ed20c1aa53cd3e0000000042836a3f0000803fc4d334414f9ef93fd458cfbfaff820c1c332913e2f0535bf83d2253f0000403fc4d334416241f93fceb8cfbf371321c100000000000080bf000000000000003fc4d3344175e4f83fd458cfbfbf2d21c1c33291be2f0535bf83d225bf0000803ec4d3344118a00b402171cebf7f8522c1407865be000000004b7d79bf0000000078d83841d9aa0b406d89cdbfce7922c1a24122bec604353fa56a30bf0000803e78d83841cfc40b407329cdbf945d22c1000000000000803f000000000000003f78d83841c5de0b406d89cdbf5a4122c1a241223ec604353fa56a303f0000403f78d8384186e90b402171cebfa93522c14078653e000000004b7d793f0000803f78d83841c5de0b40d558cfbf5a4122c1a241223ec60435bfa56a303f0000403f78d83841cfc40b40cfb8cfbf945d22c100000000000080bf000000000000003f78d83841d9aa0b40d558cfbfce7922c1a24122bec60435bfa56a30bf0000803e78d8384127c31b402171cebf4fe922c18f1aaf3d0000000005107fbf000000002ddd3c410cbf1b406d89cdbf5bdd22c10191773d1706353f355a34bf0000803e2ddd3c4125b51b407329cdbf80c022c1000000000000803f000000000000003f2ddd3c413eab1b406d89cdbfa5a322c1019177bd1706353f355a343f0000403f2ddd3c4123a71b402171cebfb19722c18f1aafbd0000000005107f3f0000803f2ddd3c413eab1b40d558cfbfa5a322c1019177bd170635bf355a343f0000403f2ddd3c4125b51b40cfb8cfbf80c022c100000000000080bf000000000000003f2ddd3c410cbf1b40d558cfbf5bdd22c10191773d170635bf355a34bf0000803e2ddd3c41bff828402071cebf91c420c1970d703f00000000d8e1b1be00000000e1e14041c0cb28406c89cdbf66c020c1a8be293f9704353ff48f7bbe0000803ee1e140411d5f28407229cdbf56b620c1000000000000803f000000000000003fe1e140417af227406c89cdbf46ac20c1a8be29bf9704353ff48f7b3e0000403fe1e140417bc527402071cebf1ba820c1970d70bf00000000d8e1b13e0000803fe1e140417af22740d458cfbf46ac20c1a8be29bf970435bff48f7b3e0000403fe1e140411d5f2840ceb8cfbf56b620c100000000000080bf000000000000003fe1e14041c0cb2840d458cfbf66c020c1a8be293f970435bff48f7bbe0000803ee1e1404122d52a401f71cebf29bc1cc192bd7f3f00000000775f383d0000000095e6444131a52a406b89cdbfb3bc1cc1fed5343fde04353f2d78023d0000803e95e6444175312a407129cdbf01be1cc1000000000000803f000000000000003f95e64441b9bd29406b89cdbf4fbf1cc1fed534bfde04353f2d7802bd0000403f95e64441c88d29401f71cebfd9bf1cc192bd7fbf00000000775f38bd0000803f95e64441b9bd2940d358cfbf4fbf1cc1fed534bfde0435bf2d7802bd0000403f95e6444175312a40cdb8cfbf01be1cc100000000000080bf000000000000003f95e6444131a52a40d358cfbfb3bc1cc1fed5343fde0435bf2d78023d0000803e95e64441ebfc27401f71cebfbebe18c1f4fb713f00000000ab16a73e000000004beb48418fcf27406b89cdbfa8c218c12b1c2b3f1304353f48536c3e0000803e4beb48410c6227407129cdbf1ccc18c1000000000000803f000000000000003f4beb484189f426406b89cdbf90d518c12b1c2bbf1304353f48536cbe0000403f4beb48412dc726401f71cebf7ad918c1f4fb71bf00000000ab16a7be0000803f4beb484189f42640d358cfbf90d518c12b1c2bbf130435bf48536cbe0000403f4beb48410c622740cdb8cfbf1ccc18c100000000000080bf000000000000003f4beb48418fcf2740d358cfbfa8c218c12b1c2b3f130435bf48536c3e0000803e4beb484126ab1e406088cebf387015c1d8ea273f01affebaff3b413f0000000000f04c41368b1e407ea0cdbf1a7915c1420aec3e2eaa343ffcb8093f0000803e00f04c41083f1e401140cdbfe48e15c1f7af81bb4efe7f3ff2dfc43b0000003f00f04c413bf31d40979fcdbfd3a415c1b1e7eebeed5d353f2e8c07bf0000403f00f04c4136d41d401a87cebf0eae15c1d8ea27bf01affe3aff3b41bf0000803f00f04c4126f41d40fc6ecfbf2ca515c1420aecbe2eaa34bffcb809bf0000403f00f04c4154401e4069cfcfbf628f15c1f7af813b4efe7fbff2dfc4bb0000003f00f04c41218c1e40e36fcfbf737915c1b1e7ee3eed5d35bf2e8c073f0000803e00f04c410e371140bec1cebf8c2f13c13848ed3e4d8e97bb76d8623f00000000b4f450418820114099d9cdbffe3913c1a0e8a63e522e343ffc92213f0000803eb4f45041b9ea10408e78cdbf945313c108601fbb6dfe7f3f0b80d43b0000003fb4f4504126b5104075d7cdbf526d13c149aaa8be15da353fa73a1fbf0000403fb4f45041309f1040b6becebf247813c13848edbe4d8e973b76d862bf0000803fb4f45041b6b51040dba6cfbfb26d13c1a0e8a6be522e34bffc9221bf0000403fb4f4504185eb1040e607d0bf1c5413c108601f3b6dfe7fbf0b80d4bb0000003fb4f4504118211140ffa8cfbf5e3a13c149aaa83e15da35bfa73a1f3f0000803eb4f4504197180240f2becebfe3ba11c17f28663e5ce9b2bb2572793f0000000068f95441ff0e0240bbd6cdbf7bc611c1e32f2a3e3e04343f5af9303f0000803e68f9544173f501407f75cdbfaae211c11c5c283c33fc7f3f2380543b0000003f68f95441ebda014033d4cdbfedfe11c19b4b1bbea7fe353f86cd2fbf0000403f68f95441f1ce01405ebbcebfb50a12c17f2866be5ce9b23b257279bf0000803f68f9544189d8014095a3cfbf1dff11c1e32f2abe3e0434bf5af930bf0000403f68f9544115f20140d104d0bfeee211c11c5c28bc33fc7fbf238054bb0000003f68f954419d0c02401da6cfbfabc611c19b4b1b3ea7fe35bf86cd2f3f0000803e68f954417b00e43f8b94cdbf9f0912c16498cbbe17286b3b57e36a3f000000001efe5841c634e43facadccbffa1312c185c673be9349353fb02a2a3f0000803e1efe5841c496e43fbb4eccbf482e12c1bacd793d61757f3fcd5fb83c0000003f1efe58410cede43f56afccbf204912c17b0aa63ed0fc333f3a0322bf0000403f1efe58411505e53fe596cdbfc95412c16498cb3e17286bbb57e36abf0000803f1efe5841cad0e43fc47dcebf6e4a12c185c6733e934935bfb02a2abf0000403f1efe5841cc6ee43fb5dccebf203012c1bacd79bd61757fbfcd5fb8bc0000003f1efe58418418e43f1a7ccebf481512c17b0aa6bed0fc33bf3a03223f0000803e1efe5841c701ca3f047fcbbfb67314c19aa03dbf1410d63b10f92b3f00000000d2025d411f52ca3f4298cabfc77a14c160b8fdbe45f4353f519eff3e0000803ed2025d419601cb3fee39cabfd28d14c1d692233d0fa57f3fdc9f0c3d0000003fd2025d4162a9cb3f499bcabfb0a114c11d510d3feb96333fe6c3e6be0000403fd2025d4139e7cb3f4c83cbbfbeaa14c19aa03d3f1410d6bb10f92bbf0000803fd2025d41e196cb3f0e6accbfada314c160b8fd3e45f435bf519effbe0000403fd2025d416ae7ca3f62c8ccbfa29014c1d69223bd0fa57fbfdc9f0cbd0000003fd2025d419e3fca3f0767ccbfc47c14c11d510dbfeb9633bfe6c3e63e0000803ed2025d41f2a0b93fead4cabf49f217c18f2d77bf1d4083399d40853e000000008707614114fdb93f3fedc9bfaff517c114332fbf4f0e353f4f8b353e0000803e8707614193dcba3f558dc9bf56fd17c1059017bbd8fc7f3f05401cbc0000003f8707614184bcbb3f5cedc9bfc20418c1055d2e3fa8f7343f565043be0000403f87076141b819bc3f14d5cabf9b0718c18f2d773f1d4083b99d4085be0000803f8707614196bdbb3fbfbccbbf350418c114332f3f4f0e35bf4f8b35be0000403f8707614117deba3fa91cccbf8efc17c10590173bd8fc7fbf05401c3c0000003f8707614126feb93fa2bccbbf22f517c1055d2ebfa8f734bf5650433e0000803e87076141f3a7b53ff895cbbf2df61bc105c97fbfd42fc0bbda03263d000000003b0c65413106b63fd2adcabf92f71bc1cc2836bf4cdd333ffb7fd43b0000803e3b0c654105edb63f894ccabf1ef91bc1ee97e9bb44de7f3ff61f00bd0000003f3b0c654137d5b73f1aabcabfeaf91bc1a693333fd5fc353fbdcf4fbd0000403f3b0c6541c336b83f2092cbbf7ff91bc105c97f3fd42fc03bda0326bd0000803f3b0c654185d8b73f467accbf1af81bc1cc28363f4cdd33bffb7fd4bb0000403f3b0c6541b1f1b63f8fdbccbf8ef61bc1ee97e93b44de7fbff61f003d0000003f3b0c65417f09b63ffe7cccbfc2f51bc1a69333bfd5fc35bfbdcf4f3d0000803e3b0c6541e5e4b43fd8b1ccbfaafa1fc10ee27fbfd017f6bbd2d7ef3c00000000f0106941d942b53f92c9cbbf0afc1fc18e7b36bf6f8a333ff29f8cbb0000803ef0106941a029b63fec67cbbf50fd1fc1360a0cbc93d47f3f38ec10bd0000003ff01069410b12b73f18c6cbbfbdfd1fc1ba63333f1b42363f4d803bbd0000403ff0106941f573b73fecacccbf10fd1fc10ee27f3fd017f63bd2d7efbc0000803ff01069410116b73f3295cdbfb0fb1fc18e7b363f6f8a33bff29f8c3b0000403ff01069413a2fb63fd8f6cdbf6afa1fc1360a0c3c93d47fbf38ec103d0000003ff0106941cf46b53fac98cdbffdf91fc1ba6333bf1b4236bf4d803b3d0000803ef0106941d874b23f13c8cdbf7df623c118327dbf986b9dbb9c12173e00000000a5156d41a1d1b23f05e0ccbf1cf923c1b2b534bf1210343ffa17ab3d0000803ea5156d41e8b5b33ffa7eccbfbcfd23c1229017bceae07f3f37a0f0bc0000003fa5156d41f69bb43fcbddccbfa80124c1e55c313f9fcd353f272000be0000403fa5156d4108fdb43fedc4cdbf930224c118327d3f986b9d3b9c1217be0000803fa5156d413fa0b43ffbaccebff4ff23c1b2b5343f121034bffa17abbd0000403fa5156d41f8bbb33f060ecfbf54fb23c12290173ceae07fbf37a0f03c0000003fa5156d41ead5b23f35afcebf68f723c1e55c31bf9fcd35bf2720003e0000803ea5156d41fb96a93fd37ccebfadc227c1ceeb68bfa8fff9383573d43e000000005a1a71412beda93f2695cdbff9c727c1549625bfa506353f3d3d923e0000803e5a1a714184bfaa3f3535cdbf20d427c1f88ba0bb34fb7f3ff73f35bc0000003f5a1a7141ce92ab3f3495cdbf02e027c1fad0233f51fc343f3e339abe0000403f5a1a714143ebab3fe77ccebfabe427c1ceeb683fa8fff9b83573d4be0000803f5a1a71411395ab3f9464cfbf5fdf27c15496253fa50635bf3d3d92be0000403f5a1a7141bac2aa3f85c4cfbf38d327c1f88ba03b34fb7fbff73f353c0000003f5a1a714170efa93f8664cfbf56c727c1fad023bf51fc34bf3e339a3e0000803e5a1a71411a259b3f81b5cebf8c552bc173145fbf18bf5a3af62afb3e000000000e1f75419c789b3fe1cdcdbf835b2bc116d81dbf002c353fce9cb03e0000803e0e1f754178429c3f196ecdbfc0692bc1e6bf0fbac2ff7f3fe0ff2ebb0000003f0e1f75416f0c9d3f45cecdbfed772bc132a51d3fc0dd343faf90b2be0000403f0e1f754132609d3f0db6cebfbc7d2bc173145f3f18bf5abaf62afbbe0000803f0e1f7541b00c9d3fad9dcfbfc5772bc116d81d3f002c35bfce9cb0be0000403f0e1f7541d4429c3f75fdcfbf88692bc1e6bf0f3ac2ff7fbfe0ff2e3b0000003f0e1f7541dd789b3f499dcfbf5b5b2bc132a51dbfc0dd34bfaf90b23e0000803e0e1f7541f0f3893f68b3cebf8db42ec1e13c4fbfa3e0763a634b163f00000000c323794125428a3fcbcbcdbf8dbb2ec1bc2212bf1f30353fb415d53e0000803ec3237941edfd8a3f096ccdbf8acc2ec1e84f113bc6ff7f3fe17fbb3a0000003fc323794148b98b3f3bcccdbf8fdd2ec1f9f0123f92d9343fd103d4be0000403fc323794176068c3f06b4cebfa5e42ec1e13c4f3fa3e076ba634b16bf0000803fc323794141b88b3fa39bcfbfa5dd2ec1bc22123f1f3035bfb415d5be0000403fc323794179fc8a3f65fbcfbfa8cc2ec1e84f11bbc6ff7fbfe17fbbba0000003fc32379411e418a3f339bcfbfa3bb2ec1f9f012bf92d934bfd103d43e0000803ec32379417adf6a3f4096cebf95c331c1033a37bf20e0123ae6c8323f0000000077287d415d6a6b3f9aaecdbfe3cb31c106f900bf2e1e353f2ec2fd3e0000803e77287d41aab66c3fc24ecdbf15e031c13ce4543b70ff7f3f30c0283b0000003f77287d41b7016e3fdcaecdbf57f431c19326023fb0eb343face8fbbe0000403f77287d4198896e3f9e96cebfcbfc31c1033a373f20e012bae6c832bf0000803f77287d41b5fe6d3f447ecfbf7df431c106f9003f2e1e35bf2ec2fdbe0000403f77287d4168b26c3f1cdecfbf4be031c13ce454bb70ff7fbf30c028bb0000003f77287d415b676b3f027ecfbf09cc31c1932602bfb0eb34bface8fb3e0000803e77287d4170a33a3f0879cebf235f34c1bcbd15bf5bff95385ca34f3f0000000096968041b5143b3f5591cdbfd36834c152fdd2be3907353f3017133f0000803e969680412e243c3f6031cdbf4d8034c1ebd70b3bc9ff7f3fe47fbb3a0000003f96968041d6323d3f5e91cdbfcf9734c1ff8ad43e8c01353fca8e12bf0000403f9696804120a23d3f1479cebf95a134c1bcbd153f5bff95b85ca34fbf0000803f96968041db303d3fc760cfbfe59734c152fdd23e390735bf301713bf0000403f9696804162213c3fbcc0cfbf6b8034c1ebd70bbbc9ff7fbfe47fbbba0000003f96968041ba123b3fbe60cfbfe96834c1ff8ad4be8c0135bfca8e123f0000803e96968041d3ac033f2271cebf2b5e36c18496cabe040048b7851b6b3f00000000f1988241c6f8033f6d89cdbf2f6936c17d3f8fbe2603353f2541263f0000803ef198824122b0043f7329cdbfc98336c10d00c8b60000803f000000000000003ff19882417f67053f6c89cdbf629e36c1bb408f3e7c06353f3e3d26bf0000403ff198824173b3053f2071cebf67a936c18496ca3e04004837851b6bbf0000803ff19882418067053fd558cfbf639e36c17d3f8f3e260335bf254126bf0000403ff198824124b0043fcfb8cfbfc98336c10d00c836000080bf000000000000003ff1988241c7f8033fd658cfbf306936c1bb408fbe7c0635bf3e3d263f0000803ef1988241000d8e3e2471cebf6c9b37c1ee197bbe0dfe47b8152f783f000000004b9b8441226b8e3e6f89cdbf0da737c18e9031be0001353f02822f3f0000803e4b9b8441684e8f3e7229cdbf22c337c10d0048b70000803f000000000000003f4b9b8441b131903e6989cdbf36df37c1718d313e7f06353f8a7c2fbf0000403f4b9b8441d88f903e1c71cebfd8ea37c1ee197b3e0dfe4738152f78bf0000803f4b9b8441b631903ed258cfbf37df37c12d90313e650135bfa2812fbf0000403f4b9b8441704e8f3eceb8cfbf23c337c10d004837000080bf0d00c8b80000003f4b9b8441276b8e3ed758cfbf0ea737c1718d31be7f0635bf8a7c2f3f0000803e4b9b844174c8043d2771cebfea6b38c117832cbe82ffaeb84b577c3f00000000a59d8641c3cd063d7089cdbfbd7738c134fef3bddc01353f9b71323f0000803ea59d8641dbae0b3d7229cdbf499438c10e0061b70000803f0d00c8380000003fa59d86410890103d6789cdbfd6b038c1cbf3f33d8f08353f076b32bf0000403fa59d86418a95123d1971cebfaabc38c117832c3e82ffae384b577cbf0000803fa59d86413b90103dd058cfbfd7b038c134fef33ddc0135bf9b7132bf0000403fa59d864123af0b3dceb8cfbf4b9438c10e006137000080bf0d00c8b80000003fa59d8641f6cd063dd958cfbfbe7738c1cbf3f3bd8f0835bf076b323f0000803ea59d8641790d5dbe2a71cebfecfe38c1649ef7bd14ffe0b8361f7e3f0000000000a08841aab05cbe7389cdbfd40a39c18a1dafbdc8ff343f19b6333f0000803e00a088418dd05bbe7329cdbf942739c10e0061b70000803f0d00c8380000003f00a088416bf05abe6689cdbf544439c18c14af3d250b353fcbaa33bf0000403f00a088418f935abe1871cebf3e5039c1649ef73d14ffe038361f7ebf0000803f00a088415ef05abecf58cfbf564439c18a1daf3dc8ff34bf19b633bf0000403f00a088417bd05bbecfb8cfbf962739c10e006137000080bf0d00c8b80000003f00a088419db05cbedc58cfbfd60a39c18c14afbd250b35bfcbaa333f0000803e00a088411b44eebe2b71cebf676939c15395b4bdb97f09b9bc007f3f000000005aa28a414422eebe7489cdbf597539c1456a7fbd81fd343fe257343f0000803e5aa28a418cd0edbe7229cdbf339239c10d0048b70000803f0d00c8380000003f5aa28a41d17eedbe6489cdbf0daf39c1ac5a7f3d050a353f664b34bf0000403f5aa28a41f55cedbe1571cebf01bb39c15395b43db97f0939bc007fbf0000803f5aa28a41cc7eedbecc58cfbf0faf39c1456a7f3d81fd34bfe25734bf0000403f5aa28a4184d0edbeceb8cfbf359239c10d004837000080bf0d00c8b80000003f5aa28a413f22eebedc58cfbf5b7539c1ac5a7fbd050a35bf664b343f0000803e5aa28a412f3837bf2e71cebf24b739c1566f83bd9d002fb9e6787f3f00000000b4a48c41df2b37bf7589cdbf1cc339c129eb39bdf8fe343f5fab343f0000803eb4a48c41220e37bf7229cdbf02e039c10d0048b70000803f0d0048390000003fb4a48c4164f036bf6289cdbfeafc39c13bd7393daa0c353fba9d34bf0000403fb4a48c4111e436bf1271cebfe4083ac1566f833d9d002f39e6787fbf0000803fb4a48c4161f036bfcb58cfbfecfc39c129eb393df8fe34bf5fab34bf0000403fb4a48c411e0e37bfceb8cfbf06e039c10d004837000080bf0d0048b90000003fb4a48c41dc2b37bfde58cfbf1ec339c13bd739bdaa0c35bfba9d343f0000803eb4a48c41a95e77bf3071cebf5eef39c10fa43cbd35fe47b975ba7f3f000000000fa78e41d35577bf7789cdbf59fb39c1806c05bd5efc343f56dc343f0000803e0fa78e417b4077bf7229cdbf47183ac10d00c8b60000803f0d0048390000003f0fa78e41232b77bf6089cdbf36353ac14b60053dbd0e353ffdc934bf0000403f0fa78e414b2277bf1071cebf34413ac10fa43c3d35fe473975ba7fbf0000803f0fa78e41212b77bfc958cfbf39353ac1806c053d5efc34bf56dc34bf0000403f0fa78e41794077bfceb8cfbf4b183ac10d00c836000080bf0d0048b90000003f0fa78e41d15577bfe058cfbf5cfb39c14b6005bdbd0e35bffdc9343f0000803e0fa78e4132d59bbf3271cebf70173ac1b91b05bd380161b963dd7f3f0000000069a9904114d29bbf7989cdbf6c233ac10349bcbc71fb343ff9f5343f0000803e69a990418dca9bbf7229cdbf5e403ac10d0048b70000803f0d0048390000003f69a9904105c39bbf5f89cdbf515d3ac1352fbc3cfb0e353f73e234bf0000403f69a99041e6bf9bbf0e71cebf50693ac1b91b053d3801613963dd7fbf0000803f69a9904104c39bbfc758cfbf545d3ac10349bc3c71fb34bff9f534bf0000403f69a990418bca9bbfceb8cfbf62403ac10d004837000080bf0d0048b90000003f69a9904113d29bbfe158cfbf6f233ac1352fbcbcfb0e35bf73e2343f0000803e69a99041e0eebbbf3571cebfd5333ac12ebfc1bc723f83b9aaed7f3f00000000c4ab92419becbbbf7a89cdbfd23f3ac1a90389bc8ffa343f5f02353f0000803ec4ab924120e7bbbf7229cdbfc55c3ac1000000000000803f090096390000003fc4ab9241a5e1bbbf5d89cdbfbb793ac12e02893c430f353fabed34bf0000403fc4ab924160dfbbbf0b71cebfbb853ac12ebfc13c723f8339aaed7fbf0000803fc4ab9241a4e1bbbfc658cfbfbe793ac1a81c893c8dfa34bf5d0235bf0000403fc4ab924120e7bbbfceb8cfbfcb5c3ac100000000000080bf090096b90000003fc4ab92419becbbbfe358cfbfd53f3ac12e0289bc430f35bfabed343f0000803ec4ab9241fd0bdcbf3871cebfcd4a3ac18c35bfbca5ff95b924ee7f3f000000001eae9441c009dcbf7d89cdbfc9563ac1514087bc6ef6343fd606353f0000803e1eae94415804dcbf7229cdbfbd733ac10d0048b70000803f090096390000003f1eae9441effedbbf5b89cdbfb2903ac11229873c5713353fefe934bf0000403f1eae9441b1fcdbbf0871cebfb39c3ac18c35bf3ca5ff953924ee7fbf0000803f1eae9441eefedbbfc358cfbfb7903ac15140873c6ef634bfd60635bf0000403f1eae94415604dcbfceb8cfbfc3733ac10d004837000080bf090096b90000003f1eae9441bf09dcbfe558cfbfce563ac1122987bc571335bfefe9343f0000803e1eae94414445fcbf2071cebf43763ac17d47e6bd0000000065607e3f0000000078b096417a3afcbf6c89cdbf2e823ac153d6a2bd5203353fb4e0333f0000803e78b096416c20fcbf7229cdbff69e3ac1000000000000803f000000000000003f78b096415e06fcbf6c89cdbfbebb3ac153d6a23d5203353fb4e033bf0000403f78b0964194fbfbbf2071cebfa9c73ac17d47e63d0000000065607ebf0000803f78b096415e06fcbfd458cfbfbebb3ac153d6a23d520335bfb4e033bf0000403f78b096416c20fcbfceb8cfbff69e3ac100000000000080bf000000000000003f78b096417a3afcbfd458cfbf2e823ac153d6a2bd520335bfb4e0333f0000803e78b096414ca8893c3a8c333ad3381dc1e32452be5ce4673f26c2bd3e0000803f0000003fab32b43c2cd3773b0c4c1dc1e32452be5ce4673f26c2bd3e7a825a3f7a825a3ffc8cf13ce361ad3b2c4a1dc1e32452be5ce4673f26c2bd3effffff3e0000803f59e30e3ddadf8d3b4e341dc1e32452be5ce4673f26c2bd3e1af6153e7a825a3fda7b0f3ddf61bf3a3f171dc1e32452be5ce4673f26c2bd3e00000000ffffff3e546df43c5c7ed6ba06041dc1e32452be5ce4673f26c2bd3e1ef6153e16f6153e0413b73cc62f4ebbe6051dc1e32452be5ce4673f26c2bd3e0000003f000000004cd98a3cb22b0fbbc41b1dc1e32452be5ce4673f26c2bd3e7c825a3f22f6153e4445fcbf2071cebf43763ac169607ebf00000000cd46e6bd000000000000003f7a3afcbf6c89cdbf2e823ac169607ebf00000000cd46e6bd1af6153e7a825a3f6c20fcbf7229cdbff69e3ac169607ebf00000000cd46e6bd0000003f0000803f5e06fcbf6c89cdbfbebb3ac169607ebf00000000cd46e6bd7a825a3f7a825a3f94fbfbbf2071cebfa9c73ac169607ebf00000000cd46e6bd0000803fffffff3e5e06fcbfd458cfbfbebb3ac169607ebf00000000cd46e6bd78825a3f16f6153e6c20fcbfceb8cfbff69e3ac169607ebf00000000cd46e6bd0000003f000000007a3afcbfd458cfbf2e823ac169607ebf00000000cd46e6bd12f6153e22f6153e + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: -0.014277935, y: -0.8108885, z: -4.272346} + m_Extent: {x: 3.053774, y: 0.81617975, z: 7.401399} + m_MeshUsageFlags: 0 + m_CookingOptions: 30 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + m_MeshMetrics[0]: 1 + m_MeshMetrics[1]: 1 + m_MeshOptimizationFlags: 1 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: diff --git a/Assets/Quiz/QuizScene/SplineExtrude_Spline 1.asset.meta b/Assets/Quiz/QuizScene/SplineExtrude_Spline 1.asset.meta new file mode 100644 index 0000000..0fe3764 --- /dev/null +++ b/Assets/Quiz/QuizScene/SplineExtrude_Spline 1.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 028092ce0a797424db309b9ea103879e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4300000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/QuizScene/SplineExtrude_Spline.asset b/Assets/Quiz/QuizScene/SplineExtrude_Spline.asset new file mode 100644 index 0000000..636d757 --- /dev/null +++ b/Assets/Quiz/QuizScene/SplineExtrude_Spline.asset @@ -0,0 +1,167 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!43 &4300000 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SplineExtrude_Spline + serializedVersion: 11 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 2196 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 384 + localAABB: + m_Center: {x: -0.93685836, y: -0.000000049825758, z: 1.7808053} + m_Extent: {x: 0.9401346, y: 0.010000065, z: 1.7902534} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_BonesAABB: [] + m_VariableBoneCountWeights: + m_Data: + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 0 + m_KeepIndices: 0 + m_IndexFormat: 0 + m_IndexBuffer: 00000100080001000900080001000200090002000a000900020003000a0003000b000a00030004000b0004000c000b00040005000c0005000d000c00050006000d0006000e000d00060007000e0007000f000e00070000000f00000008000f0008000900100009001100100009000a0011000a00120011000a000b0012000b00130012000b000c0013000c00140013000c000d0014000d00150014000d000e0015000e00160015000e000f0016000f00170016000f000800170008001000170010001100180011001900180011001200190012001a001900120013001a0013001b001a00130014001b0014001c001b00140015001c0015001d001c00150016001d0016001e001d00160017001e0017001f001e00170010001f00100018001f0018001900200019002100200019001a0021001a00220021001a001b0022001b00230022001b001c0023001c00240023001c001d0024001d00250024001d001e0025001e00260025001e001f0026001f00270026001f001800270018002000270020002100280021002900280021002200290022002a002900220023002a0023002b002a00230024002b0024002c002b00240025002c0025002d002c00250026002d0026002e002d00260027002e0027002f002e00270020002f00200028002f0028002900300029003100300029002a0031002a00320031002a002b0032002b00330032002b002c0033002c00340033002c002d0034002d00350034002d002e0035002e00360035002e002f0036002f00370036002f002800370028003000370030003100380031003900380031003200390032003a003900320033003a0033003b003a00330034003b0034003c003b00340035003c0035003d003c00350036003d0036003e003d00360037003e0037003f003e00370030003f00300038003f0038003900400039004100400039003a0041003a00420041003a003b0042003b00430042003b003c0043003c00440043003c003d0044003d00450044003d003e0045003e00460045003e003f0046003f00470046003f003800470038004000470040004100480041004900480041004200490042004a004900420043004a0043004b004a00430044004b0044004c004b00440045004c0045004d004c00450046004d0046004e004d00460047004e0047004f004e00470040004f00400048004f0048004900500049005100500049004a0051004a00520051004a004b0052004b00530052004b004c0053004c00540053004c004d0054004d00550054004d004e0055004e00560055004e004f0056004f00570056004f004800570048005000570050005100580051005900580051005200590052005a005900520053005a0053005b005a00530054005b0054005c005b00540055005c0055005d005c00550056005d0056005e005d00560057005e0057005f005e00570050005f00500058005f0058005900600059006100600059005a0061005a00620061005a005b0062005b00630062005b005c0063005c00640063005c005d0064005d00650064005d005e0065005e00660065005e005f0066005f00670066005f005800670058006000670060006100680061006900680061006200690062006a006900620063006a0063006b006a00630064006b0064006c006b00640065006c0065006d006c00650066006d0066006e006d00660067006e0067006f006e00670060006f00600068006f0068006900700069007100700069006a0071006a00720071006a006b0072006b00730072006b006c0073006c00740073006c006d0074006d00750074006d006e0075006e00760075006e006f0076006f00770076006f006800770068007000770070007100780071007900780071007200790072007a007900720073007a0073007b007a00730074007b0074007c007b00740075007c0075007d007c00750076007d0076007e007d00760077007e0077007f007e00770070007f00700078007f0078007900800079008100800079007a0081007a00820081007a007b0082007b00830082007b007c0083007c00840083007c007d0084007d00850084007d007e0085007e00860085007e007f0086007f00870086007f007800870078008000870080008100880081008900880081008200890082008a008900820083008a0083008b008a00830084008b0084008c008b00840085008c0085008d008c00850086008d0086008e008d00860087008e0087008f008e00870080008f00800088008f0088008900900089009100900089008a0091008a00920091008a008b0092008b00930092008b008c0093008c00940093008c008d0094008d00950094008d008e0095008e00960095008e008f0096008f00970096008f008800970088009000970090009100980091009900980091009200990092009a009900920093009a0093009b009a00930094009b0094009c009b00940095009c0095009d009c00950096009d0096009e009d00960097009e0097009f009e00970090009f00900098009f0098009900a0009900a100a00099009a00a1009a00a200a1009a009b00a2009b00a300a2009b009c00a3009c00a400a3009c009d00a4009d00a500a4009d009e00a5009e00a600a5009e009f00a6009f00a700a6009f009800a7009800a000a700a000a100a800a100a900a800a100a200a900a200aa00a900a200a300aa00a300ab00aa00a300a400ab00a400ac00ab00a400a500ac00a500ad00ac00a500a600ad00a600ae00ad00a600a700ae00a700af00ae00a700a000af00a000a800af00a800a900b000a900b100b000a900aa00b100aa00b200b100aa00ab00b200ab00b300b200ab00ac00b300ac00b400b300ac00ad00b400ad00b500b400ad00ae00b500ae00b600b500ae00af00b600af00b700b600af00a800b700a800b000b700b000b100b800b100b900b800b100b200b900b200ba00b900b200b300ba00b300bb00ba00b300b400bb00b400bc00bb00b400b500bc00b500bd00bc00b500b600bd00b600be00bd00b600b700be00b700bf00be00b700b000bf00b000b800bf00b800b900c000b900c100c000b900ba00c100ba00c200c100ba00bb00c200bb00c300c200bb00bc00c300bc00c400c300bc00bd00c400bd00c500c400bd00be00c500be00c600c500be00bf00c600bf00c700c600bf00b800c700b800c000c700c000c100c800c100c900c800c100c200c900c200ca00c900c200c300ca00c300cb00ca00c300c400cb00c400cc00cb00c400c500cc00c500cd00cc00c500c600cd00c600ce00cd00c600c700ce00c700cf00ce00c700c000cf00c000c800cf00c800c900d000c900d100d000c900ca00d100ca00d200d100ca00cb00d200cb00d300d200cb00cc00d300cc00d400d300cc00cd00d400cd00d500d400cd00ce00d500ce00d600d500ce00cf00d600cf00d700d600cf00c800d700c800d000d700d000d100d800d100d900d800d100d200d900d200da00d900d200d300da00d300db00da00d300d400db00d400dc00db00d400d500dc00d500dd00dc00d500d600dd00d600de00dd00d600d700de00d700df00de00d700d000df00d000d800df00d800d900e000d900e100e000d900da00e100da00e200e100da00db00e200db00e300e200db00dc00e300dc00e400e300dc00dd00e400dd00e500e400dd00de00e500de00e600e500de00df00e600df00e700e600df00d800e700d800e000e700e000e100e800e100e900e800e100e200e900e200ea00e900e200e300ea00e300eb00ea00e300e400eb00e400ec00eb00e400e500ec00e500ed00ec00e500e600ed00e600ee00ed00e600e700ee00e700ef00ee00e700e000ef00e000e800ef00e800e900f000e900f100f000e900ea00f100ea00f200f100ea00eb00f200eb00f300f200eb00ec00f300ec00f400f300ec00ed00f400ed00f500f400ed00ee00f500ee00f600f500ee00ef00f600ef00f700f600ef00e800f700e800f000f700f000f100f800f100f900f800f100f200f900f200fa00f900f200f300fa00f300fb00fa00f300f400fb00f400fc00fb00f400f500fc00f500fd00fc00f500f600fd00f600fe00fd00f600f700fe00f700ff00fe00f700f000ff00f000f800ff00f800f9000001f90001010001f900fa000101fa0002010101fa00fb000201fb0003010201fb00fc000301fc0004010301fc00fd000401fd0005010401fd00fe000501fe0006010501fe00ff000601ff0007010601ff00f8000701f8000001070100010101080101010901080101010201090102010a010901020103010a0103010b010a01030104010b0104010c010b01040105010c0105010d010c01050106010d0106010e010d01060107010e0107010f010e01070100010f01000108010f0108010901100109011101100109010a0111010a01120111010a010b0112010b01130112010b010c0113010c01140113010c010d0114010d01150114010d010e0115010e01160115010e010f0116010f01170116010f010801170108011001170110011101180111011901180111011201190112011a011901120113011a0113011b011a01130114011b0114011c011b01140115011c0115011d011c01150116011d0116011e011d01160117011e0117011f011e01170110011f01100118011f0118011901200119012101200119011a0121011a01220121011a011b0122011b01230122011b011c0123011c01240123011c011d0124011d01250124011d011e0125011e01260125011e011f0126011f01270126011f011801270118012001270120012101280121012901280121012201290122012a012901220123012a0123012b012a01230124012b0124012c012b01240125012c0125012d012c01250126012d0126012e012d01260127012e0127012f012e01270120012f01200128012f0128012901300129013101300129012a0131012a01320131012a012b0132012b01330132012b012c0133012c01340133012c012d0134012d01350134012d012e0135012e01360135012e012f0136012f01370136012f012801370128013001370130013101380131013901380131013201390132013a013901320133013a0133013b013a01330134013b0134013c013b01340135013c0135013d013c01350136013d0136013e013d01360137013e0137013f013e01370130013f01300138013f0138013901400139014101400139013a0141013a01420141013a013b0142013b01430142013b013c0143013c01440143013c013d0144013d01450144013d013e0145013e01460145013e013f0146013f01470146013f013801470138014001470140014101480141014901480141014201490142014a014901420143014a0143014b014a01430144014b0144014c014b01440145014c0145014d014c01450146014d0146014e014d01460147014e0147014f014e01470140014f01400148014f0148014901500149015101500149014a0151014a01520151014a014b0152014b01530152014b014c0153014c01540153014c014d0154014d01550154014d014e0155014e01560155014e014f0156014f01570156014f014801570148015001570150015101580151015901580151015201590152015a015901520153015a0153015b015a01530154015b0154015c015b01540155015c0155015d015c01550156015d0156015e015d01560157015e0157015f015e01570150015f01500158015f0158015901600159016101600159015a0161015a01620161015a015b0162015b01630162015b015c0163015c01640163015c015d0164015d01650164015d015e0165015e01660165015e015f0166015f01670166015f015801670158016001670160016101680161016901680161016201690162016a016901620163016a0163016b016a01630164016b0164016c016b01640165016c0165016d016c01650166016d0166016e016d01660167016e0167016f016e01670160016f01600168016f01700172017101700173017201700174017301700175017401700176017501700177017601780179017a0178017a017b0178017b017c0178017c017d0178017d017e0178017e017f01 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 384 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 12 + format: 0 + dimension: 3 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 24 + format: 0 + dimension: 2 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 12288 + _typelessdata: 5cb5563b0000000033cc1a3cb0bda73e0000000010df713f000000000000000060d2173b6ab4e73bbceada3bb6386d3ef304353f63072b3f0000803e0000000026751daf0ad7233c1b0be3af0c0776b20000803fad6031b30000003f0000000060d217bb6ab4e73bbceadabbb6386dbef304353f63072bbf0000403f000000005cb556bb4f4e70b033cc1abcb0bda7be2ebdbbb310df71bf0000803f0000000060d217bb6cb4e7bbb9eadabbb8386dbef60435bf62072bbf0000403f00000000ded22b2e0ad723bc22c2f72ebe3c8631000080bfab8f41320000003f0000000066d2173b65b4e7bbc0eada3bc0386d3eef0435bf66072b3f0000803e00000000b2e87fbe000000008c4a573d25222b3e0000000050667c3f000000004bc3823e823480be6ab4e73b88764b3d4004f23df304353f3c79323f0000803e4bc3823e66cf80be0ad7233c41e82e3d000000000000803f000000000000003f4bc3823e4a6a81be6ab4e73bfa59123d4004f2bdf304353f3c7932bf0000403f4bc3823e73aa81be4f4e70b0f685063d25222bbe2bbdbbb350667cbf0000803f4bc3823e4a6a81be6cb4e7bbfb59123d4304f2bdf70435bf387932bf0000403f4bc3823e66cf80be0ad723bc41e82e3d00000000000080bf000000000000003f4bc3823e823480be65b4e7bb88764b3d4204f23df00435bf3d79323f0000803e4bc3823efe66ffbe000000002ac7d73d8c2f863e000000003c0d773f000000004bc3023f9bcbffbe6ab4e73b3cfdd13d77c43d3ef204353f24b12e3f0000803e4bc3023f415f00bf0ad7233c8b03c43d000000000000803f000000000000003f4bc3023fb4d800bf6ab4e73bda09b63db6c33dbef904353f2ab12ebf0000403f4bc3023f030b01bf4f4e70b0ec3fb03d8c2f86be28bdbbb33c0d77bf0000803f4bc3023fb4d800bf6cb4e7bbda09b63db5c33dbef90435bf29b12ebf0000403f4bc3023f415f00bf0ad723bc8b03c43d00000000000080bf000000000000003f4bc3023f9bcbffbe65b4e7bb3cfdd13d79c43d3ef00435bf26b12e3f0000803e4bc3023f9b7b3bbf0000000003974b3e941d093f00000000fe2e583f00000000f124443f6ae23bbf6ab4e73ba10e493e5fe9c13eea04353f5fdd183f0000803ef124443f9fda3cbf0ad7233c4bf1423e000000000000803f000000000000003ff124443fd4d23dbf6ab4e73bf5d33c3e5fe9c1beea04353f5fdd18bf0000403ff124443fa3393ebf4f4e70b0934b3a3e941d09bf33bdbbb3fe2e58bf0000803ff124443fd4d23dbf6cb4e7bbf5d33c3e5ee9c1beeb0435bf5edd18bf0000403ff124443f9fda3cbf0ad723bc4bf1423e00000000000080bf000000000000003ff124443f6ae23bbf65b4e7bba10e493e61e9c13ee90435bf61dd183f0000803ef124443f375b54bf000000003127ce3efec67c3f0000000019f821be000000004bc3823fc01855bf6ab4e73bea63ce3e80bd323f0705353f2a0fe5bd0000803e4bc3823f53e256bf0ad7233c83f6ce3e000000000000803f000000000000003f4bc3823fe6ab58bf6ab4e73b1c89cf3e80bd32bf0705353f2a0fe53d0000403f4bc3823f6f6959bf4f4e70b0d5c5cf3efec67cbf38bdbbb319f8213e0000803f4bc3823fe6ab58bf6cb4e7bb1c89cf3e80bd32bf090535bf2a0fe53d0000403f4bc3823f53e256bf0ad723bc83f6ce3e00000000000080bf000000000000003f4bc3823fc01855bf65b4e7bbea63ce3e82bd323f050535bf2c0fe5bd0000803e4bc3823f5c9f3ebf000000009dd7233f706d663f00000000e40fdfbe000000001d74a33f234c3fbf6ab4e73b3d2b243fbbef223ff604353febba9dbe0000803e1d74a33f41ed40bf0ad7233c22f5243f000000000000803f000000000000003f1d74a33f5f8e42bf6ab4e73b07bf253fbbef22bff604353febba9d3e0000403f1d74a33f263b43bf4f4e70b0a712263f706d66bf2bbdbbb3e40fdf3e0000803f1d74a33f5f8e42bf6cb4e7bb07bf253fbaef22bff70435bfeaba9d3e0000403f1d74a33f41ed40bf0ad723bc22f5243f00000000000080bf000000000000003f1d74a33f234c3fbf65b4e7bb3d2b243fbcef223ff40435bfecba9dbe0000803e1d74a33f278a1fbf000000005f125d3f79bd5c3f0000000012a701bf00000000f124c43faa2f20bf6ab4e73b96735d3f3c161c3ffc04353f195bb7be0000803ef124c43f3fbf21bf0ad7233c485e5e3f000000000000803f000000000000003ff124c43fd44e23bf6ab4e73bfa485f3f3c161cbffc04353f195bb73e0000403ff124c43f57f423bf4f4e70b031aa5f3f79bd5cbf43bdbbb312a7013f0000803ff124c43fd44e23bf6cb4e7bbfa485f3f3c161cbffd0435bf195bb73e0000403ff124c43f3fbf21bf0ad723bc485e5e3f00000000000080bf000000000000003ff124c43faa2f20bf65b4e7bb96735d3f3e161c3ffa0435bf1b5bb7be0000803ef124c43fe1f2fabe000000009a6b8a3f58e1583f00000000c90208bf00000000c3d5e43f1d38fcbe6ab4e73b989e8a3f9d5b193f0005353fae58c0be0000803ec3d5e43f4e49ffbe0ad7233cb2198b3f000000000000803f000000000000003fc3d5e43f3f2d01bf6ab4e73bcc948b3f7e5b19bf1605353fc658c03e0000403fc3d5e43fdecf01bf4f4e70b0cac78b3f66e158bf1bbdbbb3b202083f0000803fc3d5e43f3f2d01bf6cb4e7bbcc948b3f7d5b19bf170535bfc558c03e0000403fc3d5e43f4e49ffbe0ad723bcb2198b3f00000000000080bf000000000000003fc3d5e43f1d38fcbe65b4e7bb989e8a3f9f5b193fff0435bfb158c0be0000803ec3d5e43f462ab5be000000003b12a63f2cb6583f00000000884708bf000000004bc30240426fb6be6ab4e73b5245a63fdd3c193fe604353f02bbc0be0000803e4bc30240d67fb9be0ad7233cabc0a63f000000000000803f000000000000003f4bc302406a90bcbe6ab4e73b043ca73fdd3c19bfe604353f02bbc03e0000403f4bc3024066d5bdbe4f4e70b01b6fa73f2cb658bf38bdbbb38847083f0000803f4bc302406a90bcbe6cb4e7bb043ca73fdd3c19bfe70435bf02bbc03e0000403f4bc30240d67fb9be0ad723bcabc0a63f00000000000080bf000000000000003f4bc30240426fb6be65b4e7bb5245a63fdf3c193fe40435bf05bbc0be0000803e4bc30240796861be00000000f3f8c13ff1815c3f00000000360c02bf00000000b41b1340d3fd63be6ab4e73bb429c23f11ec1b3fe504353fc2eab7be0000803eb41b1340783a6abe0ad7233c699fc23f000000000000803f000000000000003fb41b13401d7770be6ab4e73b1e15c33f11ec1bbfe504353fc2eab73e0000403fb41b1340770c73be4f4e70b0df45c33ff1815cbf36bdbbb3360c023f0000803fb41b13401d7770be6cb4e7bb1e15c33f10ec1bbfe50435bfc1eab73e0000403fb41b1340783a6abe0ad723bc699fc23f00000000000080bf000000000000003fb41b1340d3fd63be65b4e7bbb429c23f13ec1b3fe30435bfc4eab7be0000803eb41b1340071ac9bd0000000005eade3f33ee673f00000000ebbdd8be000000001d7423404089cebd6ab4e73ba612df3feeff233ff104353f5e4299be0000803e1d742340f7a7dbbd0ad7233cbc74df3f000000000000803f000000000000003f1d742340aec6e8bd6ab4e73bd2d6df3feeff23bff104353f5e42993e0000403f1d742340e735eebd4f4e70b073ffdf3f33ee67bf29bdbbb3ebbdd83e0000803f1d742340aec6e8bd6cb4e7bbd2d6df3feeff23bff20435bf5e42993e0000403f1d742340f7a7dbbd0ad723bcbc74df3f00000000000080bf000000000000003f1d7423404089cebd65b4e7bba612df3ff0ff233fef0435bf604299be0000803e1d7423406ecf0fbd00000000d8f3fe3fec6e7b3f00000000c58d403e0000000087cc3340da971bbd6ab4e73bcce1fe3f43ca313ff404353f4128083e0000803e87cc3340220a38bd0ad7233c3ab6fe3f000000000000803f000000000000003f87cc33406a7c54bd6ab4e73ba88afe3f43ca31bff404353f412808be0000403f87cc3340d64460bd4f4e70b09c78fe3fec6e7bbf33bdbbb3c58d40be0000803f87cc33406a7c54bd6cb4e7bba88afe3f43ca31bff60435bf412808be0000403f87cc3340220a38bd0ad723bc3ab6fe3f00000000000080bf000000000000003f87cc3340d9971bbd65b4e7bbcce1fe3f49ca313fef0435bf4028083e0000803e87cc3340f8e185be00000000cc4e0540b6c6aabd00000000c11b7f3f00000000f1244440f5c185be6ab4e73bfa1e0540098471bde104353f9f63343f0000803ef1244440ac7485be0ad7233c87ab0440000000000000803f000000000000003ff1244440632785be6ab4e73b143804400984713de104353f9f6334bf0000403ff1244440600785be4f4e70b042080440b6c6aa3d23bdbbb3c11b7fbf0000803ff1244440632785be6cb4e7bb143804400984713de30435bf9f6334bf0000403ff1244440ac7485be0ad723bc87ab044000000000000080bf000000000000003ff1244440f5c185be65b4e7bbfa1e05400c8471bde00435bfa163343f0000803ef12444407ab103bf0000000048670240e46870be0000000040d8783f000000005a7d5440698403bf6ab4e73ba2380240effe29be2505353f81f52f3f0000803e5a7d54409d1703bf0ad7233c05c80140000000000000803f000000000000003f5a7d5440d1aa02bf6ab4e73b68570140effe293e2505353f81f52fbf0000403f5a7d5440c07d02bf4f4e70b0c2280140e468703ed9bcbbb340d878bf0000803f5a7d5440d1aa02bf6cb4e7bb68570140eefe293e250535bf80f52fbf0000403f5a7d54409d1703bf0ad723bc05c8014000000000000080bf000000000000003f5a7d5440698403bf65b4e7bba2380240f1fe29be230535bf83f52f3f0000803e5a7d5440860143bf000000009d3dfc3f0e1b8fbe000000000bcc753f00000000c3d56440e0cb42bf6ab4e73b76e1fb3f0a634abe0a05353fd7cd2d3f0000803ec3d56440594a42bf0ad7233cfe02fb3f000000000000803f000000000000003fc3d56440d2c841bf6ab4e73b8624fa3f0a634a3e0a05353fd7cd2dbf0000403fc3d564402c9341bf4f4e70b05fc8f93f0e1b8f3e0cbdbbb30bcc75bf0000803fc3d56440d2c841bf6cb4e7bb8624fa3f09634a3e0b0535bfd5cd2dbf0000403fc3d56440594a42bf0ad723bcfe02fb3f00000000000080bf000000000000003fc3d56440e0cb42bf65b4e7bb76e1fb3f0b634abe070535bfd8cd2d3f0000803ec3d5644034da80bf00000000c2def23fc6bd93be00000000451c753f000000002c2e754083be80bf6ab4e73bdd82f23fa0f250bef304353f88512d3f0000803e2c2e7540a67b80bf0ad7233c04a5f13f000000000000803f000000000000003f2c2e7540c93880bf6ab4e73b2bc7f03fa0f2503ef304353f88512dbf0000403f2c2e7540181d80bf4f4e70b0466bf03fc6bd933e0dbdbbb3451c75bf0000803f2c2e7540c93880bf6cb4e7bb2bc7f03fa0f2503ef50435bf88512dbf0000403f2c2e7540a67b80bf0ad723bc04a5f13f00000000000080bf000000000000003f2c2e754083be80bf65b4e7bbdd82f23fa3f250bef10435bf8a512d3f0000803e2c2e75406a3ba0bf000000005eb4e93f69cd87be00000000add4763f000000004bc38240f521a0bf6ab4e73bd457e93f930d40bee704353f35892e3f0000803e4bc3824080e49fbf0ad7233c6c78e83f000000000000803f000000000000003f4bc382400ba79fbf6ab4e73b0499e73f930d403ee704353f35892ebf0000403f4bc38240968d9fbf4f4e70b07a3ce73f69cd873ee2bcbbb3add476bf0000803f4bc382400ba79fbf6cb4e7bb0499e73f920d403ee70435bf33892ebf0000403f4bc3824080e49fbf0ad723bc6c78e83f00000000000080bf000000000000003f4bc38240f521a0bf65b4e7bbd457e93f950d40bee40435bf36892e3f0000803e4bc38240b8ecbfbf000000001b76e23ff82b17be00000000ea317d3f0000000080ef8a408ddebfbf6ab4e73b2e17e23f75cbd5bd1f05353ffc08333f0000803e80ef8a4058bcbfbf0ad7233c0432e13f000000000000803f000000000000003f80ef8a40239abfbf6ab4e73bda4ce03f75cbd53d1f05353ffc0833bf0000403f80ef8a40f88bbfbf4f4e70b0ededdf3ff82b173e24bdbbb3ea317dbf0000803f80ef8a40239abfbf6cb4e7bbda4ce03f73cbd53d200535bffb0833bf0000403f80ef8a4058bcbfbf0ad723bc0432e13f00000000000080bf000000000000003f80ef8a408ddebfbf65b4e7bb2e17e23f77cbd5bd1e0535bffe08333f0000803e80ef8a40a18ed7bf00000000fdbdec3ff6f77f3f00000000eb51803c00000000b41b934098eed7bf6ab4e73b7cbcec3f37ff343f0105353f0f72353c0000803eb41b934045d6d8bf0ad7233cdbb8ec3f000000000000803f000000000000003fb41b9340f2bdd9bf6ab4e73b3ab5ec3f37ff34bf0105353f0f7235bc0000403fb41b9340e91ddabf4f4e70b0b9b3ec3ff6f77fbf0fbdbbb3eb5180bc0000803fb41b9340f2bdd9bf6cb4e7bb3ab5ec3f36ff34bf020535bf0e7235bc0000403fb41b934045d6d8bf0ad723bcdbb8ec3f00000000000080bf000000000000003fb41b934098eed7bf65b4e7bb7cbcec3f38ff343fff0435bf1072353c0000803eb41b93409690cdbf000000000382054059a5673f00000000acf4d9be00000000e9479b406fe7cdbf6ab4e73b7196054048cc233f3a05353f5c1d9abe0000803ee9479b4018b9cebf0ad7233cc2c70540000000000000803f000000000000003fe9479b40c18acfbf6ab4e73b13f9054048cc23bf3a05353f5c1d9a3e0000403fe9479b409ae1cfbf4f4e70b0810d064059a567bf01bdbbb3acf4d93e0000803fe9479b40c18acfbf6cb4e7bb13f9054047cc23bf3a0535bf5b1d9a3e0000403fe9479b4018b9cebf0ad723bcc2c7054000000000000080bf000000000000003fe9479b406ee7cdbf65b4e7bb71960540c0cc233fdd0435bf111d9abe0000803ee9479b404551bfbf00000000ca31144042fc633f0000000027e2e8be000000001d74a340bfa6bfbf6ab4e73b9e471440a435213f1205353f5caca4be0000803e1d74a3401875c0bf0ad7233c507c1440000000000000803f000000000000003f1d74a3407143c1bf6ab4e73b02b11440a43521bf1205353f5caca43e0000403f1d74a340eb98c1bf4f4e70b0d6c6144042fc63bfb2bcbbb327e2e83e0000803f1d74a3407143c1bf6cb4e7bb02b11440a33521bf120535bf5baca43e0000403f1d74a3401875c0bf0ad723bc507c144000000000000080bf000000000000003f1d74a340bea6bfbf65b4e7bb9e4714401e36213fb70435bf0daca4be0000803e1d74a34072abafbf000000000c82224042b75c3f00000000a4b101bf0000000052a0ab4031feafbf6ab4e73b5c9a224000121c3f0f05353f3c69b7be0000803e52a0ab40f6c5b0bf0ad7233c0dd52240000000000000803f000000000000003f52a0ab40bb8db1bf6ab4e73bbe0f234000121cbf0f05353f3c69b73e0000403f52a0ab407ae0b1bf4f4e70b00e28234042b75cbf4bbdbbb3a4b1013f0000803f52a0ab40bb8db1bf6cb4e7bbbe0f2340ff111cbf0f0535bf3b69b73e0000403f52a0ab40f6c5b0bf0ad723bc0dd5224000000000000080bf000000000000003f52a0ab4031feafbf65b4e7bb5c9a224002121c3f0d0535bf3e69b7be0000803e52a0ab4095f59dbf000000005029304024774e3f00000000a25a17bf0000000087ccb340fd429ebf6ab4e73baf4530401efe113fd304353fba0cd6be0000803e87ccb340dcfd9ebf0ad7233c2e8a3040000000000000803f000000000000003f87ccb340bbb89fbf6ab4e73badce30401efe11bfd304353fba0cd63e0000403f87ccb3402306a0bf4f4e70b00ceb304024774ebfe1bcbbb3a25a173f0000803f87ccb340bbb89fbf6cb4e7bbadce30401efe11bfd50435bfba0cd63e0000403f87ccb340dcfd9ebf0ad723bc2e8a304000000000000080bf000000000000003f87ccb340fd429ebf65b4e7bbaf45304020fe113fd10435bfbd0cd6be0000803e87ccb34078b187bf0000000007a23b40e44bfc3e00000000e9c25ebf00000000bcf8bb40c3e087bf6ab4e73bc8cb3b40f665b23e9704353fb0841dbf0000803ebcf8bb40f05288bf0ad7233c98303c40000000000000803f000000000000003fbcf8bb401dc588bf6ab4e73b68953c40f665b2be9704353fb0841d3f0000403fbcf8bb4068f488bf4f4e70b029bf3c40e44bfcbe78bdbbb3e9c25e3f0000803fbcf8bb401dc588bf6cb4e7bb68953c40f565b2be980435bfaf841d3f0000403fbcf8bb40f05288bf0ad723bc98303c4000000000000080bf000000000000003fbcf8bb40c3e087bf65b4e7bbc8cb3b40f865b23e960435bfb2841dbf0000803ebcf8bb4092fa64bf00000000db173440cfa967bf00000000b6e1d9be00000000f124c440dd4c64bf6ab4e73b472c34408fcf23bff604353fa3109abe0000803ef124c44082a962bf0ad7233c945d3440000000000000803f000000000000003ff124c440270661bf6ab4e73be18e34408fcf233ff604353fa3109a3e0000403ff124c440725860bf4f4e70b04da33440cfa9673fd2bcbbb3b6e1d93e0000803ff124c440270661bf6cb4e7bbe18e34408fcf233ff80435bfa3109a3e0000403ff124c44082a962bf0ad723bc945d344000000000000080bf000000000000003ff124c440dd4c64bf65b4e7bb472c344091cf23bff50435bfa5109abe0000803ef124c440dd484ebf00000000d4da2440099c74bf00000000920697be000000002551cc4074914dbf6ab4e73bfce824400cf72cbf1905353f2d9355be0000803e2551cc40aad64bbf0ad7233c280b2540000000000000803f000000000000003f2551cc40e01b4abf6ab4e73b542d25400cf72c3f1905353f2d93553e0000403f2551cc40776449bf4f4e70b07c3b2540099c743f44bdbbb39206973e0000803f2551cc40e01b4abf6cb4e7bb542d25400bf72c3f190535bf2b93553e0000403f2551cc40aad64bbf0ad723bc280b254000000000000080bf000000000000003f2551cc4074914dbf65b4e7bbfce824400ef72cbf170535bf2f9355be0000803e2551cc404a563dbf000000000b1a1540124879bf000000008d0e69be000000005a7dd440609b3cbf6ab4e73bf7241540b34430bf0a05353f95cb24be0000803e5a7dd44021d83abf0ad7233c553f1540000000000000803f000000000000003f5a7dd440e21439bf6ab4e73bb3591540b344303f0a05353f95cb243e0000403f5a7dd440f85938bf4f4e70b09f6415401248793f38bdbbb38d0e693e0000803f5a7dd440e21439bf6cb4e7bbb3591540b244303f0b0535bf94cb243e0000403f5a7dd44021d83abf0ad723bc553f154000000000000080bf000000000000003f5a7dd440609b3cbf65b4e7bbf7241540b54430bf090535bf97cb24be0000803e5a7dd440a88930bf000000009f1c0540a99a7cbf000000006b3c26be000000008fa9dc4041cc2fbf6ab4e73b692405402a9e32bff104353f7d1bebbd0000803e8fa9dc40fe022ebf0ad7233c38370540000000000000803f000000000000003f8fa9dc40bb392cbf6ab4e73b074a05402a9e323ff104353f7d1beb3d0000403f8fa9dc40547c2bbf4f4e70b0d1510540a99a7c3f5ebdbbb36b3c263e0000803f8fa9dc40bb392cbf6cb4e7bb074a05402a9e323ff20435bf7d1beb3d0000403f8fa9dc40fe022ebf0ad723bc3837054000000000000080bf000000000000003f8fa9dc4041cc2fbf65b4e7bb692405402c9e32bfef0435bf801bebbd0000803e8fa9dc40122829bf000000009adbe93fb6bd7fbf00000000212e38bd00000000c3d5e440516828bf6ab4e73bebdfe93f1dd634bfeb04353f7b3902bd0000803ec3d5e440609926bf0ad7233c56eae93f000000000000803f000000000000003fc3d5e4406fca24bf6ab4e73bc1f4e93f1dd6343feb04353f7b39023d0000403fc3d5e440ae0a24bf4f4e70b012f9e93fb6bd7f3f4fbdbbb3212e383d0000803fc3d5e4406fca24bf6cb4e7bbc1f4e93f1dd6343fed0435bf7b39023d0000403fc3d5e440609926bf0ad723bc56eae93f00000000000080bf000000000000003fc3d5e440516828bf65b4e7bbebdfe93f1fd634bfea0435bf7c3902bd0000803ec3d5e44095083bbfe4432d305c70d03fcecaed3c94f702b262e47f3f00000000f801ed40270e3bbf6cb4e73b6c10d03f272aa83c1d05353f42f1343f0000803ef801ed409b1b3bbf0bd7233cd128cf3f000000000000803f000000000000003ff801ed400f293bbf6cb4e73b3641ce3f272aa8bc1d05353f42f134bf0000403ff801ed40a12e3bbf800cc9ae46e1cd3fcecaedbc145eabb362e47fbf0000803ff801ed400f293bbf6ab4e7bb3641ce3f262aa8bc1e0535bf41f134bf0000403ff801ed409b1b3bbf09d723bcd128cf3f00000000000080bf000000000000003ff801ed40270e3bbf63b4e7bb6c10d03f282aa83c1a0535bf43f1343f0000803ef801ed40a91277bff937f2316b3fdb3fa858ee3eae21a8b2cd91623f000000002c2ef540046c77bf7ab4e73b7aeada3f6489a83e0805353f5b35203f0000803e2c2ef540be4378bf12d7233c691dda3f000000000000803f000000000000003f2c2ef540781b79bf7ab4e73b5850d93f6489a8be0805353f5b3520bf0000403f2c2ef540d37479bf81a1e13167fbd83fa858eebef6b491b3cd9162bf0000803f2c2ef540781b79bf5cb4e7bb5850d93f6389a8be090535bf5a3520bf0000403f2c2ef540be4378bf02d723bc691dda3f00000000000080bf000000000000003f2c2ef540046c77bf55b4e7bb7aeada3f6589a83e050535bf5c35203f0000803e2c2ef540e35197bf1ed44532ea31ec3ff720113f178abab244e3523f00000000615afd404c8897bf83b4e73bdae2eb3f153ecd3edb04353fec1e153f0000803e615afd40a70b98bf17d7233cfa23eb3f000000000000803f000000000000003f615afd40028f98bf83b4e73b1a65ea3f153ecdbedb04353fec1e15bf0000403f615afd406bc598bf66453e320a16ea3ff72011bf671a8db344e352bf0000803f615afd40028f98bf53b4e7bb1a65ea3f153ecdbedc0435bfec1e15bf0000403f615afd40a70b98bffdd623bcfa23eb3f00000000000080bf000000000000003f615afd404c8897bf4cb4e7bbdae2eb3f173ecd3ed90435bfee1e153f0000803e615afd40e117b1bfa6154832b1070040da3e283f35c5bab208f3403f000000004bc30241f556b1bf83b4e73b0bc7ff3f25efed3e1b05353f766f083f0000803e4bc302413cefb1bf17d7233c6818ff3f000000000000803f000000000000003f4bc302418387b2bf83b4e73bc569fe3f25efedbe1b05353f766f08bf0000403f4bc3024197c6b2bf4b8940326e21fe3fda3e28bf9c0b8db308f340bf0000803f4bc302418387b2bf53b4e7bbc569fe3f23efedbe1b0535bf756f08bf0000403f4bc302413cefb1bffdd623bc6818ff3f00000000000080bf000000000000003f4bc30241f556b1bf4cb4e7bb0bc7ff3f28efed3e190535bf786f083f0000803e4bc302410700c7bf788c4330dbdd0b40321f583f8abfe5b27836093f0000000065d906410e51c7bf6cb4e73b22c40b4027d2183f4705353f5a0bc23e0000803e65d90641aa14c8bf0bd7233c0a860b40000000000000803f000000000000003f65d9064146d8c8bf6cb4e73bf2470b4027d218bf4705353f5a0bc2be0000403f65d906414d29c9bf6c90cc2f392e0b40321f58bf294d82b3783609bf0000803f65d9064146d8c8bf6ab4e7bbf2470b4027d218bf490535bf5a0bc2be0000403f65d90641aa14c8bf09d723bc0a860b4000000000000080bf000000000000003f65d906410d51c7bf63b4e7bb22c40b40aad2183ff10435bf030bc23e0000803e65d9064155f8cdbf0b1b4eb3e62f1b4095f47f3f42e5953337ee98bc0000000080ef0a414a58cebf02b4e73bcb301b40d7fc343ffa04353f086858bc0000803e80ef0a41f43fcfbfd6d6233cf5321b40000000000000803f000000000000003f80ef0a419e27d0bf00b4e73b1f351b40d7fc34bff904353f0868583c0000403f80ef0a419387d0bf30db57b304361b4095f47fbf54d128b437ee983c0000803f80ef0a419e27d0bfd6b4e7bb1f351b40d6fc34bffb0435bf0768583c0000403f80ef0a41f43fcfbf3ed723bcf5321b4000000000000080bf000000000000003f80ef0a414a58cebfcdb4e7bbcb301b40d9fc343ff70435bf0b6858bc0000803e80ef0a415bd7cbbff6d5deb3127d2b4045e07f3fc78aa2335ce2febc000000009a050f414837ccbf8bb3e73b907e2b40a0ee343fd404353fe045b4bc0000803e9a050f41e01ecdbf9ad6233c2b822b40000000000000803f000000000000003f9a050f417806cebf89b3e73bc6852b40a1ee34bfd304353fe145b43c0000403f9a050f416566cebfc9f6e3b344872b4045e07fbf2f242fb45ce2fe3c0000803f9a050f417806cebf4db5e7bbc6852b409fee34bfd40435bfdf45b43c0000403f9a050f41e01ecdbf7ad723bc2b822b4000000000000080bf000000000000003f9a050f414837ccbf44b5e7bb907e2b40a2ee343fd10435bfe345b4bc0000803e9a050f413038d1bf014218b54fbb3b4016496d3f7e823db89129c03e00000000b41b13412391d1bfc4b0e73b4da93b4048cb273fa702353f59e3873e0000803eb41b1341e667d2bf8ed6233cd27d3b40000048380000803f0000c8370000003fb41b1341ac3ed3bf20b6e73b56523b4063c727bfda06353f3ce087be0000403fb41b1341a497d3bf6729b43453403b4016496dbfa0243d389129c0be0000803fb41b1341b13ed3bfb6b2e7bb55523b4048cb27bfa90235bf59e387be0000403fb41b1341ee67d2bf86d723bcd07d3b40000048b8000080bf0000c8b70000003fb41b13412891d1bf0bb8e7bb4ca93b4065c7273fd90635bf3de0873e0000803eb41b1341c7f1dfbfb99aceb55c674a40d3d6603f40d618b921d0f43e00000000ce3117410a46e0bf15abe73b6c504a4044021f3f37fe343fe421ad3e0000803ece3117418711e1bfb2d6233c08194a40008009390000803f000096380000003fce3117410adde1bf5fbce73ba2e14940f9f51ebff40b353f9e15adbe0000403fce3117415d31e2bf098ab835aeca4940d3d660bfc8be183921d0f4be0000803fce3117411adde1bf77ace7bb9ee1494044021fbf38fe34bfe421adbe0000403fce3117419d11e1bf62d723bc02194a40008009b9000080bf000096b80000003fce3117411a46e0bfbabde7bb68504a40f9f51e3ff10b35bf9f15ad3e0000803ece311741b0ceedbfa5712db6370c5940d6c5743f02e985b9b3f6953e00000000e9471b41652aeebf02a5e73b2bfe584025202d3feff8343f0b22543e0000803ee9471b41eb07efbfe9d6233c3ddc584000007a390000803f000096380000003fe9471b417ce5efbf4fc3e73b4dba584068092dbf8510353ff10854be0000403fe9471b414e41f0bf8e4e29363dac5840d6c574bf47dd8539b3f695be0000803fe9471b4198e5efbf86a5e7bb49ba5840b81f2dbf50f934bf7b2254be0000403fe9471b411308efbf2bd723bc37dc584000007ab9000080bf000096b80000003fe9471b41822aeebfccc3e7bb27fe584069092d3f831035bff308543e0000803ee9471b41ff20e0bff93f1c32f0466340b717f73d12e517b443217ebf00000000035e1f41932ce0bf7fb4e73b93766340e7baae3d9504353fc4b233bf0000803e035e1f418848e0bf15d7233c95e96340000000000000803f000000000000003f035e1f417d64e0bf83b4e73b975c6440e6baaebd9704353fc3b2333f0000403f035e1f411170e0bf68d63d323a8c6440b717f7bdbc1a683343217e3f0000803f035e1f417d64e0bf53b4e7bb975c6440e6baaebd950435bfc3b2333f0000403f035e1f418848e0bfffd623bc95e9634000000000000080bf000000000000003f035e1f41932ce0bf50b4e7bb93766340e7baae3d940435bfc4b233bf0000803e035e1f4109c9bfbf31be733238e562401204d7bdd4091eb4d1957ebf000000001d742341f5bebfbf8ab4e73bf1146340f80698bd3405353fa20434bf0000803e1d742341a2a6bfbf1bd7233c27886340000000000000803f000000000000003f1d7423414f8ebfbf8eb4e73b5dfb6340f606983d3505353fa004343f0000403f1d7423413b84bfbfdda58b32162b64401204d73d32568033d1957e3f0000803f1d7423414f8ebfbf48b4e7bb5dfb6340f706983d340535bfa104343f0000403f1d742341a2a6bfbff9d623bc2788634000000000000080bf000000000000003f1d742341f5bebfbf45b4e7bbf1146340f80698bd330535bfa20434bf0000803e1d74234187769fbf70af6b32fe9260405e7c2ebe79f41db493417cbf00000000388a27412d669fbf89b4e73b48c2604071c7f6bd4405353fd25e32bf0000803e388a2741b13e9fbf1ad7233c70346140000000000000803f000000000000003f388a274135179fbf8db4e73b98a661406ec7f63d4505353fd05e323f0000403f388a2741db069fbf2a9b8732e2d561405e7c2e3e382c803393417c3f0000803f388a274135179fbf49b4e7bb98a6614070c7f63d450535bfd15e323f0000403f388a2741b13e9fbffad623bc7034614000000000000080bf000000000000003f388a27412d669fbf46b4e7bb48c2604071c7f6bd440535bfd25e32bf0000803e388a2741c9c77ebfb4a53d327c7f5d402f1f50be58961db424a87abf0000000052a02b41c6a07ebf83b4e73b79ae5d40192b13be1005353f8f3d31bf0000803e52a02b4196427ebf17d7233ce81f5e40000000000000803f000000000000003f52a02b4166e47dbf87b4e73b57915e40182b133e1205353f8d3d313f0000403f52a02b4163bd7dbf7c0e613254c05e402f1f503e04e07e3324a87a3f0000803f52a02b4166e47dbf4fb4e7bb57915e40182b133e110535bf8d3d313f0000403f52a02b4196427ebffdd623bce81f5e4000000000000080bf000000000000003f52a02b41c6a07ebf4cb4e7bb79ae5d40192b13be100535bf8f3d31bf0000803e52a02b41dbeb3ebf8367f531b0015a40ec9d63be63451db4739879bf000000006cb62f4130c13ebf7ab4e73b7a305a4049f320be1f05353f6c7d30bf0000803e6cb62f412e5a3ebf13d7233c6ea15a40000000000000803f000000000000003f6cb62f412cf33dbf7eb4e73b62125b4047f3203e2005353f6a7d303f0000403f6cb62f4181c83dbf98021e322c415b40ec9d633ee29b7d337398793f0000803f6cb62f412cf33dbf58b4e7bb62125b4048f3203e1f0535bf6b7d303f0000403f6cb62f412e5a3ebf01d723bc6ea15a4000000000000080bf000000000000003f6cb62f4130c13ebf55b4e7bb7a305a4049f320be1e0535bf6c7d30bf0000803e6cb62f418b5ffebeefd73031e5485640dced6bbed01c1db4d41c79bf0000000087cc33411707febe71b4e73b9877564004d426be2a05353ff72530bf0000803e87cc33418d31fdbe0ed7233c54e85640000000000000803f000000000000003f87cc3341035cfcbe75b4e73b1059574002d4263e2b05353ff525303f0000403f87cc33418f03fcbebfef9e31c3875740dced6b3ed5f97c33d41c793f0000803f87cc3341035cfcbe61b4e7bb1059574003d4263e2a0535bff625303f0000403f87cc33418d31fdbe06d723bc54e8564000000000000080bf000000000000003f87cc33411707febe5eb4e7bb9877564004d426be290535bff72530bf0000803e87cc334161067dbebebff6a72abd5240118007be0cc640abb4bf7dbf00000000a1e23741c8a07cbe6ab4e73bbbec524096a0bfbd4405353f206d33bf0000803ea1e2374180ab7bbe0ad7233c905f5340000000000000803f000000000000003fa1e2374138b67abe6ab4e73b65d2534096a0bf3d4405353f206d333f0000403fa1e237419f507abed34d70b0f60154401180073e0bbdbbb3b4bf7d3f0000803fa1e2374138b67abe6cb4e7bb65d2534094a0bf3d440535bf1f6d333f0000403fa1e2374180ab7bbe0ad723bc905f534000000000000080bf000000000000003fa1e23741c8a07cbe65b4e7bbbbec524098a0bfbd420535bf226d33bf0000803ea1e237415cb5563b0000000033cc1a3c10df713f00000080b1bda7be0000803f0000003f60d2173b6ab4e73bbceada3b10df713f00000080b1bda7be7a825a3f7a825a3f26751daf0ad7233c1b0be3af10df713f00000080b1bda7beffffff3e0000803f60d217bb6ab4e73bbceadabb10df713f00000080b1bda7be1af6153e7a825a3f5cb556bb4f4e70b033cc1abc10df713f00000080b1bda7be00000000ffffff3e60d217bb6cb4e7bbb9eadabb10df713f00000080b1bda7be1ef6153e16f6153eded22b2e0ad723bc22c2f72e10df713f00000080b1bda7be0000003f0000000066d2173b65b4e7bbc0eada3b10df713f00000080b1bda7be7c825a3f22f6153e61067dbebebff6a72abd5240b6bf7d3f000000000c8007be000000000000003fc8a07cbe6ab4e73bbbec5240b6bf7d3f000000000c8007be1af6153e7a825a3f80ab7bbe0ad7233c905f5340b6bf7d3f000000000c8007be0000003f0000803f38b67abe6ab4e73b65d25340b6bf7d3f000000000c8007be7a825a3f7a825a3f9f507abed34d70b0f6015440b6bf7d3f000000000c8007be0000803fffffff3e38b67abe6cb4e7bb65d25340b6bf7d3f000000000c8007be78825a3f16f6153e80ab7bbe0ad723bc905f5340b6bf7d3f000000000c8007be0000003f00000000c8a07cbe65b4e7bbbbec5240b6bf7d3f000000000c8007be12f6153e22f6153e + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: -0.93685836, y: -0.000000049825758, z: 1.7808053} + m_Extent: {x: 0.9401346, y: 0.010000065, z: 1.7902534} + m_MeshUsageFlags: 0 + m_CookingOptions: 30 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + m_MeshMetrics[0]: 1 + m_MeshMetrics[1]: 1 + m_MeshOptimizationFlags: 1 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: diff --git a/Assets/Quiz/QuizScene/SplineExtrude_Spline.asset.meta b/Assets/Quiz/QuizScene/SplineExtrude_Spline.asset.meta new file mode 100644 index 0000000..321ea77 --- /dev/null +++ b/Assets/Quiz/QuizScene/SplineExtrude_Spline.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 45052e8112972d241a9facd570715b47 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4300000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/QuizScene/VRCLightVolumes/LightVolumeAtlas.asset b/Assets/Quiz/QuizScene/VRCLightVolumes/LightVolumeAtlas.asset index d61650b..58a8d84 100644 --- a/Assets/Quiz/QuizScene/VRCLightVolumes/LightVolumeAtlas.asset +++ b/Assets/Quiz/QuizScene/VRCLightVolumes/LightVolumeAtlas.asset @@ -16,11 +16,11 @@ Texture3D: serializedVersion: 3 m_ColorSpace: 0 m_Format: 48 - m_Width: 61 - m_Height: 26 - m_Depth: 138 + m_Width: 41 + m_Height: 10 + m_Depth: 66 m_MipCount: 1 - m_DataSize: 1750944 + m_DataSize: 216480 m_TextureSettings: serializedVersion: 2 m_FilterMode: 2 @@ -31,8 +31,8 @@ Texture3D: m_WrapW: 1 m_UsageMode: 0 m_IsReadable: 1 - image data: 1750944 - _typelessdata: 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000481f8b1f991cb1159920fc21f1219c1d8b2015215a20791dca1e371c5117c51a5c1fb51be017931bc222c320cd1f7e1f52258f2045206421df241120601e3c2042255c1e7a1e7d202025551d2a1f852128270c1fc2201524f425841be0206922bb1d0000da1cc517000000002b14000000000000eb18000000000000e81b000000000000a422000000005f230927000000002a1d7a25000000000000d22400000000c8164f2600000000b3107726000000004a1f2c290000741d2d25192f7b1ac21f66243a2f201a00004d1e922900000000ee1f6629000000004526952e000000008c1f082f0000000000007a27000000000710f52500000000131f3c2b000017171f21df2929120514751fd125bb0ec50de61cf920fb052215841e1721d40ca617c51ef920101139199d1f742160141f1a142088213a15841a2f20bf219015ed191c2069210f1540191a204b216514a2191d202021cf14f11947205821fa14a61948203721d214901948204721c0144a192e2027216e14c81921202e21d814b81a3a202821a115831a1820212175154d1ad11fbb204715e119201f2520ec14d618b81ec61ff213b5184c1e551f95130919d31ddd1ef413e618511e111f0614da18a91e731faa134f18991ee21fb411a616ab1c441db81000000000000000000000000000000000771cb21d041db212a51e10220823bf1c7a1c4e207820521a2a165918b61425126f18e3184b17a3147b1f2521c521cd1cde211a20d520991e6d1e311bec196814cd1dbd190817c116d322c41e1f20591f89243321e9221d22f622db20502331203819500fe11a9410000000008a0c000000000000d21c000000000000391e00000000000005210000000000001b2200000000000010230000000000002d2400000000000099240000000000007824000000003a1c562800000d1e1425752fd7197a20f223d62f801b0000a618f6270000000092153528000000003020452f0000381cbd219f2f8b1800000d0e62270000000000004b2500000000a31e482a00000418df21ef28e6140e156520f42449110815ed1d2d21e70a8b18b41e7b218a076f1966205d22e313d91bf1202c237317a51bd12080220417091c2621c8224617ee1b4321da222517b01b692115230e17811b4721c522c3161d1b5121c7224d16b01ad620ef21b515491a9320ba215d15f61954206621fe14421a3b2055213d150e1a0d200f21fa14e219d41fe220d514f019bd1fce20c914a119a81fc3208914b318251e8b1f9213b918731e811f76135519aa1e0b203614ca19b71ef51fd9146419c71ef21f2c140118601e7c1f12124e16881c1f1d7a10000000000000000000000000000000008c1c861d691d3d12331df32011222c1bb81b9320412144199d19e11b3c1cca145a174719651a7213221e19215c22091cf61fd5206722ec1c361d121c0e1d9117e11b1d1c771cf915b91f47203521971ca3216b225f24df1f2b20a22141244a1d25194616101d8011000000009118000000000000381b0000000000002b1f000000000000cb20000000000000de210000fd0ace066d23800000000000252400002c14d30de324760300000000e32400000000191d912800006d1e28242c2f5b1854206a22932f3f1b0000f818882800000000b614a7280000bf1082200e2fa50b561bcc21302fba160000ab161e280000000032147b2500000000ee20072900009e183f22112869158715a520a824f31175163d1e4421b20e1a18911eca211a0df91842208f228913dd1abe2009238416f31b4c214f238b179a1c07221a245e18a51c31221f2469184a1c232207240118051cdb21972360170f1cb32184235217521b4721ae227b16ad1ac320de21b315cd194c205521f414c61960209621ed145f1a542083215615831a4f208b217515891a20201f215e15221a1e201621091585190e200b217214061a4f1f6720da14b319ea1e1e2080148819851ee91f8c14f3180f1e461f80137117dc1ded1e67114a171c1def1db61000000000000000000000000000000000861cf21ec71ec9127c1c422138225419a218361b921c950ca116b318461b650dfb17fa19d11cf0129a1d63212623e91b851e40210623651c0d1b231bde1c16136214d018351a690b0118581a831c490f4320d5235025101d39203e24f9256d1d53103c068e19ba03000000003e1c000000000000291c0000000000002a1d000000000000261e000000000000f120000000000000db210000710d2012bf234d01360f00003f24f50100000000b22400000000591c4d280000861d5423e12ea018091cca21612f0618b419291f792bb0140000ac22a52d0000c71e1624102f6e1a230f0221cc2dc70a0000ad13ac28000000000a1ab82500000000c02121280000d21bb322f5264618041af0214c25191630195d1fab21760d7c1a6c20bb22a70f3a1c9c22f324ad16ce1d2d235725c919641dc322b6244a194c1dd422b5240719501d99227c24e018b31c6e224d244f18401ce321af23aa17e41bd4218d231c17c11b8f212923dd165b1b4b21fe226516e11aa020d221c315731a502054214c157b19791f9f206b149c198d1fd9208514da19991fa6209f14fb181a1e0220de130f17601d101f76115f181b1e6d1fa0122f181e1d5f1e3512c9184f1e621f8f134f19081f2820e01381189a1f98201c120516cf1cc01d461000000000000000000000000000000000561bc21e871ff811d01bad2022216518b11b431f5920fe12ae1baa1f08213a140c1d3b20ad212618e41c3c20e3211d192218b51cd51eba0e0000c812011a00004d121a1a791d3c069c18091e6020cc0fd41e6423ea24761b161e1622a124551b080e0015a21bc0035e00f318461e000000007517bc1d000000000000af1d0000000000000000000000000000322000009e1a2a17372354108a1d14219c27b017961c2e1cd1249c1400000000512400000613801d1528820b2f1d4324342e9718de1a1322882e11170000841d2e2900000000921d22260000690b3f1c132cbc0500001f1874280000000000007124000000007c16192300002c0cb1211526eb07fb1b322351268d187b1598207024d01194162b1de01f830c40194a200f228a0f571b8422f524cc15b61cce222a257918881cb622d2244d18071da322b924b118c31c87228a244b18311c6a2286248f17551c00221224ac17651cd021a123c817561c5e2119238a177a1ce4207022a417e61b9020c5219e16491b6a20bf211a16f41a35205621b615dc1af91f0221a315421a8f1fad200a15541a201f5b20331554197d1fb4204b144c1ac11fcd20fa14c619341f76207814dc19801ef01f89146519e11e2520d5139b179a1ee01fea10a4181d1edd1ee31200000000000000000000000000000000151a211ddd1d3d0d68192f1e4c1fc91446196b1d4d1f4a1080187b1dba1f760ebc19211e472008115a170f1c2f1f1b0c000065164f1b000000000000b717000000007c184f1d00004a15221ec820d90fa21eb0233a25351c281e56232025831bbb0b8218131e68029810ac1afc1fe406a002f41b7c1fbe0000000000001e0000000000000000000000000000a41e00001c1bae19342232105f1d9121342749174d1b431c2e24a412000092104d23000000000000f62300000000a61aa126000000001420282c00000000071c3e28000000009019ab23000000001a1e5a2a00000000d419322600000000000023210000000095197e210000031794220126c412731d3e232226201a1217bc20742480136716211cfd1e980c24196c1fda21b50f4e1b3322d724c515081d5d237e25ef185d1d4a2337252d192b1dff22f424e718551c56227824f217101c03223a247317011ccf21fc233817e91bc721b82301171b1b752127232e16311b2421e5222316e21ae3206b22e015f61ad4206122d515831bbc201e222c165e1b9620fd210d16ae1a542076217d15061a30205321f314081a801fe020dc141b1a901fa320d214411ac31fc020d614d019751fc120af143d19831e26209b13d516a81d941e32108f15c91c981dd40e00000000000000000000000000000000e81a331e0e1f1410fe19151f1c2035150e1c1820f22034149a1c56205d218418be1c072090219516a51ab41e45210b121912e81a0b1e6b060000e216241c0000dc0db81a9f1ed5038d19ec1eb4213514bd1e33232a25461c581d4a22a0249c1af912871aca1ec90830160e1a7020d60c1e04ef1b7e202a0100009b156d1d0000000000000000000000000000131c000000000000d41d00005d172710152059025716891874210602000000006a210000000000007e2100000000681a692400000000cf1e2929000000004e1bd125000000002216f4200000000006207228000000008e19d52300000000670ddc1e00000000ff184c200000ee02c3209d24e0008e19a51daa20851000000019531d000000001615e21a000003196f1e7e21140a381c3022b4249715aa1d4823512532198f1d322330251919381dfe222025ca18f61cb922cc247918b01c86228c2439182e1c31222e246717f41be021f223eb16ec1a732148230416801b3d21022367161d1be8206722f615101bc8204322ea15781b9820d92123165b1b7220c2210b16ac1a3b2072217b150e1a21205821fa14da1a7420e721a1157e1b3f2026210916d51ab41f95208115541acd1e352033152a194c1ead1faa133118581efd1faf11ff147f1c321d800d00000000000000000000000000000000fd18421cef1c9e0c5917f41c0e1eeb111618941c871d900c4d14c719631ca1095e176d1be91d0e0d0115fc18b21da1080000c0125d1a0000000000003017000000003418a01c00001c11861d5b205208191f94240226df1bbb1f2a250d27c81c5d105c16671de0040000e519961e000000001619b81e00000000bb0e881d00000000000000000000000000000000000036110000321d2a001615960cde1d530000000000dd1d000000000000272000000000000055200000b611671cfc22a60500003822e6270000eb123b1e9c24120a00001a1bff200000ba0f67228e271e092d17771d4c23120e0000c20f7d1d00000000ed190c2000000f0e86203f24dd06b019d81d652044100000f31a5d1e000000003718af1c00001119ab1e62213408581c2c228f24e3158b1ef5239f251b1af71e1c24d625801ae71dda23a7258219931d572332251d19531d0723fc24cc18e41c46225f245518c41cde210a242518b81c852156230718c31c682144231018511cee208a223b17581cdf2081222317701ccc2051222717941cab20232260173c1c7020c621d316751b6120c6210216c119cd1f302174149c1ab11fe0200315ee19d01ff0207e14751a361f7e20e4144a19d31e36205713e0173c1ec61f37119417511d321e4211000000000000000000000000000000005c183f1b4d1df50a2e19531d051fc014a018fe1b141da40e4413651b4d1d850850136e1b5f1e4009ac10b318581d530400000000d817000000000000610f00000000fb152c1c0000b70b961cdb1ec502851e8924f525b61a651f50245626561cfd0a35156f1cba010000df18e51d000000003c16441d000000000000271c0000000000000000000000000000000000008a04320c571c0500be090000621c2300000000008e1c000000004e10821e000000009110052000000a1afc1dc022e011fa10a42254262b0c5c15031c00215b0bea14ad1a7620cd09e6161e2106250111031b941e9f22ee110000ca16131f00000000c51ae02000000a145821d924930cfc18211d7020ca0f0000321ade1d00000000f615241c00003418351e6c21e7055a1d552379256e17821f3b241026201be21e3824fa25881aa01ed8238c254a1a051d57230e259b189e1cdf22e8242a18831c92229f24fd172a1c532279245f171f1ccf2102240917271cc521cb23f5161c1c81216223c116111c69214d23af16541c4d212a23f916141cfa20f1229316de1b8320ef215716c01a8e20de217015d219581ffd209814d219371f882081144219f91e9320f813f419c81e4a20b3145719761e0d20c01379183f1ec11f11121319771ecc1fe212000000000000000000000000000000006a18f91b7a1d9b0b0819501dcb1e4b144618d21b221e3a0f9112c91a0e1d81081012501b851e8c082a15d519af1dc70800009d12281a0000000000002817000000009219a51d000000004b1d11200000ec1d8624b625791aae1fa1248026b01ce1111214b61c30060000ba14de1c000000006b14d11c000000000000d21b0000000000000000000000000000000000000000ec08c01a000000000000011a000000000000711c000000000000221c000000000000501d0000c418691d8a21b70cb314cd210625ad0e6a179f1b8220cc0d0d18591cc020560e8f190c224025b7130a195b1f9523d5120000341b272100000000ea1c3c2100009c126521b424b10cd616fa1a2b20de0e00004918131d000000009c14131a00005115171d902095080f1c4922d1245f15f41d0024d1255e19981e1724e3250c1a6d1e03249e25e519401d84232b25bb18f71cf222d7247a18bf1cb62298244718b71c8c2288242c18921c2a223e24f217851ce1212824b717d01c6d219a230818b51c41211923e2175b1cee2090222817411cd3206d22fe16421cc2201122ff16ca1beb203a226716991a9120d2215115451b6a207121be15b61a42205d214d15c81a7f1fca2077153b1af51e4220b91482186e1eda1fae11ac158f1cd51d540f000000000000000000000000000000004019e31cb11e300c6c1ad91e372095157218541cb01e620e73147c1cf81daf088410b71a871d2e045c0ff619211dff0100004c16521a00000000000020170000000052199c1d0000d401101d241f0000851e43249a25551bc22080248e26571e0000ee01181a000000000000e408000000008915981b0000000000000e1b000000000000980800000000000000000000000074066f190000000000009019000000000c00301c00000000db106e1b000000004714b91c0000fc15061e0022eb0912193723be258613e916c71b3020be0c4512eb1afe1fcd073b186622cb2432110000b81e4b22000000006810121b00000000c61cd52000006314b7200e248d0c8a18cb1bf31f190f00008b17261d00000000851588190000a814ea1c48200d056c1c8922e524ff15791e2424e325d619c91e1b24c525391a0d1eeb2388258c194c1d85234425c7183e1dfb22ec24a418c21cbe229f243718a51c82227e240a18891ce121e423be17271ca321a723f516e01b3f2101237916e11b3521d7227916061c1021b0227c16171c0b219b2275162e1c05217a22bc16ef1acb2049227915461aaf1f1921db14161a971fd8209d14091a801fe9209314851a191f792026153519b61e3c2010136918e71d871f1f129d154c1ca41db80e0000000000000000000000000000000076154d1aec1c5b08ce18971d521f061410173d1b551c4c0d0000bf18911c000000005217571c0000d40be714c519300100000000fb17000000000000c11200000000b7165d1c0000c20ee01dd11f6c04fa1efc248d26f51bdf20a0249327b91e00000000521a0000000000000000000000002a14ed1a000000000000661c0000000000006a10000000000000891100000000830e131900000000ee02331a000000000000ec1900000000cb0d701a000000004a091d1c0000f2145a1c862094084b14d9209124190e27121b19461ea707f510a619321e3805991924211b24e1120000571ccd20000000007914071c00000000291c80200000d31658208923830f9618671c70202b0f000056197f1d000000004214861800008814331d5120c283641c8e22ba244115bb1dac235b2512191a1eeb2389256719f01db6235b255a19671d74232d25c918841d2623fc24e218351df122b2249c18da1c88227b243818ac1cff21ff231018831cb221a623b417911c53213823a617ed1c50211d230c18ee1c2d21d122f117d31c01218a229e171e1cbe2012228016881b9c200e22f215561b5a209921ad15351b0520152158154c1a00202f21c614361ae81f2321cf14ca1a25202f210915131a6b20a72150148d18231e5d1f0612000000000000000000000000000000004d17031b4d1dd2095f19291dab1e7f14be175f1cc41d8f0d7a10491b001d6d040000f618ea1c00004e0a3d170a1cdb0000000114a91900000000000025150000000086179e1c00000000a81c1b1e0000791e9424d0252d1b1d21a0245126bb1ec4100f138a1acd0300000000e81000000000c916571b00000000840cff1b0000000000003a08000000000000811400000000de0038160000000000005418000000002f0cd61a00000000b714051c00000000000042190000f70d361c2c20f30269199a22b7240314f6148d1cf11d2c0a6c18e71c5f1ff00ca41c4c23182500162617ca1c3b205c0d00004d18c81b00007114a81c9220cf09b7174920d8235f102f1ad11b821f081100009b17ad1c00000000ca13251900008714f71c6220a586ef1ca322db240f16051f1724b825531aab1e1924c725391a691eff238f25e119a61dd02355252f19471d4c230a25d818431dc9229324be18f31c752275247618e31c1d2232245318961cd921c823fa17291c812149231a173a1c592122233617321c3f21ef222917511c1321a3223b17321cf8205422e516e71bd5203c225d16f01a8120e2217a15ff1b552070210f16351b36202c2193153e1b911fcd207d15521afa1e542049142119011ef91e4d12a717a01da71e6f1100000000000000000000000000000000eb18641cfa1d380bd119a21e1820f714f7161c1b161dc70c4413ee1a1d1dcc053412a91a401e8d0400004e1aca1d00000000e117341c0000000000004317000000001014e01b00000000ba192d1d0000d9144d1e5c20580a7b191223a6249714f414a2183b1c9508000000003514000000008d144e1a00000000890de01b0000000000003213000000000000a714000000003912e41900000000ad09451a000000000000a8160000000062011719000000004016e11c00000000a51dec200000b4178022c824b711b715b01b9a1dbf0a2316001be71d120a601a03204a2238140000fe18631e00000000a9174b1c00001f14ee1c6d209b082d19d1209323b311a219a71df2204d11a1091a1c521f8f020000ef17d71a00001f156d1daa2016884c1d692380258216871e1c245e26fc19971ecc23df250b1a721eba237225e919b51d782337252419811d2723e424f6183a1dd8229e24a018151d922292248018dd1c3f224a243b18ea1c042205243218981c90215223b217c11c42213c23d0176c1d1a21d2225e18ca1cd8206b2291170b1c942006226316791b22206421e7155b1a2d206221eb142a1b1f203f216e15691a08203221db14f21a5b1fb1205f15601a1a1f7220a0146d187d1e1f209411d017fe1c341e2c1100000000000000000000000000000000d519201d8c1e3010df1a811f3f206a16c914651cb01d060700008115351900000000b618931c0000811387179a1c97030000180f271900000000000020150000000015184f1c0000260cbf1ce01eb60205202e258426a61c4021e325fa273e1f5e160418b51cad0800000000ff130000460e54154c1ab50700000000e7190000000000000415000000006204711a0000000013144319000000001d0e99190000000000001e1800000000ba049d19000000000715291c00000000d21c7c2000002f174522d424de109411651efe205c081b12cb1c211f0a062218c820ae2335110000181ad81e00000000d314321c0000680f001c1620d8048d14121f7f22b80c8b19101cfc1f28100000c119c61d000000000b18a01a000011169c1d74201188ae1cab22bf24e615581e00249725d119581eeb238f25d1193f1e77233625bb19a31dff22bb241519051d90226f247218c81c392239243c18cf1c13221b241b18501ccd21b3235d17471c78216b232a171a1c42211823be16511c0f21cb221817151cf02086229416091cba2053228016691cc2204d221b171d1cd820af227f16e81cfd206d229817081c232035211c16241b3d1fd8204c15ae1a381fa0202b15061add1e5120461433192e1f7420e3124c16ff1c411e220f000000000000000000000000000000002a1b5e1eef1eea10da1d0322bb236c1b881ca821af236319c016e61b301ec90e7014891bfc1dce093e0e2e19b21ce30200009b12a71900000000bc02891700000000dd17841c0000030e161d851f2004fa1daf230e25a01a9c1fa4247526111d90179918e21c090a00000b10e7170000ea16ed1c321f0511b418e7213924d6145518dd161d1d490c0000ce14821c00000000b0127619000000004712d01a000000005514341b000000000b18441d000000006f1ec52100007a170f23832562125d1c6d2314267d185318cc1f3b22c30ed415dd1cb41f230a3e196f206e239c132b199f1c4a20c00f6d0bc11ac21ef501d807e41bb81f48011d0c491fc522ca0427182c1bd01ff70d00005e19da1c00000000ce14721900006815341d31200089561c60227624be152a1ec3235a25da192c1edd239625c319ef1d932379257119c21d1023fc241919401dee22c024a618bf1c7c2288243418f41c2d2244244e18d21ce621f0231d18691c8d2177236417091c1021c822a116181cde208e22ba16cf1bb22054224a16d31b89202f224e16b51b5020a82116165d1ac81f32210615ac19fa1e7a20631439198b1e2420ea13e119de1e7c207414ad1a381f92202a15c71aa71fbd2007152f19ce1e42203213f7172e1dbb1ea41000000000000000000000000000000000e21b0c1f6e1feb120d1f39235e24b51b171eea2274246f1ba41c122091216818221d74214e23da19d81dd0204f225c19921b3f2111236e1799188b1ce91e7910f1141a1f2c21630e671d1823c824fd19d6201025ac26711e3a205924d325b01c681aa91bbf1e65107010ed1adb1f81078515ad1d6d20011000003c20d22300004918d519a91e3d0c0000c019d91e00000000a519311d000000001f17aa1c000000002f15491b00000000d717c61c0000fc10891d8a20e205be1a5d248226dd15681efb24b127cc1a9a19291ede2086127718a21e3b213311d3190423852540159f1c24248326af18f718991cb11f9312e314ec1c6420890d83100b20ad22450b5318581dab202c115c190821ef2393142d193d1eeb20e0101018f51e0a21470c721bbf21552486153d1df3222c250e19921d282330254a19fb1d55231f259419001e5b2313258119a71d1b23db241819341d8d2274249c18f51cec212c244f186d1c262141238d170c1c6220fb21a616211b19209c21dc15401b1b209d21d715051c272098217a16ed1b4020a1212216071c632098213c162d1b5420c02170159e1a14204e210415a91ace1ff820f0142b1a741fd2209414951a7a1fb82018157f1a7d1fae20b71422191e1f69204a130917d91c901d2c0e000000000000000000000000000000009c1a5e1ef41ef510b61dcd213823e11a7d1dd321a9230d1b6a1d1a217b228918821efb227824131c341e1b23ca24551c531ee722b524b81b3d1e2421bb2208181d1d4121ee221917bd1ea3233e255d1b29216f241626b61ea01e1424d625aa1bce18da1d5e2071110000d119281d0000dc144b1c381f700e37156c215424b3106319621c9c1f640f00000817fd1b000000009c160b1c000000004814941a00000000b415221b000000008c17621c00005e0eb21d6c205a03fe1c5a246b2680185e1f3625c527071c2d1b841fcd214b128f191b203622e110f718ea2277256514741b2b222725c9173719ed1de92094105917e11de620460d2a1960206523ad12ee1a7f1e6f21f712e418a9207123051481197a1e1d217a108518c71f92210e0aa31afa213c2480140f1d65228a248f18221d6c226d248c185b1d5b225a24a8184a1d4c224d2499183c1d4b2257248d183a1d0a221c248b18d31cd021d6231e18851c7e217123db179a1c5c213623da178a1c4321f8229a175c1c2321bb222a171a1cf6208322be16f11bcb2066226516c21ba22026222016b41b7d20f1211516971afa1f542134157a1a0d1f862003157a1ac81e5020cd14fa1a6c1e48202c152e1c791e24208915ea19421ee31fd5131418131d261e7d1000000000000000000000000000000000c21a381e551e4911a21ddb212723df1ae91c90212423261aa61d3c2168224519a81e47237e242b1c2e1e8123e4241e1c861e2a23cf24db1b0e1fab2141235819621d64211b23fc170b1fe1234025cf1bc420aa244e260b1e891e2024bf25751b1917b61cdc1e051000003018ae1b000074132a1ce21eef0c7015c7216724d1108018e11c9e1f090f0000fe17521c00003b158e1c621f820a0a16bb218f246210091b5d1d6d20461100004a1aae1d00002f14a91d9920bd09f21a9423c0257b16851d3a2475261e1a051a061f3c21791109183c1f7a21990f5f1b50244826ff167b1d32247726291a7b18fd1dba2038112318341fba21f310021a1a22b0241616a61ca02230258719b81c4622c3243b19181d272127236b16d71c7c227124e718341d0023e82470198a1d0823e6246f19801d0423db243919861ddb22c52428196b1db1229824e218551d71226124a318f51c0b2226243b18d01c8a218a230818351c1c21d1220b17151cc1206f22b6160f1ca12049228a16201c832024228416251c6420e9218c16ca1b5020d1210616f51b4d20bb214916261bef1f35216b152e19ff1df31faf13c5185f1e2b20ed120019341e3320f012bb19521e28204014da19591e0e20bf136318bc1d1c1f1b11ed16f81c151ea00f00000000000000000000000000000000611a111e581ec910f51d8a22fc23451b611cd320492258194c1b381f9f201d162f1eb5224d248c1b5c1e7623e5243c1cd71d75226124081b601c541f07211316671b281f1c218c140f1ba1209f225c16541c951f3c217515431a802122248b159818a51cbc1e2e108515751c6b1eaa0c841c5123e524b818011ef5237a25c11ae315661c5c1e3a0c0000c814be1a00009814441b891e2109dd1706210a2436124218bf1c721f920d0000ea194d1d00003018e81d7b20ad0c211de424f2264719e11ef5242d27f41baf1ad51da520a6115216811d8f20260e2b1b662387252517a71e41248226381c431c622396253319421a7f1fc821e313b11b8922a72434187d1c252382254319a31c3722c9243719521c84208422c114271c9e210a242418b81cdf213224b518011d51225e24c0181e1d4c226024b1186b1d46225224e2180c1d352246248d18491df92123249818e81cf5210b244418ba1cb121ce230918cd1c802182230518141d5d2146232c18db1cfb209922d217611ca1202a22eb16751b3b20bc21c515eb1aff1f6b213e15021bcb1f22216c15b61aed1f2a2131157d1ad41f222105159c1a8b1fd9200315431a081f8a20a514551abb1e6820e614d01a1b1f8320f2149219411fb620e9138b19d41e0c20061400000000000000000000000000000000291c691fc020a4156e1c86209a21b318371ddc2036221316171f90223724f91bdb1f2823ba241b1d631fe522a524a01c6b1e1f222e24041b961c1e207e21c715081c00206c214f14281cbd2094222b161d1cce1f0f216e12541a811e9e20a90e7316ff1c5e1f24097719641e4820d90f381eaa2296248119001f4d23fd248a1b89158b1c211eae0cb215351cc31dd10cac1c4523e524cf187b1d46231225b01a9c1cf91f7221a314341da2244126f01951208b254d27061efe1fbb24ab26631def1eb124c726901cd11ed623a625fe1b991cd91fb1217b13011a9a220225cc15391e8b2392257f1b7d1cc222d8240d196414821b1d1f890d43167d20fb222411081397197e1df209c8088319851c2f01cd13b21c321f3b040d1a8c20a122e014881c7f2103249718131d88210e24d118f71c942104248e18c11c7221b0234918031d502164237018521c432173238317201cd720da22e816391cdc20d4221217581cca2098222317241c9d204a22ab161b1c6220ff217c162d1c4520cc219816241c192085216916041cf81f6a211616231c04205d216716111cfb1f52212916921a541fd6201615661ab81e5820bf144b1ab31e512092144e1a8d1e3a20c714b21a901e0c20a614c3184f1e13204e128618a01dde1e8f1100000000000000000000000000000000ef196c1d991e4a13e61bba20a02110180b1d58203f215b16011e4e2206243b1bb81e9c224724871cd11e76223a246f1c0a1e15221f24901b8b1e01215522a11a431ea421c823241b141e12222c24531bc11ffe219a23be1aae1f1423a824521cdd1f65231a252c1d1d2091237b25691d6620a5237725b81d7820d8237325061e6c20c7236925081e2e2090232f25d61dde1f5223fa245e1d431f2d23e524f41cdd1e3523f024931c2e1ef62210251e1c791e7c22cd24281c621f18234325811cbc1e0f22ca24ee1a3f1e1021e5223c180a1ec4228a24051a781f85231d259e1c7a1f01243925901c1d1fc2231525491cda1e95234c25121ce11d9222b724b41a781cbb210424ac18da1c1321cc229416d21c72218823ba18681de7214524bc193e1d9c210b244f195a1da92111242a19661c3f211c241b18821c292172232318551cf720f822ac17251ce020ce221317a11ba6208e224516b11b7920352233166f1b60202222df15ad1b4b200022f015ac1b2d20bb21f0158c1b27209c21b815ec1b14207d210116281c002041212b16861bb61f0221b415aa1a621f0221f214d119691e72205114de19681e49204214f319591e40205214f2194e1e1c20691492190f1ef21fbb136e18751dde1e951104160a1c4c1dc60f0000000000000000000000000000000050183f1c001d7910851d9421eb22791a911d3a212023251b991e29239e24571c361ff022dd24bf1ccd1f2c23bf24121d691f2523e224c21c8b1f3c23d224c91c531f3e230225961c7a1f52230625af1ce31f55230225e11cce1f4523ee24d31cd61f2a23cf24d81ca91f0d23cb24ad1c4c1fd622ac24741c1c1fac229d24481cbd1e8b229a24011cd51e14224624101c0d1ecc210c24181b161ea421d8230a1b061e9d212224df1ae81ed2211624c51b771ece212f24601b2e1e6121dc230d1bcb1d7121d1239c1a8f1d5d211f24571aac1d96210e248f1af61d83210b24e51ac61d97210b24ae1afa1daf212624ea1ae71dfe215624a41a961dc9214824481aa81d3a213e242e1a3a1d39210324b6193a1d4d210e248b192a1d6b21f8233b19fc1c81210224bb180a1d7621f8238b18bc1c7721e9233118d71c5021b1232218b81c2d2171230718a61cfc201923f0178a1ce120cd229a17691cb9208a226417471c9b2051220717361c73201822c916401c5220dd21b716011c2d20ba215316221cfd1f6a214316d11ba11f2421ec15351b251fdd205815251bd41ea4203015f01aba1e77200915ce1ab31e6b20d414581ab21e71208114641aaa1e7520be14351ab41e5f204f146719301e15208013ad17fe1b2f1d9710000000000000000000000000000000004c19a61c721dd511511ee7214323681bff1d2522f623201bd31e7d2226241c1cf01eb72270242e1c201fc22288244a1c601fac226a24711c041fa62279242b1c2a1fa4227324331c7d1fad228c24551c861fa22295245a1c651f73227724471c191f112235240c1c3f1f0d224024131caa1e09223e247f1b4b1eda213624fb1a341ec1211f24c81a271eab211624b91af31d9a210a24801a561daa213b24bf19e81c232166245d19a61d0d21cf23e719891df5209f23b2195d1ddd205a236f19651df22041237719471de9203d236e19e51c0d2162230919e91cee2044232119e71ce32034232019d51cd62034230d19fa1cc52026233319d61cd3204923fa18da1ce2206323ea18d91cd6203e23ea18ce1ce1202423ca18b11cdb200b238718a31cd320ec224118961cc820dc22fa175e1cc420c32250176a1cb2209e224117461cb4209a2206174a1ca52086220d17151c9f2076229416161c7e204b229516161c582013227416291c2320c7217016ff1bd31f48210f166e1b331fdf20a115ec1ae91ebc203e15021ba01e822033159c1ab01e702003158f1aa01e6220f814261aa41e5b208f14201a751e3220a414c8194d1e1a204a14c219091e04207514dd19f01dae1f4114bb18621d771ea91181181f1d141ead11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000481f8b1f991cb1159920fc21f1219c1d8b2015215a20791dca1e371c5117c51a5c1fb51be017931bc222c320cd1f7e1f52258f2045206421df241120601e3c2042255c1e7a1e7d202025551d2a1f852128270c1fc2201524f425841be0206922bb1d0000da1cc517000000002b14000000000000eb18000000000000e81b000000000000a422000000005f230927000000002a1d7a25000000000000d22400000000c8164f2600000000b3107726000000004a1f2c290000741d2d25192f7b1ac21f66243a2f201a00004d1e922900000000ee1f6629000000004526952e000000008c1f082f0000000000007a27000000000710f52500000000131f3c2b000017171f21df2929120514751fd125bb0ec50de61cf920fb052215841e1721d40ca617c51ef920101139199d1f742160141f1a142088213a15841a2f20bf219015ed191c2069210f1540191a204b216514a2191d202021cf14f11947205821fa14a61948203721d214901948204721c0144a192e2027216e14c81921202e21d814b81a3a202821a115831a1820212175154d1ad11fbb204715e119201f2520ec14d618b81ec61ff213b5184c1e551f95130919d31ddd1ef413e618511e111f0614da18a91e731faa134f18991ee21fb411a616ab1c441db8100000000000000000481f8b1f991cb115481f8b1f991cb1159920fc21f1219c1d8b2015215a20791dca1e371c5117c51a5c1fb51be017931bc222c320cd1f7e1f52258f2045206421df241120601e3c2042255c1e7a1e7d202025551d2a1f852128270c1fc2201524f425841be0206922bb1d0000da1cc517000000002b14000000000000eb18000000000000e81b000000000000a422000000005f230927000000002a1d7a25000000000000d22400000000c8164f2600000000b3107726000000004a1f2c290000741d2d25192f7b1ac21f66243a2f201a00004d1e922900000000ee1f6629000000004526952e000000008c1f082f0000000000007a27000000000710f52500000000131f3c2b000017171f21df2929120514751fd125bb0ec50de61cf920fb052215841e1721d40ca617c51ef920101139199d1f742160141f1a142088213a15841a2f20bf219015ed191c2069210f1540191a204b216514a2191d202021cf14f11947205821fa14a61948203721d214901948204721c0144a192e2027216e14c81921202e21d814b81a3a202821a115831a1820212175154d1ad11fbb204715e119201f2520ec14d618b81ec61ff213b5184c1e551f95130919d31ddd1ef413e618511e111f0614da18a91e731faa134f18991ee21fb411a616ab1c441db810a616ab1c441db810771cb21d041db212771cb21d041db212a51e10220823bf1c7a1c4e207820521a2a165918b61425126f18e3184b17a3147b1f2521c521cd1cde211a20d520991e6d1e311bec196814cd1dbd190817c116d322c41e1f20591f89243321e9221d22f622db20502331203819500fe11a9410000000008a0c000000000000d21c000000000000391e00000000000005210000000000001b2200000000000010230000000000002d2400000000000099240000000000007824000000003a1c562800000d1e1425752fd7197a20f223d62f801b0000a618f6270000000092153528000000003020452f0000381cbd219f2f8b1800000d0e62270000000000004b2500000000a31e482a00000418df21ef28e6140e156520f42449110815ed1d2d21e70a8b18b41e7b218a076f1966205d22e313d91bf1202c237317a51bd12080220417091c2621c8224617ee1b4321da222517b01b692115230e17811b4721c522c3161d1b5121c7224d16b01ad620ef21b515491a9320ba215d15f61954206621fe14421a3b2055213d150e1a0d200f21fa14e219d41fe220d514f019bd1fce20c914a119a81fc3208914b318251e8b1f9213b918731e811f76135519aa1e0b203614ca19b71ef51fd9146419c71ef21f2c140118601e7c1f12124e16881c1f1d7a104e16881c1f1d7a108c1c861d691d3d128c1c861d691d3d12331df32011222c1bb81b9320412144199d19e11b3c1cca145a174719651a7213221e19215c22091cf61fd5206722ec1c361d121c0e1d9117e11b1d1c771cf915b91f47203521971ca3216b225f24df1f2b20a22141244a1d25194616101d8011000000009118000000000000381b0000000000002b1f000000000000cb20000000000000de210000fd0ace066d23800000000000252400002c14d30de324760300000000e32400000000191d912800006d1e28242c2f5b1854206a22932f3f1b0000f818882800000000b614a7280000bf1082200e2fa50b561bcc21302fba160000ab161e280000000032147b2500000000ee20072900009e183f22112869158715a520a824f31175163d1e4421b20e1a18911eca211a0df91842208f228913dd1abe2009238416f31b4c214f238b179a1c07221a245e18a51c31221f2469184a1c232207240118051cdb21972360170f1cb32184235217521b4721ae227b16ad1ac320de21b315cd194c205521f414c61960209621ed145f1a542083215615831a4f208b217515891a20201f215e15221a1e201621091585190e200b217214061a4f1f6720da14b319ea1e1e2080148819851ee91f8c14f3180f1e461f80137117dc1ded1e67114a171c1def1db6104a171c1def1db610861cf21ec71ec912861cf21ec71ec9127c1c422138225419a218361b921c950ca116b318461b650dfb17fa19d11cf0129a1d63212623e91b851e40210623651c0d1b231bde1c16136214d018351a690b0118581a831c490f4320d5235025101d39203e24f9256d1d53103c068e19ba03000000003e1c000000000000291c0000000000002a1d000000000000261e000000000000f120000000000000db210000710d2012bf234d01360f00003f24f50100000000b22400000000591c4d280000861d5423e12ea018091cca21612f0618b419291f792bb0140000ac22a52d0000c71e1624102f6e1a230f0221cc2dc70a0000ad13ac28000000000a1ab82500000000c02121280000d21bb322f5264618041af0214c25191630195d1fab21760d7c1a6c20bb22a70f3a1c9c22f324ad16ce1d2d235725c919641dc322b6244a194c1dd422b5240719501d99227c24e018b31c6e224d244f18401ce321af23aa17e41bd4218d231c17c11b8f212923dd165b1b4b21fe226516e11aa020d221c315731a502054214c157b19791f9f206b149c198d1fd9208514da19991fa6209f14fb181a1e0220de130f17601d101f76115f181b1e6d1fa0122f181e1d5f1e3512c9184f1e621f8f134f19081f2820e01381189a1f98201c120516cf1cc01d46100516cf1cc01d4610561bc21e871ff811561bc21e871ff811d01bad2022216518b11b431f5920fe12ae1baa1f08213a140c1d3b20ad212618e41c3c20e3211d192218b51cd51eba0e0000c812011a00004d121a1a791d3c069c18091e6020cc0fd41e6423ea24761b161e1622a124551b080e0015a21bc0035e00f318461e000000007517bc1d000000000000af1d0000000000000000000000000000322000009e1a2a17372354108a1d14219c27b017961c2e1cd1249c1400000000512400000613801d1528820b2f1d4324342e9718de1a1322882e11170000841d2e2900000000921d22260000690b3f1c132cbc0500001f1874280000000000007124000000007c16192300002c0cb1211526eb07fb1b322351268d187b1598207024d01194162b1de01f830c40194a200f228a0f571b8422f524cc15b61cce222a257918881cb622d2244d18071da322b924b118c31c87228a244b18311c6a2286248f17551c00221224ac17651cd021a123c817561c5e2119238a177a1ce4207022a417e61b9020c5219e16491b6a20bf211a16f41a35205621b615dc1af91f0221a315421a8f1fad200a15541a201f5b20331554197d1fb4204b144c1ac11fcd20fa14c619341f76207814dc19801ef01f89146519e11e2520d5139b179a1ee01fea10a4181d1edd1ee312a4181d1edd1ee312151a211ddd1d3d0d151a211ddd1d3d0d68192f1e4c1fc91446196b1d4d1f4a1080187b1dba1f760ebc19211e472008115a170f1c2f1f1b0c000065164f1b000000000000b717000000007c184f1d00004a15221ec820d90fa21eb0233a25351c281e56232025831bbb0b8218131e68029810ac1afc1fe406a002f41b7c1fbe0000000000001e0000000000000000000000000000a41e00001c1bae19342232105f1d9121342749174d1b431c2e24a412000092104d23000000000000f62300000000a61aa126000000001420282c00000000071c3e28000000009019ab23000000001a1e5a2a00000000d419322600000000000023210000000095197e210000031794220126c412731d3e232226201a1217bc20742480136716211cfd1e980c24196c1fda21b50f4e1b3322d724c515081d5d237e25ef185d1d4a2337252d192b1dff22f424e718551c56227824f217101c03223a247317011ccf21fc233817e91bc721b82301171b1b752127232e16311b2421e5222316e21ae3206b22e015f61ad4206122d515831bbc201e222c165e1b9620fd210d16ae1a542076217d15061a30205321f314081a801fe020dc141b1a901fa320d214411ac31fc020d614d019751fc120af143d19831e26209b13d516a81d941e32108f15c91c981dd40e8f15c91c981dd40ee81a331e0e1f1410e81a331e0e1f1410fe19151f1c2035150e1c1820f22034149a1c56205d218418be1c072090219516a51ab41e45210b121912e81a0b1e6b060000e216241c0000dc0db81a9f1ed5038d19ec1eb4213514bd1e33232a25461c581d4a22a0249c1af912871aca1ec90830160e1a7020d60c1e04ef1b7e202a0100009b156d1d0000000000000000000000000000131c000000000000d41d00005d172710152059025716891874210602000000006a210000000000007e2100000000681a692400000000cf1e2929000000004e1bd125000000002216f4200000000006207228000000008e19d52300000000670ddc1e00000000ff184c200000ee02c3209d24e0008e19a51daa20851000000019531d000000001615e21a000003196f1e7e21140a381c3022b4249715aa1d4823512532198f1d322330251919381dfe222025ca18f61cb922cc247918b01c86228c2439182e1c31222e246717f41be021f223eb16ec1a732148230416801b3d21022367161d1be8206722f615101bc8204322ea15781b9820d92123165b1b7220c2210b16ac1a3b2072217b150e1a21205821fa14da1a7420e721a1157e1b3f2026210916d51ab41f95208115541acd1e352033152a194c1ead1faa133118581efd1faf11ff147f1c321d800dff147f1c321d800dfd18421cef1c9e0cfd18421cef1c9e0c5917f41c0e1eeb111618941c871d900c4d14c719631ca1095e176d1be91d0e0d0115fc18b21da1080000c0125d1a0000000000003017000000003418a01c00001c11861d5b205208191f94240226df1bbb1f2a250d27c81c5d105c16671de0040000e519961e000000001619b81e00000000bb0e881d00000000000000000000000000000000000036110000321d2a001615960cde1d530000000000dd1d000000000000272000000000000055200000b611671cfc22a60500003822e6270000eb123b1e9c24120a00001a1bff200000ba0f67228e271e092d17771d4c23120e0000c20f7d1d00000000ed190c2000000f0e86203f24dd06b019d81d652044100000f31a5d1e000000003718af1c00001119ab1e62213408581c2c228f24e3158b1ef5239f251b1af71e1c24d625801ae71dda23a7258219931d572332251d19531d0723fc24cc18e41c46225f245518c41cde210a242518b81c852156230718c31c682144231018511cee208a223b17581cdf2081222317701ccc2051222717941cab20232260173c1c7020c621d316751b6120c6210216c119cd1f302174149c1ab11fe0200315ee19d01ff0207e14751a361f7e20e4144a19d31e36205713e0173c1ec61f37119417511d321e42119417511d321e42115c183f1b4d1df50a5c183f1b4d1df50a2e19531d051fc014a018fe1b141da40e4413651b4d1d850850136e1b5f1e4009ac10b318581d530400000000d817000000000000610f00000000fb152c1c0000b70b961cdb1ec502851e8924f525b61a651f50245626561cfd0a35156f1cba010000df18e51d000000003c16441d000000000000271c0000000000000000000000000000000000008a04320c571c0500be090000621c2300000000008e1c000000004e10821e000000009110052000000a1afc1dc022e011fa10a42254262b0c5c15031c00215b0bea14ad1a7620cd09e6161e2106250111031b941e9f22ee110000ca16131f00000000c51ae02000000a145821d924930cfc18211d7020ca0f0000321ade1d00000000f615241c00003418351e6c21e7055a1d552379256e17821f3b241026201be21e3824fa25881aa01ed8238c254a1a051d57230e259b189e1cdf22e8242a18831c92229f24fd172a1c532279245f171f1ccf2102240917271cc521cb23f5161c1c81216223c116111c69214d23af16541c4d212a23f916141cfa20f1229316de1b8320ef215716c01a8e20de217015d219581ffd209814d219371f882081144219f91e9320f813f419c81e4a20b3145719761e0d20c01379183f1ec11f11121319771ecc1fe2121319771ecc1fe2126a18f91b7a1d9b0b6a18f91b7a1d9b0b0819501dcb1e4b144618d21b221e3a0f9112c91a0e1d81081012501b851e8c082a15d519af1dc70800009d12281a0000000000002817000000009219a51d000000004b1d11200000ec1d8624b625791aae1fa1248026b01ce1111214b61c30060000ba14de1c000000006b14d11c000000000000d21b0000000000000000000000000000000000000000ec08c01a000000000000011a000000000000711c000000000000221c000000000000501d0000c418691d8a21b70cb314cd210625ad0e6a179f1b8220cc0d0d18591cc020560e8f190c224025b7130a195b1f9523d5120000341b272100000000ea1c3c2100009c126521b424b10cd616fa1a2b20de0e00004918131d000000009c14131a00005115171d902095080f1c4922d1245f15f41d0024d1255e19981e1724e3250c1a6d1e03249e25e519401d84232b25bb18f71cf222d7247a18bf1cb62298244718b71c8c2288242c18921c2a223e24f217851ce1212824b717d01c6d219a230818b51c41211923e2175b1cee2090222817411cd3206d22fe16421cc2201122ff16ca1beb203a226716991a9120d2215115451b6a207121be15b61a42205d214d15c81a7f1fca2077153b1af51e4220b91482186e1eda1fae11ac158f1cd51d540fac158f1cd51d540f4019e31cb11e300c4019e31cb11e300c6c1ad91e372095157218541cb01e620e73147c1cf81daf088410b71a871d2e045c0ff619211dff0100004c16521a00000000000020170000000052199c1d0000d401101d241f0000851e43249a25551bc22080248e26571e0000ee01181a000000000000e408000000008915981b0000000000000e1b000000000000980800000000000000000000000074066f190000000000009019000000000c00301c00000000db106e1b000000004714b91c0000fc15061e0022eb0912193723be258613e916c71b3020be0c4512eb1afe1fcd073b186622cb2432110000b81e4b22000000006810121b00000000c61cd52000006314b7200e248d0c8a18cb1bf31f190f00008b17261d00000000851588190000a814ea1c48200d056c1c8922e524ff15791e2424e325d619c91e1b24c525391a0d1eeb2388258c194c1d85234425c7183e1dfb22ec24a418c21cbe229f243718a51c82227e240a18891ce121e423be17271ca321a723f516e01b3f2101237916e11b3521d7227916061c1021b0227c16171c0b219b2275162e1c05217a22bc16ef1acb2049227915461aaf1f1921db14161a971fd8209d14091a801fe9209314851a191f792026153519b61e3c2010136918e71d871f1f129d154c1ca41db80e9d154c1ca41db80e76154d1aec1c5b0876154d1aec1c5b08ce18971d521f061410173d1b551c4c0d0000bf18911c000000005217571c0000d40be714c519300100000000fb17000000000000c11200000000b7165d1c0000c20ee01dd11f6c04fa1efc248d26f51bdf20a0249327b91e00000000521a0000000000000000000000002a14ed1a000000000000661c0000000000006a10000000000000891100000000830e131900000000ee02331a000000000000ec1900000000cb0d701a000000004a091d1c0000f2145a1c862094084b14d9209124190e27121b19461ea707f510a619321e3805991924211b24e1120000571ccd20000000007914071c00000000291c80200000d31658208923830f9618671c70202b0f000056197f1d000000004214861800008814331d5120c283641c8e22ba244115bb1dac235b2512191a1eeb2389256719f01db6235b255a19671d74232d25c918841d2623fc24e218351df122b2249c18da1c88227b243818ac1cff21ff231018831cb221a623b417911c53213823a617ed1c50211d230c18ee1c2d21d122f117d31c01218a229e171e1cbe2012228016881b9c200e22f215561b5a209921ad15351b0520152158154c1a00202f21c614361ae81f2321cf14ca1a25202f210915131a6b20a72150148d18231e5d1f06128d18231e5d1f06124d17031b4d1dd2094d17031b4d1dd2095f19291dab1e7f14be175f1cc41d8f0d7a10491b001d6d040000f618ea1c00004e0a3d170a1cdb0000000114a91900000000000025150000000086179e1c00000000a81c1b1e0000791e9424d0252d1b1d21a0245126bb1ec4100f138a1acd0300000000e81000000000c916571b00000000840cff1b0000000000003a08000000000000811400000000de0038160000000000005418000000002f0cd61a00000000b714051c00000000000042190000f70d361c2c20f30269199a22b7240314f6148d1cf11d2c0a6c18e71c5f1ff00ca41c4c23182500162617ca1c3b205c0d00004d18c81b00007114a81c9220cf09b7174920d8235f102f1ad11b821f081100009b17ad1c00000000ca13251900008714f71c6220a586ef1ca322db240f16051f1724b825531aab1e1924c725391a691eff238f25e119a61dd02355252f19471d4c230a25d818431dc9229324be18f31c752275247618e31c1d2232245318961cd921c823fa17291c812149231a173a1c592122233617321c3f21ef222917511c1321a3223b17321cf8205422e516e71bd5203c225d16f01a8120e2217a15ff1b552070210f16351b36202c2193153e1b911fcd207d15521afa1e542049142119011ef91e4d12a717a01da71e6f11a717a01da71e6f11eb18641cfa1d380beb18641cfa1d380bd119a21e1820f714f7161c1b161dc70c4413ee1a1d1dcc053412a91a401e8d0400004e1aca1d00000000e117341c0000000000004317000000001014e01b00000000ba192d1d0000d9144d1e5c20580a7b191223a6249714f414a2183b1c9508000000003514000000008d144e1a00000000890de01b0000000000003213000000000000a714000000003912e41900000000ad09451a000000000000a8160000000062011719000000004016e11c00000000a51dec200000b4178022c824b711b715b01b9a1dbf0a2316001be71d120a601a03204a2238140000fe18631e00000000a9174b1c00001f14ee1c6d209b082d19d1209323b311a219a71df2204d11a1091a1c521f8f020000ef17d71a00001f156d1daa2016884c1d692380258216871e1c245e26fc19971ecc23df250b1a721eba237225e919b51d782337252419811d2723e424f6183a1dd8229e24a018151d922292248018dd1c3f224a243b18ea1c042205243218981c90215223b217c11c42213c23d0176c1d1a21d2225e18ca1cd8206b2291170b1c942006226316791b22206421e7155b1a2d206221eb142a1b1f203f216e15691a08203221db14f21a5b1fb1205f15601a1a1f7220a0146d187d1e1f209411d017fe1c341e2c11d017fe1c341e2c11d519201d8c1e3010d519201d8c1e3010df1a811f3f206a16c914651cb01d060700008115351900000000b618931c0000811387179a1c97030000180f271900000000000020150000000015184f1c0000260cbf1ce01eb60205202e258426a61c4021e325fa273e1f5e160418b51cad0800000000ff130000460e54154c1ab50700000000e7190000000000000415000000006204711a0000000013144319000000001d0e99190000000000001e1800000000ba049d19000000000715291c00000000d21c7c2000002f174522d424de109411651efe205c081b12cb1c211f0a062218c820ae2335110000181ad81e00000000d314321c0000680f001c1620d8048d14121f7f22b80c8b19101cfc1f28100000c119c61d000000000b18a01a000011169c1d74201188ae1cab22bf24e615581e00249725d119581eeb238f25d1193f1e77233625bb19a31dff22bb241519051d90226f247218c81c392239243c18cf1c13221b241b18501ccd21b3235d17471c78216b232a171a1c42211823be16511c0f21cb221817151cf02086229416091cba2053228016691cc2204d221b171d1cd820af227f16e81cfd206d229817081c232035211c16241b3d1fd8204c15ae1a381fa0202b15061add1e5120461433192e1f7420e3124c16ff1c411e220f4c16ff1c411e220f2a1b5e1eef1eea102a1b5e1eef1eea10da1d0322bb236c1b881ca821af236319c016e61b301ec90e7014891bfc1dce093e0e2e19b21ce30200009b12a71900000000bc02891700000000dd17841c0000030e161d851f2004fa1daf230e25a01a9c1fa4247526111d90179918e21c090a00000b10e7170000ea16ed1c321f0511b418e7213924d6145518dd161d1d490c0000ce14821c00000000b0127619000000004712d01a000000005514341b000000000b18441d000000006f1ec52100007a170f23832562125d1c6d2314267d185318cc1f3b22c30ed415dd1cb41f230a3e196f206e239c132b199f1c4a20c00f6d0bc11ac21ef501d807e41bb81f48011d0c491fc522ca0427182c1bd01ff70d00005e19da1c00000000ce14721900006815341d31200089561c60227624be152a1ec3235a25da192c1edd239625c319ef1d932379257119c21d1023fc241919401dee22c024a618bf1c7c2288243418f41c2d2244244e18d21ce621f0231d18691c8d2177236417091c1021c822a116181cde208e22ba16cf1bb22054224a16d31b89202f224e16b51b5020a82116165d1ac81f32210615ac19fa1e7a20631439198b1e2420ea13e119de1e7c207414ad1a381f92202a15c71aa71fbd2007152f19ce1e42203213f7172e1dbb1ea410f7172e1dbb1ea410e21b0c1f6e1feb12e21b0c1f6e1feb120d1f39235e24b51b171eea2274246f1ba41c122091216818221d74214e23da19d81dd0204f225c19921b3f2111236e1799188b1ce91e7910f1141a1f2c21630e671d1823c824fd19d6201025ac26711e3a205924d325b01c681aa91bbf1e65107010ed1adb1f81078515ad1d6d20011000003c20d22300004918d519a91e3d0c0000c019d91e00000000a519311d000000001f17aa1c000000002f15491b00000000d717c61c0000fc10891d8a20e205be1a5d248226dd15681efb24b127cc1a9a19291ede2086127718a21e3b213311d3190423852540159f1c24248326af18f718991cb11f9312e314ec1c6420890d83100b20ad22450b5318581dab202c115c190821ef2393142d193d1eeb20e0101018f51e0a21470c721bbf21552486153d1df3222c250e19921d282330254a19fb1d55231f259419001e5b2313258119a71d1b23db241819341d8d2274249c18f51cec212c244f186d1c262141238d170c1c6220fb21a616211b19209c21dc15401b1b209d21d715051c272098217a16ed1b4020a1212216071c632098213c162d1b5420c02170159e1a14204e210415a91ace1ff820f0142b1a741fd2209414951a7a1fb82018157f1a7d1fae20b71422191e1f69204a130917d91c901d2c0e0917d91c901d2c0e9c1a5e1ef41ef5109c1a5e1ef41ef510b61dcd213823e11a7d1dd321a9230d1b6a1d1a217b228918821efb227824131c341e1b23ca24551c531ee722b524b81b3d1e2421bb2208181d1d4121ee221917bd1ea3233e255d1b29216f241626b61ea01e1424d625aa1bce18da1d5e2071110000d119281d0000dc144b1c381f700e37156c215424b3106319621c9c1f640f00000817fd1b000000009c160b1c000000004814941a00000000b415221b000000008c17621c00005e0eb21d6c205a03fe1c5a246b2680185e1f3625c527071c2d1b841fcd214b128f191b203622e110f718ea2277256514741b2b222725c9173719ed1de92094105917e11de620460d2a1960206523ad12ee1a7f1e6f21f712e418a9207123051481197a1e1d217a108518c71f92210e0aa31afa213c2480140f1d65228a248f18221d6c226d248c185b1d5b225a24a8184a1d4c224d2499183c1d4b2257248d183a1d0a221c248b18d31cd021d6231e18851c7e217123db179a1c5c213623da178a1c4321f8229a175c1c2321bb222a171a1cf6208322be16f11bcb2066226516c21ba22026222016b41b7d20f1211516971afa1f542134157a1a0d1f862003157a1ac81e5020cd14fa1a6c1e48202c152e1c791e24208915ea19421ee31fd5131418131d261e7d101418131d261e7d10c21a381e551e4911c21a381e551e4911a21ddb212723df1ae91c90212423261aa61d3c2168224519a81e47237e242b1c2e1e8123e4241e1c861e2a23cf24db1b0e1fab2141235819621d64211b23fc170b1fe1234025cf1bc420aa244e260b1e891e2024bf25751b1917b61cdc1e051000003018ae1b000074132a1ce21eef0c7015c7216724d1108018e11c9e1f090f0000fe17521c00003b158e1c621f820a0a16bb218f246210091b5d1d6d20461100004a1aae1d00002f14a91d9920bd09f21a9423c0257b16851d3a2475261e1a051a061f3c21791109183c1f7a21990f5f1b50244826ff167b1d32247726291a7b18fd1dba2038112318341fba21f310021a1a22b0241616a61ca02230258719b81c4622c3243b19181d272127236b16d71c7c227124e718341d0023e82470198a1d0823e6246f19801d0423db243919861ddb22c52428196b1db1229824e218551d71226124a318f51c0b2226243b18d01c8a218a230818351c1c21d1220b17151cc1206f22b6160f1ca12049228a16201c832024228416251c6420e9218c16ca1b5020d1210616f51b4d20bb214916261bef1f35216b152e19ff1df31faf13c5185f1e2b20ed120019341e3320f012bb19521e28204014da19591e0e20bf136318bc1d1c1f1b11ed16f81c151ea00fed16f81c151ea00f611a111e581ec910611a111e581ec910f51d8a22fc23451b611cd320492258194c1b381f9f201d162f1eb5224d248c1b5c1e7623e5243c1cd71d75226124081b601c541f07211316671b281f1c218c140f1ba1209f225c16541c951f3c217515431a802122248b159818a51cbc1e2e108515751c6b1eaa0c841c5123e524b818011ef5237a25c11ae315661c5c1e3a0c0000c814be1a00009814441b891e2109dd1706210a2436124218bf1c721f920d0000ea194d1d00003018e81d7b20ad0c211de424f2264719e11ef5242d27f41baf1ad51da520a6115216811d8f20260e2b1b662387252517a71e41248226381c431c622396253319421a7f1fc821e313b11b8922a72434187d1c252382254319a31c3722c9243719521c84208422c114271c9e210a242418b81cdf213224b518011d51225e24c0181e1d4c226024b1186b1d46225224e2180c1d352246248d18491df92123249818e81cf5210b244418ba1cb121ce230918cd1c802182230518141d5d2146232c18db1cfb209922d217611ca1202a22eb16751b3b20bc21c515eb1aff1f6b213e15021bcb1f22216c15b61aed1f2a2131157d1ad41f222105159c1a8b1fd9200315431a081f8a20a514551abb1e6820e614d01a1b1f8320f2149219411fb620e9138b19d41e0c2006148b19d41e0c200614291c691fc020a415291c691fc020a4156e1c86209a21b318371ddc2036221316171f90223724f91bdb1f2823ba241b1d631fe522a524a01c6b1e1f222e24041b961c1e207e21c715081c00206c214f14281cbd2094222b161d1cce1f0f216e12541a811e9e20a90e7316ff1c5e1f24097719641e4820d90f381eaa2296248119001f4d23fd248a1b89158b1c211eae0cb215351cc31dd10cac1c4523e524cf187b1d46231225b01a9c1cf91f7221a314341da2244126f01951208b254d27061efe1fbb24ab26631def1eb124c726901cd11ed623a625fe1b991cd91fb1217b13011a9a220225cc15391e8b2392257f1b7d1cc222d8240d196414821b1d1f890d43167d20fb222411081397197e1df209c8088319851c2f01cd13b21c321f3b040d1a8c20a122e014881c7f2103249718131d88210e24d118f71c942104248e18c11c7221b0234918031d502164237018521c432173238317201cd720da22e816391cdc20d4221217581cca2098222317241c9d204a22ab161b1c6220ff217c162d1c4520cc219816241c192085216916041cf81f6a211616231c04205d216716111cfb1f52212916921a541fd6201615661ab81e5820bf144b1ab31e512092144e1a8d1e3a20c714b21a901e0c20a614c3184f1e13204e128618a01dde1e8f118618a01dde1e8f11ef196c1d991e4a13ef196c1d991e4a13e61bba20a02110180b1d58203f215b16011e4e2206243b1bb81e9c224724871cd11e76223a246f1c0a1e15221f24901b8b1e01215522a11a431ea421c823241b141e12222c24531bc11ffe219a23be1aae1f1423a824521cdd1f65231a252c1d1d2091237b25691d6620a5237725b81d7820d8237325061e6c20c7236925081e2e2090232f25d61dde1f5223fa245e1d431f2d23e524f41cdd1e3523f024931c2e1ef62210251e1c791e7c22cd24281c621f18234325811cbc1e0f22ca24ee1a3f1e1021e5223c180a1ec4228a24051a781f85231d259e1c7a1f01243925901c1d1fc2231525491cda1e95234c25121ce11d9222b724b41a781cbb210424ac18da1c1321cc229416d21c72218823ba18681de7214524bc193e1d9c210b244f195a1da92111242a19661c3f211c241b18821c292172232318551cf720f822ac17251ce020ce221317a11ba6208e224516b11b7920352233166f1b60202222df15ad1b4b200022f015ac1b2d20bb21f0158c1b27209c21b815ec1b14207d210116281c002041212b16861bb61f0221b415aa1a621f0221f214d119691e72205114de19681e49204214f319591e40205214f2194e1e1c20691492190f1ef21fbb136e18751dde1e951104160a1c4c1dc60f04160a1c4c1dc60f50183f1c001d791050183f1c001d7910851d9421eb22791a911d3a212023251b991e29239e24571c361ff022dd24bf1ccd1f2c23bf24121d691f2523e224c21c8b1f3c23d224c91c531f3e230225961c7a1f52230625af1ce31f55230225e11cce1f4523ee24d31cd61f2a23cf24d81ca91f0d23cb24ad1c4c1fd622ac24741c1c1fac229d24481cbd1e8b229a24011cd51e14224624101c0d1ecc210c24181b161ea421d8230a1b061e9d212224df1ae81ed2211624c51b771ece212f24601b2e1e6121dc230d1bcb1d7121d1239c1a8f1d5d211f24571aac1d96210e248f1af61d83210b24e51ac61d97210b24ae1afa1daf212624ea1ae71dfe215624a41a961dc9214824481aa81d3a213e242e1a3a1d39210324b6193a1d4d210e248b192a1d6b21f8233b19fc1c81210224bb180a1d7621f8238b18bc1c7721e9233118d71c5021b1232218b81c2d2171230718a61cfc201923f0178a1ce120cd229a17691cb9208a226417471c9b2051220717361c73201822c916401c5220dd21b716011c2d20ba215316221cfd1f6a214316d11ba11f2421ec15351b251fdd205815251bd41ea4203015f01aba1e77200915ce1ab31e6b20d414581ab21e71208114641aaa1e7520be14351ab41e5f204f146719301e15208013ad17fe1b2f1d9710ad17fe1b2f1d97104c19a61c721dd5114c19a61c721dd511511ee7214323681bff1d2522f623201bd31e7d2226241c1cf01eb72270242e1c201fc22288244a1c601fac226a24711c041fa62279242b1c2a1fa4227324331c7d1fad228c24551c861fa22295245a1c651f73227724471c191f112235240c1c3f1f0d224024131caa1e09223e247f1b4b1eda213624fb1a341ec1211f24c81a271eab211624b91af31d9a210a24801a561daa213b24bf19e81c232166245d19a61d0d21cf23e719891df5209f23b2195d1ddd205a236f19651df22041237719471de9203d236e19e51c0d2162230919e91cee2044232119e71ce32034232019d51cd62034230d19fa1cc52026233319d61cd3204923fa18da1ce2206323ea18d91cd6203e23ea18ce1ce1202423ca18b11cdb200b238718a31cd320ec224118961cc820dc22fa175e1cc420c32250176a1cb2209e224117461cb4209a2206174a1ca52086220d17151c9f2076229416161c7e204b229516161c582013227416291c2320c7217016ff1bd31f48210f166e1b331fdf20a115ec1ae91ebc203e15021ba01e822033159c1ab01e702003158f1aa01e6220f814261aa41e5b208f14201a751e3220a414c8194d1e1a204a14c219091e04207514dd19f01dae1f4114bb18621d771ea91181181f1d141ead1181181f1d141ead1100000000000000004c19a61c721dd511511ee7214323681bff1d2522f623201bd31e7d2226241c1cf01eb72270242e1c201fc22288244a1c601fac226a24711c041fa62279242b1c2a1fa4227324331c7d1fad228c24551c861fa22295245a1c651f73227724471c191f112235240c1c3f1f0d224024131caa1e09223e247f1b4b1eda213624fb1a341ec1211f24c81a271eab211624b91af31d9a210a24801a561daa213b24bf19e81c232166245d19a61d0d21cf23e719891df5209f23b2195d1ddd205a236f19651df22041237719471de9203d236e19e51c0d2162230919e91cee2044232119e71ce32034232019d51cd62034230d19fa1cc52026233319d61cd3204923fa18da1ce2206323ea18d91cd6203e23ea18ce1ce1202423ca18b11cdb200b238718a31cd320ec224118961cc820dc22fa175e1cc420c32250176a1cb2209e224117461cb4209a2206174a1ca52086220d17151c9f2076229416161c7e204b229516161c582013227416291c2320c7217016ff1bd31f48210f166e1b331fdf20a115ec1ae91ebc203e15021ba01e822033159c1ab01e702003158f1aa01e6220f814261aa41e5b208f14201a751e3220a414c8194d1e1a204a14c219091e04207514dd19f01dae1f4114bb18621d771ea91181181f1d141ead1100000000000000000000000000000000721dad1c321a9a0e80215f220024ec1d77232f2301247f200a2534221623d421bd26072201237923b02822229c231f259c295321f6220a26fa29e320c0235726992af0200724e526232b04217324cd270e2b87213d24d227932ae91e3f2430275a29291d0f23ad25412971219d26142660283e25812aec243725a3248b2c5e215f24e827c12e4a209724fc2b2731e9173b201829e8302191f51bc82561309d0b341ddf257b307813e01dd925a1307716921cd125be30c816a41cff245e31d9153e1aea245c31930e9e1dce27db30e38b7022a2295831650fe422d92a8632031ce02177289431141c6a2157257c30041c1e1eb0248d2fa318cd1a6b22ca2ece156111d51f192c970cbe186e202a280c147f18ea1fa5236413b80b131e452177069414d31e1e21ab0f09194f20ed2138148e1aaa201c2298159a1aad20ff21a2150e1a7a2098212b15d5195e205521e3144f1a512027216315ee1940201221f714091a422001210e15281a41201e212815e2192b201d21ed14df191a201921eb14d91908200921e6148119b71ffc209c14b3195f1fb920af14f0192f1f6820e114ca18611e2120b713f518b61d0d1ffc130319e01d231f0914ce18f81d4a1f061492182c1e591fed1249183c1eb81f151250174b1dbc1eb6120000000000000000721dad1c321a9a0e721dad1c321a9a0e80215f220024ec1d77232f2301247f200a2534221623d421bd26072201237923b02822229c231f259c295321f6220a26fa29e320c0235726992af0200724e526232b04217324cd270e2b87213d24d227932ae91e3f2430275a29291d0f23ad25412971219d26142660283e25812aec243725a3248b2c5e215f24e827c12e4a209724fc2b2731e9173b201829e8302191f51bc82561309d0b341ddf257b307813e01dd925a1307716921cd125be30c816a41cff245e31d9153e1aea245c31930e9e1dce27db30e38b7022a2295831650fe422d92a8632031ce02177289431141c6a2157257c30041c1e1eb0248d2fa318cd1a6b22ca2ece156111d51f192c970cbe186e202a280c147f18ea1fa5236413b80b131e452177069414d31e1e21ab0f09194f20ed2138148e1aaa201c2298159a1aad20ff21a2150e1a7a2098212b15d5195e205521e3144f1a512027216315ee1940201221f714091a422001210e15281a41201e212815e2192b201d21ed14df191a201921eb14d91908200921e6148119b71ffc209c14b3195f1fb920af14f0192f1f6820e114ca18611e2120b713f518b61d0d1ffc130319e01d231f0914ce18f81d4a1f061492182c1e591fed1249183c1eb81f151250174b1dbc1eb61250174b1dbc1eb61200003f142c11000000003f142c1100004a1f7f223924db1cae201d2352243c1e622158233024001fa123d0221624c7207325b223e524d322cb265f23e5240924af270f23f82414247a28a42263242d25e6280524642523260129682423265926e828aa25062825262e28f1247427d524e426c724272834244f25a525fb2990220923bc25092c771f8421ad26be2dc41d4020de26382f1f1b1c1fb3250a308019c11ced257530c016da1cc625a4300b17951c9225b030eb15b91e8626ef303c187d1fbe26c23151192a187f256e31b810671b1c26d430da0ea41ea6261d319d15161fc02575319418101bb125563120154d1c6a258a303e160a1c2724c42f82160e1c07247b2e3d18fc199623752b8b1678180a228a27d0144017c720f0239313bf17dd20b6229a13dd180321c8222915e11a97214923c016061b8021f722aa16331b8221f722d516ff1a6721c9228716081b6721d4227316711b7221b822b6168c1b5621ac2290160b1bfa2001220316be1a9420b021c215491a4c2059214415f21910203021e314c019d61f0321b914b619b81fe620b114dc19aa1fe220b814451ac61feb200d153d19021f6d2023142c19b21e362015149919ba1e352082147319ad1e1b2090140e19a81e0a20a9135418261eb31f2512cf17681d8f1e2b12cf17681d8f1e2b121512291960185b811512291960185b81491efc217a23161c971eef2253248c1ced1e85239b249d1c842067238e24df1de622292467256e205824d02345255f21d2244224ab25a6215e257f24092677223b269e24d4250d242526c42498260b244f26cf251c280d24a925ad252428d122b324c1257428bc2116245c25b1282f21bb218c26b12a5a1eff1f9c252a2c7f1c411dcd23ff2ca919691d9524b72ebd19191b7a24ce2f8817da1c77255e301119721c5a259f306f18c81e5226f230381ae41fd725a431dc1ae119f9247531d414b01c4825cc3041174f1f7625f230a819ef1fd6247531851aa91a22242131af154a1c0e2421305317041db823a62e85181c1d8624602d57191e1c6c243b2a4d189d19d1227e26de15d1196c213724b515251a9721fe2308160a1be02115240517171bc721d723d8164a1bda21ae230917341c38221324fb17201c56221524b317ca1b1222cb232517001cd92181233617b01bba215023ce16951b5921c3229716eb1ae020ed21e8156c1a7e2085217b15f81944207f210015fe193a206e2105151c1a2e207c2105150f1adb1f0921fb14001a9c1fe220ee14cd19671fad20ad14a719191f60208e145a19cc1e3c203a144219701e1d205214c018341ec51f0d13e6174c1d8d1e7b11b116261d8b1e2d11b116261d8b1e2d11e3089e1ab11a4600e3089e1ab11a46009d1f7d23a424dd1def1f05240c25581d2f20da23e1241b1e83205b246f254d1e1c225725df2669201c2310259126e720d622df2470263a2092232d25c326dc200c243325c32601214b2451265428c9212524cd250c28fe20861df91cfe1e41160e22b0242e273a1ecb220226c228f71fcd216a25fb28b61eec20e024b629161e46204925022c261dce1e1d25482ddf1b9e1d7f25d12e3a1abe1c4d24c52f2f19a01c4f257130fb18ff1e3026e2304f1b8020d3259f31b31c171817259e310314801e4f24d92ff719971ae41de42c0b165b1b78212630c016671e74235e30141a471cc0244f2f1018901cb624962d67180a1d1c24e12b58196c1c03249528b1180c1c2624de264b18fb1ad3222425da16a21a4322c324d3164d1c062329257e18dc1c76234025ec183e1c0023b9242a18731cdf228b243918bf1ce02267246e18521c6a222124ed17411cda217723ab170e1c9a212f232f17e81b7721f622df16771b1f21c8227d16771aa220e1216b15811a9120bf215815a619db1ff9208d14a9199d1fe7208f143d1a0b200b21ed14ee1915203b21af148019f31fe0204114d119a11fc3206814be18661eb41f09138919ba1e1c2048147a19211f4b20f313e018e31e73204d129416281d4e1e17119416281d4e1e1711fd15191d981dbc05fd15191d981dbc05e81e35224d23d21cb51f0c236b24321d93200e24f424631ebd202c243325501e70200e243125b31d0020d82296246f1c052032220b24f7191021202459255f1d15223d257d26221f0822f8250b28bf1f1b224b25a627ad1eb41f50218023b7198921b224cf26b21da92144252c285d1e032166248b27281d8d1d0c1ee5217918291ee8231229571a4a1eaa24b82bdf1adf1e4f25172d071c101ec024202eeb1af41d8a25e72f2b1bc51f82269d305f1cad21d0267c31341e751fea257b31ca1b2b1cc823a82f6117ef1e7a21a82ab31866174621ff2ee7127d1d68243c2f0919731de422b32d8619d71c3b243e2cfb183f1d66240d2abc19401d5f24a327a819c119332237258e15461a082084210e14a619a6212224ea149d1c1c235d256118c31c2d232d2572181d1cb822b424cf17d01cd92291247e18ae1cc2228a2438186e1c84227124fc179e1c3022102416185b1cc42165239317a61c3d21dc22f017cb1cce204a220418521c8f20e4211917b11b6b20c9215216dc1a4b209721a3154e1a4920772115156a1a4c2080212b15f71a68204f219c15491a1b204821f614781afe1f09211b15201a851fac20be1467198d1e1d204414c7186e1ef91fc9125718de1d491f55119a18d51e3c2013149a18d51e3c2013148e146e1b511c74018e146e1b511c7401cb1a8b1e15200b13701e7b21ee22081c51208f239e24191ee2203a241525821ebb2026244c25ec1dc51f0a23b3243e1c0d2049220124451ad52027247f25201dae2110257b26ee1ec121e7250928641ff2221a261828b41f961f8c221b25df195a22dd24fb26be1ea521c1255b28591eb320c824d1279c1c281f39209b22e119021f80244228531b391e6e25a729e61a4920e925982b181d121f6725502c251c9b1e1025922df41b611e28250f2f7a1b772002260330f31c29206d25a8309d1c201c0e24fe2e9117d91dbf20d7286f18c318a722092eac14031e7c24fc2d171a731da023632cde19f41c7e24b12a55196c1dff243629031a411ebe246227881aff1a12238f25c116061c5d207621b615941b212291241217861dba23d72599197a1dec23a9257619e01c72231725b518db1cf122b0248918571c5a225724f717151c05221e245c172e1cbf21d9236717331c942175237017fd1b4521f122f116ea1b1a21b622c1167e1bf4207b226516da1acc205c22bd15ae1aa9201f227d154d1a852006222d15791a3b20a6215215531abb1f0b213215ef19a91fed20c8143b1a0120002105156e1af71f07211415481a951fe9200f15a719261f9220031453188d1db71e2c118817201dca1e97118817201dca1e97111f138c1c9c1df4021f138c1c9c1df402581a361f9f20ca132b1d01216222d318231efd217723511acd1f0e236b24031c6720a6230125e21c0c2002238c243b1cd51f04236b24ef1abc20152472252c1dac2107258f261a1f5922c625cc27072022238125782720207120252332254c1b8023de241e27192054228e256428521f6621e024c427ba1d3020b5205a22c01a16204f24f627771c561f5625c5283e1c16203d25f928fd1c0120a925272a041db31e6024c12a241c531f9b24502c871c9c200d26a12d7a1df31f3425922eca1c7a1a38231c2d0b161a1f7d21ad2628197a1a2924742c8f16fa1e7b241c2c111bc91f9e24512a311c001ff224c7286d1b8c1f57255c281f1c221ea224fa26691a531842224d251b143f1bae1f03214315701c4d22a724b717d91dae23d025a519af1dd9239c254e19301d83234325c218171d37230725ac18031d1823d6248518981cb022872424183d1c182219248117161c9c2199233c17761b4d2124237d16921b2821e32276167d1b0821a0224616e01ace205c22a615d71a9520e9218215031a22207f21d814411a112056210915221a07203221f014fb1a6a20cf21a015a51a68207e215b15221a531f8d20f014d119611e2520b0144e18f01d701f1d123e198a1e68201b13e317de1db41f7b12e317de1db41f7b125b14071b691c80025b14071b691c8002721adc1d701fe412d71c47207e2171185c1d13215b2293186d20fc2256248e1cbd20ff233125411dc61f2023b924001c51208a22dd235e1bd7205f24da25371d5d2271250627aa1fb422982666284e206022b225d427f71e171ff72069227d193a22f224c526cd1ec6210825b0273b1f232054246227421c7e1dac1c301ee213601d001dc11f3414d71f34248b27d11bad20342581288f1d6d20c7241c288b1d262079250829431d0b21f825fc29651e27215126eb2a0b1ed1203226262ca51dba1ca124b22a8f186e1fa8212f256519841d98248e2a97198e209825f729c21cf21e6a244f28d01b601e84248627f71a1a1eab24b527c41a291c0124642659183c183f225325c513331af01f95213414ba1c25226e2409182e1d27236c2515199d1dc023af256b19681dc723a4252219671d8e236d250a19af1d872326252019ca1d1f23de242019bb1d70225e24fc18621de121da239818131d9421572355180f1d4d2120233d18871cf3207f227017671cd02063221817381c9e203e22cc169a1c9e20fd214417011c51209b215316181c5d20a5217716621a25206321f014991a2b2044211a15141af91f3b219b14fa19831fcb20a0140819911e3420fc126e18d01da91fba1128180b1eb91f5c1328180b1eb91f5c1372141b19ed1a490072141b19ed1a4900c61a9e1d9f1fce1215205f225224fc1cab20a124a825be1e39210a2506260a1f2421f12464265b1e871fa6233225fc1b0020e8219922301ab1207d24a7256d1d92217c25d926e31e9a22a92693286520cf21f6254328711e5c202023ac24771a6d210125ee26d81d6f21b9242a275f1eee1f1f246326c81b8d1df21c301e9415251d011dad1f2b152c207f254e28a71b69218d261c29001e2c211426c928651e09213926eb284f1e6521fa25d428c11ec3202c264729fa1ce81ee0246e28ff1ab5165c1b651ee20d981c051e5c209e14ba1d262460274119c71f6025ab28c11bdd1f582593284c1c381f0f256828a91b891fea240828fe1be41eae2411274f1b3f1c9b230b26ca1765192b2002222413921dab22da24c118bc1e43246a26d31a9e1e7a245826991ae11d3b24e625ac19c71de02359257b19e51c1523df247d18b91cce22a9244218b51c7b22792418186d1c21224224b217421cc521da232217071c97219823bf16101c73215d23ad16cc1b39212c234816721be320cb2200169e1bac20a2222316b01a2c208e216415031b7220e821a6158d1a372060212c15d919092033218614081a821ff020aa14fe19221f9f20bb145719ac1e412095134718771d2f1f64110c189f1d0f1f5c110c189f1d0f1f5c1111123f1a761c5b0111123f1a761c5b01811a561e0f202913e21e34221924331c3b2055244225c51d3321cf24f225d81e962103257426e81e4f2056240a26d91cda208e237e24101cc0210f25b926771e2722eb25a027821f4722c12691282e20652168257a27fb1dbd20c1224e24551b9e210925ce260c1eb9213325b527fc1e56207924c326641c771d1c1d441e72143f1c6b1ca81e73131220a5244427fc1b6c211026ae28461e2321752644295a1e04215226e228341eca203826e828c51d37214e26e328881d5d1e052509280a1a1519fa1cd11f1b11e71b801ed9207a14f71d2024de268518b01de52367266718221eea209d2255192f1d2024442682180d1fd824f027ce1a601e2424c8260d1a371cfc22b9259917a71a2b202e210a15db1c8a22a8243918f81d10244726ab19501e2e242c26e519e81d3424f3258319e11d1b24992565193d1d5b230a25cf18101dcd22a3249018021da62281248318df1c5b2259245018cf1c192230242e18b01cbd211c240018bf1c6721b523f3175f1c002128232f170b1cbb2095228416a41b90204f2228168b1b932010221416cc1bba202b226816dc1a5920a4218715b81a282062214e157c1add1f44211f155e1a641fcf202115d319d61e4a2052149c18171ef91f5e11ec16ce1c101eb110ec16ce1c101eb110380c291a7a1c1100380c291a7a1c11009b1ab11e8c20a412292075233325141d4b213f257e26791f3b2105252826cd1e3d210d256b26641e34208e241b26981cac20f3224124611b4421a6245526ec1d1222c72575274f1f30230b27e0281221ee21ed253228931eb41c0c1f53204111ee1d3d20ac2111141420f223f525111c421e84235726a419ed1c851da61fb413ef1ba11cf11eb612412018253f27ce1b9822bb26f2284f1f1d228827a329761f3f2264275729ec1f3e21012730297b1e05219e262a297d1d572045252a28301cab195a1e9e205611e01a5c1fea212113c81e2e2476264019aa1d3b23b6256218f81aba20df2265158a1c0523a425e417f21d47247027ee19bc1de2233926b719741c91221e25be170c1bd820d521c714e01c2023e62429188b1e35244e26361a841e622442262f1aef1d3d24e0258a19e61d1e249b256919901dee2355250419ea1c6f230e255a18f41cd022a8246318f31c5b224c244e18a81cdb21b923f3174a1c85217e233017531c48211d231b17df1bfe20bf225816a01be4208f222516e11beb208d223916fc1be42079224e161b1b902022229c15b11a362086212d158b1a2b205621f514ed1a0d2040214015191a821fca20b814e918801e3a20a81286188e1d3d1ffd11fd166f1cb41d4c11fd166f1cb41d4c11000071156d180000000071156d180000fd191a1d3a1f36126520af2332256f1dc5203e250d27d01e2b213225ac26b81e1421cf2420261e1ea41f7224ec252d1c7e2081228223611b2221b0242e269c1dff2163262028391f2523e6273129fd205b2131265928481e1b1c441ed41f9610411d2d2095218a121c1f9523aa258b1bbb1e452445267f1a7d1d781e0c207b12e71c351fb52059131721c025a527d51c5c2236271429411f182214272829891ff121e826eb28581fcd21dc26ea28e51eb6217226b4280f1eca1f6c241a27841bc418771ec2207c104418551f7c222710f91dbf2376269f18e81d3823b9259218121dc7211624d8172f1d062424269718f81fdf246a27091c5c1fe9242827751ba41d2a24352616192a1b6e203521f8148b1d6f23ea248e18291f41243626cc1ad81e3124db25471af61dea2389255f19ef1db12348255a197a1d64231825da18461d2723e824ac182b1def22be247e18ca1c86226e242a18b51c0c2208240418a61cae219223c917ac1c66213c23ad17931c3421fe225f17a11c0421d42276177d1cde2087221717fd1b8e2017224f16e51b802011223c16881b5420ca21d415c01a0e2046211e15861adb1f3a21f214671ab71f2021f414ee19be1f0e21351487196d1fe1205213b417d51d3c1f3512b417d51d3c1f351200002318321a000000002318321a0000fc1a441e3d200513722003247625911d48211e257d26341fe22000252926461ef220b924f325e11d971f5724ca25071cc62037234a24621b6e20a1242d26ea1ca621a5254727e51e0222a526c4284a200b21c5250f28ea1df51d1320b420a7124c1d7420e1214112451fef238325b61b981e382416265d1a081e861e82208113851cfd1fb6205b13c120b2244d26831c4f228d2687284c1f462292274129db1f072288273c298c1fd3214b2660281b1fc320f4256328341d761fe024bb27521bd8189c1fa42119100116c71e2422a60d1e1daf2384263418f81c8b23d525d917671dc62144232e18951d1d240226f2181b1fca243b27161bec1e36248b26e71a0c1d0c23c325a118bc19121fd42098136f1d21232a256018601f58247e261f1b2e1f87244426d11a9f1e55241126491a7a1e3524c3250b1ae61dfd236a256919671d68230825de18351df022a324b118d11c6c226a245718b91c1f222f242f18811cd321cc23d5173b1c88215c2339170f1c52212323cc16c11b1e21ea227e16af1b0121a9225016da1bef2089225316c01bc6204e223e164f1b7920fa21c5153b1b4520692198153c1bde1f0e219915011b2e1fbd204e151c1b931e4d20b514c31a0b1ee81f71138a18ed1d0c20bf138a18ed1d0c20bf13160dc718ea1a1500160dc718ea1a15001a19ba1ddd1f4a11132084227724091dd820fb240326c31eaf215d25b9267b1f83215f25ec26d11e6021ac240e26e01dfa20b023a1242b1cd72099240926711d4421b0255b276d1e1c210f26f8277b1e39209325c927d11c6f1e2421ad213514b71e1121d622d214a61d07232225d019ad1d53238d257a19061d2c205f214012901dad208f2159140721c1259427b11c13223827f728d51efe21da26b9281f1fdd21be26d328101fbc21cd26d128d11e3021a526cd28811da020862526288a1c031b5d206e22d0102b18b21f6c220d0f361ed9230e260119e71ddd239f25a918f81cdc21bf2388173d1da9239a25a4184f1f8624e026671b901e8e240327561ac01d2f242e262f19641b7a207721e414b11d88230c25ad18601f7b249e261f1bbd1e6824a2264a1a111e122420269119e91db42381256c19971d80233d250919691d2c23e424ca18171de8229d248218d41c87227d243318b01c27223a240018a21cd321d923c317901c622161237f17b11cfb202f238f17f51ccf20bd22d5174a1c55204522c716fb1b5120f6214e16161b15206c219915ff1a15206a216915f41a27204f214515c61ad11f33212215911a5a1fcb203015e019021f88202c14c618c61d9a1f68112f17a71c0b1e54112f17a71c0b1e54110618951dbf1e5e080618951dbf1e5e08b81e5b2281236c1c821e31220d241c1b4a1d1221e62158188a1f3b239c24a31bfd2052247425371d6a1fe2235525a11bc520aa22ec23fd1b36207b24c325891c09213525ab26111e44229826642886203f219825eb27511ed918c81b3b1d1a0d101cf61fac200e11be1f5e24e0252b1cf41ffb249c26ce1b5221f72388248a1ad92096259327fd1ca32125264a28281e34217b269228041e0b22bc26a3282f1feb21b0269c28211fcf21bb26a828ff1e59219126a3281a1e0a211d26b728bf1d311ff62412277b1a291edd2292244618391e9424e02682198a1dfc23dd257618fb1cd0212724b517c01d012401260019521f7a24d7262f1bb11e4f248526751a6e1c2024fb25d8173c1d3f21822244171b1d66230a253218211f65246026e21a1c1f8e247126c01a6b1e56241e26fd190e1e1924ac258e199a1d742311250d19291dc5228a249218cf1c57223b242e18a11c16221f24e717621cd021da237b173b1c8a217d2316170d1c45212c23a816011c1521dc227416cb1be320a3224716f61bc82061224916581cb3205622b916c81c8b2065226617e41d0f2086228f18731c27208f21bf16561b791ff8208f15c01a2b1fcb203915f719111f7f2024148719081fbb2024133718611d251f1e123718611d251f1e120000bb19cb1a00000000bb19cb1a00003e2022244025611dc7201625d426ab1eb420e3242e266a1ea920c824f4250f1e2f2078248a25f81cb31fe1232c25061c1c20b72225247d1a1a20142486255a1c7f20e8246726581d2a2184252127201f7420b124c526271d5e1ba61d431f1d103d1c65201f214611901f942430264d1b04204d256a27531c0521802340242b1a7d2163263528001ebd221527b128791f46226e2724295b1fa022f72785290b201722072885293d1f6f2282273629711f0d22e3260f29181fe8216826c3288d1eca205e255927781c6d1fba23212534186a20ce247027421cf6205f25e527071d3b214125f427a21d1b202225df276c1c3a20be24e127b01cf21fde245927ec1b351d1124cf259c18bd1daa208521af16321d7e225f240518561eb323a125031a191e83236f256619aa1d642369250419f91d5e235d256319a91d1f230c25ec182f1dee22d3249718f91caa2298245318c61c6522592413188d1c09221624c517411c8e21722320170a1c1c21c722a4169b1bb6205f222016551b8b202922e815321b5e20fd21ae15ba1b5620c3211a16fb1a4c20ee216715f21bd71f0e212616301ae61e6520b014821a041f9d20ee14771a001f9a200015081a1f1f992048145019071ecb1fdd124618241db21e7a124618241db21e7a120000dc19811a00000000dc19811a0000e11f7323af246f1cbd2012247625291e8920c923e324891dd92027246f25391ee82058245e25c01df11fe4234f25a81c4120d222e223891ba42000255526121d3c22cd256427cf1fd422b025f4272b20b1215e2542270a1e89214e24fe24751c1621a42580277a1ddf20c725d327671d3d2058259c275c1ca421a52470252f1c98216c266328061e0222fd26e028a91ee82173274129051f5f22c2276329ac1f33220b28c4295e1fa22206286529911ff82195274c29311f15222c271c29091f4e21bb26b728cc1dea219626bd288f1e8c218a26ba28261eb42090261229231d0b21ea251428821d2120bb25f427a51c16204a25a427a91c1620e524a226671c261f68244926051ca71e6624f8250f1b021ef7236325161a5e1eb3238225731a221eca238525eb19d21d9b2363258719da1d942342257619bd1d6a231b2543197a1dff22ca24ef18061d662265247218b81cf12132241a18761c8821c1239d17f81b0f21da22ad16871b962039222f16501b5b20ee21e5153d1b5520c921b715f31b5920ec2126162a1c6820b0215016ec1b022082210116b31b851f2e21b615dd1a231fe0201715611a0c1fd520bb14401a251fcb20bc14e319391fa72016149819ee1eac20c413fd18ac1e6220b813fd18ac1e6220b8132000ed1ad81b00002000ed1ad81b00005c1ef4225824f71b2120eb233b25a21d15203d244725701d67206524a625251e70206624b525d71da8206e24fd250e1e8121cd240d26a11e5a212325a226b31e9d21662548274c1fca21a62552276f1fd121e525ce27781ff92150260b28931fe621a6265e28c41f1422b8266728b51f4c222927eb281820f5224527ea28142071226527f928082050248927f728fd20ad22a127382921208b22d02762291920fe2105287e29681ff021f92746290f1f4922e6277329c51f042299276729701fb12174271229671e18215827d7280e1e7e21b926b928b31e652126267128691efa20a325c127331dab204d253e27e11c9d20f12415270a1d9c209d244b26981c081f43245b26761bc41e1e249625a41ab31d7a230f2580199c1dfc2209256b19421def22d424d3184d1dbc22b424c7185d1d9e228524a918401d762267246518471d4f2259246c18221d142224244d18991cbd21d823b417581c9121832346175d1c762150234f17461c512112232917fe1b1821c8229116991be32088221f166d1bb6205f22fb156a1b9f203822da159d1b9a2011222316ea1a4c20c3217615851aa91fd1200c15ab1acc1e6820f314431b701e732045155c1cb81e5620a215661ac61d3a2008144718891d8f1f36124718891d8f1f36129609111aca1ad9009609111aca1ad900511ec9226424b51b311fb2233125d91cea1f1524fd24351d372017244825ae1dd01f0a243e25151d322012246625641dd9209524d225261e412124258726aa1e5922992514272e202822ca2580270020b921ac258927711f6c216f251327231fe720b825b327b01ee1200726f527581ed12189265928bf1fe6211f27b728621fe6217c270029db1fb722c927092919207b2212289b294420582204287729be1fe0212d28b4298b1f96213328a529ba1ef82189271e29921fa6217a274c292a1f5221892715293d1e18212d27d6280e1e47212627f728861ef820b626da28111e7c20b825b6270c1d01202325d826921c0420a5249826d61c2b1f45242c26341c971edf23b425691bf51d6e23f824221a961d10230825ee19d11d46231525b519cc1d3f230025af19ab1d2f23f5246119991dfc22ce242219711db122a724d118341d5a226c248618d41cdd211f241f18821c542164238d170b1ce920ce22c5160d1cb5208622a816131c92204c2290161f1c79201e2283160f1c5f20e9214816d41b4920bf210e16051c5120d6211716471b522001226615ce1b341f6420aa150a1a031f68206214691a801e6d208d14f119411e47206814ba193d1e152095139e18cb1d02208711e618dc1dbe1ff512e618dc1dbe1ff512800a9b18c4189b01800a9b18c4189b012a1ea3225924d11bc41ef222d924661c341fde23d224be1c80201d245825111ef41fe8233b252b1d8a1f5c23fe24d81cc71fae23ea24cf1c1a2003243125331d8d2035249725ea1dbe208b24a625f01da721dd24a0262b1f68221b25b526831f28215625e7268b1e73217d254227421fce21ec250f28bc1f6e2174265028e31e6d21d2269428501fbb21f426a4282d1f00221c27db282420d8215d27e628521f182165270729c91ea421df268928281f90211627f228801f2921cd26c528b61ee62051264d28d21d1d2001261028f41c57203325ad27a41d2520f124f527201de41f15259427b01ca61f8b2400262e1c971e1824e325d51ba21e47242a26761be11e2224f325a11b7b1e16247625901af11d52232e25351abd1d2023df248a19841dcd22c3243c193e1d78229124e418301d64226f24ad18fa1c3f2255247c180c1d2e223a246318dc1c0a2226243918c51cc521fb23fd17a51c8c219823a217881c322124234d17711cd420892204171b1c6920fd217c160b1b082093217415bc1aae1f50211a158b1a821f1b211015a21a8e1f0f212215be1a721f06213815611a151fc520ef14131ab61e79209b14d719611e45208514061a731e2c201514cf18cd1deb1fc011b1181d1ed01f1c13b1181d1ed01f1c13a0182b1ed01f590ea0182b1ed01f590e401df72026223e1a331f4f221324561ce91f4823b524451d3820a3230a256b1d3620a3230d25571df11f5a23e324fa1c8f1f5623ae24bb1c741f4923a2249c1ced1f1b23cd24071df01f7823dd24c81c3020c02374254f1d80201d24a5256c1dba205424af25c51de32084244c26471eb1206624bd261a1e3620bc245e26461d2320fb246826401d0f213125fd26a81e3a206a256627901d4820db24c926281dff2083257f27bc1e3d2048255d27601d951fb924b626de1c6c20b3249a26ad1de920fc242d27621e22217d24eb26871d2e20ec241d276f1d48205a244526171dbb1e742462260e1cbe1efd231626b01b181f0624e725461cb31e2123f9246e1bbf1dc422a924301a671d552251246319951d08225724a8198b1d2c22552443195f1d202252241919201d0e223e24b318091de92118247518e51cb221d4234118af1c4f216a23d8175b1c1421f4222817431ce420eb220017351ccf20b422c8161b1c892063227c16261c6e2006228d16251c3820c5216a16221c1b208b214316ef1bf21f6c210316751bbc1f4721a6151a1b911f28216115d61a4f1fe6202f155e1ae21e6520d314731aa71e6120c914231a6f1e3e20a614131a351ee01f05147b184e1d751f5c113a18821d8f1f23123a18821d8f1f23125f095418101a96015f095418101a9601b41d7a212023b01a9b1e82224e24da1b471fd5229424e71c8f1f5023c624db1c911f4a23c124cc1ced1f2123da24e61c16208723a124db1c34208223fc24101d6920ca2326254f1d692007241d254f1d5320da2357256b1d902006247925911d9020d92387257f1da220f9238725811d8f20f0238625b51d7a20d82379259b1d372099235825581dbc1f55232225c81c5b1f12230125aa1ca41f09230325a91c981fd7220d25a31caf1fa122f324b01cc11fc2221425cb1cf81fea22ef241e1d841ef0228b24891bc91f5e231e25b01cef1f5e236d25a71ce91f42235f25c31c861f0a231425691c671f5c235025481cc71e16230925a01bc01da422d524601ae81c34225024f818bc1ce2214e240619351ded2152244619481dd621332444199d1df721312454197b1dd32139241e19601db221ed23d918e01c65217e233d18b71c09211723e617561cb420bc22fd162b1c8a2067229516e31b642039221a16041c56201c223716b51b4120e421d715731b2a20be21a5158a1b13208b21b6154a1bdb1f4c216815d81a6d1fff2030150a1b771f192155158c1afa1eaa20db145b1a041f9b20b7141c1ad91e742089148d19701e462035143019241e202009139718ff1d3020ef11ba189f1c6b1e7713ba189f1c6b1e77130000c613ec1500000000c613ec1500008b1d5c21d622691a7e1e4a214923ec1b9f1f6323b424e51c891f4423d624b81cf11f5823d324091dc51f3a23dc24dd1cda1f5623dd24db1cc71f5723ff24bf1cd61f66231025c81cd01f68230725c41ced1f65230225c61c0e207723fc24e21cb51f3723e024951c721fcc2291245e1ce61e8b227724df1baf1e32225524841b7f1efa212724341b081ea821f3237e1a0d1e64219a23521af31dff2084231f1a341ee4205c23491a1c1ec6206a23301a241eda207b236b1ab31d1a21aa23f419371d1a21dc238819571d4421a523c0199d1d5a21f323231ad81d90210d244b1ad91da62121244d1a2a1ed9215424a41ae51dcd214e24411a891d85213024c819351d4a21ce2371193f1d4f2105243b19611d7621052431195a1d82210b24e918441d75210324bf18071d5d21fc235f18001d4121c9234518d21c212194230918a81cf7203123cd17831ccf20d2226a175a1ca4208c222717431c88205922de16201c6c202722a616061c5120f7215b16cf1b2320c2210b16db1b00208221f4154d1b931f352188152a1b161fde205115271be01ea3204e15151bbb1e86202415f91abb1e7d20f314ba1ab01e7920e2144a1a6d1e5620aa14a519571e31207913ec18931d991f3412db184b1ca61d0d13db184b1ca61d0d130000ea14941600000000ea1494160000281f0722a4237a1b501e60223d24001bf91e77222e24251c661fc2227c24481c831fd0228f24581c861fe12296245a1c581fdb22a824301c801ff622b524381c631ff122c024271c561fd622ba24201c6a1f752262241c1c621f29223524f31b101f242230247e1bbe1ef2212b24271b621eb9211924ab1a1f1e9121f8234d1ad41d5f21af23001ab61d23219423e019841d1221cd23ad19411d0a210c247e19701d0b21cb2399193f1de02094236619751ddc2054237119471dc2202b234319181db22030231519b31c98203023af18761c832009237218711c8220ff226d18911c842004237b18b31c9c201a238a18cd1cbc204923a318df1ccd205723b318c11cd3203f239618b41cd5202b237718a81cd12011234518a61ccf20fa221e18a91ccb20ef22f4179c1cc220d622b817921cb920ba228217831cb220b6224517871c9d2092224c176d1c85207d2222175d1c6c205722e416301c44201a229d16081c1720d4213d16bf1bbb1f5d21df15241b241fe5204c15d31acb1ec120f414c31ab71e9420e914691a8b1e7920a714561a811e5720b3141b1a5f1e51208714041a561e39207614b3192a1e26203b146319f41d02202b149b19da1dba1fc81383185e1d141f8b11af19ba1dae1f4e14af19ba1dae1f4e1400000000000000000000ea1494160000281f0722a4237a1b501e60223d24001bf91e77222e24251c661fc2227c24481c831fd0228f24581c861fe12296245a1c581fdb22a824301c801ff622b524381c631ff122c024271c561fd622ba24201c6a1f752262241c1c621f29223524f31b101f242230247e1bbe1ef2212b24271b621eb9211924ab1a1f1e9121f8234d1ad41d5f21af23001ab61d23219423e019841d1221cd23ad19411d0a210c247e19701d0b21cb2399193f1de02094236619751ddc2054237119471dc2202b234319181db22030231519b31c98203023af18761c832009237218711c8220ff226d18911c842004237b18b31c9c201a238a18cd1cbc204923a318df1ccd205723b318c11cd3203f239618b41cd5202b237718a81cd12011234518a61ccf20fa221e18a91ccb20ef22f4179c1cc220d622b817921cb920ba228217831cb220b6224517871c9d2092224c176d1c85207d2222175d1c6c205722e416301c44201a229d16081c1720d4213d16bf1bbb1f5d21df15241b241fe5204c15d31acb1ec120f414c31ab71e9420e914691a8b1e7920a714561a811e5720b3141b1a5f1e51208714041a561e39207614b3192a1e26203b146319f41d02202b149b19da1dba1fc81383185e1d141f8b11af19ba1dae1f4e1400000000000000000000000000000000a11e021d0e1aef17b3231122572445205c26be236d245b23a128fa222b243425402a61235624ee26b82b82239c2448285c2cc9229824d528cd2cb023022553290d2dc92311259a29192d3d231d25a629292d43245325b829442d1123fe25d729a22d2329c82a272af92ce8283e2c09295a2c092aff2e2228e42add27182f8b26a228eb262430c4240c264828f83074210422a32518313b1d371dd0240431de18e91e0f254f31ab1a2320dc247e31fc1ba81e5c247531c919431f7e2471312819061dfd2387312c16531d9f24b23181144b20f725e83143176f215e26eb3113182c211027b831721541228c2851326217a823382ad7323a1a8b2357284d31641c931cc924a32ea416761ccd22cc2a79176b1b84208d2536164b190c20d1216f14a417cc1f882185122b1a8b20472244156b1bc820972254164b1bc22064223916241bb62032221916e01ab2202722de15e91ab7200d22e615691a9820dc215e157f1a722099217115491a56207b2144151a1a2b203d210415091a11201721f514f919fa1f0221d014a919d41fff208f14121abe1fdc20cb14211a751fa420f014ac19ef1e60207a140219611ed71fc013d718431eb61f7e13c7181d1e851f3d13f3182f1e991f8013de183a1eec1f3913d8186b1d791e7f130000000000000000a11e021d0e1aef17a11e021d0e1aef17b3231122572445205c26be236d245b23a128fa222b243425402a61235624ee26b82b82239c2448285c2cc9229824d528cd2cb023022553290d2dc92311259a29192d3d231d25a629292d43245325b829442d1123fe25d729a22d2329c82a272af92ce8283e2c09295a2c092aff2e2228e42add27182f8b26a228eb262430c4240c264828f83074210422a32518313b1d371dd0240431de18e91e0f254f31ab1a2320dc247e31fc1ba81e5c247531c919431f7e2471312819061dfd2387312c16531d9f24b23181144b20f725e83143176f215e26eb3113182c211027b831721541228c2851326217a823382ad7323a1a8b2357284d31641c931cc924a32ea416761ccd22cc2a79176b1b84208d2536164b190c20d1216f14a417cc1f882185122b1a8b20472244156b1bc820972254164b1bc22064223916241bb62032221916e01ab2202722de15e91ab7200d22e615691a9820dc215e157f1a722099217115491a56207b2144151a1a2b203d210415091a11201721f514f919fa1f0221d014a919d41fff208f14121abe1fdc20cb14211a751fa420f014ac19ef1e60207a140219611ed71fc013d718431eb61f7e13c7181d1e851f3d13f3182f1e991f8013de183a1eec1f3913d8186b1d791e7f13d8186b1d791e7f13df14c2168a168208df14c2168a16820870207522fb23b31d2a23ac239424a82025254a24e52472226e270824e22489241c296b24882527263c2ab1240e26b527462b8224f3257028292c69247525f228612c6d2501276b298a2c8e2521278a29992c5d27ed28c2296b2ce828b72a7629ab2be2288d2bae28142a2428232c2127992808286e2de12483260428032f7e221a243f273230871f9c211e26a530e11cd02080261e31e81b632066265031351bc920a8268d31021c1a20d5258d31de1ad91eec247631c1189d1d2c258f31bf14de1dc325cc31dd0f731eab25df318f11df1f7c259d312615ce1f9325a6315a16f91d8b2594310116991da6253e313c17d71d64268b30b518431d4625e32dfe18131c0224112a3118621b4c22de25d517031c132262243118721b3b214b23aa17ea1bb821dc23c4171b1cdc21fd23cc17041cda21fe237f176f1b86216d23d216521b5c21ff229916911b5221ea22b316be1b5821fe22bb16a81b1f219d2288166e1bbb200c223916ca1a552083219415421a292054212415491a12202c211015111afd1f1221e314e819d01fef20aa14151ad11fe420cd1495197b1fb02068146e19311f7a2033144919f61e582017143819d41e39200a1462199d1e16204014d4180d1ed01fb3121418861ded1e23111418861ded1e23111516b11b1c1c0c051516b11b1c1c0c050d1f0b236524b21c1c216824fe24f81e9e229c245c255b208b24cd24f325d62188262425872625243628f624462668250b298425e9266526bd291326862718275e2a7126b1270928872a10279a282328a82af8275a2946280b2aa7284e2aaa275c29b128fe2aa026302865281d2b1d257e261928442c3323b62438273b2d12213223a726d52ea21f46212b264430821df12177260631351e9221e9267831d21d8e212427c031b71d1f21c526cc31f21c63211226ab31c41c5b20ec25d3314c1b471fbc25f231bf19581efd24c63103191c200b25bb315c1ae31fac25dc313a1a2b1fef248931a9191d1eda24f330ed18ff1d5725e42f3719e71d2525e52c6b198f1c5b242d297918d71cbc237826d318fd1c8823c325fa183e1dfc2218254f190c1da022cd24f418751c4e2284244d18b41c71228e2477185b1c60227024fd17e91bfa21092421170a1ca7218a232717fc1bad218823f1161b1c73213f232317461bf32069223516e01aa620ed21c215651a6b20c32141152a1a52209a211015cf1932207621ae14ea19f91f1421c314e3198a1fca20be147419521fa7204e1457191b1f6c2022144319e11e4b2012140919ab1e3d20a2133e19c61e4a200e143519101e551f901304183f1d5e1e101104183f1d5e1e10110000fa193b1b00000000fa193b1b00003c200e240425b51d9d20ce24cf255d1eff20a3249b25e51e4a226825c0263d208f244226d1274a221a25c12532270a23302640256e262c2443272526b827c824ac27f526a128fd24242815278e2863254f2825289f2989257e274028b6298324d62649284d2a10242026d9280e2b6023f8243328e42ad4211624ea272d2cdb204423a127812d422093229f27642fd01f1b23d627c1302a2080214f2630315c1e81219326a231301ec9202c26cd313b1d77211126db31cc1ddc20d525f631d91c24206a257331211cbb1d982409318819d020f424b131921cce21a925ae319a1d3e1f6c257e31fe1ae01fb425ba309a1bd51da5246e2ee819321c1224fb2a4018ad1da8246628051aa31d75240927fb199b1e1224d425cc1afd1d7f239325291a3e1d9723952524198a1cfb220a254f188a1ccb22bf243c18cc1cd122a32467186a1c5d2244240d18251ca42194237917101c81215f2332171d1c8a215a232717891b3e2100236e16881ab020102278153f1ba7200022d715bd1a4b2090216e15631a1d2069210c15631a422070210c15361a0a203a21cf147a19ec1e442026140719a21e32207613a6183b1edb1fc012fc18861e25203c13011a1d1f6b207414f819021f8d203d143818a31e4a20b8113818a31e4a20b8110000dd18fb1900000000dd18fb190000061e4f22fe23101b9620d624e9258c1e50211a253c263f1f0d22302575261420e0227025cb26b02031236925d526bb20ec23c8255327e520a324672640280822a125202792283b2375251228662918236026e827532925243925ff26e3284a22e9245a276229ff2104251528cd293422fd239027d229f0204421de253929421eff214f26c82b521f9321aa26932d8a1eaf225b27862ff21f3122fb26a8305c1f6521f1267731691eb120a526d431801de021e8261f329c1eb921ff264b32581edd1f8d25d4319c1cb521ee256631c81d7a217f25fc31b81dce212426d631111e00202e251b313e1c951efb24c12ffc1ab91ebe24e12c221bd71d8f246a29331a701d5824a127da196b1cb62360266818c51ee123f125f71a7f1ed42316267a1a1b1ecd23d725e5191a1df2222425d818fd1c0123ec249418061dee22e4248718e61ca722b0246a18f91c45224c246718721ccd21d523bb17781c522121237c17951ce22084228817501ca3202422f316ec1b8d200b2262167a1b8320ec21e815d11a8020df216115bf1a6b20be215415c81a4f2083214015641a12204421f214431a0a201021bf14d619721fa02055146e19a81e3d20e2135b19af1e3220c61358199f1e4920c113a119861f04217214a119861f042172140000d01ac71b00000000d01ac71b0000cc1c7a20c7218e188820562450258b1e5d21162544267c1f1622ce252d27402063237826132828215223752633280d2161236e264128ae20b7233227d62804218924e7271929d2213f24ab272029742116255628b52988223724be2752291421a42406288429bd21c2242428c029f621cc23ae27bc29d220cd217426ef28fd1e61223b276c2ae31f7022c727132cc11fb7227b27702d1920ac22c4273b2f1220ef21a627af303e1f5221ee267331941ec9217027fc310f1f6f221a272132da1f31202e25d831fc1c17238e2550310b2077213226ee313c1ed62130268131791e2c1ee8243030bf1a731ef024b42d0d1bb71e9424a82a561b701ef2246328ee1aaa1de524ee27301ab61c4724da26ff18821ea3243027e71aeb1e902403271f1b3c1e54246726371a981dd723b5256619461d5b233e25ec18841c5e22902425181b1cdd21392445172a1ccf2122243d17061ca121ef23de16081c6f218123e216bb1b43211e237a16861b1721c9222e16221bea208f22bf150e1bc3204e22af15a61a9b2029225b15cc1a6d20db215e15201a1f205a21d6140e1a2c205421c8146c1a34203c21f814621a0a201e21d614331ade1f0b2199140a1ac41ff9209414cb19a51e27207c13d318d51ddd1ed910d318d51ddd1ed9100000ff1b9a1c00000000ff1b9a1c0000681c7720d621f11738201c2418258e1d0f21ec241b26561e0922ab25fb26a71f38232f26c427b120a32388262d2807218623c4265c28d420b123ef267b282021d42316279c28272129246727de2857219424ec273b29f321d12366272429d520d92425288e2939229b242a28cb29ea21c6236727b9290e212822e72621299c1f1d24a727ea29692193230328a02acd209c2384275d2be3200d23e727d52c79203622d7261c2ee11f4b22fa26f02ffb1fa2221628053127201f23092872318420022169266631f31dad237426f33041209a204e261c31401dbf21092640308e1e0d20af25e72daf1c231f5b255b2b211ca91f54250a297e1c181f4c252c28281cdd1e6a254a28d51bfa1d5b24b026701a261f7f243027951b151f5324d8262c1b421e32243e260a1a281e0a24d225bf19a41db12378252c19b51d95236c252419021d142313256f18701c0b223a24db170c1c9021d02309179b1b612171237e168e1b422130235316d21b3521fc226d16361b1121dd22cf15221be9207822bf15c71a6820cb215a150b1b5320b8219015f41926207f21b3147b1a30205e210415321a21204c21b214de19201f9c2072144d19911e6420de13e4190a1f80205f147619511ff420ed131019ab1d221f8b121019ab1d221f8b120000311a4b1b00000000311a4b1b0000c01cb0204f228218ce20ee243026a11e43218725f026021f2422ce253e270b20b622f32584278620e5225c262828a6201423e3266828a820c4234727c8283c2110245927cb2849211d248b27f3285a212524c2272f29752117239d269f287020ab2445270c2912229924ee2761290d225d244b273829e22120235726272968205d219f26fa288c1e782343278629ea208124cc27522aa421d3222527402a3820e322a027d32b42203423b527362d74208a2268277d2efb1ffc21ce26d42f661f5520eb2500304a1db1212526642f951eb7205e26392fae1d7221ed26bb2d791e3d206a25632bf81c1a2055252429e01c7320c52584285c1d571f4025ee276c1c131ff124c327261cc41d1e24ad261e1a0d1f7024e3267b1b7b1e20248e26ab1a001ef3233026e319d01dc323ea259c19991d9e23942539190b1ea5236f2572198f1e44231f25cf19d21e6f228124ee19d11d08223424f718ea1cb821ef231e18b01c57215723b417581c0421ac220017501ce0209b22d016821cbe204f22f9168a1d5820b52149183a1c7120ea2168160e1b5320a5215815391a17205e21b7144c1a1e203621ac14511aa51fd1209614ee19741fd72035141e1a581fae2071145e19061fb2209e13ef18941e4a20b112ef18941e4a20b11200008e19081b000000008e19081b0000bc1c2d21ee22cc18ff211925fc253c20ae215f25be26ed1f2c22132699275b203923772620281921e922f9250a28e1205d223526142823204a23e526c6281721642367271729dd2008245e27eb284e21082414288f294e218b23a7276329b920fc23d0275b2931214a24d32765299321bb24f027a3293922b223ba278129b22015225f273929861f8323ab27b829d3201124a827d129f620c0231e280b2aca201523a8271a2a6f209822ac266f2a2f20bf22a427b92b2c2072233c27582ca9204121cd26d92c141ee6202c27f62cd21d552105273e2c401ec0203f26272b7f1d1a2193251c29d11d4a218b262c291e1ecf20f8254d28a31de01e0d25b527161cb41f3d25ff27651c2d1e8d241f27741ac51e8e240227131b721fd4243827aa1b631ff22414275e1b9d1e95248926621a2a1e2024ce25c019511d0a230825cb18c51cb122bc243918bb1c87228e241d187b1c3c226324a6177b1c22223c2481175a1cda2112242717521c9521b223f616e71b422144233e169e1bf120cd220416021b96204e228915d41a4220c22149155e1b79200522b315061b462059216f15ee1a13201d214115cb1ad71f13210a15581a971fe320b514a31a741fbd20ec14a819c41e8e207e13ca18441e3020e211ca18441e3020e2110000031b921c00000000031b921c0000601c3621de220318ef203f256f26e31e4921932507274b1f04223326ce2727200523c8265628e6201223ba2679280c218e23b9266d2808213f244a27cd28ee211b24c22725297821a124c4270c292b22722413287329ec211524cf273e292d217023cf275f29d52000240a286d29442123242528bb295121a623c8277b299b20162210271729871f24234f27bd29b32065239a27a529a1203023bc27aa2980205022e026302901209a22fb267629302087222f276c2a0920e3217f264929301f6b209e25f628e61cc92040267329611d1e2226279029af1e4322a726ff28d81e432189252228ab1d8c20ef258828e51cc320f6257728341d441f7e258828f11bd11f49252a28451c5a1f9624a426cd1b5a1e53249b26a41ad01e91240427e61a001fa024cb26c21a391e76247126e819181e3e24ff2597199f1d832355252819431dff22f724be18151ddc22d1248018bb1c9822a8241d18d71c502268242218a41cfb213c24c617a61cb221f023a317731c3d214f232b17211ce720b022a716a81bab2057220c16d81bb9204b223116a01bae2028220516bc1a54209e213515f61a452087214615d61a0d204f212f154c1ba71fed206915f91a111f82202c152a1a631e32202e147f18ef1dc21fcf117f18ef1dc21fcf110000b718421b00000000b718421b00003b1c1721132315182921f32429260a1f62217225df26831f9621fc259927b51f23239a2632280921c722b6266128d620172215262628eb1f64229e266d286920d8223127b9288120b723c227fd28432190248628012a39228c2338289729ba20e423ff276629f0204a241e288e29b6211f24022897296d21d223bc27a029f520ce226f27492951206a236f28512ad22038245428252a49214d239428b42a8320ea22a5273a2a46202a2211276e29b81f7a2290261229e81f5c22f2262329082015202026bf28c91ca7203726c628751d3022a326ff280f1f81211f26e828301e0b2066253c288c1c4c208c253d28d51c53208c255428dd1c422066250328b81c701f34250e28011c1e204e25a7273d1c3d1ffb246d27551bad1fec248f27a71b9b1e9424b626451a741e60243b26051a281e2d24de258c19c61d03249d253419841dbf235b25e2181f1d4123fd248918df1c8c2287243c18ef1c3422282436186d1cfb2114246a175c1cbc21dc232a17151c6d2167239416fd1b4b2122234f16e01b2f21f3223816b51bdc207f22f7150c1b6220c0215715f91a5120a4212c15bc1a53207c21e3147a1a04203321b314241a881fe8205c14cb1aae1ff320ee14611a061f7d20391412197f1e17203a1212197f1e17203a1200006415001800000000641500180000d11b932076220b1734226d25fb2622208121bf250128991feb21992637281520cc23f0266c2871212d244e27c928d5219623f1269428fe202f233d27e328f520c0220227bb287120482373271729f72029245c28db29be21e422bb27432942208323bc274229b52017242b288a29832133246c28292a872106245028fc29e92026243a28e1291021622494286d2aa121b3236928432ab2206723f827c7297520b52291278a2918200222d427d729551ff822f527e3293320d422a927ac295520b6207c26d628721d55215a26c2282b1e8622dc260a29711f1122da260a29ba1e04215e26a128901dae208c26f228431d83211d269928331eb220ec259328471d2d2094257828b21cd01fcd245527051c641fd0242a279b1b4a20fe248627351c2720a824ba26e21bc91e2c24eb25561af21da22368255c19ac1d6d233d2506196d1d3c231625cd183f1df922fa248f18dc1cb922c4242618c51c3d225d24fd17ae1cce21fa23b017b71c70216423bf17aa1c3b21282384179a1c0f21ec2244173f1cd4208a2293163c1cab2032228d16e41b90201d221b165a1b6720db219215c11a2b206e2103157a1afc1f4921cd14471ad41f36218e14761ade1f3f21b014f219321fd6202014dc18071ee11f4812dc18071ee11f48120000f9163b1900000000f9163b1900002d1c3e213f2387175b217225e526641ffa213f25b02614206d21c4256a277c1fa72254261728a5208822b1266628a920ea22af2671289b20ac223f27f728c3202024b9271129a1211424ec272e29a1215324232885290922c8235e270129a0203123a82755294620c224062850291c2233241f28d6294221e6234c27c229a120d022072892291a2000247628262a23213e234e28282a6b2094233028e329a020e5222d281f2a43205a22a927b129c01f3f227e2792296d1f02238927652963201821ba26d728bb1d5721b426e3282d1ebc22ed26fc28ae1fa221bb2634293f1e0c212f269628ad1d8b205e26a1282f1d9220e9257628231d282003252a28be1c5520e4243f27bb1c3d1f4f24b426901b051fc2243d27561bdf1f8c24f326d91b761fa7249426521b531f7e246426f41ae51e5b241426701a2a1e0e24a125a8199d1d8b233f250f19491d3023f224ae18fc1cab22ac245618d91c412265242318ab1cf8211224d1175e1ca22198235017141c5c214523b316e31b2a21f9225a16ef1b1421c82264160f1cfb209f226916901bc2205422f915f91a9420f0216515ee1a422057212415311ba71ffd2039151e1b361fdb200e156c1c331fa2202316c81ba21ea220271598196a1e2020c41398196a1e2020c41300004d175619000000004d1756190000001c1421512336174c2221257f260b2023215a25c126011f6021b8255e27551f46220e26e427542078225f2614289e2019227226492803208122b9268d288a20be222127e0287e207423882700290621322404287029cb215d237e271b297e20f923a0276e29ee2003240a28752947217924f7278029be213223e527a32946202d23da2771295220c4234828fb29dd2069234928462a76207a223728232a981f5c22a427ac29751f2a228a279929541f9b229f276f29a41f4d23ef27b3295720de217f274329391ebf21ee26fd285f1efb21bf26d228a11e3e21e326f428bb1dd4205926a728331dc0203a268828571dc920f52572284e1d60207a251a28da1c732090251628ef1c112026252e27401c721fe724e926c71b1a2037256827061caa1feb24f826661b0b1f58244c26931a061e852394256e19a41d75235f25fe185a1d36231325bc18231ddb22b5248c18de1c6c227e243b18ce1c182238240618f71cd421f8231418fd1c922196230518cc1c4b2162239317c91c1421fb228f17261c95206e226b169e1b5f20f421c615011b27207a214e15e81a1d2065213c15df1a352072211915b51af01f3f21de14911a821fe320c414c11a861fde20e7140e1ada1e82200214d518fa1db61f1712d518fa1db61f171200004a197f1b000000004a197f1b0000fc1d05235924a21aee2049257e261e1f8220cf240526141e84214d259f266f1f7922f625c2276a206722462617286b2023237b264b28b22080225b27e6287c20382396270629c0207523ee272429e920842319288f2901212922d826df28201fc0226d271e29032059248127f82871210324d6277b29f6204623ca279d292620f1220628c9293c20d4230528b32997204e232428db29662025232b28062a4d2079222e28382ab21f6d223028352a891fee221c28d3290220e3220d28d52909207e22f2279529821f44226c272a29f31efe2174276929be1ef82156272229861e23219426ca289d1df320ae26cd287d1df9208226b228831df1201b265a287a1dd0200d264528561dcb20b3252c28031d29206925d327591c2b2025259927281cc61ff3240b27a11b161fb1249926ba1aa51e77244526191a141e0b24b4257a19ad1d2c23f6240619351d952289248718e41c50225d242c18b41c02222424e117631cbd21d72335174f1c682162231517251c302110238c161e1c0a21ca2280161f1ce3209b2261162d1cba207d2254163b1ca320312269163f1c6f20f1214d16c11b4c20c321c015751ba61f29216915181b771ff5202715ec1a8e1fd72006155f1af71e9b20381462198f1db91ec91262198f1db91ec9120000f5195d1c00000000f5195d1c0000112092247f254a1d14216c250827171f472184251227731fa721b6253727cd1f452256260f2860203b23ad264628fd204e22df26872826205022e3269b284120ad22bf2672286420ac2240279a287f20b323f4275d293121f1220a28762920205b235728d5296e200e247528f929352116247e28182a7121da234728b3299b2088236928482a9820b4237128642a842071236e28762a6c20f3235e28352a9820e5224328382ade1f93222e280c2a651fe5222128ba29c11fdd222e28bb299c1f5b221f28d229251fe721c2278a29131eb922772747293d1f932174275629ea1dfe201d273329601d8a20ec26e028f61c6521d3254f28e61d022060256628711c1920472520288b1c5e1f7b24aa26581bc01e91249b260e1b6e1f6d2458264a1b131f48241026d41a811e1124c225f819851ef0239825e019361ea92351258019b21d432308250a194b1dea22d0249b18ed1ca2229f243418bb1c3f225b24ec17631cd321062435174e1c4a211c23ef16d11bb42073222c16511b89202f22c7151b1b5920f6217f15d71b5c20e5211116201c6e20f32140161f1d4020c521c317c51b04205221c415241bb31f15214c15e81a731ff92004152b1ba11f06213415311afb1eca2065141d195b1e7c20c5121d195b1e7c20c51200009015ab19000000009015ab1900007d219523d224701e172199244e26b31e0921c9241d268c1ebe214c25b826771fcb21a9252d27881f7421eb25f8272d1fe52141260a28921f0a22ab266528da1fcb22fe268b28862022239127cb28c0206723fa273529ee20f02219285b295820d2223e28d22961202e245628b1293c214a234828052a9020f0223a28da29032090224928332acd1f7e232728c229372012232228b7291720c9221b28b829d91f82222128d129871f74224728302a911f89224c28152aaa1fe8223828d429fd1f51222328e6294e1ff8210228db29ce1eb421ca27c629531e632294277329151ff92177278929b81e1121482720299e1dbb215a265028721eda20c8251028611d77208725c627e11c801f5e25a4270a1cb31fc824c126061c481f5b242026601be61e3324cd25a81a5f1e05249125f219351ed4236a25b219df1d972344254b198d1d2b23ec2400194a1d82228124af18f31c402260243918e01c05223a2415188b1cbb21ff237717421c4d213723ff16261ce620b2228d161b1cc62098225a163a1caf204a226816321d35209121b5176d1c05207a216d16e81bbf1f3b21bd15e51a721f1d21e514641a5b1f05218a14631a501ffb208914c41a561fe220cd14641af61ede205514b7191e1fc5203413b7191e1fc52034130000e219151c00000000e219151c0000cf1f9e23a824d41cb820a8241126701e95209f24dd25401ef220e1245226961e092107257d26a01e4d215b250327251f9321b72574276d1f7f21d325a7273c1fd921f3250328ca1f4122692631281e20ae22fa269a287320f022cd2766299020d4223428092a7e2066235928e929b12049237828042abc20bb238f28142ad820fb228b283c2a5f203623aa285d2a75202723a5284f2a5d20d82392282c2aa9206a2385284e2a3b2059237028462a2220372385287d2a002034237f28352a1b20cd224a280f2aa61fda21b2275e29dc1e702254270629581fb52165272729b11eae212827fa28911e7f210027ca28451e4621b426a428041e2f216d264628bf1d5820ec252428bf1c1a208c25ae275a1cc41fee24ca260e1c4b1f57240926641b951e152496255a1a011e842333259a19e41d2a23ed243819a11dce22a924b7187a1d812284249618391d2e2244246018cf1ce0210c240718901ca921b723a417891c7f2172237317701c532127232717291c1221d6229116f01bd82082224516ac1ba9204f22f015691b81200e22bc15fc1a4d20bd2167159f1a17207321ea14601a671fbf20a0143f1a8a1e622056146c1a651e6d205b149f1b961e5f202b15e01a1d1e4b20a9147a19e01d162034127a19e01d16203412000005183b1a0000000005183b1a00002c1fc72231249b1c7620df232925031e8d207d24ab25231e7e207324ce25e91d85208324d325f31dc320d3244026451e1d212f25d826d01e342189253e27c41ebf21c2257027a71fc7210d26ce279b1f0b2227260f2812203522d726ab281620c9229d2748296920aa231828a729cc2002245528cf2916219323c528672aaf206623ce28af2aa1202523fd28c92a6b208e232229f72abb2035232329fe2a49204323ef28cd2a5120d522c828b62a0120042399282b2a1d20ae227228092a06204e225e28112a7f1fe1212528e329fd1e86221528a229c01f1422e02782296a1fbd215e271329ea1e0c219f268928001efa20e2251828d61d54204d257527011d1420fc240127a71cb51fbe248026461c3f1f59240126921b981e1424a425931a4b1ecd235e25131a0a1e84233725a319dd1d4c230f256019c51dfe22e3241b19791daf22b424c2180c1d1d2248244f188e1c832196237c17611c21210d233217531cf120c722f716391cbd208122ab161d1c9a204e225d16211c762018224216011c5720f4211216051c6620f221f715791c3d20ba217e16ce1d6b1feb201f18f01ba61f54218215f61a161fd920d414181a6f1e5d202214ff19381e1f202914d319f11d192057135419621e74200e135419621e74200e13000095177d190000000095177d190000c91ece22a524321c7f200823f124c61d652066249b25da1da0209424e225031e37205a24a5257a1d98209a24f025f91df72005259426741ee5201425ba26351e9f210a2568264f1f65217c250a27041f2b22232609280f2058228226632853205a22f726a428552046227527e8283b2093221527a8286f20fe22eb273d297d2035236728e829be203d23ca28a52a9720fa231129c22a302187241129ab2a4f21a1231529d62a9820aa23e9289f2aad2030230c29082b6320ab22d028da2a2d20e0219928752a2b1ff1215328002a411fd221c5274e291a1fc521f426cc28f31e1c215e269128131ec620ba251028991d012150253527b51dfa201c255c27991d5f20e8241427c71c1020bc24a926601c961f74242a26af1b301f2524bc25f01abc1eb3236a25491a371e4c232d25b419ef1de022df245a19ae1d8422932407197f1d4e226024c8186a1d19223b249f18211dd62112243718ee1c9721af23f117d61c4f214723a317ad1cfc20d3223c17181c792015223516031b0c2088215115b31abd1f54211415aa1a9a1f28210d15a31a8c1f232107153e1a5e1ff820a114df19f81eb42043149b19941e6f20f51389194a1e3f20ae13d2194e1e34200a143219ca1d1520b71209192f1e4820fd1209192f1e4820fd12530ddf1b8b1da703530ddf1b8b1da7033c1dd72012224d199f20c423e924911d38201a244f25491d5a200c246925741d7b202f248425ae1d87204524ac25e31dc1207e24df252e1ed4208c24ec251f1e012199241e26821eab2094243826ff1def20a5248f26561ef120b2249f26591ede20d424ce26681e3a21f224f226cb1efa21ce25e527ad1f70219825aa27121f722038256d27c71db02031252327051e98214b264c282f1f992129273929471fcd22e5273829422030221e28b229f21f5e2101289929e51e4d21bf267e28a41e92206c266c28f11d7420e22511286f1d2121da25fd27581e80208b25be276c1dc92007252527c41d2821d924f026201e3a207d247226061d601f49240426441cd91e1c24e6257b1ba51eaf2365250d1b561e2f231225511a171ef222d724e119ba1d8722a1244119621d44228424c418801d38227924c8185b1d0b22582493183c1dbc210a244d18121d6a217c231618cc1c20211b23bb17761cf220d82230175d1cb0208e22e4162d1c872042227616271c5720fb214b161c1c2320b6211916ee1bdc1f7621e2158a1ba91f3d2198153f1b711f14216015201b3f1fdd202c150c1be11e85201e15ed1ab41e7720eb144e1a841e592060145a1a4a1e17204e147c19961dd61f90120119e51d4c2077120119e51d4c20771200008711f016000000008711f0160000e41c0621df22a518a81fdf231a25bb1c1720cd2347251f1d1b2000245d25241d5c2023247125761d6e20372499257a1d8f205e24a225b51dc4205924a425bd1dd2204b24b025ce1ddb205e24d125d91dd3204124c525cf1de6203624b925be1dbc20152497258e1dd52007248f25831dca20f42378259d1d9e2096235825441d5c2003230425e71c1b20c522eb249e1c751f6e22a424ca1b901f7322c024221c5620c2221d25cf1c7d208e22f324c31c4720de219824e11ca2209e2296245c1d771f4b220a24421c3c1f1a2225242f1c2e207f22b624c41cb91fb0225625581cd81ec6223c25b31bc51e3c237d25811bf81e21238925811ba51ed7224425281bc61dbd22f124201ad91d5a22aa24041a451dfe217a2441195f1d02225d241919b11d26226d243919b01dfe21542420196f1dc8212824b9182f1d9221e12342180a1d3c215d230f18ae1cfc200f2364175a1cd120c422df16381caa20952287162b1c912074225116221c74202f2222161b1c4c20ec2117160c1c2b20aa21e015711be01f57216715641b7b1f1a215d156d1b7b1ffe2064152c1b6a1feb203415a11a611fe520b514181add1e87205314fd19861e5b2040145d1aa51e5c206b14cc184e1ebe20a812be194f1d2e1fde12be194f1d2e1fde1200007f147516000000007f1475160000621e0e22a923df1a4b1fde227d24821ce41fd4230a25e11cfd1fcf232525f01c2720bd231125111d1f20a2231525f71c2620a6231925ff1c2220a9232d25ea1c12208e232f25d61c1820ab233425cc1c1e20bf234325d41c0c205c231c25ae1cde1fbb2280246d1c6a1f4e2266240d1c891e18226024d41a041e7a21f223191a761df52052234519de1c7820ba228b18841c2c2066223718b01c062057226018b81cc01f292267189c1cb11f17223b18931cba1f3c2232188a1cf71f56222a18731c1320c1222718681c5920d5221d18dc1cba205c23b118941d3321fd237919c91d6c211324ad19d91d99213124d519ce1db6215624c9199f1d992149248319461d3e21d5231719491d5b21142405195d1d74210f24ec185d1d89211424d5184d1d872111249c18341d7921052471181e1d5c21df234918fd1c3521a2231918d01c07213e23e817ab1ce220de2286176c1cb3209e222017581c94206122dc163f1c70202b229316221c5020f1216516221c2b20ce214316ef1b06209b21e2158a1bba1f59217915561b5d1f18215315781b3a1ff0204d15731b031fc0202b157a1be81eaa201115eb1be71e98205e15001baf1e7b20a314c819671e4220d713ce195b1d0f1f8013ca19bd1c311e3012ca19bd1c311e301200001515f417000000001515f41700002320a6221424531c641f2423be24281c741f02238124311c8b1ff02285243e1cb11f0c23a324441cc71f0e23b324501ca21ffe22c3242c1c941f0423d224241ca41f1e23ed241d1c831f1c23ec240c1c8a1f82226d24001c981f01222a24b21b0f1ff5210c24091b631eaf21f623791aff1d8c21e923131ac41d7121be23d719a31d57219923b619a21d4a218123b519841d47219423c4198b1d5121bb23cb19891d2c218523df19691d10217823a819301de32044234219dd1cc2201023ed18ae1caf201523be18631c9b2016237118141c8820f9220018241c7220d122fe172f1c4920c222cf17311c4f20cc228f17701c832000230018911c9c20202330189b1ca92025232718a81cb3201b231f18a81cbb201323f317a61cbf200723c917b21cc5200323b717ab1cc520f1228617a11cc320e0227617951cbd20ce223c17831cb220b32220176b1ca0209b22d616461c88206b229d16301c632024227b16fe1b3a20e3210e16c61be51f6f21c4153e1b3d1f01214215d81ae51ed520dc14a11ab51e9c20b514751a891e7d207b14441a721e60207214061a4e1e4e204614ea19421e39201b14c919181e1e200414ac19f81d0320df13e919ec1dc51f32146419931d8f1fcb125f1a081e152038135f1a081e15203813000000000000000000001515f41700002320a6221424531c641f2423be24281c741f02238124311c8b1ff02285243e1cb11f0c23a324441cc71f0e23b324501ca21ffe22c3242c1c941f0423d224241ca41f1e23ed241d1c831f1c23ec240c1c8a1f82226d24001c981f01222a24b21b0f1ff5210c24091b631eaf21f623791aff1d8c21e923131ac41d7121be23d719a31d57219923b619a21d4a218123b519841d47219423c4198b1d5121bb23cb19891d2c218523df19691d10217823a819301de32044234219dd1cc2201023ed18ae1caf201523be18631c9b2016237118141c8820f9220018241c7220d122fe172f1c4920c222cf17311c4f20cc228f17701c832000230018911c9c20202330189b1ca92025232718a81cb3201b231f18a81cbb201323f317a61cbf200723c917b21cc5200323b717ab1cc520f1228617a11cc320e0227617951cbd20ce223c17831cb220b32220176b1ca0209b22d616461c88206b229d16301c632024227b16fe1b3a20e3210e16c61be51f6f21c4153e1b3d1f01214215d81ae51ed520dc14a11ab51e9c20b514751a891e7d207b14441a721e60207214061a4e1e4e204614ea19421e39201b14c919181e1e200414ac19f81d0320df13e919ec1dc51f32146419931d8f1fcb125f1a081e1520381300000000000000000000000000000000a620d51c6a1d301c6625fb205c24ba21802816236f24d924912a6c23d4241227452c6a2471259928232d6a2459258829812df2231225ee29d12d8e24a1255b2afc2d84249025a22a3d2eb624bf25eb2ab82e66272128572b972f9c2bda2cb02b81303b30a631b02b0e30c629be2cec2a5f2e16279c2d5629452dd924fc2e7f284a2b4c24e92fcd266628602481302d242f245924c230ad1f81202f2509310f1ccf1def241c3183190d1fb0242231ce1a921df12334319418dc1ce423553197161f1db42268312016901d712285319815241d84229d31ad145f1cf4229e311c13ed1941238031c00f7b129923a931a60733186f25f3316c0c51207d27e531a51585209c2851311c18b3209f260b2ec619a21ddb24da291718321de122e6244518001a3521af2206152b1b2a21db221e162e1c50211a232217071c0c21cc22df16d01b0c21af22ab16b91b0f21a8227716961b0a219a225a16ef1ae5206722b315b11a932010227f15641a5120a1212615311a26205021fd14161a02202621cf14f719f51f1521b6149e19d91f00215814b719a21fd3206c145e19331f892011144d19e41e45200414db188a1e05203413bc18471ecc1f0613c6182c1eaa1fee12f618141e781f0b13f418e11db01f0813fd18651d0f1f90130000000000000000a620d51c6a1d301ca620d51c6a1d301c6625fb205c24ba21802816236f24d924912a6c23d4241227452c6a2471259928232d6a2459258829812df2231225ee29d12d8e24a1255b2afc2d84249025a22a3d2eb624bf25eb2ab82e66272128572b972f9c2bda2cb02b81303b30a631b02b0e30c629be2cec2a5f2e16279c2d5629452dd924fc2e7f284a2b4c24e92fcd266628602481302d242f245924c230ad1f81202f2509310f1ccf1def241c3183190d1fb0242231ce1a921df12334319418dc1ce423553197161f1db42268312016901d712285319815241d84229d31ad145f1cf4229e311c13ed1941238031c00f7b129923a931a60733186f25f3316c0c51207d27e531a51585209c2851311c18b3209f260b2ec619a21ddb24da291718321de122e6244518001a3521af2206152b1b2a21db221e162e1c50211a232217071c0c21cc22df16d01b0c21af22ab16b91b0f21a8227716961b0a219a225a16ef1ae5206722b315b11a932010227f15641a5120a1212615311a26205021fd14161a02202621cf14f719f51f1521b6149e19d91f00215814b719a21fd3206c145e19331f892011144d19e41e45200414db188a1e05203413bc18471ecc1f0613c6182c1eaa1fee12f618141e781f0b13f418e11db01f0813fd18651d0f1f9013fd18651d0f1f9013ab19c2191b1b6f10ab19c2191b1b6f10372284226724301f7425422435257b2257281125ff251725082af5240a26f926e32baf24c6257f28b12cb424e5255a29592d9424d225042af62dd6240126cc2a572e1526be273b2bc42e9528d429b72b422f652bc92c232c2f2f112c682dd92b6c2e6729492cd02a4f2d0d28782c8c290a2cdd26cb2d072862299f25202f3225ad26d42550303a225d23cc25c930c11eb02110262631381d41204f253131f11b522059255031c91bbc1ec52458315219da1c3e246f311d16511c25247a3133145e1da2249e313214901e0825c2314b14011eb424ac31b412251e7924a331dc12f91db824b7316f130d1fc925ce311015c51e3c2666318215301e12261e30d016661c4b25bb2caa16431c48247c284617d21dab235b256f194e1d72227d24dd18e91c4f224c248118ad1c592252243718ec1c3f22512470186b1cd621f623d217f91b6f213b230f17951b2e21d0229716d11b48210023ab16cb1b1a21d622a7166c1bc72044223716dd1a6520a521a315391a31206d210415401a1a203a21ef14ec19f51f1221ad14d519c01fe8208314db19a81fca208714a3197f1fae2045146e193d1f8d201d145a19031f6220f1134119cc1e3f20a1133919841e09209513d318ca1d9b1f63121219471dda1e11121219471dda1e111295168f1c381dac0995168f1c381dac0968204b23f124851d3c23dc240b2696204325d324fa2582229927ca24f925a32470293a256a26a226eb2a3725a5263928302c80250c270c29cf2c6f262028cb29442df9267328582a8b2d2c2872297f2ad92d76293e2bc32a7f2db4299b2b2e2aeb2c3929d52b8829a22b6228b32b2c28cd298b27732c0f2602281727002e202450250527ca2f7721ae2207269330a91ec922ab263831a81e792138265b315e1db42027267531771ce1207126a9317a1c3e20a725a831601b761ef724a0314f19b71e2025c5313219751e1f25ce31ca18841ee924cf31ba18c11e2225df31cb18531e4a25ed316418881e1925c4318918b51cce24ee30af16131dd224ad2e88177d1bcf24732b4616f71cb5245d288e18ea1d7224dd269d19df1de523f6259319e81d952397259b19f61ce722f424a118321dcb22cf24c418d11ca022a62457186a1c17222524ad17251c8e2187233517cf1b7e216e23aa160c1c5e213523e816731bf7208d223d16041baf201922c415951a8420e7214d158a1a6a20b9212a15321a43209221e414081a14204821aa14da19a81fd5208714b319711fa420521468192a1f7a2019143319e81e5620b7130619bd1e42204b13fc18c61e4f2013138d197d1e2120b41365199b1d411fcc1265199b1d411fcc120000801b861c00000000801b861c0000352019244725781d462197246f25f01ec822d524052676209a2407252d26e921af26b52533274b244d28f025ab278625622916268827a826ed2a07278e283a28a92b19287629ad28052c17283129e728fc2b4828c729cf28712bb928612a5d287a2aab28d62a64274629b528142b0426a9273728992b3f248a251f28c82c24225f243b273d2eb5209522d9262130171fe822e5260d31541fae217b267231f01d8b218826ad31b41db5203526d431d81c4e217f26fd31761d5a2032260f32571c4f1f7b2535322b1b871e37254c324d1ade1f5c253b32781bde20a52532329f1c381faa253832bc1a6b1ff025ea310a1b821d8425ac303a19e61cc0246f2da6186a1cab24b5294218461ecd240828f4192f1fa324f426d21a731e54247e261f1a381e3b245726ce19431d72235925e918051dd922ce249b18d31cc322bc245918da1c77226d245f18711ca921b223de17401c862170236417461c952176234c17111c61212b23d016181bc0204322d415201b8f20fe21bd15d71a7920d0216715a41a5f20a9212315b51a6720a0213115671a27205e21da14d7198d1fd92055147e19111f9120f9134c19d21e552086130319b51e4b20f512d619011f5b200d14021a041f96202b14e519051fa720fe13e519051fa720fe13b50ddf1a1e1a0103b50ddf1a1e1a0103a81e6b21fa214219ca20d0243d26131eaa22ac25f12663200424a525152739217f24a4250e27d8212525aa2544279c2275263e26f727e1234e283427c6283025cc282c286c29c7258d2865281c2a7b2517297828182a36268e2883280e2a6925342826284b2aee2403275c28642a0e2469251c28a12a2c22a6241e28472b28211b249a278b2c8d207622f426722e441f4724aa277730d020dc22362750317f1ff821e626cb316d1e092175262032571d5c2210275932bf1e7321a8266a32c81d2620ed259032671c56206226b932761c08212726ad322d1d00211d269232261dd11fc0255432eb1bc11ee1258531d81adc1c5425a82fec18d51cbf241d2ce518c21ddc24ee28d519991e2a256a285f1ab01f0225c5276c1bd01e9b243d27941ad91e5524b926801ab61da623c22554195f1d4f233c25ed18571d3b231825d018151dd922d2248018ed1c5d226a244818951ce0210d24d2179c1c70215d2393179d1c1a21d2226f175d1cd1206d22e416011cc02047225316931ba8202122dd15d21a8720e8214615c81a6d20ba2123156a1a3a206f21dc142e1a0e203b219614ed19be1ff5204d14ac193d1f94201e145719cd1e572095135a19c11e3b206e139719c21e5e200e14671a361fec20a614671a361fec20a6149814441d4f1d8b089814441d4f1d8b08371e2221ee216918c22019259d26091ef3224326ff27a12014245f262b284d213724a92646287a2124248d2654284121aa2411278128c4219325de272029e4227f265a288e2904242d266228c829a323cb2624288e292524a625192890299f2291254228002a7122152579285f2ae121bf2420281b2a6921962424284f2a28211f2418284c2bb3208b22ff27d42c911f2b230128f92e2520b7221f28bf30c41fee222d28dd31e81f9f2219285e328d1fcf220128a832c41f2a21bf269e32ba1d761fa525c332141cc2205826fd320c1db220a126fb32e71c1621b725cf32511d6c1f7f251e32c11b5a1eed25df30a41a0a1c1925f02d3818ea1cfa24492a2219f41e33257928441b0e1f76256128091b2a203f250c28161c671fe4249227251b001fa9240427a51a4f1e45244a26e319121e0e24d8259119251dc722e5248e18541cee214a2487174b1ced2138245417271cc3211624f5162f1c9a21ca2302170a1c6a217023a416d91b352107235216661b0021ab22d815571bd1205d22ae15ec1a982017225b15d01a7420d42145155c1a4a208621d2144f1a3b206d21c814521a26204921ca14471a09202321a814401adf1ffd208a142e1aa61fe2207c142e1a2b1fb12030146719b11ea32076126719b11ea32076124a12261d731d06074a12261d731d0607651d2621272258187c212f25c9260b1fd8227a26242881206723b3265228e020b123b4265428e1201724c826882830213424ed269728432195245c27d728d021ef24be271c291a22ba240c285929c5211a255928b5293922662418288e293a2181241b289c295b218c243f280b2a5521be242a28322a9021b12473285e2a5a216d245528bb2a3121aa22f7277e2beb1f222347278f2c5a209a22fe27bb2e07206b220828a530d51f56220028c931a21fc22204288f32122065216827b132531e8e206427ff32201dd82121274b33631e79213726f432fb1d2b213a268632911d0b2061266b315b1c571e0f26512fd41a5e1d81250b2cc7199c1e2f25a028cd1a8e1f79258428a71b351f85256728121b7420192505284c1c891fb8245f27461beb1e6624be26911aba1e3d243f26471a2a1e0e24cf25a8190f1e0b24b5257619861d7c235625e4189d1c362276240318401cb52111244217131c9021b823d316071c6c2178239e16fe1b5c2141237116961b492121231d16941b1e21d722fc15fa1aa42024226615d21a5420c4212b15481a2e208921c2140e1a0d204e219614f819e51f46216d14bb19731fe32029146d19fb1ea820b413cf192d1fb1200814f419c41edc203a145d1a931d3e1f35135d1a931d3e1f35137a12df1c041dd2067a12df1c041dd206271d1b21ff21f917dc20a9255d27511e7822972640285c20f82278263228a5209b23ce265328f220e023f326a6280f2114243627c7281b214e246527f8285321b524f8274c29d121cb243d288529ec213b251e28b729a2227b24de278b298a21c624c0278929d42180245628152a7e215b24c028af2a3e210d258d28bf2aec21fe2349284c2ab020bb23e1270a2a98206023a7271d2b62203f225b27372c6d1f1222f2271c2e361f6f22ae274a30a51f3622e4276531611f95217f271032751e452226278d32271f1f22fc27d032ca1e0321052775327a1d0b21a4268431821d7c1f5c26ee2f171cab1d8f25d72c311a681eae25b829e61a491fba257328bb1b151f492582282c1bea1f6d254e28c41b092034251128ca1b841f93242d27411b011f5624a426c21a351e21243426cb19b31df723c1253a19e61d902377253919e31e0a231625fc190c1f69228b24041a1a1e322260241d19241dea212a243918d11c9021c523c3178d1c3f21232330179b1c0621ed222117d31cf52086224f17bb1cba2004222b171a1c8e20f32116162f1b6920bd2137157a1a39208521b3144c1a022041217814db197b1fd8202814e519511fcf201714111a481faf203514321a361fcf206614441a4c1e21207f13441a4c1e21207f13bb12831caf1ccd05bb12831caf1ccd059c1d532154229b17a621bf254c272a1fd22273262928a720352399263328cc20e623db265c283321ed230327ae283821c823bc273f29ef205424302892297e219b244428b929c521ce246a28ce290422ae248528192add2144246528272a4621af248328342acb2146249b28502a382150242028c129322108242328182aca201f23d627092a3b203323ef27332a56207223d6271f2a7c201e23da27642a492096211e27462ba41e32225827002d5d1fa0222d28172fc51f352393274a302b20f2217e271e31e11e2b2104271c31e51d542023267e30de1c222092250a2f951c561f3025712c111cae1f5f25d329421c6d2062261229e91ccd1fc4255528331c3f208a257428811c062011251628141c6e1fcb24a527681b151f02259a27f31ab51f1a257a27701bf31ec824fc267c1ab81e61245d260e1a251e6c235b257019721dd222cc24bc18311dc922b5246f18fa1c98229a242b18ed1c71227c240c18d51c2d224924c917dd1cd2210324ae176f1c6b217123dc165e1c1721f522c216ae1bbc206b22d1153f1b94201a227e15181b77200a226015af1a4f209821f514531a0e2053219714721a05204121ae14ac1abf1ffe20a1149f1a571fb8207d141a1b351fb9209614b21a0e1e0420cc13b21a0e1e0420cc13e2176a1d351ee70ce2176a1d351ee70caf1c13212d2280169d21a52578274c1f99227c26202880200c23b5264728b120b42310277c282121c2233b27be282b214624aa271b298f2183240a285529cc21aa2432289d29fd21b7244c28a329e82199245c28e329e82135243328dc2945213924f127c12939213624f5276b29342125240c28b0290f2142243728022a21215623ad279d295c20ef233628512ac72061247928c52a342119231128092a29202422cd2652291a1f79237f27c22943205b230028b92b2320d722a1279b2c791ffc214027952d721e1f216e27d22d831df9208926ed2c5b1df720f326102c581d73207626202ab81c0f21f2259028721d73206226c628a61c4e201226ca285c1c8a20c7257a28991c2820bd256928141c072088253628c61bb51f4d25f727701bb91f2925a427551ba01eb224e7262f1a681e4c244326e019301ede23ab259319b51d742356250e19821d48232d25e1182b1df822ee2469181b1da422a7244618f21c54226d241018d61cea212124ca178f1c77218f233317301c1921f6227b16a91bdc208c22ee15691bc12064229d15231ba52026226815e31a7b20d7211b15391b6720b5213e15a61b3b2075218e15041cae1ff920b415541bee1e82201615861a5d1e54206c14b619f61d39203313b619f61d39203313e30cb11bb51bf301e30cb11bb51bf3011b1dac20be2169174b214a25e726a11e3b223c260c284020b222da265f2876209323472791280c2152236c27cb28e12066234327d728d020b1238f27f22800211f2405283d294b21692440287a29aa2171246228d829a22109244528f7290e210b242528ca29ef201f243d28e729182127247d28422a0021682488289a2a3c21a3236c28492a8a20bd239028972aa92091245f283f2a6e2144232b28122a51206a230f28642a5820a3228527b029c81f7322c827e129761fcf23f3271f2a74209b234a27262a3720d3213c275a2a5d1eaf21f126352a1f1e8a21c4260d2ae01db921a8266d29121e2f227826c2288f1ee1201726a728191d8620f6257828a71c4820c025a828451cce2026268b28a41c5b2061251628221cbd1f0625c827581b071fbb243227ab1a9d1e73248b26111a4d1e37241326ae193a1e1a24d6259c190b1e0724a4255a19cf1df7238a250d196b1d6e232725a018351dc122a1245c18cd1c48224224e3178c1c01220e242f176a1cd421dc23f8164f1cb321ab23aa16181c632147233516de1be2209722d615f01a5920c0210915531a1c20732197140c1a052048214b14f019b41f0d211f14f419871fea2009146a1a9e1ffc2059149f1a4e1fbc202c144b1a1c1fde2088134b1a1c1fde208813000028162a150000000028162a150000c31cd220c1219c16bd22b72582271d2018233c261428d6207d2204277c2852206a233c27a328f02083235c27d128f2208f239c271229ea200824e32738292d2124240e28482941213824332875296b2147245c28bd297e2182233e28f429b320ea232028ba29d420db233628d229db20c7230928ec29af20c12354283b2a9c20ca2347282a2a812023244c28fc29da2011249628892ab3201b245c282c2aaf2040230c28be292220aa221728f2297f1fab230f28e82940208d22e0272b2a431f012221275629a81ed5217826f628601e7521b5261e29e01d832110272629f01de92129270d29451ec62122275a29371ee220392602292f1de6204126de280a1dc2205126d628bf1c2d20c8256e28ed1b382089252128e01b072025259d27841bfe1fd5241327761b0d1f75247f26771a601e2124f025bf19021ec1238f255219b01d76235a25f2187e1d39233b25b018211de422ec244b181f1d6b22922435180a1d042235240f18eb1ca721c223c517d71c682168237e17b61c3021122323175b1cfc20bb2299161b1cc72060221716a21b98201922aa15231b5a20c0212f156e1a1b206821aa148e1a09204b21a7144b1ad21f2b215e143e1aa31f0d2155141e1aec1eb9200d14c71a741e12204514c71a741e122045140000c9178a1700000000c9178a170000021c8a209c2190150a21972563278d1e4e225a2611285a20d722e4266e288e2094234727aa280c216a237d27fa28f020c023ca273329fa20e32303285c2921213924422883296d212024492897294c21fe234e28be292221f2235c28002aea200d245228162af22065249228142a4b214a248228382a192164249428932a14216124c028e22aff207224c528b32a24212624a1289a2acc2003247f28522a942081234c284a2a382022232f28272ae91ff9221b28ff299e1f9d22e227bc29551f53228e279529041f69229e27a0291b1f41228d277a29bc1ef221882788294f1eaf21a6279729081ec2217a2773291c1ea021ba26ec28e11d4a21da257928711dce20b1252528b71c23205a251228fc1ba61f6125ef27431b8a1fcc242527091b0f20a124e026931bf11f78248e26491b1b1f68244126681a781e3e24e725bb19f41dd92371254519bd1d6a232225fd185b1ded22da247c182e1d812294245718111d2f224a242a18c01cd521f523a7176c1c84218023fc16321c47211e23a016051c1121d0223816b81bec209822d9155d1bc12054227615f91a8420f5212c15911a16205f21c414ac1aa11f0b21bc14e31a651ff720ac14a91b721fcd201215961b051fbf20e6148b1ac51eb2203a148b1ac51eb2203a14000052178e170000000052178e170000081c7e20dc219915252294255227341f1e222e2602281f207d229b26432845202e23de266b28b92026232527b328b5201c234e27f92890208223ae271f29d220c22310287429eb201a244a289d29332102246328d9291621df237c28292add2007247928362ac920e4238028332ac120732482280c2a26219c238b28982a67201024a928ad2aa3200b24cd28d32aad2005249f28a52aa620bc238228932a5a20c7239028802a6020972374286b2a3520b82354282e2a282040230f28012ab01f5f22de27e329c21e2e229427c129751e0c2260278529511e9f2137276e29c81d44212d276229551d832106273129ac1d21219126f128471d3a217d26b6284b1dec2007266d28e91ca420ac2538287a1c4220892508280b1c10206e25c627b61b0b20f7242127ad1be01f7b2474263a1b6b1e0124ba25c919c21da1237b251919a61d69234425ea18771df822d624aa184e1d8a2291247118341d37224c2446184a1ded2114244318501daf21c9231c18101d77216e23ac17ce1c36210a234917171cc420762212162a1b6120eb215115a01a24208321cf14691a05205121a714731a00204a2194147b1ab81f17219914321a681fe0203314511a5b1fd2202f14821a211fbd204f14fb19a21e8b202813fb19a21e8b20281300009c17cf18000000009c17cf180000491cba20af21c4165021d725b027291f7c22ca265c2879207222b226462858201223fc268328b620df225827d7289420a9238d270529eb201b23c32747299e204d23d2273529a1205f23f9274929ad202b23fc2771297d208b22c6277b29fc1fd422da27a1291d204c233528b9296520632343281d2a55208c2351282a2a4e209f2389287a2a58200924b4287e2a9b200e24c228922a8f20ea23c028a82a5320f223b728a92a4720b623a628a92a1720b7239928822a18203b236228522aac1fad224128242a151f73221a280c2ad81e5322e627dc29b61e4d22ea27be29961ee121ae279c290c1eba214e276229e51d0f21be260029341d2f21a026c128411de82051267d28e41c2d204826b628081c5e2006266728371cee1f6025c727871ba61f03252927431b2c1fd024c626941af31e92247e26431a891e4a241a26c919201ea4235d2553199a1dd522cc24c818411d8b229a246718161d3b2256242e18bd1cf0211b24a317821c9521ab231f175d1c50214223c1164e1c2321f4228616301cf720b9225916281cd7209b222b16e21ba0205122b815831b5f20e8217415cf1b192082218b158a1bb41f1d215a15151b611fef20cd14d71a531fd320a414a11a9d1ea2206314ea19fa1d12201313ea19fa1d122013130000331b641d00000000331b641d00004a20c024ee25821d552162251827461fcc21c1258127d01f55223326f8274520b722bd265d28792007231f27a628a020c2223e27f02865202523b2272329a520892306284829d6206b2325286a29c32091235b28d329cc2057234928ee297a2038238928452a59201224c7287d2ad6200024dc28bc2ab120f523df28d52a79201324e628f72a95202424e828e32a97200724c328c72a5620f723be28a82a3920bc23a4289d2af51fa023a028902ad81f73239328832a8c1fe4226628492afb1e652230282b2a951e1c22fe27112a301e56220828e6296b1e51220428e629671e5c220528cc29711e2022e427a8294e1e1322a8277629401e1821b2261129291daf20ea253b28ac1c5320f3254e282c1c2520b8253328001cd71ffe244327711b7e1fbc24d2261c1b1e1f8e247026871a011f52241326341ad31e1224b925ef194b1e932356257919e61d26230b250819761dd122d4249318471d85229b245618e11c27225624dd17b41c8e219e236e17371cde20bb228616de1bb2206f22f7157a1b7e202622ab15c01b6020f521bf15b51b6c20e121b715121c6120c521e915c11b4a20a221a1158a1b162069215a155e1bd81f2f211d15441b9a1f0121ed14bd1a081fd42092146f1a701e7f20b3136f1a701e7f20b31300003817411a000000003817411a00004a20f6231b253c1d1421ec24f6269a1e3e213625dc26d11e77218b252e271b1f6821e225a627071f69213a262928091ff821ca268828ab1f4c224227d4280b20e622de272a297c204f233e288f29c020a8237b28fa29db20a0238f28302aa720f923b6285b2acd204824fb287c2a17212a24ee28ca2ad1201524fb28db2a97204024fe28d32aa52048240f29ab2a8b201624f2289f2a3420ef23e4289d2ae91fd723e428ab2ad11f9f23c3289d2a991f3a23b728a52a171f1f23af288f2a1a1f0c23a628962a071f0b23a2288b2a061f94226628462aaa1e7b223428d729ab1ee521e527c529f91dc02193277129d41dd521d926c828d01d1f215e2688281b1d802017263a287d1c1f20a9250d280b1cf51f29257327ae1b3d1f92249b26df1a221f53240d268b1ae41e3a24d825521ad71e2124b4252b1a7d1ee3237325be19151e6f2324254a19971dc622b024c618221d6a227a244d18ec1c272248240b18a01cd32117247317671c6e217523f4161a1cfb20cf225916e61ba7208022dc15351c9f2036221c164e1c5e20ac211d16d61bf11f732170155e1b9f1f34211d15bd1a6e1f22219214611a681f10215314501a561f05212e14931a5a1fed205a14a41a351ffc206514de1a171fb1205414de1a171fb12054140000bc1b5d1d00000000bc1b5d1d00001a2046247025121dcf201125b8267c1edd20ec247026671e2f213c25cf26d31e5b217f252827f61e9a21f125c4275f1f05226e262e28d31f5822db266c281320d1223a27b5286f204e23db271a29c0207d233a288c29cf2084237128ee29b520b2239a28442aa3200324df289a2ac420022423290d2bb3206a245529202bf7204c2462294a2ba0206a245f29422b9d2048245d292f2b4520442457291d2b5220ff234a29362bd81ff5233629182bcf1fb8230a29112b731fac231a29042b871f55230629f92a131ff722be287e2ad51e46225328f229271eb621ef27a329c91d9b2182274b29c51d5c2143271a299a1deb200327f828231dca20cd26c028011d8a2063268528bf1c582015264328671c0d208c25c9270a1cc01ff724e3267b1b731f9c244826311bf61e4924e6259c1a981ee6236e25d7192c1e4d23ff242b19e91dd022b224f318a81d64226c24a618391d162236244a18f41cd5210224fb17dc1ca021b223d517b51c69215a236f17531c1e21f022b116141cd32089222e16a11b8e202c22c815f81a4820c8212b15581a052068219b14741ab41f332195144b1a331fd2204414791ad51e9b2063147a1a9f1e83202f14f41a9c1e71207e14a21a561e642049144a1ae71d0020eb114a1ae71d0020eb1100004717f01b000000004717f01b00002020e2232e25081d71209324f125b41da520c62445260a1e9a20d9246c26e91de620f5248b264a1e4f215c250027d11ea521c5257f273f1fab211a26e827471fc9213f261a286e1f922177264b28281f1023a127ff288920362335289b29932043238728182a7d201f243d29e32a07217024b829832b58217a24fc29de2b1b21a9241f2a0e2c05219a24292a1e2ca92089241e2a172c73207f24142a132c45208a24102a062c18205e24f329fc2be01f4824e529cd2bb71f1324cc29b82b9b1fe123a229972b7a1f932366294b2b8d1fee22ec28c92a051f3b226c28392a831eed211928bf29491e822184274e29ef1d1c21bd26c828801d922012265128ec1c5d20ba250028a11c332051256c27741ca21fd024be26da1b321f882444262c1bcf1e4424ed25931a5a1e0824a625ee190b1eab2362257219f91d462322253119c81de622df24ef185e1d4f2265246918c61cae21d223b017811c46214a231c176a1c0721ff22d416591cd620b22297164c1cc2208c228316471c9c20582259160f1c6e201822e5150e1c5f20f921c215181c4720b621d0152c1c37204321cb15c71bbb1f41214615921b361fb7202215501a821e72202e142c1a741e52201614dc19471e67206213d2192c1e81205613d2192c1e812056130000ba13b71800000000ba13b71800000a20fb233d25201d3e206524cb25611dbc20ee244926011e0621112580265f1ee2201b25a726311e43215d25ff26ad1e4f215d250127a61e3c215225fe268e1e5c216925f026b61efa21fa25da27941fe922cd2671286220fb222127cb2851201b23f2276029562047237628152a71207c231629cd2ab0207f242a2a132c5821f424fa2a8b2c7e2153254a2bd02c65214d25902bfc2c3321ca25b42b052d4f215c25f22b442dd4207a25d62b2a2def20f5248a2b202d78206025f52abc2cee208024962a672c58203924f829052c4720a7237029532bfe1fc422c528702a491f5e211b28cc29de1dd720052716294a1d872002262a28f31c7220a025fc27c91c912048257827c61c4f20fd2423276f1c8f1f72246e266a1b411f1924d725e31ae71ee8239125541abb1ea0236f25111a501e382320259719011ecd22c4243919a71d68228224bb18821d2622522486185f1df021262454181f1da121d2230b18071d54216123c717b61cf320e1222317231c7c202d222316211b142097214a15c81ac91f5c21ec149f1a9a1f3521cf14751a7f1f212195145b1a521ff82083140d1a081fbd203314cb19a31e8220db139819561e50203b13b919231e1d2036138419e21d052021136b19c21d1f2086136b19c21d1f208613ad113a1b181da101ad113a1b181da101961dd0201e22c017b02030244c251f1dae209824f425a31daa20a2241826c41d0f21c9244b26411e4f21f1247c26bb1e4f2106259126a61e2121fc2491266c1e2521fe24a426721e1421ce24b326471e17211025f326361ef820f524c626111ed02191257a27001f4e21a525af278f1ea420c225fa27bd1d7921ca26c828db1e5723f728922a8a20ce24412bc12cdd214a26912c0e2e46239d262e2dd42e8b23db26692d072f4623a7262d2dcb2ef422d225cf2c682e2d226825382c902dd221af243d2bba2c5721d823de29a82b99207b22e128ae2a7f1f5a212228a429471e4f2161265e28391e62208d253f28231d372036255d27cf1c6b1fb5248c261d1c121f3c24fb25461bfc1e4824f325131ba21e0e24c525671a7b1eaa237325271a341e31232425b119091ec322e4245819fe1d9e22c1241e19e21d50229624d518b41d0d22552498187d1db8210e245618181d582180230618b91c142118237617901cd020c0220f17681c9c206c22ae16571c6a2019227116361c2720cc211d16c61bc81f76218515551b891f3b213415221b561f0a21f314061b191fda20e014481bf31eb420ef14d41aad1e7f20a1147b1a831e6d203014401a331e2220e013a719c71de81f67128019a61d2020c2128019a61d2020c21267138916f1178b0367138916f1178b03f31c29209f200717e11ff72338258e1c6d204b24a425551d75204d24ba25701da1206724d825a61d9e207124e525a31dc0207a24ec25cc1df6208c240d26fa1d26218e240a261e1eff206c24e125dc1dff206324c325dc1d18215724b225f91d9f20d22358257e1d822065231d25121d292072228d249d1cf91e3421a223651a2d1e5220af2262182c1d761f46225a16db1c102081221b14611c772034239d10411de32124248610dc1d46224f256c1112215f266b284918fd2100286329c91aab20e127af28ac1b4319f324ac254015561a9421ab243a17011ae620c624f116d21f8822ed24361c0b2081221525391c131e61239d25271a411e2823ae253d1a3d1ea32223251f1a6b1e8c22f124311ab11d39228a2467198f1d2a227e241919051e542296245419321e43227f246319c01dfe215924d118b41dc5211e248118791d6c219c235218f21c26214923a7177a1cea200123ed16691cc920d422af16771cb120aa22a0167b1c9520622282168f1c6620222279166a1c3120c7212016b91bc81f4d215c156a1b671f13212615721b441fee202b15511b491fea201415651a121fce207014471ad41ea4205b14211a961e72202814461a711e54200e14fc190c1e6d20bc132f1a5d1d251f33132f1a5d1d251f331300007712431600000000771243160000f91e91223124f41ba71fd22318258c1c2d2016245f25e51c26201d247f25ee1c3b200d247225f61c4920ff235f25f51c4c20fb235025e61c5e20f9235025ea1c4e20d7235425d81c5920f3235d25d21c1c20ae2373256d1c1c1f8f22d2246e1bbc1e932103249c1a4a1e2f218923c5191e1d84209f2287189d1c4c2062224e185b1c35204d2246180a1c422030222818781b402012220518c31a1120d7214917091a731f81217f168219ed1e2a21d8153b19751edf2061159718ca1d9a206e1468189d1d9e20f113b7189c1dbb20e6138319dc1df3205a14e31b421f00221a160d1d80203023fa170c1de420cd236318201d4e213924b318621d932141240619731d792116241619721d7c211724ff18831d94211c24f718771d9e211d24c0186e1d982121248c18591d8c21122465184d1d7221002445182c1d4821c2231518fb1c0c216023de17c51ce520f8226117801cba20b922f716691c99207b22af164a1c73203d228016221c55200a220016191c3020d721f315001c0d20af21ae15781bd31f73212f15461b881f41210c156a1b701f26210715651b401ffd20e514611bfb1ec320e314e61be61ea6201a15581b9b1e80208314711a2c1e4020ea13f719791da31f8413951a131d281f0913951a131d281f091348055a178919870048055a178919870020202b2355243e1c10208b23cf24811c18207c23ce24681cf51f5223c524491c08205a23d724571c13204d23dd24521c0e204123e6243d1cf61f2023e424191caa1f2a23e824c41b511fe222b9244c1bea1e06223224c91aa11e9621b6234a1a791e9d21a1235a1a4f1ec121d423971a351eeb210124961a231e08221124b41a2c1e2c221624d81a4f1e5b222e24181b701e73223e243d1b5a1e5e223a24241b5f1e572239242a1b351e3a222724e21ad61d03221124791a4a1db921cd23c719ee1c67218e234f198f1c21214423c318261ccd20fc2234180c1c7120ae22f117fd1b1d20722233177d1b062080228316b01b2720a022af16181c4b20c822fd16571c6d20ee224517841c912005236c17961ca02007236417b21cae2009236a17bf1cbd2012235817c71cc8200d236517c81cca2006236617b31cc420f0224517a51cbd20da220a17881cae20b922de16691c932083228b16481c6f2039225a16101c3c20ea21e615c01be11f81218015461b571f26210c150a1b091fea20c614c81ac41eb7207d14921a9d1e97205a14521a7a1e72202f141c1a601e5b200c14db193d1e41209113a8191f1e27204f13a519eb1d0a201e13d519d51dcd1f59136719721d901fa2123c1ab61ddd1fa9133c1ab61ddd1fa913000000000000000048055a178919870020202b2355243e1c10208b23cf24811c18207c23ce24681cf51f5223c524491c08205a23d724571c13204d23dd24521c0e204123e6243d1cf61f2023e424191caa1f2a23e824c41b511fe222b9244c1bea1e06223224c91aa11e9621b6234a1a791e9d21a1235a1a4f1ec121d423971a351eeb210124961a231e08221124b41a2c1e2c221624d81a4f1e5b222e24181b701e73223e243d1b5a1e5e223a24241b5f1e572239242a1b351e3a222724e21ad61d03221124791a4a1db921cd23c719ee1c67218e234f198f1c21214423c318261ccd20fc2234180c1c7120ae22f117fd1b1d20722233177d1b062080228316b01b2720a022af16181c4b20c822fd16571c6d20ee224517841c912005236c17961ca02007236417b21cae2009236a17bf1cbd2012235817c71cc8200d236517c81cca2006236617b31cc420f0224517a51cbd20da220a17881cae20b922de16691c932083228b16481c6f2039225a16101c3c20ea21e615c01be11f81218015461b571f26210c150a1b091fea20c614c81ac41eb7207d14921a9d1e97205a14521a7a1e72202f141c1a601e5b200c14db193d1e41209113a8191f1e27204f13a519eb1d0a201e13d519d51dcd1f59136719721d901fa2123c1ab61ddd1fa91300000000000000000000000000000000d323bb1ec11f0d1e6f27f02170244b23fc2905248224df255b2c82245f257c28632dcf24a2258b291b2ec524ce252f2a672e9824a225b12aa82e35251c26102bc82e69256126322bb22f59270a288c2b5730ff2a232c452b1331872fc830342bba315e326134402cac3032297a2cd32b053083251c2ddc2a0b2fb024d92e592a932dc92430300629902bb924a530d126c8270025e130e422ad23852534310a1f971e2b254f31411acb1d90244e31da18ce1cbe236a310e16871af8228c318f12a31921229d3120117f1af421ad31491155199f21be31571031185521bb31490ef8189721b831220f4e157521ab31f00ab61a0e24f4312d10ba1c8d24d9319411281ec0255431a913a120f52616308817e9204f287c2d6719081faa260c29fe182c1c4b229323b916621b7d21d1222f16b51bc32109237416341c6321e4220a17dd1b3321dd229616791b2121ab224216c41b2521832261161d1bfd207022d815121bba204622b215c81a7520bb215b15761a28202e210015121ae51f1721b214e919d61f05217a14b319c81fef203b14c0199a1fce2044147119461f9220e7134919ec1e4c20ac13ef18941e0e200113e2185a1edf1fef12e618411ec01ff5120a190d1e681ffe128d18c31d971f2c12e5185a1d311f7b120000000000000000d323bb1ec11f0d1ed323bb1ec11f0d1e6f27f02170244b23fc2905248224df255b2c82245f257c28632dcf24a2258b291b2ec524ce252f2a672e9824a225b12aa82e35251c26102bc82e69256126322bb22f59270a288c2b5730ff2a232c452b1331872fc830342bba315e326134402cac3032297a2cd32b053083251c2ddc2a0b2fb024d92e592a932dc92430300629902bb924a530d126c8270025e130e422ad23852534310a1f971e2b254f31411acb1d90244e31da18ce1cbe236a310e16871af8228c318f12a31921229d3120117f1af421ad31491155199f21be31571031185521bb31490ef8189721b831220f4e157521ab31f00ab61a0e24f4312d10ba1c8d24d9319411281ec0255431a913a120f52616308817e9204f287c2d6719081faa260c29fe182c1c4b229323b916621b7d21d1222f16b51bc32109237416341c6321e4220a17dd1b3321dd229616791b2121ab224216c41b2521832261161d1bfd207022d815121bba204622b215c81a7520bb215b15761a28202e210015121ae51f1721b214e919d61f05217a14b319c81fef203b14c0199a1fce2044147119461f9220e7134919ec1e4c20ac13ef18941e0e200113e2185a1edf1fef12e618411ec01ff5120a190d1e681ffe128d18c31d971f2c12e5185a1d311f7b12e5185a1d311f7b122f1f441d471f8f192f1f441d471f8f19d824f123672572214828e124d825d1247f2a7a257b263427592c30253f26af28652d02250b26ba294d2e28254426c92ae12e1526c5274c2b752ff5265c28042cec2f10280b29342c4730572a172c672c9430382dcb2e7e2ca630912d712f692c3d302f2ade2c282c7c2f5428e42c772bf92d7926362edd29792cb525fd2f6328b1290b26c5307e25142635262531de21f9224c265f31bb1e1a21ad256e31ec1c561f022571319d1afc1d52246d310e185e1cc3238c31f314171cab23a3313e14c71d2e24c231fd15511e5124d7318d161b1cb823c931ae12541d9623c431a112b91c8b23c4314611bd1d6524e531e013b91d0325c831da13511d5325ef30f5125f1c81254f2e8e12211d6725752a7b15f41df424a727cc18e71d0224c2255219071de122d3248918531c8a226124a917bd1c8422622432185b1c1a221b24b6172e1cb0217f234517f31b3b21b522c916871b3c21ce224e16cb1b2621cc2287169a1be02055223f16d81a7a20af218315361a3d207221e714351a24204221cd14f619f91f19218514d419c11fef206b14d119a51fd2205114d319821fb8205214a9193f1f8c201c148919071f5f2004145519c41e3c2092134219631ee01f4c13e018e61d961f741205195c1d231faf1105195c1d231faf11f41be21e2f206515f41be21e2f20651519222a247f258a1f4e25f6241726382251283f2541261025282a802590261f27362cd825ef26cd283f2dc525cc26fc29322eb1261b28f82aed2eff27e628ca2b9e2fa528ba29492cf22f9d29242b572c2b30922b112d7d2c1c306d2bf42c5c2c722f432a792ce62b402eb6283d2cbb2ac72c4128562dfe28c02a4627c72ef126532835275c3073243e25cc260a314f21ef23f1267931e91fa9227f269f31a41e241f59258a31c81a67209625c031cc1bba1e0725c431a219d11dbb24d2318018e41e1d2501321d196d1e202510328f18fc1dc9240a322718101eee240e321c180f1ee82418320318991ef72420325e18181d2825cb31bf16401dc62451304a17621ccb24f82ca516e91d09257629db18331ff624d0277d1a511e3c245526cc19331e0a24d425af192e1d62232425ac18061d0223d4247218d31cd322ac243218bc1c532233240b184f1ca42166235b17611b642136232e16a01b3e2101234316531bfc2077220416fa1aae200d229e15951a7e20db213315931a6720a4211615301a3e207b21b0140e1a162049217e14e119ca1fec205c14b6197e1fb02025147919301f8a20f2134a19f81e692082133319e41e5c2061134919f41e5d2056136f19bc1e53208a139e19de1da51fb9129e19de1da51fb912fe17f51db41e4510fe17f51db41e4510f4208e24fc25ae1ea62246257b262a200525af254d2735227627d12508277e24b929dc262428cd26b12b5a277b288228cc2ce127c1288c29d12d53285929d22a762ef228592a932bcd2e5529d52afa2be22e61292e2bf52b972e7c29432b842bc82dc728952a802a7f2cb928972b0f29a32a3228142c5c27ad286128882d09255b2691273b2fa4225c24f526a3308e20c023f92673310d20ff224227d7314f1f9721af26e231c01dd3206e261832f71c3821b2263d324a1d682054264c32651ca01f7b254d325c1b951f51256632521b44208b256e320d1c7420b8257d323a1c2a1fb9259532b01a67200d2684321c1c0320fa25c9317c1b841f9e25f22fe51ae41c2825172c7d18ff1e2825d0286b1ad81f0825fd27321b181fd3247227821aef1ea524ff265c1abd1ddd2395252c191d1d1d23062587185e1cd122bf249817c41c86225c242518de1c0822e82327184c1ca8218d233317231c8d216223cc16131c60211023b216531be9206222e715de1aa42009226d15ff1a9720ed216915c01a8020c7211e15b71a6620a2211715601a3c207121ba14211aff1f1e217314a1196b1fbc20fe13a1192b1f8d20d0134019f71e6f204a139f19ef1e5220cd139719f31e8d20c313f119a01e6d20ad13f119a01e6d20ad132116da1df81ebf0e2116da1df81ebf0ef31f33243d25891c68215225f326f11eae232326a327ee20ca244126cc27002287269026e02709246928c4262f2861251d2a3c2781284427e72b07283f29b228842c7b28a8295e29a72cd328382a8829e22ca3283c2aba298c2c3629fa2a4229c82bbf286b2b8028272ad528482bec2664286728412bde24df265c28232c82233d254028a22dba211924d227e92f7a201c247e2722317e200c24dc27ff316c20a3226d273c32251fa72190268432161e0a237e27ab32781fe321be26a932271e8e202e26bf32b01c1221d0260133231d4121aa26fa32531d07218b26fb32181d08203d26fb32051ca0207126a432af1cd61f20265531d01b241edd24272e061af81d10254d2adc1953208f25a1282c1c21203d251f28f91bb01fe524bd276c1ba31f97240c273f1b561e0b241026ea19e71db4237e256b19881d61231f25fc18571d1723e724a5180c1d90227e244f18cc1c0d2214240418ad1c9421782389179c1c4a2112234717541c0121a422b216061cd6206a223916b71bc3203722d815eb1a9020f5212215a61a6a20b321ee14461a2b2058218e14111a022029214e14ea19971fe9203314b1193e1f9f20e7138319031f7020a6139b19f01e4e20c813d119ce1e73203914261ab21ead20bf13261ab21ead20bf136714871edd1f490c6714871edd1f490c112024241825611c7121b825d627fd1e2524fa2672286421db24cc266b2828222b25fa266e287922cd255327a5282c231e276427b32849249528c4270a2985257e296428bf299e26a029ea288b2ac726022a0829a92a24277d290929d52a70268a289a28c72a53257127a128b82a4e24f9255b28512ad022bd258628ef2a7422d0248628672c7e216b230b28f42d3b200e24ec273d30a020492451289c31e320172465289432aa2088224828e532581faa2206280533641f0f210b2702339c1dcf20882627332d1d9f21d8264f33f71d7221fc265533b11dd821d32662331b1e062096264c33341c372072269232561c611fe925a730981b451e3025ec2c5a1a901f65255e298a1b2a20cc25a528161c6c206b252228451c911fef24b7272f1b3b1fbf243827c01a0f1f7a249b265c1a0a1f602437263c1a941d4d232825da18831c4b226724b4175d1c202243244f17251cec211e24d016361cc721e223ec16131c882182237016e51b4a2116231c16631b0321a822b715441bcc204b228115ea1a8e20f8213d15c71a6820b9210715811a48208621d3146e1a3b207021c6146f1a25205121ac14681a0c202c21a614621ae41f062189144b1a911fb9205e14141a2b1fc22038148b1af91ec92005148b1af91ec9200514ab0fe51d201ff307ab0fe51d201ff307152042242a25761c8022f525f6273a20892312278e28d620d12317279328f5201124fe26782818216b241b27a528882102258f27de283122bf25f4272e2904238a2615287c29fb2371264428c529c3235d278e28362a6f24db267a284b2a212465263328e3299a23a3259028962a9c2277259728c22a52222325b028182bdc21a9249d287f2b51211d245f284b2cb12071239427d82d4e2013243d287d30b720fc238c281f329e2084222c280133891ff222f2276433ec1fb6210c274b336c1ea621da278e332c1e85220028d533051f7d213527b133d21d5b21bc269d33ae1d1f20d7265b334e1c732097271d32a61c491f5426282f9d1b691f6d25ae2aa01b97207b25c628941c6020cc256528391c092141251328dc1ce51fd02496277f1b7f1f8b24d426ff1a471f41245a26ad1a981e2024e525f119571e2824d0259d19ec1dd2237f252619d91c9a22ad2423188b1c092232249c174a1cb721cd230d17351c88218d23c816231c792161238816011c572123235316e81b2c21cf221e16381bc8204a227815ee1a6f20dc212415701a43209821ad14661a28206221a514341afe1f312167141a1abb1f07215514e119621fd5201414021a351fb1202b14b719cc1ed720ef136619ef1d41201d126619ef1d41201d12f605a31d8e1e5b01f605a31d8e1e5b01a91f59243725201cc2214f264428941f8a235a27b528f62005245b27b9283a2124247827c128522150248727d8287821a324b027f028bc21fa24ed2742292722392541288c2960225e256e28be298d220126c328382a54236b25e128902a9d220825a0284c2afb21fb2488285f2aeb21df24c828cb2ab6219525b428d32a75227c247f28fc2a1e2164248928242b0321dc232f28682c8c2037231628fa2d2c20c9237b28a8308120f8222d283f32f31fab2224284033801fe021b227b033841e02226c27db33901ea722382814342a1f1b222d2809347a1e5521d027da33921dde202328ec32161d3a20ad26ad306b1cfb1f2b26e62c1b1c30205426b5293e1c5520a9258f28401c8920a6255a284e1c4e204e253c28161c0a20aa247727ab1b211f6e24c326a71a551e45245b26cf19cf1d2124ea2524190b1ebf2372254119bb1e1a23f724a3198f1e852276247e19c21d31225524bb18fa1cf3212b240318a81ca021e8235b17791c6f216e23ec16731c3b213123bf16761c1f21db229e16491cec2081223816d21baa2039228e151e1b7620dd210e158f1a40208a218d14431a002031213f14fd19a31fe9201014f419621fcf2009140d1a3f1faf201a14f819201fc2203d14591a0e1e901f3113591a0e1e901f3113e715761fab201f0ee715761fab201f0e1220b024be25831cea214c263328b01f99231d27bc280f2108246c27b9283d215724a527e62893218a24fb273229d5217b24322888299c21c3248e28f129e321ee249d281f2a04220125b1282b2a1b222a25b028412a38225125c228742a3c221725b828812af8210a25dc28d62ad4212925b228a42a0d2287254628172a7b22b3242a28702a6f2128247c28d52acf2024245628f72aca2035231a280e2c2b2082224428bb2d6d1f5323812875301e2086225828e231561f49223b28e532f81ece21ca27a033581e3b223927e333b61ed9219f27ca33341ed221aa2719332d1eb02030272b31fa1c651f86257e2dd81b6a20d526d32a9d1c3f202a26ef28701c11200a2614291e1cd21f6d257028cc1bcd1f1b25e027881b941f1625cd27321bba1f1e258a27361b491fda242427911a091f8324a5261e1ac41ef423bd25c619081e6a2323250d19851d2f23f2248918281df322cc2427182a1db22295242918fa1c56225b24dd17f61cf6210a24ad17941c75217723f016741c2321f4229c160d1cdd208c220316811baf20512272151f1b88201d222b15c11a6320c421cb14671a2b20842171148d1a1b2061218c14d81ac21f012187149b1a0e1f95204514a31b0a1f8620b114d21a861d0f1fdb12d21a861d0f1fdb12a0166320d4214810a0166320d4214810281da922ac241218882260261b283220612305278f28db20c8236527be281f212e24d427f928802159240f283829a821922441288529df21cc246c28ca291522bf247328e529f221c7248528062ae821e3249828242a0b221825a8284c2a37220c258128322a00220b257d28002aff21b7245e28202a87210c254d280b2aeb2153242328602aee206c24ab28242bfa20da24be28642b8921bc235328fb2a6920dd22ee27562bb81f35239d28ff2c0d204f237228fe2e0d2073222428bb300d1fec222b28f931581f112216285b32571e96212b27da31d61d7921f927e630a21d9d205827682ebf1c1d21be26402b431d9d2026264029ad1c8b203426cd28871c8c20d6259628761c4620e825a528201c7820dc258428501c28207f252f28e41b262068250328e01b511ff7245227d41aeb1e6a247d26591a6e1e0e24d925cc19041eca238c255419d41d8e2351251119881d39230a25b818681de622c12471182f1d8a2284242d18e11c28223624b517911cc221c62311174a1c5b212f2380160a1c1a21d522ff15b41be7208222b7153e1bbd20342242153d1b9d2003222315661b6320c4212215c61b3d207e216515fe1bb61f02216c15581b181f8220fb14551a9a1e522065143b1ae71d02200f133b1ae71d02200f13f110d81e3220ba07f110d81e3220ba07282076247d257a1cca2131262f289e1fe222fe268f28b12060238b27cf28da20ca23c927f2282021d823e3271029192124240a283629522164244128732980219f247528d829c921e224a7281c2a0a22f524c028402a0d22cd24b328522ab5218b2499283e2a54217f2498285b2a452181249c287c2a472166249f28852a162182249e285b2a24216b24b728e12af820c4247b28812a6f21d9233c28662a7a2095236228c92a53204d230628f4291b20d5239c280f2c57205b248028092dc2203b2325285d2eac1fbe2155279f2ee91d0e219426eb2d331d6120a226a22c821ce21e8525f929151bcd1f11259e28031cc22041260d29d21c92202e26bc288e1cc320c825ac28ac1cfc201526c428d01c4120c92576280a1ca71f2b250228441b651fda243427e61a541fab24c126b91a9d1e65245226f619271e2724e9257219f41d0e24ac252d19c91df7239125f018831db32369259e182e1d2423ef244118ce1c64224b24be17911cee21f9233617611cc121cf23c716671cad21b123ad16311c75215d233816c31bff20a322a215201b6b20cb210f15961a1a2058219214311ade1f21213314381aab1f042137142b1aa71ffc2015147d1aa01feb204b14441a651fc8200c14aa1a071fba20c313aa1a071fba20c3130000e119c81900000000e119c8190000a71f6d246925821b3b233826262869209723c4266d281e214a237f27b628bc209023a527d928eb200124ed2712293421432426285b296721882457289829ad21af247f28db29cb21c0249a281a2adf21d724a528242ae821a3249128362a8221a1248b281e2a5b21b1249928512a5a21a52471283b2a4c2158244228e829e32085247428452a03219c24aa28892a09216924ba28e62ae4207e24b128e42afb20f0237928ae2a67207d2356287b2a182075233428c62a0420c4230528772a2e2072230c288f2ae61fe7214627922a2b1e3f21fe26a52a7b1d2221de26c8295d1dfa2075263029331d3021632608296c1d572017261029651c7a214526e328761dff208726dd28d21c7820c1257e283e1cc220d3256028711c402086250c28cc1bf51f26257e274d1b881fd3240027ab1ac41e77248826fd19231e1424ec255619cd1dbb239425f418951d66235a25ad18401dfc22f5245018361d8a22932433181d1d1c2241240a18181dcf21f323e217f11c942189237e17c51c5d21312313177a1c2a21e922a516191ce0209422f3158f1bb12031225e15061b6a20c021fd148f1a2a207c218d14b91a1a205b21aa146b1aff1f3b215a14691aa91ff3203e143c1a391fe02021148f1a201ff720d9138f1a201ff720d9130000c91afc1a00000000c91afc1a0000b01e0f24ea248f1a492102261528df1ec0221427a3288d208f23c327fa28fa20ff230528212943212a241b284f296b2151243f2878298b2175246028b329a8219e249a280a2ac8219824ad28362aae21a524ce285a2aab21a124d828702a8021a324c728732a5d21b424cb28782a5d21cd24ce287c2a7a21dd24d6289f2a7821db24db28c72a6321b324e628e62a22216c24db28f02ad5204824ce28f02aae2019249828b92a6920d62369289e2a382051232928822ac31f9322f527552af91ea4229f27cb29f01eb922a727b929eb1ef8214a27a829241e0c2256279229391efe2188278629121e5e217f27b329701d2b2104275f29271dbd210e26c028a11dca20e42573289f1c6b20e3256428321c7120c7255828251c0a20ea2476278a1b4f20c624ee26e81b1a209a24a026651b2c1f7d2464265a1a931e60243826b7192a1e1824be2543190d1e892330251119a51dff22e024a4186e1db122a6246018661d582265244418211d05221924f017b51ca121a52349175f1c58213923a016351c2021e1223e16081cf2209c22da15ab1bbe204f227115171b7420e5210815aa1a15206d21a014cf1ade1f32219e14011bc81f2221c0143e1baf1fef20cb14d81a491ff1208714611ad31efd20a213611ad31efd20a2130000c8195f1a00000000c8195f1a00008f1ecf23e3248a1a272254263628e71faf22e426822881202a235627b928a82042236627c628b8208023a327f428e120ad23eb272c29de200b242f287e29ff2034246528d529322149248528ff293b2148249a28242a28216324b5285e2a37217424c928892a27216124cd28b32aff207024da289e2afe203c24b328a32ab2203624b128992a89201824ad28b92a58203b24c728d02a6c203324c828df2a63202924d628f02a4820f623ab28d32a08209f2376288d2ab81f2d232f28352a281f6b22d227cc29671eb322cf27d429931ec122d327c329a01e7622ab279c29571e9f2171277f29831d5f2125274329451d0821b3261129db1c9a21c026e328521dd1215026c2286e1d4a21e8257828ef1cb920df255028681c4920aa252528dd1b41203a257c27ce1bbe20c8246c26331ca81f6a243326a81a391e0724c1254f19fc1d97235e251b199e1d1123e324b5184e1d972289244618371d3b224f241e185c1dfa211c242618641db921dd231618161d7a2185238b17bb1c35211223de16141cce207a22cb15451b6220ee212915d01a2b209621ba14ab1a12206421a0149b1af21f4a217a14a61abf1f1c218214701a941ff4204314991a641fc5205e145a1a281fba203414041a721e9820d112041a721e9820d1120000c919b41a00000000c919b41a0000ad1ecd23fb24de1a3d2286265f280e2000237527d928c72002239527e828aa2021239127e628a3204623b3270029ba208223d7270b29c320a223eb273429c820042428287029f7200a244e28a929ee2053249928042a35216724cd285b2a18216f24df28892a0f216724fe28c82ae2208224fe28db2aff209f241129d82afa209a241629022be2208b242b29252bbf2065241b291b2b85205c240e290d2b6b203e24ff28f52a4c201224de28e92a1f20c623c028d22ae01f53238b289c2a4d1fe6226928592afd1e8f223128112a8a1e7d221f28e929791e62220a28cf295d1ef021d5279929eb1deb21a7277529e71d7821192745295e1d672109271229371d1821a426cd28eb1ce42026267828a51cd220fc2567287f1c28208125fd27c11bed1f27254727451bb71ff624e826f41a841fbb24a726881a211f69244526151aa01efd2391258c19f51d3023fb24e518a11dcf22bf248918541d732272244b18e71c1f223124be179c1cc721e3232217711c76217423bb166f1c492121239416531c1d21de226a16271cec209d220816061cc7207322b615d31b7f201c228e15ab1b1b2080215315231c951f00219c15801b5d1ff120f714001b221fb620a314541aa91ea3201714c319281e8d20b612c319281e8d20b6123f190f1fdb20c6103f190f1fdb20c61016217225de269d1eaa21ea25b4278b1f4422a8264f282c20e72236279f288b203a237427d028b2209223c4270229ec20b323ed272729f2200a2435287c29202121246b28cd291a2128248828f52912215b24b8282f2a2d217424d5285d2a27216a24eb28932af72092240b29bd2afe2096242929042b0321aa244629332bf320a1244a29492bd62098244a29472ba72073242e29322b5e2058241c29262b43202524f228f82a00200724d728db2ae71fca23c728cd2a841f7d23a328a52a3a1f20237528742ae11ec7224928412a8b1e98224928202a791e8b223028fd296b1e7c222628eb29771e61221f28cf295c1eee210a28bf29d11d75219e277a29441df420d626d828b31cc8206426a6288a1c7320dd255728391c33204d25c627d71bdc1ffd243a27561b8c1fd124e726cd1a7f1f95248326a41a371f45240f26461ab51ef723a2259e19161e642333251919931dfa22ef249518661dae22b0245a18111d58227a240018cc1ccf21fb236d17451c272110237916071ce320b7221b16a01bb5207622a8159a1b94203222a3158c1b872004227a15a51b7f20e9216d15991b4c20b9214515911b202079214115a41b002043212f15941ba21ff6200515211bec1ed3209b14981a491e8120d612981a491e8120d6128418d01c141f40108418d01c141f4010bd209b24a325dc1daf2193255d271e1fad21ad2562274a1f0c222726ec27c41f5a22b3264e281420a4224127aa2844200423c1270b297320702333287b29a82014248e28f7291b215d24db28512a53217b2403298d2a66218f241029a62a58217d241b29c62a0d21b4245229032b2321c6245b291d2b1021db247029362bff20bf247529402ba8209e2479295f2b75207d246329602b30206e245329622bfc1f57244229512baf1f49242d292f2b501f0f241329292bee1ee8230c29292bc01ece230029182bc91e9523ea28fc2ab71e2123b928bb2a8a1ecb2289285f2a571e83224d28152a141e54221a28c629021efb21ae275029c61daa210327e228771d4d21982694281e1ddb2034266528b01c6720d12535282e1c412054259427f11b1520e824cb267e1b981f93244826b91a3a1f5d24fe25481abf1e1924a325c2193a1ea6234d255119ac1d1b23e724c018331d982298243018f11c3b225324f717bb1cde2113247917721c59216823bc16191ced20d0221416cb1b9e206422a8158b1b4f20ea215b15961b3120a42144153d1be21f6d21e914071bb91f5321c314b71a831f37217214961a771f1d215c14911a711f12213e14a81a611fe12032147d1a4f1f03213114aa1ac31ea4208c13aa1ac31ea4208c132618fa1e9f20f6102618fa1e9f20f610912001255a26cb1d1e217b251a27a71e302154250e27a91e652189255a27ed1ea9210326ed27451f3222b7266828db1fbf223727b72847201823bc270d29712093231e286429be20d2236c28d229f520f523d8285b2aeb2063244b29f32a4921bb24a129632b6521eb24eb29d32b4c21ea24f4290a2cfb20fe24052a0f2ca820dd24ea29042c4e20ea24e229f62b1e20b024c229de2b8d1f8224b029c82bf91e4e248c29a92b861e412482298d2b731e1b246a29762b391eeb235e29652b001e96234c295a2bdf1d5c232829392bee1d1a23f228e62af21def22ae287f2a241eec2265281b2a591ea2222e28cd294b1e24220928a529061ec721b4275929c31d5d211427f5286f1d0a21a526af28061d93201f265f287d1c45209d25ee271f1cf21f16250e278b1b801fa9247c26001b091f4824ee253a1aa51ed0235725ac193f1e3623f5243b19f11dc322a724e218921d642269247d18631d1022282441183a1dc021e8230b18f81c7e217c2388178b1c2621ff22be16331cce2089221916af1b762015229415fa1a3020ac21f4148f1af01f5a218d14841a961f16216b14651a4c1fe7203c14991a301fd1204314b11a121fc2205314f81aed1e9a206414f41ac41eb5204514b51a5c1e7920be12b51a5c1e7920be12a8148319d11e620ca8148319d11e620ca1206324df25a61d722008256526911de8201b25b926391eeb202c25e8263d1e442174253127ae1ed621e225bf27671f352243261828c61f34228c264f28c51f85221627b1280820a42346289729b9202024e7287f2a082109243c29fc2acb20c324ef29d12b6e2123257c2a462c5e215c25bb2a742c2c216025e12a912cc2205f25e02a8d2c54204025ce2a7c2ca01f2125bb2a732c1f1ff724a02a6c2c931ee324952a602c511ed024882a572c111eb324762a4c2c131e9224502a3e2c0d1e7824362a2c2c341e5924082a172c501ef823c029e22b4b1e2a234e29542b001ee222dd28b52a341e63226d28232a0f1e1d220c289329001e9f212f270129b21d0d21832690281e1da92006263728a61c292078259a27261cca1f0425e326841b421f97246626e41ad31e4b24f825421a7c1e06249425a319511e9f2348256419211e1f23fa240919ac1d7a227f24a918231dd42102242318ce1c662175236f179f1c1e211a230117751ceb20cd229d164a1cd020a1225d16321cb32074221716e21b812034229915c41b662007226415951b3e20b8214315ae1b36207e2135155d1bb11f3c21e014cf1a261fda208214431ab91ea1200c14791ab81e86202f146b1aba1eb0202614861a421e51206413861a421e51206413000002144f190000000002144f19000055203f248825381d9f20ea247726b61d14212925a426471e62214a25e326a81e6e218d253c27b71ea621b3257127fc1eb121ab255d27091fbd21bb258827011f532233260d289e1f5323ff269b2869200223d1272229382058238328ea297b206524082aaf2b2721a225ae2bdf2c6d222a26622ca42d25228526a32c072e41219526b62c2b2e5b206e26a42c132e131f22267f2cf52df81d1b265f2cb52d5c1db6252f2c902dd41cae251e2c762d9f1c5e25fb2b672d8a1c7d25cd2b3c2dfe1c3825922b1e2d691d2825552bee2c2c1eb024012bb42cce1e56247c2a522c671f7d239429a22b1b1f0422ba28902a191eef2035272529141d912015265028d81cc020a925f127f61ca5207225d227a11c9720fa243b276e1c3d2080244326e91b2e1f17249c25961ae21eac235f25191a751e412318259d19301ede22d2242f19e91d82229624db18b91d3a2266249c18861d032233244618341db221e923e2170a1d692171237a17b91c1621f722db163b1c9f2058222416681b3020c5214215e61ad21f6b21ca14b01a951f3b21a414791a711f23216314561a401fff204b14101af51ebe20d613021ac11e9320c413dc19831e6b209213001a381e25209013d6190e1e31208a138519701def1f6d128519701def1f6d1232163f1dd91e658032163f1dd91e6580101f96221924971aaf207c24cf25571dd420c9244f26d01d1121ef2484261a1e2421ed247b26461e6f211c25af26b81e63213225c026a91e34210925b5265a1e58212325ea26851e7c2157252d27851e4f2255257527661fae21e9253f277b1e36210a261628311ea3231e29df2ab920af26202d602ed6230729612fde305f24cd297830ce31a5218c298530d831c81c2d2936306c31f215aa28d32f0a31c3887d283f2fb53028954e28c52e6130f294da279a2e533002889a27722e42304f166c27812e3930db1c0b27172ef22fc01f0826162de32ec3203a25022c532d0c211c24f729d92b5c2058229428332aef1ecc20e826e3283e1dcb20e7251a28291dd11f17255527051c061f8f249f26001b011f47244726c21ac51e1424ef25511a841eba238d25df19261e292327255819fa1de122e9240119d01d76229c24c7189f1d20225e247018671dd62128242e18131d7721b623da17ce1c2d2142234917971ce620e322d016691cb220872267164f1c7620292241161f1c3520d421da158d1bcf1f77213d155c1b961f4121fd14531b601f0d21da14361b331fe820c714581b1a1fd020bf14041bd31e98208914721a8f1e7e201014491a361e3420b813f919021e2220f5127d195e1dd11fde117d195e1dd11fde1100003517c918000000003517c9180000a81d9821e4220319152011246f25b91c9c206c24cd257a1dba208124df259e1ddd208e24f825c71ddf209a241726cb1df220a6242726cd1d2221b1243926da1d032185240f26b71d172173240726a41da72026247a25031d77204b23f324861cf71eb421fe23471a351c831f8321e614041bfa1da320d60f891aab1dcc20170b841a4b1e0321460f3c1ba31f9d21a811ab1c1121ee2265141c1f03243c25d3174522a6265927801bcc252c2b7c2bd41d892adc30c631b120f72bd3325b34d81dc62a453211349e1988293b3095315a16d426af2c732e511ad91e8029882ba518ba116d2524289e0dfc15c122c8252812311cd121d4240c182f1e04239b25f819321eee22a425e119491ee6223325de19f91d6b22db246319ff1d6422a6244f19371e6f22ab244e19411e4a228f243d19221e33227624f018071eeb213f24aa18ca1d9121d1237a181f1d3e216423c317961c04211f23cd16751cdc20e1229d16961cb920b5228316981c992065226016bc1c6f20332293167f1c3520cb211916bb1bb61f3a211e15961b551f0e210615b31b351fe7201915921b181fe6200315ea1a021fd1209414b21adc1eb4206f144c1aa31e87202b14551a721e68201814001a131e5620c013f018fe1c3f1f1f11f018fe1c3f1f1f110000f8132e1700000000f8132e1700009d1f1c237b24291c062020244725861c542026248325de1c61204224b525ed1c73203e24ad25ef1c76203324a225e01c772023248425cf1c7d20f3236925b01c8020d32358258f1c9120ac234b258d1ccd1f51227324471bbb1ddf20f123fc181a1d8220a92299184c1c4a2057225a181d1cd3208122a0184e1dcb218d234e1a131eb8225724381b271f9c23f024231ccf1f0b244525741c0b20232477257c1c0c20132465256c1c9f1fbd2322251a1cd41e1623b7243e1b8c1d13221e24e219491c242113237a18b01a2520a821c7162318281e8f20da136c148d1cbf1f440f0318ab1c51204f11a51a671ef52166147a1c74206b23c916381d732110247418ab1dba2139241b19d31dad21332410199f1da7212c24cc18891dae212b24a318981db221342498187c1da02122246b18731d85210b244e18571d6121d4232218181d1a217523b817d81ceb200b233017941cb920b922cb16891c9820792296165f1c6920362259163c1c4e20ff21e0152f1c2920d321ac15161c0320a2218a15b91bdb1f7b211d15691ba01f4f21e714751b851f3221ef14a21b641f1121ee147f1b241fe020b914ac1bf31ebe20d514611b901e7c208914ea1a281e2b203f144f1ad21d0620c013d81baa1d471fa213d81baa1d471fa21300000516991800000000051699180000ff1fb223cf240d1c2a201f246e256b1c3a2003244c256b1c2a20c62328255a1c3420b4231825531c2e20802300253c1c0c204523e924091ceb1f0b23cd24e61b4f1fb8229e240e1b651e31223a242c1a391e8b216b23e8192e1eb121ab23291a781e30221b24f71ab91ebf227424901b0c1f3b23c024051c671f95230425391c9f1fd9232825491ccd1f01244f25531cf41f11246625691cef1f0d246d25451ceb1f0e246d25441cbf1f042465251c1c7c1fe2235325f11b261f8a231925781ba81e0e23c024f51a201e7c225f244e1a541deb2108246619b71c35214523c7183d1c7b20972206188e1b1a206922b016f11af41f5822d0154c1b12206b22c315031c3e20a2223516461c6520cf225716701c8120e9227116a61c9a20f822c016cd1cb5200f23f816d31cbd200a230117ce1cc0200023f916b81cc020f422da16ac1cbf20e322c916941cb220c422a6167e1c962092226116641c74204e223c162d1c3f20fd21cc150c1c0320a0217d15bf1b991f522121157e1b471f1521d814241b001fe4209d14e51ad41ebe205814ae1aaf1e97203514881a931e7b201e14291a6a1e54209113f919471e3a205613ee19081e1b204913351ae11dda1f6d13071aa31dce1f3613481a5b1d851f1e13481a5b1d851f1e1300000000000000000000051699180000ff1fb223cf240d1c2a201f246e256b1c3a2003244c256b1c2a20c62328255a1c3420b4231825531c2e20802300253c1c0c204523e924091ceb1f0b23cd24e61b4f1fb8229e240e1b651e31223a242c1a391e8b216b23e8192e1eb121ab23291a781e30221b24f71ab91ebf227424901b0c1f3b23c024051c671f95230425391c9f1fd9232825491ccd1f01244f25531cf41f11246625691cef1f0d246d25451ceb1f0e246d25441cbf1f042465251c1c7c1fe2235325f11b261f8a231925781ba81e0e23c024f51a201e7c225f244e1a541deb2108246619b71c35214523c7183d1c7b20972206188e1b1a206922b016f11af41f5822d0154c1b12206b22c315031c3e20a2223516461c6520cf225716701c8120e9227116a61c9a20f822c016cd1cb5200f23f816d31cbd200a230117ce1cc0200023f916b81cc020f422da16ac1cbf20e322c916941cb220c422a6167e1c962092226116641c74204e223c162d1c3f20fd21cc150c1c0320a0217d15bf1b991f522121157e1b471f1521d814241b001fe4209d14e51ad41ebe205814ae1aaf1e97203514881a931e7b201e14291a6a1e54209113f919471e3a205613ee19081e1b204913351ae11dda1f6d13071aa31dce1f3613481a5b1d851f1e130000000000000000000000000000000077239b1d1c1e441bc228682290245d24992b98249d241727502da424f32521294a2eee245b26122add2e2d259226a02a2d2f6a25b326282b682f05263227252b9a2f9326fc279c2a55304b2838296d2aab30d528f129a02a2d31052e2c302f2b3b32e232e634532cc0303f29572c592bbb302725442d092c3a30b824232f362b892fc5235530502ae62ded23b83008296d2bdf2409319326282808264f317e23e223902548311b1f28209b231631fa180e1e3f221331bb14e81e67225d3185140e1eb92285312513c91ebe23c9319413b21e802306327a131c1e0a230a326e12431fea231c32a5136a157b22d1310c0a4618dc22d231dd0d991d472423320514091dda247f313b13aa1dd9254f306d1436216128052ee718e82158295e2c111b081da02536274e17f01afb21ff23b3159e1ce32139239617641c8721fb2236178a1b6521ee223116c71b5821de224316dd1b5021d62256168c1b2821bb22f615261b0121ac228815041bab2011226e15721a57206521e214da19002026215714c719f81f0f2132149419e11ffd20eb13a319bd1fe220d2136b196b1fa92086131f19ff1e56201b13b818911e04206712b3186a1eda1f3912d318511ed21f6312f518231e881f90126618ef1d8c1f8b11e8185d1de01e0612000000000000000077239b1d1c1e441b77239b1d1c1e441bc228682290245d24992b98249d241727502da424f32521294a2eee245b26122add2e2d259226a02a2d2f6a25b326282b682f05263227252b9a2f9326fc279c2a55304b2838296d2aab30d528f129a02a2d31052e2c302f2b3b32e232e634532cc0303f29572c592bbb302725442d092c3a30b824232f362b892fc5235530502ae62ded23b83008296d2bdf2409319326282808264f317e23e223902548311b1f28209b231631fa180e1e3f221331bb14e81e67225d3185140e1eb92285312513c91ebe23c9319413b21e802306327a131c1e0a230a326e12431fea231c32a5136a157b22d1310c0a4618dc22d231dd0d991d472423320514091dda247f313b13aa1dd9254f306d1436216128052ee718e82158295e2c111b081da02536274e17f01afb21ff23b3159e1ce32139239617641c8721fb2236178a1b6521ee223116c71b5821de224316dd1b5021d62256168c1b2821bb22f615261b0121ac228815041bab2011226e15721a57206521e214da19002026215714c719f81f0f2132149419e11ffd20eb13a319bd1fe220d2136b196b1fa92086131f19ff1e56201b13b818911e04206712b3186a1eda1f3912d318511ed21f6312f518231e881f90126618ef1d8c1f8b11e8185d1de01e0612e8185d1de01e0612691b93172e1a8f11691b93172e1a8f11d62642248e250923fb29502557260e263a2c182525264828762d0525c2258829862e9425d326822a4a2fda252c27622be32fd3263e28fd2b353047289729102c7a30cb28172a1b2ca130352ad92be72bfd30502de02e2e2c27312d2e1d30512ce530e22a612d692c96303428f52c352c05305426542ea22b9c2e8c2522302b2aa52ca825d43056284e296f26523109257d25a3267b3163219f2279269431131e571fdb246531ae19dd1d6c236331b515d51c07237a3165148c1c3023a23148148e1bba22b7311c13ce19d222d931e910f016a422e931c20c9a1af622eb31f3106b177b22e231530d1218e622f0319f0e821b4324f331c913ef1d7f24433195153c1d2325592f8412a31dd6250a2cc414111ecf25ec281d18b91eec2424276b19d71d2224c6251419b31cee22aa241618d41ca42271241f18d91c772247242318931c0322ec23aa17031c8f213e239716531b4e2102230416b11b4f21f82233169f1b2021a6220416321bce202b229115711a7a20c121e214411a4f207921a414081a1d203f217914da19f41ffe203f14c919d51fdc203314bc19921fbb201214a4195f1f9720d5137b19171f64206f134e19c71e3a2006133719641ee81fe712fd18271eb91f9a122419931d641ffc112419931d641ffc113e189f1c1a1dc40a3e189f1c1a1dc40af1235224c22567207a2768255c26ef23fd297625992673264d2c0a262b279028b22d1f268227f329de2ea9264e282d2b9e2f6b27b728d72b253052287d29442c7c300629752a662ca1302f2adf2b782ccb307f2bf32ca02cdc30c22b112db12cad30e32ad82c962c50304829b92c5e2c142f58289e2d2b2b5c2d1927412f5829522ba427bd304d273228c32758314024c02473279831bc2043232c27c131201f8c1e21258f31cc19d71ed524b1316719781da924bd310e182d1d8c24d7312f17981dc924fe319517e61d13252232a017d51dfd2434328917171ed8243d322118ff1c69243232ef16e51c562437324317401d74253932ca178a1d1c252531de17cd1cf624422ef816df1d8325cd2a73182d1f7e25b328c819001fc7241b27dd19841e4d242c269019711da1234a25bb18ab1d5a231425d618891d2b23e624b918fb1c91226c242c185b1cf821e62328173b1b8a218223d415391b50212323d115351b0b219e22b115e21ac8202d225315a21a9120e6210715c91a7520a62108156b1a44207021c314271a172037217714e619d11fef203014c719831fb9201a1465192b1f84207c135019031f652034134219fa1e6620f6127c190f1f702070137219ff1e5e206213a319431e22209012a319431e22209012300af31b121c2201300af31b121c2201e321b1243e26471f6924a82500272c215a27c925402740247b29d225402714263f2cb7262628a4289c2d3e2794280a2ac62e1a281029132bcd2f71288a29142c4e30f828682a7f2c81308829182bb52c9e30e129d52be62c9630d92a8b2cdd2c6730c129d42bbe2cb12f2429062c242cf82db328662c562a442ccc281a2e75289a296c282430c425f1266f282c310823a9242f28cc31b820ce2308281d32e81f6f21cf261a326b1df32099265532ef1c6721ef267232631d4d202f266932381c1b1f78256f32dc1a381f70259732f71a6f20a425a332351c0420b3259c32a01b5c1ec025b632f01902203026ad327b1b0a204a264a32691b85203326d630131cab1ee3255a2d031a801f8e259729a41af51f73257628eb1a901f2e25db27941ab61ff9244e27b41a911e43240d269b19961d95235f25c418cf1c1d23ea240718c11c9d227124f717db1c49222e24fa17511ce921f923f516e01b942187235816e71b582114233e16871b09219722d215021bd02042226c15381bb8200d227815ff1a9720e1213115d81a7920b021f714811a53207c21b914311a192032216514cb19b01fd2200514b5195e1f9c20bd138219321f88207813da19201f6e20bf138519121f82207c13061a5b1e12206613061a5b1e12206613b0092d1c3d1d7f01b0092d1c3d1d7f016c212b25af265b1ea322f72567272820c22484260628ce219226c1264628cf232d29732781281226a62bdc27cf285c28152d33283b29a3292b2e6f28cc29d62a1b2fd8282d2ae12bb72f4f29cb2a472c19309d29732b8b2c1e30f529bc2b902c442f5d290c2b072cc02d6529d92b602a422cd528cb2ba7280d2ada28832c84263328c9285e2e852485258c289c30f221842405289231dd20b5244c28583211211a23e3278a32891f0e224d27e1326c1e02230228f432531fe5211627f332281e9f20b4261633c11cb520c8264533c41c4c21cf2631335e1d2121d9262e331e1d3320bb2635331f1cdd20cf261533c61c9920bf265332831c921f672526304e1b911daa252f2c5f196220e1251b29291c14204c252b28be1bf91f0b25ca27711bdf1fca243d27391be91e47243e263a1a531efd23ab259a19d31d8f233e2510198a1d38230725ba18421dd522ae245218ff1c462239240718b21ccc21c0236a17671c71215723d016311c3421ef223816dc1bfa209a22d5158e1bd42057227b15f81aa3201c220f15db1a7320cb21de14a01a3420602199143e1a022024215514041aab1fee201414f819891fcc20e713dc19551fa820c313cc192b1f7920ad139d19f51e7a209c13c4197d1e5c208712c4197d1e5c20871299140e1d2e1e8c0899140e1d2e1e8c086121212578260d1ecc22532613284f20932465279b2895217a255327b82898227826c427bc28b0236928092801292c25532a33281a2936272a2c7228d029c028012d10299d2ac929872d3429b82a642a392e1729aa2a192bce2d77291d2b9f2aea2c1e291c2b9b294b2b0c29952b1a283829b128052bdf251028f9288e2b81246c260729ea2c1f230f255128da2e9c213024b127e730a520792483284732f5203624b4280d33ac204e2381283133fb1f352360284f33e01f8e2181275833121e74215d278b33df1deb218627ad33471e14228f278f335a1e972172278f33c01d6920ec269033781ce920b6265133fa1c3e206f260a323b1c5220f0250d2f3d1c2e1f3726ee2aee1ae1201626df28a11c88208d254a283b1cdf1f3725ff27391b421fed246e278b1a591f9f24c226821abf1f86247226bc1a311eb52375254919f61cbb22b6242818991c702279248d17371c31224e24cb164c1c06221c24c916301cc221cd237b16fc1b6d214a230d16631b1a21c6227a15411bd82060226115f41a962008220c15d71a7220c821f714971a54209521ae146d1a45207e218f144e1a2d20592160145a1a152035214e14561aea1f06214b14571aae1fc1204d14e119381fb420c9136c1ae41e9f20af136c1ae41e9f20af13ba13e91c2b1ecf08ba13e91c2b1ecf087f218725d0265b1e4823db2674289e20f9239e27cb28fe203a247127cc283a215e247c27b22854216725f62703298222e02638285f29082477287728e3293c25ab29f128972aa626302ac928302a4227b22ae928702ada27ed2a9b28292a1028892946284b2a7d262828ec281f2bbe242927f628302b1524b026df28482b8623ff252e29102cbf227924cd28fb2c0821ae231928392f4220412442285331b8205624c128ea32cf20222344288833e91fd6235f28b23358206622d527ab33fe1e2b222d28ea33a51e852233281134eb1ec921c02704340b1e3a226d27f433681ead20d1260034d01c3c21992779334d1d3e207b265c313b1ca7208525232da41c6020e425f129391c8020f625d528451cd42096256328821c1c201f25ff278a1b921fb7244f27d31a951f5d249d26b71a171f3a242b26291a7e1e3724eb258a19371e092498253419621d21230a2582181a1d842296241c18cc1c25223a24bb177e1ce4210624f416571cb521b52394161b1c802154233916061c50210023f815b01b0a21af229415651bba2048225e15db1a6f20ce21de14a61a3c2083219d14411a0c2038213d142b1ad61f0a212f14111a971fe8200414191a4e1fbe202214a4190d1faf2078137a19ef1d222034127a19ef1d2220341200001e1c5e1d000000001e1c5e1d00006121b82507274f1eee2213278f2881200c24d927e72832214024ce27072964215924de27fb287121ab2419281929b3210f2532283b291722c5254e287a29f3223f26632896296d23b2265c28c529f5231328f228842ad82459283329fa2a2b2510280529fc2ac324f42630295e2b0524bf2516293b2b8e223125d328ed2ad721c124a628302b5821c724d828f12b5f2193246228fa2c242112242428a32f942036249d280032ac205c235a289a330520a4236c2821342d2084220b282834051f7622e8272934db1e9c2257284234e81e342223283c347b1ef520542751341a1dda200f283e34ea1c5b209d271a33581c19208b261730051c2d2145264e2bff1c1620e225e828a11b5e20e2259628141c0e21bf255628a31c2821f1248527a61cca1faf240427061bf21e9224b026261add1e7a247426f819ab1e2624ec25b119781e64234b255119031eba22b224f018611d522268245518c21c06222c2483177f1cc0210324f5166f1ca021a923b8165f1c6f2158237c16501c4b2100234216031c0121a222b2159f1bc62055224a15251b8920f721d814981a4620952179141a1a08203c210a14f319c51f0321b013fa19891fde20ba13321a621fc7201a140e1a6f1fe0203414291a641e1020fb12291a641e1020fb120000981d5c1f00000000981d5c1f00005921032653272f1e0223202799288e20e723c127f5280321282403282f2934219c2413284b29b321f92427286a291222fe246228ab2903224125da28052a3f22b425f528482ac822ea250f295e2a07236b2611295b2a8723dd260d29b62af02347263329db2a432398251129e02a61223b25ab28f92af8211f25f528072bc321d524cf288d2b6f21d22404296e2b6c21f724a4287c2b95211f2441281d2da3205a2392281c30142080247e282b32eb2084232428af331b206e2235283734d21e7a2225285834df1ef621052873343a1ecc21192868340e1e3621d4275f34721db6212b281e34e01d9e21da27cb31b11de5201028ca2de21cc120f3251629aa1c2b2028262929171c7620e725b5283c1c4b20b5256d28011cfa1f5a251f28521bea1f4725cd27011bcc1f13256427c81ab41fc2240027931a361f4e2444260a1a9e1e1924d8257019cd1dd0238725ad18721d682335254d18741d0223d62438182a1d8a228724d317081d232226247717b61ca2219c23d6168b1c4b211a2398162f1c0521b122f115c91bc9205f228715261b99202222f614cc1a6f20d621b814611a432096215314641a2f2071212114a71ad71f09213114b01a1a1f96201b14791c4f1f54201115101ae41d1e204912101ae41d1e204912561f7b22f923251a561f7b22f923251ab81fce237124d91968231727552894200024b327db2823211d24f92724293821672430285c29952193246828b729bb21e324a128132a0b222425a928352a4622fd24ab281a2a0222f524a028152ae5215f25db28672a6222ba250729a52ab722b925e328912a9e221826c3287e2af4225125c228dc2afb21ec25db28e22aa922ff24dc28682b8a21012524298f2b8c213625cd28742bc72116244f28132b7720c6235128cd2c2f208623e628fe2f0d2062222b28ec31c51ed3223f28a333211f7f23a7286134b61f59235a288734711fab23c0276e34a51f2d22ca273e340f1e62235727ac323e1f91208027792f7b1c7a20d125972a641c4f204826fe28281c62200e26bd283b1c37201626c628001ce62026269b28a61c9e20af2542284f1c6820a72522280b1c16206225d1275e1ba61fd7240127c51af91e4a242c260f1a9a1efd23b925a219321eb62370253119e41d61232b25d618ae1d1a23e0249418581dc022a5243818fa1c64225a248b179a1c09221024d4166e1cb1219b236e16351c57212923f9151a1c2421cd22d215a81bde2060225115791ba1201c2211154b1b5f20cc21d414c11b4c2091210315e71b0c2042211b157b1b771fc420d5149a1a1f1f9e205f145b1a791e6b2033135b1a791e6b2033130000611d351f00000000611d351f0000b821af25fb266e1e0d2309278c288720a1237c27be28f620112407281a294a213e242c28522972216824562890299721b5246828c029d121f224b628232a09223225e328862a422258250229ad2a5a224225f728ab2a2b221c25f728b92ae921fc24ed28b92ac42117250529e02aba21302516291b2bd6210625fb280e2ba621dd24f528e32a6521d6240629452b5d217724d128672be1202c248b28072b8f20ba239b282d2b39201d237f28052ca91fe022b928832e671fac23b928043112204424d228e2326420bc23a628be33d61fc12205286233bc1e5022b92749324b1eeb20a7271f30e71c8a208626142c741c4d212627ba291e1dd02082260d29a51c9e2010269a28621c34226e26c528cb1dcd203a26c0287b1ca020b32552283e1c01203825c627381b9c1ff8242e27dc1a2e1fae24af263e1aab1e42240726cc19441e1624c0255819f91d012496250019d31dc4236f25b118831d60231a255a180e1dab228524d217b71c0b2220242517791cdb21fd23a2168a1cbe21c9239716661c912183233f161a1c3921f522b215481bb9203022ef14a31a3220912165148e1af41f3e213c14991ae71f20214314781acd1f0f211414991ac01fee2028149b1abf1ff7204514191b6f1ff9203f14191b6f1ff9203f140000e519021c00000000e519021c000074219925e926651e7423be2672289c20cc238e27b42801211b24f927072935213c24132830294d2168243f286d298521a4247528c029aa21db24b528192aec21fb24e0285d2a00222225e028842a1a223825dc28882a1e223125e528a22aec212525e628b72ac92167252529122bfd217c2523291a2bff210425d728b82a7b21e224c728c42a4221e024e428fe2a4021a124e428202bfc209524eb28562bdc200324d9284a2b41206b239328cb2adf1f05246d280c2b44201a245628762c49200924a4288c2e2720902250280730c11e0d218127d32f1e1dc8207a27332ed81cf4202a27f12bf01c0121a126a629fd1c2b21a6262529121d8922e026f8284f1ec820b0261829761ce520ff256b287d1c182117267328971cec20e12549285b1c4d20872502289d1bff1f3e258827f41a441fd124f426341aa51e4e2433269119261e0d24cf250d19b11da8238725ad184e1d262318254618401dbc22b22425183c1d522267240d183e1d02222224c717001dbe21d1236c17cf1c7f217123fb16811c4721212365162e1c0b21d022cd15ad1bd42071225415131b8f200322e914d51a5b20bb21a114f51a41208a219b14c51a20205f217c14b41ae71f0f2155144b1a9e1ff12011142e1b471f02212e142e1b471f02212e140000a21a4d1c00000000a21a4d1c0000df2060258826b61d3a226b2644280c2035236a27b028be20d8230128192909213024292853294f2175245b289429a821a8248a28dc29c221d524bd282e2ae6210225e4286e2a08220625f528952a0d22ef24ff28aa2ac921e224fe28be2a9221e424f128bc2a8021ef24f128c42a782101250229da2a782114250c29f32a8c2100250d29172b6321da241029352b2621ad240c29472bf620792409295b2bad203924ce280f2b5820fd238c28f42a1c2010245f28d42a1e2026249528e42a3420f0238528522bea1f4423aa28122c3e1fb5224c28c22b951ef9210528082bdd1d5222b727bb291a1e34230e28c729f41ea721cf27a929751da322b82618294d1e1c216b26c928c41cbd207d26ca28581c49212226ae28c31cfd20622506286b1cef20052562275e1c3d20d324f2265f1b581fa9249f26451ac91e7d246226ae19951e3f24062683195f1ecd236b253c19161e2f230725e718d61dd922c7249c18d31d88228b248218801d392246241518001dd921f1236c17971c8c217523aa16591c4b2114232c16171c1021ba22cf158c1bc22056223c15ed1a7520ee21b2149d1a342096216114d51a1d2067216a141d1b12204b2198142a1be81f1321a114a11a8e1ff4204914a81aee1ee3208a13a81aee1ee3208a130000f618811b00000000f618811b0000b42002253d26831d8422fa2691282f2021235827a22894209b23aa27e528d320e023f3271c29fe201b242c286d29242143246928cb2945218524a528162a7121a624c628482a8721ab24e0286e2a7921bc240029aa2a7a21cc241429e42a7921d8242129082b7221d02425291f2b5621ce2437292c2b2c21c4242f29272b0e21c4243b292d2be72093241029112ba3205924f128ff2a56204324e628fd2a2e203424da28fa2a0e201424d028fe2adf1ff023a228aa2aaa1fcf234028262a891fd422ce27e729971e96233828342a331f582350282a2af81eb3223328f929401e1a232828b629a01e6222e2274929f41d7f21ec2602290a1dbd21012705292c1da822a126e728001efa216426a028631d0b216a26ab28771c7a200a267428c81b55208d250c28891b84202d253427b51bf31fc624c626a81ac61e5b24302691195f1e1624c0253c19001e98234225d518aa1df722c6247918791d95227c243c18751d392246242318651df3211524d517091d9421be2327179e1c442143238e16271ce720ac22c415541b8a202222f814fe1a5a20cc21be14a71a31208a2183148a1a132065215514a61aff1f43214b14a91ad71f21213314c81a8d1fe72046148d1a661fcd202114b21a881e63202813b21a881e632028130000f818091b00000000f818091b0000102101256326041ee3221227a7285e205e23ce27e828ca206323d2270a29bf20af2301282829e020da2320285a29eb201e2446288b29062140246528b8291f218724a828082a6121b024e828662a7f21c9241929b22a7621be242529d92a4221c7243c29052b2421d0244c29252b1b21d4245c29422bf720cf2463294b2be020c8245929422bb120af244629362b982085242b29232b5c2061240b290d2b282044240029fe2a0d202824e928ea2ae41fd523c728c62a6f1f8a23a428af2a091f23237b28612aa91e1b235c28352aa11ecf2238281d2a5b1eee2215280d2a771e38220a28e129b41dfa21d327b6297b1dc3214d277e29491ddc2169273629601d2e222d272e29ab1db5219726d0283c1d5d21ad26d428d51cae2009265728251c46207425bc276e1b42202b254027671b0220ee24ed26d81ab81f8d246e26771a281f2924d125e1194f1ea1234f251519ed1d25230025ae18ab1dc522ac246318491d6d2268240118f61c0a2220245c17aa1cac21be23ec168c1c6c21562399165f1c3f210d233516411c0b21b922e815081cca2068227715a71b7820102230158a1b31209a21fe14c11bf71f372103156d1b841f0c21ae14411b3b1fbc209314451ac51e9320e713121a1b1e4a20af12121a1b1e4a20af123111561d271f77053111561d271f77058e21c32541270b1f21226f261b28df1f5e22fa2679282320fa226f27cf287b206c23d7271829b520e8232e287429f42034245b28b729322170249a28062a58218324bf283e2a4a218f24e728772a3321b1241129ba2a4621c1243129ef2a3221d7244c29172b2221ed246b293f2b1121e12470295d2bf220db247c29712bd820e2247d29782bb720bf246c296c2b6e20aa2457295d2b472082243b294c2b102051241729342bc81f1c24f2280c2b681fd323cd28d22a0e1f8423ad28a62aa81e4d239128842a761e092372286b2a3a1eec225f283c2a201ee9225c28182a1e1e82223f28052ade1d9c224928f629111e6b222528da29e31df5211028ae29771d2c2159273e29bf1ce120a626d328661cef2067269d28721ca720c9252728321c412056259d27891b0c200f2536272a1be61fd224c526de1a871f7f2454266c1a0d1f3424f425e8194e1eb12377252d19cf1d3b232125ae18aa1ddf22d22479184f1d7c2294241b18101d05222e24ac177d1c7b219423a9163d1c2a21232327160e1ced20cc22e315ea1bc92083229e15cb1bad2045226815b71b872000225b15d11b6020c6214d15e01b392089211715d31b12205c210e15921bbb1f1021a614151b2f1fd92076146a1a5e1e742072126a1a5e1e742072120000af1a711c00000000af1a711c00008e21c7254c27c81ee12241260928252048220926ec27de1fc222b7265d283b2035237027d12883208e230e284a29ac20eb236628c229d5205424cd283e2a3721aa241629a32a9e21b7243e29db2a8721bf2465291c2b6921e0248f295f2b5421ea24a4297c2b0f21ff24b129892be620f924b029912ba420f824b5299f2b6620e224b429aa2b2b20da24ae29bc2b1020c524a029ba2baf1fb0248529a42b8d1f7f246129792bf51e542438294d2b8f1e17240c29232b331ef623fb28112be81de323f528082bfa1da823e428002bcd1d6223cb28e22ad51d3a23b128b82af01de72282286b2ae51dac225b28292acd1d67222b28d929ab1d2522b02761298a1d96211f27fa28091d0221a926a928831caf203c266f284c1c9120d3251a281e1c602073259027bf1b2e2014250727451b0e20c9248f26ec1a961f73241e265a1aca1e1a24b4259419101e8c234725fb18721dfe22e3244d18231d7d228924f317eb1c02222f247517a41c7d219e23e316561c192115234b162a1cc9207f22c715c41b6920f1214415671b2a20b121e6140e1bf41f70218f14d81abc1f50216c14941aa01f36212514791a951f202114148a1a9d1f21210414bf1a981fff202514691a7d1f06210a14911ab11e9020d012911ab11e9020d0124e0ee81c221eb9034e0ee81c221eb903ee2030258326f01d9d21dc258a27081f8721a9257427ec1ee9210d260428671f2f22c9267128a51fb9228d27ec2828205a23092845297d20f3236228ba29ca203c24af282e2a082184244629ec2a4c21a624c729902b3a210025282a062c4e211725442a232cea200f254a2a292c7a201425382a252c18200e252f2a1e2ca91fe224022a092c171fd224ec29fd2bb11ec224d129e12b9a1e9b24b629bd2b641e652487298b2bf61d34246129662bb31d11244b29502b631d0a2445294c2b381de4233829442b191dac232629362bf51c7a230b29102bf31c3723ea28cb2a011d2123b828812a851dee2290284a2ab21d82226c28282ac31d55224328de29cf1dcf21cf2769296c1d762130270629191def209a26ad289b1c722005265628261c2e208925db27ab1bd61f0e252427101b751fb0248f267c1a1c1f4424df25f419c01ecf2366258b196a1e382306252b190e1ec222b124c818e91d59225e247a18bb1df62118244018751da521af23ec17ef1c4021192301178d1cd5208d225116231c7e202122be156a1b3920b32126150a1b14207421c614e31ae41f4a218f14bd1aa11f20215b14e41a851fff205714011b671fef206a14161b3f1fc5205a14081b261fe6206f149f1ab21ebc20dd129f1ab21ebc20dd1200006518d81b000000006518d81b0000ef207724ad25a11dfc201e258626011e6a215425fd26b11e7e21ab257f27ca1ee2212326fd27461f5f2292264a28e11fc222f02685281f200c238927e9284d20f9236c28c829cd2098246829042b6321b124032adf2b46212025bf2a662c46219b252c2baf2c0e218d25382bbd2c622095253a2bbb2c921f7a25032ba02cba1e4125c42a772cf31dff24842a542c801dbf24512a3a2c3a1da9243c2a322cfb1c9124352a2c2ce21c89242c2a282cb31c7724202a212cc61c8324152a1a2cd21c7024082a122cbf1c4c24ed29072cde1c2124da29fe2bf01c1524c429e62b241d06248c29942b951dad234329212bb21d5223d3288a2ae61dec224a28f029041ef021a2275229721dfc20ef26cd28a71cb32050265c28631c7c20b325c9272f1c272020250d279e1bbc1fa2245a26d91a231f3e24c025171a7e1ee12360255519221e51231a25f018cd1db422aa249518681d262234242f18081dac21cb23a017d61c4c2161232c17a81c0f210c239d16781cf120d82258164b1cc920a022f615051c982052229415d21b742010224d15911b4a20ca2121154b1b0c207721d414121bad1f2a219214dd1a5b1fe8205314841a101fc4201b14831af61e9d201a14611a121fd3201f14281a711e6120c712281a711e6120c712000044130c180000000044130c18000059204b247b254e1def204025cc261a1e5a217f250e279e1ecc219c254e27fc1ee021df258e27131ffa210526d027331f1c2227260a28431f74227f264228911f03248427e728a420b1247628f52946215924b129622be42076258f2bc02c0e22bb26942ce12d2d221a27f92c842e9620f526cf2c502ee21d4b26862c032e851cee25392c952d421c8b25e42b372de61a38257d2b092d291b2f25302bd12cc81a0225f02ab12c3c1aed24d12a9d2cd0199c24a12aa02cda189924be2aaa2c8c18ae24dd2abe2ca118c624072bd02c5519bc24152bcb2c7f1aef24242bc32c7d1ce724f32a9d2c561e8b24772a4d2c2c1fc2239629772bde1e05228528122ae81d06211f27e628031d8e200a264628781cd3207d25b627811c7520fc24d526161c8a1f4e24ea25ad1a391f08248425481ae51e99233e25c619981e3023fd246b195d1ed422be242019081e70228024aa18d01d332255246818771deb211d240e18381d9e21bd239317ca1c3b212b23cc16571cc1207b220616cf1b5e20f7214b150b1b02208a21c714be1abb1f4f217614891a971f37213914561a611f29211814fe19391ffe208d13f319001fbe204f13061abd1e8a206613041a601e45206413da19561e4d2030134d19841dab1f54114d19841dab1f54114f16cd1d2f1f67804f16cd1d2f1f67804020e823d624c81c1021db243a26c61d2c21fd247b26e61d76211425a926681e97212525be268e1eaf213825da26c11e99213f25f026be1e59210625ee265b1e26211f252d27341ecf22c5252f27c41f6d21d324b7265c1ea722cc28cc290f206327742dac2e09242b2aa4300132fd22eb29ee3028324a157a28352f9330249b6426b32c562ebf979c249a2a8e2cb584ec23d229bc2b9312202468294e2b9516e4236329792b4a152d24a129bc2b991576241a2a1c2c43128624902a602c9e845225d62b142d138c1c26bf2c472e7591f926672d552f570d5127aa2d902fb41b61262d2dd62ed61f3c25252c782d7820c123c429db2b7b1f5b228b2713293d1e8420e22512286e1c101fad249f26d11aa11f68246e263e1bf41e5a242b26611a041f2724c625361ab91ea6235625bd193e1e45231a2521190f1ece22c224e218b81d602270248418681d07223a242f18491db121f2230118111d642182238417d01c10211423fd16921ccf20ae227d166d1c9020472225162e1c4720ef21ab15c11b052095212215751bc81f5521ef14631b961f2621c6142a1b611ffd208314ff1a4d1fec204c14c91a211fc9202b147f1ad31ea520fb13291a641e72205f13b919521e5a20aa1249196f1d831f7b1149196f1d831f7b11000098158f180000000098158f180000721f2f238524301b74204c24ca25271dca208e24e5258a1dfb20a6240826ae1d2321bc242926dc1d2721cd244f26e01d2d21c9243f26d21d3c21d0244326ce1d5921a4242726ac1da72025247d25b71cd41f59223d240e1b4f1c611f4c216e152318961cbc1fff0e0218391d3c20850e7d1d1121dc2285152b208023e9242f1a91206424c925a61bca20c8248426161c2d211f250c27801cfe218d25e2271e1d93228b25ec27b71de5200e267c28191cc8219c27e329ef1c2722c428772b0e1da324882bcb2ce11ec627df2d732f6720b6291c305031781f682ac630d931b31c8529632f9c3032213124be2bf02c4a1f6615ad25102861117d1aee224b252816ef1ee4226625401a0c1dc921df247818b31d5d220a25dd18f81d8922e0240019481e6422ae2429194b1e482293241219551e4b229124e618541e16227124cb18281ed421382492187f1d9521ed231418df1c3a2169231217a41c08211c2397169f1cd020d7226a16b01c9d2081225b16af1c6f203d223416781c1e20b921c615e31b911f2e21f814db1b401f0a21f314d91b281fef20f214d21b0d1fea20ed146a1b131fdd20ac14171bf31ebd207814aa1ace1e9c203314421a831e7420e313151a591e47207913bb19261df51e3711bb19261df51e37110000d614011800000000d61401180000fc1f6223aa243c1c3e202f247a25a31c94205824ab25ee1cb3206e24d325fc1cbf206924ca25f61cba206a24d225dd1ca7204e24b625b71cc02008246625961ce220362313252b1c0420d4210b24581a501d702045221c184d1c802065221518271dac216223e019b51e5b23b824f91b6e209724e025321d4d212225a526f71d62214f251127e21d64215b253b27b81d6621542543278e1d532152255127651d43214c254a27401d2c213a253227141d07211c250d27da1cf520f324ca26b51cab20b32468265b1c3b204b24b925041c8c1ede22af24371a331bb5205b229a16d016391d16206111cd15941a831e630e1619b31c6a20c910631c2e208122f8148c1d662102246218ba1dbc213224cc18af1da5213b24c218c91dd9214b24a918b71dd32145248318981dc12142245418911dae212f243818701d8221f22309181a1d292172236817d11cf1200c23fe16861cb920b9226c16841c942075226916791c6c20382235165d1c4d20ff21c7154c1c3120db21b115311c0c20a8216b15051c00208c213215a31bcc1f6a21d0147c1ba61f4921b714851b741f2821bc147d1b3a1ff42099146e1b0d1fc7207214391ba21e81205214cd1a341e372011145e1a0a1e30209e13271bd81d891f3113271bd81d891f31130000ba145f1800000000ba145f1800003820ea230325121c9e208924de25c01c9e203a249725c01c80201c2467258f1c75200b244625721c4d20ba232225381c32206323fd240d1cac1fbd229c24481b811e0e222324471ab81db921aa2385194a1e302209245f1a951ec4227124171b381fb5231125001ced1f5b24b925651c6320a7242d26dd1cb020bb2469261f1dcf20d0247a261a1dce20ca248326f21cc220c3247f26d21cbf20b9248426a81ca320ab2478268d1c8a209d246d26621c6a2081244826421c48205a240a26101c16202c24bd25e31bea1ffe237525a31b811f90232b253e1bd61e0e23b724b41ad81d1c221924bc19821cee201b2348186a1b2f208122af162f1b0c205122e715691b122057226115e81b312081225c15631c5b20ac22cf15b21c7a20cd223716f71ca020f522bb16231db920ff22f7160d1dbd2000230217e91ccb200223d116cc1ccd20f722a816ad1cc620dd227d16911ca320a7225716681c7f2064221d162f1c4c201622ac15211c1a20c5215615031cce1f7e210e15c11b7e1f4221e3147a1b411f16219714371b111fee206f140c1bed1ed3203714d01ad71ec12014144d1aa81e9a208a132c1a881e71203013241a331e3820f512321ae31dec1f0513391ace1dd71f3f13b21a2c1d091ff112b21a2c1d091ff11200000000000000000000ba145f1800003820ea230325121c9e208924de25c01c9e203a249725c01c80201c2467258f1c75200b244625721c4d20ba232225381c32206323fd240d1cac1fbd229c24481b811e0e222324471ab81db921aa2385194a1e302209245f1a951ec4227124171b381fb5231125001ced1f5b24b925651c6320a7242d26dd1cb020bb2469261f1dcf20d0247a261a1dce20ca248326f21cc220c3247f26d21cbf20b9248426a81ca320ab2478268d1c8a209d246d26621c6a2081244826421c48205a240a26101c16202c24bd25e31bea1ffe237525a31b811f90232b253e1bd61e0e23b724b41ad81d1c221924bc19821cee201b2348186a1b2f208122af162f1b0c205122e715691b122057226115e81b312081225c15631c5b20ac22cf15b21c7a20cd223716f71ca020f522bb16231db920ff22f7160d1dbd2000230217e91ccb200223d116cc1ccd20f722a816ad1cc620dd227d16911ca320a7225716681c7f2064221d162f1c4c201622ac15211c1a20c5215615031cce1f7e210e15c11b7e1f4221e3147a1b411f16219714371b111fee206f140c1bed1ed3203714d01ad71ec12014144d1aa81e9a208a132c1a881e71203013241a331e3820f512321ae31dec1f0513391ace1dd71f3f13b21a2c1d091ff1120000000000000000000000000000000046247d1c061c051c192a86231b25ea249b2c3f259a251428fe2ddb244b267f29ed2e6625de265a2a4f2fce250b27792ada2fb726bf27f42a26305b270528d12a583055272e28082aab3015271f28542a9230c4254a27332a89318d2c202e542b0433ae32d2344f2c5e31c329d42c9e2b4131f723642d262cc32ffe21ac2e43291b30ba201d30f629da2f3c21e430532a622d4a2430319828b6299b247030e0247d21872373309e1b0000862044300000000029203e30000048131a2036307c036417091e353002089d19151b6e30ce0ad21ae01cbf30a9095e1c181cdb303e0b581d0b1de2301e0d1a191b23fe30120c191673237a312f0c651f1b246d324016e91dd524d4319015871e88269c30c416e01fca27df2d7618a922c529ff2cf81b2f201728a929ac19611bef234d25b515f41c1e226823fb177a1caf2135231217311cb5215a239f16091c8a213a233f16d21b632100230d16ab1b4521ec22cf15831b2921c822b2156f1be0205a228315ce1a8a20cd21f0144a1a2b2062217714481a152032215c14001a00201c211114101ae31f04211c1488199b1fd12053135c19231f6f20ed12f218a01e10206412da187f1eef1f1d12fa18691eeb1f4612e618231e9c1f04126918171e8e1f46110619be1def1e0312000000000000000046247d1c061c051c46247d1c061c051c192a86231b25ea249b2c3f259a251428fe2ddb244b267f29ed2e6625de265a2a4f2fce250b27792ada2fb726bf27f42a26305b270528d12a583055272e28082aab3015271f28542a9230c4254a27332a89318d2c202e542b0433ae32d2344f2c5e31c329d42c9e2b4131f723642d262cc32ffe21ac2e43291b30ba201d30f629da2f3c21e430532a622d4a2430319828b6299b247030e0247d21872373309e1b0000862044300000000029203e30000048131a2036307c036417091e353002089d19151b6e30ce0ad21ae01cbf30a9095e1c181cdb303e0b581d0b1de2301e0d1a191b23fe30120c191673237a312f0c651f1b246d324016e91dd524d4319015871e88269c30c416e01fca27df2d7618a922c529ff2cf81b2f201728a929ac19611bef234d25b515f41c1e226823fb177a1caf2135231217311cb5215a239f16091c8a213a233f16d21b632100230d16ab1b4521ec22cf15831b2921c822b2156f1be0205a228315ce1a8a20cd21f0144a1a2b2062217714481a152032215c14001a00201c211114101ae31f04211c1488199b1fd12053135c19231f6f20ed12f218a01e10206412da187f1eef1f1d12fa18691eeb1f4612e618231e9c1f04126918171e8e1f46110619be1def1e03120619be1def1e0312381d81125219530e381d81125219530e9e288a242f262a24f72be225fd266f273b2de624dd25f728922e4826bd273d2a8b2f53277c280a2b12308f279828782b4d30172810297a2b753059289b29772bac303c284b29612bc6308f29ef2a8a2b2e31c92c122ed92b4931322e1a30ac2b1d31562bcc2d332cf5301428e72c3b2cb230d125272e152c273088240c305b2bb92e6c25d030f329642cac2630310728c628ef264e31af2450234a254b31e51d941e63220931d4102c1c11201e317507f11c1e203c31c803731d9c2052316401421d85216031b6061f1c8a217b31790c341c80208331d4083d1e6321b431900f4f1c5021da31a311351c4822ed313b144f1c15241e329b14701e8124a13116177f1ea9251630fb17621e1e26742cd717ea1e102657292318c51f6325ad270519b31ea4244c26f818a11dd32317255b18461dfa229824fe17c31de32281247518801d76223a244118871cd2219e230117ef1b7c2130232416081c5f21fd221c16e81b3a21cc22fd15af1b02217b22b315201bc1201e222c15de1a8120c621e0146f1a4d208e219214421a2220432158141e1a04200d213e14eb19cd1fea200314b319911fc9208c1392194c1f8b2033135719fa1e4c20bb123919961e0d206a12ef18761ee81f60121419db1d561fc0111419db1d561fc011da19ee18bd19bf00da19ee18bd19bf00c825cc2445267d2142291e26282729250a2c1d2662270728a52da026e22772290e2f4f278628b22a0a30a627cf28ab2b65303d2843291a2cab30c128d129352cd7302d29672a5d2ce830fa29c32b6c2c0d31572bad2c792c3031f32b192d982c3031292bf22cad2c24316929f12ccc2c5630b827722d2f2c9f2f5e26962f5b2b9c2d802709316b296f2acd27ae31502628277027bc31e822b9236e26c131da1d301d292456316115fd1d3c249b310416b21e7324bc318416781dba23c531ac154e1e8d23f13123167b1e03241232ed16be1c80230532c414b81b4b22193220140b1c59233d327314121bbf233e327514651ee6258232d918471fa2259c31a219981d79251f2f2618bc1e1126752bff1836201e262e29621ae61f6225e1271c1aaa1eb224a4264319aa1d062481259018601ec9234e252319331e9b232725fe18581dde22ab243818c21c4f2236248317091cd821d1233f16d61b8c2156231116531b2121b7228c15081bdb2047223815b01a9c20f221db14da1a7a20b221fa148e1a48207a21a7146d1a2920472175141a1af01f05212314f319ac1fcc2009147f19521f9a2047136719421f7820fc1266193c1f7b20cd128719351f8220f7122c19401f8c20af129519ea1e8c2080129519ea1e8c208012000031196019000000003119601900001323e3248c26d81f2626f425582786222d29ea2521277e250a2c6926dc272828d92d18272e28d529722f83278b284e2b4230452834292e2ca630d028122a8f2cfc305229b92ae42c0d31c529472be02c3431fb29e22b062d52313f2bd32c4e2d4431882a872c552d0d31ae298a2c1e2d66300629e02c752ce32ef628a02ef92a9b2c8a288330972823291829a7311f25f125d8283432d521f6246c287332ca207522ed2663323c1e9b215526a432801df221ed26cf32d51dc820fb25e232b11c61208b2510333a1c4c20b2252333141cc120ed250d33701c7820f9250633191c711fec251033d31aa6207426fb32441cec1fe026ce32441bee20ed268131711c8d20ba26602eea1b5d201526362a721b5f20f525e628531b1c20ad253b28c11a1d2049259a27c21aea1e7e245626ae19351e1f24bb2500195b1d892328255118ee1cd0228e24f117111d7f2251240018a31c45222e242c17131cd721c7234e16f11b872138230416751b2b21b8228815e01ae5206a221915221bcc2032222d15191bb52007222715031b9820d621fb14ad1a71209d21a3145d1a362057216b14dc19ea1ffb20f213c419991fc2207313af197b1fb0205813ee19461f842079135a191b1f7b20bf12cb19a41e2820ee12cb19a41e2820ee1200007b1a001b000000007b1a001b0000dc22ac253727d31ff4233526a7279920ae26e726402883233a2940278028cc252c2c3728ef288f28ec2d71281c29612a5c2f9f28a729932b3430ef284d2a642cba30ed28142af02cf6301f29802a2f2d4f316729422ba22d8d31172a112ce32d3531bd298d2b9b2d9a305229f42bf52c7f2fc928012cf42b282d0b29122d6429a62ade28112fd826b92748293831f2232025b728273246214525d828c4328121ae233a28ea3203208522cb273b33d01e5e2332285033b31f17224e274f33451e50211d277833771d4e21f3268b335f1d5b220e277433711eee211a276b33e91df1200a277a33d91c9b211e276b33691d2121ab272233f31cad2085261e315d1c161f2726102d9d1a772030269029191cb220b9256e28281c432063250928691b2720f7245b27171bb41f86248326741a0a1f4024fd25c8197f1ee12364253c19f81d4e231325b7188f1dfb22cb246418141d6b226024b317b71cff2100242517621c9f2195238016401c6b2135232c16f81b2621d722a915bd1bfa208d227f15571bc520472218154d1b8f20ed21f3140b1b46208021c714e21a19203d21aa14891adf1f022139145a1abe1fe9201a14031a8e1fcf209313be194e1f95203c136e19271f7b20d812b819b71e29207a12b819b71e29207a12a1083a1bad1b2f00a1083a1bad1b2f006222bf252f27471f2123e82668285a200225c427d828df21c326d527f728b623c7283f280b2974255a2b5828292914285d2db1288929dd29052f1629462aac2b63306129ce2acb2c993080290c2b192dcd305129182b532dce308e29572b542d6c303629362be72c862f98291b2c1d2c952d3f29ae2b032a112b06293a2c9c27c2284f296b2d0c257626e328d42fdb22ef24382897313c216b25ce28e232bf217a24d7286233c020e72381286e3331200024a028a1332e20bc22e727be33091f8a220528ef33ba1eb922d8270234d01e63230428e8335e1fac22ed27e3338c1e2c216027e533fe1ce6213527c233b21d28215a271333e51c1b21d1269130c31cbf1fc326462c1b1b102166263c29901c1321de256e287e1c5820902520288d1ba41f1f25ac27851a911fc824f926571a0620b224ab269d1ab91e1b24c6256b195c1d3723fd245118e71cbb22a324be17571c66227224b7167c1c41223d24cc16621cf52107248016371c972184231e16e51b3e21fd229b15881beb20812258152a1b9f201822f814131b7a20d521e914dd1a5d20a721a714a71a4d208d2183146b1a3420682140145b1a1c203f211b14311af91f13210014fe19a81fc7208d1399194e1fa3203c13461a0d1f60204e13461a0d1f60204e1300001d1c741c000000001d1c741c000057222d269c276f1fa5237027c528ba2053241d28222947218a24c627fd286521012504280329de21f627442832299b24642aa028ac2930277d2c32299f2a0d29ae2db729e92a632a9d2eed281b2a702b742fef28042b312c802f7b295f2b472c302e54295f2bf62ad12c3829812b5729a32a3f29262c4127b5281c29922b24255b279129582ceb2384255229b92dda21912477285b30d820a82458281b32f0208024a6286133c7200b243428b2334a204c249928e2338f2043233928fc33961f3d238f282b34721f122371283b34461fff2223282834f91e8c2326282734871fa32145273034701db92296271e347d1e83211e27f5323b1d7222ac25ff2e041efe202326c42a941c76216526f428ec1c1721f2258628821c542073251628871b1a200325a927001b1220ad24fa26d21a901f72247c26371ae71e5324162690199c1e2124b4253819fe1d8c234e25bb18831d0523e12444183f1d8d227724f317d91c2b2239243117b61cf7210524d6164e1ca7218f2340161a1c70213523d215021c3821eb22b115e11bf5208b227815371b9c200f220115f31a5820a821b614601a1b2053213814421ae91f18210b14291abe1ffa20f513021a751fcb20c41394195e1fb3200813c2198c1e2a202712c2198c1e2a2027120000b01ab01b00000000b01ab01b000048225926d627771f98238f27cb28d1206d24302833298b2180241f283e297e215924352843293c211c25a028e929fd21d226bc28322ae323af28b628312a6b25ef291729222ac426282b0529622a2328472c8e29662bf3282a2c8929792bd128712bf928dc2a3e28df29f428092bb2260c284b29892b8d2407264e29862b962285250c29762bf22199254e297d2cf021bd247b28f72d072175245a28ad30a820a524cb28e832da2006246a280734342098246d283b34ba20e52361284b34102093237e285b34ac1f5d23c4287834761f48232e286734431f742295276e34541e5c22c5277234241eee21dd274334a11dd621b9272532721d672279262e2ddf1dfd20272642297f1c3e213326f728a41ce02011269b283d1c1521432502286b1c1320f5248e27f51a781fcd240c27411a7e1fcd24f426271a091f91249526ab19951e1e24e0253319d41d4a2327259b18281db7229d24fb17b91c34223e242817441ce1211b245416501cc121dd2342164d1c8d217f231b16421c59211c23e915f21b1121b2228315a61bd4205b223015391b97200c22c814ce1a6020bc216514551a23206221fb13331a02202b21d013251ad31f0521be134c1a9c1fe220f0130f1a931fe8200314cf19dd1e64209412cf19dd1e642094120000a71b941c00000000a71b941c00004222a8260e28561f6323ce270829902028244228612912217224532895295b21cc245d28a929c7212a256328a4290e227525d1281a2a502298253b29b42a792249276729f12a37246c285a29c32a1e2588289429752b3d256f28af29bb2b21250e289829c32ba0240b276d29712bec23fc2614292d2bbe23cc25e1292b2c5622b2256029112c392249256129152cb1210c25f0283e2c5b214e2581285d2ea1218324a0285831b72080247f288333a12052244f28453472204523662875345d1f4024792889343d20b2235628a9348c1f6b244228a3345620cb220d28a6348e1e7b220228a334271eb52135271f346b1d82221628e930131e68214826252bf51ca1205b2655293f1c05213f26c328861c67200b269328cc1b7620b6254528c11b3a206e250428361b0b203525a227c51a0e2008256527a91a781f9324ab26041acc1e562443265e192f1e2924f625c918bc1dc9237d2558189a1d4e2304253e18471db522a724d517371d45223f246717db1cc221bc23be169b1c5e212e236416471c1621bd22f015021cd92069226f155d1bab203322fe14fc1a7a20e521a014971a4d20a2214214a61a372082211514c51a02203c210d14e31a801fe1201f14151c981fb320e214481a8d1eb120b712481a8d1eb120b71200002520682000000000252068200000e52064259726a61c0b24e127fc28ef204724272852295c217024412880298f21ab248228c129c521fc24c428292a01225825fb28992a452286250829ab2a632253250029722a28228425ff28802a61226b266b29142b52239b26aa296d2b892393268229512b6523e226f828422ba223e8250529362b7422cb257d29952b3d2279259329032cce21bc259829102c15228625f1288d2bc6215e248d28db2b9020b624d828992ed9200624f128da3114203f2366281034571f90239228a7348a1f32239a28c134f11e6a239828e734091f9e23722807353b1f1e2390280c35a51e9b224728d8340f1ea1221e283933151e16221826012e951d9d20a126d1293b1c5b204b262729da1b92204626e1281e1cd5203c26a928471ce420e3256128551cb520cc254028041c5e20a7251628501b242054259e27ef1aa81f9e249e262b1a541f2624f425c919b21eea2398252f19241e7e234c25a718e41d3423fd245f18811ded22c52415182c1d9f2281245817cc1c49223c24a816b31cf121f1238616651c85216723f615521c4421fc22dc150c1cf0208b225c15f41bb72045222315a61b7820e821d214c61b57209f21c714a11b31206421b014231be71f002162145b1a9c1fdb200114411a3d1fe7204913411a3d1fe72049130000fa1bed1c00000000fa1bed1c000089228126b127c51f7c23ba27f428b0201d2405281b2927216d244e2874298b2187247f28b829ab21ca24ad28022ad8213225c628492a2d227c2525298d2a6e2298254129ea2a7922b12550290c2b7e22a6255029152b722292254329282b432284253a29312b1d22a7255429562b2d22b22574298f2b222293255929892bea215e2543296c2b9c2151254f29b32b8f21e7242029072c2021c1241729952be4206524ca28c82b85202c24a7280e2e3a207024ee28a9317f202124be2945341e2036242929003522204724722825352120f822e82715359e1e92228a270735221e012236286e349a1de120ff2600317a1cc4206327bd2b5f1c17212026ee28961c49207b261b29ba1bcc21cf263929221da9205826e928211c1b2113268d28701c562088251e28671bf11f5e25bb27c81aba1f1a254827591a1c1f84246126d719651e2624e42527190e1e0b24af25c818f21dcc237b259918a51d682331254718471ddf22b424d517051d4e2247244a17d11c01221b24d616ca1cdb21e723a616b31cae21a8236016761c5e212a23e815071c0621aa2234154b1baf204322b614ec1a5a20d6215c14ce1a1c206b212e14a11a03202e211214911ad91ff020db13891aeb1f0a213914db1ad11f6b213614db1ad11f6b2136140000cf1a441b00000000cf1a441b00002b225426cc276e1fcc235827c828c22020240f280f292a215f24272848295621962452288c299921cc249728e929c7210225dd28572af32129252229aa2a0d225b254529e92a312280253629e02a46227f253329d22a2e229d252e29fd2a3922ab253329202b1b2219268029a02b792232269b29c62b7a22cc256e29922b0e2290254e29852bba2164253d29982b8c2113254a29ba2b3921d1243129d12bf5203924fc28c32b472078241b29f22b8720d52314296c2dcf1f9f231629d7307a1f3b242b298b331520d4230229bf346e1f6923e228d634eb1e1223c1285e34991e29221c28c631a61db520d527382d511c78210927a629041d2b225a279a29761d7a21e3263c29c31c03211a269b28471cd9207426c428231c4f212c269728721c9820d12534288c1b35209225fb27ea1ad11f302581274d1a031f96249d26a619551e3e2416260019de1df723b1258a18711d60233b251f185b1de422d024f217471d7d228624aa17541d2922422491171d1de8210c241917ed1c9f21ae23ae169c1c5b214a234016681c2121f122d615041ce5209b2252157d1baa204022d614111b7920f7219014101b5820b8217314dc1a3b207a213714b91a0f2022212114831af31f16213514211baf1f1121d913211baf1f1121d91300003f1b001c000000003f1b001c0000b32117267827f51ecd22e42670284220e823f627f72804212b2434284e2938216e245e2890297a21c724ac28f329d521f924df284c2afd212f250c29992a142269253f29e32a422267254e29092b292254255029182bff214f255c29332bcd213f2547292e2b912145254a293e2b81213f254b29442b7b2157255429642b7f2132254a296a2b582110254629862b2121f0244b29992b0021c7244329b62bc3206324ee28772b4e202524eb28442b1120e324db28262bb8207224e928152c38203e24b8285e2eeb1f2c23da28d930941e5c2214282031bc1dd6204f271b30481cbf207a27b42c471cbb216f27182a2a1dda219427ea29461d6b2231277729ae1d64213d273129b01cc52111274b29ed1c7d214026ee28981c4321bb252e28531cba215625df279d1c8c2022255227541be91fea24ec263f1a771fa9249026e519151f62243a269819b41e1424aa253019641e79233425d818081e0623ef247918f51dbf22b2245318ab1d792270240618221d0f2223244a17ac1cba21c0237c166f1c6b2147232716371c2621dd22b715e01bce206e2237155a1b86201122c014e51a4920b62174140a1b302084217014291b24206e216614101bfa1f232156143b1a941fe420da13941a121fbd20d212941a121fbd20d21200001a1a951a000000001a1a951a00007721c6252f27c21ee7226a27d1284420cb23e527f728d1200f240d282a2905213f2442287e2940216a248828de2963219524c228372a7221ce24fe28862a8f21fc242d29c72aaf213b255529112be22166257229512bfc214f257e29742bb721402584298a2b922127258929932b632127259229952b4d2136258f299b2b32211e258229902b0521e3245529762bb8209f242b29532b6320812412293a2b34205f24f9282c2b03202d24dd28492b871f6d24ca28632bfa1fec239528ce2a241f96236b28d62ab81ee923cd28152ce11e2223f228572c161e3023b728f52b231eef2236281f2aeb1dc9221228b729cb1d2f2150276a29821c8f2120276b29bf1c0523d3262629fd1df921ae26ee28001d3321d8260b295b1ce4208326c728191caf20f3255628b21b88209225e627721b3c202b254927d31a531fad249626c819bd1e682431265219371e2624ca25cf18d01d9f234a256818831d1123e42417185f1da4229b24cc175e1d51225a249e17151de32112240e17b31c7b21942360163a1c1621fb229915a01bc62074220d156f1b93201f22ec140d1b6420cf218e14dc1a3d2093215214db1a1e206b213614da1a0c2038213514d41ac21ff4201614c61aaf1ff3202914891a2b1fc3203213891a2b1fc320321300000f1ae31a000000000f1ae31a00002d22bb252127571f46239427ef287020e02309281829de20c02300281f29ba20042430286729e62036246f28bd2912217524a3280e2a3a219c24e2285c2a5521e0243229c62a7b210d256829122b8521032576293b2b5221f42476294c2b1921f62484296a2b072109259229862bf02012259c299d2be52019259a29a02bd62008258f29962bb220ea247029762b8220b4244129402b3d20922425292c2b1e20662415291f2bca1f4424ff28112b8d1f2024df28f02a4e1f2924de280a2b3c1f0224af28cb2af81ef52383287e2acb1e672396280a2b511e442474284a2a251f862375283f2a4e1e6922df2772295e1def2173276b29f81c53228d278e294c1db9221f276229861d2b22dc26f128111dc82141271029c01c38217b26a6284a1cad20c3251528891b992060258b27681b5d201a253627e41a1e20bd24a326801a8b1f5d240826f419d71e062496254b19401e7e233825bc18f11d1123e4248118851db0229d241818351d4b2251249017d61cde210424de16a91c942190237716681c582131231d16451c1821d422cb15141cd52083226615c11b8a20242222157b1b3e20ab21d514781b10204821b514411bac1f0e217514ee1a441fc72025141c1ae71e93204f13f719471e1d20ff11f719471e1d20ff1100007f1c501e000000007f1c501e0000c1211426aa27a81e5c22db267328dd1fe5225c27b72851203b23c72701298720a62329285e29aa2026247d28d12910218124ac28152a5b21b624e728682a7221da241129b02a6121f3244229f62a542100256529382b3a2101258029622b1121132597298b2b0f212025b429ae2bf3202225b329b62bca202a25b629b92bbc202b25af29af2ba8200a259a299e2b6220db247a29812b2520a9246029742bce1f72244129692b721f3d242329542bf71e0d24f8280e2ba81ef723d528d72a8b1e9623b428a92a1d1e4e239828b32ac51d00236e28882a6b1d56236928592aad1dcc225c28472a5e1d45224928222a0d1d30221a28ee29161d40222728be293c1d4d2179276329861c4521d226fd286a1c8b21de26ee28a51c192153268f28301c9820b82514288c1b652056257d27391b16200925fc26951aae1fb3248a26301a291f6d243626c519951e1624c4253319f91d98235b259f18b31d1d23fb2452185e1dae22b2241118211d382254247217961ca821e123a816601c52215a233616241c0c21ed22e115181ce920aa22ae150f1cce2074228115f31ba3202a224315f71b7420e3212615051c46209d21f014011c1e206421ca14dd1bce1f17219414561b761fe5204514721ab61e71201112721ab61e7120111200006815921900000000681592190000622248261728611fd022a82651281a20882295263f2809202b232f27b1285120b1230c28442992202b246d28cf29e3207924ca28452a2c21c3243029bf2a5b2106257a29252b92210525a8296a2b68211d25e029c62b43212c25fc29002c14213925132a102cca204725172a132cad2046250b2a132c6b203825fd290c2c4a201725eb29032c05201525da29fd2b0320f924bb29db2b891fdf249829b62b3a1fa12466297b2bb81e712436294a2b4f1e49241529262bf21d1f24ff28132b971dff23f128fc2a6c1de123e728052b571d9323d528f42a221d9b23ce28e92a471dfa228a287f2af41cd3226a28552a101d9f225328462a051d86221728dc29271dcf2193276029c61c6321302714296d1c0a21a026b628241cda2029265e28101cb620eb251a28be1b8f208a25b4277e1b5f203d2549270b1b2120da24c026851a491f6b243226c019781e0524ac250119c41d622336255f18711dd122c12409182b1d3e2256248117001dc321eb231917bf1c63216d2396167a1c0521c022ee151f1c93201e227515a71b5020d021f2142f1b2220a5218714d61a0a2080214f14a51af01f68211514af1adf1f48210014a41ad21f3721bc13c01aad1f03210a144d1a961ffb208a137f1a0b1f912087127f1a0b1f912087120000f3185b1c00000000f3185b1c000012217525c626de1d0b2245261028791fe8211426eb274d1f5a229f265d28a61fdc228927ec2822206b23382882296820f8237e28e829ac204924e428752ae320c0248529472b44210a251b2a012c442137256b2a392c08215025882a4c2c9e203e25712a412c0e203825622a382c931f2925382a1f2c291f1325172a0d2ce21ef424f729f92bb81ed824dd29e02bb91eca24c929c72bcc1e9c24ab29a82b651e60247229682b131e372440293b2bb71d1d242d292c2b511d1d242b29302b2f1d12242729362bde1c01242729322b891ce1231229212b561c8623fb28e92a241c6623e528b02a301c3c23ca28872a8f1c1223b7287c2a221d0e239828482a921d65224b28ea29411dd721f6277829e41c4a211427f4286e1cd620482682280d1c9120e4252128a61b342068258c270a1bd91f06250027731a851f9f2467262e1a321f3924dd25cc19cd1ebc235f255f19811e2a23f024ee18621eac229324bc183f1e312245246f18fe1dcb21f42310186c1d58214e235b17f91ce920c82296168b1c9d205f220416121c71200b226415b01b4d20cf21f7145f1b3220ac21a514261b07206e216414301be01f3c214d14331bbd1f21214e14281b881feb202b141f1b8f1f03216014711afa1eb1204512711afa1eb12045120000ef149c1900000000ef149c1900004e21b3241226381e3e213925d1263a1eb221ba256827f41e022268262c28241f6e22ed268328a41fe4227827e4281820682303284c296720f8238d28f029ac20bf249b29442b562154259c2a4f2c9121c825602bc52c4d21f625bb2b0c2d9d20ee25b42b092daa1fae25792be22c6e1e82251d2bb32ce31d6425aa2a752c971d1125482a322c6b1daa24ea29f52b221d7924b829c72bec1c7f24b229c62b181d8224b429d22bf61c6b24aa29c62b011d5d249a29b32bcd1c492496299e2bb81c26248229892b6f1c05247729802b0a1c092479298f2bda1b08248729a32bd81b32249a29ae2b371c2e249929b32b991c1b2475297d2b0a1def232829112ba21dec22a8285f2a771da1210a289e29b71c4a210b27e928991c232150265d28781cbb20c225d3271d1c4a201625e926531bb61f84241a26561af21e1f2494257d19741ea3234425fe181a1e0623e2249f18a81d662260243218591dd921fb23c417191d762194233d17e61c33213923cc16ac1c0c21fe225616721cda20c222e215201cac2081227615e01b8420392237158e1b5b20ec210015401b19209221af14e41ac31f3f215714a61a6d1ffe2015147d1a471fde20c4137c1a2a1fb920f813531a501fed20f913e019ca1e85207712e019ca1e8520771200003715e617000000003715e6170000df207a24b2257a1d47217a253027461e8b21c5256327961eec21f325b227f11e2f2239260828411f69227e2643286a1fd022b4267528c51faa238a27f3284f20d324f328572a45213d25852a302c8f212126702cbe2dd1211e27432dd12ed32094274b2df42ee41ead26a92c222e941c1426cb2b1f2dc01c4925c42a842c781ce024372a212c471cbb24b929ae2b741c5c2480296e2b3e1c40245a293e2b001c01243529262b491b87233829162b9a1a0b243629f12a941ac7233e29222bd519ec235029372b6f19092480297a2b82183b24c829ed2bd5178124422a3e2c2b18bc24ac2a762ce519c524cc2a8e2c561cad24c92a7a2ce51d4824452a272ca01e6c234f291d2b741e32225228f929631d02220c27da28391d5d21df250c28a91c2b20d124ad261e1bd61f5824e225901a661f05248325f619fd1e84233b258519c61e1a23e6243d19591eae22a324b618081e642279246118a01d212244241518511ddb2110248c17d01c7d219723ae16621c0321e422ce15071c94203b2255155c1b3020c221c114081b03207f218b14d41acb1f5f214e14b91aa41f4c212114641a6e1f2821a513341a2e1fe1203a131b1ae81ea5201c130b1a831e65200913b6197b1e532004130b19c61d941f11110b19c61d941f1111260f361d821ecd80260f361d821ecd80b02049243725321d2d2101257e26d21d65211b25b126e61db8213b25df266e1ee3215f25fb26b71ed72152251227c11ef32161255327f91ebc213b256327a21eb822822541278f1fbf223e265827ce1f1f25812baf2cad21bd2a1d312132a223082b44318e326311f727ee2d9b2f1e930f246d2a752c7a167d227928622a1c1a982134273329951b04235b272429181d08231d28a529fe1c552305286329341dde2264271329a81c8f22f826a728221cb7224e270429201cb522d1274c29871aa5224228c0295818ad22da288c2ac0150224f429142ca111f724e52b472db4916d26de2c812e1a90c2274a2d0f2f2d1b6126f12c8b2ed61f1a25322bf42c3120f8249b28622a6620242144266028cc1c3120e924ed26b01b711f8b246726b61a921f6c24fe25951a561f0e248025061a9f1e992353255519721e222304251719071e9a229f24aa18ba1d2822542457189c1dd7210c2412186c1d8b21ae23b317261d3e214d232517c51cf620e7227716931cb62080220e16561c74202022be150f1c3420cb213e15d01b0c208621ec14a21bcf1f4e21b014801ba61f29219c14031b6a1f08213214bf1a441fef20db13761a011fc22087131e1aa31e9e202013d5199e1e8320cb122019a81d5d1f51112019a81d5d1f5111000058163e180000000058163e1800003b20142403255a1cf220bb2422267b1d1321c8242726a11d2b21d8244526bb1d4121e5245626be1d5221f1247026bb1d4621d5246026ad1d6621d8244726611d34211d248a25db1c281f96219423da183c195a1d961f97105911de1b941e3409331b87208922a71471204524e225ba1b2322bb25d427a11d48220f263c28aa1d43223e2662288b1d3a2252266b28831d42224b265728bd1d62222b264328da1d4c22c125f627ad1d7f2205264c28c01d3122b02567287b1dfe2036252a28571c7a1fd7242627801a471c3b244d274d17221d5b2622292318de22f82a5a2c1b1c7628262edc2f691cb62a13314a32471b0d29ba2fcd303522401fdd29712bff1a911dae24df26ee18d81ee1224b25bc19281e7b2205250f19731ed8222b2532196a1e8922ff2410197b1e7422b8240419651e7022a924d918511e3222872496182c1e0f2261246218bc1dd4212d2412182f1d7a21c3235c17e41c3c215c23ca16ce1cfa2006235c16ca1cb2209d223016ae1c7c204b22e6156c1c2720c3216f15141cb11f442103150c1c571f1621d8140c1c351ff720d8140f1c191ff020db14ba1b0c1fdd209f145a1bf71ec3204814d11ad91ea320f0136a1a9a1e7820ad133a1a8e1e672073138f19af1d741f3b118f19af1d741f3b1100003f14b117000000003f14b117000018209f23cb24471c972046248125a61cb4206924c625c31cca208424ef25c71cd0207d24e625b91cbf206924d025951ca72038249525451ca12070231525c11bcd1f7d210a246919f41c0d20fb21aa17da1c1b21b922c218261fa123c824141c9a20d2243b26401d1f212c25e126831d8e2167253927a11dbc2177257127a11dc42180259727911dcf219a25b527831db6219c25bd27541d96219025bc27371d7b218525ac27071d72216e259227e91c4f2144256c27b31c5d213c255f27a91c28211a252d27521cff20ed24f3261b1c9f20a6248b26981b55204724f1251f1b521e5f225d2431199419641ebb20eb137914d419b21d7f0c5b15b41a991eb00b391bac1ea0210713431dff2083237817a41d922129245d18dd1de52151248a18af1de1214f244e189e1dda214d242b18ab1dd6214d241d18a01dae211724fc17541d4a2186236517fa1c02211923e816a51cc920cc224d16a71ca32087222916981c762045221516871c50200222d9156d1c3b20dd2194154e1c1520a9216d151f1c01208b211015d41bdb1f6d21cf14971bb41f4b21a9149f1b8a1f33218f14871b3e1ffe208114481b101fcc203d14081bae1e87201814ac1a571e46208f133e1a291e322045132d1ac71da01f35122d1ac71da01f35120000f713f41700000000f713f41700006e2003240425101c8e20d3243e268b1cc2206624cb25ac1c9c2039248625731c812011244925461c4420a3230b25d31bd91f1823bc24331be11e262219246b1acd1d9b2199238119521ea02257244e1a0f1f9223ff24431b1d204724c0254c1cc920e624a326ec1c0b2153254a271b1d3f217e25aa27511d46217b25bc27421d48216c259d272f1d4e2153256f27091d43212e253b27d31c22210e251527a01c0121ec24f1265a1ce120d224ce263e1cbc20b02498260b1c92208c246a26cd1b6b206a2435268a1b4a2049240426531b42202e24d825451b34200f24ae252c1bf81fa72338250e1b071fa1228324561a591d68219523e718c91b63208b22c416441b06200c22a0159b1b28205c2228151b1c362074222c15931c5c20a0229e15ec1c8420ca2234162f1d9f20e922b216fc1cae20f5227116d71cc52000236916d41ccd20fd226416c11ccd20ef224b16ab1cad20bc2209167e1c8d208222ce153e1c5d203b225815241c2e20ee2138150b1c0020a921f714d31bba1f7121ae149c1b881f48218d14881b551f1e2163147d1b3c1f09215c144c1b201ffd202214b91ae71ecb209d13931ab31e98203c136f1a571e55201513341ade1d1020a112181ad21dc41fb6121a1b161d6e1e3c121a1b161d6e1e3c1200000000000000000000f713f41700006e2003240425101c8e20d3243e268b1cc2206624cb25ac1c9c2039248625731c812011244925461c4420a3230b25d31bd91f1823bc24331be11e262219246b1acd1d9b2199238119521ea02257244e1a0f1f9223ff24431b1d204724c0254c1cc920e624a326ec1c0b2153254a271b1d3f217e25aa27511d46217b25bc27421d48216c259d272f1d4e2153256f27091d43212e253b27d31c22210e251527a01c0121ec24f1265a1ce120d224ce263e1cbc20b02498260b1c92208c246a26cd1b6b206a2435268a1b4a2049240426531b42202e24d825451b34200f24ae252c1bf81fa72338250e1b071fa1228324561a591d68219523e718c91b63208b22c416441b06200c22a0159b1b28205c2228151b1c362074222c15931c5c20a0229e15ec1c8420ca2234162f1d9f20e922b216fc1cae20f5227116d71cc52000236916d41ccd20fd226416c11ccd20ef224b16ab1cad20bc2209167e1c8d208222ce153e1c5d203b225815241c2e20ee2138150b1c0020a921f714d31bba1f7121ae149c1b881f48218d14881b551f1e2163147d1b3c1f09215c144c1b201ffd202214b91ae71ecb209d13931ab31e98203c136f1a571e55201513341ade1d1020a112181ad21dc41fb6121a1b161d6e1e3c12000000000000000000000000000000000526271e3a1f2321562b28246d260626552dbb25532677287b2e1325ae26a229532f0026a827232af92f86272d284b2a3c30c42743286b2a6f305a270928032aa630fe26a827dc29c630892587262b2ac730e424d7252d2a9731042bc62cde2aa432ee310c34192b0931162cdf2eb4299230bc254c2d72285e2c961e362d2e1ca12e4b20f92e0826ac30aa23fa30a22a6f2ff4244931df29ff2b5325a22c2a25ec22f51f73264d09d01c751cd5272590e2227221c428ee950624d323cf2964957424a52299296695d5242e232729a0941d252324de288c9596244223a329fa94cd2522253b2cc697a12510237f2cac943a226f22a8308e16bd201d2217322818e41e6024e7315e171a204627bd30c718971f39280b2ea9185d202e29a22ca319612063272029141a2f1df923c225db17f51c8d221f24ac17d51bde214c23f015751cf5215f239d16a01c96213723dd16701c6c21f2229616c91b3d21d022a615c11b2f21c022a1154d1be62089222f15f91aac201b22d6149f1a6720b9217d14a11a43207e216314a11a332067214914a11a222046212e14231afb1f1a21bc13ce198f1fb92021131c19c81e30204712e7189a1e1220de11ff18871e0920d111ec18481ec51f93118e183d1ed11fde10dc18e81d5b1ff81100000000000000000526271e3a1f23210526271e3a1f2321562b28246d260626552dbb25532677287b2e1325ae26a229532f0026a827232af92f86272d284b2a3c30c42743286b2a6f305a270928032aa630fe26a827dc29c630892587262b2ac730e424d7252d2a9731042bc62cde2aa432ee310c34192b0931162cdf2eb4299230bc254c2d72285e2c961e362d2e1ca12e4b20f92e0826ac30aa23fa30a22a6f2ff4244931df29ff2b5325a22c2a25ec22f51f73264d09d01c751cd5272590e2227221c428ee950624d323cf2964957424a52299296695d5242e232729a0941d252324de288c9596244223a329fa94cd2522253b2cc697a12510237f2cac943a226f22a8308e16bd201d2217322818e41e6024e7315e171a204627bd30c718971f39280b2ea9185d202e29a22ca319612063272029141a2f1df923c225db17f51c8d221f24ac17d51bde214c23f015751cf5215f239d16a01c96213723dd16701c6c21f2229616c91b3d21d022a615c11b2f21c022a1154d1be62089222f15f91aac201b22d6149f1a6720b9217d14a11a43207e216314a11a332067214914a11a222046212e14231afb1f1a21bc13ce198f1fb92021131c19c81e30204712e7189a1e1220de11ff18871e0920d111ec18481ec51f93118e183d1ed11fde10dc18e81d5b1ff811dc18e81d5b1ff8118d206815201c1e178d206815201c1e17b829c9245a26f824cb2c0f263e272b28262e452562268a298c2fb327b928af2a25303e282629352b4f300e280429152b6f30af27be28b82a91303c277128c72aaf30c6264a28802ad7309028ea292f2b2a31fa2b242d7f2b5d31e52dc82f462b6631e02bff2d442c9d30e426502c8d2a3b30da21c52cbd29df300624f72f002c40303126f4301f2b862e63277b31ac29792a4626b93087253a20fd2013308d8bc01ee32061301b930221a321ab3098958023a9219f30fb958d249a21c030d79794248d21e230b399b52429220b31759a37243a21ff30fa9899232d223031b399ef227b21ed30318e771fe3212e321c18801d362432327617771e1d25d1319718511fe6267230e519ae1ee126d22cf518461f202681295a189d1f5825b127cc189c1eb42471269618a41df3234a251818061d01239e244b17761db1225c24c117de1d90223f244218fa1c0222c4233a173f1ca0215b232916341c76211f231a16bb1b3721e6229c15881b0d219e225815341be0205622ff14111bb1200d22ca14f71a8c20e821b914e01a6420a2218d14941a392055215b14381a0a2012210414da19be1fe3206013ae19761fb120fb1276192a1f742088124d19d51e3f202d12d818911e1a20cc11d518c01d421fdb10d518c01d421fdb10d31c081b9d1c6311d31c081b9d1c6311492782258c27eb22dc2aa326b8272f26322dd6262328c428f02e73278828252a1c3036283829252b73304c287329bd2ba630542859290b2cc4304e285e29112ce0307928bc29152ce730fc28772a2f2c2531a42a5b2c642c39316b2b9b2c752c2f31792a992c822c2831a628412c522c0830a526f42b3d2ac8300227632f3c2caa2fb5272c31462b342d6328ef31c628ee297428fc31f724a1225b241531d119841c34230c31e60c701c68235131d10c3920a723953195100a208322b431e5109e20e221c431a90f28216a22eb319811db1f0c22f631c310631e8f22fb31ee0e571d92221d324210ea1cdd2373321815221e7c26b6328d18b81fa126fb31191ae71d5126c62f9218071f6326c52b701949202d266d295b1ae71fa0254128dd19961ed72411271819c41d1724ba258d18ca1d9c2337257a18ab1d8923192563183e1d0423c3240e18211dae227324c6175b1c1e2218249916251cc0219c232616641b4a21ff227b15191bfd2080220a15931aac201c22aa14a91a7e20c5219f148d1a4f208c217114861a35205b2152144a1a14202f2110144a1a032010211014b719b01fda203413a6197c1fab20f012b719751fa020d612b319621f9420a412f918441fa2201c127019e51e782028127019e51e78202812ef117919cc185b04ef117919cc185b043a240d25a126b02026286626b32701245b2bd526ec271927962d9f27812820297d2f0f28da28fd2a773047285329192cd0307d2876297e2c1031ce281a2ab92c3f312229912ae52c53317e29102bf82c7f314b2a342c382daf31b92a772c652da231032a662c872daa316f29a22ca52d7131fc28282d412da8302229012f7e2ced2ec628c030762a252c7129f331de276928402986323024e925802808338521652265274633121ef221e0264d33d51db8225c275a33b31ea0216226a433b31d1221d22617340e1d6420bc261c344f1c39216926ac330a1d822159268a33231dc51f55268033211b6920cd263333f31b13205527f032581b55219727d931b91c6b202e270c2f8a1b1d205426b52ae41a642041263429361b1620d8256628951afa1f6125d4274d1abf1ea5249d263819121e3624ec25b218831da92346252d18c61cce2298243c17f01c95225b247b17b71c6b224324ff16671c18220f248816221cae2181230016dc1b4d21fb229415201b0521ac22f214561bec20652217156d1bdb2036220915431bb220f921ec14d81a7420a9218714821a382055214f14021af91f0f21c413de19b91fe1203513e619ab1fd3200f13001a781f9620fd1247190b1f822025129219b71e54207d129219b71e54207d1200004f1ad119000000004f1ad11900005223eb259a275a20eb24b52618286021ba2859277428f024ac2bbf27d528c627ee2d6a283529022ae42f8c287929de2ba130a828da299e2c1b311e29a82a032d6a315529912a662d9331c729592b8f2dcc31f229e12bf72ded315e2a482c312ef331eb294c2c372eee3167292e2c332e85313b29132cae2d2f3073297c2d3d2c822d4929a92f7e290a2ad1298b310526c7265a297932c222f72521291133f2214824cc289d334520262353289a333e1ffd236f28ac33f71f7622bb279a33711ebc21a127cd33b71d83216827f7337f1d20237527c633fe1ec8228227a8338c1e56216b27bb33101d93215a279b33341d432116287033d31c93219e27b231061da11f8126c72dc11a0b201e26ee29e61a8820e225c428981b522095253f28f61a4a200d258f27c71ae41f8e249f261b1af41e4d24092645199c1ef523722503194a1e73232025aa18d31d3923e8245218501db7229424b617e51c4c223a241b17691cda21f62343165c1caa218c230d161d1c61212323b515011c2b21ca226e15da1bf42081223315e31bc020292239159e1b7120b621ec14591b2a206021bf14e51aef1f10215814811ac51ff620fd13101a9a1fe9204113be19641fc220b01242193b1fa220f4116719ad1e46201e126719ad1e46201e120000681b4b1b00000000681b4b1b00008c224226dd27c81f3b23a927cc283d20d52524281129772293280d284d29ed246e2b68284d29e227ac2d76284529ee29e82fd128c829112cdf303b29722a172da2311029832ae22d9e319f29622bf62dd43131290c2b472e0f328829612b862ee231ad29b32b562ea931c029472c012eba301a2a932cf02c912e7b298a2cc22ad22bce29162eec274028792950303d24cc2539292132c7210a2653294b330522af2421298b33ac203124d728c4332e206324f128fe336020392327280934331f192352282934f71e272334283734e71e1a2448282334c91f72233b281534f31e052210281c34861d0e220d2816348e1d89214928c633fd1c90210c286231041d31200c27dd2c6c1b9e2062269d29e21b05214026e028341c7d20d7255d28601b10205625e1278c1aae1ff2243527111ae91fbd24ce263f1aeb1e40240f265b19b71d8d23502555184d1d1e23ee2404188a1ca622a424bc168c1c6a2262249916571c0e2220242916351cb321ab23d715031c622126239115de1b1721ad225515781bc520432210153e1b8f20f121cb14dc1a6220b2218b14a21a4d208f214914711a36206a210f14581a21204221ca132c1a00201e2162130a1abc1fde203a13b2198b1fbd20d112031a0c1f6c209e12031a0c1f6c209e1200002c1b3a1b000000002c1b3a1b00008c2256260128e21fe723f0270029b2209324632874294b21352522284929f121e127472853295e24152ba228ae29bd27bf2d18292a2a192acf2f7f29f12a342cd430d129672b462d4031e129892bbd2da331302a232c402eea31612a372c8f2ea731af29ba2b2d2ee8309c291d2c5d2d282f7229df2b982b382c8d29322c6828fb289a29db2c20254226aa298e2e57223a25e128de3037213225c528aa322f21c524f628bc33c1208124902800347e20e624f2281f34e2200e2467282934f41fbc23e0285934961f7123bb286b344d1fea237b285234a31f172474285534a21f882218285834fd1dec23d8272b34241f0c22b927e0335b1daa21da269c30ed1c9e20a026bf2be21bf12068268229381cb6205626f328be1b0920aa253628801a1a204d25dc277b1a0a20e5243327611a721f8524a126c319ce1e5a24272644198d1e1924b325f718791ebf235f25e718e51d492302255f18b51de522ad242518331d662266246117061d29222324f916961cd421cd235d166a1c9d217523fc15631c69212d23f315421c2121cb22a315c51bc52055222415381b7520cb21aa14871a292061211d14571afb1f2121c9134f1add1f06218c13291ab71fe9205f138519911fdb206d126319b41e472095116319b41e472095110000001a891a00000000001a891a0000c2227e2618282e200e2419281d29d220cc2478288829b421cd24772892298e21d224a928bf29802180272d29792a3824912a7e29f02a4727ce2c5429cf2a5429382e7229a22ae52ae32f1f298f2a5f2c6530d429ce2bf22c7830102a162c072d283069294e2bad2c962e7c29be2b4d2b4f2ca929ef2bb6281029122a482c5f25e626c029182c19239726ef29c92cad228e25d728902e8a216d24762856316920b9244129bf33b6205624b528373453207e25ea285f346421b924f82874348f200e2400299734b31f6224ff28ad342920042474288e347f1f2a2337288834b01ee2212228a1344d1da021c7279234121d8f212d28dc33ec1ce0216327832f1b1d2c219526162a6a1c6a227d261b295f1d2f219126fb28421cc820d3255628db1b75204625bc272f1b0a2000252627611aca1f01253c27061a451fe5240827a019b51e72244c261519271e0124a625a9187f1d54230d251418f51c9d2282243217611c282241243816491ce5210424f2153a1cab21ae23bb152d1c6d214623aa15d01b2321dc222c15911be0207622e4143f1b9d201a22af14e01a6720cc215514721a33208621eb13611a1a205c21a2134f1a07203b218c13631aea1f1721a413e419c21f0e216d13a5190f1fa1206412a5190f1fa12064120000581be31b00000000581be31b0000b522e32649280a20972322285929732057249228ba292921c724b028f62987210325dc28302acc215225f528242afc2147264129db2af62285289c290b2b03253a2a1b2af52b0027092c2d2a0f2c8a28ef2ce129d72ba129ec2c142a072c9d29592c9329b12be428e32a6a29802ba327f3286029852b68251e27372a822c8d232126e4294d2c4f223d26c229542c3822c6256129b92caa21d525b428362fb82132253d2966320421a324f72830347a20d4248b288f34a9206e236f28a3340e1f4d249828b7340420cb23a828de34251f98255028c1340a21d6221128d5340d1e60225e28e034a51d73214a28c734d31cbb22d1270533f61df720da263d2d511c3921a326ae29751c57217426d4288e1c94207526cd28ab1b5d20f5256c282b1b372098251928cb1a18205425c227771a32203525a0277e1a9e1fc424db26c619c51e6c2457262119571e3d240926b318f11def238f256818b11d71231c2522185c1dcd22bc249c17421d51224d244c17d21cd621e1238a16aa1c7f2156232d165c1c2d21e022c615121ce7207c226415681bae203322c914fa1a7d20e5216514bf1a5620b0212514cd1a3a2087211114b11a0f205021ca13b21ad51f02215f13f91aba1fdd201014631afd1ec020d412631afd1ec020d4120000671c491d00000000671c491d00008722ba262628071f3924282873290521642474289c293821c4249b28ef29aa21f524dc28332ad02166251f29812a2822eb256129d42a8f22a3269d29f92a5c237a27a829e72a2524c1275129272b5c2456285129522be1247828b229a22b07258928aa29ab2b1a25ae27d629fc2b32243826e729282cb222df25c629222c2322ec25fb293c2c00226126de293a2c5c2234266d29082c16228d24ff28752c8a20012507291030e920b02457295c3399202524ae28a534002058248728ec341f2007238c28fb34721e0a23bc283235581e2e23d5282e355b1e0923d42835353a1ec72178284735ee1cc1243b28e4340e202823e727a3311c1e09217327732b381c082162266b29371c0b2178260529251cc6208a26dd28b01b3e212f266c28391cf420ee254828d21b8a20db252f28061b52209325f8278c1a1320e5241727ea19e41f58244526bb19451f1524d2252919741eb42382257a18111e5623212535188f1d0423e0248a17471dc4229c242817f01c752259248a16f81c28221a249416cf1cc821b5233716b11c73213c230f16531c1121bc227415101cb8204722fe147e1b7220e6217c147c1b5820b0215c14521b44208c214314e31a13203221cd13de19d41f0221d512211a651fe420f112211a651fe420f1120000a51b9d1c00000000a51b9d1c0000b022e52633281520f82323285a29cc2069245b2887296121c424a228eb29bd21f024d628222af221292508296b2a0d22be253729d12a7522132699291e2bbc223a26ae290f2be7228c26b1290f2b4223cd26c529282b8a23b226cd29472b6d23ae26b829532b4d23d226b729af2b3c23d826f129082c27237226a829fb2b8722f625b029092cf121d925ba292d2ca52125268e292b2cd5214425a129012cff207724e828692c3d205924a5285e302120312404290234f51fe323592922355c1ff523d72847354d1fc4240b2968354b20ee22c2286a35231ebd2269286735dc1df022db288a35eb1d872104287534b81ccd218b27302ff41c422312278229141e9c211327a929b21c74224f27b1294d1d1e21a726ec28341c72216526ca28791ca220ee255528771b4420a9250c28bc1a1b206025ad275a1a801fc624d326ce19a21e4d241e260719301e2724d025b018f51dde2391256b18d51d7d2345253c189c1d0e23ea24f717671d962286248017381d372244241317331d0e221224e316121dd321d2238d16c91c8a215a232f165e1c3b21ee228115041c0a21b0221015541bb9203f226214d41a3e209521f313bc1a0c203921d8137e1ae31ff4202513491ae31f0e2186137f1ab11f4921c6137f1ab11f4921c61300004f1a731b000000004f1a731b00005722c7264828a31f2e2416282e29d52069244b2869294f21ba247a28ba298b211625b5281c2ae221372510298c2af32163254829eb2a0f227925a329572b2722d925b4296d2b7c22c92573290e2b6a22c2257029d62a4a2228269329182ba12251269f293e2bb322d426dc29b52b22233827c429cb2b50239926cb29f42b79226526c929112c4622e025b3291c2cac215c2595290c2c2c214f258529012c2021d5244829b52baa209f242229882c7620b72207297630601e50233b292634b61ea52374296435e41ea023d328c635a11eec22eb28c235041e5923ae28cd35461ee824be2877351c2026227f28a232271d86210828592ca01c9b216e27eb299b1cba210a276229b51ce820a226f328e81b2021a926e528211cc3217526a028a51cfc202e266428df1b6720c7252928d01a32206c25ef277e1a871fe3242927b419b91e762475261819321e2524e7259818b71dac23682526189a1d2a230025f4176f1db822b4245e17741d62226a243917441d1a223324f916231dcc21e823a416e91c88217f233016ba1c3d211023ce155a1cfe20af2258150e1cb9205522fb147f1b8b2010227c14451b6520cc213c14e61a49208f210414b11a2620432194136b1a0c204621ae13881abb1f3f21c512881abb1f3f21c51200003b1a091c000000003b1a091c00002c2264260428bb1f5b23be27f9288c205d24722897295321bb24a828fc29b321f024d7283f2ade2120251529922a02224f254129d32a0e2279256829102b1222c82583294a2b5122f425a629812b6922ff25b929a62b5c220126ce29c72b2e22f525bd29bc2b0922dd25b929c72bd821b1259d29c12b9521a1258d29c42b6f217e258929ce2b372149258029e52b052131258e29e72bed200f257529f52bb920172545299a2bc02042244829ae2bf21f3424ee281f2cb61f0823e628b72f571ecb228b286a33e81da22367283335641e5925a128bb3565202123a1289135dc1ddf22dd281934a51d591f73274b2e0a1a1221f12627292a1cbd214827a429b71c7021af278c29621c4723d5279029bf1de0239c26cc28171ea22111268728451cfa21ca2548286f1cf1207825ad27551b4c2013252c27601aeb1fca24c926bf19761f8924772689193c1f3c24fc254119c71ecc237825d0184f1e4e231f257a18131ef522d8243718d41db6229a24e717701d572257245f17f91c012210249616bc1cb0219f2345167d1c5d212623cd151e1cec20962252159e1ba3203722cc14261b6520e1216414281b4e20ac214814331b3f2095213114051b112049211614461ab71ff1201b131e1b0f1f8f203f121e1b0f1f8f203f1200006d1b151c000000006d1b151c0000032272260828561f7f23e427102983202f243f286c290a218f247a28ca296b21b024b2280e2a9221dd24fb28712ab42111253b29d42ac72158257e29392bec219925bd298a2b0822f025d529bb2b4d221c26f129e62b622219261e2a0d2c4622fb251f2a152cf721ca25202a152cae21a125f429082c57218d25c429f92b2f215225af29ef2be2201e258629bf2b9d20ec246429882b5b20cd244c297e2b402091242b297a2bf11f44240529b62b6a1fd924fe289c2b23209b244629c02bb71f8523dc285b2d2e1e1a227028bc30d21c66239128b932ba1d2225a6285832c71f4a216a280e2f021cb221c527632a7f1c6921722779295c1cfa215c279529d11c4c220e273c29121d1322f5261129e51cae212a272c297c1c5f21dd26ff283e1ced2050268d28c71b9a20e7252f281f1b3f206425a027701a851fdd24dd26b3190d1f9924712657196b1e5d241926dd180b1e1624b2256318ae1d952348251f187c1d1223f024c917711da4229e246117411d32224824f5160b1dd021f423ae169b1c69216723f3151c1c1221e8224f15ce1bdc209222eb14611bac204822a614341b782008226d141b1b4f20bf214014321b332067213014f81afe1f0f21e413901ad71f1621a413a51a601ff4205013a51a601ff42050130000ca19571c00000000ca19571c0000ab223226d227b61f9f2316283929872033242a284d29ec20452444287729012158247928c32906219524cc282a2a3a21ec2419299a2a602130256e29142b97216d25bb297d2bab218c25e829bf2bb5218a25f729e42b86219625fe29fc2b7b219325fd29062c4b218825f3290a2c40217525e5290c2c18217725d729072c04216725d329042cde205725ba29f22bba20102579299f2b6720c1243429452b0e209e242829372be21f752424294a2b771f9a242829552b901f2d24ff28472bdc1e1724ba28ba2a971e50244029672bd01e3823db280a2c951db7213e28592b6c1ce7210a28592a921caa225328d229281d072475289c2a3c1e3a244a28d229681e422465272529511e1d2236273329891c7d2185275629121c6d21c526cc28071cfc20fb253228651be1208e25c9273d1bae203d256427f11a4220e624d626511ad11f91245726cd19221f3b24e8254b198c1edd237e25c118421e6a231c258b18c31df022c5241718711d802272248d17f91c05221c24bf16c01cb221b1237116821c6f214723f815541c2421da229815111cd72077224115b51b94201c22db14601b5120bd218714491b1e206b215c141b1bd61f2a212314c61a6e1fdf20ac132b1a021fa020ca12ee19581e2720c511ee19581e2720c511bf19521faf202010bf19521faf2020100822692609285d1ff0227627c3281f208523db271729a620f82349288e29cc203e249528ee290a218c24d8284b2a422104251d29af2aa42149256529122bc6216a2592295a2ba9216c25bf29962b7e215e25db29c32b44215c25f029e82b2c215c25f629fe2b00215a25fa29042cd3205d25ef29022cc0206725e129fc2bb2205f25d629f12b7f204425bc29d12b53201b259a29a72b1d20e5247d299c2be31f902460298e2b341f43243629762bbb1e42241629462b971e292407292e2b4e1e3b24bf28e62a691e7e24c328df2a851efd23ce28952aac1d1324ee28872ac81dd4231a29c02a6f1da423ab28512a4d1d74225f28142a951c08224828152a611c752198278e290c1cd52147272a296b1cfc2131272929a11c6421bc26d228161cd5201e265828531ba0209d25cc27dd1a2c2038253f27301abc1fe824e026bd19491f972478266719cb1e452405260a19411ef42397258a18c61d552322253118741dd622c824ea17481d62226c248017d61cd9211124b716aa1c7f218e235316571c2b211523bf15461cfd20c322a915431cdb20852282153b1cb4203e225515311c8520f7212615331c5320ab21e4142a1c27206821b8141d1c0020272187143b1ba51f0621f5136d1af81eb22041126d1af81eb22041120000e715ee1800000000e715ee180000f921cb257427191f62227a262928611f19232e27912838209323ed271b2962201d246d28b229b1209b24d6283f2a1b21ec244a29cf2a4d212225bd296a2b72215c250c2ada2b832172253f2a142c57218a255e2a302c2b219625652a3f2cf2209225622a412caa207b254e2a3d2c812076253c2a382c50206525272a2c2c422050250d2a1a2c1c204725ee290a2c00201f25c429e42b991ff9249729b82b381fb92460297c2bb41e81242f294f2b1c1e60241029192ba81d472404290b2b641d39240329f32a301d732419291d2b771df723d8280c2bc31c6d24a828252b4c1db9239828992a9f1cac227828312afb1b932260286e2a251c5e234b28342ae11c54221828c029641c1322d2278c29691ca32151274029451c4221c426d228f81b00214a266528941bd420f2252328521b7f209625dd27d11a4920362553275b1aa91fb524aa26ae19d71e402404261219231ebc2375257418cd1d2923fe241e18651d912293247c174b1d1c2233242d17181db821d923bf16c91c5c2147232f16811cfc20cd22ad15261ca220502218159c1b67201a22ad14331b4e20e1214e14101b2d20b6211d14fd1a1a207f21ea13e61a07205e21d013d61aec1f1f218713371ab31f19210a135a1a521fe32096125a1a521fe320961200009b194d1c000000009b194d1c00007121a8251127351e2822fe267628521f6722a1264c289c1f0d234727bb281420b4233728692974201e24ae28072ab22070241229982aec20db24bf29752b3b215c256f2a362c58219725c12a6d2c0921a625cd2a782ca4209825bc2a6e2c3d207025942a522cb81f5b25652a352c6f1f35251f2a102c3a1f0725f529f42b231fed24dc29d82b4f1fd924c429c22b311fce24b329b12b211f9c248f298f2bb11e6c2454294c2b471e4d241d291f2bd51d33240f29112b6d1d33240e29132b291d37240e29172be91c322411291c2b9e1c40242029242b681c37241329e12a3c1c0224e728a92a071ce223ce28a22a161c6723d928ab2a131c7523be28862ad11ce0229228572afe1c5f226028052ad41caa21cf276929621c1721b426bc28e01be0202c264c288b1b8920b225de27051b102048255927491ab21fe424db26f419701f82245326a319051f1e24c5253519a71e90234425d418921eec22d224aa18841e59226f246b18701ef6211c244318131e8a219d23d917bc1d28210f233a17491de620b8227e16a81cb8207922b815431c91203e223c15f71b6820fe21c3148e1b3420a8216614781b15206b213b14841b03204a2142145a1bbc1f0d21db13361bb81f1c211514631a041fb8200312631a041fb82003120000ce169f1a00000000ce169f1a00003522212587267c1e542185253e27ff1d1e2281262c28131fcf224227c128e01f3123cd271d292820c5234e28a2296f202724c428332aac20ca24dd29872b3c218c250e2b932c9e213826c92b132d4e216426052c3b2da4202f26d42b1d2d991fe225822bf12c7a1eb525362bba2c1a1e7225b52a772c2b1e0725172a202c041eab24b229b42bbc1d7e247829672baa1d78245d294d2ba21d732444293d2b9b1d792443293c2b7f1d67243c292f2b201d4b242d29272b001d26242a291f2bb21cf2230f29022b5f1c9e23f428e22aa71bb4230329f22a411bc6232629242bd21aee2345294c2bb41a0f246b29842bdd1a20247f299b2b041c1f248e29992baa1cd4234c294f2b2f1de722b528842a1f1dea21f0278129ac1c6621d826c6285a1c282153265728271cb920ba25d1279c1b4d200a25d926a81abd1f77241526dd19c91e0c249c2508195c1e762330259e18ee1ddb22b7243518911d3f224a24ba173b1db021ef2318170d1d5e217c23b016ce1c27212d233616a41cf020e8220016421cb8209c225e150e1c96205d221d15bb1b72201422e014711b3720b8219214fa1aea1f59214914a41a8a1f1021bc13771a661ff0208813891a581fce206713531a761ffc205e13b919f81ebb20ef11b919f81ebb20ef1100008f17a418000000008f17a4180000fb20e72437269a1df121b3253227c71ec321d625af27aa1edd2161263a28981e6722ca267628331ff9223d27b628d81fac239f27eb2841204824ce282a2aae2009262f2ba32c3622df26df2c572ef9213527962d5b2f3e1f3e274c2d032f2a1b6226652ccc2d891b4125f92a9e2ce11bd824de29be2bb71c62242f29f12a1a1d2f24e2288a2a451d2024b9286b2a331d2424a1283e2af41c0c248728392ad81c862358280d2a621c7d233428af293e1c43232228ad29fe1b3a231928b6297f1b77233628cd29441b74234828ed294e1aa6238428522a40198423fc28ea2aea17fd23b129c32be2161224332a342c881773249f2a722c1b1a9924dd2a872c791c5c246c2a452cc61de4237a296d2bda1d85235528082ab31dbd222327f128521dfa20f5252128dd1b1120e024c4266c1ab11f5624f825f3195a1f022496257419021f84232e25fa18991eff22d324af18051e972299244618a31d4f226524d2174d1dfd212d243017f31ca521d7238e16a71c3e214323dd15671cdc20b0228c15091c76203122f5148e1b3520d421a414321b11209f214e141c1bea1f76214114ad1aa41f3c219013731a5b1f00211913411a0e1fc120e312381ab91e8420a612df19a81e732076120c19e71de11fc0100c19e71de11fc010d10a551cd81dd100d10a551cd81dd100d5207f247725471d7d215625b226e91d8f213725b526131ed4216125f9265f1ee5216f2516278a1e0c2258256627b41ed5213c256127a71ee723e325dc2771200b224726a727cc1ea225782c2f2d2b21312cd3317e33c11f8628e22e5030ed8eb023382a512c85195d220128e629371c072386278629e21d08248c2731297f1e6b2348270429bd1d47234a270129bf1df3221b270c29991dfb22fe26f128a01de122e626ec28a61dca22de26b9285d1d8122aa26ba28231d4522a526ae288d1c4122c126be28e21b0522ea26d6283e1a01225c2734294419fd214a28f7291217ec22a329b12bdc1049259c2b0c2dbf8eef26ea2c772ef7137126fa2c922e091d9a25d42b1c2df41f93237a293f2b581e97211c27db28dc1c122047253e27131b5120d7248e26181b65206f241726f01a9a1f12249825e119081f9923482554193d1e0823ee24a018dc1d6c2293244118ae1d0c224424e217821dc42106247817691d7921a4232a17091d25212b23aa16d91ce120c02243168b1c9b206b22ba15391c5c2010223015081c2c20c521f414e31b01207e21b814bf1bda1f58218314461b9d1f2e211e14f11a6d1f1421a413a71a351fec205313521af01edc20c112f219ce1eb5208c121c19b21d961ff8101c19b21d961ff81000001c156f18000000001c156f180000762055244d25971c4a21242598269c1d51210d258726ba1d762119259626cb1d95211a258626ec1d87210b258c26af1d6321e3246e261d1d19214724ad25e31b0a1f3a214e234d176f165c1c631e700d7019481ed5203313c51e57232425e219c721d125d8271e1d7923d226ac28bc1e4023e726c5284e1efe22d326ba28311eef22ae26ab28401ee922a826a7283a1e7e2253267328da1d4f221e265728af1d5522ef2531289b1d7122d4251528b41db422c7251828d41d4d229325f527601d0f224a259927141d7821dd2439277e1ca42009244d26541b391c982276258816cb196823df2605141821862a852c4e1825290c301131ed98bb2ad730f9319e20ce24332c892d41205e2082251b282d1bc31fcb227e25021a081e9d220a25dc18751e8a220b25e418851ec622ff24d618741ea622bf24af18931e79229c24aa182c1e4b2278244918c61d08224c24d517401d9c210224f416fc1c5621a1239916f91c102137236d16bd1cb920be22d2159c1c7720592283157c1c3d20e1213915401ce81f6521f314291c881f3121b714191c501f0d21a414151c301ff7209f14ca1b1f1fe2204914611bff1ecb201014e31aea1eb4209413961ac81e8f203f13341abe1e90203a139a19001e172045119a19001e17204511000082121a160000000082121a1600001b208b23cd24071c98207124bd255c1cd6209e24f125aa1cfc209f240b26bb1c0221a0240d26ad1cc4205e24c225381c0121be233125be1bd41fd7210f244e19fc1c302017221317a91dba217e23d2191520a724d925971cb421b02553270d1ef821c525ad270c1e0d22d925d427d71d2a22e525e527da1d1b22dd25e127b31d0422c425cb27851dea21bb25cd27551dd321ab25d327401dba219f25ca27fb1c9f219325b927cc1ca9217d25a427a71ca621532581278d1ca9212f255f27611c782103252b27251c5221d3240d27e41bf1209624b9262c1bdf208e249a26121bef207b245b262a1b5320bf236825471af61cf120ee2269164c14c41a651dd00b72147619ce1dd009dd1a521e06213e12d91c9c200c236b16591d9621242498179b1de3214c24f517e51dff215c241718d91df2215d24ed17d71dcf214124bc179a1d7821d1236a172d1d20213d23b016c01ce020e722fc15b61cb5209c22f015931c85205522c4158d1c5d200c229715691c4320df214615501c2120af212915211c08208821f014f81be51f6b21a414b01bbd1f4c217a14901b8a1f362167144f1b331f00212314f91afe1ed020ad13b31aab1e90206013701a691e5a20e212411a5b1e4b20af12d119e81dd51fa911d119e81dd51fa9110000871479170000000087147917000057200524fe24f71bbc200d258d267e1cbd208f24f825581c9220452495251e1c942013245125f71b3c205d23de243a1bf31e5a222b24ef190e1e8a215a235c190b1f0e237924061be71f6924b125111c8a200d25a626991c872187258c276d1d0c22de250c28bd1dee21fe252628891dd721f7252b28741dbe21ec252928441da221c7250e28141d8e219d25e227eb1c832164259227b51c5e2132254f277f1c352105250d27321c1b21d824d626081ce920b2249f26991bbd208a2472262f1b8f2066243d26e81a5d2044240e269d1a4e202724eb25631a5b200f24d525521a6620f823bb25861a7720b9237425a01a1b200723e2245a1af01dc4210a24e118221c7a206722ca16561b0b2015227115cb1b15202a22c9144c1c292051229714d91c502085225615321d8220be220d16081db120f1220516ee1cd52014230e16df1cd6200e232416cd1cd42002230d16d61cbf20de22f115b21ca520ad22c5157a1c792067225b15591c4b201a223315371c1c20d021e914131cf11f9321bf14ea1bbc1f6b217c14d81b831f41217114ca1b5d1f252149149f1b3a1f0b213214091b001fe2208613e41ad21eb0202513a31a681e6920e2125a1afc1d2e2062126a1adc1d08207212d31a531dcd1e8e11d31a531dcd1e8e110000000000000000000087147917000057200524fe24f71bbc200d258d267e1cbd208f24f825581c9220452495251e1c942013245125f71b3c205d23de243a1bf31e5a222b24ef190e1e8a215a235c190b1f0e237924061be71f6924b125111c8a200d25a626991c872187258c276d1d0c22de250c28bd1dee21fe252628891dd721f7252b28741dbe21ec252928441da221c7250e28141d8e219d25e227eb1c832164259227b51c5e2132254f277f1c352105250d27321c1b21d824d626081ce920b2249f26991bbd208a2472262f1b8f2066243d26e81a5d2044240e269d1a4e202724eb25631a5b200f24d525521a6620f823bb25861a7720b9237425a01a1b200723e2245a1af01dc4210a24e118221c7a206722ca16561b0b2015227115cb1b15202a22c9144c1c292051229714d91c502085225615321d8220be220d16081db120f1220516ee1cd52014230e16df1cd6200e232416cd1cd42002230d16d61cbf20de22f115b21ca520ad22c5157a1c792067225b15591c4b201a223315371c1c20d021e914131cf11f9321bf14ea1bbc1f6b217c14d81b831f41217114ca1b5d1f252149149f1b3a1f0b213214091b001fe2208613e41ad21eb0202513a31a681e6920e2125a1afc1d2e2062126a1adc1d08207212d31a531dcd1e8e11000000000000000000000000000000007828471e31200f22652ca42400276126012e3b265c278d28022f76257c278929e92ff4267b28de297c308b283729f029bc3000283528f829b83023264227a5297930d12449255a295630b92293249c274930bf21e526f92624307b28842bf225a92d6d304c32b21c062b3a2cfd2dee18932a6c27ea29229b06278123ea2742988c289324ea2ef70ec3302f24ca3065293430432611313d2a742e0b246a278427c0258025d02c3d96e31d0000212d129100242f1cd42cdf956b1748105a2d568b000000000f2d000000000000c32b0000000000001d2a0000000000002c2b000000000000c12e000000000000303000000000000078300000dc187c20213232116720b4253132681958202528fa3079193c20f5288e2e9b19c01f5e287a2a41196220c025f327391a7a1ef2232b26b3181e1ef42289248a18a11c2c229623b816e61cf9217d23f516ff1cb621652318174c1da821352386175e1c512102230f16011c3c21d4228f15351be8209e22e314111bc3204a22ae14ea1a8620fa2178141f1b6c20b7217d14331b4e2092216c14551b3a206a2181146f1a17203b21b313e919b51fde2012133719e71e582013120c19bf1e3c20b7110b19951e28208e1106196c1e09205e11b9184c1efd1f0d11ff18031ea11f231200000000000000007828471e31200f227828471e31200f22652ca42400276126012e3b265c278d28022f76257c278929e92ff4267b28de297c308b283729f029bc3000283528f829b83023264227a5297930d12449255a295630b92293249c274930bf21e526f92624307b28842bf225a92d6d304c32b21c062b3a2cfd2dee18932a6c27ea29229b06278123ea2742988c289324ea2ef70ec3302f24ca3065293430432611313d2a742e0b246a278427c0258025d02c3d96e31d0000212d129100242f1cd42cdf956b1748105a2d568b000000000f2d000000000000c32b0000000000001d2a0000000000002c2b000000000000c12e000000000000303000000000000078300000dc187c20213232116720b4253132681958202528fa3079193c20f5288e2e9b19c01f5e287a2a41196220c025f327391a7a1ef2232b26b3181e1ef42289248a18a11c2c229623b816e61cf9217d23f516ff1cb621652318174c1da821352386175e1c512102230f16011c3c21d4228f15351be8209e22e314111bc3204a22ae14ea1a8620fa2178141f1b6c20b7217d14331b4e2092216c14551b3a206a2181146f1a17203b21b313e919b51fde2012133719e71e582013120c19bf1e3c20b7110b19951e28208e1106196c1e09205e11b9184c1efd1f0d11ff18031ea11f2312ff18031ea11f2312c4247c1aeb1e8a1ac4247c1aeb1e8a1afa2a4625d226d8256e2d352694273328d82e6926e827a02902309c28c929342a65301829352aa92a883061280e29942ab1305f26b7275c2ac730d824cd25532ad930d325c926432a273198279628fd2ae2300e2a322c88295031fc2c2f2f302aa430c32cea2dd927a127a627a628f79d38272824bf26429fb92f1f22072f212804317f2643311f2cf12f4428c131862a3b2dba26a62b4327d120f223ef2ceb96af1400003f2aeb8b271579137a2a2d8d00000000cb2b000000000000a42b000000000000d52a000000000000712a000000000000462a000000000000bd2a0000000000005d2d00000000442020310000541f8525bb32b91a032058261032d91a0d2004288030871aff1fa427de2c8c19a91f6726992995185b1f59257e27a3181f1fcd247d26d418931e27249c259018c81d4b23dc240318b11d91225c24e717301e92224d244b189e1d45221924cc17891cb92186234b16421c88213023e9159c1b3621f8222915841b1d21b922fa14581bf2207422dc14161bc22026229414031b9b20f7218714031b7a20c8216b14c91a552080214614651a1b202721db13e219c61fe6200a13ab19751fb62099129419401f902051128719f81e5f2042120019931e3e208111fa18db1d771fd810fa18db1d771fd8105f20e01b181e29155f20e01b181e29159928f925f4274a243d2ca12784281927302ed527d0282f29e72f592865297e2a7f30ab288a29642bb6306d287129be2bc730272803298b2bd2306e27a3289d2bdd30c027c628ae2b133170289529b02b6531eb29062c002ca8300e2a142cde29a330ab29c92b8c29f83091282a2b22275f2ccc24202a2f1caf30d325602ee7299f3024294e31182c182f002a4e32482ac02ca129b53121282526e0288b338a21892527288d334121d5230326b8336f1fc22142250f34311d391f872416342b1a881a7b24d43328155d1bdf24ef33b3150000bd227e3300000000321eb03300000000432020340000de10f1233e32140c1c1f8326f2322e1a22217c272232621c921f3827de2f1a1ad91fcb26e72bf219e2209226b429ef1a3d20d9259128041a351f182572275819081f72242e265419301ee22364259718a91d7e231f253318941d2b23ef242318591dd822a524ef17701c4622382471163f1ce021c2230816ac1b66212e237215641b1921a3220315c11ac1203e229414b91a8720e42174149b1a5f20b5214514991a43207e2128145a1a23206121ce13471a0b203821b613b619c61f0921d5129e19941fca208b12cc198f1fb6209012ef196d1f9e20b9122419341fa620d2117919ab1e512060127919ab1e51206012f0136c1850194401f0136c1850194401162595253827fd20332911276b28ef249d2ceb27c8280328d72e5e2824299e294f309b287f297e2be2308d28a1293f2c1a3195288329852c5031c028ec29b52c903109296c2a042dc1317629f52a302db631132af02b262d34327f2a532c982d8232182a562cc32d54327a29602c802d2f32fb28c42c2d2d9c317f29e82ee12ccf30c729db302e2cfe2dc22900326729202ab729c6329e258e26fc287b3353225e227728a733591e9a222328a133e61eeb231d28e2333320a7222b270934f41e7d2199274d34bc1d4b200a275d346b1c852045262934821caa2154260734771d4a1f6a26f533cd1a73208b277c33031cb920152831332f1cb42111280932f51ca320aa27292fc51b5120bc26152bf51a8620b1267329001b7e2014269228f41a402096251c28711a6c1fee2420278119821e61244026d418021ee1237e255c182b1d0223cb245617fa1ca1226e241117c11c7c225024c016991c4e2230246216441cd821d823eb150e1c6c212f238015411b2921e422cd14461b02219522d1144f1be3205022b9141d1bb3200a227c14c01a7220ad2141146c1a3c205a21e313fe1904201c212b13f219d41ff820ed12f519c41ff220c0120b1a8f1fb220d91270191d1f8920d011d119b81e5b206712d119b81e5b20671200002d191219000000002d191219000070232b2609281f203d266c278e289e22382ae427b6280126262d0d28e428b928782fb2289829f82ac830d128e029762c5431fd282c2afa2cae314c29bd2a4d2df331b3293f2ba52d1032dc29772bda2d16324b2a352ce02d6432892a4d2c452ec032312a342c9f2ee432272aba2cc32e4a32f329cb2c122e8531f529852d542d2c30152af82feb2bb12c3b2a93316128a928942998325a244d2786296d33b2228e258329173418211c249e28fe33ac1fcd24d3280e347b201c2353280034a21eeb2258282034911ebf221e2841344b1e08240f281a34871fdf23fe270734391f6b22f6270e34ae1d9b22f527f733be1d87214928aa33b81cda211b28fc31e61c5c208a274f2e2a1b8d209c26642a551bc2202c2629295d1bba20d92588282a1b96204d25fb27cd1a4420e424ff26311a5f1f7b2441265a19aa1ef8239225bb18601e94233a258618d51d5323f92424187a1dda22b5249a17051d6b225b24f7166e1cfb211d240216561cc921ce23be151f1c88216a237515071c4c2105233415e21b1121b1221815ff1bd12054220a15c31b8520e821e4146d1b3c208421ae14ed1a01202b212514711ad31f10218013f719a71f0321f312a6196f1ff120651241193a1fe6209d119119df1e932020129119df1e93202012bf09221b9c1b0c80bf09221b9c1b0c8083225f262128531f3d2418280f29f82012274f2853296423482a4a2890292926712dc7286e2956290530f5289429e32b21314629422af32ce731a729fe2ab32d5632c729422b512e5632052aba2b6b2e7e325a293f2b942ebc32822a802cee2ecc32982a732cfe2ebc32fc29712cd32e5d327b2aa62c582e23318e2ae22c0a2daf2e642a462e582a7f2a212a87300f2640272c2a5e32c4223527212ab033ba221225ad29e733a720a32428292134542026255d293a34cf2007247a283f34841f0b24bf2863346a1fe723972879343f1f91248f285a341e2037248b284634991fc2224d284a34fc1d06236b283d341b1e7022a62809347f1d3f227b28e1313b1d21217827302d371cf2208c26d929f81b4d21a1264329301c15214426c628de1b5f20a6253228a01ad01f28259a27eb19ab1fdb242427b1191e1f5f2488264719e71dd623b5254918891d6c2337250418db1cf722d924e516dc1ca8228c24bf16ae1c4a224d2459167b1ce821f623ef15341c93216a239115071c3a21e1223415941be3207122e5143c1ba12010228f14b81a6d20cf213c147f1a4a20a121fb133b1a2e207a2175133e1a1f20582145130b1a072038210913011ace1f0221fe128019841fde200e12f0192a1f9d20ba12f0192a1f9d20ba120000ee19bd1a00000000ee19bd1a0000f5223c26fb27f01f1f2431282f29e6200c259028b329992122279428aa2991238b2aea28e229d626cf2d5529592afa29543079298f2a632c6e31da29552b802d3b32112a992b692e94325a2a0b2cdf2eab327a2a572c132fe9328c2a3f2c552ff9323f2a352c4a2f8d32b52ae72cd92ee931552a7e2cfc2d0a30152aa72c072ca62c0e2af12c7d289e28512ad72e6224aa268829043138225d268c290a33d621bd25a0291c342c21ad25d0283134342101263629583469218024c92861340e204d2433298634e41f2c24ee289b34861f8924d128843404207124b5287e34de1fe02370288234b91e83231f286b34691eb2223c282a349b1dfd2144285531ec1c78208127532c331b6b21fb26ec295e1c4c21d8266b292f1c5220fb257a28b01a1420802516282e1a162029258b270f1aa51fb624db26ac19151f792453262419b11e2524ce25db18881ed6236725a318011e712321254318c81d0f23d8240318691d9c2290245617361d56224424e616de1cfe210b247216901cb021a523e6157c1c76215623cc15581c2f21f5227915061cd8209a2212159d1b8a20f921ad14d01a36206a211414a61afc1f2821be13781ade1f0d2154136e1abd1ff32049139f19851fe1200212a719cf1e66208011a719cf1e662080110000cf18911a00000000cf18911a000076239b262628322056244f287a2927212825b528e129e1219b25b628122a3722022738291f2a8c231a2aae29da2a7926722deb29672bc72906300f2a9a2b342c5231c929232ba52d1f32e429842b972e9f323d2a302c3c2fc232b32a5c2c472f96328e2a5d2c322f1432862a9a2c8c2ec030d32aab2c0a2d6f2d942abd2c9829d429a32abe2cb7256527b12a312d052338268b29252fb42195252329de311f21b425cf292d343b219b242229693439200626bb29a83487215e258229b534d62080243f29d5340e20d2241729de3445206724b828c234cc1f2624b128cb34361ff7228a28d7340e1eb6221728aa34bb1d91226d285234801df8212e289430e71cd1214c27022bb01c6422e92694290c1d992128278b296c1cf4205a26d228aa1baa20d5254b28381b1f20312576273f1afb1f0d254c27eb19c81f10252c27a619491faf2497264a19cd1e44240426d418041eb72375252c187b1df522cc246f17c21c6c2270244d16771c0b222c24c515541cc421e3239815481c852169236515fb1b3421fd220715a51be8209122b2142a1ba02030226714cc1a6a20e8211114811a3c20ae219313761a242085218713781a1520642154139c1a042038217c13211ad21f2721f1120c1a3e1fcb20a8120c1a3e1fcb20a81200002d1a041c000000002d1a041c00001f231a277a28102031244a289329d920a724e4283b2a3b213f250029822ad12162258c29cc2af82133269929d02ac722772993291c2be225722c002abe2bc928d92eca2aff2b602b78305e2ae22be22c5631622a512cea2d9f31842a672c3c2e4131282a412cd42d6030252a512cc82c9e2d002a352cf629fd298d2a922c29262327332a7a2c00238a26fa29862c1b22a926f9293c2d01225026a229f62f97216726472a1933ab218c256c296b34ea202426e3289c34702194249128d0340e2039251229e1348b205124082924355e1fce25cc280335f4209523832817355a1ed222b2280f35b61da42298280a35901dff2220283934dc1da920b527ba2ea91b02224f270f2ad81cdc21bc260629b81c2921bb260429131caf203a2699283f1b8520c9254528fe1a3b2071250928691a34204e25d3273d1abb1fe8241a27bc19f01e962493260919651e562440268a18fd1d0e24bf254018991d7e232f25c517501de422cf2434173c1d70226524ee16c51cf021082429169f1c9b217f23d215521c4021fb227215171cf7208e220615731bb42035229414001b7820d8213014ea1a4e20a0210714e31a2a206a21cd13b21a0b203b219513c41adf1f05213b134f1a981fee202513451afe1eae20b312451afe1eae20b3120000ba1aab1c00000000ba1aab1c0000572383279428c91f93248328b6295d21d824c6281e2a9a216925f528872a2c223e254229ab2ae621e2256429bd2a56228026af293d2be5227a282a2aa32bc0249a2a8d2ae92b1b27902c472ae52bfd28ea2d0b2adf2b8f2a622e1b2ac82b132bb02de229e92b4f2a6c2c082a332cc328b729892ada2c0f260027252a6e2c172329261e2a702c0b228426002a422c2f22ec26ea29672c752233257a29182dda208d2549298d30182176258d2918340321ab240c29d73435208c25cd28f134ea203f2401292635621f7b24fe286935a61f902327296235561e1324ad285e35b21e952280285e354d1d672466285635f41e1c25ad28f433092089215428f32c5f1cf7213e27c5299e1c7021b72628291f1c2321c1261129c91b7a217226aa28101c222113266528731bc120fa254328c01a7f20b9251328621a322024257a27d219f21f96249d266319871f37240c261a19ad1ef123b5256c18321e80234c251a18a71d232302254e17601de422ba24f1160a1d992278245a16f91c452235244516e71ce621f6230516d61c91217f23c9157b1c3021f9225c150c1cbf206c22b7146f1b7b20fe215414601b6020c9210f14231b4d209921db13fa1a272051217513141ae41f1921b1124c1a4c1fbb20ee124c1a4c1fbb20ee1200006b1ab71c000000006b1ab71c0000602349276e28352077247028b4296021ba24a028f2298b213125f328662a0122522535299f2a272276256a29ee2a24221726ad297a2b8f228926292ae72b09232f26142aed2b8f22e327c029822b3f241829d929a52b7d253c29d429112cb825fc28c429cb2b5e251e28e429022c5e2470273b2a402ca7236f26d729442c5022ed25122a382c88212f26f829592c9321b426f7298a2cf0213d26c329302c6d2151251029f82c9f206f2502294a31b920192524299e346f20d82407295b353620f3231f297435ea1e5c247f29b435711fd9230c29ab35731ebd23d728b5355b1e7925e928b9356920ed23fe289b35421ebe22e0271632531d2222df27072bd81cf5213b27d4299c1cfb22b927b529671d6721b926e728181cfb21aa26fa28891cf7204a269928871b7d20dc252f28a91a46208425e527341ad41f00253427ae19091f8c246b261b197f1e492400269d18181e0724be255318f01dab236a251f18ad1d372315258417a51dd822be244b177c1d6e227324ea16691d2c223524d216351de721f3236516e91c9c2182230816661c46210b234315f71b0c21be22c314271bbf2048222a14e11a40209b21ca13b31a042045216013881ae01f0621fc12461aba1f0f21e712311a781f2e210413311a781f2e21041300009219591c000000009219591c000014232a278e28d91f62246b28af29352197247e28c22961210825cc28352abd214b251429972af421a1257a290e2b2722ea25b0297a2b5f22d125fd29c72b43229925342a0c2c0822e9251a2ad92b5d22e725082adf2b5b229326fb29cc2bf9223527442afc2b88230d27782a2c2c42235427ee29112c4e233e260c2a242cd42146262a2a2a2cc2213d26212a442c8621ea25dc292d2c3c219625bd29362cf2208a257829102ce72077241929162de81f362453293b32751f9024c0294b35ef1f6d248929c0358d1f5b25be28d4356720782466290136331fe524f428fe35bb1fcd23be281c36291e2f2363285735ac1d1221c526472fd81ba4228227db29231d8f225c279c29141d0b2110274129ce1b6121af26c928141c87218c26b328301c12218226a428861bbe201a266128091b7620a02522287a1a0d202725a327e119331fb824e0261d197e1e55242e268118ee1de6239c250518b21d48232a258a17851ddb22d9242217801d85229724ee16581d3d226424bc16391ddc211e246a16ec1c8e21c323e315b71c3c214e237e155e1cf620db221615101cab206222bb14851b7a20082242142c1b4d20be21e413f01a3b209121a313211b2c205821d913931a0b2056217213921a921f3c21d012921a921f3c21d01200006f189e1b000000006f189e1b0000ae2297262e28ba1f1d246028a6291621c724da282d2a9a210a2501297c2ad42138252e29b72af42177256729012b0f22a8259d29462b1722db25d0297d2b1e221326d929bb2b402296261d2a022cab22a1260f2a0a2cb72236260c2a112c31223c26f5290c2c1e224a26f1290d2c12224626ed290c2cda212b26e529152c8f21cc25e6291f2c2221a625d529232cea20a325dc29272ce6208025b5292b2cc82056255129db2ba42052244d29082c831f7d24ea28742daa1f3424a12916330a1fbc240f2abe35c71fb6231f292c36161e2d2452294236761ede22d8285b36341d1d244f2968363c1ef82321294e34e91dc0225628992c1e1dcf219e27d9294f1cdd211628ee295a1c272302280a2a311dd623b5262d29b11d8c215026ca28e01b28222f267c285f1c5221df2520288d1ba4205625a427711a3020ef240a27d019d81fb424b62671198d1f6f2457263d19031f1524c925c1188a1e9c2355256f18161e2a2307250818d61dec22c424bb177a1d962281241317131d3e2238246516de1cdc21e3232316bc1c89216723d115571c0c21cb2255150b1cc0205c22d6148f1b7d2006226714621b5a20c5212e145d1b4720ae212b143b1b12205821f5138a1aa11fff20fd12c81b221fa5209412c81b221fa520941200007f19901b000000007f19901b00006422ed266a28641f2d245828a129e52071249e28e2292321c524d428542a7021ff241729a42a9e213e257a29322be6217925c829972bfb21cc25f329ce2b26221226232a052c3f2265263b2a0f2c7b226726512a1f2c62226026822a462c41222e267f2a4f2cde2129267c2a552cbf2106265f2a482c6e21d3252a2a3a2c28219425052a342cc3207725d029102caa205625a229d12b782044259329c82b692000256129c22b1b20fd243229da2b19207e251e29952b6d20af246629482d661f4e249729a132861e2b242b29a6352f1ecb248f29ac36ce1e46266529e6365b2069255b29a435821f4d23492736302f1da02263276629ea1cb522d427dd29151d6122a8278229d51c2a2206276329ac1c472175275329d51b9d211b271f292a1c3d219326ba28c61bdf2036266b283a1b6b20a92506286a1ac51f0d252b27a419411fc624a1262719b51e82243f26c3184d1e3624df255f18f91ddd2378252518ba1d51231a25c417a81dda22c3244f177f1d642269241a17551d00221a24b816e81c96219d230616771c3f2129235715161cff20d322e414a71bd2209b229414581b9d207b2247142a1b692011222c145e1b41207c212c143a1b0d202021f413dc1ad81f27218d135c1b921f0221de135c1b921f0221de1300009918681c000000009918681c0000e422a2262928a41f2d246f28ac29f62064245f289829032197249228de290421a924c528282a182109253429b42a6c216d259d29482b9521cf25ed29bd2bcb21ed25272a032cb821ee25402a1f2ca121f5254d2a352ca82112265b2a452caa21ef254b2a432c7121cc25302a3d2c3a219f25142a2f2cfa20a625012a262cea20a025fd291c2ccd209f25ec291d2cb6208025c929072c852025256e29a02b3a20ec244d29802bef1fd6245a29ad2ba31f42256c29c82b1120422449299c2b741e6c25a828e22a0520212478299630ff1d91233e2932345f1d2c2304298834171d33208527e030f71925239c289e2b121d5c255a28062a9c1fc4230328212a831d592304282c2a381d3a22c72797296c1c0122b6274b29431cab21ea26e228061c1e2142266e281a1b0621df252928f91ae32061259727c91a70200a250f27281afb1fbb24a0268a19591f64242c261919dd1e1b24be25a718701eb32357255e18e31d2423f624cc17871da922a3245217171d2b224f249416d01ccc21082411168a1c7e218a23b815631c342110236415211ce12099221215c11ba0203022a414401b5c20cc2156140c1b22207721fb13e71aea1f4021d113c11a931ff72038130f1a0f1fac207a12131a7d1e4e20e911131a7d1e4e20e911d8109b1c311e2800d8109b1c311e2800ac22bd264a28151f0e240b2844298f20bc2323285c2979204d24ac280d2ae7208024e928642afd20dc244329dc2a4f216e25ae29672bac21b125fb29cd2bad21b8252b2a082c8521c0254e2a1e2c5e21c425662a362c4a21d025702a452c3d21c9255b2a402c1f21bf25462a392cff20b125272a292cdb20b2250b2a1e2cae209a25f029112c83208725d529002c5e205625ab29c02b212014258929b72bb31fc5247729b92b3b1f62244529b02ba51e6f242c299d2b941e6324f1284c2b5f1e36248028052bfa1d9b262829f72a95209023c928302c011d4a1f9827922bb6187e221c291c2c181c0a249228ff29381dbf226b288e2a401c41225128322ae21b0a22bd279129ce1b302299279f29321c4e229a276029601c6d210127f928881b17216c269528101bd720db252328b81a55206b259027031ae31f1d252d277919641fcb24c4262119ef1e79244f26d018721e2824e5257918e21d91236225fa17911d0423fe245f17541d85229e240e17f81c01223b246c16b81c9321c823f2155e1c30213a235d157f1c0b21ed228615931ced20ab2279158b1cc42064224b15621c8b201822f714571c5920ca21c714301c292088217a14181c062048213e14181ba21f2d215b13ae1a1d1fde208012ae1a1d1fde2080120000c4158a1800000000c4158a180000b1217f250e277e1e4b22d3265b28131f8423e327fe284920032436287d2972207824c928202ae220fb246129f22a49213c25e829a52b632180254c2a192c6521ba258b2a4a2c6f21ca25a22a5f2c3821da25a42a652c1721e7259b2a642cf220dd25882a592cb920c725712a532c9020a725502a472c60208a25322a382c49207f25132a252c2a207925f929192c0f205f25d429032ccc1f30259f29d42b5e1ff3246629942bde1ebc243829622b451ea9241729292be01d8524fb28172b8e1db524ef28f62aa21d00250229032bd21d5e24e428332bf31c0a26ca28892aa61e6b257e28c229f71db323bf284a2a3d1c3823b328912af21b16247e28682aa01cd2226e28512a151ca7222328f429311c5f22df278f29381cce216d273929df1b5a21c326ba286e1b072151265d28231b9e20ef2521288e1a6d207e25b027491ae91ff124fa269d19291f6f244526f818871e0324b1256d18181e5f2333250918b71dd122c8249117921d5b22632433175c1d00221c24c116011da421b8232616b91c57215623a615611cfc20dc221915e51ba4206f2298145e1b732017222c14311b4e20eb211214281b3620ae21e113121b252093218f13f11a08204a216c13611ace1f38219e127d1a741f0f21ba127d1a741f0f21ba124c17941dbb1f6c084c17941dbb1f6c088f21c3254427851e7022ae27fa288c1f08239927db281120a023132846293a2043249f28fd29b92093243b29ca2aed20e924e329a12b21217825af2a552c5e21e525012ba02c2021ff25092ba82c8b20e125ef2a912c4420ce25d02a772c07208c259e2a592c861f6725632a342c801f47250d2a052c7e1f1625df29d72b8b1ffb24c929be2b8c1fe724b129ad2b461fd4249e299e2b2a1fa2247c297b2bba1e7a243d293d2b5b1e6d240829102b011e6024fa28042ba81d6124fc280c2b611d5d24ed28032bf21c5f240829fd2ad01c54240929f42a7d1c6d24ac28e52a4e1c6324ce28b52a451c7d24a028622a391c6c23c628fa2afd1a6723d228b92aad1bfd22ba28b22aea1be0228d28732a711c59224428ef29681cb221b22755290b1c3521bc26bb28651be5200a2634281b1b5e209125ac27571a042024252927d519ac1fc524a9267219481f622424262b19f11e0524a825d118c01e462325259418981e9022ad244218801e15224324fc177d1ebb21e523c417281e632156232b17b01d25210b23a0160c1d0221d522e115971ccc2090225815371ca0204822e914bc1b5d20e8216214791b3b20ad211d14761b16206e21fa135d1be01f3221a313171baf1f24215b136c1aff1eb1200b126c1aff1eb1200b1203179f1cb31e620b03179f1cb31e620b5222aa253627b41ef9212326e0279f1ee62213278528a61f9c23cc2725292820e02348289d294e203a24d9285e2a9e20b724de29882b0021a225622bbe2c87216726252c6c2d4321af262b2c7a2d52204426db2b1e2d4c1fe725542bcb2c7f1ec025f42a982c831e7a25912a4f2ce71ef624042a032c911ed424a029ab2b8c1e7f244c29402b3e1e6c2423290a2b471e65240229d92a611e8324e728b82a681e5424e828ae2a021e3924de28bf2a981d2924df28d02a601d0a24db28cb2a171d0024cd28c22aea1cb623b928ab2a5e1c6b23ae289b2a751b5823bd28ad2aea1a4f23da28d32a2e1a8f231529172be9191a245a29732b6a1a242474299d2b001b292474299f2bd51b102439294d2b791c2723a628642abc1cf421ee275929521c8521d726b528181c1d214b264828961ba1208e259027b81a2320d2249c26e019211f4524f4251019831edf2376258518f91d3123fa240d18ac1d97228d248217751dfe212b240e17281d8f21b4237f16ec1c53216b233416b91c0b211023cd155c1cc920c2225b15211ca3208b22f014c11b79204b22a4147a1b3b20e4217914f11af11f7e210b14a91aa31f3f215513981a7e1f152142139e1a641ff02049135e1a6e1f0e21ce12c419f41ed120cc11c419f41ed120cc110000e2165a1800000000e2165a18000047214525dc26da1d60222026f527c31ec421f9250828941e2f22d0268628c21ef1225b27db28951f78230f2854290520c823f328682a21205a257b2bbe2c5621a727682d022feb212128d52d772f821ffc26082d972e5b1b2a26fc2b332d9f1c2225392a252cd41cb6246c293e2b561d8f241529bc2a791e4324cd287b2a751e1724ad28532a751e2e24a028532abc1e1f249228352a831e0a247228232a611ee7234528f329dd1deb233028c1297f1d01241b28c1290c1d0c240828a129f81c0a241228ac29b51ced231628b7293c1ca9232428db29751b0c2353280d2abc192f23c828ac2a3d1880235329622b76160024da29e82b671765246a2a482c3019c024c32a7c2cbb1b8b24672a4c2c261df2236f29542b431d6a223228bf298e1cc121bf2692282d1c92207b25ae27c81ad81fb72498269119a61f3e24f2254e19641fe62379250319dc1e50231625a718471ec322c4244118b81d712286249217571d20225224e616011dc5210c244f16ce1c69218923e7159e1c0f21fc228715471cb1207c221e15051c64200c22ae148e1b3120bd216614751b0d2088213914ea1aca1f52219c13a51a6f1f1e211a13571a261fe7209312441acc1eaa207f12e719a71e8d20ef114919011e0320a4104919011e0320a410f116851d5a1f1a03f116851d5a1f1a03002183248925e71ce4219225f026f81df1216c25f3264e1ed7215e251827331e0022532539275d1e10226125a5276e1e65237f2562270b207a22942618282f1f8b256f2c852dd220312c8f31f6322520bd27492d5d2e8f1d49210c28cc29571c4b237327d1290a1f4b249a277029311fa0237d273129821e38235b270d29291e5623722727297e1e712377272c29b61e532340271a297c1e482326270329541e0723ef26e728001ed022dd26cc28b51d9922a026be28871d87228f26af280d1d6e229026b228aa1c7c229726ba284b1c7e229726be285b1ba722cb26da28421aea226c270629f618582363281d2a6415eb24062a4c2c06058825632cf22da5053b26f12c672ef51a48251b2c732d7d1e6f249229c72bb81e432186273729281c3e21002641280e1c0a21f424e726a31b702058240b26961a7c1ff5238e256f194d1e47233a257918f91da522d6240d18cf1d34227624b017b31df72130245d17ae1da921df2329174e1d562172238416141d0621fe2213169f1cac209c2288154d1c712039220315201c4220e621ac14061c0e209d216e14e11be51f682156147a1bab1f3721fd132f1b7f1f27217313c41a551f0c210413611a131f052169120b1ad51ed22075125519c51dc31fd9105519c51dc31fd9100000181552180000000018155218000054204b244925511c7c215b25d426a41d9a214425dc26da1da6214425d826d01d98212b25b226ab1d7b21fa246f26341d292144249d25fc1bf51e4b212223fe161c16401b0a1e870ee01ae81fb5218a152521f0249f26b81c0523ba268c28371edf2367270829f81eee233b27e028061fac230e27cb28cb1e8723ea26c028aa1e4b23c026ae28931e2223af26ac28511ebc2275269528f71d992249267e28bd1da02227265a28c31d6e22ff2530287d1d2822ab2506280f1dca218925e027aa1c972144259c276a1ca7215725c827601c19227525b0279f1c8521fd2437272f1c33212324f625381be71e6423e2257618e9207b279f299f18f827cf2d1b2fdd9a532acd30f031ab1bd025c32c4d2ef6201d20292676287f1ac31fe223b125e119b71e42232725fb183b1ef8220f258618481ec522e4245c189a1e9b22b2247a18251e5a2283241118fb1d09225324bb178c1db4211424fe163f1d7c21d5237216061d272162230316ab1cca20e9229515781c852075223415711c582000220815401c0d207c21ae141f1cb31f442168140f1c771f21215714f41b421f00214014b31b281fe7201d14641b061fcb20aa13fc1af31eb3203e13be1adb1e9320fe12111ac11e8b207c129c19261e2c2047119c19261e2c2047110000bf0f8f1600000000bf0f8f1600009320da23f524f41bba209b240d26561ced20b6242226981cf520b5241e268c1c2321a52409268c1c2c2124247d252b1c90203b223b24c019631d61201b221518041e46220324ce19c620fb244826101d0f2232261328231eca2283265a288d1ede2287265728691ea622732650281a1e7a225b265428f11d5e2245264628d71d382214262a28811d0f22ed251828441dee21da250b28101dd821bb25fa27e51cb721ad25e827b21cbf218125b5278a1ce62166259827781cef21342578274e1cf52102253227221ce621c824ec26001cad21a424b126841b58217d249726131b01216c247926771ab7205f2473263e1a7e201a24f525ce19c21ee721fe23df17c815791bcf1ee30c511299183f1c3f06df1a1a1eef200812ec1cbf2028233416951dc92136246417081efd216624cc172e1e10226324c917501ee7214c24c117361eab210a24a117811d452161239616ce1cf320ef22bf15c31cc120b022b3159a1c97206d228115991c6e2025225b157e1c5320fb211715601c2c20c021f514381c0e209421c8140b1cdd1f6a217314bc1bb11f462142149a1b7d1f2b212f144a1b2c1ff7200314e51af71ec7205e139a1ab41e8f20d9124c1a781e67208712381a731e512073129719dc1dbf1f43119719dc1dbf1f431100009a145918000000009a145918000091203b2427250b1c18212425ad26ad1cb4209c240326171caf205424af25d81b9520e9232d25881bad1f85224324d119e21daa215523be18a11ec2225824151a6520d3241726621c4221b8258d273e1de02122262e28ac1d602242265628f31d772241265528d41d4a2238264d28911d2e2226264528791d0e220c263c28441dda21e5252428fe1cbe21b4250228b81cbd217e25b127891c9f2143256c275a1c7e21fb240e27f91b6f21d924d726b71b43219e2495264d1b092178246826d41ab2204c2431265d1a74202a240c260a1a65201224ef25f6195a200224da25e7196d20eb23cb25dd198120e323c4251c1a7420ab23a2252e1ad71f37234725d119b81dfe2125246d18a91b782051220c16371b0520e721e414c11be11f0322ca13991c1c202c222e14071d66209e223715e01ca72008235e15cb1cd52025236e15eb1cd9202223bb15d41cd7201e23a015e71cc720ff22b515bd1ca920cf228515851c7b2089221f15571c4e203a22eb14281c1f20ee219314031c0620b9216b14c11bcc1f84212514b01b8a1f58211b14b11b671f3b21fa13791b3d1f1f21bf13fb1a041ff2203d13c51ad41ec220cd12811a771e79205412481a1c1e4120e911051afd1d1920ab11081a681d331f4b11081a681d331f4b11000000000000000000009a145918000091203b2427250b1c18212425ad26ad1cb4209c240326171caf205424af25d81b9520e9232d25881bad1f85224324d119e21daa215523be18a11ec2225824151a6520d3241726621c4221b8258d273e1de02122262e28ac1d602242265628f31d772241265528d41d4a2238264d28911d2e2226264528791d0e220c263c28441dda21e5252428fe1cbe21b4250228b81cbd217e25b127891c9f2143256c275a1c7e21fb240e27f91b6f21d924d726b71b43219e2495264d1b092178246826d41ab2204c2431265d1a74202a240c260a1a65201224ef25f6195a200224da25e7196d20eb23cb25dd198120e323c4251c1a7420ab23a2252e1ad71f37234725d119b81dfe2125246d18a91b782051220c16371b0520e721e414c11be11f0322ca13991c1c202c222e14071d66209e223715e01ca72008235e15cb1cd52025236e15eb1cd9202223bb15d41cd7201e23a015e71cc720ff22b515bd1ca920cf228515851c7b2089221f15571c4e203a22eb14281c1f20ee219314031c0620b9216b14c11bcc1f84212514b01b8a1f58211b14b11b671f3b21fa13791b3d1f1f21bf13fb1a041ff2203d13c51ad41ec220cd12811a771e79205412481a1c1e4120e911051afd1d1920ab11081a681d331f4b11000000000000000000000000000000005c27101e1921751e7f2cdc246c2719266e2ef526042890286e2f042784282829563016291b2a9a29ad3024291d2a26295130b927e127d9277d2fba240d25d026642ea52290222323942c8c215f22b3a1c42bde20af2412a2342b4a26a725b3a36c2b9c2c1a2e8fa40d2be2284b2c4fa3ce2c54265d2999a5c52c9825ff2956a491306c2887305fa0723200289f31182bb3312e2a82328c2b4d30d22ccd310329382ec227133b4026c52cb0293f3d0326df2b9f2a7d3dd7254a2c2d2b933d3a26c12c562aad3d3427732c8329d83dbf26952b6a29df3da025452bf528753d6525eb28bc291c3d19217c28a828873bef208223ec26f434da1ce120ee245333761aec20b3255532841a1220c628cf304319d122c428412d831c591ebb26d72882180c1ef224bd2664183c1f6d24882641193e1eba2316256f188a1c4022e1237216b61cd22164238a16bf1cad2158237016741dc82157236517ac1c762137232f161b1c4721fb227015a01b0921d4220d15571bdf208d22a014521ba52047227f14661b8220fc218b149e1b6920d7218e14c81b4f20a9218714ba1a332068219e13ed19ba1fdf20b7125419f71e6120de112a19d11e5920af114019a01e50209c116319a21e3a2069116e19991e3820a2113f19211ec11f1c1200000000000000005c27101e1921751e5c27101e1921751e7f2cdc246c2719266e2ef526042890286e2f042784282829563016291b2a9a29ad3024291d2a26295130b927e127d9277d2fba240d25d026642ea52290222323942c8c215f22b3a1c42bde20af2412a2342b4a26a725b3a36c2b9c2c1a2e8fa40d2be2284b2c4fa3ce2c54265d2999a5c52c9825ff2956a491306c2887305fa0723200289f31182bb3312e2a82328c2b4d30d22ccd310329382ec227133b4026c52cb0293f3d0326df2b9f2a7d3dd7254a2c2d2b933d3a26c12c562aad3d3427732c8329d83dbf26952b6a29df3da025452bf528753d6525eb28bc291c3d19217c28a828873bef208223ec26f434da1ce120ee245333761aec20b3255532841a1220c628cf304319d122c428412d831c591ebb26d72882180c1ef224bd2664183c1f6d24882641193e1eba2316256f188a1c4022e1237216b61cd22164238a16bf1cad2158237016741dc82157236517ac1c762137232f161b1c4721fb227015a01b0921d4220d15571bdf208d22a014521ba52047227f14661b8220fc218b149e1b6920d7218e14c81b4f20a9218714ba1a332068219e13ed19ba1fdf20b7125419f71e6120de112a19d11e5920af114019a01e50209c116319a21e3a2069116e19991e3820a2113f19211ec11f1c123f19211ec11f1c12ac209403451cf789ac209403451cf789902b5e2501270125282e15275328aa28922fd027a4287f294d30ae28a229d52987307529c32a492aa3306c28fe28d829a730f125cb26032a48306325d22694286c304c2551270329692fbd25aa2552252228c7253827d0a080258229632c15a0cf296c29542c94a28a265426a128d29f9b2796243428679fee2dd0250e304c196931392ade31ae2b1b317b2cc8321d2cbd2e282cd1305229ae2cd22aab389925692a0d2bd53825246227222a4e38a72094288d298438a021c72854296438de215b28f8286b38e8210528ef288238322133288a29c4385b2047282b2ca539b6200829452cb93957225a25d92843348221b51f46283033901b882120286232a31c5c2080285c30301a9120a727922c9c1902207026b129cb18a41e452583272f18981eab244b265e18931e3c249e255a18f81d6f230825e717911d8a2271243217e81d68225324d217fc1d82224924ec17fa1cf621f5239716451c96215623a815cc1b492115230915d81b3221d822f214b71b0d219d22bc145b1bdc20532285141d1bb42017224114251b9620eb214614c21a61209b21df134f1a2c2047215813d419ee1f07219a128d198c1fd5201c128719541fb520e811cc19161f8d2003121419aa1e73206e111119d51dd51f49101119d51dd51f4910881c9d174c1cc885881c9d174c1cc8854a2944263828d923102d38283229fe270e2f8e28872992295630c928dd29b62aa430dc28fc29082bb2303b280129442bb23011272028d12abe3043276c28302b5c3006274a287f2984302c273d29652838308527ad293122ff2af82550297a9e032b5925412ab29c0a318d262e268f276d320f28ad2a0c2a6d34d3281630042da0313e2ac131fc2bc030fb2be732812beb2dab2ab6337c280729ab29bf392323d928cc29313aba22b727a0299a393b21ad27c72988393421bb27882994395d219a277029be39462121272b29fc39d520a9274e2a353a90219b27f32bf63a472132282f2b983a8e211221de271c34681cea21002986336d1dd32296285232ef1db12006288c2f8f1b54200727f22b481ac720b326152a531a59201426e528c219741f2f259f274b19391f8a2454263e19fa1def2384253e18841d85233125d517b61d4d2328250e187a1dfd22d824c717af1c712265248016751cff21fb230b160c1c91216e237d15cb1b4421dd220915261bdf2076229e140e1ba62021227214071b8520f7215114e91a6b20cc212214951a3b209521ab13871a1e2048219a132a1af41f1221fc12ec199c1fd7208512dc19861fc8204312251a771fbd2091128a19381fc620be11a019a81e59203112a019a81e59203112000000006912000000000000691200006824ec248f26651e422af527db285725a62d782876297628e92fd128cc29ff29a830e7281d2a812b1e31d328092a342c5b31c928e229672cd531ed283f2ae32c2b3220299e2a2a2d87329c290e2b422d8232fc29d42bee2c52334e2a0a2c152da8332c2aa22bf32cf6324c29782bd42cd0327429a12cd62c74329b2af92efe2c2a320c2b3c31102d35304b2a05320b2bef2c812a1a3322280f29de298a337a2406265a299333b7216c25b228e03352216a25b32843347d21c62343284d34002043230d283234791faa2237284534c01ea022ff2713349a1ee7205a271a34d01cf820c2260534a41c50224a28ef33971da522a5289933911d39227c283432ea1ccb200d28f82e6a1bca203127672b1b1b6720e826a429641a79202b26a2287e1a2a20a2252c28e919591f2025952719197e1e7a2481268118651e0324a1255618c81d50231425d717101db8228e24dd169e1c65224f244216c21c5c2242244d167c1c01221a24f0152f1ca8219d236815cb1b58213523ea14a81b2a21d322d3149d1b05218422ad148a1bd3202e228314091b8820cd2135148d1a48206f21a1132e1a15202c210013011af91f13219c120c1af71f1c2176124e1ac71fe4208a12e019701fbd20e811f819df1e7e203012f819df1e7e20301200000000211000000000000021100000302264254727471d7f271228f4283c23d72b48286529f1264d2e7c28a829472955302b298a2a892b57315729b42aa52cc2316b29c42a192d1932a029212b662d5932e529732b9e2d7f32db29a32bc02da9321b2a0a2ce62def328d2a6f2c242e1533772a852c462e4833c02af22c722eec32a92a2d2d042e9a32e12a002ed82ddd31f12a2130012d712fdf2ad5315a2a662b4b2adf3233269029392a9b3392247028232a20344b232326c6282e3423213f26f9285d343b216f24e7285634b61f782416297b34ea1f9924ec2893341220bb24ab2880341d2048248d286f344f1f43237d285934151e7b235a283334061e7322a428dd33181d5c226f281332061d7c200028762ecc1af4203427f12a591bc92087269229f31ab120f825bd28d01a90206c2522287b1a4f201b256e27fb19891f9a248e261b19f71e2524cd25b918bf1efb2385259318491e9e2336254318dd1d1f23e624c417571db0228a241217be1c39224b2420168b1cfa210b24ba155c1cbd21b4237f15321c75214d232815141c3221f1220315131cf2208722e014e81ba4201322bb14a41b5b20a7219314171b1420452104148f1ae71f1d216e13321ab81f1d21d2121e1a8d1f23218a129919611f4821a111f019041fe020f811f019041fe020f8110000ac06931400000000ac0693140000c0212725ff26d11c3a255e286429a1216728b828e0295224152c8e28f0295c271a2f2029402a842af6307329a72a8d2ce831f329472b6b2d7b32302a022cf22dbf323d2a252c302ee332332a0f2c6d2ef232522a462c982e1433b32a9a2cb82e4833e62ad92cea2e1833ca2a212dbb2e3d33f22a452da42e7e325d2ba12df42d1531af2a642e802c932dee2ac030c2287d29b62a653298242429bc2ad1334e24e026532a1d34a62120266a2954342121d325a1297d34e120e424082986342c20d5245729a73420208c243a29c134c31ff12404299e3438209124f2288434cc1f7323ab287a343d1e8123bf285a342b1ec222e4281634711de922b7280f32751d5021a527552d1c1ce620dd26162a6d1b3d21ce267d29c61b3f218d2620299d1b8920f9257e28961af11f5b25f827a319851ffa2486275619191f87240d27ed185b1e172434266918e81da72393250118461d342314252717391de722b524eb16091d812279248216e91c222223243016a91ccf21bb23e0156f1c782134237215221c1e21c122f214c61bcf204f22a7140a1b8d2001221914841a5320ba2196133a1a32208c210e133c1a1e206821dd122c1a0d205021cb125a1afa1f2321ca12051acf1f26213e12271a5a1fc820f812271a5a1fc820f812000000005e060000000000005e0600005b21ca246c26671c522490289329ff204d26e828052a9622c028ee28712a9624bc2c6129da2a92280230d4291e2bbd2b9431d329402b342d9032422a012c3a2ee232b92a5d2ca52e2833782a202c062f4633682a672c412f4933042b9e2c442fb933db2a7e2cb32f9a33322b3c2d762fa533ac2ac72c612f5332ce2ace2ce72d06307b2a242d412bd82bf92a622fd2266628022a06315e232d283a2a2233dc229827f5293f341e22812723294f340c223e268b2983340721ed246a29a734f01f2a259929d1343e20c1246b29e034d01ffe243b29bd341a20c8240b29b234db1f1d24c428b234a01ebe235b288e341d1ef5237d283834281ee422a0289031551d1521be27aa2cb41b9f216927612a421c2421fd269429a11b8d203626b8289c1a1720a2253028f0191f205c25cd27da19dd1ff324432775194f1f94249d261219e51e33240526ad189e1eff2388257d18371e91233f251d18141e3423f8240618a31dc022ac2448176d1d77226424d616141d20222d243d16c41cd021eb23da158c1c92218b237015781c53212c235815361cf920d822e714251cb2203722b114821b4e2078214114371b05202621b613c31adc1f19213a13e41ae01f13212513481ab51f16211d12f819fa1e94206e11f819fa1e94206e1100000000390f000000000000390f000044212725dc26941c8124a228aa29fe20b22515294a2a0b22ef262529a12a0623d428ba29a42ae424942ce429282b9028fb2fb229142bf52b9f31252ab12b9b2da7324e2a222ca22e4c33092b972c822f8a33252bb02ce12fd533ca2a6c2c0830a233e32aa02cda2fcb33ed2ad22c03306c33eb2ac62c662f4e31f12af12c1f2dad2dec2a0e2d34293f29382b802d8f2418285f2a5f2fdc22ee27f029133284228b27012a333433225c259e2982347d208e263f2ad7347e21b1259429e534c420f3247f29013525201b255e2911354620d0240529fa340820a224ff2804359d1f4f23cc280f35011eeb224e28ca34931ddc23dd288134351ee42299281031391dac21c6273c2c4c1c282283270d2a921cc6215427b029491cf520ab260b29321bad2020268f28ca1a42208725ee270c1ad91f12255b27721908201d254b277719cb1fdc24e02649192d1f87246726c0187a1e1d24ea254a18f31d5d232a25b0172c1dc322af248516b81c4e226224cc15741cea2119247815701ca521ad234f152a1c52213923fc14fc1b0721ce22a614751bbc2068223914181b7b2015220414cf1a4c20e0217f139c1a2c20b0211013841a21209d21f712e11a1d206e212213741afe1f5521e612891a6e1fee20c712891a6e1fee20c712000000009a140000000000009a1400009121d2259427ee1c9f249b28bc29e72004254f29e62a672110267729292b6e220e261c2a612b6c225328f7296b2b7324852cfa29b22b94280330472a9d2b102cc831902a0f2cf32dbd32872a172c252f8d33ca2a712c1130e533d02a822c4030c133662a562c1d305433842ab12cc62f12328b2a822c262e252f342bf12c022bbc2a772ab32c2d26ee26702a132dea21a127812aa82d4522ec27ff29193062225328792a4033d422d426de2997348021c6258429f434a7201925612921351b20fb24d5293335de1f18258d294a350620bf25fb2840358a207c24eb2855353a1fda23ff284f35531efb22a9283335831d23238b288234a31daf214328942f651c42220228ed2abe1cc7217f27c629611c3b21f7265329ed1bea206d26d828721b9220f7257628c81a3e207b252b28281a2b204a25ee27eb19f51f0f255727a6191f1fb824cd26f218981e752470269418421e2b24eb253e18bd1da7235225c817591d0223eb24e816411d922283249f16c71c11222a240516931cb821b6239e15591c632138233315381c1c21c6220d15bb1bce2061228114191b7f20ea210514ce1a3f209d217e13821a11205021f5124a1af11f2921b9128c1adc1f09219512471ab31f2121b612011ae01eac200912011ae01eac20091200000000f316000000000000f31600009d21e2258e27e21c6724e528ff29292142254729a92aea21202650290d2bb122b525b629272b0e2205270a2a242b1c231828082a002c26247d2b8d2a572c9627ab2e0b2b632cdc2ac930bd2a4d2c142d3d32a52a712cb82eb332182bc62c362f8e32e52ac72c0f2fcd31fa2ad62c272ec32fe62abd2cfc2b412b852aa02c1e27b727752aa62c13235226292a712c7f21f727212acf2ccc225b260f2a2f2d53218b269929ca307a219226b6293b3481215f258b2921357f20c72578295135bf2070245f296535271f8625442977355c2075247f298a35e51e2825f4289435d01f1823b7288c35431dcb2495288f351c1fac24f028a334c91ef8210229442e551cf8221328902af31cc32133275129171c8f210c273c29b71ba921a626de28ad1b8e2143267e28881b02210c264f28a11aa720c6251d28291a62205725b627aa192020dd240d275519dc1f86247c261419f61e2c2409266318651ecc238c250818d61d592334252b178f1d0d23df24d416351dbf2294243a16231d6e2258242516051d0f221a24d815e61cb321ba238c158e1c452133232915151cd02091227e14871b7b200b220614521b5420ca219813551b51209f215e137c1b45206c2149132e1b0e20642172133f1a5c1fe0207a123f1a5c1fe0207a12000000002114000000000000211400003a21a92566278b1c7424cd28e729392116250629512ae2219b254b29dc2a3722d4259929182b7622fc25e829912b72222826342afa2b56222e27be2a3d2c64230d29b12a362c32252b2c7a2a282c5b288f2e322b8d2cf52a952f232bd12c152c472f7c2a8e2cb82bb32d522a632cf4290c2b8b2aa02c23271828c12ac82cc6236226782a9a2ca621e2262d2a8e2cc4214b27502acb2ce0211b283f2a452c7c22a5266029352d24216926592989311021af265d29eb344721b42644298835662151246529a335f51ed9247329d435a71fbe240129d935301f4f24f628fa35641e16241129db35ef1d8823a628e235771dd9238d280734b21de5202628232c1b1be4229c27122a001de0220228fa29fe1c6221d5262629a41bc121d4263729161c13218f26d028341bbc20fb254b28931a7a209b250628371a1f2036258227b8197a1fc424c8261119f61e79244f269c18661e2b24fb253c182b1eeb239b25f917df1d782348256617cc1d0823f7241f178b1d9c22a924a116731d512265248516271d022218240016f01cb721be23c0155f1c57213f23f414ec1b1821dd227d14ed1ab8206622a013ba1a2e20a1213113ae1aff1f5221ed12cf1af51f1f21d812931ab91f2c219c12d7190d1f1521df11d7190d1f1521df11000000008d150000000000008d1500006d21cf25aa278b1c4024b328d729fc20f924e028382a98216f253029bb2af021a32579291a2b12221526e0299a2b5b2260261a2a092c75224626762a102c5b22ec259d2a1d2c17227127f82a742cc723c528a72a5c2cfc24d729512a542c1a26ad294e2a682cef257d28b12a962c9e242c27ae2a992c0923a1267a2a822c1522a126fb2aba2ca9215927a32ab12ceb21e126272a6d2c6f214527422a4f2ca0217727eb291f2ce52142258b29d32d3c200925aa2931332320eb24b7299b350b207224052a00362a1f6224c0292e36c81e1e2579294636c11f682453294c368a1e40232c294036601db92308293c369b1d462341281632471d6e243b28f62a6e1e7224f527f229741ee6219a27c229301c4d21fa260d29871b7f21bf26cd28a11b5c21a326b428701b08214b269028d31aab20e3255d28541a522065251628b819da1ff724652733191e1f87249326b618751e2024f2252c18091e94237725cd17b71d17231e2505179d1dbc22dd24e516451d5722a4244e16191dfa215e24f015d71c922109247b15ba1c3c2183235b15871cf820f222fc142a1ca8206a229514a01b6e200a2213144d1b3e20bf219213461b39209d218b13d31b48207721dd138e1b1f2089210914b11a861f2721f012b11a861f2721f01200000000d313000000000000d3130000fe201425a3266c1c5524be28f429152133253f299c2ad9216b256029fb2aeb2195259129342b0322e825cc298f2b2c220726f929ca2b1b225126202aeb2b33221c26452a0c2ce621b126af2a3c2c90220127632a192cdf2211275f2a022cef22fd260c2ace2bdb22ee265b2aec2bb0228d26332a4b2c02223727122a352c46226026592a482c3d215026142a442c16210826eb293b2cdc204c26eb29472c12217926c2291f2c37211e25c9293e2c1f206d2528291c2e4920ff2493296034bb1f5926e8296836d020d9234b296c36d21d9d2477298e368d1ece2338299e366b1dde256d29ad361220022547291b36f41eab241628282f7b1e6123d027332a1f1d862241281c2a871cf4223828262ab71cb8243e270029671efb219026ed28eb1bbb216026a528961b77211f265a283c1be920a8251928801a6d202c257e27b8192b20e42402278519df1fa124a32616194b1f4a242026b6189e1ef5239d2546181a1e6c234625b017d41d1f23f6245817861dca22b424f6163a1d75226c246b16fa1c0b221f24f415cf1cab21b9239a157f1c37211b2318152f1cda208f22be14f71b9e2033226214c11b7820ed2125147c1b5420c521c3139f1b2b207421e7130b1bbb1f3d21db12141c4e1feb201d12141c4e1feb201d1200000000d113000000000000d113000012218d253b27541c6524d328e629bb20bb24eb28442a3e2101252929c02a64216f259029432bda21c325ff29eb2b1d22f925412a252c25222a26672a3d2c3f225826762a4f2c3922b0268a2a522c7422a626802a262c50222b27d72a3a2ccd226c27e92a512ced22fa26fd2a602c4a22b426b12a5c2cd4215e268f2a6a2c55211826602a602c0121fa252c2a582cd120eb25e729342cad20b525d6292d2c82209a25a829292c5620ca256b29042c632098251329092c3d2070240f29d02e961e3925d4295135951ff024be29c236da1eb524c829d6363c1eb225bf28e0362d1f1c235c291c377b1c982556291e353b1f5d244c28ff2bc71def237328132b611d892359284a2a1b1d28235127ab29da1c9521ad276e29921b1422492746291f1c8821cd26d728801b292173269228ff1aaf20ec2538285a1a2b2055259327a6199e1ff824f0260a19ef1ead24802697186d1e552416264118221e0a24a425ec17e71d81233a257017e71d0d23e5244117bb1d93228e240a17991d2f224424b216281dc021eb230116c11c732185238915521c2a2126230815011cfa20df22a914731bc420c72238143c1b86205422f713591b3e209221da13641b0d202d21aa13351bd71f52217913b21baa1f3b21bc13b21baa1f3b21bc13000000001516000000000000151600006821682502279d1c1924af28dc299c20a324a128e6291121db24f2284f2a12210e254729c82a49219825c829822bab210926252afd2bd4213d264e2a1c2cd22139266b2a2e2cb5215526742a412cb5215626812a582cb6219b269e2a782cd9217326982a692c9b217f268c2a5f2c8b216126782a512c57214026622a4f2c092117262d2a442ccf201226292a4b2ccb20f2250e2a3d2c9920a125b429182c442040257b29df2bf51f38258d29092cbe1fe72596290a2c4920652448299a2b3e1e58245d29ec2e081e76249c2983350c1e8d2427291737e11d02242a295b370d1ddb24042a04371e1e36211328a631911acb2208276b29641cb2232128172af81c13247c28cc2a651d72220528032a441c9b21e027a0296c1b952133271d29641b3821a826ae28e81a2a2147267b28ad1a0d21ab250a28871aae203c2568270c1a2720f42401275e19b21f95248126f818181f4124052678189a1ef52394252918131e5a2327257617d11ddb22d12425175e1d53227a246c16081ded2130240516c31c9421d0238b15af1c4a215b237515661cef20c722fc14111cb02053229b14691b6820e1211414ee1a262087216813ce1af21f4f210f13f61abf1f0e21ff12a41a3f1fe8207612541ad21ea4208e11541ad21ea4208e1100004c039f18000000004c039f180000a821ad258627a61c17242b282429462069247c28b729f620b12407295e2afb20da244f29d32a11216225d6298b2b7421f325512a172cd6212626932a472cbd212726b62a602c8b212a26ce2a762c75214726d02a852c75216f26c62a852c7e2162269e2a752c58215126832a742c312117264f2a662ce7200926322a522cc420eb25162a442c7c20de25002a342c5a20c125cf290e2c2d207a25ac29fa2bc71f19258c29dc2b3d1fd4247c29f92bdb1efd248f29272cec1ed2243029ee2b8a1ee8258128762ad21f91244329622de71d02231a2945346b1c4724be280736411d8d2228294834d71bf3215628652c1f1bf4209f278029ee1968238728bf2a501c45224728ff294d1b69239327b8296f1c812200288829fd1bce2151271929501b6421b426da28f71a0d2122267228871aa120b725fb27221a30204e2560276919c91ffc24022728193f1fa9249426af18d01e522426266718481eea23ad250f18d61d342333255b176f1d9c22c324ad16161d1a2256241616da1cac21fe23ce159b1c482171235d15c61c1e2117236815d31cf320c2224f15c11cc22084221515bb1c93203b220e157d1c5720d421a714351c1f209e215d14221cfd1f60212714391bb91f61214313071b1e1fed20f111071b1e1fed20f11100003e159018000000003e159018000056222e26e927b91eea22c52704298f1f16244e287329772065247b28d6299720f4242f29a62a19216f25e7299b2b6b21a325642a232c5a21de25b82a5b2c61210426dd2a7c2c54210626e12a8f2c24210b26d82a902cf7202226c42a892cf0202726b12a792cc22017268c2a682cb620f1255e2a542c8120d2253e2a432c5120c225122a2d2c2e20a625ee291c2c1a209825d029092cf11f6c25a829ec2b871f42257a29aa2b211fff245029762b9e1ef1242c294f2b3a1e02252229442bfd1dfd24e5281a2bf81ddf24ee28ba2b851d8d23e928222b281c322209276d2b9f1a40204627bf2b6818da216628b429121a73247b28e92a9d1c1a236d28632a5d1bcf228b28742a471b7d2358281c2a1f1c25232e28ea29291c6f220528b629b31bdd2165273729641b7021ba26ac28071bde2038264b284a1a9920b125f627f119252029254d277d198d1fa0249426e118de1e2e24fb257018661ea32372250818011e132300259117e81d9b2296244217aa1d38224924c716691de32108244d160f1d8f219c23bb15c61c38211c236815451cd4209f22b314d51b91203b224f148f1b6d200c220a14821b5520d221c9135a1b4120ba216413901b32207e219a13a01af41f64217312b31a841f48214e12b31a841f48214e120000821a221c00000000821a221c0000222206269b27691efd2205281c29bf1fda23452890295a201f248528e4295f20a0240629842ad5200425ee299d2b15218f25e42a6a2c5d210d265e2bcb2c5c213d265a2bd92cba203426312bbd2c4e201026012b9c2c1c20ee25d32a7a2c0520aa259c2a592cdd1f87255d2a362cd91f5d250b2a022cc91f2f25c929bd2bb01f1e25b229ab2b981f14259e298e2b5f1fea247d29712b221fb1245929542ba91e95243029352b5c1ea52408291d2b261eaa24f328fe2ae11da724ec28f92ab71daf24d628ee2a751d4d24d428002be01c5623b728eb2ad71b96245f28312a9c1c5623be28c92ae71ac9239a28af2a151b69238d28712a801a5023c628a72a6b1acc22c228b52a2e1ae3229a289a2a241b992279283f2aaf1b3c223f28e329a91bb92187273c29361b24216f268428a51aa120c625f727221a2c203f2541278619bc1fe624db261f19821f8d246126f818341f2924e925a718e91e8f236a255b18a81ed822f5241618671e6722982475176b1e0a2249244517311ea621ef230417c11d57217c235616391d3c213823bf15ba1cfe20db223415581ccc208d22c814e31b852033223714831b5820e921ca135e1b2720a021a413631bee1f5c216d131a1bae1f37212313a81af41eaf20d711a81af41eaf20d71100000219571b000000000219571b00006e220726d1274f1eb62224277f28041f5d239a27e228d01f1e242a286a293d204224b628152a6220dd24af29582bed20d9254c2ba62c8c2180263a2c732d2221c9264b2ca02d46205e26042c412d021fff25572bcf2c991e2b26042b912c2f1fac257f2a3e2c821f2525fd29ec2b241ff024c029992b021fdb2471294a2b0d1f812427290c2baf1e77242029fc2ac41ea824ff28e02ae81ee424d928c42a421f9c24d328ac2ab11e6424b128862a3c1e6e24bf289f2a261e4924b628a12acf1d4024b728ba2a7e1d1324b028a02a011d632374285e2a2f1ce6224b285b2a281b88224e28632af019ac228328932a3819a9230229232b411915244729772b9a1933246629902b081a2e245a29842bcd1ae9232129122b1a1c0c238928262a371c032281272b29f51b5821be269b286a1be120142620289e1a6c2030251e27ff19c91f8a244a264719de1e2224ad258c18261e90233725f217dc1df622d3246217b01d62227424fd165d1de2211a246b16221d8321b7232416eb1c3b214b23bb157d1cef20f8223a153f1cc720c522d014d71b92208a227114751b50202d221b14001b0320c421b513cd1ab51f5d210e13bb1a9a1f3121c312ca1a811f1221d312a21a761f4321aa12301a061ff820a111301a061ff820a11100001915fa18000000001915fa180000be21b4254127171ec223002762287c1fec210926d327481eb2220b27a1281a1f5023ca275029c11f8723ee286e2ade1f58250f2b9c2c54210528892d292ff7212b280d2edd2fc81e1627cb2c392e761b6425f12ab52c651bcc248629532b471d022522290e2bd51dc2240329c12a0f1f6e24e228902a231f6224cf28872a341f3f24c628762a1c1f3c24be28722ad31e3624b028642aa71e2b248d28412a951e1f246c28142a611e1a244c28f029371e04242b28da29d51d04241328c129721df6230e28b129041dde231528bc29b51ca6231828d329551c3b231c28e129441b51234228112af4199b23a1288e2abb18f22320292d2bd9160924ab29bf2b78175c24442a3c2c9718a4248d2a682cf61a5a243d2a2b2ca71c1f232b29e92a7d1cff21a3271c29111cdb2012265f28be1a14204b2595278819c91f87246c262819b81f3224dd25fd18fb1ed323872582185c1e21232d251c18b31d9b22cd242f176b1d3e226f24a816171de3212a241716151d9021ca23eb15071d3c213623b215c01ceb20b92261157a1c9b204922ed14191c5520e9218314c31b2220a42126140b1be31f6e214e13b11a7d1f3021ba125d1a371f022165125d1ae31ed3203112191ac61eca20bd11031a441e3820e410031a441e3820e4106a19e91e8f207e886a19e91e8f207e88e9209524ba25be1cf021952513271c1e52229d252027801e552284255b27841e2a224c256927711e1f241b2632285f20af2229265e28e11e7d26d62ce02deb202c2c96314733b81fd026782c612d491fc22151276a29771d28240f28ba29e41f0424d727b729ba1eb523a7274729b31ede23b7273829f71ee623c9273b29de1eb723aa273529b61ec123a8273b299e1ebf238f2736299d1e9723532722295b1e8723242707292f1e4923d926ca28df1de1229e26b7286f1d66225e26aa28f41c0f22452699287e1c38226526b628511c5a225026b528ce1b9c226026b6287c1b15234b268a28371afc22f426eb280419f4227a28512a8b15f3231a2a1a2c0f843f254d2ca92d048ce225b72c322e7119f525032c3e2d8f1e1e243f29fb2a951d8a230f27e8285a1d51213f257f278c1bd620a5244626b71a0e2044240526a119c71ee023bc259818501e072324251418311e75229e24ce17e41d23224f243c17d31dda210f24f8168d1d9821c9237616501d412168230416c51ce02018236715751ca2208922e714391c62200d22a614011c2020b7212714cd1bf61f7b210c147d1bbf1f48218713401b941f31210e13f51a6b1f1f21fe12b61a471f262151125e1aff1e02213312cc19df1d1a20b710cc19df1d1a20b71000001315991800000000131599180000902023241f250a1cbc2196251427b71dc5216d250827c01db1215d25fd267e1db2214225c6263a1da921b7240826781c821fa221cc235f186b16271c2e1e100fe01c8c204422b317e021822544271b1de4236227f628bc1e1a249c271729221f3624a9271529531f2c247a270729411f00243e27f528f51eea231727e328c11e9223d426cc28761e6f23a826c028581e27237426ac281b1edf2237269228de1dd72217267528bb1daf22f72553287e1d6222b7252628241d1b2293251128b91ce7216125d327791c97213025b327261c9021162581278b1bc021ee244727cc1baa2232252627691cf622fe244627631c0022cb234f265f1b131fb0258228c2150926f32c462ec7959a29a0309d31141a2e257c2cf42d2c20fb1d8c2513288918511f6c23d42532198e1e092321258c18d71e092308258718d81ee022d0246c186b1e72228d24e217491e27225e248617c11de1212f24b316831dab210c246b16331d54219d23e315c61cf4202a234115a41cb220a622f614971c6f203422e714551c3220c5217e14311ce91f7a213714121c9c1f43211814df1b691f1721e913b21b571f0221bc13441b301fe1201213d31a051fc020dc12c31af51ea42095123a1ac21ea2200f129a190c1e2c2018119a190c1e2c20181100000a0fc815000000000a0fc81500005e2015244e25011cc820c2245426761c0421db245326ae1c3321e0245726b01c34217c24cd255b1c3420b1227124d619f21d962081226918db1d3d22e8238f191e212b25a626051d9c22bc266728461e2123f92699288a1e2823e3269228731e0e23e8269a283f1ef322e2269f28431ee322c7269f28191ec722a5268d28e51da8226c266928ae1d76221a264928691d7522fd253728331d5022e5251d28e21cf921aa251c28861cf5218a2513286b1cee217825d127351c442229254627401c8a22d1241027391c3722b724c826a31bfe219624b5265d1ba72170248026c31a252145245526271ac720312460269019c7204124552690199121292434267c1aad1fda22f9241a187110bb1bc21d170677119619121da9036f1ac11e51217011631d3c21d4237216181e1a2252244b17591e1b226d246517bc1efc214b246917031fbf211b24b817281e78219d23c716091d1c211b238b15da1cdb20d1225715b41cbb2092225415a01c872042221715701c65201822e314401c3620d7218b14131c1220a5215b14e81bdf1f7b211914a81bad1f5521f113871b6b1f2f21ce13441b1c1ffb204d13e71ae21ecc20b812ad1aaa1e95207f12641a731e712004123a1a5d1e5120dd11b019c81da71f2c11b019c81da71f2c1100002913f416000000002913f4160000482053246425091b3b214625aa268c1cc820ac241726011cc2204a24ab25831b3a203923a0248b1aaf1e8b215a23a418701e8f222a247f194220be2417260b1c6c21f225e327261d582274266428eb1d6d226d266c28cb1d7c2269266828a31d8f2264265d28b41d87225a265b28921d732247265328811d62222a264a283e1d2322f0252e28f21cfa21af250828871cd9214e25a6270f1ce821fd244527d21be121ba24e226391bd2219b24b326f71a832167247b266b1a1f2144245226201ac7202a242926b7198c2017241a2695196920062402268f194c20f723ec256b195420e723d42575194c20d823c9256b192b20af23c62541191520c023f32546192e1f59238225de18441df22141247a17bf1b51203c228015801b901fb921d914631cfa1ffd216c13a81c402098223c14a51c91201823ac14a91cc6203723af14da1cca2034233015df1cd5202b235d15021dd4201e238315f31cc420fd227215b61c9f20bc220915701c6d206f22bf14371c33201b2281140c1c1220db213214cf1bde1fa5210c14be1b9e1f7e21c813c11b6e1f5b218b13891b3b1f322155130a1bf61efd20da12c81ac51eca206212801a731e84201e12371a2c1e4f20a611de19071e2e2056119819801d7b1fba109819801d7b1fba10000000000000000000002913f4160000482053246425091b3b214625aa268c1cc820ac241726011cc2204a24ab25831b3a203923a0248b1aaf1e8b215a23a418701e8f222a247f194220be2417260b1c6c21f225e327261d582274266428eb1d6d226d266c28cb1d7c2269266828a31d8f2264265d28b41d87225a265b28921d732247265328811d62222a264a283e1d2322f0252e28f21cfa21af250828871cd9214e25a6270f1ce821fd244527d21be121ba24e226391bd2219b24b326f71a832167247b266b1a1f2144245226201ac7202a242926b7198c2017241a2695196920062402268f194c20f723ec256b195420e723d42575194c20d823c9256b192b20af23c62541191520c023f32546192e1f59238225de18441df22141247a17bf1b51203c228015801b901fb921d914631cfa1ffd216c13a81c402098223c14a51c91201823ac14a91cc6203723af14da1cca2034233015df1cd5202b235d15021dd4201e238315f31cc420fd227215b61c9f20bc220915701c6d206f22bf14371c33201b2281140c1c1220db213214cf1bde1fa5210c14be1b9e1f7e21c813c11b6e1f5b218b13891b3b1f322155130a1bf61efd20da12c81ac51eca206212801a731e84201e12371a2c1e4f20a611de19071e2e2056119819801d7b1fba1000000000000000000000000000000000bb266e1c1120cd198f2c942470272a25642e01275828d9271a30f228292aa528cd30ba2a772cbe29de2f3e29812a2827342d9f261128a618bc2b2924aa23e896c22b7022381d709a712b0324d62092a4672b00001b1a05a5c42e72252e263ca93434c92c162da0ac2d3c6a2c7e2c7627463d4a2d8b30e632ef3d172c91307e31393ede2a43335a1ea835832bf9339b2c8d32a82fab358a295331ef306c374e272d30b62b7239ff25e72ac72963396521d32418293639b21c0e2303295639501bb6222c2944399a1ba42133290a39631a36228129e438091b3a220c2a1939aa193525d92c8e395016112bf030143add194a2bda304438b321c4273d2c433546208224ce290133d21c5e20b828b62ff3185f2056260f2ba619c71e2225b327b318251f94246f26f518701fa4248b2629195e1e04246f255118331d98227424e316d91cff21e6236b169b1cc4219723f315351df121ad23ba16e51cac2181232b16641c7a2148238915fe1b32211b23e9149b1bf920cf228d146f1bb22084225414871b87203b226214a11b78201a225214a91b5520de213714f41a3a208d21a713111ac91fe420ae125f191b1f7220be113719e51e802068115f19d81e912092118419c61e78205e11a319c81e5a20aa116419421ec81fc3110000000000000000bb266e1c1120cd19bb266e1c1120cd198f2c942470272a25642e01275828d9271a30f228292aa528cd30ba2a772cbe29de2f3e29812a2827342d9f261128a618bc2b2924aa23e896c22b7022381d709a712b0324d62092a4672b00001b1a05a5c42e72252e263ca93434c92c162da0ac2d3c6a2c7e2c7627463d4a2d8b30e632ef3d172c91307e31393ede2a43335a1ea835832bf9339b2c8d32a82fab358a295331ef306c374e272d30b62b7239ff25e72ac72963396521d32418293639b21c0e2303295639501bb6222c2944399a1ba42133290a39631a36228129e438091b3a220c2a1939aa193525d92c8e395016112bf030143add194a2bda304438b321c4273d2c433546208224ce290133d21c5e20b828b62ff3185f2056260f2ba619c71e2225b327b318251f94246f26f518701fa4248b2629195e1e04246f255118331d98227424e316d91cff21e6236b169b1cc4219723f315351df121ad23ba16e51cac2181232b16641c7a2148238915fe1b32211b23e9149b1bf920cf228d146f1bb22084225414871b87203b226214a11b78201a225214a91b5520de213714f41a3a208d21a713111ac91fe420ae125f191b1f7220be113719e51e802068115f19d81e912092118419c61e78205e11a319c81e5a20aa116419421ec81fc3116419421ec81fc311e01e0000061a2b90e01e0000061a2b90302cf225992724259b2e58283f29452806306029a92a332975308629802ac329d6301329912ac929223097258f278d28c02ebe228623102587286120271cffa166240d18eb205e9f8f2615193721dda02a2835239526f9a2da2cb129922bcea5be362c2db62ebb24d0386d2e2830c22c2f39192dbc2f4727ac3a2b2c0532e5ace4341d2d0034eb2cb6311d2d5334332b5530e72c7d355b28862de62b9339d9248d29ff2aab39c22165278f2a30398b20d526a129c138162013280b29a0387c20fb23a228ea38491d18240229d838c41cc423422953394f1b7425d12bc039431c3c271b2dea39bb1caa273e2db736d42032243b2cd034171e9a23a12acf32081d4c21f328e02f821ac8203a27082c91198a1f1726b4298318a61e292516281518551e96245926fb176d1e30249d250d18a31d5e2326251a175f1d9f2297249916971d56225324de16371ea9225924a3179b1d3b222724e316a31cab218723b215211c5b212b231215081c3121e522d314091c1321a722b314931be0205e2269144c1bb92026222214561ba520f7212714eb1a7120b3219d137a1a3a2063212113db19f61f11214212b719a31fe520ee11a8196e1fbd20af11a119231fa920a9112019b21e8f2027118719ad1d911f950f8719ad1d911f950f241b7c185f1c1a88241b7c185f1c1a88b4292527c928ea23682da028ae29ad27882f2d29382a77297e304629882a3c2aeb30f928102aab2aa130c327fe288a2948304925d2264e281830d62403260222202ce5234625f9a2dd2a821e442545a0ef30a326c32632252a326928a527cd2977327c275e2ae82a6834d929612bfe2caa399b2bba2d252af83bb42ace301a225a342a2b5532a32bb231f92bee32a22acc2f522bb4344a28e62b9b2a33391824bb28ad2a2839c120f126152ad238a41fca25ab29d0384c1f84254b29d438f41e5f263a29ce38d31f2d244629fd38651db123a3291e39b91cc2246d2a0339ef1c90228d2af238981a5d242e2aec35cd1c7a21b729c1349a1bff22ba299032bf1c0c229a282c2f011c26216527ce2ba71ac920c326382a081a71203a260b29991908204b25d9275619691f96247c260619411e1424c8253d18ad1dbd2358258417ac1d67233825b017ae1d2723f724b4170e1da8228524b116ca1c35221d243016391cb721b4235315ee1b5a211923de14381bf220a22252141b1bb92044222314191b992015222214231b8320ef210b14ca1a5120bc217913a31a3220602118134a1a13202621b912191acf1ffb205212091aa61fea201112141a7b1fe0201c12b819491ff02091118d19a71e7020c2118d19a71e7020c211f715d01879152401f715d018791524011c2446243c25f31a232b6e287b29f4245a2e03293a2ad02844303b29862aeb29ec303729872afd2a73312d29822ae92bd93125299d2a272c76325d299f2a962cd6329d29bd2a6b2c5e33a329d22a672be832a5290f2b9a2b7533f329df2a1b2c38339f2a3c2c6f2c99339c2ae62cca2c8e33f42af62da42c2c33382ce02fc02c5c334f2c2131fd2c7731f72b3532952bb02eb12ad6338928a929eb29aa34db235627df299d343521dc263229dc3417210c267a292435e020b424e2281e35bb1f7b2436294635811f7c24242ac835a71f0b24c229d335c51edd235a29bd35761ea92375293b35ee1db0237c29ad34941d4d2435291634d51d6222db282d323a1c1f213b285a2e9e1ae3209527772b511a5b200127be29c51981204226ab28f7195020bf252f28b619e11f5c25022817191d1fbe24ea269818a51e1024b9254b18021e7c234025c417451df922bd24a516be1c8f226624fa15bf1c6b225224fb15701c2422352474155a1ce421f1235815161c8c216e23e414d91b4421f5229214b71b15219f227e14ab1be1203c225814271b9f20ec21e013b61a6820982164134c1a37205621bb12391a1c20362174124a1a0d2035215212801afc1f06215312461abb1ff8201b12d919331fe820e011d919331fe820e011d511141951158f80d511141951158f8015230525eb25cc1b4f28422846291523902cc728eb29a427422f26296e2a8029d030ae29362b9a2bb831d6295d2b842c1032c429622bb12c6b32132aa32bdd2c9e32512aaf2be92ce332522afb2bff2c1c336f2afc2b0c2d5733202b682c352d8633212bb72c392d00349a2ba52dae2d6933a62b552e432d6a33e62bba2e612d3833ec2bf22f202d1b31702bfc313f2b5e2db12a6e337327182acf2a513422240028762ac9348e21d9264e29d034dc2017277b29b83442213f258829ce34f31fe825ef290f35aa20e124052a4535b51f5224b8293635d31e7a2476290635ed1e04243b29c034f61d5324e6287734471e4323fe280b34281d7623b228c0312d1de7210c28132e001c65216e275b2b501b1b21d726352aec1abc2039262329451a8420b0256728fb1949206425e727ac196a1fb524d226ca18fe1e3e24fb258518971e1224a3254218471ed82364250e18ea1d5723102575176c1de422ae24d516d31c68226b24ee15ae1c2c2228249915881cee21ea236c15521c9c2179230815281c4f211f23b614171c1421b422a114ce1bc02043224b14951b8720d3212c14fa1a3f207c217513841a12204721f712571ac71f38219312341a991f32213c12bf19781f5d212412871a2f1fbd202512871a2f1fbd202512000033172815000000003317281500000122e6241a26fe1ac425b928e5294a2141293f29e32ad224f02c1829852a232823306f29f12aee2a8e31a8297a2ba72c4932592a002c2a2dc132b32a472c712d0433aa2a532c8a2d5033922a282cc62d5733072be52ccc2d7a331a2bae2c062ea0335c2b4e2d252ecc33fc2b2f2e482eeb33db2bf32d412e84332b2c1a2ef02dd532a72b702e2d2d4230002c9b30512a002cf42a3b32ae25302ae02ae4334b246b28f72a6a34fd217027c4298f344721ca26bf29b934ed20e7257e29bf3461209a25d529e73456201425d6290935032031259929e4341920e7247429c034961f1a240d29a734371e592433298434731edb233e292534b41d8023ca28b831711dcb22f027ff2cd31c22214327572a201b67211327c429801b2821ab265229fe1aad204626b928571a292094252528a419821f1725d827f8180c1fa9247927aa187f1e4024a4263318181ef123ee25e017a91d7e234a2522177f1d1123ce24c0164d1daf22972458162a1d4f2244240316e81cf521f023b615ad1ca9216d2372153d1c4721f322cd140e1c0421852276145c1bb92032220d14ad1a7120e9215913451a4320b921b3123a1a23208b217512331a122079216d12581afe1f3d216012011ac21f34210912191a541fc6208512191a541fc62085120000000000000000000000000000000003202722632346161e250c29522a1a2138274429b12af722f7298929242b3025172ee229aa2b6529d030022ae82b2f2c4f32162ad92b632d11338d2a302c082e3433e92a6f2c262e7b33172b732c802e68334c2bd82c8f2eb1339f2bcf2cd02ecc33a62b402de72ee033fa2ba62ef92e0e34b92b7c2dec2ecb33cc2b672d872e11327b2be92de32c8d2e892b922ff7281d2a492ab9307024c4289a2a1b33c4222228742a7b34bc215b27c8298934392158261d2ab9348120ae25c429e4340820d425cb290b353b205e25d7292135f71f3425b729ff34b81f32258329ef34e01f1724ff28f734121e7a24d028c1347f1e5b24ca2842342f1e3c23b9282d31221d2d21d927c02c591bcd20b227f42ad11a2d219527412a2f1b992073261b293c1a3d20ca2551289c1928208e25ea278119e61f26258c271a19961fb324eb26e618071f4a2437268b18b31e2224b42539181b1ebc236125b217061e542312256617811dd722c5249616661d8d227e2449161b1d37224924f215d21ce1210a247615a71ca921b3234515a31c78214d231a15681c26210823da144d1cdc2075229814281c7a20a7214f14021c24204321cd13261b09204121f512ff1a00203421ce126b1ab91f2121d611341aea1e92203e11341aea1e92203e1100000000bf10000000000000bf1000004c2041224623b8160a2508292f2af2207926af290b2b8e228b2797296f2b0a23772a292a412b0926782ee329782bef295b31392a022cd42cf932cf2a302c652e7e33642ba72cdf2ea6339e2bf02c232fbd33872bea2c582f1634712bc22ca12f1734972b142da22f2c34952b3a2da72f1e34e62b642e6c2f8733ea2b682e8c2ef730ab2b6b2d142c312c3c2b062e7c265829502a5d2fc123aa28592aec31c5224228862a19342e22bb25202ab7344020b5269b2afe3415213826c3290b35b7208025ec292e352b200825002a5c35a01f28257e293e35fb1f402551292a35f51f8023d6284635901d402390280b35601d882309297534771d9b239a28a030661d21230528992cf31c1622ae27bc2a211c3e228327fe293c1c5f21e7263f291c1bbd204326aa28461a6520c3252928d11939204a25b62775191b20212571272c19e61fe8240727fb187f1fb024a0269b18e01e53242c2639183c1ecc237525a917611d0c23f7247016ec1c7b229b24bc157d1c0f224a243a156d1cc321ff230415371c70218023a414191c26210e238314911bd320a1220b14221b90204a22a013ef1a602023223113e81a4820ee212913d11a3720c921da12fe1a28208821ce12cc1a112070219d12b01aa11f21211512b01aa11f212115120000160d7f1400000000160d7f1400006720772270230a161325cf28542aa7207c25e529a32bbb218626e329c02b9c222d27aa2ac92b2823442a502a022cf225df2e772a6a2c6a2adb31702adc2b772d6c33aa2a3e2c0b2fdd33322b702cb72f2934362bc32c26302e34982b592d2b303d34652b122d3a304034732bfe2c3d302d34772b192ded2f9732e22bdf2df12d2b2f482b172d012a4f29f92a892d1b2467281d2bf02d64221c29392ada2f412399297f2ac532c523c3273f2aa9348221d625f4292a353c202026e9296f3572205c251c2a6835c81f0326122a7a355d204d2569298235de1fe6245f2987356d1fd22336298635ee1dd822c0286535141dae23d6287134931d262296286c2f761cbc2237284c2bc81cb721f927582a0e1c7e215427cc29cd1b4821c8264729801bb9205a26e6288e1a5920af258428091a242056251c289d19e91f29258b273c19291fdd24fa26be18b51e9324912655185f1e42240f261e18d81dca2373255d176c1d21230e25a916481daf22aa245216e21c36225324d815ab1ce02105247015621c88218023f714461c41210823d814d51bea208d224f14301b8b20fe21ae13ee1a4b20b22130138c1a0e20562195124a1ae61f24211e128f1ad71f07212d126c1ad41f292140125b1aea1e9320fb115b1aea1e9320fb1104155f152019528004155f15201952802620062281224717f0242f29742a2921c425f029912b4d22ab26b7298d2bdc224b26292a782b4622d827732ae82b9223f029442a6f2cbb25c52efe2a862c882ac5312e2b742ca92d5b33812a272c732f3434ea2a8e2c53307034bd2bfa2c90307c34612bf22c9d305e34912bb82d6d30df33f52b912d992fda30942b262d732c3f2cf92a022d3f2737277a2abe2cb321cb28942a052d4423e526772a5a2d0121a826ee29be30d5208126192a2334d3205c26f8294d35b8207627fe2983358921c725902989353220a4258229ad351820eb248229d835fc1ed8253929d2350e202a230d29c935f81c3c24cc28c035be1d4c22b5289a34451cbf21f128492eca1bf7220e28fc2a9d1c632158278c29f61ab121562795295b1bfd21f32626298c1bd5217926ab28591b4f2129267528851ada20cd253428f61979206625e7277f190e20fc245027fb18ad1fb024cf26b718ef1e532449264218571e0424c3259517d41d86236125f916881d2f23ff247116421ddb22af24f4152e1d8e227524b415fe1c2f223c247f15db1cdc21072431158c1c74218d23dc141d1cfd20d8224414b91ba9204122c313da1b7820fc21a413ce1b6020ca215813f01b4b207c213813ba1b1e207f214613261a4e1f1521c911261a4e1f1521c911160c88117b170000160c88117b17000095202c23d7232a17ce242f294a2af22099256c29e22a35221826be295a2b77226326212ac32bc7228f26852a1e2cc0227026b32a462c512283291b2b6b2c6825e32ddc2b952cdf291431972b7f2c3a2d3e33422be22c912f09346b2b612d37302734c42a152d5730ae33fa2a372dc72f7e31b72b482d4d2dcc2c4a2a2c2c672886283f2b172d94237227512ade2cc32101288f2aef2cd021f327372a932ca421ac271f2a832d33216426be2966315520a026c829213599204d27ac29bc352f214d25a429ec35b21f91256b290136e71f872425292036491ec4251129f035d11fe4252029ff35cd1f79242f290c36ec1d4c23dd280534d41cfd2063286d2c9a1a08220428bf2afc1b0d22b627022a011cb92145278d29941b91213e2797295f1b3521d6262429e51adf20152676284b1a9a209d251c28f21932204d25c5274a19881fef241327bf18161f9b248c265a18881e472424260318471e0e24be25b617ee1da72366251817cd1d2a231b25c116a01dc222d9245f16721d732293242b16291d1b224624ae15f31cc621032472155f1c67218023ac14a91b0f21ff221814331bac2071227713ee1a2e20af21f712d81a12207121e112e91a06204021b912791a9d1f23211712bd19c61ec6203811bd19c61ec62038110714b90ec41642000714b90ec4164200a61fd42132227716bc24f328432a062128256f290b2ba321ab2597296d2bec211626fc29cd2b4322c526592a272cc022a926992a4f2c6d22ab26d22a7c2c7022a127402b052d7c23182c9b2be82c2628522fcf2bc32c882bb5302d2b422dd82c0b31f52acf2c312d0f30fd2aaf2c0c2cd32cb52a9d2ca8286c28e42a932cd5233028022b1b2dc0221229812a612d5d2361286a2aec2c38224f27312ac72c12211028352ac52ca3219f264d2ab82eb320cc250b2a093335205625002a9735ea1f8a25582a363605201e25662a83366e1f1c25d8298c36411fb225bd296d36e81fd1231c2965364d1d222441298b369b1d31240b29f1328c1d7b241328b72bef1d56246f28b82a9a1dd5211328c02a891b9021ab27d529301bcb21382745297c1b6821a626c728d11a232158269e287a1ad72007267d28f2198b209c254e28ba1911202525ee272019401fb62414277418b01e402444261b181b1ec523b3258017ac1d44235725c9168f1deb2218257a16351d8822e424e6151d1d3122a724a115ae1cd32161242715aa1c74210c24fc147a1c0c214e23a5143e1cb220a5224414dc1b6e202922a613a51b4a20de213213d91b4a20c02162134a1c57209b21cd131f1c2c208e210314ab1a631f25217d12ab1a631f25217d123e11660f4f162b803e11660f4f162b80f61fff216c22bb166824e428232a9b207325b029282bde21ae25bc298b2bd821f4250b2aea2b20226226472a1f2c5d226f26482a472c0122fa26902a2d2c8322f725e42a582c7921f226822b9d2c7b222429e12a792ce1249a2a752a7a2c5f26132b382a572cd426ba29d92aad2c6f250528ac2a9a2c60236b267f2a7f2c60219326542acc2c16215827f429a52c7221ab26022a5f2cd6207426ed29732caf208826132a912cd92074253a2ab52c0c2060269029ad2ea0202526b3297e345c20bf25cf298d36fa1f9624c2298d36381ec025b128a2369d1fd1232629d7360d1d5e24d529e136811dd0249729df36111e442364276330941c28243328752a3d1d8f235e282d2ac31cd52213286c2a321c3b24bf279f29321dca21f3266729ed1a9b21b926e628e31a8e216c269328d31a3121ee255f28611a9a2083251428a8192620222590271819b51fcd240427bb18131f7024692658185b1e1424d125cf17ec1d942374254617a51d36231325c1166d1de022d8247e16391d8b22912415160f1d22224524bb15e91cb921fa236715b01c55215d230315561cf920bf22a3141f1cae205d224614e31b84200a22ed13c91b5e20d5219313ee1b3a208f21b7138f1be11f5421a1120e1c391ff62099120e1c391ff6209912ce148f0b5e164f80ce148f0b5e164f80031fa821162227167f243d296d2aa02000255829c92a8b21382582292f2b7421d625092aeb2b012243267c2a502c58226b26b02a7a2c4d228226bf2a982c2d229c26f52a902c112216274d2b942c80224826fe2a962cc3217326c92aa62cea21a427e12a9b2ce322d126382bb82c2522a026a22a892ca821ba265e2a9d2c6c21ea267d2a912c5a214326622a912ca520b626452a8e2ce02059260b2a882c9c202f26f1297f2c6420ae2596290b2c0820a0265329412cb32008260929d02f2f200325132ad035cc1e2225d729d036cc1e7b25302a1337e81ef3252129f7364f1f8624b1292937691d15264f298e36471f1823ce27e92c3e1c3f238e283b2c731c59237e28e42a651cab221328f42afa1b5b22fb2792299b1bd52287274d29161cd9211427fa28ff1a6a21b426bc287b1ad8202e266228f31951209a2503284d19b01f23254327b918f41ed024b6264518951e752443260b18441e2324c9257f17111eb3235d254217031e322304250017df1db022ae24a716cb1d4e2263248f165c1ddd211224e615071d9221be238915841c40215c23d314401c182112238b14bb1bea20fa2222144f1b98206f2294135e1b36209c216713991b0c203c21a313361bc21f5a210513321c811f2d21d412321c811f2d21d412dc13291698174202dc13291698174202e4203c245f24521a2f24df28212a7020eb241e29882a74210d257029002b32217f25e929aa2b912130265d2a292c12225d26992a4a2cd6219326b22a552cd2219c26cd2a622cbf21e026d52a5d2cde21ad26a42a672cb3213727d42ab32c0b22f826ba2a932cd621f3268f2a742cb5213527a82a792cb1214127b92a9c2c9c219f26862a972cea207626642a932ccb205f26552a822ca020f825012a712c3d207f25b729342ca11f65258b290f2c7c1f6826a629a92b582032242f292a2cb11d9425c829cf30621f3d251c2ada36c41ee7249b2914372e1e3725d9293f37681ef024562aa937e81de625be290a36de1e25248228302cd31c8b2383288a2a831c06239b28412b341cca221028192a101c38220a28a929711bde2164272229351b5921df26cf28911a2c218a26b328301afe20ed255728f919a2207425e8278b1926201c256b27f618a11fbe24e2269018321f61244b263018c71e1824c925e417511e952353252817041efb22f224d116ae1d702294244016521dfb214d24dc15e61c9d21f7233c15d51c52218a232a157f1cf820ee22a914281cc22077224f14a01b7f200422e813111b3d20a5211a13fb1a0d206b21cb12f71ad91f29218e12ce1a7a1f15219f12231aea1ee5203011231aea1ee52030116016bf162a171a066016bf162a171a0668209223ff2345191d24b128ec29cf1fcf242d299e2a2d21c3247029f12ae6202925d6297c2b3a21df256f2a272cc3215926c72a6d2cd2218026ef2a8c2ca6217e26072b9d2c70218226142ba92c7421a026092ba92c7121c326d72a8f2c8f2197269f2a7b2c4f217326862a7c2c18212f265c2a752cc9205826622a7a2cb52028263a2a6b2c5f2046262f2a702c5b202d261a2a5a2c3020f125f029412cde1f9425c529202c621f7425ab29302c391f2125a429622ca01eb225c629122c5c1fd7259b28922b5c1fa024ec288b31ae1d69263f2a4337ac1fa6279529e53755206a25c529a537f61d0c2494281c33741c12236a275b2ac81ba22350281f2a331c0f229928a32aab1a03240728f3296b1c2a221f28ed29c91a2922a7278129fb1ab02112273d29a01a6c219826e4287d1add2015266a28f9195e209b25f8275d19fe1f33255a27e918851fd724dc269e18151f7d246c263d189b1e1e24f625e717041e8523802501179a1dde2212258616281d53229e24d715f21ccc2130247115c91c6221ad231e15fc1c3a214c232b15171d0d21e8221e15fa1cd520aa220015e21c9f206822c014791c5c2006225a14381c2e20ea211b14f51b0020b2217e134c1ba01f9021a212121b311f0921c011121b311f0921c0110000ef15a51900000000ef15a51900002c23a227e928441f0224b0280a2a30206f24e4285b2a7e20d0241129a72a92208225b729772b2321e525662a252c5121fc25c32a632c4c212c26002b8b2c442131260e2b9f2c30213e26042ba42c21212726f32aa22cdc203e26db2a992cbb205626c22a882cb3206026942a732cba204926682a552c90205126452a402c7c201e26132a2e2c3e200326e629292c1420e925e629232c0220b725c929172c911f8125a229fb2b1c1f49258029dd2ba91e28255929d02b2c1e22255b29b92bfa1d2d251429a42bdd1dc7268e28c82b761fe224b72a2832381d51275a2aaa36961f05291a2a2a360c21d8254e299e2de01dc9257928232ba11dea22b1280b2bba1a64227c28d32a381a272367287d2af61a44235e28512a891b0a234328392a861b6e220528c329131bf1213b271229ec1a4d2187268028581ac920ef252628ba1946205d25a8274019cb1fd024e626c9182c1f5a243b264a18b91eef23b025d517331e552332253917001ecb22c024cc16b51d522265244816781df5211e2405161d1d9a21b8237715dd1c44213f230a155e1ced20c9228714091cb02062220e14f21b8c202e22fc13001c6c20ec21c913c51b4d20ca215013861b2d2087211513861bfe1f9021d812551ab31faf21c211551ab31faf21c21100004916581900000000491658190000a222032774289d1ea2234928a6290c2060248028192aa4207c24dc28792a7920de24b0295b2bc720b425ea2a7a2c53211d26952bee2c51215826aa2b072de92056268c2bf52c7f204f264b2bcd2c47202e26152ba92c18201726cc2a792c2120e0258a2a562c1420c4255c2a3e2c1820c6251d2a172c19208c25e729dd2be01f9725c229b92bf01f8625ab29b12bab1f62257e298d2b791f672555297c2b541f252559299b2bd01e11253929932b8c1e172519295d2b401e19250d29472b431e7c2511292a2b901ecc239728522b8b1c8f21c7266b2a4b1a77185c262f2ca110d51e3228642d6e16972271288d2aff1980237b28dd2a951a2c239a28832ad6191523c128bb2ac3191823a228b92a001adc228e28862a751a8c226d284f2aff1a15221f28ca29e41a66211c270229491ae12000264128d6197a2064257e275b19eb1ffb24f526dd188f1fac249826a5184e1f4f242b265f18091fd5239e253518a01e1b231d258117511e9622c824f416331e40228b24a016f51dfd2151245d16901dac210d24c515231d7821a8235415ac1c26212623d9144c1ce520c5227514cf1b9f205d22d9136c1b722018223913421b3b20c72110133b1b052085210913fa1abb1f4b219112c11a151fb120d910c11a151fb120d910000037158b190000000037158b190000a522722653284f1e312302283229491faf231b284929c81f6a24a428ee29552091243829cc2a7b20bc25082b842c5a21eb26462c7c2d3e21e326672caf2d1f209e26312c702d491f46267d2bd82ce71e6b260b2b9c2c101ff725902a422c841f4c25ef29b92b2f1f5125d229af2b8c1f0925aa29ae2b4f1f14255729382b891f44255e29442bd01f4d259029a32bde1f442583299c2ba51f362549295f2b911f5525f528eb2abe1fcb24d028ef2ace1eb424c228e32a611ebd24cc28172b6d1edc24d6280e2b481eb324bf28172bc61dc7235b288f2a871c6e2224289b2a131b14220628882aea1915222c28b32af31805237d28de2a9718de23f1284b2be51820243f29602b6519192442296b2ba0192f244429502b8b1ae523f328e22aae1ba4225428e929861b602142270629c71a01217d267628771aab20a425c827e2192320d924ba263719621f4e24f42589188a1ed5236925d217251e392304255b17d11da122aa24c716781d262253243116371dc1210a24e815071d6c218f2389159f1c17213923f014701cea200223bf14211cb520d0226a14c71b7a2087220814251b31204e222f13071b0820be21d612f81ace1f5e21c812ef1a981f31218612aa1a711f64210f12fd19fc1e0721e010fd19fc1e0721e010000000007d150000000000007d1500003f20a3242c261c1b07235a27b428c91e5022c0265428981e44239c270c295c1f88234528e629c01ffb24722a302cf7206127492dc92ef2216828802e2d30bc1f0527032d5c2ed71bc7254f2bb32cb31c3125a329aa2b611e28253a29152bfe1e12252129ee2ab71ed824fd28cb2a7f1fa024f428b02a731f8724de289f2a4c1f6f24e228a22a241f7924db289f2a101fbe24e628aa2a561fc224d0289d2a361fd424c7288b2a2a1f9a249728742ad41e86247a28752a911e59245628632a2c1e43243a28242aa41d0e242928ee29fb1cae231d28e429981c39231528eb29171c29231428ee29be1a60232d281a2a8819b3237d28932a4d18a823e728012b98161d249129a92b9c17a624472a3f2c9918c024712a5e2c841a6b24fe290c2c4d1c3623ce28642a331c4c2106270629d91a6e20b7253728ba194520da24ce266119072065240f26f318351f1024ca256d18881e80239a25d017031ee82239253217ae1d7f22ab249d16691d1322462420165a1daf21f523e515421d592160239e15f01c0c21e0224715b21cc3207022de14421c712005226a140d1c3e20ba2112144a1b082086215413ea1aa71f4a2182129c1a611f25213812821a131f0421eb111c1ae81e10215c112c1aa81e912038112c1aa81e912038111e17e81d4020b38e1e17e81d4020b38e31208124af25f319fb21cb253727de1dbc22d4258827b71ebc22ef250728b71e7122bf257227a11e4c212225ce27891db825382c132d55205a2cb5312233f11eb726c22cbe2d2020c521e52615294b1d232517282e2aa12054243228c229871f0424f42776291c1f4f24182898297e1f3a2410288429361f672420287d29831f562412285429431f1724e7276929da1e352408288d292f1f1724f0277129b81e1324a1275729701e1224062758294d1e05242b273829171ecd228726f428271d51226526bd28b01c35224e26a328811c43223d26ab28251c47225a26ac28831b5d2265269928cd1a4b227a269528ec19df2114270b29071838238d28272ac2154924352a282c60047b253c2cb02d320cdb25a32c182eea1aa524682b1a2d431d2023ed28c92a7d1c052260265d28f91beb20cc24bd26831a2c207a246c266419e11e3c245f2656186e1e8123a825e6173f1ead22cf247917011e5a226224fe16f31dff212b24be16c51dc1210b245a168b1d7321c723ec15f21c10218a232115b41cca20dc22e114661c6e2037226c141c1c2220d82100140c1c02209e21e013bf1bd01f61214b13891bb21f4f21da12571b991f3b21ad12031b791f2a2127125b1ae21e0f212f12ca19131e6b20e510ca19131e6b20e510000000004f100000000000004f100000221ff6226924f3189521bc251227351dda2186252d27761dbe217f250c27161dc3210e257d26a51c4520c7227b2485192d17c21cbc1f4b105d1cab205a229d168022b7259f27711d062480270729de1e4b24d4274429541f7724ce272e297a1f6824bd272429611f612493271c29321f2e2462271129bc1e17243b270129751ee2231327fb281a1ed823da26fa28f21d83239d26ea28b21d3d234526be287d1d28231c26a028321d1323f92573285c1d9b22bf254a28e61c312284252328651ce7214e25d027311cdc213a25b727111cf02125259527ac1bcf21e9245f27221be821c4243e27e11a0022e0243d276a1a34229024cb266e1ae72005230626de19601eb825f32830157627cd2d702fdb9b1c2ab230aa310b1e2124572b1e2dff1df11a37245b27d1141d1e05238b2525185d1f78233e25a418ec1e1223f2244018531e8722ab245e17621e3e2274243b17c41dfa214c245916831dbe21262411163c1d7221db239815bd1c14216a23ea14b51cd720d422bb149d1c7e204d22a314571c3b2001223914161c0720bc21b213ce1bbb1f842158137e1b931f58210e13571b6c1f3121e8120b1b491f01216812c81a1a1fd3206212b51af81eb0201a12431aa41e9a207f11b719181e2b203211b719181e2b20321100009613cc17000000009613cc170000e8207524d425441c26213b255127b91c37212125db26b31c6621eb2470269c1c9a20bd231025ae1ac21d23214c232e18181dbf219c236e18f3204125af26761c3823ba268028641e96233527d328981e9a233a27cc287d1e76232e27ce285f1e51232127ca283f1e3c231d27cf282d1e1323fc26c028ec1de122bd26a928a61dd3227b269228801de3222c267a28381d7e23ce252428521d60224f250128381ca821d6248127211bc821b8241c271a1b45218d2445274e1ab7219b24de26a81af9219d24ef26f51a22228224fa26c01a37227224c326d81ac7215e24c3262d1a9d2150249526001a49213e246e26a619f7202d2452264e1909212724492661199c2064240927c818231f07231625f1160514ff187d1b6a063a18821bde1d96087e1c1e2078225f142b1ed8212b24ca167e1e222268242517281f0f22552431179b1fcc212424a517e81e9b21c023f016551d402144235c15051df420fc223415cd1cd620c122fb14a11ca1207722cc14731c7c2044229d143b1c4720f7214014031c1820be210814d91be31f8a21a313941ba31f5d2160137d1b621f31210d133d1b151f0121d012f41aec1ed6205212c11ab11ea02024129d1a8b1e77200312531a5a1e6020c0119119d21db91f87109119d21db91f871000002714b517000000002714b5170000c42075247625601b7521762503277c1ccc20b8242b26931b782013244625c51af11e1622c9230919361f0722e9231f19d01f6424af25eb1a5d21df25d327011d74229e267728eb1dd822a8268a280f1eaf2286267828b41da42277267228751dbc2286267f28881dd0228b2690287d1da52283268f28401d8e225e267828121d6a2218263c28a81c33227f25f527011c3c22e9246027101b4522a324f1264e1a1e227324b426f419e3216d249e26ea19882159248e26bc191221422470266c19b8202a245a263219862011243e2620196420fd231d26fa184a20f2230126dc185420ea23f825e7184b20ce23e925dd182820b423da25b618f91fad23fc258418961f8f2305266b189d1e1e2392251018e81c7a210e242f16421bea1fea21ec14f41bb31fc6216014101c26207022d5117d1c71201423e013921c9f206e232814db1cc6206723b914fc1cd12053230315191dd8203f2320151e1dc82018232415f41cab20de22fb14a61c7a209922ac146a1c4320452270142f1c1b20fa211214fe1bea1fbb21c713c11ba61f93214c13a61b761f712133135c1b3c1f4621b112ef1af21e13214e12a11ac41edf200812691a841e9d20a011141a3e1e6a205511c7190a1e3c2011117b19961d8d1f75107b19961d8d1f7510000000000000000000002714b5170000c42075247625601b7521762503277c1ccc20b8242b26931b782013244625c51af11e1622c9230919361f0722e9231f19d01f6424af25eb1a5d21df25d327011d74229e267728eb1dd822a8268a280f1eaf2286267828b41da42277267228751dbc2286267f28881dd0228b2690287d1da52283268f28401d8e225e267828121d6a2218263c28a81c33227f25f527011c3c22e9246027101b4522a324f1264e1a1e227324b426f419e3216d249e26ea19882159248e26bc191221422470266c19b8202a245a263219862011243e2620196420fd231d26fa184a20f2230126dc185420ea23f825e7184b20ce23e925dd182820b423da25b618f91fad23fc258418961f8f2305266b189d1e1e2392251018e81c7a210e242f16421bea1fea21ec14f41bb31fc6216014101c26207022d5117d1c71201423e013921c9f206e232814db1cc6206723b914fc1cd12053230315191dd8203f2320151e1dc82018232415f41cab20de22fb14a61c7a209922ac146a1c4320452270142f1c1b20fa211214fe1bea1fbb21c713c11ba61f93214c13a61b761f712133135c1b3c1f4621b112ef1af21e13214e12a11ac41edf200812691a841e9d20a011141a3e1e6a205511c7190a1e3c2011117b19961d8d1f7510000000000000000000000000000000005f269b1c18202f1d842cde24c9276725c32e2c281f29a9277330ee29862b5528cf30df290b2c5f28332ff228c6294024872c5625d226c795ee2c5d24352313a3e12f1a1d2218a8a525349828852824a76d3b572ab428072c5e3d4d2a032d3234573ed22ca52d2935613e9a2d5e304b2dbf3ab0300f342a21f8389f2eeb3158a2873862302b3311aa63361f31de357c240834392d8e34fa2733319e2cf334ce25582dde297435fe22bc26c2299235441d48245329ab35f71a7b22bc281736e5193b227a280536de1924236128d635f31a4f219d28d63581195e202128a23564182e202628bc35cd164124cd2ae1357a18c327bb2d3b3671161c2ae631c737431d91277b2f8f34ac1d58229828b72dc81a041fea24c5286c18681e8624e2262318941e222402265b18df1e2e2403268d184b1ed6236e251118d81de022f2245d17151d3d2250246816701ccb21e8237415d51cf421e823f015051de821df230216ad1ca82189239815411c5f216123f414e21b162111237714631bc420c02211147e1b9b2081221f148a1b8b2059220814941b70201d22db13d71a3a20a8211813f119be1fe32029126c193a1f7d20a0112419041f93202a117419051fb6204e119819ed1ea52044116619d81e6e2041116c19641ece1f461100000000000000005f269b1c18202f1d5f269b1c18202f1d842cde24c9276725c32e2c281f29a9277330ee29862b5528cf30df290b2c5f28332ff228c6294024872c5625d226c795ee2c5d24352313a3e12f1a1d2218a8a525349828852824a76d3b572ab428072c5e3d4d2a032d3234573ed22ca52d2935613e9a2d5e304b2dbf3ab0300f342a21f8389f2eeb3158a2873862302b3311aa63361f31de357c240834392d8e34fa2733319e2cf334ce25582dde297435fe22bc26c2299235441d48245329ab35f71a7b22bc281736e5193b227a280536de1924236128d635f31a4f219d28d63581195e202128a23564182e202628bc35cd164124cd2ae1357a18c327bb2d3b3671161c2ae631c737431d91277b2f8f34ac1d58229828b72dc81a041fea24c5286c18681e8624e2262318941e222402265b18df1e2e2403268d184b1ed6236e251118d81de022f2245d17151d3d2250246816701ccb21e8237415d51cf421e823f015051de821df230216ad1ca82189239815411c5f216123f414e21b162111237714631bc420c02211147e1b9b2081221f148a1b8b2059220814941b70201d22db13d71a3a20a8211813f119be1fe32029126c193a1f7d20a0112419041f93202a117419051fb6204e119819ed1ea52044116619d81e6e2041116c19641ece1f46116c19641ece1f4611211e0000dd1ad207211e0000dd1ad207492cdc267b284425f12eda28da29dd2749300b2a552bdb28bc309b2ade2b5d294f30b029ee2a78286928472462235c1c00253720711f819d5c2700007d1c84a28c2cc920c423e0a57436652ae62b1e20f238ba2b0a2dff29f038472dd22de22c8139c92e6a30602b9139dd2fa7310aaaf338932f6131d8ada938282fe032fdaeeb34d42e243456257633aa2dac34a5288d31a42c52359d27052e772bea361b23ed29302a8536ff1ed927bd297f36231f7b2847297736b81e852511290837401e1e241a29ee36cb1c762646299836151e5724de290f37a41c2e245c2a40376718e224662b93374c15f125db2c0436d312a2272c2d1035941aba24012c9932171b1e220529542e581aa420cb26f82a1b194d20b7251129bc180920d62412289218c81e872468260e18a61e2f24b725f417b11dae236325d0166d1ddf22d22451163d1d652253244516b21da3224d24a216b71d6b223824a816f91ce121bc23cb15571c7c214b23eb142c1c4521ff229714281c1e21c4229314d41bf32083222f148e1bca20442209149c1bb7201722e413161b8420cf215913711a47208321ae12ad1904203021e2119e19b61f0d21a511a019951fe320a8119f19381fd22078112719bb1ebd200411c319991d6c1f8a0fc319991d6c1f8a0fef1aa41aab1d6d84ef1aa41aab1d6d84fc293a28ba290e249c2d3929772a3f27d42fb029b82aef28b930052a892b802926316629f02aff2964309a2754282527742d2a1d5423b2a0eb303d2645267e25b23163274525d128f2325728cd29342b98343c2a582b0f2deb38992c812e3d2c143a602d2830359a5639e82d4d30a4ae0039c72e773011b01938772e9f3151ac87345c2d3e32a5263833d12c72332f2977300e2c9b34fb260d2df72b303693235d29432b633632201528132a1b36af1f8425b72963363f1edc240e2957365a1d60242929be36601db2222c29da36381c70227f29a736b41b0e24972a7c36341cf124c22a04367e1c8324c92a5a357b1a25240f2b9234021bdc233a2a1332a51a9322ae28642e651a46218727402bf9195320c726092ae6184c202526f028de181f205425ce27ee18ac1f9f247926b618851e3624d6251b18f11dd72367257c17ae1d702332252917b21d4123fb242d175d1dd022a524c216f71c60223e241a16581cdc21f02332151a1c8a216723a5143f1b1321e1221a141b1bd3208322d213f81aa4203e227213fa1a8420fe213c13ad1a5a20cd21ec12811a322074218a12461a132030214e124f1aef1f0f2124121d1aa01f0121f3111c1a6e1f0821f2118b193f1f17213811c619c31e76206f11c619c31e76206f110000991a2d1a00000000991a2d1a0000ef250a27aa28ab1fd82b07294f2a1125d02eb629022b9e287d30f329552bcd292b31d5292a2b2f2aba31cf29232bab2a48329229aa2a842aa3329929d22a9c29da32b129c02aab2ae532b829e52aee2a6f33ee29d72bf22bb833422bb42c002cb633f82bd72d422bac340f2c0d2e4e2b8e34252ccb2e8b2a4934b52c0330f92a1334c82c1031692b4d329c2c6832562acc2f7a2bd8335727bc2b6e2aa93408232a29d72a0f3531211528002a31357e200027de2960353020d3252c295335571f652575299c357c1fac25512ab0351e203f256b2a9135721f5d242e2aba35ea1d4525402a2535d01ee024072ab534d51d5224a1291034e51c652325296d31301c72215c28602d2b1ab920cb27cc2a8019e72012277729051aa92028269428ba192d20c3252f282119022087251828cb18c51f09254d27a618241f352402264618631ec2239025a417aa1d4a231725c7160d1dc62299240b16bc1c6d226124aa15691c3122412423156e1cf821072405153d1cb321a523cd140c1c652120237414cf1b2b21b9222c14c51bf52054222714471bb9200a228c13b11a7e20bd21f012541a662093215c128d1a5a2080216012931a31205e213012af1a1e2021214a122d1ae81f17219d11be196c1f25213911be196c1f252139110000341d7c1c00000000341d7c1c00009f23b0265f28a81dbe28e8282e2a7e23fb2c9129db2a3b27f02f122a642b61293631632a062c112b09327f2a0c2cfd2b50326f2a012cf42ba032a52a182c122cd132cd2a232c142c0833d82a8b2c182c93331f2bba2c4a2c9c33cd2b832d302c0334c82be12d4a2c82341b2c192ed22c2e340c2ce82e562c4e34482ce22ebc2cce33392ce52f4b2c3a32492c9a31a82a452f512bba324e27cd2aee2a7234d5221c29032b99347621a728012af2346b2125270b2af8349e20de250e2a0c35f41fa726482a4635b9205125e12957358c1f5525f2292035be1f3925a1290e353f1f56246929df34e11d73244a299934e51d65234f29c633a91c5024d428d8304c1d0622dc27592d661bfa200b27792b1d1a3b21e926752a971a1b218a263529701aa820fd259a28de1943208b2521283c19c01fe1241d27c218541f722440268018c11e2924ca252618661e03248425a717fd1d85232f252a17831d0223c7249816e91c89228324b715c61c4b223e246815921c052208242d15481ca7219c23b714171c5c2146235f140f1c2921e4225714af1bd9207d22f8136a1b96200f22b013c31a6320b021cc129b1a2b206121a412681ac51f48213c123a1aa41f3d210f12dd197a1f762185112e1a381fef206c112e1a381fef206c110000c41d951d00000000c41d951d0000d8226327d528a01d64266429cd2aa9211d2adb29cc2bed24b32dd829892b52288d30252ad02bc12af831492a0a2c552c9d32f32a492c972c04333b2b902cc22c35333b2ba12ca82c94338e2bdb2ce52ceb33cb2b812d1e2dda33c82b972d122d2234142cf02d352d7834572c4b2ea22d5b34322c4b2e7e2d25343f2c8d2e392dd833352c3c2fb12c5a31522cc430682a222dcb2af631d025fc2afa2a6833e9233c290a2b9334ee212328022ab634f3205027082ad1349c205226f729e3342f206c26532a11355b209625302a2935ef1f6825f2290535d91f0025af29e434191f34245929c534d61d972467299334391ec7235929d433261d9d23df28b1300a1ddf211428a42c961b81206a27ad2ad1197a213327f329131b1d21b9266f299c1a99205526d328f1194e20c42543286d19a21f3825f227d018521fbe249b279d18c41e6224f8262818311e1b2442269b17f31db22391251f17de1d4e23f724d516901de822b6244d167e1d912271240c164d1d44222924d6150b1df021ce2364158e1c87215223de14521c3721cb227b14c41be02064220714fc1a8f2011223e13851a5420d0218d126f1a26209b217712461a032080211b12671ad51f4a210612fa19aa1f3d21a0111c1a341fbc20f2111c1a341fbc20f211000077126c070000000077126c0700007720e9236f24fb169e258729162b10210328cb29852b3b23fc2a552a152ca125e42e8a2a3b2c71295c31682a6d2c102cc632cf2a8e2c062d51333a2ba92c4f2d69334b2ba12c612da133b02bd92ca92df533162c772de72d1934272c9c2d142e1f34fa2bd72dfb2d7d34472cca2e842e6134682c782e5b2e52340e2cc62d232e9c331c2c232e292d9130212c782fe729c82b132b8230a8245f29832baf326d2241294c2b53341e221328e929b634e02057273e2ad4348220c626fb2910354520d226ff29303568200926db294335fd1f3225ba292c35361f2125c9291b351f1f9e2477291b35421ec72489290635531ec422012913347a1cab22cc2810306a1cbf211b28b82b9c1bda20e127ba2a6c1a5421a327842ae31af620b1266c29401a4b20ed256628691923209c25eb27151907205525ba27f318f11fed243e27c018381f712478265218b41e3b24dc250318191ee7237e251a17e01d6a232125d816871d0123db2442167d1dab228e240b164d1d57225d24d615151df7211a246f15dc1cc421e4233215c91c91217423f614911c46212b2397145e1cfd20a22240147e1c8d20cd215f143a1c38204b21af13571b27205c21ad12fa1a122058219112731acb1f2721a9113a1ac41e682078103a1ac41e682078100000a215561400000000a215561400007d204923e723bb164f257429e32ade202f27542acf2bb4222b282a2a092c3f23132c552a1b2cd326f82f172a392c4b2a3a32d12a942ceb2c7333602bb72ce22de233cf2be52c392e1334c52bdc2c902e2f34e32b342dbe2e5434032c552df92e4e34cc2b8d2def2e5e34fa2bf42de62e9b34402c462e212f7434022cc72d9c2efa321a2cdd2df42c832ef82ac02e4f28ed2aaf2adb2e5d249428ce2a3131c5210a28db2a45333821a826762aa83468200628ac2a083575217427fa2936350e211726212a4b353a2045252d2a7a35501f8125c0295a35a41fe725962931351920b62437295235631ea6240c2916354e1efd23d528b1334a1dd021f727e72e831b3922dd27172c051ccc219c27b52a4e1b4d2283270a2af11b9e21fc267c29e61acb207126db28e3196120da2556283d193a206725fc270f190b201f259d27b618c81fe52436278718a51fb824cd267418261f6d2453260c18841e0824b8256117941d3e23432551162d1da722e224b315c21c3b228c243c15ad1cf2213d24ff14831ca621e123ae14651c5b2157236b14da1bee20c822e4134a1b9d2065221813f31a6b203c22c312ff1a56200f229612f51a4b20f3218c12ee1a3020a5218612b31a182095211712921ae81f62215811921ae81f622158110000d015a51500000000d015a51500005e20b4224e23fd153c250b29962ab8202f266d2a1d2c4322ef265e2a2b2cea223728292b2a2cde231c2c912a4c2ce2269f30952a942c722b0233e52a922cc22d1834f52a872cdc2e4a349f2b012d532f5c34d02b722db82f8d340a2c852d083088341c2cb52d03309734142c622d1030b534e42bcb2d04305b348e2b2c2e052f3a32822b632d9e2cc22c3a2bcc2d9a26ef285f2b5f2e38222129f82af42e4d2220298a2aae314b228828682a5834da21b7276d2a34351b21ac28802a6e352f22f3262e2a8e3599204026fd299f352320dc24a129a335971e2725b8298035fd1e72248b2994352c1e4a248e295a35d11d48234c29c833ef1c2922cf28852e141cb0210728192b881b3421a227212ab91aac215c27df29821b4e21fa269129db1ae720a2264729561a98200a26ea28cb1946209e255c28631910205225d627fe188f1f06253c27a5181a1fb924d2264018c31e662443260c18421e0624ab257c17ad1d4e233e259c16691dd522da2420160f1d72228b249115de1c1d2239243415a01cc321e223f214751c702151239f14161c0e21bf223d14641ba42022226e13161b5920c421e512c21a1c205b212512871a05203621f011cc1a062029212e12fb1a07205f219112911a7d1fe9202e12911a7d1fe9202e1200000117511800000000011751180000d41fb222f8225f166d259229352b27211a26552a1b2c60222b27222a0b2c43231f27bf2aa82bdf227428cb2a5d2c04246c2c2a2a662cd5270931f82acf2c752cd633022b8d2c102f50347e2bba2ce92f8634102c542d4b30c834152c702d8a30d434fc2b4a2d9530e134ad2b8b2d8e30e934002c502d59302834f72bc52df62e3b30782baf2d8c2aa929c12a352d05240b291c2b592d84222827d62a312d8220a527202aea2fd1209b266a2a27335f20bc26652a0f3575207e276b2aa7351521ea25062ac3350320af25d329f335b51f8126b729e93569200526bd29f835f91fc624ac29fc35521e6e24bd28b235ba1d52225728eb32151c6b2120289a2c001b292236273f2ac41be1217d27d429391bd0215827c129f51a062239276f29041b0322b426d628001b9b214626a228871a0921da254e28dd1984207625082842191b201f258d27c818bb1fd92415276118fb1e78248f26e817551e2224fd252c17d41db12388256a169f1d572321250216681dfc22cc24c715471da2228e2479151c1d4a225b244c15f21c03223224f814a11c99210b2481143a1c2c2179231d144d1ce42078220c147a1ca7201b22db135f1c7420f321ac13351c54209621d912f91b1a208421ff12791a841f13217911791a841f13217911000041172f180000000041172f18000035206723ee234f160b254d29b32ab520f325ab29792b1f22aa26342ae22bc0222327be2a562c1e234e27402b742c0d23e7273e2b802c3f23812c622bd02c222853310e2c012d0e2df633ee2bc62ccf2fbe34bf2b282dba30e734f12b162df7300235282bbc2cfe3026354a2bd32cf830cf34dd2b2a2d69308e32bd2b4d2d982d312d162b972d1928f827422b1c2da9215427f82a692dbc205f28512add2c5e218e28822a9c2d7421c925f12965301b1f6627572a5534a920c326bc2ab8355e2098262e2a0e3679204e25c4294436321fd624b0293c36681e6b25d2293736d41e042596296f36521ebf25da280a360f1f1824f2282732071dce218428f22b211b082222288c2a681b4b22bd27c129bb1bdf216427a129361b89215c27c129cc1a4421ff265c29771a0d2142269e280b1ab020b42531289c193e205e25f7271419a51f10255c279318361fc124cf263318a61e67245a26be17501e2c24ef255917f21dd8239825bc16d81d602356256e16ae1df422172540166a1dab22d724c9151d1d482290247715db1cee21462409157e1c7b21c623a814b61bf9201123c013f31a84206a22c312d71a2120da217012001b20209b2197122e1b152056218712661a9b1f1621d111dd19881e9920c610dd19881e9920c6100000cb13541500000000cb13541500007e1f372282225616e9242929eb2afa208f25db29ef2bcf213526222a142c4922d226942a3a2ccd2287270f2b892c25239e26242bb02c122235275a2be32c9d22092c362c592da927ab30432c322d952cf2330c2c302dec2fab34fe2b322dba30fd34132bbe2cfa30eb34512b112dbf30bc33612b0e2d182fd82e392be22cd729c128512b5c2d34234328a22ada2dc721d228af2a532d3a225b283e2a572d7e21bd28562a672df9214c27832aae2e99203b26e329a23107202b254f2a1235d71e9625a12a3d36381f1d25d22ac6369c1ea1252e2ad236461f7d26a7299a361720ab245b299d36e21d4024cd280e365b1ddc22e7283631371c0d232628292c381c392393283d2b521c45222728372b801bd5211828752afb1abe2190279929de1a7e21ca26f428931a23217326b628fb19e6201e269028b419bd20cc256a2885195c205e2528281419db1fe3249c279318451f7a24ad263c18a81e0d24fe258a17f81d7c239f25c316bf1d272355255316591dbe221a25b715471d6b22da247915ea1c0e229a241815e21cb4214024e9149c1c4221a4237c145a1ce220e8221914f01b8f204b223813de1b60200322e712031c6020f1210a134a1c4d20c72141131d1c292095217b13fb1a7f1ffd202012fb1a7f1ffd2020120000e415871600000000e4158716000025201523d523bf16852400298f2a6f20e425112ac12bf8212d26342a152c0f226926862a422c4a220927d92a6a2cae224f27cf2a962c7922f726532ba12c2b22ce25e82bc42c2321022a342c502d6b25292f3b2c032d912a83319c2bc82c3b2d8132ac2a832c2d2ec831542bc02c7d2d452f682be72c8d2ace29bd2ab32cad24c727642a252d8621a228bd2a4a2d2322a226662ad82c492037260f2abe2c1d206426162adc2c3b20d6255a2acb2cbb1f5c268f29642e1c20b726b3293f335720e924732a4c36581e1f25652ac0369e1ed22475299b36131e0225f028bf36271e0f25cc2955370d1ec424c22891368c1d28226d28e52f2b1bd8226c28302af91b722231282d2a811b7e222128672a5b1b66231f28172a301ca42263277329861bfe21ea260029ca1abe21ae26c328521a772138269828301af720d7256528a0196a20752528280019eb1f142591277c18451faa24b4261e187c1e3e24ff258d17ef1dcf239925b916b31d5a2333257416671dec22f124f215441d9022a924a115191d22225e244a15091dcb2117243915d01c6c218723d614801c1121dd226114111cb1206022ea13dd1b84201b226713b31b6020f2210013b21b3720ca21ff12c51bf11f7d2191129f1b051fc32034129f1b051fc32034120000df12e71600000000df12e7160000e31e4522ce229a1598245a29f32a6f203825aa29712b7421aa25142aee2bbd215c269c2a542c5722e826062ba82caa223927312bbc2cbe222427342be62c70225e257e2bdf2caa203126162ca32c6321a627812bf32ca722192a682a9c2c7f25ce2bae2aac2c0927392a6b2a8c2c9c25be28342a622c0c247428892aba2c08237a29a02acf2c1024a027f12af62c6921ea26702adb2cb020c826382ac02c7d20aa26472ac22c6920e5250d2ab62cce1f16260e2a032dde1fa0260929742e2d208724a529fe34b51d3624af29df364e1ddd25222a5237641f0c25ea294037331efb24cc297037cd1d6b2528295936231e4121b528e12cc8196723aa28e92b131c03248728f32a6b1c92235d285f2b2b1c21231b28d729d91bdb22b6278529541b472276274929b61ad92108270029701a232186269c28a8199320f4253e282f190c206d25b2279518551f052503272718ca1e9d247326b0176b1e3e24ed254517251edc237b25c316071e57231f257116ec1dd422d1245416e11d67227f241916821dfc21342489151f1da621eb2326159e1c53218923a414411c1e212a234614d01bf52007239a135f1b9f207b22f012591b3520b321eb12921b0a204b215e132e1bd81f5e214d12821cba1f01219c11821cba1f01219c110000f11a661c00000000f11a661c00006b2295278e28461d9f245529fe2ad4203d25ab29532b64217625122ad82b7221fb25722a2e2cde219f26c92a6a2c2e22b126012b792cec21e526fc2a832cc621b826562b962c8621b3264b2b982c81217826d72a742c5121ce273b2bdb2c6a226328ed2a762c35234028592a2f2cd922ea273f2a512c002248289f2ad22c5a22f526b12ad52cf0201927a62ad82ced20a0268a2ab62c7e205326502ab22c3020db25fd297c2c911f8125cc29392c1c1fcd258f290b2c4f1fb9245f29f82cf31dfa256f291230571f9f24e6298b36ad1d3a244a293b37311d6325e5298737461ea724bd29f537451d5a25e6282336b81d1f246128012c681cd9226a28852a8a1b38227f28092bd91a6f233928272a181c59221e28c329fd1ae8219f274f29801a9021252705291f1a6621c926e728f119fb204126af287b19a420ce254f281b1937205025e927a418b81fe8245c2740184a1f8624b6260318f81e3624022672178d1ed6237f2500173e1e342315257916001ea122ad243916b81d29225e24ee15471dc2210c244e150e1d7221aa231515b21c152114239214471cdd20a3222a14ab1b93202a227613131b4e20c421a812f61a152084218d12091be51f3f212c12991a8a1f1b21c9117a1afb1eda20db107a1afb1eda20db100000de19291c00000000de19291c0000ee21cc263d28af1c98248e293b2b6f203725a829802b33213925162ac52b2021ae25772a232c7b216f26fb2a7f2c0122c526202ba72cc721cb261b2bb42c79219226412bbb2c30218c264e2bc92c2b2117272d2be12c99214a27fe2a9e2cc221a327e72a742ce9217227c22a7a2cc3213c27be2a8c2c5e21da268d2aae2cfa20ae26832aa22c8720bd265c2a8b2c5b20b326552a862c39208b262b2a6d2c05202626eb29452c8d1f1d26f729652c821fb625e429862c041f8f25c3292d2cd41ea42444293e2d8e1d0b252d29a531df1d42262f2a3d37171ff725c029a637901ee22498290438381d2124cf289234481c39227a289c2b741a82223c280a2ac01aed2292289c2a2f1ba42222288e2ae31a67222b284a2aa41a7b22ed27b729b81a05226b277329701ac92118273b295f1a2b219726e328b119a8200b2679284619372088250728c718d31f132557276f18671fae24d2261318e81e4a244c269a17531edf23d825f616f81d362365256116821da222f124b615631d2b228f249515201da2211a242715381d4e219123ea14441d16210c23ca14241ddd20bd22ad14ee1ca9207c227c146a1c62203122bf13171c362019222d13b61b0a20e1210213131ba91fab213512d51a301f3d215711d51a301f3d21571100005e16fc19000000005e16fc190000e62375289e29002075242f29a12a7220be244a29f82a9420f524d429ba2b8c20d725822a402c2b211126082b9b2c46214826342bbd2c43216226412bc12c24214a26322bb62cdd205c26222bb32cd22042260e2bab2ca5205f26e92ab22cba20b326dd2aa02cdd204e27ab2a8f2c30211927812a7f2cd020e326552a752c8f207826452a702c48205526182a502c312032260e2a422c01201426fa293e2ca91fd625d529342c2b1f9825c6293d2cb11e4925aa29422c271e5a25a629352c0f1e69265729082c0f1fe6257c28e52c7e1e4c25d5299e34d51da9246c2a9337fb1c9426fb292537d21ea622d7281430af1abb234328d92b861b94239228972ae41a0e239328be2a6a1a25237228ad2a451a582382289d2aae1a43236628732ad51aca223428052ad31a6522a7276129a11ac421e326c128591a25213e265728d4198b20a625052826190b2011254027b618621f932493262e18d91e2224f325c117651eab2371250a17281e0c23f0249516d81d842284240f16a91d13223a24b1155c1dbb21ee2363151d1d59216823fa14ab1c0921ed2265144f1cca207b220e14341ca3203e22e913481c7920fc21c913351c5520d02162131e1c37209a21f612141bc51f8b2136121e19091f1422d1101e19091f1422d11000008616e118000000008616e11800003023fc270729481f1f247b28472a2d20da24df28812ad620ca248329352b78204b25a92a752cdb204d26bf2b222d7a218f26ed2b3c2d2d219426da2b2c2dac207226a42b072d5f206026522bda2c522046261d2bb32c41204326c42a7f2c58202726852a662c45202226782a652c5b204226412a582c7120fa25262a602c26202d26172a4d2c30204e26112a392c2c204326e129292c0c20a8269e29442c3220f825a7294c2c551fa8258f292d2cf31eaf258029152ccd1e94257629072c7f1ef5259a29fa2bf01e73237728692c561c72222c28f22d811ba7242a2b7f33451d9c25412a0033761ddb221228f52b3c1a332452282b2b5e1b86237e28c82a1f1a4e23b828a42a7a193f239d28b92aaa190a239c28a52af319ce228c288c2a681a6a227128502a721ada210e28c929121a4421d726f028a119ba20bc251b2834193a202f255827a718cf1fd724da264c188d1f7c246b2628183a1f1024d325f417961e562348250a17201eb822e7248c16e61d5522a9241e169a1d12227224cf15711dd82136247815191d9a21ed232015aa1c43214c238a14501cf620d2223214041cb0206f22d113ae1b872027223b13751b4d20d121c8125e1b14209c21b312ff1acb1f5c215c12ed1a391fb2203111ed1a391fb2203111000043169d190000000043169d19000027233827b3283e1f16245a289629c11f17245d28932903207c241929762a422033254c2a052cc4207b26482c932d39215227962c022e7f2004275d2c9d2d461f6726e12b202d0d1f6526162bad2c3e1f20269a2a652cea1f9825242a112cc41f8725f829ea2bd91f8c25d529d12b072068259d29b92bd91f2c267029a82b7b205c26bf291c2c9e202426e529392c7520b725f729392c0e207f25cc291d2ca11f2e25a329072c061f052571290d2cce1ef7246429042c931efd245f290e2c9a1ef7243d29e12b6a1e53250529912b8b1e10246928762bbb1ca620fb27b22b69192720df27a92b7018d520c727362b6518f2211628a32a45185a238528eb2a5718e023e228f72a2518d623fc28142b6018ea232b29382b2d19cc231b29252b581af122ce28992ac11ab0210d28af29141a13210b27e728bf19bf2014264928871958204d2560270f19e21f87244d269718f91e0f249925e617731e7b2329254e170c1ed822ce24a816a71d592274240b16571df7212f24b5151e1da421e0234e15c51c45217b23cb14911c072132237114531cd720fa223514241ca020b622cc13781b4f20942208135b1b22200622b012291bfd1f902148122c1bb41f5d214b12a71a591f78210c12161ae11e13219010161ae11e132190109212ce14991436809212ce14991436806d1fdc214322ce151c24a02752297d1e3b2302281d29531f6e2314282a294a1f30244029ef2a1b209b26912cd82d5321ce28c92e5330fc20d527af2d402fe01cfe25aa2bda2c421d8f251e2a022c2f1f42257229642bcd1f61255f292d2b771f4c252f29ff2a591f11251729e02a841fe0241b29e72ab31fe4241a29002be11f64254f294c2b2c20da257a29652b3f2024269529a02b43200726ac29c12b162027269629d22bf31f7d258829e62b441f54254729c32b3a1fd824f528512bb91e7824a728cb2a0f1e17245228482a6b1dc2231e28e329041d84230528cb29bc1c5d23f127ce29df1b4923e927e3297619a1231b28192a4218c02352285a2a2c17ee23d528d02ad5165d24ab29c52b84179a243c2a3b2c4218a324282a342cc5192f249429812b571b6b224128f429451b0021a026b628fb19632048256d274019132093244a26bf18931f2f24dd256918b51eca23c8259917121e27237d25e116f21dbe22fa248c16931d37226c24f615a81dd4210a24de15921d74217d2399153b1d222102231715ed1cd3208c22cb14721c832024222f141e1c4b20d921c0135a1b1120a821af12ff1ac81f72212412ba1a861f5121e711a51a4a1f2821d511041a051f3b211611121ab61eb0202211121ab61eb0202211101aa71fd120f786101aa71fd120f786e31f492477257818be2111267127441dad22e825e4278d1e6b2204260028171ed0219a2571279c1dca21432b062cc21c152c5032e333081f1f290e2ecd2e26212521432782293a1c27253f28292a51209a2456280d2ada1f5c242f28a529941f5f244c28d629761f9a246528072ab51f96247428152aae1fc7246a28fe29d91fa72474281d2aa51f102597284a2afe1f6325d828a52a1520da24f5282c2bd11fe5243c29582bbb1f9d243c29762b4a1ffe2493283f2bba1f822316289e2ab11d6e221c271129c61c4a2206268928771ca9226426a228691c4d222c268c28bd1b1122462691284a1a78228926a628161ae0216f269a28c818f7210e27d928481801239928ad2ab1148e25bf2a822cac85b325692ccd2d17118f255d2ce82dfb1b1224762a9a2c7b1c0b221228222a091b3620a32505280919f01fb124d026c0186b1f722499265218f31e032402260c18711e0f2312254c17381e80227824d916181e1c2236248416091edf2128244216d51d9521fc23dd153d1d4621dd231915fb1cf2202723b014a41c892066225e144e1c3720f921d513381c1020c22167130a1cdd1f83211713bf1bb51f75218d12691b901f56210812221b721f3a21ce11291adb1e1121d11093190c1e71205b1093190c1e71205b10000038158c150000000038158c150000f51e10226223e11766218d25e6269c1cc821ae256b27071dec2194252527ad1c3d216724c325701baa1a311f6e216914d7182620012207130d22ee25dc27e01c4d24c3274229ee1e5624fb275b29201f732401284f294f1f8c24e4273e29541f7424ee273f29081f7224d4273629e11e5b24bf274029991e3e2481272b29281ed82335271329711dda23c826f328531dba23a426e428bf1c5b234426b8281a1d9f22b9256c28cf1ca72266252728bf1b3e224025f227121b26224325f627f21b19222925c627e11b0c221325ba276e1bff21fd248a27fc1ad421c5244b276a1ac8218e241527ff199a2181240227a11988217f24c9268f191b2299240527541a9420702390260a19e11fe327a4292614ea28242f5e302c9dcd29603065318920f3208028ba29651a371d70231f2668169b1f7f235d258d18f21e29230d25de17851eae22d6242d17741e50229124e6160a1e0c2260244316d91dd1213d24e0157f1d87210e2486150e1d3a21c423eb14f21cf0202823a814b61c9a2078226f144b1c49202b22cf13fe1b1f2006224413641bd11fca21b912161bb01f9e217212f91a831f5f215712ce1a681f2221f911b71a331ff120e511c01a0e1fc520ec115e1aba1ea7206311ec193e1e3920d210ec193e1e3920d21000003e16ed18000000003e16ed180000fa20f724c5262b1c0f21812529287a1c72215c257227a61c5e21c9244826111c251f2722d823bb187b1c2b216f23ef162a20e2245c263d1bd422e1269328b81df7235527df286b1e1a247c27f6289c1e052495270d297a1eb32385271d29531ea32376271629271e912361270629191e48233527e328a21d4223e726b428631d31234c269d28c31cfc22c6257328e91b04229a242127da196321ba23b9258e181d22b5226025fa18b7201923bd25ac178020e822a6255317972019232f267817a22077231827d617ae21cc233e279f1814221a24fa262319e6212324ae262c19ca213e249c2672196b213b2482267219f12030247226f718992017245d26791889201224902645189121142438263d19c71c0220d0212a134208e214ee193d009518681c5b20890ca71dd0207e235215a31e28226924ab162a1f20226924bf16bf1fd4213e240b174c1faf210024a216cc1d5421712375153e1d16212c23ef14d51ce120ef22b314991cbd20b8227914751c9c2087225614491c6c202f222b14091c3320e4219913f51b0d20b5217e13991bb51f7921e812751b641f3d21c812181b021f04213912d91ad81ed320cb11cc1aaf1ea720bf11b21a891e7520a911331a531e63200c118f19d21dd51f2b108f19d21dd51f2b1000004613021700000000461302170000f320d3243126a91be22192253427751cee20a024da25791b39204b23ac24ff19b61ed821bb23e018f81f9d23dd248c1aec2069252d275b1c95229a267e28d41d1023fe26bd28081e0c23f026be28cb1df222cd26ad28991d1d23d726bc289e1d5923ff26e828af1d6f230027f228831d4a23cb26d6282c1d00235c269028a31c7422af252228841b4e22f72487278a1aa02292241f273d1ab7228a24f926521a4f22a724f926241ac221b6241227f9195621a5240e27b419f5208a24f3267519bb206124ca260e19ab203e249126fd18882022245726d81868200e242c26b6185f2004241a26ac183920d423052683181320bf23f9255b18d91faa23f2253218bc1fa523fc252218651f85230c2612186b1eda2238254517841ce42011238c15d11a7e1faa2114145e1a981f4122fb10071c3520ee224b128a1c9320a3236213d11cc22094236114e91cbf2050239f14ff1cc6203423b314091dbb200c23be14f11ca120ca22a714c61c732094227e149b1c45204a223014651c1e200222fe13301c0320cc215913011ccb1fab210713d01b991f8b21db127c1b601f5c219112f01a081f2c21de11971adb1ef7209211681a951eb3206b11301a551e7b200811d319181e5020ed10b819cb1dc71f4a10b819cb1dc71f4a1000000000000000000000461302170000f320d3243126a91be22192253427751cee20a024da25791b39204b23ac24ff19b61ed821bb23e018f81f9d23dd248c1aec2069252d275b1c95229a267e28d41d1023fe26bd28081e0c23f026be28cb1df222cd26ad28991d1d23d726bc289e1d5923ff26e828af1d6f230027f228831d4a23cb26d6282c1d00235c269028a31c7422af252228841b4e22f72487278a1aa02292241f273d1ab7228a24f926521a4f22a724f926241ac221b6241227f9195621a5240e27b419f5208a24f3267519bb206124ca260e19ab203e249126fd18882022245726d81868200e242c26b6185f2004241a26ac183920d423052683181320bf23f9255b18d91faa23f2253218bc1fa523fc252218651f85230c2612186b1eda2238254517841ce42011238c15d11a7e1faa2114145e1a981f4122fb10071c3520ee224b128a1c9320a3236213d11cc22094236114e91cbf2050239f14ff1cc6203423b314091dbb200c23be14f11ca120ca22a714c61c732094227e149b1c45204a223014651c1e200222fe13301c0320cc215913011ccb1fab210713d01b991f8b21db127c1b601f5c219112f01a081f2c21de11971adb1ef7209211681a951eb3206b11301a551e7b200811d319181e5020ed10b819cb1dc71f4a10000000000000000000000000000000007d256f1c0720340ca42cf4256928d923682fb129ca2abc26c530362a262c2f2837317329c32b69282c30f92855293228822f7e238f26bb287133e525ab26b02c1d390a247a27a630413dea2ac32c3533bb3dd329932c062cc339b627262c69a06738832ae22b0fa54638d52d432f17a7bb375532c4346da52f369a30f333b6a61c363932da3411a50235262d9832ab1ba933a82a91329e2508315c2a51330324eb2c55293234ce217b279d2866345f1dc5253329b034e11cfb243629e934b01c1e251b29cf34fb1c0826c428cf340f1e762481280935a01c68242d28ed34921c45221e28ff344e1a0d24bf28bd34121c6726be283334f81b9125c12c3434cb1850227b2aab3021180a1a3f259c2aa612051c312489271115fd1d412443265b17981f3f240026c9180a1ffc23bf255318ce1ec6236f252e180f1e002327253f175c1d7222a1243e16961c0f2238245715a31c07220d246615001d18220724aa15a01cc1219b233d15711c7e218223e414231c352140236c14a91bdf20ed22f213951bb220a922dd13871b9a207c2291138b1b7a2038229413d61a3620a121de120e1ace1fe420e511a119551f99207a119519451fc92041117b19331fcd202911c1191a1fc3203b115d19fb1e9c20e1107819a31e1320cc1000000000000000007d256f1c0720340c7d256f1c0720340ca42cf4256928d923682fb129ca2abc26c530362a262c2f2837317329c32b69282c30f92855293228822f7e238f26bb287133e525ab26b02c1d390a247a27a630413dea2ac32c3533bb3dd329932c062cc339b627262c69a06738832ae22b0fa54638d52d432f17a7bb375532c4346da52f369a30f333b6a61c363932da3411a50235262d9832ab1ba933a82a91329e2508315c2a51330324eb2c55293234ce217b279d2866345f1dc5253329b034e11cfb243629e934b01c1e251b29cf34fb1c0826c428cf340f1e762481280935a01c68242d28ed34921c45221e28ff344e1a0d24bf28bd34121c6726be283334f81b9125c12c3434cb1850227b2aab3021180a1a3f259c2aa612051c312489271115fd1d412443265b17981f3f240026c9180a1ffc23bf255318ce1ec6236f252e180f1e002327253f175c1d7222a1243e16961c0f2238245715a31c07220d246615001d18220724aa15a01cc1219b233d15711c7e218223e414231c352140236c14a91bdf20ed22f213951bb220a922dd13871b9a207c2291138b1b7a2038229413d61a3620a121de120e1ace1fe420e511a119551f99207a119519451fc92041117b19331fcd202911c1191a1fc3203b115d19fb1e9c20e1107819a31e1320cc107819a31e1320cc108a1f1016c11d35948a1f1016c11d35944c2c272865290b24172fe2291d2b042879305d2abe2b7f28ff308b2a082c2f2939304729f52983286329fa1dce250725f92dc41d63240029763660292d292829eb38d92b9c2c972a2b396a2bf62c452a4939042cd52dbca9be38432dc12e34ae2b38bc2e5c30fcad68379430ce3152adf036b630773251ac3c362a30b4325fa98b348b2e0b3338217633dc2c60337925e530872b4b342825f62c1b2a533539214328e8292b35931d562689291f35281d4127fe289a35701d84236f28e635501bd224ba287a35d91c6023af28c0352d1c5e2343297335e11c0f2574295735f919ea24802a2835be1a6824602bdb34e8151425f42bd733dc145524c92adb301512b9205a28b52c1517f61f0026d4290018bf1f7325a92804181d20f324e9278718341fb32494261418e61e4524dd25d017bb1dd82390257d166d1d26230825f915351d8a227d24e615731da12260240016ae1d6a22452440163d1df521e623c4158d1c8f217123dd146c1c4f211d239614421c1721cb224814061cf1208c220b14b41bcf204a22be13b91bbb2020228413481b8820d6211613a51a52208d217712db190c2032218311bb19c31f0c216511b919a11feb206311d819621fdb202111e818b01ed620ee10de19bf1d441f0710de19bf1d441f0710d21b541d11203d8dd21b541d11203d8d262ae9285d2a2923972d7929052bde26fb2f9129f12a852822314d2aa22b7d299e31c229dc2a012af83080248025d5282b3266212c28a028bc34b3258128192bbb38b12a582b132c2c3ae72bad2dbaa062393a2c762d09b0db380e2d982e1bb05638da2da72f1fadd137f02ea2301dad0b376f2f5d3184aad635b82e473154a69b34df2d953168243433442db73240287f303a2c94330525842c7d2b943455215c288c2a1b35421e5b26fb291e35fb1d5926302a6335c91ef625b2295e355f1ead247a29b635981db7233b298135dc1c42242e291135181db6257b292a35031df824632a7035781daa24262beb34e31ba124232b44333c1bb423d5299030c619b4217c28202dd2188d209127bc2a93184720f026ba299318a9202d26c528d51858205e250728c8180120b324d4268918b21e4424ff25cc170a1ef3237f250817c41d8e234c25b716d61d55231925cc169c1df722cc248816341d7d226324e515a01cfc2118241715611ca2219e23ae14cf1b362113230c14851beb20ae22cc13451bb9205f224e134c1b9a201e221a13ee1a7420dc21bf12af1a49208f214a125e1a24204721ff115e1a07201f21cb11111aac1f1d218511181a7f1f1a2158117e193d1f36215811031af71e8d204611031af71e8d204611b912021b681d5d85b912021b681d5d859727da285d2a0621e92ba629022b7e25032f4e2aa82b4e28ab309d2a112c702957317e2a052ce129e531852a092c1d2a5e32662aa32bcb29b632072a0e2c76295733c82a642cf929aa33ca2b3e2dbf291a35e32b532db329eb34512c2d2e8d28da34d52c9c2e2e2805352e2d7e2f0128b634242d46305c285b34192d3d30962819343c2daa301929ea322e2dfb31f62816304f2cda32de25182c492b50345b210b29a62be7341a205d28dc2adb343f20ec27b02a2835b51f0326e3292335d01e1526402a3835db1f34259d2a5e350e1fa824532a1235041ea824282a1d35de1db724292ad434cb1d6924282a7934db1c6b23f0292a33b21be12265293a30221b7d216428d82cde199320a427162be418192107279929c6190a213c269b28b5196f20da25452806193620a9252228c61802203d2571278a184e1f672439260518731ef423ba251917c81d84235b255d164f1d0623ce24d815dc1c87226f245a155b1c39224e24cb146e1c0b221d24bc144a1cc421cf2396142d1c7e214b235514f91b3721d0220114081c0a2170220d14ac1bd320292277131d1ba120e921ec12c61a9720d6216012b61a8420bf211a12bd1a54207c21e911fd1a37202e212212191aff1f1e215a11061a9f1f27211811061a9f1f272118114a19ff1d3a1f6a8a4a19ff1d3a1f6a8a8624eb272629db1e26299e29c62a1124482d262a9f2bd3262e30c62a3a2c00296931d32a662c792a3a32fc2a652cdb2a83321b2b5c2cf62ae2324e2b832c232b2033852bbf2cef2a9f33c92b242d2c2b72346f2b272dcd2b9534212c8a2d752bae347a2c312e052b8334b62c1d2fc42a5f34bb2c1b2f8e2a8e34ab2cd42e1f2b0c34ae2c2530532aa432f52cd4306729062f0f2cad317e256a2b142b3a338f214329572b8e34732041284f2ad7346920f826942a08350f2061266f2a1e35d61fae26482a283535209a25e52923356a1fdf242c2a0235731ef324c129f034651e9324aa29ce34c41d5424b12955342d1d0a2361296732191cac21b328cd2f6c1aec20ec274b2c6b196b21a827bc2a231a44211327542a221a1821a0264329191a98202126b5287f194420a7252e28f718991ff72442276c18461f962483261e18c01e3824fc25a5177c1e1224a92558172d1ea0234d25cc16d31d1923de2469163f1da12296249b15101d5f2250244015de1c1b2216240c15801cbb21b2238614281c6e215d232e14091c3b21fb22da139d1be8209e226813431ba4203b221113cf1a8820e1216912b81a4a2073215312701ae51f4821da11751ac61f2e211412041a8f1f692147112b1a501f1121ce112b1a501f1121ce119716b41eb320f08a9716b41eb320f08a4a247d28fa29531f3227db29672b9922932a682a2e2ce124412eb62a082c2428c9309e2a372c082a2732e92a7a2c8f2be432922bb02c032c6533da2bf22c122c9e33052c282d122c1234312c7b2d5a2c6c34112cc22d722c7a34622cef2d802ca434982c202e842ca834ae2cb92e892c63348e2c3e2f212c4f34842cf02e322c0d34bb2cac2fe22bff31b82ca030d629042ea12b0e317825ab291c2b423256214c29962b2e3453215828dc2a8334a5205427a82ad534262099263c2af334af1fe226672a18353a20d325532a2335571ff4241e2a01358f1e0625db29f3347e1ea724aa29d834dd1d6d24a2296034701ddd223f296d32371cec22f928f52e401c9d215628252ce51a02211528e82a271a69218a27f329a61a3321b6268929631a9e204d26fc28ac196d20dd256b284c19fe1f54250428c818621fd1247e274d180a1f7a240c271918951e412489267517411ef223cf25e316231e83231c25c116c21d1823cf2427169d1dc2228e24d215891d80225424bd15391d25220f244015b81cc321a623be14771c6d211b235814071c0921a322d713261bb7203922f512b11a6d20fd214d12831a2b20bf212212341a07209c21a411581acf1f74219111081aa51f5f217b114f1a511fdb2089114f1a511fdb20891100002b192e1c000000002b192e1c0000b821d8264528271c6826ff29a52bfa216328452a072c5923af2b212b612cb3254b2f182b702c1029a831332b9a2c7e2b0633c62be12c8a2c9333d52b012da72cbf33eb2be72cc22c1034322c7a2dfe2c6b347c2cfb2d4a2d9534782cfc2d562d81344c2c2b2e1a2db334712c672e532d7434852c632f0c2d7e34512c582e172d0f346e2ca72e782c5e31992ccb2f9129982cba2b03305324d029dc2be03149214f29a12b9033d42080283c2a713461204527a92adf348a1f22274e2a2435da1f3d27192a34351920ce252d2a5335f11e5725152a1d35bb1ebe24242a5835201ec024102a3635fc1d74247f29a034781dd922e8280832351c312155289e2d611a2220cd270e2b1419fb20fb27e62a1e1aa021ea27902ae81a802109277829951a94201426842855194b20ad250a28001915205c25d227c1180720042573278f18531f9724bf262618c91e5a240e267817221e0a249e25c016c61d872336252c16691d0f23f124c815551daa229f2488153a1d5d22712441151a1d032229242115dc1cd021fb23ba14cb1c9b218c23aa14961c4e2133235114851c1821c2221c148c1cc7203122fb13301c5e20ab215913491b4220a1212812d51a20208421ff11781add1f38214311651ab21e53206310651ab21e5320631000006b196d1c000000006b196d1c0000a82233277228831cf525f729b92bd8219527a52a232c9722aa28be2a562c8423822cce2a802cb0267230e52a902c082aa732382bcf2c832cc833df2b022d272d2034222c3c2d982d5534312c522dbc2d9034552cdd2d0b2ed434462cf02d642eb834522c002e3f2e92344b2c5d2ee82dbf346c2c722e222e96344d2c142ea22d0e34752c402eb92cac30ee2bfb2e2429792b732b222fbf235628bb2b7130a3209227fa2a06324a203d26c22a4434441ff626aa2af7342a203627532a44356e20b826452a41353c2071255a2a7635081f7324e0296c35bf1de624e6295f35541e2a252b297535821e36244629a6344e1d5722ce287331fd1b392134280c2d6a1a1d2138289b2b1e1a0d223a280d2b0b1b8122e927732a931bf6212d27c129f11a00218c260c29aa1997200d268e283319272085251a28b51803202e25b9276b18a91fed2452273718951fbe24e6260d183b1f76245e26bb179f1e1524d5251317c61d65237425fc156d1dd8220a25a115101d6222b1241715e71c11225924c614c31cc92108247c14901c7f217f234b142d1c1521f8229813931bbc208d22e3123e1b8d205e229612391b702023225712151b5c20fb213712321b4920a8215012961a21209e21c711a61af21f6c213211a61af21f6c2132110000c6198e1b00000000c6198e1b0000fe226d279a28da1c72259229232b5721ca26ec2a472ce1225827d92a802c1723b628a82b8c2c1924e02cbb2aa92c13277331aa2aba2c642b9a333a2b142d462d4334ad2bfd2cea2d6b342e2cba2d462eb134722cde2dd02eff34752cba2d412fe7345a2cf82d1e2fe334272c872d182fc5342f2c262eed2eca346b2c262ea62e0b342d2c7a2d3a2df42ef72b182e2928832ad42b682e2b238928b92ba92ed9209027722a88302a203c287e2ae732ee200628f32aa834d1208227ea2a6f357e208f26282a8d35d91fc526352a8f350d201425062a7935131e7d24c729a435831d6f246f29a335721def231629a934e01c7c22f7281d31f81b68226f281c2cdf1bf020d827792a111a9221d127252aaa1a0d22a227f8293d1bb9212c27bb29d91a0a21b3266929081af72045261729c8198d20e8258a28281937208e250828c718ed1f2c2573275c18721fd62415271918331f84248526ec17ac1e1c24e5255817121e772370257d16b71df3220325ee15411d9722ae247215201d4e2260242715d31cf2211524b214a91c952194238914371c2a21f322ef13ba1bbf2050220713351b762001228e12d71a3f209421c811d81a26205e21c911f21a2c204321a611e71a262085210e125e1af11f9021ff115e1af11f9021ff1100006017be1a000000006017be1a000077231e281629b51cfa25542a082cc521b5269d2a2a2ce6229f27742a3c2c5b23a427432b3c2c0223de28f52a9f2c0024cb2d802aa82c93287832912b012de62c5434d32b1a2db22eb034122c432d412f0535542ca02d0b303135642c062e2f3021356b2c152e22303235612ce52d2f303735852ce32d0930f1343f2cb52d2c2fad322d2ccf2d6c2cf42cf32aa62dee25f528192ba02d75219127252b512d0b2029289a2acb2e94207427a42a64315720ed26f42a1e3425209926a52a403528203b253d2ac235c21ea224d729f835fc1de424eb290136521ef224db292d363c1e98268d29ff3528202c243f29d034201d3323a02828306c1c53222928852cc51b3021b327d22a351a3e22c1275b2a451bc621a427172a8a1a1d228127bb29ba1a0222fe261c299d1ab5217426df28481a1921f72585289c199d2094252c28ee1821202d25b3276a18b81fea243a272018f91e8724bb2673177e1e39242f26bb16e31dd623ab251b16b31d75234025bb157f1d1c23e8245a154e1db722a8242915141d60228024f214cf1c1b225f248614801cbd215d243c14311c5f212324a013751c1821fe22d2137c1ccb2050224c13a91c7c2008224a13201d6b208c215c13561c1f2074210e13b61a9b1f2121d110b61a9b1f2121d110000091192a1c0000000091192a1c00006a222d276b28591cd225c329592bce215426f129e72b1c222d27b22a492cb222cb27312bd22c46233128ac2bd52c6c230429052ce32c3324ad2ecc2b0e2d7d295633fe2b592d252ed1343e2c502d1d301e35752c2b2e87305f358d2c232ec1306e35432caa2dcf306835252c452db3306f35bf2b082d7730ce340d2cef2d962ffa30ab2bbb2d112b1b29922b362d7022bb27052b972d61208528922a482dd420a228e02a7c2df4201726622a042fb41e1e282a2aee31cb20ea25112b0235441fb9256e2ad835651fde24202a0d364a1e012697292436911f6426c7296f36d91fbe231f294836a11c86233f285f34621c8a229427452e681b3e241e282c2bcf1c5c235828dc2a2b1cb222f127192a951b0122ab27eb299c1ae6217c27c129af1a7c21082758290a1a1b216926b9289e19ae20d6254d2827195a2080251628ca18eb1f2c2596275c18741fdd2408271a18d91e8524882652175f1e42240f26d016f91d0224b6256216bf1d88237025f6159d1d17233625d215671dc622f5246e15201d5f22bb24fd14d11cee216e24b014711c8221d7235214de1be7200b236813e51a602076224512a71a29201e220c12d41a2d20e021fd11251b20207c214512731ab71f13214011841a951e4c20ae10841a951e4c20ae1000002519db1b000000002519db1b00008f23cd27c928291c9325c329e82ba5214b264f2a382c6022ba26b42a672c99227f27092b962c1e232028a02bf62c91231827e92bef2c65225129dc2b152d9f243e2f5d2cb52d4b2aed330b2c1d2d242f3635752b5b2dc8309535072c882d3531a835682be52c3031db35c42bf32c4731aa35022c4e2dd5305a34db2b352d022fb42d1b2b832d0c289228b22a232de8219228b92a5e2d78218328a52acd2d1d213828bd2a152ec820e526002bfc2dcf1fd826512a1230c01f7426982a3933841f21258d2aa435f91d6b251b2a5e367c1e1f28d2298936cc204425a829c636221e8e231d296c36661cfd24c4287734cf1d19224128912de81a9e22db27a12a7f1bf1214528bb2abb1ae62235287f2ad01b842229286c2a611b2a22cb27c029fc1a9b21dd260c29591a3a218426d028c019ea202c26a4286819c120e22573283c19882084253628d81825200d25e4276e18bb1fa324f5262218ff1e302430267a17501ea823d0258c16151e54237f251d16ab1dee224525b3157d1d9122fe2457151e1d2e22ab24fb14f31cc8215724a814921c5521d2232814581cfb202123e713221cb5208b224113091c81203522d312381c7f203222dd12541c62200522c412291c2820c421c512481bae1f3a212812481bae1f3a2128120000bb199e1b00000000bb199e1b00006f21aa262f28061b4225aa296e2b3e215b265d2a1c2c3d22c926b02a6e2c7122f926ff2a8c2c8222df27582bc12cf822e627a12b212dbe22bb27142c1c2d5a22e0282f2c052d1524f62e4f2c4e2df12901344a2c5b2d382f46350c2cad2dec30e1353c2b052d7d31cf35862bef2c5431fa34682b512d5330d130e82af32c9b2b742aec2abc2c4624da296e2ad02c0023eb27702a122dbc203426512af32c6c1f5726432af82cc91fb2256d2a0b2dd11ec2250b2abb2db41ea725c4296d30951e8d25b32a0a35d21ec024752a9136d61df524ea29c536ef1d75245b290837311d0625e328bd36b11d0e250e293d34671dde226828962c571bd8216228db293f1ab9223528262a301bb22239284a2a281bd3222728242a4b1b9d229d278d29dc1a1e2219271729581ae321d426ee281b1a87218026cc28bb1924212e26a12855198a20c0256b28da1820205125fd2769185e1fd024fa26e0178e1e5b242e260117011ef923bd256b16c81d6b234d25ff15891df4220425bd15761d9822b3247d15511d34226f242c15361dda212824e714d71c75219e2367147f1c1021f4221614111cbd2078226513db1b8d202622a512dd1b77200c226512fa1b4120fe21bf120d1ce71fbb218f110d1bee1e0721f7110d1bee1e0721f7110000f918ab1b00000000f918ab1b00002a221e276028601b4925dd29952b1a21bf25122a092cbb214226bb2a762c2422f726252bbd2c9d227c27882bfb2cdd221028ac2b1a2d10231928da2b252dbb22c826182cc62c77214828572c292d09235d2d882c822d9428d8313b2b8b2c2c2d7b34e02b4a2def2f5e34202c9a2ebc2f8e314d2be62ca72cfc2b072bb52c0d260528c92b242d9421cc26022b982d80203427b22a312d8a20f926a32af22c48200927d42a1a2d52205426632a2e2d921fb325102a592dd21e1f253f2a772df71d2425d8293f32fc1d3125ae29e7350c1e6626a029e036731f10244a294037991cfd2167289e36971a41253a29c7339d1d14238d28462b911b2a238d28552b6e1b32248f284d2b5a1c52244628452b571ca4231c28e429ae1b0923f727b629121b8822c5279129901aff2153273d29061a6321c026c5286919c72036266528f4184620a42500284b18c91f3525442709181b1fca24a8265e179b1e61241d26da16391e0b24a9254116061e822345250d16e91df722f124c015ee1d91229d249415ab1d22224e242815531dcd210b24d814db1c7621aa236a146f1c38213e230814101c0c210c2364135f1ba3207a227712471b3d20c6216312b01b13205a21bf12761bc41f6d21d511a01cdd1f24210d12a01cdd1f24210d120000ba1a3e1e00000000ba1a3e1e0000a3240129682a41207325f829b22b86218225062ad32b5121ec258c2a4d2c9e216626e12a842cf9210827382bbb2c39224027652bbf2c132287276b2bce2c1122e726ec2bda2c74210127012cd82c88218e26242b042d2d21502a522b432d1625662d592b222d7028752dcf2a222d7c28012b772ac02c88250928432bcf2cfc217b26c02ac72c7f2002286a2ad32c4e21e726a92ace2c5a2078268d2ada2cf21f2d26542ab42c641fde251c2a882c051fe325c229412cdb1ec1253729192cb31e2525a329492ed41d0524d0294c348d1c0f245829c136781c3526c529d137a21ef323a629eb361f1cca2505294832d11d48231e28e42a521b03223028ff290b1a4d238e28962a561b53235328512a5d1b87223a28fc298f1a2d22dc278c29351acc2152274329d419a8210b272229af1930218c26e8283719e7201c268928161971208c251f289b1803201a25ac272918841fb2241127cc172c1f5a243b263517ac1e0624a525b4166a1e642340253e164b1ecc22d424ec15161e4d228324bb15891dcf2128240815411d8221df23c714e11c3321452370146c1cfa20d9220514da1bb12060222313151b6720eb213712031b2f20a72127121a1b0e2067210112191bac1f6121c611741a6d1f3d21a310741a6d1f3d21a31000009e18cf1c000000009e18cf1c00008424b028e02912203c25702a262c0e217325002afa2b1621af258e2a3f2c65212d26082b8b2cc421d726692bd32c0e22fb26752bec2ca0210627682bea2c5321e026902bf92c19210527bc2bff2c35214a27742b042d8621f7262a2bcd2c472181282a2bd32cd3228228662aa62cd5227227ce2aeb2c8621ed263d2beb2ccf20c326862acd2c5e2037277a2ad12c6f201527802aaf2c1f20cb265c2a902cb21f62260d2a632c3b1f4c26102a7a2c221fd925122a812ca01e9a25df294a2c581ed725a6293e2d6d1eda24d728132f301dbb23f2285135021cc42165297c36fa197321c428c9357a19cd2193271b30d51907230828332b101b6d224528792a751ab1227b28892a831ab0224728892a821af7223d283d2ac71a65220a28d929391a1522ae278c291d1ae32152274c29ea196821e12603296f19ff205a26b7282f198d20cc254928b8181d205025cc274418a31fe6244627eb17011f7724a2264317801e1424142688162f1e84239a253716d41de7221e25ac15c31d6822b9246d15671ddc214424ea145b1d7621da23b314461d31213d23a014171ded20d9224e14bf1cb22081220314301c612028221513b71b3020fb214712831b0920cd215a12ce1ab41fbb21c011a71a5d1f4421c710a71a5d1f4421c7100000221a3b1d00000000221a3b1d00003224ae28782a2f20cc244929cd2aa120f8246a29f02aa42060255c2a1c2cd9200f262c2ba32c442154268c2bf02c4d217c26952b002d39219026682bdb2cfa209b26472bbd2cb020b9264f2bbc2caa207226332bbc2c7920c326f52aa02ccc206c27dd2ac22c45212f28d22ae12cac214927862a982cf020c426832a862c7a201027972aac2c902064264d2a872c07202d263f2a722c961f10262a2a6c2c411fe225072a682cda1eb125f529762c721e6625ef297f2cf11d6a25c9297a2cc91da7258129592c0b1e4f240329802c9b1c4e2471286730991c96202629e234e618ba23c1289634011c8a210d28fa2c9119c8222528ee2a621a99222d285d2ac9197d238828992a171a3e237428b92ae5194e237b28b02af1193a236928732a1c1ae1223d28192a411a7922e3279129171ace211e270829d61937218326992868199e20dc253228ef18142034258d277d18781fbc24df26fc17f71e4d24372672177e1eef23a925bb163c1e412322254516ec1da922ad24c415b91d2b2253246315901dd22109243c15591d6e218123dd14001d2721062363149d1ce02090220c14761cb2204d228b13701c7e2006223913511c5420c82106134c1c38208d217212761bc01f8a21d511d01a671f67215311d01a671f67215311000036178f190000000036178f190000f5237228a029ef1f53243329be2a1b2033257529082bc420dc243b2a3b2c39201a269a2b422d3521c6261e2c8e2d3d21e326132c682de420e526f82b3f2d9020ac26a72b132d6b209226512be52c5a209026262bc32c73208526d12aa52c86204526b72a982c5a201f26ad2a8c2c58206a268f2a8a2c74202e265c2a8a2c3020b9266c2a882c58208326552a912c00205b264a2a772c9b1f4e26292a702c571f9c26162a542cb31f4526fb29842c1a1ff025e429722cba1ec425f929772c591ee225092a642c7a1e5424d5288b2cc31c52216a27552edc1944201b28ed31d518d0211528d731651aec1f79275c2cf717502198270d2ba9180d234a28e12abd195923a528bc2a821940239528b92a341917239528ad2a8b19d42286288c2ac6199a228228682acb193c224628272aab19a7219c279729521915215d26c2281b1960207c250a2865180520052528270a18951fa1249826dd172b1f2e240c266f175a1e782371256216db1dc5220025e215991d5a22b42472155c1d13226e243815431ddc213524f4140b1d9b21fd23bf14aa1c4e215c233e14591c0421d522e813171cbc207c227013df1b8f203522e812951b5a20df21a7126c1b2120a2214712ee1ae11f6d21dc11d11a591fc7208b11d11a591fc7208b1100007a14e218000000007a14e2180000d323d32718292d1f6224bf28052ac31f6524a628f029ec1fa024d829802b18204226d62b102d3d212627b82c532ebb20bf27bb2c302e2420cf26312c612d471f2626592bda2c291f3626bf2a812c0320f7256e2a512c2420d725492a312c2520e025282a222c4420c725ff29092c1a20d325ff290a2c22201726052a152c3a200d26542a542c1a20e2256f2a702cfa1fa825472a542c4f1f6d25ec29372cd61e5125d629352c5c1e2525c1293c2c271e0d25b9293a2ce21d0b25ba29332cdf1df2248329222cc31d07256c29082c041eb423ae28232c7c1ca11f7c27d42b521846207027d92b1d19aa204427712bb01857219427722a2c18cb2247288c2a3a18e6238b28672ad0179a23a628aa2a84178b230329f52a3618982320291b2b351942230529fa2ae81927227e285b2acb194a21b12772292619e9208326aa2817199020a625fe27e1182020b624ae2669184f1f2324d5259417901eac234e25ce16131efe22eb244d169e1d75228e24a515521d162241242d152b1dc32102240715d41c652197238c14a61c21214f233a14711ce72017230a14431cb020c9227a13ca1b6820a022d512841b40202e225b121b1b0920c321c811421bc31f8621ac11b61a541f89210811421a0f1f2f21b110421a0f1f2f21b1100000a1184c1900000000a1184c19000012217525d526161cc3231d287829df1e8d233b285b294a1f40248828d32909206425112b782c9920a728a12e30304521a8288b2e2a30b01e5a264b2c752d2b1dbb25452a272c7d1e7b25c229ab2b9b1f5a2579295e2b6e1f9f255b29162b441f9f253b29ee2acd1fa0253f290b2bfc1f98258029552b26204226d029ef2ba520c8260b2a262c7d20cd26332a2a2c2e20bc26392a442ca11f4126512a802ce31e6e26682a842caa1e0d266f2ab42c461e0226672a8b2cce1ed625422a5e2c5b1f5725e2291b2ce61e7d244a298a2b161ec8238e28ba2a461db1230d28062ab91c9b23c627b4294f1c9723d727ba29a91ab123e627d1298b18cd230828e4293817be2343281b2a2d16de23fa28f62a47167024eb290e2c15179924222a362c41188724ed29072cec1994231329dd2a221bcd21f4276529341aee20fd252b286d195c20dc24b626cc18a11f4c2406263318e31ef823e7255d175f1e5c23b025d016381eee224a2573169d1d4c229e24a415b11df4211a248a157d1d802191232a152c1d31211e23b314ee1cf220b1227c14851ca2205222ef13291c672005224d13851b2d20da219912fb1aed1f9a21e711d41aa81f79218f11db1a6c1f332194112c1a1c1f47210611f219ed1ec520d610f219ed1ec520d610471ad120fe213587471ad120fe213587a02004256c26b71a35228f260428cb1dda227d263b28651eb323de265728f01e9020b6260c282f1cb82a8331aa32811f812a3931c932e1202c217728802a151cec2400283f2ac61fc8246628042adb1f91244f28cb29a61fcf2472281c2ae71fdf249028392ab21f5025bd28752a1c203f25ec28c02a0f2047252529ed2a2b20a125d529fc2b44209f27462a502ced206f26262bc12c92203526512b182d4f20a126d12b692d99202d260d2ca12d7c204a26eb2b7d2d9020be25432bfb2c5a209f246129cd2b011fb023c127bf29371dc5226226dc28281c8a226d26cb289d1b64225a2687286c1a9c228626b428031a7a229f26b4284519a22147268c2839184621d026f2283916e7232429cb2a8c11e824722be22c838b83256e2c0e2eaf1642250c2c862d471c4c243f29242b2f1c6b213327ee28f719ea1f0f258a277c18b31fa124d2263d18fc1e25241426b0175b1e5d2343259716571e9e2295249316441e1a223c2419162a1edb212a240016e51d932107248c156a1d59210124ec141c1dfb2067237c14c61ca320ab223014881c4d202b22aa136a1c1d20f7212f13391cfc1fc221df12091cc61fb2214f12ab1ba91f8021c0113c1b611f4221a811511ada1ef220bc10cb194a1e61208710cb194a1e6120871000002c186c19000000002c186c1900002f1f9523d024871826214f250b27111ceb21da258327ad1ce8218825e826491c811e2e221624691843152f1e14214d0f332151251427e11b672415288029d01e7e2422289229181fa82423288c29341fab2411287929391f9e2406286829ff1e962413286329cd1e852409285629461e6f2410285929031e3324c32742296d1dd7239c275629b11c84234b272c298d1b7f23ef2626292f18d5223726b9287d03dd216e2536280d953221b2248b2723958a206c240227608e8d202e247f265b10d3202a2473260116622186241527e518a921b1244427df19b0219a241d27b71990217524fd269819ba2194241c27641980218c2407272d198b219724282738192c21f3235a260819ef1ccf2268267d144723f329d72b1b11082a9430dd31b393cc26a32d342f7b1f4c1c9b2418280115b71f4523f4253f180e207d2350255618c21ea1220025cb16ad1e6b22a1247f163f1e21226c24e115121edc214a24b615a71d912116242315481d4f21e623cd14151d0a2168239f149f1cbd20ad220e143a1c522047222513f41b1e202922b912611bfe1ff4213d12121bdc1fc421fa11e91aaf1f7f21d811cc1a8d1f3d218811c31a501f0a218011df1a241fd82097115f1ad31eae20fb10371a811e55200f11371a811e55200f110000db15ac1800000000db15ac1800009921762538276c1c6121cc256028971c3e2145259c27241c9b203a246a251a1a9b1d3b21f1223e17e11d78236d25bc1832229d267628171dcd236a27fa28291e2f24af272629571e4b24ca273b295f1e4224d1274e29741e1924be275229361e0f24bd274d29051e9b2383272d29661dab2364270f29331de223e326af28b71c4c239625e9271a1b90200223d225b717ff1ee0204f25ea15d51e50220325a616dd1fb1221b2514184f1f6223b1259417581f3b237f259d17dd1e0123a425ae16dd1ef6228325ae16691f4523f4253617d21f992309265d17a020d3231c265a1819211b245626a3183d2125247326ee18f8202c248d26ae18c8202d24ad26801899200d249a262e18fc202d246f263718be207b236325b717f414891c131f9508c5115f18ab1c4a011e1ce71ec621a611bb1ee22125241f16f11e262264245016611ff0215a247a16e81eae210e240f16381e5e21552375158b1d13215623dd14f71cf52025238414ad1cd620f22240148c1cb820d1222214521c85207522db13101c512018222113e61b1f20cd21ee127c1bcd1f87215412611b721f44213d120f1b051f0321be11ff1adb1ece207811fd1ab31ea5203d11051b8b1e72204311661a571e6420cc10db19ea1def1f6410db19ea1def1f6410000077174d190000000077174d190000c2215725ae265d1cea21de259e27631cb4207b24c925ae1a0f20d4228324c319451e77226724c0186520a6241226391b59225e263828371d5c231327c9280c1e6d233d27f228dd1d612347270929b51d7d2343270e298e1ded2353272429a11d2a2476274b29c71d1d245a274329511da623dd26e428941c4023e9253b28fb1b43220f25d0277e1a5622d32464272b1a1223d5246627e21a1e2307258c27281b73223925b327e51adf213a25d627761a70211c25bb27fc191421f3248b279719ef20c2245b274619d5208e2414272a19b4206524ce26e118972044248826c2187c2020244b26a6185820012426265e182320e32311262818ef1fc123ff25f917d71fb723f32511187a1f9723ff25c017381f7d23b6257c17d61d4b2276243d16ef1a1b201522da13ba193a1fbe2135119d1b09208a2239116d1c7620d023a412c01cb220dd230414f71cc5206f235b14e71cc0205f234d140e1db32045239814fd1c9920f7226014df1c6720c5224614b31c4b208022f2138d1c26203a22b2134a1c0a200322fb12011ce91fe3218412a51bbd1fb62138125a1b821f8121fb11cb1a1d1f422187117b1aec1e062111115b1aaa1ec020f810541a6d1e7c20f310eb19291e6120a010c919f51d0820330fc919f51d0820330f0000000000000000000077174d190000c2215725ae265d1cea21de259e27631cb4207b24c925ae1a0f20d4228324c319451e77226724c0186520a6241226391b59225e263828371d5c231327c9280c1e6d233d27f228dd1d612347270929b51d7d2343270e298e1ded2353272429a11d2a2476274b29c71d1d245a274329511da623dd26e428941c4023e9253b28fb1b43220f25d0277e1a5622d32464272b1a1223d5246627e21a1e2307258c27281b73223925b327e51adf213a25d627761a70211c25bb27fc191421f3248b279719ef20c2245b274619d5208e2414272a19b4206524ce26e118972044248826c2187c2020244b26a6185820012426265e182320e32311262818ef1fc123ff25f917d71fb723f32511187a1f9723ff25c017381f7d23b6257c17d61d4b2276243d16ef1a1b201522da13ba193a1fbe2135119d1b09208a2239116d1c7620d023a412c01cb220dd230414f71cc5206f235b14e71cc0205f234d140e1db32045239814fd1c9920f7226014df1c6720c5224614b31c4b208022f2138d1c26203a22b2134a1c0a200322fb12011ce91fe3218412a51bbd1fb62138125a1b821f8121fb11cb1a1d1f422187117b1aec1e062111115b1aaa1ec020f810541a6d1e7c20f310eb19291e6120a010c919f51d0820330f00000000000000000000000000000000c9249e1dfc1f3b216e2cbb274c29bc24d22ff42b752cdc26d3302c2a2f2c8b273831bb29532b14281a31fb289a29532730342a28362a3529be389128fd2af62a6739bb2ba02ad324a9383e2a192cf2a1e337342a182c87a489367f2a352c41a69435f429472c57a5bf35652c912e3ca66d3645327234f8a6b7362034c03549a7e634a52f6e3160a07f341c2ca330e31a1c33242bd9314f24d830bf294032df21bb2c23294533fb2002289a28e6333e1d5225a0283734541cd3234b286d345d1b8b2334288134941b812438289f34861cdf233527b034151cd62237279234171b1321d427923443197e211a283e34381ab0233b290733fe1aee253a2d0233001bf1211f28a92c3719831e622485289517e41e70242e271f18d41e0424002616187f1f0424cb255e18bf1ec323b125db17c11e99236c25de17041e0d233325d116721da122d124ff15cb1c4a2271244615711c0e222524e414b61c0f2211240915781ccd21af23a314641c9321ad238d142a1c4f217b232f14701bee2020233d13431bbe20cf221113201b9a20a522b412301b7e203f22c412b51a322093215012f919ba1fe020a011d119701fba204a11ed19661fe1203311bb19591fdc200711031a5d1fcf20161197191b1fbc208c109619c81e44205e100000000000000000c9249e1dfc1f3b21c9249e1dfc1f3b216e2cbb274c29bc24d22ff42b752cdc26d3302c2a2f2c8b273831bb29532b14281a31fb289a29532730342a28362a3529be389128fd2af62a6739bb2ba02ad324a9383e2a192cf2a1e337342a182c87a489367f2a352c41a69435f429472c57a5bf35652c912e3ca66d3645327234f8a6b7362034c03549a7e634a52f6e3160a07f341c2ca330e31a1c33242bd9314f24d830bf294032df21bb2c23294533fb2002289a28e6333e1d5225a0283734541cd3234b286d345d1b8b2334288134941b812438289f34861cdf233527b034151cd62237279234171b1321d427923443197e211a283e34381ab0233b290733fe1aee253a2d0233001bf1211f28a92c3719831e622485289517e41e70242e271f18d41e0424002616187f1f0424cb255e18bf1ec323b125db17c11e99236c25de17041e0d233325d116721da122d124ff15cb1c4a2271244615711c0e222524e414b61c0f2211240915781ccd21af23a314641c9321ad238d142a1c4f217b232f14701bee2020233d13431bbe20cf221113201b9a20a522b412301b7e203f22c412b51a322093215012f919ba1fe020a011d119701fba204a11ed19661fe1203311bb19591fdc200711031a5d1fcf20161197191b1fbc208c109619c81e44205e109619c81e44205e10dd1d1a1b921f281bdd1d1a1b921f281bfa2be9285f2a8524f62e3b2b702c8d268c302d2b5b2c2228fd309c2afa2b8a28a231662a6b2b1f29bc320f291c29fc2a76385e2ab52bfc2c7639052c032eeca9f438752cb32d7baebe37182c862d4fadd336fe2be32c76ac7e363d2d492eaaab2536ff2de22fa5abfa358530133288a9c8354b314e33bfa7443550304e32b6a54634f42dc831a31fb5326b2c14323526a030a72b2e33ca22382d622a1a34551ccb28132a7f34091b452670298c346719ab275929ed341e1ad825d828df34321cc5241e29b734b51dc5230c298934241d182345298334601d9523ea29d534051dbe24d72aa634fa1d8825fb2aa733531ca424122ba231121a54249729ce2eb2140b219a271b2b3d175b20e525bc2819180d2079256328e21741203025d0276918b31fe524d9261d18481f73242926c8172c1e0424c4259816bd1d642334252316401dc022a1249c151f1d9c22722479154a1d65224e247b151e1d0b2203244e158d1ca42190239314551c542123233714301c1521d7221314011cee2090228a13cf1bd92054225913ab1bba20252238132e1b8820dc218712a91a52208b210e12ed190b2026216411d419c41f01211d11c219891fdf200e11ec194b1fc02001110d19b31eb6204510b919fa1dae1fda0fb919fa1dae1fda0f1f1c2c1fc22007191f1c2c1fc2200719f429b329192b3a247a2d3a2ad72b0826ea2f152ad32b1a282231472b1c2cff28da31a129b82a8229cc33b4285529582a8d376b290c2c3a27ac38512c2d2d1dae8c38c72c2d2d66af7437772cf02d5aad7936b52ca92d67aaef35582d842e70a6dd35e92de32f9ca5f635c32eb03060a8d135322f3031cca71535d52e2731d6a15734fb2dd93027242633662dc13128263f30402c7f327924892c332b4e33141e98288b2a5e346d1d6e26f92992340d1e1926572ad934521e1426262a0035b11e75250e2a4535871e1b252d2a2e35991e2f25e12a2b35b21e25272d2af0340b1efa24b22ac434cc1d0b24e52a9f339c1ba522462a20319e1919222529292e931836214d28f32b6818ad205527022a4018b420e2263e29ba18d3200f268028d9187b206a25162881180a20d82440273018d11e5e2440264a17401e0a249c25ae16db1d96235a254216d11d5a2322253716bc1d1123e124f215781da7228424ac15fd1c27223f240415c21cd021e423a1144f1c67214f233214191c0c21d322b713d01bd2207a225b13ad1bad203022fb12381b8b20e7219012e71a62209c214712961a3d205621fd11721a09202f21a811391ab41f3a217611451a951f20211a117319301f3f219c101c1afb1ecb20f8101c1afb1ecb20f810a90cb51c981dc309a90cb51c981dc3091a28b2293e2bde22c12b802af02be324172f292b4d2c0428cb30712ba42cd1289c31c32bd12c47292f32ce2bc42c6d29cf32da2bc12c1b290e340d2cbb2c4528ab345b2c622dda26c934d92ca22ecd254a35c42c592e6d23d134f52ccf2efd230735942d252f2c24d834252e2130a324b734312e7e30ec266534b52d343092271334842d88300828dd325e2d6231aa27ad2f7f2ce4318724f72bda2b4a3372200729a32b38348a1f6728242b83340120de27d32aea34281f9426832aef34081f17273b2bec3478203226002b0d35cf1f2126dd2ac434881fa525db2ad134ef1e5e24a12a6534161d0824622a10332e1c8c231f2a1231581ba923c829492e751bd9216a28642ce01957218b27fd2a5e194721d5267029a4190621322683285e197220d3254828c01848209b251828701804203e2559272a189e1f9c246126e617d41e2424e92515171b1eda238f255416931d46230625c715fc1cb02286242b15761c452254247c14621c0722262468144d1cc421f2232f142e1c822175231114001c3b21f7228813e41b062194226e13b21be1204a22ff12521bbd200a22a812f41ab220f0211a12e61a9c20d721d511eb1a68209321d911211b4c203d21cd114c1a0a202821ec10411ab21f2021b010411ab21f2021b0109d16301c171f8b139d16301c171f8b13bb230c2795289c1dfc28762ada2b8d23482dd12a3d2cfb254b30762b952c51289131672bd92c6b297132c32bde2cdc29e032e72bf22c98297133272c2c2d942915344d2c572d9a295e348e2cc32db6299034a12c2f2e6329a234da2c8d2e2c29cb341a2dd62ebe288c34682dd42f7f2877347d2de22f6b288534382d5f2fc2282a34162d2c30a628ce32322d54300428e12e2f2ca93010247f2b012cce316d20da292f2b913333207428df2a4c343120fe26f02abf34791fa327ad2a023534207427ba2afe3475203f26642ada34ac1f7425a02acc34b31e4b25732abb34561ec424322a5f348c1d7022c4290633161b5d227f295430991a9722ed289b2d9f1a1a216c28742b211905211d28852a5d1946214427622ace19fe20a82665297f19ad203126c32826194d20ab252a28bc18bc1f0e25582742186d1fab24ae26f017e31e4b2421265d179b1e1824c025da164e1ea92364255716071e2a23ec240e168f1db622a0246815511d652253240115271d24221e24da14af1cc121be234214331c6f216923a313d71b2f2108232113881bf120be229c121d1baa206d223e12e21a92200b220a12e51a57208b21d5119d1a112057219811bd1afe1f3121b311281aac1f4f21d010341a721f12213e11341a721f12213e110000be1d411f00000000be1d411f0000f92270270d299e1c9927742adc2b9c22d52a2a2b7a2cbe24382e442ba32c0b27d030232bd32cfe284732c22bfc2ce9294333262c352d5f2aeb335d2c712db22a2334852cb52dbb2a6134ae2c082ed92a7334d12c442ead2a8c34fe2cb22ed22ac134152dba2ed32ab4341a2d482f742a9634092d7f2f4a2a7b34cd2c392fb82a1934292da82f252a4932142d2930ea283b2e312c5430ac24de29962b17319620e0295e2bb732f720e427002bcb332d1f9c26572b82346e1eea27a72ab7341a20b927d82af33440208026a52afa34921f60257c2ad1346e1eb925642abd34aa1e3925eb295734ea1d7423c829e0321a1c0e2380296130c41b47221429322de81a39216a28452bea198f213228bb2a4b1a65218b27082a1c1a1221ae268f29be1978203826132910196620d8258728fc181120622504287a18811fef2451272118331f9a24fa26b217d31e5b2497264b17711e0b24f125ae161d1ea42337252516bc1d3323ec24c415b91de722a8249215b81db72279246115541d532234240415e71cf621ed237514b01c9721532343143a1c2521c3226a13721bc52040228812c01a6b20ef21ec116f1a2520b4217011711a0d2091217211981ae41f7a215d113c1ab61f8421e0107a1a7a1f2021db107a1a7a1f2021db1000004a18241d000000004a18241d0000d22157265128561b2827992a0c2c7322a728d52a442c0d23e42b922ba12c3925932f942bc82c6928b831b62bee2c1d2a1d333d2c4d2d272bdf334e2c682da92b0f34682c792da42b6034be2c092e1e2ca734e62c712e152cbe34d52c7d2e292caf34c42c992eeb2bb534dd2cbb2e212c9734b32ca32f072c8e34be2c412f252c2734e02c502f4a2b0832a52c0730e9283b2de72bec2f8223d92a012cce30b2203b2a562b7a314620eb28ac2a4a33b01fb827d22b5334051f7728292b02357d203028102b173557208726d22a3435301f9725912afe34831e2e253b2ae234331e7524bf295534311da2238529aa32531c73247229472f0a1d5923cc28492c481c52213428042b331a15224628cb2a161bdf210a28742aa71a602129278a29ea19a6203226a0281e196020bf251d28d1181e206e25ea276718e91f142593273a18621fbc240227e417dc1e712447261c17201e1524bb255a16c41d96234625cc155a1d1123f4243515411dab22a6241d152a1d62227324dc141f1d18222c24d214d11cd821f6236114b11c9c218e234414721c55212f23cd136a1c2021c4227713401cda205e223013ee1b8d2003227412661b6820ec210512271b3b20bd21d1117b1af91f52211111ac1aeb1e66202710ac1aeb1e66202710000086173d1c0000000086173d1c00006c22ca268f28461b7c266a2a0b2c27220728122b7a2c7d22e928822bef2c2123bf2c712bf72cfb259c30c72b212d12290e33012c242d502b25344b2c672d2a2c6d346f2cc82d722ca434942cf32daa2ccd34cc2c5d2ed32cf334f22c7f2e222deb34e32c902e192dd934b82c902e072dd434932cba2e012db834a12c952ebe2c3434bb2cf92ee92b6231782cd52eb9285e2c082c502f6223b3292b2ccb2f0021c328242b99307c2047274c2bc132501fa727cd2b3d34f01ffb26552be734761f5b26672b3b35331f4726f42a58354f1faa25c62a2e35c71e5426b02a2935921fdb24bd29a834cf1d58239e296f32651c0f235029232e1c1c0522ae28ac2b021b1c22ab28a42bec1a65229f288e2b0a1ba6220228b12a521b35224727d329a21a3c21a0262e299819c9204b26c5281e192d20ab253028761808203525b0272e189f1ffc245527e717711fbf24f8267a17211f76246c262a17941e2024e7256716f81d90239425cf15b61d03232b256015661d8e22d624e914321d29227924b914f51ce32123245a14c81ca321bd230b146f1c3e212a237f13081cda20b022d112b11ba520722280127a1b7f2032221512591b67200222fa11681b5820a921cb11771a1f209f21d910921ae31f5621b810921ae31f5621b81000000000811200000000000081120000de221f27d528381cd925112a5c2b75211a275f2b7b2ca022ed276d2bc52c45230e29172cfe2c2724272d782b192da826d1316b2b2f2d972afe330e2c642d662c7f345e2c652df32ccb34aa2cf82d462df834c52c2f2e782d1e35dd2c532ecc2d1335bf2c6e2ebf2dfd34a82c5b2ecf2df434602c6b2ec52df634952c0f2e9e2d4334722cfc2d8e2c2830252c7a2e2e28202c0b2cad2e0424c1281c2cc52e792000284b2bfd2e05208027be2af930c71f8026ee2ac532f31ec925c12a65342f1e1426b42afc347f1e8826362b6f35fc1ed726852a65354f1fe225352a7135491e1b251c2aa2349e1d7f24f929cc31f31c782323297f2d3b1ca6225228692a881bd0210228b32a961aa7222b286a2a531b4522ca27102ae61ad7214e27df296d1a2721b5267b2982192421522614295519c6200c26a028f3186e20be252628981819205425a8274018dd1f0025472714187f1f9c24af268917041f362415260d176d1eb8239e2541160a1e38233625e015851dd322df2432154d1d7f228b24d214021d202239248e14ce1cb821d22337146d1c3d211f237c13241cde2080220013941b962042222b12421b6e20e421ac11431b57209921ad114f1b512068217a11c71a2f2093214c11b41a1a20be217511b41a1a20be21751100000000631700000000000063170000d523e0271a294f1c1826652a372ce121c626cc2a392ca62202283a2ba12c7b23f827b92bfb2ccd2253295c2b3d2dbb23952e4d2b422d26282233022c7d2d272cad34622cd52d982def346e2c0d2e0f2e2735ac2c4d2e7e2e4035bc2c7e2ec92e3835b32c702ee82e4535ad2c222efb2e3735a12caa2ebe2e4335982c062e762e2f346a2c532e9b2c8c2e362bce2d95265f29762b212e0e21df28d62ba32d96207128742b2e2e2e208e28e32a342f9420d627912a50315020b0257d2a9d33a01eb325ca2ae534001f6b25912a9335a81e6d250f2ac535aa1eb7240a2ac035a41deb24e629ac34bb1d3d249b294831cd1c6e232629a82c351c1922b1282f2ce81a13226e28f22ab01a10220828922aad1ae321df275b2a4a1a3d22a027cc29771af2210e2734292b1abf219d260c29f6193c212726c7286e19c020c9255a28c71843204e25d9274918db1ff4244a27e617161f9724cd26e516901e4a2446266316071efe23ce25ac15bf1d94235b253a157f1d3123fe24ff143f1dbf22b1249b140a1d612287246c14fa1c262261243514ba1cb6216c24fe13591c622129241313281d3b21ec220814741c15210c23ae12831cad20d2227b12f71c5520df212e126e1c1e206c215c12191b851f2021de10191b851f2021de1000000000ae15000000000000ae1500003422e72695289e1b05264b2ad52b19229e264c2a512cdc21cb27482ba02ca7223928b72b242d1223d9282c2c2f2da7232a2a432c7c2d60242030ea2b7f2d55295234f72ba92d952d43354f2cc22df72e73358d2c9c2e642f9f35a32c832ecd2f8a357a2c152ede2f9e35702ca12d143098356d2c5a2df12f5235372c0a2e362f51335d2c542e9c2c5f2b672b942d2c24db28572b972d09219e281c2b6a2da4202828922b192e0c208127052bdd2d8b1fa828792a132ffa202c26562aee31fe1e60258d2a7b346e1eff25e22aa2352c1f7125b12a0136571e7624b629b2350e1d3324f02828349f1c3025252937308b1d462392283f2cc61be022e428b02b211bb323b2284a2bfc1b21233c28762a651b2e22e927252a361aef217427c329f7198021f426472987193c218426cc284319de200a267128e4188d20aa252d28931826204e25c5272b18ab1ff9243127b517101f9e24a6261917971e5a242b269f161b1e1424cf252316dc1db0238c25b415931d362352256d155a1dde220f250915061d7222d1249214bd1cf22184244f14651c6f21fb23b613921bcd20f922a512651b692051224012cd1a282054228911ea1a35201a22a011451b1f208921ae11c71ae81f1c214c11bf1af31e9120a010bf1af31e9120a01000000000af15000000000000af15000032239e270129b01b31265f2a0e2cae21d026d92a7f2c5b225427452bcd2cb9220a28732bfa2c4923a428242c352d0924a027522c332d2522dc2afb2b4b2dfb242131de2b912d492bca34d62b372df42e8a35f02b912d3330ec35292cbe2d95300936372c642dac302736622c782dc230f635622c402d8530aa353e2c852d05306c31162cb62d012b4329082b782d4b223a28312b692dca203628252bb72da32047270d2b2d2ec71f9a27672b5e2de21f0a28e22adb2d0f20cd273a2aae2f0c20a925982adb320d1e9325c62aff34231ede25692ae235751e8324e129b435f71c74246e291d34e61c29255229922fae1d63236428622a111c99233628f229101cee2257285a2a681bee226f285b2a681b70223828522ae21a3222c627b7296c1a8121e2261b29b5191d218f26da284d19f0204826b3281f19cf20f6257b28d518a520a4254228ac1854203c2501285a180520c82432270a18401f512470260e17971ed523fc253416541e75239d25f415f91d14235c256e15b31db02212252f15371d5422be24be14ea1cef216b245014941c82210c24be135b1c302167235e13361cd720d822da122d1ca72084228712361c9c206c229512381c822036225312cd1b3720fe21d911371bee1f91212d11371bee1f91212d1100000000aa14000000000000aa14000097215a263428831a9625392a062c7b21a226af2a522c30224627002ba32c71229e27662bd62cbf223428fd2b322d2c230b28302c852d6322db28662c812d34231d2c442c2d2d1b260c32292c072dae2c7b35112cc82d81300036762c592e1f312b36572c1c2e5d313436432c4d2d4b311936e12b4b2dea3017352c2c882d8d2f0d2e712b452d6f27e328fd2a1c2d61216a28db2a492db8202e27ce2a382de71f6026aa2a452d051f9526bc2a332d3e1f4727622af32cc71fe6241e2a522d651d2426182a7f30f51e44256e2ac533f71dcd25392a9435631e9b24332abd35ec1ccc24f9298333fa1c2426ff288e2d2c1e6c22d1279b2a401aa5213428df2aac19fa2368283e2a021cef2247288e2af81ac1222928472a931ab822da27bb298a1a582255274c292d1ae021da260b29b7198c219e26ed28661935215026be2811199c20ef2592287c1843208025262849188b1ff72447279417be1e7c246a26c716201e1824e325f515f71d92236d25ce15bf1d0f230e256815c31db522b7243d15821d46226b24d514411ddf2120247114d11c7621ad2312146c1c0e2105237a13f31bc12092227712b71b92203f220812081c842036224e123b1c5b2056225812971b14203d227211001ce91e1c21c312001ce91e1c21c31200000000af14000000000000af14000013228d264c28b01a3725112aaf2b08212126872a412cd121df261c2bb92c4e22be27a12b012dbb221728fd2b392dda227728082c552d0e237d28552c862dcd222a28892c1b2d2e22472b302ca02d83257b326e2cec2d392d96358f2b3d2dae308d36e52b482db2318436472c7f2daa312436662c862d0c31fe327d2cb72d302da229752b032d76234027012b162d74203928032b212deb209c27f52a1a2d4f201a27042b302dd11f3a269c2a142ddb1efb25392a2d2d951e1425fe2a292d971daf26c329d82d241f842667292731c21e3e25592a5b346f1de124722ad2340f1d2724cc29ec314e1ca8247c29d62cae1c0e23ae284a2a171ba123d0287b2b6d1b6a24c8284f2b4b1ce3236c28eb2a6d1bfb2235281b2a911aec221828dc29841a8c22e427ab29291a292273275b29cd198921d826e8283519f1205f269028a7187720d9252f2834180b20622591279c178a1ffa24f1261917f11e90245a268816861e3724e62524164d1ed0237c25bb15201e3d2328256015091ec422cd241a159f1d4a227824c1143d1dee2128244314c21c8d21cd230614601c462142236613061c1521fb22cd12661baf206f220512531b4b20e121f611b31b1e206c210412871bc31f69216711781ccf1f2b219011781ccf1f2b21901172108f1d6a206f0c72108f1d6a206f0c2024702883292c1f83254b2aae2b3b2100265e2a292c9a214826fc2a922caa21d826542bce2c0f228027a92b0b2d4822dc27e22b1d2d5422ee27f02b482d23223f27482c162d7e218c276b2c202db82107298c2b522dc7231931a52c962d1b2ce434392cae2d19309735362cf02daf30f533042c232d492e0f2dfa2ad62c81278e252c2be12c5b1f6c27cc2a142d8f202a27ff2af82c2c200e27ca2af02cfd1fbd26802aca2c6a1f9d26612acd2c471f6926432aae2cda1eb725232aa42c1c1e7b24bc29de2ca61c5d24e728782d631c61246229ae30671c5d257b296832381dc421cc2917309c194324d828752b031cb7239428082a431b6c22b628a12a0b1aa623a128c92af51a1b238228772a761ac1224e280c2a241a5e22fa27ab29ff190a22712770297e19e2212a2744295a197321ad260129211936214826b128e718a420bd2547285e1834204c25e827e917cd1fdd244b2757175b1f86248126ec16cd1e3224e7252f169e1ec523762504167e1e1e230025b215511e8c22a2245715d81d0b224624f014771dab21ff239f14241d5c216b232f149b1c1221fd227f13161cca209522a612611b78201f2201126d1b4320cc21ce11951b2a208521af11541bd21f8b217f11661a771fdf219810661a771fdf2198100200321c931e00000200321c931e000072232a283929971e8e25c22a3d2c18210326a92a5f2c6c2120261a2b932c8621ae267e2be32cea212827b72b152d1c224c27dd2b312d69218127de2b3d2d35213e27012c4d2d0721d527092c2a2d6f210828e82bf92cba210928882bf52cdc21552ce92adc2c6d26332e9e2b0a2db2282b2cfb29732c0d26ba28762bcf2c69220f27462a302d56200828cf2a252db2209527d42af82c0d205227a82ae52cd31fc7265c2ab42c071f6e26402a962caa1ee525342a802c1d1e7f25dd295f2cb31deb259229882cf21d9425ec29582c9b1dcb26bf299d2e9d1e33215c277d2e0f191a20f3268a2dfb17fa2154281f2ba0193b224a28902a111a2a23aa28882abf1a13238328722a6e1ad6225b286f2a371a91223b28392af91958221d28012ac5191f22e827b5299119ea2179275f2960198121052712292f192b218f26ca28dd18c1200e26722879183920892512281c18af1f172595277a17111fb124f426a716a21e46244e263e165a1eb923c225c615251e23234c256415391eab22e5247615f21d332279240715b71db5211b24a6147a1d602188237514f91cfd20e622c613821cb52081220d13df1b6120242227124d1b3020ec21b511681b1c20cc218e11c81add1fc3211611971a761f3a218510971a761f3a218510a71611203d217711a71611203d217711d7245e29ee2afb202d251b2ab72bff201c250e2ab72bb020d425ea2a632c11216826962be02c4321ae26f52b292d4621b526db2b2b2d1521d426a22b0b2dd920db26862bea2ca6201527a32be52ccd206b268a2bd62c7420b7268a2be42ca920fc27972bde2c8a218628b42a632d472238276b2a882c0321fc257c2ab72cec1f6f27892ac42caf205d26952aa82cd11f25266a2a922c281f0726512a852cd41ee4253a2a872cad1eb8250e2a8e2c4b1e7c25f929882caf1d2725c529842c571d49259929592c7b1db8249729592ce51cbc234d29032dc61be61ecb26bb2def1680212f26c42c5b19ad203928172b6718fc212728fc2a411952234d28c12ab819b8237f28af2ac91962237428b52a4d194c2376289f2a78191b2364286f2a8e19dc224228222a941993220c28ab298f19ee216b273c2965193f21c026d7281b19a8200d265f28ae1815206025d2273c18811fe72423278b170b1f78247126db16bc1e1e24de258e167f1e922355251d16291ee322db249a15e11d4c2274242915b01de4211d24cf14811d8121a323a714231d2b2118232e14bf1cde208f22b913831ca62038220e136f1c7220f721a6125b1c4f20c2218812661c39209321c211f21bde1f8e21b411291b5a1f3821af10291b5a1f3821af10000010177619000000001017761900004c24d128232a2620b5249b29172b64203325ec29a82b70208725182bf62c8b20e026222cad2d52213e27492cbb2d24215227332c872d9d203727092c522d8c20e3269e2b182d5720c926632bf42c6220fe26452bcc2c68205f27eb2a9d2cc320de26be2a9f2c8c206626ad2a832c57208226d52a8d2c69208526242bc12c37200127782a882c3020d826762aa12cc01f8d26672a8e2c361f8226592a802cf51e8426442a7a2cf71e62261e2a942cd31e2626172a922c931ed5251d2a962c0c1eae250b2a5c2cb51d1025ab29542c171d3a22a4286b2c421a971d2f273a2dcc15ed20cb26e32c1b19bd200e28872b9d1898214028252b161919236e28fb2ac6194d238928bf2a3d1939238e28b02a7e180d239028a82ad618d7228228842a2119c8228128632a4d1994226228432a241928221528f8293419732102273029f5188920dc25422845181d202b254e27be175a1fb924a1262817fd1e4d24342694164e1ec923a125ef15ca1dfa221f254415721d7322c624f414431d23227e249e14301de2213f248d14011d9a210a246414961c4e216223c113471cec20b6223c130b1cb3205d22d612f01b852019227512b11b5920cc2103127e1b2a208a219e11fa1aef1f70217411b71a761fe8204011b71a761fe8204011000026102219000000002610221900006324b1278829ca1e74243529c72a761fb5246d29df2ae21f5725012b9b2c382066278a2c042e2221e727ec2cab2e7a20d627bc2c2c2e1020a726fb2b1a2d891f2c26062bac2cc71f0526a02a702c1520f6258c2a6f2c232023267b2a662c5b203a26542a4d2c6c201a26332a432c3c204c26632a532c45203d26532a542c2120f025912a782c7b1fd625a12a8c2c2b1fbf255c2a5f2c821eb225ec29292c451e6625b129122c991d1925b129152c4a1d0425a929162c0a1d0325a329182ce11cdc2481290d2cba1c2a258729e32b061d6524ea28072c6b1c2c20ba27912b75182820b027872b9318c9208f27632bd01810216f274e2a71187d222328412aa8185a236a283c2abe178a239b28902af9169423ec28da2a7f17992313290f2b001856230329082b08198422af28a92a4d19b3212028e029d2183b21ff260e299718bb202426682874184720042543272a18a21f3b2418266e17ba1ebe2360258c160e1e1323f224b315b51d8f229f2431155a1d31225124dd14341ddb211124bb14e01c7e21b6234714a31c30215323d7137c1cf4200c2395135d1cb720b32219131c1c7e208122b012b11b4b20242203124f1b1420d3217a116b1bdc1f8b219011ef1a761f8e21c210541a2d1f2a218b10541a2d1f2a218b1000002f169918000000002f1699180000d022cf266628d01dc52310282d29011fde238528d329381ff4248b293c2b26206d27402d8f2e09215129602fac302820c9273f2de72e971d1c26ed2a7a2cf21d2d26f129012c311f8325b729a32ba61fba25a329862bc41f06269e296a2b981f462692297e2b2720b126c129c52b6e20be26622a442cae205a27b12a7c2c66201d27ba2a8c2c9a1fc4268f2a5e2c961e49265e2a552c511dc525182a6a2c531cb1252f2a6c2c161c0826242a792c811b6426402a892c231b7726752a8d2c3b1c7f26a82aaf2c7e1db825852aba2c1d1eae24d429692cbf1de823cb28342bbb1cb623fb27e7291f1c0c24c2278d29961ab223bd278d29ca18b823c5279f292417c623fb27b4293416842377284a2a83151f2469298d2b0c166a24fe29232c7b166c24122a212cf01800249c29732b001a8f229028252af7199621e026c7286f19c92071258827d018c11f83245026ca17201f1c24f4252917991eae23c7256c164a1e212386251e16e21d8822eb248915c31d142242240e158b1da621b323dd14401d4b2137237014f61c1221d32209148f1cbf2075226a132d1c74202322cb12781b2e20de211412021bf11f97217a11de1ab21f7f215e11ed1a7e1f3c213111611a281f4721c910e119021fde203810e119021fde203810411920212022b309411920212022b309ec207525e626ef1b3522a5265028fd1d4e22e62615287b1d4322492644283e1d1127b72c422d3a206f2c37322034601d88244d2c4f2db91e8c24ca279629091fde248f280f2a601f3a244228b0298b1eab247c28132a5f1fe4249b28412a691f7525d228712a661fa925e328ca2adb1fb2255429082bba1f9327df2a772c89203127262c612d30209c27492c772d701e3126c22b1c2d0d1c3f26e82abb2c941a97268a2ab62c6b18eb25d92a9b2cb818cf253d2b052d011989265f2ccc2d0c1a8a26912c242ee71c5a26c62b2e2d961ed123b428252bdb1bb6201226c828bc181c20752530287917cd2117267a2817196623ad26b7288c19482283269f28e9187b211b2655281c18f321d126e1282015082469296b2b2d8aca24fc2b862d560b8325652ce22d74197424762a4b2cd01bad225328d429b61a9a2092250e28c6182820d924e7262e18a51f4a242426af17d01eaa236125a116a21ecb22ae243e16481e2c224224b615121ee72129245415f71db22112240c159a1d81210324bc14381d2021a0233f14d51cc420ec22dd13a81c6820532247137b1c34201522b8125b1c1620ef2188121e1ce01fe021a611ce1b9e1f99215b11491b4b1f4b21ff10511ac01ee220dd0ff819801e62206e0ff819801e62206e0f00001e17e21a000000001e17e21a00001b208124ac259119c821d025b427901cf52112268d27531c5921d4242c266c1b671ace1f98213d14591efc22de24681848247a271129371ec6242c28b529ee1edd243e28b4290f1fd6243e28b0292c1fdf2422289829121fdd2427288f29e71ec72440289729531ecd246728d529be1dbe249428342a111d5b249528652a3d1c1e2493286a2a2d1a24244728242a6b1937240828dd290d1a3924ba278929fc18ba231e272629cf186423b726f1287c1aca226126ac28861959213725b6274a15e32036242126ec11a6208a23d7257310cb20e0232f26211428214524a326c2153c215524ed2618187a2182242827a11849215b2402277818f0205b240e27551888217e241627da18cc213a24a9261619e41c7f24082806136e26632de02ecc97f4296e308631451e01236829342b7c1b8f1b69223526d713f91e1e2387250217131f03232725e316b71ea722cf241b163d1e3b227b247915361ef72154247415d11dba212124eb149c1d7b21f123be145d1d332194235d14ea1cef20fa220014681c742086222b13211c2c204a227412921b09200122eb11271be81fc7219811e91acb1f8c216711cf1aaf1f50215311be1a721f1a214511d71a361fe82058113d1af51ec5207a10471a9f1e6320b510471a9f1e6320b5100000f716961900000000f716961900005a218e253827241cce21c625fa27951c5d211a25c826f51b4d204923be246c19c01d7f215323cc17e9203c256027711b71235f270629c21d2a24d32753290b1e612409287629141e8024182888293f1e8b2414287c29291e712402287029051e5d24e5276629c71d8f24f52761299a1d43249427f828b11cf8210825d426cf191a1e0122fb248c15db1f2f24d325e6172822c4250a28c71aee22e926a428091c1b230227c628061c48230a27d128021c0123be268c28b61b4322ed250028e51a04212925e4268619352078248426a118042027243c2609185420b023f12536189a20b42325262f18e420fd235c264a18ca201c248826341889201c24ac26f5177c201e24bc26df176c202024702632172b2170244a260a187d1df7217b24e113440d6d18101c9600fa17321cdb1fda09941e25218c23ee146d1e61225724a315bb1eff216324e815a91eb4212c24a215011e5a21b8231415a21d22217623c314421d082141237214e01cec2019231f14951cc720ea22bf13641c9f20a4226d13191c6d204822ab12ec1b3b20f42172129a1bff1fa521f111791b941f5a21d711411b1f1f10217011341be91ed5202b11441bb61ea520fc105f1b9b1e7520d210b01a5e1e6d2060100b1a0e1e0c2025100b1a0e1e0c20251000003518ea19000000003518ea190000a421d6253227d51bd3213026c2273a1ce92053247c25801aa41fab2258244d19871e3b234f25f318b721942565276c1c6f2317279f28831dfe235d27fe28cd1db923732719297b1dc62398274429841d2224cc2770299b1d6d24d3278d29941d9d24c4278829851d65246d273229fb1c592362267f28da1bec2132256327241ad6210a255a270d1acd229825de270e1b7923ee252f28821b4823f6254028521bd12202264d28111b7322de254328e51a2522a8252128911ae1217825fb27491aa2214325c527051a5f2101258a2792191421d32457274419de20a4241327e4189e206f24bc26a41871203c246b26521839201e2439261c180420fd231a26d117cb1fda2302269517821fb12300268b17381f9523de254217c91e132322259a16c91c0d212023d014af19251f7b215a116c1a591f1f229c10091c4d20bb234711c21c99200124d512f71cc9208623c313ee1ccf2070230314271dc52065233114281dab20192332140b1d7120c4221a14de1c5f209f229c13b31c37205c2258135f1c16202d228e12211c01200e223112bf1bd21fda21cf115d1b901fa2218611c31a2e1f5e2112117a1af41e1a21a6104d1aac1ed1208610561a861e87208c10061a461e7c205310ea19231e38205c0fea19231e38205c0f000000000000000000003518ea190000a421d6253227d51bd3213026c2273a1ce92053247c25801aa41fab2258244d19871e3b234f25f318b721942565276c1c6f2317279f28831dfe235d27fe28cd1db923732719297b1dc62398274429841d2224cc2770299b1d6d24d3278d29941d9d24c4278829851d65246d273229fb1c592362267f28da1bec2132256327241ad6210a255a270d1acd229825de270e1b7923ee252f28821b4823f6254028521bd12202264d28111b7322de254328e51a2522a8252128911ae1217825fb27491aa2214325c527051a5f2101258a2792191421d32457274419de20a4241327e4189e206f24bc26a41871203c246b26521839201e2439261c180420fd231a26d117cb1fda2302269517821fb12300268b17381f9523de254217c91e132322259a16c91c0d212023d014af19251f7b215a116c1a591f1f229c10091c4d20bb234711c21c99200124d512f71cc9208623c313ee1ccf2070230314271dc52065233114281dab20192332140b1d7120c4221a14de1c5f209f229c13b31c37205c2258135f1c16202d228e12211c01200e223112bf1bd21fda21cf115d1b901fa2218611c31a2e1f5e2112117a1af41e1a21a6104d1aac1ed1208610561a861e87208c10061a461e7c205310ea19231e38205c0f00000000000000000000000000000000fe20611abb1b4c1d992ceb28ea297924cd2fb02cca2ddb248a30a7296b2ba62579311a29542ac3253132f428c42826249334542af82b6c22a536cb2a672b171dfa353e2b332c57a16d35f729422c80a48035742b2f2d90a46635422b7a2c2ba55835222b222d81a33a35792d092f00a501358631513311a609369d336f350ba8e6344a322f3460a03034ac2e3b31e1215f32052a4030ba23693022282f313920382c202805322c209527a828ad323c1c562505295733001c04244928ae334d1b3b24142810341e1cb6246d282734e31c59232b281e34da1b59226928cc33c91a7322a8287033e51ace23862aac334b1caf25882cf832411e62228e2a302fc9180b1dac25872911150f1cd523102798141f1f47249d260818571f46244e260a189c1f2d240e263018e11ee823cf255b17ec1ec123a1256617221e232354255c16aa1ddf220825e015f51c8922a024fc147e1c3822462484147d1c0a221c2483147d1cd521c0235e14711c9421a8235214391c4c217a23f313c21bf92040230e139a1bd220f122ab12491ba520e4226412231b852053224312c01a40207721ec11051ab61fe3204911e6198f1fd020fd10f319891fe0200811141a901fe720f210341a7a1fc620da109219141fae205b10dc19dc1e512035100000000000000000fe20611abb1b4c1dfe20611abb1b4c1d992ceb28ea297924cd2fb02cca2ddb248a30a7296b2ba62579311a29542ac3253132f428c42826249334542af82b6c22a536cb2a672b171dfa353e2b332c57a16d35f729422c80a48035742b2f2d90a46635422b7a2c2ba55835222b222d81a33a35792d092f00a501358631513311a609369d336f350ba8e6344a322f3460a03034ac2e3b31e1215f32052a4030ba23693022282f313920382c202805322c209527a828ad323c1c562505295733001c04244928ae334d1b3b24142810341e1cb6246d282734e31c59232b281e34da1b59226928cc33c91a7322a8287033e51ace23862aac334b1caf25882cf832411e62228e2a302fc9180b1dac25872911150f1cd523102798141f1f47249d260818571f46244e260a189c1f2d240e263018e11ee823cf255b17ec1ec123a1256617221e232354255c16aa1ddf220825e015f51c8922a024fc147e1c3822462484147d1c0a221c2483147d1cd521c0235e14711c9421a8235214391c4c217a23f313c21bf92040230e139a1bd220f122ab12491ba520e4226412231b852053224312c01a40207721ec11051ab61fe3204911e6198f1fd020fd10f319891fe0200811141a901fe720f210341a7a1fc620da109219141fae205b10dc19dc1e51203510dc19dc1e51203510dd1ba11b811e3c19dd1ba11b811e3c19202bb629442b4324952ed22bc42cef247830e42bbf2c6b265431142c0d2df826ae32ef2a452c9c26df33752b2c2c85204c36272bbb2c85ac5b36912bab2d5fad6d36282b5c2ca3add3352e2c362d5eac3b35142c842d2daa86358e2df82e77a98635a92fec3077a99a35a9301e328aa9f3341e31c0321ba4a6348d30213257a12334c82e5531dd228632012d1331ca246e30232c9b313d20b12c7e2b3a32961ace29052b69333015f4261b2a1034701a99270c2a4b34ba1ce125312a5c34491e4925ab2a8f34ff1ed925362b9a34be1f1525872b85348a1f2225552c35344a1f6a25aa2cc733831f0e256d2c9832361e7e24532b3730e21b9922ce28e22c51188020dc26ff29531765200426d328fe174c2088257d280b18902057250e287118b21ff0241727bc17fe1e8b245c260717011e1024ce253916a11d79234125a915671df722ba246e15461d9922702422155d1d6a224f243815391d13220a241515b01cae219c236914751c62212f230d143c1c2421e522b4130f1cf9209a222013f71be9206222fd12bd1bc6203422ca123d1b9220ef211e12b71a59209721ad110f1a0d2026212011c719b11feb20b310ac196b1fc9206f10e8192c1fa220cf104a19b41e9f2022108719331e0c20f00f8719331e0c20f00f5a18091e1120ba155a18091e1120ba15c929802a342c6224032d8d2b062de124c32fab2bb72c0f276631292cfa2c0c2857325a2bc42c2628b033de2aa72ca4259535852b0f2ca1a41936072c042dfaabc0356a2c7f2d0eaa4f35912cfe2deaa89835022d7a2e76a83235fd2db02ffaa4e7348d2e883061a020350e2faa3040a43835452fd630fea6c5344d2ffd3043a03f348b2ed2300b23bd328f2d06311624fd2f642c26315520612cc42bfd31b412b928232b24332e1eee26a22a9433861eee26422b3634bf1e9726512ba1349f1e5326a82be034911fe725d32bac34701fe625182c9634a01f6725132c41346e1dcd24f92b5233981d7f24a52b8131e31bf523b52a772f7a1a12236f29b02c4d19f7215728ce2ada187d214427b329d1182821c526eb28da180e2127266e28c218632088252c2821180020fe2486278817bc1e762469268e164f1e1c24a025f015ef1db4236225c615ce1d5c232825a615cd1d1a23ea24a5158c1db62292243915411d3e225624f214131df22112249d14ac1c902198231914721c3e211723cd132f1cfc20a9221313ee1bc8204822b412731ba320f2214d12f41a6f20a221e111ae1a46205e216f118e1a0f202f215511511ac01f3121f010741aa11ffd20401188190a1f162126105f1a1c1fda2093105f1a1c1fda2093100000371c371d00000000371c371d00004528532a042c4a23502b272b7c2c0724ee2eb32b032d4e26e730282c4e2daa27e531522c8d2d3b28b6325f2c7e2d7f27cd337b2c992dba257d34e82cfb2d4d22c434f82c262e151ed934fd2c772e6d1be3340e2d5f2efd14a734762d322ff01def34092eb72f4b1e9f345f2e68304e2185348a2ebe3080235434472e6630b2240a34092e9230ee256a32892de1308725d82e642cd230e621f62a302c7831711e2e29222caf32701fa927442b0734f71eb826822b3e34531e1d268b2b6f34571e7026152c82347f1f3726d92b81340a1fff25c32b4a34cb1e7e25842b0334381ee324062b8432391d6a24052be130271c12249e2a622f241be223f3293d2deb1a42228f28a92bb1193822b0271e2ada196e21cf26312949191b2137268728f8188a20cb254d286b1862208a2511284418092024253e279917681fad247026f816be1e432402268f162f1e0724b2250416c11d772332259a15261deb22ad240315a01c70226c245a146e1c16223a242b14581cd3210b24e7133a1c92219d236a13041c452122230b13dc1b1321c322e512b31bea206d2283125a1bc92020223712f71aaa20f021ab11021b9520d221b411071b6f209e217e11211b53204c215811751a0a2029210c11501ab51f25212110501ab51f25212110811eec1f7821621c811eec1f7821621c1a230825e9251919fb28092b612c1e22222d7e2b982c53253530122cf92cd926a831fe2b932d1028b732342c982d2e287a334d2c992d65271c34ae2cf32d8e266734cd2c222e76268034fb2c7d2e9a268534552d172f0e26a7345c2d332fa425c334692d2a2f8f249f34a52dfb2f6c24ac34c42d153079249934b32d1530fd242f34b72d4f309b257d327a2d43302c256c2e5e2c3f30f121582b5f2cd430531e4729b42bba31911e5f28bb2bfb32f31f0027ae2bef33d01e2827be2b7434f71e8f26142cbe34cd1e8926c62b8134c71ee125602b6134191e3125f22acb33631d4c24bf2a7832751caf247f2a8b308f1cfb23e529f62d831bd9230029b72c231b6622bb28122cd1193e225228eb2a131aaf218027512ae519fd20bc2678292c19b8202a26c128e51850209a2516285618f31f16254227fd17531faa24af265d17e21e57243726b216881e1e24d3255b16551ec1238125f615221e55230c259315b51ddc22ba240115761d7f226724cb14471d2a221e247614e11cc821b6232014601c762163231f13f51b34210b237a12bd1bf220be224b12481bac207922ec110f1b8c2022228511e51a5920a52164119a1a272063212911ce1a0e202f211a11251aab1f30219c10581a951f0221f510581a951f0221f510a821d2227324e91da821d2227324e91d0f232625b425d8183428f02a5d2c1a22e32acb2bf92c7324362efa2bea2cd825f730d72b282d0a287532112c8d2da32895334b2ccf2d7a282834a22ce02d60285634c42c002e4a288034e42c442e74286f344a2dcc2e63289834612d0e2f4028bd34692d232f1528c734732d872fa027ae34532dcd2f08289034452dae2f83282b349f2d21306328f531292d0a30a7267c2d342c8a2f7a22302a442c3b30b31fbe29902bf630e11f5b283a2be031d01ea327d22bf532751e3c28e62be233b41faa27012c6934b41f0027b02b78347b1f7d25ca2a2a340b1e3b25882a7d33981d5225442a0b32851d3325762a20303a1d7e24d1299c2d841c71230b29192cb71be9218f28b02a201a30224e289b2a6b1aad21bd27142ae2199321da266529c719a22025261429cd184c20c625a32875180b205b25052832189c1f00252b27a617741fbd24e0267e170b1f7a249226db16b31e282404268516411ec9235e25e315c91d53230b257215bb1dfd22bd243715b41dcd228e240115651d74224b24bb14011d20220d246414bc1cbe2181230114451c4721e722f312831bd92053225a12e11a7e2006229911771a3420c6210e11771a18209d210e11be1a06207f21d810811ad61f9f214b11bd1ab51f4a219f10bd1ab51f4a219f10872017221d24711c872017221d24711cb422d82451257519af27142b6a2c7022ed28ad2be02c2723be2bfa2bf32c6324912f0d2c252d5d27c531172c352db1283d33592cb42d32290e34802cca2d4e293934b22ce32d41297f34122d672e9829a8342d2db82e7f29b934352de02e9329bf343b2d022f9a29cf34442d2a2fad29d7341a2d712fb629ac340e2d682fd0292834132da72fe928c431d72cae2fce262a2d272ce72f70212f2b2f2c0730911f5e2aa32b632f1c1f1029ff2aef309f1ea727cc2b2532391ee628a72b62334c203027c62b3334c41e56260a2b58345f1e2d25252a0034881d4d24ef290933981cd524052a49312a1d9f240c2a0c30cb1c1d24012a252d441cef231529a12b1d1c6f229828812be11a702274280b2be21a472227285c2a831a6e2154277b29a219ad205326a528b3187020c6252c2899182a20712502282f18e71f2625b227f1177b1fd7242d274717f31e89247426c316311e2f24e3250616ca1dd1236d257215671d46231125ea143d1dd322c224c3142c1d85228c248a141b1d352240247b14d81cef2106241914b31cac21a623f2136e1c5e2137233513451c2221be22f3120b1cdb206a225212621b86201a228911111b5f20f6214c11151b3b20cb214f11b41a092082210711be1a761fc8206910be1a761fc820691010211f22d923cf1c10211f22d923cf1cb8215824422478189527f22a4c2c5a22b028a42bd72c4123f828072c4a2dbc220a2df82b102d8c258a303e2c892df8271e335f2cb32d562943349c2cf42dd9299634b62c2c2e002acb34cb2c522e452adb34fb2ca02e0b2af6342c2de42e7d2af634202dee2e7d2af234102df32ec92af134cc2cd42ec82ad134ec2c122feb2a45342e2da02fdc292d31c42ce82ec526992c1a2cc02eb821d52a502cd32eb020a329062c232f68206f28d62b46307f1faa27af2b3d31f81e8e27362b11321c1f6a26db2a1d33721e8127e52a1434c81fda26ca2a0734531f6f273f2ade32f21f2d25462af930881d7a24f0293c2eed1c212349292f2c9e1b89220529992bfc1af822f628e92b3a1b0123c428a52b431bf9221128852a021b3f224027a229471a3c21c4263f294319d0206826ec28d6185520cd2551285b1816204525c027f417ac1f0a255d277717781fcf24f9260817281f82247426bc16a01e3024f52506161e1ebb23a1259015e71d332337252d15a71dc522e624c8145f1d56228e248b14151d092236242214ea1cce21dd230014961c6e214e232b132c1c0721d5228612021cc72089224512cf1b99203e22da11b71b7520f821c811981b59209621b211891a14207f21b110941ad01f2e214d10941ad01f2e214d10f91a1718cb1be480f91a1718cb1be480fd20602322242a17c426812a032cab21d227122cda2c0d235d28d42b002d96233e29412c6e2d3924192d272c5e2d1a26de312a2c6c2d26290e346d2cc42d572a9d34b62cfb2deb2a0135dc2c372e302b0d35cd2c572e932b1c35f62c952efd2b1f35f42ca02e012c2a35f72cb92e342c2e35b82c792e372c1135a82c412e1f2c44348f2c7b2ef02a16304f2c792ea6268e2b162c892e2522d628332ca52e1720f127302cb62e391f0628ad2b662f931f6726092b2e303a1e9f26a62ac8303c1e3227e42ae9318b1ead26142b5233121e0527082b8c339c1e3a27e92aa032cd1e15276a2a7330e41eff24b429652d061de6227f28dd2c281b8323a128b62bca1b0b235d280a2b4e1bce223528702ad61a4e22dd27242a571af1216127f629f9194c21d226832928193f21762600291b19f92030269e28d6189720d425392852183e206e25cd27fc17122019255827aa17a01fae24cc262d17391f47244226cc16a41edf23c4250a16351e5f235d257215a51df322fe24f414591d9922aa2485140f1d34225b241e14c91cc3210124c9137b1c3f2149230113441ce220ab226512f61baa206422f811d01b902008229c11941b7720b4217011941b682076213311f91a33207f210111151b2520b5211611151b2520b5211611ef1a4b187c1ba882ef1a4b187c1ba88273205022a62263164427a32a3f2cbd217127582b832cd322e627ca2b052dde229328112c342d5f23462a1b2c282d0e24fa2e2f2c852d02275e33392cd12d3a2aca34a22c5d2e0d2cfd34c12c7c2e602c2935f52c7c2eb12c4935f12ca22efa2c4935e32c9f2e242d6635ea2ca72e412d6335b12cc42e122d73359a2c402ef52c8734b82cc12ef22b982e1c2c212e5d258529ec2b192e512084290c2cb52d50202f28a02b1a2e8b1e5e28582ba12daa1f7a27dc2ac42e461f5226822aa92fc11e8125df2a13313c1e3c26482bee31101f2526ae2a5b32f61e85252c2bfd31131e9426032b7830081f37269b290d2da51ec623b328dc2b271cc823cf28c72b091cb9229028e72af81a3c220828a22a451a2822f327442a301a4522a827b2291a1ad52137274a29ad19aa21dd262c29831929216226fb280619ba20e9258528731838206225e827f117f21f02254c277a173d1fa324ce269516c31e5b244d26ef153c1e1224e9257815eb1db5237d2501158c1d4d231c25b014551dd722ca245714171d7e229e242414051d2b227924d913c61c9b2157242913a11c3b210b24f112d91c13210523f612781cde20f3222212ce1cac20a4224912151d6420b12100123c1c03204d218a11041b601f1a21d010041b601f1a21d010181bfd185f1ce800181bfd185f1ce8001c21d5232724aa175826cb2a3a2cb721ad27f82a962c4f223528a12bd92c6022a428222c812d082354297f2c962d6523672b8c2ca92d4f244330122ce22d262875343e2c112e0d2c6c35922c452eee2cb235d32c672e2d2dbc35cf2c772e942d9f35aa2c392ea62dba359b2cdc2df02da5357a2cf42dda2d7135432c932ea42d2d34882ca82e332c802c902bfe2d3c242029bc2b8f2da9209428c52b772d0420dc27b42b322e251f0428582b7b2d901f7127222b882d3e1f4726cb2a6a2e831e7726eb2ac62f1e1f4d26ef2a1731bc1ed824b72a31312d1db423572a3530fd1b0024b229ac2d051cb4243f29712cba1cd224af28632bb11c5823e728c22b251b9523b228362b231b2b234d288e2abf1a5522fa27132ac21906228c27a1297a19a4210827332921196b219f26dc28ed180c213e268f289718bc20d9254128751847207025e9270718d71f1525562761171f1fb524be26b316bb1e6f243e265616641e2924de25cf152e1edc2392256c15d81d5c2355252115921df8221425b6143e1d8822d7246f14c91cfb2184240c14551c6e21f6230d13b41bc820e52245123b1b5d207122a611ce1a322078221a11e31a3d205222f210151b2b20d321dc10e01a0c205021ef10d51a921ffd207810d51a921ffd207810a41ba618ca1bed82a41ba618ca1bed828820a023d5235f170927c12a502c8f216827b52be82c8f221b28cc2b1b2dbf226128d92b472d3223fe28482c852dba236828972c922dfa21d72b1a2c7c2d9024c131702b3e2d562a2e35332ca92d892df8353e2cbe2d612e2b365d2ce12dca2e1636622cc52de52e11367e2cfb2ddf2e0336862ca72dd02efd357b2c582ec92e45336a2c2b2ec52b202acc2ade2d8c22fb27592bb42d44200e28c82ba92d34202827412bac2d311f1527f22afc2caa1e0428c72a092d901f9627882ae82c241f5726ba293f2d2c1e8824c629632eb21cfc23bc29522f241cec249129102f1a1df5248029f12dfc1c882429293f2c8e1c17234728712a201b1e237b28a42a281b7223b128d32a3e1b18239928992ae71ac6224228442a971a3b22b927a429111aa321022726294e195421a726e62804191e216426b428d1180121102679288d18be20c5254128501875206925f7270d181b20ed2448273417811f74249f269616fd1e11242026e915a01ea923b1259a15601e4e2368253015111ee5221a25ef14921d8322c4248914401d1b226e241a14fb1ca9211124c913c41c4e217d2325138b1cf520ee22d012791cc320b0226c12411cb52097221c12431c8c205722d911f11a32201322fc106c1bf01f9421db106c1bf01f9421db1055157216541b578055157216541b578056200b246124c8164426c02a742c722122276d2bad2c8b22a627592bc62c68221b28e02b172de1228328332c832d202342286f2cb32d0c228929982cef2dcc227c2c1d2c942d5e259633cc2b122d8a2cee35012c442e792f4d36882c192e123058369e2cc82e4d307536992ced2d61305e36712c7f2d1d303836682c2f2e712fb530062ca32d0829ca29812b9e2da221a4286f2b882d8420b727542bae2dc11f0d272a2b9c2d161f7627d72a242d801f9c27852aba2c681f6025512a0b2d671d6b24502ae42d951cb0254b29c02ce61db6235429292dc01bd8225529062de11a5a269229c22c2e1ebd265229222c581e5524ea28c32be11b8724fb28ab2b1e1c2824b928722a8f1b6e236a28832ac21afc223e28552a5a1aaf22f427de29141a3d2269276929ac19c121ef2617290d197821a426f728fa1840216426bf28c718c32017269a2855185820a1253b281618c91f222581275417f61e9e2494268d16431e30240126b215191eb92388255a15f01d262322253515fd1dc522c924e014b71d50227b24a614711dee212e244114e71c7921c923aa13551c0e211b23c5129f1bbd20b522f611e21b9e206c22e9111a1c9a207122e3114b1c77207c229d115e1a1020a82293100a1c4c1f36218a110a1c4c1f36218a11041a9a16fb1ac500041a9a16fb1ac500c11f7222a422d0157b25552a0b2cf020f126432ba82c5f225b27712bdb2c29222f28022c342d9c227c282f2c652da722fd283b2c822d16238c28a82c0e2e5022c227d82cbd2d4321b32c5b2bd92d3926f334c22bf92db62e9636412c972d9230a436722ce42dd230d036382c3a2df230b736562cf82da9301a36902c1c2ee22f932d3a2b6f2d7e269727e62af32c2e2008286f2b092d2e201c28352b0c2d2120b827102b182dc11fa426b42a072dad1ee925702af72cf11dff258c2af12c061e13261e2a672ce91d6926a729712c3d1e0926ea29632de01d9c24792a942d7c1c0b25cc29e12ce91c42243329922c021c402325286d2b981a8a23bb28062b9e1afe23a928cf2a041bc8237828912ad41a192340282a2a011ae0222428f129091a9322f527b4298f19422292276e294b19af21f6260b29cf181b217e26b2285118a72004264f28de1737208925ce276617e51f1f252a27ad16461fb72488262616bd1e53240a26b315631e00249d2532151c1e65234525f814f61de722e524da148e1d6722942457143e1d0d223f241914d11cab21de2388136a1c56213a23e612141c1921ea221d12921bb4206822ad119f1b5d20f1217811301c2f208d21bf11f71bd31f81217711a11cca1f46219410a11cca1f46219410f115411a301c1f09f115411a301c1f099221ff243f254f1a59255d2afe2b7a207626a82a722cb8219326622bb62c9c217327c22b0a2d1f220e280b2c4c2d46224428212c5f2d77225628332caa2d4b228327972c552d74214528a12cb12d3322cd2c802bd32d46273e35742c942d0e30d836042ca22d67312d376c2cfc2d8e31ce36732cce2d0d318134912cb72d402e1929e72af92c6c222527732b3c2d0c207c275f2b3a2d00206127fc2a002da61f2827e22ae32c311fd026ba2ad92cd91eab268f2acf2c7d1e7b253e2a1c2d551ddc25b329682c831da4248d29ee2b381cf62550298c2c6c1d86258c29542cd91c52241f29482c951ba924cb28f52a171cbf246e28af2a2a1c5924e028d92a5b1b5b24bc28a82a5e1b7d238d288e2a541ade225128192ace197122fa27bc2972193322a82795293d1903225a27642916199a21dd261729bc1864217826c7288f18df20f72566281e187a208a250628db17222011255d27fd169a1fa724a8266d16161f50241526fd15d61e002498259015bc1e592321254415a41ec222b62431152b1e3a225b24a014b91dd1210c244a14681d7e2189230e14ce1c2a21032334134f1ce720a6227612ef1b8f203922b211001c5720ec217d111e1c4620a721a611961bff1fa021b8105c1bda1fc321bf0f5c1bda1fc321bf0f0318231a041b60090318231a041b6009ea204824902478182c26752a272c94206526252bbb2c41216f269a2bec2c7e210827d42b142de321b027092c442d1222d327192c582d6e212728252c6c2d80214927282c942dd3203128462c4f2d8c2159284b2c292dc221832c0c2c572d43269b343c2c9e2db02eac36992c052ed830e135572cd92d1430722ef12aec2c2a282126262b002df11e9c27162b1e2de41fba270c2b042d841f7827f22afe2c451f2627cb2ae02cf51e8e268a2aa82c611ee3253f2a682cbb1d4f25d7294b2c2a1ddc259529242c831d1f26fc29aa2b911d03260c2a2d2c771db524dd293d2d481cdf25fd29bf2c561d8a243729602b211c152350282b2a711a0e24d328852a1e1b37238328712a1a1a10237128582af919be225128382ab3198a2233280a2a88191e220128c4292c19ee218f276a290419a52126271f29c6186221b226d5288d180e2143268c2846188620c2253728f01706204c25c6271017511fda242c276b16cd1e71246826f815821ef323cb2581153f1e542364251515461edd22fd241a150c1e6a22a424ba14bc1def2145244d14521d8621c523fa13aa1c1b211023ff12471cc42086226a12a01b65200d227911421b3e20da2135115b1b2920b1214711b91af51fa2219d109b1a861f1f2152109b1a861f1f2152100000a01b3d1d00000000a01b3d1d0000c2248929202b10208525ae2a3f2c1021b125c02a4f2cdb204f268b2bc62c2f21fc260f2c382d83213227392c742d74214427292c6d2d46217027122c6f2d0a218427122c692dfa207e270e2c532d3321ad26052c212dbe20ec27862bd92ca021e828112b5e2d2023562ef52a882c9928e12d202b8c2c2c280e284f2bc02c3d2139275f2ae82c522055268a2ab02c2c1f2026892a9d2cbe1e2326822a942c8f1efe25622a892c371ed0252c2a8d2cd71d9825072a742ca01d3625d8296f2c121d2b25b6293c2c071df724a529252cd51c17259329162cca1c53243829fd2bde1ba9243d299a2b171c9524da28e12abf1b3324b428ae2a901a3c24ae28bd2a141afc237c28a52a7a19ab236f289a2a43196c236f288a2a171923236628582ae518d7224b281b2a211983221728bc291719e421ab275529fb184b210127fa28d018b3202f2689286c1823208c250c28c917b41f1525632741173d1fa524a7269516fa1e3d2415261f16be1ecc238e25b3153d1e12230d254615fa1d8722a124dd14a11dfc21432495146a1d9b21e0233c141c1d3d213b23fd13a21cd4209522f3126b1c9520282258126d1c6520e3211312751c4620b821d5117d1c292085214c11111cc51f65215211651b331ff2202110651b331ff220211000008c167719000000008c167719000061241f29752a561ffc24b7293e2b6a20a425b72a652ca3205826f42b7a2de9203427592cd52d1d21a3276b2cde2dd020fe27592c942d4520ce27212c5b2d8c206e27d72b272d72206b27a12bfd2c8e20e4276c2bc02c58202327342ba82c6220f9288a2ba52c1c228928cc2a882cdd21a3280c2a6b2c24227626662bdf2c1220d527962a7f2c70202527932a922ca31fc326702a882c021fa7266e2a832cb01e7626492a7d2c7e1e6526262a7a2c6d1ef225012a762cfa1d6625e0296d2c411d4425dc29242cf51c2f25022a1a2ce11cec24c029f92b7a1ca8245b29252c621c38255329ed2bea1c9524e4282a2b501cc9239728e52ad51aee23b928fd2a331a6d238928ca2a18194a237f28b32a891806238328a32ad817dc227f28862a7d18d6227f28622ab018b3226628412ad0188f223e280c2aeb18e72182276829cd18cd201c265a280f182a202e254f274e17651fb924ac26b916091f642453262c167e1e0024c0257e15181e2e232d252715af1d9822d124a014841d3b228a247d14631dec214c246214211da62116240314bd1c5b216b2368135b1cd9209f22d0120b1ca6204e225212ec1b7b200822af11a11b4a20c4217a11961b242073217211121bd71f5e21da10d11a7b1ff3200610d11a7b1ff320061000006b145c19000000006b145c19000063242b284f29a61e8e2498292e2b1b201a25462a0b2c1c206826172c6a2da6201728e32c6f2ea1203028002db22e9d1fd727902c092e611fa026a92bff2cb71f7326ec2a962c2b205026b52a7e2c48206a26c52a8f2c5920d826d32aa32ca420d526ad2a762c8620a027882a742ced20b827b22a952cdd2088278f2a8b2c812011268c2a722cdf1e93268e2a832c071ff025622a832c281ea925fc29372cb11dab25a629d62b851d2f259c29092ce11cf5249d290b2c821ce8248d29062c761cd0247a29fa2b121c2125b129012c2c1c4f259c29042c7d1cd523c128882b5f1b9c225c281c2bdb1a34235128e62a3d1b95222028522afc19a4222828372a3119012349281f2a221889239628742af9167223cd28c32ae4169923fe28022b8c1674230929072b2a18d522d728cc2ab018ff2156281d2ab0189321722750295b181a218a26bc285018802078250828e617ee1f8124b126f516201f1324b8257b16561e482309258f15e91db122a724ff14971d53226324ba14681df42124246614291d9f21dc233314ea1c50217523ae13ac1c0f2121234e13771ccd20bd22fb122e1c912085224512bb1b4f2030228c11771b1e20ed215c11891beb1f9e212b11ff1a6c1f8e215a108c1a2e1f142113108c1a2e1f142113100000c617fb1800000000c617fb18000015230a276f28ef1d4a241b285329991f652400297d2ac81f7425422bb12c22208428d62e7230d320d828ab2e5130681db226292c5c2da91d85265f2a2c2c2d1f1f26f129ec2b0d20b225dd29c52b0b20df25dc29e22b13207326fe291b2c1020e426232a362c5720ed26ab2a642c96202d27102bb02c8520a227132bbb2cf01e2827c92a992c0d1e98264e2a472c5d1d1726e6291b2cc21c81259529e92b7a1cff245c297e2b111c02253d29782bd51b47257929c52b3d1ba025b529112cec19d4250e2a742cc419dd25ba2af22cac1b8125e82a0d2d011da524242a652c1d1d82237a28a72ac91bbb23c427b129c91ace23a92775295b19a62390275b290718b82394275929aa158d231228ce298a15ac23e228ef2a24153724b829002ca6155724172a242c7a172b24e429ea2b301958230d29dc2a81195722b5276c2990191821fc253428cb18dc1fc324be2625172f1f362416268816d61ef123ca250016551e642398258f15481ecc2226254f15031e3d227d24e4149a1ddc2103248e14311d792177230f14e61c38211223a9137a1ce320ab22b712061c80203e2209125f1b2920ea218711021bf81f99210811ec1abb1f8421f8100f1b8a1f3f21d8107b1a381f2c2172103a1ae91eca2012103a1ae91eca2012100000e51e582000000000e51e5820000005216b25ab26ed1bed223f273a285a1e9922cf2635286c1d0f1e2e274129b018552b1b314a32f41bce29682f96300522c4223a28982aab1df1242228fc29041f63244628c6295f1ecd24a028252a201f0425ad28512a491f4e25e0288d2a881fd0253e29fd2ab31f2726b529d62b132013276d2b052d1e201729862c162e021e6e27192c6b2d631ca125af2a6d2c0b1cdf249129f32b6e1cae240a29e52a1b1c8124b028a22a191c96249e28312a2b1c4f246928292a2f1ab323aa28d02ac6190124bd29ea2b7e194f26b02b442da51aa126bd2b342d2f1d3722e027682aa619df1c9c24de27ed134321d6255628481809232c26b22880194c225726cc28201966214d265d28381878210f2667281c169b2385274429cb0e1024512a542c388a5e25572cb22d7414f224db2b332dc91aa4234329642bb41aaf20a8261f298f1832203225a627a217ff1f5c24302645171e1fcf2374253f16fe1ee222ca24e915891e332258245215121edb212d24f014e21da82115249914a51d7f21f7236914571d2221b3230114f51cde2026231e13cc1c7b207b22e3129e1c41204b22a112781c1820222222122f1cf01f01227911de1ba11fa421e510701b4c1f4321a0107e1aab1ee6200a10891aaa1e9820e20e891aaa1e9820e20e000060008a160000000060008a1600006a1f5e23dc247018d8212a26ce27561c2e226826d4274a1c0c207723dc243b19b119c11f852189132522aa25bd272b1cf1243928c529dc1e05254b28e929ce1e1c255e28db29ee1e22256828ed29201f12254d28cd29b71ef4244628d429671eaf246a280c2a751ded24e528cb2a1b1d6d257329c32b961c4a256529bd2beb1aab2411293b2b001b8724bc28962af21b8a247e28482a6b1c4b242f28e029511c45243328da294a1c5b242928d529841c42241628cd29481ca42387275f296f1bcd225d2692289e1aa821c62430276c1847203323aa250d153d206423df25bb14bf202824d5268316012160240627811702214c24fe26d517d7205624fe269117aa203d240227e317c721a3241927b3182420b42336277a169c20d028c02a69100d2a12304131f4967b26572d2c2fe51dcd1763244527570fc21e892309269416e51fb7237b252d17c81ed022ea24f315041e52229c2416150a1e09226524ea14d01dcb212f248b14bf1d932106247e14911d5421b7235a14231d05213c23b413931c9520b722dc123e1c472055225c12c21b15200322d111501bfd1fcc217b11071bd71f90214511dc1aae1f5d212411d41a7c1f3321e610d41a361f0d21e610471a001ff4204e10501a9e1e6d202110501a9e1e6d20211000009617421a000000009617421a000060218a252227281cac218d2532271e1c7c212b25b226c91b16207e223924c2180520ea229a243219dc228d268928c21cfd23e4275f29ac1d65241b289329d11d98242a289e29f01dbb243b28a729f71dcc244128a729e51da32427288f298c1d132526287629bf1d7d250f286729b11d85228e256d27581a311e08230125d415df21f5253028b6199523bc271f29dd1be42390273329181c74235c2731297e1ba62362274229af1b0d2451274f29e21b31244e274a29e31b49240c271129081c52238b26c428201b5722f02553282c1a49212025e5272419f92071240f27ae18882101242926da18302103244f266318c02010247f26041873202724b4263d1754202d24cb260b17582023249d26ca1656202a24622639164c209623e0252c16fb17bf1d5320dc094714c718101c5d016a1e14205522f011871e6f2273244f15441efa2166244c152c1ea72132240615bb1d4821eb23a914931d262193235b142a1d03214b230914e31cea202223a413a21ccc20ef223e13701cb020b822f0122e1c82206d228812051c52201a220812a61b1620c021bc11881bae1f6821a5114d1b341f12213d115b1b011fd620d0108b1bb51ea820b110b71baa1e72204f10de1a661e712046101d1afd1d0f20d40e1d1afd1d0f20d40e00008319951b000000008319951b0000bc21ef254b27981be321fa258127fb1bd62012242f25f1193b1fb4228a24c91807204d24fd259719d02258264828ba1c05247f27e928531d2a249a272229611d0224a0273a290d1d2c24db276d29421d6e240b289129711d96240528a629571d7724cb2777290f1d3924de269728a61c0e229a25a027471ace219e257127051ab92244262a28c21a76239f266e28801bb023b72698287b1b9023a3269f285c1b44237f269328d61a132356268028e31aca22212664289c1a6c22e7254328741a1d22bd252a28251acc2178250528d41967214725da27421920210d259927fd18c020c8243627791895208824c726501855205524752614181a2023243926b817ee1f012414267717a61fd4230026f516451f8e23f6259d16ee1e3f2390254e16b91dfe213b240615811ae51f9a21ea11ed19181fa7217110791b1a208f236910cb1ca42008244512d21cc720aa23ec12eb1cd620bd236013021dd2209c238213381da9203823d313331d8020e22277130e1d5c20bb224213f21c3f208b22c9128e1c2020602240123d1c0b204222d011c21bee1f112253115b1b9f1fca210c11d91a351f7421b210831aed1e2f214210551aa01ef02058104a1a761ea1201d10f7193b1e9e20ce0fe819401e6420590fe819401e6420590f000000000000000000008319951b0000bc21ef254b27981be321fa258127fb1bd62012242f25f1193b1fb4228a24c91807204d24fd259719d02258264828ba1c05247f27e928531d2a249a272229611d0224a0273a290d1d2c24db276d29421d6e240b289129711d96240528a629571d7724cb2777290f1d3924de269728a61c0e229a25a027471ace219e257127051ab92244262a28c21a76239f266e28801bb023b72698287b1b9023a3269f285c1b44237f269328d61a132356268028e31aca22212664289c1a6c22e7254328741a1d22bd252a28251acc2178250528d41967214725da27421920210d259927fd18c020c8243627791895208824c726501855205524752614181a2023243926b817ee1f012414267717a61fd4230026f516451f8e23f6259d16ee1e3f2390254e16b91dfe213b240615811ae51f9a21ea11ed19181fa7217110791b1a208f236910cb1ca42008244512d21cc720aa23ec12eb1cd620bd236013021dd2209c238213381da9203823d313331d8020e22277130e1d5c20bb224213f21c3f208b22c9128e1c2020602240123d1c0b204222d011c21bee1f112253115b1b9f1fca210c11d91a351f7421b210831aed1e2f214210551aa01ef02058104a1a761ea1201d10f7193b1e9e20ce0fe819401e6420590f00000000000000000000000000000000a91f731dbe1ebe15b22b8b291a2bca20992fde2cf52d0024d330bb2cde2db3230a32622ca32d972578323a2ca22c92252f33082b4f2c20207334552cd02cad9da134292c342daea3f5349c2c8a2dbfa4e8341a2c4e2d53a50c35202c762d79a5f5340d2d0c2f1da4d334f03038328aa1b23451300431b2a59334d42f3c3196a3da34fa32b6346e9b3634de319b33871f9a31f32d02311422922ee1280c304a1e7a2ab2279130a51f222797284131aa1c6b2519290332101c80248d286532181caf2425289f32681c542333289c329a1bb221d127b832731a3125a42cc633361ec6285b30d834dd215b2c0c3355366c212c2b81327635c81b2125af2ab22c091b3422922540283c1af81e7a241f273a17f71fbb24a12621183d1f702479264617a91f4f243c26b317131f1a24ff25e316191fff23c625e8164f1e66236a252416fb1d44232525a115551dce22c9240515db1c67226a246a14a31c13222d243714a41cd421e2231214811c8221b223e8133d1c432188232b13e71bfe205123af12a91bd920fc223c122d1ba3200023d7112c1b90207422d611eb1a512081216811451ad21ffe20e6101d1ac41ffa20c810491ace1ffe20b710681ac91ff520cd10781a9f1fcd20da10b0191f1fa7201510441a111f612019100000000000000000a91f731dbe1ebe15a91f731dbe1ebe15b22b8b291a2bca20992fde2cf52d0024d330bb2cde2db3230a32622ca32d972578323a2ca22c92252f33082b4f2c20207334552cd02cad9da134292c342daea3f5349c2c8a2dbfa4e8341a2c4e2d53a50c35202c762d79a5f5340d2d0c2f1da4d334f03038328aa1b23451300431b2a59334d42f3c3196a3da34fa32b6346e9b3634de319b33871f9a31f32d02311422922ee1280c304a1e7a2ab2279130a51f222797284131aa1c6b2519290332101c80248d286532181caf2425289f32681c542333289c329a1bb221d127b832731a3125a42cc633361ec6285b30d834dd215b2c0c3355366c212c2b81327635c81b2125af2ab22c091b3422922540283c1af81e7a241f273a17f71fbb24a12621183d1f702479264617a91f4f243c26b317131f1a24ff25e316191fff23c625e8164f1e66236a252416fb1d44232525a115551dce22c9240515db1c67226a246a14a31c13222d243714a41cd421e2231214811c8221b223e8133d1c432188232b13e71bfe205123af12a91bd920fc223c122d1ba3200023d7112c1b90207422d611eb1a512081216811451ad21ffe20e6101d1ac41ffa20c810491ace1ffe20b710681ac91ff520cd10781a9f1fcd20da10b0191f1fa7201510441a111f61201910441a111f612019103e18f11c991df4053e18f11c991df405182a1f2b722c6020042e282d4d2e83246c305c2d8d2ef024ff31702db12ec9241f335f2d8c2ed1220e33272d4b2ef4207c341c2d052e02a68b34e72cfc2d3fa75035602c5d2da1abee34772c7b2dd1a9a234232d6e2efba7cb34552ee42f6ca67934c82fe3306ca36234fe2f0b3145a370341e307c3140a44134ad3030329a9fd0333030e131fb1ee831782ee93069224e2fee2cc330fe1ef12a242c0631351cd2282a2bbc31c4168e267a2a5132551dc225782a5f32271e3f250f2b1533f31e7525252b4433ec1f3725372c4933921f5526622dee337f207b278f2efe337a207927af2ee432cb1e99269a2d1931f31ab924bf2b082efa18f1227028b52a52183e2176263e293117bc20e5250729b417bf20862574282a189c2039250a2831188c1fda243527dd16fb1e872481269116471e2124e6251c160b1ebd236225b115f31d4423e1249a15981dc0227b241615631d6e224924e6145e1d21220f24b614fa1ccb21b5235e14b31c86215123f213641c3d21072325132f1c0921b822ce12f01be720712275129f1bc5203f223412221b9020fe219311a21a5620a1213011121a05202321bf10c419a51fda20531093195e1fba200010d019261f8f202c105819dc1e8720fe0eca19991e2b20f10fca19991e2b20f10f1d1c2e209c20900e1d1c2e209c20900eef28c42a6a2c4621912c4f2c5b2d27244b2f6a2c632dc6244831722c882d90251532ec2c3f2ea125b532462cbb2d11242f34342d192e799f9534092d8b2e24a6a934ef2c522e6fa7bd34092d492ef4a68434a72dff2e52a44134292e9c2fe3a04534842e5030a19fa8343b2fba3075a498341a2fcb3065a45334352fd930ba9fdf33262fc030061de831322e97302520962eee2c7930771d362b832c2a31e71a1a28f12bb131e31d6e27992bf831c21e63270d2ce432b81e0b282a2c6e33181fee26542cf3330920c225862cc233e41e7026d22c1e337f1f4726b62c5d32b51dd5259a2c3b314d1db524122c1d30751a2824ae2a8f2db4191e232329eb2be218fc212828772aae18c2214b27cd29af185221a226e1287f180f2106265d2870186a208f253128bf1719201b25a62731170f1f9124a7263116a71e3524d325d6154f1ede237e258915121e722335255415fb1d2f23fb244015be1dc622a124db14791d48226824a0144b1dfa212c244e14fb1cac21e7230d14b41c5b215223a7136d1c1f21e622ec12071ce3206e224b127d1bb1200722da11da1a6d20a1215b11851a34205821e3106e1af11f1f21d210581aa51f18218e10751a951fe020a3108e19ed1eeb20440f7c1a301fd92009107c1a301fd9200910a71a3f2037204e0da71a3f2037204e0d7228e52a862c2d218b2aa62bd72cfe22e02e482c2d2d7f24df30862c902d2125fb31b32cfa2d2725f432ec2c072e8b23da33e72c022e82205a342e2d842eaa1a8c346b2dbc2ef79aaa34802ddb2ef49da934cd2d4d2ff29da234312e1330e99db934852e3f30069e91348c2e7a30a9946e34682eb030c91a3d345f2e6230681da9334f2e87305b229f31ba2d68306121042ecc2c2d30e81ae42ae92ca1300f1df728bf2c8231721fb328332cee31a51ffe26262c6432951e8e26482c9f32961ecf266f2ce1327f1f5027612cc332951f9225fe2b7c32c71d0825142c64310f1d8a25722b3c30091df2243f2bb52e061ca1247f2a612d3c1b722482296e2cf31a82229128502b81190722e327dd2919197c21de262e29d01836214226a028bc18aa20d22556283e18692082250e28bd17fa1f17253a2700176f1fb42488268616cc1e55241526f7156a1e1624bf25a1150d1ea32352254f156f1d1923d324c414fa1c8e2288243514ad1c2c224a24e813921ce7211b2470136d1ca721c2233413211c592154237412f11b2321eb2235128f1bf1207d22e911191bc32020228c11d91a9520d3212211001b8120b6214011311b7920a9212a112d1b54206021ec105e1a14202d219310841ac91f1d210e10841ac91f1d210e1004224e249d25521804224e249d255218ae23cf25f725a315ca28532ba32c9421842c142c402d6524c12f612c5a2d12258b31812cfe2d2125d332bb2c2a2e0325a133d52c172e23242834192d722ee5226234502dcb2e08217d34762d152f28218f34c02d822f1220ad34e22daf2f291bb834e92dcd2fd114ae34e92d1930c714b234ef2d2530311b8234082e2d300720ee332e2e523094229f31a22d2730d122d22db12c0730cd1f2f2bbd2c0330451d20296a2c95300d1e6628632c7c31281f0c287d2cab31d81ef227572c3332b81e9727792ca832e71e58287d2c6f32a01f50280e2c1b324b1f9d267f2b2131981d32255f2b2c308f1c2025d32a642e551c6a239d29942d091acc23c228d52c581af522bf284b2ca91957224328152bc419682198270e2a17192921e0267029db18e4204726c9289b188a209f25112846182d201b252f279817c71fb924ae26d3164a1f6b2442266516cd1e2b24dc25f8156e1ed12386257015221e5e231525fd14b61dec22c82477147c1d882273244914451d2b222324e713e21ccc21ad235313661c6e2147239812e21b1721ed22e911981bd32098227411441b9e206f223811ec1a84201c22f810d01a5a20b121ad10a11a372071218c10cd1a1e203b217210231ad21f2e21a30f6a1aa81fe82067106a1aa81fe8206710991ff722e9221f10991ff722e9221f107a24ce253d26b617fd28bb2bc92ca621162b062c632d1f23012e392c2d2d8124a9306e2c882d80258332982cd72d7126be33a52c0e2eae253834ce2c322e942468341a2d7d2e38248934602dd82e57248a34a92d4f2f8823ab34e42da72f8e22b934dd2dca2f6d21cd34d42df82f8321c1349f2d0630ad229d34972d0c306b240d34d22d4330ea245f31462dfd2fe223df2ca02c4d2f3220fa29d62c5f2fe91d0129742c0b30971d07292e2c8130411e9728452cd9304d1e6d27182c7631ce1dd226292ce831341ec426112cd031961e1525752b4331f21cb2241d2b3930921cf7245d2a992ead1c4824012a9f2dc91b40235729ac2c981ac722d428622b291ac2229028ac2a251aab2241289d2a471a6522eb27252a051acb21d52661297419f12038261929a7189720cf25bc285218372067250c28ef17d91f0d2515272317b01fca24d026fe16381f8a247f269016051f4a240d262816561ef1237e258f15ea1d842330250015c01d2423d524dc149f1de2229f2493144c1d83225d244f14f81c2a221b24c513c51cc921a82327136e1c65211b23a512b51bfa206b22c7112c1b992014226011e11a5b20d121f010b61a3720ac216410f81a24208b215610c71a0920a6216f10f61ae81f5f215510f61ae81f5f2155105d1c1a22c522f60e5d1c1a22c522f60e16243e25f4251619e827702b8f2c3e227829192c132d3d23fc2b4b2c292d44240e2f882c912d302686318f2ccb2d3a273633ae2c042e22271f34bc2cfa2d93265234fb2c2d2e57269134602dc02e1e26b134932d2c2f4926c434a52d5b2f6326cb34992d682fcf25df34882d8e2fe825f3346b2d8b2f0026c034282d7e2f5d2603340e2da92fe325f8301b2d822f4824992c712c8a2fec1f662aa52c6f2feb1dcb28542cf72e0c1d8828202c872fa31d0d28382c2830d11d6228302ca030da1e9926462bce30941dc925e32ad430431dca25ff2a7030721dc225ab2ab52f9a1de324182aa52ec11ccc24152a902d841c8a23c729aa2c191ba92200298e2b451ae222a828952bb21ae9227528262b801aa92230285e2a7b1aba21842781296419e0207a26ae289718b620f62545286f184e2088250e28d5170b203925c5275b17ca1ff324462716173f1f9a248b265b16641e3924f7259b15fc1def2387250f159a1d6d232625bc146b1dfa22d82468144b1da82299244e14321d4f224f241014e61c04220c24a913b21cba21b52357135f1c6d2152238e12071c1a21d3220a125d1bd02076224a11eb1a80202e22bf10c91a612007227010f41a4920e0218c109c1a1e20b0215310c51ad71f3a213610c51ad71f3a213610311cfb21c921b00e311cfb21c921b00e5a21bb24b92403182328642bed2c88221d29db2b072d6d23f428632c982d08238b2c3e2c3c2d00252d30852c9d2d4326ed32cf2ce02dbc275234042d8e2efe27a3341a2da92e6627d234022da02e1327ed34452dfe2e992600355b2d312fb3260135622d382f58270a356f2d632f65270c354a2d482f07280035522d952f4f284d344a2dd42ff5278330db2cba2e7624b12b442c542e9b1f052a762c6e2eb91edd285c2cbb2ead1ef327582c122ff61dcd271a2c6a2f591eba26482b8c2faf1d6a26a32a992fd51df826622aea2f571e3c253e2ac72fed1c9424162aa82e751c5924db29682d3b1c30239b29b22cff1a73235129112c3f1b36232f29012cca1a37230b29012c061b8023d428a42b0f1ba6233428742a331b7e2241278829e7197021f4265329f218e3207a26072971187120d82565280a1822205425c9278417d01f0f255327db16ba1fdc24f026c8164f1f8a2474262e16c51e3724022682153f1ed323a7251515221e51234225cb14d41de022ef248e14841d712292242314341d23223b24ce13121dec21e5239b13c61c87215423db125c1c2521da224212331cda208322c311261cac203d226d110c1c7f20ef214b11a31b58209221ff10a61a13206c21d90f731ad61f1a210310731ad61f1a210310d018891d051ec286d018891d051ec2866221f12332240a17b0270b2b6d2cd4215028402c4c2d3a2393281c2c6d2daa232229562cdb2df123d62c9b2cc72d7a253b31b32cc52d82270a34b22cd52d4128ae340c2d792e55280635d82c872e54281135f12c9e2e5e282735202dc52e70283535282dca2ed1284b353c2dec2ee6285935272dc92e4a293935f12cdc2e80291a34cb2cba2ed828cc2e832c822e7224e7291e2c732e3d20a028482c612eef1e3f284e2cc22ea41ee727252cd02e6e1e2627c42ba72e0b1ebc27542b472e4b1e0b28e52a7f2e521ebc26682aff2e7a1d1526db2a2a2f241d9326e32a9f2ec51dc226252a742dee1d7e24c629cc2c161c8d23c328542c1b1b5c23e428682bed1afd227d28b22a941af8222928582a8f1a6f22da27432a0e1a0e227527162a81197021e7268729f21861219126ea28b818112141268d287218bf20e9253d282a1867208225e527ba1734202b2563276017cc1fc424e62697165f1f652467263c16cb1e1024ea258715471e98237e251b15c21d17231725af147c1dae22bf244914451d42226624e713f31cc7210c241b13991c37215d239912471cd520c222de11f61ba22073223511091c9c2022224711c71b8b20d921d610721b6e208c21a110181b3e209421a410c21a2e20b121a310c21a2e20b121a3103218f71c681de3853218f71c681de3858b20cd226c233c16c627192b8b2cc4212e28c92bf02c22233d28282c442dd4225129532c9e2d0724f1298a2c012e7c232c2ea52cfe2d6b25a032aa2cb42d5528c134112d2e2e9c292a35ed2cb42ec4293435f52cb62ecf295c350b2dc92efc296335082dc02e5c2a8535132df62e292a8935d52ccd2e2e2a8935e72c902e882a6234d42c102f7529cd2d322c6b2e382343291b2c452ee21e6429352cf32d651f7a28fe2b232e241e2528e32bc92d7b1e1027c52b352ef91d7626ad2bff2d151e8c26e72a062e951eef25fe2aa22ef71da8248f2aa62eae1c6824f7294d2d4a1cf9249229762cd61c3824eb28a42bf11be1216728ef2b8919d3228c28712b6c1a5a225b28e12afa19d0222528a92a311aa0221f28362a061a5b22bf27a529c719f321572766296919b12101273a29fe182621792603298518e1200826972848183e207925fd277117e31f03253f27ab16451fa824be26ea15ed1e63244326a3156c1e1f24e82505150f1ec1237e25bc14a11d4923232538144c1de122de24f113231d8022aa246013091d0f226624e812361d942122242713571d3d21b9235413ea1c0221f1226d124d1cd120c1225a11501c97207d2217119c1c5820b521da10191c01203b21d610961b871ff3207a10961b871ff3207a10a519c31d181f6789a519c31d181f6789e1208224a924f117a126002b712c57216728b72b2c2d8822a728382c4a2d9a220e29662cbb2d0423d529b12cd02d89232a2bbc2cdd2de323872f812ccc2dd9263534a42cfa2d0a2a66359f2ced2e602aad35fb2cd42e572ac135f52c9f2e6d2ac335e22c6c2ecd2ae435d72c4c2ef42ae735ba2c172e582bbd35b42c5e2ee02be4336b2c0e2fea290d2c7f2b2e2e5622cf28082cab2dd31f9d28192cb42dcd1ffa27b82b002ebf1e45275c2b952d611e74260d2b932dde1d4b26e72aa02dec1dd425272b472eac1d5125b42a172e011dd525502a302d7e1d1b251b2a272da51cb5249a29802c481c1b242d291d2c341bb522dd28072ce2194924f928692b861b1f24dc28f12af81a80234228992a581a7222e427022a74192d228a2799290619ff21322737291219bb21d026ea28d9184d216226a2287c18f020ff2550282d185e208b25fc276217e91f2a256127b0161c1fcb24c7260316c41e7b244926b815801e3324e6254a15521eed2392252415f31d6a235025d814911df8220c255a143f1d9022c8241a14cf1c0f2272243613671c8621ea239a12e61bea20d122ec11541b6c2076224311ff1a38206322cc10e81a4a2065228510151b3d201e226810d21a2620bb217610a91af61f91215b10a91af61f91215b10c51a3a1df61f7b8ac51a3a1df61f7b8abe204424762403180e28292b7d2c3d2121282f2c3e2da722b7282a2c652d252307293e2c8e2d76237c29972ce62d9c23af28c42c3b2ee7211d2b7d2c182e9a2333316d2cfa2d8f282f35d12ceb2e712b0736d22cba2e222c2c36ae2c702e092c1436a02c092e2b2c3b36bb2c372e462c3736dc2c362e762c2d360f2da82ed42cf8326c2cd32ee529b529ff2af92d31213228fc2baf2d15202428112cb52d08201f27502b832db31ebc26e42a252de91d9e27082b382d711edb26d02a462dcc1db7258b2a472d041d6e25362aaa2cf01c9625002a932c151df424c029672ca91c7a243c29a82b371cfd237b29362c441bca219e28282c4419c723f528752b121b9423e528432be41a2423b828fc2a431ad9223e28402a021a6d22b6279d29a319f8212d273a290c19a321ba26f528c41844217026b428491823211e2671282e18d420d8253428db1798208225d82779172e20022535278816d11f8b24a6261c16571f2c2426268115e11ec423ac252815ac1e57235c25ca144d1eea220a258614c61d8e22b4242514891d40226224f213241dc4210f240e13d81c59218123a612b01cf62001232212701cc620b522ce113b1cbc20a4224411121c8f2062221011cb1a4620232203100e1c1320342187100e1c13203421871090125e1d1a1fb98290125e1d1a1fb9824a218324eb244e185c272d2baf2c3a216c27db2b072d74220b28de2b002da5227a28322c542d1223bc28822cd22d06238c28b02cd92de021fa29e02c272e94225e2c582cec2d64241d33402c852d772a0d368d2c372eec2c7336d12c582e402d7c369c2cdb2e7b2d8236932c202e812d7f36ac2cbd2d7e2d6936de2c592e6c2d0131192c692d3b285d29632bcf2db5203b28bd2bd62d6d1f2c28972bea2d531f50278c2bcd2d6b1e46273c2b6d2d9d1ec326e22a322d5d1ec825772a0c2da11d0b267f2a292de11d97261f2a492c6a1eb924cd298d2c4b1c8224f629172c191ccd24332a582c371c7a247e29602c921b4f244029732b021b13253629272b211c02249528782ac71a7a237028762a521ae5223c28582ad519d7220b28fb29c8196122812783296519f6211d272e29da188621be26fc28ac1858218326c2288518f0203e2690282d188720c7254128a717062046259e27cd16281fb824a6260d166f1e48240a263c15311ee92394250915fe1d4d232d25af14fb1ddc22d9247c14a51d5b2287240d14581df3213524ac13001d8d21f0232d136f1c342157235d12171cfe2043239c112b1ccf20ed22b711201cbf20af2222113c1c792054224511521c1720ed214610d71b521f6021e110d71b521f6021e110aa15b31c6b1d4183aa15b31c6b1d418386206e23c623c916df25b62a482c03216c27992bd52c56220928db2bfa2c3f228928372c5b2d9622e528682c9d2da42258297f2cb12d13239e28d42c542ef8216c28112ddc2d6f210f2dce2b972d91253c35d92beb2d432dc836792ce62d622ee636712c322eb72ed9365a2c892daa2ef636082df52e8d2ebc368e2c652e572e062f792b242d9d266428c22b972d22200528db2b592d911f4228562b2b2d02203f28362b2e2d731f2b27da2a302d851e1a26d72a272d8c1d3c269d2af12cab1d1126782a2c2d531d8b25322afd2cdd1cf926492aa02c1e1ef624e429a92c5a1c67245729cd2bba1b13233229842cfb192e24f028322bcd1a6624e0289b2a281b0824a2289c2a4e1ad5237e28762a1f1a4a234f28442ab31906232e28052a7e19e4220c28cb292a198a22b7278429e718fd212d272c297d187021ad26d0281418e1202c26642850177520aa25fe27f8161120342558275b16751fce24ae269815dc1e65242b2624156c1e1124bc25d1140f1e822365258b14d21dfc2202255d145d1d7022ad24b4130f1d152252244313c31cbc21ff23d612721c67214c236212261c1921e022f411ba1bb6205d224d11e61b7020f9212a11721c3920a3218811441c00208721c310b21d0320d220b90cb21d0320d220b90c0000041e691f00000000041e691f00007323c528dc290d1d5426192ba12c4d214c27082bb42cff211527d52bfb2cb5210028262c4d2d30225e28552c992d5722c928662cb22dcb22e128922cf22dc5221e27cb2cad2df0200129b82cc52dc922312e102ca22d00284236992cd22daf2f2f37342cce2d4c3070377d2cbc2d73305b37ec2cf42e2a304e365f2cf82d242f302be32ac72dae233527412b462d3e1f93276a2b1e2d5f1f8427222b002d131f6127252bf52cb61e0e27132bf82ca41ecc26cd2aec2c2e1ebe25462a2c2d391db2250b2a022dff1c4625c329562c751cdf256b29702cc71cd224c929062cd81b2a23db284c2bd4193e23dd28202be519f424fa289f2b081c5224e828862bc11ae323c528f72a2b1a7b238928922ad9190a235d283b2a4719b9222328fd29421983220228d12917194622a1278c29e718d2211f2733295d189d21ae26dc2835182821212677280818be20a22510286a17432022256627a916a91fbd24c826fd15291f692447269915d01e1e24c0251b15b71e95234525d214a21e0823d324c314301e782270243e14b71dfd211624d7134e1d932196234713ca1c362110239312591ce920a822af11301c922044223511371c6d20ff21fa10581c5820bf2168113f1c2320b321be100c1c0e20992143100c1c0e20992143100000fe1a851d00000000fe1a851d00002524b128b429f51c19262e2ba62c9f201827982b1c2d9a21e626112c2f2d722172271f2c402dc3211728422c762d122239284c2c902dba217128622ca92dbd21eb273e2cb92dfd203228942c962d6c210b29992c902d5b22b82f762b232ddd28f9364d2c8d2e65308f37bd2c2c2ea530b337b52ce42d7c302a35962cf72daf2dc229c62b192d9a217427682bf12c041fc927292bfd2cd51e6127f62af02cb61efe26e52ad62c5b1e9726ae2ab52cff1df6254e2a7d2c9c1d6525fb296a2ce71c7025df29582cc61c6925f029832c931c4d25d529562c501c96235829892c6a1a6524af292d2c6f1b66247429a72b281b2524bb28d52a021b0e24d228cc2a991a7523ab289f2ad51933238328632a6619da225a28452a23199e223a28102af61859221128d629c2182322b9278d299918c6214e272e295418a821dd26e0283e183d216f269e28db17bb20f4255528651715206925f2276216701ff0244927d015fb1e862488267515991e0b24cd25f314681e67236425cd146b1eef2200259c14221e7822b5246714c01d06225924e313391d8c21f2232a13891c2621322339122e1ccd208022bc118b1b7320f721ef102c1b4920c821b110541b33209621cb10a61a062089212310cf1abc1f1f210510cf1abc1f1f210510000088172c1b0000000088172c1b000011259929092b841fcc25ef2a952cf320f525602bb92ce520f8261f2c352d6521b227602c9e2dd521e527852ccf2dbb21e427732cc62d9a2100285a2cd02dae211528632cd62dcc21ea27542cb32dbe2160276e2c5a2d5b217a29462c622dc723a2314d2c572ea32b62368b2cd62d3a309e36d62c702e2b30e92e002c732d22288328652b722df720bf26b82a152d361f4226b22abf2c7d1e3b26be2aac2c431e0126882a972cd81dd825492a8d2c801d8e251a2a742c3a1d2d25ee29752cb51cfd24d4295c2c8a1c0a25a6291a2c951ca6254229ac2bf51c3b242e291b2c281b092438292c2c911abd241529882b681be32402295c2b051b7a24b7280e2b241a03247d28a52a4019a2237028862ac01846236b28722a861807236328422a5f18d0225528172aad1889222928d0297c18fb21d82778297c1876212e2717297118cb205d26ab280d184220c92534283317da1f37259227a4166b1fb624cd2646161d1f52243e26c915e41eee23bd2563154e1e33233825ba140a1ea822c9248714891d10226124f2133f1d9b2102248813f41c3d2144231c137f1ccb208c222b124c1c882025229e11521c5920dd2119116d1c4620bb21f210881c33208521c610041cdd1f5421be10ce1b571ff420b80fce1b571ff420b80f00000117871a000000000117871a0000ce247429dd2a6f1f42255d2a012c5220cd255d2bf22c95200427502c9c2d1821b9278e2cf22dfd201228942cfb2d9c2017286f2cb12d8120db272d2c692d9320bf27fd2b372da320c227d42b1b2dc320d527d52b042daf205d280e2c132d5c21de29b92b4b2d05234a2e702c312eba279930872cc82dcc299f29322bd72c8c22ef26c42a862c691f9b26a62a802cda1e8126602a712c541e6526592a742c051e3926382a722cdc1d25261f2a712cc81d7225ee29822c201d1d25b229612ca61cf224a929202c2f1c0825a829172c181c9625dc292d2c5e1cb1249129662cef1b1d254b29252c7d1c4d240c29102c8c1b3424d028682b1b1b05249328ec2a081a88237b289c2a2a1949236f28862ac418f62271287d2a5417d9227928722a0b18ce227a285b2a3c18d0226e283f2a3d18ce225d28152a74186822ef279429991835219c26a128cf171c203b255a276c169c1fc424ba263116141f76246326c315b41e1324d4253d153b1e52234925ac14ae1daf22db244214721d39229024d113581dfc2154240114121db72118244713c31c60214f23d6126a1ccd2075225712041c8f2038228211f01b6a20f62172119d1b3920b021fb10a31b13205b21ff10331bd01f4f21b6100e1b871ff920e10f0e1b871ff920e10f0000aa122d1900000000aa122d1900004e24af28002a361ff324162ab62b62206f25d52a632c4a207827972cee2db5206228182d9e2e44205a28022da52e861eb527662cde2dbf1f0c27aa2b0d2d1a20e4264e2bc92c5720f626352bbc2cb8204127352bc52cb020f827302bd82c06212328472bdc2c1521ad28412bd52c9821f228a72a762c9a217929d82aad2c06226527ac2aac2cab1f6527de2ae82c6f1fd625662ab42cae1d4f25072a642cff1c73259b29072cc81c42258529fa2b9d1cf7247e29dd2b5b1ce8247b29cf2b261ce0246d29c42bef1be3248129bf2b541b6525ea291b2c0c1c15252c2a8c2c4c1cfb238b296c2c831b8323a228612b121b6c234b284b2ac01ad8222628252ac919da221f28072aeb1855236728492a41178c23bc28b82a8016ac23e828e52a1e16ad23ff28f32a1a172823e728d22a391845228828542a1a18bf21f3279029e2175321ea26e728a517f220dc254028bc172b20da243b27c816371f31240c26df15761e6b2326254215191ed222a424c414bc1d652265244d147a1dff2122241b14461da721d2239213071d5f216e233813bd1c24211d23cd12751ce220c62267123b1c9d207b22ce11e51b522022222a11941b1720f621b710941bd31fbc21b710f51a4d1fa2211b10e21a4a1f25213f0fe21a4a1f25213f0f0000f014041800000000f0140418000064239827ef289a1dd7243b28d929691eb22497294b2b911fa926a02cc72d9f200129862fd730d21fee28b82d542f8f1cef251f2bac2c881ef225222a082c7e1fb925022aed2b941fdb251a2a052cc01ffa25362a1c2c2620a326802a502c4a201f27b42a8f2c602013279b2bea2c752060278d2b082de21f00283f2bec2cbe1d76279c2a862c1e1d8c261c2a292cb31cc825b829fd2b121d55256f29a02b051df32428293c2ba81cb724fa28082b701ca724f228042bde1bbf240129292b031cbe244329c12b341a0e25082a4e2c5319af25152bda2c591a2126772b012dca1c9024e929002c711ce4222d28fb297c1a8b239f275f29e619862360273a297118552337272829511639237c2768294d1553236a28762af21319245829b72bf8142624f029132c8f152124fb290a2c5918c7235f293a2b16192f233928cc2928196c21ac26aa286918142032256c27a216061f3d243b26b715ef1efa23b825a415b21e992391253c15b21e14234d2505151a1e6222af2493149b1df6211e240614251d96219e236213d51c54213523a1126c1c0421ba221112eb1b70202e226f11491b0520e521c410131bed1fb121a010fd1aba1f91215910391b941f51217e102a1b4e1f49217510491a221f03219e0e491a221f03219e0e4815e51f9b20bb054815e51f9b20bb05a321e6242126201942232d273c289d1da121c0256c28891c4124512af72b171dc22ca9320434e41b1127322c242de72067244128b12a881e29245c283c2a821d7224a128212a2c1ed324c928722ab21e3b25e228962a181fe7255a292d2bd11f8f25fc29fd2b5c1f0527082c322d33204c289f2c832eb81e4628682b7e2d801ce925022a182cff1cea244029362bf01ce124d528ff2a0f1db924a528882ae51ca9247e28642afb1ca9246928222ad51c65244428eb296b1cfb231228da29231cf3221a28ec29c31a7d222f284d2aa8184c235329f32b3d197522b528392b6e18a81cc4245728631203215d252028d6175922da258a282a19f621e025ab280a1962210426682861187021fc255f286b162f22c026c2288a142523e528952a7809bd24b32b162d420b87255e2cb12dc31851243f2a282c791a07218b277e296918242093251c28bc164d208b240b26b916f41fcb23692537164e1f0023d3247a157a1e3a224724a614121ee1211a245b14c51dab21082425148d1d7e21e123f913621d3821a6236213211df8203523b612f51c8d2085227c12bd1c48204822e611851c25201f22a011401c0220e9210511c71b961f9d2197105d1b581f43211d103a1bec1e3e2109106b1a0b1f2a21c20e6b1a0b1f2a21c20e0000d114531500000000d11453150000f11f40220d233e181d2263262228251c57226726fb27191cd91d6d210c23ff167f1c9721d323cf153c245827fa28791d00256528112a761e38256a28fd29941e5a258628fe29931e6925a528202a791e5e25a728352a401e5125bd28542a311e2425c6289b2a551dcc24f028022bce1b7d25b129fd2b881ba7259629ce2b6b1cd024d828022b391c9024a328812a011cc024a428642a2b1ca42457280f2a121c75245828f429321c5d242928be29f01b38240728b229671b2e24f427aa29111b2124aa278829fc1a8c23cb26f328241af0214a258527a4181b205823a325e5151b2056230d265f15ad203b24b8266a16fb205a24f8262717ed205124fe266217bc203c24012767179a205924e8263217b0203b24e1260717131c0c251b284a104327772d0a2f0696252925306531171d7e2002287f29e2171e1e2a245826c2151420dd23cb252817f11ee0220525df15181e6d22b324c3142d1e1a227424a114d01dc32137242c14bc1d902113241e148a1d4b21bc23f413351d0d2161232413c81cad20e1228f126c1c70206b221112f11b2e2012227211851b0920cf2129112f1bdc1f8c21ed10031ba51f5f21d010e21a6f1f3321b910c21a2f1f18216c10471afb1e1921d00f7e1a651e7620d60e7e1a651e7620d60e0000fc161b1a00000000fc161b1a00008b2190253727df1b91210f26ba270b1c572119255826bb1a881ff6208d22e3157b227c245026b81a17248d274e29061d3f243028a2297d1d91244428b9299c1dcf244c28bd299a1dfd246028cd29a61df1245d28d029701dc7245528bf29421d3c2548289629431d7f2447264f28e31b3620c7236025641707235a2654282b1a3624e0275529a91b2624c0275c29471b4a24b1276b29871b63249d277429b31b79249b277d29901b7624742784298b1b612454277329681b4924312752293f1bef23d7263529f61a13236d26d9286e1afe21ca25722842197a210f251328cf1803218524f0261418da2042249826951794202824752628174d203324b126b9162b203d24c926841665203b24d226de1629200f249526b515bb2002246e26e315311d2f21f92377118d126218681b7701871cb41efc207e0d791e34227424da14551e00226624f314431ed0213f24e514b11d4f2107244514811d2021a523e713471d0a215b239413fe1ced2023232b13bd1cd620f822cd12791cba20be226c123f1c91207b22d4110b1c62202b228c11c21b2720bb2153119f1bc01f51213a116d1b321f0321db105c1b021fcc205810951bc91ea7203c10c71baf1e7320b20fec1a771e6d20bb0f501afe1d1520d70d501afe1d1520d70d00009219ed1b000000009219ed1b00006221c52537279d1aaa217e25ee26521b992014245125cc19791f3123b224d418c420e9248b26281a45230527a528951c2124b6272029f01c2b24bf274029fd1c2a24d8275c29da1c6f240d288b292a1db2242828a829521dab241528b429fd1c0b2472274c29521cc1223a263c28011b2f22e525fa27371a5d23b9267a282a1bb5231d27c328411be9232d27e528721bdf232b27f628281bc6231727f328111b8623e926e128d81a5e23c226cd28b31a0e238d26b5286a1ab12255269928151a642232268428041a1e22ee2555289019d921b8252b2852198c217625f9270c19ff201c257d278b18b320c82400271f1861208524a126af171c20442465263617da1f10242f26e416971fd9230a266b165d1f992302263916511f6223d525f415de1ed222dd245e15521c8d20332208130819ad1e32218b0f3f1bbb1faa224710c81c5f20fb235711931cc720b023b111f01cf520dd23c712161d0721d923fb123e1dcf205f2331134a1da320f722eb12371d8420d9227d121d1d6920aa225c12c81c47208f22a511711c2820662287110c1c09203f220911761bbe1fef21a510c31a391f8d2135106f1add1e392101103b1a8a1ef5205b0f4d1a761eb820090fd9193a1eca20870ef119321e9820650ff119321e9820650f000000000000000000009219ed1b00006221c52537279d1aaa217e25ee26521b992014245125cc19791f3123b224d418c420e9248b26281a45230527a528951c2124b6272029f01c2b24bf274029fd1c2a24d8275c29da1c6f240d288b292a1db2242828a829521dab241528b429fd1c0b2472274c29521cc1223a263c28011b2f22e525fa27371a5d23b9267a282a1bb5231d27c328411be9232d27e528721bdf232b27f628281bc6231727f328111b8623e926e128d81a5e23c226cd28b31a0e238d26b5286a1ab12255269928151a642232268428041a1e22ee2555289019d921b8252b2852198c217625f9270c19ff201c257d278b18b320c82400271f1861208524a126af171c20442465263617da1f10242f26e416971fd9230a266b165d1f992302263916511f6223d525f415de1ed222dd245e15521c8d20332208130819ad1e32218b0f3f1bbb1faa224710c81c5f20fb235711931cc720b023b111f01cf520dd23c712161d0721d923fb123e1dcf205f2331134a1da320f722eb12371d8420d9227d121d1d6920aa225c12c81c47208f22a511711c2820662287110c1c09203f220911761bbe1fef21a510c31a391f8d2135106f1add1e392101103b1a8a1ef5205b0f4d1a761eb820090fd9193a1eca20870ef119321e9820650f00000000000000000000000000000000a31f5022c423d905322cf72dfa2e161dc630d5321934b31e79329d33d534c81d3f334b33be34a01c583368322d348f1e46339130a4317f1e2d34d52e0230651a1f34812db82e501a5c348b2d442f1ea28234bd2d122f51a49b34632dc02effa47f34042f5a3050a2db343731e532d1a20a341d2efe2f62a42a33102c0a2e679e9033162f8f303da35834db326a34c39f3d325b3215342c217b2d972e23313e1d04290e2af92fe21e4e26a928e12fee1c7c25ad282e301d1cc425bc2880300f1d172439286e30701b5a24032c9931831c3c295b303b3418209b2b60331236861fc52b753370357698a42813308031e39c8e25e02ed730f69090210d2992298618741fb124512704170820d424232796171420c724ef26ad17611f9924ac26b616c51f6e247426d116221f31241e264216061f0924d62529164c1e86237a258715f01d422326253515771de322d2249f14041d85227a243d14ca1c2f224224ca13ba1ce4210324b013a31c9721c8233f13671c4f219423e2123d1c1e2160235b121b1cfb2009232812961bc820fa2272116c1b9e208b225411de1a55209021ee108c1a0b200a21b310531afa1f1a218b10621af81f20216110651ae71f1a2163105a1aa41fef205b10b719311fbd20d70f661a1a1f67208d0f0000000000000000a31f5022c423d905a31f5022c423d905322cf72dfa2e161dc630d5321934b31e79329d33d534c81d3f334b33be34a01c583368322d348f1e46339130a4317f1e2d34d52e0230651a1f34812db82e501a5c348b2d442f1ea28234bd2d122f51a49b34632dc02effa47f34042f5a3050a2db343731e532d1a20a341d2efe2f62a42a33102c0a2e679e9033162f8f303da35834db326a34c39f3d325b3215342c217b2d972e23313e1d04290e2af92fe21e4e26a928e12fee1c7c25ad282e301d1cc425bc2880300f1d172439286e30701b5a24032c9931831c3c295b303b3418209b2b60331236861fc52b753370357698a42813308031e39c8e25e02ed730f69090210d2992298618741fb124512704170820d424232796171420c724ef26ad17611f9924ac26b616c51f6e247426d116221f31241e264216061f0924d62529164c1e86237a258715f01d422326253515771de322d2249f14041d85227a243d14ca1c2f224224ca13ba1ce4210324b013a31c9721c8233f13671c4f219423e2123d1c1e2160235b121b1cfb2009232812961bc820fa2272116c1b9e208b225411de1a55209021ee108c1a0b200a21b310531afa1f1a218b10621af81f20216110651ae71f1a2163105a1aa41fef205b10b719311fbd20d70f661a1a1f67208d0f661a1a1f67208d0fce203625da25d491ce203625da25d4919129be2c142efe1fac2dc52e673086202630012f5330e21e6431602f893079205f326e2f9830111c5433482f9630ad9c4034bb2e1d309ca4e233462ea72f089d54349f2de22e40a54234882db62eb5a56234c02d5c2f51a56e34b82e59305fa54334c92ff93012a33334e22eab30f7a20734382e6a30a8a1f433083032319da3793383300b320da41f3122308631d817102eb72ee730071d272a432d93304d1d2428352c8830f21d22270c2cad30a01f9e26472cc330eb1fea25aa2c20311b20e926582ddd3193209727d02ede32a9203d289d2fdd325b1e0628322f25329f140527412ed23046929325b22c0d2f5695e7236d2a9b2c4c157c222f28f42909185d21a7265c29ad161e2115260f29ac17212190255b280318ae204525f627ea17a21feb24482774160e1f8c24a626f715221e3224fa2561151b1ed0237c252915061e5b23fa241815d31dec228f24ed14b11d8b225e24a114971d2e221d245f14331dd421ce231014cf1c92216f233613681c4b2127239c12351c1921da224f12f71bf5209922f911a61bd3206322bc114b1b972016223c11a31a5320b721c310011afc1f3e214f10e519a71feb200b10ee19831fc220c10f161a431f9620930fa219121f8e20a60efe19ba1e2e20d70ffe19ba1e2e20d70fed22812600278393ed22812600278393b928612b922cfc1f2a2cc82cbb2d63206f2efe2c1a2eb920cd306f2da32e3521ed31bd2dea2eac217732962d072f8a208733f12d702faf131b34b72d3e2fb7a028340f2e982ff5a349341b2ed62fa6a46034402e1f3030a43f34b72e4b30e1a05f34f32e7b3005a184340f2f93300da64f34b02e793039a50a34c42e8230bca31a33162fa23014a0db30b02e9f30f5104b2dc52d7e306e1bf22a792db030191dd128f72c9430eb1edd28da2ccc305c1eea28d82c49312c1d2828f02c9a31071fa027322dcd31522020275f2d9a31ef1e04277c2d28319a1e4e26412dda30531cc225c82ce32f6e1a9424ac2b6a2e3c186c23632af62c251821231c29f82ba918f0212228662a4318d1216b2795295c184a218926c6282218e320fd255628a41769209a252628e51623202e25ae277716131f9c24d226c215831e34240d264c15591ef923aa252a15191e92234b25f614f21d43230b25a614c31dd822b0248114781d552275244614671d0c2237240d14321dbe210924ca13dd1c6b217e234b138d1c2d21122388120c1cef208822cf11671bb82013225111e31a7420ac21b910a31a3d2061218d10c41a072026216d10b91ac01f0e212f10891a951fd0201110ab19ff1ecb200e0f781a1d1fc0203a0f781a1d1fc0203a0fd32257236b248e99d32257236b248e992829b12bec2c131f3a2a442c422daa21af2dd12c162e12232c30042d182ea822a7313e2d2a2e6921bf327e2d922e4e1c9933a12dc92ec11322349c2dff2e549a4d34c42d3b2faf9f7234ee2d982f1ba18034402e0c302ba18b34872e4a300fa08c34a42e603039a17634a02e733020a15b34652e883000a11c34522e8330579f1033612e84306899c0300b2e5030da903c2d732d2930588dfc2a832d53303c1c46292c2d6030901ef328ff2c7b30bd1f4b28d02cb830431faa27d82cd9303d1e4c27cf2c1731a21e0c27cc2ccf302f1e05266e2c9830171d95255d2ca82f5d1c5e25d92b8c2e5d1b21254e2bb32db61a9f245f2a0f2d571a35244429162c0a1a64227b28ef2acb18f2210628eb29a618bc2115272d297c1859215826a0282e18cb20e4255228cd176c20802502283217e31f0f253c276b165c1fb8248b26c015bd1e602414267b15821e1f24bb254c15321ebc235825d814bc1d4123ea247c14381daf229b241414e41c44225a245513b81cfb2129241313831cb421db23c412371c662179230d12041c28210b23c4117d1bee208e226011141bbc2028221511e41a8120be21ba10171b66208f21dd104b1b6e209821c6103a1b4b205c21ba10571a072021212610961ab21fee20c60f961ab21fee20c60fa1216b24f5240197a1216b24f5240197a525af29032bf41c26290c2cf92c29220b2c6a2c9d2d5b239b2ecf2cdc2d6023f830092d1b2e06227e32682d772e63216c33842db62e43200734a72dfc2e321f3834d02d512f631d6234cf2d8e2f7a148234022ee52fe79aa134372e1b30e89db234382e303032a0a0341b2e3730e79d95340a2e3030059b5234f72d44306914fd32142e5230761c5830d32d1830191ea22c422de42f6f1c4f2a592df92f081d4c29212d1e30411ee428d42c6530b61e2e28d32c4030011e84278d2c6f30a31d8827712c8c30a51de0275b2c2030a81d3b281b2c782f891d1126da2b3d2f2a1c7925b02b512edb1b2b25132bb62d6c1b6a24002a122d571a7c244b29942c711a8323d128e92ba21960222c28a72a30199721cd27e029e7184721f9265e297618f3204526c4282f189d2098250528cd173b200d252027e316fe1fba24b02680166b1f73244e26cd15de1e3924ee255e157b1eea239125dc143a1e77232425ac14d21dfd22cf242e14901d90227824fc13631d332225246413ed1cc621a223c2126f1c65212b231512051c1121d6228311a11bd0207d22fd10ae1bb42058220611f41a8d2022228c10df1a5f20c3217e10b31a432081212b10ce1a23204a2104102f1af81f3521e70e771aa81fd920a20f771aa81fd920a20f732020220c236396732020220c23639612277929e02aa419ae29422c612d8721f22a3d2c962d5122432db92cc92d3823d22f242d382ebc23f531392d432e5f2455332f2d7a2ef42318341c2db82eb32059345c2d082f8c1d8634ad2d672fc61d9b34d12dd02fe11db834102e16303a1bbf34142e1d30d994c034fb2d1b30da94c134d52d1d30db148334b62d2e30c21d3933af2d2c3026204630582d9f2f17203c2c032d5c2f221d082a3f2d712fd01c0629f42cd12f541c3029992c1230211d9028882c1730631d5027572ce92f401dcb26352cc72fbe1d7b26282c8e2faf1dec25e42bfa2e321d4325ae2b6b2e9e1c6625482b9a2d901c7d25942a1e2da41c1424b1299e2ce51a8a232629b52b601af722a028f02ae319de225928b82ace19b322ee271f2aaa19ef21d426492905192e214826fc286118a120d925b628101856207c251f285517f91f25252727be16b31fd624d1268316571fa124812635160e1f60241326bd15451e07249a251a15c61d8a2346258314a61d3423eb246b14851ded22aa2423143c1d91226824d913e31c322222240513a81cd721bb23b012611c842138230212dd1b2121a2226511561bc6204822cc10fe1a8c20f5215a10ab1a5520ba21df0fea1a3c208e211510d31a2c20ac219e0fdf1a07205c217e10df1a07205c217e103e1eb1212324c6913e1eb1212324c69157262929492ae31bb028ff2b0c2d1a23012a4c2c862dc323192bad2ced2d0524972d072d102eba24d4301b2d122e6425dc32222d612e082510341a2d7e2ec7235d34512da52e3d2391347c2df72e6922ae34942d632f6021d234c22db12f8921da34c92dbd2f5620e034bc2dd12f391ef834ae2dd52f7020a334552db92f5421f732582d732faa22442f582d642fde20ad2bc62c472f1f1ee3290b2d4a2f721de028ba2c3f2fd21c7728942c502ffd1c2528752c322f6c1d0b283a2c512f8c1d5426642bd62e8b1cb2251c2b552e741ca725092b3c2e6b1c63250f2b3c2e621c0f25c32af42d471ce6249c2a052d251c7624f729a52c8b1b272461291f2c061b7d23ac28602b541a42237c28df2a231ab22243285e2aa919bf2189277529dc1815219b26b9284c18d12023265a281218752095251f28891732203b25df271817f51ffd2461277a16741fa824b4261116961e432416265c151f1efc239e25c914af1d7e23372571146b1d1623e8241014461dbc22a724e9131a1d63225f24a613e71c16221b240a13a71ccc21ca23ae12601c7e2160230112091c1c21da2289115b1bce207722d010e31a872034224910cf1a662015220510fd1a4820f6215910641a2e20ca21f40fc71ae11f38210010c71ae11f3821001014194c202821dc8814194c202821dc8876258029ba2a231d9229232c3c2d33233c292b2c972d19233229e22c282e6023662b9d2cc52d4f24942ed42cc42dee2492312f2d1d2e822502345c2d9e2edc2495349c2d0a2f6324c734652def2eb422e334742d2f2fdc2201358a2d6e2f062308358e2d6c2f10231635a32d972f24231d35952da32f3e24db34862dd92f44252a33262d452f58243c2ecc2c8c2e93206f2a8b2c8c2e8b1d4a29d92ca82e921d8228982ce22e9c1d4628762ced2edd1d4728382cba2e241e4727a12b8e2e751d6e26362b3c2e3b1da026332b1e2e641d85263a2bc22d4e1dd7251f2b4b2df01c0f25772a162d471c8d24052af92cb21b20249e29352cf91a2f246129252c131bad230e290f2c7d1ad223dc28982b9d1a762345285f2a4f1a6422a22780296719a72122275229c818072179260b2940188d20e5257a28b21733206a25d427d516e31f1d2549276b16c71fe524e7261416511f97246d26b815e41e4c2401262a15531e0224a225be14271e892345256b14e41d1e23f7243b148c1da62295249c13471d54223e243d13221d0722ed230a13c71c98215e234012691c2f21e322c511301ce3207d223511351caa203f22f710171c8220e42192109f1b51207b214110a81a0a2049216f0f681aa71f0621280f681aa71f0621280fe71a2c201f232f8ce71a2c201f232f8c3f25db287a2ac61c3728ca2bd32c4122de28582c7d2d88236029752cac2d55246a29932c052e1a24232c192d482ed124c12f6e2d942e52250533f62cee2d27256f34772de62e6025e734532df42eb12403354c2ded2ecc2429355a2dfe2e48243e35482df12e59245b357c2d302f712480358d2d3d2f442522353c2d7b2f39269f32c72ca22eb425802c672c542e0621b329572c6b2e181f2829732c922e131f7428632cb12e641ef5274d2cc22ef81d0028122c7c2e001e4e28ba2b2a2ee81d2628652b1b2eb11dda26ec2af42db31cfc25d32ad12d4c1c7325bd2aa72d421c3425332a0a2d3c1c13248829a32ce41ad12370290b2c9c1ae8231e29af2baf1afe227728e92ae919ed223828742adc198c221328712a89191a229127282a29199e21fe26772992187621a326d22845182321442684280418dd20ec2537289a1783208c25e1270e17462034256427af16dc1fce24e32625166b1f7e246a26cd15cf1e2424f7251b15491eb9238a25b714cc1d322321252a14891dc822c724f213611d582271246113091dd22119249612a71c4a217b23cb11631ce220f0227611271cbb20a122e710311caa204322ae10f41b9320f1217110ab1b6f20a0214810301b5620a9210310a41a0e20a221d70fa41a0e20a221d70f8a1c58218823d28f8a1c58218823d28fab258f291b2bcb1ca1281e2c2c2d0423ad282c2c172d6223cf28782cbe2d7123c529ae2cfb2d4824162ae22c1b2ede236c2d202d002e96241631122df72dae252e34512df42eab261635432d5a2f2b264935612d192f692668354f2df52ede2586353a2deb2efd259b35582d162f1526c135312da92ef9265a354d2dd62e2c277c32192df42e9725e72b3d2c622ed11f2429602c8b2e121ea029712c542e001f0229492c3c2e3c1e47282c2c1e2e241ea527172c742efa1de726132c652ed61daa26842b0d2ed91d1b26062bfc2d5c1daa25052bc82df81cb725d12aef2cd51cbf25e429a92cdc1c44245e295c2c7c1b4e231f292a2c691a5323ef28fe2b311ad5227a28022bc71941235d28b22a221a252344284d2ad019b122cc27b429711932226a277e290a19b72114274629a6183121912609293918e4201b26a228a517472092250a28b016eb1f122540273016491faf24be267615df1e69243a262715761e2724e425a4140a1ec22378255614af1d5a232825cd13631df822e7240b134a1da322ba24eb121d1d2b2270245c12661dae211e24b812731d5621a123c812961c1c210d23b511181ce420a722d510221ca0204f229e101f1c5d20a8215710691b07203821ce0f1c1b8a1f0321f10f1c1b8a1f0321f10fd41ec7210e24e291d41ec7210e24e291c5248529cd2a031ede27ad2bce2c572207293f2c862d4c2345299d2cc92d7b237a29a12cfd2d6d23342a032d4b2ed1238f2a232d7d2e6e23cb2d2d2d2f2e44258532c52c442eb3270735b02c112f6127a835952ddd2e2326d135542da32e4f26e435422da82e6426f435382dc22e382708363d2d8b2e0b2895351c2d712ecf28c231e62c202f6e26b8290b2c3b2e7b1fd228502c092eec1ec628412cfa2d291f4928102c082eb31e7827b42bc82d141ed926692bee2dcb1dba26432be72daf1d1426162b392ef21c5925cb2a8c2d5a1cda25c62adc2c931cac256e2af62c6f1cad250b2a9d2c701ca8248a29722c471bf52316293f2c381a71242e299e2bf11a7f23e028482bdc198c234828bc2ae6198f220228f629eb1860229927a329c8182822472756299e18f221fc26ff28751885219626bc282318292134266c28bd178820be251228cb16182056257b276716401fef24e026ab15e51e93245e262b159a1e4624f525f314661e08249c259814141e952351255d14cb1d202304252814731db222ba247a13e51c2d226624b712681ca021d023c411d91bf920b4222211631b6e204f229810051b32202b225e10c71a4b20332200104e1b59203b225010691a5d202822910f421bf01f83218410421bf01f832184108620a1203d2479948620a1203d24799454256629ad2a871d6c28152c062d23227c28952cb92d3a233b29912cf62d6d238229982c062ed223c129e22c3c2e16240b29012d4b2eae22cc2a1e2d722e0d23602f5d2dab2e00266534322df92e5828e435752dfe2eb2281d363c2dd22e7d281d36212d842e7d2855361f2db52ea6288436882d152f9d29d935102dc72e282a96306a2c3b2e00267928012cdb2d471fbb286d2c002e002034282e2cda2d601f8127d42bcb2d581e2f27682b872dd81d8c27452b6f2de61d3926df2a7a2ddd1c6825d22ab32d661cf1249a2a2d2d051c3825772a2d2d3f1c3525582a1b2d3d1c3525d5294c2c3d1c5f248b29522c1c1b4c23f528182cf01933243e29d92bd51ab223eb28442b421a6a23c528ff2acc19da224d28472a5b19b422d427b7293d194b2256275129eb18da21d426f928631865218026bb280c1832212d2674287617d920ed2533284517a3209725d627a8162d2014252a27ff15f21fa624a02674155f1f442421260f15fa1eea23b125c914ba1e76235e256614641e0a230d252e14d81dad22b624a5138e1d552269244413371dce2118247d12e71c5921a023c911d41c02211923b311921ccf20b9221a11531cc7209c22d410081c88205522c210351b51202b220610691b142093212310691b1420932123103f1790205c2364883f1790205c2364881324c628dd29e01c4028082c092d4e220d28192c2c2dc9226528492c762d1523c528832cb52d61232629c82c2a2e79231229d32c232e8d222d2a2b2d3c2e9922ff2bda2c1f2e45233b310e2d0a2e82278f35042de22eda295b365f2d352f79296a36fd2ce32e872987362b2d542ea029b736c02c1e2ea52afa35a62c662e0e2b172f482c062edd245c288a2bf12d8a1e8128312c272e0a1f9a28f42bf62d7c1f0628fd2be62d4a1e7a27bb2ba92d151ee9262c2b5c2dd81de525b42a0e2d2c1da125b32a142df01c4a258e2a132da41cea242c2a3a2d281c31251e2ab72c641ca624de29972c911b87249a29872c151baf247e29292c061b98245029a82be41afa23a728b02afb1981238028842aa1190d2358287f2a4a19002324282e2a40197b22af27a929dc1812223e2738298d18c021e92600294f188821a226c12826181e2155268328ac17b020df25362807172f205d25a02746165f1fc424af268715ac1e5424102600157c1e09249925a814541e802339258b14301efb22e4243e14d01d792297249b137c1d10224b242c13011d9b211a248c12711c4d21cc23cf11181c1d21e0235b11f91bf3206a23f610121cc320bb22cf100a1c76204222c410b71b2320f0211010dc1a751f8a217d10dc1a751f8a217d10321ab4201023ee89321ab4201023ee89af240129062a8f1c0f27e72bf52c23221128122c172daf227928432c692dc822cd28722ca12dd1223029a12cdd2dde22be29b32cec2d6c232529ed2c732e5222b828202d2c2e7f21052c922c3e2e0a244b33152c042eb4295f36a02cef2ded2bee36062d5f2ebd2bd936db2cde2d352b7037192d6e2ed52b2336642c4b2ea32bcf2c962b6c2d3623e227cc2b6f2daa1e5d280d2cba2d611f7228872b612d3c1f73286b2b5d2d3d1fbd27482b582d4b1ec026102b3c2db51d2f26cb2af62c081db225642a062da31c0925312a3b2d191c02253f2aec2c131c0225dc29c72c131cff24d2294b2c111cd3244929e92b8b1b5d242229302b8b1a5224ef280e2b7b1a2924b628d22af919e6238b28812a6b1973235e28452a1d192b233b280b2aeb1804231628cf29d018bd22d327902968184322582742291918ba21d926e528db171a21492676280017a720c9250f286216392050257027cb15d21fea24cb265d151b1f7c243d26e014a91e2524cb255b142d1ea1236e250a14f41d1e231025c913851d9322bb2439132d1d22225b24c512d01cc22104244b12791c6b215023da11261c1221d6226d11db1bbb206622e3100f1c79200722ca10bd1c4020ba214b11991c1b20a921d810c61da51fdb20ca0cc61da51fdb20ca0ce21cd1203422eb8de21cd1203422eb8d9f25552a182c15205726882b462d4f217727c22b422de521bb27462c7a2dfb2152287c2ccb2d8c22ab28a42c112e7b221729ae2c132ee7222c29c52c332ed9220f28e02c012e3e211329b82c562ee9211c2d852c692ef8242a353f2c142ebe2bf6366c2ce02d8d2c7137f32c042ede2caf37012d752e452d9c35bc2bb02d902c702ab92a922dda21f426292b132d521ed0278d2b2f2d1a1fbc27312b0a2dc91e60272b2bfd2c3d1e22272e2b032d081ee426002bf72cd41d5826b42a102d5d1df725792a0f2da91c1825f2297e2ca31b352577295f2ccf1b52246a29572c7b1a69245a29382c9d1a7e247129132c731a7e243729ce2b731a5e240429532bfd191524e9281f2b9a19b023ac28b72a46191d237528692ae118d6224d28332ab01892222428f12982184a22da279c295118f1215d273d291418ac21db26e428c8174c21502680284417db20c5251d28f8163e20352572271716991fd024d4267515271f7e245d26e914d21e3024dd25ae14b71eba236c256414ab1e2e23fe245c14401e97229424c713d91d1a22312446135b1dac21c0235212d31c3d211f2301125c1ce0209d222611371c95203e22b510371c762009227010431c6020d521c210451c3920ba21450ec51b032079219610c51b0320792196100000c01b411f00000000c01b411f000000278b2a292ca320af26ed2b032dda202828fd2b3e2de72197274c2c6c2d8221e427612c952dbb214428832cc82d0e225928872cd82de6219728852cd62def215628572ccb2d77214928b92cd42d44219229042d052e7d22ac2e432c5b2deb265d36b62bdf2dc92d9437e02cec2d692e1b38fc2c2e2eae2e59353a2cd42d2e2cc3290a2bb82d81205427702a262df71d91274f2bf92c281e5427122bec2c331e3c27fc2acb2c1e1eae26cf2abc2cdd1d1226882a942c541dad25522a822ccc1c9725372a7d2c8c1c82250f2a902c4e1c4b25e3294e2cf01b9e248a292f2ced1a66248729132c981a20245e29d62b2f1a0d241c29892b561af92311295b2bfa199d23d528e02a77196f23a028862a1919232372285b2ae518cf224c28242aac188b222928e62948183d22de27a6291518002280274829d917d921fd26ed28a6175e218826ad280617ce20112667289716282085250928f815631f0b254f274d15221f922486261f15b91e1624c6259d148d1e842355257e14781efa22f1243b141f1e8922ad240114ac1d16225c246c13e71c8d2100246a12631c1d213423bd11051cc62079220011771b7820f321a510231b4c20bd213710581b342081215610bf1a08207d211a0fec1ad71f3121d90eec1ad71f3121d90e0000111ba51d00000000111ba51d0000cd25452af12b1e2004267a2bbe2cd9203e26012c5a2dd4206e27642cb62d65210b28aa2cf72dbd212428be2c182ee1211e28972cfa2dd8211328712ce62dea211a285f2ccd2d16221728542cc82df021ad278d2cb42d72218c2a642c052e20241c32b72b832d562ae2367e2c092e7b2ef637a52c6c2e3d2ff6321e2c5c2d8d2a5f28a52a8f2d41201227cf2a5c2de21e75260d2be02c491e5b26e52abb2cfb1d3626a82a9c2ca51ded25662a892c331da9253b2a6e2cc91c6225152a6a2c8d1c3825f329612c3f1c2e25dd29402c371c3925ab29172c151ce0247929392c4f1ba3247129482ca81ac8248429292c8f1a8a244e29f92bf0195824f7285b2bae190124ad28bc2afc1888238c28862a72184a238028702a4d18fa226f28462a1e18c02261281e2a331878223328db2907180622fc278c29221893215b272c290018e9209626bf285d176420f12555289616fc1f6125bf27fc15a21fc224ed26ba15301f59246f262915ee1e0724ef25fa14561e50236c255814fb1dbf22f2241a147e1d2a2284243013071daa2114249412c31c44214b233a12571ccd2089226611271c81202222e710581c5b20e12193106c1c4c20bd216010861c2a2078212f10d41bc11f35211f101d1c3a1fda20900e1d1c3a1fda20900e0000341c6c1d00000000341c6c1d0000bf24ad29332ba51fff25972a122c8b206c26b92b152dc3206527922cf42d04212f28d02c462e01215c28ce2c322e14212028872cc72def20d827422c6f2df220e1270b2c412df720bb27d82b242dff202828202c4e2d3d214829382c9f2d5222f92c4b2c292dcb256032512ceb2ca12b0634ad2c472e8e2cc22b412a602d45244726872a522c831e4726a42a702c1c1e55265b2a682cf61d2c26412a602c9c1d1026362a672c521dd2251b2a632c1b1d6d25e2295f2c961c3125c2294c2c391c2d25b3291a2cc31b2d25a329272c6f1b5f25b3295a2cb61bac249e29862c011b02245329372c851a0d2414299a2b971ad323ba28f12a1e1a1f2487287d2aa819972374286d2af71859236a28692a931834236f28662aaa1608237728622a6717ed227e28542abc17d62271283a2aa217c72262280f2a9217a8220928a3292418bc210627d62880175a207825a427f915b81fd424de264c15351f89247526f214f71e1824d5258e14761e612354253a14021ed222eb24db13bc1d5d2294248013891d15225d243d13211dbd211524b612cd1c50212c234812691ccc206422c5110d1c8e2035224c11de1b6120ea21e5107e1b2a20a4216c10831b01204b21ad102e1bb81f47211a0fe01a631feb204710e01a631feb2047100000c51ae11c00000000c51ae11c00007e24f828d52af41f6a25782a1f2c72202426772bbe2c5c201728f12c652e3e207c28462dcc2e021f4928f42c8b2e861fbc275a2cb62da0207127d92b352db71f4a27a12b0d2d98208e27aa2b112d0021cb27ac2b102dea201328b02b092de02071285a2b152d0821be28582b012d3921282a622bf62c95221c29982a212d22218f26822a062d621e7e26a82a8d2c1c1e3226362a462c6f1ded252e2a5d2c331dce25d0290c2ce91ca9257e29a22bc91c2e255b29872b611ce3245329752bf31be8244e298f2bac1b03256029922be11a1825b129f62baa1af9243c2a802c231b6c24e6294b2c321b1124e4284d2be11ae9237828872ab01a03233628602aee1984221e28232ae318ab233b28f72918170324a328a72ae315c623ec28db2a3416bc230529ee2aad155f23ff28dd2ad2167d22b228822a3e17ea212228d129fc168a2128271629e416302116265028c916862015255c273516911f552426266f15a51e8b234025c614431ee722ac247f14cf1d76226524f8139c1d0e222d24b2135e1db921e92306130a1d772191239712b61c34213e2329125f1cf420f322b711311ca42082223811e91b52201d22ac108f1b0e20fc217610981bae1fc4213d10041b221fc221620f1f1b411f5421230e1f1b411f5421230e0000c91a7f1c00000000c91a7f1c00000a2402282429611ec724c3280e2a171ffe24762a222c911f3428f52d6a2fc3201c29732fc130af1eb228d82c282e0c1ce825a02a4a2ce11ec125222a0b2c111f9f25352aff2b441ff525442a132c0a2039267a2a412c5220ad26e72a952c35204327bc2b0a2d58204827182c5d2d1f205c279f2b342dfc1dfd271b2be52cb71c6d27502a692cdb1c4326e929132cb21cb625a029f52b031d46255329942bcb1c0d251e29342b971cd624f528062b651ca624d428de2a141c9e24c928c52acf1b7d24c028bb2a721a80240b29122b9a192c25fb29342cc9186226602bfb2ce819b2257f2bde2c741c8e23b3289c2aa11ac1226e2747297f193f2354272729f818ea222a271c29b817c0222c272e29d0153a2305280a2aff1134240929632b06142224e029fa2b7c14f123002aff2b5616c6237f295d2b57183c237828242a8018d62157271d290118e920ce251428bc167a1f8f24ae265e15051fc023af250a150a1f872385250e15921e1c2350258214011e7022cc241e147f1d0e223b243113ef1cb521d8237412911c75216d23f911311c0d21c1223811dd1b5d201e22e410191b0320cf2130102e1bdd1fbf213d10261bbd1fa721fb0f3c1ba21f62210a104a1b7d1f6f211210021afa1e69217a0f021afa1e69217a0f04142d205b21680604142d205b216806b222bc257e274e1ac2239527bc28c21d0422cc257b285e1c3d27252c602cf71c5e2b30313032ef1c3524cc295a2bd71d8b249128592a4e1e2f24ab28222a8a1dc624d928852a521ef324fa28be2a651e952550290c2bdb1ef525c929d92b211fde26a02b222dc71f0b28d32c542e181fab273b2cb82dc01d0726f2290d2cac1da5253929152b7e1d3525f028e82a3c1dee24cd28b42acc1ce524af28842a9c1cc5249328612a7d1ca8247e283e2a3c1c8d245d281c2afc1b77243828062a8c1b4d242028192aff1a37241328fd290d1add2238289d2aed188b217328ba2a8b16601cd52433288a0f8420fc2405289e158521c6256d287e189d21da25902892180021c8255d28d1172021ec255728b41600229b26b6282b156c243428c629a40d7524a42a632c8d04a625702cd22d681502251d2bb12c9819872114287f2925189320d7250b28dc1666209124552609163b20d6238c25891502203823fe243e15a11e492252245614241eea211a24a413c51daf2106248c13961d8421dd234e13521d432197239f12041dec2024233e12ed1c87209222d011af1c4b203e228811811c27200d220711351c0020c321b210af1b8b1f8a214a106e1b601f35212610271b0e1f4621fc0fbd19d81e7e21240fbd19d81e7e21240f00000618fb18000000000618fb1800007920a924ba257f1874220727b4282b1c2322e925a9278a1b6a1bb91f4021511432207a24ad252819e6243a28cb29041e0d2593284c2a0b1e5d259b28342a3f1e7a25b9283e2a081e9225cd28532a221e8625ce286b2ae71d6725c728532ac61de72484282a2a9d1c642475286c2a061a86242529252bc91a1a2532292d2b501ceb24d628c82a001cb724af288e2aac1bda2498285d2a951bc6246028122ac51ba7246c28112ade1b7f243d28de299a1b56241428bf290e1b3624e7279429da1a2924ae277629801a07245c275a290a1a9623a026c1287219c621c8241b27eb17951f0323df25f51407209e233d2645159e202e24d5260a16ac204124d0261d1694204624db26481630205c24f1264816cc207424ef2680177b1e63241a273d14f6223e2a322c550992299c30fe311c13ab24f02a7b2c001b1f1e4b246b26fb1426209123e9257c161e1fe52204255615391e8f22bc247814421e2e2271244b14da1dd8213524a713be1da121192483137b1d5d21d0232b134d1d24218223ef12ec1cc420f3221f127e1c762069229711ed1b2620fc21ee10c11b0220bc21d3103e1bc01f7c218210151b931f58216810f91a5b1f31215710f21a321f18211910691ad61e1b213210ab1a3e1e68202c0eab1a3e1e68202c0e000033167019000000003316701900009222d6257827a61beb2181261b28341ccf20d324fe250f1a0e1eff20a922bb144b24e0251228cf1b41241128ae29f41c6b245628d0296d1dc2246828d6298a1df5247128e129231d25257e28ed29801d02257928e529311ddf247328ef290d1da824fc276d29621c9c21f924b126be182b2331262a28d519bd2400286e29b61b9c24eb277a29351bad24df277229021b9924cc277d29e51a8c24ad277b29d21a7a24a6277f29b71a6824852777299c1a4d2467276929731a2824482754297f1acd2313273a29191a3023be260829d9196a224626b4283819c821c6255f2885183f214225c627de17e720c52423270a1791207324d5268e1652205824e926341635204724e5264f163d202924d1265b1643201a249c26d9155d20ed236f26e0144a1fa922042535134116cd1aaa1c64045919a61c381f25060a1ebe21112483138c1e09224724b3146b1eb72124249c14bf1d58210a24e2136d1d2321be231913481d0f217023e8120d1dea2023239c12cc1cc920f92247127d1cb120b72295114c1c8e2087225811121c5a2033221011d61b1820a721e010a01ba41f32218010651b2e1ff2205e10491bf21ec7201110821bc61ea420e80f871ba21e7420f70edc1a761e6d20390f8e1a151e1820f20b8e1a151e1820f20b0000b918991b00000000b918991b0000ba21b2251027ab1a60214b25b3269a1a382027246d252f19fc1f5c230c25a618a321b5253127ed1a78237027f228591c2424e0273f29b01c2a24f2275029951c50240a2879299c1ca72436289929d31c392552289529401dce242a28a029d41cb4232e27ef28fd1b32221d262728081a5923be268728eb1a33246a27f928a31b1e24882721293a1b0f248a273e29201b082480274229d11af823682732297c1acb2331271429571aaf230f270029401a7823de26e628141a1923ae26d028c619d0228f26be28c319852256268f284e194022162654281619f421cd251b28d8185c216125ab275c18ee20f7241b2703188120a024b026541734205f247d26d616de1f25244d262616a31ff4231b26f8157b1fb82310269c15581f7a23e2254515561f29232d254415451d4c21122391135e19ad1ed4205d0f611a151f4c22200f1b1d3920de236610e11ccc20d1232311111dfb20df23fb11151df920da235312421dc9207b233512471dad2013233a12221d8020e422bc11161d6220b322ae11bd1c44209322fd10701c2d206822f510171c16203f229210981bd31ffc213d10d71a4b1f9b21a30f851aed1e4e21dd0e3c1a981e1721900e3e1a7c1ee720930e82192f1e0721720db5193d1ed220bc0eb5193d1ed220bc0e00000000000000000000b918991b0000ba21b2251027ab1a60214b25b3269a1a382027246d252f19fc1f5c230c25a618a321b5253127ed1a78237027f228591c2424e0273f29b01c2a24f2275029951c50240a2879299c1ca72436289929d31c392552289529401dce242a28a029d41cb4232e27ef28fd1b32221d262728081a5923be268728eb1a33246a27f928a31b1e24882721293a1b0f248a273e29201b082480274229d11af823682732297c1acb2331271429571aaf230f270029401a7823de26e628141a1923ae26d028c619d0228f26be28c319852256268f284e194022162654281619f421cd251b28d8185c216125ab275c18ee20f7241b2703188120a024b026541734205f247d26d616de1f25244d262616a31ff4231b26f8157b1fb82310269c15581f7a23e2254515561f29232d254415451d4c21122391135e19ad1ed4205d0f611a151f4c22200f1b1d3920de236610e11ccc20d1232311111dfb20df23fb11151df920da235312421dc9207b233512471dad2013233a12221d8020e422bc11161d6220b322ae11bd1c44209322fd10701c2d206822f510171c16203f229210981bd31ffc213d10d71a4b1f9b21a30f851aed1e4e21dd0e3c1a981e1721900e3e1a7c1ee720930e82192f1e0721720db5193d1ed220bc0e000000000000000000000000000000008c219926a9278c16862b702f6d303320912cb22d622e1e1ed42df52c642e941d2030ae2d782f51166f31c22e1430db9ccb323c30f630129ef3337431e33298a2d3336b3116337ea3143438305b316ca4f8333e2f62301f9faf33e42dad2f60a27034ce30ad313aa2433422302c31fba17933112d212f3ea139337e2c052e26a01332412cce2d0aa159318c2e54309ca4453117336834669ffb2edf325834218ff8298b2f9531cf1fd625832b492f7e1ddd246529fe2d9a1b17256f292d2e241ca528932d8b30c71d222cab32ad345a20092c98336b3535977229c82f9231b19c5b245a2bed2d1d925b24be296e2c4715e9215e28372beb135322b0269c28261909201c251428d316ec1f04254527f4161b20ed241427ae16981fc624ee262e16e61f862492266d16541f47242626bb150f1f1824cc258515631eae238125fe14051e57233325b514a91d0823e7243e14431db6229c24e413051d572268248713f21c07222a241a13d51cbf21fd23f012931c6d21ad234712611c2f2177230212361c09211a238211011ceb20fb223d11a81bbc20ae2201112f1b7920e121b2108a1a2c2036214710671a1020282130106c1a08202221fd0f6b1afb1f2721fc0f541aac1f0221e00faf19291fc420b60e871a211f60200a0e00000000000000008c219926a9278c168c219926a9278c16862b702f6d303320912cb22d622e1e1ed42df52c642e941d2030ae2d782f51166f31c22e1430db9ccb323c30f630129ef3337431e33298a2d3336b3116337ea3143438305b316ca4f8333e2f62301f9faf33e42dad2f60a27034ce30ad313aa2433422302c31fba17933112d212f3ea139337e2c052e26a01332412cce2d0aa159318c2e54309ca4453117336834669ffb2edf325834218ff8298b2f9531cf1fd625832b492f7e1ddd246529fe2d9a1b17256f292d2e241ca528932d8b30c71d222cab32ad345a20092c98336b3535977229c82f9231b19c5b245a2bed2d1d925b24be296e2c4715e9215e28372beb135322b0269c28261909201c251428d316ec1f04254527f4161b20ed241427ae16981fc624ee262e16e61f862492266d16541f47242626bb150f1f1824cc258515631eae238125fe14051e57233325b514a91d0823e7243e14431db6229c24e413051d572268248713f21c07222a241a13d51cbf21fd23f012931c6d21ad234712611c2f2177230212361c09211a238211011ceb20fb223d11a81bbc20ae2201112f1b7920e121b2108a1a2c2036214710671a1020282130106c1a08202221fd0f6b1afb1f2721fc0f541aac1f0221e00faf19291fc420b60e871a211f60200a0e871a211f60200a0e2b240e28b228b7192b240e28b228b7198e28b42c662ede20902b812dd52f3920f22d892ddd2ed41a6830212e932fc096ab31c72e3930839e6832522fbf30ba9d1c33f82f0331e6a1ac3302302c315da2f333f82feb3090a02634702f9630e2a26334912fc230e1a526341a30203180a45234ce2ff6303da52e348c2e40309aa5eb33d32d962fcfa542332d2ef02f40a6f631072f9c30e6a504304f309b3161a1112d28308931c313122a152f05315b208528ce2d52301c201528322d7230c120c227602dce3043216e28942e1e314d21a128e62fff313520d32811307b32761c5628522f4f316d080a27e72d68307e90b725c62cf02e4b8f0c25682ba62dd4949d223e29f72bb3158f210e28312a45174c211f27c3299716e6218d26ea280c18ac21bf253a28b21693202725b927dc16451fd82426277415ee1e842499266b15491e41241126ea14631ef5239625fe14771e8e231b25d9143b1e2523a7247914141eba226e245d14ea1d57222e240e14831d0022f5239013161dc0219c23fb128f1c6721462341125f1c2f21fa220012291c0421b5227111d81bdc207c2221117a1ba0202c22e410b91a5220c4216510271a03207d21a70f241acd1f2c213f0f101aaf1feb20280f351a631fb6208a0ec719281faa20150eec19d91e3f20fe0eec19d91e3f20fe0e02241b28af28ed1702241b28af28ed17b028e22bda2cbb1e672bf52cfe2d6f1d4c2d642d712e6c1ecc2fd82d142ffa189c31df2d4c2f4b989c325c2ec42f389c2833fc2e4030929cd333c12e2c307ea01b34252f7630d0a23a34192f753096a440345f2f76309ca45034472fa33021a44d34f22e8330aaa43334a22e5e3017a51234602e2230efa45233512e3130e7a4d3319d2e503046a4092f902e5f30a29f342c552e72308297752a372e6e302e1a5529032e74304b1e6629f02d8930ec1b9329fc2db630171cb028272e1731a11f4128632e1031771f31281e2ebd307b1d3a27c52d7330091cd0264f2d03304e1a3525832ce02e7c1898246a2bae2d54178d23182af62cf31745230929aa2b4a189d222228222a1d18fb2142275429d21725216426aa280f17ab20e5254528b31649208d2514282716242033259327f215661fb924e2264f15f41e5a2436263715a61e1b24d025c6143e1ec6236225ae14e31d612315253a14c81df522b72426148b1d7f227c249b138b1d35223b2441135f1de42110240713f91c8421832382129a1c4b211723ba11391c0a219a2286119e1bc2203122be10351b8020bd217c104c1b4c207e214f10711b1e203a212810371be71f0f21990ff01aa01fcd204e0f0c1a151fc020c10ee51a4a1fb620f10de51a4a1fb620f10d4518091f0f20d0834518091f0f20d0839728ec2b142da321d229c82cc12d1b213e2c3b2da22e1722eb2d472d4a2e3c227330ad2d3b2f611f3b320d2e8a2f5c124a334d2eb72f7193f2333a2eec2f199f2834792e1030d6a13d348c2e2230f3a14d34a82e3a300aa24f34b72e4a300ca246349f2e4d3000a23f34b52e50300ba346344e2e7b3017a480334b2e72302da3a2314e2e3930ada0fc2e222e2230cc9d122cc72d363046175b2ad32d1130b51b5829bb2d1a30491df328912d3830bd1fdd28a02d6f305c1eb128c82d68308a1d6b289c2d5f300f1ea927652d3230031df826df2cfd2f1d1c19267b2ce62ed01a6b25fd2b152eb419c524462bcb2d54194824462a2f2d5419a3234e29162cff18c4229b28b82aa4186d220f28c7296818eb2118270d290f18492155268d289617af20f0254428b91658208925f4273d16d51f20254c27a015781fc824ac265d15e41e6f243026f314ab1e2f24c825c914441eda2360257f14021e712302251f14911dee22b824a3134a1d832277244213111d31224424a012b61cd621072429125b1c8221af23b311101c37213c235111871bf120b822ec100c1bb8203e229c10f61a8120c7215510271b622085213910251b5020752138101f1b30203621f40f251abf1ffe20dc0e551a6b1ff620120f551a6b1ff620120f751bf6204b202f8a751bf6204b202f8a1228a72bfa2cc721fd28942c8f2d6723612ac72cd22d9e22122d1c2d0f2efc21cd2f8a2d8d2eba20b131ed2d222f8a1e3e33372eb02f8b19ec33572eed2f0b942a34b02e2a30619a4e348f2e2830b09f6f34792e2b3039a28d349a2e38308ca38234532e2c307aa36a34492e273033a23c340d2e1030919f7333102e2430b4994f312f2e54306c11fd2d002e22305a19aa2ab02dfb2f611aac29c72d0430861c0229a62d0f30981d8a28572d1b30f01d77284d2d2b30201e20281e2d4c30a91d0328f32c0530fe1c3228bd2c4e2ff41c1d28a62cf92e981c4526492c3a2f671b7c25d82b142ed31a3225d72a512d221a3924182a9c2c411956246729342c6519d723c128812b211994222928552ab918e021d027a02997186e21182734291218f9204826aa287517c420a525f42725176320222523274d162a20cc24bc26fa15aa1f85245c268015f31e4824fb25fd146a1e0524a1256714201e992338253414da1d2023e424a713a31dc1228f245f13621d51223624b212f31cde21c62328128a1c742141235c11221c2521e922e110b21bdb2091228b107a1bb02054226a10e61a83200c221210d01a6220cd219b0f861a44209221490fae1a2b2062219c0e111a02203821000e7b1aba1fd220690e7b1aba1fd220690e85199b1ed51eb18a85199b1ed51eb18af828882bce2c5c208c29ad2cd12da4220f2acc2ce52d1622dc2b462d6e2ee521ca2dc22de12e1922d430c32dd72e3d218d32142e562fda1dfb33ca2db52f13146334152e0530b89a7434272e0130d29a8c34222e1630ce9daa34492e2230f49da134272e153023a0a534322e0d3056a19c34f02d04301ea00234a92d24301e9d3731992dfa2f53116f2d6e2d852f3e1ab92a252db42f701a072a5e2d8a2f0a1c3c29142d9f2f2d1cfc28db2cc02f4b1cf628c72c7e2f391dfd27cb2ce72f3a1de5269c2c6a2f2b1d8f26592c9f2e201d0a262c2c882eb81c7725d02b4c2e461c2025682bad2daf1bfc24b42a102d791b4e24e4298f2c2e1aeb2335290a2cf019f622a7285a2b3819d2225328d92a1e19cd22d727fd2919191c22ed263229951872215926ee281518e020f325ad284f177e2088252e28bc16182033254c272416b91fe624df26cb15411fae248b267015d41e6c242026e614401e1e24ba257d14da1db1235e253314af1d4d23fc24cd13761df322a8247e13471d96226424e712f51c32221d247c12cd1ceb21b823f911771c9d214c238f11031c3621b822fe107e1bdc2053226c10571b9920f0211910121b6620aa21710f2f1b4c2073211b0f021b2b209221610fce1aff1f40217410ce1aff1f402174100000ab15481d00000000ab15481d0000c2251029ad2a6c1d2529602c342d52223d2a8e2c982d7723902a0e2df02dda23352c8a2d8e2e18245c2fcf2db82e1c24d031c82d812f4e22af33932dae2fdd1e6534f52dd22f9c1d8134242ebd2fbf1d9b341f2ef92f0e1bc1343f2e1d30db94c634122e17304f9bce34572e19305c9bce34bd2d0530e7941934852d0c303b1dc030812d762fab1e2f2c102d2f2f121dc529e32c1f2f9b1c6d29062d182f051d2729e92c5f2f191d9828bd2c862f211d5e28b62c8e2f6f1d2628952c5f2f291df727482c8d2ef51c3627172c542eb81c7b26cc2b3b2e721cdd25962b092e351cec24f32ab42d111bc524ad2a1c2d271ba924ec29812cfd1a49241d29c72b6d1aad23ac28082bc21980238528ba2aa019dc225428562a2419f8218c275a297a188021cd26be281f1807215a2671288a17b020bd25342807176c205d250228a1161a2017258f272616b81fbe24e226c915f21e5c243d26fd146b1e1324c2259c14e31da82356253a14a21d4423fe24bb13631de122b5246413371d91227524d212fc1c49222f248512ca1cf721e923f611981ca7218423b711211c3321f1222311601bd1207d225a10c81a8c203b22930fae1a69201422760fcf1a522003229a0f8a1a3520dc214d0fd31adc1f1121500ed31adc1f1121500e00001314331b000000001314331b0000e026db29d42b791edc285d2c8b2d86230329842cb82d7023f029fc2c272e0724da2a232d162e3524da2c5e2d452e9224ab2fdf2d012f86249932e42d312f512283342b2ead2f0820dc34392ef52f341edf34362e0630371e0335252eff2fad1b0e35f32dd92fbe1b28352d2ec42fe61b0d35b32daa2f721e1f346f2d752fbb206230352dd62e32202a2c092dfc2e0d1d3b2afd2cd72ef81c3529fe2cee2e7b1d9628d12c022fb51d9c28942ce42e081e6a285b2ca52ec61d9927282c962e371d9326092c832eb81c7926fd2b582eda1c9e26d22bd42dc01cce254e2b872d5a1c6725b92a3a2dc11b58253a2ad82cac1be724d329522c0a1b6c246e290c2c591a05242929d92b081adc23d1284f2be51925235b28402a5c195f22e6278529c718d92149275229631864219a2605290b18db2005268c28481760209325e8278f1610202c253527d515ad1fdf24cf2682150d1f91245e26d614cf1e5224fb25ac14521e0f249e255614241ead2345250414f11d4e23fb24c613981dd7229c24f6125b1d89225324aa12181d23220a245712b21ca22182238b116a1c2821eb2237113e1cde208222bc103c1cad2044227510281c7820dd211d10b41b43206c21210f871ae91f33210a0e531a7c1fe220770f531a7c1fe220770f00008814d61e000000008814d61e00007e26da28a12a3f1c20280c2c222dc8225329762c722d1f246729c72c3c2e2e244729f02cc62e00242a2b8d2de42e49247d2d072e4e2fe1234e31ea2d542fc2212034442eea2fcb21ed34f32d3f30491e2235052e2930dd1b4635042eff2f0a1c6235e62dc52f1f1c7435352eb92f2d1c7735922dde2ff91e57346f2dc22f3323e72f242daf2eca20f729ac2cc52e851d2429e42cdc2ebe1d2029bb2ca52e0d1e61287c2cab2e721d0528602cb82e421d1728412c942e5a1d1528022c4a2e151dbc27da2b652ed01cfb26882b0d2e581ce1250d2bf82d081c0425ca2aa02d331bb9243d2aed2c151bd324282ac82c3c1b9724d929582ce21a33240129cc2b4d1a6723a828ff2a8c19f9225928832a3a1999222428722af31822229627202a6718c22113276e2922187a21b126c528dd172b214f267c281717f520f5253628cd1680208e25d427761633202b2557270816d41fd424de265f15551f892462260715ba1e402404269d145a1ef1239b252714e71d6a233225b813891de622d924e312561d692283244d12111de0212c24fb11e71c6d21a9237911641cf320fc22e710501cd020ae228b104c1cc420592240101b1cad200022990ffb1b8120ae21620f121b5f20b321fe0e311b1c2056210410311b1c20562104100000b319161e00000000b319161e0000c425a529642b6d1dc228782c752d7422ed28882ccd2dfe228129d52cf72dfd23cf29f92c472e3724042a732d0e2f1424b32bba2d4b2fbd23be2dbd2d792f8323a932032e772f3a23b5349a2d183034205935dc2d3f30c7209035d22d1330191f9935ae2de62f241fa735162e962f0d21a3355d2d112fea232934f12cfb2ef7232d2fec2ce02ecf20c629942cbf2e571d6029cf2ca92ea91d3d298c2c452ed91dc028552c2e2e9b1d51283a2c382ea51d16282c2c542ede1d63271c2c8f2e8a1d0c27ca2b282e821dd8266e2b162e5a1d4826022bbf2db61c66256f2ae12c0c1cff24ef29ae2c7e1bbf248529432c6c1b4a248a29352cb41a17243729072c221a1923b628462b53192b239828ef2a2619b0236c28752a85190c230328d1290f1966229d2785299818f2213227452945187621bc260229d7170f213b269f28f0167a20a82511282416f71f1f253a277715561fb924b8260815e61e732440268314981e3924ee255014311ed4237a25b413c81d69232a2532137c1d0123e0247a124f1d9f22a8244512411d34226424de11611dcf2128240212571d7f21bd23f711871c26212223c410031ce4209e2239108c1b97202c22f20f991b5c20a621830f131b0d203d21720fbb1aa61f2921840fbb1aa61f2921840f6910401d7820b4006910401d7820b400e9246829442be01d49281f2c242d3822fb289d2ccb2d3b239129ec2c172eba23f229f82c502edf23882a6a2dab2e1e24782a792dfa2ebd23282c892d742e7124eb2fcc2d012f6f25db332e2de22f43247835e72d1330fb1ee235a92de52f821fed35962dda2f4b21f8350c2ea42fdb22ec35792d3d2fea241934f52cda2e7e25fa2de62c652f882196286f2cbb2e691d1e29b12c782e051f8628662cfc2d351e1f28242c092e2e1e7727ea2bed2d991d2727ba2bff2d981d5027992bcc2d7b1db327342ba32d871d7c26ec2a802da81cfa25cc2a2a2d1a1c39266e2ada2c451cfe251d2a852c1c1caa259229432cc51bd12464291a2c9c1a78245b29052c221a0624e7286b2b861999235a28a12a3719a8220828e32990189e22b527a2298a185e226d2773292a181f2225271a290118ba21d126d0287e17612166267f280917ca20f3252828931641207b259a27d6158e1f1225fc262f15251fb1247826e614d51e5f240d26b0148b1e1b24ab254814271eb82356250614ca1d3e23fe243413751dc722ad24ca12d31c39225324b211641ca621af232f11b81bf620a0228e103c1b712022220a10191b41200922ed0f0d1b5f201c22e00fb21b7e2044229c0f7e194d2060227c0ebb1ba71f00215110bb1ba71f002151102b18451c862088002b18451c86208800e3258229152b6a1c9328602c5c2de921d328cd2c072e77237729ef2c652e0e24a429fb2c6d2e4624a3292e2d842e2f2421293c2d9c2e1f23a92a652dc62ee8221e2cba2d682f3a234c31df2d392f3d25fd34982de92e23242c367b2d9b2f17233d36b42d03302a235e36a12dde2f78245336a22d812fdc260834362dd32e6e265d2c432c242e27213728322c3d2e0d1ebb288a2c312e181f3028352cf52d481eae27192c002ec21d9227fa2bdb2d6f1d7e27b12bb82d601d21264a2bbf2d671cfb25152b9f2d7c1cef25da2a342d421c1326912ae52c5c1cf125272a982c441c0025d129592c2d1bfe24b229492c2b1ba1247b29162ca61ac5245229be2bd91a2724ec283b2bf7198623b428cf2a2919f5225f28412ac618ea220428d129be1898228727682950181722fb26fa28f8178c219c26b72842174a2145267628eb16d820fb25342856168f20a325db27f7151b20252533271b15df1fbc24a326e5147b1f64242f26a714f01e0424b0255114ba1e86235a25f113561e0b2307257b13e81db522ba24f912ac1d612277245612521dd72121249a11e61c53219d232811d21c022118231411791cc620b1226c103a1cbc2090222e10031c87203f226d0f071b4d20ff21d90f0e1b0a2099216e0f0e1b0a2099216e0f0000301d7e2000000000301d7e2000003624e028902a801c50286f2c9b2d8a2236288e2cbc2dec22d028cc2c192e9a233429002d642e072479292a2d8a2e26248e292f2d642e5b23d6298a2ddf2ecc229b29372de12ed0212a2d7f2d0b2f0924ee32a62d622ff825bc35562de32e96226c36a22d862fbd21dc36772d572fe12342362c2dc42eca263c33fa2cc82e3c261c2c422c792eda20fe28322cdb2dda1ec328732c062ed61ee628142cee2d081f4b28082cef2d291ec427d22bb62dd21d0627292b6b2d7e1d2f26092b1d2d081df825e52a302ddb1ceb25b52a062da01cf6255f2ae42ca91c7a25252a962c1b1c4d25ee297a2c9c1b4625de29732c3c1b3925c729482c2a1ba4244929762b5d1af523b528a62a7619662380289e2a141937236b28912af318fd2234283f2acb18a922ee27c0295b18452270274b291a18f52115270a29ca17ac21c526c4286c17292164267c28c016c920fb252c289016372070259f27c8156b1fd724c4261715d81e61241f26b214a11e1b24a02556147b1ead2346253d14421e1d23ee24c913dd1d9e22a824ec128d1d392266248e120b1dc8214924f4119d1c7f21202472113b1c2f211924fe101b1c022193239610051ccb20c7223c10f91b8320fe21600f391b32209121af0e3e1be61f4e210b103e1be61f4e210b1000004d1d4120000000004d1d412000006824eb28582a6e1c5727582c5e2dea212a28722c8c2d9422b828a32cf02d00231429c82c232e35236a29f52c4a2e5723d929012d3a2e8f236829222dba2ea422de28512daa2e8321022a192d522f0a22cf2e802d092f1b256c34572da52e9e277a363b2de22e33261137402d9b2edd255b36ce2ced2db527e931872c082ed82538298d2bfc2d291ff1274f2c162e761e4a28252ca12dfb1e2328b62b582d771e1528952b462d1f1e7e276d2b5b2d9e1dd826132b252d5a1d6426e12aee2ccb1c4326a62ad32cb21cfd256b2abd2c7d1cb6253a2a9e2c481c6825092a802c0e1c4125f229682c8b1bd6248c291d2cf11a83243b29ad2b301a4924f2285b2be1193124b828f62a7b19f02388289f2af0187d235e284c2aa8183a234128162a7f180d231c28db292a18d322e4279d2907185f22722754298617bb21ee26f42821171f21592686286016ab20d9252428cf15412063258d274b15e91ffb24eb26ec14421f932454268414c71e3624d9250014451ec4237e256713ee1d372321250013751db122ce247112041d32226d24eb119f1cbd21102475115a1c642153236b11181c0721c522d510e91bb9205c226b101d1c82200c225510aa1c4820bc219d10fd1c112078219e10c71d771f86205f07c71d771f86205f070000891da21d00000000891da21d00001526b62a752ce620ab27132c562dcf212b28662ca72db7223628ac2cfc2da7229b28d52c3e2efb220129042d742e1b2376291b2d712e68235529252d782e0f23da281d2d4f2ef6210a29d92cb82e8c21622bd72c952e3e22c0304b2dbb2e4e259635d32cad2e19280b371b2d9a2e2b29f435c42c602ee3297a304a2ce52d24269728682be02d781f60281f2ca02dad1fc727c82b492dd31eb227632b1d2d821e5f27632b1c2d001e1d27402b0e2d901dc326fb2aef2c491d7e26b72ade2cde1c30268c2acc2c711cb225272a8d2cd01b9f25d129522cb61b0625aa29512c931a6625a629102c101bef248329142c741ace246f29d72b491a732434297e2b89192624fb28302b2919ca23bd28c72ad91835238f28882a7c18e5226428462a4a18a5223528f52922184e22f127a229d8170522732746297e17cf21f326ed283a178a2176268f28e4160521e3252b283f1662204c2589277515b71fe224e826cc14241f932477267114b01e4524fa2529147f1ee82390250b14521e4e2322257613e61db622b024f712a51d422245244e123c1dcb21eb23d811d31c5f2139236311721cf620a022ae10541caa203c228e104f1c84200f2243104c1c6620dc2140102f1c4420c721be0f781beb1f77216810781beb1f772168104c1e872489259b014c1e872489259b015f263f2b862ca02064272f2c2e2d5d21d3283f2c802d3c227128b02cce2d4f226628c72c112e3f228928df2c392e7122a828e32c4e2e7622ed28f22c492e5d22c728d52c4f2e05220429f12c252ed721dc281d2db42ee220462cde2c3f2e3a23f3329a2c6e2ec4283036582c202eb32bba35b32cf72d202b472e432c4f2d1b24c228172cea2dd51eea280b2c8a2d5e1fd427942b202ddf1db6273e2bf42c081e6827222bdf2ccb1dbd26e22ac92c7b1d2826a12aa42c031dea25702a8f2c9f1cce25532a7f2c2b1cd2252c2a752cfc1b8725ea293f2c3b1b2f25bf29282cc81aef24a6291c2cc41a8e248f29162c401a54246429d92bf019172423299d2b9c19d623ef28122b20199f23b528a32abe1846238d286b2a8618ed2263282f2a161899223d28f229ca1743220328b42965171122a52767292917d1212d270d29de166721b926cb286116d02033268028fd153a209625132842158b1f11253527b1142b1fa0246b267614bc1e1d24b52530145e1e6e23392584132c1edb22d9244a13d71d6e229d24e5127c1dfe2154247a12b91c7b21fb2393113a1c0b211e23fd10bc1bb3206c225210661b792003222210161b4e20c721760f3e1b37208621a00fc51a12208b21b20ef01af31f4b21fa0df01af31f4b21fa0d541ed8228a249e01541ed8228a249e011227982a282c3b207b26dd2b092db5206427572c942d5d211328a22c012ea8211a28e62c452eb2210e28ea2c4a2ec2210f28c12c212ee5212628962c002e05224e288b2cee2d40227828902ce02d34228927be2c392e1b210c297f2c822ee121c32c552cca2dbf2369348f2ce92e7d293f35822c3e2e332b982c142b472c2f23b3271f2c4a2ec11e0728762b8d2d531fad26462bf12cdc1d9726f72abd2cc81d7426c22a9d2c751d00267a2a8a2ce21cb225492a6f2c741c8025202a652c4d1c5a25062a622c2f1c4925fa295d2ced1b2125ea294b2c5d1b1025d029412cf11af224c1292d2c791abc24ab29202ce51962246e29012c7519362420297d2b3d19c023d428f92a93186223b428b32a1f1833239b28792a0518e5227b283d2ab317cb226c28202a961791224328e72955173b221228a2295b17bf2186273d2927171421d926cd28a5168b2024266a283c1632208b25e4277d15f81fd824ff263715841f76248726ad14481f2e240b264c14ac1e8c238f25e0131f1eef2211253a13ac1d58229a24b2122c1dd22129241b12c81c4f2166235711581cd7209222da10271c872027225f10471c6720df21ea0f4a1c5320b821f00f5c1c1d206c210910ce1bb01f2721390f471c311fbd20ea08471c311fbd20ea083120c8224d248c903120c8224d248c907d25012a982beb1e2127312b942c442085260c2c9f2d51206227d82c662e89207b28192daa2e1421b1281b2d942e77216028cb2c162e60211f287c2cb02d53211028442c862d40210928292c722d57215928582ca32d7a216e28772c0b2e2921512a4f2c802d28234f2d362c6c2cd8257a30292b502d1228d929442a722db12149269d2a252d1e1ed425922a972c7d1d1926592a642c5a1d09262a2a472c1a1de525222a4d2ccb1cb925ff29452ca81c9525dd293e2c5d1c7925bc29372c1a1c6925a029272c6d1b43259329302c381bf424a6293f2ccc1aba24c7293b2c171b7c24b3291f2cb91a43245129a32b641a2a24ce28d92afa1924249a289c2a2719b0238a287f2a4b188f236f28582a76185b236f28452a571621237228402a0d171e238928482a9616042381283e2a7e16f1226c281a2a6c16de221f28b829cb160b224827fb285c16a120c52502287715e21fef241127a7144c1f84246e264f14fd1e0724c5252014831e6523562545130c1ee522f124c112cb1d7722992479127c1d22225d241f12261dc1210e24bf11b91c52211f2346115b1cdc206e2224111b1c98203922d910e51b5f20e3216810701b23209421d50f741bfa1f3e212a100d1bb21f40216d0fc71a521fe3203810c71a521fe3203810152176211b232992152176211b232992ce247629fd2a211f1825da2a562c1a202227222c512da01f7528422dbc2e1d1e6628682dfb2ee11e2f28f22c782e3420d427792cd72def209d27242c792d50207827062c512df220bf27092c482d0121f7270d2c4b2de42026281e2c3e2db22042289e2b2a2d8d203228e02abc2c3720cd28222ba82cac204f28ab2ad82cd61fd126e52aeb2cfb1db526782a5c2cac1d90260b2a162c571d6526c6292e2cff1cdc25a429de2b651c9d258029772b631c39254a294e2b151cdf242f29322b9d1bc5242229422bd91a1a252d29442b591a2c256029c52b1b1a1d25052a6c2c0a1ac324422a692c881a96248129bb2be11a1a24b828d72a6a1a27234628742a98196b2212283c2a9c1832230628dc29931717247a286e2a0116e823d928c02acd159b230329d82a941544230c29dc2acc15ba22da28b82a391602225328092af115a12187274029ee15752165266528bf15fd204625512792151f2067241c26dd14da1eb62350254314361eeb22bb24bb13c91d80226f243313a01d1d223f24a4126f1dd7210e246a12311d9921c0232012eb1c50216723ce11a31c13211d237911521cb4208322d310061c59200c227e10971b0420fc21fd0fa81b9d1fc221160f2b1b2a1fda218c0f171b2e1f6621a80d171b2e1f6621a80d8720a52094227a948720a52094227a9477257c289d29191c2f25ba28a62ab51d6d25162bcb2c7e1ee0281f2f99304720d728042f8430a41e2727512c872d0c1e0426922a282c9f1e26264e2a192c2e1ee9256f2a1c2ca31f1c268c2a362c3d20a926042ba52c9f20b527a52b242d1e20e427502ca62d1820be27332c8a2d0a1fde27ab2bf52c661dee27d32a912cef1c3427202a2d2cf01c3126c929082ca51cb4259c29e32bd21c6a255b29932b941c3d252c293c2b6e1c0325ff28fc2a141ccc24d828ce2ace1bb224c328b72aa41b7724a028812ab21a5d249528812afc1990240029562b631962254d2a672c531922261d2c812dda1ae724ae298d2b0a1b782215271d29da1820231f272229a918aa220627092971178b22092718297916f322b027a92937142124aa28e62abe101b24c529d42bdd130a241b2a0b2c6915b9239a29722ba716e122ae28432aae170522d62755291b1783215526682882164c1ff724b1278a14e01ed323cc2547144b1f6f2360258a14771e11234725a213051e8722dc241b13681d0e2254240a12eb1cbc2105247e11951c802198231e11471cfd20d8228110f31b492025222f10de1a0f20f6213b0f6f1bff1fd9215b0f531bcd1fb8213e0f381b951f7821ae0ef61a651f7f21e30e081a071f5921f70d081a071f5921f70d2e11881ebf20c8052e11881ebf20c805052433276128d21b02237127da28151c4b23d725b028a11a7b292c2e5a2e4b968029652e3d2f7a2072233f293c2b0d1d1d24ce289b2aec1ca624fe28a22adc1d1b251c29c72a1c1e51254b29112b311ee325b9297e2b7b1e4626b52ab72cb41e7428ec2c8d2ed01f07289f2c2b2e871dc125c02aa02c0d1de8246729462b3e1d3d252e29042b191d21250929fa2afe1c1325f328ca2a9d1c1125cb28972a721ce0249e28602a1f1cba248228372afe1b94246628152abe1b6f245328082a361b3f243528f629e81a2224fd27af29761a93237e2763297019ac23f127942987187822d5260129bf141f21a224442784139b2172253e28b017b221db25822845181121bd25632846171b21dc254e285a16ba212026a12834141d247027d129c6111c241e2a1a2c570fca256b2cbe2da612e525b62b1c2d531804226f28012a7c1791201e262628f9157320be248826411593200d24ad25661528204e231225a414c91e7922792494132b1e10222d24e312b71dc3210724bf12841d8121c4232812571d46218423f711191d02212723b211df1c9b20a2222111831c57203622c010421c3520f1217c10121c0420a0214910731b8d1f6d21d80f3f1b521f25212b0fa41af11e2b216a0fbd19c11e35214f0dbd19c11e35214f0d00002818a019000000002818a01900001b22fa258d27231a3123912736296b1cbd216225e426dd1a19192f1e8620c611c62159260328e81af8249428362af21d0a25b6287a2ade1d5325c5286d2a081e6725d128662ac61d8e25ea287b2ac31d9525e728932a9c1d6f25cd28422a1e1d5524ec277c29541b1024f627ac29d519d2249e286e2ad81b6525fd28e32a641c2325cb28b02a041ce2249b28842a531bea248428472a0e1bd0245b28122ae81ab3245d280d2ac01a98243d28e429981a7a241e28d0296d1a5c240328aa29fb195524c4277d29f119462473275c2997193a241f272c2942195b2327266b289418572036249a266615eb1e0f23e9254e145d20cf236f266e1575202e249f268b1538203524b026851561206724ce26bb15b2206d24eb260a17fa1f93243a27ba151c201d287d297510b02830307531fb9184263b2de52edc1aa21e09252a27c3140620bf230f26c715031f16230325d014031ea622b624de13401e44227524c713cd1de62134243813ba1db7211e24c312821d6f21d72380125e1d35218a23ff11f01ccf20012383118e1c822076221611051c2c2005227d10bf1b0520ba215310541bb31f792118102b1b7d1f4c210010021b441f2c21610f201b241f0621980ea31aa61e1121690f721a2c1e8420bb0c721a2c1e8420bb0c000092172f1b0000000092172f1b00007623e3259a274f1a40226b261328e01b6b20bd240126221aa91d75224424b115b724c6269f28f91b32245128ba29e31c7d247528dc293a1dd7248828ef29541dfe249428f829051d40259728082a461d0a25ab28312ae71cba247628f829991c10245827ca28641be72280269e286519c6241d289529291bd32411289b299e1ad22411288e299d1add240b2883290d1ac424ff278329ee19a724d5277d29cb198d24ce278129f4197a24b2277a29dc1954248f276729aa192a245c274d297219d9233427292963192e23d6260129281986227526c528af180322172679285118b421a9250f28d3177c212125732787170f21c02424279e16762085240227d61532205a24df26c21533204224c426c315552032247026641541200e2455267a148d1ff1223c2578134619a01cbf1d0d097617211b7c1d62026f1d12214f23b811dc1ee92129244514991ea22116241b14cb1d5721082435137b1d2521c12379127f1d142186237d12501dfc202e23ef11081dd020f0229e11a81caf20a42233115a1c89206622dc10031c4e200a227b10b11bea1f72214b107c1b6a1f0a21e10f631b211fea20c70f601bff1edb204c0f781bed1ec920ea0e651bc71ea1205f0e081b951e7f20820eaf1a321e16200d0caf1a321e16200d0c00008718471b000000008718471b00004422a8250927e619ff2020257926fa19dd1f31246825d4189e200a243625a4183b221f26d927dc1aba239c270829211c182403285329601c332414287029381c672436289529491cd0245e28b929af1c1d257828b929fa1c51241d28a329331c09230427ad28121bb722a3266b28521a29246c27f828091b7324be273a29f51a4f24db276329761a2e24d6277829451a1624b5276729201a042499274c29051af62371273529f819dc234d272029a4199d232427082977194e23f726ed287a191223d426d8284d19d7229a26aa282119962255267028ba183d22042633287a189a219525d527051813211c253b2749179520bb24c2269416422074248a261d16ee1f38245a26b215bc1f09242b264e15a01fd4231326fd147f1f9123f125aa148d1f43236425b214261ef1210e24a613261ac81ec720a60fce18461ec8215e0d051d532097235e0ffe1cba209623f70f541d1721cf2345116c1d1121cb23b511581de6208423a111371db320192329110e1d8d20ed2200110e1d6820af220011bf1c5120a022b110751c362070226810221c1b20482216109d1be01f0522880ff01a671faf21dd0e7e1afe1e5721020e4c1a9c1e2b21d40d581a761ef520df0d7a19201e2321c40db019fd1de220b70eb019fd1de220b70e000000000000000000008718471b00004422a8250927e619ff2020257926fa19dd1f31246825d4189e200a243625a4183b221f26d927dc1aba239c270829211c182403285329601c332414287029381c672436289529491cd0245e28b929af1c1d257828b929fa1c51241d28a329331c09230427ad28121bb722a3266b28521a29246c27f828091b7324be273a29f51a4f24db276329761a2e24d6277829451a1624b5276729201a042499274c29051af62371273529f819dc234d272029a4199d232427082977194e23f726ed287a191223d426d8284d19d7229a26aa282119962255267028ba183d22042633287a189a219525d527051813211c253b2749179520bb24c2269416422074248a261d16ee1f38245a26b215bc1f09242b264e15a01fd4231326fd147f1f9123f125aa148d1f43236425b214261ef1210e24a613261ac81ec720a60fce18461ec8215e0d051d532097235e0ffe1cba209623f70f541d1721cf2345116c1d1121cb23b511581de6208423a111371db320192329110e1d8d20ed2200110e1d6820af220011bf1c5120a022b110751c362070226810221c1b20482216109d1be01f0522880ff01a671faf21dd0e7e1afe1e5721020e4c1a9c1e2b21d40d581a761ef520df0d7a19201e2321c40db019fd1de220b70e00000000000000000000000000000000fa1c292411254581f428f12c522e5820322ac12bcc2c0a214f2c5c2b222d8a200f2e1a2c1d2d931e0430842c4b2da91e50312b2df62dc81a5132732ec92f429ff632de2fe430aaa40634ec307032eea65034bf31123321a40d3432315d32b9a2973419333f3465a4e333f22e4f308ca31c336d2c422e5a9e2f322a2c8a2d869ddb30572b172d339a242e222bbe2c729f4f2c192ebb2fad9ca42dda316b338f9fc92d3e33b534cc1c562cba31a933ac215128b22e0531181d7129722f373141206c2c603248341519fb2bd3327f341c921d261a2dac2ea116c821c628a02a7516a8201528a32ab016a0246829fe2bef1a2b2296279b2909183621e326d5286818f020cc2545280418412042257127a7163c201f253d275a16e71fdd24f526ac15ea1f8e249226ae15581f512425264515311f1e24d025ef14891eb7238825b114271e5c233b253814d91d2023ef240314791dd722ab242913401d78227f24de122e1d2a223a24c712161dde2102245412c91c8721ae23f411821c40217c235311441c182132230911201c0b21fe22de10e61be320cd22a910511ba72021221610c01a4f206921f80f771a29204e21390f6e1a16204e212f0f651a0e205921240f6b1aca1f1b212b0f8f191e1fcd20800d991a021f4e20af0d0000000000000000fa1c292411254581fa1c292411254581f428f12c522e5820322ac12bcc2c0a214f2c5c2b222d8a200f2e1a2c1d2d931e0430842c4b2da91e50312b2df62dc81a5132732ec92f429ff632de2fe430aaa40634ec307032eea65034bf31123321a40d3432315d32b9a2973419333f3465a4e333f22e4f308ca31c336d2c422e5a9e2f322a2c8a2d869ddb30572b172d339a242e222bbe2c729f4f2c192ebb2fad9ca42dda316b338f9fc92d3e33b534cc1c562cba31a933ac215128b22e0531181d7129722f373141206c2c603248341519fb2bd3327f341c921d261a2dac2ea116c821c628a02a7516a8201528a32ab016a0246829fe2bef1a2b2296279b2909183621e326d5286818f020cc2545280418412042257127a7163c201f253d275a16e71fdd24f526ac15ea1f8e249226ae15581f512425264515311f1e24d025ef14891eb7238825b114271e5c233b253814d91d2023ef240314791dd722ab242913401d78227f24de122e1d2a223a24c712161dde2102245412c91c8721ae23f411821c40217c235311441c182132230911201c0b21fe22de10e61be320cd22a910511ba72021221610c01a4f206921f80f771a29204e21390f6e1a16204e212f0f651a0e205921240f6b1aca1f1b212b0f8f191e1fcd20800d991a021f4e20af0d991a021f4e20af0d3714a621a02183893714a621a021838936286a2c942ded1f8329d92c002e8a21c82bb52cbb2d331f732e372d4a2e968e9f30b62dd12e4e9d8b317d2eff2f5d9e4b32ea2e2c30a09d0033b92fdb30cfa15e3368306a310ea3cd33b030ae3178a34d34aa30d131dca63e34ba30ee314fa7fb3317302e315da6ba33672e0b30a8a65733462d982e43a7ae31292d922e9ea53a2fba2d7d2fc4a1172d0b2fb630a8a2292c28308f3171a17b2a5930f1316019352a3630ca31f41c652906309831e7200a292c30233208225f2986302532b61f0d2960300a32ad1cb028152f89313014ce27482dbd2ffa0d9425232cc82e0d16a324f62bb92da0157b24832ad82c6f156e21d3288a2bb715a4211c280c2aa9167421362797297b1706229c26bf28e1178521ba250e28841679202625692723169d1fea241a273915f51e92249b26c6146f1e51242c269e14871e1124bb257a149a1ea42337255114a21e4423bf242114831ed62279240d14441e64223b246613c81d0b220824d312431dd121be233612a91c7f21602380117d1c4d2107234c11411c1921ba220611ef1be5207b22af10881b9b2032227210841a4d20cb21b20f5a1a0d209121180f311adc1f5a21850e281ab51f1621160e6a1a8d1fd120f00dc3192e1fb620550dc419d51e4920120ec419d51e4920120ec91c45235d231c86c91c45235d231c868228e82be52ce61d8a2a172d222e771e642b4a2d7e2e21206f2d762d7c2e331d602fdf2d3b2fa51562314c2ead2f8f9f2432052f60300e9f0333342f70309ba39633b62fb63091a5fa33d12fd4305ca621340b30f33096a61734af2fe83001a6f333612fb23054a5a933b22e44309ea53133222e2f30bda58831192e06300fa4662f352e15306ea1902c672e4d30889d9b2a912e7e30e795e229da2ea630a219a829f92edf303c1d6e29ed2ef330691e6829f72e0331b21dd828e72e1c31061e3828c32ef330851dd8274c2e8230a11c1f27b22d0030801bf425ea2cee2ee319f224332c4a2e94187524672b632d1c17c223ed29832c2d174f23cb28f62ab217c022fb27b7298a17e42107270f29f41620215c2686286116bb20e6253428e315592092250328af1536203f25752782159d1fc724d126fb14351f64242e26b714b11e2424be256014251ede2351250514d21d702309259d13b11dfc22b7247213871d8f227824e112741d33222e2470125b1de32105245212fd1c8b217423e311921c582109231a11401c2121a5220511d21bdd205a225e104a1ba6200e22ad0f711b6720c321d60f861b1d206221710f811bf81f2221f10e541bb41fd520c80e861a3a1fc620740e551b731fae20c90e551b731fae20c90edd0e4d1c261da481dd0e4d1c261da4813f294e2c3d2df0206d29f02c222e3023bb2a5e2d882e6823222c4c2d472eef21422e102e762ffe206230a12e0430081da431fc2e2730c391bb322e2f4f30bb9f7333782fa13021a3bf33772f9e3034a40b34a12faa30bda317345f2fa530d5a304340c2f9630b0a30934102fa93060a46233c92e8c3001a456314d2e4e301ba1082f352e1130bb9ea82c3f2e27305a99bd2a402e5a30bd17582a5b2e4e30ab15a029352e6630211c2f29122e6d30c91d1729312e8a30af1d8228232e7230bf1c2c28e82d4c30641c6828b12d3430141ce627272de92f4d1a8f26882ca82ea61988250e2cfd2d1e19f424462b992d371921241e2ac92c9d18a6233829c62b841809239f28912a60187a22072895290818f3210327d92867174e21522671289916a820ef253128171653208025d227a915e01f1f253f272715541fc424b426cb14d11e6b243b267514941e2d24cd254d14451ee4236125cd131c1e90230f259a13c41d2123cf242c13651db12288245f12311d562251242012c81cf4211624a511681c9f21cc2333112e1c51215223aa10b41b0421d2224d10081bb1204722da0fbd1a7320b921870fbe1a3e205321190f9a1a1b202c21870e701aeb1fe7205d0efc19701fcd20eb0d711a661fea20c80e711a661fea20c80e63141d1e5d1da48363141d1e5d1da483d428312c3a2d3d221d29f32cec2dea23fd29532d732e8c23e72b892d902e2d22002dfc2d2e2f44213d2f8c2ee62fee1e2331a92e0730de17cf32cc2e6030159ef733572f8f309ca23b343f2f8c3097a45c34532fa73049a56734192fa43056a53634ff2e77301ba50e34a92e573066a43733742e4a30fca12d31412e2c30a09c672e022e08301698e82bf62d1e300e12ee29ee2d30302a18ad29ff2d2e302a1c1629f12d4330081daa28b72d4d30811d8c289e2d5d30a91d3b287a2d6430fe1ce027622d2330651ccd27172d8d2f1b1c8227cc2c172f6d1b22263e2cd52e751a3725c52bf62d7e19ea24e42a0d2d7d198224562a8c2c081957249829322cd9180424c2285f2bbe188b222928122a1218e621bd276729b71777210e27042927171f214d268a28b316e6209b25d1271916852028251e27a0155020db24b6265e15fb1f91245626f714341f5224ff257c14841e0e24aa250e14131eb3234c258f13b01d2e23f82413137b1dc722a0247912451d61224a24e211e21cef21ea2374118c1c85215e23ca10301c3621f7226910e71bf12098222910731bb8205222d80f041b86200622620fa11a6120ca218e0e931a4e209621800ebb1a36206721cd0d4a1a14205321380e8e1ae71ffa20a50d8e1ae71ffa20a50def13821d1f1d4e84ef13821d1f1d4e845229622c5e2d33229829122d0e2e9523512a472d352e5b238b2bc52d932e61229e2c042e182f7421902e392e562f6520a530f62ef92f261c37320d2f3630c2987a33112f603040a10b34ef2e4530b6a24434f42e743015a46634f22e7030c6a46f34b92e773060a57734af2e8b3069a503346b2e4c30aea351314e2e5530779f162e122e3d30a994442b042e33307d16392a832d043029197a29552d7d2ff1197e29452da72f5c1b4f29372dc12f3c1ccb28322dad2fbe1c2b28052de82fec1c1d27c62c762fe11c8d267e2cce2e7e1c0126342c902e1e1c5225f02b332e4d1b0725672b8a2de61aad24c62afc2c1e1a4224fc297f2c9219dd232729002c241939239d28612bb918c1226228c42a6b18a822d827dc295b182c2203272429091880217026d328321715210c268628a616ad20a42525281e16242043255d276b15ab1ff024e22604153e1fb3249826f714ce1e77242f267414621e3224d5252d14f91dd4237225d013cd1d65230b2538139b1d0823ad249e12621da32260245b120f1d40221d24a611d51cf721b9236511701ca6214423ac10f51b3b21ba223010851bdd204a22700f741b9620e921e50e3c1b6220a6213c0e6a1b4c206421ea0d161b13206d211b0eed1af91f2e211610ed1af91f2e211610781cd11d651c6c83781cd11d651c6c830d250d282d28901d4029912ca82d7523972a172d5a2e5d24472a912d812ee923712bf52d3a2f3724312d8a2ead2f7523152f1c2f25308e222631c72e59303a1fcc32cd2e3530f012d333ec2e2330fd992d34d22e7530549d55349d2e6830faa07434882e79301ea18134c02e7f302ca1f833602e9730169dc630242e30304f17d72caa2d9f2fcb1ae0298f2da62f201bf1286f2d5e2fe21b1229642d802fb11c34294b2dc92f261dd4280e2dbd2f161d8028f12caa2f511d0c28be2c482fc71c15287b2cc62e8f1cf227282c6f2e701c75268d2bd12da01b5f254f2b7a2daf1a2225122b6c2d631ad224932afe2c4f1a9024d029562cf8193a241a298a2b4219f123b928ee2af018d8239d28bf2a2119e6225b28582a8318ef2180274229c317c521e526bc288c1734216f267c282317d320da25432850168b206d250928f11525201c25a427af15cb1fca24f6265815151f67245326a1147e1e2024da253f14061ed7237425e113c71d7a2319253113851d1523ca248412521dbf2285244812ff1c6a224324e611d01c1922082460119c1cbb2199232611361c47210423b310791bd7206e22de0fda1a8a202222c70eec1a6a20fe21d90e9b1a482000221d0e5a1a2320d721790d7f1ac81f0321030e7f1ac81f0321030e111cfd199e191d83111cfd199e191d834324a826ff268e1c9b28c72cd02db7239529062d462e0d24d02a3d2d4e2e83245e2ab92d2d2f3724c62af72d4b2f45247a2c402eee2f5b24b02f872ef42f9f22c831ed2e37302a1dc133a52e2e30f0994d34be2e3530969a8534c22e5430c59dab34b72e6530f69d9a345e2e43300d9b7533c72dc32f9d1355307d2d5e2fbe1b892c762dc82f871ba42ac92d0130071c93298e2d642fcd1c8729072d4b2fd11dc728022d202fa41d5e28c62cd92e6f1d21288a2cab2e231dc027692caa2e111da4263c2ccb2e581c5626152c932e251c4926c02be32d1d1c8b25022b4a2d411b5425bc2af72ca11a81255e2aa32cda1a2b25e429422c6e1a8f247c29e62bac1923243829872b6919b023d128ec2a0719df2244281e2a7e184c22b92794291e18e62142275b29b7176f21b12604297517e7200c269228ba166620a4250828c2151620442537275815b51fee24cb260a15231fa22467267114dc1e632402264514541e2024a625e013171ecb234e253113ec1d75230625fe129b1d0223aa2442124e1daf226224ec11f31c33221a2487118b1cb321a023c9103d1c2d21f22276101c1cdd2081221110131caf203a228a0fdf1b7220cc21c80e601b35205e21e20da01ad81f2f21b50d221a691fdb20da0e221a691fdb20da0e0d1c4e1c271d08810d1c4e1c271d08816c2404271c274e1c4728662c6c2d4d236929202d532e4624e129722dba2ea524e2298b2d422f8d24052cdb2df32ed024a12b652ef12ff022382e652eda2fbf1ed7302d2f1130cb1e1833662eca2f3e9333346a2ec42f5c9da234772efb2f23a0ae349b2e40302ea08a34772e2b30cb9d1633c92dc52f3c130330602d102f9c1c922b4b2d052f1b1ccb29732d972ffe1c5729502d292f491dbd28162de92efd1c6b28b92ceb2e381d1c28902cd02e1d1db927642c922e8f1c56272b2c422e191cee26052c152ebd1bb426da2bc32d7c1bbb26892b9a2d301c5125222bab2df51ae024a72a212db01a0e254a2aba2cef1abf24b729332c831a3a2421299e2b88197823d728152be3185c238b288c2ad118eb2231284b2a861851229a27fb29dd17eb21232769295d17b021b726c4281317532160267228a0161321f7252d2850169f209325ba27c0154120322540274b15f31fdd24d526f214831f94246526ad14ce1e50240e2604147d1e0a24a925a913051e83233d25b912b11d0623dd245b12761d86229424c0111c1df8213a246111031d9221c823f510861c302135237910481cfb20fd22ec0f3f1cc4207c22500f221cac20fe211f0ffe1b7b20a521600e201b3e20a621240ed61aec1f4021330fd61aec1f4021330fc81c191ccd1c3801c81c191ccd1c38013924eb263927a61cd628b82cda2d54233f2a332d732e6f241a2a522d872e3c24a029692dbf2e2c241b2a202ebd2f5624b92a542eb82f9d23d92b412ea42f2322aa2ee62e9d2f512107316e2ee02fc61d57336f2ed62f9e197234692eed2fce9aaa345a2e2330c3947d34612e3f309594f0325b2d5e2f6d1ca82e0a2dd82e861de32b252dd32ec81c662a8b2d5e2f831dc029312dca2eaf1d1f29c82c822e651dbb28942c6d2e491d9c286c2c592e261d1c28402c462eda1c4127092c3b2ebf1c8826c42bd92d461c4a266b2bb42d1d1c29261e2b832d081c9325832ac72ca61b22250e2a972c0a1bc224c929732c871a7a24b329622c241a47245d29da2bde197a23e228472b21197323b928182be018b5237e28a12a0a1933231f28e4297a186822bf278229f917f32144273d2967178921d226f628e31627214926912869169920b0250a28b815182030253c27d5147b1fd724c5266b14041f88244d262414ba1e4d24f725f113461ef22383250113ae1d6f2335255812591dfa22ec24a2111e1d9122aa246411141d372264240611fd1ce4213824ef10c11c9f21d123b310491c3d2101233d10d91bd8208522430f261b8c2033229d0e3f1b6220be213e0ea31a17205221240e7b1a921f3821d30e7b1a921f3821d30e61207622cb223a1c61207622cb223a1c8224ea27ef27651dce28642c752dd2221829132d612e0624c1294f2d932efc23572a6d2dcf2e3324a32ac32d472f2f242c2bef2da22f4a24302afa2d642f9a23772b832e1730fb23d32ede2e6f309e23de31ac2e62301e2001344c2eed2f16147e344f2e2530961455346a2e0230a21a1a32102df62e021f282dbc2c552e981d7429ec2cd02eb21c2929472d3c2fc31dea29d22cf62e5c1fc928af2c662e421e6328712c372e041ec727402cfd2d561d8127142cc42d261d8827ae2ba12ded1c6227462b822d981c7726f02a4e2d051ce625c32af62c571bc025652ab02cca1a9d25082a8b2ca01acb25c9294c2cd61af924a829332cdf1933244f291d2c3a19ad23ec285d2bc71866237d28852a9b1823232a28f5293718e922d627a42914189a228b277829cc174522312724296717e921eb26db28fb16852187268e288416f0201b263b28d5156520a225c1273015be1f30252527d114361fc9249a264214e21e722424261014ac1e3124b925e013441ed6235f256613ed1d4723f8249e129f1dcf229f244712e71c3622462429115e1c9d218f239910b71be42085221010381b74200b22240f801b5c20f2216c0f8d1b7d201122780fa11b7a2015220f0f731a1220bf21610ef71b8f1ff620e10ff71b8f1ff620e10f4921d7229523ae1c4921d7229523ae1c4e252c285528fe1cc028832cc42d4a223629392d882e33246029412db42e28249e295b2dc92e86249f29902ded2e70249d29912dfd2ef9237f2bdb2d1f2fc623ee29d32d802f26222a2cd82dad2f8322b22f862ea42fa1222132d72dcc2f0a1fe033e62dd72f091fdf33402e0430081f6131692dd32e8d1ffb2c0f2da82ead1e15290a2de22ead1d12292b2dc02ea21e1029b62c812ef11e7f28712c3d2e2b1e2b284c2c212eb71d0328272cf42d811d3527f42bc42df21cb3268c2b8a2d981c7a265f2b812d711c95260b2bfe2c4e1c6c269c2ab42cfd1b02264b2a7e2c7a1b3d250a2a6a2c851af924d4294b2c301ad024a3292e2cfd1996245029cc2bb5195b24ec281a2b2419ea23bd28be2aac185e237128542a591814231728e529e817c922ba277a29941738221a27fc28f116a921b226b02852166d21572672280f16ea2008262e287d15a420b225d9272f152b2038253827a714f71fcd24a1267214811f72242c263014f01e0f24b125bf13b31e9d2359250e135b1e23230025b112f41dbb22b424e311d61d68227524c6118e1dde211d242311fa1c642183234910ce1c152100232310701cd720ac22a50f2b1cb82081222f0ff31b82203322570efc1a5220df21760e231b01205821830f231b01205821830ffa1f6f22bb22101bfa1f6f22bb22101bfc24242842282b1d9b28792cd72d8a22b228032d6f2e91230e294e2db42ed2236229662dd92e40249429952df62e51247b29982d062fc823352afb2d362fd2234d2a0d2eb82f56234d2aa82d912f8822842c032e822f7c223330712d042f0520c9316a2d482f2b1d5c32212d0a2f4e1f922f162deb2d1b20fb2a132df62e031eea28f82cda2ecd1d5d28f82c632eb51d6128cc2c4c2ebb1daa287c2c122e1a1e6428292cc62d771d3b28112c9c2dce1df3268a2b7b2dfd1c31263b2b632da51c0526ec2a472d521cda25cd2a252d331cac25892ae82cc81b7125442a962c771b3925012a682cd51a0925bc29422c431af22485290a2c271a5f240e292c2b7019c323ac28ac2ad41895239328ab2ab81871237328802a6418232336282b2a3718af22ee27b7297717452281274a2900170f222d270929c416ca21de26bf28d516432172266f28e015e3200c261c28c5155a2082258c272315bd1ff124ca269214231f742425263714d21e2824ad250714a71ece2359256e135e1e402301251c13e81db822c02438127a1d3e228924c411e91cc6216b242b11831c73214024c010291c2d213c241d10141cf920b3238c0fe21bcb20a722ca0ec31b8220e121310eb41a29209821340e061bfa1f4321d80f061bfa1f4321d80fbd20b3230524451cbd20b3230524451c98238a277c276c1c2a286f2c9f2d72229528f52c3b2e6223cc28092d7f2e1e2338293a2dbb2e69239229702d082fbb23a6297a2df52e7a23cb29a22de52e4d23f129ec2d6d2fbb22942b982dac2f9d23d829c52d802f5121072cd22d222fc821502e5a2ded2e7021842f0b2d4f2e8e20b22dde2cd92d8b20b82ad42ca12e811fd7285f2c622e421f6928792cba2d761f0d283f2c9f2d971eb527f22b4b2d061ea127c62b4a2db81d4b27882b442d3c1df626442b242dff1c8526f62af72cae1c4726b42ad82c4e1c1926912ac12c2f1cb625632aa62cd61b6e25362a8d2c731b2025f3296f2cb41ab9249d29272c2e1a7f245129c52b9819402401295a2b05191c24c328012b9718f0239428a42a6f1886236628482a331842234828112a0d180a232028d4296917d122ef2796292d17572280274f29ad16c8210227f6287516282173268c28c215c520f3252f2806155f207525a7279b1416200a25fa264d14931fa5245826fa13031f4324dc2562136d1ee0238325c412f91d4d2326254a12841dc222cd24cf11141d33226d245811a11cbe210a24e0105c1c5c2141239710131c0721be224a10e41bc5205b22ce0f071c88201422f80f651c4f20ba215810b81c1b207d21530e901c6f1f00211d0e901c6f1f00211d0e0000561a621c00000000561a621c00002727602bb12cda205f28392c752dc9213c28d12c002ef5226f28082d7b2e2423d928422db82e80233929782dea2ebf238c298b2ddd2ee0233029882de32e33237d285f2dd82ecd217e293a2d152f3822032a132dda2ea9216b2a452d952e9c20a82c7f2d882e33211a2c1b2dd42d9520e529d02cdc2d561f8228d42c672e791ec2286c2c172ebe1fcc27272c632d971e8c270c2c752d621eb627de2b5a2d461e4527ad2b422dae1d13276c2b262d4e1dc626172bf32c151d8e26cf2ad42c7f1c3126892ab02c0d1cd425382a832c411b8a250c2a5b2ce41a4425da29512c371a5c25e0292b2c531af324a6291d2cd819f9248829e42bdf1975244729b32bfb1831241329382bae18be23cb28c02a531853239d287f2a1718f82270283c2ac817b1224228f629791757220828ab291517052292275529b916d4211627f92823168e219c269528d9151921092634285e157b206e2591270115ef1ff324e3266e145b1f9b2471261b14e21e4d24f625af13b01e042498257813681e6b233425bf12fe1dcf22c0244f12b01d60225924a011381de02111242911c71c72215723b910761c0e21a3226910461cc7204822e90f271c97202022af0f2e1c7220dd21330fb01b4720c2219f0e581bd41f6d21440f581bd41f6d21440f00009320ea20000000009320ea2000008b26462b852c8b204c28692c8b2d6b2138297c2ce72de921f228122d492eb422cb282c2d8b2ea722c3283a2db82ec322eb28442dcb2efc221e29542dd22ec72201293f2dd92e4f227229302d4b2e2b225529002d612e5c21272a9b2ced2d66212d2a352d612ea120572b442db52d0921142aa52c8f2df31fa727422cdb2d011d3a29582c4b2e2b1faf28bc2b262d6d1e1428a52b242dda1d0c28592b0c2d121e8c27412bfd2ca91de326ff2ae02c2a1d5326b22aad2cbe1c2826842a942c391cf625572a7d2ccd1be725352a692c581b9925022a452c9c1a5225cf29312c481a0a25ae29212cf319b8247c290f2c921969245929e22b7d1943242529942b08190324f9281a2bbc18a023be28ab2a42184c2396286f2a131801237128372a6017a1224628fc29fb1650221428be29a6160122c1277f295216cf2167273b291e166921e726f328b215d0204226912811153e20a0250e28bc14c01f162525275414141f98245f26e813c31e2424a1251f13411e6f231e259612d41dd322c62423128d1d6c228c24d8111d1df6214b246311891c7921f023c710241c06211d235c10ac1bb32074220a107b1b78200f22660f3b1b5520cd21270f5e1b39207f21d10eee1a15208821db0e201bff1f5821240e201bff1f5821240e0000bc1e771f00000000bc1e771f00002526b12a342cbe1fee27fd2b8e2dde202d28a32cfd2daa210e28e32c5f2e802165281c2d8c2ef6216d281d2d932e252278280f2d7e2e58227928022d6e2e5a229028fc2c612e7b226c28042d4e2e232234280b2d502e9121cf28e32c9f2e9a21ef29ec2c312e3421512b832c472db8213d2a532c7d2d14210a29622cf12d1a20be274f2cd62d8c1e2827932bf22c471ecb263f2b092d871ddd26f02ad32c5d1d8626c22aa42ce41c1f26842a8f2c971cdb25542a702c341ca1252a2a5e2c0b1c78250b2a592cda1b5e25f829532c5d1b2925e329482cc01a0425d029412c3e1aeb24bd292b2cce19ab249329102c82196f245c29d12b3c1926241429662be518b323d428082b4d185f23b528c52ac31734239e28802a2017ed228628522ada16c3226c28262ab0168e224828f2297c1644221828ae299916dc219e274c292c163621fb26d928d11595205526752868155b20af25f427dd141f20f82408279b14cf1f932494261d146b1f3e2414265613ef1eb4239525dc12431e142324253112b71d7b22a524a8113b1de0212b242c11b91c54216623ac10351ce520902229100f1c94203022830f291c7820f1212b0f2e1c5720c921330f371c1c207621430ff51bbb1f2d215d0f211c431fd2207a0c211c431fd2207a0c0000c21dd41e00000000c21dd41e00005c266a2a1c2c981e2328db2b0d2d07209527452c7e2d8a201028f92c902e9920cb28612d022f46212629732d112f8121cc28282d992ebd217428e32c392e9c214628c02c222ea9213828af2c1b2eb8214c28be2c3c2e8e214728ef2c772efb207f287f2ce72d182189281e2c5e2dfe20d72a432c7f2d70221228d52bb92dec1ff326b72b6b2d8b1eb126e52aa62c151e6b26582a742c6d1d2326412a672ccc1ce9252d2a552c6f1ccc25032a432c2a1cb025dd29342c151c8125b429222c331b5d259729212c041b4b2596291e2c961a0925a129232c961aed24cc29252cc21add24e929322cad1aa324aa290c2c111a542400291e2b63192a24ae28b12aa618c9239828802ab31792237c28612af917792370283d2af61554237d28352a501631238a283c2abd152e238c283a2aba15ea226e281b2a8315d8223428c9297615262269271029b115ca2007262f28bc14012017253c27eb139a1f8624712600141d1f1324c3250913aa1e70235d259712381ef322fc242612e51d7b22a224d511921d2a2263248211231dc02111241511c61c62213023b9105d1cf120882298100b1c9b2038224210b01b5920dd219b0f4b1b1d209521360f491bee1f3b21340fd11a931f35214f0e8d1a481fdb200f0e8d1a481fdb200f0e0000141d6e1e00000000141d6e1e0000b624b029162bd61e85251a2bad2c7c1f4328752cc52d4d1d8728772dfb2e361e5228862dfa2e34202428fc2c742ed220d927922cec2d52219d27552cb12d29219627362c8d2d442105283a2c892d32211d283c2c832dca2024283a2c7a2d6d201228212c912d18200f28902b3d2d611f4128022c252d321fc727252bea2c541e5427282be22cbb1de626cb2a962c2c1d61263c2a332c941c4726d129ea2b4e1cf325a529b32b151c8b2584297a2bf51b16254c29322b4d1bc9241e29022bde1aa82404290d2b171af22409291b2b861944253829992b8b19e524c829522cd8180325682a932c99192c25f629252c701a4c240c293a2be6190a235628672ad41836231d28e429b8182f230028bd290318fa2359282d2ada15ee23cf28a22acf1479230129d22a7b1517231329da2ac014c222ea28c82a64151b227328412ade14a121bb276729da14a5217a266f28dd144e216625452792148520782409267814391fcb2357259b13561ef222d024ab12001e892282245112ba1d332249240812931dec211424df11551db021db234611101d6d217d230111b01c20211823ef10581cb22066224c10f31b4c20ed21dd0f631bf01fd821d50e141cc71f8d21770d871b3d1fe32134100b1b181f7b21120e0b1b181f7b21120e000dbc1a761d0a81000dbc1a761d0a81cc252329502a751df2248a29fd2ab41ebe26182c322d591e9d29d02ff830451ec2286a2e1f30391e7826142c562d891ffa25982a532c571f0a26742a3d2ca61e2226a62a512c10207126032b9e2c78204227a82b1f2dcf205d28162c812d611f53288a2ce52d961f1228452c892d1b1e9c27862be82cfb1c85279b2a5c2ceb1ce9260e2a1a2cf61c1f26cf290a2c971ca4259b29d92b691c7f2567298a2b4c1c502534293f2bf81b1f250729022bae1bec24e028c12a611bb924bd28a62a151b7c249828752a711a7e249028652ae01951248028e12a5f1943243729332bc218f125ec2b682de0199525b42b012d971a852284275329b3175a23072729291b18b9220a270c2915178e220d271529e716be228c2768296015d52374285b2a7f10f223a129a72b97122e242e2a152c8914ab23ad297f2ba115b422c928642ac615ee21e7275129de15ae217a2669289e157b2053250328b814a01f372424260414351f432354259613a01ef5223325f912091e7a22d824f8115a1d0a2262244b11f31cb4211924e510971c6921ae238a10531ceb20f0220010061c67204b22720f6d1b2a200822df0e821b1020e421770e4a1be21fb721d00da91bc71f63219e0d361b721f8321ad0e761a131f4521fa0d761a131f4521fa0d0000201d2d1e00000000201d2d1e00006c240828dd28931d5d249c2705291b1cb2245728732a241a672ca83245347f0ca828bb2cd32d92212525a029882b521e95240e29f12ae61c22253829e82a241e35252329f22ae61dad255929212bb41d4026df29bd2b151ee7269c2b532d7f1e9128a72d6e2f6e1fb527232c922dc71d6025b8290e2c0f1d17255229552b1e1d22253429132bd41c43252629132b9e1c26250929d92a301c2b25de28a62a0a1cf824ae28672a731bbf248828342a1e1b8e246d280e2ad41a65245b28fc29971a3b244328f529581a25241b28d129af191324f127722954193424ec275329b11812245a272c29ef14201d9e212925e309b620d3247e27f6149121cf256f284917f120b825562876167e21dd2579287c1613223b2684285d139e226b275f2956126a23a529832b34116825422cbc2d36124f25102c9f2dc315c7221129972ad715eb20a9266b282d158d20eb24cf268014b0202d24d125a3143120542328252514d21e8a22ae24bf12331e152243242212af1dc721fd23a011791d7721bf236911591d40217d23f3103a1d05212e23d610f71cbb20c4229810981c65203a228b10321c3220d521c40fe31bf81f7d214c0f4f1b8c1f4521c30e351b481f0721360eb21aea1e0621c50d091aac1ee520330d091aac1ee520330d0000d51a2e1c00000000d51a2e1c00003123b7262128c41add23e4274229741cbe2100256326231acb191d1f2b2161128623fd271729621cf024e628972ae81d0025db28aa2ad21d3825ee28af2ae91d4125f6289e2ac81d5b250729b52aba1d6c250f29bf2acc1d0125b628292ab61c6a232427df28091abe247228e4296a1b2a25c3287a2abe1b1b25c528812aa71b1325b4287d2a491b1c25a528742aaf1a10258d284e2a4d1ae6246c282e2ac819cc245c28172aaa19ac243a28e829d01986242228d529a1195f240628ae2970195424d7278d29631958249f276c2921194924662752290f19f323f5260629b118c8218f252528d316aa1f0224402686143920bd233626b714442021247026c31445203624b026c41462206c24ca26e51488208124ec2637165220b4244027ee15d71fa52655284112e027f32e8d3005080428ce2e8730611932200526c227f414f51fd323d825f414481f2a2315258714f51da422b6240813281e53227e244413a71df5213e245012831dc32122242712541d7621db239c11431d3b2194238a11e31ccf201523d510841c7d2081227810161c2520ff210b10f21bfe1fb621db0f791b9e1f6e21640f6f1b681f4621e10e1c1b301f2921940e321b111ff320330ed11ab41efe204f0e461a2b1e8920670d461a2b1e8920670d000007193f1c0000000007193f1c00009b222c26f0276d1afb2189262d28bb1b1020a924f425a319511e58230525c317a2243827dd28371c2d247028d229761c8f249728022a051dcb24b328202a201dec24ba28302af31c3925c5284b2a151dfd24d228982ab21cd4247428fd29641c55234d27c0286e1a3824bb277d29981abc243928db29cc1ad0242c28b3294b1ad4242528a329b319d3241c2890296319bf2413288b299a19a92401288a2934198d24002890295f197124da2782293e194b24b527712911191b2477275829d918b2233c273029ca183223ee260529b518b4229726c7282c184c2227268028d617f921bb2514280d17b42136257327bb164621d4241a27e31598209324e4266d1534205a24b8263b152920402479262d152b202d243d26a7142520172421265d1429207a2382252b13fa1ae31eae20c9099a109819dd1cbc00ee1c8b2063223f106a1fb8212124ce13871e9b210e244a13ab1d592105245412731d3721d623bd11711d12219d2361114e1dfe2034234011091dca20d922fb10a51c9720862298105f1c69202e225310181c3c20e9210d10e31b04209121cd0f841b931f59216f0f481b5a1f4b21bc0e271b4b1f5c21290e1e1b231f3521220e511bf31ee120d60df41ab41e8d20fd0d961a481e1220d50c961a481e1220d50c00006018751b000000006018751b0000eb23cf250f27d216f3206425b826c4194e1f4324c7257d18ba206824e225e618ba2281264428311bd823b9272c29e21bf72315286c29011c3d2435289229201c8e246528cb29491ce8248928f4299e1cc9247e28e129811c0e2410287029e41bd6223f27ce28a71a5a234d27db28731a5424c2273e29c41a8c24f22773293d1a6c24fc278d29c8194624f1278e2997192424cd277529ae191224b527582953190e24962744294e1905246b2729290019dd234f271129e41890232427fa28f3184023fc26e928be180723c126c3289818c42281268e28351863222d264a28f217c821b425ef2732173621322544277c16b420cc24c6262716572086248626ad150720462454264515db1f1b242926e314c11feb230a269414bf1fad23fc255314991f5f239c253e14c51e702290249013731a1d1fdb20340fef180b1edb20320dea1c40200e23f60d8c1db7207a23ba0e6d1d2121d423ad104d1d1521c323e7104f1dea209323ea10361dc52034237d100c1d9c2000235910051d7420b9225310d31c5b20a22228108f1c3f206d22460f4e1c2d205a226a0f071c01201c22f00e511b831fbc21d60daf1a051f6221550d561aa01e3121760d3d1a6e1eff20fa0c8f191a1e28216f0cda19f81dc120aa0cda19f81dc120aa0c000000000000000000006018751b0000eb23cf250f27d216f3206425b826c4194e1f4324c7257d18ba206824e225e618ba2281264428311bd823b9272c29e21bf72315286c29011c3d2435289229201c8e246528cb29491ce8248928f4299e1cc9247e28e129811c0e2410287029e41bd6223f27ce28a71a5a234d27db28731a5424c2273e29c41a8c24f22773293d1a6c24fc278d29c8194624f1278e2997192424cd277529ae191224b527582953190e24962744294e1905246b2729290019dd234f271129e41890232427fa28f3184023fc26e928be180723c126c3289818c42281268e28351863222d264a28f217c821b425ef2732173621322544277c16b420cc24c6262716572086248626ad150720462454264515db1f1b242926e314c11feb230a269414bf1fad23fc255314991f5f239c253e14c51e702290249013731a1d1fdb20340fef180b1edb20320dea1c40200e23f60d8c1db7207a23ba0e6d1d2121d423ad104d1d1521c323e7104f1dea209323ea10361dc52034237d100c1d9c2000235910051d7420b9225310d31c5b20a22228108f1c3f206d22460f4e1c2d205a226a0f071c01201c22f00e511b831fbc21d60daf1a051f6221550d561aa01e3121760d3d1a6e1eff20fa0c8f191a1e28216f0cda19f81dc120aa0c0000000000000000000000000000000045120f239324270c73271b2c162d68214f29422c3e2ddc22982b422c5b2d6c22f32c832c4a2de61f2f2e832c702d211de92fc42cca2d0e16d4304a2d772eee908531eb2d3a2f94a06232222f4530afa47533f830e931f3a52d3489338d34eea28034b834a13551a26c32ef2e653054a167310c2ca02d959f5a30d22be32c8e990a2e5c2bc62c2b0e0e2c612b7a2c3e17db28072b8a2cbf1b8428d82c1e2e0d1a9729f52f2c315a99a32cf6326d34bb8c8e2d9634d335cd1b4b2dac34e835111d572c9033e1348a95a8287d2f5231cc1deb23b72bb22d331b8423802a932cea178b23df28402b76173122142a722cb417e022da275f293d177a20512696282416cd20e0252528e51656205d259f27f3158e203225432740163720e824ea2683151520972488261515811f57242126ac14221f2224c52570149d1eca2385251d144a1e6f233925d313081e3923f3241f13a91deb22b124af126f1d8c22852412124e1d38224a24ec11331df32112247911db1ca021c9231d119a1c62219123d9103f1c39214a237910271c372115231b10ba1b0421ec2211106b1bc7204922560fe61a63209721d30e8b1a36208121790ea21a212084218f0e6f1a0e207521f40d751ac91f2d21fa0d6219fb1ec620e70b821ae61e45209b0d000000000000000045120f239324270c45120f239324270c73271b2c162d68214f29422c3e2ddc22982b422c5b2d6c22f32c832c4a2de61f2f2e832c702d211de92fc42cca2d0e16d4304a2d772eee908531eb2d3a2f94a06232222f4530afa47533f830e931f3a52d3489338d34eea28034b834a13551a26c32ef2e653054a167310c2ca02d959f5a30d22be32c8e990a2e5c2bc62c2b0e0e2c612b7a2c3e17db28072b8a2cbf1b8428d82c1e2e0d1a9729f52f2c315a99a32cf6326d34bb8c8e2d9634d335cd1b4b2dac34e835111d572c9033e1348a95a8287d2f5231cc1deb23b72bb22d331b8423802a932cea178b23df28402b76173122142a722cb417e022da275f293d177a20512696282416cd20e0252528e51656205d259f27f3158e203225432740163720e824ea2683151520972488261515811f57242126ac14221f2224c52570149d1eca2385251d144a1e6f233925d313081e3923f3241f13a91deb22b124af126f1d8c22852412124e1d38224a24ec11331df32112247911db1ca021c9231d119a1c62219123d9103f1c39214a237910271c372115231b10ba1b0421ec2211106b1bc7204922560fe61a63209721d30e8b1a36208121790ea21a212084218f0e6f1a0e207521f40d751ac91f2d21fa0d6219fb1ec620e70b821ae61e45209b0d821ae61e45209b0d0000351d6c1e00000000351d6c1e0000ff275d2c6a2d8c21ae28c02cc52df122d9299e2ca12de0211b2c082df72d5320792d2b2d3a2ea21e962f982d9c2fd818db302f2e902f569cc631f02e4230caa06a32ca2fd030c7a3d6328e30aa3125a4383302315a324ca5ee331031923256a7543336303a31c8a64b32a02e2c3005a51c31842df82e67a46e2e4f2dc02eb8a0fb2bda2cc22e549c172a1c2d832fd599a8294b2e2c303893a029e82f4331be89ff2ae030a1324096882a6e313733a11d312a733147334f1ff9294c31d532c31c7629a2300a325b1c2729562f4231701c7b27d52d1830901e3126a92c5b2e091d7325502c3c2e161c7724732a062d45192522bc28c32a4117d8211028be29e6164f21182771294917e4218d26ba28b5174621b225d52739167720392543278f15c61ff2240827d614281f982494267414811e58242a264114931e1b24c225c313a71ebb2343256e13c01e5223d6241b13d11ef2228b242d13761e7d224a246412f51d2b2222244612631de321f1235411c91c90217f23bb10a01c56211c2393105d1c1c21bd225110121ce4207d220710c81b90203522b30fe81a4420d121d50e7e1a172095216c0e1e1af01f6321a90d321abc1f2f21560d6b1a901fdb20880da419241fab20800cbd19b51e3b20360cbd19b51e3b20360c0000b71d371e00000000b71d371e00004528272c2c2dcb212b2a282d302e05214a2a352d5d2eb821302b7c2d862e9e21fe2ce82d192f4d206b2f032e402f938f8f30912eff2ffc969731272f7230d99f7f32a82fd430e0a33933433083314da56f33a230e93175a59f3370309f3190a649331f303731cfa56432852fc130b0a4dc30992e213022a3852edb2d6b2fe89ffe2b8f2d7d2f569cbb2a0e2e11304d9b592a842e7130109df229162fbf30120a0c2aa02f2b313e18b229c02f47312e1c7d29ca2f5231b5171b29a22f37318a198828222fe030cf1b0828862e6d30fa1b3327cc2dd42f051c2326fb2cf92edb1a35254d2c212e271982240d2bee2cc517b12391290d2c23168d2384289c2afd16b322d2278c29a016d521e226e628c51534214c2669287a15cf20dc2521285f1576208f25e827fc14452036255e27c414a91fc624c2264714421f602427260d14ba1e2424b02583133c1ee6233f25f612e61d7e23f6249612a11d0323a8244912751da0226a241912461d322220248e11121dd521e6235611c81c8a2169230811741c532102236810471c3521c3223b100c1cfa2087220110ca1bb4204722350fc81b7b20eb21b40e101c38206821000fc31bf21f3321310eb01bc51fe920220e0d1b6a1fe620130e001c411f9f205c0d001c411f9f205c0d0000a11b811c00000000a11b811c00001e29ac2cb62df521ac291e2d142ec922042a942db92e9523cf2a6e2d9b2e47235a2c492e17305c230c2e882e0830fb21742fa62e0730221ff930232f5e3014917032e52f0131fca248330630213158a52f333a305d315ba409330330233144a4f032fc2f083135a44032872fc530c8a2af30ba2e4a3015a1392e582e2530f49d8a2c1b2e0e30889b1c2b692e39308a941d2a8f2e77300617fa29a22e7a307c1a9729a92e9130d11c5f29a52e8e30a01c6729b72e9930ed1bd528852e81307a1a4d282c2e4e30dc1a4a28db2d18304b1ac4273c2d5d2f3419ad268b2c552ee618fc25ed2b922dc6183325e02afa2cd0184324e8294d2c37180d241b29742b441831239b28782a04188322fd277e294517f321fe26c128a51652214f265628f115a420e82519282f154b208025b727cb14d41f1e2538275f14671fc824c2262214f31e6c244c26c313b61e2f24da257f13641edf236c25ba12461e902319259a12fa1d3a23d5244b12b61dde228f2403126f1d7c225224b811fb1c13221724ed10841cb821ca2378104d1c69215a234110f51b1521da22df0f131bab203b22ff0eba1a7020b321390e7c1a27204221970d311af11f0721550d491ac51fcd20040dfc194c1fb820280d981a611ff7201a0e981a611ff7201a0e1e122c1d3e1e26821e122c1d3e1e268209295c2c5f2d2f2274292b2d432ebe23e4297e2dc12ecd23742bda2de12e4123132c472e812fa1227a2dd52e3430c421102f122f4d3048207130652f9430f01ba931ad2fc6303a9b8932d82ffc306ca1dc32ff2fff3028a400339d2fce30b1a4c332812fbe3087a40e32382fa93057a38230a92e5b30e4a0cc2d062e0730129cd32bf52ddd2ffe96dc2a332e3a3041112b2a2a2e5a305518ba29212e5130f11a2c29022e5830751cc028f02d4e30001d8128f22d4430071d4828dd2d3330821c0c28a72d1030011c2a28412d772fb51be227b22cf52e4b1b5e26462c702ee5192b25b52bab2d1d19cf24e02af02cc1187824442a7d2cb51836249029212c6f18bf23bd28482b53188d222428072a50170622a4274c29ba168a21fe26e7282f16472148267028e51502218d25c52746159d203225322790146d20e424bb2660141d2098244a261114811f5124f125e713a81e072498250213261ea52342257a12b31d2c23f62400126c1dc622a7245d11311d692258242211e51c03220424d810a61ca6218a234d105b1c592120230810221c1021b722a60f881bc3205922f80ef61a81200022710e8e1a5e20ca21110e931a52209a21aa0ddc1a44206c21790d611a20206e21170d981aec1f1d21d60c981aec1f1d21d60c0000541dd71d00000000541dd71d0000e3289e2caf2d90230a2a4b2d3b2ece239c2a872d802e60244a2b312e702f0324272c4d2ec32f3a22eb2cc92e21302d210c2e3e2f8b307020dc2f5e2f9730851dfe307d2fda30a59758325f2fbc3043a1f532c72f2031c5a1f8326f2fe13039a4d432792fde3023a41c32f52eb93068a37f30702e3830e1a0c52d082e18300d9cb72bd32d4330e891d92a142e2a301e168d2ade2d12306f19bf29eb2d20303c1a8229cd2d0630611b09298b2dbf2f641b8228832da72f2c1c41284f2d852f7a1c2a28fa2c082feb1c8427a02cc92e701c50262d2c2b2e731ba325b12bd62d041b2d253c2b522d1c1ad524a82ad02cb4196324e829562ce6181c242829c32b97189523a7281f2b3c18c9225828972a94177c22ea27c829a7172a221d271b294717b3219b26c1285d166821292666280a16ea20b2250f287d154c203f255527cc14cf1ff324de265c14591fb3249b265614ea1e7d243c261514911e3c24eb25c0130d1eef238825c212c91d7e23212517128d1d1523b324d8114c1da42262243d11fa1c39221824ec10ab1ce421a7235210631c90212e230f10e21b2a21a8224b0f8c1bd5203322800e731b8d20d821f10d561b5e20a221da0d791b44205b21010d5d1b03205121e00dc41ab91f15218f0fc41ab91f15218f0f00001e1f461e000000001e1f461e000070276e2b672c3620a329fc2c462ea523f02a7c2df52eb5242e2a3c2e822f6324922b402e7e2fe424732ba12e3d307524432c112f44306b249c2d1d2f7730b223be2f202fa0303021fd30332f89301811e1317a2fbd30819bb7326b2fc830b69f4a32592f9f303a9fa731f02e5d300d9d3e2f3c2ed02f658f012cef2dc62f2817652ac02dc22f1f1af129ba2dcc2ff71b9329cc2dcd2f721c8429ca2d0c30c01c1729952dea2f091dae28502dac2fed1c59282e2d7d2fdb1cf327f92c572f2f1cf927a32ce82ee21b11283a2c312e051c3027c42bb42d911be125462b462d301a8025032b382d241aff24812ae92c94197b24ad29412c011927241729782ba3180a24cb28fe2a8318ee23a928d22a6d18fc226128542acd1738229c274529f11609220527b928be1690218f267c2836161f210c264928b815dc20a1250b286d1575203e25a727fb142b20e224f826a714671f7c2457262214c61e3124e22591132c1eee238425e412d61d842322258412871d1923cf24d111561dcb2286249e11081d76224124fa10cf1c2622fc23c110981cc62191234010321c5021fa22c40f961bdb205522050fd01a7c20f121df0dae1a5020cf21540dd41a3a20bb21720d561a1420ba210e0d371aa01fff20f50c371aa01fff20f50c0000d51d4d1e00000000d51d4d1e0000ba27172cf72c1e212e29852d472f96249d2a672dce2ecd249b2aea2dff2e9524dc2a392e9a2fde24972ac82e4230ae24eb2ac52e2530b1248a2c322f68306b24502eaa2fc130a6222130fe2ec430da1e2331052f8e308e1a6131582f9330dd9a8f311d2f7430f79c9b30a12e1c30e199d02e1e2ef52ff58e282c002e0f304e15a42acf2d31308219582ac22db22f401c7729bf2da02fb61c9129862d7b2fdd1dcb283c2d3c2f5b1d5728f72c012f201d0328c12ccd2e7b1cb527982cc82e4e1c4027622ce52e0c1c4b27422c742e4e1c7826b42bb22da31bcc25e02af32c7a1aa5259a2abc2cf1199625422a842ce1193a25da293f2c811993248b29f52bd1182c244129742ba818bf23ca28d22a9318dc222d28072a0d1833228b27af295217d82149277229e6167921c5260529d016dd201a2696280d166c20b425222839151c204f255727da14bc1ff424c82652143d1fa32462260b14f61e6324fc25c6137e1e2824ae253f132f1ee1235d258312001e8a231425ef11ba1d1f23b924aa11711dc2226c240911141d3e221f24b210a01cb521a2234810361c2d21f922ca0ffa1bdc208a22df0ee21b96202b22490e851b6720bf21000e1e1b24204b21390d2f1abf1f2221ee0cc119061fbe20b10dc119061fbe20b10d0000841d961e00000000841d961e0000f326012bf72b341fe928372d582e5924ae29b22d1f2fc224582a182e6b2f3725382a222eb62f1b25432b8f2ee42f45259a2bd42e3f30ac24982c4a2f8930e422cc2cdc2fbc308023f52df32e5e3083210330df2e6d30a81e6e301d2f7930c9164830df2e46308e967f2f372eca2fbd95202de02d952f3b0d762b7d2d7e2faa167929642deb2ff019ab29a22d712f851c662a6c2d5e2feb1d6e29562d332f5f1da028002dee2ede1c5228d22ccc2ed31cdd27982c8e2e641c5d27662c462ec01b10273f2c1c2e701b3127232ce72d921b9327c02b8c2d3b1c6126462b682d881b3025a92a122d741a02250e2a912ce919b924a229162c93195f245e299f2b2919ed230829362b6d18a623a028952a4518f82234281d2ac8175822ab27e3291617002242277429b316bd21c426ca2869163e215c266528da15f920f32522288e159c208125a027261539201c252027b714cb1fd424b4261a14681f85244826cd13c11e4824f1251c138c1e052494257a12191e8b232d250812dd1d0d23d4246d11a81d92228c24e010571d102239249910201da921d22316109d1c522149235c0f421c0a21fe22cb0e1a1cbe207b228b0ecb1b8e20fc21b80da01b5d2096211b0ddf1a212085210a0d4c1a891f21216d0d4c1a891f21216d0d0000531cb31e00000000531cb31e00001627f42a1d2ce51e14294d2db62e2c24392a7c2dd72e6b24882ae52d302f8924e329e32d532f5e24be2a682ebf2fe524902b7a2e2330a5240e2cbd2e3030e423482c452f58303d235f2cef2e8330b721e92dff2e7230b720952ef72e67304d1ed22e882e2f30d61b8d2d272e972f601a352cad2d8b2fe819ca297b2d622f8a19502a5b2d6c2f3b1c43297c2dbf2f891cd8295d2d6a2fc71db029e02c3e2fa01dde28c02cac2ed11ca228912c6e2e951c25285e2c412e5d1c77272c2c0f2e2b1cba26062cc32d831b7126be2b932d9b1b8226792b772dae1b0b26ec2aee2c221b71255f2ac12c6c1afd24052aa02ce3197924b4295d2c911932245929c62bf418c02302294f2b93188923bf28262b351894237c28aa2a3b182f232e28f72903185122cf2787290e17de2146273a298d166d21d126ec28b6154e215c2688289515da20c02508281b153d203a25482776148f1fdf24cb26f513251f972458268613c91e5224022624135e1e05248c254d129e1d64232c258f11641de022d824fd10261d7b229d24c310041d34225e245210d61cef213d242b10971ca421c423e90f2f1c3f21eb22350faa1bd1206b229a0e3d1b9a203a223d0e471b7120d921ce0d841a26206421320d9c1a841f01211d0e9c1a841f01211d0e1f160b21282246091f160b2128224609b526d42afe2bbe1e0b29fc2c642ea4232c29682dd02e5524152ae12d362f8324ac2af52d662fa124a22a1a2ea82f4924a22b4f2ed32fb0248b2ada2e5b303a245d2ade2e2d301d24dc2ac22e3330c523ff2be62e3a307d21ad2cb32e1830121d862d8b2ee42fef185c2c432e212f0119672b4f2dd62e241ae429412d122fe41b0b2a862d892f981da629722d502f4f1eb729122d2d2f1c1f5129e12c812e9e1ea828a92c6f2e171e1c28742c322e601dd8273f2cc72de21cf227df2b8e2db01c50277d2b7f2d151c9626182b3b2d5b1b3b26e32ae12c8f1aee259f2aaa2c3e1ac7252f2a8d2c151ad925b329682c281ad9249129312c691936243929ff2bb318b523dd28132b4e18512393287a2a161847233f280a2aaa171723ed27b0297717a222932776298f16412234272f299616e121ee26e7283016832198269628ce15f6203626422839158820c025d527c6140d204a253a274414871fdf24b226ed130f1f892441266f13bc1e4224d425a9123d1ef42373252c12d11d55230925c0118d1ddf22a9247e11f91c4522452499107b1c95219f232510111ced20cc22010fe01ba1205722c90e241c9e203b22220fe81ba3204522d00e951b73201722880eae1aaf1f51212e0ee31a121fe220b00fe31a121fe220b00fc712fa2043226805c712fa20432268052327ce2a342cac1c1b29132dc12ec2224329892df42e68246e29a82d182f6024a729c02d2b2fa524e329fb2d672fbe245b2a232e882f8324762ba92e17305824f829742e06302423052a462e0a303e22cf2bd32e04301b22932b8c2e42303221df2bce2e1830c91fa42a0b2e712fe01c072b1c2ddb2e281d2e29752d562fcb1c97286e2d3c2f6c1dbf28282ddc2ee81d0c29072dc32e481e9a28b42c852eba1d6028742c2d2e2a1d2a28462cf42deb1c5527062ccf2d8f1cab26af2b8d2d261c9c266f2b732dce1b9126332b1c2d551b7826a62ab82cd01a0426492a7b2cf3195f250a2a5c2c51191725dd29452c5c19d524a029272cc81892244b29cd2bd0184e24ee28282b4218e823b428bd2ad2179e237928522a891750232f28022ac4160e23e2279f2987166f223b271929f415be21b426bc2851157c2164267c2814151a21182639280c15ca20bf25e227bc143e203d252f27d9130420cf2494266f13991f7e2426268313351f2c24ba25ab12d31eb62356255012891e3123fa240c120f1eb722a8243811dc1d64226c24ad10701de42116245610e31c74218823cc0f951c20210c234f0f451ce320b922d00eff1bb5207422610e921b72202c228f0d211b4f20e521980e021bfa1f5821d30f021bfa1f5821d30fc408a920a921f400c408a920a921f400fc26752abd2b581c6428d32c482eef2243295a2de42e3d247b29e22d3b2f54249d29e52d502f6f24c529042e732fa624e729182e8e2f7924172a772e0f3021241c2bbf2e4d305e242e2a862e3d309823ae297e2e05304022872a122ee52f4f21752a012e8a2fcc1ed829a92d142fc71d8229522dfa2e721dde28492d082fbf1d8f28ff2ce22ef71d7728ea2c972e8f1dae28f02ca92e871d7d28a52c412e031d7828402ca62dfe1c6128282c982d2b1dfe26ba2b862d5a1c9026652b722d811ca2263f2b3d2d8d1c2526f42a342d051c9925932ae92c531b4725292a8f2c911a0c25e129572cf619f524aa29302cda19d2246929de2b61194b240329282bcb18e223bc28dc2a671894239428b12a3b1836236328652a9817fb2232281d2a5917b222f727b9299f165122932750293f161c223a2705290b16d921e626b928c8154821762665283915c92006260e28bb144520842568277f14cf1ff924b0261d143b1f7d2415269d13ca1e2a24a2252513991edb235c258612451e4d2309253412b81dbb22c9244b113f1d3c228b24db10d21cb72166247610791c6d213b242310321c282137243b0f081ced20ae236e0ed21bc6208c22bd0d9a1b7b20d421180d691a172093211d0da71ad41f4121010fa71ad41f4121010f0000f221432200000000f221432200007125cc2a112c341f4c28c72c172e6022ef28592dbd2ef3231629872d072f8b239629c92d502f0e24df29052e9f2f2b24e829112ea22f1924112a392e8f2f0424332a502ee92f9d23c52a762e3d30e223d528e22df62f5221a828b62de92ffa204429a22da42f20218128912d562f192025288b2d0f2f461f5d28522d142ff01f1c28ce2ce92ebd1f2d28c42c622e981f2c28802c0a2e0e1fb0272f2ca92d411e5827092c822d811d1027c72b562d121de726752b2a2dbc1cae26322b062d5f1c6226eb2aeb2cf11b1526b42acd2c921bb225772aab2c171b5325352a8d2ca01a0525eb29622cec19a6249029242c7d196c244929d12bf01844240929792b7e182024c828172b1518ec239728aa2ad6177d236628442a681735234528092a211705232028cf297e16c422ef278d29421650228e274529d715d3211127ed28c315362183268328d214c720012628286c145f2081259d270c141a201125f1269813a31fae2458261113241f4c24e1252712831eeb2389250612f01d53232f257f11751dc322cd240d110c1d37227624ac10a31cc8210f244a105f1c592140230c100b1c0621c0227b0fe11bc52059224b0fda1b8f202222c30e2e1c4d20bc21330f401c10205821530f201c321fe220a20f201c321fe220a20f00000d19c61c000000000d19c61c00006a27132c322d07215b28b92ce82da1214d284f2daa2eee22ad288b2d182f89230d29cc2d592f12244929f32d8b2f17244729ee2d662f00242c29df2d4e2f5823e628d12d6a2f7c229d29fc2df72fb822302a142e23306b2273295e2d662fc8203b29ab2d842f821fe5281f2d052f681ec928232db02e421e7e28112de12e731eac285e2ce22d4e1ffc27702c1c2e7f1e0628492cdc2d8c1e6927062c842dcb1d3527d72b562d671d0927962b2e2d0d1dd2262c2bed2cae1c8d26de2ac42c491c2826952aa62ca91bdb255c2a8a2cea1a9c253c2a6f2c431a6e250d2a592cb7195c25fa29402ca4192025c029262c1119fc248b29ff2bee18a1244629a42b941845240929182be717ef23ce28b92ad9177723a2287e2a621709237428362af516bb224528f529a8165b220b28a42949162522a7275829af15fb212f27032989159b21a926a7283015192109264328b81472207425a0276514e81ff224da26d2133e1f982463262a13dd1e5124ed25ca12891e04248d2576122c1e72233225b611c21ddd22cd245411701d732269240811e91ce82121248b108b1c74216c2334106a1c2121b9229b0f381cd4205322450f051ca0202c22ed0e0e1c7620ed21770ea11b3c20cf21930e051bc31f71210c0e051bc31f71210c0e0000361af41c00000000361af41c00005127012c162df6200f28d62c102ee5210029ef2c632e4e22e128742dc32e7622e828a82d112fd0220a29c52d462f28233e29cb2d522f71235229c92d432f36233229b02d352fb7224329b22d222f76226b29d82da22fcb21752aa32da92f14224c29512d142fa6204828342d8f2ef71ed128982cfa2d391fb128292c982dbc1e3029042c702d1e1f1828ff2ba22d9d1d9127072c582d6f1d6427942b262d4e1d4427662b072dfc1cef26102be22cc21c8c26bc2ab22c481c5626952a952ce21b26266a2a7f2cdd1a10263c2a602c621a7c25f529492c6d194825c1292d2c39190e25a3291a2c0019cb247e29042cbe188b245b29d72b7e18622429298d2b9d180f24f028112b0418bc23c228b62aa6175d239928792a4917162375283b2a8e16b4224b28022a341657221e28c629de150c22e62791299915c8218e275429b7154d210527fb28e714d4204c267e28c71436209e25f2272a14a01f0e251d278b131f1f8f2460260b13cf1e1e2490254d12581e65231525df11d41dc522c4246511871d602288241e111a1df9215124b8109a1c9221002442103d1c17213523d80f091ccf208b22780fcf1b8b201f223a0f5c1b5b20db21d00e641b35208b215d0ef41a1a209b21700e231bf31f6421c80c231bf31f6421c80c0000e518841b00000000e518841b00001d26502b972c2520ef274d2cd02d20211b28e42c2d2eb3214e284a2d9b2efa210e29752d1c2fb1221029a12d462f0723ee28a32d3a2f2823dc28af2d372f0e23c0289f2d182fbf22ae28772ddd2e7e22fc288f2dfe2e9922b428b82d6a2fc7214e28032d8c2e76203628302d552eed1f5c28e32cf12eed1f5128a22cb12e931f4727622cca2d271e2628ea2b2f2dc01e34273e2b0e2da21d0427ef2ae12c431da426ca2aab2cc41c38268c2a8d2c441cfd255d2a712cd61bc725382a632c8f1b9725172a5c2cf51a6c25fd29512cbf1a3c25e129452cd8190825c529392c9e19f624b529212c8a19c1248d29082c011982245129c22bbf1832240e295b2b6b18db23d328022bc5179b23b328c02a091754239628812ac8161a238128582a1e16fa226928232a0316bf224b28f32961156e221d28b3298a150e22bd27542938157a212a27e3281115cd208e267628c0147020dc25ec2764141b200a25fe269913e11f9e247e26ca12961f3624f2258812081fb72379250e12421e102304256411a71d7d229024de10251de02120246f10b01c542162230a10371cf3209722b90e171cb1203c22860e091c8920ff21700ef21b6820db21570ef81b31208921d90d6f1b00204221ee0de81b761f1421cb0ce81b761f1421cb0c000035169f1b0000000035169f1b00000c27d12ab22c2f1e1e283c2c6d2d45208227bd2c1d2e9d2076284e2de82e0e211129b52d672fbd216c29d02d952fcc210a29ac2d282f5a22bd28852dee2e4622a4287e2dff2e252290286b2def2e30228128592d002fd1210329582de62e85217d28422d022ff020c327962c662e26207428b92cf72d55203f28262ca72db81fa927ff2b752db91ed3263e2bf32cc51d9226a12ac72c231d5e26712aa42c931c1826492a6f2c2e1cd925142a4e2ca61ba425e529332c051b7125c2291d2c6c1a4325a229112c361a3c259d29112c2e1a1d25aa29152c0a1a1225dc29242cfc190925002a372cf219ea24db29142c7d198c2439293a2b7f184324d028ca2ae317ca239f28832a3517c4238d28562aae1795237d28322a91158c238528302a8a1560238e28372af01438239428392ad614dd227928252a9914c0224528d92986142a2282271c298614cf203f264228ac13062042255927ee12a61f8f2473269712fc1e2024cc2504129b1ea8236425b1113d1e12230f255f11e21d8d22ab2411118b1d36225d24c710101dc1210a245c10b81c59213a231110711cf320a222a70f1b1ca2203c22120fb41b5a20d821a20e3c1b1b208f213c0e281be51f3721b50da91a881f2a21bd0d5d1a311fd520440c5d1a311fd520440c00005619a01b000000005619a01b000013250c2aad2b341f93253e2bfa2c8f1f8328c52c332e541d5228c02d5f2f11206128bd2d4a2f3d212e282d2db62ebc20e427d42c3d2e7a21dd27c22c2e2eb5212728c92c362ec4216628cc2c342e8b218128cd2c332ed1208328b52c1b2eae207628bb2c492e332071287e2c0f2e821fa728182c7f2d461f7328a32b0a2dad1e1a28752bfd2ca11da227062bcb2cfe1cbb267b2a552c301cb126e329ed2b2a1c3026b129f52b4e1bba259429a22b201b28255a29382bbf1adb242229fa2a5a1aac240229f02a8319d524f328e92a171944252129392b8a18b724c1293d2c10184825892ab32c8d18a025702a672c34197a246c29882b6d1884235c284f2af41611231928de298a16b722fc27b629a51660233728e129e215a523bd28892a1f1564230a29d92af41409231e29f52a4414d522fd28e82a941448229a28742a3514d221e1278729cd13da219b267928d71380218d2561275f13cc208a240c26a713731fdf235e256b12401e1023df246311e01d8b228a247011aa1d3c2251243d11a21dff211424da10791dba21ce23b710491d7b2170238d10d91c232105232d10571cae204d227a0fdb1b3c20ce21450e681bde1fc421e80db41bb51f9621290d6a1b5e1fdd21710de81ae91e7321110de81ae91e7321110d000046104e190000000046104e190000d7250b298c2a011c7025a929612b141ca3276a2cc62d941a72290a304c31091d8328dc2d632fc01c9626f62b362dd41e3f26c92a762c461f6a26d52a832c0b208126122b9e2c6920da26b42b082d8a208b27242c732de0208928992c062e45205f28e32c4a2ef31f0d283d2c852d131e5727702bd42c451d2327b72a622c201db326482a2d2c061d1726f3290b2c901cb325a629d42b461c9a257d29872b051c67254f29442b691b41251f290d2bdf1a1925fc28ce2afe1af024d728a92a751abc24b4287f2ae519b2249528612a8b197b245e28622a011984236a286b2aea177024972ad82c1b185c275d2d092fd01a6d221d287729f2157923e5261f29ea16402337271129b6168d22352709297b16b8229e275229371643236628112af412b52370297f2b64124c24422a232c2113d423d429a92b3f14db22f0287e2a9814dc21f3274a29ad1469218e266d285114ad209225fd277613102060244d2600134c1f452346254912b01ee1220f25c3110e1e7022c224d410641dff215c244d10041dae2114240010df1c6021b023c50f831cf8203a23330f181c9c20ab22880eb61b46202122260e6c1b1a20dd21720d771bf21fb721000d811bc91f76212f0b0c1b651f9221850e671aec1e1b21b20c671aec1e1b21b20cdb11e01d001e3408db11e01d001e3408912457284729571e5524b92702297e1ccd246729f02a851cf82dcc345d369214d926152ccc2cfa1f8325b829272be51d36255229272bbc1c8b257129372b651d7c254e291f2b561de0254829092b081c1e26d129ab2bfb1c7027312c862d861e6b28d22d8f2fa01eda26642bf32c5b1d272562299a2baf1c0f255429562b991c3c255629442b6d1c67254729332b391c45252629fa2a911b3725f628c22a281b0c25c128802aed1ad2249428412a9d1a9d247928192a091a84246728062ae81964245728f32977194e243928d02915191124fd2776298b184924f42745293d18e8234327ed28cb14041baf1fcf22b002f21fb2237c265311a4219d2517284d16f720a6253c28dd156d21d8256c285e15ed21472697283013d42140271229521207232e29e32ad5116d25212c8f2dd9106f25472cc92d8214712392291d2b83143d2109279c282e14bf201225e626921388203724cf25cf13092047232f25f412c31ea222e224d411371e2c225d245b11bf1dd421e923f310951d8321b623cf10601d4b217c234a10251d072131231a10ce1cc320d922aa0f7f1c81204b22bf0f1d1c3e20c721900eaa1bfa1f6d211d0e121b901f2c21a40df51a461ff2201b0dc31a101ffc20650d0a1aaf1ea920340d0a1aaf1ea920340d00000e1c171d000000000e1c171d0000ed2233274d28671bf223f6274029fc1bac21d62474260f1aec1a8220d0219e13d6235e288829901cc9242029cf2aba1d04251829ce2a011e11251829c12abd1d13252129d32a951d29253029002b851d42254e29302b9e1da724b128422a3b1c4a2240262f280617d0246428de299a1a1e25cd287e2a051b3625db288e2a271b2625c428872abc1a1f25b228742a601a0f259728562aa619f1247428312a3419d0245928162a1119b6243e28e929f6187d242428cd29031953240628a7298d184024da2782297a184c24a5275d298618402480274e2934182324312736291818f4225a26a82853179f20b724c826dd143a20f42301262e1458202524472605148b204d24a626341485207d24b026c2147e208124df264d157520c0242b278b158e202326c527d9136926a42d852fe90c7528eb2f34316517e920282767288b14231fdb23cd258313841f67232325ea13d51db322b22424121d1e4a227c2470127b1dd7213f246c11501da42122244111311d5f21db23cd101e1d37219323bc10d41cdb201f232910871c87209722cd0f171c212017220b0fd91bd91fc021c30ea11b821f7321160eaa1b5d1f3c211d0e501b211f1f215e0d331b021fe720be0d041bd61ef020410c2e1a471e8320b70d2e1a471e8320b70d000077196e1c0000000077196e1c00007e2277261528b219432293261b284b1b1a20822496256e19591f2e24d72583183424ba270c297e1c2f248328d729791c9224b728132ae31ccb24df283b2af81cf524e428582ad31c2b25f028932add1c58250229cb2ab01c25257028d4295a1cf52286270229e21940241028b329a51a7b242e28da29261ab7243728d0299119bf243028bc29ff18bc242428a229af18b1241d289c29f018972411289a298a187c240d289529b9185c24f127812997183d24c527702976181124822750294818ae2349272b294a183e23fe2601290b18c322a126c0288d175f22362683281e170822cb251f285a16aa213d257627f7153d21d924f926831593209224ae26d114412068247b26c0142e203e243226671441203b2419263514552025240f26021482201b24f7259e12531ec9213c24700ca812ac192f1d1001131c7e1fa921760d8d1f9a2107248a11131e592103249e119b1d5b2108248b117c1d4821e72314115a1d1521a3239c10511df72030239510ff1cb420ad224e10a11c78205522fa0f4e1c4d20fe21de0e181c2a20d421880ecd1b0220a621390e7a1bb81f9421f70d4a1b7a1f7b21d00d361b661f7d214b0d441b391f3e21de0c351bf61ee320d40cca1aa71e8920fc0c8e1a3f1e1420640c8e1a3f1e1420640c090b4519411cd780090b4519411cd7804d24ed250227aa14112198251827e7198d1f8b243926a418f120ef246826f7182523c7268428f41afd230b284b29c61b122445288d29aa1b6f247828c7292c1cc024a928082a521ceb24c8282b2a791c81249a28e9293d1ca12315283f296d1b1b23a1270029b01afc23d92735297f1a5f2405286829b7198a2414288729111972240c289829f7185c2405289529de183824e9278129b6181924d327682994180c24b02751298518002483272e297818cc23642714295b1885233c27fe28331849231327ed2811180f23d626c828e217d3229e269e28301783224b266128db16f521d625062846165a2149255427a315c620d924c82655155f208a247526e2141520492441268f14df1f19241b262514b71fe823f7251014bc1fbd23e625a613b31f7e23d0259d13f21ec9222025de12791bb01f1c21640f5118791d2a208c0ca01c0c206f22050d3d1ee6207b23610c921d3221d423770f5e1d2021c02348105b1d0021a52346101f1ddb203b23840ff01cac200b233f0fdb1c8d20c822200fb81c6d20ad22ed0e7d1c51207222040e481c32204b22490e111c0f200922f80d301b911fab21460d8a1af41e4b21620c281a8b1e1621200c121a681ee420110ccb19261e06219f0cf319ed1d9520200df319ed1d9520200d0000000000000000090b4519411cd7804d24ed250227aa14112198251827e7198d1f8b243926a418f120ef246826f7182523c7268428f41afd230b284b29c61b122445288d29aa1b6f247828c7292c1cc024a928082a521ceb24c8282b2a791c81249a28e9293d1ca12315283f296d1b1b23a1270029b01afc23d92735297f1a5f2405286829b7198a2414288729111972240c289829f7185c2405289529de183824e9278129b6181924d327682994180c24b02751298518002483272e297818cc23642714295b1885233c27fe28331849231327ed2811180f23d626c828e217d3229e269e28301783224b266128db16f521d625062846165a2149255427a315c620d924c82655155f208a247526e2141520492441268f14df1f19241b262514b71fe823f7251014bc1fbd23e625a613b31f7e23d0259d13f21ec9222025de12791bb01f1c21640f5118791d2a208c0ca01c0c206f22050d3d1ee6207b23610c921d3221d423770f5e1d2021c02348105b1d0021a52346101f1ddb203b23840ff01cac200b233f0fdb1c8d20c822200fb81c6d20ad22ed0e7d1c51207222040e481c32204b22490e111c0f200922f80d301b911fab21460d8a1af41e4b21620c281a8b1e1621200c121a681ee420110ccb19261e06219f0cf319ed1d9520200d000000000000000000000000000000000000232270240000cb27182cba2c87223e29792c712df223b52a992c882d55240b2ccb2cba2d9c23f32cf92c182eca22052e3c2d602ecd20df2e562d5c2eb31db02f992d6b2ed98f90301d2ee02e929feb30a72e0930d8a3a831fc308532e0a40133b934a73599a388301b305f31349db42e682c242eb59cec2c142c452d8a93ff2aea2b3e2dce19eb29bf2b242d7a1da8287b2bf02cb01ef026f12a702cfb1c4826052cd22d9c189129f6306532161c3f2d74349a355b8d262d7b348a358f9f9f2c1434063521985f2cb33300350519c52c9f330e35641ec02bce327e34cd221c2a3931d4322422ea26e52f6131821e42233c28802a231a2721b125422807188a20da250328f0156e206d25a5278315af204e254927881561200825e926e4142d20ac2484266514921f5c241d26f913181f1f24c5257813aa1ec22381250513601e66233625b712161e2e23f0240512c51df522b124b511701d9a2289246011431d52225624de102c1d14222424c910e11cc421e8238310b61c8821a1235c106d1c5e215023a00f451c56210f235c0fe31b2421f622cb0e991be42068228c0e231b6f20bf21260ec11a3f20c121d10d8f1a2320b821a60d351af01f7c21f40c4a1aad1f2921040d5419fb1ecf20240b831afd1e5f20320d000000000000000000002322702400000000232270240000cb27182cba2c87223e29792c712df223b52a992c882d55240b2ccb2cba2d9c23f32cf92c182eca22052e3c2d602ecd20df2e562d5c2eb31db02f992d6b2ed98f90301d2ee02e929feb30a72e0930d8a3a831fc308532e0a40133b934a73599a388301b305f31349db42e682c242eb59cec2c142c452d8a93ff2aea2b3e2dce19eb29bf2b242d7a1da8287b2bf02cb01ef026f12a702cfb1c4826052cd22d9c189129f6306532161c3f2d74349a355b8d262d7b348a358f9f9f2c1434063521985f2cb33300350519c52c9f330e35641ec02bce327e34cd221c2a3931d4322422ea26e52f6131821e42233c28802a231a2721b125422807188a20da250328f0156e206d25a5278315af204e254927881561200825e926e4142d20ac2484266514921f5c241d26f913181f1f24c5257813aa1ec22381250513601e66233625b712161e2e23f0240512c51df522b124b511701d9a2289246011431d52225624de102c1d14222424c910e11cc421e8238310b61c8821a1235c106d1c5e215023a00f451c56210f235c0fe31b2421f622cb0e991be42068228c0e231b6f20bf21260ec11a3f20c121d10d8f1a2320b821a60d351af01f7c21f40c4a1aad1f2921040d5419fb1ecf20240b831afd1e5f20320d831afd1e5f20320d0000651cce1e00000000651cce1e00007f28a62cbd2d62221e293b2d632e49244529dd2cf12d7b23d72a202d352e0122f82b6b2d8f2eb821812dd52d202f0a20742e6a2ec82f2d1ef32fc72e373012198130522f8a30bf99ff3036308031049f6d3120317432e2a12431c1314733eca08230b130d831e4a0b42fe22e5a302ea0b02ddb2db32f889a482bcf2d522f6f0bf629ef2c362e9b932029d42c312ed98f4629962d602f67972429db2e9330ec18142a6930f03144189a2a693125330e11642a4a310f33ea9dee29ff30a13291932d298730203244172d293030b731991b7828c12f4931221e9228ad2e5430e01ba626972d802fd91bd224512bfe2c27188d22be28782a5017aa2202289d299716a321262773294b169e218026bd28a1161321b725b627ab15782042251627b514f51ffa24e4263014701fa6247326d513df1e682423263c13ea1e2624bb25d612d41ec2234b25c112d71e4f23e9245412f11ee722a724fb118b1e80225824a311101e45222f243911681d01220424a810e71cbf21a6233910b91c7d213423890f841c3721c922340f3b1cef207822c00ef41b94202722580ed91a3720c521760d7e1a0a2089212d0d431adf1f5921ff0c211a9c1f36217f0c551a701fe620a60cb719111f9e20a90bbf19a61e1d20b30bbf19a61e1d20b30b0000a81c941e00000000a81c941e00003f285a2c582d8423442a492d512ee5226c2a4a2d6a2e7a23a02acb2d192f1224802c6f2ec92f6124052def2e323087237a2e1d2f56302a21512faf2fb030121e5230193025319e96d3306c309531c59ee830a530d831a39dac309630b331c09f243044305531de9ed82e7f2fbd30cd9c3a2d502efe2f569b622bfb2dd82fb694352a0c2e1f30ec133e2a582e2d30c810372a8b2e65302397c6291b2fae302815a329a42f0b3165199b29e42f3831a6189629e22f4c3121133829a22f2531a9928a28ff2eb830f40ee927582e423090161627bd2db82f331952262e2d322f0a196225752c202ea4183b24e02aa82cc016dc237b29942bc515d2237128782abd15b922e82778295d15c821e326ca28fb1455214d265028ef14e920d1250a28db1486209025c827c314532034253f278d14e61fd224ba26d0134c1f71242a26af13a91e2b24af2596124a1eeb2345253812e91d7923f224d8119b1d0f23a7248b11601da62265245111311d3a222024cd10071ddf21d923a710b71c922168235d10841c60210223c80f5a1c3c21d422800f1e1cf7208622910e081ca32023226e0ef91b6320ce21d90dcf1b2a207b213b0d9f1bfa1f4a211b0d751bbd1f0e21790de81aa11f0921a00c5d1c681f592057035d1c681f592057030000371c9f1d00000000371c9f1d0000152ad82cd92d1d227f2a992dde2e27238c2a012e682f8b24be2a0c2e512fae24b82bc22e2e301d257e2c3c2f5d30cd24382d782f9330d323a62ee52fd33074200d3010300c312b99c93037305031cda1ba3048305b3121a16c303b3049313ca00b3012301a31ad9d3f2e602f9b302c9bef2ccc2e65306898752baf2e6430c294832ba82e6930cb948b2ab42e6230ae0aee29a72e7630eb18ac29c22e86309a1b8729df2ea330691c6d29d92ea830451b8029cd2ea0305116a829802e583055909a28182e44304915c527ac2dd82f72160427242dfe2e9c179726a42c592efd17af25f92b6d2d9d172125d82a962c18185a24e029102c0718d72315293e2bc117fe228528532aeb164b22d3276a293916e721fd26bc28d71560214f2646285115c720e5250328b9146d2081259227601405201b252127f313961fc824af260513341f6c243f26aa12f11e3524ce256c128a1ef42364250d12751e9e231c259011231e4b23e024ad11d21df0229e2404118f1d98226324ca10261d322225247010ba1cd521e12312107d1c7d216d23bc0f241c2b21e2229a0e521bb1204322d70dc91a6d20b621690d731a20204621240d261ae51f0821830c5b1ac61fcc20aa0cee194c1fbf20bb0c971a5b1fe620420d971a5b1fe620420d00004c1d1b1e000000004c1d1b1e0000ec28b42cbe2d1f24342abd2dcf2e1b248b2acb2d0d2f70240a2c362e492f9324a62bd12e33309424f02c3a2f6230a624d12cd42fc830d824682df52fdd306624472e0e30073102232e2f19304531c91fbd2f28302e31ec15632f22301c31999a5b2ffc2ff6302a9df82d6d2f9e30309cbb2c112f79306f99292c992e72304f95ad2aab2e6b301d114f2a6e2e4e306d18b529552e3d3077197029482e38304a1b1229252e2c300b1cbd280a2e1f30151c6c28f12d12309e1b3b28c72dff2fc01a0b28702dac2fef19f0270f2d3f2f52195527bb2ce72eea184626552c282e9b1842259a2b722d3218ef24d12add2c401880242c2a6f2c2a181f2484290b2ca1176c23be281d2bde168d221f28fa290f162b229f273429b515c321f526d928551579214826662810151a219125bd27b814a0203d253927f8136220ed24c5268d132020a52458261b13b51f6124f925a412ef1e16249825f911721ec0234525f711f41d4a23fc242111941dda22ac24cf10581d832266249b10011d1f2216244f10ba1cc621b8238a0f681c6f214b23070f1a1c2721da228b0e981bd62073220e0efe1a94200922940dab1a6520c621520da81a56209a21e30c051b4b206f21b50c691a2c207621b50cd01aee1f1c21000dd01aee1f1c21000d0000cf1d541e00000000cf1d541e0000f328c72cda2d11245b2ab72dd62e9d24bd2a1b2e882f37259c2bb02e083067255f2c032f4530f424ea2cad2fa73028245b2dd12fce30aa22ad2dfa2ff130fa21f12df52f11311f21d52e0f30f930cb1c642e0c30ec307c1c452ec72fc730331bf02dbd2fba30d21ab62c112f71306919cc2bf62e6b307a18d12afb2e8a30d517fa2a9c2e7430e5180a2a5b2e16300319d3294f2e06309319a029162e04301a1a5429e92dd42f751af628a72d942f491b8128842d6e2fc31b2c283e2d212f211c1228ef2cc72e071c4627852c6a2e321b10261b2ce52d621a8025922b942dcb192b252a2b2e2d7119e724962aac2c29197924ca29172cb61836242b29642b2a18d923cc28ea2a2218f52264286a2ae2165f22fa27c429b616f5212a272029e5159f219b26ab2890156a21282644285b15d820b625ec277c142e203d255a272214a11ff024e9268b13331faa249a261f13d91e78243a26c512a11e3f24f1258e12281e02248f251612df1d92232f256f119a1d2323c1242f11451dae2269248a10ee1c3e221b243f10891cce219b233c0f301c6f210923ae0eac1b0c2193221e0e6d1bb9203522740d501b8120dd215e0d531b51209821e90c6f1b30204a21820c521bd91f2721e70ca61a951ff320bb0da61a951ff320bb0d0000b81cc21f00000000b81cc21f0000d128bf2c142e2523d029d82d9a2fde24aa2a342ec42f7925b92adc2e2c308625722bf42e4530e1251a2c442f8230f425532c982fb030dd252a2cea2f1031c725ee2c1b3027314525042e13301c319121042e1630ff304b1f992ddb2fdd305c1d002d7b2fa630261c552c022f7d30b31c162bf82e7e304b1c322ad82e9030271c6f2a522e15304f1c062a372eed2f6c1c462a002e1a30011d6329c12dda2ffc1cb228862d8d2fa51c6f28502d582fac1c2428312d342f5c1cef27042d1f2fd91b9027c52cdb2eff1a1d27622c302e951ab826012c9c2d371a5626722b252ddd19b325f52a082da319ec245e2ab82cde184a248e290f2c3e181e2411294e2b1218fe23d928032b6517d523b828e42a3f1737236728632aad168a22bb275f290d1630221127ba28ba15d3219b26732864155c2127264628f514e920b42502288b1482204d25912775143120e724f3262514721f86245a265d13e71e4224de25d412431e022480253112f31d9a2326258111ac1d2f23d92440116c1dde228c24ac10151d7f2247246110d71c2b2202242b109d1ccc2195235c0f311c5e21f922b00ec41bd1203122b30d0c1b7420ce212c0da81a4c20b621760cdd1a3f20aa21990c4e1a1420a421390c301ab11ffa20250c301ab11ffa20250c00007d1aa91e000000007d1aa91e00009f28102d2a2e9823a829102eac2f30259a2adc2d2c2f0025b02a9a2ee52f1125e52b1b2f5330bb252e2c8c2fa930cd25152c752f9430ab255f2cb52fcb305e254b2cf42fd930dd24292cbe2fe630d5237a2cb92fdc302422492cd52fc530d61eb32c572fa630cc1bfd2b012f823019152f2bbf2ea4308011262b752e5b308f14692a2c2e12308018272aff2de02f1f1caf29ed2dbc2f421d3129a52d652f771db628562d472f431d7a28232d0d2f001d2528e32cc92e5d1cd427b42ca12ebe1b7927742c9e2ede1b98271b2c502efe1b5726a82b862dad1a9e251d2be52c8f199125a72aaa2c27198425352a712c1a191525d729322cb3188a248929ef2b331826243829642bad17c023b228ab2aab1707231a28f829f41650229727bc29a616eb215c277d293c168821e5260429d215e5204026952828158020d1253028bc14242061257c275c14d91f0425d226c3135b1fae245d264613071f6d24f8258012931e3424a7251512331ef6235925bc11ee1d9d2319251b11a51d3623c924dd10591dd4227d2444100d1d51222c240710a11cc421bb23620f3e1c3e210b23c40e111cee20a022f80df01ba6205822d40da71b6e20d221210df61a1c204d21380c081ab31f1621d00c091ae81e6620f80d091ae81e6620f80d00002313d01d000000002313d01d00001a27e52a612cef1bcf28822ddc2e7d24ed29042e882f4025812a822eda2f8e25d92ac42e2830bc25522b542f843004266f2b832f9f30df250d2caf2fdb30c0255e2bbb2ff3303b25972bde2ff230c924fb2bcd2ff030c423132b732fb7308821132b2a2f7930e71fcd2ae02e77306d1de62b8b2e4130ca1cf22a4a2e4230361c002acc2d2c30671ca729e52de12f821cbb29ad2d842fef1c8c29712d2e2fc81cdd280c2dda2ed01c7728df2cb62eb31c2628af2c832e5e1cb3277a2c432e9d1b6827582c202eda1a3f272f2cf02db41aef26de2b8c2d6a1acf25162b3b2dbf193525732ad82c7b191e25112a5b2c6419b524b329f72bf51857246c298a2b4b1808241d292e2bfa17cd23ab28862ab7173b233828fd2927179922be27d0291b16302264277b29ba15e621da26d128d6155c216a265d28f5140121f7251928a1149620822592273e14342015250b27c713c81fd424a5263313841f88243d267a12e51e4924e125f111a21e072481254b11371e87232225f510091e0a23c9246e10d51d9a228124d10f861d27223424670f381db821cd23fe0ea11c53213623340e351cf620db22a30da71b9a204722210d6b1b5820d421f80c3b1b2e207f21d90c821afa1f66215c0c5f1a5a1fea20ea0a5f1a5a1fea20ea0a00000c14011e000000000c14011e0000a226b32a442caa1eff286e2da12ee423202adc2d4a2f5924082b812ef22f1a25f52a842e25304525182b212f64307d25092b292f823038256a2b8a2fa73026251d2b9a2fb030b6249c2b622fa5304f240a2c892fc930dd23a72b362f9f3039224f2ad62e593054204d2a7e2e5a30091ff52a722e3d30701e792a342e4030931d1c2a092ed22fe01c3829b42d1b307f1c2029a32d972f6a1ceb28312d1f2f8d1cdc28d22c782e7f1c9428882c462e3c1c4628612c1f2ee91be6273a2ced2dd01b2f27142cb22d1b1bb026e62b902d0a1b5026802b5c2da61a1726f82ace2c6a1a8c25752aa02c7d190925092a752c4d199324ab29252cd11835245529802b6e18dc2306291c2b2318c623c528f02ab01775237528962a6017f1222b28ff29dd164322d7278b293116e9215a27392978157b21df26ed28121547215e267c28e214dd20cd25012880144a204f2554276413b41ff424d726a212301fa52468263112f51e65241626ff11a81e1a24a0254f11d81d73232825a910751de022c4245a102c1d6e228c24980fed1c362253243b0f801ce1212e249a0e5d1c90219b23f60ef51b2921cd22d70d771bcc2059227a0d3a1ba32031224d0d321b7520e821d20c821a2f207821e40baf1a6b1fd520550daf1a6b1fd520550d00005619741f000000005619741f00002b26ae2a502c331e4f29942dd72e5e234129ba2d1f2f6724552a602ee72fe624f22a972e22302725052bb42e39303525362be92e4f305a252f2b482f96307125b12a512f8f30f724472a302fbb305b24f32ba12fd7306024582c4f2fd130ae21042cbd2e6f303b20512a8c2e69303f1e242b972e62309c1e5b2a322e3e30491ee529d12dd32f951e2329a12d5d2f111ef728662d142f2e1eb8281c2dbd2edf1d7528d42cb82ed51d2b28922c812e301ddf27462cfe2da61c0428f62b9c2d3b1cf626872b932de31a6226232b372d501a2526f12adb2caf19d125b52aad2c6119a725702a9b2c3b195f250a2a742c51195f249c29402c53180f242629cf2b0418ce23df28d52ab8176a23a028812adc16412352281c2ab7163023fa27b229a716ab2298276a292c1639223a272529c215cc21f026e5285d1569219b268d280115f6203f263e2897149120d325ce27391415204d2536278d13ab1fe024be261813221f8d245b269912da1e4b24ed25e711571ef92391257611d71d5b231b250811721dd922a524b110ee1c46223c24de0f841c9321c123340f401c0f2137233d0e7b1cbd20d122940e701cbf208a22830e251cb3207622150e161c7e202022000e671b911ff920f60ce01ab61eb4203d0fe01ab61eb4203d0f0000b018142000000000b01814200000c226912a522cfa1b3729832d112f3d234829ae2d0b2f4124ec29132ea12fc6243e2a5a2ef62f21258b2a982e23304525d62acd2e33301225442b392f8830b124eb2a0e2f80304024272bdb2eaf30a5232d2bf22eb130c122ea2baf2e7d30b122a72aab2e89303321bf29292e4a307e20a82a282e3630c820b429e42daa2fd31f2e29942d392fc71ef6283b2dfb2e2c1eaa28192dbc2e811d9728de2c752e201d7b288d2c212eb81c2c28462cdc2d641c7a270d2cc42d2c1ceb26d52b912dba1bde269c2b5b2d3b1ba926582b252d291a7226d92aaf2c8e19fd25592a5f2c291988251d2a412cc3183e25e8292a2c8418ed24a929092c3e1887245229b42bcd174624fc28312b5d170c24c228c02af916c02386284c2a2e1650234b28092ad515e3220f28c4297e1570227d273b292215d921d226c928aa146f217426842856141b211f2644286614c420bc25dd279a133e203e252127c4120120d2248f266312a41f87242a261912301f3624c225bc11a61ec6235e254d116b1e3e230025b610051ec322b5246b10d11d6a226e24cc0f611ded211524350fb71c7f217e23510e6c1c28210623ec0d281cef20a9221a0ef81bb9205522d90db71b792016222b0de61a4820c521f10dfc1af91f3a21e80efc1af91f3a21e80e000016180620000000001618062000001327542a032c191a61283a2d792eeb22a829a52d0e2f0424cd29562ed12f9524f229752e0830ca24112a942e2430e3242b2abe2e2b30de24872ae92e6630a324c02b262f7d308324d02aef2e85306724d029fd2e76308323dc29cc2e7930d322f8294b2e25300022d229f52da32f4b21b029e92da52fa02001298f2d492f811f02295e2d362fde1e5729212dbe2e4e1e6429e52cb92ead1df128ab2c722ee31c5528632cf72d8f1c61283f2cb82de41c3027cb2b802d3e1ccb26712b5c2d3a1ca7265c2b372dda1b5226172b1c2d761be625b42acb2c961a5c25342a792cfc190325e9294a2c4619e524b729292cd818c0246f29d42bb2184e240f293a2b42180b24cc28e72a7b17b523a128a82a221759236828572acc1604233528052a0b16c7220128af29d71560229e2751297e15242248270329e614d221ed26b1280415462172265a283514cc20fe25012822144d207c254a2769130520f5249e26ed12851f7d240c267b12fb1e2b2496250312ac1edc234d25bf114d1e5423ff240711b91dc222bf249010481d44228d243710c31cbf215f24990f5e1c5e213824f70e2a1c1c212b241d0ef71bd520aa23560dd31bb3206522bf0cc01b6620ac21340c871a12208721600cee1ad01f30214c0fee1ad01f30214c0f0000101f722100000000101f722100004d27532c902d6b2177285b2de22e0e232429cb2d362ff4238a29102eb12f3324012a572eed2f74242d2a8d2e1a309524172aa02e2b308524272adb2e45309024e529db2e5e305f243a2a002fb5306c24e329a12e4f309b23222a3c2e003056237a29f72db82f0822d328a32d5e2f2821ea28ab2d652f1821df28772d522fe5208e282c2d222f6f2060281a2dd92ef51f0028ae2c482ec31e93275c2cde2deb1d50272b2ca42d401d0427f32b6e2dd01cd7269c2b3c2d791c9b26532b102d1c1c60260f2bf02c871b1626d62acd2ccc1ac325982aa12c701a57254c2a782cf719eb24fd294d2c7e198f249d29192ccc1855245529c52b8f1839241c29792b2d181324d528132b8a17d223a228a52abc166c236c283d2a641612234428f8291716f6222328c6290016aa22f2278629be152f228a2743295415bd211627e628f21434218e267b287c14c52003261c289c135f207e257727f91227200225d326a012d61fa9243f26c011461f4b24d0255611b71ef7237f25ed10141e58232e2576108a1dcf22d0241110171d42228324780fa61cd12117246a0f571c53214523ec0e111c0921ce227d0ed21bc42062223d0e8a1b8a202b22030eaf1b4a20b121a30d5e1bf11f3821680d1e1b601f0b21390d1e1b601f0b21390d0000731c341f00000000731c341f0000d8274d2c7c2d11217f283f2d942e62227f28a52d072fad23c428012e972fd5232e29442ef82f412472296a2e1a30632493297d2e17306724cf298c2e1b304f24c929802e2830d823002a8a2e4e309023482a8c2e43301e239c29102edc2fa321a129f62ded2fc2209c299b2d732f0720232a732d4d2f3520c7292f2dfe2e2620e228d92c6b2ea21f4f28bb2c552ebc1ebf276f2ce82d0e1e7e273b2ca42d9e1d4027092c652d341def26a32b282d891ca826392beb2c5b1c5d26ec2abf2c831b1d26ae2aa52cd41ae225832a8e2c311ab825612a782ca8198a253a2a5f2c20196a25122a3f2caa183425d729192c7c18f2249429d62be317aa2449297a2b71173d24fe28032bc3160824d328b32a6e169b23a5286d2a111627237728232ab415dd224928e02979158f2217289c293b154122bb275829fd14022248270629cb149021b826b0287014ea200c264728d71350207725ab276e13d01ff624db26bb12561fa0245a265212f21e5224e2258a11a21e042481254b11421e74232b25fe10c51dea22cd249b107a1d772270245e10f81ce3212424ed0f8a1c6a215c233d0f421c1421aa22cb0e121cd0204c22f90dc01ba22029222e0ede1b7b20e621c60d4b1b4620d421d10da01acc1fed21f90ea01acc1fed21f90e0000191a691e00000000191a691e00009a28402c5b2dc6207b284d2dc32e5c2297286f2de32eaa22c528f62d6a2fc5226e294c2ede2fb523a4295d2e023018248529482eea2f012480294d2efa2fcf234d29452e01305c2348293d2e0d30d32262295b2e2f301922962a462e17309f220729bc2dbb2fbb209728462d0a2f2c208f28092d852e6a1fad280b2d7e2e4f1fcc28c32c2b2ee31e0028482ce12d7d1d0627222c762dd11c1427ee2b422ddb1c19279a2b1c2da51ce9262d2be22c4d1c9f26d02ab52c651b7126ad2a982cc81a4226792a7d2ccb191526422a542ca119d0250b2a2d2c01198c25db291b2cc8183525b029012c2718fb248929c82bf217af245c298d2b091861242c295a2b8b171024ec28f62a0017c123c828b02aae167123a2287a2a69160a237828392a1116b2224f28052a57155b222a28ca2911150c22fa2792293515c0218b274d29f41452210627e8283e14dd204c26622830144920a325e3276213c31f1b251f27b0123e1f9a2467263d12b41e1f249e2558113b1e7a232425f810d41ddb22cc24a610881d6b2289246910441d0f224f243310d11ca621ff23af0f741c392148231a0f381ce120aa22bb0eda1b8e202422430e731b5820e321f10d631b2d209d216c0dfe1a0b20b521060e1e1be21f7b21390d1e1be21f7b21390d0000471a991d00000000471a991d0000a7265a2b8b2cf51f8e27be2c022e5d215028622dc52efc21a6280d2e632f99224629582ef72f7c233e297a2e29309c233629662e1330bb233829632e113093232e29522e03305b231929162ed52f13238629352ebd2f5023fd28282ef32f492283288d2d2f2ff7208b284d2dbc2e9020af28242ddb2e42205c28102d982e5f1f7a279e2cde2d151e7727132c3d2dd61d15279a2b072d161d14273d2be52c151da726e72ab12c901c30269a2a8c2c0c1ce325612a712c531bb8253d2a5f2c1e1b8f251e2a532c901a6725052a482c091a4c25f6293c2c93191c25da292a2c0e19f724c8290e2ce918cb24a229dc2b6f187e245f298c2b711838241629302bcf17d523d128d32a3f179b23b228a52a8d166d238e286d2aec152e237728462a451520236628182ac71404234d28ef29b314b7222328bb2980142422c72763291d1478213827ed280314e320a5267928cc136d20ea25e027101317201125f4260112c51fa62463263411891f3524d1250d11f21eaf235c25a710241e1423e8241d109b1d85228024830f261df3212124e60eb61c63217a23500e361c0121a822a40d131cc3204022760df21b97200322530dbf1b7520e021af0dcf1b5120a3213b0d991b2a208c21930d791bdf1f7321870c791bdf1f7321870c0000c519f41c00000000c519f41c00001827392b9b2c001e7227962cd42d5620f0274b2dbb2e00217628c82d7a2fa0210a29462ee82f5a2266295a2e213075222e294f2e033087220029382edb2fc822e7281b2ed72fa622e028012ec12f4d22c828f22dd22f5422fa28e62da32fcc21cf28b52d642f4b214628262db82e92200928b52c252eda1f22284a2cb22d411fdd27142c9c2d651efb269a2b522d751dac26132b142dca1c9426a82abf2c4d1c2f26612a712cb21be025242a4d2cef1aaa25f429332c531a7725cf29192c1b1a4c25b129102c93194825b129102c90193e25b9290f2c85194925e3291a2c3a195025ff29272c41191d25da29082c681887244d293e2b39171b24d528bb2a8d169a239a287d2a8d16a0238428542a0e178d237b28332a0f156c238028302a801464239328382a7b1439239b283a2ad613d72286282f2a6c13b0224d28e92942130b2270271d295413c920462642286a122320692568271212b11fa6247526a511fd1e2d24d5252111991ec0236b25d810421e202306259710001e94229c240510aa1d37224624980f451dc821f423100fdd1c5c213623840e911ceb20aa22b30e361ca02038222e0ec11b5f20d221320d2f1b23209221d00c131bf21f3f21be0ca81a971f2d21e30c681a431fdc20220a681a431fdc20220a0000121a2a1d00000000121a2a1d00001e25552a0d2cf01edf25df2b1c2d361f5728e62c7d2e4b1c4328e92d0730c01f4028ee2d9c2fa12148288e2d5b2fce214728852d262f592271289a2d3d2f7322b328b12d582f8622de28b12d4a2fab21d728aa2d372f7b21ce28782d1e2ffc20b828382dea2e4a209e28e92c7f2e831f7528782cda2daf1e4828122c5e2de01d0a28b12b1e2d491df727392baf2cb31cbc26a62a7f2c861bae26fc290c2c761b6426b429022cba1ae825a329b62b981a27256129462b151ae7242d29ff2ac919c1240a29eb2a0119d424f228dc2a7818232513290e2b8a17ed24b9293e2c99168725852ab52c6817b725b02a852c3218cc249d29a02b6d16ee235628f9299813ee222228e3293314c0221428d429d015fd222f28d42993158e23b028792a10157b230729df2a891415231d29fa2aae13be220029f32a50134822a328752ad112c521b3275f294212c621a2267b2887115c21b1258a272111bf2096242026c211801fd62363250611521e2b23f424a410d41da5229c244710a11d49225e242210771df421152403104b1dad21c323c50f221d71216823890fc71c1e210323020f4b1caa2047224d0ecf1b3620bd21bb0d831b0520a621080de31bf71f8221c80c761b891fb821000dcb1aff1e48211e0ccb1aff1e48211e0c0000221ac51c00000000221ac51c0000b9240e29552a681e4225062aa32bc91d9827ce2c2c2e351d712925306131141e20284c2db72e151ca126002b632c8e1a77264e2a272cce1a3727e72ad32cf31c7c274a2c822d51219a27e42c2a2e8521c727e52c632e06215228342de02ec12046283a2dfe2e0520e727402c9c2dec1d35278d2beb2ca21dfd26f52a872c3d1d8f268c2a522ceb1c2226182a152c671cc425bc29d72be91ba42593298a2b611b7d256929412bd41a5c2537290b2b531a34251029cd2a251a0a25e628a52aa119eb24c228822add18f224a428672a9418be245b282a2a631868231828fe29da163f24d9293c2c5017d9283f2e3130bc1be8216e28c129b614b723b126e8282b159223202717298f1578223627fd2892157822a8272e29fc15d8225e28e7299614c9236429712b77115624412a202c1612e223f129d22b8911e3220e29ae2a9712b821f027382934124f219b265b287012c520b325e0276412422078245326b5115b1f71235a25ee109a1eec220125d910c21d6622a0243910571ded214224280ff81c97210a24a80ee71c5c21b423910e901c062163231d0e221cb520de228a0daa1b66202222220d6f1b2b20d021820c821b0420aa21120c891bd11f5c21360b201b541f6021520c6c1ad31ef720c90b6c1ad31ef720c90bb514991e711ef50bb514991e711ef50b9324b62893290e1e6a2426286729771b8025052aab2b4d1cfd2d2a35ca365a195c25672b3d2c3e1e6a259329342bec1c56257d294b2b061d6d256829202b3e1c58252629da2aa1194e25da28582a95192d251429d42a1c1a0f282d2cac2d041ca028f32da52f0d1ea7257b2a762c3d1c162564295c2bf31b35255a29402b3d1c58256029442b011c6e2558293c2b731b53253629082bf71a34250829cc2a7a1a0b25d628912af419cf24a7284e2a5f19a7248628212a32198c246e28ff29ca186c245628e329601853243c28c22900181a2400287b299817cf23aa2731293a1631234f27d328bd15541bc91fcb212409341f9b22e825fa0d3c215925c2278214dd2073250128d0145e21d82567289f14f0215f269028331306223527fb288812ef221729b72aa412d724e22b7c2d53104d25512cdb2d1612da23e829902b8413a1217627b728d312da200825c126801263201424b02571129c1f332328259511831eb622f624c810231e3622762481109d1dcd21ee231e106c1d7821ac23f50f3e1d4b218123b20f021d12214323590fa41cc7201423d00e5a1c81207422630e0a1c4720cf21ee0d971b03206b21160d0f1ba41f2721ba0c161b681fe9204b0cea1a3e1ffa20310c2f1aba1e9d208a0c2f1aba1e9d208a0c0000321c501d00000000321c501d0000fe2274279a28411b9824292879292f1bde2124255f26e6195d1bc5205c222b14c1237928b729841cba245d291a2bce1dfa246f29242bf41dea245a290f2bb81df8246729242ba11d0b2570295b2b8e1d16257029772b1d1da124da288b2aa61ad72102260628d91035255c289329a4175625c4285d2a9e192725cc286c2a691a2425c128702a121a1825aa28612ab119022590284c2af418ee247428312ae118ba245a28142aad1899243c28e6298c1869242728cb295c184c240b28a62940183b24e42780292f183e24a72758294f17252474273529241725242c27292924177623ad26c528e716422164254b27dd144f203e2417266d13622027243126fe12872049249426a5128c207b24a826d6135a206f24d6264e147b20a924fe260115b320c425ba270c140026f72c8e2e980ca7284c308c312814f4211828e2285e14791fb423a825f611751f102302256c12001eab22a9248e11321e4b227324bc11941de8213b2429115d1db1211d249f10331d6c21d2232610131d422187230c10bf1ce4201323f70e6c1c8d2097227d0e171c2b201d22010ee51bec1fc6214a0ddf1b7f1f7521460dfa1b5c1f2821d50ca81b1f1f0921a40c761b021fd420860c2b1bec1ed820580c941a741e7b20400d941a741e7b20400d00003c1a621c000000003c1a621c00001522d4263f284f1a312298262228041b0420c424362631196520b724e9261e19872308282f29251c50249828e9299c1c9b24ed28482ac71cc8241f29a82af51cfb244b29dc2ad91c47256d29252bf71c96253629f92ae61c61257728c929601c2b23f7275d290f1a1a241f28d629261a57243e28e329661989243e28d829c71894243528c329871892242f28b1293b1888242d28ae29321873241e28a7291e18592417289c294d18422404288b29e1172524d9277a2919180224922756296a17a5234f272d2990174a230a2701293517db22ac26c328c8168d224e267c280f162b22db251f285115ae214e256d27e4145721e324dd269914b02098248b260a1456206a24552603144520422422265c13462047241b26d11255202b2403265b12bf202d241d26c21104207a235b25a30dcb15191a101d1c01381b8a1e5321e80a4e1f6e210f24e510001e86211724c9106b1d652108245210681d5d21e6235010451d3321b4233410321d08213e23a00ff91cc320ad224c0f961c7e204322bb0e4d1c4920ed21c40d211c2220be21880de51bff1f99214a0d9e1bc91f92211a0d691b7f1f6b21f70c4d1b5b1f5b216d0c651b2a1f2b217c0c4e1bec1ee820fe0a0c1ba61e9320b90cb31a581e1d20100cb31a581e1d20100c440838198f1c4f80440838198f1c4f800d24f325ef26c1131b21cf2589279e192020ee248726111991215f251e273d1979233127d228081b05244728a329911b29249128ea29d51b8b24c8282e2a221cd524f628672a651ce0240729812a6f1c6324c828242a211cb72347288029821ba62318284929331b252417286829371a5f2424288729e2187f242228902972186f2414289b291a1863240a2892290f18432400288529e3172824e5276b29b0171124c1274f298717022493272c296a17c82372270f29331783234627f628f4164d231d27e628c1160d23e526c9288616ba22ad26a02839166a2262267028f015ea21e92510287915632161255f27fc14db20e824c9267e14772099246f262214232058243626a713e71f252415264f13c21fff23f8252d13d21fd123d425bc128a1f8c23d2257e12011fe7225d250912321c2d205821b10e5618671dbe1f780b801ce91f22224f0c051edd20792360097f1d34210624f70d5f1d2721f223330f421d0821c4230b0f061de4205723bb0ecd1cbc201d236e0eca1c9e20c722ce0dad1c7e20a722ab0d961c61207122fa0c651c42203c22c40c3d1c1820f221990c641b9d1f8e21020cc91af81e2e211d0c481a911ef720d10a5a1a7d1eca20e40a321a401ee420b90a2a1a1d1e7b20860c2a1a1d1e7b20860c0000000000000000440838198f1c4f800d24f325ef26c1131b21cf2589279e192020ee248726111991215f251e273d1979233127d228081b05244728a329911b29249128ea29d51b8b24c8282e2a221cd524f628672a651ce0240729812a6f1c6324c828242a211cb72347288029821ba62318284929331b252417286829371a5f2424288729e2187f242228902972186f2414289b291a1863240a2892290f18432400288529e3172824e5276b29b0171124c1274f298717022493272c296a17c82372270f29331783234627f628f4164d231d27e628c1160d23e526c9288616ba22ad26a02839166a2262267028f015ea21e92510287915632161255f27fc14db20e824c9267e14772099246f262214232058243626a713e71f252415264f13c21fff23f8252d13d21fd123d425bc128a1f8c23d2257e12011fe7225d250912321c2d205821b10e5618671dbe1f780b801ce91f22224f0c051edd20792360097f1d34210624f70d5f1d2721f223330f421d0821c4230b0f061de4205723bb0ecd1cbc201d236e0eca1c9e20c722ce0dad1c7e20a722ab0d961c61207122fa0c651c42203c22c40c3d1c1820f221990c641b9d1f8e21020cc91af81e2e211d0c481a911ef720d10a5a1a7d1eca20e40a321a401ee420b90a2a1a1d1e7b20860c000000000000000000000000000000001a1ddb24a12568171928232cd12cdd220d29902cb12d4f243e2a122d272e0725f92a562d672e1025e22b7f2d952e38257b2cbc2dc42eee24fa2cee2ddc2eaf24552d052ee02ef922842dfc2dae2e941cbd2dee2db02e979a3e2ebc2fe7302d9de930f8341836b3a0e42ebd326d34098fb32c3d2eeb2f3213022b4e2cba2d5e1181292c2c782d0a1cff28cc2b572d371e7928032c562d231ece27562bd22c5a1e3327fe2c792e7a1c792c2c33a0346c20882ce7327a340c181d285f2ed52fc615e924892c232e04059326552d302f159a7628482f8e3033a0db292e31a63223a1ca2bf6328e3418a1bd2a5d3261340596c824f529dd2ba1173e21b12508288515d6209225ec27c91492205e25aa278514b820452544275e1465200825e52692132420b324732622138c1f5e240a268012031f1c24b0250a12a81ec1236e25bc11521e62232a257111201e3023f5244611dd1dfc22bf24ae10851da322912467104b1d5f2260243910261d232234248f0fe51ce2210a242f0fc11ca621c923fb0e701c76217123830e501c68212423c70d081c37210023ea0d971bef206c22160d2c1b7320d421430de21a4020d2210d0d741a2020b921bc0c251ae61f68211e0c2a1ab21f0f21210c4519091fc320b7096d1a151f6b204e0c00000000000000001a1ddb24a12568171a1ddb24a12568171928232cd12cdd220d29902cb12d4f243e2a122d272e0725f92a562d672e1025e22b7f2d952e38257b2cbc2dc42eee24fa2cee2ddc2eaf24552d052ee02ef922842dfc2dae2e941cbd2dee2db02e979a3e2ebc2fe7302d9de930f8341836b3a0e42ebd326d34098fb32c3d2eeb2f3213022b4e2cba2d5e1181292c2c782d0a1cff28cc2b572d371e7928032c562d231ece27562bd22c5a1e3327fe2c792e7a1c792c2c33a0346c20882ce7327a340c181d285f2ed52fc615e924892c232e04059326552d302f159a7628482f8e3033a0db292e31a63223a1ca2bf6328e3418a1bd2a5d3261340596c824f529dd2ba1173e21b12508288515d6209225ec27c91492205e25aa278514b820452544275e1465200825e52692132420b324732622138c1f5e240a268012031f1c24b0250a12a81ec1236e25bc11521e62232a257111201e3023f5244611dd1dfc22bf24ae10851da322912467104b1d5f2260243910261d232234248f0fe51ce2210a242f0fc11ca621c923fb0e701c76217123830e501c68212423c70d081c37210023ea0d971bef206c22160d2c1b7320d421430de21a4020d2210d0d741a2020b921bc0c251ae61f68211e0c2a1ab21f0f21210c4519091fc320b7096d1a151f6b204e0c6d1a151f6b204e0c00007221bf21000000007221bf2100009028e82c132eef23102a552d5f2e6724e2296f2da52e3525b72ac52d012f17250a2c392e8c2f9324112daa2e0230a022f82c022f4730d122282d342f83306b22ea2d732f9030e71c302e42303f311b1b6e2e2d315732621b3b2e19329633281b652d4d31a332d218212dfe2f0931db13352ba82e3730fa19272ad32d432fad1a2a29342d6f2eec1ac428fa2c3b2e631ab028712d7a2f1619f128d32e74309f1aa32a7f30b6313c94e029c0301932008a1429b92f0131739b3128762e8a30ae9c3428cb2e6b304e9ede28232fac30ae9e5c28262fbb30f59a1628d82e7e30f498f826ef2df62f1e07c0242e2bcc2c8c14dc215c288f2a6c15ff21ab278929ef157621f9265429c01552216826b0284315de20a0259827d11463203725ff260f140620fa24ce26ee129f1fab245b269012f61e662401260012021f21249e259711f71ec0233c258f11011f5e23ee242311dc1ef122bb240811951e982277246910f31d5e224924f90f5c1d0c221b242f0ff21ccf21cb23a00eba1c8c214f23560e8a1c4621d422810d5b1cf5207b22d60d241ca1201522050d101b4520ba21480c801a0b2085215b0c3d1ae91f66212e0c361a931f4021880b6e1a641fef20cc0bd619f81e8c20130bd419881e02209409d419881e022094092d165b228422f9012d165b228422f9019a28b22cd12d5e24b029c92dfe2e94257a2a1d2e7a2ff125762bd12e25304026532c382f4f308e26192c4b2f7130af25f82c672f7d308524dd2c0630ef306c24b72d373034318f202c2e84309131ba94422ec330e231638e642db330e531311aee2ca130fa31171c5b2c4d3094312b1c0d2c542fbf30b91a762ab52e5030021bf7297e2e3430fe1be229882e3530e21bd829b12e5930571a9d291f2f9a30ce1a6829872fdc30de196229842fe2307f0923293c2fcc30de8fb828de2e9c30379414284e2e3230af946127df2dc52f9792e626852d4d2f490d9926182dc52ea114cb25732cf72d8b157124d82a842cd214be234a29622b3314a0236728522a2314ba22c02765291414c921ea26be283f144e2132263b283b14e420b925f12737146a2078259e2716142a201d251c27b513991fc62496260813341f71241c2635129a1e2b24b025af11401eed2355256311c61d7823f824fa10841d1a23a924c010431dab2261248910221d472222241810101dec21d6230a10d41ca2216523160fab1c6d210923da0e691c2821d022e90d1e1cd8207622850de91b82200b22cb0cd41b4520ba213f0c961b202080211d0c601bf71f4e21000c4e1bb11f2e21ec0bfc1a9b1f3a213c0c1b1c431f752056071b1c431f7520560700000c1dc41d000000000c1dc41d0000862a552d912e2f23932a632eb92f4c25942a612eac2fd225d32bf52e1c304e264f2c892f8430f1265b2cd72fb43076260e2d0230e730ba25f02c38301c31cf249c2d58305131d520a02d7b308831d9202a2d7b3097311e20092d7d309531d21c902c3b3046315e1c1a2cee2ff730ce1a5b2b4f2fa9302a191b2b082f7a30fd183c2be52e733028186b2aa52e52308118ec29c72e6f302f1bb029d52e86302c1c8829e72e97300f1c5029c92e9830c4192c29832e6c3099126929202e2830d5945928c02d2b30a80ee0276d2d6f2f0913ef27102db92e9215ba26972c382e71165c25e12b502dd015bc24bc2a6d2c58164924c329d22bd616b123f228fb2aa016dd225b28252a5a160e22b5275a299a15c1210127b928f514482149263e288d14be20e225ee2716145b2080257c278113e01f0f25072748127a1fbe249626f711171f69243226a811e61e2f24cb2510118e1eef237125d010621e9c231f25af10211e5123ec247f10d01df622b02444108d1da22278241310211d3d223624870fd41ce621f823790e8e1c8e2184231b0e2b1c3b21e322950d671bbc202822f60ccf1a6c20b2218f0c631a28205421be0b451a04201f219a0b551ad81fd820ad0bf019581fc2205b0c871a551fd420ca0c871a551fd420ca0c0000f81c861c00000000f81c861c000010291d2d362ee3247a2a572e912f2626a62a692ee22f5026842bfa2e2a30a826e92ba02fc330e126a82cf52fdf30c226642c25300a313c26a92c2b3000316d25b32c36302231a025b92c78308a310d25fa2c6f308c312523b52c52305e31821f322d0b3014314f1c302cf12f0531f31a3c2c9d2fc1300d1c082b262f9530b61c082af92e6f30d01cee299c2e4430bb1c9729772e2e301a1c6f29562e2330fa1b2b292f2e1630951bce28022e0a300e1b7828e02df22ffd195a28ad2dcf2f46192d28542d6b2f8718c527fa2ce52e3718f226b62c8f2e89171326482cf72d121841257b2b572db617d524a02abd2c18177624fd29502c1e170e245e29c42bf3155c23a828ca2a6615d5221f28ca2904157122a0271a29ba14f421ff26c8285e14762139265b28021401219a25b227581396204c25332725124d20eb24c526c4110c20a12454266d11a51f6124fc251f11fb1e1724a0251f118c1ec1234c25cd10021e5123fd246910981dec22b1241b10631da1227124e80f141d42222224ce0ed61cf521e0237b0e831c9c217c230c0e301c452111239c0d731bde208e22fe0cde1a95201022990cae1a6220cf217a0cb71a5920b721120c061b4e209721420c701a30207921ce0be01ae11f03212b0ce01ae11f03212b0c0000851c8d1e00000000851c8d1e00008729192d312e4724692a6f2ec42fe125632baa2e12303026102c6b2f6430ce26572cf52fcf304527812c2c301031af26b32c31300f31c625c12c453021316325bd2c66306d315e25922c773083315325502c7a3093317924312c66308f31e323e32b36304d316b22672b0730363114217c2b9f2f34312e20e72a332fd730631ea32ad12e8d30de1c552aad2e4d30ad1b102a972e3430941ad229462e12300f1b7429122eda2f4e1b0429ce2da02f5d1b8a28902d5b2fd21b47283c2df62e5f1b0b28e02c7d2ef71a1f277b2c082e971a5026292ca82dd719cf25bc2b5d2dbf195525332b062def18dc24642a7b2c7f186e24a529d02ba217382435291e2b4517ef23da28ae2ad51630236e28422a31166722f927b2291b15f8212c271229c314c021a92696289614812136262f286414d920b725c4271e132d20352542272012901fea24de2609122c1fa52495262e12e21e74243e267e11b01e3e24ef255511381efd238625f610ec1d8c232e25b9109f1d1523be242010411da5226624b60fdf1c2f221024870e981cb5217e23280e431c5521f922b60dc91b04218d22380d941bad203322140d6f1b7520de21820c871b49208921900c931b1f2033211b0c441bb41f0921e20bd21a6a1fce20220cd21a6a1fce20220c1d1d6623312486061d1d6623312486064c29ea2c352e2f23402a9c2e0730bc25f82ae92e34308026642b842f8130c826012cac2fad30f626922c0d30e7305d277f2c1630ea301a271b2c3d302c313926a02c76306b316b26662c6d30813167252a2c59307c31d723f92b1c302931ba21112ce62ffe300f216f2b752fdf302720cd2b4c2faf301b20f12a1a2f94306c1e722bb22e53306a1e472a7c2e3030011daa29032ee12f851c3129cd2d932f241cbf28892d582f171c7e285e2d2f2f281c3b28332d0b2fd51b12280e2df42e881ba627d82cb62e971af2267e2c262e8a197026142c8e2d221956268f2b1f2d0e19c125e82ada2cf518ec24342a742c3d183e247429c42b4f17f7231229282bdc16bf23e128fa2a2e168b23b928d02a041603236328552a98158a22c7277329cc1451222427cb28a314fd21aa266e28651480213526382809140d21c125e527691391205a256d2749131f20ef24d92693125c1f91245526df11de1e4924da257a11501e05247d250911f41da2232a25c010aa1d3023dd248510651ddc228d24eb0f1b1d7f224624d80ecc1c2b2204246d0ea51cd321a623390e3b1c5621f822ab0da31bb5201822a10c061b5720b221420cb71a4120ac21120cc41a34209221570b411a14208821310c0c1a901fef20550b0c1a901fef20550b641549222f23c803641549222f23c803d8281f2d582ece231c2a8e2ed92fff25882a7e2ef32fad256b2b6f2f72303626422cd22fbf30b926a92cc72fc23077268b2cf82ff0307326462c34303431ef253a2c333028315425272c2b30103192245c2c2d302d315f23e82b3f305e316d21eb2b07301f31d51f332c5f2fa330171d272c2a2f9a30d519572ce62e6f30fc180c2bb12e5a30d819c8293a2e1b30bf1bb329dc2dd62f461d3929c42d8b2f2a1dd9287b2d562f1a1daf28432d0c2fa11c7628fd2cbc2e211c1b28b52c792e121ba927782c3d2e991a3627222cf12d361a7826f22b802d9219f025772b1e2d1e19a825b52aab2c83187825332a502c5c18de24cb29242cc41779248029d32b90162a240c29292ba516b1239928782a2316de222728f829ea151522a927bb293d15d9217327752969158a21f626fa282015f7205e268a2898148520e22526282f141e206a2584271813e91f0925e026d112691faf246e266212ee1e6824ff2587118d1e3324ad253a11401e01246325fc10ed1da62323255910ad1d4423d8242a106f1de7228e24480f201d6b223c24de0eb61ce121d323500e5a1c4c211623460d2f1cf820a222120d0c1cb7206222e90cb01b7520d721a90c091b1f205421a20b2b1aac1f19217a0b281aa71e3e204d0d281aa71e3e204d0d6c235223df22af896c235223df22af89f4269f2847298b97bb29162e8e2fe424792aa42e1e30a125c22a112f493017266e2b6d2f8b3075261a2cc62fca30be26dd2b15300f319626e92b3c3032313f26e02b30302231d725f02b183010318225782b17303131b524ab2bce2f03313824752ba52fd4304223f62a4a2fad30aa21ca2a162f9a303920cc2a8e2e9830b91e712a5a2e56308c1dd229212e1730a51ca029d82db42f7d1c53297b2d372f961cdc281b2de72e7f1c8628f12cb32e2f1c4a28c72c852ef01b0e28972c4d2efd1ab1276b2c112ea01a3327342cd12dbe199a26e52b722daf19e7251d2bfd2c16196925722a972ca9181025152a412c5c18b224c429e92b0c1868247229702b981720241629072b1b17a423a828622a951622233c28de29b115a822e127bd294f15762299277a29281514220127d228d9145721762650284214f320fd250a28e61390208a258327471322201f2504279812891fd7249d2603122c1f87242c264311a71e4324c925e2106f1e04246b254f10121e742310255c0fff1df922b224450fd51d94226b24530e951d26221c240e0e2b1da7219e239b0d741c3621ff22d40c1b1ce720a622740cb31a7b205e22100cd51a3e20ec21250ce41a1e208a21790b581ad21f8221b00b5b1a571f252176085b1a571f25217608692142227f21df11692142227f21df11fe2424288c28b21ca629d72d452f5f24b22a742e0e302f25302b132f51307225012c892fb2303326cb2b233018316726c32b213015318026012c473052319426192c43303f311426272c2f30283180257c2b08301531b724de2a992fd1300024af2a5d2f9f30b822f22a2b2f8e30df21a52a012f6b305820e22aba2e5c303f1fea2a6e2e0930f41dba2ad82dbe2f5e1d7129de2dc02f571cb628592d3f2f0f1cab28e12c922e051c9c289f2c462ef11b6228742c062efe1a0f284d2cd92dfe1a7427232ca42d6c1ad526e42b792d521a66266d2b412deb19fe250a2bda2c8b19a225862a872cda1810250a2a372c5c1892249f29d52be01734244529342bc717f023fa28e72ad616a223b728a82a9416402370285b2a3f16d1222d28ed2970155322e42782290c15f22172273129be147921f326da285e142f21602661282214aa20be25df27d912312048254c272712cc1ff324d726b8115e1fa924682668112e1f71241f26d010d91e2124a8252710181e69232925640f901dd522b824bf0e3e1d79227f245b0ef41c2d223a245f0d751cd4210224670d6f1c80215223600d051c1721b622e00c7a1bc4203c22890c3f1b95200622640c261b6820d021c10b731a1c206d212c0a8f1a3b1fb4201e0b8f1a3b1fb4201e0be5217522d3212513e5217522d32125139e25aa282829771ddf29262ea52f73249c29652e07300e25952afc2e58304d25552b592f8d30cb25832b8e2fb3302c264a2bbb2fca303826032bd42fcc301926fe2af12fe630dc25162b073027315e258b2bfc2fe830e024532a472fad302a23162a012f84301e223c2af72e8b307821d72ac82e74302121522aaa2e523056207c2a262efd2f3e203b29e72da02f821ec828842d2c2ff31db2283a2df82ed81d7f28f12cd82e4e1d3b28b12c9e2eb91cdf27652c372e251ce527122cd62d4e1b3d27aa2b8f2d3d1aab26512b3a2dbe1939260f2bf92c5c19d025e22acb2c01196a25a42ab02caa1806253f2a882ca6185b249f292d2c081826243329832bad17a923e728e92a99166623aa28a22ae71568235928272ae81531230228a429bd1591228d275029d214222233271629e414be21e626d5289514492189267e283714e220322633282b138d20d025c327ae12212049251c270f12c11fd524ac26b1113c1f8d2454264f11ec1e4924ea25a410361ef32388258f10d01d57231625ca0f5c1dd522a1242f0f121d5c223a24cb0ed61cb121df237b0ea41c14214a23a10dec1c8b20df22f80d891cbc207322800d361ca5205a221b0d2b1c662018220e0d541b6b1ffc20040b391b6f1e3320af0e391b6f1e3320af0edd21392219229c11dd21392219229c11fa25b42821290e1d3829df2d632f1f24b1295b2ee32fc424852ac42e3e302625ed2a252f6f3094251a2b5f2f9630d625352b9d2fb230b1255b2bca2fd53075250e2bd32fe5300325712bd92ff630cf240e2bd92fff301b24262b8e2fb130df236a2a442f92307222322a0a2f91300822e229e32e7430fa201d2a7b2e1130c820b329f92dd22f18201a29922d4c2f591ee928462dce2e2b1dd228fa2c7f2ec41c82289b2c202e2c1c3328502cdd2dc51ba327202cbe2d111b2227ed2b8b2d0e1bcf26b42b662dde198f26602b2b2d3b196226e02ab12caf18f4255f2a4f2c5e18a725292a2f2c26184025ed291b2cb517e724a029e62b32177a245829992b2417352409293f2b2d160f24d028c62af415dd239428482a4515672360280d2af614d2222328d429921465229c275d294914f221ef26cd28f81378218626802854130f2120264728c812ac20b325d02742122820342505279211e61fd3247b264b11991f8e242b2617113d1f4124c825da10b41edb2362251010701e4c23f924ce0f1b1ecc22ab249f0edd1d67225d245c0e641df2210624d90da71c7c2165230c0d4a1c28210123330d051ce620b222e00cd31baf206122bf0ca41b7e201c22a10c9f1a3120b021dc0c271beb1f1421290e271beb1f1421290e4c21a0210d22bb0c4c21a0210d22bb0c4926d5283629b71cd3289c2d242f9e23dc29482ee82fa024f029d52e4630e124582a222f71303725af2a602fa4307e25dc2a812fab3087251e2b862faf3047256c2ba32faa302725aa2a682fa030bb24552a7b2fae303124612a462f7f30d623fb29cc2e373095228a29442ee42f64215b29092ea72f87209129f62da22f2c20c529b32d932f2d1fe929612d352f391e9729152dd32e2c1d1d29d82c782ebb1c38288b2c432e2c1c1c28622cfa2d531c3827022c842d9a1b0527a52b502d641baf267a2b352d9d1a44261d2b092d331aca25af2abc2cba195025332a6c2ceb181925f829472cb818e424c229222c3718ad247829e22b07184f243629792b6d170924e528112b70169e23ad28a42a131647236628452a5715ea223128f2291215b52200289f297e145522ae274a293e141b224b27f9281814a521e826a5289113112162264c28ca12ab20e725eb27da123620622536272e12df1feb248d26c711651f722401266d11e81e24249325a010901ed823422565103a1e6123f4242c109e1dce22ad24d00e441d3f227124620ed51cc92140247a0e681c74211724570d361c2d2110241b0d041cd82088235b0c031c9f2057225a0cf61b57209b219e0bbb1aff1f75214d0b381b941f0121c20d381b941f0121c20dd419f8215e231808d419f8215e23180881276d2c932d9121a528d92d742f0a2463295b2ee52f4124c529a02e36305f24392aec2e5730b724872a342f8430f3247c2a582f9d301f25682a792faa3029251e2a6c2faf30ed240b2a332fb030ad244a2a402f9c304424392a092f65307223f029b42e3d305922a729522ef02fae218829142eb82f61210a29c02d712fbe20a328602d162f37205a281d2db42ea31f2428c82c482ebc1eea27812cf52def1d6e273c2cae2d191d1f27092c782d6e1ced26c22b472d161cb326812b1e2d7b1b71264c2bf92cc81a1c26ff2aca2c6e1aa925b02a972cf6194125562a692c3219f824132a3e2cea18ad24bc290f2c531874246c29bc2b1f1850243929722b6e171124e628072b7d169e23a3289a2a131628236328332a4115c6223b28f029f814b1221a28b929e9147522ef277e29bc140322862741296914a0211b27e628211416218d266f287713b520f5250b284f12502077255927c7111f20fd24c0268611c21fa4243c26b310441f5024d5256810bb1e00247f2515102c1e68232f25b20e921ddc22d5240b0e041d57228924150e991ccf212424930d4b1c5b216e23c00d1c1c1221f122820de71bc52083224c0d671b81204c22f60c321b3e20ba21d20cab1ac41f2821e50c911a5f1f3421d20c911a5f1f3421d20c830c941f56213700830c941f562137003128712c822d9d20da28b82d222fbb22d328032e702fc6231729972e1c302f24a629fe2e5e30bb24092a302f88300e25542a562f9a3019257f2a712fa53007254a2a442f94309024252a0e2f7b301124012acb2e49306023c4298e2e1c308722df29772e2130b621bd29422e10307c20ed29e52d962f112026296d2d362f101fae28192db12e051f8728d82c3f2e801e4f289e2c042e2f1ef6276a2ccb2d761d4b27192c742dc61cf826b82b262d561ca726572beb2cda1b6c260c2bc32cc31a3c26db2aa92c2b1a0526aa2a932c9219c5257f2a7b2cf8189d25492a622c7a1872251e2a412cfe172d25d529082cef16e4248329a42b8e1681243c294d2b9d163424fa28eb2aa215ec23d128a62a4e159123a0285b2a121504236e280e2ab314b8223f28d1298114752213288f2953144b22c2275529371418225427052915149921bd26a4288013fb2013264328ad1271208b25af27f31116200025d5260012a61fa22455269d11081f5424de25b610861e052478255f10131e792316251210a01dff22c3248a0f381d73225b24fe0ec81ccf210224690e641c45211f23e20d211cfb208e22880dfd1bc3203c22d80ccb1b9d202522390dd61b7620df21c00c991b3d20ea211f0c931af81ff921680c931af81ff921680c00008f1f3f21000000008f1f3f210000cd276f2c682d0a21f528c12d0b2f9022d028d82d6e2ffd222429b32e2c30a123f729072f6b306d241c2a0c2f74308924e629082f69307824df290b2f76305b24d029112f7f303824002af92e6d30f223ed29e72e7b30b7225d2abe2e4e30fd214e29442e3730fe20ff28fa2df02f8b20a028a42d672fd21fb228652df02e571f7728d92c912e691ed927762c1f2e631d9427632cb62df51c8c272c2c692db21c6327d12b2b2d201c0b27542be72cf71aba26002bbe2c391a8b26cf2a9c2ca3194d268f2a752c07190d26502a452c7118ba25172a192cad177325e229fa2b4d174f25ba29d72b1e170425a4299e2bb916ce246429632b711661242d292f2bde151524f028e62afd15c323c828a62ab21560239f286d2af014f12274282f2aa714b0224b28fc297b144b222728c0293714e421f3278c29531491217f27462916142421fa26d028e412c6206026482865124e20b125ce27c511d51f2625142740113f1fa4245a26db10be1e2324a8258510381e972341252b10d01d0523e224ca0f7d1d852295245b0f5b1d2b2259247e0e001db92104240f0ea01c54214e239b0d3f1ced20b822b10de21b8d203522490d411b4a20e821dc0c451b1c20a221de0cbd1aea1fc321840c0d1bbb1fa421b90c0d1bbb1fa421b90c00004b1e5f20000000004b1e5f200000a126d52bea2cb5204b286b2db12e5f22c728102ed92f5322f128c72e3e30552321290f2f7130c62337292a2f913009246a292a2f8a30302484291e2f7b302e2477290a2f6d30c3236029c72e483076233329a12e14300d23ea28752e0e305a22ab28fa2d9c2f7021f128b52d2c2ff720ee287c2def2e532040284a2db42e301f9627a42cd02dee1d6a27362c6e2d8f1d6427132c382d121dd9267c2bf12cb21c9326142bb62c4d1c3126c12a8e2c0d1cd325782a6e2c3f1ba1254e2a5b2ca51a7f25312a462cc9195425172a362c45193925092a2a2c2a190425e329172ca418e424cf29022c3718c224b229ba2b19186e245e295d2ba2170d240e29042b7616b623ce28b42a26167523aa28852aff1454238328512a711423236e282c2abe132a235c28082adc121b234d28ea29cd12d6222728bc29ac113f22d7277829fa116f21332702293311e52098267f284f118120e025c92776111b200725cc267410a11f99242f264d0f651f2b24a2250310d11e90232e25860e2d1e0323c624e90dbf1d7c226724800d641d13221a24d90df41c842193235f0d4f1c1921bd22ad0c061ccb2037225e0cc51b9820fe21b60c8e1b7a20e121950c991b6020b1219b0c2a1b3820b621580c8f1af81f0222d00c8f1af81f0222d00c00004f1a9e1c000000004f1a9e1c00003b26822bcd2cdc1e7227c02cf02d74202228b42d332f7921bb28982e2c306a2270292b2f7e303323ad292c2f9b30282389290a2f843027236529ec2e6730a9234929be2e573056233b29942e40306d2220296e2e2b3075222b29542e0b300422f828092eab2ffe209228962d142fbe2039280a2d6a2ef31f3628912cef2d1f1f00284a2cbd2d411e6427032c8c2d8a1d0727692b3c2d981cb426d92abe2cea1b32267d2a682c501bd425352a462c821aa225092a322cef197325e729202cbd194825c829152c39194325c629132cde184a25d629152ce5187025ea29132c56189025152a272c75176125e129022c8516c9246529392b6a16ba23bf28782aac156e239128622a671659237728482a541650237728302ae61428238028302ac41343239228332af41224239c283a2ad512c7229228352aa011a3224e28ec295a12c1213d2704298211c3203d2637282a114a208d2582273311cf1fc6248726bb10d91e3e24e2252710681ed4237525c50f101e26230425590fea1d91229a246a0e9f1d1f223b24610d451da221b723b70dfe1c2c211a236b0d9f1ce120aa22040d4b1c95203a221c0ce21b6520db218b0b651b32209c21030c501b0c204d21ef0bd21ab61f3d21220c9a1a581ff620290b9a1a581ff620290b0000341c161d00000000341c161d00000e25472afc2bdb1e04261c2c4f2d2c201c28082dd32ee71daf28062eb62f4220da281b2f6130bb223e29e62e8a30c7233829b22e5c303e233d299b2e4230c42140298e2e34301d223629762e1d303c2225296c2e143027220b29452e03303b21f328ed2dab2f5820d928602d022f19208e28cc2c4b2ed41e2a28402ca62db61d9327d02b3b2df41c4427472bd52c4a1c9726b02a9d2cf01a80262d2a3c2c6d1a4e26cf29092cd619e525ac29bd2bd51941256c29572b8819f9243229032b3c19c2240e29e82a6718c624fc28d42a9d170a251929e22ac1160e258f29212c2016cb25972a9c2c0617e425092baa2c24174925a1296f2b0f151d243c28da29b910d1222628ed298612c2222928ed29d215bb223628d529cd154c23a728522ae41459230229cb2af91326231a29f42ad812dc220f29f92ab1117022b128792a5711d321b22750291610bb219f267528950e4d21bb258f27710f9320a5243926960f501feb236725000f801e4123f6240d0fe41dbc22a924240f991d4a224b24ca0e741dd921ee239d0e3d1d8e2187235a0ef81c52212e23060ea11c0f21e4229c0d4a1c98204122330d131c3a20c0216c0cc41b20209321360cce1b03207821780b291b981f83210709f11afb1e0621e300f11afb1e0621e30000009819cd1b000000009819cd1b000082246829cd2a891dff24782a0c2c2f1d6a271d2da72e531d412920305031321d3c289e2ce42d7c0ed825bf291e2b760fb425e428392bbb94f5271d2bc52c5118c528d12d7c2f61235929892e2e30e822f6286f2e27304022a328692e27301a21ad28ff2ddf2f8d209b27892c272e6e1e0d27cd2b3f2dbd1deb26182bb52c681d7a26aa2a5f2cdb1c1326382a1b2c5c1cc025d229cd2b861b96259f297c2b981a71257a293f2b141a45254129082b8c1915251729ca2a5a19f624ee28992a9718ce24c328662aaa17c42493283e2aff16c4245528022a6316ee231128d329511543230c295c2b54155628a42dad2fcf193c216d28572904133322d325592827141f23142705293a151a2231270a29de143a22a2272a295d157c225028c4292c15b2234a29502b5e138824322a1d2c3411ee23082ae52b160f2d232829c52a1f10d121ed272829d31014219c265d28dc108b20a625a72759101420652411266c10581f8f2359257410631ee422ee24be0f931d58227424c20e721dea211e24e80d3e1d9821f923af0d271d6821a1233f0ed11c19215c23d70d5e1cc920db224c0dfb1b83202e22540ca81b4020be21540b9e1b162093214b0b981be71f4b21450b061b581f4521b90a541aea1eed200e0a541aea1eed200e0adb0d131e2f1e4206db0d131e2f1e4206a924f8280b2ae01d00247b28f229ea1c9825cf2a252cfb1dd32d4935f236d51c1026f22ba12c491e5f25f9297c2b0e1d8925052abf2b721e6425e129712b971d40257d29212b09170425de282e2a0a93062416288b291b844b27da2a9d2ca790d828ba2d732f2c1c20251c2a112c081bf1244429182b181b46256729402be61a63256c29502b0b1b762561294b2bcb1a59253f29182b501a42251729e12a89191325e828a42a5719da24b928642acc18a6249328292a4d1889246e28fb29d01771245228d329161759243c28b22962163524112885292d160424a4273429e515cb223f27b728fc14971b6c2070221e0cfb1d3022b525ba0db5202c255127e812ee2042257127de137321bd253a280014072246267528c51104221b27c92886120f231429c42aa913e424ce2b692d3e0e4f25532cb22dbe1016241d2ade2bbd115a219627e32870104f20d9249c2620101c20ed238425fc10141f282313254a10641eb622e724bf0ff91d382270243e0f7e1dbc21fc23a90e3b1d5f21a923580e0c1d34217e23790de11c072146234b0d971ccd202b23910d411c82208d22280df01b4c20de21d00c801b0b207a21110c0e1bcb1f3721a70b1b1b8f1ff520cd0ab31a741f0621440b7f1af21eb1205a0c7f1af21eb1205a0c00009e1b481d000000009e1b481d00007a23b127ac288f1a50254228ad299d1a65214f25d726c419f01aba2015220a14ce239c28d329ac1ce124bf29722b4e1e0425f4299c2ba51e2425102acf2bce1e19250b2ad92b961e1a25f929e82b6e1ee524c929b12bb31d6024dc28862ad81ae4203f255d279e0d5b247627e528c80f212597280c2a4114d9249728382a2d18ff24ac284c2a9f1806259f28492a5418fd249328432af517e02475282a2ac717b0245f28092a0a188b244228e229d31759242d28bc297e173f240e28952950172b24df276829a6162e2497273b2923161a24692720297f1524242b271a298c159b23c026c12894158e21a6258c271414912082243a26b312722044242f26f61189204f248126801196207a249526251284206a24c42634136d209824c626181438204125ab27bb125026be2c3a2ed50ca1286730bc31ba08c6226428582959130120fa23e325db10e31fef22ff244911031eb32295246910451e512273249910ba1dff21442434105e1db8211e24310f241d6c21c523e40e121d34217623260ee01ce7200523e90daf1c9f209e22150d511c3f202c22af0c081c0620d2215f0cf41b861f8521510c031c631f3021ae0bcf1b2c1f0e21790bb61b131fd620650aa31be91edf204f0b9a1a951ea6206c0c9a1a951ea6206c0c0000dd19d61b00000000dd19d61b000007220e276028711aa82283260b28431a1920eb2458264c19c8213f250127a119bb2339286529c51b9524ec28552ac01cad246c29002bd91c0825c5299a2b381d4225032ae72b1e1d9b251b2a022c191dc125bd297c2bdd1c1b25e1284f2a511c72233f28c229881ac8231a28cf29971921243928d8299d1856243c28d529031876243728c729af1781243828bd29c31776243528b829af1763242628af298f1749241d28a32962172f240928902935171324e22780290517f1239f2759295616b5235c272b2926166d231327f728ec150323bd26ba289815bc226d267428f2144922f3251d283614b52166256e27a6135621f824d8262713d520aa24842618135f20712449266a1256204b241e26cf11662050241f26e5118920412406268011f22052241626bb109b1f8d23a825560d8f161d1ac11c6b00111ac41e1a224208741e52212324d30f011e962116240610811d752101240a10661d6a21db233c0f401d4621b223090f391d1a214e23560e001dd120c0220f0e9c1c86202d22970d4d1c4620cb21aa0c141c1920a3216c0ccd1be91f7b213b0c771ba91f69210d0c5f1b661f4121000c6a1b481f2821190b641b1c1f0921130b741bf51ed7203b09611bac1e9920000cad1a511e2b208a09ad1a511e2b208a090000a319331c00000000a319331c0000a9221b260027c818f1201f26de27e91997208a252627c8193b220626e7277719c823e3273129131b16249c28062af41b4024f528772a231ca8243c29cf2a621ceb246029fe2a791ce2246329072b711c67242a29b22a251cfa23be282c2ac41b02246f28be29081b35243d2890293c19412439289d29541762242c289729fe165a241c289729f1164b240e2888294d162d2407287e29a9161a24f42765298b160b24d82751297316ff23a6272e29de15c5237d270f29b41577234727ed287a1540231a27da28c815fd22e026bc289315a922b5269928511557226e2672280f15e021f92519284f1464216e256527e913e820e524c426331393209b246f26b712442060243126ce12052032241726e611c11f0d24fa25b111b61fe623e525a9115e1f9523d72568111a1ff2224c25c210af1c41205721470e5319a11d991f220b6d1c13203c22580ba01df920b8234f04781d342112243c0d781d3e210c24ef0d421d1e21d723b40d0b1dfc206623780dcf1ccc202523380dc51ca920cc22900c9f1c7d20a1226c0c791c60206322480c5b1c41203a222b0c251c0f20df21e10a351b8e1f6d21e60ad51a0e1f10218b0a7a1ab61ee520330ac21aaf1ebb20770aa61a761ec7205d0a511a3d1e5f20a90b511a3d1e5f20a90b00000000000000000000a319331c0000a9221b260027c818f1201f26de27e91997208a252627c8193b220626e7277719c823e3273129131b16249c28062af41b4024f528772a231ca8243c29cf2a621ceb246029fe2a791ce2246329072b711c67242a29b22a251cfa23be282c2ac41b02246f28be29081b35243d2890293c19412439289d29541762242c289729fe165a241c289729f1164b240e2888294d162d2407287e29a9161a24f42765298b160b24d82751297316ff23a6272e29de15c5237d270f29b41577234727ed287a1540231a27da28c815fd22e026bc289315a922b5269928511557226e2672280f15e021f92519284f1464216e256527e913e820e524c426331393209b246f26b712442060243126ce12052032241726e611c11f0d24fa25b111b61fe623e525a9115e1f9523d72568111a1ff2224c25c210af1c41205721470e5319a11d991f220b6d1c13203c22580ba01df920b8234f04781d342112243c0d781d3e210c24ef0d421d1e21d723b40d0b1dfc206623780dcf1ccc202523380dc51ca920cc22900c9f1c7d20a1226c0c791c60206322480c5b1c41203a222b0c251c0f20df21e10a351b8e1f6d21e60ad51a0e1f10218b0a7a1ab61ee520330ac21aaf1ebb20770aa61a761ec7205d0a511a3d1e5f20a90b000000000000000000000000000000002021be278e28c51b8628b62c632d14242129fa2cf22db524182a902daa2e6525af2af32d1d2fcf25492b472e772f1a26cb2b922ecd2f2726202cce2efe2f4026512ce32e2130fd25742cfd2e2d30c224592ce42e0a305b23242c1d304a31221f2a2fa734d835071d182ee93323359d1ed12bd13080313c1e312afd2cb52eee190229352caa2da31c8528102c882da01d65280e2c6a2dbf1d6826b42b452d991cef2ac93093316a1eba2ca333f734d81b6727442e8d2f24163a234e29552b25170a247d28a82a8318d0232429e12a5c18a4225729c92a0714d8209e287c2acd0e7f23092ab02cd403da24442d182ff4843a22dd286e2ac1127820302518282113f22099250428421374205a258b27f811ca204e253527ce1167200b25c626e6112120b524542688117e1f5b24f02505110e1f1e24a625ba10b91ecd2368258110671e722329254a102b1e3123f4242210e21dfa22c624e20f7f1da7229524aa0e551d69226024770e441d2c223424620efa1ce8210d24660dcb1cab21d423330d6e1c76218323cf0c511c5e213723af0c0c1c2c210723640c841be2206922140c281b6420d421c40bca1a2c20b1215d0b721a08208621fe0a471abf1f4221d00a351aa61fed20bb0a4b190e1fbf2064086c1a171f7520260a00000000000000002021be278e28c51b2021be278e28c51b8628b62c632d14242129fa2cf22db524182a902daa2e6525af2af32d1d2fcf25492b472e772f1a26cb2b922ecd2f2726202cce2efe2f4026512ce32e2130fd25742cfd2e2d30c224592ce42e0a305b23242c1d304a31221f2a2fa734d835071d182ee93323359d1ed12bd13080313c1e312afd2cb52eee190229352caa2da31c8528102c882da01d65280e2c6a2dbf1d6826b42b452d991cef2ac93093316a1eba2ca333f734d81b6727442e8d2f24163a234e29552b25170a247d28a82a8318d0232429e12a5c18a4225729c92a0714d8209e287c2acd0e7f23092ab02cd403da24442d182ff4843a22dd286e2ac1127820302518282113f22099250428421374205a258b27f811ca204e253527ce1167200b25c626e6112120b524542688117e1f5b24f02505110e1f1e24a625ba10b91ecd2368258110671e722329254a102b1e3123f4242210e21dfa22c624e20f7f1da7229524aa0e551d69226024770e441d2c223424620efa1ce8210d24660dcb1cab21d423330d6e1c76218323cf0c511c5e213723af0c0c1c2c210723640c841be2206922140c281b6420d421c40bca1a2c20b1215d0b721a08208621fe0a471abf1f4221d00a351aa61fed20bb0a4b190e1fbf2064086c1a171f7520260a6c1a171f7520260a5325ad286829f2195325ad286829f2194229752dbf2efe24932afd2d192f6725642a512eb62f6026552bc82e14301327362c5a2f5e305327682c9a2f98303d27522cd22fd8304626d42cf32ff430da24b82c2b3028319724aa2c6b307e318a24ce2c23314832e622fd2c2832a03335226a2cc3314933a620572c99301032ec1e242ae02e5630131ed02afc2d812f6f1d3d29bf2d322f2f1de028482db82e711db329de2d962f2f1a4129fc2f1731dc1c1b2a9230e031ca132129932fd5308c92eb28ab2d8f2fdd9ce626a82c822e498d5926a82c042e75945726f82c722e12965026b12c5b2ea797c9257c2c3c2e04975625452c1f2ed08e73247e2a882c61135e223928ce297d15fa218627762988155c21c82623299e143721612697282914d22099257027b0135b202625d22664120320e924ab26e311be1fa72446263011261f6124f225ca10211f26249d255210141fcc2342254a10071f6223ee24a00fbe1ef622bb24500f681e9b228424f30ecf1d682258244e0e451d20222524b70ddc1cdf21e123450dab1c97216623100d8e1c5421e1225c0c7c1c072185224b0c291ca6200422f70b011b4c20ab21b40a731aff1f7f212c0a421ac51f6921fd09361a8d1f5921f209821a4f1ff8203a0a141add1e7320d109f919651ecc1fdc06f919651ecc1fdc060a265b290d2a211b0a265b290d2a211b4429822db22e81254a2a662eaf2fad262d2b182f4e308027252caa2f9d30de277d2cf92fb93042287d2c0430dd30ce27e62c2e300231a5269c2c50304a31d626ed2c8a3081318626182dd130d931cb24e42ce030f831f523de2c1b317032bf212c2d2931693275200b2c9a30cf314220f52bf92f3631df1fdd2a4e2fa1303a1fff29de2e5030b21efa29c22e5f30e91dba29de2e7430341cb229272fa0308b1c6c295a2fcb30e119d528d52e7230511479283a2ef32fda8e6d28bc2d752fcd9837273e2dc62e25949426f72c5d2e8f936026d02c512ee28c25267c2ccc2db50cf825172c652d9e0f7b249a2a5c2c4a1265232129282b1313762361281c2a2413d422bb275629aa110d22fe26c82856134c2139262c281913db20be25c32720137420732570271a1332201525f626b112b81fc7247a26aa114a1f732406265a11a31e2d24a125de103f1ee6234a259510c01d7423f3243810751d1523a52401103f1dad226124080f221d47222024e10e1b1def21c923300eeb1ca2215923f70dcf1c67210023380d841c1921b922e60c2c1cc4205c22860cfd1b6e20f121a50bc71b4520af21740a891b26209321400a2e1b0e206721f4091f1bed1f7221e8094b1ad91faa21060a961b861fec20c706961b861fec20c7060000981e561f00000000981e561f00002b2a962dce2e11255e2bc72e073049264c2b2c2f4f306527532cf42fc3301b28df2c3d3027315028d02c5a3049314328e92c623056310928f02c953089317b27182ddb30d9313b27f72cd930ff314226d52cd73004328c24072dd130f431f021ab2cd63005329e20182d7b3099317a1f2b2c133018311e1e162b522f8a30331d102bef2e7030481c532ae12e62303d1ccf29e42e6f30011d9829d82e7630d21c5629d32e7430411c2d299c2e4b30471ada282d2e1c3092159228ce2dbf2f1514fe274e2d642f9714b627fb2cba2ee4128e27a12c242ec012ae261c2c652db01494256a2bec2ca014c624982a642c2d153224a5299a2ba0158823da28b22a0216bd224428002ace15ee219f2760291b15a121f226b8287d141b21422631281214a420d925d027d0124d2076255f27501202201425f4265f11bb1fc52489262d11581f7d2431267410f81e3d24ce253910961e03247a25fc0f571eb2232a25af0f2e1e6223f9247e0ff11d0823bd24720eba1daf228824360e571d4c224624cb0d1e1df0210424e60ca31c9a217e23080d331c3221bd22050c6d1bbd200c22070cbe1a6320a621740a7f1a30206121380a761a102032212f0a901ae31fe8207109e319591fc420230b701a341fc720500c701a341fc720500c0000381e651e00000000381e651e0000d729d92d262fbb25792b322f4a301827652b552f7a300b28032c0130d63062286f2c5c304d31b528d32c90308431bb28da2ca230a2315f281d2dbc30b231c027ec2cc430e4317627d52ce3300f32b426cd2cd430fe31e625812caa30c53186245a2c62306e311523202c2b303d31ec21702bd42fe730dd20af2a882fc330e31f2f2a3c2f9730e71ef429ac2e5f30e31da6297c2e3c30dd1c7f29492e1f30081c3e29192e0130061be428e42dd02f8e1a8728ae2d9e2f7e194e28732d5b2f1f182328322d002fdd169a27d72c7f2e4f16d3266a2cfb2daa155e260f2c7d2d1916c225612b0a2dfc160625802a7f2cbb167c24c729062c70153c243d29462b98140a24a928682a621470232828982909148e229a2701291c130d220527ae2856137321462642289c12d0209d25a327d6117b204c252427dc105a20f824bb26b8102020b0244c267a10cd1f7024f6253b10271f1d24a025c30fa51ec8234e25350f1a1e5b2304259f0e9f1dfd22b524190e731db2227a24e90d271d5a222d24970de61c0b22f323510d871cb6218d23ea0c371c62212823930c5c1be8209622fc0bdf1a80200f22750be41a6020e221980afb1a6120d421af0a171b4e20b121c90a971a2b2077214f0ae31ae11ffe20970ae31ae11ffe20970a000003100c1b0000000003100c1b00006b28562c5e2dfd21722a132f31303826052c5a2f713060274c2c2430e43014289c2c733063316028cb2c9930a6316528052dbf30d3315d282a2dd430f131fd270a2dee301732a327ef2cf6302c320127cd2cef302a325b26982ccb30fe317f254f2c8530b6317824ea2b6a308e31f122982b193029313521022b852fea30d31fdc2a242fac30e91d8c2af82e7b30631c412aa62e4730951bd829462e1330161b64290b2edc2f8a1aea28c72d932f961a7728702d2b2f8e1a4428172db02e421ad627ba2c372ec01925276a2cce2db3199226232c6f2d3d190d26ba2b222d37198125362bdd2cbe18f024752a662ce0177d24b929c32b291750244329152be216dc23e528a02ac5152b237c28322a43157422f6279f29531409222e27fa280b14b421a8267728a4136221392618283613b520bb25a3274f1226203a252e278f118f1ff024ce261011251fa6248426c910e41e73242f269e10ae1e4124e7257a103e1e032479252f10e91d8f231f252a0f991d1823b424ca0e381da0225d24530eea1c2f220824550d901cac217923f30c221c4b21fa227c0c931bf02094221b0c561ba9203622f50b211b6820e021bc0b381b34208421e80a451b0d202621f50acf1a951ff220620be91a601fb520bc09e91a601fb520bc09ae2411286129051bae2411286129051b3f299d2c982d9b217d2a0e2f393043266c2b912f9a3066271d2c22300331cf278e2c55304d312e28f62c8e3093315028df2caf30bc312828142de730f8312c28472def301832aa27e32cd6301b32a026da2cb730f531a625ab2c8b30ae316524c92c41307331de229d2c0c302b31bd21e62bdf2fde306920b82a722fbc30131f772af82e5c30fb1d352a802e2430f41cb529212eeb2f301c3c29d12d992fae1bcf288f2d582fac1b9728622d1b2fe91b6128382de82e8b1b3828112dbe2ebb1ad427da2c7d2ebe191827852c082ec1189426202c892d68183826862b0f2d2b18a925ce2aa12c2718bd240b2a272c8f1746247d29872bd11612242229202b7e16c023f828f52aaf157d23c528be2a051515236028432abf147622c3277529d61327222427d128ad12e521a8266a2865126f212a262228e5111021bc25bc277e119d205a25412798113b20f724b92621119a1fa12446269c10081f5624d6254310911e11247725f70f2d1ec02327257c0fc71d3e23d924010f5e1de0228e24d20d161d83224a24850db71c21220b241e0d8b1ccc219c23ed0c261c3f21d322800cb01ba52013225c0b121b6b20c521ac0bfb1a5220ba21af0af31a3b209221a70a6e1a1b207121270a2c1a9a1fd720e8092c1a9a1fd720e809c024632898296d1bc024632898296d1b1529c22cae2d6822862a0d2f3c3067264b2b382f5d30ec261a2c2030ec30a727832c5f304731fd27942c6e305531d027af2c9d309731fe27bf2ccd30f131a527e72ccc30e7311e27f42cc430de31ee25f02ca930c73155241c2d81309d310822112d543066315e20412c20301d31b31d712cd02fdf30401c4f2c202f85300c1a862b922e4930331bef29652e1e30bb1c62290e2ed92ffb1c3a29eb2dac2f2b1df128ae2d6d2fe31ccb28682d1c2f6f1c96281c2dbd2e501b4928c82c5c2e4a1a0628792c102ee8196b27232cca2d71190327d72ba02d26194326842b482d9818bc25c52abf2c351846252d2a482c1117c524c529162c641688246729a12b7f154524f328ed2a2d15d8239f285e2a4215d9223428f02996142422be27a4298214e1217b275d2951148421fe26eb286614e4205c267828ce138920dd251d28a81231206b2592272712fc1f0f25f326dc11981fbc2484269211011f6e240f26b1109a1e3d24bd256c10471e08246b259c0fef1dac232a25320fb31d4923e4242f0e661de7229824dc0d121d6e224724800db11ce921e223170d701c65211e23400c6d1c0b21a9223c0c6b1cc6204a223b0c201c7920cc21e60b341b24205721e50a4c1a981f0221a30b451a831e0d20330c451a831e0d20330c9325f827cb281e8f9325f827cb281e8fa2270e2b4c2c161a5f2a292f5e30d825262b342f72308f26572bd92fb73016271d2c3a302631ad27892c6d306931be27e12ca230bd318c27ef2cc530f3312a27d82ca430c7319126c52c9930b6312926732c773096317725302c46305c31e124482b19304d318c23212ba22ff3307c22f22a582fc930fd209e2afb2e9930d01f512abe2e5c303f1ef629482e2530221d9629e12dc32f751c1d297e2d332f681cca283c2de42e201c8c28092dab2ed61b5d28db2c7e2ef61a2628a12c3f2e161ad027712c082ebc194127372cb82ddc18d626e12b502d95184c26232bc62c3818ce258e2a6f2c42182a25162a292c9417ca24cb29e02ba41763246e295c2bff1617240e29e02a01168623a528442a8615f1224428ce2918158322fd27af295d148722af276f2960142d220427d028231457216d2650282813ea20fd25092896129a2098258b272b12362032251727a411af1fe724a726a810431f922432266710c51e4624cc25580f7b1e08246825080f291e89230f25e60df61dfe22ab24b50dcf1d96225f24d20c8c1d17220f24990c231d95217d23430c691c2621e122520b061cd6207e22ad0a6c1b7b202b221a0b221b4820fd21bd0bcd1a0e20a221600bf219b01fa321b1094e1a2f1f50216d084e1a2f1f50216d08d021fb2638283c17d021fb2638283c17d025e62a382c651e9b2ae82e2a30e624502b0a2f5d3002268b2b0730d03051263e2c5a3050313d27462c9730aa316e277a2cb830cd31c827882cb530db3198274a2cab30cb310d27252c9830ad318c26cf2b4d306c31cb25982b0f3026310725f12abd2fe3300b24c82a6f2fb130d122ce2a322f813089219a2ae22e5530cc1f262a9d2e4130b11d582a3a2e1330a81c0a2af92dc62f6f1c13296d2d3e2f0c1ca428192dc82e671b8c28c82c652e411b4f288a2c0d2edf1a09285d2cd22d701a8a27292c9e2d031af126f32b652d89198726812b2e2dca184c261e2bec2c9f18d925a42a8b2cd61718250e2a1e2cd316c024a529aa2bf8163c244929232b371608240329dd2aea15d123b5287b2a3c15832374281a2a081505233928c529b5148a2202287729ed130522792724294c138021f226c728ab1229215c264e284112ab20c325cb27a91140204d2538272711f21ff924ca264f10971fae2461261e10591f69240826080ff61e19249425a90e3f1e542321252f0d9d1dbd22b724a80c391d6c227424550cda1c19222624070c681cbf21d123380c4b1c6c213d231c0ce11b0e21b5228b0b441bb0203222f50afe1a7d20ed21b10a061b4e20b521d409521a0b205821a505701a151fae206507701a151fae20650701217326c327f31401217326c327f3149d25e32a482c001eb529e42e30300e252d2aea2e5030dd251e2bd62fc8301326c82b2130163184260b2c42304b310827f12b50305f312927e12b593076311a27ff2b68307c31d326162c6c308c31ef25b32b4430533157250e2be62f23318f24fd2a782fd7301224952a4f2fac30d322752a412f9430df21d429c32e5430be20b9295c2e0c301b205829062eaf2fa61ef628992d432fdc1da9283f2df12e341d7828ff2cbe2efe1c4a28bf2c772e3e1ce3276f2c352e4c1bac27252cdf2d1e1a6827cd2b862d6f192f27902b5a2dd018b9265c2b2b2d811832262d2bf22c8c18c725dd2aac2c9c184c255f2a682c3918a524c029162c69172f244a29732bad16d8230129082bc215ab23c628c82a23157b237c284d2a031528231a28c0295714892296274829ec132222292701297013c421e026bd28fe125d218b266c288012f5202d2629286011a720bf25b8270c11522043250d27b010f01fd5249d264e10771f872451260d10271f4424e525c30f761ef6238a25020fde1d4e230f255d0e611dc0229e24d60d0a1d44223724770dba1ca521ef23210d991c14213823670cc91cb220ae22310d581ca3205322280c241c92203b22ed0b371c5720f921930c861cb81fc120c605b21a881ea520ea0cb21a881ea520ea0c7220ed253627a9137220ed253627a913c225dc2a462cc91d3829aa2e2b308a24342a262f6a3065252f2bb22fc030ac258a2bff2ffb301326a22b223030314626d42b46305a318e26ea2b5f307d316026cf2b683080310b26fd2b6a308231ac25962b3d306231e6248c2b253036318424ca2ac22fee304223a92a5a2fad307b22122af62e8d305421fd29a12e3730ae208429342e0930eb1f4629d92d832f901e2a295b2d0c2f701de828e62c732e3a1c7f289e2c232e2c1b2c28632ce52da81ac027342cbd2d2e1a51270a2c882d4e1a1727e62b6c2d3419ee269b2b2c2d16199626192bca2c69186126982a6d2cbc17e325412a342c23175a25f429192c7d16df249229c42b8716802458296f2b081615240f29242bf314fe23d428c72ad914d423a528442abf143f236a28012a6414ac222228c6293d13502294276929d912e321ed26cd28631275217b267728eb11112114263d287f11b4209d25b727811043202325ee2614100020cd247126a90fa71f8d242526530f621f4524c125110fed1eea235b25bf0daa1e5e23f024870d501ee022a3246f0c091e6e225924010d6e1df021fc23810cb11c6f214b23c80b431c1f21ec22120b071ce020a9225f0cc61bab207222370c8a1b7d201d22170ce11a292086212b0cfc1ab41f1e213c0cfc1ab41f1e213c0c6b1d47243925e10d6b1d47243925e10dec24062ad32ba31c4229682e28301124072af02e48302425232a792fa2303d25e02ae92ff830c2255b2b1d302f3129268a2b2630373131267f2b21303931eb25932b263034319e25722b1e3027312b25132b03301231af24fa2aca2fe5301024b02a482f9a30b9221d2ada2e5630c221fc29802e1e30de201b2a422e07303020fd29f42de32f4e1e8529842d582f1b1d1529252dc52e0e1cb828d72c5f2e871b22289f2c472e1f1b1b28752cf62d991b5027102c912dc41af226b42b472dfb19e5269d2b3a2d8019c4265e2b092df7183926d72abd2c9218cf255b2a772cc8177225122a5d2c4c172c25df29392cee168d246429b72bae166a2436295d2b7b160924ed28f42a6815a923a928912aa51456236828312af513d5223028e72969139222f72799294a125822a9273b29e21203224027e728c211a021da2699281a1216215a263f288511aa20df25d5270f114d2053253027aa10ff1fe4248a26d9105c1f75240026fc0fd31e20249525670f711ec8233f25fd0e1e1e5723f224a20e901dcd22a424530d321d3f226224fa0cb31cc5212a247f0c6e1c772107243d0c491c2821db231a0c071cd7204c23af0ae31b8a203f228b0ac71b362094217609bb1af11f6921150cd31b361fcc207e0bd31b361fcc207e0ba81cd42368256e0fa81cd42368256e0fb4260f2c102d5520c328432ec02f2424b229c02e3130ae240d2a3d2f9330af24932aad2fe3303125f82a03301b318125152b18303831b525152b21304031b525d22a0b3035317f25a52aeb2f223124257a2abf2ff5307e24662a832fc1307323432a222f93304b22152ac72e4530ba21be29572ef52f09212029da2d852f7f20a6287f2d192fdd1f69283c2dbf2ee51e3628e72c652e0c1efb278e2c032e391d8d274b2cc02d751c2027182c882df51be726eb2b5a2d441bad26a52b2a2d9a1a8726792b012d751a6726392bc52cec191026e72a992c3919b625c22a7e2cec185525562a4e2c981833250c2a2e2c261871247129942b8516682438293b2b77161924f428dd2a7e15a423a928802aa11439237028262a6114be223e28db291614ac221e28a5293d137822f8276a290513fe2187272e2980129c210e27d728cd1210217d2661287e11c320ec2500282a11762076255327d61037200825bf260910de1fa5243c26870e5b1f5024d4251a0ecc1efc237a25a30d3b1e66232e252b0dbf1de122d124c40c461d632286240d0dbf1cd6211f248b0c561c49216b23b50c291c0e21ec22830c041cc42080225b0c591b7e205622f90b1e1b3720bc21b80b461ab41f05219b0b631a531f2721480c631a531f2721480c0f1996211a2485040f1996211a2485046c269a2bcd2c111f8f28472edb2f58233029b52e2a3058248b29442f87308e24352acb2fe53033258b2a093015317a25ca2a1c3028319425d82a223039316725a22a09301a3107257f2ac02fea309d24322a482fa330cf23f929f62e6730f522e929d02e56302022f5299e2e3b30d920062a392e053022204429c62d802f3a1fa7285d2de42e621e8928de2c5f2e391e9a28932c3e2e051e1428702ce02d141d4727212c7d2d871cec26c42b262dbb1b96267c2bf72cef1a6f26382bd42c5d1a3426052bb82cbd192026cb2a9c2ce318fa25b32a8f2c6318f825912a872c3c17d425442a582c5216b4250b2a282c7615f22483298b2b5d157f241a29ff2a741566240129c42ac6140024c728782a571495239028352a4213e5225828eb299912c9223528bb297e128b2214288c2943123f22c8275129fa11162254270329d4119121b82696285411fd2019264028c71092208d25a727f5103d200125ca269910ec1fa52450264c105a1f5a24e025fa0fb81e04246f254a0f2c1e81230e25e80d9a1dfc22b2245d0d141d57224624dc0caf1cb221c023150d531c2f21f322b10c1b1cec207922740c0d1cc1202d22c10bfc1ba6201d22550c141c8820ea21cf0b9b1b4020d121470b441a9e1ff721330c441a9e1ff721330cfd1a6822bd240388fd1a6822bd240388f2256f2ba32c1e1fae284e2ec62f3e234029a32e3b3025248729832f9e3030242c2ac72fee30c724442ac82ffe30d924362ad22f0231e724332ac72f0831cc243a2ab92ffc309e24662a8e2fd53057246f2a402fa8301523712a142f8b3011229c29982e683047217f296a2e3530d2204e29162ede2f5120b628792d102f101f2828ec2c632eb41df627b42c402e351d00288a2cf12db91c0c28332c852d431cb427f52b422da21a0a27762bf52c9d19c026342bcd2cf4189826012baf2cd6184f26bb2a862c3a181f26762a522c6c17f0253c2a2e2c7116e725192a192ca615b925062a062c7a155f25d929af2b24151e257d29742be6140f24e628b42a67143524ee28ca2a1a15b323c228872aaa144d239b285f2a6d14b7226a28222a1214a2224828f929321349222628b829d212e221e82784296212a5217f2738291f124721f326bb28ba11f3206e263b285e117520bf25b827d51010202a2503276810601fae2451260010cb1e2e24b0255e0f431ea6234225cb0efb1d2123d8247d0eb81d8f228f24790d731d24224a24380d2b1da721f123f30cb41c42213323810c341ce720ab22060ccf1b832032223c0c151b3620ec21ae0b331b1520ba21e40aeb1acd1fe221850dce1ab21fd521200cce1ab21fd521200c551bbd22ea248d86551bbd22ea248d865a25cc2a442c681e8428af2d062ffb212729aa2e743050236929992fc0301a247e29cb2fea302a249c29d32f03316e24c729d22ff9307824db29bb2fe3307024c6299a2fd1303124bf29662faf3014248729182f7f30ac235229c02e4930df221329502e0730bf211029fb2d9d2fc3202129b22d472f2c2080284f2df02e091f0828be2c372ec91de427572cd42d691d81273c2c812de91cca26e62b1e2d711c8e264b2bd82c141c4326db2a982c651bd5258f2a6f2c831a9825632a542ce31967253e2a3e2c58195125252a292ceb183025112a212ccc182a25042a162c73180a25ef29082c0518e224ca29cc2bca1791246429542bb3169323cd28882a14150724d128852a661564239828492a0214702387283f2a1f1317236928132ae1113a235e28002a121127234e28e4291b10bc222a28b829bc0f2c22df277a29170f572130270b297f0fd3209026812800107220ba25a727600f0c20ef24a826b70e7d1f93242b26420d4c1f3d24b2251f0dcc1eab233825c60c291e0a23cb24530cdd1d772264241e0c8a1d22221c24c70bff1ca021a423040b701c2d21cb225d0b071ccf203322af0ab61b9520fd21610b931b7820e3213f0bbe1b6320b521690b021b3f20d121b60a151b1420d321e009151b1420d321e00900000e1bc11b000000000e1bc11b0000d325a42bdf2c691e3b28922c2d2e1e2071284f2e0a30bd217129cf2ff0303423fb2904301331eb23ed29b92fff30a923c829892fdb300324a029572fbb3043248229272f9f30fe237029f52e7b3082224e29b52e523059223829852e2d3014221229542e06304221c528f72d902fcb207128712de62e0a204228d42c4a2eee1e07288e2c072ec81d6f273a2cb32d191d1827ad2b4e2d6a1cc126072bc32c8b1b4026a82a6a2c951ae325582a452cd219b325282a322c46198d250a2a232cc8185925e729172c9c185d25e029122c47186925ec29162c51187025062a112c4a17e2252e2a122ce2149c25122a132ca71416241129b02ad2137123a4288b2afd1469238428552a621607238528212a9b1541238528372adc14fc2286282f2ab0122d239928382af4110b23a0283e2af210cc2296283a2ac6107d224628dc298e1072211d27e028a50fc42043262f28e80f6e209d258d273d10f81fdd249226a10fea1e5224e2259e0e741ed1236b255b0d111e2323f924080d0c1e9b229b24040ddd1d15223d241e0c921d9021a323d20b4b1d172109236e0b861cc520b4225a0a3c1c90203d22f209f01b6c20e7219209791b4120ae21330a721b23205e212d0ad21ad91f5121870ac61a8c1f11217c0ac61a8c1f11217c0a0000851d111e00000000851d111e00004125582a152c9d1dd225cf2b572d7a1d5628972c6f2e32175629b22fac30791af6299b30dd310b24a829d62f343196228529202f9c308c215f29ec2e6c30b61f5329ce2e5c30ac204429b72e493020213e29aa2e453045213629a42e3f3012210c29792e2f301b20da28fb2daf2fe41f6b28292dc82ee81e0b28612ce82d111e5d27da2b4d2d0d1dee26552be42c4f1c7726ce2aa72cce1a5726522a5f2cde194826f9291d2c6919d325b929cd2b05194f258529852bea18f4244a29322b4418bc242029f62a1418b3240a29ce2ae516f7241029e62a051682258429192cfa15cd25c12a9b2c8e1574251f2bcc2c38157225c929592ba51386241928ae290b1012231928e129ac13a5223828e7294d1593223f28da293e151623a328382a4b144d230529c02a0e1224231a29e62a0411dc221329e82ae10f6d22b628682abe0ddc21b9273e293c0dce2186266028680b5321b3257e27cb0a9b20b22457261d0ca41f05247b25630cc71e4723ee24c20c071eb6229524c50da11d2e221c24640d661db8219a232b0d381d7d216523ff0cfd1c51213923c70c981c28212323650c2d1cc820e722fe0bf41b652062229d0baf1b2b20d0215b0bb61bee1f7521610b2f1ba11f6c21f609171bf31ec620e800171bf31ec620e8000000c119c21b00000000c119c21b00005924a8294a2ba61c3525732a252c921c7128032d792ecd0e34293c305031261c9927862dfe2eba1c5f279b2d2c2f0e204a27352d002f3e2032287b2de82e4a219428a82d2b2fa0214d29082ebc2feb1d5329f92e743055204b29982fdf30fc206d296d2fd0301b219c28ab2d532fcc1f0627212c812d7e1ddb26402bd62c231d7626ce2a7b2c6f1c0226722a2d2cdb1bb625f529e92bbe1a8425a929862bcf19592582294a2b4a1933254f29172bd0180e252e29de2a5b1802250329aa2a5917f424d6286d2a0116ad249f28332a7a146d244b28012a3c14112443282a2ac91307215528142ad010db25b42b3a2d5a16ea1dbc2732296a0e1b21ed256828301212234027162949140c221b2710297014072288272629cf146d224328b329b714d9234b290f2b831397241e2a042c1a10c523082afc2bf3091b232429d12a7109b121de272029160d07219b266428c60d6c2072256727350e801f3d24c825390ede1e8b233625b30d231ecf22cb24e00d6f1d48225524330d451de42111240c0d371da721f023fe0c051d77219723cd0cb71c2d214e23830c4e1cdc20dd221f0c031c91203e22ae0bbf1b5020c6216d0aaa1b23208b215b0a941bf61f3c215209e61a611f1a21ec077d1a061fd12073077d1a061fd12073070000f91cc71c00000000f91cc71c0000ed24ee28222aa31c1d24b728612ab51ded25792b8d2c0420c12d1a35bc36821d03262c2cf22c3c1e0d26182b6c2c7d2082267e2be32cd42080267c2bc52c8320c326bd2b022d0c202526d22a6d2c641df5237c28cc295d17a5249229c82b099518287b2de22e2e884f2462291e2bc615d924cc28992ab81946253d29fc2a8e1967255c29362bb11968255929352bb2194d253f290d2b3e192c251a29e02ac9180325f728b02a5118db24c928732abf17a6249f28352ad3168e247628062a1b166e245128d3295f1551243228a329af1425241528852906151224d5273629ef148f222027d328f313641c93217423530da71e1c2348255f0eff2068259a276c11d4207725b92779125421e525282875124b22422629286b100522ef26db28c311b0221529ca2a6712f824eb2b512d580e3f253e2c972d040c1c240d2ac42b3e0d19215327ad288e0c082095243c26a90d0e20ac236225b20d0c1f2f230d25d80d661ea322d9241f0ede1d31226a249d0d741dc8210424380d2f1d6621a423f60c0a1d37217a232e0cd31c00214123000c991cc9201523670c381c7c208e220a0cf21b4a20df219b0ba61b0b207621580a6e1be41f4321290a891bb21f04214a09121b741f1621c40ac41a2e1fc9209c09c41a2e1fc9209c090000891cec1d00000000891cec1d0000f822132813293a1bfc24c9286d2ada1c6c214b26fe27a91a921c2521cd227815e523d0281e2afa1c2125642a272cf51e2d25e62a552c591f8e25262b912ce31f9325292b912cea1f9425022b872ceb1f2c25bd2a582c041f4a248629412b451d23216e25e826c114ac22d4259027899177240c285729b30dbf246b28fe295c16d1248528282ad715e0248728282a4a15e4248628282aee15d52473281a2a3e15a7245d28f729a4157f244528d029061647242b28a829bc1524240c2885298c151124d2275e297415072489273029e214f3235f2719295014f223172705294f145923a526a72874148a21a1258827b7129820a02446269211852055243b26e710a92064248426bc0fa1207d2485266f10c4208024a526c7115e20a524a026da11d11f2425e1273c11ae26232d842ed206b6284e308a3103924e22102813296d10121fe523aa25c40e981fa422e624450f2e1e9922a024b40e6c1e5c227424c90fd01d162242240d0f721dc6211f24e80d321d7921c223a30d1c1d38217623e40cd81ced200923a30c9f1ca920a322ab0b561c56202f22320b1c1c1a20d221d20a0a1cae1f7c21b30a111c7b1f2921b509d61b301f08218009ab1b181fd7206708801be11ed2202d0b551a731ed0200d0d551a731ed0200d0d0000861a061c00000000861a061c00005d2253278028991aed23c9265428f11975208e2546279e197721e3258327041a1f245b28b729031cb7245d29fa2ae41cd8240e2ad92b061d4525742a2c2c771da025a22a472ca81dd925be2a552c811dc8257b2a1e2c421dff24b6293e2b8b1ce523ac28442aed1a8c232828c7292d19fd233628d129641734244328d2292c165f243d28c329dc1573243c28b929f7156a243928b429ea1555242c28ae295b162f242328a8292416112410289729f815ee23fc278829d115c623b727612935159c2373272f2919156a232927f8287e140d23cf26b7284614c82276266a285c134c22fa250e280612c5217025652786115c21f924d9262111f520a6247526bf1087206f243e26ea106b205e242e26cb1073205f243026d31072203d240f264110252162244126390fbf1e14235525bf0bd713f918071cc0004b1a831e4d220404451e7d214224010eda1dbb210624590eb11d9321f3232d0e6f1d7621d823e50d2f1d5f21a923a00d1b1d32215a23e30cf01cec20e922ba0ca11ca1204e226f0c521c4f20cb212b0b0d1c11209121b90aba1bd31f6321650b611b9a1f5221100b391b651f3021fd09571b481f1621160a5a1b181fec2029097f1bff1ebd20b2064c1bb91e9620fc0aaa1a571e3a20610aaa1a571e3a20610a0000461ba11c00000000461ba11c0000ef215a264f27a4183e215f260128461ae320e9256627011ab222c4265c28161ae4233e287d296e1b2124e328512a051c5e244d29e12a401cbe249b29442b761c0025bd296b2b8c1c0325be29722b651cb1249b293d2b441c52244629d22a111c3824d328422add1a3e247428c82978182e244d28aa299a15412439289b2928153924252893291f15312412287c2915151b240a287129fb140d24f7275b29ea14f123e0274e29d114d523b4273129c014a12386271029a0145f234b27ea28781429231e27d1285714de22e226b7282a148622b82696285f143c22742673288f13cb210426202806135521712560277712f420e224be265f11992095246826931146205e2427262f11022032241626dc10b21f1624f825aa10711fec23ea258310371fad23dc256010171fdc222e25b00fe81c19206521530d6419bb1d9f1fd9094f1c432060220c0a5c1d132103245e01591d3b211924820b571d49210e246e0c351d2e21d423520c041d0e216a23290cce1ce2201d23f90bca1cb920cb22f20bc31c96209d22af0a9f1c742064227d0a871c4a202e225b0a401c0820c021f8096d1b6a1f3b2137090e1bfb1ee620f408b71ab61eca20b708101bbd1eae20f508291b9d1ec1200709931a431e64207509931a431e6420750900000000000000000000461ba11c0000ef215a264f27a4183e215f260128461ae320e9256627011ab222c4265c28161ae4233e287d296e1b2124e328512a051c5e244d29e12a401cbe249b29442b761c0025bd296b2b8c1c0325be29722b651cb1249b293d2b441c52244629d22a111c3824d328422add1a3e247428c82978182e244d28aa299a15412439289b2928153924252893291f15312412287c2915151b240a287129fb140d24f7275b29ea14f123e0274e29d114d523b4273129c014a12386271029a0145f234b27ea28781429231e27d1285714de22e226b7282a148622b82696285f143c22742673288f13cb210426202806135521712560277712f420e224be265f11992095246826931146205e2427262f11022032241626dc10b21f1624f825aa10711fec23ea258310371fad23dc256010171fdc222e25b00fe81c19206521530d6419bb1d9f1fd9094f1c432060220c0a5c1d132103245e01591d3b211924820b571d49210e246e0c351d2e21d423520c041d0e216a23290cce1ce2201d23f90bca1cb920cb22f20bc31c96209d22af0a9f1c742064227d0a871c4a202e225b0a401c0820c021f8096d1b6a1f3b2137090e1bfb1ee620f408b71ab61eca20b708101bbd1eae20f508291b9d1ec1200709931a431e6420750900000000000000000000000000000000d81c4726b52630171b29332dd12d70249a29b42dbe2e0d25a52a472e7d2ffd25642bc42e0430a926e82b302f45302027222c7d2f84305227372ca62fa33099274c2cd52fcb309c27652cdb2fe23039270d2c9e2fa2307e25542c8730823152232c2e13340f357f22682da432e333b221bf2d7b334d345121782ab52e3030d01ef5288d2ce62dda1d6628492c972d311d2528ee2b962d281d9b28032e662f701db22d52341935741d322bae30b231580bbb24b32a752c2215d525cf29e22be31a23253629d32a111aac24e4287a2a83193f24ce285d2a331884236e28d5297a16e123ad28642ac815d924462a5d2c911152234d28ed2901130e21932524287b1189209725ee278011592064258627b71088203e251c27eb103c20f824b0269810de1fab243626880f491f5424d825e70ffa1e1f249d25920fc71eda2363257d0e7f1e7c2320250b0f311e2623e524b80ee91de622bb24a90d691d942289242d0d351d5c225c24fc0c281d2b223724470cdf1cdf210b240b0cac1ca121cf23c00b641c6a216f23490b3b1c46211723050b041c0521d722a90a4b1bb42040220d0af91a5120b821c809b01a1d2082218c09571aee1f52214209291aaf1f192153082b1a8e1fcf2016074019071fa7200806791a151f72206f070000000000000000d81c4726b5263017d81c4726b52630171b29332dd12d70249a29b42dbe2e0d25a52a472e7d2ffd25642bc42e0430a926e82b302f45302027222c7d2f84305227372ca62fa33099274c2cd52fcb309c27652cdb2fe23039270d2c9e2fa2307e25542c8730823152232c2e13340f357f22682da432e333b221bf2d7b334d345121782ab52e3030d01ef5288d2ce62dda1d6628492c972d311d2528ee2b962d281d9b28032e662f701db22d52341935741d322bae30b231580bbb24b32a752c2215d525cf29e22be31a23253629d32a111aac24e4287a2a83193f24ce285d2a331884236e28d5297a16e123ad28642ac815d924462a5d2c911152234d28ed2901130e21932524287b1189209725ee278011592064258627b71088203e251c27eb103c20f824b0269810de1fab243626880f491f5424d825e70ffa1e1f249d25920fc71eda2363257d0e7f1e7c2320250b0f311e2623e524b80ee91de622bb24a90d691d942289242d0d351d5c225c24fc0c281d2b223724470cdf1cdf210b240b0cac1ca121cf23c00b641c6a216f23490b3b1c46211723050b041c0521d722a90a4b1bb42040220d0af91a5120b821c809b01a1d2082218c09571aee1f52214209291aaf1f192153082b1a8e1fcf2016074019071fa7200806791a151f72206f07791a151f72206f07431a9724e724980c431a9724e724980cb329ea2d0a2f2325b32aca2ef32f7726712b3d2f5d30e4274a2c0a30c4307c28b62c50301c31d928c12c7b306631be28f32ca9309c31c728e42cc73098317d28b92cb530b4314f27c32c90309431b325a32c1f314232a924242d123286332f24992cf631b1339922b02c7e312e33a320e02a3b3040310f20ca29972e2330f11f3929522eda2f2a1f48294b2eeb2f3c1e662b7f2fb430b9146b2ab5300e32c81b93291e304f31d3173b28942d622f05178627b92c8f2e331748265e2c9a2d9d17ea25ab2bdd2ce714a925752bd12cdd168025332bbb2c5112fc24be2a8b2c74106f24de2ad42c39123324ae29972b17156d2212282f29891599211f273d292d153121ae26b4289e13f9202f265228aa1296207f254a27901146201725bc26a310f91fe62498265310bf1fa82438266a0f261f5b24de25d80e021f21248d25b60ede1ece233b25930eb81e6223f024930d6a1eff22b624520d091e9a227b24010d7e1d552245248e0c1d1d1d221e243e0ccb1cd821dd23f40b8f1c8c217223670a891c5421f72235098b1c0021912238093b1c9f200322dc08521b5420a1213408bf1a09208c21bf078a1adf1f91219708621aa31f8a215507cc1a551ff820c6085e1ad11e502050073b1a681eb01f91053b1a681eb01f9105331c4d25a9253c0f331c4d25a9253c0f0f2a322e6c2fc025e12b412f41305b272c2c0330cb306d28b32c67303e31fc284e2dad309f315f29692de830cf317b29712dff30f1312a29252d0c311132cd28322d23312b326f28122d373157328627ec2c4b318c320c26032d8331de328e24572d6a31bc32a522272c08313b32e720812b3a305631e71f6f2b742f09315b1f1c2a402f9830361fbd29282f8630c71eb929532f9f30641ebe29742fbb30511d8e29332f8b305219da282d2ee22fd0160428642dcd2ea9169d27df2c3d2e5f14f826692caa2d00143226ec2b232d1e13a5259a2b752dec13ac257e2be42cb5147c250a2b912cb313be24352af62bde13de230e290f2b871211234b28e829c312bf22a1274a2975122622f926d428ab126221372630288712d920b5259d27e111522061254727cb110a200625d62669119a1fbf246f261811271f6f24fe25cb10991e28249d250010411ed6234125950fcb1d6523e824060f871d0a239b24ff0d411da6225c24b30d1b1d47221e24e30c011de721c823ca0cd21c95215a23000cc11c4521fe22e30b791cec209d22470a321cae204722e309fd1b682000229b09ea1b5820b9218f096f1b2c20a1213809fc1a10208321e708321b14208f212208b319022018222f0af11abf1f7021a802f11abf1f7021a8020000e91e782000000000e91e782000005b2b552ea42f57252a2ca22f8930e827372c40302031ad28ce2c9f308c3140295a2d1031fa31d929892d45313a320c2a9a2d67317032da29a32d8431863270297a2d7a319632da285b2d5a3190322528642d53318332ef25a52d19315132f121ec2cfc3043322f21cb2cc130e131be208b2b44305231761fa62acd2fd530941e0f2b662fa430881e4c2a362f8330d41dba29022f74304c1d9329ea2e6830cd1c4b29ab2e4030c51bea28472e003055199e28d52d882f7b164128812d1d2fe3147e27f42c862e4e14ed26462c022ef4139626242c852d91133826712bd52c5e148625f52ab22c9514d824722a5a2ca3142d248929672b10157e23b3285d2a8015b7222c28dc29ed14f921a627662962147a21d426b1280514fc2031262328ae129720d525bc279111462074254c272f1105201625e5265c10be1fc3247c2633106e1f79241e261c0f2f1f3d24c425f60da71e022476255f0e5e1ea8232e25190e351e5823fc24270dfa1d0523c124f50cc21db42286240b0c711d49224024a40b401ded21e8235f0bb31c9e216223990a521c3121a622110a991bba20f6215509e31a6b209b21d5089d1a37206421a5088f1a1d2042219b08b71afa1ff820b607df19681fcd201f08ae1a2f1f9720f805ae1a2f1f9720f80500003f1fd11f000000003f1fd11f0000962a972ee42f7626012cdd2fb2301f28442c36300a31cc28d02cb830a4315629392d2b313332e0298c2d6b3186320f2aa92d7c31aa32a529ba2d9831bf3241297c2d8a31c232db28542d7931ac323528312d48317432df26e52c023139328b255d2cc63002326324242c9f30c73144236b2b4a307d315321072bfd2ff8305f20f02a722f9230bf1f352a0d2f7730241eb129ba2e5330e71c8629662e2330681c67291d2ee52f3d1bfd28d22d8d2f0c1aa4287d2d4b2f711853283a2df32e2c174628fd2c6e2e001677279b2cfc2d3d15cb262c2c782dc414c626862b002d9e15e525072ba22ca4155125602a2e2cc515c124af29852b8d148e241e29cc2a6512712497281a2a3d12062433287c29a6118a229e27f3286d11d621e2268a289711512129261e281711ad209e258d277a1066205025242736105320fa24b2262c0f3420af244926f90ef91f6924ee25990d501f16249325220dcf1eb4233b25c80c421e4623ef24640cad1de822a424f80b5a1d9a226924700c121d48222524350cdf1c0022e423d60a8a1cb8218523600a331c6f212323f70a8f1be9207622460a161b7420f621fa08ff1a5d20f121ea08421b7520062218095d1b5a20c6212b098c1a25205e216e09021bda1fe920d009021bda1fe920d009b01ce41c511c3201b01ce41c511c3201e02623294e29b11ef72a3f2f5430b926382c443019317a28c02cbd30a931e3281d2d1b3122326d296f2d5f318132ad299b2d8631c432ad29ca2db931fc327f29c52dbe31f73204296f2d8131ae324a28002d1e3151321927b02cdd3010329c255f2cb530dc318924382c9c30b331ac23c12b28300731d0214c2bc52fe1304f20392b5b2fb130af1eb22a012f8430571d092a992e39300b1cc129482e0730f91a69290e2ed62f8f1acf28b12d722fd51956283d2dfe2e42191b28e92c7e2efb18a5279d2c0d2ea318ec26512cb22da41864260a2c5f2d4818f6258d2b162d601879251a2bc12c04180125792a602c58177f24c629d32b9916362438290f2ba415b923d9289c2a2c1542238728272a6714af220028862941132b222b27dc28e811c8219e26672889116a2132261428e011a820b5259d27751026203a252427f10fbc1fef24bd263210701fab2472261f0f151f73241d26c80ec61e3c24cd257c0e4f1ef3235f250a0eec1d80230b25ab0d811d0123aa24450d131d87224f24350cd01c0d22f423fc0b811c9c216423790b2f1c3f21e922f00aab1bdc2073225c0a481b9d2010220a0af51a5e20c321c509e51a26207321b809fd1af81f1b21e708801a7d1fec209008f61a5a1fa1207104f61a5a1fa12071041f1e9b226b236c0f1f1e9b226b236c0f0428e929a32a2a20f62a8f2f9f306326532c663086315028a52cc330c5317c282e2d1b312e32eb28922d6131843233298b2d8131b43216299d2da431d0320f29962d9731bf32c4285e2d5c318b321128222d1d3141327726d22ce330f93127254f2c91308731d623082c53304e314e22502b0f300f318d20f02a892fb2304e1fc72a512f9930d71d4a2ac72e4b309e1c042a542e0d304b1b8b29f82db32fb91a0b29a72d542f1d1ab2286f2d042fe41a80283d2dc72e081a50280f2d972ec7191028d02c5a2e6818b627842cf92d2f18c1261c2c7e2d5417d2254e2beb2c0f175c25992a6d2c2f177924d929e82bff1540248a29712b3d1608242529102b6715b723fb28e92aae145523c828a12a7214dc224f281b2a711347229d27692935111a222327cf281011fa21ae265f283210822131260e28bc0f2b21be259327420f9e20562510277b0e4820f72492261a0fb81f9a242726680e491f5324c525f90ebf1e08246925750e461ead232225010ecf1d2d23d624900d471dcd228d240d0dfe1c75224e24240c9e1c06221724a90b831cc221b0237c0b3a1c3921ce22040bef1bae203e22950a3c1b8b200f22010a091b6c20f121d609121b4f20b121f6087d1a272079216109371a9e1fd220be0a371a9e1fd220be0ae51b6121e321cb0de51b6121e321cb0d8e26e8288029cc1ece2a6c2f7c302326cf2b1f300631e927502c9f3088315e28b12cfb300032c128012d33315332fd282d2d54318332ff28462d5d319a32d628552d553183326228312d373167325f270f2d0f312e329125252de230f3316223042d9d30af3152206b2c53306d31eb1d732cfc2ffa30421c5f2b622fab300e1bca2a012f7a308d1ce729962e3630161d8c29522ef12f221d4e290e2eb62fe91c0329c92d732f511cd028842d222f101ba228412dd32e351a6228f12c642e511936288e2c082e92187f27312cad2d11188f26cb2b7d2d1e173126682b4d2db816a125b22ab42cd316ef24fa29252c5a15b524b329e32b1b157b245229592bdc145d24eb28c62a2d14f023a128582a9913e2224228ee2978131422cf278c299812c12178274929f9128321fc26dd28af12fd20552661280c129920d1250928fd103d205b257b2799101220092500276b10c11fc72487263510391f75240526d60fb71e3c24b8256d0e571e08246625120ee91da1232725a90da81d4023e124b10c671de12299247c0c1a1d6d2242242a0bcd1ceb21db23be0a901c6b211823680a871c1221af225b0a771cc6204322450a1b1c7e20c421d00a321b252053210d09661a991f02217e082d1a851e2120e9092d1a851e2120e909f01e97201a21de0cf01e97201a21de0c0c2706299b29d51c322b622f7830cc250a2c0930e1300627262c86306f3112287b2ce930fb317828c02c17313b32a928202d4a3171329f285b2d5f319c325128472d3b317732aa271e2d21314c32f026df2ce8300632fc256b2c9330bf312625ad2b353075311a24882bfa2f0b31d9228b2ba42fe5306b21de2a712fb3304620782a022f7830d01efe29642e2c308b1d8229e52db92fbf1c1329832d312f5f1cc628502dea2e1d1c9828272dba2e541b8728f32c852ea51a6028c82c3f2edd190a28802cfb2de5183527302cc62dd1178f26ab2b4b2d1e171226d02aab2c9616da258e2a602c59166125292a2f2c8516f924c429c72b081666245f293f2be5151d240d29d42a8315a123a228402aa014f9224728d3293a147d221128ad29de134f22ac276529d81218220127d0289d12592169265028cd11eb2001260c28b510a920a5259a2776105c20492526272c100820f024a526b00e791f94242b26330e031f4324bf25ec0ca11e01245d25a70c271e83230225520cd81df1229f241a0cb61d8f225c248f0a751d0b221624450a0e1d9e217e23ce09621c2921c7220809061cd4206d22a609641b76202c223009e81a51200622bb09411b1f20ad2118098c197f1fa521ba0a431af81e5b21320c431af81e5b21320cdf1c5820e2208210df1c5820e22082103326af285529701d042b152f4430c224ac2be52fe2308c26fb2b8830713132276a2cef3000321e28c22c313168325d28fc2c593199329328f02c5c31a1327328bd2c3c3180323228822c083143328d27372cbd30e0318626fe2b7b308c31ac25322b253028318924ca2a9b2fcc304223902a392f8b308c21812a0c2f73304120772abe2e4f30fb1d562a652e2c300e1df529fe2dc12f5f1c2a29862d262f941b96283f2dec2ebb1a7128f82c972e851a2a28a52c242e9419c527632cc12d34195b27162c6e2dee18aa26c22b242d7718d725fc2aeb2c1517f125c72ad42c7216a5259c2aa32c6715a325622a442c1d16fd24a329ad2bc71455245229472bb31426241129e02a80140824b828662ab713dc237628f329861369234028a6292612d4220a286829aa11142282270c290a118421e626a4289410122149263228da109f20ae25a327ab0f4e204a252227240f0f20f824b826bb0ebc1fa42450266e0d7f1f5b24ec25430d3d1f12247f25280caa1e6c231625a70bd71dcd22b424b60a481d72226b24110ad41c1c222224c80a691cb221b723310a461c57212623170be51b0121a1228d0a331b972017220e09db1a6020ce21d008ff1a33208d21ea086e1ae71f4e21be05711a361fb9207702711a361fb9207702261ee6206121e20d261ee6206121e20d8225ae286d29d51c032a132f5d30d824922ad72fca300626a22b6e305931e226242cbc30cd319927722cfc30313214289d2c1c315b323b28bf2c2f316a324728c52c24315632fd27b12c0131313236264c2caa30d231f725b42b45306831fb24502b0a3012314224e52ab32fd9305e23922a662fa6302f220c2aed2e7030ec20d129962e2f30fb1f6829122eb72f621e0029ad2d4c2f441da328572df22e961c66280c2dac2e5a1c3728bd2c602e431be9277c2c1b2e4f1a99272f2cde2d17199e27032c892d4b173427932b3f2de5163526392b032dbb165125c32abe2c7216ff248a2a712cb2166f25612a3e2cfa179d24c529f42bc51682246d29792b9e1619241129182b7e15df23d128d52ac6147c237d28612a0f14d3222a28d72967136b22a7274929251215222a270329d211a321de26ba2865115d2180265c282211f720132611281e109c20a6258827790e5d202525e626200e0720c6247c26a80d981f86243a26550d131f3a24cd25f70c491edb236525690cbc1d2e23f024070c511d9e228a24770b231d27222a24360bde1c9621d323d50ab11c0c212b23960aa31cc9209022830a571c7c202d22170aea1b6b201a228f09b01b2820ce21610afa1b891fef201705d81a981e9e206d0bd81a981e9e206d0b6e1ec2201321830c6e1ec2201321830c1b256b281c29a51cbf29132f6b30a124a82a0230e130e525af2b48304a3150261a2c9430b831de264b2cd330163277276e2cf3303f329027822c09314f324327762cf6302e32e7266c2cd1300a324726362c8b30b93171250e2c5a306c31b924532b023003315d23ed2a7b2fbc304d22712a162f95303d21f529c32e5130782077294b2e0a30271f4129d72d6d2fde1d2129672d022fbf1ce928fc2c7f2ed61b7d28b22c342e041a2d287b2cfa2d9919bf27472cc52d311957271e2c9f2deb184c270c2c702d6c18fe26ad2b1a2d3d18e325f52a912c63162d25272a302c9d15b124ed290c2c17150c25092a0f2c7915b62480299b2bb61588246a29632b7f150d242129032b6514ea23db28c72a4b14bc23a1283c2a671311235d28ec29dd118f221728ae294712472299275c293511c721ea26cb28cb104e216f266928720f09210c262228110fb32095257627990e41202025ca26f90dda1fc7245926820c6e1f89240f26370d381f3f24b425250cc41ee5234d25c60b851e5223e424d2093e1ed7229d249309f11d60224b244e09401dd921e923b108a41c582146235509341c1321f422d4080c1ce120ad22ae09d71bb02079228109851b77200d223d0a9a1a1e205c217a09c21a7f1f0621c307c21a7f1f0621c3077c1f6121f420360e7c1f6121f420360e2f263929a129041ed1299f2e2b302124732ac52fc4309b25a72a2a302a31c8256b2b7b30a03173260f2cbc30f6310f27232cc230fe313227272ccd300132f526362cc030e5316226392c9f30ca31ba250c2c673094313b25c32b3c3051314624062bca2fe5309d22702a1f2f8830a621552ac12e4a30f3201f2a682e1b300120b529fd2dcd2fa51d2329832d3c2f6d1cdc28282d9d2e221b9228d52c4b2eb61a2b28992c2e2e1e1afe27742cef2dde196c27262c982d72193727012c572dd5184527ca2b382de317ef264d2be82ca416ec25a42a682cab150625e129112c2b14f6248129202cf7128624e629362c81135b244a29cd2bb914332418295a2b17159923e328c92a9b1460239228742a0f133a236128212aff11ed223328e729dc10d92208289429cf109e22bf273629a5101f223c27d9284c109e21d1268628e30f1f214e262c28310fad20d125af27c10f5320492512272c0f0120d7247426a50e311f6b24e825f80dae1e152483258a0d501ebb2330253c0df31d4523eb24ef0c881dc0229d24c40b3a1d53225f24560be11ce4212724da0a681c8121f0232f0a3c1c2a218e23dd080a1cd120f022ac09ca1b7e201a227809921b1f208d215109be1ae21f562198095a1c321f68208e855a1c321f68208e85cf1dce203e213109cf1dce203e2131099126cf29662a051fd1289b2e3d30c323572aa12fc6304f25a52a133019315b25432b64308b31f825d22ba630e0314d26042cbd30fe317926072cc63005327d26b92bac30ef311a26692b8930ca319d252b2b50307b31fa24f42a16302831e023b92aa62fe13053226b2a112f83306d21f629852e1f30da2086290c2eb92f24201229b12d4e2f471fac28722df62e1d1e6628212d9d2e791d3328af2c2b2eb01cc427612cd12dae1b3727282c952dad1af4260b2c6c2dfd19a126c02b3a2db6197826942b082d921916261a2bb02c3e19fc25e32a8c2cc61835257d2a2f2ca417a224e729e42bcc160c248b29c82b6d15642453297a2b53150724f428f02a5f14e923f328a92a4a145523a228562a05132d236d28152ade12de224628d629b311b5221d289f2990118a22f52767296d111a22842727291011a8210e27cc28b1102921792652284810c120e325d627ad0e802075254727510e32201225ba26e30dce1fb2243f267c0c4a1f5324d725300cc21ef6237a250a0a3d1e652328259309d41ddd22d4243509511d592278241b0ad81cd121152490094a1c41215d23050a111cf820e322b509f21bab20922293094a1b6d2058221e09441b2520b4211909651aad1f02214e09af1a611f2021410baf1a611f2021410bf61cd71f2f20cc03f61cd71f2f20cc03d72520298d294f1d8d285c2e0730c122052a7d2fad30c124452a0a3006312725942a55306f318225212b9f30cd311526662bb430e8315126702bbf30f1313a26492ba730cb31a325412b753097312725eb2a1b3034315c24792a9e2fd8308a23472a3e2f98304f22402aee2e6b30e320092aa72e353024206729282ecc2f111fb628922d062fdd1d9528092d772e681d9528c62c482e1e1d2628a22cf42da31c78273b2c922dde1bf026e62b3d2ddd1a9126af2b172d131a68266c2bf82c85194626392bce2c01196326082bba2c4818f225b72a7e2c351779254f2a622c8a140e25d029f12b1913e7246529902b111408243a293b2bb7136f2410292f2bd0142e24e5289e2a00146223a328382a11139d238328262a58111f235828e729ff10f5223428b629e210b92215288729b8103a22c12740295f1017225527f32846109021b2268828630efa2018262e28b70db82095259427a00e60200925c326240e0920a5244226a30c731f5524d1253b0dcc1e01246225c60c2b1e73230025550c7c1de4229c24b30bee1c2b222e24ec0a861c88217f23810b4b1c1921cc22200b211cdd206a22cc09161cbd202b22bd09071ca6201422a809fe1b8720e2219c09351b5820cd212308701bbe1f40212c0a701bbe1f40212c0ac01b341f3e202c8fc01b341f3e202c8f2c25ae285029081da628c42e51300b23ad29cf2fe8309324f32925302431b224542a4a3077311925872a5f309f315d25b02a6530a7317f25cd2a6a30a5317a25e12a543085311a25dd2a30305631a724ac2aeb2f0d318f239b2a8f2fd43038221f2a012f93305f21e129ad2e5130c920c029632e17304f201a29bf2d532f001f5828262d842e211d5628ed2c7c2e901c5c28b62c162e091c45284a2ca52dd01ad927032c472dc3192127912bfc2cc718c226602bdc2c19188726232bba2c15174126e02a932cc9162226af2a7c2cdf1517265c2a4b2cd515fd25432a1e2cf7146b25232af52b7e14d0247c29112bc2123a23d628d52a12112b24ec28eb2a85141824c828b22a71143e23a5285b2adb138123a228602a2f13f5227628292ac511bc224e28f329971152222828af293e11cf21e6277529d210ae2189272b29b61054210b27b4286c10f320722637281b107f20be259e27760f12202125dd26b70d5c1faa243f262a0d041f3624b725ed0c871eb7234525950c451e2c23de24670cf51d7f228524d80a841d07222f24be0b211d8c21bc23330bab1c272118238e0a291cd4209422d709c91b802026227709131b3020f321f708311b0d20c1212108a71ac61fd8218509831a811f14223c0a831a811f14223c0a8219961db51d4e908219961db51d4e905823bb26cd279218da280b2ed52f3021db29802fdc30f1230f2a3430483197241e2a53308131d4243d2a5730a23107254e2a47307d31e124532a39305731fe24412a22303e31a424282a023017315f24ee29a62fd9300524ad293d2f973028236229c52e5b30ec2148295c2e1930a3204729082eb62fea1fe1288d2d2d2f011f3728f62c852ec81dbe278a2cfa2d101d7a27652ca62da71cfd26222c502d201c8b26882bfa2c4e1b3e26032ba92c931ae925b42a742cd8199925792a532c2d196c25612a442cac185a254b2a2d2c9c187b253f2a1d2cb918e724fc29e82b391803250f2a212c5b17a924b929962bd616db220829c52a28144923a428952ae713c4239d28772a3614fb2282282f2aaf12982394283e2a4d1232237928112a0d1133236b28fa2922101a235e28e229580ec9223b28bb29550c3f22dd277529f90b5e211727fd28da0ad92075267328550c7b2099257727010c1620e0248b26b10c561f87242c268e0a0b1f3e24bd254a0aa41ebd233825ef092e1e0e23c8248609fc1d77226c245809a21d202222240809061dad21a7237d08681c3321d6221009ec1bc42038228d08961b8f20f8215b087e1b7020d7214209b81b6120aa216b09291b4020c921f109561bfc1f7821160a561bfc1f7821160a0000c21a9d1c00000000c21a9d1c0000ee25d72bec2c181fbe27ed2c2a2ec1207629ef2ffb306823892a7a30be311e244c2a67308c3145240d2a223058316424f929f52f1f316e24d329bc2fef308224c0298a2fd0305b249d29562fad3041236c290b2f803024224929c92e5930d1212c29a12e433008210a29602e1b304220c228ef2d9a2f701f6528432dbd2e971e0b28c82c312e4a1d83276a2cc52dad1c2f27082c562d031cc626562bdd2cb31a4f26e02a7f2cd619f825842a4a2c8619d725532a3c2c0819ac25372a352c861878251c2a2b2c031885250f2a222c0d188b25122a1c2c1118c0253b2a082cf81688250d2a962b0f0fda24332a3b2cd012cb26702afb2bce136c240729472acc14d8239e28262ac21503237228112ab2143f2387282b2add130b238e28312ad8112d23a0283f2a09110923a128462a0b10d9229a28372a1e0e74224228c329c40d4f211627c228be0cc020332623283e0c632095257a27090ddf1fed249626870dbe1e5d24d725bb0c521eb7234b25430b201e0d23de24090b3c1e9a228c249209181ef3213524c707c51d662179235d07441dfd20d222b806ba1cae20782209065c1c9220302290050c1c7420f2213b07a81b4e20bd21d806981b34207021c906df1afc1f6821d308e81aa71f2821d908e81aa71f2821d908000035206220000000003520622000003c25692a342cae176b26122bd22cf6163f27de2c392e03968a2bce3145336921b52ad730ea31fa242d2aec2f373135229a29312fa5306a235929ff2e6a3067225529ec2e64300f234629db2e5730f9213329c22e4a30cc1f3d29be2e4b306e203529c02e55303d201429952e3f30f11f9d28e62dc02f361ffa27dc2c822efb1d36270f2c772df31ca626532bde2cd91b5a26eb2aa92c481a4c26832a702c6d192e261b2a262c8918bf25d129de2b38185425a429a92bd21705256c296a2b5e17dd244f292a2b2317c6243e29f12ac91507252d29112b7515cc25c8292a2c8c15be25db2a7b2cc314a625312bc72ced13d624b8299c2b52100d2516296d2a83109d237128f8292114c7225428f929fa14ac225a28ec29e5142523a928372ac01358230429b32a281135232129e22a710ee2221729dc2a640c6222c028652ae308bb21bb273829ed02ba215e263b28ed824b2192255a27b482a320c0245f265e02cf1f10247b25fc08ae1e3e23d924f809051e95227324ea0aa51dfd21f7237c0a5b1d98216523270a361d76214723500be81c44213423e30a7f1c15212123500a171ccb200323be09bf1b7e20ac227009891b402021224a097c1b0420a72141090f1bae1f6b210e082e1bfe1ea62095042e1bfe1ea62095040000591a331a00000000591a331a00008324e629922b411dc524492a172cb51df927e52c4d2ee21b9529df30593214211c2930304b3176218028bb2e3f30d0217128242eb92f99214928172ea82fac214128b82d292fa2215328952d002f9f206228ef2d712fd320a028a22e43305a20a229ae2ffb30c320bf29702fb730ad20ad27e32c5f2ec21d9a26912bfe2cbe1c6226e72a8e2c2d1c02267e2a3c2c181bb625112a012ca6199e25c0298e2b321969259729512b51183f2561291a2bb317fa242f29e22aab16e6240329ab2a5115f324e5286b2abc14c724b928382ab4120e245528e429a810f9223f28eb290110f820fe277c29f90edf229528232ad3107b1fac26b628350e3c219e26802857106e22fa26f42827121e22f8260a296a13ea2163270129ec137b224428b029db1305246429132bab1255240d2a062c880dfc23112a092c148435231929ba2a8489af21d6272029e782f0207826642890073e2030250d27940b7b1f3124a1254c0cbe1e95231c25be0b391edb22a5245e0c861d41223a24c10b481dd22102246a0b341da021cf234e0bff1c77217923040bd21c3e213423c40a771cf620d422450a261cac204822d209f21b6420d8219309b21b29208f216b08841beb1f3b215108e41a6b1f0921ea079a1a161faf2037049a1a161faf2037040000f51a2a1c00000000f51a2a1c00001425f728fa29ac1916230429e92a081d8f25f12bed2c3620b72dca346c360422ec25d62c0f2ea71f3c26222c0d2dec20fc267f2ceb2d2f21fe27dc2c362e6c210c28272d892ef8202728f02c692e2c206526062c582dcb1ce726532cd72d11191a29782e2230350908245029922ab7935824ef278029351372250f29c32a581861255229092ba3184d2543290d2b3b1842253529f82ab7171a251629dd2a7c17f724fa28b12aa716e424d3287b2aee15b424ab283c2ab415942486280d2af7146b245828d1293b144a243a28a7291b1412241e288629ca132c240a285829fc138722f026b6281513541d67222824750e5a1f5c242226090fee2064250128b8102421a825d1279311a921fd251e286b11f92144262d28dc0e4c222127dc283911062333290d2bb912ff24152c692d76106d25272c7c2d8a858e239929512bdb835120922643289d06341f41240526700ad61f9b237725000b201f2c230925180c6b1e9f22b8245f0bb01d1d225a24880a5b1db821f823840b171d5e218823250bec1c26215923a809a91ced201c235b096f1cb720df22390a1c1c74207622c509f31b4020eb219008bf1b0c2079217308a11bed1f4c216208b81bcf1f1121e506481b7b1f1b211d09c21a1b1fd320bf08c21a1b1fd320bf0800003c1c4f1d000000003c1c4f1d0000c6234f285729531a8f257129e62a581c6322fb270429a41b9f1c16223a23ad158623cd28122abe1c6a25272bac2c571fbb250a2c112df41f4b26362c5a2d44206326412c5a2d3b206526352c542d5620db25142c2e2dc01f39251b2b742ceb1e2222fa2719298e1a45214e2589275f104823de269828b78380241d289d29be0dca246a28fe29f213e6247d280c2ae112e5247b280b2adf12d5247328022ac912a4245e28de29841279244828bf2948143c24272895290d1417240a2875297014fc23cb274f295514d823862728298213d4235a2712297e12bc231527f3286e11282393268528f0114d216625362765108720ab24512655108920732454265d0eb52076248c26340cb1208a248426640de1209d2490260c1092208e24ac2660102422ca2545280e0fec26fe2d9f2f4d0d6728ba2f04310f9529223c277728b8089e1fe8239125580da81f6b22c724600d221e83229e24170d401e43226824300dd21d09223724d40c6d1db7211124800c261d6921a623450cfd1c22215423000bac1cd720e6228f0a641c92208922290a1d1c49201d22c609ed1b1620cf219009071cc31f7d21a008061c841f28219f08c71b321ffd20f306a51b071fc920e1048a1be21ecd204b09801a711eb8207707801a711eb82077070000421ad41b00000000421ad41b0000cc22a7278d289d1aaf220028ff28c81bae203027a028a51a9721d6263b28de1ae9249028cf295d1b2125c029872bfe1c1d25a52a382c4d1d81250c2b742ce21dd725322b8b2c0e1eec254f2ba22cf31de0252d2b842cb71d5225952a1d2c011d4f245a29062bd61bb5236328082a4a19f1233a28c82956161f244028bf29e31355244128b629301370243c28ae295d1370243728ad295d135a242f28a6292a1435242b28a72990140f241c289629ec14df23082883294514ae23cb275c292a147a237e272829281350233227f42811120323cf26ad28ec10cb226f266228ce0f4222ee250228300fcb2161254827a70e5a21f024c326260edf2096246126d60e7e2066243426730f61205d242726260e6b205c241e26340e5e203d24fc25040ddd2064243426970de01c772185245b089d0f3d17221a5d00011cd61f60221103271ed9215c24110bed1dad210624ce0aba1d9621cf23050c811d7b21b423900c5d1d6c218023880b481d4a2151236a0b231d0b210f23360bce1cb6208522bf0a841c6920eb213009391c2020a021da08071cdd1f6621a0089a1b891f3a2156093d1b3f1f03212808511b211fde2034084c1bfe1ebb203108871bf51e9b20cd04641bc41e91203e08ee1a6e1e5320dd08ee1a6e1e5320dd080000161cde1c00000000161cde1c00008721db260628da181e210e277328731a71211c276b28831af322b627f628e01912248728d129671b50242e29972a321c9324ae293b2b741ce424022aab2bc21c3125202ad92bb81c4525252ad62b9f1c1125032a952b721cbf24be29412b2a1c85244f29d82ac71a5f24d328472a0c1832247e28e929161529244d28b229f7131a2430289429da1314241b287929c41202240c286b29ac13e923f82758299213be23e2274b296913a223bc2734294e1377238e271129251341235327e928f11205231e27c728b812be22dd26a72874126c22ac2688282612212268266528de11bb21f2251928c1105e2168255d277410fb20e324b526fe0eb32097246426cc0f6520692424264b0f03203a240b26ae0fb21f1e24f1255e0f5f1f0824ea251d0e5b1fca23d8251a0e2e1fd0220725f40d421dec1f1521610b9519b91d971fa108321c292013227f07391d0021e9230084241d2c21152497081b1d44210524de09161d2e21ce23d709f61c13216423b309d51ce82009238c09d51cc120b9228c09b61c8e207b223508911c6e2045221408801c492010220508471c0620ab21a407961b6b1f2121c706341bfd1edd207006db1ace1ec6201f06271bc61eaa206406351bba1ec220ec00bc1a461e6720ba08bc1a461e6720ba0800000000000000000000161cde1c00008721db260628da181e210e277328731a71211c276b28831af322b627f628e01912248728d129671b50242e29972a321c9324ae293b2b741ce424022aab2bc21c3125202ad92bb81c4525252ad62b9f1c1125032a952b721cbf24be29412b2a1c85244f29d82ac71a5f24d328472a0c1832247e28e929161529244d28b229f7131a2430289429da1314241b287929c41202240c286b29ac13e923f82758299213be23e2274b296913a223bc2734294e1377238e271129251341235327e928f11205231e27c728b812be22dd26a72874126c22ac2688282612212268266528de11bb21f2251928c1105e2168255d277410fb20e324b526fe0eb32097246426cc0f6520692424264b0f03203a240b26ae0fb21f1e24f1255e0f5f1f0824ea251d0e5b1fca23d8251a0e2e1fd0220725f40d421dec1f1521610b9519b91d971fa108321c292013227f07391d0021e9230084241d2c21152497081b1d44210524de09161d2e21ce23d709f61c13216423b309d51ce82009238c09d51cc120b9228c09b61c8e207b223508911c6e2045221408801c492010220508471c0620ab21a407961b6b1f2121c706341bfd1edd207006db1ace1ec6201f06271bc61eaa206406351bba1ec220ec00bc1a461e6720ba08000000000000000000000000000000007513c52424263f0e8a29fe2d772ed124ed2ace2e0a305a26a12b4a2f6530e1262b2cc82fb1308327a52c3a3018313028ef2c80308a317228f02c843098317328ce2c773077315528e32c68306e312c28962c3e303e3119276e2cd430b731e124572e7133d4345a24602caf3127332a21c12d5933b634b121682a37304831901fcc28e42c8b2ef81d7c28672cda2d941d81273c2c272eac1ce32b8e3167324c1f032dd333e534ad1362270e2dd92d3d14a727dd2a762c9d19f627e12a5b2c5a1a7c27652af22b0f18a3255529fb2a8d177424df28902a1f18cb23a628352ab8155d23bd28222a76149723f328722a16150522052841296b14a720c82509283c127920c325f227ff11442068256127a0106a203025f826ca101820e4248826d60fb21fa2241926620e311f4b24c125f80dec1e1b248f25be0dad1ed8235525b00c761e87231025890c361e3023db245c0cf01dec22b2242b0c681d91228024360a171d54225324d809071d1f223324c609a81ccd2105245a097b1c8b21bd230108551c5f215b23be07361c3021f6228707fb1be920922221073c1b882006227606e31a36208a2127068e1a09204d21dc05391ac11f1921f8030e1a9b1ff120dd03231a861fbb205a023219f91e9620a4049e1a2c1f79209a0700000000000000007513c52424263f0e7513c52424263f0e8a29fe2d772ed124ed2ace2e0a305a26a12b4a2f6530e1262b2cc82fb1308327a52c3a3018313028ef2c80308a317228f02c843098317328ce2c773077315528e32c68306e312c28962c3e303e3119276e2cd430b731e124572e7133d4345a24602caf3127332a21c12d5933b634b121682a37304831901fcc28e42c8b2ef81d7c28672cda2d941d81273c2c272eac1ce32b8e3167324c1f032dd333e534ad1362270e2dd92d3d14a727dd2a762c9d19f627e12a5b2c5a1a7c27652af22b0f18a3255529fb2a8d177424df28902a1f18cb23a628352ab8155d23bd28222a76149723f328722a16150522052841296b14a720c82509283c127920c325f227ff11442068256127a0106a203025f826ca101820e4248826d60fb21fa2241926620e311f4b24c125f80dec1e1b248f25be0dad1ed8235525b00c761e87231025890c361e3023db245c0cf01dec22b2242b0c681d91228024360a171d54225324d809071d1f223324c609a81ccd2105245a097b1c8b21bd230108551c5f215b23be07361c3021f6228707fb1be920922221073c1b882006227606e31a36208a2127068e1a09204d21dc05391ac11f1921f8030e1a9b1ff120dd03231a861fbb205a023219f91e9620a4049e1a2c1f79209a079e1a2c1f79209a070000101d7c2100000000101d7c210000902a032f1c30a626b12bef2fb830ca27e22c5e3031314229f82cdf30c7318229532d30312a32d129dd2d63316732502abb2e72318d32482ace2d793191329a293d2d4c317032cf281c2d14311c32e827be2c6c319432d425ed2c2d32a133cb24a72c06327f3315244b2ca331ff322922622cec3016322c211e2a5f2f8f3032205929562eea2f561f7129ed2e4f30c51ea52a8230a231ba1d172ab430ee31621b3a29de2e4a30ab192d28bb2cd12da91a64272d2c252d4f1bd326b12bc62c9e1b2226f22a442c111aca25872a222cba19a825912a302c2718d0243d2a172c1017c124922a632cc41559243629532bb714fb21e82748292715ed212127f128ba145721b22690287a12e8202c263328b2109e207a254227a90f3a200e25a926040f0620e0247826ad0eda1fa7242626830d3a1f5c24cb25120df71e1e247825e40cbf1ec4232825bf0b841e5123dc247b0b2b1ef422a224160bd81da1227024b70a6b1d5f223d24390a291d252217249c08f11cdf21c7236a08c41c972165234208bc1c4b21ee220b067a1ceb207222b605201c8820ee214405371b4420a8219b04c61a0a20b1215204b31aeb1fc22146046f1a861fa2211b04ff1a461ffd207704b41abf1e53209102691a4e1eb21f1704691a4e1eb21f17040000841dd02100000000841dd0210000682b532f52309e276f2c75305031c728012ddc30d031de298f2d60315232852a2a2ed431e932212b342e19323433462b3e2e05322f331f2b102ee13111336e2af72dce31033391298e2dbe31fc327a285a2da931eb32bf26572db031ff323225e22c9e31e732f223412c373181321c221d2c5f30a9311f21ee2a183053318920172a9a2faf302e20dd29a62fc0300520042ab82fd030561ebd29842fb430361c3429e42e55304f1aeb28c22d4a2f561991281a2d662e89191028b82ce12d71196c27592c862dfa1853260f2c852da418c7254a2b3a2d3d185225a72a642c3e18ce24792a3e2c0e177824e329882b6b159a242a29dd2a75120a236028162abc126422d8277b291e121e222527e528a212832152263728fb11cc20b5257d273411572064251d27b6101f200d25c1267910ba1fc8245d2631103a1f7624ea25d70f9b1e28248c25520e3a1ece232f25f60dc41d5c23de24c90c7f1d022394248f0c301da02255244e0c121d4b221b241f0bfc1ce721c623ba09da1c912159239209ca1c4221fd224808841cef20952209084d1cb0205122af070a1c752009222805fb1b3220d8211805761b3020a021aa06011b0e2088214206d21a11207b215a04aa19d81feb21250a101bd81f5f21e700101bd81f5f21e7000000301dea2000000000301dea200000cc2b952f6d3067278b2c99306b31bf285a2d22315e32ef29ff2d8d31aa32d62a4f2e04321a33662b802e3f327e33a02bc12e7e32dc33992bb02e5f32c333182b2c2e3a3287330e2ad12df5313e330f29932dd5310633bd275e2d9931b0323925c72c3e318b32c623b72c0231393277220b2c6f307f310821e72a1e301f314b20272bd62fe630fc1f4c2a732fac30a11eb329182f7430a31d6529c02e4730a61c1c29522efd2fd91adf28c22d392f0b18ce285a2dcf2e8515e7282b2d9c2e6114db27cc2c672e05131527162c572d1114e126a92be12ce713a825242bac2cf113bc25e92a7d2c7d1539256f2a1c2cab15532479293d2b3e156d23b2284c2afa14a0223128ca2970140522b92765294c136221cc26ae28871200212d261f286d119b20db25b4276810592078254427360f1d202225da26d30eeb1fd62475268f0d911f8c241b26580c2f1f4524ba25200cb01e0d246e25ae0b631eb6233025560b361e5f23fc24220b151eff22bb246f09d31da1227d243409911d35223924fa084b1dda21c923c1068c1c7e21302310082b1c19218a227207851bb720f721b806fb1a6d209e213d06b11a3f206021fa05a61a1c203921f105ca1af21ff7205504281a7d1fd6201207fc1a351f9320e480fc1a351f9320e4800000be1f692000000000be1f69200000942bdd2fb3305027a32c9e307b3111291d2dfa30ef31c029d72d8d31ab32912a572e1b324f333b2ba12e7932c933902bb22e9a3200346d2baf2e8a320634e12a672e6c32e933fa293c2e3a329a33ec28f02df0313333dd276f2da731e5325426a92c39319532fb246b2ce6301c32c023342c793098310922912b373039317820812bcc2fdb30e71f682a732fba30ee1dcf29062f6e30a31c8129932e44300a1c7c29152e0330a61af528cf2d742fbf1886285a2de62e81174b28172d782e06163128b22c072e7e13eb26502c7f2d2e12b7269c2be82c0012b425ce2a6f2c8d124225972a4e2c61130e25102ae52b3214ea24a129332ba511c0241529932a3e1099249728082a4711f2233328792990106d229127eb28610fd021d226712815105421222601287b0fba20a4256f27a20e5b2054250b271d0e4620ff249f26e90c2620b0243e26c30ceb1f6824e425130b611f1c248925970ae51eb82331256608541e4b23e2240a08c21df022a22424094c1d94226a24bb08ff1c4a222f247608d01c0e22ff234d086b1cb821a823e407261c6e213e236907911bd62061225808451b7120e4217e06641b812004229a067f1b82201422b2066c1b5120b921a106b11a13203e214504311bd21fdd202108311bd21fdd2021082e105a22b92266802e105a22b9226680a72a862e8b2fbf236f2c783069312328e12cfd300f326829912d9931c332152a0c2e12324a339c2a5a2e6332ca33f02aba2eaf321b343e2bb32eb2321834c92a7c2e8632ee330d2afc2d283276331b29742dbc31f3322228012d57318c324f26c12c16315832ee247d2ccd300332e023052c4f305131c521942b08300b313b201a2baf2fd730931ea42af92e69304c1df729a92e3630fe1b9d29532e0230ce1a4d29082ece2fc019b028a42d682f7d183e281d2dad2e10184528ec2c5a2e16174728ec2c312e1917c727a32ce52d7416e126172c742d9616d6257e2bf92c54160e25e22ab92c20163125772a712cf516a524cf29bb2b39161a243529ec2afa147023dc28972a09143e238f282b2aee12db2204286d29af1139223927cc282911b821b8266c28bf105421342613286c10b320b3259427cc0f242039251527de0eac1ff224bb265d0e721fb12465263a0d201f7b241426000de31e4624be25e90b561efa235425470be21d7d230025c20a701df822a2243f0a081d82224e24c709be1c0e22f0237209751ca1215f231f09111c3721e122ac08921bd4206f2259081a1b91200c221408bd1a5220bd21bb08831a132060217a07a11ada1f0a219d07511a761fe2204207e31a451f8e202706e31a451f8e20270600005d22e222000000005d22e2220000df29812e762ff7234e2ca530ad3116280f2dee3016322029482d8931ab324429fc2def313633df297e2e5032b333452ac42e97320b346c2a6e2e8232f433002a292e5432af338e29db2df4314133b828902d9831db3230271e2d3d316632a225792cdd30fd315a240f2c7b30a531dd22032c193031314021a62bc72fdf30911f192b782fbc30351d472aea2e66309c1b2c2a6f2e2f30b21af629142ec42fb5197829ec2d802fef19fa28992d312f66198328492dc62e52184c28fb2c522e21177e28dc2c152e291556298e2c012e22165228502c6c2df6141526f02a752c45140d25712a282cd514b324bd29de2bb31572248e29772b641522244a29082b0315d9230629d82a42147623ca28942a2413d6224c28fc29ac113622872757295c1022222f27e1280b0ff221bb2660284f0d7e2130260628e90c3821c6258f27a90ab3205b250a27330c4420f3248026a00ba11f93241126d10a3c1f4624b025280cb81e00245225b70b461e99231025340bcb1d1c23cc24110c441db32286240c0a011d66224d24bf09941cfe211e2442095e1ca921b52304091b1c2c21d322b708011cbe20542299086b1ba6202622a0060b1b7720fe210c08ff1a5220b4217704481a2620742136072e1a6e1fb82056082e1a6e1fb8205608000099212822000000009921282200009029582e6e2f8b23372cac30c03199275d2cbb30d131a128c62c42315c3210294c2db931e4329e29cc2d1c3277330e2a182e5732cc332c2af42d3f32af33d729cb2d143266333929982de1311c338228642d9c31cf324f272d2d453173328825f62ceb3016322023c72c8f30b3310821452c253028315c1ff12a7b2fa630fb1db62a1c2f8c30c81d012a912e40308f1dab29512e05303e1d5a29092eaa2f9c1c1e29d02d6a2f821bd228912d182f751a6e28382dc42e3d184c28e22c512e09164228bc2cff2de414c427742ca52d76148e27162c2b2d57149a273e2bb72c5e142325682a662c4314d924cf29df2b0514e5248a29992baf14912458291f2b5f145424f428b32a2f130c24af28602ab71214235528e229df113222e62773292311d32173273329d5108b210127cc2899102c215d2647284a10cb20e025e727f40f6c2065256c27560f2e2019250927de0de41fd82489268a0d481f8424fd251d0dba1e4024ae25b90c6f1e0c245925640bff1da0231a25e30aad1d3e23dd24850a5c1dd9229b24ca080f1d5f2248248508ce1ce721e5234b08951c6d2119231808891c1621b2220d084b1ca0201e22ac07021c51209c212907241b092042216106711a941f0e216607161aa71e49200d09161aa71e49200d0900007321632200000000732163220000542a622e7f2f8b20e12b56306131f926942cba30f1315828a12c343170329e28112d9f31e2323729662d1c3276338e29ab2d5132c033be29b72d3b32ac336d29a22d0d326533e5287d2dcc310c3328283f2d7731a832f326c52c10313c32b525452ca030cc3190240d2c433053311b23d92bff2f15316321df2a8c2fc8300e20742a0a2f7d30cb1eda29762e28306b1d7429fd2dba2f0c1d0d299b2d3c2f5a1cc728622dff2ea01b8b28332dac2eab1a2528de2c5a2e8e199b27842cdf2d2018a727662ca42d5916e027412c4e2d87152f28372c9f2dcf144b284f2bc42cac13b8259a2a552c9112d924052a272c05147825dc29ed2b8a1487246329382bea14ff230729bc2a56149623a528432a1d1402235228d0299a139c221b28a22953125922af27622944111322ff26d4280a115921572641287010eb2007260828e70ea420b825b127840e65205b2536270d0d1b20eb24a526560baf1f8e241e26dd0a2b1f4724bc25680aa01e04245c25eb09171e8d2307257109c61d0623a8242809951d9e22602420075a1d21221e24d406041db821a0236706541c4e21d6228605f61be5206b221c075a1b852023229106cb1a6020072212060e1b2720b7218104261a6f1f6d21ed03ee1a141f1321f507ee1a141f1321f50700001b212c22000000001b212c220000b729d12de82e49204c2b1e302f31ff254e2c8430cb31e627602c183133321528c32c7e31b83298282c2de0314133e928a92d3732b4334929932d2b32b5330629762df5317033a928372daf3113333428c82c59319f323f27692c03313532fb250b2ca230cb31d624702b2b3043317923012b9e2fcf30b321ac2a2c2f99302720302ad52e7130ba1dd629662e3430a81cbd290b2ebb2fb01b1629902d162fd11a8f28602dee2eb11a5d280b2d8e2e681af827aa2c292e57195427612cc02df317cc26062c752da3155627ba2b372d27152228232c492dbf1432280c2caf2d7f131d26e72a972cce0f4424e6294a2ce6109025a529912bf810ac246929322b8f1234241d29c52ae7110724aa28482aa811f4237428e3299210ab234728a729da0ef0220e285e29330e1b228a27f628750da721d52688280d0d1e2133261f28e10d9720a3258b271a0c462041250d27e90c0320f0249d262b0b8f1f9a243026c10a4a1f4c24c725a708291f072463259208971e6923fc243408e11de122a6248107361d74225b24a706d41c22221a2450087b1cb221a4230108451c54211323e708c71bf32086227808181b8c2003221308b91a4f20bc21b807cf1a2620752158045b1ae41f46210e045a1a3e1fbf200d045a1a3e1fbf200d040000f521792200000000f521792200008328d82de12e8b211d2b29302231bb25a22b723088313e27402c04312332ef27b32c8031bc327628072dd1313f33c628592d06328633fe28602df4316433d9283b2dc53120334c28262da531e432a726c32c3f31753275263b2cc830f2315525d82b68308d317124712b213040313e23c52ab92ff930f1214a2a352fb430b720f229b92e5730661f6f291e2ed42f601d0f29b92d542fae1cad28462ddd2e761b7328092d942e191b3328c42c402e291a3e289c2c0c2e2419a0275f2cc52d23185728002c712dfc14bc273f2c8a2de8121d281f2c062db9142928192c1e2dd715b026bc2a2a2c8c1540248c298f2b11141e247b298b2be21383244129592be5143d241329082b0e14bc23c528982a6713382380282c2afd1187222928cd296b113e22a3274e296210fa211c27fc2832109821d026b228da0f61217c2656282e0e022104260428790c832092257627080c44201b25df26a00bf31fb9246b261a0b621f75241c26b608ed1e2724ab256b08171eab2341257109931d1123d524fb08331d89227924a5080e1d0d221f247306aa1c90219e232b08871c23210a230c08691cee2091221109381ca92034228a07c51b7f200522f006991b3720a221ca062d1b861fd220bf020c1ba01e66204b060c1ba01e66204b0600009621db21000000009621db210000e027862da92ed620ee2a373068317925532b77309d31f426d52bd430f2310f27682c4a319232f127d32ca23127335928152dca315d336b280d2db23134332628e32c8131d7329027b52c4e318532d526782cf7301e32c625432cac30c231b124b82b473057318323102bdb2ff93033228b2a532fb7301e21f229db2e663045208929642e1730e31e3e29f92d972f851df928902d1e2f491cc728242da52e021b7828d72c4d2e6b192028952cfc2d00190528642cca2de0183d27342c992dda176b27fe2b742d3515a826942be42ca513b8272e2c162d6f146d282e2c132d3716d1277c2b7f2c7d15c825bd2a372ccb145923f628d42a191292244c29202bf51434243429052b06148623d7289f2a331376239628282a3012d7224128d629cd1052220f289f29701015228f273b2945109521cd26c3286a0e462163266e28b60c0c21f4250a28820ca72087254f27280c25201e25bf264a099b1fbd244f26da082d1f7a2401269408041f3724ae257a08921ed223492532084c1e4823e024d204131eca229b24a704bf1d60224c246704191ddb21f12382068a1c60216023cb052d1c1621fe225405191ce2209b223b05f01baf2063221707a41b6720ee21d306c71a112041210e06231b671fcd20bb02231b671fcd20bb020000ce22d22200000000ce22d222000062274a2d612e4d20142af52f1731fe24772b75309531ba26732bd030f531d526182c303177326127832c873105331128b02c97311e332628a22c8231f132e927882c57319b3228276c2c1f3145326b26462cd130f23163251f2c8930a1314624682b29303f31bc22952a992fda309121342a162f8f30a7201d2a8b2e24309b1f8e29f72dab2f7f1dfe28992d262f4d1ccc284e2db62e0a1ba228de2c4b2e9e1954289a2c122eb2181028782cd52dc717a1273f2c9d2d4d17c227252c562d70164d27e32b212d32142c260f2bb52c8311aa26772ba52cf411ba28362c682dd308d6291d2c4c2d7890da27f82bb62c030ea7225d28692aa40f0f24e628ec2ac5133024ca28c92af31250239228412a221170236528082aa50e41233628c2297b0e1b230a288029890cc222c7272929500c42224227cf28fc0ba921d0267e283a0b0f213b261e28750a9920bc2592271b0c45204325fa26e70cde1fcd246126070b1e1f6624d7255b0ab61e0e246e25ff09501eb0231b25a409f21d4323d9244f09851dbc229524ee08161d582253248b08d51cfb211b2451086e1c8a21d123ea07501c36214d23b507021cc620a4222907871b6b20f7215308531b132078213508cb1ace1f4121c408071cde1e4f202305071cde1e4f202305000061224f230000000061224f23000083277b2da62e60209029ee2f1b31c024bd2a49306231f825442bb030cf3134260d2c0c315132ea26482c5831c3322c277a2c7231e9325b276f2c6c31cd3224273f2c44319c329326132c113158320b26b32bba30e8313925592b60307d310b24062b103023312922932a832fbf30ee20032aed2e5f302020b829692e14307b1f7529092eb92f191e0529c12d572f491d88285f2def2e7c1c3b28e22c632e4a1bf727822cf02d5a1a69273e2ca12d7019ff261c2c7b2d2219ae26e12b3c2de618ed255a2be42c59186a25cd2a832c421780257a2a222c4415d328e72bc22c8a158929a02ca82d5b169528262cfb2c6e164e243529122b24138023c428bd2a39123024db28ac2af3126023af28342a1e122e237528022a0a11e4224928c629ea0fac221d289429aa0f7c22f4276029720f032285272129e70e8f210f27c728f70c17216c2641288c0cb420df25c027340c6d207b254427e80b1c201425b9263e09b51fb4243a26eb08501f5924ce259a05cd1e00246f2535055a1e6e231c25dd04e51de622c9248304521d4a226624ca06c41ca421ec2315063b1c2b21382366051f1ce820c7225d071d1cac2086224005441b5d205022a304341b1020a6219804801aa21f0921cf05e61a7b1f2c21b809e61a7b1f2c21b809000000229c220000000000229c220000ad263f2d552ec61f4629822fd3301524f42a2f30583145252d2b9e30cf31e625482bee3032323726c22b4431b532bf26172c6431e6321c27122c5e31ba32f326d92b2f3172325226be2bf03022327f25552b8930aa319f24db2a23303031c4236c2aa62fd630d721492a342f943083200a2ae02e5d30831f8229692e0f30801eea28c82d572f7d1da4282a2da12ee31c8928e52c542e7c1c3528b62c0a2ec91ba827572c9e2d161b0f27082c492d151ab626e02b322d5b197726a32b0d2dbf1882268c2b032d5c187c25e62aa42ca616b325572a7f2c8c12e027a12bb02c05085e292a2c0f2d7a89682a5e2c302d8b8a07279d2ab72b47123123a2285b2acd135324f028882a2c13bc239f28312a711079237328112aad0e10234a28d029820cf6222d28a829710cc0220e2872294f0c5a22ba2737290d0c11225d27eb28be0b9721b3267928220b012119261628630ab12091257527fc094f200a25c12680090320a6243d2625066b1f4624c625bb08b81ee62354254a08121e4723ee24bf075a1da9228224c808e51c12221f245f088a1c7d2179230e08521c2021cd22b8072b1ce32073227207261cc62037224b05181cb32013225007071c8e20e8212305b41b6b20c6216c08021cc21fe8209b08021cc21fe8209b0800007121a222000000007121a2220000bb26032df12dfb1e4b29083027312e243b2a52308b311f25ce2abf30e8319825222be9304832dd25312bfe3085320626882b02318b324f26842bf43051322d265a2bc3300a3274252c2b9230c031dd24cc2a4f307131ea23aa2a0e301c314622352a632fba304021db29e72e65306420b629a42e3730781f5129062ea92f471eb328572de82ea61c9028102db42edd1b5c28d62c5a2e651a2828722cdd2d9219c1271c2c732db3183527b12b1c2de616e4267f2bed2c98169326372bbf2c75157026fc2a992c85141826b02a692c47147025122a2c2ca2132025462a4d2c941063280e2cd02cd713152c9c2da72e2b8c5229f42b072dc11463227128792a1d123424e628ca2a8f148c2395286d2a42125a23a1285f2a1a12e2227928262ad510ba225828f229b9105b222f28ad294d0fe521f3276e29c50ea62188271a297d0e52210427a728c10cfc2066262f28740c8320ba257427080c16201d25b6264d0b791fa4242e26c408421f3f24b325a108d91ec5233e255f089b1e2823d5243708381e88226f24c304c61d0b2215246c044b1d9c219c23c106c31c2a21fd221406441cd7208822a007ef1b85201b221005321b2e20e9216d063a1b1120c72126085a1bcb1ff5213908541aad1f2822a805541aad1f2822a8050000d01f572000000000d01f572000003826882c7a2d731e962909301b310e24f92954309231b824812ab730f23108250f2be5303a3293253c2bfb307632d425232bdb304f32c025db2aa930fa318625962a8630c6311825712a5d307a31ad241a2a173020310a24cf299f2fcc30f32272291f2f9130a5215029b22e5230522042294b2e0b308c1fe328c92d692f641e3c28352dcc2e451db527be2c372e8d1c81277b2ccd2d301c3b27292c5c2d271bbf26b82b072d3e1a6026332bba2c7e190926ca2a7c2cd118b225922a582c8b188d257a2a4e2c13186125602a302ce41705250e2af82b0118d8239829fd2b41163426a12a8d2cf0157a2b302da22dae96042a942c232d60952d24fa28c82a658a3324ba28ab2ae611482388284e2a1d116923a1283d2a411016238828112a12100c237728f7297f0ce4226f28e4294609a9224328c92967030f22e527732918031b21fc26d0289b02a5204a2657281c07582085256627a706fc1fd9248c261d061e1f872438267405bf1e3c24bd252a05441e9c232825cc04ea1de622b7248704d41d6d2260247604991d2322192449040b1db1219023dd035f1c3621d7229405f51bc520412214059c1b8e20f521cc066a1b6720c521a0067e1b50209221b106ea1a2f20a8212d06181bd61f2f211308181bd61f2f2113080000981aba1e00000000981aba1e0000d525662ba82c3c1ef4284d2fb630b822292ae83084322d24ec2aee305732b124b22af0302b322f25782aad300c3237256d2a6a30bf312d25372a263056310125f129f32f0b319824c529b82fdd30d2239429672fab30242266290e2f7d306d214b29cf2e63307a2038299b2e4430291ffd28472e1130861ea328b72d522fc51d3228042d812eaf1c9d27952ce92d021c2727392c712d131bba26982bf52c391a6c26222ba22c88191326d42a752cd918ec25972a5d2c5818c325642a4e2cb81796254e2a442c7c179a25432a3e2ccb169325452a262c7817a1252c2a052c1b16b524b529712b028ee12c642e602f7993cc318332c9325da55b27c02a652c3914af214e28d2299d13cf226228272a21140a2389282b2abc1200238e28322acf1107239d28432a0910e222a0284a2a260ec9229528312a320972223b28ae29ef0850212427b3281108c6202c261a284f0762208d257c279809e31fef249c260809e81e5c24d5256808791eba233c25f504631e0f23d624a2016c1e9f227e24a4814c1ef32125249b81c01d4f2147237881171df220af224d81d11cb02068223b01691ca42044222001211c90200d220e01c21b6820dc21f802a41b50208f21ed02f61a1b207d2138062d1bed1f3b21bf022d1bed1f3b21bf020000be1f2f2000000000be1f2f2000000a25ee2a692ce11bad26122c452dd186ca289c2f03318220f52a7f31f132f024b62aed302e324d25622a5b30af313a24d529cf2f16319b2491295b2fa9304e246c292e2f7f301c245229062f6c305d223929e82e5c3015203c29d42e56306d204129d22e5d30e11f3729c52e6130d21ee528832e4630b71e38289d2d4f2fc91d2f277f2ce82db21c8f268c2bfc2cbe1b6a260a2bb42cf0194e26ac2a752ca0181426362a2e2c1218ab25eb29032cdf165025c529df2b1f170c258e29a82bc316ce246829722bd415d9245829602b4215cb2469293c2b96143f25552a592c0615e325222ba22c221440258d2a252cb110a926ca2a372cf311ea23cb28562a8c102a238428e929dc12c9226c28de291d14d4227328ec2924146123c328482a1f1296231d29c32ac70e41233129e92aa10cfa221929d22a90036e22ba28522a48838f2199271e294288902137262428198b2821792546279c8cae20b4245526f989ea1f0c246f250582aa1e3a23cc24b401ed1d81224e248a04801ddc21c1233604331d90216023a206021d6e212c237908ba1c3421072339085b1cf320dc2200090d1ca720a0223d07b11b69207422df06511b2e2027228a06521b0020bc218b06cb1aab1f5b215604781b0a1f9420c404781b0a1f9420c4040000881cd91b00000000881cd91b000091245c2a0d2c311ee5241b2b8a2c931f0827a82d222fc420262a5431d2322e22112a0431543211233329832fb930b822152aad2e4e301d221c298b2e2430f3217f280d2e8c2f61218a28d92d3e2fff208528ce2d3d2f8b2050280a2eb52fd81f1c291d2f8e30aa1fb029f22f1831ce1fc228f72e8730391e7926592c8e2da41baa264e2bc12c051b42268e2a472ccb19ae25282af22b87188a25d9298d2b111869259f29552b8f1644255f29152bb6150e253c29e42ad614e9240d29a32a1314e924f128722ae512ef24e328562aab1143248a280b2a9d0f9d224428e429e80d2f222928e4291a0f9721c22756296c0ed720ef26bf288f0d74217c267028430e2722d026af285210e021c526c328a01192211827d2280b129b226628d2292a130a24a829602bb3122f240e2a0c2c570d2524142a032c4a8d77230729772a4990be21a6271429218dee204b2655288c871720e824bd261602a11f2a248025d705b81e8a23fb244a08261ece228b24d907941d35223424fc08391dc9210024aa08121d9a21b7238708dc1c5e216c235708b81c3321272337087c1cf920c1222709381cae203722d908e81b6220d1211007921b26208b21c3066d1bee1f4521be04f71a821f12217204b31a1b1fa020db00b31a1b1fa020db0000009814281c000000009814281c0000d7236128c929e11a7624722a602c551f9924292c692d8d1fe82c7f331a354e24e825e22ce92d801eaa27012dd92dcf21ea275b2dc02edf212628802dfc2e5c2128289e2d0c2fb62010285f2dbc2e15207b27f62c5d2e161e2f27c12c5f2e031cbe27652de42e301944247929432b5b045f21a425f8273393eb246628e329880b4d254329ec2ac0151b252529e62a8a153d253529e42aae1510251a29cb2a7e15e824f828a32ab214c524d2286d2a90149c24aa28332a69147e248c280c2a4d1452246228dd292b133b244028b829f011152426288b29bb110f24ea273f29a910c6210d264e280d10011dd2228124270c6320c6248226280e59218525c127820ff8209625b627c110ad212b262028b610c92157264228a50e6422a3270f297c105a237f292a2b1a1226253d2cb52d930ef2240a2c7f2d508e0f2320298f2a4f8e8520fd25ec274e82541f2024e9259c05471f98238825dc01d81f4323ef240002bb1e90228a242805c01d1522422467044d1db521e423bc08001d5b2176237808cd1c1e2142234a08911ce720fa221408621cae20bd22d507261c722063226907001c4020f2211b05f41b0c2083211405d31bf21f5221fe04f71bdb1f1e210d03851b781f0e21b806011b0b1fbe20ae02011b0b1fbe20ae020000351d561f00000000351d561f0000b524cd28462ac21a6126dd29962bfd1c1e2412296f2aed1c601dff23f4244216632367289c294d1cc125bb2beb2c411f6226772ca32d0520f826ad2c102e4820ff26bb2c102e2f20fd26ac2c062eea1fb226962cf22d951f22264c2c692dc01e6a24022a9b2b001d91219c2697288718502263264a28410fe5236a2707298a9199243428b529b184c4246328e6294c0bc2246928ef294a0bb6246928ed29360b8f245e28d129fc0a64244728b2299a0d302426288b297b0f0c2409286b29ae11df23cd2746298711a0238c271c295b118f235927132957105e230b27d928950ec12250264128c10f06212525e0267d0ca620bb246926860ea82099247626f109bc209b2496266b02be20a1249d2643071521d924a826d60d3d2058248026930b3a23a826722889092828682fb7305d0e9f27512e20304c977f201e26a4274c02911fc4239c25c20a881fa622e324ba0a281e9022ab2480092e1e4c226d24190bcd1d09223324a90a7b1db62107244b0a2f1d65219023f409fc1c1e213e237408a61cd320df222708511c93209a22b607081c4f2030223407d01b2520e821fb06dd1bdc1f8b210607e61ba21f35210a05b21b4f1ff920e904861b131fbd20e1025e1be81ec6203b08a51a981e9c203d04a51a981e9c203d0400001c1c441d000000001c1c441d00009e2354283929fc18ae23e428072a981cad216728b229361c95218427ad28bf1b1525a228142af91a7525122a082c711c53251f2b922c2f1daa258e2be02cb21df925b52bf32c011e0726ca2bfc2cde1d0626a62bda2c7a1db4252b2b7e2c011dbe24182adc2b031cec23e828a22a6f19c8234c28db29b6151c243928a329c5114124382899296e0d6d243a289a29c80a6e2437289c29c90a57243328a129c10f2b243628a729da11082427289629a911ca2311287e2978119023db2757294f115d238d2725293b102a233827ea28670ee822c9269f282c0ea62257264f283e0c1622cb25d827c50bbd214d252627530b5521e924ad26ce0adc209c245d26340a8c2072243526100c752069243026f70b742068242826f50b9b20572426261d0c812055243f26bf09381caf1f9c213b0305135f18df1b3900671cdf20d7222001bf1df9215b246704031ec1210a24ac07d31dae21d3233409941d8c21ab23690a721d79217c23dd084d1d5a215723bc082e1d25211d23a008ea1ce820d6226408ae1c98204d22f905661c4b20e7219d05321c0c20a1215b05f21bba1f572112056d1b521f0b21be044d1b2a1fdf20a804381b001fb5209c04571bf61e9420af04181bc11e9320b802de1a871e63206204de1a871e632062040000a21c541d00000000a21c541d00009421822771284019b92120283529361b02222f283029921bd72236286929df1a3a24c328202a6a1baf246b29ee2a421ccb24f629a02b5c1c1425592a102c751c6c25882a282c961c8825862a272c261c5a255d2a042c031c06250c2aa92bda1bb224a2294c2b711a6a242d29c42a9b173824c428472a941421247128e129da1201243e28a2299e11f3231f2878299010d8230b2863298110cd23f0274f297b10b223df2743296b109523bd272f295b107a238d2710294b1044235227e9287d0ef4221627c428fc0fa422d426a328a10f5a229c2684284c0f122255265a28f90ea721e72513287e0e672169256527d30c0121f024bf26780cc2209e245e26400c7120692417261a0d0a2047240626a40cc31f3224f325750c791f2024ea25ad0a5e1ff923b825950a331fd522e1246e0a6e1c281fe520ea075e19e91dff1f2b06911c4f201b22d405d51d2021e82335897b1d4f210a246601471d5521ed230b043a1d3e21b723ab06141d19215f237b06e01cea20f8223906e51cc720a0223f06c01c98205522a303a71c7420222290038b1c4320ec217a033d1cff1f8a213f03e41b5c1f142105038c1b031fda20e4022f1be81ecb20c0027a1bdc1eb120c604951bce1edf20f700ca1a5f1e8a20c408ca1a5f1e8a20c40800000000000000000000a21c541d00009421822771284019b92120283529361b02222f283029921bd72236286929df1a3a24c328202a6a1baf246b29ee2a421ccb24f629a02b5c1c1425592a102c751c6c25882a282c961c8825862a272c261c5a255d2a042c031c06250c2aa92bda1bb224a2294c2b711a6a242d29c42a9b173824c428472a941421247128e129da1201243e28a2299e11f3231f2878299010d8230b2863298110cd23f0274f297b10b223df2743296b109523bd272f295b107a238d2710294b1044235227e9287d0ef4221627c428fc0fa422d426a328a10f5a229c2684284c0f122255265a28f90ea721e72513287e0e672169256527d30c0121f024bf26780cc2209e245e26400c7120692417261a0d0a2047240626a40cc31f3224f325750c791f2024ea25ad0a5e1ff923b825950a331fd522e1246e0a6e1c281fe520ea075e19e91dff1f2b06911c4f201b22d405d51d2021e82335897b1d4f210a246601471d5521ed230b043a1d3e21b723ab06141d19215f237b06e01cea20f8223906e51cc720a0223f06c01c98205522a303a71c7420222290038b1c4320ec217a033d1cff1f8a213f03e41b5c1f142105038c1b031fda20e4022f1be81ecb20c0027a1bdc1eb120c604951bce1edf20f700ca1a5f1e8a20c408000000000000000000000000000000007d1db8262c288218502b073057303e26162c0d30ee305e276a2c553047310d28b22c94308a314e282b2df730f031a828882d37315c32e528c02d51316f3217298b2d33315f32d228802d16310f328528152dc630b631b427402cc330a9311625b52d9c3223347624e72c9f3209341a22662cc331d932a1207b2c0b320733b820b729bf2d692f621ed9288a2cc52d691da828a12def2e4f1cee2da4348b35ad1d9b2c34311e32b30ca429c52c922d0a150f2bf22ccc2d0e18052c5b2de62d2f17172c552de62d3815642a5c2cf52c57175f28bc2a002c051588253629902a4b15aa239428012aa6149a22a428452a6c14ee211928602931134b212e262f2818138720dd25c2271112162066253a276f1021200c25c826e80fc91fc6245b26750e601f8f2401262d0d031f4224b325070cd11e1a248025d50b981ed3234225e509481e7923fd249c09091e1623c624b407c11dc522992458075c1d74226524d806051d2b223624d803d31cee211224b203861ca021d5237603461c682182234603241c3b212b232c03e61bfd20bd220603941bba204822f700001b6820cc21ae02d51a25206e219e027e1aff1f3221d400511ab81f0021ce00131a8d1fcf20c600071a731f9d20c5804919eb1e89200602cf1a511f9820150600000000000000007d1db8262c2882187d1db8262c288218502b073057303e26162c0d30ee305e276a2c553047310d28b22c94308a314e282b2df730f031a828882d37315c32e528c02d51316f3217298b2d33315f32d228802d16310f328528152dc630b631b427402cc330a9311625b52d9c3223347624e72c9f3209341a22662cc331d932a1207b2c0b320733b820b729bf2d692f621ed9288a2cc52d691da828a12def2e4f1cee2da4348b35ad1d9b2c34311e32b30ca429c52c922d0a150f2bf22ccc2d0e18052c5b2de62d2f17172c552de62d3815642a5c2cf52c57175f28bc2a002c051588253629902a4b15aa239428012aa6149a22a428452a6c14ee211928602931134b212e262f2818138720dd25c2271112162066253a276f1021200c25c826e80fc91fc6245b26750e601f8f2401262d0d031f4224b325070cd11e1a248025d50b981ed3234225e509481e7923fd249c09091e1623c624b407c11dc522992458075c1d74226524d806051d2b223624d803d31cee211224b203861ca021d5237603461c682182234603241c3b212b232c03e61bfd20bd220603941bba204822f700001b6820cc21ae02d51a25206e219e027e1aff1f3221d400511ab81f0021ce00131a8d1fcf20c600071a731f9d20c5804919eb1e89200602cf1a511f98201506cf1a511f9820150600003c23e124000000003c23e1240000c12b1a30de301c27c12cc530b431be280f2e85318232542a332e0e322c33f92af32ead32f933d12b2c2ffc321d34d72b232ff5321b34922ba02e8832b333ec2a2e2e2b325033112acd2df1312133f428a32dba313a331a276b2d0532ad331925bf2c2032ab3351245f2ce43142336523382c9431de329822582a2a301e31c220ad29ec2e6530c91f262b36303b31871fc72b31316a32341e5f2ba630ad31781caf2b422f4b30601a0e2ca92e8d2fc31b5e2c762e1d2f2e1c402c282e2a2f9c1cb42b782df12d5f1bcf29b52c652d0a1be128712b762cac18bc25962a432caf1716256d2a932cd116c4259e29612b9f1294237528b929141507228627f2286c146f21d2267728961202213b261828080f79207e253827230d2b201225ad26720b0220e4246c26290be21fab2416260a0b551f5b24b325ae08ec1e18245f256b088f1eaf230f252f083e1e3a23cb24f807d41ddc22922470077c1d8e22632400071e1d48223524eb03fb1c11220d24d003da1cd321b323b703a91c82214f239203a11c2421d6222e01711cc82052222201f61b7520da210481081b3120a921e600be1a0b20bf21dc00c81aed1fc821dd00b41a841fa121db80441b4f1f0521ed80221bdb1e67206086881a571ed81fd600881a571ed81fd6000000a523102500000000a52310250000272c3e30023124285f2d6f318032c829662e34324d339b2b1d2fcc320d34652ce12f84337a34cf2c1230ee33b034f72c1430fc33b434d92c8a2f7c336b342e2cb22edd321f34912a272e4b328633f528ed2d023242334727752df83129337d25d52ccb3108336524512c7931b6320623a12bc530e0317a21552b623065314321792a0a30ff307120772a143018310520292b13301131411dce2af62feb30841a0d2b662f7730d919162c0b2f4730bd19ae2c142ff72f2e18d42cfd2ea62f8b196b2c602eeb2e551be12a4a2dd72d771bd928832c3f2de1190826f32a472c6d18f424f9297d2be717c124b729f82a95176b241129a42a5b1574237128f7298514b1221928952942131e2256270329da116421602639282911b520a6256127cf0f4c205725fa26210f17200725a526c90e8c1fbf2445264c0dfd1e6624d725e70c561e19247c25720cfc1db5231f25330c8e1d4523d224610a521de82285241c0a0e1d882244248408fd1c372206245d06f61cda219e235406e61c86213523c103ca1c3c21e62239019a1cef2089222d01521cb42048221b010e1c8f200c2209017c1b5d20c321f500e41a2b208121a3028c1a02205e218202931a01205d213204de19d01fad21be06bc1abd1f5c214c04bc1abd1f5c214c04000087241a250000000087241a250000722c803066314a28c92da731be32dd294f2f65328f33c12b1b2fb93209340d2caa2f6c3370348e2c1030ea33b734c32c43303434f634dc2cfa2fd0339d345c2c3b2f36334934532b982ed6321534f129fe2d6c32aa337228972d09324333b026dc2c9031ea32ba24a52c4a31a2328f23162cc330d831de21082b4f3054316020f72a17301731c71fc52a9e2fb930211f2a2a692fa3304f1ddf29162f8230de1b772aa72e03305d19d52bdd2efe2fff14f62c6e2f2930100da62dd32f4530c48d762d6c2ff62f938d722c0a2e9c2e8a0c012aa82c662d9910e6266a2b7d2c29124c25b52a4a2c651402250e2a962b131659245129ef2a45158b23bd28412a9314e0224628a22976135b22f1276629e5127521d526ad2839110521332619282a10b120ea25b527960e7e2092254727290d33202e25d426810bf71fdb2471261e0b9b1f91241b26da08271f4324ba259008ad1e0d24712542084b1ea22326250408161e4423e824a904f91dde22a0249304ab1d86225f2473017b1d2d2224246601381dd721a52355019c1c83211d232d012d1c1a2196223303861bb3200222e102fe1a6e20a021ad02a81a3f205a218d029c1a1c2032218802c01af01fed20dc001c1a6e1fce205702eb1a331f9920db88eb1a331f9920db880000c620ee2100000000c620ee2100007b2c8f3081314128a42db631c432132a262e0f324333d12a0e2fdb321b34f02bfc2f6e3370348e2cf62ff133bd348b2c12301134d234942cf12ffc33ba34462c702f923381340f2b3f2f183347349b29662e7b32d9333c28a92d10325733f426ef2c9131ef324625932c2431573203244a2ca830b9319c21892b7a308d313520602b3c304a31d31e1a2b962fb030aa1d182a272f7030791cbf29ce2e5230f71a262aba2e37301a19472bf32e11308016cc2c712f2e305813d52d16306c30f48d3f2e21307830c994c72da42f1b306c94de2cd12d922e75939328492c182dac0815257c2a1d2c7c0e3f25fa29882b0612d6246229f22a52106224e528612a980d79249d28ff29fd0fc5234f28a829f00e45228d27f0289a0d9b21a8264c28010d2e210726bb27a00cbb209f2544273a0c57204925e7268a093420fb2487265d091720b1242f264306c41f5f24cc25f205351f0d247325d701c51e9a231e25ba01571e3a23d5249e01cf1def229b247c01591d932266241804f71c48222d24cd03c51c0c22fd23a7034d1cb021b0234b03091c4d2135231703851bcd204d22e1024f1b7820d321cc02671b7e20f321d5022c1b6520e721bf022a1b34209d219304af1af61f3821da802a1be21fff2007092a1be21fff2007090000fb20c12200000000fb20c12200008c2ca1309531e426dc2d73318b321829d92dde3119331c2a752e7332cb33292b1c2f41334e34c52b782faf33a034052c4a30303401358d2c29301a34e734262c662f80338134e72aad2ee5322934b329212e6832be33a5289e2df73138331527222d8a31cb322925b72c21316932ac232d2c9c30c4317721d02b453055311d20622b163010315c1e8c2a652f9130cd1c042aea2e5330081c8e29872e2130061a62291c2ed42f77180e2a242e6b2f6815482c132f0f308e120c2e37308b302d0e082f8f30e1306395ec2e54308130118f662d422fd52f838d672a212df42de7104026f52a572c2d132125372af02b4114c1248a29602b281529241d29d02a83147123e0287c2a201369239e28282a3311e622f6275129ec0f3c223727bd28920dae21b6266828140d4a213a261628b90cad2091256b272e0c2b203125f826720bba1fef24af26e70a6e1fb6245c26a40afb1e792410267408cb1e3824b32556084b1ee6234b250408e81d7023f1248a07711de4229024f106001d672238246206cd1c0022d4232006801c98214623be05181c2521c4223a05741bbc204a22c104d71a7820e6215e04881a3d2094212b04701a092045211b049e1ace1ff9208902421a6f1fd720fe03c91a561f8b200f06c91a561f8b200f0600005c21a622000000005c21a6220000152c7d305f31d626132d9331ad32e528962dc931f1329229fe2d34329033fa29ee2ece321f34e82a3d2f54336a341a2b0c30ee33bd34d02ba32fc733b334012b132f53336a34612a9b2ed23222343829492e5832bb33ec27cb2dda311d33d225052d4e318f329024642cd0300432dd220b2c60307a314a21082c1f301631f11ed52bb92fdb30c01c842a462f98303d1a352abe2e4730f119e7295b2e0230e5187529252ed32faa17cb29f72d8a2f2c158f2bc32ed72fc911c72d15306e306c94c82fd130f830f49a43300c3136319d9b6f2fa130be30a49a9b2c9a2e372f0e93f1272d2c642d1111cd24a629bd2b8311bd24c729772bdd137c244e29142b7113f1230129b82a96125d23c528832a2b11bd224628db29bd0ff82170272b29550dea211227d2288c0bb321aa266128460b5a21222602281908f820b42576279c0795204825f72605072320dc246e265606511f7f24fc259a05081f35249c2563057f1edc233d252508081e6e23f924b307911dfa22b5241a070f1d902278247506d81c402248242e068e1cef211224d005421c862194236f05fa1b0721c8221705c51bba204622fa02581b94201222d002021b6b20e821af02d51a4620a621df002b1a122060215d023a1a481f9020f9033a1a481f9020f9030000e0207c2200000000e0207c220000f12b6630523146264a2d643185325828e32c57317c32f328852de6313133dc29202eb63208347f2a742e35336134bf2a242fc433a134592be92e82338434c82a802e11334334f729492eb6320d342a29ea2d5232ab333328782dd73110333126062d4f3175329224d02ce030fb31e8220d2c6f307e310a21d72ac62fde30a31fa82a3e2f9d30961e062ab62e4030931d9829532ee52fd21c5e29132e9f2f481cea28c42d662f961ab5286e2df02ecf17f529e92d212f9a13722d7e2f5230908d2030123148315f9bf830e331fd31b59dc93096319b31469cee2e63308c306c98ea29ba2c762d0a0a78247329002cfc0f8b245d292c2b6112b62464290a2b9d1275240d29aa2a42121124c728602aac10e0224e28cd29e60f3222d32756291e0fc92166271e29a50e8821e426c128f00c46214e263928b60ce620de25c127600c85206d255627090c36202625f626870bd71fda248826010b2b1f7e2402269308aa1e3624ac2541084d1efa235b250508dc1d7e231a257a07911d1823d9244304481dbe2298240b04071d4e224824d903c71cda21df23a9037c1c67211a23ba05571c1c21cc225303fd1bb8204b220f03c41b4e20a521f902341b03204b21ec00471a7d1f202167020f1abd1e692052020f1abd1e6920520200005121262300000000512126230000072c62304a311425652c3b315d322c28ac2c5631933295280b2dc93136334529122e79320334582a432e43337634582ac62ed033ae34dc2a812e64337b347c2a102ee9322d34a929dc2d8032e733d1287f2d1b326c33a1271c2db631e9321d26982c293154329e242a2c9030a231c722d22b29302d311e21092bbb2fd930db1f802a402f90306d1ecf299b2e3730601d63291d2ec22fa41c1929b92d412f111cce287d2d072f0e1b8c283e2db92e831996281b2d652e7116d92b7a2e882f0212872f9e30cf30cd986f31ea31c1313e9ed53192327f3218a0e0309431b7310ba00d2daf2e1e2f8398f6260c2b662c1b076b256e29502b8805c8246e29122bb71229240b29a92ae7129f23aa28332a521203235328c529d1116222192896297b103522aa275d29210feb21e726ce28cc0e582147262e28c70cee200626fa274a0ac720c025c527190a832064254427e8064420f024aa262e0208208c2421260f02611f4724c325e201b91e0a246525b701291e98230d25b804c01d1e23b02467047b1dac22632466013b1d442223245601e31cd621bc233f016d1c6f21fb222101171c062172222203861b93201b22e102f31a71200a22e300071b3920bb21b102391a871f42216202691a4f1f2521ba05691a4f1f2521ba0500006721632300000000672163230000672b1f30f230c824312c133131326c27722c373178323828dd2cde312f33da28a32daf320f349e29022efa324a34cd29b62e7d338334432a712e35336834b429f72db0321d34ff287f2d3d32b0335728112dd93130335b27bf2c8831bf322226592c13314932c924eb2b8730b0313323572b073010318121e12a662faf301020272aee2e7b30b21db9296a2e2130331c9529072eb82f7b1bfd28a42d1c2f0c1a8a28662dd22e151a2828032d682e0a19cb27a72cfd2d7716c629382d862e6c10762e3b307f301f989d313b322632e19fd5326f333c33aba176320133da322fa24230f230fa3014a00229042cb22c0897b825bb28602a0494b7242c29bf2a390b1324dd28a12a330de423a228462a090dd4236628e929ff09c2234a28a829f603c422042845292f09f5217227f2288f088c21c72681284008272127260e28940aa42099256c271b0747204425fc268d06e61fec2480260c065e1f8c240626e1011c1f4024a225d001ea1e01244d25c4017f1e7523f024a801eb1dff22a72482014a1d93225c245a01eb1c3c221c244101931cbc21a9238103421c55210c236f05c71be7207822f6040b1b8420ee217e04be1a4520a4214d04db1a20205d21a002491adb1f3a219d05571a3d1fb7206e02571a3d1fb7206e0200005d21e722000000005d21e7220000c82a2430ff30ec241e2c10313a326c27312c32316c320c28fa2cb5311433b928a12d7a32e93357298e2dc33226344529182e05334c349729ed2dda3240344029ae2d82320334aa285d2d2c328733c927f82cca311833bc26842c523183326725152cc530ef313c248d2b60308831dd22da2a03302c315b21712a732fd4303720012ae82e6430521e70293d2ee62faf1c0e29c82d4e2f6c1bc928432dbb2e6a1aa028122d922e9b193a28da2c3a2e96181928a42c032ed8174e278d2c162e32144a2c742e572f79952b31e431d83149a07933eb3376330da413343e34e433f0a4b9322c33d93270a2532c282eae2e859558248329352cc30f42240d29b52a10135324f128d22a12129b23b228722a5e1034237b280e2a231099223028be29940f6822c1273129ba0de9213527f8288b0b8321d926b928090b5d2178265b28d90af920e025f7279d078220792566274d0237201225de262702f31fbf245b260702551f77240526df01c21e1a248725ba01e01d842319257f04741dee22ad246501191d6b2260244d010b1d052213244901f31ca72192234301d11c4a210023b003771c1c21a5226b03391cc22039226405cd1b9320f221fb04671b47208e21b904c41abe1ffc20dd80b51aae1e7820fd05b51aae1e7820fd0500000e218522000000000e2185220000242af52fd1308e242e2c073145329926f32b2e3177326c274d2c9b31ee322728fc2c4e32ab33bb281e2d87321034c7288a2db4323234fe288b2d8a322534a5285a2d3832c6332428002de03133334227ba2c8931c332f625782c28314532c724042ca230c1314d23572b3c305431f9219c2ab72fe130bf20012aff2e6f30da1fa329802e18304b1e5c291b2ead2f9e1cf928b22d402faa1ac428342dc32e2b197128ee2c5d2e40183428b72c0e2e0618e327672cbe2d8c1719274b2ca72d58126b299f2c7d2d3996f12fa930d8304fa0c9331534bf3338a5b934c5347734eea6503471342e3454a678302b310f316a9fbb25b229972bd9051f242a291b2bd61217241929dc2ac912a923da288f2a601150239028132a3310c3223b28c3290b0e5b22142895290e0c032293273a29ac0b8421cb26c4283908492160266128b2020821e325da27920293207625312756020d201425ba261102731fb5244c26e701f61e7424f525c701b31e2b249925b6016b1ec2233325a301391e3823d4249781f91db82289248681a91d4e223c2472810f1dd221f3234b817a1c69218f232501341c15210e231301241cdb2088220f01f41b9e2051220c039d1b5a20e421ea029f1af61f4521d8001c1b601ff8208a041c1b601ff8208a045117a720a62356825117a720a6235682c529532f7a3045237c2b0d314032a026842b0b313d32e5260b2c7d31d032ce27882c163272334d28d52c5532f1338228122d77321134a728f42c4b32f9336328cc2cf3317233e227992c9a31e132d226622c41317b326325392ce63003321c24ad2b6c3084317d22bf2a0e3024314621312a6d2fc7303f20082ac72e5930bc1e6629382e0530ff1cde28da2d772fc41bab28912d122fa919c728ff2c402eed17b528962cdf2d341455287b2cc82d881110285e2ca02d30116a27162c552dad0dfd25562b332d1d06002c0f2ec92e9898f432533309331aa5fe342835bf344da81b351d35b33460a9ff333834c33361a6f028842bc92c4e9235231a29eb2a990c4924cb28ac2a780dd723a828622a000d94237c28202ace0951234b28db29bc8321231c289729a483cc22cc273229348935223b27c2282b839021c3267928d78207212c261a2891029520ac258527050735203a25ed267206bd1fc1244a26ec05111f5224be256905b61e02245d25b6016d1e9f230a25a4010f1e3d23c6248c01971dc52288246d01171d59224624e603c31cf1210124a5034d1c7c2192234b032a1c1e2103233003c71bb0205422f6044b1b6120d621a704201b142068218c049a1ac01f1621e605711bb51e4320c004711bb51e4320c00491101a202b23708091101a202b237080ac29392f7730f722ec2ad63002323d26d72ae2300b324626c32b5b31ab321f27622cdf313c33e7276c2cfd318f338c27bf2c2032cd33cd27da2c1e32c333aa27b32cdc3158331f27782c9131f43258260d2c223164323c25ad2bb730de311a24392b53306931e0219e2afd2ffe30c020fd294f2f9b30731fcd29ca2e53301c1ea929602e0f30e11c4229f62d972fb71ba928852d1d2f3f1a4228172d992eb5190728a72c132ee2188727562cb12d15182227352c812d5318ad26d72b1d2d3e171c26632bd82ca0168127172c0b2dbf0d7f300c311a3106a2ea34f23483342ca9ae35c7353a35b4aa1c353635e2345baacb2c1b2e872e21a09323ed28ae2ad50cd223c428672a7e10cf23ad28432a7c103f238128032a7a0eeb225428cc292e0ea022252896293a0c5f22f2275c29e108c92177271c296e086a210027cb28250804214b263628ae07ae20cb25a9272b075c20752548273a020a201a25c2261002851fb1244526ec81171f5624cd25cf81c21efe236325ba814b1e732304259b81da1de022ab247f81521d302247245b81b31c7921a52333813c1c01210b231501301cda20ba2211010a1c8e206c220881051c4e20fc210781b21b10207e21fb80801a8f1f1e217d020d1b741f2e210d080d1b741f2e210d080000ac1fbc2200000000ac1fbc22000017290f2f6530e7229c2aaf30e43189250c2bdc303032cb259c2b2d31b2327e26bd2b8c31ee32ba26ff2bca315233f4266f2c0c32aa33b627602ce53186337827362c9b311433a726202c5431af32dc25b12beb302232b9244d2b7f3094315623ba2a14301f310c214b2a892fc630d51f062a032f7e30ba1eac299d2e3730f91d2829152eba2fc61cba286f2d022f121c7a28112d872e911a4328c92c272eb619be27782cc62d30191f272f2c732dc618d526122c532d9418a726ed2b242d08184b269c2bf32cd4163225fc2ac22cfa14f829da2cad2d55953b343a34f4332fa8d835dc353e3562acd135cd354935ebac8532ef324e320ea80e26bd29742bbb0f3b238c28322a750e4924a7286b2a60848e237c28332adb8329235328f129a883ef222d28c4298a83b522162880296c835b22b9274229de88e3215327ea2802835c21a2266828bd82f4200626fa2787829e2090255e275b024c200a25bc263282b51f9c242926f7812d1f3724ad25d581821ec3234025a901e31d2523d82481013b1d772271240104d11c06221a24b003831c8b2190237403521c452106234f033d1cfe209c223f031b1cd32046220c011d1cbf201d222603081c8f20e8210701b61b5e20be21f402951bfa1f2821f780951bfa1f2821f78000008c1e4323000000008c1e432300003a294d2f44301723812aed3046325825cf2ae530473298251b2b433193321126b92b8c31f9329726be2ba73149339c26272cc13162331727162c8a312b33b726bd2b3731a932dd257a2be73030321125fd2aa130d2311224bf2a5e30743159224c2ae22ff730ec20de29382f91300720a229d92e5a304a1e69294c2e0530011d1929992d182f111caa28342dcd2e401a4528012d7b2e2d190c28a62c1e2e6418b927462cbe2d65171b27d72b452dfd14e426a02b022dd614af265a2bca2cad139226242b9a2cdf11f825ca2a672c55111e26a72a712c77113e2da22e2e2f2fa070357435ff34c6acb936a336cb3545af68356f35d034bfac1427802aad2b3a071e23dc286a2ae811d323ac28892a7e105123b128692a3410ef2282282b2a310eb9225c28e8294a0c5d222e28a529100cf421f4276a29990ba5218227192952083d21f226a228ad02e92044262128820278209b25472748020e200c25922612828e1f99241826ee816c1f3b249f25af85231fc32336257785ec1e2523ce244d85621e8f226f24e384b01d0a2208247481201da42184234f81901c3e21fb222a012b1cda2088221001de1b862015220101711b3a20e821d902621b2420bc21d402711bd51fc921c004b5195f1f64228e06b5195f1f64228e0600008f1d0520000000008f1d052000003729c82e27303e20532a08318932b124332a15317b321825b82a5531bb328625122cd2314533b026102ce1316d33ad26012cbb3142339426582b5231d63209260b2b033178329025e72ac2301232ca24752a7030903112241c2a14301731ba22a0297d2fc6301e215729f32e7d3001204b29822e2830ed1e04290e2ec12f3e1e61287a2d142f2b1dc327e32c712e161c82278c2ce62df31a8027332c4e2dfb190b27002c1c2db818a726912bd82c08185426072b882cdd16ee25c22a5f2c6e16b525a22a562cec1691259e2a492c76174425442a142cbb17eb25ba2acd2cef178532eb327d32b8a93937fb362c3602b1d435cf35193588afc627912ae62b37980723e028702ad5117c23bc287d2a41115d23b8284f2a3b100d2399281f2a4d0eed228828ff296b0cd2227c28ec29390991225228c7295a03f221c327562909832c21d126af28eb87a92025263f28238756206d256927a4860820d3249c262d86fe1e7f243626c981741e2024a325a581121e73230b258d81ee1dcf22a6248481d91d6e2256247e81b31d282211247481281db7217e235181691c2e21cd222081da1bb220382201019c1b8120f221ea027b1b5f20c021dd029e1b46208621ea02ff1a24208921ae022e1bc31f0c2195042e1bc31f0c2195040000211a7b1e00000000211a7b1e00001c24082b2b2c291a402be331af335624d52a6a31bd322d25f22a6431c232d1254f2bd3311e335b26072b8531f8321c260b2b3b31a4320326a92ac03032329425262a51308c31c2240e2a1a302a314d24c529d32fe530b8229429692fa3306e216429fa2e6b30651f4229b62e4f30351e0a29722e2d30a11db628052ebe2ff61c4428582de12e381ccd27d12c242e381b4427632c9f2d421ac926eb2b1b2d69198d266a2bcc2ccf184b26212ba92ca2170f26eb2a8a2c5817db25a52a6a2c1917a4257c2a4e2cd6168d25742a452cbb168a258a2a522cb716cc24122a242cbc129828092c202ddd91c1333a342d3484acf134023599342caf2328722a072c64133f227728f229fa110423a3282a2ab712292397283b2af1112f239928472a20101d23a928502a8a0c0023a5285b2a9303d8229828402a7e836f223e28a629ed885e213627b528bd82bd201e2618286b826120852583273c820620fd24b6260e82431f6c24dc25db81c71ec423362531858f1e1023d9242f88791e8f228424c8894f1ede211624a389941d3a212423fc88061def20b5226986d11cc720772226866f1ca7204d226583301c992019223583f11b7a20e2210b83b71b58209a21fc80081b2c208921b1022b1b0b204321be022b1b0b204321be021b14ef2005210a0d1b14ef2005210a0dc0259f2bbf2c15207027b02d122f1c22602abd3024328624582a62310b33cf24ea2ab0311d33ae258e2a1b317b321225652aa830f8312725c62929306131bf2493299e2fd63039248229512f963097223429122f7930e5203129e92e6b308e202629d22e5b30101f3629d32e5e30281d1e29c62e6730641d8f282c2efe2f611d6f27f52c8f2e271c8526dd2b482d731a6826ff2ab72c1d194e26ae2a752c3918ee25562a392c6e168e250c2a182c06166525eb29082cda153625b429ea2ba8152825ad29e32b98156725ac29bc2bdd15d4241e2a1a2c3d1568257b2bdc2c7c149c25432bbf2c031163233729092bb70cc923d228752a7910a6233c28aa295e11be235c288e296f11e1225a28bd29961233238728022ae412c823ef28762a7810a0233729de2add0c24233f29f72aa503fd221529cf2a5a897a22a0282e2ac98d8f215e27f728628e6f2119260d283e8e152167252a27228fbb20af2437266f8df21f0f2456251289b41e3a23bf242285ee1d76224a248481861df821d7236981351da0217b235401e81c68212b234001901c1f21d9227e03251cc62092222c03aa1b78204922ef02ac1b5a203322f002841b3b201422e1025c1b0320cc21d202fe1aa31f7d21ad023e1b491fc520c6023e1b491fc520c60200008e1cc819000000008e1cc8190000b9243a2b772cdb1e1e26d92c312e8a202428872e1d309d218d2a7731f7323623172b1e32c83395248f2968309d31b7232c2a9c2f1a31c7233a29552faa30c122d128912e32307521fc28562ee82f0e20db28202e942ff81e6628fe2d992fe11ed028862e36309a1e4f29892fd330ee1da02907305d31ec1da4279a2d302f8f1bc125542bbd2c971809265f2a2d2c0b18ac25202ae42b27168b25f829a62b4e156d25ad295e2b801433256029192bf911f8244829ea2ab511dc242529c02a5710ad2405299c2a2e10d724eb28642a53102924ac28262a4f0d49224828e729030c33225628fc29e90bdb21c1275929790ba0228a27d428eb0dd622ff26a1287d039122ec26ab28310cda21c126a328db1048224627f12869103723c728352ae8121024da29ac2bbe123b24232a0e2c7b0a1424fb29d42b4a8fe022ce283c2ab49199215427fd28a590ea20ff252728e68e0220b72472261e89ba1f21247425f981b31e5523f724b601051eb1228b248901821d2b2230246801421dbe21ed2358011f1d8d2199234e01d61c54214b23b403b91c242111239e03691ce820ab2260033b1c9a2024226605e91b5320c22107038a1b21207f21e302691bea1f3b21d702cc1a871f03219a02c21a051f8c209682c21a051f8c209682261af11d2d1c5b02261af11d2d1c5b0226237c275a27fb178025022c1d2d152068258b2c8b2d5b202b29cb2e0330d5235f26ba2d792f341ef927fa2dab2fc921dc27da2da62fd5214928112ec52fac215028162eaf2fe3205828e62d632f3a202628862ddd2ec01e8427002d692ead1c2c27c42c0d2ea21a6525b8290b2b3312a52056240b267290ec2205263a284a972f25e1285d2a4b8504252329c42a7b1008251429c72a101302250729af2ac011d124e328842a8811ad24c328582a5f117f24a128272a50125f248528032a05113d246628db29de1027244628bb296c0f1b242c288929560f1a232427d128890cc520b8241e26430c251e4c232c257e0906212225fd267d0c1621cf2508288b0c4d21e325f727710fbe2160262e28980e1d2290264e284a100f22f4276c2907114324892a4f2c1414c4258b2ce92d6a0c9724a82b4d2d7292cd21c728802a12900620a0258f27318b901f2824e125cb85021fb123e0257988cb1f08230b25fa88aa1e7f226a241a85d31d182232247d81631dc021df2360011d1d67218023ea03e11c252143233f019d1cea20ed222e015f1ca720a3221e01101c642038221d03e31b3020dc210503e51b0a2085210201d71bf31f56210001031ce41f1d210681b01b771f0121e704251b1e1fb220bc02251b1e1fb220bc0200004a1d971e000000004a1d971e00001924bf29fa2a1e1c0825d32a662cb31d2a259b2a152c2e1ea5204a277a288f195a238127d928281b5426122c222dc31e0127ee2c382eef1f6a27132da02e15206d27172d972eb31f4a27e32c542e181f3d27c82c462e5a1e0027a82c0d2eeb1ddd25f42b032df51c3c23e028542aa8191c22cc26b1287c14e222d426b52878932724e7275729e49277245928c429d68a78245d28cc29d88a91246028d429fe8a6e245628ba29c98a48243e289b295f841f241e2874293504f723022858291a0abe23c8273629f00c872385270f29c4095c234d270829c2031a23d726b228a0031222ca25d927a608b620f324b02636079620c82492260607c920cb24a9267182e820e024c4268387f320e524ee2687823d210f25d92603081521ae24bb2698825c237028a129b20cd8288d30ec316c8fb325c02cf32d2f96d91f2725a9260189262079239c255a06ec1ec822f2244d05431e9e22bc24cb043f1e53227624c904d91d05222e247a048b1db121f6233e04281d5c217e23f303ef1c0f212b23c703a51ccb20d3228e035b1c96209b225603151c622036223505db1b3220f6210405c71be71f9921fa02af1ba81f4621f102841b601fff20e102731b201fb620f400101beb1eb620b402d11ac91e83209c02d11ac91e83209c020000911b811c00000000911b811c00005d23ff28dd29ee1ac023c729642b011d98223b29652be41ce12179289e29141c66242329862a6c1c2925872a542cdb1c7c259e2bf42c291de6250a2c3e2d5d1d2526192c482d641d2d261d2c422d391d3126092c202d091d0a26a72bcd2cb81c3825cb2a472cd31b3a2492294d2b8819c5239d283f2a33161b243728a629b710302426287e2946844d2430288529af8f4f2432288b29808d4324362896295a841c2439289d294b0afb232a288b29180db02310287129e70c7523d9274a29b60938238a2715298709f0222527d22851099d229b26812860034c22182624283703c1218f257e27f0026f212125eb26c6822521d4249726a082b42091245e2667029a2081244426590299207924422659029420762430265602a02081243a265d026e203f2442264302551a421dc01ecf009c16781a0f1d6c004c1d8a216a235a811f1e2b225f249081031ed52116248901ec1db821d3238904b31d9621aa235d048e1d7f21792341046f1d6321642329045d1d3d2139231b04261d14210f23f103eb1cd420bb2241019c1c7e2057222d01681c2b20f02120012a1cce1f81213003a11b581f0a21eb02511b171fcd20cd02101bf41eb220e700321bfb1e8f20c1020c1bdd1e9a20b282d41ab11e6f209e02d41ab11e6f209e020000851c291d00000000851c291d00001c223628f7285c198a22c628182afd1a9522c828f2290b1c2423d028162a671b78243829b32ad8193025cc29692b741a4025582a092cde1a7125c62a502cc51ab225f62a6e2c171bc825f32a6f2c161a8b25c22a4a2c8b1a2e25612a0c2cc71ac224e729a62b9d197b247b29242b25183e240529962a24151f24a128172ac911f6235c28ba291c0fc8232f288129f609bc2311285e29f303bb23ed274329f2039f23cd273029e4038823a4271d29d80375237127fe28cf834d233927db28ba83fe22fb26b6289203b222bd2694286b0363227d26742843031b22382645281e03b721cf250c28eb026f2161256e27c6020a21ed24c5269302c6209424442670026f205d24fa25ca061a204b24ed25480607204524f3252b06b01f3924eb25e305c91f1724c025fd01381f9a22a824d801401b5a1e3b20c7020719f81d0d203603f41c91207b2244013a1e4621f0235f8ca01d672100244f846a1d5621d1232584591d402197235d812b1d252155235281f21cf420fc224301e71ccd20a6224081bf1ca62059223681a01c7c2019222e818c1c4220d8212981361cf21f75211381f21b4f1f152103817c1bf81ed820f5801d1be91ec620e880711be41ea620f3802f1bd01ecf20ea80611a281e97207a08611a281e97207a0800000000000000000000851c291d00001c223628f7285c198a22c628182afd1a9522c828f2290b1c2423d028162a671b78243829b32ad8193025cc29692b741a4025582a092cde1a7125c62a502cc51ab225f62a6e2c171bc825f32a6f2c161a8b25c22a4a2c8b1a2e25612a0c2cc71ac224e729a62b9d197b247b29242b25183e240529962a24151f24a128172ac911f6235c28ba291c0fc8232f288129f609bc2311285e29f303bb23ed274329f2039f23cd273029e4038823a4271d29d80375237127fe28cf834d233927db28ba83fe22fb26b6289203b222bd2694286b0363227d26742843031b22382645281e03b721cf250c28eb026f2161256e27c6020a21ed24c5269302c6209424442670026f205d24fa25ca061a204b24ed25480607204524f3252b06b01f3924eb25e305c91f1724c025fd01381f9a22a824d801401b5a1e3b20c7020719f81d0d203603f41c91207b2244013a1e4621f0235f8ca01d672100244f846a1d5621d1232584591d402197235d812b1d252155235281f21cf420fc224301e71ccd20a6224081bf1ca62059223681a01c7c2019222e818c1c4220d8212981361cf21f75211381f21b4f1f152103817c1bf81ed820f5801d1be91ec620e880711be41ea620f3802f1bd01ecf20ea80611a281e97207a08000000000000000000000000000000000228e52ce82dd121b02cb1312833a8264e2d3931703230280b2e523286332829c02f1a34f534dd2a3f305b3439351c2be12f0b34c734b92a362f0d3330340a2a7a2e3732a13352294b2eef313d33f8288f2d4b315d32e4278f2cc230a3312a25602dda3117335f24732e0434fb349d23932c81318432d120162e6b3443350522bc2ac32e3b303c1e4429b52c122e331c522c89302631b01c1d302c3532363310372ebc3006318e99962eaf2f1730e299db2f7a308830059b2b30b4308f30729b39309f308c30da9cb92f4b305630e69a092e0c2f3a2fb497ad2be32c372dd60b9927192aef2ad9109223f328a82a5111e224e2294e2b0d14e221c226af2862125120a1258727af10f91f63250827a20f0720fb249626a80d941fb1242a265a0c101f7424d2254f0acb1e30248c255608b71e1024602524056c1ec2232425eb04241e6723e4249101df1d0023ae248001901da62279246b01361d502242245581ef1c03220e244381b41cc621d9233381651c7f2183235e832a1c452137233083fb1b1421de220e83841bc4207822e182301b80200622c182ca1a4120a2219a82cc1a15205c21de80901af91f29218382741ab31fec2078822e1a761fb9205e82061a5f1f8720d8834719d81e7b20ac00f51a741fa720700400000000000000000228e52ce82dd1210228e52ce82dd121b02cb1312833a8264e2d3931703230280b2e523286332829c02f1a34f534dd2a3f305b3439351c2be12f0b34c734b92a362f0d3330340a2a7a2e3732a13352294b2eef313d33f8288f2d4b315d32e4278f2cc230a3312a25602dda3117335f24732e0434fb349d23932c81318432d120162e6b3443350522bc2ac32e3b303c1e4429b52c122e331c522c89302631b01c1d302c3532363310372ebc3006318e99962eaf2f1730e299db2f7a308830059b2b30b4308f30729b39309f308c30da9cb92f4b305630e69a092e0c2f3a2fb497ad2be32c372dd60b9927192aef2ad9109223f328a82a5111e224e2294e2b0d14e221c226af2862125120a1258727af10f91f63250827a20f0720fb249626a80d941fb1242a265a0c101f7424d2254f0acb1e30248c255608b71e1024602524056c1ec2232425eb04241e6723e4249101df1d0023ae248001901da62279246b01361d502242245581ef1c03220e244381b41cc621d9233381651c7f2183235e832a1c452137233083fb1b1421de220e83841bc4207822e182301b80200622c182ca1a4120a2219a82cc1a15205c21de80901af91f29218382741ab31fec2078822e1a761fb9205e82061a5f1f8720d8834719d81e7b20ac00f51a741fa7207004f51a741fa72070042b2a3d2e4b2f01222b2a3d2e4b2f01222b2d41312832ab273f2e1f323333bb297f304a34fe347c2cd13158357536732e6d32b935d036ec2e1c31ee34dc35572dc730a2347035242d40301734d3345f2c702f433350340f2b822ea032e5337429d42d31327333b727782d4332993326250b2d793210349023a02c023277335922242cae313e33f221da2a59306231b320b72afc2ffb30ed1f252cf53002329d1e442df0311f33651b5e2e79311d32800e682f043151319e9a33302c315331d39c6d303d313c31379e7e3039312f31299d4e30db30ce30f29c1f2f1930763074951a2d252e622e350d3e29272c9f2c0516e125252b6f2c2117e3245b2a062ccc17d623c728fd29c0162322db27132981145521d3267628c811082137261128c70d842079252e27eb0638200925a02676060120df245b262206d51fa324082600022a1f52249c25d401ba1e07244925b801531e8823f8249d01011e2023b4248881b41dc7227a247581621d802250246081061d3f2221244881db1c0122eb23b883b21cb52189239883811c652125237383751c0d21b82269832e1cad20332233838e1b6620d521e582ef1a3120ac21a882b01a1c20b5218f82f91afb1fa821ac822a1ba91f88219384a81b781f0f21d886891b0d1f8520bb86ee1a6f1efa1fa782ee1a6f1efa1fa782c12ac62eea2f4124c12ac62eea2f4124b02d7b316b3295280f2faa32d133ed2a1e31b0346f35822d8832f5352d37732ff33241365e37ed2ff93198359936d02e65311735f835122ed9309c346f35242d5b303d340935112cb42f48335434d629772ebc321234f127b42d8232ef33ea25232d24327633d524a32cc43117338b23562c8531ef32f321472cc730ea315321382b813092310820912b87308931851ea02cbd30b9315119bd2df930b531dc0dec2e26319a314d9519305f319d31b59c8f3078317f31909fc3308e31d8318fa0cb309b319731f49f5830dc30cf30199ea82efa2f09304098a92b872d1b2ede11dd26162b522c72171025122aa12b0a185c2476294a2b651682239b283f2a0815b7221b289a29491340227f271029fb115321582634286b1097208f253f27720e39204825d526da0c122005258e26ad0c871fbc243126b90a061f6624ce25460a691e15246e25ba09ff1da4230d25a707871d3723c5240e073e1dd8227b240404fe1c80223d24d303e31c3122fb233f01d81cdf2196233c81be1c8321232336819c1c3b21cb228783821cf8207f2274832e1cbc203e223383d81b8d20fe210183641b5120aa21d482b81afb1f4021dc80221ab51f2321c980551ad91f21216c02171ac91f5a215502891aab1f2521d705891aab1f2521d7059c29232de52da3219c29232de52da321992da9317d3299286d2f1b332c34d02a1931c1348335002d0f32b235e536b82ea03229364b37732ff631a735b336842e8c315a354c36e22dec30c634a735242d663058342a35632cb52fe833bc34d32a9c2e0f333934b128032e7332c2330027442ded313d33f5240a2d7831ae328f23592c0d31593269217d2b9130a0312e20082b5a307f31f51ef82a3a304031011e8f2b2f301731951cb32c583010313318182fe63048316f9555308931b531159ed630d031d731a1a02331f231d43192a142310f32f63160a22631c631c33195a13830d6300d310aa05c2dfd2e792f289a72281d2c502dce0e2d25b5293a2b9d151c244829ff2afc144f23d228572a6e14e6224b28a5299a12492205286f2937118f21e726ae28620e1621462626288b0cc3200226b427140a9e209d254027120745202a25c5262e020d20d82460261102991f87240726f1010c1f3624a325cc017d1ef9235725a801071e82230a258a01da1d2723ce247f81d11dd22287247c81981d772246244984601d202207241e84121dc7217c23e2839c1c782103238783391c2021a0223c83911bc1202622f780071b6f20b121e580b61a3b205b21db809b1a18202321d880bd1af91fe9209482621a921fd520d080a71a431fb720f185a71a431fb720f18500004a1cb020000000004a1cb02000007b2d8c3197321128712f50335434d32acc305f341335c92cc7317135a2360a2e1132c335df36a12e733171357c36de2d223119350536872dd530c834b2350d2d7c3074344935422c28301534ec346e2ad22e4b336b348428f82d8d32e43355274d2deb3137335425d72c6131b43291232e2cc7300232ef20c22b9d309e312d1f0d2c6a307331761e8b2be52f0b31931c9f2aa72fd630571a022c0130c03029170d2eb73035312e8e3b308831c131dc9c36310332fe31a8a188314932293269a3a3314b32373223a4a9312e32f43127a43831ac319b31fea2a02f6d30753023a0562abe2c422da995e925b32a322c8b0fb2258e29ea2a1711ba24f328402a090e5b24ab28012a8f0d92235928c629d40c51228a27e328080c7a217e263628320803210a26b027ad07a0209625292716075b203f25ce2639023520fd24722626020920af241c260f82b61f5324bc25f8811e1f022461257485831e84231025fd84191e1f23cc24ac849e1dd82295244d84361d7c225d24fe83cd1c292223243a81ab1cf221eb2331814b1c9321a8231881f41b33211f2304818d1bc6203022f780631b8f20cb21f180521b7a20ce21ef801e1b5520ae21e980111b2c206d21e780791ae11f3621c8853c1bda1f172176063c1bda1f172176060000b61c6f2000000000b61c6f200000632d4c314b324e27f72ef9322234f22936302034d734222c233127355d365e2d8f318e35b336cf2df83019351f361d2d063116350836032db130cb34bc35742c333059343235702b742f9933a034e229b62ef7323e348d28fc2d6d32c033c8265e2de5312c330d25d12c5f31a3328823372ccb30fb313e21f22b70308031db1ff92b3c303531d91dd72aea2fe030261c592a672f9930131a622a452f83305517e82cec2f9130038dab2f2b317731619d383137323932aaa1df31cc32ae32dea31d32dc32bb32e1a43f32c632803261a50d327a323b32d3a4ec3080316a313aa3f22c582eaa2e1a9cd926c92ab02cfe06612495294f2b4413372413299d2afe12a323e128742a5c115d23a6282d2a940e1e230b282e298b0c63224e27bb28e4088821a2265e283c084a2128260d280d08c220892543274a0734202425d0267006d41fe9249226ff01851faf243e26ec01f01e7524fa25c501c11e2e249f25b901281ecd233a259281bf1d5023d52478814c1dc42277245a01e31c4d2227243f01b11ce021c62333816c1c8421482321811e1c1e21cd220d01861bbd204f22f600ee1a7620e221e3007b1a2f207f21d4004a1aff1f33216802931ad51ff520d700401a851fe620fd03de1a6b1fa9202306de1a6b1fa920230600006b1eda20000000006b1eda200000e02c13310232ec26482eb7320a349029202f80338034c32a3d307d349435282ce930ce34d935be2c6d30c234b935332c9c30dc34c035602c5e309d348935e02b3b3050343235162b4b2fb333b9346929a62ef6324134f4271b2e5d32b733f125662db0310433bc249d2c1d316432eb220f2c9430bb31ca20e62b47304d314d1ec82b0330fe30381cad2a752faf308a19292af02e4f305318db29ba2e38303b15092bf32e2b302f0b5c2e8930ec304e9bfe30023218326ba11f32f132bc327ea47d322633033301a6ae322c33dd329ca6b6323033ef32a4a61f329632ca320ea60d308430983076a23029bf2bae2c4e989424e3296c2bd80da5242e29f32aee0dfd23f128972a230f6f23b728632abf0cd7224928c0295e0c142283270a29a708ff211a27c4281003a321a9266328e1824a2125260128b382e820b5256a27838792204c25ee2655822e20d2245a2667868d1f7324df25c885491f2a247825a688c21ec3231d252c85531e4923dc24d884c61de0229c247981181d72225d244d81bc1c23223b243681781cc721022424813c1c6a2172231581db1bfd20ae2201018c1bb7202922f6801c1b7c20f121e880d11a5b20c421df80ba1a362090214b840d1af01f4521c6003c1a191f782063023c1a191f782063020000531d262000000000531d26200000942cfe30e43135264c2e5c32b233ac28a42e21334034332a0030683486351e2c7a30e234fa359c2c2530a834b735222c4130b334ae351b2c423071346135f22bb22f2b340f35b12af82e6133923465294c2ec9321d34f027b02d39327633b7252f2d9f31ce323824bf2c1c314b328322e62b9530bf31a920f52a09301231531fb22a812fba309f1eff29eb2e5a302a1da4296e2e0030801c6929382ed62f3f1b5529092e812f7c172f2c262f1e3069924f3080319931ada048320233d73203a51c3389333d3308a72d33bc33863301a8413395335e330da834338b333d3395a7a7311c32e531dea4d62ab92c282dac99db24b1294e2b700b84244e290d2b30115324fe289c2aba0feb23ce28772a0e0de1223c28af2944096222ba272129e308ef215227f3288b08b221c826a9285c0868213b262828c302de20d025a3277c0271206925372744022d201e25d32622029e1fd0246926f201ff1e7824f325c9018c1e2c249a25ac81341ede234c259581cf1d69230c257c818e1d0623cb246b81471da42287245981f81c3f2239244581c61ccd21d9233881731c6f2143232301641c2521e3221f014a1b9b208622ee80db1a3320d421e080b31aec1f5421db80251a7c1f46215a82081a071fce206485081a071fce2064850000201d172000000000201d17200000b82c0731e831e524832d5632af33e228582e62337c34392ad12f9234b335052c7b30043534368a2c3930b534e735022c26309b34b235e02b8a2f4f344735092bd52ee033cb340c2a402e1a335f340929b62d8f32043490275e2d18326c33bd25e82c8731c5324e24552ccf30e5313822dd2b49304e316420352bfe2ffb30ab1e882a8e2fb930351d072ad62e48306c1ca129562ef72f8b1b3629c32d672fa819f3289e2d4d2faf150b2aeb2d3d2fa0906d2e6930b530f89ee831c632b93277a57133d433713328a8c13308349233d3a8c9331134c23318a9f5332734dd3334a946339a33223386a84b2eb42fdd2f6ca100257f29f22ba98b29244b29e42ad71147240329842a0112f423ad282d2a9210c2225528db290a0e09220128ac29640d1b22a8275d29ca0bbd21e726ac286508402140261f280508d6200326f0277802c320b625bd276e828d2050254027f8864b20dc24a2267a8919207c2427263b898e1f4024d325d288d31e0b2478253a85241e9423152591819b1d1a23b4246e81581d9d225e241884261d40222524f183e31cda21c123be83bf1c75210123a3831e1c062186220d81311b88203e22eb80d11a70203322df80c21a4420d221dd80a71ac31f18213e844a1ac11f462168024a1ac11f462168020000bf1d4e2000000000bf1d4e200000192cc930b3312a25392d373295337528052e5a336e349e29732f8334b135312b4e30e2340f36272c922f8c34a735112b6f2f79346b35d22afe2e25341535142acf2ea533af349829f92dd53237348628472d3932a7332827e22cd2311433d825862c57318f328c24152cc330e031a522572b29303831cd20ca2a9d2fc630251f1e2a0c2f8230451da929872e2730951b9129272eeb2f0a1a3529c62d3f2ffc187128622dad2e5e172b280d2d4d2eca14542b602e562f35981031b131b8315ca47e33f73365336ca828344634f133b4a9303449340e3403aa4a3460340f3428aa3d345d340b3416aa7031f631bf311ca71127822a742cbc98192420299c2a2f044c24c028812a7b8dee2398284b2a0f8dfa237c28f929178ddb235328d329048dbd22e02731292989d6215527de2878886121a62671281e88332113260028f787ba20912557273d875a203d25ee26aa86ed1fe2246e2612864c1f8224f2259785081f3a2490256385c21ef9233a252c85581e7023e324db84c21dfd22a1246984431d932257240884cb1c34221924ac83841cbc21ab232781281c50210f231001a21bdf207422f900ea1a7b20e221e2008b1a39209b2181029f1a12205521d800381ad71f4021f8034a1a391fc220ce004a1a391fc220ce000000be1dd82000000000be1dd82000002d2cb530aa3110240d2d4432c0331228a52d14335834ff288b2f7334ad35cc2a1730cc3406365f2b102f8c34ab355d2a4a2f51344235742a922e0434ec34b629172e7a3396340029802d97321e3415280d2d163284338726a82ca831eb3246253a2c0e3141321d24b02b8930b4314122dd2a1d303b31b6208a2aa62fda304d1f1d2a0b2f6930441d6f29572ee92f491b1029de2d5e2f7e19cb28672de42e9618a7283a2db12eb817cf27f52c7f2e7b155128e72c172e9d0ea32dc22f3230659de2329b334c33afa767348d34403452aa7f348034363407ab8d348f34423468abc334b534503407ac1d342034b933b1aaec28fa2baf2c3d9cb8242629dc2ad1842a24d628ac2a610adb23b428642a040a3b237228fe29b103e2222a28b72945095c22e1274e293f03d1214127f828f8827921dd26b628cb82532172265828b882ec20cf25d6278a878b2070254827cd893a201725da266589fa1fc12453261789431f7024e825a388ba1e0f246d254b88d31d7023fc247684641de02293242184241d67224e24f083051d11220924d8830c1dc421a123dd83d31c712119233b81781c3821cb2224010b1cc820372208016a1b8420d721f200101b38207121e700421ac01ff820cd804a1adc1eb22068024a1adc1eb220680200008d1d9120000000008d1d912000003d2b90309531e924ca2c3c32c3330328412d07336d34a728dc2e5c349135672aa02faf34ea351e2b842e74349935152a6c2e30341135e529fc2da233b7343429b82d2f3376349c28502d6c320b34b627082d07326f33dc25a62c8f31c3326024352cf7302332d922a22b7a3094317a219d2a01300231cf1f152a2f2f7830041ebf29992e2230951c70292a2eb92f981a0b29c42d4c2f2f18e428512dd82edd169628102da02e44152828c22c1a2ec71426275d2cb32d6312e1290e2d0b2ea199da3088317d31bba559348b34573413abee34e53494347caceb34d5347834a1ac11350535953418adde34e0347134bcace32c3e2eae2eb4a24e24b429762b650469231229c42a9f0ee123da287b2a070d51238a28fa299a09cd223528a529790378220f287a294d03f12183272a2908836521cc26bc2822884a2148264a280d882521d3259b27e187a52072251d27ee891b201525b6263d89771fad243a26b785d91e6524da253e85a11e222479253b884b1eb02312250488071e2223b524b287d51dae2273247187831d4f2237240987f81cdc21fb2358867b1c6e2186236f83391c152103233c832b1cd6206f223183e71b942030220281771b4c20ca21dc82a41af31f4c218b822e1b851f142195042e1b851f1421950400000000471c000000000000471c000015296f2e982ff21f0d2cf731ff326526222de6324534a028102e38346235c229aa2e9334d4356e2a3b2e57347935d0290f2e1734fe348f298a2d6a33a334e728502de5325c344828eb2c2a32ce33fc268a2ca5310a334a25412c3b3166320124d92bb130d0312322f92a37305531c920442ac32ff730661ff729072f7930851d5229692e21303e1ce628012eb92ff019be28b82d5a2fde17b628322d9d2e35149828bd2c282eb10861289a2cf12d798800285f2ca22d208e9927252c5e2d5d94e12a5b2d122eee9d8633e6336c331faa55353235cb3431ad49353e35e0347bad64353735d734c3ad76354535e43488ae15316431a931c9a87824d8294b2c90845723b528d22abf031524d028992a408ab6238f28382ae8896d235e28f029be8c3223292897296d8ecb22c6273229128e13223127c9286d8d6b21b2267328ea8af92012260d28598a882099256627f0861f202625df265086911fb0242e26cc85171f4624a8258688c91efe234a255588711e9923fa241c880d1e2323ae24b8878e1db42271244184f71c33222e24cd839e1cce21e0232e813d1c66216c2315811a1c0d21d5220c819a1b94201722f900281b4f20a321bd02eb1a11204e21a602a21ab61f02218a02e91ad21e5920a502e91ad21e5920a50200000000a31b000000000000a31b0000c828312e992f8f1e772bc931e232e525cd2cb93231344028cb2d2a3451355129302e7834b835c629902d0d341e35ed28872dca33b834b828702d2c3383344b28452db93246347b27c82c1232bd335426362c7331da320925d82b03313232a2236b2b9530b8319021d62a2b3036314120fd297d2fb8304e1eca29f22e6b309e1cac298c2e2430e11a5a29102ea32f1f19c728982d262f93185a282c2da82e2a181828bc2c172ecb16a127662cb12d5b151627452c842dfa14d426ea2b1c2dd813e226d22b172d450d522e0b304230dea30c3504359d3465adba358e351a35daaeb7358c35393534afff35c235393542b028343a34d7331bad5d250e2a2f2bd98e1223bd28212a9c03f423c128492a100451238628f029bc030d235428bd299a03bf222628822971835922ea274c293d83bd2182271b29ee826a21f926c8282588102138262428c087ba20c32589273d87682072253627c08623201c25b22647899d1faa242c26dc882e1f4a24b2259588d51ef12345255c88401e5423e424fa87af1dbf22872441874f1d1a222e24c786d71c752189232d86781c0f21ec22b485661cd0209a229d85141c85203e223485ee1b4120c9210f85961b0c206321c786b71aa81f262192825e1b751f0921f1005e1b751f0921f10000000000291b000000000000291b0000d427e82d542f0f20392b9631a5322125702c773222344b272a2db8330535a728982d1134333521290e2dbd33df3465283d2d5c3391347928f82cb9324f341528b92c54320e34db265e2cba315133ec25f92b2e317c3284248c2bcb30e831e621022b5a3075312320702ae02f04315d1ef529262f9330221db129b62e47308a1c3d29412eee2f051bcd289e2d3c2f35197e28342db52e4d184928e62c4c2e1c17d6279b2cf12d80162b27502c972ddc16ef262d2c672da4169226082c332d74157626a02b042d1f10b6267d2baf2c48905a31db31b23135a9c135a8353335c8af0936bc35553562b055361a367c3534b18f358335f43409b039267f2a672c5a862c225428222aba084424a828762a718d8e237c28282ad28c3b234e28f8299d8c31233428b5296c8ee22212287729268e6422b8274029b58dd4214827e628b28e4521862652280d8e0321f525d0277a8c952083253827d989482001259326a68bb71f8e240026ec88291f26247e259288741e9b2318251e88e71d0623bc248584491d5e2263240c84e81c07221b244081931ca321b2232b81671c5e21332320815b1c1321bb225683401ce12056224183401cc620222241832e1c9820d6213383611b5120a621f100761b15206a21c384761b15206a21c384000001214c240000000001214c24000095273d2efd2f691e8d2a8131fd32c124692c54320e34f726ba2c7433b634eb27292ddb33fd3452289e2c7c33b634e227b12cff3261340128802c5f321f3465274f2c0032ba336426ec2b6131e1323e25492bf63032320324f82aa830c63157227a2a2f304131a6201d2a852fbf30d41eae29f82e6a30e41c65296f2e1730eb1bfe28d22d542f0d1a9728582ddf2e65184328202d912e12170528ca2c3b2eab16a227662cd82d62143027fb2b502d6c120827b32b142d7d10bd26732bd22c290d6126282ba62ce30c9c25b62a7a2c72124027dd2bcd2c6787d233d0335c330eada7365f36c935a7b1a9366036bf3552b299358d351b35deb09c26422a4f2cc086c022ca288f2abc101e24f928bd2a410d4523b928632aa40cff2288282f2a5c09c3226728e629740364223028a1294303e421ed276029028392216c271529d8823221d3269828f587e32021260e283d8a6b2079252227a3890820f5248226348b921f8d240c26c38a5e1f342492253b8c131fc3233025f78ce11e2823c524e78b761e9f2264246c8bcf1d1b22002431891c1da821732385868e1c4521f1227d83341cd82076223883fc1b8220fe210f83a61b4220ce21fa80a31b29209f21ed82a71b0020b921ee82da1ab51fe921a082da1ab51fe921a0820000b71ecf1f00000000b71ecf1f00001229a22fed304221472bf431b5334925252c9a321834ae26c52cd3330e352628472d39345f3596289d2c9133dd34e0276a2cfe325e34ad271e2c47320034e526bf2bca317033ff25702b2c31bf32ed24d52ab8300232f423542a573069312822d629de2f013160207029282f9d30c41e2929a82e4530c31dfb28422e09303e1da828ba2d4f2f4f1c2228232dc92e981ae627ba2c322e4b199e27682c9c2d22182e272f2c622df415e026e92b1d2dd3148b26702bc02c84133326262b912c5a14f825172b8f2cf414e725012b892ce5140f25cf2a792c1a13b7252d2b762cd6850c342f34c333a6ae2f37ea363d36b6b32035f8348634f3b07c27ab294a2be19be623fe28912a0a0dcd23ed28912af80e4523c4284f2a7e0ef722a228332a390ecf229128122a370997227828ec295d036a224d28ad29ea88bf21ad272829558bed2096267528678cb420ff251d28678d70206a256727198d0f20d5249d26a98c0a1f6a2424264a8a561ef6237b250b88021e3b23ec24ab87dd1dbb228b247b87cf1d782241246987961d3222fd2321870c1db5216a237186661c3121ce225e83f91bb7204e220481b81b8320fb21fc808d1b5f20cb21f7009e1b3b207b21f900001b0b206c21e580431bb31f0021ed00431bb31f0021ed000f214a22e92416990f214a22e9241699cb235d293f2a7891af2b63322634f823102cbc323034ce26b52cee33163551280f2d3b346235b9287b2c7933d134ef27532cf1324734a927bf2bfb3199339d26f22a3431bc325f258a2a8130df313924242a263041319022bf29cc2fd9307e2081293e2f8e30711d4d29cb2e5b30e71c0e29892e3830ae1cb128322eff2f571c4f28ad2d362f6d1b0e28102d6d2e771a6927932cd52df718e3261b2c462d9d18a226a02bef2c321764264b2bc82c1e1619261c2bab2cd615e525f02a902ca415a925ca2a712c24168325af2a592cfb15c625ab2a6b2c87150d259f2a4f2c720e2627992ba92cca984d29342c732c1a9b02295a2b3b2c79942822ef277b291b1130240229352a4604fe22a928432a04102a239e28472a1d104d23a128572a860e3d23a6285b2ab2032e239c28582a958cda2284282e2a1f8e442238288f29998d54211d27a328c28cb120ff250f28318c482082258327a68bea1ff524c126128b261f6324d2251b8cd21eba232625d68b901e0e23d7249c8c761e8a228724898c261edb210824518c4f1d35211123738bd71cec20c4228f89a41cd220932225885e1cb0205c22ce87241c9b2024226687e21b8420ed210885b91b6820aa21ed84f71a3b209d21ab821c1b0d204021e8001c1b0d204021e800e71a04240524448fe71a04240524448f8226f72c0d2e1a20eb28223057319c23092c2932d433d424c92c0b344e358f279f2d6534b7357028aa2c4e33c8343827072c6f32e2339e26bd2a3131a8328925202a8b30e0318b24e229fa2f1431da2282295e2fa5302f213629092f773013201a29d72e5c300c1d2029c52e5230de1a2e29d12e63309a1bdd288b2e3530801c01285c2df72e691bd926362cae2d76197c264e2bed2c58184326db2a852ccb16ea25752a462c6a1689252f2a2e2c4c156c25082a1a2c31154825e7290e2c0e15a925c829a42bb2145225f929fe2b181528269b2b5f2d1b156926852cff2dba119924902a662cb184c0217c28192aef02b3237628e629e10eb122cf275f29af0f3c2204283c296010dd225328b229d110682390280d2a33111c240a29a92a4b0ada235229fd2a02041c234329f82a7189ba22fd28ab2a028e1f226928da294c903821f426a92855902621fb25f927ed90f4206d253627be90ab20a8241626bf8fdf1f12243e25858c811e4223b924cf89d51d852256247187671d0f220624e5861b1db3219a23e983c91c61213523aa83711c1221c7226783f91baf20562204819e1b5f200822f980831b3c20f521f5806d1b2b20ed21f2804b1b0b20c021cb82ee1ab01f9621e380101b661f1a21e700101b661f1a21e7000000701bd61800000000701bd61800003825492c502d941e12285d2e4330e92148294d308231fe22bd2bb9323f34a124042d56348335cd263c2be5316f337b25042ade303d32a72488294e306a3131241b297b2fcb30c2220429c32e4f30e220ef28682e0230161f7e28042e8c2fe01d84280e2eb92f0a1d1529122f8f30d01a6e290d305231f81bb52911305731301ca624422bf62c0a15ec25632a492cea14c9254a2a022c10145f25f029af2bcc103725c429722ba810042572291e2bae0b94244f29e82aad049f243b29e02ab8846e242d29d12a86042924e028752a4004d122ae28042a3909bb212b28b129500b9c215428da294b080f222628b329a408532285270b29d808d1222f27df283909be222227c628be0f38220727c1285e106e23c6274829cb036a232d29f72a34112b24142a042cca104324452a0e2c5a04c323ce29902b729193228f28e5292293df210127c6281f932121b725d427e9901620a1242a26c88ea11f0e245b25628ca01e3a23fa243a880b1e8f228424b687851d0c222b243a84311da221e523fa83121d72218b23e283e01c51214723bb83c71c27211a23a983841cdc20b42227813a1c902012221401dd1b4720ae210181631b1b207121f1006d1bfe1f3221f280ea1a991f0921e200ea1a381fa6206984ea1a381fa62069840000091f5b1f00000000091f5b1f0000ee22ed29762ba11bd226ea2c592e68208228f72d192f1b21d5299a30ca315923242d6d34c335d624682968307e3129238f289f2e7b307922c6289c2e4c3052227e28782e1430f2206f28222eb22f08200f28a22d102f161ecb27342da42ed91c6527c82c3e2ec91b5226012c162daa1793227527de28e08da7200324122662967824c3273229fd952c2507299d2a4393eb24f428a02a478eef24fb28952a0905c824dc28752a530b9724c028462adc0d6824a428182ae00f56248828f529890d32246328cb296d0a0c244928af2922041823a22704299f0320218f2558279e82df1eb523bc24c101e81f4f2448260402d92180258c27fc828c210026eb27d582b12116261f28440bb921912634281d0d1d22da266b28760d05227628592ac311e024bf2b382daa14d325a52ced2df2859924032ba62c6794fa212b287329b891442043251127fd8d801f2e24e025b38a161fe5230426128ca91f05230625668c641e87225124578ba61d102225243587551db421c9231584051d63216b234881c81c22212623a9838a1ce120cb227a835f1c9c20832259831b1c5f2021220c81dd1b2e20ca210181d91b062084210183de1bee1f5a210181ed1bd01f25210f85921b661ff520f7002c1b111fa820ea002c1b111fa820ea000000db1b391d00000000db1b391d00002624a72a082c4d1c4e250d2c432d591ea625362c342d1f1f9123772a002cc41c782190264828ac198326c02b062d8c1ea027662de62eaa1fb127902d202f7c1fb827722d062f051f8527222d992e1e1e6927ed2c642e161d4527ba2c282e861c8a265b2c8c2d111cd824af2a342c561a12237528ee297117bf221027d2287103902388271629969449243a2899291a9458245b28b729fd905f245828b42905914a244e28a129aa8f2d243b288329548d0b241d286229298dc623f9274d29f4897b23bd273129d183402375270e298e89f0221b27f6284f895f225f266d28e1887b2175255f273288c6201025e6267082bd20ff24dd266b82e120fa24df267987da20f224d426568cdb20fa240927338aee201025c42684823321dd242027f7079125282bf92bfa106629ce30463234965223432a822b5f95611f5724ec252d8d362055239c257386f61e27230c255585551ebd22bb249e816a1e67227724a381e01d0b2227248081a91dc321eb2372812d1d6d2174235281ee1c1121192342819f1cc920c2222e814d1c9220852219010e1c61202e220901c01b2f20ed21fd00a61bf01fa421fa007f1bb01f5c21f500681b7e1f1d21f2006c1b431fc920f280121b0e1fbd20e700db1af01e8620e000db1af01e8620e0000000fe1a611c00000000fe1a611c00000624df292f2b8c1a5f24832a162c5e1df6233c2af82b661deb22df29662bb11c1524dc29832b9f1cda24d62a962cb91ca5250d2c432d221d1a264a2c942d291d5026512c982def1c56264e2c812d8c1c4426322c512d191c3326f22b022db71bac253f2b8b2cb21aa3242f2ae32be21809242b29cf2a70160a246328d629a4101d241b286529408d1a2422286a29b69024242b288129c190212438289229458d01243a289829228ad0232c288329fb89882312286629d8834423c82733299089ee225c27f2288a839022e6269c2806892b224e264928b988d521c925d82777887021672535272a8845211a25cf260988f920cc248a26598aae2098245e26f989bd20972448260c8abc208b244d2641878a2087244426f486c42081243d264c87b41fac23bf25e685d814081a6d1ced807019111d231f1582dd1d162207247b87fa1d49224924a1870f1efc211624a484e81dc721cc238684b11daa21a3237481961d8c217c236d81741d6b2163236581661d4a213e232284421d2c2124230784131df620f522e383e71cb120be22c183a91c6020532292833c1c0620ed211581b11b8a1f5921fb801e1b4c1fe220e980e41a0c1fc320e180011b151f9b20e580e01a041fa620e100b71ad81e7820db00b71ad81e7820db000000951ca01d00000000951ca01d00004b22ad2897298619f3229729f62a6e1b24236029cb2a281caa238029f42af21bba24e429822bad188625742a1c2c6818ae25eb2a6c2c8718c8252e2b9c2c3e18e525442ba62c5318dd253a2ba02cae18a125032b762cda183625982a332c2819bd241d2ae82b62187c24b529642bba173b243e29dc2a21151924d0284f2ab510df237e28e2290504bb233d289029eb89af2312286129e78c9c23db273929cc8e9223b6272229c38e882389270c29539073235427ee283b9149231827c8282f900923db26ac280b90bd22a2268c28058e6a2264266d28bb8d262226263d28d98bc821c4250b28618b5d2148257027d98ad720db24a9266987972087242526078756205c24f225a4861e205624f0254e8612205c24f7253c86c51f4b24ec25f38502201b24a9251e89a21edd21162415852619661d291ff9818619921e9920b4009a1d11213d234a84591e7821ea23448dd91d8621dc23b88aa01d6e21ba230689731d51218823f586431d2b214623b786ff1cf220e8226186cf1cbe2093222386ac1c8c204622f785981c64200c22dd858b1c3120c621cd853b1cd41f6a2166850b1c571f232129859d1bf31ee120dc842e1bdd1eca20c0825b1bd11ea820b184db1ad21ec620a0822b1a3e1e8320ca002b1a3e1e8320ca0000000000000000000000951ca01d00004b22ad2897298619f3229729f62a6e1b24236029cb2a281caa238029f42af21bba24e429822bad188625742a1c2c6818ae25eb2a6c2c8718c8252e2b9c2c3e18e525442ba62c5318dd253a2ba02cae18a125032b762cda183625982a332c2819bd241d2ae82b62187c24b529642bba173b243e29dc2a21151924d0284f2ab510df237e28e2290504bb233d289029eb89af2312286129e78c9c23db273929cc8e9223b6272229c38e882389270c29539073235427ee283b9149231827c8282f900923db26ac280b90bd22a2268c28058e6a2264266d28bb8d262226263d28d98bc821c4250b28618b5d2148257027d98ad720db24a9266987972087242526078756205c24f225a4861e205624f0254e8612205c24f7253c86c51f4b24ec25f38502201b24a9251e89a21edd21162415852619661d291ff9818619921e9920b4009a1d11213d234a84591e7821ea23448dd91d8621dc23b88aa01d6e21ba230689731d51218823f586431d2b214623b786ff1cf220e8226186cf1cbe2093222386ac1c8c204622f785981c64200c22dd858b1c3120c621cd853b1cd41f6a2166850b1c571f232129859d1bf31ee120dc842e1bdd1eca20c0825b1bd11ea820b184db1ad21ec620a0822b1a3e1e8320ca000000000000000000000000000000000045295a2d5c2e4c213b2d9d31b7324225a32ead3224348427be30a4343335d4298c31cb358436fe2a5f329f36a837d02a8032b036ff37332c8b31a9359d36df2b0a305c340c35dd29b02ec5320534a428f72de6312f33b5270a2d303121328c25652cd630ef316f23a42dde3264344d220b2d1a338d345820b02e2b357d360e209f2a362f4530571af22b842ec32f901804303b34de341a901331e234b335209f49309a31b531a6a0c4303f317a3163a2093170316e31c0a216317e315531d1a21a3173314231d6a21b3166313c31d7a2e7303e31f03091a2103070304530eda0e12cad2dc42dac9cd428c12b6f2c50946228072de82db78e772315283d29ab0ec3207a251627780dc41f1f25ad26f508851fd1245926c2053e1f8324eb25d901c21e4b249525ba815d1e0e245a25a081601ef6233925a081181e9f23fb24aa84e81d4123bf248684a71dcd2286243687741d7e224d24f6862d1d27221324a088dd1cd221bd235888881c8e217a230c88321c4a212d237f87f21b1521e9221987aa1be0209a22d9862e1ba02042226a86041b6520da214586aa1a2b209121f485861a08206721d4858c1ae71f3621d9856a1aa51fe620bb85141a5e1fa9206e85f4194d1f7920d6863719be1e6d20ff81021b5c1f9920e500000000000000000045295a2d5c2e4c2145295a2d5c2e4c213b2d9d31b7324225a32ead3224348427be30a4343335d4298c31cb358436fe2a5f329f36a837d02a8032b036ff37332c8b31a9359d36df2b0a305c340c35dd29b02ec5320534a428f72de6312f33b5270a2d303121328c25652cd630ef316f23a42dde3264344d220b2d1a338d345820b02e2b357d360e209f2a362f4530571af22b842ec32f901804303b34de341a901331e234b335209f49309a31b531a6a0c4303f317a3163a2093170316e31c0a216317e315531d1a21a3173314231d6a21b3166313c31d7a2e7303e31f03091a2103070304530eda0e12cad2dc42dac9cd428c12b6f2c50946228072de82db78e772315283d29ab0ec3207a251627780dc41f1f25ad26f508851fd1245926c2053e1f8324eb25d901c21e4b249525ba815d1e0e245a25a081601ef6233925a081181e9f23fb24aa84e81d4123bf248684a71dcd2286243687741d7e224d24f6862d1d27221324a088dd1cd221bd235888881c8e217a230c88321c4a212d237f87f21b1521e9221987aa1be0209a22d9862e1ba02042226a86041b6520da214586aa1a2b209121f485861a08206721d4858c1ae71f3621d9856a1aa51fe620bb85141a5e1fa9206e85f4194d1f7920d6863719be1e6d20ff81021b5c1f9920e500021b5c1f9920e500f22a332f4130a523f22a332f4130a523f32d29320d334f278f305d341e35e329c6327736a737eb2cf733af3759386b2e6d346038ea38da2e5f343138ce38e72e8933af376638cb2ecd319a358d363b2daf3083345335fe2bce2fca33a034ea296a2e9832dc33e127d22d4232a433ec24bd2d81323e34ad217d2da9321f34ba20b92c5132d633ac20d92bd530ec31431f6b2cca30f931eb1d682e56326833ba191930f532c733c09d88305832b3327fa1bf3013324a32f7a2f030fa311132e0a31d31f131e23114a43531da31b33127a43531a6316531a4a32e31a03179319aa39c30f430b1302da2852e8d2f8a2f129fea29fa2ca22d87909c253f2b7f2ccd16cd233429832a3916a0222c28352970148c21ef267a289910f8202e261028580a7b207c253e2749823d20fe2499267d86f21fce244e261586b31f8e24f125e685f11e352477256e885d1ed42325251088f61d5223de249b87aa1df4229f243b87621da2226724de86241d64223f248f86e11c27220f243a86ce1cee21c4234b88b91ca321602338887e1c4621fa220388621cf82091220889201c962013225f87691b5d20d4219f86bd1a2b20a3210586951a1e208c21e185ef1a0220762131866f1bc81f5e214588c61b901f0e217589c61b281fa2207589e41a871e1a20ea87e41a871e1a20ea87f52bff2fa8304124f52bff2fa8304124202fda32cc3309283031c4348f35de2a9d33d5360838e32d723411389338bb2ff234ae3830392530033584381d3933305f344138d038e12f7e3234364d37f42d7f311635fc359b2c80303c3403353f2a7f2f34334b343f28112e9c32f53319265f2d4d32a2338b24dc2ceb313d33aa22a12ca631ec3277211c2c093133321120312cf1300632271e672d6b315732351a542f0532c4328c9a65306232ec32c4a0c53062329b3264a21a3155326c3265a4353124321f32d1a447311432563239a568313532293258a57a31eb31b2316ba50f317d314431aea41a30a0308c308ba20a2ca32d0c2e38974626da2a272c3415a524cc295d2ba215fd23a528062a551472232b287b292d127d2291270f298e102a2140262628ef0d6e206c251527ea0b29202825c1264f09e51ff9247f260c06701fb4242726b205f71e5d24be25c7015e1e07245b25a001fd1d8823f2248801881d1323a4246a013d1dae225c245681001d5e222524d483d71c1522d3232d86cc1ccf2181231f86ad1c742116232e888a1c3421c3220e88641ced206e22d887251cb1202722c2886f1b6e20d5214588dd1a24206b2122865f1aae1f0f21b185f4197e1ff120cc833f1ab81fee206482eb19a11f15214482701aaa1ff220d280701aaa1ff220d280ef0e692647277001ef0e692647277001ec2eb2322234d7271e31cd34b435442b11338036b937eb2d0c34a0374a385b308f346838ea38fc30ac344738e438e23036342b38bb38dd2f6c3238364637192e7f3159354836c82c873086347735272b3c2f95338634ca284a2ecd321f34b926862d3b3297337e241c2db631f2325b22042d3f317b32f620142ce1300632071fdc2bb230d031c51d592cde30fb31361b032e3231ef31248e1130e3314e32c99f0a316b32983265a368316d327932a8a474314632463265a57e3136322332c8a58731263206322ca6a7312932ec3150a693310b32ca3139a60c319b316f3151a5ee2d882fd62ff29f7d27f92a272cc8107d241f29722ade140f24fe28292a671448235e2892290a12e0221b285729e60f8621de26a0280d0b142155263928c707be200226c0276c027a2093252427db8648201225a92677891520c12440263589a91f6d24e725e388111f22247e258288681eca232d25e784091e5c23e324b487c81d0d23a7246187981db6226124ff88461d58221f24b688151d0822ce238b88cc1caf21522382897f1c6a21f3222a89291c132194226f877c1bbc201122b086101b7520ac218284c71a3a205f215384981a232030218682b21a0820fc204684381aba1fdf20f8833b1a241fbf2060883b1a241fbf20608800001614dd1f000000001614dd1f00001c2d2f3153322225c730d1349b35de299d3225365c37b22c5f333b370c38692e233418389f38752f46340e38aa38e32ead3304389938ad2e253245367a37702d5331513544368b2c7d309a347b35a92a4f2fdd33af349b28682e01333d34d926972d233266335f24342d8d31ed32cf21652cf7304532921f122cbf30c631f91d1c2c84309931751c902b4e307b315818ab2c8c306331c48c3f2f8131f731169def30463273329da28f318332953224a5ad317d327932faa5c33172325a3270a6d7317632583244a7ee317232303261a7e23164322b3252a7c0313b32e431caa62030c930d530a2a34b29602c532d1496fc24dc29552b5c0e7524f128582ab10d3e24ab28082a7f0a95235928c329ce094c228827da283703a3217a262028e1020a210226ad2793829f2087251c275c8253203125b7269f862b20ec246c2652890320ab2410261f89d21f4924a925fe88381fea234625738ab81e7423f524018a341e1523b724208bb81dc32281241b89401d6a224a24b188de1c2022172459889f1cdf21d2232188371c7e217f238887ef1b26210e2310858a1bc7203822d0846d1b9220c821be84471b6d20aa21a584de1a38206f216284d31a1e2041215b84871aeb1f39212a84451bf81f2521ed80451bf81f2521ed800000f214d81f00000000f214d81f0000df2cbd30af314e234b307c343f3523290a32d135f1367b2ca632ac367e37762dc133cf376b385f2eca33cc377938a62e5733c3377038622e193224363b371b2d49312a351e36172c3c3061344335e029362f91339e343328432ecf3224344b268d2d29328433b124e12c8431c432b1223d2ce63003327620dd2b73308b31461e0f2c36302c31671cc72af52ffd30c2185a2be02fc230b1147c2db6305b314d9a9030f13130321da2a131b332d53291a50832d632c432bca61332c532b7328fa73432d532bd3241a84e32d732b13286a85232ce329c32bea85332bc329632bea87e31da31a23189a7772c962d592e6ba01d251b2aa22b39050c24ff28872aae11dc23d628572a060f76239d281d2ab609d422012827297c032d223a27be28ba88b021a92659285b883421f625f227f887822066251027e78612201525a7263c86ba1fd6247526ea85901f9c242526d3881e1f6124de258b88d71e20247c255e88511ea52321250888df1d2623c4247f87631da4226d24df86ed1c432223244986a81cd521c123f1855e1c712148239385221c2221d2224685ae1bc8206322f182321b8520de21c182c61a2e205b219882611afc1f1f21d0806e1ad21fe8207682051a861fe720c580c41a8f1fbd20dd00c41a8f1fbd20dd0000001b16c81f000000001b16c81f00004a2c903098312c241d2f1334d1347c28ea30e534cc35722be8310f36d336f32c0a333d3717383c2e2b3374375838592e963277376538ba2d5d31f4351337682cd830f734e835572bc92f35342f354729c72e64338634ad27212ea4321034c5256a2df5314e333c24ad2c483192321e22132cb530e6314a20c12b62307031b11dbd2b223001316b1a0b2b6b2f8c300c18712a182f7030940aa82b8c2f8830d7960d2f1931ac31b9a0803191329e3270a54732ff32d732d0a75e320a33dc325ea882322133fe32e1a8a5323133f33232a99e321c33db3263a9c6321433af32baa9b332c9326732e1a9e02eb82f31307fa442269f2a1a2c31951a25ed28a82ae2942e24e7286a2a4584a623ae28412ae78306234128a02996833b227227e528c6881f2203279f28d08bbd2190264628208d4b211726e327ba8cb5209e254727348c5e203825c126ce8b0920bd243326a38c8c1f6424c9254c8d401f1a246625178db51e97230725b48b3e1e0c23b6249389b91da7227d244e871b1d4b2241248486a61c01221c24ef85321c8f21b7235b85f21b2d21152312858c1bd0207222d184541b9c200222ad84e21a5e20c9216484bc1a44209a214c84b41a21206a21fd85151ac31f2421e183291a141f6820ee83291a141f6820ee8300005b18af1f000000005b18af1f0000372ca030a331ef23052f1c34e0341628d33016352336012b8d310c36dc36002d81320d370438dd2d953211371938b82d153210371a38312d0131ae35bd36312c5230dd34cf35f62a482f1e3406350e295f2e0e334f340427af2d4932a933cf24332dc63107332223a92c363167323421f42ba330bf31de1f132b23302931191ea82ab72fc830e31c142a132f6f30121cd629a02e2830541abe29912e26309816842c9d2f5630579aaf30dc310c3256a46a323933fd3232a8d03263332833e4a8f3326a333133a8a909338d335833f3a921338c3343337caa30337a3306338aaa4e336d331533e1aae83075315a315ca7ae27ed2b3f2d5f9642247329032b6f0d0d24e1284f2a340ad323c528552aff033a2327284029b1839a227727e8285f83da213227b6287b88552180265b281588452121260228ba8ade20c1257427368a7c2066251427ba8928201325a9264e89b11fc2244826e988101f6e24de2582888c1e1d248425d9893b1eb9233e259189ca1d4723f6242c89671ddb22b424d388181d652273248d88dd1c13222e243586a51cb221d123ee85431c572148234483d91bdb2096220183fb1a5520f721ac82b31a1e20b42191828f1af01f5221dc85b1196c1f6c21ba80c119071f1e210a88c119071f1e210a8800002718c41f000000002718c41f0000d22b75307131dc22692e0b34d9343e28953027354f36822a2831ee35b736fb2bfd31cf36d437a32c1132d336f837b12c8831d23600385e2cc1307c358f36a92b0d3092347f35242add2eee33d534a7280f2eeb324a347a26762d3432af339e24fc2ca9310233d622672cf7302032a320ca2b69307b31371e6d2b20300b31811c982aa92fc430271b052a032f6730c319aa296f2e1330b2185a29e72d5c2fc814962aff2d542f7799602e8430ed304ea20c32de32c53257a84233c233653323aa5f33c7337233b3aa7f33ed3396330eab9b330234b03367abc23300348a33ccab01341734ab3327acbb321a33b632c3aac728f22b9e2c089d21244329ae2a530af723c2283b2a150d0124ad28152a1d0d45235628a32991097a22ec2767294e032222a427262922033c21ae266c28ac82eb20322603288887c320ff25c927148ab7209b257927368c8b202825fd26388d4f20c2247a260c8e35206f241626e88dd91f4024d025828dfe1e09247325048c341e7d23fc248a89961dee229924fe88551d6a224624c3881b1d19221b24de89291dca21bc23ee89fc1c7721f5227488351c00217c228487421b7a202b22a1841f1b782037228b840c1b5620e6217f84611a0320282112843d1af81f8d2163823d1af81f8d21638200002b188f1f000000002b188f1f0000502b6e3076316b22eb2dd433b134a5273a30023516368b2acc30bb358a36182cb831a136a137e22cae31a536cf37942c1d31ad36e037332c2d304a355d36ba2a732f86347735a529702ed133ce347828982dae322e34b126022dff317433e024af2c8031cc32b9224f2cde3004328a20b22b42305331241ebe2ad82fe730851c122a3b2f91305c1b9e29a92e3a3060198229562e0c30bc176929fc2d7f2fd514bc287b2de42ed5084d2a012e132f3a9991308b31a931aea55133c93367336baad7331734bd33a1abf1331c34c7331eac07342334df334eac17342e34cc3381ac41344e34e433d2ac263420349a33d4acd92b642dfc2d23a2e4235729fd2a0b8a00249328692a208a01249728522a288f97238528462a5c9062235128ff293d90e222cb271629268e02223927dc28e68e7321aa267628428e2c210426d7279f8cc8208d2538277e8d59203225d726fe8ce11fd3245a26868c481f7c24de25828aeb1e362480252e8a901eeb232d25dd89231e6623da247b89b21dfc229d2445873d1d90225724ae88c91c2a2216241c868d1cbd21a723cf85201c4421f8222983a61bd7204c22ee82fe1a6620c121ad827e1a27208321d480c41a0b204121dd80ea19b81f1f21c603861a1d1fbe208082861a1d1fbe2080820000b1159c1f00000000b1159c1f0000802a01300f314a21772d7333823430261130dd34d9358329883067352236de2a263139363837ce2b3a316136a637c12bdc3060369637862bbe2f203537361d2ad92e61345e353129e42d463393349c27182d5932df339b25a92cc231263389243e2c35317432e722b02ba030c8314621e42a2f304e31421f992aca2fec30431d272a192f6f30ad1a7e296b2efd2f8e182129fb2d962fe515d428922d212f50147e285d2dd52e03142328152d6b2e39085a2cf72edc2f639e59322333fe322aa92b3451341e3452ac3c3463343434ccac4d346b341e3403ad5534673433342fad87348a342a34b5adaf34a234453434ae802ed02f1130bea688245829c92bc88d8123d328912ad5031424d9285c2a3f8af8238628c3291a8a6d2338289a29af896622f9276429158cd4214927fa28708b8421da26b228ed8c3f2167265128b08cce20c425b427858d72205f2526271b8d1e201225c326ba8cf91fc0244a26948c631f6f24e2253e8cc41e0e246525c68bc01d4b23ed242389381dbf228324a988f81c49223b247088f91c0222f8237188121dcf21a8238788da1c8721322356886b1c3d21d422a385de1bbf20322205852b1b7720cb21be82d11a35206d215a843d1ad51f102193858c1a081fb020d9858c1a081fb020d98500008514251f000000008514251f0000cf29b22fe830d721d62c54339134f125782fc334d235f228fd2f2e35f235ec29a030f7350d37022bca30283663371b2b67303b366d37f42a272ff4340a36c329422e2c341035be28862d133375345027142d5d32ef334425b72cc03126335f23422c273165329221b62b9230b0310f20b72a133014315b1d2d2a542f91307c1bd729af2e3030d9187c293c2ecc2fe614f628db2d8d2f990fb3286b2d2a2fcc08c728382db82ee188bb28cf2c222ed4885228a52cdd2db8934a2e3d307e3084a4fd333134043445ac87349c344b3490ad99349e344634f1adac34b23450340aaed634c3346434deaef134ba3447347eaf323187315e31b7aa92249629e72a4091e0232c29e72a05848e23cc28682adb8370238c28eb29cc830f233a288e296889c92209285929558c2d226f271329858d5821b8269d28248e322133262f28f88d1021c1258a271b8f9f2067250f277d8e16200f25a126bc8d771fae242a26498cd21e6124c525d68b691e142464255d8b061e8f23fc24eb8ad11d0f23ac24af8a991da2226a246e8a4b1d40223024148ae71cdc21ee23a2897d1c70216a2303884b1c26210d23ac87201cde206b225f87ed1b902016220f85781b5420c021ad86d01af21f6421d387e81abb1f76216884e81abb1f762168843a206f1b6e2029823a206f1b6e20298287258128532868177c2cdb3238348224302fd734f4358728822fe734a03535294930b135b736a12a8730f9354837012b2630033644378d2a942ecb34e2353229d82de933ea343e284b2de43264348026ac2c1b32a933d924382c7131d0322223bf2bde3011329021062b553071312520512af42f0c313f1eec293a2f9830b91c57297c2e21307a1af028fd2dac2fba18c828c02d692f7e15a3286e2dfa2e1a0f8828222d952ea0886f28da2c372ea991e027762cdb2d0993ef27722cda2d959669301831553127a8ba34d13481341caef9340635a734e7ae05351435b3344aaf23350935a134c9af4a353335be3458b017334033c3327dad4125de294b2b60930724d928dd2a2b8ad423b9287d2aff8ccc239128352a7a907e235c28da294e904323262885291991cd22b9272b29c690f4212527d0282e903d219a2671285b8fd620e725f927ca8e7d2078254727288d23201625c126c08cc31fa2241426758c451f412491252d8cf51ef9233925e28c711e8423e624858c0e1ef8229924408c891d83225d245b8afb1c1e221f247388a91cc521c823f2852b1c4d2138233183001ce820af2210837e1b7e20fa21df82261b49209921e980e41a12204e21a3829c1ac21f0821d8009d1afc1eb220d8809d1afc1eb220d880a71fb51a2d20dd85a71fb51a2d20dd854a2564284828bd15312cc2322d343724c22eb434cb357928f52edb349e350d291130a335ad36092a4f30c5350737d829a82fd835fa36ae29432eb234bc358c28bb2dbc33c8346827032dbe325034ff253e2ccf3167336624d02b323190329a226e2bc230f9319f20e92a49305831d51ef929982fc130c31cbc290a2f7130381a9729a52e2f30d9175d291d2ea62fca14f328a52d1f2f51128828392da32ef00e3228ce2c182e5b11cd27702caf2df90d2a27402c782d50070827062c1c2d2d071928882cb82dc09528329c32dd325eab3a352835bc340bb04d353d35c8345bb06e354d35d434b8b0b1357735df3439b1063417348333beae5d258a29cb2a88938123b528402abf89df23c628322a068a8e238b28ee29d28c12234f28be29838c9d2218287829e88d5f22dc274b29b18dc8217d271f29a48e6921f126cb28378ed92002260828918d8720a3255927338d522059251227f68c1f2003259326c98d9c1f94240c26578d351f302492250f8dc81ebc232725c28c381e2423bf245e8cb41d91226924018c531dff210d24798bcc1c5f216723bc8a8b1cf820dd22618a771cb6208522458a2c1c7a202622dc89fb1b4720b42195889b1b0e2053215689d31ab11f27215b84681b6c1ffc20f200681b6c1ffc20f2004c209f1c9c2095864c209f1c9c209586ae244c2834284616e12b5e32f333eb23ee2d603465351d28472e97346835a82809308c358636792915309d35da36cc29e22e6e35833638297c2d55344d352828f92c0c336934e726912c403209347725fa2b6c31df32c423912bed302332f320082b7e30a931f51e882a16302b31351de829562fa430ea1b9e29ce2e5030601942295d2e06306117d528bf2d502f51147d284e2dc72e03143628fb2c5e2e8713d327b12cfd2dfe123b27612c9c2d2714e9262e2c582df0138726e62b252dff0c7326822b162dc391c6271d2cfe2c379844339a336a33a0ada3358e35fd3415b1cc35a0355135afb1ff35b93505359ab201331d33a132dead2a252c29a32b49940f24e428b52a2d8df523b3285b2a1b8f9b2380281e2a5e902b234128e6291e90fb2222289929e690c42200285f299c9159229e2728294491a5211a27c428af90242156263728ec90db20d2259d2707907f205f250427768f3620e2246626fd8e7d1f6c24d325428dda1e06245125d08c3a1e6823f024278bba1dd4229324948a501d49224e24bf88eb1cf0210f244786a01ca521b923e785941c63213d231788811c1d21da2206885c1ce02064220189471cb9202022a4872e1c9320c82178875f1b44209721f180631b1d206c213e88631b1d206c213e88c928e72b8b2cf41dc928e72b8b2cf41def263e2b0f2bf9992c2c6e3239346420f32d2b340f35cb25b42d4f342a350127f72e25353436b9285d2f4e35843658296a2e0d350a36dc281d2d12340e35c027692cb3323a341f26242c0d32d3331625582b4a31b5329d23042bc930ff317b21942a4f306b31ed1e472aca2fe3309c1ccd29252f86304b1a6c29972e2d309c17e728fc2d942fa2158e287d2dfd2e12144a28332d9b2eaa131928e02c3b2e3b11cd27802cdd2df90d3f271a2c6d2d6607f626db2b2c2d1b079e26922bdf2cc2863e26532bb92cc80c5125f92aa42cc90e08281e2c0b2d34937831ec319531c1ace535e63539358ab27f356f35033545b2a72d162f132f76a8842484297a2b30917e246729052be20af923e628982a12047423c5285b2ace832b239228302a7d89da226128e129408976222d2893291f8cf521e1274b29538d9921592702296e8e3621a7268828fc8db420e925d5279a8e3e204625eb26f48dc81fd8245c26768d771f7124ec25318e3a1f19247725eb8eef1e9b231a25a48ebc1e0823b324728e531e8a225d240d8eaa1d1422fe23b28cea1ca4216723e68a571c3f21d522fc88171ccf206022b288e31b7620ed218788a31b4120b8216388ad1b2f2091215f8a011c1520a12111838e1bfd1f8f21e5828e1bfd1f8f21e5820000371d622000000000371d62200000f32956306731061f972c9433d9345825682d64346135d126012eb6349d352b28122f7a3582362229342f7935a6363a29492e60358936f628022d2934303509284c2ccc323e346026c22bca318033e324d42aef305532dd22582a6d309631f520e42902301831f41e7d294d2fac30c71d2029c72e55306a1cf9286a2e1e30aa1aa428fc2db32f08194a28682d332f1e173928f72c782eda14de279d2ce32d05115427612cb22dad10f7262b2c772d72109b26e62b152d37105826962bd82cab112726732bca2c7f11fb25472bb12c1b069826642b922c5096be24b42a462c72915a279b2bbb2c0a9d9828f52bbd2ccba10c276d2a122c859a9f22ae28612a128982245329a32ae70a6323cd28842ab70c2523c528432a78090723ae28412a6109d6229a28212a7d83af227d28ec291e896a2242289329bb8db5217827ff280190d12064265528fd8fb820ea25012884909a2061255c2768902f20d7249c260190251f4e24fb25ee8d5e1ea6234725788ceb1dff22c724cc8ad01da7227924ae8a921d69223324658a531d1822e3231d8af41ca3216523b1896c1c2621d722e7871f1cbc2070224385f01b88201e221085b51b5720db21f382be1b30206e21f782fb1aca1f50217484201b8c1ff1208c84201b8c1ff1208c84ea1ba2206d21dc94ea1ba2206d21dc942624db279728ad97372cdf32803497222d2d67349a35b026b72d9e348e35ef27c02e63358836cb28472f60359636b328062e4d357436a928b12c17341135b527222c7d32f933de25722b3c31e232b8235c2a6f30bb312c21d52901300f31a11f9129602fae30cb1c5a29ed2e6e302c1b1129a52e4530ca1ab5285d2e1a304f1a6428f32d952fe2192728592dca2e91199f27e52c2e2e9f181427652c912dae17bd26f82b1b2d73167026992beb2c571525266c2bce2c1915ee25462bbc2cad15c9252e2baf2ccc149525f92a862c6a129825d72a622c490c29254a2a292c3e935924b229d42b45959b23f028a62ae2031224b728932a3c0a9123d128892ac20ec6229928272a30096223b628612a3d103623a728512a710e7e23ae285b2abd095f23ab285a2a968e6523a0284c2a0394e82279280d2a9d920d222d286b29cb913621f4268228fd90cd20f325fb27989050207925612721900120e824ae26aa8f551f5e24cf25158ef21ec3232425c38da11e1b23d324808d621e932281241c8ef41de321e923f08c221d3321f422428cc01ce620ad22e18ba51ccd207522b58b7f1cb6204e22508a421c98201c22fa89101c8420e821b489f11b6420b0218f88ea1a3a20a9212d862b1b0a203b2168862b1b0a203b21688600009f206120000000009f2061200000d627752e1130201f8c2abb3174330524722d4d344b352b262d2ece34a1359926f82e743594364828b62e46359f36c328da2d293547369f28562c7c33aa342027052bc1311b331825362a9530f1313c238b29ac2fea30dd203b290a2f7a302d1e0929cb2e56307619e7289f2e403011180f29b22e483032182329b92e513092194b28dd2d782f4d1a5b27da2c4c2e6619a0262e2c7b2d7018f425562bed2c38179425a02a762c0d1659255b2a462c1f154125362a3c2c5c143425402a2c2c4e13c824442a402cb7129f25bd2b522d7512e726c52c652e6810bf257b2be72c229130244b29ec2ad09031236628b929ac03fb221f28ab295809ff2213287129400ebf2229288029060ef8224d28b72900107a23a128192aae0e22243829d12a540a03246d29172b19844b234d29f02a848eb122d8286f2ab290f1211e287729af911021942670287e91cf20cc25dd27d591bf204e252527c29182209524ef25e490d21f09243e257d8e741e3823cf24878cc91d8a226e24a58a5b1d14221f24c988191dbf21b2238e88cc1c652141234988771c0f21ca22fa87141cb12032223485ae1b5320cb21e6846b1b2d20c521bb845a1b1e20c521b184301bf71f97219684a01a9a1f81218982461b871f28217f86461b871f28217f860000521a401a00000000521a401a000063264b2dbb2e961caa29c32f0331b01e332c3f338034d522de2e3a36d037b31d8a3044386739a9220c2ff43577378827532c5433a3346a26912a5c31c43230258b295e309231df230329632fdd303221b528922e3e300f1f8a28062ea02fc81c5b28b02d5a2fd619ae28222ee92fc7081829722fe230d915322be83032320d197f25882c502e50127b24102a3a2c0110ee242a2ad02b8c0b0525d729782b20051125d4296c2b2c85e0248629262b778b87245029ee2ac78d6f243329d12aa98d2a241629bc2a40840824c728592a1e04b7227a28e5296d03ef21fb277229070314221d286a291a838e220f287c2959834c229b273b2937034a227c270529d10899227b27df28e50da822c5271829f20d57238f28fc299e09dd23b229cf2b84108024642a382cbe0d3324442afe2b6e8a45237829052bf5921c222c2884291894902183266628159438215125db26fe923c206724e1259890a51fea234f25528fd61e3323f924ac8d421e8b226724648c8c1dfd2106245f8a381d9b21aa23ff89f51c5b215b23b289d31c402124238a89cd1c162104234a88751cc0209022f787351c7820f0215e85e11b39208e210785941b1a206d21d684841b04202721cb84191b981f1421b882d31a551fe2209d82d31a551fe2209d820000301dd51e00000000301dd51e00005125f42b012d281c0f281e2eca2f98208b28e02ffa304620822a4f321e342022462f26360e3874252f2c5b338f341224bb29b1302732ad22f128732fe630c2210829dd2e5c303821ad286b2eec2f9c1f1d28de2d3f2f611db6274d2db92e4e1c4227db2c5c2ecb19b226b22c182e43172025c82a652c3b85da1fea24a826c39129228425b527b395a4243328d129fe971f25e328a72a1698c624e7289c2ab3929924c228532ade8d8c24b2281b2af78a59248d28f829a88a45245728bf29728d082431286e29348f0b237d27f2284a8e1921d925d5278e8c381e21246825f0877f1f75241d26c988fc218d25b027588d06230a260228d4914522312610286790fb2161262f280d831222cd265528bf0b4622ad270929340f6a239529812b051491256d2cc92d9e148525762ccc2d57925b23e629222c7594c720f52681282f913f20f524da261190b01f4324fe25618e8b1ff823b825428ea51f0f23de24588e461e7d224724678caf1d0f221d24878a521daa21c023c188e01c562164233986a81c142114232988701cce20bd22ed87471c85207422a487241c4b201b224985f81b1f20c7211685be1b03208521f084ba1be31f5721ee84b61bce1f2121ec843e1b5f1ff220c682001b1d1fa9204186001b1d1fa92041860000b01bf71c00000000b01bf71c0000f524df2bd92c5a1c2d270f2d9e2e611d3427c52d502f021fe926a42df02e621fa521d828222ada197b25b72a7f2ca31cfe27c12d562f041f06283a2ec22f8c1e0b28e32d942f111ecf27772dfb2e1b1d8027102d812ee61b6727c12c2c2eda1afd26722cbd2d051ae725c72be82cb6186224fa29ae2b0e1808234528ba29bb12f4226e2706293794b22306284c29a1960c2447288829e9942a2458289829f993282450288b29e5920a243e286e29ac91f023222857298f90ab2301283d296790a623c8272a29d58e43234727fb287d8e9122cb26b4288b8fb721de2505281b8d2e214f251627a08c1b21372508278f8c112132250f27778af7202125fb26708cf1200f25f826ad8de020332513275b8cfc20fb24da265c8a9920bc2528281b0c4528b12ef82fff15bb2801305b31f19acd1ed82644284b92b71f0624a7256b8d751f01237925a98afe1e1a231e253f8a671ebd22bc24b889821e70227124d089f81d092219245589c21db721bf2324893f1d54214a23b286fa1cf420e9227288961cb02099221988411c812066226e850e1c532028222c85f01b2f20fc210a83b81bfe1fb821f5827e1bb51f7021de82441b741f3421c882541b391fd820ad84021bfd1eb920af82db1af91e8b20e000db1af91e8b20e0000000b21a5b1c00000000b21a5b1c00006e25382ad92b280cce24472ba72cd11b8f24a62bc32ce01c7d24c62be22c161d99244d2ba72cea1c2a25622bd42cb21ccf25412c712dba1c41267b2cd02db01c7626802cd32d3a1c7226742cb52d331b5a26522c782d79194b260e2c222d9e18ea25762baf2cec171625a62a242cd1165924cb29532bb7141624ec28582a4d0f0a2453289d29388fe823232865298c91cd2320286a297992d223242871297e91c22324286f297291912311285b2958904023db2735292a90dc227827f428e18f6422f6269f28b58d13227f2649286d8db621fa25fc271a8d612190256727cf8c18213d25f2268d8cfc200525bc26ba8dd520c82489268c8ddf20b22471265a8cfb20b3246226b88deb20a5246d26a68da22094245e26538d4621b4248c260e8ee21dc021c124c28a0000431652190000661b061fa5204088821e88224c24798b0f1e70225c24f68afa1d182227245789c31dd421dd232689971dad21a523fe888d1d91217c231687771d70215f23e288711d54214b23dc885f1d3a213523cc88381d0c210c23ff891e1dd320f922e189e01ca020cf225b88801c5d20c1220588151cfb1f19223585721b7b1f3821c084101b2f1fd9208284091b1e1f9b207d84d51a0f1fa6205c84ba1afb1e78204b84ba1afb1e78204b8400008c1c5b1d000000008c1c5b1d00001a232629332a31187f234d2ad62b941a5124302add2bd91b5924832a0f2c181c0925f42a5e2ce81aad255b2ba52c9d19d725782bc92c4918d025812bce2c0d17de257f2bc72c5d16ca25622bb22c48169825242b862cc8163125ba2a482cf516c324422a062c62168124dd298a2b761544246b290a2b15141e2403298b2a410de123a628162a098ab2235928af296b908e231b2869294d916923cb2730291893602390270e29009465235d27f4287c9460232d27d62879943523eb26ac28d1930623b0268c289e93c02272266a2876925f222726402849910d22dd250f28059191217625ad27d08f0c21f924f626cc8d8d209f2454263a8d58206324f625c38b4a205924f825aa8b3c206f240226918b32206f2407267f8b10206724fb25428be41fef235d25898ccc1ddb2079222d893d18091d2d1fca83231b0b2072218e84c81d8321c823a48a2d1e9721e723208dee1db121f123eb8caa1d8c21cd23f38b641d60218823318a3c1d29214223038af71ce720cb22b489ea1cb6207e22a589c31c8a2031227889a41c5820f0215589761c2d20b5212089331cca1f6321d388e21b631f24210a876b1b0c1fdd20a0860d1be21ed0204d862d1bd51ead201f88921acf1eba203284081a4e1e60204f82081a4e1e60204f82000000000000000000008c1c5b1d00001a232629332a31187f234d2ad62b941a5124302add2bd91b5924832a0f2c181c0925f42a5e2ce81aad255b2ba52c9d19d725782bc92c4918d025812bce2c0d17de257f2bc72c5d16ca25622bb22c48169825242b862cc8163125ba2a482cf516c324422a062c62168124dd298a2b761544246b290a2b15141e2403298b2a410de123a628162a098ab2235928af296b908e231b2869294d916923cb2730291893602390270e29009465235d27f4287c9460232d27d62879943523eb26ac28d1930623b0268c289e93c02272266a2876925f222726402849910d22dd250f28059191217625ad27d08f0c21f924f626cc8d8d209f2454263a8d58206324f625c38b4a205924f825aa8b3c206f240226918b32206f2407267f8b10206724fb25428be41fef235d25898ccc1ddb2079222d893d18091d2d1fca83231b0b2072218e84c81d8321c823a48a2d1e9721e723208dee1db121f123eb8caa1d8c21cd23f38b641d60218823318a3c1d29214223038af71ce720cb22b489ea1cb6207e22a589c31c8a2031227889a41c5820f0215589761c2d20b5212089331cca1f6321d388e21b631f24210a876b1b0c1fdd20a0860d1be21ed0204d862d1bd51ead201f88921acf1eba203284081a4e1e60204f8200000000000000000000000000000000000085221c250000d52caf30aa316521053033343a35c525c8313e3608378528f429032ca12ce31d5c20e5260d286d953a29b42dfb2e809e89318b356436a691f331d5360738cb29283089344635b628712e60327233ae26822d81317a322f255a2c7d305a318622e82c53317f32da20042e6934a135861e1a30f2356437541bc82c6030a430e28c432eae301e319899cb3100360637cfa07d311634883407a49f308531eb3146a41631b831db315ba54131b031ad3188a54e31b431893195a55c31ce319031a4a57031ca317e31baa57131bd315531bba52a316b311831c4a52230643035305aa4c62cca2dc92d1da02e28982c7f2d89989c2104286b29dd02eb1f32253b270682f91ff724942617893f1fab242c267a8ad81e5524b2251d8a681e21246625ba891e1ee9233a25078b2c1ec7231d25178bf21d8023d824d48ad31d2c239e24168c781dab226224ad8b451d5d222524668b001d0022d723058ba01ca42179237e8a521c5a2142232b8b061c1f21fd22ad8aae1bec20bd225f8a3c1bb5206b221489cc1a7d201822c688eb1a5e20c821db88d51a36209221cb888f1a0c2066219b888f1ada1f28219b88621a911fcd207b88ef193f1f9320d186db19331f69201c880c19aa1e5f203883d71a1b1f6f205e840000000000000000000085221c250000000085221c250000d52caf30aa316521053033343a35c525c8313e3608378528f429032ca12ce31d5c20e5260d286d953a29b42dfb2e809e89318b356436a691f331d5360738cb29283089344635b628712e60327233ae26822d81317a322f255a2c7d305a318622e82c53317f32da20042e6934a135861e1a30f2356437541bc82c6030a430e28c432eae301e319899cb3100360637cfa07d311634883407a49f308531eb3146a41631b831db315ba54131b031ad3188a54e31b431893195a55c31ce319031a4a57031ca317e31baa57131bd315531bba52a316b311831c4a52230643035305aa4c62cca2dc92d1da02e28982c7f2d89989c2104286b29dd02eb1f32253b270682f91ff724942617893f1fab242c267a8ad81e5524b2251d8a681e21246625ba891e1ee9233a25078b2c1ec7231d25178bf21d8023d824d48ad31d2c239e24168c781dab226224ad8b451d5d222524668b001d0022d723058ba01ca42179237e8a521c5a2142232b8b061c1f21fd22ad8aae1bec20bd225f8a3c1bb5206b221489cc1a7d201822c688eb1a5e20c821db88d51a36209221cb888f1a0c2066219b888f1ada1f28219b88621a911fcd207b88ef193f1f9320d186db19331f69201c880c19aa1e5f203883d71a1b1f6f205e84d71a1b1f6f205e8400007a241d26000000007a241d260000202f043330341e2581318e35a63621282034ff37ad380e2699268c2769281b9a4a25c12481243f9a6128a829f22af62004344b373238b42d5b3492382f39992ec331a035bb362f2c91305f342635e7292f2f0d3334347327c92d1e3274335624482d4932ac333921472df4323e34671e502d04335034c41d252d9c31b832391bc42e5d325833e80e7e30e83378344da00d3191331c345aa4ff308d32de32f2a4f5303b326c3238a50531c231b53149a51f31dd31c53165a551310b32ec31f0a54231e031ba318ba65d31ce31d831ada643318a3148318ca6c0301631e03037a6e32d322f4b2f72a12d28c32b852c44887024b829612b6115772356286c2931124d21ea267128bc0ce220152600287e02762067253327b2892220e4248a26bf8cf31fbe244326948d971f8224de25548ddd1e21245425d18c471eaa23fa24688cdf1d2923b6241f8c8c1dc5227a24c98b541d7d2248241e8a1f1d40222324318bd91c0722e7239189bd1cc9218623a78a9b1c86212723778a6d1c2e21c422378a431cf4207722128b041cae202f22a389361b6520f5211089af1a2e209621ad87701a062063216587921ac61f3c219d880e1ba81f1f21f488731b8c1ff8202e8aab1b2f1fa520a68ca51a891e4c20aa88a51a891e4c20aa88af0e0826ee261803af0e0826ee26180321306c337534152458320e362c372628b5344438e938f52be32756280429ed1f0f26a8254825201dc329cd2a302c28229d34c5377338682efa34f13893393a2fa6325c368137092d1031f034d2358b2a28300134c7344f28572ed03218345c258e2d5732b6334423ea2cfe318933dc20a82cb931fe320320892c6a318e32141ea92dc331c7320f19cc2f9f326d33799da830f33298336ea31331de324b3357a531317932ab3275a632315c327632cca63b310532eb312da758310632ee3155a75831f531c63101a8a331f331c4313aa86631c53187310ca8303186314631c7a7a42f6a305f3044a49529632cf32cfd9493244129722b411192236d28dd295910122329286129830ca0229a27fd2812092321382625289f022b205e25122721021a201f25c4261882c61ff1247d26f4856c1fb0241b26af85ff1e5924aa2577885e1e03244425b189f11d7123da244e896e1dfc228e24da882d1d99225124a088ec1c48221d24a889be1cfd21c6237289991cb4217123748a7a1c60210923498a551c1c21b222308b191cdb205622c089be1ba2200a226f890b1b5b20b821f288951a152046219f883e1aa71ff4202b87ff19831fdc20e386451ab31fd0209a85d219771fee20b086661a7c1fcc201584661a7c1fcc20158400007f1c4a21000000007f1c4a210000d02f8f3383349d243c32fd352b377a284534fc37a238282c252894285c29a92463252f250a259b23ec29172b742cf12632345c373a38f42dbf34d7387939e42eb13264368b37c02c3a3127351336ec2a12302234f5349c28b72e193341341b26b22d5632aa3373231d2de13130330f21b52c8331c132e81e482c29314932a51cac2c1b3117325e19242ebd31da327d994f306f32e03253a20c31ba32013351a55531a132be324ba6713155326932c5a6653129322b3267a7733115320532d2a784311a32f73123a893311932ed312ea890310832d23159a88c31fe31b33156a8c43061314131d8a6d12b7e2d152e3c9d0725e529692b7e109d230a29862a581103236028a9290710ad220c285a29420c1921b826b2289a0214218d2645289882ac200626bc27f789632080251027d78b5a2000258726ff8c1a20a0241026c28d881f5124b5254a8dea1e08245225da8c481ea1230225368be71d3623b824c88a9a1de9227e24de8b6a1d9e223f249a8b271d4c2209243c8bfe1cfb21b323248cbc1cab215023da8b861c6721fa22818b251c10219122e18a971ba220062254891c1b5b209a211588a91a2d205d21a687871a26204521d585a41a10201c21a187121ad81ff220f9866a1a231f8a205e876a1a231f8a205e87b91ead1bcf1b4a88b91ead1bcf1b4a881229d12a362bda188f315f356c36eb26ae338437633889286428db28aa29251f11247624b624291e032a752bb82c0b228333e9360038db2c6434ad385b39192e4f325d368637942c013117350436772a1330393411355b28072f52336334b725d62d4b328e338422412dac31f83231207d2c21314932041e222cca30db317c1c1b2cac30c631b718c52cf130d9314e93582fcc31473274a0ea309232e632dca478319832a63275a69d3189329032b4a7a431773278323ba8b63164324c3277a8c63162323c32b2a8df315f322d32f7a8e1315332273229a9f5314f32f4313aa98d31e9319e31dea8a92d272f712fafa2df25522ac02b3e91af240729822ac884e9239a280b2a0a8423234d28af29778945228d27d928cd88702172262628f08af9200826bf27718cba2071250327398c65203425ae260d8d2220e6246626cd8dea1f9c24f9258f8d921f35247e25518df91ec5232525c88d851e5423db24688d0c1efd22a624048da81dac227024b18c271d56223a24468cbe1c05220824a88a741cc321be23408a261c75216c23d289d21b1d2106237e886b1bc02043224288681b9b20cb214188471b66208a212e88cd1a2d2049211386a71a16201a21a487621ae61f30217b88101be51f3e214f86101be51f3e214f86271f7b1ce61cd381271f7b1ce61cd3812429e82a3f2b441829311a352436c325fe3220373138e9290829af29772a60215d22dc241025651a1f2a3f2c5c2d7124e33279369a37702d13347b3831392d2efb316636b4373f2cb730e834bc35cb29fc2f1734e434c527ae2e173349346f25ab2d4332a5336a23fc2c9d31e4324021442cfe302432ce1ef12b723071319a1bb12b23301b31df16542b25300b317b8b602dae304c31759c63301b3276320fa4ae31c032c7326ea7e731bc32b3326da8f731c232b932daa80032b632ad3244a92232c132a73293a94032c832a532e2a95032ca32a23225aa5a32c532863262aa7c3290324732b9aaf32f653050307ba7c826982abf2b7d9651240329762a9d0aca23bf28362afa03992391280c2ae18333220b285529e98b39223727aa288f8dfd21a0263928e18e5a21e225e527268e7d2067250627288d112012259526ac8ccb1fd62464267a8c8e1f96241626578c311f5224c5250d8dd01e08245725c88c401e7423fa24638cc41df222a8240c8c371d7d225824fd89cc1c272211248289921ccd21ad236b8a551c71214823158a201c2821dd22bc88871bc82081225388441b7e20f0217d86bc1a29204b2104863e1ae81f1421fc83671add1ff2201684131a9f1f0821e083c81ab41feb209882c81ab41feb209882461fba1d201ddb81461fba1d201ddb81c928eb2a0a2bf117713084348535162345329536c4371a282829312a102bda20e020dd242d259d1abc29562c792d58244e323f366937e12c813351380f39912d92312f365a378d2b48308e345c3542292f2fbf33ad343927442ecf32273419255f2d0b325b330723af2c59319932ee201b2cd030fb318d1eb52b78308131601b932b2d301431d514d72a982fa6303d91002ca92f8d30a99b962efb307a3119a252318032ad32f6a61432f532e832c0a82632f032d93265a94332fb32dc32b2a95d32fb32d03231aa80320833c83288aa9a320e33cc32d9aaac320933a43222abc8320a33883277ab4931ae317531a6a9a328f22b892c969ccd2415298e2a4a90d923cc283f2a018481238c28092ab48eb12223285f29fa8d19224d27af28018f3722e72671285d900a22712634283d9036210826bc2753907c208d252e27718f42202825b226108f0420b5241b26b08f8c1f6124b2253a8f191f03244825b38faf1e5223e024658e491ed4229224378dbd1d78225f24078cfc1c13221c24ba89971cd221dc234589221c78216623bf88d21b1b21cd227e886a1bbc2040224288291b8720e5211d88c51a5020a321c7879d1a322070219987ac1a12204021aa87141aaa1f15216e85201a181f7e200987201a181f7e200987cb1e1c1d7b1cbc01cb1e1c1d7b1cbc014328422a7a2a12172f30743478352422d7318836c737ae2934282829f429e82260213a24df24281c2429332ba42c2223ef3116362c37062cdc322638d838c22c1531e63519370e2b05307f346535d028bd2e91339e342026d12d7532e333fb23222dca310933bc218d2c323155323620f52bad30ba31d71d3c2b3e303a31d91bb92ad82fd330701a332a162f66305a18172ad52e3930a910f82b762f5b30a19b0d305c319c310aa51e32da32bc322ca988322e33fb3226aa9f323b331033a8aab5323d3307332babe7325f331f3399ab0f3375332c331cac17337233093321ac47337533ef3278ac7832a3322e32f2ab3e2ac52c782d7ba0a6246429b22a2790ca23b528242af78953239b28152aad8c39231528ef28748ed5225d27c2281b8e21222327a7280a8f5321722646281d8e11210c26f427d18dce20b6256127858d71205c25df263d8e1c20fd247126c58d9f1fad2418265a8d101f5c24b725f58ca21e13246525818d5d1ea8232025478de41d3723d524e38c8e1dd32294249c8c2e1d5b225c244c8ce51cff211c24df8a941c9721bb2342892e1c222103237887721b8d200a22a786611a13208121b3852f1af41f7c218685861ae31f38219488cc19621f53212d85121a0a1ffd204388121a0a1ffd204388c61e0f1dc41cba81c61e0f1dc41cba810628052a5b2ab417cc2f8c349b351b2459316036a137f9258427cc289d2983191021e223b7247e11b028bd2a642ce21a8e31e735fd36682955320438b938312c9b30a335d2361a2aa82f59342e355628b52e81339b347525b22d6c32f233b922202daa31ec326a207d2c01313732041eea2b84309a31901a4d2b2d301f3132189e2aa22fbb30e915f329122f76305115b6297a2e09301a155d29152e8f2fd9921b2d7e2f3430b4a1343136325332bba8cf32763336330fab113392334c33c7ab2033a233563326ac5433bf336c3362ac7f33e7339133b9aca13300349333eeacc63312349b3326ada933d933583351ad352c942de52d3ba4902457299e2a3d918a23a3280e2ad08c8a239328ef29c68900233b286529788c5922cd273329dc88122271270529bf8b51218f265228c08cca2030260628808db820f425b527a08ea4206c252c27b38f6e20f024be263d903020a0246b268b90182066242526d68fa11f3d24e7254d8fb71eec2369256d8ef11d4923ce24ee8c681dad226e247c8c511d3c222924698c441dfc210d245e8c7c1dba21bc23408de01c4c21c9220b8c0e1cc4206522b289aa1a82206b22a787341bae20ad227086381b8b205f222588201a142070210987d91a03204c215f84d91a03204c215f84061f5a1d071dcb81061f5a1d071dcb81f7270d2a792aa017462f733484351024e2302836623798281427b82892297620cc20d123d724bd197428a42a552c7a201131a835ba36e729ad3196377c38562b3a3060358f367629132f51342d353c28062e423380340d26362d3c32c4337b23cb2c8231c932091f7e2cdf30fa314f1a0a2c5a3051313817c42af52ff8300b16172a522f9e3071159629ce2e4830fe146a29742e0b30e8126729222e9b2f8589df298c2db42e5f9a072e46309e3054a4663222332e33a2aa7533ea338c3376ac9c33fc339f33adacc9330b34ab3308adf7331634c73366ad0c342534d433bfad25343434d63304ae25341b34b73348ae0b2e702fa92fd9a6d824a729012bcd92f4238328552a9992f3239228372a909097237f28312a549141234228fa291891b4229d27ff28b590ea212227c128e7905d219026672873901b21e825b9273c90b4208a253027ce8f53203225d2262c8fe11fcc2459268a8e311f6f24d625f88dce1e2d247525a58d691edc232025528def1d5323cf242a8c951def229324d68b1d1d81224c242d8bba1c1f220b24a28a791cba2195232389101c3621d622aa88901bc4202022c286ed1a55209f2130865d1a1a206f211084521afd1f2e2108846e1a991f2221d280bd1a5d1f1721bd87bd1a5d1f1721bd877522461e02204c837522461e02204c83cd28d32b2f2cbe166f2f8234aa3575217530c435f5361d26fd279629a32ac61fcb1f38242825d5176228182ba52c931eb530583572364828613166376c389c2a44305a358436f728122ffe33df34a8268f2dca323734b324bd2ce73154331b233e2c3c316e324721b12bad30d2311e1fe02a40305e319c1c992adf2ff730a1184c2a242f7030d210a3297a2e0a30c2094129192ebd2f5d09cb28ad2d2b2fe5086f28562da42e87082929542d732ef098b52fed30233184a65d33f733a83386ac02342834e6336fad183436340934aead2d34443403340fae3d34503417346cae62347334273410af7e347e34243487affb2f783099308aa976243d29ac2a679341240e299f2a9a8f7324ec28572a3f92d5236a28b5297f9145231e2870291a915722c1272c294291c3211527d428c8907121b52698288390282149263f2847909720ac258d279d8f4e204d2517271f9020201a25d326e68fe71fca245726918f761f6c24ea25248fc91e0a245e257e8ece1d3023d824d18c531da32279246b8c031d33223224288c0a1df221f6232e8cec1ccf21b323158ca31c84213e23838a3f1c2a21bc22e188d11bb5201e227d882d1b7a20cf216986c71a3a207721c9873a1ae81f1b219085bc1a0b1fb520bc87bc1a0b1fb520bc878822b61e4e202b8c8822b61e4e202b8ca228c62b292c8016842e76349d35082211309935c636482477278b29b32add1b4b1e2c24512551140428062b8b2c411d3a3022352b36f42709312e3750382f2a842f35355936bc28e92db433bf34b226352daf322334bc24b52cd7313a33dc21302c29316432c01fa52b9530ad311f1dc22a1e3016319b193a2a702fa5309015d729c92e3e3079108129472ed12f9e890229d72d7e2fab8fe828782df32e838fa3282d2db52e2594d627cb2c7d2e0093ef283d2ddc2e9d9af1300132233299a92f347234393413ae60347d343a34a1ae72347b34323406af86349434433494afa134a2344a3407b0ca34b3345d3464b09c30d430e63047abb9246e29d12ad6939f230229992add8ca223c0284a2ade8c55238628e1298d8e08233b2872290a90f122f7271829e0902a225727dc281d915021aa266d2868901d2126260c28e590d720be256c27a39083206825ff26529013200f259726cd8f6b1fa92416261a8fc81e5524b025a08d481e0b245225358ddc1d7c23ef24dc8ca71d0123a324b08c7a1d9e225e243e8d301d3a2227244e8cf31cd521e1231b8c851c68214f23588a601c34210123248a1f1cec207822c989d91b992022228288861b5820b5215288911ae11f4b217289db1aba1fa321e087db1aba1fa321e0873f1a2d12581efc833f1a2d12581efc83c02449285d29da041e2e693496354521892f7635cf36ef23e227c929e52a671cfc1d6a243825de14fc277f2bea2cfc1df82ffa34053642288f30e93639387529192ff7341a362228cc2da333b3340326f12c8e3214345624412c9531f4321c22892be93014323520f72a6b307731721e602a0d300d31451ce229592fa830a21958298c2e26308117f928fa2da12f7114d528c62d682fef08a828862d102f228f8d28452da92e11946728e52c3a2e2e96e527882cd62d8a95df28c82ce22d279bdb314632243210aca034bf346b3473afc034c734673421b0d234d334743458b0f534ee348834b5b02e352d35cc347fb11e30b330ac305faabc248e29f42a89942224ca28822adb9277239528472a3d915f237328072a1d9238234328b729e8920b231a287929be92b922bb2733294b93c6210e27cb284392382186266d28aa91d120e725e1273a91982073253b27659033200d25ad2605909e1f9124fc254b8f2e1f36248825df8edf1ede232a25948e5f1e6823d7241a8e091ee5228a24c78d7d1d6f224a24418df81c06220a241f8c9d1ca92199237a8a3a1c31210323db88f11bcf208a228f88ba1b7520f32170885d1b4a20a1219486241b202067216186bb1ae41f21214b84001b271fae204186001b271fae204186131bfb148e1eb582131bfb148e1eb5829c243f2857290f0b992d4b347c35e521092f5335a83680255a27bd29e02afb1de61d6c24602536127527312bad2c601b1e2fd434cd3561272f30b8361b3801298c2ec034df35a027492d31337a347b25792c1f32c033d923e02b4931a4326721382bc630f631ae1eb92a55306031811cf329ab2fc430b219a729182f72307e167729b52e353094894429232eab2fb594fb28a62d152ffe96a428362d9d2eb3976228d72c282e4597ec277b2cb42d93962c27442c772d1e947626e52b202d1f9055284e2c5b2dce9903326f324432bfac0c35e9347934e0b03c3505359b344db188355635dc34c7b11d350835be34d5b1522daa2e092f08a81e24de284b2afe94b3240729662a19957a239a28052a40917b237828d02935921e2340289929e891af220e28642965924c22c42736290692c7215727fd2888917421cb26a4283891c720fc25eb27939072209e254f27d29057205c250327b6901520f32480266d908b1f7b24f4251890271f1c247b25c38faa1e9b2314253b8f161e0523b124d48d911d7a225524548d461d0822fd230d8dd01c752153239c8ca21c0021d2226f8c661cbb206e22368c2b1c79200a22eb8af11b4020aa2193895b1b0a2056211a8a021bb21f4021eb88361b801f3b219984361b801f3b219984fb1a3219541dac82fb1a3219541dac821e24092829293484692dfe332135df1d8d2e2b357236e6222e27d3290d2b1a1bee1dc1240b26ad0d3727552bc52cd518b82eb0349d352f27892f41369b37fd289f2d59346535e726b42cc53239340725202cc0314033f9229a2bff3033323e20f22a8230a2318a1d672a25302c31c41bd229682fa630d4187a29da2e55304a1628296a2e0e309512cd28d12d652f5b0f6a285f2dd52e82081e28042d5f2e3408a627b22cf52ddc0d20275c2c8f2d750dc1261a2c472de5065d26d32b0b2de08c03267c2beb2c5f916a27932b912c05981730e030e130b8aad534d134593434b181357035ef34b8b2fa330a3450334bb0ce28bd2b502c839fe7225628072ad990a3240f298a2ab2938e239e285d2a5790352370280f2afa9106234228ca29d491e7221f287b299c92af22ed27432941932d226b27f728b3926521e92693288b92f320322625280092c120aa258a27c49184204325e62679912420c72453268c91661f5824c9250390bf1ee8234325528f321e4d23d724ee8dc91db4227824cc8c4d1d30223024718bee1cd021f223ec8aa11c9b21a6237f8a861c50212f235a8a851c1121ce22808b6f1cc82058225b8b681ca4200f224f8b411c8520b7210f8baa1b3e208b21d9866e1b09206b2137896e1b09206b21378900001e27c027000000001e27c0270000be2976304c310818f02c263460355b1da92e1b351e3651211d28a32a0c2c83198d1c2925f526850dd926cf2b2a2de6195d2e5a343e352d25c12ed035fb364128ea2c183416353126342c84321a34a024bc2b933114338b22272bd4300932881f8e2a51306931461a292ade2fec30dd13bc292c2f8930da0954299f2e2e307089e528132eac2f7f8f8228912d1e2fe78e4128422db42e848e1528e02c322e408ed1278a2ccc2dfc8d4427332c6e2d908ddd26022c2d2d428d6326a02bec2ce48cf925612bc02c938cbd25202ba22c538fa525e22a692c7c92ce28c12b962c22a1122b2d2dc02d42a61b29182c952c4ba183240b297d2a7895a3249529222bbb847323df28592a4790af23c9286f2add8e6a23b728432a42901a239028172a1490b5225d28d629b48f5e2227288c294991eb21cc273e29e99097213c27e2285a9135216e266128a691ae20b325882714911d200c25a7267690801fab242f261190401f5924cb25de8ffa1e002451253b90b11e8123fa240e90841ef6229624e78f111e762242245b8f881d0722da23008ee11c8e214523ac8c641c2221a222498b3a1cba202422048b0b1c6120bb21b68abc1b332085216b8aac1b26206421298caa1b062072216788ae1bf11f5121dc86ae1bf11f5121dc86000000002c180000000000002c1800000028ff2e3f30df19a22c503462352c213c2e463580369022bc2456284f2914189b1f8f232a253f14b1254a29e72a5b1a262ea13490352e26c52e3c36a437b228212d4c346135f526372c7032ff33e924142b3f31ac32fc21752a74309431631ed529f42f0231481c5729622fab307a1a1729e12e5730e018e728702e1e30a215af28162ece2fc8089e289a2d292f128f58280a2d7d2e8b91dc27ab2cf62d04916b27712cc02dae8d06273c2c8b2d608d9e26052c2a2dc2865326ac2bdf2c75861d26712bbf2cce8f0f265d2bb22c419464264f2ba22c4d957f25982a522c509207247029682ba8917423d028652a3b91ab24f528732a8e929b243f29bd2ae18d8d23c928412ada834a23c428532ab9831923ba283a2a6f890a23ac28312a6489e0228e281e2a248eae226a28d829ac8f1a2216285029109167212727c428dd91bb204d264a28bc91ac20e325ef27429277205a253a27fb911620b82478267991f51e2524b9253890561e74231e25df8ee71def22bf24a68db41daa227024bb8c5f1d61222e24758c371d1322e223538cdd1c9d216923098c6a1c2021cf22338a3e1ccc207522e088111c87201922ac88c81b4c20d121f486a41b1f204a21d386d11aa21f2d21c988381b491fd9202588381b491fd92025880000cd1a171d00000000cd1a171d0000a3255b2d2c2e2318b62c2b3454359021ca2d06354836ba219e25f028122ae3137f1d1f24672504078426462a182c1117f82d73346a359e25822e1c368c378428122d53345e356426112c0432ba33a723ac2ad13042320021f72918302f310a1f7f29652fb2305e1b2629f32e6b304518f428ae2e41301c18b428702e1e30ce177528172ec62f421645288c2d172fff1507282c2d982ea0149827cf2c1f2e5c140e27672ca62d0d14a726272c632da4135926002c332dac112c26bf2b162d8311fd25752bec2c1d86af251d2ba92c87927125af2a5a2c9996db24062af12b82966824b129722b2f9226244629f62a3c0404240229982a1a843a23dd28492a89094723cd28562a92096823c6285a2aac094b23bd28662a95098523bf286c2ad7836e23b228612a08947a239c28412af795fd226d28e3292195d52112283d294894ea20b52659283693b320c625af274d92442045250f27b791d61fbf246a26c0903c1f4324aa256390c51eb0231325588f691e1523bc24f48efe1d9a226f24808e871de821c623ff8dfd1c3421e022c78ca81ce2209922758ca81cc3205522758c8d1c9f202c225b8c4a1c7f2001221b8c241c6f20d421ed8b0f1c5a20ac21c58b0a1b2d20af21bc8a4d1bfd1f3b2132884d1bfd1f3b21328800002a1e9c1f000000002a1e9c1f0000af2801301a31201e142c4433d7341421b42d053528364621bb2513291f2a0614ad1c27247d25f805b525d12a752ca617ea2d64345335f225462ee73551378e28842cf633f5344526d42a5b31d8324c23b0292c306e3144205b29212f87309d1cff28b72e4330c818a9286e2e1b305b15a828642e0f30220f4229c32e57305e09f028752e2c3069148428cf2d722f7e17ac27242d9e2e5817b426812cf62d45177126f92b8b2d2b1643269d2b302dff15df25a52bf52c9e15af26032c272d8b159126602ca62d8b13c026d62c482e2b8d1d26172c2d2d699723251429cb2ae296ed235d28e9298d9064233f28ad29a9897a233628f329d1833f234728c6298c09fb224128a629740c32237228dc29970c9523f9287c2ace09162468290d2b2c84f9237d292a2b208f39233929cd2afd915f229728032aea92a421ac270529d692ed20522635283b93ba20bf25ba27f0929d203525f2265c935d207724c225d9917d1ff32328251090341e2123d424f08d8f1d81227c249d8c361d10222824508b251dcb21c323398be71c78214523e28a931c2021cb226c8a391cb4202c22ee89ec1b4b20c7218d88871b2820c7215388391b1220ae212688651bea1f79213189cb1a701f6a21de80351b651f27217186351b651f27217186000081180319000000008118031900006f274f2ee72fd31b272a09315d32841ce02d7e35d336c01abb2e3136c037039a523008381b39119e753033385139d316fd2e5436fa377722cf2c1d342f3572254a2bd0315533b624d22942306731aa21c128e62e9730ea1d8328102ea72fe51835287d2df92e5e116e28222ddb2e3896e127272d502f07919f28f72e3130138fa9274c2d0b2fde8dff24c72acf2c76908e24382a192c8f9329249d29512bf793f924de298e2b659585246f291b2b539435243929e32ae89114242f29bf2a348db5230529b12aef837f23b5281a2ad483a1226028ca296283032203285429ac8b3c220c284329928d7722cf273729208ca722e0273e2918898722e4272d29ff088c22f7271a29d90dec223a2869292f0e2c242129ae2a630aa824242a342cc1048624882a3f2ced8a0c24122abd2bb792ae221a29842ae694c621cc27152957951f210626f8276994bd20022582268f93ce1f4924ca25bb91f61ebc236325aa906a1efb22e924f58e2c1e42224524b28e9a1dd621da235d8d591d942198231f8d311d5f216823f88c1d1d41213423e58c3f1d0d21e922068db91cb4206522d68b3e1c6520d221f489001c2d2079219d89be1b122058216f89ad1bfb1f12215f8a021b881f0c21eb88e61a381fe520ec87e61a381fe520ec87000000000416000000000000041600004f24d62a662c6d1704282b2f7930de18132a743119333b1d942b2e33a834041f6d2daf34de35ad200a2f4236c83784225d2ca133c934fc21e029dc306832f7205329942ff6308120c228bb2e2a30871e1328fe2d682f8d1c82275e2db42e771a0027d52c372e98179d26862ce22de8110226132c2c2d2306e822eb280d2a2c8e4c201925b726db92c3223d2626281f97682405288e29c499e924ac28442a8b986d248628eb29ef9582247328d42977955d2443288c29bb943024cf270c298b94a522d82681285c92ac203725fd267990af1f4d248525608edd2005255c2709905f21f8256b287590ee223e263528a292ea227226452880936c2264261d28269253229c263c28098c502204277e28070c97229a280e2a2713a5243a2ba72ca2151126d02c2e2ea50c6425272c562d3a976b22e228902a1f95bd2028260d2859923320d8248e26a191f31f4424da255090401fe1238625de8fc71e1623d4245b8f1d1e75225924da8d9e1dfd211e24a98c3e1d9f21bb235c8bd81c4b215c23cd8a991c05210e23748a721cbf20b8223e8a511c792068220f8a2f1c3c200c22cf88f31b1420ba219088a71bfa1f8f216588801bd61f6921b3865e1bb61f32219586c91a5c1f04210f86df1a211fb320e487df1a211fb320e48700001f1c091d000000001f1c091d00005625292c282d47190227ba2d652f5c1c1f28442f9430ea1d932816302031271f2425e02c2b2e2f1c6e23052a252c92190528f62db42fc51d7828ee2e7530d81d1f28622e2430dd1ce827cd2d782fd21ba227352da72e1e198027d02c272e391604277a2cc02d45122d26082c222d85110525f02a682c0b13ff235229f12a9710e5221b287629288e0f23db2723292d9551230d284829d6957723112856296e9688230328402987958e23e927232995949e23ba270d29229463238a27f528129328233927ba28f0918e22992672287091d92120261928da90392163252a27559038215125162755903d2152252e275b8f4b215e253b276e8f0c2137251627168f0f21222534273290012129250227068f6e21de24e726a08fda2184295e2a9a11542a2a3180320a14ac26fa2c3c2e949ce31f662487262995ec1f9323a1254c90ca1e0f2315257f8ef11efe220025a58e7e1ec922be24638d871e802279246b8de31d06221f24228caa1dae21b623f38b3e1d492138235c8bff1ce920ca22048b9f1ca42078227d8a581c79204d22198a1d1c54201a22b988e71b2b20f0218a88a01b0920b6216188701bc51f6e214588311b7e1f40216c86401b391fde207a86ed1a0c1fc320bf89d91ae61e8420e080d91ae61e8420e0800000731a151b00000000731a151b0000de24f22a432c091458255e2c882da1199f25d82c182e091cb925012d482ed61c9b25be2c032e621c0826472c742d1f1b7026832ccd2d5d1a9b26a92c092e1d1aa226a72c022eb6198b26932cd32d62186926612c892df4164b261c2c332d6b140926902bc42c64116b25e32a4c2cd810b2243e2ac72bff0d3e247b29eb2a5504ff23c4281a2a9790be2334287729339458230f28412974941b23eb272e29b5930623bc271f299e93ec227727f9288293aa222a27cb2861925922ce2685281392e5216c263e28a49199210f26ed27a5904d21b0256f276590092160250327118fd8202725c226cd8ec720fe24a626b48ecb20de248e26ba8e0421da24962629900c21c82488263090de20c32479260990e620b724732610903b21862473265790ea1b721e0921908a5a12b819f41ca382591d11216622708c851e7c225a24948cc61d412242240d8cd61d21222424198cbd1de121f623078cae1db021af23f98ba81d95218623f18b9d1d70216523e18b8a1d57215023c78b621d362138238f8b301d0c2118234e8c0d1ddb200223308ce21cbe20fa220d8c831c8020f422568af11b102046229389201b821f4e211888ca1a3e1fea20cd87d91a401fb220de87971a371fc0203484731a061f7f201e84731a061f7f201e840000b91c901d00000000b91c901d000037249f29e62a880f8624f22a742c0f164f25342bbb2c7313e724bf2be22cd9183825092c162d291996250e2c1e2dd018b825e62b042daa17c025be2bec2c8115b625992bd32c0214a125662bb12c77127225222b822cdd101e25bb2a462c9310c524522a092c7a118824f229922b0c1043248429122b700d14241f29972a2a84c123bb28242a74907a236228b0293492342315285c29d0930423ae271729419401235e27f028b1940e231827c2282d951323df26a0283195fe22a3267d282195b92263265928ef945d221e2631284494dc21b925e4271a9363214a253b27d891fc20f824ba26c69082209e2448267a8f412076240726f98d472071240d26018e50207c2420260e8e4e20882424260b8e42207e241026fa8d21207224ee25cc8d0e1f0923b024da8d5d1bf71ecc202b89ed180a1e1c20eb86981cf5209222738ad31dbe210524d58c1f1ea621e223a48e091eb921e0238c8ec91d9421be23478e7d1d6c217c23418d5d1d26212d23228d201dda20ac22408c121da1206122358ce51c74201522108cc81c4c20ce21948c831c2b20a5217c8b331ccb1f5721f78ac91b5a1f0e2177896e1b071fcd203789f31ac71eb320fb87f01ac61e9420de88ae1ac71eaf20ac87e419651e5d204385e419651e5d20438500000000000000000000b91c901d000037249f29e62a880f8624f22a742c0f164f25342bbb2c7313e724bf2be22cd9183825092c162d291996250e2c1e2dd018b825e62b042daa17c025be2bec2c8115b625992bd32c0214a125662bb12c77127225222b822cdd101e25bb2a462c9310c524522a092c7a118824f229922b0c1043248429122b700d14241f29972a2a84c123bb28242a74907a236228b0293492342315285c29d0930423ae271729419401235e27f028b1940e231827c2282d951323df26a0283195fe22a3267d282195b92263265928ef945d221e2631284494dc21b925e4271a9363214a253b27d891fc20f824ba26c69082209e2448267a8f412076240726f98d472071240d26018e50207c2420260e8e4e20882424260b8e42207e241026fa8d21207224ee25cc8d0e1f0923b024da8d5d1bf71ecc202b89ed180a1e1c20eb86981cf5209222738ad31dbe210524d58c1f1ea621e223a48e091eb921e0238c8ec91d9421be23478e7d1d6c217c23418d5d1d26212d23228d201dda20ac22408c121da1206122358ce51c74201522108cc81c4c20ce21948c831c2b20a5217c8b331ccb1f5721f78ac91b5a1f0e2177896e1b071fcd203789f31ac71eb320fb87f01ac61e9420de88ae1ac71eaf20ac87e419651e5d2043850000000000000000000000000000000000009922d2240000462dc9308c31671b4230013518369e208232533749383a2212222425fe25961200000000000000000000690c551900006a28c22c4d2db8a0ac31d535d836581884320c3719381829d82f0434b03422264d2d8f318a324623ba2cb4309e31fa202b2c1b30e230951d322d24324333a4186e30fb354937a8999a2e2c32b8327a9d3330fe31383217a12d3260368537eda40d31d5324f3352a5c4308a31cb31eea50631be31ea3140a6c6308a317d31a3a5a43059314a317aa5df305d310331c0a5f0307b31203125a66631a7316a31c0a76a3169311d3168a8e830f1309430fca7c32e4b2f392f12a53929c22bc62c2a9d0323a228dd29ec90d32059253f27288a481e87242126368bfd1d86241b26348c841e3a249725688d5c1e0f245325468df41dd1232b25f08cf61daf230b25b58dce1d6123c2248f8da41d0d238424668d3d1d88224324048d031d33220424708dd11cda2192233a8d731c82213a23d38c241c3821ff227e8cae1bfc20c8222a8c5d1bc8208c22fd8bf61a962048228d8b741a632000222d8a791a4720bd21338a681a22208521228a661aee1f46211f8a7d1ab31f1221368a591a7b1fc6204489161a2e1f87200d89f9191a1f5b20b7890b19991e4b20cb85b61ac31e33206c8a000000000000000000009922d224000000009922d2240000462dc9308c31671b4230013518369e208232533749383a2212222425fe25961200000000000000000000690c551900006a28c22c4d2db8a0ac31d535d836581884320c3719381829d82f0434b03422264d2d8f318a324623ba2cb4309e31fa202b2c1b30e230951d322d24324333a4186e30fb354937a8999a2e2c32b8327a9d3330fe31383217a12d3260368537eda40d31d5324f3352a5c4308a31cb31eea50631be31ea3140a6c6308a317d31a3a5a43059314a317aa5df305d310331c0a5f0307b31203125a66631a7316a31c0a76a3169311d3168a8e830f1309430fca7c32e4b2f392f12a53929c22bc62c2a9d0323a228dd29ec90d32059253f27288a481e87242126368bfd1d86241b26348c841e3a249725688d5c1e0f245325468df41dd1232b25f08cf61daf230b25b58dce1d6123c2248f8da41d0d238424668d3d1d88224324048d031d33220424708dd11cda2192233a8d731c82213a23d38c241c3821ff227e8cae1bfc20c8222a8c5d1bc8208c22fd8bf61a962048228d8b741a632000222d8a791a4720bd21338a681a22208521228a661aee1f46211f8a7d1ab31f1221368a591a7b1fc6204489161a2e1f87200d89f9191a1f5b20b7890b19991e4b20cb85b61ac31e33206c8ab61ac31e33206c8a00005e23dc24000000005e23dc2400006e2f2e333c34371d2d323f366d3720212c342938d338531d11218d21a3225e9400000000000000000000000000000000cb28b42a242cf4177334ea378538302cb134db38bc390f2e1f310935f035f7298a2f803362349e26b72de43113337a23172dcf310433781f672d4d32b033d318f22d28335834120edf2ef4322f34249a6b30a6334e34cba012315234d334b1a42431df33443412a6ec308b32c7321fa607317332a63294a60531e631fc3191a6f53019325f327ca634313532313225a63431e431bd3126a57e313e320d321ea831316e31193139a811313631e63072a82c30b430953086a6022b2d2d962db29c3025812a072cf611ed24652885290705db2100275f287c081121fb25bd27778a6a2061251a27338e4d20e72448261e901120a62423266990611f6024bc250090681ef9232025f38efa1d5f23cb247c8e9d1d02239b24178e581da7226c241e8d0e1d56223e24d68cc91c15221524958c941ce221d123628c8b1ca4216b23598c7f1c72211c234e8c5a1c2b21c7222a8c131cec2087226c8ca81bab205122548bc91a6720fa217e8a7c1a1720762161892f1ae91f422121893c1a8c1f0a212c895b1a5a1fda204589a01a511fbc207f89911af91e9220498a1b1a701e4e20d8891b1a701e4e20d8890000ad15fe2000000000ad15fe20000057300c34b934fc1cf532ac36df37c521d534743812392a2877222b234e243917000000000000000000000000000000008329a32b802cc522df342138b238352d5d3545390c3a972efb31c735bc36f72a2a302434d7349327672eaa3203343024912d3a327a3327211c2d15328433311eec2c04326933e81aa62d09322433c48dcc2fd832d833779fb0309133353456a4083163331334f1a52d31e23221331aa71e314d32813205a72d318e32be321aa723314532523260a7393128321e32d5a72931f631de3168a774311c32e03122a95931c131803108a93f31b13173311ba9bc304131343175a8c52c732ed72e54a1a625232a4e2b538c07258328ac29b38bba232f283429ee8ce522b327dc28d69078215a262c28e38c83207425fc26088c2f202025be26cf8c0120072593269e8d611fb02418262d8dd81e53249e25ad8d541e02243f25408dca1d5b23d324cd8c531de72288246b8c121d87224524358ce61c39221224b08cb91ce921ad23858c901c9b214f235e8c691c4821e922398c471c09219222a48c161cca203a22d28bc41b9320ee216f8b1d1b3d209121ce8a8c1af71f2721458a321a8f1fe0202389091a711fcb2001892b1a961fbb2055889719421fcf20d9873c1a501fb12060883c1a501fb12060880000c61be82100000000c61be821000059301634b4341b1ebb328736b83771225a342538bf38c61fc921ed2217249117000000000000000000000000000000007029ab2b812c761f8e34eb3781384e2dff34f838bd39232e3632f535e836a42a4330493407357a27d62e3e335d347924b32d44329333e9202f2de0312733491eb72c8e31e4329f1ab42c5d317732cd0cf62daf3199322f9c1b309f326d3312a3e730123365331aa64431ee32353390a74a318332ab3222a852312932303228a864310b32103263a87131ff31eb3199a87a310432da31fba88031fe31cf312da98231f931c8315ca98331f931b0318aa95131bf317c3183a9572ec32ff82f29a58a26272b4c2cd79158243029782a8b0d602366289729a509a0221428482962030322e0265f289b886c21a6264e28d88c9120f825af273e8d41206025f0260f8f4a20f7246d261b900f208c24e425c58f481f38248125f88e811eda231d25398eff1d6b23d124bd8db71d12239424788d761dd82264243a8d3a1d8c222724008ded1c3522ef23b78cb21ce5219023188d7e1c98214223e08c481c4821de22a58cf61be7207522518c7b1b8620eb21298b041b45207c21d189a41a2120532182897d1a202041218e88911a102025219c88261ad91f062119897b1a2e1f8d208d887b1a2e1f8d208d880000e5202a2200000000e5202a220000b32eab32973321152232523672371721c433b6376f38f51c0f21f922f723cf0d000000000000000000000000000000002c29c22b7f2c082111346b374038582c8a34b13880394a2dc031cb35c836252a0e303b34f7349926002f4d336b34d123af2d46329b338920212db731f732381e7d2c2a314832721b2d2cdd30e93154159f2cf230e53121988f2eaf315a32d0a09b308e32e332bba54c31d2322e33f1a76f31a532b9326ca87d3182329c32d1a89f316c3258321da9b0314f32363289a9bc314c322232c4a9cc314832153233aad0313e32063236aad3314732f83169aad0314532f13196aa173093307b301ca81728352b3f2c869a9525ff285f2a579544249e28e229e69019234928a329fc907522a527d12889907921a52633288a90f320032605281b90c020502513278c904d202a25b326aa901120ef246b266990e11f8d24e1254690541f20245725f38fcf1ea82305252190691e4023c424c68f041eed2295244b8fa11d98225d24d38e1c1d3f2228248b8db91cf721f623858c551cb221b023308b091c66215123b28aab1b1021fb225c8a6b1bbe205922278a531b8920bc212489071b46205f21d5899c1a18202c21a488a21a1120142181892f1ad11f29212189e31add1f31212786e31add1f3121278600005920a021000000005920a0210000652e24320833589bcf31f1350637691b2a335d37493842252e212d248d248c18000000000000000000001618801500003129302cc42cb6225033ec360038f52c213460383639342d8531a335a636ba29c32f1a34e03492258a2e09334534e3228f2d1f3274336f20022d9e31da32b61e562cff302832321bdf2b7e3085310615f12b4c30393115929b2c93305931959d682f8b31033223a420318d32d13201a89631a932e132e6a8bb31aa32a63265a9d531a5329432dda9f631a03286325faa0d32a6328632a9aa2432a6327b32f5aa25329b326b325bab3132a132583268ab543290323432faab01315d31223126aaf1280e2cdb2c349d84242929942a9c84d223af28112afd899b238428e529da8c102202286629f78e3b223127a6282b91db21902642289b912e21f125eb279e9163205425f226c2902c2007257f26fc8f0b20db245126bd8fbf1f97240a266a8f141f3a24a325c78e901eb5232b25488ef21d1d23ce24b18d931db7228724568d1a1d5a224324e28cc11c102204248d8c8e1cbe21a7235c8c4a1c6c2142231b8c3c1c2321db22078bbb1bcf2095226a8a461b7e20ea211b89df1a28204021d3885f1af81f212179887c1af31f04217287001a941f21213688c21abc1f11210a86c21abc1f11210a860000ce20a62100000000ce20a6210000632dbc31b9322014903016350a363d1d7432f3361038d3234e21802400254316000000000000000000004618e7130000e828492cb82cb62190327e368837da2b76331d38e838582ceb3041353a36f228f22ecf33a9343525372ec4322734f022432de93131338920b22c57318d32b21d242cd830fc31d019bb2b7c307d31ef14672b1f300731ab911c2bc32faf30e699502d7630153141a186300b325e3212a7c931da32ed3272a9fe31d732de3205aa0432d332c4326eaa2a32d932b332fcaa4a32e532b33253ab6a32ed32ae32e1ab7c32eb329d3216ac8a32ee328c3239aca132ec327c327eace7312832ca3119ac492aca2c442d83a109254929a92ac0969723b528092a5c901c237728d3291590d02211282629a6913a2233279628f6912e22d5266628b492db21602620285a920921e22597271b926d20802522275e913a201b259f262091de1fa724fe25c4906e1f50249825fb90e61eeb232b259f90711e2123bd245190051ea82269244c8f911d482230240a8ed41ce721eb239f8c641ca7218823488b0c1c61213423b78ab11b02219322618a4f1b9920fb21118af81a6720bc21c889b61a3c20852191899f1a21205521a688ad1a08202021b088de198f1fff201e882e1a0b1f8b2019872e1a0b1f8b2019870000f920f52100000000f920f52100003f2dd531cb325b8d51301a351a368219e831c236fe37b62411202d230424a7170000000000000000000000000000000085288e2b5e2cc91b60327a368437692af1320638d638dd2ba230263522368228952eb0339934b924ba2d843201340822e82ca231e632d31f762c24314532681d0d2cb630bf31b91a662b4e3047319c16bd2adb2fd43029113e2a212f6230c890072b1b2f4430a09bc52d883008312da3213147326132d4a83932e432c5320dab5c320e33e73268ab6e320e33e132e6ab95321d33e43241acc6323a33ea327cace9324633ea32afacf0324c33f032edac11334a33c7323eadaf32d832663210adda2b5b2dae2d12a4c0249f29e22a8c948423ab28142a519043237a28d3291991ee221e283529bf918a227127dd286d91f32102279628b2914e21652645281491e8200126e827b290ac20b0255227799072204825c026d2901420de2449266c90761f9824f9250c90ed1e4b249c25838f911e06245125f78f491e92230f259e8fda1d2923ca24188f7b1db8228a24a58e0f1d4a2256247d8dbf1ce1210c248b8c301c65218d23f38a531baa2095222489e41a4220ae21d688601a022058217a886f1ae21f4f2184887a1acf1f13218c88e019571f2a2140850c1a011fdb20f1860c1a011fdb20f18600005221332200000000522133220000f72cd731d032118d3130333540367e1b59317336ab37cd21771f55222b230011000000000000000000000000000000004428382b302cc31cef3158366d37272a6232d337bb383b2b4530f634f2352828582e91338e3426248f2d80320c346f20d02c8031d232fc1b6f2cf2302732ec170f2c9530a131250c292b313029314f0b6a2a992fad308d0ac029f62e6c30df09a1297d2eeb2fbf894b2a9a2e0230a29bd32ec5302a31c5a5d931da32e132d0aab03259331a3337ace132673326338eacfd327f333333daac2f339c33433319ad4833b333483349ad5f33ba333e3395ad9033ae33223317aea2337933ea3264aec02c1e2e6b2ed6a5a2243c29712a9e950e24ac281a2aba9264237a28bd293091e02231284429d3909722e7272a29a09012225527f52809914e21772640286790da2030260828a590be20e325b2272491ab204e25f326a9917320da249226f791362097244f26a4910d206b241e266e91631f3624e025f3906e1eb5233e25cc8fc21dfa2291243f8e6a1d77224d24e08d821d2b221a24ae8e8e1df121ff23bc8ea01dad219823d28ed41c1c2199223d8d1a1cb1202e22da8bfe198d20b322f888ce1abf20fb22c788791b9b207c223e898d1a3720ce216f89151b092093218584151b092093218584000001211e220000000001211e220000cd2ca631993283993b30343552367b96f73040368437b41d8d1e14220023641000000000000000000000000000000000eb27f12a082c6c1c693103360637bf28cd316b378338a5291230ed34f335aa27ce2d4c3370342b242d2d3e32e033ca20942c5d31b632991b4a2cc830ea317915d12b5d305f31fb0baa2af32ff530cd8a1a2a5f2f94303a8aa529dc2e583052905b298f2e1f301a902e292d2eba2ff395562a1e2e712f459e3a302031603185a8b03251331c3389ac3a33bf33753321ad6333ca3374337aadaa33f5338733eeadca330834913347aedb3309349b3374ae153405346b333baff733fc3361332daf222d652e052f77a6c8243d291b2b949442249728422a4096ed2381280e2a969342235e28012af39296220b28c2294e9244227327ed28cc92d5212327a32853926721902644288d923d21d2258b275a92ce2070252e27d49167202d25ca2656910a20c2244f26e590761f6824d5258690ed1e24246f25838f611ece231b25ec8ed31d4023c724938d751de0228524398d061d7c224124cf8ca71c16220724748c5e1cb52189232e8cfb1b2321bc229f8a731baf2008223b89dc1a45208921d1886c1a152063216087481af91f2f2136871a1a9b1f27210287001a8c1f1922be89001a8c1f1922be89000029206d220000000029206d2200002c2a0a30d1304e0a202ff834fb3575959230f9353037aa10111f8a232424500a00000000000000000000000000000000d027122b192c7a17fd30b235b836b2288d3133376438ef29ab2fbf34e435ba265b2d063347345923b82cee316f33aa20212c29316f32011da82bb030e4316019072b513074316111a12aee2f02313b94472a222f6e306898bd29872e1130979647293b2ecb2f0f96ce28c92d232f22927428612dc72ef593312aa42d972e1f9eac309231a831bda95b33bd335b3393addc331534b03354ae08342634db33a0ae15343234e933f8ae29344334073480af41345a3402340ab044344f34db3341b0bc2cbc2de22db9a6d7247029a42ade957b24e528672a4a94cb247e284b2acf9512245928a729ef94e422082827292e9425228827e3287393ad21f326af28e29253219026802874921921272622282e929320952567278b9142204725fe26b5912b201125c7269591f71fcc24582656919e1f7224e5251a91d91e042452252790c91d0323b824048f471d67225924ba8d181d00222324878d091dd321e023768dbf1cbd21a323268d741c71213423438c321c1b21b522f68adf1bc2201b22878a491b8820d3210b8ac61a472085219e89191aed1f17210f892b1bfb1e6720f2892b1bfb1e6720f289000024204f220000000024204f2200008229d82fb33038106b2ef434083619184d30e4352c377d19ea1eb3233f246908000000000000000000000000000000004927192b002ccf1971307c357b36cc270531e0362a385d29e32e873493357b26fb2cc7322734d522992cc1313933ec1f042c03313332b01b762b8d309c31aa16d02a21301a31f50a442a852fb430cc90c929e22e4c302b957a29512edd2f4a960229d92d6b2f0897b7287b2de72e9f9655282c2d8a2efa941728d72c122ebe95072a552d402ebb9e0c31e331d73101ab02342b34cf33d8ae42345a340d348aaf61346b34263416b076348534383460b08b3486341c34adb04b344f34e033b1b0572b272d962dfaa4362422298d2a0894cc23f328752a79918c23c328362a429226237a28c529d892c1222428582954939522cc27fd28fb9304223a27b52808946c219826462844930a211d26ee27c192b520c72573274f9273207225062787921b2010258e268091641fa424ff25f490bc1e492492251590391efc2334258b8fda1d6123d624188fbb1df9228d24f38e8e1d9a224f24bc8e611d35221024858e011dcb21a323118e931c63212123f68c561c2f21d522268c091ce0207522b28aa61b9d2034225e89821b6420cf213a8a331aa91f28212489141bb81f6b21c78a141bb81f6b21c78a0000cb1d182100000000cb1d18210000d028472f5e30ea08292ed934d535131bf32fa835f7361219d91ec92355245f0800000000000000000000c003af120000c8262a2bec2b161d08302e353736d827d830aa360438b728c92e81349735bd25b12c9f3213342322352c8231eb3229204b2bd030f2315a1dce2a70307331841a682a15300a31ba15dd29632fa230fc095329922e2030cb920729022e9f2f7e94d928cb2d702f0598be288e2d1f2f8a988928362da02e57983628d82c1e2e929881278c2ce12d2f97e928c62cb62ddb9c033166315d311eac3b346034173404b0843492342f34a6b0bb34c034613405b1de34c2346b348eb16e339c3318331eb09a28232c952c2fa02f23fc288d2af691ef23cc284a2a4e949d239b28322a219431236628e4295c940e233828b229ba94d6221028752995947d229b27282959948e21f126b8281494442173265328bb93de20e725ce2724939a2075253327c19237200225a226a691a01f8b24fd251b91311f33248d25d290c31ec52324258790521e3d23c6243c90ea1dc3227124ec8f721d4f2234249a8ed51ce021d9233e8d611c71214723318c1f1c0121c622d68a1b1cc1206222d08a1b1c7a20f421d08ab01b5320b3216589561b2c2084212789041b0a20482145860b1b331fd420d8890b1b331fd420d8890000bd1d242100000000bd1d24210000b7284a2f6530d188992dab34a035db1b732f8d35dc362e1edd1ed4235b24720f00000000000000000000340ccf16000031260c2bc22b091d852f1c3522368f275f306236b8378928132e2d343a3523253d2c2932bc33d021dd2b3931a032461f012bb330db31991b812a5c3062319018032abf2fcb30ac13a329152f6b30c2895a29ad2e2a3083973929262eab2f009bfa28a92d0e2f499ca628302d8d2e019c5f28cd2c292ef99ad3277e2cae2dbe993f27562c7c2ddd972b271b2c2c2df2953127f42bda2cd2980c2eb72ff32f95a869339f332433fbafd334b8345e34a8b172345d3401346db13030923074304fac4d25c529cd2b9c9b052415299a2aab926424ed28462ae295e223a228122a46945b236c28b729ee94f82236287b29ac94a72205284c29e2945a22b5272229a994f6214227df2860947c219a266b280794ba20ea25c427569285209d255127a29251205025f226c8911220e1246426f991a71f5f24db259d911e1f092460253991891e7523fc246190ee1de7229c24f28f721d6c224e244c8f121dea21e123cb8ec71c6a213a23cb8d8e1cf320b822868d551cb4207022418d041c732009225b8cc11b4320b8216c8b8b1b12206921188c831a931f59219288241b831fb921ec89241b831fb921ec8900009f132819000000009f1328190000f927972e26301208372d78346c35fd19162f8435d936fa1cac1ee2237624af0c0000000000000000000072105e170000b625312bd22b481c2d2fdf34e635c126eb2f0b363e373b286a2dff33fe34ec24d62bda315c33e020982bfa304832921dc92a7e309031a119402a273029312d17d1297b2fac306d136829ea2e5a30860905296d2e0630b08fb828df2d632f3a8f57286c2dd42e8a910828042d512e26918227af2ce52dca9008275a2c7f2d7d90a026132c352deb914c26ba2bfb2c3c9333269e2bda2c5a945b26382b4c2c499a09281f2ce52c159f9e2cd42d8f2e16a84b2b042d9e2d57a63e28b32a162cb79fbb215028a52a7d910524fc28be2aab920024ce286d2aa292da23b528662a849343237628102ae1931e234e28cf29b893ce2225287b298f948b22d1272e29cd94ef212727bf285b944421bc267728bb93ce2021261f28aa93b1207a256e277c9379201525cc2622930920ab2447267092051f4824be252791771ec52334255590ec1d2323c4242f8fa51d942263241f8e3e1d21221e24058dda1cc721d823a58c851c88218f23538c821c2e211e23518c811cf420b922e38c8d1cb3204e22ef8c9e1c95200422038d791c7f20aa216d8de61b2e2074218b896d1bfb1f4a2137896d1bfb1f4a21378900005e163a20000000005e163a200000332946308c31a212862c56347935811bd52e8935ea362520b61fa3247c252a110000000083100000000067189b1d00000c25832be12b1e163c2e8f348f351225262f9635ae36df27e02c7633b6346f24822b8d312133e81f5c2bd43021322a198d2a53306631b08a1a2af52ff630c993bd29462f903097964d29b62e37307197e128202ea72fda9681289d2d222f52963d28482db92ef3950e28d62c1e2eb295bd27852cb22d6b963a27392c5c2dff95c126072c222d9a953f26982be82c2f95f2255b2bc12cee949d25eb2a872ce1936325922a552c30928e252c2a212cbc96f724a929cb2b7e9a24242e29ed2a7e94702451291d2b19910a241829ba2aa4909923f728672a4e92ed23e8285f2a94927b23b0282b2a29933c238828f829ed92c0225028b7295393712214287429cf93f7219d272129fe9387210827b1286893fa20272625284e938b2072252e27ab921120e8246d26f891961f942412269191251f4624b1253e91b31ecd232f25eb904e1e4e23db24a090201eda2282247f90b21d5b222f24a28f3b1df321bf23588ea01c72211b239b8d4a1ceb206c22a78c201c9220e5217a8c011c4a209221588ca11b25206621238c951b202043211d8c551bf31f4a21158aa11b002031216288a11b002031216288e81b0000621d918be81b0000621d918b1d248f2807294d8ae02c6634a5353916932eac352537e019d91c6e2128233d0100001809df170000290f0000000058009e25fc29d52a6015d22e00350d36c425342f233697373228e72caf33c334ed24b32a5a31bd329820572a5d309331af1ba029d12fe53006153029712fad309f120c29fb2e65302709e428832e25303e92af281b2ecc2f61957e289e2d282f73972728112d822ee496c227a62cf92d6d975b276c2cad2d0a97f426302c6b2da8968126f42b1a2d0e9731268f2bd12c8297f425462bb32cfa97d0251e2b8e2c0d974d25b92a452cc0953a25522a092c009582249929342b7a935f245b29df2a059170244e29ac2a3a922c2428298e2a758f9b23f1283c2ada8c5c23cc28382a938e0e23b028292a0d90fb22a5281a2ae690c4228628052a9c9193224428a0292293d921b6270929d6930d21d22686286993ab203f2644287293ab20d225f327059467204f25232795930a2092243f2672920b1fee237f252b913a1e4b23fe242c90f61de222c0243a8fbd1da0227224f58e701d5c223724988e351d0822d523a68de71c94214e23528d6e1c1721ba22cf8c421ccb206d22148c201c7b200722e68bf11b3e20c621968aa61b05203a21588a991a6c1f0421288b5f1b241fb620688d5f1b241fb620688d00000000d018000000000000d0180000c225cc2d402fc714a52c6b348f3526183a2e6635cc3690197d1ee8223824a88100000000b11500006e0c0000d01112006f25462ae52a3315092ec034bf357d25ed2efe3553370828cf2c8633d0348624482a1f3179328220e82919304431171d5529482fa030c314fd28f02e6b301889e228b72e44303c92bf28802e21303d948a28312ed52f0e946228992d222f08953528412db52ee895ea27f22c582e90966527a32cfe2d3f940a275f2cb92df094a826232c702da5937526e82b2f2d2e961626652bdb2c7898a825dd2a7e2ce0980625452a1c2c0298a124b529812bcb9647245a29082b019213242729c02a3e8af0230929962a0d84c623f0287a2af883ad23ea28752aeb837623d828622acf836623d128672aaa897d23c728642a4d906f23b728582afb9468239728212a5497df225028a7295b969621ab27ee282b95ae205c261f285594952085255227e49321200225ab261e93ba1f9324222629923b1f2a2482254e91a11e9d2305257190361e1923ba24888fc71da1227124018f461df021cd23b88db31c2c21c922198d611cc6206422c08c5e1c9a201a224c8d671c7920f121568d5d1c6120d1214a8d601c5a20b6214e8d401c4b209621278d4b1b1320a8216c8c2b1bcf1f3a2108892b1bcf1f3a2108890000441c342000000000441c34200000002941304e31be156e2c02342435ea17c02d2f3578362319281ed2218b239281000000000000000000000000771200001125972afa2a2516c72d943498354125c12ec2350a37de27962c0d337a3406249b299130d7319e1e5629422fb930791ada28892e223056147d282a2eec2fdf8e4428f52da92fa098d1285a2e1d30749af4286d2e3630459bc428e12db42f8f9849289e2d332f78911f28872d112f500e02285a2dc92e9b14fe27592dd42e24136c27512de92e94071d270e2d862ee7956326572c7e2d18996a25bf2a4a2c039968247529ef2ae8952324ad281f2add928e236628132a579089235128db29bb8e81235128012a44918d237728082ac8894d2399280e2aba037f23f228852ad403f4236c29222b108416249329512b378de8237629192b91930023fb28732a2395ba2124286c2992942121f2268e286b94c6200d2607286b94c82093257927ba94a7201225a8269994442050249f255993771fca232f257a913c1e1c23db248f8fab1d89228c24268e391d16223224008d2e1dc621dc239e8dfc1c7c215a23c68cb41c2421d6221a8d321cc6204622048ce01b5320d9218a8bb71b0e20bb21668aed1a0720b921bf891f1bc81f5121ba8b8d1a3e1f31218787d71a071ff920db87d71a071ff920db8700009119b018000000009119b01800000628a52e1f309f14ae2a9c312533d20a7d2ee1355737f894652ee83563371598b32f0e377538e19a853047386e39c5991d308b37bb383390d32e1d36aa379320c92df73448361425962a1b316232fd21e728492fc630791d4528052edb2f161733287c2d002f6e0ef427182d762e1b933e264c2c972d2b937525cc2bbb2c8794cb249a2a852c6c96e024cf2aad2c3398f024822a732ce2983d248429512b3198fc24d229612b9d983e244e29032bc4961d243e29f52afd9412242c29ce2ab7911323cf287b2a838cd122ab28392a178e29223a28d129138f592225288d294b8fef224f289c29f78f2223202872291990d62216285c295c8cab221b2853291b09e8225e288c29ef0f6223d928352a980eef24b429802b09852125602a552c959064246e2a332c49935b23bf295c2b66950622ac28f429f6954021fe269228dd95de208a254a276f956f20b724212663946e1f2b24a9256792b51ea62365255a916c1efd22dc24b790281e2822262420909c1dc621bd23cd8e581d872171237b8e421d5a2159230b8f3e1d45211a23068fa91dff20a422958fe31ca5202422ec8d1e1c4920af21788c121c212061216b8cbe1b04203621698bc31bde1ffe20368c351b791ff620d18b161b2c1fc120c98a161b2c1fc120c98a821c251d791d7a8b821c251d791d7a8b3a259d297929ac105d28812fcd307488622b4232fc33b614902cc6330135d215f72c9634b4357018ad2f0f378d38641dd82d6e35ea36571ee32b03336134cd1f7829b230f531ce1e83280a2f7130c01c2e28132e8e2fab1a83274f2da72e3117e326bc2c142e65108226602ca92dfc8ce425fa2b0e2dc492de246a2a012c5990f5210f282929b4916c2159263a285394b220fa249027d8953222ed240927a2996b21bd25a227c7975a21a2257f27a996cf2043252827739429207624fd251b92da1eec23e724279015207f24d825d08f52219d2540271891362369265e28d293e1213f26ca2861924c2294267628a3933d22ae267328f9914e22d62662283b91bb2228278b284b8c97222a285129a010f7231e2a2d2c5615d225932cf72dd4141426d62c492e12982e24bc2a552cef98ba209e27fd284795c12093258d2719942620ba244e269e92af1f37249725a391e61e9a232c259f906f1ef022ac24cd8fe61d5f225124278f6f1de4211424e58d291d8c21ab23f08cc81c38214823948c7c1cf320f4224b8c691caf20a322398c381c6f2052220a8c3c1c35200a22078b0e1c1320c321ba8aa01b02209421538a671bd01f6f214088211ba21f3a210189811a4c1f1c219088d51afc1eb2201b86d51afc1eb2201b860000181cc41c00000000181cc41c0000d7253d2c652d730fe826212ebf2fd91465281330163135188029ea303d32091c25293f305031c21cfb21d42a3b2c27152e26102dbb2e8918d2289a2fd130751a7028152f91306119f627152ed12f9a16b7273d2dc02eec108227b32c012ebf8dcf265d2c8e2d15922d26032c162d85917725442b932c2f8c9a241e2ac32bb2847b23d428382abb89fb2210284229e6901b23ca27172937950b2391271029de97c7223827da2800988a22d82696284d97162274264b283e95b82137261428aa936d21ff25b12794926e21e2258027e3915b21d3256227cf916221a1252527d791c221be257627fc92b021a2257827e5926721762558278d920e21132530272092a9201e2510270e91f62134252d2777921920122523273b8910289e2e0630c7177429863000324e9b73201b28f928ad96af20d8231726a194a91f67237a25a590521f42232d25e790e61ecb22e7249f908e1eba22b924f28f961e7b227024fc8f0b1e112220248e8ec51db721b623428e541d51213523198d1e1df420bc228e8db41ca72061221a8d671c73202722c78c251c5320f921ef8be91b2b20d021928b911b0720a821478a5a1bc81f67211a8a481b921f3d211d89551b3e1fe2202689dd1af01ec420b289171be41e73208684171be41e732086840000cc19ca1a00000000cc19ca1a000072242d2b7f2cac0d5925972cd72d70144826942d022f3518d026132e9a2fdf198226c02d592f9b195726f42c3e2e73140627c02c072e608d1c27d22c2f2e718dcc26c42c132ef0867c26962cd02d9f064526542c7b2d678620260d2c2f2d7991fe25952bda2c8096a225012b6a2c64950e25672afa2b32948b24bf29362b8a93172409296d2a7094a3236528ae299b95ff221028312922959c22aa27e928da9452224727c4283c943e22f92695282f940a22aa266b280c94d5216a263528d1938c211126ef27ba926021da257a27d59111218b251d277f91e1206625e626ac90da204925de26a590e5203325cf26af900f211d25c126d89029211225b726f0902321fd24ad269291e520fb2496264f9157211f25b626cb91be1e6422ec24748edf0dff185e1b9781b5191b1e24207789071e2122f123c58d4a1e90225224058eef1d47223e24ae8dca1d262226248a8da01de921f523638da71dad21a223228eaf1d8e216c232b8ea61d6d214923208e841d4b213c23fc8d471d2e212323ba8d161d0a210b23858df21ce120fa225d8d9b1cb920c422688c231c44206a22eb8b7c1ba71fc321368ac61a4b1f2d219e89a71a2c1fef208589c71a351fb420a0896e1a1f1fbb206287671a021f8620b885671a021f8620b8850000191d431e00000000191d431e0000eb24df293c2b7e998f24402ba12ca7041c25012c0b2ddf1122255f2c7b2d91156025782ca12dd51581255f2c882d901495252d2c422dd613a025e72b062d2d0f85259c2bd32ca3856b25502ba42c268c3925032b6e2caa8efd24a32a352c5d8eb5243d2aef2b028e7c24dc29742bde8a36247929f82a608d06241c29892a318f9323bd281a2a51913c236228a829ed92f022162857293594c122b3271229f594cc225c27e8286c95c5220527b128d595c822bb268528d795cf2273265a28de95902228262728a8952422e025ef27e69498217b2567271b9425212225d0263d92cd20eb246f2635917120bc243126d2905c20af242f262c907a20bc24572649908420c124572652907a20b124572649906c20a2243b263c901e205424a725e28ffd1c6c21fe22698d1619df1d1b20de88ba1aad1f33214c8b8f1d83219323088e011ec2211224478f511ec22106243c90001eb721dd23468fb71d9421a923ee8e661d632158238c8e371d1521f922528e101dbc2083227e8d071d86203522198eda1c5c20f021438dab1c3a20a721a98d651c1e208521c48c0e1cbd1f4021c38b771b491ffa20258b141bf01ebb20c78ab91aab1e9b209389ce1aba1e7820a5896b1aa11e8b205f877e19291e6c201a827e19291e6c201a8200000000000000000000191d431e0000eb24df293c2b7e998f24402ba12ca7041c25012c0b2ddf1122255f2c7b2d91156025782ca12dd51581255f2c882d901495252d2c422dd613a025e72b062d2d0f85259c2bd32ca3856b25502ba42c268c3925032b6e2caa8efd24a32a352c5d8eb5243d2aef2b028e7c24dc29742bde8a36247929f82a608d06241c29892a318f9323bd281a2a51913c236228a829ed92f022162857293594c122b3271229f594cc225c27e8286c95c5220527b128d595c822bb268528d795cf2273265a28de95902228262728a8952422e025ef27e69498217b2567271b9425212225d0263d92cd20eb246f2635917120bc243126d2905c20af242f262c907a20bc24572649908420c124572652907a20b124572649906c20a2243b263c901e205424a725e28ffd1c6c21fe22698d1619df1d1b20de88ba1aad1f33214c8b8f1d83219323088e011ec2211224478f511ec22106243c90001eb721dd23468fb71d9421a923ee8e661d632158238c8e371d1521f922528e101dbc2083227e8d071d86203522198eda1c5c20f021438dab1c3a20a721a98d651c1e208521c48c0e1cbd1f4021c38b771b491ffa20258b141bf01ebb20c78ab91aab1e9b209389ce1aba1e7820a5896b1aa11e8b205f877e19291e6c201a8200000000000000000000000000000000522bb92ebc2f709c022de6307731b69e1d30ac348935fda08b326537903819a351211424682172927f18000000002c8bc51800000000548d551427151014388a3329be2c3e2ece9da6317235d436b020f930813566364924902d0c32563315208c2cbc3092315a1c9e2c1f30f130e5150c2d0231b53171963031ee3540374aa22331dc34c5356da4e83008343834daa429328836fa37e1a69c301b32523253a6c22fca30d230d1a5b32ed72f1f30e9a3072b622d5c2eb69c0c28c32ba02cbf97a7261929c4295f966d28812aa92a7f9a3a2f762f052ff5a42e31f1308b3034a9ed30ae3034301ba9d42fac2f002f1fa7aa2b952d0e2e86a05c27962d252efc9770213627ca288390501f3624da25ef8f361d3a24af25518e161e23247825618f331ee0232a25848ff51db4231325398fd81d9523f624168fa21d3823ad24d48e831de8227924628f081d65223624be8ed91c0b22ec237f8eab1cb4216723418e661c62211823e58d221c2121d5228a8d9a1be4209922188d4d1bb6206722e48ce71a8e203022a08c991a6d20f4216c8c781a4e20b621d88b941a29207621fa8b951af31f2f21248b851a9d1ff720128b8a1a621fa920188b3c1a1e1f7720c38afd19fe1e50207f8a2719991e44204688d41a961e0a20c18e0000000000000000522bb92ebc2f709c522bb92ebc2f709c022de6307731b69e1d30ac348935fda08b326537903819a351211424682172927f18000000002c8bc51800000000548d551427151014388a3329be2c3e2ece9da6317235d436b020f930813566364924902d0c32563315208c2cbc3092315a1c9e2c1f30f130e5150c2d0231b53171963031ee3540374aa22331dc34c5356da4e83008343834daa429328836fa37e1a69c301b32523253a6c22fca30d230d1a5b32ed72f1f30e9a3072b622d5c2eb69c0c28c32ba02cbf97a7261929c4295f966d28812aa92a7f9a3a2f762f052ff5a42e31f1308b3034a9ed30ae3034301ba9d42fac2f002f1fa7aa2b952d0e2e86a05c27962d252efc9770213627ca288390501f3624da25ef8f361d3a24af25518e161e23247825618f331ee0232a25848ff51db4231325398fd81d9523f624168fa21d3823ad24d48e831de8227924628f081d65223624be8ed91c0b22ec237f8eab1cb4216723418e661c62211823e58d221c2121d5228a8d9a1be4209922188d4d1bb6206722e48ce71a8e203022a08c991a6d20f4216c8c781a4e20b621d88b941a29207621fa8b951af31f2f21248b851a9d1ff720128b8a1a621fa920188b3c1a1e1f7720c38afd19fe1e50207f8a2719991e44204688d41a961e0a20c18ed41a961e0a20c18ec12c7a301c31c49dc12c7a301c31c49d242f0d33f7339ca22132e035e236aca529340938c43893a50220661e3720c71600005010870800000000c40e9116000000000000000000003b29f32a612c4221123412374338182c9a33c4377238f828d02fd533bb341d24bc2df1311d33f41e192da231da3282167b2d4b329c33e598d32e87337334889e3430f73399343ea3f2304c34ce3435a5513188341b359ea63f31cc333d3433a79c308932fc3253a6f32de9308931c8a3fa2a3b2f4d30589f5929da2e37308297e1231e29e22946146927d229812adb1a16313e326432f3a712316631523118a90b312931da303ba9a3303431073183a83b2d222f872fd8a20e276e2c512d34070f242729582ab311342119279328a8028821d525922769938c2062251327ee900420e1245d265b90a81f9a2412262191371f4624a525d590481ec8230f259c90d61d3b23b52448907b1de4228924588f421d922260240b8ff81c41223224a88eba1cfa210a24bb8d8c1ccc21bf23838d751c8e216023678d4f1c53211123398d2a1c1f21c5220d8dd51be3208c22c08c511b9c205a22708ca21a58200122328b711a0e206d21fd8af519cc1f3721768af6197b1fee20778ac819371fb6208989f8191c1f8920b689ca19bc1e7820488af019911e4b20338bf019911e4b20338bfc07f7255e265a80fc07f7255e265a806b300634b1349ca3e73250365e37d4a6ca344938033948a02821b7202022ad19000000000000000000001a14de03000000000000000000003c2ab92bdf2c2997933488378038e12737342738c038c8299e3086347435dc24752ead32f233d51f922d30326033651a2f2d193282334b0da02d48328d33e69b302fc832dd33bca1883089334a345aa5fa30d7335934d4a61331973342349ca7d830e9324d3344a7d22a5c2f5030509ee5292a2f593083904e28842dcd2e0b166f243929422a6318c027082afb2aae1a5030ad30a13005a75831c031563139aa3531be318d31bba911319e316931bda96f2e0a301f30d9a59527da2b902c4a963d243b299f2a54842e232e284829958cf6229c27cc28e390d0219d265328d2907c20b72598274b9010202625ec266890e01f01259426c790551f9e240c267290dc1e472490252890641ef4232e25bf8fc21d4123be24fc8e541dcd227324758e0b1d692236241d8ecb1c1e220624cf8da01ccf219f239b8d621c81213b23518d391c3321dd221f8d141cfa208622778dd71bb8202922c18c701b7a20d421828ce81a2c208121308c561ad31f2d21df8a0f1a881fe920938a111a741fd320ce89381a8d1fb520f4897719161fb32089880a1a0c1f8920c8890a1a0c1f8920c8899613a826c726a9829613a826c726a98252300c34c53457a2953236364537aca55234fe37b938e4a69f20ab1f1a211307000000000000000000000000000000000000000000000000402aef2bf42c55252b3415374038b92cea330338af38ef29b030a6349c350a24cf2e2d334334621fbc2d28326233961a3a2dde310c33560ddc2c8a31b3329499582d9d319c327b9e592f51321e3344a391301133ba33f9a5f5302a338733c0a73b31df32253397a8373167327132bea84231fe31eb31f3a85a31e131de3160a96131e531c53194a96931e831b831c8a96d31e931b131f9a96e31e831af3126aa7131f231ab3157aa5c31dd319831c1aa892f8130813045a81b28da2b8f2c8d9a94244c29852ad88d73237428a729b4899e2211284f29e98d2922282780285390a721b9267228b090b720e6259a27839036204725b7261b912f20e02448269b910f207d24be2570915d1f24244f25ef908f1ebc23f6246590031e6123b7244a8faf1d02237f24e48e5b1dc62253247e8e141d73221f24288ed61c2622e5237b8e9e1cd3218923308e601c80213a23dd8d2d1c2b21da22998dfe1bcc207a225b8dd31b7b20f321bf8c2c1b44207a21598ca01a0f204321308b561a0a202d21118a731aff1f0c212c8abb19901ff4207d89231a191fb020e089231a191fb020e0890000921ad72000000000921ad72000004a302e34f63464a30a3200361d376fa4dd3379378038c7a62020f81e3021d80e00000000ff0f000000000000000000000000000000000000282af32b102d6222a933b5361038f72a3133903785386529623081347135fe229b2e06333134521e8c2d1b3268335f1a0c2da431e032270d6e2c2e314f32c992512c003103320f9a842d58314332c0a0fd2f3732de327aa5e630c2320e3325a84731d0322933f7a85c319932b33263a9753177328a32a9a984314b323d3212aa95312f32133252aaac3130320232c9aabb313432ff310aabc0312d32e9313fabc8312f32df3178abc1312e32df31ceab7530ed30c130c3a9d4282a2cb52ca09ef1246a29d42a41973e24ab28092a249587234d288f290c957422b427d328d2937521c72654285093e220e3250b288b9226216525f1268f9337201725b2262f92e81fe4246126cd91d21f7624c025bd913e1f0b2440255191ad1e91230025e690361e2c23c1248f90cc1dce229524c58f641d79225b243a8ff81c2b222024a88ea81ce321d823a58d4a1c9b219623338d1a1c50213723fa8cac1b0121ef22298c571ba1204222f78b171b61207f21c98aa91a20202f21608a6d1afa1f1621268a911a0120ff20498a221ab31f1f21a78aec1ad51f4121dc88ec1ad51f4121dc880000e81b232100000000e81b23210000ad2fa93393341aa38631ac35ba3668a429331a375138659e7720c42096212016bb0f0000c2050e0500000000000000000000000000000000e4292d2c5e2d1c2200335c36db37972a88321e374238b028403063344c35b221472ed4320e34351d6e2dea312833ee16052d8a31ae32200d652cf93010329c95f22b91309e319399222c78306631039d942def309d313aa24d300b32773246a74b319932c83227a98031a432c232e1a9a13190328d3260aaba3181326c32abaad731743258322cabe73179325432a1abfe317b324c32efab0c327e323e3232ac273285322c325eac1d3266320e3289ac4b3180313c31daabd129a82c412dbba075242f297c2a6593e123a828102a0a8f81237728cc294491972203282a294f9238222d27a628bf929d2184264128ce92ca20ea25cd276b923c204825e626ac913b20f5246826ab911820cc2431267d91e01f7f24da2546912d1f1f246c25cf909b1e922307250190e41d0623b324248f931db6227224788f281d5a223424e88ec21c0622ef23c58d911cae218f23898d461c622131232f8d491c1c21ce22328df21bc7208622d18c531b7520d821f28bdb1a23203e21908a721af71f2f215889a11afe1f0f218089dd198c1f2e21dd88bd1a951f1521bb88bd1a951f1521bb880000fc1c262100000000fc1c26210000e72e5533643481a17030db34d53515a35e32a236113878a088209c21642137160c15000000008f0dac0c00000000fe04000000000000000091293b2c8e2de2203f32d8356537e228a1315336853701273d2f19340b35c621e92d9d320134e71c232dbb31f4328e16b12c4f317232ca8c272cd430ea314d95a22b723076316298122b1130fe30de99922bfa2fbc308f9d6c2e0531a4319ca4e7305b329b32eda8aa31c832dc326aaad831b532bf32feaae431b0329f326dab0832b4328932fcab2532bf32843244ac4432c732843272ac5d32d0327c32b8ac6632d4327b32d9ac6e32cf325e3214adb5310032af3182aca82ab92ca32de7a27b25bb28222ac599e3239a28d729479460237228ba2900949c22fd271e29019409220b2790280b94fe21bb26552865948d214a260e281394ea20c625702736935d206125f62668923b20042577263692fc1fa024ea255f927a1f4a2484257192111fcd230d251692891e03239e2437910a1e822251246f90881d25221724698fdd1cdb21d023e68d681ca0217323578d0a1c5c212323628c9e1bfd207d22228c571b8c20dd21f78bee1a6020a921848ba91a30207121608a771a0f2048215d898b1ae71f17216e89b219791ffa20b9883f1afa1e83202f893f1afa1e83202f890000011ca02000000000011ca02000005e2e0b3342347da13d30e034e03538a2e5317d36003853a4f51e021f7d20c7010000000000000000000000000000000000000000000000004429c72bf82c2021ea31d835533760296b318436e0376f27152f1834fb34a621722d6632ad33371dbd2c7831b9323c18652c163141327d0c0d2cb130c13134927a2b4c303a31ae96b92aca2fc730b8971d2a1e2f6530a19aaf2b632f6b304aa0162f14317731aba65b317d328b3269aa1632d132b13208ac3032e932c3324bac4f32f332c33294ac7032fe32bc32c7ac8f320a33b432f8aca7320933ab3241adae321133be327dadce322033a332eaad42326232033271adcb2bcc2c342d8aa4c3245329a72ac69589239328f82936934a236528ab296b94e82227285029309456228c27de28ae939d21f026812886930f2154263328c892be20f025d0275b92872098253027a5925720292596265f920120c6242326e091641f8524de25e691e11e3e2484257d919f1ef6233b254791651e8a23fc248291e01d2823b924b0907d1daf226f2407900a1d3c223924658fa51cb821cb23398e331c21211c23178d131b76201c22ad8baa1a27207021618a781af21f3921318a5b1ad81f1b214589801ac71fee206589dc194f1fe720bb86631a0d1fa7207c88631a0d1fa7207c880000f71b972000000000f71b97200000242e1d3356344aa14d30e734f53541a46b313e36c63791a29f1d631dc21f190e00000000b10b000000000000000000000000000000000000f5286a2bbe2c82208e31bc353337b2280f315436bf379e26d82ef933df3496203e2d50329a33051a7f2c52318132970c3b2cda30f7316695de2b8a3093310797102b2b3023310e98322a782f92301e97b229da2e42308b968629812e02309598412bfe2e1b300da0cd2f133151314ba8e831d032c33201ac773229330633b1acac32393303330eadd0325433043361adf33268330d33b5ad05336b331033e1ad1c3377330b332eae4a3388330933b0ae9632bd32523240ae8e2ad02c442dd8a36a240b293b2a7b963224b7280f2a1695a8237c28a929a494f82233284429ac948722f12724296094e7214f27d328e9931d2174263528da92d220172602287592b520ac257e27e89295202825b6264f935920d1246026ef921020932431260093b61f652409262692191f2d24c425aa91341e8d2312258d90921dd6227a24778f751d5f22432401909e1d302214241f90bf1dfe21fd2338907e1d9b21792308909f1cf1207922318e1a1ca2201b22fa8cdb1a77205e22708b3a1ba5208822eb8abe1b93207822338c6818f41f2622f083541b02207f213588541b02207f2135880000511ce02000000000511ce0200000af2df63241342ca0c42fe434f73531a2ea3008369537e69ea51d971d921f910f290a00002c076d0100000000000000000000000000000000aa28182b882c671e1a316f35f8365926ba3025369337fa24332eb433d2342720e22c0e327f339c19712c3c317632898c202cb230c53144957c2b4e304a314d98992ad52fd9309497f3293d2f7c302d98ac29d52e4230f79755297d2e1f307c970629072e9c2f7499c92a382e442f70a049305531be3189a96a322333ed3210adf4328d334833b6ad2b33983348331eae5d33b533543385ae7933cc335d33dbae9933d9336a3336afd53308348733cfaf9c32cc32563297ae6e29382ca82c26a21b242b29af2a06963224b828482ab196b0236d28ed29a994fa222f28ac29ad943022c82762292594eb217127f1285894ae2126279b282b9473218b26342858942221be25852718949e205e2528275e9357201025c126ec920520af2445266a92811f5224d6258291f91e172470251e91761eb3231925be90e11d2a23bf24e18f8a1dd52277246d8f221d78223724e18ea41c0a22f523388e571ca3216623438df31b1a21a122508c581ba8200d22f88bbf1a4620a621758a701a10206a215789461afb1f3b213489d9198d1f3c21da888c1ab71fef21398d8c1ab71fef21398dbc289a2afb2b3b14bc289a2afb2b3b148e27812ab22ac0922a2f88349635cca0a330e6357b37a0a1301cbe1dda1ce1890415000000009a81cc0200000000000000000000000000008d28252bb82c1e1feb304735c436b0276c30fa3555373925de2d8533aa34dd1f832cd33136332f190e2c11315732248c8b2ba330d631be96fd2a4d306c31e7988d2ae12ffa301b9b2b2a1a2f6d307a9bac29802e0830e19a2929292eaa2f9999cc28b62d102f97986028482ddb2ebf98482ad42dc92e4fa05e305d317f317baae2329e336133fcad8d3304349d33ceaec7330c34ae3361afe2331f34c433ddaf0d34163484332bb02a342c34bc337cb015325d32113242ae0c28362b232c32a046245b29de2ad1964624cf28442a469628249a28f829a19691235328902985969422eb270729409500227327bf282b959421ed26a128cf941e2173266a286894e920fe25fd273b94922088254927e09338203c25f926459323200d25b42621930620c2244a26ee92821f6a24d3257792bd1ee7232b256091db1dd4228a24ac90441d41223224bb8f131dd9210a24cc8eff1cb621c623b28ea51ca1218a23a28d691c6a212f23c98c241c1321c4227e8cf11bcd2029224f8c921b8e20ce213f8bfb1a4a208421af8a5c1ae91f1a21168a361b5b1fa020fb89361b5b1fa020fb897a286c2acf2b6e177a286c2acf2b6e1722275e2a9a2a6092ad2e70347e353e9f6830de357a37c8a00c1ca51e9a1c08010b16000000008e06601000000000890100000000000000002928412bc72c2d1d733014358736ad260830a835e4360425432d283388340d1f502c9831fe32f418bc2bdc300732e60b4f2b81308f31aa94c52a18301431c0983c2a7d2fb630c39aaa29e02e4f30de9a6629522ed52f8c9ae628db2d612f51998b28832de12eed982928152d6b2ef797c027892cc12d34981529e92cd42da69eb52fbd30db30f7a9f7326c3307339dae08343134cd3315b02e344e34ff3380b04c344734ca33c3b035343234bc3300b17d30ca30ba3055ac2525f229d32bbb9af52315298b2a9d93fb23e2285d2ad6946f23ad28152a8294112365289e293095862217283e2934952d22be27eb28ed94e6211f279028b594282164261f287194d5200d26cc272a948820c1256d27cf934e206925fe266a930e2001257b26fd925d1f9a24f4255892bc1e432482255f91481ef723202503910e1e6523cd24d490e71dfb228624b690a31da1224b247f90901d36220d247090211dbc219623878fa11c5821f722348e451c14218e222d8dfa1bc4203f22538c6a1b8f202222198b2a1b5c20d021dc8a4e1a6d1f02213b893c1bfb1f6c21638c3c1bfb1f6c21638c0428152a012b5b180428152a012b5b18b826492a632a0192222e61347135a79edf2f92352d37c6a0a21b7f1f4e1cf9001618000000006f086615000000002b050000000000000000e227132bc82c49193930d8344636bc22be2f8f35c4362d22ea2cf3326734f61ddb2b5531ab3283192e2bae30cf318011b32a62306b314694452a0e3002316798cf29582f9630909947298e2e1830679a1929092e9b2fd59ae828ce2d762f339bb5287d2d0f2fe89a4d28132d662e509ab327a02cd62d29991927632c9e2db3970128502c292deb9b2e2d6b2ee12e17a8c4315c322432efad053413349f3396b04d343734d33352b1e4314232e631d0ae3e2b392dab2d42a59f23f428bf2a14962c241d29882a0f956423a6281e2a6d95a2238e28072a16964e236628d029d49515234228b529a695d4220c287129e29579227027ff2893959521d826a2282a954121622635288694e320e325b32785948f207725252738942820f7248c2629938b1f8224f8257f92111f2e2487251692a31eae231b25b7912d1e2023b9245291bd1da82260249490491d30221624c18fc01cbe2193235d8e511c56210f233c8d441cff20b822a08c851ce6205722e78c361c7d20fe21928cf61b5720ce219e8b971b3820a5214b8a131b1f206e21c58a651b571fcb20038c651b571fcb20038c8327a8298a2a8e188327a8298a2a8e186a261e2a462a8d869c2d31343e35169e792f94353d370da0821b8b1f3e1cca848a16000000001602321300000000e70300000000000000005f27032bb52c7818f42fb9342436da22342f5c358536aa227d2ca6324134041e662b22317a32231aeb2a9730c1316a14722a55306631958ae229b22fcb3082937f29f92e5f30b7973329912e1e30fa9815291c2e9e2fd09ae128a22dff2ec89b8728292d762ecd9b2828cb2c122e299b9227812ca62d0a9a5927692c7d2d659935271f2c302dd4983026732bb22c2598bf27032cd72c8d9e9f2b872d442e04a6842c202e7c2e37a8a629a92c392dd7a38425292adc2bdd9a56241529542b42953d243929ae2a23952e24df28542aab960324ad28042a679687236d28b8297c962423332873299c96da22f5273729c79686228e270a29de9641221c27c5289696b221742643280096ee20e3259b27e1949e2091253127929443203525c026e393f81fc32443265f93851f5024be257b921e1f03244c2522927f1e6e23eb249991fd1dd3228a24c7906e1d532239245590121dce21b4230b90ed1c5f2128233b8f931c0021c322b78e521cbe208922cb8de11b6e200f22478d891b3920b721168c731b0d207621848c571a8a1f7e21128a651b821f0022038c651b821f0022038c0f200c1d4e1d2d890f200c1d4e1d2d898b26e429782a8493252d19342c35949dec2e79351c37829f971be81f021cc8869d17000000007c806d170000000079800000000000000000fb26322bce2c3b18372f8e34f0350724a62e1a3536362722342c49320c34f91a3d2bed303a32648bbb2a6e3086314b94372a1d3024312397bb29772faa3006985529dd2e51306c98f528562eee2f1d989d28cb2d492fa7973928582db42e0197da27eb2c2c2e849657279c2cc62d1696e0264b2c6a2db4957e26092c1c2d37963c26af2bec2cc396d725372ba22c5696d325de2a522cce975b25a32a432c2d973f266c2a232c7c9c2e25de29a72b75999a2445290d2bfe94af2458292e2bad952e241929a12a9a950624dd288c2a6495df23b7285a2a46959f238d28262a149636235628da293696e7221d28662963969c22cc2718298a96cf211427b02860952d2198266a281f95e72008260b28d994b22064253b27a5946220fd249e265694ec1f8c243026d693cf1e2a249c254d92551e882312257591ee1df122a924bb90c01d74224c243890531d07220324228fdb1cb221ab23828e8c1c65216e23838d891c14210923808da61cdf20a4223a8ec61caa202b22018fe11c8420db218a8eb71c6f208f21ec8e241c1e205c21ed8b871bc01f34213f8a871bc01f34213f8aa42214226321a990a42214226321a9903a28542b4f2bef95282d64346f353d9b812e89353237fb94bc1c7321c21e3b082e1b00000000f409ac190000000084060e133413e50893016b26842bff2cf616b22e3c348c359f22292eb434ae354e210b2ced31b1332915362bcd3018327196942a483062318f97022af02ff83038988d29462f903051992629aa2e35309599bd28172ea02fbe996128902d082f4f991a28302d972e7f99cf27be2cfd2dbb998127712c972dfc991e272c2c492d229aa326e92b0f2db7992826762bd42c8598e9252b2ba82c2a979a25d32a742c14967e25922a492c8e9456253a2a102c6d94e024d029a92b4a9581249429402b799354247d29102b2f933c244829bd2a0d9412240f29862a6b94f123ec28582ad1948623ae28142a0a9537237928d8294b95da224628922977958e22072858293a9511226627f4283a956d21c3267a28ad94dd200326e42780946a203925f4261694f31fc8244d26d9928c1f7c24f225fc92e81e2e248525f391851ea4230c259d910b1e2623c124d290c31dc1226f2498905e1d42221f24e18f081dd421a523628f931c56210023b78e5a1ccc204122d58d231c6b20b8218b8ddc1b33206e21448d8a1b0d203e21928c7f1b08201e218b8c031bad1f2c21b68ae21bf31f2d218b8be21bf31f2d218b8b902173245325cb94902173245325cb947222db2353252c92a92db434db356b9d782e9c3537375e9d581acd1b161a4a87a7081018000043804514f01500005d8100000000000000006926e329942b86197a2e6d34c3357124b12dee341a361523172bd1316b33341dd7294830703138159729b22fdd3048902f29732fb030f08ff428122f6f306d94d228912e2c30c4969628182eca2f64984f288f2d162f39990428032d6f2ee5999a27932ce32d119a1227532c7d2d8b9abd26162c352d3c9a5226c32bf42cd9990326672bb62c9099c925222b922cfc988225e52a702c65981625732a2e2cd196b324eb29ae2bb39577249a292d2bd89440246429e82a0d9336243d29bc2afd920f240b29842aa990ba23eb284a2a6d919623d128352a43931823ab281a2ab2930f239b28032a4894bd227d28012af29489223728b329a195a7216027e9283b950b21ab267328fd94ba203f264328ad948020ad25c627bc9434202125e8262894bb1f7824f725a593f21ebb2349256d92351e2c23ed2458910a1eeb22bb246f90d31d992272244690931d562236241790661d0922d123ec8f101d92213d236e8f8c1c1721af22178e571cc9205622d18d501c7820fb21c78d3b1c3e20c121ab8d111c05204121ee8c331b3f1ffc20be8d861b3d1fc7200a8d861b3d1fc7200a8df32297247d248b9af32297247d248b9a012657284329bf95c92c023414356a9ee82d3d35d636ea9f521ac41e4a1cce00401400000000110472144c0e00006b010000000000000000fb25302a162cf6143f2e5734b335f922c72deb3417363123e32ab3314a337e1d6c290e3029313a163129132f8230a092ed28e52e6130a995d928c32e4f30a498bf288a2e293026997e282b2ed52f059a4528752dfe2ed09a1f28122d7e2ea19bcb27ba2c172e1a9c39276a2cb02d9b9bd1261c2c552d069c5c26a22bfc2c1a9bff25302bb12cb29aa125c22a702c499a4d255a2a342c3e99cd24ed29d32b0b97762484294c2b699842244c29f92a10931e242829c12a418dfa2316299c2a1c8acb230029852af889b423fc28872ae6897723ed28792ac38c5523e3286f2a36906623d828662a15933823c1284d2ac29528239528f6298997aa222b286029719771212027982814969420f625b4271d9568203a25e626ec94fd1fcb244f2634948b1f6a24da25fb92021f10245d250a92781e8923f424bf90071e0e23af246c90981d8a2267247f8f2f1de121d323f38ea41c2d21ca22388e5f1cc4204f22dc8d541c90200422cd8d5c1c7320dd21658e591c5520b421628e6b1c41209921eb8d4e1c3c207421de8e871bde1f83213f8a321b7f1f2821ce8b321b7f1f2821ce8b000045230a240000000045230a240000252946305b31179d502cb833cd34549e9c2d06357536cd9ed11c931e211b2686ba1500000000d401cf0e000000006a010000000000000000d725722a3c2c97153a2e4134a135f4229b2dd834f9354222a52a5f31c432741cf428562fb730960f9e28472ef62f128f4528ec2d7a2f16972828c82d572fa49c7028342ee02ff2993927642d0e2fc3993727c12c422e239b15279f2cd02d759bcd26802ca92d299b6426632c972d239b1126272c5a2dc79ab8259f2bd82c639acd247c2a492cc0984d247629042bdc960924ee28502ae4943924ee28512a0b941f24c6281b2ad692c3238828032a7192c2237d28f929709297238d281c2a5491cb23c028522afa8ce4231c29c92a098d18248329452b3a8d1e24ac29942b5c8f0924a629692bb292ad234929d12a9d96ae228f28ee29089785218127fd282996f820832655288c95a620e825da273195ae205b2525273a957e20df245a2604951d2036248a255594261f882324252892ec1dda22cb245890751d59227924508f1d1dfb213024338e281dc221d923408e061d80215c23bb8ebc1c2521d022bd8d431cdc2063222b8df21b81202722d18c5f1b22200022008c311bde1faa21cd8b3d1ba41f2c21da8b511a191f01210c8a9b1ac91ebf2096879b1ac91ebf2096870000c71c471c00000000c71c471c0000be278d2ef42f149c672a98311a334a9c2f2eab351637219d5c2eda354137ae99e52e5336e337289a3130b337e7385a99893043386039f196b52ff3365c38eb18bc2eeb3570371520682cc433df341420f628e12fee3061193c28102ede2f7c0e02285a2de42e9b945827e82c4a2e1796e225362c442d62960b2450282629ef95d8233a28e7292198c2239829672b55988c24422a122c5e99ce24ab29972b5e9990247f290d2bcd984f244729012b439818243829d82a0e973a243b29c82aaa958523f628822a33933123b0280c2af8918b2252289d296e91b42246287d2990912b236c28af2908913d2350289a2928902423462898298e8c5e236128a929c3037323cd282d2aa80ed223a529382bfd0ee724962a412c018509259b2a682cd2946324472a0f2c8f977b236f29db2a2d98bc2114282e298097d0200226cf279a9693202225a826b195e91f7124f2256b949c1e0124a9258a925e1e78235e25e5913c1ece22b1245f91f61d1a2203242291a11db921a7237d904d1d762170233b902d1d3f2165232190331d3021182326908c1de82079226d90b81c8620f421ed8efb1b3a209221588dd01b082044213c8d781bd91f1621018d9d1bc01fef20978d611b7b1ff820798c251b241fb220c98c251b241fb220c98c0000d71e0e2000000000d71e0e2000008124862b7e2c9b993d28982fd430319cfa2a2632b333929b6d2c033412351699bb2c7434a8350a964e2eb7354737708e292f7a3604384f8fc12c5e3455353f18ce2a1132b033d117ab28912fe4305d153828072e982f63115327332d882e9c8d6b26962cda2d5f932026442c6d2d4d94ae25982bd72c70952625712a152c95957b243f29b62a01964e24c728142ade9616247b28b52900969a23f527f3281895b722ca27ed286d921f225d27a22814918a22d62626281893fb21c02618287d921d22dd263c286993b5221a2797281194e32207279c289d942023262797283b95f322e5268e288b95e8221827a92811955a220027a5281492bf224927b12899910723fd27192996031a236029ed2a4e1434252d2c672df916d326252da62eaa954d252d2c602d9c9b5e22ea28342afb9849217026492878988f202725d0261795aa1f7824c92518934a1f082442254892b51e6223f424c791371eba229524f590c91d37224c243f90581dcb211024298f181d8521ba23d38ed71c37214c23de8d951cef20e5228f8d7d1ca4208722718d471c6d203322308d451c3b20f421a18c151c1120b0216d8c9b1bf91f8921208c571bc31f6121078b1d1b881f3621ce8a3f1a281f2721fa89c21ac11ea320778ac21ac11ea320778a0000a11b9b1c00000000a11b9b1c00007526482c5b2dd89c2b274c2ee82fb799712818300b3140989129063151321a93f2292e316e328d108126202eab2f26102e23532b8b2caa036528d92e3e30bb8e7e28722fc8300394dc27472e0c3085957e27432dbf2e10985a27972cda2ded98c1263b2c592df5981426dd2bf12c76988825322b822cb496df244d2af22b499520244d29be2ad89289236b28a12940926023162846291e923423f9272829d0931a23ae27fb284e94f8226027c8283994e3223127a0289d947d22f9266c28de933422c8263d288693f921862617283e93a6213026e0279293e0212c26e8274f943c221826e427fa94f421d925ac27c094a02197258127d99468215b256727509439212225ef26ab93f52069249c26a5922923d52a2d2ca883b32a6731f9328f995c255b2c652d5c9c4320b5245a2693959c1f7b2395250a93d31e3223ff245092fe1e1c23f8240692031fd422d3240a929c1e9d22a3244591971e69226324d690001e03221f246790a01da621bb238a8f341d4c2131234f8e0c1df020b422c38ea51ca2205922398e6e1c7d201922f08d321c5f20de21168d011c3720b421db8ca91b10209321288c5b1bd21f5c21fb8b3e1b901f2521ee8a531b371fd220f28bdd1acf1eae20298c681bbc1e4520258a681bbc1e4520258a00006119691a000000006119691a00006d24382b862c10975925bd2ce82d70946c26d02d3b2f609347277d2e09306e872c27512efe2f7e0d9526992dfc2e0a8d8826f42c382e1697dc26df2c3f2e7999be26d02c282ecf9943267a2ca82dff98ee251f2c342df297d725cc2bff2c4998be25622bc62c51997625d12a612c0e990025432ad82b4f988f24ac29112b469711241929652af8956d239d28d4297495ed223d285e2915959d22ed270029da9467228127cb281b95652225278f281a955922d626652878953e229a263a286095092245260728d194d2212926cd2745947c21fd25a02759932f21dc258e2749922521bc257e273d92222192255927399222216b253327399220214e251127379204213925f226159220213625e02637926c204024b8255d91cb16ed1cfa1f1e882d15361b351def86481d1a215422138ffe1d3622252404902d1e6b2247242390391e542240242b90f31d24221924f98fb41dea21de23a48fa91dac219423958fb81d8e216e23aa8faf1d6c214f239d8f8c1d4f213f236f8f441d2c212a230f8f031d05210423b78ebe1ccf20d2225b8e481c93206c22318db01b1a20ed212b8c0e1b811f7821a78b9e1a451f1c212d8b991a2a1fe220518ab11a291fa820428b401afd1ea9203089471aeb1e71203589471aeb1e7120358900003b1d221e000000003b1d221e00009024372a932b1d967d24a72bb92c7293e4243a2c372d9e9114258c2cb82dc78b7225b52cf22d90858f259a2cde2d188f8b255e2c7e2d5d928c25032c142d99945f25912bc62cd49539252b2b892c56960625bf2a472c1796cc24622a0b2c6d968e24072aa82b86955924af293a2bb79420245b29d02a7a94e1230a29682a46946d23b428042a819422236228a129c894d5221f285a290495b222d3271c295795c2228b27f228d295b7223527c2283796bc22f7269f283c96b822ac267128379663225f264528e99504221d261b28cc949421d325d52773942a21a1258827ec92cc20662543276d92aa2053251f27a891a8203225f6260d919d202025dc2601918b20f6249e26ed906820d0247726c8907720a5242a266991f21e2723b82436905b1a991fe720b58b9018501e42208889941cd1207e22238e7f1ebe210d24c490ba1ecf2115245e918f1ecf2101243b91181eb221ca23dc90af1d8a2193232c90551d4e213223d38f1c1d0121d222808f181db32076227a8f0d1d84203222698fd21c6220f821758e9f1c3820b721318e461c17208821ba8de71ba91f3a21ca8c341b341fee205e8cce1ae11eac20208c921a9a1e7e20218bb61aa21e5b20478b381a721e6b20f489dc19191e2320dc88dc19191e2320dc88000000000000000000003b1d221e00009024372a932b1d967d24a72bb92c7293e4243a2c372d9e9114258c2cb82dc78b7225b52cf22d90858f259a2cde2d188f8b255e2c7e2d5d928c25032c142d99945f25912bc62cd49539252b2b892c56960625bf2a472c1796cc24622a0b2c6d968e24072aa82b86955924af293a2bb79420245b29d02a7a94e1230a29682a46946d23b428042a819422236228a129c894d5221f285a290495b222d3271c295795c2228b27f228d295b7223527c2283796bc22f7269f283c96b822ac267128379663225f264528e99504221d261b28cc949421d325d52773942a21a1258827ec92cc20662543276d92aa2053251f27a891a8203225f6260d919d202025dc2601918b20f6249e26ed906820d0247726c8907720a5242a266991f21e2723b82436905b1a991fe720b58b9018501e42208889941cd1207e22238e7f1ebe210d24c490ba1ecf2115245e918f1ecf2101243b91181eb221ca23dc90af1d8a2193232c90551d4e213223d38f1c1d0121d222808f181db32076227a8f0d1d84203222698fd21c6220f821758e9f1c3820b721318e461c17208821ba8de71ba91f3a21ca8c341b341fee205e8cce1ae11eac20208c921a9a1e7e20218bb61aa21e5b20478b381a721e6b20f489dc19191e2320dc88000000000000000000000000000000002c2a6a2e6b2fa0a0d82cc830913144a32d2f7533733427a594328b37973858a79028932bd12b399c0000000000000000000000000000000000000000000000000000b71a21220000812c17304931309f29319d35453648a08d2ee832cd33999caf2ca0308731c59b032d49302f31149e242ec931bc32e6a075306f342935fba41c30fa32aa3360a56a312235b23515a7a4321f37333858a865308632203378a5cc298d2dfc2d8c99422470261b2759840520c624bb262886e31f33257d2608894b2000248125ac8bfa1cdf22b523d083dc253126aa267d8c1330a82fcb2ea1a614310231973044a9a93049314b31afa8de2d5531f53136a48a2bf930f531759fb021422a402be694161fea24d5261b92341f4b2490253592eb1d0724402519912e1eba230b25ee90141e7323eb24d990071e6023da24cf907a1dfd229324b8904e1dc22266249290be1c43221f241690a41cf321c923fe8f861c9c214e23cc8f421c4c21f322568f121c1021a222048f951bd8205f22888e441bad203022428ef61a8c200b228e8da71a6b20d7214e8d521a42209b21a48c651a15205221b18c611acc1f0e21468c6c1a701fd7204e8c961a291f8d20698c1c1a081f6f20188cf819ee1e4920008c43198f1e4520618acc1a911e1c204a8e00000000000000002c2a6a2e6b2fa0a02c2a6a2e6b2fa0a0d82cc830913144a32d2f7533733427a594328b37973858a79028932bd12b399c0000000000000000000000000000000000000000000000000000b71a21220000812c17304931309f29319d35453648a08d2ee832cd33999caf2ca0308731c59b032d49302f31149e242ec931bc32e6a075306f342935fba41c30fa32aa3360a56a312235b23515a7a4321f37333858a865308632203378a5cc298d2dfc2d8c99422470261b2759840520c624bb262886e31f33257d2608894b2000248125ac8bfa1cdf22b523d083dc253126aa267d8c1330a82fcb2ea1a614310231973044a9a93049314b31afa8de2d5531f53136a48a2bf930f531759fb021422a402be694161fea24d5261b92341f4b2490253592eb1d0724402519912e1eba230b25ee90141e7323eb24d990071e6023da24cf907a1dfd229324b8904e1dc22266249290be1c43221f241690a41cf321c923fe8f861c9c214e23cc8f421c4c21f322568f121c1021a222048f951bd8205f22888e441bad203022428ef61a8c200b228e8da71a6b20d7214e8d521a42209b21a48c651a15205221b18c611acc1f0e21468c6c1a701fd7204e8c961a291f8d20698c1c1a081f6f20188cf819ee1e4920008c43198f1e4520618acc1a911e1c204a8ecc1a911e1c204a8e3c2c4c30f53014a23c2c4c30f53014a2e72ed132f1337fa6963162354b369da90c34ce379d388ea913271529fd29881d871800000000271300000000000000000000000000000000c80cca180000b108c72c542ed32f90250a34c5376838389f743082344835409ef22d10321f33ee9c3f2d9a31a632069d0d2e5f327f3371a0832f4e33373432a49a30ff339834e6a608316534ed34dea74e31ba34513526a8c930b5333a34dea6522a9c2f95303c9cd425132b492c35916b23472849297f140a236a2883298416ad221f28d728e1171d25ab283229631967305730e92f49a8d2301d31de309da9f8308e31603178a9d730c031b13154a9802ea630f23053a649285d2d742e3299a823eb29542be903d7215d278628738b5421f625a427c7918d2072250c27ef900820ec2464266791a01f9a2404261592d11e332492257091141ea1230c253c91ad1d1523a924e490351dc52273247c90ff1c7b225224f98fca1c2a222424a48f8d1ce521ee23ae8e661cb9219f23748e4b1c762142234d8e261c3a21ef22168e0f1c0a21ac22f48dd61be6207822c08d7a1b99203a227d8db31a4620cf21eb8c461aeb1f4421348cd1199c1f0e21cc8bcd19581fda20088b8f191a1f9d20be8a9e190d1f6820178a2b19961e59209b89af19771e46209d8baf19771e46209d8b832cd62f613030a2832cd62f613030a2d12fdf3360349ba76b32e135d1363faab2343338e23824aa5428d029ae2a371e820d00000000fe07000000000000000000000000000000008018e41c53168610592df62e5130f92181340a388838bf9d1d310935dd353ea0a52ed1320a345c9e922d1b323a330b9e852d06322b33669f412e4c3260332fa202300a33033480a5b030a033433454a7f030c9333e342da8033192331a348ea8ce30c0321c3337a8bc25052b562c93983423fa28772a40183f245329972a2f1b0a24d628c729581b60242629bf291f1b6e275029062a2996a730e430a230b7a92f31e331b73188aa0231d131b43179aadd2e8930ab30fea726280f2cbe2c5e9cac24d6294d2b8f92432339285b290692ca227827bd288d943722d5266628f594a320c725f227ce9223204c2509271292e71ff8249726cd913a1f8224ff25c491d71e3c247d257591491ecd23f9240491bb1d0f238d249390501da52248243d90041d412214240090b11cfa21d2237c8f741cb12172231a8f3a1c66211223bf8e0d1c1921be22768ed51bdf206d223f8ed21ba72014223d8e811b6b20c021fc8d1f1b20206c213a8da21ad21f2821de8c7a1a9f1ffe20578c421a7e1fe220968b371a841fb320898b5319f81ea2201989fe19d31e6f20f888fe19d31e6f20f888892c11308e3039a2892c11308e3039a2d72f09347a34a1a73c32d935c736dea94134ef37a33861aa5228b9298d2a081f000000000000000000000000000000000000000000000000ae18411c58133e133c2d2c2f8330d922f333ae374538129d12312435ef35daa0e52e19334034999e902d01323433539d182db831dc32d39ef32c78318c32e69f032ed331cf32b7a2043098326a3347a6b6302d33d43322a8f13033337d33cfa81c31ca3217334ca90d313e32763266a92a31de31c831d9a94a31ba31a13128aa4c31bd31923182aa5131c8318e31b3aa5731d1319631e6aa5d31d9319f311aab5a31e431aa3142ab4731d13198317eabd22f86307a304da99828132c952c029e87242b29612a7e9588236e28a1293593ec221928462982934e225f27b528a5937821b7267d285493b720cc256527519254203e25b526e7920720d72436266d92901f68249f250992f11e08241d258991211e8823d224e4909c1d252397247990531dcf225e243f90281da02242241d90fe1c4e221424f78fc41c0122d2239a8f9d1cb22175235c8f7c1c66212723ba8f601c1721ca228a8f261cbe207922258ffa1b702004225c8e4f1b342072215d8d801aef1f16215b8c121ac91fff205c8b501acd1fdf20a78b5a19551fce20ce89201adf1e89206d8b201adf1e89206d8b0000cc1fd32000000000cc1fd3200000a62f9633653439a6c831b435ae3671a991335e375e386fa921289b296a2ab81e0000000000000000000000000000000000000000000000001d19a81bd6139613f72c1a2f843033243133423710385793cf300335ce3572a2a92eea322a3409a08a2df9313933b79ee42c7231ae328e9e612c1e3131326d9e9e2c0e31153292a05b2e92317632c4a461307532113343a8fb30d4320d3353a93b31d0321133c2a948318d32a33226aa5b3160326c3269aa6c312a322232d5aa7a311332f33141ab95311332e13192aba4311c32e33101aca7311832d0311aacab311032c73134ac9d31f731ae3158ac3130983073305aaaef28272ca22c54a039258729e62a80995d24b028072a0998862345287029f696d222c627ce28e095c821c5264928fb940a21b125d1275794c5203e25ff261c9412201025ba260493a91fc524452699925e1f4b2484255992c71ecb230e25d791391e5523d824c291f51d0423a5248391a31daa227c24db90451d4d2243248a90c51cf52105241c90851cbd21a023358f361c78216a232e8ef91b25211d23d98d671bd620da226f8dfa1a5c20fc21ad8c981a0c201a216b8c301abe1fda20818b301aaa1feb20818b591ad01fe120b38bf819801f09213c8bef1ab11f2821c089ef1ab11f2821c08900001f20fd20000000001f20fd200000272f48333d3498a5293159354936b1a8dc3202372e38b5a87528f229a52a201c000000000000000000000000000000000000000000000000f418b41c0c1cd210cb2c722fcc305b216732c1368e378a127930c1347f356da13e2ea5320434929f4c2dcc310533c69fd32c5b317232159f5f2ce530e931889f092ca030a431789f5d2c96308e31e0a04a2e3331d831eba47d3030329a32a7a831319132c6320caa57319832ad328faa8131783274321cab9e31583244329eabb1314b322d320bacc1314f32293245acd53153321d326bacdc3154320e3289acf23158320b32caace33153321e32d6acb03031310c318dab0429412cd52cb8a090243929632a479719249d281b2a7e9592236528bb291295bf2203282029859412223e27b028d894a921942648288494d820e325c8272c9428204025e42629932720e12452262893eb1fa1240426d2927d1f4c249f257392d31ed4232a25e1914d1e4623d2240791a81dcb22832483904c1d82224c243990e21c37221624ca8fa31ce421c523668f671c95216b23068f1f1c45210023938e251c03219c229d8eb11bb1204922a58d1d1b6020b321398dbf1a1e203e21858c921a03203021f88bb41aff1f06217e8ccf19641f1621d288811a501fe3200e8b811a501fe3200e8b00005d204b21000000005d204b210000e02e19332c34d0a545309c3478357ea71f327336bb3797a882285c2ac22a07940000000000000000000000000000000000000000000000003719a61dce1fe9107d2cbb2f233128228631fe35c036ef1cf12f7e343a358f9ce52d8732e633a49d0e2dae31dc327b9d972c38315032919d182cbe30c3317d9d7f2b59305131809d192b0530f0301d9e1c2c2330e0301da1e12e3931d5317aa6f13055329332e9a98431b232c6324eabb43198329a32eaabc5318732783230ace13188325f3274acfc3191325732baac1b329e325832ebac2b32a032553211ad4132ad32623256ad3f32a832403288addb304031fa304dacc328cd2b692cf0a07f24d228112a7298b8239928c5292c956f235c288c2975959222d62701293d95ed2106278528ba94c921b2265428fc948321402604281995e320ae255227859447203a25cf26ea93ff1fe02450266693881f8224e325f892231f382471250f93c61e9c23ed24b392441ee8228b24cc91c91d63224424fc90401d012205243090c01cbe21b923f88e651c89216223738e041c44211723e58db41bf8207622a88d501b8420d121e68ce61a5620a0219f8c7e1a1d205c21df8b471af31f3721d08a621acc1f0b21ed8ab4195e1f06217689641aef1e9a20ef8a641aef1e9a20ef8a00003220e520000000003220e52000000b2ed7320b34eba43530c734b035a6a7b3315f36b23700a963274a290c2ac79b0000000000000000000000000000000000000000000000008919141cc3182610312c132fa330b01e2f310636d6369e9a702f6134133509a0622d30328a33d79da42c6b31aa32a19d462c05312f32ba9ded2b9b30ae31d19d6a2b37302a31ea9da42aa52faf304c9d242a1f2f6630139e2d2cb62fa930cba27d2f383198315ca85231713297328dabe831b532a9327aac0c32c632a332aeac2932d032a332f6ac4332d732943224ad5f32da32893270ad6832cc327c32c6ad8132dc32913212ae9532fa328a325aaef23071315a3175ac55289b2b6f2c37a00f243929982a7a96df239828e529c7957a2367289b29f795e82223284e29829512227e27da283b959721f3268128d1942e21702632287694e4200426d62786948c20882522273594322014257626c493ba1fb124062627931f1f6924b8250b93b21e242464259f92901edd2321257d92561e7223e1244592d11d13239b246191781d9a224f240f91e41c1c220d248690771c7b216723b28fc81bd0209822358eca1a5320e2218d8cc61a332078211b8cbe1a07203e21508b701acb1ffc20fc8a711ab41fc520fd8a221a411fc6201789af1a451fc9208b89af1a451fc9208b890000cb1fa52000000000cb1fa5200000a92da732e3336da4ef2fa834953578a73a313336863780a65026b5288729d916000000000000000000000000000000000000000000000000d716c3170000340bdc2ba02e5d30861be530e435cf36a09d8a2f4734fe34f0a32e2dfe315c339a9f492c2e3150324a9e032cbc30c431609d852b70306e31099dcf2a1230ff308f9c032a502f7830079ca329bf2e2530d59aa629812e0530819cba2bf82e1b3088a2862fe2302c31fba8a8319032983260ac56320233d83234ad80320733c932a6ad9a321933c832f3adbc322833d2322daec9322d33e33271aef8325733f532d6aef2323533a93225af8830f330b83072acc426992aaa2bf09d5e2400293f2af7960024c428fc29e496bd238328a829aa961e232e283d2922965f22d5270e297d95ad213627b728e4941121752636285e94d0200826e727259493207c2537273c945a200125882607942420b6243a261994db1f87241326c593791f6024ea256493df1e202492255b92041e6a23e62491918c1dbd226b24c890771d5c223724b690951d2d220f242a91951de521d8232a912c1d67212d237590661cc0203122058fdf1b8720e321c78d611b72200c22f28c0f1b85201f22488c6a1b89201422f78c661a072058211f8ae91bf51e4320908ae91bf51e4320908a0000e51fc62000000000e51fc6200000742da932f03317a4612f9b348b353da6da3008365e37a8a62126a52872290a93000000000000000000000000000000000000000000000000b715e2150000a809532b5d2e39308b168630bd35a7365a9e972e1134ce346ba0c42ccd312933ff9e452c1c313e32d09e012ca030a731e69e322b37302e31339e642aab2fb930199dca29122f6230409c8f29b02e2f30149c5629562e0130419c1629e12d422fb59cab2a372e352f6da1c12fda301a31a1a9203278324d326dada5324c33113319aee532663317338cae0f336c33183309af23338a33253358af5f33a7334333b4af0b335a33c932ecaf4c2f29301530edaa4c250a2a612b249c2a243b29b52ab5971524cf284c2a4c98aa236e28db299497dc2216286829e9953122b1271b29bb95d6216a27db2866958521122782281b9542216a26172833951121bf257d270395a2205b25112795944b20f62499263f941b209b242b261094b81f4424c625a393f51e03245f2570925f1e81230625e691c81d0523ae24fb906d1da9226524ad90141d552226246090ac1cf721d923738f561c8a214723eb8edb1b0b219722c48d341ba5201322d38cd21a4f20cf21928c891a1f208f21ec8b6d1a0f204d21ca8b251ab31f3c21738b0d1be61fa621a08d0d1be61fa621a08d000095270327000000009527032700009f2b17311132f6a1d02ec134bb35faa57e30cc351737bca65c26212986297a990000000000000000000000000000000000000000000000003c1748170000320d042b532e3630261d273080356636d59d6d2e0e34cd34c4a2872ca4311b33a59ee02bf7303832c79d502b8c30b1315e9dd62a37304a31749d722ab52fdd308e9df729fe2e5a30859d6629562ed32fa79cdb28ec2d5c2fbf9b8a28762dd92ea99a6328092d592e8f9b9029432d382e59a0ab2e1730483044a9d5318a32673271ad0d33a7334f3308af7233d4335e33e6afb233fa33853344b0b433ce333b3374b040328532263254af522cbf2d192ed3a631245329e42ac09935242d29902a29983c24b428342a309813249628ec2908987223432876295d977122d7270129c896e4215d27bb2834966421d32690285595e9205e265528db94b520e125c327a8947a206e253127b79437202425e22670941420fc248a264b94de1fb32420262594431f4f24a825a5935e1e9b2302254d929a1d892261242f912a1d02221924c790001dbf21e9234f90dd1c9621a2233090801c7b215e232d8f651c47210323738e221c0721be228a8d091cd1204422688dbe1b9120d221308d081b47206f21b68cb51af01f2021118cfb1ad41f21213b8cfb1ad41f21213b8c0000a1271a2700000000a1271a270000442b0131ef31aea1322e96348a356fa52f30a935f63602a6f92511297e297b960000000000000000000000000000000000000000000000002f15bb16eb10fa02982a612e4b300d11ab2f46352236619dc52ddf33b534ff9e452c7a31e232b89d8e2bc830f231109d0a2b62306e312a9d9a2a0130f930d99c1c2a592fa030e09c8229bb2e3730659c3229352eb12f259cd128d42d532faf9b74287b2de72e8a9a1e280b2d532e85999e278e2c962d1a992d289b2ca82d329dd72c3e2ef52e56a7c2302f312631bfac7232f132a63225af01336233f5321bb05032b0326032b4aff22e07303930edaaa027d82a0c2ce89fa1233f29032b939684244e29a62a3497f723e328542adc966f239b28f5296896e3224a28742960965d2212282e29e395ff21b327e128ef95cc2108277628bc952821602614281995bf200826b827b1947820af254c27b59450205a25e1268b94fc1ff52462263494551f9124e1254193c21e34246a25af925d1ee0230c254b92371e6823c6242692081efd228624f791ab1d97224a249b91861d282208247791ec1c962174238e90401c1321b222c88eca1bc7202622b78d6b1b9020f721f88c281b82201a22578c201b5820dc21bb8b031a5b1fe120c289f51aa41f6521a98cf51aa41f6521a98c00003d27bf26000000003d27bf260000a92acb30b131fea0e42d8a348a35fba49d2f6835b93677a584251b2974294795000000000000000000000000000000000000000000000000bc14d1175d168d07372a332e3a30590a092f1735e735d69d512da8339734c59dd62b45319c32409c0a2b9730bb31449c7e2a463052315a9c1a2af82fec307a9caf292e2f7f30e59c3e297c2e0e30da9c0629fb2d8a2ff89cd728b12d402fc99c7928492dc02e6c9cef27d52c132ed59a33276f2c9d2dbe990c27412c702db9980627292c182d0d9a5d28402c3d2d3fa0ba2a4b2d042e4fa5662cd72d2f2e3ea8582b302d992d9fa6de27532b4d2c14a0ce2311298f2a399798244a29e82a54972024ec285b2a15989e23aa28262a89978f238128eb297a9739235c28bf292497e22234289c29ce966622d6273829549612224327c62864968a21bc267728d59537214f2615287e95dd20d92585271f9597206d25052720952820ef246026a494b41f7a24df250e94191f27246b257993981e97230425f192081eff22a724f7918f1d77224e248091f81cf621f12399908b1c87215523d38f661c3a21f522058f881c0721b422a78ee91ccf207a22958e4f1c8f202022c68d071c6720dc21e28cc41b4520b421b68c161b2b207d21af8b8e1b6f1fb620198c8e1b6f1fb620198c0000e1266d2600000000e1266d260000052a8a306b3152a0552d53344a3557a4512f7935d536c9a452251c298a29219700000000000000000000000000000000000000000000000063146918fc17d700fe292e2e3530e296a42e0135cf355b9e0e2d87338834c79e8b2b27317f320e9dcd2a8930af318e9c502a393044313b9cd1298a2fb630cc9b6729c92e4930ed9b1429632e0a300d9cee28ff2d8b2f3f9cb628842de62e0f9c5428142d5a2e019ce027ce2cff2d4a9b5927802ca52d549afa26492c4f2d039a8d26c92bf42c0f9a8e26742bca2c119a63264d2bc62c519a3926ea2a7b2cbe9be325442af42b6a9cd724e529b42b679981249529602bc39786244029e22acc971d241429752a9c970524d728332a7097cc239b28ee29b69766236328b229ca97112330286c29e497ce22d82719293c989d227227e8281d984222df2695281898cb214b261b2894971721d4256a275696cb2080250527f795532024259926d494ea1fa72421266b94651f3c24ae25c993e71ed8233e254493461e4323e1243592e21daa227e24d191651d272224245691381da6219223d490ea1c372100238c90711ce820b122a78f2a1ca9209222a58ed21b6f202e223d8e8a1b3920cb21888dd81b14209321418e0b19551faa21d488bb1a581f58224b84bb1a581f58224b840000da218e2100000000da218e210000652953302f31bf9fdb2c2f34223549a3e82e6935c3364ca417253a299f29d2960000000000000000000000000000000000000000000000001b14841aa71c5b02a9294b2e47303a93162eb33478350d9d832cff324134789d3b2bed304232d99c822a57307631c79c062a03300731319da9295e2f9c30e19c4e29be2e4230929cee282d2eba2f8f9c8f28ae2d192f469b1a283b2d822e059aa327d32c092e1e993b27892cb02dd998d626422c5b2d95988226012c142dc7983326a42bdc2c8d98c525352b942cbc97a525e92a542c25982725862a1d2ce7961a253c2ac72b6598f824fe298f2b4898bb24a7292b2b139852245f29f12afe972f242429bc2abe97d923db287a2a4397b923ab284d2aa397b82388281a2a109857235128c3291998f9220d284d291e985d229027fd288397ab21f526a3285496262177265a28bf95e720ef25d927c995a2205e251e272c955c20f2249326de94bc1f6d2417265294951e03247525ee922b1e4123f3241a92d51db3229024c591ac1d3c223f244091451ddb21e1238a90cc1c7f217b23a78f7c1c35214523288f551ce820e4225b8e6a1cad2085220a8f951c84200c22e48fb91c6920c1211190a31c57207f214a90311c0f204821158d7b1b9a1f19210e8c7b1b9a1f19210e8c000050221722000000005022172200004928ca2eff2f9b9dca2c70347735a8a1d22e94350a372fa35225122a242ac6950000000000000000000000000000000000000000000000002010e41b3b2073014d29462e4d3069098c2d5e341b35c99b3f2cbc322234269d132bcf301232be9c5f2a35304e31459cce29cc2fe430c79b66293b2f8630ec9b0c29962e2b30689b9d28fb2d822f5c9b4c28782de32e679b08280c2d622efa9ba927a72cd92d089c5b27622c7d2d1b9c0327222c372d629b9326d62b002dec9a4026672bc62c959af3250c2b922c8199a925b02a582ce1988525612a282c67984f25262aee2bca970225dc29952bb696b724a7294b2b519676246529012b8c964e243f29c62a51960f241029872a7a96dc23dd28412ac5965e239b28ed29d19629236828b4291597e6222d28672943979d22d1272a2962970b222827be28c0963b2188264128d795b220c62585273e9540200f25b826bf94c81fb9243d2619949a1f6824e2250094d21e162462252f936e1e8123e8245c92f51d03239624e5919d1d9e224f2432913d1d24220524d990d41cb52178232990861c3e21e722cc8f351cae2015223f8f3c1c65207821c18ebf1b1e205221af8d4d1b012033215c8d5f1be21f1721688dd01a841f2021648b1b1ce81f1f21fb8c1b1ce81f1f21fb8c7d257b2b7c2cd49a7d257b2b7c2cd49a0221a52b122c8d965e2c0334df346fa1dc2ece3544370da4ca240b289b286b96ba10000000002680000000000000000000000000000000008e1623141309f2073529922dae2f5109702dab347835349d032c9a32e633ae9b0c2a5b3091318f9a8629a92fda3095983129602fa4304e98f028122f6e30ba98c2288c2e293029997428fc2da92f8a9a2628552dd72e259bc627ca2c282eb09b6a27722cad2dce9be126372c492dae9b8826fd2b042d4b9b3926982bce2c8d9aef25442b9a2cdf99b5250d2b792c47996525cb2a562ca6981b25552a142c12989724c8297a2bbc9666248929202be5954b246029ec2aa89427243829ba2a819405240e297f2a5c94af23e728492aa8948123cc282c2a07951a23a7280d2aaa9515239a28f1291a9697226a28f029f0962322eb278629db964321e526a5283696ef2080264a28d2959c200b260e2871955f206b25602729950a20e924a826c494531f4c24bd251794941e93232625ed920e1efe22eb24fd91e11dce22b7247091ae1d722275244291811d2e223c241891601de721c623fa90121d79211123b190861c03217b22cc8f621cb3202922fe8e801c7e20ea212d8f821c3c20aa21c58f701c17203821a58fc21b371fe420ac8faf1b361fea20208eaf1b361fea20208e3a24972b7e2cfd983a24972b7e2cfd984126e02ef42f7d9d312ccb33c73414a40a2e31357d3656a470248828ec283a92000000000000000000000000000000000000000000000000961470167f13e1004429ae2dd02f0c96ac2dac3480352aa0072c96320134e29c92291a303931c19a0b29f72e71307899db28ca2e4f304499d628c12e4b30dd99cb28972e30306c9a6f28082eaa2fa49b0b28242d9c2e429c8b27a32ce62d749cc926312c562d019c2e26c12bf22c4c9b17265b2bba2c949bf625002b872c6a9bc725ba2a5d2c269c72255d2a262cc79a1425fe29d82b5899b124a929742be3966c246729222b7d9647244429ec2a199331242629b62ae29113241929952aae90f4230e298d2a9290ec230c298e2a8d90b82307298b2a6b918c23fa28762a3a936e23e328662a74952023b6282f2a0d97cc226828b72903983422b927ee2841982f2177262b281c977320972532271b962220f2247e266895a21f9024022681943e1f3d2496250b94bd1edf233125aa923f1e6023e024c791dc1deb2299240d917b1d692250245f900b1dc021b9230690a61c2b21b9226a8f671cc6203022068f521c8920ed21e48e571c6820b6217a8f611c432096218b8f4b1c24207721da8e311c18204f21c18f881ba31f4821908c3b1b761f1321c58d3b1b761f1321c58de424a52b762c169ae424a52b762c169a2d280630b730989fdc2bd8323e3425a3b22dfa34393617a426241b28e228f193000000000000000000000000000000000000000000000000d514c11456124f00da28662d732f92952a2d903467353f9b492b2a3276331d99ef28802fd830ed967e283e2ee92f73977028d42d632ff2992b28a82d292fa79c0028ae2d142fa9977b255c2c8b2d0598bf256c2bd32c0d9a3d25f12a6e2cd9990a259d2a432ca199e5245b2a242c7799a024e129a52bde98602483291e2b0c9843243329dd2acc9649242b29a42abe9548241b29822a31953824f2284e2a94941f24d4282d2a79940f24bf282d2a67940524d228502ab2930824f2288d2ab0921c243329d92ab89040247c29472be2905b24bd29942b1d922d24ba29a32bee92ca238129462bb795f822d728552a569836221528612942983d21d32695283097b5201826122828967f20a9258127e19587202825dc26ec953520a2241c263c95a41f1c246e258294b31e59230c250e93bd1da922bb24f2903b1d372267242c90021dde212924598f1f1db921c7231690ff1c89214923f98fd21c3a21d022b08f7d1ce7206c22968efa1b9f204b22da8dc41a3c204922f78c271bef1f9621408d031b961f0521268d381a221fe8208a8b991ad01e8020518a991ad01e8020518a00000e1e5e1e000000000e1e5e1e0000c026c32d112f7e9d5329d1300432d8a09d2d0d35503658a3682ef43571375c9b872e08369737d599552faf363d38ae98633022384b39b8964430033814398816442fbe362b386c0f882de3342c364b9db22933304431459d3228262edd2fc49b0328442dad2e7b9ca127cc2c2e2e049c3826322c4e2d269a9423f128222a7f97e2235628e129679880241829a42a5199e0249a294b2b119a1b259829622b5a9ab7245929ef2a91998d242c29e02a159957241e29c42a4b984b240929a32a6697c423e628852ab3956723d6285b2af6942b23b1281c2ac793f6228128c329c6916023a528ec292d916a239028dc294290a1239928fb29e5833124d5283b2a488416246329f72a370d8f246e2a1a2cd10ddb24e22a872c5690f824802a5b2c3b996224a9298b2b939adc227b28d2292499de206d2632284d9799206f250b27e5964620d0244626dd95541f3624d3258f94591ed423b22517934c1e4a235025a192191eaa2281240892be1d0222cc23ae918f1daa21832324913d1d6e215c23d990171d32215623b690151d0021fe22b390151db5203422b390811c5620a921c38ff51b23206d21598ea01be51f2f21158e541bcb1f0a21d88d961bb41fe3200d8e811b7d1ff320f18e141b081fa520a58d141b081fa520a58d00008a1c841f000000008a1c841f00008125362c5c2d7a9c1c28432f9730369f0c2a6c31ac32e99f342c8d33c634c79fb42c59346a35b49d592d113566361f9df32e3c36c5378a9f3d2dfe344636059fa12bfd325c34169ee32810304731859c1928972d572f959b1227f02c442e8b9a1426632c902da099db25052c1b2d6b996425232b862c55993325292ad02bce99b9243a29d72ae09989240129762acd9a5e24d428332a6f994324b028fa297d9820247128bb29a297fe2353287e29e8973824382862290e9a6a23182854292498612302282a29c5971d23b727f328099708238327c428f59649238f27be28349741237127a828a397f3226e27c128fc95cc228427d428a3911923dd27fe2814903a23dd283d2a1211ae24432ba22cde169b262b2da22e0f0de126cc2c292e999de823142ab82b319b5c22bc27fc28c899dc21bc257c27139a2920a9240d267195391f3f247b250894f81eaa2316255693541e0723bb244292001e8e227624ef918d1d21223c242391231db72106246d90e81c7721a823d38fc11c2a214423fb8e821cd720cf229e8e6e1c93206722808e551c622009225b8e491c3220d2214a8e221c0a209721118eb21bd81f7721288d731ba01f4c21fe8c3d1b6d1f2621da8c371aee1e13215d88a31a981e8520728ca31a981e8520728c0000891c8c1e00000000891c8c1e0000a6250a2cff2cc09be4261b2e792f2a9d0c28612fa0308e9d1629a230c4315b9deb292a3189322d9b15296530a631d6954522382b952c01922724372c3e2d28975328ba2e48301a9dcf273f2e0230dc9c04272f2da82e5e9cd026682c9e2d759c6726eb2bff2c309cc525692ba62c2d9b5525e42a502cf499ec24332aca2bde9864246729e72a10980024bf28002a6296ca236028962938959a233d285a299c947c231e2827290495612305280a29f2943f23e027f328db94d322a627d728939498226a27bb28d69492223f279e283d957322e4266228f895512295262f28d8951e224126032871962b220226d5277e96e521a825d4273596af2186258d2742952c2173247b26c994b1210129b6292d921f2a3f31b1321499d6288e2fca30419f3f2073266b28fe972f213f244026c995761fcb2377256193861f4123fa247193e11e0323cf24cd92f21ed522b124de92a21ea022802423928c1e6c2248240e92db1dfc2110240c91851da021a82367901c1d3f2116231490fe1cef209922f78f9e1ca32041225e8f691c7e200122098f321c6120ca21b18e101c4120a121f78dd61b1d208521c08d6d1be01f4a21fa8c491b941f1421e28c401b2c1fca20528deb1ab51e9620328c911b871e2720128d911b871e2720128d0000741a541b00000000741a541b00002324e82a4d2cad994225a12cb42de19a2926802dd72eab9b1527562ed22f019b4c27642e04305b999626e02d582ffc97b125eb2c2f2e8a989925732c9f2d9c9ab925602c8d2dda9b8b25182c3a2d9b9b5825882bcd2ca69a56252f2ba82c4d9a3725ec2a7d2cd299f724702a2a2cdd99a024fb29812b2a994c247d29cc2a4098e4230929462a4d976823b128e12961960023602888290896cb2225283929da95b322df27fd283396b2228927c8289f96b72238279828a5969c22fc266c288a966622bf26462854961a228c262528a595d6216f26172807958c21332600286d9466210526cf274e945e21cd259a2748944d21a02564273b9421216c252e278793192168250d277b93c820ed2452260593411cb52047223e8ea70c421a681cdb812a1cdf1ff420a58e9d1e2722f4234691281e7d2244244d91151e762246243d91ec1d35222824b990b41d092203248d909c1dd921c823d590a31db0219123db90ba1d93217023ef90941d69214d23cf90691d40213423a990211d14210f231890d61cf220da22b78f831cb1208822338f241c67201922148e9b1b0c20a821188d3c1b851f5921d98cda1a471f0f21978cab1a1b1fdc20788cb81a121f9c20818c5b1ad51e9820b58b3b1ad41e5f20f7893b1ad41e5f20f7890000b21cca1d00000000b21cca1d00002a24202a8d2bfa9961249e2baa2c9d98bd242c2c292db0983925992cc12d80989a25c22c002e78987f25a82cea2dbc985525602c852def985225e92bfe2cf19917254c2b9b2ca89ad724cf2a4e2ca49aa824552a052c179a8224fd29982be6995d24ba293f2b6e993d247629ea2abb980b243029972a0098b423e8283c2a21973d23a028e3293d96042357288f290b96cd221f285429dc95aa22de271929be95ae22a027ef282e969f225727c2288d9689221d27a32876967722e826822865963722aa265e282696da21692645286b957d2127262b2814953721fb2515287e940921ca25f0270494f520aa25bf27e993f02081257b273f93ce204e252d270e9393200a25d726b7927b20dd249f26949229203724b725a492601ceb20a7226c8e1519521e1520768bc71a21209621688da71d8f21eb23de90131fc62114248c921f1fd02103240b93921ec621e4237f92f61da821a3238591891d7f217723c4903c1d3f211f238290031dee20c8225190fd1ca9206f224c90ee1c732025223f90bd1c4e20ed218f8f7d1c2120b121298f321c04208321b18ec71b9d1f3121b58d0d1b2d1fe320b98cac1ade1e9f20788c5a1a8d1e6520b48b711a7b1e3a20518c261a3c1e4720ab8a061afa1ded1fc489061afa1ded1fc48900000000000000000000b21cca1d00002a24202a8d2bfa9961249e2baa2c9d98bd242c2c292db0983925992cc12d80989a25c22c002e78987f25a82cea2dbc985525602c852def985225e92bfe2cf19917254c2b9b2ca89ad724cf2a4e2ca49aa824552a052c179a8224fd29982be6995d24ba293f2b6e993d247629ea2abb980b243029972a0098b423e8283c2a21973d23a028e3293d96042357288f290b96cd221f285429dc95aa22de271929be95ae22a027ef282e969f225727c2288d9689221d27a32876967722e826822865963722aa265e282696da21692645286b957d2127262b2814953721fb2515287e940921ca25f0270494f520aa25bf27e993f02081257b273f93ce204e252d270e9393200a25d726b7927b20dd249f26949229203724b725a492601ceb20a7226c8e1519521e1520768bc71a21209621688da71d8f21eb23de90131fc62114248c921f1fd02103240b93921ec621e4237f92f61da821a3238591891d7f217723c4903c1d3f211f238290031dee20c8225190fd1ca9206f224c90ee1c732025223f90bd1c4e20ed218f8f7d1c2120b121298f321c04208321b18ec71b9d1f3121b58d0d1b2d1fe320b98cac1ade1e9f20788c5a1a8d1e6520b48b711a7b1e3a20518c261a3c1e4720ab8a061afa1ded1fc48900000000000000000000000000000000c71a33267c26d092612c2730ee30d2a4dc2c79318c3232a5af30833581364ea917319f35b5369aa9df29382dd62d06a35026252bde2a14a00326792a3f2a6d9e902a812d9b2e3aa3a6306f344c3586a8c230b73461357aa8ca2dd731ee32b6a4c32c85307431d6a2402db0306131dea2363060341a35c7a54d301e33d73373a6f92f363197317da6c9304633aa337ba7b9322937203865a8d12e5134573500a14d298330d1310f9075267f2c822dc591e225d02bd62ce2947424112a562b1e917f24a928fd29bd8d842355281029d6036e295e2cb22cda14a4308f3152318da7fc3152346e3404aa503212358f35c0aa332ea031f73139a7e526ed2c9f2d0c9ee8222c2b6c2c1498b21e42260f28e893251f59248b25fa93141ebb2305256792141ea22308256792401e6923e6249592331e4423c42487929e1de6228424ea91651da7225924ae91cd1c28220f240e91a41cdd21ac23e3906f1c7a213123ac902b1c3921e4221f900c1c05219c220190a81bd1205922938f561ba6202822428fef1a812005226a8eb01a6120cc21308e741a432096218f8d541a1c204d21748d411ac31ff920fd8c731a3c1f9d20248d331bbc1e5420be8d401ad81e5920fc8ce019da1e3d20b08c0c19751e3e20078ccf1abb1e42209a8f0000000000000000c71a33267c26d092c71a33267c26d092612c2730ee30d2a4dc2c79318c3232a5af30833581364ea917319f35b5369aa9df29382dd62d06a35026252bde2a14a00326792a3f2a6d9e902a812d9b2e3aa3a6306f344c3586a8c230b73461357aa8ca2dd731ee32b6a4c32c85307431d6a2402db0306131dea2363060341a35c7a54d301e33d73373a6f92f363197317da6c9304633aa337ba7b9322937203865a8d12e5134573500a14d298330d1310f9075267f2c822dc591e225d02bd62ce2947424112a562b1e917f24a928fd29bd8d842355281029d6036e295e2cb22cda14a4308f3152318da7fc3152346e3404aa503212358f35c0aa332ea031f73139a7e526ed2c9f2d0c9ee8222c2b6c2c1498b21e42260f28e893251f59248b25fa93141ebb2305256792141ea22308256792401e6923e6249592331e4423c42487929e1de6228424ea91651da7225924ae91cd1c28220f240e91a41cdd21ac23e3906f1c7a213123ac902b1c3921e4221f900c1c05219c220190a81bd1205922938f561ba6202822428fef1a812005226a8eb01a6120cc21308e741a432096218f8d541a1c204d21748d411ac31ff920fd8c731a3c1f9d20248d331bbc1e5420be8d401ad81e5920fc8ce019da1e3d20b08c0c19751e3e20078ccf1abb1e42209a8fcf1abb1e42209a8f00008225b925000000008225b9250000c82da231d2324aa717301d34c33433aa66334c373438f6ada6326e368d371bab4c286329f229f721ae24bb255a26d71f34231c257926611e022a202cb52c9223e0321f3606371dac8133f336fb3717ad8c2f91338134dda6ee2deb31023372a46d2da731ad320fa28d2ea132b93314a4e92fed32d3332fa682303733f73319a8e2300a34763498a82d3196342935b5a8af300f348c3406a7372bbe30cf31e89ac328fe2e4c30e7176227f22cff2dd51a74266e2b6f2cf9199b25d82a172c9e1aed26132cd02c161c833053314531d2a8003140325332fba912317f32ab323aaad330393244323caa4f2e9430de3014a84628952c7d2d28a00d240b2aa52bfb96f8214f2846293c93eb20ba26392838937d20b42541279692ba1ffd246b262992971f9524e7250693b21e2f247a253192fe1d9f230e25ee91ad1d0023a5249d91251dba225f241791f61c6d2240249790e21c2e2216248590ac1ce721cd2353908c1cb521812335906d1c72212f2318904e1c3921e022f88f2b1c07219122b68ffb1bdf205b22628f781b8c200122708eb91a3b20a921cb8d311aed1f3921f08cc319951ff420988ca7194b1fc420268c8319141f8b200c8c8519031f4f20668bd518701e3f207a8abb19661e2820348cbb19661e2820348cbb08fb267e279f81bb08fb267e279f81c32e7132d83396a8c53098344c3513ab5234023890388cae8733c136d93725ac59296a2aeb2a181041255c2732281d1d222450265627351d5e2bb82c7a2dc11fba336736633707ab3a349b375f3831ad47304f3416352aa8892eb532f833e6a4892ded311e3388a2922df5311c33eea2712e1232fc32d4a40f30b932873361a7a6305a33123486a8c5307d331c34cba8c9305f33fd33f6a88130bd32363362a89829a12ee02fc89a29283f2d412e621c87263b2c142d7a1c3c25d82a2e2cd91bca26d22b792c391ca728752c302dc088953062314b31a1a90e31e231d23156abeb30c031e0314cab982e57307b30aea82328cf2b942c869f7a24aa29802bb798c3222c285d29d4959b227c27c92888962e22ef266d28b0972021e625ca27659559206825ef264d94db1ff72488264593211f832407260d93d71e3b247d25c492331e9b23cb242292c11dd7225c24b191661d852228245791171d2f22fd230991b61ce821b323a990661ca22163235a90301c522105232590fc1b0c21b922e68fbf1bd9206c222b8fb21ba8201a221f8f681b6b20b921da8e0d1b1b206721138ee51ace1f3121f18db61a971f06215b8d5a1a771fed20a98c3a1a6b1fa8202c8c0c19e41e89207989e8199d1e4220e688e8199d1e4220e6887518e9275428fb8c7518e9275428fb8cf92eb2321b349ea8cc30ab346a35f7aaea33913750381faedf3250366337b0aaab29ca2a4b2bcb200225ca274b28311bac2378264a27979c932bfc2ce22d8f9d0233eb35f4367eabd63333372f38d0ac5b306d3443353da8b72e0d333b3409a5482dda310d3393a2ef2c8631a23274a2202d6d31813208a3792edf31bb3244a54230ba327e3325a8d0303933d93324a9e1301e33843387a9f830b4321733f2a9f83032325f321baa0831d331d53180aa2e31ad319c3106ab2e31a6317b3131ab3431b931803164ab3a31c731963196ab3931cd31a031bfab3a31d031a6310bac1831a73180311aac012f4d3052304ea93228162cb72c5d9fb5241b295a2a42997a2368288e297196f22224283929fb95d522b127ad2852965a21a0266f28f4949e20bb254d2746945c2033259e265094b61fcb241f26a1934a1f59248b253593b71ee8230025a5920d1e7623bf24fc91971d2023892488915a1dc42254244b911d1d862233240f91f31c2c220a243791be1ce221c023fe90931c9121672386906b1c342116235f90671cfc20ce225b90461cb82092223a90231c78203522a78f4c1b2f207921498e751adb1ffc20278d211aac1fee207f8c551aaf1fc020a68c30191b1fa920f48a861aad1e42205f8c861aad1e42205f8c00006920732100000000692073210000e82ed732083493a88d309c3462359caa15330f3710387aad3732ed3501370caaba291b2b812bc31ef6242b286928fd1ce923ff26ab27b01a4e2b142d022e86165f329335993604ab6a3316372838acac483077345c3570a87e2ee4322d34dea4522dea3123339fa2c82c5c31843241a25d2cfb300632b5a1f52c08312b326fa3b22ea93180324ea674309032193330a91731d032e33240aa2731b332f632a8aa2b317732a032d8aa3c3141324c3244ab4d3114320a3287ab5731fc31de31ecab7231f631cc3121ac7631fa31c83150ac7531ef31af3165ac7b31e7319e3197ac5931ab316831a6ac0f2f1b304d3093a9bf27212b1a2c0b9f45252629542ae59a08247228ab29c2987e23402858296c98f522d827e328c5979e21c32652284696fa20bf259f273d95742050253527b0942e201c25cb266794891fa7241826ef930b1f2b2449256a939f1eac23f124f892271e4823ca247b92e21ded2297243192941d9d226b24e0912e1d342232242091d01ce621ee23c2909f1cae21842346904a1c60213923648fcf1b0621e922ba8e151ba52061221a8e911a0c205f213d8d201a551fa8207f8ce419361f9520538c131a7b1fc820758c6b1ab21fd020b68c0d1a791ffe20718c191b9f1f2a21cb8a191b9f1f2a21cb8a00007c209921000000007c2099210000862eb432f73337a81e3056341f35d8a96932b236bd37c1acc131ad35cd366ba9d729da2b3b2cf7098425e928fd28471573240128432861134c2b612d432ea894d6313d3535367ea98a326d368c3768abcb2f3234083595a7ed2d8432e333a1a4052da231d23291a28f2c1e313132aca12b2caf30b53174a1062c9130953186a19c2ca8308c3135a3b22e5b31f531baa68a3030328f3293a913317932a332e2aa35316e32763265ab5a314d325132f1ab75313532293239ac86312d320f3273ac993132320f3299aca4312e320132b9aca5312832ec31e9acc0313432ef312fadab311532d33133ad222f26301f3016aa5c27fb2a012c669f38242a297d2a85990f2489280f2a89987f2359289e296a97d7220b280f29c4960f225027ae28ff955921782647284a95ad20c625af27a094fc1f2825ca263494ec1fc3243b26d693eb1f8c24e725d5936f1f3a247c255b93b41ed0230d25a192201e3223b2240e928f1dc5226b248091421d752236243391f41c31220724e690b01ce121a323a390791c8e2141236c90361c3f21d8222a901f1cfb208122a18fb61bb8202622a58e071b5e20aa210d8e951a20205121408d7a1a03203a21c18c991aec1f0921d88c9b19401f0a21838b601a161fbf20bb8b601a161fbf20bb8b000005211c220000000005211c2200002d2e7132b63364a7152fe433ad34eaa81e3194357b3644ab04311b352e36aea9c3295f2cdb2c709e792590299c293d950c25dd28062927850e2b9c2d842e4e9601319634753512a83a315c352b366ca9152ffa33cb34e4a6b02d6a32cb33a0a4dc2c9631ca325ba26d2c19312a32cba1ca2b87308831d9a0072b1f300f3198a0652bff2fdd304fa1562c3630f4309ca3f62e3131bf310ea8e73037326632cdaa60318e32a532faab8e317e32883263ac9f3166325c329eacb73160323f32c9accb316332323209ade03169322b324cadf0316e322d328aad093276323232d4addd312432d631d8adb02ea02f7f2feba984268e2aaa2bec9d8f24fa28282a6199d0237928b529bb97ff222d284429ec968122af27dd28d996d221ff26782820967f219d264328c99539212026d3278095c3209425172752954d202025a4268794bf1fce243f265394481f7a24eb251194061f2b246925d8939d1e8623de24f692101edf22822462929a1d5c223a248a91241df821f723c290b11cb821a9235790671c7c214c2313900d1c3a2108237f8fc61bf5207222b28e581b9220dc21538eff1a6420a921948d951a27205f21d48c4e1a00203b21398c661acc1f1221c18baa196b1f1b21288cce1a091fb520fe8cce1a091fb520fe8c00009a208821000000009a2088210000b12d4f328f33fea6bd2ed533ab34ada80031c535c43642abc5303235423603aafe281e2b922b2498aa244f28af284016f423032867289511722a262dfa2dbb9cc830a2348635e0a932317f35783637aa9d2ea3339d3470a62c2dfd315f3335a47c2c4a318e3227a2152cdd30023257a1ac2b6c30713105a12c2b0c30f930eca06f2a682f8c306aa0522a402f6f308aa01b2cc22fbe30fda3062f01315e31a6a816313d32673204acb73194329132c9ace3319d327f321fadf331a4327e3244ad0d32a93276328cad2532a8326532efad3732aa326b324bae5132b132643267aedc312132bb3137aea02ddd2e032fcda84b25bb29f22a239c36243e29922aca97db239728df2945974a2359288b29ad97d522142837293297fd217227cc284e965b21dc266f28a395132165262a285795e120fd25cf2772957b205e25fb2601950820ee24512681948e1f9c24e9253894161f4c249025ea93a41e082439256a93801eb723fa2442933b1e5223b824f592ba1df72275246592671d7c2225240992df1ced21b5232191a11c5f2109239490191cce205f22958fec1a6b20ef21f78dd01a442096216f8dcb1a0e203b21fc8c991ad21ff6206c8c541ab71fbc20ac8b121a521fc3205c8bb41a691fed20108cb41a691fed20108c000065205b210000000065205b210000432d1e325e334ba6622ec533a83489a8c630cc35d536eeaa643015352136b1a84f281e2a6f2adf9a8823de26ca27c4898622eb26c527ff08d929ad2c8d2dd69b7030933479352ba90e319335b5360caa962e963396343fa7012df23146333ba42c2c1e314332baa1bf2ba130ab31d2a0412b4d30443148a0852ada2fce30479fe6292a2f5d30369e9029a52e1130809d8a297d2efc2f8a9e8a2bc62ecb2f08a48b2e7830b930c0a81b311c3218325bacf931aa32b13293ad3932dc32ac3202ae5032d83291324bae7032e6329c32a0ae9032fd32a932f6aeb3320e33953236af6b31bc31643117ae102ca42de72d8ca689245529ae2aef9952240729322a4698be23bc28e2295398af238028a929899838232c28342943983f229e27e028f9965121f8268e28f0951321622630285795eb20e62597277e958a205d25e72611953c20f4247426ba940320b2242e267b94a01f8824082642943e1f5a24d5250b94a21e14247d256893f21d6c23e7244292901dcf22792480916a1d75224024b3916c1d33221324b591621ddd21c123ab91fe1c4a21fb224291311ca92006222590a41b8920d221958e8d1b7a20d521058e091b7420d5212a8d331b7e20f721d38c9c1a2320a5212b8b671b481f9f207d8c671b481f9f207d8c000017205f210000000017205f2100004f2d0f3253335ea7dd2d9133913412a87a30b735cc3637aa0f30f934023698a81528222a6e2a78990d23a526ae274d0ed42198269227700b7c297e2c5c2da69a1630723459357fa8d8308135b136cca90b2e4e337734d9a69b2caf3107330ba4262c0131263238a2d42b803089311fa1fd2a1c300d3120a0332a7f2f9930529f9d29e52e4030a09e6429862e1330b69e44291f2edb2fe49eef28a72d0b2f749ead29d42deb2efba05c2dcd2f5030c8a7c5308f31d4314dac2a32e832b53225aea8323c33f532f5aec2324b33fd3262af163371330e330bb08632e2326b32c0af08309930703068acd728fe2bd72cf2a138244b294f2bfb987d243a299e2a4c99fa23b2283a2ab6989c235c28c1297e98d3220d283f299e972a22a427ec28e296df215427bc288e96ac21fc2675285696192147260a280496b020b0256527899586204a25e82657955220e124792619951d208a240926db94c21f3424a1259494ec1ee3233b25bb93541e5223e3241193c31de72297241192661d8a224d24af91111d38220d245591c51cde21a623b8905b1c75211d230890f01b03219622d68e591ba4202b22548ee31a5720df217e8dab1a3020ab21528da91a23206121e38c071ad11f4b216c8c131be81f5e21a48d131be81f5e21a48d0000a51fd72100000000a51fd7210000872cc831543390a55b2d8633b3349ba7e42f5e357e369aa9432fac34d03576a81228e52a752b7599b722842724282409a321cf26e127320b4729922c662d6409a32f6034403553a868305d35803645a9852d2e3366345fa5402c8a31f03260a28a2bde302332eea0132b6a308b3167a0a42a1030133122a03b2a872fb730c09fa029cf2e3730009fff281c2e7e2fe69d9c28b32d092f269d4d28482da02e879c4728fe2c2a2e0d9d5528072d382e0d9f3b2b1d2efd2ee7a43e2fa230cc30dfaa2631e731103276ad023286323d32daaed43151322132edae5f30fa30df30fdac052c8f2dd92dfda67425082a792bc99c92244629c02a65993524f1284b2a3c993924b228392a419902247a28d629fd983323302868297a986c22d82702299497f8214727aa280b977621b12676287296e02045263b28c2959020d325b9276395522063250927609523200725a8262695eb1fce244d26ed948e1f8f24f5257594081f2c247e252694331e5723d624ec92701d61223c241392151de521fe235a91ff1cbc21bc234391cd1c8d217a23c0909c1c77214a238f907f1c3c21fd222990641c2021cd22918f471ce3205f22d38efb1b9120c821dc8d411b4c205221538dbd1a10203221f28cbd1a08208621848cbd1a08208621848c00001e201a22000000001e201a2200004b2cc6315f3346a5d42c2b338534dba62e2f2735473637a9942e79349b35dfa79527cb2a652b889a3f2259271828f98b70210d270a28dc0c1329962c672d8994062f2b340a3548a70f300f352236baa81a2d0a335e34a4a4fb2b6b31c5323da2342bb430de31f0a0cf2a41304a3174a06a2ac72fd530fb9fde29232f7830ed9e4029832e0f30dd9df328102e7f2f879da828c02d362fe79c5d28682dda2e989c1d28122d4d2e119c8427962ca52d6f9b3a27502c5b2dba9c66283f2c5d2d8fa0772ae12cc72d97a4c62c6f2e1b2f4da85d2c202e8e2e25a89b299b2c352d56a40926f729702b4c9de4243929882ab69a85245129a62a0c993e2404295f2abc980b24de28422ac69897239028d2297b98d22240285f290798352201282329ee96db218c27d4288a968221da265d282696fb2052260928e195a020f325a12776956e209e2536273b953a204625c826fd94db1fe1244726a394221f8224c72536948d1e222453255093451eb723fa240093221e5923ba24da92f41df2227b24a692a91d8422422452926a1d1322f9230c92ce1c822155230f91231cec207c221890ad1ba320ed219d8e831b7b20d921fd8d3b1b7720ff214e8d731b4e20da21fe8cf8196e1ffc20008c691b5d1fd920f78c691b5d1fd920f78c000021202722000000002120272200000b2c94311a33d6a4be2c6033a4346ea6b22e10353b36a6a8292e5c347a35fba68b27112bd32bfb9ae621bb273c28c78ef720fa2616288902d6288f2c5a2d8e95812e1334e83454a6862f0135093605a8ca2c003361345ba4732b4131973295a1cb2a8c30af313aa0632a33303e318a9fee29c82fd0309f9e8229052f5e30809e2029562ee92f619ed228d32d542f9d9e9228762dde2e469e2128012d542e239d8627a32cd42d339c2c27682c8b2d8d9bf226372c4d2dde9ab726e32bef2c129b7c265d2bb12c3e9c2d27742b9b2c869e1026cd2a2e2c5a9c54259a2a222cf39922250f2ac32b6799b8247d29012baa986c242529bd2af0981a24e2285b2a9598cf23aa281d2a5c9892238428e129789833235828ab294098b6221a286629ec973d22ad27fb285d97d32126279b28e1967521a8265228ca9626213b26f9276896ce20c6255327fa9591205d25d726ae952020e02444262295981f6c24ca25b994161f0e245a256994821e6e23eb24ae93d81dd4228a24e6924b1d3d222524e991be1cc521a023fe906d1c70212f236090831c3721fd222c90ac1c1b21c52207909f1cf1207522f78f5a1ca6202622f18e2c1c7920e8211f8eca1b5320af21b78d341b2b209421d38c501bc61f09215e8d501bc61f09215e8d0000cd1fcf2100000000cd1fcf210000522b4431b73261a4482cfe326c3488a56b2e1d35513626a8e42d633488354ba62927ed2aab2b2b9ad521a1274628d690cd20fc2622286e928b28682c3e2dc99cf62dc533b53490a6f22ec534c1350ba8902cb5323a3496a4502b1d317b32b7a1962a8a30b13185a0282a23302931a99fbc295d2f9930239f4329a52e2f308c9ee128362ee02f129ea628d72d612fad9e66285c2db32ec29d1b28f82c2e2ed99ca127bd2ce62d049c2227702c8e2d0e9bcb26242c292db89a6a26972bcf2c2a9b61265a2bb62c209b2926082b912c469b9f25832a262cff9a6025392ace2bb09a0a25f329932ba19987248f29022bc4983c245729c22a7598332414296c2a6c980924cf28262a8298c923a328e92998986b236528ab299e9830232a285629ee98ee22ba27f928fa98a7224227b928fd984222aa265c28b198a0211326d52738981221af2535274797d1205f25d226eb964820ff2464269a95b21f9124f625ca94101f3024932565948e1eb3232e25bd93001e2323d5241693a01d882274244892251dff210d24bf91011d7f216f239791a31c1121e722e2903e1cd82097223290011c9e208222698f9d1b5a2035220b8f6f1b3720cb21688e811b09207621f18e011a311f6e21ca8c181c4d1f7821f68c181c4d1f7821f68c0000661d7f2000000000661d7f200000932adc3007320aa4cc2bc832463409a5ef2df73424367aa7992d52346f35cea5f926092bd82b749afc210b2883283390e420442754283e8a3b285b2c322dc09a7b2d5e337a3435a6352e6b344b3508a71e2c66320534f6a2e52af5304532baa04f2a54307331d99ff229ef2ffb30c79f9129422f8f30a39f3a298f2e2630819fe328fb2d7d2fa49f7528852ddf2ed59d03281a2d582ebc9c8e27bc2cef2d389c2d27762c9d2d199bd826332c4a2dc59a7b26ed2b012d699a1f268c2bc82caa99d725372b942c67998d25dd2a552c23994125842a212cdc982425352ad72b1699e324d829752bd598b4249b29332bf4989d246429f82adb9878243129c22ab5982c24ec28712aa898f823bb28472ab5988b238028fd29b198272336289729ae98b722cf2725296498fa214127d32870978521c1268028de9622214a2635286396a920c6259727cd9561204325ef26bb950f20c82462260d95251f4524d0257294691eac23302591930e1e1723cf242593d71dac227724e592b91d2c2233246492591dc021c423a291ea1c692155232c91a01c2421102348904c1cda20a622f38f6e1c9a205b2219908d1c6720f0218090ad1c5720aa21a0909e1c42206721dc90401c06203b21538fc51b731f0c21348dc51b731f0c21348d00008b1e6721000000008b1e672100000129702f9f3007a14e2bad32343493a30a2e6035b93643a63f2d3834573570a4d026a72b6c2c059c0e227728c62857933f21df2797280691f227562c412dd99af92cdb32363428a58e2d1b34ee341da6dc2b4632f53325a3c62add30233215a1282a35304c31449fbe29c92fe0306a9e5429322f8230f39de1287d2e1b30729d6728d22d522fa39c1728502daa2e929ccf27e62c262e9c9c7d278f2cb42da89c2c27542c662d769cdf26172c242d469c7b26b22be52c089c28263e2ba72ca99bd525e32a722c429b8f258d2a402c459b6425402a0f2cb69a28250b2acc2b6b9ae524d629842b7799a424a929472bc6996f247029092bac9841244429cf2a7a9805241429902a3c98c323da283a2a569835238e28d729419817235d289f29a498e8221f285a29f5987a2292270829a698dd21ef2686280598202155260b2808977f209e253327e1953320062592267e95e11fb2242b26e794561f4e24b2259094921edf233225c193431e4923c724fe92d51de3227c248392801d87223a24cb91491d1522eb239191f71cb32163233a91ab1c2e21d8229e90531c9520162247902d1c56208021bb8fb71b15204f21238f701bed1f2e21698eba1bda1f1721a88ef81a751f3021ac8c771cb51f1f216b90771cb51f1f216b900000cb25862600000000cb2586260000d526542dfa2eff9d2828312fa83071a0cc2d3435913690a6e42c6f348f35c2a4f824112951291f9429223a25ac26b808c11e452503272c854927532bab2ce298432d733391344ba6e72d73347335dfa6832b1132aa3397a2f1297630c031d5a05129ba2fee30999d3229622fa5307a9cec280e2f6c303d9c9f287b2e1b30469c3c28bb2d512f759cee27f92c702eae9c6a27912ce22d9d9c0427542c792d5e9ca6261d2c262d239c6726cf2be82c8f9b1926752bb22c339bd4251f2b802c829a9f25f12a5d2ceb994425a22a362c3599fe242f2ae92bf0989724c229672b3f9865248c29202b92974c246229e82a4f9628243f29bd2a929509241729862aec95ba23f228522aa8969923d428322a08974523b2280f2aa7971b239528e529329868224828b0293198d62174271d29a3975f21d32685285e97042179262628e2969420c3258827489660202825f32601961020b92457265195111f2a2482256594721e852303259c932c1efc22d924e492fe1dcc22a524b192d01d652264247d92c01d22222c246c928b1dd121b923d691281d6821fc226e918f1c032160228290781cb62013226c90ad1c8d20e221a0909f1c3f20ab2192909e1c1720362192905c1c221fd0206d910e1c241fcf20f38d0e1c241fcf20f38d0000dd24132600000000dd2413260000ff27422fb830c9a0042ac9314c338fa4402dd4340c36f5a7b12c143421359da5b725d9294a2aa997ec20c4250327488a5f1e8f250d27b1898927c52bc62c8899002d61338834aaa5e22d7b347d35aaa6592bf1318e339ea34829173041313e9fd028ef2e6d30c29cd128c42e4c30269cf428e02e5730959cc228882e1f30679c05288e2d092f3c9c3b27ad2cea2d459cbb262d2c3e2d309c4526b62bdf2c679b0926612bac2c209bff25122b822c769bf225d12a632c669bc6258c2a3a2c8d9b81252e2a012c7f9a2625df29a02b6c99c0249929462b189892246f29132b1f966c245e29f52a5d954b244529d32aa8942f243d29c42a9b9513243129bf2af094fe232529b52ad994c32317299f2a33958b230529822a7f966a23e7285e2a2498ff229d28ee29cc98b5221e284f2907994722072779281b9953211126ad27559876205725cf26b1960c20cb244026cf95821f7324d425e994321f252471257a94c41eb5231525fc936b1e3723ca242b93f41dc9228424e391821d442235241991141db321b423b290b41c3521d2225a905d1cdb2042220990421c9120ef21e18f3e1c6620af21d98f431c41208121e38f231c18205b21218f021c012033216a8f661b7e1f2221f58c3b1b611ff8204e8d3b1b611ff8204e8d00009b241f25000000009b241f2500001a28c82e5d3090a187293e318d3203a4e72c9634a1356ea77b2cfc33fe3438a54e257429d5296e96e5206725a0263f8a281f4125b1261c8c33275a2b932c4999f22c8e33a93449a5ad2d7d348e3511a65e2aa7313433fba0a428c22ff430c69d37284c2e05302b9c2428c92d6d2f199cd326ff2c6e2ee1998f24872a852b90937c24242add2bba9721256b2a182cbb991625532a202cae990a25292a052ca199f824eb29c32b3b99c524b629772bb89898248129332b409871245a29f82a169758244b29d92a60964a242e29b22a3395582417298c2a44955e241129942ada95662409299d2a55955d241c29d42a4a9555245229262bb3944c24a229a02b1d946624cd29d02b4c936724de29c02bc7942724b229862ba0965c232429df2a94984a225328c529eb98cc216327d8288998e8205e2636285c979020d725d1278d96762073253e2768964520f1249926dc95e41f7124eb252995351ff02359257c94641e3823ed248b93b21d97229624a291451d29224124e190271de2211624c490411db721bc23dc90081d90214e23a890d91c3b21c7227c90671cca205422958f1c1c7a202b22158f881b3220ff217d8e7a1bff1f7221f78df91a801feb20028e371a171fd9208f8cc71abf1e6f201c8cc71abf1e6f201c8c00003b1fe21f000000003b1fe21f00000026102d582e9a9ed227772fa930ada1912bcb323d34e4a4cc2d5e35d036bca1bc2e1036a337bc9b9a2e1036a337be8ed32f213780387e9c603039386b39249e322fe63671385ca07c2ce233fb3427a2692930304c3167a038284b2e2830539e8b27272dae2e6b9d30279b2ce02d299de425032c052db59b6924ea29572b34995d243829b62a6e99bd2470290b2b339ae0249229322b619afc2492292a2bd69ad0247229fb2a4b9a86242f29c22aa19943240f298d2ac2981124f3286c2a0598d523e4286b2ac0967f23da28632afb957623e0285a2a00958923d028532a3693a623ce285a2a6490d623e228532a008d1424ef286d2a2a8467246629ee2a7f045e24422a052cb00ad624f72a7c2c688bd824f32a8a2c7c980125152af92b8d9c1c24b428792a439ce0211c27c62857997220af2563273c977d203b25b12605970f2087241026d4952e1f1824bc25ed94651ea9239725f593171e02231c253193e71d87225a249792911dfc21c6233792591d9f217a23a291181d5c214c235d91ed1c252135233091d51ce720d5221791a61c95200d229990461c3e2082213a90bc1b17205321288f751bf11f2b216c8e511bdc1f16214e8e731bc01fd9206b8e231b5a1fde20268eeb1ae11e9820328ceb1ae11e9820328c000079199b1a0000000079199b1a000017237d2a1e2c739a4127722ec42f93a0bc2863305f31d1a1542a0f32893390a2022c63339a3485a2342c05340c35c4a1872d15354936e1a2ff2d9d35f13676a35a2c1a340d3586a2a2297630be317ba11228542d0f2fec9fd926a82cff2d029e11264e2c762dbe9cd925f62bf42c639c6325f82a552c0a9c1025f4298c2bea9b8c244929c92a669bac2420298b2a199c8a24e228352aad9b4c24a228ee29b89a30247828ca29039aea235e28a1292d99ef234b287f293199962321284e29f6989c2306282529fb987523d0270029e1984923a327d728c49844238d27ce2885982e238327da283d98f222b927f828fb95c62202281c29c88f0c23bb28df29f310be24072b7c2c911776260b2d922e8914bf261e2db42ead9acd240e2b792c499d2e225928b129699abc213d263728f2999b20e7244026569813206924a4259795281fee2338257494db1e6323e7244494721edb229b249c93f11d62225a240493801d022228242492301dab21f0232191f91c732194239990d31c2c2132237690a01cc820ba2248907a1c9020552225906e1c6620f2211990561c3720c121788f201c0a2089211b8fa51bc51f6921198e4b1b7a1f4121d18d061b3e1f16219a8d041ac01efa204b8b491a5d1e7420d28a491a5d1e7420d28a0000e217471c00000000e217471c00002e22a529122b039abe257c2da22ede9e1327692e0a303ca057280630f530c7a03029a730c931b8a09a29e5303f32af9f6127612ee82f5b9c09202a290b2acc9578245e2baf2c599c5e27552dce2e0ea0bb26fe2c6f2e329f04263a2c732daa9dda25942bc92c229d7425172b682c9d9c2925882a142c339cdb24002a7f2b989b84245e29ce2a0f9b3324db28252a909a07248628b9290a9aec234b286f29b29aca2324283c29169aaa2305281b29bf998f23e527032930994223b327ed28fb98e7227427c2288498cb224427a3287198a8220727772824983a2299263f28bf975b223a26222881971a222f262c2834972222a325ac27da96652122258926069664206527822891934a292f3024316a9ad92a0231863242a00d23e428232a169b3a2138243a26419835202a24c025f794b51e782302257e93aa1f4d230b254894141f2223ca24e8931b1fee22ab24f0939d1e9b2271246293671e65224124be92c41dfa210e24b4916b1d9721a1230491fe1c30210e239e90dd1ce22092228090931c9f203d223c90671c7b20f9211390381c6120c621cf8f081c40209921f18ec11b20207521ae8e671be01f3421618e381b7f1ff520c28d251b041fa220278ec41a851e6720f78cbd1b4c1e02204f91bd1b4c1e02204f910000241b2d1c00000000241b2d1c0000ec238c2a192c759bfc245f2c712d2b9d9b25ff2c392efd9d7826cc2d332fb69ee026122e9d2f409e8c26c52d492f549d4c25bc2cfe2d4f9c59248c2baf2c189c77241c2b812cc69c24254d2bb12ca99d1b25072b8c2c219de624a22a5a2c4c9cbe24682a1c2c6a9b9824192ac32b989a5b24bb292e2bb3992f246629b32a3499002410294f2afb98ab23b128e52986984f23612887291598202328283f29f597fa22f6270629ca97f422a927d9281b98e1226127a8281098b9221f2780282f987322dd26582803982f229f2631284d97f42178261d28a696a2213f26fe27ef9565211426d02756955321de25a12744953721bc25772729954421aa255427e0940e212d25b626ae94131e742250249e9154104a1b3b1d0184ca18241dd21e6f8cfb1d7221af22ea910f1f67223424fc92a91e8e22452496927d1e7e2238246b92281e3a221e241692bf1d1622fd23af91a01de021c3239091941daf2188238591991d922163238991761d642140236791381d332130232991e81c0b2111238a90a01cd520bf22f88f5c1ca0206622838f231c5a200422218fa11b0920a021168e0e1b971f4d21a18dc01a361f0421638d8b1af81ecf20cd8c9a1ae71e8920448d381ab41e8120908c261aa41e4620ab8a261aa41e4620ab8a0000d61a461c00000000d61a461c00009223d829602be39a1524412b762c2a9b7e24f42be92c3b9cff24642c7c2d8b9c5d259c2cc02db59c26257b2ca82d5a9ce324232c422d229cd324692bb32c639cb224ba2a3d2cb89c74243e2ae42b7a9c5424df29672b7d9c3c249529142bf99b1b245e29d02af19afa232b29872a3d9ab823f5284c2a4c997923c028032aa69816238428ba29ea97df22442870293c97b92216283d291597a322dd270c29fd96a622a427e7286d979b226527bf28609769222827a22829973622f0268228ef96f321b62661284396b6217f2649280396762142263428c0953a210c261b282b951f21d925032811950121aa25cb27f394fd2086259427ef94da2047254c27cc94ba200c25e926ad944b20852426263f94fe1cdd210b24f0903d195a1ffe20d98c8d1a811f9f200f8edf1c6721f722d190b21e12223b247a93981f05222c243d941a1fe721ff23ef93761eb721bb233893d61d942180232592751d672150236691171d2321fd220991e81cde20b822da90cd1ca6206b22c090c01c7a202d22b2908a1c592003223390551c2420c7210290131c01208e21058fb91bb41f3c21a78e211b361fe420af8db21ad81e9520578d5a1a851e5620118d571a6b1e26200f8d041a301e30206a8c0e1ae91dbf1f718c0e1ae91dbf1f718c00000000000000000000d61a461c00009223d829602be39a1524412b762c2a9b7e24f42be92c3b9cff24642c7c2d8b9c5d259c2cc02db59c26257b2ca82d5a9ce324232c422d229cd324692bb32c639cb224ba2a3d2cb89c74243e2ae42b7a9c5424df29672b7d9c3c249529142bf99b1b245e29d02af19afa232b29872a3d9ab823f5284c2a4c997923c028032aa69816238428ba29ea97df22442870293c97b92216283d291597a322dd270c29fd96a622a427e7286d979b226527bf28609769222827a22829973622f0268228ef96f321b62661284396b6217f2649280396762142263428c0953a210c261b282b951f21d925032811950121aa25cb27f394fd2086259427ef94da2047254c27cc94ba200c25e926ad944b20852426263f94fe1cdd210b24f0903d195a1ffe20d98c8d1a811f9f200f8edf1c6721f722d190b21e12223b247a93981f05222c243d941a1fe721ff23ef93761eb721bb233893d61d942180232592751d672150236691171d2321fd220991e81cde20b822da90cd1ca6206b22c090c01c7a202d22b2908a1c592003223390551c2420c7210290131c01208e21058fb91bb41f3c21a78e211b361fe420af8db21ad81e9520578d5a1a851e5620118d571a6b1e26200f8d041a301e30206a8c0e1ae91dbf1f718c000000000000000000000000000000000000802087230000262cae2f7d303aa59f2c9c306a3127a7de2d5d324333eaa83331f735073785ac45329a36db3774ad42329836ef378aad8431ab35e236b5ac2d315035613641ac8e30a7349235c2aa4f2f25333434f5a8882d3b3155329ea6c92c4f305b31a8a4042eab314c3247a5b130bb34b2351ea81130f431203265a7fd2fdc30fe30c6a73f3010327a32fea7ed3147367d3703a90430a9325c3388a6e52a1530e33064a1c82baf318f3298a0d32c5c336a34c59a782c14336834900c092d4f334634b693782e2a34cd34d89f6f313435c9356ca8fb31a234e634ebab0e3140322c3256ab453030312c3156aa392c2d2daa2dffa53025a428fa290d9d4e234a29192b03994c214728b829ee965c1fe924a6269494011fe22326255b94261e2a23a824a693671e4023d924f893691e2f23ad24fa93ad1dbb2264241093531d73223c24a092b61c0c22f723dd91841cc2218b239e914c1c6e21192312910a1c2b21d322c490cb1bf82094225a90681bcf20582223903e1bab202a22a08fe11a872002223e8fb81a6920c921a68e801a462094216d8e3e1a162044212d8e111a841fd8209d8d151ae81e6d20a18d3f1aa11e2920618dee19b51e3f207d8de819cd1e2a20778df1185b1e2920938ced1ac01e5520da8e000000000000000000008020872300000000802087230000262cae2f7d303aa59f2c9c306a3127a7de2d5d324333eaa83331f735073785ac45329a36db3774ad42329836ef378aad8431ab35e236b5ac2d315035613641ac8e30a7349235c2aa4f2f25333434f5a8882d3b3155329ea6c92c4f305b31a8a4042eab314c3247a5b130bb34b2351ea81130f431203265a7fd2fdc30fe30c6a73f3010327a32fea7ed3147367d3703a90430a9325c3388a6e52a1530e33064a1c82baf318f3298a0d32c5c336a34c59a782c14336834900c092d4f334634b693782e2a34cd34d89f6f313435c9356ca8fb31a234e634ebab0e3140322c3256ab453030312c3156aa392c2d2daa2dffa53025a428fa290d9d4e234a29192b03994c214728b829ee965c1fe924a6269494011fe22326255b94261e2a23a824a693671e4023d924f893691e2f23ad24fa93ad1dbb2264241093531d73223c24a092b61c0c22f723dd91841cc2218b239e914c1c6e21192312910a1c2b21d322c490cb1bf82094225a90681bcf20582223903e1bab202a22a08fe11a872002223e8fb81a6920c921a68e801a462094216d8e3e1a162044212d8e111a841fd8209d8d151ae81e6d20a18d3f1aa11e2920618dee19b51e3f207d8de819cd1e2a20778df1185b1e2920938ced1ac01e5520da8eed1ac01e5520da8e00009b17841f000000009b17841f00004e2d0e3102325ca8c22eab32d0334faab03086343c35c0ac663342374b389daf5f343b38f5389aaf623466380f39c3af0f34f237ab3852af1034c737a73810af9a332b373d3894af0131dd34a33583acae2ec432fb33bea8a02dbc31d432d5a5be2df431fa327da4e82ec832e7330fa6fb2f8c32333323a8503070320733bfa897303933fe33e7a8d9303834ba3407a9e130d7334d345fa95e309a322633f3a8ae2a2b30f7302e9ee528242f5a30ff8897281b2e622f72169828172e582f6518cd29ee2e21306713a4302b325432d9a9f3306132703257abe1301a325b3265ab80305e31523141ab582de72e212f38a870280e2b2e2ce0a140249e29f62a1a9a3922c828f829c295a221c427f228da948b2068262a283494eb1f2625d0265493fa1e7324ed255893f71e2c2451255593571e9f231425ad92c11df422a8240e92491da6225f2491910a1d622241244e91e01c232214242291af1ce021ce23ee908f1cab21822317916e1c6f212b23aa90491c3521cd2283901c1c012176225390bf1bd0203322aa8f5a1b8220d621458fcf1a3b2085214d8e671a06203921838dea19a01fe420188d8d19381fa9206d8c5119f01e73203d8c7819e01e3b205c8cb7185e1e2720868b1a1a521e1620668b1a1a521e1620668b00001f17ed1f000000001f17ed1f0000c22d9331bb32bba8c62f9f33763481ab84312535ea35adad4134cc37903883b0f8347c382e39e0b0f934a638583953b08e342d38da3808b086341338d83839b04d34ba3787386db0b7317b3545363eadc62fdb339434e3a9362e57329b336fa7832dc631e8325da5a22ddc31f6327ba5952ef331b5329ea60b3083323a3352a895301833c23331a9af304133ec3375a9ab301333993395a9a630a632143390a965302e329c321ea905309231e4310ea7cf28b72daf2efa972929a32dac2eee95123020313831eca7ad30e931e0317daafe300c320a32e2abd030a4318c31c1ab9b3065315831b7ab7c2d132f472f55a8fd26c32ac82b3f9f42245829a52a1d9a9922322854295e973e227a27cf285e97c821ea268c287596f620f625f3278a9541206a25f32606956c1fe924912662940b1f852413262894d71e352473250994391e4923a124be93d11da1223d24de925f1d5d22142457920a1d1322de23f391a21ccd21952378914e1c8e215523cf900b1c4021fa228490b61b0221b7224e90731bd1206722d88f611b93201d22c58f551b5b20a921418f2c1b0d205921188f0f1bb01f2321888edb1a861ff720588e681a591fdb201d8d571a511f9b200f8dff18ce1e78200e8a3f1a8c1e2c20c78a3f1a8c1e2c20c78a0000c318d41f00000000c318d41f00000c2ef231373329a9c42fb23383345fab4931ff34c8355bade9337e37633812b076342738db384eb064343738ed384fb00b34a437813839b0163494378f38c1af023464375638feaf963177355436dbacf42f0634b634e7a9402ea332fe337aa7222dac31d332ffa4dc2c4e316232baa4422d4231373249a5b12eb7317732f0a6483096323a33daa8b730f7327933a4a9ca30eb323a3309aad8309332fa326aaabe302732853295aad430dd31013202ab0031c231bb316cab0631ae319831c6ab0a31b6319431f5ab1031b9319c3114ac0931b8319c3138ac0b31af31913163acbb304631153130ac792d312f712f52a82f27092b252c399fe324ff283f2a549b302356287a293e98e9222828452914989a22ba27da285f97772191265b281b96a120ba255527e0944d2038258f26cd947d1fc52405262e94271f55247b25fc93ab1ed123f52472930b1e6423b3242293861d04237a248592451daa2240243892071d67221b24f091e11c1122e423c391a21cc32196237891871c7f214b23a291741c1f210d23fa90691ce220c922ed90511cb92096228c904f1c7b204b224390721b35207b21e48e921acb1fe020148e2e1a891fcf20538d211a771f9820e48c2f19ef1e93209c8ba51ade1e6f20078ca51ade1e6f20078c0000711f2a2000000000711f2a200000332e2d324e3364a99b2fa033773438abf630dc34a23507ad2e331537263881af1034c737a038d8aff433e637b3384caf563328374e38f7ae83332e37563821af4f33f5361a3867af4431523534367eacbf2f0634c734a0a9112e9832053442a7222dc231f53229a5a32c24313d3283a4662ccd30ba3148a42e2ded30ca3134a5c32e77311632a9a763306332da32aba9e7309e32d232cdaae4308832f532f1aafe305732963268ab123121324332d8ab2131073201320dac2831e731d0313cac3c31d631b33162ac3d31cc31a3318eac3431c1318b31b0ac3f31b9317731e5acca303231e8308cac782d7f2ec42e7ea8e925042a252bc09d6524c628e1294f9a752363288829e198722341285529de981823fd27e7286a988e21c0264f28ea969620d125a0276995042064256227be9426201325b3262995aa1f9224ea2586940c1f2c2437252994911ead23e124c093121e4223b7242a93ba1ddd227f24c3925d1d842249245492ee1c15221224d191981cbf21b9232191631c7f2153239e90271c3c21fd221b909e1beb20aa220d8fe71a87200d22638e801a0b2052219a8d331a8c1f0c21578d111a6e1f0f213a8d3e1a7d1f0521fb8c921ab01fde203d8de419611ff320148d4b1b801f1021d18d4b1b801f1021d18d0000da1f5f2000000000da1f5f200000d12d04321b33f7a80b2f3f334534b0aa9630b934783593ac7b32c536df3790ae463333374a3805af34334b376738d6ae93329436073873aea8329736e23751ae793260369e375aaee9300b35003659ac442fb333963481a9b92d3432923308a7de2c6f318d32bca4612ce830ef31f7a3ed2b80306d31f4a2d52b5d304231dfa2a02c8230513180a4c22e5731e431dfa779301e327a3235aaf030543283327bab0e313f325a32fcab363131322b3248ac513127321a328aac623120320832aeac6d311a32fd31e4ac74310f32e73100ad75310a32d1312dad8a310c32c7316fadd4305c312a31e4ac7e2c192e632e87a78e257129c82a689d2c24dd281f2a869af8237628d929779943233c287b298598c3220a280f29359818224827ad2832973e2166263f28309691209d25772764950b201825a026c694e81fbb242b26aa94fc1f8924da25b794521f2e2459255294791ebd23f324a493d81d23239a24e692621dbe2256245b92151d61221f240092cd1c1622e423ab91891cc2217e235b91501c72211523d190191c2521b5229490db1bdb2054222390621b9a20ec214d8fe91a4e208521648e871a1a204b21a08d5a1aea1f2d21798d901ad71ffb203c8d6b192c1fee20f38b491ad21e8b20d28a491ad21e8b20d28a0000ad20212100000000ad20212100006c2dc031cb3274a8932e1733333408aac02f3234e8349bab3d31cb35c53639ad573275369e3738ae7d329d36f93728aed931f135473775adb031c935f33638ad46316b358936ecac2e3098347335deaa992e5a336934caa8422dfa3154334aa6b32c60318932e0a44a2ce730f8312ca4662b55304b31baa2d42afd2fe73036a2502be92fdd30e2a2332c1e30e6307da4912eee3069313ea88b30ed311a32e3aa3c315d32633262ac6f315a326632b9ac763151324332ecac88314632283229ad913139320a325fad9e313232f7319aadac313132eb31d6adab311032b93103ae8430f930bf30caacf92a062d512d65a59e24c829a42bcf9b3424de283d2ac499c3236b288429d498312324282229b598a022a427ce285598f12112277c28c69763218d263428b496fb20fc2599278496b2206525db262496542000257d26aa95c61fc4243026d694381f7124ee257e94b51e21245c252c94411e7423d0246293b51dd6227724bc92461d61222c24e391ec1cfc21d6232f91931ca5217d23d190631c642129239e90281c2d21e7226090e01bef206d22ca8f631ba420f8214e8f291b6b20ad21158fd51a29205221c28e731a03203121f88dc91ae81f0e21d88de1196d1f2721e18b3c1b0f1fd1200a903c1b0f1fd1200a9000005320b320000000005320b3200000212da731bb320da8122ed832123460a9342f1c34d534f4aa1331ec35f93624adff317e36ae37c9ad03329236fa379cad8931fa354d3757ad6f31e035043728ad05317a359e36edac023082346835d8aa472e1e334a34a8a8fd2caf31183372a6632c16314d32b0a4e82ba930c331f2a3552b40304031e6a2e02ac92fcd3040a2412a322f64307da1202a272f573060a1862b852f6f30cda3f42d7230c33022a88230c031d931b2ab613155325632efaca7316d3254325dadbb3176325c32a0adc53174325432d8adde317f32453239aef0317e3237327daea7310e32f13145aea52f5f3050300eacca28072c892c58a2d32441298b2a3c9b652403295a2a7899c1238528ce29d398252340286929ad98982204281a291a980a226527b92883976221cd265e28b296002161261f283996cf20de259d274a965a202825af26b295d91fc824282622953f1f7824c925be94c01e2d2466256a94711ed6231a2537943a1e8823da241294f11d29239924c693771dc02258242793161d432205245492941cac216b23b3917d1c2d21d8224c91331cce205322b090571b7d20f821bb8f051b5520b021f18eaf1a0d204d212f8e891ad11ffa20a18d901ac01fb820d18c151a531fab20138cf81a5d1fe8201e8df81a5d1fe8201e8d0000a31f582000000000a31f58200000e62c9e31bf3294a7d12ddb32193456a9202f3a340735feaadb30f1351437ffac8c315a36963771ad95317936f03764ad3331fd355837daac3531f2352837dcacf430b835ec36c8ace02f96348835d9aa1f2e15334634bca8e32cc7312c3301a6252c053127322aa4962b89309531e6a2f82a29301d31e5a1442a892f9e30e6a0c829f82e433056a08f29892e0030fb9f68296b2eed2f3aa0872a7e2ec22f65a3062db82f44304ba7123039315e3135ab77311132fa3189ade23185324f3226aeec319732623261ae08329a324532b0aefb3183327c32d2aef73098316a31beadeb2c6f2e972ebfa813262c2a572b4d9e6c243329852a39993d24f528152a46990824b528ef2988998b2378289e296b99252323282729e69846227127bd281a985321c3267128f7960f2140261b284b96c520a82538273d967d204025ab2695953f20ed2465264995f41f9e2416263395861f7a24ec25ae94181f4c24b3256a94941e0c246e251894021e7523f4247a93a11de4228824a5926c1d7c2241246792431d2b2214243692211dc4219d230e92fd1c2721ba2292911b1c9220ee2153905c1b7e20c121d08e671b6d20b821618ed61a5c20b821048d441b6520ac21558dbf1a3d208821f48cf51aff1fc021538ff51aff1fc021538f0000101f412000000000101f41200000fb2c6331803255a8482d7d32ce33d9a8872e1a34e7344daa8230d635ff3692ac273135366937e4ac1e313636a2379dacb930bc35093768acd330cb35f93681ac9e309435cb3675ac8d2f77347035ceaaa72dc732243449a8962c8e31f132eea5332ce3300e3229a5ab2b5c306a3138a4d02a0630f530a1a2292a492f803067a16429942e103063a02b29442ecd2f0aa00e29002e8f2fe79f9d28802dd32e369f9e283d2d442e0da0ae2ae72dbb2e51a4cd2df62f35300ca9403019310e315fac0931b3319d3195ad3431c0319b31f0ad9b302731f93066adc42d0f2f0c2f1eaa8f28be2b542c9ea2b4246929432b5b9ba4244a29f52a5d9a3c24ef28542acf99d92393280a2a22995523432897298f98aa220428252926982d22a227d328af97b4213427942819977921be264d28d096fa201f26e32783969e20a12541270a968e203e25d22640966020c924562601962e207c24dc25bc95d51f202470255f95c81eb1231025a7941c1e2623be24fe939a1dcc227e24f892431d6d2233248c92de1c1822f523bf91a11cc02188232b91481c60211523c890ce1bfe209d221c905b1b99203922468fe71a4c20ee21638eb21a3220b621318ed51a29206b21e28d421af51f5521648d6c1be21f2b21de8e6c1be21f2b21de8e0000cb1f5a2000000000cb1f5a2000001c2c353148323aa6f32c6f32c93376a81f2e0634cf34e8a909308f35bc3606acb130e735133761accb3000365a3752ac53307135b7361bac63308035a13606ac34306535a1360eacd92e66346235bca91d2da332143443a7202c6431cb32cda4552bb530e8315ea3aa2a2d303a3146a25e2ac72fd43063a10f2a572f8b30bca05d299b2e113032a0d228f52d502f3b9f8c28932dea2e879e4428362d8d2eda9d23280c2d322ead9d0528dc2c012e089e6028a82cf92d42a06d2a312d072ec4a4172c012ef12e3ea7642c472ee42e3da8412b722d052ea7a685280e2cdb2c20a2ee24072abe2bb59bcc245729d22a479ab92405298c2ac89a4024cf28432a1a9ae0238628f329a8997623542898295b9901231e285529cd989e22de2702298a980b221527882825986521822653286797a6201126202861967d20b925bb2728964d205725ef262d961720f3246e269c95a91fb02419264195271f6924c225e994a61eff234b255994f61d1a23af246a934f1d462225249a92fe1cdf21dc23e591c61cae219c23a3919e1c7d215c2328918b1c62213823c9907c1c2e21f922b990971c3221c5228a90691ce8206d221590101c8d20d921008f631b5f206021e58dc61a34204d21678d051b00206121b58c051b00206121b58c00001120782000000000112078200000c22b27314232e1a58a2c3332893318a8a72de533c03475a98b2f7735b23686ab4a30a635cc3601ac6b30c03510371fac09304f35913667ab0e30523576364fabd82f34357a3672ab792e3f344e35bba9ca2c78320634cca69f2b36318d328fa4fa2a8c30a53175a3892a103013315ca2172a762fa3308aa19829e22e4930baa01a295a2ee62f27a0d028f52d672f879f7d28a12d172fbb9e3528432db52e0a9e0228f52c372e809d84278e2caa2d659d62273c2c3d2d899d62271f2c222d029e0427fd2bf12c619ed526912b9f2cff9d2b26122b462c059d4b25822a132c9a9b63250f2ad62b0b9b2f25c6294a2bc69b86246429ca2a7e9a6e241529682a149a0a24c428032acd996b2375289c291799be222e283d29a0983822e42707291198bc213d27a42880975c21a0263d280297e8203a26f6276b969f20db2582270b96562082250827ac95172028259f269c959c1fc7242626fb94f71e6924ae258e94781e11243d253b943c1e9723ea241494281e4823af240794f71de92271246c93a81d7a223e240a933a1df721ed238092a51c6821352330911c1cdb204d225390c81b8a20ce21b38f821b5f20bf21f38e1a1b5d20e3211e8e4d1b3520c521d28dd719831f2321a88c4a1b2b1fe5205a8d4a1b2b1fe5205a8d00000920462000000000092046200000fd2ad330d7312fa55e2c3b32993398a7582dc933b03412a9172f61359f36f5aaed2f8035a33686ab14309135dc369cab632f19355a36e5aa802f1e353d36a4aa2d2f1435543677aad92d2a3437359ea8862c6a32013423a63d2b13316d32f8a39d2a74308b3139a2222a0a30133161a1a929662f9e30c9a05b29b42e303087a0f928152ea52f34a09928a42d1e2f309f5528402d9f2ec59ef327d72c1b2eb59d7b279c2cc92d229d31276b2c812db59ce226252c2c2d819c7b26b32bd92c3d9c1b26432b992cfc9bed25f52a562c419c9425b62a2b2ca79b8b25752afc2bf59b1b25ea29702b019bb3248129fc2ac09a322411297f2a069a0724cb28382a8799a6239c28f829409950237028b4290499022343287e29cf98852206282f297998fc217d27c6281b988221e92671288f9735216f2628282497fe200a26bd27da96ae209e252c276c9678203725ad266b960a20bc242126cd95471f5124b125fe94d71eeb234d25b194401e4423d8244a94961d9c2264244e93341d0d2201247a92ca1cad218323a891a81c8021492333919b1c4c212423da909c1c1321d4228f906a1ce02071221690211c9e202422a48fff1b8620e321668fdf1b66209d21c88ee71a2c208721818dc41abe1f5521f78cc41abe1f5521f78c00008c1ff91f000000008c1ff91f0000562a89308331b3a4df2be3313433f8a6fa2ca833a134a5a8ac2e5a359c3656aa932f8135a936d4aaa82f8135ce36e6aae02e033541364faaf52efa341a3662aa952ed6340e360aaa6f2df833f83477a85d2c1c32b93356a6112bdc3044323aa46d2a6130863175a2e029e82ff83057a16a290f2f693094a01529652e053022a0b328f62d942f589f6b289a2d202fa09e2928262d842eb59dc927d42c062e579d5c279e2cc12d949ceb26512c682d159c9126042c062dc09b5626822bb72c259c2e262f2b972c3d9c0d26e12a6c2c589ccb257f2a262c879c5e25152abe2b329c0825cf29722b3a9ba8248029fe2a639a63243f29a52abd993024ff28562a7a99cf23b828032a5c9982238b28bf2927993823552882292f99ea220d2829292f9997227b27d32827993e22f62683281599e32161261e28ca986421ea258d276398f42094251327be97a5203a25a626f7961920d8243526e295881f7a24d2256895e61e22247625bb94681eab231a256594d21dfe22c3249d937f1d5e225d24d692281dd021ff236b92ed1c63216823d091941cf920e6221d912d1cb5207f226590de1b8e2058222590ad1b59200f22988f9d1b4320cb210b8f9b1b1b206b21098f351a6d1f5c21be8d9b1b481f1c21188d9b1b481f1c21188d00002720652000000000272065200000af290f30ee304ea4392b8531c9322ba68d2c5e337f3408a8212e3135763687a9112f5b357f3641aa252f5e35a93636aa532ed334123680a9532eae34c83580a9ee2d8334a73558a9fb2c9533b734dea70e2cff318e333da5812acd302732bfa2022a3e30553145a1b829b02fdd30a7a06029022f72308ca019294d2e0730a3a0bd28c72d452fc3a04a285b2dab2e879fc227f82c352e119e57279e2cd02d819d0127562c7d2d079db2261c2c2c2d979c5f26d32bea2c2b9c23267a2bbb2c049cd725292b872c449b8c25d32a4d2ce79a3a256d2a0f2c809a0325182ab52b3d9ae024d329612b119ab12494291c2bd799a4245929de2ac6997c2423299e2a94992124db28462a6799c823a2280c2a56992b236328b52926999c220c285a29bf983d227927f4287a98ac210227aa28c897562188265828aa97072115260828e69678208b254e276b962e201925af26bc95b11f9b2426264695f51e2d24a025c694501e8c2313252194ee1df322b524c193ac1d8f225b246c93791d14222124d092361da221b6232792cb1c49213d235b917b1c0921df22b890311cc42081222590381c8d2034222c905d1c5920d821e090781c48208f21fe90881c3c2050210f91241cf21f362119900f1c821ff620fe8e0f1c821ff620fe8e000055219923000000005521992300004a283d2ea82f45a1402954304231a0a3672c9933b934d0a6ec2d5b35bd36c6a8942e2e35463682a9582eff3424366ba9992d7634a635f5a8c42d523469351aa9672d2d344935b2a8952c3c338b3417a7ac2bd1316e3315a5842aae300e3261a3ea292330493160a17d29952fcb30a4a01b29f32e6630a79fa928372ee82fb19e35288a2dfa2ec69de327142d5f2eaa9d8227b62ce42d649d3e276d2c882d339dec26392c4a2df89ca326fc2b072d8d9c3926842bc42c789cf8251d2b872c499cb225c02a552c179c73256b2a262cd29b32251b2ae82b769b0225ed29a52bd59bd624cc296c2ba29a9424a229322bfd997d247129fd2a4c9956244729c82a65990d2414298b2a0a99b023ce282b2a079936238528cd292d99ea223e2873292f99a722e1271829339901222827c428b1985821802648280198c620f6259527db9651206725e22633962520f1246e26f395bc1f8f24fc258e95421f2b247b25fb94841ea623032543942b1e2323ae240994c41dc42267242c93791d6e222a247692471d0e22dc233a92091dae215623a091b41c3221ca2241915d1ca1200c229890191c54207d2151908d1b1b205221f38f5c1b07204821478fb51be41f2a21228fdd1a961f3a21ca8eea1caf1fdb205094ea1caf1fdb2050940000bc1ff72100000000bc1ff72100000128d42d7e2f0ca15926b72d4a2fd0a0cf2a76322734b4a5db2d6135d73617a9b92e8635c83686a9582e5f35c4366ba9d72df1341e3643a9ef2dda34f43541a9982d8f34a43521a9de2c683396344fa8422b98311e3393a4d8296d30c831afa15d29013017315c9f22296f2fc130639ed128dc2e6430ff9d6728242ed22fc39df227452db12e749d8f27af2c092e6d9d2b27722cb52deb9cdb263d2c622db39c7926082c132d3c9c3a26a92bd62cbf9be625512b9d2c579b9d25ff2a6a2cfc9a6825c42a432c629a2025822a1c2cba99e6241d2acc2b78999824c0295d2b2199652492291f2ba09856247129f22a90983c244e29c92a759817242829962a4e98d8230129602a61989a23dd28382aba987923b528032a5d990c237c28b92982992d2222285d29d498b9214b27de28799840218d265b281a98ca20ee25b4277c9765204025db2697962620b824582638969b1f5b24d8257695bb1ef5233a259e944b1e6323dc245194081eec22be24e393d61da2228524a393cb1d49224d243593c51d082216242d93821dbb219223db92291d4d21db221792a31cf12053222d91931cc0201022d1909e1c9120db212891931c2d209a211b91861cc41f38210d91ae1c2f1fc3205093d81bf31e0321428dd81bf31e0321428d0000741d202000000000741d202000007227092eb12fc3a1d9283c30583199a44d2b85320b3447a74e2df03438364aa91f2e1f354b36b6a9032e0f355d3683a9892db334eb3514a9bb2dbb34cf35fca8572d9434c235baa8742c5e33a4342da7ce2a6b31e23265a430290d303c3163a0db281d2f7730a99eec28dc2e60301f9ef428e22e5730299e5928f12d6c2f229dbb26bc2cfd2d309c5f26382c492ded9b3726f02bf12cbc9b14268e2bc92c909bfa254a2ba32c709be425fc2a742c559bc925b12a4a2c919b9425652a1a2cf09a61250c2ad82bb19a2925d5298c2bc399e624aa29512bd998c02494292e2b18989c248b29212bf1977e248029122bbd9769247229062b999751245c29f62a709732244129cf2a269814242529ad2a1499d223fb28832a9d997723cd28362a139af722512889291c9a86225d27cf28249a582266261128f9994521a7251d27cb980620ed2452268c96711f8024e425d1951a1f402496251995e31ef4234025b994851e7323e62444942d1ef4229d24af93921d7a2254249492311d00220824cc91f01ca02195233391b31c3a21f322f390701ce6205a22ac904a1c9220e92184901e1c5c20a12156900a1c34206d21fd8fac1b08203e21968f9b1bf71f1a21868f121b8f1f0e218b8e2e1b571fe4202f8e2e1b571fe4202f8e0000651ca71f00000000651ca71f00008327102e9f2fb2a18c2818302c313ea4822ae1314c3398a6fa2ca834de3547a9f72d01352b36daa9e42d043553367fa96f2db034e335fca8b72dce34f335e1a8582db434ef358fa8462c3d338c3434a61d2a34319332baa2de28ee2f2031eb9f4728832e1f30999de327b42d3d2f679c8d26792ce72dcf986c24e629ba2b5d951f25552a2f2c11996625682a1e2c109b4725572a0a2c3a9afd24242ae42b9299e224ee29b42b2499c024d029932b0099b424a629612ba798a5248c29352b989882246929042b319775245929f52a8b9678245629f92a8f9688245f290d2ba796b9246a292d2bee96b7249629962bec969124dc29fa2b89957324fb29172c65954f24f129102cc6952f24cd29b72bbe97ec236c29112b2f99f222a528352adf99db21cd27302953992f21b52654288c989020f725db276d97652096257b27279738202825e1269896cf1fa3243826da95001f27248f250695661e772309252f94c51dd822ac242d93651d542268240692321d01222124cd913d1dd221f5238391551db221a223f491231d8c2143236891dd1c2f21ac221f91491cc22039223d90121c6520112207909b1b2b20cf21098f891bfd1f5621f98e241b901fcc20108f341a081fc320588ddf1ac31e84209b8cdf1ac31e84209b8c00005e1fb820000000005e1fb820000075259d2cc32dec9fd9262a2ea42f2ca2a72830302b31a4a4872bb132243462a7832df7343a362da8482eb93504371ba4842efc355137b2a39f2ef1357f3747a85a2dc134193616a7982b8e32493464a35e296f30c1315ea0c928bc2e3a307b9f9a27402da42e759d6526682cb52d639c66258b2bbb2cb89a8124202ac22b5299a724b5293b2bcb99b0249e292a2b229acf24a729302b999ae72490291e2bba9ad4247329f82aee9aad243e29b92a6a9a72241d298c2a88994f2403296d2ad0982124f128582aa497ee23ed28512a5396e9230129682a4d95ff230c29892aa292e3232229b32a0b8ffd235129df2a1e8a4024b229492b5704a7246c2a0f2cc084c0240e2b892c7591e2241a2b982cd4987024772a342c819be8232729b32a199cab22d3274729219b4e210f262428299986205e253327f0975720eb24752610978c1f4524d525a995a21ed1238125c394111e5b233b25f093cd1dcf22da243893961d5922422498925c1dd621a5235392241d7e215223be91e61c3f2116237891cd1c1121f5225d91b21cc82093223e91541c7120e3218e90041c2d2071213b90671b0f204b21538f511bfb1f2b213c8f3a1bda1f1421b08e631bb31fcd20d58e9a1a121fab20af8dd31a731e5620508ed31a731e5620508e171c1521a420b288171c1521a420b2888422af285129ae982926292d662eaca06127ad2e4830a7a2522831303c31eda3c7292b317632d6a4b02abe3134332ca5372ae7318b3383a43a2cb533d9340fa5532d53347e355aa5312bac316d3312a4a427e92dcc2fd1a03526312c942d6d9fa926092c252d1f9fc025892bcf2c999d0825902a262cbc9ce324d229742b999c89244929ca2a6a9caa241029822a6f9d8924d6283a2a6d9d5824a428fe29819c18247528c6292f9bd423512895291e9a99233928712975996a231528452916994c23f3271d293d994823c527ea283a992223b627dc281f992723d827e42873987c2317282c2967970f2365287d29dc918e23ed28302a4512a524372b762c69178626152d952e941473263b2d1b2ff899b024aa2bf82c039db922ef284c2ad59bac21da26a428e199a5203e250227f798c31f8924c125d096921f222455256f95b31e7e23f0249894701e1323b1246b94361eb02272244294d71d4c223e24a493911df8210d24ed92561daf21c3234d92191d6a215b23b291ef1c2121fa228291b91cbf208a22fa907f1c86202b22bb906d1c5d20d621a990411c27209b2135901e1cfa1f6f211290bf1bb11f4c212b8f6a1b671f2721dc8e231b2d1ffa20268e271ab01ed720e98c5a1a6a1e632045895a1a6a1e63204589a81d111f7d1f6b8da81d111f7d1f6b8d1e223326e826969804257a2c912d1f9f2626762df52e27a1ea26752e033003a21428652f9230d5a25428de2fed308fa2a027d42e4e30cfa036249c2bbc2ca39c131e7a26072844971a249f294d2b909d5c263b2c5f2d50a0fc251e2c442d8b9f5625562bb22c0b9e1025ab2a322c409de224302aba2bc09ca024ac29202b809c4e242529892a309c3424cb28192a399c25248e28c529089c1c245a288129219cf1232e284a29bb9bd223152824299c9bbb23f7270d29869b6f23c227f128c29a3b238f27c628589ad72239279b289199ff22f62682283e9942224b262e287e98e521ac25fc270b986e221626ad273498962132250f269896e6222829392a43978428172f4c30a09a892b7c31283335a0dd23fd297d2b349c842127242326b89906213924fe258997a91fa8235e250395361f8b232d257d94601f4423f124d394f61e0723af248d94041fda2290245e947d1e8822622409942e1e4d2234244c93af1def2103245992681d892181230a92111d2a21fd225591ef1ce1207e223291ab1c9d202922ea90781c7220e721b5903b1c5120be212f90031c392096216d8f9d1b142071210b8f3e1bc21f2b21b38e181b5a1fec20908e121be71e90208b8ed61a641e5820e38da31b441ee41f0590a31b441ee41f05900000031b1f1c00000000031b1f1c0000b923622a012cdd9c9c24012cf92c659eeb24632c762d759f95250b2d452e3ba0fd25592da32e58a0e825302d892ed29f0c257a2caa2d5c9ef223f02a462c019da7229829032b839cc023b929632b809da124712a1a2c229e85245a2a142c1f9d5324092ab32b589c3e24c429472bb79b2c248329f02a539b13243a29992ae49a0424f928442aca9af823a528e229bc9adf2360288529a89ab1232d284429429a6123f6270a29c5992623a527d8285c99e7225e27a7282c99a62225277e28c6986422e4265e2896982922a7263a283a98ec2174261d281098ae214c2607286e9769211b26db2763965a21fb25be2751964421d6258a27379631216b25d526cc95e31efb228e2411949614c01c5d1e1f893f18521cf41dbe8ca11cce2002222b917c1e2f220424a7935d1f9c2260245894071f932249242694891e73223424b7931e1e302213243993cc1d1922f8237a92a61de921c0234f928c1dbc2186233192681d8a2164230a924c1d5d214523ea91031d25212e234691bc1c00210123af90551cba20a0224990341c88205122c78ff91b49200022608f841b0920a1217a8ef51a961f5321ff8d931a341f0821aa8d651ade1ece20828d701ab81e76208b8d211a921e66207f8c2a1a8f1e2820798b2a1a8f1e2820798b00006c1bd51c000000006c1bd51c000000248c29e82ac99ce023cb2a412cb69c2f244a2b812c689d6424cf2be12cac9d91240f2c032dc29d6924d42be82c6b9d2a24412ba32cfc9cec236f2a212cbe9ccc23bf29482bca9cdb237429e42ad39cdb235629ca2ab39cbe232629922a639ca123fd285c2aab9b7023d928242ac39a2e23ac28f329129af2227f28b3296e99a82251287629fe98ae2226284229cb98b12206281a299798ae22cf27f7289598b2229427d928979899225827b7288698642222279f2862982522e4267e280598e921b1266128bc97bc217e2645282397842142263028dd9654210b261828a1963a21d125012880961521a125c6275396fa206925a5273196d620242535270496a020a1242f260d96df1d8b2276244e9378194e20bd21758ec7191b202e21d28ea91c11212f228091141e6d221a249093231f67223624ac94a71f482222240195131f0222f523a094571ebc21a0232694cd1d8f2166233893741d5b2135237092111d1421e322a991dc1cd220a5226d91bc1c992060224a91a81c6d2025223391811c4f20fd21be90591c2720c3219490171cfd1f80210c90bd1ba51f2c21298f221b341fd620998ec41ad81e9220428e5e1a8a1e5620e58d561a6e1e2020dd8df619471e2b20228d0d1a0b1ece1f998d0d1a0b1ece1f998d000000000000000000006c1bd51c000000248c29e82ac99ce023cb2a412cb69c2f244a2b812c689d6424cf2be12cac9d91240f2c032dc29d6924d42be82c6b9d2a24412ba32cfc9cec236f2a212cbe9ccc23bf29482bca9cdb237429e42ad39cdb235629ca2ab39cbe232629922a639ca123fd285c2aab9b7023d928242ac39a2e23ac28f329129af2227f28b3296e99a82251287629fe98ae2226284229cb98b12206281a299798ae22cf27f7289598b2229427d928979899225827b7288698642222279f2862982522e4267e280598e921b1266128bc97bc217e2645282397842142263028dd9654210b261828a1963a21d125012880961521a125c6275396fa206925a5273196d620242535270496a020a1242f260d96df1d8b2276244e9378194e20bd21758ec7191b202e21d28ea91c11212f228091141e6d221a249093231f67223624ac94a71f482222240195131f0222f523a094571ebc21a0232694cd1d8f2166233893741d5b2135237092111d1421e322a991dc1cd220a5226d91bc1c992060224a91a81c6d2025223391811c4f20fd21be90591c2720c3219490171cfd1f80210c90bd1ba51f2c21298f221b341fd620998ec41ad81e9220428e5e1a8a1e5620e58d561a6e1e2020dd8df619471e2b20228d0d1a0b1ece1f998d00000000000000000000000000000000621bd324cf269890892a4f2e382f44a53e2c2d30c0303ba86d2c79304731a0a8b82d1c32663311aad42f3e340b3527ac8e30d93492359dac6a30a534793555ac992f0734f03417abb82ed5322034d7a9d02dce31df3297a8e02cca30d2319da6cf2cae309f3172a5bb2ffc33783422a83830e1336e3482a89e2f2831583132a8a52fa130ce3055a81830d231f63182a816320136fc36eca98a305232cd328fa8512ed92f493059a6af29012ecf2e6f9fb428dc2dfb2e5a9ca72a872ea22f23a05d2ea330f730fda522305b318b3157a950305d31b63142aa5930dd30e330baaa6f3099308030dcaaae2f2d302a30f1a9d82b982cf52c71a5b2244a284e296b9c20213428a4295c974424d1298e2b1f9a7c2019285d297196601e2e24b9259494da1f4b23b424a3959d1e3a23ae24c094601e1723a0249494a41db5225e240d94571d6f223324ab93c31c0722ee23d692871cb1216f233692501c65210523ea91121c2221bd225391da1be9207c2222917a1bbc204122a7903b1b982015224590e31a7120ef211190bf1a5620ba21898f8a1a382088214d8f411a08203021fc8ee819371fa820388eb819b01e4520a88da719861e1420988db2198b1e2320a28db819b21e0f20058e9818211ef01fd68c1e1bbd1e49200a8f0000000000000000621bd324cf269890621bd324cf269890892a4f2e382f44a53e2c2d30c0303ba86d2c79304731a0a8b82d1c32663311aad42f3e340b3527ac8e30d93492359dac6a30a534793555ac992f0734f03417abb82ed5322034d7a9d02dce31df3297a8e02cca30d2319da6cf2cae309f3172a5bb2ffc33783422a83830e1336e3482a89e2f2831583132a8a52fa130ce3055a81830d231f63182a816320136fc36eca98a305232cd328fa8512ed92f493059a6af29012ecf2e6f9fb428dc2dfb2e5a9ca72a872ea22f23a05d2ea330f730fda522305b318b3157a950305d31b63142aa5930dd30e330baaa6f3099308030dcaaae2f2d302a30f1a9d82b982cf52c71a5b2244a284e296b9c20213428a4295c974424d1298e2b1f9a7c2019285d297196601e2e24b9259494da1f4b23b424a3959d1e3a23ae24c094601e1723a0249494a41db5225e240d94571d6f223324ab93c31c0722ee23d692871cb1216f233692501c65210523ea91121c2221bd225391da1be9207c2222917a1bbc204122a7903b1b982015224590e31a7120ef211190bf1a5620ba21898f8a1a382088214d8f411a08203021fc8ee819371fa820388eb819b01e4520a88da719861e1420988db2198b1e2320a28db819b21e0f20058e9818211ef01fd68c1e1bbd1e49200a8f1e1bbd1e49200a8f89107e227b24e88389107e227b24e883452c2630cf300da8842d6231483234aa9c2eae32be3308ac6d304634fe348badbf318235903632af7e32393616371eb06c3223360d3712b0c231b435b83607afb430a93472355dad4b2f5e334c3464abc02de9311c33a1a8602db631da32c7a6dd2d4232653314a6f52e73326033e1a7db2fee318c3214a92630d93146323aa95c30bd325c335ba99f30e4336e3461a988303733db3391a9783035328732eaa94c30a231eb31d4a90d308231bb31a0a9133077319831a8a931308d319b3115aa513099319a3145aab930c431c6319cab97306d315531b0ab9f305a316631beab023090309c30f8aa342cb32d0e2ec5a6ba25b729bd2ada9e6a23fb28402a099a8522c728f729b397102233286829629672201127c928ae9416206f2536274d94911e78242226c093cf1e34247c250594401ea12305256193c71dec229824d292431d93224d248c920a1d55222e24f391e41c1f2203241692b51ce221b823dc91921ca8217123af91771c712122238f91471c3421c3220d91241cf7207022e390c11bbf201e225590371b7420c221998fbb1a30206d21168f461af01f2521358eb6197f1fca20a68d7f19261f8b20168d4919db1e5620e48c7519be1e1d20b38c9a18331ef31f428c8a1a341eef1f388d8a1a341eef1f388dde01b82283242080de01b82283242080d12cb330703193a8582e3c32433356ab782f65334934adac1831c63489358bae7632ef35fe3640b06f33d536bf37f4b05333ba36ad37d2b080323536503712b03b311635f33537ae0c300f34bf344bac992ebd320934d7a9dd2df6313c338aa8402d8c31a3329ea69f2d84318832baa6922eaf31633209a8dc2f3532f932d4a87630bd325133c4a98f30fb329c3309aa8530cb32513320aa71306c32ba324faa6c30fa31283247aa7d30c531de3184aa3e3068318631e3a955307b317e3190aac330b231ab31d3abaa30a3319d310eacb430863173312aaca93049311f3146ac0830ab309b3044abf32b5c2d9f2d47a64d25c829d22aab9dde23e528f129a79a6c2211281f29d198f6216e27ca2817986b21ee267a286f97e7201226e827ba9622206f25ff26ac95881fe82486262a95271f8724fe25e994b41e152449259994111e0b236c242a94b11d81222224cf93411d4c2214243593e81c1422df236b92941cd0219d23fd91401c92215f234a91081c46210c230491b21b0521c0228b90771bd220732268906d1b90201b226290511b41209e211690051bf21f3e21d78f141b971f0321738fce1a591fe320bb8e481a381fc620d08d2a1a2d1f89204f8de218b51e6620ca8bd11a921e3020708dd11a921e3020708d00000424c424000000000424c4240000462d3d31253242a9c42ea932c033d3abb32fa2336934c2ac2631e0349b359dae4532df35ee3614b01e33cb36b237a0b01233be36af377cb04a3235366d37c7af47314735353646ae34304134133575acd62e08333c3429aaa72d0b32543349a8eb2c5e31743233a6b22c01310b32c5a51d2dfd30db3148a6772e83313432f1a711302b32b43241a98130933201331caa91308f32d5327caaa33043329032e1aa8f30ee313d320eabab30b631d33186abbe30a631a031caabc8309c31873115acd1309931833130acdc30963181314dacdc309631813175acd1307631453193ace42f7f3068307eab262b2a2df32da5a56525ab29e72a989d7924c228f629909b3b2358287f293199d32224283d29af9860229b27d3285f987a2184262b2883979d20a92534270996482038257b26e0958c1fb924ec25ef94101f442463259f94741ec023e1243894f71d4623a124ce93721dee226a242093311d98223124cb92ef1c4c220a247492cb1cec21c5234592941c9b217b23fd916c1c58213523c891671c052105237a91591ccc20c4226991461cba209b220c911e1c7a2040229990821b25207221e88f871aa31fdb20758e161a751fc120a28d151a681f8420a18ddf18eb1e7920328cb11ae71ea6207c8cb11ae71ea6207c8c00009f208221000000009f2082210000402d5a314c3211a9c02ec232e0337bab862f8b33663487acd430ae3464350caed531b835c0367eaf90329436773737b07b327036613729b0c731f53529370daffc3012350436d8adee2f2434df3425aca82e0f333f3400aa8e2d213272334ca8d92c58318c3293a65f2cc130ce3182a5232c8230783115a5a72ca7308031b7a5542e3631cb3117a8173002327732cfa99e305b328b32ffaabd304f329932a3abc2301d325332d1abde30e531fc3127acf430d131d83163acf430b831a83177acfd30a7319031a8ac01319e318231d4acfd3090316631faace7305c311631f7ac6e2f513030302cab1e2abb2c2e2d8aa497245e29a52a789c3024c728e129d19a7b2377288c299c994b234a285d297899ee22f527f128fa989a219f26322805989020c1257227429633205d252627c3951f2004258426a895521f8224bb250695d01e21242b2575945b1e9723d4242894cb1d1d23a32494936e1db9226c241a93131d58223424a492b31cf7210224d991751cae21a0234391511c6d2136231891131c2721d0228d90961bda206922fc8fda1a8a20f521368f6c1a3b208c215a8e011adb1f64218f8df819bb1f5a21868d291aa01f2221b38d661ab51fe220838dcc19601fe7205d8d641b721fee20e68d641b721fee20e68d0000b620a22100000000b620a2210000f82c34311b32b7a8612e8e32a533f8aa102f3f333e3424ac693072342d3574ad403166356936a8aee5312c3614377aafd3311436183762af2c318035b63665ae9830ca34c53551ad912f1034d034e8ab742eea322634eba9722de331243379a8a22c2a31363248a6262cb530ad31f6a47d2b513036315ca4682b1530f73032a4502c3430f33006a5192eff30953122a81d30ce3134325daaad3010324132d5abe6300c32263242ac03310c32093285ac1331fb31ed31a7ac2131f231e131deac2831ec31d6310fad3731e631ca3149ad3731db31b23172ade6307b31453146ad8a2ed12f1b3085aa9628f52b952ca8a21825d328032a719d4e24a428dd298d9bfa237628ac293d9a6d2336285d29ce99c422fd2706291299e2212427a5286998fa203e26282825975c2075252d2742961f200a257c26ea95c71fbc2422265695891f8324cf252b95fb1e29244925ca94131e9723dd242b94851d092385249393361d9e2241242793fe1c4c220b24da92bd1c0522b9238092761cac214c23d6913f1c5b21e3228e91131c112183221291b31bc72029228c90201b8220c921f58fa01a38206e21f98e581a04203621468e331ac91f1621bc8d601ab31fe220e68d4b19131fd420e68c901ab91e6e20f58b901ab91e6e20f58b0000e820e52100000000e820e5210000d42c1c311a3282a8322ea632c533abaa8e2ef2321b3494abd22f2a34e634b6aca030fc34e935a5ad11317c3567362faeed3050355936efad7c30f3340c3654ad1d3082346e358facf12edb33b03408abd82da83206342ca9032dae31eb32c1a7772c13312b320ea6082ca230a831f4a4102b2930133100a4aa2ab32fbb3056a3cb2a8c2fb3307aa37a2b952fa03079a4692d5730dc30aea7d22f5c319e316daad730fe310b325dac1f3114321e32dcac293118320a3210ad45311432fd3156ad4f310e32e4318cad5f310932cf31c8ad5f31e531a531dfad993013310e3119adf62ca32ed22eb6a8a8269e2ab72b16a0c1242f29862a799c7724a728022a109cc1235c286e294f9a21231a281829cd9980229527c1284a99c42100276d2882982c2170261528c197de20e7255f274d979a204f25b32632973320ec2463264d96981fad241726b295221f5e24ca251f95a41e10244125c494151e6723bf242c94ac1dcb2270246c93301d532228247492ca1cec21bc23a8917c1c88215a234b913d1c4721fd2201911d1c1721b022db90c61be1204e229690821bae200e223190341b7820b7210590ca1a2c205421258f941a0b203a21ed8ee91afa1f0f21d58e92196e1f1321de8daf1b1f1fda204092af1b1f1fda2040920000f2200d2200000000f2200d220000802c0331f8310ea89d2d42326b33dea9f12d9532dd33c7aa392fe733c03468ac4430d334cc3546ada6305f354136d2ad8f3036353436b5ad2030d834f435e7ac8a2f573448353dac712e8333863486aa882d7132d333e5a8b82c7331b23227a72c2cd730ee3186a5902b74307431a5a4ee2a1030fc3009a44e2a512f8d30f0a2e729d32e25301fa2c329b62e1830cba1722ae82e2a3018a3782ca22f423034a6f52ec030f930f0a985308731b2315cac1131f231fa3137ad4831133203329aad67311632e631e7ad6d310f32d6311aae0831a5318531bdad052f39303430acab332ab72c2e2d18a57a25ba29232b549dcb243529942acd9b2e24c928222a889aba237528a229499a312337284b29a0998422ef27fa281899d02133278d285c984421b1264a28e697fe205e261b287c97bf20b72563271e972020fb2462262f96b91fb1240626cb95221f6924a9255a95961e16244425f094591eb823ff24c2941e1e6b23bb249694cd1d032379245a94591d9b223724ad93031d2122de23e192981ca02145234e928e1c3f21d022f691551ceb206922ab91851b9220f921ae90111b5320a221e48fae1a16204b21088f9a1ae81f0221878eae1acf1fb6202e8ef619401f9e20858d3c1b4c1fe8209e8f3c1b4c1fe8209e8f00007e206121000000007e2061210000462cf430ec31faa7472d1d324033aea9bb2da832f733b8aa042f0034c43456ac1930ce34d13522ad833072356036a6ad74305d35583693ad0630fa342136c8ac442f6534663516ac242e743383341faa602d5d32c733d9a8b42c7531c93294a7132ccd30ee3165a5432b5c3062313ba4822aee2fdc302aa3d929222f5d3011a27c29ad2e183056a15a29522ecb2f09a15d29222e8a2f64a14a2a0a2e392f10a4d92a882ec52fc1a4202da92f38304ba82c2fa630d83027ab713017311331dbac873036312a3118ad5f300631f130fdacfd2e39304530f9ab8a2b662dda2d28a77f261c2a7c2bfb9fb4244829aa2aa79b642429294d2a4e9a3424ec28182a939a0624ab28d9294a9a912381289f29ea99de221a2812295e99ff2105278728b0985c21882647283098f6201726e527709794208625ff26dd964c202c258e2672961b20db2444262896c91f9524f825d6957d1f6d24d2259d95fe1e4024a0253e95771e04245d25a494e01d7a2303253894831de02297249093551d6e22422450930b1d122205249992da1c882152235992a21cf2209722c491e81b8a20eb21aa903c1b6a20b0219e8f301b56209f211c8ff21a4f20ac21fb8d181b47208d21a98d451a1c205b21678dfc1b17206b21f790fc1b17206b21f79000007120492100000000712049210000042cc830b7315ea7e62ce9310f3332a95b2d8432d8331caa932ee533be3403acb32fbd34c035c2ac34305235463643ad1e3035353d3628ad8c2fe63410367caccf2e49344e358cabc72d2f336134f2a9f72c16327c337aa86c2c4931833268a70c2cb230bd3101a65d2b3d303931fea4802ac02fd630c7a3ef29eb2e4930e8a222292f2eae2f7da1e628f72d5e2feca0c128d32d422fa0a08e28582da12e49a06628de2ce92d24a08328dd2cdb2df7a0ca29772d652e04a4c02b022e9d2e7da64e2c522ee62e16a8072c042ea22e84a72a2af42c892d10a51c27852b7a2c07a049251d2ad92b789cd02499291f2b389b65243929a92ade9a3e24f128482aa29ab8238c28d629c9990e234228772910996b22f1270e299c980d227e27b5285898822104276928219822217b260f28b397d420f32583273d9779208b250627b4965b202b25a22688963020af241a268c96fc1f5c24a8253e96631f02243b25c695791e8123e724da94f11dfa22962474947c1da7225724e093431d472210243893de1cef21b523ae92a01ca0215f230d92411c4221fa224b91df1bdf209322a6903d1b882045220b90d31a4e20f521308fbe1a3220bd21ab8ef31a34206a21df8e501afe1f5521d78d4f1bde1f29213b8f4f1bde1f29213b8f0000ba20c02100000000ba20c02100006e2b9c30a731d1a6a72cf2312333dca8052d5d32b533baa90a2ebf33b13446ab0d2fa1349a354dace32f34353336e1acb82f11352636c6acf32eb534d7352fac4f2e31343435ffaa6e2d2b33643469a99c2c0e328433dea7fd2b2e317832eca5f52a703085319ba4532ae52fea3091a3102a722f9930ada2a529eb2e4530daa11329442ebd2f19a1c028cd2d252f9fa07a286b2db32e37a03428112d552e609f0228d72cfb2dc79e9227862c972d289e0027372c592db29d3127222cf62c8a9eb726642b8f2c529e2d26d32ab42c9d9ddd25802a222c559d44252b2abe2b749cd124b4296e2bd79ba2245e29d32a8a9b4e24f5286d2a019b2e24b8281e2acd9aab236d28b8293d9a472342287929eb99002315284129eb99bc229e27d328b299fe21c6265128119953214d2623285598bf20f625fb27ba97732096258c27f5962f203425c4268b960820db242d264e96921f8a24e025eb950e1f3e247f254a959c1ebd231d25f594e31dfd229b243a94591d37221f245693fd1cd221c523d892c31ca12176233a92b31c7c213723d991b01c5f211b238991af1c3321e52288910d1d12219b225291791cc8204e22b690031c8420cd216d8f7b1b63206121ec8e8f1a35205421a68d4d1bb01f1621d28d4d1bb01f1621d28d0000e420d02100000000e420d0210000022b8630973117a64a2cc331e3328da8ab2c4532973353a9b62dbe33b234caaaa12e8d348235fcab472f0135053662ac1f2fe334fc354aac682e8f34af359dabe92d13341b3575aa222df632563409a9462cd83145334ca7512bf9302a326ea5b62a5b30633171a4442ac72fd630b3a3cf29282f703065a249299e2e1d307ba1e928262ea62fc7a0a228bd2d252f5ca04e28692dca2ed59f0328152d742e4c9fbc27c92c112ec99e4027732c982d5c9e0a27212c1a2df39db226d22bd12ce09d8226702b9d2ceb9d7c26252b6c2c509e7526eb2a3c2cb29efe257e2a072cd59daa252f2ac82bf89c0225d629692b659c8a246529d82a629b4a24fd28412afb9ad5239d28cd29609a27234f2864299899a22210280b29309923228e27cc28cc985f21ed266b280798162176261928a197cb201f26ce2730979320c3255827dc964d205e25d8267396f71f09256f26f995441fa824f9257295bb1e4b248725d594521ef2231d258a94151e7823cf245e94021e262394241f94b71dba225924d7935f1d582224245e93051dce21c8239192891c57212d23a4910f1cc6204522ca90f21b7320b5217090711b3c209f21d68f211b3720bb210d8f331b2620ab21a98e0c1a791f12215d8ee41ba61e3d202790e41ba61e3d2027900000d620bf2100000000d620bf210000482a2b30303176a5102c9f31cd322ea8652c2e327f33f2a84f2da233a73439aa332e78346b355eabd52ee934f13510acb12ed034ec35d8ab152e8734a235f0aa8e2d0d340c35e5a9bb2cd632423490a80c2cc7313933e8a6282be63021326da5802a443052314ea4f0299d2fd0304ba38329ea2e5f306ba23529552ef22fbba1cc28e22d562fd2a07228812de32e2fa02128142d622e829fac27bf2cf12dbb9e4c27882ca62d2c9e0a27482c562dba9d9126e02bec2c229d2d265f2b9e2cd49ce0251a2b7b2c979cca25de2a502cb69c85258e2a232c7e9c40252c2adb2bc79ce024c729662b479c94246129d32abe9b4524fe285f2a399b0b24c228242a949aa1238728d029359a40235e288e29e699d12230284a298b994722db27fa281b99b4214b279a2875985721bf2648282c98142150260328f197cf20ea257927849779207125e526fe964b2006257026b696c31f9024f3251296171f362488258b95a41ec423372531950c1e0323c4248994681d69224724c393111df421d823f492aa1c9e217d231a92bb1c89215a23e391a11c4f2133237791711c0b21c0223e91451ccd204422c490101ca32018224790011c9420da213790fb1b73208821e48fb11a22205321318e2b1bb21f0421438d2b1bb21f0421438d0000bf20982100000000bf2098210000b129ca2fd530f3a4562b463167328ca7022ce9313a3371a8fb2c7d339534aea9cd2d61345435b6aa582ec934cd3556ab362eac34c5352faba82d62347d355caa2c2dd333e83467a96a2c9e321f3430a8de2b9d311033b7a60a2bc73010328fa5642a3830523155a4b9299f2fc830aaa22e29d32e3a3034a1c128152e982f79a07028b72d332f09a03328602dcf2e1a9fe127fd2c4f2ea99e6b27b32cd82d099e1227742c8a2dc09db326312c3b2d3c9d6e26e92be82c3b9d3326662b9b2c0c9de925022b6c2cff9cc125ac2a3d2c0d9d94255c2a0a2ce59c3c25042aa32b979cd724b029422b3f9c7f245e29d32a9a9b3f241729742ae89a0d24da28252a979a79239028cd29149a042353287e29b599cb2226283e2987996a22c627f2286d9924224127a9283199cf21a9265628199981212a26e327d4982121b6254f275698a9205d25d726e19769200d2573262d97cf1fbb2412261b96351f6924ae25a295af1e1a24562503952c1e9323f7246f94b51de0229c24d5935d1d31223c245c93171db621db23a892cb1c49214f2345926e1ce720bf228391141c91204122d190ca1b6e2018225a90c61b5320eb215790ac1b3e20be210a90ac1b232048210a90b81ab21f1521138f471b411ff020578d471b411ff020578d00000321a122000000000321a1220000cb28db2e443017a4472aaa30b03175a6402b9331dc32b0a7be2c703396342fa9672d50344435e7a9c62d9b34973537aaa32d7c348d3512aa2f2d323441356ba9ca2c8a33b534b2a8282c693205347ea7862b873106330fa68f2ac8300b3272a4e0292b303031d8a296296f2fb030f9a15029bc2e4a30ada1fb281a2ec82f53a19328aa2d142f74a03228412d812e5d9fa227d92c0c2e749e24277a2ca02d0a9ec826342c492dbc9d8826002c042d869d5026b02bd32c569d1926602ba62c5a9dbe250a2b712cdb9c6925b12a3a2c3b9c0d25482af32be69bd124f8298a2b889bb724bd29412bac9b84247d29f52aa39b68243d29a72a2b9b3624f628572ada9acf23af280b2a5a9a53237228c529319aee2236286e29dc996522ce2720296899f3213a27cc28d8987521b626822871981a21402622282798c820ca258b27c89730204125dc26d196f51fe5245e2638966d1f7f24e525ce95cf1e192467251b95521e6923e4248a94031edb2294245194cd1d742245242a94711d0322032477933c1d91218523d992d91c3a210d230992791cfc209a224791411cb5204222c090371c7b20ee21b590521c4b209d2119916e1c392067213b91861c33202f21a191041cde1f1b213b90181c691fd8200d90181c691fd8200d9000009a249426000000009a24942600006427ab2de52e9aa16d28c42e213021a46f2985309e313ea5eb2cb433ce3497a88d2d9a34aa352fa9412d88349135fda81e2d57345b351aa9d72c0a340c35c0a87d2c3d33873430a8af2b4332de338fa6102b6a31ee325aa5862ab030033252a4d32921303b3169a263297d2fb73069a1f528b82e3a3082a06b28e62d6a2f799f0428462d942eca9eac27e32c1e2e7d9e4a27952cb92d299e0f27532c682df89dbd261d2c2d2d7b9d6b26d22bea2c059d1126602bad2cbe9cd225002b712c8d9c9325a82a3e2c5b9c64255e2a142c379c1f25102ace2bae9bdb24db29882b499bba24c029592bc99a70249629222b5f9a56246d29f12a399a37243e29b52a0d9ad72304296c2ae1997023b328192ad099e7225f28a2299d995c22ef2713296099e9214127a528ff988821c7266628ae980421372616283d989b20b62554277f9739204025b126df960a20d224372651966b1f6b24c225cd95f41e042447256f95671e6823e424cd94291ef2229b246c94bf1da3225b24e2937f1d4c221a248a93471df121b923e792171d90213923a892ce1c2621b422fa91721ca120f6218891021c53208121bb906e1b1f2059212690501b0f205021b38fb21bfd1f2c210d90471bb11f5d21bb8eab1cc11ffd20b392ab1cc11ffd20b3920000b222be2400000000b222be2400002e27972dbc2e8ea10828432e722fc8a394287b2f7830dba47c2b3432f43326a84c2d4a345f35f6a9952db934be3547aa062d91349b35a6a9982c24343f3518a9232ce832633431a8ae2b0c32a0330ba75b2a2631943283a4102a9a30ee31ada28f2950306931e1a04129b72ff8309ca0bb28ab2e4a304da03028af2d422f159f8727e72c2e2e1f9e32278c2cbb2d659dde265f2c882d269d9b26282c3f2dbe9c4626e72bf92c819c0526882bbd2c219cb1252d2b872ccf9b7325dd2a562c7a9b4425a42a2e2ce49a15256c2a0b2c539adc24162ab22b0c9a9424c0294c2bfd996c2497291a2bc8994f247929f02aa39930245e29c92a7a9902243129952a8099b7230729622ac8997123db283a2ad1992923a328e6290e9aab2235285929d999d021b927e72819996421eb268b28bb980021062623286398982066251c27c5975b20e82461265e970a208224da2593965b1f2e246e25fc95da1ed0230e255b95671e4323bb24cd942c1ed5228d24a094d91d852259243394c11d33222a2422948c1dec21e7239c935c1da22154235b93f21c3321ac2279927c1cdd2039229491621c9f20f9212c91441c6520b5210991451c1b2072210a913b1ccc1f2021fe903b1c3a1fd5204491bf1bfe1e02212e8ebf1bfe1e02212e8e00000f220324000000000f22032400006327882ddc2e6ca24d282e2f6930b3a42b297b308b3139a6552b3532d23379a85f2cbd33cf3467a9fe2c6734563517aa072d5b346335e5a9922c12341d3511a9162c22337f3445a8262b0a32983354a6432a19317f3258a47a2943307431aea1fd284a2f923038a08f28572e05308c9ee527982d002fab9d9526b32cec2d849c4626552c662d4e9c54262b2c3a2d239c0426ec2b012ddf9bf2258e2bcf2cc79bca253a2b942c939baa25e62a622c699b8f25a02a332c459b6b25592a022c179b5525172ab62bf99a3425e5297f2b7a9a0425cf29632beb99ce24c2295f2bac99a424b829592b7a998024a5293f2b0699612489291a2b2b9952246a29f32aee9934244529c52ad69a26241629942acf9b0424c628302a099c5f2352289829a59b4d228527d728889ad9219b265528409ab0210726a927e699cd205025ae268598e41fb8240526ab96721f6224a9250e96211f29245e259295bc1ebc230c250d95861e4323bc24af94231ec52273243594891d592229243d93381de121c7237e92fd1c922158233592c71c2f21dd22f2916a1ccf2032227e912d1c7320b521ee90e21b42207f21a790881b1d2050213490161bf51f2821768f281be71f0521898fac1a9d1f0d21068f481b731fdd20ab8f481b731fdd20ab8f00006d211e23000000006d211e230000a8262a2d622ee5a11528c52e303065a49f280d30043191a5582a8131f632f2a7e12b0f336d34ffa89f2c26340835c9a9a72c22341235c0a9402ccc33ee34eba8972bd7325d34efa7b72ac8313d33bba5bb29d630293296a3022904302a3131a138288a2e2530dd9e3d274d2dd12e819c1226242c602d9d99fe25232bb12c8b99f625182b8a2c479a7a25c12a4a2c779a4d256d2a172c429a1f253b2ae62bb899f024042abc2b8399e424e5299f2bc699dd24cf29872b6e99e024bb296d2bc299c924b529692b6d98ab24b3296d2b7297af24c329842b7997ae24d6299f2b0898cd24022ae12b2398d024222a192c2598b324352a2a2c0c9893242a2a202c86983424f329022c3b99f2239c29732bf6993d23ef28732ad09a5a221d286d29629a64211d279d286b99d52042260e288c987720bf25912710983e205d2520277197fb1fde247e26c096421f6224d925ac95af1ef323452503954e1e4c23cd248694d41dc5227824fe937d1d44223c242d93521df12102249f925b1dc121b823aa92701d93218723c4928d1d6c213223e892051d1821ab22ec91231ca9202c22e290ff1b5120e92177908e1b2320a421f48f5c1bbe1f3021478f111b741fb420e48fd919d01e9320c88dcf1aa51e7820bc8ecf1aa51e7820bc8e00006d212722000000006d2127220000af24062c112dfe9f59262a2d8e2e88a2ca26362eb72fa3a30928ae2fd430eda42f299c30e23169a6fd295631c73236a76e2ab03146333ba75f2ab731813310a7b22ada319433c9a6b22abb3179338aa4da29e830543222a10c29cc2fd930ed9e9327d22d312fb79c3726822cb72dbc9b3d258b2ba82c2f9ab324792a1c2c4099a524082aa52bc799b224ce29442b249ab124a6291f2b709aa3248429012b5c9ab5247229ea2ac29a9a244a29b82a509a7f242c298c2ae1995f241629702ae2984a241a29742af09737242629892a2f961f243f29a82a86951a246d29f02ac2913324d3297c2b5c8d9624682a142c068bfe24192b8a2c5f8e3125872bcc2cf8940e25692bc62cf8997124892a3e2c2e9c2b236829102baa9b6f2261288e29159b6921d0265a28c899f0208e25be27f698892006250c27209808207d241f26d196211f0d249225cd958d1e87234725ea94f61d1c23f2244894b51dab22a424d593681d2b222a2412931b1daf2184235a92e81c5e213b23cb91be1c2a2103239991a01cf220bc227691721ca8204e224091121c4320bb218c90a01b0b205c214290371bfd1f3921998f231be81f1821838f061bb91f0421f38e191b771fb320058f431add1e8820318e3f1b641e34203e8e3f1b641e34203e8e00001f210121000000001f210121000013212729fb29349b9625882ca42d64a11e26632dea2e96a2b826312eb22f8fa34a27b72e393019a4fc27442f82306da438285f2fb3309ca44928d82f0f3169a43b2a6531cd3205a5ae2c1b336a344da5312af6303732d1a25f269c2d232f04a0b824482be12c199e2a25d22a702c2e9eb725792aed2b799ef724cf29652b4e9d37241c29bc2aa49c6924f428842ab79c5124c028472a9d9c35249e280e2a5d9cd0236d28ca295b9b7d234b28a129549a522333287c29b8994e23172843297a994b23f8271a293c992d23e127f828ec98602316280d29c49749236c28802947969e23f8283c2ace8ef923c829582bd5148f25082c2d2d2419df26902d1f2fe4131127772d102f659c0425e32b112d529eed224829c32a5d9ce7215827c928b09a6a20652535279498f31fae242c26fd97641f4024862540964c1fd3232425b495bc1e4423d0240d95791ee9229024da94371e8c225024a994df1d3722212437949f1de421ec230994511d972188234b93231d56212e23b892f51c0521d5222b92ba1cb6206f22e1917b1c862010224a91591c5620b62122912d1c27207c21a990011cf51f50217990ad1bb61f2d210b904b1b741f1321368ff81a281fe520e58efc19bd1ed920898d7b1ab31e9720578c7b1ab31e9720578c0000ed1e7c1f00000000ed1e7c1f0000b621f228bc29be9b5524f12bf72ccf9f3a259e2cd22d37a1ca252a2d6c2e0ca25c26af2d142fa5a2a626d12d5f2fbca26826b52d382ffaa1f425c92cf02db3a04f222129342a479cb21c91247c265d96912239288e29c49c7225a12a3d2ce89f2c25b22a532cd99e7e24132a012c859d6824b229352bfe9c72246729d22ae59c37240d296b2a819c1e24ca281b2a899c0d248628be29759c09245a287d29719cda2331284a29129ccf231d282f29d99ba123f12706296d9b2e23ad27e328c29a2b236427be28859a9322f3268e288f99512294265f2823998922ec252628e698d42165251a272f98601da724522608932526252c7f2c419b3a2a253149328e9e8d2a3331a132509f5d24402a142cf09b22205823ee25ae98be21092461266799e81f6d237f256e96bf1f95233b2590956a1f542305255395841f5023e2246595fb1efe2298240395e31ecc227924f294551e712248245894f91d33221f24d093871ddb21df23e192371d74215c237d92e11c1421de221292c61cc6206322a3918e1c852009226091751c5a20c22143913c1c3b209921ba90e51b19206e212890751bf11f5121da8f071b891f1221f48edc1a2f1fda20c98eca1ac41e8120258f4b1a3c1e4720d28d3e1b3a1ef41fb38e3e1b3a1ef41fb38e0000e21ae11b00000000e21ae11b00007d23082a852b6f9d49245c2b972c0a9f7124c82bc92cde9fd624422c4c2d70a03125832c962daea038257b2c9a2d74a0c524272c312daf9f1724f72a522c339e27223e29892aa99c602146285c293e9c7122b928062a169d07249f290f2bfa9d4124aa29272ba29d00244e29ca2ac99c022432298f2a699cf623ff28682a419ce023bb28142a359c01247928c429ca9c09243f286d29b39cfe2318283a29a79ca923e4270629189c5d239627d528679bfd224727a128949aa32207277928d2995e22d9265d2863992a22ae263c280499ed2182261c28a198c9215b260d28569878212726e727da976921fd25ba27c5970f213e25f5264397361e79223a2442947f15711c871e8a8b7617961c141ee28cb41caf20ca212792461d57222224e692ad1ea92274245e94591fb2226924cf94161f81224324a3947c1e582221243e94141e21220024f393cc1d0f22d9239593a91de721a4230b93871dbd217323e192561d88215823a492281d5a213c231692e11c18211a23c391a61ceb20e4223191491ca92089228390221c79203e225a90cc1b3d20f521b68f7e1b08209821698f221ba21f4a210e8fbc1a361ffe20a98e5f1adf1eb120e68d7a1aa71e5c20688e1f1a791e5120468d401a661e0b20968c401a661e0b20968c0000031c901c00000000031c901c0000b0223729712a009c31235f2ac92bfe9cd323ae2a152cee9d0424df2a472c379e2024fc2a562c629ef423c62a3d2ce79d9b23722a162c869d5723d329802b729d292325299e2a6d9d1a23a228f5297f9d2b238628e0298b9d51239528f3296e9d6723a628fe29059d21238b28d929279ce4227428b529259b9c224f287c296e9a622225284429ce9982220a281d29eb999b22e427fc28cc99a122b827de28d199a9228227c828d8998c224c27ad2889994b22182797281f990122e0267528b198ce21ad2660285a98a12176264128679872213e262a284298402100260928e0974921d125ef27ed972a219125c3270998d5203c2577278d97b820b42489266097f21eec229b243595dc1aa2201b22ed900d1a6520a3212790ef1b1d2171223191141e4b2204242b94ef1e9a226024c294751f6f2249245b957d1f4c2227249d95cb1ef021db23e1942f1eb12182233e94c41d7e2146238b93671d48210e23b992f81cfc20c8222f92b11cc22090228a918d1c912060225f916f1c662028223c915c1c482001222691431c2520d021c290041cf71f81217c90b91b961f282111902e1b2c1fd220908fcc1ae01e9120288f631a9a1e5b20518e691a841e2320c08edd19591e3420cd8dcc19101ed61fbc8dcc19101ed61fbc8d00000000000000000000031c901c0000b0223729712a009c31235f2ac92bfe9cd323ae2a152cee9d0424df2a472c379e2024fc2a562c629ef423c62a3d2ce79d9b23722a162c869d5723d329802b729d292325299e2a6d9d1a23a228f5297f9d2b238628e0298b9d51239528f3296e9d6723a628fe29059d21238b28d929279ce4227428b529259b9c224f287c296e9a622225284429ce9982220a281d29eb999b22e427fc28cc99a122b827de28d199a9228227c828d8998c224c27ad2889994b22182797281f990122e0267528b198ce21ad2660285a98a12176264128679872213e262a284298402100260928e0974921d125ef27ed972a219125c3270998d5203c2577278d97b820b42489266097f21eec229b243595dc1aa2201b22ed900d1a6520a3212790ef1b1d2171223191141e4b2204242b94ef1e9a226024c294751f6f2249245b957d1f4c2227249d95cb1ef021db23e1942f1eb12182233e94c41d7e2146238b93671d48210e23b992f81cfc20c8222f92b11cc22090228a918d1c912060225f916f1c662028223c915c1c482001222691431c2520d021c290041cf71f81217c90b91b961f282111902e1b2c1fd220908fcc1ae01e9120288f631a9a1e5b20518e691a841e2320c08edd19591e3420cd8dcc19101ed61fbc8d000000000000000000000000000000005525772aa92b3b9f8a299f2dd02e58a5182b012f2830c0a79a2b9d2f7e3075a8492c6530633118a9172d59316932f8a9e42d14324933a0aabe2d10324c3317aa922dcc31f6328ea93f2d62317832d0a8f92c0f31103216a8732c5130033175a6b82d3832493364a72b308c3479351fa93c2fa93116328fa84e2faa30db309ba8672f9b30c930aaa89b2f433171318da8af317f35743613aa8e3081330434dea8de2fcc30bb30b5a8202f3730593026a84b2f203021307ba8b02f5a303b3037a9013061305c30f1a932307b307630a0aa3f3081308c30b4aa2f306b304a30beaa453071303730bfaad12e752f242f61a97529472bbc2b66a320239627ba28ef9a6c20d2269328ea960922c6283c2ab898bf24822a0c2c6c9b101fd8265d28bf953a201b2461259c96a11f6e2392243596791e1c2378240f95b51db8224a24a594731d6b221f244294de1c0d22d3239c93991cb521602330934a1c6821fc226e92171c2321af22df91e11bde206822a891b81bae202b224c91851b8620f4212991351b6020ce21b790221b4b20af217090cd1a3620882104905c1ad91f2321828fc619041f9d20738e7819a71e52201c8e6e19851e2a20b78d6f19781e1720b88d7c199d1e00201f8eb718171ed71f918d4e1bee1e8620b08f00000000000000005525772aa92b3b9f5525772aa92b3b9f8a299f2dd02e58a5182b012f2830c0a79a2b9d2f7e3075a8492c6530633118a9172d59316932f8a9e42d14324933a0aabe2d10324c3317aa922dcc31f6328ea93f2d62317832d0a8f92c0f31103216a8732c5130033175a6b82d3832493364a72b308c3479351fa93c2fa93116328fa84e2faa30db309ba8672f9b30c930aaa89b2f433171318da8af317f35743613aa8e3081330434dea8de2fcc30bb30b5a8202f3730593026a84b2f203021307ba8b02f5a303b3037a9013061305c30f1a932307b307630a0aa3f3081308c30b4aa2f306b304a30beaa453071303730bfaad12e752f242f61a97529472bbc2b66a320239627ba28ef9a6c20d2269328ea960922c6283c2ab898bf24822a0c2c6c9b101fd8265d28bf953a201b2461259c96a11f6e2392243596791e1c2378240f95b51db8224a24a594731d6b221f244294de1c0d22d3239c93991cb521602330934a1c6821fc226e92171c2321af22df91e11bde206822a891b81bae202b224c91851b8620f4212991351b6020ce21b790221b4b20af217090cd1a3620882104905c1ad91f2321828fc619041f9d20738e7819a71e52201c8e6e19851e2a20b78d6f19781e1720b88d7c199d1e00201f8eb718171ed71f918d4e1bee1e8620b08f4e1bee1e8620b08f6227d92b7f2c98a16227d92b7f2c98a1242b482f443021a84d2c4c30113152a9e62c0431e0319aaae62dd731da321eacfa2e09333034edac872f77336a3432adb72fb133893423ad882f68336034c7acbc2ead32f6330eacea2d0f323f335faa192d8131b7325aa84d2dea31103387a7c32d1732303372a7882eb23177326da83e2f8231353224a901308e312232afa937304c32cd32b7a98a306d331a34b8a9ad300833b733e5a93e30db312832c0a92a30543174312eaa2c303331473197aa3730e130d730cbaa4a30ed30dc3030ab64300231e2307fab69300a31f03087ab5330c730a630a9ab413092306330abab622e1e2fe42ec0a98729e42b3c2c47a40f2491288d29579c9e2246284e29049a382252286929dc984522452863291a9837218b27e22828964c20bc2578275895b21e772417266194ee1e27247e258994281e8523df243994871dbf2275243b93111d6e223624f492e61c35221224b992cd1c0822d8239692b41cd72191237492951ca0214b234992731c652111231b92441c2d21ba229491151cf12062225791a61ba920072200912c1b6d20b1217690d01a2f20592105905f1aea1f1a211e8fc419751fcd20128e70190b1f7f20ba8d4019bf1e4220878d4519971e0520378de818231ed31fcb8da71a631e2b20958ea71a631e2b20958ece27462ce12c8aa1ce27462ce12c8aa1fc2b1930d830aea8e62cc930a43136aa9f2db431aa32c1abc62eb832de33d5acba2f94337e3494ad45303234ef3429ae56303a34f43431ae31301834d034a6ad4a2f7f336e349fac8c2ecd320a3478aba32df631273370a94d2d9c31c53286a8022d48313b326ea7902d1631fe3109a8292e3331e3315fa8832fda31823255a961303e32be325baa713096321f3373aa58306732e6324faa5230f6313b3269aa4a309531b331a4aa45308d31ba31e1aa5130583166313bab613042314031c1ab6f301d310a31feab70301831fd3024ac6b301531f93032ac4830cf30b03022ac312e5b2f9c2fc7a9f628602bf82b84a391245829632ae29c80239f2896290f9b4422cb27f1284c99e6217027c3289d98f420ea2695286e97d3201a26ea273c974e20862517277496d51f1725a7261f96451f8e24f525ae95be1edf2311254595261edb225224cf94b31d7a22192446944c1d44221324f193ea1c1022dd230e93951cd0219f2394924b1c962169232992131c4d2111239791da1b0b21bb226391851bca206f22eb90521b8120fb21ca90361b2b207521b8901a1be11f28216b90191b8e1ff0203090c41a3d1fc120fc8f641a2d1fa420ba8e541a361f7920a98e0819ac1e5c20568c3c1bc61e5a200a903c1bc61e5a200a90ed265c2b2b2ca09fed265c2b2b2ca09f642c94304e3103a9522d49313a32a9aad02df831173303acfd2ef1321a34fdacb62f9f338e3491ad52303334fa342bae623060342d3530ae3b303b340035b4ad692fb6338e34b3acb52e00333434deabe62d3f32823312aa492da231cb32aea89d2cfb300032d9a6662caf309d31f7a5cd2cb330823183a6042e3c31ee312ca88d2fb0312e327ba9323013329a3239aa57302a327e32b7aa6c30ed31293220ab6630ad31f0315eab82308c319431b2ab86306e316d3101ac873059314a3127ac8a30463130314fac933045312d317dac9b305231363197ac4630e430c13043ac6a2dc72ec72e3aa94e28562b472ca9a29a2416293f2aeb9c13248828c229699b442351287829259a9b22152822296099d9215727ab28c29831214426fb273998d320a3252a27d9974c202a257a26fe967b1fad24de25d995f11e35245225a595551eb023da24f394e01d392395249794501ddd2261242794001d7d2220248093b21c2422dd230a93991cc2219123e5927b1c77215023b892641c36210c234e927e1c0321e3227392641cbc209d220692401ca32060229091031c63200122fe90221b14205d213690651a881fdd208c8f0a1a6b1fbd205c8eff19641f8720508e3319ee1e6720248d2c1bec1e9c20a28e2c1bec1e9c20a28e00008c20ed21000000008c20ed2100003e2c78305a31a3a86d2d8c318b32cbaae62d25325733f3abe02efd322834ccac8f2fbc33903456ad36303434e43403ae383055340735e3ad06302f34fd345cad202fa133863485ac702ee432163472abc82d4c328533dca9292db131dd3292a86f2cf1300532dca6022c73306031b1a5f52b3d30073186a5552c44300a3103a6972dc63065310ea8562f6231c031ada94130db311232feaa7530e7313132c0ab8b30ca31063218acac30a131aa315cacb5308e3193318bacbb3082317b31a4acb9306f315f31b6acc23071315531e5acad304a312731f6ac0c30a0307a304bac8b2c2f2e7d2e3da8ad268e2a2e2c6ca04e24f428132a539c1f24a228b4293b9b4e235d286e29f199e92222282b29a09928229827b82803993d216c2616281898b720cf2592275f97722061251a27f396e11fdd2439262896ff1e722491253e95531e09241725be94e21d6323cc2469947d1df5229b24e1933d1da32261248693e31c3c2228240593921cde21e22346925b1c9d218323b3912a1c582119237291ef1b1d21c022ef90601bd12051229790cc1a8b20f1210390881a46209c214b8f241afb1f4d21778e171ab01f2d216a8e3b1aa81f2121298e711abc1fe6205f8ec819701fe120168e081b6b1f19210e8e081b6b1f19210e8e00006a200a22000000006a200a2200002f2c6d30613170a84d2d99319c3279aabd2d253254338dab712ec932113472ac042f74336434e5acba2f0e34b43465adbc2f1e34e03456ad6d2f0134cc34f2acbd2e66336c3438ac372ec732083417aba52d2c326133b7a9042d81319c3285a84d2cdb30d331cba6c62b72305f31a4a5472b1d30fb300da52b2bbe2fb430faa4a92b9e2f8b3051a52b2d6930ec3081a71f2f27317231bda941309731b73189ab9730bd31d7315bacb930c331c331a3acc430ab31a531d4acd23099319531f6acd2308b317c311eaddd307d31793151ada2302c31023135adc32e0a30ff2f64ab3b2ab42c262d6ba5c325102a492b439fbe24ef28232a5f9d39249e28e4293e9cd4235f2885295e9b37231c282729ca9a5c22b927d328c899a321f2268528f298cd2007260128379841204c25032732970f20fd247726dd96b01fb7242a264196161f6f24c525c495a61e17243c256895f41d6c23cb24a7946a1de32269243c94181d75222724a393e11c2122dd2350939c1cdd218423ea92531c8b21232336921e1c4321c322e991ef1bff20692271915e1bb82014220e91d21a7520bb213e90881a37207221b68f311a02203421ea8e2a1ac31f09217d8e611aa91fca20b88e4c19001fb0203d8dd71aa91e7720958cd71aa91e7720958c00008020262200000000802026220000382c8630873168a8252db831c03233aa6d2d0b323e33f8aafe2d9a32f933fbab722e2433443458aceb2e9b338634a9acf82eb833a734a5ace32eaf33a0346cac782e4a336234e4abff2dbe321534bfaa592d17325d3355a9b82c57317b322ea82d2cbb30c53198a66f2b49303e3147a5952ad22fca305ba4252a412f7230f1a3462a062f4b300ea49a2ae82e29305fa42e2c4d2f1d3012a6f82d48308c3000a9ea2f00311e3183ab643051317c3161ac913075317f31c6acb9308731833116adcd308131623153adaf304731273144adcb2f6d30523062acb62c082e5c2ec6a80c282d2b242c43a216254929b12aec9d8624da28182ab19c2a248828cb292f9cbb2343285629469be222012802297b9a32227027ad28d5999021d72651280f990b214026db276d98df20c42528274698792031258d26d9970820d2244026d196381f9424f1251b96df1e4a24a32597955c1eea232825f894e31d4723b6246a94921dc02267240094201d462220240893b41cd821a7232792701c74213523ce913c1c3821df228a911c1c0a2194226091c01bda2046221191a21bb1201222c090571b8020b9219290e21a33204c214890c61a132035210090ee1a05200521bd8ff519791f0521a78ee11b631fe020a891e11b631fe020a89100001c201622000000001c2016220000cb2b6e306331e4a7e92c90319b32d6a9232dee31293398aaad2d7232e03390ab092eeb32253411ac572e5833563446ac512e6333793435ac372e4c336e34fbabd62de9322e3407ab882d6b32c73322aaf92cd0310333e1a8662c25314032caa7e92ba330a9313fa6252b2f30213130a56c2a8e2f9e3075a4c729dc2e3c30a6a37d29902e0630eba27629602ec92fb6a2ac29322e8d2ff7a2762a452e572f7ca4762c182fdd2f55a70e2e2d306e30bfa9502f8f30a83087abbb2fc730d23039accd2fa9309d3063ac022f40304930e2abee2cb22e1c2f12a95929702cef2c65a49c254f2ac22b5a9ea6245329862a869c8924fb28412ad99c3724a828f4293c9c79234d287229459be2220c2818297b9a1c228027b7288f998021cf265928009926217c2637288598cd201d26002837986b206425f326c097e91fd3242326b096951f9d24ee256996121f50248c25fa95671efc2321256995191e8623e224f694cd1d3123a124b8948a1dd2225e248294251d6d221e240594d71cfc21a82391939c1c93212923ea92911c4e21c722d9925c1cfa2073224292b71b9a20fa214b911e1b4f209321a890c61a10203a213790771ac51ff020a28f781aaa1fa620d08ee6192e1f8220968e491b3b1fe520ac8f491b3b1fe520ac8f00005020282100000000502028210000372b463030316da7742c2c312f324ba9b32ca231de3209aa3c2d4732ad33f9aaa72dcc3213349eab0b2e4433463412ac002e54336b34feabec2d46336e349bab7e2dd7322c349eaa332d5332af33aea9c92cbc31ef32b2a85c2c13313632dba7c02b883096313ea6cf2a1c300d31d5a4012a6e2f8830f3a37529c32e1e30e1a23529642ed62f65a212290f2e7a2f11a2f128b12d042fc2a1f028712d942e11a2fe284d2d6d2e73a2012a682d522e5ca4d22a092e2f2fb6a5072c432eeb2e84a7f52bf52d722eaea7d62a4c2ded2d46a698282b2cda2cf6a2b025362ab62b429ed5245d29c92a8c9c96243b29812a519c0f24f628172aa49b0c24c128e9291a9b9e238828ae29af9a2a234f286729499a6022c727d2289899b121c02651282c99452155261c28f698eb20ee25a027799898207825ec262e9852202325882695970520c82427260e97b01f8b24e125bf96591f5d24b3253696da1e2e248025cb95611eed233f253195dd1d6623ee24c6946d1dcd228d241194301d40222a24c793f31cd421c7236c93a01c5421f722a4924f1cd8206022e991c41b8620dd2115911d1b5c2096213390f51a2f207521c58fdc1a33209221398fd61a2f208321c38e341a09204721238e8f1b13208921fe8e8f1b13208921fe8e0000f71feb2000000000f71feb200000d82a24300d31efa63d2c3c314532e7a88e2cc0310433c7a9f02c30329e337faa302d9232f433e8aa942d09332f3486ab8f2d22335a3467ab852d18335d3400ab292da632193422aae52c163276335aa9852c8531b8326fa81d2ce630f5316aa7772b5f30533140a6c92af02fe13077a5042a432f833045a48629a62e163050a3ed28132e772f0da2b528af2d002fc8a18828672db22e46a154280b2d422e0aa11528ab2cbc2d7ea0a3276c2c672d15a083274f2c452d04a05d27282c072ddf9ff826c32bb02c729f5e26472b602c679ecb25ad2a0a2ca39d6025502ac32b3b9d0125f729842bb69c9d248929002b329c25242929852a469bea23d028182af19a47237928a629639ae12232284e29d1995322f72707295899ed216327ac2833996621d4264e28bc98f7203526cd275b98ad20b72532271a985d205825c226a9973a2007256126259719209d24e7253197c21f4c247a25ce96201fd0230d2506963b1e4023b0244495b11dbf226324a1944e1d71222d2426941e1d1822dc23ac93d01cc02184233893a51c7f214023ab923a1c2321ee22cd91e71bd920ac226c91511b8a205822c990ff1a5720ea215a90dd1a3120ae210d90f01a2d2059211890061aff1f3921f68d261baf1f2521878f261baf1f2521878f00007e206121000000007e2061210000552afc2fec306aa6052c35314632a6a8432c9a31d83256a9b02c263292332caadf2c8132dc337daa3d2de4322534fbaa492d0a335634f5aa3a2dfc325034a1aae92c99321834d6a9a62c1332883301a93a2c8331c532e3a7842bdc30f7314ba6922a32302c3116a5092a8b2faa3049a4b729182f5f30c0a34229862e0530cba2da28092e6d2f1da29a28a02de72ea8a13728232d562ee9a0c627be2cef2d47a08327932cb32dca9f30275e2c7d2d3a9fdb261b2c3d2dab9eab26a22bbc2c7d9e1926f32a432cbd9daa25962a372c559d6d25722a0a2c1b9d1625232aa22bf39cc924a929182ba89ca9246129c02a899c432400294c2a039cff23ae28f529879b74236b28a729049b122339286f29e29ab922ec270d29c29a5422182784285c9abb216a261e28c399392112260128eb98d120c725bf276198672065255827ba9712200b25a5262497eb1fbe240d2633978c1f6d24b0259f962c1f26244c254b96991e7623e9249495be1dbd227524db94311d04220b243994e61cab21a823a993a41c84215d23f6928c1c5e210a233d92921c4321da224692791c10219f22da917a1ce22046229291141c9720ec21d190c31b71209d211690371b4c205621998f761a2c204f21cd8eca1b821fb420b68eca1b821fb420b68e0000b920a32100000000b920a3210000fe29d12fe030faa55c2bea30f83151a8b72b60319b32e4a8652c16328833b6a9a02c7732d63316aae42cc1321b3470aaeb2cda323f3465aade2ccf323b3419aa932c6c32fd335da94b2cd53142338ea8cc2b4431793267a7052baf30bc31fda5642a28302031d8a4ce295b2f91301fa45929bc2e3030e8a2eb28492ed42f0ba2a328e22d592f66a16d287f2ddb2e04a12d28332d862e98a0e927ee2c472e3aa09127a82cf02dd89f2127612c862d2a9fc4261e2c212d969e6d26be2bc82c419e4326432b842c179e1a26e72a4a2cf09dd9258f2a142ce09d7225322ac42b799d3425f929792b3b9de124b2292d2bc09c64245429be2a229cdd23ce28112a279b232366289029b89aa92225282c29459a3522a427c828d899ad2109277d28579920219a263928a998f1204f2602285698b720f925a02723987d20a1252a27969734203925a5261b97e51fe1243d26ad963c1f8724cb25e295ae1e2d245d256f95321eb523f424d894da1d3b23a2249394ac1de12264244194771d792231241994331d2b220824cc93f71cc321aa232193991c4b21282399922c1cc120402275910a1c5b2097210791581b232080219290371b1c208d214290491b13208c21ac8ff71a761f34215590ea1bfb1e8e20ec90ea1bfb1e8e20ec9000008a208021000000008a20802100005a29342f8d3082a5bf2ab430bd31cea7032b2e31613256a8072ce03154332ca94c2c4832a63397a9882c93320734d1a99d2cb3322c34d9a99a2cb8322d349da95c2c6132fb33faa81b2cdb3158334aa8852b5131993223a7fc2aaa30cd312fa64e2a0830093115a5a3291d2f7d302fa44729832e1d3053a3eb28092e8d2f5ba27d28b22d142f83a13c28542da92eeea0ef27ed2c322e5ea06627a92cd72de99f0727682c8a2d839fb826152c252dc19e4626842bba2c1b9ef425262b762c9a9dde25ef2a552c569dbb25b12a2c2c379d8e256d2a092c3a9d4d25242ac72bfd9ce124bc29422be79c78243729a12a599c2424da28322a089ce3239e28e829ad9b8d236e28a729599b2c2344286829fb9abd2219282429589a2322ad27cf2894999b211227752819994021892624289c9806211326b1276898c120b12532272c987b204325af26dd974720d62443268197a41f6d24c8257696e91e19245c25d895481e8f2309254f95dd1dd1229e24c6944d1d412231245094031dd921c223d693c11ca121952321939c1c7e2160239e92691c38212623c591361ced20a6228291181cc92033221891f51ba7200422f490d81b8420c121a1909c1b4f205c217e90681a08202121288f981b8a1fd1208b8e981b8a1fd1208b8e000094208e210000000094208e210000e728c62e4630d0a4202a72307031fda63f2ada300332b8a7652ba2311233b0a8fd2b1432733321a9452c6932e0336ba9542c843215345aa94c2c873218342ca9102c3032cd3392a8ae2bad312633c7a71c2b30317132a2a68c2a9330b03197a5f929073003319fa46429402f85304fa3f128822e0330e9a18828da2d492ffda03428852def2e7ea0f027302d902efa9f6727d32c202e709f16278c2cb12de59ebe264b2c5e2d8f9e8126162c1e2d549e3b26c02bd62cde9df6253f2b852c9c9db325e12a512c5d9d7e258f2a242c2b9d3c252f2adc2bed9cec24de29722ba39c9c248b29132b319c5b243f29b42a199c2224f6284a2a849ba623a828df29f59a12235f2882296e9ab42226283f29199a6a22f2270029d59900227327b828a599ba21fb26722864996e216b2624281d992f21f4259d27e198e12090251f27709874203f25ad260d983e20e92442267197961f9c24ec25a896061f51249125f095741e002432254095e81d5523c724cf94661d9b2268243894161df7211524a193e81c9e21b0230b93921c3521352390924d1cde20ae22e7910f1c94202a224f91b91b6820f221cf90b71b4f20ca21cc90a41b3e20ab218290a61b2620402184900b1bcd1ff1206290b41b871f0321258eb41b871f0321258e0000eb20f32200000000eb20f322000032281c2e8b2fd5a35329c72fc830fda567295830643182a6db2a7231e4323da8e52b34329b33d1a83f2c8f3214340ca93a2c98322d34e3a8212c83321e3494a8c82b2932ce3311a8702bab3131334ca7d52a2531743228a6412a9030b93123a5c429f52ffc305fa46429092f7030a7a30f295e2e0f308aa2bb28e52d842fa9a14d28852df02e98a0e827162d572eb29f4627a72cd82d9d9eca264f2c6c2d2d9e6e260f2c1d2d0d9e3b26b62bdd2cde9dff25562ba12cd69db425012b6e2c5e9d6525ae2a3a2ce79c2d25682a0e2cb59ce824162ab82b9e9cb524d029622b6e9c86249529142b429c54245d29ce2a369c21241929752a059ce523d328252af09b70239028d429b69bfb224a2881293d9b8722fb271f295a9a2b227127da28019aac21ee268c2885993e2155264028ef98cf20cc25ae2786987a206d25fc26379819200d2576267397ca1fc4241826d5963d1f6524a7255a96c81e08243625bc95511e5723c6242395fe1dc0227024af94c11d482222247f94501dd921cb23a193101d76215223f192ad1c2021de221e92491cdc206e229b91141c9f2016221491f91b6a20d221f690061c412084214391201c2a2059212291351c29202621c691b31bcf1f08214d90201c7a1fc6201590201c7a1fc62015902b21e629372b2f9a2b21e629372b2f9ab626782de02e7aa22828202e9b2f7aa4da27432eda2f5aa4582945306731c2a5b42b1732a533cea7982c2333883482a8882c1a33823460a8392ce5325b3402a8a02b5d3203343da73b2bd231663367a6b52a32319a3282a5392a9630d1319ea48a2903300e3183a30829262f7c302ea293284c2edd2f09a12f28902df42e34a0ad27112d502e789f6d27ba2cf42d779f1d27772c9f2dec9ee0263e2c552d799e8626092c1a2d249e2126ac2bd72c939dd025442b9c2c199d9925e82a642cea9c6325982a322cba9c33254d2a072c8f9ced24002ab02b2a9cb124cc296d2bef9b8b24ac293b2bae9b4c248829092b8a9b33246429da2a5e9b07242d29962a539b9323e2283d2a219b2a237f28d629f89a8a22152845295d9ad1215627b628d8997c21ce266a288399372178262e281499b820f425ce2797986a2074251827279815200d257a26af97db1fa624fa252497531f482487256d96e51ece2319250c96601e4023c9246495101ec7228724ee94a91d752247246d94771d2522062419943e1dd9219f23dd93ff1c7e212c232c93c81c1421a1228f925a1c9120ea21b291921b48209121b690231b1c206d217190301b192061213e90791b0e203d21a690081be21f62212690281cd11f5f212c91281cd11f5f212c91af20e028fc29db98af20e028fc29db9824261c2d792eeea1cf27dd2d4e2f25a4d726cf2d632f11a49927952e3730b2a4082924301f314da65b2a6b31df32a7a7b82b1a32ba3367a8b12b2e32f23315a8952aa931373390a6c82a7731fe32e6a5a52a6c31cd329da4292abf3026325fa385293d30643140a22d29772fca30b3a17128462e0930bfa0d527372dbd2edf9f3827a52ce32dcb9ee526712c952dd59d9c26432c642d609d6826152c262d019d1926ca2bea2cc49cd5256d2bad2c5f9c8025112b772c1f9c4225c52a482ce29b1925872a212c529bed244d2aff2b129bbe24082aa02bce9a8924c229422bcd9a66249c290f2b989a4b247e29e82ab69a1c245d29ba2ab09acf232c29812a9a9a7423f3284b2ac79a0323b028f729999a7d2249286d29509a02228c27d0280a9a9521002778289c9922216c263e282999b420b025d02794982a200625af26d797ba1f9024ed2507974e1f44248525a596ff1e0b2434252496ac1e9b23e724da955b1e162399245f950e1e9c225b24ed94bd1d52222e24ac94971d152208245f94521dcb21af232894321d84212c23ca93c31c20219622d692601cd5203e22ba912b1c8120e22174910e1c402097210c910a1c04204f2107910b1cca1ff3204a91ac1b401fc5204391f61b131fe420e08ff61b131fe420e08fc41c7f2772287c94c41c7f2772287c941926362d992efba17a27012e872f34a46b27bc2e3d30d2a486280c302e312ca68629c830e431a0a7802a4f318b327ca8ae2a8431013373a87e2a88311333eca72a2a4131bd3208a70c2aeb30513208a6a5296b30a931a4a42a29b62ff53058a27828662e1530a3a01827cd2cfb2dc69d3f26622c812daf9c7026612c762d089d7a26602c782ddb9c2d26302c532d6f9cd425e72b0c2dfe9bcb25902bd02cf39b9425382b952ca79b6c25e62a672c189b4d25ab2a3e2cef9a3d25722a1d2c309b32254c2a062c219b22251c2ad62b5f9bf624042ac02b709bc824f029ab2b2b9b9724d629802b2d9b6b24b5294b2be89a49249329102b3f9b37246b29df2aef9b11242929962a389cee23d828352a7e9c56234a288c29459c57226627d3282f9b9921a6264e28579a652131260328f099e7209f254a273d992d20f92459261098521f7d24bb256c96091f2a246e25f395dd1efc2325259595751e7d23d7240c95331e08239024d994d81d852242246294461d1422eb239293ea1caa2168230e93c31c5f210c238892ab1c0a21a92268925a1ca2201422f991151c4b2091219a91a81b1e20612101913f1b00203b218290d81ad91f20210a90ee1adf1fff201790751aa41f0c21368f4e1b7d1fd720b08f4e1b7d1fd720b08fda1d9b26c227f394da1d9b26c227f39464257d2ca42d4aa1f726822ded2ef2a31b27572ee92f90a42b28762fc6309ea5d5283d303e3197a69a29ba30d431a4a7e329fc305532f0a7d1290631893260a78629d0303e3263a69b299730e131ada54e294f307e3171a4ca28a62fdd3058a2e927482ef02f729fda26232d952eb39cfa25432c952dad9a3a26052c412d599bc825872bd82c759a7925272b9e2c769a4325ac2a592c369a3f25862a272c319a33255b2a092c249a3325402af32bcd9a4325412aea2be29a4125382aeb2b8a9a2825372aff2b6e99fc243d2a052cee98e124562a132c8398c924672a212c6d98bc24722a2d2caf98b924632a2c2cfa989a24482a202c059a66240f2afc2be19ae023aa29852b299bef221029ca2a319b4b225528bb29219b07227027c128d49a13219426362895997f20ef25ac27a9984c20842533272f980a201425a7269b97741f8f240b268b96bd1e1e246b25b3954b1e8a23f4241f95e71df32291249d94721d79223e24d1933e1d0c2206248793491dc221c02341937a1d9721802383938f1d7e215723a193a91d40210f23c493171de6209322fc921c1c81200f226091df1b4820d5212691081be11fca2160900b1b901f27212890d61a591f8c200990d019bf1e72201e8ecf1a841e58204d8ecf1a841e58204d8ed11b64252b26dc92d11b64252b26dc921e24982bb52cd19f9625a92cc92d04a23b265f2db32e81a306270d2e8e2f74a402289a2e283026a53f28182f763074a56b286b2fb830bea543287e2fd53056a5ac28f22ffd3067a52c2961307b3114a5c729c9301e321aa43a296530b1316ba02a28ee2e5f30639cd626532db22e539a66254d2c6b2da7985725602ba92c99980325d62a4a2ca498da245e2af32b1b99b424192a9b2b4199a724df295b2be698a024b029142bde988a248d29ec2a7d987b246e29d42a25986f246829ce2a129772247b29e52a18974f2490290f2b39956e24f729972bcf947824812a202c22910d25302b992c83904b25af2bec2c11955825d02bff2cf2981125692bbd2c999b4524652a212c909c1d235129ec2a419c17228828d5294a9b99217627be28579afe201426ef277f99a82065255427fa98a520c8245e268598c81f0624d02513978d1ebd233925bf953c1e4823fb241295d11ddf22b7248c945d1d6e2270240594f81cd52105242293c11c6f215b2386929c1c3b2111230892921c0a21d322fa91901cd5208022ad91591c8420012269910c1c2a2083210991b01bf51f42218a902d1bd51f27210190071bbb1f1221d98fe41a901ffd20428ff61a4c1fb120c68f4d1abf1e6c20d58dd31b7d1e28203d8fd31b7d1e28203d8f00007b1fd120000000007b1fd12000004022c929ff2a6f9d3925352c482d5fa15a25aa2cd92d30a2f5251b2d572e15a35d264e2daa2ec4a3ae26842ded2e14a499268c2dfc2ed7a3a3265b2de22ec8a3fd257b2dfa2ea4a23d28832fbe30e9a3c02bd731103325a4fe2bda314033ffa1bf28ba2e82306c9fc7242e2c482da69c7924ae293f2ba49c42246e29ca2a6a9cb0246b29c02a039da6240e29662ad29cef23b828192ab89b0724ad28062a119b01249a28e729c59aac237728c029009a692354288b2952990a2336285929d49808233328482960987b237f288c29e097d923da280f2ac294f1239d29332b0e04af24462bb02c79174826f32c6b2e03197327152edb2f4794aa26802d182fd99dcd245b2ba82c839e3c230829672a059d03225327be28629b3e20862557278998be1fdb2449260498e41f8024f025ae97191f0e2454253a96e81e8223f8249e95631e0123a6243295331eb2226f240c95081e63223924b794c61d23220d2483949a1dd321bb2333945e1d842159230694321d44210c237693e91cfa20cc220d93ad1cac207a226a92641c79201722be91521c4320b921a6912c1c102072213191141cc11f3e211491d11b791f19219d90641b481f00215d900d1b1d1fdb20e08fed19c31ee7209e8ec41adb1ec420668dc41adb1ec420668d00004c1cf01d000000004c1cf01d00007723ec293b2be59d46247f2ba92c20a0bb241e2c1d2d18a14625732c852defa1b325b82cd52d69a29925cb2cf62d35a2a325d22c042e12a29a25b32ccf2d95a1dd248c2b9e2c13a09a2007281229ae9a9f1b432334254a95e41f1025f126bb9910247e28d029e69d0a259d293e2bfe9e7e245529ce2aaa9de42318299d2ad99cd823f1285f2a929c0e24bd28092a979c09248828c029719c08245d288929709cae232e284d291b9c8b2321283d29949b9c230b281b29689bff22a127f828969a57220527cb289099572273267a285c99ee2251261328dc997420b6250e28f696a81eaf285c29c8943c28a82da32e459d0d2cf931c033c8a0cd28ce2feb30489e2b1f3629fe2ad5955a1c4423c1253c94f22178244926fa9968201524c6254a983c20e32343256e972420a62353250097951f4b2301252c96d81f3623cc246296281fea228124d295f11eb3225b246d95381e5f222624a994db1d2222fc233494691dc1219523c5931d1d582115235793ca1cfb20a3229392be1cb6203a2282928d1c7520e8213e925e1c3a209921b691251c12206f212891bc1bdb1f3e219090481b9a1f2d214c90e91a461ffa20b78f9f1af51ec720658f861ab21e7d20498fe2191d1e5920318ee11a3e1efc1f5d8ee11a3e1efc1f5d8e0000381b201c00000000381b201c0000fb22a029072b839d1124f42a402c559f4b243a2b712c25a06e248b2bb12c6ba0c324f12be42cc0a0b724e72be62c8da08424ab2bc62c37a03a24f32a502c599fa9228129dd2a5e9d4e2128285029469c38209b266828339bf7200e2784283d9cae23a028eb29309e3824dd28622a649e7223b5282a2ad09c50239c28f429609c4f237328ae29239c4f233f287029419c952318283f296a9cbe23f4271829c19c9323b327f328c69c55237227c928639cef221d279b28da9b8922d4267128c79a38229f264d280d9a232294263828c799df215a260f285699d1213a2602281a995921fd25ad2785986620c12459262897691c172105242d931112831c431ebe881619dc1da71fa18fe31cd42067225493c91d3c220d242794371e05239a247694301f052393246495261fcd2275245c95d01e762238241b95631e5422182496940e1e2422f9235894c51d0722cf2325949d1de0219f23b493691db22167236d93441d7d2149233a930d1d47211a239c92ba1c0121e622e1916d1cca20b42282912f1c87206b22f090211c68202422e090da1b3320e021a390911bff1f8e2139904b1ba01f4c211290c51a2f1ff320908f6c1ad31ea520c38e5f1a8e1e4c20b68edb195a1e3820cb8d3a1a4f1eeb1f288e3a1a4f1eeb1f288e0000331cbb1c00000000331cbb1c00000f22d528fe291b9cd322b629172b649d5d23062a712b499e9223372ac12b959ebc23472acb2bb99e78231e2aa32b419e4c23f529752bff9d562398291a2b069e3d230a29902a4b9e24235328b729529e93229c270829b79da422ae270129ab9df1220b284e29989dec2234287529ea9cb52242288029559c672224284a29a99b4c2202281829ee9a7e22e827ff28f09a9922be27e5280e9bb022a127d028259bb0226c27b528ef9a96222f2798289f9a3b22f4267a28119ae521c0265a285c99ae2195264828fc9881215b262728d498582128260728dc982621ec25d82785980121922581276498c1203425402753981c20902460263697321ed42294243d95281bad20fe21d291a31a5720972130913a1cf8208b225792811df021fd232194df1e8c226d245f95781f8d227e24d795b81f772253244896421f3c221b24e895571ed421b623f594f71da0216223a994911d6f211a23fe93401d3c21f0228a93e51cf520af22b792a31cbc207d225c92811c8e204f22e591631c67201722bd91481c4d20ee219a91341c2220bc213b91071cef1f6421c190ad1b871f0d218790341b1b1fcb204090d31ad71e8f2007906e1a9e1e5f202f8f651a851e26208c8fbb19451e3220678eaf19ff1dd41fa08daf19ff1dd41fa08d00000000000000000000331cbb1c00000f22d528fe291b9cd322b629172b649d5d23062a712b499e9223372ac12b959ebc23472acb2bb99e78231e2aa32b419e4c23f529752bff9d562398291a2b069e3d230a29902a4b9e24235328b729529e93229c270829b79da422ae270129ab9df1220b284e29989dec2234287529ea9cb52242288029559c672224284a29a99b4c2202281829ee9a7e22e827ff28f09a9922be27e5280e9bb022a127d028259bb0226c27b528ef9a96222f2798289f9a3b22f4267a28119ae521c0265a285c99ae2195264828fc9881215b262728d498582128260728dc982621ec25d82785980121922581276498c1203425402753981c20902460263697321ed42294243d95281bad20fe21d291a31a5720972130913a1cf8208b225792811df021fd232194df1e8c226d245f95781f8d227e24d795b81f772253244896421f3c221b24e895571ed421b623f594f71da0216223a994911d6f211a23fe93401d3c21f0228a93e51cf520af22b792a31cbc207d225c92811c8e204f22e591631c67201722bd91481c4d20ee219a91341c2220bc213b91071cef1f6421c190ad1b871f0d218790341b1b1fcb204090d31ad71e8f2007906e1a9e1e5f202f8f651a851e26208c8fbb19451e3220678eaf19ff1dd41fa08d000000000000000000000000000000008b267e2b642c95a15f297e2d812ec8a52c2a3f2e5c2f3ca7df2ac62e00305ba8652b802f7830cfa83e2c5d302a3185a9db2c2331123201aa282d6e316b32f7a9f32c1031143240a99a2ca630913171a80a2c1c30e23006a7dd2ca5318632aea7812e41341835b9a8e32db9316f322ea82c2e6930bc3062a8cd2e8730bc30b8a8252f8130bb30d8a80c2fb130f6308da8f83085342135a1a9e430db3498358aa9c42fd730d13005a9c12f5c30573081a9ec2f5a302c3001aa05306d302f3059aa1a30633032309caa163056301930b7aa0e3049301330cbaa2a3060301f30f9aae82f1e30a62f7faa1c2dad2d6a2d1ea8e026152998298da04522e72635281a9ab42047260328f497f81e70261d28e5950022c6289b29e298d82220293f2ac999e5205126eb2723989a1ead23de24cb95941e3f237a24c695d91dcc224b245295931d78221924e494061d1a22d4236894c01cc321652304946e1c722103237e93281c2721b922c392081cdf2077224e92dd1ba4203022e691c21b7d20ef21d191731b5220c5215a915f1b37209d210f91ed1a1c2062218790331aa91ff6200e90a319db1e7520a88e4019a51e5820338e1d19851e2d200a8e1f19671e0f20b88d2b19821edf1f1a8ea0182f1ea41fc28d5e1bed1e9b20599000000000000000008b267e2b642c95a18b267e2b642c95a15f297e2d812ec8a52c2a3f2e5c2f3ca7df2ac62e00305ba8652b802f7830cfa83e2c5d302a3185a9db2c2331123201aa282d6e316b32f7a9f32c1031143240a99a2ca630913171a80a2c1c30e23006a7dd2ca5318632aea7812e41341835b9a8e32db9316f322ea82c2e6930bc3062a8cd2e8730bc30b8a8252f8130bb30d8a80c2fb130f6308da8f83085342135a1a9e430db3498358aa9c42fd730d13005a9c12f5c30573081a9ec2f5a302c3001aa05306d302f3059aa1a30633032309caa163056301930b7aa0e3049301330cbaa2a3060301f30f9aae82f1e30a62f7faa1c2dad2d6a2d1ea8e026152998298da04522e72635281a9ab42047260328f497f81e70261d28e5950022c6289b29e298d82220293f2ac999e5205126eb2723989a1ead23de24cb95941e3f237a24c695d91dcc224b245295931d78221924e494061d1a22d4236894c01cc321652304946e1c722103237e93281c2721b922c392081cdf2077224e92dd1ba4203022e691c21b7d20ef21d191731b5220c5215a915f1b37209d210f91ed1a1c2062218790331aa91ff6200e90a319db1e7520a88e4019a51e5820338e1d19851e2d200a8e1f19671e0f20b88d2b19821edf1f1a8ea0182f1ea41fc28d5e1bed1e9b2059905e1bed1e9b2059903328892c642dd7a33328892c642dd7a3272a8a2e942f69a7062b292f3c309fa81a2c1d30d130dca9912c9c306f31aaaa3b2d5f316732a3ab932db831c932f5abb42dfb310133dfab8d2db231ad324eab6b2d4c316032f5aa092d5a31643257a9db2c9731c13239a8042de8312033eca7402d6f316b3210a8f22d0b319e3199a8e42e3c31b03139a98a2f5b31c83198a90930cf313032bba95030db328333b6a972300333ae33bea92e30be310132cda922301b312e3165aa1830fd30033198aa1b30c030ab30bfaa1430aa309230f6aa1730b33094301cab1f30a0306a306eab1a306c303530a7ab412fcf2f682f00ab7b2c3d2d222d2fa8d42698293a2a11a1d922ed27df28529bd7218727b028ae998921b127d3280899b521db27f528d39863218e27d028bc97792051261f286c96861eb0245c26af948c1e24247425e994231e7323b92499948b1db9224e242894191d6b222324a593eb1c3b2204246093cb1c0622b7233093c51cce2177232793b41c972134230e93921c5a210123db925a1c2221b0223f92101cde205c22d591a11b9b20fc217a912c1b6020a921ec90cf1a1e2049217490531ac41ffe202390a919511fbf20af8e6319e81e7520048e2819a91e2f20c28d24197b1ed61f168dbe18191e8a1fe78d8e1a4d1e5920528f8e1a4d1e5920528fad28172d062e5da4ad28172d062e5da4102b962f693041a8f02b0a30c8305aa99c2cc6309d31baaa512d60316032efabd62de231ff3266ac2f2e51327c339dac472e8232cf3395ac292e65328d3359acce2d0b323433a4ab7a2dd831ff326caaec2c71318d3210a9a52c2a31363242a8832cd730ce316aa7da2c9e30853182a78d2db8304d3135a8d32e4a31cc3147a90530c931313217aa2f303232a93257aa35301132793260aa2930aa31f53170aa213056317831a7aa33303931473109ab2d300631fc3043ab2730ed30e5307cab3230d430b430d5ab4130cb30a7302cac2830b0308d3025acf82ee82fa42fd6aacb2bf12c212d25a7d2254b291b2a0aa0c523a728a729679cde22322824291f9b10228f27c7288399aa215c27ad28ca98fb20e4267d280d9898201326d42779970a207a2507279396731f1f2597260f96091f8524cd25f3955b1e9f23e8245f95c21dca225724af94601d762226245f94201d48221a242b94de1c1622e3239c939c1cd32196233593671c94215b23e292241c4d2109233692f81b0421a722fa916e1bae203f2255911d1b6320d321e190bf1a12205821a090c31ad01f1321a490d81a951fe1207a90951a491fb9201890531a2d1fa620108f3b1a261f71208f8e7c19ce1e5a20c68d681beb1e86205291681beb1e8620529100007524472500000000752447250000242b452f683021a84a2c7b305431d9a9d32c0431f6310aab832da631c7321dac072e263254337fac682e8e32b433d4ac832ebe32f133cdac632eb132e3338facef2d51328133e8ab8c2dfa311d33c5aa0a2d8731953297a9a02c133111328aa8302c9730863125a7062c483023315ba6532c3c30f3308ea6572db430573122a8ca2e3731a3315da9e02fa131053258aa2330cb311b32ccaa3630ac31ec3130ab37307231ad3154ab38304a3159319bab4130233124310aac4d301031053138ac52300631ea3060ac5c300831ea307cac1e30bf309f303dac102e472f602f3daafd292a2c692c7ea5c4258d29812a00a02724b428bd29929c772362288b29449b042343285a299a9a86220b280b29249a8321fa2672283099f9200726b227ae98cd209c250d27859852201e25742611987f1fa724ca25d196eb1e2c2443254a965b1e9e23d2249395cf1d272385241995411dc9224d247194e91c5b220c24fd93971cfb21a92378937e1ca32165234f93621c5e212b2322934e1c1d21e622bb92531cf320b7227c92181c9d20612224929f1b5d20fd2178912c1b23209021ec908e1add1f1c2114901c1a6f1fc5209a8fda195b1fb320e88ee119581f7b20f08e6519131f61205f8e221b071ffe20828f221b071ffe20828f0000461f532100000000461f53210000752bc22fb13041a87f2cc530a7310faa042d4f3150323dab9b2dd9310c3323ac362e61329633a1ac792ea532da33d4ac7c2ec432ff33c9ac3c2e9232d63367acc22d34326133acab752ded310533bfaa012d8e319b328ca9972c1d31193281a8112c93307831f1a6802b3b301131eca54b2b0d30e830a4a57f2b9f2f9e30cda5af2c3430cc3066a7442ec9302c3126a9a52f56319331a6aa2e307b31ab3189ab3f306931953108ac57306131743142ac67304931563176ac71304031393192ac66302e311731aaac6d300b31e830c4ac902f6430983022acca2c582ea12eeda85228602b252c19a3e0243429952a259e1724c928d9293e9c932381289029e39a2e2341283629879a9022f127e528f89985211d27782805990421492605288f98a420c1255d2738984a203525aa2687979b1fb524e925ad96011f612476252596661e04240f256995eb1d4823be240195821dca228c247b94111d70224924eb93bc1c102217246793821cc021c323c2924c1c90216a232c92331c5e2109230892f41b1e21b6227591751bd7204a221e91081b9720f1219990a31a52209b212190461a13205621688f4f1ad41f28210b8f611ac71f1d21b88ea01ac61fdc20668fa0195b1fb320488ec91b5c1ff220b38fc91b5c1ff220b38f0000dd1fad2100000000dd1fad210000552bc12fb4301fa8762ccc30b831f1a9e62c52315232ebaa702ddb310c33f0abfd2d483288335fac332e8e32d13386ac432ea832f23385ac1a2e8c32d6334faca42d3532683383ab552de33103336caae52c7931873245a96f2cf630ea315aa8d82b7030503112a72b2b1430f03001a6b12aa62fa93049a58f2a492f6d3014a5bb2afe2e2b3035a51b2c952f58307ca67c2d4d30b730aea8fb2eb830e13068aaeb2ff7301c31c5ab1c3019312e313bac31300c31183172ac3d3008310531a1ac3330e830e130a8acf52f9930793079acde2d752fa52f6aaa6c2aac2c082dffa56d262c2a232b75a0dc244a29602ad09d5b24c228e129129d40248928c029ae9c93233b2854290c9ced22fa27f7282f9b00227027a828089a4f21a1264c282a999d20c1257b277d984c203c25cf260b98e31feb2467262c97531fa4241126a996da1e5224b22503963a1efc232f257795b31d3823af24d294371d9f2247246994df1c3a220224ed93b01cf621a023a193811cbd2156230a93431c75210023a9920a1c3021a5225192d11bf3204922dd91331ba920f7212b91a31a6120a0218d905c1a24205b2129901a1aed1f2421988f101aab1ffb20c58e3c1a831fb720f68e4019e31e9220878d2b1bb91e73202d8e2b1bb91e73202d8e00002220f321000000002220f3210000442bf92fd730f1a7752cff30f231dea9b42c5931573290aa2f2dd231fe3252abaf2d353271330eace52d7a32c03335acef2d8e32d83330accc2d6832b033e8ab682d1632523307ab172dc831f73222aaaa2c5e317932f3a8342cd230cb311fa88c2b56303a31eca6db2aec2fd230bea5222a472f6e30d8a4bd29c92e273059a4bd298a2efb2f42a4d029512eb72f38a4832a592e782f09a52c2c022fe62ffda6672dd32f35300aa93c2e2c30523037aab32e473059301babe82e533066308cabb42e343046306fab922d4d2fa72f16aa402b472dbe2d1ca78f274c2b8d2cbba1c825da29212b789f572532297d2abb9e6324c128ed29f89cfa236f289129439c5d232c282729a39ba422e527dd28e39adc2139278228139a322190261d283999d3201d269327b298ae20a42501278e98592018256a263b98e21fbb240e266c97211f7824be257c96d61e32246f2500964e1eb22303258895ec1d132397240195941da32249245c94041d2e220124d793a31cc2217f23f4925f1c6821172347922a1c2c21cb22fa91171c01218622df91d11bd4204a229c91a71bb72014224091601b8720be210f91c71a282037216f90b41a0a201621ea8fc71aec1fe1203890cf197f1fcc203a8f981b6e1ff820f790981b6e1ff820f790000057234b240000000057234b240000702aa82fba3023a7092cb530af311ea97c2c483153321eaadb2caa31e532c7aa542d0d32573386ab712d3e328f33aeab692d423297338dab5b2d2f327d334eab1c2df731343390aad22ca631cb32a6a9682c2e313c329ba8112cc530c731d9a7732b66305d31b7a6b72acb2fc930d7a5f229ff2e3f30e3a48429902efe2f45a44c29622ec72fb0a31429fb2d472f35a30429932dbc2ef6a228296e2d852e7ca39f29772d6f2e70a4ae2ac42d8b2ecfa58a2bf82d942e28a7bc2be22d622e77a75b2ba22d352e19a7b029e22c992df2a4fc27922b742c0da29225fa29352baa9ece243929782a4a9d9924ee282f2a359d7624c928132aa09d35247728b329e69c542328283929089c6322b727c928d49aaa21fb266928e099742192264228a89915214f2622284599b520c3259527bb983d20372595264298bd1fcf24062688977a1f9124cf250997e31e392465257b96621ec9230625ce951b1e5823c2248e95d81d0c2386242195941da8224524e594181d3e2200244e94c61cdc217b2309948a1c83210d2362938f1c4c21bc226a93521cf02056220893cf1b8720d5211b921e1b302069211d91771ad61f05213b902b1a8d1fcd20ad8f581a761f96207e8fd3193f1f71203f8f491b1c1fe4208990491b1c1fe420899000003c20da20000000003c20da2000007c2aa42fb33031a7a12b7b306d31d6a8202cfd300a3290a97f2c7431af3235aaea2cce311233dcaa062dfe31493304ab012d05325533fcaaf42cf0313d33aeaabb2cc431003300aa932c9031b83238a93f2c293135325fa8d92ba130973193a7292b30301d31afa6832ab22fb73075a5b629f32e403082a42229582ec22fc7a3e7280a2e5d2ff6a29928a52de92e62a25828322d642ec0a11e28e62cf52d74a1ef27962ca32d20a1d2276f2c5d2d0ea19827412c322d07a1bc27242cfb2ce0a02627db2bb52c47a05226232b592cf59e8c25582adb2bee9d1d25b929212b779dc5246129ae2a199d6c242029662aba9c1b24df28162a639cbc239e28c829229c2c2354286729709b8922ff270429c79adf2150278d28479a6221b0262c28c09904213926e1275d99b320c0255a2706996c205725c62696983120082560265898cf1fb4240026d9977d1f7a24bd254a97311f52249225c496a51e1e2455250b96111ead2311255395931d2723bc24e4943f1d9a2269247094fa1c0e220c240d949e1c91216a238393631c10219a22dc92101cb22016225a92341b5f20a5212b91cd1a21205021aa908d1ae01f30214990bb1a0d206d21f28fa71a06206721da8faf19961f0921b68e9d1bab1f0c2102909d1bab1f0c21029000000c20a020000000000c20a0200000fd293d2f783073a63c2b6b305f3187a8eb2bf930073246a93c2c5c319932d8a9922ca331e93261aaa72cce311e337eaaa82cda3134336daab22cd3312b3341aa8b2cac31f732b1a95d2c6a319a32fba8172c09311c3235a88a2b8b30813146a7db2a1130ee3082a6352a602f80307fa59a29e32e353083a44729822ef32f00a4e8280c2e5a2ff7a27728612d922e0ea23128ff2c2e2e8ca10228be2cdf2d2da19a277d2c802daca014273f2c2f2d3ca0ab26052cec2c8d9f5126ad2bb42cf49ec125282b602c569e6225ad2a152cec9d3325542ac22b8f9df724fa296c2b4e9dd024ce294a2b249db3248329e72ae09c412416296b2a469ccd23c928fe290c9c132364288029569ba22212282729e19a2422d227eb28909aae214c279d28e3993c21922625286e99be20ec256a27c4986d208625e8264e98422037258e2625981320e6242126ac97da1f8324aa2564974e1f27243e25a596b21e8d23ce241696ed1d022377246495761d93223924cb94241d492209245894e81cf621a923fc93a31c9f215c238b937f1c61211d235093281c0b21de227f92dd1bcb20b922e691461b7d2056223991041b4920c721d090bf1a27208b213390b61a192045216490091ae11f2921be8e861b871fed20868d861b871fed20868d00004f20d320000000004f20d3200000b729132f5f303fa6ee2a7b306f3149a8662bdf30ea31eda8012c4631853287a9532c9231da32f8a97e2cce31223333aa8e2ce331443336aa872ccf312733f6a94e2c9631e43264a91b2c4c318632c0a8b02beb300232e9a7042b71306c318ca6372aef2fd73067a5b9293e2f6d30b3a46429c92e273042a40329572ec52f99a3ac28ee2d3f2fc9a25928612d912e09a2f927d32cf02d47a18e27882ca82dc2a05c27622c7e2da4a024273b2c502d63a0ee26ed2bf42c5ea07a26582b9b2cc09f1526ee2a492c169fb525a02a162c489e4725492ada2ba49dea24f229642b689dbf249729fc2a129d94244729a12abf9c5824fd28362a819cf2239f28ca293f9c372353287829b69bba2213282f29679b3c228927bf28dd9abf21be263e28539a67213426de27f2991021dc259f276999c02092254e27ed986e203b25f12698981920dc245f261e98bc1f8824cf25c697551f3e247b252297101ff2232425df966a1e1f23b6240a96841d67224b2431951a1dd521e923a494e21c8621842349949d1c67213023cd938b1c4521d22265934a1c12217d22b4920e1cc12017221492ba1b7920af214d915a1b47207821cf90f91a2c2053211e90d81a222031210a90571a14202c217c8f6e1b321f8020598f6e1b321f8020598f000072200221000000007220022100007329002f4e30dea5582a3f302731f2a7a62a9c309f316da85b2b1531563204a9072c6a31b1328fa9322caa310533cba9492cc5312633c7a9402cb1310e3398a9082c7531be32fca8982b22314b3245a8172bbd30c9314ca78b2a4c30403136a6f129bf2fc23012a55b29e52e473067a4f5285f2eeb2faca3a728002e7c2fe7a26a28a72d152f45a238284b2d9a2edaa10528f82c3e2e53a1c327b52cfa2de4a034276a2ca22d4fa0b626302c472dd19f4326e52beb2c189ff725782b9d2c909eb225eb2a522c459e7d25942a1a2cde9d4e254d2ae82bd79d1525082a8c2b6f9dcc24ce29372b479d92248129db2ae39c22241329692a6b9c7323a128d629f79be822572871299a9b7622042808291c9bcf212c278a28369a5821ab264728b6990321622615283299d2201c26d127ff98a520d2256927ac9876207425f6265798312009256d26e397d21fa924f8255d971f1f54248c257a968e1e05242025c0950b1e7523be241d95b21ded226f24d194731d882234246f94331d382206241094dc1ce921ba239993c21c94216c237093881c3421ff221693391c9e2025225692f71b382075217791451b05206821fd90561bed1f7821cc90c71bdc1f64219790ee1b621ffc20b291251ca31f57216c91251ca31f57216c9100009220272100000000922027210000db28652ee22f27a5d1290930ee3031a71e2a73306c3107a8c12ae4301e328da8912b3f317e3229a9d22b7a31d33255a9fd2b9531f23252a9f22b8631e3322aa9aa2b5e31b6329ea85c2b22315a3223a8f42ac730e33128a7832a4d30513149a6d4299a2fb13011a53629c62e3b3033a4e828402ed12f70a39828d22d412faba24628852ddc2eefa114282c2d732e66a1bd27d52c0e2ee1a05227942cbe2d61a0de264a2c672d00a07b26f12bf92c579f1026572b942cde9ed025042b5d2c969eb425be2a352c759ea025772a092c5f9e8c252b2ac72ba49e2b25ea29782b049e94247429de2a559d522409295f2ac19c1324bb28fc29bf9cc2237e28b429659c682355287929149ce72222283829609b5922d427eb28959ada2151279828e1997721c92647287e9921214a260128fe98e220dc257227c0989d207a25f4267d985b200a25672619980d209c24f425a1973e1f402498259696911eda233925f9950c1e4f23d8248095af1daa227a24fd94291d212222245d94e01cc821da23ef93bc1c9c21a923b493841c642151230f93451c1921032367920a1cce208a22cd91da1ba92013226391de1b9120cb216691e91b70209a212c917d1b3e204b21e6907a1aaf1fdb200890d51b581f8420bf8fd51b581f8420bf8f00006e20f820000000006e20f82000007028042e662f90a456299a2fa13083a674291330073117a7172a8c30c0311ba8f42afe303a32bea84b2b5031a332eba8892b7331cf3205a9742b6331bd32c9a8192b3131823238a8cb2af230233288a7612a9b30ae3190a6e329243019317fa565297e2f983085a4ff28db2e373092a3b1283a2eab2f5ca26628b32d1e2fafa11528612dc42ee2a0a8270c2d602e56a02427b52cf42ddd9fd7266c2c8d2d4f9f8326302c402df69e6b26092c0d2d109f1d26a42bca2cba9ec3252a2b762c589e7b25c12a3a2cdc9d49256c2a0b2ca69d12250b2aa82b6c9dc024b9293e2b149d80246e29e52aaa9c45242e298e2a6d9c1124db28232a389c98238928ac29e09b20233d285529649bb522052810292b9b32229e27d0286c9ab52125278a28eb996621a7264328999912212526ed274299e420b9255527eb989b205c25e026a19842201b257b2625980b20cb2413269c97501f8424be25e296d41e362464253696401ebc23fb247b95ad1df9228a24cc94241d42222a242f94f11cc221d823ba93c81c7c2176237993881c2a211823cb922c1cd0209a22fd91df1b80201422a691b91b6120ce214c91a81b4920b2214191961b31208f21b890661b0d201f21d690771a6b1fa2200590bf1b281fbf202e8ebf1b281fbf202e8e0000e624cc2500000000e624cc2500003327592da72e4ba37b28952e113066a5c428302f7c3033a63c29143031310fa7492abe30e7313ca8fa2a3a318b32a6a85d2b7331d932baa8582b7131e0327ba80b2b4331ac3212a8b32afe30493253a72a2aa130c03125a6b62926302a313da555295f2f9430a3a40a29ab2e26300fa4a928132ea22f9ea26028b12d342fa8a10d28562dbf2eb8a09727ec2c322e2ea01627862cb32d599f9926372c4e2da19e3526e82bf92c3d9eff25762bb22c069eaa25072b6b2cb29d6d25b22a3b2c749d1f25612a0c2c269df224262ad32bf89cb924e7297f2be59c8624aa29332bb19c4d247229ec2a769c16243b29a42a5e9cd3230729582a4e9c9923c528112a2f9c2b237328ba290f9ca7221c284e29899b2b228d27e528ca9aca21fb269728609a4c2174264028d599f120ed25c927709983207b251127d2983d202a25982665980520ea244e262b98b01fac24fa25ba97251f53248425f496aa1ee123112546962d1e19239b249d95fa1d94224c243e959a1d19220124bc94281daf219c230894db1c5d212f234993861c1521bf227e922c1cc5205522ba91f91b8f20f8217891e41b5d20a8216991ce1b2e2059215b91ec1b162030212f91f71b0f200021b7917a1bb91fe520e490e11b781ff620a790e11b781ff620a7908523c12acd2b949d8523c12acd2b949deb263f2d5c2e3ba30a28f12d352fbca42828fc2d522f23a5ff27312eda2f01a5a7284e2f7e30c0a5bd299130b03101a7572b9a31f83230a8fa2bfe3188333ba8ab2bbf315533c5a7072b4d31d032c9a64e2ac2300a32e2a5ad2926303831efa40629432f85300ca496288b2e1530a8a22828d52d3d2f5fa1d727532d9d2e90a06527ed2c262e12a04d279d2cd92d05a011275d2c8f2d8d9fc026282c432d009f6026e42b032d699e00267f2bc22cd79db9252b2b8a2c639d7c25d72a542c299d42258a2a222cf39c1125432aec2bc49cc224f2298e2ba19c9024bb29472b719c5f2491290a2b419c29246a29d32a2e9c05243a29942a4c9ca423fa28452a349c43239928d5291d9cd3222f285c29f29b2c229c27dc28309b942106277628519a3f2192264128c699e5202926022864998220b5257027f69832203d25c1267c98e01fd524322635987e1f6c24af25c597251f1f244d252f97d21e9723fa24a496301e1c23b924d295d01d9d2271244995841d38223824d694431deb21e9239e941f1da72175235594f81c61210b230b94c71c02218b227893551c8920f4213892cb1b422096215891361b18206921b8901a1b16205f216b90731b1d204e21a390da1a0920642143900b1cda1f4b2184900b1cda1f4b2184901f23202af02ad49c1f23202af02ad49c0326d12cfb2d17a213276e2dcd2ef4a3a127b82d322fb7a4df26902d092f69a43826792dcc2efca34825102d632eb2a2e627f92da92fa1a4c4297430bb3191a57b2a21317f3288a57b2bb3313b33aba5be2b1b32eb3340a50c2a5530723195a47528a72e243054a22028082ea22f55a1b5277d2de82e9da04327dd2c352efe9fe826832cb32d9a9fb7265b2c7d2dc09e6f26342c4d2d429e4226082c162db19dea25ad2bda2c319da3254f2b9d2cc49c6225fb2a6a2c8d9c2c25b42a402c5f9c05257f2a1b2c3e9ce324462af72b229cb624fd29982b229c7c24b4292a2bdf9b45248429e82a7e9b21245829b82a829be7232c29812ab09b8023f1283a2a029c0923b128ef29be9b692258287529439b0022ca27e528cc9aef210f278428b99abf2193263a28829a11210a26d627939941206f250b276998b31fba242126fc97141f55248c25e396f61e20244325c796cf1ee523042569969a1e6123b9240196551ee22270248f95f51d69222c243a95a61d2d22ff23c794671dea21af239294171dab215d232494f21c6021f522bc938d1cfe207b221e93441cb82020221f92101c6a20cc219391a51b28207b213e918f1bf41f45213091aa1bca1fe6204291ab1a0f1fa5205c90c41b151fba20308fc41b151fba20308fd71a58261e270192d71a58261e2701921b26c62cf42d48a2c5266a2db42ed5a3f426d22d4d2f85a45327442ef22f0ea51628cd2e4430c5a57d28642fa53069a6df28e52f0231e1a6f928fc2f1531b4a6cb28bc2ff43014a66928322fa2302ca59f272c2eef2ff7a388263c2db62ed9a01826bb2cf72d199f80268c2c932dbe9eb226922cc02de09d9d268f2cbf2dce9d4f265e2c882d559d1826332c532dc39ccd25fb2b112d5a9ca625a22bdd2c0e9c6f254f2bab2ccd9b4e25062b872c479b2d25d32a6b2c1a9b3025aa2a562c729b2d258f2a452cc39b1c25662a2d2caa9bee243d2a0f2cb59bbb24192ad62bb39b8024f2298d2be69b5224c129472bdb9b2b248729f62a529cfd233c299c2a659c7b23d928192a5b9cc0225b2876290a9c22229527d528899bbd21c0266428dd9a712152261128af9a2221d0259327249a63203a25e326f898d81fb62423261198171f53248f25ad96cb1e07243a25f6958e1eb723f6248b953a1e4b23ad244495f01ddd226024d4949d1d5c220e2492941b1dda218523fb93cf1c73210b238493941c1f21a82228935d1cd2204122d2922c1c6c20d0218692d51b21206921df91561bf91f3f2144911c1bd31f2721e190e11ac41f17218090171bd41ff220a4907d1a8c1ff9203e90611b6a1fc2201f90611b6a1fc2201f900000d7229c2300000000d7229c2300002b25012cfa2c27a10026d02c062e22a320264d2d982e08a4d426db2d6d2fa8a4b3275d2ef92f4fa50c28ca2e4a30a6a53f28182f8730eea56f28412fae300ca67d28432fae30c4a588282a2f9d3051a56128f82e7b3094a41e288a2e273007a36a27e82d5e2fcaa02c27632dd62ec09edf26ed2c4e2e5f9dbd269f2cf12d9f9c48264c2c822dd19bfc25042c302dd59bbf258d2bea2c279bc7253a2ba12c319ba025f22a6a2c5c9b8025cc2a532c8b9b7625ce2a512c7e9b5925ca2a532cff9a3925c62a512c2a9b1625c42a532c019af824c62a4e2c8c99db24b72a472c6c99ba24932a312c2f9ab224702a1b2ca49b6a24272ae92b4b9cf323a7294d2b409c05231029952a169c39227328f029a59bd621cf2728295b9b9421d9265a28da9ac7202126c9279099572095253427c7982c203b25b7265398d21fc9242b269c973b1f5724a225ce96a21ee323242508963f1e5523c6247b95e31dd3226c24ca94731d4d2212246f944b1df021b92323944f1da6217c2326947e1d5c213a234b94901d43210b235994651df920db220c94c61c972056222993fe1b4520e921bd91c61b3720bc219491301b04209e21ee902e1ba51f26217890c61a3e1f8a203790a019b41e4920008fd01a431e2a20be8ed01a431e2a20be8e000000216021000000000021602100002024b82a452cf79f36252d2c152ddda1ac259f2cbc2d04a3f225f92c302ea3a374263b2d8b2e32a49d26872dee2e68a4b526af2d332f78a4c626cb2d612f67a41127e32da62f5ea44b27302ed32f38a41628e02e623034a49c28b02ff0306ea3a2288b2fc030a8a00728b02e3f303d9cff26aa2d372fb098ec26d82c202e32982f26642c912db696f325fd2b0e2d74968225852bbf2cae964e252d2b882c1b972625e02a602c3e961025aa2a402c2496f824852a292c069609256f2a242c1b964225812a3e2c32980625f92a7a2ccf945f25822bdc2c75946b25122c472d3095a5252a2c582d81987d25042c2f2de19bfb24622bc42c2a9d4c241f2ae32b6b9d452314297e2ad09c072248286b29169c58219827cc28e79af32076261628c499762087252a270e993020eb24a4267a988d1f6b24df259697461fd4235c2515979f1e8e231a253c96261e1823c6246595be1d9e227924db943e1d2c2226244494d71c9d21a1239193be1c4f2138231c93a51c3321fc22f7927d1cfb20ae227292631cb42053224d92391c5720e121cb91f71b01206a217791881bab1f1f21ed901c1b981f07216c90e11a8b1f02214890d11a751ff42006900a1b241fb6202890721ad01e76209c8f6b1c701e2c2038916b1c701e2c2038910000841ea81f00000000841ea81f0000c1226b29732adf9ded24b62bd12c3aa10425102c102dcda164256a2c702d94a2bb259a2cbc2d16a3e225b72cee2d5ea3af25b02cec2d1ea3be25a82ce52d02a38125552c8f2d74a29924ff2b482d64a1d125cb2cf82d14a2f2289f2f89307fa3c02b5832cb3311a1c5294331c332429a3f28b82d862f3c9a6d24f72a992c60989924c6299e2bb89991249c29612b439a42244f29cc2ad79929241429b62a7199022400295d2a80991824dc282a2a5b99e823e428542a6a981b2406295b2a109831246329dd2a9d95ea233f2af32b0b04fc24c32bef2c68158f26142d8d2ed018c927522e1130f307b827592e0c304c9dec25df2c4e2e779f3624a32a4b2c1d9e7f227d28bf299d9c9a21ad265528999b87205125e9266b990120e124922648988f1faa243e26d797a01f5624b125aa97d51eea2330256e96841e5323d824b795281ed3228a243495f91d862255240d95e51d47222524fc94a71d0522f0239994641db9217e2363944d1d6921262325942a1d3221ec220994d91cf520b0224593a31cab206b22f4925f1c752016224792401c3520b4211a92241c06206221ae91171cb51f2f215a91cf1b711f13211b91671b4d1f05219b90ff1a241fed202190e619e01e0821b78fea1aeb1edb20658eea1aeb1edb20658e0000791da81d00000000791da81d000006237b29ac2ae29d0f24bf2a312c2da04e245e2b8b2cc6a0b324d92be52c6fa10d25152c102deca1f6241a2c152dd1a10a252a2c242dd4a105251b2c1a2da5a1ae24872bbb2cbea06824902a132caa9f1e210228f828eb9b241bea22d3242f951317ec204922e9905d1e532476255198c52259275b28449c722381287c29749ce823c828f6299b9cf423b928f229819ca9236228a929379ce923512880293a9c56231d2839299b9b5123142841295b9b8522ac27ee28589a00226c27c428a599b820c226672824981e1e03274728fb94041f0e2932297b9597288f2d9d2e4d9e242aa530b3313f9f542ab4300532789f6225132cad2c629b9a19f924bc276190a91cab23f6253d947121512419261f991f202e24962525980120ed236425ca972120b5235225c697352090233e25eb97891f2723e1249d969c1ffa22ac24ae96fe1ec5226824e995b31e93224624aa95111e41221024ef94a91df821c1236d94521d9221552328940f1d3121d922e993d31ce0206d223c93b71c97200a2212938e1c5c20b921d4925e1c21206e214692141cf11f3e21da91781ba51f1821e390011b5a1ffd205b90c81a031fce203890a91ac71ea0202590aa1aa21e62202690e319121e5420538fe61a251e0120d38ee61a251e0120d38e0000801b3a1c00000000801b3a1c00007d222a29712a559da9235c2ad02b459f0824a52a122c15a02424eb2a532c53a07624402b7d2cbba080244f2b832cb3a05824342b7a2c67a03424cb2a392c0ea05823da294a2b629e8322e428352a759d1d217f270129489c461f3c25ce26359adf1eae240126159af82087261f283d9c5922fb27ce28049d5f222d281f29869c372205282429d59b3522f0271529a09b9a22e727fe280e9cc122b527e4280b9ca4226127b028bc9b76221b278028529b3522c3264f28089b5e2296264328369b6122672632283a9b882238262628669bfa21df25bc27639ada202a25af260899521eae23e52426966e198f1f0921f0904317251c781e5f8eb519c21e9f20d390fd1c8621a22338945c1e5f226a246095c11edd22b5247f95001f3323c924b295341f1723a124dd95e91ec6226f24a095961e792234245c95271e49221024d094eb1d1e22e523a094bd1dfd21b8234d94981dd621872332946e1da5214d2312943e1d712125238793091d3521f3223b93be1cf420c3228292771cbe2090222092431c7e204a229391311c5320fd21c0910e1c2920b4214e91d91bec1f6c21e2906e1b971f2d219f90d41a2e1fde204090621acd1e9020218f6f1a7d1e3820998fec193a1e27209d8e7d1a391ecc1f6b8e7d1a391ecc1f6b8e00004f1b451c000000004f1b451c0000c721a928ce29329c5b226829912a6d9dd622a429f42a469e2d23d9293e2bb29e5d23e5294a2bdf9e1c23c1292b2b859e0f23aa29102b5c9e28237429d82a399ee8221a29772ae59da3227428ae29aa9db3214827b828dd9c25216d261928649c1b213d2604285b9c42219a263d28529cde215627b5288a9c1622a027d928529c0b229227d828cf9b40229827d328e09b85228e27c928019ca9227d27be28179ca3224f27a128bb9b782213278128549b0922c4265828739aae2182263a28e3997b2144261528ae9940210e26eb2771990221b82594275b99e82071253b273e997720e7249e26c698681f0d24a925ea970e1d0f22e223eb94531a53209a21c0913c1a57205d217891691c3e21b0227693bc1df7211b24d9940a1f99229624f3957a1fb922c52452968e1f9e229e24a196631f682248247b96bc1e2322f023e9951c1eca2198232a95df1d99215323c794981d632107235f94541d3921d422fd93f51cf12098226f93b31cb5207122c0928b1c862045223c92521c5c201022ee912a1c3420e821b691041c0d20ae218291de1bb41f55212691a31b6d1f0721ff90251b0d1fcc207290c21ac41e932034906c1a9c1e6620fd8f5a1a7b1e2b202790ac19201e1b20b28eac19cd1d911f568eac19cd1d911f568e000000000000000000004f1b451c0000c721a928ce29329c5b226829912a6d9dd622a429f42a469e2d23d9293e2bb29e5d23e5294a2bdf9e1c23c1292b2b859e0f23aa29102b5c9e28237429d82a399ee8221a29772ae59da3227428ae29aa9db3214827b828dd9c25216d261928649c1b213d2604285b9c42219a263d28529cde215627b5288a9c1622a027d928529c0b229227d828cf9b40229827d328e09b85228e27c928019ca9227d27be28179ca3224f27a128bb9b782213278128549b0922c4265828739aae2182263a28e3997b2144261528ae9940210e26eb2771990221b82594275b99e82071253b273e997720e7249e26c698681f0d24a925ea970e1d0f22e223eb94531a53209a21c0913c1a57205d217891691c3e21b0227693bc1df7211b24d9940a1f99229624f3957a1fb922c52452968e1f9e229e24a196631f682248247b96bc1e2322f023e9951c1eca2198232a95df1d99215323c794981d632107235f94541d3921d422fd93f51cf12098226f93b31cb5207122c0928b1c862045223c92521c5c201022ee912a1c3420e821b691041c0d20ae218291de1bb41f55212691a31b6d1f0721ff90251b0d1fcc207290c21ac41e932034906c1a9c1e6620fd8f5a1a7b1e2b202790ac19201e1b20b28eac19cd1d911f568e00000000000000000000000000000000ef1f02285228e69a1128812c502d93a42c298d2d942e65a6a329da2dea2e82a7f529312e512f1ca85e2aaf2eed2f72a8452be72fae3004a9302c9830743160a9432c97307f31dca8be2b3e301231b8a78e2c6d3177321ba8c92d0034d034f0a8832d1d32ef3271a8b72cc32f803099a7ce2d043077307ea89e2e52309d30e9a8fd2e6b307d30f6a8e02e51307430a9a85930a832313333a98f31e035e3364baa0b303831153118a99f2f49303b30c6a98c2f30302130f6a9a92f3c3004304baab52f2530e12f74aac92f2830d42fc4aad72f2e30d72fd1aaa92f1330932fa9aa392ecb2e692e4fa91b2aa42ba22bb9a4472477277f28419d0021472698270699bc202b26be274e983f20e725ce2773970820e7265f281397bf20562892292a98c820b1261b2859981c1f48247b25b1965b1e632394242f96b81dd022432461957f1d732211242c95241d1f22d023d694dc1ccb21672393948c1c7a2111232294391c2e21c8226993f61bd4207e22bb928f1b8e202f2226922d1b5920da219c91f71a2a20a0213991f91a0d206e210191ca1ae01f2821e0901d1a651fec2032909c190a1faf20568f7219a91e7020c78e4319881e29208c8e3e196b1e0620308e4e19761ecb1f998ef118491ea71f768e221baf1e602036900000000000000000ef1f02285228e69aef1f02285228e69a1128812c502d93a42c298d2d942e65a6a329da2dea2e82a7f529312e512f1ca85e2aaf2eed2f72a8452be72fae3004a9302c9830743160a9432c97307f31dca8be2b3e301231b8a78e2c6d3177321ba8c92d0034d034f0a8832d1d32ef3271a8b72cc32f803099a7ce2d043077307ea89e2e52309d30e9a8fd2e6b307d30f6a8e02e51307430a9a85930a832313333a98f31e035e3364baa0b303831153118a99f2f49303b30c6a98c2f30302130f6a9a92f3c3004304baab52f2530e12f74aac92f2830d42fc4aad72f2e30d72fd1aaa92f1330932fa9aa392ecb2e692e4fa91b2aa42ba22bb9a4472477277f28419d0021472698270699bc202b26be274e983f20e725ce2773970820e7265f281397bf20562892292a98c820b1261b2859981c1f48247b25b1965b1e632394242f96b81dd022432461957f1d732211242c95241d1f22d023d694dc1ccb21672393948c1c7a2111232294391c2e21c8226993f61bd4207e22bb928f1b8e202f2226922d1b5920da219c91f71a2a20a0213991f91a0d206e210191ca1ae01f2821e0901d1a651fec2032909c190a1faf20568f7219a91e7020c78e4319881e29208c8e3e196b1e0620308e4e19761ecb1f998ef118491ea71f768e221baf1e60203690221baf1e60203690d017f9256d26cc91d017f9256d26cc917e28da2c1f2e7ba5002a792ea62f30a8002b192f36301ba9662b982f823085a9032c1c30e330fca92c2c68303d3139aa8b2cdf30c3318faa832cfc30ed31f0a99a2cf630f3319da9932c53316832b5a86b2c7f31b6320da84c2c153120329ca77c2c65304831cda72f2d4b30cb302da8442e9d30fa30c0a8192f00315e3160a9952f5431a631bfa924306d32fc32bfa958303533f533c0a9233009326c32bea90730373155313caaeb2fc830c130a1aae62f76305130deaaf72f71304e302dabf72f79305a306fabf62f6b303c30afab442f0030a32f21ab732d492e5f2e6fa92b291f2bb42b94a44f242b28e928fb9d4f2285278f28f19af02163278228c79945211f2783282199582134279a285f9976215927c328f798e520cb267b282398fb1e07259826e7954a1e1f2456258595d51d5523aa241e95881dcf224d24da941b1d812229247b94fa1c4022fb233594bf1c0122af230394a11cc0216723d3938e1c7f212323b4935c1c3f21df225f932d1cff208322cb92c41bbc20292212924e1b7520cd21b691c11a3c207b211091921a00202a21ed90231a971fe52068909f192a1fb2205b8f6719c91e6c20b98e42199f1e2920358e3f196e1ec11fdc8de0181c1e721f118ed71a2f1e10207990d71a2f1e1020799099176f26d9263e9299176f26d9263e921429842dee2e33a6a22aea2e1330bca8d12b0230bd30e5a9472c68303b3184aa9d2cc230af311aabe42c1631093288abea2c3631383268abe42c36312d3210abdf2c2931323291aac82c34314632d6a9612cfd300832b7a8332cb6309e311fa8202c613032314ea76f2c4b30053149a70e2d6630e830fca73c2ed7304b31eca8bd2f6131d7311caa0230d7317a3254aa0c30f431723264aa08309d31fe317faa1d3038315231c2aa17300d3110311cab0730dc30ce3043ab0f30bf30a830b5ab0f309f307a30f7ab02307730523010acf12edf2fad2f08ab8b2cb42dcb2d87a81d289a2a4a2bc2a22424752874295a9df02226281e29269c9622f227ee28ac9b0f228e27b928489a78212b278b285399fc20b9265328b1987a20f625a527129804206425d1264d976d1ffe246426c196ca1e5d2483252d961f1e6523bc24c3959a1dc222582445953c1d7b223024c294fb1c3e2215245f94ab1cfb21bf2319947d1cbb2177239693641c7f2132236d93141c2f21ce22a292ae1bdc20582201921c1b8220f1215591db1a4a209d212391bf1a19204f210f91bd1aeb1f1721d690c01aaf1fef20a190a91a6f1fc3209290841a551fb5200e90481a1e1f79206a8f6819da1e5720628ef21a931e51205290f21a931e5120529000007823bc24000000007823bc2400005f29082e742fbaa60f2b802f7e3018a92e2c4b3010314eaa932cc030a731f8aaea2c1631063291ab1d2d5e315d32f4ab472d86318d3210ac272d7e31833286abdb2c49314e32b3aaa22c1e312432e0a96a2cf330e8311ba9362caf30973155a8022c573038317ba7de2bfc2fc53038a7d52bb12f82308fa6922c2130b23082a7ea2da3301231f4a8252f3b318931fca9b22f6a31aa3191aae62f5b319831feaa04303e3160315eab1e301c312131d1ab1d300131013109ac2130e730ce302fac1930c230ac3048ac932f6630513004aceb2d0d2ff42e2faac22aec2c4e2da1a67126db29b42a16a14524bf28ad29619d9a237d2862296d9c3d2358285b29bd9b8c222c283829ca9ae621c227d3281e9afa20862621282999a320ca255c27f59889206925da26b3984e20f9244b2676986f1f7c24a32579978e1e08241f259696191e7e23c524ef95ab1d08237e245695381daf224124bf94e01c3f22fb234794881cdc218523aa935e1c8721342362933a1c4c21f8222593231c0c21ba22ff92071cce2067228e92a51b6d20f7213892091b1d207e218091981ac61f1521f2905e1a921fca209390491a851fbd2050901d1a801fbf200090e5195c1f8d20b68fdb19061f6320a98fb01ad41ef420788fb01ad41ef420788f00001e249224000000001e2492240000c3295c2ebe2f20a74f2bd52fa93046a9412c7b304a316aaa982ce030d03100abf22c293121329dab162d5e316232d5ab282d79318132dbabfc2c63316b3246abbe2c323139328caa972c12311432d2a95b2ce830dd31f7a82c2ca13089315ca8dd2b41301d31d7a7332be32fc6309aa6d92a9b2fa130f4a5af2a152f313099a5bb2b572f42307aa6002d1f30d63059a8582e9230eb30b7a9002fb430ee30a5aa552fc630f73032abb82fd830f530d1abde2fcf30da300cacee2fba30ae3025ac7d2f78308c3008ac5e2ea72fbc2fdbaa5c2ce92d352ea0a89f28152cab2c18a45c258a29a72a709f5b24ce28dd295a9dde23b528ac29759c612363286729e39b8d220928f528cb9a19227a27a228529a3d21ad263b286f99cb2005269e27d19856206025c0265b98fa1fe6241f260298611f8e24b4256a97be1e3c2453258f96261ed223fd24fb95b91d1423b8246395621da8228224e594f91c4d2238245d94a81cf721f923e0936c1ca621862332933f1c80213d23a492301c5521ea228c92db1b1821a322e3916c1bcf2041229191fb1a8b20e1210391d31a58208e21af90871a24204d214590701ae11f13210190461aa51ff520688f5a1a851fb120808fbe19111f8820c88e0a1c3c1fcf20798f0a1c3c1fcf20798f0000ab244c2500000000ab244c2500009929762ed62fd5a64a2b0a30d63026a9252c853055311eaa772ce630d731a9aadb2c3431303252abf72c5d31683291ab042d6e317e3290abe62c5e31743227abbb2c3831493274aa942c14311b32a9a95a2ce430d831c1a8122c87306e3152a87d2b1a30f530b5a7ce2a932f9b3091a6352a182f533098a50c2acb2e1f3042a50d2a702ea02f2aa5742a7e2e932f82a5ee2bae2e882f06a7c02c512ff52f6fa8952dd62f2b307aa9092e12304a3036aa402e06302130a1aa4b2edf2f0030c7aab42d4a2f8c2f3caa742cdc2d172eb9a84529692cf72cc0a45026912aa02b7ba0d02445294e2a119e7c24bd28d529a69d2a247b289729409de62341285a29fb9c272305281629649c64229a27c428a59b7221082771282b9ac020332609283b995420762508277d982420182586262a98961fcf2444266197021f8024f025d2968e1e272498256196121eb7231c25b695b11d1a238c242c95411d77221e24c794c31c0d22ca232e948c1cd1216923b093601c9b2126236693291c5f21e1220993ee1b1c218a227492941bdc202d222b92fb1a8b20d621ae91931a4d208b21ee90781a1e205321a5903c1adf1f18211490211aa01fea20a18f381a6b1fa020bd8f7619e51e7320728e171bb51e7f20778f171bb51e7f20778f1606f624c52531811606f624c52531817029842efc2f8da6252b2a30fd30fda8102ca6307831eea95c2cfa30ed316eaab62c3b31363207abd42c6131693234abe22c70317d3234abba2c51316732c0aa8b2c263139321faa5e2cfc30033243a91d2cc330be315da8b92b6f305a31f2a71e2b1830f13019a77a2a772f8b3026a6d929cc2e1e3045a59329512ebd2fd9a465290f2e5b2f85a49c29cd2de82e9ca46429a22dc82e6ea4cb29982d872ef2a4792ab92d7f2ed6a5042bd52d842ea9a64e2bc32d6a2e2ba7252b952d252e02a77e2a0a2d952d0fa6e028502cff2c29a4b526c22a112cc3a02825ea295e2ba99ed7247129c32a419e9c240829522af49d4024b728e529169d91234f286129869ce3220428f228039c212262279028f19a5921b7262e280e9adf203126bf275d99bc20e1255a270f996e206e25d326bc982920ef2435265198991f9024ce25a397d61e55248d25de96801e0a2446255396031e5323d624d995c01dc7226b246995711d68222224f394e71c0b22c2234d948f1caa216023b593491c59210023f992301c2721c722d192141cf82082226092bb1bc72051220b929d1b9e201122b591481b6c20b7213a91ef1a10202821fb90d31ae21ff1207690ff1ace1fba20cc90ef19461f9920c38ff71b581fa8207791f71b581fa8207791a2249b29482a65a0a2249b29482a65a0072a0c2f2b30a5a7262b1830ea30d2a8d02b9c30793194a9232cec30dc310aaa782c2831283286aa972c46315e32c5aaa52c5a317732c8aa992c4c316d327eaa7e2c30314d32e9a9462cfe30083203a9052cb530ad3133a8a52b76306e31bea70b2b1f30113106a73c2a282f6b30eba591297a2eca2f05a536291b2e5b2f87a4fa28ed2d372f17a4bb28992dd52e52a38628352d532e00a35928ee2c042e97a21c28ba2cc92d3aa25328852c582db1a206285d2c382d39a2c8270b2cd22cc6a15827da2bbd2c37a1c1262f2b642ccba03e27512acc2bb8a14b25cc29142b2d9f85243529642ab29d9324fa28252ae99d7124b128d729059e1f2447286929759dff220328fb28689cf0215d2794284b9b6821c5264d28779a372163263528139ac920e225cb27929957205825e126c7980a200225492672988d1fb524ea250998431f7b24a9258897b01e24244e25ef96651eb323fb246d961b1e3e23af242396c31de42271249b95601d772220240f95eb1c0722af237994a01cad213a2335947d1c6421d822e0937f1c21217f22e393471cc120122281930d1c5e20a921da92531b13204121ba91911aaa1fe220ec90221a641fab200390211a4a1f7f200290f419411f7020c98f711b091f96209491711b091f962094910000c41fd32000000000c41fd32000009029bc2e1c3086a68b2af22fc63069a8322b5f30373106a9d82bc530bf319aa9362c0331013214aa452c1731253229aa482c1f312e321daa3d2c0e312432eaa92c2cfc300c326da90c2cdf30e931aea8a72ba7309c31fea73f2b4830313157a7d12ada2fcd3004a7572a2f2f723052a68f297a2efc2f30a5f328e32d332f62a49328852dbe2ecfa352282c2d522ef6a21428d22cf12d50a2d3278e2c9e2daea16b274e2c622d44a134272c2c352de2a0ab26f62b0c2d34a09426f02bec2cdf9f1026972bc32c419f0326cd2a262c329f5825142a852b649ec8248329da2ae09d78243a29762aa29d3424e8281f2a6e9ddc23a528d929149d3f235a287b29909c8e22f227fc28079cd7215a279a28fd9a6e21f32657287f9a1f2181260d28f799c920fc2585276c995f2082250327f498362028259726a3980b20db2436267398b91fa324f0252198691f6c24b325eb97fd1e322467253f97471ec623fc244f96b71d3723b1249095551dca226f2405951e1d5e223324a794e21cdf21cb2371946c1c63210d23c3932c1ce7204f225393b91b8820d92187920f1b45208821f891c61a042042214c91721a941f1821a0908e1ab41f3c217f90941abd1f29214d909c19271fbe20fb8e8d1b4b1fad20f38f8d1b4b1fad20f38f0000c01fb82000000000c01fb82000000929642ece2faaa52a2ab22fae301ba8dd2a45302131caa84a2b9c30923134a9c92bcd30cc319ea9f62bea30fb31bfa9102c05311c32cda9132c05312232a0a9102cfd30193238a9ed2bde30ef3195a88f2ba530a931e6a71e2b5230423119a7962ac22fb73076a6ed29f92e4030a0a56229842ef52ff0a41a292f2e9a2f85a4c528b02df82e39a43028022d212ec0a29e279b2ca12de5a13a275a2c592d3ea1e226262c1b2dc7a0ab26fd2beb2c4fa07326b22bc12c10a03b26602b9a2ca79fe3250e2b5f2c0b9f8f25932a142cd49e5125352aa42b5c9e0925dc29392b069ebc249529ec2aaa9d84243729822a679d0c24c128ff29d89c3c236e289629549cb02223283b291b9c4722d127fc28b69be8219927db28429b702109277d28829a05212f26c927d89984209125f226f89848204b25a12694981120ff244d265898a71fa924de25f0975a1f49246b256497b31ee623fc24bb963b1e2e238d2411968e1daa22432468951a1d5b221024cd94ce1c1922cf238694a71cdb2186233b94751c8a213e230d945a1c54210823a393151c0221c8222a93a61bae2085227792fb1a68201e227591d81a3420a2212291bd1a202075219f90bc1a0a203c219f90ec19ca1f32215e8fa11b921f17210f8fa11b921f17210f8f00000d20ef20000000000d20ef200000e428422ea42fa8a5eb29972f9b30e2a7392a0b30df3058a8bd2a6c306331d0a8502ba730aa3147a9a32bdb30f13183a9f22b02311f329ca9e32bf930173271a9ab2bd530ee31eca8702baf30bf317aa83a2b73307b3110a8bd2a19301431efa6252a802f9b3008a69329d02e283034a51d29562eb72f87a4d328ff2d5c2f32a47c28a72df12e5ea33128212d542ec1a2d627a52cbb2d30a29c27592c6c2d40a23d27382c4e2d5ea10027112c1b2df8a0a226be2bcf2c7fa02f26422b8e2ccc9fc225c02a332c129f5d254e2ac62b979e0225f3296c2b509eb5249f29112bc89d87246729c32a909d67241d296f2a689d19249e28d929089d56233e285e29819ca72205281929169c3622a027d6286f9bb9211d277128d99a6921902615284d9a33211b26b2270e9ae720b22554278e998e205225f62629994a20fd249226dc98e31f9f2415265798661f4f2492251298131f0a244025c997ce1e9a23eb244697231ebb2270245d96531d06220e245a950e1db121a123eb94cc1c69214c23ac94981c4d21052353946d1c2321ad222a94151cdb2040226d93ea1b9120e721b192691b45208821cb91221b28204b215a91fe1a10202c21cc90931a032010214d90f419c21ffb201590de1a9a1e3120ab8fde1a9a1e3120ab8f000072204f210000000072204f2100009c281a2e6d2f1da595295e2f793070a7d429d22fba3011a84f2a4530413174a8d92a86308c31e3a82d2bbc30d93120a9742be230023243a95c2bd930ff3105a91d2bb330d131a0a8cd2a80308931faa77c2a42303c31fca6232aeb2fe23051a6b429412f7a3081a51c29872e0a309ba4ad28032e752ffba37328ac2d122f4fa33828582da72ea9a20528fe2c322e17a2a627ac2cd52daca16527652c872d7da1db261b2c2d2dc2a05426b82be12c30a0d425402b8f2c299faa25f02a572cf59e6a25882a142ca79e5225472adc2bb49e4725192aab2bd59f3325ea297e2b0d9fec24a129162bd59e69241e29692a8f9d8823a128d629a09cf92262287a29489c77222d283829bc9bfb219027c628289b7521de266328879a36218a2635283c9af92043260a28cb99be20f925aa2786998220a92536271b994a204625ab26b9981820d42422266098ae1f6924a725f797d61e17243d25a796441e9723e024e695b71d112380243295561d8d222d24da94251d2f22f0238394e61ceb219e234c94c01cac215d230494b41c61212323f493971c1221b222c393431c8520e621ef92f11b292062213592651b042056218b91441bcb1f77213891de1bce1f4d212691871c491f78204394ac1bdc1eb120c091ac1bdc1eb120c091000092207e210000000092207e2100001b288e2dcb2e9ea42229022f4630c1a67b29a22f9c307aa7d1291c3011310fa85d2a5a3058317ea8af2a8d30a631b8a8eb2ab030cc31d4a8ec2ab330d331b8a8e02aa030c4316aa8a62a75308a31e7a7412a2e302e3108a70d2ad42fd4303aa6a329332f6f3070a51529842e093080a4a228f92d682fc3a35c28892de82ee3a226284e2d9d2e27a2e827ff2c422e7da18c27b92cec2de1a031276c2c8c2d89a0b926242c2f2d58a05726b72bd82cfd9fe625222b7f2ca09fc725c32a402ca69f9825722a042c959f84252e2ab12bd59f3525d629552b109fbf247429de2a499e39240a29522a759df323b928ee29039d9f238428ad29ed9c462351286c29789ce222272838293a9c6522d627f628a69be2215127a428aa9a9821dd265c28569a50216f261e28d999f8200226b0274f99b720982522270a995e203325a226aa983420ca241b267e98d91f6724aa251298df1e15245025e796111e7023f424e795921dd922a1243e954c1d70225d24fc94f81c0f2217248594c41cb521ca235594a21c87217f2311945e1c2e210b23aa93261ce720a6224793f11bae20422276928b1b9420ed21e6918c1b67209021a991931b362056217091f11af61f1021fc90961a871fcb20ba90281b631fe7207490281b631fe72074900000a520992100000000a520992100006d272e2d4b2ee1a3b228862ef72f1ba6e228ea2e3930a9a638298c2faf3049a7cb291b300b310ba83f2a66306f3169a8962a9130a23198a87c2a8a30a0315fa84d2a6a307c310ca80d2a363042314aa7b929ec2ff43070a67a29652f95308ca53829f92e4c309fa4f1288c2e0a3023a4aa28112e7e2f38a362289b2d012fc8a20c28402d8f2e7da18727e22c1a2ebfa004278e2cbc2d33a0c0264a2c632ddd9f6d26122c152d7b9f3426cb2bd62c3a9fb8254f2b8c2cd89e6e25f22a522c7f9e27258a2a162c2b9e0825392ad02b579ecb24da296d2b0a9e8f248e29072be39d4d244129ac2a6c9d1024fd28542a1f9de323ad28e829f89c82235e287829bb9c002311282429699c7d22b427d728f99bc12139279028b39a4d21ca265528019aed2046260d286c998b20c2258327009979206925f626ec9837201e2590268198e01fe424372635989b1f9c24d725e397cc1e4c247625d596511efe231d252696af1d2f239d242b95141d5e2229249e94b41cd121c5232194a61c86217e23dd93ab1c5b212f23e4939e1c2121e22283934e1cd120742201930b1c812001229492d01b5d20c1211c92741b33209421d491421b112064213591d71ae31ffd20e9901e1a0b1f5c203290491b581efb1f1190491b581efb1f11900525a62aee2b729f0525a62aee2b729f0d27592d7e2ed1a31f28d82d072f29a55b28272e942fdfa57028792e0d301fa6cc280b2f5830b2a64b29b42fc83064a7cb291c3017310ba8dd2932303b31e8a7ce292f303a3175a7a1290b301031c8a66929b92fd63015a64d294a2f8f305fa5f328c02e2f309ea4b428522ec72fbba36e28de2d472f6ea21f28752ddd2e75a1c727282d8b2ea7a04827c42c072e1fa0ec26762c9b2d669f6626212c2e2dd69e0726b52bd42c719eb825482b882cee9d6825e72a4b2cc79d3b25942a202cec9df124412aee2b999dd724032aa82ba39da924c129532b939d77248929142b579d38245629d02a0d9d012427298f2aca9c8823f328412aa09c2f23ae28f529879cd622522897294f9c6d22e02720290d9ce7211327a628a19b65216d265028a09adb20f725ee27cf99942085253e27559940203f25bb26f39802200a2565268a98ad1fd0241f263998431f8924c325c397ad1e262447252397521e7e23cb248e96de1dc7226824e695d01d50222224a8956f1ddf21cc23f094051d802170233e94a91c332126239593531cf420c7227c92091ca9206b220d92da1b79200122e391d11b5920a921dd91a01b25204d21b791a21b07201f217a91831bf81fe3206591171b961fd220dd909a1b8a1f072137919a1b8a1f07213791d8186d2645270691d8186d2645270691e625822c5a2d72a2b427a72de72ee3a4ec27b42d032f27a5f027bf2d302f39a5c027c12d1e2f29a55027e22d552feea40c287a2e063064a5b9282c2f803011a6e528682fb6300da6d7284c2faf3099a5ca281c2f84303ca5a2289f2e2730b1a45c28212e9b2f00a43528d62d472feaa2d627792dc22e90a18c271c2d5b2ea3a06427d42c0e2e2fa03427892cbd2d32a00627512c782d34a0c1261c2c2e2d6f9f4926c42be52cb89edc255e2ba42c439e7e25042b672cdf9d3125a82a272c8c9df1244d2ae52b499dba24ff29922b0e9d6f24b229372bbe9c3a246f29eb2aca9c04244529a12a8c9c882309295d2a639c4f23ca280a2a5f9cf42275289b29459ca3221b282d292f9c2c228d27cc28c79ba62104277328f09a4a21942634287f9af7202b26f527f199a320ba2582278c992c205425fe26dc98de1fea246a269598931f9c24ec254a985f1f48247e250e980e1f002427258a97a31e6423d6241897df1dd5228624e795831d51223b248a954a1dec210b24fb94191da621a023cc94e31c68212b239994d31c2f21df226394991ced20a52209944a1ca6206f224193931b6b202b222992681b1a20bb21cb91591b2620852146914d1b1e2067213d91c11a1b207621a390ba1ba21f05214d91ba1ba21f05214d9100006a24e424000000006a24e42400005d25492c3a2d85a1ad26262d4e2e21a44e27702daf2eb1a4c527972de32e0da5a9276f2dca2efba4cf262c2d7a2e5fa44426052d412ebfa30626f32c272ec7a2b825bb2c4c2ecba1ef25da2c612ebaa14b27762deb2e93a248272f2dac2e72a2c926d32c362e93a15627022d5a2e8fa14327e52c2b2e0aa1eb269d2cd42d5ca0b0266c2c942d1ba08926482c642d679f4a26272c3b2d209f1426fa2b052d7f9ebd25962bc82c239e7525332b8d2ca99d2d25df2a5a2c339d0725992a322c0e9dd3245a2a0b2c009da9241d2ad22bfb9c7724d029732b339d31247529f52ac09cd8233229a12a719c8323fa285c2a609c4b23c528112a7b9cfa228628b729659ca822432865294d9c6f2200280d29289c1e226d27aa28b69bb221b52644282d9b1c210726b427479a7c206925f22639997e1fe92441263e98131f7124b525c997e71e3b2466256097d11e042424251197a11ea823e024a996801e3623982488962b1eba224b240196b71d2f22f5236195491de8219523cf941d1dab214a23a694cd1c6a21fd223794a11c27219822d3936c1cce2042227a932e1c9220f821cd92111c4d20ac215b92c81b26206a2115925e1be31f332186913a1bab1fd0206c91651a0d1f82209790271bbe1e8620888f271bbe1e8620888f000040205b210000000040205b210000e624002cec2c46a12326b82ce12d65a36b26032d3e2e39a4a826482d992e97a4ec266e2dbc2ec7a400279a2dfa2ee3a42e27b92d1f2f03a51127a92d152fd2a4b0266e2de02e59a44826132d812eaba31226c12c102ed4a24c26a02cca2d14a29726b52ce22d85a1c926c72cfb2deda0ab26b22cef2d19a069268d2cb52d0f9f2226582c792d299ef525302c4b2d9b9dc425072c1c2d3e9daa25c52bf12c279d7525772bc62cca9c5925352ba12cb19c3725f52a822cbe9c2d25c72a632ce09c18259b2a472cf59cee24652a272ca49cbb24382afd2b749c8a24072aab2b6b9c4824d229552b4e9c22248e29022b8d9cc32333298e2ac49c4023be28052acc9c932243286829759cf321a327d828219c9a21e7266d28c69b80214e262928cf9b4121d725ae27f79bd62052250d27689a0c20db245e26b798571f7224d2250a98ef1e28246125f896aa1ed9230f257c963d1e8023cb24df95ea1d0e2387246095971d8d223e24e794471d0922d023a194d51c8f212d231694961c2721b722c1936b1cd520532279933f1c9f2001222f93131c4b20b421e492921b012056212892431bd11f3621ad91071bb11f24214591d91aab1f1b21eb90161bad1fed20dc906d1a6a1fe7203490401b141f9f20fa90401b141f9f20fa900000f41dfb1f00000000f41dfb1f00007224fe2a492c81a07c25462c5e2db1a2b025902cad2d7ca3d925c92cf92dfaa34426fd2c332e53a49126382d8a2e87a4ef266b2dcb2ed6a40b27792de72edca42e27832df52ec8a40927732df22e76a4ef26692df52e03a4dd26562dd12ef4a2d926422da12e11a23127442daa2e74a158272a2d892efba02327fb2c542edb9fd826ce2c112e719ea4268e2cc42d9d9d7e264c2c852d499d8c26182c3f2df49d5b26de2b052d2f9e0626a52be02c189db0257e2bc62c449c5d25522ba82c5c9b21252c2b8d2c099b03250a2b772c329bd524e02a5c2c8d9bbe24b42a3c2c039c9224732a112cbe9c6d24212ac72b289d0724ab29382b349d24230f297d2ad89c49228828d1295c9cce2112286329079ca5213d27c928a79b35214f260028ba9a6820be252a27699924204825b426b098e31fe62445263798691f7a24c325af97c01e182445259196521e9b23ee24f395e61d0d23a3248e95851d9022472405952f1d0622d7238c94f51ca4216e235a94ff1c722140233994251d312112235a94311dfe20df226494081dc120ba221894711c52200d223a93c61b132091211492931b06206e21eb913d1bfa1f52216e91e71a971f0421bc90791a381f8d207190a119a41e34205d8fc61a271ed01f228fc61a271ed01f228f0000d71b651d00000000d71b651d0000b8231d2aa92b939fce247a2b952ca2a10c25022c032d52a23e25412c4f2dd1a28f25622c7b2d50a3b5258b2cb32d9aa3b325912cc72dafa3ac25972cd12d8fa3b125902ce72d4fa3b325982cd22df5a2c125ac2cd72da8a21626f72c362e8ea21e27c62d462fc1a209285f2e1130dca12928882e2e30919f1a28702e0d301a9d7827132eb32f709aab276e2ddb2ea1996727142d5c2e7d98cf26e62c302e21989b26ad2cfe2d01982227832cb32d259a6826792c9c2db3983226692c912d83973b26752c882d8d97f1257c2ca82df797fe25622c932d139bb125382c742d739c4525f32b242dcd9dab24f92a942c2e9eb823d529af2b9a9dac22b4281c2af39cd821f12707293e9c1221022777285d9b05218a262d28a69a7620af2536275699ef1f0a2572265e98641fa3240a26e797bc1e4f24a425fc96e41e07243925ed964f1e6e23e8245796c91ddc228f24a195531d36222f240395e01cb921af236f94961c53213a2306947c1c21210d234c936f1c1121e52236934f1cd920a1220293421c9c204f22a8922f1c4220d6218b92d81be11f4f212292401b641f10217091ed1a5c1ff920f890b61a5b1ff7209b90d61a621ff32079902d1b2e1fd0207790fd1a1c1f9c20cb90361ddf1ef11f9196361ddf1ef11f919600005e19e31b000000005e19e31b00008820f627e828989b0c24bd2a1f2c6ca07724112b5c2c4ea18c24852b9d2ca0a1e524df2bdc2c22a22025192c0b2d80a2f8240e2c112d4ea2dc24ef2b0a2d16a21725cc2bf72c36a21925662bc42cfaa15a25ce2a602c1ba20c24762a112c6ca0ef24602c322dc3a034295f305c3139a3142b2332f633a1a0532ad0315d334497ab296b30903110157028ff2dd92f4018fa267c2cce2d3c12ab250a2c122d3c0f5525062ced2cce0ec525022cf92c28118c25602ccf2d4f158226ce2c0b2e271020278f2d042faf1911289e2e5330ee184b284e2fa730ee944e28182f8530bb9e6b27a32d2a2f44a158250b2c382d7aa0d9234c29592b529e0c22ee272e297c9c5121672628288c9b74206825fc26c2993c20fe247b2611995e20dc245726f398951f832419260d98291f2b2489253297631e92230b2537961f1e0023a8249195d51d9a226c241e95a91d4b223d24f7948d1d0b220b24de946f1dd421ba239894561d8c215a238394421d54210d237294181d1921cf222594b21ce0209f22a4937d1ca6206d220593381c6f2023229892181c2e20b4216792231c032061217792161cb91f27212092f61b701f0c21f891b01b511f0421c491541b4c1f0b214391181aed1e1e21958fc21ac31ec6203490c21ac31ec62034900000a21c671d00000000a21c671d0000582215294d2a9d9d9523152a902b25a0c6236a2a032c6fa04324d92a532cffa0af24332b802c91a1a724432b892c9aa17d242b2b7a2c68a1a224302b6f2c6fa1a524e42a532c39a1bd24ce2a452ce1a062243e2abd2b05a0f9229328aa29bb9d901f482592269c99c0181d20a5214a92f215901ee4201e8f311ac4201222d192d11e6223c2248197b7210a2691274a9ad4222a277028849b5a236b278e28a09b652210274928a19afd204e26b327db98761fb1252c270697ab209a262f28e497ba1d4e27ce287a948725ed2be82c959b7b28342f6a304a9dfc2a9f30bd31cd9f8a27362dbe2d359cdc1c202880294a93b61a66240626e3910a20f7232d26dd97ef20b5244f26f598e21f132471251698122016245c25389821200a245e2548980c20d323382511982520922317252a98961f0d23c024a0976d1fc7227f243a97b71e98224e245296451e59222b24b495cf1d1022e4231995721dca2183239b94281d6c2115235c94e51c052190222394a41cb42023228d938a1c7920cd216293611c4020882120933d1c0e204621e592e81bad1f12212e92521b651fec207d91d71a121fde20e990cd1ae21ebf20e290c31ab01eaa20a490d11a991e6920ad90681a0c1e51209990f61a471e13208d90f61a471e13208d900000d0190b1b00000000d0190b1b00001522cc28032a319d5623d3292f2b509f5623e6294c2bc89f5a231c2aad2bea9f1424842a102c75a03b24b02a2d2c9fa01424ad2a2c2c64a0f523692afd2b18a09923d829422b559f4b235829af2a759e8022c8281b2a719d14218c27bc282c9c6a1ff0242a26179abb1c2522f523c6976a1ef22290247999751f57256a277c9a682193262a28719cd82123279e28569cec213b2796281c9c5d225f277f28379c332223275d28d09b0922c82640286a9bac2179261c28259ba5212e26b5271e9b1c218b250a27c49a16209824dc2547996f1d10228023ad967e190f20592138924315b11d8f1fa08d5a18841e20208390271c4a20a8212c94eb1d27225c24f295a31ef122122575963b1f38230a250997571f3423ed24e896301f2823d124c496df1e0223a4247796961ec1227124fd95391e7c2241247695ec1d422215243295b91d1622e923d694901deb21ae2386945d1dbc216e235d94511d8b21322328942c1d5d2102230b94f51c2821d222c093911ce220a122d992421c9a206f2262920f1c592025221692f51b1f20d121f891f81be91f9521fa91af1ba31f4c218591251b751f0d212191bb1a191fc7209e90531ab21e7d202390691a751e2e20fa8ff019211e1a20a18eac1a051e691fe08fac1a051e691fe08f0000eb1a251c00000000eb1a251c0000bc2172287f29879c4f221229382ae39d9b223a29792a609ead227b29cd2a729e0e239f29f82aec9ed9228829eb2ab89ed5227d29d92a989ed6225629a82a469e96221e29522a849d32229e28a929fe9c5f21a427d628549c93204f260b285f9bee1f3025ae26849a1b1fa9240826f399b81ff5245c26779a74208f2526279a9b3c214c260a284d9ccb21c7264928649c0622ef2667285f9c582210277628679c4f22ec265d28479c4622ba264128419cf9217c2615280d9cfe2131260128109c1622c225af27399c8121802552274a9bdd20dc24d226719a08202524bf2556994c1e43221c24f0973b1ca5203f22cb94151a012035211d92f01a9c20c0218792271de3214023af943b1e88224924de95ef1eb122ac248696621fda22c72430976f1fa622ce243c970c1f81229224a296a11e38221f243e96441eff21c223b395fd1dc52179237295c41d8d2133230f957d1d5321f522a4943f1d2521bf224594d61cdd20832290938e1c9b2056221f93681c6f202d22e4923d1c4720fa215b92311c2320db2149921c1cfa1f972129920b1c9a1f4921ce91c41b541f09219391251bf91ed1202191cb1abc1e9a20e1908a1a9f1e7520b190601a6b1e3520c890bd19121e0a201e90b2199d1d461f5c8eb2199d1d461f5c8e00000000000000000000eb1a251c0000bc2172287f29879c4f221229382ae39d9b223a29792a609ead227b29cd2a729e0e239f29f82aec9ed9228829eb2ab89ed5227d29d92a989ed6225629a82a469e96221e29522a849d32229e28a929fe9c5f21a427d628549c93204f260b285f9bee1f3025ae26849a1b1fa9240826f399b81ff5245c26779a74208f2526279a9b3c214c260a284d9ccb21c7264928649c0622ef2667285f9c582210277628679c4f22ec265d28479c4622ba264128419cf9217c2615280d9cfe2131260128109c1622c225af27399c8121802552274a9bdd20dc24d226719a08202524bf2556994c1e43221c24f0973b1ca5203f22cb94151a012035211d92f01a9c20c0218792271de3214023af943b1e88224924de95ef1eb122ac248696621fda22c72430976f1fa622ce243c970c1f81229224a296a11e38221f243e96441eff21c223b395fd1dc52179237295c41d8d2133230f957d1d5321f522a4943f1d2521bf224594d61cdd20832290938e1c9b2056221f93681c6f202d22e4923d1c4720fa215b92311c2320db2149921c1cfa1f972129920b1c9a1f4921ce91c41b541f09219391251bf91ed1202191cb1abc1e9a20e1908a1a9f1e7520b190601a6b1e3520c890bd19121e0a201e90b2199d1d461f5c8e000000000000000000000000000000002b255d29312a69a04927192cbd2c37a48d28d82cbb2deaa5ef282a2d1c2ecea60e29452d3a2e38a72f29582d5e2e91a74829a52dc32ecca7c029882ebb2f1ba8462a712f573014a8242c4631393275a8232d16335234e1a8b32c6231163263a82b2c482f693083a7092ca02e8e2f25a7172d672f193044a8732e2530643032a9ea2e613082303da9012f6230ae30dca8d32f6f31df31cfa85131c135a336daa933306732fa3206a92b2f4d302a308ba9572f1730e62f43aa782f1330d02f7eaa792f02308e2f9eaa7d2f0530992fc0aa5f2f02308b2fa5aa5e2ef62e932ebda9c02ba02c912cbea61926e128772986a0ea2191261228139bf12021267c2720992b20e9253127d897ef1f1a260f28f6967d21f727fc28fe982a2123284b29dc98441f942516274d97031e0d2410256d96da1d3023732441968c1db0223924ee95631d5b2205249595291d1822b8235a95fb1cd1216a232a95be1c82211f23eb94711c2e21ca227794211cd0207c22c693af1b87201d22fd92211b4020c8210892051b0e207e21b691c81ad41f43214d917a1a9d1f0121db90f119521fea2044908819121fc320968f6519b11e7f200f8f4819751e2220e88e31195c1efc1f758e2c19591ea81fc48ef218291e8e1fc98e541ba31e4420189000000000000000002b255d29312a69a02b255d29312a69a04927192cbd2c37a48d28d82cbb2deaa5ef282a2d1c2ecea60e29452d3a2e38a72f29582d5e2e91a74829a52dc32ecca7c029882ebb2f1ba8462a712f573014a8242c4631393275a8232d16335234e1a8b32c6231163263a82b2c482f693083a7092ca02e8e2f25a7172d672f193044a8732e2530643032a9ea2e613082303da9012f6230ae30dca8d32f6f31df31cfa85131c135a336daa933306732fa3206a92b2f4d302a308ba9572f1730e62f43aa782f1330d02f7eaa792f02308e2f9eaa7d2f0530992fc0aa5f2f02308b2fa5aa5e2ef62e932ebda9c02ba02c912cbea61926e128772986a0ea2191261228139bf12021267c2720992b20e9253127d897ef1f1a260f28f6967d21f727fc28fe982a2123284b29dc98441f942516274d97031e0d2410256d96da1d3023732441968c1db0223924ee95631d5b2205249595291d1822b8235a95fb1cd1216a232a95be1c82211f23eb94711c2e21ca227794211cd0207c22c693af1b87201d22fd92211b4020c8210892051b0e207e21b691c81ad41f43214d917a1a9d1f0121db90f119521fea2044908819121fc320968f6519b11e7f200f8f4819751e2220e88e31195c1efc1f758e2c19591ea81fc48ef218291e8e1fc98e541ba31e44201890541ba31e442018900527712a3a2b37a20527712a3a2b37a29828d42c932daea506295a2d472e2ca7ad29ec2d002f3ca8162a572e922fa3a8792ab92ef32feea8b72a362f4a302ba9162bd12fab3057a9982b3a300a314da9302cb330ab314fa9fb2bfb3012326da85a2ba130a131eaa7352bf02fbd3088a7662b372f3d30e7a67d2cb82f593060a77f2d1230673041a8882e8130cd300ea93d2f0b3161319aa90330ef31663235aa4e302233de331daa41307e3204330aaa04303f31623179aaa92f9c309330c9aa8e2f5b304730eeaa802f433025303dab6e2f2a30fa2f68abf82e832f162f0fab702d1a2ee92d82a95c2a422c682c3da67925b528712969a094222a2762285b9cfa2156276828f69ac5214f278d28cd994121f3268c281d994a210e279628269935211027ad281199952063262828c098f91eb624f8253b97fb1dce23fc240396aa1d2c238d24b295651dda2258246c95111d912232241895f11c4f220024cf94a61cfd21a6238694861cb52157236794531c6b2105231294211c1921b222c693e31bd1204d222c93631b9220f5217b92161b4e20a221fd91bc1a21205a217a919c1ada1f0e216091321a7a1fd620d890b419201f9f2018908319c91e6420908f38198c1e2a207e8e2e19611eb81f728e0119f71d6e1f8c8eee1a871e4d20fa90ee1a871e4d20fa900827b52a7f2b1da20827b52a7f2b1da21529622d422e48a68229f62df72e05a85a2ab72eef2fe4a8c62a202f423053a9342b902f7b30a9a9af2b1230d6301aaada2b3a300c311baabd2b4c302331d5a9d42b69304b3177a9e92b82306f3115a9952b7930613172a8402b2b30083193a7e62aba2fa33054a6892b382f383030a6532cb52f6630d4a64a2d3d30a8302da85f2ecd30343108a9412f4e31c031d8a9c82fc731363264aadb2f8a31dd3195aaf92f02311631eeaa0a30cc30d3308aabb32fa4309c306eaba62f70305f30a1ab202f1b30093055ab552e462f192f9eaa682ca42dc22d89a8a828a02b362c45a4d724e728c029df9e6823282824298d9cc1220828fb28269c7622e527e728bb9bd721692792289e9a3021ca264728e099d4206326142878995020b42550270699b01f252573265b98351fb124e125ef97701e1f243025e296f91d4423ab2462966b1db1224f24cb95061d6c221e243595c91c2a22f423f694951ce52199239b94671c9e213b234994581c5c21dd2216940a1c09217b225893771bb32008228d92011b6220b221ec91d21a33206e218c91a51a1320372168919a1afe1f19212991831ad01f0c21e2906a1a941feb20d090661a711fe5206490241a281fb02037906c19ce1e6b20708fe21a411ec91faf8fe21a411ec91faf8f7627802b3b2c22a27627802b3b2c22a26b29db2db62e38a7fa29642e812f69a8a62a2a2f33302ba9222ba42f90309ba9ad2b1630d63008aa092c5530253168aa342c873060319aaa3c2c9e30833173aa1d2c92307731dfa9db2b7a3066312ba9dd2b71305d31ada84b2b41301a3181a7e52ad82fcb308ca6cc2a442f6f3058a6ee2a422f4c3023a69b2b4d2f36309da6b02cf32f743026a8c92d9430023137a9a82ec8301d3151aa052fc230f930c7aa252faa30c63020ab3e2f7e30863073ab4a2f5c3053309eabff2e34302c304fab5b2e932f922fa4aaf32c202e2c2e2ca9272a4e2c8e2c09a67c260e2a002ba3a175248b288429799e912350284b29039d52234b283a29ba9ceb2231282b29409c4f22f127fb288c9b4d21252781282d9aaf203826d12775998320a5252627669954204625a5262d993a20da2409263199431f4f2477253b98481ecf23fc241e971f1e6323bc24bc96b91df62275241e963c1d8f2236246e95db1c1c22dd2309958a1cbb2162238f945b1c6f2116233d94311c3421dd2214940d1cef209722a193a71ba3203c22f592471b5820db216392081b25207e21f291c71a0a2042218391c41afd1f1a214a91951adb1f0a21ef904e1aa61fdd2053900e1a7d1f9b205890021a141f7d20db8f4e1ad71ebf21078d4e1ad71ebf21078d44277d2b1b2c34a244277d2b1b2c34a293293b2e2d2f56a7472abb2eea2fafa8df2a782f673058a9452bf42fc230a8a9cc2b3430023120aa0f2c65303d3161aa1e2c8230613179aa172c8b3072313caa0d2c84306b31d9a9d82b7030603129a9d22b6f30593176a8432b31300b31b4a7bf2a882fa7305fa7292af22e4c3057a60a2ac32e233005a6c0295e2ea92f8ca55e2a572e832f25a68d2be32e00304aa7882c532f093097a8132d692ff62f4da9792d722fbe2fcea9f92d522f692f9faab82d562f942f57aa632dcb2e062fe3a9a82ce92d382ef0a89f2ae02c4b2db6a63928ca2b772cbfa37c25e829c02b3ea06424f3282a2a3c9e17248f28a629ad9d7a2370287a29119de0222a281e29719c4222ab27bb28e39b8121ff265528ef9ab4205226e427c7997220bd252a275299382022256d26ea98bc1fb524e82562981b1f73249d2506988c1e2a243d256a97201eb423e924be96c21df222a92457966a1d8f227024f695051d1e2222245d95b61cce21b923bc94791c87214a235a943e1c5d210f23fc932d1c3721c5229893d31bfe2085229e92411bb02026222292dd1a7320ca219591c41a4a2079214a918d1a1d203f21b3907a1ad71ffb207190301a731fc9200c90ff193d1f8020d88f011ac31e6c204f90281cdc1f70216090281cdc1f70216090ff265a2b192cdca1ff265a2b192cdca16029162e1c2f13a7492a162f253096a8fa2ac92f96305fa9442b0d30de3098a9bc2b4030193104aa012c663049313aaa0e2c793061314faa102c843075311faa022c80307d31b8a9072c893079312ca9d82b8530713149a8812b48303531d7a7be2a992fb9307aa73e2a0b2f6b30d2a6b829b02e3530e2a55929392e932f55a523299f2db12e0aa565296b2d5c2e4ba5a929912d8d2e8ea52f2aa12d822e43a6cf2ab72d672e01a72c2ba92d702e61a7092b9f2d482e59a7c42a582d022ef6a670299e2c462d14a5dd27392b242cb6a2d525172a3f2b6ba0ef249229a82a019f4624e228f029ef9d42247a2895290c9e092449286329fc9d90231d2825299c9dcc22cf27e028ef9c0e2246278728349c0d218a262828da9a7420d4259927c2995a205025c42658991820f4244126e6988c1fb82413264698ff1e5f24d025b497631e04248025d496dd1d78230c251496a21dea226f24aa953e1d552200241a95c51ced219c23a494931cb52148234e946c1c85210c230594311c4c21c822a093f31b04217322f992b21bc3201722c192381b7920c5215692fb1a45208121ae91cd1a112045215191651ab81ffc206390f8196f1fc6206e8fe919431f7820bc8f6119e41e4d205a8e561bbc1e69201990561bbc1e692019908e261f2bef2bb3a18e261f2bef2bb3a11429fa2d1b2fc3a6482a242f353089a8d82ad32f9d3029a9262b1630e83072a98e2b46301d31d0a9d22b6b304d3105aaea2b7e30623108aaf12b89307831eca9ec2b8e308d3188a9f62b97308531fca8c22b99308631dba7732b5d3056318ca7a32ad22fd3305ca70a2a112f5d3080a669294f2ec42fe9a51029bf2d1a2f4aa52129552da32e86a5b128142d462eaea45028c72cda2d2aa45a287e2c482d22a40c285e2c362d4ca31d282f2cf12c6aa3ef27062cc42c06a39f278b2b812c24a2ad26322b562ca3a02826ad2a0e2c46a056250b2a3f2b3c9f0b25a229cb2ad69ec2244829942a9a9e5324ea283f2a019ebd238a28b229409df22223282129999c40225a2791280a9c6d218e261828d69ac7203126a427059a9e20d6255727ac99b6208025f826c999772019256b267d991020b824e325fe985e1f65248d254a98e61e3c246025d097771ece231c251e971c1e03239c24ba96e31d842235247b96741d3222f723a8950f1df7219923ec94ab1cae2151236594611c61210223f7933c1c2821c822b4930e1ced207e221e93d41bc5205122de92c31b9b20162290926a1b5c20be210992f81a02201c217291981a9b1fd020bb90a11a831f9520c290271afd1e7b203391941b711fec202b92941b711fec202b920000cf24f32400000000cf24f32400002c29e62d462f8fa6192a4b2f623073a88b2ad52fa730e2a8dd2a1230e0302ca92f2b30300b3179a95a2b4b3031319aa98c2b66305231bfa9a82b77306c31a6a9c72b88308b314ea9f82ba0309431bca8c92ba3309931a3a7572b5630563152a76e2a9c2fc53021a7c329b22e313063a633291c2e752f99a5b9289f2de62edca48e286b2da42e8ba42728262d552e02a4ec27b02ccf2d44a36127672c892d6aa20d272d2c0d2de8a11a27e52bb52cd6a15826c02bcd2ce9a04d265d2b882c79a0e425b92a2b2c3c9fc125222a652b16a08725b129ef2a30a0d2248e29c12ab19e95244329602a5c9e7824f2280e2a7d9e5e2489289f299e9eef231b281d29e29d90228427ab288e9c8621f02656287e9b162198262328939ac9201826d727089a72207e25192776992e201b256f262299d51fe0241b26af98621f9624cc254d98051f57248125f397861e08242d256497591e8323da24fd96121e19239524af96c81db92259242e96661d4922fd239995ef1cd6216a23f5948c1c7321ec226d945d1c28218e223f944d1cd8202a220c94481c8820c62108941f1c3d2067217f93561be61f0a213492681a6d1fb9200191eb19421f91204090f419401f702046906e1a991fa4206990741b351fd320e090741b351fd320e0900000071ff41f00000000071ff41f0000b128ba2d072fe0a5d929102f3d302da82c2a742f6f308ea8982afc2fd230eba8182b3a3016314ba93b2b57303d3165a9542b6530503177a9632b6c305e3155a9642b6d306b31fca86e2b72305f315ba8502b7d306c312ca7f22a38302e31d1a62c2a692f9d30a6a6bb29a72e32302ca62429f82d6f2f89a57d28672dba2e9ea42428042d152e42a4ed279c2c9f2de7a30f28662c662df7a31f28422c422d2da41627222c272d63a2fd26f32bd62cf7a15526b82baa2c1aa17b268e2b9d2c04a1c925152b752cd89f6e254f2ac52b319fe024c4291c2b9d9e6a243929702a209e2924f528182ac69dcf23ab28c6296c9d352358286c291e9d992204280a29949c172263279f283a9caa21f9266828ae9b3c21a0262f28ee9ad02016269f27389a80209725f926ac9935203e2599262b990e2001255626da98d11fbd2413268d98821f8c24d4255f98131f4a24952501988e1e002422256d97fb1d4923a5249596711dcb225f24d195391d792235246b95021d25220d240895b81cb4218b23be94651c3f21e02247941b1cd7202622bb93b71b7c20bd2143932e1b2f206c218792d91af41f342102929d1a931f0c216191921a941f2d21ed906b1a8e1ff820d090fc19f21e9820728faf1b0a205a210791af1b0a205a2107910000021feb1f00000000021feb1f000091289d2de32e6ea59a291a2f4430e9a7102a852f79306da8532ae22fc430aaa8ac2a1930f630eca8d32a35301b3117a9062b543040312fa9132b603055311ba91a2b6b306d31bba84f2b7f30723158a8152b79306e31f3a6c22a32302f3186a6032a582f8f307aa66b29742e0730eba51b29302eb02f6ba5cb28cc2d472fdba446283b2d812e32a40b28d62ce22dada38327842c762dc5a2d3261c2cff2c0ba27226ae2bcd2c4ca140265a2b962c3ca111263e2b8c2ccaa02a26452b922c93a0d825ca2a712c0ea05e25702a022c739ffb24d0291c2bea9ea7246b29a62a759e21240929332abb9da2238b289d294c9ddd221a281f29a79c6522e327ef28569c25229c27cb282b9cec216927b328049c78212d2795286a9b17218a262c28be9ac220bf253127269a6e204a2591269599432015255d263c99df1fce240e26b6984d1f7924ae252298de1e1d244425c7973e1e9123cc24df96d31df022642439964e1d7c222724ac95fd1c3f2201242c95cf1c0722bb23fd94ad1cd8217f23b394881c8d2138238e945e1c4521f1224094181cef20a222b593cf1ba92054221a93281b6120f6210d92d41a302087215691c81a11204e21de90c41a04201b211291e3197a1f0921338e151c731fcd20d290151c731fcd20d2900000c61f822000000000c61f822000003c287b2dbd2e2ba54b29db2e233064a76929f82e3030e6a7a4294b2f73302aa8052aa32fa63071a8462afc2fdc30aea8942a2a300f31dba8c92a42303231d8a8d12a3f303e318ba8fd2a4630393152a8fb2a3d303131daa76b2ad42fe43080a6a829e32e523046a66529412edb2f27a60529f02d652f53a59e28a52d0e2f9ba44f284f2d952e28a41028f12c322eb6a39b27922cae2ddba21827402c4b2d0ea2a1261c2c192d8ea15b26d42bdb2c39a1f725712b9d2c85a0c325492b8b2c2fa03725a62a2f2ce79e0925f6295f2bd49eab249429d92a7b9e85244729972a6b9e55241d29662a4a9e2d24d3280c2a989ea12351286d298a9dd92204280629c19c5d22bc27e028519c03225b27a028f59b6421b7263328f79a18213826bf276b9ada20cc2540271d9aab206825d826e2996e201325822671991320b7241e26e098721f5e24bf257498f21e17245a250b989c1eb1231325b3976d1e3a23b0244797b31d5722282446961f1db321c2237995d71c85217c230595961c51213c239c946e1c3021fb227494471c0821a2224d940b1cc8203522df93c61b8b20de2111936f1b3d2074218692141b06202421fc91df1ad51ffb205f918c1aaa1fd3201e91071a6a1fc3208590fa1a5a1eff1f588ffa1a5a1eff1f588f00004220072100000000422007210000e227442d7b2e8fa4fc289c2e033009a72929cd2e183073a75929192f5930cea7af29712f883032a8ee29c72fc23060a8232a0430eb307aa83a2a1230043172a8312a0e300d3139a8302a0830fd30a6a70f2a0030ea3054a61b2ac02fcc3061a69729f62e5e301ca6ee28262eb92f3ba59d28c72d422fada46128612dcc2e5ea403280a2d3a2ebea39e27b52cd02d1ba30627642c742d1ba2a926192c212d94a12b26ab2bce2c11a1b425372ba02c69a08225e72a572c2ca06925a72a272cda9f0f25362adf2b069ff324ef299a2b079ff724c529572b359fe22495290e2b3e9f9f2436298f2a989f0624a928d029f89da3223b284329b69c872227282a296d9c2e22eb27e528309cc0211f2781289d9b5c219e263b28199b142159260e28b99ae1201726d0274e9aa720c7256a27039a78207525f926a2994520072565263e9906208d24d225d198a11f212450255298de1eb023e6248f97451e3623a124b396ac1db6224c24e195491d452200244f95031df1219d23e194b51cab2146236e948d1c6f21012349946c1c1e21b6222a944e1cbd2030220d940c1c4c209b215c939b1b11205821ad92191bf01f53210192ce1a9a1f6a215291f01a531f2a213391071c381fa920d092e11b0c1f20212791e11b0c1f2021279100001920ef20000000001920ef2000000e27c32ce22df0a38e282d2e7d2f49a6d528962ee52fd3a60929e42e3c3031a75f29372f6c30c1a79829852fa43015a8c329bd2fc63029a8cc29d02fd83018a8e929db2fe13008a8c429a32fc63050a7bf29872fa930a6a6ac29442f7d3004a65129b92e343078a5cb281a2eb62fc8a48428b92d2f2f5ca43c28582db92ec5a30d28252d722e2ca3aa27ee2c3b2e6ba23a279f2cca2db5a1c226452c572d56a13726e32bee2ccfa0ff257c2bb12ca4a0ca25072b6d2c7aa09a25a02a312c3ea048252b2abc2bd69ffb24d829442b3b9f96247529cd2a839e43241e29652aea9da723c028eb294f9d38237f289329039d162352285e29089d062331283329fd9c8e22f127f9288c9c20226427af28409cad21d0265e28b39b82216b2626284b9b34211926d927b99ac720b1255227059a8c205225c926bb992d20ed2452264399e11f8b24d225d698601f2c24662569988e1ec4230a256d97f51d2c23c1248f96821dad228124e3953b1d48224a246d95f71cfb210a24fd94be1c9b218723c4946e1c4121232374944b1ce5209b222e94081cb0203522d893db1b9420f0216593a81b8220c321b8925b1b4c206f2138924a1bfa1f1e21b391b71a841fde207791511a411fbe20f0908e1b8e1ffc20f0908e1b8e1ffc20f09000007d204d21000000007d204d21000044267e2c942df3a21e28d02d0e2f8ca569282a2e6d2f28a693286f2ee52f75a6d128b52e1830e1a61229082f503052a74c29432f7530a5a757294b2f87308aa76f29482f853069a761291b2f7030fea62d29ed2e5b3027a64429d82e3d3081a52f29bf2e2330d6a41029622efb2fe3a4b628f82d7a2fe4a36c28942d072fd8a21928362d802ef3a1a027db2c082e4ba121278c2ca72d9ba0bd26422c522d3fa04926fc2bf22c10a0f025852baa2cac9f5c25f52a602cc19e1925932a2b2c969eca24342acb2b309ead24f129662b579e5f248f29002b359e33244629b32a199e0d24fc28562ae19de023bb28032ad79dd3237428a729ee9d9e232d284429a69d0023ba27e428159d55222a278c287f9caa21b9264628ae9b1f2154260f289e9abd20e3259627f999622075251327639951203525a0262a992720fa244d26d698a41fba24fa255498481f6d249b250298801e10243525f396f21d7323d1242b965e1d912243243995ee1ce621be23cc94bd1c9f2176237694c11c70213a237994b51c4521e9226e94b11c022192226b948b1cb3202d224694341c7220d121e993cc1b3e2093211793121b09205621fa91b71ad31f39214091b21abf1ffa203c915a1a581f90208f90bc1aed1edb20f38fbc1aed1edb20f38f0819ca262827d1880819ca262827d1886026952cbe2d2ba37d276a2d812e0ca5f1278c2dc92e7aa51928ba2d0a2fb8a52a28e62d2f2fe1a54728222e852f0aa679285c2ec92f63a691287b2e013073a6bb28922e143061a6c828832e0f3037a6bd28672e0330efa5bb28442ee42f3ea5aa282b2eb12f81a48028032e742faea37528cd2d312f54a22228622dc72e57a125283e2da32e17a1b527e22c2e2e9da01f27822cbf2dd79fa5263a2c4d2d509f3f26c62be22ce19e9f25442b912c309e3d25d62a462c1a9e36258e2a122ce69e0825332ac52b249fda24eb29772b5b9fa424a529282b979e65246429dc2a3e9e31243629972ad19dfe230829572a8b9d8b23c8280d2a3c9d2b237b28b829179db4221d284c29a79c2e225227d2284a9cb521aa2666288f9b3d212a261328c49ac520be258427299a6e205d25e626959925201b257f261799ea1fec243826bc988d1fac24ed2565981a1f5b24902505988b1ee92312256997301e20239724d096fd1d93223f246796ed1d2b2200245696921dbd2192239995111d5c213e23c494ad1c16210e231a94551cd620c7225493f21b8b206922b892d41b6320ed219e92b01b3e20902141923c1b07202421e291251bcf1ffd209591151bc51fc5208991d41a8a1fbe201f91bb1bae1f2b210e91bb1bae1f2b210e910000b5210e2300000000b5210e2300001425ac2ba42ccba178272a2d5a2eeaa484274d2d752e11a5c7276b2da12e4ea5db27782db72e6ca5b627762dbb2e52a58d27692daa2e35a59c27662dac2e31a5aa27662db12e0ca5bf27692dbf2eeaa40928872dda2ecba40c28792dc72e8da4e7275b2da62e01a4fc27532da72e12a3d927392d7c2ed2a1b027072d362ef7a08727ca2c042e81a04427912cd72d3ba0ee26632c982d25a06a26082c252d789fe725732bbc2c109f99252e2b772ce19e2a25aa2a3a2c589ec1243f2ae62bd79d6d24db294f2b709d3f248b29f42a5a9dfe234529a52a2a9dbd230f29692a209d7823e128242a109d2723a028e329da9cd72250288529bf9c7322d327f9287a9cf9213f278d28259ca821eb265728ac9b57218e2629283d9b0c211c26e727af9ab2209f256127379a50203625ec269299ff1ff92494262a99af1fa7242a26d898631f6824ba258a984f1f29245e255f98f21ecf230f250b985b1e2423ba24ff968d1d7d225724ef953a1df2210b246c95fe1caa21c123dc94e81c6b215823c794c21c4021fa22a194d01c1b21c722af947a1cd420a12280947f1cab207a2260943c1b58207b22d092611b1e20cf21b692321b0b206d215092431b0d206a2124927c1a0b2080214691961b5d1fc9207a90961b5d1fc9207a900000641e732000000000641e732000005d25ab2bae2cdda18426932caa2d3ca4af26d32cec2d66a4fb260b2d2e2ea6a41127182d3c2ec3a42627282d532ed2a42027172d5a2ebfa4ec26ef2c1f2e72a4d626cb2c0f2e2ca4c826a52cdb2df3a386268e2cb72d56a3cb268a2cc12d35a3b1268b2ca42d75a2dc269a2cc32d13a2e226962cc22da8a1a426762c9f2deda08c26602c822d8ba057263c2c532d33a02a26172c202df79ff225d22be72c7e9f8e25672ba42c009f4025fa2a662c9e9eed24a32a312c0d9eb5245b2a062cc89d8424162ab62b8c9d5b24d129682b7e9d24247b29012b389dbc232729972aff9c7323e6284e2a0d9d2623be28202a149def228328dc29249de02226285029199da022a427df28ea9c392215278428b79c8a2176261e28de9bdd20f1257e27989a74207125e226e6991220f22458264399491f9c24e3259798f21e582493252898e61e29244f250498aa1ec923fc248c97811e6523b62429975e1ef72278240297fe1d7c22242468967e1deb219923b2950a1da4214f231095e31c75211123c194a71c3d21ca226194831cf42068223f94601ca72011221e94601c7020cf21f593461c422095218093011c1320642107937b1bd61f34211692061b961fce20b7913d1af41e6120e190161b421e32202f90161b421e32202f900000321d5a1f00000000321d5a1f0000b224f32a352c34a1b8252d2c272d41a3f5256f2c6b2dd7a33326a32cb42d3ba45526ba2ccb2d5fa46326cf2ced2d68a44e26ce2cef2d5aa43826be2ce32d3ea42126992cc12d08a42d267d2ca92defa374268d2cb32dfaa3c526aa2cc52d81a3e226af2cdd2df9a2ac26912cb12d56a27b26732c942d88a14b265c2c742df8a013263a2c542d82a0db25192c302df19fb525fd2b0a2d319f8c25b82bde2ca49e5d25722bb62c3f9e35252a2b8e2c119e0b25e42a652c099ef124a12a3c2cc29dbe24582a0d2cac9d9c24132ac62baa9d6124d229672ba99d37248f29182b949de3234a29b92a589d7823f128512a6c9dda229528d329319d56222c285229cd9cde219627de285a9c9521f1268128249c4d2158262a28de9b2621cf25ba27f89bdf2053250527149c7220d2247426509ac01f7a24eb250199141f33248c253c98b51e06243e259997741e9a23e6241a970a1e3823a42474969f1dc6226124d495461d45221d244d95071dba21a123e494cd1c4521f0228594a21cea2073225c94681caf201c220194471c8520d121c793051c492090214f93631bf31f44217b92191bb91f2e210192d91a8d1f0e21cb91ae1a791f02213991d71a831fd5202191311a4d1fd1207290661bd21e67201491661bd21e672014910000761dfb1e00000000761dfb1e00008724662aa72bcda01d25ec2bd92c68a28025272c122d27a37d25352c322d7ca381253d2c332d82a38425472c472d9ca39425502c562db3a3ae25592c662dbfa3c7255d2c712db2a3cd255c2c782d73a3de25672c8c2d11a302267b2ca42da9a22a268b2cb42d71a27926a92ce22d5aa2be26c42c002ef8a1c726c82c0b2e76a1be26c12cfe2d00a19f26982cce2d7da06b26682c9d2de29f4226362c622d7d9e0626112c292d0d9ed425e32bff2c0b9e8625ae2bd82cbb9d4925712bad2ca69d07252e2b802c899de324ec2a542cb19db124a02a262ce99d8924522aec2b4b9e3a24e829752b469ea9236129da2aee9df022d7282e2a979d4d225a288f29149dc92106282229929c7c217227d3283e9c26217b264028a39b9d209e253627689a4c204f25b026d4993320002553264b99d21f9f24e225ae98411f3f2474251b989d1ed72312254797571e5c23d224c796e41dd2228f241c96881d542220248f952d1dc62189230995dd1c67213a23bb94da1c442111239294d91c1421f0226894b51cd920ae224894611c87206522af93ad1b11209721bc92031bb91f2221ee91f51a9b1f0821a991b01a7a1feb203a917c1a491fcb20dc90301aff1e8720a4905119801e2b204b8f5f1a121e2620868f5f1a121e2620868f00004d1cb51d000000004d1cb51d00004224f429472b3fa07724152b3c2c60a1b924422b6e2ceaa1cc24802ba02c3da2ed248c2bae2c7ca2f924ac2bc32ca0a2de249d2bbd2c7ca2e5248f2bba2c71a208257e2bbc2c8ba23d25652bac2c8fa29e25592ba82cdba240255f2b902ce8a14125d42bdf2c93a1e925642c6b2d15a2f426072d452eb6a215287a2dda2e9ea3e227c52d622f1aa2b627db2da72fdca09427cf2d832fdb9f2727b22d6b2f809e28277e2d092fd29d1927552da12ec69db0260e2d632ede9dbb26c92c132ec39e24268f2cc52d5f9ec925382c5f2dec9e7925e12b062d999fe024122b842c649f43242d2ac92bde9e5f233729d32a0e9e4b227028c1292b9dd021b2270429af9c7d21eb268528569c1f2124261a280b9c6420692523273c9a0220eb245d262d996c1f9924ef2571982b1f6224d1252c98e21e2d248c259397bd1e9b23f9243497391ef6229224a796b11d80223e24e7954d1d0a22d7237f95e61c7b212b23ec948f1c3621e0229594811c1321de223d946a1c0221d02204944e1cc6209c228d933f1c85205a222f932e1c392002221193ec1be41f7e21b2926e1b581f2e2148920f1b4d1f10218591d31a491ffc205691d51a4b1fe6202091241b2c1fc5202091ba1a061f8520d490501c381e8e1fbe92501c381e8e1fbe92ef1bcb1edb1e2d90ef1bcb1edb1e2d90e920d4253826a89af9227229be2ad89f09243a2a9c2bdca02024962afc2b19a16724c82a292c83a17e24fe2a4b2cb3a17924182b692caca16224fa2a652c8fa17b24d52a592c8aa1a024ac2a352c7fa17e244f2a002c20a15a24cc29782bc1a0a3222a29332aef9e8021d628562a929d65231f2a112c239f6027542d342ec4a2252933306731f7a3952a4031183375a3c92a8d312f334ea1502a8f31fc323e9e042a58319d326a9cb029da302d322c9c62299b30df31539d072963307b31389fa328e42ffa30cfa0aa28502e2430d0a3a126dd2c5a2e15a2d124392ba32c93a040233429da2a889ec12251288729c49d1723fd269a28d49d6b2101269a27319c37206f25d4261e9a36200725732693991e20b1241f263199f11f7924e825c0981d1f2c24b0250798cd1ea6232b257c97551e1b23bd24c4961c1eb52279242496071e72224524de95e41d2c221d248b95aa1df621ee232795731dc1219b23f5943a1d77213b23c194131d452103237494e31c1021d2224a94811cd720aa229d934f1c9f2074224a93191c5e202a22ee92001c2020bd210593eb1bf41f6c21b292f61bb21f3921bb92ac1b661f1f21bb928f1b541f31216492201b421f27210692dd19e41e0b21c690c91a911ea0207090c91a911ea02070900000d91c951d00000000d91c951d00006822d128d029e09d3d23c4292d2b12a04e23d429412b39a0ae23062a972b90a018244d2ae52beea037246b2a092c14a12f24682a082c1ba13a24542afc2b17a144242c2ab92b00a10824d029782b89a0d7239d29372b28a03a2321298d2af99e8623bf28b1298b9ea022bb278728059d9c20292597261b9a221c0622a923ae94ac16b71f6221b48e6e138b1e9020fe8ad2147e1e5620628cc114751f7121538cfe1502203022728d57183921dc239d8fc51c17249625c393bf1f8b264528909532225d287029b5973524ad293c2b3c99ed23372a272bf1995b1c8827d9281994c81882242e261d91041a0323ea2533935d2154259d266b9a2c206d24d425dc982e2054248825de982a204c249725da98092023245a25929830201b245d25bf980820ce232c257098bc1f6023e7244298771ff3228d24fb973c1fa52260248097651e682234246d96001e32221224d7959f1dee21ae234b954d1da2214723fd94fb1c3f21cc228794b91cdd205a224b94751c9520f8210d94641c6720b921fc93381c3a2076216793231c112040214393cd1bb91f1221d992631b691fee207b92231b231fd8200992f61add1eac20aa91e91aa91e99206791091ba01e59204691c91a331e1c20bd91dd1a301e3520ed90dd1a301e3520ed9000004619731a000000004619731a00009e2170287929fa9ce7225829a72a1a9f0f237c29cd2a9a9fe1228429fc2a849f6223cf29472b18a0a723022a832b3ea094230b2a902b33a07b23e729582b16a04d238329df2aa19fe1220e29502ac09e6222ab28d929da9de5212d283529089de7211d274a28c19c6920c9251727af9a011e0524f6245c98221baf21652367954a1b0621cb223896a71c5b21b2233298281d4f228b24bb98581e0c23c524d199f21c12236f256198931dc4228f24c2980c1dec21dc232698201ce6203c226296c419e71f462118945218c31e612095919b184c1fb3205d91ee1a96209c21a193d21d5a2290239896391f8723f4241798971f9f2360254d98951fc42364254b987e1f96233b253e98a41f7e2317255498801f6323ee242198151f1d23c2249297b51efd229f24f596561ebb2270245f960b1e85224724e195d11d43221f24a995ad1d0622ea235795891dd921a82308956a1db3217723c0944f1d81213523a894241d572102238394e51c2721ce224b94861ce0209222a693391c8b204a2224931c1c4520f721f392f61b0c20ac21bb92021cbe1f6f210893af1b751f1f214092341b4f1fdc20a291a61af91e9c20fc90511a961e58208990841a591e1020ae90ec19061e0c20bf8f4d1bde1d581f8b904d1bde1d581f8b900000d21ad41b00000000d21ad41b00006f213f2836298d9cec21c528d429b79d4322e628122a3e9e7f222a29722a959e04236329b22a389ff9226029b92a2c9fec225329a92a049fcc222e29762aab9eaf22ff282c2a229e41229628ab29709d762107281229939ce6200c277228e49b7120e8256c27df9aa51ff2243726ea99391e58248e25ea98531dcf231f256098b21d8323e2242299861e0a244d25169a7b1f5a248b25dd9a1e20ab24fc254b9b5f20fc246f26769bb82005258026e89b1520da249526b69a40209a241e261f9b392023246625129b0d2043239c24a89ade1f96211723979af11ca020212204977c1b2c206e21b794a81bc020c7215694d81ca32120232d95d71d93223b243e96731e08237424b096c81efd2298243f97311fe222aa24af974e1fcd22a824cf97121f802295248f97681e32224324a5962e1e0022fc2336960b1ee221bb231396d71dc2217523ae95a31d81211d237d95741d4321e222f5943b1d0f21a3229794df1cd0206c224694961c96204622c193571c6220262257931f1c38200022b492ea1b0c20e6217192ba1bda1fac2149928f1b6a1f632126926a1b451f19210992f51afb1ed7207091b41ac81ea3203d91751a9f1e89200c913b1a681e5120de90c619181e0f20eb8feb198d1d1d1ffd8eeb198d1d1d1ffd8e00000000000000000000d21ad41b00006f213f2836298d9cec21c528d429b79d4322e628122a3e9e7f222a29722a959e04236329b22a389ff9226029b92a2c9fec225329a92a049fcc222e29762aab9eaf22ff282c2a229e41229628ab29709d762107281229939ce6200c277228e49b7120e8256c27df9aa51ff2243726ea99391e58248e25ea98531dcf231f256098b21d8323e2242299861e0a244d25169a7b1f5a248b25dd9a1e20ab24fc254b9b5f20fc246f26769bb82005258026e89b1520da249526b69a40209a241e261f9b392023246625129b0d2043239c24a89ade1f96211723979af11ca020212204977c1b2c206e21b794a81bc020c7215694d81ca32120232d95d71d93223b243e96731e08237424b096c81efd2298243f97311fe222aa24af974e1fcd22a824cf97121f802295248f97681e32224324a5962e1e0022fc2336960b1ee221bb231396d71dc2217523ae95a31d81211d237d95741d4321e222f5943b1d0f21a3229794df1cd0206c224694961c96204622c193571c6220262257931f1c38200022b492ea1b0c20e6217192ba1bda1fac2149928f1b6a1f632126926a1b451f19210992f51afb1ed7207091b41ac81ea3203d91751a9f1e89200c913b1a681e5120de90c619181e0f20eb8feb198d1d1d1ffd8e00000000000000000000000000000000231d3326e326c997d1260d2b0c2ce2a305284d2cf42c7ba52428632c2b2de9a55528882c562d64a672289c2c7d2da1a68128b02c962dcaa69428e22cd82df9a68e283b2d3d2eb9a6ac283b2eb32f26a68529672f9e30dca55e29442ea42f5aa5f729462d6b2edaa5c12ae62d792e85a66b2c782ef62e1fa8512de12e432fe1a8e12d8e2fa42feca83e2ef42ff42f87a8412e5030733016a7a0304034d834f2a8023187353b3631a9c02e65304330cba8b12e8b2f482f08aa182f882f2b2f82aaec2e6f2ff82e3daac42e612ff02e50aa1d2ecf2e692e9ba92b2ce62ccb2ca5a778275029df2941a24823392763280e9dbc2019262b278399492045269a277198a21f5f274828309735212e28532911999822b428a029d69a9e1f902648287098f71d5f24e42554976c1d8b23cc247d96b71df6226424d6965e1d80221d2440963a1d4222dc231696191d0822a723f095f71cd3216d23c895c81c8b213e236b95961c3a21dd220d953a1cdb207a228594ad1b7d20ff21b793eb1a2f209721bb92c61af11f45212892781aa41f0e217891411a741fe4201791db19371fd5209490c519061fa42025907419ac1e7b20d58f63196e1e2920bc8f6119591ef51f098f2519331e7b1f0f8f4b18ae1d121f298e0c1ac61d711fc18e0000000000000000231d3326e326c997231d3326e326c997d1260d2b0c2ce2a305284d2cf42c7ba52428632c2b2de9a55528882c562d64a672289c2c7d2da1a68128b02c962dcaa69428e22cd82df9a68e283b2d3d2eb9a6ac283b2eb32f26a68529672f9e30dca55e29442ea42f5aa5f729462d6b2edaa5c12ae62d792e85a66b2c782ef62e1fa8512de12e432fe1a8e12d8e2fa42feca83e2ef42ff42f87a8412e5030733016a7a0304034d834f2a8023187353b3631a9c02e65304330cba8b12e8b2f482f08aa182f882f2b2f82aaec2e6f2ff82e3daac42e612ff02e50aa1d2ecf2e692e9ba92b2ce62ccb2ca5a778275029df2941a24823392763280e9dbc2019262b278399492045269a277198a21f5f274828309735212e28532911999822b428a029d69a9e1f902648287098f71d5f24e42554976c1d8b23cc247d96b71df6226424d6965e1d80221d2440963a1d4222dc231696191d0822a723f095f71cd3216d23c895c81c8b213e236b95961c3a21dd220d953a1cdb207a228594ad1b7d20ff21b793eb1a2f209721bb92c61af11f45212892781aa41f0e217891411a741fe4201791db19371fd5209490c519061fa42025907419ac1e7b20d58f63196e1e2920bc8f6119591ef51f098f2519331e7b1f0f8f4b18ae1d121f298e0c1ac61d711fc18e0c1ac61d711fc18eb2191e2597255c91b2191e2597255c91d326522b702c62a47028be2c842db1a6d1281c2d112e56a71d29702d802ef4a75f29b02dc62e2ea87729ec2d192f4ba8ae293d2e7f2f82a8d529ca2e103071a8562a7c2f793093a83e2ad12fc7300fa81f2a412f603091a7fb295a2e902f1ba73d2a2d2e512f85a6a72bfe2e0d30c7a6c22c602f123026a6ed2d4b30a73017a7bf2ec630213109a8a02f7a31d93171a84630a6324833d8a846309d323433d8a815307431a53124a9682faf30c73071aa262f563046305babc32ea72f732fdaaa1c2ef22eba2e62aaf92cfd2df92d32a96a2a352c562c7fa682268d29302a8ea188235b276728589d1e22d8264228e89bc52172278928889a80218b27b9285b9933216a27aa28e598272108278928ac99af2061264128c0990d202d25ab263c994c1efc231825f097cd1d6223ae24f096d91d2b238824ff96a11dde2259248e963c1d98222b241996fe1c4e22ef23a895b21cf42190232b95681c99212f23b694231c4821cd224a94f31bec206522fd939b1ba320fb216793441b6f20b621d692e01a2e20682179928f1af81f2021c291571aa31fe2205c91181a561fb320f590dc191e1f97206590cf19e51e64202b909019be1e3f20a28f3d19631ebe1fda8e9b18c71d191f518ed719321e23207f91d719321e23207f91e21b9c2558269794e21b9c2558269794d1273a2c1e2de5a4dc28522d402e7ba715297b2d822efca76a29d92d032f57a8b729222e512fa0a8f729742eb92fe1a8372ac62e103008a93c2a012f3330e6a8452a2b2f4f30ada8542a5f2f74306ba8482a902f9c3015a8e629f62e6e30d3a6142aad2e01309ba49c2af42e1f30b3a3902b1f2f5c3067a48f2ccd2f6d3075a5772d5c30ce308aa67d2ed1303f31f9a76f2f5b31d03190a8932f5631a531c6a87e2ff8302431f6a8792fa930b730aaa9d22e19301e305daa152e412f182f5baa122d1c2e1f2e4ca9ab2b0c2d3c2de3a78228072bab2b5aa45e251f29ee297fa0d42369286229ae9dee221e280c29969c5822fc27e528199cf3219427b128809b4321f1264e28a19ab1204126de27369a7720dd256f27339a11205725c426a5994d1fce24fe25d598d01e4a2453254b98401ebb23da247a97c91d14237a24bc96431d85222524f695f91c3622ec23a2959f1cec2194233c95671c96212523d994401c5121cc228b94241c0f2178224b94d01bc4200f229a93541b7120a5212293ff1a372069215c92dc1a1a2035210492b01afe1f1b21a891be1afa1f11217d91bf1af81f20217d91ae1ad41f122139917a1a991f0721db90fc191e1fd7207d909c19ba1e5e203590001afb1d831f518e001afb1d831f518ebc1aac2553263090bc1aac25532630902f28952c972d81a5fe28ad2d9f2ed8a74a29e42d012f28a8bf29572e9e2fa7a82d2ab12eff2f00a96e2a052f353042a9a72a4f2f5a3063a9ba2a872f813056a9d22abe2f983016a9cc2acb2fac30daa8b02aaa2f9c3022a8ed29202f293088a5a7298b2ea42fbba45129eb2dec2e4da55a29c22dd52e40a5b029ce2dd92e66a58b2a1f2e112f1ba6182cd82eb42fa4a7d32c702f1d30a8a82c2d9e2f1630e9a8652d8b2ff62f35a9672d4c2f922f21a92e2dbf2ef72ed5a8a22ce42d1a2e65a84a2b0c2d3c2d44a715290a2c6b2ce7a4bd26ec29e22af8a1a9240229e929829f03247e287029149e5d2360284829769de222352818291b9d8722f927e928bc9cf3216327a828399c0721a0264128fb9a6220f2258e27159a2e208925f326cd992620332581267e990720b324df251499061f322459255198171eb723eb247b97dc1d3723a4243397a21dd4226024be96381d6c221b243f96c91cf121a5239295691c85212623ff94441c4021db22d594151c022190225d94e71bbd203922f193241b6620e021f392d01a2f2090216a92c51a182062212892b11a1c205521a991b21a11203c217291801aed1f152115912d1ab11fe6206f90d4197e1fa5205f908619191f82202490fb1a2c1f0d215890fb1a2c1f0d215890b213cd245c258b88b213cd245c258b884d28d82c1d2edea52c29082e182f26a89a29542e7e2f67a80f2abe2e0830dba8782a1e2f3e303ca9c92a6b2f72307fa9e72aa02f8c3089a9ee2ac42fa63080a9312b0530c5306ca9312b0730d53022a90a2be02fb43004a8d329d02ee62fe1a44129e52dd92effa5f0289c2da62eb6a5c0285a2d512e31a5a1283a2d1e2eeaa4d128552d5a2ee1a44b29662d552e47a5ca294b2dff2ddea52d2a402ddf2d5ba6ae2a4e2ded2ddfa6d72a312daf2deea6d92a062d9d2db8a6eb298a2c162d3da5a928f02b8a2c0da41a27f62a1b2c0fa27725ea29da2baaa0ae240a29f22ad79f0a24ab28c329829e9c235c285429029e10233b283229779d6622f127e428d99ca3213f2775282f9cfa2086260c283a9b4c20f82577271a9a22208425e226bc99e61fdb2423263b99ab1f8524b925f498fa1e5c247c2565985b1e14242625cf97161e9123d3247a97901ddc228824d596321d612241243796ca1cda21e9239495701c8b21562307954c1c4721ea22bb94281c2b21bb224f940e1c00217d221394781bc5202f220893011b7f20d6215f92e21a5e209c210a92db1a3d205e2194918d1a0d2031211f91521aa11fdc20be90241a481fa6203790d019f81e5420fa8f9419761e1b2001906f1ba71f8121c2926f1ba71f8121c2926a1aa3254d26928f6a1aa3254d26928f4f28db2c032ecfa55e291e2e2b2f38a8cc297e2ead2f82a8322aeb2e2a30eba8762a292f4a3014a99a2a552f6f303da9ac2a812f81304ca9d02aa62f98305ba9112bef2fbd3045a93d2be42fb130efa8a42ab02f8f3090a53c2a442f523052a55f29372e7e2f4da6f628c92ddc2ed1a58928492d4a2e1aa51128c12c8b2d71a4e527722c2f2d20a4c127612c272dbba3e5274f2c1b2d9ea3d7273c2c082d71a33328232cc32cb4a3d627272cfc2cd0a20628ed2ba42c7ca24427722b812c0aa134269c2a122c02a08325c729db2a17a0fd2436295c2ae19f8724fd28142a279f20249f28ab29849ee1235f285b29599e80233f283529ec9d08230528f6288e9d43229627ab28d99c5921c0263c280d9c7920e0259c27c89a40208c254b274e9a48202e25a426379a0d20cb241526a099831f9224fc25fa98c61e3624ab254598661ecf234f25a797ed1d5623dd241797901dc82254244d962f1d2d22b823df95cb1cc72151234695891c85210d23fe94691c5c21d8229394391c2c2199226194021ce0204322cd93c31b9e20e9214e938f1b6320a2211e93541b362062216e92081bfa1f2821f2918f1a901fdc202091e919411fa7200e90e6192d1f57200c907b19bf1e3e202b8f251b0c1f9820ad90251b0c1f9820ad90be1c6326f2264c91be1c6326f2264c916028f32c002e0aa68029702ea92f47a8ea29c82e0a3081a8412a212f4830dda8792a562f623008a9962a7b2f84301fa9b02aa52f973033a9d92ad42fb33045a92a2b1330e33049a9992b2b30f03000a9282b2530db3032a5782a782f633051a576294d2e4f2f51a69b28952d8f2e79a52d28022de62db2a4fc27b52c8c2d3ca4b427862c722deda3a2276a2c542d7ea3a4262f2c5b2d4ea2f826ee2bab2c48a2c526812b762cc7a17b261f2b4f2c1ea13f26e52a1d2cbba00026a62a152c5f9fb625812a052cec9da7252b2a842b32a02325e729262b23a0cd246429892a959f4924f628262aa19ecb23a728d329e89d092359286c29559d4622cb27d428a79c9621be263328259c1c212626a6276a9b9420e9254f27809a8020a02516273f9a9e2026257526699a6f20bb24eb25279add1f87249e2555990d1f42245e258e98a61e1f24332530983f1e9123f024ac97141eba2273244697f31d4b221024ee96a61d1122b42365962a1dd12168238595a81c91212023d494661c4f21df226c944d1c2221b92252941f1cec207a220394da1bb62042226493a51b8320fd21f4921b1b342099213c92c41abc1ffb2081916a1a511f9e20d0905d1a381f5720fa90cf19be1e3b20a891e91a061fec204992e91a061fec2049920000951fe82100000000951fe821000063281c2d452efca595299e2ee42f4ca8c929c12e013068a8062a082f4130a3a8412a382f5630d1a84b2a4f2f7030e5a86c2a832f8530fea8972aac2fa23012a9c92ae12fc730f4a85d2b2030f3308da87e2b5b301b3133a5b82ad02f9d3069a58a29552e672f95a6c628882d8f2ec0a53f281c2d122ec7a4eb27b92c952d44a46927712c562da0a3d8261c2ced2cd3a2c926ac2b812c8da26026802b872c0da2ef256e2b872c5aa1ea250e2b492c0da11026de2a242ccaa03f26e62a2e2cac9faa25b42a1a2cb29d0b25002a5b2b299fec2467298d2a0ba08f242c29412a7e9f4a24fb28142aea9e2124a728bf29c99eea2346284a29a19e7b23d427da28259e2c2212276928c79c2f2193261c28b09be0204b26dc27ec9a8d20da255b272c9a42205425c226a3991c20fa2446264f99b61fae24e025fc98181f5f2483257898b61e242444251f98671eb423f724a997371e2823a6247097f61dd0227024f196a51d7c223b246496631d1922c5231a96051daa2129235d95901c39219a22e194501cd420232279942c1c7e20ab2153943a1c3f205e214094131c0b201b21ed93471bbd1fe320da92661a4e1f9e209d91ce192f1f8020b990d019371f76208b90d41a0620ef201f916f1ac01e47209e906f1ac01e47209e900000081fde2000000000081fde2000003d28e62cfb2da5a54229582e992fd8a77b29942ed22f22a8be29f02e34306ca8232a4e2f5f30ada8432a722f8230c6a84e2a922f8d30daa8792aae2fa330eea8922ac82fb930bfa84e2b0e30da30b1a8182b2d30e430d0a43e2a702f5d30d4a40829fe2df72ed1a54c280c2de22d1ba5e527a62c8c2da1a4b7276b2c452d67a41d28412c0b2db1a41c27102cf92c8ba3ac26c72bbb2ca7a27d26862b902c43a215263a2b692c94a15a26db2a2b2c86a10b26b02a082cf7a01327612aa62b97a1e325522ad82b9b9f0125b529f92a449fa9246e299f2a5c9f59240529292a019fed23b128bf29639e50235d286529e59da92216281229429d3922a027b728d19ce02129277528749c7f21b6264028fb9beb202a26d627239b7c20a8250f27399a3b2049258e26bd991020052554266199fa1fe22429262899b61faa24f225dc982a1f6824ae2567989e1e172455251098341e7e23c5246c97b31dd7225024d2963e1d72221d241b96051d3222f923d895d11cf021b4237595881c8d214223fd942f1c1621a2227994cb1baf20f8210b945b1b5f209221a193061b1d2056210f93d61af31f3721de92c41abf1f1e215f92941a941f3221c691231a4f1fcd20fe90f019bf1e4820a4903e1b7220ec2133913e1b7220ec21339100007c1e9320000000007c1e932000000628bd2cce2d1aa5f5281b2e4f2f50a73d296d2eac2fd0a78829d52e263037a8d529172f473065a8d9292a2f5f3068a8ed29582f723083a8152a732f8c3096a82c2a972fa63068a88d2aae2f9b301aa87f2ae42fa53068a4e329282f37308ea4cb28e02df62e9ea55128402d502e21a532281b2d0d2ea7a42428cc2cae2da8a4fd263d2c1f2d4da39326062ceb2cc4a25726c72bed2c38a24926782b932c2ba2e125172b602c65a1ad25d82a2c2cefa0c225bc2a112ca4a0ac25ea2a4e2cb09f6e25bc2a252c269e3a25162a5b2beb9f7d246229b62a609f3624e4281f2a0e9f9e239628b929239eeb2233283a295b9d6022d427d528ba9c06228127a4285f9cca2131277e28349c9121e92657280b9c1f21a02638286f9bee202f26d527009b8f207925d126539a7f20102553263e9a4320df241f26c799ac1f9524c52515991d1f472468257c98921ee223112509980b1e4d23a0246d978b1d9e2233247496161d4a220724c395ef1c2422d8239795ec1c0022a7236b95c21cd32169233c95921c85210c23e3945f1c3221ac2289940d1cd22047221294691b8720f3213693d31a3e20a7216c92cb1a1d206721f691b71a0a2042217791721ae21f1e210991111a5f1ff3208c90341b711fb8202b91341b711fb8202b910000631f0e2100000000631f0e210000b227ab2cac2df0a4e3283b2e722f22a7e9282c2e622f3ea708296a2edc2f95a75629b52e0f3005a86a29d82e2f3015a88d29102f48302fa8e0294a2f6c3062a83d2a952f973074a87b2a702f7a306ca8f029392f5a3080a43929712ea92f95a36e28762d812efca42f280a2d112ed6a41028df2cc92d81a4aa27b22cb42d21a45b27642c492dcea38e26172c012d6ea237268e2b932ccda1c1251e2b542c18a1f325f02a2d2c14a1ad25df2a3c2c93a0a125ad2a132c5ba0ad25a12a192cb39f20255f2af32b4b9ef024bd29132ba49f8f247c29ca2aa39f57241a295f2a229f2724e728212ad39eb6239e28ba29759e262333283529a59d6e22c627cf28e09cfa217327ac286f9c9521e4265c280d9cd8201726b627e19abf20c6253727969a83206425c526439a6d2011256626019a4a20d4242426ae99f01f8324cc2521992d1f2f2476258598bb1ee92324253e983c1e6b23f1247697021ee1226d2430976a1d1222cc234e96f91c9d217a23a295cb1c76214b234695961c42211f230d957b1c1f21e522ee94531cfe2097229f94181cc02024226094b91b7b20ba21c393321b1a204921c592f11ac11ffc205092c51a891fcd20ba913b1a3b1f9b2077913b1a4c1f982044917a1a8e1e3a20a58f7a1a8e1e3a20a58f0000e41ecd2000000000e41ecd200000ee26882c812d1ea49d28012e382fa9a6ad28032e3a2fd3a6cb283c2ea32f27a7f628632ebf2f66a700297c2ef22f76a71829a72e0e30aea74929d32e2930e2a790291b2f5030f1a7b5290e2f413083a77129df2e20302aa58e29c22e0330d4a4c828cb2dd92e75a527281a2d272ebca40328de2cca2d72a40128802c4e2d92a4c726182cdf2cf9a23e26b12bb12c06a21426742b822c93a1d825382b6a2c15a16025012b672c6ba09e25b62a1a2c58a043255a2af92bcf9fe324fb29ea2ba09e8024ec29b52bf69dce24b429322b6f9fad248c29ea2a899f362409295b2aa79ea6239a28d429299ef92249286529659d8522202828290c9d30220428ef28b09cbe2164278c28429c4721ae263828d59bfa20472603283a9bcf200a26b027d49aab20ce256b27a09a702080250527289a35201c257f26d79904209724dd255299901f29245a25e398591fa123f524bf98de1e4623b7243898761e11238924bb97dc1d8f222a24d396691d1522bc232096fd1cc22155237e95951c6b21f722e694331c19219a225b94f11bb7202a22fb936d1b5420ac217793341b26206d210293461b19206421d9922a1b05205921bf92051bd31f64212892a91a7e1f2821a291f31adb1e4d20fc92011c7f1e63208a93011c7f1e63208a9300009f1e8320000000009f1e8320000079262d2c0b2d96a33628932dbd2ef2a54428af2dd72e28a67128f72d4e2f8ea6a228232e7a2fd6a6bb28482ebe2ffba6d1286a2ee02f1ba7d8287c2e003012a7f9289d2e0f3019a700299f2e0d30d2a62f297c2eee2f29a610290c2e232fa5a435285d2d4f2e65a4d827f22cf62d39a48227b92ca32dd8a3f026612c392deba2d326302c062d7aa20626042c0b2d55a10f267f2b8b2c14a17e25f82a452c83a05c257e2ace2b3ca04225382a832b27a0c724ff298e2b8b9fae24e329862b3e9f9624ad29372b199f76245129b82a0b9f32241029532a7e9ecf23c928f7292b9e2a238228a5298b9dd4224e286329499d86221a282129279d7322e627f928189d20228227c228d69cd52111278628839c712195263b28369c4c2127260228db9b0221cf2570276e9b8d205c25e7269c9a4e20ff245f261d9af81fa024e82567997c1f45247325f598ef1ed52310255f982b1e4b23ba249397b81dc8227724d8965e1d66224c241496f81c0f221e24a195b31cb921b7232c95711c38210d23e494f81bd02081224294bf1b7e20ef212494a51b6020b1211694941b5e2091219d936b1b50207f2138930a1b1e2043216792e81aa91ffe20d7918d1a291fdb208a91421aee1eb2204b91da1a0e1fa820b390da1a0e1fa820b39000008920e321000000008920e3210000fc25092ceb2cbba2f3274f2d652e8ca501286a2d8c2eb7a51628a02deb2ee6a52f28b42df52e1ba63428c32d1d2f23a65428e02d372f51a65a28eb2d522f48a69028082e6e2f84a68e28042e7a2f49a69428182e732fe1a5b428e92d232ffda46228a82de42e5ca25a286b2d802e0aa216282a2d282e8aa1b227e72cf52ddaa02d27b22cd12d10a0d026692c742d809f5726212c1b2d939e32269f2ba62c9f9e5725ea2a512cb59dfa243e2ac12b7a9d8a24cc29522b4a9d92248b29112b7d9e8a246d29e22a069f78244e29f22aeb9e12242329962a8f9ed223e5284d2a4d9e9923b928fd291f9e66237d28b229f69d4b233c285a29fd9d1623cc27ee28d29d642220278b28269df721aa264328b69c722150261828219cd320ef25ae27019b66207d2500271b9a1f2022258a267599d31fea2428260e99871fb224e525bf98ff1e682494254c98881e042429259b97c71d3623c6248b96411d89226024c895d91ccf21d9232f95911c6d215023bc94841c662144238a949b1c4e210123c794951c0f219f22c094901cd6203922bb94761c8a20de21c494201c4620902147946c1b192059217693e71add1f24217f927d1ac01f152147919f1acb1f04219991711aca1fe9203d91fd1a07203021af91fd1a07203021af91000002228b230000000002228b2300009225d42bc42cb6a27a271c2d562e38a57e271e2d4b2e4aa5a3274e2d852e74a5c727632d972e8ea5f727812dc52eafa51128972dda2ecea51c28a12df22edea54f28b02dfa2e15a64a28932dec2ed9a540288e2dec2eaaa53d286d2dc72e2ca53d28412d892e6ea47a28332d202eeda27c28682d942eefa06028482da32e65a081280d2d722eaca0a327a22cc72df19ed827392c1f2d229fc326d52bd12c809dca254a2bac2cb69c5425d22a402c309dfd245e2adf2b499eaa24022a942b389f9524af29282b3c9f60246629d32a0d9f222429297b2a879ed123f228372a2c9e5f23ad28e429d29df7226f289329809d88221e283b29289d5e229927e428079de421232797288f9c51217b263a28079c09212b2601284f9bd120e3259d27af9a76208d2512270c9a3320282587269099e31fe224272618996e1fa924e125af98051f6a2497254f987c1e0f243625c397011e5423bf24fe96b51da9225524a696b21d49221624a296ad1df221bf239c96831d90216b233e960d1d3521292390959d1cf520fc22ee942c1cab20ad2232948f1b6a2035225b93581b3c20ae21ea92141b12205f217092cb1acc1fff202d928a1a8c1fd420bd917d1a841fa4207d91f219521f9e207590831ad71ea820e290831ad71ea820e2900000ac20d42100000000ac20d42100000225f72a1b2c08a2d126c02ce02da6a4dc26cf2ce62d9fa4fa26f02c0a2ed1a41427f72c162ee2a440270a2d3c2e0fa55227082d382e1ba53c27f72c252e0da57a27f12c142e29a56427e02c132efca45327d52cfb2db3a44327cb2cf22d5fa42327ca2cec2d03a470279d2cb82d89a3d1275c2c2a2dcca212275e2c552d1b9f25276b2c792d459ee326582c6b2d9a9d81263b2c502d809df725f32b142d2f9e9c25522bad2c129fed24ca2a902c279fd324662a202c779fa324db296f2b2c9f38247e29e52a879e09244229902a3f9eaf231029512a129e7123d9281f2aff9d2123a428da29be9d1e2366289129bc9dbd221a283e29899d1a225a27ae28eb9c6e21b0263528339c2b216d260d28d59be8202926d427479bbb20af253f27de9a85203825c4266b9a3c20e5247526e099eb1fac2432265e99791f6a24dc25f398121f2e247b257598b21ee323212538984d1e5a23cf248a97d31db1226324c9962a1d0722fe23d995c91c892187234495991c56213f23ea94851c2721ee22b094751c1021ab229f94831cec207d22ae94611cb32051228b94851c79201122b0941b1c3020e1212194a91b0e2093217593c01ac31f49212492f11ad71f73211792771afa1f8321ac91731be91e5320a390731be91e5320a3900000171d9e1e00000000171d9e1e00001d25d42a1c2cffa1be25252c0d2d77a31826622c582d0fa42926842c852d34a47326992ca12d73a4a126b22cc02da0a4c426bb2cd52daca4d826bc2cd32db9a4ae269e2cbe2d73a496267c2c9e2d3ba4af26702c842d2fa49e264d2c532d0aa48826432c4a2d73a37926452c4f2df8a26126312c362d5ca22226142c152da0a10f26fb2b002d44a1c025c62be82cd1a0a725792bb32c8ea04725102b6d2c2ba0ff24a92a1f2cbb9fc6245c2ae62b629f7c24122a982bf09e4024e429762b949e2524ae292d2b6a9e05247229de2a389ea52313297a2a0a9e6f23e728372ac09d3923b2280a2ab49d1f239b28fb29bd9dd8226328b729a09def22c127e128b39d2122cc264d28f09c6e21592608284a9cdf20ce256a273a9b882080251c27949a42203025c0260c9af61fbf242e266699411f7d24b425cd98ec1e3c2462259598b61ef123052556986a1e6b23bb240b982b1e142380246197e31da6224a240b976c1d1f22e12350960d1d8b212b23b895ce1c5521f4224a959a1c2521c222eb943e1cec206c2266942b1c9c2000223094251c6e20cb212a94541c512099215a94571c352074213994101c0e204721a693a31bdd1f1c21f192011b971fdc205f92431a531f8c20e590d11ad71d2b1f3e90d11ad71d2b1f3e900000711d411f00000000711d411f00009e24382a742b69a13e259a2b9f2cbba28925fb2bdf2c49a38625162c0a2d89a3a325282c252dc7a3bc253b2c462d00a4d425462c562d11a4f7254b2c642d1ea40f26442c5f2d15a42626432c5f2d0ca447263c2c572d08a44026352c422dbba34a261e2c3f2d60a36c261a2c362d53a37a260e2c312d13a35226022c1f2d9aa22d26f42b112d41a20326d72bf52c9ca1be25a72bcf2c16a153255c2b9a2c75a00025062b672c07a0c624b82a362cb09f8b24692a0c2c529f6a241e2abf2b1c9f4824d029672b099f43247f290c2b239f12242429992ad29ec923c428352a859e22237628ce29f99dae2233287d29989df521e5272129fd9ca2216d27ce288a9c4121ec267a28269cf22054262028a79bab20ce259227399b8c206a250727e49a6920ff247d26af9a1d209724f125b599791f3c248725f398e11e00243d2572985b1eaa23f624cf970f1e3a23a9240e97c01dd72279248396771d6f223f243096331df321f223ba950b1d772171236495f21cff20b6224995ac1caf203322b294561c8a20fc215b943c1c7620c5211f94ce1b4120862199935c1bd01f3421ed92d11a721f10213392bc1a411fe920e9918b1a2b1fe3208891bb1a2d1fbd207a911d1a051fb720c8904c1ba21e67208a904c1ba21e67208a900000e41c641e00000000e41c641e00003024f1292d2bb6a0e224352b672c31a22d25892ba22cbba22025ac2bbd2ce8a22425b02bbe2c02a32b25af2bbe2c22a31625922bad2c05a3ff24752b9f2ce5a20b25722b9d2ccca20e25682b9b2c93a22b257b2baa2c79a246259a2bbd2c70a26c25bb2bd12c5ba28625d32bed2c36a29525fc2b092d03a29f250a2c1e2dc8a19925152c2b2d7ea19c25032c252d53a18c25eb2b092d00a15e25a92be22caaa02125582bb42c4ba0e924092b7e2ce99fad24c02a442c899f92247d2a182c5d9f67243c2ae12b189f4e24052a952b129f1624b7293c2bd99ec3236429d62aa09e1b23f4284b2a2e9e90228728bc29b59d2a2226283929439dca21af27db28d99c64212a278f286e9c02219c263628e99b8320bc255c27fc9a312018259426389a3d20ef245226279a0c209f24eb257d992a1f47247b2583989d1ef62325251098361e7423e0246f97ea1d0623aa241397ba1d9a226d24ab968d1d0422e7234996301d8b214723b695e51c512112233b95c61c2b21eb22cc94861c05219f2267944f1cab201e223294c11b4420a8214c93371bd21f1821ca92021b7b1fd8206092f71a691fbf205692a01a2e1fa720d091691a111f8d203891061aba1e66201891f618551e1f20c18f371a161ef01fbc8f371a161ef01fbc8f0000551c1e1d00000000551c1e1d000078234e29992a15a04724892aeb2b39a14424662ae22b69a15024902a132cada18624b62a282c06a28624c62a332c06a28b24c42a332c1fa29c24b82a292c11a294249b2a212ce1a16124722a092c7ba138244a2afa2b26a164242a2aa92b26a1c324182a882b82a13b25352abf2b0da28425d42a562c4aa2b625bd2bdc2c54a2af25232c362d1fa2f725552c742d23a204266d2cac2de7a10626742ca02da0a1d525582c892d42a14a252e2c742d99a03e25022c1d2d8fa042258d2be62ca8a00c251b2b962ca1a0ed24822a402ceaa04a24cf29c22b12a0a8232429b02a069f80228828be29c29dd821de271229159dae214527a328d99c7321c6266d28909c172111261328449c8d204d250a27559bb01fc2242926d499591f7b24d12519993a1f5a24b625e6982b1f3a24af25a198f31ed7233b254598841ef8228024cc971a1e8e223c241b97b51d4e22142476964e1df0219023d795e51c5a21e1223b95951c2b21ba22e694941c2421ce22bf94841c0521bc228a94531cc62090225894341c89205c221794231c56202922c993dd1b1620d7212793491ba41f7e2164920b1b4d1f2621f491bd1a311ff820b391c51a391fd2208291cd1a0e1fad208991681ad71e5d20cd90591bf31d861f8291591bf31d861f82910000bb1fdd1f00000000bb1fdd1f00007e206b274728689ca0222d29862ae09f8723c229352b98a0e223fc295d2befa0eb23032a752b06a11b242b2a9e2b35a13a24582adc2b6ea15224662af32b8ca139242b2ac52b4aa13624082a8f2b12a13724ce295f2bf2a0432481291e2bcba08d247d29fb2a0ca14e243d29ac2aa3a0a4230229872afc9f3f221729fd29a09e09220f29a92a679e0824d529ce2b57a0ba24d22a5e2c04a1b125d42be22c0aa26126252c852ddea2b7253d2c872df9a15f25932be12cb3a1da24b92a2b2c11a17624cc29a12bcda06c23ec28722a849fa7212c28e0295d9dc8218727cf28379d79210427fc28c29c7a21df266a28ad9c2921db257a27289c51203725dc268b9aea1fcf241526be999a1f6524982546990a1f1e244d25c698d01ee6233c256798911ea0231f2523985c1e2523ca24d097031eb8227b243297de1d70224424d596ff1d59221a24cb96e11d2c22f92349966b1ddf21ab239e952b1d9a2155233295ee1c60210c23cc94b91c2921df2298948c1cf620bb224894361cbd209022ed93141c89204d226a93fa1b4f200b224193e21b1620ac212b93d81be71f5f212293e51ba91f40212d93861b711f3f21d792741b4d1f48218b92f41a381f2521e191e819d21ee420fe90921a7f1e5f208290921a7f1e5f2082900000891c9e1d00000000891c9e1d00009a229e2881295f9e24239129072b12a01d23a329172b3aa01a23a929272b47a05723c129392b7aa08723ce294d2b98a0ab23d7295b2baea09423b2293e2b90a077238c29082b70a058235829d12a3fa0fe220929782ac09ffc22dc28392a4c9f15239f28d829109f91226c287b293c9efc2219281e294b9efb2282277f28d89d042269269b27a79c0b2170257026009b141f56241c25b098221e0424d224bb979c1f49242625ad98ea1fdf242726fd98f620ea250a27699ae720472630287e9a2e22e6263a28639c1121c325b727329bb52067250527fc9ac11dde23d025a3980721a9246b269e9b22205824ef25009a6e20bb24ee25269a3120a624e325af99fb1f67249c25699909203d248f2557998f1f11245d25c398b41fdf232e25bb98661f5523cf248b98331f002391244e98e21eb4224a240298a51e6f2231248797fb1d322209249596811df521bd23e295321daf2151236395ff1c6721f1220695ac1c0a218722b294631cb22020226994281c7120c7210c94111c4f208f21ea93d91b2d205f21a393c21b0f2034218c937c1bba1f0e210b93481b781ff120db92171b2a1fd9207392f41ae31ea0205292bb1aa41e9220b191d71a891e3f209191fc1aef1d09207793ba1a121ee81fd490ba1a121ee81fd4900000b81aa51b00000000b81aa51b0000832123280e29249d8a2218294b2a0a9f05235729992ac89fee224d29c52acc9f3b237729f02a11a032237c29f62a1aa02c237829e62a17a036236129cb2a0ea0062333298b2aad9fed22e628252a599f98229728c229ae9e672252286129149e4e220e28e228ae9dab2180278e28bf9c2821cd262028fb9b7b20cd2532275c9aeb1e72249725b1982d1ee22239241798f21cc2210f236496ae1bdb20c621d6948c1add1f94200594561a101f6020c893b219771fc320d1927b1c6b2046218195c21c7821cd22b2955b1d4722c2236996681e5e239424df97261f0424002581985b1f21242725a3981a1fe7232c257a98df1e9d231d255598f81e902305256498e81e4a23d7245a980b1f3923c8245398ff1e2823bb244c98d11e0623a72414987d1ee5228d248f973a1eb2226b240e97ea1d892252248396b91d43222f241e96961d0e220924cb95841dd021ba23b8956b1d96216a2372953d1d65211b2319950c1d4121e922ea94c91c1621a522a8946b1cd020682228940b1c66200f22df93d51b1520ac21a093c21be01f70214d93c91b921f46215493551b351ffd20aa92d51a0b1fba20ff91611ab71e702099912b1a6e1e34203791501a291ef01fef90ab19041eae1f6f90af1c611d2a1ecc96af1c611d2a1ecc960000501b211c00000000501b211c0000c9212a280e291f9ddc217f288129d89df4219728bd29209e2422d5281c2a6b9e802201294e2ae59e8c220829572af19e882203294e2aee9e8e22ec28342ada9e6e22c028f8294f9e3d227f28a929eb9dd8213e284c29449d6721cc27d5289d9cf920d2263528169ca820e5252b27349b032034256526f399ff1e8b24bb251499261ea123dd2476980a1e61221d249498691dac21af235c98901c692163230f971e1d54211b23eb97fb1c79211324b597ff1da7210c23bc98ad1f0021b022ad9a9a1df520ba225698f61cab204b22e396551cad20d42199956f1c61217a224e95e41d5922c9233c975a1e4d23b224ce97731e8c231325b797cd1e4823be241198a21e11238124f097ad1edb227324fd97af1eb422692400989d1e82226124b4976d1e452241247b97281e24221c24f996251e19220624c3962c1efd21e0239896e91dc5216d235196a11d7a210223d695661d3c21d5229995221dfc208e222995c11cbd204e22a0946f1c7e2026222c94231c47200522c993e41b1920de216e93ba1bf21fc2210793621bb11f8621b7923b1b431f41219492191b171ffb203a92d81adf1ebc200192881abf1e9220bb915a1a961e7d205f91391a691e4f2076918219141e0b204e90fd19981d111fae90fd19981d111fae9000000000000000000000501b211c0000c9212a280e291f9ddc217f288129d89df4219728bd29209e2422d5281c2a6b9e802201294e2ae59e8c220829572af19e882203294e2aee9e8e22ec28342ada9e6e22c028f8294f9e3d227f28a929eb9dd8213e284c29449d6721cc27d5289d9cf920d2263528169ca820e5252b27349b032034256526f399ff1e8b24bb251499261ea123dd2476980a1e61221d249498691dac21af235c98901c692163230f971e1d54211b23eb97fb1c79211324b597ff1da7210c23bc98ad1f0021b022ad9a9a1df520ba225698f61cab204b22e396551cad20d42199956f1c61217a224e95e41d5922c9233c975a1e4d23b224ce97731e8c231325b797cd1e4823be241198a21e11238124f097ad1edb227324fd97af1eb422692400989d1e82226124b4976d1e452241247b97281e24221c24f996251e19220624c3962c1efd21e0239896e91dc5216d235196a11d7a210223d695661d3c21d5229995221dfc208e222995c11cbd204e22a0946f1c7e2026222c94231c47200522c993e41b1920de216e93ba1bf21fc2210793621bb11f8621b7923b1b431f41219492191b171ffb203a92d81adf1ebc200192881abf1e9220bb915a1a961e7d205f91391a691e4f2076918219141e0b204e90fd19981d111fae900000000000000000000000000000000000003d2189220000be25f829d32ad3a25327aa2b962c2ba55f27ca2ba62c61a5ad270e2cc12cbaa5f7271a2cd62c01a60a28282ce12c27a60228322cfb2c1ba6fe273f2c092d16a68f274b2c4e2da3a58b28e92c032e45a665283b2d952e39a56a295b2d112ebea5202a962d262e4ea6da29dd2c4e2dbea5f3261d2a142beea2ce2354261127689fe21e1c22f321e398b41bcd1c5620be93df252c2a212c479e552d1834f03405a5f22b842f83303fa4642dda2d832d58a86f2e9f2e692e36aac02d002eca2d5ea9f82c6e2d212dcba8952b672c3a2c32a794274f297329b6a27823f2263728a99d5c21c22603286a9a34210a289f289099a522bd28a829e49a79213f29862aad99a921c7281c2af49a4a20d32628288b99621dab24e5254d97591dcd231225e896181d01238c246b96311da9223a248b96f71c692202244296171d3422c92340960c1dec2185230a96fc1cb4215223f795cb1c71212423bc95741c1f21c72230951b1cc4205e22a694681b6c20db21ea93c81a282070210893911afa1f2a216492581aba1ff920c5911d1a871fd7205d91b0194a1fc320cf909319081f95205b904019bb1e72201a9051197a1e2d20f98f11194a1ee21f468ffc181e1e641f288fa518a91ded1eab8e8419971d201f388f000000000000000000003d218922000000003d2189220000be25f829d32ad3a25327aa2b962c2ba55f27ca2ba62c61a5ad270e2cc12cbaa5f7271a2cd62c01a60a28282ce12c27a60228322cfb2c1ba6fe273f2c092d16a68f274b2c4e2da3a58b28e92c032e45a665283b2d952e39a56a295b2d112ebea5202a962d262e4ea6da29dd2c4e2dbea5f3261d2a142beea2ce2354261127689fe21e1c22f321e398b41bcd1c5620be93df252c2a212c479e552d1834f03405a5f22b842f83303fa4642dda2d832d58a86f2e9f2e692e36aac02d002eca2d5ea9f82c6e2d212dcba8952b672c3a2c32a794274f297329b6a27823f2263728a99d5c21c22603286a9a34210a289f289099a522bd28a829e49a79213f29862aad99a921c7281c2af49a4a20d32628288b99621dab24e5254d97591dcd231225e896181d01238c246b96311da9223a248b96f71c692202244296171d3422c92340960c1dec2185230a96fc1cb4215223f795cb1c71212423bc95741c1f21c72230951b1cc4205e22a694681b6c20db21ea93c81a282070210893911afa1f2a216492581aba1ff920c5911d1a871fd7205d91b0194a1fc320cf909319081f95205b904019bb1e72201a9051197a1e2d20f98f11194a1ee21f468ffc181e1e641f288fa518a91ded1eab8e8419971d201f388f8419971d201f388f00005a1e0320000000005a1e032000005826992ae92b46a4ee27472c102dfaa53928782c4f2d91a66028b02c932df1a68b28d92cce2d49a79328fe2cf92d68a786281d2d382e66a7a028612d852e6aa71029b82dda2e04a8ea28dc2d7f2f7ca7d128d22d0f2fcda6d728862d9b2e4ba6e528802c692dc1a673259c29aa2ab2a19c1c48228823a60bb21adc20eb217a0f791711202a21f60913192b22a7230c0c1c20ed2706298e12ca22a42be62cfc148924a12bcc2c5714ca26782a7c2b179d6f2c532d2c2d23a8092df22dc32d81a9ed2bd62cdd2c55a88a29b22b0f2cc9a5782661290b2ad5a1ab237d287c29919d0a2284279528ce9be621c827be283e9b7721fe27ea285d9a3b21ad27d228179ade2033278128999a71204a260228979a811f4325e926af99881e5924a925be98fb1dad23d0242698e41d4d238e249c97991d07236e243c97541dae223424b796001d5d2200244e96ae1c0b22a023bf95611cbb2151231995171c6a21f322a194e61b2621a3225994ac1be1204022f493751ba620eb21bc93361b6e20a1213f93d21a33205621a4929e1a052018213a92651abd1fe220d091571a871fbd205c91181a521f9f20f590021a1f1f7b20b290b419eb1e5320479077197b1ef41fd98fba18d31dfd1ec98eb419871e1b204790b419871e1b204790000033194c1c0000000033194c1c00000425a629102bb8a10328a72c802d4ea6b228f12cd32d9aa7c6281f2d162ecea7d428362d3b2ef9a7dc28522d612e03a8f528892db02e18a81f29cc2def2e26a81829e02d222f0ba8f328e12d252f8aa7e428c42de12e5fa72f28d92cd52db5a5521fe624fa25b593881cc821d1223210571a20219122150fdd19312187228c0ea219a02117234a0ee91a5123a624d50ecf1d6c25da260111cc1fb627c528b811f31f1e283229d210e120a6260a280c10e32377274b28e9985529152b2e2bfaa47129a82b082c56a5c027ae2a7f2b5ca31e257129822a9da0e523b628b5299d9ef62243282f297f9d8722ea27d628f39cd62181279e286c9c5b21fa265d28f29ba8206e26fc27e89a3220eb254d275b9ac31f5525a226e199291fdd241c264f99ac1e76248425bc98411eeb23e3243d98e51d2f237a246e976d1da92231247e96011d4e22e923d495d41c08229e23a095961cb1213d233295541c6321c722c3941b1c19216c228594e51bcf2016223894981b8820bb21e093621b49207d216c93321b2a20542100931a1b0d201f217592af1ae71ffe201492871ad51f002185918f1a00201d218b918e1aef1f1a215591441a9d1f1121e690de19341fe4209690e918551e4f20ad8fbe18371dbc1e348ebe18371dbc1e348e00005917ad1c000000005917ad1c00009f250e2a9b2b97a23728f32cd42dc2a6d7282a2d342ec3a70029852da82e21a85f29cf2d012f6fa86229fb2d3c2f7da869290e2e5e2f78a87729312e812f83a80329192e3a2f19a82c29eb2d4b2f10a81f284b2d472e36a64222c827b528e39b9c1da921cd230309ad1a27203321b008d118132036213a09fb1987213c23640c021b5d221924970d481b27236a24bc0ebe1cda23d724910f431d8f24bb25ba0f9e1dc124f725d00e471d85248f25ba0db41d3c243d254707bf201325c8259a95602411288e280d9fce24ea28bf2955a05424b728c429ce9f0824b628b629c19ec82380286329649e1d2338281229d89d3c22ec27cf28069d9c21382785286e9c2221a8263428f19bb9203b26f4274f9b2520ca255827489aea1f9125f526df99e01f36258e269899d71e522485258798241ebe23f324f097b61d7123b1246197a11d0a237c241897861db3224024f6963e1d4322fd237196e81cd521722306967f1c7021fc2261953e1c2721ab22f094081ceb205c227094c91bad2007222994201b5b20b1216493cd1a2f2078219e92d81a232060217192de1a1d204a2106927b1af61f18214591531ac91ff120f2903a1ac11fdf2078900c1a871fc5208990ae190a1f772014908919f91e5220f28f8919f91e5220f28f000004198a1b0000000004198a1b00001d26b52a232c5da37228452d312e33a70329672d732e0ea83d29c82de12e53a87d290b2e3f2f87a89829342e772fa9a89f29502ea52fa4a8c129782ed22fb5a867298d2ec22f60a861294f2eca2f3aa89527ee2cde2d69a501214b2552262790201b591f922100097617d61ef8207a005818a21e432019066218702008214507e91646208b219d060b190e216422d408401b85222024650c9d1b8e23d824130e131d6c23d324270eed1b2b238e244d0ce51b2d22a7238908341d67236c24518c9f207f25b9263c99df229a279628899dac237628a129cb9e242487288929339fa12362284e29839eee221c280429ce9da9220528ee28799ddc217a279728a09c0421aa261b28ec9b9f2016268a27279b1f20ae251d27619a0b206125b426009aa31fad24c3258b99991f4f2477258399d51e45245925be98291eff230d251498f91d7323b824b797951de12268240997541d4e2214248c96141dc32190233d96e71c89211123de958f1c4121ba222a95231c062180228e948b1bc1202f220894f61a8b20d921ff92c21a60209e219492b91a4c2080215392cd1a32204f21f8915b1a072023215f912c1a901fd420d390201a301f8b206590ef19ed1e4e2073904c195d1eea1ff18f5e1a2e1fc920cb915e1a2e1fc920cb9100004019201c000000004019201c0000ee25c02a3e2c0da37028692d722e1ea73629982dce2e23a86d29f92d292f7ba84a291b2e572f69a89229302e932fa5a87429492e952f81a8b529632eaf2fb6a81829452e832f34a82528512d8d2e0da62c22a5278828b695281cf121ef232f03021a521ff6214d022118c31f6121950105185e1e0f20ab06f914b91f5e20c20404152920202115067217db20662283084b1766213523e9073919bd21cc235508721915221b248508531ab121cf23a6058519db201d221d023818df2084228a00de1a80216f235a8e18212b26d827129b8e2349289a29919ef42369286f290a9fa4234d283f29a59e252329281229199ef2221428f228d19d6b22ac27b6282b9dbc21272769289f9cca202e26d127919b462075251e279d9a592065252127ba9a3d201a258c268f9a0820af24e6251c9aa11f6e24d1256b99ee1e0e247925b2986e1eaa230d252798fc1d4b23af24ec97951db622462409973e1d2822b6237196d31cb1212623c695861c7121e1226995501c3921a4220695111c07216a229b94e91bc4201a225b94e61b9920d6211894c21b5f209521cc938d1b2c2050211b93451bdd1f0a219d92a11a801fcb206591021a331f97208190cc19141f52202a90c519c81e40208c8f801b02204d212691801b02204d2126910000e01b971d00000000e01b971d00008d25752a0b2cf4a29528972db02e58a75829ea2d2a2f28a871292f2e6b2f73a84c29462e8e2f55a89f295e2ec82f98a884296c2ec52f77a8c4297a2edc2f9fa80e29522ea72f22a84628792d992e4fa624229926b2277293cc1b0721f522f706d9197c1f3421bf8000197a1ffa207884e516631fc320d604f214cb1f982036028114341fd5202903e9157b1fca2026044114681f1421fc0256160d206221d402de1327200322c201b0150120c9211701f816de1f5b217200b7160920af21db03e31ae92059222d8c4220f3240826b99a4e2240277128fc9dc222d327d728179e8c22f227eb28cc9dfa2225281f29119ee22228282729a89d14229127b928e59c3921b12614284a9ccc20fb257127939b6c20ab251327d89a57207d25ea26719a3920fd243726229a0b209624b625bd99891f6b2484253b99eb1e3b245325b198861e12241e2552981f1e6f23d224e997de1da42261246597c21d332206241297a51d0b229423c1961e1dc6214023cc959c1c7221ef221295431c3221ac22b1942d1c0921852276940b1cd9204f2232949d1b9b201122e493611b6520cc212f93b81a132075215392691a8c1ff620a091421a381f96201791f519fc1e5020d990361ad01e3120a591671ae51ec0207593671ae51ec02075930000a51be91c00000000a51be91c00003b26532b5d2cb4a39f28ef2dfb2e56a72029d52d172fe3a76029282e6b2f5aa83a29472e962f46a89329642edd2f83a87a29812ede2f64a8c4298c2e02309fa8fa286d2ec82f08a87228902d9b2e8fa66f20fb24da255b8fc01ba6208222b20c2b19361e3520fb019a17181e1e2074012917ef1e68200705e2160f1f1820f403cc12b81d6d1f63029811261de31e9b0134142b1e1320f3028a136e1f312134010a16181fdf2078039b169f1e65201c0286151d1e1320c3016115081e1b2076045918bc1f2e212a881120bc24ed25099aee22d327cb28949e6f23432857290f9f9e235a2865293b9f442331283c29aa9ed322c527dc28269e6122442783288b9d9021b1262328c09ce4203b26bf27e19b7f20f6256627f59a5620b62525274b9a12203f25a326c799a01fcb2415264b993a1f65248a25e698b61e172425257198471ede23f8240e981f1e5a23b324b797001ee0226e249097ed1db3224d247897c01d712221241097721d1022b0238496fe1c8a210f23d095851c182173221f95481cb020ec21b794261c64208b216f94261c38204d216f94f91b072015212294fc1aaa1fe120cc923f1a471f9c20e19197191a1f7020ba90f219521f8320d690341b33203421a2915f19ce1d071f008e5f19ce1d071f008e0000e519f31b00000000e519f31b0000cd251f2b4e2ccda258289d2d912eb0a6da28a52dd42e65a70e29072e402f0da8fc28282e712f09a861294d2ec02f50a842295e2eb32f2ca87229552ec32f5ea8b7283d2e922fa3a74a28682d872e54a68a201a25f725888f89195b1f71215b064b18bb1ddc1f8c80f215181d061f24012117f81c9c1e5d010914931c4a1d49014814ca1c121e5e016614291df81ef70102139b1d401fe8021312421d481f5b01ff140d1e1320df025515911dcb1f6202fb136c1d0c1fc901a212b01c031e0f01ca16dd1d161f8d88031e5f23452445987f214a26db27219de122db27e528879e62231e280e29209f0723f127f128729e9022ab27d028b59d26227927ac28279dc32123276b28bb9c572196262328229ca820f22574270f9b7620a72513279e9a2e2032257426129ad81fdc24202671997d1fba24ff251499321f8c24ca25c398b21e3f247b255398601ee3231a250498061e282389246697901d97221f24d596361d4222f0233c96fe1c0722b523d095c91ccf2179239295771c7a211b2333952e1c11218e22bc94dc1bb120f8215394461b5e208f210194fc1a27205c217793dc1a0b203b215593f11adb1f27213393cd1a9d1f19219e92751a441fbb20df918e19851ec21f85904d1a1820252154914d1a18202521549100009519621b000000009519621b00006225a82a0d2c24a2b2270a2dec2dcda58728612d892ed3a6da28e92d242fb4a7cd280e2e5e2fc6a71929232e932f0ca8eb28252e7b2fbba71329142e852f07a82f28cd2d182fb6a65827eb2cf52d7aa53420f124d225f98edb19ec1f6c219b0972177c1e79207980be18171fae207205ea15681ec61fe7044c16001e281f39055b12821c041ea3022b14741c5b1ded02af0f971c7c1e54027614cb1c8b1e6c011d14831dc81fd6019515d51ca91e11011c100e1c061d21000d11bf1cf71d210154185920de2014863c1e3b242e25ec987f2177262328389d5b22bc27de28ef9dc922232825291e9ec2221e282129e09ddb2213280529da9d2022b427be283a9d5d21f12655287e9c3121802619282f9ca2204d26eb272b9bb5200a269327229b722042258e26989a5f20ce240e26599a0820b124e225da994a1f6c248e250f99e01e2b244725a998731ee223052545980f1e47239b24a397981d90222d24df96081d4d2206240596e01c2922dc23ad95da1cfc21ac237f95a81ccb215b234695851c6a21db22fa943b1c0e216822a894dc1bb32003223394521b6d20bc219893da1a31207a21e392e71a1c2059217f92ba1a07204121e791bd1ae61f1a21b391cf1a931f1f21e390031ce21e6a20cf93031ce21e6a20cf9300007219ba1a000000007219ba1a00003c25812ae32bf9a1e527732d722ee3a577286b2da82ea9a69728be2dfc2e23a78128e32d2a2f27a7c728f52d592f82a7ab28f42d4a2f43a7f7280a2e5b2fb8a77928f22d372ff5a67427222d562e61a51d2077257c268391831ae41f6421d5004318811e5920a2010f17251e06200e048f16d11dce1e9b04a515d71dc81ef6038b13e41bd61c2a020c0c071a1e1c740087108d1a711cb9008810f41b7a1d2500d910cd1b531d2800ff0d5b1c3d1e18004211991be71c8180d013741cc81dc0007c16141e531f5888061fca23c4248b99c82147278a287d9dfd2249286529699e732384289229b79edf2245285929319e8b220528fb28959dbc2144278c28cd9c592109276828659c1c216e262928099c7a20e1256c27c99ab020a525ff261a9b562022255d266e9a2b20d9240c260d9a1220b324e325e9998c1f5a249c253c99da1e13245b258a987e1ec62318251898fa1d4223e0248897dc1dc8225e243397511d1422b5235c96db1c9b216823cf958f1c60212e234f955f1c2b21f9221795581c0b21c5220f955c1ce5208e221495311cb1201b22c094e31b5b209d215794201b0b202f2164930b1b901fe820db920f1b541fbe20a592131b5f1f8f20e3925a1afa1ea8205f91ce192b1ee821b990ce192b1ee821b99000007119e91a000000007119e91a00009524f2294c2bdca03827252d192e28a53128472d802e40a64d28792db72e8da634288f2dd22e9aa677289d2dfc2edfa65328a12dee2ea8a6a728c82d0a2f2aa72328a22dd32e70a68026c62cee2dd9a4c42045275a28879baf1c9b2135232f88b418101e5b209a80d218561ef11fd881e6163d1d101e70005e15331d031e58003412421c6e1dfd001b14f11c4b1ed60167149e1c101ef701a210861c7b1e7200f711e51b211e31009211221c1f1ee480b110e51cc61e5981f5144d1dc11ea586c319b321af229b91232033257e26109b9d21bb27e828279dd52246285e29459ec02231283729159e722212283629809db422242840299d9de221a327d128d59c6b2118275328749c09215726e427f49b6620ca255e27aa9a5820a3253127959a34207625e5261a9a09202d258b26dc99d91fcb240d269299891f4c248e255a995d1f02243b251d99621faa23fd240199c41e5323d2247a98761efc2295242c98291e75221f24c497a21d1422af23ec961b1db32149231c96941c5f21e9223095341c04217d22a094dd1b8f2014223494411b3a20ba21c193f41a23209a213593041b222083214693dd1a052063211e93aa1af61f55217c92531ac81f4421f491371aaf1e2e20d991301aa01d471f3e90301aa01d471f3e900000ad181a1a00000000ad181a1a000051249229d62a71a09d26d72cc52db9a4d227002d332eb5a5f8273a2d672e02a6d6274d2d802e08a61e285e2db02e57a60d286c2db72e2ca65828982dea2eb0a6a9277c2db42ea6a5bf27332d9a2ee7a58925422c392dbaa3db201725e5252093331a7f1f22215f024114ba1d2220e681c515821d9e1ed781db15441e1f1f5f001e13871d451f220187137e1c501e3301ed0e161cff1c5500780ef11b911d4f808b12411c111e0b815312cb1cd91ea0822314671d5c1f8b85fa1832209f21318e671d5924b8258097d9204b262128729c1e22ac27d628839ded22282843295a9ee62232284b29009eff2222282e29159e8a22d727d428949d3f227327ba28559d9121f9267c28939c6a21992647285c9c162149260e28199ce120e625bc27b59ba320802521272c9b3f2019259f264d9a0720ca241c26d999b71f7524ab255b99541f25244025f898d21eb323e5246898071e26238b2499979b1d8e224b24b496381d25221c241496d41ce421e223a095801c7b2156233d953f1c0921ab22f294e51ba52022227994b41b7120b2215d94931b51207c212b948f1b472066210a94301b202037217393ef1ae41ff820c092ba1a711fc7205492be1aff1eba205992ec18651dee20c18e611a781e4420fd90611a781e4420fd9000002e1a281b000000002e1a281b000027248b29e62a24a04726b42cab2d62a46727d32c092e58a58d27032d292e92a55427092d342e95a5af27122d572edaa58a27192d512ea0a5fa273d2d792e03a66227322d562e81a56427f82c3e2e65a54226772c812daaa43924aa2aee2ba0a1c2201025f7256092ac1a4520e4218e828a18241f62203785cf186f1f312086859415a81e1a201181da14321e0a204f00d4133f1dc01ec000a713eb1c6b1eb5810a13881c991e06825d14971dda1f2d84821822200222c58b261ded23892529963b2035263b28a19b2b22092845298f9de52269289e29ff9d37238828cf29289ed0226b289529d09dd72239285229bb9d7422fa27f328829d4d228227b328609d0522e8266b28f29c5c2152260f283c9ced20f525bf27a09b5e20912526279e9a2e203925a026129afc1fe7242a268a997a1fa324d1253099e71e6b248c25ae98521e17242f251598f61d5423c7248397591da9227c246796f51c152222249d95bc1c88217c235d95bc1c692143233795b41c5821412307959d1c2021ca221495951cdd203b220c95741ca820eb21e694521c7420a421c1940f1c322060215794371b0d203221b693c71abd1ffb2098925c1ab21feb209491ee1afc1f08211492931a1f2021218f915f1b502074213c925f1b502074213c920000901cf01c00000000901cf01c0000ce2360299a2a44a0f625872c792d41a4ec26b42cdb2de3a4df26ce2ce82d04a5d026d92cf62d07a53927eb2c222e54a51b27eb2c192e30a57227fa2c302e8ea5e626dc2cfb2d26a52827ab2cd32d39a5ad266e2c742dfba47425ed2b112db3a3e422cc29052b97a0391fae238424d6904b1bb11ef520a704521aff1ec0206b822e17421dc41ef4855e15411c4c1d74843514951cd21d7d83b314141cbc1de6831b15d41c8b1e3c846519941fda20ae8d431d59248e254b969c20a6265e28159cf5210a2821298f9df0226b287a297a9e22236c287829519e222365287d296e9e672221281729c59d5f22b127dc288a9dd62125278d28149deb21b42658283d9db0216b261128db9cc220c3255b27109cf6209f255627149c46206425e1267a9a2f2022259426139af91ff3243b268899831fb524ea25fa98ed1e7724a2257998771e2f2451251398fd1d7823f0245b979a1de0228d24e296781d6c223b24e496b01d2f220c242b97b41de821a72330978c1d84214c232b97071d282105232d968d1cde20c2222895261c8c2069226f94ba1b5720f7210194411b2b2081218693ce1aef1f3221d692761a841fd3207e92381a541fa520da91521a5d1f8a20bf91e419341f7f209b903a1a541e0f2045903a1a541e0f2045900000d6193e1c00000000d6193e1c0000ee21a928ed297b9e7a250a2cf02cbca35826512c4f2d60a42e265e2c642d76a4ec25582c592d46a45226652c792d90a43d26642c732d74a4a126782c952dc9a41a26682c6c2d68a46e26412c5d2d97a42b26292c302d4ea4eb25f52b0c2dfaa30625592bac2c9da20423e0296b2b81a0902047269227ef9b871de5213023b38edd189a1f1a2197852616a11e532019859314ab1d731fb786bd1864200122cd8ed41c12246a25ef95ed1f14260028c39a2f2247287829df9d8323b528142a5f9f2a24d528302a38a00e24ec282e2ab39fb723d228072a139f41239828d1296c9eb92264288129d89d792216282d29879d14229a27d128309db92125278828cb9c6221a9262d286c9c90200b269527599b7520ef2576270a9b4e206825d326a99a4c20ef245a26609af71f9a241026c899631f6c24db253e99281f42249d25da98e21e1324432572986e1e9823e0242798e61d052386243e97601d582211246e96d51cad216c23a195721c46210f2309954b1c2821da22ba94401c0421a122ae94471ce1206c2293944d1cbc203022bc94531c93200222c2945c1c6120c021a994031c212079214a94491bde1f38218d93ae1a761ffb208092131b991f3121e392a919f41e71213e902b1afa1d9c1f37912b1afa1d9c1f37910000931d2c1f00000000931d2c1f00006024d5293f2b68a15e255f2b782c10a3ba25ce2bc92ce7a39e25f32bf12cefa3c825072c0b2d21a4ef251d2c202d49a42d262d2c272d75a45e26312c282da6a434261a2c102d7aa4f625f62bfc2c29a4d125e32bf62cd7a3ae25c52bda2c79a37525952bbc2c18a3fd24202b7f2c3fa26524422af92b5da116236729cc2a36a02322bc28ed29e79e622162287329cc9d55213f286c29679d68217328be297a9d4d22a528f3292e9e6922e828652a4a9e21231029842ac49e38242a29532a12a016240f29602ae39fda23d728372a949f12239328fe29999ef0224928a2295d9e412220284c29a39d6f221b284e29b29d3722cf271c294e9ddf2115277d28eb9c1a213226c627469cd520f3257027c99b912098250f27119b6e205a25f426939ae31fd924752699995a1f6c24c9251a99d71e49245c25a498821eff2302256998571e6b23ab2433981d1e17237f24e797ee1ddb22592479978e1d70222124d396091dc92195230696b31c4e21f82279958f1c1f21c6224f95551ce4208722e994271ca52027229294171c6b20c4215f94171c482099215f94501c402071219c94471c2720542193941e1c0f2033216794c01bd41f09210594401b971ffc204a93101ab31ffc2052912319f41d141f04902319f41d141f04900000d61d4f1f00000000d61d4f1f000016249729d12afda0ea24012b462c63a24425462b732c19a33d256c2b912c3ba34625782ba42c72a33f258a2bb92c68a341259d2bcf2c80a37825cd2bdc2cb8a38725af2bdf2ca1a37b25952bcd2c7aa37c25692bb62c65a3ce25442b822ceba3a425fd2a772c6da3b525e02a692c6ca36925c62a722cb0a25e25b42a4f2c61a23325832a2d2c2ea2c624502a072c5ea172241d2ad22bc9a03924fd29942b69a00024d029632b0da0de23a5292d2bd89fac237129e62a879f792335299e2a369f4623f628582a059f4e23b6280a2a0d9f40236a28b6291c9f0e2324287629d09e5422af271a29e89df0214027df285a9d6f210727ac28d09c2e21d9267c28819ce7207d2629282f9cc2200826a927ab9b652083251b27159b3d203025b7268f9a3420ce2443265f9aff1f6624ad25ce99411f0224362508999f1e9e23f6249898221e5723c2241098f71d0d238b248497931db0225e24ab96501d412228243096271dab21c123d695311d49215d23e195191dff20dd226c96d81cb12046227d958b1c9520ff21db945f1c6d20d0218994f81b3c206e212294961bb41f0921a093061b661fe020d592031b291fc2209992ca1a261fbb2064922e1b0a1fa7208792231a981e9220cc909c1bf91e9720f3919c1bf91e9720f3910000e81d451f00000000e81d451f0000d3237229a12a96a0a324832a012ccea1df24e32a352c69a2d624fe2a492c85a2de24022b562ca4a2e3240a2b5c2cbfa2d624f62a552cada2cd24e32a422ca0a2c624c72a362c83a2a324a42a262c2da2ac24972a242c26a28d248e2a262ceaa18a24812a202cc2a18c247e2a1c2cb2a1a924732a0a2c9da16624562a1a2c28a184244c2a182c39a1c324782a212c6ea11d255f2a2b2cd5a1d824542a232c5fa1e824232a072c85a17024f129b52ba3a00a24aa29402b18a0e9236f29d22ae39f642314296f2a419fc422cb282d2a879e49228f28d929f89d2c224b287a29aa9dc12106282329189daa21aa27de28049d49212a277d28839c4a21c6263e286e9cd22064260e28eb9b5b20e3257d27e19a0d201d25a126459a2f20d0245b267a9a1620ae240f26319a8e1f52247e255d998c1e0224112556980d1e7823d224a197d21d10239b245697b01db62270242b97921d4022322405977c1db7219423bc96241d5b212a232696d11c3b2103239c95931c0221cd2209952c1cc2204b227594e71b7020b8211994681b252056217193401bc01ffc204a93201b651fc320ef92041b391f9d20d492921af91e86202f920d1ac71e6c204f91fa19a71e66203e91f019b71e5b2005917f1a941e5720b3917f1a941e5720b39100001e1d181e000000001e1d181e00008122b128d7296c9f0d24eb29592be1a0fe23cc29302b22a11924f2296f2b65a139241a2a912ba0a14b24352ab52bc9a13c243a2ac72bb5a13524332ab22b89a141242d2ab22b99a1ef230d2a802b18a13e24cf297d2b61a1da23b0298a2bdba02724c029502b11a1ed238c29192bd6a0e52390292f2bc1a045249829132b01a19d239d29892b67a01c24c2293a2b9fa03124c6296f2bb7a06823c029652b0ca0f023b7293f2b46a0c723b529222b20a0b5238529072b16a026233829042b789ffe22f628ac2a329f692290285d2a649ee9212c28dc29cd9dc021a127ef288c9d4f2112278b28de9cf9208f264628679cf9204d260c283e9cda200326bb27109c6e2066250927479b1e20e9244e26809a591f8724bb259199351f5624ae251e99061f4224a625e098071f20248c25e198aa1e4523f3246998a81ea22258244d98781e962230241498091e652219246a975f1d0a22a3234196de1c6121d9228395ad1c3621b3222695aa1c3121bb2222959f1c0921a1221695741ccf207d220c95581c932058228194341c5b2029225c94bb1b0c20ec21c5933c1bb61f9321d092f41a6a1f1f218c928f1a251fe520f7917d1a111fa820e7913b1ad41e7c207791071a9f1e3820b690621a4f1e03209a91621a4f1e03209a910000a71e342000000000a71e34200000e1212b280029e59e71223e29992af79ff5223c29922a5ba087236d29c02ac6a0a7237c29d92aeaa0af239729f42aefa0d623a529002b08a10424ad29212b28a106249929132b1aa1be239e29e92ab9a075235729c82a7ea0ff220829832afb9ff123f528672a97a06e23d1280e2a1ea08c237a28f2297ca02b237928cb2908a017245e28562989a0712474287629dba075237c28a429ca9f4e227d289b29499eac222a284e29a79e41220828f928239e4822e4276e29299e4c2221285d29479e0322a1271c29e69d9c211b278428269d78218a261028ee9cff20e9253f27589c6e207d256a27909b302065252327049b23201b25a426aa9a4e1f83247726a699651f43249a257d99021fee2319251699bd1eaa23e924ad989e1e8823ff249798601e5923e6243898401e1123bd240a981f1ec6227524b7973e1eae224f24ab97481e9f2230244298ec1d4e2202244697601de021962342960e1d80212e236795c01c4b21e722ed94a21c2021b722cd946b1ce62090227194211caf2059222694ef1b74200c22b893a71b3920cc217293b01b16208a217b93a51b00205a213293801bbd1f36214c93311b761f3021c4920e1b3a1f1b216a92731aec1eee20de91121ac31e9f208691701a4a1e2a20d390701a4a1e2a20d3900000191d251e00000000191d251e000027223c28fe286d9e8d223329842ac99fd4223829ab2a1da034237229e22a65a01f236629de2a67a0f3226329da2a4ba0c5225b29ba2a2fa0c4222b29a02a2fa0c0221e297f2a1ea0a2220629572afd9fc322c128202aed9f8122a328d729369f76225c288e29109f422227285529be9e7d22d5272129fd9e57225927c828ba9e6b22fb268528049fa922eb265628bf9e7c22cf2630285c9ee1216a26e5277d9d7f213726a427dd9c62212d26a027ae9cad2186269d27c19cf720c6255527289c0f218a2514273d9c032157251027479c912026258626819b1c20ca243c26c19a8a20ef244b262b9b5620cd244026b69a4420ca241826779a1620ac240626ef99e11f7424b8257899cf1f37247d256c99da1ed0231a25a598d01e6323c52483987a1ecd2267241598531e95223324c597081e64221b243897f31d42220a24ee969b1d0422d9235996421dd0219023c9951c1d8a2124237695e81c4321bc223e95901cf5205822e1943d1ca020fa2165941b1c6520aa214294e81b462075211994bb1b31205321c5937a1b0e202c2183933b1bc91ffe204493191b861fe020e892e11a3b1fc320b292c11aec1e8c209392a71aaf1e7a200c92aa1a891e2c20d991b21a3d1ec51fa991c01a401e3720d990c01a401e3720d9900000141c541c00000000141c541c0000d3211028f228b79d2422d828ff29b69e7422ef28252a429f7822e828452a619fa7220b29792ab29f90220129842ab29f9922f528592aa29fb222e328382abe9fbe22d828272ab09fbb22b428f629929f5f227c28a629f69e2422372849296b9ef921f927f0280d9eb921ab27b2289d9d562135276828fb9c0221ee2645286f9cb5203d26a027e29b93208e25cc265f9b43200525fd25759a7f1fa824c9257199761f652435256b99102041240425e699391f742477252199981f6e2477258399541f70247d255299ed1f22241725c0992e1f222427253799141f0c242a252399ed1e02240b25eb98251fd923ec24f598e51e7023c524c9988c1e3d23b5247098981e2c23b4245e98b21e1f23a8246f98ba1e1f23af2474989d1e00239c2446984e1ed9228324f2971b1ea4225d248097ef1d7e2249241997d21d3f223024c8968e1d01220e244a96751dbf21cc230296801d702180230e964c1d59212723d595171d3621f0227095ae1c0a219422da943a1cb42032224094af1b3e20cd21f8937d1bf61f7721c493741bc01f4821bb93621b841f1c216c93011b291fd920d1926d1ad21e91204192ef197a1e41209591ed194b1e172064911e1afd1dd51f5e91601a351ef01f3091971b051ef51ea193971b051ef51ea1930000671cc31c00000000671cc31c0000ad21232813294c9dd9214c283929049eb62156286229f89de9217f28a829459e30229a28ca29a99ef6218b28c1296b9ef6218a28bd29539e05227d28a429639eff21682886292c9e0a224e286529059e0e223d284329d89db7210428fb283e9d55214b278528b99cec207826e2271f9cae200f264b278a9b5720c9251927db9a32206e2588265b9acf1f10251326cb99ef1ea224dc252499d91e31243925f898921ea023a424aa984f1edf226a247a98721ed822e82394987d1efb22012481987b1e6a236f246598ad1ef423c22486983c1f2c24f924e798d31e232412258598d11ebe23e62483987d1e7623ea243198411e3e23ca240b98951e1a23922441986e1edb2257242798731eb12254242b984b1e9f224c24ef97441e75224024e697431e4e222c24e497561e2c221d24c897931e2b2211240a986d1e0122ed237b97db1db7216223a296911d6221e82220963e1d2421b9229a95ef1cde20712246959c1ca0203d22ed945d1c732019228694031c3320fb212994981b0620d221a293751bcc1fa1214293371ba21f66210693081b571f30219e92f51a331f02218c92c31af61ec1205d92671abb1e8c200692321a8e1e6c20a2910c1a4b1e3b204e918219191ef91f7b90561a9d1de61ef992561a9d1de61ef99200000000000000000000671cc31c0000ad21232813294c9dd9214c283929049eb62156286229f89de9217f28a829459e30229a28ca29a99ef6218b28c1296b9ef6218a28bd29539e05227d28a429639eff21682886292c9e0a224e286529059e0e223d284329d89db7210428fb283e9d55214b278528b99cec207826e2271f9cae200f264b278a9b5720c9251927db9a32206e2588265b9acf1f10251326cb99ef1ea224dc252499d91e31243925f898921ea023a424aa984f1edf226a247a98721ed822e82394987d1efb22012481987b1e6a236f246598ad1ef423c22486983c1f2c24f924e798d31e232412258598d11ebe23e62483987d1e7623ea243198411e3e23ca240b98951e1a23922441986e1edb2257242798731eb12254242b984b1e9f224c24ef97441e75224024e697431e4e222c24e497561e2c221d24c897931e2b2211240a986d1e0122ed237b97db1db7216223a296911d6221e82220963e1d2421b9229a95ef1cde20712246959c1ca0203d22ed945d1c732019228694031c3320fb212994981b0620d221a293751bcc1fa1214293371ba21f66210693081b571f30219e92f51a331f02218c92c31af61ec1205d92671abb1e8c200692321a8e1e6c20a2910c1a4b1e3b204e918219191ef91f7b90561a9d1de61ef992000000000000000000000000000000000000912035220000572578293f2a59a28b26172b502cb9a4bc26032b4d2c06a5ab26472b5d2c15a52d27722b742ca3a51a27772b762ca3a51f276d2b6c2cc4a5b426362b4b2c5fa52b26f72a3a2cd9a469263c2b312cd5a45426932b532c9ea40c28382ce12c43a53c28602dbe2eb2a4b127402c4a2d05a4962456288829f0a09e2200275128059f581bea235b2491952a14a01e921d618d0000dd1a7820000097266d2f9c30e29f1d2c8b335e34a4a1c027212c2e2c44a0b42b1a2c782b31a7bb2b052c7a2b95a7a629492a482a8aa5ac26a028e02803a219246728ea289a9ef021332809291f9c0123b4289129ef9b3b229f29322ba99a2a234f29542a499c74207a27d928c299351c0a255827d7950a1cf4237c25dd95371dc323f7243d975f1d3c23ac241c97dc1cce225724f895d41c9a22252416969e1c4522f523ac95bd1c1722c123d2959b1cb92182238295af1c852152239b95941c522100237a95431cf9209e22f694c81b9a2025226894f31a4620af21a693691a0b204621da924f1adb1f0b215792231aac1fed20c791cc196e1fd12045916319321fb820ba906c19041f9c2069905919dd1e82205a905819961e47205990df18381ede1f9d8f0819fe1d741f1890d017c11d601fdc8d0e191a1d5e1eef8e000000000000000000009120352200000000912035220000572578293f2a59a28b26172b502cb9a4bc26032b4d2c06a5ab26472b5d2c15a52d27722b742ca3a51a27772b762ca3a51f276d2b6c2cc4a5b426362b4b2c5fa52b26f72a3a2cd9a469263c2b312cd5a45426932b532c9ea40c28382ce12c43a53c28602dbe2eb2a4b127402c4a2d05a4962456288829f0a09e2200275128059f581bea235b2491952a14a01e921d618d0000dd1a7820000097266d2f9c30e29f1d2c8b335e34a4a1c027212c2e2c44a0b42b1a2c782b31a7bb2b052c7a2b95a7a629492a482a8aa5ac26a028e02803a219246728ea289a9ef021332809291f9c0123b4289129ef9b3b229f29322ba99a2a234f29542a499c74207a27d928c299351c0a255827d7950a1cf4237c25dd95371dc323f7243d975f1d3c23ac241c97dc1cce225724f895d41c9a22252416969e1c4522f523ac95bd1c1722c123d2959b1cb92182238295af1c852152239b95941c522100237a95431cf9209e22f694c81b9a2025226894f31a4620af21a693691a0b204621da924f1adb1f0b215792231aac1fed20c791cc196e1fd12045916319321fb820ba906c19041f9c2069905919dd1e82205a905819961e47205990df18381ede1f9d8f0819fe1d741f1890d017c11d601fdc8d0e191a1d5e1eef8e0e191a1d5e1eef8e0000491de31f00000000491de31f0000c8250b2a1c2b21a4d526c12b982c5ea56027ba2b912c08a66727082cc12cffa5d727362c072d99a6b727302c0a2d5fa6d2273b2c1c2da5a6a427482c0d2d7da6e627612c362d96a6ae27622c5b2d38a655272d2c012de1a512272f2c0a2d46a5a526a52bac2cb1a468248029b82a19a1a21fc7251f2736965e1d452452251c04671ccb223b24370c721cb124ef25f10748203a285329a68b1324442c6f2dfb958225532dbc2e9294a3241d2b5a2ca09521250529cd29529d6d28cf29ec297ca439276b287328e4a3c7242f28d228c3a0d02237272928999d1822f427e6286c9c922137283a29bb9bb82129281c290f9c0e21cf27d828a99b0221352780286f9c82203926a627d79bab1f3825a3268c9a971e8224b6256b995a1e0a241b25d098081e7323a2244898de1d05235e24f4977d1dbe22452471972c1d66220924d996ad1c11227f230b96731cb42136239b95351c7b210c230895d61b4521c7227094b51b032181223e94681bc5201e22ea932b1b8b20db21aa93f61a6120972138937e1a2c20592186925c1a0c2030213092671af91f10210692531ace1ffb208c911c1aa81fe520f890151a6d1fc720f390d119461f8920eb904a19681e02204e900119221d971e8c8e6d193b1e0d20688e6d193b1e0d20688e9d1c6a1c541ca78b9d1c6a1c541ca78b7c2271244d25ea9c3a26952b8d2cd8a457288a2c632d07a73228862c5e2ddca64628a12c812d43a73928a92ca02d2ca77428d22cd52da3a76e28fb2ce62d99a766280c2d1e2e79a76428df2ce42d52a7d3279b2c902d65a63a27112cee2cbca51b24a728992989a1061d0d237e2454964f1ad6208a22a18c191b2e2211248704f71bf1223a249308911c752495257f03511e2426bf279c81922061285f296b8e3d213b29832a589013226a2865297594482245274828b69864254728b928c6a04a243128d328999f6423e427bd288b9e6222d827b4288c9d7522f327e628689d5a221128e228389d1c2268279128379d7e21ff265028b09c0521ab262b289b9c75203226c2279c9b2f20ad252727df9a9b1f2f2570265f9aec1e8324b1255b992c1e102428257b98c91d4a23a0240498761da02228243b971d1d2f22c7234896df1cfb219a23d495ca1cd521692394958a1c8121fd222495361c28217f22c694b31bcf2027221d94691b8920cb21eb93561b5d209021d7934f1b1a204f219493bd1b25204721c7932f1b01200c218892e11ac41f01214192441a9c1fec204c91441ad31f0b214c91831ae21f18214c91ed199e1f0f21d290e219631fdd209990491a691e861fb791a2185b1b341ca890a2185b1b341ca890741e7a1fc1203894741e7a1fc12038942f206823562313970826aa2a172ceea45528a52c8a2d27a73f28c02cb02d36a76e28052d492eaba7b228322d472efaa7c528372d7e2e0da862282f2d512ecca77428042dca2d91a77c28102d1c2e7aa72c28c22ccd2df5a675247d29d32ab8a2de1daf22522465979a1c682100232391551c30222e24158a771b2422fb23c3849e1bd4210323ea82061c692388240781fd1c9324cc25d283f81d2b25842692847e1ead250227cd89471fd5251c270a8e0a20d5253027ee91cd20b225952685984121da2525273c9ce520072664277d9c9b2141268e27699dae216926dd27649d66219c260128dd9c5a21a4261c28e99cab21bc261d28059d462195262528c19c6720ed257f27839b38208325fa26119b09209525fe26a19a18207c25f826779a731f3a259c2668995e1eed23f5246b98891d12238c245497531d0e238a24e2965c1dcd226524ed96511d75223124de96161d1322f023bc96d51cb0215f231796621c5521e7223e95201c0e219322cd94bf1bcb20392244945d1b8c20d321a393181b50208d212193cf1a29205f21a092811a082042215492261ad21f22219891c519861ff720b190c819701fd6205690d819971fdd206290a319651fcb203a90e819b21e19200d903f1adb1e2920ae913f1adb1e2920ae91911aea148e149c88911aea148e149c886620172266226c987426632b652c54a58228ed2cce2d83a75328f32cdc2d58a7a228192d322e03a8a928442d552eeba7c0284c2d732e09a877283b2d692edfa79228472d0b2ec4a7b428522d8a2ed7a7ba261a2c192d72a5c61e7224af25079cef1ba3203a227492fd1b701f5a21dd8dd51ab31f4121698bf71993208521da86841a7620a92128844f1b4f219b22aa841d1b442210248a84b01bec2283246a88e61c5223c224108c881cc723e0243489501e5d2358240b8e591e2c24e424e693331f752452251d99c91fb424a925249bd4207e25c126bc9c74210d268427439d0c22022760288c9d80227127a928119e5f228927a828d89d7921ca264428ef9ca7200126a227ca9b5d208a251d272b9bfd1f5325b126909a0f2023257026489a5f1f7224952578993a1f182444255c99d81e1c243c25f798601ee4230a256c98cb1d5a23b624ac97711dea225e24dc965a1d3b22f523bf96541db7216d238c962b1d722100235996bd1c2d21a022ab95171cde204e22a194791ba820ef211d94cd1a6b209a210e93851a40206b218d92861a2b2059215992801a12203621e991351ade1f15214091f2196d1fce20d690e119131f8920c9908819ac1e30205390b11a481e731f5e933f1a6e1fa1207b913f1a6e1fa1207b91e61ac114cc14e180e61ac114cc14e180e720332361234d988f26ca2bac2c5da5ec284a2d462e10a84328fe2c232e3da762282d2d3e2e84a73129b42dbb2e74a80329892db52e38a8b628672d8e2e3aa8c028572d442efea72228e92c322ed3a61e240d29672af2a179197920d721fa909c1a2c1ece208a8e6d1bf21d3f20df8ee61a601d2c1fb88986196a1f75201d829a1acd1fdc20d8807a1abe204522d4007d193a211123b300c2191321b822ad83f318b8204522a280b31961208e212f82dc1acd200922d188aa1cb421ee225190281df32181232c96561f29245a259d9ad220b0251c27a79cbf21ac261928a39d0922f6265528bb9d5a2249278e28089e89228a279728ff9d4a2229277028c59d7521b5262f28a89c7c20992530275e9b1c2019258226c19a6b202925e126fb9a4420ff248026779a9e1f7724d825a699951f5e24c32581991c20fe2301255c9aaa1e7523d624bb98981df1227f249597561d6722372411970c1d0222ab238596bd1c9221fc22f995641c4721b52265952e1c0d217c220095d91bda203c22b294a31ba42009225394b21b7b20d1213c94cd1b51208a212b94ad1b20204a217893351bbb1f0421c992a41a681fc020d491211a321f93202f91a419f71e592097905719401ee51f0190791a7b1fb4207991791a7b1fb4207991b81a1015ce150106b81a1015ce150106a1204c23272310986326622b722c2ba5ec28662d7b2e06a85228132d592e34a74b282e2d362e5da73d29cb2de52e73a81429cd2d122f3ca8d128832dcd2e5ca88f280f2df82dd1a75827842cb12d1fa6a7213e261b282b9fa911201c881ec4875919821d61207088381b231e4320608c801a411d4b1f26046b18661d5a1fb10133182c1d7a1f9b019c18231e032097003418da1e832089806518301ff420ed8399189a1e452096802a17f61eaa2075801b1a0b204421e583641abd200a22ef8aae1cbe20f621b594141dc6224824a898401f52247e25cf9b5e20ef244726909c8b207825f826879c75214226f9275b9d122202276c280d9ed221902622289e9d0a21d12532279f9cda20cc251927109c44206425d826259b4c204e25bf26839ae31fe5242f2699997b1f8624ae254f99501f512464251499f11e2c244425d1986d1eff2312255b98221e5823c0241098eb1d9c225824d697ba1d3a220e243897cf1dd02175238197391db02120234096841c5621c7221e95221c0f2179228d94f41be42050226094a91bb3201a2218942f1b6d20d321ad93cb1a2f209321d492611ad61f4e213592051a561ff2207991a119051f9620f090e319e91e70202a910a1ac71e3820ea90741a441eba220490741a441eba2204901a1cff177418c2091a1cff177418c2098d20af223823d3961827272c002d3ca5e128862d922efaa73228132d4e2efea642282f2d322e4da71829d72df32e54a80d29d52d172f36a8da28b42d0f2f51a84f28232d2c2e2fa7dc26512c612db7a5701f4f240d261f9cb50f581a951d0e8462187b1ad61d27864a197c1c931e6d87dc18221cfc1d9f009118b61cfc1d95007716021d311f3d019517eb1d0d207c00c017f11d13207f00d416691d1b1fec832a178b1cf41d758065167b1d6d1f69000319f01e5b20a400fa184e1f7c20fd86161a3d202f21c290f81ca02230242a98201fc5241426389b7f205925cf26b29c0f21df2580270c9dff21dd266228fa9d0222c5266328609e88215126df27c79d602112267d27309d2b216726d227549ca620c2252f27a39b3b207f25ea26479a182032259826f199831fac24fb253799bd1e212448259298421e8b23d62425981f1e7023b924e997f81dfc227224b697de1d9e223d249597eb1d8c223824a597e01d6e221e249897871d0322bb23f796e01c78210a23fd953b1cf1205622ed94de1b8f20ca217594c11b5d2077214594a11b312053211494481b0a2031218c93ac1aa31fe720b492211a2f1f9320c5915619f21e66200691b319181f7d202f91f21a18200d21a6914f186b1c6c1d4a8f4f186b1c6c1d4a8f6c1c52172518e7076c1c52172518e70704202122a422c495a726ed2bc12c6fa4b1283c2d252e99a7b027cf2cde2d69a60028dc2ce62dbba6c828962dab2ef9a7d8289f2dda2eeba7b3289c2dee2e1ba84f28372d332e1ea7e026682c882dada59d1f0f249e25869c7d0ec114bc196b8307187e185b1ca8857718751b761d9200a9189e1ab91c98007d162e1cdc1d6a800317e41b0e1e7380dd15721c0f1edf817116991c121e3c81f515d21c921e6c837515381d391f0b01c3144e1d271f4e000519831d9b1eec814918101e891fa688c519db1fb12053902b1ccb210d237396f21d3e23b524679aa32004252326eb9ce3212526a7276e9ebe22dd265528d49ed72182262928749d5b2145268c27ff9c34218f261428db9c7c21dd264e28559cb7201726bf27999b722092250d27bc9a102015257126069aa01fbd2407268999171f8624c125ec98c31e4b248a2596985c1e0b24442536981d1e7b23e424e797b71dcf22572434976c1d69220a24a996f11c0222ad23e995cb1cd021802395958f1c9a2135234f95461c4d21ee22fa940b1c00218822b694ad1baf20fb215994661b642099213094f41a29205a21a7939c1a0220352110936c1a931fff20dd92161a331fc720829273199f1e67204d919819cb1d101f4491921a181f37208f91921a181f37208f91601be114a616b504601be114a616b504891f4222ac22a6955a26dd2bb82c14a48128552d4f2e39a7ed27fa2c0f2e8ba625280f2d2b2ee8a6c728b02dc52ed0a7a828922de42e8aa755285e2db42e80a7d527ad2c992d77a64726262c442d22a5a51f8b242c268b9cde0adf16791a2681b51799163a1b71835119bc18921bad80b316fe18b61b6e80c7178b18e0197f8000167819121c26816d156a1abc1c1e835315f71bfe1d0501fb15581b881d33840c14901b451dc6004713041c6e1db3801c186c1c931d9381171913200221788bb31aae21e6224e92da1c5c23b1242498ed1e31247725ca9b232060259926429ce8201326a727e49c0b2211278d28ee9d7823f127f128af9fcb2139278828399de9201726a327719b042120267a275c9cc8200a267927019c9520b4255427179b2a20eb2443262e9a19208924c525149af71f8624b025e999951f5a247d258199d31e17243725bc98401ee9230a252398f81d5d239d24b697701d8f221f24da96301d572207246096f11c2422dc23c2959e1cf921b4233b95711caa214d2308955d1c4221ad22cd94001cdd202b2267946b1b8c20d821ed93fc1a4d20a0213e93a11a1a207121a992ba1afd1f65218c92701a0e2042214392211b062038217c926a1b05200d2145925220091e5f1f839b5220091e5f1f839bea1a6c14cc156904ea1a6c14cc156904dc1f5122d422e5953426f82bd22cdea38b284c2d582e23a77127e32c162e06a6ed27eb2cf12d7ba692287d2d822e54a75a28552d9b2efba61628172d5e2e01a7e327bb2c952d73a696266e2ca32d47a555216927dc28309f090d8819701ca782d5178e150c1a80823f1840187f1b8b8038184b18441a9e81ab150e196c1a1681f415db17111a2481931460193a1ce080f615f619301c2481b715171af21b4883ca155f1b0e1d96821b15411d381f3c84fe18891e4220548bf41802202121888dc01930201e213b911c1c50221124c196351e3c245e25639a3420f7244826539cec209a260528c09c9721cd265b28659d9d21be264128549de0202a26da27299c0c2168260c28549b3d2174261628639c8820cd254f274d9b92206f25bb26389b1420cb24f5250d9acc1f9224b825c8998d1f6c249f257b99191f342474250a998e1edb233f258c982b1e84230f25f997c11d0d23d9246f97871d94225524ca96f81c002295231b96d41c7f212b23c7958b1c4121f1226f95571c0521cd2231953f1cea20ac221595431cb6205f2219956d1c9620f3214c95d91b382081215294421be01f3121fd93111b7e1fdb208d93e01a551fac202193381c981e4e200d95e61a501e2f20d591b719541e4f207a8fb719541e4f207a8ff9188d118c14e801f9188d118c14e8013e1f6c22be22e595c325662b8d2c20a32528082d1e2e94a61527902cb92d91a51d27b02cbd2da5a56828472d622effa64c28492d7a2ee4a661281a2d512e70a71928ed2cd82d91a627278d2cd62d9ea57b223029cd2a0aa1db16921fe32032919219a116381a718c2c19e317d81aa9007c17d218ee1b7a80f7175919fe1a86817e174018c3196f813f152c19701bac819e14e119821ce2805b14401a961c80825813161b381d1c82bf15121c821d0884f217a61c511ed18861181b1ee51fe48cf119d720ca21ec921f1cb8226624b297411f9e24c9253c9b1421472606283a9dfe21c327e828129e7722f6271b29099ef9218127ce28639d16211f2669272e9c0221202683276e9bfc201e268827419c422058259a26dc9a3c2045259c266b9a2c2041259a260e9a092009256326dc99bc1f9424d5259d99981f2d245b2583995e1fe42341257799031fb6233325fb98ab1e6223fc24bb98a21ee9229f247f98961e47221c247798c41d0422bb237397291dae21632380968b1c6b21f9226f950a1c042180229394501b7820232207942c1b1620d921ab93dd1a1a20a3215693b51a162080212b93b51a0f2060212b93381ae61f2b2173925e1add1f37219a92fa195f1f9620d191b6197c1ef51fa690b6197c1ef51fa69088183e11b613940088183e11b6139400741fbd22e02211961425b02a2d2c33a29427ad2cc22dd5a58e265c2c7a2d19a58126792c8d2d0fa5fe27f42c052e48a6fe27f72c2e2e48a6a027e42c1e2e5ba6d427e92cb72d57a62628c12cf42ddaa63f25712bba2c15a4101db02406266c9ab018631b721d548fa11752148f195b856b184c19641c5587d016531bcf1cc884cc1604188b1aa385281453180e1a82848216cb199c1b31893116951b4c1dea8a4b18061da71e9d8df317b21e8620748d83194c20a4212290d118da20a3223a90d71bdd21ff23f094511e6a236f25ff99f81f20259826099c842093256127939c94215f260a28079d07231e2765281f9f6d22b3261f28009e3a2261260028839dd7216c262528b59ce72188262928f29cfd20fa25c227059ca8209f256827819b5c204425db269c9a3420e7245e265f9adc1f9024d925d5996b1f3c24772544994c1f02241a251099ee1e7d23be249698041e06236e249597881d68222024cb96171dec21d5231796b51cad21b823a295541c4d2136230a950e1cf1207722b994b51b9220e4217d946e1b5820842153945f1b3f205e212c940c1b1b2033218893b91adf1ff32030934a1a271f87205292061ad51e6f200d92b619941e6e206091b9199a1d471f0691eb19911dee1ed190eb19911dee1ed190ac18230c9a119980ac18230c9a1199801e1f602296220496f924a22a222ce9a14e27892c962d91a52526302c4b2dbaa424263b2c362daea45227a12ca62db2a54f27ae2cd32dafa5e2268c2cb62d92a5fe26862c692da9a52327822c892daaa59c26362b8e2c75a50122db283a2ab8a0961ce322f1243b9910191e1d3320bc916619eb1c5b1f688f7118ce1c331ecf8d9c18841a021d538eea15211b811d318d3b18cb1b4d1df78fa417461dbc1fae8f5918731eaa201890d0171820bc210d90e1194c20a121199223195921562375936b1da823de24a098361f6925da26d99a962030260b28489cfd20ac267728a89c83213027b228cb9c8422b627d828fa9d28227f27af288c9df7214d279428799d272175262628659c0c21c9252d27f99be720be253f27969b79204e25d926c89a0620ee246626f8998b1fb424e5255b99331f60248825ff98cb1e2b245225b798271eaf23ed242c98c21df2228e24a097541d66225124b7961a1dee2106241b96871c5b215f2321954a1c33211d239694541c34214223a094281ce220b2227194251ca92015226e94f51b7420ca216194c71b57208f2148946a1b1c204f21ec93ba1a01202b21f992641aa61ff0203892ea19871fcf209191351aaf1fd820a591de1a0620de20ce91381a7d1da51e0b93381a7d1da51e0b934c17d90ed11143034c17d90ed1114303f91d9a22b7220d959d246c2a0e2c00a262278e2c952d64a53126312c552d92a42226372c2f2d86a43027902c902d6ba5d126782c932d31a52c26382c5a2ddaa451260d2cdd2cf6a40e26012cdd2ca9a4cd25552b8f2c5fa4bb248b2a2a2c49a383219b28d629f59ff01c4d24b625b699df1aff20b5221995941a7e20ff21aa93cb19ff1f9d21ee92711948209a2157926919bb1f66212092a11917209e2160926c196f202122cc91a91804219a22d590201ce52233247695d91cd523ff2486984e1f9524d125de9bb720c5255a27279d712175262328af9d9422a92650284b9fec211f27af289e9d6f225b279d28509e0c2216277628bd9d0222ec266428cd9d97213b26f5274e9dc7204f25d426629ca62163253d275d9da5204025a226a29b4220e4245526979af01fce241a26c399721f9324c2252b99ae1e4b246b256c98191ee6230b25e197c71df7229b244997611d9d22742470962b1d36222f248496571d03220524e696911dd2219c235f97661d7b212e23f996f01c1821de221196601caf206d221895d01b6120ff214d94431b2520ab21c393c51ae91f4b213c93631a8d1f08219f92101a3c1fb9204992c919231f97200092cd19eb1e7120a591261a471f7b203391711aa41e16207291711aa41e16207291c71ad8190f1a0e06c71ad8190f1a0e06841f0823b623e095e824e52a292ceda25926202c1f2dafa48425b02bd92c1da4a025ce2bcf2c26a46126262c172dc2a435261c2c1a2da1a4ce25ff2b0f2d78a417260c2ce52c97a4e025f52b142d56a4a925452b822c39a4f424932a272c4fa34f24ef29652b15a2d021c9280d2a1aa0291e83252e270e9c4d1cb4230425a198691cc322a024ab97611ca8226a24eb96491b38222e244a95051b63224f24fd955b1a5e2243241f958a1b40220f24eb96dc1d8024ed25f0993e1fc1255b27919bde203d260928169d2b2135278228279d20228527a6284e9ea1219e27d2289c9da1215f279a28419d95213a277d281f9d8021d5263328f59cd821fe2675285c9de5205d262628699c40207425b1261f9bca2003266927df9b7c205c25b8263a9b1820c0240426359a9a1f6d24c625a399361f3c2493251f99d41e24248125a198711eca230a254498181e35238524ae979f1d86223624e796321dfa219f236296951c5921dc227b953d1c0b21a322ef94091ce92082229294d21bc8204a224e94f81b9c2012226394ee1b7120df217e94271c6720bb21b594321c3f208121c194971bdd1f1d212e947d1a4d1fc120ba92dc19fa1ea12013926119961e9a2068913a19df1df41f9690e8196e1df61e5f91e8196e1df61e5f9100001a1d941e000000001a1d941e00005b233c29712ad8a0b424bd2a242ca4a21525052b5b2c56a34e253b2b9a2ca9a366255e2b9d2c07a47225672ba12c10a48a25922bac2c22a49525952bbe2c2aa47125742bbd2cf1a35c25682b9d2cbda35f25342b702caba31325f82a4b2c16a3b5248d2a082c93a22324e129492bd7a1b2238428b7297fa1062116276428889ec81fee256427a09c281e92250227069b571d5625ee26d699ce1d30259e26709adb1d1a25b126369a7b1f64250627269c6420ee255827039df82071263128bf9dc121a727dd28339ecb235227e42882a07622962725292a9fbe233627c5283ba05a22da264f28569e44222727e3283f9e1a246827c22806a02d22e5268a28dd9d4721ac251927d89c9520d9252327479c4f20352594265b9bc01fdf243726ff993b1f6f2498252299f51e21246b25d498bb1e16243f259098471e8a23c3244198251e072371242b98da1dd0225a24bf97841d8d2232242197351d16220d249096cc1c91216923e595871c1a21d0226b95781ce8209d223495971bad2095224d94aa1b6420fc215794911b3c208e212a94d01b362077214d942d1c3620562198941c1c1c203e21a794ef1bf71f22217e94851bc01ff5204294a51a4f1fd1205093ec1a7a1e2c208492aa19681eb1203f90aa19681eb1203f900000751d391f00000000751d391f00002d23f728162ac8a06324952a0e2c31a2f524ae2a272c13a331250f2b5d2c69a32425122b682c81a30b25182b6b2c1fa34b251c2b822ccfa3fd243e2b972c49a33325242b792c82a38325fa2a592cdfa30725c22a3d2c19a3b9255b2ae62b39a4a624202ab02b6aa24c2479290d2bdda1ed232429552a57a12b23bb28d729b8a036225928942923a0f52116283429a69f3021bd2701296a9e4f216d27c328a69efd207d27c628029e79217727b828829e5e217c27c9281f9e8e218927c828129ed6218027be28499ed7218027be28339ec4215c27b728069e7f210d279b28919d4d21e2266e28f39ca021dd2654286e9d2521ab263d28e29c2a2185261f28fc9cff205c261128a99c6520932559271a9c3f203925a826629b4d20f8246f26119b1b20a3241426399a162048248725529a521fc023fc245199d31e7d23d824d9980e1e2223a3243498da1dd7227424bf97721d8c224524dd96681d13220d24a4963b1d6e217a23ec95661d372162234996d51ce22025232a95be1ca22066223995a31c8320e82141958a1c5620ca21da94621c24206a21af94b41b781fe620be934e1b3f1fbe205793381bea1e942006934b1b411fa020cc93d71aca1e732018937b1ae41da21f1a92241a261e3c209591241a261e3c2095910000191d091f00000000191d091f0000ab22c928df291fa00d24f429542b87a16324192a872b0da28324542add2b39a28124542aec2b5ca265245e2aed2b11a2c3246a2a032cb9a27a246e2ae92b52a28a24422ad02b43a2a4243a2aa42b54a25224ee296b2bd2a13324b0291a2ba9a12b247529d22a8ea103245729b62a47a1f822fe28d62a6ba0d222ef287d2a6fa06923ab28082ac2a0dd22a8281a2a5aa038228c28462ac99f41229328f329bc9f4c225d28ad29af9f512249285e29689f822223281e29879fea2129286029a79e3a211f287329b69dd621de27f128319ea0219127b328e19d30211c277728429d2c21ce262b28d39c0e2194262d28cc9cc320792610284b9c4d215b260e28dd9cac203126cf27109c81205e25b826d59be01fd3246026989a212096243026429af21f7724bb25c599641f152432254099421e8723d1243e98eb1d122390247697c51dbe2268244597a61d7a224c241f97851d0a220c24f596a21d6f214d237697231d432123237a96a41c1b2109236795331cd3208d22c294ac1b7720f1211a944d1b3b207721ce935b1b07203921dd934d1ba21fe62092939b1b521fb320e3932c1b0c1f8e203593981ad11e7d20a092ed198f1e6420f491021a8e1e7d200a922519e91d8c21b78f151a251e15205691151a251e1520569100006417381a000000006417381a00001e213e278328989db823ab29ef2a05a1c4239829f12a3ca1ba2395290a2b35a10e24c729392b77a11824dd29392b64a13f24de29412beea14024f5293b2b00a29b23b429552b4fa1e4224e293f2bb3a03c247929d42ab5a1c7234429af2a3ea1c52304298d2a0da1e82202297a2a45a0ce23c9283d2ae3a0fc22df28fb2943a0022493289129f5a010238328912933a0bf216328ca29d49e522238285c291b9ffd2230280d2927a0a321fc2725296e9eea21a327d928bf9eec217227ca28619ea5215e27b928fd9dba2136277328b69d8921e3264628859d01215f260628d49cb3202726a527769ceb20db254627839c9d20e1255127289c78209f250b27ea9b4e20262588267c9bbb1f8c24cf257a9ade1e302474255199561f382489255399201f41249825f2980c1f10249225e498851f39239d243899cc1faa22442489995d1fb5224b24fe98731e84222d2410989b1d1922cb23e396df1c7121f422ac95ab1c4121bb224a95ae1c2c21b9224d95a31c02219a2241957f1cc920762286954e1c95205e2204952c1c612033229794d01b1f20f2212d943d1bc71f8a214693c61a531f1e216092491afe1ed1201e92431ae21e89201792c719991e4c2070919419161eb51f8a90ae19fd1d741fca8fae19fd1d741fca8f00008b1a2a1c000000008b1a2a1c00006f1fbd252d27009c77228328ac2919a0692313294a2aefa01e233d298e2aafa0fd222229722aa7a0f1222429712a92a0bc22f728302a7ca047230129412ae7a04223fd283a2ad5a0ff22f9283e2a70a0d222de28652a53a08c23fb28382aaaa00524bd28102a08a107248f289929b9a0f2223728522921a04a23f427b7280ba0292278279d28209f2c2272278028d79e9521182765281a9e3c21d2263b288e9d8521e6265c28f29d492104272e289b9d9c21d1263628c69daa207d261028a79c8e20eb258327659c6a207125f326309c1a203525ac26a79b3220fe247926b39b4220ca243626ad9b3b20f1247226a19be81fcc244826df9abf1f0e2413251e9aaa1fb523b124cf994d1f1f241a25a699f31ed42303252899c41e8623f724b298cd1e6f23d6248198b31e3223d624a6983d1edd2281240898641ec7226524d9971f1e9f2238248497d81d4a22fa23fe966e1dd3217a237f960e1d682103239195971c1c21b422e7946e1ce4207b229894371cae2040225f94e11b77200a22eb939f1b4220cf21a9934e1b182098211b93571b002071212493711bef1f4c213e933d1bb01f21210b93b91a4a1f0b215392531a031fe620f491f719ba1ec0206d913b1a9a1e7e200f93511a7b1e27205791511a7b1e272057910000a9198e1b00000000a9198e1b00004b1fa7251827bd9b0222612897296e9f68230a29512ab2a037233629a42a93a033232529b62aaea0d722f9287e2a72a07722da28262a19a0ec22e828202a80a0a322ad28fa2935a06e22ae28f32914a0b322b828ed2932a05f226b28a129929fe92117284f29d69ee121f2272329b49ef3217327d728e29e3c222a27a9284f9f5222bf267328ea9fc022972654281ea017237b2648288da09522422637289d9fed21f725ec27629e6c215925fb26949df82021256526cb9c202122256026dd9cd020e82413262f9caa20f2243526349c9720f8242b26109c6d20f0242a260f9c7e20f9244526d09b6f20dd242f266d9b5b20c4242226289bf01f6424d025659ada1e062456253199d81ea9230d253099041e0a2391242c983b1ebd224b243998ec1d8b2206247797c51d5222e62345979a1d3922e623e296781d0c22de235f964f1dd721b7230396101da8215f239295ee1c642106236d95b61c2c21ab2209955b1cd8203e22a8940a1c8220d9213094d51b4720902110949b1b2e206321e3936f1b19204b217993151be41f23211f93d61a9e1ff6201793d61a6f1fd020de92b81a2e1fae20c1927a1adf1e86208392591abd1e73206192111a7e1e24201992b519251e9a1fd390241ac21d4e1ffa91241ac21d4e1ffa910000991a3f1c00000000991a3f1c0000d820892794285f9de22155285929fe9ee4214a285129009f1d227d28a129449f8922a928d829fa9fcf22d128fa291aa09722bc28112af09f7122b428eb29a79fa0229128b129c59f822285289c296d9f832250284229889f08221228f228c99eb4219027ab283c9e822148277d28d89d7d2126276328bc9d6f21c5262d28819d0c215f26da27f49cc620ae251f27af9cac204b2554265c9cb4206125c6262a9c7f2078252327f79b13200e254d27169b662011256a26829b8520db241126b79bf81fb724fd25ad9a1c208d24aa25e29a881f5d247c25f2993e1f0d241825b899381fb123c7249599f01ebb23de245e994d1f9223ae24a699051f132398245299991ef522cb24e598791e0123a924b298a11e02238d24d098b61ee4228424a898451eb6226924e7971d1e8c224f248297e11d53223b240997b91d17223324aa96951ddc21152480969a1da621d823e2969a1d65218b23e2961e1d372157237895e31c1121d5226195881cd5204322d894d41b6f20e9210f941c1b14208e215f93031bb61f50214593e81a8b1f29212993ae1a4b1f0921b792471afe1ec6201c92ec198e1e6f20c4919919451e26207291ad19381e0e208691c919061edc1fa191181a291ee41ff5901f1afe1db11ffb901f1afe1db11ffb900000ca1a231c00000000ca1a231c0000a0204e276f28779c86210728f728099e9b2138284a29209e20228d28b529e49e1c228a28ca29df9e082276289329c99eea215d2868298f9ecd21462842296e9e3c223d281329d09e1b222c2814297a9e09220e2813291d9ee02113280829c49dcd218e279628819d1c21fe264b28b09cc3209826f827379c65203a268a27a49b9320bc25d626aa9b6120812580260e9be81f7625bc263e9ab21f1c254426f4993020ab247625599acc1e9924a7250a99d11e51243a250f99c51e32240325ea98b61f0a24b9249999481f382424252b99091f4d248225fe982e1f41245f25fc98761f202417252d99121fb423d024e9988f1e3323a8247298901e0123742473985f1ea8222c245298501e7d221c244898201e702215240e985c1e6422322436985c1e482228241c98961e302226244198f61e2f222224d498ab1eee21ed231998061ea12158233597ad1d5321de226d962e1d1721a8228995e51cce207c223b958a1c9f204222da94491c6f200c229594d21b2520d0212e947a1be21f9f21c0932a1b911f742133930d1b801f4521dc921e1b631f1b21ed923f1b3e1fe8200d93cb1ae91eae209d921a1a9b1e7a20f091231a711e5820f991b319281e15205d91f4189a1d781f58905d19ee1c391eb48f5d19ee1c391eb48f00000000000000000000ca1a231c0000a0204e276f28779c86210728f728099e9b2138284a29209e20228d28b529e49e1c228a28ca29df9e082276289329c99eea215d2868298f9ecd21462842296e9e3c223d281329d09e1b222c2814297a9e09220e2813291d9ee02113280829c49dcd218e279628819d1c21fe264b28b09cc3209826f827379c65203a268a27a49b9320bc25d626aa9b6120812580260e9be81f7625bc263e9ab21f1c254426f4993020ab247625599acc1e9924a7250a99d11e51243a250f99c51e32240325ea98b61f0a24b9249999481f382424252b99091f4d248225fe982e1f41245f25fc98761f202417252d99121fb423d024e9988f1e3323a8247298901e0123742473985f1ea8222c245298501e7d221c244898201e702215240e985c1e6422322436985c1e482228241c98961e302226244198f61e2f222224d498ab1eee21ed231998061ea12158233597ad1d5321de226d962e1d1721a8228995e51cce207c223b958a1c9f204222da94491c6f200c229594d21b2520d0212e947a1be21f9f21c0932a1b911f742133930d1b801f4521dc921e1b631f1b21ed923f1b3e1fe8200d93cb1ae91eae209d921a1a9b1e7a20f091231a711e5820f991b319281e15205d91f4189a1d781f58905d19ee1c391eb48f00000000000000000000000000000000bf0d0c1e2f20a882b82246275e2842a06625cd29ea2aa0a33526d829582b7ba4ae25e329802b25a48e25022a6f2b30a40a26602a992b99a40026252a4e2bc3a4a625002a252b7ca46325f629342b30a4da24cf29e22a29a38e24b029d52acba241256829992a95a34c242129472adda13f224a28e82836a035243629a82956a11826152c102d53a0fc23a5290d2bdc9525204c253126c28ce11a9c20fe22cd8e2d213c280b2a5b9a202ce43256342fa282299030c731e99ff7272f2a8a29eda2e5261a28c427aaa1a324a527222854a0c9243a29ab29089eab23a42a2f2c7c9a9422f729af2b769c1d24552824298c9f85214b26fe279f9c441ea924f7250d99701c472336250297451d2023e02429982c1df3228524d797091d3e23ae24d496281d0e23802428978b1c57221724df956a1c26220424fc95791c0222b023ec95d51ce9219c236596c21ca0216d2326968e1c5f215723e295261c0321f0221895b51bb02064229d94401b5b20c6215694c41a20207121aa938f1a0c2041213993d81aff1f16215093721ab01fe0207b92171a6a1fa8201f92bb19301f992037917d190d1f8920d190b519e51e7520d3909919991e492060905e19521e18200690c019b31e07207f901119c91d8f1e4990c319c31e2c203d910000000000000000bf0d0c1e2f20a882bf0d0c1e2f20a882b82246275e2842a06625cd29ea2aa0a33526d829582b7ba4ae25e329802b25a48e25022a6f2b30a40a26602a992b99a40026252a4e2bc3a4a625002a252b7ca46325f629342b30a4da24cf29e22a29a38e24b029d52acba241256829992a95a34c242129472adda13f224a28e82836a035243629a82956a11826152c102d53a0fc23a5290d2bdc9525204c253126c28ce11a9c20fe22cd8e2d213c280b2a5b9a202ce43256342fa282299030c731e99ff7272f2a8a29eda2e5261a28c427aaa1a324a527222854a0c9243a29ab29089eab23a42a2f2c7c9a9422f729af2b769c1d24552824298c9f85214b26fe279f9c441ea924f7250d99701c472336250297451d2023e02429982c1df3228524d797091d3e23ae24d496281d0e23802428978b1c57221724df956a1c26220424fc95791c0222b023ec95d51ce9219c236596c21ca0216d2326968e1c5f215723e295261c0321f0221895b51bb02064229d94401b5b20c6215694c41a20207121aa938f1a0c2041213993d81aff1f16215093721ab01fe0207b92171a6a1fa8201f92bb19301f992037917d190d1f8920d190b519e51e7520d3909919991e492060905e19521e18200690c019b31e07207f901119c91d8f1e4990c319c31e2c203d91c319c31e2c203d91e602381b311d7380e602381b311d7380aa22fc27f32855a0e925462a632b81a49d26f92a1f2c83a53a26b12aea2b0aa5cc25e62a332ceda4ba26f12a192c72a59526112b442cdaa522260d2b312c1da52f263e2b5f2c28a59626192b4d2c63a5fb256f2abd2bb2a47d251d2a662b39a40a25b729e52ac1a3072406291c2aa0a1a921fe27e1285d9e5920b3261e28c998161ffe254b270293141e2a26b527d9906c1ed9265928a395f421c0293e2b229c9324cc2c192e9e9d8b240e2c062df99bdf22d728e629e79ab82496282c29e89fa422b526ec274e9ea4209a260e29bc9a402046260328e699a120ce263d28c19b9820d1263c28249c3b204326d727159c2f204c256a26f19b041f4725da26c4990e1f8b247c25e9991a1e0124ff244e99ab1d8f23eb247a98801dc523eb244198a21d052375240098611d94222724fb97d91dc52230246f98b31d7f2219240c98fb1c3d22e023c196b01cd82154230e96371c4b21e2222d95641bf52095222f943c1be520562219947e1baf2001225d94751b8420c1213994181b54208b219593c51a332061210593731a1d205a214792dd1a2e205821ae92481b3b2036219f92e51a0720fc206491cf1ada1ff020ac905d1a7c1fbc209290dd19b11e3b206590b017841c741d3c8f8f18bf1dec1e95908f18bf1dec1e9590e4036d1d521d9380e4036d1d521d93800c213a2673275b9db525512a672b4da40727c42b982cdca50927c62ba52c09a67926ae2baa2c8ca5bf272c2cef2c85a64727222c0d2d79a6da26ed2bb62cb6a5e226c42b9b2cbda5b326d02bc82c7aa555266f2b852c20a5d925752ad72b98a4862447295c2ad2a27220ee254327919d7b1d082360249798db1c61239e249294f41c3a2434251c93321ddf241126ca93671e9725ed267096511fae27cc289c98ae208828a429da986f2171287829279a0a2159278228089af721fb261328ff9cf5202a26b227dd9cc41f27258727009b931fa824ea25119b911faa24af25c99b842070257c26939c6c1fcf256d27ed9aaf1f492578268f9af91e7325de26f399301f0e25b2265d9aa51fc824fd25c49aa41fc9240926a59a361e7324c0250199521ee923e724b0987a1d04237024f3970a1d4e220324ad96e51cf22149232b96b11cc2212923c4958c1c7f210b2305963d1c28217a223495391cfb2005220e95261cb120b921d494f61b7020a721a3942e1c7020b021bc94aa1c8b2085219495701d3a20372107976b1c0120e720b994851a661fb2205892191a491faa20f690251a701fb82037906f1abf1ffe2035906f1ad11f1a216a90bb19061f8f204c90ec18ea1d641f01906919531ec81fbf906919531ec81fbf90ca238f25872712a0ca238f25872712a094195e1d47174091fd220e263e271ba20926932ba12c52a5f526fe2bb42cdaa57227362c052d62a6a827432c0c2d72a61627f12be52c05a64125b82a1a2c80a319257c278d27969e2325382ab92b94a343267b2b872ceca4dd24e329202ba4a34521eb250f275b9fb41d5222e0230d99e51be5219a237994641c162287234694981b3122c123e7926d1c0e2361247c93211d34243f258094fb1d03252b267095891ead25f7265c96b61fc525ea26c0972420ef25432708986420a225d326f4991a20fc242626069c252082247825bd9ba5208724b825149d2b21b5242226bb9da520222567268e9c472076250c27449c5920d0253b270e9c1020c9257627739bc41f1d257826e19ac61f9024f025819bb61ee4244c26d699441fcd243026bd999d1fe82402268799a11db723d72416986f1d1e239224b797671de7226d245497011d59222824a096f91c3a2202244596ae1cd8219723e6958d1c8f212e23bc95491c25218d226695cc1bce203222aa944d1b9220f8217c94261b68209521df939d1a18202c21dc928e1ad61ffc206192851a871fbe2058924f1a181f9220f0910a1a0c1fa9202590ef19291fb320628f8f1aba1fe520eb908d1a0220312154917419041f4d20a891111c161f46206395111c161f46206395000000001710000000000000171000000000000000000000731f7b22ab23da9de225ea2a372cffa49d27302cfa2c49a6c527462c332db9a6cf27872c672d83a678274b2c342d39a69a25052b5e2ce9a3d924a327a027319fe825e22a352c44a44926c32b9b2ce3a45522b127772893a0941ec323c4241e9c791ba61d231f4398cd190f1f6c20de93c61a712076212892081ac020152219916c19f5204c223d90e0134320e221358c9a18bb1c1b1ea994231b0a1d7f1d5b989d1b992131236795c11d2024f2249a95571e6f245725669808203b241425e99b4d1e7e24a825fb992c204c243c255c9c861e7924d625829afc1fb724e2254d9c1920b524d625599c5a2049256626fc9b41202725aa263e9c521f8524ce26f39a601fa2240f261f9b351fdf241126b199451fd224fc25a099e61e202438251e99351e8023d4249b984e1ed823f924ae983a1ea023f1249e98c41d4523b92400986d1de82268245c97241d2722b923ce96e01c6021de222596c71c4221ae22b7959c1c1c2162225e95f01bb72016227f94a41ba020cd213494e31a60207b212493b91a43206221c292a41a232033217692761a0120fe20e091571aca1fd720f590351a881fa5201090a219181f7e205e8fa1198b1e4220018f1f1a7a1f9f205f913a19791fcd2041923a19791fcd20419200000000af0f000000000000af0f000000000000000000001420ab2227248a9e0c267b2ba62c49a56a250a2b412c4ca31f25d9276e2874a08626982b712c80a45427252c042d2ba6a825162b552c0aa43324f12633276d9dbb25642ae52b52a4f124022a102bd8a3291f9a2416256d9ca31a6b1f0121ef968319421c481db297c518e41dbe1f9f92e916cd1e84202f8d3819e21e342014904616a41e8120e78c2615001dc91eaf8c15142619b41a5d8ca10ca713b617bb82330dc9122615938147178e19311a6988961b64217e22de935b1d86237224d498ed1d57238a246f99d51e95230c25ec9aa91f6224c125e29bc51e8b248f26669bb11f7024cd25449c6d1f06251e26ee9a762025257326609c3020b9254727ae9b6b1fcb24bb26739af21f9624e725a89a7d202b254a263b9ba421a824da25fe9c16203f245a25959a571f392464259099111fcc23e524e798021edc225d24f497431d67220f242297141d1422c7236796c81cd4216f23e095851c5f21c0228e95131cf720592201956f1bb82028229094721ba820e22193946e1b7120a0217294781b5c20af213b94181c58206a21a394f61b1b20032121945c1bcc1fe5202993ff1a901fbb2024928f1a721f9a20c291061aeb1e53207a91cc180f1e861f808f5419541eb41f81905419541eb41f8190000000000611000000000000061100000000000000000000761fc4219e22eb9d5e24d729492b00a307259e2ae22bb2a20f2511288b28a4a0b226752b622c9fa49b276f2c582d47a6dc25592b8a2c3ba4952296252e26419cb925642acc2b45a424237028282945a1cc1b5921cc2103985818121d291f4693ca175c1aae1be1942d15fe1ba21d088ef911211cca1d4a867618f41b1c1c218cc50e711c631ec883800f4c1b181d95868611ef16be18f68aef10e512ea1424863a0a8d117f14f280ba15bf18ff184a83aa1a65205b21ff901d1dc0220a240a98bb1cb623d524ec97591f76239324e99b4d1f3c246d250c9c981fbe240c26839c1520d8243526769c591fec2412264f9c9818ce20b6220097631c2020ab21fc99ad1e6524b825a89aed1f3825aa26839a59205a259126979a1120fa243826e799941fa124db25a099481f73249a2567991b1f392455250c99c31ef723fc24cc983e1e8223c6243c987e1d7222372446976b1d3622ee230097771d0e228623e396d31c8221f222c695071cf3205e22d294921bcf20292268949c1bb720fb214f94591b7a20af210b94c91a28204c214193791aef1f24218292421a711fe1201792341a3b1fa620d791d619111f93207e91291ad01ede2035911319e51d54203c928818d81d0f20168f8818d81d0f20168f0000000022110000000000002211000000000000000000001c1f8221502203960a258b2a082c32a36525ea2a302c19a35324ee26e227f79e5e269a2b812c65a4a427822c6c2d5fa6fd25892bb22c53a4a6210e25ae25389ae925dc2a122c75a42c237a2830295aa12c1ac41fc41f27969316f31ae81c31911f1572185219be92d8128f1aa31cc08bc110a51a891cb3844b16cd19261a6c89d1132e1a511c5d880000d719e11c0000df1087158d173a8b4010ac128414bf84560dff0d141147816814d615ed15a8833a18ac1efc1f9c8e161cc0209c210f96131d75239524b097661e69249e25139a642030245a25389dec1e8824e025e69b0a1f75249625ce9bc81e33242825849b1914f71ace1c2d92fc19f91c281f39984f1f10259626869b6e2005253927d89b3c2011258626d39a0f203025af26e599071f9a24ec251a99321ee023fb247f98fe1d15236e242898291ed32244245f98c61d89223b24d597c61d4622052401987d1d1722ca234497801d0522d3237697291dd2219723d596f21c7921f1228c964a1ce1205b222295891b9020e8216394ab1b6f2090215894411b23204921fc93611b12203021e393711a771fcd207a92061aeb1e6a207a916119ca1e59201091611a4c1fa7206591141b341faa20e3924f193f1ed11f2a914f193f1ed11f2a91000000008511000000000000851100000000000000000000381ef520e1210d963a26ca2bbf2c0aa5ca25522b6e2ccea3b523fa25da26d79d3b267d2b792c40a48227962c862d24a6cf25bc2bd22c26a41c21d2245825cf987c257e2ac92b2ea4df225128ff2820a1311904202520c394d116411cd61d8b8d2415b0187a193c860314ba1a951c6d87f311d31a841ce2852717b7190b1a40897a10da195c1c00855c0762190f1cbc8154115d1509171f8c230fe21011138783a009190f301100000b153216fc168a83ff164b1e13203e8d261b722016218895b51bf72173231696131e5422c423c4993c1d19237724ce99941d8d223124469a7d1e07240d25fd9aef1d6d24a1257f98ac12a81bc11cc58b53185d1ccc1d4795211fc2240826ff9aad20ad250f27fb9b08206425bb26e29a572027255526fe9a0c20d224ef25649add1e2a245225e098541ee7230b254a98801ec523d62483983c1e2d23b0243a98911d7a224c2432976c1d0b22fb232d97f61cfe2186234096db1cc02158231e96791c722112237f95691c5521cc224695f91bf9207722a5947e1ba72009223e941a1b52207f210594b91a11202c216693971ad71f05210b93181a531fc8208492181a181f8c20b69241194e1e13209d91b317c61c151ebd8fdb16d71c081ee48edb16d71c081ee48e470c000004120000470c00000412000000000000000000002b1eda20fd2133965325372b862c2fa41d25682ac82bbba27923df25c926e79d1c26952b832c1ea47f27a22c9d2d20a6c525e22be12c12a41f21cd244c25fc985d25752abc2b00a421223e28e92885a0591bb5217a22549773178b1c641e3f8f0615621845195f87c5123219451bb28698117319ed1ae3859b16bb19ed19d9888f10d91aea1ccc845c12f219e61bfc892e129714ab15428e020e0611091266825f0d62131e141680cc15251706181284ec15a71e6720328df419bf1f9a20b3942b1c0e2124223f973e1def2260243a99d41e10245225c99b941e902350264b9b5a1f5324be25229c171fcc24fb250d9a6414321c8f1d9f88c0184d1b201d9b8d5a1f4c24d425289a22201325c827529b36205725aa26ec9a9a1f70249f25e199141f49245e257a99eb1e482467253e99361f4e2464255a99121f1224fc240599e91eb923dd24cb98fd1d1f23c424bd97851d992244242297751d37220a243a97ff1c0c22d6237596cd1cd22182230d96431c6a212d23f694c01be82076226494951bbb20f9212c94a31b77208f213494fd1a30204d21b293eb1af91f4721d693021ba21f4b21b7939119c51fd5216b912d1b3f20d621ac93801a6120b3211e9245195d1d911ef69045195d1d911ef69000000000d90f000000000000d90f00000000000000000000ea1e73219922ba96b5259d2bb72c70a43525182b5b2cb0a24424d026e327779e7226d52bb02c3ea4d526712ccc2d88a563252f2b952c6fa33f21f8245a2570991625472aa92baba3db2364296e2adca1a71c89232a24299992188e1d841fc39170148f18bc1983860c140a1afd1bf185fe0f371a121c30831b16871980197b88d213d21ac51c1e88bf0f7b1b491dcf85f511f4172e18cc897c10721303152684330ee012a0147c815d1432169517f381ba164e1e18201e8e081b922071218e952b1c9c2224241e97961d9723d0249299ca1ec92318256c9b6b1f3825b7260d9c631fb1240a26099c2d1e5a246c25e1989b12991b211d60877a19151d841e778ef11ed224482627992c20d3244b26b99a3720292575260f9bae1fcb24e825f199ea1e4b244f253d99cb1e17241e25ee98f91e062410252c99311e8a2301253398041e3223ee24c6977e1dd122a6241997661d63222b24a196d51cb2214b238d962b1cf020bf22fd94201ce620982211950c1cbf204722f894171c9020212228958d1c92200722bc95581d6120d2216a97571c252050215595b41a841ff320ce93d31aa41ffa20bb93de1a901fc8208f93a71b891f8e20f093011a311f912044913f1a0e1f412047913f1a0e1f41204791e30c000042100000e30c0000421000000000000000000000f41ea421bf22e097fc24d82a462c6fa3a6248e2af32baca12824ff260328f69e5225cf2a1c2c00a39626262c122df7a45025372b812c01a4112313268e261a9bf524502ab22b3ca35624082a462b9ca2cf1eec24b2256d9c2b19a11e6020ae92a215b718ec194a8a3c12d8186c1b14880c12e418281ac1867c15c118f3181f8a5a0e8019c81b2b85d711be18151adf89d9109e1454155689d90c980f0314b582ab0c5c1137121e81ef15cc178e1870860618961fea204d90841b5e2152224b96201c1c22a4239197701dcd2265248299721d4224b225f3990f2010252c26a19c2e20de257327a39c4f1eb4240126fc987311041c661dc88650194b1c4b1ef88f5b1e06242526399933200b257826c49a562034255c26939a1920f4243026f399561fb924fe2571996f1f76249f256599271f0a2469251499ae1eba23a0258798941e922350259098df1d1c232f25c697251ecc22b024f197ea1d4c221924d5978a1df621b4232997f01c922135236196771c5421e22257952b1c0f218122db947b1b912013223d94c51a2520c421ab93221b3020a3210a94cc1aeb1f4f21ea93651abe1f3521d592261a7c1fef2093924a1aac1f022185923a19f51e5820eb917019001e671f6c907019001e671f6c9072000000bb08000072000000bb0800000000000000000000911f2c2274232a98c724a62a192c0da35524282a372b5ba10a24cc26bb27c49eb324fd292c2bf6a14125f62a5e2ceba33d24312ace2b94a11324fc267127709eb424fd29602b90a2a324812adf2bfea2132135276028549fe61ce0223d2432999f18851b6a1c3a8fdb144d1cef1d428c2f13251c3b1d4e8a6f17921a9d1a198d8c12c71b291d54892d0ec91b4e1d6886bd1290174918088c4c110c145015ee86e9095b139815158143132b18a819b886440f101c381e6086e719961d001f2d91811a3721c222ee94851c642225244997dd1bf121b1239696901c4c21be220b96e11ee3231c25a699e71de5232c25da98351cb5215623a194521dc12128232d952f1f7224ac2537994a204e25ab26a49ab4207b25cc26949b4f201b257926879aeb1fa5240426209aac1f64249825f099062054247525199a3c20092432258d9a0b1f6623c0240099c51dd2225824a4972b1d2122fb235996b31c962175237995921c8021272378953e1c1a21dc221495531cf32064224f95231cc120eb21d194831b5a206b2141947e1b1b201b213e94061bb81f0021bb93fe1a371faa20b3934c1a751e1320bb92c919091ec61f5f923e19ed1d08201a91cb18aa1d551f6e919118721dc71e6e8f9118721dc71e6e8f39090000530e000039090000530e000000000000000000001b1fb921ec22d29766244b2ad02b48a226241a2a442beea01024f926cd27ef9e8424d129052ba8a1b924902a252cf8a2c823c029412b0fa16c242b278b27449f6d24ba29382bd4a14a24022a632b77a2f8219b28b4298ca09d1ec4240326169c381bfb1d461e08903e180b1f9e20379125163c1ef51f2d8e171ae21c071d2e90c513a81c961e278c2f11b91b0d1d328b4213f818251ad98d3f13dc144417a187b00318126b160000ae12b515d6189c86910f481a451d1f87941b071e7b1ea692f91bd121a2242b96611ea92364250e9ad81b0523712512962f1ec0217623329801208c24ad259a9b36203f25a926ba9b531f2025b9265f9ae71db124e325a998cc1d6922d723dd97a91e4224ae258498f11fc524fa25259a0a20b924e2251f9a411f622494257f99e71e25243c250399c61ed223ff24cf98eb1d5723b3241b98581dc022a0241397c71c1c22ad2405964b1de82104240297171d2e21c3226a96bf1cfe20e5228795a71cf920e422b795151caf203c22e294f01b6920c521e094db1b5e209a219394611b3f207d211094901b40206f212a94d81af31f1c2150937e1ab61ff22086921b1a381fa320f1919219bb1e61203e918b19b71e5220ec91b01bd61fd6203b94b01bd61fd6203b9494030000690f000094030000690f00000000000000000000f41ddd21fa22cb95dd21b828f129109ffd223c29302a19a05024c42748285d9f9324cd29ef2a95a19f24892a1e2c99a23923a829252b95a01224c2266227b09e49232329a92a9fa06224aa29032b30a256236b29c92a5ba1ba212a2815290ba0012012269427349dcb1d70246925e39ab81cb42214247a98721bab2122233d967919802093217f94b615341e1520b1907914401af91beb8f2d13831553183c88fe0c9c1059140981bb175a19ad19ac89c6192e21e422d5938f1d9823c724cf993a1f7224bd252e9c4f1eeb24c526979abc1d7024c025b799191e7e21cc227e977b20662596261c9ca720f7254c27459c8c20cb253227079caa1ff0246e26cf99361d192138223c95731fde24df254a9953204c255a261b9b6620db24ff25179bc21f8e24c425209a0d1f59248f257599691e1c244525a798e71d8623e22419989b1de72297246c97491d532240242b972a1dd721fe23ad96731df8210b243897331daa216b23b896e31c5521e7222896961ce5205f22a295b41b4e20d3217c94061b15206721f493e21ae61f34219393f61ab41ff62071931e1a1b1f92208a92c219f91e8120f991cf19ed1e622006924719601e322022917e19201fdd202b91fb19fb1e6d200f91fb19fb1e6d200f9100000000470f000000000000470f00005b18d01cf51b648a7421ab27f228d49e19247b29002bc9a15922d828f729719f7a241b288228c89f17249029bc2acba00524e929872bada13f2229298c2ab89f602452270e28319f88235029112b98a04224dc295f2be0a1c7236229c92a9da189229b28b5299da0ec203c277b28f39eb11fc6253127d19c211d9024bb25039a491d7e22ea238699781a9a2101233e965b166020cf21ef918715c61c521e5691b2155618a619178cfb165c18b918588c681830204c214192561cd4223f242f989f1ef92330253c9ba61ec9241c26299bac1f1725a526319c681f6a2526271b9ccb2019259026649dcc206925f4262a9d8920a02555273c9c712003262928499c341f1325b0265899a81ab61ea620e792691f8e24bc2506998f208725c9267e9b2520e1242926489a391f52249c255c99131f322456252299ca1edd231825d298de1d0f23aa24f497861d42221f242397211d0522aa23a0961f1d632103239e966a1cfc2058226c953e1cc62024221495111c9b201c229b94e91b7c20d6215b94061c6b209c216e94d11b442089214d94731b2c206d211a94391bc91f0521f393791a141f98205593191ae51e6320b792361ac31e57200993d0196a1e562036923818351dcf1ef18f1b1b702099215e931b1b702099215e937310681caf1de5897310681caf1de5897e210628ec280e9f4b24de29122bffa19d24422a912ba9a2ba24532aca2bc0a2b8247a2a182cf7a2be24572a062c12a3c024562a0b2c29a3b3244a2a2a2cefa2b924562afa2be5a27d243b2ad42b7ba23824c4292c2b06a2ff2331297d2aa5a10f23ae28e52918a1a421d327eb28e09fa820e0266528209e1a1f1826b0279e9c3a1f272559265a9c1e1d6b248425159ab819d82272246e965819971fbf201295e015041b6a1cf78c091af71b931ce9906f1afe21fc23c694451dd2235b258199201f1e25f226109c541f0a2508283d9c152019257b26c09b0e20962539270b9c3b20c4256e27499ca9202d26b727059dbd21b4265228d09d3024e0259f2760a03624a124ca2589a0a32077250c27ea9b33200f258e26c49a831fa724d1250d9a161f1f241d255e99ed1d6323de2435984d1ea423d4247998e21d0a237724fa97ed1db32236241d98ef1da6222c2406986b1d492202240097d31c9b21bc233c96d31b16218823ae94f31be120b322c194e61b90202422b9949a1b582009224e948e1b4920bf210994bd1b5420a82123946b1b37208621ed93d61b392057213094d31b0220fa204e94b91bdd1fe2204094391bc61f012135940c1bf11f2521c1934419d01d0120f7915e1bfb1e762376925e1bfb1e76237692f8118e1cd01d3d8cf8118e1cd01d3d8cfc203a2767283e9e6d234b294c2a20a138247329a52af4a14624e329602b09a227243a2af92bffa10725802ae42b2da37724442a042c17a3e624062a302b3ba33b24c2292f2b2da28024a429042b5aa201245f29d52ab7a15625ec28fa29f5a3e723ae28062a85a1a5233928952975a118249627b928c7a10d21b826b828ba9ea82036262028c29d521fdb25b727689cd61e6f250d27029cce1e0c257826199c401fd92429265e9cc81ec3243726239cd41ede247c26019cb41f18258c26749c701f4325f8266c9c1f206c25e826819c0a20ab2562276a9c2920a8254b277b9cbe20bc250b271b9db320fa259f27229d3620f8259527109ca5206e25dc26699c6a20ba253428d19b65204e251d27399b142019256d26719a2b2009256c26fc9a3120b924f925389ade1f402472259599b61e6b23c22471986a1e2d2387243f981f1ec82254242698981d9c225f24c497441d78225f242497671de9212824a296a71d64214523f196cf1d332121231f98171de320d5229496d71caf203622f2956b1c5e20b6212695bd1c39205f21ab957a1d9d1ffd206d97681c421fc0202295401bf71e73201b94cc1be11e3b202b949d1c761e29202397821b711e312022944f19841d281fac91d919011f7420a092d919011f7420a092e8137d1cd21dbb8ce8137d1cd21dbb8cdd20e1263228f09de8220129fe298ca092230c291f2a39a178232129652a18a1cd223229ba2acda02a2442296e2ad0a1dd235029be2afda1cc236929a22aa1a1b2233d298f2a7fa106245929dc2a8ea1c3221229192baaa08c23e9283e2a16a1f8229e28eb29a5a0cc225f28952995a08a2217282f294ea006237d27b02804a12d21eb267028d09eda20712620284f9e8d201726bd27d89d4220dc255727449d5620c2255427169d821fd425a827959c2f20e8258327e79c5d20ef259d27e99cb820e2258a27289d5220d7257927839c9720bc254e27cc9c1820b6258e27479c4a20b8253d278d9c1c206125f8266d9c5a20ce240526339cf61fee2414278f9bc31f9b253327c09a3c1fa8241926d499e31f5e248c25ba990b209024c225849a6b1f322474258199a11ea323d324d098e01deb225b24f897361d4d2219249196061d0922ef232c96241df821c8237b967c1dc0217e23bc96611d75210523c896151d2f21ea223e96161cd320b2222795d01b7820eb21cc94a61b422083213594631b05202d2111947f1bdb1ffe202094e41ba31fc42058946c1c261fa2206f95b01bf71e79205b94f41ad31e6f20e0934a1a891e5f20ec92d819a51e6820ce92331a461fe0206d925d1a911e4220c9915d1a911e4220c991e9187a1422172283e9187a14221722835c1d7e2026203094f4209b27b628929d52230a291f2aa5a08523f928312af3a02f230129522ad8a0b9234929832a44a16f2317296c2a5ea15e22d428022a65a02620f4271f29cc9ca121b5241c25d09b59216a27c028819d382250287f290ba04f234728362994a056233f286529c4a0cd250b278d2848a4b7226727a8286ba0f0222b26e527ada0fe20be2551272c9e731ec4243e26d89a122020222a230a9a601fe02477265b9ba11e6a2518283e9b86208e252727179d5a2078250c27c19c33205225e326859c562020256626649ce91f3c258e26229c0320f3243526109ceb1fe8242526a49b4520d3241026d69b0820f5243a26659b711f6b246825799a821f65247c254a9a471e0c2471250f99921e5523bc2416991a1f4a2454256199631f302450253e99c91e98232425b6987d1e85225d244b980d1f4e221024e4982d204c22dc23769a9e1e4122ef237d988c1dd52181232b97fc1c7721fe22f795b21c4521d7227895cf1c3d21b8229a95a61cf9207e226995771cbd20542233957d1c96200c223a954f1c5a20e821be94031c2420bf216b94291bd81f5c21a7936c1a3a1f052111933d1a081fa9201193f419ab1e51208e92fa19811e2420d19124199e1d041f2a9195185a1d611e2b9095185a1d611e2b907c13c5114014ac017c13c5114014ac01df12b51a191c9b84bc1cfe20be210194d0208d26dd27079de9215b283c294e9f5022812891291aa0b0229828b02982a01a225c285f291da03d2118281b29e59e911d6f261c28e89927205d22ac22f795261f5e20f020d88ef81e632142228f94901a9822c724589465204623f523d698341cae2370253d967220ee234124be998a1e74240726cb99fd1da4244926119ae31c5424be2568980020d8229f234c99141f19247125279a8c1fbd244526c49b0520fb249126029c572017258b26659c892026258e26739c1b202525b426079c3f20fa244c26199cf01fc6241826689b242071248c25779bc11e6c24b025a8996d1cf1227624dd9549188f1c171d278e9d19e81bb81c588f4c1d202219245796461f2a2427254799521f122405256e99be1e7823ff249398e11d0f230525c9970e1e97222c24a297251e96221f248c97d11d61221624f6967b1d2122d623bb96281d982131235696c51c1a2199228e956c1cd0205222de94031c8b201e224a94ca1b6c20ef212a94af1b4720a221f893571b0f206c219c93441bf81f3e2112931d1bb11f1321ec92b91a961f0a218b92841a641fce205792631a2a1fac203792371aef1e83203f920e1ab11e6d20b391a419a61e6f2036922719591eec1f31902719591eec1f319052115910ea12da8052115910ea12da802f13401ac41ba6868c1cfd20e7216d945120022647275f9c0221b827cb28cb9d3c217a27b7284e9e7b20d9265328af9cf421e7256e26cc9c52204926e527959cb51eff25e9277a9a1b22de2569260b9cbd2014276e28a69c802155279028199e7821482779283d9eb92117275f289e9e6121d2263c28239e452184262d28ee9d34211e26e927af9d0d21a4253727479d942003259726f79bd82073247925429ab82082249125419cd82024243d25c19ceb20c123d724749d992017238424a89c032072221a242f991a2050238e24379a572029242725459b24205b247b25779b1e205f24a1254b9b192054248225ff9a8c1f0c242f25149a251eee2276241198b21dd721e022ba95401db3216a231d96291dfa21cd23ff96a51d3b22b1233098021e5422ba231398de1df521a423c597a31dee21932377977a1dcc217323e7960c1d74217823e195f11c6a214d239995d01c3621c6229b95731cdb2078220a95fd1b942017226594891b5620a02107949a1b1b205f21e2937d1b04202f21c493631be81f1321a993011b991ff0200a938f1a431fcb209792601a241fad2069924d1af11e7d205692751acf1e5f204992dc199c1e4d204392f2199b1e2c208c9259196e1ef71f8b91381a741ebc1f4291381a741ebc1f429187132b1bbb1c5d8a87132b1bbb1c5d8ac91fd6253227119c85210528e928a69e8521e227c728a69e64218127aa287e9e39217b27c028609e9f21cd27e728c59eb82113281a29e39ed92133283729f39e8521072809298f9e30218f27c428159e2b21262782280f9e1121b4265728c79d6a2012267628e59c9020ce25d2270f9dc220a3256b27339d26207825dc27679c0321812514273c9d6c20bd258c279f9cba204a25a826ca9caa20ff246426a79c3120f62467260c9c6820cd241b261d9c1820b224f125619b1a204f247e25eb9bbd1f12242c25f99a731fd323fb24989a831ea123e8247599a01e4323962456996a1e7c222224f698631ee1227f240c99d81e98230c258399c61ef522812575995b20df229224b69bae1eb0223f242b99841ef9227624ba98061f1f235d24e098521e93222b241598cb1d3622f8234d978e1dfe21bb230097931dec21c023d9963d1d67217b2370963f1d1f21a0239b95171d1e2138231796e51ce920e0228b956d1c9f2025220495d81b462088213194541b122055219a93e21aac1f23215c939a1a8b1f17214493b81a6e1fed206593af1a321fcf2024933f1ad01e89207a92a119551e4420a9915619211e0c2031918519281ee41f8c91f519531ef31ffc91321a881e0e201a945c19f11d6c1f8f915c19f11d6c1f8f912210f91a831cd3832210f91a831cd383841fac25f126229b19218a278e28a69d6821a2279f28ff9d9321f927fc282e9ece2125282929709eb721182818296d9e7b210b281029579e9f21df27e4286a9e5721b927d528029ece204127f528679da221dd2656286d9e3721dc2643289d9d2a21c52641287a9deb2087261828e79cc2204426d927979ccb200a266927799ca420d2252127429c8b20a725e026189c7b20cb251c27ef9b12207b25c126f39a2820dc24e925189b801fae24e125489adb1f67246125959a591f7c24a1250a9ae31e69248625a999911f1b242925199aa61fcd23d9240a9a761fb623c924c6993f1ff823ee247e998a1ea623dc24f598471ebe223a24c298fb1d51220e248998a01d3e22f5232c986b1d6522342486976b1dcf2275245897a41ee7224d249c98d71e9c222b248798001f80223024bf98771f2f221524409abf1ece21a923af98d11d7321fe22e397d11d0e21a02209982e1df3206a225c96f21cb2205722ea95261c6d203122b294ae1b4b20f5213a94ac1b1120a0217894e41bbf1f54219894cb1b661f3f214a94011b581f272143931c1b6a1f0f219a931b1bff1ea3209993431bcd1e8520fe93941a781e412073939719041e3e2083928519da1dd91f5f91f618071d631e24914018451c2e1d768f4018451c2e1d768f00000000000000002210f91a831cd383841fac25f126229b19218a278e28a69d6821a2279f28ff9d9321f927fc282e9ece2125282929709eb721182818296d9e7b210b281029579e9f21df27e4286a9e5721b927d528029ece204127f528679da221dd2656286d9e3721dc2643289d9d2a21c52641287a9deb2087261828e79cc2204426d927979ccb200a266927799ca420d2252127429c8b20a725e026189c7b20cb251c27ef9b12207b25c126f39a2820dc24e925189b801fae24e125489adb1f67246125959a591f7c24a1250a9ae31e69248625a999911f1b242925199aa61fcd23d9240a9a761fb623c924c6993f1ff823ee247e998a1ea623dc24f598471ebe223a24c298fb1d51220e248998a01d3e22f5232c986b1d6522342486976b1dcf2275245897a41ee7224d249c98d71e9c222b248798001f80223024bf98771f2f221524409abf1ece21a923af98d11d7321fe22e397d11d0e21a02209982e1df3206a225c96f21cb2205722ea95261c6d203122b294ae1b4b20f5213a94ac1b1120a0217894e41bbf1f54219894cb1b661f3f214a94011b581f272143931c1b6a1f0f219a931b1bff1ea3209993431bcd1e8520fe93941a781e412073939719041e3e2083928519da1dd91f5f91f618071d631e24914018451c2e1d768f00000000000000000000000000000000000000001b0c000045182c1c8e1d9093201cc12069213e98c817ee2113248094c61d5a217c216499561e5b212222d099851e53215322c699d0187021df23e094ce1c0320a11f2197401b701ee91e43958515d81b001a4f8f00006f187e1400000000b90e000000000000000000000000a71489174d15628aa0153e19a11b658cb50c961b2e1eba81a611111dc01f4381090c5219b619d68000000000000000006c181d1adf1e08966f1d0727eb28199ca70c1c266f28e789281ac820d420ed96611c901c731dae948d17ec1f1e212b9395199b208f21da94d416d51d361fe68cd6144b1d462018896b14eb1a051efb8e0000e414151c00008e134f176e1a9b8db414f817ba18618e1d15c2199d19c58eb109211b6c1cdc831a174c1d7f1daf8e9819aa1f0921df92411bb1205a22cd94de1c4421c422ea96451c62210d23cb959a1c4121c7223e96b31b0c21bb2219952a1cca202e22c795051c8c20a92153953d1b18204f21cb94481ad01f1e21b793d41ac11fe0204e940a1bd81fd8208c94061bc71fe1208a94641a591f8e2021946c19ad1e3020d5926b195b1ee31f4f926519191e701f6c912619881d211f30901a18361dd31e1a8dac18c51cb81d388d7418ca1d621fae8e16181b1d6a1ea0907d19f11d0c20eb920000000000000000000000001b0c0000000000001b0c000045182c1c8e1d9093201cc12069213e98c817ee2113248094c61d5a217c216499561e5b212222d099851e53215322c699d0187021df23e094ce1c0320a11f2197401b701ee91e43958515d81b001a4f8f00006f187e1400000000b90e000000000000000000000000a71489174d15628aa0153e19a11b658cb50c961b2e1eba81a611111dc01f4381090c5219b619d68000000000000000006c181d1adf1e08966f1d0727eb28199ca70c1c266f28e789281ac820d420ed96611c901c731dae948d17ec1f1e212b9395199b208f21da94d416d51d361fe68cd6144b1d462018896b14eb1a051efb8e0000e414151c00008e134f176e1a9b8db414f817ba18618e1d15c2199d19c58eb109211b6c1cdc831a174c1d7f1daf8e9819aa1f0921df92411bb1205a22cd94de1c4421c422ea96451c62210d23cb959a1c4121c7223e96b31b0c21bb2219952a1cca202e22c795051c8c20a92153953d1b18204f21cb94481ad01f1e21b793d41ac11fe0204e940a1bd81fd8208c94061bc71fe1208a94641a591f8e2021946c19ad1e3020d5926b195b1ee31f4f926519191e701f6c912619881d211f30901a18361dd31e1a8dac18c51cb81d388d7418ca1d621fae8e16181b1d6a1ea0907d19f11d0c20eb927d19f11d0c20eb929c0600002a0cc3809c0600002a0cc38016070416e8186281741df11f25202d96131db024e3258b999c1dbd209d20be946d18de1c081ca08b981fd520d5202e96ed1d872524270b9b821d6a2063202194e619cb1a7819d68d0017dc15af15088a6b11010f0000fa830c0fe0080000b08191090000000000006f0d1b0a00002181000000000000000000000000000000000000000000000000430a5e08a10b0000d00400004201ca80cc15981d2f1f5f94541e81261e28379c1c15e21dfa1f208f140fdc14f2168083161456177f188506be1bc821ac223b98ea1ab9224b243a97501645194019738ba2178e199e193c8d961963204921ee9530185120ac21fa94461526170f170d850e112a12421267092d159717b715f404e212cd1b451da88d3a18081bb31bef85481ad21ff5208f94451b02216f2282953a1ce8203d2246967a1c92213f23a596cf1ce5217823d4964c1d6021aa224498271c352175228095321b9120a9218994131c1020eb200195551b352030215395bc1b0f2069217e95da1a3d209921a594241b22204f219d94e21aed1fdc207294231b7d1f5a206294021c7f1f56204e95471bd81fd6200194a71ab01fee20d691511ba01fd4202f92d51a4c1f8920528ed819a61e2b209290ed19bc1e0520c4914218ed1cb91d798f4218ed1cb91d798fad1835127e18078cad1835127e18078c00004715df1b0000351e9a2018210398c21e1a2696279c9c0820cf2489250d9d431b8b1f491f24928e20d921e9211f97361e43261928fd9a931e552173218294e81b491c0d1acb8ceb143c153913f180d008000000004580af0c00000000d2803e0c00000000be80000000000000000000007803000000005607470d270c17800000000000000000000000000000000000000000000000000000c012e9150000b0043d0c03119e801d103510a9113b82000059095d120000ea1769181f1a90065319c41da422ec965f19362015220b968216ec19ba19da8a41176f19bd19a38b8417b11fac20f9932318a11ff720a7944116be189d189587160e9b126111de0772152218e017b108c5125f1c381ec78d1218c11b4c1c078c6a19371f7d205c94c81c9421e4220198ff1c8b222824e497a91dc92228241c980b1d93222d2400970d1d4822d223da961e1de5214023eb97901c45217522e695291c0c2166228295461c19216b223496d81cf82028223097551f8c203f21ba9af11c49204f210497891cd11fd92096963c1ae91e7520a993101a251e4f1fde928619121e611f60918919721e052026907e1a191f62203f8f511a9a1fe020d88da41a671fcb203191d914651acd1b418cf319681e551f9a91f319681e551f9a915b1cb21fe02024915b1cb21fe0202491ef197b1dac1dc38fac216d27be288ca02f231029062ad8a0421e75201d20b1954619fc1a7d1a648a611438179b17c0845f0f621509104b8142135d157519798369110000000097020b0b000090069e0000000000000000008402a802000000006e14841108101c837f135b110411a1820000de0c270e00000000dc0d2b0c000000006a0a850f00000000a809fe0400000000f80cf30c00000000930ee70f00000000890fb31200008c0461103b12000098068012b6153c024e155c174118510cdc113519181c378e79138115fa157b85a0113e127b130d833d0fda126f13a88203160018f016828c0312511b0d1d6c8d9e1492181a1874898e1170149d143e814f15dc178716ba830014a31a351d308e4918721b461c628b6719751fec2002941c1dff21cd2309985c1de3227a242698e51d0b235e242f98e21cca226a24ef96701dbe213a23b8978a1ca72113232796be1c5b218c222096df1c3c216c222496b21b002195225795231cd020ff212396831cb120a8214597ec1b7420a0217f957f1b2b202d213395f21ab11fe0206094e119171fca20d99263192a1ecf208e90d119571e51208c90eb1a981e04201292531a351f9b20df8f0e1aa41ecd1fbb907e19b81e0f20fe90e6190a1e561f6f93e6190a1e561f6f93741700001c148588741700001c14858886105b0a4a142a82661a461d7f1c73934e1db92554277a9a581c0c1f631eca9268144a16e216e885cf131a170f18bd83a912be18cd135682e61678185a1bd8846d12000000007c032c0d00000000bc010000d30a00000000000000000000000003169315c6173884fe1100110c1204840000f20c200f0000ad08210d870c00000000cf09e30e00000000300ad30f00000000500bdf110000000000009203000000009001000000005b086d0e42120980f7099e13e414c3014d117116c21794054a0c3e17c619538774109d14471645839c14e015bc14f187af0abe1266158c81fc1696187c18ae8db40ffc19451cd28abc12d91520157a893f1463140314118440117e1414163084c50efd18a51a1a8a5d197a1c711cb48f251c88212a232696b61d6e23b424b198c81d5623b124c098f51d9923c724fd98051e2e2389240a99ae1d3f22be231f98491df0212e2356970f1db82118230697651c5721c422d195df1c282137224b96181c17219b226c95681ce3200f226995b31ba820fb21da94891b6b208e21a094391b332040217094b81a09200021d393851ada1fd9202d93f61a0e200c215492c71a16203021a690741a841fb2209e8f0a19f61dab1fe18f6f1a721f7d204a937419331e861f2d927419331e861f2d927a1700009d1428877a1700009d1428870000000080100000851be11d791d2394411f8b2640288b9c4e1e8d2196218694ac1400000000af02000000000000000000003816971000005e112016691892825a159e110000c203a2140000710840830000f11000000000000066030000000005125a119715ba81ac0fcf1100124e83690aec0ed41100007608820be210000000009807510b000000004200d10f000000000000d202000000000000000000000000000000000000000000000000000000000000000000009406ba0d91127280dc093614b016bf858c093b0e0c107681fb0fb408040eac820000610c6e070000a71562181518998c53119d1b051ea18c65157c164717648c6011a30c1e068b81521319147f145f85e20ebc18ec1afc89661a691c9f1ccc90d01b0e22dd232c964e1e162393247b99fb1d1223942489982b1e21244125ad98801e172416258398171e3c2384243a983c1db4224a244497161d882237240f97331d4222ef236197731ca421442399962f1c12215922f1958f1cc020a62153961d1c882094215195101b4b208021ad945c1c40200d21c6951e1c43204f215295421bff1f03211c94501b6a1f74209593d81ae41e2520b290b51a101f5220d190cd1a1a1f88208991e619621f9420af927d183c1d1e1e15907d183c1d1e1e15903216470f39138f833216470f39138f831c0f2a0cae0c79010000000000000000dd0ced17771a2a818e14001b061c33830000000000000000000000000000000000007514a71300000c0ff0169d187681e114be1000000c04d315a10f4e145f000000fa0c160500000000000000000000d20e480f48148b80ca0f6c1113115b83440cdb0dde10e3800a0b110cb30f00000000640cf802000000002c056e11000000004802b00a000000000000000000000000000000000000000000000000000000002e06000000000a030005fd0c0f8000001d0c6511000080006e0f82120000160e84112e113c826e0c0912ce14bf830c17761a7c1b6994ad15d51cef1d4b923e1cd71e631e2c93a615d61f4c21d2903818821a521b2f91d914551afe1b6091811a641d681ee190951ceb21f1231797cf1ece232725cf99e91f29246225019b141f20242925b499cf1e8a23a8244499081e01236f242f98c51d27237124a497cd1d19229923de97251db4213923d096e01cf4217f23c496f01c7b21ba222b972d1cc120d721cc95f81b5b2036214695381b3c204421c894fb1a0a200a219f94601aa21fbf200494621a6f1fb020d793631a4e1fc3207093021a171fc5206c92ad19e71e5421fb90f91a0c1f132190926b1b821f00231594781b0220de203b94781b0220de203b942318280e0b1587802318280e0b158780b4125413b412378000000000000000003a062015f31900001a13f9193f1c7e82000000000000000000000000000000000000db0eaa1100001b11a118691971820315e10e000028049616001662189f8400005810d71300000000000000000000ec104a0d3414c9800e0cdf0dd80b9e817208530ba10e000007087006d60b00000000ce08000000000000da06ca0b000000003003a809000000000000000000000000000000000000000000000000000000000000000000002c0444091f0ec880a00100000000e0800000000000000000ca019b0c390e00006410ac0c930a96868a158c19b71a1e931317031d581e2694bf158517e517208c0000000000000000cd0f00001a0c9886290c0718021bae880c18341a381c968e111cf12020246c963b1e122436250599241ff923f624c0999b1e9e23ce241d993f1e1a23bd24a3984b1e6022e3241299861ec4225724f298821d85226a24fe97501de4215e233497711c642118232b96ae1ce12040225996601cd12024236095ea1be520db221d955a1ca620a121c3959a1ae91ff7204494771ae71e2a201394171adb1e52207b93421a861edd1f0b940619bd1d271fb1912219ba1de21e7d91151ab41e1a204f92531d46204b211f981a1c3b1f6a207b961a1c3b1f6a207b9617170000ee13430217170000ee13430234116a0b65132a818214b917c90e5389cf1c06245c257c9a23193d1ebd1eb48f000000000000000000000000000000000000560e2e0e0000de12e319611a49833515990a0000fc04e9154114f517a4020000de10d713000000000000000000005a112610f51432812205350a280a05806204de09bc0e0e806c0838091f0c2d800000d50a00000000000054011d0d00000000a60290060000000000000000000000000000000000000000d005000000000000000000000000b2004e08a00f00005f081a06610a9d850000e001831000008d16a5186d18bc8bb6151c1e3b209b93411ad91bbb1c10994817dd1c251e8f94c315f8174519708a0000000000000000a30d000000003a846a0afd12891804882519401b4e1c628f041d9f22312433981b1f3d248b25119ae91e4a24ca269199d11f7024e825ab9a741e11246c25fe987c1d56236f257097931e9123dc24aa98161e1f239624b6984320092269232e9c7e1dfe218d23f997f41cc6216b23b896321dbf21f2220b97281c6a21fa228195321c08214822b195da1b4d20262153953d1a591f762008947119721ee61fdc92f518631e0c2016927a19261e791f8d928819921e0e201692eb19b41e382076935d17671c711ddf8f991a0d1f1f20af93991a0d1f1f20af933d170000eb1263013d170000eb126301d90e00001b12c3804318711bb7194d8d8b1ecd256727349c211b6a1f391f5891861100000000f001000000000000000000001a10011100001914301a921aec83a314d7080000d9036d1652144b17b1830000650d3a11000000004e0500000000f413a412d715498214032708360900001e05d007100e0000b201db0a740d00000000e508fc0300000000d308a71000000000ee0b010e0000000000000000000000000000000000000000ec01000000000000000000000000ce043604a510ac80480924010000c9860000000000000000000000004e0900003e0396066f0b6d80da106014f5163c8f72157c18611a15933715ce15201729890000000000000000be1066064f084c858e08241592180d850b18bb1a441c118ec41c9122f923d597311ee92309253099bf1e192457258b99321f1b243d259199f91f352475256c9a831e0b2460250999281e29239025dc98e420c3225e24089d4e1e9e224c24e1987b1d29222624c8972c1de721b823d996741c4721ed237895431c0521a5228295d31b6e204c212f95bd1a0720d82076941e1af51f05213e94ba1a681f7b208f94091abf1e43201894e119981e58205c94271a3d1f7e20c193c91ab91fe3202b945c19111ece1f12929c1aa91e082046939c1aa91e08204693a516000012121f02a516000012121f02740a0000181100001519191cb01a008ea61efa25c2271c9c061c4a207120c791551100000000df0100000000000000000000e6119415000071147819791940849a117d0a0000ae0212159a0a1911440200007f12e31300000000000000000000bc11a511cf14038250043d08050c00002a020108af0d0000d201270af40d000000007f0aaa0000000000960b6e1000000000c70ee511000000001e0713090000000000000000000000000000000000000000d801000000001e09d20a1a10d681360808030000578500000000d0030000b800d802f60c00000000000000000000971649193a1af7947c16291e8120029467170d19031a538b000000000000000043100000d8037d84de043e14701877827a184c1ab91b248eb81cce21512373979c1e9023fb2438992b1f21249925a9998a1e0b2485250f99801e532366250799da1d3f23cf248798c01ee22284248b99741dd9228c24be970b1e3b2214244a98751c50213d247996f51cbc2029229096641ce120242219966f1ba72007222995b71b5a206e219a956b1bb71fe42044950a1cc61fd2209b95521a4d1f9a202f948e1a771ed01f5794c41a191f2f204494b21a8b1f98203894361b2d200f213394731ad21ff420839314191c1d081ec89014191c1d081ec8909c150000771113019c1500007711130100000000b0100000c818671b2b1a8f8e1f1d1225fe26c399751c7020a520f892c110000000002700000058044b1100007a1b7d1e1b1e5e916519f221162419977b193f1c8e19128d851666156918948400009514ce1400000000f3108f120000c31127127a16a881500e800ffb0f00008e062109f70e0000c005af0c4a0d00000000b2091205000000005808960e00001403890cc80c0000000000000000000000000000000000000000b405000000000000b202000000001309910af212e7810000d201dc05000000000000ba030000380300000000000000000000bd0d0000b416ad160217c99490146f1dd61f6c912e188419a51a228c0000000000000000430f0000000049840000310a7c1500000f19341c971c1e904e1dd22244240598141e10243225cc98ff1e49238f248799001e8a23ee24bc980b1e2f239e244a98f21df8224f240898aa1d5c2234248097c21d0d229323a0977a1d0322d3234197421dd5214223cb96fd1c982117237296901c39218f220b96521cc020ea21b895591cce20de21c2952f1b7420b621a494491b1d201c21f0940a1b0c208521c694131a811f1222a793731b5d1fe4200d95d319bb1e50208793a919621ed91f69923519eb1ddb1fe6902118ed1c4e1e12912118ed1c4e1e1291601500007d12b701601500007d12b70100000000a3100000b4184c1b781a748eb31cc024f5263599121d7520b6209b93670f00000000d40000000000be0400000000741438110000ef0e8b131116ff80a612e70a000010018d0b000000002e800000f10c0000000000007211641300003c153e18ea1a0d904e11c60ecc0f8e836809920eea106380f709090d1b0f00000000840cd108000000008c0b711100000000eb0d1f11000000000000f0010000000000000000000000000000000000000000450a88040000070c47100c13618200003f14bb1600001006fc10f712d8807711c715e7175c8448182f1a251b4e9055154b1ccf1efa907e18161ed01f8d94ff1c451ff91e4197310c3a1d9a1f7c86c817811a031cd28f4018561ce91d4e92301bda1de21e8a92f41c4a21d0221298701ec12269244a99e41e3c23b424aa99381f7923d524d1993e1fe42329259a99b01efd2352252c99921e30238424e0983d1e622202246e98db1ccf214b236e96741ddb200b223997081cf520a6223595311cbe2048222695961c8f20cb213896e61bb82032225b95351c8420af21b495b91b2a2030213c954d1ca91fc220d595ec1dfa1e4a2095980b1bbd1d8e1f8d94cb186a1d151f0a92c7196a1d761e2d922618d01c1e1ed49072171e1c081d569072171e1c081d56900915000021129b010915000021129b0100000000c6100000b817491ae4188a8d751a182400264397701c09205620a892610a000000000000000000008b0e000000003614731200004d103d12f61582817f0f00000000d600ac0a00000011b180000049090000000000006e10fa060000ac10bd107314f081ba111b109e0ea50100006f10f9150000750fbf101e141281040a9a10181000000000030b7813000000005f08e20c0000000000002e01000000000000000000000000000000000000000000000000000000000000730800000000700e9807000000000000110c00006602bd130f1600000000b20ffe1600008b13b112261636880000e416cd1a00003e0f2117f4163385e31488174218cc87a718f61aac1b7e8d2011c41c851f9b8bdb1b0f1e0d1f6492231d5821e8224b97f71d06239324cf986e2043238124fc9ba91e5123b02442995e1efd229724ed98df1ddf2281247398ad1dd222912436980b1e47222b247c98151d682197246896ac1d8b21ba231e98041e7d214323f298022015216a229c9be11c9a20a9213d970b1c05200b21bd955b1aeb1f18216994931b731f68200495521bc81fb7209d94631b2c1f8320e494021bdd1e15206b94091a6b1e0e2007931019761dbe1e92918c192b1eb91f1b922a16cb1bda1c978e2a16cb1bda1c978e7c120000b50e09017c120000b50e0901ac01970b2e0000000000790d00000000c205dc18101b00000f146319b81ad9820000000000000000000000004f0900000000d0146514000015107c12cb15e9801603c20700000000f80d20021316ab0000006e0a000000000000c50b00000000420c5f1200009d805600dd0c2e120000360c171163143380e8015910e51200000000a30c221200000000bb0cbb11000000006001380f0000000000007a04000000000000000000000000000000000000000000000000000000000000300e00000000000000000000ec05000000001f80900d940c750ec0027d18fb1a7a1b958d4619f21d1f20c49570185f1e57204695b8131a187e18cd8801110b113a13cd80c80fee119515df00560d910c8d0e990013151f1ad51a9083cd1b1d21df22e995741e9d23f5244d99e61edd2328253a99ab1e9c23cc24f3987f1ef7226f248298c31dfe2290242f98071e7c224a246098981c8d218f246096d81d3921ec22ec97561d7c2177234d98351d5e21e622ba972f1d1a2145223297fb1b9a20f8216995df1b0220d12037957e1a481fa5203294e01a591f9e208d94ca1a7c1fd4207f94461a171f7e20e893ae1aac1ed51fc7936b19971e30204f927619bd1df81e88922b19ca1dae1f5c91041aa21e0e209f92041aa21e0e209f92771358088814b780771358088814b78000002c138512000085146a1b5a1c2c835a0ff21aa31c1e00280e2c177f19790100007e012710000000000000111400000000f01319150000f208a91004161f8000003c0900000000b0020000d1140e000000b812000000000000bb11000000000000950d00000000380aa910c30c5980da0561105212b900120096081e11000000000c05400600000000dc08f90b00005308aa088e087380d20400002a01360000000000ec0c00000000000000000000a802000000005f000000000000000000b10c00000000ac80bf09000000000c00790e00000000f681ad0ce00de40c3980fe15f516ad1580863912311ab71cb58db9126a15ef153886a20c0b1012148480d111161443148e002e0c0000000055000e18331a0c1c6688371d61226c2492971e2062245525079b1e2001240825809a0f1f0b2419252099ad1fb023cf249299841ec922612426999c201e219322ac9c971d7121b2223c98761dcd208b222398441cd9209f225496031cac20aa2291952e1cbf206922cd95841b98206722db94631b7e202022a894d11b5420bd21ed948e1bec1fe920c2943b1a5b1ee91f42936e197f1d161f059381198b1dee1eef928119071efd1f4a93471b891e08202a95fb18141eea1fd99044194a1ead1f769144194a1ead1f769100000000000000000000000000000000a211fe0de1142e000000081214160000ba0160106d10020000005f113c100000ad1025126f142680e7110f145312b201a5114613e90d2e0022113710c20c7e800f0f5a1100009080d50ac00d00002a80aa07ed0f000018807f0d050f000017807b0c000000005b0100000000000000002e033e0000009f00000005080000000074040d0ff80172000000000000000000b005c90800002900780eb90d480e6803d402c005d51188009c06000000009b006b0a0000740f7c0100000000000000004f16281785160a86ca11c61c311f7a8cd316e617e41623085211e70e1b1343056911fc14ff14f883a4141b19691a7a901d0fb012c712ee815f1415120c1129092314ad0c69089f0820044e10ee1055010119f61acf1b0607ef1d8022412410991c222f245025629eeb1f3e23a224619a301e3b23b624b0983d1eee2288248798061e8e2261241598c81da32266240398481d5f2232242997131dcb21a123b896741d45216c226597601cf1207122cb95261c9a20e6215c95671b4b209221aa94281cf71fd7203d95ee1ac61f16217a94601b901f8f2087942a1b911f7a2083941e1a281f7920e893ad19f61e53208493bb19e81e3a201194ed1a1c1f5f205d943c1a141f6620a9934e1b0020162193934e1b00201621939300000000000000000000000000000000c412e21444186002000008187919000000002b1219150000060f6d186f1ac980e514091c1c1df080151ee21f3320049200008c2197250000191c202064209490ab1a3f1cba1ca9872f1533171314a781a202de0e8e0d0800d00a97110000990000000000000000004a030000000032000000d211000000000000190a69080000220b651100006c010000010b6c0000000000850d9e0c00000000140e301000000000a4109b0f00000000490dd30a00003c003f0c960500000000570e8e010000a6056b0d9c0c6e005e03e30d00008d00780c3a102e0fa4005110e214381423802916a7181f18178a8a0b641bb01d84874d15d0180519c0850f137014bc1348043e0d9b0ed4139802bb104714b113f7090119751bcc1b2708331c0f21a2225d96581ead223a245199471eb5230725db98fa1e40239324d898411e17238f245798c01d8b225f241598d61d5b221924b398251e092284238f98831dc9219523d397511d4721e7220a97c11c0921c4224b96d71cba202a221a961a1c932021224d958a1c582075210396081c112069213595361c991ffb20fa95f11c801f8620f7977e1c231f3d20aa967a1be51e6d207994ce1ab21e2b20b593c51a501eb31fcd92eb19321ed91f2392531ae81d111f5e93531ae81d111f5e9300000000000000000000000000000000ab12e015eb187d8100009b18281a000000002814bb1500007911fb18111a9f82bc14c11b3c1cb8824c1d5e1ffe1e41920000b52181240000451b731f881f4a90a619311c751cb08814124818d716e982ac09e60f26100b009f0ac9121c046d811800bf0d76080000b806000000000700000000000000000000006b0c000000000000770f510800000a0a3a0e5c02250012036c0cdc062f000000df0edb08000000000c107a0700000000c10a1f0c00001d09eb0fb20db1007a0bdc0d350c89005608910a00007300340dec0cf2093d03360d050f4f099501130c2210f00e108098147516c414d688980f36190d1c738bf714ca162c164a8788101b107f134d01420d2911c90eec007a0c5214fe133701cd189a1b5a1cf787311c592131231596951eef22792468996c1e942303252c99421d1c23ad24f8979a1d1122ac23f4976d1da1212e23b4977d1d9e210d23f897541d9f2145239197181d80211723bf96bd1c4a21d2221f96901cdd200e22e695491c55206421ac95831b32209f21fa94691b25206821e794b81bc71fd8201d95841aee1e6c20cc936f1a301eef1fb3937f1a2d1e6e1fc693661a2d1e9f1fdd93931a771eec1fa7936e1a9d1e2020499357193c1ed01f89916c1a5e1e901fdd926c1a5e1e901fdd920000000045080000000000004508000000000000000000006406c514eb1948000000f615a31800006f104219e619b500b613031bb01bbd801d1cae1e9c1e9890540dc4202d2376889e1aac1dc51d648f41140819c31a7182e30ccf110000cb01641000005d16ac0900000000000000009910fc00000033020000000004030000261100000000c7030000960cb61000003d10c40c00004d022c02000000000200ff0e6b1010143a8100000000000000003003020ba3100a80000000001a070000e60e2912530817022a031d0d3e0db800340e490c990e7c01b10b400400006e004f09bc074c070b80720d210a000016808410ee0fc10db880ca0e5e0ab200c2805e10fe0dc80ab380d50e61090a011c00a7102b0c5e0c26009a0e95100b13f2004b18c6199c1b3489901c0f2127230f97a31db62263255c98c41e5123bf243c991f1e74221d248b982d1dd9217b230597051d7f2129235396f71c5421bd22a0951a1d262197226e96791c2c21de22ec950a1d38218722d596cc1c2a21a522d096681cf2205b22d695c31caf20d4214e960e1c7620df218095231c432081219c95951c1120f620a796691b801fa620ca94bd1b011f382040953f1ac41e5220ac938a1aad1e34206893781ac11e5620ea92001a071ff020399225190c1df41d019125190c1df41d01910f0ab50ba50a56000f0ab50ba50a5600000000008a0400000000000000000000000023107b1100000000521637150000f800171487130380000019146b12000000002014b90f000008050315741119800000fc142a160000050e17110000ac0000000000b20d000071134814ae0ca90152020000770c1080cf10af0f000076000000000014030000210afe0f00000c8000000000000000000000000000000000000000000000000000001c0c00000000000000000209000082098d0b00007c80f00aad0c00009c80da043a0c410936804e0c280cd00d7b80050dda08330db9803310690d24083481f40c110f7a0fb680ee0e980d0000c6806b08de0300002d800000270c00000000000000000000000000000000000000000000d801cb0f00009517831abc1b1589a41be8207f222f95d61d54221e249c98651e9e222924f398de1dff21e7235a98821db32191237897a61db62170234d97b11d9e211e232298ba1c2621d3228f962f1cac201b22ac95171c5a20aa21cf95271c342034213c95971c1e2010215f96601b05203d218794021cc81feb20cb94071b991fee20f5939b1a531fc320b293a71b591f66205694ac1a281f8020fb93371b071f462051945c1a051f71206893691ab61e5020e093061a311e821f71922c1b2e1f432070932c1b2e1f4320709362031208a909260062031208a909260000000000b601000000000000000000000000fe0e0b1200006e07af1575170780b10c94144616ac8000000000821300000000000000000000000000008a0c0000000000008a0c0000000096020000000000000000990a0000000020050000000000000000000000000000f201000000001402710800001380dd0c2a0d460ab380260f2f10a208cd80580a300dbe058e801a04a5097d0b368000009e06d00b000018058f0f270f44805511e5131c158881291024160518ba818c0701155917648000009c100b160000270dda140817e880a60e6d16bc18be80380f2e1874199380bf10e2188c19c2802a0b4018fe182c80000052153316000000001d11c71200000000aa12bf1100008a14d01653174a805c1a321c6d1cb28ec91dae1fb6206699e21cd42042220398b11d672149235098aa1dc021dd231d98561d83210c24b9961e1e7f2146238a98d91e1a21c622809ab61cbc206822d696631c3920a921ab95ec1b0c203f21dd94e21ae21f2e211e94571be21f2d218294321bd91f23216b94e71a901ff2203d94371afa1e9620a393751a8e1e2f20ef93ae1a811efe1f9193991a601ef01f7993ed19391ee71fb792e519081e651fae929219821d9b1e2292c018951d041f14917f18e41cb21e60907f18e41cb21e609000000000000000000000000000000000f70fcb0dbe13a7810000b911ef14000000007d10011000000000cb0fe90d0000060da30d0f0fe180800c600c2209ca80de08830c00008180fe05310f00005c80f60b81114a0cf4808f0ff212201191816d0e871176102181a30d881206107380a10c420b600f8480c30cb10f890dd6800000980ebc040000000000002405000000005c050000000000000000090c0000020df90e920be1801408f3098d096c80b20000004c0400008c07440500008380000000000000000000000a01e00200000000ea009207000000000000d40100000000000000000000f9098a0a220ab780bd0926086606b08000000000000000009e074f0d910865807a02230d9b0e1c80aa119810f311fd81c80f7b148d14df803418991a2f1b6d8c9a1b1a20712146952f1d2e21be2203981b1d642112236997331d562104230d97f81c5321ff226c969f1c2f21e422f995401d132118221f97a51ccf2044224d96d61c9520e621f1952a1b3a20d8216794661cf81f26218b95ad1a6e1f16215094e41be51e7920bb95651bae1e40200495001b9e1e7420a394b11a9e1e6d205394e819571e3e207193fc19fd1d961f2993931a0b1e831fde93f9192b1ecd1ff592fb193f1e2b20c792ac19111fbd200f923019ea1cf51d8b913019ea1cf51d8b9100000000a50d000000000000a50d00000a12b1104a14628c000011158b150000f0070c1425149182070c3d137013d284251128157315278a38139a16d7168d8c4b148517bd17468d0314a117fe17ed8c4813af175d17b58c0812f615af179a8b0d14b016f6161b8d4e0fd01449157d881e11ee132014498a671080147b138c89a710b9143a14038a9d107b148e14d089c610a2144715dd897f102313e7128689ca10cb111d10308a7610321354127a898211011355124b8b7911581321143f8bdc100e131212e68a600e1111b611a088b510e6129e12888ac7103d12ae11a18a2d11f01239132f8be110c712b912ed8aad1138128011b38bc712191370127d8c7412ac13cb122b8cf3124c14e913618c751274149c14ba8b5b13bb161217dd8b2e18b01b0f1c0091471c342022211396671d7121e022d8974b1ee12143237898a11dbd2199234498931d5d21bb22bd97e51c03216d221b971f1d0b2196221b97621cf6207b22ce95461cbf206322cc95921c9220be213396e81c602067219897191c072054218f95b81b851f33213c955a1c371fc9205196581d151f5620a6981a1e0d1f4720b299481cca1ebf205a96451b381ea1200c95a619e11dd0206592c61af11dc51fe393611ad31dc81f3a93e618b01d951f15916718211c221db5906718211c221db590000000000000000000000000a50d00000a12b1104a14628c000011158b150000f0070c1425149182070c3d137013d284251128157315278a38139a16d7168d8c4b148517bd17468d0314a117fe17ed8c4813af175d17b58c0812f615af179a8b0d14b016f6161b8d4e0fd01449157d881e11ee132014498a671080147b138c89a710b9143a14038a9d107b148e14d089c610a2144715dd897f102313e7128689ca10cb111d10308a7610321354127a898211011355124b8b7911581321143f8bdc100e131212e68a600e1111b611a088b510e6129e12888ac7103d12ae11a18a2d11f01239132f8be110c712b912ed8aad1138128011b38bc712191370127d8c7412ac13cb122b8cf3124c14e913618c751274149c14ba8b5b13bb161217dd8b2e18b01b0f1c0091471c342022211396671d7121e022d8974b1ee12143237898a11dbd2199234498931d5d21bb22bd97e51c03216d221b971f1d0b2196221b97621cf6207b22ce95461cbf206322cc95921c9220be213396e81c602067219897191c072054218f95b81b851f33213c955a1c371fc9205196581d151f5620a6981a1e0d1f4720b299481cca1ebf205a96451b381ea1200c95a619e11dd0206592c61af11dc51fe393611ad31dc81f3a93e618b01d951f15916718211c221db590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b0c000045182c1c8e1d9093201cc12069213e98c817ee2113248094c61d5a217c216499561e5b212222d099851e53215322c699d0187021df23e094ce1c0320a11f2197401b701ee91e43958515d81b001a4f8f00006f187e1400000000b90e000000000000000000000000a71489174d15628aa0153e19a11b658cb50c961b2e1eba81a611111dc01f4381090c5219b619d68000000000000000006c181d1adf1e08966f1d0727eb28199ca70c1c266f28e789281ac820d420ed96611c901c731dae948d17ec1f1e212b9395199b208f21da94d416d51d361fe68cd6144b1d462018896b14eb1a051efb8e0000e414151c00008e134f176e1a9b8db414f817ba18618e1d15c2199d19c58eb109211b6c1cdc831a174c1d7f1daf8e9819aa1f0921df92411bb1205a22cd94de1c4421c422ea96451c62210d23cb959a1c4121c7223e96b31b0c21bb2219952a1cca202e22c795051c8c20a92153953d1b18204f21cb94481ad01f1e21b793d41ac11fe0204e940a1bd81fd8208c94061bc71fe1208a94641a591f8e2021946c19ad1e3020d5926b195b1ee31f4f926519191e701f6c912619881d211f30901a18361dd31e1a8dac18c51cb81d388d7418ca1d621fae8e16181b1d6a1ea0907d19f11d0c20eb92000000000000000000000000000000009c0600002a0cc38016070416e8186281741df11f25202d96131db024e3258b999c1dbd209d20be946d18de1c081ca08b981fd520d5202e96ed1d872524270b9b821d6a2063202194e619cb1a7819d68d0017dc15af15088a6b11010f0000fa830c0fe0080000b08191090000000000006f0d1b0a00002181000000000000000000000000000000000000000000000000430a5e08a10b0000d00400004201ca80cc15981d2f1f5f94541e81261e28379c1c15e21dfa1f208f140fdc14f2168083161456177f188506be1bc821ac223b98ea1ab9224b243a97501645194019738ba2178e199e193c8d961963204921ee9530185120ac21fa94461526170f170d850e112a12421267092d159717b715f404e212cd1b451da88d3a18081bb31bef85481ad21ff5208f94451b02216f2282953a1ce8203d2246967a1c92213f23a596cf1ce5217823d4964c1d6021aa224498271c352175228095321b9120a9218994131c1020eb200195551b352030215395bc1b0f2069217e95da1a3d209921a594241b22204f219d94e21aed1fdc207294231b7d1f5a206294021c7f1f56204e95471bd81fd6200194a71ab01fee20d691511ba01fd4202f92d51a4c1f8920528ed819a61e2b209290ed19bc1e0520c4914218ed1cb91d798f00000000000000000000000000000000ad1835127e18078c00004715df1b0000351e9a2018210398c21e1a2696279c9c0820cf2489250d9d431b8b1f491f24928e20d921e9211f97361e43261928fd9a931e552173218294e81b491c0d1acb8ceb143c153913f180d008000000004580af0c00000000d2803e0c00000000be80000000000000000000007803000000005607470d270c17800000000000000000000000000000000000000000000000000000c012e9150000b0043d0c03119e801d103510a9113b82000059095d120000ea1769181f1a90065319c41da422ec965f19362015220b968216ec19ba19da8a41176f19bd19a38b8417b11fac20f9932318a11ff720a7944116be189d189587160e9b126111de0772152218e017b108c5125f1c381ec78d1218c11b4c1c078c6a19371f7d205c94c81c9421e4220198ff1c8b222824e497a91dc92228241c980b1d93222d2400970d1d4822d223da961e1de5214023eb97901c45217522e695291c0c2166228295461c19216b223496d81cf82028223097551f8c203f21ba9af11c49204f210497891cd11fd92096963c1ae91e7520a993101a251e4f1fde928619121e611f60918919721e052026907e1a191f62203f8f511a9a1fe020d88da41a671fcb203191d914651acd1b418cf319681e551f9a91000000000000000000000000000000005b1cb21fe0202491ef197b1dac1dc38fac216d27be288ca02f231029062ad8a0421e75201d20b1954619fc1a7d1a648a611438179b17c0845f0f621509104b8142135d157519798369110000000097020b0b000090069e0000000000000000008402a802000000006e14841108101c837f135b110411a1820000de0c270e00000000dc0d2b0c000000006a0a850f00000000a809fe0400000000f80cf30c00000000930ee70f00000000890fb31200008c0461103b12000098068012b6153c024e155c174118510cdc113519181c378e79138115fa157b85a0113e127b130d833d0fda126f13a88203160018f016828c0312511b0d1d6c8d9e1492181a1874898e1170149d143e814f15dc178716ba830014a31a351d308e4918721b461c628b6719751fec2002941c1dff21cd2309985c1de3227a242698e51d0b235e242f98e21cca226a24ef96701dbe213a23b8978a1ca72113232796be1c5b218c222096df1c3c216c222496b21b002195225795231cd020ff212396831cb120a8214597ec1b7420a0217f957f1b2b202d213395f21ab11fe0206094e119171fca20d99263192a1ecf208e90d119571e51208c90eb1a981e04201292531a351f9b20df8f0e1aa41ecd1fbb907e19b81e0f20fe90e6190a1e561f6f9300000000000000000000000000000000741700001c14858886105b0a4a142a82661a461d7f1c73934e1db92554277a9a581c0c1f631eca9268144a16e216e885cf131a170f18bd83a912be18cd135682e61678185a1bd8846d12000000007c032c0d00000000bc010000d30a00000000000000000000000003169315c6173884fe1100110c1204840000f20c200f0000ad08210d870c00000000cf09e30e00000000300ad30f00000000500bdf110000000000009203000000009001000000005b086d0e42120980f7099e13e414c3014d117116c21794054a0c3e17c619538774109d14471645839c14e015bc14f187af0abe1266158c81fc1696187c18ae8db40ffc19451cd28abc12d91520157a893f1463140314118440117e1414163084c50efd18a51a1a8a5d197a1c711cb48f251c88212a232696b61d6e23b424b198c81d5623b124c098f51d9923c724fd98051e2e2389240a99ae1d3f22be231f98491df0212e2356970f1db82118230697651c5721c422d195df1c282137224b96181c17219b226c95681ce3200f226995b31ba820fb21da94891b6b208e21a094391b332040217094b81a09200021d393851ada1fd9202d93f61a0e200c215492c71a16203021a690741a841fb2209e8f0a19f61dab1fe18f6f1a721f7d204a937419331e861f2d92000000000000000000000000000000007a1700009d1428870000000080100000851be11d791d2394411f8b2640288b9c4e1e8d2196218694ac1400000000af02000000000000000000003816971000005e112016691892825a159e110000c203a2140000710840830000f11000000000000066030000000005125a119715ba81ac0fcf1100124e83690aec0ed41100007608820be210000000009807510b000000004200d10f000000000000d202000000000000000000000000000000000000000000000000000000000000000000009406ba0d91127280dc093614b016bf858c093b0e0c107681fb0fb408040eac820000610c6e070000a71562181518998c53119d1b051ea18c65157c164717648c6011a30c1e068b81521319147f145f85e20ebc18ec1afc89661a691c9f1ccc90d01b0e22dd232c964e1e162393247b99fb1d1223942489982b1e21244125ad98801e172416258398171e3c2384243a983c1db4224a244497161d882237240f97331d4222ef236197731ca421442399962f1c12215922f1958f1cc020a62153961d1c882094215195101b4b208021ad945c1c40200d21c6951e1c43204f215295421bff1f03211c94501b6a1f74209593d81ae41e2520b290b51a101f5220d190cd1a1a1f88208991e619621f9420af927d183c1d1e1e1590000000000000000000000000000000003216470f39138f831c0f2a0cae0c79010000000000000000dd0ced17771a2a818e14001b061c33830000000000000000000000000000000000007514a71300000c0ff0169d187681e114be1000000c04d315a10f4e145f000000fa0c160500000000000000000000d20e480f48148b80ca0f6c1113115b83440cdb0dde10e3800a0b110cb30f00000000640cf802000000002c056e11000000004802b00a000000000000000000000000000000000000000000000000000000002e06000000000a030005fd0c0f8000001d0c6511000080006e0f82120000160e84112e113c826e0c0912ce14bf830c17761a7c1b6994ad15d51cef1d4b923e1cd71e631e2c93a615d61f4c21d2903818821a521b2f91d914551afe1b6091811a641d681ee190951ceb21f1231797cf1ece232725cf99e91f29246225019b141f20242925b499cf1e8a23a8244499081e01236f242f98c51d27237124a497cd1d19229923de97251db4213923d096e01cf4217f23c496f01c7b21ba222b972d1cc120d721cc95f81b5b2036214695381b3c204421c894fb1a0a200a219f94601aa21fbf200494621a6f1fb020d793631a4e1fc3207093021a171fc5206c92ad19e71e5421fb90f91a0c1f132190926b1b821f00231594781b0220de203b94000000000000000000000000000000002318280e0b158780b4125413b412378000000000000000003a062015f31900001a13f9193f1c7e82000000000000000000000000000000000000db0eaa1100001b11a118691971820315e10e000028049616001662189f8400005810d71300000000000000000000ec104a0d3414c9800e0cdf0dd80b9e817208530ba10e000007087006d60b00000000ce08000000000000da06ca0b000000003003a809000000000000000000000000000000000000000000000000000000000000000000002c0444091f0ec880a00100000000e0800000000000000000ca019b0c390e00006410ac0c930a96868a158c19b71a1e931317031d581e2694bf158517e517208c0000000000000000cd0f00001a0c9886290c0718021bae880c18341a381c968e111cf12020246c963b1e122436250599241ff923f624c0999b1e9e23ce241d993f1e1a23bd24a3984b1e6022e3241299861ec4225724f298821d85226a24fe97501de4215e233497711c642118232b96ae1ce12040225996601cd12024236095ea1be520db221d955a1ca620a121c3959a1ae91ff7204494771ae71e2a201394171adb1e52207b93421a861edd1f0b940619bd1d271fb1912219ba1de21e7d91151ab41e1a204f92531d46204b211f981a1c3b1f6a207b960000000000000000000000000000000017170000ee13430234116a0b65132a818214b917c90e5389cf1c06245c257c9a23193d1ebd1eb48f000000000000000000000000000000000000560e2e0e0000de12e319611a49833515990a0000fc04e9154114f517a4020000de10d713000000000000000000005a112610f51432812205350a280a05806204de09bc0e0e806c0838091f0c2d800000d50a00000000000054011d0d00000000a60290060000000000000000000000000000000000000000d005000000000000000000000000b2004e08a00f00005f081a06610a9d850000e001831000008d16a5186d18bc8bb6151c1e3b209b93411ad91bbb1c10994817dd1c251e8f94c315f8174519708a0000000000000000a30d000000003a846a0afd12891804882519401b4e1c628f041d9f22312433981b1f3d248b25119ae91e4a24ca269199d11f7024e825ab9a741e11246c25fe987c1d56236f257097931e9123dc24aa98161e1f239624b6984320092269232e9c7e1dfe218d23f997f41cc6216b23b896321dbf21f2220b97281c6a21fa228195321c08214822b195da1b4d20262153953d1a591f762008947119721ee61fdc92f518631e0c2016927a19261e791f8d928819921e0e201692eb19b41e382076935d17671c711ddf8f991a0d1f1f20af93000000000000000000000000000000003d170000eb126301d90e00001b12c3804318711bb7194d8d8b1ecd256727349c211b6a1f391f5891861100000000f001000000000000000000001a10011100001914301a921aec83a314d7080000d9036d1652144b17b1830000650d3a11000000004e0500000000f413a412d715498214032708360900001e05d007100e0000b201db0a740d00000000e508fc0300000000d308a71000000000ee0b010e0000000000000000000000000000000000000000ec01000000000000000000000000ce043604a510ac80480924010000c9860000000000000000000000004e0900003e0396066f0b6d80da106014f5163c8f72157c18611a15933715ce15201729890000000000000000be1066064f084c858e08241592180d850b18bb1a441c118ec41c9122f923d597311ee92309253099bf1e192457258b99321f1b243d259199f91f352475256c9a831e0b2460250999281e29239025dc98e420c3225e24089d4e1e9e224c24e1987b1d29222624c8972c1de721b823d996741c4721ed237895431c0521a5228295d31b6e204c212f95bd1a0720d82076941e1af51f05213e94ba1a681f7b208f94091abf1e43201894e119981e58205c94271a3d1f7e20c193c91ab91fe3202b945c19111ece1f12929c1aa91e0820469300000000000000000000000000000000a516000012121f02740a0000181100001519191cb01a008ea61efa25c2271c9c061c4a207120c791551100000000df0100000000000000000000e6119415000071147819791940849a117d0a0000ae0212159a0a1911440200007f12e31300000000000000000000bc11a511cf14038250043d08050c00002a020108af0d0000d201270af40d000000007f0aaa0000000000960b6e1000000000c70ee511000000001e0713090000000000000000000000000000000000000000d801000000001e09d20a1a10d681360808030000578500000000d0030000b800d802f60c00000000000000000000971649193a1af7947c16291e8120029467170d19031a538b000000000000000043100000d8037d84de043e14701877827a184c1ab91b248eb81cce21512373979c1e9023fb2438992b1f21249925a9998a1e0b2485250f99801e532366250799da1d3f23cf248798c01ee22284248b99741dd9228c24be970b1e3b2214244a98751c50213d247996f51cbc2029229096641ce120242219966f1ba72007222995b71b5a206e219a956b1bb71fe42044950a1cc61fd2209b95521a4d1f9a202f948e1a771ed01f5794c41a191f2f204494b21a8b1f98203894361b2d200f213394731ad21ff420839314191c1d081ec890000000000000000000000000000000009c1500007711130100000000b0100000c818671b2b1a8f8e1f1d1225fe26c399751c7020a520f892c110000000002700000058044b1100007a1b7d1e1b1e5e916519f221162419977b193f1c8e19128d851666156918948400009514ce1400000000f3108f120000c31127127a16a881500e800ffb0f00008e062109f70e0000c005af0c4a0d00000000b2091205000000005808960e00001403890cc80c0000000000000000000000000000000000000000b405000000000000b202000000001309910af212e7810000d201dc05000000000000ba030000380300000000000000000000bd0d0000b416ad160217c99490146f1dd61f6c912e188419a51a228c0000000000000000430f0000000049840000310a7c1500000f19341c971c1e904e1dd22244240598141e10243225cc98ff1e49238f248799001e8a23ee24bc980b1e2f239e244a98f21df8224f240898aa1d5c2234248097c21d0d229323a0977a1d0322d3234197421dd5214223cb96fd1c982117237296901c39218f220b96521cc020ea21b895591cce20de21c2952f1b7420b621a494491b1d201c21f0940a1b0c208521c694131a811f1222a793731b5d1fe4200d95d319bb1e50208793a919621ed91f69923519eb1ddb1fe6902118ed1c4e1e129100000000000000000000000000000000601500007d12b70100000000a3100000b4184c1b781a748eb31cc024f5263599121d7520b6209b93670f00000000d40000000000be0400000000741438110000ef0e8b131116ff80a612e70a000010018d0b000000002e800000f10c0000000000007211641300003c153e18ea1a0d904e11c60ecc0f8e836809920eea106380f709090d1b0f00000000840cd108000000008c0b711100000000eb0d1f11000000000000f0010000000000000000000000000000000000000000450a88040000070c47100c13618200003f14bb1600001006fc10f712d8807711c715e7175c8448182f1a251b4e9055154b1ccf1efa907e18161ed01f8d94ff1c451ff91e4197310c3a1d9a1f7c86c817811a031cd28f4018561ce91d4e92301bda1de21e8a92f41c4a21d0221298701ec12269244a99e41e3c23b424aa99381f7923d524d1993e1fe42329259a99b01efd2352252c99921e30238424e0983d1e622202246e98db1ccf214b236e96741ddb200b223997081cf520a6223595311cbe2048222695961c8f20cb213896e61bb82032225b95351c8420af21b495b91b2a2030213c954d1ca91fc220d595ec1dfa1e4a2095980b1bbd1d8e1f8d94cb186a1d151f0a92c7196a1d761e2d922618d01c1e1ed49072171e1c081d5690000000000000000000000000000000000915000021129b0100000000c6100000b817491ae4188a8d751a182400264397701c09205620a892610a000000000000000000008b0e000000003614731200004d103d12f61582817f0f00000000d600ac0a00000011b180000049090000000000006e10fa060000ac10bd107314f081ba111b109e0ea50100006f10f9150000750fbf101e141281040a9a10181000000000030b7813000000005f08e20c0000000000002e01000000000000000000000000000000000000000000000000000000000000730800000000700e9807000000000000110c00006602bd130f1600000000b20ffe1600008b13b112261636880000e416cd1a00003e0f2117f4163385e31488174218cc87a718f61aac1b7e8d2011c41c851f9b8bdb1b0f1e0d1f6492231d5821e8224b97f71d06239324cf986e2043238124fc9ba91e5123b02442995e1efd229724ed98df1ddf2281247398ad1dd222912436980b1e47222b247c98151d682197246896ac1d8b21ba231e98041e7d214323f298022015216a229c9be11c9a20a9213d970b1c05200b21bd955b1aeb1f18216994931b731f68200495521bc81fb7209d94631b2c1f8320e494021bdd1e15206b94091a6b1e0e2007931019761dbe1e92918c192b1eb91f1b922a16cb1bda1c978e000000000000000000000000000000007c120000b50e0901ac01970b2e0000000000790d00000000c205dc18101b00000f146319b81ad9820000000000000000000000004f0900000000d0146514000015107c12cb15e9801603c20700000000f80d20021316ab0000006e0a000000000000c50b00000000420c5f1200009d805600dd0c2e120000360c171163143380e8015910e51200000000a30c221200000000bb0cbb11000000006001380f0000000000007a04000000000000000000000000000000000000000000000000000000000000300e00000000000000000000ec05000000001f80900d940c750ec0027d18fb1a7a1b958d4619f21d1f20c49570185f1e57204695b8131a187e18cd8801110b113a13cd80c80fee119515df00560d910c8d0e990013151f1ad51a9083cd1b1d21df22e995741e9d23f5244d99e61edd2328253a99ab1e9c23cc24f3987f1ef7226f248298c31dfe2290242f98071e7c224a246098981c8d218f246096d81d3921ec22ec97561d7c2177234d98351d5e21e622ba972f1d1a2145223297fb1b9a20f8216995df1b0220d12037957e1a481fa5203294e01a591f9e208d94ca1a7c1fd4207f94461a171f7e20e893ae1aac1ed51fc7936b19971e30204f927619bd1df81e88922b19ca1dae1f5c91041aa21e0e209f9200000000000000000000000000000000771358088814b78000002c138512000085146a1b5a1c2c835a0ff21aa31c1e00280e2c177f19790100007e012710000000000000111400000000f01319150000f208a91004161f8000003c0900000000b0020000d1140e000000b812000000000000bb11000000000000950d00000000380aa910c30c5980da0561105212b900120096081e11000000000c05400600000000dc08f90b00005308aa088e087380d20400002a01360000000000ec0c00000000000000000000a802000000005f000000000000000000b10c00000000ac80bf09000000000c00790e00000000f681ad0ce00de40c3980fe15f516ad1580863912311ab71cb58db9126a15ef153886a20c0b1012148480d111161443148e002e0c0000000055000e18331a0c1c6688371d61226c2492971e2062245525079b1e2001240825809a0f1f0b2419252099ad1fb023cf249299841ec922612426999c201e219322ac9c971d7121b2223c98761dcd208b222398441cd9209f225496031cac20aa2291952e1cbf206922cd95841b98206722db94631b7e202022a894d11b5420bd21ed948e1bec1fe920c2943b1a5b1ee91f42936e197f1d161f059381198b1dee1eef928119071efd1f4a93471b891e08202a95fb18141eea1fd99044194a1ead1f7691000000000000000000000000000000000000000000000000a211fe0de1142e000000081214160000ba0160106d10020000005f113c100000ad1025126f142680e7110f145312b201a5114613e90d2e0022113710c20c7e800f0f5a1100009080d50ac00d00002a80aa07ed0f000018807f0d050f000017807b0c000000005b0100000000000000002e033e0000009f00000005080000000074040d0ff80172000000000000000000b005c90800002900780eb90d480e6803d402c005d51188009c06000000009b006b0a0000740f7c0100000000000000004f16281785160a86ca11c61c311f7a8cd316e617e41623085211e70e1b1343056911fc14ff14f883a4141b19691a7a901d0fb012c712ee815f1415120c1129092314ad0c69089f0820044e10ee1055010119f61acf1b0607ef1d8022412410991c222f245025629eeb1f3e23a224619a301e3b23b624b0983d1eee2288248798061e8e2261241598c81da32266240398481d5f2232242997131dcb21a123b896741d45216c226597601cf1207122cb95261c9a20e6215c95671b4b209221aa94281cf71fd7203d95ee1ac61f16217a94601b901f8f2087942a1b911f7a2083941e1a281f7920e893ad19f61e53208493bb19e81e3a201194ed1a1c1f5f205d943c1a141f6620a9934e1b002016219393000000000000000000000000000000000000000000000000c412e21444186002000008187919000000002b1219150000060f6d186f1ac980e514091c1c1df080151ee21f3320049200008c2197250000191c202064209490ab1a3f1cba1ca9872f1533171314a781a202de0e8e0d0800d00a97110000990000000000000000004a030000000032000000d211000000000000190a69080000220b651100006c010000010b6c0000000000850d9e0c00000000140e301000000000a4109b0f00000000490dd30a00003c003f0c960500000000570e8e010000a6056b0d9c0c6e005e03e30d00008d00780c3a102e0fa4005110e214381423802916a7181f18178a8a0b641bb01d84874d15d0180519c0850f137014bc1348043e0d9b0ed4139802bb104714b113f7090119751bcc1b2708331c0f21a2225d96581ead223a245199471eb5230725db98fa1e40239324d898411e17238f245798c01d8b225f241598d61d5b221924b398251e092284238f98831dc9219523d397511d4721e7220a97c11c0921c4224b96d71cba202a221a961a1c932021224d958a1c582075210396081c112069213595361c991ffb20fa95f11c801f8620f7977e1c231f3d20aa967a1be51e6d207994ce1ab21e2b20b593c51a501eb31fcd92eb19321ed91f2392531ae81d111f5e93000000000000000000000000000000000000000000000000ab12e015eb187d8100009b18281a000000002814bb1500007911fb18111a9f82bc14c11b3c1cb8824c1d5e1ffe1e41920000b52181240000451b731f881f4a90a619311c751cb08814124818d716e982ac09e60f26100b009f0ac9121c046d811800bf0d76080000b806000000000700000000000000000000006b0c000000000000770f510800000a0a3a0e5c02250012036c0cdc062f000000df0edb08000000000c107a0700000000c10a1f0c00001d09eb0fb20db1007a0bdc0d350c89005608910a00007300340dec0cf2093d03360d050f4f099501130c2210f00e108098147516c414d688980f36190d1c738bf714ca162c164a8788101b107f134d01420d2911c90eec007a0c5214fe133701cd189a1b5a1cf787311c592131231596951eef22792468996c1e942303252c99421d1c23ad24f8979a1d1122ac23f4976d1da1212e23b4977d1d9e210d23f897541d9f2145239197181d80211723bf96bd1c4a21d2221f96901cdd200e22e695491c55206421ac95831b32209f21fa94691b25206821e794b81bc71fd8201d95841aee1e6c20cc936f1a301eef1fb3937f1a2d1e6e1fc693661a2d1e9f1fdd93931a771eec1fa7936e1a9d1e2020499357193c1ed01f89916c1a5e1e901fdd9200000000000000000000000000000000000000004508000000000000000000006406c514eb1948000000f615a31800006f104219e619b500b613031bb01bbd801d1cae1e9c1e9890540dc4202d2376889e1aac1dc51d648f41140819c31a7182e30ccf110000cb01641000005d16ac0900000000000000009910fc00000033020000000004030000261100000000c7030000960cb61000003d10c40c00004d022c02000000000200ff0e6b1010143a8100000000000000003003020ba3100a80000000001a070000e60e2912530817022a031d0d3e0db800340e490c990e7c01b10b400400006e004f09bc074c070b80720d210a000016808410ee0fc10db880ca0e5e0ab200c2805e10fe0dc80ab380d50e61090a011c00a7102b0c5e0c26009a0e95100b13f2004b18c6199c1b3489901c0f2127230f97a31db62263255c98c41e5123bf243c991f1e74221d248b982d1dd9217b230597051d7f2129235396f71c5421bd22a0951a1d262197226e96791c2c21de22ec950a1d38218722d596cc1c2a21a522d096681cf2205b22d695c31caf20d4214e960e1c7620df218095231c432081219c95951c1120f620a796691b801fa620ca94bd1b011f382040953f1ac41e5220ac938a1aad1e34206893781ac11e5620ea92001a071ff020399225190c1df41d0191000000000000000000000000000000000f0ab50ba50a5600000000008a0400000000000000000000000023107b1100000000521637150000f800171487130380000019146b12000000002014b90f000008050315741119800000fc142a160000050e17110000ac0000000000b20d000071134814ae0ca90152020000770c1080cf10af0f000076000000000014030000210afe0f00000c8000000000000000000000000000000000000000000000000000001c0c00000000000000000209000082098d0b00007c80f00aad0c00009c80da043a0c410936804e0c280cd00d7b80050dda08330db9803310690d24083481f40c110f7a0fb680ee0e980d0000c6806b08de0300002d800000270c00000000000000000000000000000000000000000000d801cb0f00009517831abc1b1589a41be8207f222f95d61d54221e249c98651e9e222924f398de1dff21e7235a98821db32191237897a61db62170234d97b11d9e211e232298ba1c2621d3228f962f1cac201b22ac95171c5a20aa21cf95271c342034213c95971c1e2010215f96601b05203d218794021cc81feb20cb94071b991fee20f5939b1a531fc320b293a71b591f66205694ac1a281f8020fb93371b071f462051945c1a051f71206893691ab61e5020e093061a311e821f71922c1b2e1f432070930000000000000000000000000000000062031208a909260000000000b601000000000000000000000000fe0e0b1200006e07af1575170780b10c94144616ac8000000000821300000000000000000000000000008a0c0000000000008a0c0000000096020000000000000000990a0000000020050000000000000000000000000000f201000000001402710800001380dd0c2a0d460ab380260f2f10a208cd80580a300dbe058e801a04a5097d0b368000009e06d00b000018058f0f270f44805511e5131c158881291024160518ba818c0701155917648000009c100b160000270dda140817e880a60e6d16bc18be80380f2e1874199380bf10e2188c19c2802a0b4018fe182c80000052153316000000001d11c71200000000aa12bf1100008a14d01653174a805c1a321c6d1cb28ec91dae1fb6206699e21cd42042220398b11d672149235098aa1dc021dd231d98561d83210c24b9961e1e7f2146238a98d91e1a21c622809ab61cbc206822d696631c3920a921ab95ec1b0c203f21dd94e21ae21f2e211e94571be21f2d218294321bd91f23216b94e71a901ff2203d94371afa1e9620a393751a8e1e2f20ef93ae1a811efe1f9193991a601ef01f7993ed19391ee71fb792e519081e651fae929219821d9b1e2292c018951d041f14917f18e41cb21e6090000000000000000000000000000000000000000000000000f70fcb0dbe13a7810000b911ef14000000007d10011000000000cb0fe90d0000060da30d0f0fe180800c600c2209ca80de08830c00008180fe05310f00005c80f60b81114a0cf4808f0ff212201191816d0e871176102181a30d881206107380a10c420b600f8480c30cb10f890dd6800000980ebc040000000000002405000000005c050000000000000000090c0000020df90e920be1801408f3098d096c80b20000004c0400008c07440500008380000000000000000000000a01e00200000000ea009207000000000000d40100000000000000000000f9098a0a220ab780bd0926086606b08000000000000000009e074f0d910865807a02230d9b0e1c80aa119810f311fd81c80f7b148d14df803418991a2f1b6d8c9a1b1a20712146952f1d2e21be2203981b1d642112236997331d562104230d97f81c5321ff226c969f1c2f21e422f995401d132118221f97a51ccf2044224d96d61c9520e621f1952a1b3a20d8216794661cf81f26218b95ad1a6e1f16215094e41be51e7920bb95651bae1e40200495001b9e1e7420a394b11a9e1e6d205394e819571e3e207193fc19fd1d961f2993931a0b1e831fde93f9192b1ecd1ff592fb193f1e2b20c792ac19111fbd200f923019ea1cf51d8b910000000000000000000000000000000000000000a50d00000a12b1104a14628c000011158b150000f0070c1425149182070c3d137013d284251128157315278a38139a16d7168d8c4b148517bd17468d0314a117fe17ed8c4813af175d17b58c0812f615af179a8b0d14b016f6161b8d4e0fd01449157d881e11ee132014498a671080147b138c89a710b9143a14038a9d107b148e14d089c610a2144715dd897f102313e7128689ca10cb111d10308a7610321354127a898211011355124b8b7911581321143f8bdc100e131212e68a600e1111b611a088b510e6129e12888ac7103d12ae11a18a2d11f01239132f8be110c712b912ed8aad1138128011b38bc712191370127d8c7412ac13cb122b8cf3124c14e913618c751274149c14ba8b5b13bb161217dd8b2e18b01b0f1c0091471c342022211396671d7121e022d8974b1ee12143237898a11dbd2199234498931d5d21bb22bd97e51c03216d221b971f1d0b2196221b97621cf6207b22ce95461cbf206322cc95921c9220be213396e81c602067219897191c072054218f95b81b851f33213c955a1c371fc9205196581d151f5620a6981a1e0d1f4720b299481cca1ebf205a96451b381ea1200c95a619e11dd0206592c61af11dc51fe393611ad31dc81f3a93e618b01d951f15916718211c221db5900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e60fed01de05dc16b81542135c14f91f861637102a10041f9593a49407906818ed965e94d69085189b916894b892e31d73165d902d916b1dac9da5998698fb1b5c94e291da8f0a1a94105d017d05571ab519cc01400c781c82193c0ac7132b18c10c0000a50c000000000000dd010000000000002d8d000000000000910b000000000000c41800000000a59c659ec3830000c491328cf40300000000629c00000000938b71061d080000a684fb19d905000035934a18911a4e956f9b6b242722cc97b89b261c171f0000bd97779b3c120000f9972210910d0000e69eb88e27200000e1989ca1af1a00000000d4a000000000d9892d9e3c0a0000cc986da1d0190490a399ae9f9e1c8b8a1196de9a021aa58060888a023c15f302930c8c0c8d16bc8da5945d989718ea918e98869a7f1aa494719a8c9cf61a4095469b179d241b57958a9b229d041bfc94069c319d221b9d952b9c469d061b1d968a9cab9d4d1b1596ae9cc89d4f1b2b96d19cf09d4f1b0996c49cf69d221bb096d89c139e0d1be197069d369e151bbd97ee9c429efd1a9697c69cc69d8c1a2c97689c319df819fb95359cee9c8619d195e29ba69c121939964b9b689cc9180e96019c8a9c4a1913962c9cd89c371a0496809cc09d5119bf94979aaf9b391700000000000000000000000000000000240174014801ff145814c516da177920001138118f125a1e86887e8b5c88e41472915192f290bb154c8ced908691ef1e0e1548067802121d06958a9293913a136787c288d5859913e1152f855086131cc7184e121215821fe316560cef133d1eff019580e100a6060000000016810000000000003198000000000000f1070000000000005e130000000000007b140000000000001516000000000000bb17000000000000ec17000000000000211700000000498f4219af137796a59a1e259420db97b0984021051e0000ad8e939427040000948a1a190b060000bf95081e041b3d94da98d6152e1e00004f855c9ad10700000000f09b00000000169a83a19e1a7291669b54a02a1f368efb98fb9c621c75859007a40259101a0fbc16df176b0e32936799859c1b1a3396f79be59dc41cea95739b579d571c67978f9c549ea41c2598809d459fbe1c2398e99dda9fe11c2998f09db89fad1c0098119ed79fb51cbc97ac9df59e211c5f975d9de69eaa1b1697249d979e1c1b8a97189d829ef41a4b97f29c419ea81a2d97d69c0a9e4f1a3f97d99c179e3c1af696db9c319e2b1ae295e49bf79cda18fd95249ce19c1819c396489c429d5e195797509c2c9da019ec964c9c2a9d371a8795599c679dd9194d942e9a259bde1600000000000000000000000000000000ce053b04d508ac146514ca168c18d41ecd101b158815171ea8088608f2099b170a8de78e9790c41591819a023f03ca1ed811a0104f11351e5581468784886d1602014085b385e416e60aa48ba68a901d6511190c2312c9209511790e9d14531f48030082e003b40e0000000093870000000000005b95000000000000d4810000000000009610000000000000dd1300009e81a08065162200000000002417000075898282cc17a700000000002c17000000005e911e1ab2111297b499ec24fa1ce7980499fa23c21c0000738fa008d51000005e8b208f960c228a3e98da1d671a4594339af79dc31c00006a902d9efa0f00007c8c499c280d0000509b17a0991c8e92239c38a0201f7f8fda99469dc81c6e8cf792e4964516aa03490e6f088114bf923b99dd9c971ae094bb9a559da71c2a97b09cd29ef21c7198d19d17a0b81db5982d9e3da0e01d7c986a9e56a0d41d54984e9e35a05f1d7098529e49a0231d1e98059eba9fad1c9d97829df99e241cb6961b9d829e561bdd96459dd19e541b9297379dd19e641bd897429df19e5b1bfa97199d6a9e0a1b7c97289d739ee51ad396249d8e9ea91a8b97a39cba9de3190b97719c6c9dae19ed96229c249d5b193396af9bc99c8f190495ce9be49c3019f8940d9b309c18170000000000000000000000000000000076036f080e0aa6159411891557172b1e80069904d50542106c803384a4849310a690c5929c9594156e81c002a6039b1fc9100913b514131f4d068e043606a11348009d80cb0012108300cf0074036012e50c000a1a12c8208b0b7f8a930c852124802d80b580ac0000000000e088000000000000c6950000000000009786000000000000510c0000000000005c11000000000000d91300006383ab852e1626022d850000c716000000000000e416000000002291501aa113f696bb996025521dd494e5984c23081dbc915e95a10b4f190000a499671de81d98983d9cc21e1b1f7f8808997094321c0000bc8ab69e4f0e0000e0917b9b94140000839a3e9f5e1d8e951d9cfe9ee51e45941a9baa9da31d218d76902994c0137c82150d4b8c39153697039d25a0031d3b995a9ed0a0451f7699a29ed9a06b1e8999079f11a17b1eb8991b9ff8a00d1e3599219fe7a0e61dc8989f9e71a0661d9098be9e7da0411d7c989c9e50a0ec1c5f98609e44a09b1c1698a59d329fe61bc597559dad9e3a1b99969f9cef9d241ad996aa9c269e341a0d97c29ce69d1f1a00968b9b169dd2183294bb9a979c28185695a59bc49ca018f894699a259ceb17d795e79bbe9ce218bb96849c789d1d1a12963e9da29e1f1ad393549ad89b9917000000000000000000000000000000003708c30b3f0e25161d11a0146316551d2c0c060e360f1117dc06f5016c0ad41844942897cc985c1b5f887c8682887e1cb10334081b0a211400001581d5834606338056826601a50d97008a0195097d151a0aa909e6121920c507a9882310d11f7b80df82ec82390a0000948c9b90bd0f00004b910b97b31000000000b78c00000000000000000000000000005b090000c0903b8c2510b00caf94a5969d18131ac19301929c14cd1200000000af140000498be69378198715b2967a9b4124de1e1b9486994b23f61d00007d949d12b81500002d94b28c5b146f84b893cd1bc2150000f88ed4987f0f000000001c9800000000ee8e1899580f52865b9b4f9ef31c0c96e19c289fdd1ff48fcb994f9d951c9d8eb394a8966c131a9056958b98e2150896a09cfc9f0a1d3f98239ed2a0ad1e9798969e09a1281e4199d49e29a1311e3499079f2da1e21d95981c9f72a1c81d0399f09ed6a0681d2799d19ea8a0261d2799619e55a0aa1c7799f89df59f2c1ce298a49d529fc91b8f98879d4a9f651b5b98569df09e0b1b4b980e9d6e9e8d1abd97cb9c149e171a0398859caa9dbd19c296cf9c309eea19e297fb9c519e1f1a2397929ccd9dce19f796129c299d5719ab964f9c759ddf19d3943d9c5f9d37198d96449cd99ca11800000000000000000000000000000000e1038c06bc0a1211b20d5411491260190d099b0b200d3c14b9016681ee08a314808f029453952f151a86b389208c891000003a01ef00b108000000006f8400000000028a708e010def9087993c9ca61805909f965694ff209281af8c3b8589208e8054866d89530d1483e58ca48f5d10e48060940b97bd1300000000368c0000000000000000000000000000b2810000e190588e2b03ca0f8b9449970e15d61ab591d991cd106412000046860e12d004000000009e13000000008f90581623100000a2966020451900004b927f0e111300005990da8ea20f0000f0957518ea1600007d9127981d1100000000bd95000000005292a598ae126d915b9cfe9eee1d6498429d899fcd1f78916b9ac29db81c0d8f05949496ee11ad905495f39817150196679ccd9fb21c8998859edda0571f5899eb9e49a1eb1e5299f99e41a1a41e9898b99ee2a0ea1d7098919ed2a0831d8198889eaea03c1d8398af9e96a0351d2a98679e5da0d51c4698319e43a0781c2598f79d12a02c1c40980c9e0ca01f1ca598019edb9f0b1c8e98d19dc99fd31b21987e9d1a9f641b8b97609d019f041b8d97d19c6b9e291aa597db9c1b9e371ad597fc9c409e801a3097ca9c2e9e5d1a6496079c659dc41901948b9a2c9ca618c992ff995d9ba51600000000000000000000000000000000ef071f0bc10e4114b10ee9139714461a770e0212a012e618d910cf114714641cde8baf8ecf8f97198b822285b102191695006804a004b60f0000138366870d099781818c049065100095e899c79c2219f29049959d908220188436032210c71f0082808755887a1025880e8c4090eb0f65819f945f98f9130000d4883c8a8b090000000000000000000000000a8100000000000076840000d18c1b84150266008d8c108dc802e50200000000d60c000000000000e90c000000003190e10f900f00008a95eb1ab9180000f191af92b6110000998cbe90a20b00005297ac918e180000e0903f96851000006584a9930d0400008b90e695d00ff2801799579cc918c391f494ff963c140000958df291a00c0000d1869d8ceb02cc88848c4f8ecd0f6496199cfb9efe1b3299549ecba0cb1e4699b79e17a17c1e3499dc9e46a1861e1a99eb9e2aa12b1efa98ec9e0aa1fc1d9298c49ec4a0941d79989c9e98a04c1de6974e9e53a0d31c6598249e47a08e1c3a98e99dea9f301c4198d69df19f011c7f98c09d829fb21b7d98919d7c9f721b12985e9d2b9f161b7c974d9d1f9fc91a4a98b89ddd9f521bc098749ddc9efb1a5598f39c1b9e741a03986c9c899dce198d96fc9bfd9c93199595399cb49d03195692d899169bcf15000000000000000000000000000000002f036f05ed0ac110cc0ae70fd410fb17c8066d0ac30bb3114600bd005c03b3107888818c698e26103c822e8345879d0c0000a600100486040000000076800000000089808b0318092a806981c80b33156f85028b5e112621ef889d9033078d224181a783e586820b0000e68b778d560f000070915396bc12000078823c84e6020000000000000000000000000000000028850000a1860000018afa813d891380000000003d890000000000004d8900000000000088890000d488c391758c32110000779808881e1c838aac94a693441500008e915593311080889e99069a751be68ff8944f98191400000e87e1931405000025921a9711101b882099679c4218a0920f96fe97321400006f91c6946e0e0000cd8b5690b102258a888d2791620e2b96fe9a2e9e2f1ce699aa9ee3a0cf1fb99a8a9fa2a1ac1fe299949fd1a1941fea998d9f98a1f71ed199759f9ba18f1e8099db9e0ea1c21d9799999ebca0611daf99629e7aa0fa1ce399839e7ea0c91c5699049e26a0491c7099059e2da03c1c8f99029e1ba0181ce199eb9d0aa0d11b7099c59db09f4b1bca98b29dc89f0e1b4c97229d139f291a3e98009d939ef3196d97159da89e4b1afc97a19cfc9dec197496469c799def191f950d9c5d9d06192b95419b539c1d1800000000000000000000000000000000e5037a06710b2b0f750ded107e12f8186d08a60b370cbd119f013f08710b4f118083298a498ddc1073809a805d81590c0000000081040000000000001e000000000062007507ba054f001908af0dc113290835113917d020e3019a0a471343216480a98122017b090000e889238c210d0000788d1e94aa0e000000006c8700000000000000000000000000000000000099806881178a3380c9810000328c000000000000868d00000000748605924204000007894996e208af914195d095041686888e983d98901d308c409156938111008c5e90af9327105f8f2a98ee99f01ad3925a951e98ee1400004e8d1595390c000096924798a5107a8de299079d0719ce9152952d98b0130000a5906694bc0d00008589aa8f2401a289bb8ee1915b0c2498bc9c0fa0f81c3f9b7e9f77a12720f99a23a0f6a1e01fd19ad29fb5a1721f6899ac9f86a1da1e31999e9fada16a1e38999a9f91a1ec1de2986a9f9aa1b31df798ff9e05a1241d1199229f01a1041d2699fb9ecca0b21c1899f39edda09e1c7e99e49ec6a0711c1b99649ebba02b1cfd98de9de89f6a1b4898ec9de99f7c1b4a97d59cb99eea196197b19c1c9eb3199696899c2b9e9e198c975b9ca59dae1984960c9c559dd219be95ec9b2a9d6e191697909c819dcb1800000000000000000000000000000000f20320078b0c3310f10def119613b518ba09be0c700f9d1290035d0b6c0fbd115a81aa84fe8404115480be007301660d00000e011207020400000000750000000000b6007c0a55090000ba08bf0e7a148f070b1077151721e105170b9014df2150814c8134818c0800005686a88c2f0a0000918d9c958e0e00000000fe840000000000000000000000000000000000000000bf80c0871e8000000000bf89000000000000d28c000000000000038d0000000000001f8f0000d88eb2916d93bb12f28bd9965f97071c9d8c8a8f0b92f6110a8d4d90f8921313c491ec98889ad01b3c8f94940497fd180000958f6d95e2140000ae932f97aa167c8b1499219c741aa78e589284963c1300009b8d50929b0d00005b87d98c2d06c585e08c5e9063105f95849a129e291c2d99519ec8a0981f429a5f9f7fa1811f689abe9fb1a19d1f9299da9f91a1041f9599b49f99a17b1ea499df9f88a1281eae99e29f9aa1021e9499869f51a18f1da999459f56a1341d069acb9ee2a0cd1cf899aa9e9da0a71c8699549e52a05e1c6599339e3ba0321c66992f9e0ba0231cf098659e26a0331c2f98f09dc09fa61b9c98bd9d3f9f651b4198899d259f451b3198d09c619e651a9b975b9c789d461add952e9c6b9d14198f927e99669b3317000000000000000000000000000000005a033d06b20cd5102c0f56127014111ad2082f0b670e37124204700d3c0f9411e00192094b0dc80dd200d906e5093a0b00000202a505d506000000005d01000000000902720a780700008608ec0dea13d209fb11cb16ff20130abe0d9914242200000000c7000000000000006e8000000000178ee093450e00000000b482000000000000000000000000000000000000000000007883000000000000f8840000000000005885000000000482be84c60000008d8338888d0389890990fb907f13ed8f7d98f398951db78b328f9c9195119986858dd9908610288ff797be983f1b00002e94a0969c140000c4852c90140400002993a1965511b08c2398db9af91721909792b59598110000368c6c917f0a0000b186b48a2b03dd83a589eb8c960e4b95f199649d891c8799039e8ea0fe1f569a239f4ba1881f3a9ac59f9aa1641fc999fa9fc2a1e61ee699bd9fb2a1681e9499e89f91a1141e9899d79f8ea1de1d9b99459f01a1341d22990f9feaa0e61cee98bc9e8ea07a1cff98c59e8ea05c1c1a99959e74a03d1c3099a49e66a0391c4d999c9e50a0201c65984f9e3ca0e01bf4970e9df49e121ab897ff9c879eff19a797ef9c9f9e291a15989d9cf69df2197096349c819dbb1998957c9b129dda18c3923e993e9bf71500000000000000000000000000000000be010504a8093c0eac0d88111614c618c2061509260c321100008b08890d360e00001306330bc50a50003002ae039106000000008c0200000000000037000000000049010309b7048a00c00a7b0f97143c0aff12f117ec217d02160b1319ae2200000000ce00000000000000000000000000d78bdc91da0c000000009d850000000000006c80000000000000e28000000000258189845080000000001f870000000000004b85000000003381c085d50000008c80b988a2004288468d818f2311b68a6995b396311bde86b98c3490ae0ee784818c838fab0e4591b5971b99d21900006691c094f4110000ff88738fb5070000f9919a95ea10bb8fe7979d9ae71706902a931696e21200009e8d7091410c0000b5857b894580eb84fa8c298f4d8bd095019ba89d211ce4982e9e67a0671fb299439f14a1231f049a919f57a1521fe799e89f93a1f51e619aed9fafa1ab1e1b9a04a081a17b1ed899c49f66a1fd1da199399ff2a0671d94990a9fdaa0221db899ab9ea3a0b71c539abc9ea0a09e1c699aa69e7ca0801c469a829e5ba0451c5b993e9e18a0f21be598119e21a0b81bc498ba9da39f021bbe985b9dc59e9a1a0b98549d129f931ae197349d2b9fc01a6a98759d129f791b31983d9e2ca0ae1bea95239c159d5b180000000000000000000000000000000043034306710b7d0e570ec31172135218b1082f0c410e0012b7026b0c560f4d100000c008f60dea0b8e000106b30a63080000cf02f207d50300000000a4010000000067027b0a470500002908100db0122108171090155e21860ab904a4119a227580ad80d6802d0500000000098200000000d28ee892410f0000158197881501000000000000000000000000dd80000000000000c782000000000000de830000000001811c8633000000e9832185b502000000000a8600006182928cec8e3d1170915f99779a371d4688438f348ff411ec89b18c1d8e1a12b395559bcb9c991cfb8b0a9136922f130000dc8ab88c870ca98a63921a9517121f908697e1992b18d590dd916f941c120000098b768f110a00003b833987bf804a80cd833d82058ed996f19b1e9e4a1c009bb89ef8a02520c19ae99f93a1a61fcd9af99fb8a1d81f2c9a25a0bea18a1f059a0ca0aba10a1f2c9abd9f5da1711ee299ad9f70a1221e1e9a769f30a1b51dbe99539fefa0751d4699fb9ebca00d1d5c99de9ea3a0d21c6499d29e90a0a51c8b99999e6ca07e1c64998b9e44a0521c14995c9e34a0201c7498ee9def9f8b1b3399b49d3e9f421ba0988b9df89e0e1ba798eb9c659e751a0f986d9cc49df419c096849ba59c8d1819957f9b979c7118000000000000000000000000000000006504d807320c10107e0efc124f14a919aa084f0c2b0ee110cc05f80d0f11db0e5d033a0b940f760c0000a2052c09d60a000084025d058b070000000077800000000042000605c70000001e05f20905088c013d0b3c0f86141902101073147c1e958197001401fb0b000000006b8200000000688bee90970d0000538109875301000000002681000000000000ac82000000006083228899800000dc8033892380000000008685000000000000e0880000000030884b8d630400008190f8914e12458e40980899071d4a89228e828f8a108188b38ae58c2210d192879684982f190000878e51922b0f0000858ccb901c0a038c539434978111db929c994a9cb018199320979a995215a08437968c996a120000368f919185016589458f9d94f78f0498ac9ccf9fe71ce299c19ea3a11920939a279fc3a1671fd69ad39fb1a1561f539a15a0c8a1171f5d9a14a0bca1ad1e369a11a090a1471e1f9a03a0a6a1061ef099b89f70a1bb1d279a899f29a1541dd4990e9fc2a0ed1c1b9ac19eb3a0931cf69aa29e8ba05b1c269a4d9e46a0221c2199f39d03a0ab1bbe985f9d449fca1af5976e9d429fba1a8b985c9dfd9ea41a11983d9dec9ea01a5998c89c2d9e291afc978f9cd99d661aaf95459caf9d3a19e494699a089c911700000000000000000000000000000000b306320b6e0d2b1427116315e8167b1b23020d09fc0b58100000dd03fb05da0a000069056c0ab609270253044909150800000401eb05b20100000000fb0000000000a5030c0abb0555007409b40d6c132109f3113d163d220508830f99154024388183803301e50900000000cf820000e885818c53913a0f00000000c8860000000000003d820000000000006687000000006c84628743000000db81a588190000000000e287000000000000ce8a0000000055881b8e75050000c490ba934f129d8d6797c798401c8a882f949395ff14c68845923594451227903298c299e01900009290429460100000ed8a7d917608bc86c3922096fb10288d1b971d9aa8160a912193fc9517120000cb8e1492390c0000ef89708c848063806f814602cd8ea5968d9bfb9d6a1c059af59ef3a0fa1f6d9ac59f8ba1431fba9acd9f87a1161f409aa59f3ea1871eba997c9f21a11f1eae994c9f05a1b51df299509ff2a0921d43992c9fd2a03b1d4a99c39eb5a0d81c1299969e8ea0931c68996a9e5ca0661c1d99579e3da0371c1e99259e2aa0091caa992f9e3fa0f91b5a99749e8fa0f51b759aa59e62a0051c3d99829d1a9faa1aa598d29c879ef2194a98cf9c3c9e0c1a8b97769cd19df8190297f49c809eab19e293a89a449cfa15000000000000000000000000000000000709190ea40e9715b2154619c51b1a20aa136c18be1afe1ed009d00f1e12791461050d0d64102b117f019e09180d200d0000bd0269096d040000000067020000000083037e0b8606ac00380c1410f313dd0a2b146c177120db0855115b157b2273819680bd03ec0b0000ad818c85f001828ecb94c596c717e78a6892da90731eb3881183e089e909000037857a8bfc0300007b843a89ec0100009c84648bce010000ea865e8c980300007b8b33906b090000c79256957015468fd898829a061ecd94ce99f39be11f968f5a955b9719165f8c1f910e945c12c59108989299701a8990ee921095571205836b908c93f90fa881ea91cd94aa11658464964b990318068f6091dc94ec100000f78c2e90e10b00007186e889c2820901a4067e0b7c904b96a19be89da01cf399df9ebca01e20739af89fa9a1961f7c9a04a0e5a1311f629ab79f87a1971efd99e89f7fa1771e91999a9f63a10d1ee399579f23a1c41dce99339fe9a0511d6199dd9eada0ea1ced98429e4da07c1c2099199e35a03b1cd498f49d2aa0151ce698c09d05a0be1bd3988a9d719f3a1bf897ff9cec9e841a1a977b9cf79d9e198b96349c749d45197597699cf99da4193c98a39c049e0c1a5a98ea9c509e051bbe966c9ce09dcf191e95fc9ab29cb116000000000000000000000000000000000a077f08a40a88178917571a641c9520f414f618ae1ab7202f118c143716941cbc1117168c18911ea910ad130815cc1c120d08133015a61d96007a03690826153502140c4a104419950bca1269164620ca0e7e1578184f23db0cfe10d5146021d180fa002a05be118f81dc88058bdc11238c9e94ec9664180000dd8cfe0c161c0486be80b301c50d00009a863e85f80a0000af88a48867090000ba878c8aff040000f386f98aa4030000c18a018f41082887d49133942614ea916e99da9aba1fd495d59a4b9c34218e90ab93bf952c17109057942d9649180b94b99bba9d701e4596d29cc19e2120a0917994fe96f115398da39422980c16d68a5b99509c631a4f913996fd98bc161993b3997e9cf21bb5907a9460977915f789c58d1c925414c395ca9b4a9e721ccf98ef9d6aa0431f7799cb9ed8a0221f279a6e9f45a14f1f8e9a05a08ba1381f8a9a1ca09da1f81e1a9aae9f4ba1521ed099f19ef5a09e1d31991e9e5ea0b91cd098359d4c9fc31b4b98ef9c069f201b6c98149d1f9f021b0899339d2f9f171bf698649d529f1f1b1b99a29d469f351b8d988f9da99f1c1b32983c9d119f931a3998129d9e9e291aba97d99c6c9e011a1f98dc9c499e251a0498c09c289ec01ac196a09c289e4e1a76944e9a809b2f1500000000000000000000000000000000e8051008fc0b33160315e718061bbb1fe1132e1880191120bc1200177218ec1c771458186b1aed20b813e018931a69211013b517281a8b20c40e3c1282144d1be009071184133c1cbd0b4f130617b920a3023e141418422212054a0f97150a21d7817f01b006d1160000d388ec89d8111c8ccf9356965f1629883191bc8f261dd8899885db88bc110000d5852387430800005386a588f4020000a58475895e010000a487bd8b8c020000808afe8e4c05c784009260947313dc943f9a679c33206797139c549dc72186926595f597d5163b91e595759842189392ba9a249d901ed194989a049dbe1ebd9133954f986415628f9894a99758155394cb99c79ca11acf943398549a5c1769932c9acf9ca91bc392219777994515ef8f1496b69832138f95b89cf59e3e1ccd98f89d05a0461e1e994d9e57a0e51d8299579e57a0ef1dde99c89ea1a0e01d239a479f05a1f91d209a159fd2a0a31dcf99e89ea8a06d1d8599b39e8ba0091d9d99a09e84a0eb1c9c99979e6ba0be1c7699849e52a08c1c23995f9e3ca0501cfa98279e36a0171ccb98f39d0ca0e91bd398c49dd29faa1b13981f9d199fae1a0e98879cf49de8191b984d9cad9d92195e98129c919d46194d99009c639d8719e197059c719d57194d95d89a3e9c0a1700000000000000000000000000000000c3075e0c410dda154d152319f61ae41f5d13fc175b19961ff2118416f917b81d24144b18e019f6204c136e18161a6b210912a11610198b20c10eb310df13bf1c2f0a910fcd12b01c0c0c88110615ef20420c8c120916962201055f0fc414e7205c819b83c001a3150000f386698857104e8a2f947b962e164a87cb909e8d4d1d4f883a86dc8850130000a186f688350c8288f08c1f8e1f135c8a349487959e1cf58edf8f5e915c130000048d8790040d798999914194c9148a923399869b6f1fe795af9b419db02052902594d8956316898d3c9211951e16ff949c9c849e1820c8974a9d889fa7205c904195b097f916c98fdd95d898c4185295d29c1a9f791e3098a89d2ea019205498419dac9f0e1fb8977b9bf69c501bac98be9dde9fe11e4599c29ea8a0fc1fe0993c9f0aa1581f039a719f27a1381f369a9a9f5da1d61e459abd9f51a1751e409a8d9f34a1031ee5992f9fffa08b1de099ab9e7ba0151d22993d9e29a09b1cfc98cd9df49f351c0599ba9df99f071c1999949dc99fb41b2099809d969f5b1bc198669d609f3a1beb98639d5c9f341b6b98089ddb9e851a68969b9b2b9dbc18d295fb9b5b9d08190596c59b769dff18fe96ea9b569d18193c97d99b359d51195b95b99a909c2a1848948b9a0d9cf21500000000000000000000000000000000d080a5040c088515cc15f219031c5b204912011683186d1e380f43147515151bb213eb17a1198520ea13a518681a72216711901555183320300c040f191270194008060de41015198104230c7e118b1c1b01ce05ad0c43196682cf02620f221dee828e83b801ac14e083f787ea84c3140d8e0193df92fe1f68909992e490ba2023872d8aae89981200005b83be871e08be86068a968cfc10648c0294e5945e1ce18b5c8e0a90e8110000ec8b1a8f6a0aad8c179125933d14fe94f59bfd9c58219297829cd79dd0219690e392e4944d15568c7f92cc943c163495a99c709ef81f9e98179d2a9fab21ea954d9c539e72207d92d196e3983319f3956f9c039e8f1f84976b9dd29f87200898e99c419f301fd396b39aa09c8c19c097fa9c069fdf1da198ab9db39f6a1e11994d9e49a0661e5899619e5ca0471ed6998e9e83a0271e9999c99eaca0fd1d339ab89ea7a0c41dc099fc9ebea08f1d9e99c39ea4a04f1dc899a09e95a00c1d339a8c9e7fa0c01cec99289e22a0551c5899ba9dd19fe71b8d984c9d469f161b3998019ddf9eb21a4798e19c839e671a1898f69ca19e831aeb97f79cad9e6e1a0898b99c4e9e331a8b97679cd59dc719a197379ca99dbe194498829cde9d681a8297019dcd9e4f1aea97ee9ce89d8019000000000000000000000000000000004d1316156d177f190515b1182b1a601d2911cf142516bf1a8b158118971a442024162319b01b392111154a18ab1aa620c212aa15aa18781ffa0c78105c139519a108980c3111c9184e050c0a75117b1b0d81fe01850c1a160a842688e509ad138784bd89e1814311ee891e8ea68bcf15f6905195fa94a51e08925c9523945720b686598c0a8b4614e786078c0b8c5d141d92a7978798f21fdf9386985699ba205b8fd590e89184189094a79ac89bcd21c098dd9c799d2e24c898e79cd99dd4227b98519dd09ea022d698d09c659ec820e5922295ff9512182b94e69b319de61e9e981e9d7d9ee7206096429ccc9dd11f468cd4920496f8148c90169a669c601bd388508fc8918c107d81748d0c91740dd98a0a9365954a0ef894e49ad09c071c3b98c89cd99e191e0f99409db39fb11d1b99909d01a0901d0c999a9de99f421d6699a39df59f0a1dca98c09d21a0e91cb598719db59f5d1ce2989e9de69f4d1c18999d9dd69f2a1cec987b9d939f031cf298479d529f7b1b0799359d2b9f271b0e99119dea9ebb1ae698fd9cde9e8c1a1e99189de39e791a07990f9dd59e6e1a1098a69c499ee719e997429ca59d6919c897409cae9d6619cc97279c7f9d471932981c9c439d9a191d961a9ca09d4919bd957f9ba19c721700000000000000000000000000000000b912501679188717b9148119171b771daa104c148615721a79130a17091a33209c141d18de19ee202d13fa15fd18aa203411da149b183220190f6e113e14b51d320deb0f3715281fc107bf0bfc130b20fb010f03ca0ee11ddc8a538ef10da820868e3f903505a2210a921b94e510a4219493a394e290a421b594c2968594d921119658985198dd21cd9630992199a4212897f499d49a67211197129a689a4b215697049bb89b262165970e9c9b9cea201498169cfb9c8620c6983e9cf49cac203e98e699e19a011fe29445978298ac1b9498cd9cb89d801f239ad19def9ef320809a749e959f3421869abf9ede9f0c21659ab79e44a0de207d99ec9d729f10201998fc9c799e5a1ef997169c279db01ba798e99cab9eb11d6499cb9dd69fbb1e4f99989dce9f0a1e9899bc9dfb9fea1d9898669d2aa0511dc898659daa9f101daa98449d499fcb1c8798409d549f8d1c2b98289d449f1e1c5398089d159fc71b3d980f9d319f781b80981a9d229f311b8f98079de79edc1a8c98009def9ed31ad5980a9ddf9eb31a3499f29c959e931aa798d49c5a9e361a1f98af9c6e9ef2193197119cc79d2a194197109ca49d29195b97079c879d37194297e69b579d4719cc967e9b1a9d44197a95a99a939c9218ba930f99e39aff1500000000000000000000000000000000e310f21476163815c816da1a781c9c1fe21441187b1ab61f281599190d1c4921b8148a18441c10219b143c181e1b2d21db129d16b31a28218911c51561191b21020fdb1346191d214b0c1312bb160d210a068d0e6f150f21fa85b603ec12f520808c938c4b10d4205b8e0d90e504c1206c90ac91c6848d20ac913d93e38d6420aa92629449914120a1933c951793e71fea931b96e994891fc2940597c2953e1f499558979896351f2997ec9816994a1f53977799029a451f65976899259aa71ebf96a4991c9a8e1e2f97e799729a751e0798dc9a349cd11e8598209b739cba1e6098679bb69cd21e0199659cc29def1eda98419cbe9d501ff298929c379e0f1f009acb9c909e611e6099359d3b9f351e4b991e9d4f9f221e26993b9d4f9feb1df8983a9d5b9f931d0699459d709f451db8985d9dc39f301d0f99779dca9ff51c15997e9d01a0c01c2899729dc19f7e1c1b997d9da69f661c0899639d769f421cf398549d4e9f141cf0984a9d3e9fbd1b1f99229d109f601bd398079dfd9e211b0c99e09c9c9eb11ab598a89c5b9e451a66986b9c179edf195c98399ce29d80193c98369cbc9d4f194398329cac9d6619d8973f9cc69d80190098489cde9db119df97409cc09d0b1a7597459ce59d7a19fd941199d39aac1500000000000000000000000000000000b0135717bc18b6152817df1a941cdd1f7415c819211c24201e151219c01a7a208a146418a81a862035148c17371aa920d3122d1637199b202611e114b6188920dc0e5b1219177a204d0cb01041177220c3053c0c8f157920e3814b0368135920148c6c8d840f1720dd8fcb915784082051910b94e090f11fd291aa94e991831f88925395e3934c1f06949b956f94311f159441966995041f2c9469974a97001f9e942e980597451ead956f981b99ec1dea95aa983a99e51d6b963399fb99b41df896c399d49acd1d2897089a469bc21df396879a109cec1d4997879a3b9cc81d9697f09a6d9cbb1dc997059ba79c981d0398139bd99c701dca97289bf09c5a1d3898de9b999d561d7298349cf39d351db7988e9c529e2d1d8798749c3d9eff1c67986d9c209ebb1c6d98769c4a9e761c4998869c509e4b1c6798899c639e281c5498b09c959e171c7c98b59c9c9e0a1c5598d49cc09ee31b8798fb9cfb9eab1b9898e39cee9e461bbf98c99caf9eee1aa098869c319e6d1a4c98389cb69dea190f980d9ca19d91191c98e09b6e9d5619c097f39b6b9d4719e7970b9c7d9d3b198197289c989d23199397189c759d19192597fd9b669d2d191f97a79b399d27197097709bfe9c5a19d995919a4e9c4018ee95d29a329c9917000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e60fed01de05dc16b81542135c14f91f861637102a10041f9593a49407906818ed965e94d69085189b916894b892e31d73165d902d916b1dac9da5998698fb1b5c94e291da8f0a1a94105d017d05571ab519cc01400c781c82193c0ac7132b18c10c0000a50c000000000000dd010000000000002d8d000000000000910b000000000000c41800000000a59c659ec3830000c491328cf40300000000629c00000000938b71061d080000a684fb19d905000035934a18911a4e956f9b6b242722cc97b89b261c171f0000bd97779b3c120000f9972210910d0000e69eb88e27200000e1989ca1af1a00000000d4a000000000d9892d9e3c0a0000cc986da1d0190490a399ae9f9e1c8b8a1196de9a021aa58060888a023c15f302930c8c0c8d16bc8da5945d989718ea918e98869a7f1aa494719a8c9cf61a4095469b179d241b57958a9b229d041bfc94069c319d221b9d952b9c469d061b1d968a9cab9d4d1b1596ae9cc89d4f1b2b96d19cf09d4f1b0996c49cf69d221bb096d89c139e0d1be197069d369e151bbd97ee9c429efd1a9697c69cc69d8c1a2c97689c319df819fb95359cee9c8619d195e29ba69c121939964b9b689cc9180e96019c8a9c4a1913962c9cd89c371a0496809cc09d5119bf94979aaf9b39170000000000000000e60fed01de05dc16e60fed01de05dc16b81542135c14f91f861637102a10041f9593a49407906818ed965e94d69085189b916894b892e31d73165d902d916b1dac9da5998698fb1b5c94e291da8f0a1a94105d017d05571ab519cc01400c781c82193c0ac7132b18c10c0000a50c000000000000dd010000000000002d8d000000000000910b000000000000c41800000000a59c659ec3830000c491328cf40300000000629c00000000938b71061d080000a684fb19d905000035934a18911a4e956f9b6b242722cc97b89b261c171f0000bd97779b3c120000f9972210910d0000e69eb88e27200000e1989ca1af1a00000000d4a000000000d9892d9e3c0a0000cc986da1d0190490a399ae9f9e1c8b8a1196de9a021aa58060888a023c15f302930c8c0c8d16bc8da5945d989718ea918e98869a7f1aa494719a8c9cf61a4095469b179d241b57958a9b229d041bfc94069c319d221b9d952b9c469d061b1d968a9cab9d4d1b1596ae9cc89d4f1b2b96d19cf09d4f1b0996c49cf69d221bb096d89c139e0d1be197069d369e151bbd97ee9c429efd1a9697c69cc69d8c1a2c97689c319df819fb95359cee9c8619d195e29ba69c121939964b9b689cc9180e96019c8a9c4a1913962c9cd89c371a0496809cc09d5119bf94979aaf9b3917bf94979aaf9b3917240174014801ff14240174014801ff145814c516da177920001138118f125a1e86887e8b5c88e41472915192f290bb154c8ced908691ef1e0e1548067802121d06958a9293913a136787c288d5859913e1152f855086131cc7184e121215821fe316560cef133d1eff019580e100a6060000000016810000000000003198000000000000f1070000000000005e130000000000007b140000000000001516000000000000bb17000000000000ec17000000000000211700000000498f4219af137796a59a1e259420db97b0984021051e0000ad8e939427040000948a1a190b060000bf95081e041b3d94da98d6152e1e00004f855c9ad10700000000f09b00000000169a83a19e1a7291669b54a02a1f368efb98fb9c621c75859007a40259101a0fbc16df176b0e32936799859c1b1a3396f79be59dc41cea95739b579d571c67978f9c549ea41c2598809d459fbe1c2398e99dda9fe11c2998f09db89fad1c0098119ed79fb51cbc97ac9df59e211c5f975d9de69eaa1b1697249d979e1c1b8a97189d829ef41a4b97f29c419ea81a2d97d69c0a9e4f1a3f97d99c179e3c1af696db9c319e2b1ae295e49bf79cda18fd95249ce19c1819c396489c429d5e195797509c2c9da019ec964c9c2a9d371a8795599c679dd9194d942e9a259bde164d942e9a259bde16ce053b04d508ac14ce053b04d508ac146514ca168c18d41ecd101b158815171ea8088608f2099b170a8de78e9790c41591819a023f03ca1ed811a0104f11351e5581468784886d1602014085b385e416e60aa48ba68a901d6511190c2312c9209511790e9d14531f48030082e003b40e0000000093870000000000005b95000000000000d4810000000000009610000000000000dd1300009e81a08065162200000000002417000075898282cc17a700000000002c17000000005e911e1ab2111297b499ec24fa1ce7980499fa23c21c0000738fa008d51000005e8b208f960c228a3e98da1d671a4594339af79dc31c00006a902d9efa0f00007c8c499c280d0000509b17a0991c8e92239c38a0201f7f8fda99469dc81c6e8cf792e4964516aa03490e6f088114bf923b99dd9c971ae094bb9a559da71c2a97b09cd29ef21c7198d19d17a0b81db5982d9e3da0e01d7c986a9e56a0d41d54984e9e35a05f1d7098529e49a0231d1e98059eba9fad1c9d97829df99e241cb6961b9d829e561bdd96459dd19e541b9297379dd19e641bd897429df19e5b1bfa97199d6a9e0a1b7c97289d739ee51ad396249d8e9ea91a8b97a39cba9de3190b97719c6c9dae19ed96229c249d5b193396af9bc99c8f190495ce9be49c3019f8940d9b309c1817f8940d9b309c181776036f080e0aa61576036f080e0aa6159411891557172b1e80069904d50542106c803384a4849310a690c5929c9594156e81c002a6039b1fc9100913b514131f4d068e043606a11348009d80cb0012108300cf0074036012e50c000a1a12c8208b0b7f8a930c852124802d80b580ac0000000000e088000000000000c6950000000000009786000000000000510c0000000000005c11000000000000d91300006383ab852e1626022d850000c716000000000000e416000000002291501aa113f696bb996025521dd494e5984c23081dbc915e95a10b4f190000a499671de81d98983d9cc21e1b1f7f8808997094321c0000bc8ab69e4f0e0000e0917b9b94140000839a3e9f5e1d8e951d9cfe9ee51e45941a9baa9da31d218d76902994c0137c82150d4b8c39153697039d25a0031d3b995a9ed0a0451f7699a29ed9a06b1e8999079f11a17b1eb8991b9ff8a00d1e3599219fe7a0e61dc8989f9e71a0661d9098be9e7da0411d7c989c9e50a0ec1c5f98609e44a09b1c1698a59d329fe61bc597559dad9e3a1b99969f9cef9d241ad996aa9c269e341a0d97c29ce69d1f1a00968b9b169dd2183294bb9a979c28185695a59bc49ca018f894699a259ceb17d795e79bbe9ce218bb96849c789d1d1a12963e9da29e1f1ad393549ad89b9917d393549ad89b99173708c30b3f0e25163708c30b3f0e25161d11a0146316551d2c0c060e360f1117dc06f5016c0ad41844942897cc985c1b5f887c8682887e1cb10334081b0a211400001581d5834606338056826601a50d97008a0195097d151a0aa909e6121920c507a9882310d11f7b80df82ec82390a0000948c9b90bd0f00004b910b97b31000000000b78c00000000000000000000000000005b090000c0903b8c2510b00caf94a5969d18131ac19301929c14cd1200000000af140000498be69378198715b2967a9b4124de1e1b9486994b23f61d00007d949d12b81500002d94b28c5b146f84b893cd1bc2150000f88ed4987f0f000000001c9800000000ee8e1899580f52865b9b4f9ef31c0c96e19c289fdd1ff48fcb994f9d951c9d8eb394a8966c131a9056958b98e2150896a09cfc9f0a1d3f98239ed2a0ad1e9798969e09a1281e4199d49e29a1311e3499079f2da1e21d95981c9f72a1c81d0399f09ed6a0681d2799d19ea8a0261d2799619e55a0aa1c7799f89df59f2c1ce298a49d529fc91b8f98879d4a9f651b5b98569df09e0b1b4b980e9d6e9e8d1abd97cb9c149e171a0398859caa9dbd19c296cf9c309eea19e297fb9c519e1f1a2397929ccd9dce19f796129c299d5719ab964f9c759ddf19d3943d9c5f9d37198d96449cd99ca1188d96449cd99ca118e1038c06bc0a1211e1038c06bc0a1211b20d5411491260190d099b0b200d3c14b9016681ee08a314808f029453952f151a86b389208c891000003a01ef00b108000000006f8400000000028a708e010def9087993c9ca61805909f965694ff209281af8c3b8589208e8054866d89530d1483e58ca48f5d10e48060940b97bd1300000000368c0000000000000000000000000000b2810000e190588e2b03ca0f8b9449970e15d61ab591d991cd106412000046860e12d004000000009e13000000008f90581623100000a2966020451900004b927f0e111300005990da8ea20f0000f0957518ea1600007d9127981d1100000000bd95000000005292a598ae126d915b9cfe9eee1d6498429d899fcd1f78916b9ac29db81c0d8f05949496ee11ad905495f39817150196679ccd9fb21c8998859edda0571f5899eb9e49a1eb1e5299f99e41a1a41e9898b99ee2a0ea1d7098919ed2a0831d8198889eaea03c1d8398af9e96a0351d2a98679e5da0d51c4698319e43a0781c2598f79d12a02c1c40980c9e0ca01f1ca598019edb9f0b1c8e98d19dc99fd31b21987e9d1a9f641b8b97609d019f041b8d97d19c6b9e291aa597db9c1b9e371ad597fc9c409e801a3097ca9c2e9e5d1a6496079c659dc41901948b9a2c9ca618c992ff995d9ba516c992ff995d9ba516ef071f0bc10e4114ef071f0bc10e4114b10ee9139714461a770e0212a012e618d910cf114714641cde8baf8ecf8f97198b822285b102191695006804a004b60f0000138366870d099781818c049065100095e899c79c2219f29049959d908220188436032210c71f0082808755887a1025880e8c4090eb0f65819f945f98f9130000d4883c8a8b090000000000000000000000000a8100000000000076840000d18c1b84150266008d8c108dc802e50200000000d60c000000000000e90c000000003190e10f900f00008a95eb1ab9180000f191af92b6110000998cbe90a20b00005297ac918e180000e0903f96851000006584a9930d0400008b90e695d00ff2801799579cc918c391f494ff963c140000958df291a00c0000d1869d8ceb02cc88848c4f8ecd0f6496199cfb9efe1b3299549ecba0cb1e4699b79e17a17c1e3499dc9e46a1861e1a99eb9e2aa12b1efa98ec9e0aa1fc1d9298c49ec4a0941d79989c9e98a04c1de6974e9e53a0d31c6598249e47a08e1c3a98e99dea9f301c4198d69df19f011c7f98c09d829fb21b7d98919d7c9f721b12985e9d2b9f161b7c974d9d1f9fc91a4a98b89ddd9f521bc098749ddc9efb1a5598f39c1b9e741a03986c9c899dce198d96fc9bfd9c93199595399cb49d03195692d899169bcf155692d899169bcf152f036f05ed0ac1102f036f05ed0ac110cc0ae70fd410fb17c8066d0ac30bb3114600bd005c03b3107888818c698e26103c822e8345879d0c0000a600100486040000000076800000000089808b0318092a806981c80b33156f85028b5e112621ef889d9033078d224181a783e586820b0000e68b778d560f000070915396bc12000078823c84e6020000000000000000000000000000000028850000a1860000018afa813d891380000000003d890000000000004d8900000000000088890000d488c391758c32110000779808881e1c838aac94a693441500008e915593311080889e99069a751be68ff8944f98191400000e87e1931405000025921a9711101b882099679c4218a0920f96fe97321400006f91c6946e0e0000cd8b5690b102258a888d2791620e2b96fe9a2e9e2f1ce699aa9ee3a0cf1fb99a8a9fa2a1ac1fe299949fd1a1941fea998d9f98a1f71ed199759f9ba18f1e8099db9e0ea1c21d9799999ebca0611daf99629e7aa0fa1ce399839e7ea0c91c5699049e26a0491c7099059e2da03c1c8f99029e1ba0181ce199eb9d0aa0d11b7099c59db09f4b1bca98b29dc89f0e1b4c97229d139f291a3e98009d939ef3196d97159da89e4b1afc97a19cfc9dec197496469c799def191f950d9c5d9d06192b95419b539c1d182b95419b539c1d18e5037a06710b2b0fe5037a06710b2b0f750ded107e12f8186d08a60b370cbd119f013f08710b4f118083298a498ddc1073809a805d81590c0000000081040000000000001e000000000062007507ba054f001908af0dc113290835113917d020e3019a0a471343216480a98122017b090000e889238c210d0000788d1e94aa0e000000006c8700000000000000000000000000000000000099806881178a3380c9810000328c000000000000868d00000000748605924204000007894996e208af914195d095041686888e983d98901d308c409156938111008c5e90af9327105f8f2a98ee99f01ad3925a951e98ee1400004e8d1595390c000096924798a5107a8de299079d0719ce9152952d98b0130000a5906694bc0d00008589aa8f2401a289bb8ee1915b0c2498bc9c0fa0f81c3f9b7e9f77a12720f99a23a0f6a1e01fd19ad29fb5a1721f6899ac9f86a1da1e31999e9fada16a1e38999a9f91a1ec1de2986a9f9aa1b31df798ff9e05a1241d1199229f01a1041d2699fb9ecca0b21c1899f39edda09e1c7e99e49ec6a0711c1b99649ebba02b1cfd98de9de89f6a1b4898ec9de99f7c1b4a97d59cb99eea196197b19c1c9eb3199696899c2b9e9e198c975b9ca59dae1984960c9c559dd219be95ec9b2a9d6e191697909c819dcb181697909c819dcb18f20320078b0c3310f20320078b0c3310f10def119613b518ba09be0c700f9d1290035d0b6c0fbd115a81aa84fe8404115480be007301660d00000e011207020400000000750000000000b6007c0a55090000ba08bf0e7a148f070b1077151721e105170b9014df2150814c8134818c0800005686a88c2f0a0000918d9c958e0e00000000fe840000000000000000000000000000000000000000bf80c0871e8000000000bf89000000000000d28c000000000000038d0000000000001f8f0000d88eb2916d93bb12f28bd9965f97071c9d8c8a8f0b92f6110a8d4d90f8921313c491ec98889ad01b3c8f94940497fd180000958f6d95e2140000ae932f97aa167c8b1499219c741aa78e589284963c1300009b8d50929b0d00005b87d98c2d06c585e08c5e9063105f95849a129e291c2d99519ec8a0981f429a5f9f7fa1811f689abe9fb1a19d1f9299da9f91a1041f9599b49f99a17b1ea499df9f88a1281eae99e29f9aa1021e9499869f51a18f1da999459f56a1341d069acb9ee2a0cd1cf899aa9e9da0a71c8699549e52a05e1c6599339e3ba0321c66992f9e0ba0231cf098659e26a0331c2f98f09dc09fa61b9c98bd9d3f9f651b4198899d259f451b3198d09c619e651a9b975b9c789d461add952e9c6b9d14198f927e99669b33178f927e99669b33175a033d06b20cd5105a033d06b20cd5102c0f56127014111ad2082f0b670e37124204700d3c0f9411e00192094b0dc80dd200d906e5093a0b00000202a505d506000000005d01000000000902720a780700008608ec0dea13d209fb11cb16ff20130abe0d9914242200000000c7000000000000006e8000000000178ee093450e00000000b482000000000000000000000000000000000000000000007883000000000000f8840000000000005885000000000482be84c60000008d8338888d0389890990fb907f13ed8f7d98f398951db78b328f9c9195119986858dd9908610288ff797be983f1b00002e94a0969c140000c4852c90140400002993a1965511b08c2398db9af91721909792b59598110000368c6c917f0a0000b186b48a2b03dd83a589eb8c960e4b95f199649d891c8799039e8ea0fe1f569a239f4ba1881f3a9ac59f9aa1641fc999fa9fc2a1e61ee699bd9fb2a1681e9499e89f91a1141e9899d79f8ea1de1d9b99459f01a1341d22990f9feaa0e61cee98bc9e8ea07a1cff98c59e8ea05c1c1a99959e74a03d1c3099a49e66a0391c4d999c9e50a0201c65984f9e3ca0e01bf4970e9df49e121ab897ff9c879eff19a797ef9c9f9e291a15989d9cf69df2197096349c819dbb1998957c9b129dda18c3923e993e9bf715c3923e993e9bf715be010504a8093c0ebe010504a8093c0eac0d88111614c618c2061509260c321100008b08890d360e00001306330bc50a50003002ae039106000000008c0200000000000037000000000049010309b7048a00c00a7b0f97143c0aff12f117ec217d02160b1319ae2200000000ce00000000000000000000000000d78bdc91da0c000000009d850000000000006c80000000000000e28000000000258189845080000000001f870000000000004b85000000003381c085d50000008c80b988a2004288468d818f2311b68a6995b396311bde86b98c3490ae0ee784818c838fab0e4591b5971b99d21900006691c094f4110000ff88738fb5070000f9919a95ea10bb8fe7979d9ae71706902a931696e21200009e8d7091410c0000b5857b894580eb84fa8c298f4d8bd095019ba89d211ce4982e9e67a0671fb299439f14a1231f049a919f57a1521fe799e89f93a1f51e619aed9fafa1ab1e1b9a04a081a17b1ed899c49f66a1fd1da199399ff2a0671d94990a9fdaa0221db899ab9ea3a0b71c539abc9ea0a09e1c699aa69e7ca0801c469a829e5ba0451c5b993e9e18a0f21be598119e21a0b81bc498ba9da39f021bbe985b9dc59e9a1a0b98549d129f931ae197349d2b9fc01a6a98759d129f791b31983d9e2ca0ae1bea95239c159d5b18ea95239c159d5b1843034306710b7d0e43034306710b7d0e570ec31172135218b1082f0c410e0012b7026b0c560f4d100000c008f60dea0b8e000106b30a63080000cf02f207d50300000000a4010000000067027b0a470500002908100db0122108171090155e21860ab904a4119a227580ad80d6802d0500000000098200000000d28ee892410f0000158197881501000000000000000000000000dd80000000000000c782000000000000de830000000001811c8633000000e9832185b502000000000a8600006182928cec8e3d1170915f99779a371d4688438f348ff411ec89b18c1d8e1a12b395559bcb9c991cfb8b0a9136922f130000dc8ab88c870ca98a63921a9517121f908697e1992b18d590dd916f941c120000098b768f110a00003b833987bf804a80cd833d82058ed996f19b1e9e4a1c009bb89ef8a02520c19ae99f93a1a61fcd9af99fb8a1d81f2c9a25a0bea18a1f059a0ca0aba10a1f2c9abd9f5da1711ee299ad9f70a1221e1e9a769f30a1b51dbe99539fefa0751d4699fb9ebca00d1d5c99de9ea3a0d21c6499d29e90a0a51c8b99999e6ca07e1c64998b9e44a0521c14995c9e34a0201c7498ee9def9f8b1b3399b49d3e9f421ba0988b9df89e0e1ba798eb9c659e751a0f986d9cc49df419c096849ba59c8d1819957f9b979c711819957f9b979c71186504d807320c10106504d807320c10107e0efc124f14a919aa084f0c2b0ee110cc05f80d0f11db0e5d033a0b940f760c0000a2052c09d60a000084025d058b070000000077800000000042000605c70000001e05f20905088c013d0b3c0f86141902101073147c1e958197001401fb0b000000006b8200000000688bee90970d0000538109875301000000002681000000000000ac82000000006083228899800000dc8033892380000000008685000000000000e0880000000030884b8d630400008190f8914e12458e40980899071d4a89228e828f8a108188b38ae58c2210d192879684982f190000878e51922b0f0000858ccb901c0a038c539434978111db929c994a9cb018199320979a995215a08437968c996a120000368f919185016589458f9d94f78f0498ac9ccf9fe71ce299c19ea3a11920939a279fc3a1671fd69ad39fb1a1561f539a15a0c8a1171f5d9a14a0bca1ad1e369a11a090a1471e1f9a03a0a6a1061ef099b89f70a1bb1d279a899f29a1541dd4990e9fc2a0ed1c1b9ac19eb3a0931cf69aa29e8ba05b1c269a4d9e46a0221c2199f39d03a0ab1bbe985f9d449fca1af5976e9d429fba1a8b985c9dfd9ea41a11983d9dec9ea01a5998c89c2d9e291afc978f9cd99d661aaf95459caf9d3a19e494699a089c9117e494699a089c9117b306320b6e0d2b14b306320b6e0d2b1427116315e8167b1b23020d09fc0b58100000dd03fb05da0a000069056c0ab609270253044909150800000401eb05b20100000000fb0000000000a5030c0abb0555007409b40d6c132109f3113d163d220508830f99154024388183803301e50900000000cf820000e885818c53913a0f00000000c8860000000000003d820000000000006687000000006c84628743000000db81a588190000000000e287000000000000ce8a0000000055881b8e75050000c490ba934f129d8d6797c798401c8a882f949395ff14c68845923594451227903298c299e01900009290429460100000ed8a7d917608bc86c3922096fb10288d1b971d9aa8160a912193fc9517120000cb8e1492390c0000ef89708c848063806f814602cd8ea5968d9bfb9d6a1c059af59ef3a0fa1f6d9ac59f8ba1431fba9acd9f87a1161f409aa59f3ea1871eba997c9f21a11f1eae994c9f05a1b51df299509ff2a0921d43992c9fd2a03b1d4a99c39eb5a0d81c1299969e8ea0931c68996a9e5ca0661c1d99579e3da0371c1e99259e2aa0091caa992f9e3fa0f91b5a99749e8fa0f51b759aa59e62a0051c3d99829d1a9faa1aa598d29c879ef2194a98cf9c3c9e0c1a8b97769cd19df8190297f49c809eab19e293a89a449cfa15e293a89a449cfa150709190ea40e97150709190ea40e9715b2154619c51b1a20aa136c18be1afe1ed009d00f1e12791461050d0d64102b117f019e09180d200d0000bd0269096d040000000067020000000083037e0b8606ac00380c1410f313dd0a2b146c177120db0855115b157b2273819680bd03ec0b0000ad818c85f001828ecb94c596c717e78a6892da90731eb3881183e089e909000037857a8bfc0300007b843a89ec0100009c84648bce010000ea865e8c980300007b8b33906b090000c79256957015468fd898829a061ecd94ce99f39be11f968f5a955b9719165f8c1f910e945c12c59108989299701a8990ee921095571205836b908c93f90fa881ea91cd94aa11658464964b990318068f6091dc94ec100000f78c2e90e10b00007186e889c2820901a4067e0b7c904b96a19be89da01cf399df9ebca01e20739af89fa9a1961f7c9a04a0e5a1311f629ab79f87a1971efd99e89f7fa1771e91999a9f63a10d1ee399579f23a1c41dce99339fe9a0511d6199dd9eada0ea1ced98429e4da07c1c2099199e35a03b1cd498f49d2aa0151ce698c09d05a0be1bd3988a9d719f3a1bf897ff9cec9e841a1a977b9cf79d9e198b96349c749d45197597699cf99da4193c98a39c049e0c1a5a98ea9c509e051bbe966c9ce09dcf191e95fc9ab29cb1161e95fc9ab29cb1160a077f08a40a88170a077f08a40a88178917571a641c9520f414f618ae1ab7202f118c143716941cbc1117168c18911ea910ad130815cc1c120d08133015a61d96007a03690826153502140c4a104419950bca1269164620ca0e7e1578184f23db0cfe10d5146021d180fa002a05be118f81dc88058bdc11238c9e94ec9664180000dd8cfe0c161c0486be80b301c50d00009a863e85f80a0000af88a48867090000ba878c8aff040000f386f98aa4030000c18a018f41082887d49133942614ea916e99da9aba1fd495d59a4b9c34218e90ab93bf952c17109057942d9649180b94b99bba9d701e4596d29cc19e2120a0917994fe96f115398da39422980c16d68a5b99509c631a4f913996fd98bc161993b3997e9cf21bb5907a9460977915f789c58d1c925414c395ca9b4a9e721ccf98ef9d6aa0431f7799cb9ed8a0221f279a6e9f45a14f1f8e9a05a08ba1381f8a9a1ca09da1f81e1a9aae9f4ba1521ed099f19ef5a09e1d31991e9e5ea0b91cd098359d4c9fc31b4b98ef9c069f201b6c98149d1f9f021b0899339d2f9f171bf698649d529f1f1b1b99a29d469f351b8d988f9da99f1c1b32983c9d119f931a3998129d9e9e291aba97d99c6c9e011a1f98dc9c499e251a0498c09c289ec01ac196a09c289e4e1a76944e9a809b2f1576944e9a809b2f15e8051008fc0b3316e8051008fc0b33160315e718061bbb1fe1132e1880191120bc1200177218ec1c771458186b1aed20b813e018931a69211013b517281a8b20c40e3c1282144d1be009071184133c1cbd0b4f130617b920a3023e141418422212054a0f97150a21d7817f01b006d1160000d388ec89d8111c8ccf9356965f1629883191bc8f261dd8899885db88bc110000d5852387430800005386a588f4020000a58475895e010000a487bd8b8c020000808afe8e4c05c784009260947313dc943f9a679c33206797139c549dc72186926595f597d5163b91e595759842189392ba9a249d901ed194989a049dbe1ebd9133954f986415628f9894a99758155394cb99c79ca11acf943398549a5c1769932c9acf9ca91bc392219777994515ef8f1496b69832138f95b89cf59e3e1ccd98f89d05a0461e1e994d9e57a0e51d8299579e57a0ef1dde99c89ea1a0e01d239a479f05a1f91d209a159fd2a0a31dcf99e89ea8a06d1d8599b39e8ba0091d9d99a09e84a0eb1c9c99979e6ba0be1c7699849e52a08c1c23995f9e3ca0501cfa98279e36a0171ccb98f39d0ca0e91bd398c49dd29faa1b13981f9d199fae1a0e98879cf49de8191b984d9cad9d92195e98129c919d46194d99009c639d8719e197059c719d57194d95d89a3e9c0a174d95d89a3e9c0a17c3075e0c410dda15c3075e0c410dda154d152319f61ae41f5d13fc175b19961ff2118416f917b81d24144b18e019f6204c136e18161a6b210912a11610198b20c10eb310df13bf1c2f0a910fcd12b01c0c0c88110615ef20420c8c120916962201055f0fc414e7205c819b83c001a3150000f386698857104e8a2f947b962e164a87cb909e8d4d1d4f883a86dc8850130000a186f688350c8288f08c1f8e1f135c8a349487959e1cf58edf8f5e915c130000048d8790040d798999914194c9148a923399869b6f1fe795af9b419db02052902594d8956316898d3c9211951e16ff949c9c849e1820c8974a9d889fa7205c904195b097f916c98fdd95d898c4185295d29c1a9f791e3098a89d2ea019205498419dac9f0e1fb8977b9bf69c501bac98be9dde9fe11e4599c29ea8a0fc1fe0993c9f0aa1581f039a719f27a1381f369a9a9f5da1d61e459abd9f51a1751e409a8d9f34a1031ee5992f9fffa08b1de099ab9e7ba0151d22993d9e29a09b1cfc98cd9df49f351c0599ba9df99f071c1999949dc99fb41b2099809d969f5b1bc198669d609f3a1beb98639d5c9f341b6b98089ddb9e851a68969b9b2b9dbc18d295fb9b5b9d08190596c59b769dff18fe96ea9b569d18193c97d99b359d51195b95b99a909c2a1848948b9a0d9cf21548948b9a0d9cf215d080a5040c088515d080a5040c088515cc15f219031c5b204912011683186d1e380f43147515151bb213eb17a1198520ea13a518681a72216711901555183320300c040f191270194008060de41015198104230c7e118b1c1b01ce05ad0c43196682cf02620f221dee828e83b801ac14e083f787ea84c3140d8e0193df92fe1f68909992e490ba2023872d8aae89981200005b83be871e08be86068a968cfc10648c0294e5945e1ce18b5c8e0a90e8110000ec8b1a8f6a0aad8c179125933d14fe94f59bfd9c58219297829cd79dd0219690e392e4944d15568c7f92cc943c163495a99c709ef81f9e98179d2a9fab21ea954d9c539e72207d92d196e3983319f3956f9c039e8f1f84976b9dd29f87200898e99c419f301fd396b39aa09c8c19c097fa9c069fdf1da198ab9db39f6a1e11994d9e49a0661e5899619e5ca0471ed6998e9e83a0271e9999c99eaca0fd1d339ab89ea7a0c41dc099fc9ebea08f1d9e99c39ea4a04f1dc899a09e95a00c1d339a8c9e7fa0c01cec99289e22a0551c5899ba9dd19fe71b8d984c9d469f161b3998019ddf9eb21a4798e19c839e671a1898f69ca19e831aeb97f79cad9e6e1a0898b99c4e9e331a8b97679cd59dc719a197379ca99dbe194498829cde9d681a8297019dcd9e4f1aea97ee9ce89d8019ea97ee9ce89d80194d1316156d177f194d1316156d177f190515b1182b1a601d2911cf142516bf1a8b158118971a442024162319b01b392111154a18ab1aa620c212aa15aa18781ffa0c78105c139519a108980c3111c9184e050c0a75117b1b0d81fe01850c1a160a842688e509ad138784bd89e1814311ee891e8ea68bcf15f6905195fa94a51e08925c9523945720b686598c0a8b4614e786078c0b8c5d141d92a7978798f21fdf9386985699ba205b8fd590e89184189094a79ac89bcd21c098dd9c799d2e24c898e79cd99dd4227b98519dd09ea022d698d09c659ec820e5922295ff9512182b94e69b319de61e9e981e9d7d9ee7206096429ccc9dd11f468cd4920496f8148c90169a669c601bd388508fc8918c107d81748d0c91740dd98a0a9365954a0ef894e49ad09c071c3b98c89cd99e191e0f99409db39fb11d1b99909d01a0901d0c999a9de99f421d6699a39df59f0a1dca98c09d21a0e91cb598719db59f5d1ce2989e9de69f4d1c18999d9dd69f2a1cec987b9d939f031cf298479d529f7b1b0799359d2b9f271b0e99119dea9ebb1ae698fd9cde9e8c1a1e99189de39e791a07990f9dd59e6e1a1098a69c499ee719e997429ca59d6919c897409cae9d6619cc97279c7f9d471932981c9c439d9a191d961a9ca09d4919bd957f9ba19c7217bd957f9ba19c7217b912501679188717b912501679188717b9148119171b771daa104c148615721a79130a17091a33209c141d18de19ee202d13fa15fd18aa203411da149b183220190f6e113e14b51d320deb0f3715281fc107bf0bfc130b20fb010f03ca0ee11ddc8a538ef10da820868e3f903505a2210a921b94e510a4219493a394e290a421b594c2968594d921119658985198dd21cd9630992199a4212897f499d49a67211197129a689a4b215697049bb89b262165970e9c9b9cea201498169cfb9c8620c6983e9cf49cac203e98e699e19a011fe29445978298ac1b9498cd9cb89d801f239ad19def9ef320809a749e959f3421869abf9ede9f0c21659ab79e44a0de207d99ec9d729f10201998fc9c799e5a1ef997169c279db01ba798e99cab9eb11d6499cb9dd69fbb1e4f99989dce9f0a1e9899bc9dfb9fea1d9898669d2aa0511dc898659daa9f101daa98449d499fcb1c8798409d549f8d1c2b98289d449f1e1c5398089d159fc71b3d980f9d319f781b80981a9d229f311b8f98079de79edc1a8c98009def9ed31ad5980a9ddf9eb31a3499f29c959e931aa798d49c5a9e361a1f98af9c6e9ef2193197119cc79d2a194197109ca49d29195b97079c879d37194297e69b579d4719cc967e9b1a9d44197a95a99a939c9218ba930f99e39aff15ba930f99e39aff15e310f21476163815e310f21476163815c816da1a781c9c1fe21441187b1ab61f281599190d1c4921b8148a18441c10219b143c181e1b2d21db129d16b31a28218911c51561191b21020fdb1346191d214b0c1312bb160d210a068d0e6f150f21fa85b603ec12f520808c938c4b10d4205b8e0d90e504c1206c90ac91c6848d20ac913d93e38d6420aa92629449914120a1933c951793e71fea931b96e994891fc2940597c2953e1f499558979896351f2997ec9816994a1f53977799029a451f65976899259aa71ebf96a4991c9a8e1e2f97e799729a751e0798dc9a349cd11e8598209b739cba1e6098679bb69cd21e0199659cc29def1eda98419cbe9d501ff298929c379e0f1f009acb9c909e611e6099359d3b9f351e4b991e9d4f9f221e26993b9d4f9feb1df8983a9d5b9f931d0699459d709f451db8985d9dc39f301d0f99779dca9ff51c15997e9d01a0c01c2899729dc19f7e1c1b997d9da69f661c0899639d769f421cf398549d4e9f141cf0984a9d3e9fbd1b1f99229d109f601bd398079dfd9e211b0c99e09c9c9eb11ab598a89c5b9e451a66986b9c179edf195c98399ce29d80193c98369cbc9d4f194398329cac9d6619d8973f9cc69d80190098489cde9db119df97409cc09d0b1a7597459ce59d7a19fd941199d39aac15fd941199d39aac15b0135717bc18b615b0135717bc18b6152817df1a941cdd1f7415c819211c24201e151219c01a7a208a146418a81a862035148c17371aa920d3122d1637199b202611e114b6188920dc0e5b1219177a204d0cb01041177220c3053c0c8f157920e3814b0368135920148c6c8d840f1720dd8fcb915784082051910b94e090f11fd291aa94e991831f88925395e3934c1f06949b956f94311f159441966995041f2c9469974a97001f9e942e980597451ead956f981b99ec1dea95aa983a99e51d6b963399fb99b41df896c399d49acd1d2897089a469bc21df396879a109cec1d4997879a3b9cc81d9697f09a6d9cbb1dc997059ba79c981d0398139bd99c701dca97289bf09c5a1d3898de9b999d561d7298349cf39d351db7988e9c529e2d1d8798749c3d9eff1c67986d9c209ebb1c6d98769c4a9e761c4998869c509e4b1c6798899c639e281c5498b09c959e171c7c98b59c9c9e0a1c5598d49cc09ee31b8798fb9cfb9eab1b9898e39cee9e461bbf98c99caf9eee1aa098869c319e6d1a4c98389cb69dea190f980d9ca19d91191c98e09b6e9d5619c097f39b6b9d4719e7970b9c7d9d3b198197289c989d23199397189c759d19192597fd9b669d2d191f97a79b399d27197097709bfe9c5a19d995919a4e9c4018ee95d29a329c9917ee95d29a329c99170000000000000000b0135717bc18b6152817df1a941cdd1f7415c819211c24201e151219c01a7a208a146418a81a862035148c17371aa920d3122d1637199b202611e114b6188920dc0e5b1219177a204d0cb01041177220c3053c0c8f157920e3814b0368135920148c6c8d840f1720dd8fcb915784082051910b94e090f11fd291aa94e991831f88925395e3934c1f06949b956f94311f159441966995041f2c9469974a97001f9e942e980597451ead956f981b99ec1dea95aa983a99e51d6b963399fb99b41df896c399d49acd1d2897089a469bc21df396879a109cec1d4997879a3b9cc81d9697f09a6d9cbb1dc997059ba79c981d0398139bd99c701dca97289bf09c5a1d3898de9b999d561d7298349cf39d351db7988e9c529e2d1d8798749c3d9eff1c67986d9c209ebb1c6d98769c4a9e761c4998869c509e4b1c6798899c639e281c5498b09c959e171c7c98b59c9c9e0a1c5598d49cc09ee31b8798fb9cfb9eab1b9898e39cee9e461bbf98c99caf9eee1aa098869c319e6d1a4c98389cb69dea190f980d9ca19d91191c98e09b6e9d5619c097f39b6b9d4719e7970b9c7d9d3b198197289c989d23199397189c759d19192597fd9b669d2d191f97a79b399d27197097709bfe9c5a19d995919a4e9c4018ee95d29a329c991700000000000000000000000000000000b0161a140812760f761b6319051c3e20d31c03187e1930218c1d8d148e166120c51ecf14ed1641208f2080140a173b201a2174123814d61e7b209d0d74100b1e9421ba1066151b1eac2029106515711ed620ff114d17021f4d20301049191b1cce195101fc16a319091683908a1c4b1e2496af95e1207a21fc8beb8d46247a2005910e8eca260023e997dc9d69269b19ab9187992628a39f5d8f3e98fd22bf97cf916f992626ff053894469b2b25e71a90921f9a6324bb1ca99243990627e619938ed7974624b5145993399b20233b993197da9c7b220895ba980ba02a1ce222c898b29e45185722ec98589c02a2951f8a96039d78a31a1feb93799b95a3601d438a4f985ca1d01a11919898839e6c1b16903297bc991f1a8283b795f6982f19308d1598499ad219aa92fb991d9c7e1b4795aa9b1e9d0e1cd8954a9c809d111cbf95529c7d9dc81bd0956d9c679d981b9796839c639d811b6396949c8a9d421bb196b89c8c9d221bed96da9cd69d201bcd96d29cea9dda1ae396d09c0f9ebe1af396ca9c119ea01aa196a69c159e571af5967f9cd79df0193f97719c859dc919eb95e39b3c9d23192096279b799c82184796739b959c8c181796929bae9cb718cc95ed9bc79cc718d895409c549db918c1940d9ba69cf0180000000000000000b0161a140812760fb0161a140812760f761b6319051c3e20d31c03187e1930218c1d8d148e166120c51ecf14ed1641208f2080140a173b201a2174123814d61e7b209d0d74100b1e9421ba1066151b1eac2029106515711ed620ff114d17021f4d20301049191b1cce195101fc16a319091683908a1c4b1e2496af95e1207a21fc8beb8d46247a2005910e8eca260023e997dc9d69269b19ab9187992628a39f5d8f3e98fd22bf97cf916f992626ff053894469b2b25e71a90921f9a6324bb1ca99243990627e619938ed7974624b5145993399b20233b993197da9c7b220895ba980ba02a1ce222c898b29e45185722ec98589c02a2951f8a96039d78a31a1feb93799b95a3601d438a4f985ca1d01a11919898839e6c1b16903297bc991f1a8283b795f6982f19308d1598499ad219aa92fb991d9c7e1b4795aa9b1e9d0e1cd8954a9c809d111cbf95529c7d9dc81bd0956d9c679d981b9796839c639d811b6396949c8a9d421bb196b89c8c9d221bed96da9cd69d201bcd96d29cea9dda1ae396d09c0f9ebe1af396ca9c119ea01aa196a69c159e571af5967f9cd79df0193f97719c859dc919eb95e39b3c9d23192096279b799c82184796739b959c8c181796929bae9cb718cc95ed9bc79cc718d895409c549db918c1940d9ba69cf018c1940d9ba69cf0180000e501270145000000e5012701450054171419241bb0207419e118081b222169195618bf196c212f1bdf1590172221d41d9c17171abd21431f5a18b71a0721fd1e6f172f1a6c20ed208e18231b5f202520081a8f1cad21811fc419fe1c5c22cb1dde16ee1ae82389184f8e2f166c22d614cb95f317232270963999c61c71220b902091da23b6201a956496672560214a959998062700201a958c989b278b1d21931a994127331d95935799f626e21c75938299d5252d1c7895099a3225af1c0d97329c2a27ea1d838e70990625311b05926e9a0120d9158e94279ada22d91b8a950e9aaa1f541e86915b9a221e0b208c936e9b58a0af1f72940b9c34a18f1e8095349d3da425200e94e69c05a35320c592949ca1a0991e6091a19a219d391de290229aa89c291dd6931e9c019e661d53956a9c1a9eaa1de2959c9c0e9e4f1df396519df19e231d8997d19d869ff51ccc97139ec99fde1c3e98369ec59fe91c4e982c9ed29fa41c1298d69d0a9f3f1ce8975e9dc29ed01b78971b9d879e331b2997e59c549ece1a0597c89c339e701a1097c69c239e581a5697cc9c319e2d1af397ee9c659e431aa596809cd49d89198f964d9c799d2f1919975f9c789d4f19d396499c569d60196996549c309d2719a1950c9c419ddb180495f19a6c9c19180495f19a6c9c191895809c84e9834b0395809c84e9834b03ea157d18151a21200b176c19de1bba20be1666197f1b4f216518c919b41b5821b71a3d1a921cf121161c5c19911b64213b1c1d1a6f1c78218a1cbe1aae1dfd21de1ca11aed1c9722051cb718861ce222a51a9015151b02246b15859266130523cc84b6978c081e239098309c3194a0229394a4999e1e1c223b95e899b62153218b93b896b324a81e679489981b26d21fae92009999265b1f0895cd9ad42667209c94009b0b260e200897de9b86257d207898619c0527eb1fa992239b1926451e29953e9bd1217d1e2398d79bf11e0f1f9f983e9c8720b71e5593769a3c91001eb994579a1ea3461e7b96839b94a2581e94976c9e5fa483201c96ff9ddca29f206f940f9d67a0201f8094059c419e261d7694269c509e7b1d1e96339dc09ff31d2996069d529fc31d0997a59da99fbe1d3198349e42a0e71d4f989f9e65a0ea1d32988a9e42a0911d5f98649e38a0451d4398719e2ca0121d53981a9ed29fbc1c0098b79d0b9f3d1c8897579dbc9eab1b1897239db69e491b3897299dcc9e151b75972b9dde9e001b6597eb9c639e741a6c97d39c469e401a2c97b19c149ef71915978e9cb19d9b199e965d9c939d42199696229c5a9d1619f395f89b1d9db3182295e39a5d9c041823949d9a5c9ca31723949d9a5c9ca31732003904fa05390432003904fa0539046817541a381cc421f917491ac01c4a219c17a319f11beb21c416fa193f1c7f222a19011c081e11248f19f11a571d25232019fe1a711d56226f19c719121dfb22c7187a18351ced22da163c18481c7524e1122f116d1973233b04598676085115f58e1695800dc0203a987a9be497c222bd95b399fe16a921119722998e1c682169963a99fd20862189950a9a3e2319214a95319be5243821eb942d9a9425e41f3d95269ccf25de201398a49c1326ad21ac99ed9c0928572106914e9c46265820fc97bc9a831ff11e27942b95dd1abf18c1942699d21d951c3d98419bb0163e1e8795529cd5a121203096e39c3da21920fe96c99ca9a208206b960e9dc0a021204396c29d38a03420d894319c519e961eec94729c389f721e3898aa9e26a1731fc498709f52a1ad1f6f98509f16a1de1eca984a9f09a1861e3099839f06a16b1eca981c9fc7a0e21dda98ad9e70a0461dc198919e53a00d1da3987e9e40a0d61c7f98409e31a0741cc997a89d5d9fe91bf097a59d4a9f811be596db9c639e741aff96c49c4b9e231ab697219d8e9e631a55972d9dcd9e731acd961a9d6b9e061a3197e69c319ea919c9951c9c119da518d8965f9c579dfd18f396b19cb89d2c197e96b29c369eff18ec93759a0c9cfb17ec93759a0c9cfb177f06e10c120ee10c7f06e10c120ee10c80160d19681a6f20fe178219041ca4207418141a081c0c226817ba193b1c1722a8169019641c8821b914a417001a0320ed12f2140018171d0115a217561b712004162f19741c7a22d01424194a1dab23491014129d19de21f781bf8cd403b61bb692e4965890c2201098909b9899d72199957999be925120439323930203e018d194eb98da18411f5295669a281eb920e796f59baf21a221ad96bb9bd822d0205097dc9c6924f7210599b69d2725b222e19ba19e2c27af220e99c29d792685218595139ba420251e7b98cf984014131be6907899401a551c1897269c149dce1fbd975e9b8ca06e1e0797cb9cd2a115202598d29d15a275202598ee9d53a07f205c94349c689eaf1d74941599999a35195f94319c439eea1c7498859e43a1c01e98980a9f29a1d01e3c98ce9efda0461e1b99289f10a1481e3099629f2da1171efc98549f47a1df1d6999289fe5a0931d2d99c39e83a01a1dac99399e3da08e1c019add9de09f1a1c7a99a39d919fa31be1989a9d6e9f431b5a98719d449f0e1bfe97819d319fe71a1198979d549fc91a7998bb9d129f191bf997569d099f7c1a1a98329db69e2f1aac97d49c269ed1199896279c5a9d2c19e895149c2f9dc6181795599bcb9c4218fb958d9cd89dd519fb958d9cd89dd51933033709290b290a33033709290b290a490e38110813fe167115d216fa18991e4d173019831bb3215317121a221ce7217d16b1194f1c87219614dd17731a2f20f2119e13e616441d2a14a016311b8a20140d1b13c1189522c6102514701add238b0349147d19c422d8882e8c3705111db4933098e69415210697cb9a47997922a6941e98fd90b120749446930f89121b089506995988582010951a9b3613d92108986f9c1e1c5d225597399c541ea5217b97489c282188216e97b09c88228e215799779dea222e226099749de72453211195a29bb11ecb1ebe9778982d12581b9c92539bb4171a1e1498cb9cbb9d662021988f9c0fa0d81faa97ce9da9a1b1207498419f3ca24d212399099fc6a0f520bf953e9d8a9f991e39960e9a3b9b0e1a3996d69c369fa01d6c99179fa3a1f31f4999869f8ea1032004996d9f52a14e1f2799419f1fa1971ead98d69ee2a0d41d8698ad9ec3a0861dc4988e9ea9a0171ddb98a19e8da0f01cbf98599e4aa0951cc4984f9e41a0461c9398349e1ca0261c3c98159e15a0041c2f98fc9df59fa91be497ce9ded9f6d1b0d986f9d6f9ff41aeb97f79ca49e5a1a6e97fb9c7c9e2c1ace97349d959e531a14982d9d9e9e4a1ac497de9c769e1c1a1597979c169e6b192395dd9a429ce1174b942c9a409c46174b942c9a409c4617f4025a0c160e830df4025a0c160e830d460e22139214a818c0133a166118d41ccc14d6175c19291e5a159d18a01ab61f52164019d21b7c2085146117a919a91fbf1141149c17c51ef3126d14091997205808c61165188a224411ca14361b82238d0c370c33163022f08b8f8cf50bc21d8c94e79544070321e097d99929963f22ff942897ed87c920ad944f92ac8de21bde9543981c935e20bc95f69943944122e896da9a9d8f24228a97109cb610d122bb96d89a771a45210898c99b3b1d792139991e9dd31e1823e298e59c3d21c5218b931b9adf19641e7a98fe981d8d3f1c4a942e9c1e99c41fbb98819c089e7820c6993b9d22a0e6201599ea9d58a02b21b899bb9ef0a07f218d98d79d2ca0b120dd914a9b019ebd1d739479970999d1194d965f9c4f9e7a1dbd992b9fb4a1891fab99739f98a1931f42997e9f80a1e41e52996d9f69a19e1e5299699f70a1651e18994f9f2aa1081ec498db9ecda07e1dba987d9e84a0f71c6098379e5ba09c1c7f98369e42a0671c8298249e34a0371c3298f19d08a0061c2c98bd9daf9fad1b6f973d9d259fec1abc97399d069faf1aae972c9dd69e9e1a5f98ab9dbd9f1c1b3798bb9d509ff61ac797c39c0f9ec8196097269c759d09196495b89be59c4f18d1965b9c269eda18c094419b019dba18c094419b019dba180f03d509390cd5090f03d509390cd5098e0d0d11ef114316f3120d153017d91b0213ab152818bc1c13169218801abe1fcd167d190f1cc02057148117e019e71fe312cc14c7171b1e7c124d156b19c720171283149a191323b30f9313e51957244183d0057e166822128c708ce908d71b5d955d95ea866721d196569861964d222193cd95a88d6320c891428e8789011359924f90748c1114e195b19839970e201a98239b76995a224e98789b7598fb212b98749c2c98c42264990c9d58954923ac998b9d4c9182239c99d59d3c8c9322a8955b9cfb952c20af988199f694781c4e970f9d3a9d49202d9a289e6c9fab21ee98249d4a9fd320a0988c9d909fdd209f98099e7da0f4204e962c9dd99f0e20e091ac9b5f9ebb1dd0931e98c999a319b6965c9c029e3e1deb98729e26a1221f99993c9faba1bb1f9099a29fcea1821fbb99c69feea12c1f4e9afc9fcba1061f9a9ac89fa1a1881ed09a3d9f31a1ce1d919acc9ecaa04c1d469a8b9e8aa0071d569a4d9e76a0b11cab99f69d1ea04e1c9599f39d1aa01b1c6b99dc9d0fa0bc1bfb99019efa9f961b3499ae9d8f9ff51a5399be9d9c9f081b1998759d599f6a1a3c987d9d199f511ab597409d0d9fea197c97e29c629eb21938962a9c779dc4187a95779b2a9d38182395aa9b249d28192395aa9b249d28191f032b07bf098f041f032b07bf098f04b30e8f110e13a5152a179318c11aac1f19183c1bf61cfb221518e11b181d09230518b91b9b1d6c22af14c218761b5c206212b61486160a1d49120416981943215511a616561a7b23950f87154c1b7d24720853112b19b422ca8b75895e11491d9492279413074f2112965f98dc96b121d592869556930b207e91a08e1b8bf814bf91fb8f5f8ede14fd95239a3899dd209398149cd99a2923de982b9c069b6a238b99769d2d9dca23a09ad19d029e022317996b9d359c5a226197ef9b5f998d20f58ec091b1903912e99417958393701609974d9c0f9d7a1f2699ea9d19a04621b599649ee4a0c2217899609e22a14921d5995a9ef4a022213999e69d57a0d120e5958d9c099f191fcc9252983a9ac919e997bb9cbb9eb11d7f9ad19f16a26320999a2ea01fa29c200c9a15a0e1a138200a9ada9f97a19a1f5a99669f53a19c1e6399a79f64a13e1e8599999f63a1d71d4399499f55a16d1d21990a9ffba0ed1cea98009fefa0c61c1799ff9ed9a0901cf298ca9ec7a04a1cc8986e9e94a0041ce498139e86a0ad1b4b987e9d7c9fdb1a8198d99d07a04e1b27988c9d559fcb1a8297609d189f601aa697f09ca89ecf199a97b19c289ea219b096499cab9df3183995c29aac9cef17e094f39aa59c4417e094f39aa59c441784022f09d60c2f0984022f09d60c2f09040e4512041461179a154118681a5f1fb217541bf31c53221018d31b681da2220318321b751d84228a149018251c1621801210152818b01ef812c816a61ab121e3116b16911ae223350f9a15b31a9c242208d4100e1841223c8c4f8cb00f551dd092d294f38681210696269860976d225d9248942d8d76200f91e48c9989281479900d8fac8c0414d8953099de988e209698289c089c4d23d598d89c359de123b8988a9cd49c9d23a998779cda9c3123e998539cd59cb022c995e39a789b8620a08f3d91bc9152152d92ac932d94fc17c296c49b5e9d841ea096f09b9e9d7c1e5697c898ce991e1c0797cd9c7f9e2c1f0199cc9d9fa085208698f49ce69ffe1f9495119c7b9e2f1e169475988999b71a0d97bf9c9d9ee51d7999ef9ec3a1f91f179acd9fdca10920fb991fa006a2fb1f3d9a39a008a2aa1fcf9905a0aba1dd1ef099de9f82a13d1e089ae79f7fa11a1ef299c19f71a1bb1df299719f4fa17f1df299189f47a1151d199ac49e03a1c91caf99439ec4a0591c4299009e62a01d1ce798dc9d34a0c91bd898f29d16a0aa1b0199259e28a0eb1b6898b89d9b9f241b5198789d429f901a1d982c9d049f361af997dd9c689ed6194b97729ca59d2f19b395eb9b4f9d2118209367994d9b4917209367994d9b49179b0053086e0b81059b0053086e0b81051d0e9e12ca14ba169117111aba1c5020fc18c61c861ebe2341183e1c991ded228617411b391d9122b1141619fc1b4421db121915df17d21d0f133a16431a2821cf1101176c1ab2230c11be16c71bf824910b2914161962220186cc81f70cf812eb8c938be502d0154b94539553914a1f979014947986411f8f90fc8d5e8d5114d98f348ec38d10144b95b798649897202899a89aa09a92232b99729cdb9c8a24e199d59ca09d92244599cd9c1f9e38240c99c09c199e20235c98e79beb9cc020409048925e932e1628911c947995de170897cd9aa49c561ee095e299a69c981d0f944c983f9a501bde95819bd99d371e2098d99c36a03220c797779c0d9fbc1fc295059b789deb1d3794de980c9a571bec96d49ca59e4f1ee6990b9f95a121207f9a17a00aa24d20349a4ba00ca20620729a6fa020a2af1f2b9a65a000a2671f9b994da0eea1d21ecf990ca09ca1401e0a9ac19f61a1bb1dc299559fe5a0301d5f99009fdea0cc1c8e99c99eaea0821c0e99699e7ea02e1cf598709e6ca0191c1f99799e6ba00b1c2099709e5da0051c9098019e2fa0591b4c988b9d899fa71a34988e9d479f731a6498659d139f241abc97f09c759eb11926963a9ca19d9d18bd95229bc39c1f18dd930f99de9a7016dd930f99de9a70160000bd01d3026e020000bd01d3026e02ec0db810251321152318401ab91c9020a418c41c4f1fd1235f183a1c481e2b234b174a1a971c682244146518fe1a24210512c6147716a81de112e2161d1afa2082124818a21b272404114918241cb425d50a1c13621af7223d859a017f0c33125c8c768b460877151f921d943b8fcd1f1590ff916786302061908b8c3b8ba3138a905f90cf8fa2155696f498a3985e21f898989b609c3a245899679c6e9d432498994c9cce9d3724049ab59ccd9d0524499aa09c8e9df0220a98a19aef9b2120258f659298934a16658e189400969a17c4960b9ba49cdf1d8096569aa89cd11d1196a0996e9b901c0797b09c909e611fe999fc9d70a0ef203a99e09d2ba00e21a697b89c089fa41fa194bc98bb996e1a4a98839d229f581ecc9a669f99a13e20d39ad29f8fa11d203a9ac49f85a1831f7c9aea9f9aa14d1f3f9af59fa5a1e61e2f9a14a0c0a1ad1e249a11a0a3a15c1ec599db9f68a1e11dbe99619f0da15b1dd299069fcda0f01c009ad99eb3a0b11cf299af9e99a0711c179a859e8ca0481cfa99549e66a0271c4299ff9d1ba0a11b3299ec9d23a08a1be598c49de69ff91a6398779d1b9f681a30983b9d219f341a1d98239d129f171a9d97289de59ede191997f29cbb9ebf1984941e9b969cfb1884941e9b969cfb180000b2031e07b2030000b2031e07b203760ecc11311419160b18041a9e1ce5202319d11c851e8d2371188c1c311ed222bc17af1b691d11227b146619281cd02001134b1564170b1e5f113416b7192221b0106715ce19b323e60eaa14631af524700aa012c51795229a871482340c4a14708bf58b00838a154392d094bd932520278fec91a98c5720d090948c078c0f14c98fd8909d8ec1163896589839988920ee98bc9b7a9ce3238199319d349ebe240e9ae39dd99eb724999ab89d8f9eae238b99089d4d9eb22239986f9ccc9db520198d8e922394ae16528ad791e6940717f096f89b229e501ec995199bee9c331e4a966f999c9a8f1c0d982f9dce9e6a1fba99589eaca0b2203e99719d3aa0442001971a9ce59e761e0b93e29601990519b797f39c2b9fdc1d3c9bf89f0fa26720819b4ca00ca29620eb9a52a03ea25220139b65a005a210208b9a4da0eaa1b61f299a2aa0bda1081f1b9a03a082a1961ecd99bc9f75a1ff1dd799919f3da19d1da4994b9f01a1401d5e991a9fc9a0fc1c3799eb9eb2a0b61cfb98bc9e9ba0731cff98aa9e7da05a1c1a99939e75a0361c09995c9e4da0fe1bb198f69d14a0591bb398af9d4b9fe11aa5982d9dd19e361a8e98b99c509eab19ae98469ccc9dc618aa98c39b239d63189c95549b439d6f199c95549b439d6f19910045042d060c03910045042d060c03b80caa11c713c215691718198c1b1520b718871c0b1e8223cf18891c531e9223ea17071ca21d282301163819eb1b7a21ab1227156217ee1ede11291695193e215e10e516de197c23df0dcd155719152477066812b81873221b88a002850e6516928d868c3c099917dd90429442943b1fe28e1392408c891f5490fc8f8a8f3115809145929d904f174196f59898985f215c989a9beb9b2c24e098439cac9c12245599699c639d01246699aa9caf9dde23b8988f9cab9d28230f983a9ba39c2821239084932195b515748d0d945a967e178298529ce59d931e4197e79b4b9d961e4396e3998a9b891c7097d49c869e071fc599479e8da083202f999d9edda07820a198359e63a0681f5d95ee99b79a371a9698b59da69f6d1e3c9b0aa012a29c20b89a2fa067a27620709a1fa04ea2db1f8e9a26a004a26f1f609a28a0faa1001f589a26a0bca1b11e229a28a0a1a1721ee59909a08ca1fc1dcc99b49f5ca18b1de099629f0aa1281ddc99d49edba0ae1c1a9a659ebaa0551c729a2d9e7da02e1c9399909d2da0651b20999c9df19f3b1b7e984e9d4f9fb61a70985f9d4c9f941a6998889d289f8f1a4b98249d029f0c1a1d98d69c629eb11973979d9c099e3319e795829b209d4617f7937599609b5917f7937599609b5917a605fd08bf0bc40ea605fd08bf0bc40ef716971a401c562016157218da1af71e9813f5163c18921ca8153119351b1f20d816ee19171c45212414a718501b5f2000135115d617381e1b119416b319f720d2105016be190523320f7815e2190625b20a6d124b18d4221883fe00020a5810c78b1c8b63027615ab924c95e0949020d691c494e89149214395a0935c92461d1a95c59648969221a89682981b98d0222397ff991f9a7f23b998f39b4a9c0e246199cd9cbc9d1524d7997a9db09e0e24b7998e9df49ece238c995d9d129fae22af97329c879d79209696ce99259b331d7297999c409ed01f7396039c849db01e7096659a4e9c7f1cfb970c9dfe9e171f5199c89d4fa05220c098919d01a03a20de95ac9cc79e4e1fee951b99569ac81b69975f9d289f6e1eff9a08a0d9a18520509b65a052a2b020ce9a76a04ba253209e9a69a01ca2e91f4d9a22a09ea1131ff899b89f53a16d1eb799899f18a1d01da6996e9f07a17d1d5a99309feba03d1d3b99ef9ec0a0e71c1299af9e9ba0aa1c1499879e75a0561cf2985a9e5ea02c1c2c994b9e4da0151cb7992f9e52a0df1b5f9afb9d69a09c1bd99b579d80a0ab1adc99779dac9fb11ac498fb9cc79ee7195698c79c769ea9197897a69cfd9d3e193097cb9c9a9e1a19be94649a799cfb17be94649a799cfb170000c108800aae0b0000c108800aae0b4418491cc71da3211b19c91c4c1f19236d18991c691e0e231718591cfb1dad220216fd1aaf1cbd214d1427196d1b7e20081237161918d71d051209182b1a752074118a18be1a8a2249106417981a07241e0d7e14f7186d21f1803507060eab12de88bb86d8070816119199935894a42061916594ad8de021f7942d930d939c1c2096b0980798ad2232981a9ab19919244e98599b8b9b6a242d99729cc19cec242699c19c769dea24d999e99cd19d7624779a639d9e9e1824e19a6b9d249f4e23bb998a9cfa9d44215398c89a2c9cde1c459abf9df39fa420349b6d9e79a0b321219c9f9ec2a014229e9acc9e16a10422369b099f98a16821469ac19efca0da206597ff9c529f331f7f9664985f99e119e097d19cee9d701d519a309f41a1cd1f469a3f9f55a15f1f1a9aba9fa8a1041fb89a07a0f2a1e11e759ae69fada1881e149a02a0bca1771ee999eb9f88a11d1ec099b49f4ea1de1d7b99769f1ea1701d3199f59eb9a0eb1cfe98679e5aa0711cc3980d9e25a0051c9798d69d0ea09c1b9098ad9de19f501be698a39d959f201b6d98979de69f101b1a99199dd19e511af2978a9cda9d721921989e9c259e6e1919989c9c229e8719bf97b09c339e65199196a59b219d791803955b9a5a9cca1703955b9a5a9cca1700006c8d048e831100006c8d048e831156188a1a1c1c05213819241b7d1dbf21b318541b111d6f2190188d1b761ddd210b17841a5e1cc921b014e918a01b0121281101154916cd1ed0124f18aa1a43228f1342184f1b18248a12e516da1af1238a0e2315dd187722d3827f0d2414591fd78dc305b3125822a9906c8cfd870d23088f188c5f14d7218f93ee8d2a8c0a1fd29454959991b622f1953c980b98192459976b9a5f9a7d249398ac9ba49cbb240c99c69c129ede24089a869d5f9ec824009aee9dee9e9024b29a119eaa9f3424599a1f9ef99f7723039c9f9e4fa09e23349c1fa05ba19023479b58a03aa26123f79b03a045a18f22859ac59f44a1b822f99a02a08ba14922b79a939fd1a09521549a199fdda00721c899179f9ea0e12021996b9e57a04a20599a6e9f3aa12520369aa49f54a11220459a09a08ba1b41f7d9a24a0bfa16f1f749a2ba0bea1461f569a0ca08aa1c11ee399819f27a1131e9c99109f0ea1741d4d99a99ebba0fc1ccc982d9e3ca07a1c9898be9de49ffa1b9498869db69f6f1b9798a29d9d9f421b1a99a89dcc9f481b5899bb9d7c9f3d1b1699269d569f751af298d49ce69ef0196898959c7e9e86190c98959c849e7419d397a59c629e87195f97b29c339e5c192f979e9c739e791902963b9cb39d7b1902963b9cb39d7b1900004b8fe290311100004b8fe290311164161a1a111be920c617f31a171d9721f217fa1b4e1d3022ba17b61b7f1dc4225f16e11ad31ca1221716141aae1c6522be145d19581c6522da131519211c41231712ec17ab1be123a60e20164f1a0824320da415391a1d240c83a411631841242490ca060415b1245e934a90be8eb024d5929290880fff24ff957e9264948d245f962396b695cf248b9816981e98f52427981d99aa99f6247d98bb9ae79b1525af983c9c159d29253599379de39dee24849a6d9e7a9f03256e9a2e9ec19fc224439a4e9eed9f5f24199aea9e67a09924a09bd59f0da15124d59b5c9f08a1cd23b49b1a9fc3a06e22ac9b309fcba04d223b9cf79f5ea1cc21159c6f9fc4a04321579a009fd1a0b920fd99c49e52a05e203a999f9e51a0b21fae99f79ef0a0131f5499cd9ea9a0ea1e8a99d39ec3a07f1edd99ea9eb9a02d1e139a2a9fe2a0ee1d5b9a669f19a1c91d2f9a3a9feca0931d8a99ea9eb9a0431d4d99cb9e95a0051d6599d69e94a0d51c5a99bf9e8ba09f1c11998b9e68a06e1cd1985a9e4ca02c1cb698209e32a0051cb398029e25a0be1bd498fb9dfc9fb51b5598859dad9f101b2298eb9c579e2c1a2d985d9ccd9d5e199b98159cdc9dfb189999429cb59dfc1836986a9bb39d601839951b9b099d321839951b9b099d321839806c859a829d0d39806c859a829d0df215f419461ca020c416821a0e1d6f21f116e71ab21ce521dc16651aa31c1a221d154919191ce621af148c18681bbf21bc134f17201a65220a138b170a1a9623e312ca16a519442452108a15061951244e0b841216182f24c582290c1014ef23618cd7056c145b244b91b28f178e72249191018d8c11aa2454948b900492a12415954195be953925a59673972e984f25a697f999cc9a6c25e497689a039cf7243898219c469d90258c983a9d4e9e6525cf99e39db29ef524389a8f9e24a0dc24dc999d9e4ca09924429a369f65a08d24d59b9ea0c8a19724889b8da01da24124cc9ac19ffca0b422749aa09fdca045225e9b0aa06ba1f721949a6d9f12a16b215c9a189fdea0be20c099d19e66a00f20bf99ee9ec7a0f11ffc99419fe7a0f31f3e9ab09f26a1b01f319ad99f42a1651f4b9adb9f67a1da1e619ad89f75a15a1e2f9a8c9f42a1d41dbd99109ff7a0491d6e99809e82a0b81cde98ff9d35a0451c0399d19d16a0041c0999a69dfc9fcd1b29999a9dc39f7e1b1599799d969f531bf7986f9d799f2d1b29998b9d969f181b9d989e9d00a0d31af398af9cc79d93199097819ccd9d6d19d2971f9cd49ded182897ef9b909df018fd96e99b4e9da0187d95429b569d3418e795b69b479d5818e795b69b479d58180682da8c698cda0c0682da8c698cda0c6815d219821ca1209616191a071dbc208d16e71a8a1cbe2109176e1ab01c452275152c19171ce62135141c18da1a5121341220162c194c217310dd142418dc21630efb127e1747223d0c38116815a1225408350e7f1506234583d10bb4133523ec8d72852b12e0233891e79069871824c793cd92378e6b24f8938794b59374245494ca944295ec24ef94a8968496da24d997949a209bf6243298499b899cc9244e98999cf09d1a25f398b79ca49dbe24c599389e6a9f0f25d899679e08a08724049ac09e52a0e9232f99cd9e37a00024299a639e39a02c23269a639ec2a0be223c9ae49ee5a05d22299a739e11a06621d699989e76a03121fa99e49ec4a05c21879a0e9fe3a0fb20279a3c9fa9a07720ec99119fd5a00f20d0991a9f9fa0ac1fc499ff9ec0a0ff1e9099dd9eb2a0731eab99fc9ec7a0451e9999069fcda0081ed6993f9fd2a0de1db399159fdda0a31dab99f39ebea04b1d9899af9ea3a0ea1c88996c9e6aa0851c7e99f89d18a01f1c1499869d999f871b5b980d9d129fc11a2a98cf9cd39e6e1a0c98c39c8e9e2b1a1a98ca9c949e351a2b98c89c9d9e001ac9977e9c349e98195097419cbe9d4d19f096fd9b6b9d23194297179c5c9de318b795449b359d36189395c09b249dbb189395c09b249dbb18ac07df07fb0a3715ac07df07fb0a37157014c3173319881e16168718e41a27203217b119481c7d219816ba196c1cb221c715c018931b83212e144517151a31211011721408181f212f0e0b1235163321150b890c981412210782d003d41218215889f28ce0108821518ec691c405cf212191b2945a8c2e222c930d963c9373220b947496bd9336222a94f3961996752226954a98f39608239697209a059a54236a970f9c229c8f23c997a99ab69ab32206997c9ce79cdf234298eb9b959c34238a980d9de39dbf22da99799da29eb622f89aa59dac9f3223c79b5f9d659ffa21999ad59e5fa00723099b2e9e0da0de21be999c9e89a0cb218a99ec9d39a0e0202b9a199e49a0092166994a9d0f9f3c204599c69dce9fd31f37999b9da59f051fa899eb9d30a07e1e8799f59d1da08c1e9c994e9e60a04e1e70993a9e5ea00a1e6c99459e47a0b41d5a99229e37a0681d4499e29d1ca0f41cf798cb9def9fa81cee98a89d00a0681cef98b79df89f421ce198769db29fe31bff98689d599f6c1b0f99389d229f111b1d99249d089fbf1af798fa9cf69e871aac98e79cc79e3c1a7298cc9c9f9e191a3a98a39c5f9ee319f9976b9cb69d6f190a98459cb29d26199697229c859dfb189b97f99b0f9d681866958f9ad99c8817f594a29aea9c2c18f594a29aea9c2c18ba004009730cf00dba004009730cf00d01152819291b1f1f951516190d1c1320271657192a1c18216d150419771b652178141218d31a432155132416bb190821f4109014fa17322106103a1250172f21e10bf80c95157021c1061d042d13af218589038dc610bb21688e318f310ccf21f39083920e0f9a21cc92a2930e8f7021cc94d4955892692192954297f0954a21c8953e9829972f210c96cb98c098002174968799f398c420ae97659a3d9abe204d98189b939b8e20b8984c9b589c6a2061990b9c9e9c80200a9ae99ce79da920a098d19c949d4a20469a589d739eca20a59ab39d5c9fca20019bf79df89fb820e69a1e9edb9f7620079b849e48a08d206e9a639e23a04520a499179e20a0c91fbc98cb9d809fae1eb898ad9de69fb61e3199b89ded9faa1e6f99d19d0da0491ede990b9e1da0231ed099ff9d47a0cf1dc999f39d14a0971d5499ba9df39f1f1d3a99819dbf9f8a1ce1984a9d939f171cc198409d4d9fbf1b8f98269d4c9f5b1bc698279d439f431ba498209d189ffe1a7d98159d199fb61aa998099df19e901a9098fc9ca29e341a4998b69c6b9edd196898bb9ca19ee51919987b9c119e8219db97819cfd9d6e198d97659ccb9d4c19c796229c8f9d16196a96e39b5d9da7189a95b39ba59da41877957e99f09b4c1777957e99f09b4c1700001808fe0ad40900001808fe0ad409dd148918371a0e1fe7154e18db1a361f7216c619471c55216815fc183e1c3e21f01456183c1b3e21af13b016aa1a1a214312da156e1910213810f713f2180121800d23126e17fd20fb059e0e1916fe200682c6032714fc203e8bb789ba110821648e2590770bcf208390a391a904792010911993d68a34202f922794be8fc31fd792c494d591641f819398955094d01ebb945d969495521e69952c97f496c71d6e9623989498a81d1e9757981699861d589769985f999c1dd296cd98bf99e71d68962199659afb1d3d97cc99f49a421e2a98eb9a609c5c1e9d98219c1b9d9d1e2d99769cbb9db71e8f99ed9b989ddb1e51997d9c409eb61e4199b69c7b9e351e0799c49c8a9ede1d3b99f49cfd9ea21d47992f9d3f9f881d56993a9d6a9f671d5599449d9d9f2d1d2c99589dd69fec1c4e997e9d01a0d21c4499869d15a09f1c2a99819ddb9f7a1c1499689dac9f421cf6984b9d789f091cee98519d719fbc1be798429d509f8c1bd998339d309f5e1bb3980d9d079fee1acb98e29cb99e931a65989f9c709e391a5f98629c049eb5196c98409ce19d8a196f98379ccf9d6c196c98459cc49d6c1936983d9cd09d4719e097209ca39d2d191197129c859dcd182996129b009d391812958e98729a0e1712958e98729a0e170000fb0ee1102c090000fb0ee1102c0931170e1aec1b731f25169819651c0b20ac15d918561b4e2014156c184c1b8020ad149b178c1a8a2071135d16b5199520641198143319832011108d135b1886203e0ce010941783209e055c0cbb157f20ad854c83451340203d8c818d840f0120aa8fa9926a8ac91f6091f893ca908a1fe8919094c0912b1f7292cb945294f81ea0935195a8948e1ed693bd959095301ed6944f96b896061e1d9542980999121ed095e998179aff1d1c9635992b9acc1db4968199aa9ab31dfd968a99f99a811de8969e993a9b6e1dad96a499ae9b3d1d7a96af99f89b261d9796f899139c121d11971f9a4f9cef1c6c978c9a969ce41ce397069bd39cf31c2898959b729df01c49981e9cb89de31c6498479c1e9ed11c5898579c089ea61c6998569c2d9e7d1c7f98799c5c9e651c8698849c7d9e371c8e98a39c7e9e1b1ca598af9cb19e021cbb98bf9ca89ee01bc498cb9ce29e921be998fa9c219f681bc798dd9cf69e251ba998bb9cbe9eb81a7b98799c4a9e5a1a3098309cd19dc0190098099ca69d5d190598fb9b839d4d199e97e19b769d2b19a297059c6f9d23197397fb9b8b9dee187097049c7e9d00190b97ea9b659dc418a996a59b379db3181c979c9b169d6f18a695fb9ac69c73176497899b4c9d6f186497899b4c9d6f1800000000000000000000fb0ee1102c0931170e1aec1b731f25169819651c0b20ac15d918561b4e2014156c184c1b8020ad149b178c1a8a2071135d16b5199520641198143319832011108d135b1886203e0ce010941783209e055c0cbb157f20ad854c83451340203d8c818d840f0120aa8fa9926a8ac91f6091f893ca908a1fe8919094c0912b1f7292cb945294f81ea0935195a8948e1ed693bd959095301ed6944f96b896061e1d9542980999121ed095e998179aff1d1c9635992b9acc1db4968199aa9ab31dfd968a99f99a811de8969e993a9b6e1dad96a499ae9b3d1d7a96af99f89b261d9796f899139c121d11971f9a4f9cef1c6c978c9a969ce41ce397069bd39cf31c2898959b729df01c49981e9cb89de31c6498479c1e9ed11c5898579c089ea61c6998569c2d9e7d1c7f98799c5c9e651c8698849c7d9e371c8e98a39c7e9e1b1ca598af9cb19e021cbb98bf9ca89ee01bc498cb9ce29e921be998fa9c219f681bc798dd9cf69e251ba998bb9cbe9eb81a7b98799c4a9e5a1a3098309cd19dc0190098099ca69d5d190598fb9b839d4d199e97e19b769d2b19a297059c6f9d23197397fb9b8b9dee187097049c7e9d00190b97ea9b659dc418a996a59b379db3181c979c9b169d6f18a695fb9ac69c73176497899b4c9d6f18000000000000000000000000000000005719ac153e134517531e2119161c482006214d1a341bd621de22c918b719092156241f18d81835213c25311871192f21c6250118b7199320e6250c1846190f2190253417b018ff20f624b2160f1997205d247d18f219452190238a161c1c2520ad1c97948b1cc725201c6294d2215824c617649578252420098b058e5b27e61d23944c8d382923208f961a971b2a1f21b8968d9771291a1fd291d6950a294b1f85940199ff282820ff965b9a4b28d51f6b9526992327e91d7295bb98c526f21c93926497c324041c499246984525571a85942399ea23181cb8957d99aa21841b7295889a04202b1c2f96d69b73125e1d85988c9eaca1dc20e699829ec8a3eb204e94819c21a4cb1e57949e9a51a1971d7593af980c9d6c1b7d915398379ac81a9390ca98f89aa81a9494be9ac29cc11b5496159cbb9d151cec96849c2b9e101c1f97c69c609e051c2f97e79c6d9e021c8d97279d9d9e061c1b97189d979eb21b6997129d629e4e1b4597049d579e201b2897e39c249eb71a2c97d59c0c9e8d1a3297cd9c1d9e6d1ad196c79c2d9e4f1a6897c99c029e1d1a94979c9cd09de3190497579c8c9d791946960c9c089def180f96f19bf49cd918fb95c09bd49ca1183396d89bf09cc9184096199c469db818fd95df9a4f9ccc1800000000000000005719ac153e1345175719ac153e134517531e2119161c482006214d1a341bd621de22c918b719092156241f18d81835213c25311871192f21c6250118b7199320e6250c1846190f2190253417b018ff20f624b2160f1997205d247d18f219452190238a161c1c2520ad1c97948b1cc725201c6294d2215824c617649578252420098b058e5b27e61d23944c8d382923208f961a971b2a1f21b8968d9771291a1fd291d6950a294b1f85940199ff282820ff965b9a4b28d51f6b9526992327e91d7295bb98c526f21c93926497c324041c499246984525571a85942399ea23181cb8957d99aa21841b7295889a04202b1c2f96d69b73125e1d85988c9eaca1dc20e699829ec8a3eb204e94819c21a4cb1e57949e9a51a1971d7593af980c9d6c1b7d915398379ac81a9390ca98f89aa81a9494be9ac29cc11b5496159cbb9d151cec96849c2b9e101c1f97c69c609e051c2f97e79c6d9e021c8d97279d9d9e061c1b97189d979eb21b6997129d629e4e1b4597049d579e201b2897e39c249eb71a2c97d59c0c9e8d1a3297cd9c1d9e6d1ad196c79c2d9e4f1a6897c99c029e1d1a94979c9cd09de3190497579c8c9d791946960c9c089def180f96f19bf49cd918fb95c09bd49ca1183396d89bf09cc9184096199c469db818fd95df9a4f9ccc18fd95df9a4f9ccc183208870838091e0b3208870838091e0b281adf19c41bde20331df91a751c0822cc1f411b741c9a2265210c1aa21b2422c422581a531c972221241e1c161ec5227824191c2c1e1422d924bd1ba91dce211f24741d7c1f2423f823b21cb61e7c230422d11cb41ff6240d1f038992192526231d359c431ade24350ae39ce22047226798c29cc3249020069aeb9af1272a20a199a19bc1280d1f1a99399bf728f41dd698ac9b4e291e1e8d988d9b2b29a21ef6986f9bb1288a1ffb97249a8428cb1e72962f991828ca1c3594759890261e1936949898bc25e205a194e2984f2483126695b998a82060185b9528990c1d391a199421991f9bb01c3394079bafa1941e3e96cf9dc9a4be2076964f9e5ba5ec201697f89e04a41020f2952c9dbaa0c81eb896609d17a0401ed496cc9c649f4c1d2297289db69f851dcc97789dd79f901d3298059e3da05e1d1f98099e1ea0fb1c1e98089efb9fbf1c5198129e00a0b61c7a982e9e19a0a61c7d98019edd9f5f1c6a98a09d499fec1b1798389dba9e1f1b8a97039d969ed61aac97f79c7a9e8f1a8097009d6e9e701a4d97e49c569e2c1a9e97f59c5c9e2c1a1597cd9c199ec919e396ad9cd29d9119b496789ca59d63198a96639c7e9d4919be963f9c519d3919f895c59b249d7d180a95d49a729c23170a95d49a729c23173d095d0bfc0c5d0b3d095d0bfc0c5d0b3818681a471c32219a1a6e1c051ddb227d1c571c631df322291e5e1cfb1d16233820051cba1d6c234e21091cb41d2a230922501c491eb3235122f21c531f18249a22a61dfa1f4a248521bf1d7a20972490205f1b511e0e256f1c289406149a2587173d9d04984625e195de9e438b85242d995c9d3820ff22dd992f9d6c24d121a0996e9b4d2726212299499bd528c620ec9aa49c35291b21d89a679d53299121009b5b9d0c29c0214a9adc9cb7282121ca9abf9c40284f203799719c9e27d71f1f981e9ce125691ffc96d89abd23721ea7981a9c7d21841e78989d9c7d18821faa97169b5b9ed91eed96929c44a3e41ef197389e29a5382031987c9eeba46420e8962f9eb0a22220cd971c9e6ba1771f4298ab9e78a1641f0f99be9e3da1f71e1d999a9e18a1801e9698639ecaa0161efd98bb9efba0031ec298dd9eeca0d91d6398a09e9ba0631d8b985b9e5ca0011d8e987a9e6ba0ef1cc0984e9e4ea0bc1c4498e29db89f391c1698999d3b9ff01bb497649d209f671b8697579d049f191b2f97419ded9ee51a4f97fe9c859e6c1a5f97c89c3a9e131ad496b39c0c9ec819b096909cbf9d7f1997966b9ca69d53194f96489c829d291990965a9ca59d3d198596c99bc49c7f18d6947c9a169c7217d6947c9a169c72170000010c4e0ddd860000010c4e0ddd867919561c861d0c22f7194a1d941e5223751aa91cfd1dfe22ba1b171d001f08242a1d171d5c1fb8249d1daf1cc51e56249d1ee01bd91d94234c1f9c1c051f4a247d1e8d1c881fbf24ae1d8e1aab1da924f91bd1157c1c42252c17e2944a13a5243c0dd69ad390d2246d97099e4e9660258c99089e46118524639aae9d321f3324e999fd9c2124d923309a3a9df526b823239ce09dc728f023ee9a229d37294a224a9b8f9d7b2973227d9a389d1729dc21959b859dc328aa21bf9a4d9dcd2712219d99c09c6425cb20f4972e9cc022b21fd59afb9cb9202620df9bb19d5a18d420e998469d8ea0b7205799ea9d8aa30d2153988f9d9ea442207e96439d3da3991f93989d9e8ba19220e6982f9faba15f200f9a359f70a10f20119a3c9fa5a1791f9099cf9f03a2541fd1984b9f82a1a01ef698509f56a1571e52998f9f5da1411e0999429f12a1d61ddc989d9e90a0161dd4988b9e7fa0e01cf498ab9e8ca0d11c9998659e62a0791cf997cc9db09fda1b7b98d49db59fa51b2a98609d3b9feb1a0098389d099fa01a0098789d129fb91ac797309de19e401adc96729cae9d3e194b96509c869dec18bf950d9c3b9d86183e963d9c759dbc189d97a09ce29d2a19c397aa9c359efa183895439cb69d07193895439cb69d07190000e609020cdd810000e609020cdd817116bd19441b00207d19041d201e4b235b1af71c451e8723db1ab81c491ea723591b401cf61d03243a1bc51bc71da323b21a321bba1d9c238b1bf81beb1e44240b1cf51b251fb02466197e1ab81e3a2545180e0ec6190425000cce957b0ffb23e592cd9a1f904f245298159dd098eb243a99ac9d92998e24e697079caa12b1227499549cb41e32239a99359da6236423009cfc9d5c262324199c209e1628a1237c9b509ecb289523d09a419ebe280d238c9c299fc9281b236d9c7a9f1e281723d599949d6525cd213c9c269e8c228921269c0d9e332038214e9cc29e729bee210f9a099e3ca0002133991e9eaba3e320a2996e9e70a4a720cc98799e4ea2792078984f9e2ca16720ae97169eeea0521f369ada9e5ba1bb1f959a6e9f2ba28f1f619ac79f1aa2671f6999259f9ea17b1e74998b9f89a16c1ea699af9fbca13f1eab99969fa5a1ff1de999599f3ea18e1d6d99fd9ee7a00c1d99997e9e85a08b1cd0990a9e2fa0171c8a99ce9de39f9e1b1699c69ddb9f551bcd98cc9dcc9f451b6098d99dbb9f1b1b5598be9da69fd61a5b989a9d579faa1a1a984b9d049f4d1a0598419dbf9e1f1a4f97d89c299ea419b796469c949d0c198a963d9c759d10197096339c819d20195297f49caf9e6c1a5297f49caf9e6c1a0000000d340e900c0000000d340e900cac140017e318401d46195b1c821d7722e719a01c191e9623501a181dfc1e6024f41a0f1d691fe124301ad81c5e1fd1244c19691c321f63244b197a1c3e20cb241019d11bfe1e14253c162319651ddd2424131616eb1c91254e04ee8d6a18992471946b9a0a93e9241998aa9b9a9630259b980b9c0798b0242a98629a6894ac2399997f9c8e8a4c240f9a959dc21a8f24659b539e60216324349c109fba248d24db9bf59e06276c24369b869e162810241b9c3d9f1b284d24c69c5d9f02280d24389a5f9d6825d421429df09d7122e5213b9c389f2a207a229c9c679f069b90221299579e8ba00d218199da9e76a31521f299f09ec0a3b620b399cf9f16a217211b9905a002a2312165984d9fd9a155202d9a2ea098a2d920029b67a0fea29f20849a63a0b1a23f20ef9919a03da2911fc499eb9fe6a1dd1e01990f9f46a1bd1daf98b09e05a1311de298d09e0ca10d1dc898c89ee7a0e51cec98a19ec2a0a41cc898829e92a0681cb698749e69a0441c86983c9e44a0091c79981d9e26a0ac1b3798ea9d1aa06c1b4f98c29dcd9f221bc5975c9d219fa41aae976d9d199fb91a1298779df99ea41a0c98419dd19e611ac4970d9da49e361a7897fd9c8c9e221a1297379c669db81894951e9b689ccb1694951e9b689ccb160000de0d570f5c0d0000de0d570f5c0d01148c17ef18621c8218001cf51c79213e197a1cf11d5222111a281d041fa423061b3a1d4f1f3824f11a511d541f8f24e119a41c181fb924c918be1b6e1ec9243e17a619711dc7240c152416321cd0246d120e11581a3725fe83aa8d38179324a4947f98411042254398b59b70906b25d698cc9b0498d0246b98449b41984424389bc39ca999da245f9b819deb95f624119ca39db21496241b9cef9edc1db224a19b709e0b2203242b9c919eaf2425247f9cb29fec25db240e9d0ea06d26cb24459b729ea7244f23929d7c9ebc20d9221f9bbe9e851aca228a9c079ff89db122a89a2a9f76a14e22fa996f9f38a20622a99abc9f08a21422659a19a00ea20b224b9a72a0c7a20122dd996f9fb5a19f20219b32a0b6a2b220839b3ea0efa25020f09a51a0b9a20d20ba9a38a05ca28a1f589a24a026a20e1f839a34a05ba2d51ecb9909a01da2611e3499169f29a1721dd0989d9ed4a0ed1c95987b9ea9a0ad1c9c986b9e8fa07d1cd598859e7ca05c1c84986d9e76a02a1c78984f9e42a0091c3e98a99da09f191b6998a09d9e9ff71a7597659d539f8d1a1c98719d3c9f9d1adb976f9d0e9f631a7197a19c249e6619b996459cd99dfa184997859cec9d3919ed96d19cae9ea919c695d49a869c3418c695d49a869c34180000260c5a0db80a0000260c5a0db80a2b14a11755191f1d4a191d1d9d1e1e23a019611d6a1fb7232c1a771d821f1924511a391d501f3f24d519f81c8f1f8b24a118811ce41ec0241618331b411ef624001765190c1df42476143917441c06254a0df410a0192b2512903890e6111624729768982789ba248c98d59acf9458256e99369b5598eb24e398469a4698d7235d98659bc3981824bf9b379db29a9b241a9d979ea49cb224319cb99ec89a3f24739caa9ffd917824e29cfe9ffc1985248a9c359f0a1f5724409c0f9fbf200b246d9a539ea21ef022509cc39ea915ea22729b9e9f129d43234d9c41a093a00124d49ad39ed5a02d22be9a0f9f00a12b22739b19a08ca1c422629aca9f81a12822439ace9fe1a1b7216199c49e7da15e20ce9a00a051a2a320ab9ad59f8aa22e208e9aed9f90a2cd1f5a9afc9f76a27e1f4b9a0ba046a23b1ffd9a2ea049a2221fe79b25a016a2aa1e619c8b9f6da1cd1d609b2b9f32a1571d3c9ae39ef7a0101ddf99849ea7a08e1c7099349e49a0481c78991b9e4ba0151cdd99179e34a0ca1b4b9ba59db29f001b7f99d89df99f041b9698b19d9c9fd41a0c98619d529f541a0b987b9d1b9f1c1a0198089d7e9eac198697e79c869e8819a997c79c3c9e9119a296909c549e531905962c9c939d171905962c9c939d17190000060a430cf6040000060a430cf6049c148b184e1ae71dfc1a4a1d651e0124401a3a1d351f0124341a861da31f9424cc1a771d0420ed24d819ac1c581f81242a18541b1d1e6224bf16611a3f1efb24f4146f195c1d3a25b0120e173d1c16252d0aaf14be1a9025d08cd0877818cb2455947b95d512152564973e99e39226254999d69aad982925ca98279b4599b7248f981e9c569a8e24d49a049d329ccd24389cbe9da49c8d24839cf69e349de5245a9c739f429d9d24289c7e9ecd9b1224789cae9f7098b9240d9d459f8b957924769b459f91998a23449b10a0c09c1724369c4fa0c49e0124ce9b23a022a120235b9cbd9f22a14522839ca5a030a25c231b9c3da06ca1e722fa99559f5aa1ec21b29af19f0fa2fa21c4997a9fd9a1af20889a1ba06da2b020aa9b95a015a3e420f49bdaa02ba303211f9ba5a0d4a27f20d59a60a058a2d51f269ace9fbda1751eab99bd9fa1a1081eb399c19fa2a1c71d78999c9f90a16c1d9c99959f70a13c1d85996c9f5ca1e61c8c99429f20a1ad1c2399d69ee5a0521cf498809ea4a00f1c8e98099e4da0641b70989b9dda9fdc1aca98f69d1ba0351b8298b29d4b9fc01a81986e9df99e4e1a5c98399dec9e111a0698ff9c969ec0193598d99c509ea519fe96589c129ecd18c595d99b609d7218c595d99b609d721800000a0e3b10400c00000a0e3b10400cad133d18ce19871d1e191b1d771e93234f19401d101f1d24aa19701dd81f9f24621af31d5b200f254d190c1d112020253818821b5b1ecc243c16d019ab1d34257414b318171d7a257f127116071c5c25ce0a3311e919a025358dfb8d0516f42409947b95db122325e496e5988a8982255b98159a959675258498359ab297a0249098709b86996c247e9a049d949cc024ab9bf19d959dc224129cc99e539ed824279b099e769d4e24e69b209e0e9d5f241d9cc39e889d71246c9b529e8d9cd323229a019e399d0c22419b479f219fbb22399df6a00fa1b323719db9a057a10f237e9cdb9ff2a0df21e89b67a0daa14b22109c53a0e9a16b22519a2aa094a20122ec9a2ca072a2c621fb9ad39faba1f0203c9aef9f0fa29620e69a43a0c5a2a0208a9bafa0fea28a20cd9aa9a0efa24e20db9a92a0bfa2eb1f979a49a040a2021f579a28a00fa26b1e489a2fa008a24a1eec9914a0fba1f11d249ae89fbba1971df699959f93a1331d0b9a509f39a1f41cc999ba9edea0791c5e99609e82a02f1cfb98129e46a0d11b1999379e3ea0c31be598289e26a0b01b6198b29daa9ff91a8698af9d8a9fbf1a7298659d289f651aaf98099da49eeb196c98989c019e781986971a9c759dbc1821953e9beb9c671821953e9beb9c671800001e09670c9f0600001e09670c9f06b213a118e31a901d2d1ac41d5f1fe822c019a51dc81ff3236f19d21d10206b247d1a951d3720fa241519081daf1f1d253117f41b7c1e4b2481158c1acb1db9242614bd19461d05256b1135189e1c8a25fd0a5a16061c6326d18c760ea4185a258c922493e4124325d7967898ac898c255798e79ad9977725dd98289b6399f724aa98d39b699ad524099a3c9d099db2251b9cf09daf9d5a25059c739f7c9f9725239cf49ebf9faa24c59ba79e1a9f5e244a9c639ef59e0e246a9c349f2ea04b24cc998c9e2aa0fd22c19aa59e57a0fe22ca9cf19f2fa19223589c849f8fa1e322639af99e11a1e621109b869f57a1f9213e9bb39fbba10f22679b01a0d2a1fc21b49a1ca068a29a21f29b9da0a7a25f21559bbaa00da30c21039cc0a06aa3e920539bb6a01fa36b20289ba4a0cea22720069ba1a099a2cc1fae9a94a07ea25c1f8e9a8ba073a21b1f409a6da02ba28a1e1a9a19a0bea1cc1d429ade9f67a1651daf99ae9f5ea11a1d9999759f3ca1e51c4e99249ffda08b1c3199f79edda0591c1f99e79ebea02d1c0399799e6ea0d51b9598d79dd89fec1a7a98c09db29fae1a5398c39d7b9f8e1a28985a9d189f161ac997049db19e971941980e9dc09eb319fd979f9c0d9e19191c96119c619d68181c96119c619d68180000c8039d0519030000c8039d0519031b13bc17ab19ed1c9e1bf91d1120eb230f1ac61d89204924f219361ea420de24171bde1d4e203b25871a3e1d0c2091257a18c01b931e03253016291b151e3a2518149719491df3241d112117631c60255f0aca13d91b39264689e4076217d8243c92ef90b21417257b95eb963e108e253c97cc98dd93bf253c98c799df9632256d99d29b619a3a25229b679d209dce253f9bc59d319e6125ad9bb89d159ebc24999bea9de49e7f24619b5e9f61a0a724819c00a0fba0ba24a19c18a0faa0ad24b09a239f8da04b23929bfe9ec8a00a23f29c52a0b5a1d323989c35a0b5a1b523ec9b1da08aa1f522d79b8ba064a22823cb9c70a062a2c8223c9c7da0efa2c122cc9b95a058a34622ca9b40a07ea204219b9b92a0b0a2f4208d9cbea043a3fb209b9ca5a0eca29220a29b4ba047a20720c89a1ca0ffa13e1fa79a2da00fa2ee1e739a2fa00ba2a21e679a25a013a2651e029a1aa0f8a10f1ef999b69f89a1861df0995d9f30a10c1d229afc9edda0ba1c249acd9ec4a0771c229aa89eaaa03d1ca8995b9e68a0ef1ba499389e39a0ac1b3199149e38a0591bd698de9d0ba0181b72989e9d689f731a2898529d4b9f2e1af797279d1b9f0e1a19982d9d289f361a5997bc9c859e5619ef958c9b0f9d6018ef958c9b0f9d60180000e504580701040000e5045807010410136f18971a7a1d3d1aff1d04200424631a451d931fd32374199c1d15205824d6198e1d1c20d224b018051db81f27254717771b171ee124e5143e1a8b1d6725e613af185e1ca325af1090159a1be825850d641349190a26f689860706179d242190e390c314db24c595a6956d093b253c97799872933a25a9985b9924952a24ad98739b5599ea24419a8e9de79c9725969a2e9edf9e4125db9b159fb49f0c25cf9b989f65a00725009cb39fd0a09d24239cc59fb6a07424fa9c63a06ca18a243b9b9e9fdda03e233d9b2a9fc1a06f23a49db2a0f7a1ca23b89caca08fa292234f9c7da038a2db22059ceda093a20f231e9c7aa07aa2a622c19bea9f72a2cc212e9c19a012a29421559ba19ff0a19320399b84a0dfa2f8201d9c63a0d2a29b20329ccaa0fba2b7201e9cb1a0e2a27a20fa9bc2a0bea246203a9b7fa06ca2b31fab9a5ca027a20a1f739a45a009a2b61e299a12a0d9a11e1e269ad59fa5a1a31dff99ab9f4ba1491dad99539f0fa1e51c4d990e9fe6a0a91c3199e19eb3a0681c3999c39ea0a0411c5799a29e84a0181ceb986a9e51a0d11b89981a9e0da0601b8198bd9d499fb91aad98199dcd9e0b1aa098bf9c8c9e9419d199bc9c3f9e75190f995e9c3f9eec18d496119c7f9d2b19d496119c7f9d2b19000020057e074303000020057e07430305134b18a71a781dbc1ba51dc61fbc23d1198c1dde1fd0239319bf1d2c204424b419811def1f90240f19c71c281fda2433179c1b271ea7240416a61af41de9248514241a711d17253b1190184f1c70256d0a9d14981acc25948ebd0d3c18b1249d92d78d3d1605256095b39692097225b597d498ea944e251e97cb99ea97b124b198449be799ca24d299c89c639c4b25439a559dce9d1825199ac89d129ef224649abb9db29e7b24979ae59d539f7b24459b349e759f68245e9cf69e46a09624659b0e9f9ea07923ca9b309f8aa07723b99c5ca076a15f23c79b1fa09ca16a23a09b00a091a1bc22f59b6ca000a2cd223d9c83a074a29a22e39b3da037a23f22159c92a095a258220e9ca4a05ba276216d9b7fa057a233215a9cf3a025a34921309cfca02ba3fc20ec9b9ca0c8a23220df9a1ca02fa2231f9d9a32a036a2f61e729a3aa01da2bb1e5a9a2fa0d1a14a1e199af19fa0a1c91d179aa29f6ba1651d609a7c9f2fa1291d7c9a3e9ffea0d81c509ae29eeba0851c4d9aaf9eb5a0411c6599089e56a0ad1bf498c09d03a02f1b7f98779d629fb11a6f98699d5c9f7f1a69989b9d579f831a4e984a9d129f041a2a98f09c839eb1194998f49c8f9eb4197c97829c149edd18be957c9be49c5718be957c9be49c571800006083f580070200006083f5800702a2159c1a3b1c2c204519a61d251f11248718861c701edd220419d21ca81ed22379190a1d8c1f6624cd18b51c2d1fae243718081c701ebb249a15461b191e5e2560140d1a9c1d4b253c11cf186e1c9925cb0cc015731ba825b8883d0d0b1811249a91be909314b624629644951289d224ea964098e594f82432973899e197812419986b9a8999c8245f99709be89ac724f199a09c0c9ddb24b99afc9dba9ee324b79acd9e11a0d524129b599fa7a0c724099cbd9f8da0b0243b9ce29feea0af244c9cfc9f14a18924409cef9f31a10e24729c75a0f4a12224869c9fa024a211240e9c76a030a21623119cbea083a232232a9cb9a084a238234c9ca0a098a2f722569cf8a0e1a2e722b39c0ca164a32322269c39a16ea3bd214a9cf7a055a337212f9c04a13fa30421be9be7a000a3ae20799be1a0f4a24f20219b9da098a2ad1fbf9a34a0e6a1b11e5b9aed9f89a10a1e209ace9f77a1b11de399869f41a16b1d7f99479f08a1151d7799f19ecca0b31c5399bf9ea6a06d1c5b99a19e85a0381c5c996e9e74a0041c7f994b9e6da0c41ba3992d9e46a0791b9799e89d19a0241b2a99cb9df39fc91ae998189d0a9feb19ac98f89cc39ec6197298089d9a9ed819fb97959c489e2a190e96859a1a9cb7170e96859a1a9cb7170000c200208aa8100000c200208aa810bc18081d861d9922ea19501ef71f1624a419e61d012028248019bd1df11f4e244d198f1d1420d324f618381d801f16250a17b71c5e1ff6243e16811ce81eeb24e6141a1bd01dc32463125219d91c4b25e10e9d17df1bad258b03a414ec19fe24938e6f0818186f25c393b1919310ba2585964d9871952026c4973099009827257298099bd19a4f254999649c489c4725d199f39c919d4425b99a6f9dbe9dfc247d9ad99d8c9eb9249c9a459e239f9224969bb89edb9f72241b9c569f4ca092241b9c03a01ba18124d19b05a037a1bc23189d96a0cfa10524509cb2a037a21224059cd3a08da2c623bf9b22a1c4a29123f39cc9a0aaa275229c9b96a05ea3f621c79b96a00aa3f0211c9bef9fe7a1af20bb9a7ba02ba2eb20c49b57a039a27c209e9b56a03da25620019b40a004a2fb1f709b67a034a2681f619b7ea03ca2271fdc9a51a00fa2a91e759a2aa0e0a1581e039a1aa0c9a1fa1dd999b89f86a1a11d7f99629f2ba1281d7699cb9e9fa0991cf5980a9e3ea0041cb298e69d1ea0991b9098a89df19f241b0899bd9dda9f2a1b5d99d59d03a0231ba89aaa9dc79fd91a0d995a9d429f581a9698219dda9e141a6f98e79ca09ec4198c98059dc59e061aa7978a9c619e83193e96159ce79db7183e96159ce79db7180000a28bf88da80e0000a28bf88da80e641a9e1b4e1d5b21171a101d8b1fdc228b19f61c1f1ffc22c519281d9c1fd1231619261dac1f22241718d11c801f52249516171c0e1e5e249715df1b081ea724fc14791a121dfe24d4121219211c67259d0ea317fb1aa2258b03b51420195425178e7f0ed418b825ef926d081615b5256b94eb94250a9125899504977893f524e896be9924990625e698af9bb79bcd244d999e9cec9cc824f4995f9d059eaf24209aee9d3d9fb624b19ab09e3ea0e124329b449f5ea0e624229cac9f8ea0f324159c28a05da1c9240c9c49a083a18224249ca9a05ba251240c9de5a085a24324e99c2fa127a34224539c67a146a327242a9d04a18aa272239b9cefa0ada2b022629ce5a0a2a24e22b79b03a1e3a20a22ec9b9da069a226219c9b58a002a28d208a9b63a0f8a14120449b64a015a202202d9b67a016a2ae1fe39a54a002a2541f829a25a0b2a1cd1e499aa29f5ba1131ef699879f57a1bc1df399719f4ba16d1d9d992d9f12a1121d5599ce9eb1a09c1c43995f9e68a01a1c4599489e64a0d81b6e99299e30a0b21bc19a899d6a9fc81ac2994a9d629f591a1499199d0d9fff196d98e69ce59ea4190d98d89cc49e93190d98c19cb79e8a193c98c49c959e8f190098959ca49e0e19e296929c5a9e4719e296929c5a9e47190000718df38c910e0000718df38c910e2c18321c461d42213219fa1cdf1e05239b18a51c741ef7227f18971cc11e33231918401c1c1e80234617041c271e14249516d71b4e1e382470153f1bfb1d4024d613e219401d572430114b18251c9424f80d9217571bfb248b0379163c1b71251a8e82138c1acd25239270084715dd25e294fc93248a0626a9966796c193ee25e796ed986098b1254298409a179ac425ae98009c3a9c9825e199d09c529d6f25459a569da49e3a25eb9a169e689fec247b9b5b9f74a00325b39b509fa7a00f25b49bcd9feea0d324609bbc9f0da17324929c44a05ea14c24259c6ca0aca17424949cbca06ea23224b19c31a1cca21a24ec9c9da12fa3f823ec9c7ba106a38923329c3ea111a3da22389c44a10ba33d22de9bc2a072a24f21bd9b65a004a28920319b44a0bfa123208f9af99f6fa17f1fb89af19f61a1cd1eb19adf9f51a13e1eaf9abb9f5ea1f81d609a589f23a1ab1dde992b9ff0a04c1da499ff9ec4a0031dae99e29eb9a0dd1ca199d69ea6a0a11c5799979e7fa0541c19994d9e56a00e1cdd980f9e34a0a91bb398ee9d08a0671b6e98989da59f111b3398529d429f971a0b98d09c529ebb19d297339cc59df51805980e9cd49dbf18c6982d9cd29dfe184e98da9ba69dbb189896739b609d98179896739b609d98170000f38b2c8c2b100000f38b2c8c2b104b16f219371ce4207c18151cae1ddf214918151ce11db2229917861ba61d7e227d167b1a1d1d96229e15011ab01c1f230f15c919b21ca6237c147919821c0a24b313f618d51b402488110e18391b7724f00ead16f4199724c108ac15a919fe24558c5f14681a6f2561913a11f017952559948891ef09fa258f957a95169447266096f997b1983f2686970c9a7e9a3f26b398189caa9c9726f298159d069e3026ad99d29d299fdd25ff998f9e2da09b25d49a309f3ba06425ed9af39e55a05b25249bf19f21a13125f99bb1a01ba2fe24279d89a119a3fc24e59c98a14ba3ee249f9c58a10aa38e24639c55a1dfa21824b99c1ea1dca22d232e9cc7a07ca26222009c93a034a2ec21cf9b81a0f7a17d21929b44a0cca1d2201a9b32a0b7a16420e19a14a086a11420cb9a1ba09da19d1fb09a2aa0c5a1291fc49a19a0bba1a41e979a07a0aaa1221e149a5d9f3aa1821d8f99ba9ea1a0e21c6b99589e6aa0751c58991c9e3ea0381c4a99ef9d20a0f01b2799d69d0ca0901b3c99a99dec9f551b2499939dd69ffe1a2999b89dd39ff31abe99949da19fb11aa49be29c8d9ebd192999089d2f9fcc196a989c9c759e5e198997229cbe9de0180897969b299db718bc96109b119d81186b96199cdd9d0a196b96199cdd9d0a190000048b078c7a0c0000048b078c7a0cd216301a1d1dcd20f3184b1bc21d30214718001cd01d7d22d217be1bba1daf220d16861af41c5a226d15051aa41cca229814f718181c6823ef117317a71a5523a910771585197023330e8d14b7181724b9080d13601887243d83d0114717db24ac8d550d8416322534919d874312712568945392c1882b2521958c94b09287254a952e96469513263d969598aa987526f698709b199cc0265e9b559dbe9d8226739a539e339f7226f89a0d9f1ea03a26739b44a00da16726579b60a05ba12e26079b9fa014a2c225079c09a19aa26b25519ce5a02ea2ed24a69cd3a05aa269245c9cd3a07ca2f9233a9c9da028a21523c09c9ea0cea16722e29c86a029a227225c9c6ca027a2d5211e9c6ba001a26621ed9b71a0daa1cb20bd9b44a0b7a15520419b06a092a1ec1fe49adb9f7ea1461fc49aa09f67a1bf1e919a6f9f38a14a1e889a659f0fa1e21d859a3f9f07a1b11d2e9a079fe7a0431d049ad29ec0a0f31cfb99909e8ea09e1cc8993e9e54a02c1c10999a9db79f7e1b5698229d1a9fa61a2498e99cd89e5b1a1f98d29cb49e3f1a1a98c99cae9e141ab797bb9c769ed1192a976b9c1d9e6519c1962c9cb29d17199496e09b639dc418eb96cc9b559dc718d895e29a1d9d6318d2958c9b5d9dfc18d2958c9b5d9dfc18158003836a81a812158003836a81a81242144217f018ad1d7f18d11a9f1c9b21ac17ad1ad41cec211517cf19bf1ce821dd153419231c1b22c4143918b21a4d225f1205166f19a12201108b13f0177e22780c1b10a216c9226282ad045e14af224b8a1c8bdc11c822f08e65913910c82247910194f30620230193bb9417871023c4944d960991312408951296d9920a246594aa9544947323ef944b9603955423f6960599a998712460983a9c809c0e25679aeb9d7e9e7225a199e99d179f9d253999019eae9f8725d699eb9d4f9f99247899a99e4ea07c242e9a0a9f9ba0be239c9b909fc8a0b423659bdf9f20a14c23299cc79f30a1b222e59cf89f42a16122039cce9f4ca1e8211f9bdd9f54a16f21b89a08a099a1d220d69aaa9f35a162209f9a479ffaa0821f769a259fd3a0251f2b9ad29ec3a0821ee299a69eb8a0261e199ab29ed1a0011e1c9ab39ed1a0a41d0e9a8b9e9ca0431df299439e54a0e21cb499029e39a08a1c4d99e19d1fa04d1c4299a59d00a0001c1999999dbd9f951b22995e9d7e9f221b26992f9d3e9faa1af798fc9c049f541ab898db9cba9e2c1a8a98b89c9a9ee0197698989c529eb81969986b9cf39d531956984e9ce09d1519cc972f9ca89dd518da97fa9b529d90186e96ba9ae99cc017f295329b859d8f18f295329b859d8f18000088807200880000008880720088000613891797197e1db816e81acd1c7f21a816191acc1c9221e5157d195d1cc62126159f18d01be821191443179c1af3211c12da1537193d22e80f2a1480180022890dee10e516ff217007930d91153d22648758840d14f0211090878f4e0fbe21bd91c592b50581211893b693428c4d21bc945495e3902b21bf950d968193e020fb957d960a936420289621971594222011962f9708950720e1963898f896df1f7f9811990f991f208399c0991b9b0020f099469ac59b411f069b629c0d9d4020c699ac9c389dc81fd499d29c7d9da41f009b3c9d8a9e0420b79a7f9d939f1520479ac89def9f22206d9a689e6ca05b20ba9a8a9ea3a02e20859a629e94a00320c299659e74a0af1fec993c9e47a0f01e6c99fa9d40a0741e8799fd9d36a02e1ef2993a9e69a0221e099a2b9e63a0e11df099229e58a07d1dbf99009e3ea01d1dbf99ce9d15a0a31c5699af9d07a0411c0899929dd39f1d1cf3988b9dd29fd01bf498809dc69f811b0c996f9d8c9f521b1499519d539fec1a1199389d2f9f951aa998ee9cc59e381ab098bf9c8d9ee819a698bf9c7d9ee8197e98c39c659ebd192798bc9c719eb5198997689ce39d4f196797239caa9df218c497379cab9d0919c7950c9c649ec718d3967b9a8d9c5e17d3967b9a8d9c5e170000bb03010799060000bb03010799066615ed18b91a951f2b16ce19151cd9206b161e1abe1c7721bc159b19ae1c7421e7149218991b6721a1138c17a61a342116121a16b21928217c10a5141f191a21b70d4512221808214506da0e4f160c214e86ef0909151921a68ca389df11c920878ebb8fe40a45207e903b917e84cc1f37916493d18f3e1ff3915e9493913f1e7292e79401936b1dae924695ef94d01ca3934196bc967e1c8f9410972698651ce5944c976c983c1c12957c979098241c2f954697ad98291c24957f978c984a1c53951898b699521c45953b988f99af1c97963499ed9a2a1d68988d9a869cae1d9599329ca89dec1d5d99c79c5a9e1e1e8299f79cd99e261e5699b09c389ef01d01998f9c2f9e7a1d3099ff9c189f6d1d43992d9d529f701d5899579d7b9f571d5f996d9db89f291d70998b9d02a0051d82999a9d1da0d41c74999b9d0ca0b11c6999939d04a0741c5399929dd69f3f1c1e996f9da79f031c18995e9d7a9fd01b0c99589d6e9f6f1bfb98329d419f3a1b0c99169d169fda1ad898e99cee9e7c1a9998c79cb29e1a1a7a988d9c619ed0199e98869c579eb519aa98729c2d9e8919cd986f9c119e581906996f9c0c9e3b1962983d9cd49d10192597109c9b9dc0189f96319a409cc6170c96e198dd9a6d160c96e198dd9a6d160000150ee310a60a0000150ee310a60a6c18af1a5c1c1c20f5167e1a9d1ca52011167a19191c8e202c15c2185b1b9020c9142918a81a9520b2138716d91987209a11211504197d20410fb71227187320d30a161099168320eb017109b6148220c685fc88371221205c8ce58e510d6d1f489076922a8d5e1f18912c9497911e1fef9122959293dc1ece92bb953095a41ebc93a5968c966e1e67944297e7975f1e31954b98b7985b1eec9557994a9a7d1e7296dc99d69a501ea696e699089b041eb496019a4d9bcf1d9896ff998c9b811d7e960d9acc9b6b1d5f961a9a209c2d1d0d96259a2c9c061d47962c9a149cc91c7a96159a279c7a1c9f96419a499c5e1c2797b19aa39c7f1ca697229b0f9d981c0198829b6b9d7f1c3398df9bba9d761c45981d9cec9d571c5798349c1c9e471c8998749c6e9e391ca7989b9c979e261c9e98ac9ca29e101cb798cc9cc99ef01bc998d59ce59ede1bd498fb9c1c9f9a1be0982b9d529f721bc798129d1a9f351b9f98e39ce79ed01a8e98a19c759e5c1a3f983e9cf29db7190398199cd19d5619e197f99b8e9d3119ad97df9b7a9df4188c97de9b689de2185997e69b769dc7184f97f09b7e9da5182797bb9b5b9d85180497ab9b389d6d183697829b0d9d7d18c0963f9b099dea1758981d9c919d791858981d9c919d791800000000000000000000150ee310a60a6c18af1a5c1c1c20f5167e1a9d1ca52011167a19191c8e202c15c2185b1b9020c9142918a81a9520b2138716d91987209a11211504197d20410fb71227187320d30a161099168320eb017109b6148220c685fc88371221205c8ce58e510d6d1f489076922a8d5e1f18912c9497911e1fef9122959293dc1ece92bb953095a41ebc93a5968c966e1e67944297e7975f1e31954b98b7985b1eec9557994a9a7d1e7296dc99d69a501ea696e699089b041eb496019a4d9bcf1d9896ff998c9b811d7e960d9acc9b6b1d5f961a9a209c2d1d0d96259a2c9c061d47962c9a149cc91c7a96159a279c7a1c9f96419a499c5e1c2797b19aa39c7f1ca697229b0f9d981c0198829b6b9d7f1c3398df9bba9d761c45981d9cec9d571c5798349c1c9e471c8998749c6e9e391ca7989b9c979e261c9e98ac9ca29e101cb798cc9cc99ef01bc998d59ce59ede1bd498fb9c1c9f9a1be0982b9d529f721bc798129d1a9f351b9f98e39ce79ed01a8e98a19c759e5c1a3f983e9cf29db7190398199cd19d5619e197f99b8e9d3119ad97df9b7a9df4188c97de9b689de2185997e69b769dc7184f97f09b7e9da5182797bb9b5b9d85180497ab9b389d6d183697829b0d9d7d18c0963f9b099dea1758981d9c919d791800000000000000000000000000000000321b2a15f61547199c205f18621c311f6523fd197f1b3a21302591198c1b5c2156267e191f1b4e2275277e19a81a17224a277018aa194b2125271619ee19ec21f826c118dc19ba2112265c18af1986217725221ce01cbb233525ae2269249e26791faba10c9d1029ba1e739e4c21e822820ec9967625ab1e618d6d8bbc28561d3098ad8f7e29f71d55992492f729a11ebe973693ff29de1ee5959c9761291820ba948299cf283620a296229a8128da1f2d946f981128a31dbd914b96f926d91c11917e94b225981bdc91ba941b25111a16919d957a24b7199b90fd951722fe18dd8d4096511e481895859395c7113e183c8bfa97d59eb819fd93739a65a2e61c0c95da9ceba4312073968b9c86a31120c3941b9cf3a00d1f3995ea9a3c9d8a1d9093ba9a6d9c5c1ca995299ca29d531ccd97f59ca09e731c3598319dfe9e3a1c35986f9d329f3a1c3898879d469f3d1c4498ab9d6d9f241ce997959d4d9f051cbd974b9d049f5f1b7f97109db19ef51a7597ee9c679e8d1a5597d49c349e341a4797db9c349e281af196da9c2e9e131a1197c89c0b9ec819b996829cc09d7519a496519c6b9d1d191596269c299dda18ee95089c119da818fa95ed9bfc9c7b184a96ce9bdb9c511834968c9bff9c14183f96049ba59c00180000000000000000321b2a15f6154719321b2a15f61547199c205f18621c311f6523fd197f1b3a21302591198c1b5c2156267e191f1b4e2275277e19a81a17224a277018aa194b2125271619ee19ec21f826c118dc19ba2112265c18af1986217725221ce01cbb233525ae2269249e26791faba10c9d1029ba1e739e4c21e822820ec9967625ab1e618d6d8bbc28561d3098ad8f7e29f71d55992492f729a11ebe973693ff29de1ee5959c9761291820ba948299cf283620a296229a8128da1f2d946f981128a31dbd914b96f926d91c11917e94b225981bdc91ba941b25111a16919d957a24b7199b90fd951722fe18dd8d4096511e481895859395c7113e183c8bfa97d59eb819fd93739a65a2e61c0c95da9ceba4312073968b9c86a31120c3941b9cf3a00d1f3995ea9a3c9d8a1d9093ba9a6d9c5c1ca995299ca29d531ccd97f59ca09e731c3598319dfe9e3a1c35986f9d329f3a1c3898879d469f3d1c4498ab9d6d9f241ce997959d4d9f051cbd974b9d049f5f1b7f97109db19ef51a7597ee9c679e8d1a5597d49c349e341a4797db9c349e281af196da9c2e9e131a1197c89c0b9ec819b996829cc09d7519a496519c6b9d1d191596269c299dda18ee95089c119da818fa95ed9bfc9c7b184a96ce9bdb9c511834968c9bff9c14183f96049ba59c00183f96049ba59c00188306b70bab0df9118306b70bab0df911371c221afd1c7f206520481c911d6b22fe22721ca51db823aa24c01bea1c7923ba25061b831cea228326f41b5c1d7d221527991c381ebc2153272b1dcd1ebf21c726791f0021f0225f26a1218823ef24fb24c82133244227bb217d9e7c9cd026821c6ea1be9d282311945e9fb31fd920b39ace9da325561f4b9c2098d428301e019d419b9229291fa39b959bba29ad1fce9a289cd52935205d99f19a6329b51f7299569b2b296c1fa197a299dc28b51d42944f971328fc1bc0929d962a27f3195e944998a1262c19b6945698f624fa18da9381976e21811741932297321b90160d938797d691aa18e0933f9813a0d41ab2929398eca3141cb393019a20a5e81d4395a99de7a4af1f0d965a9ef0a22c1f0f99ea9e57a1281fb298cf9d8ca0e91da998e39d5aa0af1de398889ea7a0b81d7599d39edba0881df898909e8ba0141d8c98339e2fa0b91c6398fd9dfd9f6c1c95981c9e1aa0821ca198fb9d10a0461c7898ad9d8c9fd91b30984b9de49e151b98971e9db69ec11abb97239d8c9e7b1a6a97fc9c6e9e491a4e97ea9c4d9eff196d97eb9c3a9eec192797d09c159eae19e396b59cfd9d5e19ca968f9cc59d3319aa966b9c979def18a0963c9c409dba18f795579bf29cab1730969c9a4a9ca41530969c9a4a9ca415840c171129121711840c171129121711d619dd1a201d1721411de21c451e5423cf1fd91c331e3223a3215b1cd01dfe22e4236b1cd51d8b23cd24691cd51d47238b257a1c2f1e6a23c025a51dc41f2224a125571e792033240a25531f7921a024a623671d8220b52562200198c48b9925a61915a0bf9dca245c99b09fe6917b23c69b6b9d89211422bb9c8b9dd725b6217e9c259cc928c5215b9b809b0e2af420b69ca39d142a9521f29ba89d8e291b21ae9a019d2329dc20ed9a729df728c820c099999c9b2803202c98c39b5c27bb1e20982b9c72269f1e8697019c42244a1e2c97ad9b9021e01d6f972d9c7f18241ec296229c909b541e31974f9c41a2431e5595869c31a50e1e1296d99c38a58a1ef5949a9d1aa4bf1faf97d59e08a32b203c99bb9fa0a22620da99df9f6ba27f1f2c9acd9f1ca2321f5799539f7ea1541ec3996d9f68a11f1e6b99589f4da1de1d0999f39edca04c1dcb986c9e79a0be1c9498719e79a0b01cd098619e66a07f1c7d98fb9d0da0281c4898b79da39fb21b0498959d659f461b0b98879d429f1c1bc397679d289fbb1a8d972c9dde9e711a5497eb9c489eec192397c79c1c9ea319c596a89ce59d6e1983967d9cb59d20194a96629c9b9de4183e96679cac9deb18dd962b9c5e9d66187f961c9ba89c10177f961c9ba89c10170000e60f0d11810d0000e60f0d11810d7019611cfa1dc921521b0e1d271ed922991c031da01e4923631ee41c681e80238920311d011f2a248f21351d381f3124c922261dd91e0e242524f11d49207524b323e21d9e200025cc224e1ccb1ecb24f720a518fb1c9c24761d6d95e310dc24f610379d8b9aba240d990f9fc79ad824179b529eca164524279c729e57212d24419ce29d12265323ab9beb9cf028b822939cd59d0b2aa8221f9ce59d2b2a0c221d9c269ee229e321229b0a9e7d2998211b9c879ee028f621bc9a6c9e28287d21a899ae9dee26c320f398939d06257420b699bb9d2b217d20119b099ebf18ba203d990e9e8f9dbf206399ba9e57a411212c98999e1da6b520bd974a9e4aa521206597c79e60a322208e99e39fc1a24020b49a2ea099a22e20889a2ea0aea2f11f999a5aa0eea2c31fd69911a01aa2b61ea599b49fa2a12c1e9499d29fa1a1fc1db199949f67a1ba1d5a99d19ec2a0ec1c3099be9ea8a0b71c3899e69ebba0ad1c0799bc9e8ca06b1c7198f39d05a0a71b7698c89dca9f581b5698be9da69f101b3698af9d739fc31a4198ba9d7f9fd01a1098669d279f4b1a6897e99c759e9a19f796a69c159e2119a2967d9cc59dd8185b966a9cb89da71867979c9cdf9ddc18b797ad9c2f9ec2187a97ad9c339ec2187a97ad9c339ec2188d033c0fd50e3c0f8d033c0fd50e3c0f7a1668183e19481cbb19d61cab1ef322181c851d331f4624ee1c221de41e1f24611d971c6a1e1e24fd1d3f1c251e0024501f481c3a1e28247620b61c771f83248420ed1c11200625881e921bfe1f1525b61cfc13641b1925f0187c972e8a0025708e5e9c6b9889244098b49d1e9ac324639a6c9ea7987e24919be99d80166f24429cb39da8211824529ba99daf269923aa9db99e33292124339d059fd9296c239e9cef9ed229e1220e9cb29ec42956223a9d8c9f2a29ee22909c549f67288722d19a869ee826d021209b3b9fef24f4210e9c2a9fb020be21e69b509fb612b5212c9a109f459f5e217199699f67a47d21fc973a9ffca5fa202098be9e87a4812001995d9fd8a2b1200d9a53a065a3d2208b9b98a060a3ad20029b85a072a34c20609b86a058a3f21f549a2ea0a9a2e51e369a2ba038a2961e429a3da037a2661e1f9a1fa0f6a1111e039ac49f87a1881dbd99449f23a1041dd899d09ebaa08e1cec99799e6fa0311cac992f9e3ba0c31b34992d9e22a0811bec980e9e15a0341b6f98f69dde9f011b6898d49db89fb61a2b98909d539f681af097569d0d9f041a9c97189daf9e9e193297b59c1a9e4119b0966c9cc89def189e96569c919de718bb96499c9c9d04191d98dc9ca29e3c191d98dc9ca29e3c194e0ae111ee1135114e0ae111ee1135110c16031804199d1b8a19f61cdc1e4723451c4b1e4620ac24031d001e30209924c71cd81d0520c1242a1c1f1d991f93243e1cd91c0a1fb524891c641c5c1f1e25a91c4e1c441f7425e51a6e1ab71d47258d18d015141cfd24ed13478ecf17be246492cb9a5c95db24d0966c9c79981a25ff98159c4998a424c19b5c9ca395a824039ce19d85169b24349b409e02228f24859c499f1e269224c49c03a0c628a324249d33a0b529a124059d40a0cb296924449d48a06b295024149c6d9f8a280d23039a379e8d27b721ab9b309f93255322b79bef9fcb218022429c059f37199b21569a479f4ba0652186991da0d1a4d0214997909ff8a515218298dd9f43a4f6207d9a70a010a34421ec9aeca0e4a35c21389cfba0d0a31021da9be1a0caa3a520a69bdea0aba35a20ff9a99a012a3d61fed9a8fa0daa24f1ff399bb9fd1a1e51d24990d9f3ca1101d2b99239f49a10f1d1199089f2fa1d31c2c99049f00a1b11c0f99c89ed5a0721cfa98b09ea0a0321cc0986c9e63a0e61bb798439e3da09b1b7298f99d0ea0421b6098dd9ddb9fe41a1598a59d729fa41a0098809d509f8c1a0f98769d209f491a0898409dd89e1d1aed971e9da59ed719d797f89c829eac19bd979b9c2d9efa18ae965a9c2d9e9417ae965a9c2d9e9417d307bf11bd111013d307bf11bd111013e71430186619261c0a1a351d091f2823c01b831e6d20ad24311c4e1e5720ba24fa1be11d3620a024f51b4d1df31fa024601bc01c2d1fac24491abf1b541ee624d219ae19b51d08251218bf17441c012589158c11ec1a60259d0d5093f614ee24799380994b90f224d697db9b66950c25829aeb9cee99e224a29bd29de89a14252a9cab9d95991525569b359d4219bb249c9c759d61216224b09c869fb125d0248e9c2ea01328db24cd9c26a0e428c1243b9d2aa05629b624429cea9fcd282a24579be79f2128f523b69cd99fd12590237f9c0a9fc5217e22549c739fa9128222e69a05a030a1aa2283991ba052a45422ec9815a032a4c021469a2da0b7a24121889bd9a091a37521a59b27a10aa45421dd9ceca0e3a300213d9cdba0d2a38e20009cbca07aa32d20e39bb3a03aa3e91f549ba0a0e7a2701f4c9bbea0f7a24a1fa79a82a099a2a01ea199949f97a1801d41990f9f39a1de1c0999f79ef5a0c01c0c99e19edba08b1c1199e29ec6a0511ce098df9ec0a0421cdd98a79e8ea00b1c7b98099e17a0541b6198b29dc69fd61a0898809d769f771ac797559d279f241aab97429d1b9fdc195c97e79c969e8719e296989c479ef5184697aa9c539e18197597669c8d9eb2184297cd9aa79c7e164297cd9aa79c7e163c08c011eb11d1103c08c011eb11d110af1427184319081c5a19df1d0d20fd231f1bd51eae20d024721b4b1e7c209e24a51b301e5820cd24291ba81d3a20cb241d1af31c781fcd24a219c91b801ecf24f5185b1aea1d2f2509179918c11c602558134111ee1a4a2593840591f414fd246596af991093ea24bc98789bfd966e256c99b29c8b99df25939bcb9c99997b25449b559d069a0625419ca89d539b9e24879c399e5b967d246f9cec9e091c4124819c3fa0d3229824fb9c1ba0e2258124cf9cef9f0c28a024689cc69f28284624279ddf9f5027ed23079d85a000253c24339c16a06a1f5623399c14a00a9bf022639a1ca0d1a1bf22ed988a9f91a3e621c69937a0d8a2f021cc9a85a051a2fc21d69a6da01fa35b21029ce4a0a0a35321489cf0a0d9a31a211b9c8fa062a36a20e19b87a027a32f20159b72a0fba2d71faf9a6ba0a8a26f1f1a9b50a07ea2d11e509c21a020a23c1e869cb89f8ba1ad1dbd9b769f7aa1631d9a9a4f9f47a10d1d1c9af79efda0a81cd899a79ea4a04f1cfd99749e9da00c1c6d9a869e65a0d51b4e9a4b9e1aa0771b7799129e0ea00d1bba98e09dd39faf1a3698a09d889f431a1898569d3f9fd1198697fc9c9c9e6e197a97d19c7c9e3219b297cb9c509e2b19c397bf9c689e1f198c97fc9b4d9dbc178c97fc9b4d9dbc179e0854118811c60f9e0854118811c60f471581188e190d1b381af61d22200e24ba1bb01eb720c224ef1b361e7d20b624181c041e6220e524351b7b1d4120f324d6190f1d1a205625d518251c4a1fa5255817421a641ec0253715ca18001dcf25f90d0914651be025718dbb8e5218a52515957c97c010b8255d972c9a0794c52517991b9b0a982a2588995b9cd5990d25059a209d529bc824779bf39d8d9cd824749c609e469dc824b69c239fea9dba24ef9bed9e92913b247f9c9d9f0f1e4e24059d55a08f22d424b19d0ca0f0235224ca9c3ea082233724549c33a02c1fe423879bbc9f9610cd22529b609fa39f2d229d9a339fcfa1ab21ec9acc9fdaa1c821fa9bbca064a2df22289b76a04aa23622199ca4a02da3e021039c7ca03ca32221a59b8da061a3c820839beaa0b4a3ea20469c55a1efa3ec20059c3aa1dba37620fc9beda076a30420809b5aa073a2b11ebb9a1ba0efa10a1e969a32a0f8a1e61d509a2fa0fba1a11d539a23a0f9a1651d489a04a0c7a1121d679aa99f79a1b01cd699219f14a15e1cbf99c89ebfa0051c0e994f9e6da07a1bc4982c9e35a0161bac98059e2ba0e81a5898cf9db89faa1a1d98779d589f041a30986c9d3f9ff7194998299dd09ea0194098d49c5c9e18198198be9c4a9ec618f597ae9b399dd217f597ae9b399dd217e90d151342146412e90d1513421464121c14ef170619341b001aac1dbf1f13240e1b501e4720e3244e1b501e7020e5247f1b331e82201925501aa61d502038259719c41ca71f4a252c18791b4b1e82254016a0198e1db825d2132117231cba25de0dae0ea319e0255e8d5c91bb16872595949696e0092a25ca97d398ea921b25e498f19988963225d799cd9b38984725349a879c179aaf24f99b0c9e3c9c2325199d909fd59d6325799ca79f5b9ed5242a9cf89d3e9cde234e9d0e9f3f9a4624759d67a070986f244b9d71a00e930c24d29c74a046949323749ceba0169cc4238f9cbfa0db9fd422a39c44a1d5a15f23279c00a18ca2c022cd9ccaa00ba24f22399c3ea1c7a2ab22279c16a169a32622749c06a180a3da21369c2ca1f3a3a121259c29a1dda36d21169c33a1f1a31e21489c4fa10da4fb20739b0ea1a7a37520699bd5a03ea30320739b9da0d4a2381f0f9b8ca0afa2b81ee69a8fa0a6a2721e8e9a6ba069a22c1e8e9a44a01fa2c61d6e9a1da0e6a1671d5d9ac89f91a1f41c009a319f18a17d1c8399ca9ebfa0301c1a99799e77a0d51be198699e5ca0a91bb298429e3ea0561b89980a9e08a0ef1ac198ef9de09fad1a0899b49d889f691a39991e9dc99e9319b5989e9c149e0819f797099ca19d8518b296909b7e9de417b296909b7e9de4170b038b108d10a50d0b038b108d10a50d27144e170919c91aa919a81d05207823a91aaa1e9520a624f11aab1eac20f224211b631e97204125b819cd1d34204c25d618fc1ce01f11259b17f51b791e37258615e619831d7b2552139c18b81cbb25ab0d0815161bd725278d5c0830187b25bd93c294e90953251a97239985906025a398299b64989e25c499c69c299b9a25f899399d9d9c6625889b429e199e7f25529d1c9ff99e4425949c509f2a9ff424e99ce79f2ea0c2249b9ccc9fce9f59247a9c48a038a070240b9e81a033a06824209e98a06aa0d923e19c8fa08fa0ca23da9c98a00da15d23d19cb2a015a22d23fa9cbaa07ea21023939dcca04da2c2228e9cb6a09aa25d225e9ce5a00fa30a22569c17a1f3a3a421059dbda12ba4ef219f9c31a1e3a331213b9c17a1e2a3d920e89b05a1bfa37d208b9bdca041a327204a9bbea007a3bc1f679bbfa0efa2871f609bdaa0f9a2431f469beca006a30e1fdf9ab6a0b3a2751eb09a56a017a2c41d3e9a22a0aca1431de99900a077a1ee1ccf99c49f5ca1ca1cac99af9f4ba1971c6499439f06a1411c2d99959e8ca08f1b9098dd9df09f971a1d988a9d869f191add976c9d4a9fd619a097319df89e9819a597129dc89e58191e98229de19e68192598dd9c629eb818c897bc9c8f9e2418c897bc9c8f9e241800002e01fd00658000002e01fd00658007148917dd18271b081cee1d5f202c24041c771e9e20a624ba1a9a1ecb201025fb1a591ea92039251d1a841d3a204125b318bc1c9b1f4f257617cd1bd41e61250515f319901d8825ec11f7165a1cbb258d0a9011f51ae025ca8c55882e18852593935f934f135d25c495fd96f1096825b297e4988f930e251299759b2b993725169ac79c869c0425c99b9e9d289df824589c969e769e4e25a69cd19e7f9efa24569cd89e259f8d24699cf59f75a09924719d35a0cfa08024dc9c76a069a14e248d9c44a031a1ad23839cf29f4da1f722659c55a0a2a11e239e9cada029a27e23239df8a087a29923349d4ba16ea39123a39ceaa096a38022cf9c3da1d8a37022d29c7ea121a44d225d9c37a1fca394217a9c41a1b5a35721679c0ca178a3f7207e9cf8a065a3aa20149ccca019a33b20799b94a0c5a2b51f249b6ca085a21c1fda9a6fa088a2ba1eca9a5aa08da2651e6c9a42a03ea2fd1d7e9a12a0dfa1941d8d9aba9f89a1221d799a709f2ba1bb1c739a339ffea0711c5a9ae89ed2a0431cdf99b89e97a0041c7899719e66a08b1b1699319e35a0421bb298de9df09fbc1a3b989a9d769f391a4398709d4e9f1d1a0b98459d229fcd19eb97169de49eaa197797809c5d9ecd183e98329c4b9ded173e98329c4b9ded1700007d0172017f0000007d0172017f0085121917be18971a8c19cc1d4d20fb23be1a961ebc20ca24181bb41ebc200725e41a631eb0204f258f19601d3520682554185a1c221f80254a16ea1afc1d89250b149e18c01ce025bc1004167e1bd8251e0a7f117f19ce25128d7488e4169925af91b893c5137a25e3959597358aba253e980b9a8f958025069a3c9c75997125d99a009d789b6b25cd9b3d9ec59d85252b9c3c9f5f9f5b258b9ce39f22a021259c9cd09f84a0d524b99ce09f9da0a424ba9cfd9fb0a07d24b29c16a008a15f24979c28a041a12124a79c32a079a11a24099dc2a008a2e323fb9c3aa1f8a2df23089daca194a3fe235f9daba1bda3ef23579d34a176a32323319db7a010a30522de9cdba0f1a2ad21539cd3a035a340210e9c1ba167a347211e9cc9a020a3b520b19ceaa067a38b20a89ce2a044a35020489cf5a022a32f20ca9be9a0eca2eb1f449ba9a08ea2331f309b86a06da2af1ecb9a64a03aa2221ebc9a2da006a2a81dab9a12a0b6a1471d539ac59f5da1e31ce3996f9f1ea19f1c97991e9fe9a0561c5b99d49eb3a0151c2499b79e8da0ef1bd9987c9e5ea0821b9798169e1ca0fd1a5298829d699f311a6498249df69ec8198998fc9cc59e7d190a99059d8c9e6719e098ad9c529ec2182698749c549e7c182698749c549e7c1800006701720178000000670172017800d1120617c418aa1a5b1bf71d61200724ee1a9a1eaa209c24ef1ada1ed420c424c21a3f1e9520032597195c1d1f202825e118031d0c201925e817891c5b1f4c25b215841b701e8a25ce123319321dd925240a0915171bea25068dde0e1d19d525b693b5918c159a25cb957797548a90251e98779967956e2540983f9b78994125d599e99c0c9c6425d69af99d719d8e25919b579e269e4525c69b799e809e1225489c229fac9f0f256b9c3f9f33a0dd24be9c999f70a09724eb9ce79fe3a04e24a09c55a08aa10c24c89c89a0c8a1ad23e09cc3a040a27923b69cc7a07fa24f237e9cdda0c9a24523f79c35a134a31e23de9c30a17ea3c222219d6fa198a3ad22fd9c56a18da31b22da9c34a19ba3a821859c41a187a38521709c54a1a1a369218c9c1ba173a3f3208e9cd3a00ea34120a19b81a088a2791fef9a69a06da21f1fe59a76a06da2cc1ed89a4fa00ea2481eba9a18a0dea1cb1daf9afb9f97a1671df69ab49f5ea10f1d139b7b9f30a1c21cbf9a479f01a17d1c679af19ecda0331c7299599e68a0ae1bb798d59d09a0eb1a5c98859d849f691a2b985b9d419f381a3298549d369f0f1a2998249df19eba19f497ef9ca69e42190198e69c7f9e39191398b19c639ed5183497509cfb9d2e183497509cfb9d2e1800007c00d701750100007c00d70175013f13b017fd18eb1bad193e1e7a206724b91a0a1ff0201e25461a4e1e9220e3246e1a5a1e892019255f19be1d67205c250319f01cd91f55259316161ce71e7a256d143d1ad01d65251d12d5188d1c7025930c9b154b1b52250389f40d8c18ee248a9204932f13eb245b95e895d88922255d961498ce932225f297c8991597fe24fc98d09b079b1a254f9af49cc39c4a25609b399e149e4625f49b209f6f9f1e255f9cf99f5ba0ed247d9c3aa0c8a0c924bc9c54a016a1bb24c99c8ca08ba18224a39c8ca0c7a16024af9cc7a046a24924e59cfba0a4a22124149d3da10ea31224ec9c54a13fa3e723fb9c4da14da384237a9c1ba142a3f022c19c3ba15ca3d122bc9c4aa160a367222a9c90a119a443226d9ca0a10aa41a22259c46a182a35c212e9c28a15ea3ff20089c1ba14ba3a520059c23a14da35720df9b07a128a30120799b99a08ca2021f049b39a002a2281eaa9a26a0d6a1cb1d889a00a0a3a16b1d169ab89f67a1111ddd99589f1ba1ad1cac99fe9ee4a05e1cab99ed9ebea0231c9499c59ea4a0001c9a999a9e9ca0a51b51994f9e68a04e1b0099f79d1fa0c31a4399869db09f361a0699319d0f9fd619a998ea9cbb9e5b198098e19c959e511919984d9c2c9e9718d896649b199d8817d896649b199d88170000be0de206940f0000be0de206940f2219141d261ea1220a1a191e22201a24331a561e5f2056245d1a3a1e632093241b1a201e8620eb244519911d3a203225fa17f71c04202b251117ca1cb41f6f2588153c1ce81e9d251a13151a5b1db825c20e3a17461cdf25bf837811ad196f251191f18e9a15ae25ef947d95a08ac225e496a7984c94b3253098879acb987a255499389c8f9b5b25369a2a9d0e9d4925d09a9e9dd79d0d257f9b349e969ee124c69bf69e629fa024329c879f4ba08a24569c03a0ada07d24579c48a01da15124569c57a09ca12d24569c86a019a2d723cd9cd3a04ea2e923e39c10a1afa21124209d53a11fa31224219d9aa17ea3fe23799deca10da4c123c19c80a100a4e422989c3ca139a31622509c5da1a0a30622339c6ea1d7a3cb21289cfba020a30f21189cf3a005a3cc20009ce7a0eea265201b9ceda0eea20820389cd6a0e5a2781fe19b9fa099a2f31e629b6ba051a2721eed9a45a034a2091eb19a22a0fda1ab1d439a00a0b5a1411d1d9a399f12a1a71c7a99689e7ca0141c1e992e9e56a0b71bec98fc9d25a03d1b1999d49d10a00d1b1299f69d03a0fc1a5c99e79ddf9feb1a1a99c89daf9fa41ae698719d619f311aca983a9d129fd119aa98009dbf9ea3192a98849c5b9e3819c0973c9cfd9db417c0973c9cfd9db417000062819705900e000062819705900eb918bf1bf21d8f21c0196b1d462057239a19921d1a209b23ab19921d11200c24eb18891d16203f243b18771d2e207f246e17e01caa1fcb243a16491cee1e11259f14471bc41d7e251112af19ca1cda25d80e6f173f1b0a26e58312142219ee259490d088ad15e725a5945b92f71000261d9617985594b4250998ad9ad09886254a999e9c239c60256b9aa69d529d3425e89a799e8d9eee24789b069fcf9fb824e19ba59f5ca0a524129c07a08aa07224189c4aa0fca05324609c68a056a15f24aa9caca0c7a16924c79cf4a028a27924c79cfca082a26324ea9c2aa19ea24224a89c1aa117a31024e99c60a161a3cc235a9d68a13fa30b23f29c6fa172a3a7228f9c97a159a35d223d9c5fa16fa3d221189cfba012a34f21ae9b8ea07ba28e20e99b85a03aa23e200a9cc1a07ba226201e9cc7a082a2f91fd09ba0a064a27c1f6d9b6ba01ca2f01eea9a22a0b8a1371e6d9a04a0ada1ae1d3e9ace9f80a15a1df199939f61a1f81ca899259ff7a08c1c5599a29e97a0181c2299339e62a07f1b8999289e30a04c1bab99d19dbd9fc21a28994a9d6f9f041aca98149d199fa8196298f39c009f83191998ef9ce79e60190198d49cd99e35192b98d69ca49e1a191b98be9cb89ee3183e98aa9c1a9e95183e98aa9c1a9e95180000b08cd18d22140000b08cd18d221441186f1cfc1dd521fd18931d05208f23e3181a1d7f1f43230c19431d7f1fba23b318ff1c6c1f03243318d51c101f6224e017d21c111fa524ae167c1cea1ed62400159c1b281e1a25fe12c4190c1d7b254d1096186d1cd525d6033d16311bea256b900d0f3319d625ae93768f371405265f95e795338b30269b971a995d960026cc98879a0c9ab6257e99499ce09b5b25269a4e9d459d2d25f09af79d959efc24459beb9e07a0da24009c7b9f6aa0b224209c1aa0d9a08b24589c50a043a1ae24459c92a0aca19c24479c9da0b2a16d245b9ce6a02ba22c240e9c9fa035a2e923569cdaa080a2d8237d9c28a1eba2d2236f9c89a188a3aa23789cb2a1a7a36f23749ca8a1b7a3fb22679cc6a1d1a374222b9c71a183a3cc211d9c07a1f9a20721129ce4a090a2ac20d59bafa072a24620bc9b81a031a27f1f889b48a0dca1b21e4e9b1aa0a8a1401e169bcd9f66a1c31d8b9a879f46a1641d489a4e9f16a12a1d3e9a3a9f00a1cd1c1e9a099fd6a0891ca099bc9e9fa0341c4d99599e5aa0c61bf698ff9d29a0571b7998a39dcc9fc31a13984a9d4a9f381a2598119d029fd619fb97bc9c7f9e3a191b98719c239eda180e984e9c039e98185b984c9cea9db1181a98119cb59d4b189397949b339def159397949b339def15000052024e0c270e000052024e0c270ec417eb1ab41d80217718bf1cec1eae228518a51ce61ef8222f18681ca91e0023a917c01b281e28239a165b1bb21dbd23f1152d1b9e1d1e243e15341b6d1d5b249d14941a5e1d7524c112fb19cb1c9e24dc119919f21c7225710e9018791cdf25b5835b16641b1b26bb90b012d518d02661954c93ac0b29272497f7980797ec269c986c9bba9a7e266f99ea9cfe9c0b26399a0d9e869eb525079bca9e08a06125ad9bef9f7ea014251c9c45a039a1e3244e9c9ca09aa1ef245b9cb7a0c9a10a25569cc3a0efa11425a79c6da1dda22025089d0ca2e7a3d424059d23a21fa48d24c79cf3a1caa36924b39cd0a1dfa32b24da9cdca1dba379237c9c91a181a3d4225a9c58a136a37122529c21a10ba3fb210c9ccca09ea24221bf9bbca073a2cf208c9b86a031a26420249b68a02ca20520169b6fa024a2471f329b52a01aa2ca1e0e9b27a0dea1381e8d9ab39f5da1951de799069fd5a0f01ca4999a9e90a0801c99994b9e70a0361c8399229e4da0f21b85991c9e41a0ab1b7e99ff9d2ca06e1b4699d59d0fa0ff1a4599c09df49fc31a5399a19db39f7c1a6d998c9d189f631a0e99169d169fbc19ec98bf9c489e5a19e8973b9cd99db9186f970b9c8c9daf18c796aa9b839d5b180297039c009e49180297039c009e491800000a8a918dcf0800000a8a918dcf085118031cef1dc32166186b1c8f1e8e224e18531c511e1e236818491c1e1e5023a217fb1b0c1e4a23e2165c1bb21dbe234115a519cd1cbe2304133e185d1b9923d0113f176b1ad02332103f17c31a5c242d0e8316851ae9245809ea15cf191725a1039315d5199c25808ef9130c193a262a9331895714db2674958295298c86274597e5980f98d9279698fb9ac29a8027429a8c9d0b9e2d27579c9e9f53a0d226309c2fa0e0a0e826a19ce0a070a1d026aa9c2ca161a28e26939d38a131a26226d09c5ca19aa24026eb9c9ea10ea30c26119dd0a199a3c525209d29a2e8a34a25699c17a206a4af24499ca8a1b5a30f244c9c39a1d8a2f3225c9cfba0b0a282228d9cd9a07ea206226f9cd1a08ca28821039c81a04fa2c920ed9b48a002a24820c49b42a0e8a10120ad9b3aa0f0a19a1f679b1ea0c4a1f71e239bde9f83a1741ece9a9d9f5ca1e01db99a689f34a18a1d8e9a3f9f10a1421d549af69ed5a0cd1c4b9aad9e9fa0761ce799479e6ba0111c2f99af9def9f5e1b77982c9d2d9f931a3f98ef9cf89e461a2598e29cc59e011a0b98d09cc09ecd19db97b39c8b9e8c197b97849c3d9e38191297359cdd9dd118bc96049c9b9d7f18cd96af9b499d5b184a962d9b089d2d1871964d9b3a9d2e1871964d9b3a9d2e18e880c582e6837506e880c582e68375065e143817c8184b1bb618591b531dd8214118791b9a1d8f22e317f31a581d9e22f016f419eb1cd52297159318a71b2223ca13bb16131a2c23e9102214d2180923980c76103417212398025c0b8f15dc22cc87c08be1142523b58d538e0d12ec2215901a8fc610c5236790348fe20df8237190598f1c0ef223f091338de208af24f7939b8fb60ab126d495a1944793c6289e983e996899a5291e9a9e9daa9d132aa79bf19f42a0e9295a9ccaa0daa17e295d9c5fa1bfa22d29eb9cc9a146a3ae28019d5aa2b0a33e28119da6a218a42927b59c26a2fea3f4254f9cdea1a6a32d259e9c09a17ba21924299cd3a0d8a20a23239cdda066a28622839b8ba002a2ab21469b39a0ada1d4204c9b56a0bea1bf20099b2ca0a9a13d20fb9a01a086a1e31fc89aa19f5fa12b1fca9a649f44a1861eee9a719f45a1481ee69a4d9f3ba1cb1dc89a189f15a1751d9d9acc9ed2a0101d239a709e84a0a61cc499339e54a0561ca499f39d3aa0081c8599c69d12a0931b8199999dd59f1c1b5799559d729f8f1aee98ff9c1a9f251aa698d69ccd9ed5198698b69c8d9e8f1974988e9c639e44199e98859c309e28194698499ceb9dd9180f982e9cd49d9f18bb97f79b5f9d34187396c79ac39cea165c96139b3b9d7a175c96139b3b9d7a173c806b00820041063c806b00820041066c133d163a17701aea16bc1aea1c5e213417b61a211d0f22f816e719d81c13220e163219621c252292141c18f51a3422f8129116dc192d22c010ee14d31846223a0f65120c184922610ae70f611608228d827a048315ea21d98d8a8d8b12d9216c907e90d20e26210b9223923985dd20b393d093cf8d0920c993a3936290c51d4b93e492ad8f601bc492e79267909518f89205943992de1691926b94d0936b144694d2950595b214f494ce951e979a16c698b69a0d9b2f1dc99a7d9dac9d4c219599ab9feb9fda224d93149e0f9e68216895519ca09efd1e69951a9c3c9f0e1e4c9bc89dc79f8d1fad9bdd9d18a06c1ff699c49ecaa017203d9acb9e07a1d21f529a839eb6a0251f9a9a879eb1a0d81edc994e9e62a0681ecf993f9e68a00c1e639a839e93a01c1eab9a8b9ea0a0f21d779a749e9da07f1d989a659e90a0041d6b9a2f9e57a0a01ccd990a9e37a0501c5299d79d2aa01e1c4f99c49d1da0dd1b7299ba9d11a08f1b8a99aa9dfe9f3c1bb599829dc79fce1a9999519d549f7c1ae598ef9cce9e051ab398b19c849e9c19b9989c9c699e8119a498ae9c639e86190e988b9c539e3e19dd97639c1c9e111994973b9cd99dc818a797239ca19d93183597ab9bd49d32187297b89a879c97167297b89a879c97160000ae02cb063b080000ae02cb063b085716c319141c4520b7169d1af51c6521cb16631a0e1d82217c16e819d21c8b2189150a19421c76213d14e917071b4321db125d16ef1930214c11d514eb181f210b0e81114018f820a806120d8016fb204b86eb033815c020158c2f8c8911e71f728ed38f1904731e9e904992cf8caa1d1091c8935792dd1c7291cc94af94c31c41928195d595cc1cd492ee96b397fe1c0893bb975b981f1d02931698c098e61ca592ba97a7987d1c6a92a097b2981e1c179250979698781ba391ed967a986b1ad6919c973b99de191792b6969b986b19a693a496a8986019589510974499311a029761984f9aae1ba697029a6b9cb81c6098889bba9d341d1d99d99c209fa51d6f991b9d1b9f751d6e991f9d3e9f611d7f994c9d689f631d7299559d8c9f3e1d80997d9dd79f0a1dac99b59d1fa0001dcb99c79d2ea0d21cd199af9d2ea0971cae99ad9d26a04f1c8599a99d08a0191c46998b9de29feb1b3d99779db49f8d1b2a995c9d9d9f2b1b0c994a9d789ffb1a00991d9d399f9d1af298039d1e9f451a9e98d69cd39ece197f98b79caa9e9719a598b79c9d9e8519b098999c7c9e6019bc987c9c459e2d1912997c9c1e9e0119a8983e9cec9d95180898ed9b989d2f18cd96979ab89c6c170498319a989c3c160498319a989c3c167f0148109f12be0b7f0148109f12be0b2518341bc41c512064179e1aae1ce720a916d919371cbf207615ca18751ba52004155718a41aa9200814c1160d1a9320f311dc1428197c209a0ee911ce176820d90a670ef3155f20de018303d61333206988b08b7f0f421fa78cd88ff003a41ed98fce92d18eda1e6f9197947f934c1f8a923c965e959a1f04941f970197bf1fa0943c984d98ed1f5595f898339915200f96a9995c9a1720ca969a9a6a9b092038972f9b1c9cf11f6d97739b4e9cb31f5b97939b589c561f0197659b6b9ce51e0097549b669c6c1ec3961f9b769cd91d4996f89a839c531d4396739a519cc81c4f961b9a2a9c1a1c0996f8994e9cc41b3196299a7e9c021cdc96829ab59c131c6897fe9a089d0f1c00985c9b529d0b1c3598e69bc69de61b4e98129c019ed71b95986c9c7c9ec91bc398b19cb19edb1bd898c79cc89edf1be998d49ceb9ed51bed98e19c0d9fa31bf4981e9d589f8a1b1a994b9d889f3a1bf498219d329f001bc398f79cef9eb01a9b98af9c8b9e191a52985c9c349e90192f983d9ceb9d38190898139cc29d0519ea97099cad9dcd189d97019c919db3187597fc9b869d86183d97e99b889d6e18fe96c49b669d5818fb969a9b419d1b181e97669b229d0c189896fe9afa9c35173498e19b7d9dbe173498e19b7d9dbe1700000000000000007f0148109f12be0b2518341bc41c512064179e1aae1ce720a916d919371cbf207615ca18751ba52004155718a41aa9200814c1160d1a9320f311dc1428197c209a0ee911ce176820d90a670ef3155f20de018303d61333206988b08b7f0f421fa78cd88ff003a41ed98fce92d18eda1e6f9197947f934c1f8a923c965e959a1f04941f970197bf1fa0943c984d98ed1f5595f898339915200f96a9995c9a1720ca969a9a6a9b092038972f9b1c9cf11f6d97739b4e9cb31f5b97939b589c561f0197659b6b9ce51e0097549b669c6c1ec3961f9b769cd91d4996f89a839c531d4396739a519cc81c4f961b9a2a9c1a1c0996f8994e9cc41b3196299a7e9c021cdc96829ab59c131c6897fe9a089d0f1c00985c9b529d0b1c3598e69bc69de61b4e98129c019ed71b95986c9c7c9ec91bc398b19cb19edb1bd898c79cc89edf1be998d49ceb9ed51bed98e19c0d9fa31bf4981e9d589f8a1b1a994b9d889f3a1bf498219d329f001bc398f79cef9eb01a9b98af9c8b9e191a52985c9c349e90192f983d9ceb9d38190898139cc29d0519ea97099cad9dcd189d97019c919db3187597fc9b869d86183d97e99b889d6e18fe96c49b669d5818fb969a9b419d1b181e97669b229d0c189896fe9afa9c35173498e19b7d9dbe17000000000000000000000000000000008e1efb1625187f1a76223519521c6220eb248b1aa01bde21e126c21a071c952215284a1a5e1bdd225628a219da1a95223d2821194a1a1e2216287b196e1a9a22e6275a19b81a15223e276519f61a91211027212069213e21a426bf287c2a01220520e5a531a44d268f1e769f0021b9202f1b62971d26111e7e18fb8d1529c21d689a4690142a7d1e969c6d914d2adb1e339b2694262a941f8299c19890295c20ff956e9aff2854204495ad99a728c51efa9130956828631ca08dc8919c27571a7f8cde9145266019998d38939d25a718ef8c209495246518c18b41943722fe17998c7594911eab1792880194c911ca16ed8ceb94529dc9188a8f1a9699a115194d91969840a4ca1a7795539b90a4381dad97769e76a478204b97b29e3ca18520cb95449c429dde1c8a96c69c099e821cef97d69d219fbb1c9898cd9d6c9f6d1c5c98ae9d9c9f451c4398c59d809f221c7e98de9d6e9f251c2c98c59d729fe11b25988b9d5b9f771b15984c9dd09ee51ac897019d3d9e4d1a6897d19c369efb194e97c89c359ed0190b97d09c1a9ea6191c97c29c049e8519d1969d9ccc9d2a199e96649c749dea182e96399c359dac181d96149c0e9d82182396049cfa9c57185096c59bc19c33187b95389bd09ca1173596219bca9cbf1600000000000000008e1efb1625187f1a8e1efb1625187f1a76223519521c6220eb248b1aa01bde21e126c21a071c952215284a1a5e1bdd225628a219da1a95223d2821194a1a1e2216287b196e1a9a22e6275a19b81a15223e276519f61a91211027212069213e21a426bf287c2a01220520e5a531a44d268f1e769f0021b9202f1b62971d26111e7e18fb8d1529c21d689a4690142a7d1e969c6d914d2adb1e339b2694262a941f8299c19890295c20ff956e9aff2854204495ad99a728c51efa9130956828631ca08dc8919c27571a7f8cde9145266019998d38939d25a718ef8c209495246518c18b41943722fe17998c7594911eab1792880194c911ca16ed8ceb94529dc9188a8f1a9699a115194d91969840a4ca1a7795539b90a4381dad97769e76a478204b97b29e3ca18520cb95449c429dde1c8a96c69c099e821cef97d69d219fbb1c9898cd9d6c9f6d1c5c98ae9d9c9f451c4398c59d809f221c7e98de9d6e9f251c2c98c59d729fe11b25988b9d5b9f771b15984c9dd09ee51ac897019d3d9e4d1a6897d19c369efb194e97c89c359ed0190b97d09c1a9ea6191c97c29c049e8519d1969d9ccc9d2a199e96649c749dea182e96399c359dac181d96149c0e9d82182396049cfa9c57185096c59bc19c33187b95389bd09ca1173596219bca9cbf163596219bca9cbf1688169013da16ea1888169013da16ea1836205f1c9a1dec212c23e71c0f1e1f235625a11ce51d212401270e1c151dbd232c28d51beb1c4f2393285c1c7f1dc9228e28ba1dcf1f09237628701ff0200d231b285720b621ce22c72762230625c923dd2694249d26bf243a22a3a3e3a21025f31d32a40ea26a22a40fe7a02d1fe720329ce29da426551fff9da697cd29761e159f5c9a512a4a20ea9d759c7c2acd20659cec9c152afa20eb9a139cce297c201799829b7829451f8b97d3981b29081d1c94b29583288d1beb921e96bc27f91a1195bc978827111cbc94e396c725d91b1b91aa9547224c19f3911595271dfc1793910496e3917f1669927396c59ee918a99114963ea43d1a9590229782a54419d592339b55a5cc197b956e9d12a4421d9b98829fa7a2d21f9a999c9f04a2f81e4199309f5aa1fb1dba98259feda0af1d5499549f00a1901df798dd9ec0a0351dd5987d9e56a0c31ca9980d9ede9f621c6a98239e0ba04d1ca1981e9e18a03b1c9498df9dbb9fdb1b2d98779d079f121bae973d9dd29e8f1ac697309dab9e691a77970e9d8c9e0b1a6597fb9c569ee0196097e99c459ecb196297d29c239e92194597b69cfc9d43190597929cc09dfd18c396589c939db21896961a9c1f9d6f18f3957b9be09ca0172096b69a869c8f152096b69a869c8f1581140a161218e31881140a161218e3189f1c741c391e58223020fd1c511e3e23d1221b1d491ea923dc242d1d631eda236226f01c4e1e14249d27b11cbf1daf231a283b1df11e30242528821e4c207f24e627132064218e243a27ed20f322b324b7253a20a022dc2515231b9b6d9882253a1d7fa16ca0bf24c994bca093974b23ed9bbd9fa422db22ae9e749dad271722c39eb79ca2294522f09d199dad2a2022c39d889e8c2a41225e9df19e022ada216999859c91296520889a8c9c69293c20ac98dd9bb128231fb497b39bfc271d1e57987d9c7927481eb097af9b3925f81d9696de9a8d22441d7b96b59bbb1b6d1d48965c9baa98661dd896c39bdda1a01d4995329cbba5011ec795309c33a6dd1daa95209d27a5a71e9398fd9e23a4f41f9a9a50a08aa350207f9a4aa0eca2801fad9a49a08ea2271fbe9909a0dda18a1ea699c59f95a1fb1d9499c89f7aa1d21d8e99509ffea04c1d1f999d9e75a0b91c7198689e67a06e1c9798509e55a04e1c7898159e0ca0041c5098c99dad9f641b1298a09d6d9f181b1e98959d3e9fd01ad997729d209f6e1aae97409ddf9e311a7597109d7b9ec7193e97de9c2c9e7019f096ad9cf99d3819a096879cce9df31883966d9cbd9de4189e96779cbe9def18b896539ca09d9018f196899bf89ca616f196899bf89ca616e9109b15f416cc15e9109b15f416cc15591b4e1d291ff022ee1ca31d221fc823721fb61dce1f32248921a91d111f3e2427243d1e0820d8247625371e1320c8245a26691e2c20bf242527c31e8520ee24e7261a1f2a2153252f26f41db02051258124851a2f1ed92419224d966a8bdb24a41af29dd49c3b24bd9525a0929d6824de9cd49eba19f723d19d689f3c234c24939de29e80276d23389da99dd829d322609d1e9e852ad8224d9dd59e9e2ae4226a9cb89ee9293d22c69baa9e8a29e621349c289f142924223d9bf79e1e289a21259a099e0927c320fc99059e83258a20999a479e5521a520c09a4b9ea012b2206e997b9ee19db320ad9a0b9f5ea4f820359a579f33a7e9202d9a9e9f7aa7b5202c98a69f49a552204f9a27a008a46720729b74a0b6a34b20309ba8a0c7a33220949beda0dfa30a20749a5ca08ca2d61eea991da00da2121e3199fe9fcba1d11dbd99db9f64a1771df1995d9ff4a0f51c3e99fe9ecaa08e1c1e99dd9eafa0791c1a99bb9e89a0551ca5983a9e26a0c11b5b98f69df19f541b7e98f89dcd9f1a1b5698ec9db29fd21a5e98c99d819faa1a1898939d3f9f481adf97439dd19ece193b97e29c4f9e44192397b89c0f9efa18a896959ce89dd5182197909cc29dd0180097939c0f9e9918a297779c0a9e1218a297779c0a9e1218c50d3314ab159017c50d3314ab159017c118161c441d6521d11a2d1dfc1ec423161dc71dad1f8724581eaf1d961f90245220571d291fbc24d721121dce1eac24b423f61c0a1fa5249924451dde1fea24af244a1d10202f251524761cbd1f4525c42154158f1beb24411f5398208b7225f6114d9d3599f6241197039e6a9c0d25109ce29e2b9899245f9d189feb1ba024199deb9e0b249424c69c1c9f5b283624929dd09e242a0924439ee69fcb2a1b24589db39f772aa423bb9c3a9fec29a622029e1fa06d2978231f9da39f92289e22c69b009f8927f721549cef9f23257722519cf99fe5203822219cd59f21931b22a09aaa9fe6a0b8219a9b0fa04ca5e921909a0ea0fea79e215799e79e94a676206199ac9f5fa4a520099ca8a0e7a319211e9ccfa0f4a3cf20149ce2a01ba47d203c9cdea0eda32320549b8ca034a34a1f1c9b84a0b3a2d21ec09a71a054a26a1e9a9a53a038a2291e529a0ea0c5a19a1d159a949f3ca1111d019a139fdba0951cff99b69ea7a0431cb2996d9e5fa0e71b4c99499e46a07b1b1499459e24a0381b8d98019e04a0c51a5298cf9daf9f8d1a14987d9d349f0d1ae397469df59ed1199997ff9c9f9e64193897c49c289e0719e7968f9ce99ddd180597749cab9dd1181997519cb69dd418e697909c619e0118e697909c619e0118250cb014e6159a17250cb014e6159a17ff184b1c711d3021dc1abf1d102021247d1d021fc020fb246e1e9d1e9520da24ae1e1f1e4f20de24f01eba1d13200e250820121d581fec24c020951c3c1fed24fe20581c271f4a250a20361be41eaf25f11dc715091cbd25a71ab68fd917aa25a308579bc9972c252c96e09cb79822258799dd9c6f98e624da9c0d9d158b1725879cc99ec71c2925529cd69e39259d243d9d759f872885245b9e57a02d2adb24549e8ea09d2ae024289d94a0452a9c245e9d4da0f0295524289cc09f08295c23079c669f3928b922b69cf99fd525ef22a69c4aa01522f722fd9c4da08a13b222ff9a5ca01fa17622779b79a014a65322a79a62a015a8cd21da992ea05ca601212d9b9ba03da41f21169c3aa130a481218d9c3ba10ea40e21139cffa018a48620029c09a100a44720079ce4a0a4a3ed1f219cfea062a39b1fa19a48a04ba23c1e8199949f83a1451d6599799f67a1081d2099539f4aa1dd1c46993c9f20a1a71c2b99049ff0a05e1c1199cb9ea9a0181cbf98849e6fa0c11bb998509e3ea06d1b7f98ff9d06a0e71a6898cd9db79fae1a3b98a39d729f5a1a2198919d559f471a2298759d2b9f261a1d98549df89ee0191998319db19ebb190b98fb9c4a9e5f1983979b9c439efa184198b39c739e10184198b39c739e10187c063b1457156e177c063b1457156e17c1186a1c851d3221c71bfc1d41201c24821c1b1fde20fe248d1cad1ebf20f3247a1c231e5920d324b91c8e1d3920d924b71c301deb1f1825ad1c301c1b1f3c25e71cfd191f1e1d25321ba018b51d23256719d011881b6925d0140094a01552251590a1998290ec248d97399ce2954625809bb69dbf984f252e9c6e9eca9a6c25899c549e4e985625879c479e341d0e25cf9c699ec12471240b9e42a01629e724ec9db7a0592a4225269d75a0972ac224999d5fa07c2a7824b19cfb9f7829b423bb9c72a0b3282a24769d87a0c0263e24989c32a061228823939c07a0c693ee224c9b4fa00aa30923039c26a170a6cf23eb9ab1a0bca66922459b5fa0bea47f21b99cc3a0fea36021a49c69a11aa49921959d28a121a41221819cf4a016a49220659ce4a0aea33d20629cc9a072a3ce1f069cd6a032a3701fd79bf0a047a35c1f6a9bc6a0f8a2cc1e129a15a001a2a21dc3998f9f75a10e1d70993f9f22a1b21c67991a9f07a1751c60991e9feaa0521c3499079fd0a0381c3499ce9e97a0001cc0985f9e4aa0661b8198e89dfe9fb81a2f98ad9da29f521a2998899d579f2b1a0898539d159fcd19d697269ddb9e7d197597dc9c849e3d198697af9c409e001911976b9c739eb8188096879b889d88168096879b889d88165b016814c01506165b016814c01506167618c91ce81d3c21b41abf1ed5208124451c641f2f2140258d1c291f0d2131256d1ccb1ec72037250f1ce21d682032258b1b071db81f1f25251b2c1ce11e27257f1ac91ad71d7725f7183d18f31c9e25841614128a1bf725ea0e3a929c180926d194339a0594a5259c98cf9b52978825c0996c9cc498c3252f9cf49cca989725389c989dcc994525fa9c839e04993e25d49c469e4f1bd6245b9db29f7b24ba24a69dcaa089281d25819d76a0e129c324449d4ba05c2aa824bb9c3ca0022a3424089d34a0e328e023929deaa007275724379dffa0b2224c24a39ceca00294ea234f9c7aa132a431249e9ba3a01ea6c322939bada065a540220b9c33a125a44f22639cd4a07ea37721be9c17a1d8a35d21b59c09a127a409218b9cb9a0cda36d201f9ca1a064a32220539b99a03fa3d61fe79a94a0d8a2711f609b7ba079a2dc1e459c38a024a22d1e369cf59f97a1911d7c9ba79f7fa1301d649a739f5ba1fc1cfb99229f23a1891cd099fb9ef3a04a1cdc99e39ed9a00c1cf199d29eada0ec1bb5998e9e70a0761b3599379e4ba0ec1aaf98f19d0ca09e1a5198bb9da59f2c1a1298659d2a9f8e19c997269dc79e4d19a597eb9c8f9e2019ad97d39c509e24197997bf9c6a9e0f19a597959bcb9c7916a597959bcb9c7916be0d4f163e185818be0d4f163e185818be18291dde1eb821e31abb1ee4207f246c1c601f5d211425901c391f33214c25a41cf41e152166256b1c3d1eb920a225011b391d5320b8259e19811cc61fff258f18c51a721e002611161719511d0626ef113014951bcc256e854a8f5b19ce25e094d597fb10af250598839a5c94da25179a589ca197a825f09bc69c0d992625469cb69dfc9af324939c029f049d5425389d559f1d9d2725769dfb9f248ce024d49c04a0092200258c9dd1a089272325279da5a0fa28e324109d85a06429b124c49c49a0bf283224529d35a0cb26aa23169daea07622f7233e9df4a0879c0124609ce0a01fa48223e69ad89f78a4c621309c2da131a42323199cf7a02aa358220e9c28a12ca41e22069ce4a000a46921239cd9a09aa3ed20249c27a103a4d420689c6ea11ea4c720559c61a112a45f204b9c38a1e6a3fd1f3c9cbaa018a3eb1ea69b95a084a2541e179b7fa06ea2041eb49a76a050a2b51dcc9a5aa02da2801da19a2ba0f1a11a1db09af19f82a1b51c2c9a459f27a1391c019aed9ecca0f31b76998e9e85a05f1bff98509e5ca0191bbe981c9e44a0b91a7298ea9df49f821a37989e9d9c9f0d1a4f98899d6d9fd51973982b9dd39e63193098b29c409eac180799b09c069e70180098eb9ab39ce7150098eb9ab39ce715150f45186a1a3a1a150f45186a1a3a1a05150e1ab21ccb1d9b1b9d1e8520a724101cd51ee0202025281cf61eeb205625331cde1ed62097255b1b581e9420cc25461a4b1d2320f0250d19181c341ff6259217f719d51dee25931480176c1cf3255e10090fe119f925cd8bf1913c17fb2579957997530ab625aa98719998909e25de99f79a09976625929b419c3e984025969b269d1a9ada24969cb39ec99c7925f69d03a0e69d90251f9d35a0759e0025fc9c749e27997524939da3a0041b1e25a89de5a0eb22dc24329db0a049257524af9ddba0e8256c24469d27a1b5234524209ddca07b186023329deaa1f0a11a24869caea101a58f23059d6fa156a4f022869c27a175a33a22879c4ba195a32f229b9c14a1aea3ba21659c53a130a4cc21be9c90a15ca4a8217a9c65a13da43821aa9c90a141a422213b9c58a10fa4a3201d9c09a19ca30d20f39bd2a023a3701fa19bd1a009a3e51e7c9bbba0eaa2b01e319ba4a0a1a2481e1e9b7ca056a2e31dd39a4ea016a27a1d7f9a1aa0bea1f61c289ac39f5da1a41cc899399ff5a03b1c7299f59eb7a0071c2199b09e8ba0961bd398769e55a02f1bd2984b9e32a0d91aed98fc9d06a05f1a2d99c89dab9f041a4299329dea9e7919c798c89c269e0919ed974a9c9e9d7a189b97ad9b569d10179b97ad9b569d1017cf08391615180116cf08391615180116d818c41c641e7121be1a9e1ee0206c24931b411f05211a25a61b191ffd207225551bd51ed0208f25221a2b1e712091256b19491d1320932558187a1c211fcd25c9168b1ac71d02260d147418e01c1f26980b3e14c81a2d26208ecc887018f625ed944795c810af25bf979299de909b2552995b9b7297a025519a929c3e9a9125a09bbf9daa9c6925959c129f5d9e7425b49d4b9fd99e4125f29c6e9fbc9ee624249d44a001a00025119d0ba0689f8624f09d39a1fe9e1d25939fd0a1119beb242c9e7da14f9b5524169ddba0a69c8b237a9c76a02d9faa22e49bb6a078a1b822349ad69fa0a19821289b849faca12221849cf0a002a356228e9c2da154a32922e69c1fa1faa3ac214a9dada172a4df21a69c95a160a495213e9c3ca120a4e720389c26a1c1a387203d9c1aa199a35b20dd9b04a14fa30820699bdea01fa37c1f5c9bf3a01aa32f1f569bfda025a3ed1e159bf2a01fa3931ebc9aa5a093a2fb1d539a42a0c9a1401d039ae69f70a1c71cd599c19f64a1a31cef99be9f5ea17c1ca699719f23a1391c2b99d19ea1a0921bbf98069e0ba06a1a5698989d769ff41907985e9d299f95190b983b9d009f5319eb97289de19e30192b98239dc99e4b19f297fc9c859ec7184898cb9c869e18184898cb9c869e181800004002b103410500004002b1034105f017721cc81dd620711ca61eb22096248b1c041f0421e224031c4c1f30215a255c1bb61ee0207525841a331e732099254d19291db01fba25cf174b1cf61ed925ad15991acb1dfd25ab12a3177a1c0e26f004ee11a91a0a262590fe8e2217cb2506953895cf139d257c976798738a8a253099859a91954725849a369ca899ed24ef9b8a9d999c1525a39c679ea19d2c25ff9c649fd39e5125609da29fb29f4625009dd99fe29ff524f59c38a0a7a0bc24889d7ea082a19824619ef0a0aca154241e9e5ca18ba14b24f29cb3a058a19a23659c85a068a132234d9c8ca0cfa11123539c7ba00ba2a522c29ca3a0d3a29322309ccfa083a32c22769d27a1e0a34022249d92a113a44d22be9c30a10da47621209d87a127a48721b79c6ca109a428218a9c4ca1f3a3cf205b9c32a1c3a36d20059c06a18da30620659bb8a009a3391f159b98a0e5a2b91ee69a84a0b3a26e1e939a60a05da2f61db19a26a005a27a1dbb9af29faba1051dc99aa59f5ca1ae1ca99a869f23a17e1c6e9a3b9ff6a03c1c099a0b9fd3a0fd1b8699a69e97a08b1b1899679e52a01c1bae98059e03a08d1a5e98ae9da79f2e1a6c98989d649ff4191f98649d389fce1911981a9dc09e9019b597c19c939e04194498dc9cda9e09184498dc9cda9e09180000990275040f060000990275040f06b916e71b181d5f20fc196c1e9f206324a51b911f66212a250a1ccd1f7a219a25871b0e1f2821ce25831ae51d5220dd251819be1c811fee25ae178a1b001e0a266b14fe18d11c47261a105f15881b3a26be042212141a3f262390f28865171126b2934594f010d52581979698f490b325ab990e9b7297a225fc9ac99c579a9825e79b6c9d8b9c8a256c9cb99ef19d6e25ba9ce79fbf9f63251f9d5fa08aa054254c9d53a09da00525519d4ba0c0a0c024f69c0ca0e1a06a24aa9c20a027a13824089d51a074a1d823189d75a0c0a1c023cf9c98a068a26223109ddba0d8a250234e9d77a17ea38223ec9c90a10ca47923fd9c8aa1f8a3ff22a19dfaa081a3f121da9c07a199a3af219e9c4ea1eaa3ae21db9c7ba11fa493218b9cfba08fa3aa200e9d10a177a38720f09c1aa158a34b20609c1fa164a31e20109c21a164a3e31fb89beea019a33f1fad9ba8a094a28d1e579b7ea057a2f91d259b5aa031a29b1d319b39a0eca1511dea9a0ea097a1f21c589a969f46a1891ce5994a9f0aa1381cac99fe9ecda0ef1b6f99d39e9da0a71b1b998c9e67a0301bb998139e1da09c1a7098919d939fee197b985e9d419fb6199c983e9d169f8619c4983d9dce9e75196598da9cbe9e0e192698a79cf69e15182698a79cf69e151800003702b105b10300003702b105b1039716d91b611d64205d1bf71ee720ac24001c951f65210725e31b9b1f5a214c25d51aba1ef3205725a0197b1d3020742505192d1d0b2087254218f01ce21fa4252c16111ce31eda251c13e7182a1df3258e0a4915721be925d78fcf084919e525d4944694d715c425fd969898d88aa1256498809a9a9789254599599c5a9a4925959a3d9d6c9c0d252f9b1e9ecb9de3241e9cdc9ebe9efe247d9c2b9f3c9fec24b79cdf9f18a0e624c39ce49f76a0a724ed9c33a0eaa07224189d57a040a11b24dd9c6ea075a18c232f9d8ca0dca18923719deea058a28d23699df4a0b6a26723e39c2aa11aa32f23d89c4da14da3e522db9c4aa1aea37722959da8a104a48422fc9d7da110a4fd21879d53a107a4b321169d93a118a4ab21c09c8fa122a46021c99c76a1d2a3f620909d3aa11fa363209d9c09a12ba30d20989bb9a0d6a2431f669b93a0a2a2b81e209b5ea033a2251ed09a2ea0d2a1a01ddd9a0da0aca1381d239bde9f8aa1011d449ba09f5da19c1cdb9a629f21a1691c619a059fe1a01d1c7f997a9e78a06f1bd898e89d18a0a51a8a989e9db59f2f1a63987d9d709f0a1a4b985b9d4c9fc5195298399df89e801922980c9dc29e61192f98ec9c829e21190798c49c5f9ebc1857973e9c319e4d1757973e9c319e4d170000bd004704a5060000bd004704a5061216181b2a1d9320de1af91e1721dd247b1bbc1f7e2180250b1b9e1f66218925b61ae21eec207625eb19431e8c207f25e918601de21f792510172b1cce1e7725de14a11aba1d9a25ac11ac18e11cab25850d47154b1bd5259e8de6087618dc25d0945a940111b62576962498ed8ab2252c986b991f9689257599709bad998925509a089d409c5125659b1a9eb39d3c25239c019f079f1725859ce79f2aa0f524cf9c39a0c6a0e624de9c6da0f6a0b224e69c9fa055a1a924f79cb6a097a17524e59cb7a0faa15324dd9ce2a019a21d24059d10a182a20b24249d38a1f3a2ed23fa9c4fa10ea3af230d9d6fa166a38223ee9c44a17ba3f7220a9d71a1afa3ca22eb9c90a1e3a36922f49c71a1eaa30922099d95a11ca4c721699c66a1d7a34f21659c4da17ca3e420679c57a170a3a120789c65a196a357205a9c2ca173a3f31f269cd0a0cba2331f8f9b80a051a25d1e529b51a019a2eb1ded9a32a0d9a1811d749a07a095a1201d119ab29f51a1bf1cea995d9f16a1661cfa99359feba02c1cd5990f9fcba0ea1b9999cb9eaca09d1b6d99979e8da03d1b4699359e44a0d11a2b999a9dad9f171a82991d9de69e8119ef98f69cd29e3a198d98c09c6d9e1019b997479c1b9e8418f096e89bea9d2b17f096e89bea9d2b171c12de16091918171c12de1609191817931ab01ea820f3236a1ae31e9c206924191b8a1f2821ea24281b7a1f3c214325cd1a041ffe206125eb19511eb7209b25ca18b11d31209925fd173c1de01fce250f165f1c381ff425e512131a831df7258f0da016251cfc25d28a670f4719d125539347923214c4251f961597299198253e98999945968f258199bd9bf99998255a9ae59c6b9c5c252f9be89d579d31250c9c729ea89eeb243a9c569f879fc4246e9cbc9f1da08a248f9c18a07ca08524a99c58a019a16224d69c83a068a14124d49c9fa0dea11624d09cb8a049a2dd23e49cfea08ca21124109d24a1c9a20b241f9d5ca115a301243d9d97a181a3f423409dffa12ca4cc23019d04a23da45b23b39cbaa1f5a39922c49ca9a11ea44522949c79a10da4c021859c49a1c0a333215b9c37a18da3e5205d9c57a1a7a39320839c4da188a34720859c24a14ca3d61f4e9ceca0f7a22d1fd19ba0a098a28b1e299b7ba06aa2111e059b58a02ca2b41dab9a2ca0f7a16b1d509abd9f61a1c61caf99dd9ed1a03c1c5d99969e94a0e01b1599589e75a0951b10993f9e46a03b1b07992d9e27a0011b0899229e14a0f51a0f99dd9de69f831afb98909d8d9f1e1af798549d2d9fcf19dd98169db09e8a196898729c599ecd180698239c129e84160698239c129e8416af10d6141f18d513af10d6141f18d513461ace1da51f94229f1a231e86201d243f1a111e6b202524761a611e7d207124fa194e1e9920c82467195d1e8a202d259718d01d6d2069255c17f51cdf1fcc257715d91b481e36263d13e319091d6426b70d0917f11b7026d18dc00faa184226729384925214fc254e9678975e91e6256b987e9a16989925bc99af9cd29b6c25839abf9d529d1825839bd09ed29eef24159c649fc49f99244f9cfc9f5ba06024a49c47a0c9a02724db9c8ba028a10124db9c9da05ea1da23fc9ceaa0d4a1cf232b9d06a139a20724439d41a193a21e242c9d5aa1c3a21b24269d6da104a31624099d6ca116a3e423339d6ea146a3c9234c9db3a18ba36923609dc3a1dea3e122499dd7a1f7a39322eb9cb1a1eca32f22999c86a1fca3cd21959c51a16fa33a21979c20a119a3bc20839c24a1f7a25720699c1ea1eea212202c9cdea0b3a2841fcd9baaa079a2e51e329b73a024a24a1e989a2fa0e6a1a11d599a0da0b1a1381d269ab89f6ea1d21cc799209ffea04f1c6599a49ea6a0c71b2199399e5ca0251bf798cf9d08a0871afe98a69db29f381ac398519d679fb8199298349d589f9b195e98009d329f55193b98f89cf99e2f192a98f59ceb9e2a193898ea9c949e00190398d09cad9ef5182c98739c2e9e71172c98739c2e9e7117470f0315d0176518470f0315d0176518c219261e00201023cc19621e5c20ea238b19b21d3820c7236c19bd1d2a20fd232619d91d3c2057240a19e51d4a20be24a018df1d4a200925ec178e1d1c2056258f15561c0e1f9d257c130e1bc21df62592104119111d4d267a046e178a1b8c266f91bf093e18832656954a95fd0b60263697f0982f92bf259e98879aa9985425be99579cb09bc324be9a719dd39c5d24549b0f9e479efd23e99b139fb39f88230d9c9c9f47a02b23699c21a0f0a0f122639c68a01ea1d3227c9c8aa08ba1ef226b9cd1a0fba12f23859cdaa057a27c23d19c49a1b7a2a723ec9c27a1bca2d7233e9d42a1eba20824749d89a17fa30924579dfca119a416244d9d35a239a4ed232d9d27a23ba46623069d19a239a4d622b59ce8a126a43422879cafa104a4af21579c65a15fa31221479c2ba131a393202e9c05a1dca2fd1f1b9cb5a059a22b1fd29b67a00da27f1e899b3ca0d4a1fc1d289b0da098a1a91d019bc99f67a1451de19a7a9f34a1d11c8b9a3b9ffca0831cfb99dc9eb7a0111c8799679e68a0961b0e99f19d26a0e71a8998949dbd9f591a44984a9d4d9fe3192f980e9ddb9e81191b98dc9c9c9e2f193c98bb9c7e9efd183e98989c579ee9185d98819c229ecf184d98589c1e9e7a1833982f9c089e301633982f9c089e3016620c30114b18d610620c30114b18d610af19d41c961f3122c018381d3e1f2f23c718211d661f4a23a118de1c611f62237418c91c3a1fc9230118691ccc1e272454174b1ca91e5f242316481c761e92249d152f1c701ee4241f15801cf51ed525e613391cd81e7426350f591a921da426dc842a183d1c0e2736939f0aa317e1262f97b998af954826fa98779b699aa625009a7b9d859dc624349bbb9e289f2e24b09b849f1ea06823339c1fa0a8a0a822719c84a02aa16822af9ce5a0ada15b22e09c0da1e6a17e22e39c23a15ca2c022eb9c0ea141a20923ed9c19a165a2cc23c49c3ba1aaa22c24a19c80a122a34624c79caaa199a34e24f09cdda1eda33324699d43a223a409246d9d3fa231a46523099df9a11da4e822cb9cd0a100a464226a9c74a194a3b721419c3da116a32921159cf2a0caa2a620c89bc2a09ea23620b59ba7a074a2821fb59b97a047a2fe1e949b58a013a26b1e049b01a08fa1bc1d6e9a349f05a1111d179ac39ebaa0851cdd997d9e8fa0341cba99519e6ca0ec1b9399429e5da09a1b75992f9e4ca0451b3099009e2ea0d31a1d99dc9d10a0aa1afd98a69db59f4b1afe989c9d679f3f1ac998209d0f9f95195f98c39c8b9e3119f1976c9c2b9ec618e797519cf49dc618bb97529c199eac1808981e9cae9d4a1708981e9cae9d4a170000cd8b2690d0020000cd8b2690d0025b18221c161eee21cb18f01ce81e2c23f218b11ce31e4923b918a41cb31e78239718b11cd01eec230e18461c871e11245b16b11a4a1d0c2494144d19721c0c243d145719861c602471147a1a241de2249a13bb1a671d55251712331b791d15260d110b1c201ea627c0055f1a491d81285394798c331729285e98839ab297bb26179a1d9d1e9d7d25c59ad09e979ed923039cbf9f5fa0e121629c53a0eba09b20489c23a0cba02320429c12a00ea11220069ce49fffa034204a9cb79fd8a0db20699cf99f10a1eb21b09c8fa023a25e23dc9c41a1c1a2a324309d1ba2dba35425329d7fa253a44c25c09c8fa273a4dd245e9ccea1cca3e023439c31a116a3d822969c1aa1e7a25d22c89c2ba14ca3f321f29c0aa135a34721b39cc7a08ba2a120189c78a00aa21420099c51a0f4a1871fad9b32a0cfa1001f739b07a0a6a1691e369bd79f86a1de1d139b9a9f5ea1831dd49a6f9f31a1211d849a229ff4a0c61c649adc9eb8a0721cfd99889e79a0191c5e99ef9d20a04c1bb298609d809f9d1a6098069d0b9f0d1a3d98ee9ce39ebf190d98d69cc39e8619f097b79c949e43197f97789c3e9ef0185597569c059eb0180f97219cbe9d85182297c99b539d5118a896649b409d1b187996e59a189d56167996e59a189d5616ee85b18dcf8cb206ee85b18dcf8cb206f9159219731bfd1eb518df1b781d5422b2180c1cf01dd5227218b61bec1d0b236117721a111df522b8150e19281c3623e813a017ae1a5623fb10d2145a191b23240ee711311841233308d10ede165e233883150c3c1546235a8809062a14c723a78aa00cb1142b2463903a0924162427b1943b8de2142c2ad098b698f8902e2ac69b469e309d8f276d9c53a01aa05320ca9c1ba131a1879b9d9cbfa077a13ea1ba9cdba0b5a1b4a2899c8aa04fa143a2229c6ca03ea16ca03e9cbba0b5a1ef94db9c9aa1bca29a21479dcda22fa4ee25df9df3a3f2a4df27969e69a486a5fe275c9e24a432a5b6269d9d86a3cca44c25a19c1da218a41b24c89c82a165a30423059cfea0d8a2ba21579b9ea07fa2e9208b9b67a042a278204a9b53a01ba222203a9b29a0e3a1941f049bf09fa2a1ea1e029bf49f9aa16b1ee89a939f55a1ee1dc59a479f31a16d1d989a079f01a1141d319aab9eb5a0aa1cf199679e7da0561cbf99239e50a0061c9899f49d31a0911b7799bb9de99f0b1b3a99679d949f831ad998049d1b9feb19ba98ee9ceb9ebf19b398cb9ca69e5b199398ae9c759e3a19a8989e9c699e0a197398709c1e9ebc180998449cfc9d8d18c597fa9b889d3618b896f39ad99cff164296a29a159d14164296a29a159d1416000061819d807c0c000061819d807c0cc8148d180c1a061e6d17e11af01c6b210b18ea1a461d1a22b017c11a271d3722ad16ab19aa1c362221158d18941b4722e3136a177b1a452291114916c2192d2228105314d518e0218c0c3f126c18a4216002690fa4161021b389b9031b143820e48c478b240f691d908c518c3808db18268db88deb898811768e998f828d260e468f05912890a012809011931792f815b392a995a5941819c895fe982d98ac1c4d99599ccc9a881fe69c76a0739efb22e6a0cfa43da4aa26f5a071a547a59324b39e9aa369a49a1d699bf09d6a9e8f1be299479e24a188218998c2a2cfa32b24fb8c5fa025a2c221c791169ec0a0461f1d98569d1fa02c1e2b9a8c9ee0a0711f609ae89e44a13d1f919ae19e05a1191f569a9a9ec3a0671e5c9a949ea3a02b1eb19ab99ebaa01b1eef9ac59ed6a0c51d189bc79ee0a0971d439ba89ec7a0261de29a719e85a0c01c2b9a3a9e55a0641c86990b9e4aa01f1c7099ef9d33a0d51bab99d79d26a0761bc099c29d01a01e1b019aa09ddd9fb81ab499569d709f3e1ae798e49cb79eb819e098b69c939e5319f298a09c609e3b19dc988e9c739e271963988e9c579e16193f98759c309ede18e297439cf69d9b18d597169ccd9d79182297b49ba39d1e18f2952c9aa79c7f15f2952c9aa79c7f150000c7010a05d9050000c7010a05d905ec16031a5c1c9f201017f91af71c7f219917c01a301d65212017621a311d89211b168c19701c7221b2146c185e1b542120139916281a2f217111d2140119ea20510e7e11d817c720d409e50c6b168f20fe8139036113341f958a5a8c110d3e1d2f8ee490408c121d678fd89212923c1d9890639530956d1e47939497f397e71fc0944199669987204796ae9a179bf32059979c9b1e9c21211098289c9f9c0d2174985b9ce79cd8207098829c299d8a2032985a9c319d192086971e9ced9cee1e7e96f49b409ddd1d2c95f19a789c871c67925b99339b561a8f8e0a9760992c180e9123955798c716bd939e95a8988c1812963198fc9a2d1b8a98379ce69dff1c7899419d359f871dcf99649d709f641d9b995d9d869f461d9b997b9dc79f1f1dc299ad9d0ea00a1dd199e19d30a0e41cf499f29d4aa0b61c2d9af79d37a0811cf999d19d32a0311cae99b19d12a0ec1b5e998a9de29f9c1b7699769db29f421b56994f9d949ff71a3c99419d699fa91a2c99249d339f4e1a0d99f69c0e9ff319c798eb9cdd9eb419a498d59cbb9e8919ba98d49cad9e7619d898bf9c969e5d19d098a59c6b9e1119ed98859c3e9ed3189f98379ce79d8e184698e89b7d9d2c184c97329b2b9db5174a99759b9d9c6a164a99759b9d9c6a160000a00e5b11cd080000a00e5b11cd080518fb1b4b1d932093177f1b491d3a212517871ad11c0621fa159419321ccf203b158c18501bc32022146c17391a94206d115615db187020910ed8110b173e20aa084a0c03150c20a2012983ef11751ff187138bbb0cad1e568cb990ea83091fd88f2594b7900620cb91d095d4947e206c939d97f896c2209b94b898a498ee20789563996e990a215996429a9a9a04213b97239bc09b0721f997e29b969ce1203b98569c1b9dd22083988c9c6c9db6209898d89cb19d8f20bb98c09cc69d4d209e98ac9caf9d06208b989b9c829d4b1f1f98649c779d8f1e9997079c299db11d1997139bc99c9c1c53967b9a8d9c171cb495279a819c8c1b1d964d9a8e9c561bd996909ad19c3d1b4c97f09a0d9d391b12988b9b919d1c1b3098da9bf29d441ba398649c5c9e491be398a69caf9e7b1bf298bc9cc29e811bee98d09cef9e591bf598f69c329f581b1499219d659f441b4499609db49ff41a2699399d659fc01ae5980c9d1e9f701ad098c49cc79ef3199b98849c699e83198398629c349e49194d98459cf89df81827982b9cdd9dd9181498229cbf9da418f9971e9cae9d90189d97119c8f9d59186297089c7f9d28185597bf9b569dfc179397759b1a9dc9174397279b239d49173c984e9b409dc0163c984e9b409dc01600000000000000000000a00e5b11cd080518fb1b4b1d932093177f1b491d3a212517871ad11c0621fa159419321ccf203b158c18501bc32022146c17391a94206d115615db187020910ed8110b173e20aa084a0c03150c20a2012983ef11751ff187138bbb0cad1e568cb990ea83091fd88f2594b7900620cb91d095d4947e206c939d97f896c2209b94b898a498ee20789563996e990a215996429a9a9a04213b97239bc09b0721f997e29b969ce1203b98569c1b9dd22083988c9c6c9db6209898d89cb19d8f20bb98c09cc69d4d209e98ac9caf9d06208b989b9c829d4b1f1f98649c779d8f1e9997079c299db11d1997139bc99c9c1c53967b9a8d9c171cb495279a819c8c1b1d964d9a8e9c561bd996909ad19c3d1b4c97f09a0d9d391b12988b9b919d1c1b3098da9bf29d441ba398649c5c9e491be398a69caf9e7b1bf298bc9cc29e811bee98d09cef9e591bf598f69c329f581b1499219d659f441b4499609db49ff41a2699399d659fc01ae5980c9d1e9f701ad098c49cc79ef3199b98849c699e83198398629c349e49194d98459cf89df81827982b9cdd9dd9181498229cbf9da418f9971e9cae9d90189d97119c8f9d59186297089c7f9d28185597bf9b569dfc179397759b1a9dc9174397279b239d49173c984e9b409dc01600000000000000000000000000000000221efd151e176c174a249e19961c93205d26c51bcd1bc8224828f61a761cb322c428231ae91bf622e028c719c11b0f23c028b3197b1bf4228d28571a931b7b224e28aa19641b752014283419531acb1cb3263f1f44203e196f27a8281f2bfe1c2b21eea551a59d24ab1e1ba10420331fd91f9097a2262d1ddb1c3a8b68290c1dbb9af3896d2ac61c679e128a8d2a401ddf9e9991592a3a1f3c9e5a9a8129dc206c9b469b77287b20b4951895a0284f1c0e90c98821287c18a090b88db427f817d49093918426821769913394b825a91757918c94cd24e617e090b7948d22f616cb914d95051f5317f2875794f011d316468a9894339d45187790bc95e0a1de194d912e9862a4591a1194469b5da5331c9398d99ee6a4af1f809a8aa1aaa4e2217797fc9f3ca1cf1fce96ad9db79fb91cf898279eaa9fbe1cf0980a9ea19f741c4d98fb9dcc9f581c8f98199ed69f381cad980f9ee89f321c7c98f79de49ffb1b4e98de9dd29f951b48988c9d4e9f131bde973a9d959e711a3c97e29c5d9ecf193c97ed9c569ea919fd96ef9c3f9e78190f97d99c319e5f19c996b59ce99d07196a96709c919dbf18e9952a9c289d7418e2951e9c0a9d3f180b960e9c069d2f183596e19bd69c10185e956e9bc99c7a172596259b949c97160000000000000000221efd151e176c17221efd151e176c174a249e19961c93205d26c51bcd1bc8224828f61a761cb322c428231ae91bf622e028c719c11b0f23c028b3197b1bf4228d28571a931b7b224e28aa19641b752014283419531acb1cb3263f1f44203e196f27a8281f2bfe1c2b21eea551a59d24ab1e1ba10420331fd91f9097a2262d1ddb1c3a8b68290c1dbb9af3896d2ac61c679e128a8d2a401ddf9e9991592a3a1f3c9e5a9a8129dc206c9b469b77287b20b4951895a0284f1c0e90c98821287c18a090b88db427f817d49093918426821769913394b825a91757918c94cd24e617e090b7948d22f616cb914d95051f5317f2875794f011d316468a9894339d45187790bc95e0a1de194d912e9862a4591a1194469b5da5331c9398d99ee6a4af1f809a8aa1aaa4e2217797fc9f3ca1cf1fce96ad9db79fb91cf898279eaa9fbe1cf0980a9ea19f741c4d98fb9dcc9f581c8f98199ed69f381cad980f9ee89f321c7c98f79de49ffb1b4e98de9dd29f951b48988c9d4e9f131bde973a9d959e711a3c97e29c5d9ecf193c97ed9c569ea919fd96ef9c3f9e78190f97d99c319e5f19c996b59ce99d07196a96709c919dbf18e9952a9c289d7418e2951e9c0a9d3f180b960e9c069d2f183596e19bd69c10185e956e9bc99c7a172596259b949c97162596259b949c97168f915105530deb0d8f915105530deb0d4a21251c951d372233252b1d2c1eec2359274e1c971d84239328d91bde1c682342292f1c8e1de0236829c31c4b1e3c2339298e1d2c1fcd22e628811f16211322a5280d20bc215c20d3273b23f2248a1e7b27822591273d20e7223da455a48022df1e6fa58ca49a21da191aa2031e39202199c39e5f27f71e539ec898432aa41e98a0f499db2a4920a7a09e9cdf2a4921eb9e669d352aaa21cf9ca69c242a37217299a99a9829be1e9397de963e29fd1adb94b694a1282b1a1b935b9439284f1a25925e957a27af195a907095c8258c194e8b3493eb232218878e3894cc1ec718568b579402120818078c9f942ba06519f38e2b95f9a3491c7e910696e0a5071b2f931599bea58a17f294309c51a4011c3598f39e25a3c31e2b9a5ba001a3761f629a84a096a2ec1e4999af9f65a1ce1d8299789f23a1751d9b99609ff3a04f1d5d99f49ea5a0f01cb5986d9e4ea07a1c5a98389e38a0461ca198659e41a0311cb698419e1ca0ef1b8198f19dba9f491b08989b9d4c9fc91aef97779d079f641aa697389dbc9e1b1a83971b9d7d9ec6196e97079d519eaf195d97ec9c399e60193e97cb9c0b9e1e19f4969c9cc79dcf18ba965a9c909d98189d961a9c239d3b182b96ce9bf59c13184696129b929c7e164696129b929c7e16bc0c46105f112911bc0c46105f112911461e7b1c271e2b2243226f1d981eb8231d25511dd81eb6231127af1df91e37247f28fb1c961e20243429341d471f2c244a29cd1dac1f0d241729081fd120a623cb283f20df21d0225b286d21a9239c22e226aa201b2389237f24709a779626247a207ba2b7a11f249a16fba1a19a5523f89c3aa0a1229522de9f6b9c7528b7218ea0b49e6d2ae32237a00f9f132b5e23e59eba9fb12a3123509e68a0f829ce226199569cf1294b2067998d9b152a2b1fc497fd9ada28521edb961b9b9028951d3b975a9cd7276c1dde96499be424951d3c967b9b86237e1d5196939b2a1f7d1ddc940d9abf98461d7494ac9928a1be1d1b95d59b27a6391f19967c9c62a79a1e5b96769d7da6691ebb98a69f0ca5791f959ab0a076a41320509bd6a0c4a3651f1f9ba1a00aa3ee1e1e9a3ba034a2641e8e9a32a009a20a1e7d9a25a0e7a1e31deb99b39f66a14a1d3e99189fd2a0b71c6998c29eb3a0601c77987c9e78a0321c83983d9e32a0ce1b5e98fc9def9f3f1b3598cb9d939fec1a4e98ba9d589f9d1a12987a9d129f541ace97529ddd9ef0197b97159d7e9e8c195497e29c4a9e5519d896a99cf19dfa18bc968f9cc89dc1189696899cc99dbb18de96979cd79dc918bb967e9cad9dbf1827971f9c709d181727971f9c709d1817d3012f108c10570ed3012f108c10570e461c511d781fd922f71ede1db51f1524ec21d01dc01f2d2454247a1d4a1f28249326e51dcf1f86242928e51d2a204e249728261e48206b24eb28a91e82204924bc28d11e012152243d28871e18214824ed26e11bbf1f44243e24cf98a48c15253720879f3f9e7424da0fd6a0ee9e4e24b69df29f4c1b29247ea05ca062248e2433a005a0b0285724dd9f7f9faf2a6c24779e9c9f1f2b1b24299ed89fed2ac823779c479f222a7622119c439fc2292822869ca29f09295c22349b019f32289321f3995f9ec726d820ef99569e4225ba20249bc09e8121d120379aa49ec012c620ec98b29eb59fd120349a679f79a41621619aba9fd3a72b21929b34a065a81821cc9946a093a6be20e29a7aa097a47a20ae9bd3a04ea46420e79b15a13ba44120469c5ba12ba41620999bdca031a3001fa49a72a08ea23a1ecb993aa013a2bb1dcd9909a090a1541d019aac9f4da1101d56994e9f1fa1aa1cee98fd9ed5a0681c0399c79e99a0221cd598779e56a0a21b8098429e2ba04b1bb198369e08a0001b8c980b9eec9fd01a8198f69dab9f7e1a3b98c39d659f471a0798659d019fd11970970f9d7f9e56195497d99c249eff18fd96bc9c099ee1186c97b09cf99db8180097a79c019eae18bc972f9c5c9d0118bc972f9c5c9d01189601320fd910ee109601320fd910ee102d1b5c1d241ff7229b1cff1dad1f7324c11e571e2c20c124aa20241e4b20e12483230f1e192042256e25641dd31f3c25ba267e1dd81f20259327851d2a200f259927681d3d2023254327931c03204b25e2257316841c6b259e23f298e60bc025f51ea59dbf9a4325df8d679fc39d6125cb9edd9f7899e524889f1aa0e51c11251a9f0ca097251425409e22a08329e5241f9e0e9f052b54246f9f52a0982b8f24f29d37a0c82a1f242b9d05a07a2a8323179e69a0e1291024389d03a0fd281123189cce9f2f2894222b9c0ea0cd258c22859c2fa0f82176224b9c35a055936422e69a22a0faa12d22fd9b4aa01aa63f22d99b78a08ba83022959aac9f09a8de2005994ba0aca51b213b9c05a170a44c21229cf2a028a4c7205b9c31a141a48c208d9c3ca130a43d202a9cf3a084a3701fd19bbfa019a3f11e4b9b9da0a6a2731e069b76a075a20c1ec19a47a015a29d1d7f9af49f7ea10e1d1b9a5b9f19a1941ccc99fd9ee4a0361c8599c49e9ea0e21b3c998d9e73a08b1b08995b9e46a02a1b96981b9e1ea0bb1a8398ee9de79f511a5c98999d559fd6190f98469d029f9019d2970c9da59e3319ab97f59c779e1b196f97c49c349ef8184397a99ce39dbf18da96789cd29db8183997529ccf9d59173997529ccf9d5917b8090810ee104a12b8090810ee104a12201ba51d541fc022801c8f1e7c209e247e1eab1f38212925c71f5d1f32211d259720101f9c205c25fb210d1e3b207025f9233a1d531f7625da24401dfa1f6d253125011dcf1fb225da24f91aa61e9a25be238c140a1c7b250021e2941618e225a519159c159882258496519d4a9a6f25fe9a3d9dd2992025179e829eb68b8325a39ddd9fd71f9325e59d939fab26db24699d7c9fb5295324c89e64a04f2b0025a79ebaa0892b2325e29dd1a0c42ada24eb9dada06a2aa424be9c21a08129d723be9c2ba074289323269d62a09d26a023619da5a03c238923f39cb1a0b7136d23cf9b95a046a2ae22599ca8a0c5a67a22c89bc6a0eaa81b22089cb0a038a88a21ee9a4ea15da5b421f29c95a178a49521cf9c72a158a400215d9c5ea15fa49e20239c4ea13da448204f9c32a1eca3e31faa9c3ba1dea3941f8f9b95a0bfa2741e239a1ba0faa1881dc299f59fbea1301d5899c19f99a1fd1c8599a49f68a1c21c7199659f32a1751c31990e9feaa01d1cdc98b79e90a0bc1bc698609e4ca0301b94981c9e1da0cd1a8098ec9de29f741a5698c49d9d9f481a2e98af9d7e9f331a1998909d4b9fee1914985f9d059fab191198359dc59e7e1912980e9d569e35194597a39c309ee5182d98979c289e3c182d98979c289e3c181108db101a12bc121108db101a12bc12c01a421e1420ec22961c1b1f0c21d624e51ce61f6e216025311d3e1f212141253a1d911e92202a254a1e391e8e205e25911f851d5f208e257d20b31c0a20aa255621e21bf01ef325d6203119551d89257a1f4512ce1b9a25a41c1d9413172d251013a398d290cf24d6953d9c17988925159bdc9df79980253a9daf9e0a9a7a25d69d709f3095e825c89c339ff21f7a25f69cb79fcc26ad242d9e6aa08b2adb24b69ec7a09c2b5825bf9d8fa0922bba24709ed0a03e2bd9245c9d70a03d2a3824449dbba02d296e24919de4a087276324079d83a0b023fa23839d8fa010148623379c4ba0a2a2e722e39c27a164a79323189cb5a089a85b22b79c72a0a4a66b21939c1fa1faa49821d99c90a196a4a9216e9d92a183a43721c19c5aa15fa4b2207f9c27a13aa44020a09cfba0dda3ba1f629cf5a0a1a3591f119c14a169a3541fe29bfda02fa3e31eea9a77a08da2f91da29a2fa01ca25b1d509afd9fa1a1f31ce999c09f6da1a71cc899839f42a16b1c7899549fffa0411c5c99299fd4a0071c1f99cb9e9da07a1bed985f9e56a0041b9098fa9d01a0701a6098b59d9b9f031a1e98759d339f9d190398499ddf9e7019ca970e9db19e2619bc97cf9c649ef418f996879c299ec818af96879b4e9db916af96879b4e9db91600009e0ff710561000009e0ff71056109c1a7a1e34206f23411cc91f4f211b25d81c12208e219a25f31cd81f89219225c91c281f01216e25b11c681ea3208625701c7d1d17208625e11c421c2a1f8725e21c711ae11d90252a1c2c189b1c64257f1a5012e71b0926b718f78fe51843263091169a218bf8251a99789c3b9815266b9a089d1499f725759b159ddc98a825539c7d9d0c996025909da69e11959a25349eb09ff11f00252c9e8fa06f27b9241d9ec9a09a2a1e25d09da7a0e22bd324289e96a0052cd5245b9d73a0c32a5b24839d7aa0b5292224bf9d0ea1e12777247e9d15a198243124649c9ea068144e235f9c5fa110a4f723119c67a1efa77823059c10a1f5a751223e9d27a111a50d22459c1ea108a47e21b39c66a135a46621af9d8ba153a44521f79d16a1faa38920929cf8a0c7a33920129cfea0bca30c20229c09a191a3ed1f129cdda03aa3361f1a9c74a0a1a24f1eb89b28a0f4a1a21dfe9aea9fbba1311d1c9aa49f7ea1f31cd899629f58a18b1cd699679f3aa1431cd2993d9f03a11e1cbe99229fd4a0da1b6899bf9e94a06d1b1499709e5fa0ee1ac2981d9e2aa0711a5798c39db49fef19ef976f9d399f7719bc973c9deb9e4419ad97059da49e1b19f497eb9c719e0119ae97f49c939e47196c97009c279d3d176c97009c279d3d1700003f121c14881100003f121c148811be1a621fda2088234e1c0920cc211625db1c452016225a25d81c0820df219a25121d691fa921a025ff1c7e1e1821aa25101c751d6f20d725df1acc1ce01f4f265f1a461b9d1e4926b818d8187d1d562625168614b51b1a266110bc8fb61801263593509840112e261b98ca9a639405268299529ce5988c25ae9b899dd599e5258c9ce79e949cb7259d9d15a0749df6256a9e12a02a9b7125619e8ca08c1dfd24929d4da0f32637251b9fcda0332a0e250e9e4ba07a2b8624499d7fa0212b8724879d90a03d2a65242f9daea0672833243a9d08a1c8243724c89c0fa176140724549da6a178a43924559d93a194a7d523cd9c28a230a60d24be9ccba039a3d6214a9c5ba13da4f121bb9c6ba151a49a21b19c99a169a454217c9c82a15fa4d320949caea153a4ad20b29cb5a146a46920c39c94a137a41020939c30a1d9a3591f409c11a181a3dd1e8b9bf4a046a36b1e2b9bd1a0efa2f81d449b9da098a2a51df69a5ba03fa22a1ddd9a23a0baa1a61c6d9a989f4fa1451c339a399ff5a0da1bb599d99eaca0721b4099879e72a0f31ad298469e48a0ad1a87980c9e13a04b1a3398d09dcc9fea193498a49d829f8a195398499df39e31193d98ad9c419e7a18089ade9cb29db9186697919b7b9ddc166697919b7b9ddc16d717841a221cbd1dd717841a221cbd1d0018581b771c0a1e6f1c5b1fc420f324a81cbd1f58218f25a81cc31f7f21b1256d1c591f6321e925031c9c1e04212626051b771d8e203e26be19501cba1f22264c18a919091e12266015ac17761cf1252c12700f201a1526d9856b92a21737267a950e980711f725a399629af890bc259e9a199c2096a825719c1d9dd598b2258b9c0c9e049c9e255a9d619f8c9df225679e0fa0f29d7a258a9d32a0a49dd924c49d939fbe1ab824f19db4a17b254625d69c96a001297d24649d8aa0372a7024289e45a1492aca24639e35a17a286824089f01a1cf24bb23dd9d68a17f9ac4235d9f72a12da65223a09ceca108a77a239c9cc8a05da4b5216f9c5da1baa32922829c5ca10ba4d821689c95a161a4c721469dd6a185a4d6211f9daba162a44e21079de8a173a43021ca9ce2a165a4f020aa9c86a12aa45d205e9c19a1a2a3991f3d9cf0a042a3f11e149ce4a012a3b41ed99bcca0e3a24d1ea99bada0a6a2f21d349b7fa069a2701dca9a4fa001a20c1d479a1ea0aca1ac1c0b9ac49f4fa1671cbd995e9f0ea10c1c9899189fcda0a11b2999b89e80a0111b0999639e50a0b81aeb98089e0ca0351a3a99dd9dc59fd4194399869d579f7d19ec98089d949ef2183098b09c269ed418db97359cf49d1418db97359cf49d1418000002124114e40f000002124114e40f641b701e2d204d23551cbe1f4c210625711c0020862157257a1cd71f7421c025fc1b531f2d21e3252b1b801ee2200d26281ac41d7f20f125e418a91c04204726f6168d1a741e6e266f142718e61c6e26070c70143c1b4d26858e1189b8183826c694a995261103266398169a44910c261f9a0e9c15980b26899b3e9da79bd7256c9c7c9e0e9dbc252b9d899f439ebb250f9d399fda9e7f25429d659ff49e1d251e9d30a001a01b25469da9a0ab9aea248a9d33a15d2016256d9ef3a13e260325df9e9da14828f624999eb6a1ab26b624fb9d32a11f220224b19d1da19d9db323839c4fa1dda4a2233c9cd6a019a46722339d88a166a30423e09c74a1a7a34822d39c5ea1daa3c221ae9e00a287a41b22539d1ca2bca4cf21469ddea183a43a21a19c89a13fa4ca20769c82a118a47a20539c56a1d6a325201f9c0fa15ba38a1fd99b0da133a31b1fac9b14a143a3d51e939b0da13da3611e419bdaa0e1a20f1ebb9a71a03da25f1d5b9a12a0c2a1ad1c1a9afc9f93a1871c319aec9f7fa15a1c009aae9f4da1211c98994b9ff7a0951be998849e5ea0b41a6c98cb9ddb9fd21950986d9d529f65194a98649d289f3b192798529d109f2a193c98499de29e01193098399dda9e21198e98129ddd9eec188e98129ddd9eec18000044059b08c100000044059b08c100df1ab21e77204723b21c6c1f5221ec24ca1c09207a215525a61c22208921a125411c691f3721af252b1ba41eef20cb25121ad51d4f20f0257e18a81c961f31260a16281b4b1e57263413d8165e1c42265405710f401a2926a4903f92ec150d269495e1962411e725a79894996b911d26d39a199cfc980626d79b679d129c8625989c409e669d5f25359d559feb9e6c25649df59f819f6c25a19d28a055a060252f9d68a089a03925079d99a0e1a0da24179ebba049a1b224009f30a1d69c8724c29ed9a10495c724649d6fa11d9070243b9cbaa0fe9a9a23159cd4a0bca19323639cdba076a22423979cb5a094a29c22fd9c09a124a38622849ea6a1d9a3a222ec9cb5a159a43e22319d67a1f7a38021919dc8a14ba49721899ddda157a44c21fa9cc6a140a4e520b09cbba12da4a420519c7fa105a430200e9c0ca178a37c1f9a9be1a02fa3ea1e219bbba002a3881ed09a89a09fa2fc1dd39a53a041a2881df99a28a0efa1181d279b00a0b4a1bf1cd29ad59f75a1711c8f9a7f9f32a12a1c259a499f08a1001cb499f69ecfa07b1b2c99a99e99a0021bc4984a9e3ea09e1a8d98039e0ca02f1aa398cd9dbc9fe8197498a19d809fba195b98549dfb9e5c19e197129da99e4a19c898159dfe9e3d18c898159dfe9e3d1800003c04af07d90000003c04af07d900d419421e0320fd22411b101f1a21af24321c15209c214b25511c2720c621b725e21b4d1f5a21e025411b411eb7201426cc19111d052031267918151c821e63261316ee19211d8426c511f616fb1b72260905a60f871941265c90a58f06160326af94f096e10acc254098fd995194b725e899fd9bd098b6259d9bfe9c8a9bad25639c499e349d9a25b99cf19eab9e8825ff9ce49faa9f6f257f9d94a0d0a05725989dada04ba10525ac9ddca06fa1ae24069eaca01fa17f24c29dc0a09ba1a524249e68a1b8a18224bd9dbba11ba294249e9d6ba150a22624199d53a1d8a2c323999d7aa10aa372239c9ee3a103a4b3235d9d0ba21ca46923839e69a106a461222d9d7aa115a4fd21079dd9a151a40e22dd9deba184a4ba21c59d74a124a4f020dd9d53a1f3a39b202c9d5aa1d0a359208a9c51a1a9a33320329c43a1b0a3f31f2c9c2fa172a3621f189ce3a0f5a2a81e019c9da09ea2041ede9b82a071a2bc1df29b67a045a2431d819b3ea0f7a1ea1cd29a09a08ba1861c429aa79f44a1341cee99649f0ea1da1b9499119fcda0831b1699a59e79a0e81aac98269e30a0541a6898cd9de39fd6198d98ad9d8a9fb519ae988e9d649fa619b798659d169f5c194298089dc29e3e196298c89cd29e25186298c89cd29e251800002a03b406e60100002a03b406e601a119271e3b209722001c1020c2210925611c0b20b1213e254f1c1920b3217925aa1b3b1f4c21ad25281afd1d9620d2259319c51d87200426c218301d2d201d26d3161d1c041f2226bf13aa18211d2f26410b78143b1b2e2649903089d6181e264195e5957d140326ad9794997491de250f99a79b0899c8258a9a219dc39b9525c19b829eba9d61254e9cf19e8a9e21255f9c699f5e9fd924b19ca99fce9fba24e59c1aa057a09b24239d60a005a19224619d82a035a16524ab9d8ba065a10924119d4ba02da14923bf9dc8a00aa2bd23cd9d29a164a2e923819d4ba1c4a2b4232d9ec5a133a3a023da9dd9a156a33b23659d77a196a35922d09ddea120a46c22f59edfa143a4fa21579edda13ea4c321829d16a26fa4c821f69c05a271a47121f09ccda14ba400215e9dbda10da49520da9c72a1d6a32620309c2da173a3931ffb9bfda01ca3f91eb59bc1a0c1a25c1e759b79a035a2d61d4b9b55a0f9a1681d719b25a0d5a1041d5c9b03a0a2a1b21cf39a9c9f67a1511c4d9a449f11a1fb1baa99c49eb6a0461bf098439e55a0bc1aa898019e0ca0511a6098b79dbc9ff3194e988f9d719fc8196098749d439f8c195598499d139f51195b98179dc49e1f193598fd9c799e041923984c9cfc9d9b1723984c9cfc9d9b170000e7017d042c030000e7017d042c03bc195a1d701ffc221f1c1e20dd2138254a1c4b20df21a225e61b0e20b52195257a1b8a1f5821a825631ab71edd20b225a619231e8220c3253418a01c7b1fc8257e15d51a5a1efb25c713b2181a1d25261c0e8e14431b24263d904189de17de252f9503962b0bce25109712997891b425c7987f9a2b989a25fc99a49cfb9a5f252b9ba29d549d29251c9ce69ead9eec24669c6c9ff99fbe24ae9c1aa063a0a024f79c3aa0cca082241b9d77a02fa16d240f9da6a082a162243b9dd0a0dea12f24119dcaa001a20a24459df0a03da2db23609d0da1baa29b23b29d24a10ba37e234e9d5aa139a34923329d6ea190a32d23329d4da1cda3b222909dbca1e6a3cc22299ee6a141a4b222df9dd6a143a42622b19d3aa282a43a221e9deba142a48921cf9c9ca1f5a30021fe9c91a1eca3a820e49ca0a1e7a37120d59c56a1a4a308208a9c14a131a33c1f1a9cc7a0bba2831ecd9b96a080a2fc1d769b74a039a2ab1d0a9b48a0f1a1471db09a12a0a1a1c41c499abd9f57a17a1c349a7b9f1fa1321cf799539ffba0f31bcd990a9fbfa07b1b8099af9e86a0f41a38992b9e48a07d1a1599c89dd19ff3192a996f9d329f8719e398119df79e3819b798d19c759ee718c097599cf29d97186897f09ba59d4e176897f09ba59d4e172007a412ae144d122007a412ae144d122d1b721fcd200524551bb31f0a21a5246a1be71f7f21fb24ae1bf21f9a215e25fd1a611f712199256e1a111f2221e7258019411ea620f12564186f1d222022260c16641cf81e19269013f219921d0f26300bd1154c1bf1253f904d89f717ec25409515963d0bc9253b973099a094aa25d3984a9b2b996c250b9ab99c099c4b25029bc79d019d1f25b99b679eeb9de3243e9c549f499fa524879cd89f13a077249d9cf59f7ca04424c99c2fa0d5a03824cf9c37a0e5a01924db9c67a068a1fb23119dbca0b7a1a6231b9de5a03fa27223229d17a177a25323589d5ba1e7a24d23239d5aa134a362236e9dcfa1b4a39623949de2a110a479235e9d49a24ea47323d39ceba139a4be22c99cc8a132a43522149dfaa14ea4fa21169dc5a124a46621da9ca9a10aa4fb20bf9c9ca10ea4b920d29c93a1f0a36c20b79c6ba1a0a30d20879c32a175a3711f0c9ce1a005a3d01e8d9ba5a0c0a22c1e759b85a06ca2de1d129b52a03fa26e1dbf9a0ea0b4a1da1c0d9a7a9f3ba16b1cb6990b9ffba0141c7799b89ebfa0c71b55999a9e8ca0681b4199749e60a0161b23992d9e30a0dc1a3499f89d08a07d1a3e99c39da39fff1926997d9d659fc719ec98359dfd9e3d1961989d9c619ec118ef97309cef9dce16ef97309cef9dce160000e70ca70fc20d0000e70ca70fc20d001b491f102108241e1c161fd42084241e1ba51edd204f24391b2d1f1521cb24041b3d1f26214025631a601f5121a925af19e11e0e2100268e18ab1d482065264016621cfd1eb1269f12af19081da626d9043316ce1a7f265b90ad899616402655957b96a48be525f9972d9a54987e253c992c9c3e9b09252f9aa59d1b9dc824539bbb9e9a9e81241a9c6e9fa69f4e247d9c0aa08fa01524dc9c51a0c1a0d623cf9c8ca020a17723e79c94a03da1e822e59c97a05aa1af22049db0a0bfa19822399dfca02ca29022519d12a15da2ca225c9d46a1eba2f5225c9d77a12fa31c23579d65a145a34323609da1a191a36f23779dc9a1eda36123a39df3a114a40e23649df7a117a4a622129d01a221a45222d29cd1a123a4eb21eb9ccfa106a48721da9cb2a1e7a31621f79cb6a1e8a3a820149dafa1b0a36420d09c6ea177a303205c9c12a124a3431fc99bc9a0c7a2901e159b7da05aa2dc1dae9a45a00ba2551d799a00a0a4a1d81c2e9a669f32a1561cc699df9ee3a0e31b8c99879e7ca0411b2c99049e19a0671aee98ae9df29f0b1aa5986d9d989fa5198198469d6a9f5e194798239d319f2b1935981d9d129f24193398229dff9e0a1947980f9dd19e0719ec97ed9cb19ef5180f985a9c019e27170f985a9c019e2717b681538d7a891b12b681538d7a891b12e619e01d002013232e1a021f83203b24151a3a1e94200b24511a771ecd205224041ad21ee420bc24af191b1f1a2135254719d31ef620702570184b1ea920d7253716ee1c0b2004265214bd1bd91e852627108819111daf26a98bdb13a6196e26e0940094390cd925c89638994f952b256098bf9ad199832453998a9ce29b1824139a8f9d689d6123ec9a3d9e609ee522be9bde9e4b9fc722309c789f13a07722479cf09f74a042225c9c34a0d6a0eb217a9c4ea040a1d421b59c75a078a1a221b89c94a0e9a16921d59cd9a019a28121f39c11a1a6a28e21019d18a1d4a2e1212c9d32a1bfa2b3225d9d76a153a35923589ddaa114a4b0239b9d75a25aa4d1236c9d6aa272a469235c9d5da272a4f022149d45a270a47a22b79c19a253a4e821a39cdfa12ba46e21989cafa104a4e1208d9c92a1cca36020749c34a12aa3d31f489cd4a0c3a2091f1e9c94a05fa2641ef89b57a01aa2e01de09b21a0bfa16b1da29bd89f74a1e51c5c9b849f3da1751ca79a139fd8a0101c239a849e78a0531b82990e9e3ba0ce1ae198b29dde9f431a94987f9d709feb197a98429d369f9a195398159dfe9e2c196d98039dbc9e19197198e09ca79e05197e98c49c6e9eea185898979c739ed9183398769c4f9e28173398769c4f9e281700003508c20e6f0f00003508c20e6f0fe719c61cca1e17225419781d641f3a2371195b1dea1f86238619b31d3f2000245a19c71d45204924c7188f1d092096243418331da41fc924df17681dfd1f15256017811d2620e325be16b21d5e20db26c813cb1c491f0d27d90b9919551d0d2701917e1161193d26bb9611990c9603252a99d89c879c1824779a0a9e339e9922359b209fb29f81217e9bb29f48a0e320ba9b22a0b8a08920179c47a0f4a07a20719ca7a031a175208f9cd3a0b4a13c20c69ccaa0eea16520f79cf3a0e3a18f20e39ce9a01ba2b720de9cd2a00aa20321ad9cc3a03fa2b221c19ce0a02da22922f29cdea069a2d122349d75a12aa37823049e14a21fa4c623759e80a268a4bc23bb9da2a28ba45e23f89c79a27ba4cd22fc9c4ba247a44b22f89cf4a111a4ae21bc9c9aa198a30721899c35a124a379204c9cfaa0bea2c81f039cbfa07aa21a1fae9b86a04fa25c1e5c9b33a0d7a1b81df19acd9f55a1271d769a329f01a1a91c499acd9ecca0441c209a949ea4a0fd1be199809e8fa0a51ba699609e77a0411b4a991e9e4fa0d11a2699019e22a09c1afb98c89de69f3a1abe98649d759fe01998981d9df69e72196898d89c9d9e1a192298a69c6c9ee6180798869c259eb818e397a79c6d9ee918cf974a9cd59db517cf974a9cd59db5170000a6876d893b800000a6876d893b80ed18971c621e0f221e19461d7b1f7f2335192c1d8a1fac2345191a1d571fd523f718f71c5b1f19247b18b51c1a1f34243617061c511e3e24f915411b921d7c246716321c6a1e20257c17441d1620df256216ff1d98202127ec15fe1e00215f280312621ce11f3328fc949d93a70ea225ff990f9fd99e5f216e9bc3a02da1a41ec19bb7a02aa1951cf59b68a0d3a08a19d39b6ca0fba042190d9c3ea0c3a00c19139c18a0a4a0f817029c9c9f90a05a14359bfb9e48a01411309bab9e04a02a11509b5a9e16a06114779b809e25a0ee18b49b8e9e6fa0321da59c37a09ea1e6203d9d35a1eba2df23049eb4a252a40025209e93a3f2a420256d9d6da3cba49424d99c4ea242a48d23c29cbca1faa36822459da5a1b0a3a521169d5ea13fa30d215c9cc6a076a24b204b9c99a034a2c81f359c74a011a2361f149c54a0eea1981ef89b2ba0c9a1271e8d9bf59f90a1991d5f9bc49f6da14b1dee9a819f38a1dc1cb39a369f08a1861c269acd9ea9a0211c93992e9e44a05c1b0499ad9dda9f9e1a8698379d4b9ff2194698079dfd9e9c191898ef9cf39e6419f097cc9cdf9e3d196897b29c919e041943977f9c3e9ebf184297539cf99d76183e970b9c8e9d3818c496d69b639d4b18f795d29acd9c3f16f795d29acd9c3f16a188a0905b907104a188a0905b9071042318711bdc1c14214019b91c421ec7225d19601c4f1e0a23f718221c0e1e2b230318bb1a451d2f23fc157f19431c492377142f18dd1a53231f11741587190423ea0d31135a182523580c2811e116c723c502280e921595221889580fa816da269992918d4218382ae899559d9998d028b89cfaa1e5a1aa9db79caba2b7a2dda52e9c8ca145a2a5a3539acc9f81a051a0af993e9fa69f049d739a629e3a9fde996b9a5c9ede9fd899879aa59e12a01b9a689aa59d159f429deb993c9d6c9ebf9f9f9ac09dce9e20a1369bc29d9c9f9aa11e9c8d9e72a0dd9d7d9d3da1ffa2981f699ec3a320a5dd259a9ff5a45fa63527fd9e76a4f4a53626579eaea255a42f24b89cada1bba38622619bbca07fa209211b9c9ba084a29b20b59b9ea072a26820009c9ba037a21320e29b5ca001a2431f6c9b43a0e7a1c91e4c9b0ba0a8a1231efb9aae9f58a1a51daf9a5b9f29a13d1d9e9a099feaa0c41c589ac09eb3a06e1c1b9a6c9e8ca0141cdf992d9e58a0991baf99dc9d15a00f1b5e99909dcf9f7c1afb983a9d589ff719ca980f9d059fa619bf98ee9cc79e63199998db9c909e3d197098cd9c8e9e11194e98a39c609ed5181198709c309e85189d971a9cd99d21189e969d9b4f9df8170896a19aa59c54160896a19aa59c54160000128195009a0a0000128195009a0ab817fe1ab01c532031188a1ba21ddd215b18b41bbd1d24223618441b4b1d45226017311ad11c4f226d15c018d91b652275141f18f91a4d2259121017311a1b221f11a115b2198321580de1126118a920ff01ac0d9914541e8085e281700fd419dd861988ec05e614dc88558c7c86c014ba90ca92e18fbd1963947696b3940b1ef9959f98c0970720e196f3999d99762060985b9b6c9bdc20a499849c289d4521d19a389df19d5a218b99169e959fd821bb9ae49f2aa177232a9b18a1caa27224669d07a483a4302608a0e7a5c7a666271b9f1da5efa529261d9d65a258a201237ea011a5bca53027389e40a539a63a27359134a110a31d22ad96cc9ef0a03d1f229bde9e20a1fb1e4699dd9db3a0c51d239aa69e06a1241e6d9ad49edca01a1edd9ae29ed1a0dd1d479bdd9effa0aa1d6d9b139f22a1921da09b0a9f11a1321d6a9bd59ee1a0e21cb69aa29eb6a0961cf299619e85a0361cbd99389e65a0f21bc999069e49a04b1bf299d99d20a0d91a049aa09d01a0941abd994a9d719ffa191099dc9cbc9e5f190c99a89c8d9e26190a99989c7e9ef7180699879c779ee418c398999c679ee9187f98859c3d9eb6182c986c9c119e9d18d6972e9cdd9d4f183b97f39b7e9d34182d97489a229c56152d97489a229c56150000c702aa0719070000c702aa071907c517b71ad61cbe20b7179c1b811d4e212a18581b851d7021f217ed1a4c1d8c2183160d1ab61c7421fa14a6189d1b63216c13de16611a1e21c3115f14ff18ba20db0e241072170e2020097608bd132f1e1184cc86330fa31c0a8a518e4483341de78e9a932f918f1f3592ce96b8951421f394209910993022ef96b79aff9aad220998f59b659cbb228f98879cf69c8a22e998d99c729d3f225a992d9df49d1222a0997e9da19edf21059ac09d009fa1212d9af39d4f9f6c21909a3d9e799f2c21a09a609edf9fe920479a829ef19f7d204699a49d3f9f2d1f0896189c6d9dd81c0e914a98319a8b18918e3d938c96df13f3908c91c695b914f3951198bf9a221900995a9c349e9c1cb699719d299f431dd999a19d04a0171df499bd9d13a02d1df999e79d30a0f81cef99039e62a0d21c2c9a359e81a0aa1c4a9a319e68a0861ce799e29d30a0281ca599b79d13a0ce1b60998a9de29f4f1b7099719dc79f161b7699549d969fb31a6599409d699f621a51992f9d559f151a4099119d2c9fe0190899039d099fae19c898f29cf49e6919bf98ea9cdf9e4e19c498c99cb49e2c19cf98a49c719e0419b698959c499ec8189598509cee9d7f184298f89b8c9d0218ab97909b609d00189798b09bf59c9f169798b09bf59c9f160000a80d5e1121050000a80d5e11210582183b1cad1da4207e18451ce61d9b21cf17e11a161d2921c016e719651c04218b150819921bde208714a417631aa7202812f3149e1864205d0ebb102d160120cf09bb0bdd124b1f7501ec826710fc1e0388878d2e0abf1f9f8c9c91cd8a662060902a951c931221d49281973596aa219e94e6988998fa21d595e3998699ec21e7969a9ad29ae02183977c9b0d9cb1212c98079c759c82219e98729ce39c4f21f598d89c789d1a212499149d0c9ef7206c99649d849eda2088997b9da69e9e20ac99869daf9e6d20be998b9de19e3d20ce999c9d029f03209d99929dd99e991f15991e9d589e7b1efb97359c9c9d121d9096029b089d1b1c3f96a69ae39c6d1b53968f9acd9cb01ac0969f9aee9c5a1ae997289b299d761a6298a49bce9da51acb982b9c289edd1a34998f9ca49e011b1e99a69cc29e2f1b0e99db9cfd9e1c1b2a99189d479f461b2f994b9d9c9f3c1b5b99709dcd9fe11a2a99459d7f9fab1af8981b9d3c9f3d1ae998e09cf39ed219d598b39cb39e8a19ac98839c6b9e331990986d9c4a9e081967985e9c2d9eca184d98489c0b9eb2183698499c089e8718ca97389ce99d6818a297329cc69d1e189897f79b7d9dd017a997909b379d3b177f97759b199d50179f98e49ab09c5a169f98e49ab09c5a1600000000000000000000a80d5e11210582183b1cad1da4207e18451ce61d9b21cf17e11a161d2921c016e719651c04218b150819921bde208714a417631aa7202812f3149e1864205d0ebb102d160120cf09bb0bdd124b1f7501ec826710fc1e0388878d2e0abf1f9f8c9c91cd8a662060902a951c931221d49281973596aa219e94e6988998fa21d595e3998699ec21e7969a9ad29ae02183977c9b0d9cb1212c98079c759c82219e98729ce39c4f21f598d89c789d1a212499149d0c9ef7206c99649d849eda2088997b9da69e9e20ac99869daf9e6d20be998b9de19e3d20ce999c9d029f03209d99929dd99e991f15991e9d589e7b1efb97359c9c9d121d9096029b089d1b1c3f96a69ae39c6d1b53968f9acd9cb01ac0969f9aee9c5a1ae997289b299d761a6298a49bce9da51acb982b9c289edd1a34998f9ca49e011b1e99a69cc29e2f1b0e99db9cfd9e1c1b2a99189d479f461b2f994b9d9c9f3c1b5b99709dcd9fe11a2a99459d7f9fab1af8981b9d3c9f3d1ae998e09cf39ed219d598b39cb39e8a19ac98839c6b9e331990986d9c4a9e081967985e9c2d9eca184d98489c0b9eb2183698499c089e8718ca97389ce99d6818a297329cc69d1e189897f79b7d9dd017a997909b379d3b177f97759b199d50179f98e49ab09c5a1600000000000000000000000000000000061fa7146e14f115c925991a4b1d3121dd279b1cea1c7e23ec28f81ab81cef225c29b81a461c89234e297c1ade1bd3233329a51aaa1ba923f628571a701b3921c8286119331b071de4274b1886191a1afa253e1d291e3b183d277a276d295b1cb722b0a04ea06422891f13a33d1db31d601fd89523277b1aef1aa68b0e29721931903d071b2ac01842a0ac02a12a6e1afba00592602a801e03a19d9a1626b71f5799ec988925771d0000559065262f1400006f8b47250c115885b68cb324da0ff4883c8cc923c70d1e8cc88af0214b0c018d4a8d2621aa0c698ef68c0720710cd88fc28e3c1a780d7c8bc394191193167988fe94fd9aa3185f92069626a26b1afb92c89805a5161c4f957b9cbca5261eea97d59ec7a4d31f339c5aa280a52b22469b97a2a7a40621d39705a075a1031e7e99969efa9fbb1c2d994e9e0da04e1cea986b9e32a06b1ccb98519e2ea0331cb6983a9e0ca0151c9e98199e0fa0d11b86980d9e08a0a71b9898df9da69f131b35988a9d159f721ae097279da89ec919de971d9d829e89199c97039d679e6d19b097009d5c9e39190497d39c1c9e0919cc96869cb29d9d184696419c389d481813962c9c189d18183c961e9c269d0a182396e19bf39c8a176195ba9bea9c18175f96be9bc99cb0160000000000000000061fa7146e14f115061fa7146e14f115c925991a4b1d3121dd279b1cea1c7e23ec28f81ab81cef225c29b81a461c89234e297c1ade1bd3233329a51aaa1ba923f628571a701b3921c8286119331b071de4274b1886191a1afa253e1d291e3b183d277a276d295b1cb722b0a04ea06422891f13a33d1db31d601fd89523277b1aef1aa68b0e29721931903d071b2ac01842a0ac02a12a6e1afba00592602a801e03a19d9a1626b71f5799ec988925771d0000559065262f1400006f8b47250c115885b68cb324da0ff4883c8cc923c70d1e8cc88af0214b0c018d4a8d2621aa0c698ef68c0720710cd88fc28e3c1a780d7c8bc394191193167988fe94fd9aa3185f92069626a26b1afb92c89805a5161c4f957b9cbca5261eea97d59ec7a4d31f339c5aa280a52b22469b97a2a7a40621d39705a075a1031e7e99969efa9fbb1c2d994e9e0da04e1cea986b9e32a06b1ccb98519e2ea0331cb6983a9e0ca0151c9e98199e0fa0d11b86980d9e08a0a71b9898df9da69f131b35988a9d159f721ae097279da89ec919de971d9d829e89199c97039d679e6d19b097009d5c9e39190497d39c1c9e0919cc96869cb29d9d184696419c389d481813962c9c189d18183c961e9c269d0a182396e19bf39c8a176195ba9bea9c18175f96be9bc99cb0165f96be9bc99cb016e8961d83c1048703e8961d83c104870325236b1cfd1f8e220e27891d781f6f24b728741c851d3b239b291d1d8b1e8924332a7e1d021fef242c2a6d1d2f1f1224b2295a1df11e8b215529af1db01f3e1ed928e41ed0204c1b0928b7230825081a0d2808260528f11b1523bca1faa0b91e2d1f25a675a51920b21df6a2b11c1d1ecb90979ec127fb1bc69c7c98432ab21c5da1b599d52a322096a2279cb42a0322dda14e9e022aea223e9e4e9c7d296e203299f2978b291d1230960594a2291482e99591926d284e069c9469904d275a821c94b192b026d202ea91b792122502122890778f62232b0d2c92d8918d1e88126d8fc4917b189d16b68ed1924b9d501a538ed0936aa37e1c31933097eea5ac1c7e95679be8a6df1dd3962c9de6a4bb1ee998419fc0a3171e609bc4a088a3ee1da49b26a149a34b1e839a76a0f8a1ce1d1a9ad99f63a12c1dc29adb9f47a1381d8a9a799f06a1e51c7499d39e96a0691cd898859e63a0281cfc988e9e52a0121cf498769e41a0c11be098469e0fa06e1b8598f49dc39fe61a6998b69d6a9f651a2298869d229f1b1a05984e9dd89ebc19db97399d919e93199a97129d779e4a195297eb9c4d9e21192897bf9cfb9db718c596899ca89d82188b963b9c449d26182e96269c239d121833966d9ba79cd21633966d9ba79cd2161b88ec060b0eec061b88ec060b0eec063220d21c0d208b22a824581ee11f52242727f31da71f3824e928061e6c1f7724cc29f21da61fc024402abc1dd31f3d243e2a161e1d208123e2296f1feb204b22542936209e2109219e280e214e23ac209327cd204f23092121259098348db521f720f8a227a20e228f1a2aa35c9df421bf9b839f7823dd204c9f4d9a062921218ca1d29ed42ac22270a1989eb42bc72315a13d9fdc2a4c23b79edf9ef8292f2158987199372a601d8a988a99fd29a91ca69889993729c11ce496cf988228011cf297e799c627961b3098c3990126cf1b8695dd9908240f1bc193b8984820531ad692bd975f12da1b1491aa972da1c21c9c95b79b9ba530201f981f9db2a70020c497609e9ca76c1fa49967a0a6a50420109c6ba100a52620419ca0a16fa4791f9a9b47a1e4a3d11e8d9a97a08ba2191e939b90a063a2e61d789b85a04aa2e21d859a23a0c5a1341de299b39f46a1c81c0e993a9ff5a06d1ce998dc9ea7a01d1ca5986c9e50a09c1b8498289e15a00d1b4b98eb9dbb9fb11a6698bf9d7f9f5b1a3598919d359f141a2098689df39ec619d697399db09e6119a4970d9d649e3319f896d19c229ed918da96b89ce19db018c396b39ce69dad18ec96af9cef9da8187a96b79cfc9dcc182b979b9c229e9c172b979b9c229e9c1700004a077508500300004a0775085003401db11d0520d22240218e1e28204c246b24f21d9e1f2d24e526091ee61f6c24e628001e9a1fac24c329df1dae1f67242e2a221e11205324022a9a1e8d201b24a5299f1ed320ba23eb28721efe207523ce27411b4b1f5823432516992896af246222b0a030a08924721a87a133a065244c9f16a0aa1c35247ea132a064258d24bba1f89f66296224ffa078a0c32a152507a0dea09e2bd42414a04ea04e2b5724839d679f6b2aaf22b29cf89ed4290322149dd89f53297622159cf79e81287d21799ba19e7027ff20339bd19e3c250a21d09b479fd9212721339b259f2c130021c299e59ef5a0f620329bb89f1fa56721629a39a03ca8a621359cb2a0d4a8b1211a9cfda0a1a76c21259cffa001a5cd204a9c5ea1e2a49c206d9cc0a1b1a46420c29cdda175a401201c9c44a1bca3f41e939be6a02da3611e8a9a99a08ba2d51d199a36a0c7a12a1d589a04a08ba1ec1cce99da9f6fa1c01c2b99689f0ea16d1c1999199fc0a01a1cd998b89e7aa0ab1b7898719e53a01b1bb198649e2da0d01aac98459e1ca0af1a9d981e9ef59f861a6498ea9da99f2b1a23989c9d339fd8199e97459db79e5e196797009d6a9e08193597ec9c3f9ef4188697c99c169eb318b3969e9cf89d971858975f9c789df21758975f9c789df21700008d08cf09230400008d08cf092304de1c0f1e1620d323e71d3d1e172087242b21b81e6820fc242124981e61202d259726dc1e5420d1259528171efd1fb4253a29c01d0f2058259129d21d522051258129301df31fea24fd28161c421fdc2426283516e01bf5247e250d99270c9725a6210b9e949c5b250d17a49f589e222511a0c99f9998c624c6a044a0261e3125fca01ea0a7262a2521a0f8a03f2aaf25f39e4aa0c12b14253fa0dea0e12b3825ae9e85a0f32a7c24ab9d4aa0942a1224869ec1a0f32951247e9d23a040294923e09c25a068281823c89c28a00426d222a19d55a02223d022289d5ca09313be22389c53a034a29122c99c7ca064a68722759c14a1e4a8ea22249ca1a0d1a8c6219d9adca0b4a67221749c7aa1eda46121e79c86a18fa4e320dc9ca1a18aa48320009d95a15fa41420d39c4ea107a46f1f769c1fa199a3d91e2c9cdea0eca2591ec39b93a099a2c51d509b6da03ca2831daf9a12a0c2a1f71c489ab39f44a18b1cd7994f9f0da12b1caa99219fdba0051c5f99c79e9ca0791b2899a19e6ba0111be4985a9e48a0c51add98139e0ba0531aa398b29d819fcc197998769d259f8f1940983e9dc09e37191498189d9f9e0019a097f89c689ee2183197c09c1b9eb818b796a69ce69d9f1829976b9c8a9d651729976b9c8a9d6517c6001209580b2608c6001209580b2608541c821e6920a723f31c611ffe20e0246e1f26207d215c252021df1f772167256523731fe920ba2592253d1e3320b7259d278a1df21fe02589285b1dce1fe225f828a31c9a1fcb257928ab1a851ebf253327c912b21b8f250f256196af14b725cc20289c24987225ae0fe39dd09ad8250e9edc9d649991252ca0e49e79125425be9f26a0aa20cd25bb9f4aa0de275725609e1ba0de2a9c241ba0ada03a2c2c255b9fb6a0e42b22257e9ed1a03b2bb524b39ef2a0f02ad524da9d5aa00d2a1124cb9d8da0ef281224f39d92a0e726d223a89ecda09123e123039efea007148623a99ce2a08da2e222519d00a1afa6ba22d09c74a14ea9bf22d99c7ea152a92522ba9be1a17aa6fc21359df9a1e3a490218b9dd9a18fa40121f49ce7a193a4a8208b9cada170a435208e9c75a133a4b41ffa9c94a11fa4911f359cf2a03ba37c1ecc9a76a068a2b31d4b9a37a008a2351d93990ea0d9a1f41cd59904a0a5a1be1cc599bf9f5da16b1c8c995c9f11a10e1c4299e69ec4a09c1b04998d9e70a0fc1ac698289e28a08f1ab698f79df49f5b1a8498d09db69f0e1a5398bb9d929ff8192c98999d609fb3191598799d129f7119f397409dd89e47199a97099d5d9ef3180297c09c1b9e9b180798b29cd49d38180798b29cd49d38180000e00bd40cc6090000e00bd40cc609191c641fcb20ef23101df31f8e213125741d4420fa21ad25b81d911f55216d25771eca1ee1207a254521651e8f20ae252124c21d6f20f1258325781d552057266e26ec1cb71f852670265819431d76251d254b12411c6425f022ff923c18fd25ec1d1999878bbd2560937f9cb4969e25729c319ee29aa625289e029f489a9525b09ea39f6f8c2c26129e54a00622e625e79d7da06028f324c29e5ea0e32bd1241b9f86a02e2c2825c59e7ea0bc2b9824569f10a1ac2bf424509ec9a0c02a69244b9e2aa1b729b124269e2ca12f288024319ef3a082242024cd9e18a15c1a1224439db2a0f3a205237d9e24a112a85323959d47a170a9c122bc9e92a04ca83421609d56a18fa588210e9e12a2c8a4aa21ce9d05a2cca44421149ddea198a4bc20f09ca3a17ea43320089d7ba142a4d51fcb9c5ba110a44e1f6f9c47a1d1a3f71e4c9c2ba16aa3a71ee39bc9a0fca2f61d579b82a07fa28b1dfd9a42a005a2111d889a0fa0c3a1ad1c5a9af29f8ca16d1cdf999e9f37a1321c98996a9f08a1e41b77991f9fd4a0931b4f99c39e92a0091bdd98499e3ba08c1aa198ec9de69f081a32989a9d589f91191e98559d079f3c19e997289dca9e2019b797f79c769ed1181397d99c429ea5181f97419c8c9dff161f97419c8c9dff160000b108610af9050000b108610af905ea1b311fd0204824e91c4820e3215625701d7a200e22e925631d2520f021c025ed1ca61f4a21bd25761d3b1f60212926121f311ea5202826b520a91cb41ffa25c621781b111e4b26d2212a18171d0c2653211713031c9a26a51e3d903e197d26a616c298018bc025de98e79b0b98bb257e9b3c9d4a990a26e29bec9d3e9a0d26d89c489e309aad25e19e9d9f958cf825ba9e81a04822f724e59eeea02629c124bf9eaaa0052c29257c9e94a06f2cc124d79fbba0402cb224bc9ed2a0892b9424969e17a1882a9f24859e8ca1b528d424909e22a156251a24eb9de6a0c91a5223f09d44a160a36023ba9db5a137a87723d19d1aa264a93523b19e6ca1dca6f0215f9d72a152a48b21d09de2a1a3a47d21a39d0ca2bea44621f69d80a161a47e20d89c56a14fa43b207f9c66a122a40520939c8ea130a40520689c6ea112a4811f2c9c06a173a3a21e7c9b90a0b3a2df1db49a42a013a24d1d379af89fa6a1cc1c9d99a59f89a1741cbe99aa9f5da1451cbb997b9f2ca1081cbd99359fe7a0981b5b99ea9eada0321b2899969e70a0b31ad098429e38a0391a8998f89d00a0ef192b98a49d6e9f7a190898779d229f2d19e497469ded9e2f19fc97119d959e0919af970c9d9d9e22191797689cc79dc6171797689cc79dc6170000590af70cfa000000590af70cfa000b1c322080214624c61cac20a92243253d1dd320c822cf252d1d58208022e6256f1d1b200d22e2255b1d231f4f21d825ca1c9c1ec6204326321c821d6320a226c41ced1b4f1fae26a81c1f19651d72263b1b1f130c1ca1265b1741937118aa2624885b99ec0b8f26a497f79ba6964726769a069d0999e0252a9cf09efb9bcc268b9db79f749d3726539e60a0789d3826859e55a0e098a2255ca086a0b3221125d69ea6a05f292125419ff3a0412cd8243c9f78a06d2c9324169eb3a0322c8624649feca0172b8724ef9eeaa0802953240da018a1ce263f24579e1ba1ef1df323419e90a1b2a3bd23999d3ba19ba8d822989e52a2c7a8a123909d29a1f5a4c321ea9ca1a177a4bb21689deea172a48821e29c06a2a3a44121179df8a199a4e020069defa195a48c20ef9cf1a18aa44720149dfba193a42220cb9c95a13ba45f1f6b9c6ea112a4fd1e129c57a1f1a3911ea49b20a166a3061e8d9bdda0d8a2a61d339b85a06ba2151d329b3aa0eea1a71cb39ada9f66a12e1c5b9a529f03a19e1be799f09ec2a0391b7799b09e86a0e21af698719e60a07b1ab5981b9e29a0121a6498de9ddd9fb2196098bf9db09f4f196798679d399f0d196c98ff9ca89e9c183e990f9d569ec918f8975d9c679e6c17f8975d9c679e6c17000028153315bf16000028153315bf1614196b1d0b1f8c213a1d5620f7218025411d4e203322dd252b1d46203a220226d81c1920f8214b26891c251f9a2180262e1c331e28218e26df1afa1c262076264419b31a601e582664172518c61c412653152610c71a9d260f0d0f954418d3268d9345999a118c26ee99a89a8f91d425f99aa59c7196ce25589c209e4a9a4226279d4b9fdd9c45267e9e32a07b9e4a26f69e56a0829e7a250f9eb8a0c39ce624239fb7a0ca232325399ee9a1712a2a257e9d8fa0572c8624179ebea03b2ca124249e37a1bc2b8424909e7fa1c9296f241b9fbea161274a24de9e30a2711e5524cc9e59a2dfa51024ed9e5fa230a9d123759e01a1fea6c821d29ca9a168a430229f9c92a165a4c621ec9cdaa18ea4a821479d04a293a49e21809df7a194a43721859d26a2a5a40a21439d45a2a9a4d3201f9d29a296a47620eb9c90a125a4961fd29c32a1a5a3d11e769c15a15da3601e239cdea024a3ea1d049ccca0cda2b11d829baca095a25c1d239b84a049a2ea1c9f9a56a0faa1901c7c9a19a09ba1501c119a9e9f3aa1011cf799599ffda07a1b8699e49e9ea0da1a6d99959e6da08b1a28992b9e2ba00f1a3d99fd9df09f9b191599c89d879f6b19b298649de69efb181598119d8c9eeb18ef97e19cb09e8f18ef97e19cb09e8f1800009e0af90d040100009e0af90d04011e1cc81ff8203b24b71c4120152265250e1d4c20f221ad25e01c3020d4211426681ce31f61214726ca1b021f15216126cc1af11db7205c26c619c21cbc1fb0261b180a1b651eaa2672156818b91ca726350fc812c81a9126448c08901c186c2694945697821136268298759aaf943f26b99ab29c4e994f265b9cf99d169c1a260d9de29e729deb25ae9df59f249ee2258e9d01a0f09e9a25259e24a0049f7b253e9e82a0359e1525b99ed3a0d420dc244b9f45a1df291225859eb0a26d2cd125ec9eaea18c2c2625709f2da1622b5c24489efca0b328a223069efea07e202823b39dd8a1f0a5fe23b69c14a1d1a78722c09cb7a1a1a4c7223c9d21a150a39e219d9cd7a170a4d7216d9e76a2f5a42322519d53a2faa49d21e89d59a2d4a46021279df4a190a4cf20c89cf3a169a49520b79ce7a153a44620749c70a1e3a36c1f1b9c21a179a3d11edf9b31a164a3841ed39b11a14da3281e9c9befa015a3d91d339ba1a07da2511dd99a4da0f9a1c71ca69a25a0cca1741caf9a16a0a4a1401c8f9aed9f77a11f1c289a7e9f2ca19e1b7e99049fc2a0f91aeb988a9e78a05a1a8e98019e1fa0c3196c989b9d909f2d194f98799d3b9f0e1945985a9dd19ed2184098669df49e1e197598659d7a9f2c197598659d7a9f2c19000058047d069b82000058047d069b822f1c172089212a24091d2820e0213e25331d78200d22bb25171d4e20fb21bb259c1c1120c021f7250e1c781f602130268d1a5c1ef52067261a19141d262097267e16101bd51eaf26b81350172b1c8626350c4f09a91958260491a09476143d2626965098468b2e26a499ab9ad0965c26b59bd49c739a6526b79c119e129d1b26699d479f7b9ee125ef9d18a0839fa425129e79a011a0b225129e8ea09da08225989db1a0d4a035257d9e75a1f2a041252f9ec8a0ec163a25249e46a191271225f49e2fa2612a12258e9e27a2362ad524729e27a22b28a324429e25a2b01a8324a69d71a157a5cd23649c90a1bfa44f235e9d55a17aa39022409e0aa26ca4a022cf9dfca178a4fc217a9d80a127a44e21609d20a299a482210e9e27a2a6a44421519d14a286a4e020009d16a27da4aa20b59ceaa166a44320489c60a109a4891fed9b2da1a0a3d61e719beca04fa36b1e139baea0e3a2d21d0d9b7ba069a2551d1e9b52a02ca2eb1c449b27a0f1a1921c0f9b07a0b6a1491ccc9ac19f6ca1151c5c9a649f34a19b1b039a299ff5a0491b7a99d59eb7a0cb1a1b99839e76a07a1ac3982c9e36a0111ab598ff9d09a0c0199298d79dbc9f9a196c989a9d2a9f3e193c986c9d059f4319c0986d9d3c9f3b18c0986d9d3c9f3b180000c6022507c6820000c6022507c6822f1b7b1ff2201b242e1c951f4f21fa24db1c62201a229e25961c5c200222ef254f1caa1f69211926c61bb61ed8206026821a701d1e2091262119591cf31ea5268f16b1197e1dd22635121716a21bba2670056d09fb187c261992ca9498144926b195619880910526e198179b2998de25879ae69cf59ade252c9cf39df49cd225b99ceb9eea9d9c25ed9c929ff69e82256f9d4ea000a07225de9df4a00ca15525cf9d6da113a2fe24269e0ba29ca2e72440a0cfa180a2c324e19e90a18fa0be24d69ef2a110186724c79df5a1a4207324a29d03a1e31d5923489cb9a0dd9f9622349c30a15ba3be22429d47a14ba3b3228e9ddda14ba4d422679ee9a151a45d22a29d2ea26fa469224e9e5fa2dba42522429eefa1c2a46f212c9eb6a14da4fc20e69ea9a13da48e20a09db1a11ea46220f49c9ba10fa41e20bb9c8aa1e8a3ce1f8c9c5aa1cda3341f699c2ca146a3b31e4f9cdca0eea2051e1d9caea0bba28b1d1c9c8ca07ba2381dd29b77a031a2e71c169b2ea0d7a17e1c739afe9f88a1281c1e9aa69f32a1de1bd199459fe6a04f1b5f99b49e97a0ab1af598509e55a0231aa698fb9d08a0cf19b098c79dc99f8b19b698b69d949f7b19a698709d2b9f281900981b9dc09ee5186298e19cb19e01186298e19cb19e01180000c700330456820000c70033045682101b461f1921e0233d1c702039222c25c91c58201a229325981c3320d921b825221cbe1f8621f125e61a821e26214126b419eb1da9205726c118421d442054265017991bb41e7b2657146c18bc1c8226220c2b10011b8f26be903590a8165a26b295be97b30b34267098b69ac4960c26c099cc9c429be925279bda9d189db825539c349f849e7e25c19ca79f619f2625cb9c0aa017a0e7241a9d49a044a0a7245e9d5da0b1a07c24659d94a03ba16224499ef7a003a25124e09d31a130a20e24a19d26a120a1ae231f9e98a115a11924bf9dc3a1ada13824239ecba1baa20624249eb6a18ba23023569ee9a191a31323169dc6a104a45b22b89df8a15ea43122729fefa165a4d2216e9e20a285a4b421c49d7fa2dea4d721809d7ea2d6a48f216b9d37a299a4fc20639d2da271a4aa202b9dfaa145a45420969c8fa1efa3af1f469c72a1c1a33d1f0b9c43a16fa3af1ebe9bf4a00ba3041e6e9bb5a098a2941d549b7aa05ba2231d689b4fa013a2c91c049b10a0bfa15e1c7c9a909f5aa1f41bd599199ffca0621b3399aa9e9ca0c71a0399639e52a07e1ab2980f9e1aa0191a9298d99dc89fbf1983989d9d909f74198298869d499f5c1970984b9dd59e041967983d9dd49e16192598d59c939e2c182598d59c939e2c180000c680a302c6800000c680a302c680fb1b7d1e9b201824951c892060224a25b61c92204222b325441c4620cd219525d11be21f9a21c7251f1b361f3821fa251d1a5c1eed2008268f18241dea1f3126e915a01bb31e572617137c18bc1c6d26ad0bf812001a3a266d902f908516e1256195be97928bc42504980b9ab996a42504991e9c58998125ab9a2f9d9f9c5225de9b909e0d9e1925789c769f619fe624ba9ce19f48a0a724089d2fa0b1a07924439d75a01da15624839db3a086a14424989de5a0a5a12824c69d0ca1f3a12724d19d01a12da2d823e79df7a01ca26a23d89d57a14da38923df9e78a120a352236c9ec3a179a35323ad9d56a109a39722719d68a186a33d221b9ed8a135a47222d09ed9a16ca414228b9e13a260a4da21399ec5a2b9a43122c99d5ba28fa48821559deea144a4eb20779de0a12fa49620659dd1a12ba45b20399da2a1fea3f01fe79c65a18da34f1f809c1aa12ca3be1e2a9cdea0dea2271e019cb5a098a2b21d719b82a04ba2471d1a9b4ba0f4a1de1c989a0ca09ba1721c6e9ac99f56a1231c149a769f22a1ed1be599319fe0a0651b9099bf9ea6a0dc1a4a99569e56a0721a0a99da9d00a0e319fa988a9d5f9f6119c6982b9df99e15198198d69c849eb118a6977d9c059e76184797229c8b9de8164797229c8b9de816000005112114e10c000005112114e10ce31a461ff4200c24d01b1a20bf21d624041c4920f1213225f51b2820d4217e25331b0c20bd21cf25c01a961f79211f26e519691ec1203926a918291d31204b2680160b1c0a1f4326f31208191b1d2b261b05e312fd19fb25bf910593b614d6252796a498c791aa256a98ea9a69988125bc998c9c619b5225c19aa69d2c9d26250a9c599e209ef0246c9cf89e0d9fb124b99cdd9fe79f8024d59c34a066a05524e59c46a0d9a02624ef9c58a007a10e24fa9c5ca010a1d923269d65a021a1a223249d94a0a2a147234d9de9a04ea2f622319d05a190a26e22ad9d46a1fda243227a9d7fa14fa35422279daca1bba35b22619dd2a105a45922a29d29a242a4d322f39ce7a141a442222b9dd2a12ea4d221cb9d4da285a4dd21929d35a28ca466213d9d11a253a4e220399d01a236a48e200d9de8a118a44c20de9ca9a1fba30320999c8ba1e1a38d1f489c40a17fa3f91edd9befa022a35c1e989bbca0b7a2d81d3c9b81a068a2611dea9a3ea0f9a1ea1c419ab79f80a1781cf899579f21a11e1ca599f79ee4a0a61b9599db9eb5a0711b7899a19e8ea0211b5c99679e5aa0bb1a5e99259e1ca0521a5b99d59dd69fcc1955999d9d709f95192c99539d069f2b19a798e99c999eb3181698789cfc9d2c171698789cfc9d2c1700008e866586ba0100008e866586ba013a1c2820f0214924141c8a1f9421b224311b3e1f3821a624aa1bad1f77210425bb1b1120cc219525501b0620d721e6256c1a2f1f4d213a260419cb1d692094261716051c9d1eaf26c411b1187e1c8b2639857f1075193c2643935895150cdf255696d099429779258c98159cc29a3325e399989df09cde24299bb09e759ea324f59b5d9ff09f6424759c04a034a03f24d69c4ca0a3a01124359d8da00ca19523189d90a022a125232c9d93a03ba19122449d9fa097a11522539db3a0c2a1d1216c9df7a0e8a1c221989d16a162a2de219e9d52a1c4a2c821c49d71a12aa30e22669d4aa1f1a2de21809d6ca160a320228b9dbaa10ea46a22c69df0a129a47522839dfba128a439225f9d40a256a40522309d14a252a4a8213a9d0ba249a45b21399d17a249a426216b9d24a255a4d1208b9d39a255a479205e9d00a22ca42420bc9c88a1dba3671f349c29a149a3bb1e969bcca0dca2f21d3f9b8ba069a2611df79a35a0eaa1d41cbe9adb9f77a15e1c7a9a599f20a1fe1b1b9aed9eb6a04a1b8f99509e45a07e1a2899f39d1aa0fc19c998b49de19f9b197f98939dad9f5a195298699d8c9f421958985e9d5f9ff6184498459d329f0e1948982c9dd69ed618e4970e9db79ee6180498b19c159e87170498b19c159e8717000014928494a280000014928494a2803a1ab41e7c201823091bb41f40216d24801ab11edd204a24ca1a4a1f39219f24e51ad01f93212325831a1b20b6219e25b819e21f8f21c525c918b61e41212026f816761d87207926d314181ce61e9326fc0b5f170b1c17261a92009195125e255b9658999a9793242a98bd9b009b05241a99f69c799c7123fd99a39d6e9de622cc9a489e5c9ef322939bec9e4a9f0423349c919f18a0ec22579c12a085a09922659c42a0d8a05822819c45a0f6a0f221a89c60a060a1b321ec9c89a09ea15c21009d85a0a3a104212c9dafa015a2af20389dc6a041a27320399d01a180a25f20419deba082a29c205e9d1fa1c4a24521789d7ea18da33e22059e3aa228a41b23de9da5a27ca40e23a39dcba2aaa4cb225c9d9aa29fa42722359d43a27ea47621229d40a262a43821ee9c2ba24ea4e020da9c0da237a47220c49cb6a1eaa318209f9c4aa170a37a1f6c9cf7a0e6a2b91e559cb7a07fa21d1e4d9c64a017a27b1d429c1fa0c2a1e41c169ccf9f6da17c1c659b4a9ffca00d1cc99ab29eaea0491b1f9a4b9e65a0d91a6c990e9e2ba0731a0f99cc9d02a01b1ada98a89dd39fb119a6986e9d689f5519ad983e9d239f17199f98289dff9e20198a98049db69edd187598fa9cc29ee2182398b39c679e3c172398b39c679e3c170000748a1e8cbf0d0000748a1e8cbf0d021a2c1da61fa2221b1aea1d30203523e819c21d3220fe233a1aa51edc206c240d1abe1ef720b92463198e1ec22008251519871ea6205825b518881ed420ea25b118551f7221d82624178a1e162154272a110f1b641ec4265391e48b71169c253197649ac8991e2442997b9deb9d8e22809a099f7f9f90210e9b719f20a0c920999bd19f26a08220969b0ea071a06f20d99b1ba097a04a203b9c45a0d6a04520879c75a01ea14720b99c9ca055a16d20cd9c8ea087a16120db9cb9a0b6a18c20b29ca8a0e3a12120ae9c9fa0dda1d91fb39ca0a0e9a1821fd39c7fa0f8a1f01f059d8ea001a28e20449dbba083a27221179ea9a1c4a38722a59ed4a290a453233d9e5ba3eea481236f9d49a3faa42723879de8a2bea47622b29d98a27da4e521789d4aa237a45f21199dcda1c6a3bf20b59c4ca128a30020599c07a1cea2091f189cc8a098a2651ed69b74a031a2c51d5b9b1ca09ea1421df49a9a9f30a19e1cb69a1a9ffda0391c869ad89ed0a0e11b399ab99eb7a07c1bec998b9e9ca0331b7f994d9e70a0c91a2f99169e4ba0691aea98df9d16a02f1ab798869d999faf196d982b9d289f43193798f29cbb9eeb181098ca9c8f9ed1180298a89c5d9ebf18d197d09ca49ef5188b97949c179ee8178b97949c179ee81700007d8acd8a7e8900007d8acd8a7e89fc19121d2d1ff7217919811de91fa52365196e1de61ff7236319691dbc1f0e246d19761dd81f3e2403197e1d26206d247518071dd21f852409182c1dbd1ff6241519ca1ef5205b262f1944204822da271b181b206a225b28740d0b1aa81d4b261c98119de29ce921e19b80a175a20e1d2b9c58a10ca23a1c969b6da00aa1f71c4f9b11a09da0f51cb39b7c9f4aa0a91d5f9b8b9f26a0cb1d769b579f46a0a31d8a9b7a9f72a07b1d169b7f9f69a0d41cdf9b7b9f52a07d1c929bdc9e36a0061b759b469e999f1619159b709deb9e5116e39afb9c529e61139d9b649d4f9f98154e9c999e21a00c1ccb9c3ba0aba1e120be9d63a212a4e723c39e40a480a5da24ed9e87a4f5a5c924939e2ba4aba52b24a99e23a3d6a4ea22349e52a24ba4da21f49c6ba167a3ba20c89c06a1cda21f20939cc7a08da2811f609c96a04da2c71e4b9c64a00ea22d1e079c2fa0cea1b41dbf9b0da0aca1401d3a9bdf9f7aa1f01cea9a9d9f58a1a01c429a399fffa03f1ca199989e97a0701b2c99069e26a0a61aba98839dac9ff2198498479d539f91195598219d289f68193598079d0e9f2f190098d49cde9eeb18ab97aa9c6c9ea4185b976f9c1d9e761847972e9cb69d1a189a96019c7b9d3018ac95239bcf9c5b16ac95239bcf9c5b1665827d90e48f558165827d90e48f558103194e1cbd1d92215e19b61cbb1ee7229819a51cba1e21233319411c3f1e38230a18071b3c1d692326169a19661c5723bf144a18b61b6d237d11ac15e5193823b70fbc13651856232a09f80f17163524d88baa0b2f189428bb98e09d42927729b69c0fa370a162a2e19bdea194a111a40d99fe9f68a0be957498da9db99eb61c5f98679d249eb31f289ac09db99e8520d89a389f0da00e21d69b919f36a0d020009caa9f74a06c20d99b3a9f15a00f20d29b1b9f15a0a51e2b9b1c9e9b9fdd1c0b9a079d0e9e10176e997d9c399d31923e99759a6c9cfa9b8b998a99689ba9a02d9bd59a909cc49fce9e38a02da1101dd69fcfa4bea5e92585a039a531a7b7266ea139a4c0a5aa249e9d73a25ca47322959c21a120a3fa202f9ce4a0cba28720709c0ca1a5a245206b9cc1a046a2921f0b9c84a03ea2f81ef89b4ba00ba2511e8c9b07a0a4a1bd1d2c9b9c9f5aa1281d1e9b509f11a1cc1ce19a089fdea0601c9d9abb9eb0a00e1c349a5f9e7da0841bf299209e47a0fd1aa399dd9d08a0771a4699889da09f1a1a1599549d5c9fbf19e698239d119f6c19d198089ddf9e30197298e19cb39ee9184798c89c939eb1180c988e9c579e86189097519c269e2f180697259ccc9d2b18ee95fe9aac9c6816ee95fe9aac9c6816000006828a00460a000006828a00460a85183b1cad1d0a21f818271cf81d2622c7180b1cfc1d4b225f18931b801d60228b17681ac01c5d22f115e318011c59228b142a18871b0d223c131c179c1ac221a511fd1420194c201c0ca31090153c1cab00d4064b0e35153281058533081615cf8b838f0189701b1693b8952194422076964d993f981422d197619a379a54227f98c59b0e9c532211998a9cef9c6722b1991f9dad9d94229e9ace9d649e7222229bf89dbb9e0322fb9bd29e0ba04a22199cce9e90a0da21ee9abb9e95a047216d99699e2aa0c0207c96249eb8a00420f1979da0cca2bb21709c2ba4caa481240ea06aa4e4a47a22ec9f5fa49ea4201f35a221a8aca81e29589b91a5d3a620262c9a0aa1f6a2be207a9bf89e31a1dc1ea19ac59e16a1271e0d9b439f52a1471e1c9b249f4da1c91dce9b429f28a19c1db49b589f3da17f1d9c9b449f3ca1171d889b339f22a1e21cff9a059f07a19b1c699aaf9ebca03d1c209a8e9e9ca0ef1b179a509e74a0621b269af49d3fa0d11a029ac39d18a05d1aad99559d7e9fc4193c99f09cd99e37193299c69c9d9efa183299af9c749ee31837999d9c7f9eb318f698959c679eaa18a998879c459e80184598749c1b9e6d1804984a9ce19d44189a97289cba9d5718df961e9baa9ce515df961e9baa9ce5150000e50161068e090000e50161068e091d182c1b201de5207818c61bb51d38214718bd1bce1d4f21ca170f1b651d5e219a16281acc1c43214d15a518fa1b2c21021431163c1ad0209c111f1361180120790de70ce514791dcb03110233102b1c31868f8c26093c1eee8d54921a8e05212b9213972b954522bc94c9989c987a228f96619a399a6c22de97279bd69b692253981f9c7b9c4622ea988e9c0a9d4d223199ec9c8f9d22229d993c9d4b9efd21dc998c9d7d9ec521589ace9de39e8021b19af79d769f4021469b6e9ee19f2221539b6e9ee69fec20699b869e0ca0ad20279b999e1fa05720fb9a9f9e50a0fc1f4b99709d089fd81d7e945b99529b0c19d98bbe90d1943a12aa8a348eca932c10c8947e96d599eb169398189b189de41bce99609da29fc11c389af99d3ca0ef1cf0990c9e4ba0d41c0c9a359e7ea0b71c609a619ea1a09c1c829a639e89a0651c3f9a099e4aa0181cea99cb9d1ba0c01b86999c9df99f411b9a99829ddd9fe11aae99719da69f9e1aab99559d6e9f421a8b993b9d579f021a76991d9d2d9fab193a99149d089f8f19f798fc9cf89e5419d098f39ce29e3919e598d89cc29e1d19d598b69c919ecb189e98979c509e90186798589cf69d51182e981f9ca09dfd179e97e99b869dc417a3979b9b159d5c16a3979b9b159d5c160000a40ce31049020000a40ce3104902e1184a1cae1d83206f18b21c791ecf210618281b441d3a219e16111a7e1cf4209b150f19961bb3207e148d17471a6b20c311c11462181a20b50d5110f814681f2f094b084e12c11e9d016283c10f0b208188c38ea60bae20c68d1993678c5c21cd919096a894fa2158949698fb966a228695c899229987229096799aa99a6d223e97709b889b2f222698fc9b639ce7217398379cba9c9421d498989c169d49213199ca9ca59dfd208799279df99dcf20aa994f9d6b9e9920e899709da79e6320fd99b49d089f42203a9acf9d649f2320979a129ebd9ff01fe89a699e1fa0d61fee9a699e0aa0821f729ac49d6a9f9c1efe98e09c5a9e641d2497e99b959d3c1c8d96ff9af79cde1a9d96f69a069d4d1a4597c99afe9cfa194598719b8c9d301ac098009ce79d691a2b99509c579e8f1a0d99aa9cd39ea51afb98e99c179fc51a3399189d4d9ff81a5899539db09ff81a79997b9de69fa41a5799569da29f761a0a99309d689f0e1afd98089d249fcd19de98d19ce89e6d19c798b79cba9e3d19a598a89c879efd18a898899c699edb18a198879c639ead188398859c689e9b1828986f9c279e5a1810984d9cf99d1d18f497129ca29d9517ab97899b589dd5168997919b2c9dc8161299db9a219c70151299db9a219c701500000000000000000000a40ce3104902e1184a1cae1d83206f18b21c791ecf210618281b441d3a219e16111a7e1cf4209b150f19961bb3207e148d17471a6b20c311c11462181a20b50d5110f814681f2f094b084e12c11e9d016283c10f0b208188c38ea60bae20c68d1993678c5c21cd919096a894fa2158949698fb966a228695c899229987229096799aa99a6d223e97709b889b2f222698fc9b639ce7217398379cba9c9421d498989c169d49213199ca9ca59dfd208799279df99dcf20aa994f9d6b9e9920e899709da79e6320fd99b49d089f42203a9acf9d649f2320979a129ebd9ff01fe89a699e1fa0d61fee9a699e0aa0821f729ac49d6a9f9c1efe98e09c5a9e641d2497e99b959d3c1c8d96ff9af79cde1a9d96f69a069d4d1a4597c99afe9cfa194598719b8c9d301ac098009ce79d691a2b99509c579e8f1a0d99aa9cd39ea51afb98e99c179fc51a3399189d4d9ff81a5899539db09ff81a79997b9de69fa41a5799569da29f761a0a99309d689f0e1afd98089d249fcd19de98d19ce89e6d19c798b79cba9e3d19a598a89c879efd18a898899c699edb18a198879c639ead188398859c689e9b1828986f9c279e5a1810984d9cf99d1d18f497129ca29d9517ab97899b589dd5168997919b2c9dc8161299db9a219c701500000000000000000000000000000000da209416f417091aba26071b411ede218d28d91c581d0c246e29491b031d1623ab29161b851c1824a929711b211ca7245629b11a571ba12206296519ec19731e8628af189e19eb1a29276a183519c418a4254a1c201dee15f5266e252628ed180724911bae21eb2076a1a1a77ea4901faa907c9c7a244e19bc1c918b912719129d1b341110292916c09f6111e82a761ce1a201964f29122004a3d89c6f9c1f20bc9a71941e10950d87938b8e7f16f98daf979a9215129a9272973e9414187d928a965c92db175c92dc95df923c17f49133967d94d5167d945097dd9409156794ff9889977b12e196da982f95970c4f8e5d952295f199c7164b95a895d5a12b192a952a9976a5421cfb97eb9d80a68b1f6b983ea07fa5a620c19a31a36ea6de215e9ce5a2dda4a820bf993ba034a2c91da899299f92a0c11c9798999e2aa0421c5e99cb9e43a0531c92995f9e2ca00e1c6b99469e12a0df1bc098249e0ca09b1bbb98299e11a05c1b9398fa9dfa9fcc1a5e98b49d8c9f561a2598719d2b9ff8193498569de19ea4193498549dda9e6d1934983d9db09e3519c897209d8d9e07195d97db9c119ea5187b965b9c719d0e1838963d9c4b9de61756963e9c409d9a173e96159c0d9d1e17a295019c249dab163e96079c149d11170000000000000000da209416f417091ada209416f417091aba26071b411ede218d28d91c581d0c246e29491b031d1623ab29161b851c1824a929711b211ca7245629b11a571ba12206296519ec19731e8628af189e19eb1a29276a183519c418a4254a1c201dee15f5266e252628ed180724911bae21eb2076a1a1a77ea4901faa907c9c7a244e19bc1c918b912719129d1b341110292916c09f6111e82a761ce1a201964f29122004a3d89c6f9c1f20bc9a71941e10950d87938b8e7f16f98daf979a9215129a9272973e9414187d928a965c92db175c92dc95df923c17f49133967d94d5167d945097dd9409156794ff9889977b12e196da982f95970c4f8e5d952295f199c7164b95a895d5a12b192a952a9976a5421cfb97eb9d80a68b1f6b983ea07fa5a620c19a31a36ea6de215e9ce5a2dda4a820bf993ba034a2c91da899299f92a0c11c9798999e2aa0421c5e99cb9e43a0531c92995f9e2ca00e1c6b99469e12a0df1bc098249e0ca09b1bbb98299e11a05c1b9398fa9dfa9fcc1a5e98b49d8c9f561a2598719d2b9ff8193498569de19ea4193498549dda9e6d1934983d9db09e3519c897209d8d9e07195d97db9c119ea5187b965b9c719d0e1838963d9c4b9de61756963e9c409d9a173e96159c0d9d1e17a295019c249dab163e96079c149d11173e96079c149d1117ae927c04d80a660cae927c04d80a660cb2245a1c3420fc227928161ef91f8524a429211d361e9c23af2a831e25204125d02a171e651f2d25642a871c9a1da922df291c1bb11cc31d52299e1bad1cc5198f28061f72207c16182859230d25d21109286d264e289598f624048ef71883142b2198a606a6481eb69017a39a9279175210909b292659120ba06495ab2a01193da28297312b19200fa4d59c8f2ab82314a4b49e62278e22269cd89669275d0a319a05971f2826956e9b93953e28db948a9b0f8d3a276b91fc9bde8f37268293dd9a5191d42433964299818d67234697cd97568f0e22819500982394491f3d98f995f291491acc820091e290869d6c1b0990929483a3d81da494b699dea6ef1e0798d59d0ba801218798929feba53920179a8ba09ca4c41d0a9c69a134a45f1dc09b5da1c3a3c71d9d9a98a05fa2641df9990da07da1dc1c7d9abd9f2fa1a51c299bb29f1ea1a81c139a249fbea0441c5299dd9e8ca0fc1b4399aa9e75a0c11be798879e60a0671bc798539e32a0021ba0982f9e11a0c41a9898069ec59f5c1a8798d79dae9f2b1a7898b59d6a9fd01947987e9d059f98190b98419dad9e38199c97189d839ee1184b97e99c409e95180497a89cdd9d6718b996719c979df4171196379c559da517d1954b9ba99cf715d1954b9ba99cf715d91345115412d310d91345115412d31091223d1ec120de232f26181f4020af24af28de1e4a209c24412ac71e4420d824042b951e3f201225072be61d16203724992af01dad1fb222022a2e1e3220e1205e29fe1ed920d91fc6283720e121d61e0528c4201723251e8025938b4a19641ea021e2a1d8a0d11e9c1c99a2c99ec81da19cf39fde1f681d94a040983e2987201da20e9c2d2bd32278a34d9eab2b602448a33f9fc82a1624069d6c99ba2a5e1b1f960e91d82a20174f952592052a541783985393f8291b169b97e693d228c814159991962328a211ad99c196da25f5121298269860248f120396eb98332047122c947f96ce1b3d156d92c79687a0341c9395729c36a69b20fd98169f7ca8d02092982fa047a86220399a0ca123a63b20579cdda195a51720629c0ea2fda4451fb89b99a150a4df1ef19acba015a3121e119b85a087a2a51d029b8aa062a2971d909a48a00aa2341d6c9a21a0a4a1f51c8699909f42a1711c4299339ff3a02c1cbf98b69e8ca0821b8e98689e3aa0ec1a4698009e05a07c1a5598d79daf9f171a4298ac9d649fd8193d98899d399f921916986f9dfd9e45191698589dd39e2f1957971f9d8b9ed8184197ed9c389e98183f97e99c299e95183b97dc9c1a9e6b183a96b99c199e7618fc96979c069e9617fc96979c069e96177602180210035e0c7602180210035e0cf11e351e2e204b237a233f1f5c209e24a126de1e3c20b7240929ee1e62200425832a581ee41f3725322bde1da51f0425fd2a951d241f7a248b2aac1dfb1fbe23f129bc1d16204a235a296f1d2b20ec224c28a21bc71fbb23422593998f8c3c24d42220a012a0f523f31f1ea195a0b723dc9c60a0471cdf23a5a15f9fec2576244ba309a0af29872402a3f3a0802b6d25b3a11ba1012c3c250ca186a0f72b7d24909d12a0152b42232b9dc99f2c2aa222f39d49a083291a23fb9ca39fc1280f22689c30a00c285d22a39b5aa082251222609c0aa06321ad21709ccc9fb3936b21239a939f2da34d21f79a11a0bea5b221b29a9fa051a80622a39c44a152a91d221f9c71a154a8ab21f19b67a19ea5e520859cf0a15ba5a420989c33a216a55620cd9c23a2c7a4cf1f1e9c86a124a4bf1e819b23a182a31d1ee79abca0c5a2901dfa9935a0e6a1f01c439a1fa0aaa1c71c0e9a12a09ca18e1ca899d39f57a1531c5f99629fffa0081c2c99fb9eb5a05c1bb098b09e8da0f71ae398a29e5ca0ad1af2988c9e49a0961ad698549e1fa0371a8198019eb89fe6194898af9d469f9719d0974f9de69e27198997249d949edd187b970c9d809ed5189c97ea9c1c9e78187196789cdd9d3718e3965e9cb29d9b17e3965e9cb29d9b1700006a02b603ce0000006a02b603ce006e1db41eac202e24ec1ff51e6020d824eb23271f9e203e258c260b1f8c2068251029e61e6720f3255b2a3d1edb1fb225b82a7f1da71f3c25c22a641d242058257b2aef1cc01f3b25c7293d1c441f6425b728d416461c44253d2650978e12bd2574223c9e359d6e254c1dc19f239e212594a041a0ae983725ada242a0a61e9b2534a3ed9f3527862512a2eba0d02a2c267da0dda02f2cad25e6a0fea03a2c7125da9f21a1a62b04258f9ec2a0ea2a7324549f06a13e2a7e24089e61a03729b5235a9d71a09b289b230e9d6fa0dc2644238a9eb3a0372433231d9ebba0d1932023b99cada032a4ce22d99ca1a009a7a022a89c69a11aa93c231d9d88a18ba980225d9b58a1d6a77221299c9ca158a50721f49cdea122a5a520119d1aa2fba452205f9dd7a19da4a71f119d7da133a4e71e859c52a1c0a3621e5a9cfca015a3e71d239cb9a0bfa2871dc39ba4a08aa25c1d139b50a01aa2fb1c859a18a0b3a1921cf299b49f5ea1271ce0998b9f26a1051c8b992a9fdea0771b6699f79ea1a02c1b4b99ae9e7da0b81a5199689e40a0711a1299fc9dca9fe119d5989d9d559f83198a98499de79e20193b982c9dc49ee518b097009d9f9eca183197dd9c579e6c186b96b39c2c9e3618ae96579ca09d2317ae96579ca09d231700009e063008f20000009e063008f200a61c7c1ff5205124401d37206f21682583206d20e721b6253a231220d62176251b26731ffd20df2592281f1e1e20bb25fd29af1def1ff4259a2a2c1d9c1ff825be2a5c1cdb1e5f25d429d11a5c1ec825be28a012a51b4225c426c497b6149a25e223879ce196c0253a1baf9d019ad425a29ed19e419947267ea2849fa30cba25dda15aa0db201126f3a0faa07928ce257e9f15a1882b8a25ada05aa17b2c9025fe9ffea0272c47254a9f2ca18f2be724c59f49a1442b0125659e92a04f2a2424839ee5a02d293d248f9ec3a043270e24879f1fa1dd221024d49e55a12b94c323869d61a1dea353238e9da0a190a72c23419d7ea2d4a97323759da6a219aae822509c3da25fa7e721f89c0fa254a53e21a59d6ea22ca50921439d4aa2e9a48520e59c01a2afa42120c09ccda175a4a71ff49cb5a151a42f1f639c30a1c8a3711e579baaa0e8a2b81de49a83a07da2471de79945a02ea2ee1cfc992ba0e8a1a81cc899f89f90a14d1c9b99809f3ba1e91b58992b9fe0a0791b3d99c89e9ba0e71afa986e9e52a0771ad398259e19a02e1a8398e89ddb9fce195e98cc9dac9fb2193d98ad9d629f71192098809d2c9f3419ed97549de69eea18a997279d8f9ea0182297e79c509e64188897a49ce39d1a188897a49ce39d1a1800009404750694040000940475069404701cc81f2c2145245c1d9f2024229a250e1eb0208622fc25101f0520a621b42598213c1f0321c42541255b1e9f2019262c28571e6d2076264b29701d52208826ef29a41ccc1f8b267129611a7e1e6c269628e6137d1ca9269a261294d818c4269323b798e30bf0258317799c4095dd25da9ec79e879ac72571a09d9ff69ae3255fa005a0701309267c9f9ca04a243026419fe7a0832955251aa0f2a0852c2325fd9ffda0812c5725fa9fe1a0262cc42456a071a1252c17254f9ffda0092b7624f89e86a13e2adc24b69e5ca15f28b824439f38a1b0245324a29f54a1a21a4c244e9e4aa135a3a423e69f71a11fa83223519edaa128aaf622029ea1a183a9f6210c9ddea13ea6a8217a9d2fa251a543215f9d9fa254a51a21cb9c30a2dea47920019d0ca2bba430200f9dd1a173a4931fc89c85a134a4fe1e6c9c61a100a4981e4f9c32a180a3361e4f9cfaa028a3df1df29bbca0c0a2671dc99b8aa061a21e1d189b43a000a2a51cee9a27a0b5a1791c549af39f71a1231c179aa99f34a1ca1b0d9a779f11a1821be099139fcba01f1b4c99959e78a0771add98269e17a00b1a5998be9d829f60193998719d299f07191a984d9dee9ef518e997239db29ebc1800970a9d8c9e6818a9965b9cb39df416a9965b9cb39df4160000d4032c04c4000000d4032c04c400791cc51f29219524801de7204822c925331eeb209e223d260d1e7d204f222926eb1d3d20c62148269c20c31f7921d026db237c1ec2200e279925ee1c9a1fad260b274c1b231ea626ad274018d01c1626de267013781bd526b524a590b118eb2682202d99760b2c26b98e079ceb962b26399d999d92995d26fa9d2a9f1a9bbb260d9ee39fd69b492627a042a0e30c642635a005a14b243725469f0ea1b92acd244f9f47a1c22c9325679fe2a0c72ceb24dda041a1892c0f252fa0a1a10d2c08254f9faaa1e22afc2405a0faa1ec28e6247f9f78a186253a24b09e72a1f01ade23959dbca17fa27323859dc5a13ba80223a29dbaa2a5aa65233c9e4ea2faa88b22bc9defa119a5b821509f43a2eda46f21149ea7a249a56521ae9d2ea2cfa4b120709dd9a179a44020ee9cb4a140a4e61fd19cdea16aa4be1f9c9ce6a167a4931f4e9c7fa10ba4bc1e009c14a16fa3121e3c9bb5a0baa2701d9a9a5aa014a2cd1cd5990da0cda15f1cc799f29f8aa1171cb399bb9f5ca1de1ba199679f14a15c1b4499019fd8a0f71a1999ba9e8fa0741ae2985d9e4fa0f7199498139e18a0b1194b98cc9dcd9f4b193398989d7b9f2b191a987e9d389f14191a98559d069fdc1891973b9de59ee3181197a59c3e9efe171197a59c3e9efe170000b0040b07f0800000b0040b07f0808c1c7320cf218924261d35216c2370259b1d782195231626b71d0321f1223f26ad1d93206b227926af1d0820952186261c1edf1e2321c0261c208c1d282006274421181cdf1f7327cc212019f41d5727d2218110411ce526da1fc193a0180827fe185699da0b5b262796529cb3962d26449b519d47992226a89c569f519cfe26c59d6ba0c49d8826dd9fdea0b29c4a26a59f8ca03c93e12512a16da0682510252fa06fa1732b8f25c59f77a1692d1b2533a090a02a2d9b24759ebea0a92c5a24c09f0fa1f92b6f24469f46a15d2a7e244fa129a195271824999e20a151209623419e0fa2d8a2e0236f9d3aa2b9a89923ed9e2ca262aaec22309dbda11aa7f621a09dfba1d9a4aa21eb9d3aa295a46721399d8ba2f0a44e211e9d52a2d5a4cc20149d34a2bea46b20109d29a2aca43520529d46a2c7a40720e49ce5a167a4391f749c9ca12ca4b31e399c82a111a44a1e019c39a195a3e21dc49b04a10da3861d659ba4a09ca2ef1c579b4fa001a27c1cba9a07a090a10d1c839a959f2da1a11b049a249fdaa0051b9d99c49e94a0a61a0d99759e60a0331ab398319e29a0cd197e98ea9df19f77198798c49db79f31196798899d6a9ffc185a98479dea9e8f188998459da29e9f182798c49c7b9eea172798c49c7b9eea170000c70cbc0d4e0b0000c70cbc0d4e0b9a1b671ff6200d24981dd820de22cd25891de620e4221326661dc720b9225b26231d6b206d22a126e91cae1fb521d226d11c091f1f21fe26c31c8e1d1e201f27a71c941b631e1627ab1b6918cb1c7d265d1a1210011b68266a1745936218ae26a1886c99df118d26a898489c1d92a8268c9a769d6d97a426379c739edb9a6726939dd29fac9d8a266e9f66a0499f5126d19fc3a03ea0c2259c9e80a1d59c4d25be9f37a19d264125679f0ca2e02c7f25ae9eb5a0b52daa248d9f8da0432d7124399e27a1872c6324759eaaa1212b6b24d19e17a276286f24e79e8ca2a7206e24f29d7da20da507240ca18ca216aaa123d29f7ea206aaff226c9d5ba287a57a226b9dc0a1a0a47221829d0aa2afa46b215e9d6aa2eda45f21119e5ca2b1a4fc20e39d63a2bfa4c7208a9d96a2d6a4a0207a9d8aa2cca450204c9df9a170a46a1f429d70a107a4951ee69c3ea1a9a3301e679c11a16da3d61d2f9cf2a013a3711dac9bc9a0cea2fb1c5e9baca082a2cd1ce49a82a035a27b1cef9a4ca0dca12c1cb79a15a080a1d71b8d9ab29f39a1641bf899279fcfa0b61a9b99969e7ba0191a1d99359e36a09a190c99119e10a05619e198e39dd59f3d199698a09d419fbf18a197569dea9e8f18df970a9dd49e6c18df970a9dd49e6c180000d4061f08ed820000d4061f08ed82891c9020b2219724461dd120bf22b5258f1dcb209d2214263e1d822053226426cf1c1720c6219826331ce71e3921b326831b281ead20b226651a2d1df31f1927f7189c1ba21d1c274516b918a91bf32613126b10f019f326d68671908016cd26b094bf987a0b9d260199a99be79485260a9c7f9db09aaf26099dae9ed69c46269c9d719fec9d1f26709e4ba0a99e13268c9f85a0b69fce25f99e95a0eb9fcb25a09e3ea1399cf8246c9fd1a0aa27a124069faea14e2dec247b9e0ea2d02d29250b9fa3a1f72c98244ba031a23a2cb524779effa1b3295d24659ed7a17c24f323ce9ee5a298a44d24839df6a1d5a9fc22e09df4a112a88f22959f09a22ca40922229e7da203a50a22429f0ea37ea51f22eb9dbea210a59221629eafa228a54121949d7ba2cda4c720349d5da2aea48f20149d4ea29fa43e20c19cc0a138a4621f509c63a1dba3a81e129c55a1a6a36d1ef09b2da181a3f71ddd9bfda045a3ad1dbe9bd0a0dca23c1d8a9b8ba063a2c81c499b56a017a2691c579b3aa0e0a1341c299b1da0a5a10b1cae9ad29f4ea1831b069a629f00a1ed1a7a991e9fd4a0831ae298979e75a0f3197e98da9de19f37196198869d4b9fd8183898619dea9e97181698719df99eb8182c984e9d609fd9182c984e9d609fd91800006a02c1046a8200006a02c1046a824d1c7d2014228324891dc2205c22c5258f1dba207922ec25811da5207c220926461d6e2056225826691cea1ff421a9260b1be81e6821c9266919931dcd200f2717172f1cdf1e0d271014a617a71ba726590f2a10cc188d26db8f1e9387148a260c96a998658b8026e299da9be396af26439c569d769b64265e9dd69e549d54266d9ef09f019f2326a89e75a011a0f425959eb8a085a0d525dc9e05a1baa0ae25659e23a1cba05a25019f7da1139e1e25329db2a1b126ee24029e97a23a2df724869e86a2972d1725c09ec6a1b22c6d243d9e0ba22a2b6f24db9ee6a14b262524a8a048a289a43324ef9d62a2c3a8d123829d3da27aa5e222c59d1ba2ada439222b9e1ea298a4c8215d9d15a28ba47421c49d6da2cda47921939e8ba2c2a43321d89d8ea2baa4e2204d9d68a2bfa490201f9d46a2b7a44820b79ccfa15fa4901f449c71a10ba4e71ef49b31a194a3481e869beda01ea3b11d769bb7a0bea2331d699b87a07da2c61c879b5aa029a2891c599b35a0ffa13c1c2b9b0ca0a5a1dd1bdb9ab89f69a1531b999a659f19a1ef1a019a0d9fd3a0731a9999ab9e85a01b1a1d99589e54a0df19e698239e23a08a199898ea9dd99f66197598cb9d6e9f18193998a69d5d9ff8185a98759d939f02185a98759d939f0218000063021703fa83000063021703fa83c71bd91f52215c24a31c63201c229725801d0921de2235265c1dd420c8226d26cf1c3f2014229a262b1c4c1f5821c526f11ade1daf20d5261019501ce31fdb2602174619d01de72652110c15121ce5261f86d8896418b6263794aa96f4119f2639977e99ec915c26cd99339c78982926729b8e9d6c9bf425679c8e9e349dcd25fe9c989fb99e9b254f9de69f4e9f9225e19d85a069a08a25379e23a134a15b25e79ecda16da21625519e52a23ba31925c59ebea164a199241a9d15a14f247e240a9d6ca0332c1824649e90a00f2da7236ba13ea11d2ce7236d9ed6a15425c1234e9ee7a203a61324db9a68a11fa63d22e59c5fa127a3d021d09dfba174a4fb21c59d8fa2bca4502209a00fa31aa570228ea046a2a1a45321b29e0ca2a8a4e3204b9f24a29ca4aa20309e11a251a45220749ddfa134a40220169db1a124a4691fda9c9ba10ca4051fd29c5fa1c8a38d1e9f9c21a149a3091e5a9ceca0fca2891d3d9cbfa0c3a2291d119ca1a07fa2e01cad9b6da033a2801cf19a3da0dea1431c9c9a04a080a1e41b439a929f29a1711bae99f39ec1a0ad1a32998c9e7da0241ae098239e33a0ad19d398029e0da06d19cb98dc9de19f5a19ad989c9d769fdd181498339de69e7e18e998de9c389e5217e998de9c389e52170000f2002003d8820000f2002003d882f51b2a2077217224d81cd920b4228225451df220d522dc252a1da5208e221b268f1c4520162268264b1b271f7221a226fb192d1ee620a226f218151d7e20ca26ca16f51af91eea26d2123515321cee263d86118a8b19df26019377952b15e226419714994092b026fd981a9cb0986726499a829d5f9c0826f99b719ed99da925ac9ccd9f579f6525249d51a053a028256b9d8fa072a0f224be9da6a0e6a0c724c29ddda021a19424c89d0ca1c8a17224809fa8a12aa35724469fa6a20da38024f09da9a1d596fc23359d2ba1582227238d9e2ca193215c23e0a069a14a9f7e23ef9cb4a1d6a41c23689d85a170a34222659da4a1f2a31e223f9e29a27fa40c22ae9e23a278a4af21a49e46a292a49b214d9ecda2e9a4c6210b9ed8a210a58821b39d98a2d4a41621789d8ca2b5a4a9202f9d3ca278a44220b69cdca130a4ae1f879cafa116a4431f2c9c9aa1eda3c11e079c60a196a3521ebf9b1da134a3bf1d929bd2a0e4a23e1d999b95a085a2ed1c559b53a00ba27f1c0a9b0ea0ada1211c6d9aa39f49a1821bac99299ffca0091b5399dc9eb1a0971afa98859e7ca0561adb982b9e42a0ea19bb98f29d0ea09119bc98cc9d8a9f4b199698839d109fc8185298589d059fd1185298079dea9e2d185298079dea9e2d18000037821c813702000037821c813702a01c9c1f2d216024ed1c2721eb22b425291db8208322d025d61c8f203022c0255e1c3520cb21f625bf1bce1f9b213d26711aab1ef3204e26cc185f1d67208b269416ae1b731ea1265f122518b21ca526a805170a8a196c266b925b951d124226c296bc9929921126c398f99ba498d625199a149dbf9bb125809b269e669d7425929c9e9f6f9f4025329d4ba02fa01225699d74a07fa0c224639d66a0c1a07124d19db0a02da152240b9e2aa1b3a14e24ae9e58a133a23c24339e57a163a20724f09de6a054a277238a9ec7a105a21024ef9dcfa1cda18323b29c37a173a29022099d38a1c9a21f22029edda127a3b122849f54a27ba4e52237a0a4a251a4a42262a013a225a4b8217c9e62a29ba49421009e05a3fba4d1211a9ea5a2b5a45821c49d27a262a4b920e09d12a251a46320dd9d0fa246a42320789de7a12ca4bd1f249db8a1f1a3361fc09c6fa1aea3af1e699c2ca150a3361e459cf0a0f8a2bd1ddb9bbba095a2421d829b7ca035a2d21cdd9a34a0cda15f1c8e9a05a07ea1221c389aac9f32a1b71bf999429ff2a0221b8c99d59e9ea0901a4299769e5ca0351af898069e0da0b719da98ae9d909f5219ad98499d209f10196798019da59e9018d2978e9c169e32185597209c999d60165597209c999d6016f61198174e194215f61198174e1942152f1c7320dc215f245f1cb3204e2226257f1cb32094227b25421c95207722d825fc1b752057222d26661be21fb82160263e1ab01e03217c268d18fe1c2c2095269016771b561e72263a129916991c48261c8cfa8975181e267294d296098ceb252f97779a2497c025f498c49ca99a9425549adf9ddc9c5a25c19b909edc9d1d255f9c439fd89ee324ca9cde9fbb9fb624219d33a085a06c243b9d77a0bca03f242b9d8ca0f0a02824199d93a01ea1e6235e9d76a039a1b523829d69a063a19e23df9d78a09da10a23ce9e17a177a2c322ec9d4aa19ea2ab222d9e95a1c4a287222e9e1ba2a5a39722479ee2a1c3a309229c9deea106a4c921709d37a251a4f1212d9de0a14ca4a221b89dfba13ea4a221419e5da2a7a4ae21fa9d7fa2a7a45221979d7da29ca4d420929d50a263a46f20299d1ea24ea40a20e79cfca140a4981fbc9cd2a11aa41a1f789c8ea1eca39c1e2a9c3ca172a3481ec89bf2a000a3ac1d599ba9a099a24a1d349b67a02ca2d61cad9a09a0bea1561c709aac9f55a1141cfd99369f0ea1811be6990a9fd4a0161be199c79ea7a0e51ac599909e75a0871ab7994f9e36a0201aa999f89d00a097198c99bb9d8c9f5e197a99759d319fea18b398279dda9e93182e98b29c689e72172e98b29c689e72170000fe8cb58f25040000fe8cb58f2504871b1e1f2c211724d71bf41f60217824221c11209c21e5242b1c3c20f2215725221c97204522e6250b1c3e2014223626c11a981f53218a2614190b1e9d20ba26d0150d1c431eb426f30e9415c41a6d26128fe19058150b2658957d988092aa251698bd9bf99958256c996e9d999c2d25729a909e319eec24bf9b439fb89fc224529c27a052a09624f79c42a083a06624269d82a0e9a01824799dbaa00da1c323809db7a022a11e23889db7a07aa18822839dc3a08ca1e621aa9de2a0bba18621dd9d09a119a28521999e4aa1b2a27221099e55a1a2a22d21fe9efaa02fa320211a9e0fa1d7a20f21609d34a104a31021819d60a1e6a33c21689ed2a11ba46921ce9d13a22ca4ae21f69d6da28ea4ad21cd9db6a2bba48b21aa9d87a2a7a43c218b9d5fa285a4f720aa9d7fa296a4ca20a29d8da29ca48020929d72a287a43320fb9cf8a13aa4951f809c75a1d2a3b71e169c17a145a3fc1dd29bd3a0d0a26d1d5c9b7aa050a2e01c4e9b37a0dda16f1c079bfb9f8aa10f1c9a9a7b9f23a1701b379af59ecda0c21aa999779e82a0231a2199259e4fa0b119cb98029e26a09019a698c39d08a043199998a99dac9f09197c987e9d689ff3186498679dfc9e9d18e297219ddf9e9b18f497e19caa9ed317f497e19caa9ed3170000eb90ff9225020000eb90ff922502831af31eca2071235e1b4b20a021c424751bb81f6b219324891b0120cf21e724be1b5f2020228c253a1b8e204022f0255f1a4920ff2130261d19271f98218e262f17221d6f20b9266c129a195e1d1626538cf18ab4155f25a494ba98a895c8244a97fa9b2b9b40249d981a9d909cdb23d099aa9df79d8423949aa79eda9e8223629b4b9f429fc323e39be99f15a0a3235f9c18a08ba08c23a39c58a0b3a02f23ba9c56a001a1b722e09c7da01da11e22069d70a04ca1bb214b9d98a088a16721949d98a0c5a1eb20b19dc4a003a27220e69dfda07ea255201e9e19a17aa22120d19deda07ba22520d99dd4a074a210209c9d07a1b3a2b820029e86a199a3d421fa9d58a266a47d220c9e31a3f2a4a122bd9d09a3e1a40b22669d94a2a5a44b217b9d8ca28fa4f820769d96a27da4ae20179d72a27ca46c20f09c20a24ba41920d59cb7a103a48d1fad9c5ba180a3c41e7c9c09a119a3171e7b9caaa094a2771d7f9c54a01ea2ea1c7e9c11a0bda16c1c3d9c8f9f51a1051cea9b1e9feda07c1b4b9bc29eb0a0f51a479a839e85a08d1aad993a9e5ba0311a3d99039e2fa0d619f898bc9dce9f6e19db98819d7a9f0419e398689d369fed18b898379de49ea0189398249de39e9e182798c99c5c9e0d172798c99c5c9e0d17000020889b87680e000020889b87680ea01bf91d1d20ff22601a9a1e90207123bb1af41efe207024471b871f8921e424ff1ad71fcb213225521a0d20d721ab25f7190820a3211e26a81935201f221027c8182a20fc215f272915b81c0c20a52614902892570d53257f97bf9c3e9cde237199f39e419f5922609a989f12a0de21209beb9f22a01a22389b949f15a0ee214c9bd09f0ea0ba21999bda9f22a07f21109c05a08ba06421799c1ea0bca04b21c89c48a0f6a01f21d99c6da028a1ed20009d60a05da1b520f69c87a091a1b220c19c70a07aa14720ae9c58a09aa11c1fbb9c65a0a6a18e1ec79c5aa0cfa1141ede9c75a0f0a1381e1e9d95a01da2be1e559dd2a0ada24c20da9df0a110a495216e9e2fa3f5a4d922719e95a35ba52223169e68a30da5a622fc9d0aa3d5a4f321f79deaa2ada480219d9d88a265a4fb20529dfda112a43820e99c86a186a3561f5b9c22a11ea3851e229cdaa0a9a2e51dce9b83a035a24e1d6a9b1ca0b6a1bb1cf79a939f49a14f1cce9a279f0ca1ca1b7a9af19ee5a07b1b419abc9ec4a0021bbd99709e8fa08d1a6799419e64a05d1a1699119e32a0081ad698bf9de49f94198998559d4b9f1d193698069de79ec0180c98de9ca89ea9181898d59c7a9e8318b897da9ca49eb3185997c19c879eac175997c19c879eac1700006d8d7a8d468600006d8d7a8d4686cd198e1da31f87228b1a171e1320c6239b19ae1d1b20f5235519011e622040249e192d1ea0208524ac195a1ebc20c3248219721ec920f4249a191020cd211726821bd821112419287b19d1207c232828858db48da2158c24c799e6a026a1701bf19b4fa236a32c1a359b01a10aa2ac1ca69aad9f53a0ad1f4b9ac89e4f9fe1208b9ab39e4d9f1021f99a7b9e2b9fe520889ba69e5e9fa720e09bca9e12a06820059c119f58a03a203e9c609f43a0a51f589c849f70a0411f709c739f77a0ab1eb59c1f9f89a00c1e949cb19e41a0c81c169c559d0f9f0d1a139b9d9c659e7414029be79cb09e5c10e29af29c3e9f1f170c9c8d9eaea0b41d359d95a15ea395219c9e26a485a50c24be9fdaa475a680242ba063a403a6ac23cc9fafa32aa5a922ea9dcba2a5a47721f69ccca1efa36520d19c4ba131a3ad1fb89c05a1e8a2d81e809cc4a07da22d1e3c9c7ea01ea2a31dd39b3ba0faa14f1d549b1aa0c8a1fc1ce49ae19f90a18a1c849a849f39a1191c0c9afc9ee5a0711bba99799e82a0bf1a4099f19d2ca0311aea989b9ddb9fb4199f985a9d949f63198298359d5d9f3d193c98079df99ed1180a98c89ca99e8518a297879c419e55187e97519cdf9dd517ca961d9ca49dc017ad954c9bff9c1f16ad954c9bff9c1f165c818f90d58f300b5c818f90d58f300ba119f31c8a1efd21b119061dba1e5d23c419be1cbe1e47231d19341c1e1e56230b18c31a511d69235d1649199b1c4a234814ae174c1b23239113a315c519f023660d351353171524508c908c9e167528f49ad5a0c89c10230f9a0da121a0eea11c97269e569e5c1d1b97ba9c159d6e215f98ec9c1d9dc822c9992d9d229daf22099a769d9a9d72229e9a299e8c9e1b22349bb09e929f2e22e89b419f2ea04e22569cd09fa3a00022b69c38a0e5a0f9219e9c4ea00ea179218d9c30a000a1d3200b9c019f29a06f1f029ba09df19e2f1d6b9ad19c259e471b7299649b239d1e178798ea9766996599e799c58bbb930a9ffb9c6498c699149c7a9ed4a2eda48322dea0aea541a7cf2504a076a5fea61d25499ea7a327a5dc22a59cdaa1eaa31821339d99a17aa385205d9d45a124a3fe1fb39ce7a0bca2351f679cb2a072a29c1ee99b67a019a2e31d6f9b05a0bba12c1d4b9bab9f69a1c71c129b679f2ba15f1c099b1e9ff7a00f1c8c9ab09eb8a0a21b4e9a6c9e71a0161bfb990f9e46a08a1a8f99cf9d0aa00d1a4e998f9daf9fa9192199559d509f4d19fa983b9d349f1219ac98129dfc9ecc186798e39cd99e8f182a98be9c8e9e6d18d097829c799e261842975f9c319e2e18d4950a9bd09c1616d4950a9bd09c16160000fa809180ba080000fa809180ba08e918a11c2d1e5b215119ad1ca01eaf222c196f1c5a1e91229e18f91bc71d8c220218ad1ae41c8d222c164f19481c5122a4143518981ba621d51247169d191020bc0eab11d415ec1ae0020109be0fcc14b1809a018c0d4319c08c37904085c91f01930e97819443227096e099799858230c98449b649a362393983f9c129c3d233399cb9cea9cfb22d8996b9dcb9d10231c9ac09d1b9e9c22bf9a269e109f6422939b889ea09f4b22449cf99e1aa01722c29ca69f82a0f221ad9cbd9fc2a08f21b09cad9faaa03121689c5f9fc8a08a20ec9b609e5fa0671f3597359ded9ff11d9394609d8da0d91dbf9a64a3b0a4ba211a9ca69c869c75a2e8a154a619a85426caa00da82aa90d28789d1ba25ba494217d9c509fa6a13c1eb09a3a9f44a1f61d5e9b3f9f82a1af1dbf9bba9fb3a1ac1dac9bb09f69a1761d039cb29f67a11d1da29b949f61a1de1c239b5d9f3ea1921c939aef9ef5a0291c529aaf9ed6a0bf1b639a6c9ea3a0301b169a119e62a08e1aeb99ce9d21a00e1ac399829da59f9c198799239d049f1b196899e59cd59edd184399c19ca69e9c183e99ad9c889e87180099a19c6d9e7d18bc988c9c4f9e4c185e987f9c309e3f181f98689c009e0e18ab97559c019e2418d6969c9b419d3916d6969c9b419d3916000074011005310500007401100531054218571b211da9209e182e1cf31d47218d180d1cf91d69210e183a1b7f1d5821de16591aec1c462105159918e71bd820fb13ae1577191b20bf10d9107a16a31dff0a5809d511711c5604ed824e102c1f35895891f9051f22bb9071958b92082362943c985897db229995c899be99c3224797f59acd9aa1223098ac9b269c80228398539c999c4d220099a99c1a9d2c227b99fa9c9d9d0322c2994b9d169ec821309a9a9d879e8f21979a0b9ef39e63211f9b349e8b9f0e21db9b889ee19fec20f19b7a9e0fa0ae20089c8b9e1ba05920a59b5d9e05a0fa1fb29b779e29a0c61f0e9cca9e83a0811f849b9d9e2fa05d1e14980f9c5d9d2c1b728a1291389427121d88b58c7c927e0f5394c19688995a163798659ae49cb11aac99929ddd9f691cf299279e5aa0a61c719a5c9e8ea0a41c949a7f9ec4a0811cd99a889ec9a04f1c919a3d9e75a00e1c279a029e30a0711bb899cc9d1aa0131bbf99ab9df59faf1aa899859dbb9f461ab399659d939f0e1a8699569d729fc71978993c9d359f99193c991d9d1a9f56191e99119d0b9f3a19e098f89ce39e0019db98e69cc79ee018b198ae9c959e8a186c988c9c569e4b184098569c019e191808982b9cba9d7717bc97229ca69d67171997c69b389d50161997c69b389d50160000900db6109a020000900db6109a02eb186d1cd01d7520c218eb1ccb1ed7212818b51b9e1d2121db16221a8b1ccd20fd151219a21b852075144917bf1915201911b4132f17241fcc0dc70f75147e1e4a0a810c6c135c200402818416116121cb898390170d2922c38f9694c78d91225593dd97a694c9221b952999f197be222696489a95999d2225975e9ba49a7922bb97ed9b039c22225798359c679cde21a998639cb69c76210d998f9c049d19216699e39c839daf20c899069dc79d7120e0992b9d3c9e28201f9a6e9d7b9ee41f2e9a8b9dde9e821f319ac89d3e9f481f869ae69d769ff51e059b269e0ca0ee1e829b6b9e40a0ee1e069c979e65a0d61eaa9b569e17a0561ea399619d279f4a1db7972e9cab9d091cba964a9b319da51ae696f89af79cab1903983c9b4a9d3e19c198809bab9d6f191999239c149ed4191999ae9cd09e361a1299f89c2b9f651a3e99359d7c9f8f1a66995b9dc59f8c1aac997e9df19f701a9499729dd39f4d1a6599519d9c9f111a3c992b9d599faf192499f39c189f4f19f898e99ce49e2119e498c89cc99ee018d998b59caa9ebb18d198ac9c869ea418c698a49c7a9e701868987f9c599e30185198619c199ef11728981d9cce9d7617da97af9b809d96160498879b5f9d43168c98189b959c03158c98189b959c031500000000000000000000900db6109a02eb186d1cd01d7520c218eb1ccb1ed7212818b51b9e1d2121db16221a8b1ccd20fd151219a21b852075144917bf1915201911b4132f17241fcc0dc70f75147e1e4a0a810c6c135c200402818416116121cb898390170d2922c38f9694c78d91225593dd97a694c9221b952999f197be222696489a95999d2225975e9ba49a7922bb97ed9b039c22225798359c679cde21a998639cb69c76210d998f9c049d19216699e39c839daf20c899069dc79d7120e0992b9d3c9e28201f9a6e9d7b9ee41f2e9a8b9dde9e821f319ac89d3e9f481f869ae69d769ff51e059b269e0ca0ee1e829b6b9e40a0ee1e069c979e65a0d61eaa9b569e17a0561ea399619d279f4a1db7972e9cab9d091cba964a9b319da51ae696f89af79cab1903983c9b4a9d3e19c198809bab9d6f191999239c149ed4191999ae9cd09e361a1299f89c2b9f651a3e99359d7c9f8f1a66995b9dc59f8c1aac997e9df19f701a9499729dd39f4d1a6599519d9c9f111a3c992b9d599faf192499f39c189f4f19f898e99ce49e2119e498c89cc99ee018d998b59caa9ebb18d198ac9c869ea418c698a49c7a9e701868987f9c599e30185198619c199ef11728981d9cce9d7617da97af9b809d96160498879b5f9d43168c98189b959c0315000000000000000000000000000000005823b6167b185c192c28381c421f2e225129771db11e4024df29d71b9c1d46231f2a531bb81c6924152a3f1b291c87248329df19a3190a21be281d186718041c472711173718c3186525cb15861814148324ad189c1dc4102725a521d025dd8e9921f224ec28c896a6a414a804a9ef19f99b8fa0d0a09407f41f2f93ae1d6c97661fb1192129dc1a419c1215cc2ace1dc7a398984928252275a5189bdc9ae61ec79dd89a5f93b813bb950000da930000059bac902996358f098e5485d4968284000000008598000000000000f494000000000000af90000000000000538b000000000000e58e0000000000006a96000000000000229d00004a8f01956ea3a6184998479c1fa6a51ec8988a9fd4a6d320be99efa101a7c6215c9b98a387a55d21ca9ceaa127a49d1f649b47a0d6a2a41d2c9bb59f1aa1ef1c93990a9f63a0621cfa99e89e64a03d1c199a9a9e56a00e1c8d9aa29e49a0d91b66993c9e2aa0611b04994e9e2ba0191b8398fc9d17a07f1a7b98e39de09f4e1a7198aa9d949fd81993988a9d3f9f9319ae98769d289f4a19b6986e9df49e31192298419dcd9ee5189697039d549e9d18b2967d9cb79d05187b96639c939da4177a96489c789d3e1774963a9c4f9da916fd95189c529d87169496269c439d321700000000000000005823b6167b185c195823b6167b185c192c28381c421f2e225129771db11e4024df29d71b9c1d46231f2a531bb81c6924152a3f1b291c87248329df19a3190a21be281d186718041c472711173718c3186525cb15861814148324ad189c1dc4102725a521d025dd8e9921f224ec28c896a6a414a804a9ef19f99b8fa0d0a09407f41f2f93ae1d6c97661fb1192129dc1a419c1215cc2ace1dc7a398984928252275a5189bdc9ae61ec79dd89a5f93b813bb950000da930000059bac902996358f098e5485d4968284000000008598000000000000f494000000000000af90000000000000538b000000000000e58e0000000000006a96000000000000229d00004a8f01956ea3a6184998479c1fa6a51ec8988a9fd4a6d320be99efa101a7c6215c9b98a387a55d21ca9ceaa127a49d1f649b47a0d6a2a41d2c9bb59f1aa1ef1c93990a9f63a0621cfa99e89e64a03d1c199a9a9e56a00e1c8d9aa29e49a0d91b66993c9e2aa0611b04994e9e2ba0191b8398fc9d17a07f1a7b98e39de09f4e1a7198aa9d949fd81993988a9d3f9f9319ae98769d289f4a19b6986e9df49e31192298419dcd9ee5189697039d549e9d18b2967d9cb79d05187b96639c939da4177a96489c789d3e1774963a9c4f9da916fd95189c529d87169496269c439d32179496269c439d3217601fb514b118d40e601fb514b118d40e8327fc1ebb20722369293b1f892062247f2aa61e19205f24f82acc1fe420b325152bb11d241e29254a2a4f197b193d21362aad182b19e6199029ca181c1a1c1707290a1e781f93150429a2211923079ba2277525d527eda098259d2091239da0bc10c3a652a62a9d6d9f1ea432a3139bb99cc19feb9da196ed18a4121a297e145da3fa0ca32b7121b0a4099df829dd2417a6c39e209d23239b9bf2988f13db97b28f00002f1900003c90e3888c18f38c00000000391d000000000000571a000000000000cb18000000000000c2150000000000009b15000000000000bd17000000000000291a00000000138f949c491b539467985ea510212998299d8ca81d215d992aa086a8b421719a2fa1eaa65420e29b14a2c3a5d21d419c04a283a48b1d4a9ca1a1eba3e61deb9bdea0c2a2801df79a46a0daa1d41cf39ab39f41a1741ca69bcf9f40a18f1c099b8d9f11a15a1cc099fc9eb6a0f11b6699d69e8fa0801be398869e6ba0111bd3987c9e51a0c51ac7985a9e25a08c1a9c981c9efe9f261a9d98fd9dda9ff3199d98e59db49fa4197798b49d549f53193598679ddd9e0a19be971e9d869ea7185f97e99c479e57182a97c69c149e39180297879cc09dac174396399c959d3c171396869bda9c83151396869bda9c8315c31a1715ae174a0fc31a1715ae174a0fbb24871fa5214424282833201e214325c629df1ffe2028253f2ba11fbb206025ad2bb31ef41f4025712b821d1f1f0f24c92a2b1d8e1e0822132a191df41e35205b29cf1d771fcf1d1929811f4121151b6428a0208c220b0a6e23f516ba19f596831e9da059a010956421e7a1429d14944d9d6f9d7995580b2f9c51166c28ab1d31a293995d2bcc24a4a44fa0242b2d2679a4f0a0eb29e2258c9f47a0dc2a7924819f4a9f962b7c23909d3c9e442b9c21cf9b499d9a2a52208d98689c1629931e53945c9c3e275c1e1d956e9c51259a1e0000349b1024ad1c00003d9565214d18000037945f1f8219fd86d896faa1a71eeb96ad9cc1a75a219d9b98a030a9cb21b39a78a1b5a83d21b39be8a1dfa67f20569dc3a26aa62420099daba2b8a55f1f669cf9a1b9a4121f589c49a1d7a3741ebf9bbfa0d6a2991d2d9b93a07ea2701d139b6fa056a2171dde9a3ba0f7a1dc1cb399db9f7da1741c8699739f0ca1141cfd98ef9eb9a07e1bcd988c9e5ea0ea1a72982e9e28a04b1a6c98f69df19fd9195998d29db29fa6196598ad9d7e9f5f192e98939d569f15192298749d1f9ff7186d972d9dca9ea7184e970c9d759e69187297fa9c5a9e67188797e39c269e34187096af9c319e141807977e9ce39d571707977e9ce39d57174802b181ad0015054802b181ad0015054220db1e6f209d23ef2400204a21fd244e28f51f1d211625622aaa1fd6206625c52b511e1f209e25172c151da51e3125922b891cce1da524b22a651cdc1d35244d2a561c5a1eca23c8295b1ce21e6823a628971ad61ea723bd2564999f9218245c24f99f789f09247120a1a08a9ff323e49b36a0b11a032484a37d9e9e25dd2410a526a080299325e0a40ea15f2bbe25eaa3bea1292ccb2598a154a11e2c0d25bd9d0fa1342b7424d89dd1a0732a2024439fcaa0e9292b241a9e67a0c3280823f39ccaa041285523779ba9a0d925af22b79b0da0d721c021909cfa9f1d949a21c299789fd3a479212b9b64a073a65122089c24a179a8b6223b9dc6a1aea96c227a9c0da2a0a8cf215f9c12a246a6ff20f29ce3a2f4a5c020579dbea281a55120419d8da215a5c01fa69cf0a185a4d81e139c58a103a4141e9e9bdea024a3571d8e9a63a03ca2c01c649a34a0d5a17e1c2e9a2aa0bea1651c0d9a19a094a1461c9d99b09f4aa1bd1b6799399fe6a02d1be498f59ec1a0ab1ae798d49e98a0791aed98aa9e68a0281acb98699e37a0ec197f98119ed59f76194798c69d629f3319e397699df89eee18bb97469dc79eaf18a6972c9daa9e8518c397099d549e4818a296839ce69dd51731975e9ccd9d2f1731975e9ccd9d2f170000a900f101fb810000a900f101fb81661d2f1f162128243a211620de206b258125ae1fbc208225a428da1e72208725bb2a0a1f8d204126152cff1d0820e125092c411de41e8825b42be61caa1e74254f2b8c1c2b1f9825492a1a1b6e1e6025f4283b17901c79252327d7957d15ae251824559df99a9425281e06a0569ed725039c76a08199d62567a416a0661f222631a55ea0bc265b2690a444a1d92a832605a240a10d2cd42559a28ea1532caf2574a13ea2f52b9525ef9f3ba1442bae24a3a077a1992ad024dc9ee6a07d293e24ae9e0fa1de284324689eeda0c926f223a79ffca0da23b523399fe9a02b9a5523e39de4a0eba40d230f9e24a1e1a7cb22299dcfa142a92d238e9d39a2d2a99e226b9c70a27aa8f421e69c46a211a603216d9d73a2cea59420c59d94a275a53e20e39d37a2ffa4871f9d9df8a18ca4f11ee99c9ca11ea45c1e709c0ea155a3a91d3f9cdda0f6a2611ddd9bc3a0a0a2331d629b74a058a2dd1cc49a39a0f1a1741c0b9af89f9ca10e1cea99cd9f63a1a91b9e99759f1ea1531b7e993a9fd8a0041b6099ea9e9ea08c1a7499919e5ea0391a3b992b9e13a0b219f298c69d9c9f56199d98669d0d9feb183098469de79eae18a997199dc29e94182a97e49ca99e35187f96b29c9a9eba17cb96789c179e5817cb96789c179e58176a00bb02db048d846a00bb02db048d844f1c6c1f342125244a1ea3200d22e925952178200822f22543254f20f221b625bb280a20f0203626dc2acd1e2f2035260d2c391e18205a26312c981dcf1f5b26fc2b3d1c2d1f0a26f92a871aa81e1926b229d412dd1b5625f327799705186226fd246b9cad959326bc1f289d1a99f825af9d3c9f579976266da44aa0fc8ca426cca4cba09b207a265ca360a1b2283626eba067a29e2b4026eba15ba2992c362692a0b4a1392ca9252ea083a1052c0f25b9a0e7a16a2b4325849feda05f2a5224ad9f60a176299524809f58a12227492456a075a139232f2400a0baa15d9418246a9eb2a11ba49d23aa9e46a231a88a23519e0ba34faac923539e81a3a9aa5d23719dbba219a8e6217b9d6ca2bda51121229eeda2c0a5eb201f9ef3a286a5a620679d88a21fa51a20e49c20a2c2a47c1fdd9ceca196a40d1f929c67a13fa4351ead9be9a083a3901d499bb5a0f3a2451d779a87a088a2d51c799a62a034a29e1c4f9a30a0dea1441c1c9ade9f7ea1d21bbc99839f1ea1611b6e990b9fbfa0c11a1b99aa9e72a0511ae198509e3ba0fb197a980a9e02a094194698c89dc59f68191a98a29d8f9f22190f988f9d609fee18c3975d9d1f9fd2189d97339dc09e6c18f996f29c7c9e23187097c69c259e2c187097c69c259e2c180000c2004d04c2800000c2004d04c2809b1c101f07211a24751d04215f22fc25d81e9620462239264b212a20e0212c262b25002089218c26c628501f2a210527d62a761e8020f026e22bc91d5420f526072c741c831fba263d2b141a731ed626d9292214b61cdf264d280491f619d826902563985e156d26da1dec9c8293e626ca9ee19f4d9c8426f6a22ca0889a5b2644a38aa09193532687a18ba14124b3260da161a1d729de2554a193a1c62ccc2515a103a2c92cc9254ca1fea07b2ce0249aa1bca15e2c322533a06ca1682bb22404a0e3a1352a0525c99fbea18e28ae244ea0c4a1e6247f2449a0c8a1e21a5124da9fbca151a4db23bb9fb8a15fa82a231a9f8da283aa3a23739e25a361aa0223e29ce2a21ba7ec21179edaa2e8a56721209e43a302a63021349dbaa240a570200a9d73a2fda415202f9d37a2c9a47e1ff89cd4a167a4d61ea99c9aa11da47e1e759c42a1a4a3041e679c18a132a3b11d189ce5a0eaa2671dfa9bb3a0afa2031d779b74a04ba2961c319b52a0f4a1651ccb9a22a0b5a1101c5f9ad99f66a1881b429aa09f3ca13b1b119a3c9ff7a0b21a8e99c39eb7a0421a3199569e44a0b8199798cf9da59f2c196d98829d339fc71842985e9df89eb5182198389dc09e62182197039da89e05181597899cee9d0f171597899cee9d0f1700009d0084029d8000009d0084029d80d21c7b1ff6207424041e282113234a267f1e2f21d9227f263e1fbc20e1226d26c02094202722f4266e241420cb216227bc279c1ed82081277529381d00207e27df2ac01b9a1ef826ef2ae318091de826cf29c710f31a382734284694ca178927d524469a750c44276e1dca9cdf952127ab9e509e5d99752760a1c49fa79a1627bea0c3a0249d0a27a9a0cda04d8dfe269da0bfa1ad24cb2596a02aa1652b5e25c7a0d7a1212dfa2514a07da1232d332587a1f1a1d42cb625eca011a2482c672533a0f1a13f2b102594a017a26f29d52440a0f2a1c525542401a036a2571b3b24d59e72a204a40524b19e33a29da81c23dc9e22a395ab8d23869e45a335aa00238b9ed0a217a6e1217f9fe4a2a6a57521be9e7aa30ea68921f89df0a280a5d020c49d8fa208a56b20299d01a28da4b41f0f9d01a292a47f1fff9c2ea28ca4591fcb9cdea149a4cc1e879c7aa1eba3311e019c04a15ca35b1d649b94a08ba2d41c6a9a47a01fa25b1c179a1fa0d2a1001ce799f49f91a1a31be8999e9f3ba1221b71992f9fefa08f1a3799da9eb0a02f1ae398759e6ba0ae199598299e37a06c196298d89d03a011194e98b69dca9fd2184298919d879fe2184c987a9d339fad18df97459d1c9fae18ab97e29c8a9e1a18ab97e29c8a9e1a180000ca0020055d820000ca0020055d827d1c4020a4218f24d11dae21ea23c825dd1dda2120244826471e5821c9238026451e39210d234d27391f3320312247278a22951e1a21292752258e1d53206c27c1271e1ce41e17287e287818c81c77278328e310291b4727a2262894de1754275f22e599588ced26b316829cb697d026609d519ee8998e26b09e14a0f59c0e277d9ed9a0009e94261fa00ea1819b3f2684a0dca002143e2630a14da13926cc2577a1b6a23f2c7526d3a0cca1d92d7e2570a1c1a05e2dcb2421a0bca0d62c6824e0a094a1202cbb242ba0b3a1b92ab224b2a1e5a1fe275324709fd5a18c20fd23cd9e84a21aa31524ba9ed1a2fca8d7234f9fa6a2aeabe822f29cb3a28fa85422909eb4a244a5e321979e9ca2eea45221f89d08a352a53521919db4a22ba5b820859d82a201a562204c9d61a2eda40920669d63a2f6a4df1f079d11a29ea4201f909cd1a161a4a81e429ca3a137a4281e099c67a1eda3c21da39b0da13ca3521d559bb3a0caa2c81c4e9b71a035a25e1ca89a25a0c2a1dd1b739ad39f5aa16c1b089a549ffca0c91aa599ee9eaea06a1a2399909e6fa0ee19c7983d9e20a07e19a998f19df19f27199698bf9d8f9fda186898839d4d9fb61874985e9ded9e55180d982d9dcd9e4d181498d39c889eeb171498d39c889eeb1700004b045d09dc0000004b045d09dc00641c2220552186240e1e8b2190233926f31d682183235c26201e23219a23af26451dc820ea220127ba1d3720202218271e1e6f1f6e214d273720b41d8220b8270122f11bd11e0d286d236818c91c90273f24a010871a1627b922ad90f416f726711de2980a0c9e26a4950b9c6e929726329c769e92992427cd9ca59fcf9c9e26ff9d64a0839e7d2600a0e2a036a0452695a060a1eba01626b79f34a23a9ca32579a0d1a1fc275b25a9a0efa18e2d8925d19f3ca1412ee02417a1d3a0702d8e24ca9f82a1032dac2441a0f9a10e2c94246c9f7ea2fb288f2421a057a22b221124fc9e88a274a4d323bea0cea24daa822395a1afa31facd523f69d87a357a7f922859ea5a204a5b8211d9e7ba2e5a43221f19dbca237a51e21839ebca206a5e220439ea4a2f2a48220f49dd1a2ffa45720c69dcda2f8a42720869d46a2bea44d1f5b9dbea14da4a81e229d7aa107a4fc1d9b9c4aa1c9a3a31d539c1ea165a3341de39beda012a3d61c819bd0a0c0a28f1c099ba8a074a25e1c069b6da013a20d1cec9a36a0bfa1a01bd49af39f69a1041b419a689f17a18a1a9599c79ea3a0d5191299539e53a05c1907992d9e21a01819d098019ee79fe018a698cc9d6c9f92180098719d1e9f78182598189dae9e40182598189dae9e401800007502040619840000750204061984c31c9720de21ae24e91d4f215f233126a81d17211e236226b71dfa20d622c026011d67203c220527711c6e1f6b2120272e1cb31e21211b274c1bb31d29209d271e1a121c521e5327cb1a9a16301bd5262d1af989d416db26571835953a12a62617098599f58b6426d596539c299770265c9b8f9e119cb626079d449fb79d3326c49d2aa0319e5826339f7aa07e9f242639a0daa033a00b2654a0e0a0f2a0be251da069a11f9cf7248da05ba15129d5246fa026a2692ee1245ea0b2a1692ec6244b9ff7a1a82dc82411a0c0a2d22c0a25939f5ca2542a7824989f90a2772535248ba121a393a21d2404a091a39eaa1a240b9f58a2b3aa79229a9ed8a253a558229a9ec0a241a5b621f79f94a399a5fa21569ed0a20ca533211b9f12a370a50d21fb9ddfa22ba5c4208c9dafa2e7a471206c9d77a2d1a41820079d1aa283a46c1fa19cb2a11fa4bf1e539c92a1fea3381e289c4da1d5a3d91d199c2ba179a3911dec9bfba02ca3011df89bc7a0c5a2a41cd59b8aa06ca25c1cba9b5ba024a2161c6f9b37a0cda1d11bef9a01a07aa13f1b249a889f24a1a61a7f99209fdea05c1ad298a09e89a0ad199598ef9d00a0f3185b987a9d5b9fad183f985f9d049f56181498559dfb9e4118da97189d3b9f9618da97189d3b9f96180000b6008c058e830000b6008c058e83931c83202d227d24ce1d4a2158233d26a31df22012230e26b31dfa20082364267d1dc820d522af26f01c4820302208275c1b131f9b2120276119ec1dd6204f278017f31c7e1f792726141019421c4127890f280a0817122732905795f50bd226e696009a1d920b27a099569ccb982c27189cde9dc99b6326e19c239f8c9d51264e9e6da02c9f5826779ffda038a03626759f24a1a9a0d825939f38a1f8a0b825839f26a10ea14725e89e72a17d96d624a79edda1dc2af8247f9fe2a22d2f46258d9f17a2e22ee624ffa086a14d2d33243ea0a1a21e2cb124b9a03ea204283a24a79f6ea275a1ca230d9f5fa2a5aa1123239d3da15ba85821f09e4aa287a4ee212b9f84a2e1a4d021989d7ba2d2a49321239e73a2c6a42c21649ebca2e9a4f620069e02a312a5ee20c99ddda2ffa49f20979d82a2eaa44320239d35a2b8a4a51fae9cd6a15ca4001f469c7fa104a44a1ee69b22a179a39b1dc59bdaa00ba30e1d9e9b9fa0c4a2a61cad9b7fa07ba2511c769b5ba045a2211c5f9b23a0f2a1921bf39ad89f9aa1001b959a649f55a1981a199a169f01a1191a9b99979e9ca0bc192199529e5ba05b19e498139e19a02619ad98e89df39fed18cf98d29d8b9fba186f98b59d899fb6186098589d8f9fd9176098589d8f9fd91700009100ea02d48200009100ea02d482fe1bad1f442156242f1d18211f235126b71d572164239e268c1d31212323bf26151db620c022d126721cc11fb321f0260a1be91dc22008276b19441c2e2018279716581a2b1ef326e2110617ac1b1227c486a410ac19d1265c9467953a129c268f97b49933926a26d1995c9ca7983526ce9bdd9d649c0126d29c569f789de025459d0ca0939ec925ad9d5fa0219fa125629ef4a05fa09025ee9e5fa1b7a15425689faea124a2f6248c9e58a28fa2dd24849fb8a1439a6e243d9ed6a15a2cfc24a19fb4a19a2f2b25569e79a1cb2e4a24659fafa1e42c5f24f99dcca11129ce23ad9f5ea35ca33124b09f9ca374aaf023d69ed9a23ca6b622129e61a29ea4e521509e1ba310a5522205a05ba38aa5342298a05da214a51521af9e4ba2eda4c9209c9f8fa2e6a4b020a99e83a2b5a47320e29d2ca28ba4ea1f719df1a14ba4521f299dd0a141a4fb1e179db2a11fa4941ed69c5fa1cda3ee1d839c21a15ca3861d4c9cf2a019a3161d1f9cd4a0cea2cd1cbc9ba6a080a2921c2a9b75a028a23c1cdf9a2fa0c2a1c31baf9ae79f67a1541b0e9a349fe7a0851a9499c89e97a0241a2899579e4da08319fa98139e1ea03519e798e79d03a01e19d1989d9d8b9f9c184098249df99e33186e99ec9c7c9e2b176e99ec9c7c9e2b170000b400e50282830000b400e5028283071c4120b4218f24aa1d7921d0232226511d60213a232626401d01212b235b26dc1ca120ad229e26191cdd1f15220827761a751e72212527fe18bf1c5b201227cf15e0196a1e3227b611f313c51b1b27e78c738abb181a277a94d0955d0c02277e97389a8095ca264e99c29c159a91261c9be69d319d40265e9c479f349eda25129d52a028a09e25ab9dbaa08aa055250b9ef2a0dda01425779e11a117a1ef249f9e3ca192a1c3243e9f8ea123a2852499a09da2a7a25e24d89f75a2629c7024369f54a23e2a8124839f59a2382e002479a0d4a2382d362441a274a29f28162439a1eca21ea6f2232a9f2ca1a9a78621b69e99a17ea3b721e69e4fa2a1a40e22de9ea8a29da4cd21bc9e54a2dba45321da9d15a30ea5a621689ef8a21ba563210f9edea204a5fc20de9de3a2f8a49c20769d8ca2b8a43320ed9c15a260a47f1fa89cfaa134a4151f6a9cdda11ca4b01e3f9c9ca1eaa31d1e139c5da18ca3b51de79b0da134a3321de69bc8a0cca2c11cc39b83a04da26f1c879b3ca0eca1111ced9afa9f7fa1931b3c9a7e9f2ba1f31aa3990e9feda09e1a3899ce9ec4a03a1af398719ea0a0d019c698169e48a06b19e998df9da79f3a19d098979d289fb8189298699d319f9218e698499d129f2b18e698499d129f2b1800007486e087ef8200007486e087ef828f1c4920c6215e24651dbb21df231e26411df420df22e5250e1dbe20a622f125af1c7d2030222026421c3c20e1216e26191bfc1e3a21952660197b1d9220aa266d16761bea1eb9264c119515e31ba1268f8cd39084179626439476985c8c7126f397a29b9d972d265d99ef9c089bf925479a039e129dc5250e9c179f169e82251e9d1ba011a06625a69da1a098a026250e9ee4a0c1a0f024279ef0a0fda08c245c9e29a163a15b24de9e8ca13fa26524f89ff8a194a25e24519e7ba170a217245ea089a0ce9ee822429e05a290210e24199ec5a1f4289c23029e52a2c81d1f234d9bdca0c2a55621719e65a232a4b12216a12ea2faa35122be9f14a273a4d221ad9f79a2f8a4f621b49ec3a2dca4c521a89e32a3f0a49921609ec9a2caa40521009e8aa2a1a4a520229e6aa29da45b20339e38a273a4fb1fc59d12a24fa47a1f519deca134a4051ff49cb5a110a4841eae9c78a1bea3f61d719c31a149a3971d109ceda0eda2111db79ba6a08ca2ba1c1b9b5ba027a2481cb89a18a0d2a1dd1b569ad89f71a1721b1f9a6e9f19a1e41ab399f79ec3a04e1a4a99879e78a0fa19e398169e23a07f19b198b49db79f14198b98669d3e9fdc1864981b9dc59e6918c897a59c269e1c188297459cf19d1c168297459cf19d1c16190570114f13e105190570114f13e105341c3f20ae212a243d1d18212423a525811cd120c1228225981cfe200b230026611cc720d4223a26991b48203d228226691ab41e1321c0268a18271d1b20ba267915e819ea1da526560f0614d51a7d265c8f1594731247269095299a729537263f98aa9c0d9bef250d9ace9d959ca825159b7b9e1b9e7225459c869f919e2825bc9c12a0879fe124349d5fa036a0b224899d9da0d2a07a24c09ddba00ca14824b59df8a04ca13b24639dcba046a1fc23bb9db3a077a1d723169ea7a03da155233f9e86a0f0a1882288a101a2e3a12823379e6ca17aa17d22c2994da031a1e9203b9d1da279a34722c49ec3a1fca27821de9dfda13ca44a21bd9d20a24da42a21bc9ddda138a4e120129e1fa287a42721969e9ca2ada46621049ea6a2b8a41621e39db6a2caa4a920d59d96a2a7a440206d9d71a27ea4b21f109d52a270a4431fcd9c14a258a4f51e909cd0a127a47e1e4b9c89a1f2a3091eef9b19a16ea37e1d989bd8a0f8a2fb1c5b9b8da085a2a11cdb9a31a00aa22b1c969adf9f8ea1bd1b199a539f38a1091b479a1f9f00a1ae1a639af59ed0a0861a459aba9e90a0281a0c9a6a9e5aa0ba19eb99129e16a05719a599be9dcf9ffb1885998e9d5f9fb018ac98349d249f53187398da9ccb9ed5177398da9ccb9ed5170000ba8781891b010000ba8781891b01891b1a1f03217f23ef1b69200b22a724601c9720732231254a1ca32091227925a31cf620f02212265f1cb820c2229026d91ab91fbc21d526bc18d41d9420e2267b15431abf1d8626e905c50a05193026b992a1977d8ce12568962a9b0c99a325ae98359d2a9c5e25159a5f9ecc9d3125089b0d9fd39efc24279cb59fcf9fcb24d29c5ca05da09b24549d7aa094a06e24be9dbea0fea05324e09deea01fa1fb23ec9dbca070a15223f89dbfa089a1bf22059ecaa099a14022209ed9a0ffa1cd21fc9e46a154a2972130a0aca199a2ac21099f8aa1c7a28a2158a145a15ca24521b6a017a1f9a1cd20739eada120a312210c9ea0a1dba306211b9faaa109a4f220269e02a248a42921879e45a29ba43721a89ed8a2d5a45621409eeea2e0a42721ef9dbea2caa4e920d09dcda2c4a4b020c89df5a2d8a46720af9dcaa2c1a42a20249d45a27ba47e1fc49cc4a120a4941e669c58a1aca3d21d289c07a12ca35a1de39bb3a0ada2d61cc79b70a031a2691c919b3ca0dea1111c109bf79f82a1781b979aa09f4ca1e61a1d9a1e9ff4a0481a72998d9e98a0b319f798489e59a07719ca98029e2ea02719b698cf9d03a0e7189898b89dc89fd3187598809d4c9f90180c98439d1f9f6c181d98169dfb9ef8171d98169dfb9ef817910f241681181810910f2416811818104d1c5e20bd21c5230e1cf62011231e25181caa2096221f25131c7c207b224c25491cf020f922dd25031c17210a234d26bc1a9920b12287260f19091f6421c526a415991b611f5026970c2f0b5a197125c192de98d495ec240997219c689b67246d98479d459d2b245899e99d2c9e07243a9a5f9e6a9e1a24fb9aee9e419f2b24c99b919f14a033244d9c16a049a02224b29c64a0bea0fa23cd9c76a0e4a0c923129d98a032a145234c9d93a04ca1a922a89dafa07ba16e22f09db1a0bca11f22319ecba0eea16c21599e0fa122a2e5206c9e39a152a26b20b69ed9a07da2e71fa69efca050a21020cd9ea6a002a2871fa09df3a0caa2c51fbb9d27a1f8a26220be9dcea11da40e21339ee5a2e3a4bc21549e6aa329a5eb210b9e4ea326a5b521f19d09a3f2a41a21e69de4a2cba4ad208a9dcba2afa44e20399d85a27ca4f41f0d9d20a247a4611fe99cc5a10ba4c81eca9c6ca1b7a3381eb69cf6a019a3651da89c87a087a2c31c979c3ea004a2511c959c00a093a1f41b589c9b9f3ca14e1bf19b439f07a1f91af79a129fe1a0a11a429ab29ea3a0331aae99629e6fa0d5192799059e1fa05c19eb98c59dec9f1019da98939d7e9fc218c9984e9d169f76188d982d9d029f5a182d98c69c679e08172d98c69c679e08174e101e16a61857124e101e16a6185712b01c1d209421a323871bbc1f57210a24041c0120b221a824111c2b20fd211125ea1b70205b2280256a1bb820ce221226121bf6201723e2264a1ad4201c239927c417151eac20ae261e8d6292980ddb249997c49d359ea52316993f9fa59f3322af99c49fea9f5222779ac09ff99f3a237d9a7c9ff09f6423ee9a5c9f959f4523509b9b9fa29f2f23c39bb49fdd9f2123239cd59f42a01c23ae9cfa9f65a0f622c39c26a095a0a722eb9c45a0d8a02322fb9c6ea053a1ac21f69c6aa04fa180210a9d85a080a12121fc9c72a0a3a17220cb9c41a095a1501fbf9c28a0a5a1801e9b9c1aa08ea1bb1dc39c22a0c5a15a1d2b9d5ba00fa2fa1d5a9dc9a0eca2221f2c9ed4a151a49d20539f15a3f3a4ea21229ff0a35ba57422699ec8a329a52322629e5ea3fea49e21289e2da3d1a42b21cc9db1a27ea47a20519d0aa223a49d1fa39c7ba1a5a39c1e499c2da130a3f71df49bcaa0a1a2561d8f9b71a023a2c91c5c9b0aa0afa1411c089b959f41a1b71bb79a439f1fa1641b719af69ee0a0d61ae0999a9eb8a0561a9199679e92a0241a2a992c9e64a0c719ec98d79d1da0551983986b9d949fe1184798269d289f92182f98fd9cda9e7c182598ec9ca89e4e18df97d49cbb9e72183997be9cb99e35173997be9cb99e351700007887398751810000788739875181a71a4e1e5220da226d1bf01ee32008249c19011e7020f423a019a11ed5206e24171aec1e3121b924141aa41fb2212625151aa820a5221e26031c0a23c4242628151b622295242f286093189cab9a00245b9b95a25ca32c1cac9bfca1cda2dc1d0f9a12a05da078209099679eb39e4621f799539e3c9e0e231e9a489e699e6e23659a6a9ea99e6223569b599e109f9a23c39bdb9eba9f8223309c3c9f35a006237a9cc49f76a05622dd9c13a0afa0d0212c9d21a0dda02c217d9d0da0f0a0d320bc9dec9fcba09c20c09df49f04a11b20129d889ff4a07a1e1a9c369e58a08d1c739b579d739f9418d29aed9cd59ecb12059baa9c4f9e1b18b69bf09d3ca04c1c889d49a102a36c20529f23a4b1a54123ec9ffca49aa6b723369f62a4e9a5c222ee9e96a323a5a621949d84a281a49720fa9cd5a106a4bf1fea9c61a172a3b31ecd9c12a1f0a21c1e839cc1a09da2a91d229c73a046a2201d879b4aa006a2c81c079b21a0d2a1721caa9ac79f75a1011c679a4b9f23a1561b269ad29ec3a0b21aa199539e5fa0361a4a99eb9d20a0ac19ea98a69dbc9f4919d998659d759f1b197198309d2c9fc9183798e49ce69e5418d797a69c879e2a188c975d9c249eb317ec962a9cd89d53170896849b279da6150896849b279da615c38cde924593bf0bc38cde924593bf0b5819ae1c721ea6214b1a6c1df91e9923f919ee1cfc1e6523f018321c391e27231e18a01a6b1d182362165219c21c15236d155e174d1b3c235f1175157d1954243e0ca915bf1b35285a95f79c1b936f246897bc9d789c3a21c193f1998c99c822c096e49acc9b12248598009cfb9bd22380986c9c249c9623f498d09cad9c9223f899589dc09de623c49a139e709eeb235d9b989e539f93231f9c309f14a03e23519ca29f4da0ea229e9c37a0aca0a022e59c7ea039a14a220d9da8a075a1e921fa9c73a052a14a21d09ce29fc0a04220b79cd59e76a0d51e9e9c649e1aa0871d079c9e9cee9dfa18259be199e19c9991b09b268aad17319d78997a8c8d94e19d119d85a18fa3e21f41a0f6a5bda77025fda0bba5e1a7c1242c9e3ba4c8a5c822659ef0a2eca468213a9ee3a11aa46320a19d5fa160a38d1fbf9cfca0dea2aa1e0c9c9da08ca2fb1dac9b44a022a2241d8d9bf89fbba1991c699bc19f71a1551c799b5c9f2da11c1cfc9a069ff5a0931baf9ab19ea8a0d01a289a399e74a02f1aa999ea9d32a0e1196e99ac9df39f80194c99679d919f1d191f99429d4a9ffa18dc981b9d089fb6189d98fe9cf19e7c184a98d39ccd9e6318fd97a89cb09e011879977f9c589ef4172b96229bfc9ccd152b96229bfc9ccd150000fa808d80d3060000fa808d80d306a018741cfc1d1a2183190a1d151fb4227419ca1ce51eae22c7181e1c011e98220418c31a051d64221e163d19351cd6217214ce16451a2f20a91018139916841b1105f00a6f10601563040c097711111ce187908b3910a221d2919495ce91592346956f992c980c24d897279be999e72387982a9ca59bb6232a99be9cb29c8f23ef99469d3a9d4523429aa69d1d9e1723c49a149edf9eda22799b849e999f9122129c2a9f19a054225c9c8f9f57a02c22929caf9fb0a0a6217a9c04a0d6a05721819cd09feba0ff20bb9c22a046a1e6204d9d65a075a1eb20fa9c19a03ca17f20b09ccc9e6ca0ee1e1c9af49d2da09a1dc19bf4a08ca23d201f93901d4f203aa3109f6ea25ba43521fba1c0a82eaac028f49c6ca33ba5bf218d9c7fa038a2db1ea99b15a0a2a1311e4e9bf39fc5a1ba1d919bf09fa8a1581d159cf49f94a11d1db29bc09f6fa1b61c7e9b769f47a1621c099b249f1ba10c1ca79af59ef7a09c1b749a9e9ebea0fd1aff99269e7ea0581acf99e09d33a0d719c699a59de69f79198799449d389ffa185c99119dee9eba184699ea9cc09e77181b99b89c959e5718f298b69c749e4818bf989f9c4f9e17186e98859c2f9e0c183998759c059efc178097649cfb9da617ef960c9c8f9d2e16ef960c9c8f9d2e160000dd009b041d010000dd009b041d01bf18e41b751d8b209918561c461e79217a18221c291e722108185c1b901d5e210d17601ae91c272172155c182d1b6420471393142f18361ed80d440f7b14a51c390c010cae13c11f7002a18b9c115122698d1e93298876237f921097ff9488230a953599b69857239496619a549a2723a597819b759b0b235e984d9c3a9cda22dc988e9ca69c8c222099d29c189d49229499229d8c9d05220f9a659dfb9db6214a9ab49d6e9e7a21e19a0f9ec39e2321a09b499ea29ff420379c8f9efc9fb0206b9ca19e13a05b20a89c7c9e08a01520939c719e1ca0c61f649c609e27a03b1f1d9c8f9e63a0d71e069ce79eafa0a01e329c439fe5a0161efc99099d719ed11be38c0893a0964513d885c08a3390d80c709453966e99f015c098349c399e961aec99f49d33a04a1cc99a8c9eaaa0711c0d9ba09ecba0671c819ba49ed5a0311c7b9b8e9e9ca0de1bb89a2e9e53a0501bdd99e29d1fa0de1ae399cd9d07a0721ab199ad9df29f141ac2998c9db29fde19b3997b9d959f97198c994b9d629f64196b99359d2a9f1d1931991d9d0a9ff518f798009ddb9eb918e298de9ccd9e9918ae98a99c889e4a185f98879c499e0e1830985b9c009e9817e297349ccc9d1f17c9973e9cae9d1917bb969e9b199d1316bb969e9b199d13160000cd0d7a110e020000cd0d7a110e022c19cb1c001e8e201f192a1d231fc8212118cc1ba91d0921b916371aa01ca920b415ec186f1b32200b1473160819b61e511098135116021e580e9b114415ec1f0d0d280e0d15e321af02d7855614e322808b7a91660e4a234a91fd95a48e232355949798fa9408236b95c2991e98cc228296dd9ab8999f228997879bc19a6a2233980b9caa9b11227d98479c389c99210999789c8b9c37214b999e9cdb9cd320b299b09c4a9d5520279a079d919d1020769a159dfc9d961f829a589d719e331f849a6b9d9e9eec1e779a839d0a9fb61ea99ac79d7a9f8f1e029b139ef09f961e8d9b419e1da0821efa9b7b9e5fa07b1e169caa9e8aa04d1e719bbb9e96a0281e8599c89dbd9f4e1d8497879c199ec51bf796e39b6b9d171a5c973a9b3a9db718cd98259b2b9d8618ee98ed9bc09d1f19c998909cc99eb719ee98f89c3d9ff0194c99399d919f1c1a8299719de49f411ad4999a9d0ca02d1ab599779d0ca0051a7199539dc59fcb193a99309d809f6d191299079d3c9f3219e598fa9c139ff218cb98e29ce89eaa18c198c89cc79e8318d198b19ca29e4f18ae98a69c949e37185f98819c6e9ef2173d98709c2f9e84171298349ce39d1e17de97f29b999d56168a97c99b659d3616a6971e9bda9ceb14a6971e9bda9ceb1400000000000000000000cd0d7a110e022c19cb1c001e8e201f192a1d231fc8212118cc1ba91d0921b916371aa01ca920b415ec186f1b32200b1473160819b61e511098135116021e580e9b114415ec1f0d0d280e0d15e321af02d7855614e322808b7a91660e4a234a91fd95a48e232355949798fa9408236b95c2991e98cc228296dd9ab8999f228997879bc19a6a2233980b9caa9b11227d98479c389c99210999789c8b9c37214b999e9cdb9cd320b299b09c4a9d5520279a079d919d1020769a159dfc9d961f829a589d719e331f849a6b9d9e9eec1e779a839d0a9fb61ea99ac79d7a9f8f1e029b139ef09f961e8d9b419e1da0821efa9b7b9e5fa07b1e169caa9e8aa04d1e719bbb9e96a0281e8599c89dbd9f4e1d8497879c199ec51bf796e39b6b9d171a5c973a9b3a9db718cd98259b2b9d8618ee98ed9bc09d1f19c998909cc99eb719ee98f89c3d9ff0194c99399d919f1c1a8299719de49f411ad4999a9d0ca02d1ab599779d0ca0051a7199539dc59fcb193a99309d809f6d191299079d3c9f3219e598fa9c139ff218cb98e29ce89eaa18c198c89cc79e8318d198b19ca29e4f18ae98a69c949e37185f98819c6e9ef2173d98709c2f9e84171298349ce39d1e17de97f29b999d56168a97c99b659d3616a6971e9bda9ceb140000000000000000000000000000000093218315cc18d6172028441c391f512297291b1e0b1fb0241b2a971ce81d8124932ab51c431d8f25e5293c1a691b0f247a2865178b179f201726bb151f16fa188b234d15a81517093c20c814b6160492311e0e166d1abf95951f1e1ec31eb79c3923ed241b27a3a4f7a160a151a4f29f34a319a11aa3bf9c06218899821ae3996e27a81cff294e2086a01b11a02bb823a3a5ee9c81292926b9a689a3c6a30928a6a60e9ff7a8c32003a62ca106aaa02237a53ca201a70525d1a5fca21ea7532572a691a212a9b324e5a58aa176a7172405a571a1ff9d1a2477a482a02ea4092319a17ca0d3a3c421df9fcc9dcda4d420599a169c1ca47920e798739ad8a5d71e0c9ad29c79a78c1fa6991aa111a8b621419ed5a311a8b421099beda2fba45920fe9a53a15da3b41e3e9cd6a058a3251e6c9b58a0e2a13d1d8a99219f9ea03d1cd499bb9e64a0e41bf299a89e5da0b31bd49ac89e6ca0a71bec997d9e67a03b1b3599719e51a0d21ad598399e46a0821ab7981a9e27a0241ac298e39d08a0b519d098b79daf9f8919f498aa9d989f46190f99899d739f05195f98769d1e9fc218b497169d699e6018ed96959cc49dab17b7967c9cb89d4a17d3965c9cbe9d151701975e9ca19daa160f97659c9e9dd816e7963b9c5a9df116000000000000000093218315cc18d61793218315cc18d6172028441c391f512297291b1e0b1fb0241b2a971ce81d8124932ab51c431d8f25e5293c1a691b0f247a2865178b179f201726bb151f16fa188b234d15a81517093c20c814b6160492311e0e166d1abf95951f1e1ec31eb79c3923ed241b27a3a4f7a160a151a4f29f34a319a11aa3bf9c06218899821ae3996e27a81cff294e2086a01b11a02bb823a3a5ee9c81292926b9a689a3c6a30928a6a60e9ff7a8c32003a62ca106aaa02237a53ca201a70525d1a5fca21ea7532572a691a212a9b324e5a58aa176a7172405a571a1ff9d1a2477a482a02ea4092319a17ca0d3a3c421df9fcc9dcda4d420599a169c1ca47920e798739ad8a5d71e0c9ad29c79a78c1fa6991aa111a8b621419ed5a311a8b421099beda2fba45920fe9a53a15da3b41e3e9cd6a058a3251e6c9b58a0e2a13d1d8a99219f9ea03d1cd499bb9e64a0e41bf299a89e5da0b31bd49ac89e6ca0a71bec997d9e67a03b1b3599719e51a0d21ad598399e46a0821ab7981a9e27a0241ac298e39d08a0b519d098b79daf9f8919f498aa9d989f46190f99899d739f05195f98769d1e9fc218b497169d699e6018ed96959cc49dab17b7967c9cb89d4a17d3965c9cbe9d151701975e9ca19daa160f97659c9e9dd816e7963b9c5a9df116e7963b9c5a9df1164e178e00511112004e178e00511112006c27141e862052233d2a5a202c219b244e2b2d20f620b5249d2b051f0b200a254c2b501b561bd524492ac50e19094b21dd29ee148016af152b28041a9d1be897c327281d961fea99cb2513204b20099d9e1c06218222d69ff81521204d22fea3f89f1aa152a3c2a05d9eb4a193a2e09b7d9cd39fe99f068be726061e882a651edfa12919422ce62660a5259fbc29532934a72ea4c3a46928a5a6baa337ad3024e1a51ba43ea93b2502a356a3f2a4412446a494a1eb9e872300a481a029268c2252a25ca0142543228da0c49e9b180f22d59e4d99e8274622999deb9a912b7524429ea197f02af824f498429914a4fd244197dd9d03a8fa23259b25a066a96222bf9aaca114a9ac218d9ce6a244a8b01fb39c23a3c3a6431e0d9c2ea2b5a4cd1d069c79a1c8a3951d039cf7a0f1a2561d619b6ba038a2cd1cf89ae09f7ea1391c7e9bd19f6ba13e1caf9bf19f5ea14f1c649a5f9f0ca1e41b7b99ff9ea7a0381b1199b49e8ca0d41a1999979e65a08c1a14997c9e4da0351ad898519e2aa0f819ae98309e0ea0a119c298099ee29f7d197298c49d789f191927987e9d1e9fdc18ac97499dc79e7e183897f79c709e27181997d29c459e08187297a99c0f9e59175c96559cc99dea1643967e9b079dbf1443967e9b079dbf14f313bc0c9e116703f313bc0c9e116703da24191f2f213924e32882208e21d225d02a49206121d925f42b2d1f9520d725ec2b6d1daf1e64251e2b4a1b4f1cc323aa2a711b581ce720202a371d591e4c1f85287e1db41e0d1a40284b1eee2059980e26291d1320e19d7714928cbf14499cb69a2e9c969ecd95c91d8a9d8998361f83a0d49d1d11e5211621b21def299e21a4a6c59a562aba2584a6bba1282bf52792a547a2c42a1e2676a324a3afad34244ca506a4eea91e2447a472a301a55a24eba2baa2f0a432247aa225a31fa380237da2d0a121a5b8232ca15fa01c1a022312a155a1571a4624aca033a1a92a4325a29f919f9327a4244998259c08a69722e39a8ca0a4a930249b9d38a28eaa3e23879cbea21ea9d721a99ce5a2eca76d209a9d89a386a7cd1f4e9d21a35da6461f9c9c29a2e5a4dd1e869c78a110a44d1e949bd8a016a3811d169ba6a0aaa2381d569b83a0b4a2111d1f9b60a04da2da1c179a16a0c8a15e1cde99b39f41a1f11b5499259ff3a05f1b3199d99e93a0a21ac398699e5ba0241ab298319e2ea0b619ae98059e11a06819a898f49d00a026196298b49db49fcb1859988c9d4a9fa9180e985c9deb9e6018cc97219d9a9e11189e97039d729e0518e497f89c639ebe17ef96c09c5c9e7c173a977d9cdd9d1e173a977d9cdd9d1e1700000000358000000000000035800000d21e1a1d021f60213e26c220a8217e25a22959207d21ab25822bd71fe620ba25452c1a1e002098255e2c281cf81d45250f2c061bb11cec24592b991a951cc124ca2a371adb1c7524252a161a2d1d6e24e12858153f1c0e24d725d69a2895ae24a4244a9f949e1225fe1fee9e019d1d25d39f229f061db32553a4b19d74250227aca76c9f6e297a271ea7eba0022b602688a68aa2402c622666a475a2082cc225d0a10fa2a62a56253ca178a1282ac2247da1a0a1642ac224a19f3ca114295124e59e1ba1c4270a24e79d72a1b8251124719da8a0b8219623e69b2aa03c9dbf22d99b399fe0a4e021309ddca0d9a73023fd9d01a275a95623e89dcca26eaaa722db9ceaa20fa9c021289d2ba361a7e120299da9a3b4a69320769d22a3cda51520379db2a24ba5761fa99c41a2eea4c91e2b9c89a148a4c81d289c06a168a32f1d849ba4a0afa2b91ca99a51a012a2571c269a28a0cfa1221c579a2fa0bda11c1c0b9a00a0a9a1911bb599a09f41a1211b51994a9f08a1901a4999209fd1a0581a4199ed9e99a0021a2499a89e50a09e19cc98419e0ca046196b98e89d959ffd181e98919d239f9f18e797709d009f6318dd975e9df89e62180c983e9dab9e08184497d59c299eb6177997859c0e9e20177997859c0e9e201700000000228000000000000022800000cd1b6b1d501ffa2165225a20fb20d0257127c91f4021e825e1294c1fc820f9250b2c6c1fe720cd26a52c4e1eea1f9a26752c521cd41d17263b2c211caf1de125cc2be61bf11de025bc2a5a1a171e77256c290417621c9a254d270491ec17e8254b24d79bc5950926a61c1b9fbb9c9f264d995ba0a098a426d9a448a0461f1527aca7c3a0ee2524273ea708a29c2a122704a553a2382c7a2647a5daa28d2c4e26a3a4f4a2c42b37266aa268a1562bc22453a2a2a18b2ae1247ea08ea16529a72475a0eca1b828d42496a0bca1b72698247da070a151223524fd9f4da1a99d0824c79e5fa145a5aa23fc9ea0a127a80223399e97a2e6a95423579e00a37eaab822c29c36a31aa9ef21929d4ca341a73a21c49d22a39fa6a320e09de7a2efa52520ef9d87a24ea55b1fbd9d50a2e4a4ec1e159dd6a150a4171eb29c53a1bba37d1d8c9c30a171a3491d499cf4a006a30a1d009cb0a0afa2b71c499b74a043a26d1c8c9a32a0eca1051c459a14a0a5a1881b049ad39f60a13b1bcb99719f18a1b41aa199169fd9a0621aa099bf9e8ea0ea196599549e3da08e192799f19de39f3719b998909d459fc0185198549d0f9f7a18f497249df99e5f18c397079d019f09180297db9c349fa6173f979e9c7e9e46173f979e9c7e9e461700000000750100000000000075010000541a2d1db41f3821c11ff32073222b266023e520a822832619274920f821ff25672a2b207b219526642c211fc720bc26c22c431e4b202a27b52cba1d38200f27782c941c19209e26942bef19fe1e4826512a08142f1d67266728fc95751aae2658257b9bf30ce1261320fc9c8c96c5269e9c509fba96ed262da595a04f945727f9a63aa1ef1eaa26f6a54ea25228e826f8a32ca33e2bb126a3a4c4a2cd2cb72686a28fa2872c3526d0a1f6a1362c3a259ea133a2e02b5725cca0b3a17e2ab224bea038a23229fc2476a016a2fb26b624c4a001a27b22712468a03ca2eb9a4d24319f2ea2dba4d1235d9fbea295a8cd23d99e69a3a6aaba23399fe6a33fab4c23e39d04a362a8ac21ab9df4a25ca6fc204f9e54a342a6b9207c9e79a32ca68c20ae9d01a3a0a50d20099d73a21ea5431fd49c13a2f4a4c01e9d9caba1b2a4241e229c30a12ea48b1dde9beaa09aa3301d1b9bbea0eda2c41c209b98a07fa2921cde9a62a02ca2341cc79a2fa0c6a1bb1b6e9aec9f65a1521b1e9a769f07a1b81ab499109fc4a0491a4d99a29e74a0c019bf98359e31a072195798e69dfe9f2c192698b89dbe9fe3181a989d9d769fa9180398769d559f75181498609d019f4318a397339df09e0c18ce97f59c729e2a18ce97f59c729e2a1800000000000000000000000000000000e619821c401e1521b81d9b21d92271269320ee207022b12681232b2045227d26ef27342003221527f82aa01f5621ac27952c801ebe204b27fa2ccb1d79207027aa2c811c092075270d2c5e190e1edd269d2a1614c71ccc26c4285f917b1a5527a726e09729190e2756215c9c02146727e19c739fb49ac2260ca53ca0bf9ae52686a511a19798902671a457a25c222c27aaa20aa20d29162687a375a2d62c4f2673a3c0a2382df1257ba3a8a1be2cf5241fa21aa23f2c4325d5a022a2922bf72411a185a29c2a222596a04fa28328cc24d2a042a289248c24b1a05ba2cb944e242ba050a218a5fb230ca02fa216a9282349a017a322ab1723889f05a430ab2823a39d59a30ea8be216a9e82a3aaa661211c9ea3a35ca6f6208e9d16a3afa54f201f9db2a23ea5d11f4b9d8ba203a5441f1d9d1ea2b8a4b61ede9ccea15aa4351ea69c65a103a4b21d839c43a175a36c1d4a9c0aa128a3211d3e9cdba0dba2e21cdf9b9ba085a2781c939b76a033a22e1c2b9b46a0f7a1ea1bba9a0ea0a8a1541b6b9ac79f72a1051b4f9a849f2da18b1ae199069ff0a01c1ac9998e9e70a09e192f99029ecf9f0419ec988c9d459f8d1881985c9d1e9f53187b984e9d009f15180898329d059f80179297a69c2c9e02179297a69c2c9e0217000000001d800000000000001d8000004b19af1c751ea221651eb12123239e268a1f6f215323da26b32001211623c5262a23d820762289273b270b20d22191276e2a001e672039275a2c4b1d0d209927b92c391ca61f98275e2cd619bc1e1128562b7811c71b1328a0295594e7176c279426979ab90c6a277821159dec8c5927a19ed89e17963b273ba419a0ad99412741a4f8a0209e202772a269a19d8d502756a268a2c3237426e5a2f8a1442b0426eca209a2902de325d4a02fa2892d6c251ea27aa2052dee254fa124a2742c3425c7a067a2812b0a2503a198a25529d624cca07ca2662572249ea0c7a21f154424679ff7a2d8a404241f9fa9a25aa912232ba013a419acd623a49f12a430ab43238f9e81a3e8a7e3216a9fbba36ba692210b9fe4a365a65221209e65a3d5a5bb20dc9dfda27ea55920669d91a2e7a4ac1f0a9d30a2aaa4091f3d9d68a2bea4ef1e319d29a286a4971ed69cd0a144a4241e5e9c69a108a4721d0e9ce7a020a3c21c0e9b9da08aa2431c839a5aa030a2f21b259a21a0d9a1441b1f9ae19f7aa1ef1abf996d9f28a15d1a8299059feaa0da1926999c9ea0a08319d698419e64a01419a598009e3ea0de187498d29d10a097185798b39dec9f8c188798ad9dab9f65183298749d5c9f66183298209dcd9eb4173298209dcd9eb417000000004b000000000000004b00000098197a1d601f4522b61e1a2212244826521e5a229224a6260f1fab212b24ee263e1f5c21a623d8279721ce1f832291276b26e91d87219427f329011d4020c3271b2c1f1b7a1ecd273f2c9518701c7227962bee0a3d1aa327eb29599407187227ae261f9a6d0ce4263520329d31980527f99ee49e549ad62611a37ca0bb9c6927b2a10ea14d9e8d2641a03da1209b85264ba14ba1c68d972604a3a5a1e225fa252ca420a3922c742643a215a25f2ec2254ca15ea1c52d3c25c2a094a1282d0525cfa09ca28f2c422515a176a2eb2aea24d2a147a2b527552479a083a2c3203324d59f18a373a32f24129f10a379a98223759f77a319ac52231f9e69a342a9bb22f09e7ba33ea61322979e79a3d9a59021229e64a3bca50e21eb9d06a387a5aa20a69dcda24da55520619d6da227a5c81f5b9d74a218a5821f3c9d56a2d4a4061fbe9c0fa287a48d1e729cdea164a40b1e459c9ea115a4a61deb9b38a183a3111d779bd5a0f1a2a41c6a9b96a071a23e1cbf9a3ca0f2a1a51b759a09a091a1351b249a9b9f37a19e1ae399369fe4a0471a5599c99e9ba0bf19d898479e39a03c199698ee9dec9fd01856989c9d809f7a1823987a9d349f5f1841985c9df39e13180898419d139f1d18b697bf9c609e5917b697bf9c609e591700000000720000000000000072000000a4195a1d5b1f2622d51d53221124ad264a1ecf2133240827be1e5721fc23e826eb1d312131236d270e1f56204322c1278220bc1e00228d2799243a1d20210d283428a41b0f203e28ba29bb18501ee727772ac90a5e1b9427742987944418de271126b899e10c6d272f1dad9c689367276e9fd39e7199352748a00ea0059db626829f0ca16a9fa526c49f35a164a03e2687a1c5a110a11c26d1a0aba24d9c0b2695a157a20d287e2506a249a2242e6c25d8a0eca1f52e2c2564a1aca1052e042536a015a2402dd82455a177a2192c942472a01aa37a29b1244ea1dfa269221224879fd9a299a4bf2329a13ca390aa3c232da123a4cfaca423869e6fa4c0a89623ba9f9ba3cfa50b22939e10a321a53a219c9e23a378a50021e89e0ea352a59d20f59ef1a220a558206e9efea21fa51a201f9ef4a216a5d51fd79d9aa2e4a4121f909d2ba2a4a4981e6d9df4a15fa4231edc9c8fa12aa4861d769c52a1d5a3291d1f9c21a16ea3bf1cd99bfba008a3711c599bc3a09ca2401c569b97a057a2e61b2b9b53a0fca13f1beb9a11a0a4a1d21a6e9a879f41a1231ab399df9ecba09b194199659e5da014190d991c9e2ea0c3180099199e03a09d180c99089ea79f6d18c898a99d9c9f56181c98329de29ede171c98329de29ede17000000004380000000000000438000006c190d1e1220d2210a1e0d22d123a026161e88218f23da26fd1d272155230d277d1d8e20ae225e27de1cba1fea2195276b1ced1e7921ab27631d601d762010284520421bb81ed8270d23c9150a1d7e27202582913a190c28b82419984e18cd27ce21099ba68cfc2646170a9dd797b426b99c4e9f6d9cd626e19d6ba0699ef326369ea5a0c19e8e261ea0d4a0d99f2826b6a056a16fa0312639a2e1a139a0082691a193a1518d1a2593a1b7a1722a14253da2e7a14c2f012579a2a1a1532fea2407a048a2352ef32499a0b1a2ed2cd324a7a077a2872a45245ea0baa2b825142434a05ba3baa20024df9f0ba3f1aa32232aa055a36face522459d36a367a62722c09f1aa379a5a521f39fdea3dda5d121659e08a361a5f520ee9e3ea3b3a5d920319e45a37ea5a820ee9dd2a21aa53f20bf9da9a2e9a4f51f5c9d5ca2c3a43b1ffb9c0ba268a49d1eb19cd0a134a4351e6a9c8ea114a4a61d4e9c66a1d3a35e1d259c27a18aa3f21c239ce9a02ba38b1cea9baaa0cda2451cde9b82a06aa2f51b5c9b4aa00ba2611b0d9b20a0b6a1051b2c9aa09f4aa1631a7799469f03a1191ab998a99e9ea07f197b98d69d05a099185898859d839f67185f986d9d259f20183998449d239f01183997cf9c049fc3173997cf9c049fc317000000005a800000000000005a800000a119d71df21fcb217e1dc621bc237c26f31d5e21a4236b26cf1d3721a023bf26aa1dfa205d230727241d6820ab225c272b1c981fcc217227351afa1dcb20ae277a19da1c1120c127fd18e418661d08282c19cb8a0119962719184297a1120127cc09d69aa095e4264d96e99c449934272e9a089f679cfb26f89c08a09e9e8f26df9e75a160a0da26a1a0d2a1a4a06826aaa098a1f2a0f02529a1e3a116a1f1256ca123a2dda086253ca01aa2f20d1625ca9fe0a14d2c1b250ba0a8a2f52ff824969f70a2902f3c25e79f83a2032ee924f0a0b9a21a2c952441a0e2a2a3274a241c9f58a395a10024b39f77a3c1aba0237c9fb8a217ab7322c6a039a37fa54722eea00ba344a5e7218b9e18a35fa585210c9ed9a209a5f420729ef1a218a5ca20749e25a337a59b20389e13a346a55e20eb9de7a242a516208c9d7fa21ea57c1f2b9d38a2c0a4e41ebe9cbea153a4241e5a9c5da102a4981d2a9c0ca18aa3051dfa9be4a03aa3951cec9bb3a006a33e1c709b7aa0c7a2fd1b479b44a060a2571bd59af49fe3a1aa1aad9a799f8ba1431a649a2c9f20a1c919d099a69eafa06c194399419e5ca005190999fd9d26a0ac18f698f79d02a0a61856990b9ece9f94181899d19dd09f8a1867984f9d5c9f901767984f9d5c9f901700000000408000000000000040800000dc18c81cab1e7821991dd4218123d926381ec621e923fd26cb1d6721af23fd266f1d10213d2325279e1c2a2064222b27801be81d18213227d8191a1cd51f2f27a016cd1af11d2727af13ad170d1c69275d0d850ac019fb260f94b1952412c22694978f9afb945126f899119d90998b26bc9b879e349d2e26a49d8d9f2d9edc25cc9d8ea0d49e06268c9ec0a0599fac25689f61a1fea06e252ba023a224a25525b2a085a272a23125eb9f7aa3e7a2072510a101a2111d672444a09aa1132eac2406a250a2a630c224f39e29a2e32f2e2428a004a2c02d2424099f14a28c2abe23d9a15ca31d9de02312a12ba430acaa23f4a0b7a2bca8ef21d39faba2fea4ac21069f89a34fa50a22d29fbda3bda5fd2188a1fea2e7a42421349fa6a211a5a820169fc3a214a58620ee9ecaa2f6a458204f9e8ba2dea4d91fd49d3aa2a1a42d1f8e9d20a280a4f11e5e9df2a15ea4931e089db6a12ea4f41d9e9c6da1bfa3861d4f9c2fa172a3081d299c07a12aa3b71ce39bd9a0dda27f1c779ba9a074a22c1c1b9b5da015a29d1bdd9a18a0b3a1241b599a729f30a1681ad799ed9ec9a0f6197f99859e7aa087194a994f9e3ba010190c990b9e12a0e7181499d19db39f75189498459d509f0218d299289db69ee116d299289db69ee116000000004080000000000000408000001819c21df51fb6213e1e63221824a826a91d9221b32351265a1d5a21a52376261e1d0f214c23f726521c4e20b2225227ab1a961ef3216f27eb184a1cbb20682743158918391d44271f0dae0ab81725273e90fb905a120027f295db977992252707989d9ab6970027039aaf9c429bdb26ea9b319eba9c5a26fb9cbe9f7b9e1f26bc9d94a00ca0d925639e06a1daa09025e49e2da13ba13a25319f7ea132a12b25999f81a1b5a1eb247aa0cba147a2a02498a065a299a34024b79f37a22120142435a09aa2612f822437a0dea25e302b243ea01aa3de2e1b247fa1ada13d2b9622a29e95a215a470234fa168a3acab68236ca060a24ba51a2215a007a379a55122fe9f49a344a50922b59f7ba21ba51421309e2aa311a55421ef9e25a32ca50e217c9effa20fa5b820379e0da311a57a20de9ddaa2f3a41c205b9d82a2afa4671ff49c4ea266a4e51e9e9c14a247a47d1e629cd7a127a4031e3b9c82a1e0a39b1d1f9c3da161a3171d2b9cfba0fda2ac1c189cb1a094a25a1cfe9b6aa03aa2181c5d9b1ba0c7a16e1bb79ade9f7da10a1b089a5f9f38a1821a87991b9f04a1461a1599ba9ee4a0da19e198509e85a06919e598da9dde9ff018dd98979d3a9f7518be98589d6d9f30184099699d629ff2174099699d629ff217000000003d890000000000003d8900001f1af31d152090216d1d342211242926b21d64213e230426311d2121f1223126eb1cf720d12286268d1c85205922df26821bdc1e7a2102275f19071d5320ca26c016251aab1ece260b10f0100f1bbf26a9917897a712972652962d9b908c9926bb986b9ce19779266d9aa49d419b3726889bd09e3c9d0a26b09cf19fdf9eda25bc9da1a038a078257d9e03a1cba04225bc9e51a101a11225ea9e30a118a1b024f49e82a1a6a16b24939fefa1d3a2622492a082a258a35224859ed0a175a10024239f38a11521c923c39ed1a13e2ef723559fd6a10430fd22b79e2ea2942cd6224da0c6a308a4f823c89c87a1f5a865218e9ee1a000a3c420ac9f20a26ca4992131a03aa35ea51522d69edca23aa57421209e3aa329a55721479e10a305a5e2201e9edaa2e4a483204e9edca2f7a44120689e8ea2bca4de1f159e63a294a4191f889d48a27fa4df1e409d08a255a45c1ee59cbca11ba4c51d9c9c6da1b3a3651d3d9c21a146a3de1c1b9cc9a0e1a28a1c949b84a076a2161c1a9b3ba01da2a91bb99a07a0b4a1081b9d9aa39f5ea17f1a249a0b9ff3a00f1a9c99b19e90a09c190e99389e33a04519ac98cb9dce9fb2187a986c9d699f80188698499df99e44184498d39c9d9ebf17d2978b9c549efc15d2978b9c549efc15000000004e050000000000004e050000681a6d1e8020ef218b1d85214d23af25231d39216223c325dd1c5f216a232326921cff2013234f26091c8f206122c026431a0e1f172101278318681cea1fde261a15b6184e1dcc26b80cf38a2019ad263593c8989d8c7726fb961b9c319952261799b39d449c1226a79adb9e669ddf25f89b729f749e7d25b89c0da0719f4a25619d90a038a00025e69de2a0b1a0d524569e19a10ca19624619e56a179a16324439e39a1a4a14b243d9e56a1baa128249a9e68a13aa21f24279f8ba133a2b323daa0f5a077a16522f19ff6a1de964d23a59d21a1e727c122e49e11a18a26fa21479d01a2d4a62c22e39c54a147a40d214e9c0ca1eea25120cb9e6da293a42121f39d59a25aa4d920459ffba184a48920cc9ed4a2b8a40a21589eb6a2ada4d820269ecaa2eaa48c20159ecca2eea42820cc9db3a2aea4c01f609d8fa28fa4321f209d67a28ea4c21ed39c22a262a4521e979cd2a132a4ff1d499c66a1d5a35e1d079c07a157a3e21c959b9da0cca2601c199b4fa042a2e21bda9a0da0c5a1541b809a8a9f6ea1a81abe9a4e9f2ca1731ad09a119feea0141ab79acb9eb5a0d8199a9a759e7fa07919319a209e29a00e19ac99c09def9fcc189299839d969f6518c198549d989f2118cb98f79cb89e6117cb98f79cb89e611700005b866886018100005b86688601817f1c4a20ff21d7235b1c0521cd222c25e41c27210a237625b21cee202b238a25fb1c3521882353266c1cfe202923d426a81a8b1fad21e2264e18ee1c0820b3263914e2174b1c68269d8c6494fc12172604958d9ad295d7251c98f79c5d9a8f25b299319eda9c7f25cd9a4f9f779e4625c69bec9f759f07258d9c15a037a0ee243c9d8da065a0b224ad9da3a097a07e24289eeaa006a16824509ef6a02fa13224759efba080a1c7234b9e00a198a134238b9e08a1b6a1af22f49e29a125a24e222ea08ba175a203223ca00ea241a4e621349ee0a1e4a0e021639d19a0dba01920879b5aa0cca21e20179d43a147a2b320999f38a1d3a3a6200f9e4ca1a4a34e20eb9dbaa111a4b6201b9fe3a13da4c820949fbca2dca40021ed9e60a33da51121809e42a333a5e5204a9e23a3f5a48f20049e31a3f7a45120e89d09a3eca40b20759d8ca2b0a4541f079d16a254a4911eaf9ca2a114a4cd1d6a9c45a19aa32d1d319cfea00fa3cc1c2b9ca9a08ca25f1c0b9c71a030a2041cb99b40a0d2a16c1b249b03a08ea1d41abe9a899f31a13f1af699e59ec8a0a0195799859e7fa052191899409e51a0041900990c9e1ca0c418d698df9d0ba0af18eb98cb9dab9f5a1841986d9d5b9f1f184098209d5f9f8d174098209d5f9f8d1700007e02db0a798700007e02db0a7987101cfa1f862172234b1c3221c4224a25931c1b215e238e25681cfa203c23a925a61c5e219623f9253d1c6521a6239326eb1a82209f22fb267118681d6f2086262a139116051cb125eb8f2198d68c1b259496b19ca69bc024f297719d6e9d6924e1981d9ed49d6024d199b39eb89e6b24ad9a229fe79e7c24719b919fa79f7a242a9cd09f09a068249e9c36a075a04224189d77a0dea028242a9db1a007a1ef237b9de2a02ca18823da9de5a055a12423539ed1a077a1de229a9ecaa0aca1d522f39e04a1dca14022a89e29a15da2c721cb9d31a14aa2e4203e9ff4a0a1a11d20cb9d39a12ca20320069eeba080a2321fbc9db8a07aa2d31ea99df3a0e6a2db1e5e9d3ca162a3be1fc59df2a15fa47a20439eeca2eea43521849ea7a34ea57d21709ea0a34da51a21469e3ca301a57720df9d0ba3cca419206d9d91a28ba49d1f279d5fa275a41c1f1f9d0fa240a49c1ef89cada114a40a1ed39c46a18fa35e1db29cc7a000a3c01c929c85a08fa2571c959c44a030a2001c6c9c08a0baa14d1b1b9ca09f67a1e61a5f9b799f37a1981a999a0d9fe5a0221aec99c59eada0bd1951994f9e60a043190099ff9d20a0ec18d998aa9dda9f9218cd98689d659f3d188f982d9d329ff7176298be9c639e8c166298be9c639e8c160000cb08630deb010000cb08630deb015c1c2f20ec2173233b1c9d20192287244a1c6d204f22d224671c95207b222625481c09211623bf25441c88219d23aa26331cb4211424a027041ad21f1622ad265510628c2d17dd241996e59db39dd123c998bb9f25a0e8225199d69fde9f0d23f999ab9fd99ffb23679a739f559f1024c79a289f839f2c24499b1f9f359f3624549b669f6c9f3c24d69baf9fcd9f4b24899cd09f47a02f24129d19a06da01024399d3ca094a0ed23419d44a0e4a06923959d78a063a13223ac9d96a09ba1d622c49dbea0e7a18b22a89db6a006a20e223e9d7aa0cba1e620ca9c2ea0c7a1891f6d9cd59f9ba12e1e869ceb9f8fa1091d129d13a0cea1f41c469d20a013a2391db29d90a0e1a2601ebc9eb8a123a42f20829f48a322a57b217a9f16a48aa50122f49ed7a352a572215a9e95a32da51b211c9e53a3e7a49b20ad9d94a275a4b31f209de7a116a4bc1e939c81a190a3001e259c19a108a35e1de69bbfa095a2d41cc19b5aa025a2541c509b0fa0baa1ca1b169b9b9f63a1201bb69a4d9f17a1c21a1f9ae39eeba0381aba99ab9ec8a0de194999619e9ea09d19f798f39d4fa029199c98899d06a0ac186c98429d679f5e184598209d159f2f184e98ff9cd59e03182798f89c189f1b18bf97ca9c049f9d16bf97ca9c049f9d160000e18472843b840000e18472843b840e1bd31e93203c23e31c302086218d24f319111e4e20c023161adb1e18216924a61ad31f0422d1241f1acc2013230426b01c52233925b627421d26240e2632285291f49a05998823769be2a212a481195d9a6da128a2a71cbf98949f3e9f6021f4980f9ea19d20235199ea9d639d1e248399139ea89d7a244b9afc9d0a9e7d24a49a8d9e649e87246e9bce9e339f6d24ed9b549f8b9f3924529c689f4aa00824aa9c2aa08ea0b0232b9d52a005a15623729d75a022a1da22b49d7ca03ba14e22099e97a08aa1c221169e9fa0c4a16721ac9d82a0aba1a320059d00a058a1f31eba9cee9eefa07c1c8d9c0e9e4aa09c193f9c659d8f9fe315579b859cad9eb3183e9ccc9d30a0331c259e54a173a314206e9f6ea4eba57722719ffda48fa60223399f2ca46ca5c921ec9d1fa30ea599202c9da1a2b0a40320109dd0a112a4b81e159d75a1a0a3171ea69c26a146a3ae1d3c9cc0a0e5a22c1d989b74a079a2951c4e9b42a00ca23c1cdc9a04a0bfa1cc1bda9aad9f60a1301bc79a399ffaa0c31a689ac99ea4a0331a099a489e56a0a9197699e99d14a053191b99929dc89ff2189498519d689f97184c98fd9c139f3e18f897c09cc09e1618de97899c809e5d173f975a9c4e9e06170d97f29b7d9d4c150d97f29b7d9d4c15b38d14944693a190b38d14944693a190b7190c1d091f8521ba1ac91dc91f9d235a1a1a1d291f7a232719231c381e43230818971a521df8225718a619391df0237a1478170b1ce9238e148e19601e5c28420cb491801e3d26169222997e8d34258391f09738960e249295f499c098c224eb96c19a339a58240e98929b679a3e24a5984f9ca99b57246b99d89cd69c5124089a809d7b9d4024cd9a3a9e829e2f24c99bdf9e279f12242e9c5d9f03a0a723819cdd9f40a05923d39c19a0a9a0d422fe9c7da00aa17e22f49c9fa06fa10b22fb9ca7a0cca1c0214e9dbfa0f0a14121869d7ba0efa16220899d1ea07da16d1f0b9eba9e46a01f1df59ce19d00a08b198c9ab69b099d92085b97ac104892429d0897640cc78d379dc99c44a150a3511e5ea114a69ca7ed24c3a0d1a568a70f24d8a032a4c0a5e921bf9e51a274a46520369ed1a1c1a37b1f359d69a1a3a3df1e689c0fa15da3171e1a9c92a0afa21a1d139c33a001a2951cc09b0aa0aca1421cc39bcc9f68a1101c659b739f40a1681b139b169ffea0ca1a5a9a939ed6a0251af0993f9e75a0b119a099e89d21a063194599909dcc9fef1822995e9d7a9fa318de98399d1f9f8318b7980c9dff9e4b186998e29ce79e33183498ca9cdc9ec717df979b9cab9e7a17cc965b9b239d8715cc965b9b239d8715000090831b84f900000090831b84f900bb18281ca31d9620f2199d1d911fff226e19ef1c111fb622a118321c221e75221718e11a151d15225216a918811bda20fd112214b617721cc807810cee108f160b0c620e9913ae1c7f08380c19151b22098d989210090924da932198d8952824b896999a83993f246498df9b619b1624fb98bc9c459cea23ae99179d269dbf23679a8f9daa9d5b23ff9a0d9e379e10236a9b489e019fbf22009cd89ebb9f98224f9c4a9f56a04522a49cb59f9fa0f221bc9cef9ff6a0b321b99c0ca020a14b21c19c14a00ea10521af9c04a039a1ad20ed9c19a054a15720469d21a066a12120389e5aa06ba15a209c9e2ea0a1a1ba1ffb9dc79e15a1271e439ab69fd4a1141e3c945e1d9b1f37a1e69dac9f17a2221c94a1b0a820aaa727349bc5a2c7a4d3204a9c4ba08ea2191eaf9b11a0d9a1ab1d2c9c3da0fba1551d499c32a0cca1191d059cf89f8ea1941cf99bb49f66a1451c649b759f3da1f91b159b319f22a1811bae9ad79ee3a0b71a359a719ea8a0151a099a1b9e60a09e19f899d69d15a04e19a299869d989fe3187499349d4c9f7b184b99019d029f4f181e99e19cc89e3218f098d49cab9e2818aa98bb9c7f9ee91754989e9c539eba173c98949c2e9e7017b397729c199e3917d696f59b7e9de215d696f59b7e9de215000090005203e901000090005203e90187181a1c2e1eeb20a7187a1cc31ebb2167181b1c271e9d213b18a01b901d90217817271ab81cd4206d140b17cf19ab1ebe10bb126e16f01c190f2c114c159d1f2f0f9e105d164f221009288dde13e6235f8ee594b188f423c4932d984095a323a195f399fe988c235297af9bc99a86231198389c469c4c23a6988f9c809c0d233499d19ced9cb622ab99299d559d4722149a419d839df9218c9a8c9de89d9921939ab29d6c9e1b21219beb9de49ee720aa9b319e1b9fc120599c579e4f9f6720da9c399e8c9fea1fe99c649eae9f991fec9c5d9e03a03e1fbb9c4d9e19a0de1e649c569e4ba0561e279cc19ebaa0151e3b9cdb9ecca0e81dbb9dc49f19a1e81deb9ad99db29f511c3a87cc91af94cc11b6847c8b5691750c77942698b39a5b16b799229dae9f191bf49ac49e95a03c1c719bde9ed6a0241c0e9cd39ed4a00e1c489cbc9ec0a09c1b9c9b7f9e76a03d1b399a279e39a0c41a139aec9d29a0461ae399ec9d10a0f719de99be9df09fb519a199a59dd39f66197599689d809f09193b994b9d579fde1823991e9d369f9518fb98fd9c059f7818e598e29cd39e5218aa98ae9c8e9e07186f98799c509e93173c98639c089e20170d983e9cd89db016cd97309cae9d9916f0969c9b099da115f0969c9b099da1150000a00c7e103b000000a00c7e103b00fd18e61c471e73201719221dea1ed921c8179a1b8a1df520d516e2196f1c7c2042154418a41a6f1f09137b155718701db9106514b517101f1410de13151890213a0e960f8c17f8223d0397860c1577231a8cbe91c50e3a2361912396c08e1b236594b0980395fc220a96489ab998d6223497029b599aa922f197089cd89a58226898439cbc9beb21dd98719c3e9c652121997c9c849cb2208f998a9cc19c4220199a999c299dc41f989ac79c749d461fc59afd9ce59df41ec89a1a9d5a9e991ea19a619d969e721e759a8b9dea9e541eaf9ab69d619f391ec99ae99dd79f291e3f9b3e9e23a01d1e799b529e33a0121e839b709e78a0d21d9e9bfd9efca0df1dd19adb9ee1a0cd1d4099059e1ba0ca1c0c98a69c6a9ed11ab797aa9b9d9d40197198529b4d9dc4176c98879bd79d68188e98689cd99e0719b898d59c4f9f68193a99289dc19f94198f996f9d08a0f019f399aa9d1ea0ef19f699aa9d27a0da19bf99919d0ea0ad196b99559dda9f4c192499209d8c9f06190199089d559fbe18e498ed9c299f7518d998d49c0e9f5118db98b69ce19e3518c898a59cc19e18187698869c7c9eaa173f98679c3a9e3c171298329cf19de516c897039cac9d34164197ef9b809dde15eb96549b1a9dd314eb96549b1a9dd31400000000000000000000a00c7e103b00fd18e61c471e73201719221dea1ed921c8179a1b8a1df520d516e2196f1c7c2042154418a41a6f1f09137b155718701db9106514b517101f1410de13151890213a0e960f8c17f8223d0397860c1577231a8cbe91c50e3a2361912396c08e1b236594b0980395fc220a96489ab998d6223497029b599aa922f197089cd89a58226898439cbc9beb21dd98719c3e9c652121997c9c849cb2208f998a9cc19c4220199a999c299dc41f989ac79c749d461fc59afd9ce59df41ec89a1a9d5a9e991ea19a619d969e721e759a8b9dea9e541eaf9ab69d619f391ec99ae99dd79f291e3f9b3e9e23a01d1e799b529e33a0121e839b709e78a0d21d9e9bfd9efca0df1dd19adb9ee1a0cd1d4099059e1ba0ca1c0c98a69c6a9ed11ab797aa9b9d9d40197198529b4d9dc4176c98879bd79d68188e98689cd99e0719b898d59c4f9f68193a99289dc19f94198f996f9d08a0f019f399aa9d1ea0ef19f699aa9d27a0da19bf99919d0ea0ad196b99559dda9f4c192499209d8c9f06190199089d559fbe18e498ed9c299f7518d998d49c0e9f5118db98b69ce19e3518c898a59cc19e18187698869c7c9eaa173f98679c3a9e3c171298329cf19de516c897039cac9d34164197ef9b809dde15eb96549b1a9dd31400000000000000000000000000000000a321bc149b18981467284f1cf31fa921a929251ee71f8e247b2a271eab1fa425202b5e1d201f6c25b528af19391af22366247e15c9173c1e9020f713a6143f84af1e50142a103197831c60152b14469a041c0000430d00006621b118b01ba59d1b2bde224d23a8a465a20a9fe09c7e2167ab51a5d3a32c27ae2d4ea0482354262b302316c32ba4253ca9319b432c4a2614a893a3fa2c1828d8a8b6a78028402443a91fa42b20651a90a58ba2809911211ea0c5a1fb1f4222969eada1c4247a22f19ddca1b524d922fe9cbaa181248d22019d0fa25f246922529c4ea1cf1f1d21119ef6a241a030961aa375a6fca6901754a3bba513a7e42785a046a1dea8ef24419e47a1cda80522bc9b00a3bca80c21c79c6ba2d0a6611fd79b72a125a4771e309ceea022a30f1e6c9c26a177a3251eab9b84a05fa2521d6d9a869f4ba15e1c129a089fc2a0bf1bd799c39e93a0731b9a9a109fafa07c1b499ad59ea4a0251ba399c59e8fa0ba1a2299829e82a0371af2984f9e5fa0f319d598f49d3ca07819f498be9d1aa045190599cf9d04a010190a99a29dd19fc4189498909d659fa718fc97309d989e49181197bb9cff9d9917dd96979c119e271711978f9c289e19174397839c069e97166c97929cde9dd1161897459c4e9d4a160000000000000000a321bc149b189814a321bc149b18981467284f1cf31fa921a929251ee71f8e247b2a271eab1fa425202b5e1d201f6c25b528af19391af22366247e15c9173c1e9020f713a6143f84af1e50142a103197831c60152b14469a041c0000430d00006621b118b01ba59d1b2bde224d23a8a465a20a9fe09c7e2167ab51a5d3a32c27ae2d4ea0482354262b302316c32ba4253ca9319b432c4a2614a893a3fa2c1828d8a8b6a78028402443a91fa42b20651a90a58ba2809911211ea0c5a1fb1f4222969eada1c4247a22f19ddca1b524d922fe9cbaa181248d22019d0fa25f246922529c4ea1cf1f1d21119ef6a241a030961aa375a6fca6901754a3bba513a7e42785a046a1dea8ef24419e47a1cda80522bc9b00a3bca80c21c79c6ba2d0a6611fd79b72a125a4771e309ceea022a30f1e6c9c26a177a3251eab9b84a05fa2521d6d9a869f4ba15e1c129a089fc2a0bf1bd799c39e93a0731b9a9a109fafa07c1b499ad59ea4a0251ba399c59e8fa0ba1a2299829e82a0371af2984f9e5fa0f319d598f49d3ca07819f498be9d1aa045190599cf9d04a010190a99a29dd19fc4189498909d659fa718fc97309d989e49181197bb9cff9d9917dd96979c119e271711978f9c289e19174397839c069e97166c97929cde9dd1161897459c4e9d4a161897459c4e9d4a1609160000580e000009160000580e00002d287e1f2721eb23e72a79219d229425c42b6721b122e025e42b851ed71e5525de2a7a12311493244928a4945794831e7e252a89b90e3d9633150d14af0ff6987e04c80cce15e191060df2103d191b9185186d1c2620939d5618721f312143a2e316ee1ea4223524ea18f89e3e901429a029b8a06e1d1b281132418c0d2ada26ebac8c9da82c192903a9bba02c2d962776a966a52d2b9d248aa83ba545a0ec21a0a585a43ca3b423baa357a44c19c32477a3eaa2471ffe23a6a4dfa16d287b23f09ecda0871f4822139e8d9e90a583218f9b0a961d264720439cfc96f82a1d20949ede998c230d21fd9d2fa0a5aaf025289de3a287ab0226e19d2ea4d8aa4924329d76a458aa2221c39d1fa4baa8081fb89c3da353a71f1e2a9c22a240a5851ded9b74a1f3a3571d069cfaa008a3241d279b61a073a2861ce69afa9fbfa1111c449bbc9f7ba1fc1b0b9c10a083a1331c4a9bb49f44a1a71b089a199fc6a0f61a6f99cb9e9ba0941a4e99969e7ca0361a6099999e60a0e9190c99579e3da0ad19dc98379e18a05a19e398309e05a043199c98ea9daf9fe4185098a19d439fa718cd974d9dd49e41188697169d999eeb175b97e49c509eb4175297b29c359e2c178096689c139eba16d5964a9bae9c1314d5964a9bae9c1314100fdd02230a2705100fdd02230a27058125292008229624642917216e223c26452bb520a82190261f2c3c1f46205a261e2c491c391dc025de2a6e176b19df224229c1179218ea1aa328041a7b1bdd95de20ab19e91bab99791d7714e41ada927426c7865190181f2124999b1f9942246d1f2e9c849fb423a01d879e4c9f3426b228099f1e9920265b2e7e9c972666253cacb0a027299326e8a9baa1682b6c2609a920a3e12c32253da62aa4f79f4524dea4a3a4eca5502441a3aba3619f5124c6a1f6a24d244b2497a129a29f28032410a3c0a1bf26eb23ba9e4aa05d225223f89c049fd61f1a23749e969f2828de22a49b14a00d198a21cd9c70a09daad1216d9beea179ac05234f9e40a4daabda229c9e4ba4e5a95c211e9e0ba474a83020ea9dd2a30ba8a91f909d4da38ea60e1f1d9d60a21aa5ab1ec29c99a12aa4131e119c0aa184a3661d619bc9a0f3a2201d779ba3a0c9a2e61c799b8aa088a2bc1ca79a38a0f3a14d1c619af99f7aa1d21ba0996e9f21a1051b49990b9fc9a0681add98969e86a0ea19ca984a9e53a08019c998339e32a03519de98279e24a0f7189498e39d00a09d187998b89d819f7c183d988f9d1b9f39181098439ddf9ed917f197289db39eaf17e797fc9ca69e47174197da9cbc9e171721977c9cfb9de61621977c9cfb9de616aa024d8459809d00aa024d8459809d00431c231ad91bd81c6e267420ae21b1253c2ab8200f2284260d2cd81fe4204d26842cd21d4a1fde25a72c211c311d7e25562c3d1a6f1c7525f02b2219041c6f25172ba8184f1bf824ff297a16871afe24bc285290350ba1256c26749a949ae2266024dc9cac9d0b28ca1e1d9eb09c082857a0539f22212228b8a5459fca23d02885a95da156286f2824a97ba2a22a9027dba827a3502c3f2631a5b4a28a2c6e25e7a3a7a2eb2a4b2547a30da2aa2ac4246aa28da2b92a0625c3a0d8a16429672465a067a23528b2241da027a346267025849e3ca16f1fd224369e09a120a13a244b9e7da102a70c248f9e0aa2eca8c92315a0baa2a6aae5225d9eaba364ab1e22839de6a36ca91021a69d05a423a86a20639d0da419a73020b69d70a3eba57c1f8a9d04a35fa50f1f1f9da0a246a5951ea09cf0a18da4d41d5f9c27a1a0a3fe1ce89bbfa0fea2981c059b7aa050a2481c649a44a0eea1071c659a39a0e5a1ae1b0d9a23a0cea1581b019a04a08ba1dc1aa399a79f3ea1751a7a99449feaa0221a6399189fada0c2194b99d09e67a05f19ef98739e2ea016199498269ee69fda183e98e29d729f81182598ac9d469f43182398879d309f33183a98729dee9ec517f497269db29ec5176a97da9cb19e3c176a97da9cb19e3c17cb82068d7286d585cb82068d7286d585581bd91b011da61e382325204d21ac2567287f20c3219726e42a30207021c7267e2cca1f2d214b27102d841e1d203827ca2c991c5c1eab26742c121c171ed526102ca91ba31db326242b0d1a5d1e67268f296417d81c84261928460b2f1a38271524189804165627201a9c9c3497d2279f9e919fa919bf27eaa5eaa0941de0272fa96fa12f24c6274ba900a3042a6a2727a8baa2f12b9026e1a5b6a3c02c93263ea452a35a2c222660a3d7a1122cf42468a309a2c72a072551a116a25e29fc24e3a1b9a201294125c9a0d2a263263c251aa07aa2a820ca242ea05ca27da06624a09f42a25da60c242ca054a2fda844233d9f17a394aa1723ad9fb7a310ab84228c9eaea360a95c21699ec4a323a8eb20509eb2a3ada76b20149e65a398a60520f19df0a2cca5591fc79dd6a243a5cb1eff9c0ba28ba4ef1dc49c72a108a4371d7e9c4ba1b0a3001d559c29a15ba3d11c159ce4a0fda2821c7b9ba5a088a23c1ca89a5fa02ba2aa1b889a42a0dea1621b539a18a097a1e71af799be9f46a1881abc99549f07a12f1aa599029fbba0c01963998e9e6ca061192b992d9e11a02119b398cb9da79fad1857987d9d499f5a181f983e9d339f2818f8970f9d169fe1173297ea9c7c9fbf170998ba9c509ec3160998ba9c509ec31600004c82fd80378300004c82fd803783cd1a741cf01da51e762033210e23372692247021032428277328a1208d22b426b82b6c201722fb26182d661f5e2116272a2d471eb920bf27032d581d8120bf27a52c771c00206427242c7419291f1327ad2a7c148f1e7527a72870917b1c4e2799251b9ac5167527f71e5a9dbc940b28139fc59f8e94b52783a5eca0c9971728b0a8fba1851c62278da846a39d26b8270fa635a3432ab626e0a521a3982ca22656a439a3942c9d2689a387a2252c6125c5a282a2af2b2d25fba138a2832add24ada1cba22929122510a1fca2c026fb2418a1e1a29e21b024d0a00ba30f9e652417a0b0a2a4a5fa2356a061a30aa9e1230ba00ea48aab9c230aa02aa492abcc22bf9f89a36ca861211a9e79a3eea6cf20989ed8a3daa6af20759eb6a394a64f20ee9d75a3fda50e20579dcea275a5351fe29c4ba23aa5941ea49ce9a109a5051e539c75a187a47e1d1b9c2aa118a4211db89bfda062a3b91c959bc3a0b4a2571c669b8fa068a21b1c359b4da0f4a18c1bda9a1ca09aa1211b879acf9f3ea1971aea99499fe7a0251a9999ec9ea7a0ae191499849e60a05a198098209e2ca008193a98e19d0aa0b1182698a49dbd9f6c1808988e9d8d9f5a182098639d3b9f0418b6973b9d049fcc17d597f09c709ed517d597f09c709ed51700000000000000000000000000000000c315a717d518cb191a1fe121c4236726b3214b215e232f27ff24ae20f322322765299920b922a627562c7a1f2e22b727632d051e22218727942da41dad20ae27ff2c301c1a20c6277a2ce119871ebf27bc2a9711a31cdb274629d691fa1b0b28362764985f1bdf278822d59cf1190b283e9fa39f0097b32737a619a1959ba6275ba816a28b97572721a818a30a22652706a551a2fc272b2699a444a35d2c5f261fa44fa3142d202673a35da2b32c4d2553a2baa24b2c8225c0a187a2a52b0425cfa18fa2992af2245aa1cda2bf28e4241aa1d6a225249b242fa1f3a28f9b5a2435a0c7a205a6bb23c0a024a39ca92423c2a0dfa302acf42203a042a42fab8e22d29d93a35ba85221a19d05a47ca718213c9e34a455a70521af9d76a33ca62b20609de2a268a54c1f679dc8a215a5001f339d73a2f7a47d1e0e9df6a19ca4ec1dcb9c93a130a4681d9f9c70a1c7a3351d439c27a16da3e01c349cffa013a39e1cc59bb8a0bca2331ca09b85a06aa2061c4a9b56a01ea2a31be29a26a0d5a1091ba59afd9f9ea1971a9f9ab89f54a15f1a389a599f22a1d519139adc9ea9a08119cd99529e09a0ed188899c79d839f4b18d298919d6a9f2f18a998759d439f05181f98349d139f4517f897a99c3c9e4916f897a99c3c9e4916000000007480000000000000748000002c16c817c218af19281f0522fd237626982041223724aa275b214321f2232d271b2535210f2301288629b41fd7217727a82c8d1efd20b227bb2dde1d69202728702df41c4e205528d22c521a3f1f4928882bc411141c2c28de29a6964018e4279227449bc713ef27fc23919d560dcd27419dd09fe594002886a5eca05c9be42721a743a1309d862704a5a8a19d1419277aa4c0a2582217266da495a2242a20260ba48ea2082d16262aa1bea2a42d9e257aa2daa2052df42501a286a26d2c1a2565a1e5a2702b0e2504a15fa34d29062539a119a3af25832452a135a345154924d69f05a3b8a5a323939f0fa3f4a9ea220ea038a47bac782347a039a402abae222ea0e3a396a8b5216e9f03a478a75421b79f1ba4d5a61821ba9ec4a33da69220029e3ea3b2a50c20a59dd9a235a5721f7e9d74a2f4a4aa1e789d6ca2d6a4761e539d4da2aea42f1e1d9d19a277a4c21db09cc3a142a44f1d4d9c42a19ea3aa1c6d9bcfa002a3371cde9a79a094a2c11b439a3ba031a20e1b2e9a11a0c6a1b61ae299ad9f79a1281ab899459f26a1ab194799d09ed6a04f19ec98719e97a0e118c9982d9e7aa0ad18b6980b9e48a070189898f39d2da05f18a898cd9de69f2e187998ad9dad9f38186798539d539ff0166798539d539ff01600009180dc80bb8000009180dc80bb8052163b181a19d9185e1f0f227e240526171f0e230e256127991fea21442447278520a22193232c285924db1fc722ce276d29fb1d0e22e327d02cb91c2320db27dd2d3b1b3a1ed027552d2218d11c1a28722c5d8baf1afe27882a5c98c71817283128039c2d0dd8270d23f19d5f96aa27769f2ba0289b9027ada528a19e9ddd27d5a5eca1789f24272fa2e6a1979cd82688a277a29497fb26daa40ea244231b26d9a591a33c2b45263ea37aa2522eee258aa12ca2d92d7625e9a182a24a2d3b2542a1eca2932c3725ffa143a3d12a16255fa1d2a20b287224f6a048a33c1c3e24ec9f91a34aa50824ef9e59a306aa332303a00da452ac2c239f9e10a463a9a822939f11a4b1a6fc21b39e0aa487a688219e9ee4a36da61621729e84a31ba6b520ea9d58a3e7a54e20839dc1a2a8a5b51f639d83a247a5111f349d8ca2f7a4ab1ed39c52a2b3a4491e939c17a27aa4e91d659cbda13ba45e1d149c60a1b2a3e91ca79bfaa038a3611c8a9baaa0bca21b1cf89a63a03ea26f1baa9a32a0dea1071b429acf9f6ba1711a099a809f22a11e1a7799059fbaa09119f5986a9e53a00019ba98ff9d11a097186998a99d899f34182398749d2d9ff0175198689d059fa1172d98679d1f9fde171598b79c509ef3161598b79c509ef3165200b681f68116835200b681f6811683f4157f1776180d1ab21e882260249326151fba22c424d027211f902128245727ba1e67218223e92771203820f0221728dd23cc1d5d22d92706293d1c0d214428772cdf1aac1f4428572d7817911d8627e52c0f0b651aab27c92bea9672181b28b928109b0d0db6273e238e9d6194aa2785a071a09e9c0828cca4f5a0e69e8f27fea3aca1fd9fd82651a07aa163a05b261ca367a2a5a059263aa1e8a27d9e232693a1b8a2e7258925c3a11aa37a2d9825f0a191a2ae2e492533a398a23e2e352593a17ba2352da82489a1c4a2132c7024fca01ea368295a241ba23fa3b0220b24b79f7fa389a5a723a0a0bba328ab1e23fc9e04a411add5225f9e74a4dda8dc22d69fb3a368a68021519e53a388a5dc20db9eaba3eca5be20679f98a3cba57d20669f47a366a52f20e79e39a35ea5c41f769e15a343a54f1f089ec3a214a5cd1e889d67a2dea4481e5c9d2ca2a5a4e81dd69cd5a163a4741d7a9c8aa11da4ee1c1d9c41a1c4a39f1ce69b12a14ba34c1c829be5a0d6a2fc1b659bbba094a2a21b359b77a040a2011bef9a3ba0f1a1a41a7e9ae09f92a1011adf99349f0da17e197499a79e9da0fb188b99619e5ea0a31863992d9e2ea08a1869990f9ed59f51183599bf9dc39f45180c98289d2c9fe1160c98289d2c9fe1160000e2806f8197810000e2806f8197814916b11821194b1a5c1e5f221024a826e11ef8213a244f27521e3921a0237727031efd204e23f8278b1d442070221528711d7b1fdd210928e521371da7202a286c27851ae41f7c28902ac816061e4528552c698b0d1cef27da2b42982e1adf272b29579b308d12272a24039efd992d278ea08ea0689ed127aaa11da01f9e462642a06fa1789f1c2793a057a132a019264da1c2a190a0392626a2d9a186a0cd250ea2f4a138949d2540a123a26d292d252fa22ea2f52e072547a36ca23a2fd8241ea1c0a2542eb92476a1d4a2e32c742483a0d0a2d82a1024d7a108a3ed24d72327a271a335a49b23ada0dba323ab8723db9fd6a38dace722749da1a3fea61622e29ea0a315a67221189fb0a3fda53a21cd9e7ba3e3a5ee20b49ecda333a6cb20709e94a3dda586202e9e09a34da50720e99daba215a56f1f869d8ea2eda4da1e149d56a299a4601ed59c0fa269a4f31d829cc4a13da4641d629c88a10ea41d1d3c9c57a1b5a3b31c249c0fa173a3671c109cd3a028a3271cdd9ba8a0c0a2b71b739b68a060a21c1b259b2ba0fca1b91a2c9acd9f98a11e1a5899399f29a1bb19e998989eb3a02419ac98d69d1aa0781881989d9dc59f5a187e988e9d699f0b180d98229d019f68170197839c709e97160197839c709e97164280c0804c81c0804280c0804c81c0800015e216b517dc19f81dc4210c2484262c1e27228d241027e11d702134240027ec1d4121d7237f27ba1d8e204a23bf27c81c5e1f7622d7275c1c011d9421e327f71df01a492114282f23cb16931e3728f425fc94af1a5428c2260999b616bb27fd24389c5d936127b31d939d949a4d279e9c7e9f019dcb26c89d82a04c9fc32657a0b4a1b9a0a726e1a2eaa1fba012267fa20aa22fa1fc256ca106a2a4a1ae258ca270a2b8a0982570a1efa2269594257ca075a2f82b282562a0fda2942fee24baa030a3d32f1d2587a073a38c2e0e25eea02da3482c8524ada199a3ca274224cc9f6aa358a36a2330a0f7a312ac762361a025a427ac2923e5a016a337a68721cfa0fea3f3a503228f9ebca369a66521709e86a3e8a5f420cb9e8ba397a5aa20999e44a35fa530206e9e3ca369a5fe1f379e2aa37aa5991fe89dd9a264a5121f6b9d72a218a5a61ee39c0da2b7a4161e8f9c98a146a45b1d379c3ca1f4a3e51c019c04a1a0a3761cd99bd4a05ba3231c6f9ba9a038a3d01b4d9b78a0dda2351baf9a34a076a2991aa99ae09f0aa22d1a649a4a9f72a18f19fd99c89ee7a02b197d99539e7fa0bc1856991f9e48a072186b990e9e27a04f18d999209e00a039189e99e39def9f32186398289d439f30176398289d439f30172b80d380358110812b80d38035811081761576173318a519b21d0222bc235c26851e712265246527121e942127241727cb1d4d21f4237927fd1c4e20f8229027991b361ede214427741af51b652061273b17d618d21da4273618bf11a71b1a28e41a6494fd174c27291b5b99928ca5268314909c179a4d260598569e129dd426709be09f2b9e8c26d09c75a02c9f2b26fa9dbfa0a79fe82528a008a14ca0762585a00aa2b7a16b2595a086a2ada24025d9a013a38ea22f2538a0a6a30fa337258ba14da2f71992248aa1bba1ce2d8024ffa036a256306724d39fb4a206302e2446a177a1d12da9222b9f29a2542a25235ba024a425a20c24f4a06aa427ad9423d29f13a2f3a9e4207aa02ba34ea5902121a0bca35ea5a421ca9f9ba3ffa54421f6a07aa39ba50121f99e0aa3a5a56120ee9e22a35ba558200b9f39a338a52620aa9ef4a244a5aa1f0e9ebaa21ba5201f879d83a2dba4cc1e429d3ea2ada45b1ef09cfba15fa4bc1d709ca1a10fa4451d2e9c4aa1c9a3e51c089c26a154a38b1cbf9bf6a012a3391c759bc7a0bea2051c399b7aa04da2561b029b22a0e2a1d91ab19ab39f6fa1361a1f9a2d9feca0cb19c099af9e98a04d197199609e5ca0d31840992b9e2aa0aa185899f89df09f6218fa98709d709feb1777990a9ded9e571677990a9ded9e57164f006c8038818b804f006c8038818b805d140a17f7178119f41dc4225b248f26fb1d39224624dd26691d8921e823b9267e1d7d21f5235e27b21c72204b23b5272b1b9e1e6d22bc27c718521b21219627981337161d1e9a276d0d98911718bf27d08c3f9606134e271e90a199bf8cdf266394779b1d98c0260099d69ca09ada26669b239eec9c1526429d849fc59ed725ba9ea8a039a0d925189f66a1cfa0c0251fa0b4a160a18e251aa0b1a15aa141254aa0c8a198a1fa2465a026a211a29724f9a18ba261a24a24eba159a2bc21ca2309a0e2a2e22f822462a0cda24b3025241ea19aa3e32e4b24a5a123a2c72bcb224ba02ca392a08923dfa18aa3eaacdc22309fcba158a60a21759f32a38ca6bd21cc9f87a3c5a5aa214a9f36a328a60121259f52a333a5e620ca9f62a333a59f20f39e49a333a53c20859e53a340a51e20119e25a323a5c91f8b9dd6a2f6a40f1f0f9d84a2a9a47a1ea19c56a278a4111e7d9c02a245a49e1d5f9cb5a109a4581d489c5fa1a9a3da1c4b9c15a13da3891c3d9cc7a0d5a2371c2f9c8da068a2bf1bbd9b3ca002a2341b2d9b05a0b6a1aa1a609a949f6ea1481aef995b9f38a1191a5599059f18a1b819ed987c9ea5a00f19e998cf9deb9fa3180099959d4e9f5318a1984b9d789fcc17ec995c9d8f9f8b17ec995c9d8f9f8b1744847c8a92892e0144847c8a92892e0123186e1bf31b261e451d4b220e241a26e21df6211e24bc26661da321b523a2265a1d9021b4231f27d61cc620092342271b1bf31e9c2135273e197d1c02201a277b15c618511d1b2705073b91cc170827b094a9987f8c9f26d397689b3293b3268f99829c41997e26529ba69d439c3926b79c6f9fff9d3626e79d65a0f19f0f26729e19a18aa0c6251c9f67a11ba17525a09fc2a153a14d25869fa6a13ea1d624739feea1c4a1832400a01aa220a34a24f5a094a2f7a24824399edfa12fa1b02395a0cfa199261b24c69f56a235302524e69f2ca202306c2389a0ffa2f82c8f2373a018a4e3a0fc2369a1c9a3b8ac3c2300a041a247a5ae21679fb1a2bfa48b211e9f6ca3bba5a921189fefa234a5fe20b29e69a331a5f620829e22a309a58a202f9e12a306a538203a9e25a335a50420549edba217a5781f069ea8a2e3a4df1e989d90a2d2a4711e439d3ea2a4a4fa1d069de7a14ba4851dc99ca6a109a4291d759c4ba184a3c71c4b9ceda010a34a1c0e9c98a09ca2e81b999b51a047a2281bfe9a0da0e0a1b81ae69ac49f90a1331a599a2c9f0fa1a119cd99de9eb8a0641943996b9e58a0f318c398fc9d08a08718a698979d909f551895985a9d1f9f12185f980a9dda9ec017af979b9c999ea015af979b9c999ea015bb87618958887506bb876189588875066e18201b051c031d2f1d0f22042480259a1d312246247b26f01cd021dd236026b11c7e218623c026371c9e20c2222227471ab41e3a211527e117a41aad1eea2675137c14a71bc926a58684942313b8267f95bc9af29590268798059d909b6226199a209edc9c13269d9b499f029ee1253e9cea9f1c9fa225299d95a025a07225cc9ddea05fa01e25829e3aa13da1fc24319f8ca1b2a1d2244c9fc7a1d6a19824359f9da1eca15f24659fb3a148a23424729f08a222a32f2496a018a367a3312414a15da1b6a08a2205a093a18b26ad22f6a047a2882f092449a2c9a16b2dae2272a088a2da9db822c89ea0a103aa0a21429ee9a0cfa31520009f1fa226a4bf20c09dd2a2d1a4ea20df9f3ca29ba46f20589ee7a2f6a4aa20a29ee6a2f6a47520659ef0a239a55820729e1aa358a50d20039e09a31ba5ab1f9c9deea2eda43e1f429daea2c8a4b81e119d5fa292a4411ee39c0da261a4cd1d9c9caea129a4521d3f9c4fa1daa3bc1ce99bd9a052a3541c479b84a0bea2c51b109b2fa01da2ef1ad59ac69faaa1711a1e9b8b9f63a1161a449b4b9f0aa1b8191b9bf99edda07919e59a999eada016193e9a279e59a0a918c299d69d39a078185d99959d05a02618dc98439dc49fe817b698059d079fc416b698059d079fc41600003f8a918b230100003f8a918b2301fb1c8a2199237a244e1d82224a24cc254e1dda213524e3254c1dbd211624dd255c1dbe213a246d269c1c00214623e4264d1ab01e7621a2267b17b31aab1e8826e70f340b4e193f26f88fed98bc8cfd25ad96a89c5399b525fb98e89d679ca225459a1e9f7f9d8e25879bc49f879e6725509c31a0779f4325f09c4da0de9f0d25c29d8ea067a0e5243c9ecca0a5a0a824b29e2ca1e2a09024d69e43a15aa16224ef9e4da1bba11724ff9e5ba1e6a1a223289f60a11ca2e8224a9f8ea187a2c02256a0eaa1b4a26722c2a2e2a115a29921de9f88a2772304248ba1c6a17728662386a453a286a8b82244a1d7a14aa5802107a111a1dba35a20e79d77a137a44420759d82a14da41420729eb1a166a449203e9f57a2c9a48720789f69a382a5d420079fa2a390a5d020df9e70a34ca571208e9e72a310a51d20259e3ea310a5ab1fa09de3a2eba41a1f319d56a298a4601ee49cf0a14da4a01db19c89a104a4201d609c2da16aa39f1c499cdaa0dca2481c1f9c90a06aa2901be69b4da003a2211b4d9b0ba0a2a1861af19aaf9f58a1f7192b9a1c9ff4a09419a299c49ea8a029196c997e9e76a0dc1875993e9e3ba096182c99019e16a07618f498d59db79f3318e498839dad9fc71704984f9d03a03f1704984f9d03a03f170000518edc9037050000518edc903705f01b87202e224824ee1ccf21032492253c1d87212224b525cb1c81211424c625e41c142249244f26a41c11225b240127701afc1f2322d526e2165b1a191eee257906c79198135c256d94e99b839910257e97a69d0e9dcd2478984a9eff9db8247099779e5d9ebf24719a1a9fc49eec24309b389f0b9f0625289cb89fc79fda24ba9c22a011a0bb24609d9da08ba07a24c09dd2a0f0a040244a9e05a122a10b24529e34a176a1ef23b69e40a1aea1bf233a9f20a1fda16723909f3da127a255233ea06ba149a23223289e33a1a8a23922649ce49f6da10e205693689f46a2cc1e9d99c1a00ba4e61f4f9de4a0f4a1821fec9dcaa0e6a2011faa9deba0c1a2501e7a9d15a132a3861eb79d65a105a4f31e139e52a2a1a42520879e6aa349a5bb20a69ef4a3aea5cc206b9ec5a365a55e201c9e22a30ea5c01fe59dc0a2c0a4231f469d7aa286a4981e289d4da272a42f1e199df2a141a4b41df79c77a1efa3301dba9c04a14da3971c829cb3a0e7a20c1c6d9c76a08fa2ad1b419c46a03ca22a1bf19b0da0eaa1c91a419bcf9f87a15f1a859a599f29a1ff19ee99fd9ee3a08b195399869e8ba01619f298359e5aa0c018c798d79d08a08518c2988c9db49f2b187b98459d4e9f86177f98e39c409eaa167f98e39c409eaa160000698ce68e55000000698ce68e5500f31bb61f6a22de23c31c6f218b230525981c2c21ff220325dc1c672149238325bc1cbe2111241e26081d9e22af245827861c97211d24062797160f19b71c2025a5949d9d349d37243498689fbb9fc423b6986a9ff19f87232399e89e569f3d249399a09ea79e4e24479adf9e1c9f8124969a0d9f1b9fa7244b9bfd9e249fa524499cb59fa69fc124d29c59a044a0ed244b9d7ca0bca0cb24bc9da4a00fa18324369e82a030a13b240a9eafa06ca108243a9ec8a09aa1d123949efaa038a2bb23359f53a1a4a2a323459f60a120a33223249e37a1cda2c521fa9cd2a0a4a28f209b9c4da026a2521f6a9c0fa017a2ba1de09c15a006a2701c359d05a0efa1421c559dde9fc4a1db1caf9d72a0bfa2df1d469ff7a142a4492000a0d1a36fa54a215d9f51a4cda55121639e06a492a5ec20459ed0a34da59b20129e28a3efa4d51f829d61a26da4ba1efa9ccea103a4d61d769c57a161a3301d3d9cfca0eca2aa1c039ca0a083a2491c8c9b4aa01ba2bf1b329b10a0b4a1111bf09aa79f56a1a91a619a309f28a1171a0d9af09e00a1b819a299a69edda07b193e99409e9ca01219c298c89d74a09d18a098809d02a02e187998439d689f0c1865980f9dff9ea2172c98049d709f7a17b097d29c059fe815b097d29c059fe81500000000f485000000000000f4850000fe175d1c671eb2208b1cc02087229b248c1a361f2d213a24121be41fe1219524171b6d20de223525d91c182324253f277a1e242541275728c00ea20e4410e024f19a32a329a4cc1cb7997aa1d9a1c31e2299bc9f09a0062271982c9ea69d36240499bb9da59cb5246899929dfc9cbc24c299d99d559dc824809a0e9eb49db224ee9a639e239eb724d99bf89ef89eb0249d9c589fde9fa624169dd59f53a09224a09d31a0e7a07524f29d9da040a14924479e12a1dfa11b24979e30a16ba2f423de9e31a15fa25923a99e3ea187a2b422309e2fa1ada2b521799dc1a053a27e204f9d3ba0f6a1e51e789d989f8ca1a91c199d729eb8a07119379c799dd29fe216be9b719c179f9e18f89c9c9ebea09c1bbf9e11a240a49b1f1fa0bba464a605221da0f2a494a65c22619e10a4bba5fd209e9d28a347a50e208e9d4fa25fa4e41e5d9dc8a1f9a31a1edb9c7aa1b6a3821d679c1ea18da3161d1a9cb6a020a3931cbf9b7ca071a2331c779b3da0f7a1a71b629bef9f8ea12a1b429b779f26a1911ad19a0b9fcca00a1a689aa69e7ea08b19bd99209e34a008196599da9dfe9fcf18cc98809da09f70187f98289d4c9f17183198ea9c059fe3171398b69cd89e1c175c977d9cbf9ef0168897629c159e43168897629c159e4316908d6e9405958f95908d6e9405958f95e3173d1ce51d4620951a021ef11fa023c41a4d1d921f9423b219731cd01e9e236b18c91a951d6123e61418185b1c832234160a1c721fe027ff18191dd4224828db06db8c211936275d8beb933109de234394d597e393aa24409516999d96c9246896589a87988a244398939b129a9b24b898479c649b9224c399de9cba9c9324809a959d459d8324eb9a2d9e639e7124189c139f439f78245f9cba9f15a04624bf9c14a058a01b24439d34a007a13a23d69ddca069a12523439dd8a0c5a14d22319dd9a01fa2f821669dc7a024a27b218b9dd3a054a2ba20759db6a02fa21a20889d56a080a10a1f129dc09f31a1ae1df79ba99e96a0001be0991a9a849c1114d69621174e15879b1e9a7c12cf8d0d9c139ea8a292a44a2069a0ada685a8502459a0c6a5f4a74f23bb9fe2a353a50821519e15a238a4451f7e9dd2a11fa4a51e879c93a125a4261e3b9cffa071a3351d299c72a068a2861c009c3ba0d7a1341c039c0ba09ea1bf1bc79bc19f74a1411b799b6f9f4ea1b11aaa9ae79e24a10e1a579a889ebba09419dc990b9e4aa005197999a39d08a0ae186499679dc09f69181999449d569f4d18f598309d3d9f1d18b7980f9d0d9fe1177298fb9cf69e4517c197799cbe9e2317ca96cd9bac9d5415ca96cd9bac9d5415000000008381000000000000838100007c161c1a6f1c461ec919c41d8f1fff22b219331d711f9022db18791c691e2e2252189d1a121d5d210a15b41693191c1eba09600e28131018bb0c7810a914e11c90101b114c175622290aa987c6151924ac8f7f9460895724d894bb98f39544240797299b3c9a3b249d983b9c149c23247899109db09cf323229a6c9d459dac23aa9afb9de19d8123629b3a9e839e4523ca9b709e0e9fea22199cb39e6a9f7322829c1e9f0fa01722cc9c879f55a00d22e69cca9fb9a0bb21ca9c01a015a12621c19cdf9f0da1c820009d21a03ba18b20429d25a061a125206c9d1da078a1991fcc9d11a07da1601fe39d29a09aa13c1f2f9eef9f5da17b1e479da99e3ca1181d3898059d58a07b1b86182a24572589a4f8a0d8a569a7e422d8a030a8aca908263c9803a150a4a81e2b9b1ea052a2521d7e9c8ea03aa26c1d569c5fa009a2e91c039c16a0c5a16d1c199ceb9f93a1081c679b949f74a1881b159b609f54a10e1bce9a159f1ba1841a299a9a9ee1a0ea191e9a5f9e7ea07b19009ae99d32a01719b699919d00a0a81851995d9da49f4e181299169d589f2218de98fc9c349f0c18c698f29ceb9eef178698cb9caa9e8d174d98ad9c6d9e98173398969c3f9e3a17be97519c0e9ead161197039c7d9dbc151197039c7d9dbc1500003e807d02ba0000003e807d02ba003e197b1cf91e28210319ec1c072037229418561cab1ed9213818601ba61d6021501610191e1cb71f6e1268150119491d101038140a17a61e00125c147a18292211114b107717c823cf09858d28120d24ca8eff95588fe6230c94d098bf96d823d695989ace99ad239e97f29b0f9b8c232d98589c659c4c23b8989f9c9c9cd3225699dc9c1a9d5b22d299069d499dc3210e9b189d6b9d3b21699aff9c7e9d87203a9ab59c639dca1fbb9ae59c8f9d9a1fa59a039d259e301fc09b5d9d769e461f569cd09df89e4a1fd89cd49d3c9ff91e1b9d2c9ee09fbc1ed69c349e27a07b1ee29c659e76a0421eae9cd69ec6a0061e659cdc9ecaa0aa1db39c5b9ff6a0801d869c19a0e5a1ac1d6e9a009edf9f181c4289e68d2391430db88cf38e0794080d0d98a29a519d6718099b339e5ba05d1bb79bff9ee3a0bb1b4f9cea9ecda0a31bc39ccc9ecaa01f1b539ca99e8ba0e31aae9a699e60a0731a499a1f9e43a0151a039a0e9e3ba0c919df99df9d19a06419a499c39d06a039196f99909dc19fd9182799539d779fa3181a99319d4b9f5718ed98079d0f9f1518de98dc9cd59ee417a698a99c969e921777988e9c5d9e2d174998679c169eba1632984e9ce09d5d1603982e9cc29d6216cb96a99b159d4b15cb96a99b159d4b1500003c0dfb10440000003c0dfb1044008c190d1d5c1e84204f19511d451ff821ce17601b691dee206b1697194a1c31208b14931797192b1e9813f715ac18651ebc11e215421903212211de143e19b222690fe91146188c237e03cc8637157c23f98d7f93d70e212382910497ce8edc22839434995096ec224e96799af398d6226c97b09bb19a982214982a9cb39b3f229b98609c309c97210c99799c719cc8207899279c5a9c09201a9a379cc39c531f8a9a799c079de31edb9ae09c999db61ef89a109d2c9e971ee19a5e9dad9e511eb39a839dfe9e2e1e919aa59d459f091ea79acd9db49fec1dea9a059ef39fc51d3f9b409e25a0be1d779b6a9e4aa08a1d5c9b749e87a0581d509bcc9ed2a0541d159bef9e23a13e1d629ade9e1da10e1d2099e69d3da0c71b0698839c769ebe191898cd9b7b9d9b189597589b999d47175598499cb89e7718a198af9c689fa5183b99239df99f1a19af997f9d1ea07519249aae9d31a0a4193f9aae9d37a091190b9aa09d23a07019bf99779d07a037197599459dc09fd4182c99249d7c9f85180199f59c449f3b18db98da9c299f1618da98bb9cfd9efa17aa98a59cdb9ebc176598849c999e34172798669c699ecc1604983c9c139e8d169c971b9ccf9d13162497f39b939daf15c796719b079de614c796719b079de614000000000000000000003c0dfb1044008c190d1d5c1e84204f19511d451ff821ce17601b691dee206b1697194a1c31208b14931797192b1e9813f715ac18651ebc11e215421903212211de143e19b222690fe91146188c237e03cc8637157c23f98d7f93d70e212382910497ce8edc22839434995096ec224e96799af398d6226c97b09bb19a982214982a9cb39b3f229b98609c309c97210c99799c719cc8207899279c5a9c09201a9a379cc39c531f8a9a799c079de31edb9ae09c999db61ef89a109d2c9e971ee19a5e9dad9e511eb39a839dfe9e2e1e919aa59d459f091ea79acd9db49fec1dea9a059ef39fc51d3f9b409e25a0be1d779b6a9e4aa08a1d5c9b749e87a0581d509bcc9ed2a0541d159bef9e23a13e1d629ade9e1da10e1d2099e69d3da0c71b0698839c769ebe191898cd9b7b9d9b189597589b999d47175598499cb89e7718a198af9c689fa5183b99239df99f1a19af997f9d1ea07519249aae9d31a0a4193f9aae9d37a091190b9aa09d23a07019bf99779d07a037197599459dc09fd4182c99249d7c9f85180199f59c449f3b18db98da9c299f1618da98bb9cfd9efa17aa98a59cdb9ebc176598849c999e34172798669c699ecc1604983c9c139e8d169c971b9ccf9d13162497f39b939daf15c796719b079de61400000000000000000000000000000000a4215d1529191a164928951c49205422fc290e1f2b20f5242b2b001f3320d125222b4f1cef1d1a254e285d19431aa723ca226d14661747193f203d13d113bb94c7203c0c03095992e12273167a199299292a0c14ce179021742cd3107a189324ad32c41a671deb27e324a69cce1b1128e31ad5a5c5a3c2291219b4a1ef23ea28c7a1279e9a2986292eac11a5072cae27d1aa40a4d42a001fbaa958a47a2a38236aa746a265295621a4a1b4a2c126e422fd9f34a26d255f22ab9eaaa10d25d121369e5ba139248021599f19a1d8241921c99c14a1b4223a217b9a829f501c48206799389e529f6d1d179de2a021a4a419a5a0dda38da7959a81a30ca818ac272319a25ba870ac2d24089f95a40fa92e202b9c5fa10fa5681d9d9bf2a0a2a38f1dec9b84a0c2a2351d329ca3a0f4a2441dc89b68a05da2f01c529bd89fe1a1551c5d9a509f32a1aa1ba199e39ed3a01e1b359a2b9fe3a0201b879a359feea0111b149afe9ec8a0961a8899ba9ebca0411a3099739e98a0c319dc981e9e71a03e19fd98ea9d55a011190699e89d48a0db180c99d79d1fa0bf188e98a19da09f6218ea97289daa9e23183997d09c1f9e7f17d996ad9c3d9e0d174497bb9c6d9e0e177397ac9c569ebe163197aa9c0b9ea91623975c9c439d38160000000000000000a4215d1529191a16a4215d1529191a164928951c49205422fc290e1f2b20f5242b2b001f3320d125222b4f1cef1d1a254e285d19431aa723ca226d14661747193f203d13d113bb94c7203c0c03095992e12273167a199299292a0c14ce179021742cd3107a189324ad32c41a671deb27e324a69cce1b1128e31ad5a5c5a3c2291219b4a1ef23ea28c7a1279e9a2986292eac11a5072cae27d1aa40a4d42a001fbaa958a47a2a38236aa746a265295621a4a1b4a2c126e422fd9f34a26d255f22ab9eaaa10d25d121369e5ba139248021599f19a1d8241921c99c14a1b4223a217b9a829f501c48206799389e529f6d1d179de2a021a4a419a5a0dda38da7959a81a30ca818ac272319a25ba870ac2d24089f95a40fa92e202b9c5fa10fa5681d9d9bf2a0a2a38f1dec9b84a0c2a2351d329ca3a0f4a2441dc89b68a05da2f01c529bd89fe1a1551c5d9a509f32a1aa1ba199e39ed3a01e1b359a2b9fe3a0201b879a359feea0111b149afe9ec8a0961a8899ba9ebca0411a3099739e98a0c319dc981e9e71a03e19fd98ea9d55a011190699e89d48a0db180c99d79d1fa0bf188e98a19da09f6218ea97289daa9e23183997d09c1f9e7f17d996ad9c3d9e0d174497bb9c6d9e0e177397ac9c569ebe163197aa9c0b9ea91623975c9c439d381623975c9c439d3816ba17000005120000ba1700000512000069288b205c224b24242bce210023d825112c4d21332238261e2c451d471e45266e294213130b66255297bc955c96131ea98bfe0ea60a3e95830700004e130000ce15f415d219ba995b251f1acc1d08245d296d19fc201a264e2239219d2300289028b6220e2624294320849c6921152abca814a1cf1c1a2a9cacc49f0f289f28e2ad78a4ae296d2639ac55a5402c852035ac8ea5d62c2f2154a996a4d62a132249a69aa3e82738225aa46aa338266a239ca5a7a2552828231ea239a2a12708230aa09da14e9d6e2257a23c9f502624229b9dae9cc226b521339c77988e1d121d719c329914a9b994c89dbf9fdfab079cc8a1b3a49bac4a1c69a053a643ac7920459fa5a59daa1520099e25a479a8641e869de2a296a6901d2f9dd4a13aa5041d4d9c74a110a4fc1c459c0aa13fa3be1c4f9ba0a0d5a2791c0e9b32a01da2001cd09ae89f7ba1721b7f9b1aa086a1f11b869b05a06ba1791ba09a5d9ff7a0d91ac899f59ebea0631aa099c49e8ca0f8199a99a79e74a0a2194699849e56a072191899619e39a01f192199489e27a00a19c798049eec9faf185798b39d849f70189097699d139f2a186597229de49ec01750970d9d969e9e174f97c09c6c9e0617b3966e9c509e8d16d996ec9aa69c0514d996ec9aa69c0514880d4c0d0e13340b880d4c0d0e13340b6525ca20f3234b258129bf211e23ca268f2bfe20e621f026552c7e1fb020f626652c4e1c171dd025192a56152f175d221724ec0ef3139786f228f91533133b20a328a88d090c022319286f88a9168924ea276098a09184260619b18c0e1f8d270aa97d0d0a21c72679aa259c0a1e012805a77d9e451e98280dac39a388237d2821ad89a493269c2734acd8a44b2aea250eaa76a4c72cb92479a883a4b32b0525f2a594a44828ec24c9a437a467276924f1a1c0a318296c2464a115a1462aa92327a030a14d20d223dc9c6d9f1f225823929c8a9fcb161a23259e85a0cba141238b9ea3a086a61121f99dbda157ab941f269e1ca4e3ac9e20959f04a550ac452003a0d1a460aa501fb09e5aa47ca8531f7b9d07a4f1a7071f859d67a36ba6911e5c9d6ba212a5351efd9ca4a135a4ad1d4a9c34a196a34e1dea9be9a006a3f01c919ba8a0d6a2b01c969b99a08ea2931c259b60a030a22f1cb19a25a0a6a1a11bdc99b69f5aa1d31a8899619f0da1461af298d89ebfa09519d998809e8ca02819c198549e5ba0f618c298289e3ba0af188d98f09d0ca060187098b89d9c9f37183b988f9d3d9f18184198699d109fb8170698239de79e6c170598019df19efe161f97e29c069f97166a978e9c039e95166a978e9c039e951600005e0f4b0f360400005e0f4b0f3604c820131ffc207823b2275f21f1229e26772a312160223e27552c152007215b27be2cc51d161fee26e32cc81b3c1dd0268f2c55190a1c9f26bb2ba518661bbe26ab2a8a169a19f32664294c13b819412763288b90000cce272826690b67198c286522110c971d8c28281bbb9a68193e2812a0159e6c2100280fa942a160212b28a1aa2ba3fa250128bcaa7ca437299327e8a93ca4a22b252677a7b2a3172c4925a4a5f8a3f02a822565a4fda2cb2ad524a6a3d5a2082bd2242ea205a2f22940244ba15ba2842792241da18da27125fd2425a005a1431cc324c19e3aa11ea130246aa048a2e5a6e02351a0d4a28fa905233da0d0a3e8ab0422ba9f4fa4b4ab56214d9e6ba446a98520c49d72a418a82a20389e34a4eea60120fc9d6aa3e1a5f91e6e9d08a370a5861e469dd5a264a5421e2c9d4fa2dda4b41dc19c56a100a4c41c4e9cfca069a3851ca39bbca0dca23e1ce49a75a046a2e31b759a48a00ba2471b169a2ca0f0a1041b1d9a12a0afa1911aea99de9f66a1461aa699889f16a1c4197499369fcca086196d99009f85a023191599ab9e4fa0e5189e98589e19a0a8185198369edf9f6c186b98139ec49f3c186198c89d7e9f14186698ae9d299fc0170498659df19e31176097109d059ffd166097109d059ffd160000d190ba8f518c0000d190ba8f518ccd1cde1d6520fd225a248f2100237526ba28102174225427892bf0204022e427f32c6220c7210d28702dd81ec7200428fc2cb91c691fc0277e2c741c881eaf27302c601b991ea6274b2bad193f1f7a27ae29ff18561e8d270128fb14461d1428dd24f691e11c01289b14dd9bac142828cda0f99ebb1dd02742a854a1070ffd279aa956a2cb21bf2775aa95a405289627f9a907a41e2a3f2690a6d9a32f2c062680a515a47b2bfc2516a5cda2062c392594a3d9a2d12a41250aa2dca251292b25bea250a38b28432521a1a9a21d25bc24e4a08ca2d91b9924caa060a2cea12d241ea079a227a7ae235ea001a3b8a901237e9fe0a352abb122a5a033a408abef21f79ef7a355a99420279eb3a380a81a20b89e0da426a82220a49ee0a3dba6d21f349e67a322a62a1fbe9d08a380a5741e499d43a2cba4ae1dff9cc7a143a42d1da99c79a1e6a3d91c6a9c58a19ca3ac1c2e9c11a13ca3611cb29bc8a0aba2f01bef9a82a05fa2671bbe9a57a0fda1ed1a619a34a0c2a1a01afa99e39f6fa1391ab599659f31a1bb19aa991f9feba085194d99b09ea1a02f190e99549e47a0e6188e98fc9df19f8d186698af9d829f30182a983c9d5f9f07180098279d3b9f6f175797fb9c899f8317bd97c09c939e9016bd97c09c939e901600003b1097129f8a00003b1097129f8a501bb81ef0210223262147224924c026512513226b2486273a29212155239927522ccd209a22e427922d1d20cd2109288a2ddf1e0f214b28342d4e1dcd204c28c62c621c49202f28692c451a2f204028332bf6160a205228e328f28b111e30288a25ba9994174328b41d439d6d8e652800a1c49f6d8e1e289da604a12e980828a2a9d9a2281cda27b8a9dba3b72408280ea843a3da285726bea675a3352b832663a586a3292c752642a4cea2222c5225a4a306a3392b3e259aa2f3a2152a17259ca291a3b0284c25a9a19aa39925e3244ea17ea3681e9924fca058a35fa0372442a041a364a6c423b9a0d8a3b1a9802320a04fa4deab412338a064a4f6aa4b22e39e11a47aa823217f9dfca382a7ac20dc9e1ba443a76c207c9efda3cea62120fa9dbba346a6931fab9d21a3ada5e61e069d8aa25ba53f1ee19c17a230a5ac1d8f9cb3a1cfa43e1d399c67a15ea4ea1c1b9c20a1dba39b1c189cfca002a3411cda9bc4a0a7a2051cd89b87a046a2701b929b5fa0e0a1191b339b25a092a18a1a6e9ab79f3aa1e819089a479fdaa093196c99ce9e90a03519c3985d9e55a0e0186598f99d26a07d184998ba9dea9f2b182198799dad9f08182a98479d4c9fa017ad972a9d259f3617bf97db9c629e0217bf97db9c629e0217000035800000358000003580000035802016ac18cd19f01afa1f15223d24a8265622d2212324a027f6258f21af2311281a2a1d2128232628eb2c3120ec220328e32dbc1ef6211a28e52dc41d34212e28432d6c1c49202928902c65197f1e53287e2b37153b1d7728a0295c92a71c6828a1279999191c1a284c24309dcd1b442807a114a0f414412857a64ea1ca9cb32739a9b0a20d9bcd2752a905a43e1db52725a656a3bf249a2619a522a44a2a022753a504a4582cb12631a482a2962c3b258da3dfa2152c542513a3c7a2982b032521a3fca2742aed2436a201a33328a02443a109a34323572432a1a9a3849e4a24d3a095a37fa7ef2324a148a4e4aaae23809f45a45bacc922809f7aa428aa5a22a69e28a493a74e21c49d4ea491a7f720969e5ba4d9a7b1204a9ef4a3b4a60120839d23a394a5e61e609defa226a5881e5d9daea216a5361e5b9d53a2d3a4bd1dec9cc6a15ca4511dae9ca3a1fea3101d419c54a194a3991c269c0ea129a3511ce49bd5a0dba2141cd69ba7a080a28d1ba79b7aa04da22f1b569b36a0fca1c21af09a1ea0c3a1591ad59af39f70a1201a859a889f3ba1a3193d9a209fd8a05519589a6d9e30a0b818e799f49d8f9f3d180199cc9d919f2c18b3989d9d8b9fec172498519d1c9f16170c988f9ccd9d4a150c988f9ccd9d4a150000cc81d4805c000000cc81d4805c00281611182b19a01a331f2d223b2491261921c3228c241d282f22cd212f24d127b2262721bb23ed272f2bf81f9a2288279c2d2d1fb3211b283d2e5a1ef7206228f92dbb1c37208428442d721a831e4f28342c0a12511c4f28372a2b97c3183128f827779b401403283e23da9d140ef427e19dbfa0cd941a281aa73ea10e9cbd2790a8a1a19c9dc92700a8aba1e40e9e26cda580a260183d260ea47ea3cb265a2669a38ca38a2b2e261ba252a3202db825c4a322a3bc2cb22550a3c5a2932c012513a255a3432b092556a1c8a31129e124aaa19da31f2573242ba2c0a34d953c24ffa0bda321a7bd23eea0f9a3a7aa54236ea020a43cacdc22a19e6fa3aca96621659fd7a335a83421139f09a48ba7cb20e49f2aa4fca69d20209ff8a39aa62e20279e8da301a6b51fb29d0da380a5d11e909daea231a54a1e749d7ea203a5f71d3e9d49a2cda4b31d469d36a2a4a47f1dfd9ce6a15da4041d8c9c80a109a4901ce09bffa083a31a1c4e9ba5a00da3891bb89a66a0a4a2dc1aad9a3ea041a25b1a719a08a0d0a10a1a469aa59f6ba18e198b990a9f01a11d191799969eb8a0c918da984f9e8da07118d498319e6ca03818bf980f9e4ba02e18ac98e99d13a013187698b79df99fb5176098949d9a9f6e166098949d9a9f6e160000db811581db810000db811581db814616ea1703197519441f09227724ff25fd1f7b2351251328262033227524f9277221992193236d283a26c01fb822e927e32b831e4822b727172e0f1dd020fa27ba2ea91aa51ef027172ece166e1d4928cc2cfb91a51b4528682ba498ee183828c628759cd40d2a286524079fde961128029ea8a0119c9d27f3a66da1e89d4b27aca81ca2a4a020278aa51ca2079fdc26a3a32ca31a9ee126dea4aca3361a802670a51fa471281b2672a4a5a2ec2ce02572a3aaa2652db12595a428a31d2d8c250aa332a3852c14256ea25ba3a22aba2400a175a38d275b2438a1f0a39d153e2493a01da4c3a606246aa063a400abe323b99f85a448ac5923bb9e56a40ca98522949ee7a3bca655212f9efaa380a6ee20ec9e05a49aa6c1208f9ed9a387a68220389eaca371a62e20e69d2da33ca69c1fa09df1a2aba5e61e699dc0a238a55d1e189d88a2e1a4031ee69c4aa2b5a4a61db89c00a25fa4431d6b9c8ea10ca4d11c0d9c19a192a3411cd09bd3a001a3f41b4e9b99a0a1a24d1b079b5da029a2ed1aae9a1da0c0a1581a5d9ac49f57a1d019c599389feca067192999a09e6da0d018e498249e2aa05f189c98cd9da59fbd1759989c9d5c9f911779988e9d499f52178a98a09d809fd71737981b9dc79e4a1737981b9dc79e4a1700005881a781588100005881a78158819e152a18c818e019301fd822c624b6267f1f2c230a251e28aa1ff8215224e0279c1fb421b223472878210320a92341286b26eb1c0922a027232c901bc1203328902eb61aae1e0d28ad2e4e18bb1d46288f2d268c7b1b8128592cb098dc1855286429559c660d1b284b259d9e3e94a727459eb9a0169dd927b0a7b7a13ca0b0276da751a289a01727c5a2b6a127a04e267ba3b1a2f3a0a2266da14ea324a04626e4a287a34d218625f4a1e1a3f62aae257fa20aa3912d75253ba345a3392e4625cea135a33d2dc224c2a157a3452c8224cca2c0a31729552463a22aa49e1f422438a163a47ea61e24d8a0c9a317ac9422029f8ca323ace221029e91a390a77621209f13a3eea58b20fd9eb5a317a69920189fcaa349a683208b9fe4a333a65220d19fa5a3aca50320609f75a3a8a54e1fb69e24a364a5d11e169ed6a23da55c1e9a9da8a207a5f71d559d75a2d4a47e1ded9c19a294a4101d859cc5a146a4ae1c299c6ea1fca35b1c0f9c3da17ca30a1cce9b0aa115a3771b9e9bd8a0b9a2171b609b97a07fa2b91a249b63a053a23c1aaf9a16a019a2ce191a9a8c9fa2a15d19249a109fd3a0eb18649ab89e81a0ad182c9a5b9e4ba07a18ce992e9e08a036187099cb9dc99f1f1842983e9d169f1d1642983e9d169f1d160000638189806381000063818980638181155f18ef18051a841e2d22392479264f1f0e2279245f27201fa4211624f827b81e7d2115244628a51e8320f6226c2819202a1f2d223f281c26f31c60213628342cba1a4f208f28282e1617651e65286e2ee98b471c2c283d2d8f988b182628de2acb9cd58c5d27e626bf9ec59a44274ba0e4a0429e96277ca64fa11a9f782764a451a17e9f9d26c4a0e8a1baa0a826f8a057a2a9a064260ba3f2a130a0b225a1a356a2e09bc32592a0bba2bf251225e7a2c7a2c42c352586a207a47a2e6d255da298a3472ee22434a173a3192d7624e6a0b6a3902a4f24aaa122a45d24392452a125a456a5ef2319a282a3e7ab942268a0f8a32aabb422709e00a467a6d621f99ed8a302a63521619fb7a3d5a5e120129fbaa3f9a58a20c19eeca361a68520839edfa333a64c20689e3da390a5af1f199edea22fa5011fa69db9a21ea56c1e279d80a2d8a40e1eeb9c41a297a4b11da49cefa162a4441d759cc2a130a4dc1c3e9c89a10aa4921c389c44a1e0a34b1c259c05a198a3e01be79bdea04ca38d1b779b96a0e1a2ea1a029b54a072a2871a6a9aea9fdca1dc1971992d9f45a15119cb98739ebba0af189c98d59d45a02618a998c29d0ca02518aa98a29d899ff217cf97019ddb9e6717f896329ce89dbb15f896329ce89dbb1500003e815780bf8000003e815780bf80e6148b16ae170c1ae01dae2140247626a71e722200256d27a21ef8219e2495276b1e9021402404281f1ed820ab234028c01c9c1ebb223028a21d091b64223228b324d6189c20ac282e2a5a0c4d1ea828012d3b97f5196c284a2da19af5133d287b2bbe9c0d9665279726c59e349c692771a097a0c79e3d270aa4f4a0ca9fdb26c7a02fa29ea0d426c7a108a20aa1152676a380a296a02226e1a2e0a1f0a0a1251fa45fa2dd9d9c2576a22ba3f8998f2552a10ba36728be2469a058a3112ee224c4a0b8a3dd2feb249ca0f1a3062ff42486a1c9a3ae2c7c2493a2aaa300280324baa0c6a399a39b2371a06ea327ac8322629f1ba491aa5622d19f7aa3d6a63a211ea032a486a69e21279fe2a3d9a6f820bf9e15a48ba6e620d39ee7a308a68620b39e6ca392a510206e9e5ca386a5831f4a9e45a391a5521f3d9e2ba399a5ef1ecf9dcea267a56c1e5c9d5aa211a5d91d049df7a18da45b1da59c87a13ba4d91c439c39a103a45c1c1a9c0da1c8a32a1cb89bdea087a3a31b9e9ba3a03ca3101b189b6ba0dda2791a0d9b2aa057a2191aa89aad9fb3a19e19379a219f27a11019ab99959ea5a095188e99519e70a042189a993f9e56a01e18fc99249e2ca0d217ad99e09df99fd51798982c9d0a9fd11698982c9d0a9fd1160000a182408160800000a182408160806c152e182019711ab21dfb2122241a260d1fae22a4249927991e0a227e24ab273d1e85214824db27801d7a2077231228511cbc1e9622c4278f19f21be0201028a1180c15c71d52281f2070921a1a752883268f977a185a280329509ae28c96277628e59c569a8c2646223f9fc39d3127089e9ca0919e0827989fd6a07f9f4a26529fffa06fa0dd258ba120a23ba12e269ba0d6a256a2aa2569a0aba234a22b25a4a017a35ba2192584a09aa345a21e25a2a1a7a214984d2428a246a2bf2b522431a019a3bc2faf2474a0a6a30a308a246ca087a2022e9323c1a061a23e2ab22220a135a436a4ad23fba083a322ad2622a19e6aa35ba970215f9fb0a316a56f210b9f8fa378a504214d9fb5a3faa5f02048a00ba413a6cc20e49f7ba3b2a54d20509f56a377a50720499f68a36ea5c71f1b9f4ba388a5711f9d9e21a381a5fd1ef39deca267a5871e669dafa20aa5131e129d49a2a0a4941d949cdaa13ca4141d3c9c83a1fea3ac1c1d9c40a196a3481ccd9bffa04ba3081c9a9bcaa0f4a26f1b5c9b7aa084a2f31a459b3ba01aa28f1af39ad39f8ea1f8196d9a509f10a19319be99b29ea7a004197d99739e68a08a1841992d9e4ba065183099f39d2ea03c183c997a9dbf9fbb17e598ca9ca69eb615e598ca9ca69eb615000089815281388000008981528138808114671774188019f01dbf2299243026141e6a22b0240027b21dea215d246a27c81dcd215a24db272d1d9820e0231e28241b311ee5211a285418e51ad920df272b12c814871ef327e70f4d97251845285e15399a94139a279e1ac59be2954926781be69c5e995726c390889d8b9bfd25169ced9ec19cb125ae9e46a08a9fe32554a1f7a073a0de2552a0dfa1e9a025265ba00fa26ca199257da00da29ba13525d6a04fa2eba1282578a077a229a2e02432a170a3e1a2af242fa259a21e187823959f93a27f2d1924539f9fa23830e323a9a189a3e42e2824b6a044a30c2ca423baa07ea3a5a24e2351a153a3f6ac5622539dfca226a6a221bc9f5ea3ffa56f2152a095a3d2a5212133a0baa387a6f22011a088a374a5a620ed9f91a36ba53e20769fada386a51b20239fafa38ba5bd1f6e9e8ba367a5641fe09d44a33ea5bf1e549de2a2f0a4251ef29c9ca2aca4d81daf9c38a273a45f1d7b9cdaa12fa4141d639c8ca1d3a3b31c5a9c3da165a3461c469ceea008a3f31b4a9c9fa0a2a2411b059c5ea034a2c81a659b1fa0e8a1651aaa9ac69f9ea1dd19029a649f49a1a2197499289f30a14c190799999eaea0cb18e598df9d11a05d18ec98939d799f0f188d984a9d689f2217a79a949dd39e8816a79a949dd39e88160000c1922893fc100000c1922893fc10791b4b20742152231e1e0f23be2482261a1e6b227f24eb26aa1d1a2271243627a11ddd2133247527f71ce0202f23a227791bed1e47218b270f19931b9f1e4c27b714af14711a8c2746903098b18c64275e956c9baf95d2263c98d99c33961827719af89d439aaf267a9c479e019c06266e9d5f9fc89dd5253d9f8ba027a0f825fe9e71a117a1ec2522a00ca2b7a1ad2512a027a2dda15f2516a025a224a2fc2410a067a271a2a3242ca090a269a364247da07aa29ca31f24769f41a222a3cc23d1a0cfa107248a234c9f4ea2c92e0024159f54a21830d522dba06ea3ec2c3d2357a099a31ba30d23fea0a5a2feacdd210ba038a22ca51921d49e8da2bba40021349e1aa371a51821a69f12a341a5c920bc9e6ca332a589208d9e5ba320a53220589e3da32aa50c20809e6aa36fa5af1f3d9e3ca37ea5161f099e16a354a5931eae9dd3a224a5301e549d8aa2f6a4b61d269d2ca2a1a4441deb9ce1a13ea4e71cad9c88a1d9a3901c829c24a156a3141c559cc9a0d3a2821b219c7fa072a2fb1a9e9b34a0f9a1571a4c9bf39fa8a1ff19b49a6c9f39a16f190a9a069fd8a033194b99889e7fa0bf18d398259e2aa05318a398b39dc99f1a18a198729d539fae174a98249df79e19171b98989c769eca141b98989c769eca140000d5922e9426110000d5922e942611181bb31f12218f22601ee32340256c26131ec422d9248b266b1d50228624f126fc1cac21072445276a1c902007238427431aaf1d9920382780161518b41ddc2632108e916f19e326d9912199e38cd126b0975a9c9b99b2265a99949d6b9c86268d9bd49e669d7126de9cfa9f009e33266d9d69a0419ff825cb9db3a055a09825809e81a1e1a075256a9fc8a15da120251da029a2eba100253aa033a25ba2c6242ba023a267a27c2470a060a2dea26d246ba0dca21da45f24a8a043a3dda32f2409a0cda2daa17a2363a031a24e2605233da104a20b2fcc2317a125a2fa2de2222ba056a21a9856220d9f0fa2bbab23219c9d12a2cba4a520139e03a218a46420939ea2a2b1a49820849e65a212a549207c9edaa22ba55220c59e05a30fa53c20ad9e0aa342a51520e19e87a38ca50420799e84a3a6a5ad1ffb9d79a388a5091f8c9d1aa33ca59e1e469dc2a2f3a4121e1b9d62a2b5a4991de09cfca172a4221d849c9ea138a4b61c439c26a1e0a3331cde9bcaa04ba3831bc79b81a0baa2fd1a669b1da01ea2341a9e9bbe9fa4a1d719af9b6d9f33a170196c9b069ff8a03319f69aa79ebba0d518299a309e78a068189499e19d5aa03c183299a39d33a0dd17b698499de99f75177198e69c659f4f167198e69c659f4f1600001c8b7e8ad80200001c8b7e8ad802bc1de522862428252f1e8723eb241426d41d7f229d24f3254c1d9a22bf244726ae1d5622ae24cd268c1c0d21c9230227d019bf1dfd20b9264c152b188d1c6c266c069794361306264e93d49a3293dd25ca962d9d8e9aaf251599649e7e9cad250e9baa9f9b9ddc258c9cdf9fb19eb125de9c41a02c9f8e259a9d58a0ae9f6725169ee6a064a04125919e27a1d1a00125059f81a14ca1c824469fa0a1d2a187248a9fada109a23c24959fcea15ba20124819fe0a1eea28023f19f0aa262a31f2393a18fa213a3bb22b2a1f0a107a3822144a00ca2bf29fb225c9f40a2ae2d7a23eea164a28fa0c722c89d54a1f0a72c21b99ef6a092a42620979e78a127a42820239e9ea15ba4bc1f539ebea186a4cd1fbc9e41a2cda419203d9f17a34ca56c204f9fb6a39ea57e20809fc0a372a55620219fbfa345a50320869e9ea34ca5781ffb9d41a329a5f01e749dc0a2d4a4391e189d3da28aa49e1dd59cd6a133a4141d909c79a1dba3961c729c16a135a31a1c389cc1a0aaa2611b169c6fa03da2e21abd9b2fa0d9a14f1a619bce9f86a1b719aa9a599f1da16119159aea9ebba01f19de999f9e8ea0cf18e899639e52a07f18bd990c9e1aa037187b99e29de99fef17a8985c9da69f11176996cc9c57a065166996cc9c57a065160000248ea18f190d0000248ea18f190d551d2e22f123cf24531d1322a8248a25f61d24229e24cb25451d3e22a8243326271de8225525db26b91ccf2181241b27a619d11dd82063268f130312f119b3251d90579a6b964d251a965f9d079c15253498209e199d2a25ff98429e069e2025b299dd9ee59d4125da9a3a9f739e6b25189cc89fee9e56257b9c38a00ca058259d9d90a087a019258a9e21a141a1fc24189f58a171a1a524f79f77a11fa25824b69faea172a24924d99fc4a187a21f2437a0e1a1e7a2fc2351a003a253a3ed23b5a058a241a3f423019e57a127a433224c9d42a1d6a442211ea02ca480a50e24caa07ba37aa64922be9ddea0bea3671fe69e08a1e4a3081f0f9ef2a03fa3731ec59d0ca119a3df1db89d14a19da3091ec89daaa14ba49e1e5a9e09a311a5fb1fb39e13a4e5a55220c49e3da40ba65620989e03a4cba5bf1f389e2fa324a5dc1eb39dbea2d5a4341e539d86a29ea4f21d459d42a27ba4821d1a9dbca128a4dc1cb39c3ca1a0a3631c5f9cdaa028a3d31b369c93a0cda22c1b009c62a08fa2e11ac59b44a037a26e1a329b0ba0c8a12b1a969a999f54a1a019f399169feca04d197a99b19ea5a003192d99649e64a08d18f798019e1ba05218e998a19dd59ff0178c98609d7b9f95178f98ed9c549ecc168f98ed9c549ecc1600007f8ca08e4b0c00007f8ca08e4b0cf61c0321d32294248a1d2e220e244f25491dea21ea233025151d1a222c24d025641dee22d024e2267a1d3d236d257227c51abb1e8f21c7252a873d9b739a8624f196ca9f16a036244998029f769f20247f981c9ee39d9524d298139e749dda247899499ecf9de724319a839e3c9efb24129ba09ea79ef8246f9c1c9f169fe6242c9d20a011a02d25959d9ca0b7a03825be9d0ca186a117250d9e45a1e8a1db24339e7da14ba2a1247c9e78a197a26224939e97a1caa25824169fbea11ea35424879fefa16aa3232475a02ba20ba4ed23109ffba139a48b22f09b49a11da44921d39ad5a0b3a31520a29b68a005a3541e819c3da0aba2d31c569d1ca083a2c91b579d539fe3a12b1b109d799ffca1f31bdf9d07a142a3c51de79ec2a2bba4fb1f249f55a4f2a5ad20949e5ca41fa696205b9e3ea4d4a553202c9ecea36fa5a91fdc9d10a3daa4da1e609d2da23fa4d91dd09c9aa1baa31e1d809c39a134a3b71c389cd4a0c9a2341ce39b7ba05ba2991b759b42a0f9a1f31a249b07a0a0a1631aa89a879f66a1f819609a2d9f32a18919f899d59efba02c19a599879ecaa0f2180899049eb2a05518d898b49d41a00518a898729dc49fc6179b98319d509f41171d98e59cb89feb16d197cd9c009f6015d197cd9c009f6015e3819984a4822582e3819984a48225821815aa1719188319c91c7120df225924f51baa207222f5243b1b5c200322d924571c1d22422413260f1f52255d271e280e1b8c2059229a263f9bcda3bea489208b9980a10aa2c4201498399fed9fee22b797639d6d9d7924e497f89cc99bed243998cc9c969b00250399b69c2b9cfe24c299609da09c1725b69ab39d239d1625379c9a9e499e3525529d839fc99f49252c9e2fa080a04c25719e6fa0d3a034252a9fb9a01ea10925be9e07a1aca112253a9f79a151a2d824579fefa11fa38c240f9f03a27aa34524b89eb8a150a383237f9e95a13ba3a222889e94a1aca3d621859e63a180a3c020569e5ba07ba2ef1d069ef19e8ba1121b019da69d5ba0b0181d9c799cbe9ea0183f9c859c319f6d19a89d5c9f44a18f1b799ff9a207a5df1eb5a0f0a4a5a69b21879fa6a482a65d216c9e34a4d4a56320c69ddea2c4a4fe1e7e9d2ba230a4e91d2a9db5a100a4681da09c60a1faa3e91c309cfea0aaa3821c269cc2a0f3a2241cc89b63a03ea2701bfc9b1da0b4a1ca1ade9bb39f4aa12d1a4d9b3f9ff3a0a619e19ad09e9fa04f19239a4d9e56a0d2188c99ec9d15a09718e5989c9de69f38189b984e9d839fd2175298129d569f90173798ea9c089fdc1657979e9c0d9f9c169a97869c529e88169a97869c529e8816948a21913a91598e948a21913a91598e2c17f91acb1ccf1d521a7c1e37208023b61a5f1def1f95236d19831cc31e70233c17411a1a1dbf229e14dd1cf51f0227d01b6f20c824892831176819831e6528900a6a875316d223e48b9693b810a42475923297a390cf24ba948a983493b524dc9535993795d524ed97739a3b98f2248a98ac9bd299f024a4995e9c049ce524629afa9ce19c0325ea9bb69dd19d1725ba9ca69eff9e4b25b99cc09f3ca06b25149d97a009a1a325859d6ea112a28e25ee9ec4a1d2a2a324cf9defa17fa3e323639d9da1b6a2a222789dc2a04ba28721e69d0ca16ea22621c79df8a050a24920789dc1a00ca2811fbb9da4a002a2fc1eec9c28a0a8a1701d3c9ca49e90a0641cec994795649ade112a9cbf170718859c759be197129ce197a79e86a480a6b52183a08ca6bca8f023f49ff7a47ca7a621799d54a319a5a51f399d2da26ea45c1ef09ceca157a4e21daf9c68a100a40e1d579cc2a0d5a2721c319c6fa006a2fc1b289c2ba0bea14f1b1e9c0da0bca1d61af49bb49f82a1801a259b479f6da1f919cb9ad39eefa07119419a429e6aa0d918ce99bf9d1fa081189e998a9df29f571861995d9d9b9f14181999329d889f8017d198199d479f5c178698f59c0b9f02178497759cab9e74168a96c49ba29d4e158a96c49ba29d4e150000ff842f8355840000ff842f8355841b16ee187b1a351cc519c21d981f3e22a119581db21f7b2201198a1c7f1e0222db170a1ab01c6420de0f1c13c216b61ab80b07112c15451c90122a1444199322f010f41008194e246d041c8ec9146d241d919e956c896024ee944a995c974f24ac97569b5c9a5524f7989f9c7d9c3724b399519d319d1c245c9aa19dc59df523a19a179efd9d6a23649b2b9e289e1623c49b409e169ed5222a9c199edf9d0c22119cef9dc89d40214c9cc59df79d70203c9c1d9eb89e25208f9c769e00a06820b89cff9e86a05220109db09ffea002204f9d05a03ba1b81f709dd69f4ba1ed1eac9da19f41a1771ec49dd59f89a18a1eb19dd19f5ca13e1e489e25a0a8a1621ea49cf09eb5a1cf1cea96279c949dcd1bf619e624b625aca407a483a974aad726479e90a515a73f225d9a7aa02da3471da49ca3a075a2151d689c7ca03fa2a01c309c3ca00ea2351c329c0ea0cba1c11bda9bdd9f9ea13c1b9a9b909f82a1c71a3c9b469f56a1421aa79ae19e1da1c019839a7f9ec4a04719349a229e4fa0c618a699b59d1ba0711842997e9d10a02518cd98349dce9fdb179c981f9d929ff9178998009d3d9f8c175f98ef9cd69e35174298cb9c959e3c174898a59c5a9edd16df976d9c1f9e1e166a97289c8f9d7a156a97289c8f9d7a1500003281e3012d8500003281e3012d855219261d44209521ec185b1db7207422c7185c1c3e1ff1215e182d1b831dd92021153818621a8b1d0111c51556197b1d2c132b174a1aa5212414b515221ad9239811ae100b181f24480ac790541217249e904297bc8f15242d9485993e980c241796619b2b9acc23f8975b9c029c98234c98b79c859c3023fb98bc9ca79c8d22a099b99c279d6021e899b29c419d7820aa99099c709c3e1e6999469bda9bde1c889abe9a089c3a1c7e99969bac9c791c8799d29bf59c5a1c149a229ca09d791c6e9a969ce79ed31c7c9c299d479f291d179db29d10a0901d089d029e35a09c1d089d6e9e7ba0c01de29caf9eb9a0bd1d899c049ffda0691d5d9c3e9f3aa1491d609c569f64a1de1ca39d7b9f35a1031d8b97349a689c8b17fc802b873e8e6d03c0902694a898a4102d9ab99c789f2419fe9b069fe4a05e1b5f9c169ff6a0541bea9ced9efaa0ca1a929cd99ec1a09f1a5b9b809e7ca0351aa69a4a9e60a0c319209a309e57a05f19e899169e51a03819ba99ff9d3ea012199299bf9d05a0ba184099879dc09f5b182c99559d839f3318f098129d349fbf17ca98dd9cfb9e6e178e989d9c999ed2166598819c599e71165d98669c1f9e4a163f984d9cde9d2716dd972a9cc69df415c996919b289dec14c996919b289dec140000950c871004030000950c87100403c419771d351ff720ba196c1d781fd22103183b1b221dd520111600199a1b811f64144517cc191b1e731402180d1a4820da133f17a41a422224137a15051a6d230e1076108918a42399034f8d72157823358ec694290f3623e7916c970b920923ec94069a12981723e1965f9bff99fb2212983a9c199b8e2294985d9c399cbc21a398439c169cc22021990a9c349c0020069a039c6e9c381fc09a469cc99c2b1ff19ad39c749d331fe49a569d349e4b1fe59ab59d179f0a1fe29a039ea69fbc1eb89af09de89f381eed9a069edb9f061e049b229e19a0de1d199b689e2fa0a11d769b799e55a0721d579b8e9e77a04e1d369b9d9e9fa0211d339bc99ecaa0f41c389be49e03a1f01c059b059f5ba1dc1c809af09e09a16d1c1599a89dd69fa11aab97469c309ef6180b96f79abd9d6c16c697da9b779e62179998a39cbd9f4e181d990c9d05a0c8189a99699d1da01219049a999d39a04119399aa09d30a035191c9a939d17a01819e7996e9d04a0e618c599479dc79f90188199289d869f45184f99179d5b9f08181499019d479fd517f498e19c359fa317bf98cb9c0e9f69176698939cce9ed7162198759c889eab160398489c2f9e6816bf972b9cf89df6153397039cad9d8a152997a09b2f9d16152997a09b2f9d161500000000000000000000950c87100403c419771d351ff720ba196c1d781fd22103183b1b221dd520111600199a1b811f64144517cc191b1e731402180d1a4820da133f17a41a422224137a15051a6d230e1076108918a42399034f8d72157823358ec694290f3623e7916c970b920923ec94069a12981723e1965f9bff99fb2212983a9c199b8e2294985d9c399cbc21a398439c169cc22021990a9c349c0020069a039c6e9c381fc09a469cc99c2b1ff19ad39c749d331fe49a569d349e4b1fe59ab59d179f0a1fe29a039ea69fbc1eb89af09de89f381eed9a069edb9f061e049b229e19a0de1d199b689e2fa0a11d769b799e55a0721d579b8e9e77a04e1d369b9d9e9fa0211d339bc99ecaa0f41c389be49e03a1f01c059b059f5ba1dc1c809af09e09a16d1c1599a89dd69fa11aab97469c309ef6180b96f79abd9d6c16c697da9b779e62179998a39cbd9f4e181d990c9d05a0c8189a99699d1da01219049a999d39a04119399aa09d30a035191c9a939d17a01819e7996e9d04a0e618c599479dc79f90188199289d869f45184f99179d5b9f08181499019d479fd517f498e19c359fa317bf98cb9c0e9f69176698939cce9ed7162198759c889eab160398489c2f9e6816bf972b9cf89df6153397039cad9d8a152997a09b2f9d161500000000000000000000000000000000092172153419e2145528cb1ddb202b23522a732017213826892bef1e5e20e724672b001cb21d2c25fe286519c819cc24642537124716d51f692623146216e021da2a380f2817691f5c2c4b11af1a1f26c12c7690d7155725c828e4925a92b422e629fd90060c85245d187794e11f1e256da572a0dd94e127eba5fea098220928e0a858a7a524be2731ab85a41a2630243caa43a24b287a22dca964a27d29022423a70aa23929b82280a25fa10527f72163a10ea2af25b822e3a067a25425bb221aa146a2c022462235a202a28621b42118a03ea1c8213e21199f55a08b1bbb208d9cf69ebda14520a09d03a089a4b91f3da0ce9e29a6161c329f6fa33ba9281d179e53a5edaa951d4697bca1e8a6f01cd898a6a02ea4c01c4f9bb8a00aa3171da39cb6a0d8a2381d5a9c6da0bca2e71c439c5fa075a2c71caf9bfc9f35a2301ccc9a8f9fa6a1811be399339f38a10e1bf4995b9f03a1d41a809a899f1ba1b61a169a349fe2a0561ad899f79ee2a0df198299b09ec6a091191a99419e9da00d190d991b9e7da0de1812990e9e6ca0a0181699f79d3ea080189c989c9dad9f19181598439dab9ed8179697f29c469e22178797e69c879e13176497da9ca09e0117c197c99c939e75162597c39c499e59163397869c8f9d09160000000000000000092172153419e214092172153419e2145528cb1ddb202b23522a732017213826892bef1e5e20e724672b001cb21d2c25fe286519c819cc24642537124716d51f692623146216e021da2a380f2817691f5c2c4b11af1a1f26c12c7690d7155725c828e4925a92b422e629fd90060c85245d187794e11f1e256da572a0dd94e127eba5fea098220928e0a858a7a524be2731ab85a41a2630243caa43a24b287a22dca964a27d29022423a70aa23929b82280a25fa10527f72163a10ea2af25b822e3a067a25425bb221aa146a2c022462235a202a28621b42118a03ea1c8213e21199f55a08b1bbb208d9cf69ebda14520a09d03a089a4b91f3da0ce9e29a6161c329f6fa33ba9281d179e53a5edaa951d4697bca1e8a6f01cd898a6a02ea4c01c4f9bb8a00aa3171da39cb6a0d8a2381d5a9c6da0bca2e71c439c5fa075a2c71caf9bfc9f35a2301ccc9a8f9fa6a1811be399339f38a10e1bf4995b9f03a1d41a809a899f1ba1b61a169a349fe2a0561ad899f79ee2a0df198299b09ec6a091191a99419e9da00d190d991b9e7da0de1812990e9e6ca0a0181699f79d3ea080189c989c9dad9f19181598439dab9ed8179697f29c469e22178797e69c879e13176497da9ca09e0117c197c99c939e75162597c39c499e59163397869c8f9d09163397869c8f9d0916e11bfb10d2182901e11bfb10d2182901c32808220024cd244c2b7a220724fe263f2cc620ce218c26442ccd1cea1dbb26ba29ba19f2188325d094dd8a30917c1baba25c870991ab1a98961e109d19ad24e7260217da2033269e24920ba61e542665192612a720f625d818de206b247626621e9f245f27e92525a66d1e09230428faa9eaa2209ce328adac0aa7471c0a2746ac1fa8b82412241bac1fa61e286d21f3aadda4b62a5d2250a824a4a52bb92263a4a2a37129112320a3f9a2162881236da422a2d328ee220ca0e2a054284b2244a10ea1f1258f224b9e539f9a220d221d9de29e85244d23fd9fbe9d7495c920e19d049ee8a6301db29d1ea098aba511899ffea330ac1495cda071a625ac0f96249e4fa5aba9951c3d9d6ca37ca7441d099da7a20fa64d1d499df6a115a5221da09ca9a139a4061d7c9c24a170a3b31c739bc9a00ea3511c249b5ca062a2df1bdb9a0ba0c4a1331b429b27a09ea14c1b919b04a08ea1101bfb9a8f9f22a18f1a239a239fd6a0f119089ae79eaea0ac19cf99b39e86a047197d99959e69a020194199689e4aa0d5184499619e2ea0c118f7981c9e07a08e187a98d29d929f3418cd97759d169fe017a2973b9de39e4e177197159da19e6d179997dc9c779eb7163996679c859e8216c996049b7e9ce213c996049b7e9ce2134c174b18af1a190d4c174b18af1a190d6c2658228524d62593290622f323f026b42bb5201722b426ca2cd71fc0207c27e22c541de91dc026942a2b11441546210529e40a630ed01dcc2ad105bf11dd2287284594a011242683250d12b61c5d261fa0ef19521f762556a4c71e8522b12632a7591e462460277ba75115cc2226282ba9fba0ca1c722860ac41a50b18d32756ac16a6a120a726edab22a612274d2662aa54a57029ec2449a899a4932a14256ba4d6a3552bc124f1a258a3b729a0243da39aa3a428e324b4a28ba19f28512437a054a177252624379ed89ff925c323ff9ec59fc31b312354a1849f49a4bb22889ffea0fba737229f9ebaa2b0ab7220769f7fa43bac831f07a042a5a4abc51d249ff8a4d8a9de1dea9d7fa445a8a41e909d2ea489a7c01e0f9e70a334a6351eb79d8da23ca5bd1d459dcfa170a4531d769c57a1e4a3f71c129cfba03ca3a11cc69bcaa0f8a2661cde9bb6a0caa2451c909b79a064a2e31b049b38a0eaa1591b4f9ae09f95a1961a0b9a819f32a1051a6499069ff0a067193099b69ea9a0f2180499719e7fa0981809995a9e52a07a18c898259e23a031189d98ea9dd99f08185898b69d5e9fcc1758987e9d259f53170b983b9d239f39170f981d9d1f9f94160e97d29c5c9f9516b897b29c239e1c16b897b29c239e1c16d00e3516c9180788d00e3516c9180788b0239422512461250128382215249d27c42a8821b822e627812c532052211628fc2c6c1ef31f0328082d5e1cec1d0828852c1f1aa11c0128642b3b18eb1cbe27ad2ac218c31c3f28bf297918061fa1280c290b17c61d3f2897260f1aed203c2807248c194521472820159d96371e41281da58b9fa320f427faa9aba26819902768aac2a4bd1fc427d5ab89a50f27d9270faae2a49329aa26e7a75ca4772ac0255aa594a46a2aeb25c4a4c5a30b2a872564a425a3bf2a9a257aa21ba2bd29d624c6a1aea2fe2622255ba070a223253925819fbea0c41b97245b9f34a12da3142406a063a2b4a791231ea090a3b4aac722839f80a42cacc721a19ff3a415ab1421b29ecca472a94620e09d7ba470a8ae1fa19e3ca431a7831fa19e9ca3fda5aa1ed69d3ca38ea5121e9c9d17a370a5df1d679da5a2f5a46f1dec9ca8a125a4b51c669c1ba1a1a3401ce29be3a039a3041c549baea0a1a2821bb49a66a01ea2fb1a149a3ea002a2a71a2f9a2ba0cfa1451afc9906a093a1fa19e699ab9f35a18619a1995d9feba03d19b1991e9fa6a0e7186b99d09e72a0b218f7988a9e44a08118ad987b9e2ba052189498609e1aa01b188b980b9ebe9fdf17a798e29d3b9f66170398859d109f0417bc97329d1c9fb016bc97329d1c9fb0160515ed18d21967900515ed18d219679026203e21a7223324e3245c22e3237b27d928c9212c23cd27f02b822125234b28222daf20512254289c2de81e30216028242d371d09205628aa2c6d1cc61f5728432c331bf71e3b28a92b751a8b1f4128d0293819901fe32789284515021e2f28ac25db92b81e52289c14829c161c5228cf9f13a089181d28cba868a2d89bf827cfa9eaa3e11ed72719ab9da53d212728a9a9baa4b326ab2665a702a43029ee25aba564a4f629262695a425a3a42a492549a33da3952a822576a215a3642949258ea2eaa21d280f2552a17da243248f2478a0cba2ab1b94249ea0b3a2eea216246aa023a323a8802351a0e7a338aafe22789f55a441ab43224a9e63a4c9aa2c21ee9d34a4c2a83c20df9e4ea42aa81820d99e34a41da8c91fb49e19a4eda6811f1e9eada345a6f11ec09d42a3a2a5391e2f9d74a2f3a4771df69c09a271a4e61ca89c9ea121a4821c869c7da1e7a35a1c4f9c23a166a3131c1d9cd8a0dfa2961b7e9b93a07aa2161b3b9b72a028a29c1adf9a43a0d6a1231a5a9a00a07fa1c319cd99949f42a17519a2994d9ffca017195199da9eb9a0c7180399689e72a08418a598419e26a069188798eb9db29f09183c98639d5f9f6e1726983d9d259f52178997099d779f1e17d297de9cea9ea616d297de9cea9ea6160c107018861a0f930c107018861a0f93c71e16225724c32424223223e6248627b725a522bc240328bd29e321d82341288b2cc02021234028be2d4d206d226228e12d011f8921ae287d2d431de420aa282a2d5c1c7120a628be2ce2190520b728052c3115fc1e71289229798cae1da628a125739ad117ba28f11d149ddd0eaa2809a137a08b1540286da79ea16d9825288fa9b3a3e015442899aa97a49b214128d9a8e9a35325c12678a59aa34b284b2689a52da4012a982678a4c5a37b2ada25a9a38aa3522a7825e5a243a38729062515a3a9a363280e25e7a1c5a3eb24cb24f0a0b6a3aa1b712403a1c0a3f3a21024caa0dda3bba7ae23b2a045a48faa4723809f65a4b0ab9d22e69fa4a4d4a9f321ab9e76a444a83021319e86a4fda7c120dc9e6ca45ba76420ae9e0ba41ba7d11f149eb0a38fa6231fe69d57a3f4a5a51e539dc2a27aa5091efa9c2fa22ba5751dcd9ce5a1eba4121d8b9caba19da4d21c5e9c5ba11aa4801c559c20a136a3221c1c9cf4a0caa2cf1b0d9cb8a080a2391bfd9b97a02ea2be1a8a9b56a0dca15f1abc9a11a086a1cb194e9aa99f21a17419af991b9fcaa00f19ee98959e7ea0be1890982e9e46a04e186498d19d1aa0d81715988f9deb9f95172098539d9c9f1a17bf97279d699fb6160098ee9c9f9e6b160098ee9c9f9e6b1600004c035505420700004c03550542079119011ec41fd721c120cb2293246927ee224e224e2414288f264122f7239428752a8b2181236328302d7a20e6226428382eb01f12229f281a2ebf1df3208728802d4b1cd21f7428dc2ce319571fa728042cde12ba1dd428492ad892331cac282b28219b161b5a287f24639db8195b281ea12fa0b7184a28bda7a5a1749c072891a935a3ac9c102814aac4a4f50f252867a701a45a20f726b4a553a4af2716278ca533a4e929a226b3a4dda2822b522599a355a39d2b792575a324a3612bfb24aea31aa3cf29b82411a264a3d02795247fa1aba3e0215124cda02aa424a24324f6a067a47da81c24cba057a487ab4723b49f58a468ab2f22019e1da4b5a85321ea9c03a443a7aa20149e6da4fba7a6200b9f94a4e8a77c20109f2ea4daa6f81ff39d6aa3cda5b11ea69d05a341a53f1e819dcca226a5e61d7e9d71a205a5861d0e9d0ba299a40e1dbc9ccca12ea4ca1c559c82a1d7a3721c1f9c32a15ca3061cba9beda00ea38b1bb39bb5a0aba2201b8b9b8ba07ca2cd1a5e9b4ba013a23c1a049b32a0e3a1061aec9a0ca091a1a2199f9aa99f4fa15519869a5b9ffda0f5187e9ad29e85a0a618e9993d9e18a01c180799039e05a002189b98c29dc99f811742986d9d499fe6160e98769cc39d05150e98769cc39d05150000b100210130090000b100210130097a1aa11d841f60222220f322dd24602761211a23af241b28112359227f242b288d27522118242728012c4a20d82227281a2e241fad213c28a52ec71da3208d28402e7c1c2d20b728992dd118731eb728962c6c0c1e1cbb283d2ba3974e1977285e28b09c981460289523da9e7f0e36280e9e39a1c299332850a7e7a1d19d04284ea9afa2fb9d162897a9b4a23d9a252761a67ca376959826d1a361a4f321d92630a3e7a35328f425b8a1dfa3c12bc525d4a256a30a2c792531a35ea31e2c1825b3a280a38a2ada2483a100a45b28b624a6a0f8a39c2344241fa130a4db9e302490a1aba35aa82c2399a040a444ab2723079f41a4deaa5c220a9efba38da84c21289e46a409a82f21949f8da405a80f2120a063a490a79b20a79f26a406a71020809ec8a352a6351f0b9e4aa3d9a5a91e889deaa255a5131e689d91a224a5891d3a9d68a2efa4441d3b9d51a2c2a4111d1a9d03a272a4c41cad9ca2a11ea45d1c149c29a1e0a3ab1bbf9bd4a05ba3191b3b9b8ea0ffa26a1a139b61a07ca2191adf9a2da003a2a119969af09f98a15a19089a569f24a1c9186899d69ed5a09c181d997f9eb2a049180a99569e87a00918e398399e5ea01a18f7981e9e21a0cc176398d59d03a03e176d989c9dbe9ff6156d989c9dbe9ff6150000bd80e502af030000bd80e502af03ce1a0b1e0920b122bc1faa22b92410274720d723412564286520e222d0243c2863223a224824bb28db2730204a230028d32c971e2f229a27bb2ed81c06211028002f5f1aaf1e5128462e55157b1d9228512dac95be1ab728392c429a631496287929469d198e5728ae24af9f0e970228169e34a1519cf127a4a758a2759f1f2811aa10a36ba1aa270ca83ea340a12d275aa50fa4b3a00e2704a460a4609ef6264da32aa41322b5254aa425a39d29a52514a4dfa3932bd2259ba307a46c2c9225a5a25ea3f92bc324dca2d2a3352a9b243aa1faa3f0255f249ea003a4529cd623a3a008a423a8322335a019a44aabbc22169f51a448aa6a22349f23a4e2a69721cb9dd2a374a6f220b69e26a4b7a6ad207b9f3ba4cea690202b9f08a4d0a62d20799edba3b0a6cd1f749e8da374a61a1ffd9d4da3e7a5b11eae9d22a35fa51d1e689dcea215a5b21d329d85a2e3a4531d159d28a29ba4f81cc39cbda135a4a71c629c45a1d9a31c1c2c9cf6a050a3a61bab9bc2a0e7a20b1b7b9b8da075a28a1a0a9b4ba006a22b1aba9a08a098a19c19169a759f21a106197599da9ea8a09e181799719e62a00e18b8980f9e07a073179d98dc9daa9f4717a098d29d6e9f0e178b98cb9dca9f471730987a9dc49f791730987a9dc49f791700007800dc805a0200007800dc805a02071bf61e762080222620c6235625ba2703201123da244d2832204822862425283420e8211f248c284a221b2086233e287c28301d1722ba27862d1b1ca1206028642f7d1ad61e7628412f4617b51d9428532ea192e61bcc28e32c299ab017a828622aeb9d368e7a284d2655a044994c28fc9be9a1639e4a2842a85fa28da0ec276ea910a3a3a0aa27eea5e0a125a0432683a322a334a14926daa1a3a342a1532604a429a4ef0ebd25f5a214a44d24c625afa20ca4f62ad22579a215a49c2c402522a1dda3802cba249ea08ca36e2b552408a103a468284b2440a140a44f16282434a362a467a8b4238fa065a4d5abf322fb9f18a481a9fa21369fe6a3dba71d21159eada3cda69b20849f0da4d8a68420239f1da4c1a65420c09f29a4a1a64020d09f0ba413a6b31f9a9faca305a61a1fdf9e60a3bca5901e4b9e13a36da5f71db39dbba231a5881d639d8ca2fda4411dec9c3fa2c0a4b21ca39ce5a177a4611c409c98a123a4101c299c63a1bfa37f1b039c31a13da3251bbe9be6a0f1a2c01a699bb5a0c9a2341a059b81a0a9a2f119919a3ca0a6a295190d9ad79f4ea23a19709a6f9f45a1f5187a9aff9eb6a08318a79a7a9e73a038183c9b4f9e0ca00418fc99d19dc99fc3175d98409d3d9fb4155d98409d3d9fb4150000b60030039e080000b60030039e08a1199c1dc01f0322b51fe522bf243827921f5a2299248927ac1f4e2295243228561fda218a246328e31f05218d239f28ae21701f6422a628f428ba1c00217228252e9c1944207e28c32f7f12711eb528442fb195551ccc28e92d8c9bd517c128122c419e3b975128f0275da00c9d1128299c11a1be9e5b2723a8d1a15ba090270da8ffa134a008271ca2a5a228a1d3265da19ca288a1372623a364a237a0d12507a459a3f39dfa2519a13ba32a8f5825d1a360a3c127f7249da174a43c2c78259da127a4f02ce024c7a00ea4272c722415a2c3a3ae29f0237aa21aa4bf2103240ca06fa3d1a6c822fb9f93a28eaa7d21259f59a20da8c720c6a06ca302a6ed2051a032a483a63221f59f06a42da6a0203b9f01a460a65820339f17a479a63d20de9ee9a32ea6f71f7a9e84a3b1a5431f159e07a363a59d1ecc9de3a240a53a1e669db9a20ea5b21d249d7ba2cba45b1dc89c2ba28fa4fa1c8c9cf1a153a48d1c509cb8a12ba4491c329c70a103a4071c199c2ca1dba35b1bf99bffa08da3061b909bb3a035a39c1a089b60a0c0a2f619589a05a0f9a189198e99139f4fa1ed18d0983f9ed2a042188a98e09d83a0d5179b98e69d4aa0dd17c298c29dd59f8117c597049dc29e04178997ed9b619d5b158997ed9b619d5b150000a800040548030000a800040548031e1b981e33202922071f86223c256627541fbf225225e727311f8622fd2425280e1ff3219c244b28b71efd2009248928181d521fc4229328ae21861b5a216c28242992153020d628222e31923e1c6b28bb2fa996d5160428092fb69ba58d35289b2ce89da0999e27ac2816a05e9dbe273b9f3ea13ba0bd274ea8e3a17ca055278ca53ca219a1852633a24ea26da0092638a38ba2f7a0f3256aa3aea2ffa0c72556a3fda2609fc02553a230a428a1c025b7a262a42890e3243aa242a4f428e4248ba0a1a3ab2da7240ea180a3cb2d24241ca4e4a3b72be42355a1d9a359277e23c69f96a382a49c224ba187a3fbaa0222aa9e43a3baa73a21719f34a3c4a5b320c79e0da448a6f820df9f10a445a6c420899f26a482a6b720549f12a431a64a20ee9e9ca3ada58f1f8c9e89a3a4a52c1f639e6fa3bda5cb1e569e46a3b6a57a1e1c9effa28ba5121eb89da6a252a5901d659d40a2cca4411df09cb6a15ea4bf1c8e9c67a132a4371c649c3ba10ea4d51b239c00a1dda3681b019ccba087a3d01a789b8fa009a3361a3a9b44a08ba2cf19ab9adf9fe5a15c19469a599f5fa1d918f899df9ee2a06e18c399939ea1a01918069a7e9e93a016181c9a549e71a0b017be99de9d2aa04b17e9985c9d619fbe16e9985c9d619fbe1600003282f980c10800003282f980c1089818d91de01f5e21f61e23230925ea26671fcd22c924de27411f4b22bc241528901eb2216d242828271ecd202c244e28281c931e5d235a28271bc41aba208528001f5715cd1c81282a289992c5168128d02ded981a145828fc2e649c5894f127892dc59d2a9cfc26bf2933a0fb9d24271595d8a0209fcb2612a52da1e69f562613a2daa1afa03d2660a341a260a1b2259ea1e2a24fa27f2581a028a328a24a25b3a04ba3d1a20c2596a07ba3eba2142519a19da34da19424eaa015a310232f24bca0cda3422cc12435a012a42e2e6124b5a0d5a3142dd52372a09ba3b628ec222ba13fa34fa728225da1fca3b5ab0c22819f61a383a62221639ea0a3d0a41a21759f95a371a5c420a39f02a4f8a5a620e49f13a41fa69220dd9fd6a3cda53120779fa4a390a5d01f779faea3a0a5841f309fa0a3c7a5281fd99ea4a3cca5cd1e1e9e4ba3bea5541ea19dffa263a5da1d249d90a2d1a44c1da09c14a25da4cb1c499cb1a125a4631c2c9c5ba1bda3151c0a9c14a17ba36f1bf99bdda002a30d1bc39b94a0afa2a11a9b9b51a045a2121a109bf89faea17d197e9a649f21a11719be99d89ec6a09d187b997f9e7da049186d99609e6aa034186099029e53a00118a899859d00a0301787989e9cf09edc1587989e9cf09edc150000a380fa00fc060000a380fa00fc0637193f1ef51f47212b1f93232425e126b11ee122f5244f277d1e8d22e9240e28561e0b229d2430289c1db020c9235b28051c1e1eb32160287e19841a1a204a287d162e0ceb1b5828491a179ae71377285d24eb9cec988528e029d99c0f98dd26932b489e639c59270b28a29f529e7027619e4fa0909e762639a10ca10ea03926919f16a216a1c426b39f60a2e3a11726a7a084a275a2b725d6a0e2a2c9a2742538a14ca300a38025e5a03ca370a3f024c6a0d6a303a47f2474a009a468a16f24a3a0eca394260e24d9a0fba28f2db4232da28da2092e4523b69faaa22c2baa22c79df8a17ea5442128a196a3d3aa16220f9fc1a2d1a403217c9f30a3aca5032196a0c8a31da6e020caa091a38da692205ba0aca37fa5432011a0d0a3b2a52120c49ffea3d1a50720529f00a4cfa5991fd59ecfa398a5001f369e94a36fa5711eb29d28a323a5d91d409ddba2d6a4661de79c88a297a41f1da99c1da251a4ae1c719cc6a116a4731c599c6ca1b2a3031c509c16a14ba3721b609ccba0e2a2051b2f9c86a06ca25c1adb9b48a019a2041a179b08a0c7a17d19549a9e9f67a13e19bc995e9f42a1121916999f9ebaa08318e798ea9d1fa02018ff98a09d8f9fac17ca982c9d7c9fd116879a8e9d429f6516879a8e9d429f65160000398e2f9022140000398e2f902214661d4f223e247825381fe723382549276a1ed322cf241027241e9522bc249227d11d09226524d9270d1db92018230028a21b5f1eff20f7270c19271a711edf272b120b0c921923285d8d589c6c930e282f903d9d67961f27a415c59e5e9c1127d3181aa0ea9cf926459a9a9f399e5b26ed9e3ba0f89eee25d39e72a1c1a08c26ed9eeca1a4a1df25eca03ea250a25f2576a0b1a297a25e2563a0cba2f7a211257ca0f7a25ba3cb24a3a01ea3f3a38924a6a012a301a42e2400a193a2eea23d2325a0bfa2699c7723599e65a2e62983230f9f90a2b62d9022fda1a4a3bb2bb822ac9fa9a39fa6942297a1f7a2e9a9af21439ffaa1aca48920179e59a272a47a20669f57a333a5b920a79f3ea34aa57c20079f7ca365a54020d99e76a35ba5e61f9d9e6aa36ba5981fd09e95a39ca54e1f7f9e92a3c0a5ca1e609e75a39ba5871efc9d20a35ca5ee1d899de1a22ba59d1d4e9d7ba2eea42b1d1f9d25a266a4ca1cd19cbea108a44d1ca19c56a1aaa3e71b989cf6a020a3441b7e9c99a0a8a2bc1a159c49a033a2061aab9b10a0dfa1b6190b9b969f6ca13a19509a449f0ea100197a99c59eb5a09018e398499e52a02518ba98e89d09a0e017bb98a99da19f6017ac983b9d6d9fbb161898e39c109f55151898e39c109f55150000339011941d120000339011941d121e1d762138230d25441f922427267227851e2d234725a726b61d9622ad244427391df2212224af27791c6020ed22be27031aff1c3d206f27d415ba14b51c08270507c29659162d270894679ba6935727fb96fe9cc399f5263998b79d989cb026c39b8b9f779e9326539df79f6a9fdf25589daaa03da006264d9e6ea1dda02e26029fbaa10ea15c2533a019a2afa1382594a088a220a207259ba098a28da2d22489a077a294a29624c6a0dea292a37f24b6a043a33da44f2483a006a309a41324fca01fa331a3a92310a069a2bea04122179feaa13d281322049d74a2002a4822d39cb4a1cca43e21239de5a0bba7da1f729e77a1a7a40d20009e0fa263a428205a9ea6a2bfa43820749e9fa20fa50720f19ef7a220a52020af9e06a316a5dd1fa69e2ba344a5b81fe79e88a389a5981fc59ebda3a3a55b1f7f9ec0a3c2a5ca1e0f9e72a392a5621e9c9d13a342a5d91d559dc2a205a5651d009d4ea2bca40f1da49cd2a170a47d1c779c6da122a4231c359c09a1a2a3601b349cbaa00ba3a51ae39b53a06ea2131ad19b08a0eba17d19b39baa9f66a13819599b319f1ba1f418c79ac89ecca09218d899409e7ea01f184399e99d51a0e2171099b39d24a057178998609d0ca001174598159d6f9ffd154598159d6f9ffd150000c980ad08a20f0000c980ad08a20f391e1823a0256925a81e81230c2508261b1ed322b524ea25bf1d0023eb24a526b41d8522cf242727571cb22017232a272c19981c4f20d5269c14900bd11a5226bf862e98d60cfb25b893ed9b0b960126d097be9da69a08266599e29e059d0c26d09baa9fc59d2f26349d07a08a9e2626ff9c44a0549fc625819d78a0cc9faa25a69e5da19fa08525d49e87a10ea12d25ff9ee1a1d0a1ee24729f31a211a2ac24ca9f40a29ca248240ba05da2f9a20a2401a058a250a3ab2304a05fa2dba31b23eaa0efa218a49622159f51a253a3ff21129f99a19e192c21fa9b29a28b26d521759f25a225a63c21589da0a1f4a55520709e9ea196a40820289eaaa151a4541fde9e00a279a45f1fa59ee6a1aaa4f61eb39e38a2dba44b1ff99eafa218a5bd1f309f3ca366a5fa1f969fdda38ca5ed1f2d9fe4a394a59b1f9d9ed8a38aa52b1f019e87a352a5a41e7f9deea207a50f1e279d88a2bea4831deb9c13a270a4031db09cbaa116a47e1c809c4ba17ea31b1c529ceaa0e6a2551b2d9c8da073a2981a0f9c4ba005a2091ab89b01a099a1a219389b869f2fa12d19969a1e9fd8a0e6184d9ac89e99a09218319a6a9e59a03b18f4991c9e21a01318dd99e39dd69f6717f898589dbc9fcd165298fd9c5e9f42165298fd9c5e9f42160000a890f191ca0e0000a890f191ca0ec61dbc2271242425dd1d6123e524d9258d1ee122e1240d265a1d0f2377258326be1d66231f2618276e1cdc202a24c4269d18b819de1d0b26661016955b0d8825aa93a49cd4996f252197d69daf9c4f25f597289e2a9d8825c998be9ea29d9a25cd99129f289ebb25d69a759fad9ece25329c15a0d29fb425a39c90a07da06e258b9e3aa10fa160252b9fc2a1f9a11a259b9f1ea220a2dd24f29f31a25fa292247ba082a2c4a284248da095a2a3a3572480a07ca2cda32f2476a0c4a234a42524bea007a322a4fd231c9fc8a146a43f225f9ce9a027a58e206a9b2ca1f1a3c8200e9d24a167a57e20449b30a1f0a4821fb59c07a171a4a91ee89dffa0caa3b41eeb9df7a069a3601eba9d0ca19da3681db69d56a1fda3ff1d0c9e47a2a6a4c91eb09eb2a392a5a01fea9e32a423a6c61ffd9e48a460a6a61f9c9edea3e2a5cd1ee69d38a351a50a1e8c9dd9a2e2a4871d5b9d76a29ba43e1d1e9df8a151a4991c899c64a1dba31d1c2e9ce3a04ca33c1bfe9ba3a0f0a2ca1aa79b6fa08aa24d1a839b47a035a2131a339b18a0e5a1a219969abe9f5fa15519129a3d9ffda00a19a599c29eaea0c2184e99709e6fa070180d99259e25a03c18f298c49df49f82178198709d939f6a176f98039d849eeb166f98039d849eeb160000488b138eb70a0000488b138eb70ace1dae2106249624151ee42277245625d11d742268242825631d5d23f72433264a1e1024bc257027e71cdf218b248d267015d40c87193525c894b09e859e7b247597449fbd9f652488973e9e099eca24fe978a9daf9c63250899d09d159d7725cf99169e039d7425749ab29eec9d67253f9b159f729e80255f9ce09f8d9f6d251e9dbfa08ea08025899d3ca13da164250c9e82a1f0a1f524519ec4a152a27d24879edea1d9a23c24d09ef8a129a3fc23da9eefa125a3f123009f1fa25ea3f323569f3ea2c8a3d32321a0a9a24fa4df23f19ea5a2d1a4cb22e19a6fa18fa43221b49b29a112a47320d09b76a019a4891f389c4ba04da3ec1d429d4da0caa2811cfc9dae9f69a1ab1a089d449f35a13a1afe9c14a01ba2fe1ba29d7aa1d2a30d1ec59ec5a382a5d91fb99e8da471a63b20749e82a462a6fa1f769e2ea4eaa52b1f269e87a342a5941eb29d6da28ea47d1d1a9dc6a106a4d11ca39c6ba168a3781c4a9cfea006a3eb1bef9b9ca080a21b1b839b65a024a2b31a4c9b29a0c9a1281ad19ac99f7aa198197d9a689f46a15219349a009f1ea1ed18e199b19ee6a0b6184f99389ebaa04a180199ef9d69a0bb179e98919d11a05717b8984b9da09f0f174198f09ca39f33160598de9c289f4b150598de9c289f4b1500006f8861830e0e00006f8861830e0e94192e1e1620e021e41c51216a23c224651c55211723f6248b1c6c2157233d25471e9024ea250b27fb1e2f25d1261228a5990ea22ca3ba23119970a2caa21121f396009f289f80233e95979c289c5d24ce95049c1d9a05251996dd9be1994125d196ad9bbf993725d9982f9cbe9a51253f9a179d729c9225189c1e9ed29dcc254d9d869fad9fa425679e73a0a6a07d25fc9edda009a10425af9ef0a09aa19624499f37a19ea13e243d9f70a127a22824929fd2a186a27124ea9f4aa262a3be24c09fdaa2fda3a5243b9f2ca364a45824e49ee7a28fa47c230e9f45a25fa46522389f04a224a46521169f51a138a31120b09e39a037a2a91c299ed19efba06e1ac19c089dd29e9f18a79bf19b719ec318529cb89c03a0e918cc9d35a0daa2801c83a01da497a5112043a024a5f4a64321739feba4aba6c2207d9ec9a35ba58c1ff29d8da278a4f81d439deea11ba4471dcf9c90a11fa4c41c729c32a104a4491c649cf3a08da3091cec9b7fa097a2221b109c4ca0eca18e1abf9bf19f76a1e1194d9b7f9f23a16319e29a109fc7a0f8183d9a8b9e83a0a818ad99259e40a06d181199d59d22a010189898789dd19f76177098399d8d9f35175998009d2c9f8316bb97bc9c339f3d167297ac9c829e85167297ac9c829e8516d08afd8f35909c10d08afd8f35909c105a18671c741ed820d51a021f8c20cc23e31a1c1e40200324831a5e1d571f23241815361a851ca723811c4621e42490270e1b55208c241529430ffa13391acf24480e150863185f24e2849d91ad13cf241490f394ea09c7249b946097ae90ee24e8955e98c3900f25cc97be99c5951a258598989ac09760253999e59adc98a025a59a489ca49b30263a9d679d3b9d4126d39c129ffb9e7226da9cb49f10a02026659d9da001a14d266c9d4ca191a16526529ef0a17ba2e326de9e4ca30da4c7264c9fa3a3caa41b256c9f5fa22ca4fd22ff9d0aa1e6a23e211b9e7ba11ca3aa20459e1ea1b8a20020619e0ca1aea2641ff19dcfa061a2721efd9c28a0bba1821dd19a1b9dbc9fbe1a6e9ae895a39997942a99b411fc0c0a9c909b809efda1381a67a001a62fa81a23a8a127a621a84722389fbca454a66c20359dbea2f6a4371e319d3ea298a4af1db59ca8a119a4f51c569c15a12da34a1c539c90a040a27f1b539c35a0d8a1ea1a419c16a0bfa1721a119cc89fa0a1f619799b779f97a18b190d9bf49e2aa12a19839a679ea7a0a9182e9af09d4ea05218059a9c9d2aa02218b299729d05a0c51760994d9ddb9f11170c992a9d969ff7169698ea9c2c9f7a169c97669c6e9ecb15b396e09b8e9d1e15b396e09b8e9d1e150000fc877f88fc870000fc877f88fc87c316e51aaf1c1c1eab19ac1dfa1fa2219219521d8c1f6522fe18531c0f1ec721e1143d18631a291e360a1e125216431aa213c515191aba213714b0145f1b76242911540e9f189524c1844791151385245d91c997319071249995e8997c986524e797089c389b63240c99069d989c4824cd99d59d4a9d3e244d9a129e899d9d23a19a709ea49edc22d59aa19e709efd21899b4e9e689e5f20169ba69d939d8917459ac39c6f9c55988e99a49bf19ba598ff98ea9a619ba48d4d99889aab9b3317149a939bd59c931bd09b209de49eb41da79c5c9e3ba0831e209d1f9fd3a0881e479d539f2fa10b1ecd9dd09f9da1ea1dbf9d07a0c6a1e01db49d23a0ffa1c81d539d8b9f86a1e21c8698449d72a0691abb96130a008c138aed164e23ae246d9e6ea312aaa4ab62268599d7a1eea41a1ed49c9ca02ba3951c359dc0a0a7a2991c659c42a058a2ef1b649c2ca0f2a1791b299c08a0bfa1f11afd9bb69fa5a1731a889b6a9f71a1f319099b129f43a18119c59ab79eefa01019289a509e80a0c318a199c29d3ba034183c998c9d27a0c017db98539d03a0861798983c9dc69fa6177e981e9d689f3b176b98079d109f1b175798de9ccb9ee2165b98c19c749e7e16fb977e9c289efc15c897559cc59db515c897559cc59db51500005f80ca015f0000005f80ca015f00571a031e6f20b5211019751d1821852244181e1c2a1f81213317121a941c032006148217df19cc1cf0126818111cec1f56156f18691c3a23ba143415ab1a0d24e011e20d451823246204f890ad122224e4907b97c5922624f8942d9a6a980c24fe96139c1a9bd72301986f9c219c5f23c698d59cae9cc8226899f29cee9ca921b4995e9c6b9cef1f0198ec99df9a4e1c96966f98f19a251a1697259a329b621c5498f09a279cdb1c5f982e9cfe9c7a1dbf98539c5a9d401dc398869cd99df81c1799b89c119ed41cda99469d209fee1c6d9aa39d9b9f271de69b0d9e0ca04e1d839c7c9e65a0701dcf9cd09ec9a07d1da49c1f9f2ca1421d9d9c879f7da1211d839c6f9fa2a1b81cf89c879f49a1981c949cdd9e99a0fe1bd28c45941c97c7101386f98aea9005054b97ac99d59c9d15009cb69e98a0491a3c9c1c9ff0a0f71aae9c0f9f1aa18a1a539cd89ed2a0401ae39b8d9e79a0bd19089b5b9e89a04319609a499e87a02319019a369e76a00419e999369e6fa0be189e99f39d40a08b184999ae9d03a0331822997e9dbb9f0318dd98229d5d9f5717bc98e69c049f021789989e9c989e62168c98839c539e04167d98689c309e171682984e9cd99dbe151c982c9cc79d90153d97b09b289d9f143d97b09b289d9f140000b510da1231060000b510da123106b41a0c1ec71f7f21c219861da71f0a22a717011b141d9c201616e618571b071f4d143b18e21af61ee914e5188d1b3a2110154418451b0f23fc13f7146a1a9e2344109e10bb189023c403928dc8157c23b18e199529095c23969371988f924d231d966d9a649833239c971b9c0d9bdc2245987d9cce9b2f22be983e9c2f9c0c21b298e99b1d9c14202899149c5d9cc61f6e9a659cd69cf11f289b0e9da99d2120199b959d839e3520069b169e609f2120339b9a9e02a0be1f0d9bb69e46a0571f2a9bc19e67a0e81e539bc29e76a0771e6e9bcd9e81a01a1eb09bdf9ea3a0c81dcd9be89eaca0761db29bd59ec2a02c1d759bdb9ee3a0f81c479bfd9e06a1e31c719b139f14a1dc1c389b349f4fa1a91c339b779f54a17b1c619ae19ebba0bb1b1f98039d3b9f2c19e5958d9bba9dcd161b97889be59d4f167c98979cea9f8b170a99fb9c2ca06b18aa995d9d2ea0cb18e899929d43a0ed18409aa99d52a006192b9a9c9d32a0ea181a9a5f9d22a09018e299609d12a05118c699439de69f09187099209da09fdd171499159da79f7217d998089d6d9f4917a998e29c3e9f11174f98ae9cec9e77161c988e9c9d9e4b16f597639c539e0f16ec973b9cf99da31552970e9cd59d35153e97d79b3d9d09153e97d79b3d9d091500000000000000000000b510da123106b41a0c1ec71f7f21c219861da71f0a22a717011b141d9c201616e618571b071f4d143b18e21af61ee914e5188d1b3a2110154418451b0f23fc13f7146a1a9e2344109e10bb189023c403928dc8157c23b18e199529095c23969371988f924d231d966d9a649833239c971b9c0d9bdc2245987d9cce9b2f22be983e9c2f9c0c21b298e99b1d9c14202899149c5d9cc61f6e9a659cd69cf11f289b0e9da99d2120199b959d839e3520069b169e609f2120339b9a9e02a0be1f0d9bb69e46a0571f2a9bc19e67a0e81e539bc29e76a0771e6e9bcd9e81a01a1eb09bdf9ea3a0c81dcd9be89eaca0761db29bd59ec2a02c1d759bdb9ee3a0f81c479bfd9e06a1e31c719b139f14a1dc1c389b349f4fa1a91c339b779f54a17b1c619ae19ebba0bb1b1f98039d3b9f2c19e5958d9bba9dcd161b97889be59d4f167c98979cea9f8b170a99fb9c2ca06b18aa995d9d2ea0cb18e899929d43a0ed18409aa99d52a006192b9a9c9d32a0ea181a9a5f9d22a09018e299609d12a05118c699439de69f09187099209da09fdd171499159da79f7217d998089d6d9f4917a998e29c3e9f11174f98ae9cec9e77161c988e9c9d9e4b16f597639c539e0f16ec973b9cf99da31552970e9cd59d35153e97d79b3d9d091500000000000000000000000000000000292015174a19ef1b2228c51f0022c8246d2af72167221828772b7f1e23200e263e2b931c601d1426f1296719141a4925d12ad815f2197c24b12cd411e718b224ed2be40b9c1756270e29c890531787258c278a952e0c65256c2564995e957125a024d6968d926b24de959c959c1c472426a6cd98f11fcd2212a87aa4671c952628a938a62898bc252baa21a4082186241aa967a32826d824a4a924a216282c2405a7fba10f2821237ba381a14d263e22f7a089a11d25fa216e9f46a13c2469210a9f07a179234c2159a02fa17d225221d99f50a0c7236d200d9e16a0aa145120409c9e9f40a14f20569cfb9f10a48420f79cd89f80a66c207ea041a644abd620df9e5fa4a6a8a81d079cdca003a5441c349ceca009a4e31c2b9c74a0d8a2cd1ca39c74a0b3a2cd1c399c5ea0ada2a51c499c55a072a26c1cba9b14a058a2fc1bfe9ae19fe1a14c1b3c9a939f90a1ec1ad8997c9f42a1791a349a969f39a1481af4995c9fffa0041ad999129ffda09a199d99d19efca056190499699ebfa0cc18e5983e9e97a09d18cd98229e89a05518d998fc9d42a016188598a89d9a9fa2171398359dba9e0717d797049d869ec3160b98fd9cbb9eba16ba97f49cb49eaf160d98069da29e76168997d99c889ec8155b97a09cd19d4d150000000000000000292015174a19ef1b292015174a19ef1b2228c51f0022c8246d2af72167221828772b7f1e23200e263e2b931c601d1426f1296719141a4925d12ad815f2197c24b12cd411e718b224ed2be40b9c1756270e29c890531787258c278a952e0c65256c2564995e957125a024d6968d926b24de959c959c1c472426a6cd98f11fcd2212a87aa4671c952628a938a62898bc252baa21a4082186241aa967a32826d824a4a924a216282c2405a7fba10f2821237ba381a14d263e22f7a089a11d25fa216e9f46a13c2469210a9f07a179234c2159a02fa17d225221d99f50a0c7236d200d9e16a0aa145120409c9e9f40a14f20569cfb9f10a48420f79cd89f80a66c207ea041a644abd620df9e5fa4a6a8a81d079cdca003a5441c349ceca009a4e31c2b9c74a0d8a2cd1ca39c74a0b3a2cd1c399c5ea0ada2a51c499c55a072a26c1cba9b14a058a2fc1bfe9ae19fe1a14c1b3c9a939f90a1ec1ad8997c9f42a1791a349a969f39a1481af4995c9fffa0041ad999129ffda09a199d99d19efca056190499699ebfa0cc18e5983e9e97a09d18cd98229e89a05518d998fc9d42a016188598a89d9a9fa2171398359dba9e0717d797049d869ec3160b98fd9cbb9eba16ba97f49cb49eaf160d98069da29e76168997d99c889ec8155b97a09cd19d4d155b97a09cd19d4d15a919d6151a1ae618a919d6151a1ae6182b28a822a024d625b82ace227624e727512cb120fa21d7276b2cb21ddf1e8a27b82c491c7f1ce927e929751238897f268eadb195eb940b2652ab2892e71a81271ca88d8ce81ee427ee1d45120e206127f796971835209126cda12e2005239b2746161d24aa26a5253fa70e226526c2249da818a321a1ed26e6ab29a91fa8be2680ab83a82a9d392550aa6aa67624712446aaf2a43d2836241fa93aa41a296e243da576a37228692427a356a2d627e4238ea43aa2db27982393a255a1e8257f239ba0fba086274924239e929fec242624ec9ce59e08205524e69c3a9ec9a23324fa9da39fd3a63324b8a0aea17fa920222fa0cba447abe61fc4a160a638abc71acc9ed2a482a8841bcd9d4aa33ca66c1c449daea2a2a5271d889d54a204a50d1d019de6a165a4141dbb9c6ea1e9a39d1c039ce6a067a32a1c8d9b92a0afa2aa1be89a3aa004a2001bd29a23a0c7a1db1a219b0ea099a1a11afb9ac39f47a1131a359a559ffaa0ab19fa99049fc1a05b19c799c59e9ca0f2188799919e7aa0cc186499889e5ea090184b99739e3da07318f4982e9e0ba044188b98e59da69f1118fd97839d1b9f5b17c4973c9dd39e10177c97059d919eda169b97cc9c689e67166896689c5a9ee115cd96649bcf9c4a14cd96649bcf9c4a14d2171f1ad11b011dd2171f1ad11b011dd72500230a253b274929422211249a27a32b24219e225427e02c4b201d2171282f2d351d371ef626ca2c9a167c179725d2a02690228cbf25c698680c9a16eb27cea152134b1c8b27c120451a5b2056279c961b1de12049270e967b1e7222c1277b9fa91dcd2343272fa4e70e1621022745a8bda1f69d3b2700aac7a5eea04d279dab28a7a4a09526a4abcda6c6202527e5a9a1a50326a12573a84ea414289225a7a469a3282945259ea262a21a29d0242da2f8a17c280125dea165a1b326a924bfa081a1b725af24e79fd4a0f321952442a028a1ea9bfe243da3a1a019a4642317a0e0a169a85f23639e5ea3b0aa6421fd9da7a4f3aa1a20279f4ba53eaa6b1dc79e0aa5eaa8a11d279e79a4b7a7bb1d309e33a4d1a67b1e599e65a3d9a5b41df89db1a251a5451d619dfda1b7a4061d989c78a11da4aa1c379c20a162a3511ce49be0a021a30e1cef9bb8a0d6a2db1bd29b98a094a2541b769b60a016a2e61ae29a19a0cba12f1a909ad69f71a1a819049a5e9f1aa11619b899e39ec3a0c0187499a79e93a08a185c99749e5ea04018fb98459e2ba02218c3980c9eeb9ff9178b98d99d899f70176598919d529f15173298419d619fc2162d982b9d289f2c161697d99c689fd915d897b59c769eae15d897b59c769eae153308bc1798186c1a3308bc1798186c1ac9235c23e92422273c27be223e24ef27f52a8322d2235028b32c1a2112227c28532dad1fc320bc28472d3b1d631ed328d52c841ac41deb28562cb91abc1df228992b0019871ef728902a9119722039293b2942184120ad287426b2198f204f28c6214514c01f68282e9e0f9b601b5c28eca655a1031c332878a919a4829b8f271caa5ea5c8997a271eabe8a53623732772a918a5d4258726b0a7b2a4ad27342655a5b1a4cf27e925e2a428a47628c0254da413a37d29d225c4a28ca2e1285a2580a244a39826b62517a124a230244e2522a15da1151ee024baa03ca29ca46e24e09f82a3e9a8b823c89f6ea46caa9e2201a007a509ab91217ea0c4a52baa4221829f1ba55ca90420079f8ba47da8dc1e089f2ba4fca6a61eb19ea9a3dea53a1eff9d4ba3a3a5ab1dc59d05a364a5751d7a9da6a2e5a41a1d329deba140a47c1cb69c63a1f8a32a1c379c2ba195a3e41bc89bd8a0eea24f1bf59a82a050a2821a4d9a46a01ca21a1a309a28a0eca1de19139a06a0bca19c19f899c79f63a12f19b699629f07a1ec18a299189fc0a092186f99f79e8ba070182b99c49e5ca04f18da98b49e49a01f18c298829e2ba0cc17b898389ef59f7317cf98119e659ffe163e98a39d339f93160498409d289fc5150498409d289fc515a5110417f019e918a5110417f019e9189c1d881f0c217a2341247e2232240c28c2286a22fa233728132cd52175239d28492dd820f622a328e92dad1fbf21dc286e2dcd1d9420c2282a2d091d2020de28e22c231bd61fd628402c651ab81ffb28f82952192520c32895286e131b1faf28cf2583968b1e9928a514de9d7f1c872845a214a106905628c2a829a31d9e0a283faa76a44290df27b5ab8ea586991a2853a901a5bc1fbe265ba789a44224742635a62fa48526e725b9a400a48628a52532a3dba3ff28b3259da359a3a328452532a331a354273425d5a1d4a20724be2417a14ba3581bcf24f0a0b7a3a4a24524ada01aa453a89c23a09e5fa429aa8722f49ec8a402aae021bb9fd5a480a9f4204f9ee7a45fa87220729ec2a415a82220f09e60a426a8891fa79e2ba430a71e1f4e9edaa36ba66b1ede9d47a3aea5b31d569da7a203a5151d2f9d38a29ca4b11ccf9cc9a147a42e1ca99c95a103a41d1c749c3aa19ca3b31b4e9cf2a0f3a2f81af09bafa09aa2881a989b76a02da2051a5c9b56a0e1a1c719b09a10a097a16b19ee99ac9f5aa1f0187999529f14a1b7184299e69edea07e18e998839e96a03e18c098619e51a02818b398fd9dd39f9d1768989c9d8a9f23176f98749d3f9fc216cf972b9d549f3e16f897059deb9e0e16f897059deb9e0e160000ac14ac15080c0000ac14ac15080cad1b3d1f662177223e228423b324fa2728266e23ed247d28ce2925225d247e28922c2021d9237828dc2d94202823bb28332e251fd021ee28e02d4a1d09211e299c2d531c8d202829192d60190b2030290c2c6013001e1d295e29a593b31c2329c425229b2715e728011e2f9e6f0fae2871a2fba0a78f752825a896a2749a1928e2a95da4d89a7d28ebaaf2a43f905628eca87ba4141e2827aaa52da42c225a2624a668a45b250d261fa430a4b527a425e8a246a4bf28ae2533a4bfa35d280a2509a418a4a226142596a215a4fd22b8245ca116a4eb946524cca13ba489a4212475a14ba492a8762303a090a479aaeb22f09fdea438aa68225c9ffca4d9a89721609eafa4d3a7dc20f69ec9a400a89e20ed9e7ca48da72720979e14a423a7231ff49db0a3aea6a61eee9d69a31ba63f1e7b9deaa27aa5c01d1e9d6aa21ba5461df79c22a2dea4c61cc39cdfa1a7a4841c999c83a13ea4321c6a9c45a172a3ec1b2f9c15a107a33c1b2d9ce0a0b9a2f01a2c9ccba075a2881ac79b84a023a2271a139b41a0c8a19c19c49afb9f58a14319099a589fefa0ae183299bc9e83a05618a8983d9e49a004186398c99d1ea046174a98a89df39f1b175798719dbc9fab160d98429db39f46162898199d129fd8152898199d129fd8150000ed04440cbf090000ed04440cbf09aa195c1dd91f352132217923b72414287f23de226c244728bc26672235249f28b42aae21c82381283e2d8d20132395284d2ed81f4222e728582ec51d0021e928e52dc81c5e20e3283c2d7219521f1b29612c000d581d3229ce2a2b96731be52856288f9c3618ad289c22239fdf0e9e2845a1f3a0cc0f4f28d9a782a22b9c46286fa9a0a3229d5128d5aad1a423990a2862a819a41116bf26f0a648a4d421d5269ca627a4112525264ca58fa38928602528a48ea461292d26e1a42ba4e9296d2582a439a4b6282025d2a230a4a525bb24c0a13ea45f1e742454a153a40da40724baa05ba41ea93e233ba09fa4b2aac82226a1ffa42aa984224fa0b5a4dda797217e9e86a4aba7c3209e9fe0a409a8b5208a9fbca4e0a75120fd9e50a4efa66d1f1e9ea9a3f1a56c1ed49d32a369a5f61d9d9df9a245a5a21d759d9aa21ba5441d279d4fa2d5a4c21cd89cfca162a4771c539ca2a10ca41a1c1e9c4ba188a3a01bba9bfda027a3e11aab9bc2a0c9a27d1a8a9b8ea090a2361a7a9b66a028a2ee19089b38a0e0a18019d99a18a0a2a147196b9ac89f5ca1d918609a7b9ffea0a918129a159fb2a042189999919e70a0fc172a994a9e52a0bc17e198f99d25a028175198a19d839f7d162e988d9cee9d86142e988d9cee9d861400005c03f309860900005c03f30986090b1a4e1d6a1f78219b20ad23f724d327b7218f23122542287123d422f5247628f327d1215b245d28272cd6205d237f28792eeb1f12229228132fc01da720e528da2e5b1bbf1f0f29252ed815b21d1429fb2c58934f1b3e296c2bf19a25182b298d28ec9db38ee028ce225ea030987a2850a0b1a1ba9b322887a7a6a2249f2c2809aa65a33aa0302845aad8a3699fc52775a72ea4ef9fe22680a596a4fa981e27e6a4dda36720fb25ada204a41c27e12562a36ba401290926f6a263a479298f2571a28ca4d6287e2575a27ea47b260c2502a297a49d1ecf24d1a2dba448a4892463a189a433a9992312a0cba442aa1523f09fe0a48da886220f9f97a467a77421759fe1a42da870210ea00da54fa8162145a082a4f4a7492009a044a433a7c71fe49efba391a6de1e609ec8a320a6861ea19d31a394a5e11d809db0a22fa53c1d429d8fa200a5031d329d52a2dda4c61c089d15a289a47c1cb29cb2a137a4041c4f9c56a112a45c1b1f9c01a1a1a3d31ae19bbba036a32c1a959b72a0bfa2cd193c9b4ca03da25b19fb9a1da0c5a12019799aa79f57a19918d299019ffda069187e99b49ecfa0391847997e9e9fa0e31721995b9e6fa0ba171d99469e22a058175b98e29d0fa0b4166e98919d899faa156e98919d899faa15000000003500000000000000350000003f1acc1d1620bd2127204223a42480277a200e2438257f28de203a2319257928db22a822b224ed281128a620a5237028272ddd1e1e223b28132feb1ca5208f28882f221a3b1fd828f52e2413b61d1929c92d439887190f297d2c099cd8141529fd295c9eec94bb28c7249ba0ad997e286da0baa1259e1528eaa7dfa272a0212864aacda34da2df27d8a8cea368a23527e8a632a42da2e6260ea464a4f7a0042736a33fa4039c1c261fa3daa365218a2546a209a421277925dda10ba478291e2528a21ea44029dd24d3a2a8a4fa271f2542a386a4d2206c243ea281a483a403247fa1baa42ca9b323eaa0e9a4a4a9562333a0a1a4cea74f22b09f2ba4ada52b21189f20a4e5a6aa201da07da41ca7b920da9f51a404a74920689f2ba412a7cf1f9e9edea3c7a62b1fc49e9da371a68e1e5c9e93a303a6461e0b9e60a387a5f41da89d04a339a5871d8e9dbea215a5301d5a9d5ca2b8a4c81c109de1a164a45e1cb09c82a11aa4001c689c28a1b0a3421b079ceda030a3a41ad29bbea0c7a21d1a4f9b78a04da2c419049b2ca0d5a13319769aa59f4fa1c318fa991b9fd9a045186999b29e9ea0c1172099659e58a035170399339e0ba01017fc98299ece9fc0168398e89ddf9fce167798ba9d19a0ad167798ba9d19a0ad16000000004d830000000000004d8300001f1b691e272017222220db23722501280d200d23eb2434286920cd22cc24782883204822b024b7280d2394201824602818294a1e35222a28162e591cba2082281130271ad11fdc28ca2fa815901ed828a82ef7956c1c1b291b2dda9b25180629d42a7f9fee94c2286326eca00b9b962853955aa23b9f652889a82fa3cda037288baabfa3daa1d127d6a78ea200a14526cca380a374a27d26b2a330a4a8a2d02625a4b2a424a03e26b0a43ba40e9da925f0a308a4c421302594a131a40228d02480a163a42829ed2467a174a472288e24aba166a4a022342414a194a409a4002474a1d9a483a9a023c4a0c9a4a5a910233da0b9a434a729220e9f87a4cfa77721389f8fa425a705214d9f47a42fa77020479f4da425a73520e99f4aa4cca6e81fd39f23a445a6501fa79ff8a33ea6dc1e239fb4a323a62f1e8e9e6ea3baa5d01df39dfca24aa5551d8b9daea207a5d21c0f9d56a2dba4781cca9c0ea294a42c1c669cc5a149a4861b3d9c88a1fda3221b0e9c4ea172a38a1abe9bfba012a3231a709bc2a0e6a2cd19589b96a0aba29819f99a42a0bca231196a9af29f57a2e5189c9bb89f46a1c218939a809f4fa17518969ad39e16a11a18179b419e55a00d172f9ad09dbe9ff6169d98219d289f66159d98219d289f661500000000d001000000000000d00100007119651dbf1fac21f91f88230f25e127102087220725af272a209f22cb247128f31f0822d624a62890203121c623f5282d23571f7a22ee281e2a4b1cbc206328602f1e17951f5a285330660c3f1e9328e92f1198981bc1285d2e709cfd14c628552cb69ffd9a76287b28f5a0d39e5b28b6955ba245a033283ea897a2d1a0bc27f4a961a374a1b92787a4bba23aa270260da360a399a2622670a325a30ca212263aa368a4d0a2572601a333a4cda1a82592a42fa4109ce724dca132a46e22b32430a156a4b827a724faa1aaa42228aa2499a1dba4e5226e24a9a03da48ba2612374a0a4a3a4a83922aba125a43ca8522217a0f2a329a67821f39f90a4afa68a2194a09ca409a72b214ba04aa4a6a686208b9f32a49ea61a20569f12a47ba6bb1fe39eefa330a6351fb99ea4a3c7a5c21e689e5fa390a5431e239e2fa36ea5e01dba9de5a22ca5551d5a9db4a2e7a4ff1cfc9c5fa2a4a4a41cb59c13a267a4601c759cd2a13da4191c539c9ca123a47b1b1d9c52a10da4051be69b1fa1c9a3761a699bcfa06aa3111afe9a6fa0f4a29919589a02a025a2f0186799029f4fa15e1829995d9ec3a0bd17b198ef9db8a00717a998f19d81a06217d898c09dfd9fb4163098349de39e6e1610985a9ccb9d351510985a9ccb9d351500000000d001000000000000d00100008b1a711e6420c62133206c231d25fb272f20522361252e28d51fd822492561289b1f0f22af248c288d1f2721cf23fd28341ee41e24221129fd23a41bc51f8d28f02b0515541d5c28df2f0095a818382849308f9843143628772f0c9d549748281a2dcd9f799c34284d292ca1549f3b2816964ba286a017283da9e7a276a1a5271aa96ea3a6a13c27f7a2d8a268a11d2668a23aa35aa12326c9a2a3a3a8a1fc2536a2fca380a2cb2518a38ca4b5a3d82518a4c7a404a41b2503a485a4a8a06c2477a15ea49022792461a160a4f2286024f1a158a422270a24b7a044a4d2953923cba060a411a8ab22b8a175a42ba85d2218a0eaa30aa51d2146a0dda35ca5c620cc9f1ea408a6c720e89f5aa43da6be208c9f46a480a66020769f1fa427a60820ce9ea2a3bea5231f7c9e96a3c4a5cd1e6b9e91a3cfa5841e689e77a3c2a52e1e569e3ea39ba5d91d0b9ee4a266a56e1dad9d72a2f7a4f51c2d9df4a198a47a1cc29c88a15ea4101c9e9c63a125a47f1b689c2aa10aa41e1b349cefa0baa3821ab29bb8a03aa3f419419b6da0bba29519c19a1ba02ba22f195b9abd9fa3a1b818269a249f29a13f18199add9eeaa01518149aba9ecaa0cc17069a959ea1a056177199049e60a09716ec98999d05a0f215ec98999d05a0f215000000004c000000000000004c000000e718931de91fb620661fd82375257f27ba1fee22e5240728c61f5d22a92429282b1fc8218d2465284e1ef8203a249f28001c251e8422b6281d1d2d1a601fcf2801248812441b9828642c4f95228d59289730c99b6d942f287430fa9d0d987228332e7a9f119d3028ed2ac2a06d9ef427ac1c67a139a01a27b6a886a21ea16427b2a587a28ca1792651a2cda208a2f72545a254a394a2be2554a1b5a3d4a27b25eea018a491a3432568a123a410a41a25ada220a46ca3a3242ea0e8a343a158243da1e0a3e3162224d4a027a437242724b1a152a4d523a523bea099a497a26a2352a1b8a427a9252301a32fa400a7d121399faba21da56d20429e4fa3dea57e207ca00ba4a1a5b620e99f10a439a67020d09f26a45ca651200ca00aa4fda5e41fd89fc7a3c9a59a1f739fb5a3c0a5e31e4d9fc3a3efa5a71e059fcea304a6581e499e9ea304a6f71de19d3da398a5b41d539dc5a215a5fd1cd09c54a294a4821c6c9cd8a14ca41d1c5b9c87a101a49c1b3d9c35a18aa3de1a409c00a11ba3871a109caea0bba21b1ac09b61a038a287191b9b08a0c9a12319629a769f3ca19818ad99f09ed9a02c187299999e9ca00318a199859e95a0ec17d799389ea0a05e173c99c29d8da0e5163399a89c0d9fd8153399a89c0d9fd81500000000e500000000000000e500000023198a1dd01fc120121fd72335254e27231f30231725a727e71eb1220d252b280a1ff7218d247928221e76202a239f28b31c671def208928bc1b301bb21ebb28a51aa18cde19d028eb21029c4f943e284a2c5f9d4b9958280e30839e5b9b2c27a12fcd9e689e3e27ae2cc7a05e9fb627d61fc2a1c2a0a6275da705a3a8a1ce277ba18ba299a15d2674a0d1a2a7a2fa25dda17fa3b0a3df25a5a1e1a3faa39b257fa116a438a46e2504a10fa44ba4e724eaa01fa4b5a46b24a8a0daa45da4da24aaa25ea486a2a12364a2fca2e497fc22faa099a32b24cc23b6a044a4ec14812324a01ea4fea6902292a011a4c9a50a22439f64a3aaa400210ca0e8a306a6fe20d3a028a43da6cf205fa0f9a33da67220f79fdaa3cca5182001a004a4d8a5f81fc89f0fa4d5a5ae1f849f12a4daa53f1f059feaa3c0a5a91e6c9ec6a3a4a5341ef29d82a370a5b11d839d2ba319a53d1d439dcaa2caa4d81ce69c71a289a4711cb69c04a242a41a1c999cb4a10ca49a1b859c57a1b0a30b1b749cfea03da35f1a269cb1a0bca2eb19bb9b6ca045a29419f19a24a0e1a10c19519ac89f78a1cb18ae99809f34a19f181a99c39ebfa01c18ef980f9e3ea0cf171199bf9dbe9f3a17e5983b9d779f51162b9a749d4c9f9b152b9a749d4c9f9b153c072b14bf1774193c072b14bf177419331d7421f3229024a61f1124352561275f1f36233e255d27841e9322e324db27011ebb215f241f28261d8520eb222f28451bc91dbb203e284d188f18bb1d36287a1277958b187928d1105b9d8b966828a71c8a9dc1986727cc28699fa39c6928122d2da0299ee227992ab3a0339fba27179a82a119a03d2796a3e6a166a12d264a9efba2b1a21f26aea00da34ba39525bfa07aa373a38725e5a079a3b8a32425ffa05da30da4d22454a1a2a385a4a12444a1b2a368a47224f8a010a484a42924ef9f69a34da36923729f7ea268a10522e49f4da3f999452258a19ba3ba9d3522bf9d35a45aa5622263a057a3d1a42d2108a016a392a4bf209c9e71a321a5bc20df9f76a35ca581206d9fb2a385a56320469fa0a374a50d200f9f71a361a5821fe49e6ca382a5011f169f9aa3aca5f81ed39e82a3c9a57f1ec79e91a3baa51d1e419e5ea390a5c51dde9d24a354a5531d929db6a217a5e31c4f9d63a2a5a48c1ce99c0ea243a4371cd49caca1f9a3cf1bca9c32a161a3281bb69cd4a0eaa25f1a5c9c75a060a2e119089c3aa006a28519819be99f88a10c19a69a7b9f37a1c618c599fe9edba05b182799749e78a0d8172099049e2fa035172b99e19de19fc716e298659dbd9fdd152998f89c3da05c152998f89c3da05c150000af10171462180000af1017146218931cfc206a225a24e31fb0246c267e27621ff823c9254727f61daf22e424a5276f1ddc212224f327741c10205322f027d219871b9e1f96274415040c5b1b572765879e99690d9a27ff90609c9796a927a194cd9db69981271f88f89ebf9c0727301bb79f229f57261f1bbea005a0dd261e9e7ca01ea033254ca04fa210a140268b9f1ba21fa20e25f4a0d8a2bba2602524a115a322a32c2532a11ea357a30c2507a100a3a7a3b824faa047a306a47024c0a09ea386a44e246da034a365a4f323f5a005a344a4332334a104a416a4772357a243a403a6b122059d1ba13ea30d20659b28a027a46e1f639d98a108a45a20d09df4a173a42c20cd9ec5a2a3a43e20d49ed6a2c8a41a20b49ebea2fba4a51fa79ef4a21da56d1fa19e06a339a5381f979e41a354a5311fbf9e92a387a5081fce9ec8a3b4a5d51ecd9e00a4d8a5621e699ec7a3c7a5161ec39d76a37da5bd1d5d9d06a34ba5471d0c9db2a205a5dd1cca9c2ca299a46f1ca39ca3a140a4011c7c9c44a1e7a32c1b979ceca061a37d1a639c9fa0bfa2091a389c42a030a25f190b9c02a0ada10f19429b5d9f26a18a18709adf9ecca048187f99529e7ca0af17fb98fb9d46a01517fe98cd9d2fa0b01684988e9d1da065163b98269d4c9f98153b98269d4c9f98155a0c4814da16af1a5a0c4814da16af1a0e209524232661262f1f5624ba25c526471e70231b256c263a1e2b23f82401279e1d6a2297245327e21bdf1f17226d2711188319451ef5261a12de948118a226408d4799058d6c26f894a19c5f98a4264d987e9ea19ccb265b99f09fee9deb26649bb9a0869ef626799cd0a04ca02626439c9ca0cf9fae25ae9cdca05da08925ff9e87a105a15e25cd9efca1cca13325289f72a246a2dc24999f8da211a3962416a0dba2a7a352243ea0aaa2b4a3022428a0c4a2f3a35623f99f88a21ba4e7226da0b2a2e8a385224d9f54a2a1a35422fc9ddaa284a30122ab999ba007a57a1ff59c7da08ca59c1e839c43a208a56120df9d08a2f5a4d11ff39ef8a1b0a48c1f549f19a2a4a4071fe49e2ea2c3a4641ed09e31a2cfa4681edc9e60a2e0a4dd1ef39effa223a5331f809fd0a378a51a1f3c9f0da4b8a5381f919e03a4c0a5c91e0e9e94a38ba5771e819d29a335a5bf1d2d9dc4a2fba4661d079d61a299a4c71cdc9c03a248a4671cbe9c95a1dfa3d91b8c9c15a13ea3ec1a569cb2a0a5a2541a329c65a034a2bc19049c1ba0c2a15b19809ba19f4ba1dd18da9a1b9fd6a09518719ab69e8aa03a18429a6b9e4ea0cd17039a159e1ca09017009ae59ddf9fdf165b996e9dc19f67167c98e59cf49ecf147c98e59cf49ecf1400003d913b93e30b00003d913b93e30bf71dfe22a6247f25881e28245f252026b81ea7236f253026151e04246926f626091efd22e2255227a01bd61e0922c42601174a0cf01819265e07b29aca96dc25d5941a9d3a9cc6257e96e59dbe9cf3253d98439e349d3526f098d89e989d0426ea99199fc99e1426bc9ae19f9f9e04260d9cb0a0d79ff125199d5ba101a119260a9fada1a3a15125c09f15a25aa2002506a070a28ba2c02434a0c9a209a38224a0a019a392a37224bca020a304a42624c2a018a34da408249ba01fa376a4e7237ca03ba33ea46d23fe9fc8a236a4c822049dd9a128a467218198a4a096a4e81f349cd3a0eaa4431f939c88a258a534204f9d4ea2f5a4bb1f499e95a12da4351f009efea0a4a3831ed19d04a193a3161dae9d2ba1c0a3cd1cbb9dd4a151a4e61d8c9e1ca326a5c11efb9e05a4d8a5221f839f65a46da62a1fff9e38a43fa6d21e0b9e9ea389a5e31dad9d0da3fca45c1d319d97a2a0a4e51cfd9c24a27aa4521c8d9caea11ba4d31b2e9c18a18fa3021bdd9bc2a00ba3471a999b87a0b3a2f9197e9b57a056a2ba19259b22a006a245198c9abe9f72a1fe18f999309fe6a0a3189499c99e98a06c186999749e67a01c182f99249e23a0e817fd98e19dd29f0a179798899d989ff6165e98269dc59e12165e98269dc59e12160000a089a691c7020000a089a691c7023a1e1821752463242e1ee4233e2571253c1eb42319257f25631e6a243f26c226ba1ef8230c2676274f1bf81dbe210c260008da9b179b3725ac94df9ed69ec724e8957f9eaa9dfd24c395b59dd19c71253a97a49d3e9ce7258198959d369cf2255d99429e379de8256c9a879eb69daf256f9b8a9fe69ec2257a9c57a048a08025059d22a1fea06525ae9dd1a1f3a10625829e30a28ea28424ff9e24a2c5a20424f99e15a2e2a25b23c09e15a22aa3fe22cd9e0da22ba39722f59e06a272a33522e69ee2a15ea30f22d39f70a2eda37022809faaa2b1a43122c99b1aa2e4a4fe20039c31a2fca4d8208b9cbba103a56720679ceca013a4ff1e559dd1a07ba3691d929d4ba011a29b1b1d9d7f9f8ca19519059db29f93a13a1b459d74a0a5a2b21c259e7aa2c4a48e1e999e39a41ca6a01faf9e93a484a6811fcd9e70a454a6961e619e17a4cda55f1ee79deca2f4a45d1d649de8a141a4a81cc09c87a196a3431c529c1ba110a3901b139cbca0aba2cd1a8f9b85a04da2391a6e9b46a0f0a1e219e29a02a0a1a158198c9a7e9f58a1e218549a279f24a1a918179abb9ed6a070189b996a9eb2a016182f990f9e62a08917de98b29d1da02817d2986d9dbd9fa5166598079dc19fd5150398e59c209f61150398e59c209f61150000838a568b830a0000838a568b830aba1cb92086220c24241d61212f23d424b51cd721e6233a25ee1d57230525b425342073262228f5277717880fc6108825349b45a484a487224a94da9e249f67231893f79ba59a9824bd93ee9a5c992725c094d59a52987025c495d09a42989a259b97779b42998e255699399c729abd25199b809da09c5d26cf9c799f959e24263e9ed4a014a14f25049f8ba1fda18d24eb9effa138a26a23889ebca157a21f22a19ed2a159a23a21389fc7a16ca29b2007a0afa1cda2b0202ea0aba11ea3ab214da043a2a0a31e230fa02da373a451248a9fe7a346a53b24619f04a4b1a5ce22919fafa2a9a449214ba040a21ea426208c9f5fa12ca34b1ef59e27a002a2571cc49dfc9d47a05d1a429c6b9c069fd818039cf19bfd9e2d19949c8b9d9fa0bc19b39e7da28ca49d1d0da0f7a498a6632028a06ca534a7bb20719f6aa40fa6c91f879e56a304a5291e5a9d4da25ba41d1dfa9ccda128a4a71ca89c7ba114a43a1c719c26a1e3a39e1b339cb7a01aa3c51a1d9c70a026a21c1aea9b1fa09ea17f197f9bba9f44a12719019b529feda0c6185d9ac79ea9a05118b299499e62a00d180899d69d25a09a179d987a9dce9ff8167798409d959fc11664980d9d239f1916fd97c49c339f0d165d97b99c8f9eec155d97b99c8f9eec155c88e7904d9086135c88e7904d908613f318a91d0420b4213b1b501f06211b24231a461ef21f19241819b71c361f2b23161aec1edd202527d01c28218725c0257f151e1cca1fc0278b1379140f1a4124360efc0e4118fc245184858e1515b8242c902795a710e6240e947796630a0825eb950098940a1e259597ae9833911b258b9819997d949125029b759bfa97a126049c169ed69dc225779d83a05ca0cc236f9d53a1b5a1d320e19d2da1e3a1f31d6a9e52a129a2381dc39d92a106a28e1aa89d6ea13fa2ee1abc9d70a1bca16a1ef29df9a13fa36e23b6a0e6a409a645252b9fe1a36ba52123659c60a1f0a21e20199cd5a0c0a20e1fc89d33a1eda2181f9d9f7da14ca3ec1edd9defa0b6a2221e6b9ce39f76a1941cbe9a9c9b729d8616d19ad594359999976f981d12ef9896988a9d27a3faa4921f15a1f5a68ea8492280a0c3a594a7c220229e82a367a54f1eab9db0a2b5a4561d379deba130a4b91ca69c5aa16da3191c949cbea075a2431b569c4fa0e0a1671a309c1fa0cfa1ef192a9c05a0aea1ba19d19bc59faaa15b19499b3c9f61a1fd18ab9aa79ee3a07c186d9a269e77a026182f9acd9d4ba0e917f199a39d30a06e178c995f9d1aa0a8162399329dba9f7116ae98eb9c399fef159c97569c599e4615e796059c7d9d4014e796059c7d9d40140000b887d588b8870000b887d588b8874218ac1c3e1e0f208c1a651e5d2042229b19541d591f58228518db1b9c1de42001115b158d18e81b7f13e8165d1a4c1f49160e185e1c07249214cb14ec1a7e24581055080118a324688b94935b109224d692e99723937324e695a09a9d9879246c987a9c7e9b7124ab997a9d069d7624349a939e239e3324889a2a9f249ff122b39abc9f929f9e21889bc79f04a093205f9cd89f35a07020c99c01a026a06020809c619f06a008206c9cf69e699f2020e89b359eb69ed21e0e9a699c0c9dd21a6199959a349c2a18279a239aa49b3518a79aea9b6d9de819fb9b859dbb9f4a1ca39cd89ecfa00c1d499d8d9f4fa1651d709db69f89a1371d299dfd9fe9a15a1dc79d56a063a23b1d3e9ee39fe6a1621cf196609c0da07218cc178e242825aca18ea2c6a733a919248ea007a792a84b22db982ba0dfa3771b7a9c92a0eca2251ca89c9da09ea2b81b799c60a040a21c1b289c1aa0e6a1761a309cf29fb2a12f1ad79bb89f80a1c219909b649f4aa15519259b029f1ba1e5188c9aa79eb3a0a518df99019e65a00d188099a09d4aa09617fc98709d18a05717b598549de19f31177e98419d919f16176d982d9d299fbe165598059de19e88166498cd9c8a9e5316e997a39c5a9ea915dd97699cd89d9915dd97699cd89d9915000072009003aa06000072009003aa063c1a771eaa20b721d6199e1d852020228918a61b2b1e552173163b19031ceb1e4f141f186d1a651d1c162e1a881d7821f015f018f81cf0230d157e15741a262426122e0e87183724980450933c10372438916c98e69432246395e79a349910248497289cec9bbf231799f49cfb9c6d239399339dea9c392249983a9b319b4e1ff794b198e199121c2497579b9e9bf11dfd996d9dcd9d5f20689bf19e429f5821239cb79f30a04f21969c36a0b0a05521dc9c76a001a11b21bf9c4da0eaa07e200b9c13a0aca0a71f0b9b589f85a07d1efc9ad39e6da0c41daa9b719e50a0371d399c749e76a0191d909cd29ed2a0291d8c9c479f43a10d1d4e9c479f7ba1c91c669c8d9fbfa1a91c699c919f64a1691c529d12a05ea1bf1c9898cf9cca9e0c19c682608c479016052390379473983b0f049c8a9d1fa0ae18f29b7a9ff3a0061b379c399f24a1691a2c9cde9ef5a0ea199d9b9e9eb6a060193c9b6d9eaca0ff18c19a769e99a0e518579a679e9da0a318f699499e8da07f18b599159e5fa034185499e69d22a006182799a39def9f6d17f298549d849f0417dc980c9d219fa616b798be9cbf9e4016af988c9c709ed815aa986b9c309eac15cb98669cf09d60154b983d9ce69dfb147997f89b439d27147997f89b439d271400004d11a413af8200004d11a413af82631a9d1e13208a21ab19d21d8c1f2c22fd17c31aa41c6220f9150019581bc11eb014f618521cac1fbf16e019991ceb21ee154c18f71b8623a6132b15b11a93237010b40d3b186e23f803d08db5149223628f79958e09a6233c943e99f5948d235c97309b4b993f235898629ca09bb1221a98619c299c7221bf97ca9bc79b452060981a9c579c2420c099e99c269d9820089b949d029ec7208c9b2e9ea59eb520b89b9d9e8c9fbf20ec9b059f26a08a20119c4f9f6aa03220149c989fa6a0f11f179ca39fe5a0781f129c959fe0a0f11e189c9e9f18a18b1e279cc69f40a1251e169cb69f35a1bb1d019c809f11a1561dbf9b6c9f1da10f1d7f9b549f35a1e91c669b739f39a1b21c3f9b6d9f68a1991c159b709f61a16a1c179b659f33a1011caf99299e3ca0e2197c96229c299e68171996f99a9d9dfa15eb974a9c959f73160c99e19c40a0c617aa99619d3ba05a18f099a39d5ca0ae185f9abe9d65a0cb18759ab39d55a08b18659a7e9d2fa052182c9a799d25a01d18099a589d08a0ab179d99409def9f6e174d99249ddf9f0717fa98169db49fdc16ac98fa9c819fa2164a98b99c279f12161b98949ccc9ea915e497649c6a9ea41504984b9c089e19158b972e9cf99db5148097169c9e9dcc148097169c9e9dcc14000000000000000000004d11a413af82631a9d1e13208a21ab19d21d8c1f2c22fd17c31aa41c6220f9150019581bc11eb014f618521cac1fbf16e019991ceb21ee154c18f71b8623a6132b15b11a93237010b40d3b186e23f803d08db5149223628f79958e09a6233c943e99f5948d235c97309b4b993f235898629ca09bb1221a98619c299c7221bf97ca9bc79b452060981a9c579c2420c099e99c269d9820089b949d029ec7208c9b2e9ea59eb520b89b9d9e8c9fbf20ec9b059f26a08a20119c4f9f6aa03220149c989fa6a0f11f179ca39fe5a0781f129c959fe0a0f11e189c9e9f18a18b1e279cc69f40a1251e169cb69f35a1bb1d019c809f11a1561dbf9b6c9f1da10f1d7f9b549f35a1e91c669b739f39a1b21c3f9b6d9f68a1991c159b709f61a16a1c179b659f33a1011caf99299e3ca0e2197c96229c299e68171996f99a9d9dfa15eb974a9c959f73160c99e19c40a0c617aa99619d3ba05a18f099a39d5ca0ae185f9abe9d65a0cb18759ab39d55a08b18659a7e9d2fa052182c9a799d25a01d18099a589d08a0ab179d99409def9f6e174d99249ddf9f0717fa98169db49fdc16ac98fa9c819fa2164a98b99c279f12161b98949ccc9ea915e497649c6a9ea41504984b9c089e19158b972e9cf99db5148097169c9e9dcc14000000000000000000000000000000002e1cd613ff149b181228c9205222d825292abb22f1236727bc2af31d561fa3256c2b7c1ba51c6925352b5f19c7192d254e2c7118a11bb7268f2c3311401835274b2a658b5c155627f727da96590cc2255f272f9af093f5262b25f39a00988b266f240199dd93f925001ce4986315062606a34aa134a0b2220ba897a5a1a35f20d9a8b7a8f0a25128bfa98fa757918628c7a896a39c20a82446a9f2a07525432264a611a1f425dc2113a3dea1e6249d22fba053a273247c225e9f44a12a248921c39f03a1c723452152a094a1d521dd21f99e41a14e1a4121b89dffa0fa9c8f214c9d89a039a1b8218a9d4ea1a7a41d24fc9e16a373a6fd245d9ecea5ada9bd1f279a4aa20aa6fa1c059957a0f1a3a01b679cbea08ba3b61c8a9cbca04ba3d81cc39cb2a019a3bb1c5c9c82a0e7a27a1c729c6ca0c8a2451ce09b2fa080a2a11b469b15a024a2201b729afa9fcba1c71ae999b09f6ca1401afa99909f47a1e019fa99669f09a17e19fc992a9f09a14019b299e39efba0fc184b99779ee3a085182f99589ebba03b18f898309ec1a01318de98179e5da0a4179b98bb9d8a9f30171b98329dbf9e85160698189da49e64160e98239dba9e5f162598289dc49e65163b98199d969e15168297e29c759e8815b697ae9ce39ded1400000000000000002e1cd613ff149b182e1cd613ff149b181228c9205222d825292abb22f1236727bc2af31d561fa3256c2b7c1ba51c6925352b5f19c7192d254e2c7118a11bb7268f2c3311401835274b2a658b5c155627f727da96590cc2255f272f9af093f5262b25f39a00988b266f240199dd93f925001ce4986315062606a34aa134a0b2220ba897a5a1a35f20d9a8b7a8f0a25128bfa98fa757918628c7a896a39c20a82446a9f2a07525432264a611a1f425dc2113a3dea1e6249d22fba053a273247c225e9f44a12a248921c39f03a1c723452152a094a1d521dd21f99e41a14e1a4121b89dffa0fa9c8f214c9d89a039a1b8218a9d4ea1a7a41d24fc9e16a373a6fd245d9ecea5ada9bd1f279a4aa20aa6fa1c059957a0f1a3a01b679cbea08ba3b61c8a9cbca04ba3d81cc39cb2a019a3bb1c5c9c82a0e7a27a1c729c6ca0c8a2451ce09b2fa080a2a11b469b15a024a2201b729afa9fcba1c71ae999b09f6ca1401afa99909f47a1e019fa99669f09a17e19fc992a9f09a14019b299e39efba0fc184b99779ee3a085182f99589ebba03b18f898309ec1a01318de98179e5da0a4179b98bb9d8a9f30171b98329dbf9e85160698189da49e64160e98239dba9e5f162598289dc49e65163b98199d969e15168297e29c759e8815b697ae9ce39ded14b697ae9ce39ded14f61533141918ff19f61533141918ff193827ed2346251027252a1c237c240628192ca8209a214f28a12c071f5a20a728cf2da51ca11c1128172ea916cb188d28ec2c4d0b3e13b427b527d494f51b8b271a207a919015ae26d5245515fd1c45270222ba1966207126a4151420c823e327a41593237126b32714a62a1ca22204245ea58ea1089e822315aa23a83ca7f42586abd1a89da5e62759aae7a7d49d1b2726aae0a515229c25aea815a5f724cc25b7a633a4e925a825efa380a30027a02465a4daa2da26e024f4a1d4a1d725632517a0c9a08725e72527a07da075222726159ef79eec1a4e26a69dea9ed5a0fb267b9e35a1b3a63827d29f72a46baa4c25c4a0b8a632abba2172a0dda50aaaac1d119e4ba4b3a77d1cec9d89a359a6b31ca89dc0a2c4a5071d019e84a245a5071d109d06a28da4cf1c999c8ba115a4901ce79b06a175a3151c809baea0d5a2451b499b5ca025a2c71a1b9b2fa0c5a16c1a509b1ea0aca10a1a209be69f51a1b719779a629f11a15819389a169fd8a01119e999d99eb3a0ad18aa99b49e8ea085188f99b29e67a04f186799839e55a03018fe984f9e24a003189498009ece9fa1171598879d1b9fda16b2973e9dc99e42167797009d879e46169597c79c3f9ed615a096699c3a9e3d15a896dd9b439dd914a896dd9b439dd9149812d616ff18be1c9812d616ff18be1c7e253324d6253a28c228d5235e256d289d2b3d22ac238e28092dea203122f2289d2dcd1eb7205e28b42d2a1c3c1e15288b2c4719a9181c28a4293217291c04289a22a215431d42283c28691a042056287f27cb1c2a216f28fa24bc1d9f228a286120991c3b23062894a06795bd1f3026fea656a18e9d742554a93da553a3a426b8ab9ea7c4a4fe266aab01a7cfa08a27aca9aca542113c2670a885a4bc216126c9a462a454241726cca2baa304275825cca2d5a2ca27bb2541a21fa36f24e52566a17aa20b240c2661a05ea1f71dee2530a018a1069b13262ea054a19da40125469fbea216a88424889fd1a4e2a9382228a00ca65faa99206da033a658a9b81dda9f4ca551a8661d4f9f7ea452a7721dde9e2fa451a6f11dbb9e9ba3c3a5661dea9deda27ea5071d659d40a2f4a4b21c8a9ca9a138a4571c4d9c47a17fa3001c0c9cf3a02ba37f1b019cc9a0dea2291be99b9ea0a0a2af1aa79b6ba03ca2511a559b28a0eaa1e019169b02a09da16819859a969f4da10f19479a3c9ff3a09918e899e19eb3a060189999ad9e6fa00b183399799e33a0d717da98309ef49f7f17a998f79d949ff41686989a9d529f9a164298499d3f9f4e164c98349df69ef7153197bf9c199f81151898cb9cb29e1a151898cb9cb29e1a1500005f1413167d1a00005f1413167d1ad62330249325d127d326a5233925ef27cc2a0023b8247428bb2cb4214723e028802d46207e2122299e2ddc1d082032298a2d4a1cca1e5329cc2c121c411fc029c12b7018e21d8229582a7518301e2229d52873161a1eb828a4252f14e31e7d28ab21298e6b1d7a28e69d499dc0161e280ea60da2d81068278ea882a436a083270eaa7da560a06a2772aaeaa57997f926c0a81da5271a3c267fa647a5481e592640a535a5b120a926c3a33ba4e224f825b3a222a44f27ee25e7a108a48226d625b3a1afa35124302634a1a2a20620b22506a190a2799d2325b0a08da360a59e248fa051a4aea8822379a052a5aea99c2283a0f7a52faa9921e0a068a6cfa908211ea06ba5cca8b51f25a0b1a4dba7801e3c9f35a4aaa6311ee29ec8a3e3a5a61d1e9e58a3a9a5441dfa9d06a35aa5091d819d9aa2d3a4ad1c1d9d14a257a4401ca79c8aa10da4c01b519c4da1c5a3531b049cf8a02ba3ca1a309ba9a087a24a1a879a64a03ea2da19539a33a009a28919349a11a0d6a11d19099ade9f7fa1e318bc99709f34a19f189c993e9fefa04a187f99059fb0a028183199d59e6ca00c18eb98a99e49a09617e4988b9e34a07517d998429e03a0ee16dc981b9e7a9f7c165a98a39d499f51161a98529d2f9f0a151a98529d2f9f0a159e18fe183d1bc81d9e18fe183d1bc81d751ae71a3e1c411c03241223ae247727a0280e2353246428da2b5d220c24c628472dfa200024c028f22dc71f3f221029e82dc41d2d210a29922d141d5e206929202dbe1a1c205329182c73180a1f4929e929ce16b01f51294e28798df91d00292a25379a1d1c9e28b894d89e1c165e2879a4b4a14b9b2f28d8a818a46da00c2846aad5a420a0ef2759abaea59fa0f327f8a8f3a4969b9e2617a7aca4ee10e7266ea53da4941e35267fa481a493231b2634a35aa4d02411263fa343a4d424be2570a25ca4a822cb2534a208a406206525aca10fa4b49ae22418a128a439a528246ca0afa470a86d23f8a03ca54ba9bc229ea080a517a98c21caa026a527a9b5200ea065a5e7a84d200fa022a555a8db1f929fa3a41ba80f1fb99e38a433a78e1e709eeaa369a6cd1df39d49a393a5451d8c9db1a201a5c91c2b9d37a2aaa43e1cdc9cd9a156a4e41b9d9c9da11da47c1b859c4aa1c5a30d1b6d9c0fa120a3aa1a1f9ccaa0c0a23d1af99b96a049a2b3199e9b5aa0f2a13719f79a15a091a1e3182d9ab69f55a19e189e99589f16a13c187799fc9edea006181599859e9fa0e717ed986b9e61a06617c298129e08a0cc167398cc9d9b9fc2168998999d529f1416e4972b9d299f811520982b9dd49eee1520982b9dd49eee15de19341a301ce81ede19341a301ce81ed818141abb1a061ca422db235c25942735260b245125e128cc29bf227824cd288e2ca1213224c928d22dcd209d23f6285a2e661f1e220829092e071db0205c29be2db11a05205c29192d3e16cc1e4429c82b0d94c61c71296d292e9a81183129be252d9d4a8fca28191e00a0c495902891a29ba1fb98602883a83ba3649d3f2884aac1a4e89f87288faadba4b39e282811a85ca4559ca426ada5b2a47b96bc26d1a567a41011da257ca435a420207a250da48ea4a922cd257ea4b9a48a229b2501a4eba4e11f8f2534a3d8a4d89af72490a163a4d8a1472461a16da4f9a5d023a5a1c0a487a84c23aea14fa511a91c2332a16ea5b2a837226ca01ba516a83b214e9ffca46aa79520f29ffba4f4a75320789fa9a4b5a7c71f6d9f2ea404a7e31e3f9eb2a3c3a62d1edd9d6aa340a6ce1d949df6a27ba5371d409d95a2f2a4dd1c339d50a2cca49d1cf89c1ba2a4a45b1cc89cbca14ba4d21b849c6fa1aaa3541b399c2ba147a3e51a3b9cfda0eba25b1a359ce9a0a6a22f1af59ba8a045a2aa194e9b6ca0faa16019ea9a25a089a1db18299a9e9f09a176185d99ec9e9ea01918cd986a9e65a04f177698019e2ba0d6166998c79d0da0a9168c989d9dd99f09165598789d03a020166298429d4c9f4a156298429d4c9f4a155e17f8172b1a971d5e17f8172b1a971d7519a61aa21bb71c94211f2447253528f023f5230e25bf287c26bf225824be28942ad1210524d1281b2dd4202423dc284b2e7e1f01220729882e751d9e201029ff2dca1be31f2129612d7916201e6129622ced93b71b3e29c82a4f9b441507291728589e5e95e2288621e0a0679abf28cba259a2469c702807a842a3259e5128b4a9efa3539f2b2887aab6a4649dcd273ea84ea48a9cb12647a779a42399be26f5a672a4b79808265fa54ca4681c69250fa4aaa41921c8256ea5b3a41f226f25daa3e6a4d3204525d3a28ca46f1470247ea12ba498a08c2390a04ea483a619235ca1daa4a4a8022345a15ba519a9da22d3a0cca53aa89c22c7a026a57ca76f21f49f05a529a8c32015a027a52fa87a2015a0efa4c3a72c20259f79a4dda6221f3a9ed1a3f7a5271efb9d53a37ea59e1dae9dfda256a51f1d749dc7a240a5d91c399d73a2f4a48e1ce79c2fa281a4451c6c9cc6a134a49c1b2e9c85a1bfa31b1be39b31a150a39d1aa59be0a0f1a2fc19a29bb5a0b6a2b819899b87a057a27219129b55a001a20519dc9a24a0b4a1cb18779aeb9f70a15e183c9a7e9f07a12d18d6992a9fc9a0e71745999a9e8da01217fd98509e66a0d516e3981c9e3ba058169398c39df39f4f166298179dad9ea5146298179dad9ea5141e183318a219851d1e183318a219851d7818f6194c19161c812144248e251228ce223424a3259928362353232625a8280f28fa2148249c28e42b03219823e9284e2e0c200022fd28232f001dc0202f29f42e6919b21e4c29312ee50c701c3d29092db8993a184929702b9c9d098f3d29972816a0319af328f12255a1c49da5286aa095a2689f2c28afa761a3bca0332822aa8ca415a257285baaa4a4d5a2d527fea784a41ba3be26b4a6bfa430a31627e3a5b0a4c8a05b2635a490a4e99c112646a3b8a40318942588a3a8a46c1d1f25b3a28aa48a1cc2240ba4c9a42a14902499a309a5b6a363242ea4eea43ba7df23d2a141a55da8b523f6a042a507a8ea2211a005a524a7fc21c59f16a593a7872141a043a552a84d2171a049a56ca8f22089a0a4a4daa716201ca04fa4f7a60e1ff99e21a4a7a6961e7d9eeba367a63c1ee99d5ca3c0a5761da39ddaa249a5f61c5b9db7a215a5be1c459d7ca2dea4861c1b9d38a28ea4191cc89cd8a14da49d1b779c85a127a4081b4f9c32a1c7a38c1a2c9cf0a062a3f119019ca0a0dea28f19809b74a059a21a19419b49a0eea1e918c49a01a081a16b18179a579f27a14018d999f99ee0a00a18a399b69ea8a07b178299829e67a041175c99599e1fa0cc168298e39df09fda156f98949d7a9f5c156f98949d7a9f5c1573049c82ff80b28473049c82ff80b284d8165a18e118b41ab220fd23ed246c270e219c24a625e72839215e2306259728c722ec22f0240e29b927e7205d23de28012d2c1fb521af280d2fcd1c9920e928942f69197d1e1229442ff60c5d1c3b29e22dbe9adb141829a62c049e0a951a290c2ae79f9c9bf028f2248ba1939db728a0a07aa256a041285ea893a3c9a11f28abaa25a4a6a3c827c2a832a43ba3152716a65ea44ca3b72621a49fa4ffa2c42629a3e1a4c8a19d26c4a3f6a47ca0d1252ea26fa4789b1b25b6a230a41a1ab824a2a374a48618ac244ca3cca49b999324e6a31aa518a46f2410a43ca566a73e240aa445a530a8ad23b3a1f5a4f8a67522fb9f32a4d6a7f32077a09ea432a718215ba0a1a45ba7aa2043a099a423a75d20fe9f6ca41aa7e71fa29f44a42fa76a1fe39e0da4d1a6db1efd9ee2a358a6491eb49ebfa301a6051e569e7ca3a0a5ac1dec9d3ca352a51d1dd09df4a220a5f61c819d75a2daa48e1c459d0aa285a42a1ce69c9ea135a4681b959c52a1eaa3f01a2a9c12a172a3521ae49bdea008a3c919779b94a091a27119239b40a009a2e0189d9abe9f7ea145183a9a349f07a1f217bf99e29ed1a04b179499a99e7fa022174a99729e2aa0fb163b995c9ef99f9c16c198ee9dd99f9016c698eb9d1fa0f315c698eb9d1fa0f315a802ee84738eee84a802ee84738eee84ad16db17d917f1190a21f1237d25fe27b020d9231d259928592055230c25b12809219e22bb24d528e823d9206723d1282c29ad1ed021c6282c2e0b1ca420c02816302318b71f1029b82fdb0c611d0c29ab2eb299231842294f2d5c9dc58e1629ea2a85a09b9be0283c27cda15f9ebe288095bca289a06128b1a87ca3c8a126285eab4aa4aea21a28aea700a474a20427d6a31ba433a3a22689a453a477a3a6268ba38fa4d1a225265ba465a449a2ae25b2a36fa4b1a217251aa29fa428a09f244fa1c4a4d49da82451a22ba52aa0d2246ca210a5aaa4512408a2aaa5d6a7852466a3dfa57ea8322417a3f6a4daa687227fa063a4b6a62c218fa0b8a482a72321fd9fb2a436a7bb209c9f57a43fa70d20b69f68a425a7bc1f07a05ea4aea6731fad9f3ba45fa6061f8b9f22a47aa6751e0a9ffea365a6021e869e96a305a6601de39d16a365a5e51c9c9dc0a218a58e1c3a9d79a2dca4111cef9c38a299a4a51b999ce0a15ca4241b5e9ca0a118a4c31a189c63a1b4a32c1af49b1aa14ca3c819989bd8a009a37e197c9b99a0e3a237191f9b2ea0afa2be18e79acd9f39a26c183b9b929f67a12118989a439f4ba19c17179bf89e01a14e17569b7b9e3ea09616e999aa9da79f46169e98179d1f9f4b159e98179d1f9f4b158704e9811e0175848704e9811e017584aa172019b3191f1b332010245425db27d620ac2357254128a120f022072589285e2076220125fb2804214e21032458293124d61f52224229302aca1b51209428772f6b15951e92287430aa8c671cb3282230c59a1618e3287e2ed59df494cb28652c51a0f49d9428922806a2ada05f28c49500a382a12e2857a8efa280a2ae2710ab1fa402a30328aca59aa375a37426c5a342a4fba37b26aba367a4d9a36226d5a2bba4d8a435267fa3bfa4a3a4ae252fa3b9a453a42d25c3a19ba4c1a2b72423a2cda4b4a1952415a2eca4d2a25f24d4a0e0a479a42024ed9fcda481a595235fa0aea4b3a5d1224aa18fa405a6f12193a14ca412a628214ea0a7a41ea73d2181a09ca413a7de2051a06da4bfa62f20bb9f3ba48ba6821f8b9f1fa454a61a1f289f03a419a69e1e0b9fdfa3daa53c1eb99e9ea3b5a5e01d759e6aa388a5811de79d28a345a51e1d799ddaa200a5c91c169d7fa2c2a46e1cdc9c42a275a42c1caa9c02a248a4911b9c9ccda127a4251b5c9c7da110a4751a339c32a1d1a31d1ad19beca087a3bb19239b82a006a30f19539a0da020a2971890990e9f41a1c8171a995f9edba0d216c0980e9ed3a04a16c0981e9eb7a05b16c698e29d40a0fc156a98759d559f12165598fc9cb99ead155598fc9cb99ead15e104c781fe005785e104c781fe00578516173b195f196c1ba820de234c251f28aa203e24df25a428632057234b2593281f202322cc24ba281020c820ec232829e41ebc1ede2161297124da1b591fae285c2cb211591c1f282c3081975614852886300a9b65946f28c62fd99dc19a6c28572d9da0ff9e4d289d29e0a127a14428241612a398a126288aa9dda316a3ef279daa4ba4e3a2ad27eaa3d5a28da2b2250ca20ba419a30a2688a287a410a445261ca275a46fa49c2546a260a489a443257fa37da4bea4d024afa36da44ea46d246ca211a488a3662372a019a4b9a21823f79f2aa4b5a3dc2210a121a49fa47c222da158a429a66822e1a052a429a6d821bf9f93a37fa5b620e49f2fa417a6a62030a074a496a6b7200ca083a494a67920f19f62a473a62520819f28a429a6841f0f9fc5a3dfa5d21ed89eb2a3d2a5421ebc9eb3a3d0a5041ebf9e98a3bea5b51d8c9e69a399a56e1d389e35a36fa5181ddd9db8a215a5cb1c6b9d37a2baa4311c289dcea178a4a71be39c98a13ea4351bc19c64a113a4a51a869c24a1c6a3451a279cdba043a3b619d59b9ba0d2a25c196e9b44a033a2c9181b9b00a0b4a17c18b49a659f47a10818999a1a9f18a1bf17369a069f05a1a917279ab69ec8a01b17e6981f9e94a04a162f99bb9d07a031152f99bb9d07a03115b4013c81f000b483b4013c81f000b4838016ce19911a181b402041240a26cf274420f0234c256928ef1f7322a5244028bb1f2822a1248e28c41ef5202224db28e11b601d4621fd28791d1a18ae1d05298224338c45146e28812d7a98c4933328f730db9c00981f28ad303b9f019b8528602edca07d9e7528362bb8a159a04a281020a9a270a101285ca973a3e7a2aa2795a893a304a3de26aba3c8a359a34926bca218a496a3fd25baa144a4caa3c925aea183a463a46e257da287a4d6a4f724dca26ca499a48624ada015a4bfa42f24f79f2ea49ba4142494a184a36da3ab22d09fe8a35da48c22279f20a4e3a436220aa37da4ffa54f22afa375a465a6dc21e0a032a480a6182118a169a4aaa60121bea055a4e9a5bf203da042a449a64b2018a03ba46aa6fc1f07a018a422a67c1fb69ffba3e9a5f91e4c9fcda3e3a5861e339fe4a30fa6401e139fe7a305a6041e7e9ed2a30ea6bc1d119e80a3c5a54c1d7f9d16a34ca5d41cf89c85a2b2a4581c929c0ca262a4e21b7f9ca3a120a4061b629c46a1bda3801a789c0da14ba3281a439cb6a0d3a28a191a9c78a05fa23419509b20a0efa1a018649a8a9f69a146188099fe9e0ea1b617a199d19ecaa08317cb99b89ecda07c17ff99729ed6a0fb166598bc9d12a19d167299099d319f3d157299099d319f3d154e021b82e400f3824e021b82e400f38291156c188e18dd19421ffb235b2553270b201d2492254228651fc422e2243e28e01f03226624a328021f68205f22c628ef1c971c0b20b128ad1a5a19911e1729b2196c93c21c232946240a9b77979227072fb29ddc9abc273331df9fc79e0a282f301da053a01428e42c40a181a07827492080a249a28a276caa01a436a3c9279aa508a375a32b26e7a05fa3bda3c725fba154a46ba41c265ca26da497a4b12538a256a4cba43d2575a155a4bba4c224f3a043a4fda45e2437a18ba4f7a45624dda158a490a4b62364a203a452a4f122eba103a48ea413234da063a412a55523dea04da4aea562223fa006a4a2a68f21939fd0a2dda52a200fa009a4e2a59b206ea00da4eba5632060a007a4eba510200ca009a4daa5bb1ff39f10a4d5a5881fd09f18a4dea53c1fbd9f23a4efa5e31e359f07a4eaa5541eb89eeca3cea5b21d469ebaa39aa5471dd19d5fa343a5db1c939d11a300a57e1c319da8a2a9a4231ceb9c3ea268a4961bb79cd7a125a4051b8e9c75a1f2a37d1a729c26a161a30e1a259cc7a0f9a29e19d19b8fa079a21e191b9b46a0ffa1cb18729a05a081a18318e3999b9f37a14f184999dd9ec7a0a71732994d9e56a01917a599e89d02a08b162d99669daf9f9d159c9a809d9d9f57159c9a809d9d9f571569039705e109960e69039705e109960e1119621cc61c4b1ee81ed1232a250e27bb1f8a23762598279c1eb722e32418288a1ed1216c244d28901d4220ee226b28591b7a1c4920722832176e12f31b7428b6124599718db928e7146f9ccf8d9e28d3248c9c34995c279c2f1a9fa09c3a28dc303ba0d49e5e27862e81a128a1f927c724ada21da2bd2707a94ca47aa3cc279ca128a323a3c82581a0f7a3d9a3e22532a10ea416a4b42579a1e9a363a42f2589a11ea499a4ff247da13da4e0a4c72495a13da4fda47224c3a03ca44ca5082430a1bba392a4002342a087a3f9a3a522a9a18ba322a404223ea1e0a37da41b221aa06fa3fda47921b8a06aa329a5d120f6a0ffa247a54f2079a0b3a34ca597207ca0a1a35da54e20d39fa0a398a5fc1f659fa5a366a5931f0a9f71a35aa5001f129f83a391a5b81e259faea3cea5731eed9e9ca3cea53e1e029fcaa3d5a5e21d919ea9a3a6a56d1d409e78a36da5091de79d12a323a5c41c7d9da5a2c1a43b1c2c9d3aa270a4d81b0c9dd7a121a4461b069d6ca1a6a3af1a019d0aa107a3251aa69ca5a091a2aa19459c63a01aa21a19fa9b19a0aea1d218049bb49f49a15e18389a3c9ff5a0fa17aa99ba9e97a02117a599439e52a0c916d0992c9e20a069162c99a59df19f7d1514997a9ddb9f631514997a9ddb9f631583005a0208084a0d83005a0208084a0dc818c91b711cfd1c16202c248025c026a61f2924f7257727421eea22f3240828b81d5f21f12307288a1cf41e8b2106283e19c019cc1dc727c6145992d818bd277087d699b20de4276b8e2f9dc7960e28a80eda9eee99132830227e9f289f8d27ec2cbaa01fa0c527da2d6ea1cda0122821243ca269a18c27a0a450a21fa2d0258d9e30a3dca2a525cba093a300a47b255da1c1a315a43a256ca1a5a338a40a256ba1e9a347a4d3242da104a489a48a24bea009a4b6a423245ca08ca397a48c2300a136a38fa4db229da1eca338a429239ca11aa4ffa4da2264a012a499a545227aa1eda387a536222aa03da3e2a413219c9e42a261a4d81fb39f28a3bba43c20f79efca2e2a4a11fee9e04a303a53a1fd49e18a31ba5061fba9e2ba328a5d51e7d9e38a34aa5c51eab9e89a37da5641ee49ed0a399a5461e2b9f08a4d1a5e01dd19e05a4d7a5b21d2c9ec3a3aea56c1dae9d65a37da5fc1c499deda22da5921cf69c7ca2baa42e1cc09cdea152a47b1b9c9c77a105a4aa1aa19c1fa186a33e1a829cd5a012a3a119479c79a082a23419da9b2aa0dca1ac18ce9a9d9f53a151181c9a089fdda008185399589e77a02717f398209e39a0a2160499f19d1ca03d167a98ae9d05a0f8153e98219d119fa4153e98219d119fa41500003b918592230c00003b918592230ce81e1b24bd25b225a91fbe2429264d27d01e0a246e25f1268b1e94231a256727e81d16223f24b527041cbc1e0c21bf27e2174f15801c8027bf10469729143527ac87c19a2594782737966f9d1d9a922779986a9e909da2274e9971a07f9e2427a39512a148a07b26a91970a1c6a02826c19a92a17fa04f264e9df2a14ea13d26cc9ecba1cba12225f89e93a222a20f25549ffca236a3d924ed9f5fa304a49f2441a06fa345a43a2468a030a349a4c7233da005a331a4362308a0fea22ca49f222aa004a341a44922d79fefa24ca4092244a034a37fa4f6213e9fe8a2a7a469210da045a3caa444215aa05ba3e2a4b9201fa021a3d9a46d2005a0a5a2ada4ea1f949f39a29da4b91e479f27a2b0a4151e0b9f27a2a5a4cd1dc79e3fa2b5a4091eb69ec8a2eba4291e399f81a343a5651e009f11a4a8a57c1e8c9e1ba4d6a55f1e099ebea3aea5d21d829d4da364a5931d609d18a328a51b1d2b9da1a2cda4ac1c189d30a270a4421cfa9cc0a125a4961ba79c46a189a3a81a759cdea0fba2251a279c83a06da27119fd9b2ea0f0a1eb18769bd09f74a19818b09a209fe9a015184f9ab09e8ba0bf17529a589e4ca02717389a1a9e21a0f416319ae09de19f80168c995c9d889f1316a198bc9c969e0514a198bc9c969e05140000ca8e7290c3830000ca8e7290c383a21e0b244e253025eb1e3d247d2527264a1f72243e26b226c81e6024e7266c27dd1d3e221e254927941a3b1c4e20d6269c158c95b28d9726f8877a9c849b85263795419d469c91262796999dc79ce1264898649e279ded26c898aa9e3e9eb9264c9b35a0699f4627a89a72a032a03c26fd9b57a0a7a042250d9d05a260a233262fa033a22ba2332546a0d1a2dba2fc245ea016a3aaa3ad2483a049a3eba37624b0a086a339a44324d9a08da35ba4f22399a060a37ca4912344a038a372a4072328a033a32aa4a42218a030a341a49d22c69f10a301a42522a69f17a36ea48e21b5a0e7a3dea486217fa005a451a5eb20a39f3fa31ea55220469f68a284a4fc1f579e49a1e8a3cd1edf9d18a1cda34e1da99d1da1bba3c61ba39d86a11da4051d469eaba2bca4e11de59ea6a389a5511e969f5ea439a6a21e7c9f76a46da6961e659ef2a397a5c01dbf9d11a3fca4e01c399daba2a8a4981c069d57a290a4221cb09cd7a132a4881b729c4ca1a3a3871a269cdda01ba3ff19079ca6a0c5a2ab19c79b6ba069a26319689b2ba019a2f518c49ae79f88a1b318269a139fe3a041189499b69e99a0dd176799659e5ba04b1724990e9e1ea041170e99d89db29fbc16a798799d7e9f20166f98399de89ee4146f98399de89ee4140000d98d6391f9810000d98d6391f981161e8521e023d224771e54248e254a26151f8e2420262726761fe524ff263e27651eb422d324f0268b181b0db31cd22500881d9e019d2b25eb91999e6c9d70256893869d649caf253c955a9d4d9cf025f596669d5d9c51260699e19d709c7a26e2999a9e689d57268b9b4b9ff89d19268e9c61a03da0ee25689deba0c9a07e25859dbea188a11125079f61a27ba2a7241a9fd3a257a35424509fc8a2aba3bc23af9f94a220a3f022079f5aa257a38822e29e5ba25ba32e22d09e1ca252a3c221ae9edaa141a354211f9fe7a149a38a2106a05aa209a4d121d09ec0a2bfa46321469e2aa30ca51321119f5ea31ea507213f9e62a2b0a46920e19d81a11da4071f889d95a0bca2831c789d2ba013a2251aee9c339fb7a10b1b279dce9f60a2f71be29d61a1f5a34d1d609ecda37aa5a41ea69e87a463a6c81e299f9ba491a64b1ef59e5ba43ca6f21d489e8ca380a5261d999d5ca2aca4861c169dd1a115a4181c869c42a145a3521b389ce2a0b8a2831afb9b9ea068a2f419b89b64a00ba269195e9b26a0cda11d19059bc19f80a1a918ab9a629f43a147184e9aee9eeba03718d699989ec2a0b8175599279e78a002170899d09d3ba0b316f598779dd79f30167098009d939f91151998d69cd99eb2141998d69cd99eb2140000d28e848e77040000d28e848e7704ea1c1d21942204248b1d91216423f224661dc8229b247725391f44251c275026591fc725cd274e27419926a45fa572230f9880a25ba3d523fe8cad9cfc9bee247891729a90995b25fe935c9a76989125de945b9a0a97bf252c96809a569712267997719b879737261599789c299a8b26019c889e489e5d26ba9da0a0aea07925319f2ca2e5a27e24789fbea23ca3bf237b9fdea2bba3af221c9f80a272a3f821759e3ea20ea36321a19eefa108a3ee20539f06a290a34720fc9f1aa265a3d51fb79f51a1aea2eb1f349f79a1c9a2d4204a9ff0a26fa4b9220aa0a7a41aa627235e9fc8a392a5a421f49f80a296a48520c89fcea1eca3751f439fc4a094a26e1db69e9d9f60a1fb1b009d539d2ba07519f49b2b9b4d9fad181a9caa9bea9fbf18559d90a0bca2151c619f8fa400a6551f6ca0aea59ba76f2039a0e3a4e1a6fe1ff39e09a499a5351e6d9da6a2a7a4c91c049d03a24ca43c1cd39cbca122a4bb1b859c65a10aa4311b7c9cf6a084a3651a579c8da08da2df190b9c53a0dca15419699b0aa072a1cd18eb9a9e9f29a16918409a0e9fd0a022188e996d9e82a09c17f898e09d2da009179d98809de79f7c168098459db39f4a168998249d3d9fa8151c98dd9cf89ea415cd979b9c759e2f15cd979b9c759e2f1500002e90198e041800002e90198e0418b918191d8d1f9321081cfa1fec206c24a11a311e3b200c245a14b21c8b1f9e23ea1c8a21a023b425c71b0420bb22e72889140c18d61c7c241914bf147e1a7324d70f8c0e0d18ac24e684168f7e150e257b902e94d610092567949a9504112c25909505965a11652576970198000cc825a499299ab0937526af9d2fa09a9e4425489eaba217a3a021d69deea27ca30321d49d7ca2bca398210c9e30a227a31021409e0ea24da30321839ef8a104a3ef201e9eb3a1c8a2b720579de1a149a36420a99c95a171a2241f559d8aa033a09f1e49a062a490a5c723019df8a172a4b620049915a036a25e1d809d14a1b6a29d1e599f5ea16aa3671efa9d01a11ea32c1ef49cc7a031a2201df19b519d01a0ff19ea9c85998a9ccc10cb983d19f8180c9aa699279c2e9e8a1561a074a65ba8a42117a1ada692a81f21639e7da4bea6e71eb89d41a338a5391d859d16a245a4621ce99c83a187a3d91bd39cdca0afa2b21a8f9c60a011a2091a3d9c22a0d5a183191b9cfc9fc4a15319e19bc39fa0a1ff18759b3f9f6fa1aa18ec9adf9e0ca14518b29a419e93a0dd175f9af09d71a077172b9aa69d55a0ec16b5997a9d31a075163d99349de09ff715d598eb9c439f7815ec973b9c739ec914c5972c9ce69d7113c5972c9ce69d711300000000978400000000000097840000fb16ef1ae21cd11d6e1a971e8c208a22d1199e1d9e1f97221a17d619441c711f731091157e18da1b41179a19101deb2141170b18f81c7b24cd14ac132a1b8e24901075881c18a324dd8b10950d0abf243594aa982f959024a496d19a949977245698ee9c0d9c6724d099689e499e6924199b16a0ad9f6423ef9b64a052a01c22e49b72a07fa03922439c9ca0baa0b922da9ccda01da1aa22239de0a057a13522619d29a1e1a1f721e89d60a13ca2e821e99d69a191a269218b9dfca041a2dd20d49c1da053a11d20049c2b9e12a0411d139aa79c3c9e8c1a4a9a039dd69e7c1aa59b2b9e6aa02e1c839c319ffda08a1cea9c799f69a1bb1cfb9cf49fbea1c61ccc9ce99f17a2cd1c7f9e7aa02ca2f51c109c749e62a2051a4494fc172b11ea88a390cf243426ca9f4aa302aaf3ab32253295fca1c9a48d1c579ce6a0a7a3261c329d23a120a3001c849c8aa063a2d91a019c35a011a2261a129c11a0daa1ae19d69bcf9fa4a17419bf9b839f6da11119819b449f33a1d918ed9ad99eefa068182b9a409e94a00518a699d69d52a03c172b99919d1aa0e716d098729de89fc116a098589d969fa11683982d9d509f401670980c9d029f54166398dc9cce9ede150898b89cae9e7915ce97689cd49d2c15ce97689cd49d2c1500007c806602990800007c80660299086e1aa01e9c208621b319941d1320cd217618c01b161e522163161419691b291ecc16a019551c1e1f7d18bc1b171fbe2260164a19511d1f24c414c415c21a392446114008e3173824d4048f93c5094924829128997e963e24a095af9b089a1324b298a39c5b9ce0237b9a4f9d589d0f2344989e9bd19b4c2072940d9997991a1dc798d99c359d5320e59a089f079fbd21ef9b9a9f10a09c211a9cde9f64a05721949c4da0f3a05c213c9d9ca056a14f21f39df4a0fda13021c49e3aa163a2e420229e45a19da28b20699d2aa147a21f20ae9c8aa0fba11c1fa49c01a076a1e11d409d179fc4a02c1ded9c1a9ffca0ed1c829c539f56a1bb1c4b9c9e9f9da1921c2e9ccc9fcca1761c559cda9fdca14a1c539ce89fa6a12f1c039c159f04a1e61a838f68959697f3105f87678a7b8e4504869bdf9be99d5615099c719f01a1771abf9b4b9f3aa1021abb9be69e0ea18019449b879ee5a0f818299b879ebea0af18b79a849eafa08e185a9a779ea3a05018069a509e90a03518c5993f9e6ca0ed176f99019e48a0a0173a99c29d10a00817f898719da99fa616e5981e9d339f4016bf98cc9cc19edd15c898aa9c719e7915e798789c349e3e150499709cec9dc9146998439cd89d98148f97c99b469d1b148f97c99b469d1b1400002013e614548600002013e61454867e1ab91e3f2029218a196f1d4d1ff621df175d1a621c3020e2157519f81bca1e0a162d1a101d6d200518ae1a9a1d6d226a168b183b1c792385145615e11a76239b10d70d56185c2342040491d91475231791b696af89ad23fa94e699ed978123b2971a9ca09a25237298469c539b14222597af9b8b9bb1209897369c289c86204299199d2f9d0d218c9acf9d149e20217b9b889ee49e1721d89be29e869fec201d9c5c9f29a0b720589cc89f86a099207f9c0ea0faa05a208f9c31a019a11920899c42a061a1c81f7c9c3ba053a13d1f709c56a093a1fd1e8a9c64a0e1a1871e5b9c4fa0cfa1061e479c28a0ada1911d0b9c0ba083a12f1dc99bda9f69a1d11ca79bbb9f61a1891c619b8f9f68a16f1c3f9b889f78a1091c059b759f75a1bf1b9e9a079fe4a0681abb97e29cbf9e1818d095309b8b9d00163697179c6a9fe3151699da9c37a0421780995f9d4fa00a18019abf9d8aa06518319ae29d95a062188a9ac39d68a03d18989aa39d41a018187e9a769d37a0a6176e9a639d26a07317ec994c9d18a0f9168299429d11a09416fc98389dfc9f7416aa98049db69f34165798be9c449fa21521988f9ce79e3115ed975c9c949ef714e097409c2b9ea4147897269c399e46146697379cfd9db0146697379cfd9db014000000000000000000002013e61454867e1ab91e3f2029218a196f1d4d1ff621df175d1a621c3020e2157519f81bca1e0a162d1a101d6d200518ae1a9a1d6d226a168b183b1c792385145615e11a76239b10d70d56185c2342040491d91475231791b696af89ad23fa94e699ed978123b2971a9ca09a25237298469c539b14222597af9b8b9bb1209897369c289c86204299199d2f9d0d218c9acf9d149e20217b9b889ee49e1721d89be29e869fec201d9c5c9f29a0b720589cc89f86a099207f9c0ea0faa05a208f9c31a019a11920899c42a061a1c81f7c9c3ba053a13d1f709c56a093a1fd1e8a9c64a0e1a1871e5b9c4fa0cfa1061e479c28a0ada1911d0b9c0ba083a12f1dc99bda9f69a1d11ca79bbb9f61a1891c619b8f9f68a16f1c3f9b889f78a1091c059b759f75a1bf1b9e9a079fe4a0681abb97e29cbf9e1818d095309b8b9d00163697179c6a9fe3151699da9c37a0421780995f9d4fa00a18019abf9d8aa06518319ae29d95a062188a9ac39d68a03d18989aa39d41a018187e9a769d37a0a6176e9a639d26a07317ec994c9d18a0f9168299429d11a09416fc98389dfc9f7416aa98049db69f34165798be9c449fa21521988f9ce79e3115ed975c9c949ef714e097409c2b9ea4147897269c399e46146697379cfd9db01400000000000000000000000000000000a91a0a1793183718912638215d239d251f2aae22ca232728012b60206e214428002ce01d8d1f5f28bd2b0c1c071d4828fe2a0a180c1a2027f52a6c0c24165228c3294f95510d2628e728799a12977328d327da9b179ac9277925e69b469a9127f622179b7f98fa27ed94fca18f9da62897a25fa547a5fd2322a61fa582a4bf22cca81ea8b6a5e62682a9b5a994a5752a8ea8b0a727a0b22809a89ea2a61cb523e9a4f8a0f420d5216ea2c8a1b3218422f8a06ca2c221962221a0e1a11f22bc215fa017a17e215b21b99ee4a0981fb221f49c2ea0dc928c21349ff6a2f4999726cca04fa454a07e293da412a641a52928aba380a9cbaae223d9a132a7c2a8091fc59f43a2c8a43e1d4f9cf6a010a4371cec9c3ea190a3c11c899cfea07ca3bf1cdb9cd9a04fa39b1c8b9caea020a3411c9d9ca0a0f4a2251c1a9c65a09ca2701bdf9b60a05ca2121b059b27a0ffa1681a779a02a0aba1061a2d9ab49f6ea18619419a7c9f30a11d19259a129f10a1d518c899d89e04a173186499919eeea038183a99759ec3a0e317e598409ed4a08b17e498269e74a02217c698e39d999f79165398559de49e1d1638984c9dde9e12165698539de49eda155f984f9dd89e16166998329da09eb715c197ea9c6b9e1d153998e19cf99dd9140000000000000000a91a0a1793183718a91a0a1793183718912638215d239d251f2aae22ca232728012b60206e214428002ce01d8d1f5f28bd2b0c1c071d4828fe2a0a180c1a2027f52a6c0c24165228c3294f95510d2628e728799a12977328d327da9b179ac9277925e69b469a9127f622179b7f98fa27ed94fca18f9da62897a25fa547a5fd2322a61fa582a4bf22cca81ea8b6a5e62682a9b5a994a5752a8ea8b0a727a0b22809a89ea2a61cb523e9a4f8a0f420d5216ea2c8a1b3218422f8a06ca2c221962221a0e1a11f22bc215fa017a17e215b21b99ee4a0981fb221f49c2ea0dc928c21349ff6a2f4999726cca04fa454a07e293da412a641a52928aba380a9cbaae223d9a132a7c2a8091fc59f43a2c8a43e1d4f9cf6a010a4371cec9c3ea190a3c11c899cfea07ca3bf1cdb9cd9a04fa39b1c8b9caea020a3411c9d9ca0a0f4a2251c1a9c65a09ca2701bdf9b60a05ca2121b059b27a0ffa1681a779a02a0aba1061a2d9ab49f6ea18619419a7c9f30a11d19259a129f10a1d518c899d89e04a173186499919eeea038183a99759ec3a0e317e598409ed4a08b17e498269e74a02217c698e39d999f79165398559de49e1d1638984c9dde9e12165698539de49eda155f984f9dd89e16166998329da09eb715c197ea9c6b9e1d153998e19cf99dd9143998e19cf99dd9141411b913601485111411b91360148511af25b724e225a0258529b024ef252429d52bfc21502383291e2dfb1fe920da29d92d241d451e362a3c2de4130418352a152dd3939c94fd29862aa299959498293d2806991b946f28fa25d692ff162b286f249718551d78288121ad1fcc229828b51d761d4d21922745a35ba178a1de2161a5e29f9a915c1bc9a645a2879d4522dca99da7d0a51328f0a97da86ca6cc2889a9c9a7fda20d287ba6e1a5b297ef261ea5e3a37d210026daa256a3a923a225a6a14ba2ea22a0254fa04ba1ae230626e19eb39df5225326689d1d9d821e5427c29d279d0c145628cd9e65a0a6a357283ca05fa449a8a6256ca16aa743aa1d209da14ba867aab21cbba08fa541a81b1c279f19a4d1a63a1c629e61a38aa69c1c659ed4a2b8a5d91c249e75a241a5951cf79ceba1a0a4691c989c99a12da41e1c2e9c1aa193a3c61b129cd9a000a3091b0e9c9ca058a29c1aa29b56a0e6a1241a6f9b2ea0a4a1a4197e9bf89f68a16019f39aa09f32a11619a29a5c9ffda0ac18339a109fd9a06e18e899de9eb0a019189a99c49e7fa0fa175299959e5ca0c317fb985f9e2fa022179498fc9ddb9fc81624988c9d179f4916c697379db29ebc155697f79c739e86158f97d29c389e2215c796839c1b9eb51428974a9c7d9dbc1428974a9c7d9dbc1422149a177c189a1722149a177c189a175e244424fc256c26432855248e258128ec2a2f2336248b28d92c40218722b728312d3d202e224d29152da31cae1fcf28682d4e1b0f1daf29502c7f186e1d432980298f13701cff28fd286d16371ddc2878280d19961f18293e26dd17491fac28e720a78e0e1e612729a0ec9ed390e225bea61ea2f49fa524d4a87ca4bca32c25a8aabaa6e9a5802680aad2a63fa40128ada80ea66da150277fa666a59d9c202706a4a0a4cf9146262ca34ea430201f263fa35ea3651ca82619a40aa3b119b626b2a137a2121df92616a0a1a1eb13b62678a000a2ffa08a26c2a010a3e3a53025b2a0c6a441a82f2464a04da6d7a98c20e0a0fba6b8a9081fafa030a6d5a8681df99f34a527a82c1dac9f92a473a73c1d179f27a443a6301dd29e8ba3aca5e61cf39d0da385a5b31c979d7aa208a5511cd19ccba16fa4011c8a9c67a1c3a3621b4d9c1ea150a3e71a309cd8a005a3881a219cbaa0cba2131aec9b83a050a2ba19a49b3ca014a24f19799b07a0d2a10e19089bbd9f85a1cb18a49a649f2ba15b18529a119fdea02b18af99d29e97a0a4174a998d9e4ea05617c8982e9e05a0ec168d98de9d8b9f4e1670988b9d3b9ff4155398379d1c9f7d155a982b9dce9e331539979d9cc99ec0143798e69cb09e3e143798e69cb09e3e147a12a416971619167a12a4169716191696233c2423267026e625ef237b251e28862a082409258b289f2c7e22fc23f228642df3204b223529b62d981e6c208929722d521d491f8329ca2c451b111fd429fb2bd818971dbf29672a3614d01c7b299c28ec0d321c3b299e25be94471bfd283820949c56108628d49d63a0b699a0275fa556a2309c712676a85fa451a19c26bea955a511a2f126d4a9c2a557a1092776a86fa599a1a8266ea608a606a17127cba4ada5bc9fa5278aa4c2a40e925d266aa26fa4141c272698a108a4ea1d1426cfa1c8a3441970263ea2afa3519c1426aaa086a309a3e92474a09ea4b6a65c2486a10da564a8c52253a112a6dea8e62180a17aa631a9de20b5a148a632a9212056a093a5a4a8231f10a0e1a488a72b1e7b9f4da4bca6971d1b9ff0a303a64b1d5c9e61a3b5a5ec1c169e12a367a57b1c819d8aa2d0a4241c219d1da267a4a71bbf9cb4a126a40d1b7a9c71a1d7a3e81a459c26a157a3751aac9bd8a0bca2c6191b9b86a065a25519c09a4fa01fa20619999a2ba0eea1cd18649a09a0aaa16b18f699a39f5aa12e18bc996a9f1aa104186599229fbca069171199df9e78a02417d5989e9e34a0df16f0986e9e1fa077160599519e0ba0b416f4981c9ead9ff0155898c29d4e9fda153c985f9d239fd8143c985f9d239fd814221d361fca20bc1c221d361fca20bc1c7e1a991b481cbf1942235d23f5246c27b527f0231b258528fd2ad9222f24ed28ff2c9b211c241129ef2d6020e2226529062e7a1e40216f29a32de11c5220a6291a2d1a1a5e1fb829152c2f14e01d9e29f729df8d451d752907284299dd1a1e29d523699ef70faa28c79417a1539b322818a501a3e19e0628bfa855a499a1fc2733aa3aa5e4a2fc278caaaaa5a0a2a32798a8dda4e9a1d026d2a6eaa45aa02f271da594a46e9e1c2751a4b0a4009bca26f1a3a7a43c9b8426cca380a4e99be22572a37fa4f29dc72567a4cca428a2a825b7a4b9a418a4da243aa315a509a70124ada195a575a8f022c4a1efa5d8a8fc2177a099a563a99220f2a00ca56fa9be1f78a091a53da9ba1f2ca033a56fa8ef1e339fc1a4dfa7a91ef59e5ca428a7091eab9e15a473a6821d439e4fa38ca5c11cd59db8a2f5a4511c7e9d5da2a9a4fc1b269df4a15ea4311bdb9cafa123a4c81aa59c65a1e3a35c1a6d9c24a142a3ff192b9ce3a0e7a2a219019c9da06ca21b19b29b5ba0f9a1d2180d9b23a08aa18918489aab9f41a11218a199449f00a1a2176c99d09ec2a03c172199859ea5a03817e398609e69a0c516c198259e1ca03f168598f39dc59f0d169598bf9d789f6315e197559d3b9fdd141e98399db19e7f151e98399db19e7f15ba1439198518c717ba1439198518c717b71a7c1a151c391be1236124ba25592829264d24ee25b82869292423b524f428212c142253244429aa2d2121a42388295c2e691ffd2186291f2ef91b8c208f29b22d8f18361ea829fe2c7d0dcd1cb429ad2b0f999915a5293729a39dd08f7f2954261b9ff898ea28201e05a11f9b9b28e3a3a2a2a69d5a28dba831a464a0532897aabca4b6a1692815aacba45ba1fe2712a7a6a45ca1dd261aa504a5f0a00527c0a4e6a463a0772618a5bca4529eef25cca4f8a4919dec25a4a3e6a4ab9f6c25e8a21da569a23e25bfa220a544a4dd2426a1efa434a53924d5a00da556a6d5236da106a579a7cd22e2a051a570a809224fa03da56fa8322123a00ca5b7a78c2049a022a59ca7262056a0fda409a8bd1f42a0d5a4caa7331fcf9f39a4fea66e1ebe9ee3a3caa6da1d569e76a362a6491de29d06a386a5ea1c8a9dbaa2e3a46f1c6d9d75a2c1a4341c289d31a296a4f81b119deba152a4871ba09c9ba1eda3f81a519c5ea192a35b1a3e9c28a10ea30a1a269c06a1d2a29a19d19bc1a071a24c19559b7fa00ea2d218099b39a0a6a18618779ae09f3ea10c189099449fbca077171f99a49e7ca09916db984a9e3ea04116a198049e24a00d16c198e99d00a06b159f98c39d14a0cc159598759d959f6d159598759d959f6d156e112f18a51862186e112f18a5186218631a301ac91bc41cbd21552475254d283b2440244325ef286e26fd225d241a29cc2982225a246329b72c1721942358290a2e771f91215629832e891c01202c29232efe1ae91d4929772d7d0dc01b88296b2c689a530f78298a2a679db1985c29a52777a0419c0c295a20d2a1459ecf28f3a217a318a08a2865a8bca38ba0272804aae7a322a1d227c9a9a5a48da0bd278da777a488a1bb2613a6d1a468a20a27dba4e7a472a26c2697a4efa47ca2fd250aa42fa51aa2da2582a447a59ba18b25e5a2d1a471a2782423a2c8a478a403243ca214a53da5132462a25fa502a7572393a14ca515a884228ca194a54ea84f227ba0c3a534a8ce211ea03aa5c6a7dd205ea03ca544a862207ea03aa540a80d2062a00ca5c5a79d1fa19fa6a4e5a6981e939e0ea402a6ae1d6d9e90a39ea53b1df19d31a377a5da1ca59ddfa24ca5951c809d98a205a52f1c2c9d47a29ea4c81b909cd4a142a4241b5e9c9aa1fba3741a169c4da184a30b1afe9b09a125a3ad19e69bdca0dca23419c09ba8a06da2ee183b9b70a00aa28318ee9a39a0cfa14b18739a0ca085a11118e199879f24a1a6175f992d9fdea0e816fe98a49ea8a02d16d898769e8ba00216f798539e62a0e115aa98039e32a0e915ac98999da19fe114ac98999da19fe11438114b189117d21738114b189117d2175717e3192e1ab31b23226c245d267428432353240426ac28df22fa2344253729e3265c224224e928dc2a0c2158234d29cd2d2520cf217d29f62e291c6420a429e12e8316871d9329132eab93eb1951291b2d5f9c238f5629802b2d9f6c9a4129f32853a1e89e06292e246aa27aa0d02882a098a358a183284fa854a404a35f28b9aafba41fa44328afa909a52fa4ab2752a6d5a457a4992686a5e9a49ea4e7269ea414a567a477268ba30fa52ca44f2647a309a5cea3b225b4a296a480a2d224cea280a483a32f24baa3bca4aca4d723f9a1eea454a6782326a119a554a7e522e4a017a555a7722219a024a5b7a7d0215ea038a596a7832158a055a51fa80c2185a06ea570a8e920d1a06ea56ba8642008a1dca4c6a7a51f53a05ea4d6a6981e559f3ea4d6a6521eaa9e0ea49ea6ae1d0e9e81a3eca5211db49d04a34fa5ad1c749dbea20ea5471c859da1a2d8a41c1c469d43a29ca4ad1bf09cf3a163a4211b9c9c95a12ca49e1a869c49a1d8a3f419589c05a170a39819289cc1a0e4a23d19d89b94a061a2cc18a59b6ba0f3a1a1181f9b1fa086a12518809a989f2aa10518439a3c9fe9a046171f9ae59eb3a00117e899a29e6da0be168399699e27a03d16b198f29d00a054157398a89d879f20157398a89d879f2015730a6a0f6b10f288730a6a0f6b10f28862176f183919f81a75211a247025cf27b621d1242b260d29542179237425e2284e22c82223251629de2624218f236629212c7f1f56214929a42e7e1cd11f21298a2f7116331e5b29222f6c93d5191029e72d199cc28e0129af2cde9e0c9a07297b2ac6a07f9efa28be252ea2a4a0e328c7a0b9a347a28f28d5a82ea4a9a33828adaa83a42fa4e027eaa789a40da4202779a489a403a43e269aa3b7a4f0a37d2684a327a56ca4402680a35ba5ada4c0253ea324a590a444253aa4f8a41ba4da248ca4c9a440a47424aea38ca4cca4df2309a332a50ea6fc23b5a3a9a54aa7cd23eca357a565a7c32244a14ca5bba7fc217da098a4cea7c9207ea008a562a7c22060a0d5a435a75e206ba0aea422a7d51f22a07aa457a7641fdf9f5fa455a7c81e289f28a4d5a6471e419f01a43ca6c31dea9eefa3eaa57d1da09eafa3a5a5301d379e56a363a5d51c129e0da328a5891cb19da7a2eda42f1c619d35a2ada4b61b039ddea15da4211baf9c8ba119a46c1a4b9c2ca1aca3c519179ceea028a36f19dd9baaa0b3a2e418769b4fa02ba28418dc9ac79f9ca1d217619a359f26a13f17f099ea9eeaa0a716f499e19e9fa09e169d99b49e5ca0861651998a9e18a01416f498209e07a01716a998099e33a0bc15a998099e33a0bc15a009050ede0df88aa009050ede0df88a861699171719671a65213f24df25292844214924c025c028aa20d2232025f028ae21c322ee242329ec2211211e2465292f28d11e8b215f29202d8c1aa41f3e29a92fc313ea1d8929d32f4996fd193a29e42e1d9cda8e2d29632d679f0f9a1b29642b4ca1769eef28662750a2aaa0d128a6958da3dca16f281fa94da4e8a2572869ab8ca42ba41f28f0a637a4fca3e526a3a363a41aa49e2699a4a1a415a4a5261ba4c8a499a40e26dea3f8a4e4a4ba25eea244a5a5a5642557a292a574a515256ca21fa57aa57624eaa14ca53ea64b24dda014a5afa6d923bfa0cfa42da6f32298a1d8a431a64f22e1a06fa428a64221cc9e2ea447a76d2000a089a46ca76d20a69f8da430a7192028a076a447a78a1f26a0a3a416a77f1f15a06ba49ea6cc1ed59f5ca497a6711eac9f46a48ca6251e069f0da470a6791dbb9ed8a31da6191dec9d34a372a5a01ca29dd6a20fa5141c409d7fa2d0a4931b1d9d43a292a4231bca9c04a268a4721a859cb8a124a40f1a339c6fa1bea3b219e79b21a16aa36019aa9be6a02fa31519989b92a0d8a28b18db9b34a05ca22f18079ce69ff2a1db17689b8c9f57a182176a9a439f33a1eb166e9aec9ef2a04d16ba9a7b9e59a0ae15b899b79da39f3d152c99419de89eaf142c99419de89eaf14dd0cf6101c129e8add0cf6101c129e8a5017e619641a3e1c7e204d249925c327b1215f243026a6281f21ac2351250429c220982207253a291e213d219b2393293323f31e6d21a129fc282c19071f3529a52ebc0cf51c38294430e695301ae7281f30c49cf88e0c29b32e469fa69cdd28812c24a14ea0b728b228a4a2d4a185280696b0a36aa25628f2a8f4a31ca32a28ecaa4da42aa48a275da520a43da4282671a3d3a49da47f26bba32aa5d2a4792610a3fda475a5d925c9a21ba59ca5572505a201a59aa5c824dfa1caa44ba5762470a114a5b5a582240ca1dda4bca51e24b8a1afa461a58d2356a1eba42ba6eb2238a1c8a463a62b22afa0aaa4c2a68821de9f9ea443a7e32006a1e1a408a7d620f7a0d9a4eca6932094a062a4caa6791ff89f2fa479a6ec1ebc9f2ea44ba6601eb39f1aa408a6501e8b9f0ca4eba5c31d259fe4a3cda5661dd19eb3a39ba5431d199e4ca361a5b01c869df6a208a55e1c149d9da2c9a40d1ce29c53a27da4931bcb9c0fa25aa41a1bc39cd9a133a4b31a7c9c88a10ca4091a329c41a1c5a3ab19e99bf3a070a321193f9b9ea0eaa2bc18919a2aa027a22418d499689f40a15e175a99989efaa059160d99399edda0c915e098549ee0a0e215f298419e9da08b15a798ec9d2fa06d158b989e9df39f76158b989e9df39f7615d50d2b10e013568cd50d2b10e013568c6a1794191f1a271c5e214924832541285621be244626e7280a2193236c25f328bb201722b2240a294920d5200c247529061fff1e292283296023721b641ffa28612b858c321cc4280330c39a100f1d297930d89d029a0929c72f08a0299ed128872d76a1d1a09d28292a7da226a27d285916e8a3efa27528b7a999a424a47a288faa72a476a48c278fa3b4a34aa4a3255ba2c7a4a0a44e26aba220a501a5292614a2b9a430a56d25f7a18fa401a5e424fda2a8a43ea5c42482a2baa4a3a54b2485a1c0a4faa5d5233da182a449a53c237ba15ba42fa5cc2205a144a468a58322aea038a451a5c3213da0aea4c9a6dc21539e16a43aa7a42060a0a0a4f6a6d32052a0b9a402a79c2021a0b5a4f7a64a2012a06fa488a6b71fd89f27a423a6021f799f09a4e1a54b1e549fc8a3d0a5e71d049fc1a3d0a5a61d019fa9a3b4a52c1dbe9e99a388a5f01c7c9e56a35aa5d51cf89dd4a208a5651cb49d58a2bfa4f91b6b9d06a28aa4531b219daba13ba4901a079d79a115a4351ac09c28a1ada3d8195a9cf0a03da355192c9cc3a0c0a2e318c09b64a03fa282184d9b13a0c7a12e18119b8f9f64a17017b19a469f2aa12917509a369f2aa1cc16029adf9eeaa08c16da98609eada05215a999d19d839f1215a999d19d839f12153c059f109312898b3c059f109312898bef17e719c01a3f1cfd2068243426092871203324da259b281020e722dd248d2812208f22ad24da287f1e0821fc232429d61b161daa204529881d39161a1d68291c246f8c8914ae280d2de2983a948228f830ef9cef97af28af3026a0749ccd28ee2e26a1709f8628ae2b47a246a16a2825209aa369a25c28efa96da427a44f2807a940a4c5a3ff2646a3e6a35ba4f32547a282a460a4fc2575a2a9a49fa4c02502a2ffa417a57a2553a2e7a474a50525fca1c7a463a58e2437a17da4b7a51324a4a19da42da6fb2377a28ba466a55323b6a065a42ca6c122a4a0b5a4cfa590222ba131a5dca6a022f6a0b0a454a78621c7a090a45ba61b21b5a1b2a456a6e72093a05aa40aa62b2053a05ba457a609200ba04aa46da66e1f1ea039a458a6181fe39f0ba406a6961e909f00a4e8a53e1e2f9f01a401a6ea1d349f07a409a6b61dd19e02a401a67a1d529eb2a3cda5111dbe9d47a360a5751c2a9da9a2cca4fb1bb29c2ea275a43d1b929cd6a129a4b01a789c72a1cea32c1a829c2ba162a39419419ccaa0f8a22b19129c89a07aa2a7188a9b3ba01ca257189d9aed9fa6a11118099a879f97a17c17159a3f9f46a1e716f499159f17a11e170c9a999ec6a06c164f9ae89d6ba0df1579992b9dc39fca1479992b9dc39fca1428087f0f5210998328087f0f521099837e16dc1855193b1b961f1f248825712752204e24c8256528da1f2423d8247b2820200d223024cf28571f14204522f528a11d4e1ca11f0f29991929160e1e4629cc1886987a1760294724789b6c9a1428442fc39d279cf3275b3123a0e89f76285930ada056a14928eb2cf9a179a11028382241a454a4892817ab25a463a40828bba7fca305a46126d0a165a4e7a4602617a2d3a408a53426dca29fa407a58f251ca3a8a434a51f251ea28aa437a5c1244ea1a4a457a56b2486a197a449a5102478a17da4b2a5bd232ca166a4f8a50523bba290a4aea5eb22caa046a405a64b2276a038a4aaa58921479f45a422a739216fa023a4cca5a620cfa03da488a56f2078a01aa4bfa5112078a01fa4d2a5991f37a017a4f2a54a1f1ea01aa4e8a5111f18a02aa4f6a5d81e0ba027a406a6471eb09f26a411a6d71d3e9f21a406a66e1da89eeda3b5a5061d389e8ba363a59c1cbe9d2fa320a53c1c639ddca2c4a4d11b109d6aa281a4271bca9c00a247a49e1a859c9aa111a4df19579c44a1a1a37619009cdaa033a308198b9ba3a0a7a2c1181a9b5ea027a27c188f9a1ea09da139180e9aaf9f3ca1a5179499079fd9a0101793998c9e81a0a816359a299e34a01116e399a59dfb9f7d15629ccb9da79e3914629ccb9da79e39140000ad87e4819c040000ad87e4819c04ba1b4021332312246420d0246c26df279920f723c725e9271f1fdf2201254828c31eb12150247828b61d02209c22aa281f1c4c1ba21faa28da16aa8c4f19d9284407f49b3e97032978141f9d2899db280427719d649d0d28d8308ca0cd9f83287131b1a0a1a0fb273d2fdfa10aa230280a272aa453a47028a4aa41a449a4762712a45da326a4a925c6a0fca34aa4bb2560a151a47da49e25d0a162a4dda42d25f2a19ea423a51225e9a1cca44fa5e924cda19da46ba5812416a15ba4b2a5e82322a132a483a53b2301a117a40da5b622aba1dea34fa5f721a7a01ba412a50022079f5ca3f3a4e220569faea366a594202da103a4e6a5862083a0e8a3f1a54e200ea0d6a39ca50820d19fbea39ba5611f789fbaa385a5191f589f96a397a5bb1e6e9fbda3cda5851e759fd9a3e2a5351e329fc8a3c4a5cc1d359ff1a3daa56f1df49ec6a3aaa5fd1c9f9e81a37aa5c31c169e16a32aa5571c889dc4a2d8a4011c3a9d70a295a4761b079d13a23ea4b31a039da8a1dda32c1a009d4da146a3b819aa9ce1a0c3a243194f9c8fa039a2ae18ea9b34a0c7a15b18119bdb9f61a113186a9a679f12a15d171d9ad19eb9a09016169a889e79a05b16469a579e49a03d160f9af99d1da02615b699ba9dfe9f0c15b699ba9dfe9f0c1500000591d091cd0900000591d091cd09d31c77213023142454201925c026642722204d241d26f027b71e23230c254028951d212134233d284e1cb51db5203f281f19ad179d1c3728f013d59756143b28118e0a9b629418285b91239ed89b6b28701241a0639a702805272ba08a9f3327d6305aa13aa11528483080a2e4a258282929a9a30ba42b2819aa76a479a4ae27f9a108a44fa42426b2a032a456a49c2567a10ea48aa44f2579a12aa4a6a40e2569a158a4dca4c9244fa16ca408a56c24e5a02ca416a5f22385a0eba300a52823baa0c6a3eca4d622e1a0dda31da58a22f3a0b8a3eaa43c22159f6aa36da55f211aa009a465a588212da00ca46fa5f520de9f52a311a52720d39f76a327a51420509f5fa320a5991f2d9f45a30ca50e1ff09e27a327a5861eea9e15a32ca5571ea29e33a343a5191eb49e94a389a5cb1df49edea394a5b61da09f06a4b7a55d1d259f15a4dca53c1d749e03a4d7a5081db39d8da39ca5931c5e9d21a352a52d1c189d9aa2d2a4a61bde9cf8a153a4d61ac79c86a110a4421ac99c3aa19ea3a4199f9ce1a02ca343194a9c8ba0a0a2e618ca9b2ea00da25618b19ac39f6da10618099a169fd9a0811753997e9e67a0ad16f398309e38a02716ff980f9e08a0c3157b98be9de79f43155f98569d119f8e155f98569d119f8e1500009c8eb190670200009c8eb1906702d71f9924e5257e25dd1fec24a7263e27f01e4b24f3255b27011fc3233c25f427041e7121b52315284e1b7a1dc81f25288c168b8c28191528200e1c9aef8d1028408ec29c37993c2893975a9eba9c3f28f09819a07d9e58284a960ca1e79f0e28da242da276a10428952c86a2c6a118282d27dfa331a3342814a4c3a2c8a2b32664a06fa378a3d725db9f65a3a0a31725e39fcca32aa4c12439a009a48ca4932474a01ea4c2a4382485a0eca3b8a4b82363a07fa39ea4ea2216a079a39fa4872205a088a3cca40b2238a04da384a4ad2100a1cba239a449215c9fb1a2a6a40a21469f3ea320a5152193a08aa33aa5c920cba096a357a5652052a0d9a203a5f91f9d9f3aa29da4bb1e3e9f28a2a1a4ce1de79e22a294a47f1dab9e3aa28ba4761d949eb4a2cfa4ab1d099f80a33da5b51d049f09a4b7a5e11daa9e18a4e3a5d71d279edea3d8a5611dbd9d9da399a5141d7a9d47a349a5be1c5b9dcda2e9a4491c409d60a29ba4db1b239deaa148a4361bb39c6da1dea3511a819c05a14ba3a119219c92a0aba22019be9b39a01ba28f183b9be69f7aa118187e9a279fe2a07f17349ab09e89a0cb162b9a599e48a03e16409a2c9e23a02316419aee9de19fc31569996d9d709fa515f398d49c719e1914f398d49c719e1914000014902592eb04000014902592eb04491f6524bf2543254c1fb824f125a6264f1fa424dd261b27461f56248826c6278b1d602114247c27f9191718f61c3b27b214399a44970027048e109d7d9c212773945b9dfe9c542770963f9e8a9dae274098c09e159eaf274a9903a0729fb3271e9b8fa039a03527d19416a285a200281b9ca7a3d3a2bb2765a0c5a242a3cc25da9f3ba35da33c252aa0bea318a4ee2469a0d5a377a486248aa01aa49ea44e24b7a01ea4c0a41e24c1a00da4bfa4b7234da0daa3d2a418231ea05ca3aea47322cf9ff4a247a4df21f29fc4a21ca4812180a0d3a210a48321b59f04a3b3a43d21b1a003a47da527214aa03aa449a6ea2031a0e8a3bba56020c39fa4a2eaa4711f8c9e81a10fa4b81efc9d06a199a3cd1d9b9d08a1c4a3161ba19d5aa1eba36c1c069e37a269a4001daf9e47a33ba5831da79f5aa411a6fc1d10a086a474a6f31def9e3ea4dfa5601d9b9d22a304a56c1c4f9dbaa2c0a42f1c0e9d71a29ca48b1bd69cf2a141a4e41a8c9c67a1cda3301a259cfca03ea3a619f39ba4a0e1a21019cd9b83a086a2de18679b43a02ca2a618df9a02a074a134184e9a169fc3a081179b99a79e8aa021177a99609e4ea0e6162299089e10a09a161699c09d909f1c16cb98749d699fdc159698419df19eec149698419df19eec1400000f8ac58ebe0500000f8ac58ebe05631e3f23bc240c25071fb62416265c265e1ff524a62628261d200e2518271a27751d63208c226b261c16089bc98eac25df87749ede9cf725658da09dd59c8b2665905c9df19b9626e3944a9dda9bd826f196bf9d909c12275799319e419df026219baa9f839ee826a09c83a0b59f8a26869dfda0fca0ad251aa001a2d1a167256f9fb4a2b6a2f3244ea0c7a326a4e0245b9fa7a36da45724339f67a369a49923909f10a30ca4b422779ff5a202a46d22359fbfa2e7a30c22479f8fa2d9a3ae21139f25a24fa31b21f09eb5a10ba3d4207c9fc2a177a30021b49f30a3dca40222529f60a4ffa5bf213f9fe9a398a5f420849f31a312a59720639e6ba2a8a4cf1f859dcca036a3641dac9d49a084a2131c3c9d679fe6a1f31a539dac9f0ca2331bd19db3a0fca29f1c399ecda2bba4791d8d9e4da402a6ee1d329fb9a49da6b51d2d9f9ba474a6671de79e17a4dea5f41ce29ddaa21aa5421c279d0da251a4a01baa9c6ba16fa3bf1a679c08a1c7a2fc19249cb8a07ca26819e89b6da01aa212199d9b2ca0c5a19918429bed9f7ba15f18d89a969f40a105185d9a219fffa0a217e899bc9ebba0361772992b9e6da07b162b99c69d4ea022160c99769d0ca09d156998dd9cc69f03154f98ea9c059fad134f98ea9c059fad130000e88d2a90fc050000e88d2a90fc055d1d832152231724901e02228624d324121ef02369257b256920b72649282827581b331f4021a4255a99a7a4f7a5d8232a9434a0eba099241206a79aa9996e254e8f849a8d98b425ba929f9a2f97e325f594bc9a579731265a960d9b81957b265198459b12989426a499949db59cfb26d39c75a0a8a0d825059f5ba2c1a2ea2439a07ca3f0a36024d69f81a30ca4e423789f64a325a464230f9f32a313a4ad22de9ed4a2f7a35622d99ec0a2f7a3cc210d9fdda216a44921589fa0a20ea4de20e39ef6a18ba3e41f5f9e19a12ea2bc1e9f9edca0bba12e2041a0bea3dea4132267a023a5b3a6b222179f87a303a5bb20c39f62a23ea4a91f809f78a16ca33d1eba9e51a001a2b81c799d549ebfa0f819629c169c05a03918619c299ba29f1e196f9c409e12a1af19209e58a3d5a4ea1d70a087a552a70720e6a039a52ba7691f659f7fa424a6111eb29d56a32fa58f1cf59c0da266a4701bf39cc2a121a4001bd59c8ba110a4aa1ad59c39a1bda3fc19689cb6a0eaa266190c9c66a013a2da186e9b1fa09ea15e18e69add9f52a12a182c9a539fe9a086177799689e76a0a816f898ad9d35a00816b698889d04a0b1159998559dc59fcb15b2983b9d569f33159998ec9c359f3e15df97c09cd69eaa14df97c09cd69eaa14b5838d8e778ecd12b5838d8e778ecd127d194c1c281e8c1d1c1cac1fcc200924a9193b1d7220ed224b19a71eb3207e25c51d6022de24512530198d1c1a20f727561512187c1c6024e7120115f819b124ac0d170f4d18fc24ed84548fc2152725ad905c940c112f252594c8947f1182259d9458951915df254198a1984e0dc126869c46a03c9e3c25c69ff8a289a3bc22829effa2b5a33023e19d9ea27aa31f234e9e65a27aa304238e9e72a266a3bf22c49e85a2d9a3ce22109f8ba2bba38b22f09e99a2d6a3c821af9e8fa210a4a621ef9d7ba21ca44d21a49d57a212a49b20f39c5fa21fa42f21e79a95a057a26e201f989d9ebfa1ca1ceb9cc0a0a6a2bc1d889ea5a150a3121ec09deca013a3e81df09ca7a065a2471d4b9c969ed0a0101b329c6a9cd59e53175c99101833143f9223955f1bd719e1967f9f16a572a6871f56a16da7cfa81521db9e16a550a7571fc79dc8a3aca5401d139e7ca238a4461c9d9d90a18da3161b289dffa0d0a25d1a939c72a00aa2aa19499c33a0cba12919129c0ca0b1a1fa18d69bd89fa0a1a5189a9b739f76a16918299b189f26a10b18ec9a6d9ea7a068179d9a0b9e7ca0f7163d9ac99d52a07b16cc99889d2ca003162f992c9dd69fb115c998f39c439f09157898729cfc9e8714f097a39cf69e6a13f097a39cf69e6a13000062830f83ec00000062830f83ec0039174919301a3d1cba1a9f1eae207922f8199e1dc41f622221156a182f1a3c1d501303189e1aaa1dff18441b831e7023561735183a1d9724ff14a2117f1a9d24d40eed8e5b15ba24e78e8596418ac8242395a4992197b724ce97629cdd9aa6241699f19d459d4d24f899179fee9e2b23889b73a076a0d0226b9cb9a09ca06623129c68a0cfa00823719ca9a016a1e1223b9d42a19ba1bc228e9d55a116a20622c39dc0a18ea2e3210e9ec6a1b0a282211f9ed9a12da33421779e06a280a32321a79e0da2ada3f420349e79a107a34820fa9c43a056a1541ebf9a099e18a0d91bbf9ae99d4ba0231b119cf49ee1a01e1ccf9cb59f65a1601cea9ceb9fbea1571ccc9ce89f17a2641ccf9c32a056a25f1cd39c15a06ba2281b01959a9a6b9e1e165419ab25da26539f4ea37da9f8aa5d24209e98a568a74a1ff49b7ba113a42f1c6f9d3ca1a0a3a71b9f9ca3a09ca2791a1b9c55a042a2d819369c29a001a25b19ed9bdb9faea10e19d29b969f8fa1e2188f9b399f46a17a181a9be49e08a14518729a619eb1a09c17f6991f9e6da039174a99b49d30a088160399819d02a04f16ba985c9d919f25169d98379d549ffa157998039d189fcf155798d89cde9e9d15f797b59cdf9e3c150398359cdf9d2f140398359cdf9d2f1400007280e5033c0800007280e5033c08a11aa81ec720ba21c619481e41203c225818a51b911dec205f165a18f419641ce5194c1b251e8b205a19371cf41f8823c7161419921d2d245f14e614351a4124861163089716492418850695ec894b24f092d999159848246796499cb39b2e242d99549d2b9dda234e994e9cd09c282182955699a999c51d4599c39c1d9d9c201f9ba89ef99eb721cf9b4c9f05a08021729cfa9f68a07621f89c50a0c9a049217f9daca057a14721e89dd1a0b8a10e215b9e16a12ca2da20a19e74a1b4a2c320859e67a110a387200a9e7ba1e2a241204e9d20a198a27b1f1d9db9a070a2601ed69c38a097a1681daf9cf29f6ba1f51c6b9cc19f83a1931c279cf99fd1a17d1c179c06a0e6a1421c629c15a026a2401c379cf79f0aa2a41ba49c7b9fcca14a1b89975c9b279dc8163a856e8a618eea0370974b99049c7e10e79b2c9f15a1a419ed9b539f4ca1a519d89b309f2fa14919389ba69e0ca1a818119b959ed9a05518dc9a8d9eb9a01a18919a7c9eb2a002183d9a719e96a0df17e3994b9e7ea064179799159e51a023175299e89d1ba093160c99889da29f3a16f498299d159fcf15d498cb9cad9e6515d898aa9c649e0815ee98859c339ea7140e99749cee9d5f1472984e9cd49d05140198ca9b4e9d75130198ca9b4e9d7513000033131f15b680000033131f15b680451a881e3320ed205519fe1cbf1e7a21c617a21aaa1c22208e16151a451c491f73175d1b531de5204a18f11ac71de32296162f186a1c7123fb1370155d1a5b23710f020e7218522386843d93131390239792f5973893a023a995089b76995c237b97289cc69b97228b97129cd69b51214d970b9c339cef200d990a9d499d6b21069a049e3a9e6421f09a869e079f3521a99bf99ec19f1721279c949f2fa0ec20629c06a097a0af20a59c42a0fba09520c99c71a07ba15620db9c98a0cca11820d89cb2a0fba1cf1fd49cafa003a2791fe69ccaa02fa2061fea9cd5a06ca2881ea99cc4a046a2f31d769c8aa0f9a16b1d289c5ca0c4a1fa1cef9b1ea0aaa1b21c949bf99f93a1571c729bb39f8aa1321c579bb39f9ba1e11b699b999fb8a16c1bd69be39f78a1a41a4599c69dc49f6e1842954c9b839da515c396b59b6e9e4d15ff986d9c3ca0001638995f9d43a0dc16f299e59d9ca008185f9a239ebaa04018a69af29d7fa0d317cb9ace9d5ca08b17b29aba9d57a05917a69aaa9d48a0e516379a909d44a06a16c699679d36a03c1643994f9d29a0cc15ca98289de89f8f154a98d09c7b9f30151598849cf59eb614ce974e9c9a9e7c14e497409c499e05145397269c619e591358972d9c579e721458972d9c579e72140000000000000000000033131f15b680451a881e3320ed205519fe1cbf1e7a21c617a21aaa1c22208e16151a451c491f73175d1b531de5204a18f11ac71de32296162f186a1c7123fb1370155d1a5b23710f020e7218522386843d93131390239792f5973893a023a995089b76995c237b97289cc69b97228b97129cd69b51214d970b9c339cef200d990a9d499d6b21069a049e3a9e6421f09a869e079f3521a99bf99ec19f1721279c949f2fa0ec20629c06a097a0af20a59c42a0fba09520c99c71a07ba15620db9c98a0cca11820d89cb2a0fba1cf1fd49cafa003a2791fe69ccaa02fa2061fea9cd5a06ca2881ea99cc4a046a2f31d769c8aa0f9a16b1d289c5ca0c4a1fa1cef9b1ea0aaa1b21c949bf99f93a1571c729bb39f8aa1321c579bb39f9ba1e11b699b999fb8a16c1bd69be39f78a1a41a4599c69dc49f6e1842954c9b839da515c396b59b6e9e4d15ff986d9c3ca0001638995f9d43a0dc16f299e59d9ca008185f9a239ebaa04018a69af29d7fa0d317cb9ace9d5ca08b17b29aba9d57a05917a69aaa9d48a0e516379a909d44a06a16c699679d36a03c1643994f9d29a0cc15ca98289de89f8f154a98d09c7b9f30151598849cf59eb614ce974e9c9a9e7c14e497409c499e05145397269c619e591358972d9c579e721400000000000000000000000000000000a41af41b641d3b14e5266d253c279d253c2b78285c295729982c8827c828f329cc2c5a25f6262b2a652c222287240e2b8b2b3e1deb1f362b102bf98e2416602aa829eb982695aa29de28999c7d9a8729c527399ef69c72292c26289dbc9cc4287623ed9c8e99fb28f594d2a561a6d227a4a0c2a53fa62526c6a3dea2e7a33724ffa6a3a4b1a20223daa80ca8caa4e825e1a8f8a86da4ff2a09a6ada78aa31929c3a334a453a0e124aea152a2869c10231fa131a267960b2232a1d1a1989045225f9fa6a0a899dd21029f87a2241bf32598a1d6a1dc20a12938a12da1a69c5a2811a3e6a64aa73ca1bca29da800a9aca7a7a0c6a8b8aae69bf79eeca55aa6491eba9c46a10ea4441c0d9d6ea112a4641c1b9d5fa1e9a37f1cae9c2ba1b7a3791cfd9c0ea191a34f1ca39cd9a045a3141c909cbba007a3991b259c79a0c5a2151be99b6ea073a25f1a479b42a01da20b1ac39a15a0bfa18319759af19f9ba108195f9a919f47a1cb18539a449f2fa18c18139afd9e1ba12618d999d19e07a10018aa99a29ecca078173c99729ed1a0dd161f994d9e83a0a116bc98e99dad9ff1158598839df49ece156a98819d1f9f79157498809d289f77156998749d1f9fac156298459de39e3d15cc97f69c9d9eb5145098e69c139ee0140000000000000000a41af41b641d3b14a41af41b641d3b14e5266d253c279d253c2b78285c295729982c8827c828f329cc2c5a25f6262b2a652c222287240e2b8b2b3e1deb1f362b102bf98e2416602aa829eb982695aa29de28999c7d9a8729c527399ef69c72292c26289dbc9cc4287623ed9c8e99fb28f594d2a561a6d227a4a0c2a53fa62526c6a3dea2e7a33724ffa6a3a4b1a20223daa80ca8caa4e825e1a8f8a86da4ff2a09a6ada78aa31929c3a334a453a0e124aea152a2869c10231fa131a267960b2232a1d1a1989045225f9fa6a0a899dd21029f87a2241bf32598a1d6a1dc20a12938a12da1a69c5a2811a3e6a64aa73ca1bca29da800a9aca7a7a0c6a8b8aae69bf79eeca55aa6491eba9c46a10ea4441c0d9d6ea112a4641c1b9d5fa1e9a37f1cae9c2ba1b7a3791cfd9c0ea191a34f1ca39cd9a045a3141c909cbba007a3991b259c79a0c5a2151be99b6ea073a25f1a479b42a01da20b1ac39a15a0bfa18319759af19f9ba108195f9a919f47a1cb18539a449f2fa18c18139afd9e1ba12618d999d19e07a10018aa99a29ecca078173c99729ed1a0dd161f994d9e83a0a116bc98e99dad9ff1158598839df49ece156a98819d1f9f79157498809d289f77156998749d1f9fac156298459de39e3d15cc97f69c9d9eb5145098e69c139ee0145098e69c139ee0147b1d3221ee21fb8b7b1d3221ee21fb8b76253027b32811251d29ba254928ab27362bd2231a2514286e2ce2211422a628082d082065202829342d821a441dfb29f32c289533907f2aaa2a349d5f9da82a1d29199ed59cc8295627c49bb59b8329fe26df0d931a2f293822b71b2a2072285a94b8a065a19725d3a0f0a4daa2ee21b6a326a2a2998a1f54a5a99df5171e1020a933a3f09e33234fa9c8a794a72728e2a857a8faa7fb288ba5f7a647a69328dda34da5eba073276ea211a42997e8263aa16aa2dc107027449f51a0d9170e28d89dc798bc1e6428359dd39b239e9e28e59e13a272a339254da0efa4a5a7580fe0a0afa6ffa8fda0bca1dea7cba958a014a1d8a779a9ec106ca05fa5a5a7241a509f38a4e2a6231cfb9eb7a394a68f1cea9ef7a298a5b31c4f9e99a22ca5751c169d14a2bba4281cb29ca0a152a4b01b169c41a1c5a3181b1e9cf4a021a39a1a1b9caaa08da2381a059c72a000a2da19f29b41a0d1a15319e49b11a08ba10719579bc49f53a1be18dd9a829f21a15b184a9a399ffea02318029a099fc8a0a517af99d89ea8a06f176699bc9e82a03c172699689e4ca09716a198099e09a036162598829d529fbc150598479ddd9e4015e697209d909e27150198e59c419ec0143c97b69c249e66149a977b9c919d9d149a977b9c919d9d143d1ff8214f2278133d1ff8214f227813b6243d25a226b525c627cf242026db27e7291024f7240528402c6a2221247728de2c4f21d622e628cb2cc51e28213729dd2c2c1c1f1fd529632c1b19291cb329072b2f0ec91a0b2a55293c8e001bcc295428fa97431989293c26b69b62101729cf1fa8a0269d0c287ea36fa322a2312653a629a4b5a3cd24fda7fca331a33524c7a9dca495a4162558a971a5f7a3b926afa7fba505a2d2270aa680a57da0262844a4ada48ca100289ea4e1a434a1242896a4f5a26c9fce27d4a2d5a1709e542789a122a2a99eb5270fa107a3cba2c52618a11da4c2a58325e1a047a592a88b2319a17ca618a9a11fb6a0eba693a95d1aa6a049a794a9b01ccfa051a6eda8611d00a02da50ea8241dd79fb5a42ba7171d219f25a422a6e61caa9e99a3a3a57d1c049e1aa376a5611ca49d91a20ea50d1ce29ceba18ba4351b7e9c77a108a4931a619c2fa1a3a33c1a359cfca022a3eb191a9cc8a0e1a2ad19059c8fa064a25a19b89b45a026a2f318a19b20a0e2a1ba186a9bd59fb3a17d18f19a7a9f4aa110187f9a3a9f0ca1c317c799f79ea9a016173a99a99e56a0c716dc98499e0da01c16af98ea9d989fd015b998a09d459f45159698589d0e9f111575982b9db89eb8145f97a99c8a9e5a144f98e99c8e9e7e134f98e99c8e9e7e13061fae1d1f1faf8c061fae1d1f1faf8c7825d4259d27ef2669258f241f261e28202989241e26a628642b86239224d828d32cda21e2223a29542d08203d219029452d1b1e1d20cb29ae2ce01bce1dae29d22b6a14271cbf29aa2a0e8ec91aa1290629fa9733166f2916266b9d799928293921e0a0429f9c28b29df9a2d3a0b72747a58ca3eba0392611a856a40ca2f3254ca931a5a0a29e2688a97fa56ea309274da8a6a52ba3b12685a6b7a573a3792701a533a58aa3d7278ba4b3a494a2182777a339a4b8a1d5264ba2e2a3a4a09126ffa184a339a03726ada10ea473a4e5250aa198a44ea674241fa1a3a5b2a761239ca133a6a6a8e221d9a1b3a6f5a80321b6a1c2a65ea92b2089a142a6eca83a1f4fa08aa557a86e1e0ea009a581a7c71dd29f7ea4bba64f1d619f06a403a6c21c9d9e91a3afa56b1c1a9e10a356a51f1c719d94a2d2a4961b239d36a269a4131bb39cc2a125a48f1a989c7ea1e8a32e1a609c37a176a3cd19189cf3a0dca27019899b9da094a20319109b5fa048a2b218e39a39a013a27c18969a12a0bca11818169acc9f83a1c017cc99719f32a1671758991e9fc9a0c3160e99d69e7ea07f16eb98809e25a02e160199489e03a009161799419efc9f1416fd980f9ea79f57155398af9d3d9f03154898409db99e8b144898409db99e8b14b41df71f8c20c40ab41df71f8c20c40a5e20cd221524372411243224a2255b28a5267024a425af288829d323c4242d292a2c962262244329552d58213923d229a02db01e5b21f129552db01c931fe829c82c6c17121efb29f92bef8d571cb3292f2aab9709196b29fa27289d31901b299722f6a0d09cb728b9946da293a05628f8a425a425a218288da8a9a459a3b527afa923a5fea3a92756a9aba50da4872752a71ea5cea3f6267da534a560a36c27dca4d4a418a39c277da48ca402a3db26aba3b2a453a3632622a393a41aa4972564a39ba47fa42c251da4cba422a5ef249fa40aa514a6632488a293a519a86423fba151a67ca84122faa19aa60fa94e2163a114a623a94f20d5a1c8a526a99a1ff2a0baa5c3a8eb1e3fa029a52aa8411e899fe3a4a3a7591e339f7aa410a7ac1dd49e14a46ca6e61c719e5da37ba55f1cf99dbaa2eba4e61bb59d5fa29da4171b4c9d12a267a4ad1af59cd4a130a4561aae9c76a1f3a3ef198c9c35a157a35c194b9cefa0f1a205191b9cafa086a2b618dd9b6da00da27318319b1fa092a12518679ab49f3ba16717ce993c9ffda0f4168299df9ebca09a167b99b79e94a07416f7987f9e7aa03e16da983e9e34a0b7159f98169ef29f9315a498d79d8d9fe2141298909d459f73142798399d9d9e85142798399d9d9e85144f1bb81b8d1c090f4f1bb81b8d1c090f2622e6221d249524c2241825c826ed28d1258724f925d5286828fc23432563296d2a6123dc24c829e52cd521ca23f629ac2df31e9421e929ae2d2c1b4a1fbf297a2d1a14ef1cc529d52c3e97b918d7297f2bd39cfb95b5294529599f4d9b9029c225d9a0c69d17290f1e4da2dd9fb9288da4a1a3fda06b28c0a877a423a23d281baacfa430a3372840a9dca40ea396278da6e1a4bfa3f5263ea570a55ca3f326b0a474a53ba38f2617a535a588a3f1257aa46ca54ea4b6252ca355a52ca50e258ea24da5d5a5a12427a25fa563a67124b7a15aa591a6182455a1d1a5aea77923e6a11aa628a8db2259a224a69da8c621eaa0c4a5aea8d020a9a08ba526a85a2079a046a503a8d21f85a02ba51aa85b1f84a0d6a4c4a7b41e0ca046a4dfa6c61d259ff8a3a4a64f1d769e82a35aa6f21c0d9e38a39ea5761ca19ddba2efa42f1c7f9d85a2c2a4901b4c9d63a297a43c1b269d1ca256a4d81a949cc0a10ba44b1a429c71a1c8a3e519379c42a142a367191e9c0ea1f5a23119cf9bd9a093a2b718369b93a02ba27218df9a4fa0c4a10118769a12a063a19117bd99929ff3a009174c99f89ea3a03f16fe98a49e65a0f315b598419e2ea0ab15d3981d9e0ea04515d198069e24a03115a198af9da79f4515a198af9da79f45155518d01ae01d8a0e5518d01ae01d8a0ecd202d221f23d2236723c9243326c0288d247524e7251b2960251a2433258f293c2838238c24d029792b60218d23d2294e2d891fe721c629062e3c1cdf1f9329ea2dc916aa1ca429522d009755158f29412c579db79879294f2a39a0669d77291f27b8a133a03729391ec5a2bca0e5281fa414a4bfa194284aa82ba429a2202871a985a46ba2ed2794a807a54fa3c1274fa6f3a44ba4c72637a53ba589a4002779a434a5bea469263da47aa504a50f2600a4c3a565a59e2519a4bba5f4a50f2583a221a500a62f24f3a10ca5f6a55f23ffa138a5aaa64c23e3a1cda507a81823b1a1fca56ba85d22aba12ba649a803225fa10ba67ca83c2133a1cba55fa88c20cfa054a535a8e71fc7a054a515a84c1f76a033a5c5a7ef1ebf9fa8a4d5a6221eee9e30a411a62a1da69ee1a3baa5cc1c389e42a38fa55d1cec9df7a25ea5171cae9db9a227a5cd1b529d5aa2bba4471bc19cf3a158a4641a789ca3a10ea4fc19329c68a19da39e190b9c2ca13da31619de9bf8a0f0a2d5189c9bb7a097a29618509b7ea030a22d18f09a53a0efa1f417869a19a09ea13017f499b49f38a1af166d993e9feda0fa150799d39ec7a0a215f898a19eafa079151999749e96a00e15aa984e9e75a078150099f09d04a0a7140099f09d04a0a714901224197f1aad0b901224197f1aad0b3b1f6822d623152466241525ee26da286f2396248326e328e1227124fd25ce2922253623b1245629e12816212c238229392c9c1fa821d529f22d871b0320dc295c2eba0d0b1c0a2ade2d339a150fa329c12c9d9e6b9a8629302bc6a01c9f6f29a8288fa272a12f292423bca38aa2fe28e0a18ba48da3ad287ea8d9a4a1a4732849aa2ca5c1a4112821a821a5e9a46d272fa526a51ea5be2699a47ea534a5092710a45aa561a560260ea456a5a3a5e82532a42fa5e7a5522542a3eea4f6a5902484a201a545a63324eca257a5eea6ec2305a3b5a542a7f4237aa214a6daa76223c5a1d4a52ea84a2256a1b6a57ca8ab21f8a0b1a521a81b212ca1b5a555a8b820dea09ba580a8702016a18ba564a81c20f8a014a5aca7f31e4fa098a4e3a6361eb69f69a4d5a6ce1df09e1ba4a4a6441d489eaaa309a6cb1cdd9d20a356a53c1c919de5a207a5fe1b8e9dc1a2e0a4a71b579d68a296a4e21a169d23a262a4721ab89cc9a128a4031a979c80a1dda3a619719c41a17ca356192e9cf5a0fba2c618f49bc6a076a28b18bd9b8ba00aa22218349b37a09ca1ad17a69ad09f3ea11c17619a729ffea0b416699a1b9fc2a01a162b9ade9e89a0e615be99949e2da05f15ea98279e07a08314ba98e39dd09f8514ba98e39dd09f85147614dc180e1d53897614dc180e1d5389491fcf212f24ab234122e9243c2651287222c8246426182916220d24e1254c292222dc221725702937255e21d123fa298129461fab211b2a522df71af21f6c29942e2f14d81ce229a62ec29853159029ad2dbf9d309a5e29872c45a0b19e4029302ae6a118a10429202587a3a7a2082951a284a40ba4d32814a9c2a4a7a46228cfa9cda48da48b2787a5b5a48ba4ad263ba4eba405a54d263ca42fa523a55126e2a387a5a9a5f3256da3b2a525a68f250da485a550a62125c6a49ca564a69f24aaa47da5b9a6302499a35ba5efa69e23a2a280a555a7132320a2c0a51aa8c52204a297a50fa80922c7a040a508a83421a5a06ca5ada7f220d3a058a5e8a77d2061a0f3a48da7d61f64a0bfa45da7221f34a0b7a48da7e41eef9f70a46aa7281e7b9f36a4c2a6b11d5d9f1aa41da6661d179ff2a3dfa5191dde9eb3a39da5a11c719e64a35fa5561c2c9e19a329a53c1cbd9db4a2eba4831b799d6aa2afa4061b149dfaa167a47a1ab09ca3a122a40a1a539c4fa1bca36519219c0fa147a3de180e9cc8a0d6a28e18ac9b63a04fa2fc17049bf99fc2a14217af9a5d9f57a1b316539a359f28a13016749a2f9fdea01a161f9a0a9f9fa0fc15d799d39e60a085156b99bf9e67a065150f995f9e84a0c9140f995f9e84a0c9146e15e219811ccc916e15e219811ccc91531f4b222324e423b8220f258526e5280b229724c425f5287221352497254f29cd210523dd247d29502224219923ba297d26371e2b21d8290f2b8718791ea029122e6e8de21ccf29392f0b9aa115ab29d42ed69d87989e29432d93a0c59d60293a2b2ca214a121298327aca31ba2fd28689c39a404a39828f4a8fda409a49c28e6a920a58ca43028fba4aaa495a4b126f4a33ca553a5a126fba475a58ea59726c1a4aca511a6152610a4eca558a6a92561a3f0a51aa74925c5a20ba60aa7e024a5a2d0a53da7602448a2a9a5bca7f42302a2e1a503a8ba233fa2d1a57aa74a2376a238a582a7eb21efa003a594a70d2139a006a5c6a7a8205aa0ffa4f8a754201da0c0a46fa7921f7ca0c4a452a7611f87a0cca430a7f01e5aa082a4b0a6191e21a068a4b3a6cc1db49f52a49aa6881d159f2aa477a6221dd49ef0a32ca6941c0a9e6ca382a52d1ca89deba20fa59b1b529d8aa2d0a4b91a209d5da28ca4541ade9c20a265a4f7198d9cc9a11fa49219499c7ba1dba30a19109c41a18ca3c818f99b0ea146a38d18ca9bb2a0e7a23b181d9c53a068a2ca17279c1ba0ffa15217fd9ade9f8aa1af163d9a889f3aa116163a9a1f9fe9a0c215269aa69e66a027155a99029ede9fc1143199a09d8f9ff0133199a09d8f9ff0134c172d1a761ccb904c172d1a761ccb90671d1322eb235c247621b724362680287f22ad246e261e29f8213224d0258f292821a622e0246e290c21f5206e23f429c2213a1e2c21062a6126a018211de7296c2c439899194a29232f959a6915fa28ac2f0e9e6198a829672e97a05a9e3a299b2c35a2bca11429c0287fa38ca3ca28289698a412a4a42886a9a6a437a45c289aa915a5e3a40628c1a394a4aca4632676a34ca51aa5ad26fea37fa56fa5502696a382a50fa6c525f8a278a52ea6392580a261a557a6ca247ea245a54fa65824f7a142a53fa720246ba142a5fea6b2231da275a597a6752333a263a55ca7df227aa25aa56fa7132263a115a5bba76421aaa0d4a4caa7a02035a115a53ba78c2074a0f0a443a71f209ba079a4eea6f71e0ea051a46ba6451e0ba036a457a6f01d00a035a441a6b11deb9f27a404a6761d889f12a401a6261d1f9ff8a3bfa5da1c539e8fa36ca57d1cc79d32a31aa52c1c2d9de3a2daa4b61b089d75a28ca4271bec9c2ca265a4af1ad39cf3a13ba44e1aa19cb7a10da4af19699c6ea1b8a35719279c19a15ba3cf18619bb5a0d8a26f18939a49a013a2b717da99939f37a1d3167499ae9ee9a0cc152d99539ecca03915f398799ed2a057155599a09ed9a02215ba98b89ecaa06e1569991c9e49a0311569991c9e49a03115d518cc18121d3492d518cc18121d3492351ef12190232e24232204255426da28a6210c25aa265f2998210124fd256e2903210222e62476292220d420c123ce29991eb41e6c21c929f7212f1bfe1e98296928d996f619c629f62dfa9c1f8f8329fd2f01a0e99c9d29502f2da192a063298f2db6a208a21e29432aaea37ea3dc28a796daa4a1a4fc2828aaeda4a6a467289ca8dca4aca4412711a2a9a4f4a4332652a394a575a5b626c5a267a5b2a5ef2549a22fa5a3a56f255ca206a58fa5e724cda20ca5a2a59524cfa1e1a408a61c240ca1f4a4a4a6ba23c4a0e5a486a644235fa100a52fa7b42286a137a5bda79422b1a1fba4eca6dd21c7a0d2a43ca765210ca078a43fa7aa20b9a0faa453a7992073a0d3a404a7512058a0d5a417a7082012a07ea48fa6ff1e25a037a43fa65f1efb9f20a411a6f81d9c9fe6a3d5a58f1d459fd5a3c6a5151d2b9fbca3b8a5d41cc49eb4a387a5a11c9f9e89a358a55f1c089e02a300a5f11bdd9d90a2baa4441b7f9d28a285a4ab1a429dd7a14aa4301a209d91a116a49819de9c4ea1c7a34719749c16a141a3cb183b9ce0a0dca28c18f29b78a05fa22b188c9b1ea0eea1ad176f9bb69f93a1de16099b7a9f49a14a16a89a6e9f3ea1f215249a0d9ffaa0a3156099a59ed9a0d2148799379e56a014158799379e56a014150d0f71180d1c928f0d0f71180d1c928f391ccc2045228a23c421d3248226a928fa2083240526be288e20cc235125f5282f20c422a5242629bc1eba20472375290b1c9e1c1d206d29ed1cea13291ba529bd213196400e2629422ad69cb59733290930b99e269a15294f30f8a0e69e5b29db2e35a20ea1fa28102cc0a3a9a2fd2849202ba400a46f284baaaca4cca41e28cea7b7a4e6a42c270da283a406a5f425f8a249a566a538266aa344a59ca5a525bea26ba5eea58b259fa27da50da61e253aa234a512a6852480a1faa436a603246fa114a5b9a6cd2331a112a5e2a63823e6a0c7a46ca7982257a107a525a75822eea001a53fa7b521f3a0f6a495a7452144a1f3a43ca7d2203da1f5a406a77e209da07ea459a6de1f66a07da464a6531f30a078a4afa6111f37a053a48ea67a1e01a023a42fa6401eb39f12a4f4a5aa1d919f1ba405a6671d759f1aa408a6301d109f11a4f0a5f31c8b9ed2a3ada5971cf99d67a353a5321c619dcea2d3a4731bec9c51a279a4c41ad69cf4a12da40d1ac69c98a1f5a3a019b79c43a188a33c196d9ceea011a3da18399caaa0aea25a18a09b51a061a20618c49a15a020a29c172c9af49f30a20417029a9e9fd4a17a16129a559f4aa13a16f699cc9edea0d615a2992c9e92a026150199909d38a0a4140199909d38a0a4149f12e118001c67829f12e118001c67824e1d5a21a122be23ad20db2468268228bc209c24ee25b6285a207a234425dc280f20d021382400291e1ffa1fcd213429ae1dcc1bf01f352994198b135a1d61298418329b4e8e702942218a9d9399c7287b2c839e399c2328863093a0f39f9d285e30eea1e6a1ee28222d49a3eda2b028bf20a3a49ea4ad28dbaa69a4b8a4c6279aa54ca496a45a2678a1aaa41ea528269da21ba5c2a524264ea3fca494a5772599a307a5bca52625baa20ea5e2a5d224faa104a5eea55624aca1eea4c7a5e92351a1bea403a63d23dca098a4c2a69e22eaa0bba484a67a22fea089a4a1a6e32110a1b0a45fa6aa210aa16da41fa6fa20a1a062a4cba58120b9a05ea405a62c20aea03fa40aa6ab1f81a03da4f8a51a1f4fa037a4f3a58d1e34a038a406a6581e39a034a4faa5201e2aa037a414a6de1d05a03fa42ba6811da19f3ca422a6221d0a9f16a4cda5b71c7e9eb5a378a5561c089e55a331a5f81bb59d05a3daa40e1b3e9d8ca29ba4711af79c2fa252a4f319a89cc0a123a47a197d9c5da1cca31d19299c03a149a3b818ce9bb8a0c7a26718429b6fa03fa2e717ab9a2ca0afa1c717309ace9f51a1f516dc99499ffaa07d160d9ae39eb0a023164c9b9d9e74a09015ee9a419e5ba01b154e9c949d3e9f96124e9c949d3e9f9612101512180a1a7502101512180a1a75029e203425dc2636266620fd24d2272d28b5206524a0263d28c51f802354259b284e1fde218724d428cf1d671f6322ec28101c6019971ef728f1151696bf140f292588aa9ce59a1829c60f11a0729cdb28fd23c2a0c69f9428d62e04a1d9a02b28d430c8a1cfa14528012f6ca31aa39e286525b6a46ea49728fbaa42a4a0a4b9267fa3d5a3b6a46b25b7a02ba474a48a25cca1c2a435a59a25fca1c3a463a51b250fa2dca4a6a5dc24f9a1fca4ada5c124fda1f8a4c8a56924b7a1c2a4e6a5032479a198a40da65523d5a051a485a55b2207a1efa382a57e212ba0dda378a5452165a00ea4daa5dd209fa062a42da6c720b1a049a429a6692090a033a4e7a5152044a01da4d9a5ad1f04a0faa3bba5011fa99fe4a3c7a5af1e789fe4a3c9a5731e649ffea3d5a5361e609ff4a3dda5a31d419feda3baa54a1d499f05a4d0a5ec1c249fe8a3b5a5891cc79eafa37aa5531c0e9e30a332a5cf1b7d9ddfa2e0a4381b479d8fa2b2a4bc1a169d3fa25fa4481a109dd2a116a4cb19079d69a19ba36319c39c05a1f9a2bb18689ca6a074a26218099c52a0f7a11218329bfb9f7ba18617809a6e9f09a1b016499afb9ec1a0ff15389aba9e99a01f16389a869e65a0ba155f9a4d9e2ea041158c99dc9d0aa0bc148c99dc9d0aa0bc140000af8ddf8f2c0f0000af8ddf8f2c0ff820c0242c26bb26a4205f25cc2634281b21652446263d28621f4423ee246c28aa1de420f3228228381ce51c3e209228b718ef12b71a96281a143199f58d8228a48e339b2c995428a993ee9e949db628af8947a14c9fec28382508a14ca11d2803304aa12ea271272c304fa35ea3a0287428b1a4d4a47e28ffaa62a41da5362728a2bfa333a58f2580a07fa3d9a4e12421a15fa4d6a44e2570a192a41aa5e924b6a1bca46ea5a0247da1b9a483a56624fda089a455a50324d8a063a440a55c23dca050a43aa5d822f7a01ba476a54822f0a016a44aa5ea214fa0dea345a564212da01aa487a50721d59f27a4b1a5b620b09f09a497a52820b29f00a493a5eb1f989fc9a352a53f1f889f9aa342a5a41e589f72a353a51a1e1e9f56a33da5e61dd69e5ea351a5711db89e78a38aa5661d229ff5a39aa5261de29f0ba4b3a5051d3c9f17a4dca5b01c8e9e0ba4efa58c1cde9db4a3b3a5231c559d47a355a5901b349dbfa2d0a4db1af69c19a24ea4201ae39caaa105a4a319e19c42a188a33b199d9cfba033a3e618469ca3a0b6a29018509b3ba028a2f9177a9ab59f7da1ab17ce991f9fe1a0db164599989e70a02216fb98469e30a0e6151199129e04a03b159998d29dec9fc2148098799d549fe1148098799d549fe11400003492c694710f00003492c694710f3620a724652640262c208b2509279327781fca24bf26db27781fb52360251928111e35210a235a28221bde1b9d1e6d28c715079394145b2829085e9b84945b283c914d9d129c5c287098e79e469e6328a299cba0a49f8a282e9477a16ba02b286e264ba119a13327292d4fa3bea20d28512839a433a4ed27c7a8c0a3b2a3c426aca01aa386a4242575a0eda389a40d2561a055a4bfa4e4249da074a40ea59024b5a068a412a53224c7a057a423a573238fa020a405a5dc226ca007a400a580225fa009a419a5fb2181a0c4a3f3a4b5218ba053a3a1a456213da012a3eba4fa2041a08da342a5f3209da001a4a4a5d62074a0dfa3eaa57c2032a05ea357a5c31f9a9fa4a2c8a4b71e279f75a2a1a4a91deb9e63a292a4061d839e4ba28ea4f41c849ec7a2bba4e41cc29e70a330a5f51cf79e0ba49ea5f71cb79e23a4d1a50c1d4f9e12a4f2a5f01ceb9dd2a3c5a5a51ca39d82a368a5601c929df1a200a5061c4d9d6aa2bfa4131b2b9d12a279a48e1aba9c83a121a4b719829c23a189a34619199cb2a0e2a29f186c9b51a037a23f18f49af09f8fa19017569a299feda0e516ff99a69e93a02e16349a5b9e56a0b3153e9a349e30a09e15639af29dcf9f2f1537995a9d459f12155a99c19c639e9c135a99c19c639e9c1300003b915d91c70f00003b915d91c70fe41e4d24ea2592254220fe242c2693262620fd240e273527321f28245d26cd27791d74200123c12749195c138919be275f13839ba29a952701882a9d829c8a270a936b9d079dad276a96c29d939db2270a991b9f6e9e0c28c09b71a07ca00128659d9da1c7a001288392c0a26ea2a527229db3a482a4d527cea2e3a28ca4f024839f02a411a4d82428a04aa499a4b7247fa04fa4daa4692494a03da4f5a42424b1a04fa4fda4d32398a03da4f8a44e2375a015a417a5aa2244a0cfa3dea4f9212ba02fa362a48b2116a0bfa22ca4202154a0a4a23ca4d220879fb9a2b1a4ee20199fe7a394a5d820f39f41a401a69e20ed9feba398a526202da027a3d0a4151fd89ee6a127a41c1e469e47a1aca3c61d099e2aa1a7a3121be39d57a1d7a3221c059ef3a130a4bb1c7d9e04a3eba4f61c689f29a4d9a52c1d46a079a440a6471d8c9f74a4fba50a1df09d5fa327a51a1c639dd1a2d9a43d1b349d8ca2a9a4cd1a169d0ba24ea4241ac49c81a1f2a388196f9c16a156a31e193b9ccca0e7a2c618159c96a094a28f187c9b53a027a21e18ee9aec9f68a1a1174d9a159fc4a0e316a899a69e95a08b166e99529e51a049161d99f29d07a0fa150099a89d799f7e15c898549d339f8a157898289ddd9e11157898289ddd9e11150000a590129282110000a59012928211611e0e23d525822504201b25a42673262a206c25302740265f20cf24d5268b26ba1b601c821ef925a9135f9dd899ee25e687639ebc9c02279987429d4f9b3327a7901d9d179b3e274d95a09d349c84273a981e9e7e9d872776991c9f1b9e6c27a79b1ba0769fdc26b19c09a1a1a062267b9e7ba27da2f22552a00da3b0a3ff246e9fc9a392a4d42432a04da493a4ba2433a01da4b5a4362435a030a4cda4c9234ea009a495a4242361a0a0a372a465222ca09ba381a4e621e09f64a376a48621bf9fdba229a4fe20999f16a25ea38c20659f8aa1bba27320e79e11a2e6a31221449f48a4afa58e21b89f19a4a6a5c22012a0c5a392a57e20e19e30a33da5ed1f909d52a110a42d1e8c9ea8a090a2b91c149e8b9f0ca2661b859db29f04a2da1bdd9d68a04ea25e1b0e9e23a253a49f1c799e28a4c3a5f21c209fb7a48ba6241d789fb6a488a6e91c539f40a4f3a5901c759e42a332a5f21b769d41a264a40d1bcc9c81a1aaa3231a859c18a1d2a265193d9cd2a07ca20d19189c84a03aa28a18d69b45a0e7a14a185b9b14a0a4a1d917cd9ac39f67a178173e9a4f9f21a11c17eb99c79ecda0a91686993d9e76a0ee152899ba9d46a090150f994c9d06a006157398b19cf29faa147598f39c869fb7127598f39c869fb7120000c388718386110000c38871838611bc1dd121f4235124c91eea229624e624171f00258726b8252a21e327262952278592fea0c4a1e024329440a434a5e2230806499d4b9e0525e005df99ad9955252c8fbb9a9798e525d892cc9aae983f26f495079b9a978f263e977c9bd995c526dd98b09cc9991827ab9b0da047a0ba26c09d72a223a34a2504a0d2a323a4d1248fa0f4a36fa448240ca0d3a339a41a24909fa1a341a4cf23529f64a32ca40d23559f44a332a4c722549f5ba36da43f22579f79a38ca4ef21969f68a37ca46c213b9fe5a23ea49f20ae9edfa11ba3901faf9e7ca080a1ae1e6f9f5aa03ea11e2096a015a5c1a6942211a0afa446a6e020f39e94a26ca4781f759f05a2f9a3aa1e909edba0c4a2241d8b9dab9f89a1181b049dbf9cb8a05c182a9dc09a5ca0d218279cb09c74a0e018019dd7a105a4051c00a0f4a4a4a6d61ed2a075a566a7b31ef59ff3a4d0a6bd1ddb9e19a4b2a58a1c569d95a2c4a4211b039da8a11aa40e1a159d8ea107a4e219bf9c3ea1d7a38f19569ccda015a3d318f09b84a050a28a18209b42a0c9a11918859a07a07aa17c17eb995f9feea0ee166d994d9e6ba0fc15d898bb9d26a04015c8987d9d0ea02415b598579de39f1015b398449d839fc014bc981b9d699fe6148697b39c779f90148697b39c779f9014eb8620922091ff15eb8620922091ff155f1bf21dd820b620c31c6a20d12134240c1a451d5c20b4223d1a151efb1ef524681d4a228b241e272d164a1a651daf2582159317b31beb24f0122c14df19f424170ef3087c1711250e85a08f4d141f25fd90bf9465114c252f942b9501159525d294dd9496188226f79a779e719cee25ba9eb2a31ba46324719eeda25ea30824379e40a2e4a20b243a9e39a229a37b23379e5ba261a34623a49ea7a296a3f322ed9ec9a205a4a422349ff4a222a43c22559f08a33da4c7217a9feea25fa47421579fe8a26da4332111a0d3a2eda3bf20dc9deea210a46020069ce5a19ea3861f3197659cd59ef01a259c8d9fb5a1371cae9d92a1b2a39e1d6b9d17a10fa3821daa9c90a07aa2e31c4b9cd79f78a1bf1ba59c6d9e49a0d9186f9d4a08a1965d1167954c1d521d3d94ad9dcea19da33a1acba16fa7e7a833205d9f6fa53ca7e51e639e1fa494a5201d489e98a278a4b81b0a9ea8a1d5a3a01ab89d37a121a31b1abb9c8aa01aa21d19569c45a0cba1d018129c1aa0bea17118e39bf79f9da15018839b839f6ca11d18159b079f19a16117e19a769eb1a0ca168a9a0f9e75a07016379acc9d45a0f715bd99959d11a07d151e99349dbc9f2c15e498079d309fd3147a98a59c1b9f64144797aa9c949f42144797aa9c949f421400009182e881910200009182e8819102a418891cf01d361f841b831f7a21e522c719ff1c351fb421be128716c718351bd416b71acc1c6420c8192e1c941f3724691796176d1da32473140e0ff019be24320c0692f813dc24fa90f797d890c924fd95719a8198b7244f986c9cab9b89242999e89d4f9d91237799af9ec39e2f227e9a2fa038a0f922fa9b8fa077a08b23519cb5a0dea02c23be9c01a155a1cc22579d5aa1fda1ab22dd9d83a14ba21322299effa1dfa2ff213e9e04a205a39c216e9e0da23ea34521a79e1da262a3fb20d69e30a294a3b820df9e29a2c5a36720b89ec3a15ca3b71f4c9d63a0d7a16b1dd59a529ebba0451b229b9f9ed3a0691b629c679f4aa1111ca89cce9f99a1011ca49c0ea0daa1051c609c47a05fa21a1cef9c5fa079a2d01b6e99879d7aa02d198e831520c221f893289d00a180a2e21938a2ada8d4a96d21079cb8a12ca4cf1b879d19a1c7a3a41acc9cb3a0afa20c1a329c79a04fa28b19459c37a0fca10719fb9b08a0bda1c118d59bc59f97a195187a9b679f54a132183b9b189f1fa10518a29a949ecba073170e9a289e6ca0b1164799ba9d21a0f4152a99779dea9fc215d398499d7b9f9015a9982a9d4a9f70159798f59c159f47158498da9cf39eef141e989c9cf79ee9141f981b9ccd9df8121f981b9ccd9df8120000658015025a040000658015025a04dd1bcc1ef2205b21531abf1e8520622284173c1b111d6d20b315dc18e81ae41bcf1bc81cec1fc42191198b1c1420fb237c164219011d4124e413e013971953246e10898841155b24e18b4f968a9068242794909ae49851242797f89cbb9c27243399bc9d0f9e12239f96239b799bda1fb0983f9c639c7e20689b419e699eae210b9cf39edd9f7f218d9ca99f42a05621ea9c2ba0a4a029214c9d78a029a11521a49dd2a086a1f220fa9dfba0d7a1dc203e9e42a14da2aa20909e85a1e3a29620699eb3a117a35820239ec2a124a30920ae9d8ea121a3811f659d64a10ba3b91e269d14a183a2f41dd09c9ba017a2191d7b9c4ba00ca29d1c3d9c32a01ea25e1c219c32a037a22a1c3a9c15a041a2d51b639c28a061a2761b7d9c869fcda1b31a389a799d9a9f9218c88b3b901a92830a8b91699534982708469ba59ea4a04e18279c8f9f27a14c19129c289f0ea1d518619bc79e0fa15918f89a989ee9a00418de9a949ed5a0e917a69a779eb2a05e17509a609ea5a02d17e899409e79a0bc16a899249e59a08b165c99de9d21a03f162899859d889f9d150599279dec9e3d15dd98d69c969eed14cb98a09c5d9e8b14e298839c2e9e3714e5986b9cef9dd51368984e9ce69da1133598009c539d92133598009c539d92130000f311ca1403030000f311ca140303ab1a731e1d200a210f19d01c4e1e31212217c21ac31c13204317751ac01c561f9618481cda1d992168185c1b271e2d2314164518851c5923f9139014711a6a23b50f2008af176923c084d694b709ba2355943d996a96c923aa971e9cd29a5f230e98789c409c3e225097329c5f9c1f219398d89c0e9d6f21c399cc9d309ebd21b39a5f9e099f7721619b199fdd9f1d210d9c8a9f47a0d920429cea9f8fa0aa208a9c4da0f2a08920d89c8fa081a15620109dc4a0dda13820279dd9a011a2fe1f2a9df8a06ea2a31f269d00a179a2611f3c9d32a18fa2e51e5e9d3ba1bfa2631e169d1ba1aaa2eb1dc29ccba04aa24e1d599c8aa008a2cb1c1f9c4aa0d9a1651cb89b22a0c7a12a1c9d9bed9fb3a1bd1b949bd19fc2a1441b709bd09fc6a1cc1a119c07a093a1831a849ab89e7ca0d118f395d39b959d6e15c095d69afa9da1149499479c0ca0fc14a499659d55a047161a9a009e9da027175d9a129ebaa07517ab9aff9da0a02d17c79aee9d6ea00217ad9ac79d5fa0c0169d9aa19d4da04b163d9a8b9d46a0da15c5997f9d37a0bb155299719d29a05815e198379df99f1e156498db9c789fc61422989d9c119f4f14cf97579cc89ec813d197529c9c9e3d13d0961e9cc79e8312f796289cba9e4814f796289cba9e481400000000000000000000f311ca140303ab1a731e1d200a210f19d01c4e1e31212217c21ac31c13204317751ac01c561f9618481cda1d992168185c1b271e2d2314164518851c5923f9139014711a6a23b50f2008af176923c084d694b709ba2355943d996a96c923aa971e9cd29a5f230e98789c409c3e225097329c5f9c1f219398d89c0e9d6f21c399cc9d309ebd21b39a5f9e099f7721619b199fdd9f1d210d9c8a9f47a0d920429cea9f8fa0aa208a9c4da0f2a08920d89c8fa081a15620109dc4a0dda13820279dd9a011a2fe1f2a9df8a06ea2a31f269d00a179a2611f3c9d32a18fa2e51e5e9d3ba1bfa2631e169d1ba1aaa2eb1dc29ccba04aa24e1d599c8aa008a2cb1c1f9c4aa0d9a1651cb89b22a0c7a12a1c9d9bed9fb3a1bd1b949bd19fc2a1441b709bd09fc6a1cc1a119c07a093a1831a849ab89e7ca0d118f395d39b959d6e15c095d69afa9da1149499479c0ca0fc14a499659d55a047161a9a009e9da027175d9a129ebaa07517ab9aff9da0a02d17c79aee9d6ea00217ad9ac79d5fa0c0169d9aa19d4da04b163d9a8b9d46a0da15c5997f9d37a0bb155299719d29a05815e198379df99f1e156498db9c789fc61422989d9c119f4f14cf97579cc89ec813d197529c9c9e3d13d0961e9cc79e8312f796289cba9e481400000000000000000000000000000000d31c0d20b520c91db425d025c42779273126b9228923ba25b727e7205222752533292b207b211226542a771ecf1fee250b2bdd1cf71eba243b2b919146191726de29d89c859c45291429009f279ea92a5f27db9f459fa52aa325a39d649def285d2337a1b6a00e2a879abaa60ba8c8274ba093a5b6a60827eaa2e2a383a43c2602a61ca21da24624a8a6e5a2cda1a421e5a6a8a54fa3861ce7a546a844a546283da446a82aa5f42943a1faa447a22c2676a0cca2b1a2a92358a0a2a123a01e2498a228a1cd998f27baa2a99fc714c9280da28ba6f3a7c0130aa4c8a8f4a9d8a4f7a0b1a578a729996f9f9aa34da50818969fd8a4a7a7691a2aa015a467a5cd1c1e9dbfa196a4521c069da4a116a4671c359d8aa109a42a1ce19c72a102a4301c229d3ba1cfa3f01bd29c04a168a3811ba59cdda013a3ec1a349ca0a0cea2401a039c7aa083a2f9198a9b58a04ba27f19189b41a0ffa13e19d99a12a0dfa1c118d39ad69f8ca18518ab9a909f63a12018639a3a9f3ca1ca171d9ae79e17a11c17e199ca9ee6a0e8169799b69ed1a06e165899889ea9a0311604992c9e1aa0da159098c29d469f75157898ac9d479f0e157c98a19d3f9f04157b98929d469f39155e984b9dfe9ec614c097f09ca79efe137498eb9c0a9e35140000000000000000d31c0d20b520c91dd31c0d20b520c91db425d025c42779273126b9228923ba25b727e7205222752533292b207b211226542a771ecf1fee250b2bdd1cf71eba243b2b919146191726de29d89c859c45291429009f279ea92a5f27db9f459fa52aa325a39d649def285d2337a1b6a00e2a879abaa60ba8c8274ba093a5b6a60827eaa2e2a383a43c2602a61ca21da24624a8a6e5a2cda1a421e5a6a8a54fa3861ce7a546a844a546283da446a82aa5f42943a1faa447a22c2676a0cca2b1a2a92358a0a2a123a01e2498a228a1cd998f27baa2a99fc714c9280da28ba6f3a7c0130aa4c8a8f4a9d8a4f7a0b1a578a729996f9f9aa34da50818969fd8a4a7a7691a2aa015a467a5cd1c1e9dbfa196a4521c069da4a116a4671c359d8aa109a42a1ce19c72a102a4301c229d3ba1cfa3f01bd29c04a168a3811ba59cdda013a3ec1a349ca0a0cea2401a039c7aa083a2f9198a9b58a04ba27f19189b41a0ffa13e19d99a12a0dfa1c118d39ad69f8ca18518ab9a909f63a12018639a3a9f3ca1ca171d9ae79e17a11c17e199ca9ee6a0e8169799b69ed1a06e165899889ea9a0311604992c9e1aa0da159098c29d469f75157898ac9d479f0e157c98a19d3f9f04157b98929d469f39155e984b9dfe9ec614c097f09ca79efe137498eb9c0a9e35147498eb9c0a9e3514392092238924d21d392092238924d21d082487260e297a25da2521241f274d24ca2888227d24f223f62aac2186220224342cfa203322a624722cf11f5c227d25412c941c28208027392b249647912d29b529a19fe79e6b2aa32809a0719eb42a0f28c29adb90572af123549b3b1109299e9a99a670a71a26efa25fa660a68925cca4fda3fca3be24cba57c9f8f9c232048a8ee9cb5107c1809a8c6a15ea10c1eaea7b4a51fa58f27b2a471a69ba541296da305a6eea5ad2873a2b9a4aea45a28e3a059a2f99f812807a09e9c3a9117293c9f909f5c9d182828a152a508a8f8214ba207a881a9239d02a219a8d6a9b6a0e1a079a6b5a8c99d14a244a72fa9419875a0a6a6fda85918959f45a5f3a7771a4f9f84a466a7341c06a027a450a6b31cbd9f4aa36ea57e1c3d9e74a205a5071ce69c11a2a6a4931bac9ca8a14aa40f1b3c9c65a1e3a3a71a5b9c0ca15ba3f819769cdaa0b8a2aa19599ca5a01fa25c193e9c6da0e7a10c192d9c2ca0a2a1c118df9bfe9f6da17f18439bd89f40a12118839a759f14a1c117509a289feda01c17029a009fbca0e2169a99c99ea1a05b164799879e68a00d16bf98089e1ea0a6154b989a9dbf9f40153d98619d399fdb1416983d9dc99ec8142298099d809e20149b97d39c5c9e89139b979e9ca89d42149b979e9ca89d42147b1f9e22b2236b1e7b1f9e22b2236b1ead249925e42639268e268224d52509279b2863247225a727682aa523a1240e286e2ccf21af231328cc2c4320b321b828822ccc1d1120a1292f2c4f18cb1ca829342b78958e10532acd29579a8d90492a34282c9dd5962d2ac72569a0839e6629961a8ba4c6a36028f7a266a528a5e12675a5c8a49ea49825b5a722a4c1a355248da81da4e2a25324f8a7bfa36aa2ec2480a6c0a4f6a15d26eca50fa55fa11d28b9a416a568a48e2809a505a5d0a39828d9a44ca40fa42728cea2a7a310a4f3270aa296a4afa4d4267ca25ea5cda6fb24d2a15aa679a87222d0a107a72fa93c20f2a020a76ea9561a18a146a77ba9a016e9a03ea7d1a9791cf5a063a6cca8fb1c83a03da5c7a7e11c14a09ba4d8a6841c059f0da4fda5621c5d9e7aa38ea50b1cd89d0aa35ea5f91bb69daea2fca4771b1a9d11a296a4c81ada9ca9a130a43f1aa49c67a1d6a3e5195b9c2da157a39419289ceaa0eea24c19159cb0a082a2fe18ea9b61a030a2a918009c3ca0e8a14218c19b11a0bca10b182d9bb39f4da19117a59a649f10a1ed16089a1e9fb7a097167099b89e6ca0eb1526995a9e19a09a153599119ed89f58154199bf9d779fdc14fb98749d249faa14c998439db39e4214f597c69c8e9ee913c298179d5a9ead13c298179d5a9ead13950df51289147d08950df51289147d082324a02589274427e0249125b3269d28f826ec24e126e228dc2820241e25ed28072b57227f2434299f2cd3207e22a529d32cd51eae20e129802c271b901dcf29d22b9c0e30190a2a5b2a2e983810e729cd28869d6599ae2953265ba1a7a04d290022d1a3dca2b3286c9d99a46ea33a28a3a4baa4b8a3f026e6a7eba4a9a35326c3a855a5d0a35726bca861a59ea48e2613a741a5caa32d26d5a51da505a4c926fda4d9a498a3c5278ba4b5a471a4b9273ba465a463a4722701a485a45ca4eb268aa3eca429a5ff25a9a26ca58fa6142548a2d4a504a84e2314a2a6a6aea89321eba1f1a6ffa8b720aba141a798a9102080a128a7bfa9011f16a163a6eca8431e8fa0c5a535a8061e62a026a56ca74f1d15a07fa491a6a41c4b9f11a4eaa5251c8a9ea0a39da5121c119e32a34ca5981b779daaa2eba4081b379d4ba27fa48f1add9ce8a138a4151ab59c93a1faa3bd19799c5ba181a36319569c22a112a3de18059cd6a0bca2c118b89b98a072a27818659b6ca03aa20d18e19a2ba0f1a1a3175b9af39faba13417de99889f56a1d2166f99229ff5a026161699d09e8ea0df15f898809e38a09b150d99549ef89f7515fd98289ee19f1715ea98fb9d719fad142498589df89e5314ed97f09cc49e6114ed97f09cc49e611498117d16e315880298117d16e31588026d22f224c0268227b8233025d426b628ef24cd240926fe280128282420254229092a3f23b3249c29502c7b218223192a072dbe1ea421652add2c481b941e6c2a742cd40e711b8f2a8d2bdc993e10392acd295e9d6296d629ae26d9a0ec9d6d292d21a9a298a1cb28c29a1da428a3762898a48aa405a43328d8a7eea45ca4d627ffa86da58ea4992740a8a5a5e1a45f275ea55ba5b6a4fd26c0a441a53ba449275ba423a546a41f2705a407a596a4632606a454a530a5012691a378a52ca64e259da39ba58ba6fa2440a4d2a5e1a676245da427a610a81424a7a27ea621a96d22ffa1b2a6e5a8212117a2b6a6f6a8412039a15fa6bea8321fa3a113a6a9a8611e39a1a6a585a8ea1d6fa024a5eda7711d01a0f4a43aa79c1d7e9f8ea4d9a6181df19e22a437a6821cce9e84a36da50d1c439ed6a2dea40a1b039e77a2a6a4951a889d2ba270a4e919049de8a145a49a19af9c9ca110a44219789c5da189a3f818519c16a123a3a918289cd2a0a7a26b18db9b82a026a222183a9b3ca0aca14d17a09ac99f4ba1c916f8996e9f0ca167168e99029fcba00b166699c49e9ea0d515ed98849e6aa09d15dd98549e3ca02c158d98289e11a0c3149c98f39dc69f63141798a99d739fed131c98459da79e27131c98459da79e2713ec0ff512a1133708ec0ff512a11337086624dd243626df278e247225f6264229c924d2244d2665291526a024a425d9294b2822242825622a2a2bb3213423632a8c2c981eeb20a52a282d6417691d242a1b2dc3972816422a552c1a9d2296232ad22a1ca0bc9dd2299d2804a1e99f91296f247ba2f3a02729be94b5a3f2a1e42800a574a4eba268287aa8c9a4aaa31c28e9a817a533a4f3275ea749a533a45d2786a52ba5cba4a6266fa591a5b1a4c326e3a46ea5bea41326d0a480a511a5a825caa490a59ea56925b6a3e3a5efa6d1248ca2f4a538a7572454a2e6a580a7182405a20ea61ea85323a0a14ba692a89a22aea18fa6d8a80622eca194a6e3a83d2141a127a6c3a86b2006a1c6a57aa8cf1f95a075a54fa8fb1e98a047a52ea87c1eb1a0e9a499a7e11d44a064a4c1a6311db09f14a491a6c21ce29ebca34ea6761c6a9e47a3b4a5261cd89deda209a5cc1b939dafa2cba4081b3c9d75a2aca4b81afc9c3ea26ca4591a9d9ce1a12ea4e9195d9c8ea1eba346193d9c54a16fa30319129c21a1f1a28c18f49bdca08da24f18659b93a023a2b517299b6aa0d1a15d17979a30a080a1a016eb99b09f03a1271678992c9fb8a0bd155c99c99e6da022151a996c9e2ea0ea142199469e05a086140f99159e11a0a714b298b59d949ffa14b298b59d949ffa1400009b093c12888200009b093c128882121f40217f22d62310243c2564260f29a024b924fb255729732470246625ee299225f423ea24682afd28bf21ef23a02ae22b461efc21802a162dfb18591f172a662d158efe18522ad12c4f9cf098382ac92b7ea0a29f022a9c29c7a1fda0d52965262aa301a24729221e26a48aa23529f9a37ca470a3712851a8aaa401a4182879a82fa567a4d027aca540a5b2a4dd26a6a461a51da57926a1a488a552a57e26a5a4b7a587a508265ca4d2a5e1a5ab2549a4f0a563a6562534a411a6f0a6c02429a4f1a5cba64e24c4a3f0a592a7f52315a328a639a8172380a27aa693a8a8229da160a6b0a8a82198a172a6b0a83821c3a130a690a8a1206fa1aba530a8ab1ffda067a503a8011fffa05fa5fea7c71e9fa049a5bca7371e12a0baa4b3a66b1d969f50a417a6aa1c059f21a4eaa58f1c9e9e8da3aba5e01b509e25a388a55c1bdc9ddca246a54f1b929d8ca2eaa4ce1a119d16a281a4fb19bc9cd1a134a49719589c87a1e0a34119339c4da172a3c118049c14a119a38018dd9be5a0b8a21618839bb0a060a2d217399b7fa006a20a17ed9a42a0baa1ad16289ad79f57a124168099569ffea060150f99ed9ed9a014150999ca9ec7a0ed141499a79eb9a08d14ee988b9ea7a0b2145d994d9e10a063145d994d9e10a0631400004a080510d28100004a080510d281712013222f24d0245d2339252a273029cc22d3247a2639297b238924cb25ec2935240424c224062ace25a62167231f2ad5285f1e23219a2a282c8417f81d582a662ddf97e1158b2a5a2df49d1b9b802a6e2cf4a05ea04a2ae12a79a261a2082a5b2815a4c3a37529ec21d4a456a45e29cda100a5c4a4c62857a84aa55ba5602868a891a558a5e4272ea6b4a5e8a54f271fa5a6a5c8a5162787a4d0a514a6c52635a4eaa560a6392686a4eaa5b4a6a02555a4a1a5aea6ef2493a3a3a50aa793248ea2bba595a72f24a9a20da619a8c62320a36da63ba89c2387a25aa674a8a52240a22ba68ba8e62170a21ca685a811210fa2ffa54fa88d208aa1d9a54ba83e2029a1cea56aa809202ca192a549a8391fd1a03ea587a7411e4ba0d2a4eaa6ac1d09a08fa4d5a63b1d709f3da49ca6be1cc79eeca322a6521c2d9e6da365a5001ccd9d0ea308a5181b8a9db9a2cfa4af1a269d73a298a4431a069d2ba25ea4ee19b79ceca130a49119a19caaa1f2a305197a9c72a182a3c718439c28a106a37918149cfba0a8a21118c39bada038a2a317289b4aa0c7a10217ba9adb9f53a16b16889a7e9f10a10e16969a469fe0a08615779af49e9ca04615ee99a19e38a0c2141499379e21a02a1412992e9e08a02e1412992e9e08a02e140000cf0709149a820000cf0709149a828120b9207322d1231e22f8247726ae280d23e9242b264d291e2231244526ad29792117238225cb296e237e211124822a37268a1e5c21c82a842a8c17141e8f2a552d00980d19c02ae52db29d6c99372a292dcda0f79f192a1f2c56a261a2ce29ab29b7a3afa381298624a7a48fa49829aca3e3a426a5c12820a94aa592a57728f1a77fa570a5ca270ba44ba5baa5a226f4a3b2a504a6a12636a4cfa50ba643269da3a6a547a6a62560a3efa5c1a63c2503a40aa608a7d22444a413a653a749241aa413a6dba7e42384a312a601a854236ca2e8a555a86922a4a103a671a8f62176a1d2a534a84621a8a10aa663a8032187a104a643a8c22031a164a513a8d21fb1a02aa5a5a7471f7aa0f5a453a7851e4aa0caa48fa7361e09a082a460a7b11dc39f51a4b7a64e1d789f30a40ca6cd1c369f0da4d5a5871c009fd7a39ca5471c7f9e7ca356a5fa1b229e22a320a56c1bc69dd1a2e7a4ee1a789d7aa2a8a4831a059d34a270a4d519ca9cdca139a47219739c88a1d5a3da182c9c33a177a38318119cd5a0f3a2fa17cd9b7aa07da24f178c9b22a0f6a1c116d49a9e9f6fa12816b69a7c9f40a1ae15d29a7e9f09a15315959a7f9fd0a03915659a4b9f99a0be14c899389fb5a0e2140d9afc9e89a053140d9afc9e89a053140000a30d6912e88a0000a30d6912e88ab71eda21e7231924e8227e25e1262b298622fd24912663293c2265249d25ab29a8212323e924d52978216421e123642a7e237b1dd121882a5226dc0d3e1d742a172ce79aa00f7a2ac82d149e509bf129e32d0da111a0082ae22c7fa2fba1ce299c2a14a4d0a36429db26f4a43ca49529329fe1a465a4a928a5a8f7a403a52328e6a793a5d0a5ef2749a4a0a559a6f0266ba437a6b1a6fb26b9a42ba6b3a6502682a426a600a7bc252ba423a63ea7542502a452a692a7fe247ba35ca607a8862441a347a6f4a72a2427a31ba621a87823c3a2fba543a8d22212a2b2a5b5a70e22b3a171a5fda7652191a154a5aea7aa2007a186a5fca78220eda05ea515a8142055a012a5b7a75e1f7da018a5b0a7e41eefa00ca55ea7591ea4a0b5a4d2a6c31d43a096a4bca6391d0ea072a499a6ef1c899f45a46ea69f1c109f0da428a6461c529e89a38ca5c31baf9dfca20ca5b31a5b9daba2cca42e1a269d6ca29da48919f89c3ca26ca44119aa9cd7a12ca4de18679c95a1dea39c182e9c56a181a35b180b9c0ca13ea3d1170b9cc7a0d4a25317249c85a088a2db161c9c46a014a27d16f89a0ca0a9a114162d9aaf9f41a17615cf994a9fe6a02015d999da9e7ca0971480996e9e33a044148199609e4da007148199609e4da007147607701422165f0b7607701422165f0b901d9b2189231924f22110257b26f72870221425bf267b294e227a24bc25c5296821d122bb24d429e520aa200623702a70203d1dad206b2a7f223d14691b502ab527129c270f562a732c489e08995429052eb6a0c29ee229ba2d52a2cba17729112c03a422a437290028eca4c1a474294ba127a5f7a4c228d6a8fca4eba4272863a665a5c8a5bd2783a24ea57aa5b8261fa4e9a5e2a5d02694a3d2a5d2a51b264ca3bfa542a67b25d9a2bea586a61d25caa2bba5fca69f242ca3c2a5efa64e24cda393a51aa7ed23c7a277a549a72d2370a295a555a7d52200a397a582a74122eea29ba592a78f21a5a24aa58ca7e320a5a134a5a7a763204fa157a5c3a75b20d9a0f7a466a7aa1fa3a08ca4eda6861e2ba068a46ea6c91d40a056a46da6881d30a04ba464a6551d20a04da439a6211de79f45a41ba6ad1c829f1ca4d8a5641cc39eeca389a5151c139e7aa33ea5841b749d13a3eea4f51a379db2a2aca4701a189d61a277a4001afc9c1fa246a4a219bc9cd1a111a44c19759c85a1afa3bc18289c38a146a36f18599bcaa0baa2be179f9a59a0faa10717c2998f9f27a12c166599c49ec6a03e155a998d9ebea0c0145199cc9ed9a02915ec99219f06a1bb1467981a9f5da1cd14629a719e35a08514629a719e35a08514500ff312c916ff09500ff312c916ff093b1fe3211f23d22359223c259526212914222125d426b529d7212c243926c929f32033220625eb295f1f2220dc22132a661d031d01200e2add1fe316c81b272a7022949a908f592a2829afa0129d3a2a2c2de3a1a1a0ab29022ed2a209a37729e12c47a47ba481291529c2a426a52a29a6a17ba563a5fd2888a992a58ea55d28f2a4f6a464a5bb26fca128a5dfa5392652a3dea506a67226c0a292a5fca5b4258ea28fa508a64c25b3a289a542a6e624dfa276a57aa67a24d1a14ba5b1a60324c6a15ea516a7582303a269a539a7e3228ba280a543a7642296a25aa567a7cb218ba127a524a74a2189a122a550a7ff2034a107a55ea7a32070a10da53aa75420dea0e9a418a7b21f79a0d6a4e6a65b1f30a0a4a488a68e1e55a063a45ba6051e3ca03ca414a6671d02a009a4d6a5031d7a9f08a4c2a5bf1c4c9ff3a3a9a5801cd69edfa388a51a1c839e99a35ca5bc1bff9d2fa306a50f1bcf9dc2a2caa47f1aa39d69a290a4061a499dfda149a48219209daca114a4ec18e19c5da1bda39c188c9c2aa15ba363185e9ce9a004a32c18239c7fa07da2a4179e9b24a0fba1a016939bdf9fa1a13c16079b949f5da15515b69a989f51a14a155f9a429f1ba17a149499089ff3a08714c599ab9e9fa0c414c599ab9e9fa0c4140000c7137316a3080000c7137316a3085e1cbf2098226423d9214e25102721292c21de24ae263229fe203524bd2579296620dc22ff24b429d01e7320e322e329141c4d1cef1ee929541aa88d4315242a791c539b64989d2916235e9ff29cbe29bf2af2a101a0a229f22da4a27ea11029a32d39a471a35829c92a9fa492a40429cb9c33a5dba4a9286da97aa5bca53f284fa53ba517a6dc2691a34aa5e2a55b26aca3e5a53fa651261aa488a557a6a92577a3baa5b9a6562500a3ada5a7a6ed248ea26da5d4a64924f8a171a59ca6f823dca171a509a75e23ffa167a522a7be223aa23ca542a73422cfa13ea519a7c821b5a128a536a76521d9a14aa599a7f620e0a164a594a7b3205ea11aa5f6a6222099a09ea46ba65c1f56a08fa499a6c01e58a08ca4dca6581e44a075a4baa6091e1ea045a460a6b21df39f2fa40aa6571dd79f27a4fda5161da59f2fa4f8a5a51c1f9f1aa4d5a5621cc29ef8a3a0a51a1c049e81a352a5761b6b9deaa2e2a4a41a0d9d64a284a4021aff9c1fa232a4a219ef9cc9a104a44419c49c6ca196a3a718839c18a13ea35418469cd6a0eaa21218c49b7fa0cda232171a9b52a09da2d616839a1da091a27316639af39f22a2e915309a9c9f6fa1a915239a299fcda0c0149e99a99e76a06b14eb99859e6ca02814eb99859e6ca0281400009c136116650c00009c136116650cb61cf220c8224c23dc205625c326f428da20e524752612299720d723972537292220412299246029bc1ee91f38229329091d061bc11ea129de193d8d021ab1295914699c4198ba29491bd59e349c5429532517a144a07b29722cfda2ffa21129192ed8a348a4cc28e42b9ca4f4a4bb28ada1fca403a541286fa8fca44ba5bb2794a285a471a51526a3a16ea51ea6aa26c7a29ea533a62626eea279a539a65a2519a381a524a60525a2a282a569a6ae242ba240a552a63c24f7a137a537a6ca230ba224a53ca61b23e0a1f7a46da67322b2a1eba469a6dd217aa1c4a488a67d2168a1e3a4aea6382121a1bca47fa6b020dca08ca44fa64120c0a075a465a6bc1fb7a054a429a6131f87a04da413a6821e55a037a414a6fd1d3da03ea412a6d61d3fa03ba406a6601d38a040a423a6691d18a04ea43fa61b1da29f49a434a6c11c119f21a4e1a55b1c849ecaa395a5031c139e6fa345a50b1bc69d1ca3fea4841a699dc0a2aca4fc191b9d48a268a48219ba9cdaa12fa4d518789c7fa1e6a37d18289c27a179a32a18a49bc4a0e3a2b517f79a76a062a224178f9a32a0c2a10e172c9ad29f52a14116069a6c9fffa0e015459a169fcca09c15429bcc9e81a00e150a9c969e6da00f15009d399e789f6e12009d399e789f6e120000109022901f110000109022901f118320e0242f271f2791218725682774284121b324c326cf283c20e723d2250829331f0322ae243429e81db91ef9216729021c8f18581d7f29c31498989a8e8a29f4888c9d6d9c6d298194cba04a9f11297a1c67a1aca1e728522843a316a34729422d14a45ea49428282ca5a4f3a4af28d6a23ea598a54b28dba745a58ca55327c8a18da4b7a5f82536a232a5a8a53f26e5a127a5d1a5a62514a220a5f4a520250ea23ea51da6e42412a243a50ca69224fca12da50fa62d24f4a1fba4faa59b23c6a1dba40ca6ff227fa190a4bca561226da151a495a57921eea034a4b7a5272161a15fa4c5a5c72014a187a450a67c2005a18da451a61320a6a071a427a6781f56a040a405a6271f22a01fa4e5a5801ec39f1ca4e3a5411e899f07a4daa5061e799f10a4d8a5811d659f06a4cca5321d589f03a4c4a5e01c769f05a4c6a58c1c789ffda3b5a53a1c169fd7a38ea5b41b429e4fa342a5ee1a929df8a2eea4631a459dc0a2c6a4fc19fd9c5fa281a49519e59c05a23da42c19d19c91a1e7a3c7187e9c2aa138a364184d9cd1a0a4a2c917fa9b75a019a23517469b22a08fa1af16b39aa39f19a12c16869a2f9fcca081156d9ae29eaaa09e15579aa19e76a031153e9a7f9e4fa009156499f89d1ea0ad146499f89d1ea0ad14ec14361aae1c8313ec14361aae1c83138a212f26de2775274021ac2531275f283c22ad24c22681285220a1231825e628091e0821c722fe28d01ba91c8b1f17297518fd8c06181b294912ae99d0941729528f3e9d3f9bf828299842a0739f1629a7985ca2c6a11929171b5da2f9a2b228a8297ca398a35e28712ce7a365a4d5274f9fe0a43ca5162882a5d4a4d4a4002764a106a5c2a5752631a218a591a500266fa105a57aa56125f8a107a5c5a5e924f8a12da5fca59c24a5a1ffa4e1a53a2441a1d0a4b3a5b82324a1ada4bfa5162323a197a4aba58f2257a162a4c3a5022229a133a47da59121eca043a4a3a53a21c3a048a4d6a5f52065a064a40fa686203fa058a413a6372014a038a403a6b41ff09f22a4b2a5161fd89fe2a374a5751e9a9fc5a360a5aa1d3d9f7ca347a5761de59e81a35ca5011da59e7ca381a5bc1c059fbea38fa5c21cbf9f18a4aea5771c499f35a4eca52f1c909e21a411a60e1cf89dcca3afa54e1b819d50a343a5a01a4a9de6a2c9a40d1a069d23a24da4a419cc9c9aa1f5a31919a79c39a162a3b318679ce6a01aa36918229c90a0a9a21c180b9b2da025a22b173d9aaf9f6ca199169599169fd8a026164999ab9e7ca09115f2985a9e43a05b15ff98279e08a0fa149e98e09d00a08c1490989c9d799fdd1390989c9d799fdd138e15c919461c96148e15c919461c96142622d7255c275d26cf20f525f427d727a820312508273028ed1f8a2344256528a11dd9209922a628f319a519381daa2841133f98428eaa285a8e649c5c999328f294169eeb9cad28d998dd9f209fb2287e9a4ca192a0ba281e9a2ba29ba14528af1a0da3d5a2cf27792695a4bea4c827b29ed2a4e1a4432779a3caa33ca397255ca0eea4b8a53f2655a1b3a467a54c25d9a0d1a470a5ee24fea0d5a484a5802418a1b0a45fa52724eea099a46ea58b23c6a076a44ea5eb22b1a059a442a55a22a7a02ea43ea5dd2198a00da45ca5a02175a0d5a323a531217ca0b3a317a5192175a0fca343a5dd206ba01da498a59d203ba01da4f1a53e2010a0c5a38ea55c1f7b9f2aa32ca5a01e029fd4a2dda48e1db89e8aa298a4da1c709e5ca287a4b81c739eb3a2bea4a81cc29e46a322a57d1c1b9ffca39da58c1cec9e1da4cfa5711c859e2ea4f0a57a1c1f9e0ba4cfa5371cec9dbda382a5f51bd19d12a31ba5f51a9b9da7a2dea4681a7d9d4ea28ea4bc19079dbfa13ca42d199d9c49a1cda3c218469ce2a016a32618b79b7ba068a29d170e9b0ba0a3a19a16579a4c9ff4a00516ff99c19e97a058151c9a7f9e55a032151f9a509e2ca0d414279adf9dd39f981423993e9d319f4b14b399ca9cef9d1c13b399ca9cef9d1c130419ae1b6c1dc2100419ae1b6c1dc210f3208225f726cc254a2191256027492737203b25fb274c27f31e19243a26f5274a1d7b1f2b221b281719378d33185b289511969cfe9a52283588709db89c42284293b79d4a9d2f28b296a49ee89d2628d49905a08d9f3228199cfda034a12b28719d2fa224a2c5271e9feda3eaa2302724a32ba4d4a4c52511a2e6a34ca5c024b89f61a456a5e724e79f8fa40ea5aa246da082a41da54e2493a079a4fba41524a8a08da426a589239ca05aa41ba5fc22ada05aa437a57422aca012a42da5c42172a072a3b5a44b213da0d9a27aa4e420fb9fc2a267a4c720779feaa263a4e320a79fe9a332a500212ea05ea4e9a57f2049a02ea4bca5d11f42a0b5a338a5e61e0e9f4da268a45c1db19ebba1fea33c1d659e4ea1b4a3a41b159e52a17aa3a91b309eb7a10fa4321c539e8aa2a1a4741c419ff9a399a5a81c5ba081a428a69b1c07a080a414a6871c509ec7a367a58c1b809df7a2fda4741a449d97a2b1a4e819199df1a142a44519cd9c83a1f5a31219769c32a173a3ba18469ce0a0eea26f180c9c9fa094a20318999b56a01da28717e59a03a05ea1f616389a3f9fcba05b16cc99c89e97a002167299619e4ca0b7151299e89df79f6915f798919d679ff614a4984f9d3e9f081568981b9dbf9e061568981b9dbf9e06152218f7185e1b02142218f7185e1b02144120192569264525e21f852567276526d6200026e32765267b2072241f264a265519e61674181f267913ff9d6e9bdd26fe87909ed99ca327c687059daf9bdd27ad92649d779b03286d96709e0e9deb275298fb9e6b9ef327169a12a0b29fd127369cbea073a0bf26f49cd0a1e5a1a625339fa0a316a4852578a019a4b7a4f3244ba0ada469a501258ca07da414a57d24a8a04aa4e4a41924bfa031a422a57623a0a02fa4f5a41b23b3a041a4f2a468228ba043a411a5fd213ca018a4fea4602112a09da393a4d42031a0b0a21da4602000a0bfa111a30820c59e49a1a1a22120ea9e17a3b7a4172193a085a41ba6012149a054a40ea64a20229f91a39ca5801fc99d0aa2b9a45d1e5f9e12a133a3431d979edb9f0da2b61bfd9d949f24a2bc1b669d65a039a25b1b819db7a1fda3071c629ef9a3a1a52e1cda9ea8a47fa6471c809fd5a4a8a6341cca9f76a411a6f51b209f88a32aa53c1bf39d6da269a4521a009db1a1c1a38919899c1aa1fba2f718399cd9a09da27518269c9ca056a23218029c67a01da20118949b38a0d7a153172d9b01a094a1f316b29a929f4ea1a4162b9af09ecda027169d99479e6aa0af152d99ab9d46a0ff141999419d05a07e147d98b79c2ea0b0148d98039da09f2f128d98039da09f2f12ff19da19ac1c6913ff19da19ac1c6913d620a7238524b024b01f69225b25042549200c2652287b25e6202827ea28ee267c9a5ea49ea597240595eca186a2c024ad0ff89b829c9b254706d69acc9afc258b8ffb9ab89850264a941a9bd698a12660969c9b2698e226ac98a39c97980427cc9ae29e689d3a274f9d4da23fa33a26289f19a482a453257ea04da4bca4d9248aa027a498a4722419a004a470a41b24bc9ff7a378a4f723af9fc6a389a46f23c69fd7a38fa4d922c19fbba3a0a47522e29ff5a3b9a4f32102a0faa3e0a48b21c49f9aa3b9a4cb202b9fcca24ea42b20ea9eaaa123a3dc1e719e1fa0eba0091ff39ee8a121a4a4215ca17ba50ba7fc20a89e7fa272a4aa1e729f88a24da4401e8a9e19a14fa3441db19d52a042a2601c449d419e54a1221aff9d719b4ba0bd17219c3c9cbe9f0d18939cf7a094a29f1a169f6ca4e1a52f1d5ca090a571a7d21d27a058a51aa7201dc89f78a426a6251c359d2ba37ea5d01af69cb6a12fa45e19449d7da1d8a31919b89c37a1c9a3d918659cdea02ca37a18e49b84a075a2eb171a9b47a0ffa123178b9a1aa09aa1d7160a9a5d9f0da1e3157d99309e7ca00f15af98cc9d41a0ca140399a59d21a07714e198719dfb9f9b14c0983b9da29f3c1495981a9d959f9914a697cb9c4b9f2614a697cb9c4b9f26147286b693b19426167286b693b1942616741d4e20a9214b23871c74201d222f24551b201d8f2033228c18551c141e2320bc1c4920c621a5287715b1194f1d3b25fd14bf16011c052586125f1281190f25840e3809c91704256e850d9050161b2542911d95c81457259b9148943618f025649765982e18d526879da2a2e3a2f024c89da5a35aa441243e9d4aa215a31824c49d5ca20da3d923239e82a275a3a2238e9edea2e8a35723089ff5a20ca4f5223c9f25a338a46922779f1fa350a4f821869f3aa351a4af216d9f3ea379a44f21629f50a39da40821739ff1a237a48620779e47a2a6a301200e9ee5a1bea3391f639cbd9f82a1401c4a9aa89c4d9fe118c59dbca01ba3c71c979d17a11fa3231dba9c89a05fa27c1c709c29a0d6a14b1be39c8c9e8aa17f18519d3995459c39158295191cfa1caf10579ccb9cb29fc41241a2b4a671a8261e01a0d6a5e7a7151e609e5ea4cba5961c5a9ed9a29da46a1b9a9eeaa10da4131a009e55a13da37a19d89cb9a063a2da18679c60a0f7a18c18099c29a0c0a12318c99bf29f8ba1e7178a9b9d9f5ea13c17329b3b9f1ba1de16cc9a949ebca051164d9a339e6fa0f415e099f19d32a081158e999b9df19fff14f698359d939fb214c498fe9c199f161428989f9c229fc01347979c9c059ff91347979c9c059ff9130000e586768688000000e58676868800801bf61ea4203221301c492091224d2367198d1c7c1e1d21a3106d154218ac198318c21cc91e20228c193c1cbb1f9024c1169d162a1db2247913de08261ad524230c4e94e610cd2461925599cb95d224c496d29b229ba724ae980e9dfe9c67241e99af9dc69d41225199399eb29e87213b9b0da034a0b422649c8aa081a03e23ac9cd1a004a1f522109d11a182a18a22b89d8ca11ca24522119ec5a17da2c521609e0ea20ba3a321869e27a23ca33421c99e3ea283a3ed20e39e56a2aea3ac201f9f61a2caa366204c9f5ba2f3a31a209e9f4ea215a4d71ffc9ed7a18aa3611e309c33a0f3a13c1c919ab39e0ca1a51a369c2a9f2fa11a1b5f9ccd9f8ba1561b469cfc9fd0a1621b949c64a05aa2721be79c7ca0aea27c1b929b5f9fb5a1dc1a1593c6154e16c6157d18ad246625d09c07a462aa27acd721799cdea2b7a4191c6d9d39a109a40e1aac9cd5a0ada28a190d9c96a05aa2fc18439c53a002a27f18e99b12a0bca13c18d09be39f9da11a18839b809f58a1cd17529b309f33a17a17bc9aa29ed5a0e716249a389e75a02f166c99c29d27a0751529998c9de79f4215e298419d779f0915b8981b9d3a9fe6149d98f59c0e9fc114a198d09cda9e711451987b9cea9e8f140998109c049eb6110998109c049eb61100007c80c0021b0800007c80c0021b08951cdb1e08216621ae1a731e5b20802231171b1be31ca620df15e71ad51c4e1d231c4c1d7f206e223919d21cdb1f2b24961644184d1c4d240414c8112a1872245f0e028f92107e24b38e6598b3936e24d394729bee996f241298d69de79d1824cb98be9df69d62221398aa9c289ded203f9ae89de09dd721d99b9e9ef99ea521629c659f2aa06321e39c10a07ca03a213e9d67a003a10a21919dafa057a1ef20e19d0aa1b5a1cb20379e38a134a29b206c9e7da1a2a28520949eb2a1daa24920739ecea129a31420209ed6a144a3871fc69db7a13ba31b1fb59dc8a159a3831e999d8ea10fa3df1d789d1ea1b7a2281d0c9dbca070a2791c729c82a051a21c1c2f9c57a04ea2a31b309c3fa050a2791b639c40a037a2181b609c1ba003a2571ace9a099e4da0c318cb908793ad94050d1e8d9291a494bb021c9a619d869ffc155a9c679f03a1cf183c9c249f1ea19518889bdc9e0da10118209bb09eeba062173c9baf9ee4a04b17fe9aa49eb9a0d6169f9a699e9fa09a16349a509e6ca02016cc991d9e43a0ef154799ce9d12a05b151099559d579fec14ed98ff9ccb9e9d14dc98cf9c8c9e7014da98a99c779e2114db989d9c609ebc13cf98839c2b9eb4129398629cfd9d59134b98219c609d50134b98219c609d50130000b5119614bc810000b5119614bc814c1b961e1920d420b318a91c4d1e0721a616d21aeb1c1d205818581b121dab1f1119971ca21ecf218f18871b421e1a2302165a183f1c7c23f7124a13e6197b23de0f4d886a1698235f8b22966290e023e5948f9a7a99ea23fd97db9cdb9c0623db97d09cec9cfd21ed978d9cef9c74217199919dde9dbe21639a4d9ed69e9e21029b249fbc9f5421de9ba19f46a0f0201b9cfe9f92a0bb206c9c4ea0d1a08c20c39c92a066a15520149dd5a0cea12220499d11a12ea20b206c9d2aa15da2ab1f789d49a1b9a24c1f829d52a1c5a20f1f9e9d67a102a3911eb89d85a109a30c1e529d64a1efa26f1de59c04a184a2f81c7f9cb8a033a2741c2e9c71a000a20d1ce89b46a0eea1ac1bb69b16a0c2a1151bba9b07a0aba1de1ab69bc99fbca1651a019cd29f8ca1241a9a9b419fe2a0d5181c973f9ce89d4d154194279a7d9d1a143e99629cef9f4714c699519d34a0fa146b9a229e94a0a816ca9a439ec1a0a016c79a239eb5a06916b29af69d80a02616939ad89d72a0f415a79abb9d58a07b153f9aae9d5ca05f15cc998b9d4aa0f8145f99789d2fa0d914f3983e9d0ea0a6147498ee9c929f22141e98a89c1c9f5d13fc975a9ce39ef612f2974e9caf9e6412dc96149c019f0e12c296c99b219fd613c296c99b219fd61300000000000000000000b5119614bc814c1b961e1920d420b318a91c4d1e0721a616d21aeb1c1d205818581b121dab1f1119971ca21ecf218f18871b421e1a2302165a183f1c7c23f7124a13e6197b23de0f4d886a1698235f8b22966290e023e5948f9a7a99ea23fd97db9cdb9c0623db97d09cec9cfd21ed978d9cef9c74217199919dde9dbe21639a4d9ed69e9e21029b249fbc9f5421de9ba19f46a0f0201b9cfe9f92a0bb206c9c4ea0d1a08c20c39c92a066a15520149dd5a0cea12220499d11a12ea20b206c9d2aa15da2ab1f789d49a1b9a24c1f829d52a1c5a20f1f9e9d67a102a3911eb89d85a109a30c1e529d64a1efa26f1de59c04a184a2f81c7f9cb8a033a2741c2e9c71a000a20d1ce89b46a0eea1ac1bb69b16a0c2a1151bba9b07a0aba1de1ab69bc99fbca1651a019cd29f8ca1241a9a9b419fe2a0d5181c973f9ce89d4d154194279a7d9d1a143e99629cef9f4714c699519d34a0fa146b9a229e94a0a816ca9a439ec1a0a016c79a239eb5a06916b29af69d80a02616939ad89d72a0f415a79abb9d58a07b153f9aae9d5ca05f15cc998b9d4aa0f8145f99789d2fa0d914f3983e9d0ea0a6147498ee9c929f22141e98a89c1c9f5d13fc975a9ce39ef612f2974e9caf9e6412dc96149c019f0e12c296c99b219fd61300000000000000000000000000000000c0162e1c411da41667222622be24e9250124d32047229e266e251c20bc2148263f278b1e142065276c28521cbe1d002857299e18d91a2a288b29968ef30f4528ff28859c5f9ca726012915a085a08e24fb273ca2dea1532a6e25faa078a0b72a4521aaa5b1a5222b89a1fba6d6a74428cea228a57da6da2625a474a437a572266ca524a324a49025cca442a2cea2622490a32fa412a4082221a56ba51aa318a3d0a52aa71ba551259aa506a947a87c2a45a2e0a591a66f28afa2d7a352a2d02827a545a41aa31f27c7a456a9beaa199ecea146a80ea98316ac9dfea3eaa4b91c459c89a12fa4571d639dba9efaa00a1eba9f44a420a6341dc79e26a497a5631d579e9da2cda4b71c659d00a22fa4471c709dd7a121a4011c239da0a114a49a1b359d44a1cfa31f1bd59c10a167a3c01aca9ce5a018a3701a5a9cb5a0eda2c819269c8da0a2a24919e29b76a056a21e19779b56a012a2b118299b27a0fda17018259b02a0b3a13b18199bb89f67a1ad17c29a5d9f3da13b175d9a139f2aa18816f499de9ef7a05716c299e19ee2a0f4158399bf9ebfa0c5152a996b9e53a07e15c398049ea39f16159098cf9d7e9fea148a98b49d7e9f90147698a99d8c9fc9147b98709d359f5a14ac97e99cb39e0a138098d59cf19dee120000000000000000c0162e1c411da416c0162e1c411da41667222622be24e9250124d32047229e266e251c20bc2148263f278b1e142065276c28521cbe1d002857299e18d91a2a288b29968ef30f4528ff28859c5f9ca726012915a085a08e24fb273ca2dea1532a6e25faa078a0b72a4521aaa5b1a5222b89a1fba6d6a74428cea228a57da6da2625a474a437a572266ca524a324a49025cca442a2cea2622490a32fa412a4082221a56ba51aa318a3d0a52aa71ba551259aa506a947a87c2a45a2e0a591a66f28afa2d7a352a2d02827a545a41aa31f27c7a456a9beaa199ecea146a80ea98316ac9dfea3eaa4b91c459c89a12fa4571d639dba9efaa00a1eba9f44a420a6341dc79e26a497a5631d579e9da2cda4b71c659d00a22fa4471c709dd7a121a4011c239da0a114a49a1b359d44a1cfa31f1bd59c10a167a3c01aca9ce5a018a3701a5a9cb5a0eda2c819269c8da0a2a24919e29b76a056a21e19779b56a012a2b118299b27a0fda17018259b02a0b3a13b18199bb89f67a1ad17c29a5d9f3da13b175d9a139f2aa18816f499de9ef7a05716c299e19ee2a0f4158399bf9ebfa0c5152a996b9e53a07e15c398049ea39f16159098cf9d7e9fea148a98b49d7e9f90147698a99d8c9fc9147b98709d359f5a14ac97e99cb39e0a138098d59cf19dee128098d59cf19dee12520af215b717dd94520af215b717dd941d22dc245126b4250024e3234425ba26c62528221d243c26af28d2210623be266a2a49212d23d5262a2b2c21e923ba26542b801f1f228226092b701cd11ec726c3297f9087916e28db28639d3f9b0e2a4128bd9faf9e7a2af42112a45aa48129131481a85fa9f5276da141a752a8412743a7cea56ba6f925fba5c0a27fa23324e1a534a0429dad1fc4a5a49f039a651582a50aa142186d1bf5a3efa2d39e692581a4f8a4baa5e728cca201a588a5b629e7a01fa2e0a1cb2966a138a3aaa2d5285da2f5a7eaa86c224da4eaa8aeab6d1553a441a8dda9111a34a145a608a956122ea0a6a53ea8971966a1b3a6d4a86719529f33a6b8a8151bc89f57a5c4a79b1b879fa1a42da7421c28a031a419a6891c9e9f43a335a51d1c2c9e87a2c2a4651b319d27a29ea4be1abf9cbaa14ba4901a639c79a103a4331a819c28a18ba394199c9ce7a0dda23d19af9cb9a03fa23819a69c7fa0f6a1b018799c42a0b4a162182c9c12a080a12518999bef9f67a19c17ba9a959f34a1d6167b9a669ff6a09816249a329fcda00416aa99ea9ea0a0c7156099809e6ca070159998139e23a05a156f98a89df39fc81452987d9d8f9f63143398529d199f4e146098279da69efd12ad97e59c6d9ea51267978d9cb59d081467978d9cb59d0814de120f185818e313de120f185818e3138d23db242b261e267a25ca245c268d27f4257924b225d9271e287e23a8240d283c292e2209242b28212b9f201f229228272bb81e4e2118290b2b701a191d1d292c2ae08f361799293829fc9aee90ac291528b69e6c9cdf2970249aa393a255290f947aa6bea6e3285ba284a6aba60128d2a461a534a55c263ca793a47ea45a25baa6baa38da3422476a5bea237a18f237aa47ea2e0a0552345a4a6a373a0cb2532a41ea487a21028b5a316a4a2a2252855a3c7a3b7a272276aa284a4baa44726fda1efa51ba7122531a2eea6ada8d62314a25ca70aa9002276a122a708a9d71feea009a75ea9171d28a1bca78ba9161b2ba13ba76fa9ba1c0aa114a65ca86f1ca8a00fa53fa7341c11a075a47fa6d91b129f08a4cfa5821b879e93a377a5571b009e28a347a54a1bcf9dbca2e9a4871a519d36a28ba4401a089dc7a12aa4be19ac9c74a1bea36b19569c3da141a326191c9c04a1f3a2a018049cb5a082a25818e49b79a03da21518e09b47a0d6a1b717bc9b10a0ada15317349bbd9f43a18b16999a8b9f06a14f16239a3d9fbfa0bb159599de9e96a06e153499909e52a031155199379e1da0eb144f99be9daf9f55143d99909d3f9f32141e99519dd39e9e136598ee9caa9e9c130099239d629ed8130099239d629ed8136c01198193067d056c01198193067d05a524b3251a273928332498258927d828fe240d25c5262f29de25f1234e25dc2858282823e2245e29aa294a216f23df29c02ab01e81202f2a322b6a1af31c5b2a8a2aa18f17177e2a5129499c1297402a4228a0a0bd9f452a7b25c3a369a395299d200fa51fa50029279dbfa580a5ad286ba52ca6f3a52b28aaa7efa5a2a5ef26f7a7a5a50fa570260fa747a5e7a4472689a549a595a4af259da52ba542a42f26fba440a55aa4082782a422a5f2a4e12644a43ca55ca539268da394a51aa663251fa3f0a544a79e240ba4a1a65ca8cf23e0a3fda6fca8c021dba24da70ca9322065a270a766a9811f1fa2b7a7c3a9321f5ea145a776a90d1e28a15fa6bfa8d41dcca0c9a51da8751d78a01ba52ba7c11c1ba081a44ea65d1c689f0fa4c6a5761b7f9eb7a385a5011b099e27a335a5d81a7f9da8a2e2a4601a2c9d46a293a4ee19d09ce2a14da47f19b29ca1a100a43219869c61a182a3e918699c38a124a37718359cfaa0dda23518f59bb9a08ba2e717aa9b86a04da27b170e9b4ca008a207176e9a0fa0c0a1a2161a9ac39f76a1f015a099539f08a19a151499d99ea1a03d15d0986c9e2da0f814c298209ec69f78149c98dd9d789f53147198979d009fd513e097129da09ed5130898ed9cb39e22140898ed9cb39e221452054a0c730c8f8152054a0c730c8f813324d1256c2761289623c42577272c2958245a25e52690299c258124c2259b29f0261b2428250f2acb28a421d023a12a4f2a3a1f6621a42a7f2b131a421fab2a012c9e95d119f72ae32a169df796882ade28e9a0889e5f2a562505a3a1a1d529871f94a422a44d292c9d34a5d9a4d52860a4aaa59ca57a28c5a6afa575a52428a9a7a8a588a530273ea69ca5a6a5c126c7a465a535a58726c1a443a5efa4692642a498a508a55a26f7a390a5a1a5be25c3a3d4a543a64a257ea308a625a7cf243aa345a607a86124c7a3bea685a8a223f7a3f7a6eca895229aa2d6a665a90321c8a101a72fa91720d7a1fba6e0a8421f93a1d3a6c0a8ab1ea4a179a6b8a8881d69a1bba570a8031d76a035a581a7ea1c12a0f8a4f0a6101da19f96a499a69d1c4f9f26a40ca61f1c129f78a345a5f91a869edea2dba46b1a4b9e8ca2a1a4bc19d49d3aa26ca46419429d08a248a41919c19cbaa117a4c9186f9c7fa1bca38c18329c20a141a33d180b9ce4a0d3a20018c79b9ba042a28817349b49a0c7a1a016b69af89f60a129161d9a869f23a1d115c599369fdda085157099e39ea9a0451510999a9e72a00d15c998649e45a09d14a498499e14a04214b298149ee39fca134a98d29daf9f07133598649dde9e4e123598649dde9e4e12d004ec08310b6881d004ec08310b6881a024f1254727b8286b241126a227a029b0244e25a226f0293c251025c525652a422652241825ab2a3d28c2214223e62a8f29a91e5320622bd72a330f871b422b462b0f9c78900b2bd62a869fa19bb12a94298ba143a0612a942750a3f2a10a2a392265a4b2a38629b39d03a57ea42c2967a6a2a5cca4c328f9a7efa51ea57a2849a71aa68ba51e2881a50ca6c3a595274fa5b7a5c4a59826daa488a59da50a2609a5a2a5bda5a225f4a4e8a54fa668258da437a6bca60e25eaa353a6b2a76824dda252a61ba8c52388a261a64aa8062315a25fa68ea84e22a5a1a6a6cca87221a8a1e8a6e7a8d8208fa1dca6e4a86e2044a172a6c6a8721f0da1e0a57fa8691ec1a07ba553a8091e8da05aa521a8bc1d97a0eaa46fa7211d4fa072a4afa6d01cc49f22a459a66b1c429ff5a319a6261cad9e83a3a8a5611bfa9d18a315a5e21a899dbca2cda4751a499d8fa2b5a4261a059d4ea277a48f19b69c0ea242a43919749cb6a104a4de185f9c75a186a39918399c30a1f9a226180e9cf3a098a26917a19ba9a034a2fb16499b73a0d2a148169f9a37a07aa1f215df99cd9f12a182158c99419fb1a0d0148099c49e68a08a144799779e37a056145a99579ef49ff3132c99039e01a00814d598c29d909fb514d598c29d909fb514fc077404da077484fc077404da077484eb1c971e541fe121ca237725f3264929ae244725fe26222ab623b524ea25712a192447246c25cb2a6325772249245b2b5827ce1e8e21e22b5629ec0e1b1e4c2bd52a139a4b901b2bdd2a32a0cf9de72aff2950a267a1952a492862a377a2112a66257ba422a3ad29e61a10a529a48b29d4a4cca56ca5d428dba62ca6bfa55c28cba50ea6f6a5ae275ca44ba639a62f27f7a354a6ffa5ad263fa447a658a647269ca480a695a6ff2582a45fa6caa667256aa48ba636a7f72419a495a68ca7502455a4a6a6e3a7dd2368a490a642a8072343a353a651a8e72120a279a680a87a21f0a199a6b7a81421bba18ea6bea88220b6a142a687a89b1f7fa1bda52ea8ad1e3aa18aa502a82e1e4aa18fa502a8091eb5a063a5d8a7b31d18a0b2a4aba6aa1c07a06da414a64a1c439f2fa4e7a5011cd09eb4a3bea5491b7c9e3aa381a5c11afc9df8a255a55b1ab19d9ca2f8a4f6192b9d37a290a47a19ca9cf4a151a422197e9cb8a111a4a0185b9c85a1afa36a18299c49a139a32e18039c16a1e3a28917889bd5a07ea22a17429b98a035a26b16f39a5ea0d9a10916599a05a066a18f15a299739f00a1c9143899fd9ed2a07d144699dd9eb6a05e140899a99ec3a06013f098919eafa0a7134f996c9e23a0b3134f996c9e23a0b313ac08d2030505d283ac08d2030505d2836b1cd71d961eba208a22de2524274c2992235e251b270d2a14249824bc25392a9a221b246125b62a2822e721ae23fe2a9223301dcf20542bfe26aa8e1b1b222b4229dc9c4e903d2b8e2a07a0de9dd62a732aaba21aa19e2a0c2934a401a46a2a412640a530a50d2a0d1b97a593a56f29ffa4a0a592a5a728c5a6b1a5c3a53f28b7a52fa694a6ed275aa5bca649a70428c2a4a6a6f5a65b27e5a456a619a7562662a4a1a664a7fd2525a479a652a74125f9a327a657a7b5249ba31fa68ca74b249fa226a610a8b4239fa251a675a8e722dea27da676a84e223ca251a658a87a213fa264a665a80d21b8a259a667a8932079a227a63fa80b20c8a1ffa541a8871f60a1f4a53ca8291f0fa1baa50fa84d1ea1a023a55ea7941d4ba0c7a4fda60d1d12a08ca4e1a6bf1c959f4ca499a6601cec9ef5a329a6e91b489e9ba380a5051be69d2fa309a58d1aa09de2a2cba4231a449d9ea29fa478191e9d56a263a42d19c69c16a237a4de18a49cd0a100a49918839c9ea1a7a32a18459c56a12fa3d3170b9c24a1c0a209178a9bc6a061a28716ec9a63a0eea10016869af89f67a17415649a919f1da11f15579a5c9fe4a0ee142f9afc9e99a06514cc999d9e42a0c9135d996a9e3da0c31335995a9e34a0541335995a9e34a054132b0519019b0819812b0519019b0819814e1cef1d3d1ede20cd216725a92628292a23a4252a272c2a49229b245426792a5a214123ac25962a8b220c215223dd2af7211f1ed120662b0f25e514041bfd2a3f28099d3a969d2b002a49a0769e7b2a4d2a58a234a14b2a782905a462a3232a7727f4a4bfa4f429cb1d77a574a59e29c0a4a1a5d4a5d928c9a6bfa5bfa55528a6a4ffa562a6af274ca459a6e7a664274da486a6bea6dd26f0a369a6b9a63f26aea341a6f4a680258aa356a649a7062555a360a6a6a78d2433a351a6afa7d82305a338a607a84f231ca353a617a8a4225ba36ea63ea82222fba16ea6a8a89321a3a16ca68ba8fd2002a246a67da88420cba1f9a530a81a204ba186a5f5a7091fbca071a5bda7a41ebaa041a55da7f11d7fa0eaa461a77b1d35a094a434a7f81c09a069a4b0a6ac1cd99f34a40ba6641c849f18a4c7a52b1c3e9fdaa390a56c1bab9e83a345a5ef1a369e2ba30fa5771aee9ddea2e1a40d1a9a9d8aa2aaa4b319219d4ba278a45e19e49cf6a144a4c4188a9c9aa1fba36f18569c4ba17ca32518349cf8a01fa34917de9b98a0a5a2aa16cc9b4aa01da238161b9b09a0aaa1cb15cc9ad39f8ca13e15ce9aa49f33a10515b19a919fe6a0eb14889a669fa9a02514f099249fc1a03214ea99ec9e8ba05513ea99ec9e8ba05513b70ab50883090c81b70ab50883090c813e1c121ecc1eea20de22cc2560274e290924ba254e27582aea22d62425263d2a1e216d230f256e2a6220462113242f2b2f20401dae20522b6321630e631c3c2b3525d89cdc988a2b1728b8a08a9fb82a812930a3c0a1842a402965a455a3302a71272ba59fa4d4292821cda549a5a62935a461a586a57c28d7a5dea501a60f2899a57ca6dca6f72728a557a7e0a70628e9a40aa779a734279ea4caa694a754267da4a6a6b0a7c52573a48fa6cca74b2508a494a6e8a7ae2459a360a620a80e24b9a261a60fa88f23ada236a624a8fc22bba230a644a83f2245a2dfa5d9a78121f0a1bfa5fba7ed2094a1ada515a8862052a1c6a53ba8182027a19ba5f4a7b41f9fa056a5b8a7021fb9a04fa5dea77b1e03a132a5aba7e01dbca0d5a400a7641d51a0aaa4b9a6d21c0ea07ea48fa6851ca39f53a45fa63e1c469f16a403a66c1b909e93a372a5b71ae99d13a3fea41f1a769dd5a2d5a467193b9d9da2a6a40f19129d6aa27fa48718c89cfda133a42f18539c9aa102a4d317139c51a1a7a35817e19b0ea142a3ea16d19bd5a0e6a28b16c39ba1a0b2a23416659b6ba034a2eb15aa9a28a09da183152b9ac49f3aa1ca149d994b9f05a17f14c099199fb2a00e147a99d29e6fa092139c99ad9e99a0f9139c99ad9e99a0f9134916d818b816221e4916d818b816221ed21cf41ff91f7e21842265250e273829952295256e27082a5622a824fa25392ac4211923e3245c2a8d203b20bb22d92a8d1f2a1c2420252bba1d1a8eb718022b621f929c2d906e2b3f2499a0189d2d2bad2799a251a18c2a79281ea455a3fa292b2722a528a5e329a21ad5a5c2a5ae2942a540a5aaa5522886a437a55ba5a127b3a2bca5faa57627a7a37ca694a6aa27dca43aa6c7a6b12629a480a6d6a63426e9a373a60aa7992542a371a62aa716253ea350a615a79e2482a311a646a73a2499a3bea54ba78b23dca2b3a55da7c02272a2c5a584a726228fa2c4a58da79c217ea2a1a5c1a7e920cba295a5bfa78620d5a18ca5b4a71020fea04ba5cfa7a01f9fa010a557a7c11e93a0c3a4d0a6df1d86a09ea483a6721d7ea078a470a6201d65a06ca46aa6ef1c46a055a446a6b51c14a055a428a64e1cb49f31a4eca5101cf89e11a4a3a5991b469eafa35aa5021b979d3da30ca51f1a439dd5a2c4a4f419229d7da287a48819159d40a250a43819d39cf8a122a4a0188f9c9aa1a6a34b18539c3da130a39a178c9bd4a0a6a2ef16a79a52a0e1a14516d099889f12a176157199ed9ec0a0b014c699da9eb8a09714ef99329feaa0ba141d9a529f06a16d146099eb9eeda00714f59aa99e5fa07614f59aa99e5fa07614ed1721193c182b1eed1721193c182b1e021e3220a120a9217122662573272629912295256627602a672171241926292a64205222a7245d2a471e751ff821862a861bfa18e71c872a111c7c94458fae2a311b939d4f9ca52a1d1e08a1a7a07b2a9c230fa412a3d12a0f2632a45ba4bb294625fda421a56929061ae2a505a66f29a3a4c8a5c5a58928b0a4bba50da6fd2768a230a6b2a67a2733a3aea6c9a65627d6a33da6f4a6632664a32ba6aba6bd251ea31aa6f1a647251aa308a6efa6d6249da2c6a5e6a660245ca299a5cda6d3235ba2b4a54aa72c23c5a2c9a53fa7a12205a3a4a547a7cd21a9a292a561a75221e5a171a565a7ea2098a158a577a78e207ea143a589a73a204ea121a567a7a11f2da1e9a4f7a6111fc4a0e1a4d4a6801e7fa0b6a49da6171e6fa078a471a65a1d5ba058a428a60e1d18a02aa4d8a5a51ca29f16a4b8a52a1c7c9f05a4a3a5e31bf09ef0a380a51f1ba09ec5a35aa5b91a159e49a309a5291ae09ddba2c9a4ab19a89d8fa28ea44019499d0da24aa4ca18289dcda11ea47e18e49c7fa1c7a33718959c2fa150a384178a9cfca001a328175d9c90a076a28d16d29b3ca0f7a10516a19b09a09ca15a150b9bc39f67a1c914af9ab79f52a1aa14709a719f2ba1c513c499459ff0a0fe131e9aee9e95a079141e9aee9e95a07914e3132215cd15b21de3132215cd15b21d541d08204820bf213f227f258c270829c5215c254a27cc293d21a7241926f82961201023eb24282a3a1e742071225d2aa51a6d1ad41d612a8b15a2975d8fba2ad310059d6f9cb62a051483a01ba02e2a7e1b19a377a2482aa12115a4d6a341293f24c0a4c3a40e290f1cfea447a59f2801a3c3a531a56c28afa365a6ffa61628fba294a68ba7b027c1a2bca608a75f2732a3a8a622a7a826f7a35da612a7f025c6a32ca6e8a63e25c3a329a612a7dd2498a2f4a515a74524faa1b6a522a7802301a2afa553a7f52205a2b2a578a76722eea194a570a7f121dca172a53ea77f21b5a169a53da7e320aaa143a567a77c20a4a13da569a723200ea1f5a4cea6421f8da0a8a48ca6b61e81a0b5a4c1a6471e7ca0a6a4cba6d21d5ba078a4a5a6821d2fa055a456a6301df39f38a409a6e91cf99f35a4fca5771cce9f3ea4dea5461c439f23a4b2a5031ce69e07a48aa5871b489eb0a344a5db1ab59d22a3e6a4261a539d93a289a48a19249d33a247a42c19119df2a113a4db18e69c86a1b4a38318989c2ca177a3ef17429cdba033a35e17a39b8aa016a37316059b53a0e2a21616799a26a0eda27415699a07a04ba2eb14419ac39f70a1be14299a4d9fcfa0c5135f99de9ea9a0b313149ae79e8ea03314149ae79e8ea03314fd140e180019d11efd140e180019d11e2e1cd11fc31f3b2183217225e7260f2956214c250f27bc29ac201924b325aa2914208022d524f729381efb1f82221d2a251ce418c51d282a111808990a8f3f2a118aab9d449c612ace9176a0589fd829f88972a276a2d82932178da4aaa4b629411bdda469a5e928c29511a589a56328b9a283a581a51428f7a2efa5a9a6c72790a2a6a56aa6c326afa235a67ca6a226a8a24da616a7082694a205a6d6a66325c1a204a6d5a6e62493a2d4a5cda681247fa2bda5cea61d2430a27fa5bba671230fa24ba591a6bc22fba130a599a62e22b2a126a5c0a6cf2180a11aa5c1a641215ba114a5dca6d82003a1e2a4b1a66320eaa0cba4a1a6f91fb7a097a464a6dd1e9fa072a450a6881e87a058a433a6fd1d69a03ea40fa6791d50a045a40ca60e1d3da03ea400a6de1c37a045a404a6af1c12a056a424a6aa1cb49f55a436a65c1c1e9f32a4e9a5031cbc9eeca3a4a5061b509e88a357a5711a089e32a309a5f319a69ddba2aea43019499d6da26ba4c218e59c00a23ea465188d9c9ea101a41418349c33a178a38c17bd9bd2a0f5a2ec160e9b77a059a26a16a59a36a0b3a15316359ae79f5aa19d15139a929f0ca15415439a449fe0a00f15d69ad69e97a0d014f19bc89e71a0d914059c7e9e5ea0e112059c7e9e5ea0e112000025909d907208000025909d907208a621d225db27d2277c2275256627c02811212625fd2643292c2018241a266b29451f35229c24bf292a1def1d1221fa29ba1a3e14221a0e2af20f5a9a6598f4290394839ead9db329a99ad6a04ba07629859aaba157a22429bc9591a318a42b29ba9b5aa5e5a42129da9b75a54da59b289ca0e9a513a62f2840a13da6a4a60b2874a2ffa583a6fc26c8a1c4a51aa62926f5a1e0a5b4a69d2536a2d6a5bfa6352516a2b2a5a0a6d62426a2a0a57da671241ba25fa565a604241ea229a53da64723e0a1f4a435a69122a0a1b7a4f9a50d226fa195a4e8a54e2140a187a4fda5f3206ea1a4a42fa697202ca1bba47fa63c2032a1b8a45ba6961fbaa081a473a6e71e72a069a40ca6a41e1ba03ea4dfa5f71de39f28a4daa5bd1d9d9f24a4d1a5861d879f1ca4c0a5071d559f15a4bea5c21c419f14a4bea53a1c7c9f19a4c0a5ea1b939f16a4bda5611b1e9ff1a399a5be1a659e7ea347a5691acb9d25a3f8a4d8197d9dcca2cda47019309d7ca27ea41419189d1ea243a4be18e29cb6a101a46118909c3da164a39a17559cf5a0c3a21f17f39b92a053a28f16479b3ca0b5a11516ba9add9f29a1a515729a5b9fe3a05615319a119fb7a020153c9ac59e83a06514bc99969e63a03b144d99e79d22a09f144d99e79d22a09f140000bc975e976c8e0000bc975e976c8e1021832523272327f7211f268427ae286922a624b026d428a820ed231d254c29451e1e21e4226729991b561c4a1f8b29e716089433159729d60f7b9b179a91297894089f8e9e7b29e89921a105a15629419c2da3b8a2fc284d9d51a2ffa27228239c67a4c9a4c728529e76a531a59428c0a068a597a5ed2756a05ea5e2a5dc2641a2c0a586a6b9265aa23ea5d5a59d252ea28ca551a64e2585a274a585a6dd2452a27fa572a67524e1a14da54da6132480a12fa531a65f238ca10aa535a6c22278a1e7a416a660229aa1b5a41fa6d82167a18da40fa6452139a17ea415a6ea2006a194a442a69f20b5a082a448a61d2065a065a439a6ad1f51a04fa41ba60f1f21a03ea4d6a5821ef89f0ca495a5e71da09fd3a37ea51f1d6e9fbaa34ea5ad1ced9e91a34ca5801ccc9e9ca374a54b1cf19edaa3a8a5551c769f39a4f8a5221c4b9f44a433a6b51b909e1ea415a6fd1afd9ddaa3a9a5481aa89d6da328a5ae19479ddaa2c0a46d190a9d3ea23ea4e318b79caaa1cca36318719c33a159a307182f9cf2a000a39417b59b96a0aea20917c49a2ba01ca276161c9aa79f79a1ee159a99169feba08c156699aa9e92a0fe141a99649e53a0d6142499299e0ea07214c898f69dfc9f4c14bf98b59db79fe412bf98b59db79fe4120000f2908690048a0000f2908690048aa8201225c5265a26a121cd2535282c28ff2041252a277a28601f54232f25a428781d14200e22ee28ef1986168d1b0529b411cf99f8942029b5916f9d559d27296896f39fbc9f2129ec99f6a007a11529c79bf4a170a10729739cb4a28da2a428709a01a43fa470285e9dd2a4a1a4b4277aa02ca557a5f7263aa186a5c8a5ec26c1a0b4a53da6872615a142a5c3a560250aa124a52fa6ea244fa109a5eea57c2442a104a5b3a50b2420a1d5a49aa5612317a1b1a498a5c322fca079a481a53122d8a04aa47aa5b121c1a025a44fa56e2192a0fba342a5fb2071a0e2a317a5ba205ba0f7a341a57c2048a00ca4a3a52e2048a03ca40ca6b21f12a018a4d8a5f71e6e9f79a370a5021eff9efca206a5421dd69eb4a2b8a4921c939e91a296a4791c6b9eb3a2c2a4181cbf9e4fa32ba5ec1b259f04a492a50d1c0f9f2aa4c9a5031cb19e42a4ffa5cc1b2d9e2ba4dea5791b269eefa38ea5121b049e41a322a52f1ad29de5a2e7a4b119989d76a2a1a40319499deea14ca48c18c69c72a1eaa32e184f9cfda027a3a617cd9b85a06ba28f16f89a0fa0a3a1f315249a619ff3a07715dc99d49e9da0d214029a989e6fa0b514f899689e45a09214f399ef9de29f53144d99459d249f12144d99c89c589e2f134d99c89c589e2f1300006904cb0c3f8e00006904cb0c3f8e542145256827fc2545221426d127f527c7203e2546279027211f7523c2252a285b1d851e972197289519f5966915ff28580fef9ca19cfa288c88ec9df49de028a393f89ea79ebc28949809a018a0ac28db9ab1a093a09428819c24a265a29b28989d50a3b8a3f727839e67a4b6a40727c8a13ca5e0a5bb26bea04fa54da60f267da05ba523a69a25dba001a569a5c924dda0cfa478a53324c0a0d6a48ca50b24c3a0c8a476a56423dba0a7a482a5d022dba08aa46ea54522c9a052a457a58c2194a0c3a3f0a4162159a038a3a9a4b9200ea0eaa26ca49520c79fefa26ea4b72013a0d3a305a59f2067a079a422a66d2097a06da430a6801f5aa038a4b6a56c1e649fd1a2b8a4d61cb39ef0a139a4701c9e9e98a1dda3a51b7d9e83a16da3291b5d9eb8a1dba3d21b5b9e50a285a4d61b1e9fb4a368a5191c3ba075a40ba6281c18a095a42ea6ce1b889e10a493a5bb1a979d1ba30da5021a7d9d9aa2b3a45719319d14a240a4d018eb9c8ca100a46418a49c3da183a31a18659cefa00fa3a617279cb2a0afa24717949b62a033a2ca16f89a0ea06ba103164d9a739feca0d615c699cc9ea4a024155e99599e48a0db14fa98df9df99fdb14da98999d629f6d1460982a9d1a9f3b142798f79c8c9e34132798f79c8c9e34130000f79234947b860000f79234947b86fd1e4f24ef2520252f20f225fb270f2682210b2619289d264320d92375255d262b173b94208fc92649110b9e699b042801888a9d289c1e28dc90ce9dfd9b40285b942e9e519d4428b297499fb69e3728fd9830a00ca02728229bb8a0b8a0c127cf9ceea137a22f27589e9aa343a4172624a0eca480a5342687a0d8a4b8a54d25bca032a500a63225aea00aa5c7a5b724a1a0b9a46da53a24dba080a43da58423e3a0a4a477a51e23d2a0b5a48ba56c2296a0b0a491a5d52150a073a46ca54e211fa01fa401a5b8204da04fa37aa442207ea03fa2a3a3d31fcb9e71a108a3901fcc9ed4a103a499203da185a4e2a5a9208fa0e0a4dca61b20219fd1a3aba5c81ef69ea0a2a7a42b1eb49ecfa1f7a33b1dae9ee89f35a2061c639ed39f9ca1ac1b6d9d8da0fca1b41a429d95a18ba3cc1a339ec3a35ba5361bc59ea6a488a6191b529fe7a4c4a6271b08a085a41ea6d21abe9fb5a331a5601a999e86a25ba49019459dc0a1cca3d918ad9c2da11aa352186d9ceda0b9a21118399cada076a2b7171d9c77a026a25e17df9b49a0eba11317649b17a0a5a16816c49aa59f4ba16116349aee9eb9a08b158c99349e53a0121509999a9d2ca06f147f995e9dbf9fb213b798c39c34a04614b198109da69f9012b198109da69f9012a282158c878cba08a282158c878cba081e204b23c92434252d1f3324852558256f211f27af28ae2563205c25d126dc25c5999ba4eaa504256e938ea041a066255711509a129abc252b06009bf3993a26d38f369bf598bc2658959b9b4d991a27e097a49ce2996427689a799dba9b1b27d49c5ca114a10627e29e4aa435a53326a69f9fa466a557257fa07aa414a5cb2477a04da4c7a47e240da037a4d5a43724d59f28a4d2a4f523fb9f2ea4e0a480231ca031a4eaa40e2320a036a4faa47f2233a03da403a5fd2142a032a424a55e211da024a419a5c320f49fc9a3bfa471203b9ff7a272a4091fc79d14a1dca17d1e069dd09d3e9f6c201fa135a6e7a78821eb9e5fa3f8a41d1eea9faba2a7a47e1db49e8fa1f9a30e1dce9dc8a0baa29d1ca59d959f1fa2771bcf9db09ce99f4318fc9b7d9c979ee717999c70a01fa220196c9e08a453a59b1b09a076a54aa76d1c18a064a515a7291c03a093a428a63b1b659eafa3bba5491a819d27a26fa4fa18439d5ca1c7a38518d59c30a1aca31b18689cd4a03aa3a517d09b81a08aa22117259b41a01da25f16a09a09a0bba1b2151b9a429f1fa12d159d996d9e98a0a3141099f29d5ba01e140f99bc9d34a00514db98809dfa9fcc130a995e9d849fb312cd98239d9b9f28140c98d39c1a9f72130c98d39c1a9f7213000016907c8f0114000016907c8f0114231e5621c0221524a31d8d202b222824051d9d1f7b221e249e15cc928a1a86214f1cf11ea5206a281a181a1a0c1d6e258f151917881b1f253413a912bb19f424a60e3e89fa17e124cc8518905f16e724fa8f7f90ea1633252b92c58b1d1ae325b39a26a0379dc326029f8ea4e3a4d124679d06a3e4a3f023709d5da222a3e423d09d8fa256a3b823769efca201a47923d19e4fa335a42723569f60a367a49922889f64a371a433227f9f72a381a4b6217c9f6aa37ea47021809f6fa389a412217e9f69a39ca4d420799f67a398a46320799f29a34da41e20d89fe3a24aa4341f859dc0a030a2931ced834d88939787132c9c639e7ca09e1abb9d83a1b8a28b1cb19cb2a093a2d81b209d71a07ea2ec1add9d759f42a1f818b59b7f98499c1a17f7946719131c0a15ba9ae498c29c85129ea0e6a542a8681c76a082a62ea8031df19eb3a42ba6251c919e2da3dca4c01ac49e19a227a4bb190d9e5aa15da30719ec9cc6a0afa27c186d9c70a016a2f4170e9c38a0c4a18f17d09bfa9f98a12717a39b949f68a18816619b3f9f2fa13f16029bd49ee2a0e3156a9a469e72a07815cb99fd9d2aa0f4146199a09dbf9f7314de98359d459f3714be98069df09e34133f98a99cda9e65127697719c859e73137697719c859e73130000048d118d040d0000048d118d040dc31c3b2056212822d41c98204a227e239719111ccf1dbf20a311b2160719861ae119fd1d4e2095238319891c1a20cf24b316d116e41cd824ff1108898b19eb245d85b395c20af3248493199ab497da249396ae9c179ccd24a198439dea9c19241699cf9d0f9e4c21ce9a849fb59f2c22099c55a071a09c22519c7da0aca09f22c79ce1a012a18722769d43a1dea14d220e9ebca18aa20622549effa100a39321a89e30a24aa35b21c99e46a271a3ca20009f65a2b8a38d200b9f7ca2e2a34d203f9f91a208a430208d9fa0a21ca4e71fdd9faba234a4ac1fac9f9aa24aa4c51ef39db8a1dea3681dc49b20a0efa14a1b259c589f66a18b1a2f9cb59f7fa1b81a539c10a0eba1951aa69c7ba056a2a11ae19cc7a0e7a2c11a609c51a06ba20e1ba1960798b398e118a61cfc2623286f9842a41cabbbac8f20b89d27a43ba5521c6d9d66a1e1a39d19e99c00a1daa2ea18109ca3a06da28e18339c6aa020a22318b69b28a0c9a1ca17849bf39fb4a18a17449b899f6ca124172d9b4d9f3ba1d816aa9ab79ee3a0fc15169a439e7da095158299b89d23a0e4144b99839de19fb814fb98429d689f7f14f4980d9d329f5f14ae98e69c0a9f3e14bc98c39cc09e2c146f98859cd09e7c13db971b9c0b9eb511db971b9c0b9eb5110000ed816c05ed010000ed816c05ed010e1c621f82219021341a911e76204f225a16fd1a081dcb20f4160b1c021e171fd61ba41d9420da22ee18ac1c9d1f49241c169d17071c8124ba12320f09179c248a0b0992510a8f24aa902c99a09587246995769cfe9b7f241699ae9e739f04245498f19d849e3c22fb988c9dc79d9c217f9a569e2b9eba21d59b0e9f759f8621649cce9f68a03921d99c43a0b3a00d213a9d9da038a1e020939deba0bea1a920e19d2ba11fa287202b9e72a16aa252205f9e98a1dca23e205a9ec6a113a3fb1f529ef2a15ea3801f249eeaa172a3f71ef09df1a165a36a1efa9dd7a1aea3fc1df49db6a159a3651dde9d47a1d5a2bc1c579de4a0a0a23c1c959ca3a06ea2bc1b319c57a046a2151b379c4ea00aa2a51a4a9c3ba005a2871a659c35a003a2df19049cfb9ee1a0a718e793039800999d10a0885692aa95920363999b9c799e3414c39c129ffaa078183e9c339f14a106185f9bf49e19a15617169bc89e08a12817299bad9ef3a0a216fc9aa79ebea03616b69a759e8fa0f615309a309e58a06c15d299f29d1ea034156499b59df89fff143199699d819fbe14f2981b9d359f7914cb98f59c229f1b14b598eb9c3a9fae13a098d09c059f8313c298a19c949e6e128598779c0f9e0f133b982f9c5c9d9d123b982f9c5c9d9d1200008311b314e98300008311b314e983bc1c941e1c20ae20a818e61c8a1e4a216916351b701d2e207318011ce91d1d207919ac1c361f2d22a118a31b701e35235615d017f51b7e23f3115e119f18b823d00dbb8e6513ec23438e879752950424cd95289ce19bd0234598519dba9def220998339dac9d12229398799d0b9ec421f099509edc9ec221d29af89e7a9f63217a9b849f2aa00821059cfb9f85a0a0204b9c2ba0caa06b209c9c7da033a13e20fb9cc8a0a1a10e20539d07a102a2b21f959d4ea163a2581f9c9d69a197a22d1f9c9d83a1d1a2cc1ec69d8ca110a3931ee29da8a132a31f1edc9daaa153a39d1d949d81a127a3301d1d9d2fa1aaa28f1c9d9cc9a052a20e1c549c95a016a2a61b049c54a0e8a1f41ad59b28a0bfa1ae1ada9b13a0bca1301a0c9ce69fdfa1c219f19bd29fc6a18719229c8c9f22a1d318c597929c3d9e1b155e94069ab09c8613e6984e9c259fc812989a3a9d16a010148a9a199e97a0bb15a49a489ebca00016d19a3c9ebea0cd15c79a209e92a0a215909aff9d7fa026159c9add9d5fa0fa14599abc9d5ea09614009aa89d48a07914ab99909d48a065143c99559d1ea03714b298009dbb9f6e134b98ad9c429f7e1204985c9cff9e2212e9973b9cbc9e8a11f696109c089fde100d97db9b8f9eaa120d97db9b8f9eaa12000000000000000000008311b314e983bc1c941e1c20ae20a818e61c8a1e4a216916351b701d2e207318011ce91d1d207919ac1c361f2d22a118a31b701e35235615d017f51b7e23f3115e119f18b823d00dbb8e6513ec23438e879752950424cd95289ce19bd0234598519dba9def220998339dac9d12229398799d0b9ec421f099509edc9ec221d29af89e7a9f63217a9b849f2aa00821059cfb9f85a0a0204b9c2ba0caa06b209c9c7da033a13e20fb9cc8a0a1a10e20539d07a102a2b21f959d4ea163a2581f9c9d69a197a22d1f9c9d83a1d1a2cc1ec69d8ca110a3931ee29da8a132a31f1edc9daaa153a39d1d949d81a127a3301d1d9d2fa1aaa28f1c9d9cc9a052a20e1c549c95a016a2a61b049c54a0e8a1f41ad59b28a0bfa1ae1ada9b13a0bca1301a0c9ce69fdfa1c219f19bd29fc6a18719229c8c9f22a1d318c597929c3d9e1b155e94069ab09c8613e6984e9c259fc812989a3a9d16a010148a9a199e97a0bb15a49a489ebca00016d19a3c9ebea0cd15c79a209e92a0a215909aff9d7fa026159c9add9d5fa0fa14599abc9d5ea09614009aa89d48a07914ab99909d48a065143c99559d1ea03714b298009dbb9f6e134b98ad9c429f7e1204985c9cff9e2212e9973b9cbc9e8a11f696109c089fde100d97db9b8f9eaa1200000000000000000000000000000000b4096418471a3c1d56201b214d23bf262f22d72131233f28aa240721522250289b25c61f8e20a5286a26e51ce61d7f28722742182c19e728db270d94998e46299327cc9a269c2629b926d49e169f9c286c2606a269a28c25872416a45ba4b028be1daaa835a9602b54a169a747a8b3283da319a55fa64326dca4eda489a52d26eaa4a4a441a5d02556a4a6a4eda40025bea234a4daa4f523d8a27da55ea5a62267a3b6a570a6991e8ba3aaa47fa61b9334a264a451a66424eda2aaa569a6aa2555a5a2aaa1abcb991fa451a9baab602513a096a6aea8c123da9f07a57ea653220a9fc3a2cca4ed1f9e9a039e65a08e2078a06ba4dfa5631ee59d9ca34ea5bc1c169eb3a2a9a4971c919d1ea249a4051cec9d02a233a4761b7a9dada10ea40b1b5f9d61a1c4a3971aff9c29a161a3f419c09cfba00aa3ac19689cc1a0eaa218193d9c98a0a0a2dd18119c95a05ba27e18b89b71a01aa24e18809b41a005a21318689b18a0c8a15717579bec9f7da10617db9a7f9f4fa148167f9a429f39a10316ff99209f07a1d515dd991c9ff2a07e157599ec9ee3a047153c99ab9e70a00815de981f9efb9f9e14ac98f29ddb9f6f14bc98d59de09f15148b98ba9dca9f451482986f9d649f34136e97e09cbe9e03126398c29cf69df1110000000000000000b4096418471a3c1db4096418471a3c1d56201b214d23bf262f22d72131233f28aa240721522250289b25c61f8e20a5286a26e51ce61d7f28722742182c19e728db270d94998e46299327cc9a269c2629b926d49e169f9c286c2606a269a28c25872416a45ba4b028be1daaa835a9602b54a169a747a8b3283da319a55fa64326dca4eda489a52d26eaa4a4a441a5d02556a4a6a4eda40025bea234a4daa4f523d8a27da55ea5a62267a3b6a570a6991e8ba3aaa47fa61b9334a264a451a66424eda2aaa569a6aa2555a5a2aaa1abcb991fa451a9baab602513a096a6aea8c123da9f07a57ea653220a9fc3a2cca4ed1f9e9a039e65a08e2078a06ba4dfa5631ee59d9ca34ea5bc1c169eb3a2a9a4971c919d1ea249a4051cec9d02a233a4761b7a9dada10ea40b1b5f9d61a1c4a3971aff9c29a161a3f419c09cfba00aa3ac19689cc1a0eaa218193d9c98a0a0a2dd18119c95a05ba27e18b89b71a01aa24e18809b41a005a21318689b18a0c8a15717579bec9f7da10617db9a7f9f4fa148167f9a429f39a10316ff99209f07a1d515dd991c9ff2a07e157599ec9ee3a047153c99ab9e70a00815de981f9efb9f9e14ac98f29ddb9f6f14bc98d59de09f15148b98ba9dca9f451482986f9d649f34136e97e09cbe9e03126398c29cf69df1116398c29cf69df1110000fb8e268e7b910000fb8e268e7b91a820a92318259d2633222b2410258228be23562238243c282c25f1210a234b28b926c8208e2254286b287f1f0a2398283129eb1d8c217d284029de1c14204328d028f51a871d55277928d019821e2528ae26649a7c923129161f9fa6c1a769298c9e93a96baaa328a2a32da8dca82d2802a721a772a7212770a556a546a5d82585a4e4a341a2952353a467a0469dba20c4a2069e759b3b1b03a28c9db79a0990eca30ba014994a21bba132a110a111263ca14da3e4a36e26c4a244a740a89024eda3f4a874aacc22baa481a84aaa082580a289a707a97e2563a12ca61ba83d242ca18aa6eca8be2298a141a77ea9341f24a014a63ca8621c08a049a560a7471c549f8ea4e6a6301c11a035a412a6491c479f50a307a5731b299ea0a2a9a4d51a4d9d31a284a4791ae29cc0a139a4021a709c82a102a468198a9c45a17ca31b19a59cf7a0eda2d018d29cc2a071a28e18ec9ca0a01fa25218aa9c52a0d9a109184d9c28a0b4a14917dd9b10a08ba1f316fc9ac49f4ba13616c09a899f14a1f6155f9a369fd0a06115e099e79eafa027159e99719e7ba0cd14ee98059e33a07e149598c69df99f0c1452989a9db09fda134698569d3c9f28136098389db39e09128397de9c5d9eb2115e976a9c809da2125e976a9c809da2120000900a5d0c60040000900a5d0c600404233c25af26392711252f259d26e52890249224c925c728a52487237a24f22822263822ed230a29332869203f222129ba28491ed9204a29ba28641a3e1ea629a928d18f291a8f297e287099a111c729e1266fa0ca9e482a4c233da590a5e029a69c03a869a8532948a423a879a8bc281ea579a782a7e42723a6b3a509a6422686a4a1a368a3b32490a4c3a2eea0eb2368a408a263a1dc22aea31ba226a1ea23d0a38ba343a23b252da393a435a4902518a318a543a55a24eca2f8a5d2a6942294a2f1a647a8b1215da299a7e0a8092242a2dda70fa9bc21baa18ca72ca99c205ca19da754a9501e5ca1b5a73ba9b91c2fa1e2a6f2a8161c45a1baa523a8c81bada006a509a7bc1b12a06ba44aa63f1b2f9f0ba4aaa5a11ab79e87a35ea58b1a3a9e23a334a5901af69dc7a2d9a4d119689d35a280a4a319209dc2a126a4e318c09c85a1aba3a018749c53a128a36918369c0da1d9a22f18059cc8a07fa2d517e19b93a029a26617b39b53a0d2a1eb16679b12a0a3a18316e79ad29f4aa1d5156e9a849f00a144152d9a6f9fe2a02715d899079fb6a0ec14a099a49e89a0a7149e99539e39a02514cd99f49db89fcf137a998b9d579f59136d995c9def9eb112c1981e9dd69e63128599e49c3a9e40128599e49c3a9e40120000de842601f9000000de842601f900b124c926252882287a241f264627052945246e253027bd291324122460258029ca246c2317252b2a14266020f122332a0427aa1cb61f352a5d287715ce1b8c2a08290c961b91bc2a8728ad9e959c7c2abb25bfa280a2ad2ad62140a568a5f32916137fa6e7a6ab2930a116a775a7fc2888a5f9a641a73d2874a694a646a7302797a68ea5d2a554269da538a541a53d26d4a456a5fda4c225b8a430a5b7a4d1256aa434a5cfa4d8253ea468a560a568255aa4e5a54fa6d2240ca458a654a70e2457a3fea630a87f22bca361a7a3a86b219ea36fa7e0a82d2015a352a700a9ab1e35a386a71da9d11d98a2a0a75ca97b1d9ca11ea7faa8171d87a150a67da80d1de7a0d7a50da8da1c7ea021a5f7a6341c27a07da41ba65d1b6d9f1aa4a3a5a51a7b9eaea365a5381a0f9e27a323a5cb19879dbca2dda464193a9d4ba29ca45719f69ce3a158a4f018ca9ca4a109a4ac189d9c5ea192a36518949c47a132a3f717699c1aa1e6a29c17379ce7a095a23b170d9caea04fa2d416599b6fa009a20216aa9a2ca0bfa1a815599ae69f7ba15a15cf996c9f0ea107152a99d19e98a09e14db987a9e34a01b14a198ff9dad9faf135f98ab9d429f591356987d9dc89eb112c897eb9c709ec1122f98fa9cee9ec5132f98fa9cee9ec513c2015281f8079986c2015281f80799869e24772612287c2822242f26e4277b29162486256f27ea29d12493240926352abf24d0232625c22aae2504213e23232ba626de1daa20462b8227b818421d232b3e28dc9ae0904a2bb72741a0ba9d122b792566a30ea2d32acf217ea423a4412ae792a1a599a5af2991a256a6b1a63d2908a57ba617a79f2875a53fa68ea6c8276ea52da665a6c0266ba53aa657a66d26dea49ba5b2a500269da493a55fa5c5252ba4a8a5aea54525a7a3f8a52ea6d42467a35ba636a745242ca3d4a616a8ac232aa320a779a8082316a44ba7d3a8de214fa41ea7f0a8a520dba24ca730a9e91fd0a150a71ba9261ecba12fa700a97b1d99a1f3a6d5a8661d79a186a6b6a8cb1c49a1dca563a8621c85a041a58ca7191c34a0f7a4cda6441cd29f99a474a6cf1b899f2fa4e9a5041b3b9f65a33ca5331abc9e01a3e9a47819889eaba2a5a42719129e57a264a48b18899d06a232a48c18ea9cafa10aa43d188a9c75a1ada39017409c2da152a38d170b9ce4a0dda22217be9baea069a25716399b63a0eca1f215dc9a1fa090a197156d9ace9f42a14a151a9a649ff4a001158f99079fbca0b6141599a69e7aa07414bb98729e51a00b14b198609e22a0fe13d8983a9e00a0ce126798f49ded9f0e124998779d0f9f4e114998779d0f9f4e1100005c017307cd8600005c017307cd865324ff2665280c29f624ab26da271f2acc24bb252827912a98243c258626292bd6241f245325162b1925fb201e23bd2b4e25291c8a1f122c2526a4950717ef2bda26369e319ab52b7e2768a1da9f592b7026b2a3dea2222bc821dda434a4582a5b9cd7a56fa5052a7ca453a62ea64529bea679a653a678285aa641a667a6fc279aa539a6a9a6572785a5b1a6c7a6152798a575a6e2a6a626ffa4b4a63da72326f7a4c1a652a7a5259ea4d0a68aa70a2535a4f3a6b0a77c240aa407a723a8a02305a4e8a635a8d4227fa3dda662a8c2217fa298a661a8ee2012a2b0a69ca84b20e7a1fca6cba89e1fd1a1f5a6e0a8021f7fa18da6aca8381e57a10ca66da86e1d0da19aa53ba8321da0a05fa513a8da1c79a005a555a76b1c5aa092a48ea6f21b11a04ba441a6601bb89f0ea4dca5e11a189f96a378a55c1a349e12a300a5dc19a39dc0a2cba487195d9d8fa2b7a48c191a9d69a28da40319e59c1da25ea4ba188f9ccba120a46e185c9c87a1a6a3e3173b9c49a116a30117fc9bf4a09ca29116819ba4a02ca2c215099b65a0c5a174158b9a32a069a12615e199b49f05a1c714a199359fada02a147f99ca9e68a0d7136999849e33a00b1475995c9efd9fce125f99fc9def9fea12c798a39d6c9f1114c798a39d6c9f111400005b0a340b160c00005b0a340b160ced205324682594265c241f260e28c429d124af25e1279a2a00234525d4264f2b2023162460253b2bd221b6213124ab2b9321f61ca020d62bfb227295b319a92bd124d29e4f9d8f2b922534a280a1682bb0242ca48fa3382b6d22daa4baa4b02a6c12bea575a5272adba24fa6fca57a2933a5aaa65ba6862868a4b9a611a71e288aa4b2a64da76e27b1a4aba657a7092795a4efa657a7c0269fa41ca75ca730266da409a773a79c2538a4dda677a700250ea406a7c4a78c24cda338a728a80c242aa42ca75aa8f42271a415a765a812220ba4c1a681a81521b4a2ada680a8862073a2e1a6caa8232004a2cca6d1a8ad1faea14ba683a8571e66a1e3a533a8af1d61a1b3a50ba85b1d58a1afa51ba8341dc3a06ba5d2a7e41c4aa0d3a4afa6401c37a082a411a6641bda9f44a4e7a5531b4f9ff5a3c7a5c11a049f80a383a5491a829e27a357a5da19269ebca2faa47419769d54a294a401190d9d0da257a46a189b9cc9a11da42c18669c8ba1bda3ea17369c4ba13fa37917119c1fa1e4a2b816ab9bdea07ba2fa15549bafa025a2b115009b66a0d2a15715649a17a05fa1eb14c799799feda02f143199f99eaca0ba132499b69e9ca0e2124299a59e98a0aa1107999a9eafa0fc113b997a9e34a091123b997a9e34a091120000b30a6c0c71070000b30a6c0c71071e21e5241a261c27af232227d1281e2a7c249a257e27982a7b2300252426072b3d2212243725652b85206821e123082c481fc11ce11ef02b7d20588f7f100c2cd7215b9e3f9c212ca42394a12ba14e2b8a2325a4d9a3e32a762081a5b1a5bc2aad913ea664a62f2a95a173a66ca672291ba58aa6fca6bb28b6a4cca620a77428eda4f3a6a0a7082837a5e4a67ea77127aaa43ea7aaa70f27d6a423a7c1a76e2652a419a7f7a79825f7a3e4a6efa7d5247ca399a6b4a7532470a386a60ea808243ba380a658a822239ea3dca67aa8622211a3b2a668a888219da24fa625a8b720b6a25fa644a85120e8a271a65ca8641fa1a24ea65fa8e81ee0a13ca659a88b1e6da114a640a8341e29a1c5a50da85a1d9fa019a55ba7a91c3ba0b9a41ea7361c08a09fa4fea6111ca49f67a49ca6901bde9e04a42fa6d11a509eb0a3a3a55f1aef9d3da320a59719a59deaa2c9a43719669d9fa29ca4e218409d56a26ba45718e59c22a23ca41d18b69ce0a10ba4ca179e9caea1bda37517689c7ba145a39716309c33a1e1a24116d19bdba069a2c6151f9b70a000a247158d9a07a07aa1ca14349aa39f31a17f14319a479fe5a0e713f8990f9f9ca09513b599b49e54a09a121b99759e48a02b13fb98239e1ba07f12fb98239e1ba07f120000ed08910bed080000ed08910bed08b6204d240525de252123be263328332a292345260828f42a94222725bf26572b42213d234a25622b8520d020cc22b02b841fcb1c0b1f0e2cea1f718ff316d92b0a1f859e709d2b2cfb1ffca1daa1432bdd2046a460a4a12a171d55a591a5862a5f9008a669a6de298ba00ca657a63429afa377a6e5a6bb2876a491a60ea72828c5a39fa6b5a77b277aa419a73ea747275ca501a7a4a7a926b8a43ca7b2a737262ba4f0a609a8582508a4ffa611a8b12477a3d1a621a82e243aa3cea627a8702328a3d8a63da8a422a1a3eea661a8f12133a4dda662a8512146a3caa69da8c22015a288a6a7a85b2008a23aa668a8891fd7a1faa523a8021f79a1dea50ba8561e17a1a9a5fea7f11df8a05aa582a7761d96a0ffa42ba7f61c46a09ea417a7861c18a07da4bea6491c01a04aa413a6fc1b679f22a4b6a51a1b199fd5a381a5a51aa89e6ca333a5251a3c9e0da3faa4b519d09dd1a2c9a41619959d86a296a4c218179d40a262a48218fd9cffa134a43c18a59cafa1e2a37617839c5fa16fa3f916669c0fa112a37f16279caaa0a2a29c15079c67a025a23c15539b2ea0c8a14315c29a00a09ba1a914949aae9f40a116145f9a729ff0a0d9134b9a349fa8a0f612c899f39ea5a01e138099959e7ba088118099959e7ba088110000f708b30c85050000f708b30c850520206f236524d2255f23da265628222a0524dd2588279a2a3123fc248a26012bfb20b4234225ff2af51fb3202b239d2b091e8c1ceb1fb32beb1ce28e4610af2b191cf59e199e162c411b6aa29fa2942b261c94a4aea44f2b331871a57aa5d52a5a98f0a502a6fd29709f61a62da65a2994a29ca619a7a9281ca315a7a7a75428e2a443a734a80f2853a49ca763a89c27fda49da733a81a2720a513a755a8fd258ba433a734a8af2579a411a727a8072511a4e6a624a8642490a3b9a634a8da23eca2bea62fa81023d5a29ca639a88c2238a3bca651a8d721e5a275a635a8312161a240a649a89320eea119a664a8212063a1f6a55aa8761f1fa1c3a510a8a81edaa08ea5dfa73c1ec8a056a505a89a1deda030a5b5a7011dc9a0f7a417a7aa1c42a0b3a4bfa61d1c00a07fa476a6a91b7c9f53a452a62d1b7e9f22a4f7a5b21aed9ea9a36fa5af191e9e21a306a52b19939de1a2daa4d118549db3a2aea43f182b9d72a287a4fe17da9c0fa239a47017489ca1a1f7a35d16269c4ba189a3ec15019c0aa13fa39515cd9be0a0eea258159a9ba9a0baa27e15369b7aa039a23815939a34a08ba1db14159acd9f32a17514ce99879f24a14214029a799feca0161389991e9f9fa09e12d499af9e73a0f412d499af9e73a0f412aa09aa14808d1a18aa09aa14808d1a18d01f152386236525d62248262128012a5a22f325b727572a4f22f8245326fd2aa42169231425152b212016209822412b161ea3197d1e802b97181f9a7210ec2be010b39dcc9cba2b010bf5a08ea0472b158cb4a349a3192bf8953ca518a5ae2ac19b28a62ba6012a09a0b1a641a671297ea22fa670a67228dca249a6e2a6112832a4f6a655a703285fa435a759a78f27c9a409a7e6a78d26cba416a7c8a7ff2545a410a70ea86d25cda308a701a80c25b2a3d8a6a6a78a2416a477a688a71524a4a346a6cea70d2318a30ea6c3a73922e8a219a6b5a7d221c3a213a6d0a72d21afa2dfa5eaa77020c3a280a5f1a7751f9ba176a5d2a7ed1ef0a035a5b7a77f1ea4a001a50ea70d1e86a0eda4dfa6661dada0c7a4b2a6041daaa095a47da6ae1c79a080a47da6791c44a065a453a6051c1aa065a438a6bd1bc89f49a4f7a5f11a019f23a4aca58b1a799ed8a367a50e1aea9d78a31aa592198e9d08a3d5a42119529db1a29da4c7182f9d6ba271a47c18da9c1fa232a43018869ca5a1d5a34117519c58a13fa3cc16bc9be1a0b6a23416e69a57a0fda18615429abe9f65a1e0141f9a599f15a19414939a7a9f18a19214769aa79f3aa19614529a7c9f20a11e14ad99979e99a09f12129a4a9e58a0a014129a4a9e58a0a014b4069b14cb883518b4069b14cb8835187f200f2339240d25162365267928c9294b22ea25e027942a1d219b243926a22a0f206c227624d52a721d7d1ef6201b2b151a430ec5154b2bc314a69b4e9b992b9290d29fb49f422b609535a2eea1db2af99676a4f2a3592b489a54a507a5d82a469d9fa624a6912ad79f75a64aa65a2964a21da6aba6482833a2e1a69ba7232839a205a7bca7b5270aa3fea6c5a72827f9a3fba6e0a7a82690a3aea6cda7c7259ba377a664a7302582a357a650a7b524d8a219a652a72c2470a2f2a52ca77a2397a2dfa590a7c222dca2eaa594a751222ca3c8a573a76821c4a2aaa581a7ea2020a28aa571a75620cea191a590a7052097a16ea59ea7b71f5ca131a567a7ed1e1ea1fea406a7231ed3a0d6a4d3a6da1db6a0bfa49aa6911da4a093a490a6f01c96a07fa452a6671c49a03da4faa5091cd59f17a4c7a57c1ba79f0da4afa5ba1a349f03a48fa56b1aea9ed7a360a50d1a319e50a304a58319fd9ddda2c0a41019c99da1a296a471188c9d4aa25da421184e9de0a11ba4a117159d89a1bea31c17b69c39a152a3a5169b9c06a105a35216469ca1a07ca2d415c19b54a0faa16515469b1ba0b5a1be14d99aea9f7fa135147a9ac69f54a10e14409a699f32a11813009a649f0ea16d131f9a089faaa033141f9a089faaa033141d80bc8fb290e1171d80bc8fb290e117e91f7d220324e42419223c2628286d297622b825ce27472a8221fa2458269e2a632056230425b92ab51d6a206b22f52aa619c717c01a0d2b380a6d9b419b602bfe9817a01ea0962b7e9b74a2c3a2212b9c9b0aa47da4e32a609cbfa46ba5262a279dd8a523a6b329459f3aa6a9a603295ca1b4a675a78b284aa22ba7f7a742289ea218a702a89227e8a2fba6ada7fb26b0a32ba7f8a78a26cea3e4a6e2a7da25eaa371a61fa7162504a46ea63ba7b624a4a239a67ea7012471a213a68fa732239da212a69ba7d22252a2efa5e2a71a22f0a1d2a5c1a78f21aea18ea57ea7d12083a165a568a7682093a160a56aa7112093a14fa557a76d1f08a1ffa4e8a68e1eafa0e0a4d6a6e51d81a0c9a4e3a6671d58a0a7a4afa62d1d42a085a495a6af1c32a05aa458a6721c0ea042a40fa63b1c05a03da4f8a5091ce29f44a4d7a5431b4a9f26a4a5a5cd1ac29e03a467a5581a299eb3a32ba5cf19c39d2da3d4a43c19749d9fa27da4ba182c9d47a23fa46318159dfca120a42318e19c9ea1d5a3af17729c3ca184a31617159ce6a036a32b16809b8aa00ea3a815f59a4ea0daa25e15979a22a0e4a2c614679afa9f47a23e14359ace9f67a11d14199a549fd0a094123199d29eb1a00b13cf99f69ea1a01f14cf99f69ea1a01f1400004f8dfd8b681900004f8dfd8b6819af1e2c242025b225f7212d2608287429e721b725a2272f2ac9207f242b264e2a3020d4220425992a2e1e4c1f1422de2a691aa514d21aec2aa510299d579ce62a1f97a1a0929fcc2a8a9c38a338a2c02ac89c39a431a4f629cc9dd4a46da59a29e49eaaa576a658290a9f20a623a705294ca0d0a652a7bb2880a10ba7caa74928d6a1d2a6d3a76f2798a239a720a8eb26fda21ba718a83f268fa29ca6ada7682580a280a6a5a7d4247ba243a668a7482471a202a62ba7bc2357a2cca5f9a6002329a293a5fca6832211a282a5f8a6e121c5a16ba5eda643217aa14ca50aa7da203ea13da510a7402001a104a5efa6a21fd5a0d9a4cca6ea1ebaa0b3a49ea6431eb5a08aa480a6a51d95a06ea453a66c1d64a051a426a6ea1c49a053a41da67f1c3aa03ea412a6581c2fa045a4faa52d1c0ea04fa419a6381cc39f5ea417a6711b319f3ca4dea5db1abf9e0ca49aa5521a509eafa351a5cc190d9e50a303a50319c29dfba2bba4a118709d7ba27aa44018f69c08a242a4d517869ca3a108a43e17289c42a18ba34116c59bd5a002a32616239b8ba071a2b715ba9a34a0c2a14a15399af99f5ca1f814209aa59f17a1b8141b9a4f9ff7a08214919ae59ea5a0f513e29aa59e5fa08a14249b499e3aa0a812249b499e3aa0a81200005d924195a58000005d924195a580da214e264528312876226826d2273c290321d8258c27a229402055243926f829ee1e7a229324562a8d1cb21d9320802a61180e8eaa157b2a4789de9c219d522a109845a07ea02c2a1e9cafa25aa2412a1e9e8ea49fa4282a7a9fb6a48ca54429d89fb3a51da6332923a0cda59ca689286ca1a4a625a76228cea1b6a692a71528a2a234a60aa79e262ea296a6b3a74d267ca27ea6c3a7ac2516a239a64ea7122527a211a611a7b1243aa2fda506a74c2441a2aaa5aea6ab231da26da576a6e722d8a133a574a63322a6a106a54da6942181a1eca427a6122169a1c7a450a68a2083a1e9a471a64a205ba1e9a48da6861f4aa1d2a491a6e61efca0aca485a6391e99a075a42ba6f21d56a055a4f3a55e1d23a040a4f4a52c1dcd9f3aa4e6a5b01cad9f30a4d8a57f1c599f19a4b7a5421c679f1fa4c2a5921bc79f36a4cca51b1ba59f1ea4d4a5961a1e9ff1a39ca5f819599e87a343a5be19c59d24a3f2a43519679ddaa2c3a4d6182c9d94a283a48c18fb9c2ea246a43b18b39cbba100a45d176f9c56a178a3ca162f9c04a1eea261167b9b98a07da2d715ec9a3ea0d5a16515ba9afa9f3aa112156d9a829feba078140f9a329fcca093140c9ade9e9ca0af13b199969e85a04c130399d99d30a016140399d99d30a016140000b5948f9661020000b5948f9661026e2112260428fc27a221b7261c283529fb211e2508275129702017244925b3296b1e3c21fd22e929651b0d1cf61e1f2aaf146597798f3d2a6f89899d199d232a4b978aa05fa0092aba9bb9a299a2dd29b49d32a443a4d4296ea096a4c4a470294fa001a5fca5e1284ea0e5a597a69c289ca1cba5c5a6b227e9a182a556a6b426dea2b4a582a61626f1a1efa519a7ad25faa13ca613a7552513a2fca5fca6c72434a2d8a5fba64f2408a2b1a5c7a6c623e7a16da5aaa63323d0a14da582a69e22d6a12ba587a60a22daa1eca45aa678214ba19ca438a609215aa1a3a433a6af201fa1a1a459a63a20dba099a458a6e21fada07ca451a6011f82a067a434a6c01e3ea037a4eba5251e0ba023a4bba5511dd09ffea3a1a5d81c849fc0a36ba5681c019f9aa352a5f21bd49e8da364a5121cfe9e00a4a3a5d01b559f4fa414a6791b259f65a43da6f11a969e25a4fca53a1af29dc0a37ba58f19919d4ca322a500194f9dcca2c1a48218229d35a232a41218d59ca2a1bea35017719c35a156a32117369ce9a00da3b716c69b99a0b7a24a16f09a4aa039a2de15529ac19f8ca15c15f499549ffca01015a399da9e9da0c91441997f9e5ea096143899359e22a02914cc98fc9d23a00e14d098bd9db39fd611d098bd9db39fd6110000078f70905f840000078f70905f84a120e52565270f27a2211b2650289028c82063253127cc28471f9823f4241a29a51d0120ac215b297e194f147f1a9c290809ea9b759ab6295794e49ed39fd9298c98d8a034a1b229de9ac2a15aa28929ee9ceba2eba274298e9d4aa460a46e29a29d65a41ea57028649fe0a55da66d28a9a051a66ca7e0272aa148a65ea72b27efa05ca64ca7802627a200a6dda67e2593a19aa5dba6cb24a6a179a59ea64224aba15da554a6102468a146a52ca66a234da106a52ba699221ea1b7a4cfa50d22dca06ca4a2a58a21cda028a470a51021cda014a43ea5982089a001a430a553208da025a478a5192083a062a41ca69d1f6ca074a440a6f51e2fa03ca40ba64a1eb59fc6a389a5631d389f1fa31ea5a61cf59ea8a2b9a43e1cbe9e8aa29ba42b1cbb9eafa2c0a4991b0d9f54a314a5661b559f09a498a5171b329f2ba4bda5aa1a089f5fa4f7a5a11a8c9e50a4dfa57c1a569e23a498a5cc19ff9d70a31aa54e19f09df6a2e5a4dc18c79d6aa287a42a185b9df0a137a41018c49c70a1b8a370174e9cfea006a36b16c19b85a05aa27015fe9a1aa0aea1ee14389a8a9f05a19414f899129fb3a05714d499c49e79a03214ac99939e52a05c14a0991e9e0aa0c113f498859d429fea13f498da9cc39e6113f498da9cc39e61130000be899f8c65800000be899f8c6580cb21ee254e285c263e226b26332816289d20ab25b4271f288b1f9d239e258728031d311ef6200e2931193199be0f8529b70f279ef09d91290c92669f849f8129849662a0b0a07a2988995ca117a167292b9cf9a108a21429ea9daca3b4a3d128059ff3a47aa593284e9f57a56ea6ae27e6a01ba6f3a676275aa1c2a5c3a6492651a1efa5b4a6ce252ca1b8a565a6072516a172a553a6632421a14ba525a60f241aa12aa503a65223fea0fea4faa5b122e7a0c0a4d4a5ec21d1a08ca494a56c2193a02ea441a5f22062a09ca3dda4bf2033a023a39fa49c2016a033a38fa4952023a0c0a3e9a47f2082a070a4cba53420e5a0a0a40da62a1fa8a07ea41ea6ae1d849f72a309a5461c009f51a24ba4361cd59ea8a1cfa3291bcd9e8ea19aa3351ba69ebda1d5a3441b649e5aa26ba44e1bd89ea3a33ea5221b11a065a41ca6d01a27a095a427a6771a8f9e29a49ba5c7199d9d6da321a53319869da7a2b5a48218279d27a253a41518ed9cc5a110a40818a79c63a1a1a3fe16639cfda01ca37b16229cbba0a6a225168d9b62a027a2b115f79a08a072a14a157c9a769f00a1e514dd99ea9ea6a0951460995a9e44a04e14ef98ee9d03a01014c498939d5d9f4e132c98049df69e7313de97ca9c849e4711de97ca9c849e47110000a48e8b8f68830000a48e8b8f6883da1f2925cc268c253920f3253f286a26f92151264d28ed267b1e28230f25b2262616539794952a28670e479eb69c95280b8eda9d619ca9280693609eea9dd228d595a29f889fec28c69870a08da0dc289d9a5da1bca18e28769c28a2d2a22b28689e27a4b7a4ec272ea017a516a63d27faa06ca567a656269ba18ba583a6aa256ea1a6a59aa64b254ca16fa559a6e02419a139a503a6652464a1eea4a1a59b2347a1f3a408a6fe2212a107a508a67f22bba0d3a4d1a5b82189a0a0a49ea5292149a05ba45ea58e205ba0d1a3e7a407207ea0cba252a45d1f8b9ef8a170a3871fd39e1ba10ba3112029a15ea4b1a56b20e4a07ea564a7701fda9f00a495a56d1db69ebba28aa4d61c7b9e4ea254a4b71c879e3ca019a22b1cac9db69f27a2f41a219d6ca03aa21c1a389d78a1a9a3351a289eb8a375a50c1add9ea9a4a4a62b1a619fdea4bfa6c8192ea09ca42ca6b11904a002a444a52319009fa0a26aa47d187f9ddfa1eba325189d9c53a144a37017569ceea0d8a2e416399cc0a082a29016339c92a026a250160a9c5da0e2a10816cd9b22a09ba1c515009bbe9f3ca16815339ae79ea6a0ed147b991d9e3da030140d998e9d1ea0c8132199529dcc9fa412c398f79c30a059129998ef9cc89fd5129998ef9cc89fd5120000dd85438ec6010000dd85438ec6010d20ce234625c92435207824f2251a25462289271d296c25151ef6223d254925529824a53fa654250c8d31a0a69f66259411c398b295e6258d068b9a08980827cf91ac9b4d992a27af95ac9c109bae2793988c9d859cdd27d09bec9f4d9fd927009e54a31da46827a19f12a513a6272628a029a5efa566257fa0e0a486a5e02470a0a9a443a58f2421a082a43aa539240ca05fa42fa5d7233ea06ca439a5712344a072a446a5dc2251a074a457a5742283a07ea45fa5ce219ca071a479a554216ba064a456a5ba2062a034a423a55020ef9f75a3a3a41b1f2d9e45a2e2a3c61d2d9c859ecaa05c1f3aa13fa619a85422069f3ca45da5611d34a0c3a29ea4ba1c769feea12aa4b81ce89d00a1d4a27c1cbc9d51a05da2411ccf9c319d2aa0c618bf9bfb9b759ea217bb9c18a0ada164180e9e58a3f3a49419ed9f65a518a79e1ae69f5ca50ba7571aba9faea440a6a519c09e05a4c4a58219ee9d75a299a49c18549d5da1b3a3a717e29c21a177a33e176b9ccda019a3c816df9b85a080a2ef15539b48a015a29e15089b02a0bca1fa14719a559f55a19914b799ba9edea0441452992c9e6da05d131099cb9d30a0111308998b9d09a05712ff986f9da09f3811a4981a9daf9f50131098aa9ce29ed9121098aa9ce29ed9122d83608efb8cb7152d83608efb8cb715a11e2922d5237724761dbf207922f223fb1cea206a230a2592141f9ee09cf523e619781d0a1fc02765187919cb1c9c2551161c16d91a3925c8138f091019e724330c6b895c16b224000665890b185724cf8ff0896718b0244594488cef18f3257f9dfca3f5a398263a9e6ca480a4a8242d9d71a228a37923919d8ca25fa39123199ee5a200a49323ce9e7ea34ea45323259fa3a382a4d122929fd6a395a46922a69fd0a39da4d7219d9faba3a4a47a21949fa3a39fa41121b59fa7a3a9a4d920c69fafa3b2a48020e69f9da3c7a43e20b89fb6a3c0a4c61f34a0cea3c0a4fb1e7f9e63a1d6a2851c410c5b0f580c650d059a5c9c239f1f172c9d58a0ada1581bcb9cbba0b0a2ab1a3c9db6a0fca2271a6f9d0ea0efa101196a9a52990b9c65180d96f518b61945175e99378c18974515e39f41a57aa7011ac7a0f9a674a8771b509f06a55ca6831ada9e67a3eda4aa198b9e27a226a4fa18d49d4fa167a34b18e29cd8a0f8a2d517709c81a03aa2e4161a9c41a0b6a18216f99b06a091a12716ad9bba9f67a1e915439b429f31a19d15c99adf9ef2a00415479a809e7ea0be14ad990e9e14a078142a99a29d939fe313b698389d239f7b138698059dd39e45125798d19ccc9e15122d97589c359e9d122d97589c359e9d12000003901090770e000003901090770ecf1ce2201b22b822c11cc3209e222d235619901bde1daa20f5126318d719231ce019461e802025245819be1c05200725b9162717fe1c15258610cd8fc11715252f854198f78a08253e93f49a05980125b495929ce29a09253c96a49c969bb5236b95959a359be21e389b259f07a0ac21009c37a0a9a03422939cb9a020a16e22039d18a185a12822a39d78a113a2eb210d9eefa1c5a2c8218b9e2ea235a35421d59e50a27aa3ed20fd9e6ea2a3a3ac20f19e8ba2dea34b20f79e9da21aa40b20429fd4a22ca4a41f9c9fc4a23ca4701fcc9fe2a25ca40f1ffc9ff0a272a48a1e289f8aa26ca4931de79c3aa1fba2f91b379ced9f9aa1371a559cde9f8fa1f319ad9c38a0ffa12d1acb9c9ea059a2281ad69cc7a0daa22e1aa89cbca0cda2841a7499049c159de518cf1c1b272328529416a4c2aa71ac911ec79e0da501a6391ced9c7ba1e9a3e318209d3aa101a39b18f49bada068a2e917389c64a030a26d17909b14a0dca1e516559be09fb4a1a9162a9b809f6ca15716109b479f4aa1d215969ac79ef8a06c152d9a529e99a00e158399b39d34a09d144a996b9df09f221424992f9d869fe8131a99069d239f4913de98dc9cfc9e8113cb98b99cb09e61139e989c9cbc9e3313bd97229cf09d3612bd97229cf09d361200008988a885e28400008988a885e284181c1320892185217e1a9c1e21208e226a16c21a5e1ca4202918991c2c1f3c201b1b491e97205623ac18c01c441f5b248a159f16971a8d248111fa88f313b32410059e95db90b824f0919e9a9d98b0242997e99dda9dad24139ac99f5fa000241b985c9ede9e4e220599179e5d9ec5216e9acd9e889e6721f99bab9ffa9f4f21789c35a0aaa00321e99c8fa0f2a0b020519dcaa076a18720a39d20a1fca15820cc9d5da180a23320309ea3a1c3a21e204a9ec4a107a3cf1f6c9eeea15fa34e1f4f9e1aa281a3db1e2e9e14a295a35b1efc9dfaa181a3081e0c9effa1b4a3741d1c9edea1b2a3161deb9d79a133a36e1c649dfda09ea2e31ba39ca1a057a2251b4f9c76a027a29c1a3c9c4ca0e1a1171a609c5aa0e2a1ce19989c55a00ba26c197e9cec9f91a1d9189798a99bee9cc0137684868cf38e2c0231981c9b5f9d8011e99ced9edaa0af17fe9bf49e17a1a8164a9b0d9f2da1aa16389bde9e14a13c160b9bc59ef7a0ad15159b9d9ebba08b15a89a579e72a041152b9a069e45a0b514bc99de9d0aa087147499ae9ddb9f63143299779d9d9f3814fb98449d869f1014db980a9d649f6513cd98fd9c669fd912c898de9c119f3912be98a39c969e8e116a987c9c0b9e95122898299c5e9dc7112898299c5e9dc711e204d0125d150402e204d0125d150402491db71e1520c720c418161de71e7d21a016ae1bdc1d7520a7187d1c711e8620d019151da31f53227618001c401e6a23ef141617701bd62318119008a2160724460b2a94288a2124a691699a1e992824c3976f9dd89dda23bf98629e339fd6226c98359edc9e45223999629e7a9ff221479a0e9fc39f9421199bad9f25a02321cd9b11a05fa0b7203e9c4ca0b8a06d20829c7ba001a13a20c69caea06fa1dd1f199df7a005a27b1f6d9d37a15ca2121f899d5da190a2b91e949d99a1c5a2591ec09db3a1fea2351ecd9dbaa13fa3001eef9ddca170a3991df99ddfa179a31f1dc09dbaa141a3c01c409d45a1d6a2221cc29ceaa070a2941b5c9c99a022a2ce1a239c69a0f0a1271af99b37a0cca1e219d19b11a0c2a16d19f59b0ba0c9a14f19159c09a0fba1e618219cf49fc4a170189f980f9da59e0715c893a299169c76128a982a9c849ef1116a9b6e9d16a0f011cc9a2d9e97a02315b99a6b9ecaa06515e19a6c9ed9a0f214a89a509ea5a0cd147f9a139e94a09f14649afd9d76a03614369ae69d64a01814e899c09d4ba07013a399a89d31a0c4135a99789d11a08313ad98199da49f85123398a19c229f8b11cf975c9cdb9e3811b397449c989e4b104297189cda9ee7105b97e49b409edd115b97e49b409edd110000000000000000e204d0125d150402491db71e1520c720c418161de71e7d21a016ae1bdc1d7520a7187d1c711e8620d019151da31f53227618001c401e6a23ef141617701bd62318119008a2160724460b2a94288a2124a691699a1e992824c3976f9dd89dda23bf98629e339fd6226c98359edc9e45223999629e7a9ff221479a0e9fc39f9421199bad9f25a02321cd9b11a05fa0b7203e9c4ca0b8a06d20829c7ba001a13a20c69caea06fa1dd1f199df7a005a27b1f6d9d37a15ca2121f899d5da190a2b91e949d99a1c5a2591ec09db3a1fea2351ecd9dbaa13fa3001eef9ddca170a3991df99ddfa179a31f1dc09dbaa141a3c01c409d45a1d6a2221cc29ceaa070a2941b5c9c99a022a2ce1a239c69a0f0a1271af99b37a0cca1e219d19b11a0c2a16d19f59b0ba0c9a14f19159c09a0fba1e618219cf49fc4a170189f980f9da59e0715c893a299169c76128a982a9c849ef1116a9b6e9d16a0f011cc9a2d9e97a02315b99a6b9ecaa06515e19a6c9ed9a0f214a89a509ea5a0cd147f9a139e94a09f14649afd9d76a03614369ae69d64a01814e899c09d4ba07013a399a89d31a0c4135a99789d11a08313ad98199da49f85123398a19c229f8b11cf975c9cdb9e3811b397449c989e4b104297189cda9ee7105b97e49b409edd1100000000000000000000000000000000000071135d136f1d0b2018212f223f27f02147236d24762899234f229623bb2810246f20aa2103298024651d641f3229b524ae16b21963297e24d096de9452290c24a59c819c6729b222699f959ece29b52075a0e4a068280e1daea2e8a3d626429e46a9f3a92e2a7fa142a83aa94e29a1a2d6a527a7d226b2a3a9a54ea671262fa49ea59ca6002664a4dfa5a5a641250ca4aba58aa6982425a2eda44fa54424a9a091a3eca44f23fe9fc0a0589f3925dba040a2279fd29a30a401a920a96fa80ea4d1a84aa9c4a265a320a74fa8e11e56a414a620a68a274ca34ba62ba77e2bc0a1d5a5c1a66a2aa09d4ea352a53828a9a0e6a435a7b41fc89ec3a2dba4a11cd59dada283a4631cc39d47a24da4711b179e23a237a4f01ac49de6a10da4951a7f9d8ea1bea3d0190a9d41a15da36d19b99cf7a00aa3dd187e9ccba0e5a294184c9ca1a09ca25e18279c8da057a20218f79b78a02da25317819b4aa00ba2f416589b28a0d8a1a8164d9b0ca095a16716f79ac69f65a1b415ba9a759f43a17815529a529f0ca1f714199a5d9feda0f014a2992d9feaa06e146d99d49e93a086141899429e1aa01a14d298ff9d1ba0db13af98d79d15a0211362989a9dd59f581364985c9d5e9f1f125b97e09cca9eae105698d29c1a9eaf100000000000000000000071135d136f1d000071135d136f1d0b2018212f223f27f02147236d24762899234f229623bb2810246f20aa2103298024651d641f3229b524ae16b21963297e24d096de9452290c24a59c819c6729b222699f959ece29b52075a0e4a068280e1daea2e8a3d626429e46a9f3a92e2a7fa142a83aa94e29a1a2d6a527a7d226b2a3a9a54ea671262fa49ea59ca6002664a4dfa5a5a641250ca4aba58aa6982425a2eda44fa54424a9a091a3eca44f23fe9fc0a0589f3925dba040a2279fd29a30a401a920a96fa80ea4d1a84aa9c4a265a320a74fa8e11e56a414a620a68a274ca34ba62ba77e2bc0a1d5a5c1a66a2aa09d4ea352a53828a9a0e6a435a7b41fc89ec3a2dba4a11cd59dada283a4631cc39d47a24da4711b179e23a237a4f01ac49de6a10da4951a7f9d8ea1bea3d0190a9d41a15da36d19b99cf7a00aa3dd187e9ccba0e5a294184c9ca1a09ca25e18279c8da057a20218f79b78a02da25317819b4aa00ba2f416589b28a0d8a1a8164d9b0ca095a16716f79ac69f65a1b415ba9a759f43a17815529a529f0ca1f714199a5d9feda0f014a2992d9feaa06e146d99d49e93a086141899429e1aa01a14d298ff9d1ba0db13af98d79d15a0211362989a9dd59f581364985c9d5e9f1f125b97e09cca9eae105698d29c1a9eaf105698d29c1a9eaf100000da87bd019c850000da87bd019c851922ac24c5251e28f022c224032637294e22fc22742401294f23ba2154233129c123aa20122293290125531e3b21302a75255e1b721f302ab5255318d81c002a07259b150e1c322943256019b81fc628f723d917691ffd2840916da610a8c82931a336aa8dab512909a538a92eaa562842a6f1a75ca8912779a4f3a698a7f326e4a31ea574a56e259ba3eea24fa33c2427a387a169a1982200a11f9aac900821c0a081104e1d521f95a12da1eea18691a0a23fa6fca638a4e7a27ea78ca825a031a2caa665a8c719b0a28ca649a8362358a24ca7cfa85225f2a359a77da8942486a281a80baaf52258a277a8efa93c1f85a03ea61aa8b11ca7a037a535a7ed1bc79f97a4eaa6121bc09f2ca402a6421b009f57a3e4a4621a2b9eaba27ea4351a7e9d50a25fa48f19229de6a124a43119be9c97a1fba3ec18d39c54a173a3a318d29cfca0f7a25518e29cc0a08ba21518039d98a046a2b517c79c62a0eca14217609c46a0c6a19916e49b25a0aba1f015289b03a066a1af15e59abf9f24a16e15979a729fd8a0d3142d9a0b9faca09014be998a9e71a03c14f298f39d2aa0cd13a398b49de79ff6126c988f9da39fc81247984f9d5c9f8e125298229dd69e75119d97c39c4d9ebc104a97529c5a9de1104a97529c5a9de110000030813308310100003081330831011c230a266a2757280d25fc252827b1295b24d024d525b2298123f32318253d2a8624c7225924d32a3e24a52028223e2bdb24fe1c321f342b5224d80f301c0d2b46243b994111582ab323159db391232a532109a11aa04d2ac61069a500a6ee2914a26ca805a98329b2a4b9a885a9b928eba462a8a7a8c12701a558a711a8f7264fa4b1a521a5462687a45aa4bba35d2550a40ea2e3a1482476a393a2aca1f0231aa306a406a495226ca369a529a64820c0a36aa644a7891d93a3f0a62fa8ca8fbca208a771a85c951fa230a78da8ab19efa16aa79ea87e1dcca1d9a71ba99e1db6a129a853a9d51c2aa1d8a72aa9761b5ca1dda6afa8f21986a1a2a50da8f319b1a014a5efa64f1a09a06ca413a6ef19719f0ca48aa5d519db9e90a341a5c019509e3ba31fa580191b9ed9a2c4a42619939d58a27ba4c418279deaa127a46418c19c9ea1aaa31f187d9c56a130a3d517449c19a1d3a264170c9cdea07ea2fc16d89b96a035a29416949b58a0d2a12816579b19a09aa16f15e29ade9f4aa12815979a969f00a1a114489a799feea08214f299179fb6a0eb13d2999f9e6ea0fd13c299439e31a0ff129399e19dd39fa5126199a29d8d9f5c124499679d239fad11b698439d1b9f1d11299a0d9d959d250e299a0d9d959d250e0000d8884e843a030000d8884e843a03c62557276f28232971250e2770281e2a70240926ea27772a352389242f26b42a48221e23aa24622be021d91fd921902b7e224a1c6c1e542b6d2308906417bf2b0124aa9c719a732b6a221da168a0ed2a091a82a446a47d2a159d13a63da6472aefa167a7faa7c7295fa3e2a730a80029cda4b3a76ba86428efa492a746a8c8270da6b1a62da7e72645a5e1a54ba6192696a469a544a5a0254ca449a557a5492547a497a5c5a5b72449a402a6b0a6a523b1a49ea6d2a76d2130a5f3a63aa8391e26a47ca7b2a8471c01a382a7b1a8b51cc5a24da7a1a8ec1cc8a22fa7b6a8711caaa291a710a9531c82a2b3a703a9961ccca12ba7d4a84f1c58a15da67aa8611cd3a0bca5eba72f1c64a006a5dea63d1b1fa08ba414a6ea1a819f1aa48fa5d619bf9eaaa347a57519409e3ea30aa51819ad9db8a2c0a4b9186b9d5fa281a46c18249df6a142a46018039dbda101a4c917c69c7da187a35c17b79c51a136a30d17879c26a1f6a2c016579cf4a0bea2fa15259cd0a07aa2ae15ae9b85a01ea256150d9b4ea0e0a10615b29a0da08aa1ba141c9aa19f22a174145799d99e9fa00b14e698769e37a010139b98f49db39f95125798b39d449f4d1263988c9dda9eb411b697eb9c7a9e49124998049d869ece124998049d869ece120000bb888f810e840000bb888f810e845b2447277128ea28e6243b2766285c2a70240226c3276c2a9324a8242826162b712306243a25c62b6723d820fe222e2c60217f1db71e372ca8201090f710082c9c1fc39fc69df42b0a1d8aa263a2a62be70fa4a476a43a2b3e9caca508a6ca2a57a201a770a72e2a49a477a70da882299ba4c7a735a8e7281da579a72fa84328bea457a7c0a75727c8a4dfa601a7412682a45da65ba6c22562a41da698a64f2516a42da6caa66924c9a374a67fa7212368a3bba6eca7e0215ca3eaa646a8fb206aa307a778a85620aaa306a7afa8c81eaaa379a7e6a8bc1dc1a2aca70fa9411d15a294a72ba99c1c05a273a729a9921cc7a10aa7eba8871c6da18ea6ada80c1c10a1f0a565a8911b93a04ba594a71a1b5ba004a5c4a60e1b1da094a461a6701ae79f2fa4dca5d019729f81a338a52719c09e10a3eda4d918779eb8a2aca48f18279e69a26da40018bf9d2fa244a48b172c9dd6a10aa40a17cf9c98a1b2a3ae16719c43a146a34816349c00a1e5a2e715f99bc1a07da29c15779b78a008a246150d9b37a0c2a1fa14939a02a070a1ae141e9a9a9f1da170149a99239fd0a02b142999d49e8da04e13de988e9e5aa00213cf98679e2ea0eb120399459e02a0c0117998179ef99f98116e98789d0d9fcf106e98789d0d9fcf10000072849e017c81000072849e017c8139243d279f2824293925622786289c2aad2454262528732b6f24a8251327072c65245d2495251d2c5e2324216c23702c4c21fc1a851d752c9b1f209b0c915c2caf1d51a0d19d492c1b1afea208a20c2c868e09a58ea46d2bcd9e14a6f2a5a42aa1a209a764a71c2af8a354a7cca73e296ba4aaa704a8d428bba4e8a721a89f2882a5b3a70da80f28f6a467a7b2a73327e1a458a7d5a78b26cda417a7d1a7bb25a1a412a70fa8ff2479a4f1a60da83d2422a421a717a83823eba31ba744a83022fca301a745a882215ea3fea659a8782056a2bfa65fa8991f03a2d3a695a8851ee5a107a7c0a82c1ee8a1fda6bba8ac1d9aa183a678a8fd1c8ba10fa637a8741c3aa1daa51ca8701cbfa080a5efa7101c72a00fa550a7611b34a099a495a6a11a03a04ba425a61d1abb9f0da4aea5b219fe9e9ba357a54919099e10a312a5d918919dd1a2d3a4e2184f9d83a2b7a49d181b9d61a28ca46c18ff9c33a262a43318a49ceaa125a46a17799c95a1d0a30117449c53a12ba32616049cfca0a6a2c215829bb5a030a2fb14d69a60a0cca1a114509a19a05ca15614b8999c9f03a107148a991f9faea0ee127599b89e6ca030136799719e37a0e3127d993f9ef99f25126799da9daf9f4212b198899d3a9f0c12b198899d3a9f0c1200009d03750c050600009d03750c05069b239626b328f6287f248d276629da2a4e24a1266628792bf82294255327142c4b225324dc25142cd82055213123512ccc1d5c1c951e552cc918129b2b91632c4a1680a1eea06c2c248e4aa467a4422ce89a58a543a5022c809f24a65ca6342be7a10aa744a7622ae1a37ea739a889293da40fa8a8a82b294da418a8bba8a428fba4c4a75da8f827daa4d5a73ca83d2728a5c0a741a86a2699a46fa712a8c82515a423a709a80625daa334a70ba8522499a35fa732a8c923c8a39aa77da8e222c8a3afa7c2a8f021a9a37ba7b0a82c2173a338a79ca837203aa311a78ea85d1fafa2efa6b2a8e21e02a2c1a6c8a8e51d70a13fa65fa8231d5ba1dda51ba8b01c53a1c3a50ea87c1c47a1c3a526a85e1cfba083a5e6a7131c90a0e7a4d0a6271b5ea08aa412a68a1a28a04ba4dca5881abd9f0ca4b2a5161a2b9fb0a377a5a419a79e3ba347a53e192f9ed8a2f6a48a188e9d75a296a42f18269d26a254a4e117b89ceaa11aa46a17899caba1c3a30817529c6ba162a33016219c2da1eda2ea15d29bf3a096a22f15739bb2a02ca2ec141a9b76a0d6a1a014749a22a06da14814fa997e9fd1a011136d99ed9e8fa08a122d99c19e89a0c2115699be9e8ba026110e99ab9ea8a0f2103599989e3aa028113599989e3aa028110000cc05870dd4000000cc05870dd40027233027ac282129492404285329eb2a44244326ab270f2bef225f256c26f32bad226c246125392cef200f216f238c2c781da91a421d6f2c231aeb985797852c93129d9f05a0792c6f972aa331a3f82bdb9c4ca5bda5b32bed9f9fa627a74f2bd9a124a714a8622ac1a27ca73ea8a4292fa4dba784a81d29d9a4baa760a8952810a5c7a738a8fa270ea5bfa735a85e27c2a4d9a742a8b72683a4a7a730a809262ca468a73da831251ba44ba738a88224dea318a70fa8f323aea321a72ea80e2392a308a77da81c2207a4e1a695a85f21eea2c8a65ca8c32051a2a4a62ea833209ea287a647a8011fd2a27ca65ba88a1e87a262a662a8c71de7a150a656a8791d76a11ea637a8291d29a1a8a5eca7a51ccba012a549a70e1c5ba0c1a42fa7821b21a0baa40da7471bcf9f7ca499a6d21aea9e2aa42da62e1a6d9ed7a3b6a561190b9e6da339a5fb18cb9d15a3dea4a4187d9dafa298a408184c9d76a267a4a017039d45a237a43e17b99c00a213a45a16909ccda1c4a31316589c8ca15ea3c0151e9c42a1fca27215db9beaa08ea20915339b7ca013a29914999a1ea089a12f14649abf9f42a1de134d9a739f16a16a13239a2c9fc2a01113b199c99e60a0821114998b9e52a024122c99fa9d9d9fd5122c99fa9d9d9fd51200002401150c248100002401150c24810f2271255627c92422237827de28752a47239f2644283e2b54224c25a426d72b5b21fc232c25132c1620e92034236a2c821ccb184e1da52c3d17dd9a7097812cb39432a0bca0392c449b47a342a4f82bdc9d1aa5d5a5c72b729f0fa6c5a6f42adaa0f8a690a7582a2fa291a734a8a629b9a405a846a82b29d2a410a848a8aa2874a4ada732a8dd278ea4fea736a83d27e4a4e1a742a89c26eaa4baa74ba8d12576a454a751a812252ba43aa756a86e2401a43fa76aa8a023ada336a758a8b7229ea346a78ba8f521cea346a798a83421b0a317a78ea8a520a0a2baa6a1a8ea1f30a288a699a8341f3fa257a658a8c71ed1a123a619a8001e81a103a600a8b51d2da1d5a5f5a70f1d12a166a571a79e1cd1a004a506a7711c72a0b9a400a7141c45a0a0a4c7a64f1b1ea066a42fa6c71aa79f2ba4bea5581a3a9ff2a376a5e719b29e83a32aa51919349e04a3eba4b318ce9dd1a2bfa47818aa9d8ba28da43218419d41a256a4ed170e9d02a226a4f016c99caca1d2a37c16b19c5da15ea31116959c15a101a34415629cc9a09aa2e914259c7ea031a28f14599b3aa0baa19614bf9af49f8ca1ea13339a739f22a15713119a2c9fd0a0ee12f899f89ea0a09a118799d89e96a0581191997b9e4ba0090f91997b9e4ba0090f00004b01370c4b8100004b01370c4b81831f2923b224142569235d279928482ab823732603280f2b84238025f826d62ba9210e246c25d92b051fc72001233c2cbc1a92182d1d412c920b559cf0995c2cfe9818a148a2462c9d9c1fa4e4a4092c729e68a542a6fe2b46a053a6eea6312bbba0dea6a1a7462aefa15ba73ca88a292aa42aa887a8312998a435a8d1a8b328d3a449a8aea862284aa40ca8eaa8bc2760a42fa8a9a8ed265ba4dea77da80c2689a476a748a84e2558a428a741a88e2432a40ea740a81f24e0a3f1a64da86a2365a3f6a651a8a22218a3fea664a8ec2100a3e2a67da82621f3a2baa641a88f206aa271a63ea80420fca136a64da8201f82a103a633a8541e22a1bea5d6a7f41deca092a5c5a74a1dfea070a5cea7061dd9a03aa59ea7681c9fa0f4a420a71f1c38a0c9a4c4a6411b08a08ca475a6cd1a909f5ba453a65b1a739f23a4e7a57d19f19ed2a366a5ff18429e54a30ea59318af9dfea2e2a4e7176b9dc8a2baa469174d9d8ea296a40217209d40a249a405167f9cada1f0a37715339c4ba169a30c15059c00a125a3b814be9be2a0dda28f14129baaa0b3a25114db9a75a019a27014519a23a081a11e14fc99d89f31a1a713e999bb9f29a166130e9a939f10a1f911a2994f9fc7a01211e599999e4ca07111e599999e4ca0711100006d083b0daf0000006d083b0daf00ca1eb722e32410258a239127bf28742a49224e2608289f2a29226425ef26ae2ba6211a246825f02bd71f1020bc22092cd21b4b15f31c0d2c568b0a9e199c362c429b5ea1f2a00e2ccf9d91a360a4822b70a03ca505a6bb2baea16aa639a74a2b47a2fda608a82e2a26a26aa74ba8972963a40ca88ca84f2969a401a889a8cb2878a4e3a74ea8212823a4fea74aa8752751a418a876a8a12654a4e8a776a8f32529a4a0a772a85125eaa35da74ea8be24d9a306a728a8282422a4aba6f7a77f2346a36ca623a85d22dfa252a609a89421b7a241a6faa7342173a242a6fba799205ba21ca601a8012020a2bca504a8bf1efda081a5efa7e81dc2a022a589a76c1db3a017a5eca6211da5a00ea5e6a6de1ca8a0dca4c7a68d1cbba09da496a6331c7ea083a470a6fe1b3ea078a447a6251b00a066a435a66b1aa39f4ba4eaa51d1a169f29a4a6a5c719989e05a463a50519f69d7ba317a59218b89d0aa3dea48318609db7a2bea43618469d8ba283a4f217ee9c23a254a4de168b9cb8a1f1a357163c9c53a14ca3e615ab9beea0a7a26715199b61a027a2cd14ae9a04a0c8a15b142f9bac9f93a11514429bd69f74a11714e89ae99f70a15914f19ab49f41a12b13599a8d9e4ea08e110f9af89d25a064140f9af89d25a064140000c707c40e30040000c707c40e30042720d02208258e24bd2379270429492a52221226c027912a6321c0247326382b48201823b3248c2b381d781d7d20d62bcc1835954a90192c6c8bea9e5c9e1e2cbd99a1a175a1f02b409d0ca456a4612b199f35a58aa5092b6ea114a672a6732aa0a1eaa6aba7032af6a12ca709a8292916a4c3a75ea8f628bca3cda757a8762886a391a735a8eb27ada36da74aa8ed2684a390a75aa86c26b0a339a72ca8ab25efa3e5a60ea80325a7a39da6c3a76f2419a365a6d1a7e223aea24fa6baa7df22f5a240a6c6a77022f6a245a6f7a7be210ba311a6b2a72221bca2d2a576a75b204fa2b5a589a70020fba1b3a582a7591fb3a18ea588a7af1e4fa14ea56fa7481e26a10da50ea7911df0a0f8a4d6a6031ddaa0e0a4aea6c31ca4a0c2a498a63f1c7aa0a1a494a6831b3ca064a422a6ee1ae29f2aa4d7a5501a959f25a4cda5f919359f14a4aea5aa19e29ed2a35da5f018429e52a308a58418f99df6a2bca42718d29dafa298a4cd17889d59a263a442172b9deba122a4b216fe9ca2a1c7a33d16ba9c51a166a365159e9c17a108a31e15459cb3a07ba21a157b9b68a002a2bc14179b2ca0afa11d14bb9a09a072a1df13949ae09f47a189136e9a879f2ba19012ea99699ffea0d412289a179f9ca06013289a179f9ca060130000b1840e02b1040000b1840e02b1043c20c3228b2464245b2241279828cc29f3220926fd27872a762128259c263a2b7520a0234625782b9d1dfa1f14229c2b5518e30e6216cd2b2a949d9e4c9fe22b349c28a296a2052c4e9e51a4c2a4772b3c9f05a5d6a5152b65a0f7a5fea68f2a3ca1baa608a8c62909a252a734a846292ba302a8b2a8f3281ba3e4a779a8642896a3f7a78ba8f7274da4c6a740a81f2799a46aa774a853264ca439a744a89525cfa3eea60ba8d42416a4d8a6c1a76724d3a267a6a2a79523aaa23ca6c8a7c422bea248a6bda7392280a247a6e8a7c52142a20ba6baa70721c5a1b1a57ea774207aa185a576a70e2081a185a580a71c1f6ba155a54ea7c31e0ca120a5f9a6f91dcfa0efa4e2a65c1da4a0d6a4daa6e01c7ca0ada4baa6a41c56a099a47ba6291c3ea070a44ea6eb1b18a049a411a60d1b0ba045a4f4a5bc1ad89f48a4cda5691a5d9f23a497a5f719c59efba355a58b19479ebea317a51419ff9d3ca3d4a49618bb9db2a282a427185f9d5aa241a4b617319d0da215a44517e69cb3a1c6a350167f9c4fa189a3d215269cfaa04ca366157b9b8fa013a3f314dd9a4da0d5a29f148b9a23a0d1a21414529ad39f53a21813469aaf9f47a1e512469a439fafa0e5115699da9ea7a07e121c9a029f9da01d141c9a029f9da01d140000c28e85902f110000c28e85902f112f21012621282c2857224327c728f029fc213126f027842a09218c244226eb2a4f201523ee243b2bb71d461e7f21792b4618129541108f2bda9328a016a09a2b259b58a269a2612b289e94a45ba4342b0aa09ba5a3a59c2a61a111a683a6eb2954a160a683a7472928a190a6e0a7d0280aa253a730a89028c3a2c3a761a82428e7a2d7a79ca882270da307a8c1a81527b3a28aa775a80c2696a22aa742a838257aa2daa618a8962470a288a6e2a71f2462a240a69aa72a2345a204a683a7a92241a2e9a554a7f82112a2d6a546a79021d6a1a1a54fa7bb207fa179a533a7522023a166a534a7d61fe9a027a5ffa6fc1ebba0faa4e1a64b1eafa0daa4bca6b51d95a0aaa49aa6171d86a079a44fa6951c5aa069a41fa6601c34a052a40ca6e41b31a053a4f1a5a71b1fa047a4f2a5591bf19f4da401a6f91aa59f62a40ea68e1a2f9f43a4d4a5111abc9e0da48aa59019509eaba335a5bb18319e3ba3eda45118e89df4a2a8a46f178a9d8ba26da4da162b9d22a23ba45a16ae9cb6a107a4dc15449c4ca190a36e15d69beba017a3fe14289b9ea07ea2a414af9a3aa0c5a19614539a09a075a15614159aa49f1ea11b14ec99599ffea033140a9af19e9ca0d812e8998e9e4fa05913289a719e68a05a12289a719e68a05a12000009963298f307000009963298f3071222622655285b28f522c827e128bc2918213726f527142a082081242d268f2a721e99227324d92afe1b521dda1f022bfb14f8944396322b69931a9fdd9f282b479a04a21aa2002b8e9d47a489a4d52ad19f89a5d9a5a12a90a0e7a5a5a6f3291fa12ea6f4a67829d1a1b4a67ca7c92857a338a705a87a28d6a35ca74ba8db2766a331a726a8e226f1a252a74ba86a265da200a719a8972547a2d1a6d5a710254ea280a6a9a7922440a227a653a7152436a2efa523a743230aa2afa5e4a68422e7a161a5bfa6dd21ada13ea59da64c219ca123a57da6c9209ca11ea5a0a6452092a116a593a6f11f86a114a5bba6e51e53a1f0a4b0a63a1e19a1c3a480a6e71da1a080a435a6421d78a06da40aa6c61c37a056a400a6981c05a04fa4d4a5221cd59f34a4c4a5ed1b969f25a4aea5921ba29f2aa4c2a5a91ad09f45a4e3a5461a969f27a4cca5c919dc9ef5a3a1a53519289e8aa34ba5b618c49d3ea3f3a49718889df9a2bca448184b9d95a27ba471171b9d2ea23da46f17d19ccca105a4e516719c60a178a3f415379c15a1f9a29215a69ba0a082a21215eb9a41a0c8a1aa147d9afb9f3ca16014349a909ff3a02514d799349fd6a0fb13ee99f89ea3a025137f99a69e89a0d112c898e09d9ca0b613c898e09d9ca0b6130000e1934397d6090000e1934397d6096a2394263b284e288222b227e928a0295821cf25cd27c429082048248f25532ac21e6d214723ae2a8f1baf19a11dda2a3a10369b0d99c32aea9439a053a0c92ac09934a263a2a72ae39c15a444a46b2ab29ef8a479a5572a26a1e8a522a6f429e4a022a608a72b290ea124a64da780289aa1aaa698a7232857a229a718a8ce27d0a238a715a8ea2630a2c3a6f9a7ce25a9a1a9a6c1a73525d0a184a6a2a7bf242ca25da694a74e241ea203a63ea7ac2313a2b5a5fca6d92203a27da5d1a64822f1a152a5a9a6ae21dfa10aa56ca64b21b4a1c6a433a6b92088a1d0a439a6642046a1ada433a6ce1f20a1a3a425a63d1fd2a093a415a6ab1e94a07fa428a61b1e4fa048a4f1a57f1d1da028a4b5a5ba1ce49f1aa4a2a5491c789feaa369a5b31b1a9fa1a354a56d1bd89ea4a367a52c1bfe9e0ba4a4a5df1a339f4da422a67f1a179f66a425a60d1ab69e32a4d7a56d190d9ec7a371a5db18aa9d73a324a56618679df0a2c7a4ed170e9d47a248a41a17bf9cc2a1eaa37116719c46a162a3e815379cfea00ea38815039cb6a0b3a23815439b59a038a23a15a59a05a09ba1d514399a6f9f21a18314bb99de9eaea0371452997b9e70a005143799299e30a03213d398e79d36a00014cc98b19d00a04911cc98b19d00a049110000028fd29067020000028fd290670277216426052836277b2109278d28a7282921ec25e2273229441f27244d25f029381d40205621532a59189d0e4f198f2a52894e9dae9c7b2a5497b0a074a1932a489a40a2eaa2672a649c93a31fa4122a859e75a4d1a4fd297b9f34a5f6a5a529a19f94a588a6d328b6a083a669a771289ba1f8a61aa80f28e9a183a75ea8ac278ba125a72aa88e26c6a190a6c6a76525b5a15da69ea7ca240ba22ea66aa75524e3a101a643a7d123ada1bda509a70f2366a171a5bba6692228a107a535a6df21eca08aa4baa55e21c9a05fa488a5e620c7a03ba479a578209ba010a461a53320a3a04aa480a5901fa0a072a4f4a5021f7aa096a434a6571e46a06ca405a6ae1def9f09a49ba5121d769f44a324a5581c0d9fc2a2c4a4371cd19e7ba28ea4b21be19eaaa29ea4051b719f34a310a5dc1aa99ffca388a5121a669f30a4cda5b519069f68a403a64c19aa9e5fa4e3a5e118529e39a48fa5b818f89d7aa314a50b18dc9d02a3d1a46a17bd9d7aa26fa4b6164b9deaa120a49f16ae9c81a18da3a515459c12a100a33315c39ba0a05ba25e14079b26a0c2a14c14379aa09f12a1fb13f2992d9fb6a09913bc99d99e7ca053138899a69e62a0ae1383995f9e28a0e3122f99e19dd59f2c13ae983e9d589fc812ae983e9d589fc8120000138e9590bc0b0000138e9590bc0bf12165263928a026c3213e279b282228e02056263e289b28421f90239b250729571c341d4a20a8297a184c9b5396082a4a09a69fae9f302abe95f6a043a1342a52990aa241a2162a289bb4a22ca3e329089dc7a31ea4a429d49efda43da521295fa01aa6f5a6de2892a053a69ca72628f5a062a6bea749279ba1a4a6baa75d26d5a193a6c9a7cb2567a15da662a7282560a10aa60da7922482a1aea5bea6f72360a18ba597a63a2333a13da562a65f2204a1fda43aa6cb21eda0c6a4f3a54921b0a067a482a5d02097a00ba41fa5a12064a094a3dba4792057a06ca3a5a46a2073a08fa3d6a44e209ca03fa499a5042096a0b1a42ea6421e8da096a411a6c81cb49fdaa355a5421cff9e69a27ea4c81bed9ea5a1d0a3251bed9eaca19aa39a1aa99ee9a104a4221a659e64a26ca42c1ab69e6fa347a50f1af39f5ba4fca53719db9f8aa43ea6fc18879e3ba49ba59b18d79da3a32ba551188e9ddca2b7a46a17289d4ba25aa4a916ec9cd7a115a4ae16b89c6ea1a7a32416869c10a106a3ab15459cbca083a2f514dd9b67a00fa2fb142d9b15a07ea19e14aa9a6a9f06a13d14149ae69ea4a061137999619e4ba0f912f598f99d05a09912c498ac9d7e9f57122b980e9dfb9e0e12d197c89c799e6710d197c89c799e67100000648e1e90c6800000648e1e90c6804920b5256f2781258b2097265c28b82606227c26662854264d1d392287258226e2149197db98af285f88bc9e1a9e45297691669fee9d98291a9578a0da9fc429cc9744a164a1dc29869affa148a295297a9c0da399a36029fa9d46a4a8a4c128ae9f3ea511a65f28a4a008a627a7c12755a158a660a7c526aba14da647a7e9257aa113a61aa75625c8a1d1a5a7a6c82435a191a587a64b247da134a501a68b238fa124a554a6d32253a143a556a63522baa005a517a6942193a0d4a4dca5e02083a09fa4afa56c2082a038a44ea5bc1f8ca05ea38fa4f61efe9e1ea271a31f1f249f79a075a2b31fc9a037a443a5e61f52a1afa59aa7e91d45a01ea47aa5781b949ea9a276a41f1b699e50a26ba44b1c139e9ba09aa2231c7b9ded9fe2a1481a4f9d69a03fa27519419d4da1aea3e518f89d94a37da5c918dd9eb2a4a5a67018529fc2a48ea62d181fa0afa42fa60518e99f27a471a52d18019fc4a278a45017899dd8a1f3a3c016a99c67a164a32d16589c10a1f3a22616339ccaa096a2d015149c89a027a28215cf9b53a0d9a14115939b1aa095a10915f99ab79f49a1bc14229af59ea1a051147499269e30a042132099bd9d08a0ed1241997f9dc79f5a12bb98159d09a088117898e29c8a9f22117898e29c8a9f221100009391d992a20f00009391d992a20f4f1f272434255d25f81fc2244626872500221a2877297125b01c0621e4232825959ad1a4e5a57a24c406089eff9e86248a14a2953d8c2d255e079c9a289654264195339dbc9b6a281f982d9fb09ef428b59937a048a0a6288d9ccfa1eca14628af9eeba4b1a5c12739a0e6a512a72c266da09aa5aba67b2584a045a524a60d2572a02ba5ffa58b245ba0e9a4cca53b2447a0b6a4b1a598235da0c2a4b6a534236ca0caa49ca5a62293a0b3a4aca513229ca0a5a497a59221b3a093a491a51521aca084a474a57a20c6a055a45da5122081a0fda310a5171fea9e3fa3a3a49d1d7d9d81a129a3871ea5a17ba5d2a6f9225c9ea1a4bda53b1d57a0aba294a4e71b14a031a22fa4351cef9d1fa1eca2071c869d95a033a2081c509c289db89ff71a099ca59c5c9f91170d9d17a065a12f17d99d4ca3cda4d316db9f71a532a7d618b59f4aa5dea6d018949fb7a426a66d18f69e29a4afa58c18379e98a29ea4b3176d9d8ca1e6a36916de9c2aa162a3f715409cd3a0e6a28315cc9b78a05aa21a15419b37a006a2d114139b0aa0bfa14614849a7f9f74a10214d699f39e11a182134a995a9e6da005131299f39d26a01e120f99ab9d00a0e5110599759d7b9f3c11a198ff9c6a9fe9101f98a79c9d9e03111f98a79c9d9e03118184518e858caf178184518e858caf17c91efd225024b224b41d1821fc223424b41d4921f3239e259614e99b339d42269e18f61c381ee826f21756195e1cd425c915e714fb1a90253c1224905d160c25750593924011ce23108c6e8fab1545229a8ec70fcb181322b395659211199824d29f69a5bca55c26239d57a333a4f5231d9d73a229a32323bb9dbfa284a34223649e4aa31da41e23059fc1a371a4e722649f08a4a8a491228d9f0ea4b8a40522a49ff2a3c4a4a221bf9ff1a3c7a41f21ca9fdea3bea4b120e89fd8a3d4a44f20d59fd1a3bea41520ef9fc5a3d2a4b41f06a0d9a3daa4051f699f46a383a43d1e069e01a228a3c81c1890b6919f9439101d99a49a509e6d14e39c4fa020a24a19b19c90a033a2bd195a9dcda018a3c7195a9d1ea0e6a11519719a4a99f29bd4184d973918b7183918b8970a179a8d0912309fe4a4d2a6b6170aa166a7ada8a819db9f54a595a60019ed9e44a3d2a45618439ee3a110a48c177e9d41a15da31f17b39ce6a016a3a416629c89a05fa22516029c3ca0baa15e15be9bfb9f8aa10f157c9bba9f6ba1e614279b679f3ea1b1148d9af99e1da16c14139a809e9ca02b1493991c9e26a05f131e99aa9da69fea12b398559d1c9f95129c981d9dc79e6f117f98f09cca9e3d1259975f9c139ecc1159975f9c139ecc1100006b909490d20800006b909490d208be1c2c21ae22f522cb1dfb20b9221524b519051c971d0c21a313cb18981a741c91196c1e78206324fa189f1c7a1f432509163e16bf1b6b25460ec894350b4025588edd9961964d252f94569c1a9a2925d196609d869cba246f942e9c199b6c22388dfc9431931f1cd0996d9ddf9da920009c08a05ea0b421af9caca03aa1e5212a9deea071a1b1219b9d6fa101a29421279ee6a1bba25121879e2ea268a3e620b69e75a2a9a3a720f89e8da200a44120f79eb1a21da40b20109fe6a231a49c1f399ffda241a42d1f839fe6a24ea4b71ebd9ff5a25ca48b1e00a0eca27da4111e8f9fdea287a46e1dbf9d3ca2daa3371c4b9c5ea0e1a1171a5f9c02a094a16f19a89c46a0eea15519e59c9ca051a24a19c19cb5a0d1a28519c19ccba0dca2191a399ab19c889ef718d91b93266d27110da5a360aa1dacad1b28a0d8a5d1a60d1c389d70a1cea30e18269dfca0eaa27017249cb5a06ea20617469c64a024a2a016b39b1fa0d7a13816679bf29fada1a1152c9b929f76a15d15009b579f41a133157a9ad49ef0a0d614089a5a9e99a080148399d19d38a01f145299779df89f55134e992c9d889fef126099149d089f57121999db9cde9e9712f898c89c969e0a12c798b89c9c9e68121e98329ce69d62121e98329ce69d621200008f8b278a600800008f8b278a6008791b6920c221f0216b1ad61e492093220516d81a411dd420fb18571d3e20b3205d1a8f1e8c20a723d1188b1cfb1e6f24ff14a915031ac1241a0e8a92cc0adc24a18b1199209606256194549cc09b1025d098279f1ea0dd24b19a58a0e4a0062476983e9f05a08b225e99f89e439f97213c9a719ff39e3721ab9bfc9f32a0f0204f9c5da0e0a0a120be9c9ba02ca15720229dffa0e3a13320779d52a139a20120c29dada1b6a2b31f0c9ed5a1fda24d1f269e13a241a3e31e549e1aa293a3a51e489e3da2aea32e1e579e3ca2bea3ba1d2e9e1ea2aca36e1d389e16a2cda3ee1c409e06a2d2a3941c069ea1a14aa3f41b949d1ba1bba2051bd39cbaa036a24e1a649c79a003a2c619539c62a0eba14c19779c78a0fda10d19989c6ca0ffa1ec18f69c19a0cea16518ba9ae89df29f7d15fe88dd8c6e8f56021597009af89c6210b19ccc9ef4a06916e69b459f30a12b16219b199f2da106161e9b0f9f12a1a515ef9aed9e11a12415ec9ac99ed3a0fa14a09a6b9e72a068141c9a209e38a02814bb99d89dfd9fed138099a39dbe9fa6134299749d8b9f661312994f9d829f3413ef980e9d4e9f7512dd98f59c399fde11dd98d49cf79eb711cf98aa9c9d9e1511a4987b9c179ebb1140982c9c699da81040982c9c699da810e4026912bf15aa09e4026912bf15aa09fa1cbe1e2620fc20cf18491d931f83213d17531c251eae203d19b71ced1e0421141a651d142098223c18ea1b4b1ed923831469162b1b1e243811e288e3133c24ef04f796b89550240b94039c5b9c4a245798dd9ea49f01240c99819f4da0072300992f9f22a07722af99709f3aa0f0218e9a08a07fa07b21509b27a086a0d020089c3ba0bea05c20699c72a011a10f208e9ca8a05fa1c91fd89cd9a0cba12d1f209d22a12fa2cd1e6f9d60a185a2681ea69d86a1b2a20e1eb29da1a1e3a2af1dc49dd8a144a3901de89de2a168a3641df49d04a29aa3011dfc9d0fa2b7a3c91cb59dcda153a33e1c5f9d72a1e1a2ba1beb9c0da171a2bb1a869cbba01ba2041a319c78a0e6a16819019c44a0c6a12819db9b1da0c3a1b818069c15a0cfa19d180f9c10a015a274181b9c1aa01ea2131841997f9df39eee140c94a599b89bb1116a98019c369e4d110f9b659d15a00910cb9a459ec8a02614d09a749eeaa07014c19a769eeda05614889a5c9eb7a03714519a3c9ea0a014144e9a269e76a05e13279afc9d6fa09812099ae79d4aa06d12c899bd9d34a040129499859d02a08812cd98229d7c9f97116998a59ce69e1e110898609c9d9e66101498529c759ede0fdb972a9cab9e3010d1971f9c1c9e4411d1971f9c1c9e44110000000000000000e4026912bf15aa09fa1cbe1e2620fc20cf18491d931f83213d17531c251eae203d19b71ced1e0421141a651d142098223c18ea1b4b1ed923831469162b1b1e243811e288e3133c24ef04f796b89550240b94039c5b9c4a245798dd9ea49f01240c99819f4da0072300992f9f22a07722af99709f3aa0f0218e9a08a07fa07b21509b27a086a0d020089c3ba0bea05c20699c72a011a10f208e9ca8a05fa1c91fd89cd9a0cba12d1f209d22a12fa2cd1e6f9d60a185a2681ea69d86a1b2a20e1eb29da1a1e3a2af1dc49dd8a144a3901de89de2a168a3641df49d04a29aa3011dfc9d0fa2b7a3c91cb59dcda153a33e1c5f9d72a1e1a2ba1beb9c0da171a2bb1a869cbba01ba2041a319c78a0e6a16819019c44a0c6a12819db9b1da0c3a1b818069c15a0cfa19d180f9c10a015a274181b9c1aa01ea2131841997f9df39eee140c94a599b89bb1116a98019c369e4d110f9b659d15a00910cb9a459ec8a02614d09a749eeaa07014c19a769eeda05614889a5c9eb7a03714519a3c9ea0a014144e9a269e76a05e13279afc9d6fa09812099ae79d4aa06d12c899bd9d34a040129499859d02a08812cd98229d7c9f97116998a59ce69e1e110898609c9d9e66101498529c759ede0fdb972a9cab9e3010d1971f9c1c9e4411000000000000000000000000000000005014f81aba1bfa1f8320342212247527e22101242c258d28ad22ed23d0244c291e229e212723a929e921f71d6920192a4a21da0d51185b2af11f2a9ce19b4a2a1a1d08a0769f192aed1828a1e6a0c729dc8d7da155a12829629ca6a339a4422895a2dea96baade29d1a2e9a97cab8f2a0ba321a87ca8a028f0a3a9a666a7862658a475a66aa7ec2558a428a612a729252ca456a63ca70e2509a3faa476a59f246ca0e5a12aa156256ca0949c161b7628fda49da9b7aa499927a386a830a9e1941da092a525a7359916a131a5c4a6a7a30ca2ffa416a53da883a122a44da5dea9d7a138a486a538a932a0b7a34fa547a124a215a73ca8221dfc9ec3a2a9a45b1a369e72a285a4ee1af19d35a25fa4561a369e2ea234a4381ac89de6a10ba44c19859d95a1c5a3f318169d43a15fa39918ba9c04a108a353187d9ccba0cca2ab174f9c9fa08da24d172e9c8fa072a21c170c9c8ba03fa27616b49b51a015a22416799b32a0e6a1e615459b16a0bca14a15fd9aef9f93a11115ca9ab49f5fa18114569a899f32a15b14289a8c9ffca0f013c299479ff0a0a7136c99e39e96a03d131f99489e29a01913ea98129e34a03d129c98e39d22a00e125698939dce9fcc115a986f9d399f28114597f79ccc9ebc0e5598f29c3d9eae0f00000000000000005014f81aba1bfa1f5014f81aba1bfa1f8320342212247527e22101242c258d28ad22ed23d0244c291e229e212723a929e921f71d6920192a4a21da0d51185b2af11f2a9ce19b4a2a1a1d08a0769f192aed1828a1e6a0c729dc8d7da155a12829629ca6a339a4422895a2dea96baade29d1a2e9a97cab8f2a0ba321a87ca8a028f0a3a9a666a7862658a475a66aa7ec2558a428a612a729252ca456a63ca70e2509a3faa476a59f246ca0e5a12aa156256ca0949c161b7628fda49da9b7aa499927a386a830a9e1941da092a525a7359916a131a5c4a6a7a30ca2ffa416a53da883a122a44da5dea9d7a138a486a538a932a0b7a34fa547a124a215a73ca8221dfc9ec3a2a9a45b1a369e72a285a4ee1af19d35a25fa4561a369e2ea234a4381ac89de6a10ba44c19859d95a1c5a3f318169d43a15fa39918ba9c04a108a353187d9ccba0cca2ab174f9c9fa08da24d172e9c8fa072a21c170c9c8ba03fa27616b49b51a015a22416799b32a0e6a1e615459b16a0bca14a15fd9aef9f93a11115ca9ab49f5fa18114569a899f32a15b14289a8c9ffca0f013c299479ff0a0a7136c99e39e96a03d131f99489e29a01913ea98129e34a03d129c98e39d22a00e125698939dce9fcc115a986f9d399f28114597f79ccc9ebc0e5598f29c3d9eae0f5598f29c3d9eae0f0000fe13271737110000fe13271737110b22172513275828352431253426002aaa226c246825062a1b2272222224652a512292200522cd2a4e22871d5920492bea20280fa41ba92be81e709a9c10872bcb1a479cfd96f42ae6176f995b912e2a900e49910c1c882993a041a591a5522a8fa401aa4eab2d2aa5a571aaa2ab0929b1a578a963aa682841a582a845a9282729a48fa64aa70f2660a335a479a452255ba209a189a099247ea05b98d2161e25aba2509e5f98062267a3bba7c4a88ca05fa3c3a7dea88fa48ca177a562a7e0a507a1e1a40fa6d4a699a220a51da609a6e9a1d1a518a7ada452a250a784a8a4a380a2b0a828aaae9d53a27fa8daa995140ba0cfa536a8651a2fa00ca51ba71e1a899f7aa4c2a6021a579f1da4f2a58519b89e3aa3d1a434190d9e9da270a4d3188e9d50a251a49b18429deba115a45218cd9ca6a1b6a31218e49c4da14ea3a417f89c09a1e4a2ab17009dd9a091a24a17f49c9fa061a26c16cd9c72a017a21a164b9c58a0eaa17d15bd9b38a0cca13515389b0ea090a10115e69ad59f38a16d14a09a889fe0a035145b9a139faea046130b9a9c9e64a0cb121999199e22a0d012a498b59df89fef116798959db59fce1156984a9d7f9f8f117098199de39e7b10ae97a59c229e39104c97329c169d400e4c97329c169d400eed08b5135e144511ed08b5135e144511442384262128af284f24ec262f286a2a2f24f32583272b2b8023e5243726c62bc32224238a241e2c5120fb1ed2201a2ced1fab15031c0c2ca81c22990991e62b1b19ea9da49a772bba1452a0649efd2a309bfda262a2752afda026a695a6132a2ba4f3a8a0a9222aefa46ca951aab2295da5daa8ada9bc281aa571a829a9032885a4f0a660a7bb2645a4e5a43ca52626eca379a306a4712513a380a357a33424fda2eca41ea5902014a45ba653a7cb18f3a345a784a8289c27a31fa7a3a82aa00da28aa615a86ea179a147a6cfa70fa18fa19aa622a8949c28a28fa7b2a8cd9354a227a847a9d11290a1eaa715a9dd1757a1b6a690a86d1761a195a5eaa73718c0a0faa4d8a6311915a071a417a683197e9f07a480a55619e79e71a32aa5ee183c9e33a304a50f19e19dbba2bca4bb186d9d5ca270a41d18249deaa11ea4a717c49c9ea1c1a32f17839c68a15ca3d4162b9c18a1dba27016079ce6a082a21e16ae9ba7a02fa2be15939b62a0d6a16815789b2ea098a1b914209b05a047a12214e49abf9f15a1f713709a5d9feba09113f299eb9eaaa07d12b699709e5da00b12a699199e22a0b8116b99d29df19f87114499a09d939fd41028995e9d659fa910e0984f9d619f20108999d69c149e190d8999d69c149e190d0000cc896a844a010000cc896a844a0116264b284a29be29312555283c29fb2a25249e263928602b9d237025b026142c5d21f92278246b2c811f811f1a21792cc71e1e19611c612cee1a63993891352c4b1428a0779f552c769ab8a369a3ef2b1ea093a5e2a5132b96a205a702a8cd2ab7a31ea8cba8242a84a49ea84ea981291aa59ba86da9d62863a535a8c9a835280fa6cfa755a85e2746a5e4a695a7412695a429a6a6a64c254fa4ffa57ea6b02448a447a62da7b52348a4d2a6c5a78c206aa460a74ea8d11939a587a771a8418e0ea49da7dba8679459a388a7afa8279415a459a78fa8c013eca23fa79da81a1808a29ba7e0a88618eea1aea7d6a89719c7a120a7a6a8fd1a4ea146a651a8421bcaa098a5b2a7f31a3aa003a5caa6261a10a08ea411a6091a759f16a485a50419b29ebea338a5b118389e3da3fca46318a09da8a2bca40918569d51a270a491171e9df2a146a40917099db5a1fea3ad16c99c79a199a35416b69c5fa14fa31216939c39a11ba3d615569c06a1d8a21b152f9cd8a098a2de14bc9b9ba048a29414349b5aa0f1a1e813cb9a19a09ba17113269ab89f23a102136799fd9e97a0f312ea98749e34a0ec118f98009ec79f92116d98cc9d7a9f61115f989a9deb9ec110d097f39c7d9e64113198f29c6e9e51123198f29c6e9e51120000b5897683ce830000b5897683ce837c241e281a2981290325332803293b2b3024da2677289e2b50233b25c726252cef2142249e25972c9b2051208722aa2c341c59166e1aa92cc28cda9dbe9d8e2c999a2ea239a2672c549e6ca4c6a43e2ceca0cda58ca6da2b28a24ea706a8192b8fa410a89ea8202a9ca47fa834a9a32979a58ea815a92929e1a464a8c0a8812879a4e6a751a8e62796a446a7c1a76e2681a4e8a69aa7ac2560a4c5a686a7c0243fa4cea6f4a7b223e6a3ffa630a88f21a1a338a75fa84f2091a328a78ca8281eaaa33aa770a86c1c60a311a774a8fd1aeda271a7a8a89d1a72a294a7e6a81a1b14a294a73da9351a0da258a71aa9581acda106a7daa87f1a67a177a68da8821a14a1e8a540a83e1ad3a06da56fa70c1a99a005a5a2a6151a4ca0a9a45fa69419f99f32a4cda592184e9f8da330a57818c49e3aa3e9a439186a9ec9a2aca4d8171a9e76a26ba4cb16c39d2fa246a46d16439dd7a110a40116ef9c99a1bca3b115879c49a149a35e15379c0ea1eca21515109cd6a08ea2dd14a79b9ea02ba297144b9b65a0e0a1fb13cd9a23a0a4a184133f9add9f54a110138f99439ff0a024131f99d59e92a02412ee988a9e61a0e011e6987c9e4fa0d41112995a9e2ba0ac108c981d9e0aa0141178985f9dd69e8b0f78985f9dd69e8b0f0000c585ac0176830000c585ac017683b8240728e42854292a25772883298b2be42420277b281f2c572409266d27862c5723b224ad25cb2cbe2086202422f52c991a4810bf17d92cdb8cff9d959ccd2ca79ae5a1e2a1bc2c4b9ffda419a5742c5ea1b7a6a6a72e2c17a300a8b3a8822b17a45ea8fda8c92a8ca48fa83ca9fa2914a570a83ba92b291fa54ea8dda86c2858a530a893a8b8274da51aa876a8ec2614a50ca85ca83426f7a4b5a75aa84e25bea4a6a772a88d2485a4afa78fa898232aa4b8a7a3a8362210a49aa79ca8d820efa364a766a8c71f36a338a779a8941e98a23ca78ea8931d59a238a7a9a82f1d15a22da7b0a8d31cdaa1e2a69ca8481c9ea171a645a8251c8ea130a60fa8a41b49a1eba5f1a71f1be6a08ca5a3a7801a78a01fa539a7d91937a0a9a483a643191ba062a409a6e318f29f23a493a5f418009fb4a33ca53218199e1aa3f3a42718859dc8a2cba4d7174b9d8fa2b3a46917229d6ea28ea41a170a9d31a261a4c416bc9ce5a11ea46016839ca1a1cfa38a15489c49a127a33215009c03a1a1a274146c9ba9a01fa22514ed9a4da0b5a1a6136d9a05a04fa12513de99909ffda0b912b6990d9fb9a0ab119a99b89e78a0f9119d99769e2ca0be119799269ed79f86115c99bf9d829f2911d1985a9df09e7e10d1985a9df09e7e10bb106e1527160314bb106e15271603142f24d2269b280f29d6247b28b7298a2b48246227c3282a2cf522e0259d27862c42224924d1259f2c852065209122f22c2a192c10461adb2cb7980ea0439fd52c9b9d21a452a4cd2c12a082a525a68e2c2fa185a687a7322cbea279a733a8472b7aa459a805a99e2acda476a835a9e3298aa599a84ea94c2943a596a830a9d12800a66fa809a91d2828a565a8e1a82327bfa414a896a80b266fa4dea769a8462521a481a765a881240da49ea769a8b523e6a3b7a78da87922dba3fca7efa8a521bfa30ea816a9ca2042a3f4a7f4a8282009a39ca7bea8071f3aa36aa7b2a8081ed6a21ba7afa8821d02a2aea695a88d1c61a122a63ea8001c2da1f2a506a8711b29a1cda517a8c81b16a1c4a51aa8ee1ad6a07fa5d5a7ff1a90a0fea4eaa6341a75a0a5a427a6b21953a063a4d5a5511904a022a49ea5f418759fc1a352a59718be9e62a32fa54518269ee3a2e3a4df177d9d85a29fa449172d9d41a251a4d616c29cefa123a46a16899cc0a1dea39a155c9c6ba169a34615279c3aa101a30815dd9bf3a094a25a14769bc0a03fa222143a9b7ca0f3a1ce13959a26a06ca12713f099539fcaa0b5117699d29e79a043114699c19e81a028115199be9e82a006100499bb9e92a06c1017997c9e3ba03d0f17997c9e3ba03d0ffd0804153016d212fd0804153016d21230234527b5283029a1247228b229af2b0324bb266028ec2bfc22cf253c278a2c62225e249a25c62c5020711fc521af2c8a1b11109017bc2c8c92e79dfa9dcb2c209d29a291a3852c1ba030a5a8a5392cfba1cba6c3a7ed2bafa2fea7b6a8a72bf5a34ea826a9012b06a54ba8f5a8d229c4a583a811a9512971a692a806a9ae28ada58aa8eea81c28d8a452a8c8a80e27dda429a8b0a81326a0a42fa8a3a86d255fa4f4a79fa8a3245fa4cfa78da81d2460a4b8a790a82a2328a495a77ea8282200a47ca787a84621c4a330a798a89e202ca34aa785a8db1fc5a216a773a8621fa2a2cba65ba8351ec3a294a64da8571d40a284a664a89f1ce3a15ca667a8631c8ca114a624a8071c2fa19ca5b0a7561bafa033a549a7a01a32a0dba42da7991a15a0c9a402a76b1ad29f95a48da6001a179f3da41ea61519869e03a4baa5b118039e8fa33ea55218e79d1ba3e9a40418959dc3a2b1a4df16479d6ea26da47716fd9c43a23ca42916d09c09a21aa45e158f9cd4a1e8a320156a9c98a189a368143a9c5ea116a32f14079c0aa1a7a2c813679b9ea026a2e113d69a2aa0a0a11913a49ae39f52a1a8127d9a909f2ba15112499a4a9fd2a0f911de99de9e7ca0ff103d99849e5fa024114799c29d469f27124799c29d469f27126416d7157b1501136416d7157b1501130c220424c224461c6f246b28ba29a72abe234f27a928002c252286253f27412c922126245d25792c981f3720ce21af2c85192b90bf17eb2c0d950da04b9ff72cc79c36a318a4b62c2ea018a5faa5472c5da165a6c9a7142cf9a258a73da8492b1ba435a8daa8c42a63a498a8ffa8fd29b6a4cda811a942290aa58ca80fa98c28fca482a8c6a81a28e0a48ca8c3a82327e4a46da8dba83f26cca427a8a9a8822575a4e7a7aea8a5244ba4cea7a6a82e2435a4b3a7bba82a230ba4b0a7ada80122eaa38aa7b1a83821a3a371a7b0a8b12052a35ea7a6a8cf1fd4a2fba694a8091f6ea2a1a66ea8f71d2ea274a64fa8a11de1a164a632a8561da9a11fa610a8b11c5da1e2a5e8a7621c07a189a561a7031ccfa019a5f9a64c1b8aa0dea401a7ca1a82a0c2a4dca68c1a4aa07fa430a6091aa09f40a4ada59119259f09a472a5c718a99e8fa32fa56b181a9e25a3e5a416189e9deaa2b9a41a17689d8aa281a43917119d4aa245a44116f49cfda115a4e515b99cada1b6a37815b69c5ea13ba31e15a19c1ea1dfa268146e9cd4a075a21f141a9c71a00ca29313239b23a09ca1fc12959add9f61a1f2116d99549f34a16f119599019fefa0af11be99ee9eb5a078106499b49ec4a03e109a99799e89a0370c9a99799e89a0370c5a15fe14621496135a15fe1462149613b21c001f2220f4203124eb270c29a92a38241a279728c62b3a23c2254d27422c42227224d8258a2cb71e7d20d322eb2cef163790c817e92c9998a4a06aa0042d039e37a485a4cb2ca3a0bda56ba6812c9ca1d1a6f2a7052c3fa2a3a761a8362b24a32ba8cba8852a60a485a829a9e3299da4dca86da94e291ba5e2a87fa9c72876a5c6a837a94228a2a56da800a92d27bba48aa821a9d5263fa439a8eaa8b7255ba4dda78fa8e72460a498a774a834244da452a778a888230ca434a76fa8b922aba332a774a8ad213fa31ca77fa8292118a30da792a86220d5a2e8a65fa8dd1f84a282a639a8de1e04a237a623a8f91d94a1f7a508a8901d32a1c3a5a4a7e11c08a1ada5a7a79b1cf6a074a598a7101cc6a046a573a7a51b8ba007a523a7a91a43a0d1a4b9a64b1a0ea0a9a480a6f019a49f76a43aa61919529f32a4c4a5ae18bc9ebea34ea537181e9e4aa309a5c017d09d11a3e2a4a2168e9dcda2baa43f16879da0a29da4f315459d4aa24fa40115be9ca5a1f2a37e14539c42a157a36913149c08a111a30613c89bdaa0b6a2b312019ba0a06da21113099b69a0eea15f13729a1fa06fa12c120d9aca9f19a1c711fb99b69f11a12412139a8f9f08a1c810a2993e9fc8a0de0fc8996e9e2fa0d80fc8996e9e2fa0d80ff516fa1505155314f516fa1505155314d41d6420da2094212b242b282f291c2bb6223e278f28802b3322ae255827272c7f215624f4256d2cf41e19204d229c2ca714eb95e410982cd1993ea197a0972c799e2ea489a4772cdca0c8a569a6562c61a201a75ca7f72bf4a150a71aa8e82a82a2efa78aa8342aa9a364a8dba8b829bfa499a830a94029e4a4d6a84ea9d62839a58fa829a92b2862a492a82ba9702728a45ba8fba83f263ca436a8b9a8972532a4f7a7c0a8f72404a4b5a797a86b24d9a380a769a8b62320a413a755a89f22aea3c9a636a8bf212fa398a621a80521b3a27aa62aa89e205aa250a617a8af1feaa133a614a8911e92a1eea516a8c71df7a083a5cca7331dcca044a53fa77a1c9da033a51ca78a1ca1a02ca524a7041cd1a0f5a4eca6061cbba0b3a486a6e71a6da08ca450a6fd1a2fa073a44aa6341a02a060a420a68119769f40a4d7a53719f89e21a498a58c18919e03a45ba54418179e76a305a5c117c89df9a2d1a41817829dcaa2b8a4ae16639d87a28da44a16d49c2fa24da4d615929cb5a1fea36315369c5ea146a39414f89bffa0b6a24314ad9b85a04fa22d14719b12a0e7a17313069c499f9ea1ab127c9bbe9f60a18d13059bd19f58a16913159b8b9f3aa17412679a6b9e51a0f8104f9ab89d679f30134f9ab89d679f3013ec16c215a4159214ec16c215a4159214331e4720d420c7219323c62703299a2aa122ff267828732bee214a252c27052c872086233c254d2cc21c2c1d6420702c9914cd9aff99962c399838a1dca1812cba9c1ea487a4672c28a0a2a5dca5392c4aa1e3a67ea7d32b80a2d6a71ea82c2bdba23ba898a8512a9ca370a807a9ac29faa3aca854a91b2970a499a8ffa8992869a46ea80ea90d281ca439a8f3a805271da415a8b9a84f2631a4dda79da87a2523a46ca772a8c724f9a316a741a832245fa3e8a642a83d231ca3c3a633a8732201a3b2a62ea8c621f5a287a62aa84b21f9a24fa6dba77f2099a2f2a57ea7ed1f73a2f2a58ba7e11e13a2d0a5aaa73d1ebfa19ca5a0a7ec1d52a169a575a7491d11a12fa557a7a81c05a11ba5f8a6741ceca000a5c3a6e31bc1a0daa4b6a6fb1a6fa0b8a4a6a6991a35a076a44aa6121a0ea049a4f0a51719a29f30a4c7a5ca18399f14a4b3a57f18bf9ec6a364a52f18229e58a3f5a4f916e59df7a2aea47716c99dcba299a41b16929d7ba267a4b315449d0ca230a443150f9dada1d0a3e414d99c57a169a38e14a79c15a1eda2c413479cc4a073a2f813769b65a0eea15913e19a2ca0baa14012829a0ba087a19012759ae29f5ea147126e9aa29f3da17211ad99539ff7a027125c9a1b9f84a0d2125c9a1b9f84a0d21290148a1371141a1290148a1371141a12841e65201221f0210123c927f528672a3323ea267a28442b66215725f426ca2b8e20f8233e25202c551d0f1fa121442c6014ca982797572cff9886a1ada14a2ceb9d44a4eaa43c2cde9f52a50da60c2cf3a053a650a7942b01a28ba73ba8052b95a22ca8c7a8202afba240a8f8a826296fa362a8f2a8c42821a485a82ca96c288ea480a822a9e927dba440a800a9f426c6a403a8bca8152687a4cea77da85525bda352a772a89024aca334a757a82024f7a2b7a601a80823e3a286a6e2a77622c5a280a607a8d82173a26aa60ea8552124a206a6c7a7cc20b8a1afa58ca70e2092a192a593a76e1f80a18fa595a76e1e55a174a57ba7c21d0ea147a555a77d1dcba01ea529a7d81c96a0f6a4d5a6531c7fa0bca4a7a6121c46a095a467a6391b41a06fa43ca6e41a11a062a409a6201a11a056a4e9a55a19b39f45a4bea51119129f19a485a5af18aa9ef5a356a55518269e9aa317a5e717ef9d42a3c8a43817b19db3a27aa486165f9d4fa23fa41416289d1aa217a4c215e49ccca1c8a36b156a9c66a16ca38f14239cf5a01fa32f14989ba4a0e2a2c013ed9a5fa09fa24e13af9a31a0a5a24712719aeb9f38a2df117f9aa29f3ca19a11729a2a9fa0a043118f99cb9ea3a05c117b9acd9e7ea004137b9acd9e7ea004131808f4101d1200141808f4101d120014352149262328452898220f284b297c2a4622cb2658283f2b1021f72495268f2b45204a23d924012c351d0e1d52201b2cf710389c1f9c302c229af6a1d9a2252c459d25a456a40e2c229f66a589a5862beba0d3a635a73b2bdca1bea747a8742a59a203a887a8d429c3a215a89fa8182980a338a8dda8b3287aa35ba8eda82c2853a355a808a9762727a333a8faa89c2611a301a8c2a8b82501a3b0a783a8f524b2a23aa74ea8412488a2e3a625a8992376a29fa600a8ce2277a268a6eba71b2252a23aa6b2a7782117a215a691a70621bca1eba565a7602068a1b6a564a7e21f45a192a560a72c1f1da171a530a7681ef0a03ca518a7b51ddaa00aa5f3a62a1da4a0cfa4aba6891c68a08da45fa6fd1b32a060a415a68f1b07a05aa404a6c01a08a049a4fba58b1afc9f45a4eaa5541aa09f4aa4ffa5011a7f9f64a40ea6ab19059f42a4c4a5cf18a69e04a474a55f184b9ea1a321a50318269e34a3e0a4af16e99deca2a6a43816989d91a271a43b152f9d28a23ba4da14c09cc3a108a47d144a9c64a198a32814cd9bfba020a3af13279b9ca093a2c813ae9a4ba0f4a1dd13649a11a091a1cb12369aba9f45a10013d1994b9f19a19d12a899de9eafa0af116699699e42a03112ae997f9e8ca0e111ae997f9e8ca0e111a600ef01d00a410fa600ef01d00a410fc122bb262c282528aa2327284b29402a77216d2618287a2af51fbb242926332bab1e79225224c02b521b211c5c1ef82bd910379c1d9c112c7697fda0a2a1112c379c0ea487a4d22b799e4aa5dda5432b4fa02da6f9a6c52a0fa1cca679a7392ae7a188a748a8ba29afa225a899a82429a9a348a8c8a88f284fa31da8c7a8e0273ea3e3a7a5a8ea2670a3cea789a842265ba396a75ea8ac25eca265a74ca8002593a2dda622a8612464a296a6cea7832335a226a675a7ad2219a2e7a538a7f62104a2a2a5eaa65c21e8a194a5efa6ff20a9a171a5caa67520afa15da5c8a61d20b1a152a5dba6391f93a12aa5e2a6831e58a10ea5c4a6ce1dfea0cda476a62d1dbaa0a5a43da69b1c74a07fa41aa6751c41a064a4efa5f81b00a046a4d8a5111bc59f2ba4b5a5c71a929f21a4a2a5fb19ae9f3da4bea5b21903a04ca4e2a56019a39f2aa4bda5f218f49efea39ca575186a9ebda35da51118089e4ca3fda4fa17c49dfca2c6a46417699da9a278a45a16069d40a235a46a16ad9cd0a1e9a37b15559c7fa17ba32215049c11a1d9a252145d9b90a04da24314c29a24a099a1bc134a9ad39f27a1ad12169a7b9fe6a06212f0993f9fd4a0c512e899f09e9da0fa11c999979ea6a03812cc98129e99a05b12cc98129e99a05b120000ee8104083c0f0000ee8104083c0fe921b8262f284828ac2345283a29492a9b213f2617281b2a2f209824fd251b2b0a1f9b219c23752ba01a6515f51b962b058abb9e319e922bde9812a28ca2952b449c2ca4bba47f2bb39e3aa5cba5102b41a047a6b8a6a92a61a135a78da72f2a80a17fa71aa85829d1a188a73ea8d128faa1d5a78ca85d28aaa200a8b5a8d527c4a2d0a7a9a8932652a279a78ba8a02539a27ca754a8402571a21fa730a8ba248ba2cca600a82e2459a241a696a75e232ca2f9a556a797221ba2b4a5fda6f921fba17ea5c1a65621d7a130a579a6bb209ea100a536a65f206fa1d5a40ba6b21f60a1cca431a6201f29a1b9a423a6a91e05a1b0a430a6051ea5a095a422a6741d65a05fa400a6e21c2ea03ca4c8a51e1cd29f18a497a55f1b5d9fe2a360a58a1a189f9aa34ca54d1ac79e9ea346a5191ad09e07a4b5a55419f89e46a41aa60619d99e5ea406a61f19aa9e3fa4b4a5ae18259ef2a372a52d18b79d84a32aa58f17769dffa2caa4d016239d4ea24fa48b15bc9cd8a10ba41615799c76a199a3b5142e9c12a121a35e14149ccca0c3a286148a9b74a03fa23314e69a1aa0aea1d213439a959f2ca13b13c099ef9ebaa0ae123c99659e74a0d7122299119e33a00812a698c79d4ca05012cf98949d1ea02d11cf98949d1ea02d110000390dbe1004080000390dbe10040857218f26462890275f221b2812297d29b721ad269228f329691f3824d225a62a6b1c48206321092bfd15508fa910422be892c69f889f422b479996a2b8a3352b5c9c61a4f2a4212b019edda49aa5c22a779f65a51da64a2a28a049a660a7b729d8a0f6a630a80129c2a1bda785a899285fa2f7a7b3a828282ca218a8dda88227bfa1a0a768a84b26daa10ea733a84e2530a216a734a8e024f4a1a0a6f7a73d24eca161a6bea79123aea116a657a7ca2257a1bba523a74b222aa147a599a68821f4a0caa4efa50921b8a06ca493a59020a0a062a483a5242099a046a46ba5b41fa5a04fa490a5db1eaca068a4daa55c1e8fa0aaa449a6a61d3ca08ea436a6001d17a041a4d4a5721cca9f84a326a5041c129fd6a2c9a4331bc79e93a294a4801a079f9ca292a4651ac49f34a3f4a4c419cc9f02a489a50919869f39a4faa5c118fb9e56a41da6cf17ad9e57a4eba52717809e32a48fa520170e9e6ca304a51916c09d01a3a9a49315a29d6ba256a49515319de1a1f9a31115c19c74a16da3b214609c0aa1d9a2dd131b9cb9a061a25d13789b3fa0d5a1b0126d9ad99f22a12e12f0994d9fafa0cf119c99ed9e85a028126599ae9e63a091125d99759e33a0dd11f298289e1fa0a8111b985f9d32a0d9111b985f9d32a0d9110000a68ba98b3f070000a68ba98b3f076b21e3268e284a26e121ce27e1280e28f220a5266c28de28cb1e1a247525d729fb1b081d731f942a8516089d1d9cce2a3d902aa179a1e82a2a99d9a295a3e72ac19bf5a34ba49e2ad69c83a4bfa4592a619e07a574a5e62934a05ca618a78029fea039a738a8f5282da138a759a8522898a17aa774a87a271da2a6a77fa87c2630a253a742a8d125d6a1d9a61da82f25c6a18fa6efa76f24b8a111a656a7c1237da1d9a5f6a6ef2241a17fa5c0a63d2214a140a5a0a6ae21eaa0f2a440a62d21c2a090a4aba5b520a8a049a444a5832099a00da424a58f20a4a0d5a3e0a43f20c0a079a3b5a42c201ba12ca46fa5501fb2a0b1a42ba6ae1d19a06ea4efa5171c879ff1a358a5391cf99ec4a2c2a4b21bb69ec5a1fea3201bae9eaca1cda3081aa99e0da201a48a19709e65a26ca40019a69e82a333a5f518c89f5ca400a61f187b9f6ba41fa6da17939e34a48ca5c4160e9ed6a34da5bb16b39d0ba3c3a465160e9d65a26fa4af15d49cf7a128a43e15929c81a1a4a33e15759c0ea102a3d2143d9cb6a072a21a14dd9b4aa0e0a122145e9be19f69a1ee12bf9a5b9f06a18a12339ad59ea5a02412a1997c9e52a0541129991f9e18a01611ee98c79d929fe9105398329d109fad102298e49cb09ef80f2298e49cb09ef80f0000c78fd18e1b130000c78fd18e1b132720a92573275c25c0200427b32825279221a926f428dc25881d93210f24d32656148998b496ba2904902fa058a0a82aa994eaa0baa05b2a5b97b1a140a2452a0699e7a23ea3392a289ca1a355a4082abf9d9ca456a5c9293d9f80a546a6412958a056a638a7c7282fa1f1a615a82828e2a145a75ea81e27c7a1d9a61aa8092660a14ba698a74c2564a119a604a7b32434a1d0a5fea6372471a191a5b0a6642395a16ca5a1a6942268a163a59aa6e121e7a026a543a64621b8a0eea4fca58f2097a0cca4e5a51d2087a06aa49ca5281f8ba0e3a3c7a4ab1e569ff1a1c6a3901eac9f4fa071a15c1f8fa052a494a5681fdda1b4a54ba7da1c7fa039a4bea5ac19b09e36a3aea4161a6a9e2ca265a41d1ca39de7a0cba2ca1b4c9d3ba0bfa13c1a389d65a02da2cb184d9d4aa16fa32a17139e81a349a51a17239fc1a48ea69616629fc2a47ca6671518a0ada426a67e15d29f2fa475a57d15c09edba28ba4a215759de8a1f9a34e15d99c78a166a35315659c21a107a35f152d9ccaa08ba20415119c74a00aa24a14d09b3ba0aca16f14559b0da069a13e14c29aa19f32a109141f9ada9e9da0be12af992c9e32a034124c99e39df59f87114399aa9db89fdd108b982d9db29f1e10ae98d19c9d9ecb0dae98d19c9d9ecb0d0000df928b9404100000df928b940410f91e7124ea25b3241b20a0252a27cc24da217228e329a125311c7a20c421de24309ca4a4eba5bf21f805b39b519cc91e8d125f949c14f51f178eb79b4398b6242c9903a104a12c2ad99b76a233a3ef2a469cc7a2afa39829799d32a4a3a4db2840a069a6a9a742288da0dfa645a87126aca049a6c8a78a25cda0b7a5fca6ec24b3a094a5a0a6692482a04ea55aa6042473a00fa529a6562380a0faa408a6ba2279a0efa4f4a5342295a0d2a4e3a59d2195a0c0a4afa51e21a1a099a4a2a57c208fa085a476a50720ada057a454a5271fada01da439a5381ec89f76a3e1a4521d819d85a267a4a31d7fa097a43fa6f021639d69a411a5a91cdf9ee7a121a4221a719f0ba220a4731b809d1ba1fea21c1b1e9d72a0d9a18c1bf89b5e9d8b9ffb1bfb9b8e9cb39fbd19919d509f1fa11e17c29d06a398a4641509a078a52fa7ec15bf9f47a5c9a694162b9fb8a429a65316a19e1fa495a5d916f49d7ca26da4e3155c9da3a1e4a38c15a99c23a146a30f151d9cc8a0a5a2a814f39b75a024a25714a79b37a0f2a11b14709b13a0b1a13e13e19a9b9f6ea1d5122b9a109f0fa106139299969e76a00c123999129e19a027112299c59ddf9ff4100f99859d649fca109098039d309ff80f0398a99ca49ea3100398a99ca49ea310f6815d8feb8d5018f6815d8feb8d5018101fd923de24f4242b1def2108249c24a01d31222a247626f20d0c9c529d69263919531d341eec27331732182a1b8726c513250aec16632681052198b3913d26b38e41995f96af240a93d596bb901e209f902c88f414d31c1f95ff8a4c1943208fa0f0a53fa70625d39cbaa2a7a3ec22f79c4da25ba37722f99dfca2fba376229e9e87a360a47d223b9ffba398a44322989f25a4d0a4f121cd9f2fa4e2a49a21da9f1ca4eda43e21d19f1ba4d8a4bf20c99f0da4dda44e20e39ffca3eaa4072001a008a4e1a44e1f0ea0e8a3f4a4e41e10a0d9a3e3a4191ec09f41a386a47d1d3c9ee1a240a4821cff95339c029e18142698cd9beb9f25143e9c40a0a9a12018ae9c3ca0a3a1dd18589d9fa0ada24f196f9d27a0e7a10119d19aab99a29b3719e2972117c6178219ee957a1a2514fa11079fc2a445a685152fa1a7a7dda80617789f5ba5d2a64317279e00a3b8a4e115de9db8a1e0a3d1150e9d39a13ea3b515909ce6a000a35b15449c8aa068a2f614d89b2fa0c4a19314789bd79f88a1e213349b999f68a1a313f79a579f40a161137b9a029f2ca10b13f099829ebaa09e127a99239e30a04f121e99b59dbc9f6b11b298709d479fb811ad98469dd89e95106898339dda9ef211d397929c409e890fd397929c409e890f00001a8dbb8d520a00001a8dbb8d520a6d1d952115234d23091ff520f8227324e718f51b911d4b216a13e618801a7d1c1a1aea1eed2086242319f31c5d1fd22529148f10cc1608268f8e949a7b9924268895989d429d0626b8986f9fd29fdd25c79986a008a14e250c985b9e749ee6223e8a069284878518f3966d9a8f9a121eb69a979e239f7820199c2ca0a9a0e720dc9cd9a053a1fe20889d61a1eaa1cb20209ee9a1e5a2bf209d9e54a292a37b20ce9ea0a2fda31d20e39eb9a215a4be1fde9edca22aa4541ffb9eeca252a4db1e1e9f18a35ba4681e899ff6a262a42d1ec99f08a375a4cb1d10a008a385a4601db49f0ea383a4d91c3f9eb7a23ea4c01b8d9cb6a035a29c196f9c2fa0aca1c318be9c5ea012a28a18f09caea03fa2b718019dc1a0bfa2ee18d69ce0a0dca221197499469c7c9e31183e1a48264127721904a31caaf5ab7f10c8a057a68ba7721a979db2a11ca46117719df3a0e5a26a16269cbaa052a23316539c75a024a2d815e79b3ca0e3a18c15689bfb9faea1ed14189ba79f6da1ac14ff9a589f35a17c14ba9aec9ee6a03914769a869e9ea05f13e399ee9d4fa0c71280999d9d10a06b125c99319d9e9f01126899199d299f6c114399e49cf99eb8112299d39c989e31111699b79c919e83112298489c459eac112298489c459eac1100005c8a80881b0b00005c8a80881b0b161ce52036225c221e1bc11e1020b3226816101b291dfc208c1af11d30201021c91a241fe72002241e19de1c121fac247a14d814cf1926252305a096d2917a25b290079c8e9a9c25cc966d9e649e9a250e9aaca05fa14325559b37a124a26624589967a0dea0fb229799b89ff89f6e21749af39f02a0c920559b41a05fa08620339c81a011a13c20ac9cc8a067a11b200e9d2ba11da2eb1f649d7ea170a28b1fcf9dd7a1eda2f51ef19dfca130a3911e2d9e39a276a3291e469e42a2c4a3f61d749e48a2d5a3851d759e43a2d7a34e1d529e2ea2eba30e1d649e4ea204a49d1c779e37a209a4451c0e9ed0a1a5a3681ba99d5aa1efa2801af89ce0a04aa281196d9c92a0f8a1f618769c7da0e8a18518aa9c93a01ba28b18e29c95a01aa27a18909d60a0aea1fe17e2999a9dac9f8a15538ba88d1990570278951a9a999d570f329cc09e0da1ec14009c719f40a18715289b2f9f24a166151b9b209f1ba15b15fe9a069f10a18b14f59ae19edda06514a99a919e8da0af13379a2c9e2aa03813cc99d59dcf9f46127f99979d999f03123299659d649fce11f8983a9d619f9e11e9980c9d169f6e11f098e99c089fe110ec98cb9cca9ec310e798b09c869e3810db98719c1f9ee5102e98289c6c9d3c102e98289c6c9d3c100000bf1229157f0c0000bf1229157f0cf81b4e1f30204f21cf18f41d14209d212c18dc1cba1e4221de19181d701f8721151aaa1d39203c230b18f11bba1e15241114b215041b6424f10dae92f40a8d24888bd599e99896244c95ac9d0d9e8324329934a005a13e24ba999da06ba1a423c29951a009a1b8224f9a42a0e2a0e221a79a61a0eda03021699b75a016a17520ea9b86a043a10020519cb9a061a1601f989cd2a0b2a1111fe99c23a11ca2791e3a9d52a187a2221e8c9d8ea1b1a2bc1da49dada1dca2601da89dbfa1fea23a1dd79df2a15ba3e01cda9dfaa17aa3b71ce69d27a2b4a3631cea9d1ba2bba3341cac9df4a184a3d01b609d97a105a3c21af89c1ea187a2c719a39cd0a036a27019529c93a0faa1e318129c62a0e1a16b18da9b2ba0c5a14418f09b21a0e0a1d017ef9b15a01aa280172a9c2fa020a2de16f199999df19e35142395e299939b35114598219c519ef010829a839d38a0b60dc39a5a9ee7a0f912ef9aa69e11a1b213d69aa79e08a182138e9a8f9ed0a05013549a509eb3a06d12479a359e79a03f12159afa9d6aa07111f699e69d4ea04e11bc99bc9d33a028117599789dea9f7011af98189d509f95107198c19cd39e47102898789c999e11105798819c619e410f52985b9c849e2f0e0e98349ce59d94100e98349ce59d941000000000000000000000bf1229157f0cf81b4e1f30204f21cf18f41d14209d212c18dc1cba1e4221de19181d701f8721151aaa1d39203c230b18f11bba1e15241114b215041b6424f10dae92f40a8d24888bd599e99896244c95ac9d0d9e8324329934a005a13e24ba999da06ba1a423c29951a009a1b8224f9a42a0e2a0e221a79a61a0eda03021699b75a016a17520ea9b86a043a10020519cb9a061a1601f989cd2a0b2a1111fe99c23a11ca2791e3a9d52a187a2221e8c9d8ea1b1a2bc1da49dada1dca2601da89dbfa1fea23a1dd79df2a15ba3e01cda9dfaa17aa3b71ce69d27a2b4a3631cea9d1ba2bba3341cac9df4a184a3d01b609d97a105a3c21af89c1ea187a2c719a39cd0a036a27019529c93a0faa1e318129c62a0e1a16b18da9b2ba0c5a14418f09b21a0e0a1d017ef9b15a01aa280172a9c2fa020a2de16f199999df19e35142395e299939b35114598219c519ef010829a839d38a0b60dc39a5a9ee7a0f912ef9aa69e11a1b213d69aa79e08a182138e9a8f9ed0a05013549a509eb3a06d12479a359e79a03f12159afa9d6aa07111f699e69d4ea04e11bc99bc9d33a028117599789dea9f7011af98189d509f95107198c19cd39e47102898789c999e11105798819c619e410f52985b9c849e2f0e0e98349ce59d94100000000000000000000000000000000027190a1f49201d224421492469255228a521af246825e228522286246c25d0293a21a5223324682a8920d01e0021f62a391d0895f70f2f2b511220a0a69f702bf59860a296a2322bd49c20a465a4db2a7e9f49a483a41a2aa0a01fa53fa60e29b0a4cba9e6aacb2992a42faa60ab2c292ea4eaa93aaac429b1a405a8a7a89a266fa4c8a6dda7702525a48ca680a7fe241aa468a62ba7fb245ea15da4f6a4bb24dda17f9d45180c284ca4c0a8dda925249ea3a5a990aa661ce69f09a57ea6ec1d28a0aaa342a5031d05a04ea437a56e1cd59e63a424a5cb19999cdaa280a4e591539de0a1b6a48c9a1b99b816571a0c9acd9f78a569a6841a069e3fa2cca4cc186e9e90a295a42d19dd9d47a25ca4f418619e4ea239a4e918de9dffa107a45818809daba1a0a30e180d9d51a13fa38117c19c06a1fca21817969ce3a0c5a2b8165e9cb9a0a0a26a16419c9ea071a231161b9c89a048a29115ac9b60a01ba2e214879b45a0e6a1b514849b29a0bca187141b9b07a097a1ea13d89abb9f67a19913539a899f3ea15213299a7e9f18a18212c7994d9f05a146125e99e59e94a0eb111b99339e35a05311e698f49d1ca00f11a798c29dfa9fe3107b98789d989fb2106298669d089f26106497fb9cb39eda0d5498f39c4b9efa0c000000000000000027190a1f49201d2227190a1f49201d224421492469255228a521af246825e228522286246c25d0293a21a5223324682a8920d01e0021f62a391d0895f70f2f2b511220a0a69f702bf59860a296a2322bd49c20a465a4db2a7e9f49a483a41a2aa0a01fa53fa60e29b0a4cba9e6aacb2992a42faa60ab2c292ea4eaa93aaac429b1a405a8a7a89a266fa4c8a6dda7702525a48ca680a7fe241aa468a62ba7fb245ea15da4f6a4bb24dda17f9d45180c284ca4c0a8dda925249ea3a5a990aa661ce69f09a57ea6ec1d28a0aaa342a5031d05a04ea437a56e1cd59e63a424a5cb19999cdaa280a4e591539de0a1b6a48c9a1b99b816571a0c9acd9f78a569a6841a069e3fa2cca4cc186e9e90a295a42d19dd9d47a25ca4f418619e4ea239a4e918de9dffa107a45818809daba1a0a30e180d9d51a13fa38117c19c06a1fca21817969ce3a0c5a2b8165e9cb9a0a0a26a16419c9ea071a231161b9c89a048a29115ac9b60a01ba2e214879b45a0e6a1b514849b29a0bca187141b9b07a097a1ea13d89abb9f67a19913539a899f3ea15213299a7e9f18a18212c7994d9f05a146125e99e59e94a0eb111b99339e35a05311e698f49d1ca00f11a798c29dfa9fe3107b98789d989fb2106298669d089f26106497fb9cb39eda0d5498f39c4b9efa0c5498f39c4b9efa0c34205722ad23d92034205722ad23d9207d24bf2793287129c6246726d027a42a0923f2254227342bf72170245625f32bf8206521f7225e2c571dca1aa01f652c8315fd9a6c17562c509850a0b19d382c879f95a1efa0ea2b51a0cba042a11f2b72a0e79d9c9dfb292aa3e9a41ba5fd29b8a46da928aacb2955a51eab04aca5293da5c2a9d9aa552877a6eba8cea9592779a4caa789a88226dba3a3a4d3a42626e9a34ea0439fe62571a0969c8c9cfc25b2a370a768a8401dc9a4fba953ab3f9fd3a434a83ea929a01ca250a6fea74fa037a192a59fa67fa101a14fa546a622a330a12aa5cba6a2a3f0a082a543a702a3e5a079a6bca8e79feea103a863a9a10a72a0a0a575a71f192ca0e4a4eda60a19659f68a484a6fa18329f19a4d2a5ae18a79e31a3b7a47718039e87a253a41b18899d3aa23ba4d617679de7a1f4a3d416fd9ca0a1a3a36d16089d54a14ca316160e9d11a1eca2b815129ddca091a26b15ec9cb1a061a21b15ad9c74a03ca2d914329c6ca011a24b149c9b46a0daa11a14189b25a0a0a1de13d19ae49f57a17e13a69a9b9ff7a075128c9a2d9fb5a01912139aa49e58a0a3110e99239e18a035119b98b59df09fd9106b987d9dd09f37106398559da39f191070980a9def9eff0e0098939c009e910e62970e9ce29c7d0c62970e9ce29c7d0cf6209b2364243721f6209b23642437211525b3288029052ac42422281629182b68245b279928372cce23bf25eb266f2c952160235f24bc2c041e9d1cd41ec62c601855991d91c42c4b9921a06d9fa52c999e81a145a14f2c10a011a358a2092c16a2d2a4c3a4132b45a455a79aa7992a30a65aa909aa802a9ca5cda9c3aacd29e7a5c9a967aa0629bfa530a9afa97d28bca4c7a756a88f276fa4eea547a6cb2611a4eea48aa5ce258aa322a5c2a5fc2387a3afa6e2a6fa1f7aa3f4a709a9f98e59a306a8e2a8f69d8da369a7b3a835a0d0a171a6e3a785a132a1c8a501a78ba171a111a68fa774a020a215a764a8029eb7a2c4a7dda84e979ca188a7d5a8be0a1aa182a66ca8951435a1a0a5a6a72616d2a0f7a4c4a6321845a08ca424a6af187a9f0ca46da52b18db9e8fa30ca537185b9e2ca3e5a40018fd9dc5a2a3a40e18829d71a25ea40217439d00a210a48716ca9cb2a1ada32016829c63a14ca3cc15329c24a1d4a27815f89bf2a07ca23215be9ba9a02fa2e614939b6fa0d2a19c14899b30a08fa1f313429b05a03ea1d412199bb69f0ea18d12979a479fdaa02e12179ace9e97a02b11c499539e4aa0cf109d99199e1aa0a1107099ec9d06a080102099ba9dcd9fc30f0799999ddd9f960f64988a9d0ba0830ffe98129dcb9e520cfe98129dcb9e520c0000e5899e850d850000e5899e850d85f425c428ea29042a0d26d0289729072c7c24ab27be28602cde233726bf27eb2c70214d23c4243d2d391d1c1e63204f2d8613b7967211232d199c63a0c59f152db7a02fa44aa4c32cd0a2b8a550a65f2c3da442a7dfa7cd2b0ea561a8a7a84d2b70a52ba9dca9de2a12a7cba9b2aaef29b7a687a995aa442999a5baa84aa96128cea55fa8e3a8692718a5caa768a8412667a4eda67fa72a253da4a9a642a77a2421a44ba731a8c0222ba4e9a7baa82b1f4ba449a8c9a8e21732a437a821a9729455a3b4a7e4a8be9891a38ca7c7a8b89940a49ba7c0a8e89583a347a785a8328c74a246a7aca8ad11faa16aa7baa8e51597a1fba685a8671932a127a623a8e219b3a07aa59ca7421a23a0f4a4d1a69819f29f84a40fa61919359f11a474a532188d9eb3a324a5d617249e30a3e9a45217b89dc3a2a1a4ce16949d5aa268a464164d9d0da239a40416169dd9a101a4ae15dc9c9aa1bca36015ae9c6fa15fa3aa149c9c54a12da37a147a9c22a1eba24314519ce1a0b0a24113079ca6a060a2d512b79b62a0fda17112fe9a22a097a11412439aab9f07a1a3116c99fe9e82a02311ec98689e2ba03310b0981d9eda9f02109d98de9d959f68109598a29d019f8b0ef097129d949e74101598cc9c849e35121598cc9c849e35120000248bb6898f890000248bb6898f898b251629542a7c2a05261b29f429642ca92409281229972c0a2301269027e32c3c219724eb25762dd91d681efc21912df48c239c5098812d8c9d58a22ea2532d2fa1b7a414a50e2d3fa315a627a7a42c85a48ca77ea85a2caca48aa840a9d02b35a5f7a8a2a9c82a76a51fa9efa9eb2947a5efa8b5a90f2910a5dda88ba98128e2a471a80ea9bc27b3a4fba789a848268da4c3a764a8462584a486a768a8502479a4afa789a86b222ca4cda7ada8b22002a4e2a7eca8291ec3a3bda7c1a8a61bdaa3e0a7bfa8a41876a3a5a79da82d1606a365a7a0a8a2150fa372a7c6a84117d8a298a706a93d184aa24fa7eaa86519d5a1c7a697a88819b5a164a644a8ae19a3a1fca503a8a6194fa178a546a79219bba010a596a618195ea0ada43ca6b518f49f3ba4bda59b171a9fa9a326a586179d9e3aa3dea46c167d9edba2a5a40616389e8ba265a4af15e19d43a241a46115729ddfa110a4fd14109d9ea1bea3b814999c5ea153a375143d9c19a1f3a23c141b9ce3a09ca20f14c59bb0a03aa2e412629b75a0eea18e12d39a42a0b1a133125b9a04a065a1d7118c99669f05a153112099c99e9ea0e2102399989e7ba0bf102799889e65a0c0101e995a9e3ea01f10b598159e08a0fb0f7a985f9dd09e880d7a985f9dd09e880d0000ec817f84aa810000ec817f84aa816a22042673278a274c255c295a2a092c53252a282c298c2c2f24bc26f5271f2d5322af240426802dcf1d741e68219c2db0933d9c7698a42d9a9d79a2afa1822dfca0e1a4a3a54f2d66a320a73ca8072daca47da868a9af2c34a5f8a8d5a92b2c6ea543a9eca9232b5ea547a9f0a9692a83a52aa985a94c2989a5dca868a97f28bfa5baa84ba9dd277ba59da814a9012756a54ba8d9a8d625fda427a8bfa8e724c6a432a8f4a8e8236ea449a804a915223da435a817a9af202fa405a8dba8781fd0a39da7b6a8bb1d3da365a795a8ca1cf8a254a78da8eb1b9da256a7a0a8651b47a24ea79ea8d21bf2a1f4a675a8011bb2a187a63ea8f01aada141a60aa8611a4ca1f9a5e0a7ef19f2a09da5a9a770198ea01da521a7d3184fa0aaa464a65a181ea062a4e0a50918c69f25a474a58b17df9ebaa326a5f3160e9e21a3f4a45716939de4a2c0a4fc15459d90a2a7a4a315329d6ca283a46515099d47a25ba42815c19ceba115a4dd14819ca3a1b8a39514449c58a117a3b213f39bfea094a230137c9ba9a024a2b612f49a46a0b2a127123a9a08a051a1be11b599869f03a15b118899199fbba00e115f99a59e7aa0c8106399579e34a018115d990b9ec39f65100699a89d609f9810d398449db99e0f0fd398449db99e0f0f8a1f83217723a71f8a1f83217723a71f7a24fe261028e02755251f29882a142c8f242a2881298e2c7b2376263d280c2d40228f24eb255b2dea1f651e56218f2dfa8c2f9c529b912dce9ed2a300a4bf2d8fa124a66ba6512d05a390a762a8e62c69a470a809a97a2c23a500a9b5a9052c08a63aa900aadb2a68a63ba92faa012adca556a9faa9762969a52ba9f8a9d0284fa5f3a87fa9e42733a59da838a9be26dea441a8fda8932578a421a8caa8bb2442a409a8bfa8fb2323a414a8d1a8b22228a41fa8e7a87f2123a42aa81ba9b020efa338a83aa9bd1f69a313a80da9a21e31a3b3a7d0a8871d18a380a7b9a88f1ca4a21ca78ba8201cc8a19aa657a8541b5aa142a61da8a71a3aa104a601a8391a19a1fca514a8061a0ca1e6a510a8c819e3a07aa5d8a74e1982a0fca4eca6b51864a0a5a42fa6541841a062a4cfa50918ef9f1ba481a57917789fbba337a5f416e29e62a301a57d16509e02a3bfa40516bb9dafa287a49c155b9d54a24ea44215009d11a21ea4ee14c19cd7a1d9a3b214729c85a177a3db132c9c3ca104a37613e99b04a1aba21013559bb8a04aa2a612119b76a0eba14a12749a15a04ea1b1110a9a3a9fc6a072108e99f19e94a03b107b99dc9e97a023108399c99e82a0050f3499c89e7ea0dd0f3299859e26a01f103299859e26a01f10331ff321f123b31f331ff321f123b31f0324362737283728272501296b2a302c7b24b727f228762c33232f26b227192de72153248f25672db81e381e6c20682d2c131f9c48987b2d8b9c0ba334a37a2dd9a0aaa537a63e2dcca2c1a736a8e72c55a489a841a97f2c22a5f5a8a4a90f2cbda551a91daa3f2ba2a555a91eaa842abba64ca9fca9ac29f1a6f2a88ea99b284ea6aaa866a9a62710a5a5a852a9a126c4a496a832a9b325cba494a853a931259da47ca845a971248da445a829a96a2380a41ea8ffa85b2257a4dba7d2a8572134a4a3a7b1a86c20fda375a7c2a8a71fc6a352a7cda8411e24a35fa7ada8ff1db9a2dca681a8f71c70a2a7a668a8231c20a295a667a8bc1bf7a156a64aa83d1bc2a1f6a501a8a21a5aa1b6a591a7311ab9a043a53fa7a21949a0f8a410a7301926a0dda4e3a60319c99fa8a479a62119fc9e49a406a643189f9e00a4ada5db172f9e90a349a54317f49d39a3f6a42216ba9dd6a2c1a4bd15569d8aa278a45f15159d52a248a49914d59c14a221a45f149d9cd8a1f3a358136f9c9ba19ba3f912339c5ea138a39c12f89b0da1b9a227125f9ba5a041a269120b9b3da0a6a1da11199b00a057a17811289bbb9f18a12d11d09a629fc9a0da100f9af89e7ea0ed0f5a99739e41a01e105499959df39e5d105499959df39e5d10c220c8214423801fc220c8214423801fa222e925ec261b2456258a29092b152c812432285229652c71222326ac27ca2c61217324bf25292d141e371e2d21552d3a16e9996598812d189c00a336a3852d2ca0c6a515a6382d8ba2c6a748a8e12ccfa358a815a9742c7aa4d8a863a9fa2b96a42aa9d6a9dd2a10a52ca9c4a9082a43a555a9baa937293aa52da9a5a99f2831a538a97fa9092817a5f6a87da9ea26f2a4a5a843a9e9259ca456a8ffa8fe2478a44da800a96d2463a438a80ea9df2348a411a8eca8a92234a4e7a7eea8772105a4baa7c3a8ad20b2a377a79ca82b2078a33aa789a8ca1e2fa300a761a8261ee6a2bfa66ca83a1d62a28ea659a8db1c00a26ca63da89f1ca2a131a615a8f81b52a1eea5d8a76c1b03a186a558a7d11aaea034a5e6a6421a7ea0f0a4efa6dd198ea0e0a4cea6a31969a08fa42ea62619b69f48a4ada5b7182c9f09a470a50318b89eb8a334a57f17379e41a301a5f616bb9d00a3c0a4f215799daba285a48a15289d4fa247a42f15fd9c14a213a45f14ca9cbda1b5a31614af9c61a130a395139c9c1fa1cca22513679cc9a061a2d5111e9c6ea0f1a15711129b21a083a19511739ad59f42a1a110029a549f18a14a10e399239ffea0a510ab99d39ec9a0c30f0d99a79ee1a0610e9b99639eafa0200c9b99639eafa0200cc51aaf1fc820751dc51aaf1fc820751df51e2124ea24e5246d250429502ae12bb924f92739294b2c57234b261228da2c17229524ef253d2dba1d9d1f6c21872d920c379c679b882deb9c82a3d9a3712d84a0cfa579a62d2d37a2c5a741a8e02c59a352a81aa94a2c0fa498a856a9722b60a400a9b1a99a2ad1a447a90faadf2928a574a91caa39291ba553a903aaaa28f4a41ea9e8a910286ba5eba8a8a90e2771a5d0a885a96226a7a475a85fa9472555a445a823a9a32463a415a8d9a8c8233aa4bfa7afa8ce2206a496a798a8fc21c1a380a786a8ea2079a34ba785a8702022a320a796a86c1f15a3dea670a8961eaba29fa63da8b81df9a13aa60aa8381dcca114a6e3a7811c4da1f2a5afa7371c2da1cca5b8a75b1b15a185a565a7e81af2a04ba528a78a1aada016a5dba6a91968a0e4a4aba65f191ba0aea470a60119ad9f76a423a63618499f2fa4aba5b617be9ec5a341a54016349e50a3fba46d16ec9d19a3d9a46515c89de7a2b5a41415a89da6a28ca4c914699d3ea240a4d813db9ca4a1e6a304135e9c3da155a373121a9c0ca1ffa25411a09bd6a096a20f11ff9a9ca045a28011e29a64a0dda1e111519a18a07ba1d610f199bd9f1ea17d10d4998d9ffda0de10059a739ff0a0240f8699219faaa0ad0da0994d9e20a0530aa0994d9e20a0530a8219b01e46206d1c8219b01e46206d1c8a1e0324fd24ac243c24e428362add2b9623072829290e2c792260260b28a82c56219d240126fa2ce61cfa1d1121212d15920e9ecc9c202d479d06a45ba4192d77a00ca6d3a6f52c20a2c3a756a8c32c3fa349a8aca82f2cc4a379a82aa93e2b4ba4b5a87ba9602a92a412a9bda9e329ffa461a90faa4429b2a43ba902aa9628cba406a9bfa9d0278fa4daa894a9d32664a482a845a9ce2546a44fa809a9f0242ca42fa8e5a8622424a4f3a7b1a80324bda392a79ba8ee22c6a335a773a8f321bda3e8a646a81a219ea3b2a64fa877203da3a2a654a8bf1faba295a638a8a41e50a284a623a8e91df6a140a61da8151d4ca1bca5c1a7961ce7a087a56ea7c41bc9a078a558a7581bdda05ea584a7011bdda030a530a7951ac4a0e0a4a7a6051a68a0a1a447a691193ba07ca430a6411906a06aa402a69c18929f4ea4bfa5ef17289f2aa48aa57c17ca9eeda354a5f716609e6ea3fba4b515fb9df9a2c7a4dc15bf9dc1a2b6a47e15909d91a28aa42c15149d31a24fa451149c9cbda1f3a36d143a9c4da154a35313eb9bfaa0b1a2cc12819b7ba05ca21f125f9b12a0d8a12812d39b9a9f76a1b2111a9b959f39a13712e79ab29f3ea11f123b9b719f1fa1d111f99bbe9e1da0ae10d999cf9d18a03511d999cf9d18a035112d19861e3320411c2d19861e3320411cb41efd23fa24a7240a24bb28512a7f2b9e230c282429312c4e220426bb27932cb12035249025d12c241c621b491ffb2cff91179f839f152dcc9c0ca4baa40e2dba9fc4a57ea6e32c7aa177a721a8af2ce6a265a811a9282c08a4d3a892a99b2b2ba404a9bea99f2a69a41aa9e5a9ce294fa42aa906aa0e298aa421a9b7a97e2871a4ffa8dca9d1276ba4cda892a9ff267da47ca857a9e62580a42ea8fda8ec2445a404a8d9a8582407a4c5a7a8a86c23bba371a79fa8932269a327a775a80e224ca3fea674a82a2121a3bca640a8bb20fda283a616a83020f8a227a6d6a7f11eb7a209a6b6a72f1e30a2f0a5c7a7821db6a1bba5bea7281d5aa195a588a79b1cfca05ea559a7091cf0a033a515a7b41be6a014a5c0a6d11a98a0f7a4a8a6ea1956a0b7a496a6031927a081a46ea6981804a048a4f0a533189e9f29a4bca508173c9f0ca4a5a59816ca9ebfa343a517164a9e41a3e4a49215f89deea2a6a43515d59dcaa295a4ef14be9d82a262a41614719d17a22aa44b144a9dbba1c3a3fe13039d67a15ca39512d69c1aa1f8a227125a9cc2a067a2af11869b66a0e8a1e511e69a30a0a9a1e610969a07a08ea14a117b9adb9f79a1a911689ab39f4ba14c10f499449fd3a08310289aea9e8da0ac10289aea9e8da0ac109e154d1c951d3b189e154d1c951d3b18931dd3226f24c82311248c284d2a832b6723db27fd28032c9421d7258a27522cb7202a248c25932cee1cc61d4d20d32cb38bd29dfd9dcc2c8b9c15a4d5a4b62c7e9ff4a5cea6992c1ba13aa707a86f2c6ea229a8c6a8002caea3c9a88ba9452b1ba4efa8cda9542a25a4faa8e1a9852958a407a9b7a9ed28b9a4f2a8b7a97128d3a4e4a8baa9b2279fa49fa855a999266ba44fa806a9aa2541a422a8baa8052595a3e3a7c2a85a24cca39ca785a8d2230fa310a74ea89d22d1a2d2a62ba8c621fca2bea621a87721f6a2a4a623a8d22080a22ba6c9a7412029a2bba57aa7811fdda191a596a7641ebca193a59da7cf1d43a160a572a7fd1c2da15da53aa77d1cdca03aa50ba73e1cada005a5dca6d61a89a0bfa491a6771a47a094a45ba69c192ba06ba435a6561913a05ea4f8a5a51801a05ea4d4a56518ac9f4aa4afa52718059f14a474a5b417969eeaa347a51f17479e84a312a57416069e38a3c6a4ee15aa9db8a27aa467154e9d5aa241a40015109d0da215a4b814cf9cd4a1d9a3f7136a9c66a15ea36013159c01a107a3c712629ba0a0bfa28611f69a62a085a23b11cd9a2ca06ca2ef10759aea9f06a2a310639a7f9f28a1ed105c9a059fa6a008109c99d09ea4a04f10069b799e4ea0c011069b799e4ea0c01192152f1c4b1e1f1892152f1c4b1e1f18c220c3255927ab2638237228df29f12ad1226e27e228cf2b4f2132252727122c4d2098232625602cac1c2b1bde1d942c6d91d69f55a0ac2cbf9c15a4dba4a52c9d9f8ca5d0a55b2cfca0f3a65fa7132ce3a144a8aaa87a2ba2a29da83ca9c52a18a3b9a854a9f929dba3d0a885a93e2914a4cda886a99b28efa3b7a894a910287ea39ba87ea91a2764a378a838a9432653a343a80da9662532a3eba7bfa89424eda277a78ba8cf23a6a21fa75ea8ec228da2e3a63aa8302272a2a6a614a87d2168a27fa608a8202162a248a6afa7b92024a21ca68da71320e0a1fca587a78c1fa8a1d0a57ca7ab1eaea1bda589a7fb1dffa041a512a7091d07a11fa5dda67f1cbea0f0a4a0a6e71b7ba0a6a446a6d61a3ca07fa422a6831a01a05ea4efa5af1905a04da4e6a5851900a04aa4d5a5d418b29f4ba4e8a59018799f5ca4e8a54718fd9e38a4b2a5de17b99e0aa465a56c16839eb6a31da5ec15499e44a3dea47515ff9deda2a6a47214aa9d91a271a428134a9d25a237a4a012d99cc2a107a42312789c67a192a3b5111a9c11a12fa31d12619ba1a08ba29711bf9a3da0f2a1bc118a9a18a08ca17b11509ab79f43a12b11c699469f2fa17211a699e49eb0a0931007995c9e25a029119499849e8ba0e9109499849e8ba0e91081130e1c7b1e7c1381130e1c7b1e7c131221c32546271f263323a828142aa92a0b226227b828392b5520fc248026f12bee1eb7228724522c6e1927198b1c792c3391de9f47a08e2c8d9aa6a380a4842c239e47a559a6482c40a0cda6aea7da2b3da18ca75da8242b01a20ea8b5a8632a12a383a854a9b529e3a3cda89aa93a292ea4d1a894a98528fba38fa871a9d5277fa368a839a9ee2699a314a8eea8fa2500a4f4a7eea82f2559a3dba7a4a8bf24ada24fa76ca8052475a2c1a626a8102325a282a6d7a754221ba229a679a7a421e3a1fda54da70a21e9a1cca522a7a920dda19ca5e8a62b200ca29ba501a7c01f47a28ca523a7ff1e53a28ba53aa7fa1d7ba124a5cca6191d0fa1d8a46ba6b81cf3a0c0a450a64f1c90a089a40aa6a01b53a067a4e5a5b21afa9f43a4b6a5d219f49f32a4a0a5a319ac9f32a49ea5f218b89f40a4baa5b81801a04ca4e0a57118989f35a4aba51218f69e03a498a56517999ed6a357a5bb16529e62a3f5a4b416099e00a3c2a43916a99db3a27aa446153a9d3fa23aa4de14cc9ce6a1dda38d145b9c7da160a39313e69bfba0b7a2e112359b85a016a22e12a89a12a076a14912529abc9f16a157113d9a789fdaa02811159a4e9fcda0a311379a1f9fa6a0eb10cc99ae9e92a027118698ce9d8ba01a118698ce9d8ba01a114b14761b1f1e45834b14761b1f1e45838120c025072739261823ae28e329b02a1d224e27cb280a2b2520ea245626f82b7f1eb5213c23302c6618f28fa517402c8c95bea0cba0462c279c58a4faa4302c289e8ba534a6092c64a0a1a68da7a72b70a184a716a8e22a11a21fa890a8272a2da242a8daa84f29c0a259a808a9dc2832a384a855a96b28fda269a83da96c2790a21fa8f0a85c268ba217a8efa8a125d4a205a8c9a8242509a370a772a87d24d2a20ba73ca8002458a27da6fca7c92231a243a6bca7172227a2faa566a77921fda1a3a500a70c21cfa169a5b0a66f20bba11fa556a6c11fcba103a558a6961fcca10ca55ba6ba1e9ca1fea430a6281e6ea1dca45ca6141d70a07ea40ba6891c99a085a41ea63f1c25a04aa4c7a5981bbf9f14a48aa52c1a3b9fd1a355a55a19099f94a34aa53119de9ebea356a50719e69e11a4ada54a18299f65a41ea61118089f68a4eca58a17fd9e56a4a3a5f9165d9e03a463a53c16ee9d8aa31ea59a158f9d0ea3c3a414152c9d5fa255a48914c69ce3a10ca426149b9c8ba189a3bc13679c1aa117a31e13279cd3a0aba2a912e09b65a02da22212179b17a099a16012459a8c9f22a1f211b399df9eb8a078111d99599e77a01b112399169e51a06d10c698b29d7ba0ba1196988e9d4ea05e0f96988e9d4ea05e0f7015ad1c721f29897015ad1c721f29897c2020262527cd2522237d28a9291f2a2b2256275429c02ac51fba24e925932b081c761f5521e42b2913fe981e91ed2ba2963da165a1062cd99b90a426a5d52bb69d75a59ca6b42b849f41a653a7422b7fa0e7a616a8822a58a1a5a795a8c329e9a12ea8f3a8162961a23fa829a9a0281fa368a849a92228aea247a842a933273da20ca8e9a8fa255ba28ca7b2a8312568a2a2a79ca8cc24e7a11fa749a83924cea193a60ea89023a5a12ea68ca774225aa1cfa524a7c22121a174a5d6a63221dea0eea428a6ae20b5a0a8a4c6a5372098a080a499a5f01f93a05ea48aa57c1f9fa067a4baa5a01ef3a0c2a448a6ba1dc6a0dca45fa6fd1c04a08ea4e3a5711c46a057a4aba5261c9b9f8ca32aa5541b2d9fdca2bba4a51abb9e8ba282a4e919179f9ea28ca44c19b49f36a3efa4ac18ca9f05a46ea5f917a29f4da4e6a58716f19e63a427a60c15959e5fa400a69c146b9e16a477a50514f99d5ca3eaa41814a59df8a2a6a496138f9d86a262a40e142d9df7a104a45713be9c79a175a3bc12789c07a1d4a23012389cc6a064a2df11889b60a0e1a163119f9af89f3ba1f410f199549fb9a09b109199e89e83a0f8106899aa9e64a06b1167997a9e36a0c210d598339e3ea09c107e98a19d05a06c107e98a19d05a06c100000da89f38481840000da89f3848184282121279f2867268c22a72745290c2808212527d5287d291f1f1d248325ea2a411b9d1cd41d5e2b8a10659f25a0752b0f98f9a2bfa3832b219c92a4fba46f2b729d22a5c0a5052b6b9ea9a526a69a2af49f50a64ea7f029eaa02da755a876296ca1c6a7b0a8e528b5a1e6a7e3a86d282ba236a81ea9ba2774a21fa8f7a88c265ca2eba7c2a8e225fda17ca780a80f25f1a1eba646a85924dfa172a6d3a74a23a2a11ba641a77a2266a1d1a527a7c5213aa18ca5e5a6672118a141a588a6ea20d2a0c1a4cfa59d20d5a074a485a56820caa04da469a57120a4a0faa3ffa4222035a1c9a3dea4b01f98a14fa444a5c81e13a053a47fa5701bc79f55a4cba5671b829fdaa34da5781cc99efea2bea4c91b6c9ed7a104a4a21a859ed8a1cca37b19959e16a204a46718769e91a26fa4ac17c79eaea351a59c179c9f65a408a600162b9f65a4f3a5fe14949e38a493a53215539e02a455a5a814d19d2da3d9a4a814289d95a26fa4b014dd9cf4a121a43d14939c7fa193a353148f9c16a117a301146c9cafa075a26013339c48a0d1a1bf12e69bc19f5ca18611ad9a319f0ea12c111d9ace9ea7a05e10ab99869e5ba03c103899369e31a012101499f99dbf9fdd0e6f986b9d569f42104b98269dea9e93104b98269dea9e93100000b18e088d940c0000b18e088d940ca7201f26e1271d25c820ca26d0284b25e1213926922852249e1da12207247e275315e1997b9b212b3893c0a1a5a1112a579624a2c4a2492975984aa39ea35b29229b3ca4dea45f29359dd2a49ba53229dc9ea2a5ada62829d09f76a673a7ed2897a020a734a8cd2857a1eba7b8a87028fda113a8d1a87e27dfa156a762a8142676a194a6dea712255da160a692a7812435a123a659a7ec234fa1e6a52fa7f52290a1c4a506a7312257a19da5c9a692210aa154a58aa60521b3a01aa541a64e2092a0f3a40da6af1f76a08ba4b3a5ea1e65a0aca3e5a44d1e43a012a21ea4281e919ef99f24a1ae1e4ea0d4a433a6971ef3a10ba671a7c01be0a0e9a335a5f818469f42a3eca4031a6a9e87a261a4cf1b4c9df2a0d1a2db1b089d11a0a8a1371a119d68a024a22a184c9d4aa15fa3dd152f9eb0a33ca589143a9fd9a497a60312879fd5a47ba6ed1025a09ba41ca6d411db9f34a478a58c12cc9e01a3a0a4ca13b39d0fa20ba4b2130e9d7da15ba3e4137f9c1da1e8a21114339cb5a031a27e13079c5ba0bba1ef12b49b2ea093a1a7125d9b02a071a17212b49ac69f61a14012f799229f26a1cc118e996a9ea8a054113d99049e32a085103299999dca9f4d109d98349d929f4d0f9c98a19c229ee10c9c98a19c229ee10c0000f58cb28d34020000f58cb28d3402b31f5e25eb2649241d209b2557274c254c235b28bb290925d11c37223d24ba24ba9c60a595a66025b590839f59a03e27940dfc9c419a0728f696b9a0a0a097284e9baea28ca3eb28e79ce3a352a4c328449d57a4faa44828969e35a50fa6c928c3a0b3a7afa8eb28cfa14ba833a9af27e0a0eba642a87825faa04ea6caa7af24e5a006a638a74a24a6a0cfa5dca6b62382a05ea57fa6c02289a031a54ea63a227aa00ea51ba6b62185a0f4a40da6ff208ea0d5a4dda58c2098a0c2a4b1a5d61fb3a0aaa497a5f11e96a076a497a5571e7ca048a482a59d1d1ea040a443a5081d4a9cd8a251a48f1c729e01a341a4211f169a96a3afa4281ba99de9a141a47b19469f30a22ea4b61a5b9deea0dda21f1ac29c44a0aba1f81ae49b939d759fe31b329ce69c6f9f181b149e9c9f7ca00717e39d68a308a59e101ca09ea557a74009ac9f4da5bfa60511199fc4a433a69613629e04a458a58514799d41a238a40e14039da0a1b0a318147a9c22a112a36213029cbca076a29d13c79b71a011a224139d9b42a0eba1db12549b1ea0a9a1ee11ce9ab89f64a14712259a2c9f10a1e5119a99aa9e8ea0f41058993a9e2ba0ae103a99e89dea9f7d100c998f9d4e9f9e0f6e98089df59e1f0e1098ae9c6a9eb90e1098ae9c6a9eb90e0000658ded8b16180000658ded8b1618f01f0d242325eb24941d8b2287243a25c41dcb226e249227e00dd09b289d6528cb180f1dff1d6d289016571615191a282710c894fd8c0928cf91049d909cb4275697299ffd9f9827e6982f9f18a07f255996289bc59bef2056911c93f7146516729f29a59aa5a51ebc9a61a056a1bb1fb89c6fa1a1a22121249eefa211a49921ce9ec8a38ba4bb21559f0da4c6a4b721879f25a4e4a44521ac9f31a4e2a4f720c19f3da4f6a4ad20d29f29a4fda43320f09f2aa400a5d01f08a018a40ca5f91e10a019a410a5791e07a0f7a3fea4061e00a001a410a5571dfc9fafa3c8a4e01c1f9ee1a259a4f51b1998ea9d8c9f8315b9980c9d809f4f146c9c5ba0c3a18e16829c3ba0bba15c18fa9c78a02ba21419ac9d0ba03ea1fe18659b88991d9d88199e963718c4188319a8968c1812141112499ff0a483a6550c47a194a7dda8a2101e9f3ba587a63514b19d9ea267a49a13cb9d8aa1afa32914089d30a136a35b14929cd8a0eca20614309c85a04ea28213c99b38a0cca10213679be19f85a1dc11329b9d9f66a1a911d09a4c9f4ba16d117e9afc9e1da1cd11e3997a9ebba070117b991f9e31a0a7103899b59db69f63100199829d589f481005995f9dec9e5e0fb698339d059ffe102198c89c609e0a0d2198c89c609e0a0d0000808dab8dd00f0000808dab8dd00f0f1d2d2216249b23711eba215b2400259618b81c801e6022be142b190e1bf71c6c1a871f2c21cc241219191daf1f7a26f2110b8b6c0c1927cd93ca9c899d5b271798fe9fcfa04127f09ab4a1caa2fd268a9ca2a381a480264f9cf6a21ba4cd24e2925f9911991d1d3d9347983d97821ab398859cf09c4b1dba9b799f1ca00420d89cb0a034a141205e9d45a1cca11e20029ed8a1f9a2f01f8d9e51a2b0a3861fc19ec1a20ba4191fd19ee1a238a4ad1ec19efca249a4401ecd9e09a35ca4cf1d129f0da369a49d1d439f08a36da4681d8b9f1ea383a40f1dec9f11a39ba4a41c909f0da390a4221c519ec8a25ba4a51a959ce9a041a22a19829c63a0d0a14918de9c96a02fa210180f9dc3a04ba22718499dfda0d6a27418d89c00a1b6a24c18ed980e9b289e1a183f17d125cc27e719bea386aa49ac7f9980a0dea52aa7c717ef9ca3a1d1a34d163d9db0a0c2a2e014449ca8a062a2d8146f9c7da025a2aa14039c4ca0e0a17814839b14a0c0a13d142b9bb99f6ba104140d9b5e9f35a1fe12af9af59ee9a09912619a959ea1a03f12ea990d9e51a0cf119b99ba9d10a07f1182995c9d929fa8107b99299d1f9f89104999e69cf19ed1101b99d69c9a9eb20fff98b19c7f9e9c10ed97329cb89e2411ed97329cb89e24110000698931870f100000698931870f10851c5121ae2230235c1c411fa0203323af16fa1b261ea121041a4a1e6020c6213b1b171f322122244419f61cca1f0125051468158219a62561855b997597eb25aa94b69dbc9d1526aa9869a0d6a0f825909b1aa23aa3bd258b9cd5a21aa4f7246e9bbda1e5a26123249a71a011a13d217f9a3ca08ca05e201b9b6ba0bca026201d9caaa03da1b51f9d9ceea092a16e1f249d53a147a2241f769da9a1cca2ca1eac9d02a221a3341ee79d49a294a3d51d029e6ea2daa37a1d439e76a2fba34b1d609e7aa218a4e01c909e74a215a4af1c779e5ba206a4741c8c9e71a21ea4051c7b9e57a20ba4701b1f9ef1a1b9a36b1aaf9d5ba1f0a28e192d9ddba056a2e518a89c90a006a263189e9ca3a011a20b18b89cb5a045a20c18dc9ca1a03ca2d817de9db8a023a2fe169398ea9ce49e4a144184c288af8a2c03ac95f999159e7a0b209c0d9f44a15b13cc9ba29f2ba1ef147e9b569f1aa17214279b469f19a15b14e79a3d9f0aa1e213cd9a019fe5a0f612a89ab79ea8a098123e9a509e40a03412d299f29de79f391176999c9d989fee103599569d599f3e11ea982f9d429f1811d0980a9d139f7c10e498f79cf09e6a10d698c89ca29e4d10ef98b79c639eb20ebf987a9c1c9e81103a982c9c7f9da7103a982c9c7f9da71000007814af15a40400007814af15a404191bce1f9b2052214519681e4820f2217118301df71e6c21161ab81ded1f1a222b1ad21d4a20a5231518351ca71e40243e131616b5199c24430b01956c8bc924628eb09b1a9bb724b796259f28a0a024239a19a11ea26d24c19aa3a1dba2fe23989a4fa14aa2da22a29ac2a0a1a1c221cd9abca083a1e020779bc9a075a13e20f39bd3a09aa1461f589cdea0afa19f1e859c17a1d1a1511ed99c46a13da2b71d219d77a1b0a2671d6f9db7a1dfa2091d8a9dd2a107a3ec1c959de0a122a38a1cc59d13a273a3331cc09d19a299a3101cc69d29a2aea3811bd19d3aa2e1a3351b989d00a2b3a3b81a679d99a11fa3bb19059d1aa19ea2d418bb9ccaa049a28918549c90a009a20b18109c62a0e0a1c417cc9b45a0dca10a17a99b34a0e6a1d316a79b32a01fa29d16379c2fa013a2e9154d9a769d199f0f130895fd99999b93102898519c5b9e9f10339aa19d62a07a0ab29a779eefa0ac11c59ab49e14a16912c59abc9e07a14812859aa79ed2a02012539a829eaea04c114e9a4a9e78a02011459a2f9e68a06410289a019e4fa0d410089ac89d2aa0a71098996f9dc09f5f10e398ff9c0d9f190f9698a69c869eaf0e5098789c619e6c0e89987d9c4f9e730eb698759c699e540e4698389ceb9d980f4698389ceb9d980f000000000000000000007814af15a404191bce1f9b2052214519681e4820f2217118301df71e6c21161ab81ded1f1a222b1ad21d4a20a5231518351ca71e40243e131616b5199c24430b01956c8bc924628eb09b1a9bb724b796259f28a0a024239a19a11ea26d24c19aa3a1dba2fe23989a4fa14aa2da22a29ac2a0a1a1c221cd9abca083a1e020779bc9a075a13e20f39bd3a09aa1461f589cdea0afa19f1e859c17a1d1a1511ed99c46a13da2b71d219d77a1b0a2671d6f9db7a1dfa2091d8a9dd2a107a3ec1c959de0a122a38a1cc59d13a273a3331cc09d19a299a3101cc69d29a2aea3811bd19d3aa2e1a3351b989d00a2b3a3b81a679d99a11fa3bb19059d1aa19ea2d418bb9ccaa049a28918549c90a009a20b18109c62a0e0a1c417cc9b45a0dca10a17a99b34a0e6a1d316a79b32a01fa29d16379c2fa013a2e9154d9a769d199f0f130895fd99999b93102898519c5b9e9f10339aa19d62a07a0ab29a779eefa0ac11c59ab49e14a16912c59abc9e07a14812859aa79ed2a02012539a829eaea04c114e9a4a9e78a02011459a2f9e68a06410289a019e4fa0d410089ac89d2aa0a71098996f9dc09f5f10e398ff9c0d9f190f9698a69c869eaf0e5098789c619e6c0e89987d9c4f9e730eb698759c699e540e4698389ceb9d980f000000000000000000000000000000006814b51c3e1dc220f2210f25d8259b285822bc258f268129ae224e259126422a4e218f23be24122b501ff71da120bd2b46154d9c099cf22b099c1aa237a20e2c40a09fa45ba5082c4fa2e3a502a7952bdaa233a63ea7bf2adfa315a7e9a7b5296ba5d9a99eaa1c2a6fa59da92baa582824a647ab8cab532a86a582a9f2a92b27a0a47aa748a84d251ba40aa7c3a7db24bda323a666a79e24a9a120a422a43c265ca5e4a688a54628d4a625acdcac2e1c65a100a772a80e1f48a2b3a53ba72b20b2a107a50ba67c1e08a1b8a4bca5761dc7a0a4a488a55e1d0ca010a412a5191cf99ea4a23ba4ab19689ccd90748c9b1578a07ea401a62317d19ee4a2eca41718f89da5a296a47e17b89d68a269a4e917099e3aa22ba42f18a49de8a1f3a34b173d9da0a17ba3da16e99c49a122a35a16b39c18a1f0a20c169f9ceba0bfa2c3156e9cbfa080a20415469c97a049a2ca14209c7ca039a29f148d9b54a00ba2fa13599b3ca0e0a1b613479b28a0bfa1b112f59a01a094a15f12ab9aad9f64a11b12459a799f30a12f110a9a5d9f01a16010cc99169fe2a02a103599a49e76a08110fb98199e15a02210c798df9dde9fd30e8698999d999f940e59986d9d479f600e5b98559ddd9e4d0d3e97f69c919e090c5d98f29c359e850800000000000000006814b51c3e1dc2206814b51c3e1dc220f2210f25d8259b285822bc258f268129ae224e259126422a4e218f23be24122b501ff71da120bd2b46154d9c099cf22b099c1aa237a20e2c40a09fa45ba5082c4fa2e3a502a7952bdaa233a63ea7bf2adfa315a7e9a7b5296ba5d9a99eaa1c2a6fa59da92baa582824a647ab8cab532a86a582a9f2a92b27a0a47aa748a84d251ba40aa7c3a7db24bda323a666a79e24a9a120a422a43c265ca5e4a688a54628d4a625acdcac2e1c65a100a772a80e1f48a2b3a53ba72b20b2a107a50ba67c1e08a1b8a4bca5761dc7a0a4a488a55e1d0ca010a412a5191cf99ea4a23ba4ab19689ccd90748c9b1578a07ea401a62317d19ee4a2eca41718f89da5a296a47e17b89d68a269a4e917099e3aa22ba42f18a49de8a1f3a34b173d9da0a17ba3da16e99c49a122a35a16b39c18a1f0a20c169f9ceba0bfa2c3156e9cbfa080a20415469c97a049a2ca14209c7ca039a29f148d9b54a00ba2fa13599b3ca0e0a1b613479b28a0bfa1b112f59a01a094a15f12ab9aad9f64a11b12459a799f30a12f110a9a5d9f01a16010cc99169fe2a02a103599a49e76a08110fb98199e15a02210c798df9dde9fd30e8698999d999f940e59986d9d479f600e5b98559ddd9e4d0d3e97f69c919e090c5d98f29c359e85085d98f29c359e85083107b084a211b6193107b084a211b619c6243328c6283c298b24e82781284f2b19240b273f283e2c6e2249253c26cd2c841f3b21d922322d47139390e41a412d1b9c76a0039d642d86a01ea41ba4392d15a342a5a4a59e2c24a363a585a57f2b3fa384a396a34a2ad6a401a601a6e82980a56ca9c4a96c29e8a5ecaaadab8629dea5f4aa25aced2867a5bba9ccaae2274aa415a8b2a8292780a3eba46fa58626a9a48ba09a9e1a26dca242a5fda50e24c2a41caa8aab349004a4f0a811aa1f9706a3e9a72da9069690a1e6a63ea804996da1cfa50fa7619949a1a6a5d6a63c994fa157a590a60e99a7a0aea4dfa5749a11a0e0a42aa7239676a1a9a654a886167ca06ca593a67519d09fa1a4a5a63a193f9f58a4f7a50d18f19ef1a37aa57f17679e0fa39fa45e17f79d8aa245a4d216919d4aa22fa49016689dfba1e3a3a515fd9c98a189a34715f39c5ea138a30115e79c12a1e3a23c14da9ceba094a20114a19cb7a05aa296135b9c81a02fa22913ed9b5fa0f6a1de12779b44a0d0a1da11ff9a20a09da15712a79ad59f51a14f11b19a9b9f07a11911a19a239fbea0c9102d9a999e57a06c1049992e9e10a02510d198c39d01a0b20eac988f9d05a0870e8298649de99f560eb0980f9def9e260d3d988b9cd09dc90cb497039cd19cba09b497039cd19cba098107bc106b15981a8107bc106b15981aa8253129372afb2959262729c529232cfe244a282029d52cf22352268727712d4021dd227c24dc2d991b8317691b112e409ac8a02ca0dc2d17a1aca4d6a4ad2d76a3bda57ea61f2d20a47da615a7b32ccaa4eda6bba7032c85a54fa8eea8f32a12a79da98eaa4e2a08a657aa75abb329eca523aae5aaa72895a688a92faa1a28d3a439a8e9a88427c8a347a612a7f72694a3baa5a2a6ba25f9a304a7b3a7d923bea48aa84ba9e41e38a495a8b8a94f0e1ca342a827a9319a1ba3b2a7d3a80b9c9ea21ba762a8c99caea101a64ba7d09d44a1a3a5bfa7949deea165a6e1a72c9b41a2cba630a87e94f0a1fca649a8570a6ea154a64fa88414eea083a566a72017c3a0f6a4b6a64d1764a089a434a63a18af9f17a471a58917ec9e83a303a5ec162b9e2aa3d9a48516c49dc5a29ca4bb167d9d65a256a4c2152a9d0ca216a46015d19caba1a9a30a15909c68a13fa3c0143b9c1aa1daa27c14099ceaa06da24414c09bb1a027a20814899b6fa0e1a1d012629b37a08ea168121c9bf99f40a15711049b879f0ca10c11999a1b9fc7a0b6101f9aaf9e89a0c40fd5994a9e55a04f0fc799349e22a0350f5e99f49d10a0ec0efd98cd9df59fbe0e1599c29d03a0ba0dde97a99d72a0a60e9298589dad9ffa819298589dad9ffa810000a190228d30100000a190228d30105527e929022b842af926aa29962a982c2d25d128f829412d1024ee265628c92d9c20c922c4246c2e10170918901daf2ea69c7ca0c09d982e93a1c0a4caa4612e48a42aa7c6a7b82d61a52fa8b6a8152defa5aca817a94a2c37a6f6a8bea93d2b34a6f7a9e5aa712a44a799aa99abd72951a60eaa36abf72891a569a93faa2b2806a6e6a88ea9332712a551a8f7a8532657a4b7a755a8082550a49ca74aa8152444a44fa8f3a82c225aa4c2a8efa9021e75a4fba830aa71171ba4b2a8bba99e8d3ba326a827a9529620a391a708a9a3974da3bba7cca8499531a3f1a65ba8b3917aa2efa689a81a0b11a23fa7b0a8ef1090a1c1a666a85b161da1f6a5dea77f18a3a05ca556a70f192ba0f8a4d9a6a318bc9f7ea406a62418099f13a460a5b8168e9eada317a553161a9e44a3dca4ea15ce9dc7a297a48515979d6ba25fa42a156c9d1aa22ca4da144d9dd9a1f4a39914e99c98a1b6a3ac13c09c77a165a35413ae9c4da132a30713819c20a1f0a2d211639cf2a0ada29011259ca4a057a23711ea9b5fa0e6a12910169b30a081a1e30f729abe9ff5a04a0f9b99f99e72a0a20e0799859e23a0340ec798279ef49feb0daf98f09dad9fc60db098b29d2c9f950c01981d9db39e330d3c98ba9c0b9eca0f3c98ba9c0b9eca0f00005291bc908c0500005291bc908c054026262a5d2be32a9426152a1e2bad2c3d25e728de29342d8723c7263b28e92dd5207424bc258e2ef518ea1a7f1fc92eb29c40a1aea09a2eaaa12da561a54a2e1da43fa78ca7f72d30a574a8caa8492d0ca623a9dea9ad2c53a683a974aa092c31a6dda9ceaac72a25a61eaaeaaa1e2abda5d1a9ebaa2229aaa58ba943aa652897a50da99da9b82700a58ea833a96926ada458a809a94225a0a43ca8d1a8f7230aa557a83aa9a821bca4b0a8b8a9cd1f8da498a8c3a98d1c1ba44ba87da9ac1832a42ea814a9a41390a301a8d2a8b30c6da3c9a7c1a8420c14a461a7aaa8c3114aa375a7c4a87c14d4a245a7a3a8531741a2aaa64aa8fb1736a229a6f9a7e61858a2e5a5a4a7fb18cfa198a521a78e18c6a022a584a6221842a0a4a40ca67817c39f27a48ca5e615e69eaaa317a517167d9e3fa3dea41615739edea29fa46615579e8aa263a47c14139e4da23ca43914929dd6a106a4d213309d90a18da35f13c49c40a133a3f612479c0aa1c7a29d12099cd2a082a25212a59ba3a02fa23511589b7aa0e2a13610d89a44a0aba10410549a19a070a18210b399679feca013105799b79e8ba0640f3899949e86a03d0f5b99b89e96a0650f5f996c9e4ea01c0ead980d9ed69fd10d8e984b9db29e040b8e984b9db29e040bfb85af8cb6873e86fb85af8cb6873e86c91f54218021d12147257e29482ace2b5225f7281a2a462d2b2468279b28c82d632166241126642edb181d18cf1da42e5e9dfda1c0a0be2ebaa1a9a592a59e2e53a41fa855a8472e4aa52fa9a5a9aa2dd2a5a2a959aac72c35a6d1a9adaa132c35a615aad3aa492b64a640aa00ab8c2a3fa6e7a956aa5f293aa6a4a94eaa862848a657a90faaa127d2a5f8a8d6a9972640a5afa853a95e2500a575a834a94f24e1a47ea851a9c32269a47ea849a9e7201ea44ea84ca9051f18a409a806a9541da0a303a8e0a8a71b20a3a5a7c6a80f1ae2a269a7aca8ac199ca24aa7aaa84d1954a24ea7aaa8e5191ba212a793a85e19b4a196a656a887198ba134a607a8ff1834a1eaa5dba7a41801a1aba59ba75518b8a023a501a7a91767a0b8a451a6dc162ca068a4cca55616e79f2da46fa5ee15cc9ec9a322a5bc140e9e36a3eda45614b59de3a2b3a418148c9daaa299a47814569d7ea276a44214299d40a248a40d14cf9ceea101a49c13839c98a19aa339123d9c47a108a3cf11bb9beca090a26b11559b8fa00fa23f10dd9a46a0a1a1e00f609afe9f52a15a10c799679ff7a008108c99079f9ea0a70f3e99a79e6fa03e0f2499529e27a0f10f3799f19db39f9d0ebf98959d6c9f360edc98319d769e390cdc98319d769e390cdc0d960f2712b115dc0d960f2712b115901f6021092212230e255e296a2a032c4f25fc289c2a3a2dda232427b128d02d1d22b9241d263c2e551ddd1ad21d902ec89bf9a190a1a12e8ea1f0a5bea6862e5ea45fa8d8a81c2e0da538a9bea99a2dd0a5a1a97caac62c13a601aac4aa2c2c1ea60caacaaa112b1ca601aadbaa242ac6a5e5a9b2aa1e29b3a597a95daa6328ada56ea93caa96275ea507a9d2a9612622a598a85da92625bba455a819a9492477a449a8f8a808234ea44aa818a9b8216aa463a85aa9d9205ea451a86ba909203ea46aa886a9731e27a437a84aa9791d7ca3efa7f3a8751ca4a249a797a8fe1a5fa200a769a8511a88a17ca632a8da1864a151a620a84d192da109a6f1a7ed1814a1eba50da8c418f2a0e9a5fca79418bba077a58ca7201862a0e3a4dca64a175ba0a4a42da6d51651a065a4c0a5641605a01fa467a52315a19fd5a31ba5c314e39e5da3e0a46d14749e02a3a4a41e14e19da5a271a4a3139b9d62a242a42c13319d03a214a4b012e19cd9a1d2a35f12859c77a172a3f4111b9c3ca115a3a411c49b06a1b2a28910429bafa05ca23b10179b7aa00aa2c710a59a10a058a155103c9a5b9fe7a0910ebe99369fcfa0610e9599179fc3a0560f9c99fb9e9ca0f30c4199db9e85a0e40e4799889e18a04b0f4799889e18a04b0f480c26112313a314480c26112313a314cc1eee205b21df21f0244529392afe2bac24aa28b129072d0523ee262628b62df0204a248e25142e271ca21aa61d582ea09819a192a06b2e8ba04ea51ca64a2e50a32ba8ada8d42d8ea414a9d2a95e2d3ea5bba99aaacd2cd4a527aaeeaa3f2c52a641aa2aab232b6aa624aa30ab6a2a4fa7eca9c0aa4a292da67aa954aa8928e7a54ea937aa7c273aa518a9d8a9692600a518a9e5a98b25f4a4faa8d8a9ed24c2a4f0a8e2a9f023a5a4b5a8a2a983229ea47ca864a9322182a44ca826a9422089a42ea80da9af1e19a4d2a7efa89d1d45a386a7dca8b91c29a344a7c7a87d1c99a2c9a664a8431b05a288a644a87c1a0ba280a65fa82f1ae6a153a631a8c619e2a1eca5f1a7b51869a1baa5a4a76f18c0a066a555a79e183ea014a509a73c1810a0eaa4dfa60d18df9fa7a467a69317349f52a4e7a5de16b69e03a491a54f16529e90a347a5cf15239e31a3ffa4d214e89df9a2c3a49314809d94a271a465132b9d51a24fa40713ee9c24a21da4a911989cdfa1efa35b11669ca3a196a317113e9c5aa13aa3d410029c0da1b1a283109e9ba6a03ca227103e9b4da0a1a17e10429b11a05ca135104d9bbb9f12a1eb0fc89a6a9fc2a0730f0e9af99e7ba0e10e6f99749e41a04e0e4c99a49d159f680d4c99a49d159f680dc20d9d0f2f128a14c20d9d0f2f128a14881f3521a221922074257a297d2af32bf624b328d629cb2cc022c9263f28862db8208b24ea25ff2dab1a8c1c281f362e949863a085a05f2edd9fa8a51da6362ee7a241a8d9a8cd2d53a452a9eea95c2d0da5b6a971aad12c4aa5e9a982aa1f2c54a5d7a9b4aaea2ad4a5eba984aa0b2a14a6cba9a4aa2f29c0a5e0a986aa9228a0a5a5a97daab7274ea540a90eaa6c26f7a4d8a8bba95c25bca49ea874a9a92487a489a876a9f82382a47ba86ca9112383a44ea841a9d8216fa428a822a9082128a40ea8eaa82a20a5a3aea7d5a8ae1e45a367a7b0a8a11d4fa3e6a681a8001d24a3f4a66fa8641cbca2eea681a8211c63a294a650a8ba1bb8a136a622a8331b69a101a6e6a71f1a15a1a8a554a79e19c1a04aa504a730197aa018a505a7ee1874a0eda4d8a6a7185aa09ca442a63f18b89f52a4bea5f4162d9f18a486a5bf15e19ee1a33ea56715809e76a30ca50f15149e21a3cca41914b29dafa281a49913669d5ba249a41213289d09a20ba4a512d59cc8a1b6a34611a49c66a130a3c311949c27a1daa29b10609ccca07ca23e100d9c75a0f2a1e30f079b23a06fa14810739ad19f34a1c80efc994c9f18a1430eb499329f11a1290f0c9aef9ed2a0bb0cb7986d9eeea0380e9299419ec3a0e40c9299419ec3a0e40cd60ac30b9c0d9314d60ac30b9c0d9314091e4220d920b5206e252429312aa12bd5249828d829c12c422316276d28752d37219024ef25f12de41ba01aba1d412eba99cda179a1462e41a0fca58ea61d2ecda218a8aaa8b82d3ea40fa9b2a9422dc7a485a977aaa62c09a5cba9a4aa0a2c1ba504aad4aad02a41a5c4a9d0aac4292fa5b4a998aa042958a5ada975aa712885a58aa964aaa32782a541a930aaa1265ea505a9e0a9a425bca4b7a888a9d9245aa48fa877a91a2437a452a834a9222305a40aa8daa81322bfa3a1a7baa8e620afa37fa78ca84d2049a39ca7a3a8ac1f91a230a7aca8041edfa2dda6a9a8681d9ea2cda667a8da1ccaa2c5a652a8af1c3fa240a622a8d51a7fa112a609a8211b65a1dda5d8a7251a4ea188a54ca7b8193ca14da5f9a6d618ffa030a5b7a61118a8a0fea499a6621832a0b3a452a63017b39f6ea4f6a59a16299f30a486a53715ab9ebfa326a5b614499e62a3eca463140d9e2ca3cca41f14f49dd9a2a8a4b313d59d91a277a43a13af9d34a230a4b7113c9db6a1d5a34310969c4aa150a3d00f269c10a1f1a2670faa9bd9a08fa2050f009b90a02fa2fe0fda9a53a0c9a16e10649a18a06ca1060fe299949f07a1720eb7995d9fe3a0420f009a459fcda0e60d9d99f79ea3a00f0ba1996a9e2aa08605a1996a9e2aa08605831031133513b010831031133513b010891d8e2047218e204524e928312a652bdd23b1289429892cb22235275a28322de3206224bd25b42d3e1aa217e71b012e4c998ba115a2132e17a0c9a558a6ff2d8ba258a8c0a8b32defa307a9a1a93b2d97a46fa909aa6d2cdba485a94baa902b31a5dda98daaa42a56a5d6a9e2aad62966a5d8a9c0aa042910a594a996aa41280fa569a935aa3f27c9a4fda8d8a91a2682a4c1a888a9292541a48ea843a958241ba44fa829a9e42300a40ba8eea8cd22a3a3a7a7b9a8de2193a346a7a3a8f020f5a33ba775a87b20fca331a77aa87e1fe2a233a798a8af1ebaa1bea66da8651dc7a1baa65ba8cc1c8ca2c4a63ba8461c8fa136a618a8bc1b80a1eea5eda7451b22a1b3a5c0a7251a0ea192a5afa7d719dda043a546a771197ea0f3a4d9a60d1953a0aca45da6a41826a07da433a65818df9f69a4ffa57317a99f47a4aba539162b9f18a47ba5d015cd9ecca332a5b014829e43a3dea44514239ef8a2bba4eb13e89dd2a2b1a48113809d82a277a40413f09c1ca232a48412819ca4a1c3a3f4112e9c41a134a37e11149ce2a0ada21a11ce9b7aa046a2a310869b16a0cea1d410829bbf9f5ea19510199b679f19a14b10989a709f22a1cb10979a219ffba0f50ff79a959e45a0360f099aea9d12a0500e099aea9d12a0500e211198130c14e40f211198130c14e40f211d0420cf2071204324e928462a812bf7238a28ae29932cbe226b264e28052dd82087240526712dee186417701dbc2d389a00a2faa1ce2d319fa0a5a5a6aa2d8ea1c1a7a3a86c2d32a3d8a87ea9082d5ea494a94daa632cdaa4e7a9d5aab52bdaa4d1a9ccaa962aeba4c9a993aa8c29e2a4b5a9a7aacd28e5a4aaa98baa4328aaa45fa961aa5427a7a414a9fba93e26b5a4c9a8c2a9422595a47ea856a9892455a44ea832a9a42319a41ca801a9b822baa3d9a7eda8de216fa38da7b6a86321a0a38da7a4a8c7206aa34aa770a849206ea2d3a630a8e21e93a109a6f3a7b21d93a131a619a8ba1c00a24fa60ca86e1c99a1eca5d3a7631c75a1bea59aa7f21bf2a086a554a7df1ae4a04ea531a7e319d8a022a5b7a606197ba0e9a490a6bb1844a0bba47ba6d5172ea094a45fa64e16e19f55a4eca5bc15689f2fa4aaa55615319f14a481a50415dc9eb4a326a5d613479e3ca3cba43213eb9df9a295a4b412a99dc4a285a45d129d9d79a258a4f611519d24a21fa48a112c9dc0a1afa32311019d6ea153a3db0fc39c1da1e2a2530f359cb0a058a21b10719b53a0e3a1810fce9a26a0afa1200f9e9a11a091a1da0e999af79f80a1c70f639abb9f3ca1450eb699319faea0c70df499ba9e78a04e0cf499ba9e78a04e0c7e11a314451376107e11a314451376106a1e15217a2195215124b3280d2a212bb72367288c296f2ca0213f260928d12c6120252490252f2dbb1a0b1a531d7a2dc098c5a180a2812d289faba5b4a6662d3da1bba79ca8312ddfa2cba872a9d42c32a48ca951aa522ca5a4e0a9deaac52ba6a4c7a9cbaa862aada482a994aa6529cca471a95daacb28eea45ea939aa3e28c8a41da909aaf92678a4cba8b6a9e52562a4a6a86fa9052544a45ba82ba98c24c7a325a814a90924b7a304a8e0a83f2349a37aa798a8382215a338a763a83d215da306a75fa8d9203ea3b2a61ca8142061a24ea6aaa76a1f68a194a555a7d01d6ca13aa570a7641c17a1b2a5dda7e81b09a171a5a7a7c41bfea053a572a77a1ba3a043a517a72c1b8fa0eca4bfa68a1978a0c9a480a6c01856a0a8a45ba68e1857a078a42fa65f184da07ba4f2a56a1714a05ba4c3a5ed16aa9f45a498a5a815259f19a45ca53b159a9eefa32da5d314509e8ca3fea463141a9e24a3c3a4a314899da9a268a43b14329d49a233a4c512f69c13a209a46a12ad9cc5a1cfa30812649c69a166a3bc10269c12a102a37010ab9bb9a0b9a22210ff9a75a06da29010b99a39a02da23f0f7a9af49fbba1fd0f4f9a7e9f16a1730f409aef9eaca0d60ebb99d39e94a08a0ee19b759ec59f5c10e19b759ec59f5c10011123148414850d011123148414850d701f65220b23f322fe22cb28272ae72a952333288f295a2c9e2197255227952c49209123c724032d7d1abf107f184d2d2c97bea180a2542d6d9ea3a557a6382d0da14ea742a8f52c80a28fa844a9852caaa34ca909aa072c0ca48aa956aaf92a3ca48ea976aa0a2a74a478a968aa21296ca45ba93faa6c285ca410a91aaad0272aa4f3a8e2a9d026faa3d2a8b8a9d225caa39fa86fa9fe24b4a339a811a942243fa3e4a7c8a82023d9a27ea796a83c22b6a24aa774a88c2180a2fda64ba8d2203ea2b6a622a8792012a249a6b4a7312028a235a69da7b01f71a1f3a546a7d51ec4a082a5fda6d71d7da070a562a7c71c14a14fa519a73f1ca8a005a5b2a6451ba4a004a588a6441b5ba0b1a451a6351a44a07ca411a65e1923a065a4e9a5a31818a05da4e0a5761818a059a4d1a59d17d69f58a4e0a53217a09f5ca4daa5da15349f42a49ea55e15ca9e04a458a52214919eb4a323a5aa13429e67a3dba41f13f29d01a3a8a465119c9d96a273a4f710429d31a237a49310da9ccfa103a43f10949c65a196a3e20f2e9c09a118a34b0f9c9ba9a07ba2af0ebe9a36a0e7a15c10649af89f93a11f103e9a8f9f52a18e0ec9992b9f30a1580fc499c79ea9a0e10e2099579e22a02a10d799909e8fa07910d799909e8fa07910490f411235130009490f4112351300097f1da9200c217a21512284287629242a02231f284c29082ce6204925e4266a2c821e5b22fa23cd2c1818b890ec11202d40984ea229a3372def9d4da541a6302d4da092a758a8dc2caca17ba816a9722c83a2c8a890a9cc2b8aa30aa9f3a9bf2a28a442a960aad62956a45da96aaa24297aa45ca960aa832844a428a928aac327e4a3d8a8a9a9aa26f8a38aa84fa9b42521a461a843a91a259ca340a815a98224f8a2c3a7aaa8b2237aa21fa763a8ae223ca2cda62fa8c32115a274a601a81721f4a148a696a7b92029a201a677a7262005a2d7a518a7801fb8a1c9a534a7a51e71a155a5e7a6bf1d83a14ba50fa7fe1cbaa04ba5fba6811c0fa1f7a497a65c1cd5a0cda448a62f1b45a08da4e7a5371a67a05ba4d6a578192da043a4b3a5b71814a031a49aa58f18fd9f33a49aa5d017cd9f3da4bda56c170ea05ba4cea50517969f3fa4ada58e15079f0fa491a50e15e39ef9a35aa5a114989e82a3fda42e14369e13a3b8a4b513bc9daba27aa430134a9d3aa230a4aa13cc9cdaa1dba32e12449c69a13ea3b711ab9be5a091a21e11f79a64a0e3a197109c9a0ca057a13b105b9ab89f0aa109104a9a869fd9a0dd0f349a4e9fc7a0b60f279a1e9f9fa0830f8c99e59e8fa028105e99c69dea9f33105e99c69dea9f331015903592c4924a9115903592c4924a91de1c682000214d2199220529202a872a6d224c286629342c45202825b926652c741da720a0229e2c2a1494994e98c72c8c9902a3dba2cd2cdc9dc6a5aaa6c12c10a052a723a8862c95a157a8daa81b2c7ea2bca83da9232b0fa3e2a878a9362a53a3dca89ea94e2999a3f4a8daa9be2815a426a912aa5528bca3e7a8c8a93e2700a37aa840a9ff2543a35ca854a96c2571a33fa800a9e32490a3bca7a4a82c2412a33ba756a84c238aa2b3a618a8652233a287a6fca7882117a235a69da7e520f0a1dea53aa77f20d2a199a515a7e31fe1a154a5a5a6821ff9a158a55fa6fe1eaaa16fa5aaa6761ea5a082a4b2a5141de69f70a428a6b71bc1a0c0a475a63d1c8aa08aa424a6a11bea9f30a4a1a5391af59f1aa48ba59e19619fe7a35ba5d618419fa0a344a51f18e89ee4a365a5f517d09e30a4b4a58d164b9f7aa40fa640162f9f86a4f7a5d815fd9e65a4aea558157e9e0ea451a50814029e7ca303a533138c9d1ba3b6a48c12589d7ca25aa4e911069df0a10ea46b11d39c94a192a30811969c0ea108a38f10349cb0a082a20011d09b51a004a29910099b02a085a1ee10359a6f9f10a10110be99db9eafa0770f1b99509e89a0f30e22990b9e56a0b90eb298bc9d68a0730e49985c9d95a0440d49985c9d95a0440db6916f955f954e93b6916f955f954e9309199e1c5a1d9e1ce4224a289029bc29012302285a297a2bed1fb124e625312ca21a121eba1f622c5f0afc9c089d772c099a5fa307a4672cda9dcba5a5a6582c17a041a744a8302c03a128a8caa8bd2bf6a174a856a9c52a6da2ada8a3a9f229c9a2cfa8e8a93d29fea2d2a8d1a99e287ea3f5a8d8a9172865a3bca8c8a92c27cba264a85ba9f0259ca22aa81aa9ff2480a208a8d2a88e2430a295a789a80524cba1e8a62ba81723a1a152a6a9a7272254a1f0a52da775210ca187a5d4a6da20cda023a554a66020a7a0dea4eea51e20c3a0bba4d7a5c61f6ba070a49da5101f70a097a4bba5ff1d46a0cba4fda54c1dba9e89a4ffa5621bf79f55a40aa6fe1bfd9f16a46ba5c51a129f43a3fca40b1a739f16a3d4a48c19f19ec8a298a46d192d9fd6a2a0a4cb18a59f75a3eda42e18d99f27a4a0a5f015a09f5ca40da60613fb9e53a416a68610b09e5aa4eea51f108b9efea354a5240f199e45a3d4a45b10889de6a2a7a40c105d9d88a26ba4e0101d9d04a204a47210c29c7da170a3f4108f9c15a1e1a28a104a9cd0a06da24d10939b6aa0f3a1f80f939a00a043a14d0fd899439fbca0b10e8999f19e80a0670e5a999f9e5ba05d0f6399769e2ea0440ff098469e39a00d0fa798829d8c9f5510a798829d8c9f55100000878c7a8ac3870000878c7a8ac38740215227ac281126de21f02710295c28d621f9272a29062bb71fb623f324ed2b39199e1940181c2cb8938aa17ba21f2c7b9a71a465a5282cc39d8ea574a6f52b869f23a687a7662b08a0e7a6e8a7ba2a96a04ea761a81f2a24a1e7a7c9a8772987a112a8f6a8d02808a252a84ea96c28c1a2b0a8c3a9db27cda293a86ea9a12684a24fa816a9b8254aa20da8eda8dc243fa287a78ea82e2400a2f7a63ba82323afa186a6d1a7402279a115a676a782215ca1cda53aa7262134a167a5a5a6a92004a105a50da66320faa0c9a4dea55a20ffa081a471a52a2000a120a4d3a4132040a101a424a5241fd6a04ba57ea7bc1d1fa216a50ca657198da089a48fa5611bd29fbca30da5461ca89ee1a298a4861a6a9effa115a4111a599e08a219a4f018959e46a223a4ac17749eb8a28ea47f16f09e00a467a51d14ac9f85a41da69b13fd9e70a4e2a554128e9e3ba493a58a11439ef9a347a56a12be9d59a3dca4eb12079da6a267a42012c39ce0a108a466129e9c6ea16aa3c012b39c15a100a35212989c94a069a2ef10599c28a0b2a12b11da9b9a9f32a12310f99a0e9fe1a0c40f5d9ad19e9da06b0ec799a59e6fa01e0d67995a9e3ca00b0e3d99239ef09f820b9498a39da29f9b0d8c98579d339f530f8c98579d339f530f0000a391458f848b0000a391458f848bb82064266428f6242b21422645286e225620fa251f2898997e1e4224562547294814539c8c9b712c859552a2fda2a52ba69892a398a42b2b2a9b5aa437a5dd2a469d69a596a6912a909e04a610a7be29779f94a6cda71f2943a0fea60ba89328e6a06ea75ba8942897a126a8f2a8762868a2a8a880a9cf272ca262a83ea94826cfa172a77da8db2476a1b8a614a8262452a175a6cea7652360a149a693a78c2292a1fda558a7bf215da1cda5f7a61a210fa189a5c9a69720c3a052a572a61120b1a035a53aa6491f87a0cfa4d0a5dc1e4aa0aea3caa41c1e35a0a1a1d7a3751e239e44a04aa1581e2fa106a68ba7d21c5da128a677a77919b7a042a447a58519789f70a300a5161ba69ef9a2b8a4751b459dcaa085a2801bf59ce19f74a13f1a199d67a0e1a10a17589d7ba193a38c126c9e05a46ba5cc0f2d9ff6a495a6da08739fe7a474a6e40716a07fa4e8a58006cf9f1ca45ea5440cd89e16a3b3a43e10d29d1fa216a4aa10fc9c85a13ba316117d9c04a1b6a27611359c8fa001a2f710fd9b43a0a2a1a410c69b29a07da187103d9b03a06ea15e10909aaa9f5fa1dd10d799279f3ba1f40f68998f9eeca0730f2399239e6da011100c99ab9d09a0a90e97983d9d909f5f0e70988c9c1e9ee90c70988c9c1e9ee90c0000b38bef89e38a0000b38bef89e38a2320b2258c272125af1f91255f27de256c2241287a2953264d1f0f267f27be280e9d48a623a8ad2977973aa250a3be29f09382a02ca1a2294a9a94a346a49729069da7a499a55629a99d8ba479a5c328bc9da4a494a597280d9ec3a493a52e2839a07ea678a7982882a2cfa8a4a9b02892a153a822a9282600a1f0a643a88624f0a054a6c6a70524bfa0f4a53aa7f02299a0aaa5f6a64a22b5a05ea591a699219ea038a55ca6e7208fa01ba52da660207ca0eca4fca5c61f93a0d6a4e7a5e11ec7a0cda4c9a5171ec3a0b6a4b4a5931d3da075a498a58f1c2c9f4da43da5331c8f9cd2a255a4651b009c75a063a14f1b769b1ea219a45319a39d63a233a44719849e11a226a49119529d81a083a28f19949ca99f07a1e519159cda9dce9f591b6d9ca59c8c9e3a1b2f9d889f86a13f184e9e04a457a5310a57a0bca591a73489c09f58a5d4a600880d9faca445a6f40c209ea7a317a5a310769d2fa21ba4e211ec9ca8a18aa353118b9c2ba1dba2af11149cb7a04ea23011cc9b63a0faa1d410999b3da0d2a1aa104b9b1ea093a18910f69ad19f5fa15910609a529f09a1c010cb99d29e96a079107b99579e38a0480f4099f19df09fe70e1199879d4d9f8f0d6d980f9dde9e350d1598a99c049e120c1598a99c049e120c0000a98cd8890c160000a98cd8890c166a2051244b25b724421d9a233c25b825971dbb23f4242628d68d1d9eeb9cf629b918dd1d931ebf282c154615721695282187509acc9ab228a69730a0f4a0d928759abea211a4cf28a39c04a4cfa42328f59b10a32ea4d7254b9c36a244a31224fa9f0fa568a5bf20fa97cc9b679cc8123d9a719dd89ef31dff9d37a2e0a3c320f49ee4a3a8a40121309f12a4aca4c920779f32a4f3a49220929f42a4fca44d20d79f53a42da5c81f05a045a41ea53c1f04a048a41fa5b31e0ea039a42aa5351e0da01fa40fa5ae1d01a014a418a5421ddb9f1ba411a5dc1c18a018a4fda4831c4d9e07a365a4dd1ae398489ea09f8315b1999c9e5ba0ba145e9c2ca0f1a18a16a39c60a0aca127181a9d58a0b7a1c7184a9de69f21a1ff182b9c0d9bcf9caf199a95fa18d9194e1af9972b0c2594351533a080a543a75c92daa019a7a4a84990069eb1a4f3a5080d169d24a240a4e310989d7ea1b7a35611169d3ca131a3dd12959cd5a0bca27e11109c76a048a21211a59b2ca0c0a1bf10449bd69f70a17410079b849f4ea13a0f959a319f22a11610429ace9ef6a0d20fbd996e9eaaa0640f7d99129e39a00d0f4999b69dba9fb70e2499999d659f940e2499749d129f7b0dda98399d0b9f290f2e98bb9c809ee50d2e98bb9c809ee50d0000ac8dc38d45110000ac8dc38d4511241e38238e241724b71f3423ca24af256619bb1d861f1b2434142619931af91d5c1a5e20b621b6240319b41d072022271f112f922c0d07283995b89eda9f222880994ba151a21b282f9c62a381a4da27539d9ea4b4a57b27409e0ca52ea66826bb9b4da290a34d228c95f49bb09cf41bbc96ab9bea9b5a1a769a6e9ea09e1f1da99c94a0e0a0e61e659d5fa1e2a1051f039eefa1d9a2b81e659e51a292a3631ebc9ec2a212a4fd1dc89e09a343a49a1db09e17a352a42b1dda9e27a365a4071df19e25a372a4991c129f06a37ca4711c6e9f36a392a41b1cd69f4aa3b2a4e91b989f30a394a4ec1a0c9e80a23aa45719719ce1a04da25218859c82a002a2ab17fe9ca9a052a28c16209de3a064a23d17689d30a1dca25c17ec9c9da071a2af162a9c779a959d5b19151905266a27e21a2ea417ab99ac6d9d66a02aa54ea67612429da5a198a3cb14589d95a097a24d143b9c98a05fa25d14509c6ca014a23214049c42a0e2a152137c9b09a0ada1ee121b9ba39f56a18f12e29a3f9f1ea19111739ad59ed1a040110f9a749e8fa0f5109c99fb9d44a0a6106899b49d0ea06f107e996b9d939f36106d99309d1e9f320f2f99e99ccd9ece0f1799cb9c879ed50df698b19c799e780f12984a9c709ecf0f12984a9c709ecf0f00006488ff82181000006488ff821810421d0b2255232423921ba820d1210d240517641dd21f6523fa19de1e8520b4229f1cb71f19214224bb19521ded1f2f252d133d14d918fd25068fbf9a409a5a2615971e9fd39f5f263d9a7aa1a7a23d26689c71a38aa40326859d5ba451a56825059dc5a3c3a40e24809baba172a26421f89acaa042a11d203b9baea03aa1761f149cd2a060a1ec1e999c11a1e3a19f1e2b9d72a16da20d1ea09dcea1f0a2bd1dd79d51a27ca3741de59d7da2efa31d1d179ea0a217a4c21c309ec7a226a45a1c629ec1a227a42f1c7a9e99a226a4931b6e9e76a211a42b1baa9e84a229a4c71a719e63a210a4de19259ef7a19ca35219ad9d52a1daa29218049dcba028a2e7178d9c86a0fca10517949ca1a009a26816b09cb1a033a26516b39ca1a028a23816789dcca049a25315ad958a9a1f9d89108d024f09800c3c03db97709b419e0009009c829f64a19911cd9b789f2ba19b13899b5b9f04a17c133e9b4d9f01a15813259b4f9fffa093121f9b369feea0bd11ed9af69ec2a078117a9a809e72a01d11169a169e09a03910b299b29dac9fe60f6e996d9d5d9f44101099239d219f1610d298f29cd69eef0ee098dc9c8f9ed30edc98b79c619eb10ef498b09c359ee20cdd98829c159e7a0e8198489cc39db8108198489cc39db810000047154a16b188000047154a16b188f71a8a20542186212419501fe62096221f19771e28206922521a461e5a20b4225d1a361e5c20df234418221c851e6c24961314151319c224fe04e696df91ef24f7917f9cc29cef24bc9737a0e0a0c124469bd9a123a38e24039c80a2c1a31424ef9b5aa289a30723659bc6a1b6a2c621189b60a151a28420919b26a116a28c1ffb9b24a1f7a18c1e3b9c2ca106a2e51d8a9c3ba14fa24b1dbb9c67a190a2f51c009db8a1d6a2a71c4c9ddda10ea3521c6c9df8a132a3f41b9c9d04a248a3b61ba89d13a28ba30a1bc29d14a2a5a35a1aaf9d3aa2bca32d1ab89d2fa2eca38519a09d05a2c7a38019709da6a13aa30019209d2fa1b0a23518d59cdea060a25317749c9ca006a27916109c6ba0d5a13416cc9b4da0d5a10b16959b47a0e6a16715ce9b41a01ba23815539c44a0faa19014ab9a379d9c9e4e113595e399b09bab0f1e98489c0e9ee70e1f9aa09d63a08e02709a659efca0430f7a9ac39e08a15e109d9abc9e03a14c10739aae9ecda035105c9a8a9ea1a01210709a699e7aa0e30f479a249e51a08f0f159af99d3aa0590fff99c79d16a01c0fb3996d9da49fad0efe98009dea9e270eaf98b69c7b9ecc0d7598899c709ea50da698909c499ec10cdb98969c6a9eb90c6198489c019ece0e6198489c019ece0e0000000000000000000047154a16b188f71a8a20542186212419501fe62096221f19771e28206922521a461e5a20b4225d1a361e5c20df234418221c851e6c24961314151319c224fe04e696df91ef24f7917f9cc29cef24bc9737a0e0a0c124469bd9a123a38e24039c80a2c1a31424ef9b5aa289a30723659bc6a1b6a2c621189b60a151a28420919b26a116a28c1ffb9b24a1f7a18c1e3b9c2ca106a2e51d8a9c3ba14fa24b1dbb9c67a190a2f51c009db8a1d6a2a71c4c9ddda10ea3521c6c9df8a132a3f41b9c9d04a248a3b61ba89d13a28ba30a1bc29d14a2a5a35a1aaf9d3aa2bca32d1ab89d2fa2eca38519a09d05a2c7a38019709da6a13aa30019209d2fa1b0a23518d59cdea060a25317749c9ca006a27916109c6ba0d5a13416cc9b4da0d5a10b16959b47a0e6a16715ce9b41a01ba23815539c44a0faa19014ab9a379d9c9e4e113595e399b09bab0f1e98489c0e9ee70e1f9aa09d63a08e02709a659efca0430f7a9ac39e08a15e109d9abc9e03a14c10739aae9ecda035105c9a8a9ea1a01210709a699e7aa0e30f479a249e51a08f0f159af99d3aa0590fff99c79d16a01c0fb3996d9da49fad0efe98009dea9e270eaf98b69c7b9ecc0d7598899c709ea50da698909c499ec10cdb98969c6a9eb90c6198489c019ece0e000000000000000000000000000000008b0ad91a9b1cfd1ffb223726e82635295d24ec279328752ae923dc262328272bb72158248a25e22b091d8d1bd91d6b2c6898e2a098a0a12c41a078a42da5a62ce6a269a680a7862c99a401a8c3a8412ce6a444a8efa8a52bbca464a8d5a88c2a93a60eaa3dab0e2af5a42ba9d1a9432884a6afaa5eabbe295ea50fab2cacef278ea441a82ba93a2554a483a76fa8b52468a29ba55da78624a8a0f69c8a122a2832a51eaaf7ab7e2102a3f5a8a5a9201ee6a284a605a87d206ea387a6daa7802008a4f8a509a7f51f12a210a52ea64b1edda0b3a44aa5601e52a0a3a4b2a5991cb29fa3a3a6a4f41ac99c949c8e9d001a719f64a4a9a5e619599e3da3eda45a19f69df0a2a8a49818ae9d83a253a4f017e19d3fa224a49d17749de3a1c4a38e16209d94a158a39e15d99c3da106a33415aa9c14a1dfa2fb148d9ceaa0aea24114689cc6a06ca21514499c9ea03da2e212259c80a02ea2a0128c9b52a0ffa172111b9b37a0d5a14011199b20a0a9a11411939ad29f7ba11210539a909f57a1c80f2f9a699f22a18a0f039a3d9feaa0f60db399ef9eb1a0a40d2a99659e4da0340deb98f29de99fe90dae98c39d929fa30c7198799d479f740c52985e9d0e9f5e0c55984f9dc19eb90a4197ec9c7a9e3a0a8398019d519ed40100000000000000008b0ad91a9b1cfd1f8b0ad91a9b1cfd1ffb223726e82635295d24ec279328752ae923dc262328272bb72158248a25e22b091d8d1bd91d6b2c6898e2a098a0a12c41a078a42da5a62ce6a269a680a7862c99a401a8c3a8412ce6a444a8efa8a52bbca464a8d5a88c2a93a60eaa3dab0e2af5a42ba9d1a9432884a6afaa5eabbe295ea50fab2cacef278ea441a82ba93a2554a483a76fa8b52468a29ba55da78624a8a0f69c8a122a2832a51eaaf7ab7e2102a3f5a8a5a9201ee6a284a605a87d206ea387a6daa7802008a4f8a509a7f51f12a210a52ea64b1edda0b3a44aa5601e52a0a3a4b2a5991cb29fa3a3a6a4f41ac99c949c8e9d001a719f64a4a9a5e619599e3da3eda45a19f69df0a2a8a49818ae9d83a253a4f017e19d3fa224a49d17749de3a1c4a38e16209d94a158a39e15d99c3da106a33415aa9c14a1dfa2fb148d9ceaa0aea24114689cc6a06ca21514499c9ea03da2e212259c80a02ea2a0128c9b52a0ffa172111b9b37a0d5a14011199b20a0a9a11411939ad29f7ba11210539a909f57a1c80f2f9a699f22a18a0f039a3d9feaa0f60db399ef9eb1a0a40d2a99659e4da0340deb98f29de99fe90dae98c39d929fa30c7198799d479f740c52985e9d0e9f5e0c55984f9dc19eb90a4197ec9c7a9e3a0a8398019d519ed4018398019d519ed40100000797179b141800000797179b14181425dd28d6291a2bf325e229b32a562caf25872863291f2dd1220f263127cb2d191d4e201d213f2e7d94d09c169c7d2e15a058a4f1a34d2ef7a329a7c0a7fb2d6fa57aa808a95e2da0a54ba8c7a86a2ceba467a6eda62d2b44a50aa804a8352a03a6aba957aaab29f6a562aa08ab4e2910a7efabcfacca2883a52daa33aba5270da461a73ba82b26afa2c0a45da5be261aa3c5a322a4792608a407a957aa1a21cba44daabcab421565a357a856a96f19b7a121a764a8dd192ca1f3a562a766196ea143a554a6fa1797a15da587a6801700a265a59da60711e0a007a5f0a5c71096a0c4a45fa6b60a83a1c7a500a853182ca034a5c9a64c1923a0a3a445a6c718759f5aa4c9a54317da9eeda354a5b216729e08a39ba4f115e79d7ea239a4d6149d9d42a21aa4aa147a9dfaa1cda374140c9d99a170a32c14eb9c5ba11ca3d512d19c1da1c9a27112a79ce0a079a21212749cb0a03fa2c511389c85a01fa2a710d29b65a0eaa17910889b4aa0c6a15010369b25a08ea11f10089bfb9f47a1d90ffd9a8f9f00a1140e889a069fa7a0a60d059a799e48a05c0e3599179e15a0fd0dd598c49d1ca0a40cc898a89d28a08c0c98984f9d05a0520cd498059d0a9f7f0a93988c9cd59dbf0bec97fe9be29c9c01ec97fe9be29c9c010000cb98389c71180000cb98389c71188f26232a192bc52b6d272f2b322c282dfc255a29652a022e5824b7278a28bb2e212094217f234c2fc094729d989ca32fc6a130a530a6412f8ca408a865a8cc2e6da58aa808a9112ef0a5dba83ca92d2d3ca6c9a830a91c2c63a62ca9b2a9fd2ac7a62faaf0aa2f2a73a693aac8ab6829c2a659aa50ab652823a635aa0dab1d28cfa48ca828a9662793a377a66da7f526c6a348a6d5a78a25f7a360a82da9ff215ba439a94aaad61c33a4d2a8fda9241981a331a842a983166ba227a774a8d10c56a2baa619a8708c01a2eea672a83792aba174a636a8a794a5a1ffa57fa7cb8a54a10aa6a5a7f51075a187a6fda783136ca277a622a8ef15eaa09ea587a7421783a019a5f4a682175ea0b3a449a6c017df9f28a47aa5db16ed9e9aa3eda43116439e44a3bca42915f39dcea28da47a15949d85a257a49414469d15a208a44514d29cbca1a7a3f5138c9c63a128a37813359c23a1cba20b130e9cf3a076a2b612a79baea01ea27f117b9b71a0dda139115b9b37a08ca1e510299bf39f4ea1d00f119b989f0ca1610faa9a209fc0a0ab0d479ac49e9ca0630de699709e68a01f0dd4990e9e38a07f0b63990c9e1ba0d00c0099da9d09a0a80cd198ce9d00a0440be8979a9d52a0810db598799dab9f0286b598799dab9f02860000b496419933170000b49641993317a627132b0f2c052cc127b42b5e2c522dbf26fa29032c432eb024f927c9280a2f0a1ec221cc22a12fcf99949dc89cd22f63a1c3a444a5ec2f96a42ba856a8442f02a644a9e2a99a2ec7a69ba95baaa82d07a70caa9daaca2c1ba757aa25abc52b17a7c7aad5ab9c2a99a7f4aa1fac8329e6a694aaa1abbe28e5a5faa9f1aa2328fda570a954aa6027faa4b1a871a94d2652a43ea80ca9dd2416a441a81ea98a231ea496a88ba90a2150a4bba80caac71c1aa492a8cfa91914e6a33fa853a9ea93b4a2e2a729a91f96f3a25ea7a5a837954ca3c9a616a8e39446a2aaa623a84b8ba2a2e4a655a80e0b75a222a76da81b14b1a197a63ea8491610a1f4a5afa7ca1793a061a528a7031840a005a5d8a665179a9f79a402a68216239f10a45ca52015949ecda311a5db14479e49a3c8a48a14f09dd6a290a43413c79d85a25aa4ca12959d34a22aa462124d9df6a1fea3ff11fd9cb8a1aba3af11c39c81a17ea36911af9c52a146a32c11a39c1ba1fba20510709ce4a09fa29d0f3d9c95a04da2210f089c5da0cea13a0ddb9a19a06ba1e90c379a9b9feea08e0c8c99089f73a0360c1899889e25a0e80bd498339eef9f6c09bf98ef9da09f570bcb98ac9d2b9f150633983a9dd49ec8088b98cc9c2b9e230c8b98cc9c2b9e230c00008c96e5962a1300008c96e5962a13cd27962b9c2c1b2cc527bc2b812c692d9c261d2a4a2b272e6124f9270029f42e40209f22e524a52f3b98219cf7990d3057a144a55ca5073096a447a83ca8902f06a66ea9ada9eb2e43a742aaeaaa022eaca7eaaab2ab2a2db7a720abcfab602c36a7ebaae0ab152bfba6ccaab3ab042ac5a65aaa68ab112937a61eaa15ab5f282ba689a96eaa572743a54aa942aa4d26dda4e0a8baa90a25b2a4aaa8a6a957234ba5cda891a93d21b5a40da93eaa4e1e14a4a7a800aa831b0ea32fa851a97f16e3a2b7a7f4a8cb0c59a23aa76da8678c3ba358a780a8c58bb0a238a77ea8f30a80a233a792a8341469a2eba650a86b1577a2b1a61ba8e7178ea21fa6b5a7371890a2e5a58da79d17cda198a51ea7f716b0a019a58da647163ea098a4eaa5a915c79f2fa466a51715f99eb2a303a5ae146d9e5ba3cda47b13609ef9a292a40413419e9ea25ba49512089e4aa234a42f12ae9defa1fda3c511419d92a17fa36b11d29c44a121a33010639c10a1c3a2f80ffc9bdba084a28f0f889ba4a03ea23a0f429b84a0f7a1680da99a4fa0c5a11b0d529a18a085a13d0eb4995e9fdca08e0d7a99c49e7da0f00b8399ca9e95a0060c9899cc9ea1a02d0d6b99719e45a0b60bc798e29da79f470bbb98559da29efd0abb98559da29efd0a6680dd886f830d0c6680dd886f830d0c92252729f429d628b6277c2b892cf42c7626492aa32b162e872460284929ec2e70205c235a25682f0d98149cf493cc2f5ea155a5fba4073062a461a893a8a32f1ba6efa9b4aa062f29a7c7aabdab242e92a70bab0cac2b2d6da712ab05ac4d2c82a70fab19ac622b60a7f8aa14ac5b2abba664aa61ab282977a61caa00ab4f2849a6d2a9b8aa7a27c6a52ca91faae62547a5f0a8d8a9fe24f8a4cba8b1a9df23dda4dca8eaa9f7214da4b9a8bba98f1f3da333a845a9e51c27a30ba804a9e81ae4a21fa8fda86518c3a2c5a7c0a8eb15f8a2a2a7a7a8431279a278a7a4a8c81402a24da7b6a826166ba22ba7a4a88a18e3a1b8a649a8141855a130a601a8521804a102a6d5a708180ea1c8a5a1a76716e5a039a5f8a6a3157ea0c1a43da6121521a07aa4d1a5b714c79f2ea46ea52013dc9ec6a31ba58c120b9e35a3e3a40012a99de7a2b2a4ae118e9db2a290a464116e9d8ba270a426113e9d4fa23da4e910e19cf3a1f2a39510879c95a18aa34d102f9c41a1fca20010bf9be7a08fa2790f3a9b9da00ca2680dca9a4aa09da1070d339af29f4ca1fd0dc4995b9ff4a08b0d6999f59e9ca03e0d1599959e6ba0f60cdb98359e18a0b80de498eb9d999f820c9c98919d499f3c0dc098229d5b9e7e0ac098229d5b9e7e0a00004b96ce967b1500004b96ce967b15bb24ee28c629ee283627c82ba92cda2c8a260e2aac2bdc2d4c2453286d29c12e89215b24c025252fcd197292dd139a2f579fd6a46ba5d52f34a477a833a96d2fffa5c2a9beaaeb2ea2a68eaa86ab082e02a70dabfcab212d1aa71aab22ac4e2ceca60fab10ac0f2b8aa6caaad6abef29b8a658aa5fabe72887a624aa12ab28280ea6e6a9dfaa082775a576a963aaa02577a5fba8f1a99e2447a5cca8a3a9902304a5c6a8afa93d22cda4dea8cca9d2207fa4d9a800aac11f26a4a6a8e6a90a1e0da475a87ba9a71c7ea5eba720a9651ab9a4a3a7b7a8f418bfa2cea63ba8f81701a20aa758a88518cfa174a64da8071891a156a614a8cd174ea134a6e9a76d172aa10da603a80e1707a1eba504a8b916b8a074a566a7091663a0d5a4c5a6491561a0baa443a60a154ba07ca4c2a5bb130da02ca45ca51b13c99fe0a328a5a112169f7aa3dba427126e9efda297a4af11d09d9aa261a44111929d4fa232a4e9102c9d08a203a49810e19cc9a1b6a35d10819c79a162a31510189c28a109a3fc0ddd9bfaa0b0a2b70d329ba9a079a25b0ddd9a72a00ea20f0d749a10a05da1f10d4a9a879f06a13d0ce399619fe2a0270c9799299fcda0fa0b9c99ff9e9ea083091699c99e81a0c30c33995f9ef19fa40a33995f9ef19fa40a0000a590128f1b140000a590128f1b147b2403291b2ae9283227d32bb92cf52c8025cf29252ba02dc523e227f8286b2ec61fab230f25fc2e70143d92a093752f9d9ea7a4baa4892f68a349a8c8a83a2f44a5b8a9baaaa52e56a6a9aad3abf42dcba63fab2fac262d05a750ab45ac6a2c5ca74cab52ac4c2bb3a70eab23ac2e2a4aa78caaa6abf52809a606aae5aa1e28f1a5bba9bfaaeb2669a565a971aac32533a54aa938aa2325e9a427a92daa5524dba40ea917aadd22baa4d6a8d4a9812158a4caa8c6a92a2014a42ba831a9eb1d45a3c7a7eda8891c02a29aa775a8641b91a2b7a63fa8c81a18a44ba6e6a71619dca197a62da87f18eaa141a61da8d21849a268a636a89818f0a145a610a81e19d6a10ba6dba71c1886a1dea5aea7c517f0a090a55ea7151660a033a5ffa68b1528a0f6a4c2a62e1600a0b8a464a6cf158c9f57a4c4a54715129f1aa474a5e014989e9da33da57a144e9e5ca315a52813039e12a3c6a490119b9daaa26ba430112d9d69a23ca4980f019d2ba213a43b0fa99cdfa1daa3d00e769ca2a191a3790e369c61a13da31e0e049c01a1baa2b10da19bafa043a2460d589b4ea0b1a13c0e589b14a06ca1d70d059b909f00a1510d9e9a219fa1a0f50cf399ba9e6da0350b7999709e4ba0c50a3899c29d6a9f850d3899c29d6a9f850d00009c921d92001400009c921d920014ff24f028eb29a328b926432b812cbc2cea25f6297c2bb22d8823ce273d295a2e0b2088237e25dc2e830d3d929e13752fdf9ea3a431a5822f1ca346a805a9352ff2a4e3a9f6aa9d2edea5c0aac1abf72d72a63cab16ac192dc5a630ab21ac522cbfa602ab1eac282bc9a6bbaae7ab0d2ab2a691aab4ab0a2915a652aa8dab4628d1a502aa17ab13275ea583a990aae02517a535a939aa1025b7a4e0a8f2a9342489a4c4a8bfa9622363a49ba897a9242222a463a852a9d12076a337a833a9c81fe6a282a7a3a8e51df8a1fea61ba8281dbea20fa787a8931cb1a496a625a8ff1ab4a201a752a8521a4ea2dea69ba8871a06a3afa665a85b1ae3a151a61ea8d81943a10ea6e6a7d0180ea1aba571a77218c8a057a500a723188fa035a5f7a6d0167ba0efa4d4a6601656a09ba447a6ce15b89f46a4aba542152d9f28a480a53b14d99efba35ea504148e9ea5a317a58413419e1aa3cca4a611da9db9a277a43b11859d61a247a4ea10279d1ea215a42c0fc99cd0a1bda3bf0e959c76a13ea3460e6e9c33a1dfa2e90d4a9cdda08aa2790d059c8aa00da21b0df09a41a07aa1be0c729aec9f32a15f0cf399649f11a1090c9b994b9f06a1060df099fd9edba04d094599609eb2a0a40a299a5a9e83a0110c299a5a9e83a0110c000006964a975a16000006964a975a16552451283c2980287626292b822c902cb3258c294d2b4c2d6623f727d9280e2e1a200824ee249e2eeb137f988e99fc2e249ef5a4a8a5302f39a23ba8cba8f02e9ea4cca986aa6a2ebda5cdaac9abc22d54a641ab2cacfe2c8ba646ab35ac472c63a62bab34ac2b2bfda5b7aacfabeb29dea542aa4aabec28b2a502aa1eab2d287aa5d5a9dfaa162743a576a9a4aa052643a541a93aaa1d25aaa4d6a8b5a9592441a4c2a8b2a9602336a477a87ea94722d1a334a810a935216da328a82fa90d20aba2a3a7d5a86b1ecba198a6e7a72d1ddea1eea642a87d1c90a3e8a67da8bf1b63a271a623a89c1a23a172a66aa8a51953a371a622a8671900a242a60ca82d1977a1ffa5b8a7e5184da18ba544a777184ca15da5e7a664172ba139a5cea61917bba004a58da6b21537a0c8a436a64b15fb9f71a4d1a5cb144e9f21a46da51f13a09eb0a316a57a124f9e55a3dda409120c9e21a3b9a4ac11d19ddda290a44911ab9d7ba25ba4ad0fa09d34a21aa4320f2d9db4a1aca3ba0c9e9c5aa13ba3640c189c12a1eaa21e0caa9bdea094a2d30b2f9b9da02fa2170dea9a51a0c8a11e0e4b9a0ca055a16c0ccd99829ff6a0390d9a99419fd3a0f30cd7991e9faea0690b8e99e49e9ba00d0b9999719e2fa0d9819999719e2fa0d9810000530d210cd80e0000530d210cd80e8d22562837295628d825d62a4d2c7b2cd0247629cb2a372d3023d727cc280b2e0c205f23f224a02e220d6d9b8c99012f1f9dcda486a5102f01a215a8d5a8ca2e41a49da97baa4e2e56a593aa95aba12d01a61eab12acd02c24a618ab08ac012c31a6f6aa08acd22a1da6c9aaf5abbb29c7a577aa89abdd2878a509aa47ab152844a5bda9dbaac226e6a452a94faa9025a4a4faa8e7a9a8245da496a888a9922339a475a867a996220da438a822a9a1213ba427a810a92621baa303a8eda853209ba4b8a7fea8e41e18a384a7baa8b11d2fa13fa64ba7ff1c82a179a6eba7f81cc7a249a6a4a74e1bfca026a603a84f1939a140a61fa83e19a6a1ffa5e9a7b31960a1c9a5cca7811907a198a586a79018b1a05aa523a74f184ba003a5cda6e71635a0b8a463a6561614a074a429a6e615cf9f60a4f4a5c814ae9f44a4b5a572133b9f1aa469a5e812a89ec7a326a5fa105c9e4aa3daa48f100e9ee5a2afa43810be9db8a29ba4f70f719d64a25da46c0fc99cf7a116a4da0e619c8ea198a3500e169c30a119a3d70d039cdaa08ba2680d7a9b75a01ba2630e559b28a0b3a1360f249b08a05ea1ec0ef79ac59f2ba18b0e7a9a919f11a1760f849a3b9fd4a0d80c459a939e2ca0520c459ae59dc19feb09459ae59dc19feb090000210bfd0247080000210bfd024708f8212f280c291928ea25ed2a872c9b2c7f245729e52a2a2d9f228c27a628bd2d1420c4233d25492eed0c319b4d93b22e299e9ea4efa4b22ea4a117a87ca8512ea4a32fa938aaee2de2a459aa62ab5f2d7ea5e4aa0dacb72cc7a5eeaa16acfa2bbaa5c1aa0cac9f2a93a574aadaab74297aa55faa99ab9e282ba512aa5eabfc27fda4c3a9fcaad426cfa47aa999aad025b8a431a930aae22489a4cca8c7a9052450a485a87aa9f3220ca447a834a9ff2102a419a808a9772172a3fba7c7a8b120dfa3d7a7d4a8651f87a2f4a641a80b1e3ca177a68ba79a1d04a112a634a79a1d6ca382a688a70f1c80a2d3a623a84f1ba9a0a9a592a7611981a1c9a555a7191b10a1afa556a7a519a7a05ea521a7a318aca028a5baa69c1756a0daa479a6f9151ca0c2a46aa6b3150da09da437a65714b49f50a4f7a5d013729f34a4c3a5b511349f03a472a55211ca9ea1a30aa5f0101e9e4ea3c3a49310bc9deba29ba43c10779daea27aa4b60d759d6ca253a4610d299d15a21ca4fe0cff9cb8a1a9a3a60cd29c64a14fa3550c9c9c1da1e4a2110c169cb1a05da2790b479b5aa0f9a1cd0cc39a28a0b7a18b0cc49a12a081a15c0cae9af59f6da12f0c8d9a9e9f22a1de0bde991a9f97a0440b599aa59e45a0b908599aa59e45a0b9080000a511d60f570c0000a511d60f570c20215727a128ad271725692a442c382c96243129ae2a162d0f228727a828912d931f9d232825002ee8120e9b2b93642eaf9dd1a4ada5602e2ca121a8c3a81b2e5fa35ea96daac02dbaa474aa80ab302d40a5feaa08ac932c75a5dfaa16ace32b42a591aac8ab912afda43eaa82ab6529ffa40caa33ab94281fa5cba9cdaad527d4a460a98caa602680a439a937aa722567a4f4a8f1a9a72453a48ba879a91e241ba44ba847a93223d8a319a812a922227ca3eca7e2a84921dba3bda7a4a8a12083a37ca760a8cd1f5aa2d0a63ea8151e28a103a60aa7f41d4ca071a54ba61b1d6ca2eca4ada6d31a13a34ba623a79819e89fb2a47ea62d18e3a046a504a7f0190ca115a5fca6ce1985a0fea4a2a6601899a0cda467a64b178ba0aca434a6fd1690a08ba419a6ac1572a07fa4e2a5781438a05fa4b7a52b14b89f52a4a0a5d313109f1aa45ba528137e9ed2a31aa596124d9e83a3eda40b12ff9d29a3a8a483117a9da1a25ba40e11389d3ea223a4a810f69c0aa2f1a3de0eac9cc4a1b2a37d0e629c66a146a3040e099c16a1efa2ab0dac9bd8a0a6a2570d089b7ca054a25c0ed99a42a0f8a1fc0d6d9ae29f7ba17b0d199a5e9ff8a0340e0c9aec9e9ba0ae0cd499c19e8ca07a0e199b299e999fb30d199b299e999fb30d0000540f3310120c0000540f3310120c1821c827ee2811287b24432a322c252c0824db28452ae32ce921bb262b28582d01201e223c24ad2d7715c79c519c032e499cb1a412a50a2eaca0c9a772a8d72de8a220a903aa812d39a4e7a930abf82cbaa469aaa2ab422cdda47daa9eab312bfda46baac9ab062ae1a42caa7fab1829bfa4e9a92fab5d28b2a4ada9d5aa772792a470a977aa73265da430a943aa9a2516a4eda8eba9b724e6a38ea874a9a22390a335a811a9792208a3eba7cda88c21c1a28aa797a8da2073a23aa778a8262001a2bfa619a8be1f7da13da68fa7ba1e4fa1a2a5eca6ff1db2a21ba526a64e1e81a089a5f3a6331e3ca327a63ba7071da3a01ba5b6a6a61975a0e7a4b8a6c719e9a0eba48ca6441962a0d2a449a67c1844a096a416a6441826a07aa4d9a51c1712a05da4d4a5c61510a069a4e0a59515d19f68a4efa547157f9f6ca4e8a50e141b9f3aa488a56013b79e0da449a53e11769ed3a321a5e510319e7fa3e9a47b0edf9d17a3a5a4010eaf9db1a26ca4a80a589d39a23aa41b0dfe9cd6a104a4be0ca19c79a184a3670c2e9cfea0fca2030c7e9b7aa049a2330ba69a25a0c9a19e0c7a9ade9f6fa1620c769a919f49a12c0cc499119f1da1030db799a59e9ea0420b43995c9e33a05c0d149aa79e99a0290f149aa79e99a0290f00009808e80d980800009808e80d9808be20c827e62849272a24ee29772b9b2b2924be28392a932c9c2156262b280c2d581db820ee21772deb0b0c9efd9dd72d709cfda481a5e52d8ca0b5a79da8c72d23a20ca911aa552d4aa3c0a9c0aad82c27a401aa23ab162c6ea402aa33abcc2a75a4eba92cabac2990a4cea916abff2894a4c2a908ab552886a493a9abaa772732a437a943aa5d261ca4d2a8c4a95b2529a4a6a89aa99c24b8a379a841a9222425a30da8e2a8102396a265a783a80c225fa219a75aa8272123a2e2a63ba8c02013a290a609a837204ba100a654a7b41fdea1eaa588a7de1db9a2a9a5a8a61d1de19b72a196a3851c37a1f1a361a5bc1cc9a2f6a5d4a62c1b28a09ea43da6cc1a00a1d8a433a6fc1989a089a4faa5041952a05ea4c3a5611724a035a49ca5051623a02aa48ca5dd1511a02ca485a5a81407a049a4b3a570140ba06fa4d8a53b14a09f4da4aca5b213109f1ca482a57211ec9ef3a353a5fa10909e84a3fca481102d9e15a3b3a42710c59d94a272a4a30f3a9d25a225a48a10b99cb7a1bfa32e102a9c4aa116a3a60f9d9bd1a08ba26d0dfd9a5ba0efa14e0ea79a11a066a1e30d6b9ac19f11a15e0c639a949fe2a0440c4e9a769fc6a0660d349a289fa4a0120cee99049f8aa0340eb899c99d529f750cb899c99d529f750c000077975798400e000077975798400e7520cc26382846272e24a02a272c052c0f23c1281a2a952caa20e8255927092d531ce51e3521352d8291029f7c9f602d909cf4a438a5652dea9f6ea755a8412d47a1c9a87ea9e62cc0a278a954aa692c7ba3b4a9afaa5b2bf9a3c2a9c4aa462a03a499a9b6aa3e2910a490a9cdaa922854a4aba9cbaa14281da455a96aaa0427b8a3d0a8c8a9b525a4a3a5a89da9172594a370a852a98d245ca314a8eaa8cd23fda28aa790a8b0229da2efa648a8c42152a2a4a60ca8242123a246a6cda77d2002a2f6a568a71f20c8a1b5a53fa70a1f56a12fa597a6c81e75a0f4a485a6ce1d40a11da560a66f1d351579a0daa3e01b8ba406a64ca7511c7e9f80a43fa6851aa9a093a41ea6901a01a00ea497a58f19cd9f19a470a56f184d9feba358a56c173e9fd5a344a519160b9f0aa47aa5e015199f48a4d9a59014589f8aa411a6ba12429f8fa4faa54512099f5da4a4a5b711849e0ba433a51e11089e8ba3e6a4860ea29d12a3a8a4ec0d889d8aa257a46c0d459d0ba209a4f00e169d91a184a3640ec99c15a1e5a2d60d729cc0a059a2660d089c5da0eba1030d2d9b04a06fa1ef0d5c9a739f07a18f0dda99e39ea7a0090c32994e9e81a0cd0c1a99119e5ba0ac0c3199d09d7ea07a0c1d986c9d8ba0680c1d986c9d8ba0680c00006d98a4985c1400006d98a4985c14d0209827ad28282725243f2abd2beb2b9322a028222a512cad1ff7244226c72cdc193f1a901d092d9e9467a15ca1202dc89c6ca53ea6ff2c0ca095a77ba8de2c92a1d5a8cea9832caea25ca961aa252c1ba38ba99faa1c2b81a388a9a8aa042a62a365a9a1aa2b295fa34aa98caa8a28cda345a963aaef2790a307a916aaec26f5a2b1a8cda9bb25b3a26da867a9eb24a5a22fa80ca95c2467a2c4a7a9a89123f9a115a74aa88722a5a17da6eba7dc2170a103a65ea7172122a19ba500a78220eaa052a586a60820ada008a536a6ef1f5da0c8a4e9a5251f729f98a40da69a1e4ea02ea472a5051cdf1f499b37a1f213aaa135a675a7ad0cd4a0b9a454a6211874a02fa47aa52119439f4da3fba4eb18459f4fa3d3a40619d69e04a398a45618239f32a3b6a468176c9fb6a307a51815b49f40a4ada59d13659f60a4f4a50c0ea49e51a4e0a52207699e3da4d9a56c86579ee1a349a5a305f49d3ba3d4a4f3045d9df8a2b0a49f04239d85a26ba47c0ac69ceba1f0a3db0c8d9c6ca155a3670c719c0da1cea21a0c449cd2a060a2d50b9a9b6da0e1a1440b859a0da044a1a80cdf99579fc3a0430c8e99f09e7ea0120c4b99a49e4ea00f0d3b995d9e1ca0f40cc6982d9e21a0cf0c7f98589dfd9e40107f98589dfd9e401000001a90ef90d60c00001a90ef90d60c2a2106277e285f25df224d29fd2a1d2acd214e28b729442cbb1fde230f25712cb0170a114d92ec2c8b98dda270a4e32cb79cc6a5c9a6af2c569f04a72ca8562ca5a0fda7bfa8072c10a140a80aa9342b6ea16da84aa9512a99a155a85fa95829d4a166a864a99e2869a2b0a8a6a92a2816a3f5a809aab6272ca3f8a804aaa82607a3aea8a8a95d259fa25aa83ba99b2456a214a8e7a8f32311a254a778a8a922e5a1e3a61aa8ce2192a17ba6e4a756216fa126a672a7bb2049a1a9a5efa6622020a17ba599a61f2023a124a54ba61920c2a08da47ea5cd1f89a0c7a3aea44a1f8ba053a42aa5301c3da73ba8e2a8b519a0a4e6a35da35da4fca270a53ea6531b939dcca281a4f81b5b9ea5a290a46e1a3c9e01a215a48019339e08a21aa45c18729e41a23fa47a16889edda2aaa42214339f21a494a5050fc49f9fa435a65208139f87a4e2a54b07aa9e42a488a54e06549e02a457a5400cd19d5ca3e1a44b0e279da5a265a4ca0fe19cf2a1faa37010dd9c6fa15ea30e10e49c19a1eba2a610bf9c94a050a2d50e569c16a08ba1190e989b899f17a1ae0d1b9b119fd4a0630d709aff9eb9a0250ce699ce9e83a0d2097a99809e53a0a00955994b9e0ea09a06a398dd9dd69f560bc898a99d629f8d0cc898a99d629f8d0c00008f953593301100008f9535933011b3203d279c287a2445217827d52843254521302885298d28531fbc24fb25b12c2311679c869dc12c4c994fa442a58d2ca79c9ba5fba6442c939e74a617a8af2b11a072a785a8642b7fa0bba7baa8542a95a0d2a7a9a8582997a084a77fa885281da182a786a8f12793a128a8d2a8ab2753a2d4a8a9a99527a9a23da95baa8a2622a269a853a9f324b4a167a77ea8d32393a1e8a62aa8da227ba18ca6e4a7112293a131a689a741214aa1e7a53ba7a0200aa1c0a5f8a62520caa074a5a8a69e1fb7a064a597a6ba1e99a0fda4f1a54f1e2ba01aa422a50b1e9d9e27a1cca2aa1e3b9fb7a237a43c1d92a11da6dea76f1901a294a5a8a6c418a39f2ba434a53319079f46a3aaa4a01a029e23a2c5a30e1b2c9d9da024a2ab1b3d9d2ea083a1621a449d7da0efa12d177f9de1a1d3a3f30f9f9e30a47fa53489559f17a59aa63d8f679fe1a47da6d99004a070a4d8a5ef8f9c9f0aa44fa5318ce79e04a3aca4cd04e79d1aa20da42a0df89c81a13ba3750e6b9cf4a07da2cf0d1a9c83a0d8a17a0bc19b3da09ea1190b649b23a068a1da0ce69aed9f4ca1fa0d4a9a769f2ba1af0dc899f09ef0a0580d6e99829ec3a0110d0d99099e7ea0de0def98a59d18a0980c6b984b9d7a9f670c9e98949c069e0b0c9e98949c069e0b0c00007f8d838aaa1300007f8d838aaa136820a5264c280a264120a1263c283327aa21bc28f9297828cf20fd275529b229d69ceba578a7712b4e9a32a446a5c52ad29975a342a43a2aba9c1ea5f2a5512a2b9e15a658a7be29199f40a647a74529119fd6a50ba7ad28be9e4ca546a6ce27569f55a540a69a272ca1bca778a83f2874a280a96daaab271da121a8eba8a62443a1efa635a857230aa139a693a72c22aaa0d8a509a76721a4a08ca5b0a6c2209ea056a57ea63720a9a02fa546a65e1f8ea00ea51aa6841e95a0f5a4fba5a41da9a0eda4e9a5341dd8a0f3a4eaa5d51c63a0bfa4d5a5d21bea9e52a498a5ce1a479db4a246a4a41a3c9c23a18ea2b219d39c24a2f3a31719c99df3a100a4c2183c9eeca1b2a300191b9d60a001a2f718229ce79e8aa0a9190e9cc29d3e9f051b519c3c9dd39edc1ae09c27a08ea1f516579f82a4f3a5a790ada0faa57aa76b92ec9f47a5d9a6d5920a9f98a42fa6d28ce89d3da3dda4830b919d25a204a4510de79ca0a159a3bc0e7d9c21a1b4a2d10f1e9caea045a2210fb59b5ca0f8a1a50e679b39a0c2a1700e189b0ca089a12b0ed09ac19f55a1f90d689a6a9ffca0b60df499d59e8aa0910e7599549e33a0080d2a99ec9dea9fd20d0199999d709f8e0c87982f9dff9eb60a16989e9cf19dd00116989e9cf19dd0010000d6881a8e150e0000d6881a8e150eb11dc72292245623301f662578273f27101d9424202637288313a7933515c62b56188b1e2a1f03286714aa13f90d262912937e9e539f6d29169a24a25ba33929609c64a40fa52729939d3aa557a67f28539e9ea5cda65c27889e15a534a689258c9e8fa463a50f233898f099e19baf174994ae949895330f519c00a0caa0791d839e4da340a44820169ff7a3caa40520709f32a4e4a4cf1fac9f46a40aa5001fbf9f52a422a5801ed69f45a42da5001ede9f47a431a5811df49f3ea429a5141ded9f3ba431a59d1ce69f2ba428a5341ce19f23a42ca5ad1b0ca022a410a5531bd99d6ba24ba4d3184598419eb09f9214599bb09feea0eb13d29c5ca0c0a149158f9c52a099a17c171e9d61a0baa18618f09c959ff5a00f19a59b119bae9c171aed94aa1adc1aaa1a18996895bc9c681561a061a657a8a498a5a0bfa636a8e3954f9e46a488a51d862c9df4a12ca4440d239d7ba1cfa3c90e9a9d3ea10ba32c10cf9ccaa07ba28a0f1b9c70a026a2fd0e929b2aa0b2a18e0e239bd19f63a1270ec89a789f3da1930c739a289f09a1610c1e9ac29edda0600dcb996b9e9ca01b0d8599129e3ea0e20c6d99c79dc89fa60c46999c9d6d9f900c4e997b9d249f050bf398279de59e3e0d6398bf9c519ed80d6398bf9c519ed80d0000508e168e7a130000508e168e7a13e21f67240e26672487207124bf252026b31a9b1f3c2138256013b8187b1ab71fb81a492076212e2453192b1e8d205627e30cb39551942b28ab9653a039a14a287a9acba2efa33028059d8ca47aa5d327e09d32a55ba66427c09ed4a5fea6a626d49e82a5bca68d24d69a38a15fa2e91fdb97039e109df21b2a99cc9d9d9ddc1a2e9c17a076a0f61c3e9d40a1eea1bd1dd89dd7a119a37d1d3d9e67a2a9a37d1d9e9ec2a221a4e11ca79e07a351a4811cc09e15a360a41a1cc89e25a374a4fb1bd89e28a380a4b71bdf9e2aa371a4fc1a2c9f35a393a4cc1a949f79a3c1a4121a619f19a383a40919929df3a1a0a31a187d9cdea04aa2f116b89cbba03da293152c9de3a091a2ff14429d0fa1b3a20615b79d9ba12ba3a4145c9c0ea0c2a144153e9d289a189b961a0a1952251227411c49a4e7aa82acda9e599e5ea455a53f86399d7ba1a6a37112429db1a0bfa25d12409ca3a071a24812449c72a01ca20612009c42a0dda1c711909b08a0a0a17711289b9d9f47a17a10e19a3a9f0ea13e106a9ad09ecba00010f499759e9ca0960f8099159e52a0250f5499da9d1fa0e10e5d997d9da69f850e5399549d309f5c0d20990a9ddd9e110e0399e29c769e100cd998b69c839ebb0d3798729c379ea10c3798729c379ea10c0000c589b8866c120000c589b8866c12231e64237524ce23b81c7a229923b8244118e21eff2076246f19981e40205f23f21c8a1f55212d24191a9d1d81201625791374114019f7250f91959caa9c532662988da037a15426809b96a20ea42626e69c35a430a5eb25ea9dbfa4f3a55225209ed0a4b4a52224dd9c98a364a4b621d29bb1a1a2a20b20009c53a135a29a1e249c2fa1fba1c91dbb9c54a158a2881d299d94a1b6a2fa1c9b9d19a246a3b01ceb9d84a2d8a36f1cfb9db1a20ea41b1c069ed0a240a4871b379ef5a24da4451b679eeda24fa4fd1a589ebca232a4381a729ea8a22aa4d819a19ea0a23aa476195c9e3da209a49f18169ecba15ba33b18929d35a1a8a23517009dbea024a22d16ae9ca5a0fda16415a89caea02ca25815b99cbfa03da25715e39cbea03aa2b614fe9ccda06da226142293fd96ec98650db5046a0a460dca02d0982b9d259f7607619bc49f75a1560de99b939f30a1c610ab9b799f06a17011579b649ffca04f11419b779ffca08a10259b629ff3a07010119b199fdaa04510b39ada9ea9a01210629a6a9e4ca0730e009aff9d12a0200fb899959dad9fb70e5b99559d499f690e0199fe9ce19e230ddd98e39ca59e070dcf98c79c589ecf0dd498bf9c2c9efe0bac988d9c179ebe0c8598749cea9d150f8598749cea9d150f000023160e178c03000023160e178c03621b54212b22cf21ef198b20e6214e237719571fe2206823011a951e93203023121aec1d652010245618f31bf81d5e24ba129b136118b52430854b973095d0249c93a19d1a9ef324c398afa0f7a1bc24af9b65a209a46b24ba9c3ca376a40124929c76a37ca4ec22279c05a30ca4b321f19b76a24fa35520059ce1a1d9a2f11e069c9ea18fa2d21d409c75a18ba2211d719c7ba19ea2841cca9ca3a1b1a22e1cf89cd7a1f7a2c91b439dfca132a3291b8b9df7a159a3821aa09d22a271a34f1a9a9d29a287a3a619ab9d27a29ea30319ba9d46a2daa3da18aa9d36a2d8a3a6188b9d13a2bca355188f9dbda15fa3f1173b9d52a1d5a29e16e59ce6a073a29915809c9ca0faa15815079c67a0d0a1a414dd9b62a0d6a18d14b09b60a0e6a1e613ef9b7ca011a25314739c63a009a269138c99a79c499ec40fd694e599d89ba90d8d986f9c2f9eb30b069bd89d82a09e82f49aa69eeea0be0cb19ad99e07a11f0ecb9ae69e04a1050eaf9aca9edaa0da0d6b9a8c9e96a0a50d859a719e69a07d0d539a319e38a0460d339a019e22a01e0d0d9abe9dfb9fe50ca599649d789f970c3199f69cd99e3a0cf798ba9c8b9e070cba98a89c769eef0bec989f9c539e200a1d99b29ca59ed10b7898659c439e490d7898659c439e490d0000000000000000000023160e178c03621b54212b22cf21ef198b20e6214e237719571fe2206823011a951e93203023121aec1d652010245618f31bf81d5e24ba129b136118b52430854b973095d0249c93a19d1a9ef324c398afa0f7a1bc24af9b65a209a46b24ba9c3ca376a40124929c76a37ca4ec22279c05a30ca4b321f19b76a24fa35520059ce1a1d9a2f11e069c9ea18fa2d21d409c75a18ba2211d719c7ba19ea2841cca9ca3a1b1a22e1cf89cd7a1f7a2c91b439dfca132a3291b8b9df7a159a3821aa09d22a271a34f1a9a9d29a287a3a619ab9d27a29ea30319ba9d46a2daa3da18aa9d36a2d8a3a6188b9d13a2bca355188f9dbda15fa3f1173b9d52a1d5a29e16e59ce6a073a29915809c9ca0faa15815079c67a0d0a1a414dd9b62a0d6a18d14b09b60a0e6a1e613ef9b7ca011a25314739c63a009a269138c99a79c499ec40fd694e599d89ba90d8d986f9c2f9eb30b069bd89d82a09e82f49aa69eeea0be0cb19ad99e07a11f0ecb9ae69e04a1050eaf9aca9edaa0da0d6b9a8c9e96a0a50d859a719e69a07d0d539a319e38a0460d339a019e22a01e0d0d9abe9dfb9fe50ca599649d789f970c3199f69cd99e3a0cf798ba9c8b9e070cba98a89c769eef0bec989f9c539e200a1d99b29ca59ed10b7898659c439e490d00000000000000000000000000000000eb16f71eba20a1216d25d2285529bf2aac255d295f2a902bb824a1284e29402c8b2167252f26a42c981611910f121b2db49e29a443a4492d6ca29ea630a74d2db0a465a82fa9052d3aa670a948aaaa2c68a6dda9a7aa132c39a517a9dfa9752ad4a603aa43abcd29b5a53caad3aaf728fca43da992a9522881a7f7ac70adeb2885a545a916aa682599a4bfa75fa86b242ba27aa5dda5c2243ea2d0a611a8fe277fa3e4aa71aca61c4d9e19a57da6c81d0e98c9a2e6a4421fa49901a39da44620869e50a3cca4d31f2ea0eda3aaa4f51e5ea175a40aa53c1efca0b2a4cfa5d21c21a00ea4eea44e1bd89d42a180a2d01a9d9fbea422a6f818649fd7a33da524181b9e28a39ca44e18829d97a24ba43c17919d14a208a41e16309dc0a1a7a32d15ea9c90a13ba35d14ba9c32a1f5a21414989c12a1cda2ce127f9ce6a096a27d12499cbea053a23e112a9c8da022a2fa10049c67a0faa1c70f7b9b3fa0c8a1690f169b1ba09ca1820dd09afe9f7da14c0d639a959f57a1060d099a609f2fa1e60ae999389f00a1ad0aa399f69ec2a05d0a6999ad9e6fa0090aff98389e23a0a009e198da9dc09f4a09a398b59d6a9f1a098298829d239fe9055698559ddd9ed2084198429d969eb4056097e29c689e4c05b2982a9d7c9ede010000000000000000eb16f71eba20a121eb16f71eba20a1216d25d2285529bf2aac255d295f2a902bb824a1284e29402c8b2167252f26a42c981611910f121b2db49e29a443a4492d6ca29ea630a74d2db0a465a82fa9052d3aa670a948aaaa2c68a6dda9a7aa132c39a517a9dfa9752ad4a603aa43abcd29b5a53caad3aaf728fca43da992a9522881a7f7ac70adeb2885a545a916aa682599a4bfa75fa86b242ba27aa5dda5c2243ea2d0a611a8fe277fa3e4aa71aca61c4d9e19a57da6c81d0e98c9a2e6a4421fa49901a39da44620869e50a3cca4d31f2ea0eda3aaa4f51e5ea175a40aa53c1efca0b2a4cfa5d21c21a00ea4eea44e1bd89d42a180a2d01a9d9fbea422a6f818649fd7a33da524181b9e28a39ca44e18829d97a24ba43c17919d14a208a41e16309dc0a1a7a32d15ea9c90a13ba35d14ba9c32a1f5a21414989c12a1cda2ce127f9ce6a096a27d12499cbea053a23e112a9c8da022a2fa10049c67a0faa1c70f7b9b3fa0c8a1690f169b1ba09ca1820dd09afe9f7da14c0d639a959f57a1060d099a609f2fa1e60ae999389f00a1ad0aa399f69ec2a05d0a6999ad9e6fa0090aff98389e23a0a009e198da9dc09f4a09a398b59d6a9f1a098298829d239fe9055698559ddd9ed2084198429d969eb4056097e29c689e4c05b2982a9d7c9ede01b2982a9d7c9ede010000d9142917371c0000d9142917371c9b27222b272c432b2228af2b982cfc2c3428f52a1a2c4b2e0e24892776284b2f5315d1121b1aef2fc89f93a3e0a3183037a454a8d9a8f02f73a6f0a9c1aa232f98a798aa59ab402edea75aaaf0aa2a2d49a706a930a9c42b7ca683a887a8dc2996a6f6a97caa6029a0a67caa87ab2b2933a768ac51ad1229b7a5b6aaebabd7271fa466a723a884262aa43da582a51f2792a375a767a8772568a374aa1fac732002a227a9a5aa051eba9a7ba665a8871dce173aa477a65c1d6d1539a449a6e51d5f9b73a4c8a53c1d19a115a650a71b1d8ea41da655a7091ce7a19ea523a7251b12a1aaa4c9a6551967a3dfa55ca7171a4aa1cca52ba7f91941a0f4a45aa68619ac9f6fa4bca52218fe9e0da431a52b153e9e24a3a3a4b613e29d97a23ca41f13989d48a212a4dd12809dffa1b8a35d112d9daaa152a30011e39c53a1fca2b310af9c0ea1a8a26910759cd0a062a22610359c9fa029a2200eeb9b78a0fca1dc0d649b56a0cea19c0d459b3ca0b8a1be0b159b1da07fa1340de19ade9f38a1ec0cd49a579fefa08f0a8e9ad49e90a01a0acf995d9e39a0b1091499fc9d16a05a09de98c69d26a03106d898a99d2ca01206c9984e9d05a0cb0812991a9d169f99050999ad9c019e60081798129c199ddb841798129c199ddb840000869e3da0ea1d0000869e3da0ea1d9e27832b982c3b2c1929282ddc2df02d7128022cb82c792f1b25a9288f2941300719cb1c0020a630f9a151a5afa5e730daa539a927aacf3056a7ceaac0ab453001a81eab25ac492f45a821ab05acc62d35a86caa87ab442cbfa761aaf8aa912a53a7bfaa84aba329d1a612ab04ac272964a6edaaf8ab7d2860a6c8aad5ab20281da517a9faa958277da43ba8a1a8a2266da59da86ba9d0242ea445a9abaa5120f7a1e6a833aa401c6f9cdba62aa84a1a60192ea47ba66c159f1ceaa27ea55a15e41787a368a5e2140d9dd0a43ea60d14cda1b1a6c8a7c215d2a17ca6b6a73516a6a1dda558a73218e1a156a681a7be1819a258a600a8341843a1b4a578a7d218c7a054a515a7d8176ba0d4a470a60617b39f3fa47ea54a15cc9e87a3dba4b014349e33a3a6a46e14e89ddba27aa42c14829d7aa246a4a912199d12a2f8a32d12a09cb8a192a3c0116b9c61a125a36911199c12a1baa21a11da9be0a062a2ef0f769ba9a005a2810f5d9b70a0bea1230f669b2ea070a13a0d3b9be39f34a1ef0c119b8f9ffba0ad0cca9a209fc6a04b0a609aca9e96a0010aeb99959e6aa0d10977994d9e34a0af06fa98049e04a05209ad98c99dd69f1e09a498b79dd59f1d091898a49d25a0fc087c98779da79ffa017c98779da79ffa010000459dc79d6d1e0000459dc79d6d1e8128452c782d7d2cad29462d2f2e2d2e4e293c2c012d802f1a25652889293530d30faf19aa1da63071a1cca41ea5d43093a53ba9dca9ff30c4a7dbaacdab75308ea8f0ab71aca62f94a8f7ab7eac7d2e72a8e3ab76ac122d6aa8cdab76acfd2bfca78bab5baca82aeda7adab64aca8291ba710ab26acc9281da664aa91ab0e289ca58ba994aaeb263da50aa9f3a9b625aca406a9d8a99c242ba424a941aa1b22e8a29ea8b2a90820c09e1ea7c8a8221a6f1863a4c5a6958fd91e3ea2dca5fe98ec1d64a235a5a19a8a8c21a3f5a4b597da9faea4c5a5f19556a117a63ba7ad91f6a1b0a635a8231183a219a744a8f516b8a168a611a8771724a1efa588a7dd17cca07da5f7a617177da02aa5d9a69315b49f7fa401a6cb142b9f14a454a51f13b29ee1a312a5cb127c9e6ca3caa4fa10229efca28ca4a010d09d9fa257a456109c9d4ea237a41410559df3a1fea39d0ffb9cc8a1c5a33d0fb19c82a16fa3d20e969c3ea129a3a30c8d9c03a1d3a2620c519cd0a085a22a0c2d9c9ba02da2ba08f39b5ba0b4a17908069b1da05da1d0024b9a9c9ff7a09b028e99029f7ba0320729998a9e32a04302dc98339ee69f2b02b898ef9d959f4b06c398ab9d1c9f078237983e9dc99ee5019c98da9c1f9ed7019c98da9c1f9ed7010000c9912a907b0d0000c9912a907b0dd328c32cd72d2f2c5b29542d502e6c2e44281b2cec2c4c2f4a252329282a2f30221bbe1ced1f983051a0d1a489a4d930cfa4cda8c4a8e63039a7c0aa17ab8e3036a80cac62ac0430cca85bacd9ac9f2ea5a84aacd2ac392d78a81caca0ac672c22a8e7ab97ac042bcfa777ab4dacd22953a7e8aaf1abae286ea6a5aae1ab37282da648aa82ab2927f2a5a1a9a8aab1251aa56ca94daa7324d0a47ba98caa4b2276a44fa986aa142075a161a863a9e11ce60c1aa511a7b315c5216fa0a8a42c90f922cc9db3a34599881d1fa153a4d39a0ea2eba49aa66d9734a2c4a606a8909279a177a609a8f710bca2b9a61da8571571a250a6eca72f16faa1e6a57aa7df1663a2d9a569a77a169ca1bda55ba70c1694a027a594a64d1523a08aa4baa5a513a59f1ca435a5ec12fb9eaba3e5a475127a9e4ba3b5a4b910459ef4a281a473102b9ea0a251a43110ea9d3ea223a4cf0f8c9dd9a1dea33d0f359d7da164a3ca0ed49c46a10ea39d0c6d9c0fa1b9a26d0c139cdaa07da2320c919bafa03aa2020c449b82a005a2a1088d9a49a0dca15b08269a0aa07ea10f08ab99509fcca0200a8299ce9e70a0d8068699c59e89a0e2065a99a09e73a09c092c99349e30a07006b898bf9d899f1509d498709de59e0809d498709de59e080900008b022c098b8200008b022c098b82c028b02cbe2d072cbf292c2d362e0b2e0f28f42bb32cc92ed8246d289829df2f5a1a7b1ef2205e300da02ba46da4903084a4ada8f3a8e93009a7adaaaaab8c304fa821acd1acd62fa3a874ac1dada82ebea872ac20ad782d9ea855ac03ad852c4da81cacb7ac832b06a8c6ab8dac232a43a7fdaa2facc828cba69caabeab05286ba652aa83abe82697a5b8a9c7aa8b253ba55aa96aaa4d2401a578a963aa75226ca4eca8efa97c20b3a1bda7eaa8181d5f8c15a561a7521afb2109a034a44e100d25a790eaa1d1994e246b90e3a08699d318a4a3a0a5a1989ea11fa752a8da9322a2d3a642a81a0b82a230a767a8ef132ea27ea635a85c1668a128a6e1a72d1704a106a6cfa79a152ca1eea5b6a72014fba03da5d4a61c138da0cfa429a6721225a086a4cda5ff11b89f33a471a59011d39e98a300a51a0f269e2aa3cfa4a00ec39df7a2b8a44b0e9a9dcda297a4030e529d99a279a4b50d3b9d4ba240a4630dd89ce5a1e6a30a0d8c9c9ba173a3bf0c309c32a1e1a2650cb39be1a06da2160c649b92a0f7a19808db9a43a08aa149083d9ad79f28a1900aad99369fcaa00b0a2899ce9e7ea0b409ec98759e40a06809cd98269e04a0350be298e29d7f9ffb0892988b9d389fa40aaf982d9d6a9eaf08af982d9d6a9eaf080000878ff18d280e0000878ff18d280e4428b02cb32dce2bd128342d3a2eea2d9327d82b982c992ee024da28272a5f2fa520a5217924fb2f8b9535a012a14c30f9a22ca8b0a8963037a694aaa5ab503001a8d5ab94acc52f45a84cacf2ac952e5ca89bac1ead852d4ca86facefac6f2c0ba830acc3ac322b7fa7c1ab76acc22908a70dab26acad2802a7c5aab5abc327efa658aa83ab4826c5a517aa1bab3925b2a5c2a9c1aa3224b3a5bba9b7aab12244a5bca90eab4b214ca417a950aa3b1ffe9e02a790a8bf1cb721d09faaa43519d426c31e709ceb106426161fa89cbb975b23529d5ba217974a99f3a454a6be8e04a221a76ea86512c8a143a61ba80c1502a297a623a8a216c3a138a6f5a717163aa106a6e1a7bf15f6a0e6a5d8a74314a6a06ca53da7a31337a0d5a48ea6bf1039a0a7a445a6511229a070a4c4a54110e69f22a456a5d30f559fdfa317a55e0cd59e5fa3cfa40b0c3d9ef0a28aa4710b939d90a252a4e30a699d35a223a4720a0e9deca1e6a3040ab19ca9a193a3b109609c5fa13fa35709f39b1aa1f4a206099c9bdca0a9a23103289b9da065a20703b19a57a0f4a13b08459ae79f54a1b3071b9a6e9ffba06a02c599449fd1a056029099049fbca0c4067a99da9e93a02e02fe98a89e65a032093d992f9eae9fdc013d992f9eae9fdc010000398a5083390a0000398a5083390a2628982ca52dca2b0529f22cfb2db82d79263d2b4b2c172e7e249d28da291a2f151d9121b7230b30699b23a0d29f493010a316a849a87e30d8a596aa59ab2a305da700acb1ac7f2f43a871ac3cad962e63a896ac71ad7f2d52a86dac3dad852c35a847acffac5e2b2fa801acb9acfd292ca76dab56ace2282ba683aaafab91271ba62eaa4aab5b26a0a5d6a9fcaa3e2521a59aa99daa8b2418a579a982aa8f23d2a479a98daab4213ea411a941aaf81f9ba172a79ba8e71cdd1880a1d3a4c8187326d21d6a9f2d118528a321a49b03922d27fe1ca6a04798bf1d71a25ea5b89600a142a60fa73d13d0a06fa598a7de140da275a634a8881720a252a604a8911702a229a6d0a7cd159ca1fba5aea77d15cca087a544a7b01360a026a5daa6fe1221a0eda4a7a64014fc9fb3a456a6ea13b39f5aa4b2a53e134e9f18a45aa5be12d19ebfa32da5d9106a9e6fa306a59910f99d29a3c4a4310e859db3a26fa4bc0d219d59a246a4730ae69c14a214a41c0a8e9cc4a1daa3bd09609c85a18aa36f09269c4ca138a32a09fb9bf4a0baa2d408959ba5a03fa2780b319b55a0b2a1e50af59a23a081a1850a779ab79f26a1050a599a0a9fa9a07f09019ab09e69a00c0249995c9e50a0e9013299e29da29f4d083299e29da29f4d080000c08c7989c90a0000c08c7989c90a3528822c712d7b2b1a28e22cd62da22d56263c2b752c412e90235628a329f82e091d6f1fa822b22f659c06a243a24230b3a25ca8a1a8853080a57caa93ab2830ada6d3ab98ac552fc3a733acfbac612e14a86fac45ad682d1ea86bac20ad822cd7a73dacffac542b5fa7a4ab8aacc0290da73cab56acb72874a6b9aa10acc527f7a54eaaa4ab5c266ca5d9a90fab602507a582a99faa9524c2a429a931aa7c238fa409a91caa7b2263a4cfa8d8a93021f4a246a841a9d81e839a45a517a75f1d9a266b204b9c1217fb299a2682218798dd2914266421329cc225691e1b9d1f9b699fdea5b3a6d38e0ea323a751a84b1621a348a61da83d1637a25da6f3a7a01779a113a6cfa7151723a1b2a55ea78c16c8a06ba5f3a6f71467a032a5e8a6b51462a0fca4cda6671439a08ba43fa6ed13cd9f3ba491a59b11469f28a470a56111209f0fa46da52311cd9eb3a321a5e20e7f9e35a3d0a44e0e359eb6a285a4f70abd9d73a24ca48d0a499d27a21ca42f0ad69ce8a1c7a3d009909c98a14ba374095a9c3ea1e5a26803329cfaa091a23303d69baea024a2fb02199b5ba099a129088f9a11a038a19102179a7b9f0aa10107bd99679f08a1cd06ea991b9fdea028025699749e8da0c405a6998f9e94a0aa08a6998f9e94a0aa080000958f3e90dd110000958f3e90dd1161271c2c032d2a2bf527bc2ce02d772d2c26122b632cf32dea2366289d29f92e651db120bb22d62f389caea21ea3173036a22ea8c0a84530d4a453aa2babe02f2fa693ab65acfd2e1aa73bacf7ac052eaea76fac1aad2d2da5a75eac01ad5e2c24a72bacddac342bc2a6bbab7eacd9297fa601ab14acb12834a68daab2abac27a5a53faa5dab4e2640a5aea9c9aa6d251fa556a977aa852494a4fea8f4a961233ca4dda8d2a9602203a498a878a9f52025a345a81da9d41e11a114a699a7551c6f245210e1a06619b82a7928e7245c92322cdd283c26a49ee029ed266f2306a02a21f19eaba26b9c79a2f6a51ea7269241a33ea5dda63e0f22a211a696a7f1153ba1b4a575a7d41631a181a528a7531537a13aa5d6a6db133ba13ca5b9a6aa13aca007a56ea62c1328a0b9a431a6a712d59f76a4c8a50e125c9f26a467a5da0fc79ea3a300a5490c509e59a3d2a4080cf49d1ba3b1a48a0bac9dc8a272a4f70a959d7aa23fa4830a6f9d29a20aa41604289dcda1aea3cf03b29c7fa13ca39203339c38a1eca25b03cf9bffa097a22f03559ba5a034a26408e59a5ca0c3a115084b9a02a04aa18207c399759fe5a0c40991991e9fb3a07209e199139f99a051067e99dc9e90a0050b9799709e28a0d9819799709e28a0d9810000ca0c2b0ebd820000ca0c2b0ebd825426dd2bd22c332b8d27a52cb62d742daf250b2b402cee2d5e2476288829c92e641d701f8e21b32f619a79a2e2a2ed2fdca0d7a786a8013071a403aaebaa992fe3a55fab6baccd2ec2a62facddacdc2d5fa77aac27ad202d46a75fac09ad342cd6a612acb0ac9f2a72a678ab5eac8329f6a5f9aa15ac8b28b4a598aac7ab7c2769a539aa5bab0f26fda4a0a9beaae124b8a44da93caaef238ba4d3a8bea98c2264a4a7a89ba9aa2126a487a869a9cc2027a468a83aa94b201ea2eaa732a91a1e051acba209a5c419ae2a6b28a92483988b2df52b98298ca0bf2ce72aa828f4a1152708213e991ea0d4a095a6c7a7498e9ca052a5daa7bd1766a1aea554a730188ea1b7a590a71918f2a081a55ba79716bea053a500a7261565a01da5d3a6d01451a0cba441a6ed1214a092a425a67112b29f74a4fda51e12a99f4fa4bca52110429f01a45ea57f0ca79ea4a31aa5310c5b9e3da3d9a42d050e9e01a3a4a4d904b49dcda28aa48f044f9d50a236a430049e9cd8a1d9a3d603499c71a146a34e09019c18a1dfa2ea08009cc7a077a29c08f09b94a012a25408cd9b53a0baa1c00a4d9b38a07da1850af99aef9f30a1130a809ab39f00a1160c4a9a569fb8a07609e999c39e51a0f008f799ff9df39f4308f799ff9df39f43080000d6903e92840c0000d6903e92840cee25ef2be12c0b2bab27b12cda2d552d4325dc2a482cd42db92234283229a92e0b1e6d205723652f2f9b3fa2bea28c2f20a1eaa76ba8a52f28a4bda9bfaa252f60a50bab47ac7f2e4ea6f8abc4acc42db6a632ac04adfd2ca1a627acf4ac122c58a6e9abbaac942a26a65dab76ac5629daa5f4aa3eac5f2882a56baadaab422743a52caa61ab1e2616a5cca9ebaa2925b8a468a988aa452499a4f0a8fca9ce2249a4aea8a2a923220ea47aa85ca94421bda32ea816a95b2031a325a801a9da1e7ca2d2a5eba6ab1bb4250e21f290c290c62d7e2c4e2abba1682ef22c8c2beaa3912b8729332740a4901043a25ba49e9ce6a1ada534a78b1618a17aa56da7f218eda07ea52ba73b18bca061a510a7d016a4a022a5bca63d1557a0e4a47ba68f132fa0d9a475a634110da0afa44ba6d5109c9f5ca40ba6330d769f32a4b2a58306449f04a44ba50306ae9ea0a3f6a49305fa9d41a3cda430059d9df3a298a4cf044d9db7a271a48c04359d6ba244a441840a9d09a20ba4f603f09caca196a3b003be9c55a133a36e838a9c0ea1caa238830e9caaa060a2f8023f9b62a01ea2c302df9a32a0d2a19802d69a0ca071a17007b19ad89f5ea1e509879a779f19a1aa06bb99f49e9ba01906529aae9e6ba0b508529aae9e6ba0b5083404280c5e1160823404280c5e11608204257c2a092c232a1a27a32cd52d472dfa24ae2a082cac2d52224a285329592e561c46202d220a2fc99adea29aa3392f04a1a2a78ba8452fbea3b8a9ffaae12efaa4eeaa56ac372ef1a5f4abc6ac7f2d15a611aceaaca72c22a6e4aba7ace42bd1a568ab71ac472a6fa50dab39ac3d2949a5b1aa00ac532857a553aa90ab0727f4a4e7a93fabda258ba4a5a9baaaf3245ba45fa960aa5a2489a4d2a8a2a92c2378a45aa84ba900221da441a81fa94a21d8a325a8fba8992083a3a1a7a3a8901f1da17ea670a8eb1c1b1561a239a4a4140c2d212b0d2924a1912f012e512ce8a61c2e7d2c262a14a866270023ef1ea8a5cda3a8a68fa7ac0b57a07fa53ba783123ba129a5f8a6ba16d9a017a5c5a68a16bfa0e6a47fa62715a4a0c2a467a6ac1394a09fa433a6571379a082a4eea5fa102fa069a4bba59d10969f4aa49aa52d0d059f10a455a5ba0c8b9ebda311a5580c359e77a3e4a4000ce59d04a397a4470b709d84a248a4830d389d2ca216a4240a0d9dfda1d7a3d609cf9cbea194a38b09709c6da131a32f090a9c17a1daa2dc088f9bd0a07ca28d08d49a71a022a2000bad9a2fa0bca1880a3c9abd9f3aa1fb09e8994d9fd1a0d30bf099ee9e8da04a0ba999c59e67a0740c7f9af79d839ffd097f9af79d839ffd0905013c091e10188205013c091e101882c024482a062c0c2a59265c2c6b2d212d6b24272a9d2b692d5122b027c9281c2ec11c3e1d761eb22ee7977fa21aa4a42e17a03ba75ba8b12ef7a290a9d0aa7d2e6ca4d3aa28acf02d58a58cab9bac492da0a5f1abbeac622cb2a5bfaba3ac4c2b97a584ab89acdd2955a512ab43ace92804a596aa01ac2328f4a43aaa84ab0a27eca4d9a90fab0026a8a490a9b8aa0a2533a43da94daa2324f2a3d5a8d7a9fc22a5a36ba860a9cb2144a30ca8f3a8d820c5a2daa7c9a86e2072a271a787a8c11fffa1e5a622a84e1f17a1cfa553a7d51b1628fe24e220719a1e30062f1d2de3a708302d2e412c15aa022b28284c257da95ba15ca55aa6499c33a0d5a457a6eb16a6a0e7a462a6e817a4a0d0a458a690164ea0b5a417a652162ba086a4f7a5f8140ba076a4eea568130ba078a4dca51913869f70a4fda5c3104c9f62a4eca57810009f31a48ba5d20cc29e0ba449a5700c6e9ecaa333a59205169e87a3eea43505c99d12a3baa4ca84839dada277a46d844f9d48a230a41584f29cdaa1e2a3cd03999c75a156a382032e9ceaa0caa22903629b58a012a2cb02a79af19f97a1aa07959ac79f65a16e07699a4d9f33a15402619af89ed9a098062c9a949e72a0130251994d9e44a0d308469ab09ea6a03b0d469ab09ea6a03b0d0000f501040ef5810000f501040ef5818224962a2c2ccd29da25262c382dd22c7124d029cd2b282db5211a270529a82d6f1940184e190f2e9d9905a370a4532e1aa087a786a8832e8fa28ca9d8aa412e19a487aa1facad2dcda43aab6dac0f2d18a575ab8dac332c11a51aab3aacf52ae2a4b3aa0baca929aca46eaab0aba028c2a435aa87abf127c0a411aa32abdc2690a4ada9d8aaeb2542a428a951aaf0241ba4cfa8e2a94924f4a38ba872a97b233aa33ea81da96b22a6a2cfa7bca834217ca278a78ba88c2051a224a763a82c20f9a1fba639a8871f19a14ba6f9a7761e0ca108a56da69219772da72c792a20a515317130462eaaab672ee72c942a2aac299cc0a107a5dca685a28aa5f5a697164ca089a414a68b1706a1a4a417a658155fa066a4e2a5011433a03ea4bca5851111a02aa4a9a5650e0aa034a492a5420e15a058a4d5a5e207f09f78a4eba59c0d4f9f42a4a9a5c506fe9e1ba460a52606d19e04a443a5ae058c9e84a3f8a42605ef9d06a3a5a4b504949d8ea25ea44e04109d0aa215a4f603949c9da19ca37809119c21a1fba2f4087e9bc8a083a29d08f39a66a001a23e08a79a2fa093a10908869aec9f31a1a507529aa99feea06407459a769fcda04507249a2a9fa4a0fc06f099ee9e8ea0ce0b7999039ec69f09827999039ec69f098200006e8da38cd90900006e8da38cd909a024952ad32b1d2aa8255c2c8e2dea2c1324dc294f2bf52ca6208c26c327952d7018aa115719e22d6f9993a36ba4ff2daf9f29a71fa81b2e9ba109a90faac92d49a313aa55ab332d5ba4a6aafeab7f2c84a4deaa22ac762b93a4e6aa22ac572a92a49aaa00ac182972a447aaa6ab522872a411aa6eab8a275ca4ada9fdaa542645a422a92baa4525f7a3dba8eaa9902490a3aca8a2a912244ca357a852a9f82216a3faa7e6a8dd2185a231a76aa8212152a2dfa632a8bf203da264a6dfa71b2006a219a66aa7841fc3a1cca518a7251f9ca192a504a7bb1d3123c58ec99f3c98a430392f2f2dd5ab6d314a30612e75aede25a1235f1b13ac82a3f7a5eba69018e49f89a4e2a5e51916a023a494a57918c39f27a478a596165b9ffba35da52d153d9f00a453a5ca13429f2ba48aa55511449f69a4eaa5170e6e9f95a424a6ab07259f84a4f3a51707ef9e46a491a56586749eeaa315a5ba850c9e72a3cba42785b29d01a398a4b184b69d83a248a452047f9d0aa203a4f603639d8fa179a3a603ea9c27a1e5a25903619cbfa056a2a008cf9b6fa0e8a1e102e19a14a06ea10408379a789f07a16e07ce99e49ea3a0ed065f99609e80a0650945992d9e52a058064199d79d5ca0ff088397439dc4a0b5088397439dc4a0b5080000528da48d520d0000528da48d520d8825842bac2c4029e524f22b0f2d9e2c06239829222be72c811f46253a267d2d32156e9b9199fd2dbe9ab0a474a5252eeb9fdda7bfa8fd2dbea12da970aa792d4ea328aabdabff2c21a49aaa05ac712c46a4baaa09ac6f2b3da471aa8dab0d2acfa309aa3cabf528c0a3b5a9f1aa282803a48ea9b2aa5f270ba45ca97eaa792656a306a90baa8125c0a2a4a89aa99924a6a251a839a9fb23a4a2d7a7b2a890223da256a771a80022e3a1d2a60ea86f21b4a139a672a7982058a1e0a50ba7342024a18fa5fda6d51feea055a5a1a6641fa9a0d9a40da6cc1fdca019a55ba65e1dfb2d062d8f2bf7a8fd32d831623082b0822aa328882522af3fa457a6a0a7de153b9f51a499a5881a589fa1a320a589183a9f73a3e2a48418eb9e43a3bca4a117049f72a3d4a43415589f0ba43ea5ba11999f60a4c3a59e0e599f6da401a6ec87ce9e45a4dea5388d829e31a4baa5d88f549ed6a34aa5ed8e039e32a3e1a4288e459deca2bba4e38aeb9c6ba257a43684a09ccba1c4a3cd83909c5aa13ba37a03809c0da1bfa24803579cd6a053a22503db9b7da0d4a1eb02a69a07a03ca1ef07cb993b9fbca031078e99dd9e87a0bf095799979e56a0940951994f9e08a07509d4980b9e0aa0660b7f983b9db99e750c7f983b9db99e750c00006e8b608d790500006e8b608d79053a1ec725fc268423fb23ab2a1b2c462c4d239d29fd2acb2cc11fad25af264a2d99116f9b8b9c162ea09b1ba573a6dc2d6a9fd8a7c4a88c2dfea0c7a8d5a9f62cfba14da975aa5f2cdca290a9d6aa652be7a28ea9a4aa4e2aada243a949aa612973a2f4a8fda96528a0a2fba81eaa9a2728a331a954aae4264ba33ca95caa3e2625a3fda834aa0725c9a2a6a8a2a961248da23ca828a96c231ea2a4a7afa8302202a228a753a88f21dfa1e2a621a81e21a8a191a6e4a7862077a119a665a722202ca1a3a5cca60920bca0e4a40fa69e1f49a01fa42ba54d1fd09e43a38fa49d1d86a216a575a6a318f019791a44141dacf02279201b2079ae54a3fda4b7a55819ee9dc4a251a4221c709ebba260a4371a399e14a220a4fb185c9e3ca228a46718869e77a262a45b15de9e56a3eba4be087a9f5ca4efa5b188da9fd6a45aa67f8e3c9fa1a4f8a5868d9d9e38a495a5af8c529ef8a35da5a385f09d71a3f4a418856b9dbca26ba484041b9dfaa1f1a3f209ff9c70a162a36809ee9c1aa1f4a20609c19c84a039a27e08349c06a070a100087f9b849f1ba18f071b9b349fe0a05207799a049fb3a06002fb99dc9e8ca059029b999c9e57a049026399699e16a03882cb98069efd9f6306d598d69d999f3a0bd598d69d999f3a0ba68ca59890982a1ba68ca59890982a1bd4210b285629c026c6231f2a642b382938241f2af02b322c7e1f5b262828c42c4b91fc9ffea0942d3a9daea608a82c2df59f3ca83ca9f02ce2a0b7a8eba9592c6da1eca819aab72be3a1f6a813aa982abba1cba8eca9782963a13ea84aa9932803a1baa7cba84b273ca1f2a7cfa86c26f6a1cfa868a9ce2633a390a9b1aa672695a2f2a839aad324c6a10ca8eea82723c6a133a767a8ea21aea1dfa616a86f2170a16ba6bfa7c0202fa120a661a726201fa1ffa523a7be1fdda081a5c1a6761fe5a064a57ba6101f21a11da55ba6b21ea09f0da44da5d51ec79d22a10ca2ec1e29a094a4d5a5f41a37a072a521a7a81411a0baa406a6c416439f3aa3a7a49818799fe3a235a4d719a69d58a1afa2f11a759d8da0d8a1391bc69d7da0e0a19d1a699de9a076a25317a39d9da247a45b89f89e80a4eba58b94989f21a5c1a64f95959fd9a488a62c95d89f5aa4b8a54894809ff9a33ba5d3900f9ffda296a4fa8dec9d1ea2f5a32504009d81a128a3b1036c9ceca077a24c031e9c98a0f9a10c03c59b55a0b3a1df023d9b1ea067a1c302a99ace9f29a1d807fc99329ff4a0170a7999aa9eb0a0b4096b996c9e93a08e0930991c9e70a066090599bb9d23a01f099998559dbf9fd9059798e99c6e9e820a9798e99c6e9e820a00008190bf8bcb1000008190bf8bcb1016212e282a291727b521d528462aae28ab227829062b9229f421f828562a3c2b4c9ca9a533a7ed2c249d0ca658a71d2c529db5a5ada6392b809ee6a618a8322b889f70a79ea8202a89a0fca7bba84e2992a0b8a789a88b2800a098a6e1a75d27d59fbaa595a65926a8a0daa6d9a79d2603a2b1a890a9532709a23aa97baa18258ba0f5a645a83322f5a026a687a72f21c0a0e9a51ca76520a5a0c3a5e5a61820b8a07aa5a4a6101f9ba030a565a6011e8fa02fa558a6901d89a021a531a6c21c70a016a52ba6531caca0fca411a6d81b26a0cfa4efa5db1a119e10a43aa5491ae59c4ba2eca3cf19ff9c00a298a332199a9ecba21fa40d19099f4fa2e7a33e188c9e04a2aca3a418fe9c41a0b2a1f518a99c629e2ea0451af19b569d249e021b159c6b9d199f181b559d30a1dba27b1511a033a5eea6a29378a0f1a5b5a78595d09f1ea5cda62495189f60a4eea5e392d99df5a2a7a4398ba49d28a2f5a33784e49c78a154a3be03659c0ca1b4a22009109ca6a03fa2b908c39b54a0e9a165087a9b2fa0aba140080f9b04a070a11508d29aab9f45a18f0a4d9a529feca0430af999ca9e7ca01d0c8699509e28a0ba0b2499e69dd99f600bef98979d629f120b7998419deb9eb90a1f98909cd79dcb811f98909cd79dcb817e85728edd892c0c7e85728edd892c0c2a1c3d200c209c1d6f20d82633287b27a41eba252a27d228f015121a9c1c8e2a4518f11e0d2011281b0e9494e598dd2944986ba197a2d629839cbea494a5c329319eeca53ba76429e79fdea64da8c1284da050a76fa8d827cc9f76a6e0a7d225359f18a546a673235699aa9b2b9d9116a291bf8f2c866d84d996cd9896986011359d0fa1c9a1721dcd9ec9a396a4111e249f18a4eba4521e969f36a410a59d1d9b9f40a426a5d51caf9f4ba437a5b61cad9f3fa427a5491cbe9f38a43aa5c91ba49f3ea430a5051bc09f32a442a5d11aec9f3aa42aa51f1a159f76a3a6a4c918c19c15a14ba2b8153e99949e55a0fc12729c4da068a13413aa9caea03da2d214f39cbea009a223172d9d86a0cda14518069dce9e76a03c19b4999d973199da1a4196411a0c1a611c539c3f9f17a1f512a6a025a7f3a8549bd29f71a647a893989d9d04a446a50691569d00a21aa43e84f39c8ea126a4ed03909d14a11fa36309c29cbea04ea2fa08289c72a0fda1aa08b09b32a0aea167084d9be39f6ba12308f79a989f3ea1e107849a2c9f00a187071a9aca9ecaa02007ac99579e7da09a097199fb9d2fa06a066399c49dca9f280949999c9d729f12095899929d239f0b061f99359de79eab0a7998cc9c549e160c7998cc9c549e160c00006a8e778da41400006a8e778da414a61fbb251127d024f21fb7253a279626dc1ccc216d23602600145a19241beb22af1a8b1fe020c322111b4920bc2135275d8dec9a8f995e28f798aba18da25528629c4ea427a52f28ef9d61a590a69027959ee0a5e7a6f026429f50a6a1a7502612a0eba647a84425f29ddca44fa6d521b39b7aa1d0a2f71df098dd9ea99fc11a069bb09f2ca04e1aea9c57a1faa1061c7e9deaa11fa3841b319e5aa2b7a30c1c6e9ed9a228a4eb1aa09e1ba356a4c41aa49e29a365a40b1aab9e3aa37aa4e219bb9e43a387a43719c99e23a37aa40919fd9e47a39ea4e4186c9f79a3c2a42618a29e83a22aa44816ff9c7da118a35e156d9cffa072a29414009d16a1a4a2f413709d54a1f6a2d8127d9d5aa121a31014e59dd9a160a3cf11649dfd9fbea1ac15299bcc0e4f90ac1cf208ef206c22f81652a31aaaa4abc39d7a9d70a3a6a49b90ba9d46a1a6a34b10c79cc9a0d3a2c2105f9caca09ca2a5105c9c77a03aa27010159c40a0d6a1ea0ebd9b04a08fa18a0e339b919f3ba1280ee39a249f00a1cf0d699ad89ec3a0810d039a8c9e9ca0440da299309e56a0080d5c99ec9d29a0d20c4e99949dd09f8a0c2d99589d479fd80a1199269de59e3c0cf698eb9c6d9e5d0aa698c69c6d9ef20b6098a09c279e55086098a09c279e550800004f89bf85000f00004f89bf85000f491e812449251b24411d1a2421254d25f218172032230d253818da1db51f3f24701b601fe4206224c319751e1d215d25b313dc14b119e525c792699daf9d1f26af995ca193a214263d9cbea3c8a4d7253c9db3a4cea57925129e30a55ba61125e89e94a5c1a62c24469eeea400a6f421e59c94a36fa40c20859c1ea27aa30d1e7a9cc2a1eca2291d989cada1c8a2691c059dd2a1fda2c41ba49d3fa293a3421bd69daba213a4bc1aeb9dd8a233a41d1a129eefa24ca4f7193f9e12a36ea4c319479e09a36ba40d19419ec8a245a4c918479e96a234a46d18619e5fa221a41518eb9dfca196a3be16989d71a102a33816379d0ca177a23d15d69cb2a025a25f14bc9cb5a026a24f14cd9cbfa024a26c13db9cbba045a26713e99cdaa04fa25212b39ca4a03ea2e110c0901c944695b6060188058b228e7a024b9a519e2ba0d402dd9b03a079a12603e99bad9f40a1350dcc9b879f06a1910e989b889f0ca16b0e7c9b7f9ffba0500e539b6f9ffca0300e509b509feda0040e069b179fdea0d50db69abe9ea5a0500c499a469e60a0030c039ad19d19a0ca0c9d99639d829f7c0c2499119ddf9e380ce098d59c8c9e120cb598be9c689efc0bbc98c39c259e3d0ab198a09c229ee20b7e98909c1e9eb20c7e98909c1e9eb20c0000fc15d516a20e0000fc15d516a20e561c622287231d22331b68214b23fe23c6193220682115240a1a381ff420e8236b1a291e622034247818071b701d64245f13dc1035179b248f859e99f498b3247495719ea29fb8245a9935a1a6a27d24f59b02a372a427240a9d05a419a56e23649d49a430a54f22389d3da4f5a45521f09c9ba392a41520aa9cdea221a4a61e629c30a266a3261d689cf1a11ca3231c819cc6a1efa2011be09cc0a1f7a2d41a0c9dc9a109a3391a589de9a119a39b19889dffa13fa3fd18a69d0ca25ca36118be9d12a271a39317b79d13a2aba34f17c29d28a2bea30a17cc9d34a2d6a3bf169b9d12a2d0a34e16989dcba187a3d615449d61a1f7a2b714ea9ceea059a262146c9c7da0dda13d13179c6ba0b8a12013159c76a0d6a1ff11e99b7ba0ffa1ee11519caaa049a2be11b19c81a020a2a3103298da9b2a9d750c7494f399d19b300c0599c69cab9ed409b39b2f9e97a0b182229bc49ef2a02308f49ada9ef5a01608f49ae89eefa0b30acd9adb9ed3a0900a839aae9ea7a0520a879a799e6da0200a529a579e48a0ef09299a1e9e1ca0ba090e9acf9de19f6f099c996c9d5c9f12093b99fc9cda9eaa08ed98b29c879e7208ae98a89c709e2d0af598b39c579e6508d898c19c8f9e38053398409c569e80093398409c569e800900000000000000000000fc15d516a20e561c622287231d22331b68214b23fe23c6193220682115240a1a381ff420e8236b1a291e622034247818071b701d64245f13dc1035179b248f859e99f498b3247495719ea29fb8245a9935a1a6a27d24f59b02a372a427240a9d05a419a56e23649d49a430a54f22389d3da4f5a45521f09c9ba392a41520aa9cdea221a4a61e629c30a266a3261d689cf1a11ca3231c819cc6a1efa2011be09cc0a1f7a2d41a0c9dc9a109a3391a589de9a119a39b19889dffa13fa3fd18a69d0ca25ca36118be9d12a271a39317b79d13a2aba34f17c29d28a2bea30a17cc9d34a2d6a3bf169b9d12a2d0a34e16989dcba187a3d615449d61a1f7a2b714ea9ceea059a262146c9c7da0dda13d13179c6ba0b8a12013159c76a0d6a1ff11e99b7ba0ffa1ee11519caaa049a2be11b19c81a020a2a3103298da9b2a9d750c7494f399d19b300c0599c69cab9ed409b39b2f9e97a0b182229bc49ef2a02308f49ada9ef5a01608f49ae89eefa0b30acd9adb9ed3a0900a839aae9ea7a0520a879a799e6da0200a529a579e48a0ef09299a1e9e1ca0ba090e9acf9de19f6f099c996c9d5c9f12093b99fc9cda9eaa08ed98b29c879e7208ae98a89c709e2d0af598b39c579e6508d898c19c8f9e38053398409c569e8009000000000000000000000000000000007b2305282229f3262628502ca62d0b2c1b28ea2b922c352ca726c42b052cb32d2e22d8284627c92f6c991da200a2343047a100a8a0a7ad2f42a410a9f2a8b12ee3a5d9a9b1aab42dbba719ab37ac292de4a758ab37ac2e2c79a64daa1aab262a4aa771aa5bab522910a890ab36ac82290ea65ba9b7a98d27b6a822ae76ae582abfa5c5a9d1aa122524a388a637a8c222b09c14a295a1c7244019f4a4f2a843238f2089a0a6a44117ba24691c3899e718a425241d349db619b725671d129c011afc244e1d399d131725239316169e7a19c71df39c39a24b1aa79c05a394a40e1c6ca0e1a397a40f191a9e65a28aa35e196da2e6a639a8221b1ba057a4dea58718d19df6a289a4d3165f9d93a23ca4d8155d9d14a2d3a3c4140c9dbaa16da3c813b59c6fa102a34012869c1da1c5a2d010869c06a18fa2aa10549cdba05ba2ee0e309cb1a034a29d0e0d9c7fa002a2780cad9b52a0d0a13e0c469b27a09ba1d508e39ae99f67a19b08909ab09f4aa1f202359a689f20a1ce02e199309ffba0b182a299029fbca098824e99a79e84a06f822199489e41a04c82d998029e05a02c82da98c49da79f1502af98b19d5e9f09029c986f9d079ff7016998449dbf9ee8014198349d769ee1817397d49c659ebf01cc98529da59eb50500000000000000007b2305282229f3267b2305282229f3262628502ca62d0b2c1b28ea2b922c352ca726c42b052cb32d2e22d8284627c92f6c991da200a2343047a100a8a0a7ad2f42a410a9f2a8b12ee3a5d9a9b1aab42dbba719ab37ac292de4a758ab37ac2e2c79a64daa1aab262a4aa771aa5bab522910a890ab36ac82290ea65ba9b7a98d27b6a822ae76ae582abfa5c5a9d1aa122524a388a637a8c222b09c14a295a1c7244019f4a4f2a843238f2089a0a6a44117ba24691c3899e718a425241d349db619b725671d129c011afc244e1d399d131725239316169e7a19c71df39c39a24b1aa79c05a394a40e1c6ca0e1a397a40f191a9e65a28aa35e196da2e6a639a8221b1ba057a4dea58718d19df6a289a4d3165f9d93a23ca4d8155d9d14a2d3a3c4140c9dbaa16da3c813b59c6fa102a34012869c1da1c5a2d010869c06a18fa2aa10549cdba05ba2ee0e309cb1a034a29d0e0d9c7fa002a2780cad9b52a0d0a13e0c469b27a09ba1d508e39ae99f67a19b08909ab09f4aa1f202359a689f20a1ce02e199309ffba0b182a299029fbca098824e99a79e84a06f822199489e41a04c82d998029e05a02c82da98c49da79f1502af98b19d5e9f09029c986f9d079ff7016998449dbf9ee8014198349d769ee1817397d49c659ebf01cc98529da59eb505cc98529da59eb505a1279d2b732c7726a1279d2b732c7726b82a542e522fa12b3a2ab62db82eb62d882bea2ee22f7c30fb27fe2a6e2c453283a07aa5a6a5b632afa623aaebaa8b3158a8d6ab6cac2331f3a881ac28ad573029a994ac4cad022f23a97eacfaac8c2db2a8ceab56ac002cc4a7e5a92eaab22929a717aa9daada28b7a63aaa44ab812833a737ace9ac712849a624ab40ac132720a403a887a8fc2528a196a4f1a5da25659b64a757a97122501b1aa825aa3118232415a2f5a61f119026eb1774a2479134275b1f039e5a910627551fa19c0098a225d11e229af59097222f10679f2f108396e6a089a3b5146fa070a43ca5c618bca081a472a5ee19e2a13da6a3a7421c78a10fa667a7a01b62a02ba584a64319879f70a4bba567171a9f0ba439a55d14609e1ea39ca44912f49d8ca241a47f10a89d56a215a45a10779d08a2bfa325100f9d9ea134a3830dc09c4da1dfa2230d779cf5a08ba2c509499cbfa043a27509129c92a009a23109c69b6fa0e2a1fb08419b4fa0b3a1c908029b31a087a11103db9a07a052a1ea02939a9d9f19a1c102829a369fdaa094021a9aad9e7aa0630283995a9e36a03f0201990d9e18a02402d498de9d1fa01982fb98b39d15a009821e99689de69ff5016799379d249fe8814299dd9c3d9ecc0165982f9c409dbf8965982f9c409dbf89d027302b332c4528d027302b332c4528c12b092f0530972c9a2bf72eeb2f8a2e732cb42f77301f31b028162c272de432fb9f2fa33ba4553319a852ab51ac613214a977ac0cadce31cda939adfbad09312faa9cad59ae283035aa2badbbad372e6ba9adac43ad902cb0a81aacbfacc02a4da88bab58ac9529c5a7a3ab5bace0288aa701ac97ac7e2893a717ab1bacc62795a588a97daac1262aa48da890a9582576a14fa81eaa5922531723a701a9b61d4e243ea2f8a642113127db1a5fa1db9a4a288a20e99c489e2e28cd1f399dcd9f7f27711ed99f719e2125571c4b9c949d09209e9ef4a21799939fdaa423a6a50dbfa1efa519a7e11957a2a2a6f9a7111c04a2aaa646a89f1a4da1eaa5b8a7ff18cba067a51aa7dd1783a0fea495a63816af9f39a477a57414a09e7fa3c4a4ce13199e34a38da41112f19dd9a26ba4c4117f9d88a239a43b10209d12a201a4db0fba9cb3a17ea34b0f6d9c55a10da3d30e149c18a1a8a29b0cbc9bd4a053a25e0c5e9ba4a0fca1260c369b6ca0b3a1be08259b31a06ba17f08ff9af59f27a13808cd9a8d9fe7a0ac02a79a2c9fbea089021a9ad69e8ea06b02ba99919e60a0530265993c9e22a03482da98c39daa9f09826198909d809ff7017898aa9d7c9f010240989e9dba9ffd016898699d589fe5086898699d589fe5083c254d2808292a253c254d2808292a250b2cfd2f5f30d42c0e2c8a2f5c30bf2e452ca92f5a30f7308b28742c2b2dae3258a2e6a50da62033cda7adaa7bab5b32dea85bacb9acd931bca91aadddad103186aac0adadae553054aa9dad6bae002fa4a920adddad202d3aa9afac63ad102c94a84dace9ac862a4da80eaca3ac53296ca7a7ab68ac972864a6c7aafcab6e27aaa50aaa1aab3f262ba599a99eaafd2429a468a9beaa3523199de7a740a92820342131a3e8a6401a9a27a611a6a33d98dc289021389d15a0d52873227698eea09d28cd219b9bcda11027ca205b9b87a12c24f0101fa2a1a01a945ca35da5e79cbea1d7a55fa7338c67a283a6e6a701188aa147a61aa86218fca0f6a5a3a70018d1a083a5fba6061670a03aa5e4a69e14f09f8ba402a62b12439f2ea465a50110df9e00a411a5ab0faa9e91a3c6a44d0c3c9ef6a282a4e90bfa9d9ca259a46c0b9b9d52a228a4ef0a429df2a1dfa3730ad69cb1a1a0a31b0a7f9c6ca146a3bf09699c39a104a3a7036f9c08a1afa27c03439cc6a060a24d83189c92a002a22183ba9b4fa095a16c88069b14a049a130885d9aa59ffea0d987a499179f96a06e8230998b9e3ea04382e6983e9ee79f2982c498fa9d809f1782c298c29d179f1b867498589de69ecc855398e59c829ea3885398e59c829ea3880000aa872d0749830000aa872d074983992af92dfe2e1d2c3e2c1d3086300f2f6d2bc32e882fa43084286d2c662d1e32cea183a594a69332c8a6c5aa3dab1e3203a8a5abe0aba63179a91dadbaad26315daae6ada9ae71306eaaccadadaef82ed2a987ad6aae4b2d61a911addaad562cdda8adac5bade42a5da82aacddac682967a765ab44ac3128bfa623ab14ac82270ba7b1aae9ab572670a6fba900abea24eaa4ada9deaa152385a2caa824aa5820901e44a512a8361cb2273c18f9a2a591672907241e12e79ee9290425811d37a1aa2905258e1dd4a2f7288924991b7ea37e26f71f019de1a24c1f589faea33ca0c0a039a575a60d96eea26ea796a84614f3a384a6e3a7611673a2f6a53ba7f31638a2eba56da75d1577a1b8a56aa7fe149ca024a583a6bc120ba06da49ca52510509f1ea42fa5b50fd39e9ea3d3a4470c6d9e3da3a4a4040c479ef6a272a4a40b159e9da244a42c0be09d2da218a49f0a6c9dd9a1c4a3240af69c6da14fa3d603a59c32a100a3a3033c9cffa0b0a27e83db9bc9a071a25083509b98a02ca225031c9b7ca0f8a109838b9a34a0d5a1d8820f9aec9f6da1a882b199469fb7a070829199f19e69a054827699c09e6ca049824199769e48a036021a99179e01a021829298b19d869f0382e1987a9d309f0102e1987a9d309f010200000386ca069b8300000386ca069b830f2adf2d132f042c9c2b822f6330bb2e842a1e2e2f2f60300d27be2a922ccc31f79cf6a046a03f323ba50aa90eaaa63136a7a1ab23ac7a31dda8f8acc4adee30b2a99ead8cae4430e2a9a3ad6baed92e9ea964ad4bae802d4ca914addfad752ceca8c0ac8cad0e2b6ba854ac22ad9229bca7baaba0ac5c2829a727ab41ac3927eea6d3aa07ac1426f2a560aa8babac2485a515aa43ab532354a465a9b1aade20f39db2a6bca88d1cba2646915ca44691142a8f245a92239fd62a4a26b02082a2ba2a5926031e28a4472a6725cf1df8a41e29c124f31bc1a47f2536187ea05fa35d9d8ea40fa6749cd4a2c4a673a8ed0ab2a175a62ba8fd148ca131a6c1a7891426a109a6c6a75c1433a1f8a5bca7ef1123a163a5a7a6310ea9a0dda426a6980d09a079a4bfa5150db89f26a465a5b70c069f8ca3e5a43d0c349e2da3b3a44005d79d02a3a4a40405ab9dd6a282a4c884499d94a269a48d84339d3ca231a44584be9cd1a1cca3fb836c9c83a149a3bb83149c19a1bba27403869bcca053a23703399b7aa0eba10083bc9a34a08ca1d182469acc9f2fa19d02ac99389fcfa06b023999cc9e7ba04702e398609e30a02302b198179eec9f1f06da98e79d799f00028f989c9d4e9fcc08cb984c9da79ea00acb984c9da79ea00a000019886e07a381000019886e07a3816829a12da92eda2b902a052f1830452e4929ce2dd22eb72fe526962bb72ce730451a229e779f4031a0a319a890a833319ea699abe3ab3b31aaa8c9acbdadbf3077a96fad62ae2a3069a997ad8eaed12e5ba97fad50ae632d1da93aadd8ad512cc8a8dbac8aadce2a3ba85dac26ad772993a7d0ab9eac2a281fa74dab45acf62604a7b8aa05acc325e9a55daab2aba424a6a508aa38ab4e2317a5d9a911abcc2180a161a8c9a9a71eea2357a0cfa5f3164a2af125c71b5e9d0d2c8b281524a5a2312cad28b224caa4c72b3c282924b8a5512aa726de20bca5c9282523ee9241a5341652a054a3e6a0b3a3bfa518a7ec96bca1b7a61da842150aa213a6d1a7a01452a1f3a5bba74f1212a1e8a5b2a7390fb8a06fa51ca7900e4aa0e2a464a6ac0748a0ada433a6410712a070a4c6a5cd06b89f31a455a546863d9fe0a30ea5d485d19e65a3c8a468854e9ee2a27ca4618bd09d7ea23da4d18aab9d25a209a44084429dd9a1a1a3f683eb9c8ca167a3b8838a9c4ba119a38283009c04a1caa24a83709bc6a095a2b388069b8aa04da26c88a79a41a0d9a125881c9ad79f40a18c82df99689fd6a0398795990b9fb7a0de865b99ea9e94a0ab865699c09e75a06089e6987d9e4fa007824099089e739f87884099089e739f87880000c2885a0614840000c2885a061484ee28752d882eba2b612a8b2ecc2f0a2eed28672d712e562f83262b2bac2cf530b6999ca157a192315da4e7a804aa2a311ca6a5ab42ac0f316aa8e4ac94ada43018a985ad8aae173065a998ada2ae882e46a993ad7fae5c2df2a837ad22ae522caca8e3acb3adba2a5ba871ac45ad4c295fa7f8abd0ac50287ea605ab3fac912640a6a5aaebaba12599a520aa6eabbf2444a5e6a9f5aa002439a5cea9d0aa262220a458a9c3aa0b20458cd1a545a8631a28290924b791ea9c5c2c41299524b6a2ef2ca6293d2688a5a32c4e298625a9a6fc2b7a28fe2304a7522a7f2628207fa63b253d92a4a17ca479a00da556a6a19a01a2c3a62ba84413f1a163a614a81716c3a117a6c0a7761466a104a6c9a72212cda070a51ea77c0e82a016a596a6ea0d49a0e1a470a6ac101da0a0a435a65410e49f4da49aa5c60c439f1aa445a5740cb29ebaa318a5250c5c9e78a3eda43a05ce9d1aa3aea4ea84639daaa264a490840a9d4aa22ea44284d39cffa109a40484909cb4a1c5a3c8835d9c76a175a39683269c38a11ea36483e39be9a0b3a23083949b9ba03aa2f682109b5ba0d2a1c6020a9b20a093a1a002d899759f49a15a828c99cc9ec4a025827a998b9e66a011862b994d9e70a0bb852c99159e1fa07c882c99159e1fa07c880000948816024f010000948816024f012829692d742e9e2bc3299f2e0430032eb528982dcc2eb72fdd25bb2ba32c1131019c7ba08aa1a4312da48fa9d7a92431f4a533ab17acf63094a778ac4ead813086a817ad31aeba2fbca844ad59ae492ec9a849ad37ae2d2daaa81aadfbad532c6ca8e5acc7adca2a0ba869ac20ad4b2957a7ddabb2ac2b28baa655ab55acc22619a6eeaa1bacaa25b8a546aa94ab792441a5d0a92dab7b23f3a478a98eaa1122c7a46ca995aad6206da394a89aa9e91c3424a1990ea4a199622c4c295d2559a3a32d5e2b64283fa6812d132b3a28faa7c82cd7292d2748a8202ce72844245fa874294623761984a7399d09a5a6a6aca063a1d5a516a89c0968a14aa6f9a7ba14b3a11ea6a4a77a145ca1c8a570a72e149ca06da525a788112aa014a504a71d114fa0fba4cda6e31019a08ba413a6490daa9f43a47ea5c90c239f32a469a59b0c1a9f08a467a5d505dc9eaca32da56d059c9e2ca3d8a4f604609eb0a28aa49484e09d69a264a457845d9d39a22ba42184d39ce5a1d2a3de83739c94a164a3a0833e9c40a1dda21089219cf6a094a2c988d69ba5a027a27b889c9b60a09da1c982999a11a049a1b287d299699f1aa150829399669f2ba14482a2992d9ff2a08886b499b89e5ea0f1859899f59eb1a0fb819899f59eb1a0fb81000022893302780100002289330278016928272d3a2e412b7529982ecd2fcd2d8f28922db72eae2f9525c42a732c003165903c9ebc9f6931f9a314a950aaf83093a547ab3cacbf3007a76eac45ad33304aa810ad0dae612f6ea82dad1eae0c2e56a81dad0baeea2c2ba8f7acd0ad0a2c01a8baac7ead8f2a7ea74bac04ad3d29daa6a2ab8aac0c2872a61bab26acae26cea594aad7ab492549a517aa39ab452432a5a5a9e3aa4323c7a434a94daa142249a406a9cea9fb2061a3a3a8aea9c41e249964a59ba7e2148b2acf27aa2372a1472e622c4f29dca64d2e6f2cb42980a8f22dcc2b4e290fa9ff2c8f2a46282aa9702b0928bd2327a98320539df7a247a65fa22da604a8799743a1eea56fa7941497a192a550a7da0838a176a52da7b10851a167a501a794084ca158a504a76a08a6a0eea456a6050813a0b6a419a67c07ae9f60a4b4a5ca06829f18a454a53486e69eaea3f3a4af856c9e65a3d6a45a85f99d21a3a5a4fc849d9dcca26fa49b84879d71a232a4798a4f9d34a206a41b8a099dc8a19aa3b289929c7ea146a35a892d9c38a1e4a208899c9bfaa091a2c0883d9ba5a035a2ed82bb9a58a0c5a1b6822e9af79f46a17d829999669fd0a049025a990a9fada07706a099fb9e87a014026f99e89e96a0010b8b996c9e32a0d8018b996c9e32a0d80100007701540c658400007701540c65841928c42ceb2dfc2a0929732ebb2fbf2d47285d2d722e662fdc26862bcc2cef302d9049a0b09f523188a2caa89ba9f83089a479aa8caba63064a62aac1aad2230ada7f3aceead562f15a819ad1caed62d26a819ad0eaecf2c0ca8ebacccad042c7ca78eac56ad5f2aeea616acdeacfe2868a6adab8cac01281ba643ab4bac7726cea5b0aaf3ab0e2528a504aa21abe323cfa492a9a4aa8d228da40aa936aa58216ba4e1a8eca98120c9a3b5a871a9461f8ba21ba800a9b11c3a24f195b1a2f498192e112cc62811a6832f4d2d302b5fa93e2ff42cda2a2daa2c2e4a2c1d2a8caaa32cdc2954260fab0a26441ded9c65a91aa128a55aa69e9ac3a1a1a547a73a176ba1aca59ca752142ba197a564a73414c2a05ba5eea6ac1196a015a5cba6610e49a0dea47aa6090e03a099a425a66807ba9f76a4faa502079a9f4ba4b7a59586309f02a449a5728cb49eada306a52a8c609e59a3e4a47f8e249e17a3aaa4118ea59dc3a274a4aa8d3b9d3fa222a42d8d879cc8a1aca3bf8c3c9c67a11ea344890a9c08a1c3a2e788f89bd1a068a2a5880c9caca01da26a88e39b73a0cea1c702619b5aa09ba1aa02ad9af99f2fa171021f9a9a9feaa04e02f1992b9f9fa027826b99c59e4da0fa819899279e2da041859899279e2da0418500006795b8977e1100006795b8977e1172279f2ca82d342bb2289d2edd2f9e2da127372d6d2e1f2fed24d12a2c2cc330d7152fa049a13131dca242a9e5a9dd30d1a415abebab823004a614ac0aadda2f35a7c1acc4ad0d2f8ba7ddac00aec92dc9a7f4acfdaddb2c7ea7d5acaaade42b0ba77aac56ad422ac2a61bacf0aced2811a69aab98acca27ada5efaa19ac4e2675a55faab7abf32429a5f3a916ab3b24dea491a9b1aace22b8a421a92baa99216da4e3a8f9a9af2014a4aca880a9192004a336a823a9681e79a2dba663a87316ce2996275b2369a34430732e802ca8a95e302b2e752c57ab752f522d102cddabe72d152c682968acfd2a28275e231facd5a07aa5eda660a1e9a0afa570a7471376a076a512a77912efa075a515a73112b2a040a5b9a6f40e6ca0efa471a64b0842a0e3a46ca6250801a0a5a44ea6ab87889f6ba401a6348d8d9f2fa4a5a5d08c6e9ff2a320a5768cc89e9aa3e9a4f38e1f9e56a3caa47c8ea19de6a28ca4f88d389da0a25da49c8d289d5ca22ba4468df29cfaa1e3a3e78cc99c9ba166a38d8ca19c4da110a3438c6b9c0fa1c2a2078cf89bbfa065a27a8b429b65a017a22888e79a32a0c9a1c887e29a08a05da17882a79ac79f35a15602589a5e9ff7a03282bf99f19ea0a00782639ace9e84a0c205639ace9e84a0c205000000001881000000000000188100008a232f29002ae7271a283c2ef92e792d73271e2d0f2e192f5a24982abb2b8b30cd8e019b769c12315ea192a869a9be305aa4a8aaceab673091a515acf5aca12f86a690acc6adc32efca6c4aceaad8f2d06a7baacc8ad752cdba68cac5cad432b73a64eac0eadc4290fa6deabb9aca428bfa57eab7aac8d2779a5c9aa08acf125f7a430aa93ab032593a4e3a916ab1e2481a49ca9bfaa1e2379a404a9f6a922225ca493a88ca9fd2028a45ea85ba98d20b8a326a814a9881f36a3dea7eca87f1c251652a222a5279ae62e992c472aeaa82631602f6e2d3aac5730712ee62cc4ac232f3d2d422b14adf72ce52ace2777addda055a50ba737a807a1d4a525a87a908aa011a521a734140ca142a500a75f0fd4a0fca4b2a6fc0eb6a0d8a47da675089fa0bfa433a6400878a08ea4eea5f08725a072a4c4a557877a9f5aa4a4a5d686069f0ba455a53386799ea3a3fda4b785159e59a3daa44285c49dfea283a4c984759d72a238a45d84469d27a208a41584109df8a1bea3d189c19caaa15ba3a583689c5fa10da36c83e19bf8a0b3a22a83549bb3a060a2f782ba9a5fa002a2c202839a21a095a19482199a8f9ffba05602cc991e9fa7a09906c499e89e77a03a06af99bc9e56a0ec08099a119eaa9fbe01099a119eaa9fbe0100000000fa80000000000000fa800000f022e428002a9b277127dd2dc12e4e2d2027e12c152ed02e87243f2a282c7c30e69746a21ba1e23080a14ca90baa5c30f0a357aaaeab12301ea5e4abf7ac272fcda58faca9ad622e7ca699acbdad472d84a6a7aca1ad372c31a670ac4aadf52a36a634ac10ad7b29d6a5c7abb2ac752835a5fdaa41ac4a2708a57baaf7ab192606a537aa77ab1e25d3a4daa9e2aa282462a466a972aaf62210a4e9a800aac621c6a37ea87ea9af203ea32da821a9941fd6a20da8e2a85c1fb3a2a3a79ba8501ee0a1cca644a83d1df325e62059106ba11d31c32fab2d67ac4131e32f1b2e1dae5530a42e152d48ae692e802c2b2a42afd6218d9f81a340ac85a18ea55ca62e8a34a0e1a436a67115a9a0e4a45da6111259a0baa404a6c6113fa097a4e8a586112ca089a4d8a53c0807a083a4dfa50b08769f85a4fca5ab074c9f6ca4fca51f87259f31a474a5c38cd39e05a433a5698c809edda326a52b8c3d9e8aa3e3a4858edd9d1ba3a7a4f48d959d9aa262a4798d5e9d3ea219a4118de99cd1a1afa3ad8c779c5ba11ea34e8c2c9cd8a0a2a2ac889b9b55a0fba12e88069b04a07fa1bf87ea9ab79f3da15f877a9a3f9f01a1ec864b9ae39eafa08486159a8e9e5ca033867e99629e40a0f4818d9ac09e85a0a90a8d9ac09e85a0a90a000000009284000000000000928400000e22da28052aa227f8267b2d6a2e372d9626972c222e582e5e24c929d92b1830ff98c9a350a46130aea092a870a91b30daa2fca923abb02faea49dabbeacd02ea6a564ac5ead022eeca56fac8badfb2ceaa557ac39ad022c99a517acdaaca72a4fa5b5ab92ac352916a519ab48ac3528fda4abaa0dacf526f3a45faab6abe325b9a409aa46ab172567a46ca9a2aa36241fa406a927aa782300a4baa8ada9192250a35fa85ba92421cda207a8f3a8442095a2cca7b2a8bb1f3da265a785a86e1e3da21ea75ca8991d9ea127a666a74d184f2ce229172834a84432eb30b72fc4ae0e31f52f8d2e98af3130852e292db9b024294625521ef3ae68a2f6a5a7a725143c9f63a4eba5f814efa092a422a6c1085fa079a4f1a594083da04ba4c3a5658837a042a499a54a8833a052a4a0a53c8e27a076a4fda5e98ddb9f80a40ea6a690459f3da48ca52a90289f1ca454a55391d59e06a437a5098f869e8ba3e7a4638ef09df0a286a4d08d929d74a23aa44b8d059deaa1eca3da8c979c85a170a360891c9c0ea1e5a2e188a29bc9a084a29e881e9b79a01ca2e182c79a42a0b6a1bd82b49a07a04aa1c6878b9abe9ffba079877a9a809fd2a070825f9a389f96a059829099c99e70a09d066399389e15a0b08c6399389e15a0b08c0000630a0912630a0000630a0912630a6121ba284f2aab260226232d862ec92cd725302c3d2d022ee121a42890296f2f969684a200a3f52f92a0a8a890a9b42f23a2b2a9d9aa4f2f18a404ab68ac742e05a5f2ab1eadcb2d5fa514ac1aad972c4aa514acfeac5c2b47a5f3abd5ac042a1ea568ab92ace028eda4c7aa34accc27aaa464aad1ab8f2685a401aa5fab702543a46fa99aaa5d24fba312a931aa55238ca3dda8d0a9b4223fa38ca885a9f52100a31ba815a9312198a252a789a8752090a2f0a641a80e204aa27aa6eba7e41ec0a1ffa557a7b51d26a19ea536a7c81d7fa175a583a685190630cc2da42c4dac0033a431923008b1ba30d52f242ebfb1e52970272b2335b097a23da5f1a6fc13609f64a4cfa595184da053a4c0a5fc16b69f2fa474a56d156c9f16a460a50c14649f1ca469a5be0e649f4fa4b4a54608609f85a40ca60c88559f96a434a6af8d169f7ea4e6a55b90e69e2ea477a5d28f619ed0a309a5e490039e65a3cda46e90b59defa28fa41190ac9d79a23ea4828f729d0aa2fca3f48c5a9da0a16ca3928cfa9c34a1d4a2398c799ccca039a2ca8bc89b72a0cba1388bde9a19a066a10988459a759ffaa06c87e599de9e90a0e78686996b9e60a02d027499359e3da020827799f89d50a00b029e98809d44a0e7059e98809d44a0e7050000498ff98a928d0000498ff98a928da0256a2cda2d4c29a225b32cf72dcc2c9e255f2c6c2d292ea2219e28a529ed2f0f9a1fa5d4a5693027a131a9adaae82f9fa25baaaaab4e2f23a44fab87ac5c2ec2a404ac0aad972deda400ac01ad7f2cdaa4c1abbfac4d2b98a445ab5cacbf293ca4b7aa08ac75281fa41caa6fab6c2713a4c9a904ab432618a4a4a9e3aab125f3a358a93daad82430a3e1a8e6a90424dea27da87da9c922bfa22fa8f7a80c225ba2ada7aea8342116a221a75da8ac20cba196a6f5a7272097a137a681a7121f61a10da67ea7041f3aa1a4a505a7ed1e7aa044a5a2a64d1e83a035a5e8a569168d2ff12d852ccead45322131772fc9b29025a826552452b035a461a574a6579041a080a4b5a52418a79ff0a330a51618229faea3e2a4b116d59e77a3e5a45315e69ea6a3fda4d411199f2ca46fa59008869f7ea4d7a5968e329f70a4e1a5e6908f9e2da4a8a59193909e23a49ca535947a9ed1a349a59a930d9e49a3e1a48c914e9dcba2a1a4e38fd39c31a22da4158da09ca0a194a39d8c839c4aa111a32889799c15a19ea2f488419cdea036a2bf88b09b7ca0c4a15f88a19a09a03da1a782e299429fcda06882a299df9e8ea04e027499979e5ea0b20660993e9e0ba02902d498d69dd39f10028c98219da99ef7818c98219da99ef7818a1a101cd11e1e998a1a101cd11e1e99671ea9243b25301bd824072c182d072c8225902cad2d2d2ef520ae285b29043085980da477a47d30b8a05da94daacf2fc3a2c1aa07ac5d2fc9a358ab6cac402e44a48dabadac1a2d6fa41cab8bacd52b43a4d1aa3cac492acaa368aaa7ab292977a3b8a9e7aaf92705a35da976aa9d262da329a964aabc251ca331a950aa3d2515a31ea945aa9e24eca2cfa8cba9ea238fa26aa85aa9dc2235a2eca7d6a8e52115a25ca772a83b21dda1eca63ca88a2098a185a6f8a7322038a1cfa534a718208fa0eda405a602202da06da457a5771f60a034a46da52c1e4fa0cfa41ea62f1bc9a29ca6cea7d1119ca40aa7bda7069c46a492a58ca6818bba9ea9a31ea5d0180ba096a3b5a4b61a319e9ea258a4a6191d9e1da228a46b18599e22a233a4ae17c19e99a283a42714649fb8a337a50f8fd19f81a429a60994d99f04a56da6d994449faea408a61694a09e2fa489a53594409e05a45da55392e79d79a3fca46e90649dafa263a4998d329df2a1d8a3ee8c009d7da15fa36789ec9c16a1f8a20189af9c82a024a27c88009c02a061a1fa87389b809f28a18a87d99a589ff5a061874e9a119fbea02d87e999de9e95a00e879199aa9e5fa0eb866499809e2ea0a089cf982d9e0da07b86cb98ea9daa9f1102cb98ea9daa9f11023d14311d941d1a043d14311d941d1a0463242b2b392c14284c25952ceb2d522b6026dd2c4f2e8e2d9022ce29f02aad2f759a54a5eea67430cea169aac8ab492fd0a2e1aa37acb92efda28baa32ac572d22a398aa44ac632c9aa34daa03acce2a78a30daa7bab7729e6a28fa9e8aa3528f1a1bfa8c6a970267aa128a808a91425b4a14ba840a91d2538a345a983aa532517a342a963aa892448a267a807a9da22a3a166a798a87a21a5a1f1a638a8ec2085a1a5a6faa76e202aa15ca6aba70c2026a11ca665a7811f04a1cba52fa7f81e31a11fa567a6d31e49a03da44ba50d1f2b9fada28ba401200f9fa4a3e1a4e71c83a01fa6eda70611be9ef8a491a6011425a0bba4faa56717ab9e09a3aca43c18d19d16a2c4a36119889d09a173a2591a9c9d71a0e3a1b21a7d9ebea0d8a11c1ad49d85a106a31c16f49d22a3b9a4b792079fa8a41ea60097919f3da5dca65297339fb0a435a6a8966f9f51a4a1a5ba954f9f01a443a58094f69e05a37ea45a91df9d23a2d1a3328dda9c88a11fa38f895a9cf7a08aa2fe88089caaa022a2a4889d9b63a0cba15d88109b19a06fa11e887c9aba9f1ba1c487c299109fbaa064827099859e7fa03b823e992e9e65a029821099049e53a02102eb98c69d1ba010829e986d9dfa9ff60197981a9d0a9f9c0a97981a9d0a9f9c0a00003d93908f0d9200003d93908f0d92092229297c2a38265224282bdc2c88295724342b9d2c112b8b22af292f2b8f2c719dcfa50ca8fd2e32a18ca9ffaa992de5a00ca912aac72c07a1e1a8f6a96e2c4ba1d5a831aa1a2b86a1cca8fba97229bfa1dba8d1a972283ba145a81ea99f2665a0aaa601a85125f29ffaa521a7da241da155a8d6a8d1258fa329aa95ab1926329f3ca779a8fb20ada029a6baa72e20d9a012a63aa76d1f96a0bba5eda6a11e89a0a9a5b6a6b41d71a057a587a6b11c33a035a556a63c1c50a037a54fa6021b34a029a55ca69d19c49fc9a4eca54a19949eaaa49da51419129d61a3c4a48518859c6ca210a4b218449d8da223a48018359ea8a239a41418e79e7aa228a4ca179e9e16a28aa33c19359d18a063a19b19289d559de89e341ab09bca9c729eef1a309cca9ebea0d1190d9ee6a276a4cd104ea0e1a5aaa7aa9661a0eea57aa75d9825a0f2a496a6b496689f2ca497a5be94f79dd4a273a45291919d0ca2d1a32c8dd59c64a158a38989699cf2a0aaa20689079c8fa037a21683aa9b3fa0e3a1e082679b1ba0a0a1c8821e9b02a06ea1b782e69ac59f4ca1a102739a3f9ff2a07107f899bb9e6ea0fd067d993e9e1aa08d060999ee9dc59f3d090199a49d569f1e068d984d9df39ef1013898b19c1e9ed8813898b19c1e9ed8810000498ae181cc810000498ae181cc81ea1d4025d82604242622d228062a5a28f82124280a299129481c2b22c123da2b8f16a61d691c042d969738a0f6a1862b389c55a44aa5492adb9e6ea6d0a7f62916a089a79ea8862999a028a838a9bf28baa02ea820a97627a9a0e2a7b7a8bb25a9a0f0a63ca83224c19e68a446a5691fd3942f965994c2107490258abf0f2b8f6b9a149d239d7514309e7fa247a3bc1ad39eaaa399a4441c7a9f18a4fda44a1c8d9f39a419a5c01b8b9f35a428a5f81a869f42a41aa5381a8a9f3ba42da57f19909f3ca439a5c2188d9f34a437a5a618bb9ebca3c3a44e17f39cb8a117a39d14319a709f44a06412df9aa19f29a1f3105d9db1a0f6a151122d9d06a141a236147e9d19a183a29a16409dc4a0d6a1f717579cb39c0f9e77197e97d50e0d94af1be9957019fe13311d0a9ef7a271a4be8c3ea1aaa715a9409c1fa0d1a56fa70e99059e99a3fda462934b9d09a226a4558d0f9db3a13fa40c8a789d11a12ca36089909cc3a029a25583089c6da0eba118839d9b2aa09ea1e9822b9bf39f5ba1c082d49a939f29a19f82699a1f9fe7a07d821a9aba9eb3a05a82aa99509e60a03b026d99f89d16a022025a99be9dc99f0e024d99999d789f13064799749d2f9fff01fc982a9dd89eaa058c98d29c5a9e82088c98d29c5a9e82080000438c008aa5130000438c008aa51334202a27682826259d206f27be28ea26651ea324bb2598274f118a189d19ba258117b61c261e7f21b01bd22040227d26d78d349a299a5a28a09a46a3f5a34e284c9d4ca563a60a28139f77a6afa72027729fd6a607a85d268a9f04a714a8a82539a04ca778a8cb2436a0c5a642a8ee22999ef2a44aa60d20369b5aa18aa2e31b279a07a0a0a00c19719c54a1fba19618569de8a134a32b18ee9d72a2bca3b7183a9ecca22da41f18769e16a344a40d18849e27a356a4e017a29e30a371a4a217809e39a36fa46817889e15a365a42f16b29e33a3a1a4e515a89e10a38ea44915e79d39a207a4aa13c29c5fa1e1a2d011939c39a1bba2bd112d9d70a112a37210759d67a122a36b10769d85a159a37210779dc6a149a3760e1a9dd69fa1a1e615379a151f3721151f38a05ea501a7229a1ba178a84da9329c089d33a216a4c18fcf9d2da1a6a39d09cd9c0da1f7a2900c5f9cc2a087a24d0c7a9c85a03ca2160c1a9c51a0cca1b60be79b1da087a169083a9bbf9f33a12808e29a3c9ff4a0c307619ad59ec6a05407f099869e9ba0000799992f9e5da097094999e89d23a0570938999a9de09f10091d995e9d7b9fe708fe983b9d0f9fc808f298119d9a9e9005a798de9c769e81086798c99c3e9e51056798c99c3e9e51050000e9889785210d0000e9889785210d411f9325ef260623591eef24312624253d1bab21c1238625d8160f1dd91e33251519cc1de91fb8246b19531ed4204a25af142b150b1ac02549944b9e0d9ed1253e9a33a2ada39425c09c53a488a54a257f9d28a55ca6e3243a9ea4a51ca78024549ff4a577a7bf232c9faca51ba7d221609efda43fa634207a9de9a3e3a4bd1dec9c9ea216a4961cc79c43a283a31f1b169d0da277a39519789d64a2bba31e19d09dd0a226a49618cc9dfda244a4fc17f29d13a35aa4ca17169e04a370a47217069edea261a40b17ea9da8a227a49a16da9d63a211a43b15d09d0ba2d2a3cc14829dbba130a37c14419d55a1aea23c14f59cefa06aa2bc12be9cbaa03fa27312e19ccca043a24511f39cd2a048a23811d19ce0a059a20c100e9ddaa052a2bf0d079c22a0bba1e009568a55901392c500a3911895f1964b81579b6e9fc9a0a988c59b16a06fa1d088e19be09f40a10e83c69bb29f11a1f302959ba39f07a15608889b919f0ca14008709b909f09a12608739b629fffa00d08429b4d9feda0990a009b019fdba09907c49aa09eb5a030075b9a1c9e5da09509b5999d9d17a022092f99339d4b9fc605be98099da99e97059798cf9c7e9e7f089c98d49c489e6d059498d89c459e7a086b98b99c2b9e3d056b98b99c2b9e3d050000eb15171789100000eb1517178910ac1c89238124e521281c0b237f24f023431ab72064222824fd198b1ffe202b242f1ad41de81f462468182d1a751c46248612100bc5125c24618fdf9aa69b4b242597a69f99a01d24cd99e1a13ba3f423389c7fa3c4a445233c9d5ea46da56b22ab9d89a49da58f21f09d99a49aa5a5209a9d4ea44ea5311f4c9de8a3e2a4ae1dd59cf4a25da4711ca09c4aa2b8a3c31a989ce9a14ba37519cb9cd4a115a3c318039dd8a120a36117589df3a12aa33617879de7a150a31416a39df1a13fa3fb14c79df6a161a3d014c09d15a29da3a814c89d11a2b2a37c14d69d22a2c7a35114ac9d06a2ada30c146f9dafa16aa36a13fb9c3ba1bfa29311a69cbba008a23311419c6ba0bda1ca0f1b9c76a0bba1bf0f1f9c8ea0f2a1900d0f9cb1a030a27a0db39c03a1baa2560f799c23a0a3a13d0d4c95129af09bd3081195a89a839c3208da99899dae9f9602bf9b7f9e94a03088539beb9ecba03b88229bf99ee6a0c682169bff9ee5a0b702ed9ae39ec9a0a302949aaa9e99a08602689a649e61a06c02399a349e3ba052021e9afd9d14a03e020d9ab79de09f2402a399569d4c9fff055299019ded9ee0011299be9c949e5305b998ae9c759e4205e698a69c5a9ebd019f98c29c969e3905eb97429c279ec804eb97429c279ec80400000000000000000000eb1517178910ac1c89238124e521281c0b237f24f023431ab72064222824fd198b1ffe202b242f1ad41de81f462468182d1a751c46248612100bc5125c24618fdf9aa69b4b242597a69f99a01d24cd99e1a13ba3f423389c7fa3c4a445233c9d5ea46da56b22ab9d89a49da58f21f09d99a49aa5a5209a9d4ea44ea5311f4c9de8a3e2a4ae1dd59cf4a25da4711ca09c4aa2b8a3c31a989ce9a14ba37519cb9cd4a115a3c318039dd8a120a36117589df3a12aa33617879de7a150a31416a39df1a13fa3fb14c79df6a161a3d014c09d15a29da3a814c89d11a2b2a37c14d69d22a2c7a35114ac9d06a2ada30c146f9dafa16aa36a13fb9c3ba1bfa29311a69cbba008a23311419c6ba0bda1ca0f1b9c76a0bba1bf0f1f9c8ea0f2a1900d0f9cb1a030a27a0db39c03a1baa2560f799c23a0a3a13d0d4c95129af09bd3081195a89a839c3208da99899dae9f9602bf9b7f9e94a03088539beb9ecba03b88229bf99ee6a0c682169bff9ee5a0b702ed9ae39ec9a0a302949aaa9e99a08602689a649e61a06c02399a349e3ba052021e9afd9d14a03e020d9ab79de09f2402a399569d4c9fff055299019ded9ee0011299be9c949e5305b998ae9c759e4205e698a69c5a9ebd019f98c29c969e3905eb97429c279ec80400000000000000000000000000000000ad255629a52ae5254c293d2d962ed229c529b32dcd2e902b3929002e8f2db32dc99fc42711a7ac2f49a17ea55aa6b330c6a40aabdea92c318ba63eaccfab8f3058a73eac97ac062f52a860ac11ad212d9ea878ac37ad302c24a819aca5ac352a15a7deaa06ac6528a6a757ab46acab2729a798ab6eac0627c9a732ade7ad1d2913a3e4a856aaad2290980ea412a632214125dc20751b0d24fd257a9ba3a7fc146d26011d199d279b0828b1219811b09c6b28fb23da1c3f9e4d280824c31c4f9efa274d23b21ca69f0127dc21ae1a949fc925592090975c9ff7218790169f199d9b99e4a0cea258943ca025a4bea4f314dca45fa853a90f1b54a14ea58fa6f318939edca253a43e152c9d40a2efa3e211039de1a18ba3260ec49c6fa108a3c20d729c3da1b9a2930a3d9cf3a072a2360a3f9ceca060a2190a1b9cc6a028a2e403f79b8ba0f2a1b483b69b5ea0bda17983879b38a086a1f888249b00a04ca1b688b69aa99f18a17588539a669ffba0178bdc99219fd6a0c08a9c99da9eb7a08b8c6999a69e8ea05b8c1199629e5ea0228c0399239e22a09c89c298e29df39f5289a898b19db69f2d86ad98949d719f0d869498669dfe9eda855798339da79ea4853498379d639ea8885d97d09c529e2a85d598419d909ee1010000000000000000ad255629a52ae525ad255629a52ae5254c293d2d962ed229c529b32dcd2e902b3929002e8f2db32dc99fc42711a7ac2f49a17ea55aa6b330c6a40aabdea92c318ba63eaccfab8f3058a73eac97ac062f52a860ac11ad212d9ea878ac37ad302c24a819aca5ac352a15a7deaa06ac6528a6a757ab46acab2729a798ab6eac0627c9a732ade7ad1d2913a3e4a856aaad2290980ea412a632214125dc20751b0d24fd257a9ba3a7fc146d26011d199d279b0828b1219811b09c6b28fb23da1c3f9e4d280824c31c4f9efa274d23b21ca69f0127dc21ae1a949fc925592090975c9ff7218790169f199d9b99e4a0cea258943ca025a4bea4f314dca45fa853a90f1b54a14ea58fa6f318939edca253a43e152c9d40a2efa3e211039de1a18ba3260ec49c6fa108a3c20d729c3da1b9a2930a3d9cf3a072a2360a3f9ceca060a2190a1b9cc6a028a2e403f79b8ba0f2a1b483b69b5ea0bda17983879b38a086a1f888249b00a04ca1b688b69aa99f18a17588539a669ffba0178bdc99219fd6a0c08a9c99da9eb7a08b8c6999a69e8ea05b8c1199629e5ea0228c0399239e22a09c89c298e29df39f5289a898b19db69f2d86ad98949d719f0d869498669dfe9eda855798339da79ea4853498379d639ea8885d97d09c529e2a85d598419d909ee101d598419d909ee101ec27fb2b0e2dec27ec27fb2b0e2dec271b2c2730cf30fb2a0e2da1305831c72de32d9e316932cb30f528892c692d5032e89f42a7e6a67833acab17af10b02833a0ac98b043b10d33deab3daf3cb023318cab20af09b0d82f09ab67ae4eafe72dfca935adf4ade32be0a84aab15ac172942a81faa17aaad2771a7b1aac3ab70279ca748acf0ac7527f2a553ab7dacb4255fa0f6a50da70a25c51f479f7da4ae23d6248ca358a81a93162774a0c5a574a09e286d1d38a10aa1cf28f520be9bb8a1a62872220292eea067285922d111dba0cf276821821168a17226aa20979163a144249617969e5fa1a88e19a0f9a2439e6fa035a4f2a45a966ba1f4a51aa7ef1a52a15aa6bda77c1cbaa07ea59aa69819d59f82a4bfa5a416049f04a438a55614539e21a397a4000ffc9d7da22fa4a50b8b9d2ca2fea3e7045f9dd9a189a3a704e69c78a105a34b047e9c27a1b0a2ff83359ce1a068a2bd830b9ca1a028a28d83af9b79a0efa16383579b5ca0cba1e5880b9b3ea09aa1b688f09a23a06ca18b88e59af59f34a151888f9a729ffba00a88779a189fbea0588a059a9f9e63a0da8968994d9e41a09289dd98049e1da06286c098f29d01a04189f398b89de29f1e894e997e9daa9ff6857d99479d239fd3887d99ff9c779e92886d984b9c559d6b8d6d984b9c559d6b8dcf27d82b042d4628cf27d82b042d4628422df230a1316d2c002e35311332762efc2ef13123336531f625f829222a5533e3a777ab23ac123409ad65b0fab0b5335eadd2b074b1ce3367ac02b0b8b0cb3157acdfaf89b08130aeabd3aec1af8d2ec2aaebada5ae6d2c91a9ccac86ad6e2ac1a812acb0aced2826a8a5ab55ac4028c1a703acb1ac64279fa6fdaa34ac432658a449a93faa34252b9d17a729a943233f234ca38fa7ae1b6f27559f86a5e398a428e3182aa37ba021294121bd9ddea23c29e121d09b72a3cc289822799276a46628f1214a928ea4dd27aa21d011b8a4a6254e1eb59c61a4da1f4f9dada29ba141a0c4a4b1a5329727a280a69ea78f1a42a2e4a633a8071ba4a1d1a542a7091951a16ca5f4a68518afa00aa57fa64716759f2aa465a56314779e65a3b8a4d810139e08a38da4950ec39ddda26ea49d0b7d9d90a23ea4cd04239d17a2eca37504b29ca0a164a31d046b9c51a1e7a2d803159cfea07ba29c03bb9bb7a027a26983619b8ca0daa14083249b57a095a1a888159b26a05ca17288e69ac99f0fa12d88b29a839fe2a0f8877b9a1c9fa5a0498a0d9ac59e7ea0fc895e99659e42a0a889f498fa9dd29f49898c987b9d4e9fe68834985a9d229fbd856998829d1e9fed882198829d569fde885798699dfc9ef5815798699dfc9ef581fc02c01a4b1c8014fc02c01a4b1c8014c72c4d3092315f2b152eb5318232f82e252ec231b73257319e2b6c2f09301b34a794c01e871fe33419acc7af4ab09b34e7ac96b00eb1ea3340ac04b095b0e7319bac23b0dcb0bc3039ac6faf67b0242f19ab79ae6faf052d12aa97ad83ae7c2b3ea9d2ac82adab2986a83daceeaca62848a8c8ab7fac882718a73dab2eac1226f4a584aae2abf224a1a35ca9f7aa24235f1977a605a94b1f2327839ba0a4039263298120a1a081a0f329ca23219cf8a2d4299b24cd1834a486298f24d51bf4a407298324611d4ca56b2821244b1d4ea5ef2604216f9898a56823ba91e5a1d4a44c99eda320a5359f27a265a69ea77314faa12ba68fa7401889a117a653a7241815a18aa5cca60415daa056a5b0a63d11e39f85a4dea5420d419f38a47ea57706d99e00a419a52386769e83a3c1a4b185409eeba27da4c48b069e8fa243a4478bb69d2ea212a4c88a459dd6a1c1a3548ac79c90a164a3f7898d9c51a10ea3a3895b9c26a1caa26689439cf4a076a2488c049cbba026a20c8cbe9b7fa0d2a1648d4f9b3da076a1148dda9a0aa02fa1d68c469a929fe7a0898c9599109f86a00b8a3799949e2fa0b189f3983d9eed9f6589c2980a9e929f5686ba98d29d329f348b5798859df59ee78ae797c19c7a9e1a8ce797c19c7a9e1a8c00000a87858d438000000a87858d438042296d2c182d35299a2dcd31d832fe2ea52d70318432c130c329802fcf2d353312a602aa04a926346fac60af3eb0703359acd1af9fb01c332bac0db097b0c0314aac07b0c0b09f301eac90af6bb0d42e0eab96aeb2af152d49aafaadf7aeef2b65a93dadf6adf929c6a88fac40ad8428eca700aca7acd02678a7cdab60ace82568a746ab27acc1249ca586aac8abde2237a101a9caaa8b1f8224ada2a9a69e11bf293421689f349fa72ac824b81210a36d2a9725c81dc3a4fa298e254c1f8ea5ae2991254a1f64a63429bb24871dc9a639281e224d12baa60e26f31bc49e29a6bc1ccda117a506a3d4a15aa609a8959552a2afa611a8bb1626a2f3a570a7ad150ea2ffa575a72c1479a1b8a566a78c1198a023a576a6c50d28a06ba47fa59d06709f19a42ca52306d29ea1a3cba4a485629e2aa394a44d85379edea26fa406850c9e97a23ba4278bf69d1ea2fda3908a809db6a188a30f8a1e9d61a128a3b589b99c2ba1cea26d895b9cfda093a2518c009cbba054a2188c6a9b92a01aa2d18b0a9b6da0e5a13e8d6c9a24a0b6a1e98cfb99c39f5fa1938aae99349fbca0198a9999e49e5ba0d5896e99ad9e45a0a68903994b9e0da07686e098039ec09f41899c98b79d8a9f0e890499b19d589f16890499b19d589f168900005d85018bf28000005d85018bf280ef28e12cc22dc328082d54311232392e282de030b43198300027992a692bb23174a07ba5e4a3ca3299a85bacb6ac073335aad0ae81af3e33e8aaf5aef5afa231d7ab7faf3eb07d305dab0eaf12b0eb2e9eaa57ae96af212df2a9cfadcdaeed2b72a95bad4baeff29c9a8cbacabadaa2817a842acf0ac082736a799ab8eacd2250fa70eab40acb32400a6aaaae1abdb2266a4d7a936ab4520e61810a737a9031a06292c2022a1d39e752b33265c1c44a39a2bc326c61f74a5132b2127922143a6a12ac2269721a1a7232ae525af1f09a824298f24e81d3ca8df27ba20349c30a8f6213a9d22a488a6fba29da5fda6c59eeaa17aa6faa7ad1075a12da6c1a761125ca10ea6a3a72c1244a1eca5a7a7b608eea055a59ea6168882a0d0a42ba6618727a07da4b8a5cc86999f11a44ba5908ca79e73a3c2a4228c029e18a397a4c88bd29de7a29ca4688bc39dbaa270a40f8b6c9d76a254a4978d449d27a217a4448ddc9cb4a1a6a3e18c859c64a130a38f8c269c01a1ada23d8c959bc6a04ea2fd8b2b9b71a0e8a1718ba79a25a08ca1f18a4b9ad29f32a18d8ad999499fdda053876d99e39e78a0ec861b995f9e14a06786c298159ece9f0982bf98e59d669ffd8558989c9d649fec81c798859dd89ed308c798859dd89ed30800009f86f48a2b8100009f86f48a2b8135288d2c7d2d96280e2ca6306b31a82d5a2c5630223119308f29dd2ec52dc0317e1c8b1d4e23fd3226a9a4ac68ad32339faa44af23b0f732c2aa81af58b05e3157ab5eaf49b02830c4aa0baf2db0832e53aa8bae94afe42cd1a9fcadefaebc2b3aa95ead3caefc2996a8c2ac9bada328dea72bacf0acc2263ca7a0ab8eac752519a730ab45ac9e2476a673aac3abdd229aa52baa93ab34217fa1ffa894aa4c1d30268e9ce3a4829acf2b7e26e91df7a35b2c94286c2306a6372c9b28982469a7fe2b7028af2435a8502b04283724b5a83a2a94269022e1a815294a24441c15a9eb240f1e5b9fe0a80ca18ea48ea6a3a3a4a206a738a8c28acca2c6a598a7070991a1fba586a7018938a1dda588a7c788e7a065a5f5a6588872a0d8a435a6b48d6ba0aca402a65e8d30a06ca4a0a53090cf9f27a441a5c68ff39ec0a3f6a40591849e5ea3a9a4a990159ec4a260a43c90cf9d69a22da4d88fa39d1ea2f8a3548f389db8a180a3d88cdb9c5ea11aa37f8c7f9c1fa1d6a23e8c039ce5a08da2048c3b9baca064a25d8d869a53a000a2f78c2e9a11a091a1a08cdf99909f10a14d8cb3993e9fb8a01e8c5b99dd9e8ca0ce8b3d99b49e67a0a08b44998e9e57a0be8ce198499e2aa0ef8a2f99f49d589f118c2f99f49d589f118c0000b988dd8ac7820000b988dd8ac78211288a2c882da628ac2b9f305431922d322c8130563104306729142e752ea431261c0d242021b1324ea82caca0ad7b32eba919affbaf7b3226aa57af3fb0073169aa38af37b0273054aae5ae21b03e2ef2a979aea1afac2c7da9dead07af522b05a964ad56ae9e297fa8ddacabad6828ada741ac17ada826d4a696ab7dac692551a613ab28ac8e24aca57daadaab722372a52faa5cab2222b8a4eba936abf71fc415b5a55ba8d5155a2aad242d129ca1102da5299325afa6f22cc6292b2620a8b62c8f29a7269da8352cf02864256ca99e2b3728dd24a9a9142a7126d421d8a9502829226d990baa83175aa4a9a623a7eca2c7a710a98d989ba17aa61da8f51265a1e0a566a7fc0846a1e6a5a1a7de080ca155a593a63d88a9a0eaa44da6a08739a0cba420a65887c89f6fa4cda5a286c79f3ba467a54286439f10a424a5688cc39eb5a3ffa4228c569e54a3c1a47a8edc9df1a296a4138e709d9ca254a4ea8f0a9d34a21da4598fd99ce2a1fca3e68e8c9c9aa1a3a3808e3e9c55a150a31f8e009c06a1fea2b68da49bc6a091a26d8d5f9b85a034a2458bc49a3da0c7a117883a9ac99f47a1338a8a99f19ec8a088895299999e9ea04e864f997d9e5aa0178bbf98309e9ba0af85ef98159e6ea0ba8eef98159e6ea0ba8e00008188f08a978100008188f08a97818c27722c562d7b284f2bad307431bd2df82b8f307d3111303228262e402d403134a0f4967fa4eb31bea8e6acfaadef318fa912af05b00a32b1a9bcaed9afc43024aaedae14b0a72fdca9a5aef1af022e8fa93dae76afb12c2fa9cbadedae3a2be4a877ad8baedf2952a8e0acb7ad5b2884a742ac07ad9d260da7d5aba0ac652542a645ab5fac4724b6a5a8aa0aacef2260a536aa9bab8b2140a5cba9deaa552092a437a97daa351c9424579e3ea4579e102dce294326cba6bb2d4d2b5e2814a9782d122ba128d5a9f62c732afc2773aa6e2c80299f26c7aa4d2b3628172405ab7e29f524e51c70ab1524709947a301aab7a1e5a525a7599f5ea141a6d5a75f094ea1cea568a7131266a1c8a554a7290ff5a06ea5e1a66d0878a016a5c4a60b0855a0f7a487a6cd87799f73a4bfa5d2861a9f39a458a5bf8c079f2fa44fa5978c1b9f00a438a5288fec9e71a3fda4958ea29e06a3baa4138e8b9eafa27ea4a98d2b9e7aa262a46d8d7f9d36a227a4278de09cd2a1aca3c88c6f9c71a127a3318e3b9c0aa1b7a2bb8d0d9cd6a074a2728d199c98a024a22c8dfd9b62a093a1f98abf9a0ca040a1788cd199529f0aa1008cd299619f21a1b489e0994c9ff7a0bf8b7899e29e6ca02b8b8c99179fefa009828c99179fefa0098200008588c18a988100008588c18a98810f276b2c5c2d4f28c02a87305a316f2d152b463019313230ce27d92c1d2d5a316118141dca1715326ea7d8ab1badfd31faa8b6aeeaaf043221a97faed1afaf3068a9b6ae0eb0942f64a9abaee6afec2d21a920ae45af6c2cc1a899adb8aefc2a72a839ad3cae872917a89fac85ad45284ea70bace2ac622682a672ab6bace224dca5ddaa0bac092455a537aa7cab29223aa5eaa94cab762122a5aea9c2aa64207ea434a952aaa51e709f60a706a99914c72ae626b22011a47b2e492c8c2957a9312e1c2c8f29a8aae52d002c5629f3aa552d432ba62886ab5f2cbc293627deabec2af8278d2330ac2527bc20da9c47ac62a2f7a658a8ada1e1a002a6a3a7171033a15da535a7ac8845a175a535a7dc910ea171a542a7c59109a156a539a78291c0a0f2a44aa6fa9032a0b2a429a69c90c89f70a4cda54190789f1aa439a5ad8ffb9ea9a3eca4f5907c9e6aa3d4a4a490019e1fa3a3a44f90aa9dd5a26ca401906f9d7ca230a4878f289d28a2f8a38c90d29cd0a18ca39c8e859c7da13fa33e8e289c35a1e4a28a8f999bf0a08da2828d4c9ba5a023a2208d9d9a44a0a4a1b88a229ad69f19a12d8a9b99319fb5a0bc864299db9e8da01e82b299de9e76a031861f99be9e6fa0e905cd99539e38a07205cd99539e38a0720500001781db08178100001781db081781dc25582b8f2c8a27e2292130ed302b2df12a3b30fe30ae2f8e289a2dc62dc930939a5a96879d823181a72cac7ead71316ba834ae61afa531a1a84baea3af8a30f8a87faecaaf9d2fd6a835aeaaafa12d97a8d2ad18af4e2c5aa85fad8faee42a07a8f2acebad66296ca777ac65ad0f28c3a61bacf4ac46265fa6a4ab98ac1825f0a5f7aa23aced2337a531aa75abf021dea4c6a9f5aac62095a460a98aaa771f56a417a928aa801e54a3bea8c9a9371c391bc7a466a7009cb82df12acf2737a8832f2a2d7c2b4dabd32ef82c1b2b21ac852e952c2d2a71ac532d722bf52890ac432ca6291d26ffacee286f248a1a65adc6a01ca6eaa7dca53da1c2a511a8c714f0a0bca57ea728125ea1d7a55ba7f3083ea172a5c2a69e08f2a026a5a8a64f885da0fea494a61b8e05a09fa427a6a690c99f74a408a65f907e9f51a4aea5b891049ff4a341a59f92a19e95a3fda42c92359e52a3d4a41f93239e16a3a4a4ab92be9dc1a26fa43992439d3ea21ca4b291799caca195a330900f9c40a105a3bf8fcf9bf0a0a6a2388fe49bc4a053a25e8d119cb3a023a2318ddb9b85a0e2a10e8b3a9b53a0a3a1b08a6e9ad69f1ea10e8add99719fd4a0d686a199159f90a0848b5a99c89e57a0ff8ae0994f9e35a00a8ce0994f9e35a00a8c00000c893e91980200000c893e919802f5240f2b802cfb275d292e301031f82c232ad32fb030102f3a25612c052b5730b9909d1f339730312fa76bacc6ad41316da8a9aeb3af853164a83eae9caf63308ba852ae83af1f2f73a80aae77af792d56a8d6ad06af512c2ca875ad8faeb22ad0a7faac12ae572932a77cac66ad032860a610ace6ac1c26dda54eab56ac0725a3a5aaaaf3abe32334a51eaa46ab2b22caa4bea90bab0c218aa451a993aaf31f9da41fa929aa531eb8a4e0a8baa9381d83a38ea860a956198424939b2ba338a2d72faf2d902b5bab27301b2e742cc8acb42f872d052c15ada22ede2cbe2a78ad532dbf2b2f29d9ad182bad28a42469ae4e9168a356a6bba911a192a5c5a6fe94bea092a51aa74789bba065a500a7e688c7a042a5c0a6a58897a006a56ca6518885a0eda45ba62e8e36a0a7a446a6bf908b9f5ea4eca501926a9f21a481a51f93649ff1a324a59c92d29ea1a3eda49593199e62a3bba41a93a19dfba28ca49192409daba259a42692fc9c47a21ba4ba91bb9cf0a1c0a34e91929c8ba157a3f490719c44a101a3a8903e9c03a1b7a26390dd9bbfa05ba2bb8e449b72a001a2db8c059b40a0c4a1998cd09a0ea05aa1368a9c9aae9f1fa1fd86589a5b9fe3a08689e699e19eaaa01289259ae19edba0e88a259ae19edba0e88a79861e8bea8bd98279861e8bea8bd982611d6220de1f091ab028612f6830c42bad29f42fb3302f2fac24252c482a2f307899cf95249d0a3158a54aaa11ac313104a777ad60ae533173a7e3ad0aaf3e30eca7ffad22afc02e2ea8e1ad36af552dfaa79aade7ae0b2c9ba741ad5bae292a3ba7daacdaade428aaa652ac41ad9a2719a6edabcaacf7259ea517ab49acf52411a55caab5aba723b0a4e0a929ab4e228aa4a4a9ccaaf42067a454a967aaf81f3ba4f4a8efa9e11e35a49ba89aa9e21d79a34ea830a9681d24a296a7cfa8ce128b2aa3274124aaa6dd304d2f882d75ad3e307e2efa2c03ae9b2fea2d1f2c3dae7a2ee62cf12ad4aea42c792a9127e1af861c04a265a5ccac93a192a5cea61e98fba04ca549a76d0fc7a029a5e2a6d288d2a0fda496a6fe8ec0a0d5a465a6ae8ea9a0bba41ea64b917aa087a4faa5ed9010a079a4e0a58f90509f58a4b4a5e691d49ef5a340a546917b9e8ca3f6a4e3901b9e57a3d2a48b90e99deaa27ca42390999d7ba232a49a8f699d34a2f5a3208f109de8a19ea3b78ecf9c88a13aa3398e649c2ba1eda2d18de89be7a09ca2cf8b669baca03da25d8b9e9a4ba0d8a10f88599a03a069a18387f299589fe3a0e286bb99139f94a03082b199da9e77a03c869d99b79e51a0fb81d599369e23a05a85d599369e23a05a85f4019089fe8f9282f4019089fe8f9282261d2220831f53195028f42e4c30a72ba929e12ff230212f7025e72b922c2530c99fada48aa5d0302fa6e1ac64aeed30f1a76eaeaeaf15314ba712ae69af153096a7ddad3faf5b2ec1a7c2ad3aaf1b2d3da754ad8eaeb02bcba6d9ac05ae0d2a94a684ac7aada1281ea623acfdac862763a554ab70acb2252ba5cbaa25ac9b2409a56aaacfabd823d5a4e7a904ab702276a472a988aa392128a40aa916aa2b20d5a38fa87ea90e1f67a336a820a9f21deaa21aa8eea8271dc9a2c4a79ba8e11c6da128a784a8c8150a2e452c052a38aa4b312730932e28af71301a2f6b2dc6afb52f2d2e8c2c45b0e72d462cc029d6b0311fb2a008a5cfad9ba115a504a6f39475a0d8a43ca60212aea0fda447a6e0087da0bfa41aa6a40842a093a400a6668816a079a4e3a53a910ba08ca4f4a504919c9f92a416a6b192619f67a401a63492d99e0da45fa5e6928a9edfa312a57a92609eb8a30ca52592369e65a3cca4c291dc9df9a28fa442919b9d84a24aa4d090549d14a202a47190e39caba176a31a907b9c37a1eea28b8f249cc2a05da2e38e769b43a0d1a12c8e119be39f72a1b58d049b7a9f2ca1698d8e9a2d9feea0248d569adc9e93a0a48b099a909e45a0a88c94995a9e37a0df8a879a999e6fa0bc08879a999e6fa0bc0832824e89e289e68532824e89e289e685051be61dc41da918fb278d2e07306a2b28299b2fb130a12e1c26782c432d652fa39cbaa6e9a7783062a6edaccbad6f307ba6a2adc1aeb83036a676ad83aeac2fe7a691adafae042e36a789ade3aed62c8ea6faac31ae5b2b37a6adaca1ad942901a656ac49ad8428ada502acd3ac2b273ba533ab55acbc2510a5adaa07acaa24bea43eaa82abeb236fa4a3a9b6aa6b221ea434a937aa9521dda3cfa8d7a99c204da374a866a97c1fdda228a8f7a86d1e8fa2cda7bba89a1d33a25fa78ea8491c1fa2e3a642a8121c45a1f9a568a74d12982fa32dec2beaac9e317a30c32e90b09430452fae2de4b0202f632dd92be3b15d99e7a171a42aada4a114a5e2a64789b1a0cca442a67e0f8aa09ca409a6cc8866a07da4e8a5e48e25a03ea4c9a5848e26a041a494a546912fa05fa4b3a525932ea086a40ca660949c9f72a4e5a51494189f2ba47aa57294ef9e04a431a5d494b49ed7a310a57594599e5da3b9a40d94c49dbca264a43592469d31a20da4a691d89cc3a1aea33391749c5da11ea3d88f229cfda0c3a29d8da69bb7a071a24e8d329b7ba012a20a8d0d9b46a0afa1d08cef9a0fa063a1928cb69abd9f06a15b8c849a7f9fd0a0068a5f9a309f8ba0d7898f99b49e64a02e026499569e21a0d38e6499569e21a0d38e8b24df26c127aa208b24df26c127aa20fb1c0b20fc1e519d6427cc2d572fa4295228512e582fa62d7623bc2ac429642eaa9e45a426a5f72fd1a4f4abaeac71306da514ade0ad8d30a1a521ad5fae562f1fa62fad8baeb72d8ba643adaeae7d2c09a6daacf0add52ae0a577ac80ad6c2982a517acf8ac322842a565ab8fac9626dca4c8aa39ac5c25a0a441aaaaab4f2443a4aea9f4aa102308a435a969aa2022bca3efa8f4a9792162a3a0a89da9d22008a345a831a92a20a6a2a7a7b8a8111f63a234a76aa8451e2da2b3a614a8121dbaa140a69ca7711ce1a0f3a554a7911b3da2d8a5aea6348c0e2c242a2f28d7ab99317830402ee1b10d2e132cea296bb13ba138a656a720a8dda069a5fba63910c4a0dea41ba695172aa056a4a1a56014e89f4da487a54e0fb89f32a47aa5aa08999f3aa47da57988939f6ea4d4a5658e8f9f8ea40aa607915e9f8ba41da63894319f60a4d1a5a493a49e14a457a52694209e88a3e2a46094ce9d3aa3b1a40594af9dc4a277a45e93909d4fa22aa4cc92569deaa1daa356912f9d87a14fa3ef90de9c23a1caa297905c9cc7a037a244907c9b6fa0d1a1eb8f8b9a15a051a1068e099a679fe9a0868dc299cc9e83a0208d83996a9e4fa09a8b7a994f9e32a0cf8cb799169e33a035892799c49d03a00a822799c49d03a00a82000028939d941494000028939d9414946826f22c562e9c271028b62e3730c72c0328a72efb2f192eb422c32a8e29712f388f4aa2d0a19630f0a447ac32ad7f3051a616ae67afd930fda582addeae802f3da67aadb3aee92d20a620ada4ae7a2c65a586acb5adb12a03a50facf2ac0429a7a43aab6eac8b2756a476aafaab2c2621a400aa65ab152516a4c8a907ab6724eca395a993aad52376a322a942aaba2257a3b7a8bba9dd21d8a24ea837a9db207da204a8f4a855202ba261a794a8b61fd9a1dea642a8cd1eb7a198a6f5a70d1ea5a15ba6dfa7f11d64a1fba569a7e41bf1a1d6a5eda69a1694a00ba691a7d78aa09f66a505a78d9e8b9cc2a46da6f8a15aa22da58fa6be953c9f84a40ea62e147ea08ba474a51d163f9fbca326a5be16029fafa3d9a47a15019f8aa3f0a4f911099f00a43ba5b208699f55a49ea5df8eba9f96a4eaa59b93549f7fa4dca53e957e9e27a490a54d95a99e15a476a5a995b89edaa341a526953e9e4ca3e1a40494639d8fa282a42493da9ce3a105a46490829c71a15ba30490799c3aa1f5a2a48f4a9c09a188a25d8f0e9ccaa023a2008f8c9b6ea0c0a17a8eaa9a01a044a1998c269a4a9ff5a00b8acb99e79ea9a0f08690998b9e6aa0378277992e9e01a06a86c398909d959ff7857698079da99eed817698079da99eed810883530d9e0f40990883530d9e0f4099051e7421aa224398a8266d2dd22e082ad827d02e3e30402e4a210a2a23294b2fbc9c90a316a7573087a4b7abf0ac8130aba5d6ad1aafdd30c4a58baddeaec42fdea555ad6caed92da4a5e3ac19ae222ceca435ac42ad272a83a479ab8faca92821a487aad7abf12699a3cda9ffaa692532a35ba956aa8f24fca220a937aa5e2413a314a93aaa152417a3e7a803aaff22a0a2a6a892a9682245a22ca805a97821f8a170a79ba8b52099a1d9a633a87c203ea137a696a72520c7a083a5b9a610207aa0fca40da61a1f68a0d6a4fda5021eafa012a539a6ac19e6a078a5d6a66c8a79a0c5a58fa71795b49fb0a4ffa5900f0fa040a49ca5d2176d9f09a40fa5fd17379e87a22ca4fd186b9e8aa253a41d190a9e29a22fa4b817849e33a24fa491161e9feda2d0a4270ff79f18a493a54f951ba0bfa46ba64898c59f19a586a6fe971b9fa1a4efa58b97c89e33a481a574964b9efda354a53d95f99d66a3eea41294879da7a261a422924b9df9a1d5a372910d9d78a159a31590dd9c1da1efa28d8f7d9c89a006a2c38ebd9b00a04ca1f98d169b779f16a1a18ddb9a3d9fdea04a8c909a1a9fb3a0358c269ada9e8ea01a8cbc99aa9e5ba0c4898b997b9e32a0d88bc6983d9e22a06589d598e69da39f2889d598e69da39f28890000c9923190d0970000c9923190d0976825752cce2db2267827d02e5f30f42ba628572f9b30b22d8022832bee29f92ee49c9da64ba638303ea575accfad6b3041a62dae4fafd13054a532ad7aae1a2f18a5baacd7ad302dcfa434ac5bad3c2b77a467ab96ac1529eda391aaedabbf27aaa2cca9fdaa87252ea2cfa8e6a965230da253a865a99f22a4a2c6a8b7a9f02331a349a99daa052483a2c2a8e0a9f722c3a109a8f0a8bc2145a115a748a8082107a180a605a85520e7a03da6b4a7e91fd2a0ffa55da7551f86a06fa5fda6611fa29eb3a3d1a4ff1e8c9ecaa228a4a71f05a07da49ca5c81d17a125a6e6a7a30ba5a0c8a53ca70d90db9f98a4b5a5db134b9f1ca44aa5d616c19ef5a262a46c18c29da4a11ba39319659dbca01ca2c4198b9d5ba0bda1341a439e15a16aa2ff18359e25a204a4ed12b19e1aa45ea516966c9fe9a484a6a398ba9f28a5c2a67898119f8aa4fba5fa97f19e3ba49da50797019feaa337a5c295b99ee8a261a49a93d59d26a2d1a3a390d09c80a13fa3738e519c08a1aea2d78dfd9baea036a26e8d9b9b6ca0dda1228d289b1ca087a1d28c979ab59f1ea1858ce399129f9fa0fc897b99739e52a085892d99299e42a054891299f29d36a04e86d998af9dfb9f158969985e9ddb9ff181d898519d339fc405d898519d339fc4050000be90c78f58910000be90c78f58910024cc2a602cd0243026bc2c0a2e04294b25cc2cf62d832b5a22c329bb2b2a25cb99a0a3e5a2422a0fa508ad13ae202f58a408ac41ad5f2ea5a370ab7aac162d57a39eaa22acbc2bcca212aad6ab992988a2b6a91bab09284da23ca963aa0d26a1a195a892a94424b5a089a77ba81122a39f4ba602a7e42265a1fca772a82a25739f98a762a8c620139fc2a515a7ff1d35a025a64ba74f1d5da0bba5f8a6a81c68a0b7a5eda6cf1b51a06ca5aba64a1927a037a577a6761711a01aa541a64d17829fe9a4f7a5d715029f62a451a5b416859da4a3a8a46e17979c2da2e8a39f16309d7fa204a4c615ce9d48a2c9a3b315149e7ea221a44f16469ea0a249a42a17289e06a261a30319f09ccf9fcba0331a649ccc9c4d9e461b149c459d3a9f2e1c199dcba053a27c18099f72a4aca5cc9052a026a6c8a73c991ea07ea52ca79899f19f98a412a65d98899fc3a3e5a472961d9e6da23ea43794949dd7a1c0a38f91fd9c5ea156a32290929ceea07fa2d88d0c9c83a001a2a48bb49b39a0b7a1288b509b09a07da1d58a0a9bea9f53a1b38a029bab9f3ba1ca875d9a169fd8a06d82f199989e55a048828099299e03a028822b99ec9dbf9f18821199bc9d469f2686ba984d9d179ff0814698f29c959edf814698f29c959edf810000488bbe811e930000488bbe811e938f215828b5297c232d24af2a222c262873229829112b1729701e3e261228252b2e9c10a3a8a4652d8a9ceea41ca6852c099e70a606a81c2b2ea0f7a715a9012a0fa1a7a8c6a96c294ca111a901aa742851a1eaa8d7a905273aa186a86ba92925eca011a8eca89823c1a002a8b7a83e219f9ed1a4ada55c1bc4933c9876980585ea94b0966496ed905e9c16a08ca06e0e9e9ec9a2bfa3dc16159fbea3b1a411181e9f10a4e5a48e18799f28a404a57e186c9f2ca400a58c176d9f0da4ffa4fc14449f0ca4e5a47e13769e58a38aa4b112d69cd5a14fa33a11b499f99fe0a0600f859ae49f06a1b10d7e9deaa051a2160faa9e58a1b7a2b50f0d9e63a1cea25814de9d8ba1dfa21b16169d49a053a16017e79aa299c09a9d1a7195d6174419861dcb98858c6e94cd1c2fa0a0a54ea72099aaa062a71da9549cab9ef7a449a6a998ff9d13a3c8a460956d9d27a22fa4fb91539dc0a109a49490759d18a1dfa20e907a9cbca01ca2cc8d0e9c6ca0dfa1bc8b999b22a098a13b8bf69aca9f56a1d08a939a7f9f1da17b8a439a049fdda0228af999869e9ca0c589b699339e5ca093868099e29d14a050864799bb9dca9f25863599919d759f03822299829d299ffe81c498269dd39ee1017098e99c5b9ed1017098e99c5b9ed10100002b8cf88a7b1300002b8cf88a7b136b217d289b29d524b2220c29992ab226a7207527b92830286910521451154628348b90957a9530231e1a6420e121e0241911e08d9e151628729b12a494a43928529e4aa69da79b270ca095a79fa88a2621a0aca79ea8922513a082a77ba8c7244ba04ea789a80b2479a082a7bca894224da0eaa662a8ac20399ecda4e5a50a1d6f9b83a1a7a274197e9b33a100a2a615d89c13a225a3a413a59d72a2c4a3c313099ed0a21da4b5131f9ef8a233a49413659e30a34da462138c9e38a363a42813a79e43a37da4f412a99e06a369a48012729e19a377a45610e19d99a254a47c0f409db7a12da3110ced9c49a190a2fc0b0d9d6ea109a3f50b6d9dafa168a3db0b8f9d9ca181a3bf0b909defa1bba3f70baf9dd7a199a35b0ef89adc9e1ba1af171617a925bc2656211da474aa51ace0a1db9cffa417a69698439daea1cda39f90269df2a077a3788cd39c04a110a3a0836b9cc2a088a271838b9c8ca034a249832b9c4fa0b8a11583059c15a068a1eb82539b9b9f17a1b882f39a129fd3a08782679ab19ea8a06482df996e9e85a04d8299992d9e58a035026999e89d2da023024499a49dfb9f0a021d99719d989ff701e598339d439fb505e2980a9daf9ed801aa98e19c719ec9017598de9c6a9e57057598de9c6a9e5705000046841d81c50d000046841d81c50d1121672609287322961f1926ca273d24e01c16243d254e259616b71c2b1fc42529160e1a741c2f25c718e31d292001254e16e318831c5d252f93019e4e9e3825cd9ac0a2fda3f4243e9de6a41aa69e242e9edca53da73424869e25a69da76023449f22a6b2a74f228b9fffa555a7fc20249fc7a511a7941f319ec0a4eba52f1d7a9dcca3caa4e61a1b9deea258a404190a9d84a21aa4e6172d9d8ba209a4d015a29dcda21ea4c114bc9df1a23ba44413ba9df5a247a40513bf9ddaa23aa4ad128f9d9ca218a43812799d60a2dda3ce116c9d0ea2b5a35711479dd0a161a3f810ff9c79a1eda2b00ee49c2aa19ca2680ed19ceca06aa21a0eef9ce7a052a2ff0d209dfca05da2000e389d00a183a21c0bea9c00a173a2ad04d99d10a1a1a2cd040d9a1a9e70a0ef820000fe8a9a8d3381f6956f99309b7c88219c17a02ca1d68dc89b3ca088a1c08dc59b03a055a1c78b959bc49f1da1708b729bbe9f08a158887b9bae9f0ca14388759b989f07a1c782829b869f08a1b882699b619f08a1ab82339b209feba09382109bd09edea07782ba9a879ec1a05d82119a179ea9a03a828199819d28a00982f598299d1f9fe981b598f59c9d9ed601a198e99c489ed1818d98de9c579ecd016d98ed9c3d9e58856d98ed9c3d9e58850000e015ec167c030000e015ec167c039b1d65244b25af20d81c462470252323d91ba12167231924f7190d200d214f24fb181a1df71e4524e2163918851a2a243811b891e38c822331918d9c999c1023dd976da008a19422199a3ea2a4a30222329cdda3d5a45b21639d8fa4aba5d420d99dbea4d7a54b201c9ed1a4b6a54c1feb9da0a48fa50d1eb79d47a445a5a41c579df0a3e7a4d31af89c01a34ea4b718c29c5aa2aea3d016ca9c08a25ea37a14009df9a12da3c212409defa131a3b210789de6a154a39410b19de8a13ba36a10c59deba154a31f0dc39de9a165a3ef0ca49dd7a164a3b60c8c9dc0a152a37d0c499d88a12aa3f80ee09c09a19ca2590e649c9ca002a2130b329c60a0a9a1b80a359c68a0c3a1a80a399c90a0e5a18704629cc7a034a287044f9ce2a058a27f04d19c08a1a1a20d04b89bc79e6aa07a0206945799809b4901e396399c859d1082699a339e51a03888709bbb9ea3a0fe8c6d9b219fe9a0448b469b369ff3a0158b029b299fe5a01e88e49af59ec7a0e787889a9c9e86a081828c9a6d9e60a06882589a319e2ca0f4862e9aec9d00a0a786f199b29db29f658698994f9d439ffd814099099dee9ea885f098cf9c8e9ecc81a498b19c909ec281c898b79c749e3b856e98cf9c999ebd81a6974d9ce69d9c81a6974d9ce69d9c8100000000000000000000e015ec167c039b1d65244b25af20d81c462470252323d91ba12167231924f7190d200d214f24fb181a1df71e4524e2163918851a2a243811b891e38c822331918d9c999c1023dd976da008a19422199a3ea2a4a30222329cdda3d5a45b21639d8fa4aba5d420d99dbea4d7a54b201c9ed1a4b6a54c1feb9da0a48fa50d1eb79d47a445a5a41c579df0a3e7a4d31af89c01a34ea4b718c29c5aa2aea3d016ca9c08a25ea37a14009df9a12da3c212409defa131a3b210789de6a154a39410b19de8a13ba36a10c59deba154a31f0dc39de9a165a3ef0ca49dd7a164a3b60c8c9dc0a152a37d0c499d88a12aa3f80ee09c09a19ca2590e649c9ca002a2130b329c60a0a9a1b80a359c68a0c3a1a80a399c90a0e5a18704629cc7a034a287044f9ce2a058a27f04d19c08a1a1a20d04b89bc79e6aa07a0206945799809b4901e396399c859d1082699a339e51a03888709bbb9ea3a0fe8c6d9b219fe9a0448b469b369ff3a0158b029b299fe5a01e88e49af59ec7a0e787889a9c9e86a081828c9a6d9e60a06882589a319e2ca0f4862e9aec9d00a0a786f199b29db29f658698994f9d439ffd814099099dee9ea885f098cf9c8e9ecc81a498b19c909ec281c898b79c749e3b856e98cf9c999ebd81a6974d9ce69d9c81000000000000000000000000000000000000651e2d2119194729e52c1a2e2026122c0d300c313a29a129782fd82ef82a09a4a29993a62512839399967f9bb895d69ceaa091a1479788a6f5abf4ab8b2a39a9a6ae11af32303da901ae4faeb72d31a908ada4ad6d2be1a8c9ac52ad8829fca7aaab65acbb26e8a739ab33aced24d1a6e5aa67ac5825a1a514ac4eadb1257e998fa6aaa8421f6523f9998ea1601d28285c217ca020168827371d84a34d9f3a279420899894a07628aa23791b34a2c7288a24f81f2ca2d328ea244c21eaa25c284224631ec7a3cf270523021b40a4c5263922151894a41b259b1fcd97aaa47c209a9907a001a3b39ac19f17a2489e56a04ea28aa31a98a69f18a571a6a916669d82a278a4f811409dfba1d1a31105c49cb3a156a3278b819c38a1c4a2a28a379c0aa16ba2458d079cd3a04ba20d8d1d9ccfa03ea2f68ceb9ba3a0fda1b38eda9b7ea0c8a1698e769b3ba08fa1f68d309b16a053a14f8fd29acd9f19a1e48e629a6d9feba07b8ef7990b9fd5a0268e9d99d29eb6a0318f5c99a29e98a0e88e0d996c9e6da09c8ecc98319e41a04d8ee298199e09a0228ed398f29dde9fd68ca198b69da09fa68caf988b9d5d9f048b8e98579ddb9ec28a30981e9d889e7a8a2298159d4d9e228c2097c29c3e9e4188c798129d549ed08100000000000000000000651e2d2119190000651e2d2119194729e52c1a2e2026122c0d300c313a29a129782fd82ef82a09a4a29993a62512839399967f9bb895d69ceaa091a1479788a6f5abf4ab8b2a39a9a6ae11af32303da901ae4faeb72d31a908ada4ad6d2be1a8c9ac52ad8829fca7aaab65acbb26e8a739ab33aced24d1a6e5aa67ac5825a1a514ac4eadb1257e998fa6aaa8421f6523f9998ea1601d28285c217ca020168827371d84a34d9f3a279420899894a07628aa23791b34a2c7288a24f81f2ca2d328ea244c21eaa25c284224631ec7a3cf270523021b40a4c5263922151894a41b259b1fcd97aaa47c209a9907a001a3b39ac19f17a2489e56a04ea28aa31a98a69f18a571a6a916669d82a278a4f811409dfba1d1a31105c49cb3a156a3278b819c38a1c4a2a28a379c0aa16ba2458d079cd3a04ba20d8d1d9ccfa03ea2f68ceb9ba3a0fda1b38eda9b7ea0c8a1698e769b3ba08fa1f68d309b16a053a14f8fd29acd9f19a1e48e629a6d9feba07b8ef7990b9fd5a0268e9d99d29eb6a0318f5c99a29e98a0e88e0d996c9e6da09c8ecc98319e41a04d8ee298199e09a0228ed398f29dde9fd68ca198b69da09fa68caf988b9d5d9f048b8e98579ddb9ec28a30981e9d889e7a8a2298159d4d9e228c2097c29c3e9e4188c798129d549ed081c798129d549ed081000091160c1a241a000091160c1a241abf2c9e3094319728e52ec8321c34fa2b842e5032f032e42ae591be92c9984c95541e6618ac1c7691911e511ea621c42290ab19afa2af1031a1ad9db1b2b2ed32ebac89b051b1153056ace1afa4b0c92d82abceaed8af892bc5a907ada5ad642857a8b8aa39ab6b257ea7e1a9e7aaa8245fa733ace3ac262505a488aa21ac1e24892047a164a5e722bc26091447a40e1ae62758a015a74fa1622804990aa51ba3d3286020609fc2a20c293f22d4913fa2fc281b23e5115ca2aa2854230c1254a3e227a021d9114fa45426d1207a98a1a43425c71fbe9a20a527213111d79e5ba5229cbda112a447a1ffa065a443a5f414b3a157a6f2a7321c64a191a5e1a6cf197b9f8da4b4a5bc15f89e00a423a56f114d9e06a39fa48505d69d5ca226a47e8b8c9d2ba2f1a3438b4c9ddda171a3c08dd99c5ea1d8a2458d6f9c0ca179a2d98e259cc4a034a2658eeb9b90a0f7a10c8e9b9b6da0c5a1cc8d4f9b43a0a4a1958d009b28a074a1638dd89a09a041a1a58eb99acd9f0da1588e769a659fd4a0f38d389a129faaa0b18ddd99c29e77a0608d4399589e59a00d8dd398099e14a0cd8c9898cf9dc79f9f8cb1988c9d8f9f778cfb98679d4f9fd88a3399449d049fbe8a5a99049d699e208c2998409ca89d178f2998409ca89d178f1486559c4f9cf7191486559c4f9cf7194d2da630de3117292c30c7338c34272c0430df3209347c2f299dd89c3e9ec620d5988398e3980c1e81a089a103a2452368ae64b1e5b18531e8aeb3b28fb35533adad3ab1ecb1d230f7ac73b00fb18a2e36ac79af4eb0482c6caa99ad77ae8b2945a966acfcac7c2746a8beab45acee2581a794ab68acee2492a57baad8ab52246b9d8aa74ca9fd225b2457a2d1a7391c622818939ba4fb9f1929621cfba293a238296f1faea056a46329e622f39812a542298722899830a533294d230e92f6a52e287622e59146a65f27b221e391a5a660268621a511d0a67824ef1cbb9a85a6d915caa053a40aa3c9a1aba5dea67a0ca8a1d4a5e6a7071958a167a510a7cd181aa179a5d2a6e716c8a010a57ca65615809f31a464a58f11159e52a3b6a41c0cfc9dfca282a43b05ac9dd2a25fa4918b6b9d77a22aa4fb8d1b9d12a2d1a38c8db29c9aa144a32b8f629c41a1c5a2a68e019ceea05ba23e8ea39ba8a019a2e58d439b7ca0cfa19c8dff9a46a08ca1e18ec99a12a051a18d8e9c9aad9f06a12d8e649a609fd5a0df8dfb99029f93a0938da699b09e5ca0538d16994a9e21a0008dc098e59d9d9fb08c7598779d279f658c3c985d9d049f518c6d987f9df39e678d1098649d0a9f3d8d4398499db29eb08a4398499db29eb08a00002681130e260100002681130e2601542d18312732b328b52f673360347d2cb32f53332d34c52f0820cb22e020ce25ba1c0c1d6c1c6723589c349d439c6228f4ad67b0deb1d03149ae41b2b9b256337fad0cb1b7b1a4300cad8fb047b1fd2e52acd8af8cb08d2c3bab83ae89af3a2ac5a934ad0dae5828b1a85cac1aad902618a817acb0ac19252ca7a7ab76ac1e2465a4f2a918ab8a210e1b69a67ca8971ed6271b9c0ca51b9cb729ba1fcfa171a20a2a3123069edda4292a3e248c9275a5c4298524b91817a64d29da24ae1bcba6d6287a24541d34a72e286523901b33a7ec26c621751881a7c824a61b469b75a7e81f76a086a402a69ca10ca6dba78e9ce5a18aa6dda7231831a126a6c0a71317e5a08ca5ffa6d113c4a043a5caa6330e479f6ca408a6dc86559f5da48ea5048dbf9e10a417a5b08f689e6aa3b5a4ea906c9ed2a266a478900d9e62a222a44f919d9d19a2f8a3b68f289dc2a183a3348faf9c72a127a3d18e679c34a1d0a22490399c0ca18fa2f08f159ce2a033a2a590d99ba6a0f4a16c909b9b76a0bea13390369b3aa075a1b390d29a08a034a1958f3f9a8d9fe5a01b8fa999ea9e7ea0538d3e996d9e22a0008ddc98299eea9fcc8cb6980e9eb29f698bb098de9d609faa8c3d989a9dfc9e818c1e98c19c319ed58e1e98c19c319ed58ea6126489fc84f182a6126489fc84f182be219c9f42a0221c292e9c3119325e2b892ff9333c34e02db51f4d249c208323ee14681aea16bb20fd98ff1c849cf6261daa2fadc3ae203119ae57b2c0b216332fad06b1f1b1b830e9ac96b054b1942e31acbfaf7cb0832c58abb7aec5af6c2ae9a992ad53ae8528fda8c0ac81ad56261ea822acddacbf2495a7b7ab87aca4239ea615ab31acaa21f0a170a92fabad1d562441a41ba87098b8298c1fb8a14aa2b82afe231799d6a4b82a3725b31276a6632a2825f41839a7ec291925051cf4a76f291725921d61a8c7284524e21b93a80828dc2248128ba846263f1f999b87a8bb22479d87a30ea827a098a57aa729a2f2a134a67ba7d61076a2faa587a77e1495a1e9a579a70d0f18a1a9a54da7640894a027a575a6b587f09f65a487a5ef8c569f1da439a5b38ff99e82a3baa4f18e7c9e2fa38ea4a6902b9ed6a26aa46090f79d95a22ba41e90c49d02a2c1a3848f4f9d9ca158a37690f79c5aa102a335909c9c19a1b6a203904f9ceca07aa2aa8fd99bbaa03da2478f3a9b8aa003a2ea8eb79a58a0d6a10b90419a1da0a8a1aa8fe599b59f5aa1e08d9899299fb8a0758d8699f19e5ea04a8d5e998f9e22a00e8df698299ecd9f768bc098f79d729fbc8d7498b49d7e9f8b8de098b39d929f898ce098b39d929f898c7a05268940866f837a05268940866f83f423042524259d1ace2dd131ce32592aa42e4f32b033402ebe1a2b1abf1c41227890d292d091e21c7e9c3c9ede9f4d2663a944adf1ad52317cac14b18cb11333a0acbfb098b1bf3053ac30b0cdb07f2eb5ab5faf55b0812cc4aa9eaebaaf732aeca9beadc4aeb2280da927adfdadfc262fa86cac3dad42258aa7dfab8eac1d240ea754ab5bac1222f8a48caaf7abef1f7d0d9da7aaa92b17d4283c12bea410a1862bd025311963a5702b3c26fc1d17a7542baf26b81f34a8cc2a3626ab1f9ba85c2a4026a41f10a9af296825f01d4da9bb281e243c1c86a91827c120ff9882a95824b31235a18ca9949d58a431a697a61da242a65ba79397d1a11ea6c8a7ad0f60a105a694a7d9085da1f0a593a7a9887aa063a5d9a6318e8ba0dda411a69b905fa077a48fa53a90d09f03a442a542919f9e75a3bba4d390119e29a38ba48790e09dfca290a45290c29dc4a271a41990899d60a242a4f6903e9d03a2e1a3a190d09c8fa16da34890709c3ca1f1a2fa8f049ce4a08da2738f629bb0a022a2118f099b6ba0d9a1a98e999a25a08ca1408e499adb9f3aa1ec8dbc99499ff4a0458c7a99d89e86a0038c0699579e08a06f8ba898059ebd9f0c89b998ee9d759f068b6f98be9d959fdd88c998af9d2d9ff701c998af9d2d9ff701db01058c8b866384db01058c8b866384a52295248c24bd19db2cef3008329e29272e9032be33fc2dd72149258c237e24c215e31cc7193b205213421dfc16672757aa14ae72af6e31d9ac70b160b2f5327dace2b0b1b17d30fdab1bb0a9b0e22d65ab5baf5db0442c8caa93aee2af312a9ca9bcadc0ae8728bfa8e7acd7ada82607a856ac33adc22470a7eaabc9acb32311a765ab6aac202246a6b9aaf0ab451fc9a4cea97aabd81a5b234aa41ba8b89d622b30251d1930a5382cc527bb21c5a72b2c51286e23c2a80c2c1f2871233ca99d2bcc276423aea9f32a67277d22f2a9cb291426cf1f30aa9428a223161965aa46267e1cd69ddaaabf1ae3a266a52aa9e1a209a716a89b9b51a2f6a594a731094aa1daa553a71f922da1b2a55ea71094aca051a5a4a664935aa0cda404a686927da098a4c6a52b9268a057a488a56693b09f1da437a53c949e9ea9a3e5a4ca935a9e47a3ada447940d9eb9a24fa4cf93cf9d64a21da44493869dfca1cca3a291339d85a145a33490e39c33a1e4a2d88f829cfba0a9a26e8fc09bb9a053a2fb8e239b86a01da216906d9a41a0c2a1ad8f159af19f4aa12b8fb5995d9fdca0a68e83990a9f96a05b8e3599b69e62a00e8e1799979e3ba0d28c3199769e2ba0b78dd398359e13a0678c2899f89d7e9ffb8c2899f89d7e9ffb8c3305df896f83ea833305df896f83ea8398228b24b3243119932cf030fa318a298b2d4e326133902ec320fe22bf227c240818ec1c4e1b151f9319941f711c572542a82dac26ad843037acf6b0ccb1273203ac78b044b1483060abf7afb1b0cf2db8aa4daf62b00b2cfca956ae9cafab2933a997adaeae28289ca8eeaccfad2226efa770ac29ada02419a7ebabb6ac4f2362a632ab45ac4122e2a59daacaab33217ea560aabfab691f73a095a80baa9e0f1b297f22729e2fa3bb2c23295f250ba8d92c6329032628a9b32c6c291526e2a9712cf7289b255aaa052c9628c624f0aa182bda27c82342abc5297725f0207bab4b282f221513f9ab3122ee9d7ea318abdfa23ba77ea8b8a0e6a13ca6a3a7e29230a1aba533a70292efa0b2a53ba7e1910aa13ea51aa63591e1a0d9a41ca694926da0c1a40ca66092c69f65a4b2a5c2917a9f2ca45ca567912b9f08a417a58f92b29ea7a3daa42892429e49a399a40093ce9dd3a266a49092709d80a238a43c93299d24a206a4b891f39cd5a1baa35a92a19c8ea170a3fc915d9c4ea11fa3aa91129cfea0c8a24591b09bb6a075a23590329b70a013a2d98f919a13a091a1e68dd999399fcba03a8df698779e5ea0478bdc98509e5aa01b8b3b99639e39a0878cd598279e7ba03d8c4199179e51a0bc8e4199179e51a0bc8eba011a8b42884b81ba011a8b42884b81f82146248324fe18522c1e313732f329142df3313e33642de01d5a2263202121c087aa1a3690b71caf999719539d762485a86dace9ada12fc7abeeb0a6b1d53146ab5cb02bb11830e6aad7af96b09e2d7aaa3eaf4cb0032cada968aeabafa32931a9bdadaeae11288ca811ad00aee825e4a76eac52ad78240ba708acc8aca92263a65eab6aac9a21bea5d3aa2aacbc2083a55baa88abda1fd5a4dfa9efaa451cd1139ea55ca84e9c462c4228ab2355a7982dc92a072812aa782de32a1328e3aa0f2d362aba276eabda2ccf29de2604ac3f2c2b298e2539acb12a67273f2367ac5529ef24cb1ebeac2225021a38a0b2acc6a151a69ea75ca4b6a117a656a7239615a1bca532a71a8f15a1a8a525a7018fc7a04ca595a67b8e61a003a583a6f98d49a0d6a45da6c090989f5ea49ea5dc91fe9e38a45ca58791f79e28a442a5d692ff9ebea301a59c93c09e35a3d0a4ac91729ed3a2afa44f915f9ea1a289a40e91ff9d75a273a4de90469d19a21fa49091ac9caba166a31d91409c31a1e4a2b090389ce6a08aa22c912e9cb3a05da233905a9c8ca014a20590bd9b34a063a1708f709aa49f20a1b18e57994d9f32a1548ed599ba9f83a1608d049aa59f5da18a8f3499fe9ea9a0c48e179a339fb6a01f89179a339fb6a01f896005268ad98319846005268ad9831984e9214b247e24cb19172c14311d328929672ca531a832952e881dbe200020da226d121d19de15cd1d4096a918159ad22499a7c3ab42ad0430f8aaa9b082b181318baa28b014b1a22f7daac8af95b0942de9a91faf45b0fd2b32a937ae7fafab29c8a87ead8daee92768a8dbacc5ad0f26eda745ac0cad4e24a4a6cfaba4acdb22e1a511ab3cace72064a575aadaab611f23a520aa4aab2d1e37a5eba9fbaa171d5ba4eaa8d4a915178524179fdca4baa1c52d2b2b782893a93f2e1a2c2d29b4ab022ec52bfc2824aca62d5b2bc62873ac052da62a1828c2ac112c28293f2617ad372a3e2780236ead1928d022e01370ad34a1c3a657a84aa6d6a145a652a70d952ba15da505a708943ba181a530a740950ea17da543a72a95f3a055a533a7e494a0a0e3a42da65f942da0b1a408a60195be9f6ca4cca59c94739f07a434a52594f09ebca3f5a4c793859e80a3dea44b93119e28a3afa4bc92989dc1a266a43992589d7ea233a4dd91099d2da2f9a38592a99cc2a17aa31392639c72a130a3c0910f9c29a1d2a26591819be9a06ba21491199b97a014a20590739a2ea07aa1fc8d019aa49fe9a0798d7f99049f8da0fa8c1a99b49e71a0548b2b99a89e51a0238b7699849e67a0d185f1997d9e7da0b288f1997d9e7da0b2886a0f01880c02cd846a0f01880c02cd849523ce257a267d1a1f2c12315f329c29162c61316232e02c25206623ab2253223a10fb189815521d51996f11099d7824c2a6feaa09ad132f43aa8bb093b17d310eaa0eb00ab1c52fcfa955af3cb02a2d46a9a9ae00b0792ba6a8fbad12af5e293ba84dad35ae1828aba7bcac9ead1e26dba63dac18ad7a2479a6d9abb7ac492314a601ab24ac3d2170a55baa8aabda1ffda4e2a939ab9e1e8da47aa9b0aa6f1d48a427a933aa7e1b02a24ba881a9708d7929db233e9180a5fd2ea42cb82ac0abf82eb62cae2ab6ac982ea32c4f2a09ad0f2e272c812960adcd2cbe2a4e28b6adf92b4129192651ae0429e024491dceae54a06ba62ea8c7a83ba1a4a5f8a6b09299a102a6a9a72989dca1eea555a78a8f28a151a5b1a6a291d8a006a576a65c9353a0dba450a67494f39f7ea40ca6f894ae9f6aa4e6a59095719f3ca4a8a53795b39eeba327a56e956c9e92a3f3a41295389e72a3e0a48995159e24a3aea43295ce9dbca275a4cc94469d38a216a4bc93839c97a175a3e292249c29a1f5a28191e09bdea097a22491009cb8a051a2ee90e49bb3a02ca21490829b82a0dda1be8fe19a39a081a13f8f549ac69f00a19c8ecf99659fcba0498e8a990b9f8ea0048f4a99c89e56a0918f0b9a529e30a0f28c0b9a529e30a0f28cd60db68c98864888d60db68c9886488806236525e825731a542bf33039328e29122bf530c831602ce81aec21581dec21a012ca1a4219751ca395ee18619a17249ca6b3ab05ad772e06aa86b04cb1373193a907b0d0b0902f3ba911af47b0192df2a8aaaefcaf922b8ba8eaad34af7f290ba84fad60ae092861a7b7aca9adff2586a62cacfdac562402a66aab7cac6922a3a5c4aa18acfb203aa542aa6cab9c1fd5a4bba9feaa561ea8a45ea97caa8a1c7aa429a942aa441bd0a3eea828aa81191ea123a887a90394382c81288124e3a8f12fe22df32b76adbf2f832df42bf1ad062f142d182b13aed82d4f2cd929cbaef32c3e2bca2877af2f2b59284a25dfaf00a164a508a73daa76a1aca520a7a097a7a079a500a76492c8a06ba5f9a60f92b6a04ea5b4a60b9493a018a562a68f939fa0dca423a6939441a0a7a402a62795809f63a4afa587954d9f25a464a51995109feca310a57f95a89eb8a3e2a42c95149e62a3c2a47d95a69df4a27ea40e95399d99a249a4b394e39c39a20da463949b9ce1a1aca30f94719c8fa14aa39993589c41a1eea22d931e9cfea0a8a2f691f09bb9a051a2d6903f9b6ca0eba1968f169b4ba0baa14e8fbe9a10a057a1a88d7b9aaa9f10a11b8c469a4f9fcda0fd8ca299d29e8aa0868c0b9adf9eeca031900b9adf9eeca03190cc00fc809f013280cc00fc809f0132809f1ccc1f3821900efb2ae4303132a528502ac030b431d72bca1aa121801da12158097b16a910dc1ca096a78b149c7c24b5a4e0a97eabc02e05a922b0c9b0043127a9d7af9fb0352ff3a801af29b0ef2c9da86eaedfaf382b2ca8beadefae142965a70ead28ae5d27d5a68cac72adc72527a60aace0ac862495a554ab6cac442312a587aae0aba421b8a4f6a91fab632096a4aaa9eaaa431e6ca46ca97baa4a1d52a416a91caa661b40a4cda8cfa95f187fa372a85ba90c18ed9f7ca62da87e99472de72a682882aa8a30e42e012dbeaef52fde2d252c65af272f4f2dd02bedafef2da42c372a35b0372c1f296d26ffb0fea0d9a54ea7a0a940a1b7a5d2a652990ca13ca5e7a61d928ea001a5a9a618948ea0efa47da61d9594a0cba43fa6e59486a0aea427a6c2957aa0a8a419a66d95e09f79a4eca5f4945e9f58a4c2a59494e19e07a440a5e594b49e9ba3fda48594439e5fa3c4a43094ce9de3a276a49393959d6aa22ba4fd92589d1ea2f3a38792019dd1a187a32592be9c79a122a3b8915b9c1ba1cea28490e39bd4a069a23b903f9b8aa017a2808ea59a34a09ea1f78d4e9ac99f4ba14b8c229a389fd1a0f78be799049f9ba07989d799e19e81a05f8baa99c49e66a009892c9a4e9e16a090882c9a4e9e16a09088f7889089a5919701f7889089a5919701801b2f1fdb20800e1e2ac230ff31cb283a2ab730c931ac2c371e6721d02123228181a8187d85961c9d07a71e2993ea23cba5eeaae7ac8c2e23a957b070b1e1308ba881af8bb0bf2e6da898ae09b0a62c1aa802ae5cafef2a59a745ad69aefa289fa6afacc0ad77272ba640ac1aadab2575a586ab86ac092430a5f6aa38ac1c2204a595aafcab5a21bfa405aa28ab1d2092a474a99caad91e42a407a911aaa81d17a4aca8a5a9041c86a353a83ba92619eca20da8eda8a01757a200a8f3a8891853a1cca63ba87f959c2d7e2be628b3abe030492f7f2d31b04d30a62ec72c86b0802fb42de82b10b17d2c9e29f6262db1f6a2a2a54ca756a7c3a016a52da6369295a12ca57ba6228971a0cfa431a60d8f81a0bea4fba5fc9358a094a4d9a598932fa08fa4e5a5b2950ba08da4f2a57495b29f7aa402a61696709f5ca4d0a58096bf9e09a446a5bb956b9ed7a31aa56095689ebda301a52195279e61a3cba4bc94ce9dd3a27da44a94909d64a238a4de933c9dfaa1e6a34f92c89c92a15fa3d291549c24a1cea233921a9cc9a047a2c6917c9b55a0c2a13991349bf09f5ca12690d89a829f1aa187908d9a199fcba06c8f3e9ad19e7fa0f88dc7997a9e47a0b38e9e994a9e4ba06b8c5b9aab9e9ca0be855b9aab9e9ca0be85e688a389c78daa80e688a389c78daa80b31a0d1e33202e0ed4295e3086317628e829be30cf31c32ae71fc922c323221e8b0476112c8628156098059b649ed91d77a5a1ab92ac762d82a80bb0eab0be30fba701af58b0502e04a851aee2af7c2c70a7bcad1caf832af9a624ad2eae8b285fa692ac9dad0d27dfa533ac14ad6c253ea562ab7dac2324efa4d5aa1dac5722a6a44baa92ab1e2167a4b5a9e6aa45200da445a960aa331fafa3d8a8d8a9151e23a389a877a9181da6a223a803a92c1c69a2c9a7ada8ce1a0aa24da777a87e18b5a1dda646a8b0169ea11aa65ca7bc8b492971250c20ada90c30392e5f2ca6b0fd2fd02d2c2c08b261276224881e69af49a3dda58aa652a0e09f76a4d1a56d8837a1cda41ba62a094fa087a40aa6128f1ca06da4d9a5aa9110a050a4aea59b931aa04ea48ea5c9952fa075a4c0a5949610a078a4e7a51a97459f62a4bba59d96e89e21a475a5b996dd9ee8a333a5de96bc9eaea3fba461963e9e34a3aaa4cb95b29d9ea25ca4b794319d16a202a44a94c49cbda173a3fd92809c44a1f4a290911f9ceaa095a22291ab9b9da03ea21590339b73a002a2df8ff79a37a0a5a1768ff59a05a058a11c8fd39a839ffca0b78eb79a4b9fc2a0558d6a9a1a9f7da0318dc799aa9e5ba07f866c99369e21a0ba8f6c99369e21a0ba8f00003919ae1a221a00003919ae1a221aa024302b852c431ed82812303031252727291d30bb30062a611d0922c720572029814814548dc71827987a9aec9e5c20c6a45cab99aca72c0ba8b3af82b068304ba7baae19b0132e2ca72fae87af352cb9a68fadd5ae232a56a6d1acd4ad8c28b3a54eac39adc02642a5d8abacac6625e5a409ab3cac3c248ca464aacdabf82241a4c4a909ab9e21fba349a987aacb2089a3fea80baa32205ca3a0a895a9281f0ba34fa822a9811d8da2d7a7cfa88e1c4ba25ba780a8ac1bf6a1dfa633a8531aaba1a7a60ea82d1972a14fa6c3a78c148aa150a6cfa7070b99a1a1a5f4a6ae9eac9b60a43ba533a5f2a113a6f1a60da092a0f3a493a6819424a17aa5c5a6fd14c89f64a49ea5371214a050a498a5e308de9f53a48ba5398fa59f2fa47ea5d2918b9f48a4a2a5cc93ab9f8aa4e2a5c6949a9fa3a426a67995729f87a40aa60196309f48a4b2a52796af9ef4a323a52f96019e4aa3c0a47995989df6a290a4a995869da0a25ea445955f9d28a20da4da94279dd6a1aaa31294049d78a122a38d93ac9c14a19fa20293429cbca01ba28a926f9b5da0a8a152919f9afc9f29a142903d9a469fbaa0d88fe799ab9e5ea0448f9599549e29a0e68d7a99309e05a0e28e7999019e10a09f8c3d99bc9dad9f11893d99bc9dad9f118900000000fc87000000000000fc8700006f240c2cb62c7a229e284d303231a429d32840300731e62af3161520701af31d9d1083169a1530198a92c092ba99eb1ecfa410ace2ac8a2d28a821b00fb10631c6a733af6bb0a62e54a751aeb7af782c45a651ada7ae1c2a9da571ac79ad3128e3a4ceabc1acf72579a402ab48ac98242fa450aa8cab3e2307a4cea929ab5d22d8a395a9c9aaa221bca323a957aad3206aa39fa8a4a90520b6a235a82fa9da1e73a2dea7e9a8f31d1ba25da7a5a8221ddca1fda63ea85c1cb3a1aba600a8581b9ba179a6f3a73919c0a185a602a8840b2ba2b4a6e9a7aa9491a15da608a8e59504a029a5cba6f092329f6aa4dea5ea08f4a0a0a4b6a5b21585a07aa4a5a5b212689f02a409a51c12279fd5a3fea41512f79e9da3eba43d0f059fada3fda4c6084b9f1ba46ba5f98e9e9f79a4d4a5e393729f98a4e3a5bc951c9f6ca4bda5d996879e32a493a5a497989e1ca479a52397979ed0a338a57d96199e1ea3c6a4b8953e9d50a250a47f94d39cbda1cca322937f9c65a14ea3c091589c3ca1e7a28791189c03a180a24b91f29bc6a022a20a91559b69a0c4a1a890a89af99f3da1328f429a629ff8a0828df099e69ea5a0338d9e997b9e63a0ad8b6599159ece9fbb8c8b98549d3a9f5c8da398e99c889edc81a398e99c889edc810000a489e683608b0000a489e683608b9c22732a562b9d20d9286c3066317429aa280c300f31402a1716671f961a251e0487c911e58e211911976798719ce72049a4f5aa68ac772dfea70cb0ffb0053186a73eaf69b0d42ed0a6e7ad56af2c2c03a61dad71aec42930a537ac2badf82784a423ab4eac4f25cea30baa43ab1a2431a37da973aa0823d4a216a91caaf4212fa333a963aaa32127a3eaa80daa2221dfa2a9a8bca9c9207ba242a83aa97320e9a1a7a7bba8132077a1f5a657a8af1f1ea151a6b7a7e41ee0a0bfa50fa72e1eeca088a5d5a60c1c08a19ea510a78a14e7a0b4a502a7b19889a055a5a7a6c49953a04fa5b6a6449312a0c1a4f1a5bb12c09f32a46ba57914bf9e87a3c3a4d416ad9ef8a27fa4f717719e79a234a4eb171c9e1fa222a47115a89e96a275a40e12689f6aa309a5ff9134a060a4d6a5009952a0fba487a67f9a959f19a57aa6f999c89e85a4cba5ec98b69e1fa45da53d983a9ec7a318a51097d89d28a3bba4c295749d7ea245a49f94289deba1bba35c93e29c82a136a3c892909c22a1c1a27a912b9c8ca0eba1e690719b01a03ca15190f19a709ffaa00d90cc9a2d9fb9a0af8ea59ae59e9ba07d8e319ab49e6ea0508ee9998b9e4da0188dbb996c9e2fa01c8edb98199e26a0cc8cec98d59da39fa08eec98d59da39fa08e00006098cb98e70d00006098cb98e70d8a26b72d872fbf250a299c30fc313829f52872305b31ec297d15ef1f1419b21cf885c610018f81147795f60a449cad2000a525abd8ac652de8a719b014b1da30d8a6abae12b08b2eb8a541ad63ae9b2b09a56dac69adfe2893a490ab71acb626e4a396aaf4ab2e24eaa27da99eaa8a2150a2d8a8e5a948209ea1a9a7a4a8f62054a319a975aafa21fda2c6a8e1a97d22f0a139a81fa912224ba167a785a8522116a16ca61da8b520bfa0a5a509a77e2013a010a53fa6832036a029a404a57b20d09e1fa30ea4fb1e41a053a584a68e1969a1b8a62ba8be9988a14ea5e2a6d59514a05aa49ca575087c9f19a41ea59613389f30a382a40818889e7ca219a41917bc9d5da194a22819569d78a0b4a16419a09dd6a01ba265190f9e9ba1dca296178d9e18a3a1a43490339fa0a405a60099929f17a5aaa6269a839ffda472a6a199f59e69a4bda50a99d39e32a485a59598ce9ec5a311a5fb96719ebba240a46995959d0ea2b0a39892a09c6ea147a3ea91259c01a1c3a29090c69baaa056a24190ac9b75a0e9a1cf90509b35a08aa1ad8fc09acf9f1fa1328f299a179f9ba0678da899689e4fa0ee8c4199229e43a0c78cfc98e09d1aa0468bfc98a69dd09f8f8d8698409da59fe681cc98479d469fe381cc98479d469fe381000079877a849380000079877a8493800325672c852d7223ec26112e902ff225cf216f29c02a8e24951d58246d2688a1111ea9252b27a1a444a08ea817a96e1e5ca378ab74ac112b86a465ac8aad722d2ca5aface8ad972c39a4d0abb2acc6290ea371aa10ac5f2768a2daa924abee24f9a11fa949aad42202a262a869a9e11e76a0fda67ea8971d3a9fe3a549a6aa1e3c9e4fa4d5a4651cfa9db3a45da6c917779eeaa458a6f0131a9f54a5b6a64d107ca0d9a52ca7fd0913a03ea585a68c89959f20a535a65509599feca4dea59e12949e72a464a57c14cd9d49a355a43414eb9ca1a21ca4d1133a9df9a260a42b13b89d09a353a42a11ee9d8ba21ea4f912879e19a379a48614689efda26ba48d17979d87a197a2d819409c579e6d9fbf1aba9cbf9c2e9e181c929ddc9ef6a01d1c239e90a222a42b14d09f47a59aa6099921a011a6bea7129ce09f42a5c5a6369b4f9f4da490a53199d89e3ba398a4fd97a29d41a222a4be95159db5a1c7a33294af9c34a12ba3cb91819cb8a04da23191169c66a0cba11990e49b34a0aaa1698eaa9b0ca086a12c8e779beb9f5fa1098ea99b9d9f19a1cd8dbf9a049fb8a0348cfd997c9e40a0da8b9599199ee79f768b4799e09da29f468b2c99b39d299f958caa98429df79eba8a6e98fb9cc19e9c886e98fb9cc19e9c88000000003984000000000000398400000520ed267528b0203224082c082d26256924be2b272d7026fb1f1a27e7281a27809cc5a31ea45628a39fcaa638a8642b849f42a8bba82f2bc8a0e2a83caad029dda180a934abe52874a2f6a93dabd727eaa17fa9adaa052692a103a9f0a95e2431a16fa867a9b421cda014a805a9cc1fd8a0bca7bfa86c1cac9d97a45ca56514b896799c409dda911299ac9d389e9391929c11a168a12191a89eeea2b3a3c608919e24a334a4c6911f9f99a382a48b884f9faea3a5a45a88259f2aa363a4f987e29d7fa20fa4fd86499c08a169a253850d9b27a010a16484629cafa066a22085d89c61a167a31986949ea1a10ba36006ad9ecfa127a31d10339ea9a1e4a27c141b9ea4a1d3a25316489c9a9e16a041185d991d94bb938d1ca295ff19881a251fbe9c74a0b7a1241676a1c0a710a9a09e46a095a652a8359c9d9e65a4a8a58598ee9deba293a47d969c9d28a215a4a0941e9db1a1cda38b93d69c1ea1d1a2e1915d9cb7a035a28990039c5fa0e1a134907c9b1aa094a1758eeb9acf9f51a1148e7e9a689f18a1c48d479aed9edaa0748d069a879e93a0238dc6991d9e51a0918b7d99d29d0ba04a8b3899b29dd99f17890e99889d8d9f0086e998719d419fec887798239dec9eb2885b98eb9c7c9ed2815b98eb9c7c9ed2810000e38bc88914100000e38bc88914100122f228202ab521fd22132aba2b7a24da2129295a2a9c26221a792137221b28619b4fa3a0a43525fb14081c151e3e22e018771eac202e26219bbda3b1a430273b9f3ba76da86a269ba04ea86ca9762590a047a841a93d247da008a8f5a8e82233a0c8a7a1a8922162a087a7a0a8812086a05ca79ba84e1f0da053a679a7ec1cc69d5ba445a5fb18569c54a2a0a304117e9c24a255a3348ef29c29a268a34493779d76a2caa31988d89da0a2f3a30a88239eb8a212a4e3074e9ecba23ba4b387569ebea21ca46087039e5fa201a4bc068c9d35a2c7a34186f59c75a1eaa28085f49c63a1baa26e850e9d64a1b3a26f85729dc7a170a37a85999ddea184a353859c9dc6a1c1a3dd8bb59df8a1c5a34585489e2aa11aa3750b49975696e1901a1da89549203922ef1d2ea427aab5ab83a2619d48a281a4e595579d4aa1ada34892a19ceda0eea2f490bb9cefa0e6a23f8e7b9ccaa08ca20f8e8e9c97a03ea2268c1c9c4da0c0a1b08be89b0ea061a1148d529b8c9f09a1bf8af99a029fcba0458a739aa09e92a0ec89119a639e72a0b589ad992e9e4fa086897499f39d31a062863399b39df99f2e8612997d9d949ff385d9984a9d549fe981e398199dcb9ed881ac98eb9c939e65858298d19c609e49058298d19c609e490500001e84b602d10b00001e84b602d10bee207a27a828c320a620e027fc28d422ba1ecc254b278f24ab17111e35205a25ba853d98ac9711258b16011aa71b4d24fc162f19121c6424e791a69dc79d3d248f9aaea2dba3de23be9d54a569a62723da9e38a6aea74922ed9e5ca6e1a71d21399f37a6aea73920869f19a69ca7601e919f1fa682a7fb1cb39e60a591a6051cef9d86a499a52b197f9dd8a3d6a4e715199d30a367a441130c9dc2a22ca4110e359d99a220a4e6073e9d7da201a4a087439d58a2e0a35087379d3ea2b7a3f386209d19a2a5a38e060c9df2a166a32f06f39cc3a12ca3cf85c89c88a1e1a27d85ad9c4da1a1a24385b09c23a186a21985c89c16a16ea2f884159d11a176a2f484319d26a183a2e2842a9d34a1a9a2dc84329d3aa1bea2398b629e3ba1bea2c68d9e954c99f49bc2895b887b8fcc92918697990d9d619ed18d229c1da061a18d906a9b1ea066a164907f9b08a052a14d908d9bd59f2ca1c18e919bc19f1ea1158da09bb49f12a1fd8ca99b989f1aa1db8ca59b8a9f0ca1d18a839b719f09a1a78a299b209ff4a0828cf89adb9ee4a0568cbc9ab29edea00d8a279a489ecca0058c5b99ac9d54a0428bbf982f9d3c9fca888598ff9cb39e8b858298009d689e7a8a6498099d8e9ed7813e98f59c479e468a3e98f59c479e468a000068165e173481000068165e173481ed1e11253826471e471e0a259c26fd20ff1c0223c12417227919142074210b235316b21ade1c57236b12248c3a0ddb22d7050f977b98ec210994309df89d4f213198baa0b2a1ba20499a7ea2efa32220429c0aa4f6a4821f4e9d90a4cca53a1eb59dcaa4dca5711d009ee3a4bda5be1cea9db5a495a5641ba99d89a46ba5361a619d30a424a5d917309da0a3ada40815e29cf8a23ca43511de9c6ea2e0a3e10ddc9c2ca27ba386071f9df1a136a33e075c9dc2a128a30487869dc5a117a3c786869da8a101a385866e9d9ca106a33f86189d57a1dca2628cc49c05a167a266857e9ccba011a21285239c75a0c3a1b784ce9b4ea088a18e84219c6da0bea1cd8a4d9c9da0e9a1de8a6e9ce1a038a2f08a969c0ea16ea2e28a949c24a193a2ce8a969cbea03fa27d8c6f98799c159e72889894809a3b9ca084ba986b9ddd9e538abc9abb9e96a0218d789be59eafa07d8e8f9b2b9fdea0938e569b419fe9a0698e239b399fdda03a8e0f9bf09eb9a0998cd49a9e9e71a0318ac19a509e4da0e889859a139e19a0f58b5f9add9dd39fad8b039aaf9db39f52899899519d499ffa883099049dd19eb188f398cb9c799e7c8893989f9c699e31859f98ad9c519e0d8a8198bb9c769e538860974f9ce29db68960974f9ce29db6890000000000000000000068165e173481ed1e11253826471e471e0a259c26fd20ff1c0223c12417227919142074210b235316b21ade1c57236b12248c3a0ddb22d7050f977b98ec210994309df89d4f213198baa0b2a1ba20499a7ea2efa32220429c0aa4f6a4821f4e9d90a4cca53a1eb59dcaa4dca5711d009ee3a4bda5be1cea9db5a495a5641ba99d89a46ba5361a619d30a424a5d917309da0a3ada40815e29cf8a23ca43511de9c6ea2e0a3e10ddc9c2ca27ba386071f9df1a136a33e075c9dc2a128a30487869dc5a117a3c786869da8a101a385866e9d9ca106a33f86189d57a1dca2628cc49c05a167a266857e9ccba011a21285239c75a0c3a1b784ce9b4ea088a18e84219c6da0bea1cd8a4d9c9da0e9a1de8a6e9ce1a038a2f08a969c0ea16ea2e28a949c24a193a2ce8a969cbea03fa27d8c6f98799c159e72889894809a3b9ca084ba986b9ddd9e538abc9abb9e96a0218d789be59eafa07d8e8f9b2b9fdea0938e569b419fe9a0698e239b399fdda03a8e0f9bf09eb9a0998cd49a9e9e71a0318ac19a509e4da0e889859a139e19a0f58b5f9add9dd39fad8b039aaf9db39f52899899519d499ffa883099049dd19eb188f398cb9c799e7c8893989f9c699e31859f98ad9c519e0d8a8198bb9c769e538860974f9ce29db689000000000000000000000000000000000000e51e09214315c429142d0f2e3121ca2c2631a9322724202abb3008301326dc9d93952ba2e00b000000000000000000002e82a28e0e819f9eeba19ca340989da8bfac5aad302c96ab71b0a4b0a22eb2aabaaeb4af0b2bf3a819ade5ad5828a4a864ac27ad412561a7bfaab6ab80210ea5ffa8e8a94f20cfa04daa11ac941cd92023a413a74e1208269718249f9798a128b221cca0b2a141271b1e33a08ba2d8265c1e659b11a4da277f210a1295a43f264d219a1111a42f25821f0d182aa38224291ead9747a441244b1e3b916ca5af256921d61cada603252d21861ac5a7f3216a1c0297c8a65118728f269c4ea4d59caf9e9d9fb39ce39ffda409a623146d9e9da25da4c710159c74a130a3ef8ae19b86a142a3c68d4a9c29a1a5a28d8f2f9cf4a06aa2a990d69bd5a039a27d91f19bc0a027a26591bc9b9fa0e2a12d91839b6aa095a1d991109b25a056a16b91d69af79f18a12491919a9c9fdca09a91129a299fb2a04591b699de9e9ba0ff904c99a49e84a0c69015995f9e69a03091cd982f9e49a0fa908198fc9d24a033908598e79d01a018908698c59dca9fdb8e8598899d729f948e95986f9d299f638e7b98479dbe9e418d4c98119d649e0a8d3798049d389ee58d0a97a89c0f9ea18caf98c69cee9d0b8a00000000000000000000e51e092143150000e51e09214315c429142d0f2e3121ca2c2631a9322724202abb3008301326dc9d93952ba2e00b000000000000000000002e82a28e0e819f9eeba19ca340989da8bfac5aad302c96ab71b0a4b0a22eb2aabaaeb4af0b2bf3a819ade5ad5828a4a864ac27ad412561a7bfaab6ab80210ea5ffa8e8a94f20cfa04daa11ac941cd92023a413a74e1208269718249f9798a128b221cca0b2a141271b1e33a08ba2d8265c1e659b11a4da277f210a1295a43f264d219a1111a42f25821f0d182aa38224291ead9747a441244b1e3b916ca5af256921d61cada603252d21861ac5a7f3216a1c0297c8a65118728f269c4ea4d59caf9e9d9fb39ce39ffda409a623146d9e9da25da4c710159c74a130a3ef8ae19b86a142a3c68d4a9c29a1a5a28d8f2f9cf4a06aa2a990d69bd5a039a27d91f19bc0a027a26591bc9b9fa0e2a12d91839b6aa095a1d991109b25a056a16b91d69af79f18a12491919a9c9fdca09a91129a299fb2a04591b699de9e9ba0ff904c99a49e84a0c69015995f9e69a03091cd982f9e49a0fa908198fc9d24a033908598e79d01a018908698c59dca9fdb8e8598899d729f948e95986f9d299f638e7b98479dbe9e418d4c98119d649e0a8d3798049d389ee58d0a97a89c0f9ea18caf98c69cee9d0b8aaf98c69cee9d0b8a00008619991b591600008619991b5916012dd630a4311f200430d23397342f25b92ef83228334f218c9a3a99149c519100000000000000000000000000000000489490993b0cc61d30acb4af8bb03b3043af83b312b446329eac75b011b1062e2eac99af5fb0952a3faa98ad7dae942682a852ab16ac4e2276a686a807a96c20d6a40daa58ab1c2063988ca802aa361e0f26cf13f2a0dc19202869149ea4b89f052887a1e4a789a3a328ae121ca4efa36928c31d83a1d1a39028e5201c12e8a331281624521f65a37827f121521287a3d124041207a0a3a12226fa21a31860a5cc25e3218e1c69a67023fc1d001127a75319349c9a9ff4a45ca0c5a2aaa3ed9397a12da643a7c61c08a36fa5a6a6e3192ea09ca49da5ea143c9fdfa3f8a457113c9e15a38fa47e85139e74a208a46190be9d1ea2e1a35791279db1a15da32492869c40a1aaa29d92389cdaa03ca21d92ec9baaa00fa2d0918b9b7ca0e3a18591389b52a0b8a14291d59a26a091a145908a9a0fa065a1e2908f9ae09f2da1ae907e9ab09f05a137915a9a4c9fd6a0f390f299079fa9a0b6909799be9e8fa07890e6985b9e51a03790ae98e89de29fc98e6a98a59d989f908e6798549d329f428e7098219dda9e298d85981b9d9c9e128e6d98d09c4f9ec88da5973c9cab9dce8fa5973c9cab9dce8f00008788c890160100008788c8901601432eb6319732ae2186305634fe3489254730be3354341a2b169a0f9ad59bb018000000000000000000000000000000009ea485a641a7b12473ae34b137b2cf3026b0a6b364b47932adad35b1dab18b2e9eac21b0c0b0442b33ab53ae5caf26288ca9b8ac6dadf72471a8dbab7fac9922ada601ab32ac3920aba24ca9f3aaee1e382226a442a7fd12a127c29e3fa7c29ee528a89976a501a45e29641c52a40da52a28051c90a039a4b52846222a99f2a358283321089c00a52a27121f779db2a5c3259b1b3d9de6a52227d9217f1831a850263e22ea1c51a88524fd1f901116a8db1f069851a0dfa6b8a074a5a8a65a9de7a1eca5d1a64f182da35da5a7a67c17a4a181a599a6791308a131a551a6ea10fb9f48a47ea57c06969e70a3a7a42d8c1b9e12a38ca49490d89df0a27ca40f93639d8ba228a4c793ff9c09a2c0a32c93ac9c98a13da3a692459c31a1bca21a92db9be0a053a29c927b9b9ca008a23f923b9b71a0bfa1f491f89a38a07aa1a991bb9a00a038a15e91829a8a9fefa00e913e9a459fb1a0d290f799ea9e7fa095909b999a9e48a0619022991e9e05a0088fad98c09d709f9c8e6c98659d0a9f468e4298519dd89e2c8e4e986b9dc19e4b8eb7972f9ddd9ef38e1a981a9d8d9e008f1a981a9d8d9e008f00007788860875090000778886087509472ed631b732bd2152300934d5346b25d82fbd334734ef27fc14761e8616401d00000000000000000000000000000000c5a52ea6eca8382408ae1eb140b21e31bbaf36b342b46c32ccad5eb101b2f02ea8ac46b0dab0862bccabfeae12b046280caa72ad39aeff2400a98cac4ead202340a835acc8ac9c2014a61aab2eac291e5399cda794a9ce112826a6a0dfa69b9f3d29831c03a449a4cc29f51ffaa187a5fd293c22f69ddba6dc298524511246a79729d224bd1b25a84c29c9244a1d4ea8cf28cc243a1d83a81f280424311d7ea88026f420e711aca8c024561d429baca81721999ea6a2ada840a053a5fea656a41ba2ada603a87a11c9a12ba67ba7491734a194a5eaa6db13baa04da5b2a62a084ba086a49da5448dd39f6da499a53e90aa9e06a40ea5db92369e55a39fa48b93549edaa262a41e940d9e59a211a48b936e9df4a1afa30093da9c9ba138a38492799c5ba1e1a227924f9c1aa19ca2de911e9cffa069a28d92e19bd4a00fa245926d9b95a0daa1bb92159b5aa094a16592c59a21a069a11292749acc9f1fa1bb91f099509fd1a0b1909499ad9e6aa0818f2d994d9e0ca0168fd998179edb9fda8ea198059eab9fcb8d9598de9d6e9fbe8e3e988a9d2c9f838e3798e59c359ef48d3798e59c359ef48d00001010b0127f8700001010b0127f87e52a7a2d5b2e1b197c2f9d336d3470244e302734b534e81df61c3320f11f3a1900000000000000000000000000000000ee1a301e741d042541adcbb039b18e30e1aed0b2a2b3e9318cad51b101b2312e4dac15b0a3b0282b8aab0baf1fb04f2808aac2adbcae67251ea9e1acb8ada92342a83eacf6ac9a2143a787ab62acd41ea5a43caafeab93171e1fb6a65fa9149d11292f1c2da4f2a3572a87226a9e50a6ad2a742426996ca7642ac724c09242a8302ab724dc18d1a8b729a124ed1beea837290625d31b53a989283524c31b83a93c27fa212612ada9c3259b1d9e9bb5a90d23cd98afa1b4a94e9b86a426a627a797a227a662a70f99b4a3f0a544a71a8917a201a646a7128f11a1a4a527a77891b7a027a557a6d492fd9f89a498a5a2934e9f1aa46ca53894029f55a3d3a476936a9e35a392a44994119ef7a26da41894f09d7fa21aa48c93869de3a18aa3d892309d87a12ba35493e29c4ba1e2a2f092959c0ea19ea2a1924a9cdda05fa25092c89ba8a022a2fa91329b7fa0f0a1b591889a4ba0cca17491159a12a083a12b91c799a29f43a133909899279fc9a0de8f7799d69e52a0878f3099609e01a0178fb898fa9d8c9fbf8daf98df9d559fbf8e4498949d739f7b8fc098ad9d949f848cc098ad9d949f848c0000a806060d38820000a806060d3882e32a6b2e922fd61bd02e10331e34ee24242f57333434e0290a19dd1b6e1c981b00000000000000000000f488ab867f10cb9e7aa1eea169251eabbcae88afb13042ae5ab266b383313dad15b1e3b1062eddabebaf8db0ef2af0aae7ae0db06028e6a9cfadd6aeaa2512a927ad11ae7b2441a881ac5bad0e2299a7f4abb6ac4d20a7a656ab75acef1cbba154a9e8aaac90bc265d9e54a64ea1c92a642438997ba6382bbd25441925a8392b2b263e1cc9a8fb2a2626e01d32a9902a22267f1f9aa9152abb257f1f0caa64294d25cb1d42aa69280124ea186daa8526a720db98a9aaa524b39226a1ceaa1b1130a367a590a904a3eca64da86f9df1a122a6b6a7450976a1f1a54ea7c8885ea1dfa561a7c49154a046a5d9a629938ca0caa40ba6219446a06ca49ba59c94a59f0da446a52c947a9e70a3bca47b93399e19a389a42c94289e02a382a4d192e79dc5a268a47292729d4ea228a404930d9dbfa1a1a36492949c4ea12ba3e7914a9c03a1c1a29291da9bcaa06da214923e9b92a00da2ce91f09a60a0c5a17f91889a21a088a13191739ad39f39a14390d499549f04a1fa8f7b99d89e81a04f8e2099569e00a0d68dc098029ed09f948cc998fd9d909f948d6198b69dbc9f5a8cc698b59d659fef88c698b59d659fef8800005c070c0d748200005c070c0d7482b729fd2d3d2f521b5a2df731fc32de248a2e43330d34fc291b1cc720941f181c00000000000000000000ef0c4703ab11cb9ded9f45a1382698aa86ae54af673003ae5db298b32f31acacd2b09cb1722d42abaaaf7fb05a2ab1aadbae13b0352895a9cdadd3aed825d5a8fcace8add62321a85eac34addf2176a70bacc6ac4b2007a76eab5facbb1c9da5a0aad8abf115c49d7ca8eba9439e4429661de8a234a5042cc726f41f7ca8282ca327b32158a9f82b07287a22fca9c52b0b286a2272aa532bb3276a22b6aaa72ada2664222fab7b298525991f65ab1128a222af12a1abb6256b1c239c08ac25201ba140a490abeba21ba753a8a8a18ca21da699a712962da1e5a545a76895e7a0aaa51ba74596c1a039a573a6b59572a0bca4e3a50e9576a08da4b8a5ab9546a04ca47fa51a966e9f0fa41ea56296889eada3dda4f8954e9e35a39fa48a95ee9db8a23ba4a495a99d4ba20aa4ae944f9de8a1a1a34b94039d5fa111a3d392af9c12a1a6a25f92549cd5a061a23591829b8ba019a2e590d49a65a0cca169913a9a2fa09aa12691eb99ca9f0fa1cb909199139f9ba067904f99c79e6aa037901d99969e40a00d900c996c9e26a0da8e2399569e07a0b08ea8980f9e01a04e8d2799df9d809fd88d2799df9d809fd88d00009d07530d8a8200009d07530d8a826629e82d192ff411212dfb3128338f20e32da132d733412abc18701d8c1c4b1c000000000000000000000000000000007a99d294bc9c282434aa19ae50af2f305fadf8b12cb3333165acb9b087b1562de1aaaaaf83b0022a13aa99aedbaf462720a987ad8caeda2485a8f6acdaad8b230aa879ac45ad1d2142a716acd8ac1f2080a655ab5aac841ed4a58aaac3ab011d8ba4f3a96aab7115b521c6a441a87fa10d2cd0274b214ea8b72c2a296625d4a99e2c10298125a4aa762c10290d2517ab412ca7280f259aabac2b7f28a32418acb92aa92780233cac33295b25f81f5eac71271e21ec12b6ac0d245e9c1fa287ac23a3eca64ea8b0a3f3a180a6bea7e49701a1b3a508a75d95e5a089a5eca62495d6a04aa570a6c795aca0e5a43fa62c964ba0aaa4f7a5d095be9f5ca4afa54e953d9f31a465a5bf95f89e04a40da57195b39ea0a3c3a4bb95379e1ba37da44795af9db4a250a4fc94559d68a218a434950e9d11a2efa35e94e39cc4a1a1a31b948d9c83a15fa357944e9c3aa10fa34a93f39be4a0bfa2d392619b9ea05ca26192849a3da0efa12a91a399429f1fa1bd8f4e999f9e6ba0fa8de9984d9e33a0a18d0199319e2ca0878c2499429e1ba07b8dda982d9e63a08f8a54992d9e52a0788854992d9e52a07888000013088a0db882000013088a0db88230291a2e3a2f79180d2d433287335024292d39328633f8294417cc1c341b58180000000000000000000000000000000015988791f39a4223d4a8f5accead982fbcacaeb1deb2cf30f8ab8db075b14d2d87aac9af8bb0282acfa9b0ae09b0ac27f4a8a9adb1aebc2490a803ad09aea0220ca87fac57ad632006a71dace6ace21d4ba655ab5dac5d1c8ca5d4aa33acfe1b57a543aa84abcc1921a352a996aa37981327de101ea406a5e62c5b29ee2503aa472d732a7a279eab1a2d422a122713acf62cdc291f275eaca42cb529b8268dac022c09295825daac772a27270222feacb528a824601e74ad1e25a113f19f8bad37a2bba626a8f4a5bba1e3a50aa7039977a1b4a528a75e95fca089a5eaa62495b0a040a56da6d19499a014a577a68c9549a0d3a449a62695939f4ea487a55d95159f38a46fa5ec95ff9e1ca44fa5a395099f93a3e7a4c295c89e15a3b1a443957c9ed9a29ba4fb944d9ea9a290a43b94be9d6aa26ea40894009defa1fca36093869c6da108a3ae92419c07a1b0a20493549cd9a061a2b192689caca048a27292779c76a0f8a12892aa9b0ea03ca1e490839a869fe7a07e90c1985e9f6da15b908299c39fc4a18b902c9aad9f75a1689091993b9ffba0fe8e4d9a4e9f00a1358b4d9a4e9f00a1358b0000aa07770d8e020000aa07770d8e020429e72d002f5318072d2f328333fa21a32cbc31043396287e14e31acd18c01800000000000000000000000000000000cc98e098e39ca423bfa877ad29ae322f1eac81b18db2703099ab98b075b1442df9a982af6db02c2a54a986aefaafc527a4a885adb1aef62458a8ecace6ad6922cca76cac45ad2d208aa6edabc9ac941dfca53bab58ac3c1c72a5bbaa0eac201a2ba554aa90ab2f18c0a4dda9d8aa4f0ef4a058a8a3a94b9c9929de221e9808a7b52d5b2b6c2896abf02dc92be128a3ac992d552ba428e9ac522dfc2a712844ada92c4e2a7b2799ad652bc3281825dcaddd296a26352117ae5f279620a6994eaebca16da616a805a6aea1baa533a75b9789a14fa5f0a69d9747a16da500a77997e4a066a50aa73e978ba021a507a7b6965fa0d8a42ba621972aa0c1a4f4a5d596cd9f7aa4aea54896bb9f04a424a550962b9fc4a303a5e695b49ea3a3e6a4f494489e3fa3b5a42995dd9dc9a271a4c894719d71a22fa47e94039d12a2dda33c94949cb2a16ea3de934a9c67a108a37693e49b26a1afa2dd934f9bd4a064a29a92dd9a87a0fba13192459a14a058a1eb90cb996f9fc9a07c906499d99e64a0168f0c998c9e52a0bb8dfc98859e3da09d8e0999579e4ba04f8e3199889e47a193903199889e47a1939000002b13f2155f0600002b13f2155f06e024822a092c28193c2ce8313433f922692cab31f032b725e116981d001bf91600000000000000000000000000000000bc98380b7e9dc0218aa8d1ac8aaed12eb4ab1db13cb28a30caaa5bb04fb1122d57a91eaf32b0f029dba833ae69af61272fa84fad50ae7224c1a7c0acafad482201a75fac43ad222080a6e8abc1ac911d28a61cab34ac191c8aa568aab8abd51903a51daa46abf317a4a4ada9c7aa62173aa45da953aa7e0d859e1ba7c9a81e9ead2b4a272322e3a8c02e822cfc29e1ac952e7e2cc42989ad3d2e6f2ce329e3adab2da22b2c2939ae942c1e2a7327bbae772bdc285f256eafc3280c22041aa1afe5a137a57aa650a6c0a1daa5d5a68398d4a1d1a54da75f944fa269a547a729955ca14ea5b8a61b96a5a0fca435a6b09631a0b7a4f7a53597d59f76a4dea58a97849f5fa4d9a5f5975c9f32a481a57697ae9ecaa31ba57b975a9e89a3e2a41297499e65a3e4a47097229e28a3aea40a97ec9dc5a271a48696539d2ea20da46195809c74a144a340941b9cfba0c3a2c493009cb7a080a28392e99b9fa040a251929c9b99a01fa23992239b68a0c6a13591ba9a22a06ea1e3904f9ac89ffea08e90d799699fc3a056907b99109f8ea0a4902199bb9e53a04d90609a439ed59faf8e609a439ed59faf8e000014126f155806000014126f155806fe23122a922b021b052cf8317533be24e42b673176322427800f7c1c9c148c1800000000000000000000000000000000f9966f91579cc62182a7a4acafad632e21ab19b12eb2553051aa4cb034b1fc2cf7a815af46b0f229a8a81bae6faf872701a83cad48aef52452a7afac98adae2294a62fac01ad01210ca69eab9dac331f95a5ddaa26acd51c49a54daa77ab421bc1a4d5a90aab3a197aa460a971aaff162ea414a900aa991681a3c0a891a96913bb9e0fa7a3a81a9d782cfb2867251baa7b2f632d592b0dae452f352d1b2bbcaea22eb92c382a43afa02def2b402900b0db2cc92a532839b0cb282523061d28b0e8a2d6a566a782a501a1c6a50ea73497c2a091a5f4a6af95baa06ea5e3a6af9697a040a595a66e9772a0fda445a6ed9770a0d2a416a6779727a0a4a4e5a5d797a79f57a48fa5fe97329f1fa449a51998df9e08a415a5be97909ec6a3f5a4fe97309e78a3c9a46e97a19dffa26da4d0962f9d87a233a44a96d69c25a2eda3dc95999ccca186a3f294819c89a127a3ac94689c3da1d6a26c94459cfaa073a28793f19ba5a01fa24992559b5ca0b7a12891f49a3da088a1f690799af99f3aa10b90319a9e9f12a17a8e249a3f9fcba0498f3899829e62a05b8e2f9abe9eb0a030902f9abe9eb0a030900000fe10b71470040000fe10b71470041122ef28342a92159d2baf313633a424092b03312b3223262710491c4115b3170000000000000000000047003700b6007d9607994c9c33238fa6b6ac41ad332e91aad6b093b1183002aa46b038b1d12c9ba8d0ae31b0cf2943a8d8ad3baf8f2745a707ad1eae1125ada690ac86ad15232fa623acf2ac782191a55eab79ac01200ea58daad5ab4a1ec6a4fda93cab381c99a4c7a9f0aaa71a81a474a9a6aa17174ea41da914aafb1310a4c1a89ca9f28c01a376a87da9a50c0d9f79a654a8eb9b462b3828302349aac32fa82d1c2c0daf462f782d9c2b1eb0b82e142d202b82b0832dbe2b3829f8b0df26db1c879c58af3ea223a63ca769a136a05ea5bea6ba95c7a02aa593a6bc96a5a008a57aa6779672a0e1a458a64c9779a0bfa439a60a9872a0c3a423a668985fa0b3a420a62098ab9f83a4e9a58897849f59a4b1a5d197079f12a453a52897ca9eb4a306a59e965b9e64a3caa41396cf9ddaa278a48295989d77a23ba41795429d0ba2eaa3b694f79cafa16da36394a69c5ea1fba25693479c01a19aa2d892989bb6a03aa2a091e29a5ca0c6a135917a9a03a06ea12790749aa09f1ea1ad8e849a3f9fd2a0498e1a9a009f9da0f78cf199e49e82a0dc8dd999cc9e7da0ac8d279a599e41a0f98d279a599e41a0f98d00007f967b9aad1100007f967b9aad1157215c286629301c7a2ab331f5328e22d52a00312f32bb2695152f1c171b3f16000000000000000000008103e30c7c021c13bf1a7219dc2299a6a6ac61adf32da6a9a3b07ab1d72f17a9ccafcbb0982c17a870aed6af9a29d7a78aadd1ae2a27c2a6e9acefadf32447a67cac5eadf522b5a5d9abb3acb22043a52cab56acae1fe9a4a8aa05ac641ecaa409aa47ab511c90a48ea9b2aa801a44a401a91daaa31814a4a3a8a6a95b136ea356a84da9960cfea21ea808a96d8c25a328a8fea8310caea14ca787a81b971426671e989e1fa8722e512c0a2adeae772fe52cd42aeeb09c2c6e296326a1b08ba03ba48aa55dab1ea14ba528a79b9cc7a079a5cba67c9226a111a55ba6a995afa0eaa43fa653956ea0c3a4f9a5569741a099a4d0a5089838a096a4dfa55c9821a095a404a6ac9804a07da4f2a56798929f3da49aa56c98ad9ef9a32ca5ec97869ed6a30da586975f9eaca3f5a41f97239e47a3b7a48a96e39da9a26aa44d95899d47a223a4e494229ddca1c0a30c94a89c6da12ba37c933c9c0ca1b2a2c993e39ba6a030a22b936e9b41a0ada19092049bc79f47a10092ab9a779f0fa1b4912e9a109fbea0d390089ac49e8aa01490de99769e4ba06b901e99229e49a0488e2e9a8f9ef4a0468d2e9a8f9ef4a0468d0000fc88168e3e800000fc88168e3e806821fe286b2ae319332a4f3172326a23802ae2304832b0264816971c571c491500000000000000000000b202788040055f8c578bfc8b8a229ca546ac2cadd42d9ea994b07db1cf2fb5a877af94b0672c50a705ae75aff32835a733ad76ae832656a69faca3adbb24bca535ac26ada02256a576ab82ac0321f5a4e5aa33ac9e1e9ba44eaaa3ab551d54a4c3a902ab1f1cf7a352a960aa3a1a87a3d8a8e5a97b1801a385a868a92f1890a222a8f4a88e154aa2bca7b1a83e1214a256a77da8e30be2a11ba773a8c70b09a2bca6e2a773964f9ecca403a657a01213c4a180a49aa6fb9ae2a2c0a486a51ba381a595a6339e439e70a46aa69a8e75a0f8a467a65c926fa0a4a41aa622926ba09ea413a6349424a085a4daa543961ea06ea4cba5249727a087a4d0a57f9834a095a4e8a5bc98e89f6ca4b7a556982f9f53a498a58398c99e22a47ea57f98c59ebca320a55e98ab9e6ca3e9a40e98159ef6a2a1a47297589d86a254a44996fa9cfba1eda334958f9c8ca156a35394649c2ba1d3a22393149cdda079a2de91789b96a029a28891f59a64a0f0a14b91f09a1da098a1f590ef9add9f49a1be90ef9a629fe7a0cc8f099b339faea06e8ebf9afe9e68a0768fe599809e3ea055894d99149ef99f54904d99149ef99f54900000368faf9708020000368faf9708023024912b172de91c702841303231b52465295f305a316a28c815831ce01b961800000000950100000000950b0109760a79954699469c791e78a570ac3bad952c31a969b02bb1382f3da833af79b01b2cc4a6b6ad39af0c29a2a60cad4faea026cda573ac61ad47244ea508acdeacdb22fda423ab55ac56219ca47aaadeab11203ea4e9a905abdd1dfaa354a98baaa81c81a304a92baa6a1b2fa397a89ca98e19f9a24aa822a9091884a2e2a7d4a8641533a264a78ca82b12d5a1f7a644a8c00ba4a1c0a60ea8820b54a159a6bba74c9149a106a689a7b68a5da1c3a593a74e8aa3a031a525a7f29732a015a593a6f395b6a00ca586a6c09449a0ada4f4a5338908a08ea4c5a59b8f34a080a4a4a5439207a04da48fa56395e89f4da479a55c96b39f5ea49ba52897f79f96a40ca6cf97c19fa5a419a62198739f84a4f3a54398f39e32a486a51f987c9eb0a3f4a4fe97f09d29a3a4a43397a99de7a27aa44e97719d83a24aa4d1961a9d01a2e6a3ba95da9caea179a35c95b79c54a102a30795629cfea082a24294f89bada006a236930b9b3ca087a19a92779aa69ff2a05691169a099f7da0f590d899889e33a01b9072992f9e07a0e18e5b99279ec49fe68f2d99de9dce9f948d3499c69d949fa28e3499c69d949fa28ef092000035940000f092000035940000721d2e22a8221214c92851305c312d228129c030c2316e25ce0af018f011e311000058018907b100cd000000000000001796bb99699bd51fc4a5b5ac80adaa2d3aa9d9b0dfb110306ba8aaafacb0792c5ca6adad25af0929eaa5c4ac01aeb525e4a415acf5ac3b236da44dab5dac76213aa468aac8ab3b2005a4dfa935ab101fb2a381a9c8aa101d61a310a939aae31bf5a292a88ea9d1197fa21ea800a9271847a2b0a7c1a8a4150ca249a78aa86a12c3a1eba646a8100caea1b1a61da8b78b8fa18ea603a8a49485a187a6eba7169833a146a690a7b89837a100a646a7439792a051a57ea600954aa0bea4c2a51a905ba09da47ba56b8918a052a463a5e60f769f0fa406a5910f399fbba3eaa4e688ec9eb4a3dda42d8f129feda31da52694659f4ba49ea55a96b59f86a4e1a515986a9f95a4d2a5ad98ba9e61a4aaa50199719e36a49da5fc98aa9e1ca48ca5a5987f9ed6a327a53c98069ee4a29ca4b6964f9d0aa219a45195bf9c9da187a36c948b9c5ba13ca32c945f9c34a1d8a23093259cffa08ea2e692ef9bbea017a28b92649b62a0aea10d92ae9aeb9f2da1e0905a9a619fe5a09690169ad39e97a06f8fbc99659e4ea00a8f5699de9da19fb28f57981f9dec9e8090da98de9c479e1a8cda98de9c479e1a8c00000000118d000000000000118d00004d23a12ba82ccf1c722941318532342237298530b2317a24730bd719ec117e130000000017810000368000008e800000969634997a9bce1f4ca552ac68ad3b2d07a9a3b0abb110302ea861af92b0622c29a6c3ad2daf2629b3a58bacc2ada025b9a47eab77ac4622e1a35daa8aab352017a385a977aa921dbea222a920aa651d50a349a970aa581c57a3f5a816aa6e1aeaa27ca882a9b11860a225a81da9ae19f6a19ea7a3a854198fa1e7a63ea8051942a167a6b8a7471533a11ea65ca7098c32a113a683a7319919a1dca53da7299cb0a0a6a5e2a69a9b78a03ca568a68e9632a0d3a401a67789de9f8fa4a8a59b14aa9f38a469a57f14619fcda3e9a4ac15eb9efba27ba4a5155f9e6aa220a49015339e61a223a42612c09eefa2a4a4e188a69f06a46ba5d29757a0b9a436a6bc9a5ba020a5a0a66e9b719ffca454a6189b889e63a49ea5e2999e9ee1a32ba51b99179e64a3dea45198c39de5a293a4b796749d58a227a494950d9ddda1a5a39e94bb9c77a133a34e945b9c28a1c4a23193f39b92a0f1a17192029bf79f2ba19c91889a469fd1a09290609af09e8da068905b9aab9e6fa048904d9a889e4aa0448f3f9a6c9e37a0398f009a569e1fa0208f1799f29d21a0ae8cd598b39d8b9f798fd598b39d8b9f798f0000b294d69644030000b294d696440361279e2eea2f12208c2937318532a1215e29c1300a32f421800904155510330d0000000000000000000000009e000000778ee3157494f01e11a52aac44adbf2ce7a875b072b1fd2faea708af64b0382c69a522ad62ae9728fba415ac29ad35254ba424ab30ac0c2217a3daa924abb01e0ea22da96aaa2f1cfea096a601a8ac1908a347a984aaec1450a22ca8fba8811766a142a74ea8a91c53a1caa600a8b31eeca03ca678a7da1fa7a08ba5dda62a1f34a057a580a6691c41a015a559a6be9389a0bfa5eca6439dcba0dea553a7f49c76a044a55ca6aa9720a070a49da5c7882c9fcaa317a59d11279f5ea3b8a4b613c39e68a212a42917349ea1a138a36817a69d10a179a26718719dd0a023a2bb18c69d46a1b7a29c17319e50a207a44510209f23a460a58798a69ff7a453a64f9b2c9ffda472a6229bff9eafa412a66d9abe9e45a48fa5fc99e79e11a456a58399ca9e90a3dca45e984b9e80a226a45496919defa1bca3b994a69c6ba13ea3b6933a9c08a1dba24192ca9bafa053a2d491ba9b66a0eca187915b9b2ea08aa14091f09ad59f27a144901f9a329fbaa0eb8fa099739e51a02c8f6399fc9d2fa0ba8eb998d09d22a0af8ecc988e9d989f728f4f980e9d549f298c8098f69c069f7c888098f69c069f7c880000168cc78722820000168cc78722829d25bf2cf32d5c1e06281e2f7930721ecc19c12237240196b61946213e248a9f631eda2544284ea29d105e188b1976a1b99c4ba56fa5b41771a1a8a91daae1288da642aeeaaf262dbaa517ad29aef22943a49dab9caca026e1a231aab5ab1b237fa278a9a5aa602006a2d5a8d2a93a1ca1a0bfa7c6a8ef182e9e09a5cfa5f911f799cc9f78a00e91009b3ca0d1a1c898c79a42a0f8a06699209ce6a11fa39498659fb0a45ba5d498f89e9da451a572975d9e64a429a5af940a9e15a4d4a447895c9d71a399a45d0f7e9daca3b7a4270f8e9d9ea3e0a4790e209edea300a5590ecd9e05a4f7a4990ee39e91a3a6a44411b49e7fa393a4b114039e7ca2e7a37418049daaa093a1f71ae49b699d8a9ebc1be79d019e6c9f2f1c1f9ffca0c5a24a19139f27a46da5be95eb9fd2a575a7959cbc9feca575a7389d3e9fd3a429a65a9cdf9ee9a307a52f9a549ecea253a4a9985d9d15a20ba42f97d89ca4a1c9a31a96b09c37a118a33c947e9ca4a01fa2ae92189c5aa0b5a18791cd9b2ba07ea14b91c39b09a07aa11f91a79bf29f3da10c91169c739fe6a02590fb9aed9e87a0b58fd099539e26a0048eae99069ec49fda8e5799cc9d719fa38d4b999d9d0d9f878edb98469ded9e4b8c9c98019da29e088d9c98019da29e088d2d89e58e8a8c98882d89e58e8a8c9888eb1f4124f2232a135a240b2c042dca185c25712ccc2d981d632196283a2af11e9b93069bd29544215f9edca58ca7dc25169f46a731a8f827a8a008a949aad028d8a112aab3abf1278da275aadeabba2599a2dda92cab5c24efa135a951aaee2138a17ea893a9f31eeea027a831a9421bbfa0d3a7e1a820173ba0b3a61fa8bb15fd9c0ca410a52508df9b9ea1f1a2ac915299e89e67a0c394699bae9e19a099962c9b2aa00ea1f298c59b72a090a12298999b93a0e1a10995f89a18a035a14392f699869f57a00e8d5c9b45a044a1e38ae29c54a188a24d8c9e9efba1bca3e98c7d9dbba116a4c98c149eeea19da3098d1f9e05a299a31e0d169e0da257a3da13119e89a173a2da16d59a639c999d2c1b3298cf13440cd51e209ad7959d97221e38a0c9a552a7dd9df7a0caa703a99fa04b9e32a5a5a6be9c8f9edfa335a52899cb9dada25aa412985d9d04a2cea32f96de9c6da139a318958b9c03a198a23594369ca6a029a2ea92ac9b4da0d2a1a391499b0ca079a19990c09a9e9f42a15590549a3a9f05a11b903a9ad69ecaa0c58fe399679e83a0398ed899139e4fa0e88d9999d19d11a0b88d3399b89de09f9b8cfd98839d959ffb8ac098649d4c9f628c4898189d229f858a5598d29c689e5a855598d29c689e5a850000cb8a1586930f0000cb8a1586930fc1222c29ab2a991c1b23b22a3c2c161d61220b2a8b2bf020241e7d25f7268c240f9f19a6f8a779247c9856a19da2311fee185c20a82255219d989ca03aa13e24c99f58a797a82e24c3a0b5a8aca92f23dca0a4a8a8a98321bba03ca839a90c2066a0baa7a7a8d91d49a03ba76ca85a1c94a05ca78fa8f51a26a0e2a63ea81419be9e6ea5b2a6c816a09d3ea454a53011459d84a382a4f78de39c94a2aca34796d09c0ca25ba3e896da9cbca119a38d96b69c9ca1eba26993849c67a1b3a28e91499c06a152a2a78f769c35a167a2828fa89c6fa1a8a26f8fc49c57a171a22f8f779dd1a115a32191c39dfaa172a30891e79d24a2caa3e190af9dc9a1bda389902b9dd6a19ba39390cc9ef0a1bba3a690209b8d9e45a0d211ed18f6248c26db2092a3b4a9f2ab0fa2009eaaa5c9a6a29d3d9e79a10ea4c1942a9d1ba14ca30494fe9c11a10fa3e093b59ccba0b0a28092869cc0a084a294918b9c93a01fa26091389c55a0c2a14290079c15a061a10390709b989f08a11b8e249b129fb3a0b18d909aa59e74a0588d139a5a9e4ba01d8db8992d9e37a0f78c7599e29d1aa0728b2999c09de69f328b04997e9d8a9ff48af798589d509fd488f2981d9dd19e798aa098d89ca79e338aaa98dd9c369ec201aa98dd9c369ec201000038829a02fe0c000038829a02fe0ca52009280f29c91be7205b287429911d0f2035278728cf20df193b218d22c9220f97b59feca06c22aa91be9cfa9de6209e1746139e1465208a90d89deb9d7620da998aa2f2a31b207b9d57a565a6e71fb39e48a6f4a75a1ebe9e45a603a8ea1cca9e3aa6aaa7421b769f34a689a7cf19d29f2ea692a74f19529fbba5f6a60918549ef0a41aa67f14aa9d2ca435a5bb0e149d73a398a42688e79ce8a231a4e490ca9c72a2fba38092d49c2da2ada33a92c49c02a28aa3f491ca9ce2a150a3bb91d39cc3a127a36c91d99cbea1fba2788fba9c9da1dda2138fa19c8ea1c4a2e48eaf9c70a1bca2bf8ecd9c5aa1aea2a28e0c9d57a1a0a2868e3a9d61a1b2a28790749d74a1dea27590459d9aa1e2a27390c09dd7a13aa39390959b649f39a1578ff78406912b93048760934e971699108d119b309f97a016910a9c37a069a148929e9b22a061a102926f9b0ca054a1e291679be09f2ca1e790889bbe9f16a1b690aa9bab9f00a1cd8fb49b939ff8a09e8f9c9b799ffea06e8f499b509ffba0458f059b1e9feba0138fd39ae49edea0da8e5b9aab9eb9a0a18ea499f49d7aa0fd8d0c99579df39f5f8d8398089d0f9f1f8d6098f39cbb9e1e8c8398089d7d9e0f8d3b98f89c879e5c8a3798f39c509e79883798f39c509e79880000c0160c183b0c0000c0160c183b0c0b207a25de265f1a9e1e9c252a27651c221d27246425631e67195320c5210c208b13fc1707196c209e850599f0980c20208ffe9b5c9cbb1faa944e9e5f9fce1ec198fba001a2951d659aa6a212a46f1c409c15a4e1a49b1b049d80a4b4a581197b9dbaa4c3a56118cc9db8a4c4a51d18d89daca49da54916b69d86a494a59014809d45a435a5420f419de7a3d4a47a08ed9c5ea379a4428ecb9cd1a22aa4e68def9c84a2e8a3b290069d1ba28fa37b90239ddaa149a34b90609db6a127a3c391649d8ca1f5a28091249d64a1c5a24091c79c1ea170a2e5908e9ce0a008a29690409caca0cda16590139c92a0aea13b90239caca0c5a12f90649ce0a01ea23b90939c0ca152a23f90ae9c20a186a23190b19c35a1b6a25391f59c6ca1cea2f8907c9a7b9fc4a03a8e6595ca9ac09cbf8a7e96229c6f9d688c139a339e14a0bd8f239bd89ec6a00b90b59b1f9fd9a0c790839b3f9fdca0be903f9b419fdba0a090059b2d9fc7a07890dd9ada9e97a0228fbf9a759e56a0708db29a2c9e2fa0328d769af29d00a0018d389ac49d9e9fdb8cda999d9d889fba8c6799479d299f728cea98f89cb69e2f8cb798bb9c619ef88b6c988c9c489ea98b7a98a49c199eb98c3998a09c339e9d8be196279ce39d8189e196279ce39d818900000000000000000000c0160c183b0c0b207a25de265f1a9e1e9c252a27651c221d27246425631e67195320c5210c208b13fc1707196c209e850599f0980c20208ffe9b5c9cbb1faa944e9e5f9fce1ec198fba001a2951d659aa6a212a46f1c409c15a4e1a49b1b049d80a4b4a581197b9dbaa4c3a56118cc9db8a4c4a51d18d89daca49da54916b69d86a494a59014809d45a435a5420f419de7a3d4a47a08ed9c5ea379a4428ecb9cd1a22aa4e68def9c84a2e8a3b290069d1ba28fa37b90239ddaa149a34b90609db6a127a3c391649d8ca1f5a28091249d64a1c5a24091c79c1ea170a2e5908e9ce0a008a29690409caca0cda16590139c92a0aea13b90239caca0c5a12f90649ce0a01ea23b90939c0ca152a23f90ae9c20a186a23190b19c35a1b6a25391f59c6ca1cea2f8907c9a7b9fc4a03a8e6595ca9ac09cbf8a7e96229c6f9d688c139a339e14a0bd8f239bd89ec6a00b90b59b1f9fd9a0c790839b3f9fdca0be903f9b419fdba0a090059b2d9fc7a07890dd9ada9e97a0228fbf9a759e56a0708db29a2c9e2fa0328d769af29d00a0018d389ac49d9e9fdb8cda999d9d889fba8c6799479d299f728cea98f89cb69e2f8cb798bb9c619ef88b6c988c9c489ea98b7a98a49c199eb98c3998a09c339e9d8be196279ce39d8189000000000000000000000000000000000028582b2a2c939d8e29462d252e51a18f2c1b31233279a4282a8b306d2f3fa4389d1d9a909d3f8a85900000000000007d90000000000000e18b158aa68bf682cc9f82a2aea4de1bdca958ae15af6d2a53acb2b05cb1da2a5ea9a4adf7ae992576a87eac33adbd2170a7c5aaf7abbb1cfea03ca677a71d11f217bba8a2ab4ca1152594a13ca8d2a20b27341f639db7a3d128812317a1eba7bc25ad18439fdea4b221809dd8a1bca4b31c819f0ca241a198a0b2a282a32f9af8a026a4a6a4f494efa0eaa2d1a33b98bba054a27ba2c69c751ac3182b0f67a420259f22ed207ea83b237b20e71d1ba87f1de5185c1582a561990e9e069d19a00ca269a88fa8b40d289f67a49da55d07d09c12a1dca2878fc79a17a1aaa2db90ea9bfca06aa2dd92089ccfa023a28a93d79bb3a01da25f93c99bb0a00ea21d94819b85a0b5a1d593579b53a088a17e93c99a0ea046a1c093889ac39f06a154935d9a539fc1a0ea92009a009f9da08792a399c09e7fa038922f99709e65a08e92fb98479e51a05092c398249e2ca01b928d980a9e10a05e918498f19de19f38919798be9da09f8390a6988c9d3c9f9c8f9b98519d029f21909e98279d959e118f6798f79c4e9ed08e3a98e29c169e958f3197a89c059e518ec498989c939d4e8e00000000000000000028582b2a2c939d0028582b2a2c939d8e29462d252e51a18f2c1b31233279a4282a8b306d2f3fa4389d1d9a909d3f8a85900000000000007d90000000000000e18b158aa68bf682cc9f82a2aea4de1bdca958ae15af6d2a53acb2b05cb1da2a5ea9a4adf7ae992576a87eac33adbd2170a7c5aaf7abbb1cfea03ca677a71d11f217bba8a2ab4ca1152594a13ca8d2a20b27341f639db7a3d128812317a1eba7bc25ad18439fdea4b221809dd8a1bca4b31c819f0ca241a198a0b2a282a32f9af8a026a4a6a4f494efa0eaa2d1a33b98bba054a27ba2c69c751ac3182b0f67a420259f22ed207ea83b237b20e71d1ba87f1de5185c1582a561990e9e069d19a00ca269a88fa8b40d289f67a49da55d07d09c12a1dca2878fc79a17a1aaa2db90ea9bfca06aa2dd92089ccfa023a28a93d79bb3a01da25f93c99bb0a00ea21d94819b85a0b5a1d593579b53a088a17e93c99a0ea046a1c093889ac39f06a154935d9a539fc1a0ea92009a009f9da08792a399c09e7fa038922f99709e65a08e92fb98479e51a05092c398249e2ca01b928d980a9e10a05e918498f19de19f38919798be9da09f8390a6988c9d3c9f9c8f9b98519d029f21909e98279d959e118f6798f79c4e9ed08e3a98e29c169e958f3197a89c059e518ec498989c939d4e8ec498989c939d4e8e412aad2d672edba0412aad2d672edba08e2d5f31013213a61530a3335e3410a9f82ec2328733e4a8759aa598869a9814000044049102b60900001c80ef02f0050000000000000000821da81c2b216e2364adaeb03cb18f2f76af9eb34ab4902e95ac38b005b11f288baad5adc1ae722298a8a3ab35ac311b29a51ea8bca8d298889e34a8d2a9b99ec723a0a356a79ca20628ad1f229e21a32828a0943ca4eba4de2777a231a8baa45326829f92a5eca39897bca653a854a1c9a031a573a6279cf99d27a02fa2ff0e2a9b78a1aaa28e19549b2ea016a17f1ea7269326192560a5a226ff243e24c0a758249921d01ebda7b21fa41a221125a6029f3ca101a2019d23a2dba607a8f01d68a10ba670a7901b6e9faca4e0a5e315e69fc5a3eca4770c6b9e16a38ba4cf909b9d58a209a4da92589dfba1cca36894099d8fa13fa3a394629c1fa194a2b8941f9cc2a01ea26294bd9b97a00ba29e946d9b6ea0d4a1f893049b44a0a8a19593c09a14a082a17c927e9a00a058a14a925d9ac19f17a1bc92279a849feea07492039a3b9fc8a03692a899fb9eada08d924999959e96a09791ca98469e56a044919998cb9dd69f66903498919d729fba902998479df69e0e90e297099d949ee88e0698e79c429eb68fb697979c199e4e8f7097609cb89d66907097609cb89d6690ab00601815193094ab006018151930943d2e8e31a03264a56f3001349d3470a96430ba33703404a65c984a98c4990a1900000000000000000000598e9f816e0d00000000000000007aa00aa2afa2e20bc9ae3ab11ab2342c8ab024b4bcb43a2ea3adf2b0c9b1792878aba8aeabaf0c248ea9caac78ad1b1f57a8afab5fac39124ba51daa59ab029c819524a724a9c2a08226cf9c1ba416a45e28019ab7a441a5c728d89c2aa50ea69327699cd2a583a512a32ba8bfa83a9c6ca0eaa4f7a5cc20019f7da4f8a5c020089c15a17da2d51d6d966d9c039e5a1e31265324cb2239a5fe269624c921dca8d124c320161b7da8da20bc91379e64a8fb9ec4a4eaa5fda35aa273a6a4a70315d9a137a6c4a758173da191a5c9a6781315a111a529a6d40d3ea068a4a0a5108d8c9eb4a3ffa40394ee9d06a39ca44594bf9de7a27da46e955a9d72a220a40395019df9a1ada33095aa9c9da125a3d294349c1fa19fa26594c79bcda036a28e945d9b86a0e1a14b94129b5ea0aea16a93d39a26a061a10a93659adb9f29a16093299a6d9fe6a04e92f4991b9fa8a0ab92b899d09e72a0b8915e99649e35a06e91ee98f49df29f86908698959d799f3e904798609d029f16903c98529de39e228f5798649db99e19908a970f9db69ec98eda97eb9c549ea58fda97eb9c549ea58f910576186819f291910576186819f2911a2e9531d0326da54830ae339c345aa9083096337c34d9a8dd14c51b0c1576170000000000000000000000000000000000000000000000007aa3e0a4eea5a52651aeeab009b21f30e4af7cb35fb4872e7fad01b1ddb14d28e0ab28af1db05a242daa8cad4eae522021a9a3ac57ad7e18d5a705aca6ac3e9855a377a9dbaa049dcc22a9a37fa70ca24c2836932da530a54c29931c34a316a79829e41feea10ea8bd294f21c29d64a89e2965240b12afa86029b0243d1df8a81029b324a01e2ca99328b624911e5fa9ca27eb23161d60a91126a8215a188fa9b0244f1d3c9b99a921213d9d12a2e5a94a9dbea477a69da717a273a6c8a78298f3a10ba655a7c21233a1a5a5e6a6d20eb9a04aa5bba6278866a0b6a4c7a5929015a07aa4d9a5b893e29ef3a310a5e594269e33a386a40d952d9ebaa249a44a95fd9d43a2eca371957e9dd8a169a30595e49c86a101a3b0947c9c44a1a8a279943d9c0fa16ba24094099cf2a03ea21b94a79bb5a004a252944b9b8aa0d4a11f94f69a4ca090a1ce93989a0fa055a15f933a9aa19f0ea1ed92f699159fc8a0d191c6999d9e64a0dc904b994b9e0ba0a090c898ec9dc49f67908698e69d8f9fbc8f8098c69d4a9f5690d197479dfe9e1a900a98e59c779ee38d0a98e59c779ee38d000032842d0a8482000032842d0a8482702d0831733233a7782f09335734c9a80c30b0337d347ba9841a481bb31b721500000000500a0000000000000000000000000000000000000fa588a629a81f248aae67b1adb2872e2baf2db313b4302ddcaca3b06db12b286eab1eaf1db09e23f9a9ccadadae492031a9e7acc2ad331b34a82cace2ac4a1145a619ab45ac629a649fb0a87eaa6fa0fd25f3a1aba78fa48c29c31fdaa11ea7252aa6211da075a83e2a2823469cf3a85b2a5524019943a9e62937245f1286a96f298a24a718d2a9fa288b24ab1b38aa7b282824a71b6eaa2827e921091268aa5a25871d7f9b6aaaf922bb98dea0cdaa8d90dba34fa51ba964a272a695a72c9f80a259a692a7d694fda1ffa55ea78e965fa1a9a50da72397b6a021a559a66496f89f92a4b2a57d96349f04a474a5a395999f71a3bba4da95389e1ba39fa48695e69de7a274a4ee95e59d5fa20fa46895769dc6a169a36b95089d76a123a31295af9c3ca1dda2cf945f9cf7a09ea28f94109cc7a05ba256947e9b99a016a27a93059b64a0d9a12393779a39a0a9a1cc922f9a01a070a17192c8998b9f3aa16e917999fb9eb8a006913b99889e19a0c090dc98169ea69f7a908a98c29d6d9fa38fa398c89d369f589048988f9d659faa90d498b79d959f7f8ed498b79d959f7f8e00000783de070c8500000783de070c85ee2ceb30f2319ea5be2eec321b3486a8cc2e8432073458a27d18a4189d19ee15150300009300000000000000000000000000000000000000cba0cba232a4332415ad84b074b1fc2d69aea5b2f2b3562d94ac71b047b15728dcaaebaef4af2424c3a9b5adaeaee72016a92bad05aef31c62a87cac45ad9d17aba70bac9eaca99057a5c5aa2eacfc9bd51bc4a61aa9fba12629661d04a3faa5ab2a6c24319986a8ee2a4c25e61267a9ea2aa8250419c2a9ab2a9a25bd1d1faa3e2a8f25ab1d7caaef299325451febaa42292b253c1f22ab2628df23c8185bab16267c1fe09b98ab1924889206a1a7ab0d18aba22da595aa55a35ba77ca8e7a0cca114a666a7a19470a1e8a54da7f1914ca1cea543a7fa93b5a047a58da6a2958aa0d6a40ba6f49519a071a499a53d96119f08a432a5a995409e5fa3b5a4bb95509e13a379a460952c9e00a36ca43495009ea2a245a4e194779d26a200a47994089da5a16ca31b947d9c3da102a342943f9c01a1a1a21194db9bcaa045a241943f9b8ba0fba10994f59a48a0b3a1e392839a1aa06ca18792879ac89f21a18b91fd99479feba02f918699ca9e68a0d5901d993d9ee79feb8fcf98019ed09f9c8ee498069ea19fa68f4898b19dba9f428eb398989d6c9f538db398989d6c9f538d00004581930a5c8600004581930a5c86522c9730a33161a5582dd931063320a7252eb832d933a8a44d1b0a1e581c63186807000000000000ac000000000000000000000000000000dd9db9a0d9a1632489ac3eb022b1512d86ade7b1e6b28b2caeab16b0deb00d285daab3aedbaf022474a9a0ad99ae0620d4a80aadcfadbe1c24a86eac3cad65175ea701acc0ac8a9099a633ab57ac31990ca4eba97aab9e9e5a22f7a4c4a853a47e2ae522969f5ca8dd2bb626201ef3a9ec2b7e27bc2087aacd2b78277e2125ab682b7c27412298abf62a89273d22dbab4d2ab42668210eac2d290025cb1d4bac8d27aa219e9269ac8a253719b19d9eac0120fba089a411ac8aa301a78ba8c8a264a3b3a518a7bc9971a1c4a521a7689817a1a3a515a741989da021a569a6a5974fa0a3a4dca5a49753a07ca4b4a54d970da04aa467a5a097419ff8a304a5bd97719e82a3cda4e497509e29a383a45d97049eaea239a4ca96c29d54a2f7a34b96709dd1a175a33a95159d49a1e3a24094b29cf5a082a20f934d9cbaa03ca2aa92919b82a003a25a92db9a60a0bca1d292389a2ba07fa17f92ce99ae9ffea00c929899009f83a083913999bc9e5ba04e910599729e30a08b90e0983f9e11a0c58ffc98259eeb9f918f6e98fd9de79f3e8d1b99b49d4e9f928f1b99b49d4e9f928f00000681e7091d8500000681e7091d85ab2b4c3055312ba52c2dcc31133328a7e02d2832d93336a62a18171a831940100000000000000000000000000000000000000000000000008a9c349e99a08724a4ab5daf9eb00f2e51ad2fb259b3782c83ab37b0f7b00e27dda97baea7af1f22f4a874ad7dae481e74a8e9acd6ad7d1a0aa887ac47ad301756a714accbac63107da665ab4eacf48f69a56aaaa4ab8b9885a1e4a86aaa129fe526219fc2a5ffa5252ca9274322e7a9842ce528e92411ab642cbe28f624d3ab2d2cc428872428ac0e2c9328832468ac392b282810248cac422af5266222c6accb28bc244d1c04ad2a270021c79266ad3121559f07a4bcac8aa4a8a607a880a31da228a67ba7199905a182a5e7a66198eaa06fa5bca63598d2a055a591a6819879a0f7a440a693980da0ada4eea53598629f51a498a53d98ff9e25a454a5f597c19ee6a304a51b988b9e73a3a6a493971a9ee4a262a40197a19d99a23ca435974c9d54a207a4c496199d00a2cda35a96fa9cbea183a30396929c82a145a34195459c33a1d3a2e794d79bd9a091a293943a9b72a00fa2aa93779afa9f88a138926499de9eb3a0d6900699649e2fa08190e1981e9e05a09b8fd8980a9ef19f828e00990c9eab9f748ea798eb9d02a0338c6099fd9dd59f80886099fd9dd59f808800000481dc09158500000481dc091585982b6530803139a5522dfb315e3391a6f82cd43142332da5ee14d217ce16fc10000000008d00000000000000000000000000000000000000f696199ba89a3823d3aa3aaf4eb0372dcdace8b13bb38b2c43ab3bb004b1602790a9b2aed2afd922b2a879ad7cae1c1e5aa8eaacdaad311ad8a774ac61ada310eea617ace1ac419014a635ab57acb89597a5b9aa0bac4095fba42daa7bab2698a39f85a8f6a9afa0eb28201f17a1efa7c22c5329f62449ab002dd4297f262bacd82ca5297d268dac9e2c7f290b26daac452c1529a02523ad472b6128bb2463adc8296e26f220a8adc42890247d1c30ae2523059edba289ad96a2d5a628a860a487a1d5a501a7789997a1c2a51aa79f9639a19da5e8a64b98cfa054a583a68e988ea019a570a64f982ba0d0a433a66e984d9f5aa489a5d297099f34a467a51598f39e01a42ba59a97e89e71a3bca4e896a09e08a38da47496419ed3a285a42296009ea0a274a4e395869d5ca258a49995d39cd0a1baa30f95559c43a1d2a295944a9cf5a08fa245946a9cd0a058a28b94849cb6a036a20494519c67a0dfa18393439bc49f16a1fd91729a5b9fd9a09e916399179f0ea1d890bc99869f4aa17290359a7b9f4aa18b912297909e20a1958d499af09eb7a09b8c499af09eb7a09b8c00001a817707828500001a81770782851e2b6a307731aaa4ad2cf8313033eea5962c8831133328963c145416eb159912d60000007c00000000000000000000000000000000000000359ddda00fa1e7221baa32af2bb06c2c69acd5b1f3b2692c94aa26b009b19e272fa985aeb6af572392a878ad8cae591f2ea8e7acd8adff1995a75cac46ad651094a6efabaeac0090d6a538ab42ac8b9579a5b4aa0bac5c9826a55daa90ab249872a4b8a9bcaaec9a5d9b0ba7eda8f6a0382a4124dd11d9a8452d2c2b16287fac9a2d1b2b87283dad522da92a4c2883ade02c842ab727f7ad3c2c9929582648aee82a62287e2493aedf296e26492102af6e24569c42a1e9ad26a21fa634a7dda2e1a0d0a517a79b9952a175a5dda6b8991fa155a5dba6cd98b3a02ca5bea6129945a0efa491a6b89821a0d6a445a683980ea0c3a4fda5ca98f49f83a4aba56298939f02a430a5b297f69eaaa30da53197af9e8da3eea4c996409e23a3ada44796e69da7a272a4cb957a9d5ca22fa47b95149dfda1d9a3a6959e9ca1a161a342955a9c5ea1f1a20495089c15a19fa2bf944b9bcba040a26f94c09a79a0d0a18d932f9a0da035a12f92a899529fc1a0a5913199b79e70a02f91f598739e41a06890e198569e27a05490a4980d9e27a0949067996e9ee6a0a69267996e9ee6a0a692a5240e261127e615a5240e261127e6157b2169246f247897332c2b31763256a47a2cb2313933c7a2e2135a1869145407520800000000000000000000000000000000000000000000f49d38a02ca2b922e2a9a7ae28b0f72c0eac94b1bab2d12b0aaafaafccb0f526b7a82eae6caf93212ca84bad52ae861cc3a7c6acbaad1a17f8a65bac3cad64906da6dbabcdac09960da615ab33ac899879a561aaa7ab2698e6a4f2a946ab8199a1a49aa9b4aa1a9915a444a92eaa119a699df9a6b6a865a17b2afd25e91cbca9192e322c4c2968ad152e092c772937aec52de02b0629a6ae382df82a56282aaf752cde29f4267faf0a2b64283224ebaf99224f9f95a288adbfa177a5cca6a3a149a106a665a7cf998fa1b7a525a7fa9778a18ba500a768980aa147a59da63e996fa0e5a40ea64e9918a0b9a4dea57799c99f81a4dfa515994e9f59a4bda52499179f22a463a52999bf9ecfa307a5c3984b9e79a3eca482983d9e5fa3d6a4ad98319e19a3a4a46798d79dbaa264a49b973d9d15a2e0a3ce968e9c4fa1fda27295189cdda086a29794e49b98a048a24a94da9b89a01ca2a7935f9b83a0fca18b93009b62a0c3a19092939a1ba06da127924e9ac69ffda0d291029a609fb3a086918a99f19e77a0bf913399989e36a0cb902f9a4f9eef9f75902f9a4f9eef9f75901b259c26892754191b259c2689275419f320d223e623b195ef2b103171325da31d2c9231fb321ea46d0d3018940d350fd208000000000000180200000000000000000000000000001b9ac99d029fac212fa93daecfaf4b2cc8ab76b1a7b2102c80a9b5afcfb0892770a806ae4eafc822b6a714ad34aed21e4aa7a3aca2ad061ca5a626acfcac451604a696ab9faca50f77a5dbaa28ac058f35a54eaa90ab748ea6a4bea901ab7c9450a468a987aa389404a4fda8fda97c961ca373a85fa9c995f29ff8a69ba8959e1a296224331a10a90e2e342c7e29ddad5d2e7b2cd9294aaf122e0d2c3b2904b08e2d3c2b992832b0a62b2628322474b04d9e20a494a591abe2a08ca54da7429eeba0e1a541a73798efa07ea5f4a6ad98a7a068a5d8a612998aa039a57fa654994ba0fea43aa67b992aa0d9a401a6ae9912a0a1a4c9a53a99479f42a45ca51999e69e21a442a5d3989d9e10a420a5f5986c9ed0a3fea4a9981d9e62a3bba4a1989c9df0a271a442982f9d7ea227a45797e39c31a2cfa3dc96c29ccfa178a35f96af9c8aa11ba39195799c43a1bfa24a956a9cfba06ea28f94129c98a005a2af93599b49a095a17b92b69a12a041a12892459aa49f01a12b91d4994f9feba0f290a199fd9ea9a0ba90e798f49df39f1b8ff999b79e85a05490f999b79e85a054903224f8253426991a3224f8253426991a8e20b82370230394312bdb304b3231a4392b333195329fa4160e5e18510e380e6f08000000000000b9010000000000000000000000000000e79c15a141a2a0200ea942aeb5af062afbaa46b150b2902ae6a85faf99b06e26f5a7beadf7ae252329a7e4acfaadc41f93a682ac7dadd51b0da61baceaac361683a553ab6dac800f03a58aaae7abb18ed6a404aa38ab9f94a8a4c9a915ab729478a463a996aa019715a4fba8f9a97a966ea38aa872a92298bca24ea827a999956ea1f3a63da80e9a2021bc99cda20ba62f2cf828ae2520adf72d692bbe28feaf6c2d972abd278ab055276420849824ae1fa215a624a740a50ba005a5baa61c98e4a06da59ea63e9874a001a564a60a99a8a0fba465a6869984a0e1a442a655997ea0dba453a6b5997ea0d0a44ba6f1996aa0a8a419a67599ca9f8fa4f3a50699809f5aa49ba517990e9f1ca44fa51299ba9ecea30ca5b698459e54a3c7a44798ce9ddea274a4c5977f9d70a236a4ab96299df9a1dda32096da9c99a158a3af95829c49a1cea2e394279ceaa06ca28b94779b9ba003a2b293c99a47a09aa17992b49a01a055a16c911a9bda9f08a151919e9a329fcda04c90419af59ea7a0338ff799d59e92a0008fc899de9e7ca0e38f489a5a9e12a0078f489a5a9e12a0078ff8238e240f253c1df8238e240f253c1d2520e823b523af90c22aea303a3203a4f92a1e31a432a0a4e91027180311ed811602000000000000a80600000000000000000000000000000e97269db59d7d1e81a88eae8bafe0297eaa2cb130b2ab2a8ca829af83b000279da79caddfae8923e6a6deacebad652038a686ac78adfa1c95a5ebabc8ace91838a510ab4aac5715daa48caaf2abb40ea9a4ffa95bab3d8e7aa487a9a4aa509427a4fba808aa9696c1a3a0a8aaa9489830a359a845a92c99f9a242a809a9119912a3f4a7eda85d9712a28ca7afa847988a9fd2a556a739a0ce1686a27fa4e8a5301946a1d4a2b8a798a093a595a6e1a33ca175a516a7219ccfa026a512a7d695e7a05fa5a9a65598e6a017a583a6a998c4a0f6a449a67a9889a0d6a411a6cd986aa0b9a4f4a5a19966a099a4f3a5d7994ba08da4e9a5069a37a074a4d2a51f9adb9f32a479a5f9990a9f04a420a57299be9edba305a527995b9e9aa3d2a47c98129e1aa39fa41a98c99da4a254a4e296899d3ea214a4e3950e9dd6a1a6a37495a89c5da10fa30395399cf8a091a20c95e39b8fa0fda1a194959b38a091a149940a9bdb9f42a15693a79a739f15a1f692019af69eb6a0f091bd99919e72a0a9919d994d9e3fa06e91c898dd9d45a00d91299a619e0da18d90299a619e0da18d90ec90d8965d97168bec90d8965d97168bfe1e1c224b22c49675297a309231d8a3202a95304b3249a2b9101918fd100e067c0000000000000079000000000000000000000000000000e694ce9b999c1e1f51a82dae7baff629ffa9ecb0e6b1ad2a0ea8abae2ab03726fda63aad82aef92148a68fac99ad591fb4a52bac0cadb91c2aa571ab81acc318cfa4d8aa2bac421578a437aa87ab790e3ba4afa9ebaaea8dbfa328a95caa189434a3bfa8c3a98893daa260a84ca90f936ba213a8f7a8939229a2a9a7b0a8279504a26aa784a8e794a3a1f7a653a89b94cfa1d9a62ba8e39716a131a60ca8ee9520a2ffa50fa8269a54a1d9a582a7de98f5a056a5cea6ba921fa13ea5b3a62496a3a000a54aa63b9876a0c6a41ca609985da0a0a408a6839858a09ca409a6849949a099a405a6cf9944a0a0a4e6a50a9a4ca0b2a4e5a5389abd9f6fa4b8a5199a249f57a4aba5ae99009f29a474a59499db9eb3a30ca5fd988a9e49a3c7a4ef98f99ddba290a47f98309d58a23ba4b597e09ccca1baa37d96909c66a12ca389956d9c12a1afa25394199cbca03ea24f93799b85a006a2e792009b48a0d6a18b92fc9afb9f79a18291289ba79f2aa14991469b549fcca00f915b9b069f8ea05290089bd39e48a03e902d9a579e20a0ba8c5199d79dc39f6c8f5199d79dc39f6c8f9c9c519c7a9bc18b9c9c519c7a9bc18b9921bc249b243598fa283d3028310ca158298c30cc313d1c67137a1949153811c90b000000000000b5080000000000003a009c010a00e803c897ff9db29e6f1f01a89badfeae5a2a8ea9b0b092b1c12a6aa762ae15b09e269ea618ad5fae0b23eea568ac74ad192052a505ace0ac8f1cd3a423ab67aca4188fa48aaafcab1a1532a4e1a91eab388ee4a35ea990aaae8d65a301a926aaf29309a381a87ea94393c3a237a821a9ab956aa2c9a7c3a8759716a261a78fa88b98bfa1f6a646a83c999ca194a60ca81e9868a142a6bea7d79764a106a650a7329452a1b6a510a7c490f0a055a5a9a66c9390a0f0a413a61f9374a0f3a424a601936da0c2a4f8a5be9252a0a4a4c6a5cf9537a084a49da5e8960da05ea493a57b9800a063a48ca5da9812a089a4bba52f9928a0a8a403a66699fc9fa1a40ba6f598679f73a4bfa5f698de9e26a452a5cb98609e75a3daa48098cd9dfba28ca46c98a19dc3a263a42698439d5fa229a4bc97f79ce1a1b0a31297a79c8fa152a328966f9c41a1d3a2d195229ceba069a2fe94ab9b89a0f2a14794f89a26a071a1d5937d9a629fd1a06d921b9abb9e5ba05b91ac99549e18a0179161990b9ebc9f65904b99f39d8d9fe390d6988a9d8c9f648d7099cd9d799f9c8f7099cd9d799f9c8f309b539d5f9eab97309b539d5f9eab976c186419fc1b839103291730e7309aa25129b2300b3203a17408d9124608ff007c00840b00008e018b03bc08000023010000000000000000b598729d0b9e331ef4a7ddad43afec2a4fa9ebb015b2652b2fa7a2ae2cb01f26d2a5e2ac1dae312121a515ac15ad671d6da431ab73ac471c12a47caadaab8318eba3eba941ab0715aea397a9c5aa388e38a319a929aa1897baa285a87ea97a985da20da8eea8419909a2a9a798a82c9bdca13ca772a8d29bb3a1ffa64ea8369c9ca1e8a62ca8049c7ea1a8a60ca8d49a51a170a6dba7999ae9a0eaa567a72c9a9ca06ea5aea6e99862a00da51fa670961aa0b0a4c8a5219010a079a488a50390d69f25a426a52609759f0ba4f7a4888f539fc3a3e6a48895f69ed1a3eba4bf97609f14a453a56898949f7aa4e3a5049adf9f9ba423a6b99a429f80a4eaa5d39acc9e56a4b6a5989a999e42a4ada52e9a7f9e19a47da59d99349e92a30aa5bf98c49dbca267a422983c9de3a1e2a3a996ba9c86a16da3b895999c61a135a31495709c2fa1d8a2d8943f9cfba08da2a6941d9cbea014a26e94b69b60a0a1a17793db9aeb9f24a12c927a9a5e9fd3a0cd915d9ace9e8ea06b911c9a549e4aa09b909c99ce9d959fe090cb98009de19e5291e498fe9c849e018ee498fe9c849e018eb59d1a9f179f2c9cb59d1a9f179f2c9ccd1ec72020223397272961306331dca43b29b930293205a743072716050a0b0ad00000000000000049804e0100001c02000000000000000002988b9c009eba1d79a7e2ad2faf3c2a35a9e7b0fab1602b32a7afae46b0ba2694a5d2acf8adf321eda4f4abc8acf71c20a4a8aae4ab281a31a3aaa9ceaa2d15bea22aa92caaae0e61a376a9d0aadf9727a3d5a8f8a9aa9ba4a254a855a9da9c47a209a8e7a8219dd1a189a77ea85a9d9aa1e2a636a8829d54a164a6b6a71e9d1ea105a669a7469de5a0e0a54ba7649df3a0a0a5e8a6419c8ea06fa5aea6eb983ca0f8a41da6ed940ba09ba4bba56889af9f52a471a59c14529f04a403a5d715e69e42a3a1a4be15939ec2a238a47414409e86a214a48b0f429ec9a242a47b8fe79e7fa3f4a49095c69f5ca4c7a5c4994fa001a56ba6e49b55a016a57aa6639c569fbfa4f9a5359c649e29a451a5099b4a9e77a3dea42c9ae59d12a39ba45b99a09da8a25da45e98499d30a20ba40097e19ccda18ca303968b9c6ea123a32d95379c08a1b4a26294bc9b86a0f6a1e193ec9af89f2ca14792739a439fc1a0c791519ae19e7da0f3904b9aa29e53a0d390359a649e35a0b3903d9a369e16a01290029a2e9ef59f98903299ae9df59f858cda98699d5d9f8091da98699d5d9f809100003c9c939c4a9800003c9c939c4a98ef26d52dbc2f5da38a2905313e322ca53c29d9303c3274a5b003b814bb0208855e800000000000008b0000000000000000000000000000009795bb9c989cbb1c06a82daed0af912969a9fcb03eb2442b0da779ae21b0af269fa45cac9aadda214fa429ab5aacd01e27a3e8a956ab281cfaa04da97faa2a195f9e74a467a58a19b4a1b0a8cca9319a78a1f7a78ba8c49deaa08fa6b3a7319eb8a03fa67fa79a9e6fa016a667a70fa067a0e6a542a7af9f84a0e6a530a78a9f40a0bea52da7979de49f03a553a69f9a679f85a497a5679414a0aea4b2a50809b29f61a44fa54f0f5e9f03a421a50c14de9ef1a26ea428153d9e06a281a36316089e88a1f5a2e117da9d4ca1d2a22c17f19d8aa113a35416fa9de1a19da35810a19e4da3caa40c95a79faea4eea5379cba9ffca463a6179d449fc2a43fa6309cdb9e71a4c5a5b09ba49e44a47aa5989ac29ee7a328a5fb998f9e44a3a3a4d198129e59a216a4ca97469dada196a302966b9c38a127a39794129cd5a0bfa24194a19b9ba050a24193b09b6fa0eaa1fc92699b3ca08ca1ab92fd9ad79f22a13d92389a549fd1a04591ac99b89e97a0e39026991a9e61a07c90e798ae9d0ba04490d298659d4d9f25902898f49ce79ee38d4b98af9c659ecc8b4b98af9c659ecc8b000040923b905691000040923b9056914725a02cad2da4a10228012f7230c8a2b821e2281b2ab3a4de14781fa1203aa1d61c70248b26a6a15a19e1226124eaa0c99970a11ea0879e609f8aa72ca86f2017a39caa27ac58282fa8deafefb09528b6a45eac63ad262480a387aa2cac102075a26ca9a7aa831baea1d1a8c5a98313d5a033a815a94d8c299f70a438a58191229aaf9ffea00497e39c68a3c8a45b992b9ebea484a5ca9ad29e7aa4a2a5269a599fdda4cba5f7995b9fd8a4dea50d993f9fdea4f3a55598c19ff7a401a60296239fb6a4dea55492989e4da442a52d8f1b9eeda3f8a49e8e5c9efaa3c6a45d08eb9e0ea4f0a4c50edf9ea3a3b1a481118d9e06a354a40016499ecda150a3de19b19c0fa0d4a0a91b0e9cf19d249f251cde9d4fa091a1251b4f9fdaa26ea4bf8a3ca05ca5cca6019d81a049a6eda76a9e8c9f5ea5bca6da9da49e25a453a5819c759e54a397a40a9ba59d6aa233a43e99b89cd8a10ba43798989c82a1bfa364978d9c14a1d9a26e955a9c99a0eba17a941b9c50a0a5a1ab93bd9b1ea07da19f928f9be99f75a15c92969bd29f3ca14a92019c529fc7a05391bc9ac09e64a0e990a2993d9e11a096907499e29d9a9f5f902799aa9d439f838f3199889df79e34900899579def9e298fa5980a9da19e3d91a5980a9da19e3d9100002690c38fa89600002690c38fa8960f2024276828f69e6e24452c6e2d9ba01025762cb62d19a1cb21fe28f52a2b9f3a181e217f22d29a6d9c03a41ba5d695db9e07a7b0a79d16959f0ba8efa8222268a2aeaa1bac5b23eda2d2aa55ac1221cca21baa92ab8a1ee7a144a969aa501c11a180a88ea9da15d6a02fa827a95b0c7ca092a7aca8d09126a086a601a8ee90139f51a57aa6b094a99e89a493a57d95959e41a43ca54a961f9e4da34ea41b93699d25a348a4f592ee9cc1a207a4b2907a9d46a258a35c901a9d4da23fa3c093519d84a2a2a322920c9ebea223a45892519eaba227a44792a69eaba210a46392989e53a2eba328928e9e65a2cea36f8d089e16a2c8a35c0dba9e73a201a42f14379d86a072a1d8186b98cd944d91011e7c986512850d6520dc9e67a259a4418d33a1cca7eea8ffa1f99f27a6aba778a0209f64a4b5a53d9d389e31a3a6a4159a4a9d4fa2fca36c98179dc2a157a37697af9c45a1eaa25c96639cdba079a25e95159c7da011a22a948b9b3ba0cda10693319b07a085a1b192d59a9d9f35a1a991799a339ffba05a91579ac79eb6a00891f999649e6da0cd90e5991c9e40a00d90a299ce9d04a0c98f3099b19dd09f9d8ef3987a9d829f728dbc98429d469f3f8e1c98ff9c319f068d49989c9c2d9ebe8c49989c9c2d9ebe8c00005b89e185de0400005b89e185de04292317298a2a199c7e23e22a522ca39fbb22132aa42bb39ca31f36278928b2979693a09cbe9d9d1ac89feaa7b6a87919aa03ad94a40c9c11da133e156b193e15299e4ba6c8a7b415f4a0dba8e0a99b19b9a093a8a6a9b716c0a023a817a9071379a07ea7a6a8520c51a017a760a8048c5ea02ca76ca8829128a096a616a8d3900a9fa0a50ba76989509ec2a4e2a583880f9e34a442a52c88eb9d0aa4faa41b8e0f9ec7a3cfa4e690f29d5ba38aa49792fc9d2ba377a42194a49df4a245a401947e9da7a217a4ca937a9d82a203a47f93749d77a2faa35894c49d73a201a455946a9e90a20fa40e95519e64a202a4da943d9e49a2f5a3a494ff9d06a2daa37194cb9dc6a177a33493429d65a046a2e18f0e9a529e109dcb18eb9c359e739ce59aa0a251a9abaa41a2d09d93a23ba48f99119d29a170a37e958c9cf7a0bca24795c49cf6a0c7a2c394c89cd2a095a223948f9caca067a22c938c9c86a00da2f492309c4ba0c0a18592da9b08a065a16891439b909f05a112910b9b0d9faea0ba907c9a9e9e6ea06f901d9a699e4ea04c90cb993e9e25a0418f8799049e07a0ea8d4999cd9ddf9fb48d0499959d919f7e8df098569d2f9f588cef98189dba9e108d9398c19c889ec88ce098b39ce59d048ae098b39ce59d048a00006f83d200268900006f83d2002689c4200f282929d59bfe209328b329a79a5b20092805293199871ca923c324f814f3950c9ea69fa419599bf7a2cda300192b901c9c5e9c0f0d2092e89dc79efa8cf3984ba2a9a35f93e59ceda4dea5928c579edaa539a7358ccd9e09a641a7f991b09ef2a53ca7b6940f9feea556a75a94199fd8a552a7fd930e9f79a5b6a63d936c9eeca412a68e94a19d4ea458a54c95239dc7a3d6a4f395039d45a36da49496da9ce2a22ba439960d9d8ea2eda3ee951e9d46a2a4a3cc94219d29a27ca3a394409d0da264a367943e9d0ba267a35394089d11a25ca33494ec9c08a269a31d94f79ce7a178a30794099dbba135a3d2931e9daaa12da39b93469da1a10ba37293679dcba142a355949a9df2a167a35394fa9c0da19da20d9326917198ce9ab78ce08c7a933c95e78a4499ec9c029e8991389b949ffea0bc92d59b1fa05ca1f692fd9b2aa064a1ac93a49b17a043a17293819bf99f1ea16a928a9bbd9f0ca12792b59bab9f01a10692c09b929ffca03191a79b7f9f00a11591599b629f00a1f490eb9a2b9fe5a072918c9add9ec2a03891e899759e7ca061903e99cb9d23a0da8fc1983d9d8c9f2f8f6898049df89ef58e5798f29ca99ef18d6798f09c6d9edb8e1d98e19c6e9eb08e2298e29c209e2e8a2298e29c209e2e8a00009716891701040000971689170104ef1fe62531272397cd1e2b269c276598631da724e8257992ff195e21c022f712411234184f1902166292689cde9cdf159994da9da99e9315ba966d9f60a02512f89831a13fa2ba0b7f9abfa2f5a3528bda9ba4a3b6a44e94ac9c3aa43aa5b495049d60a46fa56395579d7da498a54193769d7ca47da5d592789d62a45ea56e92459d2aa409a50192109dc3a3b7a4d593da9c4ca37ca4bb94dc9ceda248a47e95049dcca225a44b95329d7fa2f9a30f95529d63a2e3a3e494699d1ea295a3af94409df2a16da37994229dcea123a34a94da9c87a1efa2d594a79c6fa1caa2ac94679c35a1a9a27a946d9c4fa1a6a26b947e9c58a1b8a24f94999c70a1d6a24094ad9c6ca1d0a2f792ad9c56a1c1a2c2922a9daba121a3b593689cd2a023a2ef917397d19c389e468f7a94e69aa79c0b8eb698439de39e9c90699ba59e8ea07f910d9cff9ec9a04e920e9c2f9fd3a04e92a29b399fd1a02e924d9b349fdda00292ef9a119faea0c291b99abf9e8ba0ca90b49a699e4ea07f90ba9a289e2da07e8f6c9afa9d06a0458f289ad29dcc9f008fb299a59d8b9fc98e43993a9d219f5b8ebe98ea9ca59efa8d7a98b19c4d9eb58d5398819c0e9e7a8d6b98869cf19d818d0b98659c069e588d6f971c9c829d018b6f971c9c829d018b00000000000000000000971689170104ef1fe62531272397cd1e2b269c276598631da724e8257992ff195e21c022f712411234184f1902166292689cde9cdf159994da9da99e9315ba966d9f60a02512f89831a13fa2ba0b7f9abfa2f5a3528bda9ba4a3b6a44e94ac9c3aa43aa5b495049d60a46fa56395579d7da498a54193769d7ca47da5d592789d62a45ea56e92459d2aa409a50192109dc3a3b7a4d593da9c4ca37ca4bb94dc9ceda248a47e95049dcca225a44b95329d7fa2f9a30f95529d63a2e3a3e494699d1ea295a3af94409df2a16da37994229dcea123a34a94da9c87a1efa2d594a79c6fa1caa2ac94679c35a1a9a27a946d9c4fa1a6a26b947e9c58a1b8a24f94999c70a1d6a24094ad9c6ca1d0a2f792ad9c56a1c1a2c2922a9daba121a3b593689cd2a023a2ef917397d19c389e468f7a94e69aa79c0b8eb698439de39e9c90699ba59e8ea07f910d9cff9ec9a04e920e9c2f9fd3a04e92a29b399fd1a02e924d9b349fdda00292ef9a119faea0c291b99abf9e8ba0ca90b49a699e4ea07f90ba9a289e2da07e8f6c9afa9d06a0458f289ad29dcc9f008fb299a59d8b9fc98e43993a9d219f5b8ebe98ea9ca59efa8d7a98b19c4d9eb58d5398819c0e9e7a8d6b98869cf19d818d0b98659c069e588d6f971c9c829d018b0000000000000000000000000000000023271c2b1d2c9ba49a29752d872e2ba7f42b223026311ea9aa2be030e7307faa55a4daa38ba71b9c0000000000000000000000000000000000000000000000000000808f0298928919a4f5a7faa8439667ace2b05ab12a9f52aaaaae67af689c5fa851acfcac4f9dada5f2a95cab1c9f458e04a35fa547a2672160a56fa982a66025209356a303a668284224d0156ca8c42817246e9eaea92c1e3fa2afa5caa41b9ee8a21ba440944c999a9b329c6513f7992b9e07a0170e3c9b30a0eba04f05599c779fc9a01b8dcd984e9ef39e4389ad98f098be9952868a239e215e1fc3a40d246f219d1f82a70e216c1fc11a41a7fd8d15988f9841a49ea25da809a9c2a0379e57a61ca76498a99ceba101a41494be9c3da19da21c94ca9beaa03ea25f94119cb7a013a2af94009c9ba0eca18494ef9b8fa0eba1f0944c9b60a095a1af94119b3ba070a1f594519af19f29a19894419a8b9fe0a05e94199a349fa1a01e94bd99e39e76a039948e99a99e50a00a942b99609e32a0bb93f5983a9e1fa07693bf98229e12a041939798f49df89f0d935c98cf9da59f40926998a29d579ffd917498619df99e3a917c98319dc29efc909898ff9c5a9ecc904498e99c309e43903798d69c0d9e16915897a19cf69df38fbf98959cac9df78f000000000000000023271c2b1d2c9ba423271c2b1d2c9ba49a29752d872e2ba7f42b223026311ea9aa2be030e7307faa55a4daa38ba71b9c0000000000000000000000000000000000000000000000000000808f0298928919a4f5a7faa8439667ace2b05ab12a9f52aaaaae67af689c5fa851acfcac4f9dada5f2a95cab1c9f458e04a35fa547a2672160a56fa982a66025209356a303a668284224d0156ca8c42817246e9eaea92c1e3fa2afa5caa41b9ee8a21ba440944c999a9b329c6513f7992b9e07a0170e3c9b30a0eba04f05599c779fc9a01b8dcd984e9ef39e4389ad98f098be9952868a239e215e1fc3a40d246f219d1f82a70e216c1fc11a41a7fd8d15988f9841a49ea25da809a9c2a0379e57a61ca76498a99ceba101a41494be9c3da19da21c94ca9beaa03ea25f94119cb7a013a2af94009c9ba0eca18494ef9b8fa0eba1f0944c9b60a095a1af94119b3ba070a1f594519af19f29a19894419a8b9fe0a05e94199a349fa1a01e94bd99e39e76a039948e99a99e50a00a942b99609e32a0bb93f5983a9e1fa07693bf98229e12a041939798f49df89f0d935c98cf9da59f40926998a29d579ffd917498619df99e3a917c98319dc29efc909898ff9c5a9ecc904498e99c309e43903798d69c0d9e16915897a19cf69df38fbf98959cac9df78fbf98959cac9df78f7029742d5d2e2ca67029742d5d2e2ca6422d1631ec3133aaba2e50327a3369adc82e6a32bb335bad0aa280a4afa5531e27930000000000000000000000000000000000000000000096035a0d00006414e18c768efd8f2b278aaf01b3f1b3f5a05dadffb0c5b17aa37faac2ad88ae41a03aa83dab30aca6a024a386a7aaa8eaa2cb183aa7faa8c2a6ba251f9a46a177a841284b230715a0a87c283d1b69a460a86d2426a6cda9aca418a540aad2abc58f05a318a8f5a86b91269d13a256a3d31abf9b24a16ba2a61cdc9946a02ca1211d2d93419a259c1b1e72273c262c25c9a69d266325d124aba79924bc222621eaa64021231d5c186ca60d9f3aa2e3a301a415a2eea62ba87a8d9da060a6a9a727181fa0d9a4cfa5b2109b9ff1a3f7a4908c6d9e2ba386a44192b19d67a21aa4b694539d0ea2baa39495c29c87a128a3a1953e9c05a190a29995019cb8a022a2a695599b90a0eea166950e9b5ea0c2a12b95d69a34a095a1eb947f9a11a068a15394489ae69f42a13394229aa09f01a15b94ec99619fd6a02b94dc991e9fb6a00594a899fe9e9ea0d0936699909e72a05693c8981a9e32a046927a98a89d9a9f4e911b986f9d389f95910098209dda9eec907f97e69c719ec2907b97cf9c149eb990cd967e9cee9dfc8f1e974e9ca09d28911e974e9ca09d28911128702a9d2b60a51128702a9d2b60a5f42dcf31753268ab12305d335334b8ad623092337a347eadd59cdd9e5fa07d1e2f85000000000000000000000000000000000000000000009c0f5513c00d9b14d396719868101c2422b049b316b4201828ae81b138b211a3caabccaeccafa8a1a4a9d2ac7aadd8a1a9a735ab4aac88a22fa220a979aa9fa45f2144a4eaa684a6a127d7199d9f04a85528f7190aa319a86528cc997fa53aa8972676a232a88aa7b9a21ea8f2a89d9b3d9b29a14aa2831e3398f79e85a003217296a29e26a06520958d3e9a389c8520921d981d311d111062263724072123a8cc24e22060185ba96f21f0918d9e4aa9b29d7ca4cfa517a7e3a105a609a7bb9a26a2c0a61ba8f6094da1a0a5e1a6778ef5a0faa429a6ad928aa09ba4c9a5ab95c49ee1a34ba501970a9e4fa3bea46c96c59ddba27ea4a896469d4ba217a49e96fe9ce9a193a33796969c82a1dda239962f9cfca05aa2a295c19bb1a0faa14d95539b6aa0b2a1fd94ec9a44a086a1c494809a10a042a18a942c9ab59f0ca1a794ea99479fd0a01194b799f59e96a0c593a599a59e57a06c936b994f9e1ba07c921699e39dbe9f0e92bc98959d5d9f3d919f98719d219f1b915e984a9df89e8b904a984e9db69e09915897eb9c9e9e908fb297a79c0c9e888eb297a79c0c9e888e6028122b1b2c0fa56028122b1b2c0fa5f92d1532883299abe82f6a333e34b1ad0a30e9336734b2addb1fc3236022c02100000000000000000000000000000000000000000000000060850f8ba4812d1683a1a2a22ca43c246cafecb290b3e19d06ae89b134b244a40bac31af2bb0e3a1e7a969ad43aefba0eba86dac17ad79a165a611ab3baca1a2fd9c2ea8c2a9a5a48225939feaa585a696287f197fa33ca82029981c2ba3b6a84c29111ee1a117a9662962206c9f15a95b29dd23e71156a951299224071d92a9d1289424651ef3a97f283e24611e2eaa54270e23fe1c37aafd25da20bd1140aa4524841b0f9d4baa0d216d9b5ba197aafd9a79a4dca5d5a860a270a688a7fb9dd0a1faa512a7989242a18ca5c8a6ea93f0a054a5b0a6b59480a0daa40ba61d96fb9f86a4e8a56d96e29ee8a3eda44a96519e3ca385a40697f19dc2a23ca47c96a49d38a2c1a377962d9db1a123a3ea95939c60a1cea287952f9c28a18ea2b395f19beaa03da26e95b09bd5a026a24995879b99a0f4a16e951b9b6ea0b5a12c95e29a34a080a1e994c39af89f47a1a794869a839f03a11094309aff9ec7a0f692e2998c9e70a0f2915599239e04a0a291b198cb9d6d9f519149989e9d369fb8906898929d089f3a9136971e9db49eea900898b09c2f9e9b900898b09c2f9e9b900000ba908a8d778e0000ba908a8d778e282dee30da312caa252fde32f1335eadaa2fb3335b340ead63223b25dc24462100000000000000000000000000000000000000000000000053903a92608a8f1542a67aa8b1a90126f0aec5b253b3691755ad28b1c9b128a47eab01af16b09ea2f7a9abada0aef4a0f4a8bcac61ad37a1c1a7ebab98ac8ea115a588aaabab6ca34d1b94a60da928a5af271f9c30a5a0a7a429cb20f3a0e6a8ec29a6210fa08ba9fb294622ee9dbfa9112abb23eb9834aaa0297923439264aa282912248e18b0aab8281224811be2aa3b281824831b1eabad26d521ef1119abe224bd1b299d41ab17221792b6a084ab489054a3f8a4a4a938a208a62ba72ba1b4a24ea68aa7b39a17a2f2a543a7af995fa18ea5e5a6b899eca02da53fa6b79838a09ea4a4a58a98709fc4a345a5a197099f3ca3c6a40697029e11a3a4a46e97b69dbca260a49c977f9d22a2b3a3da960e9d90a123a33796b19c4ba1eba251967e9c10a1a1a20b96409cdda07aa2be95f29ba6a038a20795319b71a0efa1c094d19a48a0afa19494599a14a088a15c94029ac19f4ea18d9386994b9f1da119933499809e76a0d791d098f99d879f6d916b98979d019f30915e98799d1a9fa6906e98949df79e3c912b985b9d319f0691c9988e9d879f2c90c9988e9d879f2c900000ff90008fc98d0000ff90008fc98da62c9e30823176a94d2e87327833ddacd62ec3321a34cfac5521ed2215245d1c000000000000000000000000000000000000000000000000be8f5b9353924714a7a62ba982aad72348ae69b20db32c1de3ace4b07ab1ada2d2aabbae01b083a1b4a9afada9aecfa0f7a8ffaccfad71a04aa869ac23adafa025a7bfab74ac9ba1f0a3eea95bab50a33822d0a462a8cea53a291b1f52a271a88b2af723529cc3a98f2ad624d1926baa962a29259712eaaa5c2a0f25001c30abe7296c25851d88ab9a296f25811df3abee280c25761df9ab0528ac23a31817ace125ab1d669d33ace3237592daa164acc91024a4a3a50aabcda2fea620a81ca2efa10aa62fa7009ba8a1d9a542a76b9858a1b6a52da73598d1a047a580a65a986ea0e2a419a6649822a07da4a3a5fa97259f10a42fa5e397339e54a3b3a40997429ef7a269a42997089ec2a258a4cb96b49d57a21aa4c295339dd7a18aa33e95cc9c6da11ca356954f9c11a1a8a2fc94099cdba069a23195709bafa019a2f594109b71a0dca11495b49a35a098a17494479a04a046a134943f9a8f9ffca05b93cc99129fbca049925d99989e4ba0dd910899359ee79f8591d998fc9dd29fdd90e498f79d7f9fd9903298839d969f02907d98569d0e9f6f907d98569d0e9f6f900000038dc18acc8b0000038dc18acc8b6a2c80305c3153a9352d7a317f320bace82d053236330aadd421d62542244e970000000000000000000000000000000000000000000000007e8ccd903992b614cda5e0a825aa4d2555ad7fb115b2f82437ac7ab021b1bc9d59aa9daec0af95a049a992ad83aeb6a0a6a8f4accbadffa004a85aac1aad8aa01ea7b3ab8aacb7a00ea6dcaa23ace0a060a137a9ecaa21a3f02400a300a82aa78b2ade22e09dc2a97a2b3126521c28ab8d2bf126951f78ab452bdf268b2002ac092be12649211eac962aea26422159acf1291f2643217dacd22870240b1cb3ac6227b020129cd9acfc2419192d9f0cad561c09a33da5caab75a288a6f3a79aa10fa2f6a535a7759a54a1c2a50aa7299a21a188a5dca6d799a4a018a545a640993ba09fa4cea5b5982da083a4b2a5ea9806a043a45aa5fc98369fd7a3efa48798509e61a3b2a48198f79df6a268a43398ad9d82a234a4c597709d39a2f1a34597379dada145a31296e09c34a1c7a28295809cdda06ea2b094159c93a01fa20694509b6ca0e2a1b293c49a42a0aea110942e9a0da075a1bb93de99a69ffaa0ed938399f49e6fa0a09233999c9e49a05d92d898459e15a08391a1980e9ef29f5090c298f19dc49f3b902a988e9d939f0e8fd198499d029f3490d198499d029f349000001691a08df68e00001691a08df68e792b2c30103158a9002d9a31ab3258ac982d26326e332fad2021c4246424929d000000000000000000000000000000000000000000000000b5000503d301e91149a215a5a8a61922d6aca0b129b261a1e4ab70b024b131a4b6a945ae66afeca1daa851ad53ae30a154a8d9acacadcda0e7a75fac35ad68a028a700acbcac09a069a622ab39ac26a03da54eaa82abc6a021a09da805aa0fa4c427a99ad2a43fa8b92b3227a02017ab492c992809241eac322c6e28062460acf52b3d2806249eacb22b4128fa23dbacd02aa6271723faacd4294a268d2042ad76282824071987adee26e5202c9cd8ad501a4ba3faa51facd8a29da6fea738a137a11fa686a7009b2da188a5d2a6289a0aa171a5a9a6769ad2a051a5a5a6129a56a0eea43aa6fa9909a0afa4eea58b99909f64a497a58b99389f33a458a52f99c89ee6a3fba41e99539e55a38fa4b298d29dc5a24da457986d9d70a221a45c98289d2da2dfa319980d9deea1a6a3c797ed9caca15ba35d97869c72a105a38c96419c15a1a2a21c969b9bc0a03da24395df9a43a0c2a15f94ee99689f14a110931e99a89e87a0cc910d99659e2ba017910799239efc9fe290c098e09d839f768fc198ce9d319f5f8f55984b9df89e2b8cd3987a9d369f1a8dd3987a9d369f1a8d0000f68a268c788d0000f68a268c788d2d2b2a30f03033a9d82c9c31b93262ac0c2de231243352ab251e3c22bb214f1a0000000000000000000000000000000000000000000000002f825a8400007d0b25a306a661a7581e92ac67b13fb2c4a2e1ab8ab038b118a47fa95bae93af80a27aa854ad65aef5a010a8b8aca9ad23a180a75bac28add1a0aea6dbaba9ac6ba0cda50fab2cac009f70a583aabdab999deaa412aa3fab399e299e2ba8b3a956a39f289c1df4a0e9a8782cb6286b2423acb32c41297625ddac9d2c452969251aad5f2c1829682560add82bae28012589ad9a2a8f277823e6ad7229da25fd1f62ae5228d12319199daea010e6a392a5faabe2a143a6a4a751a09ca1f1a520a70f9a54a1d1a505a7c79947a1a6a5e7a60c9adba04da57aa6239a72a007a554a6bf9901a0bfa40ea6c0993c9f5aa48ba52799069f29a454a53299d39ebea309a5b9988f9e3aa39da44f984f9ee1a272a40f980c9ec1a26fa4cd97c09d98a25da48a97589d49a227a41b97ae9cb5a162a36396519c30a1bba2ce95409ce5a07da27a95639ccda03fa25295639c96a01aa21495109c3ea094a14f94d89a649fd1a0f8920f9a1e9f94a0a592ae99fc9ec0a0f6916f991a9fd0a07a91a599209fc7a01492b998129e12a0af8e7599cc9cd09dfd8b7599cc9cd09dfd8b0000cf93019348900000cf9301934890eb2a39302931c8a8712c8c31ad32c9ab9b2ca131e13223ac2f1d01226e202694000000000000000000000000000000000000000000000000048ab68a00009f0999a39da73ea8101826ac72b1ffb197a2feaa61b005b1c9a3fba827ae5eaf8ea165a857ad53aee4a00ea8c2acbaad6da02ca745ac2aad09a045a6a5ab8fac579faea50dab29acac9f5da58faaf1ab429f10a51daa58abdf9e57a47da98baa219fe59c70a700a9f0a2c328a520dd9d08a9a42cad293c267dac092d672a7127a5ad012d412a042714ae8f2ccd29902674ae0b2cee283e25cbaeb32a0728e12324af9c28fa23ed1218af1f9da5a4dda570aa47a105a65ca7219f26a1e2a554a7ad9b2da190a5fca6ac9b0ca156a5c5a6119b9fa00da56da6859a46a0f0a450a6239a1fa0e1a428a6ea99f89fc4a4efa5179aad9f6da483a587998f9f0ea42aa5f398fc9ebca30ca59d989c9e66a3d1a44698639e05a399a4f097119e91a266a45997779d3ea218a46796019dd6a1bca376968b9c76a134a30c96449c3ba1d6a22996e69bfaa074a2dc95449bb0a02ba22395bf9a5aa0b7a1c6940c9aec9f2da106947d994c9fb9a0d1923299b39e85a05392ed98589e48a00c92d8983f9e15a0f4919598ee9dfa9f24923499259e59a0cd923499259e59a0cd9200002c1e421dc79200002c1e421dc7923c27c02cf32df5a7aa2b453172322cac442cc731d8322aac341fc6239c22189c0000000000000000000000000000000000000000000000009e8b5d8b0000050dd4a25ba619a80c217cabf5b0c5b151a29daa4db0f0b0c3a3bba8fcad4faf66a10da844ad34aec1a087a7c0ac95ad5aa0eda645ac1aad93a053a6afabb1ac2ea0daa5dcaa22ac959f20a537aa6eabdf9e9ca4b7a9fdaa6c9e4fa445a964aaec9de9a3dca8d2a91b9e2ca078a7d0a88aa1b326b21c31a15fa8832c88295626daac572df52a512869ae2b2dde2a1d282fafda2cfb29f526b3affd2b9c286224e8af16289420b69865aed3a00aa585a6e1a695a090a533a7969c45a1fca546a7ef9a70a197a513a74e9a4ca186a5f1a6bb9af5a033a57da6cc9a57a0e9a41ba6c19a04a0aca4d9a5d09a879f7ea4dca5509a029f4aa4b4a54d9acc9e0ea43ba5d0999c9eaba3f6a4b799499e57a3dca4be99269e46a3b8a49199ff9d02a385a44099a59d90a244a48a98f49cdaa1a1a301985b9c15a1bea27696049cada060a28f95c79b84a037a2f394a49b6fa000a2d094129b65a0d9a15f94e79a3ba091a135947e9a08a05aa10394479aa59ffaa01193f6993f9f9fa0b3925b99b99e45a0d39200992c9ef99f52914399069ed09f3e914399069ed09f3e910000811c061b62940000811c061b62940427d42c032e30a7442b3b31683206acf12b49317f3210acab1ab622221e1c97000000000000000000000000000000000000000000000000f6844d870a821508f2a0c9a429a61218eaaad6b0a0b10ea208aa3db0feb087a265a8e6ad31afb09fa7a7ffac05aeef9f05a782ac69ad279e5fa60eace1aca59ee6a554ab77ac199e51a5b6aa11ac719eeea430aa6dabf19d93a4b7a9f4aa949d3aa460a98daa8c9cd1a3f3a8e7a9159bfda278a837a98f9baaa1dda7eba8589fcb1a60a138a5e0a5d82973263e22b0ab5f2c6d2927265fae862c10291b257aaf582a30267a20e2ae6f18e9a1fca4bfaae7a1d7a52aa7eaa05aa0bca570a75c9a70a1f8a544a76e9aeca093a505a72c9ba7a054a5b3a6589b6ca019a54fa6649b30a0f7a428a6049b0ba0e2a409a6209b0ca0a0a4bba5829a479f4ca45ea54e9ada9e29a434a5f799869e03a418a5fc996e9ed0a3eaa4a399049e65a3a8a43899959de3a263a4cf98339d68a215a46d98f39c1fa2c5a32598e29cd1a16da35497be9c7ea11ba3ea96749c3ba1bea21996579ce3a056a2b295bc9b6fa0dca1d0949d9af99f43a10c94ff99829fd4a00293a6992b9fb0a0b2926599029fbfa077915199c29e83a0d2914b987d9d479ffb8f3099e19d1ca0a1903099e19d1ca0a19000000b1cd019779200000b1cd019779252268d2c952d30a7a02a1b315132adab3a2b223162326aabdd1a1c22221f2b97000000000000000000000000000000000000000000000000e5892c8deb8b7e0aa5a26aa785a88a193aaac0b052b1d8a163a900b0ccb05aa2f0a797ade8ae5fa005a7ccace6ad729e45a654ac4ead179fcba5f2abd4ac9d9e65a529ab57acdf9ee4a477aad3ab359eb0a4dea928abba9d85a495a9e2aa729d2ca430a94daa0f9d67a3aaa8aba9a09cf3a25aa83da93e9ccda22ca829a90f9b8ea215a8eba8f79b15a1d9a663a8bfa00296d0a40ca6d0a45a20d39f83a20da8800bc9a2bba48aa6b5a051a5a8a606a114a022a5a5a67f993da19ca5ffa6bd99d6a039a58ba63a9b86a006a56ca6719b9da0fea447a6309b77a0e7a448a6839b5ea0dca44fa63e9b36a0b8a41ea6419b30a0a9a4faa5b89ad29f8aa4cea53c9a889f5aa481a53e9a199f21a440a5c899d99ed6a303a5b699459e5ca3a7a43299ee9dc0a261a4b798779d64a215a45f98219de7a1a4a38297b19c7fa12aa3ec96539c15a1b2a2fb95bb9bbba03ea28595119b63a0c3a1c394d89a26a086a12b940d9b08a052a1bc92a39ba29f24a17292b39a3c9fdca08791349afd9ea7a0c790ea99b69e86a02d918299c09e66a08590a299c89d419f0890a299c89d419f08900000481cfe1b64900000481cfe1b64900126742c932d3aa6402aee300932c3aaf12a05314532d0aa4d1bc921e41e8b990000000000000000000000000000000000000000000000004880f1838380b0014da003a64fa6199be1a9acb054b127a41fa90db0cfb03fa286a78cadcaae46a0ada6beacd9ad5d9e17a669ac55adda9c86a5c1abb2ac559c21a5dfaa34accc9bbea45faaccab7c9c99a4faa947ab359c52a469a98caa949c0aa4e6a8eea9379c59a3a4a899a9999cf9a258a844a94f9cbba223a8f4a81a9c52a283a79fa8399c8aa250a78ca8229b29a22aa79ca86d9ccfa190a641a8839dc6a1f2a54ca7ff9cd3a0b1a531a7e69bdaa07aa5e2a6c49a04a13ca5a5a65d9ab1a04ea58ba6ce9ab7a022a561a67c9aa3a0f6a433a62c9a84a0dda422a6ff9a6da0c7a403a6c09b6ca0a9a4e6a5c39b68a09ba4e9a5d79b45a069a4bda53c9b0ba024a456a5079b449f05a4ffa4829aff9edaa3e6a4249a739e81a3c3a46999089e04a385a4e698b19d85a253a430985e9d1aa209a44297e19cb5a196a3b896939c3ca1fda22b96329cd5a071a2b295049c70a0e3a13a95919b0ea064a1d394c49aa29f27a13a94479a3f9f0fa10494d599d39ec2a0129390996e9e69a0bc92c999379e3fa082924797879d5ca072900599b69defa0178e0599b69defa0178e000004988f969a91000004988f969a914b25852c802d36a68a29c630b13146aa392aca30fc3163aa561a1621a21e579a0000000000000000000000000000000000000000000000005b826889288868096da0eca56aa66d8e64a963b004b199a25ba86caf60b0eaa0fba63aad71aeeb9e13a677ac88adfc9c87a510aceeac9c9c1aa558ab73ac3b9cc8a4b9aa1cacbb9c71a40faa56ab209d1ca492a9bcaab69c87a30da913aa579c01a3a8a8a2a9009ca2a24ea838a95d9a61a20ba8eaa8109b2da29aa7a8a8a59afba141a775a85d9992a1d8a633a80f99a1a1c8a60aa8bc9938a167a6ada7699969a137a661a7f8995aa1faa54ca7809a18a1a3a5eba66999b9a045a597a6d49993a00ca549a63c9a4aa0c3a426a6829a48a0a7a4fba5419a76a0a9a415a6a79a7aa0b8a41da6709b6ca0c0a4f7a57f9b30a0ada4eea57b9bbb9f78a4cea5539b309f5ba4baa5399b009f24a45aa5a09ac39ebfa306a5ff99809e4ca3cca48699d59dada27ea4f298049d1da212a43998b29c95a18aa3a3977d9c35a106a333965e9ce6a09aa2fa940e9c99a020a2ac94629b52a0d1a10894e79a18a0a8a1a493999ab69f5ca13393ba9a469f05a14592e89a069fa7a00d920b9bca9e6ea05891d89a9d9e30a043911e9a2f9e06a0679039999c9d869f9c9039999c9d869f9c9000000d976a963b9400000d976a963b94ba23562ad82b39a48c28363030313da963293a30723129a9541c4b22cc20cf990000000000000000000000000000000000000000000000002f816f89f08d680b50a04ea5ffa6cd14eaa814b0c3b0ce9f08a841af63b0049e7da62dad71ae4b9cbea554ac5fad849b23a5c6abccacf79ac8a418ab5eac279c78a476aa06ac919b28a4dea93fabf69cbfa35ea98aaa8a9c44a3e0a80faa309ce7a27ea875a9749ca1a229a809a9329c52a2d8a7c9a87c9c08a250a782a8409cd5a1e8a63aa8049ca5a194a6f2a7bf9a77a13ea68da7679a54a1daa518a77a9835a1a4a5c4a61097eaa047a55aa6bb96b3a001a51ca67e9685a0c7a4faa593976ea0baa4e3a506963ea0a5a4c7a533983ba08aa4a3a5469907a072a488a52c9a15a089a4afa5779a35a0a1a4e7a5a99a4da0b5a40ea6bb9a12a098a4f0a59f9a389f67a499a5759ab49e08a421a5b699239e4ea3bea45499be9df8a28da44699ab9da5a257a4ec98329d4aa20ea49098e69cc7a179a3e797969c74a10fa36297529c33a1a2a28c96fb9bd3a040a2ae955b9b70a0cfa1eb94d29a14a051a18494479a349fa3a07793409ab29e1fa002939899249ef09f0b922899e99dac9f5e912699c09d6e9f4991a6985e9d669f1490aa99c59d7a9f918faa99c59d7a9f918f28208c25cc26a7a028208c25cc26a7a0981c6127db27c2a0e0271a2f3c30fea86b29ad30a0317caa20189c1ff01be69843020000000000000000000000000000000000000000000064889986da800405bca03ea5bea6af0dfda86fb031b1bfa310a86daf61b0a3a0efa5e6ac15ae009d11a500acfeacd89a6fa400ab55acb5980ea460aab4ab8398f9a302aa5eabd9999aa395a9c9aa339c36a3faa80eaa6c9cc2a278a874a9329d72a214a8efa8649d17a2bca798a8a69de3a154a771a8dd9db5a1f7a641a8929d8aa1c8a626a8de9c6ba195a608a8469c1fa13ca6ada75e9bd9a0b5a5f6a60f9a6ea01fa543a689992da0d0a4daa5c59713a096a493a5cd94e29f5fa46ca5a994a29f27a421a584946a9f07a4f6a4e2965d9fe2a3e0a49798329f0ca411a5a499a19f5ea48ba5579ba09f9da41ca65e9c969f94a436a66c9c029f5fa4bea5129cbb9e55a493a5ac9b829e38a488a5869b619ed2a334a5659af69d53a3dca47b99779d7ba23ca48698f59cc5a1aea3fa979d9c61a16aa3eb967a9c4ba12fa34b96539c04a1dca28e95329cdba085a25395189ca4a00ca21695a59b41a070a15e94d29acc9ffda05b938a9a3c9fb1a0e592a49ad89e81a09892829a519e39a0ac911f9ad79d739f7b913b99fb9cab9ec291e098eb9cc89e5f90e098eb9cc89e5f90ad1ea225f426f7a0ad1ea225f426f7a00424782c0c2d79a6ea2892309a3195ab7129ae30d93120aba517b220da1b0c940000000000000000000000000000000000000000000000000c82e082ad816900e69ffca4dca53f97c0a86fb039b18fa204a89eaf92b0919fa4a5d0ac0aaeb69cf3a407acffac399a39a4c5aa3aac33952ca38ca9ebaa2c951ca36ba99daa3498b6a3baa927abc69d29a3f6a82baae49e8fa267a869a9ce9ee6a1d2a7e5a8279e79a15ca78aa8b19d7ea1dda642a8669d78a188a615a8b19c64a147a6baa7829c2ba1f0a558a7b79be6a0b1a5f1a6bc9987a031a599a6809633a0c9a416a6e592fc9f69a493a508108f9f11a416a59312369f90a3ada48e14ca9e04a356a47312a29eafa23ca42709969ed1a255a4b38faf9e3aa396a4fd964a9f18a442a5ec9901a0c6a42ba60f9c34a019a585a6ec9c15a0e5a42da60d9d129f5ba48ea56f9c489ecea3f7a4ab9bf89d24a3a3a4799aa29dcea263a4ad99679d75a22ba4bb98159d0fa2d3a3c997b69cada16ea3d3966b9c53a101a38595229cefa091a2b594869b6da0e2a13894ef9af49f1fa195937f9a469faaa065924f9ad69e6ba01492439a939e37a0e891409a4a9e1fa0b6910f9a0b9efa9f0591d999fa9dc09ff6903299839da09f4f8fe098549d2a9f7991e098549d2a9f79911920ea250b2700a11920ea250b2700a19026842e682f52a71b296530953139aa5129cd30cf31d4aa8f15a620eb197498000000000000000000000000000000000000000000000000ed80848134804d800a9e68a3a3a4949bbca867b021b168a2d8a76daf60b0de9beba475ac9aadbe9532a405ab63ac608e6fa3e8a95eab7694fda003a957aac68ddf9942a1a5a1861a27a04da733a80199b9a00ba759a8fa9cf19fb4a523a7189df59fa5a5bba6469de39f6da569a6119d9a9f05a528a6519cbf9ff7a413a6af9a8c9fb0a4bfa5fa98739f7ea475a5f095b79f85a474a5d18f01a08aa495a5930fb29f5aa445a55014309f7fa3c8a474159a9e8aa214a489155d9e13a2a1a3ae153a9ee3a11aa3f9154e9edda150a3e614769e23a29da3dc09989edaa272a44f93259f58a4a1a5609b659fc0a403a6059e949fc9a423a6dd9dfb9e7ea4e2a5af9c939e41a48ea52e9c6b9e16a44ca5679b8a9e9ca3e5a46b9a249eeaa275a47899a39d31a201a49798f29c8aa172a344973c9c12a10fa3bd95cd9bbca0a4a2f594789b84a046a24e94a49b68a0dda13394739b42a07ea110941c9bf79f22a1ac938d9a789fd8a09192c299e59eb1a03192c798409e96a03792e198aa9dfa9f5191ac985b9d169f91911898fb9cc59e53902298979cff9d648f2298979cff9d648f00002593e5918c0100002593e5918c015624ad2bc32c52a4ab261c2ea12f61a8ca27022f7b3049aae714991fc020d6a2801b6421c822eda2361cad23de2444a07a1038986719549ee69ca2a5d5a51918dea0f3a81eaae31612a9b8b0dcb19da168a5dbacecadd39c90a3d1aa3cac519c76a26ba9a8aa659bc8a1a1a8c5a9bc9a03a11ea809a9f69aad9fb7a5ffa61998b79c6ea22ca4b598f69de2a3d2a487998b9fdea4c3a5cb9ae79ff4a411a6c89abf9fd2a4eba5cd99c59fd3a4faa59c998c9fc7a4fda58e99e09fc8a4c5a5d298209fa6a4c6a5e196ca9e83a487a58e95b09e61a468a5fc919c9e22a403a59988c49eeda3c6a41c0f179ea0a211a43d15069ecca128a3fd189f9edba0dea1181b7f9c0b9f1da04c1cba9c989f95a04f1cf79d9aa15ea3451152a09da40ba6c69c00a101a6c3a7c49f5aa09ca51aa7019f7c9e48a486a53a9d589e80a3bfa46c9cf79dcba254a4389b2c9d14a21da4c799899cb6a111a4de988c9c60a1aca31298679cf8a093a29796319c7ba0b1a12c950e9c45a08ba18594a59b18a06ea155946e9bd59f69a125946c9b769f29a15693569b069f94a0e8926e9a679e22a0cf919e990a9ed69f8b915399b39d7b9f4a910e99909d1e9fb9902c99809de69eac901e99589de89e10909998e99c7c9e43909998e99c7c9e43900000588c518c84920000588c518c8492aa219928f12995a27e24242c292d24a6c724322c452dbfa6d622e729c52b82a6b41dd425422745a5768dc39b889634a4a79ef8a570a7c3a65a9eb1a634a86ba5f7a15baaa6ab94a3c9a210ab96acc79f79a2aaa952ab119eb2a100a93faaba9ccca060a85ea9339ca0a0e3a7eda85c9c42a01ea75ea8be9b1ba024a68aa7af9a4f9f21a562a6579aba9eaca4b8a5119a9e9e82a497a5799abb9e73a463a5489aa69e37a42aa56399919e09a4f3a4cc99119fe0a3daa41e99549ea4a3b8a4f6986a9e9ca3a7a459986a9e53a38ba46297909e3fa35fa43c96cc9e0ea333a44e95c59ed3a2f3a339957c9e94a2d0a3be90749ec7a20ba4c20d839ed5a117a34418cd9a309c949cd01c5598a31423184920be9ced9edea0491cdfa1d0a646a8aaa1a3a0efa657a8b8a115a007a552a6c69fce9fd2a3fca4d99c9b9d6ea214a4199aed9ceea17aa3be98cf9c69a105a309986b9c05a19aa2f496309caea03aa21196d69b6da0faa14795419b2ca0bea18f94ed9afa9f77a10394b79a8a9f3ea1ec925d9a109feaa07c92419aae9e9fa022920c9a549e4fa0e091ea990e9e28a01691b499c49de49fe5904099899db79f41900599539d659f2390d2982f9d1b9f81901798d69c009fbf8d0d98649ce09d278f0d98649ce09d278f0000578cd9890d880000578cd9890d88ff219c28c729c4a04f23c52a152c62a4a622f2299a2bd3a4762011286d29e1a4ef1bec2261249aa122a0b6a723a90d9d279c20a537a6fd996c0f6115b116b99eb1985ea1d4a2a7a22ca03ca82da9c7a14fa06da878a922a067a0cea7e2a8779e57a002a758a84e9d19a0cca61ea87e9c20a0c3a62aa82e9cc69f15a684a7849bef9e4da5a9a6dd99519ebba4e3a58b98479e5ca47ba542971f9e28a440a50897459e1ba40ea5d5964d9e12a4f2a4ab966a9efaa3efa48896429edfa3d3a45896279ebfa3cba41997589e92a3aea4ef966e9e6ca395a479977f9e31a370a424974b9ed5a241a49597a59ea9a227a44997719e5ca227a4dc961f9e1fa201a44a95e69d01a1e1a2d394509c77a2a7a2aa8f78955d1faf1f5b91aaa473aa3dac75a4dc9d8da406a6d59cd39ecba110a43398e99c51a131a3b796039d01a1a1a24096a39ce5a07ca22695bc9cc4a067a20495869caea036a2dc94859c89a0e8a1b7940b9c46a0aca103949e9b04a058a18a930d9b7e9ff2a00893e49a0b9f9ba09d925f9a9f9e5ea03792169a6a9e3da07291cb99409e16a04f919b99139ef29f9d906899df9dca9fe08f1099a09d789f8a8ff8985a9d179f498ef298109dc39ec88f9c98af9c549e6b8efb98749cbb9d958cfb98749cbb9d958c00008788ce821e8400008788ce821e847420c527e72885a0e920782881290ea27920fc271229d8a2c31df4241d2645a2970d860e1a1048a0199cafa3cda4209fb89ac0a20ca4389f80971ea033a11ea0909871a18ea29ca0f59bf8a3eba40da0339dfda4e6a57d9e0b9e71a576a6bb9d3e9e77a584a6a49c6a9e7fa5d8a6b99c6b9e64a5c3a6639c3d9e1fa53ca65b9bfb9db3a4daa5c09a7f9d4ea44ca5b199319d03a4fca44e99269d9ba3b5a406992f9d39a36ba4c6984a9deaa24fa49298699dbca211a4d5976e9d85a2f9a33c98769d83a2d7a31798679d6ca2dea31a975b9d6aa2e6a3cd97449d48a2d9a38497359d31a2aaa34c97449df8a176a30897499df8a15ea31a96479dd7a146a3e195a69d14a298a38e96759ddaa11ba3f9956098859d439f4f9245858b941d96328c7296379aaa9b46918b9bec9e48a01f94529bd09f12a15994b79b26a05aa1be94829b09a045a18e946a9b05a027a16e94629be29f1fa1d693829bc19f0aa1a093d09bc89f04a178939c9ba39ffba03f93779b699ff8a00993139b419feda0ce92ad9a109fc8a0a092399ab29e8fa04992a599379e41a0e6913099b69de69fe990e198409d619f8f909098069de69e69906398e79ca19eb58f6c98e19c5c9ebc902f98b79c579e25900d98c49cf79daa8d0d98c49cf79daa8d0000eb151c17b28d0000eb151c17b28d3d1fd0254a270e9ec71e2326d027899f851ddc242d26b89f2a1b0422e423569fa614ae1a361cfc9e8f940d9da99d3e9e25970ca0c1a0dd9dcf976ba042a14f9eb6983da151a2499e059a69a2d5a34d9efc9af8a24ca4dc9d199c8ca3aaa4299d869cf3a3eaa4929ccd9c0da421a5029cf79c19a419a54a9afb9c08a406a55399cb9cbfa3d6a46d98c29c68a392a42798b89c09a360a4e397bb9cd7a230a44498f59cc0a222a42398059d9ea210a4f797299da4a208a4b7974f9d8ea2fba37e97349d53a2e0a30a98fe9c30a2b3a3f496dc9cf0a183a37697b39cdea17ea34197b39cc6a168a30597c99cd4a15ba3de96ec9cc0a157a3f995de9cb6a145a3c295c89c82a109a37795f79ca0a13ca34695249d8ca1f9a21d957a99a19e53a0f7914f95359ba89caa8fc296729c049e8891169a409e53a07393349cc59ea7a0bd93589c189fc4a0ca93109c239fd1a03d94779b2c9fc8a027941b9b3c9fcba05e93ce9afd9eb0a00893989aa59e84a09c92a59a5b9e49a0a691919a129e24a06591509adf9dfd9f3891fa99b39dc49f019197998a9d849f5b902f99319d159f2190b298e59c969ec98f7198af9c3a9e738f2e98789cec9d468e3d986c9cc49ddb8ffe97409cc49dc38ea497f79b389df58ca497f79b389df58c00000000000000000000eb151c17b28d3d1fd0254a270e9ec71e2326d027899f851ddc242d26b89f2a1b0422e423569fa614ae1a361cfc9e8f940d9da99d3e9e25970ca0c1a0dd9dcf976ba042a14f9eb6983da151a2499e059a69a2d5a34d9efc9af8a24ca4dc9d199c8ca3aaa4299d869cf3a3eaa4929ccd9c0da421a5029cf79c19a419a54a9afb9c08a406a55399cb9cbfa3d6a46d98c29c68a392a42798b89c09a360a4e397bb9cd7a230a44498f59cc0a222a42398059d9ea210a4f797299da4a208a4b7974f9d8ea2fba37e97349d53a2e0a30a98fe9c30a2b3a3f496dc9cf0a183a37697b39cdea17ea34197b39cc6a168a30597c99cd4a15ba3de96ec9cc0a157a3f995de9cb6a145a3c295c89c82a109a37795f79ca0a13ca34695249d8ca1f9a21d957a99a19e53a0f7914f95359ba89caa8fc296729c049e8891169a409e53a07393349cc59ea7a0bd93589c189fc4a0ca93109c239fd1a03d94779b2c9fc8a027941b9b3c9fcba05e93ce9afd9eb0a00893989aa59e84a09c92a59a5b9e49a0a691919a129e24a06591509adf9dfd9f3891fa99b39dc49f019197998a9d849f5b902f99319d159f2190b298e59c969ec98f7198af9c3a9e738f2e98789cec9d468e3d986c9cc49ddb8ffe97409cc49dc38ea497f79b389df58c000000000000000000000000000000004c177b22e1223a9eed289b2c8b2d92a86429fb2d282fd9a9a72a7130693011ae8c9c882748a0a6ad6f9dff99a8a0bea572060419020b63a42d99339a959c17a2a89d0aa0d9a021a491a7c8ab4faceeaaabab99af55b0f9ab97a9a3ad77ae32a8faa700acbeaca0a5dea28fa817aaefa4fd1e42a32fa69ca8dc2251a421a8f3a7ba25fb176c9e7ca63328e423e41c10a89d286522519e2baa869ee3a642a80fa205a389a8d8a9c219eca1f5a643a8978c0da20aa75ca87b99a7a0aaa5d9a66c95eaa0a6a4f9a5238fb29d26a259a388112810ce9765992e1c4b24be226a206fa464242b23ea1fd3a83c21c41b189f9babef9d21a423a579a9b69ea3a44ba572a2c89dfba447a6cf9c239c09a380a43298b39c4ea17fa2d495009cc8a00ca22d95009ca8a0fba19a951d9c95a0e7a1e995149c7ea0d1a1cc95659b44a082a18195309b2aa060a1bb95659acf9f15a14d95419a709fcda00d95fa99089f8fa011959e99ca9e6da0d5947599879e4ca0a5942999579e2ea07594f298319e1aa04d94ba98009e03a02b948f98e79dd09f8b937498d09d9e9f57935e98ac9d509f159351985b9ddd9e31927398fe9c5d9ec591f798a69cf99d5f915098b99c129e06911a98ba9cea9d77910b97829cec9d2791b298b29ce09d5e9100000000000000004c177b22e1223a9e4c177b22e1223a9eed289b2c8b2d92a86429fb2d282fd9a9a72a7130693011ae8c9c882748a0a6ad6f9dff99a8a0bea572060419020b63a42d99339a959c17a2a89d0aa0d9a021a491a7c8ab4faceeaaabab99af55b0f9ab97a9a3ad77ae32a8faa700acbeaca0a5dea28fa817aaefa4fd1e42a32fa69ca8dc2251a421a8f3a7ba25fb176c9e7ca63328e423e41c10a89d286522519e2baa869ee3a642a80fa205a389a8d8a9c219eca1f5a643a8978c0da20aa75ca87b99a7a0aaa5d9a66c95eaa0a6a4f9a5238fb29d26a259a388112810ce9765992e1c4b24be226a206fa464242b23ea1fd3a83c21c41b189f9babef9d21a423a579a9b69ea3a44ba572a2c89dfba447a6cf9c239c09a380a43298b39c4ea17fa2d495009cc8a00ca22d95009ca8a0fba19a951d9c95a0e7a1e995149c7ea0d1a1cc95659b44a082a18195309b2aa060a1bb95659acf9f15a14d95419a709fcda00d95fa99089f8fa011959e99ca9e6da0d5947599879e4ca0a5942999579e2ea07594f298319e1aa04d94ba98009e03a02b948f98e79dd09f8b937498d09d9e9f57935e98ac9d509f159351985b9ddd9e31927398fe9c5d9ec591f798a69cf99d5f915098b99c129e06911a98ba9cea9d77910b97829cec9d2791b298b29ce09d5e91b298b29ce09d5e91000019197c1bdb9a000019197c1bdb9ab42b6a2f7d3019abcb2ce430a9313cae7f2f6533313488b10c2aa42ddd2e13afc299e89bf89b4622059b1d9c8f9c5820dd19af1a0f1dbe1f81a02fa2c2a2ac2459ab27ae49af21afe2ae98b2b4b345b05dac22b0dab065aa1aaa6ead51aefda6aaa60baaecaadea4f19f67a7cfa823a6921f69a6dea887a8792687191e9fa4a9712872264524cda936284421e79bb5a93b25eca47fa8fea6c7a46eaa81abd890e6a486aa03acaf20e4a261a84fa9352182a11ba624a7591f759d01a270a37a2012874797fc9b5f22a127492637259ba58b2663253d247da85e246421f61d49a900205a12999ddca93aa01da50ea60aa957a2eba518a705a46da08ba586a66f9c12a065a570a62597069f7ba47ea57196579e81a3a8a43096659d7ca212a4af964c9d08a294a34f97ad9c81a11fa335972f9c14a193a20e97019ca9a01da27a96439b89a0d2a13996019b62a0bba1f295f89a37a082a1b795ab9a12a052a176957e9af89f2da14795529a9a9ff5a00995259a5f9fcca0d594049a199fa3a0a794c399f59e8aa0829464997e9e49a0d693cc980a9e0ba04a935f98a99d759f529205985b9dfe9e8892cd97179da79e48925797d49c459ea5914497c89ce09d98915c96579cba9db9902d97439c899db2902d97439c899db290a4001f19ef1a3c9da4001f19ef1a3c9db82c4a305a312aace62d9b316132d1ae3d30bd336734f2b1532b5b2e622f6faf7609249a149d8d8a5f160b170418751e620f0710af10f31e860bd10c32145e2046ab69ad7bae69ad37b019b314b46eb004ad93b03cb14aab3fab7aae70af2ca841a9aeac47addda54fa68faa07aca7a6859c2aa8aea98da7ca24029e0ca5d3a814283920329d47a95628b11eb8a060a933288793d8a44ba97726bba022a79fa86ba43ca958aaa79cd9a01ca6aea78621259ef7a3c8a4442182980aa033a1222111127e996c9b1e21991c651b9f16f7171e25d721ba1cb9a85b24421df191aaaa1520239d60a2b2aa509e20a56ea60ea902a2cba5a6a61ba1ada130a6b7a7de9ad4a05ca5b8a68698d2a0fca438a68a9883a0ada4c2a588997b9f06a420a5b598599e76a3ada45098bc9ddaa274a4eb97349d4da21ca4c697fe9ce8a193a34a97869c5ea19da20997339cd4a016a25496e19b9ba0cda109966e9b5ea093a1b895e19a37a06fa1d7956c9a05a037a192951d9a999ff5a04395d499349fcca0fe949899ec9e96a07c948e99a69e5ba04f9458994f9e16a016940899dd9db69f1293ec98929d699f3992ca985c9d2c9f0e926f98459df59e7a914c983c9d939eea91e396dd9c689e2e906697759cbd9d2c8f6697759cbd9d2c8fd8820a08f8146b9cd8820a08f8146b9cd02c6830893153acef2dc5318532a0aec42f8b332a349db11c2c7b30a8308caeb321e823902317219819991ccb1c571da714c7110c16809e869e9da011a1509f98aa01ad1aae53ae70af7db268b34eb009adb2b06bb106ac8dabebae04b010a96fa917ade8ade8a65ea82facd1ac2ba6d3a425aa93ab68a621188ea6d5a8aea7622627998ba4d4a8af289c1c83a2a5a9e7288b1c3ca2cba92729fd1dc9a2e1a927291e1f79a0d5a90f2951227798daa90a292a24291b3faab6282524e51c65aa1128ab23ea1cd9aa2b2745224718eaaa80251220be91f0aa2b2474187d9e24ab3a200d9df8a17cabeb9c5aa57ba649a97ea2f9a606a8d3a045a2fca524a7d89a29a172a59aa6c898e7a041a575a67e98e1a010a501a6a998ba9f77a4d6a57098be9ed1a3dda434985d9e2ca376a42698b19db1a22ca42198609d24a2a6a30698039d94a1fba25097839c54a1b3a2e7962b9c16a168a20d97fb9be2a02ea2b196a19bc3a00fa2de96619b81a0d5a17f96129b4ba0a8a13196d39a1ba067a1dd95979a999f2ca12695919a469f05a19d94609af79ecba011941b9a869e87a0219354991b9efd9fad929c98ac9d329f459247987a9d0a9fa1915f987d9dc89e2092d496e79c6e9eab913d98809cac9d3e8f3d98809cac9d3e8f000027987a979d96000027987a979d967d2c49302d3187ac682d7a3150328caef32e0933f9335ab1cf2cf6304e3125aed82024239622071f701b401e9d1e30209213b2165717b21dfe9adc9c389cd5199caac7ada1aef5adecae29b218b35ab0aeac62b02cb134ac33abdeaeedafbaa88fa96dad35aefca68aa867ac0aadfca508a764ab5face1a508a4b3a9fdaa42a6ea20e1a475a8c4a73128b392c1a421a99a29c820d5a0faa9ac298f21e3a085aab1295d219c9fb4aa9829c922059ce3aa54299822a09815abdb284223fd1129ab6e283a23eb1183abd7277c226d18baab1926ec20ce91dbabb924891b059d19accd2157987ca034ac0e9c10a4e7a54ea9dfa1a1a5bea61ea1afa2cba5eba6709c90a17fa5d4a6189b5aa175a5c7a6539b06a13aa55aa6419a1aa08ea4afa56599449fd7a323a59598939e55a3eba494982b9e22a3b0a46798909d91a241a44e98419df3a160a31f98f09c7aa1fba29697a49c42a1d6a234976f9c00a18ea2da96349cd3a061a28b96cf9b94a01fa22396429b5aa0d9a1d695f79a3ca08ba14295659a02a063a1fa94d2997f9f28a154944999ed9ec2a00094d9980a9e01a075926c985a9dcc9ed9912898349d9e9e4b913d98579dd49e7e917b987f9ddf9e24923998569d219f7b91d898809d759f9f90d898809d759f9f90000095973398b996000095973398b996302c1730fd3055acd42c1631ec3104ae302e5b327833dcb09e2b282f8130b4adae212323f72303950a0f860f5d12e516f795db982b99281378a1baa37fa4cf98bbabc4ae03b098ac35aecbb1cdb212af22ac2fb0efb0a2ab62aa99aebdafaea853a970ad7aae4aa69ea8c7ac94ad64a506a826acdeaceea47ca636ab3bac19a508a26ca9feaacca57a2346a416a830a824291b1f71a1d2a93c2ad9233c9cb7aa652a4f24989249ab3c2aa0247312bdab022a8e24b81803ac8e29ed24bc1b30ac4529f224691d4dac972889245d1d63ac6227e5210c1292ac52258a1dd19eb3ac9923a89851a2cdac199ce5a42ea6e3a948a284a69aa7aea17da10ea64ca76d9e89a1aea533a7d09b4ba195a5f1a6629ae2a052a56aa6739a60a0dea415a6d599ce9f69a4a1a52999d39ef8a32da5fa98e59d47a3a1a47198e89dcca259a41a98f89da4a243a4d697aa9d3da201a449971b9dd4a15fa3bb96aa9c5ea1eea2a8963c9c0da185a24396019cd1a037a263968c9baaa002a21f96249b6fa0b2a1d095d19a30a069a17f95599ae99f29a13195369a829fdaa09c94c0991e9f96a011943d99969e39a08793db98279eef9f9592ba98eb9dcc9fe391b698d89d6e9f529200985a9d709f52914c980f9db39ec0904c980f9db39ec0900000f7947c9416920000f7947c941692d52b1630f43080ab192ca03068317aaddb2c34310c320db0522a0830c92f70aef61cf424bf1faca34912dc1de017369e1693f788c595309c879e31a19da1849fd4a932ad2eaec1abb6aca9b044b138ad66abd3afa0b041ab09aa4bae86af9ba800a94dad56ae98a669a8c2ac8fadb2a584a715accfac7aa4aba64cab51ac14a4f6a591aafdab35a44aa0c6a88faa3da5ff244ba227a764a82e2abe22b79da5aa1e2ba5251719d8ab002b0226d61d32acba2aeb254e1f57aca82a4e26632086ac312a51265920bcac57298625161ff6ac7428cc23e21b2fadbe268920e89b69adae24451219a03dadae9bbfa49ea589a915a253a666a7b5a000a227a652a79b9c54a19aa5dfa6229bd4a04ca583a6329b97a0ffa417a69f9a28a09ba4bda57a9af09f75a49ca51e9aa09f2ea437a50e9a079fb3a3c8a48599599e3ca395a41199c79ddca25ca4c1987d9d88a239a4b7985a9d26a2e6a36398179d9ca12fa37197aa9c2da1b9a25b96509cd8a04ea27a95ea9b8ca001a22495399b67a0d6a1ed94c79a39a08fa1b9943d9a06a05ba1d694eb99a29fe9a096948999f69e76a03b9438999f9e44a09193db98319e01a0a0928d98e79db89fdf919298b19d7b9f3a91d1973c9d5f9ff890cd98159ddf9e2a91cd98159ddf9e2a9100002395c394ed9300002395c394ed93c32a662f8d30c0ab942b783053314fadd32c92316c3230b0c52a6f308b300baf9e1c7c247c1ff39f7714431cc517f314178a2b137f8860992c9a459c329c30a432a8d6abacacb1adafacc8b086b1c0aeceaa9daf86b06fab53a9e0ad1eaf4da88ba81aad1eae3fa601a88aac6bad6ea567a721acd1aca8a4cea66dab67ac43a41ba6cbaa19accda34ba56baab6ab0ca410a0a4a820aa92a50f27bf9df7a4dea80f2bc625161cddabef2b1828492290acfb2b1d280b23cdac802bd7270b2308ad0b2b70272f2242ad5f2a02274e2178ad7429be255f1fccad55280e24e51808aecc25d21b1f9da0ad21a05da5d3a68ba8b3a114a642a7c49e68a126a67fa7849c2ba187a5caa6e99beaa060a596a6069cc4a03ca587a6099c3aa0e6a429a65d9bbc9f9fa4d6a5c99a689f69a49da5bb9a339f2ea453a54e9aaf9eaaa3e0a4a699149e0aa375a48199b29da8a238a42699669d46a204a4cc980f9df3a1a0a38198009dd0a16da34f98d99c93a11ea31698749c5da1caa2c797349cfea050a2d496809b8fa0efa13d960e9b22a06ba151953e9a669fe7a072942a99bb9e85a09c9307996e9e36a0ce92f5980c9ecd9ff391b698c59d529f3d917898a29dd69eae900b980d9d7e9e138e85983b9df59e709185983b9df59e7091000035907e925491000035907e9254916c2a772f8e3020ab472b8e30633185ad9c2c813198324db01d29682e232febad3919f421fb1a32a0ba0ecb1af810999855032e12ef07db949999ab9d519d1ea252a874ac27ad2fad7aacefb0d5b1abaeabaaceafa5b061ab3ba91eae5eafa6a84ba82fad25ae5fa6baa78bac61ad2ba51ea727aceaac87a44ba673ab7cacc4a399a5cdaa12aca1a247a54faa96abbaa1baa4f3a912ab97a1b1a07ca8e8a96ea45d26fc9b11a4c7a8932b36270e2156ac3d2c93287c2428ad382cb528e524a3adf42b7a286624d7ad162b122801241cae2d2aea26872169ae3c292d25901fb2ae0425da11919f71add5a136a6d1a7eea652a100a683a7ef9c8ca1faa52aa7039c28a1c7a5fea6149c2da1a3a5e8a62a9ceca04ba56ea6b89b5ca0f4a41ba60d9b819f96a4d9a5e59a3e9f4da483a5509a2d9f1ea42da5369ac59ea9a3d1a4a599629e27a38ea437991d9edba276a4f298df9dc2a267a4c698939d8fa24ea495981b9d37a218a44b98949ca8a164a3d097539c3da1d1a22b97369cf8a07aa2cc96389cd2a046a28796309c8fa0f8a1cd95c49b1da06ea13b95749a3f9fafa05094e1990e9f86a0d093c099f69e8aa024934099db9e7da08a925e99eb9e97a00592b8982c9e2aa07d90e098e99c289e6a90e098e99c289e6a900000b3978b98eb960000b3978b98eb96392a332f5a30a3abc82a7f30493121ad402c6d3158320eb01428962e3a2ef3adfd196121211d499d4614931a2a18170d708bbb86cc8dbb066d9d04a14da1bba0f4a7c0ac34ade5ac0eacc9b0b6b13cae1faaa2af86b01babbea8f0ad3baf43a823a826ad3aaee8a5aea78fac6ead06a5bfa619ace0ac11a4fba55bab5dac6aa36ba5c3aa09acd2a21ea54baabcab74a2eaa4cfa934ab72a24aa446a959aaf3a1fba03ba877a9fea33024baa05ea52ba8772a3526182009ac2e2cbc281124acad682cf628a92485ae272cc628af24ceae932bd627c1224daf4e290d25191c31af5f20fda064a4feab90a20ea6cda786a304a1f4a5dfa73c9d9ea1f7a53ba7d69c0fa181a500a7a59c01a141a5a8a6509c99a012a551a6019c41a0e7a416a68f9b25a0d2a414a63f9b18a0b5a4dea55b9b719f55a482a59c9afe9e04a429a5fd99d29eb8a3eea49299a79e47a3c7a4d398659eeba280a4c898099e79a23ea42898639d12a2f8a3cd97ec9cb2a186a3b5977b9c5ea111a34497339c16a1b0a2e396e19be3a04da28c966c9b9ca0f3a12e96b49a4aa088a166950c9acc9f1fa1a4948a99389fc0a04b942399af9e85a00494ec98619e51a03693dc983d9e0ea021934e98d59de69f3b93e298d69deb9fd293e298d69deb9fd2930000580eb60e648c0000580eb60e648c0529692e2e30ebaac4290d300f3139ad3d2b18310f329eafb128ee2eb32fe3add81d5e231e21439f4913ea1b7e18ac07098df4860a93f406e59dd0a0afa1aa8c6fa71eacf0acd1ac86aba9b08cb13fae98a981af75b04daa5fa8c9ad07af9aa7a3a703ad1eae6fa50ea779ac70ada6a484a60dacd1ac05a403a662ab7aac72a36ea5aeaa00acbca2bea4e6a91cab0ba24da480a990aa46a104a419a92faae3a0d9a3bea8c0a9f0a0e0a14aa84ea9f0a18911faa406a7f3a54727231cbc9e94aa7d2af82694223aad612b0f28c42267ae9a2a3f264d207fae2925a017a9a0b9ac3ca068a5ffa62fa75aa103a692a71f9f94a104a645a78b9c33a1a3a5e1a6429c5ba181a500a7589c37a165a5d8a66d9ccba02da56da6259c54a0eaa41da6219c1ea0ada4d7a5aa9ba09f67a4bba5799bf69e46a4a3a5009ba99e11a444a5e19a609e9ba3dba45c9a2c9e42a3b2a4419af89d04a38ca4fa99c29dcca259a4ac99699d5ba219a43199c69ca6a15ea355982f9ce9a085a22097d29b96a027a23596c69b81a004a20a96789b5ca0e0a17e952b9b56a0baa10f95fe9a27a07ea1d894d49a11a058a1be94969aae9f01a13594049a1a9f73a049935b998c9e0da06793dd981f9ec09f7b92c298149e2aa0f192c298149e2aa0f19200002095d196e99500002095d196e995d4284f2e343076ab462908300331faac792acf30a931a5affb25ec2d462da3ad9119f621f41c3aa02f14cf1cf6182895c7828010200833070c9ce79f4fa0199829a650ab6cac0eacccaa7ab03cb168ad2ba95baf7eb0f3a90ba8aaadf7ae6fa72fa7d6acf1ad41a593a64fac31ad7aa416a6c1abaaac32a392a500ab50ac9aa2fca463aab5ab9ca1b2a4f3a91eab39a16ca4a4a9d9aaf4a012a438a980aa50a0ada3faa8e1a9719fe5a25aa844a9509f67a207a8eaa8fb9f8ba1fba694a819a2289de7a48ba6c0a47b195da2a6a4e7a703190ea27fa427a8e79dc7a411a65da50ea179a5d3a6ce9f58a1a0a5d3a6809c4da1cfa50ea73d9c1da1a4a510a7529cffa08ea5f0a6d19cc1a05aa5a4a6cd9c61a00da54da67a9c22a0f3a430a6379cfc9fd9a40ca6379cb09f90a4aca5a69b089f42a460a50f9bae9e1ba434a5069b779eefa308a5a19a4e9eb3a3d8a4909aeb9d47a395a4129a6f9dcca24fa49c990a9d5ca203a4e198e19c00a295a38e98d29cc6a15ba35698ae9c75a1f8a2c197729c1fa1b1a2dc96369cc6a043a26596799b54a0b4a172954e9aa79f0aa18e94c999369f8fa0fd939a99e69e80a0b8935699cd9e92a0209370998f9e75a06a932b986c9d469ffb901d99519dd99eef901d99519dd99eef900000aa95de9667950000aa95de9667957c28192efc2f35ab08292630123100ad092aa5309d3130afcd257f2d542d14ad041a86213e1d12a1c70e2b1a9113279bb48d2087b1943b98b59df7a1a9a2879d8aa67cac17adacab4eaa5ab027b131adb2a817af5eb024aa6ea77eadc8ae35a7aaa6aeacc2ad13a50fa630ac24ad27a4a1a5c3aba5ac33a323a5e3aa37ac7ea2c9a437aa82ab76a16ca4b7a9f5aa05a144a45ca969aab5a0b5a3d4a8e8a94fa006a37aa870a9669fb1a241a82ca9079f98a223a808a92f9e7ba2dda7d8a8c99d5ca276a7c1a8d09ed0a250a797a85f9fc2a190a61aa84b9e51a17aa60ea8449d5da123a69da7d59c4ea1a5a5fca6619c0ca160a5b8a66f9cd0a042a5a4a6859ca4a019a57ca69d9c9fa015a554a6789c82a0f4a449a6939c4fa0e0a428a6529c28a0bfa400a60b9c05a0b5a4eaa5fb9bb49f7da4c2a56f9b6f9f4da470a5f59a179f1fa41da5d19ad09ed5a3e2a4549a499e45a393a4c299c89daaa251a43999759d2da209a4c998039db8a17ea363988c9c4fa1fda208981e9ce6a072a2f796609b89a0eea11396e39a51a0a5a16095059b23a07ea1d394449b0da052a166941e9bd89f12a1e293a19a4e9fd4a06a934a9af59e98a09092df99ba9e6ca0599251996b9e4ba01e921a99bc9d6e9f35911a99bc9d6e9f35910000798d698b39920000798d698b3992c427d72dfb2f4daaae28a42fd53085acc9299c309831c5ae8b25402d342dd4acdb16691e571b879d350d5416e9145b95be0ee714cd1520998a97389c599cc4a13ba590ab48ac27aceea939b018b140ad67a802af48b01aaa2ca757adabae04a75ba6acacc4ad11a5d8a531ac26ad18a471a576ab83acd0a2e9a4a0aa0aacbaa18ea431aa9aabf4a057a4bba901aba8a01ba442a95caade9faaa3cba8c5a9a89e1fa393a881a9599ec5a249a82fa9f29d73a2fea7d1a8059d4ba254a77da8169d5ca218a765a8ed9c57a2e6a630a8b69ce0a149a69ca7329db4a102a629a7c29d58a1bea511a7209df3a08ba5c3a66f9cc3a068a5a1a6429ccaa04ea582a6609cbba01aa56ca6739ca0a011a545a6969c96a0f2a431a6a09c8fa0d1a401a6a69c81a0a7a4d5a58f9c7ca08ca4c4a5499c51a055a488a5269cda9f18a428a58f9b529fefa3eba46f9b1b9faba3d1a4079b639e5fa39da4379add9de3a272a4ae99709d72a23fa4f298199dfda1f9a34d98aa9c9ba170a3f997609c22a1dba2e196eb9ba9a03da2b296a09b46a0b8a12396109bcd9f51a1a995659a759f05a11995f999099ff5a092949e99a19eaea007946d995b9e5ea043936b99059e12a0f4923198409ded9f3192b799549dcf9feb8fb799549dcf9feb8f00004195be96689300004195be966893eb27ef2d732ff8a96328d82fbc3062ac4129653057316aaebb249e2cc42ce5acad160d218119d3a09508b616e80e63985f8ca390bc93e2972199d69d4d9edda0a3a4efaadbab0eac33a9d2af9bb0ddacd1a796ae12b000a9a8a62dad5aae89a5e3a563ac58ad01a45ca5e9abcfac54a2eea41fab67ac54a1a0a470aae0abd0a053a4c6a91bab63a004a454a986aa0da03ba3eca8eba97c9fd0a27ea88aa9589e95a23ca827a9fa9d47a2f9a7daa8a19d0ca286a797a8cd9ccfa12aa763a8939ca3a1d9a633a8609c72a184a6f2a7299c3da14aa6b5a7e79b4aa117a671a7879b1ba1bca515a7169bfda080a5d5a61d9cf7a04aa59ea6e99bd0a018a56aa6249c8fa0d4a41da63d9c7ba0cba40fa6609c6ca0c7a429a62a9c6ca0cda41ca66f9c50a0a4a4f3a55c9cf79f8ba4e3a5489c889f72a4b5a5349c2a9f4aa49ba5d39bba9e14a43ca5309b769e99a3f3a48c9a0d9e22a3a8a4419a639d70a24aa49599e29cd8a1bda3c6989d9c75a13fa32f98739c31a1cda20697689ccca077a21b96139c85a00aa252957c9b40a0b4a1a9940b9b0aa07ea16e947b9a8c9f1ea12e94ae9a289fe4a05793dc9ac79e86a00693f99a9d9e45a05f92be9a6b9e12a04092239a019ecd9fe8915c99709d4a9f6b925c99709d4a9f6b920000ef8f2b91e4920000ef8f2b91e4924f25102c582db6a70d27a82e1f30ecaa9428fa2fe130bfad9b24822caf2c67ab2c1b39226020c3a00611b21bb316209bb28a0508dc91c698d198429d5f9e1fa134a404aa64ab54aba7a823af35b063ac56a78eae18b04ea937a615ad51aebea58ca543ac47ad3fa3fea4a3abb5acb6a1a1a4f1aa48acd2a03ea443aaaaab59a0cca39ea9f3aacd9f5fa321a938aacc9f09a3a6a8bda9319fc0a254a853a9b19e76a21ba8f4a85a9e31a2a2a7b7a8019ef2a12fa769a8289dbfa1c2a61ea8da9c89a151a6bba79d9c5da11da664a7649c34a1bca50fa7309c0fa18ba5c8a68e9acda043a56aa6549aa0a003a536a6dd9a7ea0d1a401a6e6994fa0bfa4eba5629a33a0a8a4cfa5ce9a1ea09ba4b6a5bd9bfd9f8ba4bba5379c28a0b2a4f7a5519c53a0b3a405a6579c43a09fa4fba53a9ce89f82a4cfa5189c129f52a474a5799b6b9eefa3f7a4fd9a229e41a3b1a4409ad09d01a381a4249a789d7da240a45b99f49c0fa2d5a3e598c69c9ba147a34d98719c5ba1e7a21198309c14a182a2df96079cbba019a26896919b6fa0afa1a395099b07a044a12095739a0e9fa3a03d94199a9c9e25a003948299169ed69f08933199c89d909fd4925599ab9d6e9fc392a598449d689ff3913c9a909d659f2a913c9a909d659f2a9100001a1a491b409800001a1a491b409898226629672bada4c1230e2b582cafa7ac28463030310faef523992c862c75aca816031d721a34981d1101178915ab0e2c8561855e8d6185cf993e9f05a0e99cc9a43fab71ac94acdaa8e1afd3b00aad3fa7a1ae11b0bea8a4a5cdac02aeb2a4cba4d3abd6acaca15aa4e4aa42ac01a00ba45caab0aba79fbea3f2a945ab089f5da370a998aaf39ee5a2b8a8cea9aa9e90a256a84da9b39e36a20aa8d9a85a9ee3a1ada78fa80a9ec5a12aa758a8bb9d7fa1b9a628a8799d58a16ba6d3a73a9d28a125a672a7a79cd4a0c4a50ea7059c94a047a57fa6b69a49a0eaa4f7a583991aa0a5a4bda5999803a082a475a58f97e49f4fa452a55d97a99f2fa427a53998569f10a4fea45d99759f0ba4fea4799a999f4ea45da50c9cfd9fa5a4e0a51e9d839faea41fa69a9d679f7da4ffa51d9d289f70a4a9a5af9cd89e5da476a5719c8a9e11a442a5e89b639e87a3f6a4139bff9d0ba3a0a42e9a459d47a210a42f99dc9cbba17aa3ae98a79c60a14fa31f98909c4aa113a398976d9cfaa0c2a2bb96629cc6a06ca27596399c92a0f2a1c095c69b34a060a10095cc9ab79fe9a0a494989a2d9fa0a00f94e69adc9e6fa0d793ab9a439e2fa0c7925f9ad79d719f8692f299ec9c909e99922499de9c7c9ec9902499de9c7c9ec9900000d0182c1ba8940000d0182c1ba894b024502ce92d93a80e270f2f47307aace6288230743152af1e247d2caa2ce1ac33164a1c051aaa9c8a07c9145e0dc9941188ad05809008961698709b2d9d17a011a4b6aaf3ab2eacbea80ab0f3b0eeacdba696ae11b044a819a599acd4ad4ea4a5a4b0abe9aca5a0eaa387aa14acc09cdfa26ea9dbaae69b36a393a9e7aa6b9dfda25da9aeaa719f49a283a89da9dd9ef6a108a8e4a8209e8ea152a78ca82a9d70a101a749a8f29c67a199a610a8bc9c5ca141a6c5a7229c4ca102a659a71a9b0da192a5f6a62099b9a04ba582a6de9848a0dea417a600951ea08da497a52990d59f3da445a57a099a9ffca3f4a46109689f9ba3b2a45a89f59e0aa378a4f38fb19ef9a255a49894df9e3aa398a43998299f0ba409a55e9bde9fa7a4f1a5d99c1aa01ea57ba6bd9d41a0f5a44fa6e99d2ea092a4bea57e9d589f23a42ca5ef9c4d9e8aa3b2a42c9cd89dffa276a4309b8a9da2a24da41b9a5e9d3fa20fa42899199ddfa1aaa38d98d69c8ea14ca399977d9c39a1e2a24796279cd3a069a26695939b63a0dea1e994f09aef9f24a12794719a529fb8a0bf93379ae39e6da04993209a8f9e32a00593169a479e04a0c992c699e99dbc9f02928899c89d829fe0910c99689d549f0591d198449d049ff290d198449d049ff290000043186519519a000043186519519a9825a02c292e99a8bf26902e0d30c7abbb286d306f31cdae5c24c72c052dc7ac4019c91ec51d4e9b5f0c8d16eb113592d481b40ed5860795e496759cf69c57a0bca3a1aae1ab09acefa830b018b183aca7a68aae0db00fa88da45dac7eadaca377a395aa12ac38a0efa295a90dab049f15a092a7c6a8bd999093ca9c859dd515cc9da7a495a50e9737a0fda53fa7f69adf9f66a584a6ab9b0fa05ba57aa6789b3da06ea5c0a66b9a39a054a57da6339afd9ff6a408a69098709f92a481a583976a9f6fa44ca5c192999f6ca465a54a89f89f6da47ba5cc0f989f00a4e1a48614179faaa22ba4c815e49e71a2f3a3df15b49e5da2dfa3c114609e61a2e8a33113869e63a20da4ec09f49e05a383a43d95399f22a457a5a29b569fa3a415a6659e129fa8a408a6099f5b9f90a4d6a5039e9d9e4aa48ba5fb9c5f9e2ba465a5619c5f9edea31da5d29b299e36a3b6a4189bc39d8ea252a4cf99439deba1cea3f098b79c71a145a30898349c05a1d8a2f096c79bb1a058a2b395af9b87a028a21195d69b66a0d5a1ec94819b48a091a1cb94289bf89f1ba182946d9a4c9fc6a0a493ef99c09e99a024935199319e60a0b1921999b59dc69f6192a5984b9ddd9efb910b98e49cb09e349130987e9cd69d528f30987e9cd69d528f0000d88f878c148d0000d88f878c148d6c23802a202ce6a5a6248e2cc32d6ca91027732e17307facfe209f28df294fa9ba1c412463246ba1951bf7226324bd9ffd0f4717981818a4249e01a77ea8daa4a8a243ab64ac9aa683a73baf7db0e7a80da5b6acb4adf2a49ba3fbaa69acd2a114a24da9a9aa70a090a185a8aca9589f07a110a8eda8e39d0ca05fa6e8a7ec9b0e9e5fa49ea5a99b6d9e4ba43aa54a9b3c9faaa4aea5779bb69fd8a4c6a5779bc19fd2a4d8a59a9a949faca4c5a5499a699fa4a4b2a57d99559f9ea495a55e990f9f90a494a50e98e19e73a48ea5d096ba9e65a46ca55b94ab9e08a4fea4ea88299ed2a234a48515d09dd8a12aa3ad18669d7da06fa19d1a449dc09f89a0ec1b879c649f3ca0321c7a9d39a171a23916309f28a44aa5a89c8ca1dfa591a78fa015a183a562a747a0a39f9fa40ea63d9eff9daaa3dca4cf9c1f9e38a383a4419caa9d76a22fa4159b119de9a100a4249a909c98a1e4a34199599c2ba160a35c98439cdea048a24a97059c76a0aca14d96b89b31a075a190955b9bfe9f54a1f5941c9bac9f43a1c294f99a509ffda03994b69ad59e6ba0e4931a9a429e05a0c4927699f89daf9f86923499bc9d619f5692fd989c9d2f9fc5910599789dc49eaf91d098319dcb9e65917198cd9c579e9c907198cd9c579e9c900000048c528a108d0000048c528a108d641e2826f227e7a19423f02a1e2c2aa8c723352b7f2c87a9f4218229552b48aa6a1fd526ed2703aa5d15211d711e42a9c39b37a437a500aa04a086a7a7a8a0aaf9a1adaae6aba1a9eca230abb8acb1a6e9a13aa9d0aafda34ca1b8a8faa9b0a2caa04ba85ca95ba19ea0f0a7c8a8b3a041a0f3a62ea8c89ffe9ff0a549a7459e099f1aa556a6919dc99eb3a4cba5ba9d979e67a466a5249d839e40a428a5e19c7b9e07a408a5229c609e01a4e5a4f79a859ee0a3c8a4da9a5a9e93a39da4969a9e9e82a3a4a4e899b99e6aa396a43c99cc9e3fa371a4a198c89e0ba341a41998969ec5a224a43c967b9ed6a22aa4e692e39d34a294a32913c19b7d9e4e9ffb1cb1982c0bba150c213a9cd49c4a9e062078a0a2a561a7bca040a15fa79ba8c4a3a49f60a5dba610a1759f1ba469a5de9e239e9ca21da4fa9b7e9d16a29ba30d9ae29c89a11fa3ef98ad9c37a1c4a25c98729cd6a05ba20c98269c8ea013a2b996ad9b56a0dea1f195539b18a09aa13e95069bf49f69a1b194d09a8c9f23a12094879afb9ecda0a193409aa99e85a047932f9a5a9e3ea00593fc99049e10a02f92b299c49dd09fee9137997d9d8d9f3491db98389d559f03919f98ff9c059fda90d297a89cde9e86907897169cb89db78f7897169cb89db78f0000498aa48ccc8b0000498aa48ccc8b791d7225d32651a1d121d129092b90a6d0215e29c42ae0a7a4200b2823298ea8cc1c4e24b8253ba85d99afa02fa168a66aa039a8fca888a3719858a26da36a9ffc8f0e9b7c9cefa20e9d5ca530a65ca5a09fbaa7aca8b2a4649f36a77aa8e1a2f09fb6a615a833a1be9f64a6f1a7a4a0d29f33a6bea7b69f349fb2a5ffa6b39eb39e03a523a6ff9d3a9e89a48aa56c9d1b9e4ba440a5c39c019e13a4fca43f9c269edda3e3a4199c4b9ea2a3c3a4f39b549e9ea398a44e9b509e8da398a4209b389e6fa384a4e59a579e7aa38da4429a879e75a386a49b99359e1ba370a443998b9ecda263a4f798609edba26da4ee98829e40a212a42398129ef0a109a38997c69b31a268a30398c092cf1ce81d6996faa35ba964abfda3a4a070a6e1a7a59fcb9eafa1e6a38599899d9da17aa3a6986a9c18a197a2de970c9dfba0a4a23997b79ceca075a29996ca9cd6a04ba2f895839ca9a00ea2b1956b9c83a0dfa18295f49b38a099a1c4947a9bfb9f53a17594e49a689feca02394b69af89e96a0ca93509a999e5ba05f93139a659e2ba02593d299409e14a06d929099129ee79fb2915a99e39db49f87910d99a09d589f4691dd984b9dec9e8b90c298e59c779e26916698729c019e5e905799589c379d9f905799589c379d9f900000ec895485ec890000ec895485ec89232028277a28f4a1932026282a2989a412206927b72880a5161e7525c72633a67617961e212086a5a49956a1bea2b1a47a9c75a472a501a4f79962a2a0a31aa36b981aa177a225a3b99adfa244a456a3519c34a427a52ba23c9db6a4a0a5faa0ac9df5a4d6a531a0f09d03a522a6339fe89dfca420a6679ef19dc8a4efa5af9dcf9d90a495a5559d919d3ba438a5a49c6c9de4a3e5a40d9c499d7ea3a5a4b09b4a9d4da372a4dc9a7e9d07a35fa4999a8a9de3a233a4e299869dc2a221a4ae99819da0a2f8a37999799d7fa2d2a34799769d73a2cfa32999589d53a2b7a3fc98359d41a2aaa3d998399d22a27ca3ae98339d15a271a39398819d48a2a9a38598d89d3ca2c3a32198d59aac9feba08f956c8a57966298488e5892a1970f996e900e9a9a9daa9e5894159c689fa9a08395109c0da024a1a595109c2ba049a19895cf9b19a04aa15d95799b0ea031a13e95679beb9f1ba110956e9bc09f04a1e5948b9bc79ffba07194729b879ff2a04d94339b579ff5a02694c59a1f9fe1a00694629ae69eb6a0b593049a879e77a06193a499259e33a0f1922499a29dc39f7092b2984c9d509f0e927f98fa9cd89e4b914e98cf9c8f9e1e915898c39c2f9e81910b98a09c259e7e90fe97959cc39d348ffe97959cc39d348f00006b146315048d00006b146315048d951e7525e226f0a0731ed8257927d4a2851de32408267ca37e1b4e221d24fca3d115691c3d1e0ba44594dc9c6b9d93a385989fa089a1bba2c69816a1d9a108a2f29842a15ba279a18a99e0a12da315a1379a47a2ada397a0299baea21fa402a0fd9b1ba383a4069f649c56a3a3a41a9e7e9c83a3aca4899d979c81a3a7a4b29c949c46a385a42e9c8d9c02a362a4599b8f9cd9a238a4859a9b9cb6a211a4469ad39ca5a207a4199a019d8ca20da4e699109d90a207a4b5991a9d7aa2fba38999fc9c5fa2e4a35b99f79c45a2baa32f99ec9c24a294a3fe98cb9c08a288a3d398dc9ceca17ca3aa98e99ceba186a38598fa9cdca16fa36898fe9caea165a38c98049dada155a30798089da9a135a33597409ae89f31a10d95cf956d9cda9d5692a2961a9cfa9c76921799fd9d9c9fa7946d9bed9eb1a09d95839c289fd3a03095649c349fd1a016950c9c289fc8a0ec94679b2a9fb2a0cf94029b1c9fb2a04f949e9ad89e99a01994759a8f9e6ca0c493519a579e46a0d392539a1b9e2aa091920c9aee9d0da06292c599b69de19f14926e99879d939f5e912499519d239f2991c098eb9cab9ed5906898aa9c2d9e96902e98729cd89de88f2c98609ca99d4d90d297389ca59d8b90c797f89b199de78cc797f89b199de78c000000000000000000006b146315048d951e7525e226f0a0731ed8257927d4a2851de32408267ca37e1b4e221d24fca3d115691c3d1e0ba44594dc9c6b9d93a385989fa089a1bba2c69816a1d9a108a2f29842a15ba279a18a99e0a12da315a1379a47a2ada397a0299baea21fa402a0fd9b1ba383a4069f649c56a3a3a41a9e7e9c83a3aca4899d979c81a3a7a4b29c949c46a385a42e9c8d9c02a362a4599b8f9cd9a238a4859a9b9cb6a211a4469ad39ca5a207a4199a019d8ca20da4e699109d90a207a4b5991a9d7aa2fba38999fc9c5fa2e4a35b99f79c45a2baa32f99ec9c24a294a3fe98cb9c08a288a3d398dc9ceca17ca3aa98e99ceba186a38598fa9cdca16fa36898fe9caea165a38c98049dada155a30798089da9a135a33597409ae89f31a10d95cf956d9cda9d5692a2961a9cfa9c76921799fd9d9c9fa7946d9bed9eb1a09d95839c289fd3a03095649c349fd1a016950c9c289fc8a0ec94679b2a9fb2a0cf94029b1c9fb2a04f949e9ad89e99a01994759a8f9e6ca0c493519a579e46a0d392539a1b9e2aa091920c9aee9d0da06292c599b69de19f14926e99879d939f5e912499519d239f2991c098eb9cab9ed5906898aa9c2d9e96902e98729cd89de88f2c98609ca99d4d90d297389ca59d8b90c797f89b199de78c0000000000000000000000000000000000008f1cde1fc0968928322c0d2d16a9c128d12ca92dfdaaa3283a2dbc2d54ad6429ff2d102fffb033245226c32888b1fc1b35200d18bcb1569e83a226a2a8b01fa5eba87fa91cb0b4a715ac89ac9aae8aa94dadf8ad9eaca3a877ac34ad98a9baa51eaac6ab02a7fe9cb1a685a8c7a7492222a5e9a87daa4824f0a0aba576a83f26571c769c99a773275923701f5aa871283525a517d0ab5b203aa347a725a8d5a11fa664a66da709a471a84aa86fa7b2a485a9c6a9fca3d8a3dba87ba96c99a0a1c3a63aa8879e9a0e519d83a1f9a3ae2451242b217aaac6248022811b40adc7222d1f4e12e0ab161ff2974aa009ab339e71a211a4b0a6339f25a2eaa38d9f6c9d7fa222a4e59cc99d21a43ea5d39ad89ceaa1b0a3d6979c9ce0a034a249960c9c6ea09ca12c96379c7ca0eaa1b696389c71a0b5a1a696789b37a06ea1a896189b0aa03ca16196479aab9ffda0fb95049a4d9fb9a00f96ba99f99e80a0b7957299a49e62a071954199769e47a03b95fe98549e2ca01095e298389e1ba0ea94b198089e00a0c4949598f29dcd9f5c947c98d59d9c9f3a944e98939d449f90932f98309daf9e7a923298c49c1c9ef3914f98939cbe9db6911898a09cdc9dc7911398b19cd09d4b92d296709cbe9d4992b998b69cfa9dae92000000000000000000008f1cde1fc09600008f1cde1fc0968928322c0d2d16a9c128d12ca92dfdaaa3283a2dbc2d54ad6429ff2d102fffb033245226c32888b1fc1b35200d18bcb1569e83a226a2a8b01fa5eba87fa91cb0b4a715ac89ac9aae8aa94dadf8ad9eaca3a877ac34ad98a9baa51eaac6ab02a7fe9cb1a685a8c7a7492222a5e9a87daa4824f0a0aba576a83f26571c769c99a773275923701f5aa871283525a517d0ab5b203aa347a725a8d5a11fa664a66da709a471a84aa86fa7b2a485a9c6a9fca3d8a3dba87ba96c99a0a1c3a63aa8879e9a0e519d83a1f9a3ae2451242b217aaac6248022811b40adc7222d1f4e12e0ab161ff2974aa009ab339e71a211a4b0a6339f25a2eaa38d9f6c9d7fa222a4e59cc99d21a43ea5d39ad89ceaa1b0a3d6979c9ce0a034a249960c9c6ea09ca12c96379c7ca0eaa1b696389c71a0b5a1a696789b37a06ea1a896189b0aa03ca16196479aab9ffda0fb95049a4d9fb9a00f96ba99f99e80a0b7957299a49e62a071954199769e47a03b95fe98549e2ca01095e298389e1ba0ea94b198089e00a0c4949598f29dcd9f5c947c98d59d9c9f3a944e98939d449f90932f98309daf9e7a923298c49c1c9ef3914f98939cbe9db6911898a09cdc9dc7911398b19cd09d4b92d296709cbe9d4992b998b69cfa9dae92b998b69cfa9dae920000eb8ea395fa8c0000eb8ea395fa8c382aee2d552f12ac122c0430a53039ae992c4b300e315eb09b2d63315f323cb3b729892d7c2ea1b3b71abc1ebf1fcab3259412a1c49809b35aaa14aefbaee3b2caac4ab012b108b383ac3bb0d0b027b0fbaaa4aeb4af7aacfba887ac65add9a867a539a958aa07a7d99c38a8aca9a7a85d2239a540a889a90527651f61990faa78289b275b2557aae3270a243d1b98aaa127009d50a6a1aada2129a312a75fa9c7a352a84ea9a7a4dca1a2a7a7a8ec9dc2a0f1a56ca73c0e029ef8a392a4c6176793a29e7aa06c982f25b122712001aa37251b221b1cd6ab8a22ac180e9c23ac051c899f21a3f7ab49a165a541a61fa9b7a303a5cda555a471a058a446a5b59f989fffa424a6059bf49f1da55aa63499589e37a46ba5b398779db1a252a41b98de9cdca19ca3ab97dc9c7ea1eaa2b8976d9c14a19aa28a97109cb0a020a2e196769b7ba0d2a100971e9b5aa0bca1b996e29a2fa07fa17696b09a0ea053a12f96839ae99f2fa1f895539a959f00a1b8951e9a599fbfa07b95ef99109f8fa0f3949899df9e6da0c2944099709e2ba07594dc980a9ee19fd5938598be9d759f72931598619de79e0e939297fb9c6e9eae921597bb9c129efa913397a39cb49d5c9222964a9c999d15918b97289c609da4908b97289c609da4900000b38eee94348c0000b38eee94348c362be42e45307eacbf2ca7304d311caf532dcd309d3137b10a2e69317b3213b4222b272ec72e54b408260a29cc290bb43ba1cca492a543b3a1a912ad68ad79b349ad80b045b194b33eadaeb041b1aeb010ac55af21b054ad31aa83ad40ae60aa87a849ace7acb2a81fa543aaaaabc4a8b88e06a73ea908a98c25a692ffa1b6a92b28e221eb9373aa42282b200e9d98aa192839131fa46eaa3a28ca9232a50caa6f274f122ba39ea97d24fa9ce4a3eea6fda079a6c8a7ee9e1a9dbca300a51d9e88238b1aa99aafa7ec242620001251aa9e24671da0981aac1023c311c99fd5ab4a1d7aa043a4d5abb9a088a59ea6e9a8f7a1aaa564a65da232a180a585a64f9e65a0daa4ffa53b9b5ba0bea4f2a5719a2ca09ba4e9a5f4992a9f11a43ba58599249e62a3a1a45b995c9dc7a26da4db98169d4fa225a47898fe9cdfa186a36e988b9c16a163a2ac973e9caea0eaa1fb96d79b7ea0b2a1b3965b9b4aa07ea1c996c39a24a05ba17b96499aef9f2da13496e7997f9feda0dd959199279fcba098956099e19e92a012955499889e5da0d1944b99389e0ba04f941f99c89da39f7f930a997d9d569f1c93d6985f9d179ff6927998309ddb9edd9160982a9d809e4e92bc96c09c4f9efe90b8974f9c7e9df08fb8974f9c7e9df08f0000b3911f97048d0000b3911f97048ddd2ba32f8530fbac9d2ca3304a310faf1a2dbe307d31fcb03c2d1531cf3196b3572c2c30923013b472262f2adb2b00b4291dd91d06249eb358a9f5ac61ad12b3ecac2fb0eab022b320adaab033b17db038acc4af79b075ad88aafbad13af18abf4a8a9ac64adfaa8d5a7dfab89ac7ca8e2a374a9d8aa72a8681eeca405a804a9b126b912eba2fda97028391e3ea18eaaa9282e1effa1bbaade28e01dc9a1d1aac428111f94a094aab228dd20aa9b74aab528fc22d911e4aa3f28e3224918fbaa8f273322b21161ab4d26bf20ba9194abfb241b1d039dc1ab6723ce119ea020aca41e679f76a315ac04a0a0a5c4a6c3a8d2a290a6bda746a183a29ea5eda6949de6a027a556a6039cd3a034a56ea6299bb7a006a527a6a89ae39f60a4bca5a999c29ed0a3e2a4ef98479e33a379a4d498779da8a21ba4b898479d0ca290a38f98ec9c85a1eca21d98829c38a18fa2c8971e9c03a152a2d697dd9bd0a012a2de97809b9fa0eea18f97479b6da0b2a12997ea9a34a089a12b97c19a03a053a17d96a59a7a9f26a1b895949a219ff4a024955f9ae59ecfa0ac945b9a8b9e98a025946099249eea9fc993a498a09d0a9fb7924498529dca9e7e922298459d7c9ee892a896ad9c3d9ef9915f98bc9c0c9e938e5f98bc9c0c9e938e00002a9940997a9700002a9940997a97122bf32e393045ad662c783018311eafde2cb1305831d9b0542d4131273266b3de2ad32ed22f82b3f328ea2cd92d1fb39e197a1d981ecbb2fda5baa95daad1b223ac70af41b0b7b2a9ac5fb0ffb05fb0f9ab82af4eb054ad57aa0cae1faf42ab1ea901add4ad3ca941a824acd3ac58a886a6d1aa11ac0fa81da2cba830aa2aa8d42153a3cca6f8a8fa2785126fa337aa16299a1fcaa012ab3a299620e2a066ab56294221919f62ab4229de21989d55abfe28c521aa9b99ab862868227498d1ab18289721d1910dac30278c21c2911eaccf259c1e139b5cac85246218479e9cac9520f89d93a245acc2a17ea596a633a8cda1b6a5e5a6b3a093a172a585a6079d16a15ba57ca6579c42a165a597a67a9c1fa152a560a6e79b0ea08da4aca5ae9ab29eefa323a5c099ec9d70a309a555991f9e16a39fa45799a89d74a221a41a99429df4a15da3a898e59c7aa1e4a24998879c3da1bba24998459cf4a06ba20d980b9cc1a030a2b2976f9b70a0f1a1cb96ed9a3da0b3a16b969d9a19a067a1c995319acf9f28a18395ae99569ff8a0dd941899c19e77a03094bf98f89dda9ff7926d98829d5e9f809248984e9d399f67924e984a9d2b9ff99189986d9df39e22921198449d119fe291fa985b9d3b9f7692fa985b9d3b9f7692000012993b996497000012993b9964978b2ac42e0d3009adec2b3130cd30c3ae482c68301a31b6b07f2c97305631dcb24f2bc72e2c30d5b20e211f252e26b1b222a323a75fa859b290a84fac28ad41b2beab6daf70b027b231ac25b0d5b039b03eab30af35b057ade3a9fcad11af07abeea812ad02ae1ea95ea86cac41ad26a866a7aeab8bac53a7f0a5c1aacdab19a72aa1d2a85caaa0a7fa2328a355a707a9ec28071f33a2bbaae829dd22d19dc6ab0c2a9323dd9809ace72926244d9233acae291f243a125eac3d291a249e1872acc328162496189fac172893220612b0acca263d207498ddac2025b71b0ea029ad3d21289e94a3a9acbba08ba5d4a63ba8e5a199a5dea641a06da1b4a5e3a6ad9e6fa183a5dba6449d11a15fa5b0a6759cd4a051a56aa6fd9b66a0daa414a6349ba79f5da497a5549abe9ebfa308a58e99089e31a385a40999f69dc1a24ea4fb98049e9fa239a4c798939d2ba2cea36798ee9cb5a13aa35298749c53a1caa2f9970e9c07a167a2f597aa9bc2a015a288973d9b8aa0d2a13097d69a4ba097a1cc96809a1ba049a16d962d9ac19f00a1bf95dc993e9fb8a01d957299dd9e6ba08d9419996c9e12a04294c3980d9ecf9f0e948998c79d8f9fd2929598a99d319f41937a972d9d1e9fa2922398c29c459e92902398c29c459e9290000040982c986a96000040982c986a965b2a8f2edb2fa1ac302bf92fa83064ae1c2bf72f80302fb0ef2a64307c30deb17c27b22ebe2c56b236228b2aa22762b2b89e119680a2a4b1a0a55ba96eaa66b1cea9cbadc7aef8b0deaa42af37b067af79aabfae0cb01aad54a9acadb9aec5aaafa8eeace3ad0fa924a86bac31ad4da806a7acab85acc5a643a6f1aa1bac3fa68aa53faa38abefa527a089a804aab3a616243ca36da7f4a86f29292049a017abc32a1425851237acad2a7925151c82ac5c2a0925fd1bb0ac162a6725801ddbac98295c25651d1dadee288c24541d4aad1228b8220b127bad5426f71e4e9b90ad7921fc9ef7a27cac74a1d9a50aa72ca657a151a6fca726a088a1dda550a7bf9d3ba176a5a5a6ef9cf6a041a543a6a09caea0e7a404a6449c3ea0a7a4c3a5e69bc79f6ba488a5509b459f15a40fa5109bee9e88a3ada45f9a639e0fa37aa4e799cc9dcea25ea4a199719d7ca23ca43e991b9d17a2d2a3e098d19c9ea11aa36698649c27a1a9a2a2970f9cdca04aa2b896949b8fa0e8a14d960a9b4da0b4a19595af9a1ba075a15595569ae29f42a17495f099849fd8a032958299ff9e80a0e3944999979e3ca0a794ee98139ec49f62948d98cb9d7f9f6d93ca98a59d4c9f509303982f9d5c9f65920d99189d089fe2930d99189d089fe29300004794e592009400004794e5920094ef29732ee42f60aca22a962f7230f3adb92acd2f8230efaf342bad30f33017b2d827862e442d45b24a23142a532806b23d98941c7597ddb1aea4b0a899a9c4b15da9aeada7ae33b196aa68af5bb068aff6a9a5aedfafd3acd1a865ad82ae70aa3ca8bfacaeadf3a8a2a746ac1aad17a8f6a6ccab90aceba64fa605ab2cac16a6bda57caaa3ab65a53aa556aa8cab98a567a1bca827aa99a67624d2a0eca5e5a8ae29f8227a98fbab202baa26471fe6ac4e2b2d2740212daddb2acd26462169ad5a2acb2640219cadb52903266720daadd428c324ef1b0fae08274020959bbfad5e1ddca18ba49aab7ea2bfa604a80ca4f7a114a65ca7de9da5a1e0a524a7999d0aa15fa5b7a6569dd1a041a56ea6059d9ba028a563a6be9c44a0dda411a65e9cc69f95a4bfa5049c4c9f5aa48fa5f09b199f18a431a54d9b7d9e47a39da46b9ada9dd4a24ca4f399769d74a215a49099179d19a2cca33299e99cc8a172a32099cb9cada13ca3ed98939c75a1eea2af98409c32a19ea23398d59bd2a01fa26597f99a5ea0a6a1b296d69af89f37a1c795549a529fd1a00f956b99c49e80a070942099769e3ea04994c698fa9dd29f7f939d98b49d449f3c929598989dd09eaf9126982b9d719ee990a598339dc59e1d94a598339dc59e1d9400004494849694920000449484969492d229ad2eb22f58ac432ad22f8b302eaea62ae32fb13026b0462a1f3076301db27d25932dfc2b3cb2d61f93298f243fb2f797961ca09d7eb17ca41fa9b5a98cb14ba9eeadf5ae56b158aa64af75b0aeafb6a9b9aefaafeaaccba893adceae8baa00a8c3aca5ad90a833a73cac08adaba79ea6c4ab9cac3da6d9a5eaaa2aac68a565a564aaaeabc8a419a5ffa936ab46a49da4c9a9e4aa33a4c4a2eca860aadea45f1fcda4c1a700a8de28ab21cb9c3fabe32a63263220e3ac6a2bb3270a22c6ad162b5c271c2226ae722af426332145ae7029c824231c7eae2e26231b9a9f7dad159c6aa4ffa5e0a879a10ea652a7a0a08aa12ea670a7249d60a1e5a509a7389d4ea1bea50ea7429d16a199a5dba6469de0a040a55fa6e29c61a0d6a402a6289c849f81a4c6a58d9b4e9f43a478a5619bf69ee6a3eca4ae9a9f9e69a3a7a4339a679e1ca383a4d099ff9dbea258a4bf99bb9daea252a49299769d7ba234a45899109d2ba20da40999a09caea178a3a498559c4ea1d5a24998389cfea07ba2a797189cc0a047a24997fa9b7ca0dda17196ae9b02a02da1c095419a099f90a085948c99eb9e6ea071948699d19e67a018940c99a59e5ba0f5925c99b29e52a00293de98649e2ba03892db98c69d27a0e993db98c69d27a0e993000015922891a291000015922891a2919a293a2eba2f2bacf129812f7430d9ad172ac92f933006b06529ea2f683001b26d25da2c232ccbb135225a29242880b13c97da95639d43b1c6a41aaa74aa80b1a4a8f7ad9dae34b1d8a932af4bb056af30a96eaeddafd0ac5aa874adb3ae4aaad7a7b8acbfad99a828a723ac0eada6a75ba6a3aba0ac4aa6bfa5ebaa33ac76a508a53faa73abb9a4d3a4f2a947ab4ca4a3a4b2a9efaa1ea416a40ca926aa8ba369a24ea840a9dba3b098efa522a81fa6b824939c29a466a9ae282e22739a30acdd298c244d1852ad90293824ba11a4ad3327eb1dfc9e0ead0c1c15a263a406aae0a07fa5d6a623a423a1d4a5b4a7139fbda11ea69aa7959e4da1b5a51ea7d29dfaa070a5e4a61b9dd3a033a58ea6c29c7ea007a547a67c9c43a0f6a40ba6439c07a0cca4e1a5409ce79f99a4bba5f59b449f46a461a53a9be39e05a410a5a59ade9ea7a3dea4309abc9e23a3a0a4a699709ec3a25fa44b99179e49a219a4de98469deba1a2a38b98c09c81a13aa338985b9c4aa1eba20398189cffa077a29697929bbea030a23297209b79a0dca16c96869a2ea082a10196f299c49f24a142957d99139fbea0d89409997b9e78a08694d598429e42a02694e198359e0ba01d946b98df9ddf9fdf931f99d19d8b9f67941f99d19d8b9f679400003a90b890778e00003a90b890778e8e28dc2d2a2f1dac2c29ed2e1130cdad9d29612f6930e6af7929e42fad30a2b156278f2d882d6bb16c228e29ed2868b1ba9b2b9c49a041b1e6a4cba9fbaaf5b05ca86cad73ae1fb168a917af56b03aafdba868aebeaf80ac0ca860ad8eaeefa913a79eac9bad6ea853a608ace1ac10a70ba682ab82acd5a5c0a516ab3dac45a517a560aa96ab89a47fa4a8a9d3aacaa33ea44ba974aaefa2d3a3f3a81daa27a275a3b6a8aea948a29aa24da839a90ca2f5a00fa786a8fca2f29db7a536a763a5b218daa334a5f3a7c31c02a3f3a48ea82b98c7a470a635a71fa125a6aba760a327a165a60ca81e9fb4a117a658a7a09d9da17da5d8a69b9d30a168a5bfa65f9deea03ba598a60d9dcaa037a579a61d9d9ca017a557a6dc9c76a0eda41da6a59c2ba08ca4bfa5689c9d9f56a4a0a50d9ca49e23a47fa5f09b8d9efda345a57c9b599ea0a3d6a4549b1a9e25a38aa4ca9ac69dd8a267a4bb9a729d94a234a40d9a109d06a2e6a37d99969c69a110a3a598169cd4a050a21a98af9b85a00da24e97599b6ba0dca1b4961b9b45a0baa12096fe9a3ba09da10396e79a12a06da17595119b15a044a12395a69aa29fffa0da94ff99ef9e74a036946499979e0da00c94d598459ee89fc793d898f89df09fe492d898f89df09fe49200004894b393699000004894b39369904d28f62d702fcfabe328df2e2e3097ad01295e2f5b30bfaf6428952f013089b13e24f52c282b5db1eb210e2a48285eb11f90111cb496deb045a49aa964aab6b0e2a765adb7aedbb0e7a81caf5cb0d8ae64a824aea3af63ac3ca71dad52aebca983a663ac5cad48a8e3a5b6abbcacdea67ea515ab54ac5ba50aa588aa00ac81a4aea408aa5fabe8a36aa4a8a9e8aa08a330a457a99eaa01a3daa3fea827aa8ca27ba3c9a8cda9daa104a353a84aa960a1e4a216a8e4a845a102a30ba809a964a1c5a20ca801a9f8a0b4a28ba7afa8b5a026a22aa765a8719f9da1e7a652a8da9e0fa286a608a8ff9dffa120a680a7739e60a1faa54fa7059e56a1b7a500a7ad9dfea083a5c3a6a19da5a03aa567a68b9d55a008a539a6339d25a0f0a423a6e99cd29fb5a4e2a5819c7b9f69a482a5559c019f3fa44da5129cab9e16a41fa5a99b549edea3e9a48f9b1a9e87a3baa4139bbc9d20a37da48e9a5d9da6a23ca40d9afb9c42a2e6a39499d99ce7a191a3f798ca9cb8a135a3c398b09c6ea1e8a24d98669c17a199a2a597119cb0a029a2a996279b34a09ba1b295319a799fdaa0cd94ce99fd9e6ca07d948a99a99e60a053942f99949e70a009944599479e4ea02994f8975d9d569f7992bc98f29c999eb791bc98f29c999eb79100000695e993e49000000695e993e490f927cf2d082f77abb328e82e17306badd128242f393083af2128202fb62f5db1d7234d2c902a4fb1af1c1628202232b13e9ccf9b4ca3c2b06da40baa5dab9db071a797ad5cae7fb09ea8d8ae1eb094ae14a816ae79af3facdfa60fad34ae6da947a65fac5aad0da8a0a5ccabd1ac93a631a524ab4fac8ca5d4a479aad1ab99a47ca4dfa922abf4a325a471a9a5aaa9a2f2a311a92eaa33a24ba3aca8b3a967a1dda260a866a926a1b6a244a823a9a7a06ca200a8d3a85da027a26ea786a80ea0fda102a75da8a59f01a2efa61ea8c59feba1cca606a8119ff8a18ba6b5a7369f94a116a66aa79a9e35a1d7a513a7259ec9a060a5afa6fb9da8a029a57fa6a99d8ca009a556a6719d76a0fea43ca6869d63a0eea42da64d9d3da0d9a414a6019d09a0c0a4e7a5e69cb09f8ca4c6a5859c6f9f63a489a5359c359f37a457a5e79be79e03a410a5b59baa9e9da3d2a4289b169e10a379a47f9a8b9d82a233a4ec99449d08a2e8a36f99d09c98a14da3fc984d9c17a1b0a25398019cb5a029a288975f9b76a0d7a110972b9b52a0aba17e96179b34a09ca19395199bf99f5da10595ba9aa99f03a18394399a2f9fbaa04694f799f79e89a0cc93cf99b39e46a01294fc984a9e2ba03093b998c69ddf9fae91b998c69ddf9fae910000be8a1b863a8f0000be8a1b863a8f20272c2d762e05ab2d28572ec12f37ad7c28062f3f3064affb27eb2ee92f2ab17e23252a292af6b0651cba231422e0b04415ad1bca1c85b0ffa149a842a990b009a753ad79ae5cb060a8adae2ab04bae72a7cdad35afe4ab41a6c4acf2ad0aa9b1a53aac3eadafa74ca5a2abb7ac2ea6e2a4d0aa30acd8a495a42caaa2ab2fa44fa4c0a932ab6aa30da468a9a6aa9da2a2a3f8a815aa6ca144a3a9a8a0a9c7a0dea275a85fa992a091a22ba80ca9fd9f57a2c0a7b0a86f9f37a25ea767a8f39e29a2efa649a8a69e22a2a4a621a85d9ef6a145a69ca7039e9ca1dfa53aa7049e56a1b3a511a7bf9d04a17ba5c0a6709ddda051a585a6869db6a039a56ba6949d94a001a548a6929d76a0f7a419a6a89d76a0e0a405a6ab9d63a0c0a4e2a58f9d56a090a4bca5229d35a06aa494a5c79c1ca033a45ba5609cb39f08a417a50e9c3b9fe0a3e2a4019cdb9e8ba3b1a4819b2d9e25a387a4f59abd9dc0a257a46d9a4f9d5ca229a4ac99ee9cf7a1daa30499869c70a155a35a983b9cf4a0b8a2ec97f09b85a027a23c97819b26a0a4a1b496e79aa79f41a1df953a9a2c9fe5a04295ce99f09ec8a0cb949a998e9e92a04d947f995b9e52a0e3936e991f9e0ba0999348984d9da79f65920199159d229fe68f0199159d229fe68f00005e99fb982b9500005e99fb982b950826802ca02d48aaaa271e2e4e2fccac0828682ed12fc2aebf26362e1c2fc3b08a22b02b032aa8b0621a7424402095b0449b4fa0f9a245b0daa1a1a85aa925b0f6a5d2acddad11b064a71cae99affcadcba680adeeae5eabc3a58eacbeadaca839a507acfaaca2a6f8a44cab76ac46a5ada4a7aa26ac5ca46fa415aa84ab09a31fa493a9c9aa74a299a316a939aafba1dea2b7a8cba93ba17fa24fa855a9dca050a20ca809a94aa024a2aca7a9a811a0f2a14da782a83d9fd4a119a757a8eb9ea3a1cca627a8a09e71a17aa6e4a7e19d37a11aa693a7899d28a1e1a550a7409d18a19ea501a7059dfba079a5c0a6299deca040a585a64a9dd4a00aa548a6689d83a0d8a40ea66c9d60a0c4a408a6789d42a0cba4f7a5769d23a0aea4efa54b9d0ea08fa4cfa5e39c8f9f72a4c4a5cf9c5d9f5aa4a5a57b9c199f32a46fa52c9c749eeaa319a5f59b2b9e71a3c6a4529bbd9ddea27da49d9a3e9d4ba226a4ff99c29cbfa192a32d99859c5aa119a38c98529c0da1a2a215982b9cbaa05ba2ca96f19b62a0f0a1ef954d9b1ca092a13a95d39ad59f4aa1fb94529a699f01a169944b9a019fb9a03694829aa09e68a07e93989a749e25a060939d9a519eec9fc192fa99dd9db09f57929a996c9d169ffd919a996c9d169ffd910000f996839746950000f996839746959e24eb2a6d2c08a8fc24512c3e2d48aa6426832db42ee1ad93258e2d202e51b0c423c52b012b57b0431db226182544b024978e940ca1e7aff7a0fea701a9a6af42a555ac4fad65aff1a6d4ad08af7bad6da686add1ae25ab5ba571aca6ad41a8dca4b8abc3acada582a413ab52ac7aa446a460aaedab52a3cea3b4a920ab8ba22fa32ba94aaa7aa1dba2bea8bea906a187a265a84fa9a9a06aa221a8fca818a020a2e2a7c4a8469ffba153a789a8e19e9ca1e5a638a87a9e79a186a602a8ac9d51a131a689a7639d2ca1e3a536a7889d04a19aa5dfa6de9ceaa057a5a6a61a9dbfa03aa574a6fe9c90a014a541a6379d8ca0e7a413a6099d76a0c2a401a6399d4ca0bea4e6a5589d33a0b7a4daa5ac9d1da0b9a4e0a5a09d2aa0b5a4f4a58c9d38a09ea4e5a5679d00a07ba4d1a5e99c4a9f55a491a5759cbe9e1da42ba5489c3c9eb6a3cda4c19b0d9e36a3a5a4189bc59dcca26ba48c9a789d49a216a4fc99ea9ce3a18fa34099b29c7fa121a3ac98649c43a1c7a23598379c00a169a29897059cb6a00da22597ac9b6ba0a5a15896179b00a03aa17895829a0e9f9ca0e094fb99869e18a08e9464991f9eda9f53942399e19db59ff8935299b29d759fce9393985b9d779f8193059b8c9d9f9e9a93059b8c9d9f9e9a930000ef88da0e2c920000ef88da0e2c922f245f2a372ce7a7ec219b29092b83a86025342d8f2e83ad4226172e4f2fc3b01523df2a242b8ab0431dd4259c2596b07994919bcf9f89b07ea11ba982a94bb0a0a5e0ac08ae41b039a752aed3af16ae50a67dadfcaedfaa15a557ac94ad7ca768a479ab96acbaa423a495aa22ace1a29ba313aa7fabe9a13ca3a2a9edaa4aa1c8a2eba808aa34a073a25fa858a909a03ca226a80ea9189ff6a1c7a7c4a8c39ea1a144a769a86e9e83a1c9a634a81c9e39a15ca6e0a7d69df8a0f9a565a7949dc9a0aba500a7f79c8aa074a59fa65c9c6aa01fa548a6199c37a0b9a4d0a5f89a08a094a4a0a5c19a0ca079a47da5999ae89f5ca45ca56e9ac49f3ca433a5e89a929f31a423a5fb9bd29f4ea468a5d09c25a09ea4cda58f9d13a0c2a4fba5279e709fb7a4f2a5769e719f82a4dda5b49d139f4fa486a51f9d9c9e18a431a5a39c589e94a3d6a41a9c1f9ef7a294a4139b9c9d7fa244a4889a059d00a2b6a3b699bf9ca1a13fa311998c9c54a127a38798669c1ba1e3a22198699ce3a08da26c97659cb1a04aa2bc96329c75a0d4a16796c79b1fa046a19495eb9a9b9fdea0e394d39a509f9ea0b294be9ae39e6aa03994889a199e16a0bb933e9a7b9d5e9fb192759ae69c6b9e1b930999be9cd69ea8900999be9cd69ea8900000438a44090c910000438a44090c9130242c2bb12cf5a87425e62c192e27acb226152e6a2fb6ae8426112ea42f15b17222b829a02adcb0e71a3224af21a4b0f298cc944aa14fb0efa013a801a91db05ea5e5acf9ad21b0e4a649aeecaff0adcfa567ada5ae4faa83a41aac38ad56a639a418ab62ac09a3c6a34aaae3ab08a108a38ba9feaa2ca097a2faa837aa349f6ca144a835a9f39e3ca19ba798a8bb9e34a128a74ca8d49d17a1b0a615a8109d1aa174a6c5a76b9c07a12fa676a73c9c07a1d1a50da7429bdaa090a5bea6f09aada029a552a6c9997da0e3a4f6a5d69842a090a4a9a5829621a051a454a51f9302a033a42ca51393d09ffca305a50593ab9fe8a3e0a441965e9f70a39ca487974c9f76a3b9a4b399be9f10a42aa51a9c16a092a4c4a53e9d42a02ba57da6969e40a010a567a6069f30a09da4f2a5769e46a036a44aa5d19d459fb6a3cba4f69cbe9d08a369a42a9c6e9d91a241a4099b3d9d57a21fa4609a239dffa1d5a37599ea9cada162a3e098a89c5aa1f5a21b98339cfca098a23b97be9b9ea014a2ef955d9b55a0b7a19095ef9af79f3da1d6947a9a629fbca08994319ad19e68a03b94e1996e9e27a00994b499239eeb9fc7934b99d29d7c9ff1923099af9d499fdc92c498659d239f0892b9982f9dd49e5292b9982f9dd49e52920000c48ce2882c8a0000c48ce2882c8a9524e22b042dcaa86725ff2c3a2ec6ab4826942d0a2f3dae6e26042ec52f17b17924812b6d2cfdb0e31c15267024c3b02994c914839f60b08fa072a820a941b033a5baacf7ad17b09da60fae79af41ad82a530ad73ae65a93ba404ac1dadb2a54da37eaaf4abdba25aa253a986aa8da0369f7ea619a8479a8199cca04da1050a749e4ba445a5729801a078a5e5a6f39ad59f35a540a6e19ab89f24a53ca6a99ade9f10a535a6ad99ce9fdea4dda59099949fa4a4b5a5ed97a29f8ea493a55f968d9f72a46ea525909c9f65a461a576897c9f37a42ca57209289f1ca371a4db12289f7ba210a4e812259f82a22da42113ec9ed3a243a47a13999ef7a25fa41b8aaa9e4ca3bba4d396469f36a45ba5429ca59fa0a4eba5189f7a9fa1a417a613a00e9f83a4eaa5579fbe9e4ea47ea51a9e399e1ea43ba53c9d359efaa329a5b99c069e71a3dba4329ca39dc4a271a43f9b1b9d20a203a43a9aac9c91a159a31f99429c29a1e5a24298f59bd2a093a27897ab9b93a028a25296d09b7ba000a2c295f49b62a0c0a14595aa9b45a088a122952d9be69f07a1cc94419a3f9fb1a06794e0998e9e7aa011944f99159e32a0b6931599a49d899fe292b398479db29eff92f897cb9c7e9e0e9240988e9c049e879040988e9c049e879000001d8e3a87e09100001d8e3a87e091bf22c7294e2bfea6b423212b6b2ca8a96b24f32bfd2c4fac2524272b8f2cc8ae82228b29f42aafaf691c04240824daaba78e1c96781772ab2f9f34a711a8adaf51a238aa96ab25ae45a5f7ac15aef5a97fa448ac47adcda5dda3d3aa26ac17a301a23ca969aa31a127a153a899a95ca09ca0c3a7dea87f9ef89eb7a53da7e39c759eb0a4f1a58d9ca89e9ea4a9a51f9c229fbba4cba5269c969fc0a4bca5759ba09fbca4baa54d9baf9fa4a4a2a5069b969f9ca497a5339a7e9f85a47ba570994f9f74a46ba51998069f5ca44aa5eb96e19e45a40fa56392509e2aa353a48214799dd0a129a3ea18c89c7fa097a1721a689cd09f89a0a21bd39c33a00da1c91b3b9d4aa183a28114c79e05a4e9a4aa9d5ba0d4a54fa743a1c3a0cca56ea704a13ba0d6a45ba6dd9ffc9ef9a352a5e69d199e3ca3bca4b69ceb9ddda25aa4289c449d19a206a4f39aaf9ca4a1c5a31c9a559c5ea178a34799249c06a101a37498089cafa026a2e697bd9b5aa094a1e4966c9b19a057a12296129bd39f2ca18695ee9a8f9f22a15595c89a229fdaa0ba942e9aa09e4ca01c94ab99299ef19fbb933a99ec9da49f83931b99c39d769f6293ee989b9d2b9fc392fb986f9db39ea2925898e19c719e17925498599cd89dff8e5498599cd89dff8ebe898391b38f3790be898391b38f3790f01ccc22b723b99ef2213a29612a28a80f22b3294f2b3aaac1209d28ee29f5abd21e1a2638277eacae17211d701ea0ac5d9825a042a261ac349e26a6bca79dac4ea3c3aa1eac58acafa3b0ab09ade1a9efa03ba9a8aa82a69ba00ca84ca97ba427a1eba7f7a857a373a065a7a4a822a2c99f71a6e0a721a1689f9ea5f5a65da0ba9eeea41ea6ed9f9f9e90a4a9a5989f719e48a451a5f19e729e1ca405a5129e569ee4a3d5a4439d2e9ea5a3ada48c9c1f9e7aa38ea42d9c369e5ca36aa4089b3a9e4ba372a4d99a729e21a35aa4b4996e9e12a34da42a99729ef1a22ca44198829eb8a215a4be95939df6a144a39c11489c629f3ea0e01ce4987296b295f320b49b379c769db320ec9f42a55ea72ca099a046a7a4a896a40ca0dda562a760a2329f58a4d0a5c39f0a9ee6a280a46f9d1b9d1da293a3619b1a9db4a130a3ef99929c3ba1bca2e698649cfea07aa2a098499cc7a035a26098149c7fa0eca1d697c59b4fa0b8a10b97899b1aa07aa15996329be79f41a1b395f79a7c9f09a11295ab9aed9eb8a06494479a9a9e74a02f942e9a4d9e2ba08493df99ee9d00a0a092ae99b29dac9f5c9249996e9d659f2392ff982a9d319f6f91b298f49cde9e4491e7978f9c9a9e7b90a6972b9cb49df58ea6972b9cb49df58e5584dd8d4d8c49905584dd8d4d8c4990261c1b207620a69c992052284929a5a60d219328d429c0a82320ba27ac28d2a9141d5e2465256daa861104108b1716aa809cafa4e8a569a8d89de3a52da76fa42c93ae9d8e9e8b9f8b9637a0c7a044a3f89c10a5bea555a5c89e5fa6a5a7a9a4119f61a6dea723a3079f03a66ea7d9a1179fc6a517a7d6a0b79e34a54fa641a01d9ea4a4aea5629ff89d52a44da5949e049e1ba404a5f69d199ed8a3c9a4b29d049eaba3afa4789d2d9e7ea38da4579d5a9e6fa379a4b39c589e5da374a4949c679e4ca361a4769c2b9e33a35fa4089ca49e2aa36ca4549b0a9e94a23ca4a09ae09d04a21ba4f999849e75a2c7a3059ad69dada154a2cf981c9e7ca4eaa41d9c0d9a569aef9cc99e18a349a80daa60a4bca067a782a87da0169f77a196a3f7995f9e7ea168a3fc98fb9c19a1e5a28598bf9c16a1bba23698ea9cf5a095a2a697b19cd9a050a26697ba9cc8a039a2c7966d9c9da0faa17596449c72a0cda13c96d89b3ca09aa1df95769be79f3da17995129b5f9fe1a0c794ce9af79e95a08394849a969e59a045942b9a599e2ba01d94d799299e0ea070938999089ee39fbc924199d29dae9f8292ff988a9d4c9f3092c898319dde9e6591b698c39c4b9e81915698349cc99db0900799399c429dff900799399c429dff900000d1894385628f0000d1894385628fb31fab262f2820a4272058278f28afa5231f5f260d28eea69c1d11254e26f7a78a19f320b7210da8c992499b969c33a7929b92a39ca4c8a5fc9bdba392a498a43399a0a1d3a295a3519992a1f4a2f1a3889b17a362a42aa4669c1aa403a5fea2e69c62a457a5aea1379d8da483a5e0a0869d87a497a54fa0879d76a487a5d79f939d3ea440a5239fa99d0aa405a5139e979d9ba3b6a4719d959d65a394a4329d989d2da376a4b39c889d04a35ea4459c909de1a232a41d9c919dc8a21fa4fa9b759da7a214a4b29b759d87a203a46e9b6f9d70a2f1a3cb9a4d9d61a2c6a3a19a399d48a2b5a36d9a409d40a2b8a3ea99559d61a2c1a3c699ac9d71a293a35c99bf9b51a07da15997648f3598889900913891b895b29746902c98559c399dc194669b0e9f63a01e96609cdb9f0fa18a96589c1ea03ba18096189c24a043a16196c39b12a03ba11e96899b10a02fa108966f9b08a029a1d895649bea9f12a1ac954a9bbc9f0aa120953a9b929f04a1f694eb9a439ff4a0c294889a239fe3a0a094fa99c09ea0a06094cd99799e68a0329470990d9e30a062931199b39ddb9ff492a3984b9d589f88926198f89cdd9e35923598bc9c8e9eea913c98959c159e3792f897899c009ed290ea97869c9a9d718dea97869c9a9d718d0000ea143f16fa8c0000ea143f16fa8cb31e0025392693a1171e7925fe262ca4231d7a24ad25f2a4dd1ada21a1234ba5b316701db71e5fa511917e9ae39aefa41e9848a0e2a075a4ad9807a1eea1e7a39b980aa128a2e1a2e3984ea145a22da2a499b4a1d3a20ba28c9affa171a32ca12f9b72a202a48aa0f39bbaa22aa4e39f119cc9a239a4019f289cd1a23ba4749e169caea223a4a59d359c8da211a4299d539c7ca207a47e9c879c6aa200a41d9cc19c77a2f8a3fb9be59c62a206a4bc9b0c9d6ea204a4829b0d9d6ea2f4a3429bf39c5aa2e4a30b9bfc9c45a2b3a33f9bf89c24a2aea3979afa9c1fa2a4a35c9a0c9dfca19aa31f9afd9ce2a181a3ee990a9dd4a1a0a3b2990e9dc8a188a3be99219d80a1f5a2e0982a9b41a083a1e4963d96539dd29e8994f2957d9ca99d5394de98899da99e55958c9a3a9f7ca0c496039c689fbca0be969c9c919fd9a09d965f9c6e9fdba05396f19b469fb7a00a965c9b239fb1a08095019b0d9fa0a04c95969ac39e7aa00695659a7f9e5fa076944f9a469e3fa0ec93349a0a9e24a0a093009af29d09a06d93dd99bb9ddb9fa0927299839d819f60922899469d0e9f9c91c098ea9c989e4a918298aa9c3c9e06913098769cea9dcc902b98639ca19d8a91c097489caf9d6891de972b9c439d548fde972b9c439d548f00000000000000000000ea143f16fa8cb31e0025392693a1171e7925fe262ca4231d7a24ad25f2a4dd1ada21a1234ba5b316701db71e5fa511917e9ae39aefa41e9848a0e2a075a4ad9807a1eea1e7a39b980aa128a2e1a2e3984ea145a22da2a499b4a1d3a20ba28c9affa171a32ca12f9b72a202a48aa0f39bbaa22aa4e39f119cc9a239a4019f289cd1a23ba4749e169caea223a4a59d359c8da211a4299d539c7ca207a47e9c879c6aa200a41d9cc19c77a2f8a3fb9be59c62a206a4bc9b0c9d6ea204a4829b0d9d6ea2f4a3429bf39c5aa2e4a30b9bfc9c45a2b3a33f9bf89c24a2aea3979afa9c1fa2a4a35c9a0c9dfca19aa31f9afd9ce2a181a3ee990a9dd4a1a0a3b2990e9dc8a188a3be99219d80a1f5a2e0982a9b41a083a1e4963d96539dd29e8994f2957d9ca99d5394de98899da99e55958c9a3a9f7ca0c496039c689fbca0be969c9c919fd9a09d965f9c6e9fdba05396f19b469fb7a00a965c9b239fb1a08095019b0d9fa0a04c95969ac39e7aa00695659a7f9e5fa076944f9a469e3fa0ec93349a0a9e24a0a093009af29d09a06d93dd99bb9ddb9fa0927299839d819f60922899469d0e9f9c91c098ea9c989e4a918298aa9c3c9e06913098769cea9dcc902b98639ca19d8a91c097489caf9d6891de972b9c439d548f000000000000000000000000000000007a17e320ca229e9ab926642a6e2b15a91828192cbc2c08ac4627a32b6c2c9bacd8264f2b4f2c49ae5f24bc28a2295eb0121c301efa20c1b0129d85a249a269b083a3f8a7e2a843afaea5ffa9b7aab8ad83a7afab55ac4eac74a6a6aae4abbba984a3b5a8a6a968a8e48fe1a6b5a8c0aa4523c7a4f3a8eaaabe24ec9d43a4daa8b626ae1f5c975ba8722745242f20eca8f428bf257520daaba625089c6da58aa83d1dc2a0d6a2e3a613a2cda6eda781a461a233a7bba805a469a14fa530a74fa5171ebb90f89e83a89e242021131b94aa4424881fd51171ab6222351a3d9a0fab6021b110059cadaa641dcc9c94a1eea9429fe4a231a47fa528a053a387a4b49e1d9d0aa3b9a4b19c029fb4a3e2a4c09d799d7aa4b1a50d9c3f9c2ba1fca2bc973b9da0a0d0a13697689c86a0c9a19c973f9c70a0b7a1eb97839b33a066a17e971c9b15a042a19997589aa59ff7a01e971b9a389fa7a0b896d099ed9e74a05f967d99ad9e53a063964b99629e37a01c960a993c9e1ea09795e0981e9e00a06d95a598ea9de89f3e959998d89db89fd8947698c29d8b9fb6945198809d139f3e940798ec9c5a9e2393e4978f9cd29d3092b697739c909d7492c597769cb59d0e92cd979f9c9a9d0d9331963b9c7a9dd992db98b39cea9daa9200000000000000007a17e320ca229e9a7a17e320ca229e9ab926642a6e2b15a91828192cbc2c08ac4627a32b6c2c9bacd8264f2b4f2c49ae5f24bc28a2295eb0121c301efa20c1b0129d85a249a269b083a3f8a7e2a843afaea5ffa9b7aab8ad83a7afab55ac4eac74a6a6aae4abbba984a3b5a8a6a968a8e48fe1a6b5a8c0aa4523c7a4f3a8eaaabe24ec9d43a4daa8b626ae1f5c975ba8722745242f20eca8f428bf257520daaba625089c6da58aa83d1dc2a0d6a2e3a613a2cda6eda781a461a233a7bba805a469a14fa530a74fa5171ebb90f89e83a89e242021131b94aa4424881fd51171ab6222351a3d9a0fab6021b110059cadaa641dcc9c94a1eea9429fe4a231a47fa528a053a387a4b49e1d9d0aa3b9a4b19c029fb4a3e2a4c09d799d7aa4b1a50d9c3f9c2ba1fca2bc973b9da0a0d0a13697689c86a0c9a19c973f9c70a0b7a1eb97839b33a066a17e971c9b15a042a19997589aa59ff7a01e971b9a389fa7a0b896d099ed9e74a05f967d99ad9e53a063964b99629e37a01c960a993c9e1ea09795e0981e9e00a06d95a598ea9de89f3e959998d89db89fd8947698c29d8b9fb6945198809d139f3e940798ec9c5a9e2393e4978f9cd29d3092b697739c909d7492c597769cb59d0e92cd979f9c9a9d0d9331963b9c7a9dd992db98b39cea9daa92db98b39cea9daa925b056c16b81898955b056c16b8189895f028bb2c7d2d9cab062ae22ddd2ee2ad2b2a202e3a2ff1af252acc2dc52e26b17e284e2cec2cb9b28e202925fa24b2b3f7a217a5c0a67eb351a818acd3acc8b27aa9fbaca5ad05b1c3a958ad3daefeae00a9aaac80ad4aac4aa7d5aa19ac60a935a417a940aae4a870986da800aa47aac523f2a34fa757aac0261b20689240aa62281827ee248faad0274824a81decaa8226729e45a68faab326ec9b0aa670aa8624c0112da38faa4c25071b959ec4aa9725471eff9c10ab3825601e289bb4ab8c24241b4a9810acac245c1b6c9876ac532328181f9e49ac042119982ba14fac24161da28fa47fab80a18ba5aaa669a89ea1e1a4c0a5a8a2bf9fb5a3bca4c99f209f00a4e6a4089db09fb9a4d2a5b39a119e6da4eaa5169aa39d10a393a40799879ce1a1e0a36c98c19c99a121a36d985c9c15a19ca24298149caaa01ea2bb976e9b6fa0bba157971e9b52a0a2a17997e79a39a079a13a97b99a0fa044a1f196869ae69f22a1ae96609a999ffba06c961c9a589fb8a0cf95fa99029f8ca08b959999c79e52a0ff9435995b9e1ca0b094cf98fb9dbf9f69946e98ab9d439fda93e1973b9daf9e6a936897ee9c459e1293f5969f9cea9d589218977e9c8b9dab92fb95219c4b9d22920b98f89b289d8d900b98f89b289d8d908880659bf79c12948880659bf79c12940829e92cc52d4fac562b4f2f2430eaae352be62e003074b03b2b792eae2ffab14229d42cb12d87b308246927b22863b402a394a55fa644b475a842acc9ac60b317aa99ad5caecdb185aa05aee4ae0cb0bda937ad1dae37ada1a86cac41ad22ab75a786ab65acc0a965a4e6a966ab5ea9321859a6caa8b6a9a425571201a03daa0e284f239a19fdaa2528e620d49976aba427331901a343ab8227eb9882a446ab0528a11be5a127ab39280d20be9e17abd225e61a95a0a4aaf1254b1e029b42ab88268b1e579822ac3525091d2a9b45ac5a243b18429e73ac3f220c988fa157ac2d16daa224a5acabb5a1bba58ca69ca75fa17da55da6ffa1cda0f5a4d5a5a79f12a051a430a50f9dc09f3da43ca5269ca69f81a49ba54c9b139f24a434a5c89af89d80a3a9a4129a7f9dc5a273a4cb99399d52a216a45899e49cb3a14ba3d2986d9ceba01aa22898279c97a0c5a1ad97ab9b72a0b2a1d697299b4aa07fa19097af9a26a060a13c97349af49f34a1ee96d299889ffaa090968e992b9fc3a0ec956499e29e9ba0b1955c99849e5ca018953999139e03a0c09403999c9d7c9f2f940e995c9d139f8293cd98309de69e44936298189dbe9eae923498039d549ea4928296a09c249ec7914598539c839d67904598539c839d679000002a9ca49cde9400002a9ca49cde94ad298f2dd02e0ead9c2b7e2f3c3047af302b202f1e3098b0d12a9d2e9a2f06b2b429872d4e2e72b3c424fc28a5294fb4839c4da0e29d2bb41da810ac62ac60b325aa79ad3daef0b1c5aa2daee2ae2cb046aac7adb0aeaaad46a9f7acc9ad00ac6fa853acfeac14aaf7a644ab63ac5aa9b0a204a942aa2ca9041f65a453a7b7a95b264d1290a1caaa3d288d1f06a03cab7128dc1daba16eab8328981d71a17eab7028d01e61a079ab65280220b19e90ab2928b0202d9ba9abc827a7203c98f7abeb26db1f099b10acbd25fe1ceb9c3cac7f24b41190a069ac74222f98b7a17dac0d1b74a15ca488ab22a15ba5eea6d6a6fba1d5a5fea6cba0d0a15aa56ba6d59ed1a018a52ea6219db6a00ea539a6a09c8da0f2a40ba63f9ce89f57a46ca5dc9abc9eb8a3cca4529a409e33a36ca4d499829d97a20aa44699379df4a16fa30999c39c78a1d0a29398679c22a176a28698049cf3a03ca24f98aa9bb5a0fca15098479b8ca0d5a11e98279b52a09ca1bf97c19a18a066a15597869acd9f43a1fe967f9a549f20a13f966a9a009ff0a0aa954f9ae69ed2a04795039a889e83a0b7945c99fc9ddd9f19948e98749def9e8d932798349da29ee69200981d9d3c9ecd932e969c9c089e49936798c39c6a9ea0906798c39c6a9ea09000003192459192940000319245919294132aef2d152ffeac7b2b7e2f4e3047af242b0a2f1b306cb0b32aa52e7b2fb6b1ee28052db52d29b37d26822a622b2cb49e929316891708b458a522a9b6a9fcb254a918addaadb4b143aa03aeebae21b01baacdadb4aee9ad2fa922ade1ad73ac72a87aac11ad90aa9aa782ab66ac3ca9e0a541aa6aabd2a832a161a887a91fa9742151a21aa6e7a97027231204a330abca284d1f97a001acea286d20a1a02dacef284a20449f25ace428e420589d2faca928d320399d39ac3028bf20389b55ac7b27b020199b76ac8c26741e079b9eac9225f81cd39cc0ac39247911249fbfacbe18e3a2ada43bab8aa26aa6afa7cfa53ca1b2a5d6a68aa060a174a585a6409e0aa160a580a6459d17a15fa575a6109d00a13ca559a6b29c16a076a486a5d19ba99ef1a305a5cb9a229e67a3e0a4549a159e00a37fa43e9a679d5da2e8a39c99079dd5a136a32399b09c6ca1d1a2b998529c22a19fa2a7980d9cdaa050a26598929ba1a012a22698029b5ba0d9a16c97a69a31a091a11197719a01a052a16896149aaf9f07a1159699993c9fbaa06b950099b29e65a0c894a3982d9e0ca02f943d98ac9dc89fc5932b98859da49f27934098619d3f9f91925d98719de59e22930098449dec9ed392fc98519d0a9f5d93fc98519d0a9f5d9300007d99059a509200007d99059a5092ab299a2d612eb0acaa2a5f2f2e30f4ae7b2aa62ec82f31b0432a502e592f6db11b29412d3d2eadb2e6237b27be28bbb316a044a413a49cb370a67eaa7faba0b2e9a8d0ac9dad63b1bca9c5adaeae0db0b6a9cbadd1aee7ad15a91fad19ae5eac53a893ac4dad82aabea718acc1ac2fa9a1a618ab33ac7aa860a50eaa0dab1aa817a17ea8c4a939a8082255a397a680a90128681bbaa250ab4c29ce21979d35ac8c298f22b69864ac5c295523299295ac192941230d92a0acd42873220192caac5c286c22f691ddac7c27e5206f9821ad2826ba1e459b47ad382499915fa007ad0115bba25fa5ccaaeea1e7a53ca7c2a423a25aa561a63ca087a15ea580a6f69e51a15fa58fa61f9e20a146a575a6829dd4a031a55fa63a9d3fa0c1a4f7a5ac9c309f35a478a5c59b5d9e88a3c8a4ca9a159e1ea36ca4469acd9dc2a248a4319aae9d96a226a4e799439d24a2a2a37199949c9aa119a3f798299c40a199a2d398db9befa047a28a98879bb2a0f8a15298249b7da0b3a12198ba9a3ba063a1c897569afd9f15a10197149a8f9fcda0a096ae990d9f8ca0f2953399a79e45a05395c898399eed9fb6948798dd9d9b9f7c9453988f9d439fb39359986f9de59e0e942297f09cd19e72933798969c0b9eef903798969c0b9eef9000009392e4903a9400009392e4903a945b29aa2ddd2eb0acab2a442f2f30f3aece295f2e452fecaf2d29e92d7c2ee2b0ef26b12c6f2cecb17f211429c42785b2a99d6d95aca13ab2b9a4e5a8fba9bab122a83eacf0acdbb0eda854ad35aed5af2ca993ad7cae93adc2a807ade8ad37ac3da87eac44ad8eaa87a707acbcac40a95da61aab2bac72a8cca553aaa0abbda70aa5b8a9adaa95a75ea18aa8d5a9dda73f1fd9a499a7eba8dd271a18d0a219abcb294423a09872acf72976243f12ccacae2915242b1201ad77291224961830adff280e2483185cad5f288c22ef1189ad07272320529899adec23c6977ba1d1ac1e9cc3a434a622a9c9a148a692a771a2f4a1ffa53ca738a0e0a188a5f3a6469f3aa152a574a6fb9ddca023a537a6e39d8aa0dea4f4a5339d1ea09ca4afa5cd9c789f57a45fa56b9c1b9f07a4e9a40d9cb89e54a392a4a09b339ef3a268a4c19aaa9dada240a4b79a609d4ea222a4fd990f9dffa1aba39399a39c86a101a3d8985e9c1fa19fa23a98fc9bd1a033a2df975f9b83a0d5a1fe96d59a37a08aa12d96759a05a044a13a96459ac19f0aa10296dc995b9fc1a0c3958a99fb9e84a03a954299989e38a0fe94d998069ec79fa894a598c69d8b9f4294d398b29d399f339499973e9d2a9f26945d99169dc59e34945d99169dc59e34940000e393569342930000e39356934293eb28662d9e2e85acde29a42ec02f71ae4329ef2d172f67afe528bc2d982ec2b065263c2c892ce3b13a22a0283128a4b2fc965215569672b2a2a32ca8c0a8aeb156a716accdacd0b0ada855ad47ae5fafcfa865ad6dae65ad67a8eaacd2ade9abc9a75dac40ad1aaa0fa704acbeac0ca95ba632ab41ac57a8aea57baac5ab96a73aa5efa913ab6ca6eba4d6a9fdaa51a618a304a950aab9a622197aa548a872a85326da90aaa2bfaa4329b322d09174acbd29be24a11b2badd029d9245f1d79ad9a29db24451daeadef280f247818d9ade7260a1d579e72adb81ea9a13ba59dab70a1cba55ba764a628a288a603a87aa014a21ba666a7249f4da19ca5ffa6de9e06a15ea584a6af9ecaa037a560a60d9e7fa018a53ca6b29d1aa0bca4d8a52b9d849f83a4a5a5cd9c359f58a489a5939c019ffaa309a51a9c169e08a367a4279bc39db2a234a4bc9a529d5da2fda3549af79cf7a184a3de99d59cb2a14ba38a99b69c98a1fba25399779c57a1bfa208991e9c16a16ca2be98b79bb8a0ffa13498009b55a08aa15c97de9afe9f31a1dd96769a6a9fd5a01e968c99d19e74a065951a99629e28a01a95b798f79dba9f90949c98b59d3b9fd2939c98939dba9e3a9311980f9d729e3f92e198279dc59e1394e198279dc59e139400002b936899059200002b9368990592ac287e2d482e8bac9929952e05307cae1229002e4e2fb3afa5286d2d502ee2b0a025102c2d2cf1b1e5205828eb26bbb2af997a95db9ca1b272a39ba8aca9d6b112a747ace9ace0b043a82cad43ae6faf6ba83aad43ae54ad3da8d5accbadbfab79a754ac10ad0daaa9a6dbabaeacf0a8f8a525ab39ac3da85da56eaa96ab2ba7f2a404aa3fab12a6bca4b3a9e6aa8ba5a9a46ea98eaa61a590a428a948aa7ea5a59f1ea864a9c5a665211ca20ea6f3a88526271c05a057ab2e28e0207a9a96ac4328a821e997f3ac1c27c51df09ed9ac0522019f39a4e2ab889de9a441a6d6a7d2a037a5a0a6f2a15da1dca52da7e89e80a1f8a516a7c09e55a1d9a50da7719e3ba1b3a5f3a6689e19a1a4a5dca62e9eafa033a545a6a19d23a090a4bea5d19c919f5aa490a57b9c169f27a442a52e9caf9eb6a3c6a4949b579e4da393a4189b1f9e02a36ca4f89ade9db0a243a4949ab49d9aa240a45b9a549d57a226a41a9afa9c1ea200a4c499859cb2a18fa35e993e9c4ba1eca2b7981b9cf3a07da23498c49bada01fa2f197789b42a093a1e2960f9b9d9f05a12796f699eb9e82a011956599ba9e49a0ee943e998a9e3da04a9404996d9e46a0f9931f99619e24a0ea936d98119ee79f1593c4991a9ee99f9293c4991a9ee99f9293000063910f914090000063910f91409063283a2d562e63ac3229752e7c2f45aebe28df2df12e6faf40285b2d202ec1b04925b62b212cdcb1a2213e283428a9b24e9651955f9670b277a3d9a89ca9beb169a62bacd3acc0b0d6a719ad14ae2aaf14a832ad45ae32adb0a7c3acc4adacab09a73cac15ad12aa67a6a4aba0acefa8dca51cab5cac25a85aa559aab9abf4a6b6a4c5a9ecaad2a57ea491a9a4aa6da549a46fa9a8aa1da508a4fda8faa985a417a363a83ba91ea48ba1d6a7ffa8bba4d59eb7a63ca804a6ea8be3a470a6c4a7241bdea365a596a81d8cb3a408a62ca808a015a681a7eea580a1a8a61ba8d6a29ba17ca61aa895a0b8a14ba6c8a705a05da10aa662a7809f3ea1b7a510a7189ff5a067a5c0a63d9ea5a032a57ea6929d60a009a52ca6729d2da0dea4f8a5239dc79fada4bca5d09c699f6ca468a5a79c0d9f27a42fa5459cab9eeaa3f5a49b9b919e8ba3caa4179b619efda274a46d9a259e93a22ca4fb99af9d1ba2cda38099fc9cb7a164a32699939c5fa1fda29098399c1fa19da25a980d9ce2a041a21b987e9b9da0efa1c3971f9b60a0aca100977b9a0ca05fa18b96ef99809f0fa1c0955799e79ebaa05a95ed986c9e71a0cf94d098319e48a0af94e798349efd9fb1947598e69ddf9f35940a99ce9d9d9f64940a99ce9d9d9f64940000e6989999d88f0000e6989999d88f2e28e42cd12d3bac90284f2e582f36ae5d28a22dd32e42af0028802d832eaab0bd25102cbc2ca6b1c9217c28f2286eb2ed98c39bd99f2fb252a3f5a8c7a998b1f0a5e3abbbac95b05da7faacf4ad08afb8a72bad2dae12ad33a7c0aca0ad86ab46a612ace3ac98a9b3a53eab5aac79a890a5f3aa25acb8a72da575aad6ab83a6a7a4d9a919abb3a55ba469a98eaa17a51ba40ea925aa95a4b6a3baa8cfa9eba33aa385a87da942a3b3a226a809a97ea216a2bca7d2a8c8a17ba2b7a7b6a833a228a204a767a8c7a1dda1cda68aa856a1c0a1b0a630a84aa1aca1a5a60ca86da07fa124a6a5a718a049a1b2a5eaa6b59ffba06ba5b7a61e9f08a13ba57da67a9ebea01fa557a65b9eada021a554a61d9e9ca00ca554a6dd9d8aa0d4a4f7a5789d22a067a479a5dd9c849f32a460a5869cc79e11a461a5789c7e9ecca326a5309c2d9e6ea3b9a4ce9b039e02a35ca4989bb59da0a23ea4199b529d54a203a4a29a099dd5a18ba3cd997c9c44a1dea23d99139cbca036a276989a9b6fa0eba1fc97419b55a0afa1ba97299b39a08ea12c97249b2ea078a1af96239b0ba04ea124969d9be39f16a1aa95ab9a5d9fcda00895dc99ce9e5fa0789466999d9e03a09e94af98479edd9f6e94fb989c9d579f9b93fb989c9d579f9b93000006979b977f82000006979b977f82fe27f22c052edeab58284b2e322f1daef8278e2d992e41af3327402deb2d99b08c24b22be92b7bb1e120f3286b2806b27495fd141c96e2b1bfa2cca8a0a958b190a5edabcfac74b0cca6f2ac04aeb8ae06a7e5ac16aee5ac5ca667ac5cad0fabd6a5daabc4ac5aa972a502ab48ac48a824a590aa00ac31a7aea412aa6aab04a66da4bda9e5aa33a52da45ba971aaaca4e6a30da91eaa67a45ca3d3a8eba922a438a38ba891a97ba3c4a239a821a9f5a291a2d7a7c3a831a276a28ca77fa89da17da26aa774a893a1c7a259a769a85ca1f4a21fa74aa830a1a5a2c9a625a8a9a05fa28fa611a83ea0dfa161a6fba730a065a1fba57aa7bf9f2aa1b1a5efa62a9fd8a056a59ea6eb9e8aa01fa53ca6769e50a0f5a4ffa5179e16a0bba4daa5aa9d699f81a49aa5319d2f9f5ba465a5d89cd89e2ca433a5979c9a9e05a403a5529c479eaaa3c7a4329cf19d59a398a48d9b7a9df1a25ca4fc9a219d79a21fa4709add9c1ea2caa3f699bb9ccfa167a35d99ad9c9da10da3e798729c49a1c3a29d982e9cfca071a22698bb9b8fa0fda13997e89a27a086a14e961e9a599fc7a05595dd99c89e4da0f8946e99629e3da0ba942699499e46a0709415990e9e23a05e941498389d139f649311997b9ca59d009311997b9ca59d00930000f1967e9878020000f1967e98780210279f2cc02d83ab3e280d2eff2ef7ad8027792d852e0dafb1260e2ddd2d8ab00e24452b172b61b18b1e3527af25d6b1fa995f9b4ba1a4b168a20ea94aaa2ab13aa512acc0ac5cb090a6daace9ad99ae85a6eeac0caed6ac1ca67eac6dad1caba6a5d3abb6ac1aa911a5fcaa43ac12a8cba458aabeabbaa687a4e9a929abc2a53fa47ea9baaafaa4dfa323a951aa4da471a3d2a8daa99da309a381a874a9d1a2b1a24da845a937a291a222a8fba89aa13ca29aa798a827a1f6a11ea74fa896a0aca1dba641a8a5a0c6a1bca618a8b6a0aea18aa6fca77fa092a140a6b5a76fa054a1f2a560a726a014a19ea5eaa6ba9fdea04ca58ea62b9fada020a56ba6d59e98a005a542a6ca9e7ca0fca428a68d9e53a0e9a409a6489e15a0cba4eaa5e39db09fafa4c4a5789d759f7ea4a3a50f9d419f5ba468a5bb9c059f2da428a59f9c999edba3dea4419c689e55a3a6a4da9bd99dbba257a4229b589d48a215a4959a0f9ddaa1c7a3d2999c9c57a130a342991e9cefa073a2cf98b89ba1a0faa146982f9b5ea0c4a1b597499b59a0b7a13d970e9b2ca099a19a96c49ad89f40a1a295709a789fd3a00e950f9a239fa5a0e294d899f99e75a08794c399b69e2ba0af94b9981a9edb9f1694d598ad9d679f2492d598ad9d679f24920000458749080e8a0000458749080e8a5026622c972d25ab6f27982db12e98adf8263b2d482ea6ae7026d62ceb2d55b09623022af82a22b1431d9524d0249cb1c194289b6b9c67b198a19da86ea9eeb008a50eacc7ac16b0fca5cdacdaad48aed6a5b3accead85ac72a527ac2cad7baa0ca578ab8baceaa8b3a4deaa3cace7a76ca442aa9eab35a622a4ada9d9aa24a5dba36da99aaaa6a492a31aa93faa34a41aa3bca8c9a92aa3cea276a85ca973a299a23aa82ba91ca240a20ca8e2a87ba135a2a3a7a8a82ca115a224a75fa8d6a0cda1c3a621a895a0bda171a6e9a727a0a6a124a68aa729a078a1e7a53fa77c9f22a194a5e4a6719fd8a05aa596a6069fb6a03ca570a6fc9e8ea011a539a6a89e52a0eaa40fa68d9e2ba0baa4eaa57c9e33a0bba4d0a5389e11a08ea4b8a5149e0ba07ca49da5709dd59f47a46ea5349daf9f1ba421a59f9c539fe1a3eda4489ccd9e92a3c7a4329c829e5fa39ba4e69be29d0fa36ea4659b7e9db8a23ca4e59a249d50a211a4269ac09ce3a1a5a3ae99649c58a119a3ef98219cd1a085a23f98c19b71a0fca1d6974d9b11a091a1ea96ae9a789f16a11a96049af59eb7a06495bf99ae9e98a0f394ac99859e6aa08d948a99549e48a032947a991b9ecc9f1894b0988e9d569f1f93e7982d9d0d9fdc90e7982d9d0d9fdc9000003d968e96289000003d968e962890ee24612ba92c12aa5c26062df12de0ac3026d92cf72d17aeac25922c7d2d10b01123312ae42ab7b0ca1cff24d923f6b07a9a27a1caa3d4b075a1afa888a962b082a494ab6eac66af1ba573ac94ad93ad57a574ac8bad1aac2da528ac28ad06aad3a461ab83ac75a897a4b3aa14acffa673a42daa99abb2a540a4b2a904ab93a4cfa34aa97eaa11a429a3e7a8f8a935a3a2a286a88ca958a252a21ba812a9dca101a2b6a7c3a83ba1e3a156a785a8b9a0cba10ea759a88aa0b1a1e2a630a897a074a191a601a861a04fa15aa6c1a7e79f09a1f7a54ba76a9fe1a0c3a509a76e9fdaa08aa5c5a6249fb8a04ca59aa6d49eada00ea551a6da9e89a0dea404a67d9e54a0aca4d5a56d9e2ea0a5a4d8a5aa9e2ca0aca4c3a5519e01a094a4d8a51a9ebc9f78a4c7a56c9d5c9f5da4a5a53e9d0a9f37a470a5e39cd49e0ba424a5869c0c9e80a3caa4469cdf9d25a38ca4f79b8a9db4a24da4509b149d2da2f9a3689ac39ca5a14ca38f99899c39a1e7a2ec986b9cf7a082a26d98259ca0a01da27b97fa9b54a0c9a193964f9b11a06ea1d695bf9aac9f15a14095589a3f9fc4a0f594499ad39e78a06f94609a799e30a03f94779a4d9ef99fd093759a339e919f2794bc99ce9d739fc79295994a9deb9ee99195994a9deb9ee9910000c196d498d9980000c196d498d9982223be29182b90a82124bf2af92b87aa0824b42a142c6facf224be2b862c31afe822052ab02a4bb0b31d7f2554254db08896a69ac9a054b07aa0fda7fea8edaf15a40bab43acdfaed8a458ac35ad3ead04a572ac5dadafabd6a400acf0ac76a96aa40dab62ac82a741a483aa06ac17a6fca3f3a959abd3a41fa351a972aa0ca499a2c1a8d2a9e6a26da268a86ba915a238a221a811a968a106a2cca7c9a8d4a0dca18ca795a898a0aea10da75aa81ea05fa1a6a611a8c49f57a14fa6baa7ed9e1da100a660a7969e08a1bda518a74d9edca077a5c9a6ff9db0a047a58ca68a9ea4a02fa563a66c9e6da020a551a6989e64a0fba425a6689e68a0e4a40ca6869e39a0d8a4ffa5e29e2fa0c2a414a6c09e0ca0b5a4faa58e9ec39f86a4b5a5349e7f9f5ea472a5e79d5e9f4ca470a5839dec9e24a460a50f9d809ef9a3ffa4a69c199e7fa3b9a4459cf69d1ca37da4899b889d97a240a4e89a3d9d0da2dfa3479ad39ca4a15fa38e99b19c58a105a3fd98609c29a1a2a28d98309ce5a050a21e98059c9fa0f2a16597c19b53a08fa1ec962b9bed9f1ba168968f9a0e9f7ea07795c999859e1ba01a953e99159ee49fdd940c99ec9dc19f89944099c49d789f7694e7986e9dbe9f9b93719a899d0a9f9494719a899d0a9f94940000b00fde1343930000b00fde134393ee22c029ee2a97a887233e2a302b3eaa3b23062a0f2b26ac5c243a2ba12c13af4423282a5e2bf6b0c41eba253a2676b1b293d49d289f35b18ba05ca886a997b086a329ab69ac54afd6a464ac89ada4adb7a43bac4dad79ab98a4b5abc7acc6a836a43aab5cacbea6f7a376aa15ac4ba552a3cca930ab5ca49da208a931aa12a32fa26ba85fa979a1e9a119a8fca87fa0c0a1e1a7cfa80ca0a3a15ca78fa8299f5ba1dfa63ea8ce9e23a18ca6f0a77d9edba01fa670a7a49ebca0bfa5fda6e99d94a075a5bca64c9d6ba046a563a61f9d4da000a514a6db9c21a0a1a4c3a5969cf99f81a49ba5759ce89f7fa47aa5b79cd19f69a477a59f9cbd9f6fa468a5229dd19f74a48ca5f09de49f9ca4cfa5a99e15a0d9a412a63f9fec9fbba4d8a5d99e479f97a4aca5879e189f63a49da5129ed29e03a451a5499d6a9e89a3d9a4bc9c4a9e16a381a4269ce69da7a239a4569b6d9d3ca2eda3cd9a1d9de3a176a31c9ac79c79a10fa37299a79c34a1dca2e798689c05a18ea27998569cc6a058a241982e9c9ba015a25e970a9c62a0a4a10297759b0ba022a12496b09a7c9fcaa06e95779a0a9f8da0dd94289a8e9e42a0a094089aee9ddd9f1094c599819d3c9fb693a399ee9c979e9c930999d39cd49eaf900999d39cd49eaf9000003815f0179b9500003815f0179b95f4234f2aef2bfca89024092cd22c18aca8241c2c162d8aaddb241c2c2d2ddfaf4722cd29e72ae9b0c81c56251b2571b17e988f9d30a23eb185a049a863a994b06ea32bab85acaeaf9ea44aac83ad8aad72a41bac21ad13abf3a300ab65ac26a816a3dfa938ab00a553a201a938aa15a37aa16ba86ba92da1c7a092a7ada80ca0a7a01fa744a8779fcba0daa60ba8a69ea7a082a6bea7d09d99a035a671a7109d93a0f0a516a7d89c90a08fa5a5a62f9c7aa056a55da6049c74a004a513a6e39a62a0b6a4b8a5d5995ba078a471a5e49833a067a43ea5149806a045a43ba50b98ec9f27a419a50498ae9f19a407a5af98799fdba3eda4019a839fdda3efa4529cb69f14a421a58c9d34a081a4b8a5a79e95a0eaa42ca6779f70a0eda434a6959fca9f87a4c0a5529f9a9f30a46da5a49ec19f04a40aa50e9eb39e55a381a4009da29dd0a240a4249c6f9d77a216a4229b439d35a2eba3809af89cd5a187a3cd99dd9c88a123a3fc98949c35a1b6a26d98219ce3a046a2e697c99b86a0dda1f0965d9b3ea089a138960d9bd09f1fa1c995729a3f9f9fa05f95089aa29e36a0f8949199489e03a0c1944299019eac9f9894d598ae9d5d9f3094d398a49d169f299471986f9d219f8893bb98429dca9e5e93bb98429dca9e5e9300009e0fd012549400009e0fd012549446230e2a962be6a865249d2ba52c9dab2a246f2b992c12ad4d244a2bb82c28afa922f8297c2ba5b09a1d8f251a2665b1f095549a87a03db1539f36a78fa893b02da238aaa9ab42afd2a378ab8fac07adc5a37babacac19aa45a3baaa3eac4da787a2afa9d0aa47a49aa1b1a8b5a9e7a0439f03a676a7de9aa49ddba390a46096b49fd0a4dea5e29910a08ca5a4a6779ab29f14a533a6269a999feca4dca5f7997b9fa7a4bda5c299929f8fa488a5e498ae9f7ea495a51498db9f6fa482a59596b69f6ba461a55f90869f52a445a5d1893f9f00a4dba4e289cb9efca251a4f689209fffa256a4238a249ff3a283a4438af89e3ba395a4c190159f60a3aca4e7990a9f39a46fa5819d8b9fe1a43da6b29fae9fd8a41fa6a5a03e9f7fa4d8a544a0c09e65a4a1a5609f5c9e1ea445a54a9e299eeda319a5989dfd9da9a3eba40d9db39d07a389a4459c3d9d65a22da4699bd39cdea19ca3779a999c71a102a37899419c1aa198a2a5980d9cb9a051a21998da9b86a0faa10497e79b62a0d1a16d960e9c4aa0aca1df95199c2ca06da1b595689bc39f07a15d95f999079f9ba09c94b5995f9e50a045943799f99d07a01894e698779d3d9fa9939898249d7d9ed9935397979c2b9ebe9244987a9ce19de19044987a9ce19de19000003c0e1a11689600003c0e1a116896f8207628c72961a788229029f42a90a903228029d42a61ab1621b828162adeac0d20ea269928ffad7f1a1b217d2299ae908acf916d93c2aeea9aeea212a49cae9f9e88a6fba71dae72a165a98eaa96abd1a2a7aa17ac5ca72aa368aad0abb6a3dda157a95daa04a101a148a86da9c59f23a00aa758a8049e869e6ca5e2a62a9d4d9edca40aa6d09caa9eada4bda5a19cd09ea4a4bda5819c079f9fa4a4a50c9c499f8fa492a54c9b6a9f6ea469a56a9a3e9f55a446a59c992f9f42a430a52497309f46a418a58f94ed9e11a4f4a4e28f3f9e1ea34da404104d9da1a1f9a280189f9c8da09ca1101bc19c65a056a1c51b7f9d53a13aa2cb1a369e5da2cea3c4912d9f51a468a5ce9f13a079a5f8a6f1a108a0d2a57ea7f3a1da9f34a584a6d2a0f39e52a461a5809f7f9e4fa3e9a4959d1d9edaa2a4a4929c809d43a220a4e09beb9cc8a1afa3da9a939c6fa15ea3e299359c31a1fca25599139ceca0a0a2c998b89b8da003a209984a9b3da06da11297169b01a047a15696d99ab49f1ea11996ae9a609feba08695599af19e99a03395d0994a9e2fa07d946199f89dd29f42940999d59d8a9fe793ed98b59d5b9fd293ca98839d159fa393ba98359d8f9edd931298ae9c1c9ee9918a98429c889def8e8a98429c889def8e0000dd926e91dd920000dd926e91dd92da1b1124ea24cfa34d217228712997a8ed208328cb290faa052068279b2843ab3b1d9c24cb25e0ab5518061e7a1f42ac8a933c9c669d34ac4a9ac2a209a439ac13a038a8e2a885ac41a499abb8acd2ab9ea291aa04ac24a938a0b2a8c0a92da6009feaa67aa81fa4aa9f7aa624a84ba33da025a645a74da2359f54a58ca619a1fc9d86a4bfa552a0439e4ea45ba5be9f209e21a40fa5209f3e9e04a4e1a4a19eeb9dd6a3aaa4cb9dcc9d9aa389a4119dc89d70a382a46c9ce29d1ca353a40c9cfd9deea231a45f9be69db9a201a4c8992d9eb7a2d1a3d297fc9db3a215a41595889d1ba276a3f916c39b909f56a0901f359aa999a0988f22ac9b099eb99f751f57a0aba519a71ba2eca03ca7a6a839a501a01ca69ba780a3659f99a4d7a583a0ab9deda283a4f09d1a9d28a2eda3b59cdd9cbba145a3eb9adc9c66a1d9a2de998a9c12a190a2fc986a9ce1a04ba2be984a9c9fa0f3a17e980d9c70a0c4a11198d99b34a088a155976c9b09a051a1f596419bca9f20a14d96009b549feea09b95ad9ae19ea5a0f694419a9a9e60a0c394129a429e14a04a94c399ee9dbe9faf938799ae9d809f5d933c99719d3a9f2293db98339d009f6c929698f09cc19e2b9296978b9c889e60910198769c1d9eeb900198769c1d9eeb9000004d85e9014f9400004d85e9014f943d1ca7239f242da3cf1f69278e288aa721207027b028d3a8be1e2e26af27a4a9c41c1524152536aa831532192c1d2caaf3968da04ca182a99a9d44a559a602a8259b1fa335a41fa30c908e9a3e9c319e1396df9e9e9fdda19b9cefa387a47ea4309e4aa56aa638a4f39d47a5f6a6e2a21d9e22a562a68ba1089ec9a4d2a516a1b79d64a47aa56fa0959d2aa437a50da0c09d01a4e6a45d9fdc9db5a3c6a4cd9ef39d8fa399a48e9e2b9e8ca397a46e9e259e49a372a4f49d039e2aa368a4c29d3c9e22a35aa44e9dec9dd2a240a4c49ce59daaa238a44d9c1a9e17a212a45e9ba09da3a115a3b79a8899efa080a23299daa0d0a61aa7ac9f599f17a504a56fa48aa1cca7c2a824a5e9a007a743a87da03d9dd5a055a3be99319f2fa1c9a38999149dd4a0e2a2db98fa9cfda0a2a2f598d29cf0a087a28f98f29cfda06da25198a69cd3a031a22198a59cbfa01aa29897529c8ca0e8a13297139c60a0afa1ec96a19b22a07fa18a96329bc99f23a11796bb9a419fcba0ac95969ad19e82a00795499a749e42a0c294269a379e11a09594d8990a9ee79f2f947299d99dab9f95932699ab9d819f5993cb98529d299f7e929f98049dc59e30927898ac9c259e4292c897019c7e9dfa9089980c9c3c9d5d9189980c9c3c9d5d910000d588048329910000d588048329911b1f03269e27c3a4731fa226102848a64f1e8625f32643a7dc1c482453251ca8cc190921e1215ba8a910dd12b80d0aa81c985fa077a117a7709b39a37ba49ca52f9a71a2d1a324a4b7981da112a2e3a272995aa1a1a29ca3539bbaa21ca42ba4469c80a39fa452a3879cb4a3d2a4d7a1ec9c05a4f8a439a1249d07a40fa5b3a0379dc6a3e5a44da06e9d7ea3bca4909f9a9d3fa38ba4e89eac9d1fa360a4669eae9dfda25ea4ea9db39df5a247a4729d859dcba22ca4fe9c749daba21aa4d29c6f9d9ca212a4b29c5c9d8ea2e8a3959c579d7da2efa3429c669d71a2d1a3e99b479d54a2e1a3a79b659d5aa2f3a3739b5e9d11a27ea3309aca9a00a0f5a0a49784905b98339a3e91d290cd96699869919497b29baa9c88959899ba9e41a07c97d39bcf9f15a170977c9c16a03da17a97629c12a033a14397109c13a02ba11697b59b08a023a1d996899b09a01aa12797739b07a017a197965d9beb9f05a16996329bb89f03a12d96089b8f9fefa0a395bb9a319fe6a05d956a9a069fc1a02d95ea99a79e8fa0e994b499639e5ba0b6945299fc9d28a031940d99a19db89ffa93c098549d4c9f8c937c98fa9cd09e22933298be9c679e5b9236988a9ce09d9592f597779ce39d939103985d9c639dc18f03985d9c639dc18f00004f15e615678e00004f15e615678e7f1d89249a2593a2741dee242626baa4ae1cfe23242561a5881a5f21b022a5a51b17921deb1ebda51084529468955aa51196609e909fe2a492988da026a16aa4af9801a1cea178a3e098cda0cca1baa22699fba017a291a2f49956a18da25ca2bb9adca12ba3b6a12a9b04a25fa3dba05e9b2ea2bda355a07c9b41a2c9a3d69fa39b26a2a5a3029ffe9b1fa296a3939e2a9c1ba2b6a3aa9d639c38a2afa38a9d9f9c4aa2b4a3279ddb9c58a2d5a3c69cde9c65a2d6a3dd9cee9c4fa2e4a3b79cf49c57a2e3a3949cfc9c57a2cea36f9cff9c39a2c6a3489ce69c2da2a9a31e9c1a9d14a2c8a3fb9b3b9dffa1dda3a39b209df9a1eba3d99a3b9d97a159a3749a049c48a08ca187989b97949d429fc4953a96e09c289e78951598979def9e0a96739ae19e42a06e97949b6d9fc8a0cc97509c8b9fe3a09997829caf9fefa06f97339c709fcba00297be9b389fb3a0b896509b249f9da02296f09af49e87a0e695769aa49e68a040951a9a6a9e52a00395fd993a9e3fa08494e899009e26a05a94cf99d79d0ca0ec93be99b89ded9fac935a997f9d829fdc9224993c9d089f8892c898f39c949e2e928798bf9c3a9eec9141988e9cf19daf9138987f9ca49d0892b797619ccd9de09189972f9c589dd69089972f9c589dd690000000000000000000004f15e615678e7f1d89249a2593a2741dee242626baa4ae1cfe23242561a5881a5f21b022a5a51b17921deb1ebda51084529468955aa51196609e909fe2a492988da026a16aa4af9801a1cea178a3e098cda0cca1baa22699fba017a291a2f49956a18da25ca2bb9adca12ba3b6a12a9b04a25fa3dba05e9b2ea2bda355a07c9b41a2c9a3d69fa39b26a2a5a3029ffe9b1fa296a3939e2a9c1ba2b6a3aa9d639c38a2afa38a9d9f9c4aa2b4a3279ddb9c58a2d5a3c69cde9c65a2d6a3dd9cee9c4fa2e4a3b79cf49c57a2e3a3949cfc9c57a2cea36f9cff9c39a2c6a3489ce69c2da2a9a31e9c1a9d14a2c8a3fb9b3b9dffa1dda3a39b209df9a1eba3d99a3b9d97a159a3749a049c48a08ca187989b97949d429fc4953a96e09c289e78951598979def9e0a96739ae19e42a06e97949b6d9fc8a0cc97509c8b9fe3a09997829caf9fefa06f97339c709fcba00297be9b389fb3a0b896509b249f9da02296f09af49e87a0e695769aa49e68a040951a9a6a9e52a00395fd993a9e3fa08494e899009e26a05a94cf99d79d0ca0ec93be99b89ded9fac935a997f9d829fdc9224993c9d089f8892c898f39c949e2e928798bf9c3a9eec9141988e9cf19daf9138987f9ca49d0892b797619ccd9de09189972f9c589dd690000000000000000000000000000000009221a726002848a486258329cb2a6da982266c2ac12b6eabe125e329182b67acfe244229722a27ad4f230328cf282faea31dd1216b24a5ae2199bd9b979924aecca0fea48ea599ad45a461a8daa8c4aca2a5bba9adaad3ab9da4c0a885a994a905a277a876a9d9aa521941a769a9b7ac3c22dda269a60daa3e25c390a6a022a9bb26ff20e31011a92927892483201fa9a028aa266923e4abcb244fa0e5a563a96625e69087a084a80d234e1045a181a8d1213610e89fefa84b24ff1c6699c3a9fc24441f741014aaaf244a1e8e1082aadb232c1df796afaaad22c416aa9b8eaa2d218990ea9d97aa5a180ca027a24ba9239f15a322a43da41a9f33a369a42c9e1e9de8a26aa43e9ca29d62a3b9a4559d95a058a5a6a6449f899c03a41ea5a49bb39d35a1bca29698159da7a0a6a163984f9c74a087a16c989a9b42a05fa16598429b12a029a167987c9aad9ff6a027981f9a549faea0d597b699f19e7ca06a977299ae9e4ba00d974f99549e2aa0ae963499289e0fa06c961199069eef9feb95db98e69dbc9fba95dd98c99daa9f5795a498be9d8b9ff89456985a9d019fa194e097c99c4b9ed69376978a9ce59d01935297729cae9ddd9253975c9c949dd0926597839c759dcf934896279c589df893ec98c89c3e9e179400000000000000009221a726002848a49221a726002848a486258329cb2a6da982266c2ac12b6eabe125e329182b67acfe244229722a27ad4f230328cf282faea31dd1216b24a5ae2199bd9b979924aecca0fea48ea599ad45a461a8daa8c4aca2a5bba9adaad3ab9da4c0a885a994a905a277a876a9d9aa521941a769a9b7ac3c22dda269a60daa3e25c390a6a022a9bb26ff20e31011a92927892483201fa9a028aa266923e4abcb244fa0e5a563a96625e69087a084a80d234e1045a181a8d1213610e89fefa84b24ff1c6699c3a9fc24441f741014aaaf244a1e8e1082aadb232c1df796afaaad22c416aa9b8eaa2d218990ea9d97aa5a180ca027a24ba9239f15a322a43da41a9f33a369a42c9e1e9de8a26aa43e9ca29d62a3b9a4559d95a058a5a6a6449f899c03a41ea5a49bb39d35a1bca29698159da7a0a6a163984f9c74a087a16c989a9b42a05fa16598429b12a029a167987c9aad9ff6a027981f9a549faea0d597b699f19e7ca06a977299ae9e4ba00d974f99549e2aa0ae963499289e0fa06c961199069eef9feb95db98e69dbc9fba95dd98c99daa9f5795a498be9d8b9ff89456985a9d019fa194e097c99c4b9ed69376978a9ce59d01935297729cae9ddd9253975c9c949dd0926597839c759dcf934896279c589df893ec98c89c3e9e1794ec98c89c3e9e179409244a28c62872a509244a28c62872a53028182ccc2c18ac4a28372c0d2d1bad4228482c1b2d85aecf278c2b6d2cc7afe6252c2a592bbeb00c210025ea25eab06b9d66a135a1d1b0b0a45fa82aa976b08ea612aabbaa4cafa4a7ddaabfabc0ad43a62fa9ada9a4ab54a531a9f9a952aacda226a9c4aab4aa001573a7aca9ffaa0b24faa1bea5c4aa84265221b218a6aa3c280827fe24eeaaf827fa24c221c1aa1e26489e2ba52caaa2263b9d85a413aa3f267011eaa1b7aa8626a21a61a038abdc269b1d539c3dab2826eb1e579ca0ab7725791c5c9c09ac5c246e1aac9d24ac5922e190b69f00ac1220159ce1a1cdab848eada1b2a313aa07a198a456a57aa5b1a0a0a489a5e2a00aa020a4dda4809f999e8ca2aea3ee9d0d9f90a399a4399c879e1fa42fa57f9add9d5da3ada4ac999f9ce0a1d2a3b398d69c88a124a3a3984c9c11a169a27098ce9b8ca0f0a1f797279b63a0ada10098eb9a3ca07da1ba97db9a29a05aa18197b79a14a039a144978b9ada9f08a100975a9a9d9feea00f97179a4e9fb2a07196e5990e9f82a026968699a79e41a080951f99529e10a03a95dd98f99d8c9fac947298979d1f9f6b94de97349da09e2a943e97cd9c229ede93d3968c9cbd9d1a93c496649c5b9df0924d960a9c269d76921d981a9c5b9d51921d981a9c5b9d5192e823d7278e28a9a5e823d7278e28a9a5cf289c2c722dadac3229142dfc2dd7ad1129242d022e99af7c28722c352d95b04926692a992b2bb1b821a0253d27cbb1fb9c8d9f529ea1b138a593a811a920b18fa7d1aa7eab65b070a8b4ab51ace4ae2fa883ab48acfeac87a76eab44acf7ab79a6d3aa07aca8aaa2a346a998aa16aa131b79a53aa838aa65257b18d09dd1aaaf27c5222a1945abcc2777214593acaba027e718b8a175ab4e271692c2a222abfb26b3112fa209abf32640187ba187ab4d27c71c7aa0c1ab9126b21c089e11accd25921c819c1eacac24cd17009f59ac9c233091c2a06baca520869de2a242acbe94bfa377a50baa9ea11ea5e9a500a549a180a55fa68aa194a0afa47ba50ea0a59fc5a3c4a4989d339fa7a3c0a4dd9cae9e2aa45fa54d9ce39e10a426a5989b379e89a3b9a43a9ba89d06a37ca4a89a409d5ba210a4f699de9c7fa1eaa226997d9cc9a0f7a17c98299c93a0b8a13c98a59b6ca0afa119982c9b48a08ea12898b09a26a061a1fa97459afa9f3ba1aa97e299929ffda04697ab99339fc0a099966e99d69e98a0439649996e9e45a0e5952699f39db49f30951299909d479fa7941199559df89e3894c7981d9db79e0b946998039d7b9e19935198089d3e9e98939f968d9c049e99929698839cba9dd6919698839cba9dd6912222b225b72629a32222b225b72629a3a329a92d632e14ada5299b2d9a2e5dae3d29492d642ef3af84287c2c6e2dbbb0c426ee2a252c42b157223c274928bbb1d59b78944915d4b1b9a42fa8f2a85eb172a785aa69ab95b08ca830acc3ac8aaf90a856acf8acbbad57a845aceeac5cac94a78cab74ac98aa3fa6a7aacaabc0a9f9a193a8b6a9c6a9861eaea39fa66eaae7255b1856a02babe627fb1ee69da7ab1628821d8ea0f7ab2a284b1d53a004ac2428121d2ba0e1ab1928f51cd59f07aca6273d1e3c9e1dac1527251e139e39ac3a26b61cf69d55ac66250918449f7fac43246f91fda0a0ac2f219e9dfba255ace89600a415a5c8a9faa18fa5e4a69fa48ba17aa587a6a0a03ba106a534a65f9fc8a0eca4faa5339e74a0daa4f0a59a9d21a0b7a4c5a5099d699f1fa420a54c9cf79eb0a3c6a4bc9b469e20a35ea4169b769d87a200a46a9a119ddfa157a30a9a9f9c6da1c5a28599569c19a165a23099d79be6a02fa2ed98619ba1a0d2a1a898ee9a6fa09da19b98c99a28a076a122989d9ae39f47a11998699a869f16a17b978f9a3c9ff8a0e196699ad69eb9a03196239ab29e8da0c595cb99439e49a02d950999d29d929f8e946998519dca9e349405981f9d8a9ecf93e4970a9d3f9e5d9498969e9cef9d1794a998c79c5c9ef791a998c79c5c9ef791000052024b0d7f94000052024b0d7f94a328be2cd92dbeac69299e2d6b2eafae3929572d622e0bb05528a02c5f2db6b06426c92a012c46b14223c7278628bcb14f90a21a2215c5b172a3ada6f5a74eb1efa6b1aaa6ab98b05ea83cace4ac88af79a845acfbacfaad28a822acc3acadac49a77eab46ac2cab96a6bfaaceabe5a965a5bfa9d1aa57a9d6a004a83aa960a91a2065a256a52baa34267f913da221ab46283b1d09a110ac7b28c81e58a049ac6c28a61e3ba063ac6528e71f829e72ac2128cd1f689e7aacb327531e4b9e9dacc8263e1e2c9ea4aceb25dc1c1f9ed1acec240d183c9fdaace9207e9e91a23eac169ea0a5efa6c9a8cea11ea6cda76da341a17ea572a6a9a04ba15ca553a63e9fdda01ea531a6fc9db7a01da524a6ac9d72a0ffa40fa6359d909f54a460a5689ce29eeca30aa5f89b7d9e6da3c9a4619bc09dcaa24ba4ad9a1b9d47a2aea3629aaa9cc3a11ba3cc99579c46a1c5a24d990d9c06a180a2fe98bb9bcaa040a28d984a9b8da000a27a98d19a48a0b1a107987f9a25a07ba1b497369ae29f2fa1fe96da998b9ffba0b09671991b9fa9a0ff95f698b49e56a0a895a9983d9e18a00c955698c39d929f759434987d9d649f4b944098679d3d9f93936498769deb9e1294e297409de49ed593af983c9d1e9fdd92af983c9d1e9fdd920000ea9103917b920000ea9103917b927028b22cb52da0ac7529c32db22ea7ae1529702d7d2ee4af4428992c832d85b06126042b222c06b1ac217726812777b1ef984e9a779b7bb1d1a369a770a824b120a641aa32ab75b004a80eacb2ac68af5ea87bac1faddcad33a858ac03ad9cac57a7d2ab82ac34aba2a62aab3eace2a9fba55daa8cab0ea9faa47fa987aaa1a8bea151a86fa98ea89b1da5a461a78fa94026e497fea3fdaa6928d91f03a026ace7287e2179989face52840226998d3aca42826225298edac62285c2146980cad14284e2133982cad4b278d20fc9a35ad7825991a089ffeac561f62a0e9a369abaca0a1a5fca6d4a6eea13da661a7ada2f0a18ca59ca6cda06da157a588a60da027a144a562a6659feca026a535a6f39e7da005a51ea6489e06a0a0a4cea5a69dee9e10a445a5b69c369e4fa3aca4249cfd9d0aa369a4cd9bbc9dbba24da45f9b579d79a21ea4ee9a039d09a28fa3659a7d9c7aa1ffa29199159c15a170a26399ae9bd1a00fa2d8985b9b93a0cda19898e19a5fa08ba16598739a22a044a12898139ad99ffda0e497da995f9fbaa02c976099f79e70a0c796ec98829e2fa01d969d98169edd9f83954698b89d6e9ffd9434986b9d1b9f95944098499d9c9e8594f896d49c779e229456987d9c059e299256987d9c059e299200004c82d90bc09300004c82d90bc0938b28ba2cf32da7ac2129b42d9f2eccaea128282d2e2eaaafbe275f2c272d4ab03e25432a362ba5b0a3208d26a426f2b07298e113c094f5b0d0a21ca7f8a7c0b0e2a529aa22ab46b08fa7daab9fac5eaf23a853ac1dadc8ad07a84dac04ad8eac65a7c6aba6ac52ab95a60aab24acf2a99ea54daa91abeda80da5d8a9e1aa75a8c1a453a95faa34a8a2a293a8c6a922a86792f1a501a899a87a24039e7fa414aa1a28be1d2f9fe6abd528c521339874acbc28eb213598d5ac9828ff21389812ad372845211f983aadb9260f1e9b9c18ad1a24a6993da133ac369381a394a5f5a87da1c8a511a74ba4e2a1dda534a7cfa0bda19ca5c2a669a06ba163a5b3a6f39f26a133a541a6ef9eb1a004a51da6c59e53a0d5a4eea50d9ef19f8ea49ca5919d479f37a42ba5169d1c9fdea3d3a4b19c879e3fa378a4399cf39dcea250a4d89b639d8aa232a4289b2d9d42a206a4b49ad89cd7a187a3ef997c9c6ea1f4a275994a9c17a191a2a198e39bc8a027a24e982a9b74a0c5a1a597c39a27a06fa12297739af39f2da1d496319aad9ff5a09796c7993c9faea059969299ec9e7aa0d7954c99919e2da09a95ea980f9ea59f3a95ba98d19d6f9fd094d698ad9d2b9f7d940498389d169f69945f99379da69e98945f99379da69e989400004b86a908539400004b86a90853943228b32ce32d7dace528a32d962e70ae4d28102d1c2e86af2827442c172d30b0b824d929bf2a8db0a720dc25eb26d5b0738e8b139214cdb05ba1d2a511a792b01fa5a0a9cdaa1bb0f8a6aeaba7aceaaeb2a750ac17ad85ad82a74fac09ad64ac01a708acbeac07ab53a646ab4baccea9afa591aabcab00a906a5daa918ab37a8afa49aa9beaaa4a793a457a985aa39a707a4e4a815aa05a705a080a718a980a7d61c6aa4e6a6eca88a24769b11a398aa6b26121cba9fc8ab08277d1d899d4eac98265b1d7a9e6cac5c248396bea1efab6718e8a303a69ba9b1a028a6a3a7e0a56ba164a6dba757a2aca13ea656a7aca0aea1d7a508a75fa069a189a5e3a616a0dca040a562a68c9fa4a011a523a61a9f37a0d1a4e8a5959ec49f7ba495a5c29d599f5fa48ca5469dee9e2ba465a5fa9c739e87a3bea4639cd69dd0a23ca4d99ba89d96a223a4829b469d3aa2d5a3059bd39cd4a153a37f9aa59c8ea10da31f9a6b9c6ca1d4a2a099449c32a184a25599eb9be5a035a206995f9b8fa0c5a17d98f39a3fa066a12e98d09a0ba01ba19d976e9a6d9fd0a025979299ca9e69a0509615994a9e11a0a395ba98de9d8b9f0e9576988c9d0d9f96947698699d909e4894f397039d4b9e9093e9980c9dd59e9d93e9980c9dd59e9d9300000e8e4790c79100000e8e4790c791c527652c972d65ac71283d2d432e26ae0328cf2cdd2d24afc326282cf62c22b09924bf29a12a87b00d20cc254626d6b098947b93c49ad2b07aa145a6a2a79db0a5a4c8a9caaa11b038a65eab79acd0ae19a712acd0ac71ad06a702acb5ac55ac7da672ab69acdeaaeba504ab26acd6a939a558aa98abeba8d5a4e1a907ab27a89ca48fa9b0aa71a768a45da980aaaba638a40aa936aa15a60ea4bba8d2a9d1a59da25ba87ba9d6a5799ffda663a8a4a617964ca5c3a618a8a01819a4a1a5a5a8951916a4a8a583a86a9b53a5e6a659a7c3a073a6f9a7dba420a1ffa591a7a5a120a19ba5fca6b5a074a1cda501a797a005a1bda5daa65aa011a193a5bea6bc9ff4a088a5a9a65f9fc6a065a598a6029f59a0eea40aa6549eda9f63a479a57e9d709f38a457a5279d069f0ba415a5049db49ea2a3b8a4739c609e41a38fa42e9cff9de7a258a40b9ccc9da1a233a4ae9b999d71a229a4199b389d3ca20fa4cd9adc9cf9a1d3a3739a839ca3a16fa3059a2d9c3ca1dca21999fc9bd0a047a27d988a9b71a0dda12f980b9b0fa040a1a6977f9a619fcfa0a696cb99d29e5fa0eb953199809e2ba06d95f7982d9e07a0f094d898339e1ca06c94d3981b9e11a0ac944898d49db49f82944699149e21a08a934699149e21a08a930000988d478ad4900000988d478ad4902727532c702d42ac4b28632d5a2e23aea127d12ce02d33af3926fe2bcc2c12b00e248f29792a60b018209c25ad26b0b0ad8d49137114b1b0c1a01ca6f6a671b05da49ea9abaaccafdca549ab58aca7ae8fa618ace1ac3dad7fa6e4abb5ac2eac22a653ab75acc3aacba5e6aa2aaca3a93ba56eaad8abb1a8e4a4e3a91bab15a85ca479a97daa13a72ba420a933aa70a603a4f5a809aac6a5aaa3a0a8a4a93ba519a35ba843a9b1a4a4a221a821a94ea469a205a816a90ea42ba2a0a7c6a88fa3baa1ffa660a80fa389a1ada627a863a298a18da607a8dca1b4a17fa6dda7bda1b5a16ca6bca76da17ba139a6a6a7dba00fa1e2a555a75da0e4a0a4a5dba612a09da051a588a6909f87a01fa54ea6189f43a00da537a67b9e17a0cda4eca53f9ea09f9ba499a5c69d2b9f3ca442a5409dd39efaa3f7a4a69c719ea2a3c6a4599c609e57a38ea4dd9b2d9ecea24fa4369be99d69a20ba4b89a6e9de3a189a31c9abf9c86a1fea27099569c23a19da20f990b9cf5a05ca2d498cc9bb1a0fca16098559b6da0baa12198139b3ba086a1e497609ae89f47a10d97d599629f07a1a7965799d89ebba0f0950d997a9e69a0ad95d9982f9e31a03895d898199ee49f77953498e79db59f7794ee98ab9d989f2092ee98ab9d989f20920000989226917291000098922691729150262c2c242d1bac0228462d412e05ae2327de2cd72d04af0e26122c032d0cb0ed238029a52a55b0b01f7f259d2697b00c946499a49aa1b02ba176a6fba760b027a494a9a9aad7af69a544ab44aca4ae23a600acb2ac24ad0ea6fcabb6acfcab81a529ab40ac39aa27a58faad0ab1ea9f8a448aa9aab95a8a8a4e1a91fabcea74ba470a993aa07a713a412a91caa31a699a3b6a8b6a97ea501a35aa85aa9c4a4c5a232a823a94ea498a214a8f3a8f1a382a2eca7e4a834a38ba27ea77ea874a214a20aa72ea8e0a1eba1e2a634a892a1d8a1bca607a8a8a17aa16aa6bca794a13ba1eaa530a7f7a03da1b5a5f1a6b8a0eea063a595a663a0c0a030a552a61ba09ca01da545a604a08ba016a55fa6ae9f6ca0e5a415a6f49e44a07fa4a8a5399ee89f38a44aa5a19d5f9f18a445a5229de19ef9a339a5e39c6d9e88a311a58f9c029e33a3a4a4449cd89dd9a245a4039ca19d76a210a4c49b689d1fa2a5a3479bfa9c91a12ba34f9a549c07a194a2b399d39b89a008a21699629b46a0b6a16f98ff9a34a08ca12398db9a16a05da1b597e49a02a038a13897ab9acc9f0ca19f96ae9a709fbaa01396049aec9e77a06c959a99a09e30a0f6942799579ee09f12958f98289ec09fed9440996c9db79ef39240996c9db79ef392000020917a8ed68f000020917a8ed68f1226152c402debab5627fb2cf32dd7ad5726812c6d2dd1ae8a25de2bbf2ceaaf3b237729602a41b0ce1fd1258d2672b0068dff12569474b081a04da6d5a744b0bca3a3a9c1aa88af23a52aab57ac48ae89a5d0abb2aceaac8ba58cab87acd8ab40a518ab36ac2baadca465aaa6abfda890a4f7a925ab23a846a4aaa9ceaa1fa71ba44da982aa49a6d6a30aa912aab3a587a3c4a8c6a93aa521a385a88fa9cca4d2a245a842a962a46da204a8fba81fa435a2afa79fa83aa300a23aa763a88ca20ba202a737a824a215a2c5a624a8d6a11ca2a5a611a8c2a1f3a17aa6fda76fa1daa156a6cfa73da1a4a139a6bba7ffa038a1e8a55ea7ada0bca07ba5baa637a069a028a558a600a039a0eda411a68a9f09a0b9a4c3a5319f909f76a48ca59f9e129f4aa46da5019ee69e41a446a5bd9dbb9e13a415a53d9d7b9edba3e3a4f09c239e75a3a4a4959ce39d1fa381a4209c749dc1a246a4a79b179d5ca200a4cb9ac49cefa178a3469a8d9ca0a10fa3a699699c5aa1c2a22899409c16a174a2da98009ccca035a26d98919b7ba0e6a1e897ee9a13a074a14397399a3e9fc3a03896e699919e37a06c954d992c9e1aa0e2942799119e19a097941699e29d01a0d094c098359d589f67943599d19c369e58943599d19c369e589400001195cb95d29300001195cb95d2936c25872be62ca4ab9e26ea2cd02d97addf25572c572d91ae1425982bbc2ca3afb8221d29fa2915b0131ed324662546b0e3952199539d4db042a037a6bba71ab018a399a9c0aa60afc8a401ab47ac36ae38a5b7ab94acf6ac4ba584ab7dacd0abfba4c1aa0eacdaa974a412aa60ab98a856a4aaa906abcaa71ea458a990aaa5a6aaa322a945aa16a63aa3cda8e6a930a5e6a285a87da9a3a48da246a843a93da456a21da8fea8bca329a29ea7b8a8e7a2daa122a769a81da2a6a1e6a63ca8d1a1c2a1b1a61da86ca1cea1aba607a83ba1b7a183a6eba73aa1a0a151a6c1a7ffa041a1fda55ba7d9a0f4a088a5d2a669a0a8a03aa57aa61aa08fa00ca545a60da08ca0fca42da6c69f6fa0dda4ffa57c9f53a0dea4f2a5319f0aa0bfa4dea5bc9ea59f98a4a8a5fa9d549f68a485a5879d2c9f31a43ea5239df09e04a406a5d09c9d9e99a3b8a4739c509e0fa378a43e9cb39d88a22ca47c9b359d1da2d2a3ee9abc9cb3a16ea3649a6c9c31a1e3a28b990a9cc3a052a21799a39b80a0e9a193983e9b60a0c6a13898069b45a0ada11e98a69a0fa081a12997599a959f10a172961b9a5e9fb9a0f495df99179f95a07e95ba99ce9e4aa055956f996d9efe9f5d957998d29d7c9fc2941f99719df49e03921f99719df49e039200005682170b8c9100005682170b8c912025302b9b2cdcaae925812c562d37ad2225242c092d13aec724472bae2c3caf3f22c028d229e7af2d1dc623c7241eb0a192fd98409a22b0f39f0aa693a7ddaf9da26ea998aaf6ae79a4f8aa64acd7add2a488ab93acc2acc1a43aab67ac5fab86a47daaeaabd9a92ca413aa6dabafa8f7a3a9a9d9aa2aa798a32fa956aa12a62ca3faa808aa5fa5e6a2c2a8cfa9e2a48ea26da86da93ca463a23ea821a9b0a32fa201a8eca8fda2f8a1c1a7c7a8a6a2eaa15ca783a84ea2c0a1fea64aa8e6a198a1a4a619a899a190a170a6dda756a163a111a676a708a124a1c2a511a7f6a0e4a087a5d4a682a0c2a051a594a645a095a01aa546a609a05ca0dda40ba6939f25a0b5a4c2a5659f09a099a4a6a5049fef9f98a4a0a5f89eb59f7da488a58a9e899f5fa46da5209e689f2ca441a5a29d3c9f03a403a5399df79ec4a3dba4e29c809e7ea3a9a49b9c429e2ba378a44f9cb79de1a25fa40b9c5a9d94a227a44d9beb9c28a2eaa3c39a809cb4a147a3f7991d9c23a1b7a22a99bf9ba4a038a27998669b53a0dca13698e49a02a07ea17a976a9a6a9f09a1ae96fd99f99ea6a0fd95a399a59e6fa07b95a2996d9e51a016958599549e3aa0bc9476991f9ebf9fa394dc98929d0e9f1b9421995f9d289f869121995f9d289f86910000888753098d940000888753098d944024492ae22bffa90e25a22bb12c7fac86246a2b992c70ad3624b02a3c2ce8ae2c22da28f229c5af261df3236c2400b06595e59d769fbcafa49f71a612a839af94a29aa9d9aa8aae18a4c8aa30ac90ad4ea424ab7aac8eac71a40fab6dac34ab47a48aaa04ac86a92ca401aa4bab35a8fda389a9ccaacea6a0a320a96aaabda511a3e3a8eba9d8a49fa296a883a923a435a232a82ca946a3cca1c5a7cda876a297a152a787a8d4a185a1f4a64ea889a167a19da619a844a153a16ca6d8a707a11fa120a69ea703a114a1faa570a701a1e4a0c7a515a7f4a0c4a09ca5e4a6baa0a7a064a59aa68ba086a043a575a65da062a000a522a626a050a0d0a4efa514a01fa09fa4cfa501a009a08da4aaa509a0f89f7da499a5429fd29f7ca49ca5c49e779f65a48ca54e9e119f2ba464a5c29db79ed0a31ea5459d649e93a3c3a4ef9cea9d36a382a4979caf9df5a25aa4559c669d7ca220a4b69b0f9d03a2b0a3d19ab69c88a10ba3f999859c24a19fa24699569cc9a03aa28298019c80a0f0a10398a29b34a093a124970d9be39f3ba10d96649a7b9fe6a0bd95049a0a9fa3a07595e299a89e57a03795e099589e1da0c094f499259ee49f6394029a139e849fa5946f99b39d449fba93a199569dd19e7192a199569dd19e7192a81c51258026a0a3a81c51258026a0a3e7228a29132ba1a97e23d029192be4aad421a528f32957ab8a216d286e29bbac0921f827c2285dae281ec8247f251eafa08c4193e79adbaebc9ef1a508a8a8aef6a161a9c9aa0aaef5a3f7aa4fac27ad3aa436ab7aac1aac38a4f4aa51ac83aadea356aad2abeda877a3e0a93aab0ca8efa246a976aa54a67aa2c0a8d2a9e2a4f0a153a84aa91fa4dda11ca815a917a3bba1c4a7cca820a2a6a160a78da8d2a177a105a75ba847a13ba1cba622a805a10ea16ea6dea785a00ca11da67fa74ca0f0a0d7a529a750a0daa094a501a7d79fada068a5afa6d99f87a03aa575a6f49f75a034a567a6c89f5aa029a558a6f19f52a008a52da60ba035a0ffa425a636a023a0dea405a621a016a0c6a401a6e39fc69f86a4c3a56d9f319f4da45fa5e79ef59e27a43ea59f9ef39e1aa43ca54b9e839eefa323a5cb9d299e87a3d6a4229dd49d36a393a4c19cbc9ddca25ca43a9c679d63a214a4839b249de2a186a3999acf9c86a123a3e699929c38a1d3a28399449cf8a084a20c991e9cbaa022a29c98e79b80a0cea13398889b3aa077a18997229bbd9fffa0f7965a9ae39e75a0f9957799639e1ba09a950999119e01a06095f598fb9dc49f19951999da9d909f4e95be98a19dc69f67948999949dab9f9d948999949dab9f9d944c1c79247e2586a14c1c79247e2586a16b224229c32a42a92a239129ef2a80aa6721c628f3292fab8c20e0270a293aac8b1f7a26012863adaa1cf3230a25c9aee18bac98ea990fafa09eb7a559a7a8ae26a1f7a81aaabcad08a330aab3abedacf3a3d5aa2eacb3abf5a370aa12ac60a97ca34aaaa7ab65a859a3e5a942ab44a773a228a960aa81a5cfa15ea86ea93ea495a1eda7d6a8aba256a195a7ada887a138a146a76ea8c2a029a1d6a63ba84ca003a186a609a81aa0caa038a689a7d19f9ca0cea532a7719f67a090a5c3a6b29e5aa05da585a6759e48a014a550a63c9e1fa0dca405a6f79d04a0a4a4bba5b29ded9f85a493a5e89de09f83a475a57c9eac9f7ea46ca5ad9eaa9f94a48ea5189fc99fb2a4dfa507a0aa9fc0a4daa543a0819fafa4c2a508a0559f5da47ea5589f2b9f45a44fa5d09ed69e1fa451a5409e7d9eaba315a5899de19d18a39da4ba9c859d96a22fa4269c559d3aa2e1a3c19b299d08a299a3189bec9caca128a36e9abe9c57a1c9a2c499849c09a17fa22a99489cd1a04ea2be98379cafa014a28f98039c75a0daa12898d59b4aa077a191971a9be39f05a1b496759a709fc1a00396159aca9e63a05295ba99469e15a005959399bc9d949f7c947499809de89e99940d99f29c829e83942c99e29cab9ea4912c99e29cab9ea4910e190924b7244c9f0e190924b7244c9faa22b229352b5da91923fc29812b3bab3622da295f2b8aac23225c29062bb6adac200b28fb28d4aec61c1e23622494af1e910a9b789c86af2d9d1ea58ca604af9fa071a87ba929ae46a292a9f4aafcac37a26da997aa1fab85a19da89da95ea8c7a0a7a79fa800a5cf9fe6a5f7a6f9a1799faaa5efa69da029a014a63ba79da04aa036a66aa754a049a014a664a7369f23a0bca501a74e9e34a09ca5aea68c9d23a05ba582a64c9d05a01ea540a69f9c04a0f3a406a6789c0da0aea4b5a5d09b1aa092a495a5a39b23a056a470a5689b14a05ea460a5089cdb9f4fa453a5f59bb09f3ca434a5a89c679f25a410a5479d509f0ca404a5399e999f31a435a5c79fd99f7da49ea55da045a0c1a4fda58fa04da0b0a4e2a54fa0bd9f56a481a5ac9f029f0ea41ea51b9f049ff3a317a59e9eb09e7ca3cca4029ec39ddda254a4ff9c3a9d7ba20ca4159c229d25a2d7a34e9b039df4a198a37f9ac39ca5a124a3da99939c5ba1cea245995c9cf7a05aa2ae98c89ba1a0f8a12b98419b51a086a1c597f49a0ca042a10797d19a849feaa09796489aea9e7ca00f96c499459e05a09d955899039ec49f20950099c69d789ffb949d989a9d3c9fe2949e988f9df99ee5944098659d0b9fc194b1983a9dae9e6c94b1983a9dae9e6c94871801210122029e871801210122029e112243299d2ac3a8d5229429042bb9aad7214f29a02a46ac6321d228522a44ad3d207027c4280dae781cf0224724c0ae038a1791d998f5ae459c02a4cba488aedf9ee8a615a8ccadbea052a858a9b9ac55a1bea80caa15ab94a1d2a822aab2a81da175a861a94fa58aa0a0a792a868a1279feaa536a72b9ddb9e11a51ea6b29b4a9f39a542a6349b999f6ca58ea6ef994d9ff3a409a68999729fbca4c4a53f9a619f9da49aa5159a8c9f70a485a53099a39f71a45ea56498cc9f51a43ea58f95a69f37a42aa5c290659f21a411a5f793ed9ec8a3bfa40b94cb9e75a38ca4b895b99e81a398a46797019f70a397a41d9af99eb7a3cda4039d5e9f34a469a5ed9f799fd5a44da6f8a03e9ff7a472a640a1fb9e98a4e6a5e9a02a9f4da46ca555a0849e39a457a5739ffd9de8a3fda4889eee9db3a3daa4b89db49d41a397a4f29c439d95a244a44a9cd09c03a2bda33a9b8b9c90a127a3609a439c2fa1aaa2a899f39bd4a031a2a698a79b8fa0f0a12698b79b57a0b7a188970b9c42a098a1f5961a9c2fa079a17c962d9c00a044a133966e9b629fe7a0c895de99b89e78a052958f99409e36a00e95cb98a09d22a0a794a398479d319f39946498129d349e56941897709cec9df7931a984a9ca59d9d911a984a9ca59d9d91ac157b1f61203e9dac157b1f61203e9d5e2026282429d0a74d219328ad2964a91f217f289c29d0aa6d206f27c22808acc71e9525072773ac3c1a4d20fa21d6ac8308938fd1900fad9f988ba03ea1deac079c59a34ca4c9ac729d2ba51ea670ac26a02da796a8cbaa41a1b2a815aa4fa640a1cfa8eea933a0bfa034a82fa9199d529fa8a631a8239be69e78a5c4a62d99a29e12a53aa68b9a6c9eb9a4c5a5199a879e9fa4a4a5d6999a9e73a475a5de98b79e4fa441a58896bc9e35a422a5f594a69e07a4f5a42890949eada3b9a42410749e15a358a4ff12919d4da28ba3f814299d6da1a9a23018c79c16a12fa2391a149d29a14fa2e21ad49d02a261a3e714e79e9aa3b3a47a9b849faca4aba516a1909f27a585a6d5a26f9f4da5e7a687a2249f2ba58fa6b6a1ec9e8da4b6a576a0699ecea3f7a4e39e209e30a3b5a4c49d429e85a230a4a79c4e9d9da1d6a3939b859c77a120a3ca9a5a9c42a1f4a2289a0f9cf6a0a8a29799929bb1a043a20799049b42a0bda13098b79a02a041a17597829ab89f1aa1d896749a709feda04696719a219fb1a00396249aaa9e56a05595b699259ef59feb945e99cf9d989f71940399b79d709f5f94d998949d3d9f5194a598669d0a9ff793a398189d7a9e13940c987e9ce39d3e92e698459c679d5990e698459c679d599000007e91d791909600007e91d7919096221dd92415267ea5a020b827d92899a83a205e27b6289ea9211f4626c92764aac61c9d23ff24d0aa0d18fc1d831f16ab0e8df598759809ab72989da00da19faa739b1ca4c9a46daae59e4fa776a802ab8da20eaa19abdfa9c7a3d1aa1baca7a7fba1fda88caa9da4c99e22a76ca811a37e9e1fa54da62aa12e9eb8a4afa51da1a89eb6a470a5eda0c09e51a40ea51da0c39de8a3b8a4c79efa9dfba3c2a41e9e129edaa3a9a46f9df09da0a3a1a4b39cda9d64a377a4019cac9d30a34fa4b89ac79d09a32ca4a199259e1aa334a47697529e5ba37ea43112639d5ba2b2a37a1ceb9ba99f56a0af216a9b009e259eca22959d68a2c5a3360e69a068a604a8d3a4b6a0dda645a875a511a094a5e5a6a0a33d9f69a490a5daa0519d01a38aa46e9ee99c50a2dfa3319d119deca1a0a3869c9d9c77a1eda21e9b999c1fa19ea2df994e9ce3a045a241992e9cada00ca205991d9c82a0d4a1ca98f89b55a097a16898bb9b28a065a1fd977e9be09f30a19197419b9a9f08a1e496ef9a449fdaa03196879ad29e9fa08395209a879e59a04795089a279e16a0c294c299cd9db09f4794a199799d529f15945599469d1e9f6493ec98069de69e3493a498e99c9f9e099384978e9c9c9e41924a98ad9c809ee8914a98ad9c809ee8910000098a9487cc900000098a9487cc90031e0e25672626a54c1fa4260d28d6a7051f3e26c027b2a8f91d0a256d2638a9461cc72230249ca98017961c771eb3a909919d9c399c80a9419ac0a2f8a3e9a8e39ca3a487a5afa67a98f3a03aa21ba20390ad99789b289dce93ea9b8b9c309f5a9a17a106a217a23a9d2aa424a541a3859d77a47ba536a2199d44a46fa59ba1319d38a43ca520a1809d0ba4f5a49da0bb9dbca3d1a444a0da9d96a3a3a4f09fd19d67a386a4569ff49d93a3a4a4fc9e229e6aa39ba4949edc9d3ea38fa4359e839dc7a279a47d9d9d9d39a22ea4d59c3f9e4da2bca3bc9c5f9cf8a1d3a31a9c519ad2a4eba4209e9ba104a865a8f4a18fa1d0a711a94aa670a12ca842a99ca4d69bc7a588a77b9f4f99aaa006a3ae99429faba192a3b39a859d3ea10ba31f9a5f9d10a182a2aa99419d08a1aba27e99ee9cdba06da20099299ddca050a2f398c49cc6a012a2be98ae9c9fa0f1a16298319c72a0a9a12b98fc9b48a082a10398619b10a03ba129970f9b8b9ff2a0a6969c9a1c9fa1a033968c9aba9e58a0dd95489a5d9e1fa08b95069a099ed09ffd94b899bf9d959f8c9446998b9d529f6394f7985e9d3a9f0094a898149df39e32936998db9c979ee2923d98909c0d9e0d932d97c09b839d0c921698029c209dc6911698029c209dc691000011892983e091000011892983e091681e5725c926cda4af1e0c264227b6a6af1de62405268da74f1c1923902410a89e196f20c62137a883148c19e11a21a85792a69c2d9da5a7429935a177a260a6459a69a2c6a3c9a455995fa186a218a3f1972aa022a1bea1ad9872a067a105a2799b1fa276a34ea3829cc0a23aa4e7a2379cd5a260a4a2a1609cfda252a412a19b9c07a34ea49da0d69cd8a235a467a0249dbaa23aa4f89f5f9dcaa22fa4bd9f809db2a239a4009f8f9db6a229a4889e799da4a227a4049e5e9d7ba213a48f9d4e9d64a204a42d9d569d74a201a4249d4b9d56a2d6a3c39c6e9d68a2fea3789c409d73a203a44d9c989c45a1bca2d39a7898ba9d33a04f97e38c5b98be993092e592d1980b9a05940498469c779da096c599519ef39f1498fe9a0fa007a19798549c3aa05da197985c9c34a04ca17298289c0ca026a13a98009c10a020a12398ae9b0ba01fa10498699b04a014a1e297649b01a014a1af97359bdb9ffda01797199baa9ff8a0d496e49a739fd8a03a96739a109fb5a0e8950a9ac39ea0a0a895b599649e6da05895a299389e49a033955b99ee9d1aa0b0941999949dab9f7794db98539d4f9f42948298049dd49e03943a98b69c569e30932598789cdd9d52938697629cc29d489200984d9c469d3a9000984d9c469d3a9000006d151d16f59000006d151d16f590c91cf123ec242ba3f41c3d244225e0a4681c3523742487a5eb19dc200f22cda52817681d361fdca5ad0eaf10d91183a5fc925f9c859c2da5429704a06ba0afa4819810a1c2a1f5a3e6989fa0bea1d4a2ee984fa038a102a2679979a05aa111a2179ad6a002a220a2849a4ca187a2b3a1be9aa3a11ba33ba10d9bbfa12ca3b0a0559bd1a13ba328a0c59bdea141a3b29f0d9cdea16aa30a9f6d9c06a272a3b19ea49c19a295a3479ee39c22a2b2a3d89dd29c28a2a4a3a99dd89c31a291a37e9dd99c3fa2b7a3919df69c3da2c0a32b9dfd9c56a2c6a3039df89c48a2d2a3d29cfd9c16a2b8a3899cf79cdaa1b0a33c9c6d9c5aa111a3229bc59a0ea039a156999897689dee9eb796b996be9c1c9ef49548985a9df19ed196c0997d9e3da0c597669b429fb2a04898339c799fe9a04998869caf9feea06f985f9c9c9ff2a04798d79b4c9fc4a0fe97789b229f9fa05c970f9b109f81a01b97be9ae49e82a084965d9a9a9e58a02b96089a629e45a09795ee99249e27a01695c699019e0ea0eb94b499de9de69f87949999a39dbb9f5a945d99799d449fd9931d99229de49e7293cc98e79c8a9e07938c98b89c389ec4924898909c089e8c9242987f9cba9ddd92a297609ccb9d99926497239c569def916497239c569def91000000000000000000006d151d16f590c91cf123ec242ba3f41c3d244225e0a4681c3523742487a5eb19dc200f22cda52817681d361fdca5ad0eaf10d91183a5fc925f9c859c2da5429704a06ba0afa4819810a1c2a1f5a3e6989fa0bea1d4a2ee984fa038a102a2679979a05aa111a2179ad6a002a220a2849a4ca187a2b3a1be9aa3a11ba33ba10d9bbfa12ca3b0a0559bd1a13ba328a0c59bdea141a3b29f0d9cdea16aa30a9f6d9c06a272a3b19ea49c19a295a3479ee39c22a2b2a3d89dd29c28a2a4a3a99dd89c31a291a37e9dd99c3fa2b7a3919df69c3da2c0a32b9dfd9c56a2c6a3039df89c48a2d2a3d29cfd9c16a2b8a3899cf79cdaa1b0a33c9c6d9c5aa111a3229bc59a0ea039a156999897689dee9eb796b996be9c1c9ef49548985a9df19ed196c0997d9e3da0c597669b429fb2a04898339c799fe9a04998869caf9feea06f985f9c9c9ff2a04798d79b4c9fc4a0fe97789b229f9fa05c970f9b109f81a01b97be9ae49e82a084965d9a9a9e58a02b96089a629e45a09795ee99249e27a01695c699019e0ea0eb94b499de9de69f87949999a39dbb9f5a945d99799d449fd9931d99229de49e7293cc98e79c8a9e07938c98b89c389ec4924898909c089e8c9242987f9cba9ddd92a297609ccb9d99926497239c569def9100000000000000000000000000000000a1225927612827a619253729472abda944256e29662a20abfd24eb28cf2930ac12242128eb28b2ac5c228b26092877ad821e8a23d82430aee6938b11ea18efade69fc9a25ea30dad9ca261a6eda61eac9ba379a771a87daa4ba397a885a9a7abc6a04ba9fdaa5dadc31aeea430a736ab7f22319e62a48fa951250c1c709d90a97f2676213e1788a9a2260b241e202aa985283527e9245bab272556a0c8a6f8aa5425f0909ca08ea80f261e1ec19b5ba97226b8204210e7a90826cd20451049aaa125c2206d165faa9024161e2f906eaa8123a91b33997eaaa5227810bb9ca1aa4a20419926a01caa85969da16ea308a8219f91a2c4a3c2a10d9ffea243a49d9d979d75a200a44e9cba9b37a28ca3019ce39d13a484a4f19d03a05ba56da6619e999e01a4e5a4229c659cdea019a24499629c98a09ba13399ca9b4fa060a119996d9b1aa032a1da98b19ad69ff7a0c698689a669fb0a08198e799fe9e81a042988999b39e51a007986f99699e34a04e974d991c9e12a0f6963b99fa9de89f72960599d29daf9fee950799ae9d919fc895b9989b9d579f60953b983a9dc49e03959997ad9c149e0c941397899cec9dd893e596729cb29db393d296519c899d8f93e396709c5e9d0d9429962b9c379d3e940699d59c5b9e4f940000000000000000a1225927612827a6a1225927612827a619253729472abda944256e29662a20abfd24eb28cf2930ac12242128eb28b2ac5c228b26092877ad821e8a23d82430aee6938b11ea18efade69fc9a25ea30dad9ca261a6eda61eac9ba379a771a87daa4ba397a885a9a7abc6a04ba9fdaa5dadc31aeea430a736ab7f22319e62a48fa951250c1c709d90a97f2676213e1788a9a2260b241e202aa985283527e9245bab272556a0c8a6f8aa5425f0909ca08ea80f261e1ec19b5ba97226b8204210e7a90826cd20451049aaa125c2206d165faa9024161e2f906eaa8123a91b33997eaaa5227810bb9ca1aa4a20419926a01caa85969da16ea308a8219f91a2c4a3c2a10d9ffea243a49d9d979d75a200a44e9cba9b37a28ca3019ce39d13a484a4f19d03a05ba56da6619e999e01a4e5a4229c659cdea019a24499629c98a09ba13399ca9b4fa060a119996d9b1aa032a1da98b19ad69ff7a0c698689a669fb0a08198e799fe9e81a042988999b39e51a007986f99699e34a04e974d991c9e12a0f6963b99fa9de89f72960599d29daf9fee950799ae9d919fc895b9989b9d579f60953b983a9dc49e03959997ad9c149e0c941397899cec9dd893e596729cb29db393d296519c899d8f93e396709c5e9d0d9429962b9c379d3e940699d59c5b9e4f940699d59c5b9e4f941f244e284a2904a81f244e284a2904a86d26a02aeb2bc6ab5426742aa22b8bac9c26a02ac32b9cad9c25cf29ad2a70ae6c24b7289e2980af7220ed24d825cdaf4797a29b2793aeafc8a08ba4e6a4f4ae6fa3eea6efa7dfadbea4afa762a8a7ac42a4aba734a867ab8fa45fa97baaa2ab33a2f0a8a8aab7ab961799a692a853ab1124599f8aa444ab602620216d1817ab2f28db26ef24f3aa322858261324abaad025799ca8a427aa7825989e2ca5c5a9ef25379148a270aae125a41728a0c3aae5253e1c8e9ee5aa56252b1c409d38ab9224001a6d9e92aba123b910539fbfab0522c59607a0b0ab041e7b9d6fa109ab4a9cdaa203a463a8d9a054a4eba40da34aa055a42ba5f89fc79f3ca432a59a9ef69d13a24fa3429e0e9e14a25ba3e39c519e4ba37ea4f49b089ecfa3e6a4a79a809c2ca222a48999929c85a12da32799559c05a14aa21d99d39b89a0bca19d98329b60a093a16798f19a4da07aa14698d89a28a043a12298d09a0da027a1f797b79ace9ff8a0ab97869a8f9fe3a05797379a3f9faaa00a97cd99df9e7da0ae967299949e39a051961f993f9e0ba0ba95cf98e19d769f63956a987b9df89ed594a2970d9d8d9e8d942d97b69c149e1494b496709c939d70939a96449c389d3c930496039cf69cd0920d98199c959dd7930d98199c959dd7934a24ea28022a82a84a24ea28022a82a87e27af2b9c2c82ac2827492b3c2c41ad9327d82bb32caaaeb326c72a042cadafc024fa28242a33b08a207125732682b00198a512fb197db0b3a1b1a40fa528b08aa4e8a740a82fafdaa5f0a8b2a903ae34a6d1a996aad1ac26a658aa3cab29ac8ba51aaa80ab2fab0aa2a4a8baa98eaa601a5ea4efa667aaaf24c01a2d9d01ab0e270423e71b7aab5727ee21cd12cfab6227be1b8ba073ab0927c81176a223abb8267211efa111ab902600180da16aab4326691a22a09dab6f258b1710a0c7abf4246517ce9f0bac3524e51074a02baca1222d9785a139ac001c4aa08fa320abb79e7ea47ba5cea757a1dba4b3a580a2aea0caa48ba51fa115a00da4e1a4e69f349f4ca375a4e99dbb9e56a383a4499d8e9ef9a30da5ba9c6a9ee6a3f7a42b9cc49d78a3aea4839b609d11a371a4079b159d3da2e9a37d9a969c52a1b1a27899289cbca0fda11799c39b8fa0cba1d898669b6fa0baa1b698079b4ca081a19098a89a28a05ba15e985b9af79f31a12f98fa99929ff7a09c97c099299fb2a033974e99af9e75a0b8961499439e28a00496d198d09d8b9f9595c698839d2a9f1d95d4985b9de49eb894a698249dab9e4d945d98039d7d9e01944098ee9c349efb933897a49c019e9a93c198b89c069e4993c198b89c069e499300008b193d1b679a00008b193d1b679ace27b62bd12c16ac2428532c0f2de6aded271f2ce52c00afc526f02a2a2c08b0192565296e2a64b0b320a5252127aeb0fd94e312151ac2b080a17ca4c8a475b005a555a8aca8b5af1ba6a0a977aaa0ae83a670aa3eab83adb7a6e2aad7ab7eac7ba6aaaaabab3fab54a5cea921ab37aa61a141a84aa9e0a96e1c81a3f7a587aa1725fc177a9e3dab6927771e609dd0abc9272c1d49a01daca927111deaa01eacab27dd1cb6a00aac6727b91c70a018acec26971c389f38ac2d26761a0b9f52aca625b21714a072acde242311b5a089ac18230e9a9aa15bacbd1745a297a48faa7da0fca4d7a5b6a61ea2b6a5b1a676a233a110a5ffa594a0ada0b8a4cba5f99f81a0b9a4ada5359f58a0bea4c0a5949eb29f5ea46da5ad9d069fd6a3f0a4b69cee9e90a3b2a4909c4f9e10a367a42a9c789d7ea2e6a3929b0d9dd2a143a3ca9aa49c60a1a7a2339a3d9c0da14fa2d199ab9bd8a013a286992b9b8aa0b6a12b99b39a45a078a1dd988f9a12a047a16898659abf9f1ea13298499a619feda0fe973e9a119fcba06c97d899969e81a0a0966199299e3aa0fc951099d79dc49f699593988e9d229fe4942b98309d959ea094cc97149d699e5794bd97039d1c9e9294d896c49ce79da094a398cb9cbb9e6693a398cb9cbb9e66930000a408790f4b940000a408790f4b94ca270d2cfb2c5dac45289b2c5d2d47ae1f285c2c162d69afb4262f2b372c2db00e2565296a2a8eb02a2126264427bfb09f0e511c1a1db9b05fa167a4c0a460b0afa474a810a9c5af2ea6f4a99caac2ae77a677aa7baba1adaaa6c5aaafab9cac4ba67eaa98ab5fabeca547aa32ab47aa10a5a0a9d0aac0a961a112a8efa84aa9941ac7a3aaa5f8a97f24469c98a3f3aa3227d01a56a10bac11284b1ef59f3dacfe27371e6a9e72ac16288d1f439e81ac7227121e209e98acf126b11c559fa6ac09269d1a39a0c0ac3a25261112a0b5ac8422d89b28a22bac4898e4a365a585a908a15ba58ca61ea554a170a5aba6bba10fa13ba534a6a8a0dda023a52ba69d9faaa0eca4c7a5ec9e6ca0c8a4bda5359ee19fa0a4aba5909d3d9f3ca44aa5ea9cb39ed9a3e7a47f9c319e30a37ea4129c8e9d93a208a4a99b1d9d2fa289a3209bac9caba110a3889a529c33a1b2a2b199109cd9a06ba24e997a9ba6a01ea2d398fd9a6da0d7a18c98a79a32a09aa14f98699a1ba069a12c98439aeb9f22a1b597de998d9fe6a058977199249f97a0f3961499b39e56a04d96bc983d9e0ca0a6956e98e29d9e9f12955a98979d5d9f9f945a987e9d389f589485987d9ddc9e96949597319da29e57943099329de79e47933099329de79e479300000509f80fc79300000509f80fc793e627fb2bd62c3dac3c28a12c6e2d3dae1a28752c312d57afae26612b712c22b0102583299c2a6fb057211126bb27a0b0648e1919151aa5b042a1cda440a55cb069a442a8d8a8c6af0aa6eaa9d3aab7aea4a6e6aacfab8badb8a60bab1bac8dac31a696aab6ab93aba9a52eaa54ab50aa49a5eba910abaca9a8a44aa949aa2ca9c3a268a863a9daa8b798eea53aa861a97a22aaa044a562aa2026d110eaa173ab7327b41d2c9f28acbd27281ff39d83aca027161fd99da1ac2b27101f7c9cc7ac9026621c9b9dd1ac34250a176c9f96ac5d1effa083a415ab949ffea480a615a7e5a1f6a51ea762a3b3a1c7a5c3a6a8a163a146a554a6efa075a13ea577a66aa0fca007a529a6f79fb9a0eea4fba5829f30a0c7a4d5a5c39e949f5da485a5089ea99ec1a3eca40d9d469e39a389a4979cd19df1a25ea4289c779da0a23ca4129c1d9d4fa211a44e9ba59ce5a17ba3c09a4b9c54a1d6a21b9add9be3a03ea29999449ba5a0d9a11199fe9a72a091a1da98b89a3ca05ba1ac985b9a07a01ba17198f699a79fdaa03898b4994e9f96a0bd973299cd9e4ea04a97af98529e04a091966398e99d909ff2952998999d2d9f70950a985a9df49ec6941a98209d829ead94d396b29c3c9e49949b98899c009ea6929b98899c009ea69200001c02d50e5a9400001c02d50e5a947a270a2cfb2c5bac3b28d22ca42d6bae94274f2c1b2d4baf3426272b4b2c04b0712440294a2a55b0e61f2a252e2685b08b94b112011478b0fea0b3a4a4a537b03aa45fa806a9a0af70a5a1a98eaa98ae2da66caa8aab70ad5fa6d8aa05ac7fac34a6b6aac1ab8aabbea541aa76ab62aa09a5bfa9dbaa83a99fa45ca94baaeda889a40fa90caa8aa8b3a3b0a8d8a948a80da031a796a868a8dc1995a4eea633a9b9227e9f6ea44eaae02442103da11fab74258d162aa0b6ab66259f1636a009ac99247096baa1d8ab771fe4a085a4d1aade9bf7a480a66ca801a11da6c5a799a422a235a673a712a26ea2d8a5fda60ea17fa180a5aaa6a0a01fa133a559a62ca0d9a006a50ba6969f7aa0e2a4dca52d9f17a0a4a4b7a5919e6a9f5fa45aa5f89df79e2ba40ca58f9dd59ec8a3b8a4219d599e1ca360a4a19cd19daea22ea4279c439d61a202a4d89b199d0ea2c3a3189bc19cada13ca3829a839c46a1c5a2c299409c00a164a23099a49bb5a0f9a1d498109b63a0a6a12298a99a1ea058a1c397479ae19f1fa16d971a9a8b9fdda03097c599349fa4a0ee969599f59e7ca0779653999c9e31a0ec95d698009e889f2c95ae98c49d439fc494ad98989de49eee94d5972c9d9f9eaa940f99309ddb9edc940f99309ddb9edc94000043173f18ad9a000043173f18ad9a5126642ba42c2fac6727782c372de5ad1527412c182d09afcf25f52a3c2cd1af2a241e29352a39b04b1ffb2408265bb0860d6312d01951b0dd9f25a405a51eb0aaa318a8b6a878af27a5ada99daa5aaefaa5b1aaa9ab2aad6ca613ab1aac74ac3da617ab26aca6abbba567aab6ab47aa14a5dca9d8aa69a9b5a47fa991aadea870a458a964aa6ea841a403a9fba90ea8eca37ea888a961a72ca207a826a931a75b9fe3a65ca895a7f8953ea5fea647a8551818a4c6a5b7a86e1952a39aa5bea8820bc3a470a65ca8fd9dd8a569a79fa64aa176a6e2a768a4a4a157a6a5a733a27ba1cba511a740a18aa1a0a5f5a6f4a097a19ca5eea6f6a056a14ea597a67da0c3a001a51fa60ca041a0c4a4c4a5829fd19f7ca486a5cb9eb39f53a478a52f9e429f41a470a5f09dcc9ef3a31da56d9d309e47a37da4e99cb59dcaa234a4869c859d85a21aa4279c239d19a29da3ae9bd09caea12ca3d59a9b9c6ca1dea2729a749c4fa1ada2f6994b9c12a15fa2a199c39bc1a008a24799469b76a0a3a1c498d89a27a051a17c98cc9afc9f06a124984f9a5d9fada0b897a3999c9e42a0ca9606991d9ed09f03968398a89d2b9f60953598559dc89eb2945398449d679ea594da970f9d209e8294da98f69cc09ea694da98f69cc09ea694000029827a02ac91000029827a02ac919126bd2baf2c3cac1f27412ce42c9cada626052cdd2ca5ae8625b32a1b2c70af0024e928fa2901b05f1fc824cf2522b01b8d25127c131bb0e79f5ba4daa4d0af18a323a8cda821afbfa498a98aaa41ae7da580aaa0ab26add2a5deaaf0ab52aca8a59daaeaab25ab5aa552aa72ab33aae0a4d2a9fcaa44a962a46ba97faa9ba82fa428a92baa31a8d9a3d1a8e6a9a7a76aa385a875a9b7a6e5a242a82da92da6a5a210a8fea8a2a5eea192a7a9a872a545a1dba65aa817a51fa18ba62ca8b0a44da1f5a63ea833a4b3a11ea756a867a39ea1a1a60ba860a281a1fba556a71ea24aa1b5a5dfa694a130a1aea5e4a651a103a18fa5c0a60da1d8a069a598a6a4a0a9a037a56ca636a05aa001a51fa6c89f01a0a4a4b3a51e9f6e9f59a44ba5b99e159f25a41fa5419eb69ed8a3e5a4c79d749e75a39fa4329d2f9e1aa373a4e59cc39dcaa23ca46d9c959d88a219a4379c6c9d60a205a4119c039d24a2c8a37c9b9f9cc9a17aa3bc9a3f9c72a110a3479afe9b07a1a6a29599959b9da01aa2ed98f69a3da097a15a989d9aa29feca0ea97ff99019f8aa00a974299739e2aa04796db98069ec19faa95a098af9d7e9f2795b298d99dd69f4c959798cf9dcd9f4395c0976b9d459fb8945199a99d4a9f95935199a99d4a9f9593000033865d82e990000033865d82e990f925382b872ce9aba226322c042d88ad4126da2bc22ca0aeee246a2ae42b65af25239628a029dfaf6c1fa12422260db0c10c7b18851909b0e49ecea3cda4abaf86a212a8c7a804af86a49da9a2aa16ae49a582aab3ab05ad79a5beaafdab2bac69a58daac9ab12ab19a50faa41ab0faab1a4e1a9eaaa38a981a48ea9a8aa9fa830a442a946aa1aa8a0a3ada89ba9f4a64aa36ca85fa94ba6f8a246a833a9aca5bba20ca8dea83aa561a2caa7aca8d0a41ea281a784a84ca4e5a14aa764a8f5a38ea1e8a627a86ca35ea172a6c0a7eca25aa14fa69ca790a258a126a684a733a269a140a69ea705a282a11ca68ba78aa120a1cda51ea7f3a0d2a089a5d5a6d0a07da038a55ca68da050a0f7a41fa638a023a0f5a401a6dd9fd79fbfa4d9a5559f649f60a464a5649ec59e0aa4f0a4c49d649eb6a3b6a4339d489e72a3a0a4e99c149e27a360a4749ceb9da8a222a41a9c819d31a2a7a34a9b0c9db1a117a3a09a789c49a1a9a2ec99299c03a15da28f99d59bcaa015a21d99669b8ba0c6a1da98fe9a48a08ca16598c89a19a05da13498339a9a9f2da1e297bd993a9f04a17f974099b29eada0bb960399539e43a02796c398209e0ca0b395af98fb9db29fe2953798d09d889fa79421998e9d459f0c9121998e9d459f0c91000033826407c691000033826407c691b325f02a4a2cd8ab3f262f2ce62c8aadf625d92bc32c7daeeb24a62a1b2c47af0923b628cb29c7af981ea124b1250db0a68c03926c9304b0399fa3a440a5a5af2ea203a8baa8ffae21a47ea959aa20aed8a45baa61abe7ac18a597aadfab13ace9a443aa7eaba5aab3a4f3a922abb8a984a4cba9f5aa08a947a483a9a1aa80a810a428a92faa05a890a3c3a8b5a9f4a6eea245a82aa9eea5b0a216a8eba846a5a2a205a8dda8d3a48da2e6a7caa885a477a286a78ba83ca440a217a75fa861a311a2e8a634a8bfa2dfa1b6a602a873a283a177a6d5a71ea24ba136a67ca72ba243a1eea530a79ea139a1aea5eda64ea106a174a597a6dba0b9a032a53ca67fa076a000a526a658a052a0e9a414a639a01aa0b8a4cba5d09fd79f55a451a5fe9e759f15a40da53c9e259fe6a304a5b49dc89eafa3eca46c9d659e4da3bba4179dfb9df0a272a4939ca59d79a21aa4449c699d31a2d3a3fc9b449dcda16ca37a9bc99c41a1cda27a9a1d9cc7a045a2d2999c9b5aa0c6a14d99499b1ea08ba1d998e29a12a04da1be98c79af29f16a14a98549aa59fd6a0ed97fc992b9f8ba02197a499bf9e3da023964e99619e14a09995fb98289edb9f3195c798099e949f68956098f49d789f9995e498239d5a9e1e93e498239d5a9e1e93000045828e024190000045828e0241906f25de2a392c8aabb725ec2ba52c63ad4025472b702c37ae67243e2a942b04af8e226828712979af3b1fe1247e26d1af600ce5117919dfafc89e8aa4a1a57eafc9a118a8d8a8d5aee0a37da986aadaad78a41faa7aabccacc0a460aaa0ab03acb1a43eaa5dab7daa51a4aaa9e4aa71a927a470a982aabaa8f1a338a945aa42a889a301a90baa7ca756a3b0a8a2a9aba6fda266a854a9f2a5c0a22ba81aa955a561a2f5a7e5a8dca4f1a18ca796a87aa4bea13ea75ba818a491a117a73ba8bfa37fa1aea61aa82ca379a174a6eba7d2a276a162a6c1a788a279a135a6a5a741a23ea111a66da705a223a1eea52aa788a1c8a0a1a5e7a619a16da034a579a6a7a037a005a535a680a00ca0c6a4e6a54ba08d9f60a478a5ab9f1f9f3ba44aa5219fd69e26a42da5d39eba9e1ea424a5569e8f9ef1a3efa4d99d5f9e9ca3bfa44e9d1e9e31a37ca4e69cd59dcda24fa4639c5e9d75a218a4df9bfe9c1fa2a5a30e9ba79cbda13aa38b9a629c63a1c1a2dc99329c15a179a25199009cd6a031a20f99679b98a0f2a19f983f9b57a0a8a12f98d59a01a054a1ce973c9a099fa1a0a196d0995c9e12a0c9954099ff9dfa9f42952d99c89dfb9fee946e999c9dc89fa4947899379d099f98949799559d5e9f7b959799559d5e9f7b9500004d98af98af9500004d98af98af95c324122a5c2b31ab2725ca2b992c0eadd4242b2b5e2ceead0b24022a832babae2822452849293dafbd1d5e2471258faf148cb39117939dafd59d68a40ea52faf80a106a8d1a88dae66a353a962aac6ad29a405aa3babd6ac6aa41baa61abe4ab3ba4c3a9f6aa3faabba35aa98caa22a998a322a92caa70a842a3e0a8f6a9b5a706a3b6a8bfa9c8a6b3a27fa881a905a69aa247a82ba92aa53fa20ea8e6a8bfa4f9a199a7b2a84fa4bda129a767a8fba390a1daa621a860a36da1a9a612a8d4a281a182a6fca78fa2b3a172a6eba74aa2b5a140a6c1a701a27ba116a691a7c2a1eea0b3a5f5a64ea1caa057a58ea6e6a095a018a541a69ba07da0e9a40da63ba076a0e0a4fba537a044a0c8a4f4a505a014a0b7a4d8a59e9fb49f95a4aea51f9f759f77a47ea5639e3d9f4aa455a5eb9df89e17a414a5839dbc9ed1a3daa4289d5b9e46a385a4be9cfa9da8a234a4319c589d46a20aa4bb9be59ccba1a0a3239b829c74a112a3a69a499c06a1aea2d999c79baca02ba22f99599b73a0eba1e398239b51a0d6a19098ce9a26a093a16398709ad99f57a1f997069a669ffba0e696cb99199f94a06496be99e39e5ea0f995b6999f9e22a086954a99429eba9f8c9578987d9d029f079557994d9d739ecb9257994d9d739ecb920000c9069c07f0910000c9069c07f0916d24002a7f2b7baad024382b522cc2ac4e24902a0d2c7ead7b23bb29102b46aea92110284429f8ae5a1dcc23de2455afb28b9091f49258af789d4ca460a501afdea075a777a841ae9da221a92baa7bada2a3cea9fbaabeacfba3e1a913abbbaba9a3ada9d1aa27aa69a369a986aa16a943a31ea92eaa06a817a3c6a8d9a9d2a6b6a2ada8aba917a66aa263a871a965a519a22ba815a9bba4f2a1d5a7d3a84ea4c4a18ca7a6a813a4c9a167a78da8daa39ba121a764a86fa378a1cda62aa8f8a24aa169a6e3a793a245a133a6ada740a223a1eea544a7e1a1f6a09da5fea692a1c7a069a5a8a649a199a040a56ea60aa182a0ffa41ea6b9a055a0d0a4d6a545a02ea0a1a4bea520a018a096a49da5d29fc39f77a491a5a79f549f5ca465a52f9f1b9f38a445a5b09eeb9efda317a52d9ed49ecea3e2a4929d949e7ba3bfa4389d269e4aa386a4f89cf89dffa256a4aa9c759dbca23da4409c269d6aa205a4a99bc39cf4a182a3c99a539c5ea1eba21e9ac09bd1a058a24b99739b6fa0faa1af98359b39a0a0a17698d59af39f58a10998399a559ffaa03897cf99db9e89a07696a3999a9e55a002968799649e40a09b956b992f9e1aa0f3943999ea9d7a9f0a9569983c9d8b9e25941999ff9c8d9e2b921999ff9c8d9e2b92000028191b1aa99b000028191b1aa99bb8222929872aaca9ca230a2a552b12ac6023cb293a2bcaac4322e128362aa1ad1d21b727cd288cae1f1dac23cd2421af848b9091fe922caf649d57a47ba5d1ae47a11da800a92cae85a256a984aa75ad2da3afa910abb0ac61a3c2a900ab9cab3ba378a9a6aa0eaa28a329a949aad6a8eaa2e5a808aad9a7a1a2ada8b1a9a1a645a278a86fa989a51da21fa817a9a3a4b5a1b8a7afa8f0a36ca132a771a866a333a1dfa62aa8afa237a17da602a84fa204a139a6aea7f1a1fba009a65ca7e0a1c8a0daa52aa799a1c6a0bda50ea765a1a3a09aa5e1a68fa195a060a59aa655a16da042a575a620a145a022a54ea617a126a004a51fa60ea127a0d5a4f3a5f2a008a094a4cda5c1a0b29f6da4a1a564a0a19f5ea481a509a06f9f42a475a5769ff89e25a441a5e69ebe9ecda3ffa4569e4d9e7aa3b5a4ae9dfc9d35a38da45b9dce9d05a367a4189d9c9dd2a244a4b29c459d62a2f7a3359cf89ce0a165a36a9b9b9c5aa1cca2749a759c03a169a2c699399ca5a009a2f698c69b60a0bca143983e9b21a06ba1b497c09ad29f23a1a696289a449fc6a03d96d199f19e80a0f795c399949e38a06e95a2993c9ee49f3395a899f79d929fd394a099ec9d4c9f0d953899939d119f8f944f99649d169fa6944f99649d169fa694191d0325292655a5191d0325292655a53d22e5280a2ae7a96122fa28ce2941abe72158286e29afab25206b26122807ac161ec724e025b1ac941cb3228a24cbad9e114a18561991aed59c04a487a574ae04a120a807a9d2ad64a254a9a1aa1ead24a3d8a93aab5dac28a3a0a9e8aa15aba7a245a96baabca95da2dba80eaa8ba8e7a183a87da92aa7b1a134a81ea986a57da1f0a7dba8a3a46ba194a79ea80ca45ba12ba77aa819a355a1f6a63da87fa23da1bca61ea82ba206a165a6d1a79ea1e3a01ea69aa760a1dba0f2a53fa721a1bea0afa50ea71da1a6a08ba5c3a6e5a084a044a591a6a6a067a02aa553a6a9a04aa01ba53ca6b5a037a00ea526a6eca023a00ca524a6eba00da0f6a40da600a107a0cda4e8a5c4a0e49f93a4afa579a06f9f57a477a511a0e59e3ba43ba5bb9fbc9e1da431a53b9f859e01a416a5c89e389eb2a3e5a4489edc9d50a39ca4999da09df9a26ca4039d789d86a226a4729c459d26a2bda3259c089db8a158a3629b9d9c6ba10ba3b19a629c09a1a0a2039a289cc9a05ca27599ef9b8ea0f7a13199b89b5aa09ea1c898699b19a04fa134980d9ba19feea0d597539ad69e71a08396a0995a9e1fa0d79508990b9ee69f9d95e698e69dc19f58951599f09da99fa495ad98d49dc89f89956399ab9d8f9fa3946399ab9d8f9fa394651d0825eb2572a4651d0825eb2572a4cd21ba28f72943a9d021b828ce2974aaa9216d2891296fabc81f7b26192869ab0f1d7424882560ab8d185c208021a9aa0c0e9314de1532ab859966a17da14cacd39ebba56da64bac5fa146a831a93baccba28ea9b2aa0bac14a2a1a879a990aa0da116a8d2a883a833a117a8eea868a71aa1f8a7cba8dea50aa15fa781a894a4e7a0fca652a8eba3e0a0e1a628a888a2e0a0a4a61aa809a2d8a05da6dfa788a1aca00fa682a705a18ba0c5a523a78ca056a083a5d4a658a040a066a594a62ca034a03ca55aa60ba02ca00ea529a6ce9f19a0d3a4e0a5739fcd9f98a4a9a5d39f909f71a475a5eb9f939f7aa469a52ea0a19f94a48ea55fa0999fb1a4b6a5a7a0939faea4d2a5b7a0359f9ca49da5a5a0229f71a481a52aa0569f32a44ca5c59f619f10a429a53c9fc09edaa3f8a4a69ecd9d53a3a3a4cf9d5f9dada23ba4e69cff9c2fa2d5a35b9c069d05a283a3049cf89cd4a13da32d9bde9c81a1e5a27a9aac9c30a18ca2d199719cd5a039a26c99379cb5a0f7a10699089c81a0cba19f98989b5da08ca16f98609b23a04da10898ca9aaf9fefa02b973a9a319f9ea07a96de99969e47a0c6955699119eea9f70952899ad9d709f33951a99709dc29e57954898c29c429ed894ed98d49c5f9ea691ed98d49c5f9ea691f215eb21de22609ef215eb21de22609efd21d528202a4ba9ab21b528d429c8aa6121b028e12904ac9e200c28222986ac2b1ff8257c2705adbc1be621002483ad760f08101d11c3ad65995aa129a292ad5b9dd0a4d9a517ade59e15a68aa746ac729ecfa536a78caa869deda41aa6efa78a9d9ba49da5e7a4539eb7a49aa5b0a3289f2da554a646a2b49f75a5b1a6f7a1c09f81a5cba628a1e09f90a5e2a66ca0ae9f69a58ca6e49fd79f4ca571a6949eb79f30a554a6d59db49ffda424a6289dae9fd9a4fda5039d04a0bba4e1a5e49c01a0a8a4cba53b9d09a08ba4aaa51a9df19f6ea4a2a5c69da09f54a470a56b9e659f51a45ca5c79f609f45a449a551a0619f47a446a5ada0959f78a489a518a1b39faea4c9a52fa17b9f9fa49ea512a1319f44a447a58aa0ea9eeaa303a50aa0d19ed0a3e6a4909fad9e8fa3cda4c59eea9df6a27aa4169e699d94a223a4099d109d3ea2f0a3129ce79cf1a1a1a3539bc99cc2a13ea3c59a8c9c7fa1e6a2ef99629c2ca186a25d99259ccba00ca2f898739b69a09ca16398059b1ba032a116989c9aa49feaa0ae973a9a1c9f90a03b97e399749e32a0a1967799f69dba9f31961099c29d7e9fba95d998959d469f9d9595987b9d309f5495b998879de79e5f954598549df19e2d95bc982c9d909e6094bc982c9d909e609400009514121621990000951412162199d320db270a2950a838216a286e291baa8b201a281a2950abf31f012771282eac831e6125be26a5acf91a6b216423f5ac800e6f15ef162dad3e9865a014a11fad279c0ea4a1a4d6acee9d5fa554a651acd99ee5a593a765ab3a9f5da6d1a794a9389f50a6a4a771a7709f1aa687a762a4589fbda5f0a630a1fd9e3ca58ba65f9f1e9f24a56aa6359d8b9f31a58aa65b9c3e9f00a531a6439a779fc9a4d6a5ff99729f99a490a5c399499f64a474a5a3993b9f4aa44da5c798419f47a42ca5c498159f29a42aa5c198e59e28a409a5c098bc9ee3a3e1a49e99be9ed2a3d9a4499bdc9edea3e2a43e9d449f29a42ca501a0659f90a49da533a16c9fd3a41da6dda1399ff7a45aa6e6a1cd9eb8a41ca69ba1a89e54a48ea50ca1ce9e1fa42ca551a0239edfa3efa4559fc89d70a3bea4529ec29d4da394a4989d769dc2a241a4f69c1a9d33a2dda3399caf9cc2a142a32c9b759c5aa1d1a26e9a349c09a162a2c599de9bb3a0f1a1ed98a49b6da0a3a17498c09b42a086a10e98029c0aa055a15b970f9cef9f32a1e296e09b7f9f0fa18296e49ad99ea0a04d96a4994d9e44a095956d99169e18a08395e698bc9def9f4195b998569d309fc2945a98ff9c319e8294c796699ca49d2c94e197059c379d3192e197059c379d3192000056134a148c98000056134a148c982c1f0e26f82721a75d2087276b2807a935202727582815aa1e1ff3256727c9aa751d4124532538ab4619681f1621b7ab230dce8d590fefab7c96499e109fe7aba39972a197a2a7abae9be8a25ea45bab909c0fa42ca54babbc9d07a575a631aa8a9f61a604a89ea6d79f25a767a87ba0b49fc7a633a83b97d79ff3a554a7f20c669f89a5d6a69a154f9f29a55fa61915f19edca4fba5cc14db9ea3a4b6a56916a79e71a460a5d3188b9e33a416a587196c9e98a3b7a43e1a069eaba24ba4281a4a9eeaa171a3391a5e9de6a149a3ad1a929da1a14aa3301b729d1ba2eaa34617379e4ea385a4c998719f8ca48aa53ba0de9f20a576a6f3a2e29f3aa57ba6b7a37b9f10a545a60da3969e9ca4bfa514a25a9e74a48ca526a11e9e0ca4fda4f09fbb9d30a37da4429e839d8da244a4429d079d06a2bba3719cf69c67a13aa39e9b929c55a1f5a21c9b3e9c10a196a2739a029cc7a03ea2ce99529b75a0dca13899c29a0da063a16398b29ac09f28a1f5977c9a969ffda07797579a459fc4a02797319add9e84a07496f799569e33a0f4958f99d89dbb9f3d954299999d4f9f0495e7987b9d2d9fb994b198729d279fb1949898449dfe9e6794b098fc9c809e37942398979c039e2c9388993c9c6d9df49188993c9c6d9df4910000118f5a8eb7950000118f5a8eb795711d8a2481253ba50c20b4261d2866a8491f0626832706a9471e24255626bda97b1ce6224d240eaa5118b71df21f48aa5a0cc98c0c0e3faa3a96d59e259f0eaa259a38a2eba25ba9309bc8a3cda4d1a8bb9cd1a4cfa5eea8bc9feea6f5a788a94ea2c5a9d6aa16a79da1cba93aab0b9ef2a064a7bea8bf9c949d2aa562a61d9d3c9e8fa4a6a5b69d579e6ea479a5e89d0c9e1ba40aa5979de89ddba3e0a4609cb19d94a385a4fa9bae9d35a360a4839a7d9dcaa230a4af984e9d54a29ba37d94049d95a1aea230165b9c7ba1b9a2c71d609cd4a0d2a15122be9bce9ef19ff123d89ca4a074a10d1e839f2aa596a6e6a37da012a77aa873a644a0b9a636a822a54e9f0da55fa6cda27b9ed3a303a5bea0879d93a22aa4b39ef39c30a203a4879dcb9c11a2d1a3fc9ce59cb5a138a35b9c719c55a1bfa2329b4a9cffa060a2319a1a9cb6a01ea28e99079c8da0e9a14e99059c62a0a8a1e998cd9b40a07aa1b598709b0aa03ba14a98669bba9f0ca10e98359b809fe3a07697c49a3c9fc7a0cd96799ad19e95a01b961a9a829e58a0d595ef99139e07a03c95b699be9d9a9f0195a599809d3c9f8d944399419d169f2894e098099ded9eaf938c98ed9cb89ef9939397b09cdd9ead937198d49cb39ed7927198d49cb39ed79200008a8c7f8a109100008a8c7f8a1091e21dae24cd251ea5691e8b25e3265fa7fa1d3b25732661a8061d32243b25caa8411b9a2145230ca9ea17fa1cd01e12a9268571978f9615a95e9710a0b8a0e1a8b89ad9a24da40da86e9c08a4e0a405a6d198eca0f2a175a2ac90499a3c9c059de78b0198b798d59a5e947c9c519dba9d5f9aa1a07ea183a0379c65a29ca33ea1db9c3fa36ca46ba1449d9ca369a433a1519d34a34aa4afa09d9d3ba341a433a0719d27a34aa4be9fc79d39a37ca4289f5b9deba25ea47d9e069deda24ba40a9ee89b4fa20aa4809d6b991aa332a4429d8c9a1fa504a5429fd0a27aa8e7a845a3ffa013a875a830a5789f41a5b9a641a514a04ea616a754a16396fda179a4239b8a99eca046a3ff99779e68a171a3c09af79c3ca1baa2cd9ae39c07a17ea2739a1a9df3a094a2469a569deba090a2e999d69cc3a043a29899f39cb3a013a23b99a89c9ea0dfa11499769c8aa0c3a1b898179c5ea08aa17d98a29b2ba04aa14998429bc79f0fa1a497e69a549fb9a02097959ae29e6fa061966e9a7b9e37a04d96499a279efd9ffb95069ad59d949f679590999b9d529f32951899669d1c9fc294b898219de29e57948498e59ca19ed5936298ad9c4f9e92933a98799cd79dd5934797e49b8f9dc8921998fd9b349d4b911998fd9b349d4b910000448965851a920000448965851a92a41da724e925a7a4ee1d20252c268ba6151d152443255ea7881b1222de23c8a744190c20032122a8e214ff1a521c1ca8a78a23982499dfa72c96b89e2da0fea6819982a1dca276a5579a02a23ba355a42399f6a0fca185a24f97ee9e2ea08da0e796599ec39f12a027996da053a1ada1c99a8aa15ca24ea2389b0fa21ba3eea1a39b17a277a311a1d29b24a28aa3c0a05f9c5da2b9a3baa0b09c54a2baa35ea0d29c4da2daa3e39fe59c68a2aea35e9fe69c50a2a1a3cc9e3b9d40a2d1a3699e719d48a2d5a3069ec89d4da201a4a89d7b9d23a2d6a3569daf9cbaa117a3b29c679a71a081a1fc9a1195129c439d6496d991bd97bb9902933c94e099989b80951998289de29e51983d9a8e9e55a0c798469b809feba02699fc9b38a061a12b99489c53a06ea151992a9c30a057a1dd98059c0da021a1a6989b9b09a017a18398699bf49f01a164985e9bfa9f05a14d98469bde9ff4a030983c9bca9feca0be97119b999fe0a01f97de9a459fbea0d096779afe9eaaa07b96179ab29e87a03496d099589e57a09795b7991b9e22a0a9957799e09ddf9f71954a99889d7b9fee94f3984c9d249fb9947e98039db89e78942698b19c399e04942f986d9cc29da9939b973f9caa9df4922b983e9c319d8d922b983e9c319d8d920000d614a8158c900000d614a8158c90491c36237e24a9a34f1cad23a9240ca5be1b91220c24a0a59c199320aa21d5a54917751dbf1ef9a5e61124151e18bda5818cf397f59877a5cb94659d569eeba4459727a00ea15ba48d989ea087a176a375981fa0e5a01aa22f98479f61a061a15198779f6ca053a1c8980ea0efa06da1b599bea0c8a1ada1509a2ba143a269a1a79a60a191a2c6a0479b83a1daa28ba0cd9b9ba1f3a228a04e9ccca130a300a0809ce3a14fa3949fb29ceca142a31c9fac9ce2a146a3cc9eaa9cf8a159a3569ec39c0ca27ea3199ed19c23a284a3e59dc19c11a28fa3919de49cf2a170a34c9d869c83a1eaa2c69c9e9b8ea019a2e29b3399d19e4fa051994f96cb9c099e09971e969b9cb19d10975398909dfd9e1998cf996c9e4aa079985b9b359fcba0f398079c759f0fa1d398409c8c9f0ca1f698559c9d9fe2a0cd98009c7e9fb8a09998759b3f9fa3a02898429b199f96a00598189b019f75a06497d89adf9e70a02a975d9a959e49a076961c9a589e3da02896e899199e20a0a195af99e09d0aa06d957b99bc9dde9ff6945a99879da99fc8943d99419d309f4d941699109ddb9e2694c298dd9c8b9e6d938098ac9c3d9e8f9347988f9c129e61933b98869cc09da6938f97469caa9dd7924997009c299d7b924997009c299d7b9200000000000000000000d614a8158c90491c36237e24a9a34f1cad23a9240ca5be1b91220c24a0a59c199320aa21d5a54917751dbf1ef9a5e61124151e18bda5818cf397f59877a5cb94659d569eeba4459727a00ea15ba48d989ea087a176a375981fa0e5a01aa22f98479f61a061a15198779f6ca053a1c8980ea0efa06da1b599bea0c8a1ada1509a2ba143a269a1a79a60a191a2c6a0479b83a1daa28ba0cd9b9ba1f3a228a04e9ccca130a300a0809ce3a14fa3949fb29ceca142a31c9fac9ce2a146a3cc9eaa9cf8a159a3569ec39c0ca27ea3199ed19c23a284a3e59dc19c11a28fa3919de49cf2a170a34c9d869c83a1eaa2c69c9e9b8ea019a2e29b3399d19e4fa051994f96cb9c099e09971e969b9cb19d10975398909dfd9e1998cf996c9e4aa079985b9b359fcba0f398079c759f0fa1d398409c8c9f0ca1f698559c9d9fe2a0cd98009c7e9fb8a09998759b3f9fa3a02898429b199f96a00598189b019f75a06497d89adf9e70a02a975d9a959e49a076961c9a589e3da02896e899199e20a0a195af99e09d0aa06d957b99bc9dde9ff6945a99879da99fc8943d99419d309f4d941699109ddb9e2694c298dd9c8b9e6d938098ac9c3d9e8f9347988f9c129e61933b98869cc09da6938f97469caa9dd7924997009c299d7b9200000000000000000000000000000000c81bbd233d24d8a255232228e028c7a82b248f284d2999aa7723bf27b02883abcc2139265b271fac2a20962470258facde1ccd21de2243ad468c0917e01caead2b9d9d9f509edeac92a0d9a35ea460abd4a219a73ba833ac33a37da9e8aa0fae629f00a833a970ac9f1ab0a251a5a2a939232099fba193a92c25f61c1f9cdca95b265b21df16b5a97926e322641f07a93b28022747250daaeb267f1ce9a338acc624a99a29a294a87825ec1c8f9b44a96b25f31e3790f2a941250d201a106baacb24e11e05106aaa1924c71cff9590aac1226716819c99aa9e212990489e70aa251b809e86a142a9a69d76a26ea34da57c9e03a288a3fb9fdd9d75a2b2a31b9d7a9d26a279a36d9cd89cfba168a30d9c479c71a276a3849c099dd1a3d8a4ac9d249ef4a3c0a4cd9cbc9c6ea1dda2b19a3c9cafa0bca1039a9e9b60a067a1c399689b24a028a17499ee9add9ff4a05f998d9a889fc1a01699229a1f9f8aa0cf98b299bc9e68a08c985e995b9e38a0db971899129e12a01f97d698cb9dcc9f8596b2989d9d7f9f3f96b398769d529fd195a1985f9df49ea8951f980a9da29e12959097cd9c509e9b9457978b9c0d9e25940297749cad9d1094fc96609c7d9dfc931197689c519d3a949596499c389d8394dd98b89c1c9e77930000000000000000c81bbd233d24d8a2c81bbd233d24d8a255232228e028c7a82b248f284d2999aa7723bf27b02883abcc2139265b271fac2a20962470258facde1ccd21de2243ad468c0917e01caead2b9d9d9f509edeac92a0d9a35ea460abd4a219a73ba833ac33a37da9e8aa0fae629f00a833a970ac9f1ab0a251a5a2a939232099fba193a92c25f61c1f9cdca95b265b21df16b5a97926e322641f07a93b28022747250daaeb267f1ce9a338acc624a99a29a294a87825ec1c8f9b44a96b25f31e3790f2a941250d201a106baacb24e11e05106aaa1924c71cff9590aac1226716819c99aa9e212990489e70aa251b809e86a142a9a69d76a26ea34da57c9e03a288a3fb9fdd9d75a2b2a31b9d7a9d26a279a36d9cd89cfba168a30d9c479c71a276a3849c099dd1a3d8a4ac9d249ef4a3c0a4cd9cbc9c6ea1dda2b19a3c9cafa0bca1039a9e9b60a067a1c399689b24a028a17499ee9add9ff4a05f998d9a889fc1a01699229a1f9f8aa0cf98b299bc9e68a08c985e995b9e38a0db971899129e12a01f97d698cb9dcc9f8596b2989d9d7f9f3f96b398769d529fd195a1985f9df49ea8951f980a9da29e12959097cd9c509e9b9457978b9c0d9e25940297749cad9d1094fc96609c7d9dfc931197689c519d3a949596499c389d8394dd98b89c1c9e7793dd98b89c1c9e77938b1125205b2086a08b1125205b2086a01f2473289d29c4a91f25a129872a4fac312544293f2a03ad30246c281b296cad4622b0262228efada81e14242f254aaea48c371a261d7dae0c9e22a029a0c4add9a049a336a3deac91a244a5eea51facc0a31fa8d1a814ac8aa3f2a828aadeab01a123a87aa939ab9e1657a57fa7a5aa66234c9df1a38daa0126c9207a11f0aadd274a268124e3aa6d2834287626deaa8426851992a08eaa262501a1f1a5e0a9c825a89a41a43eaaaf25531728a1a2aa6b25f91b0f9ec3aaf524f01bf29c28ab3224da16399f7eab5e2383100da0aeab55211b99a1a036ab900d6ba186a3aaa9c09fd7a3dba4a0a581a039a4faa4fda01aa059a40ea5529f279f7ba36ca43f9ed89d14a28fa3cc9d129da7a0cda1679df89d27a2aca3cf9c719e09a42fa5a99cd19cb2a249a48a9b649c8fa11ba3b49a1e9cf2a037a2f799cf9ba5a0bba18a99359b70a09ba14b99079b50a061a11699b39a25a03da1e3988a9af09f0da17f98809aac9feda04c98399a539fbea01a98f7990e9f8ca0d0978b99af9e4da0199737994b9e18a0af96c4980c9ebd9f1496a498a59d4b9f00963c984c9dd59e72959497009d7b9eea943297a09c089e7094d696769c8a9d1e94bc963b9c1a9d00941b96f29be69c9a934998059c389d70944998059c389d709465117720a52049a165117720a52049a1a8240f295b2a8eaac4251f2a162bb7ac0c26342a2f2bc9ad1e254529422a6eae3623be27cf2806afce1fb524f8256daf050da81c241f5caf8e9efda056a0dcaec0a1c7a4f2a40dae32a423a71aa85badaea4b2a84ba9a8ace4a430a901aa19ac8ba43da962aa56ab3ca12ea80ca9a5aa841812a4cba563aa14246917ba9cdfaaca263523381d4bab8b271523221cbcab1a27d61ec29db2abd1264d1880a241ab6e26541173a213ab222628117ea17fabc825f61037a1adab4f25451775a0cdabca24b81049a004aced238f90b0a006ac3520879e9da218ab3899bba287a40da90ea1b0a4a4a5b0a497a084a45aa50da111a012a4dba4b2a0d39fcca3aea4fc9f019f2ca342a4a19e539ecda22ba4d59d529e90a3a8a4429d2d9e90a3baa4a99cbc9d5ba38ba4379c5c9de4a24fa4ce9be69c05a284a3199b6b9c29a175a2409a0b9cb8a0ffa1ee998f9b93a0c7a1af99319b68a0b3a14799be9a39a068a10f997b9a0ca035a1a998579ad99f15a17998e399679fcda00d988b99f09e7aa099971499709e32a0c296e5981f9eec9f6e96d198d99d7f9f2596c298979d309faf95c3986d9df79e4595a698409db99edd947f981e9d939e8f943c98e99c2c9e6d941e97ad9ceb9d0b9476987c9cc09dc39376987c9cc09dc39300003e11a6125d9900003e11a6125d99d824a129132b5dab9626002b1f2c3cad7726a52ad62b33ae2f258829952aefaeae232328e62881af811ff724e325ebaf640def1c871ffaaf3f9e8ea07a9f7eafa9a291a53da69eae37a4aca768a8d6addca4d1a88fa92cad71a575a954aa72ac6fa5bfa994aaafabd5a429a929aab0aaa0a1bba7d2a8f3a9aa0c59a471a620aafc221a9780a1e1aa4526ad1c5b9ec3abff26d61cf39f04acee26d51aa4a00fac0b27b11a26a124acf626851ae9a01eac2b26aa17caa045acaa25821799a06bac1925db9011a171ac7e23db9b56a21bace91c2ca153a495aaaf9ef3a459a633a84ba130a526a610a4f0a009a5d7a53aa1a4a0c3a48aa5a7a079a0aea482a53aa019a08fa474a5969fc49f7da46da50e9fca9e08a4faa4ef9d8c9e87a3aaa4449d7a9e4ba390a4189d379edda23ea4859c5e9d42a2b0a3149cc99ca1a111a3559b739c4aa195a2d09a239c05a146a22c9a9e9bc6a002a2de991e9b75a0a2a147999d9a3ba04fa1f498609afb9f24a1ad982c9a909ffaa07a98f999349fc0a01b98c099c99e85a0d1976699409e2aa0ec96e998be9dab9f2b968d986d9d049f94956598499d9c9e31954998409d8a9e299512982c9d8d9ee794c397059d359e0d958697bb9cea9d44954b989b9cc29e40944b989b9cc29e4094000012188518b39a000012188518b39aa825242a992bc3ab96260f2b212c77ad7326ca2a022c8bae0f258629652a1eaf6a230928ca289daf0e20f724e825ebafe613491e781fe7afae9e78a081a06faf82a2cda58da6adae52a4eda78ea8f2adcba4c7a885a934ad64a58aa972aa65ac95a5c5a9c5aaf1ab3aa579a9a0aa9aaac1a447a96caa20aa14a2cca7c0a87aa96d99cda462a690a94f20ffa079a461aac224aa90f7a138abeb253417b8a0e1ab6e26171a1ea013acc526541c1da036ac2626231a07a042acf225091ac49f56aca82490105aa02cac7d21659c2ca244abae92fba240a56ca95aa024a52ea651a600a115a51aa6cda21ba119a520a671a1dda024a51ca6e2a0aea0efa4e7a545a035a09ba47fa5999f03a071a45ca5099f509f49a43ba5129ed89e03a4f4a4799d429e55a37fa4e39cc29dc2a220a4749c549d5ba2c7a3259cde9ce9a158a3b49b7d9c86a1e2a21c9b2d9c0ea196a2369adb9bc1a04ba2d799429b7fa0f4a15499cc9a4ea0a1a10c99749a1fa05fa19898439a04a03aa17a982e9adf9ffea05798bc99849fd8a0f7976b99199f90a084970a99a19e4aa01a97e098469e03a084968e98fa9d929ff2957198a09d3e9f27953b98669d009fc2944898409d8d9eae948f97ee9c539e659461991b9da29e3c9261991b9da29e3c92000052189018009b000052189018009b5125222a902baeab9126692b5c2c93ad6a26fe2a202c74ae0f25b429cd2a12af98233c28082999afeb1ff6245626d5afae13da1c751fd7af909e23a15ba168af30a2d4a59ea6b3ae75a44ba8f7a8e0ad58a563a93faaf4acc7a5ffa905ab71ac6fa5b2a9b9aac9ab28a580a964aad4aacda443a947aa0eaa7ca4eea8daa9b1a9a1a35ea84ba930a96da025a7a7a820a90c8c03a5d9a646a91820d6a1f4a403aa9722809eb6a3d0aae623ad9cd8a256ab1624319b96a282ab6e23859c62a279ab4621fb9ef2a309ab8c0c4ba326a578a9919f8fa5e4a6d3a616a1b5a5dfa6dba32fa16ca563a6f8a142a107a501a65ea126a10aa51ca614a103a1eca405a6afa0b5a0c7a4e2a56da04fa0b3a4bda510a0839f84a47ea54b9fb49e14a41ea53a9e2e9e5da3a0a4519dfa9d07a358a4cb9c899dcaa246a4869c2b9d6da225a43c9cd69cffa1e6a3d19b879ca2a14ca3049b3e9c3da190a2759ad69bc6a003a2ac991a9b77a0afa14f99c89a4aa068a1eb98759a23a038a1be98249aed9f05a18b98c999769fb8a052987899189f75a01c98ed988f9e2ba0ae979798249ed39fff966998d09d6f9f709627987f9d1c9fa6950898439dc89e3b950b980f9d4f9e17950497b39c009e4a948d98859cfd9deb938d98859cfd9deb939b0049173c18709b9b0049173c18709b1425152a942bbeab7126a42b6b2caead2826322b252c90aef024a329b72a1baf10234128db288daf161f4a241d25c4affc8c2a18f818c4aff09e72a2f1a256aff1a114a6f3a6b1ae1ca40ea8e4a8c4adcaa417a9f4a9d3ac5ca5bba9ebaa6cac82a5f1a92cab04ac38a5c6a9beaabaaab6a442a93eaae9a97ea4e3a8dda931a942a4b0a893a9c9a840a495a875a965a873a217a808a92ea828a00da76da854a8d99befa5c6a79ca85f115fa4eca5e3a832182ba338a5eba81a18a9a364a5ada8759795a4f8a50fa847a01fa692a765a64ca133a696a75ea464a116a658a7e3a271a1c6a511a729a267a194a5cea6b3a141a160a58aa60aa1cca00ea523a6bea07aa0c6a4b8a52aa015a090a47fa5a79f619f50a43ca5f69ee19e1fa409a5399ed69e03a4e5a4e99d779e7ea3a7a4759d139ee3a23ca4cd9c8b9d71a201a4719c0c9d2fa2bfa3379cd99cd5a172a39b9b899c67a1fca2e59a569c0ea173a2619a1a9cd4a01aa29e99789b8ea0c9a11d99f19a51a08fa19c98769a13a046a15a98509ad99f0ea10798159a7e9fdba0c597b499209fa9a078978f99d19e6da0ed963399749e2ca05996e598de9d719f9395c398a19dfb9e2895c698829d999e1a95e897f69c469efd942d99039d479e45952d99039d479e45956e1e3e230f24e0a46e1e3e230f24e0a4ea25b02a062c5bac37263f2b5a2c64adcc25fd2a0f2c82aeaf24bc29a42a07afb3220828d02871afbc1e35247d259daf1c13d41a201ca4af939dbfa1f8a24faf97a1cba509a7a9aec6a338a8e9a8b2adaea42fa911aab1ac6da5e8a9d8aa60ac90a51daa32abd2ab1fa5a6a9b2aa90aaa9a438a926aaa2a95da404a9cfa91da92ba4dea8d0a9aea8eca3b0a881a93ea86fa35ca832a990a7baa2f1a709a900a7d6a177a7c1a88fa64fa1daa638a846a6b0a0c1a634a8eaa5a8a063a6eba75ba555a1f4a645a8d2a416a20da73da84ca439a3b3a603a88fa3dea13ea666a790a23aa1c6a5e2a6e6a170a1ada5eaa67aa17ea180a5a9a651a13aa116a542a6d9a08ca0d5a4d7a58ba0e99f8da483a52ba0609f59a463a5739f479f34a467a5089fd59eefa321a5499e439e60a3a3a48a9de69dfea249a4319d929db9a221a4e29c5c9d65a2e7a3819cef9cfaa17ea32a9cc49c9ea11ca37e9b9b9c58a1c3a2d19a649c23a18ea27c9a189ce0a027a2169a6a9b8ba0bba17b99f99a47a064a12999b29a10a01aa1bb98a29aa69fcba080983e9a049f6ea00598c899609e16a01b972b99e29d809f5f968798799df89ebf952298389d979e12952298179d479e00950398109d319efa94e598e99c419ed394e598e99c419ed3940000fb0164076f8f0000fb0164076f8f3125492aac2be6abcb25292b3a2c4bad7425a02ae72b08ae71248e29b12abcae95221428e32828af451e1024e62444af5f0cd817bb183baf239d7ba1a9a2e5ae31a1e2a523a767ae5ca346a830a97aad75a445a92daab7ac07a5cea90aab33ac2aa513aa46ab73ab1ba5c9a9e1aa7aaa92a452a96eaabca925a4eea8cda906a9aaa3b6a88aa989a83ca36aa84ba900a8d5a21da8faa827a76da2c6a7b5a877a636a27ca798a8faa526a286a79ca886a5cca12da778a8e4a4eea168a784a8c0a4c2a154a785a88ba417a2e4a612a811a4aba15aa69ea746a326a1d9a50da798a2f4a08ba5c0a66ba2dca05da57ea62fa2bba04ca57ca6daa18aa01aa540a635a135a0c9a4eca5a0a0c79f9ba49da548a0529f68a45ea5df9f119f3ba423a55e9fae9ef9a3e3a4969e3e9e83a3aca4119e149e33a37ea4839de79ddba249a4319db39db2a231a4cf9c789d62a211a4969c379d31a2cda3379cbb9cbca146a3d09b4f9c61a1eca2069b059c1ea19da2649ab79bcca043a2cb995d9b6da0d0a12799989a10a042a18e98289a509fa8a02598a399b09e45a0aa970a993c9efc9f3997c898cc9d989f47967f98789d469fae958698809d799f88958a98879d5e9f8f9590970d9dc59e73941799449dd39eae931799449dd39eae930000ef853a876d8e0000ef853a876d8ec824112a892b4aab5c25ef2a252c20adfc24562a9c2bf6ad032439294f2a82aed62181278928dbae5a1e3c24272518af3912681acc1b2baff09c72a1dfa1d9aecba0e3a5d0a668aef4a21ea805a98ead48a443a93aaab5acf0a4ffa921ab1aacfea4e1a9ffaa5dabc7a49ea9b7aa65aa6ca45ba969aaaaa931a415a91faa2da9fda3c3a8baa97ea804a346a822a996a761a2dda7b7a88aa60da291a77aa82ea6e0a136a75ba8a0a5b1a112a733a808a59ba1d1a622a89ba49da1a6a613a84ba497a196a603a81ba474a158a6bea7a7a378a149a67fa708a36ca11fa66fa7a4a253a103a658a752a239a1c8a51ca713a2e0a06ca5a6a689a179a020a548a629a13da0eba40da6f3a015a0c6a4eca5ada0de9fc2a4eca56ca06a9f93a49ea5f89f019f1ea410a5ce9e609e98a3a0a4f39d1d9e64a385a4a99df09d22a366a42f9da59dbaa230a4af9c7b9d53a2d2a34e9cff9cd4a146a3af9ba69c5ba1a5a2fd9a259cf8a04aa27c9a9c9bcaa00fa2fb993e9b98a0d2a1bd99f09a76a09ca18399a69a38a067a109997d9a04a03ea1d998069a8c9f0fa18e989599fb9edda01b980a99939e83a07397e398349e28a09396b398059ef89f2f96b398e69da49f0e962298bf9d959f18952499879d599f3a942499879d599f3a94000011028f07c18f000011028f07c18f6824bd29212b56ab2625d82a012c0ead9e24202a612ba5ada2232729462a50aeb72146276d28b8ae9b1dbf23be2402af0e0c1d11b01827af499d08a262a3c9ae86a0b4a500a748ae4aa21ca8dca891adbaa30aa909aaa6ac92a4afa9e3aa05ac8fa4afa9d5aa1fab67a461a96eaa24aa1ea434a917aa68a9eda306a9eea9eda883a3d3a8d0a960a828a375a84da9c6a7b0a20aa8e4a8bfa67ea2b3a7a0a809a64ba278a79da897a533a255a785a8ffa4faa1fba642a8a1a4aca1c5a62ea83aa48fa184a6f9a7a5a36fa149a6a1a757a33ba11fa666a7eea211a1e0a529a78ca2f3a0bba5f5a64aa2f4a081a5b9a6f4a1bea00ca534a63ba16ba0c6a4dea5f0a02aa0b7a4d0a58da0fa9fa7a4bfa552a0889f74a46ca5d59f4b9f44a42da53a9f2c9f11a400a5869eec9eada3d2a4169e6e9e57a3b1a4859d1f9ef6a27ba42c9db29d86a232a4cb9c669d27a2c7a39b9c2a9dd5a169a3519c059d8ca106a3e29b879ceaa056a2c39adb9b72a0daa10d9a769b33a082a18a99159bfc9f54a14499c89ad29f20a12999769aaa9fe0a0d598f6993e9f9da06a98c799d09e5ba0b8975a995f9e15a0f3961899339ecf9f7f96ef98ee9d8c9fd5959798dc9d649fc39510989a9d319fd19569989c9cc89df49269989c9cc89df4920000ce8611883e8e0000ce8611883e8e3b249929ee2af6aac324862ac72bf7ac3b24cd29042b86ad2523f828f32919ae5b215d27562888ae2e1e14240925d6aeb5117a17ab1be5ae769c7fa245a3b0ae33a0d9a5dea61caec0a1e6a7aea846ad23a3d3a8c3a973ac29a47fa99faac5ab3ba47fa9a5aac5aae8a328a91faaada962a3d8a8c5a9f0a82ba3c0a895a97aa8eea27aa85ca9eda79aa22ea8fea83fa768a2faa7b2a856a631a280a774a8ada5daa123a741a82ca580a1b6a616a87ea429a188a6eda739a432a15da6d2a70aa423a133a69ca79ba339a128a676a783a358a114a686a74ca385a116a678a744a34da1e2a52da78ea2e4a06ea5b2a6f6a15ba00fa549a664a125a0eea4fca5f7a0e39fd4a4f4a5bba07e9f7ea486a567a0029f31a437a500a0dc9e26a422a5d29fb49e12a420a54b9f8c9ef4a3fca4f59e4b9eb8a3cda43a9e1f9e5da38ca4a39dfa9de5a248a4299dab9d70a215a46f9c279d1aa2a5a3f59bb99cb8a145a3249b5a9c61a1c9a2a79a119c0aa14ba2f499d79bc2a00ca26d99779b8ea0cea131993c9b5ea09ca1cb98179b24a070a18c98d99aba9f0ca149984a9ad19e66a05b97bc99469e04a080964799fd9de09fc4952199b19dfa9f19956e99a29da79fdb94529a249d3d9ec4942b99ca9c8d9e24952b99ca9c8d9e2495000085940894e093000085940894e09345232f29732a6caa8c246d2ab42bb9ac2724e829222b54ad9722c928e729cdadfa201527592837ae551dd723dd2491ae4c112d177018b1ae329c4da210a37cae0fa0c2a52ca703ae9ea1d2a7afa84cad7ca299a8b4a992aca1a32fa93daaceab77a31da927aa9aaa38a3d5a8dca975a9baa29fa87fa9b8a89ca25fa83ca91ba86ba230a81ea95da73ea207a8f2a875a614a2c3a7c6a8a6a5e9a168a778a827a5a2a1efa642a8d2a469a196a60ea85fa421a134a6ada70aa435a119a687a7a9a339a104a65ea781a369a1f7a54da732a346a1d1a532a7fca209a19ca5d9a62da28ca044a580a6dea168a003a533a65aa158a0dda405a61ea144a0c9a4d7a5e4a025a0bca4c9a592a0e89f98a4a9a550a08f9f77a483a5969f5d9f5aa464a51e9f299f3ca44aa5ab9edb9e0da41fa50a9ea89eb8a3cfa4a09d3d9e57a394a43a9d129ed6a243a4d09cbb9d5ba200a46d9c049df6a195a31a9c7a9c7da127a33d9b1c9c1ba1c2a2aa9ae79bdaa071a20f9a699b9ea009a282991b9b59a0cfa15f99ea9a36a098a10799849ae49f41a1b6981f9a789ff5a04d98dc99219fb8a0ea978199e79e6ba028977299a49e26a09a966899379ee09f0c96d998cf9d649fb7958b985f9dec9e2a95f098749d3c9f2094f098749d3c9f20940000858e4988a2910000858e4988a2912b231529462abea90224fc292d2b58ac17233d29672ad3ace9216528752964adb720ae261a28eead611d052356245aae0c11fe16501873aedd9b15a2d2a243ae099f37a57aa6bdadbba01fa747a812adc0a15ca84ba964acbaa2e5a8eba97eabe8a2f3a8f7a92daadca2dba8ffa92ba99fa298a8ada967a8a5a284a888a99aa722a23ba82da99ea6f2a103a8eba8afa5a6a1a1a79fa829a58ba130a76da8b9a461a1f3a642a87ba44ba1c7a60da82aa410a179a6e8a706a4e5a042a6a6a7dea3cfa000a65ea733a3dba0e8a52ba70da3c8a0a5a50da7a1a2b1a074a5aba61da290a03da571a6c8a160a00ea536a6a6a15fa0d0a4fba54ca148a0a3a4b7a5f3a029a082a49ea59ba0eb9f65a471a55da0349f4ba45aa517a0ce9e33a438a5b09f7c9ef4a312a5e79e339e94a3d3a4579e3e9e61a3a3a4f49d049e24a387a4789daf9dfca256a43a9d8e9dbaa22ba4ed9c119d69a2f9a3759cb69c06a28ba3049c499c79a1e2a2c39aa79bdaa046a2ff99179b7aa0dca14a99029b40a0a5a1d998f69a1fa06ba18798e39ad09f30a156985a9a569fd0a01298f899ca9e7aa00a97b499949e4aa0d2966199439e1ea04d962099009edf9f9495c798c29d499f69951398eb9c169e9c949f98469c519d46929f98469c519d4692f71e30244025b8a4f71e30244025b8a4ce2214295f2a46aac52215291c2a81ab5222a928be294bac07218a2796289fac801fbb25112716ad8f1c25221e2490ad65133e197f1adead5c9a8da0aca1dcad399f79a580a681adc2a05ba79ba8efac70a140a82ba958acd6a17aa875a962abeca178a868a931aa14a27da846a918a902a242a82aa92aa8daa123a8fca8e1a6a5a1d0a7dba8d7a567a187a792a8f2a43ea10ba740a857a4f4a0a7a602a805a4dba054a6c7a780a3b2a01aa64da716a39da0e5a50ea7f0a2a1a0b8a5e8a6d2a289a0a3a5e5a649a298a083a5c8a60ba293a05fa59aa6f8a174a041a57ea6eaa157a027a55ba6b4a12fa00ea539a6d6a1fd9fefa409a6c4a1d99fd1a4f1a5bfa1b09f95a4c0a54ea1899f5ea485a5b6a0659f26a44da53ca0049f06a432a5b09f779ec1a3f7a4f39e3f9e5ba3b6a46d9eef9d28a38aa41c9ea99d09a369a4b59d7a9ddfa246a4749d4d9d9fa21da4fe9ce09c1fa29ea36f9ca99c87a1ffa2c59b549c0ea16ea2989a4a9cc2a01aa2259a0d9c6da0d0a127997c9b30a08ca17a98e19aec9f55a11098629a8c9f1ba16e97e399199fd6a0fd96bb99bf9e7aa06c96b4998e9e39a03e9671992f9ed29ff3956499e19d659f87953e99c09d0e9f7795d5987a9de29ef6942099719d2d9fb1942099719d2d9fb194050861131a15b09f050861131a15b09fa8208d27652837a93522d328c82959ab5f21ea27dd28c7abfa1ff6257327edab511de423e22404ac4d1a112151221baca614c919311b78acd697dd9e779fc7acd89ccda3a9a4b2acf39ef0a506a756ac82a05fa765a8e2ab19a1b6a7b5a8b6aa14a1baa7aca8a0a94da1bba7d1a8b3a810a199a795a899a7ffa041a769a8f3a503a102a74da801a51da1dfa642a86aa419a1aea60ea810a41ea17da602a836a3f6a061a6bba7d1a2d1a00da67aa7b3a299a0e0a518a761a26fa093a5d3a643a260a060a59da6efa142a037a557a6a5a123a00aa528a68ba103a0e6a404a676a1c09fd5a4dfa577a1829fc8a4d6a561a1869fb2a4bca545a17c9f96a497a50da1779f6ca468a5eaa0239f3fa43ea5a4a0cd9e1da426a533a0a09e04a410a5df9f749ed2a3eba4619f2d9e89a3d2a4ab9eb19d2fa38ca4359e7e9ddca253a4919d689da8a22ea4129d529d51a2eda3949c269df8a186a3269cd89c83a10fa3aa9b559c27a1ada2de9a119cc3a03ea2599ae39b83a008a2c4999b9b4ea0afa17f994a9b1ea058a117991f9be69f20a1b798c99a6d9ff5a07a98429aef9ecca0dd976899979e8da031972b990d9e2fa0ad9612990e9ef89f7c96fb98f29dcd9fb3969c98ee9de29f28963599829d2b9f43943599829d2b9f439400003312dd12579a00003312dd12579a7e209627b628afa86021652847299daaf420b827bf2855ab272027269427a0abfd1d6c24862569ab4d1ac920ff210eab32137c182f1b9caa6191af99da97cea93496bc9d069edea87e997da07fa19ba8c69c7ea386a4eca8ec9d8ca46ea597a89a9e00a50ba6c6a709a0d5a5fea645a758a02ba661a753a65ca041a688a75fa56da047a691a7baa489a037a67ba708a477a008a66da78da369a0eba521a7bfa259a0a1a5f0a66aa239a075a59ca6dca116a051a575a697a10da01aa55ba65ea1ed9f04a520a62ba1ce9fd4a4eea55da1a09f97a4c4a519a14a9f65a461a5f6a0f19e45a457a50ea1029f53a46ea529a1459f74a478a540a14b9f83a485a569a1469f74a48ea55fa1719f6fa470a50aa1779f5ba465a5aea0229f18a423a53aa0a59ea5a3c3a4679ff99d1fa376a4799e1d9db2a22aa4b79de29c34a2c9a3089de09c0aa289a3859cec9cdda157a32a9cd69ca6a10aa3b29bbf9c52a1b4a2059b819c05a145a2549a2c9c9da0dfa1a099cd9b74a098a12f998b9b46a070a1fa98169b20a037a19498d49ad99ff8a03198869a529fb8a0d1971a9ae49e74a02597ce996a9e2fa073966e99fd9dd19f7c960699a29d579fea95d0985a9da49eff950e98b29c149e4a958a988c9c199e3d928a988c9c199e3d9200004a95fb95a59600004a95fb95a596441f7226c62790a8f2201a28052923aa742070278728ffaac01f5226e427a0abda1d9724b225edabed1a2f21742222ac1f144e175c1a39ac0f94b29cf89c16ac559906a1eca17eab049ba4a20ca484aaf19b21a35aa493a9b99c87a386a48aa8929d48a429a595a72c9ea6a4a1a553a6b39e05a527a62ba50f9f28a548a649a4249f32a560a611a3529f47a556a648a2739f34a547a687a1809f24a53aa615a1939f10a52ba6a5a0989fe3a4fba541a0929fd4a4f8a51ba0ae9fb3a4cfa538a0b89f95a4cda552a0a19f8aa4a2a563a0799f6aa48ba5a9a0509f60a471a519a12c9f69a470a54ba1529f7aa489a5c3a13e9f85a47ea5e3a1589f81a49ea5d4a1309f74a490a5a4a1b19e2ca423a54da17b9ec4a3d6a4e6a08a9e65a3aea47aa07f9e50a3a0a40da0369eeba279a4df9e649d77a216a4f79d019d23a2c0a3529de59c00a298a3719cc29ccba14ea3e39b819c89a1ffa24c9b459c43a19ca26a9a159ce3a042a2bf99b49b80a0c4a14c99f99a25a04ba1b3989f9aaf9fe6a05b984f9a219f9ea01698ff99bf9e56a0d097af99339e1ea043973999c89d9e9f8496f498949d5c9f1c96bc987e9d429f03968f98699d359fc095b8985c9de19e82952e983c9dd89e5395a898e29c4e9e4e95a898e29c4e9e4e950000e391dc9182910000e391dc9182912a1ff8257327c0a76b204c276928a0a9b61f7b2608285faa401e44259326d5aae61ccd23d92449aba9197f20a221b4ab3112ea165618feabf2943d9dba9dfdab459919a1ffa1b2ab689b21a352a416ab899c0ea438a56eaaed9c2ca454a5a9a9229d47a42fa5bea8da9d9fa4a2a57aa7729edca4f1a585a5b89e01a528a60da4e19efca4e7a5aca1199fdea4faa537a0259fdea4e7a54f9ea09fa3a4c6a57d9d9b9f95a4afa5c49c669f93a486a5a39c2b9f7ca48fa58b9cee9e61a46ca5e79ccb9e4aa44da5b89dcc9e36a433a5119eb49e39a438a5ad9f099f55a456a599a0389f94a4a5a5dea1b29fd6a404a6bfa2849f05a529a653a33c9fe2a428a606a3ab9ea9a4e5a594a2879e72a4b7a5e9a19e9e30a44ea523a1709ecda3d1a42da0979d60a37da43c9f749d09a35ba4529e619dd6a246a48c9d1d9d52a2f3a3c99cb69cd8a15ba31d9c699c7ea1f6a2679b2a9c26a19fa2a29aca9bcaa01ca2f899679b72a0a9a14999139b2aa05da1c498229b04a03ca16e986e9bbe9f29a10f987f9b729f04a1ce972f9b179fe9a02197469a609e5ea0c1966d99f29d05a01c963a99cf9dc09f0996e198b29d839ffb958b985c9d009f35952898fb9c489e2f95c8965f9c889d58949e97b49bd49c7b929e97b49bd49c7b920000c18c7a8c60910000c18c7a8c6091f91d06256a267ca66f1f25266227afa8af1e9025cc2656a96f1d8c24ac25dfa9581c93221c241eaa8d18ab1e2f206aaa460fa90c6c1485aaf793fb9c919d68aa8a9839a016a126aa009ab7a1dfa2e6a96d9a1da2a4a3a1a9cc9a2ea255a395a9f39bd1a210a492a9c39ceda30fa586a8b59d7ba4bca551a56a9e08a513a68ba1519e23a543a60a9df99ec3a4cca58b8d349fc8a4c8a58a180f9fc4a4d2a5a1190f9f67a472a55f19a09f1aa400a5561ad99ed9a3bea423196c9e76a387a41119a99e89a380a4d3125a9e95a39ba4ba95989eb0a3b7a4519dd09e3da44ea585a1a69f23a57ba6fda3d19f65a5cba69ea4739f42a5cda653a4f89ec3a4ffa56ea34b9e26a42ca525a2a09da9a3bca46ca1f89de0a3e5a4a5a0979d35a375a4fc9e089d8da216a4b59dcd9c2da2c1a31a9d6f9ccfa155a39b9ca59c8fa1f5a22d9c4d9c30a19da2b49be49bd8a038a2e59a589b6fa0c6a10b9aba9a16a05da16399679aaf9f0ca1ac98429a689ffba02c981e9a509fdea01f98049a009faea09497f199a89e74a03597d799269e1fa062966999b19d949f28960099569d259f8a95c898519d199f499594984f9d179f0c959c98459dfd9ed494c898039db89eb2948b98e79c499e6c949c9a859c099d46949c9a859c099d46940000748889898a900000748889898a90001a8721d0226ea3221e52258326cca70e1ee7240d267ba8dc1c0524ee24f3a8071b6621fb223ea916187e1dc21e86a97010240cc31377a90894d09cd39c49a90999daa08ba101a9529bbaa208a493a8b29c7ea38aa40ba81a9be7a238a444a7c49a1fa310a44ba87a9d70a553a611aae89f3ea772a876a6df9ffaa7d1a8311d6fa031a759a89c2309a0d6a562a71523029fa6a4d6a50121e19d30a442a5c420889d0ba4f4a4c0209d9d4aa385a4c2210c9d8fa22ba4d822169daca15ca25f246f9ccaa00ba2b3240f9db3a1e6a2d023579dc2a24ea4760f479f18a534a618a5eaa0eda649a800a8d1a008a774a8e6a61aa09ea571a75aa49c9e55a494a502a2fb9d4da3ada4a6a0399d83a218a4299f199d2ca2cea3229e669d29a2d7a3a99dc09ccca18aa3d29c8b9c7da105a3529c1a9c0aa17aa25e9bf59bb8a020a2979aad9b8ea0e3a1cb998a9b64a0b6a152997b9b38a083a11d99699b1da055a1ed985d9bd59f12a18398429b9b9feca05698079b5c9fcfa0f9978e9a0a9fada04f97439ab69e8aa0ad96d299679e55a05d96a699099e07a00196b599bb9d989fc395a399839d319f4c955e99409d0b9f1a950f991b9dec9ec994c398099de19ec694d397b99cfb9e4f943b98aa9c839ea4943b98aa9c839ea4940000af8b358acc8e0000af8b358acc8e1d1d2d244725e7a4a01db524da2509a7061d3f244f25d3a7261caa2258244aa86d1ab620e32190a86c17dd1c141ea9a8bb0d528b928c8ca8af93d19cf19d80a8e498f3a0efa118a81b9bd6a205a454a7449caba382a406a6579a79a198a2aaa3ac95239d649ed69f188c6195069794993587e8928694da97268c539501963e99be924d99879aa79ba698e09d1f9f439e4c9b49a02ba16e9f489c07a1e2a1759f089c20a1f2a1df9e729aaea077a1ef9df09850a052a1fe9c7b9a00a113a25f9d1198a6a149a37a9d9d9e1fa52fa670a1019f67a557a640a4929d31a236a4dda4e59d3da4aca4d1a16298d5a30ca5ec9d8c973aa1f7a2709b9c9ccca024a3fd9a8c9d98a14ca3489c9f9c09a177a2699bd69c0da174a2b29bfa9c0fa177a29b9bf09cf6a05fa21e9b319ddca04ba2a59ad09ca4a006a2309ac49c83a0d8a1bb996b9c7fa0aba193992d9c61a08ea12a99bd9b2fa052a1ee98579b0ba020a18698f49a929fd4a03d98999a019f87a0d997419a909e3ca00e971e9a519e00a0b496f999009ea29f6096c899ba9d479f149654995c9dff9ec295ef98299dcb9e4f958e98ef9cb89ea0947a98c09c8d9e819465989d9c5c9e29946098809c049e1b941098079cae9d87932398089c3b9dd0932398089c3b9dd09300001588b282ba9000001588b282ba90ff1c18243a257aa4351d6a24542546a6631c0f237c24d3a6371a2a21bc222aa78e18461fcb20a4a7ab15421b101dd7a73f0a1d916392b8a79d93b59c5b9d1ba7009832a035a103a6b4995fa14aa212a51e9ab8a1eba24fa41a99e1a0f8a190a2b0978a9ef79f37a0e7942b9c249d3e9da796b69cc09d269ef9973d9faca0d0a01f9a90a083a167a1ce9a4ba142a22fa1779b98a1a8a2e7a0379cf0a1d1a2ffa0679cfaa1e4a29da07a9c01a2fca246a0639cf0a125a314a08c9cdea112a3989f489c70a1afa2fd9e1b9bbaa0bfa1a49de698879ed69fde9a2095809cc39d5798a890209ae69be79527934a9ab39b8d96b196df9b039d2c982699d79d00a0cb99689a089fe5a0509ac99be39f30a1909a129c0da03aa1529a199c32a06ba10d9a079c38a071a1ec99d39b1fa047a1b6997f9b10a020a14699539b05a00ca117992b9bea9f04a1f4980e9bca9feea0a098f99abb9fe4a07c98ff9a909fcba02898e49a679fb9a00598af9a339fa7a06797289ad19e85a0b396bd996c9e63a09c967899129e31a0f7955d99c09d03a0a8955f99959db49fad951e99559d4f9f3d95c298349df89e1e956e98f49c979ea5941d989f9c1f9e61942b98679cb49d0494a0972e9ca99dd9922e98039cef9c92912e98039cef9c92910000b1147d154e900000b1147d154e90121c7422fb23dfa3141cb7221e2423a5451beb2155238ba538191c205121d0a5fb16331de51ef7a58e12c417bd19dea57d0301933e91bca5ac91799a099c52a5ac95b79d0f9f9da4b597cf9fc9a004a4339815a0dca085a27197f19e32a049a1b496e09d239f58a07696939dd59ef49f83973f9e9c9f3ba07a982f9f81a0d5a0989945a038a12ca1619ab3a0cfa1eba0049b08a140a2b3a0fe9b5aa19ea290a0479c93a1c1a25ca08e9ca2a1dba23da09f9ca3a1d6a2f89fec9cc7a1f6a2ce9f649da6a10da3e49e0d9da9a111a3959e9e9c28a1cda2a99dc89b87a0e9a1f59c149ad89e3ba0e59a0498009d879eac98ad952f9c5c9d49977a96be9cd49d0b98e4980e9e589f2a991d9aee9e69a0bb99229b349fe2a0a999d59b999ffea0cb99109c7a9f19a16899ed9b6c9ffea04b99ab9b4b9fb3a00f99729b529f8ca0e198369b229f80a0b198219b0a9f73a05798df9aec9e69a0fc97bc9ac59e63a0b797369a7b9e3ca0fc96d999239e2ba09d96bb99fa9d10a015968299c49dde9fde958599a49dcd9f69956899709d729f389563992f9d209ff8942c990e9dca9ecb94c298d09c919e8f948698a69c479e68945b989f9c269e55943f987b9cce9d6794a597499ca39d8d935097bf9bf69c8e915097bf9bf69c8e9100000000000000000000b1147d154e90121c7422fb23dfa3141cb7221e2423a5451beb2155238ba538191c205121d0a5fb16331de51ef7a58e12c417bd19dea57d0301933e91bca5ac91799a099c52a5ac95b79d0f9f9da4b597cf9fc9a004a4339815a0dca085a27197f19e32a049a1b496e09d239f58a07696939dd59ef49f83973f9e9c9f3ba07a982f9f81a0d5a0989945a038a12ca1619ab3a0cfa1eba0049b08a140a2b3a0fe9b5aa19ea290a0479c93a1c1a25ca08e9ca2a1dba23da09f9ca3a1d6a2f89fec9cc7a1f6a2ce9f649da6a10da3e49e0d9da9a111a3959e9e9c28a1cda2a99dc89b87a0e9a1f59c149ad89e3ba0e59a0498009d879eac98ad952f9c5c9d49977a96be9cd49d0b98e4980e9e589f2a991d9aee9e69a0bb99229b349fe2a0a999d59b999ffea0cb99109c7a9f19a16899ed9b6c9ffea04b99ab9b4b9fb3a00f99729b529f8ca0e198369b229f80a0b198219b0a9f73a05798df9aec9e69a0fc97bc9ac59e63a0b797369a7b9e3ca0fc96d999239e2ba09d96bb99fa9d10a015968299c49dde9fde958599a49dcd9f69956899709d729f389563992f9d209ff8942c990e9dca9ecb94c298d09c919e8f948698a69c479e68945b989f9c269e55943f987b9cce9d6794a597499ca39d8d935097bf9bf69c8e9100000000000000000000000000000000e720ec24e02594a4732220271f288ba8e5227f276f28fda9e72158268127f6aa7020cb24aa2545ab1e1e4f2284238babbb19d81e8720f8abdf892b18e81a82ac019aa69a8a998bac19a011a3c0a2ecacb8a2eaa7d3a899ad8ca162a75fa856ac959d3aa5e5a6dea9b21a49a138a456a9fc228f8ff8a0bba97425c21cd89b04aaba26de21071cf0a9d1268d23911e63a92f286a26af241ea9a227f926ee2151acc5234fa103a601a9eb249616e89e26a9bd25c91e0c9633aae324c21efa8f90aa6924a61eb68f75aae2232f1bd9989aaae1211810429e96aae81efe9bd3a0b8a96d9a76a123a328a7859e4ea269a34ea2ce9deba135a3999ea39d1ca239a32f9d6c9c54a15da29f9c259cb2a130a3629cbc9d4ea341a4b79d519d75a385a4779e8d9c74a2f8a3e59c019c23a157a2a19bcc9b8fa092a1ff9a649b4ba05ba1829a439b15a019a12f9af59aec9ff5a0ee99b79a909fc3a0a999649a3f9fa1a05c99fc99d19e6aa00a999199569e37a060982d99089e06a0f297cf98bb9db49f3097bb98779d509f99969298469d189f1e965e98319dbf9ef3950198fe9ca09e7d957597d29c6b9e14954597909c229e97940997679ca39d6e94eb96569c729d2994e496549c399d5b949696409c279d6c94e298a19ce39dfd920000000000000000e720ec24e02594a4e720ec24e02594a4732220271f288ba8e5227f276f28fda9e72158268127f6aa7020cb24aa2545ab1e1e4f2284238babbb19d81e8720f8abdf892b18e81a82ac019aa69a8a998bac19a011a3c0a2ecacb8a2eaa7d3a899ad8ca162a75fa856ac959d3aa5e5a6dea9b21a49a138a456a9fc228f8ff8a0bba97425c21cd89b04aaba26de21071cf0a9d1268d23911e63a92f286a26af241ea9a227f926ee2151acc5234fa103a601a9eb249616e89e26a9bd25c91e0c9633aae324c21efa8f90aa6924a61eb68f75aae2232f1bd9989aaae1211810429e96aae81efe9bd3a0b8a96d9a76a123a328a7859e4ea269a34ea2ce9deba135a3999ea39d1ca239a32f9d6c9c54a15da29f9c259cb2a130a3629cbc9d4ea341a4b79d519d75a385a4779e8d9c74a2f8a3e59c019c23a157a2a19bcc9b8fa092a1ff9a649b4ba05ba1829a439b15a019a12f9af59aec9ff5a0ee99b79a909fc3a0a999649a3f9fa1a05c99fc99d19e6aa00a999199569e37a060982d99089e06a0f297cf98bb9db49f3097bb98779d509f99969298469d189f1e965e98319dbf9ef3950198fe9ca09e7d957597d29c6b9e14954597909c229e97940997679ca39d6e94eb96569c729d2994e496549c399d5b949696409c279d6c94e298a19ce39dfd92e298a19ce39dfd9239235226f9267fa539235226f9267fa537245a280629e5a90c244f280f2936abb3231c28db2846ac5022c7260c28a0aca62042253726e9ac5b1dad223e2452ad6d117d1dbf1f85ad55995110b71729ad259e669d109dc2ac79a1eda401a669ac73a288a795a865ac53a21ea8eaa8aaabca9fcaa642a89eaadf128ea485a619aa7d22469be6a1e9a95125791fe61065aa46274f25352329ab4a2842288d27abab7426eb21061a66ab0625dfa3d6a786aabe2406a103a672aa03250f97b7a2b1aa2f25ab16199f05ab6d245a10e19e46ab59234010a39f5fab0122c095af9fc5aa831c669f78a199a97a9dbea3b6a445a769a004a4d1a488a21ea016a4caa42ca07c9f02a4ada4239f369e5ba2a0a3f29d3d9d44a150a2359d1a9d03a138a24a9ddc9d7ba224a4bf9d2d9ee6a301a56b9ede9c5aa2dba3e39c399c43a1a4a20c9c009ce4a00fa2359b9d9bada0dca1ab9a279b7aa0a8a1649afb9a4da065a1f099909a22a038a1d499639ae09f01a15f991b9a909fd8a0ed98d5991e9f9fa0a3989199b99e66a03a984699749e28a0bb970099149edd9f0197c198d59d789fb8969d988b9d0e9f63963998299dad9ed895b097eb9c4e9e57955797a09cfd9de094c996699c9d9d4894a796409c249d2c943096c19bd49cce9357983e9c759db09457983e9c759db0945823b0265b27baa55823b0265b27baa5d324f028bd297caa8624e528b82929ac8224c428a229f4ac75232628d32851ad672127264b27b3ad201e8823c92423ae0315ef1d30202cae689bad9bde97ddadbe9fe9a1bea174ad2fa29ca56aa6ffac61a390a760a89bacc0a330a8e5a8eaabefa241a841a9b8aa72a0cba660a8d1a96a8c0ea4c2a5b7a9e821549075a027aafb2498205111f8aa5d266e22561b88ab5426291d8c9d03ac6426a8119ca1b0ab3c261d91d1a245abcd25e69077a293ab4925bc1097a1c6abc22487904da1b7ab0d234996e4a088ab3e20099e91a2adaa7f0c4da251a416a9e09f52a42ca5e7a5aca093a45ea5b5a139a014a4e1a40ca0d09fc8a3a6a42ea0799f9ea37fa4f09fa99e08a31ea4f99e009e8da2fca3f69d0c9e15a353a4cf9dd09d24a376a4bc9d5e9ddba23ea4569d269d7aa2eca3dd9ca69cafa113a3469c509c12a15da2c49bd29baca0f2a1279b419b89a0aea1a99ad59a5aa07da1649a8b9a29a04da1ec995b9aef9f0ca17799349a919fcaa0e098c499319f93a06b985499b69e42a01f980099429e05a06997de98ff9dab9fd596b198d19d5d9fa196a998b59d329f3f969898839d209fdc957a985a9df19eae956a98329dd59e1a952398f09c779ee9942397a49c069eaa944f982a9c309dc9914f982a9c309dc991d2205e24ed24afa5d2205e24ed24afa56725be29962a86ab32258f29a52a83acb8243329f72957ad66233428e128b3adc2216326902728aeec1d7723c22499ae7012331d8b1fafae0d9c209c389885ae98a04ba35ca404ae24a292a560a665ad67a33aa732a8c8ac04a446a821a91bac20a4b1a895a932ab11a476a84ea98daa4ea2c1a7bba831aa189d3da51fa700aa7d1c54a168a488aad42202976fa186abc824e2908ca101acb625db9008a210acd025c31065a20eace52596107ba10dac772574903ea100ac5a24709698a1b6abe121489e01a3f3aaf31aaba16fa486a9e99c30a44ea536a765a0c8a4c0a596a4a8a063a453a5dfa160a070a45da5e3a068a08ea460a5dda047a072a452a59da0e79f57a434a51ea0e49e13a4fea4689f509e96a3a5a4739e399e3fa37aa4da9d2e9e1ba36da4a39d1a9ec5a21ea4309d3e9d04a275a39b9c899c74a1cca22c9c6b9c37a188a2a99b229cf8a038a2389b8f9bafa0e1a1979a029b5ca07da1249aa09a18a037a193994a9ac39f00a14a990d9a6e9fd9a0e598d9990b9fa7a0a59877998c9e5aa037982399229e16a0a097da98c99d949f0297ad98939d429f93969d98939d0a9f3f967d987b9d099fe3954098569db69e7e9508982a9d5b9e9d95e897d49c319e1595e6978e9c32a05492e6978e9c32a05492ed2099240a25cca5ed2099240a25cca57825032aed2a0dac4225a329c12acface1246c29402a92ad8a234028ef28efad99214e26822757ae7a1e1124d924a0ae4115541e8d1fb9aed59b389ddd9c8faec8a02ea4aaa416ae62a2cea508a76bad5da37fa75aa8a3ac3ba49da83ba92eac93a4dda8dda9dfab5fa499a88ea9edaa31a47aa858a9a2aa83a29ea795a80baa2aa0f8a54fa7eaa94d99f2a4c3a66daa7f1dd8a106a5d6aafd21269ee0a3ebaad022469caba211abd0238b9ae9a111abc0228e9a0ba233ab5421a39d7fa28eaa751cb7a057a385a9579aefa352a565a861a0a8a5a0a626a6f2a083a5bea601a4cca018a50ca665a2dca0e9a4e7a59aa190a0eca4e6a54fa14ea09ea482a5daa0f09f50a42ba558a0289f0ca4f0a4ec9f6a9eeaa3d1a4299f479e8da399a47f9ef49deca23ba4d09d869d6ca2dea3559d219d24a2a9a3e69cba9cd0a125a3959c6c9c70a1c7a23d9c289ce7a082a26d9bd19ba1a031a2cd9a549b5ea0c5a1589ae19a25a074a1d699759afb9f26a16199319abe9f0aa10d99199a9d9fe3a0e998b6994a9fb5a08a983c99d89e70a01d98e6987e9e2ea0cf97c798319ed09ffb969398f09d7e9f6e966b98999d089fe1952c98339dae9e1d95fc970e9d489ef794ce978e9c089e359489997d9d989f239489997d9d989f239485206624c62492a585206624c62492a54625c729dc2ad1ab5d250c2a132bf2ac1025a629a82abeadc423752834290bae8e21a526f92757ae631e1224e424a1ae2c15231d8d1fabae689c579e459e85ae38a0c0a361a411ae4ba239a629a764ad31a466a84ca9a7acf7a465a93aaa56ace5a445a941aaf1aba1a400a9fda95cab3ea4dba8b4a9c7aac4a36ba822a902aa4ba315a8c0a86da974a286a784a80ea99ba004a756a832a9549dd6a55fa741a9c89804a5a4a655a97e919ba443a649a96391c1a484a63ea90b96b0a46ca6e6a8609d15a5a6a696a734a021a525a679a5b2a04ca54da621a4eba04aa51ba605a3aca006a5eba500a2fea0d2a4d5a5a4a1fda0d2a4e3a589a1cba0c2a4dea551a16ba0b3a4b7a50ca108a07fa474a5b3a0e49e26a423a539a0379e94a3d1a4589f259e13a366a45b9ed89dc2a22aa4c59d729d96a225a4329d1b9d3ea203a4ac9cb79ccca1c4a32a9c539c74a134a3829b289c1aa167a2ba9ad19baca0c6a1299a099b5fa07ea19499c09a36a051a15f99869a12a016a132991e9ad19fe5a0fc98bd99539fa8a08f987f99df9e59a055981899639e12a01198d198089ec59f7e979598be9d5b9f9e964298639de19ec995c397219d839e19959697f49c199e3795d296a59ccc9d4994b6988a9cce9d8693b6988a9cce9d86933c2026249f24a0a53c2026249f24a0a5d2247b29a12ac5ab4325192a502bfcacf724ae29b22ac6ada4237f283e2908ae6d21af26fe2760aebd1d9c23922497ae0b0cbc19cf1ca1ae529d57a03ca17aae2ca037a4c8a424aef8a101a639a775adcca32ea833a983acd0a439a937aa5aacd1a44da963aa36acada421a931aa62ab46a4c8a8a3a97eaad6a35ba844a9bba9f0a336a8eca826a943a303a8c1a8d2a88aa2b3a787a862a80aa23da741a8f4a75ca109a733a8bca7eca07aa6cea746a77ea019a639a7bea68fa014a642a7b7a5d9a024a68aa789a48ca13aa670a735a47ea106a61ca76da36ea1cca5c5a647a35aa19aa5c4a6d3a212a172a5baa65aa2b9a02da551a6b8a159a0c9a4c5a537a103a05ea449a584a0249f00a4dda4d89f849ef3a3c9a4689f859edea3d4a4cc9eba9e81a3a5a4689e729e1ea360a4c69dde9d96a204a4589d609d35a2a9a3d69c099d0ca281a3869cc69ca2a136a32c9c8e9c1ea195a27f9b649ccfa024a2c29a1c9c9fa0e0a13a9aa19b7fa0aba1ce99099b53a075a158999a9a19a049a1e498629adb9f0fa186980c9a6d9fd8a05298b6991e9fa9a008989a99cc9e71a0c9974b995d9e25a01897dd98c99d4c9f03967f985e9dcb9e389578982f9d659e27950c98b69c0a9e0595cf98f59ca29e8796cf98f59ca29e87960000841bbd1b5f990000841bbd1b5f995524f028172a4babea24fd29102b35ad8b249029752ab7ad1e237b28352902ae63214826e2272eae651dda22792468aec7119d19c11c7dae279c689f7fa072aeb29fcfa36ca409aeb8a10da6f0a646add3a35da817a954acbea454a937aa41acaaa447a977aa19ac75a4f7a8f3a935ab30a4d3a8a6a962aac3a387a872a99ba9a1a374a83ea951a9f5a250a800a9e3a8a2a200a8c6a839a84da2cca7a3a883a704a265a74fa8dca60fa21ea72ba85ca685a1fda640a81ea67aa1c1a616a876a538a12ba6a5a705a45fa1eba523a789a383a1c4a5eaa689a344a1e5a50fa700a33aa1c0a5dda6a1a24fa190a5b7a613a254a13ea552a692a1f7a0d1a4eaa52ca137a086a479a5dba0459f4aa439a55fa0db9e2fa41ea528a09a9e03a408a57c9f359e67a3aca4939ef89d0ba349a41c9ea89dcea22aa4ad9d649d7aa200a4579d209d33a2afa3eb9cd09cd2a14ea3709cbc9c7ba1eda2229c879c3ca19ea2969b5b9c04a159a2f89a129cbca0e5a1519a709b66a078a1de99c89a1ba01ba14d99719ab09fd6a0da98599a259f7fa08f982e9a9d9e2ba04498e2991e9ecd9f70971f99a39d329fae965f984d9dab9e0b96fa97209d609e7195ef970f9d319eab9556985d9d7b9e7595c998eb9c959e4194c998eb9c959e41940000470a920cee8c0000470a920cee8c1424fb28392a15abe624082a3c2beeac62244b294b2a61ad0d2365284e29d4ad52219c26f3272cae4e1dec222e2468ae9c119c19c81a6aae129b569f74a050aed69ea0a3aaa4d4ad92a11aa6b6a712ad59a383a846a942ac99a42fa933aa23ac7ba443a941aaddab6fa40aa917aaf4aa24a4b7a8c0a93daa60a370a84fa979a9cda21fa8e6a8eca8a4a2dea79ea873a8aba282a770a809a8c5a267a752a867a7d2a10ea73ca80ea7daa1eaa621a888a681a1f5a60ea8f9a5bda1d0a616a89ba566a1d6a629a8b0a469a164a6a0a72da404a1d7a517a7a3a3afa075a585a6eba29da042a546a6b9a284a01aa520a654a249a0e3a403a6e3a114a0b6a4bfa552a1d29f73a47ea5c6a0759f5ea460a581a00f9f34a42ca548a0909eeaa3d5a4ac9f489e72a389a4de9ef19d27a365a4469ecb9dfca245a4fc9da49db1a231a4859d7a9d7ea211a4279d2a9d31a2e1a3dc9cd69ce7a169a3879c769c60a1b4a2039c0f9c11a161a2439bca9bd4a035a2eb9a789b95a0faa15f9a0a9b41a091a1bc997c9ad39f12a11b99ff99249f7da08e9892998c9e30a0389820990a9ed39fe097d598be9d6e9ffb969e98689d349f68968998699d649fec956d98659d189fe895e097cb9c6a9e8b945d99e69dd09f8a955d99e69dd09f8a950000078c0e8979880000078c0e8979880b24e228fc29abaa9b242d2a492b04ad1c243829352a6ead8f2237281829c0adca2025267027fbad711db622662435ae7c14bc1bb11c63aec59a429f6ca03fae939e9ca3ada4d0ad40a1e1a578a733ade4a25aa81da963ac42a44aa934aa0dac5da437a953aacaab31a4e4a8faa9d9aa1da4e3a8f3a95daabaa3aca8bfa9c7a929a34ca83da922a9c5a20da8d5a897a869a2b5a793a800a8d2a125a72fa8e2a680a1aea605a84fa63ca164a6d3a7cea515a12ea69da77da543a152a6cda729a55ca13aa6dea763a444a137a69ca743a434a1e3a517a754a303a1bfa5d8a6d4a2a5a081a594a6aaa26aa01da523a629a222a0aea4c3a56ea1e89fa0a4a1a518a1b29f85a48ba5eba09b9f85a495a5caa0339f7ea498a5a3a0dc9e33a43aa51fa0909e90a39ea40f9f2f9e21a352a4549e049e04a34aa4eb9dae9dc9a22ea4999d549d63a203a4119d039d01a284a3a89c9b9c86a1eda22a9c4c9c1fa169a2a39bea9bd6a00fa2ee9a719bb6a0e9a1ad9a2c9b8ba0b4a1719af99a68a098a13f9ac29a2fa063a1c299729af29f1fa17799fa995c9fe5a01e99a399f49eaca089981b99769e66a01f98e0982e9e09a01597bb98f09dbe9f5b96b998dd9d739f47961c98759d599fa7948199609dee9e65948199609dee9e65940000fc01c009f18a0000fc01c009f18a1823ae28c029b0aa5924be29ee2ac9ac8223f328d02916ad08220428e62861ad8320ba25f826b2ad011d5f22c023f4ad09116116751a25ae5d9b14a0faa014aebe9e33a4daa4baadcba023a680a715ad91a242a80ea94bace2a3efa802aaefabd9a3e4a8ffa94eab16a4d6a8d4a970aaeda3b0a8b8a904aa70a38ca892a972a915a35ca84da9f4a8ada223a8fea874a85fa2f2a7aaa8cda70ea287a76fa81fa7c4a147a75aa8c1a687a1eea639a82ea647a1b6a603a886a532a191a605a82ca5dea050a6cfa74ba405a1d9a51ea7e4a3cda0a6a5b8a662a3dea083a5ada6fda2cda06da596a6c5a2c3a032a56aa663a279a0c9a4d8a570a11fa095a492a510a1de9f98a4a3a5e0a0b89f7da47fa5a3a0189f34a431a520a0de9e0ba4eaa4a49f9e9eb8a3b7a4ef9e719e4aa381a4779e2f9eeca256a4129ec09d95a21fa47e9d519d2ba2d7a3169d049dd7a162a3c39cc69c8ea12aa37a9cb09c38a19ea2189c299ca0a0efa1fb9a7a9b29a08aa1179a109b07a057a1e799b29ad89f39a18399779aa79f0aa161992d9a6d9fcaa03899d6990e9f87a0cf989c99b49e48a046985e99419ef59f70970e99f09d819fcd96cb98b79d319f60968598889df79e3d9610984b9dcc9ecc956d98629c859de0916d98629c859de0910000fa8dc68d6f890000fa8dc68d6f89db227e286e292daadf238929b82aaaacff22b828ae29f6ac8b21d027a6283cad4320d125cb267ead1b1db3226724cdadd5132019471aecadc19aca9fcda0e0ad1f9e03a4ffa499ad3ea088a5d7a6fcac82a188a7a0a81eac4ea3e2a8bda9daab94a3f2a80faa46ab28a38fa89ba93aaa23a390a880a9c3a9c7a240a842a931a956a224a8d1a8b3a804a2bca77fa82ba8a9a15ba74ea85ba779a1ffa622a8bba62aa18ca6e6a70ea6dea063a6bfa75ba5e1a01ca668a703a5f6a01aa65ba7b9a4e2a0ffa558a71da4dba0baa538a7aba307a1c0a516a7a4a31aa1bea509a764a3faa05da5a5a611a376a0f2a4fba552a2929f9fa495a59aa1a79faca4a4a580a1719f94a481a51ea11c9f3ba435a5b7a0cc9e0aa407a562a09a9ef3a3f3a434a07f9ed2a3e4a4df9f469e9ba3c3a4499f2b9e5ca397a4b49e089e05a35ca4049ecf9d7fa210a44d9da19d06a295a3ad9c1f9dbca127a31b9cad9c6fa1d4a27a9b469c1da169a2bf9af89bc7a008a24e9a8f9b86a0bda1c899199b51a07ba18599ca9a23a047a11e99989acc9f01a1d1985a9a249f9da07698e8997b9e23a0d0977e99119ee29fe1960399dc9dc69f7596cd988c9de79fb395d8984a9d759f42956e99189d959e2f954f99fa9c289f9c944f99fa9c289f9c940000d88f1890cc8e0000d88f1890cc8e05221028052995a957234529272a4facb422c828bb29c1ac61219527862807ad0720a425ea2653add21c7b224b248cad5b13f018441cb5ad8c997a9f05a0a4add89d23a4d3a46cad23a0baa5dba6e7ac3aa153a789a83cac9aa276a85fa97aabdea2aaa8b3a9ebaa7fa26ea879a9fca98ea256a854a96fa948a222a8fda8d1a824a210a8e2a879a8eea1c9a7b9a80da8b5a172a77aa827a78ea127a74da879a61ba1bba60da8baa51ea182a6dba76fa520a139a68da7e1a423a114a66ca763a4eea0c2a5f8a6f9a3cfa08ca5c8a68da393a05ba590a60ea374a02fa546a673a20fa0f6a4ffa524a2e39fc6a4bca5cfa1f89fa7a4b2a5b8a110a0a6a499a58ca1ca9f87a483a521a1939f55a457a5a8a0339f28a431a52fa0299f12a421a5e29fee9eeda3faa47e9f849e95a3c2a4d09e469e42a385a45d9ed59dcca242a4e59d909d58a2f1a36f9d449df4a189a3dc9cbb9c9ba11ea3859c599c4ba1caa2109c109cfba080a2239bb89bbca042a2b79a549b82a0f6a1349aff9a39a08ea1d099779ad69f35a14799339a4d9fd2a0eb98e299fe9e87a0b698bc99d49e62a075989799cc9e40a019984f99699e02a044973499e29d8d9f3d96b0987d9d079fe09568982d9dc59efa943799939d469f38943799939d469f38940000299392944c900000299392944c908c21ab27512820a93e22f628e92903acfb216028452967ace42015275828a5ac881f3e256726e5ac5e1c0e22fb2330adbb147d1af71b5cad1d99fb9e55a044ad079d34a378a406adb19e1aa516a69eac0ca04da65ea710ac76a189a7aaa80aab0aa25ca815a930aa61a26ea849a972a93da23da830a9cfa823a223a81aa93aa8f3a1e6a7d2a83ba7a8a183a792a846a667a12fa760a895a552a1ffa634a83ba52aa1b0a610a808a5faa06ba6d0a79ea4a9a028a678a746a483a0eca53fa70aa478a0b1a506a79ea370a08ba5c9a67ca35ca05da588a62fa352a02ca55ca6fca24ca0f8a437a699a23da0dea4ffa543a256a0a7a4d1a50aa268a090a497a5aaa129a058a46ca51ea1bb9f33a430a5bfa0189f0ca403a558a0949eeca3f4a4fa9f3d9e90a3c0a46c9fe89d45a399a4b49e069e30a377a4659edd9df3a24ca4f49d759dada21fa4819d429d64a2eaa3289dbf9cffa184a3799c639c8fa108a3f79beb9bf3a04aa2999a5b9b7ea0c6a1bd99119b48a091a17899179b25a072a11e99069b04a035a1f698ff9aa19fe6a0b798b49a169f9ba06c98239ab39e4aa00b98a199549e1da0b797fe98f49dca9fd396b098c69da09f1e96ad98a89d309f0e9648982f9d719e81956198c89c9f9e4f946198c89c9f9e4f948012b620bc208d988012b620bc208d982321ad27d02872a98e215c2808298fab6321e027b62801ac61204e26862722ac3f1e9d249d254eac5f1b4921f5227aac23154e1b771da4ac3e95719b999caeac609c14a28ca396ac8f9e17a5d4a549ac28a03aa68da7eaab9ba0b2a618a8d9aafca0fda63ca8f4a93da162a775a8f0a879a1aea789a81ea857a179a77da8c9a69ea171a79ba81ba65aa13ea763a838a50ea1d5a62ca887a4eea08ba604a862a4eea043a68fa727a487a0f8a536a7c4a379a0baa506a7bea387a098a5d2a607a489a07da5a1a69da387a06ea59ca645a37aa044a573a61ea362a01ea54aa6cba250a007a541a691a22da004a51ea680a210a0d8a4f0a554a2f29fafa4cba5efa1a59f6ea489a572a1589f1ea458a5baa0259f03a416a54ea0d09ed1a3f8a4f79f5a9e8fa3c4a46c9f0b9e3ba38aa4c29eb89d0ba361a4709e979df3a24aa40c9e649daba223a4979d209d4aa2f1a3379db99cc6a13da39b9c849c42a1a0a2d89b5f9ce7a033a2079b5f9c99a0d7a1659a1c9c53a095a195997a9b0aa058a10c99e69aab9f34a17698539a4b9f0ea11798cd99da9ec8a0ae97a6999d9e6ba023978c99549e1ba0e7961b99f19d819f8e96ee98a39d209f1b96d4988c9dd09e1396a898719dc59e699516997b9d4c9f069516997b9d4c9f0695000060162a181998000060162a18199803202e26a0278fa88a21142804290babbc200527462866ab921f7225a926a6aba41dda239c24cfab221b0e213a22e2ab4d15991bae1cbaabcc92d398f699a0ab2299ec9fe9a05dab539c13a3f7a309ab4f9eada493a5bfaa9e9f80a561a63eaaf19fbaa5e5a682a944a034a689a7b7a872a040a68da76aa799a07fa6a1a704a69fa058a695a76da5b1a057a6bca7e2a4cfa05fa695a7b0a4a8a01ca64ea70da492a0e2a506a7baa36ca0aba5c4a6e7a353a079a5ada68ca30ea022a55da613a3b29fe7a401a6a2a2849fbba4d2a574a2559faaa4aca54ea2589f8fa493a537a2549f7aa489a526a2229f64a466a5faa1259f4da454a5b6a1f19e16a409a52fa1b89eeba3d4a4cca0a29ee4a3d0a4b1a0849ee6a3e1a457a0679ea6a3d2a40ca01b9e38a39fa4449fbe9ddca272a4919e649db4a247a4459e4d9d6ba227a4b79d379d4aa2fea3459d469d13a2aaa3fb9c049dc3a14ea38c9c969c45a1d3a2dd9b0d9cd6a043a2ef9aa19b6fa0e7a15b9a4a9b45a0b8a1b2993d9b15a06ca17299069bea9f26a11b991a9bb39f0ea1f898889a479fe4a0b2987e9af69ec8a08b982a997b9ec8a016982799139e3da07c97f798d69dd69f5b97f498d99dd19f5e976c98d69df19f18970e99429dc29ec0930e99429dc29ec09300002e944195489000002e944195489068208c2612286fa8f0203a2779282baa1b203c26a727bcaa041f3b2569261fab861df723e02431ab9d1ac620da215dab0015d8194c1b1bab4d8d6898d097a7aa8b96339d079d14aa689900a0aca086a9b49baba1bfa232a9189d62a37fa4d1a8df9d22a4f3a463a8ad9ea0a49ba500a85c9f0da5f9a53ea7869f32a530a656a6d69f60a56aa6a8a519a079a5b6a611a515a08ba59fa6c3a420a04da57ea64ea408a042a54ba613a4ca9f10a53fa6aea3a09f07a515a618a3959feba4f8a5ffa26c9fcfa4d8a582a24c9f98a49ca567a2119f6ba46ca562a2d99e51a44fa52ba2d59e42a447a52da2e69e5aa46da548a2229f6da490a568a2679f45a461a505a2739f2da42ba58ba14c9f0aa415a507a1d99ec8a3e5a496a02b9e71a3a1a41fa0cb9dfda25ea4619f5c9d83a220a48c9ee99c49a2d7a3f49dbc9cffa19aa3569dd19ce0a154a3fb9cb59c9ea109a3899cb29c66a1baa2129c989c23a174a2729b539cd6a00ba2b99a029c6aa08ba1f2995b9b35a065a17e99229b1da037a12399ca9ae69f03a1ee98969a789fc7a08198639a049f86a03b98519ab19e49a0c9971a9a5a9e1ea033979799f29dc89fe4961a99989d589f6096ae984b9da19e6a960198a19cd59d379570981e9c759dcb9170981e9c759dcb91000063952897cd91000063952897cd91841e2825602621a855209826112890a9b31f2726582730aa6d1e1a251926b2aaf31c64238724e6aa511a73207b2119ab3b1585192a1c17abc38c3d988397d9aaa696299ef99e7eaab799baa099a1faa99e9b3ea275a3a1a9a59c4ba353a43ea99a9d1ca4f5a4bfa8da9d4ca4fea430a84f9e79a46ea54fa7869ea9a4a8a577a6b09ecaa4b2a599a5d29ec6a4b6a5c6a4029fc8a4b5a545a4fe9ebea4aba5c1a31a9fb1a4a3a53ea3109fa1a499a5f8a2009f8fa48aa5b4a22c9f7ea479a573a2099f67a45da5c8a2fd9e50a445a5b0a2eb9e39a423a598a20f9f4da443a5a7a2fc9e58a46ba5d5a2f89e4ca464a5dca2b99e47a457a5a7a2b99e3aa44ea530a2b19e34a43da5bfa1759eeba3fea443a1379e56a39ea4cfa01e9ee7a268a467a0059eaba249a409a0b59d58a218a4b19e099df7a19aa3c89dc69cbba14da34b9daf9cbea152a3d19c9c9c8ca112a34e9c4f9c54a1b3a2f29b0f9cffa064a23d9b9d9bada001a24e9a429b45a091a19299db9ac79f10a1f6989e9a419fa8a0a098389ad69e69a06898f999869e27a01c988c99309ef19fcc971999ad9d6f9f3b97d898839d509fc7969e98649d239fa0967398469d129f14968e984d9dbf9edf951398189db99e3d95d098b59c019ebf92d098b59c019ebf92000018945894468a000018945894468a271f422549264ca7c01f6226a72746a91b1f8025e126cca9851d3b24392513aae71b1622772330aac018d31e35203eaa69128115d0165daa14911b9a949b59aa0197f69e57a029aa5e9926a175a2e0a94d9b52a2f7a395a9509c01a33ba453a96d9cd0a247a4e4a8da9c4aa369a493a87d9d08a4e2a425a8f29d32a41da566a7599e53a442a54ba6729e53a447a50fa5739e4aa449a501a47d9e19a411a595a2719e16a406a55ba26a9e17a406a52ba29c9e3aa406a540a2a99e37a426a587a27f9e2ea419a5c2a2799e24a40aa52da3d09e48a43aa5b7a34e9fb0a4c0a52fa47c9ff3a420a649a4459fd9a411a640a4ce9e98a4c5a5f4a37c9e57a474a527a33a9e34a449a59da2419e30a445a500a21e9e99a3d9a404a18f9dc4a23aa414a0619dbba222a45e9f879dbea22aa4769e459d73a203a4889df39cffa187a3f29c909c89a1ffa2719c6d9c41a1baa2de9b1d9ceca070a2129bcf9b92a0d2a15c9a4e9b37a052a19e99de9ae39f29a11699da9aaf9f0ca1ca98ec9a7f9f03a17598b99a289fd2a041982f9aaf9e9ea0a7976c99f09d09a0e196e598a39d549f4896cc987e9d2f9f30968298569df19ed8954498169db19e7695f297d49c3f9e78957d96479c7d9de0945e97b39b329d64925e97b39b329d64920000698f309087900000698f309087902e1e9b24a22569a6a01e7a258d268ca8cd1db0249525e4a8841c4c2380242ca9121b2d216c2254a9ef17241dfd1e6ba95910d51142136fa9a091469ad89b56a9be96749e14a02ba92f9999a0d0a1dda8a19a82a1b0a299a8de9a87a18da252a88a9a1fa160a267a8fb9a77a165a2a8a81b9cf0a100a3daa8159d77a20ba480a8289d2da35ba401a84a9da9a3c3a472a6ec9df8a3eaa4eaa40c9e45a453a5d0a3829e4ba446a5d5a2e89e82a465a5a2a2ef9e70a466a5efa2329f81a486a52da3c29e70a46ea500a48d9e60a43aa582a43f9fd6a4d9a557a5db9f5ca5b3a65ca5ae9f45a585a6faa43b9ff3a442a65ea4ad9e90a4bda593a32b9e05a415a572a2e99d57a394a4cca1999db6a25aa40ca1389d9aa23ea41aa0059d51a2f8a3839ea69cfaa16ea3a59d9b9cc5a178a31a9d879ca1a136a3bb9c7d9c30a1a0a2309c329cdca029a2719bac9b8aa0c9a1f39a3b9b44a068a1749aaf9ad39ff2a0ae994a9a719fcca03c99379a3e9fcba0f098179a279fc1a08e98f199e49eaaa00998dc99869e7ca0a497c599199e3ea0df967799b29dc19fab9620994d9d509ffa95de98459d259fb595a798339d099f76959b98359deb9e3c95c198109da89eec946d98e79c3d9e98943299fc9bca9c57933299fc9bca9c57930903bc81c0813a940903bc81c0813a9440193a1ea61e23a0f31ce823e5248fa6161d0624eb2400a8041c9f22c52363a80a1a7020712192a82b17af1cc01dc4a8fd0f6f11c112d6a8d58fc9992c9ab3a82597329f06a07fa8c2996ea14fa23ba8999bbfa226a499a7609c4ea378a4b4a6759a2ea239a3baa52d992ba191a235a5c8995fa1e1a234a65a9ca1a253a30fa9c29c3ca34fa4a1aaac9db5a3c1a4c7a9d89d13a445a59da73e9ecaa492a56fa4b89e49a51ea61ea15a9ecca452a507a05b9e8ea4cfa5c2a2e69e76a579a676a511a0eaa577a718a849a1f1a588a7c9a849a0d1a566a78aa8739f79a5bba616a7a79ec6a4d9a5dba4d89e71a49aa55ea3a39fbfa3e2a4bea1eb9dc1a227a4a5a0be9c5fa2c9a3e39fde9c0ea290a3a89ee59ccda146a3e99dd99caca135a35a9d659c5ca108a3ba9c429cf8a079a2359c049cada002a2999bd89b78a0d0a1f59ad69b65a09ea1469ad99b42a08ba1cf99a39b29a058a16c996f9b10a030a13b99219bb79ffda0cb98009b879fe5a09f98bf9a4f9fd1a04898499afd9eb5a0e097f299ab9e8ea08697b8994e9e5aa01b978599f49d0da0b7967799be9d929f79966e997f9d4b9f42962b99499d259f059609992c9d2a9fbb95b098119d1c9f71958897c19cf69e639532986d9c3c9eb79432986d9c3c9eb79400009189fd882d9000009189fd882d90c11c73237f24e1a4231d47245325f1a65f1c292375244ca73b1bab212423a4a75b19d71fea200ca8b9164d1c681d2ca8cf10e7102d122aa8658d0e9aa09a10a8ce96e49ea39fbba7469919a1d7a1e8a6619a00a206a339a6939af9a16ca332a5d89a87a1a1a247a4d09941a021a11ba23597069d6a9ed59ee1908498fd99d39a78882393fb94c1979b82ef8f88912896c582df8fb590e795f2830c909992c896bc85dc9025944a974389009344959598c88d7b951998659ab290ef97d09a7d9c8c94689afb9be09c2d962a9c3c9eb39e7d9c72a2a5a376a0b697aba223a49c9e1295ffa0a8a2ad9cc4961da0bfa2f19bdd9d29a255a3099ea09c1fa18ea2049dc49c24a165a2c39cd19c3ea18ea2bb9cbb9c1ea15ca28e9cfa9c14a175a2639cdb9ce3a050a20c9cc89cbca00fa2699bad9c85a0b3a1c39aa59c6da09ea1419a289c51a077a1089ae69b39a05ca1a299669b18a02da16599109bc69fe7a01f99a29a3d9fa3a09b985d9aca9e55a04498029a659e12a0bf97eb99259ee69f7297af99e79d899f25979399be9d3e9fe1964299649dff9e8796ec982c9dcd9e0896c198fb9caf9e9495a398ca9c739e26958c98989c589e92948598859cee9d559469982e9c8a9d0e941498f29b569da4941498f29b569da49400000e8678824a9000000e8678824a90581c2723692449a4ae1cc123b924eca5fe1b3622eb2385a69919aa20e8218ea65b187d1e4b20ffa62115491b081d3ca7d60c2c0ab80b47a7af8ea699079beca65c95ce9d3c9f33a6ae97e79fbba049a5fd98b1a0e0a195a45c99dda011a2aaa3be997ca045a112a26f987a9f78a092a00996329d199e389e2b93589b6c9c949c8f93a79a2c9c4a9c1f95439bda9cbe9c0196949c049eaf9dfe97919dc59e3d9eb496cf9d08a0099eea97fd9d589f8f9d7c97569db69ead9c4096939c869d449b8d94809bd69c7b99f6926b9a169c5e98b793299b8a9c4098ce956d9c6b9d3299e098089e0f9f329b659a449f9fa0449cf69a7a9f04a1329c529bde9f34a1469cb69b06a037a10e9c1d9c18a03ca1c59b199c27a03ba1a99bf79b2ca046a1279bc19b35a058a1cd9a6e9b1ba034a18d9a479b15a027a1239a199b05a018a1e5991b9bd59f05a17a99059bb39feba02199f49aaf9fdaa0d298fd9a829fcca0a798d99a5e9fb9a08498999a319fa4a03198199ace9e7ba0ef97b299589e4aa065978a99f69d11a0f3964d99a69dbd9f53966799679d809f4d961e99349d119fd595cc981a9db49e7a956098de9c5c9e3a951b988b9cec9dba943c98549c8a9d8e948297289c959de193a198719bb79c6e91a198719bb79c6e91000084142f153e90000084142f153e905e1b08226623caa3461b032288230fa5b11a3c217d225ba5de18be1fd520baa5f016541d9f1e0fa691132619701a0ca66b0c7009cd0ae7a5568c4c985c997fa541934e9cec9ce6a42f96009e6a9f48a47e97959f73a043a3a997889f78a004a28297809eb39ff3a0f496ea9d0a9f10a00e96569d779e469f5a95ec9c209eaa9ee895db9c009ea79ef9965a9dae9e499f3d980a9e579f6e9fed98ed9e27a0ac9fa699b69faca0df9fb39a20a007a19b9f309a38a04da15b9ffc9a4ba052a1d49e359b0fa0f4a0239e0b9b3d9f60a0459df79abf9df59e939b6098c29c039eae9982963a9c549dba98a896bc9c939d14995e989e9dfe9ed8995c998e9e27a0d19a1f9a209f5fa0119ba79a4d9fa7a0069b669b699fcca0b29ac09b8a9fdda09e9a9d9b4f9fdca01e9a1a9b119fa8a0d5990d9b099f7da07599169b169f89a05a99f09a079f7ea00e99e19ae59e65a0d498d49ac29e5ea07398a29aa89e43a01e98419a699e2da0d597f7992f9e21a02b97a499e89d0ca0da965c99af9de69f53963599869ddb9f129616995b9d8f9fe39509991e9d439f8f95f098049ddf9eae95a398d19c9a9e3c957798bb9c679e16954d989f9c429ef7942698799c069ecd94c8974d9caa9df99381977b9bcb9cd89181977b9bcb9cd8910000000000000000000084142f153e905e1b08226623caa3461b032288230fa5b11a3c217d225ba5de18be1fd520baa5f016541d9f1e0fa691132619701a0ca66b0c7009cd0ae7a5568c4c985c997fa541934e9cec9ce6a42f96009e6a9f48a47e97959f73a043a3a997889f78a004a28297809eb39ff3a0f496ea9d0a9f10a00e96569d779e469f5a95ec9c209eaa9ee895db9c009ea79ef9965a9dae9e499f3d980a9e579f6e9fed98ed9e27a0ac9fa699b69faca0df9fb39a20a007a19b9f309a38a04da15b9ffc9a4ba052a1d49e359b0fa0f4a0239e0b9b3d9f60a0459df79abf9df59e939b6098c29c039eae9982963a9c549dba98a896bc9c939d14995e989e9dfe9ed8995c998e9e27a0d19a1f9a209f5fa0119ba79a4d9fa7a0069b669b699fcca0b29ac09b8a9fdda09e9a9d9b4f9fdca01e9a1a9b119fa8a0d5990d9b099f7da07599169b169f89a05a99f09a079f7ea00e99e19ae59e65a0d498d49ac29e5ea07398a29aa89e43a01e98419a699e2da0d597f7992f9e21a02b97a499e89d0ca0da965c99af9de69f53963599869ddb9f129616995b9d8f9fe39509991e9d439f8f95f098049ddf9eae95a398d19c9a9e3c957798bb9c679e16954d989f9c429ef7942698799c069ecd94c8974d9caa9df99381977b9bcb9cd89100000000000000000000000000000000f518c921a622fea0ee2122260927efa7d6213e26082798a98f20f824da250daa0d1faa23832479aaae1c2621c721a8aa4f18161d0f1ed8aa028f7a137a1421abf098029a93994dab539c8d9f2da068abde9ecca3dca4adaaff9d4ca47da572a9c29c92a339a596a84f14d6a107a421a93821c799aaa086a94b23060ff49ea6a93824571c5d9dbaa9e1245120171603a97c26ea25af2491a78929682c192ca5aab62296a42ca83bab3f2235a0e3a36ba80525551c829ad6a9a4244a1d7d956daa4a23a41a72981caa4222a615f89b4daa691f159ac69f98a9418c89a045a206a89a9dada106a3e2a3de9d0ca2a1a335a0cc9c98a176a2ef9d469c41a13fa2809d209bb4a1a0a2c39df29cdea234a4119f939e17a4cda46da00b9c1fa2daa3ce9e309beba070a2f49c0d9ba9a0daa1279c9d9b6aa080a1aa9b3c9b2ca038a1289b0b9b11a00ca1e49adf9ad89feaa0729ac59a939fc4a0399a859a4c9fb6a0bf99419ae19e76a06c99c499779e43a0e2983c99fa9de49f5e98a998a49d729fe09790985b9d1a9f39975c98279dd19eb4963798169d989e4e96e497ec9c849edf95af97ca9c419e449544978d9c0a9e00952d97639c9b9d9e941597489c5d9d5b94c5962e9c0a9d7394a695bf9bd29cca93dd97e09b229dd1920000000000000000f518c921a622fea0f518c921a622fea0ee2122260927efa7d6213e26082798a98f20f824da250daa0d1faa23832479aaae1c2621c721a8aa4f18161d0f1ed8aa028f7a137a1421abf098029a93994dab539c8d9f2da068abde9ecca3dca4adaaff9d4ca47da572a9c29c92a339a596a84f14d6a107a421a93821c799aaa086a94b23060ff49ea6a93824571c5d9dbaa9e1245120171603a97c26ea25af2491a78929682c192ca5aab62296a42ca83bab3f2235a0e3a36ba80525551c829ad6a9a4244a1d7d956daa4a23a41a72981caa4222a615f89b4daa691f159ac69f98a9418c89a045a206a89a9dada106a3e2a3de9d0ca2a1a335a0cc9c98a176a2ef9d469c41a13fa2809d209bb4a1a0a2c39df29cdea234a4119f939e17a4cda46da00b9c1fa2daa3ce9e309beba070a2f49c0d9ba9a0daa1279c9d9b6aa080a1aa9b3c9b2ca038a1289b0b9b11a00ca1e49adf9ad89feaa0729ac59a939fc4a0399a859a4c9fb6a0bf99419ae19e76a06c99c499779e43a0e2983c99fa9de49f5e98a998a49d729fe09790985b9d1a9f39975c98279dd19eb4963798169d989e4e96e497ec9c849edf95af97ca9c419e449544978d9c0a9e00952d97639c9b9d9e941597489c5d9d5b94c5962e9c0a9d7394a695bf9bd29cca93dd97e09b229dd192dd97e09b229dd1923a15b12021214e9d3a15b12021214e9d0b227b26db2795a87122e3260128c5aa12227126a5278aabd0204b2553260eac071f1524dd2449ac031c7a21052377ac3f132c1d2d1fa7acb39633153019cbac3e9c4d9cb599edacc59f3ba31ea485ac5fa15da6ada705ac70a196a6d8a7beaa7aa035a696a728aa5f99cca456a6bea9c51d1e9ef9a14ba8ff22ac1bf099baa846259d234120f3a813287528a62754a9282859283427d6a9c624a5a0bfa598a98322b2a43ca822a92324c59f56a534aae7246d1017a08aab8d23d08f0ba0e6aae020fa9befa05faa711829a16fa366a9b59c62a35ba450a7fe9f4ba4fca487a3df9f19a32ea4dd9f139fb7a2d0a3e19e089e5ba299a3889e399d5ba18ea26b9dc49ce9a0bba1539d389dc7a14ea32c9ecb9d2ca395a43a9f879dbba23ba4b09e659c61a1c9a2e79c189c09a14fa24d9c219ce3a01ca20f9cf29bafa0dda1c79b649b7fa09ea1789bf89a4da058a1249b8e9a10a019a15d9a389aba9fe6a0fb99d7994a9fa4a07a999c99de9e69a0f3985e99799e21a083982199429ef99f2c98da98e79d8c9f9a97a198a09d289ffe966098559dbc9eb3961b98009d699ef895e697e99c429ecb95bd97b39cfd9d64956997999cba9dd894e5964e9c479d96949e953c9b809c8f933997c39b2f9d3a963997c39b2f9d3a96fc17ae216d22e49efc17ae216d22e49e4c23e327db283aa95d230828bc28c4ab6822152734282dac71214026452780ac1a2099247d25c6ac601cf921252305adef139e1dc71f29ad6098278f4a101dad679ddc9e259fe3ac57a01ea4b0a4bbacb6a127a635a77eaceea1c7a607a862ab23a112a648a7bea8619f37a572a60ca84f9980a3dea408a8871d7b9ccda04ba81b22ca1be790a9a874243a21b01c26a919252021ef118ea9b72472911fa2b4a9e323f99e1aa4a1a9ea22bc9fa9a405aa9d23539b91a29aaa04227b9aa9a18aaada1c18a03aa39ba96199e4a343a58da80d9f8ba471a5aaa595a089a458a5f1a227a030a406a5ffa0af9fd1a3a1a445a03c9f94a37da424a0e29e50a34ea4db9f019e97a2e6a3339f5a9d09a257a3169f989d80a200a4349f6b9db0a221a4e69e099d53a2b2a3369edd9cd9a12da3459d769c55a19ea2819c2d9cf0a01ba2029c999b8da0b8a12d9b2d9b63a077a1d69a999a2ea03ba1859a499ae39ffda0f999129a819fbfa08399e999249f84a016999499ce9e47a0a4983b99589ef89f5298fe98049ea39fab97d898cb9d459f3397b898b59d359f0497c298a29d129fbf96c398a09d3c9f7c96a998879d139f5f9678984d9d059ff0950998e99cc29e56956297969c069e0c956c97c79be29cea916c97c79be29cea91860f561a101b0f9b860f561a101b0f9b0223ad27af28e2a905249328552947acaa229c2786287dac98216026a727e2ac3d200525ff2534adb81c7e22c92376ad3e14111e391f91adb998c49599109dadbf9e30a192a167ade1a05aa4eba431ada8a1bfa59ea64fac94a106a609a715aadda15da6aea760a905a253a69ea7b6a98ca157a686a777a9a09d2ba45ba553a9ae8a46a171a385a9d61b26a0a2a22baa151f1f9f90a2b4aac92022a090a3bfaaa62018a031a48faaa720e4a03aa458aa9a1f85a01da4a6a9071db2a0fba3bfa8718beda2c2a43aa84c9f38a56aa6a4a6c9a026a5fca57da4dea027a5fca5f4a294a0b1a482a5f3a151a0a4a46fa5cba125a076a43da570a1f89f4ba40ea527a18b9f18a4f0a4c6a0759e8fa3b8a42da0d79d29a36ea4ae9fb49d05a35aa4279fdc9d02a348a48d9ec09d7ca2eaa3c69d049ddca135a3059d599c63a1b6a29e9c3b9c18a168a2519c119ce0a01ca2f39b899b96a0bba17a9be89a3ea066a1bb9a5d9ae19f0ca1139a289a7f9fd6a0c799e599279fa3a05b99a499c49e64a0ea980a99369e1aa06c98c198e89dc49fe097ac98b79d6e9f72979098ac9d469f36979098ad9d399f9e966f98999d2c9f339636986e9deb9ec495db973b9d699e9e955c97d89c269e53959898e49c219f3c949898e49c219f3c948b085d19fc195d998b085d19fc195d993423f5271f2960aa1524aa289a29a5ac0f231728d828d2ace621c7260d2831ad70201d25172689adfb1c64221d24c5ad6814531e8b1fdfaddd98f5981f97daad1c9f6aa200a3bdad65a103a5b4a55dad81a167a527a62eac7ba1c3a5eea699a949a2aea68aa771aa61a212a715a822aa24a293a68fa7c4a922a2c1a6b6a776a926a10aa632a767a9f09fc5a52ca74ca99e9cd0a438a61ba985951aa456a5fca81e919da333a5f4a81c96c9a32ba5aea8ae9916a4a4a535a8ef9b46a499a5bca6649ee0a427a6c3a5b3a09ba5bfa62aa5eda06da553a663a4f7a01aa50aa628a38ba0cda4bea57ba285a0b1a491a50da241a08ea483a5dfa1cf9f57a430a583a1f89e04a4cca407a1509e71a37da46ca0a89d49a370a40ca0a39d2ca35ea44e9f839d77a2fba3469e699d2ba2a0a3b29dfb9c04a265a37f9d969cb2a106a3039d659c57a1a8a2a69c049cd8a053a21a9c809b81a0f0a16e9bea9a2ea086a1d19a689aea9f1fa1479a239a899fe2a0fa99009a769fc0a0b199da99389fa1a058995599e39e6aa0cb980099909e37a06098ea984e9e01a01c98d6981e9eaa9f70979398c89d699fda964f98639dc99e35961798069d7d9e3a95a697cf9cf99d3a952a974e9c789d0594f498479d999f7f95f498479d999f7f95920fa81a091bf099920fa81a091bf09938231128212950aa3d24d428a9299dac4e233228f628e5ac08222c272f2845ad6f205e256e2675ad441d51221a2495ad4214441d521ec7ada699d59add99c4ada39dd0a023a19aada09fcca2e3a211ad58a08aa482a412aadea125a6c1a6f8a96da2a5a64ba7e4aa40a2bca68da799aa4ba2ffa6eda7dda9c6a1e6a6b2a70ca9fba1bca6dba781a8a1a1c7a6f9a73aa83aa187a6bda717a890a048a6c9a7c5a79fa023a686a732a730a029a6dfa78fa66ea002a6a0a7e1a558a000a6b0a793a4cca0f6a556a7b3a37fa1daa50ea7d6a374a1c7a5f3a666a305a137a573a616a3b5a0faa403a68fa2afa0d9a4c4a535a2a3a0d8a4c6a5e5a184a0b7a4a9a594a11fa092a479a563a1209f2ca419a5cba01a9e73a3b5a42ca0de9d36a3a0a4e09ffa9de6a251a4319fb89d8aa200a47f9e5d9d61a209a4e89de49cf2a1d2a34e9dac9c93a169a3ac9c539c4ca1dea2459c1b9cf3a02ea2ae9ba69b82a082a1ff9aff9a38a049a15c9a9f9a07a017a1139a709ad29fe3a0bb99199a789fb6a05d99b8990a9f6ca0e6987a99979e2ca07e984699319ef49f21980e99f29d839fa997be98919d1e9fbf965198389da19e2796af97f39c469e35959397d69ceb9d2795f4967e9cb89d6994a598cf9c459e9c94a598cf9c459e9c9499118a1b191c229b99118a1b191c229b0d23fa270629c0aa582430292c2acdaca4237d285a290fad4922652770285fada6208025932688add51cec222e24a3ad1f11641c451dd2ad6e9b7e9e999ec6ad169f05a3cca3c0ad839fb6a3e0a327ad74a0e4a4bca5e2a91fa382a769a804aa3ba312a89ba8fdaa64a264a722a85daacca1caa6a0a779a98aa13ca658a7eba858a123a635a795a86ca120a60ea742a8eda057a66fa7ada79da184a686a706a790a186a69da72ba66ea14ea6a1a765a53ba11ba649a701a506a1ffa57ea7bea30fa12da660a71fa246a1a9a504a715a434a1b3a504a749a42ba18ca59fa6a7a3d2a057a586a60ba392a03ba55da675a24ba007a503a609a2db9f82a46ea568a12c9fe8a3dba4aea0a59e81a38ca42ba03f9e96a394a402a0489e95a3a9a4729f979e06a34da4a79e679e87a2faa3f79dad9d52a2aaa3b59d179d03a268a3189dda9ce2a142a3cc9c8f9c76a1f8a2689c7c9ce9a05aa29e9b649ca5a0dea1219b379c86a0a0a17c9ac99b63a077a1089a059b32a051a19899a19a0ba020a156996a9abd9ff6a0ff98159a6c9fc8a0ca98bb99079f92a06f987599969e53a01a980499129efe9f6097ac98769d089f4b9653981b9d5f9e7d953d98fb9cfd9d6995bd977e9c809d0e955398909c7b9ef4975398909c7b9ef49700009810ea13428f00009810ea13428fee221e282729ceaa68241f293c2aefac1b2341280c2909addd214b2746285bad7d206925802671ad051d4b22a52382ad1914511c581eb8ad4f9a639d539dc8add89dc8a167a2a0ad499fa2a3e6a3e7ace6a0b3a55aa6e8a9f7a29aa757a80baacda293a74fa81fab04a2f8a607a865aae5a1eea605a8aaa99ea1b4a692a703a97fa197a6bfa792a830a13aa64fa719a824a1f0a5d3a667a7eea0eca527a700a7c8a039a64ca794a6dca0e9a50aa705a614a1dda511a76da522a100a622a721a490a09da5dea64fa2a0a081a5dda6f2a324a179a588a618a421a1a6a5bca6d7a3e4a086a5a5a63ba3d8a03ba55fa69aa2d4a0f2a4f3a512a2afa097a489a5aea1ed9f42a42ca522a1be9e03a4f3a490a07e9efba3dca444a0359eb4a3b9a4bf9ff19d2fa372a4e39ecd9dcaa22ea46e9e819d88a2eba30c9e1f9d2ca29ba3829dd89ce9a159a3169dad9c90a102a39c9c969c39a1a4a22b9c729cf8a068a2b79b359cc9a01ca2239b049c8ca0aca1859a7c9b39a049a10e9ace9aca9fdea06b995d9a209f7aa0da98179aa19e23a084981a9a339ebf9f4598c099d69d4a9fdf971599879de69e49975d98289d859ea596bc97049d489e1396be97099d3a9e1a969b98ae9df79e4a96f4977f9cb39da194f4977f9cb39da1940000480a980d0a8c0000480a980d0a8c19231a281a2973aa522437293e2a94ac15235b282d29e7acc5216a275c283bad68207a258e2681ad981cf021c5238ead0614c31a111cb5ad339a649d839ec9ada99db6a154a27ead4b9e77a21fa3d2ac6aa0eea4c6a565a979a23da73fa8e0a905a25da70ea8a5aa8ea185a63aa7d6a99ba199a6b3a73aa9baa1b2a6a6a7e6a85da2dba6cea772a89da18ca6daa71ea860a164a6a0a782a755a14ea6a4a706a7ffa02ba664a767a638a1daa5fca686a5f7a0b5a5c1a6f6a4d0a171a568a6d6a3bea04ba591a629a3aca03ca582a6eba3dea097a5b6a607a4d2a053a58aa672a365a00da519a61ca32ca0c4a4cfa5c1a203a0a9a4a0a50fa2b29f78a460a589a18b9f50a44ca516a13c9f34a430a5a8a08d9eeaa3e9a447a01e9e5ba37aa4ac9fd79d0aa343a42b9fac9dd9a237a4a69ea29dbca227a44f9e819d96a21aa4e19d2c9d4aa2eda3699dd49ce8a187a3069d949c78a1d0a27c9c349c0ca13aa2189cbc9bc1a001a2819b689b9fa0d1a1389b1b9b6da0a0a1ea9ab09a24a05ba1499a1b9a819fd8a09999a099ea9e5ba001994199619e05a08998f598f09d9e9f4498d398bd9d729ffd97b998889d3a9f8a978a98699d569fe4963c98389dc89e2e967097639ca39d0f952b998f9e5fa0f3962b998f9e5fa0f3960000f784560223880000f784560223889d22f027f42802aafc230429012a75ac70220d28d528cbac6121de262b2827ad00201725242658ad4a1c2c22882357ad9013381c1b1d89ad0c993b9d399d8fad529d92a1d3a25cada49d9ea2f0a3b0acab9fa8a47ba539a9eaa1bca6aba789a9e3a107a70ea8cbaa94a1f4a614a8fda9d2a13fa71aa894a9e1a11ea708a804a912a16ca645a75ca8fca05ba64ca703a81ba164a677a782a744a17ea684a7f8a6eca029a654a764a6d8a0f3a51fa7d7a5d2a0bfa5afa66da5a9a092a512a7b0a476a0a4a5d0a669a3cba095a5a1a652a48ca05ea596a62aa489a01da54da692a339a0f0a412a6f4a200a0a8a4b6a519a2ae9f87a46fa58fa1729f66a44ba554a13f9f46a444a5fea0259f38a429a5e7a0be9e34a426a5b3a0a59ef1a3e7a44aa0389e34a360a4999f359ebfa21da4dd9ef39da5a214a4739e6b9d52a2c7a3eb9d149d0aa276a3649dbf9ca1a127a3f79c5d9c45a19aa27c9c0c9cd4a00fa2eb9b819ba4a0e1a1539b479b95a0c9a1279b439b7aa0a5a1fd9a069b64a078a1c99abf9a1ea033a1409a739ac09feca0b899ea99319fa1a027995a99c19e64a0b298ed98429e20a04498da98129ee39fbe97be98e69dad9fd4967f98c09d789f6a963c98619d3a9f0f95ea98519dbc9ea194ea98519dbc9ea1940000a805730a998a0000a805730a998a33228627a928ffa9b723ec28002a7fac0822c727c6289bace520a726e627d5ac521fd124d4250eadf21b7621352329ad16134f1aa61b61ada0990c9e359e70adfa9c0ca2bca269ad2b9d5ca36da4b7ac649fb9a4b2a53ea940a1aea675a7e2a829a188a693a724aa45a183a6a5a7aba9c5a112a704a853a9cfa144a73ba8fba8b1a113a717a872a82da1b8a608a8c4a734a153a684a7d0a6d2a013a63fa713a6e3a0cfa5ffa6b3a5a9a0a5a518a751a589a07da590a6f4a493a072a59aa649a44ba070a5c9a66ca39ca05ba57da642a4c3a08fa5c5a655a4ada055a574a6e4a39ba047a580a66ea366a00ca513a625a331a0b9a4b1a519a2be9f7fa468a585a1649f6da467a52ba1159f34a42fa5c8a0609ebaa3c4a421a0529e82a393a4d59f159e18a367a44f9f0a9ec0a236a4b69eeb9d96a217a4649e8a9d39a2d0a3f99d119dd7a172a3689dcf9c95a118a31d9d809c4ca1e6a2ad9c569cf7a040a2399cd19b6ea091a1129b429b19a056a18a9aff9a08a044a12f9ab29ac39f24a1f499779a8f9ffba0cd993e9a5e9fc2a07f99e999029f7ca0149983998b9e2ea0819823990d9eb79fb897e698a99d329f0d97b998709dee9e9d964098389da69e58963398359d8f9ef0950e98789cd59d14940e98789cd59d149400006588730265880000658873026588952172279c2888a94a23d628d12956acbe2193278e287cacaa207726ad27b3ac201fca24cf25d1ac4f1c97215923e3ac8d14f1193e1b11ad6398aa9dd79d24ad269d1fa2e2a221ad1a9f2aa4c0a496ac1f9f7ea465a56aaab2a0eea54ca73ba91da1d2a5e2a684aab5a0c7a5f8a693a9cca0faa5eda63da92ca1d0a5dba6b3a8d0a0d0a5eba626a887a095a5d0a64da769a069a58ca699a656a05ba58da60ca612a04ea5ada688a558a031a537a6fba412a004a50ba668a418a003a560a6bba3f89f3ea5b3a6a7a38fa053a599a63ba4a9a071a590a634a467a01aa53da678a30ea0cfa4e8a5f9a2bb9f9da4a3a55ba2709f93a48ea51ea2429f84a478a5d5a1eb9e46a41ea55da1869ef1a3e1a4d9a0509eaaa3c4a475a02d9e90a3b1a44aa0259e75a3a5a407a0e99d3da382a4a29fce9de3a246a4ee9eab9d68a200a4ef9d669df1a178a33e9d5d9d91a100a3b09c119d5ea1cea25a9cd29c45a19fa21d9c5f9cf2a025a26e9b099c96a0c5a1b29a719b57a078a1579ac39a15a032a1cb99229a9b9fdea04a99cc99089f8ca0e4985c99759e24a07d9824991f9eeb9f2b9831990c9edf9ffa970f99de9dce9f9197e698b69dc89fdd969898689d719f9396a198bb9c019e949566997c9cd89d409466997c9cd89d409400003988e8869b8b00003988e8869b8b1d21ba26392819a9c92295288929f5ab60218727872832ac5220ff25572773aca71e99249b25a0ac131cd0212a23bcac4e145e1b871dc9accd968d9c989cc9ac499cb3a17aa2c7ac8b9e1ea4c8a49fac719fa8a470a580abea9feca4cea5f7a818a00da524a69ba931a049a55fa62ba95fa080a590a6dca87ca0a9a5c0a64ca8d9a0f2a5f9a6d1a75fa0d5a553a71ca77ea0aea5bea647a640a065a59ca69da551a03ba529a606a552a003a52ca69da414a01ea553a672a425a04ea5a9a646a435a034a580a636a43ca00ca529a6e3a32fa0f7a41ba659a3e99fc6a4daa5f3a29a9fa4a4b7a58ca2769f7fa48ba540a2569f7ca471a516a2769f61a46fa5dca1479f48a446a592a11e9f33a429a53ea1d19e12a407a5c7a0cd9ecea3e4a45ea0979e8da3b7a41fa00f9e0ea36fa4709fdf9dbca232a4ef9e809d4fa2dea3469e399de5a158a3a89de59c88a1fda20f9d679c35a199a2989c219cf3a060a22a9cd69bb9a034a2739b419b85a003a20e9bdc9a45a0a2a17b9a6a9ab49f17a1e999b199069fb2a04c9988998f9e49a0cd987599759e1ca0ad986999729e10a087984c996e9e03a032980699139eae9f7c97e098989d4a9f7a9693982b9def9ed4954598d69cb49efa949098189dcc9ed6949098189dcc9ed6940000ba1a761c14920000ba1a761c14924c2146273328cba82622312827297fabeb20ff263b28fdabf41fa825f42632ac021e4724382541ac3e1b552109234cacf814201c101d6eac1c96cc9a349c5eac479b32a1eea15bac169d1aa32ca427acdd9ec3a4d2a5d3abf49f60a543a645aab09f24a545a61ba860a072a5bea62ca71ba05ba530a682a61da066a55da605a610a09ea5c7a652a54ba08fa5b3a6b7a433a099a5c2a648a44da04aa574a6e7a3c09f05a545a62ba3b49feea400a679a2769fdba422a690a2f29fe9a425a657a33ca010a534a688a350a0f4a442a6b4a3fc9fe1a40ba6c9a306a0cda415a66aa317a0c9a4f9a501a31aa0b0a4dda5a9a21aa08fa498a548a227a063a463a5c8a1b39f1fa409a50fa1479feba3eea4bba0d29eb4a3dda47ba0339e87a3b0a41ea0c99d23a370a4719f8f9dd6a240a4f69e669dc8a21aa4829e419d8ea205a4379ee29c26a29ca3b29d9d9cbca134a3ee9c209c34a1bea2519cab9bd2a051a2679b139b61a0bba1659abe9a17a065a1a199aa9a1da06ca19999cc9a0ba039a15599c39ab59ff0a01699bb9a4b9fa4a0dc98839ad89e54a0b598f499609e1ba04b984c990c9ece9f1e98d198cd9d819f67977a98a89d6c9f8d969298b19d539f97965798909d029f9696a798af9d3d9f1197a798af9d3d9f11970000cd1d471f49930000cd1d471f4993d8202f274b28f7a88b21be27e72836ab99209d26112878abad1f8025c326d3ab951d0a24f024f3abdc1a1821432210acb515a41caf1d20ac3e914f94529527acc699a09fada01bacca9cefa216a4b2aba59ee0a4a2a566abb59f47a561a68aaab59ff2a4f1a53da9009f8fa42da563a64c9f93a490a56fa51f9fcda49ca5cda49d9feba4dda5e6a3309fcda4cea5a7a231a0eba4a3a5cba1e09fd0a4eaa520a17b9ff2a42fa677a1bc9f0fa54ea6a4a205a021a537a6d2a3f79f21a559a65ca421a008a51ca620a415a0dda4efa501a4fa9fd1a4d7a5a7a3cc9fb1a4b4a556a3959f96a498a5f0a2649f7ea478a594a2089f3da437a53ea20f9f17a408a5c2a1b89eeaa3dea468a1519e7fa3b0a4cfa0399e87a3c2a47aa02f9e90a3b5a42ea0f19d4ea38ba4b49fa99df4a24ba4fe9e719dbca226a4779e309d82a20ea4059ef59c4ea2cea3b49da19cdca15ca31e9d499c5aa1c7a2809c1f9ceaa041a2f89b1d9ca4a0e6a1529b259c6fa0a8a1ed9a069c26a06ba11f9a5f9bd99f3aa19199bc9a799f19a12399069a099feda0b1987599969e95a04b983e99519e31a0f997ff98029ed79f6797b098a19d229f17976898649de59e9f965f985e9da09e9896eb973a9d859e7d952198b89c6d9e58952198b89c6d9e589500002f1ab71b079400002f1ab71b07943220f22523275ca8f32033278c28a1aafd1fe8256f27ddaa911ea624e02521abdb1cd0222d242babb61aa920c52146ab13162c1c291d44ab8a8d9b93468e2bab0e98fd9d989efbaad69a22a102a27eaa069d3fa31aa435aa249e34a407a5d9a9439e5ba432a577a9c39e57a433a599a85c9ea6a334a477a6c09daaa382a41ca40b9ec0a3a0a479a3439e16a4eda411a38a9e40a457a528a3c29e81a497a5bca36e9fd9a4e5a561a44f9f09a556a69ba4c69f28a562a68ba4c59fd0a4dfa528a4569f99a4aaa5cda3259f7da47fa5a2a32c9f7ca47ea583a3109f5fa46ca558a3ff9e55a446a52fa3359f51a432a5cea20a9f28a424a559a2ab9ecda3d1a492a1319e6aa387a4f6a00f9e6fa38ea4c4a0fc9d84a3a7a479a0009e35a37ba409a0ce9dc9a23ca4699f939d71a226a4cb9e469d39a2f4a3569e199d05a2cea3d89def9cf8a1a6a3679dba9cb2a13da3189d7f9c5ea1dda2a19c289ce2a043a21c9c5f9b72a0b5a1059bd59a15a06fa1459aa49af59f4aa1e099999aaf9f0fa18299829a8d9feca04099969a579fcaa01a99649a029fa9a0e098869a999e6da07f98dd992e9e4aa035985899eb9d06a0e4979b989a9da29f4e97bb98a99dde9f61975b98c29df59f0097c998b79ce69db793c998b79ce69db7930000be967d98258b0000be967d98258b961f492519262ba82b206a26a727b8a9e71e3e25902630aacd1d65245f2585aad51ce5223824a4aa231a58205221dbaa9c15a41a181cd4aa3d8d0b967694c2aa6496039d7f9d5faa419926a07ba0f9a9e39b86a1dda2a1a92c9dffa22aa42fa9bb9dc0a3a4a4cba84d9e28a4ffa476a8699e37a412a51da88e9e5ca41ba559a7ab9e64a430a5afa6b29e86a466a524a6f19e97a4a0a5aaa5fd9eada4b8a53da5189f9fa497a5baa4159f9ea49ba56aa4f09e81a483a54fa4d99e8fa4a8a52fa4d09e7ca48ea51fa4dc9e79a46da50aa4a69e40a438a588a3d29e43a434a56ea3db9e3ca441a51ea31a9f72a47da521a3439f83a4b3a5eea2b09f2da42da500a2179fa5a3c4a442a18b9e71a3a9a4eaa0059e2da377a44ea0bf9df9a265a4fc9f899dbfa248a45e9f3d9d52a204a4969ed59c0da299a3169eaa9cd8a142a39b9da19c8ba1eda2219d7a9c4ca19aa2ad9c5b9c1da16da2599c349cdaa031a2f49bbe9b84a0b1a1219b369b17a02ca1479adc9adf9f14a1df99a59aac9feea08099209a579fb0a01a99049ae19e6da0a398fc999c9e46a04f98409a719e21a03398339a479ef59feb97bc99eb9d9e9fa2974599ad9d4c9f2797b8985c9dc99ee7961298ef9c349ef595ab97089b519c2692ab97089b519c269200004b8f6590fc8f00004b8f6590fc8fda1e9d24c425b0a7c71fe12527272fa9cc1e07254b26a2a9061db223e724e6a90c1cf821622311aa4e19d51fe1203eaad514171b6d1c60aa17869392219445aacd95a09c249d05aa4c99e39fa0a0d0a9029bcfa1a5a293a97d9c94a2e2a345a9eb9c3aa345a4d4a8a39db8a393a48ca8199e13a4b8a42ca85a9e28a4fca4bda7cc9e40a418a54ca7d09e51a44ca5d1a6de9e75a44ba549a6b69e67a45ca5d0a59f9e51a444a56fa5799e57a42ca517a54e9e3ea43ba5dba4699e26a401a5a3a45a9e09a4e6a468a4989efba3e4a42aa4d29e0fa400a5f4a3059f11a419a587a3e39e18a423a530a3a99e0da409a5e6a2229edfa3dea49da2119ee1a3f2a41aa2ff9de6a3f6a493a1cd9d6ca3b5a4ffa0799dcea251a495a07a9d85a210a430a0749d56a2eba3929f499df8a189a3849ecc9ca4a119a3be9d959c75a1e5a24c9d639c69a1d9a2d49c479c46a1a7a2539c1b9c0ca175a2f89bce9bbfa033a24a9b6d9b64a0bca18d9a339b08a05fa1d799109b5f9fd8a0dc98989ad69e7aa08f980d9aa09e46a06b98e999719e1ea057986399249ee39f24980599949d589f5b97a698519d259f02978a981f9def9e98965c980f9dd29e0f967c98039d9d9e12960698e69c959e2896cd98869c139e8f92cd98869c139e8f9200006592f493400100006592f4934001361e98248e2528a7171f9325ad26cca85b1ea024d72533a9a91c392376247aa90e1b462182229ca91f18201e911faba98b10d414f81595a9618e48984e9971a9d494fd9c2f9e51a95b98cd9fdaa01da96e9a5fa1b2a2fca8e99b2fa268a3e2a8119c4aa288a3a8a8519c9ea2b4a386a8b89cc0a219a45da8ee9c17a353a438a8729dafa389a401a8d19dcfa3aea45ca7ee9df5a3bea4e3a6e89df2a3c0a44ba6cf9dd9a3baa4cda5b79dbea3a8a455a5be9da5a3b2a439a50d9ec4a3c4a405a5f89ddba3d6a4eca41d9ef9a3e6a4c1a4749e26a422a5b2a4df9e84a49da599a4dc9e9fa4c6a54ea48b9e71a471a502a4589e34a435a536a33c9e04a4ffa4aea2119ed5a3fca400a2cb9d8aa3bca46ea14a9db9a233a487a0ea9c0ea29ca3b89f4e9d42a2d0a32a9f439d3aa2b2a36a9ec69ce7a164a3879d759c8fa105a3e49c3c9c43a1a6a2949c159cf5a05ca2519ce79ba9a01ca2e69bbf9b4ba085a1019b3d9b00a015a11a9ad59aad9ffea0ae99aa9a769ff0a05c99509a549fbaa00c99049ad19e5ea08b9869993a9e0aa004980999a59d469f5d97d598669deb9ecd96cf984a9db39ebe967798209d919e4d963898ee9c5a9efa95bc97a49c009eaf9523962b9c5c9d27954a97d19b199d30934a97d19b199d30930000268c3e8c268c0000268c3e8c268c4d1ddf23002523a6131ebf24e02540a8d51c7323b7245da8911bf821272395a8eb1964207021caa8a4168a1c291ed5a80f102f116e12e2a81e90b798d799bea8f794d99c0f9e81a80d989c9f82a04ba84099b7a0baa116a84e9a37a1fda1a0a7249b27a1e3a125a7179c0da10ea215a7239c56a139a292a7489c8fa1aaa25aa8439cf1a127a374a8a99c7fa27ba386a8169deca241a457a8ab9dd0a394a43aa8dd9de7a3dba4d5a7d29d33a44ea522a7469e49a44da5d8a6759e47a465a590a65c9e23a432a568a6ae9e4fa439a5f8a5ea9e96a4c2a56ca5069fb7a4eba5b7a47b9e72a48ba516a4339e1ca438a5f7a21e9ed3a3d9a452a2de9d4ba38ea4c8a17b9d70a231a42da1fa9ce0a178a35ba0829ccea139a35d9f8b9caea131a3829e789c97a127a30a9e8c9c7fa135a3999d859c39a1cda2d19c4a9cc1a0ffa12b9c109c86a0b5a1a29bb29b67a090a1249b279b25a028a1ba9aad9a8f9fbfa0e599409a4c9fa4a0b1993f9a579fc0a07f993c9a2b9fb3a03499f899d19e95a0cc98cd997a9e70a04598b599319e4da0e2976d99e69d1fa02b970799759dc19f7696dc98459d459ff1959898229d049f15968298199dba9ee0958798fb9c879e83953798c79c059eb1944f988b9bd49c76944f988b9bd49c76940000f981020202980000f98102020298f2183320fb2083a37e1c0523872490a6441cb422322494a7eb1a7121b22209a8ed187b1fa4201aa80616221c1a1d41a8db10dc10041553a8838d7e9894995da8a995b59db19e0fa86f9855a030a1a6a7529aa6a1f0a216a7c09b69a208a474a66e9ceba22da442a6769cc4a219a4e5a5349c79a202a479a5139b6aa22aa3a4a5a59a0da28ba39ca54f9c6ba22ca477a6c09ca4a21ca490a78a9d1fa371a457a89e9e8aa3d8a476a84a9e42a461a5a1a8999e4aa45fa514a86c9e58a441a558a77a9e35a44ba53ea6fb9dc6a3e2a44da5019d86a304a507a4949d62a390a4e7a2759d38a3d0a436a2cf9d66a39da4dea18f9d96a207a4b8a0c99cf3a19ba3e79f739ca3a1f0a2fb9e569c39a179a21a9e219c17a14da2749d1a9cf2a063a21a9d019cd5a040a2cf9cdd9ba5a0eba1469c889b6ca0aea1d39b719b4aa08ba17f9bcc9b48a066a1319bbd9b35a04fa1989a389b0da02ba1169af79ad19f00a1a199b99a969fdda03b99849a5e9fcba00699469a2a9fc0a0ac98e199eb9ea3a07698b2998c9e72a020989199389e44a090978099e69d01a02b976999b49d959fef967299789d699fb9962199519d689f8796f798289d5f9f2c969498189d2f9fe0959597b59cc09e8c951098539cd29d0b941098539cd29d0b9400003589748a3c8f00003589748a3c8f951cb4221524c0a4d81cba23fd24cba6d51b622221243da7011af72047225ca79218cb1e7e2093a78615c71be41ca4a767107313b11498a7ce898b96299850a78694229d9c9d09a71a9801a0ada09ca60599bea0ada1e8a5e8995aa1a7a264a5719a3ca19fa2d4a42e9a27a135a257a4cc9ae7a0f6a184a33d9b9da086a14aa29f9ae09faca0f6a06499ae9eb49f8c9f9197309d1d9ebe9df396ee9c139e109dad98899d7d9e449d1d99c39e45a0249e349b63a039a1759f969bf5a09da2e99f149d00a2d0a275a0539c60a133a3729f789c63a1a9a2549fd5993ca013a2959d2c9d18a1b4a29e9e639cd1a064a2e39dd89c78a17ba26a9ea69c60a187a24e9e7d9c29a14fa2b19d9b9c09a157a2579d5f9cf6a04aa2ff9c849cdda028a2b69c659c97a0cba1459c649c70a0a5a1b59b419c5ba05fa1619b299c3ca051a1e19aae9b21a040a16c9a289b04a018a12d9ad69ac09fe0a0e599949a759faea06e99399af49e66a01099d8998e9e2ea0b8988999349ee19f52987b99049eac9f32984a99d59d699fdd973b99bb9d2f9fa4970c99759df99e0797e998459de69e8e96c8980f9dc49e4996a198dc9c759ed2957c98a39c619e31958098829cee9de694a7980c9c4f9d1294e397689bc39cc892e397689bc39cc89200000186ed82d39000000186ed82d390001c2322802320a4391ce8224424e5a5811be12179236ea66b195020822162a609181b1e5120c2a6d214a61a1b1dc8a61e1030106714c3a686898d97c49890a69e937a9ca39d19a6f895699e05a06ea51a9807a00ea1dea401997ba094a14fa4889997a0afa1b3a385997da074a1a4a205992ea0efa07aa18198209f4ea04ea0f496769db09e509e6896569c0e9daa9c2195719b399ca09bf7936e9a189b469aca9234990f9af598c592e698ef997398a2926c99c39a9698cb95d69afe9b91999a96689c7a9db89af297289d7f9eb69b2999689ef79f869c1a9a3d9f6da0109d839a939fa5a0129da09aa19fd3a0db9cbe9ad69fefa08e9c0f9b03a001a1869c389bd99ffba05c9c959b01a0ffa0359cc19b15a018a12b9cab9b10a029a1f49b679b19a031a1969b349b16a02fa15f9b079b18a034a1fc9afc9a05a02ca17e9aff9adf9f0ea1169aff9aa69ff6a0d799f59a719fd2a06f99d09a459fada01499a59a3f9fa8a0f298609a199f89a0c998e299b89e5fa087986399129e22a024983899a29dbd9faf972b997f9d6a9f29973099499d479fe396e298089de29e17968d98eb9c869ef4953398b09c1f9ead950398709cbc9d3b950e98349c699d03953197279c4c9d52943d9aa79a089b02923d9aa79a089b02920000d81456158d900000d81456158d90a91bc721042305a4d31a8621c322eaa4fb19c220f32129a568183f1f952083a56d16f31ca41ec9a5f013d118e11ad1a5d60dad0fd410cca5598365948a9589a58390c3993c9b0aa52e94729cf69d7ca48696a29e24a007a40d98969fb3a027a30c98129f5da0eea11698ae9ee49fd8a08d97399e3e9f1ca0ce966f9dad9ee39e2e96b09caa9da99d1296059cec9cd59cc895549bb89c639c0695569bc69c039c1f96919bd19ce89b7096269cc89df29b2998a59c749d039cb299599c7f9d199b5698789cd99d909aad97489c929de299d8964a9c589d98992497ef9cf19d709aef98ec9d249f999b8699ee9e62a05e9cd099499fbca0659c599a249f6da03d9c309a0b9f46a01d9c8d9a0e9f70a0c49be19a389f8aa0989b049b389fa5a02a9bec9a0d9f83a0b39aba9a019f6da0909aea9a0e9f76a0209a239b1e9f8ea0d499069b0a9f69a09d99de9adc9e47a05499ad9aa49e39a0ed98839a7b9e28a0b1981b9a3d9e0ca04f98b299fc9d0ca0e2976099c49dec9f81972199869dd19f319706996c9dac9ff896dc983e9d5c9fc096d198039d169f5f96ba98e49ccb9e38968f98cb9c889ecf956798c39c619eb4954898a69c439e92952598799c159e38956d974a9cb59dc09480978a9bd29c8d9480978a9bd29c8d9400000000000000000000d81456158d90a91bc721042305a4d31a8621c322eaa4fb19c220f32129a568183f1f952083a56d16f31ca41ec9a5f013d118e11ad1a5d60dad0fd410cca5598365948a9589a58390c3993c9b0aa52e94729cf69d7ca48696a29e24a007a40d98969fb3a027a30c98129f5da0eea11698ae9ee49fd8a08d97399e3e9f1ca0ce966f9dad9ee39e2e96b09caa9da99d1296059cec9cd59cc895549bb89c639c0695569bc69c039c1f96919bd19ce89b7096269cc89df29b2998a59c749d039cb299599c7f9d199b5698789cd99d909aad97489c929de299d8964a9c589d98992497ef9cf19d709aef98ec9d249f999b8699ee9e62a05e9cd099499fbca0659c599a249f6da03d9c309a0b9f46a01d9c8d9a0e9f70a0c49be19a389f8aa0989b049b389fa5a02a9bec9a0d9f83a0b39aba9a019f6da0909aea9a0e9f76a0209a239b1e9f8ea0d499069b0a9f69a09d99de9adc9e47a05499ad9aa49e39a0ed98839a7b9e28a0b1981b9a3d9e0ca04f98b299fc9d0ca0e2976099c49dec9f81972199869dd19f319706996c9dac9ff896dc983e9d5c9fc096d198039d169f5f96ba98e49ccb9e38968f98cb9c889ecf956798c39c619eb4954898a69c439e92952598799c159e38956d974a9cb59dc09480978a9bd29c8d94000000000000000000000000000000000000f11b291d9b9bd020e7248025e7a6152132255d261aa9a51f49241e2590a9c21d9922bc23daa9e11b0e20c920fca9b316f51bac1c33aa248e490c160d31aad9980b9b2e9c43aaf59bda9e3ba00faaf19dcca1b7a262aa309dd8a2b9a4a2a95b9d59a38ca4ffa8a59a98a26aa409a9b9964ba3a7a43ba899a089a45da551a5e89e9aa141a219a1cc972a997698ba9a88110f149c17e592f2210e26f9276ba1f92288269e2618a91917ada457a7eba455211b9c65a030a799239b1be994dda9af215c19649738a94b1f8b0d339bcfa85b18379cd29f83a77f9ba8a0a6a131a4f29c43a186a299a0d49c8ea1b8a2949eb09c1fa2dba2589fc79dbaa2d9a34fa0ac9c49a36ca4c6a05f9db3a3d3a469a17c9c5fa2a0a331a00e9acda0e0a1e29d879a73a0b4a1ca9c8b9a46a07aa1309cd59a2ca03aa1f89b9d9a11a016a1ac9bdc9af89fffa03a9be39ab39fd4a0b69acc9a6a9fc2a0759a8a9a299fa5a0fd99139abe9e76a0a3999a99599e30a018990d99f69dcd9f9698a0989a9d3e9f4f987a98609df69ec4974698359db49e46971f98129d869ed996ab97f89c6b9e65966d97be9c2d9eb895fe96979cff9d439515975e9ca19ddb94c0963d9c519d84948f961f9c0a9d64941d96b89bc89cc4932c97899bdc9c999200000000000000000000f11b291d9b9b0000f11b291d9b9bd020e7248025e7a6152132255d261aa9a51f49241e2590a9c21d9922bc23daa9e11b0e20c920fca9b316f51bac1c33aa248e490c160d31aad9980b9b2e9c43aaf59bda9e3ba00faaf19dcca1b7a262aa309dd8a2b9a4a2a95b9d59a38ca4ffa8a59a98a26aa409a9b9964ba3a7a43ba899a089a45da551a5e89e9aa141a219a1cc972a997698ba9a88110f149c17e592f2210e26f9276ba1f92288269e2618a91917ada457a7eba455211b9c65a030a799239b1be994dda9af215c19649738a94b1f8b0d339bcfa85b18379cd29f83a77f9ba8a0a6a131a4f29c43a186a299a0d49c8ea1b8a2949eb09c1fa2dba2589fc79dbaa2d9a34fa0ac9c49a36ca4c6a05f9db3a3d3a469a17c9c5fa2a0a331a00e9acda0e0a1e29d879a73a0b4a1ca9c8b9a46a07aa1309cd59a2ca03aa1f89b9d9a11a016a1ac9bdc9af89fffa03a9be39ab39fd4a0b69acc9a6a9fc2a0759a8a9a299fa5a0fd99139abe9e76a0a3999a99599e30a018990d99f69dcd9f9698a0989a9d3e9f4f987a98609df69ec4974698359db49e46971f98129d869ed996ab97f89c6b9e65966d97be9c2d9eb895fe96979cff9d439515975e9ca19ddb94c0963d9c519d84948f961f9c0a9d64941d96b89bc89cc4932c97899bdc9c99922c97899bdc9c999200005b148115809300005b14811580938120af247e2557a8a121132630272daaeb2058255a26bcaaad1f4324e42438ab5d1d092298238aab221a4d208721c4abed0e3e1c291df4abac971e94a80e24ac0a9cbf9cd09c5baccd9d0da106a12fac12a05da411a5a9abb6a08ea5a4a636aa8ba1aca5d2a6fda8b19eb6a218a4caa444903591909436160d8fe591ef934a17ea0a52156d160514e514261ea21f1a164b1c14240325d71bf619ff20192206201496b8a1cea38b1f7f961fa3b7a48b98ac20c29820a0bba74d21128e409e8ca9961b3e9d80a083a86d9b04a261a3b1a61f9f20a332a4cfa38c9e3ba382a4a7a0509e88a2ada3989efa9d64a256a3d49e729d2fa24ba3449f779d6da2c5a33a9f529d9aa2faa3ec9f5a9dc5a230a444a0f09c82a21ba4a39f8f9ccba173a32c9e2c9c3ca169a2159d289cfba024a27c9ce79bcba0f9a1349c709b8ea0aba1fe9bfb9a4aa054a19d9b889a12a023a13b9b1d9ad19feea0ad9ab599629fafa0229a83991b9f86a0ab995b99bb9e43a0379944997d9e15a0d2981799419edb9f7498d198ee9d729f16989e989c9d079fd2976998579da99e48975398229d639e9a961b980d9d4e9e30960d98db9c1c9ecc959997b89ce69d689531975e9c5c9ddc94c5954b9b609c2e946a974b9c789d85956a974b9c789d859500008f108a13659000008f108a136590a51e7a23ca2472a6b221c1261528f0aa9e213a265727afab7e2026251e2606ac511e7b23792423ac221bec20e72139ac6e144c1d671e64ac9394eb0d4f1582ac7a9be09cea9d62ac289ed0a19da233ac4aa082a4f0a41eac34a0b8a44da539aab895589b1a9c3197138e469265933217cf80940c8b0faf17dd084b126014cb16c31094188b19b7177714601c691d8d1808187d1ec31f0e1a9716cc1c541da11b1606e297a3999e1bea919e9d589f4d190784e29cfd9e0d98771a4b9c02a0b0a42b9001a1d1a2aea50e9e1aa415a510a5989f79a474a5e7a3df9f52a40ea53da2469faea397a43ca13d9f62a35ca4dca0a89e20a32aa4baa0069e83a2dea365a04f9d1ba232a342a0da9ce7a1eea234a0dc9c00a23fa3e99fd39c17a28da30f9f8d9ccda1ffa2569e6a9c56a183a23e9d299ce6a009a2879cbf9b98a0b7a1f89b259b67a065a1249be59a35a042a1d59a7a9af29ffea0439a2e9a849fada0ee99cc991e9f6fa072999399ca9e33a023995c99659e00a0b29837990d9eaa9f71981599e19d709f0d98f598a89d119fa197aa98949de49e30978e98889dfb9edf969498a59d239fc39686989a9d1f9f74965398519d129ff3950098f89ce79ea2956296459ce09d2795b6955d9a389c2893b6955d9a389c2893000068819403ec88000068819403ec88441f4d24282519a78622a9279b289eabf22182260228f3abb5205f257a2662ac5e1f2b2441259cace71b89212823cbacd514cc1d0e1fc2ac4796528eaa0fd1acfe9b659fd79fd6acc49e9ca2aea376ac7f9f7aa41ba564abe49a539f48a048a0d59095933a95f20f42841e02a8020911fd873389fb877611d20f25186d191e154413011b611cb3165213801a271c3918eb14631a421b2218e413821893188218170e478b9d8f66180f8ac298909a3517ea8e149a439c2215a98e499be39cd491dd95a79fdea07aa00e9e4ba35ba44ba3aa9f06a4d4a44ca389a0eca4c9a5fda260a08fa45fa5aea22ca068a423a542a2829f44a4f3a4e0a1d99ec6a3b9a420a1839e61a375a4d5a0249e35a369a486a0759df9a230a44ba0769d25a35ba421a06f9df1a235a4669fd49ce5a171a3dc9d569c57a1aba2209d089c22a153a2b09c059ceaa01ea2709cfa9bbaa0dea11d9c929b78a093a17e9b169b2aa032a1cb9a7e9ac49fe0a0289a209a5c9fa7a0d699d299069f7da069998f99ad9e41a0ff981699389ef29f8498cd98f99da29f3498c798d79d6a9f0798a1989c9d219f7b9744986e9dde9ebb9637985f9dd29e16963398699dcc9ed0951498419da89ee2957997cd9c299e0e951b97c19cf79d01951b97c19cf79d01950000ec01d00429880000ec01d0042988b41f8c247a250aa89822d127b12819ac2822ce262b283eacc32071257a26a3acd41e2524f824ccac1b1c5821e822ecac75160b1e521fe9ac24959a8efc8ffbaca79cf19fb3a0fdacba9f72a35aa4b5ac719d23a2eda2a5aa8e026e134313ba90980e4615a417190edb0be914d1165c08f50d9c15ef16810d750da8163a176111061086192a1b2f118412881a071c20120e13b819f91a9d15880f1914411538187a0635919e94d01790891797cb98a2164d8ed498399a23147c90059a059cb90c9294e49b789d8a9b909ba49f9ca008a1eb9e79a3a0a4e7a275a0bba4b2a5dca25aa0a6a48ba580a21ea07ea467a519a203a064a43ba5f7a10f9f07a4cca46da11f9e2da34aa4f2a0c99dd9a21ea484a05c9deea22ca437a0839dfea240a4a39f359d27a266a37d9e3e9dbda131a3fb9dc49cd2a120a3a89d599c85a1cea22a9d449c33a183a2b19cf99bdba014a2399c9b9b74a0a1a18b9b419b11a047a1e59a009bd09feea09f9a839a6a9fb2a01e9ae8992c9f97a0b1995399ca9e5ea03c99ea987c9e21a0db98c6983f9eef9f8a98b198239ec49f5298b198fd9d7f9fe6976398af9d2b9f53972998389da99e65960898e69c339e6495cf97b99cf19d3195e3963d9c669dc6940998d69c9a9ec2960998d69c9a9ec29600000302290308860000030229030886791faf24c025eaa7de223028fd281fac67220d2765284eac1b21d025f826beaceb1e62244525e5ac711cba210223f6ace014691c4a1efdac0198b599e798f7ac7a9bcd9e319ffaac9d9a729ef19f98ab830d2618eb18199a601014187119d30e8f0dca146a17ac08230d5116b818720d830dcb156117e80e750b0a168d162c11150c09175518a412d20d9817cc18bf13c60caf152117ec13ab0b7e117911b013dd04c38b568f991244872d94bb95fd0f678c0b969b97560c718caf967898370a7e900e9a359c5f939b99989ea29f2f9f2c9fbaa33ea4a1a258a0c0a4c4a51ba36ba0c4a4bca5a8a25ca0bfa4a0a54ea259a0c8a490a50da22ca09fa472a572a18c9f5da42ca531a1759ebda3c6a47ca0d59d02a358a4ec9f009e04a385a400a0d99dcca234a4689fa19d50a2c4a3a79e539d0ba2bfa3029ee49c99a160a33d9d979c69a1e4a2f49c529c35a18aa2989c089ccaa0f7a11f9c929b72a071a15e9bf79a1ca00ca1d09a889adb9feaa0839a289a759fb0a0159ace992d9f87a0da999599ce9e4fa03e999399909e13a0c4986b992c9eca9f65983599d29d559fda97e6987d9df49e27975d981e9d8a9e5896d097e99c429e66958997d49ce59d4e955297769caa9d70941e99a99d929fc2951e99a99d929fc29500000605220787890000060522078789d21e46243a250ba8f12253282c2942acbc22a427bf2875ac1f2137267527dcac441fb524aa25fbacd81c4d22b3230ead5616541d721efeacc998709b069befac539d0aa11ba2ebac809c04a0d8a0d0ab4a15281d821e79959712a81a7f1cd0106310ce169018bb05390e2115d416e901820c4d152417300dbc0b571679177a0ce80b8d166518e50ecf0c16167c17290fd6099c14ac150410a6086e112711b90e41014d89ac8bd50d448363929d94280b8f89e59452960509128bcc951598a30c81904f985e99e58e48984a9da49eb69ec79c7fa1bba230a2bc9e6ea385a46da25d9f57a438a567a217a098a483a5aea233a0cfa4cca54da29c9f70a463a5bca1b49ef4a3b8a42da13d9e4ca35da489a0089e5fa36ea434a0209e66a38da4ca9ff79dcda217a4ec9eb59d54a2b3a3389e529d19a26fa3d99df09ce8a143a3779da89cbfa110a3219d6b9c40a1baa2909c489ccba02fa2f29b349c7aa0bea1399b1f9c69a078a1d99a8d9b42a04ba18a9acd9a10a01ea1ff994a9ad59feca08e99199a829fc2a06199e799289f8ea007996f99b99e61a0c7983599589e23a06b98a398d19db49fac975298449dd99e9f962b98fb9c549ea495f097d29cf39d7695fa978a9c859d8b958297439c1a9ead988297439c1a9ead980000e1046308528b0000e1046308528b0720f724c72569a8b62267282d2985ac22225927782871ac0f21fd253827e3ac2b1f82247225fcaccd1cea21c72306ad4a16651d871e0fad0c98d9991e990aadf19b4ea0b8a00dad1d9c759fd9a00fac60119c18291afe928d12d218f51a6a13891074151e178c092f0ebc152318470c830ec0166e18a40ed10da5162f17f40c5109a714ce15790d5207bc124914450c6d08b5117f12b10e1704290e4e101c0fed016f857687e20d1c822f8fe391ea0967870c920894060b028a85942896000d228d8e9570976e8d9e96279c649d6b9e089daea11ca38ea24b9f1da4fca469a339a09ea4a3a56ea334a0a6a48ea506a31ca06fa477a542a2fd9f42a426a5bda1249f08a4daa449a15c9eb4a39ba4b9a0eb9d90a384a46ca0ea9d84a387a40ea08e9dfda243a4499f439d76a200a47f9e0c9dffa161a3d19dbc9ca5a1efa2499d7b9c7ea1c7a2f59c6b9c31a18fa2a19c619ce9a041a2399c539cd6a024a2029c3e9cb3a0e6a1809b049c79a08ca10f9b5e9b16a027a1469aab9a849fb5a09b99409ad89e52a00399fd99699e00a0b198ec99179e929f8298a199c09d429f2d98e098799de49eb4974298239d829e15977297f59c319e759602981b9d5f9ea896ea98ff9d589f909679965d9b839cda9279965d9b839cda920000c180040144850000c180040144857f1fd424d6251ea895225828302930ac1d224b27852841aceb200e264a27bcacd61e9e245725e3ac4a1cd5212c23f4ac0a16781c671de6ac4196a999ef9aedac5d9c2ea012a100ad649b3e9fea9fceab21181b1e541f2a93cc12291a791c1a0eba10681734195007fa0d9b1582178d08410ed514a5167008cc09bc1379148103e009e1122a144808ea0817121d14ee09ee06d4103f12150e4c03080d1d0d080d9801a3843389cb0dbe83768fb8919e0cdc850e926c939c0bfc866e922094950ab78a4c9369949c8d20948799679aff9cce9b5da0b4a15ea1159f95a3cda4d4a245a0b2a4afa507a32da087a48fa5c8a20ea08ea4a4a52ea2b39f80a47aa5e7a1669f5ba453a5a3a1f19e1fa40da5e3a0349ea3a3aaa451a0159e70a38ba41aa0b49dd6a225a4609f799d8da208a4bf9e3a9d86a20ba4699e239d59a2e6a3059ec89cffa190a37d9d9b9ca2a11fa3f89c659c2aa17aa2659c0f9cd0a0e2a10c9c9b9b9ea0bba17c9b4a9b72a090a1369bfc9a49a075a1f39a849a16a030a18d9a1a9a7a9fc9a0e799ac99d99e4fa051993199609e03a0cf98ee98ff9dbd9f9298d898d69d789f7398d9989b9d469f3398a498609d329fa6975a98129d879ed696de96229ceb9cee957298fa9d989fb5977298fa9d989fb59700002382f180fd8400002382f180fd84211f9e247e257ca7b521cd2795285bab6b21c8261e280eac69209025b926a5ac481e58240e25cfac111c4a210223d2aca615501c411dc8acd4956e99b89aaeacad9a42a034a18facdc99979efb9f56ab80152e1cec1cbb9442121f192d1bd011020f50165a18230876102017b518c90e600d3c169117f30e870da5158216830ec4085613e514e40cfc0964125913430c89046c11d412bc0e8c06cf0d6e0d81095d023804f605ed08c881c98aad8c3c01b481668c178e2c051882268db58d3d085a8aef92c4931b8ead949d9ac59b479ea19b7da09ca1baa13d9ef8a263a4b9a26a9f53a44ba532a3b59f80a486a5c4a22fa0b7a4baa590a2939f94a47da554a2cd9e2ea426a5b4a1aa9e05a400a53ca1199efda3e5a4c7a0589edaa3cda47ba0ff9dd6a21ba4a29ff79d53a2dfa3d29e909d53a2bea3a99e179d08a27ca3239eda9cd1a149a3a69d9b9c91a101a3389d539c32a180a2b39c0a9cbca0f7a1239c449b99a0cfa1f19b1e9b8ca0bda1919b299b76a09aa1299bdf9a52a06da1ee9aab9a0aa00fa14e9a3e9a8a9fbaa0ba99bd99029f70a0539949999a9e3ba0bb98f2982f9e0ba05898ed98119ee49f0098c098f19dab9f5397c298c49d729fae96c198879d8f9feb958999c09c299e7b968999c09c299e7b960000b280dc00dd840000b280dc00dd846e1e4e2439256ca7dc212128e228deab5721d42632280bac2c209725cc2677ac2e1e3a24ea24a0ac1e1c8321cc22aeac5d152e1c0c1e95acf8966599939aa6ac909af89fd5a09face59ae19ea6a07eab0a126819d41a03986013f818f71a0b06b11019189e19780b180f2817d118aa0e2d0e0816d6160e0f3c0cf0144d15560e7408a810b5118c0a7c016c0c910e3b0875026f093d0a870797010c0366011b072800f886cb86f8060e81b98cf98d560330830f8e328ff8803b87b0901692af053e8c8e9442955e8f0f970a9cf29ce79da89cbfa12ba353a2f89e11a41fa573a321a0b8a4d2a5daa3d79f99a497a56da3c79f85a471a59aa2e89e34a41ea5daa19d9e2ea419a58fa1909e07a403a5faa0e59d8ca396a444a0529e6ea370a430a0d89dc1a216a44a9f9e9d75a2f5a3e29e8e9d56a2bfa3ad9e359df0a179a30a9ec89ca0a139a3879d959c7da107a3269d449c2fa1cea2b09c2f9cd8a019a2469c989b63a071a1779b029b18a04aa1e39a959ad89f20a16e9a509aa19f08a12f9a469a719fe3a0df994b9a399fbba0b3990d9aec9e75a07799a2995b9e19a0cb982499e79d919f10980799859d169f5c97ed984a9dd99eaa96e298529d959eb3964898de9c939e74957597359c1fa0ad937597359c1fa0ad9300001582e280408600001582e2804086eb1d0824d42467a63d21cc279f2858ab0421a7261928f4abd21f5425882637ac091e2b24e52469acb21b3221762269ac1216e71bdd1c55ac58952a990b9c67ac219b7ea071a16dac409ca3a100a31fabb794439af19aa0a1ad0d79143616dd82a70fe7151918bd07d80fc315fb17da042c0d1814ee140384560acd122014fb03bd05560f06119b070606fd0d3710f00ac704a90bce0da90b550176032308320931000985b18406039a81e98b148d2a833f828f8e8a90a089968894911c93c88f2390d29870995d998e980e9e259f45a0859cdca170a3b9a2609e91a395a46ea3d69e0ca4dea44aa3f09e30a432a5b0a2a59f86a492a5aba2e69e4ba443a527a2719e1aa4dda4b7a1259e89a390a401a1949d28a370a463a0a59d27a363a42fa0779d04a343a4ed9f609dd0a234a4599f5a9d76a2f7a3a79e339deea17ca3d49d339d98a122a36f9d459d79a1f6a2f49ce29c4aa1cea29e9cb79c27a19ea24a9c8c9cd1a004a2ba9b289c89a0aba1469b899b40a060a1a49aaf9a01a019a1419a129a7b9fbca0ae999d99ba9e63a005991f992c9e22a0a798e9980a9e0ba06c98f498099e06a06b98ca98de9dc79f2b98a798bf9db39f00986a989e9d9a9f9297fb97819cc59d1496d997509bca9cb793d997509bca9cb7930000ca81c78090860000ca81c78090864d1d6023a324e9a5e7207e277728eaaacd207626012876ab3f1feb24062606ac601d9c23aa242aac9e1b4f219e2238acaf157f1c921d2cacc3932397699843ac9e99599f10a017ac539c79a187a2d7abd49936a02aa1e0a944111018b3188695b70f1a162d18b20a4b094b14331663842d0b8f13f61438842b0aff12341400083905680fcd11f0089a03730b0b0e2909c600210361064d074f808f88fa880381e181128c088d9a8707836c8e6e8f968c0485ed8f6691ed8f9b8c6b949095f4940d94cc9a789c9e9dcd99889fcfa045a1209d0ea2a3a36da2939ea0a3a8a418a3199f1ea406a5e5a26c9f30a42aa5caa25b9f39a40ca551a23a9f21a42aa5e2a19e9e08a40ca581a1859ed7a3e1a41aa1739ec5a3d2a4dda0439e7ba3b8a478a0089e10a377a415a0979db6a233a4909f6e9d61a2f2a3f49e439d02a276a3549e0e9da8a113a3c09dc29c5fa1ada2199d419c1aa158a29e9c009cbba022a2079c899b89a0efa15b9b0d9b58a0c0a10d9b7f9a0ba04ca1629a0f9a599fd0a0dd999399c89e61a0439970996a9e11a0089958993c9ed59fe49856993e9ecc9fb6981299059e889f4798d698c39d2c9fae97b2986e9df99ec496a7980d9dd39e24960296049b0a9fbf9326985c9ce39d0f9526985c9ce39d0f9500000b10ae107e8b00000b10ae107e8b1a1d2a237524cba55b20ae260628a4aa6d20ee259b2732abdd1eb824ff25a3ab071d3b237424d5ab1c1b04214622e3ab4116e11c0c1ec4ab179103942198e6ab6b99f69e3ea0eaab219c3ba12da22cab179dd6a3d4a472aa619c0fa277a38ca81914a8190a1b7e95eb1285196d1b2e026b10a217f718048dd30f3c175818388da70bfe14ad16b381cc08eb12c414bf043e055c0e8610b20633024706bc09c4833a00c885af8134898182a48c848ec78e0b8a1f93cb94a693bc92b199989b5c9ccb98089fa8a000a1de9cfca1a6a3e3a2379eaba39ea43fa3329f4da46ca54da33a9f68a47aa51fa3959f7ba48fa5aba25d9f5ca440a54da27c9f48a435a5eea1419f0da4f8a43ca1a09e9da3b1a4b0a03f9e76a3aaa46ba09c9d25a36ba421a06f9dcaa226a4959f529d87a2eaa3f69e0a9d40a2a7a3959ea79cf4a164a3229e4f9c94a1e7a28b9d1d9c0ea184a2bc9c779bb3a030a2339c009b64a0c5a1169bd69a15a057a1719aea9a14a04da1209add9a07a05ba1e299ce9acf9f10a17a99c39a559f98a03399809a059f5ea0fa983d9aa59e2aa0e698cc99319ed89f7c981899fa9d959f3398bb98a59d459f889763989d9d2d9fff96c898d49d589f43976f98f39d689f7f97f898169ec99fd897f898169ec99fd897000042122512888d000042122512888dac1c1e2344240ca623209326f2278aaa2420ee259127caaa771ead24bf252babad1cf622482462ab391a8d2011227eabe515151cd61d56abb48d158d518e81ab7b97e59d7d9e67ab159beaa0c3a1d1aacb9c35a317a453aa4e9db6a3c4a488a9ed9aa4a19ca2a1a78885eb839c845f92480e311296148e0dd90d941100155c852f0ab70fd4110a8a31079d0c6c0ef9897d031808160c6e8ae7000b017701af88a181c88ad889c88a8b8a0b92bd93fb93e2923e9a9e9bc99c12991b9fcfa091a1839cdda172a327a3eb9d43a369a4d2a3a89ef9a3c1a468a31c9f2ca41fa580a3969e1ea4eaa40da3c29eeaa3d9a471a2499e77a39ca4dfa1a89e53a38aa466a1949e38a361a446a1a89daaa223a4a5a0239ef3a25ca470a07d9deca24fa416a0819dd6a22ca4739f4f9daba21aa4079f109d6ca2e1a3889ec89c3ca2afa30e9e769cd7a156a38a9d2e9c55a1e4a2d39ce99bf6a06da2559ccf9ba3a00aa20c9c109c83a0c7a1999b1e9c5ba086a1429b019c12a044a1999a429bb09f20a1019a919a439feea05c99fd99c89eaea0dc9894997a9e5ba0a4982d99269e04a05298c098cb9d809f1d9868985e9de39e8d9731982c9d8f9e22974298339d7b9eee96d997169d599e6795b3972a9c689dbf94b3972a9c689dbf940000250e7810138b0000250e7810138be71aba21782364a56d1fbc252b27d5a9301f2a2585263caa6c1df123122584aa101cf62156238daad91911201021a0aa2c15341c381d7baac486900cb30d98aad795389c7f9c80aa8a9935a09fa013aa3b9c3da2c9a2bea9019dfca2e4a33ca9929c73a219a4c7a8289ac8a009a25ca7b292359897985ca13c840203ac03e4909f00f1819b02da88658014853582588ee0805784e7812990a786498f37904e96b48f0497f297009df1958e9c7d9dfea0339bb6a0d8a193a3379d62a2daa318a4b69ea2a3b0a447a4cb9eefa3e2a45ba4139f1da40da531a4e39e24a427a5b2a3989e2ba40da55ba3a99e13a4ffa4d9a2739ef1a3cda45da2589eb2a3bca4c2a1249e99a390a45ea15a9dfda253a4dea05e9d3ea36fa4b0a0649ddba238a42fa0749d56a2daa3529f1e9dfba1b0a3ae9ecd9cd1a186a3479ed39cbda164a3c69dc09cc0a12da3659d7d9c6ca1cea2079d1e9c03a163a26c9c819b94a0bea1ca9bbf9a19a03da1f89a479a9d9f0aa1249a0f9a879ff2a0019a129a679fc9a086991c9a339fa3a05f99369afd9e84a00f993e9ac09e63a0e498399a769e32a0ae98bb99179efd9f48981699be9d899fe8978e98639d1c9f8097c4986d9d549fa397a297e99c6c9fa9955597949bf39c6f955597949bf39c6f95000095920194ef92000095920194ef92a11e8324b82595a7ca1f7825eb2616a97c1eac24e125b2a91b1d7b23a724eea9ef1b87213d2302aa1d19171fbe2023aae915ee1a461c3aaa80066b92448d2faa2695739cd99ceca9c198dc9ef39f9ea93d9b29a12ca261a99f9c91a2e4a31da9239d61a375a4dea82c9d9da385a468a8d69cb0a222a48aa7cd9bc6a10da340a65d9ae9a0c4a12ca5959968a04da182a4889967a046a12ba44b9a0aa152a24ba4f19bb5a11fa356a4589c7fa222a480a42c9d30a36ba47ca4879eaaa37da493a4959efda3d4a48fa4b39ecda3cfa45da4429ecfa3d4a40da4969ebaa3e5a473a33d9ed5a3dca42ca39f9e18a434a502a3e49e44a457a58ba2ca9ef7a3e7a4b5a1119e2aa35fa417a1d19d12a35ca4e3a0a59deba240a46ba0b19ddfa25ba40ea0109d61a20ba4319fc89ce3a186a3479e809cc7a10ea3f29d569c74a1c0a26c9d469c1fa15da2079d2b9c01a135a2b19c189ce5a024a26e9cc19ba6a0d5a10e9c079b2da05ba1ec9aa29abe9ffaa0599a709a7a9fd5a0f7991e9a239fb6a08a99dd99db9e71a01d99d799859e35a0b998d799519e16a07098289a469ef19f68981c9a209ec79f4e98d099ec9d969f35986899a69d319fde97f2985c9df59e62970a984f9df59ec196f195449b7d9c1594f195449b7d9c15940000978d118ea3930000978d118ea393ef1d262446252da7aa1ef8243426d5a8f71d3c24532540a96e1c832201247aa9e61ae320122292a985187e1e1120a0a90715511a9b1cbda99505f78bf60cd1a94b955b9b0b9c8ca90598889ea99f5ba91f9ad9a090a11da9989baea1c2a2e5a8979c22a28ca38ba8319db1a203a44ea8709d06a32fa407a8919df4a232a4a5a7ba9df6a233a439a7689df3a22da4cca6529deda22ea431a6539d2aa34ba411a62b9d54a36ba4b4a5559d4ba385a472a5729d61a375a42aa58b9d65a397a4dca4be9d84a3b5a48da41e9ebea3ada452a46b9e89a3b1a40da4b29e55a3a9a4bba3369e6aa399a4eda2359e58a38ca46ba2c49d58a36fa439a2be9d60a3b0a4f4a1ac9d67a39da48aa1a89d44a37ea4f5a0399da4a22aa471a02c9d6aa2fba319a0219d04a28ba3499f229dc9a133a3639eb79c56a1b1a2b19d5b9c22a187a24a9d229c10a16aa2fa9c1e9cfba045a28e9cc89bd4a02ba2009c809b84a0efa1169b469b18a089a13d9a549bb79f42a1d199329b4b9fe6a05799d69ad99e7aa0dd98589ab09e48a09b981a9a649e26a0729880990c9eab9f41982c99809d1b9f7f97ca98499de29ef796ba980e9da59e839694980c9d9a9e8096c898f89c7e9ef39516989b9c619ef2942199c19c309ec9942199c19c309ec9940000c98a2d8c298f0000c98a2d8c298fce1d37242125e8a6701eba24f12556a8ac1d3b242b25cfa83e1c2322cc23fea85d1a5c2065211ea92c172a1d651e23a98e113816be1715a95b8b27969b9715a992941c9c1b9dd6a86697259ead9fa3a8839985a06ba18ca8d39a55a17ca26ba8ad9bb5a1f9a23ba8fb9be7a1f3a21ea83d9c12a217a3dfa7489cf7a133a36ea78a9c54a272a315a7179d80a282a32ca7a19d9ca20ea4c2a67d9dc3a207a49da6b69df4a24ea41ea6bc9d4ca39da4eca5bc9d80a3afa477a5de9db7a3a0a455a59a9d35a377a4fca4749d6aa3aea4a0a4779da3a3cda454a4c39dbda3efa401a4a59dc4a3e1a461a3d49dc4a3daa4e8a2b19d9aa3b0a458a2f39d82a3a3a4c8a1bb9d99a3b0a45ba13e9d17a364a4bea0c09c14a2aba30aa0e79cb8a159a3729ffd9cf0a165a3f19eca9cafa10ea3ff9d4f9c77a1c0a24e9d089c27a17fa2b59cd89be0a035a2739cab9ba1a0fba13b9c999b50a0a8a1e09b7b9bfa9f1ba1059b189b909fe3a0699aa69a629fd6a0ec99509a279fbfa08399d299de9e71a016997499689e09a099981d99fc9d899f2a980099989d1e9fca97eb98479db99e3297c998289d849e07976e98ec9c509e9096f797bb9c1a9e2996ad978a9cee9d0c963f97799ccd9d1b960498549cb69d9d960498549cb69d9d9600009388aa840b9200009388aa840b92691ca9222524e0a57e1d1b243825b2a7661cc0222f2400a8ee1a0721492233a84119981fb5205ba84d16281ca81d6fa8dd10f213f6147fa8728a8a956b986da81294239caa9c4fa8d5965f9e6c9f21a8d2998ba023a1d5a7e399cfa069a14ea73a9adca0b7a14ba7f49a39a13aa2dca6ed9a0fa113a2caa6059c44a1fba1a6a6689b49a19da295a6009c6ca157a2a9a67b9cfca13ca3aea6329c25a26fa377a6c09c79a2faa356a6e69cd4a20aa425a63a9d22a351a4f2a5149d13a389a474a5f79ce3a24fa41aa5f69ceaa251a4b2a4239d64a3a0a429a48c9d5da39ba47ca3769d46a39ba4b6a2469d10a377a4cfa16f9de3a24ba47aa1619dc3a22aa409a1ea9cfca193a370a0a19c9aa1fea2c19f409c74a1b8a2dc9e669c80a1eea24b9e579c66a1e5a22e9e679c5da109a3ba9d489cc9a05ba2b29c549c79a0b7a1139c429c7ea0a5a1e19b059c76a097a1a69b3d9b37a035a1089b8f9a989fb9a0179a619a5c9f9fa0e7995c9a549fb2a0e199619a319fa0a08b99259add9e95a02399ff99889e7aa0bf98de994a9e59a060985599d89d2ea09e97fe98919ddf9f0297cc985a9d3b9fbe967998199dea9e7f965f98fd9c939e34962698d29c549ec695d697929cd29df794b0970d9c279d5595b0970d9c279d559500001885250216980000188525021698d91afd20242227a50f1cc7225e24d1a6701bc321712323a71f1a9620b52167a7c3187a1e0b2092a7a3157e1b1a1db7a780110a154116caa7268a85965f96bea7b4931b9cbe9c75a7ab96a19eb79f4ea7e19884a0bca1b0a6b29938a18ca2fba5799bc6a141a3e5a5fe9aeaa1dca26ba5089ceea1aea31ba5e49b11a27ca3d1a4069d34a268a3b3a4999d52a294a383a42c9d83a201a49da4469c60a2c8a38ca4a19ce9a15da338a4719cbaa1bfa215a4dc9c3ca2e2a3dea32c9d0da352a42fa4539dffa25ca49ba33c9dbfa225a4bfa2479d85a2b6a3e5a1fc9c15a21ca33ba18f9cd2a183a3c6a0829cfba192a385a0969cd2a142a31da01b9c5da145a3fc9e389c22a191a2529efe9bd6a00fa2a19dcc9bada0c2a1529df99bc7a019a21b9dae9ba9a0faa1dd9ca19b8aa0dca1749c919b67a0a8a1299ceb9b65a089a1fe9b089c69a071a1119cb39b40a046a1579b139b01a00ea1779aa79a969fd6a0e199689a799fb5a07d99529a529fb0a05199199a129fa3a0ec98c499c39e7ba0b59879996e9e45a055984799199e18a01c985e99e69dd29ff4974699c69d8f9f88972c99979d5c9f4897e798549d539fc996c1981a9d359f57964b98e39ce29e1396e497aa9c619e2696f597239c8c9db794f597239c8c9db79400008e88b584049200008e88b5840492131ce021ee22e6a4211ce3226b2498a64c1bbe218d23c9a6dd199b200a2241a76e18601e46201ba71915381b071d2da7c110c914021622a7740398923a94cda6bc90359ae09b93a6b695409e159f5fa6359805a0caa0cda5169983a04fa15da5ab9985a0c3a1faa4179ab5a0dfa19ba41c9aafa07ba127a4939abfa043a190a3dc9a9fa0b2a1daa2c19bcda0e1a191a2309c0da1f2a13fa2149cf6a0bba193a1ce9be9a0cba14ea1fc9b2ca105a212a1a99cc6a1e3a142a13d9c34a142a2a7a0669c42a145a276a0709c11a197a238a00b9cf8a016a2ce9fef9b15a16aa2429f999c51a17aa22a9f879c53a1a1a2f89e989c63a190a2cc9e879c67a1aea2a29e5e9c27a157a22e9e549cf2a02ca2b79dd19ba5a0e7a10d9de19b82a098a1a89c989b34a03ba12e9c849b1fa020a1ab9b5d9b0da014a13d9b5b9b11a00fa1e49a059beb9f0aa19f9aab9abe9feba0369aa59a789fb3a0eb99759a2d9f7ca0a099019ac39e46a04c99a599629e14a0cb987899239eba9f8e985499f79d889f6f982699d99d589f37980a99a99d239f1398e0987f9df89e9397c9984f9dce9e1597a398299db99ece968d98e39c6b9e4b966f98b89c409ea69563988f9cd29d52956898419c3c9d7a943a98109c7a9d7d943a98109c7a9d7d9400001f831b01da9100001f831b01da91871b8221b42260a4bd1b6a22f123c2a5b11a6e21c32205a6da185c1fe62025a66e174f1d072051a6d114b41a321d59a6a1106e144b1735a66b035e948f950ba6bb901c9b1f9cd6a5f094419da89e70a5b696b99e3ca00ca56898ef9ffaa08aa4dc9822a01fa12aa4639977a078a1c5a35d9950a045a1f5a2319941a01ba15ba20899dd9fafa06da10999009f49a090a0d4987c9ebd9fc59f5e98509ea99f0f9f7698f69d3a9f619e1f990a9e499f2d9ec898779eef9f779e4599939e0ea0939e3499ba9e28a0719e029a879e05a0009ee6990e9f51a0de9d459a6d9f93a0bf9d3e9a7b9f8ca06f9d8e9a939f84a0329da89a6a9f87a0cf9c879a909fb1a08f9cc99a9c9fc3a0859cff9ac89fcaa0609c599b01a00ca1609c559b0ca01da14d9c179b12a026a1199c109b0da01ea1f29b259b11a029a1909b1a9b03a02da1139bde9ace9f14a19c9ad59a799ff2a0249af99a289fd1a0d099cd9a209fa6a08b999e9a1b9f9fa03c99289af49e6fa0109990997d9e2da0ba980e99da9de99f4498fd987e9d759f0098f798689d349fca97eb983e9df89e5097aa98ff9cb09ebe964898c29c4e9e3496cf97789cdf9de395b4974b9c949d8695db97159c579d109532983c9c8a9da794ef98a39b869c4995ef98a39b869c49950000f81575169a920000f81575169a92561b9c21e22242a4a01a24214022c3a4601938206921f2a43e18741e3e2033a51e168d1c191e65a5fd13ed18b61b54a52f100e14201540a59c08bb9133931fa55c8d38984a99e3a48d926a9ba69c7fa43895469d8c9e4ba47a97ca9e36a0c0a3fe97dd9e41a0cea22a98b69e16a0bba11b98ab9e04a02ba13998bc9e22a0c1a037987f9e9b9f4aa00c98619e449fac9f6997d79d339fdf9e8a976b9d959e159ea6972b9d259e699d8c97c49c209ec49c1098149dbd9da49c6698679d339ebb9cb598179e499fca9c2a99ca9e10a0449df299649f67a0649db799759f7da0589dd199fb9e56a0e19cbe99d79e5aa0b39ca399df9e51a0909c259adb9e32a05c9ce6999e9e0da0369c1f9aab9e2ea01c9c469aeb9e5aa0119c8c9a299f82a0ba9bbf9a179f7ea0579bed9af19e6ea0309b4a9b099f82a0ca9a549b0a9f85a06b9add9ae29e54a0ee99b49aa89e28a09599659a709e1aa02a991a9a2c9ef79fe498b399f19dd09f80988999c99dbc9f55982799989dc79f1698ef986d9da99f9397d998529d809f5797c098349d319f3097af98109dfe9ee896a398f79cd49ec7968198dc9c8f9e8d965198c09c599e1f962d98a09c3e9ef6951498719cf99d869556974e9c919dc4940498649b8a9cb4930498649b8a9cb49300000000000000000000f81575169a92561b9c21e22242a4a01a24214022c3a4601938206921f2a43e18741e3e2033a51e168d1c191e65a5fd13ed18b61b54a52f100e14201540a59c08bb9133931fa55c8d38984a99e3a48d926a9ba69c7fa43895469d8c9e4ba47a97ca9e36a0c0a3fe97dd9e41a0cea22a98b69e16a0bba11b98ab9e04a02ba13998bc9e22a0c1a037987f9e9b9f4aa00c98619e449fac9f6997d79d339fdf9e8a976b9d959e159ea6972b9d259e699d8c97c49c209ec49c1098149dbd9da49c6698679d339ebb9cb598179e499fca9c2a99ca9e10a0449df299649f67a0649db799759f7da0589dd199fb9e56a0e19cbe99d79e5aa0b39ca399df9e51a0909c259adb9e32a05c9ce6999e9e0da0369c1f9aab9e2ea01c9c469aeb9e5aa0119c8c9a299f82a0ba9bbf9a179f7ea0579bed9af19e6ea0309b4a9b099f82a0ca9a549b0a9f85a06b9add9ae29e54a0ee99b49aa89e28a09599659a709e1aa02a991a9a2c9ef79fe498b399f19dd09f80988999c99dbc9f55982799989dc79f1698ef986d9da99f9397d998529d809f5797c098349d319f3097af98109dfe9ee896a398f79cd49ec7968198dc9c8f9e8d965198c09c599e1f962d98a09c3e9ef6951498719cf99d869556974e9c919dc4940498649b8a9cb493000000000000000000000000000000000000431610188991381e8b22132353a6052021244c25e4a8c41e0b2398241ea9371db12119236ea92e1ae41e1f20bba9e515311a451ccea95c92958bc592c6a91098d29b1c9c8ca9099c559f73a04ea9cf9c32a104a256a95a9deba109a34aa9969e98a2a1a304a96e9f60a369a446a918a15ba554a642a710a0d9a204a4ada3489ea4a1aea2dda1ca97809ee19e3b9c518c669382913d960000dc15071c5693932082298c2afda6591742a2bca404a67015e0a011a3eea18c205417ad9637a6a51f2f17c694dca6d91a6b8a039a44a5d086ca9a229d02a3259a6da091a140a2c99ca1a2f4a3c2a0349ed4a2baa36da0529dfba3c3a41da1759e1ba4b1a403a24c9c25a2a7a397a054988ba062a2d59e9c9818a08fa1a59d489a5ea058a1439da49a2fa054a1ad9c299a19a029a12e9c5b9a22a020a10e9c399a07a00ca1809b639aeb9ffba0189b489a719fe2a07b9a769a449fc2a0409a3f9a009f8da0069ad0998c9e5ba079994e99229e0ba01199be98b29d929f92985f98749d1b9f52984d984c9dcc9e129823982b9da49e7797b897019d6a9efe962d97da9c499e8b963997ba9c249eef952097a09c019ece951f97709cc49d5c957d96319c4d9ddc94b3960a9c169d7e943495c19b179d2294a796b79a589c5992000000000000000000004316101889910000431610188991381e8b22132353a6052021244c25e4a8c41e0b2398241ea9371db12119236ea92e1ae41e1f20bba9e515311a451ccea95c92958bc592c6a91098d29b1c9c8ca9099c559f73a04ea9cf9c32a104a256a95a9deba109a34aa9969e98a2a1a304a96e9f60a369a446a918a15ba554a642a710a0d9a204a4ada3489ea4a1aea2dda1ca97809ee19e3b9c518c669382913d960000dc15071c5693932082298c2afda6591742a2bca404a67015e0a011a3eea18c205417ad9637a6a51f2f17c694dca6d91a6b8a039a44a5d086ca9a229d02a3259a6da091a140a2c99ca1a2f4a3c2a0349ed4a2baa36da0529dfba3c3a41da1759e1ba4b1a403a24c9c25a2a7a397a054988ba062a2d59e9c9818a08fa1a59d489a5ea058a1439da49a2fa054a1ad9c299a19a029a12e9c5b9a22a020a10e9c399a07a00ca1809b639aeb9ffba0189b489a719fe2a07b9a769a449fc2a0409a3f9a009f8da0069ad0998c9e5ba079994e99229e0ba01199be98b29d929f92985f98749d1b9f52984d984c9dcc9e129823982b9da49e7797b897019d6a9efe962d97da9c499e8b963997ba9c249eef952097a09c019ece951f97709cc49d5c957d96319c4d9ddc94b3960a9c169d7e943495c19b179d2294a796b79a589c5992a796b79a589c59920000bc0d4911e7910000bc0d4911e791781fcf237b242ba8862022253a26d8a90f2041242c2522aa8c1d0c226f2367aac11b6f204b21d2aaae18251e651fb7aafc078f179018daaa5097eb98729611abd09b6d9efc9e17abc79c8d9fdd9fe3aa339effa18ca26daa559f57a36ca4d7a915a016a48ca4aaa8659eeea205a49ca44c998b9e08a0a2925d935c97ec9839185b108719e31ada159617142041217e14331ce323f8245188441df7248026139bec9096a05fa1c2183f9bbba54aa7c41c1299cea24ea45e9b3c184e9a3d9e1fa47412cb98199b1fa3f299ce9e62a0cea1ba9c8ca03ea116a04c9d44a154a2bd9f779d41a296a31aa0859d4ea241a372a00a9d0ba257a32ba1a29dbaa221a4cea1809de6a20ea404a1ec9c1ea2ada34aa0649ca5a110a3689f629c51a1a4a21f9e299c05a119a22b9d189ccaa0d1a1899caa9b99a0c2a1409c399b5da070a1dd9b879a23a00ea1739b249ab09fcda0d39ace997a9fc0a08f9a6899309f92a0239a5299eb9e70a0d6992b99959e2ca040990f99589e0ba00099ea982f9ece9f8b989598e39d779f53987098a69d299f11986b98809de79ec3975098539db79e19972b98399d999eb8961998209d849e8496d797f69c2f9e2696f696519c569d3795de952f9a2e9c0a930e97269c769dc0930e97269c769dc093a70be307bc07398ca70be307bc07398c09188719421a4f9ea81e4b240325a8a9a420ff24ee2522ab5d1f1d24e2242fab0c1d5a22da2292ab331a5020d9208babf513001cd61ce2ab1795168d058e1dac059b799dda9d2bacbe9d82a0d4a1e3abdd9e33a32ca43dab53a09ba46da511aa4e9d1fa1fba1c0a516941099e099dc9ace802b140d167882e800b412c913ea11fd12f91a1d1cc3117c169d1e0d20f70fe3188e20a021d60f2d1943200e21798805135789fd905789979270a0f0a1c28ed19200a042a108968185de9dfc9f93a0bf958e9e14a058a06e9b38a038a198a0f09c52a13aa2f2a0569ea8a2bda303a1a49e12a32ba441a1c79eada2cca323a1439ec1a2e9a331a1ce9d8ba206a47aa13a9d60a2bca3e4a02c9d34a2d1a37ca0019d29a2a6a32da0b89cf0a138a3fc9e109c38a160a2069ee49bcca003a20f9da09b77a089a1489c239b38a03ea1999be19a21a02fa1f79ad69a12a00ea1cb9a7b9aaf9fd2a00f9af299339f7ca0d7994f99a29e32a04b990e992f9ecf9ffe98f298e29d809fcd98fc98989d289f41985799b89d339f4c98f598879de39e8a97bf986c9de79e4f974698409db79eec964698669de19e1e977198809d1c9f2b97fd97429dfb9e71960398289dde9e3f963c98529c039d65945c95ce977598bf8f5c95ce977598bf8f870cc608110a2c94870cc608110a2c94121104140613439aa41e8c23a1242fa92f218f25a02672abb81f79245b25c5ab831de322832425ace41acf20362240ac4314fe1c371e4eac27964b8d738e72ac8a9a719d8a9d10ac719ea8a16ea20fac0fa053a417a58dab2f9ebea2f2a3aaa78d929d967197c89b86832408410ea894be0781131115878da5109b183d1a2283a7133a1a451bfa82b014511c6c1dc803cf15e41c331eac049e15c01b781c46059811580c2807cc059285a19be19cf405b38eee9c4f9e718f3591d09b269da297dc94939c959de19dc3980e9e6e9f2fa06c9b169f09a009a17b9dc1a095a110a1e69d61a29aa338a1309ed5a219a475a1d49e25a33ca46da1859e31a376a483a1a89ddba237a4aea07d9d8da225a487a0409db9a228a47fa0859df5a26ba46ba0f69ccba231a4c19f659c57a186a2809dba9bd2a00ea2cb9c6f9bd0a00ca28f9c7b9bb1a0eca1499c819b82a0c8a1129c439b4aa08aa1769bf99a10a026a1ce9a549a9d9fd1a0369ae399389f97a0ba998899d89e64a06e9942997e9e1da0dc98f498169ebf9f9c98b298e09d699f51987098a19d2c9f0d980c98459dd69e5d978097039d889e99968497049d5d9e4a96b0972d9da29eef9582971a9d9d9e0496ae97769c979dcf9442989f9cad9d049642989f9cad9d049684029181df80d38284029181df80d3821214db14b2148a99b11e1124b224dda94021bd25c226e6ab501f5824242516ac781dab22b5234aac3f1a8a200d2159ac3e14651c5a1d55ac2195578de9947cace09b679e549f46aca79f4da347a439ac679ffba3cca461aae3970b9ccf9ceea0988b1a87c408a8969688398d268e7591250c29115f125f8fa90e6615de16418d61135619f41ab2899b14b11a0e1cc78a9a13b319641b008c8511d91676186b8c900ebd034a8b8b8e34093795c797f4099c8149979398a389758c6498169adc91cf8f8b994d9b419b1895da99af9aae9e01992b9d249e83a04e9cafa0d0a1e0a06a9ec3a215a46ca1a09f11a4f2a4e0a1e19f5ba42aa550a2c49ebea3baa4afa1d49dc1a21ca4a5a09a9d51a21da460a0529d95a223a434a0899dc3a22fa4a09fcb9ca3a1e6a2509ed09c53a1aea2d09daa9c79a1e4a2b49d739c61a1cba25a9d179c21a180a2c09cc59be2a006a25b9ca49b66a07ea1a79b9b9b09a020a1059b619bb09fe3a0b09ac49a649fa0a0319ac699df9e67a0d2994699939e24a06c99bf983d9ed19f01998d98009e909fae987398d19d619f52986298ae9d319f18982f986e9dee9e6897d397109d8e9ec196bd97c49c2f9efb9531977f9cb69d6e9583982f9ce79cb694d297d49c2b9e4896d297d49c2b9e4896e100848188814d00e100848188814d008a143416e215a1996e1f892471250eaae3215426812748ac7a1f6224942515ac2c1dc522c52346acf51a8d205e21ccac65125b1ab41b92acd197d398dc99adacb29c42a099a048ac769ebca2b5a3ccaba699f79d279f4ba7e484470ed910fe962b0b521123141b92d10f051349154292f4105f144b16268d3311ec17e718bb88d9122b185a19fe8119127618e7196c024a10d6162c18ab02b20d27124a139782a20a6802cd8868020008078dcd8f3c02e000d291d1945b87920330928493bb903d8b36932f9308996391a496da97a49d3b98449ce19cada09c9b8f9f83a0cda1d49db8a1d8a2b8a1249f61a378a438a2df9f1ea4dea450a2fa9f50a458a500a2029ff9a3e7a431a11e9e19a39ea455a09b9d8ca206a4ba9f2b9edfa279a4a79fc09d94a21fa4189f429df2a199a3339e4b9df4a1ada30f9ebd9d83a1bfa28b9db59c34a198a2ef9cfc9be6a035a27c9c9e9b85a0e2a1099c349b4aa05aa1929bc49af49feea0d89a459a899fbca0509af899369f94a0359a8a99ed9e67a0f6996499a09e37a067996f99539e0fa0ca987199199ea59f7a983c99c29d4c9f0498db98559dd89e46976c980d9d7b9ebc96f897da9c3d9e15965597c09cee9de395dc961d9c329d61936a98399d909ecd966a98399d909ecd96dc809e81da814302dc809e81da814302fa13d21540157899d41e1024e524dca9e3217526c1275fac1120c7242d2626ac571d1b23422447ac2e1c5c21f121d4ac7b12a91af61cbeac9c98bd9bc69cdcac179d54a1e7a12dac259feca3fea42bab0b9a469efd9feba32e80e60beb0f22914a0d8f139116928c43106814a9161d9015119c14dd160604310f901437166101900e6d139b155281080e3e13bc1491016d0c97109f124085020bf70d1c10968893090e052e02af813303c68dbd8f5505c700639062921082d180899053933c8c9683de8f2f906a97d589c88f0392759d4894d398229a1aa016991e9d1c9e9ba02b9c7ea081a1d8a0b49d0aa250a3a4a1069f8ca39fa4a7a2329f98a3c8a41fa2a19e49a355a40fa1769e2ba355a4c3a0ae9dc0a21fa46ea0009e27a370a405a0619d85a2f1a3f39e299d19a279a3479e1a9de3a12fa3da9dd99cc2a119a3869d8a9c94a1eba22a9d619c20a18ea2a09c399cb8a011a20f9c169c72a0baa1739b329c32a053a1f59a8a9b1ba016a1a09a859aca9fd6a00b9ae799629fada0bb99ad99239f82a063996899c99e5ba02c990499529e1da0e098b098e89dc89f79985a98889d529fe0970e98109dd39ee7968097d89c549e2896d797b79c0d9e1196a997839caf9dbb957797139cc0a019947797139cc0a019940c018d82b5819d050c018d82b5819d0580142f1638165f98951f92245825dda9ae216e26a62779aca21fc724ef2530ac4c1d1c230d2467ac101c67216e22deac8314181ce11dc4ac079818994f9aefac439c6da0eca01eac049ec0a208a4ecaa1a95f99799996fa056027e0fa913468eda0eb8123d1660897910a61472172789ba102714d2150e810110221441153481430d3113651547012c0e4014d1158201900d6513d0148481080c5a119312e786a10a820d380f7a83c007e508a20a320409074f858f896d08a300218d4b8ea98846882391f3928b95c18c49952596999ca9948b9a2b9c12a061990e9e479fd2a08f9cd3a029a233a12c9ebba217a44ba2c29e66a383a4c0a2a99e4ea35da433a2bb9e36a345a460a1e39eeaa3d5a443a11e9e4da362a48ca0d79d53a37fa414a0749dc1a22fa4609f209d26a2aea37c9ea69c91a1f4a2999d5e9c24a171a2fe9c529c22a171a2cf9c439ceea023a2679c3c9cb9a0eaa12b9c529cbaa0f4a1059c4a9cb1a0e1a1e69b149c70a094a1329b329b09a023a15f9a3e9a5f9fa0a0c299be99ba9e39a02a99a9995f9ee39fcd9872990d9e9a9f9d981599c49d549f51989b98749dec9e15982e98129d639e39973297d99c249efb96af97019d579ee796bc98b79d0d9f7297ea94f8982f9a4d94ea94f8982f9a4d9421014583a582230521014583a58223056f1347154c15a197891f7d24892547a9c4216e268c273dacfe1e86248625ddabb91c5b2257230dac051b75205221a8ac2e12751adf1b98accc970399319ab8ac8a9cd3a057a123ac219f4aa461a510aba697dd9a649cb1a050002805af0b01898e0e1610191403843410f9135c16f400fb10b513f3158902ef0ede14331711010b0f181447160281550dcd138215f187d40c0412f113de85a70ac4107f122786b308aa0d61105501f3035a81d3815a817c040987378838848c00f78a4a8dce8dae83838c968ee3941001658b808cac9b1f91db931b95df9ea998159ccc9caea04e9d8fa0ada1bca1f09e10a340a414a2d99e87a3bfa48ea1cb9ec0a3aaa48ea1d99e44a42ca5cfa1659f68a476a517a15b9ed2a3eaa4cfa0119e6ca3a4a439a0699d9ca223a4609f339d50a2efa3ba9ee49c2ca2aaa36c9ec69cffa18fa3d29d8b9cb5a144a35b9d5d9c57a1d4a2d59c209ceaa033a24a9cea9baea0c4a10a9c369b63a07aa1309bff9a4aa06ba1249ba79a22a034a1b39a3d9ad29f0fa1589ad699619fc4a0fb998a99ea9e51a075994999699e0ba0fa98e998029ea49fb798aa98c99d6f9f8a986f98689d0e9f2b981a98069dab9eb2974297929c019ea896bc962a9b6c9c16956e98d69cae9dc6956e98d69cae9dc695f1002e821f82ce02f1002e821f82ce02f912fe14e5141898ca1e742458252ca93e213626582751acb31e5e2451251caca11c4b22ad2338ac021b8a206621b2acf111651aea1b82ac30972b9ab39b9bacbf9b53a0d2a06cab4f9e47a3caa4a7aafa95f199ae9b79a1eb01080e4d127587bf0f2810ac14438157118311c6140583170e0511c013e981540ed00e6810e682770b1c0e8c107d83b6091e0df30e81889608520c440f0d033304b0046a01b084d702f7805881e50217021383288406819f0263834584218125073309640afb91fc05860e670c58995608b20cfc0dee9d159103943b9583a00798b79cc99d30a1309ce5a049a2aba1389e0ba364a498a261a057a43ea58aa3e39e1ea419a548a2ea9d0ba35ba49da0999e93a390a43aa1249e5fa362a4dda02d9e6aa3a6a469a06b9d3da2bea34c9f869de6a169a3ba9e6f9d06a27ca3919e3b9df0a14fa32e9ed19cb5a11ca3ad9d699c95a109a35d9d439c42a184a2fe9cd99bbca0e2a13d9c7e9ba0a0d0a1199c369b87a0bda18b9bd19a74a0a0a1569b8e9a39a063a1f59a719aed9feda04a9ae799419f8da082996b99c89e50a027990a996a9e26a09898c9981e9e04a04198db98f69df59f04989898fc9dc39fe4970899f09db49fd5973c99de9d5f9f4996609e1e9ce99ce693609e1e9ce99ce693e200fa81d9818a02e200fa81d9818a024513711572152298a11e63244e251ea926212b2664273fac4a1e4a245725fdabae1c6e22652310ac4b1b14219b217dacff147c1ba31c3bacc896d899509b5daccd9b60a0cfa082abc79d35a396a4e4aa82988f9d4a9f0ea52b02e20e1612788d1f0ff00dda12c681730f0010c613a081980efd0e4c11a5810e0b4a0efd0f3983070b230cc70e8282d108fa0cd20f0f828509600c9c0dcd833208620bd10c718540080e0bd60c3c883006600b110d5c8c2408820b9b0bcb901c089b0ce50d7a9434026a069d029d970c81078c318dc99c8a92d697f798e89f3998d59ce99db7a01f9c1ba159a20ea27b9dada211a43da2399e43a372a414a2b79defa25aa4f7a0149e69a39ea4a6a03b9f32a451a518a1099ea3a3c0a465a03c9e53a37ca434a05e9d3ca28fa31c9f319d04a258a3a29e179de3a166a36b9ed89caba144a31a9e869c6ca112a3939d5b9c3ea1e6a2189d109c08a1b0a2ac9ce49bb2a00ca2409c189b55a05ba1909be59af09f1ea1ed9a8f9aab9f03a1749a439a689fe9a0029a229a419fd1a0e199279af49e99a0a399649ac49e57a07d999a99289ef29fea982f99bf9d7f9f5698fd98689d029fc597cc984b9dbf9e5e97e399c29c259e3596a6985b9cf99dbb946e97449c159e11936e97449c159e1193a3003e8173819801a3003e8173819801b3121f156015d198fa1de923dd24b1a8b120b3252027fcabfd1d2624062564ab6d1c6e22822371ab071be220802130ac09166c1b5f1d48acd2938f98a49941ac0f9bdb9fa9a0beab989d88a260a401ab4f9a8da0f8a109a8c88a8592cc93fa99160c8e0a8c0e4a8935106d0f50138180ce0eb1101d14d881f90d8510e9116983e60cd50d2310b682dc09c60d27104d839208d00d7510c1838107fc0c500f2d8764054b0c530efa883c06b709bc0bc18a90048f039d013a8ead01ad840c8635934e85cb8ecd905499d68a8194c694469ebf94569af09b3ca06e99b69e0ba00fa2059dc2a170a35ea3239e4da39ba40da36e9ed7a3dea486a2e29de3a21ba4eea0f39dfda249a48ba0679e77a398a407a1669d85a2f3a322a0a49ddaa23ea4fc9f4b9daaa215a4a19f4f9da0a21aa4279f379d2ca2ada3809e3d9dc3a122a3ee9d249d82a12aa39a9df39c71a118a35a9dc29c45a1f5a2e39cd89c0ca199a2779ccf9ca1a0efa1e99b419c7da0a4a1649b9d9b3ca074a1fb9aa19a0ba026a17c9ad5997b9fbfa0019a3999989e7aa010991099f79d39a0a098ca98ec9d12a08498af98f79df19fa098a098dc9dc39f98984a98b49d769f59986598ad9d889f5498de97079d549ee1975697529c5d9d7b955697529c5d9d7b9594002b813b812b0194002b813b812b016c1260157b150e996e1d932398243da889209825122759abc01da623cf24ecaa0c1c2322432307ab601a44203021f1ab2413b419561cf5ab5b955f9877991eac3f9ad69f32a0f3ab299d86a215a4a0ab459d01a373a4d9a99893bb9a229c2ca263053e08a50b3f928b0b6009fb0f9683580e2410b513bf89530d6d123814138a190dca0e53115b887f0ac30ebb10cc89770cf30f39115c8d4f0b7a1097127a90110dee116e133693d90a57113813979446091d10ae10b8964e04560c3c0c1a9800817d881a8d459aa98f05944997af9efa952b9c289ddda04299ab9e4ca034a1ac9c22a182a270a1019fdea22ca487a2209f36a35fa4b7a1679f2ca3a0a409a1089f88a3cba4f8a0c59f17a424a528a17c9e94a3bba4a0a0209e38a3b2a470a0889daea22fa4fb9f889d60a209a4469f3c9d01a29aa3a09e009da4a131a3269e099d77a1e1a2909dd69c3aa177a2f59c3f9c04a12fa26d9ce69ba0a0e3a1df9b599b5fa0a8a1469bcc9a3ca0a2a1ca9a409ad29f34a12d9acb994b9faaa0e9997199ab9e41a053993e99469ee09f0f992699229eaa9ff298dd98ee9d6d9f8598a498ae9d119f55984a981b9d769e31971b98e19c679ea696ca97b29c659ec69513971a9bad9c619421970f9b659cfe9321970f9b659cfe93ca0133802e805500ca0133802e805500b80feb122513fc98d61caa22492427a80520fe2453260eab321d5923a524b7aa3f1b8921d12295aad719fa1fdd206cab2115c41bd51c6eab2692f7924a975dab94990f9ef19f53ab379c9ca12ea23aab899c05a349a4baa9919b80a141a3a2a7b59111983499f79f6e0bbc102714cc9538102814b0161093820f3714d61534930b102212e014e390310d7c122f15f0929d0e97127c140b943d0d1f140c167895af0d38141a167b961d0c4f14ac153e98e10b3511d3129798e705c70c8e0e989b398a549309946a9eb8946d9b7c9ccaa0a299cd9ff7a061a12e9cb2a17aa3e8a1689df0a275a405a23a9f37a423a5b4a2069f28a40ca585a2479f48a439a595a2749eada3cca44ea17b9ef8a261a47aa00f9e31a35da471a0d09de5a24aa41ba03b9d69a201a4509fe79c0aa27aa3fb9eae9cb1a11aa35a9e789c7da1eba20d9e199c2da17ca2759dc39bbca012a2d29c449b6aa0d1a13c9c1f9b30a08ea1799b649abc9f26a1699a319ac19f22a1e399519ad89f5ba1e599119a5d9ffea060990d9a079f7da02199be99b79e51a0e6988e997a9e1aa0c7983c99119ec09f6498b298e99d8b9f48986998959d359faf9708987f9d059f53973c989b9d129f7a97af98cf9d079fcd961898399b449c4a941898399b449c4a94660154802f80c300660154802f80c3003e0f00144913f3987d1ca922342447a8102029255226f0aa3c1d5b23ae2463aa3d1b3e2173226caabc19dd1fcb2019abd513461ad31b06abe08f76921994d5aaa997ea9c469d6eaa609a37a0d0a03aaab89cf7a1d6a2a5a95c9d34a374a417a94c9b82a1cca294a6b893e799d69b1da1b309b2127e14bb9bee10bc16b01860995810bd153518ea98770fe015af1765990b0e121408168198220c86128713a198e1095b0f1611be98c901ae875f830a99bc889992f792589c1e8f3f96f9970f9f0395949afb9b5aa0e4985a9edb9fa9a1e79bb0a0bea156a2829de6a180a337a29e9d88a272a44ea2ed9eeba3bfa4dda2b49ea2a3a9a463a20b9fe6a3dea475a2a59e4ea38aa49da19a9df9a1aea3b3a09f9e93a221a499a00a9ed3a235a43ba0669d5ca2eda3929f299d3fa2d6a3219fe69c17a294a3a49e739cc9a138a3f69d1c9c74a1cca25b9de19bcfa035a29d9c6d9baca025a22b9c369b6fa0d7a1039c8a9b57a0bda1939bf39b40a07ea1279bcc9b0ba02fa1e89a219b999f03a1199a519afd9ea4a07599a499889e60a0d2982f991e9e23a09098b998c69da49f3a986898749d2f9f099816981b9dab9ebc97b597099d7b9ea197bb97e29c469e2c971898159d419e9e96f797449c609d9d95f797449c609d9d959802bf80528239059802bf8052823905f4128216a5160d998f1d0424b724fba8fd1e8b24cd255aaa7d1c80221924eba9a41adb20fc21e2a91719251f102074aa5b14c5193c1c64aa728c158c2a8d48aa9c96bf9b109c3aaa2f9adf9f0da020aa6d9c74a179a28aa9fb9cd1a22ca4daa84b9db9a230a418a8b39be1a16fa3c2a6ff955d9d879e57a314910e989a9955a0528b9c91ac93e19d9785f28de38f5d9dca82f08b558d839ce580e488998a5a9dd000e1885a843b9d4b896390a990bc9dcc91bc98dd997da06e95229c0c9d8ea15c99aa9fd4a005a22c9b58a167a2d8a2219d4da27ea342a3579dfda258a45ba3b49d1ea35ea4a5a2039e8da39ea484a2039e93a385a428a2aa9ec0a3dea46aa2d19d76a3cca4bca10d9d4fa2bda3a7a0b19d0da32ba4f0a09d9dcca227a43ca0109df3a13ea3599fc29c8ba10ba3919ea19c81a1fba2269e8c9c95a128a3bf9d649c70a1cba2479d289c17a13da2e39cc19ba8a0e1a11d9c2b9b44a052a1889b659ab89fd8a0919aea99479fbca0099aa2992b9fa6a0b7998699fb9e7da06b99a099ba9e56a01299a9998e9e3da0e498ee997f9e2fa0d998ec99339ef29fad985c99cd9d779f54986d98459ddd9ece97e697fb9c9c9e3c97fe96989c5a9ed49636968a9b3c9d2795bc968b9a409cc394bc968b9a409cc394000005921692a494000005921692a494751d9a23c82423a7141e92249d25dda8981df32312253ca97c1c1d22092474a9b81ad2200922bba95818611e621fb3a99814481ac01bd4a9b385ce914393d6a99996859c239d9ea99e98da9ef39f86a95e9b2ba116a242a9c79c1da243a3eba8089dcba2d8a393a8d19cd9a220a41aa85c9c67a1d6a216a6039a3da041a18da48798e79e11a0f4a230966c9d989e43a28494839ca39dd5a1b9940e9cf69caba19494279c059d69a147973e9d9d9ecea1d598879e9d9f7ba21b9ab59fe2a0bba2fc9b11a122a2a2a3479e51a1a1a26aa3699d1da2cca306a43a9f62a2fda313a3569e9da217a465a2a69e3ea3a4a4caa29da0faa3d2a4cba23e9ffaa31ba51ba25b9ea7a20ca406a1859df3a221a45da1429d46a2d1a387a0da9c41a2c8a3b29f699cb2a101a3b89e699c6fa1f5a2dd9d609c71a1e7a2cd9d229c24a158a23b9d189cd9a00ea2e19ce39bc1a001a29e9c869ba0a0dca13c9c309b58a0a8a1de9bb29a05a03ba1049b529a729fcfa0459a4f9a299faca0b6995c99d39eb3a072996999699e46a0fa985799409e03a0a9988399269ee39fa398e699269eb49fa398cd99009e929f86989a99d09d699f62984099989d139f4498a498469de19e06986498289c6d9de3951897379c409e31941897379c409e31940000ca929b9323950000ca929b932395c01cbb223924c5a6ab1d5b245e25cda84c1d5b23922409a90f1cbe21d22252a9121a6620332171a90618a91d7c1e4ba96414e619511c79a91805658b071385a95094ec99479a45a90c98919d629e18a99d99fa9f01a1eea8069a2ba12da27da8dd9b60a141a253a8759c80a1a2a277a75c9c7fa191a2d9a6e49b35a10ea226a63c9beda0f7a183a5f09ac2a090a12fa5359a82a0aba1a9a45a9a53a065a15ba4f8997ba068a164a4e69a96a0cca151a41b9b13a12fa235a4089c5aa1caa20ea49c9c0ba256a3f5a32b9da4a21fa4f5a3799d39a367a475a34e9d77a214a408a35f9dc1a234a450a2e19d49a374a484a2759df7a23aa470a2a49d05a35fa44ba2c79d41a382a4f0a1399d73a231a434a1fb9c35a2b3a3a0a0639d39a2daa315a0039dcea13aa32c9f409da3a119a35a9eb39c29a167a2809d7e9c0ca160a2519d089ccfa01ba2109dcc9baaa0efa1a49c6e9b92a0d2a1209c769b4aa097a1449b4d9bc09f38a1fa99a09b9d9f45a1e899d39a219f19a13899b29ac39e92a0cd988c9a969e37a0ae98569a429e22a05b980c9ae99da59f2a984199559deb9e8297fc982c9d9f9e0d97dd98e29c649e8296eb981f9d879e0f97b898d99c5a9e2d960f98919bf69cbc95c9970c9cc69dc995c9970c9cc69dc9950000288b7d8804920000288b7d880492bb1cf3222b244da6fa1cb223bc244ca8b01cb722442473a8a11b2621a6229ea85219781f6c20b8a87316ad1cd11da6a878115e179c18c9a8db8a1a940d95bfa8ed94329cbc9c85a86797c39d129f72a81999619f61a030a8909aa0a001a2f1a7949b7da16ba271a7299cb5a1bfa233a7e49ba8a137a291a6ba9b97a185a26aa6519c95a141a2eba51b9c46a153a2e8a5a49b4ca1b4a2b2a5499b2fa12ca2a8a5bc9b15a13fa230a5159c66a16ca218a59f9c9ca1c7a2b8a47c9c4ea2cea3bfa4219c3fa221a492a4fb9cb7a238a43ca4299d10a33ca404a4179df9a24fa434a33d9de5a239a45aa2499dc4a22aa459a2349ddea22ea425a2379e8da3a0a4efa1d99ddaa3c3a494a1a49de5a235a4aaa0be9c0ba2aea30ba0d89c74a1a9a2199fb99c86a1fea2a09e829c2da182a2ee9df09b04a157a21a9dca9bd2a014a2929c989b99a0dfa15b9c879b6ba0baa1159c719b2ba064a19c9baf9b809feca0d99a019b589fdea0769a689a359fdba0f299cc99e39e93a077995b99729e32a0ea9809991c9eb79f85981499d09d5f9f4e980999729deb9eea9740993a9da29e9897e498089d6e9e15977298d09c439eda96e497949c0f9e9796d097789c0d9ecc969c96089c4d9fcf946d97fd9b4e9dfb956d97fd9b4e9dfb95000022868f85c78d000022868f85c78da2195520412130a4dd1c24239724d2a7461c2822dd23e6a7491a8b208121f9a7c918d21e08202ca87d15db1bd61c30a8e1103d15a11454a8988fd896279871a89d94a49b729c1ea86096ec9d2b9f68a78a991aa0e6a0d0a7d59974a0a6a159a7919ab8a0b3a0c3a6299b83a183a283a68c9c2fa2aaa312a6839c73a2bba32ea60d9d34a25fa3a8a5909c1ea2d6a281a5fa9bcfa14ca337a5639cdaa119a3d0a4f69cf2a1daa20ca55c9ccca14ea39ea4949c08a258a36ba4dd9c3da2dfa311a4ff9ce1a255a4b3a36f9d13a34ba46ca3859df9a254a4f9a23b9da8a203a426a2fc9c87a2bea3d7a10f9d4ea2b7a35fa1f79c85a2c3a34ca1199daea204a4e3a01e9d5da2dea365a0a89c8ca1ffa2799f079c0ca165a27b9e7a9c49a1aaa2649e3c9c42a1d4a20a9e4d9c27a1f9a2a39dc49cc1a0eca1c89c019d7ea08ba14e9cd99c93a0b8a13a9c4b9c7fa0b2a1009c8f9b41a060a14c9b919aae9fcca0579a5d9a6a9fa5a01e9a629a4d9fa4a0dc99539a279f9ca0ac99359ad59e8fa06c99f1999e9e7fa0e698d299529e60a08b986499f39d33a04698fe989d9dd29f9297ad984a9d3a9fe5963c98fe9ccd9ece962c98dc9c549e7b96b297a89c119ec9952a971a9c429df494d896999be79c4d94d896999be79c4d940000d885108194920000d88510819492b517f31dac1fa4a21e1b1d219a22f0a5af1b1921852254a756191820202165a7ce17bc1d331f54a7a714e41a511c42a7bc0fb415871502a7928978942f9725a7e093af9a929cf6a606963c9d939e77a63e984d9fcba068a6a999b0a0a8a17aa6919b10a17ba202a6d79b75a157a26ba5de9b94a1b4a203a53e9ca5a18ba269a4469ce6a1fea233a4629c1ea241a302a4529c0ea25da3a4a3229c0aa216a321a3729ce3a1e3a26ea32c9cc4a199a255a39c9ceea130a320a30e9cd9a110a393a21b9c6ea1c5a2cea10d9c14a127a22aa1a79bf2a0cda1dca01e9c23a174a294a02e9ceda031a251a06c9c66a1d6a274a0729c8ca110a32ca03c9c8fa0a1a1469e7e9cb3a0a6a1b79d839c7ea1a2a23f9e2f9cf7a033a28f9d219ce4a038a2399d0b9ca7a0e7a1ec9c099c90a0fba1c39cb69b76a0a4a1539c009c76a0a5a10e9cc49b69a07da1119c819b3da040a1879b0f9bf29ffba0c99aa79a769fbaa0f3991d9a229f93a07699f999fc9e86a01299bf99c29e69a000997099729e44a0a1985299269e1aa06a981999e99de69f1d982099c69dae9f05982299ba9d7a9fb897fe988c9d3d9f7b979698349d1f9f18974398f39ceb9e9996f297b29ca19e549626988e9c209e9595cf97449c889d7a95cf97449c889d7a950000b288d284b1910000b288d284b1919017391ecf1f5ba29d1af62054228ea5351be7205922dfa6a41913209d2106a70518bf1d2d202fa70515aa1a5a1cc9a6c60d3112b6108ba6898343927995eda6a89012993f9b4ea64f94a19c819d3ca6e9977a9ec09f5ca65f98799f38a09aa530993ea052a0fea4899980a07ea1a8a4fb99b1a0cba14fa4aa9adba052a216a4c19ae5a0e5a144a30a9ce3a051a1fea2ce9bcfa0f1a190a2269cbea0fca124a21d9cb6a0c0a1f2a1df9b4fa02da1d2a0b09b60a05ba19fa0219ca0a08ba162a0439ca8a0aba108a05a9c2ba130a225a0819c1da1f4a115a07c9c3da158a2f49fb19c6fa1a7a201a0c79c8ca1dba2ae9fc29c6fa1b3a2879f679c14a18aa2cb9e999ba7a0eaa1f89dce9b7ea0aea1ae9df59a21a049a1c69c1b9b0fa008a1769c909ac79fa7a0059cc49ad09fc2a0909bbf9ae49fe2a03f9bad9ac49feda0a89a909a989fe4a09e9a579a719fbba0689a549a449f9fa0ef99209a0e9f71a0b299bc99af9e35a02d996199389efa9fd2983899f99d969f93982099d69d6f9f78980399c99d4e9f4098c698929d179f18989c98609ded9ee6979c98409db89e79978798209d9c9e38975e98e79c639eb0964898c29c489e58960b98959cd89d1c963d97189c109d32959897369b939cc9959897369b939cc9950000d800f60994910000d800f6099491f319c020c5218aa4da1a0c2191227fa5bc192c20572182a53218281eba1fd6a576169c1c271e22a68f14741a631c43a6a0107015421814a64a8301928d93f7a57f918999e69aa5a55c94789c8c9d85a57196a49de19e20a523989f9e2fa0c6a4a4985c9f65a050a42f991fa016a118a4859947a01ba1b3a3cf9960a021a1f7a2b7991ea012a15aa2b699b49fb7a092a1e399589f4aa0dba0149aa39f97a0ada0f499c49fd6a0c1a0c899809fd5a051a0639aae9fa8a053a0da9aab9f98a011a06b9ae69fd3a0bf9f049b08a0d5a07a9fca9a12a0f2a0c19ec29af39fc1a0249ebc9a8c9f75a0b59d969ab59f9fa0bc9d0b9bab9f97a07f9de39a479f6fa0069dca9a619fc8a0d49cde9aa79fdea0dc9c3e9be29f0ca1c09c719bf99f01a1749cf49adf9f1aa11f9c129be29f0ea1059c159b03a018a1919b139bd29f31a1189bfe9a9e9f1da1a49a049b589feaa0659a329b199fc9a0f099939af39eb7a093995a9ad49e7fa04199f799979e2ca0039927991e9ef89f9998bc98b29d939f3b98ac98619d3f9fc0979998449d0a9fd2977398179dde9e55972e98e29c839ece96cc97939c0c9e2c964797539ca99de79561973e9c889dda9586971b9c5c9d7a950398349c719d9e94c4979a9b109de094c4979a9b109de0940000b614e01517910000b614e0151791d519f420bb21c0a3141a6f20c821b9a41919ac1ffb2015a50118f41dd51f8ea5a815331c5b1d9ca550136819c21a71a52710cc13d41442a5f6027591b69226a5298f0e98db98f8a4d8911f9a0d9ca0a4d194879c579d4da44f971c9e8b9f31a42a98a19e06a069a35298959e2ea0a4a22e98d69e22a027a22398a89e26a09ca19998ae9ef79ffca0ae98969ec79f9ca05a98e29e3ea07da07b989a9e0ca01ea02499549e689f5f9f6498879e03a0f89e9f98689ec19f689ecf987e9eea9f179eb899829ec39fbc9dc099339f63a0fd9de5999d9fb3a0f89d209aab9faca0e89d5f9a709f82a0989d269a319f56a0199de999d59e45a0c49c1f9afc9e4ca0a39cf299879eeb9f689c319aad9e2aa04b9c1c9ad49e33a0299ca59a169f85a0079cd99a109f8ba0b79b189bf69e78a09a9bb79b279f95a0339b9b9bf49e85a0b89a109bc89e4ea0339abf9a7f9e23a086993d9a609e10a01e99f999049eea9fd4989c99dd9dbd9fa5984c99b29d939f7598f598759d779f2a98dc98409d669fac97a898199d449f5d97a4981e9d1a9f4c97be98199df79e3097d3980e9db19e47979498e19c759eb9961d98a99c409e6d9623988c9c229e4596c697659ce59d99958596bb9b379d459560962d9ae49bb59360962d9ae49bb59300000000000000000000b614e0151791d519f420bb21c0a3141a6f20c821b9a41919ac1ffb2015a50118f41dd51f8ea5a815331c5b1d9ca550136819c21a71a52710cc13d41442a5f6027591b69226a5298f0e98db98f8a4d8911f9a0d9ca0a4d194879c579d4da44f971c9e8b9f31a42a98a19e06a069a35298959e2ea0a4a22e98d69e22a027a22398a89e26a09ca19998ae9ef79ffca0ae98969ec79f9ca05a98e29e3ea07da07b989a9e0ca01ea02499549e689f5f9f6498879e03a0f89e9f98689ec19f689ecf987e9eea9f179eb899829ec39fbc9dc099339f63a0fd9de5999d9fb3a0f89d209aab9faca0e89d5f9a709f82a0989d269a319f56a0199de999d59e45a0c49c1f9afc9e4ca0a39cf299879eeb9f689c319aad9e2aa04b9c1c9ad49e33a0299ca59a169f85a0079cd99a109f8ba0b79b189bf69e78a09a9bb79b279f95a0339b9b9bf49e85a0b89a109bc89e4ea0339abf9a7f9e23a086993d9a609e10a01e99f999049eea9fd4989c99dd9dbd9fa5984c99b29d939f7598f598759d779f2a98dc98409d669fac97a898199d449f5d97a4981e9d1a9f4c97be98199df79e3097d3980e9db19e47979498e19c759eb9961d98a99c409e6d9623988c9c229e4596c697659ce59d99958596bb9b379d459560962d9ae49bb593000000000000000000000000000000002406da169b1899912f1b1e20aa207fa4491ef0222324e9a7d81daf21252308a8111bb41fdd2134a814182c1dee1d4aa80315eb1a461bb5a8e4927e959891aea89297679cc99c92a8b49aa89e05a07ea8e49b5ba0b9a049a8949c2ca1ffa132a8f39d6fa16ca276a7b19d4da283a3c0a6d59c5da2f7a270a5c49c7b9f669f31a6959bf39cd99cc1a4659cc6a030a252100898249cd69c1215960a9711211569905e196420e12164a07a1c2e24162211a8ae9a47a315a61da2d4188695c79737a280195413f09284a07014da0d4691329f46905697269a2b9d43996a9ff0a0e09cc79cb5a3d8a4f3a25da042a339a489a3089edfa196a32ba1f39a7fa0aaa1109ffe98e89e07a1669d199a389ff0a0839d119a5f9fdea00c9dd29904a00aa1cb9c609a23a022a1c99cc399bd9fdca0199ccf99cd9ff7a0f29b089ab79fe0a0929b979aaf9fe3a0439b7d9a679fc4a0bb9a499a289fc6a0419aba99ad9e82a0d69942992c9e27a04f99f298cd9d999fef989d98909d3f9f69988698869d009f5398b998749ddb9e259865983e9d939eba970e98ff9c349e3897a297d99c1f9ec4963997b29cf89d69968397979cde9d45965e97659cb59d5e951097359c859dbe94d8979f9c8f9d0695fe96159caf9c86940598c69c179eef9500000000000000002406da169b1899912406da169b1899912f1b1e20aa207fa4491ef0222324e9a7d81daf21252308a8111bb41fdd2134a814182c1dee1d4aa80315eb1a461bb5a8e4927e959891aea89297679cc99c92a8b49aa89e05a07ea8e49b5ba0b9a049a8949c2ca1ffa132a8f39d6fa16ca276a7b19d4da283a3c0a6d59c5da2f7a270a5c49c7b9f669f31a6959bf39cd99cc1a4659cc6a030a252100898249cd69c1215960a9711211569905e196420e12164a07a1c2e24162211a8ae9a47a315a61da2d4188695c79737a280195413f09284a07014da0d4691329f46905697269a2b9d43996a9ff0a0e09cc79cb5a3d8a4f3a25da042a339a489a3089edfa196a32ba1f39a7fa0aaa1109ffe98e89e07a1669d199a389ff0a0839d119a5f9fdea00c9dd29904a00aa1cb9c609a23a022a1c99cc399bd9fdca0199ccf99cd9ff7a0f29b089ab79fe0a0929b979aaf9fe3a0439b7d9a679fc4a0bb9a499a289fc6a0419aba99ad9e82a0d69942992c9e27a04f99f298cd9d999fef989d98909d3f9f69988698869d009f5398b998749ddb9e259865983e9d939eba970e98ff9c349e3897a297d99c1f9ec4963997b29cf89d69968397979cde9d45965e97659cb59d5e951097359c859dbe94d8979f9c8f9d0695fe96159caf9c86940598c69c179eef950598c69c179eef957300b91075139a8f7300b91075139a8f691c29216522cfa4431fe8238a2487a8111f73238a2497a9781ccd20ef214fa9bc19431f6c20a4a97116881b721c82a93390699188921daaa796f398d198c4a9839a3d9e6a9ebfa9859ca5a05aa1a2a9409d07a1cda1e6a8189f1fa34fa48fa8839e79a296a338a8149d92a05ca14aa67f9bc29ef19f96a3f795b2935c93069dc98ea68f958d80961c16311efe1fb096dd18f8207322b29c221c6e23ae243fa3e117d11dd61d21a5869a97a403a6819f5f99dfa260a47c9a058e3e9c729d2b9fef8d46974c98e29d12965f9bc79a879cbb97359a679a819d64991a9d169eec9fd79b9fa056a146a1049cf2a011a28ba1709cb0a079a1dca02b9c6ea1f0a240a0879c66a185a2779f429c34a156a2d59e199b5fa09ca1f89d549bdda001a2239e249b49a03aa1fc9c159b1ea011a1ac9ce29b67a060a1b29cc69b53a065a1339ccb9a28a03ea1dd9b779ae19fe2a0fe9ae299399fa4a0299a2999c39e70a09d99fe98999e45a0b3992b99639e0ca0759934993c9ed99f1e9901990b9ea69fa098c898dd9d6d9f5b988098ad9d4d9f2298ae98c59d4a9f3398f798c59d069ff797b3987e9db89e4b9697985b9da89ea3954a981a9d759e5f95cf97839cb49ddf95a1945e99a89a40946b95329b649c53966b95329b649c5396630005114311b691630005114311b69165190e1ff71f02a2601ff5238c24a9a8f51f85247f2579aaba1d522385249aaad11a4a20352167aa31191f1e3d1fb0aa6e076217cd1917ab8f96159735987baa5f9ab39d2c9e39aad09c5ca008a143aac29dcfa1c7a2d7a9ff9e50a311a4dea86c9e25a234a389a7e299049dad9d93a22b937d8cb38ac49c820e1f18281988993014401c101dfd983716d41d731f609a7118391f7920ba9c9617be1e0e20f79f55140c143313aa9f3e8e879d819fa99ea994629f1ba1939c0a97cb9e39a0049f2b96379d049e47a0d196ba9b719c2b9e2197cc999a9a9d9ea698969b719c849fb59b339f4ba0d1a0849bf5a01aa296a0239c1aa124a26da0089c86a1d9a20ba0199c33a11aa33ca0279dd6a167a328a0f79cafa145a3b69f499c12a27aa3739f359c15a138a2ff9d789bada0d7a1189ddf9a40a047a12c9cc19aeb9fcba04e9b8d9ada9fd3a0b49a599a959fdca00d9ad999089f6ba0019ad499df9e27a0cd99ba99679ece9f77996e99fb9d9e9f2b99c5990d9ec19f0799709a339e719f4b99989bc49d089fca98199a769d9c9e06986598fd9c419ef796d597cb9c119e2896b297d59c239e93951598299d919e90952298459de19edd958b97ca9c389e0a958e96f99b299d31954b97379c5e9d58954b97379c5e9d5895891ca71e9f205da1891ca71e9f205da12382da8652825e945918eb1b821c18a57d1d9d23cc248eaa701d8022212479aa651c82213f2205aba418b61d1e1ef8aa6d0d11157f138eaa099201963c9595a83b9436964396b7a0609b579f50a057a84b9e90a2f2a3b3a9e79e6ca343a464a8fb9a239e189fcaa319930d928690ca9c028123105e101d9ac30c781486158999f710a51891190999e0148a1bae1cbd992316a01cc61d939a0316141ca01cd69bb7139b173918419cec085699b89b259c0591d49c5f9e019b5391029b769c679c9594799b6a9c139f7b960d9b1a9c419e43991e9cd59c959f699c889e41a0499f429c4da043a10ea0789c2fa176a2a9a0e49ce3a1fba2f6a0069d6aa2eaa3d9a0be9cd5a146a333a0de9c6ca1c5a2c99f269c6ca1fca205a0d69c2ba28da3e39ff39c25a255a3479fad9b33a186a29a9d809bcca016a2f09c759ba7a0e6a1ae9c109b6ea0aba1009c2d9b72a0a9a1d99bc29a2ca06ca12d9b919af09f11a1d49a1e9a2f9f85a0529a7199a19e39a0bf9918994f9e12a07899ee98149e9d9ffe987598959df89e60984398389da49ee0972298e59c179e5397e7977f9cba9d00967897699cc39d63943e977c9ccf9daf944498269d719e8c957898989d3f9f8b972d97d89c019e8097119a009d099e5997119a009d099e5997000000006400000000000000640000000000000000000000d8133c17951717a1891d8222ab23c4a9b51d4822c823d9aa571c0c21242231ab3c18a51e3d1f55abb80dee18a618f4aa01916091b092ada80594569653968ba1599b48a0f7a0a4a8519e0fa330a4baa97f9c99a00fa14ea5fc98a59c8c9d8da00698d099589b5a9a1c8efc9218947298450e3e151a163a97851020175e186d97c210081820196f97a608e31371156b982b8abc8d7b90b898b892e7948695e9999e8c3398a099859a0a8c5898d799a999428d6398f799089c5f90fe98f79a249e70934d99ae9a619f0e9758992e9a799fc396479b8f9c599f8a99e49c1a9e06a0bb9aef9dfc9e3ea0459c42a0f4a06da0da9c38a153a265a0959c5fa170a300a0da9ce0a165a3c39f929ca2a105a38a9f229dcea22da4279fb59c90a1f4a2ba9d229cffa047a2539d4d9c3aa18ca2919d4c9c43a1a9a24b9d129c22a184a2ee9ca99bd2a003a2939c429b4ba044a1f39be29a969fcba09a9ad29a6d9fa9a0759a959a4c9f82a0f3999a99bb9e4ca057996599879e0ca03d99c0981c9e909fd1989698f39d6e9f8e986c98a49d029f6c983398559d919eca970598209d4b9e9696df97f59c0a9e68952497ac9ce99ddd9423974e9cac9d7d943998479d619ecc963696ae9c3e9e11993696ae9c3e9e1199000000005e000000000000005e0000000000000000000000091406171b184ba1b11d0a2360245baabc1ad4201c22a1a8361642195f19f3a27f134d1a3d1affa87b873b0c1f0db6aaf1931298be97f2a805948897e49644a04c9c62a06ba19da8c29d3aa28ca394a8e2979c9afb9a1aa1309164924f94299b198d408e3790cf999c804309f008fd97640a9913c11419957f0f611593166195810dd415e817fb94650b8b1294133a944d01ea054704039113803f807e80928740803780fd803f8340838b8388859c88f88079900b930b981a8452903e92579dac8d37903791ae9d2095b898f5995a9eb397b09bdd9ca09f2898db9c029f3da0719a029f4ea036a02b9b72a039a15ea0179d75a188a264a00c9d58a218a4e3a00f9d01a20ea4ba9f099d4ea1d4a2199f439e22a33da4d59f3e9f20a283a39d9e939da8a10ba34d9e209db2a12fa3ff9dee9c52a185a2699d329caea0d0a1a79c589b5ea078a1239c179b32a04ea1a99bad9a11a021a1889b4f9a809fa8a0999aaf99ee9e61a01a9a3099969e40a0cc9923997f9e0fa0de992099209eac9f2c992799049ec09ff0989599ff9d4c9fa5986e99aa9dd69efd970599619d999ed896a998289d619e27965e98149d479e8896ed97a99ce69d83961596099c129dee9480962a9c319df49580962a9c319df495000000007b000000000000007b0000000000000000000000300e8511a51087a0d41a9020ee21a3a8381bf620e92168a82216f819821955a3b0132f1a451bf7a8c487ca1218141bab1d949096cb9530a94d925895ea95dc9eda9b2ea0daa076a8639ce3a0d7a156a696930398f497299d4c8c718fb691d897b68aaa8c9e8edd97a7019c09e80b86946204a40ffd1059901e0b580e080e5c8f2203850e1811ad904602fc0a3a0cb491a582de848a885f906b816b827383438773803e819582f381c084a986048707838d827392f5941194e0899a916294949cd98b2f94dc95999d1a946d96e1979c9ea496149a719b39a02699869d0a9fcda0ee99429ed29fd4a0829a259f37a060a12494219ba89c8c9f12992c9b7a9cb29d579cf2a06ea23ea0179df4a19aa334a0129e36a345a4f19f9c9d07a34aa4e89e5a9d63a2fca3b89e239d12a28da3759e049dc3a130a3dd9dd49c7fa1cca2469d759c4da1aaa2f89cd89b8da0e2a1eb9ba69b63a099a1d39bb79b52a04fa1d29bd09ade9fe7a0979aa099fd9e72a0c4994999ca9e4da09a994099a89e2ca057990399409eef9f12999398bc9d4f9f93984f98699dee9e1d981e98149d949eb7971598e09c319e0997ae97c39c3d9ea7961a98b39ccb9e6a962a97059cc49d9c949a95b09b789d45939a95b09b789d4593000000000000000000000000000000000000000000000000c3100b14a713a8981a1c1e21d12292a8671bf62003227fa8cc1516194919cea149151f1c4f1c10a9cd87e71227144dab34945498659952a920922096e396679dcf9c24a11ba2f4a8dd9c37a160a276a667924f9710977f9b808a6e8e8a9044956988188bec8cc7953800d6002f816e93f901070ca80e268e3708c60b1f0cff8cbb06890ce30e828e0000150bac0cc0906681c3815f83d98f68807d81048206876d80ab8075810e8188829b82e48119849e01f6899b8d73933785758d5e91249a7a862f929a93b39ceb9109971f981b9ffc977a99a99aae9f2498fd9ca89e72a0e3980d9dcb9d72a07799d49dfe9e30a0428f479584961699c795cc98ae9ac99a769c5fa118a3e3a0329d7da18ca30ba0a49d96a216a4d79f689da9a22fa45e9fbc9c22a2b3a3889e2d9c2fa17aa2989d0a9ca9a0c3a1cd9c349c99a0aea1859cf89b75a0b4a1399c149c61a07ba10e9cd69b4da060a1ad9bda9b4ca076a1c79b5e9b28a05ca1569b109be79ff5a0e69a1f9a1f9f8aa0ae997099969e2ba051998999679ef19f06991f99f99d8c9f8e982799d09d539f5a987298549dc89ebe972898e29c3c9e83965697cb9c249e64965a98279da59ea2961d99429dbc9e1796a696109c349de195a696109c349de1950000000087000000000000008700000000000000000000002b104613e113aa98111d96222a243faaf11b06211422e1a8ac1401182718d1a060142b1b481cfda8ab8706133b1447abab92ec91619366a93d909d941e95629c499cdea097a1caa8e19c94a19ea25fa6649047967b967f9b6f0042037804a7923c06af09f109af89ea06a70e89105e8de205c00ec80fc08ecb08320c540b8f8c0003db082c0c888e2500b000098111913b83d185b78826900681b6817b8224850000cb807d813f81f7802f8172808f832003d2843e86d593bd821b8d248f749ae38630902193559cd990da95b196cb9c8493a5988f99da9e51962b9aa09b889e8f978f9c3d9d04a00698b89dea9eb89d348cb394d795f692a9939697529930994b9c20a197a25da0c89d90a207a493a06f9d2fa360a499a0a49d74a2d5a311a0759d45a26ea3769fbc9c9da100a3e99d6b9c85a1cca25c9d979c7da1ada2249d679c20a18ba2a39cf39b9fa011a22f9cd39b5da0a2a1cf9b2a9b60a05fa18d9b179b3ea05ca13f9b759a04a029a1849a5d9adf9ff6a0619ac299429faaa0cb995a99ca9e5ba0459904994f9ef09fe598b198df9d629f58989998999d2b9f519834983b9dc09ed5971b98019d599ecf97eb964d9c8f9df0961594c0999e9bcc94d6925e99c99a7b95d6925e99c99a7b9500000000930000000000000093000000000000000000000022101f130314b998ac1c54221d249ca9041b6520562137a80115de171d18eba0d9151d1c521c1da9bd0de91504196eab2891068cfb8c70a94090f7936594859c5d9cd8a0cda1b7a8289c37a130a242a67392779708986b9d2e8638897c8c4694e2022706b6046e8a8a04250ccd0dcf8c2d05bd0dbc0fbd8d1d0aab0d7b0d938c8204e60d8c10358fa302ee088a086891898491852988f290dd80c3815981f8849a802e8150813c805f80758084800485a5021805be066995c200fa81df89ff991081948222833c9c068f3494bf94249eaf940e99489a3ea025982a9c8a9d8a9fa198749db09e85a0cf98a89eeb9fe29f6d8b5d93b394f490c7901b937a951490149c5aa017a2ec9eb79c63a101a440a0799df1a21fa479a0f29ca1a1dca2de9e999c81a1b9a2a19e8d9c80a1f0a27d9edc9cbca118a3639ee19c9da1cca2a69dd39c64a1caa23c9d3a9c07a1a7a2d49cca9ba8a0f4a1799cb49b70a0b4a1509c229b51a098a1019cdb9a40a07aa1569b389afd9f3ca17b9aa899529fb7a0b69989990f9f68a035998399a99e1aa0ea980c993f9ee89f7a98fe98e29dc99f63980099a29dba9f1498f397bc9d42a090972099339e4ea0ad989798889e4ba08b989996e39a459c05949996e39a459c0594000000000000000000000000000000000000000000000000a31000146c144d99d31cae224a24eba9d01add2041227fa8b715001949197da18614c01c161d07a9f986cd12a81afbaa30929594d995f5a80691c1941f95fe9c4d9b4ea003a195a8f39c1ba248a305a8de93e3993f9a1ea01f8abc8eff912d976b0112043202b18af105d10cdd0dc8893003c00d880ff58c1808680b5f0b698cbe03a909b20a2f8f5f00dd0259015f9179829284de853b8f4981168328846a86e480da82d6836a821083598463838f836e000688508b869448860087408e389b10011089668f6e9d0f8e44939c94169fa89419985d99a39f33983e9dc09e4aa14d989d9dd89ec1a0c897a09da99e759e9589aa9256947c9081911b95f796ad91eb9b09a1aaa2d79ec29c45a1ada2289f9d9ddfa218a452a01e9d62a2c6a36a9f9b9ca6a1e7a2829e869c72a1bca2129ec19c5ca1bfa2d79d469c33a1bfa25a9d3f9c15a1b9a2c39cd89bdda07da2679ca09b8fa0e2a1079cbf9a05a026a12d9bd1990d9fc3a0119ad299fe9ea8a0049ab699da9e7ba0fb99c699969e60a09b996d9aab9e4ea09d998b9b529e34a06199209afc9dac9ff598c9986d9d259f4298d198859d309f5498cb98669de79e67986799709d949ed0971898319d989eda952998c19ccd9d6a962998c19ccd9d6a96000000006900000000000000690000000000000000000000a81024148514639a371c0122c6231aa9c8197f20b5211ba892152219601915a27813621bde1b89a8b9064b15791652aa1a927296bf9570a9c39297961c971b9ec09b89a047a182a80d9d0fa28ba398a87f97ca9c2d9d8ea29e843b88d18b49987e08100cb90cf78c9006b70ddb10a68e5d06160e0710c68d6d09010d370d4f8d55025f0b370da7904e0172056f05c490b48110820f83608db2805581d182ff83ac80e1812e82398223817c8312843b888480cf85468a6197cb84cb8c438f7f9c5f874a905792689d5690dc959297c89ed1939299739b2ea07898c39ccf9d5fa1bc98759ef79f6aa28c97a19dfe9e219ff5889093e994ff9082919794ed962992d599d79d44a09d9e979cf3a024a2ce9fd89d04a315a4e29f869d99a206a4089f009d71a2fba3b49e219d28a294a3319eef9c93a135a37a9da99c65a167a33d9d8a9c39a113a3609d199cf6a0fda2989c639cdaa08ba2809c459c98a0d9a1f09b0b9c66a090a1839b359b1ca043a1d89a849add9f06a18c9a049a779fbfa00d9a5799be9e6fa05299b998fc9d2aa0d398ec98fb9d06a0e198b098b79d949f9d985c98879d6f9f43983298579d0b9f1e984a986b9d279f3998a196b09cec9d9b98e596fe9b0d9d7f94e596fe9b0d9d7f94000000000000000000000000000000000000000000000000961023148514fe9ac61b6821ab2203a96419a91f7d20cfa7e5141f18321820a29912f718081999a7060c5511b01231a97d8abe90f88b1fa8b891e794399567a141994e9ec49f09a8a99ceaa1e8a2e7a8129a799f8aa034a5d9907b95d897839fc501e1026103e191e305c40dbb1046934505240f2c1046937509a90d460d82906304380c410e1492b000f50610042994f28496884a8a6790e082e984c4854b89b5800d83a484ee841682ca847f86b68b95804287248b6493e588a38cb38eb994e28bfd92f594939ac290ba9619988a9c2491c697c998689cb7937a98b399d99a5b97179c769dfa9d1097d99c059edc9da194d49a279c8e996297fc9b159d3b999e9b38a0a8a19a9d079d23a280a3b49f309edda241a46ba09a9da4a228a4bd9f359d0aa2baa3309f1d9db5a146a3a79e6d9db2a118a38f9ed89d70a1d6a2dc9ddc9c1aa168a2049d079cc2a0ffa1689c4c9b60a0b3a1889bb69a14a063a1829a999a1aa039a1689a209a9c9f01a1f1993e9a4e9faaa0c499e899049f46a063994d995a9ed29fca982b99dd9d4a9f8598bb98639d0f9f40989998099d839ef1971898679c8f9db29686971e9c4d9d7396d196fd9b809d6495b395189bb69c0e963595a69a239c20953595a69a239c20950000000081000000000000008100000000000000000000004f10ab1332144d9a281b5221db227ea86d19fb1fc1208ba7ed14ac18ba1849a27e13d318d21960a7d204b30a3b0ccaa878902395a1947aa73592dc963997e3a18299659e9a9f5ba7419b77a1b8a287a8c39ac7a0bca1f1a69895739bb39ce5a1c382948401880f93c40a1212f41353984b09c5115d13aa96780cca0f610f02933405a50d69102095d400ed04de039b9567841f88aa8ab093028308840686bd890000c0818184ea82eb818d828e8547899a809c850d8a1d925289ec8a8d8ce7949d8a15909e95809cb89293975599a99e22939c9a159c6e9d3a950c998c9a3f9b8f99509eb39f799f309b25a027a17aa0119bc9a00fa221a02299db9feea0439fef96ac9b909ce09bbf9a3fa0aaa1c69de99cd2a133a33b9ffe9c24a25ea3289fb79cb3a12aa3809e8b9c86a1e4a2269e839c45a194a28e9de29bf3a02fa2189d349b9ba029a2af9c849a37a027a2e49b399b13a05aa1d29bdc9a259f8ea05c9a8d9af89ec2a0229a919a429feba0cb99c499d69e80a09b998a99709e1ea023998b99609e0ba0f3983599339eec9f8a985699469eef9fae98d498de9d8a9f1f988998b19d389f81973798459dc49e06978297ea9c649e1f964c97be9c089e2d973e99499d989e10983e99499d989e1098000000009700000000000000970000000000000000000000750e1b13921385996518601fa520afa55918d91e3e2038a6ae14b618a51820a36c12d018de1815a7130b01114e12aaa89c8c389378915ba7b791bf943d948ea134976d9ce39c5aa6699b6da042a100a8819c23a2afa3fea7c49b40a13ea2e1a5eb98e19e4ba0e4a38794f09a679c7da19d036c033f0aaf9e4608b3100111d69cb3804c02d8828a9bed86f39008937e996c8a4a903c926f9544856588e68adc8a3281e9819b8353816a868387f8879c8c8789f5907993dc9a738f1e94cb95179f0994a997ad994aa08794ce996d9cfca09495769cc79d36a0bd9586999d9a939aef9a7e9f5ca09ca0a49cc2a1b1a217a11e9d84a2dda309a1279b9ca0cca1da9e3c96f0993e9b2099319b77a093a1999e6b9db8a2daa344a03a9d01a239a3ab9fbb9c8fa1f1a2329f4d9c60a1c9a2ba9e119c37a199a2199ead9bf4a059a2769d789ba7a01da2ca9c209b5da0cca1649c0b9b14a074a18c9b9b9b43a0a5a10c9c579b17a03ca1809be69ab39feda0b89a7a9a259f99a0b3996099499e28a0e198e798e59db69f7e98c098a39d589f3998bf98809d019f1e982c98129d749e5e97c397fb9c5c9e3b97d597e49c309ef696dc96669ccb9d69963b97fa9cde9e29979597989cf89de7959597989cf89de795000000000b810000000000000b8100002b08390d510cad8f2219b51ff820eca4401c0922ed23eaa72718f51e4820fda591168d1a9e1a45a3d5135319721a9da6280a8610c41138a8f98b9c942e94a0a624922395b29504a2ed97eb9c169e67a6a89a65a04ba1fea7089c69a1d2a2c6a7539ca9a1d4a2cca6849aada0cba11ba53c989e9dff9e53a35d938d9a1d9c7fa13a913f976b98189f928d8a957b96959d198b2a953a97039cad8cc5938b9574985c8a1f8d4f8e0e8f758a098cfa8c268d9c8ed196a698f299f3918f99a49a609e0596be9a389cd29f7996a89cc09deca07898c49d509f14a12399579fbba0a9a1e09b1ba014a13ea17a9ce1a028a291a14e9c6ea1d8a26ea1b69c48a215a4b5a1619a69a0b5a1b09ff79304986999bf96459b78a0cfa12d9e909deca216a48ba00f9d30a2b7a38c9f959c8ca11ea38c9e8b9c97a106a3179e789c4da1c9a2759de99bdea05ca2ad9c729b5ea0afa10b9cff9a34a05aa1969b119b9b9fe5a0ca9a179a1e9f6da01f9ada99d19e56a08f999c99a69e50a0ec9875997a9e2ba0cb988e99619eeb9fb9986599179ed09f8f982399f49da99f7598de987f9d019f29985d98f09c6a9e91970398d09c0d9e5e971698b89c0e9e71978f97609cd89da7963594b199a99b1196bb98439ee79fbf98bb98439ee79fbf98c188fe944196b295c188fe944196b29586194d206b215ca5d21d2a24e92430a8c91c17234924b8a8171b26215722b8a892193b1f9320efa82415e11a5e1cd4a80f0e0b143112eda899926a985195d8a88997a69c589dbaa803998f9e1fa0a6a8989a23a026a135a8879b0ea11ca269a7fe9bbfa1dda29ca6a69b4ea1aba276a5769a71a0ada186a4d198e09f17a103a4c998279f4ea05fa2a295019d3f9e41a1ee91199b789cb39fb6910e981299169b088c099157926192828fb390b1917b92d390e0983e9a289cf6949c9bde9cac9fd897f69dde9f98a116997a9fb2a06da16799ba9f99a000a1ec9adba0efa164a1399beca058a2a9a1469c2ca196a274a2439d0ba260a394a294a0c4a15ba37ba199a0c3a0f4a1e79f379de2a15da33ba0b99cb1a144a328a0959ce7a119a3f19f539c3aa168a23f9e849bdca040a25d9d269c17a15ba28b9da69bbfa0f2a1e39ccd9b84a09ca18b9c009c89a0a0a1829c649b63a077a1109c959aea9f56a1109b56992f9f32a13f9a7d99f79eada0d6997499849e49a076993e99469e42a0c8983799419e1aa095986799519e0aa0c3982d99279ee39f81986899199ea09f83987699c99d1b9f49986499ad9df89e3498fc988c9d259f6798dd98bc9d6e9f7f985896479b149dc596ac98b59c17a19196ac98b59c17a19196cf89259419950896cf89259419950896da187f1fb520b2a4cc1c2d232b24a4a7821c0022502310a8dd196a20882158a8e718f41e3320b1a8bc16c61c4a1dbfa821113217a31920a9818b6195219896a89794fc9af69940a87498f09d629f1ea8bf99b69fe7a0c1a7a49acaa0a0a1f3a6b09b00a13fa288a6ed9b0ea180a2a0a5829c8aa033a10ea5da9aa9a097a051a4de996f9f8ba094a36198019f3fa0f6a2f797279e899f5fa24697659db69e00a239987e9dc89e9ba1e697b39d0a9f95a18497839dee9e79a13d98c59d359fbba13698f69dac9fc0a11099019f76a0c0a1dd994ba07aa11ba2b49a8ea0c3a12ea2f29b87a074a12da28a9cdda15ba357a2449c24a270a3f3a1009dd9a10fa328a18b9cb6a10ea441a1cd9cb6a18ca371a0649c68a1b7a245a05b9da0a205a438a00d9deaa162a3769f2d9dcca157a3099e6b9c1fa157a2079d389ce5a01ba2c09cf59ba0a0d6a17d9c5d9b82a0d2a1b19c199b76a0d2a1639c5e9b2ca09aa1129bcd9b9c9ff5a01b9a1a9c6d9ffaa0ba991b9bfb9ed3a0019ac29ac39e63a04e99199a3d9ef99fcf988a9a089e809fa6988f9b609df69ee497039a209da19efd97f298eb9c369e39975299cd9cd79db2965d9a829ccf9d7e960f997f9cc89de3967b96d29a6c9c1296fa97d59c259e1498fa97d59c259e14986d890391c291a7946d890391c291a7940a195b1f9e205ca43e1c4f228d23d3a6d91b6521bc2234a79a190320ff2068a72917231da71e95a79415b419f91ac3a7050ac8122a1142a87a9037969e972aa82895b09bf39bbba7f5974a9de99d8ca73598479f1d9e52a79f9a4fa0aea0c7a63a9b3ba1b4a24da6499cc9a1dba2c0a5559c8ba1dda283a56d9ccca1f5a2b0a4ae9b5ba196a271a4e49ac8a0fda123a49c9a6ca05fa1a1a3e999f29fdca0f7a2be99cf9fbca0d8a2da98b79ff3a0bea28a9901a055a18da2ea994ea049a194a2009b45a098a13ea2b09a6da08ba11aa2f59a87a06ca115a21f9b0fa173a20fa2df9b28a186a228a24b9ccba149a389a1fc9bb7a0cfa1caa0f09bfea07ea2aea00e9c09a286a3c9a0e89b17a146a25b9f4f9cfca00fa2349eef9cc9a107a37f9f689c52a191a2399e0c9ca9a0cfa18b9d5c9b7fa098a1b19cb19a3fa076a1bd9b889a1ea049a1399bc49a12a02fa1559b4e9bd89ffda0109b2a9b719fbba0e19ada9a289fa9a0889a7199959e76a0ee9934992b9efa9f34993899039e9b9fb098fb98ad9d249f4c981d998b9df89e12986199649da79eeb971a9a0c9d779e69973e99eb9c3e9eab97be98d19c429e13973d988f9c1a9efc96b097899c039e159847984f9d1e9f4f975798be9c269ef9955798be9c269ef995a405250330036e81a405250330036e817f0e72110711069723194f20302166a4d31bde21212379a66619751fa52006a73d18971d0f1f10a7af14151be61ba2a7bf0ccc0f8e0ac1a7508fc896e69620a7f18f5198409899a4d39281948b95889e4a95da9c849e1ca4a8990fa0d2a0ada56a9ad9a092a190a5279c5aa1a0a297a5179d3aa176a286a4209c05a150a2b1a4439c94a07aa1a1a34a9a5aa08ba1eba28397289ede9fe7a01b96fc989a99a49cb4960e9d7f9e79a012987b9ef89fbea18f995b9f48a056a2759a3ba03aa1e3a1709b22a18aa28fa1f49b07a147a21da1e19ae3a003a278a1d99a76a07fa118a1439ba8a0a3a1bca0539c1ea13da26da0159c56a182a24fa0e49be6a0bca1679f1a9cf2a015a2159ff69a9ea0f2a1649e729ac79fe0a08f9d559c93a1c2a2ea9e829c83a1bca2f29d249cb1a046a2459d039c3da077a16c9c6a9c26a038a1469c5d9d32a02ca1f09b4d9c37a058a10b9c649b06a01ea1fb9ab89aa19fd3a08a9a689a709fb8a0239a8f9a7a9fb0a01a9a6a9a199f95a0a299299ad89e85a05e99319a9f9e51a0e698049a5a9e44a083989a990b9e1aa06d98ff98aa9da79f31986f98389d2b9f18984198059d829ef7970398a79c069efa97de977d9cc79db5959a967b9bad9c4a955f959e9a199c35955f959e9a199c3595a002c302fc024a01a002c302fc024a016a02b608cc0a118cbd0df7133714389838171f1d261e43a30e18881e841faaa50d17be1c811d37a65515541b8a1c7ca649101e168a1739a6ad822e883789b7a5fa88bf91b8943ca34d89af8df68d92981b8c048dac8d3e8f399088923294b496e88e5098dc9a5e9c58948698f4983c9c8091799b4b9d549daa96749aec9a609dd297789d059fbe9f1098979e76a07aa0b195df9d6c9faa9f4697719aee9aa49c3c986d9d619fdd9e5c99559fdaa058a0179a18a015a1baa0949a44a060a1d5a0999b8fa0b3a1e3a0459be2a041a2e2a01c9b7ca079a1a5a0499bc2a0faa14da0779b5ba044a1de9ffb9921a04ea1449f6d965f9de79e989cf98e2594a194219335902e92ae932c914498219ddd9ef09a419b49a023a1619d5a9c4ba135a2e99d109cada019a2d39c159b7aa00ca28f9c7c9b3ba03aa1279cca9b63a05ca1769b909b4da071a1a29b209b22a038a1559bb49a8a9fcaa0849a349ae19e65a07499bf99909e42a0fe983899459e2ca0b69840993e9e24a072983d992d9ef49f70980199dc9da79fe7970499c09d679f8097e9988e9d2a9f3d97a4986b9d1e9f61977f98569ddc9e319768982c9dab9ef8964a98019d719ec0960898ac9c409e15968397b19c429e52971f963b9c579d5e951f963b9c579d5e958c025b024f036b808c025b024f036b8025016402f006fc8cee0caf1228130499ec15501c751d79a28d164c1d941ec6a42d15651b101cdca4dc108e162c17b4a30a830686908609a183899d918994f8a2908dbd954a9813a29f92dd97c6972aa09895a19c839d2ba31f986e9e01a04da4cc988c9fc8a063a492993ea0f4a028a4179a4ca011a1c7a34e9a6ba0aaa16fa3649a0da0dca0afa2359a01a001a1e5a13099519e0ca070a0b798799c279dbf9d7f991d9e5f9f439f429a9d9dc49e339fab9a819db89edd9ec498089db39e5f9d08984d9b629c4d9b9099319d779eb99cfe9a1a9f3ca0919e119b22a0f0a06f9f6c9b38a0e5a0769f629b1ba0f7a03f9f909a6d9f97a0649ec198b29d309f969cba973d9ce29cdf992598c69c549e179ae698f69da79f279b149a689f44a0869c479a389f68a04a9c999afc9e6ba0e39b9c9a3c9f8fa0499b839a439f9ba0ef9a3e9a019fbca0d4991c9a0a9fa1a0f699069adc9e67a0e799a499779e34a0589921992c9e02a0e598e698c69d679fa398f298899d289f4298de987a9dfd9e2a98dc98759dd89e19989c983e9dbc9ea3975198039d9d9e4c973298fc9c879ef3963f98f59c579e88965a98dc9c2c9e6996e697b89c249e6e96d397a99cd29d7b97de96639c6f9ddf963e98749c769da3943e98749c769da3940c05b70df10e85920c05b70df10e859229186c1e4e2090a2401aae20b72108a55f19ec1fcd2010a5bd17a11dff1ed2a4d5152d1c001ddda47c143a19911a12a53412cd173c182ba57a084a08538954a5bf8fb6972e98fba4f492089a9a9bada41d95729c9c9d6ba4f496759d829e09a4e696869dd69d1fa32698059e5d9f87a2a198bf9e33a040a2d4983d9fe69fcda185991c9f59a0aaa14b996a9fc1a0d0a1ce99ad9fbaa046a1069a419f6fa0d2a0af99349f8ca08da0fa99209fa0a040a0ae99f79e38a002a0f499879e13a07e9ffc998f9e15a0359fc499ae9e40a0cd9e5a99839e1ca0649e71998c9e10a0819d1099899da99ed09c7499349ead9f1a9d2b9a929fb6a0c29d6e9ad39eb2a0299d229c4a9fa1a0e19c8e9a189f5fa0a49cea9abb9ff3a0ba9c2c9c93a065a1f29c1b9b03a0e3a0259c9c9a7b9faca0a19b849a819fa8a05d9bb79a6a9fbaa0e59a4f9ada9e81a01e9a7c9aa89e89a026994b9a939e76a0f699359a629e5ca090999d99029eca9f1699ea98a09d1a9f6f98a6986c9d059f18986b982b9dd89ef4974a98249ddc9e08986c98209db89ef1977498069d8f9e76972998b39c2f9e109780975f9ce39d299606973b9c959d93955b974c9c829d3096d7976a9c8c9df49546988f9ca99d31970896719bc49cec960896719bc49cec96ec0abb154517c98fec0abb154517c98f04186c1e0b20bfa1f618082094205ca46618b21e34206aa4ef16371dd61eada45f15ac1b721ceda43312f6182d1affa4e50c3a137612ffa44e8806915f94cda47f8f68968c95a7a40e932c9bbf984fa42294aa9b4a9cf0a3d295b59c1e9ed3a31697ba9d329f4aa32898259e729fb8a27a987f9ee39f26a2f8983a9f8da0bca11b99c89e27a057a12699209f39a018a138994d9f7ba009a12199429f5da0aea05f99bf9e1aa012a01699f19e5ca0b09f5499ad9e14a0189f3899f09e5ba0159fff98d39e2fa0f79e9d995a9ed29f399ecc99699ef89fe99de599959e02a0999d129a0e9f49a0e99d9499e59e4da08e9d5c99149e7c9fe59c1a99cc9d4f9f7c9cfb98ec9d6d9f559c3b99959e42a03c9c2499ca9e5fa0829c279bc49fa1a0769ccd9ba59fd2a02a9ca69ba09fc7a0339c149c279fa8a0999b7a9b9f9e4fa0509ba29a4e9efa9fb19a019bee9d8f9f0c9a289a1e9ea09fc499f499ce9dbd9f0599ff988b9d8f9fe098b098609d5e9fdd98cd98399d0b9f7a980199199dd89e24980199ed9ce79e70978e98039ddd9e6197ae981e9dd29eb097bb98d49c539e4297e598cd9c4f9e0e976f98929c029e809689973f9cfd9dda954497099c7a9d82953696239ae69b93947194cd98fd997e937194cd98fd997e930000000000000000ec0abb154517c98f04186c1e0b20bfa1f618082094205ca46618b21e34206aa4ef16371dd61eada45f15ac1b721ceda43312f6182d1affa4e50c3a137612ffa44e8806915f94cda47f8f68968c95a7a40e932c9bbf984fa42294aa9b4a9cf0a3d295b59c1e9ed3a31697ba9d329f4aa32898259e729fb8a27a987f9ee39f26a2f8983a9f8da0bca11b99c89e27a057a12699209f39a018a138994d9f7ba009a12199429f5da0aea05f99bf9e1aa012a01699f19e5ca0b09f5499ad9e14a0189f3899f09e5ba0159fff98d39e2fa0f79e9d995a9ed29f399ecc99699ef89fe99de599959e02a0999d129a0e9f49a0e99d9499e59e4da08e9d5c99149e7c9fe59c1a99cc9d4f9f7c9cfb98ec9d6d9f559c3b99959e42a03c9c2499ca9e5fa0829c279bc49fa1a0769ccd9ba59fd2a02a9ca69ba09fc7a0339c149c279fa8a0999b7a9b9f9e4fa0509ba29a4e9efa9fb19a019bee9d8f9f0c9a289a1e9ea09fc499f499ce9dbd9f0599ff988b9d8f9fe098b098609d5e9fdd98cd98399d0b9f7a980199199dd89e24980199ed9ce79e70978e98039ddd9e6197ae981e9dd29eb097bb98d49c539e4297e598cd9c4f9e0e976f98929c029e809689973f9cfd9dda954497099c7a9d82953696239ae69b93947194cd98fd997e93000000000000000000000000000000000000000082010000a30110016b01b9967a0c5f12a914aa9cb609bb148a174a9e2809260eb30ffe9cda04c90c0b0f679ce80fc611ab13b79cd881c7020584299d998cdd902390359afa906b94be945e98c30101035c0531950000f40c0409e290000065010000788500000000000000003c060d091a072b8d790d1a112f13878fba01910d2410918d8a004b01ef05e18332806583308278870000000000000000608c0c8e3c932b98c392d29cc09e68a503864f9f97a12ba47894ca9a029bae9d9d970695bc985598968ff797cc99349c52927c98f199dd9b119189976e988392408e0297a9998f908e8e079470963e950000f58b1f92a590e8898c8c0090e391278af58ce18da991fe8b519092901694dc8241924e94d59496902b96c09628957d958b9a8a9c57985e986d9d0a9f369a2c9a839e05a0249b9e99ea9e6aa0a49b349ad59e5aa0769b3199a59e60a0019b9d99619e1ea07e9a7b99229ea29f2b9aef98959d3d9f29996298649dfb9eec98c498699dba9ee398ea98799dc39ef298e7986e9dbb9e26995c98129d369efc983997809ca59d869821972f9c419dcf97d896d59bb79c52964896c09a689cae94d0941c9a1c9cd0938e958599cc9aa29193956f9beb9cb69451950b9b879c4696d697629cf99d1b97000000000000000000000000820100000000000082010000a30110016b01b9967a0c5f12a914aa9cb609bb148a174a9e2809260eb30ffe9cda04c90c0b0f679ce80fc611ab13b79cd881c7020584299d998cdd902390359afa906b94be945e98c30101035c0531950000f40c0409e290000065010000788500000000000000003c060d091a072b8d790d1a112f13878fba01910d2410918d8a004b01ef05e18332806583308278870000000000000000608c0c8e3c932b98c392d29cc09e68a503864f9f97a12ba47894ca9a029bae9d9d970695bc985598968ff797cc99349c52927c98f199dd9b119189976e988392408e0297a9998f908e8e079470963e950000f58b1f92a590e8898c8c0090e391278af58ce18da991fe8b519092901694dc8241924e94d59496902b96c09628957d958b9a8a9c57985e986d9d0a9f369a2c9a839e05a0249b9e99ea9e6aa0a49b349ad59e5aa0769b3199a59e60a0019b9d99619e1ea07e9a7b99229ea29f2b9aef98959d3d9f29996298649dfb9eec98c498699dba9ee398ea98799dc39ef298e7986e9dbb9e26995c98129d369efc983997809ca59d869821972f9c419dcf97d896d59bb79c52964896c09a689cae94d0941c9a1c9cd0938e958599cc9aa29193956f9beb9cb69451950b9b879c4696d697629cf99d1b97d697629cf99d1b971400000099000000140000009900000041007403e1017c8be008930dd10d5f980511ef18931ad3a0720a3c0c7a0e289837069809a909478d921118137a12dd974b090e0f8e104ea2ec88128d288e2f97758dda8d0f8d8d8ccf05dc0470050d89100879050000208203015a0000005a8000000000000000001600000000000000000000000000000000000000000000000000000000000000000000000000000018800000000000001284da8b0a8d2c9cd904fb8c34882da43b88ca90139220989187328d6d8fcf88239050937c94420b8c92ef9727984d9d658eb890ee90d89dd2825d830382e28d108b6f8c7b8c348e3c941b99d199609c57904d976f98ec9ccb8cd18dbe8d3e89748197803380c90a50024407be0492097b8a5b903892e9950c08430c290def880f96ed9a649c6e98f297659db99e6e9b0699859dd19e709b9b99e39e4ea04f9c549aaa9fcba05f9cf89a299f55a0f19a7799ef9e33a0e59abc98039e5c9fc2995d99589d799efe980099ac9de89e70995699789d099f5f99d698d99da39f049a1999d69d549fbc99f898a99ddc9e40991899589d379e9998c9994b9dea9d5e980699699d859e519860982f9d919e7b97e098059d5b9efd947f98099d2f9ec1923898e79c269e329583982f9d309e1f960396319b459c52940396319b459c5294c18728844f86c383c18728844f86c3830000bf87498f3588c104df09cd07a8998015291d611f10a40d18231d451edea1540d93105811dc96650e770b470d6398968164862f88bfa2e0891f8ea68fa797cd8dbe8d718ca987d3825682278155801d010000000000008600000000000000128000000000000000000000000000000000198000000b80258097807780158000000000000000000000000000000000000000000000000000008281a482c38d188034807b80a3822e817a814481bf810000ec81928862804092d392a494e9092f919c952596219ba88d2e929992109c0f876c8a368adc8d0d8c6a8ec78e498b7f903c98fe986d9b438f7a952197d99bfc85a886bd8d5b8aae0095038c017a0ce805980a8a075a0c82899b908c925397ca07b30c4f0e2c8f4694e498169ab3996099eb9d339f7e9c569a0ca012a1459d8a9b77a056a1089df69a6fa090a1909c219b6fa076a1289c3a9b41a02da16e9b5f9a709f82a0d09acf99209f6aa02a9b2c9a5c9f95a0139b3a9b559f7ea0369b959dc89e939f95994b9b649ed69ff2998c9a949dd99e8c994d98d39c269e93980a98249ced9cf696eb96e49bcc9c1a96d896169c089d0995ec978e9c8f9ded930198009d7e9eba949598499dd89e42964c91b497e3986d921b98a09c699d71961b98a09c699d7196c807670d4a118795c807670d4a1187954582660158841e926f18471e0320c6a56319451fb620a9a6310d478219028b950502e480d4003e86660176007501fd855a00580021806782b280b6817c836582dd8000000000000067810000a7800000000000000000000000000000000000006a81e180a4803b813d802c8029808a8100003c804b80b380000048803380a780000000005c80000000000000000000000000000014800000000051802080868000005c00a4009a8000006082fb828901a881538a8f8d830c059057919592ed0e9080aa80500731957f0e0d117b110a88c503fb047e056581cf8018812f81b783c2859884fc83fb8c5486e78c1f8ea995d4834085b684658de3004004d403da809308e40cb50b8384418a248ed19080943d0c651052116a8e9d94e399769b0e99139aef9e33a05a9c239b7aa09ba1549dc39bb1a0ada1569d959a85a0bda1099d289ba69fb2a0149c439a9e9fa8a0d89b8c9a4e9f69a0439bcc9a399f54a0449b4f99d29e70a0429b93997d9e0ba0ae9a4d9a679ea09f839a8899379ec39f0a9a3b99e29d3a9f6399d9986e9dce9eb9980398e49c759e2198eb960e9c549e68950197f19b569dc1942b98a19b849c1a92b897669c9e9d2c952198a39c719d9d95ed971e9d2f9e1c961e982b9c1f9da6961e982b9c1f9da6966182000043800000618200004380000025000d805e815b80b705670b2a09ce95e9104c19b71b9ea2c3074b0a560bbc95480067807000388540805c818e81e5853680d181bf803d843382da82b184da829e800000000000003d8100000000000000002a800000ed00000000000000000062005b007d017d82408364824883088300003c805880b68000003f8037809380000000001c80000000000000208000000000000090000000000000000000000000000000000000008580f281658383003c82f489a58bf409d689178f65906b0cfc812a8b578d07914781a682688401857881a085898460005f80f0816a828584b0869c874b88698d5183288dd08e0e945d82c889ba89dd8170021403d102f6013306290a2b0c05864b85928d6c8f4294540edc11611249931397319c519d809bb29a1ea010a1399e0e9b4da046a1619e8f9b94a0ada17c9ebb9b7fa089a1039e919b1ca0f8a0d59c359b19a0e5a0079c249b09a0f4a0f09b589ab69fd4a03d9bf59a719f63a0fe9ae999599fa9a0e79a4a9a0e9f47a0799a7f99b99e51a0049a6199619eef9fd99919990f9e7f9f6d999598a29de69e16994a984b9d889eb2988698679d909e34983e98609dbf9e63961898e39c089e28953a96d89b1b9d3b95a5986f9d8d9ed0984497609c5f9d06974497609c5f9d069757830000e280000057830000e28000000000000001810000b806210c490a19962c13e41a051daca33e0b600ea3102a984c80000000000000000000000000000000006680258066808480f481b0814d84b5018a0000004101070500009a0000000000bc01000028800000000000000000318083805c80db809d804c815781438400008d80ee80fe8000002e807880a8800000000000000000000000005f800000000000000000000000000000000000000000000000000000000000000000000000000000000000008c8192852e8a8e81f282a98bde8d449004814982b6827a8325814380ac8056800000598035809b8186828f809b824b8ee883f9009c04a595b9816a80ce89dc8c8b018e010000ab80c506d60805090f872985fc8c688eef931f0a11096c0c9d92eb95d29b349d7e9c969af49e6aa07b9d349b42a05ea1ec9d0f9c6fa1c0a2a79e7c9ca5a1f0a2129e409c1ba14ea2059d799bc9a0fca1c29c579ba9a0f3a1be9c829b78a089a1d89c6c9a07a012a1469cd7993d9f7ba05d9b709ab49ee29f719abe998b9ee09f4a9a0a99229ead9ff699169a239e219fe699ae99049e549fa499d598859dc29ec998c198ff9cef9d38976598a59c869df3946a98d19ce59d2b94b198129d799e3c96f397279d649e01999e95f99a139c43959e95f99a139c4395fa8147813b80be81fa8147813b80be811d80118086802101000000000000000014808782d38090854b80e58015034186000000000000000000000000000000000000db80bc80498056803782f282c2855000270000005d01dc01da00ec011f0000008e001a00b70000000000000000001c001e80460095809f80dd802281a28334801800770018000000100020009680000012800000368000000000dd80000000000000000000000000000000000000000000000000000000000000000000000000f68000005200c3800482198880000000f985008ce4860000dc840d8870830a82b28378834a82c2828287fa89e9888d902c94d694ae97118edd934294d198fc93589532959195658ea197fc98f099538e169142911a947e8dc29104931f9778872184a38137942198dc9c659e7c9cfc9b64a08ca1499e049d14a139a2f89ea89c3ba161a20a9f899cf6a0fba1d59d119cb8a0e8a1329d1e9c1ba134a2149d309c67a05da1099c589b1ea019a15f9b0a9b40a04ba13a9cf89ad39fb2a0c89bd599b79e08a0c09a9099149e319f2f9afb98fa9d6f9fe099ed98d59d1e9f9b997398829db39e2c994d984e9db19ecd984198199d939eb898b797e49ca89e5b98a697d19c5b9f9997de98249d549fc1978899b89d39a15f986499fa9d569f69986499fa9d569f6998968114815280e280968114815280e28037003c00a480b48000000000000000000000fb80c2804a823a80c3804003568500000000000000000000000000000000000000008b8000007d80f48274837f8652805480000035016b8062808f00728300002480c080b18000000000000000007800158045004180748078807080278200004b808880a480000000003080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006a803a829185a180768000000000000000000000000000000000fc81e182aa0006865b835c82e882568f86938d94af966e8e6594c29428993888708c2c8e700b00000000000000005b8400006c8200007284538fec916794e988ba8a008ba790af967e9b339d2c9be89a41a047a1d29e5b9ccda0e6a1ae9e4b9cd4a0f1a1e59d299cbba016a2619d649c73a05aa21e9c8d9cd4a00ea2b29cde9ba7a017a2a19c559b34a024a1cd9bfc99879fe5a0d39b4f9abb9e43a0ed9a1c9acd9edea0af9a9799119fc9a0cb9a139ab69e05a04e9a9c98c69d2b9f5d998398ed9c039e5a984098e59c2b9e52986b98a89c8e9d0198ee96199c2a9ddd961697169cf89c4e964b98f29c1e9ef4960e9c729efb9f6399ba990c9d3c9e0599ba990c9d3c9e05992b830000c28000002b830000c28000002a814c8098826a8070817e801c808f8cfa0ba61121155ca14703c704050aae940000000000000000000000000000000000000000000000001881428512842288a98143800000af00e784718286815b0100007780c080280000000000000000002c8066805180ed80058026802680268005000c801c00248009000b0011004b8000002a8000000e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ed80b7857a81d9813e81b282f7830000000009850000e68a4c8ca98c4c8c488c9a934495f29be39132943595da99768dad92dc9229994086738c918fb80d0000000000000000ca820000000000003983948a178fdd8f45881789f288fa904898ea9c5a9e8b9d0d9c90a0b4a15f9f459c4da1bea3539f159db3a14da3b79f3f9c5aa1f6a2af9e4e9be3a0fba2539d7c9c19a165a2bc9d279ceaa041a2659df39d42a03ba1309cab9b53a074a15a9c279b4ea079a1d59b959b49a020a1fa9b119a0aa034a1af9b0e9a6d9f96a0249b9b99599e849ff89967985d9d719e19998297a79cb49d2a98c3969c9ce89d0798a597709c659d29978b97d99cfc9d71970998bb9ce39d709860945f99ba9a90944a98c19c8f9d71984a98c19c8f9d71984f820000398000004f820000398000001c000000968000008b00c0043002a190ef0f4b16f6185ca35f06bb08260c8f9588800000000000000000000000000000000000007b800000c980f383328458884c800000000000006900478077007b8200006e80d680168000000680000026804180a3801e81e8810000000000000000000000007c8000000000000016800000000000000000000000000000a2810000000054810382d68100000000000000000000000000000000000000000000000000000000000000008e8085809884968067823e800000b9800000000000000000000000003a8100008e802181ab82b580a689188d2a902d92158c4b8d4f8e67957e880987c7885f890000000000000000b184d8802281ca80cc82268e53915f91bd874d8b158cd590d597e09c2b9efa9c109b72a095a17f9e399c22a184a2bb9eae9c56a1a5a27c9e5f9daca102a3a59e719c94a129a3849e4c9c0ea153a38a9dab9ed4a02ba2b19c749cc7a023a2cd9cbd9b7fa0eca15f9c629b5ba082a1199c939ac99f88a1fd9a049a689fcca0f79a8699779ea59f4a9ab398e19d129fb7994598be9d3f9fc699b2984a9d659e60993798de9c169eca981a98b59c349ee4984b982b9d8f9e0699bc98b39d369f3c996597559c929ddf965a98709c6f9dc1975a98709c6f9dc1971f820000328000001f82000032800000000000007d800000a60053074504d690e1100118301a64a39f08aa0b3d0e6e962c8000000000000000000000000000000000000011810000da807d831882ad872e000d000000ac0044025e007701430000003500c10035800000000000000000ea80e7808981fb81000000000000000000000000748000000000000018800000000000000000000000000000b580000000000000308000000000000034800000000000000000000000000000000000000000000000000000db805283418873020c82c3800000ba8100000000a780000000006b80ee82080000000000000000009f8ea6910e936097098ce192c393539b6f891f8a078cad8c00000000000000000885000091800000a781c08d7491a58f4988388c658b6f8f73971f9c4f9d669ca59b41a071a1179e8c9c2ba190a2eb9e4e9c52a1d3a2a59e479cefa0ada26f9dcc9bd3a02da2f49d7f9ccda028a2c79c709bd5a059a2dc9c389c7fa0b2a1399c4b9ac19fc8a1dd9aec9ad69e59a01e9a209af79e56a09e9a4099a59e35a0599b6399379e949fbc9a3c99829de79eba99b4998c9de29ec4998398459da59e1199bb98c69cb49d1398e2984b9d3e9e3f98e398af9dda9ea39843995c9ea19f43998d98d59d789fae989a96a59af09b7c949a96a59af09b7c94ca8100002d800000ca8100002d80000000000000260000000d0340088205149169105e18eb1aa0a11f09ed0b850e3997748000000000000000000000d88000004089618d108d12953b8bbe940096bb9fe5849687f684be906b000801b0016a8200006304fc0337030000798036801b812f8097806a80608100005c8021801f80000000001c80000000003a804180ac8000000000000000000000000051800000000000000000000000000000000000000000000000000000000000000000000000000000000000005681d68119885e8000005b802581158100000000768000000000000000000000000000004d8400004f8e598f4e909d93428a1292c0935f9aab8a648be18c758d000000000000000085840000000000000000ea82d08c2d86098c3e8fbc8e93928798469ddf9e0f9dd69a60a083a18c9e289c63a045a11a9e9c9bb8a004a2319eaa9b9da0dca18f9dd39b96a09aa10f9d759b49a088a16a9cda9b2da02aa1339ca59b4ba066a12c9c6d9b42a02fa1e99b349b21a01ea1959b969aca9fc9a0eb9a4f9a299f69a0719a479a529f6ca05c9a3e99c99e42a00a9a4299349ea09fd7991599f99d12a0bf995698999d6ea0549952996f9d239f58990598ea9c5d9e5998cf97a89cbb9da397c596159c7b9d5396a594179ae69b8696a594179ae69b8696b781000035800000b7810000358000000000000072800000cd018506c7050191e50ef816ff1957a18708b1099d0ef8961f8000000000000000000000000000000000da8080804980558034812981af8136000e0000002a002e0000000000000000003c0000002f01000090019802a683d809bc0cb80f9092330231015e017c82370050001901bc80000014801d803481000037800000a68000000000000000000000a900d10048000000000012000000000000000000000000000000000000000000000000000000108023803a80c784000045806e80e58d2c801d810082ee84f7824586ca881b81ec8bb88d278ef203f98a57917494f695bc8e6992bb93f9997e93fd94c99429993784c194ea966c970990299329941f9209929a9502985495ff92e1957b96c394fb97579b2a9d029cd49af39e53a0a89d0a9c4da05da12d9e859c9fa0d1a1619ea79c11a176a29c9e679c52a1eba2709e609ce6a016a2559d349c67a088a1549c8c9a0ea008a1b09b879bc79e12a01e9aa199289fbfa03f9afc99ec9e6fa0209a8c9aba9e3ba02e9aa399f79e85a0009b249abc9e32a0459aa399369ebd9f8399479ab69d069ff3985f9c189d1f9e6598f898309c659d3b978a96bb9b009dff96c997799b5b9c2296bb94e099a99b6096aa939098a999ed94aa939098a999ed944082000096800000408200009680000000000000118100007e000304df015090bc0c7d15c9188aa0ed072709fb0c4f96000000000000000000000000508000000000000035800000b0809980248199805c00000000000000448000000803000000000b000000390100006c8000002400a481a9818e820f81be82b4815f812e0100004681ab8246811f80278043800f81000000000000000000004880b780648000001b0063000980000000000000000000000000000000000000000000000000000000000000000000000000408000000000b88027801b00000000003280000000003f00ef0152080000dc80cd055e003e8037002d010b8700005281de00c591598074807280928dec057d0a400a90888710ff123913c68f2581a603ec817696231128141015bc943898389c759d909afe9a10a024a18b9d7a9d42a023a1bc9d109c86a0b8a1e59d099c7da0bfa1849d729b69a0a4a16d9d619b8ba0dea17f9d079c48a08ea1a89cee9ace9f30a2d19aeb9b17a075a1579b3f9cec9f20a1ca9b989d6c9f94a0ba9ad09a919efd9fd49a8399ad9df69ef7997098979d079fe0994a99609d4a9ed0983a99ae9de29ee79855995a9d969e4a980f99109df69d37984298af9cda9d7997d396cc9bde9c5c964d97419c649d61970c925298759968950c92529875996895098100001b800000098100001b80000000002e8000002e0000007080000017800000dc81e7001a8342801082dc00d0840000000000000000000000000000000000004f80d7804f80648009811c8173810000080000002800180007002a0114000000df000000620100004f0000004f005780048100009c800000b380618163807880768114837d8000006b803900b180000013803200858000003a002f80ae80000000000a0100000000000044000000000000000000000000000000000000000000000000000000000000001382000000000000000000004380000000000000fa80a880ed802403958d3b8c288b1f10cb9099953b977599868db6920494929b3483b68473871a8d080358044d052900a808aa0bdb0eb40100040104ea04cd00a40a971020115882e995ea9b519d969b289b38a06ba17f9e279cdca036a2569e2d9cd3a0efa1029e2c9c95a0c4a12a9d7e9bb7a001a24c9d109c79a0b6a1b59c459abf9f00a2879be19b4b9faaa0c09a479ba79f17a19c9b1a9b949fc2a0119c289b349f60a0689b8199919e37a0179a6e99b89db99e6f997b98339d8f9e0e99bf984e9d979e1999bc98679de59e32996e981e9d6a9e7898a998de9ca89d34987a97b59c1d9ee2970497019cdd9cf797b896fd9b5c9dbe967097949c999d4d977097949c999d4d970d84ab826c8db2010d84ab826c8db20100002e867386110a7101a006ff08d782b202a70cfd0f350614011e04b707dd06000000002200000000000000c700000000004100530048020a8072806280728000000b00000036000e000000890100000000130100005c0500002f800000ea00000056810000fb003f00cd85b9833d0806806b80028102060000548025814200000058805f8024000000598072806d001b002f002e00d3010f00000000000000000000006580000000000000000000002380000000000000000000000000000020810000000000000c800000000000004f000000000000006b01f801cb019801b10a380d130cc5856401b80ad20b949513010a01e5015b89ff01000488076380250b470d3c0dd3010003000000000000900d41108e111f87c998c09d689f6d9cc39c23a115a2ec9ef59cd3a0fba1749e7a9c63a1b6a2209efd9c2fa154a2949d4a9c93a0c4a1249dff9d109f6fa09d9a729b829f90a0619b5d9bb39e76a0839ac099b09e69a0a79b6899739e7ea0619bc599b39e6ca00a9b4e99b49e85a0609a3799a19e6ca0ce998599639e25a098993799b89d029fbe9826987d9c959d67972597959be49c67962897a69bc89cd0965597419c939d16982399d29ce29dfc968e964a9c979db8952f97979c8a9d1e962f97979c8a9d1e96000000000000000000000000000000008a0018008e81dc000000f705ca0ae30248000106ec066b0000009202d60284002680fb804880960094837085d5835e039f818e820a81290179817b81af8022803d81e18100002c80b5003101000018803700640100002080ca80028100001d00ca820000000000000000000000000000378000000000000000006b800000dd007b8096822e80960200000000000000002980318000005800ee800181818160033c809f8006854e01df8000000000000013810000bc82000000000000000000003c85c487e887c4879e84018fbd917996ca84498898864908e703320393064b042a0b130f750e68850805600d1d0dd9942802e904fa040e84f40c1f0cd80a9207ee0e4a08d5030f034401400aaf0ab3098d10c7125913aa0c9798079d739e8c9d119fb5a0cea1689f749c4ea049a1f39d739b5ba086a1f19db69b65a088a1799ded9b50a08ea1f79cb49bafa000a2ec9c5f9b99a0eca1a09c009b2fa063a1059c879b709f7ca0d19bf8990e9f8ca0dc9aba99a59e2aa03e9a2a99339ede9f8c99cd99d09dd59ee498d698ac9d439fc7982699949da79ea5980099959d769e86983898399d879e9f98a697f89c3e9ed498a297e09cf89d7599d598319d619e5e9840981d9d489e59984699f89d969f67984699f89d969f6798000000000000000000000000000000001a044c05fd05ad040000810c760e9a030000ce09720dfc80c900d302640791808f86708e808f0881139049922992679400009990b505f99d3b85bc8c9a89de948e826c8535811581a4030e055702618108808c009f00fd0008811a840000ad0200000000000000007c8000000000000000000b8200007f0600000681bd803b0432819d8300000c0800009d800000ba00000017001300cb0000004301bd016c020000bd80da80120600004d84ab82720200005f82b1808f01000084811880bb023f806f80848029024f80c98100003a0436839082f28173045702ca0731068f01461033133f12028c8a00020cfc0b419756809d00a400108b310ac90b080bf205c70753090e0eb0030e091e0d5b0caa0d6410c812d812790d1996589b7f9c819b1f9a729ee39f049e5c9ba4a0e5a1949e349ca8a0a8a19c9d119cb9a0eea1429d7a9b69a0c0a1db9cae9b3ca054a1059dfd9b05a0f2a0939c579bcd9f1da17a9c2b9b5e9fc3a07e9b7c9a319fc7a0829a9a9ac09e5aa0429aba99ae9e60a0c499699a579eca9f7999b199df9dba9f6399e1995d9d1c9f83990e9b4b9d3e9e34996a9a189dfc9d11995699ec9c649e5898c098e39c269e9597b9989c9c9e9d27970998799c9a9d9f965d98379c1a9dcf945d98379c1a9dcf94000000000000000000000000000000007d01e001a08060000000f00b160ef1820000070b650d73831d063e0d8c0ffe864d80f8823e03f3840e84b3885b85959400005f88e68a829d1a892e8e4a8de094928b9d8d678d36838582bb82ee838c0022002201b90125025281a7080001630a000047801b80ed014381000000000000000000000000000000000b820000d9050000a58458814302d28016822e80b2002980a3803f800f01000054001e8066030000a68045808e05000090019102ef030a0026022e01ed044c003701240167013e00c9000000e4001481dd809e803803408002814c80cc023c01c5028b022200780ce70e8c0d638a9b00a8093d070795f4806f8052896b89ee05f1064c0bf70194090d0e6a0b7802e5092b128311cb05d11201169816da849f96239c399def9b179be99fd1a0eb9d539b71a0b7a1779e159a65a0a2a1d79da89a999fafa0b19cb69a3b9f7fa0fe9bf69a659f95a0149ced9a949fd8a02b9cb49a819fb9a0a29b509a629fb5a0019b149aa29e08a0719a9299d79d2f9fe0991099dc9dab9fb1990e99eb9d8c9f9e9954998e9dd69e26997198f39c3e9e5e9856985e9caa9d67976e98699c4e9d64978598759c719dc897bf98c69cc89d88979798ee9c169e7e970797749c949d77967c98989c859dce967c98989c859dce9600000000370200000000000037020000000000000000000040012f0c311190040000f10e2412170cb002b70b750d5c083b0179046a08e5005907f809e8095f949980e88f09914b9c478df9915691129487834c8d1f8fa4001400ab010000db0696060000310e000000000000000000004f86000000000000000000004d800000cb820000000000000000db82dd850604d085e18300000d024080000000000000af833e830087b400000000000000000017806480098148000000000098800000c1022104cb00ea047800ac03c303cb0549819e80f280fb01be8300810000270050812481f6800800bc03e8010000250059077e08e30661005380c30000000d006b0018802a001800de06f602000037006b0c5b087e087700e60a270dcf0f9c0146117613cb148789a096589bda9cfd9b859a26a08ba1319d809b59a069a1209e2d9be09fd3a0339d129a6a9fa0a0569c209a0f9f8ba0ed9a249aed9e38a0609a8d9adc9e49a0299ae399239fa1a0d99acb9a5e9f81a0e89a779a5f9fb1a0d69a039a109f7da08c9a6b9ab09e1da05a9a99995f9e25a0569ac699279edb9f0d9a659adf9d2a9f41992c996b9db69eba9877990e9d069e30985c98f09c4f9e0c988398e09c239e35988498fc9c549e389749983d9df89ebc979c96909abd9b12959c96909abd9b129587035e049d04108087035e049d041080000000001b01000000000000000000000000c602b904a9800000a103290867000f00df020c05438000005108fc0743800000de0850044300580085034302f68000003a82f781978119807d8000007d0000000000178000003d805e813980e9013680000011820000d6838e8300002000000000002f8000000c002681000062800000000000000000000000000000000000000000000000000000fc80000011000000000070800000d6004d0000004d80800039800000868068007900610079804e01ff0022025580af016d00bf00328008062902a0006f80c4020b0381029080090856060000448023037701000004800000e60500001100000000000000000000000000000000000000000009090000690eeb110c12e68bcb951c9c3c9dd09a619a529fa1a0e59cfd9ade9fd0a0559df99a829fc2a0a49cd09a809fcca0e99b2a9b9b9fd5a0619b389b929fafa0709bff99f09e70a0799b3d99399e04a0569a4199cc9d5d9f7b995599bc9dee9e07991d9abf9dfd9ecb980799ce9d659fd0989899ae9d069f6898e7988b9d1e9f4e989c98679df49e089857996c9d6c9e2998b698569da49e2b9818993d9d4f9e34988b983c9db29e33987998f49c5d9e1f983498789c5c9d04971f994c9d4a9ead971f994c9d4a9ead972d01b2028f0419002d01b2028f041900000000005d000000000000000000000000000303e8078f80af00e508670c5d809201230601090c8200000000080500000000000000000000000000003b01000000000000370000000000088000000800000000005e80000000002f800000108000000000000000000000128000000a800f003f0000003f808b80be808d809380b6818982b480ab80748013814c806a801d8051804c80688000002f80508007803900bd8373849a80da804683e48443816600f68191828783368052806881838300000701b302718038028006a1078c817002f209140c3b817e04330d700e8980b90721108310df819a038b10b2108b800000b40e060f57000000720a070b2a000000a2097e083600da0c490f08106f00b20ec2116010288e04981699169ad698de980c9d3e9ec79b209a139ebb9f449c5f9abe9e6ca02c9c419aba9e8da0a69b2c9be29e62a0ce9b049c8d9e3ea06e9abf99289e10a0df9a5b998f9d459f9899c698549dd29e19994198519dfc9ef798e498709d0f9ff798cb988a9d179ff2989898479dd39ec4982498d19c2f9e49984098869cb59d079881987d9c639dc8976598809c8a9d3997e497649c949d3f97c397359c299d0697f996839b9c9cc4961a96b49be59c80964595709a839c12954595709a839c129500000000000000000000000000000000210831064a0bd58000004c059008a5810000de033704dd810000da03ad03df807c02ca022b0473805d01a10073007d80450013800000a6801280938000004381928095817b8095819a808d81d180ff811a003c812480e2802b814b826a813580d080c1800f810f80fd80d7812681dc800000bd802280f28000000000050000000000100000003c8000000000520000003e008e802e80c7803a0025004f006e800000000028000000088010800000468000000000000000000000050003000a80000000005500000000000000140000000000000000000000550078002500ad809900a1007c005d8000000000000000003f01fb036c01c3808100ff042a05bd8027095308a7080781e609ca0e9c0e0082a50f361213121b8e1f96009b799c6e992b99409d829e179c7f993c9ed79f009cd999999e1da0939bbf99c19e45a0399b7e997e9e26a0329b3e9a849ebb9fe29abe99409ef29f859afb99089e939fa1997d98909d819f549982993e9d9d9e06994998f39cb19e90982199a69ce39d0498cf988e9caa9d3598a998909c139e469883989e9c1c9e1098f797609cda9dc99709982e9c3c9d8c977c98389c209da7960798679c829dfd960898699ce29d23981898709d389f009815963c9aa69b919515963c9aa69b919500000000e908000000000000e90800005c06f0046407368a00003404e403638e080042005201f88c3180b180b600198c2a00fd00bd01ad8d27011b022f02b08feb01700178024290cb81628492835290a081748259829890310061007801228f540222023802009048818981b0819b8d2581c581ca807e8cb48070813d80638d2680e8804580f38d538125835c84a58dad816f84ba85b18d4b81df83be839d8cc380ed806580ac8b6d8026819b80a68c95817582d281a38c45828383f483198d16819381f8803c8db680cf808c80848b0d811a81a280018dc380ff80e880548c28811b819d81ed8cc780a6801381d08c8b8033808780518c1581ae809e80d08c7181bc803780338d398046004000b18d9e00fd01a502788d1d027106ac07688fab82e78441877a94c1964f9b389cd699e799619ed89fba9be19acc9e15a0449c3e9aba9e55a0429c2e9a4a9e929fc99b6d99f49d899fcc9aec99139eb89f539b2399369ee99f349b4999199e0da0709aba99049e609f339a399ae69d1c9f609954997e9d2f9f34991599309d189ffb98de99099d879ec798609b009dfc9db098359c089d0a9e7198e899d99cc79e639812997d9c9c9ea497cc97339ccb9e4996ad98329c7d9d8b966798409cae9d9996d696329c989db79518951a996d9a059418951a996d9a0594000000000000000000000000e90800005c06f0046407368a00003404e403638e080042005201f88c3180b180b600198c2a00fd00bd01ad8d27011b022f02b08feb01700178024290cb81628492835290a081748259829890310061007801228f540222023802009048818981b0819b8d2581c581ca807e8cb48070813d80638d2680e8804580f38d538125835c84a58dad816f84ba85b18d4b81df83be839d8cc380ed806580ac8b6d8026819b80a68c95817582d281a38c45828383f483198d16819381f8803c8db680cf808c80848b0d811a81a280018dc380ff80e880548c28811b819d81ed8cc780a6801381d08c8b8033808780518c1581ae809e80d08c7181bc803780338d398046004000b18d9e00fd01a502788d1d027106ac07688fab82e78441877a94c1964f9b389cd699e799619ed89fba9be19acc9e15a0449c3e9aba9e55a0429c2e9a4a9e929fc99b6d99f49d899fcc9aec99139eb89f539b2399369ee99f349b4999199e0da0709aba99049e609f339a399ae69d1c9f609954997e9d2f9f34991599309d189ffb98de99099d879ec798609b009dfc9db098359c089d0a9e7198e899d99cc79e639812997d9c9c9ea497cc97339ccb9e4996ad98329c7d9d8b966798409cae9d9996d696329c989db79518951a996d9a05940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082010000a30110016b01b9967a0c5f12a914aa9cb609bb148a174a9e2809260eb30ffe9cda04c90c0b0f679ce80fc611ab13b79cd881c7020584299d998cdd902390359afa906b94be945e98c30101035c0531950000f40c0409e290000065010000788500000000000000003c060d091a072b8d790d1a112f13878fba01910d2410918d8a004b01ef05e18332806583308278870000000000000000608c0c8e3c932b98c392d29cc09e68a503864f9f97a12ba47894ca9a029bae9d9d970695bc985598968ff797cc99349c52927c98f199dd9b119189976e988392408e0297a9998f908e8e079470963e950000f58b1f92a590e8898c8c0090e391278af58ce18da991fe8b519092901694dc8241924e94d59496902b96c09628957d958b9a8a9c57985e986d9d0a9f369a2c9a839e05a0249b9e99ea9e6aa0a49b349ad59e5aa0769b3199a59e60a0019b9d99619e1ea07e9a7b99229ea29f2b9aef98959d3d9f29996298649dfb9eec98c498699dba9ee398ea98799dc39ef298e7986e9dbb9e26995c98129d369efc983997809ca59d869821972f9c419dcf97d896d59bb79c52964896c09a689cae94d0941c9a1c9cd0938e958599cc9aa29193956f9beb9cb69451950b9b879c4696d697629cf99d1b9700000000000000000000000000000000140000009900000041007403e1017c8be008930dd10d5f980511ef18931ad3a0720a3c0c7a0e289837069809a909478d921118137a12dd974b090e0f8e104ea2ec88128d288e2f97758dda8d0f8d8d8ccf05dc0470050d89100879050000208203015a0000005a8000000000000000001600000000000000000000000000000000000000000000000000000000000000000000000000000018800000000000001284da8b0a8d2c9cd904fb8c34882da43b88ca90139220989187328d6d8fcf88239050937c94420b8c92ef9727984d9d658eb890ee90d89dd2825d830382e28d108b6f8c7b8c348e3c941b99d199609c57904d976f98ec9ccb8cd18dbe8d3e89748197803380c90a50024407be0492097b8a5b903892e9950c08430c290def880f96ed9a649c6e98f297659db99e6e9b0699859dd19e709b9b99e39e4ea04f9c549aaa9fcba05f9cf89a299f55a0f19a7799ef9e33a0e59abc98039e5c9fc2995d99589d799efe980099ac9de89e70995699789d099f5f99d698d99da39f049a1999d69d549fbc99f898a99ddc9e40991899589d379e9998c9994b9dea9d5e980699699d859e519860982f9d919e7b97e098059d5b9efd947f98099d2f9ec1923898e79c269e329583982f9d309e1f960396319b459c529400000000000000000000000000000000c18728844f86c3830000bf87498f3588c104df09cd07a8998015291d611f10a40d18231d451edea1540d93105811dc96650e770b470d6398968164862f88bfa2e0891f8ea68fa797cd8dbe8d718ca987d3825682278155801d010000000000008600000000000000128000000000000000000000000000000000198000000b80258097807780158000000000000000000000000000000000000000000000000000008281a482c38d188034807b80a3822e817a814481bf810000ec81928862804092d392a494e9092f919c952596219ba88d2e929992109c0f876c8a368adc8d0d8c6a8ec78e498b7f903c98fe986d9b438f7a952197d99bfc85a886bd8d5b8aae0095038c017a0ce805980a8a075a0c82899b908c925397ca07b30c4f0e2c8f4694e498169ab3996099eb9d339f7e9c569a0ca012a1459d8a9b77a056a1089df69a6fa090a1909c219b6fa076a1289c3a9b41a02da16e9b5f9a709f82a0d09acf99209f6aa02a9b2c9a5c9f95a0139b3a9b559f7ea0369b959dc89e939f95994b9b649ed69ff2998c9a949dd99e8c994d98d39c269e93980a98249ced9cf696eb96e49bcc9c1a96d896169c089d0995ec978e9c8f9ded930198009d7e9eba949598499dd89e42964c91b497e3986d921b98a09c699d719600000000000000000000000000000000c807670d4a1187954582660158841e926f18471e0320c6a56319451fb620a9a6310d478219028b950502e480d4003e86660176007501fd855a00580021806782b280b6817c836582dd8000000000000067810000a7800000000000000000000000000000000000006a81e180a4803b813d802c8029808a8100003c804b80b380000048803380a780000000005c80000000000000000000000000000014800000000051802080868000005c00a4009a8000006082fb828901a881538a8f8d830c059057919592ed0e9080aa80500731957f0e0d117b110a88c503fb047e056581cf8018812f81b783c2859884fc83fb8c5486e78c1f8ea995d4834085b684658de3004004d403da809308e40cb50b8384418a248ed19080943d0c651052116a8e9d94e399769b0e99139aef9e33a05a9c239b7aa09ba1549dc39bb1a0ada1569d959a85a0bda1099d289ba69fb2a0149c439a9e9fa8a0d89b8c9a4e9f69a0439bcc9a399f54a0449b4f99d29e70a0429b93997d9e0ba0ae9a4d9a679ea09f839a8899379ec39f0a9a3b99e29d3a9f6399d9986e9dce9eb9980398e49c759e2198eb960e9c549e68950197f19b569dc1942b98a19b849c1a92b897669c9e9d2c952198a39c719d9d95ed971e9d2f9e1c961e982b9c1f9da69600000000000000000000000000000000618200004380000025000d805e815b80b705670b2a09ce95e9104c19b71b9ea2c3074b0a560bbc95480067807000388540805c818e81e5853680d181bf803d843382da82b184da829e800000000000003d8100000000000000002a800000ed00000000000000000062005b007d017d82408364824883088300003c805880b68000003f8037809380000000001c80000000000000208000000000000090000000000000000000000000000000000000008580f281658383003c82f489a58bf409d689178f65906b0cfc812a8b578d07914781a682688401857881a085898460005f80f0816a828584b0869c874b88698d5183288dd08e0e945d82c889ba89dd8170021403d102f6013306290a2b0c05864b85928d6c8f4294540edc11611249931397319c519d809bb29a1ea010a1399e0e9b4da046a1619e8f9b94a0ada17c9ebb9b7fa089a1039e919b1ca0f8a0d59c359b19a0e5a0079c249b09a0f4a0f09b589ab69fd4a03d9bf59a719f63a0fe9ae999599fa9a0e79a4a9a0e9f47a0799a7f99b99e51a0049a6199619eef9fd99919990f9e7f9f6d999598a29de69e16994a984b9d889eb2988698679d909e34983e98609dbf9e63961898e39c089e28953a96d89b1b9d3b95a5986f9d8d9ed0984497609c5f9d06970000000000000000000000000000000057830000e28000000000000001810000b806210c490a19962c13e41a051daca33e0b600ea3102a984c80000000000000000000000000000000006680258066808480f481b0814d84b5018a0000004101070500009a0000000000bc01000028800000000000000000318083805c80db809d804c815781438400008d80ee80fe8000002e807880a8800000000000000000000000005f800000000000000000000000000000000000000000000000000000000000000000000000000000000000008c8192852e8a8e81f282a98bde8d449004814982b6827a8325814380ac8056800000598035809b8186828f809b824b8ee883f9009c04a595b9816a80ce89dc8c8b018e010000ab80c506d60805090f872985fc8c688eef931f0a11096c0c9d92eb95d29b349d7e9c969af49e6aa07b9d349b42a05ea1ec9d0f9c6fa1c0a2a79e7c9ca5a1f0a2129e409c1ba14ea2059d799bc9a0fca1c29c579ba9a0f3a1be9c829b78a089a1d89c6c9a07a012a1469cd7993d9f7ba05d9b709ab49ee29f719abe998b9ee09f4a9a0a99229ead9ff699169a239e219fe699ae99049e549fa499d598859dc29ec998c198ff9cef9d38976598a59c869df3946a98d19ce59d2b94b198129d799e3c96f397279d649e01999e95f99a139c439500000000000000000000000000000000fa8147813b80be811d80118086802101000000000000000014808782d38090854b80e58015034186000000000000000000000000000000000000db80bc80498056803782f282c2855000270000005d01dc01da00ec011f0000008e001a00b70000000000000000001c001e80460095809f80dd802281a28334801800770018000000100020009680000012800000368000000000dd80000000000000000000000000000000000000000000000000000000000000000000000000f68000005200c3800482198880000000f985008ce4860000dc840d8870830a82b28378834a82c2828287fa89e9888d902c94d694ae97118edd934294d198fc93589532959195658ea197fc98f099538e169142911a947e8dc29104931f9778872184a38137942198dc9c659e7c9cfc9b64a08ca1499e049d14a139a2f89ea89c3ba161a20a9f899cf6a0fba1d59d119cb8a0e8a1329d1e9c1ba134a2149d309c67a05da1099c589b1ea019a15f9b0a9b40a04ba13a9cf89ad39fb2a0c89bd599b79e08a0c09a9099149e319f2f9afb98fa9d6f9fe099ed98d59d1e9f9b997398829db39e2c994d984e9db19ecd984198199d939eb898b797e49ca89e5b98a697d19c5b9f9997de98249d549fc1978899b89d39a15f986499fa9d569f699800000000000000000000000000000000968114815280e28037003c00a480b48000000000000000000000fb80c2804a823a80c3804003568500000000000000000000000000000000000000008b8000007d80f48274837f8652805480000035016b8062808f00728300002480c080b18000000000000000007800158045004180748078807080278200004b808880a480000000003080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006a803a829185a180768000000000000000000000000000000000fc81e182aa0006865b835c82e882568f86938d94af966e8e6594c29428993888708c2c8e700b00000000000000005b8400006c8200007284538fec916794e988ba8a008ba790af967e9b339d2c9be89a41a047a1d29e5b9ccda0e6a1ae9e4b9cd4a0f1a1e59d299cbba016a2619d649c73a05aa21e9c8d9cd4a00ea2b29cde9ba7a017a2a19c559b34a024a1cd9bfc99879fe5a0d39b4f9abb9e43a0ed9a1c9acd9edea0af9a9799119fc9a0cb9a139ab69e05a04e9a9c98c69d2b9f5d998398ed9c039e5a984098e59c2b9e52986b98a89c8e9d0198ee96199c2a9ddd961697169cf89c4e964b98f29c1e9ef4960e9c729efb9f6399ba990c9d3c9e0599000000000000000000000000000000002b830000c28000002a814c8098826a8070817e801c808f8cfa0ba61121155ca14703c704050aae940000000000000000000000000000000000000000000000001881428512842288a98143800000af00e784718286815b0100007780c080280000000000000000002c8066805180ed80058026802680268005000c801c00248009000b0011004b8000002a8000000e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ed80b7857a81d9813e81b282f7830000000009850000e68a4c8ca98c4c8c488c9a934495f29be39132943595da99768dad92dc9229994086738c918fb80d0000000000000000ca820000000000003983948a178fdd8f45881789f288fa904898ea9c5a9e8b9d0d9c90a0b4a15f9f459c4da1bea3539f159db3a14da3b79f3f9c5aa1f6a2af9e4e9be3a0fba2539d7c9c19a165a2bc9d279ceaa041a2659df39d42a03ba1309cab9b53a074a15a9c279b4ea079a1d59b959b49a020a1fa9b119a0aa034a1af9b0e9a6d9f96a0249b9b99599e849ff89967985d9d719e19998297a79cb49d2a98c3969c9ce89d0798a597709c659d29978b97d99cfc9d71970998bb9ce39d709860945f99ba9a90944a98c19c8f9d7198000000000000000000000000000000004f820000398000001c000000968000008b00c0043002a190ef0f4b16f6185ca35f06bb08260c8f9588800000000000000000000000000000000000007b800000c980f383328458884c800000000000006900478077007b8200006e80d680168000000680000026804180a3801e81e8810000000000000000000000007c8000000000000016800000000000000000000000000000a2810000000054810382d68100000000000000000000000000000000000000000000000000000000000000008e8085809884968067823e800000b9800000000000000000000000003a8100008e802181ab82b580a689188d2a902d92158c4b8d4f8e67957e880987c7885f890000000000000000b184d8802281ca80cc82268e53915f91bd874d8b158cd590d597e09c2b9efa9c109b72a095a17f9e399c22a184a2bb9eae9c56a1a5a27c9e5f9daca102a3a59e719c94a129a3849e4c9c0ea153a38a9dab9ed4a02ba2b19c749cc7a023a2cd9cbd9b7fa0eca15f9c629b5ba082a1199c939ac99f88a1fd9a049a689fcca0f79a8699779ea59f4a9ab398e19d129fb7994598be9d3f9fc699b2984a9d659e60993798de9c169eca981a98b59c349ee4984b982b9d8f9e0699bc98b39d369f3c996597559c929ddf965a98709c6f9dc197000000000000000000000000000000001f82000032800000000000007d800000a60053074504d690e1100118301a64a39f08aa0b3d0e6e962c8000000000000000000000000000000000000011810000da807d831882ad872e000d000000ac0044025e007701430000003500c10035800000000000000000ea80e7808981fb81000000000000000000000000748000000000000018800000000000000000000000000000b580000000000000308000000000000034800000000000000000000000000000000000000000000000000000db805283418873020c82c3800000ba8100000000a780000000006b80ee82080000000000000000009f8ea6910e936097098ce192c393539b6f891f8a078cad8c00000000000000000885000091800000a781c08d7491a58f4988388c658b6f8f73971f9c4f9d669ca59b41a071a1179e8c9c2ba190a2eb9e4e9c52a1d3a2a59e479cefa0ada26f9dcc9bd3a02da2f49d7f9ccda028a2c79c709bd5a059a2dc9c389c7fa0b2a1399c4b9ac19fc8a1dd9aec9ad69e59a01e9a209af79e56a09e9a4099a59e35a0599b6399379e949fbc9a3c99829de79eba99b4998c9de29ec4998398459da59e1199bb98c69cb49d1398e2984b9d3e9e3f98e398af9dda9ea39843995c9ea19f43998d98d59d789fae989a96a59af09b7c9400000000000000000000000000000000ca8100002d80000000000000260000000d0340088205149169105e18eb1aa0a11f09ed0b850e3997748000000000000000000000d88000004089618d108d12953b8bbe940096bb9fe5849687f684be906b000801b0016a8200006304fc0337030000798036801b812f8097806a80608100005c8021801f80000000001c80000000003a804180ac8000000000000000000000000051800000000000000000000000000000000000000000000000000000000000000000000000000000000000005681d68119885e8000005b802581158100000000768000000000000000000000000000004d8400004f8e598f4e909d93428a1292c0935f9aab8a648be18c758d000000000000000085840000000000000000ea82d08c2d86098c3e8fbc8e93928798469ddf9e0f9dd69a60a083a18c9e289c63a045a11a9e9c9bb8a004a2319eaa9b9da0dca18f9dd39b96a09aa10f9d759b49a088a16a9cda9b2da02aa1339ca59b4ba066a12c9c6d9b42a02fa1e99b349b21a01ea1959b969aca9fc9a0eb9a4f9a299f69a0719a479a529f6ca05c9a3e99c99e42a00a9a4299349ea09fd7991599f99d12a0bf995698999d6ea0549952996f9d239f58990598ea9c5d9e5998cf97a89cbb9da397c596159c7b9d5396a594179ae69b869600000000000000000000000000000000b7810000358000000000000072800000cd018506c7050191e50ef816ff1957a18708b1099d0ef8961f8000000000000000000000000000000000da8080804980558034812981af8136000e0000002a002e0000000000000000003c0000002f01000090019802a683d809bc0cb80f9092330231015e017c82370050001901bc80000014801d803481000037800000a68000000000000000000000a900d10048000000000012000000000000000000000000000000000000000000000000000000108023803a80c784000045806e80e58d2c801d810082ee84f7824586ca881b81ec8bb88d278ef203f98a57917494f695bc8e6992bb93f9997e93fd94c99429993784c194ea966c970990299329941f9209929a9502985495ff92e1957b96c394fb97579b2a9d029cd49af39e53a0a89d0a9c4da05da12d9e859c9fa0d1a1619ea79c11a176a29c9e679c52a1eba2709e609ce6a016a2559d349c67a088a1549c8c9a0ea008a1b09b879bc79e12a01e9aa199289fbfa03f9afc99ec9e6fa0209a8c9aba9e3ba02e9aa399f79e85a0009b249abc9e32a0459aa399369ebd9f8399479ab69d069ff3985f9c189d1f9e6598f898309c659d3b978a96bb9b009dff96c997799b5b9c2296bb94e099a99b6096aa939098a999ed9400000000000000000000000000000000408200009680000000000000118100007e000304df015090bc0c7d15c9188aa0ed072709fb0c4f96000000000000000000000000508000000000000035800000b0809980248199805c00000000000000448000000803000000000b000000390100006c8000002400a481a9818e820f81be82b4815f812e0100004681ab8246811f80278043800f81000000000000000000004880b780648000001b0063000980000000000000000000000000000000000000000000000000000000000000000000000000408000000000b88027801b00000000003280000000003f00ef0152080000dc80cd055e003e8037002d010b8700005281de00c591598074807280928dec057d0a400a90888710ff123913c68f2581a603ec817696231128141015bc943898389c759d909afe9a10a024a18b9d7a9d42a023a1bc9d109c86a0b8a1e59d099c7da0bfa1849d729b69a0a4a16d9d619b8ba0dea17f9d079c48a08ea1a89cee9ace9f30a2d19aeb9b17a075a1579b3f9cec9f20a1ca9b989d6c9f94a0ba9ad09a919efd9fd49a8399ad9df69ef7997098979d079fe0994a99609d4a9ed0983a99ae9de29ee79855995a9d969e4a980f99109df69d37984298af9cda9d7997d396cc9bde9c5c964d97419c649d61970c9252987599689500000000000000000000000000000000098100001b80000000002e8000002e0000007080000017800000dc81e7001a8342801082dc00d0840000000000000000000000000000000000004f80d7804f80648009811c8173810000080000002800180007002a0114000000df000000620100004f0000004f005780048100009c800000b380618163807880768114837d8000006b803900b180000013803200858000003a002f80ae80000000000a0100000000000044000000000000000000000000000000000000000000000000000000000000001382000000000000000000004380000000000000fa80a880ed802403958d3b8c288b1f10cb9099953b977599868db6920494929b3483b68473871a8d080358044d052900a808aa0bdb0eb40100040104ea04cd00a40a971020115882e995ea9b519d969b289b38a06ba17f9e279cdca036a2569e2d9cd3a0efa1029e2c9c95a0c4a12a9d7e9bb7a001a24c9d109c79a0b6a1b59c459abf9f00a2879be19b4b9faaa0c09a479ba79f17a19c9b1a9b949fc2a0119c289b349f60a0689b8199919e37a0179a6e99b89db99e6f997b98339d8f9e0e99bf984e9d979e1999bc98679de59e32996e981e9d6a9e7898a998de9ca89d34987a97b59c1d9ee2970497019cdd9cf797b896fd9b5c9dbe967097949c999d4d97000000000000000000000000000000000d84ab826c8db20100002e867386110a7101a006ff08d782b202a70cfd0f350614011e04b707dd06000000002200000000000000c700000000004100530048020a8072806280728000000b00000036000e000000890100000000130100005c0500002f800000ea00000056810000fb003f00cd85b9833d0806806b80028102060000548025814200000058805f8024000000598072806d001b002f002e00d3010f00000000000000000000006580000000000000000000002380000000000000000000000000000020810000000000000c800000000000004f000000000000006b01f801cb019801b10a380d130cc5856401b80ad20b949513010a01e5015b89ff01000488076380250b470d3c0dd3010003000000000000900d41108e111f87c998c09d689f6d9cc39c23a115a2ec9ef59cd3a0fba1749e7a9c63a1b6a2209efd9c2fa154a2949d4a9c93a0c4a1249dff9d109f6fa09d9a729b829f90a0619b5d9bb39e76a0839ac099b09e69a0a79b6899739e7ea0619bc599b39e6ca00a9b4e99b49e85a0609a3799a19e6ca0ce998599639e25a098993799b89d029fbe9826987d9c959d67972597959be49c67962897a69bc89cd0965597419c939d16982399d29ce29dfc968e964a9c979db8952f97979c8a9d1e960000000000000000000000000000000000000000000000008a0018008e81dc000000f705ca0ae30248000106ec066b0000009202d60284002680fb804880960094837085d5835e039f818e820a81290179817b81af8022803d81e18100002c80b5003101000018803700640100002080ca80028100001d00ca820000000000000000000000000000378000000000000000006b800000dd007b8096822e80960200000000000000002980318000005800ee800181818160033c809f8006854e01df8000000000000013810000bc82000000000000000000003c85c487e887c4879e84018fbd917996ca84498898864908e703320393064b042a0b130f750e68850805600d1d0dd9942802e904fa040e84f40c1f0cd80a9207ee0e4a08d5030f034401400aaf0ab3098d10c7125913aa0c9798079d739e8c9d119fb5a0cea1689f749c4ea049a1f39d739b5ba086a1f19db69b65a088a1799ded9b50a08ea1f79cb49bafa000a2ec9c5f9b99a0eca1a09c009b2fa063a1059c879b709f7ca0d19bf8990e9f8ca0dc9aba99a59e2aa03e9a2a99339ede9f8c99cd99d09dd59ee498d698ac9d439fc7982699949da79ea5980099959d769e86983898399d879e9f98a697f89c3e9ed498a297e09cf89d7599d598319d619e5e9840981d9d489e59984699f89d969f67980000000000000000000000000000000000000000000000001a044c05fd05ad040000810c760e9a030000ce09720dfc80c900d302640791808f86708e808f0881139049922992679400009990b505f99d3b85bc8c9a89de948e826c8535811581a4030e055702618108808c009f00fd0008811a840000ad0200000000000000007c8000000000000000000b8200007f0600000681bd803b0432819d8300000c0800009d800000ba00000017001300cb0000004301bd016c020000bd80da80120600004d84ab82720200005f82b1808f01000084811880bb023f806f80848029024f80c98100003a0436839082f28173045702ca0731068f01461033133f12028c8a00020cfc0b419756809d00a400108b310ac90b080bf205c70753090e0eb0030e091e0d5b0caa0d6410c812d812790d1996589b7f9c819b1f9a729ee39f049e5c9ba4a0e5a1949e349ca8a0a8a19c9d119cb9a0eea1429d7a9b69a0c0a1db9cae9b3ca054a1059dfd9b05a0f2a0939c579bcd9f1da17a9c2b9b5e9fc3a07e9b7c9a319fc7a0829a9a9ac09e5aa0429aba99ae9e60a0c499699a579eca9f7999b199df9dba9f6399e1995d9d1c9f83990e9b4b9d3e9e34996a9a189dfc9d11995699ec9c649e5898c098e39c269e9597b9989c9c9e9d27970998799c9a9d9f965d98379c1a9dcf940000000000000000000000000000000000000000000000007d01e001a08060000000f00b160ef1820000070b650d73831d063e0d8c0ffe864d80f8823e03f3840e84b3885b85959400005f88e68a829d1a892e8e4a8de094928b9d8d678d36838582bb82ee838c0022002201b90125025281a7080001630a000047801b80ed014381000000000000000000000000000000000b820000d9050000a58458814302d28016822e80b2002980a3803f800f01000054001e8066030000a68045808e05000090019102ef030a0026022e01ed044c003701240167013e00c9000000e4001481dd809e803803408002814c80cc023c01c5028b022200780ce70e8c0d638a9b00a8093d070795f4806f8052896b89ee05f1064c0bf70194090d0e6a0b7802e5092b128311cb05d11201169816da849f96239c399def9b179be99fd1a0eb9d539b71a0b7a1779e159a65a0a2a1d79da89a999fafa0b19cb69a3b9f7fa0fe9bf69a659f95a0149ced9a949fd8a02b9cb49a819fb9a0a29b509a629fb5a0019b149aa29e08a0719a9299d79d2f9fe0991099dc9dab9fb1990e99eb9d8c9f9e9954998e9dd69e26997198f39c3e9e5e9856985e9caa9d67976e98699c4e9d64978598759c719dc897bf98c69cc89d88979798ee9c169e7e970797749c949d77967c98989c859dce96000000000000000000000000000000000000000037020000000000000000000040012f0c311190040000f10e2412170cb002b70b750d5c083b0179046a08e5005907f809e8095f949980e88f09914b9c478df9915691129487834c8d1f8fa4001400ab010000db0696060000310e000000000000000000004f86000000000000000000004d800000cb820000000000000000db82dd850604d085e18300000d024080000000000000af833e830087b400000000000000000017806480098148000000000098800000c1022104cb00ea047800ac03c303cb0549819e80f280fb01be8300810000270050812481f6800800bc03e8010000250059077e08e30661005380c30000000d006b0018802a001800de06f602000037006b0c5b087e087700e60a270dcf0f9c0146117613cb148789a096589bda9cfd9b859a26a08ba1319d809b59a069a1209e2d9be09fd3a0339d129a6a9fa0a0569c209a0f9f8ba0ed9a249aed9e38a0609a8d9adc9e49a0299ae399239fa1a0d99acb9a5e9f81a0e89a779a5f9fb1a0d69a039a109f7da08c9a6b9ab09e1da05a9a99995f9e25a0569ac699279edb9f0d9a659adf9d2a9f41992c996b9db69eba9877990e9d069e30985c98f09c4f9e0c988398e09c239e35988498fc9c549e389749983d9df89ebc979c96909abd9b12950000000000000000000000000000000087035e049d041080000000001b01000000000000000000000000c602b904a9800000a103290867000f00df020c05438000005108fc0743800000de0850044300580085034302f68000003a82f781978119807d8000007d0000000000178000003d805e813980e9013680000011820000d6838e8300002000000000002f8000000c002681000062800000000000000000000000000000000000000000000000000000fc80000011000000000070800000d6004d0000004d80800039800000868068007900610079804e01ff0022025580af016d00bf00328008062902a0006f80c4020b0381029080090856060000448023037701000004800000e60500001100000000000000000000000000000000000000000009090000690eeb110c12e68bcb951c9c3c9dd09a619a529fa1a0e59cfd9ade9fd0a0559df99a829fc2a0a49cd09a809fcca0e99b2a9b9b9fd5a0619b389b929fafa0709bff99f09e70a0799b3d99399e04a0569a4199cc9d5d9f7b995599bc9dee9e07991d9abf9dfd9ecb980799ce9d659fd0989899ae9d069f6898e7988b9d1e9f4e989c98679df49e089857996c9d6c9e2998b698569da49e2b9818993d9d4f9e34988b983c9db29e33987998f49c5d9e1f983498789c5c9d04971f994c9d4a9ead97000000000000000000000000000000002d01b2028f041900000000005d000000000000000000000000000303e8078f80af00e508670c5d809201230601090c8200000000080500000000000000000000000000003b01000000000000370000000000088000000800000000005e80000000002f800000108000000000000000000000128000000a800f003f0000003f808b80be808d809380b6818982b480ab80748013814c806a801d8051804c80688000002f80508007803900bd8373849a80da804683e48443816600f68191828783368052806881838300000701b302718038028006a1078c817002f209140c3b817e04330d700e8980b90721108310df819a038b10b2108b800000b40e060f57000000720a070b2a000000a2097e083600da0c490f08106f00b20ec2116010288e04981699169ad698de980c9d3e9ec79b209a139ebb9f449c5f9abe9e6ca02c9c419aba9e8da0a69b2c9be29e62a0ce9b049c8d9e3ea06e9abf99289e10a0df9a5b998f9d459f9899c698549dd29e19994198519dfc9ef798e498709d0f9ff798cb988a9d179ff2989898479dd39ec4982498d19c2f9e49984098869cb59d079881987d9c639dc8976598809c8a9d3997e497649c949d3f97c397359c299d0697f996839b9c9cc4961a96b49be59c80964595709a839c1295000000000000000000000000000000000000000000000000210831064a0bd58000004c059008a5810000de033704dd810000da03ad03df807c02ca022b0473805d01a10073007d80450013800000a6801280938000004381928095817b8095819a808d81d180ff811a003c812480e2802b814b826a813580d080c1800f810f80fd80d7812681dc800000bd802280f28000000000050000000000100000003c8000000000520000003e008e802e80c7803a0025004f006e800000000028000000088010800000468000000000000000000000050003000a80000000005500000000000000140000000000000000000000550078002500ad809900a1007c005d8000000000000000003f01fb036c01c3808100ff042a05bd8027095308a7080781e609ca0e9c0e0082a50f361213121b8e1f96009b799c6e992b99409d829e179c7f993c9ed79f009cd999999e1da0939bbf99c19e45a0399b7e997e9e26a0329b3e9a849ebb9fe29abe99409ef29f859afb99089e939fa1997d98909d819f549982993e9d9d9e06994998f39cb19e90982199a69ce39d0498cf988e9caa9d3598a998909c139e469883989e9c1c9e1098f797609cda9dc99709982e9c3c9d8c977c98389c209da7960798679c829dfd960898699ce29d23981898709d389f009815963c9aa69b91950000000000000000000000000000000000000000e90800005c06f0046407368a00003404e403638e080042005201f88c3180b180b600198c2a00fd00bd01ad8d27011b022f02b08feb01700178024290cb81628492835290a081748259829890310061007801228f540222023802009048818981b0819b8d2581c581ca807e8cb48070813d80638d2680e8804580f38d538125835c84a58dad816f84ba85b18d4b81df83be839d8cc380ed806580ac8b6d8026819b80a68c95817582d281a38c45828383f483198d16819381f8803c8db680cf808c80848b0d811a81a280018dc380ff80e880548c28811b819d81ed8cc780a6801381d08c8b8033808780518c1581ae809e80d08c7181bc803780338d398046004000b18d9e00fd01a502788d1d027106ac07688fab82e78441877a94c1964f9b389cd699e799619ed89fba9be19acc9e15a0449c3e9aba9e55a0429c2e9a4a9e929fc99b6d99f49d899fcc9aec99139eb89f539b2399369ee99f349b4999199e0da0709aba99049e609f339a399ae69d1c9f609954997e9d2f9f34991599309d189ffb98de99099d879ec798609b009dfc9db098359c089d0a9e7198e899d99cc79e639812997d9c9c9ea497cc97339ccb9e4996ad98329c7d9d8b966798409cae9d9996d696329c989db79518951a996d9a05940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000539c5c9c52997914ec13f7107f150d20d0162912d511f01d2d9666936b8e69136691a08f658c7e146c189e15db14b21c361f0018f316011d601a0113bb0f271a491dea13db14261af31e8d16a118331c3f2300194d1ace1dd7213815251a541d07150000a812941600000000cd00960c00000000f2903312000000008599fc140000000044a0141c0000ada020a47d9000002b97ae9db01300000000c59d4e1d0000938b6f993c1500002683779de19d0000bf92f195d3242d84a0903f28f72aac13741698293e29000087959f9855190000f997ff9c9020000000902628c728000077131d2a8e29000000009b1d6d2100006380471c22200000fb154a26f2259510c81a0b26a324d00c5718f7208020e104c41451195119a20e00188d1bf418cc117519161cbf1aea13411aa71c921cbc14d51ab81cb81cd514be1aa11ce71c04143a1a1a1cb51cc912d219af1b9b1cbe1294191c1b601cec12aa193f1ba61c65128819be1a741c1f124219a71a811c7b110019541a651cff11f0185c1a571cf712ec18561a521cc112c418231a4b1c88126d188219091c19120918b118d01adc1065176718631a9510ee160918e819e61099168f17a31915115b173a18eb1908118418b1185b1abc0e7917ac177819270a1b12e6135318000000000000000000000000000000002092a29147916714ff12ef17d3183e216e8b7f094802861e02946095e79126116d9318943992291403116f14f814c71f151a6a16a116e61d1a9a839779969311c60fbc003e02c4105f1ecd181019071d162079164617fd20d51d5a161518b220aa091e0025864112000000008280b103000000006191311800000000f392f31200000000019fb91800000000de949f1200000000dc11820c00000000cc104404000000001b104711000000006a938f16000006992fa4a320bb941a9d5728b92a4995f89a3029902a000045966ea3151100002893fca3f71c00003598ee28e62a1e8d6996622ab82b0000148c27a4e320000000009ba09a1b0000330f292543263712731ceb248c25040f1e19151ef0203f02019ac09c21141a0f991484173e11d912af19031cb81c5215041bdd1cb11ed114fe1a681cdc1df514251b7d1c1d1e5d14cc1a511c111e1b14a61a3d1c621e8b13251ae21bff1db212da19761be51d15122b19581a101d8311bf181f1acc1c3b117d189919851c4b1140188819621c511112183e19281cfa10de171019de1b3511c717fc18be1bc210b217f018861b1f10fb15d217f419af0f7b16c8170c1a5710b2163218841ae510f61600188a1a0b107617fc17a81aeb0bfc14a814261aa5073210651120180000000000000000000000000000000035904a8dd5886714cd122219191a3c206b0986143215001f26028809dd08a2174890a1903992c916a70e58165d182f207a162a19d219102093145d124213fc1767119c0f200f56178716ea137c14b01e3a18b6142f143e22ec14790e840a772139079a83338c9215000000001e8ab80f00000000cb92d11500000000f28d171300000000480c331100000000de103d0d9d803f801b13a20e000000007f14680f1f8623829d119d11000000007b8bec1500007e9911a3841c20912c99fb286828bc8b4c94802980290000bf9516a4442000000f88fb9efb1e0f814d82e9293c29160a07935529cb2900002f9374a1452000001f9160a1151f0000b890bb20c624a10e9416e11e7124e10a3015e718ca20fa092c12e0147619d80c4b141916f117ff108d18c2192d1d8f13ac194c1bca1e40142b1a941bd21ec614051b621cc91f8514351b681cd21f2c14f41a6f1c841f9113721a0e1cf61e6113171a8d1bc71e6c124e19ed1acf1da511c918b519011de7102f180519771cb21042186f19c41c631136183019b51c4c1132186519bb1c5211c417fc185f1cfd107c17c918421c51106017bf18251cb610a6160118181b751082167c17a21a5310231632177f1a280e51157415fa197609aa13da129419350b021342147f1800000000000000000000000000000000e98c6f0831054c15288fb28cf08bc91f109513978e98fa11c28c8c8dbb8ed912eb919492c49509181d907810c1130c21fe8488167f16ae20e700eb0936063415d780d8016182a5119483ab8508886414e58cff8ebf909122018fe090f4947a236a802d809c886f0c000000003a8e8c1100000000d994a41500000000ec8ec411000000009201ab0e00000000ad0df00e000000005a12ba0ec8809680af1570110981000079180b1300000000be1a0c1800001b0a5220ff1e3b04f3136b2ac628350705130029f2298d0cb611ad96d4240000af10ba281729c90bd213d12a082a7b01c00dc328db2800002a04288f562200003d081b1c6d20000096143e1fb5231d120619fe1c0d2316110519241c1d21b6110d18b3199b15461105189e18301857122a19281aa91f2b149c194e1a3d2165134919dd1979209b138f19751a6420a1135e19711a1d20c0127019b91ae41f1a122a19401aed1eaa111d19251ab01e5211b3180e1a391e0c11a518e919f81df0100f18bc18e01ca11091178118601c1c108e168617981b0710a0164118f81b63106c16dd177e1b780f2915c716541a110d5f14bf157719000e29150b16a119bd0d53146315d418de0e89157b16d5199a0ed8164b176e1ac30b2f16b715861acd08fc118613a118000000000000000000000000000000008e86c30b3f0ed916fe8276136c141a1efb80190dfe0c82182a8ce488b587571a4f98bd99b39bc11c8e8e0d10e3133f1eb183cf0b5c08c715000037004d828f0dd2835682498ac3119789b487248ef517a093b78ce6925f213093a988529193218f83398a8190c01000008a97e19c4e150000e39158989817000000009d8f591200000000000000000000000024028d10568a498210114218988c371095194f2019883303c318121c00000000ec19c01a1f01b80b3c20af1fa10857174b299928e3073b15932978290000640fde2134210000d20bcb1c991c6a806c052d2687250000a102fa1c0d20000000001c182e1c000011023515221c9900fd0f0c1563219f0a5c147306992258075413ed0f49207505ed0e090b2715b50b6413cd112818430fdc160316d51f43113c181e18d2205a11641876186c20f0118d18ac1842209e117a181119052038119b18c3180120d6104f181019131fe9102c18bf18a21ed810b517a5180e1e0011061736187f1d28104216ea17d51cac0f5716e217b91cc40f0a165217621ca90fba15de16091cfd0e6d15b716891b780f1e15b315051bf30d231574166e1b080f52154816951b730e2b151f16301b4b0faa14b315651aae0d9915af156a1a9d085f13c912771925041910e9118819000000000000000000000000000000000c89ee037b072d12368625105b11941a67872604dd012c169a8aff86ea850717f291d9928194c717dd894187d681911300000a02ef806e0c00000000728372030000ba8b93904512af90f0988d9b661b3e960c982b99a12207948e8ee7941722cd80e082fb8a2c13d6843d8ba48ffc15ee80d68d2e94491700000000368cb3120000000000000000000000003d88820db68b2d822b03ed16838e4308fa154f20328844838914881a0000ba00c11614180000000035195e1700005d0a651d671b00006c103d25fa240000af0a2c1fe71e00009d080419c6180000100d0024ce230000b206861aa21d00000000e212ff1800006a064211931aec044b12990c6921850cda1443863622c406bd11d28a3a207e04010d5a0593143c0a7211b90e04184b0e2216a3147e1ffa101d185c174d21a51189182918de201d115a18e7178b204910e217221807200510de172e189e1f371099173418321f2a10ed174f18d51e7b0f7c173918381e920f0e171218e21dce0eb4169317601de30ea016f017571de90f7f169c17201dc10f4a16d617041d760ff0152417931cba0ebf15f716601c5a0ee7141116db1b6d0ef3147915791b2f0e53153716a71b7d0e5b158616d01b2f0d8115b1158d1a04091014ed12ac18ca08f411f6121018000000000000000000000000000000009d8ae987cd011015448b110c3e09c11a668c17029387f818ba91a486298e851d209645952c98b81bba8d4788b182cb181684a5028b81fa1100003282c188050da5834a8b70908b141e944b965e99521ce9955d949a9562222e943a8f05955a21e58680877f8e3914b38b578bd1905f165581d28d719484180000ef833c8ab6110000000000000000000000001f830a0100000000708770070d87228015023509e186e582f60af60a00000000e0119a0f0000000062148e100000160415185c180000158a6f1d802200000d9868a02d1c000017855f11e61400009f0caa1e2d2100009c08c0169f1a0000f300281024150000ea019586b8162d80af8e7299ee1c18957598349cff160000be851d8a44110000920364842606c205560dce02f611940c8b1434103a1e980f46167713b5201410a8164e1498202a10eb16e7149f20ea0f381634153f200a10de16ad160720330fea163317671fda0eef16d916091ff70d16163417371efb0d2f16ee16df1d200e7a1556165d1da20da5153116241d700e2115c815cd1c570ef714b215bb1cbf0d74146315791cd40c1514f2144e1c070d1f14b614c11c050d50131b14111c690ba2122412621bac0b6d112d12ea1aef0506112a10d1198980e20e1e068b19c8042c0f25100b1700000000000000000000000000000000c7886f854381d211ec885206bb07e1186f882b810e8786128788cb88c28c94127791ce913095bc134f8874844587a21100001401d080b70b00000000760021040000ae022e01ca0eba846901ab861918a594ad84998ca9220e959d90f3943f246e857784dd8d09120000258bac91ba140000f39065977218000065814b8dc310000000000000000000000000000000007e820000fb835481de8438007e847c07000000007d843d09000000001e02d50d00000000be0b300f8c80de079313e81600008a134b19fb20a980280b9715351b0000b802040f9f149e80b80dd21085204a822f049709f01900005f003484881300004b0511828e154a00810fe190451cba00b70a9c8908160000e108af897b110000eb05fa853201d105880dbf828f0f350bb212fc8a531e6e0dd314bd053e21c70d8215720f5b21a60d43160d113021560dda154b13af20c60d0d16c6146a204e0dce154d15be1f2b0dce15e514061f1f0d1b15eb14611e2a0d00155515511eaf0c8f146214941db70c8214c614721d610d7014a3144a1df70c5214e5140a1d220da513fa14a71c850c8b139b148f1cb60bb8129d13041c010ca0122813641b6e0a3b13e013a41b530c2213bd13181b170b76146f14841a82012e10750d651963835b81bf04e418000000000000000000000000000000002c887a860f843e11768c140460058d1a338a19858a884b134a88238a658c2514d88c6390b692c71438859986248a9b10000000008182410800000000d3805a0000002581cb88980d86821988af8d9415e394c98dd89239224f95818d729454232d82a883608dac100000878a7591561300005390fb97cc1500000000f38baf0f0000000000000000000000000000000061803380338b1c81f6800000458bd507000000008f8b650a0000b080668d05120000a48342950a18c88987817283ec1929807314a811ff20b681a80abe0d9515f180b008f90bb2147000e610b20bd01e43064b0eea0d63190000d909520a671400002115fd196116de034f166d0be01cc608870fed0b5f16000023093d896e1100002f0449850f01c1035b0cec8a3a0ec8080513e490991fca080d14a58ca92164080a14948c9421eb098213aa051721c409f713be0b8e207b0a2a1462105820560a67144e111820e80aa414fd0fc71fd60a4314a612d81ee40a3c147811871ec50960131f122f1eb5093f130e12001e140a1a13dc12e21dc40a4e13c311981d870a0c123213e01c9a091b129d11ba1cd4087410c710e11b160860105610281b6107ac1061103a1bf0088b103311ea1a6e08fa11ea10871aff832c0bf085001a8984a701f905091a0000000000000000000000000000000039881785fd861e12be8a1a0a120a041a8c80bd0ddf0d611513069a1298144614ef87ef0b680de314f284b306b70c42110000a200c980e50900000000758049020000b6800a891f0e0000ba88bf8e9e1601950b90bc9454227e967f92e197d52308886083508ef610000056863290fd120000798b61944d17000000007d8a3c0f0000000000000000000000000000000000000a00c087dc80000000003788d503000000003d8aab0500000000bf88bf0800000000c886160db186e706d4827a15e6832f0d7d907e1e3485f900e786e615a7841c010f8a6d176286b70bb190c91e8184e1015b90e61c000098049791271b000041010391981ae681c1828197141e0e83ac820e91301800008c80818da41200004b00d089d0095780e603928f471309019d0dfd93881e8581250f15945621af81be11c3924e21a401a2112b8f272157014611988ea820cd03e010f084492036019111090b11209c036e11a004032080031d116b0d601f7603e1105d0a181fb0039e0fda0c7d1e9b035c10870c0e1e8f05ec0edd0d9a1d6e050010610f7b1de408e40ff80e2d1df5061510270f371de505690eb00ec81ca404530f400e791c48041410880f521cc2082d0ff20fdf1bfa031b11100fdc1a7a871a08828c72195d80670a180cb218000000000000000000000000000000005d8a9d89fa899e122c8f3e856189771b1d8cbc87ae8bcd14f8882789308c18140a85b788598ad111e0835385e589900d0000028243870d0a00000000008574000000c184a78c5e0d0000d089bf8f5b151995e590a6947b220698e48adc915024000000000e89790c0000000096805a00000097841e8c2e1400000000a78ba70b0000000000000000000000000000000000000000a1877883000000009d88b60000000000028c1101000028001c8bbe040000d200858ca10a42879d04fb90ef15da889b0cc394f91fda84f3067b8bf21433822e06978cfa14c783590fba92461d0000930dd288511800008303e700170e00005511a010651514035d14368aa21be502760b0782f615000055043a8b701000002b03f08487034c80a509eb8ca5102181820fa091f31ea781c110c39266213285b7100d943321a384130ff090fc200e84b80eb590a92056813d0e65905b203781060e138b18202f81d00de28ad01f2881410d0784bc1e0f81090de883691e0181b00c9303de1d0281a70c7e839e1d0781860c6a037f1d0b01810c5f036d1d11017c0cf608381de3001e0a3603f61ccd80e7089a02071cc780d80879027f1b5082b30a8607c11b7f02140cb509101baa00470f910b481ac98885043f8e5819f1831981528418180000000000000000000000000000000002883a89158cde10498ea48cf18f5d1a708b018a268c7f120000e087f48c8e1200000187278c9210508211848689ff0a00000000a487a407000000003c83a6000000db83bb8c2d0cda841f8cbc909c157495ba916f95e3234e97e78d9798fc2400000000aa8ba40c00000000000000000000cc80e280251400000000368c360c00000000d581248000000000f181f181000050803588a68000000000ef895f02000000006c8ac70300004780fc8a650700000b80768cd30a42871c8155902f143485550cb3960c1ef2824203678c9a120f827d06238d8612db87ec10c491631c0000270c838d96160000da04a0886d0e00000c0d770f5115ca8428103693931b9c87de073a8ea8160000af00aa8e621000004580e988bc812e8354813c912290298a5983bb95f61d068ceb837e96ea20108d0b840196fd20ed8cf083cf95ea207c8cce83f494aa20be8ba683c6946a204f8b8b83ca932820d08a56834a92ef1f8f8a10839d91f41e7c8be8826490871e938bb88225900c1e168cb6825b8ef61dec8aa482178eb51dc58a8e822c8c7a1dba886c82bf8bfd1c53880f87688de11c3788aa866e8e6c1c0f8928868b8c181c3c870b82a18c181cf7830402e78d0e1c1186d10da5022d1c128ca3899393601c8589e08dfd8f761900000000000000000000000000000000d2899b8b128d3e110790eb8e7890cc19928cbe8c418e23142486e78b0f8edc1200006189558d2c11f6810186bc8b620c00004d82b288b2080000000045845400000052846b8ca90b000029889f8e30144495d88dd294b922a698b984a4915c24ee85ad006d89cc0c000000006881180100002a0227090a1400005c80a28a560c000000000000000000000000968296820000000029853181000000002588a801000055806a8b5c040000e7805c8c9e0800000000b489610730821381ec8e21143f8b370c8394b21e61857c03af8d4112cc88c1030e8f1e14718ca80ce194421eee8539019790ce1500008d00b88c330fd2849183b692fa152f883082c397111c7f8bfd840891df15000075810790760f00003e81e58a4883c2834481e091fe92b98c6383e395461e9d8f2d84ef965621628e2f8401974d21238e158408963021688dfb89c895e4200d8d9789d3949f20098d3289f6941f20bc8cf28844940420ec8dce8b8d94901ffa8cb88eb894e41e0c8dba8fe793731e968c828f5394341e8d8c5d8f8693081e228c208f3393aa1d048cf98edd924d1d918bc98ef8911f1dc289528ea291d51c568cfa8c8390621ce68a878b438f2b1c028acc85838dbc1b0d8a5705f88c8f1a668d848e74929e18158b21904e91771900000000000000000000000000000000388b498bb88de911fb8f598ef6901f1b00848a047d06fb124206321104130a12f882090cfa07c8110000ce806f848a0d00008583f98af90a00000000068677800000d081888a8608000094869d8df40c588a6c8cba90fb15df8f518e0a951e20cc8a5385ab8dc00e000000002d866b0200009d82d68a13140000f980458c450c0000000071833b80000000004483ac82000033002288418200000c006788cd0000000000d3836c0000000000d88540030000ff01da8a9b0900003407a88d8e142989cf0db792ca1eee86f202a68c8a117187ae02e58c3712eb8a2b0b3891ba1b00007604b5892e140000a50849834d0e5e02de0fe80bf214fb817412c48eda1b2882f00b938757187f80b608f18ff415000085018c8ae08040846301a8917193bf8dac8963981b1f158f3e8db49ad721fd8ffa8c6f99632152907090b198ff2030903e917e98b3200a90ef9137986820ac8f8d925e9716200e904a924b970c20848efa916497761f368f8692ed96dc1e548fbf924f96221e958f60923c960f1ef58f2f92e0959a1d078fdf918895461d6b8d8c91cd94da1c018d8a914d94581c428c10914b94401c428d8691b393251cb58c5f90a0931a1ca78cfb8fb191691b458c148c64912a1b3a8dc3902195b8193c8abc89f08dcc1800000000000000000000000000000000128b328b868b5415ee90129026914d1c5889548d718da01100004585fb8a7b0e0000b689228e4c0f268990882b8e940d0000b281e78a4608000000003786a3010000d087538e200c82835c8e5c9228154f9748969d99d923709863965c9a8125fb8c5b880e904f0e00000000e4864c02e784c7856d8d451400000000688a280b000000002984f680000000006687d200000043000b86ac0000004b00db87920300000000ba84a002000000007386a80800003f026f87f70b00009d0cde0601156081001701143d1e2905681593157c1796006f10180cf713b1830513e189791c00007105cd8c7a1400004f00048c3b0f3f82258779911615ae86108c2f95871ab98ab4895a91bc150000ac83bd8f3d100000a584708c89825b87e08b8a92f891778f88911798491e7791a9932c99382177914b94359aec20c7910d947d99b22038913e94fb983020a590f593f498da1f6c90929472987a1f109112945398451f4490a0944d98b21e81905c942598541e52903294ec97f11d8c9009942797b11d0990e093de96771d788f8a934196321d1590fc923c962d1d178fbb932f96631d3a90f593f295141d768f1292d194071c278eda907c94a61b548dd6906193731b318d918e7093ae1a798e1a931c962e1a6f8b9491fc92e21700000000000000000000000000000000b0904d926a92dd15a196de978c995521fd94c3974599b020c98eea900c943417098c738f1093ae14e184228c5890581000000184de8c220a000000008889670200008787a08ee60c1685d18e7093a31533962096a599d8212a97d09690995a24f38c47858b8eca0f0000298191878c059490c683d68174196d90689246976920d68c11838c8dbb1000004f80548a0b0e0000a4804686ab0700009a80d387a6090000d4807086e50a000084800c8a0f0f0000a4810d905318658b9b03bd939e20e090cb030a95f721008cfe01f791ac18a688b903648e8c14da8ca9092992461ded8a2e811b9028162081dd00778e8c1378800201648f4c158281a688f794ab1b918969863c911d150000cb841f8f1f0f00005f83588c418600894e8bc19325944a901a92fc98311e7d926e93a3992a217f924494989a20213f921495d09a05216e922f95349a7e20dd918795e99935204d919795ee990320d991b7954e998d1fb19175953199e61e34917e95e2985f1ec39001957098ae1d1891d19414987e1d5c90a5942398331d9e907c944d97151d8d9044940a97a61c1b8fb39377961a1cb28e58939295121bd58de4922795691af08ecb924b95f01a078fae92d0945d1b928f2191b094a31bc88e6e914c952e1ab38c75913094591800000000000000000000000000000000e790bf8e378df117e4981b9aaa9b78210898d899f69acb214b96e2961099d11df6961798699a7520fe963897bb98af1d8794879612997f1f2e9012911494f116cf8c9392c695821bfc96ec97419ac321689a4d9a949c8d24239a2299fd9bec226b91228dd0910f153987838bc39024175c90f88b3c90b61a000098901e98cc1e3d8cb983608e96120000bc80de8b56120000b880a086a20d000074009283770c0000fe00ca820b0a000080021786920c05831007f486f015f38c0311fc8ca9211d91fe12e990ca231d8cdd07988dab19208bb1010191421a648d9583fc95cc205f8f588a10972e224a8bde85a990d918cc87e88ae29141197684b68ec0950f1d478ccc8d72937019a48d2c90d997641eca8cc48e3d945118cb8ca990f3954e15de90f3947f9a6d1e3093df960b9cfe20009415970e9c01214b9418982b9cdc204f9457984a9cbc203d94a6981b9c7420ce9314983f9b04201e93fe96869a641f13926896ac994f1e8e917595ad98031de490199590989c1c34911b9535989d1c83912b955f98821c70914a953898891c879176950498821cb19063954f988b1c549014959d971b1c2590db942297881bad8f66944f96761b598fdf939295731bab8ff99187953e1bb38f96925496af1ad38c1a9191924d1600000000000000000000000000000000f68eb88f8b8f8c160497e798569ac0200b96fd9780993a216e933c90c194d71dc997e796b39a192207975499939ad62230986599219cf8215f91e007038eac1cfe935c906a965d1d76983d99199c5022139c5d9a269d2724999899998f9c072386904b9052943a190000d388988d2f155d8f1801d8015b193d8d939275970a20ac8d08895f8cb51500003e820581dd0d00006c800881a50800004680d7808f0700005d00bb02190800007b005b83270a22828b8a158df0147c93c68f5395fd215994509337982f242e8ecb88d09017196f8c568bf2910b1add8d4b89ee95ed20e58eb9889795382153875910450a4f18820dd916c41825186a8fb30613939a1df88d8f8ca18fa219658e6f93a1981d1e718d2a91bb94fe170c8d3293ee96711430911a98299b031e1e94cb98219c2a20819405994e9cfa1fde942b99839cd81ffb945399529cc01fed941f995c9cd21fc1941b99219c471f6394ba98a19bf01e1c947898019b971e09945c98ca9a451ef89348988f9af21da6932e98569aa31dad920998eb99751d76927f979d99421dd191f39665990d1dc691bb960699c91cf090fb9581984b1cdb904a95a6974a1ba690a7940597d01a039133946b96c31a0192d192ae95471a009164936b96ba196a8f4a949895441800000000000000000000000000000000f58c5e8c0f8ec215d197729aa59bc32071977b9add9bb3201a98199adf9b7d1e5d99789c179efc21fb98d99c529eab225c99679c859e0522c18e100d8e89d81dbb93d9917b97f31d7499769cc79d69224b9c949df29f40242999479cb19ed4228c8d508ee99137180000ac82e684f713888de80a260a1b19078f2698729b0a20c08bda8a528e3316000083001b018d10ac85d085b68810157e8dae938298581f9c8d298a378ea4160000ce801489e4109b85f28b748e99166e911c94f49875217e94658d2799f422088c4210ac026d186088b619c71b1b181e90f4103595c321d292e3919299f622b88b7f8ef0925b19188c5e904c95091be390d196a19bad20f8928d96c99a002213939b94d69a0d212d0e151656149f1c91939795829ba42066945b98269c0d2137957f99159de2205b95b599099db02033959499f29c74201995a999c39c37203195a6998b9cc11fd3944d996f9c361faf94dc98d19b8e1e18947c98119bd11daf932c98ab9a641da4931098849a2a1d8193eb975f9af31cce93b597f199c31c16939197d899b01cfc928c979399b61c4692b696e6981d1c6190e1947b97061a08902f95d897511a1190da94a3977f1a7b90f0948f974d1af3908e941e97041ab090379541987b184d8e5c94ba95ab1700000000000000000000000000000000bc8b088d4a8b911583986f9c089d412179978b9a439c1620f394169888993d1c47998c9c629e982188992d9df39ec122fc98619c389e8e21839522970e99761be9935e952898411b03955b98a89a9a1e2d95a796ed98c31af2940e9a149dfa1f988ed18ef2908e16b186f7871988a816b597ba9ca49e81213999449d9a9f56226386db874e8bf81400004e009502cf0dd083c882ab81111415918997dd9b061fcb8a8b8c0a90de140000c1005a816d0e1489258c4a8e4a15fe94d698529c5e2322973899b19c1824e78c188c268c43170a89608f4a18f715f9924f99259c8321d6959199169df123ef924d975e9c7622640d6d143e141a1bc491e296929b292115945c995c9d4822839444981e9d2721e48e7991dc96f71ad1933698b59c1820be945699e39c1e20d495c09ac89d3720f695ee9acb9d15204f96e79ab89ded1fe195089ba99dd71f7e96939a589d961fb6958f9a189d4a1f5b95159aeb9ce81e7095e1999d9c871e9795bc995a9c351e31952a99af9b6c1d6794a7982d9bf71c7f931e987e9a871cbb92c897f799481c989256977d990e1c1a9276978599141ce7915e975399231c0392dc96e098a71b7f912c968f982b1b5b91b1952698191b31928e953f98451b6c915d960999231b9291a5961198a61a00000000000000000000000000000000a40ed9149b150d1b29951d984599911e3d97f899d69a031cbb9ac39ca89e6921759ba69dc49f7322029b8e9dc89f0a22fd99bc9cbc9ee6206497b799cd9b461bba95a898d59a501a0996ab99259c321d0e950c983e991e1828921695cf97bf15408de691d2944a1346902e9454958317b499bb9c199fa5206c9a2f9d19a0b1211f89168ee49093154583138169849b154998829d05a05a21ae98ee9caf9f4522bc91e2931596d219e297b19d71a08823079c1da000a21825349bde9e95a17e24eb990f9e76a168248197e098389e7222b811e3177217fe18a6915f99319d12211f98d29b339f9f22cc948099069d7221968aac90c9957c18188ddf95209abc1df5862c8dc8914b14b9805486a28e2f1040803381e38e6d0a80911b97169bc41dfd94b399cc9c10203c96439ac29db31f42967f9ab49d7f1fd795589a759d0e1f5196309a219da91e4e954b9a2b9d981e1195cb99c19cd91d3095d099a19cb81d5695bb995e9c861dd2948599449c2b1dc8943e99f19bd41cbb94f898ad9b941cb094a498229b451c6c946398d39a301c8e944b986b9a261c589444985d9a1e1cd0929a97a2997b1b6e92f796ec98951a5392bb96c098ae1a23929696a798681af1922d967498e019d9918c9787990b1a699117977098a81800000000000000000000000000000000ba953c99799a94189e96509b159c531e5397c099f39a1e1bb399e19cff9e3b21619a6e9d2a9ff921949a4f9d369fd521d499ff9c2a9f4b21369a459c819d9e1e3e9ad19c239fd020f799479d869f3a21bb9b4e9d189f181f039c619e7ea0d5213c9c059f16a11f237f9c2f9fd0a13623f39c809fb6a1a123079db29fdea1c823fa9ca29fbda1e623a39c6c9f80a17b234d9c2f9f33a11b23d29bed9e1ea1d522499bf59e3da17f22759ab89e74a18022a99af39d04a116223e9b659e55a157227f9a149dc7a0012188993d9c539ec91c4199579d4fa09920bb9a8a9e05a12822fb9a179f4ba14a22869ade9e26a10a22119a799e32a136221d99669d8da027217c97869c3d9f22208297b09bb29db81c76970a9c8c9e821f0398619c4a9f7620f297299ce69e08200e981c9cd09ed91f3f96729b049f8a1f6796549b009ed41e26960d9b9d9d481ec095ec9a5f9dea1d2c95999a2d9d981d18955a9acd9c191dec94139aa69cf01cf694d2995b9cd51cf5946599119c861ca3943c99c99b571cdd940399719b3f1c1b95a898f59a111c62947d98799ac01bc3934d98509a961b979243979a99bc1a7592429766997e1a8d92fd963999711a5b92f096eb985c1a22924896e298051a71912e96e098c418d18e72942b96db1700000000000000000000000000000000eb940c99c899aa1598994c9de89d8d20bb998b9c6c9edc20009b919e9ba07222a69b969eeda08e22339cec9ebba08d220d9c209f1aa16d222f9c549f09a16c22009c569f79a16e22349ca69f68a188227f9cc79fa2a15a22839cf29fa0a14022989cd59f7da105227e9c05a09ea10122749c10a0c7a1c721489cb79f8fa1a1211d9c919f8ba18b212b9cbe9e15a12621189bf79d8da0d020239b589ec9a09920599b509e4ea1b720379c8c9e0da1a920949b9f9e2ca1c620f49a0d9ebba06c20cb9a619e05a15520859a609e8fa18120619a5f9e04a18f206b9a1c9edea08c20209a059ebea08c20579a1f9edda0aa20139a429ef2a0e1207b99c59dbfa0d1204799b69ca3a0a320a098a09c21a041208b989c9c1ba02c206898a09cb09fd11f1898b29cbd9f5b1f0f98939c709f2f1f5497679c429fe11e5697329cd09e901eda96d89b799e5a1ec096659bf29d0e1e97963d9b979db21d4396db9a449d7a1df095b09afd9c4a1dd895519ad09c011dc495ff99719cb91c4d95aa99579c9d1c79954a99dd9b461ced940d99779bf41b8b949e98c09aae1b63944e98719a081b43943d98339ac41a2e943998fd99d61aca930198059adf1aa593f997c3992f1bd293ce97c999e71ace9234978999511ab790a7948896871700000000000000000000000000000000e68cc891ff95ff15b299229d509e8c20759a209ecf9ffc203d9b289e45a065213f9b609e6da0c521729b6a9e72a0f721d29b569e79a0ab21719b509e87a0ac219a9b699e94a08021189c8d9ec0a0a0211d9c829edca09821199c539ebca08621df9bf39d65a02221049cd79d71a01f21649b369e92a00a21139b1d9ebca0f020469b799ee6a0c420369b1b9ecaa0ba20c99a099eaca09c206d9a489e18a1c220ad99b29dc9a19820e59ac39dd4a02520aa9a569d87a00b20609a3c9d40a0cd1f7f9a2b9d23a0b21fda99fa9c21a0ae1f3199099d09a0d51f0e99eb9cf19fb51ff798cb9cdf9f871fd198bf9cc19f871fe2989b9cb39f3e1faa98bb9c0aa0441f9b98b79cd69f3f1f8698979caf9ffe1e55988e9c599fe41e1498609c069f931ec597329cae9e201eae97159c839ef71d2d97259c6b9eaa1d4197029c2d9e701de396049c299e6d1dc796c89bfc9d421d5196989bb89d341d0f96189b5f9df81cef95959afe9ccc1cc695029aa79c781cad958e992c9c161c2895ff988a9b611bb194af982d9b2d1ba4947e98d59ad51a45948998969aba1a3d9463985c9a801af29365982f9a991aea932c98f4995b1a4a93f197b299591a12939b979399791a93931a975499301a6a927196cb984818d1919e9606989b18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000539c5c9c52997914ec13f7107f150d20d0162912d511f01d2d9666936b8e69136691a08f658c7e146c189e15db14b21c361f0018f316011d601a0113bb0f271a491dea13db14261af31e8d16a118331c3f2300194d1ace1dd7213815251a541d07150000a812941600000000cd00960c00000000f2903312000000008599fc140000000044a0141c0000ada020a47d9000002b97ae9db01300000000c59d4e1d0000938b6f993c1500002683779de19d0000bf92f195d3242d84a0903f28f72aac13741698293e29000087959f9855190000f997ff9c9020000000902628c728000077131d2a8e29000000009b1d6d2100006380471c22200000fb154a26f2259510c81a0b26a324d00c5718f7208020e104c41451195119a20e00188d1bf418cc117519161cbf1aea13411aa71c921cbc14d51ab81cb81cd514be1aa11ce71c04143a1a1a1cb51cc912d219af1b9b1cbe1294191c1b601cec12aa193f1ba61c65128819be1a741c1f124219a71a811c7b110019541a651cff11f0185c1a571cf712ec18561a521cc112c418231a4b1c88126d188219091c19120918b118d01adc1065176718631a9510ee160918e819e61099168f17a31915115b173a18eb1908118418b1185b1abc0e7917ac177819270a1b12e61353180000000000000000539c5c9c52997914539c5c9c52997914ec13f7107f150d20d0162912d511f01d2d9666936b8e69136691a08f658c7e146c189e15db14b21c361f0018f316011d601a0113bb0f271a491dea13db14261af31e8d16a118331c3f2300194d1ace1dd7213815251a541d07150000a812941600000000cd00960c00000000f2903312000000008599fc140000000044a0141c0000ada020a47d9000002b97ae9db01300000000c59d4e1d0000938b6f993c1500002683779de19d0000bf92f195d3242d84a0903f28f72aac13741698293e29000087959f9855190000f997ff9c9020000000902628c728000077131d2a8e29000000009b1d6d2100006380471c22200000fb154a26f2259510c81a0b26a324d00c5718f7208020e104c41451195119a20e00188d1bf418cc117519161cbf1aea13411aa71c921cbc14d51ab81cb81cd514be1aa11ce71c04143a1a1a1cb51cc912d219af1b9b1cbe1294191c1b601cec12aa193f1ba61c65128819be1a741c1f124219a71a811c7b110019541a651cff11f0185c1a571cf712ec18561a521cc112c418231a4b1c88126d188219091c19120918b118d01adc1065176718631a9510ee160918e819e61099168f17a31915115b173a18eb1908118418b1185b1abc0e7917ac177819270a1b12e6135318270a1b12e61353182092a291479167142092a29147916714ff12ef17d3183e216e8b7f094802861e02946095e79126116d9318943992291403116f14f814c71f151a6a16a116e61d1a9a839779969311c60fbc003e02c4105f1ecd181019071d162079164617fd20d51d5a161518b220aa091e0025864112000000008280b103000000006191311800000000f392f31200000000019fb91800000000de949f1200000000dc11820c00000000cc104404000000001b104711000000006a938f16000006992fa4a320bb941a9d5728b92a4995f89a3029902a000045966ea3151100002893fca3f71c00003598ee28e62a1e8d6996622ab82b0000148c27a4e320000000009ba09a1b0000330f292543263712731ceb248c25040f1e19151ef0203f02019ac09c21141a0f991484173e11d912af19031cb81c5215041bdd1cb11ed114fe1a681cdc1df514251b7d1c1d1e5d14cc1a511c111e1b14a61a3d1c621e8b13251ae21bff1db212da19761be51d15122b19581a101d8311bf181f1acc1c3b117d189919851c4b1140188819621c511112183e19281cfa10de171019de1b3511c717fc18be1bc210b217f018861b1f10fb15d217f419af0f7b16c8170c1a5710b2163218841ae510f61600188a1a0b107617fc17a81aeb0bfc14a814261aa507321065112018a50732106511201835904a8dd588671435904a8dd5886714cd122219191a3c206b0986143215001f26028809dd08a2174890a1903992c916a70e58165d182f207a162a19d219102093145d124213fc1767119c0f200f56178716ea137c14b01e3a18b6142f143e22ec14790e840a772139079a83338c9215000000001e8ab80f00000000cb92d11500000000f28d171300000000480c331100000000de103d0d9d803f801b13a20e000000007f14680f1f8623829d119d11000000007b8bec1500007e9911a3841c20912c99fb286828bc8b4c94802980290000bf9516a4442000000f88fb9efb1e0f814d82e9293c29160a07935529cb2900002f9374a1452000001f9160a1151f0000b890bb20c624a10e9416e11e7124e10a3015e718ca20fa092c12e0147619d80c4b141916f117ff108d18c2192d1d8f13ac194c1bca1e40142b1a941bd21ec614051b621cc91f8514351b681cd21f2c14f41a6f1c841f9113721a0e1cf61e6113171a8d1bc71e6c124e19ed1acf1da511c918b519011de7102f180519771cb21042186f19c41c631136183019b51c4c1132186519bb1c5211c417fc185f1cfd107c17c918421c51106017bf18251cb610a6160118181b751082167c17a21a5310231632177f1a280e51157415fa197609aa13da129419350b021342147f18350b021342147f18e98c6f0831054c15e98c6f0831054c15288fb28cf08bc91f109513978e98fa11c28c8c8dbb8ed912eb919492c49509181d907810c1130c21fe8488167f16ae20e700eb0936063415d780d8016182a5119483ab8508886414e58cff8ebf909122018fe090f4947a236a802d809c886f0c000000003a8e8c1100000000d994a41500000000ec8ec411000000009201ab0e00000000ad0df00e000000005a12ba0ec8809680af1570110981000079180b1300000000be1a0c1800001b0a5220ff1e3b04f3136b2ac628350705130029f2298d0cb611ad96d4240000af10ba281729c90bd213d12a082a7b01c00dc328db2800002a04288f562200003d081b1c6d20000096143e1fb5231d120619fe1c0d2316110519241c1d21b6110d18b3199b15461105189e18301857122a19281aa91f2b149c194e1a3d2165134919dd1979209b138f19751a6420a1135e19711a1d20c0127019b91ae41f1a122a19401aed1eaa111d19251ab01e5211b3180e1a391e0c11a518e919f81df0100f18bc18e01ca11091178118601c1c108e168617981b0710a0164118f81b63106c16dd177e1b780f2915c716541a110d5f14bf157719000e29150b16a119bd0d53146315d418de0e89157b16d5199a0ed8164b176e1ac30b2f16b715861acd08fc118613a118cd08fc118613a1188e86c30b3f0ed9168e86c30b3f0ed916fe8276136c141a1efb80190dfe0c82182a8ce488b587571a4f98bd99b39bc11c8e8e0d10e3133f1eb183cf0b5c08c715000037004d828f0dd2835682498ac3119789b487248ef517a093b78ce6925f213093a988529193218f83398a8190c01000008a97e19c4e150000e39158989817000000009d8f591200000000000000000000000024028d10568a498210114218988c371095194f2019883303c318121c00000000ec19c01a1f01b80b3c20af1fa10857174b299928e3073b15932978290000640fde2134210000d20bcb1c991c6a806c052d2687250000a102fa1c0d20000000001c182e1c000011023515221c9900fd0f0c1563219f0a5c147306992258075413ed0f49207505ed0e090b2715b50b6413cd112818430fdc160316d51f43113c181e18d2205a11641876186c20f0118d18ac1842209e117a181119052038119b18c3180120d6104f181019131fe9102c18bf18a21ed810b517a5180e1e0011061736187f1d28104216ea17d51cac0f5716e217b91cc40f0a165217621ca90fba15de16091cfd0e6d15b716891b780f1e15b315051bf30d231574166e1b080f52154816951b730e2b151f16301b4b0faa14b315651aae0d9915af156a1a9d085f13c912771925041910e911881925041910e91188190c89ee037b072d120c89ee037b072d12368625105b11941a67872604dd012c169a8aff86ea850717f291d9928194c717dd894187d681911300000a02ef806e0c00000000728372030000ba8b93904512af90f0988d9b661b3e960c982b99a12207948e8ee7941722cd80e082fb8a2c13d6843d8ba48ffc15ee80d68d2e94491700000000368cb3120000000000000000000000003d88820db68b2d822b03ed16838e4308fa154f20328844838914881a0000ba00c11614180000000035195e1700005d0a651d671b00006c103d25fa240000af0a2c1fe71e00009d080419c6180000100d0024ce230000b206861aa21d00000000e212ff1800006a064211931aec044b12990c6921850cda1443863622c406bd11d28a3a207e04010d5a0593143c0a7211b90e04184b0e2216a3147e1ffa101d185c174d21a51189182918de201d115a18e7178b204910e217221807200510de172e189e1f371099173418321f2a10ed174f18d51e7b0f7c173918381e920f0e171218e21dce0eb4169317601de30ea016f017571de90f7f169c17201dc10f4a16d617041d760ff0152417931cba0ebf15f716601c5a0ee7141116db1b6d0ef3147915791b2f0e53153716a71b7d0e5b158616d01b2f0d8115b1158d1a04091014ed12ac18ca08f411f6121018ca08f411f61210189d8ae987cd0110159d8ae987cd011015448b110c3e09c11a668c17029387f818ba91a486298e851d209645952c98b81bba8d4788b182cb181684a5028b81fa1100003282c188050da5834a8b70908b141e944b965e99521ce9955d949a9562222e943a8f05955a21e58680877f8e3914b38b578bd1905f165581d28d719484180000ef833c8ab6110000000000000000000000001f830a0100000000708770070d87228015023509e186e582f60af60a00000000e0119a0f0000000062148e100000160415185c180000158a6f1d802200000d9868a02d1c000017855f11e61400009f0caa1e2d2100009c08c0169f1a0000f300281024150000ea019586b8162d80af8e7299ee1c18957598349cff160000be851d8a44110000920364842606c205560dce02f611940c8b1434103a1e980f46167713b5201410a8164e1498202a10eb16e7149f20ea0f381634153f200a10de16ad160720330fea163317671fda0eef16d916091ff70d16163417371efb0d2f16ee16df1d200e7a1556165d1da20da5153116241d700e2115c815cd1c570ef714b215bb1cbf0d74146315791cd40c1514f2144e1c070d1f14b614c11c050d50131b14111c690ba2122412621bac0b6d112d12ea1aef0506112a10d1198980e20e1e068b19c8042c0f25100b17c8042c0f25100b17c7886f854381d211c7886f854381d211ec885206bb07e1186f882b810e8786128788cb88c28c94127791ce913095bc134f8874844587a21100001401d080b70b00000000760021040000ae022e01ca0eba846901ab861918a594ad84998ca9220e959d90f3943f246e857784dd8d09120000258bac91ba140000f39065977218000065814b8dc310000000000000000000000000000000007e820000fb835481de8438007e847c07000000007d843d09000000001e02d50d00000000be0b300f8c80de079313e81600008a134b19fb20a980280b9715351b0000b802040f9f149e80b80dd21085204a822f049709f01900005f003484881300004b0511828e154a00810fe190451cba00b70a9c8908160000e108af897b110000eb05fa853201d105880dbf828f0f350bb212fc8a531e6e0dd314bd053e21c70d8215720f5b21a60d43160d113021560dda154b13af20c60d0d16c6146a204e0dce154d15be1f2b0dce15e514061f1f0d1b15eb14611e2a0d00155515511eaf0c8f146214941db70c8214c614721d610d7014a3144a1df70c5214e5140a1d220da513fa14a71c850c8b139b148f1cb60bb8129d13041c010ca0122813641b6e0a3b13e013a41b530c2213bd13181b170b76146f14841a82012e10750d651963835b81bf04e41863835b81bf04e4182c887a860f843e112c887a860f843e11768c140460058d1a338a19858a884b134a88238a658c2514d88c6390b692c71438859986248a9b10000000008182410800000000d3805a0000002581cb88980d86821988af8d9415e394c98dd89239224f95818d729454232d82a883608dac100000878a7591561300005390fb97cc1500000000f38baf0f0000000000000000000000000000000061803380338b1c81f6800000458bd507000000008f8b650a0000b080668d05120000a48342950a18c88987817283ec1929807314a811ff20b681a80abe0d9515f180b008f90bb2147000e610b20bd01e43064b0eea0d63190000d909520a671400002115fd196116de034f166d0be01cc608870fed0b5f16000023093d896e1100002f0449850f01c1035b0cec8a3a0ec8080513e490991fca080d14a58ca92164080a14948c9421eb098213aa051721c409f713be0b8e207b0a2a1462105820560a67144e111820e80aa414fd0fc71fd60a4314a612d81ee40a3c147811871ec50960131f122f1eb5093f130e12001e140a1a13dc12e21dc40a4e13c311981d870a0c123213e01c9a091b129d11ba1cd4087410c710e11b160860105610281b6107ac1061103a1bf0088b103311ea1a6e08fa11ea10871aff832c0bf085001a8984a701f905091a8984a701f905091a39881785fd861e1239881785fd861e12be8a1a0a120a041a8c80bd0ddf0d611513069a1298144614ef87ef0b680de314f284b306b70c42110000a200c980e50900000000758049020000b6800a891f0e0000ba88bf8e9e1601950b90bc9454227e967f92e197d52308886083508ef610000056863290fd120000798b61944d17000000007d8a3c0f0000000000000000000000000000000000000a00c087dc80000000003788d503000000003d8aab0500000000bf88bf0800000000c886160db186e706d4827a15e6832f0d7d907e1e3485f900e786e615a7841c010f8a6d176286b70bb190c91e8184e1015b90e61c000098049791271b000041010391981ae681c1828197141e0e83ac820e91301800008c80818da41200004b00d089d0095780e603928f471309019d0dfd93881e8581250f15945621af81be11c3924e21a401a2112b8f272157014611988ea820cd03e010f084492036019111090b11209c036e11a004032080031d116b0d601f7603e1105d0a181fb0039e0fda0c7d1e9b035c10870c0e1e8f05ec0edd0d9a1d6e050010610f7b1de408e40ff80e2d1df5061510270f371de505690eb00ec81ca404530f400e791c48041410880f521cc2082d0ff20fdf1bfa031b11100fdc1a7a871a08828c72195d80670a180cb2185d80670a180cb2185d8a9d89fa899e125d8a9d89fa899e122c8f3e856189771b1d8cbc87ae8bcd14f8882789308c18140a85b788598ad111e0835385e589900d0000028243870d0a00000000008574000000c184a78c5e0d0000d089bf8f5b151995e590a6947b220698e48adc915024000000000e89790c0000000096805a00000097841e8c2e1400000000a78ba70b0000000000000000000000000000000000000000a1877883000000009d88b60000000000028c1101000028001c8bbe040000d200858ca10a42879d04fb90ef15da889b0cc394f91fda84f3067b8bf21433822e06978cfa14c783590fba92461d0000930dd288511800008303e700170e00005511a010651514035d14368aa21be502760b0782f615000055043a8b701000002b03f08487034c80a509eb8ca5102181820fa091f31ea781c110c39266213285b7100d943321a384130ff090fc200e84b80eb590a92056813d0e65905b203781060e138b18202f81d00de28ad01f2881410d0784bc1e0f81090de883691e0181b00c9303de1d0281a70c7e839e1d0781860c6a037f1d0b01810c5f036d1d11017c0cf608381de3001e0a3603f61ccd80e7089a02071cc780d80879027f1b5082b30a8607c11b7f02140cb509101baa00470f910b481ac98885043f8e5819f183198152841818f18319815284181802883a89158cde1002883a89158cde10498ea48cf18f5d1a708b018a268c7f120000e087f48c8e1200000187278c9210508211848689ff0a00000000a487a407000000003c83a6000000db83bb8c2d0cda841f8cbc909c157495ba916f95e3234e97e78d9798fc2400000000aa8ba40c00000000000000000000cc80e280251400000000368c360c00000000d581248000000000f181f181000050803588a68000000000ef895f02000000006c8ac70300004780fc8a650700000b80768cd30a42871c8155902f143485550cb3960c1ef2824203678c9a120f827d06238d8612db87ec10c491631c0000270c838d96160000da04a0886d0e00000c0d770f5115ca8428103693931b9c87de073a8ea8160000af00aa8e621000004580e988bc812e8354813c912290298a5983bb95f61d068ceb837e96ea20108d0b840196fd20ed8cf083cf95ea207c8cce83f494aa20be8ba683c6946a204f8b8b83ca932820d08a56834a92ef1f8f8a10839d91f41e7c8be8826490871e938bb88225900c1e168cb6825b8ef61dec8aa482178eb51dc58a8e822c8c7a1dba886c82bf8bfd1c53880f87688de11c3788aa866e8e6c1c0f8928868b8c181c3c870b82a18c181cf7830402e78d0e1c1186d10da5022d1c128ca3899393601c8589e08dfd8f76198589e08dfd8f7619d2899b8b128d3e11d2899b8b128d3e110790eb8e7890cc19928cbe8c418e23142486e78b0f8edc1200006189558d2c11f6810186bc8b620c00004d82b288b2080000000045845400000052846b8ca90b000029889f8e30144495d88dd294b922a698b984a4915c24ee85ad006d89cc0c000000006881180100002a0227090a1400005c80a28a560c000000000000000000000000968296820000000029853181000000002588a801000055806a8b5c040000e7805c8c9e0800000000b489610730821381ec8e21143f8b370c8394b21e61857c03af8d4112cc88c1030e8f1e14718ca80ce194421eee8539019790ce1500008d00b88c330fd2849183b692fa152f883082c397111c7f8bfd840891df15000075810790760f00003e81e58a4883c2834481e091fe92b98c6383e395461e9d8f2d84ef965621628e2f8401974d21238e158408963021688dfb89c895e4200d8d9789d3949f20098d3289f6941f20bc8cf28844940420ec8dce8b8d94901ffa8cb88eb894e41e0c8dba8fe793731e968c828f5394341e8d8c5d8f8693081e228c208f3393aa1d048cf98edd924d1d918bc98ef8911f1dc289528ea291d51c568cfa8c8390621ce68a878b438f2b1c028acc85838dbc1b0d8a5705f88c8f1a668d848e74929e18158b21904e917719158b21904e917719388b498bb88de911388b498bb88de911fb8f598ef6901f1b00848a047d06fb124206321104130a12f882090cfa07c8110000ce806f848a0d00008583f98af90a00000000068677800000d081888a8608000094869d8df40c588a6c8cba90fb15df8f518e0a951e20cc8a5385ab8dc00e000000002d866b0200009d82d68a13140000f980458c450c0000000071833b80000000004483ac82000033002288418200000c006788cd0000000000d3836c0000000000d88540030000ff01da8a9b0900003407a88d8e142989cf0db792ca1eee86f202a68c8a117187ae02e58c3712eb8a2b0b3891ba1b00007604b5892e140000a50849834d0e5e02de0fe80bf214fb817412c48eda1b2882f00b938757187f80b608f18ff415000085018c8ae08040846301a8917193bf8dac8963981b1f158f3e8db49ad721fd8ffa8c6f99632152907090b198ff2030903e917e98b3200a90ef9137986820ac8f8d925e9716200e904a924b970c20848efa916497761f368f8692ed96dc1e548fbf924f96221e958f60923c960f1ef58f2f92e0959a1d078fdf918895461d6b8d8c91cd94da1c018d8a914d94581c428c10914b94401c428d8691b393251cb58c5f90a0931a1ca78cfb8fb191691b458c148c64912a1b3a8dc3902195b8193c8abc89f08dcc183c8abc89f08dcc18128b328b868b5415128b328b868b5415ee90129026914d1c5889548d718da01100004585fb8a7b0e0000b689228e4c0f268990882b8e940d0000b281e78a4608000000003786a3010000d087538e200c82835c8e5c9228154f9748969d99d923709863965c9a8125fb8c5b880e904f0e00000000e4864c02e784c7856d8d451400000000688a280b000000002984f680000000006687d200000043000b86ac0000004b00db87920300000000ba84a002000000007386a80800003f026f87f70b00009d0cde0601156081001701143d1e2905681593157c1796006f10180cf713b1830513e189791c00007105cd8c7a1400004f00048c3b0f3f82258779911615ae86108c2f95871ab98ab4895a91bc150000ac83bd8f3d100000a584708c89825b87e08b8a92f891778f88911798491e7791a9932c99382177914b94359aec20c7910d947d99b22038913e94fb983020a590f593f498da1f6c90929472987a1f109112945398451f4490a0944d98b21e81905c942598541e52903294ec97f11d8c9009942797b11d0990e093de96771d788f8a934196321d1590fc923c962d1d178fbb932f96631d3a90f593f295141d768f1292d194071c278eda907c94a61b548dd6906193731b318d918e7093ae1a798e1a931c962e1a6f8b9491fc92e2176f8b9491fc92e217b0904d926a92dd15b0904d926a92dd15a196de978c995521fd94c3974599b020c98eea900c943417098c738f1093ae14e184228c5890581000000184de8c220a000000008889670200008787a08ee60c1685d18e7093a31533962096a599d8212a97d09690995a24f38c47858b8eca0f0000298191878c059490c683d68174196d90689246976920d68c11838c8dbb1000004f80548a0b0e0000a4804686ab0700009a80d387a6090000d4807086e50a000084800c8a0f0f0000a4810d905318658b9b03bd939e20e090cb030a95f721008cfe01f791ac18a688b903648e8c14da8ca9092992461ded8a2e811b9028162081dd00778e8c1378800201648f4c158281a688f794ab1b918969863c911d150000cb841f8f1f0f00005f83588c418600894e8bc19325944a901a92fc98311e7d926e93a3992a217f924494989a20213f921495d09a05216e922f95349a7e20dd918795e99935204d919795ee990320d991b7954e998d1fb19175953199e61e34917e95e2985f1ec39001957098ae1d1891d19414987e1d5c90a5942398331d9e907c944d97151d8d9044940a97a61c1b8fb39377961a1cb28e58939295121bd58de4922795691af08ecb924b95f01a078fae92d0945d1b928f2191b094a31bc88e6e914c952e1ab38c759130945918b38c759130945918e790bf8e378df117e790bf8e378df117e4981b9aaa9b78210898d899f69acb214b96e2961099d11df6961798699a7520fe963897bb98af1d8794879612997f1f2e9012911494f116cf8c9392c695821bfc96ec97419ac321689a4d9a949c8d24239a2299fd9bec226b91228dd0910f153987838bc39024175c90f88b3c90b61a000098901e98cc1e3d8cb983608e96120000bc80de8b56120000b880a086a20d000074009283770c0000fe00ca820b0a000080021786920c05831007f486f015f38c0311fc8ca9211d91fe12e990ca231d8cdd07988dab19208bb1010191421a648d9583fc95cc205f8f588a10972e224a8bde85a990d918cc87e88ae29141197684b68ec0950f1d478ccc8d72937019a48d2c90d997641eca8cc48e3d945118cb8ca990f3954e15de90f3947f9a6d1e3093df960b9cfe20009415970e9c01214b9418982b9cdc204f9457984a9cbc203d94a6981b9c7420ce9314983f9b04201e93fe96869a641f13926896ac994f1e8e917595ad98031de490199590989c1c34911b9535989d1c83912b955f98821c70914a953898891c879176950498821cb19063954f988b1c549014959d971b1c2590db942297881bad8f66944f96761b598fdf939295731bab8ff99187953e1bb38f96925496af1ad38c1a9191924d16d38c1a9191924d16f68eb88f8b8f8c16f68eb88f8b8f8c160497e798569ac0200b96fd9780993a216e933c90c194d71dc997e796b39a192207975499939ad62230986599219cf8215f91e007038eac1cfe935c906a965d1d76983d99199c5022139c5d9a269d2724999899998f9c072386904b9052943a190000d388988d2f155d8f1801d8015b193d8d939275970a20ac8d08895f8cb51500003e820581dd0d00006c800881a50800004680d7808f0700005d00bb02190800007b005b83270a22828b8a158df0147c93c68f5395fd215994509337982f242e8ecb88d09017196f8c568bf2910b1add8d4b89ee95ed20e58eb9889795382153875910450a4f18820dd916c41825186a8fb30613939a1df88d8f8ca18fa219658e6f93a1981d1e718d2a91bb94fe170c8d3293ee96711430911a98299b031e1e94cb98219c2a20819405994e9cfa1fde942b99839cd81ffb945399529cc01fed941f995c9cd21fc1941b99219c471f6394ba98a19bf01e1c947898019b971e09945c98ca9a451ef89348988f9af21da6932e98569aa31dad920998eb99751d76927f979d99421dd191f39665990d1dc691bb960699c91cf090fb9581984b1cdb904a95a6974a1ba690a7940597d01a039133946b96c31a0192d192ae95471a009164936b96ba196a8f4a94989544186a8f4a9498954418f58c5e8c0f8ec215f58c5e8c0f8ec215d197729aa59bc32071977b9add9bb3201a98199adf9b7d1e5d99789c179efc21fb98d99c529eab225c99679c859e0522c18e100d8e89d81dbb93d9917b97f31d7499769cc79d69224b9c949df29f40242999479cb19ed4228c8d508ee99137180000ac82e684f713888de80a260a1b19078f2698729b0a20c08bda8a528e3316000083001b018d10ac85d085b68810157e8dae938298581f9c8d298a378ea4160000ce801489e4109b85f28b748e99166e911c94f49875217e94658d2799f422088c4210ac026d186088b619c71b1b181e90f4103595c321d292e3919299f622b88b7f8ef0925b19188c5e904c95091be390d196a19bad20f8928d96c99a002213939b94d69a0d212d0e151656149f1c91939795829ba42066945b98269c0d2137957f99159de2205b95b599099db02033959499f29c74201995a999c39c37203195a6998b9cc11fd3944d996f9c361faf94dc98d19b8e1e18947c98119bd11daf932c98ab9a641da4931098849a2a1d8193eb975f9af31cce93b597f199c31c16939197d899b01cfc928c979399b61c4692b696e6981d1c6190e1947b97061a08902f95d897511a1190da94a3977f1a7b90f0948f974d1af3908e941e97041ab090379541987b184d8e5c94ba95ab174d8e5c94ba95ab17bc8b088d4a8b9115bc8b088d4a8b911583986f9c089d412179978b9a439c1620f394169888993d1c47998c9c629e982188992d9df39ec122fc98619c389e8e21839522970e99761be9935e952898411b03955b98a89a9a1e2d95a796ed98c31af2940e9a149dfa1f988ed18ef2908e16b186f7871988a816b597ba9ca49e81213999449d9a9f56226386db874e8bf81400004e009502cf0dd083c882ab81111415918997dd9b061fcb8a8b8c0a90de140000c1005a816d0e1489258c4a8e4a15fe94d698529c5e2322973899b19c1824e78c188c268c43170a89608f4a18f715f9924f99259c8321d6959199169df123ef924d975e9c7622640d6d143e141a1bc491e296929b292115945c995c9d4822839444981e9d2721e48e7991dc96f71ad1933698b59c1820be945699e39c1e20d495c09ac89d3720f695ee9acb9d15204f96e79ab89ded1fe195089ba99dd71f7e96939a589d961fb6958f9a189d4a1f5b95159aeb9ce81e7095e1999d9c871e9795bc995a9c351e31952a99af9b6c1d6794a7982d9bf71c7f931e987e9a871cbb92c897f799481c989256977d990e1c1a9276978599141ce7915e975399231c0392dc96e098a71b7f912c968f982b1b5b91b1952698191b31928e953f98451b6c915d960999231b9291a5961198a61a9291a5961198a61aa40ed9149b150d1ba40ed9149b150d1b29951d984599911e3d97f899d69a031cbb9ac39ca89e6921759ba69dc49f7322029b8e9dc89f0a22fd99bc9cbc9ee6206497b799cd9b461bba95a898d59a501a0996ab99259c321d0e950c983e991e1828921695cf97bf15408de691d2944a1346902e9454958317b499bb9c199fa5206c9a2f9d19a0b1211f89168ee49093154583138169849b154998829d05a05a21ae98ee9caf9f4522bc91e2931596d219e297b19d71a08823079c1da000a21825349bde9e95a17e24eb990f9e76a168248197e098389e7222b811e3177217fe18a6915f99319d12211f98d29b339f9f22cc948099069d7221968aac90c9957c18188ddf95209abc1df5862c8dc8914b14b9805486a28e2f1040803381e38e6d0a80911b97169bc41dfd94b399cc9c10203c96439ac29db31f42967f9ab49d7f1fd795589a759d0e1f5196309a219da91e4e954b9a2b9d981e1195cb99c19cd91d3095d099a19cb81d5695bb995e9c861dd2948599449c2b1dc8943e99f19bd41cbb94f898ad9b941cb094a498229b451c6c946398d39a301c8e944b986b9a261c589444985d9a1e1cd0929a97a2997b1b6e92f796ec98951a5392bb96c098ae1a23929696a798681af1922d967498e019d9918c9787990b1a699117977098a818699117977098a818ba953c99799a9418ba953c99799a94189e96509b159c531e5397c099f39a1e1bb399e19cff9e3b21619a6e9d2a9ff921949a4f9d369fd521d499ff9c2a9f4b21369a459c819d9e1e3e9ad19c239fd020f799479d869f3a21bb9b4e9d189f181f039c619e7ea0d5213c9c059f16a11f237f9c2f9fd0a13623f39c809fb6a1a123079db29fdea1c823fa9ca29fbda1e623a39c6c9f80a17b234d9c2f9f33a11b23d29bed9e1ea1d522499bf59e3da17f22759ab89e74a18022a99af39d04a116223e9b659e55a157227f9a149dc7a0012188993d9c539ec91c4199579d4fa09920bb9a8a9e05a12822fb9a179f4ba14a22869ade9e26a10a22119a799e32a136221d99669d8da027217c97869c3d9f22208297b09bb29db81c76970a9c8c9e821f0398619c4a9f7620f297299ce69e08200e981c9cd09ed91f3f96729b049f8a1f6796549b009ed41e26960d9b9d9d481ec095ec9a5f9dea1d2c95999a2d9d981d18955a9acd9c191dec94139aa69cf01cf694d2995b9cd51cf5946599119c861ca3943c99c99b571cdd940399719b3f1c1b95a898f59a111c62947d98799ac01bc3934d98509a961b979243979a99bc1a7592429766997e1a8d92fd963999711a5b92f096eb985c1a22924896e298051a71912e96e098c418d18e72942b96db17d18e72942b96db17eb940c99c899aa15eb940c99c899aa1598994c9de89d8d20bb998b9c6c9edc20009b919e9ba07222a69b969eeda08e22339cec9ebba08d220d9c209f1aa16d222f9c549f09a16c22009c569f79a16e22349ca69f68a188227f9cc79fa2a15a22839cf29fa0a14022989cd59f7da105227e9c05a09ea10122749c10a0c7a1c721489cb79f8fa1a1211d9c919f8ba18b212b9cbe9e15a12621189bf79d8da0d020239b589ec9a09920599b509e4ea1b720379c8c9e0da1a920949b9f9e2ca1c620f49a0d9ebba06c20cb9a619e05a15520859a609e8fa18120619a5f9e04a18f206b9a1c9edea08c20209a059ebea08c20579a1f9edda0aa20139a429ef2a0e1207b99c59dbfa0d1204799b69ca3a0a320a098a09c21a041208b989c9c1ba02c206898a09cb09fd11f1898b29cbd9f5b1f0f98939c709f2f1f5497679c429fe11e5697329cd09e901eda96d89b799e5a1ec096659bf29d0e1e97963d9b979db21d4396db9a449d7a1df095b09afd9c4a1dd895519ad09c011dc495ff99719cb91c4d95aa99579c9d1c79954a99dd9b461ced940d99779bf41b8b949e98c09aae1b63944e98719a081b43943d98339ac41a2e943998fd99d61aca930198059adf1aa593f997c3992f1bd293ce97c999e71ace9234978999511ab790a79488968717b790a79488968717e68cc891ff95ff15e68cc891ff95ff15b299229d509e8c20759a209ecf9ffc203d9b289e45a065213f9b609e6da0c521729b6a9e72a0f721d29b569e79a0ab21719b509e87a0ac219a9b699e94a08021189c8d9ec0a0a0211d9c829edca09821199c539ebca08621df9bf39d65a02221049cd79d71a01f21649b369e92a00a21139b1d9ebca0f020469b799ee6a0c420369b1b9ecaa0ba20c99a099eaca09c206d9a489e18a1c220ad99b29dc9a19820e59ac39dd4a02520aa9a569d87a00b20609a3c9d40a0cd1f7f9a2b9d23a0b21fda99fa9c21a0ae1f3199099d09a0d51f0e99eb9cf19fb51ff798cb9cdf9f871fd198bf9cc19f871fe2989b9cb39f3e1faa98bb9c0aa0441f9b98b79cd69f3f1f8698979caf9ffe1e55988e9c599fe41e1498609c069f931ec597329cae9e201eae97159c839ef71d2d97259c6b9eaa1d4197029c2d9e701de396049c299e6d1dc796c89bfc9d421d5196989bb89d341d0f96189b5f9df81cef95959afe9ccc1cc695029aa79c781cad958e992c9c161c2895ff988a9b611bb194af982d9b2d1ba4947e98d59ad51a45948998969aba1a3d9463985c9a801af29365982f9a991aea932c98f4995b1a4a93f197b299591a12939b979399791a93931a975499301a6a927196cb984818d1919e9606989b18d1919e9606989b180000000000000000e68cc891ff95ff15b299229d509e8c20759a209ecf9ffc203d9b289e45a065213f9b609e6da0c521729b6a9e72a0f721d29b569e79a0ab21719b509e87a0ac219a9b699e94a08021189c8d9ec0a0a0211d9c829edca09821199c539ebca08621df9bf39d65a02221049cd79d71a01f21649b369e92a00a21139b1d9ebca0f020469b799ee6a0c420369b1b9ecaa0ba20c99a099eaca09c206d9a489e18a1c220ad99b29dc9a19820e59ac39dd4a02520aa9a569d87a00b20609a3c9d40a0cd1f7f9a2b9d23a0b21fda99fa9c21a0ae1f3199099d09a0d51f0e99eb9cf19fb51ff798cb9cdf9f871fd198bf9cc19f871fe2989b9cb39f3e1faa98bb9c0aa0441f9b98b79cd69f3f1f8698979caf9ffe1e55988e9c599fe41e1498609c069f931ec597329cae9e201eae97159c839ef71d2d97259c6b9eaa1d4197029c2d9e701de396049c299e6d1dc796c89bfc9d421d5196989bb89d341d0f96189b5f9df81cef95959afe9ccc1cc695029aa79c781cad958e992c9c161c2895ff988a9b611bb194af982d9b2d1ba4947e98d59ad51a45948998969aba1a3d9463985c9a801af29365982f9a991aea932c98f4995b1a4a93f197b299591a12939b979399791a93931a975499301a6a927196cb984818d1919e9606989b1800000000000000000000000000000000319c0d9bb898270c0e1a9318c91b2321a81d881aca1bc82162200a1a1f1bc7204a22991ba31cc7207324bb1b861df3208125391bd41c5c200e26f01adf1daa200027541b5c1eda20cd270b1cbd1f80213128e51c3c1f2c21d0275819701eea2082255716c91c091f6825fd198a21ce227823dd1bee24582509206617082708270c182e9eca26b028079c69a5eb1d31284a93a39fbb260b271b072a91ae288b28f90ede14a62b8128b010d6174f2b8827b60e0e177e2b092be310c814952c982a2f0ca5113c2c442b058978975c2b6a289a974a9e392a392a9e94569e012c0c2d400dd68e682c7e2c421342181d2cf02a71128919ed2af729b413451bda2bcc29770b90199c28dd269512021a3824d822cf11be19e41e0a1eba05fe18d51c551cf00ed219871c491ca213381b271df61cdd14841b1e1d371d9514161ba41c1e1dd213371a101cc71c5913ec19671b8d1c8c13b719271b651ce7127e19e11a541ca5128019771a311cc7125d19731a491c49121f19721a481c1612e918431a451c1112d3182f1a231c88117e18f719181cbb112c188019c31bf8111118fe183d1bd0100617ad18c91afc101b16fc17ae19e11048160b18dd19d41091165c18381a4d10cb160b18eb19b30e101700187a19590f2916c416a4190000000000000000319c0d9bb898270c319c0d9bb898270c0e1a9318c91b2321a81d881aca1bc82162200a1a1f1bc7204a22991ba31cc7207324bb1b861df3208125391bd41c5c200e26f01adf1daa200027541b5c1eda20cd270b1cbd1f80213128e51c3c1f2c21d0275819701eea2082255716c91c091f6825fd198a21ce227823dd1bee24582509206617082708270c182e9eca26b028079c69a5eb1d31284a93a39fbb260b271b072a91ae288b28f90ede14a62b8128b010d6174f2b8827b60e0e177e2b092be310c814952c982a2f0ca5113c2c442b058978975c2b6a289a974a9e392a392a9e94569e012c0c2d400dd68e682c7e2c421342181d2cf02a71128919ed2af729b413451bda2bcc29770b90199c28dd269512021a3824d822cf11be19e41e0a1eba05fe18d51c551cf00ed219871c491ca213381b271df61cdd14841b1e1d371d9514161ba41c1e1dd213371a101cc71c5913ec19671b8d1c8c13b719271b651ce7127e19e11a541ca5128019771a311cc7125d19731a491c49121f19721a481c1612e918431a451c1112d3182f1a231c88117e18f719181cbb112c188019c31bf8111118fe183d1bd0100617ad18c91afc101b16fc17ae19e11048160b18dd19d41091165c18381a4d10cb160b18eb19b30e101700187a19590f2916c416a419590f2916c416a4190000ee91628fd3800000ee91628fd3801e0dab17111af7216c16e1184e1b602209189218bf191d22b01ca11a1b1cf72164207b1c531e11230422871cdc1d5d227521f8190b1c25222e240a1a211ca2211f252b1c6b1d7023d424ec18ad194924bc24c51b7e1c7d259922910b9c07aa248f20ed936c13de24a01bd7967d1a0e269c15c59ac320802638977f9ee123e6283d92ee9c52283d291f92189cb528402ae38b3d9a2f2a9d2ad08a739a082b082b9a8b389a002c1a2b6594ba9d2a2ba32b7392b39d192d8c2cb68d869db82cb82ce99356a0ef2b022b4096f49fc52aea2b1695c79d5b2dbf2c158e459ca92de52cb992c09c182c2a2cbc8be4925f2b002bd2117f18302bc52aae107219d826e9273411081bf4211e24980ea415991326200b0f44183e191f1faa11d619d11a321f8e140e1cf01c251f8a14fc1bb91c9d1e4e14781b801c801eb413ce1a461c391e8413761a161c271e7a13581ad31bf31d58130b1ac51bcd1da112a319cd1a201d2212e518421ac31cb7119718b7197a1c381137188b19431c0c11101832191e1cd410c1171519061c2411b4171019de1b801108181919ec1b98100b179718fe1a5f1084168018c91abb108c167f18ea1af510ec168518021b1d10b1160f18401aaa0dc9158316d619da0deb148b158d18da0deb148b158d18118eff9236928f80118eff9236928f800388af162c182921fd0fa419de1bf82115111e1ac91b5b220d12c9198b1a5b22d519911bc61d8a235e1c5b1b211d05239d1d331bcb1c3123141e7218f819c023da1f301647180524281f4c0b0d0d8d248b1e728c4b8e7925c41b9b97149aec24e516f996669927256f94d09596965a2593942e900e1c08263594a7947221c6278690ba9457255828df8d8f950428d729fc8849946b29e82a31863b957b2abc2b3e8a7d96e32b182c1d900a99062b252c0402d397712db92cc0806595712d652c7d8c13973f2ce22b9985ec95252cf82b07021997cb2dd52cad881f97af2d602c798581972f2beb2a298c6b91352a352a08120f16c2289d2920113919dc228326b40f75183f1c94225c1070172f161120cd105f186517d71fda12171a621a012020135c1a211b911f5413711a3b1b4a1f39143e1b391cbc1f4714941b7e1c9e1fd313121b4a1c251f8813701a211cc31efe121f1ad11b7a1ea7128b19021be11d12120e19f4190f1d6e1184185f199f1c0c1127185a199b1ce0101d181d198c1cf810de172919981cee102417be18381ce210ec169818171cb810bb166718af1b6b1074161e180d1b0310bf15b417f51ae20f71157b17e41a9b0d74145415031acc09ea11e612c118600c651312148b18600c651312148b1899817e090511db0099817e090511db00580d871b841c2423d090e01407180b2357892218d31847239f929618ae18ac231e03fd1ab71c3c25a183f11a4b1c7a24da0fc019f419152451119d159c158e24b712a20ee7064a24ee1042938691e7253b0408976d99f0246901c28caf90b3179192c793df96462318998496199cf82438978785b895f7246197aa945f10f8255d93bf8e3e21de27618f860ed025ee28e38bb7139f285c2a7289f010032a412b2e816714702b252c050c25183f2c7a2c4f1010179b2d282df5088615552dfa2c5b1053165229932ad60ce30c41282c28ee0ca1129c2b582b4a103b11372ce02b180c27158a29792a880d030e0e283729a910570f5624db276010dd14b41db7240110ad17ea19bc2203113f181619e1202110ca17fd16d320e711d118c7183a21aa125b1987192721d211401993197c2063129719f1193d20d1129819521a0a2034126d19311a931f1c12f318d619ba1ed211ea18d8195c1ead119f18aa190d1e5c112b188519c91da410d617c918ec1c7610b817ad18b91c0e10a5160c18011c10107016fa17e61b7a10d6161a18101c4210a5164118211ce60f3716ef178b1bfb0ff715bf17381b820e00158416d619f20f421536177d1a770e5815b6163c1a830c81144115091ab90c5c1453147a18b90c5c1453147a18e9813b0cda0ba40ce9813b0cda0ba40cef8b24164a163721e7856c175f18f421f690811795181223b094a816f7164223619103182219ff22629276159c132821a48dee11290d411eaf945f0f188cc3210496030c24909c231f97920c318e1025fc97ba9053970e245f8f768f2d93711d459ae4962b9be622699a8a98ba9d6d2484977e840e99ec22058eb787868b8f1c3a948f92c48f7d24d393248b4f2093279b907016ee25ea28078de1135928e929d68ac7133e2a012cfc010f17bb2b862cf80f90184b2d4b2d480ca9151e2d342dda093814a82a6a2ac00d57138324d5247c080d11dd2a6b2ab50b4f134a2ade2ade088503af28de29a30cf01137253b285a0cdb0fc21e3a265f0b2312cc87bd238209ef11a890b320010ab70f0a8b211b250c8114540aec1e451008177314012104117718ef16c020db1065180d185120ae11b21839181e208711a318c81805203b11ae18f618de1f281171180e19101f2411531899186d1e3111db177d18da1d5b1134171d18441dd3108c16b517d61c4b100f16f017c11c0d102916ab17811c0a0f27168017511c920f2c168b17581c1d1053164917311c050fa2153e172c1ca30f3a15e816f41bd80eeb146916871bb90e49142b16e41aa40d9e14ba15c919d90cf6147615f018d90c401475148d1ad90c401475148d1ad987ee8d228c4e03d987ee8d228c4e03c488430ec50e3c18ce8f8c10310e4920e3921a146b14be2274950c143714ee22609407151215cd221794a3136611352101949d0d228a531ef0963d84048feb21e399c9962b9901247f984691b2962f256e990293029a58248892868f8a95e71f2b99979193974b23da99b697249d8d24c096538b3c9a4c232b927706378c531dd39398049e98f2232792ee0ec5098b2562934711831fb227de8d7c140f244d28b0010119e927002ab309c219e929602b210df119b82a212c6f0b4517332cdd2ccb0977168629142ada0cf7124122a523e70775145829eb29fd0cba17ba28df29420a23141b25a728f40a73132a20e3269c0b0413a7127225300d241598925d23ce09c412ce93ec20b40bbb10e18c941b980c7f14a9841e200e1027173811bb2111116c1824165f21221165187817c0201d1119187a174d20921080177a17d21f4c107e179e174b1f67102717c317d31e6c104c172a187c1e7610e516c017ec1d2b10ad167f179e1de30f7b16a617531d360f4716ea173a1d760f19169e17071d090fe915e117da1c3b0f891564178d1c100f0e159916101c3f0e03157216f01b8f0efc143916071c5c0eb3149416211c040fb8140d171d1c3b0d38146515ed1a590a8e12a5125718ed0c2b1471146318ed0c2b147114631897817c034b04a70c97817c034b04a70cb08b100d210c6119438e780cb40df41d1292a40bc30c901f1a9567098384b0203295d50e630eb52109950710f70ac0209f947a0cc48af71f67972b84dd90f321b399bc963b991b24fa9900973a99f2242b9bad96f699ec23f1961a90f6961a20d29ad59251988d238e996192729aba241097770b36983f23ad94678245911e1dd394b30f5198f023ba93c4102c9937259093b00e59928325e692c7855218ec266a8ebf14d92099278b8aff149c24da280f075617ea26542a1606a3173029132b7b029c0c28249b28cc0e4111121e2a218c080c15c2245f28010c941643241928f70830162321cd26ca81ae117d15fe244c8d178c509c7c240b8bbb84749abb228d8032036d969c20a084dc0a7091461bed0708122890f11fda0ca814ef856d21e40e421603112621f40ef4166213be20780f2317d0147420fe0f78173e154820540f78171116df1f4d0fce160316201f0a0f9f160f169c1e6d0eeb159c16191e850ec2156016c51d730e9e158d16711dec0d5e154a163a1de50d1e15d815c31c2d0d5a1470156d1cc90d481447154d1c490df813cf142f1c910d16140115ae1c740c9813bb146d1c700bd811ae12551b0e0bae109d12d01a2407330f091047195903ed0f2f0efa19cd0bed122512b719cd0bed122512b7198082e5802081a1058082e5802081a105528c7d04b205b6171a8f8d06ce82201dfc919782ad8d871d7c975a89bf8fac20e695240f4d85ec2155951810d2840321d2942c0c058ad61ef396940d788f6522fa982b8cd4952c24e199a1943698a62598998b923f982724ff95b48dc693f61c0f9af192f7984a23fc991a964b9c9224ff9625944d9b02233093f7852590a4145191470135904f16e194700a9398ec228695a6107699112518947d118299d2249e92310cc795d1251d929e0ff718ec26eb8d3d15ba1fc8276087b916b121892809867f126120ee25e5817f0e77180320688173121c1b6e26d089ff10da16da255285e30ff3949324a08130113397dd238f818e12ac9807242f039910ef962b22b402631019958b20f403920da190921b390819113892901fa008ef113a923c21e10b3414418f65217c0cb714c30544212b0d8b15ed0efb20700d7c163a13a420480e0b17a8144f20370e5d164c15bc1fd70d30164315d41e810d3a16eb14431e7d0d94153b15151eea0ce5145a14711dc70c7414b0145a1d940cf4139514211d940df413c714d31cdb0ce3121d14841cf60cf6128114751cbd0b9d12e8132b1c000c1e12bb13131c5e0bd9112c140c1c010cfd116f14b91b7509a9113e131a1af50344105b0e121982083411650ffa1982083411650ffa198e82e3883086e2808e82e3883086e280678d0509d6056a174c94e188b88f45216896e88d7f922124c098c9913b94282461970c05b5910024e295e7834b93c3210096048379916c1da297bb8d6995a022b698e6906e9757249599a69361980526ba989b8f1297972418975d8eaa95151f47990693a5987723a29920953b9c1624b295438d4898dc218e924301ec8d38166b914701588ff51764949c05c59936230b96b006809b2d257295c10f6a9a892556942513f799c4250696a10fb49b6e25418cec18bc1218254a85c717591710246e800b0b4e0d34152c01fe0c1e0ecc186304f113b5108722fc012615278f6f24068b1e156198b5246010a6197f088924bb0a9616a9952624d60cac155092ef2240034f12049528211102eb0efc90f41b1c078811929110204c08121381944b2239086e13ab91392281070513878f992129098a137685e720a009ae13fa0464206d092014f20d21209c0adb132311c71f580b1b14e410451f100bff128311941eaf0a7e1355113d1eb4094d131c120d1e79090013f311c71d3a09ec11a311791d520a421259123d1d8c090f1106127a1cb60a6411a811c21c6f091d11d5113e1c1b086010a4111b1c3c08300f5b11cd1b3508d40e9a11981b2306630e1210501a8c00ac0b8005de1864087c10f40c1c1864087c10f40c1c18be8164826b83f907be8164826b83f9079a8dda04130278185f92eb0b2f841121c09226140a126d2322975d0b1206eb23e195c211f00c18242f966d8465916822f796db837393871fdc98859070969023989927941b99b7241c9a77968999152614999693899825242898c18fc595cc1e1b997f9020988b2363994d93269a85243996b58d879850221b92ea83338d4c1579906283398f431649941c0bde98c822b595bd0fde9a4325bd951f10339c0226a49443138b9a92256b928a1712985d25fe903918dc96e024478dcd14aa95e3228b84b709fc8adb170f872608ce8ea5195489bc10b395fc205b848910c497da20d387e60e2c93541da188bc109997402180882e0e549a4923b2893b04fa98382261855a093398cb203e8452094892d91bb8832c0c0d950c208681420f0296f6219c81cd101f95aa218201d410d59275218001c41100910c2156012a116e8e8b204b01a4111a8b1b20470183119984d51f370645117004901fae0348106a0a491f9703c2103204041fa3032b11e709741e5903c9107a09ff1d1903d90f330c831ded02920f070c2f1dbe066c0e6b0d141df706a20e820d2a1d20061b0e7b0ea31c0106d60d2f0e6c1c2304850d650f3e1c5007300d9b10e71b3b02cc0ced0c5d1af1827109098206193208aa0f410c1c183208aa0f410c1c1802818185008825810281818500882581608ffa89398d6d18719548904d932e22f09706926395a3241798688e1b9526241898728e5395122493961290d895de224e97358e9d94db1e9f982790ad971f2354992991ff989c244f9a0c944a997e26d398908fd29462242792cc01128ed4141194938bf78fc81728979090f2945e21c993d603af97832172923a84538ffa156e902e8135901716c0943385db986a22c897df06429b5325d496c50d7f9c852694969a12429c5926849406149d9b00265e93a514429a6525b6906613f9971b23f587750ca98f3318d3882a0da991831aca8bde112f96b02056841411bc94252072842111b391351d290141147b92d120858118141f970f2377018b135e94b52169837211e6943420b282cd0ed6900c1cbb83001110942e200385e8116d94fc21fd8408116494d7218b84de101f9464218484ba1071920e214284160fc390cf204181451084907a204481d30ff18d0c2043814d0f958a791f3081ba0eea89771e1881ee0cd383471e1b81b80ca183d81d0181760c71836f1df9805f0c5903491d0201650c5803471d05015f0c4e031d1de800140c2203d81cdb006009d2025c1cd6006206b902371ce28011020508251cc700bf051d0a911be181fb042902011a5a864184288ccb185601ec0718895f175601ec0718895f1700002083378691800000208337869180d68f2a8bd78f431797965b934d9657220898af952c99c12489984f94e5987f247598fa937f98c523b496419458987922e297659182952b1e819895928998a82243997c940e9af824459a8d96a29954275b9858944599c0246b929989bf905f14e193548957914d178f95c78ef393bd2167948a8acd96c021e19321886490c7146a928585b5915c175696678ca3982223ea975d87ce9aa22595973a07e89af72504976810979ac4257b962012369b7225a6951d10e79ad6243792a40daa990f22c7892008c59153181588360c0993ee1a328c6d122f96cb20c98ae8127a953e20358c88116f94521ef68c220d7d917021988d9911f79846230b8f450ec497e822eb8b510d28984c21f1894302fb923a1b998ccb0396960920f18d58042a98e621ad8d4804d9977721b58d0b04b6961421ec8ced03bb95d9208b8cc68387959720678ba78353955820428b4f898a943320b98aff885993b41f68891683b092e21e868a5a885191761e8f8ac28214910f1e968ba8820490dc1dae8b8f82d88f9c1d4d8a7c82d58d5d1d9b895382718de71c8988e486f88ee31c5388a186a68e931cc0873e8bb68c401c7f870489ac8c361c1684ec888b8a361cd086ee85be87a91bff89448cea91ed1a79817784018e7b1979817784018e7b190000eb8723895f820000eb8723895f820491998fae9120183c97dd940298d622f898dc96979995249898c994ea981a247f9885945e9843236b96339340983c223098e892d896ea1e2b9806955299f3225199af94459a7f2477998395639aba266d98c994bb9690247894478b1a9141152494f58b2190b0172596178fed90ac218694768a6197e02185942a88e490e615e9910a82b691f8178696318ba497e1215498048da59a2a254e98cc8d319c5426e297b0872d9c3826e196d20cfb9afe246894990fe1999524f391390eb0981723df89db081e92971847875308a992901a8e8de70ce7972621648dbe0e129753208d8e5e0bde94a01dc48e4d0acb9839214f90560bb19add2232904d8438991b22798d99035599d320388ace81b493641ae58da4031e98142000906f845a984522c98f9f843398f221578e6c841198aa21078f4b84fd966021a58d1484e095f7207c8cc883d1948920528c4f8908952e209c8c198cca94f51f208d088f8a94681f4f8cb18eba94c81e978c5a8efc93661e678c1c8e5394171e358c2f8f8093e71d2b8c068f3a93941d848bed8e17935e1d6c8bb38e09922d1d118a238db891e91cec8aff8d7d90721ced8a858c198f271ccf891f8c3c8cc91bb68be089f08c1b1ab08e048d4c913c190e848a846490851a0e848a846490851a6181b486da88a5826181b486da88a582ad8e058c878fa7171c96e793fb9598215696b891c2954b245a99d195389aa424a998249515997224e3987994d498e82235986591cb9607203f9874926e9813239f98b894579a9b247c9807955b9a1e2569975695389961247095388f87946d17e595349074952019c794ee90399649214194ad8cbb965c2136932182d491af16ec92630208928618f095680c1c98f4222c97731263996d251397df13859863258c9698159e9894250a96a4159c985725cc94aa149898f024f893ef10e2967a23268dcc0b279269181e8ae9082692401a888f020fcc95e120a68d060fe4934220068ebb0e6d92df1d588c6610de93de20118e32119596a2228a8b3b1107946e22c68c790fea952d21138bdb06ee913c1b2d8ed8031e962620799093846f9863221690c08ab69930221190468fe3989e21eb8f6c90be980d217e8f4f908398b920f18f0891ce975520788fbb915c971620168f6b912997f31fe28ee3914897591f648f9391c396b21e478f27915b962e1e7c8fc4903096041e45909b90ce95891dd78e269067950d1d5d8eaf902295cd1c338d6d9053945e1cb08cf3905294461c1a8d0991ca93311c8a8c3c91f7921b1c668c7590cf91b91b4f8c40901392941a1d8cbd8f08936d1876802808b687321876802808b6873218ad866d812a05750ead866d812a05750ee695aa94fc950f21eb95559501989f2026955e943696081dd197c595269909212c997197709a6522b097ca964b9a9221cb9851956c98e31e5e982597cd9a4b2239992798269c3b244d9a43999f9c7b26c6981296d29ab5244190748a2c902d122193978ddb9269168c96ce8fe0973c223796a18b0198b222fa97150d5694da1df6966b124896ac235f9750141e978d247a9660159597112522979715b2975d259c968c1579965525bf9571168a964f25449449162594372565936917049200250d8dea1738070922af8eb2111590a21e298d62146390de21b78e220fdd94a120ad8e740809954b1eb58f228af09920214f922491c49a62225691f390739afb21a28fbc90ea9903212d90068e9b95841c12909c8e579824203b910d917e992722c390129023991d224d90bf8fe198b5217190cc92e39834211d902f92b098922072905893c89805207390409474987e1f4990789457984c1f0e90a3946298b31e2f90c6942e98641e01908a940198021eeb8f61943997bf1db58f3594fd96741de08fa193b896231d0590e592ab961a1d6c9016925396271d7491f4917496271d1e9019922495641c528ef5919994d91b638db791a593e01b858da3912994871ad18d9c914995431afe868d8bb391bb18fe868d8bb391bb180000ef8c5e8b800a0000ef8c5e8b800a7b99849b9c9c1323059af39b8f9db624ee99549b079d7624ba99f399769c2824be98b5989a9bc222fc97ca96709aa621009880945d98f11e1f987795d1990922a9989396279bea23af996698f79b08257a98b195439ab82386917d8a67908514d0910d8d4090071765966d9258944522ca9665947199bf23d997b38e1194161de197e40c90988724d6986d0d7e9833254e98b10d3c9add2555981511669b622631973213fc996226999750145398c725c296e9131a979c2538967f14af962125bc9474141996f922df9270104194231e5e94851109980f2346948a13c9989e232c956013d69969241094e611499b3d2473940d8e279d1e24d992368e449bdb227c90318d6099f520f2902b8cc1949a1a7a90758f0c98e71edd916791919957216b921394b899e620f7917b94bb9ae1200d93e095049bd520af929796ed9a78201e926a969e9a32208e912b96029afd1fa391bb96af99901f1591f89558991b1f0691d995de985b1ec4900e956f98ad1d7d90f694ed973c1d54907e940898f61c3f9099947397d31c8f9090942b97a51c1f9086946197af1c709021944a96fc1be88e43937895f01a448f629372954a1bce8e5f93d994901b1f8f80932295d21a468e31915a9429192f893c8e7a936f182f893c8e7a936f1800000510ea11801100000510ea11801198995a99069b3d222f9b679b239da0232a9b159b399d8322809b069b769d9523f79a119b0d9db9222199aa99269ca622af989d9768993b1f8e999599589c87233a9c389b8a9dfc24f59cb79ab59d3c25b79b4f99499c332435991f944d981a201d991e96fb9919240d998895bf9886242b97c7909599d5230d98269034951f200498eb8c5299a7247a975a0d4a995425f996a8125c98e9251e97701690972526229663180c987c268f965e18d294122624951d18c2923626da9459188592aa253b948218049200251895fc173c942d25c8946d15d89717255a943010269a4c254f95878c829a43249d941f91da9a692490941392129b4c244d94a091239a0923fb931091379ade226e932d92e7993d22db935695b49a75215e942496e99b7e213594b696239c54212e948697369c1d2133943b98479cfe204d946098279cc3201b942198ca9b642089938d97279bec1fc7920497d49a6e1f1f9287960f9abe1eb891f9955b99d91d6791b59510991d1d40916c95a398e01c329164958698a91cb59169957198c61cfa917b954498951c6f91fd9421985a1c4991ae947097021c7d90379400978b1bf08f2994a1967a1bfb8e3894f795921b538f449462969a1a04904f940197c91a9e8cbf9175955c1a9e8cbf9175955c1a0000150dc30f22120000150dc30f2212d097a999ae993422dd99b59bc29c4d2367992b9ba19c4923ad9afe9bad9d4224049a009cd39c1324819b749c369e2224429cac9ca99ede23659c2a9dba9f79246f9c6d9d02a00625639cc79c209fef24399c9c9c199f2325e99bdb9bd69e52256f9b6d9bb69dd125da9b379a329dcc25ee9acc982d9d7926e19b0896369b00267a9a2396499c4f264c9dc58d63994d266e99de10ff988a26b2987b15cf94be261397b2173590ca267f95d518bb1245266b954b19f512bc26cc949b1823106c26e794fe182d09b425639417165394c0251595b8136d95c425fe9410133d9635253d95ea1371953d24729312159f9012240996ad918e9abd2353966b94399aad226496e397c49cbe22819512985e9c92212f952199ec9cf620a395e899619dc820f394159a299d6e20d294b299e19c5120e1946399b09c1320f09442996d9ccc1ff79422993b9cb31fd494f2982a9c331f2e94ac98a29bd21ee793b5984f9b691ea9939e981e9b3e1e80937f98e29aec1dc2924e98629aae1d6c92f397269a5e1d0b92ab97cb993c1dcc913a97a8991b1db591e6965399fc1c2f917296e098a51ce390be951298c31b0091e1942b97f61a37913694ad96071b189365948096281acc907392e196bb193b8c1f916d95e2183b8c1f916d95e218b802b61110141e0cb802b61110141e0cc3979a9ab59bd921069af89c8b9e3f23a19a679d3e9fcd22549b8b9d809fa0238b9a7a9df19e3c23b39be99d01a05d23319b569d279fc0233c9ca99d1da07424209e3c9fb0a0ff24bf9d1c9fd9a03c25fa9c3e9ec0a05225059c989cc99ffe24cd9ad59c3f9f7f25169b229c389e9e25849bb79bcc9eee25de9a6e9cc59efb254e9a7e99f29cd226d29bb6994d9d8c26b89af999f99e4a27c2982091a09a952668985491ea9a532798964a88af98e4261898c58d8e997d26c097c690399c76267f983697619cf62557969490ca96bf2594975598989c24263498ed986b9dc425df97a8994a9d56240797c198229dea234d9798985d9dd62385960a99069d3c236a96e598309d6a22ca93ee95de9908214295bf990f9d6b217995eb99f29c2621d4955b9a589dfc208595139a239dc9207295e899fc9c7c201f95a999d39c322010959399ba9cb01fb2942499689c091f6394ad98e79b4f1edf937798469bb31da1932198f99a771dac932898879a2c1d7f931198589aed1ca4931d98209aaa1c1f93cc97c699a11c4f939397de999c1c63929597d899a51cd99252962298a71a4c9127962698ae1a6c917f950698da1ad5904a958197c11ad8907995af97ab193390449569982d19788d8b920d962019788d8b920d96201957056c138614690c57056c138614690c60984e9bc99cdd21879a0a9d589f8822269a959d769f9422339c3c9e38a0cd232b9bde9ded9f6223099b769dba9fe422c39af69c229f7722009b0e9d349f3f232c9cb49d26a0ce23469c049e48a09d238b9dc09e20a1ba24159e1c9edea08524679ce09d76a0c324589d28a014a22f25239d939d98a0aa25319ba39c919fd0255c9b8c9dbfa05126c59bc69cd99f2e262a9cc89d09a1b3263f9ae099199e36261f99e699f09dc7267e992a98329cd2253c99c996429cd326b1981f98b89c0c26ec98a997cd9c40257b972c99cb9cf5241698a2977d9efd246e98769a41a0eb24b898f29b4ba071247197a899449d8e220b97a99aea9d172374966a9a009e21230198c89bee9eb122b8966e9bd69d7221ec96d39bb19e69215196299bd49dc8206c96459b279e982046961f9b0c9e56200b963d9bdf9d1120cc95139bbc9df21fe195329b769d9e1f8195d89a3a9d581f67955a9a079df01e43951b9aaa9c7b1efd948e99469cfb1dbf942999d19b5e1d42949398f99ad31c15930d98509a671c8e927997049a321c5d924e979e99081c3e921c976899fd1b229202973599ef1bcd91e496f298891b549151967f98351bf090cd950598041b4991de950f980e1a3890e794b5975e19238e3294db966c19238e3294db966c19d5119317ac191c16d5119317ac191c16c9961a9af79afe1f9a9ac89c709e4c21e39b379e18a0cc22359c659e62a0f422229c659e64a0f822ca9b289e40a083220e9bcb9dd79f3c22f59ac09dc39f6422669bba9d2ca07922499bc79d27a02b22f39b1e9ed4a044236a9ca09e2da16e23b79c649f4ea164231b9d00a061a23224c19c5e9fefa22a24989b2d9f55a12324969b129f0fa13724499dc3a0f8a2b624269c89a0c9a2de242c9b469e40a14e24819cd39f0aa22c253c9ba89e94a1ba241c9a809da8a086248c9ba09de5a06524be9c139f03a2c8240e9ccc9ccda03924de9aad9e9ea1da24379aa79c40a0c023fe98309d89a0ca23ae98c89c84a0d9220999d19c61a004237098099cbf9e98219c97e19b9e9e1821a296c49ada9d3c200997389b299e6520a196fe9ae09d2e20c596549b469e1a2075963e9b289eeb1f5996129bd09d611f2b96ff9a6f9dee1ec0955a9a439d721e5a95139ad39cef1d3c95da99cd9ccc1d2b95e8998c9c821dea946d99559c261df6944d99fa9bc21cd394ea98a49b8e1cd094c8982a9b4a1c7e948098d59a321c1b9462987c9a151c98932a982c9afb1b4e93d097b499941b9a925c97fb98cd1a7b92e696d298eb1af99177968998b31a4d923d9656985719ca9055955798ef18e18e7b940a980119e18e7b940a98011945021d0dbe10281045021d0dbe102810bc97ba9a439c76202b9aee9c369f5321429bd59d21a064226a9b3e9e3aa096226d9b579e35a08f22049c339e73a07622349caa9e65a0df21649cc49ebba08f229c9c259ff8a09d22ae9c849f05a19122cb9c739f7fa13323229de69fb8a11e23349db39ff3a119235c9d0aa00aa21923459d15a01fa2eb222d9d19a012a2db22e09cf19f03a2c722699caa9fc6a15922239c649fa1a11b222d9c3d9f8fa1f421269c099f9aa12922239cb79e68a10a220d9cd99e8ca11e22099cad9e28a12e222f9a5d9e87a01d21449bc29e2fa11522679bc29e95a15c22619ba89e71a16222069b759e3aa1e021ca9a849e61a10f22009a0c9ef0a095210099909d96a034210898ff9cc69f3b20a1978d9cc39f7f200798969c839f602016986c9c4d9f1f2041989e9c4a9ff51f1198529c579fbf1ffa97399ca49e451f1397d59b279ea21eb2964f9bb69d0d1e0496ae9a529d881da6954d9a0e9d291d5895199ad19cea1c5295e199a19cd31cfb94a299469c8f1cb1946199149c711ca1944499b29b331c5c94f398049b191cf9938f989e9a921b19947798969ae31b6a932c98e199111b33933398ce99211bba92fa977899e41ac2914b971d99e31ab691f5961199fd195891fc96ad99ad192690349410975a182690349410975a180000670c4d10100c0000670c4d10100c7798c89bf69c5620ae9a999c919ecb20d89be59eb0a05722fe9b049fd2a07122379c349fd0a080223e9c349f14a151224a9c509f15a15222509c6f9f61a15622589c9d9f74a16c22659cbd9f93a14b22759cd89f8ea146228f9ceb9f87a12922469c8a9f54a1f3214e9c369f22a16e21c39b0b9f2aa13c21a09bc59e03a1f020839b889ecda0ac20e29a2e9ea9a05820189bfa9d85a008202a9b9e9d96a0da1f5f9b949d8da0b01fd89b5e9d77a0bf1f339b759d81a0b31faf9aa89d9ea00120f399bd9dbba01b20eb99ac9d7ca00e200b9ad99db9a048204b9ae79dafa04c20349aff9dc7a06220719a1c9e01a19720e099c89dd8a07f204199279d94a03e20b198af9c04a0c81f8f98b39c23a0c31fad98d59c02a0811f7c98ca9cef9f4a1f5398a89c9d9f1a1ff197689c949fd11ebd97269c059fa51e4e97c69bb69e591ee8965e9b239e061e8d96229bb69d9a1d2e96e39a469d611dea95949a1e9d1e1d98956b9adc9cf51c7595209a9e9cb61c2b95be995d9c8c1c33956d99169c431c99940499ba9b071c8394b198ea9a881b82945598959a071b5a943e98479a001b65945998169af11a22943798119a101b87930d989a99fd1a1e93fd97af99f3190c92ab960899451992905194c2961a1892905194c2961a180000680d080fab090000680d080fab09ff99799cab9d7b20b29a419e28a02c212c9b3e9e4da05e21bb9b6a9e66a0af21d99b949e8ca0da21fb9ba49ea5a0d121ca9b9e9eb8a0c221f59bb89ed8a0ab21f49bb39ee3a0b821e79b999ef0a0b2210d9c3c9e95a04721189c249e65a00021d59b389e60a0e9207a9bee9d5ba0d220f99a9d9d37a0ad20e39a769d1aa07b205f9a199d04a04220f899f59c15a02420349abb9cc79f33209399b39c2aa03b20c599a09c03a022205199659ccd9feb1f9d99759c01a0a91f99995d9c9b9f7e1f6799899cbd9f651fe998829cda9f651f97987f9cb09f211f92987e9cc19ff91ea0986e9cab9fc51eaf98869ce09fbe1eb698b89c37a0cc1eb398b69c03a0da1e7098949cce9fa61e5198969c7e9f761e1f986b9c299f411ef097429cf59ef41dce972b9cb19ecf1d9397239c999e9d1d8297089c629e6c1d4597029c439e4d1d4c97bb9b229e301dfe966d9bd99d201d9d96fc9a699d011d1496549a049db91cba95cf99b29c821c80957d993c9c101cf594f598939b6a1ba094b798349b0e1b7a94a998f09acb1a3e948b98a29aa21a18946998719a711ab2933898459a681a95933298ff99671a2f931598c2996b1a9e92b2976f99751a3e9390977d99bb19d591ef9623997618e5911f96b8985419e5911f96b898541900000000000000000000680d080fab09ff99799cab9d7b20b29a419e28a02c212c9b3e9e4da05e21bb9b6a9e66a0af21d99b949e8ca0da21fb9ba49ea5a0d121ca9b9e9eb8a0c221f59bb89ed8a0ab21f49bb39ee3a0b821e79b999ef0a0b2210d9c3c9e95a04721189c249e65a00021d59b389e60a0e9207a9bee9d5ba0d220f99a9d9d37a0ad20e39a769d1aa07b205f9a199d04a04220f899f59c15a02420349abb9cc79f33209399b39c2aa03b20c599a09c03a022205199659ccd9feb1f9d99759c01a0a91f99995d9c9b9f7e1f6799899cbd9f651fe998829cda9f651f97987f9cb09f211f92987e9cc19ff91ea0986e9cab9fc51eaf98869ce09fbe1eb698b89c37a0cc1eb398b69c03a0da1e7098949cce9fa61e5198969c7e9f761e1f986b9c299f411ef097429cf59ef41dce972b9cb19ecf1d9397239c999e9d1d8297089c629e6c1d4597029c439e4d1d4c97bb9b229e301dfe966d9bd99d201d9d96fc9a699d011d1496549a049db91cba95cf99b29c821c80957d993c9c101cf594f598939b6a1ba094b798349b0e1b7a94a998f09acb1a3e948b98a29aa21a18946998719a711ab2933898459a681a95933298ff99671a2f931598c2996b1a9e92b2976f99751a3e9390977d99bb19d591ef9623997618e5911f96b898541900000000000000000000000000000000789c129b21986514f61d7c1a311dd9210d23be1dda1e76229325d81c0d1e15223b27001d281e31229628351dd61e492252295c1d8c1f3122dc29511e1d2083223f2a851e2a2058224e2a0f1e48203e228c2abb1e1f205422ae2ac71b5d1fbe22562abd1d1621c3266f29e3968c21f8266e275b9ed02308271a26c71b4329cf277924121efe2b9d2964203d1f522c6c2a951b7d1dc12c952a1415871c002d492ba015e91bde2c062c77161c1c7a2da02b6b155f1b712d0c2c1117e21b832d612b8815651caf2d522bdd15f01c392e5c2b51186d1d832d422b6c18ec1b9e2da52b7514c2163e2d642b970d39154a2dc32bd88ef093db2c4f2c9314d119b12c872b7414f61c252b22290c16ef1c6e27e9259e15fd1ab621a6201914e81ab51de01c0912871a121da31cad14771ba91d421d4415661b6b1da01db614e81abe1c751d63148a1a661c311d1d145d1a451c271d06143e1a1a1c111d4313f019c31be91c27139a193c1b991cb8125419bb1a811c5312fd18701a4e1c1112dd18401a1a1c0112a518fd19091cb1118f18d119071c1a126318a919ad1b281239184219541bb311a217f518e81ae010d2167118311ab610e5165e18161aa610ba166118f019fa1033176c18001a95100e179d18221a68102316821652190000000000000000789c129b21986514789c129b21986514f61d7c1a311dd9210d23be1dda1e76229325d81c0d1e15223b27001d281e31229628351dd61e492252295c1d8c1f3122dc29511e1d2083223f2a851e2a2058224e2a0f1e48203e228c2abb1e1f205422ae2ac71b5d1fbe22562abd1d1621c3266f29e3968c21f8266e275b9ed02308271a26c71b4329cf277924121efe2b9d2964203d1f522c6c2a951b7d1dc12c952a1415871c002d492ba015e91bde2c062c77161c1c7a2da02b6b155f1b712d0c2c1117e21b832d612b8815651caf2d522bdd15f01c392e5c2b51186d1d832d422b6c18ec1b9e2da52b7514c2163e2d642b970d39154a2dc32bd88ef093db2c4f2c9314d119b12c872b7414f61c252b22290c16ef1c6e27e9259e15fd1ab621a6201914e81ab51de01c0912871a121da31cad14771ba91d421d4415661b6b1da01db614e81abe1c751d63148a1a661c311d1d145d1a451c271d06143e1a1a1c111d4313f019c31be91c27139a193c1b991cb8125419bb1a811c5312fd18701a4e1c1112dd18401a1a1c0112a518fd19091cb1118f18d119071c1a126318a919ad1b281239184219541bb311a217f518e81ae010d2167118311ab610e5165e18161aa610ba166118f019fa1033176c18001a95100e179d18221a68102316821652196810231682165219239403968e95b80b239403968e95b80bf5146e183d1ac321161d1a1c301df922b820ff1cdc1d89230e232e1c601d5d231825b91c711e1524b726771d3e1f52241728871ccb1d0324ae28031cca1c022310296a1cb31d8e242d2952150115a324e128499b309d7c26f7278fa1c0a20b280e2649a0789f2b27a9236b9d641788267920889d1a23b5275d18e5991528fb28488aef965b2ad229a790af8cc82b982a7502a2069d2c442bb806b7110a2de22ba213e318892d622c0e14a718722d352c56123a17722d0d2c7a109c15462d4d2cbe8a40963e2e1e2c1e88df96c32d132c858c59973d2dca2b788fdf99d02d482c7a94ec9dbd2dac2cae93dc9d3a2da42c158ff49b632c2b2cb388bd970629ae298a0fdc1480242526c5111e18661c222287122c178d1782209314171a901b641f1d15f01b141d761f0a15f21b4a1d751f8c14901b091d341ff213f61a8f1cb11ed313951a2f1c311e9b135d1a231c031ec813391a121c141e7313cd19b41ba51dfe123519a81a101d2d12a118e519871c7e115118b2194b1c831138185d192b1c531104184219161c2f11da171e19ca1b5611db171219ba1bb8108417dc18671b97103a17a518ed1a7810ff168118dc1a941015178318cd1ae510dc165e18741a6410db164d18cc19560d60151416d817560d60151416d8170c85f2020c81750c0c85f2020c81750ca60f8119bf1946220816261cdc1c72239919cc1be01cfe236c1c811b081d64241e20051c251ea924a722ac1ce71e7a2477245e1d801ec4244325651a8619f424d7255815661500255d25f5946898c42527255f9bfa9d9e260024ae9ebaa065278f21239e21a06a27691c589c509cc126f80cf898591f02278497878d982562283f98180d86288129bd93df8f022b022b2c90f40c722c212c4488f013312daa2cf60cd516d42dd12ce20dc1140e2ef32cd8110915d52dbf2cf312f0175d2ee12ce40f7d15112f2b2d740c2314672eed2c7510ba0b8a2ee42c0b0b8492972e182d93084b8e392ee62caf842e98912d4e2c5c89a0997e2b3d2b8504ed94032692285d0c7204711e14251811ad15051759227b1372183b1890216f14ae19031aeb20c014731ad01b8e200d14571aec1b49209414171b941c2e2060146d1bbf1c0020b313c51a711c251f9b13391a081c8e1e4313111a071c8c1e3413a619831b2f1e26122219721a781dd011ac18c419f61c68114d189b19bb1c0411111845199b1cba10e61723197d1cd0108117c818181cca10db165b18b71b4310a8166118591b2c1076160518fc1a1d100916cf17c81a8d0fa315b517b11a870f82154117c71ad00d2814071570193b0c33131c131d183b0c33131c131d1800006395c096758600006395c09675860d900318521829235b02371cea1c49248d027919061c23246a10621a101ded241c16fd1a9c1dd525051a6d1a041c4125d61c331ac51a8a249a1e73176f143425771f1a0723941726441fe095449bc725a31d289d09a0c526ef1ad59d1aa0e0258b16559d1fa0af260993e1992d9d25278c996e8e6594de26209a0d91101d08280e98d1122f253a29d39460144029c82ab593000ed02b702c90903f13c22cc22c37882217cc2d2b2d7f0db6193f2e522dac0fd6184e2e302de511c519cc2e472d22136e1b202eea2c93108b18aa2d612c7312a416382ef32c421427184d2e352d64104417ea2d202d45107615dd2c692c530eee0d4929002a280eb7115922a02687103e16741a512493112018bc16e722601349189415a02112136d18781761218612f7182a193521f0110319a1199f203a124f19e8195b20e3128b195c1a2e2057122d191f1a8d1ff311c418ec19b61ed511a718001a691ee811af18fb19461e2b116f18b219dd1d7b10ed17ee18fb1cf810de17e218d51c9f10fd1659187b1c6210b1163b18461c6210ee1640184b1c4210511616180b1c830f6915ab16771a940e30158f16391a150ede142416b419850ee414bf16261a790f901531178e1a490e9514f415761a2c0cc314ca14d1192c0cc314ca14d1190000d406de06c3800000d406de06c380eb8a6f15de15e120da89b519d8195c2416915f19901a80240e94cc18631ab724cd964a17491af524bd95f117321bb724939289152415b32408957e94b29987251b96d2964b9bba2539957599ff9cad2616994f9a449d6a262a99d09b159e5725ad9bbe9bbb9ff825b89cf3987b9e6e26849bb887459c45261e98fd0500964b257499a391741ae2272e9887952e247829e794fb177629432bee919317332c7e2cd28c88175d2d462d6502e118002ecf2d800b1119972ee82d930e9419e12e602e860e7e198e2e002e30143e1afc2d4c2d5e14bc18ec2ef82d0015ae19c02ed12d5c117618fc2d172dfb0f67151d2cbb2b4b0f0d0ec526b6283809a704421b4f25830cfd105b957c23cb0c69115393bf218a10c71411868b219911bf16701195210a125b1815174321b31152186e18a320e311cd188e185b20ee11c11827194120c811c7183c190020df1180185819561f40112a18e018af1efe10a417a918f91d1e11021743185b1d8b10a8160418f31c6c1088162518c61c2c107b161018ad1c9c0f761607188b1c890f5816e117711c01102f1690172d1c230fd8153a17fb1bfe0e8a15f116ac1b840e1b155916021b110e9014d0158f1aaa0ecc144a165b1aa60e2d15f9167e1a350d6715eb15c31b350d6715eb15c31b00001f971098b70c00001f971098b70c3293db86a28e381ea79203187116ac23f6942b16991786240596c71744194b25d596d817fb19f2253d9701171719ff2510998314840e9925089a5807f0884926619b0f933b984e26e89a679490994126239c1696319adf26979a6f95219bfc255e9c3193fc9961263c9d05996c9ea726579be18d4e9d732638975b15ab955125c998890d269ad026319776156c1c312837964115f22499290c94b6184029702bd18e971a392ce52cb8026a1a862dc82d2b0d5c1b592e592ebf0d931ab22eb22ee20d2019632e7b2ec912d919ce2d8e2d89105619ab2e4a2ea8144e1b302ed72de80df3154f2c602c1e080a850c28de29b60b020bdb1fa426290ebb147a086024b20c10149195e823820c18141f929d220f0fa015818d2b23141147177910a8225f118e182016df218811a01830183c218e1194182f18a420c110ec17dd17ef1f5310ac172d18351f631099175a180e1f3c105d176e18a51e3e1075173018491e1210e216f317d91dec0fa8160118771d820f6d16be17491d6e0f3a167117fb1c000f0616ab17dd1c280fcb154a17a01c730e6415a9163a1c600e7515a116351c5a0e3b158416221c500e07155f160b1c220e2615eb16f71b5c0e15158216da1bfe0c22146f15e619c60c30140d141e17c60c30140d141e1700001a05df052b0e00001a05df052b0e778e450e370da21dbb92c5118d109f22a695480e7511be23829783123d12a624b998e40ff5102c25ff982b1054119025a4995110ae0ee025fe9a15870194f8250f9caf972d9aff25949c6f99329c1926309d529a2c9d77262e9c0398c29c0826569de1966f9c9a26c79ce896bb9dfb26919b4094a99dcd269999ba95669dd925389bdd0d2b9bd826f4982b13309b5827fb98c20d9416062863980d8eb42147295a956c17e427ad2a3991ad18c72a562c6303851a9b2c912d7489ec199a2d362eab07291ba42d3f2edc0e8f19db2c682d490d6e19422daa2d990e33192b2cb72c3d0b2c18f2285b2a7705711474220528de85cd8e81946d2587087013fc977e244205250c4b9a6a245709001167968f221b0c76136c920e23e00db1143d8d7f22ca0e2816f80fa121770ff616b0123e2124109b173c15c1208d108017e115b720fd0f7317cc165520150f5c163416361ff90e36163c168b1e110eaa1569163c1e060e89153116e81d3d0ed0157616a11dc00da9155a16881db10d7b15fc151b1d680da4145c15931c9e0d8d144b156d1cc00c5e141615411cc10c25149f14271c8c0ca4139014041cdd0b24125b13fd1a6d0a3d110113cb1ae40b11122d13d21a3a095e11a412591b7e09e21053109c187e09e21053109c180000ca80ee00fb0a0000ca80ee00fb0a948ffb0938037e1e23944a0e5186452436963c0c510dbb243798680f9f10ff240899980fc20d30252b997e063e08bc25c39927921095f1258f9ba590ef975f26159c19966c9a2726659c9398e69b5b266e9c3598229c7e265b9b7d955f9b7e25fd9cf596599c3e269f9c9897fb9cbc26869ce398299e8a26409a1296199dcc255d989b939b9c85258e9aa3902b9e63260a9bf587a89e0227079862122d97bb26b097c9073e1d5628359669159324c7296d9104184b284c2ba38b2018cf29972cfa8c2d17b32ab12c5c881e18302a282c68821519ef291e2cc802a418c5278a2a7e06e0151121182848066c149714c82545822811e6980125e001b110cf9865248308f0126e972e245c07c7118a95a8224d0a3a12b695de22710bd81288933922e40a5014e68fad21150cb5140a066d215c0d9715fc100721c80d9616a113d0201e0f3017e6147420660f5d167615d51f4f0e5a16a2152c1f550d05165115a51e160d4915eb14081eb70cf61478147b1dae0c8314d914531de40c6314a114fc1c020e05143014821c960ca7135714941c470c73132514471c8b0b0b13e113111ca30b9112a613bb1bda0a1912af13251b6e0af211b813561b6a0b53127713181b23099a11e412f71a1808ab11a710ae191808ab11a710ae1900003a91d892480600003a91d89248064a91f4906a96591f1d988e90bb959c244298db8ebe93fa240699c08fca929b251b9a2090bc940526d8995691a494d525c9998b91c4969025dc9aeb939298aa26b99a40948699c826559b3b9456997926969b4a93089a5027dc9a6594389b7d26c59b7b96469cb426729c7d96fe9c9526c19c4e98f09dca26829aee900a9c5d265e988707569af6252799df0d329c9d26d799d187619d5b2611994e0ed29cb3268e96e310a59ddd26f196d006cd9b57275293a118291e782820934f1984221829b48a601794234c298082c8177023a929b9029d174721c6286d022f18c31bef272a8f450c85928025b98c030dee9a9225238a9e0f699bb32444858310ac984624e6055b13a2963e24ba048c13e895df2252088f13eb94c322c00801142594da22b708bb145392b822380863142c901a228209e613ee853b211b0aa313230574207a090e140b0e0b20a40a60143b11c61f4a0a2e140911351f4a0a1c14f211f51e1c0ad713b7118f1e110a7b136711331e8c090b130612bd1d5809fd11a411431deb0825123b11e11ccb082a118311751c2c096d11c311a81cee082f111f11231cdd086c10e510c01bc4084110db10b01b4a071e104d11901ba0070b1023112f1b0e057a0e8f0f771ad601330d6a062419d601330d6a0624190000438640898a0d0000438640898a0d9c90a78ae38fd91e2496048cbf9198244197458c7c900525e598e98ffb90a225289a0e92169654266e9aba9348988726989b9395cd982e268a9cfb966e9ab326639c6d978d9bef26189d3698c39ab926c09cc2964d9b42273c9c7b952f9c6526799b7b95499cba26889ba494f79be226439b598eae9bfe26fa99f287589b2926c2983687789be3255b997707949cea264f99d20ddd9c7126ee98ec0d859c7626739763109d9b15265f97e614529b682660940a155a9e6e27639225100f990826cb902b0f54921a25b88e9511f592c8254b901b141993ba25988d5f1676941025b38c0116bf9430245282f317849785246e022f14699986249085020f139a9724ff81b9100d994924e081191034979f229f81b90f52967b22bd013e11d195a922ca017e12c4941f22970143126693ce218e010a135c914f216f014611ce8eb9205801ea109b8b5120e403d110eb8430209f037811c104f31fb5033c117f04861f2f01f6107c0a181f3001b910140a851e230158109909011e2a03e20e450c641dee02bf0f0c0c1b1d0105d60fa00d121ddd04c40f800df61c4c042f0f740e701c7104ff0d590e471c5c04af0d190e1b1ccb025f0deb0ec71bac02dd0d540ef91ac980b5097f0bf419df02ae0dee0a2319df02ae0dee0a231900009f861889180900009f86188918098991d88dde91f01e6897f392e69527246198a5939496da24e69833944e967d25439aa39404981f26299ab69431986426bc990c958098a925389a7e955e992e26e19ae296549a4a26c19b7096af9acd26969c5a96849a0c28589b6391119abb266e9b24938c9aad264f9cba94719b22277f9b2993759c1727dc9a7194d99cc726c09945948d9c5d26099a1895d89db527989abc93af9d1b270399028f349ea5271598da0d5d9d1a277d965012f89b48262a9571158099de25b69389173697f1256d90dd1574950925b88f5d14eb9723251b8fa8146c994d25eb8c1415f39920253a8b7a1498985b247b894f150e984b249f8699142598742485867a14a8962124b2854e13c3971b244e867213539744238b85fe1229960d23e185e8124e950e230f856d12b6940c22a581241228939d21b784cc103d9132216c849c100491e22068817310d58ea8204e812b10a48b42203e81860fef8abb1f4381200f3e84f61e2181de0e2a84b31e1d81200d0384541e0b81d90cc783f71d0581ba0ca403a21d0181a10c8c03601dfc00570c5103071de600d50bef02731ce4808209e102461cdc808509cd02111cd4802606a802b71b5a82c5058307701bde80e6089407571b1284cb014a82601ad285a8014e8bc318d285a8014e8bc31800002985da88980400002985da8898041c928b91be94711ea49945971f99ed245b993898639aa825239a6c98b99a27260b9ca6980e9b6226559ce598a29b1027de9b3598b89a6426739bda978d9ad226009bb696579a4e26529b2e962c9adc260c9c1e96199b0b28b49ae892619a5726979ae892609a56262d9b5291029a1e27d59a8408e69984278c9a9a8e039cd326c09a6591219be526939a028fca9bbd2787998188329c2427149911083d9c7f262c98ba07119c3a261897ff0d499c91265697170e529c8726c196d207e39c79265c94f70c199b21257792ac11c5990c253f92d114d39858250891af152e983025299019160699c324918e6e15f1961725bd8f1215fd98bb24978e4b118b99da24dd8d1f0f6b9999247b8ee604ea981323228eea04cc98ea221e8f19050a990623e48ec10414982c22a18d42042d976e21ee8ce603de95c920b58ccb83ae95a4209e8bb18385956c205d8b8f83c3945320d28a6f83e8931120b28a2f833d934f1f918a72889e928e1ed28b2a883091131ebd8b01881c90e11da38bbf87dc90931df6896587838f2a1df28927871e8fe41c8a89fd86068fbb1c39889e89ba8e871cbe8852893d8e331c70871889128e171c3587ff85a88c081cc68502820488251c2c88228c0390de1ae589008d4791d618e589008d4791d61800001e89ad8b020600001e89ad8b0206549384942b97e11e0a995898f199fb24339a8598309ad424cd993b98639a69251c9ba5980b9b0926fc9ae998949b7d269c9be798a79b34268f9b5299989c2b27ac9c2c995e9c12275c9c95979a9b65279f9ceb97b19aca27489c2c95b49a0626759b6594259b2b26169d319316999126a39b35889799ef262f9b8592399c1c26fa993293169c7226839af993e79c4e27aa99b093e99c1f27ae995891129db726f398658e469d1527e897d287e79c7e269496bd0d169c43260a96cf108b9afb257a93ba134099e7242893fd11ec992f2515946b100b9a4a251c9203124f9a45257991e40f259acb24ed90e10ccb9ad624f590860c1e9ba9240a91ad0b1d9a6b24b390fe04c799b023da8f6604eb9894229d8fdc044f991a234590a504a8987c220c90c08468982422f28f96044898f7217a8f72845e979321b08e2484d3961221a88cda830695a520638c81895d956120c68c418c11951020428d978dc494a41f108d558d6b94d21ebc8c798e1e945c1e6c8c288e6894f91dc88c3f8f3a94bb1d4e8c218f5c93771d678cfe8e2f93551d3d8bae8edd92ff1cad8a428daf91b01ca28afa8d6e90381ce28a658c008fb81bd08a248cd18eab1b3c8c9888538d061bb88ca88c9e91941ac88a528d95929819c88a528d959298190000e488d58bc4040000e488d58bc404059360943c97f11e879a12996d9acb24a8994b991c9be1246e9a059a1d9c60254e9b9a99279cc325549b7d99099c0426b79abb98ed9bfb25f49a8198d79b6d26359b5298339c9326bb9b9098fa9bd2265a9c5b98fb9b6a27679b3796d89a2626819b5b95f89b8b268d9bac95509bec26909b1591ab9acd26a0990c8ed59a402661990288e7994b2693995f087d9a04271699900e9b9bf5263c986111a89acd2682976314279a6126e2965514139a4b261d9660143399f0254a968e1475992326ae944e140999fe243894f513c7980e25029406129d98f624af91e9131c98dc243d917514b897b7248c905f148497a9249590d8124198932430904a12ce965a244290f8106f9845246990930ec99746230a9001053098e422fa905305f698ea22a69006851e998022b8908b8d9f98c7210990cc8c739807218f8fa98e4998c120da8f24900c987e208a8fd09082971820248f54912b97d01f0e8f0e91bb96331feb8f9491dd96ad1ef58f559188963c1ea78fbe915c96f21da28f82910396831d9e8ef8908a95131d138ebe90c094b31c238d81905e943d1c118dfd904e942c1c0a8d1a915894211cec8cd090b393f31bd28c12908d92681b868c15908692601b718c27909e921d1a3e89a187618fbc183e89a187618fbc180000ef0f5712c9040000ef0f5712c904d5939d932a942b211d99e4983f9bd8241b995f991b9b4024999aeb991e9cba24f39b099b149d9a25099c689b5a9dd725629cd39a579d2226c79bce9ac89dd626349c889a9c9db126f99bd199c29cee268d9bd897739b6727cd99dd93879a7a25249a4494359aeb25a19bca9064991126c99a008ef2998426af99f70da8980b26349922111098b1265f992f13009869268c98c1141c9896263898da153b98c7263b97de155e98cc265b96e1155b98c9266a96c515d5984626ef95af1518986026c3949b176a961a2633942816ef95652504943b153796a8253c931616e69549253a928f13f297ed240092f811d299f024aa92a506b299d524fd913c06639a8c2473922e86d09a872409935d8ca89a29241b92258cbe9acd231e92e18b8c9a3623b491948b9e99b022a6916491af99282226926995999ac0213c916394a4990d21e490599439996420d1906994c798e31fd690a1949898961fa79069945c98111f579094946098911e4390a8941f98111e5d907894e397b11d569005942597781d1490cc93f596381d21908a93d596051dd58fce921f96ca1cdb8f8292e095981c2c8fdb92b3955e1ce68e9d91c794d21b908e7a914594ac1bf78d8b912b94561b7d8d3990c2928a1a878a9d8cef900518878a9d8cef9005180000f2882d0c1b140000f2882d0c1b142099709be49bf023679a119c7f9d1425289b509cc09d3825aa9b489ca49d5325409c8c9c589efd25c99c5e9c239e4f26bf9b3c9b589d5226599b609ada9c6d26909bf4981d9cec25589b5299429c5a261d9cd298479c5027c19aa4949f9a6826389a8a919599d6261e9bd38eb7994a27e89a96880e99d327239a8d0e75998026a59911159c95442788991a157c9830271a9917155c992a27f69922168b95c9264a98fb155e98992657970018f196392661967a181e95e525e99511195093fd25119586196e93fd255594b3185c962b255d958618b79458251794851820965225b192b71750984425a992dc144a990425fe94f2858a9c6f246a93dc8ea19c86248a920b8ca29b4f24e091dd8abe99a5226391d48db199b122ee91e88f779905228c9203929c99a9216e92bf920f9a4921dd924e949a9af420ef929e959e9ab5205c924196959a60204092f4954b9a2f20d09123960b9ae31f9591c795b3996f1f2d91c3954399be1e15913b95a698d71d9d90a7940398321d52907c94b297e21c32904d946a97b51ca090509456978f1cde90629467979b1cb89134942d97771c96903b949f96081cf98f0e940096b41bb68fd8938e95b21b00908b939c95c61b858ee7925a95421b0f8de1919495a6190f8de1919495a61900000f0d0e12b31100000f0d0e12b311719b2c9a3b9b6c221a9c799c8a9e7424f49ba89c259e4424899cfc9cc19ebe247c9c269dfc9e1125be9b019d3f9f9025ce9bb09c519e6125009c5c9c979eec259b9c5a9c869e3326b99c399c459e9d268c9c619bd09d1a27db9b7e99f59cb426a49a1098a59c79279a9bfb942d9a2127b3998e0e39985827339965111b987d26b698a9135a98f926e6988118e109622671978a1960103f262497fb18d709402670968819f0895b268f95bc19518aa9263795c219368a8d268295311af3095f26a394211b050a5a263c93e71afa094e26ea92371ae5890926b0941419f592b225c3943116019af625b094930d869b85256796dd8c6e9bb7246b95618f009b6024fd945992319b2f246d947494069c0d248c94cc95349cd8228794d695a09b02224b942996969b81215f94ed96a39b49217594be970f9c0e213794fd97e69bd420f9930098b29b70209893ae97549bfa1f1b936197d89a9b1fb0921b979c9a361f86922197829ab21e1d929896df99ee1df49119963c99651de591f1952899351d1292d495eb98dd1c76933c952c984e1c139200951b98261c6d91d294d897c31b8290a19457976d1bf48f5794e3964a1bf28f51948496641bfc8f19946396171b8b8f5594ae96c11a628e7f933d96291a628e7f933d96291a00006910e7128d0f00006910e7128d0fac98719a939b0e224d9bae9cae9e5524f19a7f9c149e3c24f89be79cc19e8324239c379def9ea124869ce69d15a01025ac9c1c9e57a05225849cab9d17a05725b69c699dcf9f9a25a49c039d5b9fa625a39cc99c7c9f3426989cdb9c38a03127f39bc79b829fd927e99b3697b79caf27289a9008e896ba274a9a12146e95832758988a175d0a82279897401a1014aa274095981c0a1a4c27c397851cb21a0a2755970c1d391cfe2654963d1d9b1bc126d594561d6119c826d093981d871baf261f94101d931a862659920d1c8917de25ce93d819b20f922530947c18e48fe02542956412fd96992516955c0df29763258e954790679b262571975595809cbc243d966c96e39c642426966f97449d03245196e198869de122ef9520994c9deb2191959a99429d4d2144956599e59cda202b952499a39c71201f95e398639c0d20fb94e198659cda1fc094d498279c6a1f5f94c898e09be81e2694c998829b961e2094a6983e9b3d1e09948198f69ae01d4d932098709a821db692e297209a231d7d929597bd99fc1c08920a978199c81c769173960999891c2d9122969c98371cc8908c9503980a1baf90b1942297801a9c906394ec96911ab7914f948e967c1ab7909b932996191ad18ecf9158957f18d18ecf9158957f180000f0108614de110000f0108614de11fb983e9b7b9cb721e79b769d549f4923c59b3a9ede9f0c24f49b099e1fa00d24139c439e22a01124729cda9ea3a06924b19c5c9f14a1d424db9c819f42a10e255d9d719f0aa13125d69c779e8ca07225de9c989d14a0bb259b9c219d3ea08426d19c399d4ca03427cf9d939b089f7027ec9c1596c89b8d27219b4394f19a0228ba9a5c0ff9953d288697c718ed0a24288b95181cc7194e28e692681d211d0b280692d21d6d1dde27cb90411ec81d8c27ed906e1d221cf0268a91401d521be326a5930b1cce19ec26e1939d1a2218ce26b497f318081584262d97088efa998c26c796b390cc9af3259a967e95329c522577972297189dac240b9792985b9d32242897ee98b39de123c3964c997f9d1a230d97859a399e46220d97289b369eb7215396599a919d4421e0951d9a689df320b5952c9a3e9da4209d95e999119d53205495de99079d1720ea945d99949c4f1f6f9403990e9c5a1e4394aa98899be81d12947e983e9b761df3934f98bf9a3d1dbe932f98be9afb1cc6930e98529ab71c8a93e4972c9a9b1c4f93b897fa99811c119470979299571c18954696c9984c1bf792b6963099e81be291fd959098311b27917095f0977a1ae1900f957f97fb19ed900695b797141a4f8f8993ae962e1a4f8f8993ae962e1a0000b01466176e0d0000b01466176e0d99987e9b8f9df721579c8e9d0fa0a922089cce9e6da0ea23649c169fa5a01b24009cbc9e75a0e1235c9cf99eb0a03124cb9c9b9f32a1a524b99cb39f6ca1a4249b9da39f29a17924619df79f8fa1ea24f49d5ba01da2a225eb9d1aa03aa23126529d0ea000a28d260e9d39a006a2da26fc9cc39d89a07f264c9dad9c869f2527ef9b769a389ede27a999e408aa9844283899d11550945728a79b701b88192d2842980e1c6a1b48289a968b1c571a0b285b94ac1c0a184a287894101bff0a21281095a117988ae127e095ba13a9933a27df96f30d17964e26b198c595709cb425a69815998e9e5b255798089a219fb2248299f39a3e9ffd23cc99aa9b2ba015243b994e9c1fa0bc2399984e9cc19f11236b987a9cc59f3f224d984c9c3a9fa121d897fc9bd39e3a213d97cd9bb09ed420e896919b4b9e78209d962c9be99d1f206796f09aa89dbf1f4e96b79a559d5c1fcf956c9a219df31e9595fa99b89c701e5395ac995b9cfb1dff945499159c801d3e94a498479bcd1c45931198719a481cbb92c797099a1f1c7c926697ad99fb1b3f925897a899f31be091ef964f99881b8791c8960799fb1a199131969998b81adb90b8952298701aec905595e9973d1a3a9086942a97ee19df8f70948397f119df8f70948397f119390737153318dd14390737153318dd1419962c991a9ad41eaf9c229e1da0c722579c229fb3a069237a9cc89eb5a077238a9c249fe2a09c23969c6d9f1da1eb23d19cf49f63a12524e49c07a087a10a243b9d38a0cea13824f49c33a01aa23e243c9d42a070a25e24529d4ea09aa276242a9d5aa091a27a244b9d4da098a2a024f69ddca07fa34225569d98a008a31a25149cbf9e64a10125b49bb79d9da0c124549cec9ddea0a825989bd49d15a2b426ef9ceb9deaa0f426679b209dd1a06827e899379c33a05e27d699f79b069fc525c3993a9d72a0d1253099c99c38a0f624499ba19e29a1f024d29a749e5fa1b924cb9a899df5a05c24d09b7e9deda02e24689aa89dfda0c4237899899da7a00e23f8984f9d90a072229d98f79c16a0ba214b98a49c869ffa200898609c079f98206697029cb89e5220f596b39b8e9e25201b97a49b5a9eeb1fec963b9b2b9e8d1f9896dc9abc9de51e64967b9a329d451ee595229aee9cf31d7a95ea99a49ca01d39959c99729c471dff946b993e9cf21cf8943199eb9ba01cc994d198909b541c7e9494980f9b231c459457989a9ac61bfa9319983d9ab31b9d93fa97d1995f1b88935b974399b41a2f93f4960f99a01a8a928d96c998731a629252968198ad1983914295109851198d909c9475986b198d909c9475986b190000ac0b971119030000ac0b971119037a967e9a389c2f1f839b979e99a0cc22259ce89ed8a03323289cf59ed5a050236b9c549ffea06c238f9c999f51a18b23c39c01a070a198230e9d0ea089a15523449d13a0aca16523639d37a014a2a7236d9d3ea01fa26923979d33a012a22b237a9d23a01ca2ea22ab9d25a013a2c922b19d48a026a27f22a39d25a02ea22e22649dc69ff6a1a421149d9d9f01a24c216f9c219f83a138216f9c279fcca10a21f29c2b9fffa1ab21319df49ecea1ba21d09c229e63a12a21239dea9e4ea17421eb9b609e6aa09c20549b159e98a0cb201a9c459e12a13921359b239e7ea1ea21639a1b9e4da1ce21369a689e79a1e9212c9a339e6ea1df21c799bb9dffa09721d598899d9da01621cd981e9d47a0a7203f98bb9c09a064203e98a69cba9f25206798c29cb29f0f204f988b9c879fce1f08984a9cf69e5c1fb097229c999eb91e50979a9b0d9e0d1ea596139baf9daf1d0a96d69a579d571db8959f9a189d331d8595579ae49cfe1c79950a9a969cc91c4e95b1994d9c7d1c19956399059c341c9294f6983d9bec1b8a949898c19a921b53947a989d9a681b2d9470985b9a4c1b82934c98539a431be792fe97b599b81a979264975a99761a019350975b99541afa902497209a481af4912a952e981118f4912a952e98111800000f113314010700000f11331401077299fa9c6a9ead20819b4d9e55a0fa211f9cae9f06a1a1223d9caa9f21a1c522799cb79f22a19622819c9c9f4fa17222899cbf9f54a17722959cc39f93a16722839cc69f95a169229b9c01a0afa15a22a19c0ca0c0a157229e9ccf9faaa113227d9c249ffda046212b9cb09ef3a0f320759b779efea0b620f59acf9d78a01620519a1a9d3ca02f1f6699879cc89f7e1edd98a79be49e2d1ee698be9a6c9e1e1eb598ff99249ef21df698139ae19dc81dc898989a9d9ed11dac98b09b209fea1dca98529c11a0331ed198af9c2ba07c1e3b99f09c51a01a1f029a999dafa0b61ff499949d95a0bc1fec99c39d95a00c20e199e09df2a01e205699679df5a00020d698cf9c27a04f1fae98be9c32a0591fa998d49c1da0521f9498d09c00a0391f5b98cf9cd99ff11e3198959ca29fbb1e0b98679c399f971e90971d9cc29e461e24979e9b2e9ef31dc796669bc09d881d6b96f89a709d551d2b96a69a239d091de595719ade9cde1c9b951f9a989c981c9b95c9997e9c661c41957599409c401ce0943d99ef9bef1bbe94e098659b8f1bb594ac98029b541bb1946b98989a0d1bb69476987a9aec1afd945a983a9ad11a69943698ef99a61a1a930998a3990c1a93923d965698c9183092c3949b9704173092c3949b97041700009510ed13f30c00009510ed13f30c969bee9c0d9eb820d79b1f9fbaa0dd21c99be19e90a0a421009cb29e6fa0a921159ccd9eb2a0bc21309cd09ec2a0bc211c9cdc9ed3a0bc21159cc59ef6a0a6211d9cde9e11a1c6210c9cdc9e10a1c5212e9c629ea0a01f21459ce39d5aa0af20239cd89d3ba09e202f9b4e9d08a08b20759a009d01a063201e9abb9cb89f3b20b699639c559f2720cc99439cc39e1a2069996c9c329f24204399499c369f2a204199409c239f0c20e198fe9bf89eec1f0199909b8d9eb51f6298839b979e611f2598669bd69e4a1fe997dd9b119f2d1f9c973b9c2c9fd81efe974a9c579f941e1b98349c7e9f331e1d983a9c899f041e7f98929c0ca0331e7b98989c01a04f1e5f98939ccf9f191e58989c9ca69ff31d33987d9c659fd01d0b985b9c1f9fc61dde97399ce19ea61dac97269cb39e7b1d9b97249c869e521d62970b9c5a9e441d2097029c409e2f1dfb96bf9b0f9e1d1d7a96289b949ddd1c1496829a0c9da71cac95239abe9c761c85959b994a9c081c07952399be9b441ba494c9987a9b041b7e94a798229b8c1a46948998cd9a601a26945f987d9a131ac8934698409a1d1aa4932598229add194b93e097d899d8192593b6979199f3194393a7976499c419cb9234975e99201904943897899924190494389789992419000000000000000000009510ed13f30c969bee9c0d9eb820d79b1f9fbaa0dd21c99be19e90a0a421009cb29e6fa0a921159ccd9eb2a0bc21309cd09ec2a0bc211c9cdc9ed3a0bc21159cc59ef6a0a6211d9cde9e11a1c6210c9cdc9e10a1c5212e9c629ea0a01f21459ce39d5aa0af20239cd89d3ba09e202f9b4e9d08a08b20759a009d01a063201e9abb9cb89f3b20b699639c559f2720cc99439cc39e1a2069996c9c329f24204399499c369f2a204199409c239f0c20e198fe9bf89eec1f0199909b8d9eb51f6298839b979e611f2598669bd69e4a1fe997dd9b119f2d1f9c973b9c2c9fd81efe974a9c579f941e1b98349c7e9f331e1d983a9c899f041e7f98929c0ca0331e7b98989c01a04f1e5f98939ccf9f191e58989c9ca69ff31d33987d9c659fd01d0b985b9c1f9fc61dde97399ce19ea61dac97269cb39e7b1d9b97249c869e521d62970b9c5a9e441d2097029c409e2f1dfb96bf9b0f9e1d1d7a96289b949ddd1c1496829a0c9da71cac95239abe9c761c85959b994a9c081c07952399be9b441ba494c9987a9b041b7e94a798229b8c1a46948998cd9a601a26945f987d9a131ac8934698409a1d1aa4932598229add194b93e097d899d8192593b6979199f3194393a7976499c419cb9234975e9920190494389789992419000000000000000000000000000000000b9cbe982399d519012078173e1c1622eb24b11c031e8b220128451d2a1f0d232429451e0920c5235a2a8d1eef1f7723ce2a051eaf1fd522602b321f72205223962b911fa820e122d02b4b1f8a2076225e2c701f05202f24352c499bd09a1028f72947aac2aa652ad32b0d18fe20eb24402ac41dc9271a251629561df629cc26cd26bb1ce12abb288223d11cfa2b6429be1e331d712c8a291c1a0a1ef02cdd29f316e71d182d472a1b184f1d5d2dcc2a7d16c01c702de42aa915b81ca82d0f2ba315ce1b902dfd2a1f164c1bc52d4f2bd215961baf2d132bd014a71bdf2d702b8612c11bec2dc22a1a0a651b012ec52af50cc31a8e2dee2a0f0e2b17d82cae2a580e4b15332c872ac0162d1da4294a28be161e1e5e2587242f18c31dba2006207414071c7e1d7e1dfa14d31b861dbe1d6715b61b611df21dd214d81ab81cb21dad14d81aa41c991d7f14b21a831c931d4c14831a7a1c6d1da213531a3d1c431d5e13c419d61be21cd4124d19181b891c6b12f618861a321c5012cb18531a111cff11c2183e1ade1ba5119218fb19bd1bbe117218c6194f1b651114184919df1a5411ce17f818791ab910fd166d18f7199c10e8166b18c819a510981657189019d410b1163b186c19231179169918d4190f10bb14de16761900000000000000000b9cbe982399d5190b9cbe982399d519012078173e1c1622eb24b11c031e8b220128451d2a1f0d232429451e0920c5235a2a8d1eef1f7723ce2a051eaf1fd522602b321f72205223962b911fa820e122d02b4b1f8a2076225e2c701f05202f24352c499bd09a1028f72947aac2aa652ad32b0d18fe20eb24402ac41dc9271a251629561df629cc26cd26bb1ce12abb288223d11cfa2b6429be1e331d712c8a291c1a0a1ef02cdd29f316e71d182d472a1b184f1d5d2dcc2a7d16c01c702de42aa915b81ca82d0f2ba315ce1b902dfd2a1f164c1bc52d4f2bd215961baf2d132bd014a71bdf2d702b8612c11bec2dc22a1a0a651b012ec52af50cc31a8e2dee2a0f0e2b17d82cae2a580e4b15332c872ac0162d1da4294a28be161e1e5e2587242f18c31dba2006207414071c7e1d7e1dfa14d31b861dbe1d6715b61b611df21dd214d81ab81cb21dad14d81aa41c991d7f14b21a831c931d4c14831a7a1c6d1da213531a3d1c431d5e13c419d61be21cd4124d19181b891c6b12f618861a321c5012cb18531a111cff11c2183e1ade1ba5119218fb19bd1bbe117218c6194f1b651114184919df1a5411ce17f818791ab910fd166d18f7199c10e8166b18c819a510981657189019d410b1163b186c19231179169918d4190f10bb14de1676190f10bb14de1676198e967c9782985e138e967c9782985e130a1b571a901c1322a7203b1de61dc52389246b1dfc1e92243526aa1c741e81243f288f1cfc1d37245a296d1cec1df223712a2a1c1b1d1a23462b171cb11cf122a32b4514eb124b249c2bff9d2fa00026012bc9a650a89e28042a51a84ea98728c9294aa227a2f225c928fb9ab31fc625612601878f261e2721236115da296028011d1814c62b92297614361b8b2c562ae512281cf82cfc2a5413a01b182d0a2bfe13031c772db62b9f14561cd72d962b9513fc1b062e8a2bd9134c1c132e6d2b3214111c962e422b57156a1ca92efd2b4f14c11a4a2edf2b37144719852ed22b8711ed163f2eef2bf30ce885e12ddf2b9093ad9c612d7e2ba4944b9ea22a1c2ac68c409acf25792770050392701ccd230f0fea83c990d4208015461a721af31f3016471c471d9c1fbe154e1c951da61f9315091c701d811fdd145b1be41cec1e4314ad1a711c2c1edd13331a141cd01ddb13521a301cdd1d9513f119171cba1dfd1269194c1b261d3e12d618371a8c1ca9117b18f9195f1c7b1141189719211c321120186c19011c1e1105181719981b2311f117f718691bf210c617da18181bc3104617b818c11ab2100b178c18801a7110d5166718291a6b108d162f18fc19d90f7215e3174719aa0dea1393155317aa0dea1393155317c883f20c550cd411c883f20c550cd4117712b419051c0e231e1a1c1c7f1d8224f61dd91b6f1d6924a3217c1b3d1d5024ba24961c0a1e8724e626e91c771e962460281f1c9c1ca424062928165f13192581290194429826259d29fd9df4a0c725752968a324a53927b1285fa328a538279c2740a15fa3d0266c258d9b6799f625d5210e99412175266a1bb017f2275b281a92251c862aa829e694cf18452ca42aa1915219092d932bcb028c1a822df22bce0f381cb42d0c2c8314091d472e4a2cbc146b1c742e782ca1130a1c982e892ced135c1bf32ea62c63120c1ace2ead2c9d113b18d02e962c40121818122fbb2c72111717db2ec72cab012893da2ea52c9b8399943b2df12be383d8957d296029f5809b940f225b2656069c929291ba2357103e1222924b222e124d162f145f216e142c1a991a09213214471abe1b6320e414431b861c4220d814811bf81c0b204b14e61a6e1c131fce131d1a061c4e1e1a13df19f11b391e1a139119791b091e8a122619961a611def11b518201a031d91118a18be19c11c52114b189219851c0a1126183e19661ce910ad17f818161cc31035178c187a1ba31001175e18081b3a1084163718c91a1010481615186e1a890fe915be17511a280fba159017641ae80e74143116bb19ae0d42128314b018ae0d42128314b0180000b386c685a40e0000b386c685a40e5e8919193a1a5e230a884d1a131cef235c136519b51c7d24051a4b190a1c8224de1d1a1bb61c15250321a11a9a1a2b25fc2314185314d62440252c073b958f25ee25f898b59c51263826d49cc99fc2258a2508a02da2da25cf24bfa03aa30e26b72265a0dea26126e91f8f9da1a061265b168893d1119c26c698350841221528b7990016aa272029c5978e16a72aa72a11957a17a32cfa2bb690db17422d4d2c3e880b1a052e932c680dee1a8e2eca2c6e120b1ced2e042d6312b51b332f142d5d112b1b932f4c2d6010281ac92f602d4511a419b42f6b2d86123919902f7d2d60108518962f812d270e7116202f242dbc0b5612082d102cb00c3e10b727b928ea0d1015bc1ef6249a1271183413e22203144a18fc130c2234138e183716a521571344190f198321e2121b194a19a620e3122219ac192e20ed1280197f1a1e20f7127719a41a8d1f6112c918041a911e1a12d9180d1a3a1e2312b818121a221e94118c18d519c61ddd1004181819f21ce310b517e018bb1cb11047178b187f1c8e101c179b18611c99102a179418431c6410c2165e18111c01102516e317311b300f86152317a11aee0e5515c516261a3d0ed1147016f619430f071588160b1ab60e5e144a16831a750d6413e614751a750d6413e614751a0181750bda090d0e0181750bda090d0ea58b5214c414871c959025185f1941247794861889191125de9425181a1a0e252a91d616da15092545142516e217f524cc1afa1593140d25cf1c0e95c999ac25951e1f9a059d2f26881e589c6e9e9426fc1ed89d60a05f26cb1c0e9f1fa13a268213c09e86a16026b298839bf49f2b26bb9ad2964a9d4a263a9c4191a5948f26bb9bd28d5d211828e099e2944d27b5295f97941b192cc42b7995d518612d9e2cb6912f180d2e092d6d8a2719b12e532d0f0c881a572f9e2d420e961aa02fe22de20e9e1ae82f052e4211891b1a30462e6213431b2e301f2e5613d41a1d30062ebc11af190330e82d18101019ea2e102d220fd217102c062b2b06d90401246a272409f604aa957124790d970e5a99ad23a910cb147595c12290102c168b8d4b22e61149189315d8216112c218391801210012c81882188d20f711f6185d1959200012eb18b1190920d01192187e19651f681168184c19a81e711114180d19ef1d271153177618631de010eb163418141d7910d2164e18db1c3b10b0163418be1c0710ca163d187a1c0110a4161d18401c920f5716cd17081c4c0f14168217c31b9e0e4f15cd16321b560ef7144816a61aa00d7214ad15291afa0da314ce15241af50eda14d416c21abe0eb81411174d1bbe0eb81411174d1b5487b5881104ea105487b5881104ea10898f340f4c0d351c67942e1602187524df9632185c19c625d19845189519d1252b9876182f19e6259a961b17b218d6259d985012e68ec82528998796909956265a982a98c99c9a2652996e9a169e9826279ba09cfa9f2826c09bd69c59a0e725e29ce19b169f45261b9d6d99ed9f74263a9dd896359f1626069cd0153c9916263b9bb314730b0a274898d918ee2295287698a5169e289e2aa596e317f32b6e2ca5949919a92d792d9b8f0f1bf52e0b2e3709371cb32f512e970a1a1bc32f482eaa0af1191230862eae0e461a5230bf2e970e8e1a5f30bc2ed1121c1b5130762e280e16190730e82d9f01900f672d9f2ca40828136828a329e60ac3146b1df825a80e5014da982c24a70f87143198e423f90f5a14b7964c237d10ee15d490b32295119c18ed141a223e120a193718782101124e19a918fd206b116f18371819208e1011183e180d1f851011187118ee1e5f10e8179018b71e6810af175a18471e41106e176418e01dc30fd01626188c1dca0fdc162618291dbb0f4d16eb17ec1c4a0f02169417b61c2c0f1c1641176b1cb20ee215df162f1ca50ece1519171d1ca80e6d159416011c360e47156416c91bc80de5143516671bb70dc21413163e1bb70d00142316d01a4f0c3112961466194f0c311296146619d0833a0bde081612d0833a0bde081612a6903a0f110ff51c6d95f411cc1393244298c9116613d8251499b213b813f725c499fd11bc13c425659a310df00ef725609b1287078ff825759c2a95409924261e9d3099ba9c5126e69c759aa29d4626749d7e9bbc9e9926d89c0e9b449f2826889d129b07a02226709d3c9a57a06926869d949940a07a26519df799c7a07326069c6c885e9dd2266c991591109c9627089a920d6121b128519824133e28d22af095b7171d2cb52cae93da18dd2ddd2d0a8e6119602fc02e22886f19bd2fe32ef986e6192830332ffc82af197330812f31085b194d30282f980a5d1916309c2e3a0b7f199d2e7d2d0c080f18f12a4c2b1c849e85ce21ce27e809f411ac975124d208e410a09a1224710a5712c798cc23f50b3b14b2971f234a0d84143c948722bd0de515e286f8214c0fc316f90f6e2121108117d214f520721000183116de206810e117791678205c0f8b16fa15791fc80e02167d16af1e7f0edc15a616381e6d0eb5157016041e600ea4154016bb1d0d0ee7159816a11d0b0e641554164b1d910d2f151316c01c700d8e1456155f1c030d67141f15321c710c0114e914df1b620c4e138b14d21bae0b6b12cc13181b940a9111d5129d1a4e0aba117c13a91a5e0c66112213bf1ae70ac20edb0f7218e70ac20edb0f7218c184370667065210c184370667065210c490840a97088b1c1e953a0f9412f6243b9834106d1112263a99c7117f13cb256e9ad113f714d525299b538dbf881e267d9cd598029b2326279d0398489c3926a29d5799e69c7626e39dc39a299ea6266d9e0b9a049ee2265c9dc498d69d96268f9d34982e9e6726f49cb598cb9ef026a89c2799e39f8427669def98899f4427c79bec943a9eae26869b8694bf9e5026009ae210e799522716981a16431f4528c89690148726492af4955917802a8d2c2a948c16352dba2d57918b18562e6e2ecd92d816432ff32e088f9614c52f3a2f658ab8165e2fda2e938207184a2ec42de901e616a72b352c3c0714182c25fb28e70486121b15b42594054f0f199b4b24850812120b9a23240f063c123899c32327094e1369985523b70a9613f4955a22420a2614a193fc21270d881556867e21750d5a1624110021670eff16ac13aa20780ff61685154220a50fc01616169c1f9f0e86166c16541f930d3a161d16d81e3a0d8015b415421eef0cdb143c15a31dff0cf81415155c1d3c0d9614ca140c1d220d6014cc148f1c730c3714bf14821cca0b15149414421cda0b46130d14011cd50ae712b613761b5a0af8111c13e11a650a5e110f13ad1a950acf11df12a71ab90a4b11ac13fb1a3309a30f8811f0183309a30f8811f018a8869f8e7c8cdf0ea8869f8e7c8cdf0e439214887190171c0e982291a890bf24c4991e906f93f125539a36908193cc25189cd0941e96f225f89b43922e944f26d29b71945d97e7265a9cd0949f982827c79ce694359a4227229d3396c79b2d27009d5896dd9c71276c9c2c96e99c5027289d7c97bd9d4627d89c6898a69e1927069d7a986d9e79264f9ccf95069ec226b39a008e339d98268c9a138e229ec726889a8094d69e97261d990413bf9be2269896b817a414b7270d988007f2206329499576133e28a32b4a959718302bb02c2c900519b12cac2d9e8c2619042daa2d8689ad19562ce92ccd8dc116e629942beb904c857724c828598f7b05d5181626e88b84860b9c2325f985e305779b40248006c71366994c2422091c136f98a123be08f41352970423850827144f96bb22eb08e2144b949f226f08941475902f22010ac014e08c88210f0b801478059320410a22141f0e04204a0b8c146811bc1ffd0a6b1449116a1feb0a51144b123a1f8c0923140412c41e9709cd13a812351e390a43132c12c21d220ad212c511451d640958122512dd1c16092312d7119f1cfb08fb11c8117b1cb10839115b11261c700866101911bb1b86085c100711a11baa076a0f2410171bea05070fd50f8d1a1408fa0d85108e1adb008c812686ee18db008c812686ee18268ce886218b5413268ce886218b541388917a8a858d491c08980a91c49037259499cb915f93f425699afd91ea940a26be9bf59471974226459cec9624998c26d89c5697309acd26419dbc97779aef266f9d0498ce9a35277e9d1d988d9b0f27809d2c98b29c77272b9d8e980d9d3e27309dd198b19dee262c9d51985c9d5a26909ca6948a9cab26259c748ecb9cda26e79ae18dd69c5026369b738e3f9e0127f79b9288b29e4a278c992708339d6726a497c614959ca5252099b212fc9a04261b9825137018f227e595d1125122be28039417154125be29e69008183826152a2090ec176c252629c190fb1393212e284290c6114d183526bf877316fd8e9f244502ed16eb97af243382f912ce998c245102a212db982e241f8297125899f3230f825a1292989823f78116129c960e23f9813e135d95c422b101ca13ed931c22a3012113fd8f712195018712578ced2075012f12168c8e2068010a1249855620f503c81108052120e9038211c004ca1fca034011c80a461f3c01e710530aa71e7e038910d30c171e35033b10710c7f1def020810d90d2b1dba04e30fb50df21c8e04b50f100fc21c65046f0fb60e6d1c9c044e0f8e0e3c1cee02f00d450e0c1c0601690c710c0f1bf000f50b2d0d8c1a8002af09140e481a1a05d90ada0c75191a05d90ada0c7519ba826b88648a2a0dba826b88648a2a0d01935e8dc390f91b4e986394ba959824ab992c95bf97e825849aaf952f981a269d9b0a965f986026989b289696988a26ac9b0696409973261c9c46965d9983268a9cb297059bba26ff9c9c98059c0827089d3298a99c5227929c1698c29c4727739cef979e9cf9268a9c0e98769d0427929c4c98309e3d27b69c8497879e8827ad9b56979e9e1127889b6896f09e4e27279c0595949eba26259a5291649e8a2616992508ea9dc8266997b8122c9c092624953818a1992526ba965018b09065268d96fb16d913532610930116ac15a4267091a516c110492698907a16b893092604905f16d9947f25868dd817e497bf243a8ad5150c997e24c6892f146b992c2477899a12a5994524228a1013829918248f892e126f985e23ec850e137496e4226185a4120d955f22b0813f128493cb219c81eb116d9147219781c211728f14218b81a811338fd1207c8198113e8ca42062813711438551205481c10fba849b1f3a81360f5984dc1e2981e50e2484681e2081350d0304351e1981170dea03ef1d0b81300eb703831d01819c0d5d03e31ce380c50bef02441ccf80570bc802e91bc6802806b282801bc280e60594822c1b4882ec018282d21a7582f2018b82eb1ad880dd016b02451aa0855a8a988dab19a0855a8a988dab1900001b859a85548000001b859a855480bf939d90f992fc1bfd9aa99782991f25959b9398829af425599b2699289b4226339c4f99669b6726419cee98119b9126679c9d98719bc126909c4798fe9ade26b09c6698c09bc926c89cf796509bec26b69c1e96b09b5e27229cf495fa9b5c273b9cbc94ad9be626129c8793cd9beb26d19b2791f09ba9268b9b8691939ce826559b8d8e219cbc26439b958e649c7226e19aaf88cb9cef266b9a7488ec9c732670992208f39c002693982d081f9d3626c698370e179dfb25bc9705081a9e2626f0954707479d6825d1936e13489b0725399190158e9905254691c2169599f824a991f1151f9af5248791eb152c9b40250d902513b69ac124b090fb0f249b8b24e48f08107b9a7024ee8e6d0cf099d823008f3d0c88994f23af8ee10b9e989f22a18e670b4a984322d98dd30a0b97c0217a8c530a71962a21388cf6035295d520fc8bcf031f959220b68bb00357946220e589850315941f20318b47036b92821f138b1283e891c81e158ce2827291201ecb8ac2824190d91dd18ba6821090781d1d8a8b82bb8f351dc4895287538fee1c5c890987018f9f1c0389aa869a8e441c83883d89368e031c99882789148eda1b6b88fd8af08d811b6288e088838c7f1b0787f38ba18eb41a1c8c53907591de181c8c53907591de180000398892887b000000398892887b00c792159279946e1b3a99d198e599ec24f09a7999019bf025f89b7f99a29b4126899cce99049c9626709c7f99499cde26c29cb7997a9c0227d89ce3999e9c2327309db599c09c2a27ef9ca6981a9c4427c89c1f98379c6027c19c3c97679c6c27b89c2b97789c3c271e9d6b96769c2127b99c2d95909cff26b19c4295d39c3027679c3e947e9d69272f9c4394589d1b27479b2394af9d0127c99abd91d99d9a26de997b91389e79261f99698e169e3c261e98490e2a9dfa258b960a13359cb7250c954d15c49aa825b5946014d29a9c259794bf12a49a4925f893ba12b49a40259d93e2101a9c6525fc92c610009c42251a924b103a9bac24bd91780f909a2c243791440f159abd237d90190cf999562326901e0cd29927231790e604c99853226790ba049c9833224f9090046498e821b58f7f0495978921318e5504a6953a21f08c01048394a520c28cc983ea946220208d6b8ca59410209e8d268cf794861f7f8d868da794ea1e278db38e5194691ecc8c568e1194ec1d8d8c0f8eb8939e1d5c8cd18d6493451d648ba88d27931a1d0d8b768d0e92cb1cad8a308db491831c498ab18c2491f81b638a628c2f907b1b978a3f8c1e900d1b288c468cbe8ef81a438bd28d8b90961a628c8a90e492371a628c8a90e492371a000070888b897b00000070888b897b00559398920d95f21bc39a8599c59a0d25529b829a389cd925f99b889a7d9c0426869c5a9a5f9c2b26649c279a599c69265e9c5c99499cb4267e9c2699169cbe26859ced985a9c0127a59ca7981e9c1f27699c47974a9c5327359c4b96219c84272d9c23952a9c4927189c0594279c1227559cc091559bb426ec9af58efe9b1a27de9ac2880c9c4c27949ae608239c5927089ab808079cf1268e99c011229bde2616993d150d9bb0267b984016f69a802610981416b49a11262c97b315849acc257d958615639aae25ee9452153e9a762570943c14fc992725d19225143299fb24b691091527991d25fb91ee14f898ed24e9908b13bb989d24ab9173131d99652457916311cd982124a1913d0f9498bd232a913d0ce3986523ed908b05b7980123e6901185c7988a224691dd8abc98b6214d901d8d34981221b78fd18e0598c32025909f8ebb977e200390009019972120c98f9790b396a61fa38f5d904f96101f3890eb908296931e3d9070913696261e0a903b91ee95de1daa8fa8919d95721d868e2b912895e51cb78dc090b8947c1cdc8c7e900c94171cb58c5c90ce93e31bbb8cda903894ad1bc18cae907893641b8c8c7d902893ec1aa38c75901393d81ae48b529059926d1aba89818d59909419ba89818d5990941900009d08fa07d70100009d08fa07d701f9928a93e5944e1c049ac7990c9c6d25f89b029c269d5d262a9ce89b529d1a26929ccd9b9d9d5f268d9c1a9cb69dc226129d789b9b9dd9267a9c319a399d08275e9cbd997c9cc5262c9c5398c19bca266f9b9b95999ad126949af192f2998426a59a039164999926de9a728ebf989e26b89a5a081299c8269f9a9d0e5398a426349a0d147097df260d9a34147597e326d29977158c97c3262d997515a597a426f2986b15ad9888264e98571587996d261098471566994826b19627163e990026c0950f174f98ee25bb94da17f196d6253d949017bb96a825a4934b182195742561922a1803956b253692fe16cf941d257d919815be95bf24a091a714e3977024539142134c983024fe8f3613829852243e8f3b144e970a24948e8b1374960223588e0913db9691225990ea048a981b226e92f594d69abf217692bf95d19a4e21ab91a194a599a9202f9194940d991820dc906294d998b51f089193949098431fb090bc945398bf1e7590749448982e1e51903d94a497bb1d899019945397611d2590eb931597331d1d90b8938896011dcc8fca923f96c91cf48e6a92d795621cba8f8a927295fe1bf98e2592bb946d1b018fe2919094011b548ed8917694da1add8c6f909e916e1aec8b3f8f75910019ec8b3f8f759100190000e48a910b8f140000e48a910b8f142299d29ac19b3024e49a099c529d1f251e9c7f9cde9d7a257f9ca69cfa9dc025e09cd69c439e2926fd9ca89c619e7d26959c0b9cd59dbc26819ca19a159ded26829c64998d9cde26529c7f98429b0a272a9c3a97ce9b7a27609b7891ad992427909aa18867985927679be1088e986727469b710fba9878277a9a5a14d9973f27d999101872944727ae99b2186594f92645992a195394a6267298c019409451261298381a38942c268b97331a06911f266b96b71afd90f9257f95741ad090c425b194251ab990c2251894de19be939125ae93ea1987938125da92e51987938125e692e61970908125a5924a1955905e2597925417ab971925d3924610ca9acf244792870c369ae62359921306de9a04241592d785b39ad7234192a58bcb99a92274920b8ee0995d2296923b91f499ce21ed922b93029a472130936b94069ae320079314954d9a8e209692b495479a4e207292df95519a0b203a920996069a911fc3911696ac99201f8e917f95fc98231e3e91d1943098511de590a5940198fb1c6a907194a697c21c939054946997831c8d9060945097741ccf9055942d975f1c9490849402972e1c73904d94bb96031c599061947396871b4a903e94e895441baa8e679364952a1b5d8e31934e953c195d8e31934e953c190000cb0e7c12e4100000cb0e7c12e410ae99399a279ca4222c9ca39cc79eea24399c129de59ed824679c659d389f1125459c899d719f47251a9c779dd59fbe25559c4e9daa9f1c265f9cbf9cee9e8226759c649cc19ee1267d9c329c909e5027569c949a889dad27139c5d988b9ca627c39b35944599a7273d9b7314f79066273f9a5a1955146c279a99ad1a1f162a274a994d1caa19ea268298011d3c1b70269097e41c571a13265797861c7d191126c196861ca917e7259895681ce815dc25d8945d1c3d14c725c694561c2f14b425a593991c3414d525be92951c2d1401267591a11c0114da256091281c7313a325e4904e1be5099225f8928f19f19241252496ae151a929d24bc94e10c5698602474943886aa99142414940f917f9bd12371944894299c12234694f594cd9b0f22aa94cc95889b8c2182943496459b5c21b1941e97769b2421a894cd97d29bd3205e94d397b59b782003949197549b00205f932a97009b801fc1924397b19a091f5992e196659a971e5292c296d599e31da19133965399441dac91cb95e098ed1c0a92c095a8989c1c2e926f954198351ca091f0941698e91b0e91be94ce97641b9f909f945f97201bf08f5f94f196071bdb8f9094e396ce1a179057947296861a6a8f7c943496c21aab8f2f948a950f1aab8f2f948a950f1a00000c125d14641500000c125d1464152b99c69bc69c2823e79b6b9d9c9fda24fd9b439d4b9f9824429c989db69fc1247c9ce09d0da0ff24b19c299e66a06c250a9d769e78a0c5251d9d3c9e4ea0f6250f9d309da99f5826119de39c539fcc26b89c2e9ce79e3627239c63997d9d6d27ff9adf91009a7227049ad6160e91a327fd983a1a8014d1273799ef1cd21aac276797031ee21c44270a97071f541de426bd95b41fa61e9726a0940120091f6a269d914e20981f6226148d6820ec1f2b26e9896c20711f0826e0895020621f1a26be831620741e2d268e836a1f981dda25cd88361e5d1c75258f8e6e1cad185a255e9182190d1031252f93f41683922b25d89307141f980825209413128c98e324d29314107a99942405943686cc9a40248694c993199ca323d294a796499c6d225a954498829cdd21719583986c9c81219395a9986b9ccf206b95c798399c58206095e498459c02202495cb982a9c8c1fc094c298199c0e1f8194bf98cd9bb71e6b94c1987e9b521e48949398289bce1d96932a98879a7a1d2893d997279a0f1d73926997cf99ae1ce591f7964299621c29914996eb98031c0c91c6958f98611beb9066953b98b11ada90e794c997641adb90c19457971e1a3791bf94f1962b1a579025940696ac19d38f58937d950518d38f58937d95051800002a110416b31100002a110416b3111e9a779c339ee622139c599e50a02624429cc79ea7a06024399cba9ea9a06f247e9c099fc0a07624de9c709f15a1c724449d19a090a11d251b9de29f5ca16525c19c7a9ea5a098254f9c779d2ea0dc25049dfd9cd09fbc268b9c3f9b9e9e6027c39b0c949d9ad327729a5b1727164228ac98321c311b7728db94101fc71e4d282a90fb200c212c28df0d6322b322af27a10426222d233e27bd0d1c225f22d326f40a17224a229d26930dcb21fc214e26770d5c211a212926470f16210d217726070dc3207b2099265a10bc204e20b1266c0c0120b61e56262e83591e2b1c1b262990511cc418d225ae92091910908b25ba94bd13cc99ff24fa9543948c9c8324b595f196789c2e24c39572969e9cc123f8957498459dd4228b96829a199e3f22a096f09a259eb8212e968f9aad9d4521e1953d9a959dda20d095269a539d7620a195d5990d9d282039958999b29c5d1fa594fc982e9c6d1e6294cb98ca9bdf1d4b9493987a9b871d18946598289b2f1d0b945398ca9af61c07943198949acf1ca4930798529a851ca293ac97019a6e1c72938197bd99251c969321971f99a31b1293c9961d99761ba59219967098b21a569181952f982c1a389175951198dc1995904e95ba971c1afc8f3c94c196f719fc8f3c94c196f719000006119516c50e000006119516c50e619a079d1a9f3b233b9c159fc2a00b24929cf19f2aa16324d99c00a03ca17c24b79ce79f5ca197242a9d26a0a3a1d4244b9d10a0a4a1d524389d08a086a1c424589dae9f42a1bb24dd9d0da0b3a15b258f9e65a02ba2fc254a9e09a00aa262269c9db89e0fa12927969cd698da9ce8279c99d715f18a5e287495ac1f8a1fc728520e91226523f72819157a242425cc281a170125a5259328640f58257c264928de172225f725692857173025d9253e28e917a12427254b28cd109b2437254428e2143f23ba230a28ee110022c521e327e28c6c208e204d277a92b81cfc1aba2631937418eb893e2618957b10d19a8f2580963894a69c7c240b9834993e9e4d24e2983e9b459fce239b980f9cdb9f582385982f9ce69f692257981e9c5c9fa3212198f29b049f3221d797e89bd99efc2059977c9b759e9f20fe96459b029e38209596d99aae9db21f3d96c49a729d3c1f1596599a3a9dd11ecd95049acd9c4d1eb295b2996a9cf21d30954a991e9c6f1d6c94a698649bc81c65933b98839a3c1c0893d3973e9a101ca892a497e699ba1b49924c97a5999c1b2f9220977899361bb291d8961099ba1a44913f96ad98411a1691f7957998d91906916395019894195090c9940e97b5193c90de943b9797193c90de943b979719ca0ac9141217270bca0ac9141217270b26968798589a581ce69cc09e85a0cd22f79c11a076a11024e09c07a07ea12824499d3da0c6a14b24769d60a0f3a179248c9d87a020a27a24719d93a03ca26d248a9da8a069a26c248c9d8fa093a26824909db9a0eea285246e9da0a0c1a26724139ed6a0fba2be245f9d8ca0cda2ff247a9c16a02ca21f25529c649e43a14b26359af896679c4528228e0d201920f429381571248125322b621b5c26bc27ae2b231dda27c328582ba01d83277f28e22a5d1c85260928b22a5819c8241f26e7291515d022b02364290184ed1e161f8d28c194da161e11d5272f98e997809c9d2656994f9ad49e4325d3988e9a45a0fb24c798139cdf9f42248e98959c05a042237598a99c0ea0402283981f9d39a006227f981d9d48a092214a98d49ce99f16211b98899ca19fb720cd97279c199f5520be97109cc09e22209a97c19b839ed31f30973d9b269e421feb96d89aa19da91e4296649a349d0b1ecd95139ad09c9a1d7695c299949c391d459583995b9cdd1c31954799099c9f1c0995d698ad9b4d1c869487980f9bed1b45946398979a981b0a942798309a281bbb93d097f699e41ac893a697a199871a1593239718993e1ab892c1960499dd197b926d96ae9857195291a0951998bb18009151954798331900915195479833194f0c391083119a074f0c391083119a071496949861996a1a0e9ced9eb5a09e22a09ce09f5ba19b23969cc09f58a1a123d69c0aa08ca1b023e69c25a0b1a1c3231e9d40a0cfa1cc236c9d63a022a2de23b59d8ba037a2c1239e9d7ba03da275238a9d71a01da22023a59d65a022a20a23589d06a003a25a22809df79fffa11422579d759f8ea13121b39c049ed8a07e1f1d9cff9c58a02c1da59a149c14a0e71ab2994f9c55a04b19db98749c92a0201753994e9d0ea12217a899759d65a29719769d0ca22fa5581ebc9ed9a367a67222e19cfba357a53f23ab952ca1bea29121b996eb9d8ca140215f96f69c5ea17221ac9b4e9e4ea126218c9b129e64a13b21ab99a79eafa1992189991c9e7ba1922153998f9de1a0f5204699619d89a0b1209698049d2aa02a206498de9c0da00d20a898e59c10a0fa1fb298bf9cd19fad1f5b988b9c6c9f481f3b98489ce59ea21ef297059c409e021e0697799bdf9dc01d3796229ba49d6c1dfb95cb9a659d2c1d0e96a99a289d0d1def955c9ad69cbc1ce395f799749c741cb4958c991a9c321cdd9407995c9bb21b8e94aa98e29a341b74947698879a001b60945c98829afb1a72933b98369ad21a1c93f397d999711af192ac979a99081ae7924c975199df193592a8962899011a6a929095a39746186a929095a397461800000c105214ca0b00000c105214ca0bd799e09cc19e40211f9c6d9feba0b4227f9c13a087a1e622789c1aa091a1f8229f9c0aa09aa1e822c09c0da09ca1a422c39c0ba0a3a17c22ea9c0aa0b8a15022d89c09a0d2a13f22e49c27a0dda13422b09c03a020a220220e9cf59e6ca14421e69b8f9d62a03120609b419d3da0831fac99259c069f641e7498ec9a0f9e771e76967099949d961e1795f598649ca91ebf938b98a69bbb1e26921698cd9a7a1eb89002973c9a1a1e8f8fdc95af99a41d2d8e6e9485992b1d4d8e57945c99961c01907795699a3c1c8b92c997449c091c3b954799549dfa1b6f98159c9c9f8c1cd7996c9dbba0721d9999809dc2a0881e31998b9dd1a0571f47998f9db8a0891f1699499d77a03c1fe998089d46a01c1fe2981e9d3ba0041fc098109d2ba0e41e8c98f49c0da0c91e6598d39cdb9f8f1e45988f9c779f721e0098419cfe9e201e8c97cf9b6a9ed21d13976a9bf29d651d88962a9ba29d331d4396d29a539dea1cf495759a079dba1cbc954a9ac49c7b1c8f95f299859c3d1c4c95a0994e9c091cf2946e99219c901bb3941b99cc9b4b1bca94ed98799b251ba994af98169bec1ac49482989c9a9c1afb947598749a741aa09445983f9af6190f94fa97c4997e1960928c96d0984d193e93959565982b183e93959565982b18a20291132316d40da20291132316d40de89a179dfb9e15214f9c479fcba0f221589c779ff2a0dd21289c119fc1a0be21479c189fe7a0c021639c0b9feda0b4215e9c1e9ff6a0ab21499ce19e08a19421219cea9e0da18521e19bc19edca029218f9bd09d51a09620239b379db09f2720a99ae29c3e9f4a204a9ad29c2f9f9720e599dc9c389fc220a199dc9c339fd5207799f89c1b9fdb209599399d459ff7207f99329d609ffa206c99219d369fe3205699019d579fd1201999eb9c179fbc20cb98d89c129f82204398859cc99e4320f197449c919e112033970d9c8d9e981faf96bc9b689ef71ea6964c9b579e731e1297279b879e9b1dde96619be59e711d6c97e29b589f8c1d47987d9cd89f921d65988e9ccc9f951d5c98a09cac9f8b1d48989d9c919f531d28985e9c3d9f551d0d98459c0d9f3e1d00983c9ceb9e3b1ddb972a9caa9e351d9297259c969e261d56970b9c659e151d2897fd9b2b9ee11caf965f9baa9dba1c3796b89a1d9d851cc595489ac39c4b1c8095b8996f9cd01b2a955499119c251be3941b99c39bd21ab594cd984c9b641a7494b2981a9b391a2f947e98bc9a081ae4935298769ac51991933b982d9aa21921930d98e69980191e93d697bc9938195993b8978a992a19a292099740990119db93619775993419db936197759934190000000000000000a20291132316d40de89a179dfb9e15214f9c479fcba0f221589c779ff2a0dd21289c119fc1a0be21479c189fe7a0c021639c0b9feda0b4215e9c1e9ff6a0ab21499ce19e08a19421219cea9e0da18521e19bc19edca029218f9bd09d51a09620239b379db09f2720a99ae29c3e9f4a204a9ad29c2f9f9720e599dc9c389fc220a199dc9c339fd5207799f89c1b9fdb209599399d459ff7207f99329d609ffa206c99219d369fe3205699019d579fd1201999eb9c179fbc20cb98d89c129f82204398859cc99e4320f197449c919e112033970d9c8d9e981faf96bc9b689ef71ea6964c9b579e731e1297279b879e9b1dde96619be59e711d6c97e29b589f8c1d47987d9cd89f921d65988e9ccc9f951d5c98a09cac9f8b1d48989d9c919f531d28985e9c3d9f551d0d98459c0d9f3e1d00983c9ceb9e3b1ddb972a9caa9e351d9297259c969e261d56970b9c659e151d2897fd9b2b9ee11caf965f9baa9dba1c3796b89a1d9d851cc595489ac39c4b1c8095b8996f9cd01b2a955499119c251be3941b99c39bd21ab594cd984c9b641a7494b2981a9b391a2f947e98bc9a081ae4935298769ac51991933b982d9aa21921930d98e69980191e93d697bc9938195993b8978a992a19a292099740990119db9361977599341900000000000000000000000000000000ff833094ae92bb1b2c23281a071d6822d326531dd41d82227529411ecc1fed23a92a851e00201124a52b9f1e37200d241d2cab1e45208123462c651f3d20d823232c2a1f1f20f822a32c0a1d071d1f228c2b68a437a5f121882bf2a966aba123352973aee4af0d28e22c771ec9249223542c6b1eda2822253f2b351eb82a5227a5297d1e1b2c9c284d271b1ea12c1d29a522241ec92c5f29f01dc81e452d0f2a5d182f1e602d5a2a7c17c01d762d842a3616201dd52d7b2a38149d1cf92d752a7713281c392eb82a1814b21b1d2e3f2ab812711b5d2ede2a26110f1b432e0a2b4312671b282ed82adb0e661b1b2e992a04141d1d692ebf2a0e15031d342e702a6b144f1c242d87296f108c17312a5e28a40d801129259026d816ea1ed8220123cb155e1cdd1ddd1da7149e1bf31c7e1d5e14a11ba81cab1de514221bac1caa1d94140d1bc31c881d3c14cb1a851c5f1d6614a61a4f1c3e1dd513721a431c161d8f13f6190e1cdb1c3f137919391b6f1cb312fa185c1ad91b4b12b918401ab71b2012b0182b1a721bbb1187180f1a521bc7116d18bf19f91a78113c187819a21a4f11081824193d1af5103d17b918e319e910321795189719ec101617831880193a110b178d1842190311b616c9188219a70f5b148a16e1180000000000000000ff833094ae92bb1bff833094ae92bb1b2c23281a071d6822d326531dd41d82227529411ecc1fed23a92a851e00201124a52b9f1e37200d241d2cab1e45208123462c651f3d20d823232c2a1f1f20f822a32c0a1d071d1f228c2b68a437a5f121882bf2a966aba123352973aee4af0d28e22c771ec9249223542c6b1eda2822253f2b351eb82a5227a5297d1e1b2c9c284d271b1ea12c1d29a522241ec92c5f29f01dc81e452d0f2a5d182f1e602d5a2a7c17c01d762d842a3616201dd52d7b2a38149d1cf92d752a7713281c392eb82a1814b21b1d2e3f2ab812711b5d2ede2a26110f1b432e0a2b4312671b282ed82adb0e661b1b2e992a04141d1d692ebf2a0e15031d342e702a6b144f1c242d87296f108c17312a5e28a40d801129259026d816ea1ed8220123cb155e1cdd1ddd1da7149e1bf31c7e1d5e14a11ba81cab1de514221bac1caa1d94140d1bc31c881d3c14cb1a851c5f1d6614a61a4f1c3e1dd513721a431c161d8f13f6190e1cdb1c3f137919391b6f1cb312fa185c1ad91b4b12b918401ab71b2012b0182b1a721bbb1187180f1a521bc7116d18bf19f91a78113c187819a21a4f11081824193d1af5103d17b918e319e910321795189719ec101617831880193a110b178d1842190311b616c9188219a70f5b148a16e118a70f5b148a16e11895080a8d808aad1a95080a8d808aad1ace1fe11cce1ee3231024d61d6e1e50241927ae1d221fe324c028e21c141ea824122ae01cb11d5124b02bb01cb31d1324412c2c1c941d5f248d2cfd1390114724952c9d9e44a02524552c80a4cfa5e524f72bf4a9bfab6426c92b42aa01acc426282c37a20ea2e424b42ba18e65223a25dd29fd196928d6261a28761c332ba7280b244d1d602cb529c01cd81de22c7c2a9015ba1d2f2df02ab814571d692d312b5514e01cc62d342bde14081d1a2e022b6414e41c982efe2a5f14f41c852e492b8b16441dd82ea02b28174d1df02e8c2b85147e1ce12ea92b8715de1bf12e732b7214dc1ada2e442bac14271bea2e6e2bc112fe17982e4a2bc0887496ff2ce729be8c7f9a7a285827388eb99a271dba23528995981b9acd21b813ed17fc16d2205f15011cb21c1e200915391c3d1d791f5e15351c861d571fcb14b01b0a1de11e78142b1b9b1c281e1f146d1a1e1c821d91136e1a2e1c981dd513291a111c7a1d6613ad19931b001d71121219701a7d1cd811aa18ff19371ca5116d18c919f81b6c1143187219ba1b4d11051846197a1b1a11ed17ff18271b4c11c9170c19001bf7104917b718991adb1010178918591aae10cc166418031a9d106b1635189819a00f2c15241724199b0d021320150b189b0d021320150b1804812c10ad12f11904812c10ad12f11933170a1ba61c19242e1e831c581d6524ae22701c7d1d8424a5257a1c8c1da3245528f01c331dc924fc29821ce11c6b24112b9e1a991b0325102c150860944625682c989c089e4125472c00a20ba4a325172c38a653a85b27ef2b38a64ea8df266d2b4ba3eca411266e2a509a548cbf251428588852233c275c24f616b328b3281a1d411cb82b0d2aaf90281bdd2cfe2a98934f1b492dc52b66830b1ce02d152cec0db11c0d2e052ca314f91da72e2c2c0c15b21df12e472cbb145c1d1a2f512cd415231d6d2f742c3a15a91c7f2f7f2cae140c1c782f7b2cbe14b51bae2f7e2c8b145c1ba22f852cca133a19ac2f8b2c870d3d13fb2e342c088a9d975f2c452ad58709971b265f27478964972f9023246e0a6f903c9a6b22a90f670d46934d214114cd196519e2200d143e1a611b4e203f14d21a3c1cef1f63144b1bb21cad1f7514f61a5b1cc41ed613081aac1bf51db612c3197a1bcf1db1126f190a1ba41d6d1203197f1a351de611b518151ac71c91118418e219871c5a1149187e19461c081121185519271ced10b217fa18d71bc9105517a3184d1ba6100e176918ce1a7410c4164618971a4e108f162718671a101045161a18301a221052163f18561a750f7a159617241a8f0d8d12c21493188f0d8d12c2149318e38a5f10c611f416e38a5f10c611f416f48e6019d51b76243e0c901a3c1bae24871b6f1b3d1d5425d2209c1bda1b05255624451c191cb6259026451bb81b9c25c928461811128025142a2c972a9bd825c02a359d7f9f8826ff2a57a0a6a26026dd2a17a2c1a42026262abca2eca4f8251f29f4a0e0a34d258827939d72a11d26f1236d0ec41a9326531c790880245e28e5963e1722299829fb998c171b2c072b3195c91b862d372cea90491c1a2e852cdb82281c862e8d2c3c11d21c0d2fd02c7f143c1d6a2fed2c5c14f31c952ffa2c0414751cb02ffa2cfc13f91be92f282d7e14f51b07302f2d1f141e1b1d30552db711a9192c30682d5611561722305b2dae0ff5140f2fc12c1410e313ab2b462aee0d47141c247526ec12c618fc179a23c2121a161e8e70229012b317a712002218147b192219a321c71224192a199620b0125519ee19212046128b19831aa51fd8128519421a061ffd1219192e1a3e1e2c12f618251ad81df111de18021ab61dd911b718bf19771d061127183119f01cee10d917e918931ccc107817d2187e1ca1105317b318611c9c10281795182e1c2b10e4166d18091c341082162a186e1b5d0fcd156717b91a5d0f9a151e17761ade0e3915ee16271aff0efb14c116ff19990e53143e16511a5c0cb511181494195c0cb511181494196e87d70f8f119d186e87d70f8f119d1850902718d919a52200953e18fc19e7242a94ad19941a93251d0efd18b81991254a1b651806118f259320c014690ea4253e24141599089225dd25af962f9c12269127259cae9e2e26ca27b39bc29d67265328f49eaba11e262f2768a0caa29f262725d19e46a2ec269821799cc3a090264917a39c70a16c26eb993c97398c1027db9b57089524cf28739bfd0d9d29a02a11982f1cf42c4d2cf9964419132e062d5a927419b72e392d368b131a3a2f902d7e0ce31bb62fb12de210881b0330cb2df0104c1b1030de2d2612051c5530172e0a13de1b5e30112e6113e41a6d30122e6711c6197c30122e6d1051185130c62d40106d17822e8d2c7d09720b72292729db0a2b05391c47252310f710349ac12301115814e397e7222b10af1472947b221712e9174b1204224512c6181018142137120919bb1899202d12101911193520f711171979190720f611b61897193d1faa118a185619931e86112f182019e61d7111ef17da18781dd51081178e18081dc01041179b18dc1c8e10721776189c1c4e1022177818531c2310e6164618231cce0f84160118961b290f4516bd17541bfc0e72150d17d11a5b0e331557166a1a270ed0141616281a420ec2142e161d1a7e0e7414ad16751a150ee8131e16be19150ee8131e16be1976861a156717d41876861a156717d4188793de1210183722bb95aa17c01868255d981f19181b4726a99a6c195f1c2b2674989119f0190b26ec05021726143026d0168c07cc970926ba1a3499579c2626e21f589c279f8e2694208c9cba9f27271521a89c25a01127d41e439e57a123278817ba9d83a1dd264694fa9b09a1b3266f9b649a55a03326389dc611a49ab126609ced0ede171c28cd99b61639257629579a0e116c2ac72b9b9968083c2d0e2d0b974b17aa2eee2d818fd41aa52f372e6703f51b1e30712e750a6a1b38306d2e4b0ce11a5d30ad2e750ec51a9430d22ea50fe81aa630ba2e57129e1bcc30c52ee110ef1aeb30d02efe0ed0175330062e1f0e2a17162d452c330b4913f3245b283d0f7a14cb94aa24f90f1214a299ed23350e391203990e233e0fb9146b9576224e1192179c100c22151249192a176d21f612ba198f180121e0110319c6182720c01051185b18f41e98106518c218bb1ea110401899185f1eb3102618a7181a1e4a1096176f18b11d281042172f185e1dc70fe11624180c1da60f4716d517ac1c470f40166e176d1c230f0c161f173e1cd90ee0153a17031cc50ece151c17091cc70e6c15f516b71b560e4b157016821b500ee91440164b1b390e7814e015db1aa00d8c139d15e81a190bac10a213ba19190bac10a213ba194d83c50ae90d60184d83c50ae90d60188f941013f21423220b98d8121c135e25689910143b1549269c99fa146c162b265b9ae9146a17f425319b891026141d26de9ac98d989540266b9a9d97f09a68260d9a7899b99c85268c99599b729e9526d09a819c42a0e326449cb79c85a0e1269c9d6c9c99a05726069ecd9cc7a1e226e39e8a9c80a1f4267a9e569c39a23027d59c7a966a9f5b27229c239693922528c49abd87e0258c299799de143b2b302ce6975a18e82db62dc894ec16a72f8a2ee0904f186430042f4a8b2c1973300a2f5388431aac304b2f5403e41af730af2f010b361af0308c2fd50acd19f330782f43097519d830382f3f0e0e1a8f2fe72da6080e16562acb2aad05d9107a1c202658024b12019b3a24060d12145499a4237f0c5c14cd971623890cfc1353957a22430ded145b90d421f70eb3157c065221fe0f1b172314ef204010b0179015c720f00fbc17aa1684201e0f87164516891fab0e5b162816a01ed80e04163916291e2d0ed2150516d81d120ec3155b16981d630ea0159a16681d4f0ec6154d16291dc20d57153816aa1c870df414cc15581c220d7d142d15101c1a0d6014fb14d01b8d0ce813cd145f1b160c27135514231be10b5c12b513b41a070cab120b14a91aa90b6c117a14df1a7a08700e2811f4187a08700e2811f418ed80ad0c6410cc16ed80ad0c6410cc1603957004fd1133222a973f13a013d125699939143414a6268b9a391438148426449bc41011126926329cc48d6c8f7426b29d2b98fc995726c09e4f99b79b96266a9ec99a229dc526989ea29bc89ed326919f1a9cbd9f4b27d49ec89b15a098272e9e339a6f9f1527f69d5698869ff626ac9d949803a05027809e9a9607a03d27a69c04945b9f30278d9c5d96849f1f27e59a690ec0925328a499b1143326dd2959986f17cd2b922cc8977613082e202ee594de16ec2f3b2fe090a5197230aa2ffc907219cb30d52ff18d1e191b312230ad88a91a1e31163015083c1a1a31d52f7c82eb177230042f29820c18092da92c1c8655146525cf282302a811bc985425a2063a0f829c092451020c11f19a91239806171222995d2328098c1225977d228d085913bf94e121720cb8157d866d21900d1e174911f4208e0e2b17851479204d0f0617631514201e0fdd16fa15301ffc0eea165b16fb1e090e4316a616951ea50dec15cd151e1e6d0d60157415a11d650d2c15bd15741d680dbc147815161d320dde143015d31cbe0c5114f614851c510c2114ae142a1cf30bde136b14de1bcb0ae4129e13341b7f0a17123513a81a750ae3110f13851a900ac7117913801a3c0bc710fc12e81a7508cc0d1a1049187508cc0d1a104918378aaa8a27079519378aaa8a2707951953952d8b548fa522d098d28c81938725e89a8a903b949c26d89ba1926d958426eb9c5297909a9a26249d21934b970127ee9c5b91c49731273d9d3b95af998927e69d7a966c9b9127269e7e98869c6e27829ec797fd9c5527b39ee497f99d5d27179ea0966e9e3627089ed296339f7827579e1899d79f4227ca9e1798949f8f26539dd89501a0d4264f9c719778a023274b9c329755a02b27179a480ea8982c284298fd15a924e6298e9806140b2a962c74966f08de2d0d2e9d940517de2f342f099375178930f82f2b916118d0301f30778b0e1b003112306e8b221980304e2f638df715fa2d522db888fd156d289029a289f906ca18b226e18cb88c329daf2414023d14739bbe24ff019e13f2990024f9052b134598f922ce0538147897c922ea053e144b957022a608a5146192fb217d085214178d76210b0a5114dc059f20ed0a7e148e0e2320bf0bd014ae11cf1f3d0ba8148211931f3f0b7d146e12171fb7093f141d12991eb309fd13b3121f1e6d0a501331128a1d400ae212c511291daf0984124512c11c440947120c12961cff081312da11701cbe08e1114112181c7e080e114711a71b870774102611771bdd073510ca10c91a9607a70f6310eb19d306d70de910d819df800d874f8afe17df800d874f8afe171f8c098db28e3b1c1f8c098db28e3b1c6793f38df78dfa1f5199b2915693ee25b69a469212949526d29b3f94a8969f26789c7f952098dd26ed9cbb96aa991f27539d1298b19a5b27e59d3c98059b8727d59d6197259b7a27059e53986c9c7227289e65984a9d9827959e7598d49d9527af9e7699869e4427009f7199169fd826179e4c993b9fe4265c9eaa98869f9a262c9deb972ba0c326de9c8e96aca07627579da896d5a09b27089bba931fa02f27ed989115529e8c27f298b608b21e242915981b156828322bf895c114302c052d86957213dd2d562e1194c816be2ebe2e1994dc167d2e052e04941711a62cf62cc592b0103e28632ae08dbb1448203b275b02e215b19411255282261535998e2452029715649835242e8225140999302448821d14e69800241f82b713f09668231e827c149c94f922de01c1148b923f22c401391424906f21a401ba127a8ce62089017612aa858e207d0145126e055e203c04fd11b70b0f202404b811470ba91ff8036d11eb0a221fbd031b11600d841e7f03c710f60c041e490371106b0e711d18033c101b0e2d1deb041110d00dd41c9f04dd0f200f991c9e04a70fe70e5d1cb904470f9f0e181cfa02f30d4f0ea01b0f03690dc00df41af000130c2d0d411a6c02e609f60cff199105c80aa10dec189105c80aa10dec18c886ad8de38da217c886ad8de38da2178f9743928d9459227299ee950198a425b29ab196f2989526a69b39973899b726499c73975d99d326519c8b967e99e726b09cb396a899f1261d9d12989c9a1627889d4498d59b6927d89d74987c9ca627ef9d8c98fc9ca127989d7f98719d83274b9d6798c69d39273c9d6598499e25271a9d6998d49e3127d89c6c98dd9e2027d29ca997199fd826959c9f963e9f3027a49c2695439fcc26629b9193259fb0262c9a7988b69e17278b982211fa9b20261f98a617b3192d28dd987717e8224329c5950619cd268c2a3a9261197d28d02a7b916818d627ff29c090321782249e28788f9414871df425f88a7f1520948724138a30151f9acb24158c2015589a6b24788d0f14429a3624748cfd12639a4b249a8ba5126899e723e288f011ac97f822aa85d012fa9543229c858e12be94c42110852c12439365219281d5118b8ff3208581b211588cc0207a819811438c93206801671186855c20520104110905ca1f3a81570f6284a51e2a81d00e12840b1e1e819c0efc03eb1d2081850eed03b51d1281450ec203761dfe80bd0d6303d11ce980e40bf5021d1cd780540bba026a1bca8005099e82f51acb80df058f82cd1aca80dd058b02c21a7c82d7058302ab1acd00e3015307541aa787478a398ca819a787478a398ca8190000618a468aa4060000618a468aa40634973c943f97a821189c9098169aba254d9cf798109b64265c9c8099849b8026a59c9c99bc9b9d26eb9c4f990b9ceb263c9d0799dd9b2227919db6981b9c2f27c09de1984c9c5527d69d6898169c8b27cb9d85961d9c7f278c9d69968f9c49278a9d6196e19cfb269d9d4795099d0127689d1a955e9db626ec9ce494179d4526fa9cf593679d8d26c89cf491a19d9f26279c3d8f629efd26e29b308f609efb26b69a92889c9edf26da996d88699e902698994a88229fdc26d5981a08fb9d8d26e4962208f39ba526b694a41032948d265c920414c90a8526ea90d2146d90ac2566916a1349970125f7904c15629bdb24338fff125c9ccf24f1919a11cc9b7c24048fd511849a62246a8f2411059af423e48f6f0f4e99bf230d8f0d0f64980923998e930e109865224a8d280eb396dd21c08cb30d409678214f8c340dab95dd20a98aef0ca0947e206a8ab90c70944f20088a5a09f692fc1ffc8901096c923a1f2d8b1e03f991951e278bf7829090061ef08ad9825490b61db28abd822190741d498aa382f08f201dc0897d828f8fe11c4e8930871c8f7e1cee88c2869a8e2c1c9b8851894d8ec91bb8883c89278e9b1b5f87248b028e6d1b5d87e3886c8c071b2987268c9a8dec1a658cc790a792c819658cc790a792c81900008c8cae8c3e0600008c8cae8c3e064b96ec94d7972221d199cb98089b9125a59ba599fd9bb226859cb299499c0727ea9ce6996b9c1327409d069a3c9c5427709db1995c9c5f27c39ddd998c9c8027f89d2b9ad19cc127a49d12998f9ce1278f9d9998a99cda27af9d0598b99c8c27b29ded97249d5c27c79dba96299d2c27be9d85952c9d1627aa9d8e95479d2127589d5694d79d1527e09c6094629e19274e9c56946b9e0727089c4b94dd9e0727319bdd91159fb426609ac18ef79e7e2641995f0e059e4826c3971b13a69c1d2691965a15c49b8025cb956514ab9b6f25c3948312279c47250d948e12719c33256594ba12689c282531934e142f9c52259b914512339bed243992f5125d9a482432914311f7990324cb90830fe299c62363915f0fd299b223e590870b00997d2239914f0ba5980622fa900d0b0498a821c88fdf0aef967521758d950d299535211d8d450ac394b820058dd9034e942e20678d9283aa94db1f328d20897394571fdc8d0c8c3594cd1e908d608d7294581e1b8d078d2694cb1dbe8c248ed693791d908ce38d77931a1db78bae8d5392cc1c288c728d0a92941cc98a1e8da4912f1c618ab08c8090b41b848a858c4f90601bb48a788c4290201bee8a698ced8ed91aad890b8e1990dc1aae8c93905393f819ae8c93905393f8190000fb8c7d8db1050000fb8c7d8db105cd963a96d5982f212a9b429a2a9ccf25009cd19abf9c8226839cca9afa9c9726939c609ab99c9626ba9c179a959cd526d69c4e99759ce426f79c1299629c0e272a9dc498a79c4e27219d5398679c6927fd9ca397829c6627f89c9c96ad9c5d27e69c4694619c5927ae9c4a947d9c3627999c31926f9cea26419c328f729cd426ed9b308f6c9c9426729bc788819c7d266d9be108009d7726909a530f9b9c8626f9995214359c7a2635998e16239c42267f986717f19be8250198f016bb9a982559967d164a9a222533967b1694992925d1957e1583991a25289561155e99f724889339154399dd2483920415b599a8241a92b3147f997c24cb92c0134d9940240e9341132999232417934611d998c52354927f0f3b998023be91560c06993523289156058a98a022c091538b4e987b212191c28a27984b212b90238db697d2200390d88c31976920878f508e8d96e01fc98f928f14964e1fa78f6090c695ce1ede8ff59008965c1e4d90bf904696f61d778f3e918595b31df18efc9030953e1dfc8d9990c194b31c568d32905a944e1c6f8d85901994ef1be58c6b90e993a71bd98cd1903894571be18cb2908093181b508c98904593df1ad88c7b9000939f1ab48b5790bb91421a868a2c8e65900f19868a2c8e65900f190000b1834784b3070000b1834784b307599738973e997121dd9bb49b299d1a26699c2a9cb89d1327879cfc9bcb9ded26b89c7b9bc89dc226d19c209b959de626da9cc19afd9ccc26b09c4e997c9cd926cd9c8298569ce526b59c2497959bff26c29c47954b9b3e27909c2092159a3f27759c768f419a3f27499c1909a09932273e9ca50faf992a27349c7712cd98ef26099c8b14eb98e126659b9e14ee99c826de9a8f14e599a1268a9a8414d9997726d2997614a99a6226539959147f9b3a2696987515669b2626179838152b9bf625d3963116139ad225a69503180899782559947918ca965425bd93e51831953c25af91401924930c25aa9121192e90eb243c91b317b694c0242b91bc16d2957d2487918215be9640244e911a154696ea239d90f7142e96cc23f58f90149b951223948e46142e945322678eb311d994012209913a90e298ad21af915293cd9941212292a5932799a9208391cc93ed98182035912194b198a51f45915294ae982a1fd9907e946a989f1e8f909c9427981a1e64905b94d997a51d639037940d97671d47908193cb96181daf8f3a938b96cd1cf58f02936196af1cbd8f9992a8956f1c958f8d927095cf1b18900c92a094f01af08e67914294dc1a7a8eb1910f94631aa58c76903792701a3b8c8590ae924d193b8c8590ae924d197090a98f338a31197090a98f338a31190f9b9b9c5e9dbc24059c6f9c459e7025729cfe9cbc9e2726e69cf39cee9e86263e9de09c9a9ea426609d959c8d9eea26399dd79bc09d0727389d2d9a149d3827129dcb98429c5c27d89c8497399b5e27cb9c3794eb9959277a9c668f789842274b9c880fe09530274d9c70124d940a272b9c9c147a943827e39b0e1698942d273c9b6318a694eb26e49a6318a594ad261b9a481a82915f262199141c4c8b1a265d98e31b1e0bf225f897b81b008bda253597021b3591ce25f995ce1a1791ac253b951c1bf09082258b944a1afb935625fe93d61ab19053251993ae1a96904d253592161a0b8a55254b91931aef093c252a90ee19de89172587902218e494da245f91ac15cd964a24cc9157130a993024f7917b0fd199d22329920f0cb499012345921885c49984228092268ef2990122ef9243919c998f21999316939b99142110935294ef99b820cc92f494ce99452095929195249af31f6092c295229a8d1ffb91df95dc99121faa916095f7982d1e0a91c4946598771dc19085942e98171d80905b940598e51c7d903c94b597981c74907a941a97761c83907294fb96621c7c9086941f97271c78905894d096c51b829036943696781b79904394dc950b1b0d8f4a936395da1a5d8f1d942e96d1185d8f1d942e96d1187989ad0fa511fc157989ad0fa511fc15ba9a309cf29c8223949cb79c2a9f1525939c579d6c9f2725e09ccb9df79f7725049d179e30a0df25239d5d9e64a05c26349d0f9e44a0b826299d3a9d849f3627239dd99b489ec127159de399099d0128ca9c0997f19bfe27709c2b09f195cc27e09b3c18301182275b9b3e1cec185427299b4c1d501c1827a99a601d5f1cd926e899661dde1b6b267499691d0e1b4a26ba98541d0f1bf12519989b1d1f1ab625ec96891d121a6e254a96741d0a1937257095571d1d183225cb94511d651632253c94441d871460254a927d1d3e1667250191461d03166c25c490101db11556257a8fcd1cfd1631257190521c28151d25f6901b1bbf14ca246c91b2187a0f7a24c8937815429546242f94eb0f54991a241394748c3f9bb823c0946c943b9cd4221595f395039c1f22f7942296d19b9021f594f696d79b3521d8949597bc9bd020789491979c9b712012947b97599b072077935d972f9b421fc8925b97c39ad41ecb92ed965f9a4e1e6292a896cb999c1de29122961b990e1d9891bf95cb98a41c6b915d956f98331c72917b953b98d51b3291e79411985c1bd290cf94fc97391b9c90ad947c97121b199068940497c51a16906494f596b71a24905b946296761ad58e1594ea95cc1a718f8d932f951b19718f8d932f951b19e286920f9a111e1ae286920f9a111e1ac79a5a9d969e5524349cae9d05a0d824439cb29dfd9fde24859cea9d2aa01225a79c3c9e5ca06825319dc09eb6a0f125a69d069fe4a048269a9d0c9e45a0a626429d999cb69e0227cd9c7d9a639d7927009c9095159af527dc9a1416180b2128309ad31a30191828ce997a1dbf1c0728dc98071fee1d6927f098e01f7a1ecc26c3979f206f1f1626dc9899203120a625e296af2025203525e494a0201920e724f290b02008209524848aa820f31f852431849420611f76240b048a20501f8b24cf094f20561ec024b20c3220af1ee524580e2f20621e01256d0c9d1f991d21254d894f1e181c37258191aa1ca9163b25a992f41ac4094425019329191890292580924a186e94c9246593aa147c9885243c944086f99a26247f94e193d89b672332952b96649c962263950498729cf3218095ec97429c282168955c982c9c8e207b95b898319c3b206795db983b9cca1f1195cb98279c3f1fe694ee980c9cb21ec194ae98b29b3e1e8594a598489bcb1df9933098969a4d1d5e93d197279ad91cbe924297ba996a1ce691d19628991e1c56913596dd986e1b4d91ee957698e51aff90b4954d987e1a289164951298611a0591149570974d1a3a91c09432973e1ac6906d9475963c1ad1909094fe967f18d1909094fe967f184c00350f0614e5144c00350f0614e5149b9b879d669fd223019ca99e8aa05c24809c169fe1a09624979c2d9f04a1b624d49c929f39a1d9245b9dfa9f80a13925989d0ca06ca17425329dff9ee2a0bd25f09cfd9d44a02d260f9d0c9dab9f4427699cb198c49c1e284f9a0316220b43289e993f1e3c1e75288a97a8200c2154287294e821642204287d85ea22b82311271d0c5923b2230626b30e4623df235e258c0e3223cf23c124f8124b237a234e24dc12d32266231e24fc13c52257231624cc13b322fe222f246014c022e7224424d914d62286229724d415d522a822e524d915832229225825cc14d7217f218e257813e3202c208225b50d7c1f121e6f25768dc71ca01834257c94e1166392d4245295fd8c1d9a7a24cd953b94cd9b2324b59554977d9c7623579647992a9da6225f964d9ad19df9216c96709a009e792150964a9a9b9df0202696349a7a9d8220f795059a299d2b208595ae99cf9c641fff941d99499c751ead94bc98f99be31d7f94a798989b611d56947998459b0c1d09946098df9aeb1ce6934698b19aaf1c6c9319986e9a671c1093b8970e9a481ce592719791990f1cbe921f975899cd1b76928096ed98441bc2910b969298bb1a189178953598471a0f9177951d98231ad0907995ed97821ae490b194c0960719e490b194c0960719000037113d17c309000037113d17c309cf9b089e1aa07523899cc39f4fa14e24fc9c28a075a18724479d43a0a9a1b224549d62a0d4a1ef24a29d69a0ffa11425c49d4ba0d0a1f624d09d29a097a11425359e34a0c0a16525119f13a0f3a10f26c29d9c9ed4a0ad26659ce598b89c9927bf993c18dd16c02808910122fe228f298618aa25c02644290e1c532779284828ef1c9827ad28fd269e1c7a278228f224991c1a273b286923941cc326bd27a521771c9c26b8272621ca1b8026ed270e218a1c6e2680275821d11c88266f272e22691c38261a270024081cac258726f4246e1a3225a125142665194b24c124f62673165122b222e226fe102620541f56268f87061c4518372548936f110e968224209724966f9c262485986d9a9d9eec235899c89b809f1823ef98e69be59ef2211198709b889e3c210298779b999eed20ba974b9b6b9e822034971f9b139e1d20e296f59ac79d891faa96a89a8b9d171f41966d9a4b9da11ee595169adc9c3f1eb595c899929cc21d339570992b9c471d8594f098989bb51cae935798b89a301c28930e984f9ade1bb9929e97ec996d1b4d927a97d199211b2b924a978099c71ae791c5963999481aa8919396e4980e1a549122969598d9194491a89508987d198f901f955b97af1951906c94f6967e1851906c94f6967e18e4106518641a8e0ee4106518641a8e0e7398699a839c4820e59c5e9f0da1a5231f9d3da0afa14d244b9d5ea0faa17124749d71a0f2a15e24c49d9ba03da28124b79dc4a069a28d24af9db3a095a27824ec9df5a0e5a28d24ff9d11a10aa39c24ff9e10a16fa3ac24639e6ca11ca37b24879dada0d9a24025aa9d059f3fa24d281e8d6122b722792be4202e2aaf2b142c4e24be2ce12d1829e023de2c1b2e9821db22442c3c2dd89c2d22cd2b9f2cc1a216221c2b512c5ba4d621c02a3a2c0da4d421cb2a2c2ccca1e121bc2a2e2c8596a021cc2a142c4623c720c829292bbc27a41e2e28ff283829801a0d25dd252329570f792062202a28a8949917bf90ad260e983098759d6b256e993d9cb89f7c24ad98ca9c63a0aa236d98059d7da09a22a398fb9c8ea00f227c98039d4ea08a215198de9c08a000211298669c7b9f7b20ba97399cf89e31208397f09b8c9eb81f4497549b0f9e091fce96fc9ac59d901e6596b79a5a9d161e0e96319aec9c9d1da395dd99ac9c381d46959e996d9cd81c28955699149c791cee940899b79b231c65948c98109bc31b49946b98ca9a4b1b26942d985d9ada1af0931498069aa71a0b94d197c299601a80934b975a99151aaf92cd963b99ce1951927196c3984c19a091d8952798d018fe9039950d986d18fe9039950d986d18000009125014de0e000009125014de0e1b98569a579c171f449c339ffca0e422d19c0ea081a1bb23049d34a0aba1a223299d53a0dca1c323539d71a02ca2d223679d8fa03ca2ce23c69dc1a080a2b223b79db9a086a24c23e39da6a096a21123619d67a0fca12822aa9d1aa00aa22c21879cb09e11a1b11eaa98219bd99d6b1ade94ea97539b6613b19012945c98f50f2884d2842890461576065c0ddd8235189383d18dbf91bf1ae1947b98849ac31de799329d739e9e1fe69c76a0d9a1ce228217e521872130273a22132b5e2bd625ba21e7299e2a441fc31c4a237b234618089c06a340a5f821159976a312a63a25878dfba042a4dd230f92a09e51a294210c986e9d0ca195207999fd9d80a152214a99ce9d2ca144214499ab9dc4a0c420e9982b9d74a04d20d498269d30a00b20e998159d22a0d11fd698dd9ced9f7e1fa698b29c9d9f301f92987c9c3f9fb41e4b98219c8c9e0c1e6f97c79b139e9a1d8396499bbd9d491d2f960e9b8a9d1a1d5d96b49a319dde1c3a96879ad99c8a1c4596279a999c4d1cf495b499349c051cff94fc986c9b411bc8949f98049bdb1aba948b98a69aa61a87945b987c9aa51a23943298399a881acc93fd97149a3a1a2293bb97b599ff19f8924d976999d61908927e96ea98be19f6900595fa97fa17f6900595fa97fa1700001e11e514a50a00001e11e514a50a1b9b9d9da69f9c21459cd59f03a18622a99c23a095a1d122b79c50a0dfa1f722dc9c4ca0efa1ed22f39c52a0faa1b222069d42a0daa177221f9d07a0d4a12c22229ded9fd7a103225b9dc69fc8a1c821939c4d9eefa094202c9a789c57a08a1f0199f99aaf9dbf1e33976899b39c211f94957799349c052006977c9b009dd9203798e19c4d9e9321a699229ea49f1b228b9a089faaa043224a9b759feda03c224c9b369f09a1fb21c09aba9eb6a09c218099d29d06a01421fe96379cfa9d5e2086932a99909b651f0a8ff3953e98d21d998a44932197541cc889fc93a3985d1af391ac97719c941928974d9b34a0f01a40996f9d1fa1071d7499de9dd4a08c1e61999e9dafa0351f28994c9d63a0e61efa98309d5ca0b91ed098359d4aa0b71ec798229d31a0801e9898fb9c0ea0651e7a98cc9cad9f411e4d98819c2f9fef1de2971c9c9a9e881d5797c59b1f9e3a1dcb964f9bbd9de11c9696f69a6c9db21c35968b9a019d691ce095409abc9c421cce95e899829c0b1c8a95b2995c9ca31b1d957499279c421bca942b99e09b071bd19419998b9be11aee94e498329bb61ad894ba98c49a741ad5947d98959a481aa6943d98159acc193f94f497a6994119bf92c896f298541992946a963d983d1892946a963d983d18000063123e15d80c000063123e15d80c779b529e69a07d216b9cd29f54a174227c9c00a05ea14b226b9ca19f39a10c22759c8f9f29a1e521809c5c9f10a1b4215b9c059ffaa08621449ccc9edda05321df9b7c9eaea01f21c99ac79d37a0b020689aff9c299f1d20299af39c289f5f203e9a619d889ff220629ade9d28a08121949a2c9e5ba0df21ca9a979e99a01f221c9bf39ed0a03622479b389f0aa139226c9b559f20a13f22679b6f9f3ca11a22849b929f53a104225b9b7f9f4ba1cf21fc9a5c9f39a1a6218f9aeb9eeca06821009a799e96a00a215399a39d14a092206098f59c449f1520ff96079c529e3f1f2796ca9ad69d0b1e1696de9a4a9e781d2596ca9a879e1d1d0a97db9b1e9ff71c3198b59cfd9fec1c5498bb9ce09fd51c5b98a39cc69fcb1c3098849c9d9fb91c2c98519c439fc91c0b98329ce89ee31ce697359cc29edb1c9a97219c999eef1c61970d9c6d9ec81c3b97029c359eb21cf496899bec9d8f1c8496e49a619d601c0f96709aec9c101ce095149a9f9ca11ba095a399499c0b1b52956699039cba1af5941599ba9b521aad94f598569b201a8794bf98f59aef1938949098a69aa519f5935998489a751987932898019a54197993fc97d5992c19d293c9979399d218369377976b992b190f9443975699bc180f9443975699bc180000000000000000000063123e15d80c779b529e69a07d216b9cd29f54a174227c9c00a05ea14b226b9ca19f39a10c22759c8f9f29a1e521809c5c9f10a1b4215b9c059ffaa08621449ccc9edda05321df9b7c9eaea01f21c99ac79d37a0b020689aff9c299f1d20299af39c289f5f203e9a619d889ff220629ade9d28a08121949a2c9e5ba0df21ca9a979e99a01f221c9bf39ed0a03622479b389f0aa139226c9b559f20a13f22679b6f9f3ca11a22849b929f53a104225b9b7f9f4ba1cf21fc9a5c9f39a1a6218f9aeb9eeca06821009a799e96a00a215399a39d14a092206098f59c449f1520ff96079c529e3f1f2796ca9ad69d0b1e1696de9a4a9e781d2596ca9a879e1d1d0a97db9b1e9ff71c3198b59cfd9fec1c5498bb9ce09fd51c5b98a39cc69fcb1c3098849c9d9fb91c2c98519c439fc91c0b98329ce89ee31ce697359cc29edb1c9a97219c999eef1c61970d9c6d9ec81c3b97029c359eb21cf496899bec9d8f1c8496e49a619d601c0f96709aec9c101ce095149a9f9ca11ba095a399499c0b1b52956699039cba1af5941599ba9b521aad94f598569b201a8794bf98f59aef1938949098a69aa519f5935998489a751987932898019a54197993fc97d5992c19d293c9979399d218369377976b992b190f9443975699bc180000000000000000000000000000000033a0d89ac79a0c187124d4192b1d5f229428601ed01dbc22a72a001ee11f4b24e02b5f1e35208a245a2cb01e742089248d2ca71e54204d24a42c0d1e001fa223652c231d7a1d4a21982c4d1aff187e1eba2c670f9513af19802c3ea632a8dc1dde294dafbab05125442ddc1dc72466213e2d001eea289f24482c3f1ee32ab826a22be51c2e2c5b289929de1c8e2ce528b126241ef02c6129d422381f602d032ab81da81e442dfb298119281d122d99293418561c632d1929cb188c1cc62d38293418c61c082eba29b6187f1d522ed029a618531dae2e0d2a0c18ff1c992e432ab1189e1d942e872a2b0f991c432e372acc11de1c5c2e382a6917f01db42e5d2a82166c1e022e5a292715111e6f2c322827169d1c7728dc250d982ea0da9dcf244212a41a2d1de420de11641a251c301e6015cc1be51cb41d1d15ac1bf51c831d64147c1bcf1c791d6814131ba81c511d5414dd1a861c4a1d0814a91a751c191da4134f1a4f1c0e1d4613bc19a51b801caf123119a01ad51b1212c918531a791bce11c418371a2f1b9b119618f819ec1aaa118218d819c71a721152189319521a261113183019e119be107017ad187219b910441793185319d9102817ae182d1923112517a018fd18fc101917e118ff18ac0f891479165518000000000000000033a0d89ac79a0c1833a0d89ac79a0c187124d4192b1d5f229428601ed01dbc22a72a001ee11f4b24e02b5f1e35208a245a2cb01e742089248d2ca71e54204d24a42c0d1e001fa223652c231d7a1d4a21982c4d1aff187e1eba2c670f9513af19802c3ea632a8dc1dde294dafbab05125442ddc1dc72466213e2d001eea289f24482c3f1ee32ab826a22be51c2e2c5b289929de1c8e2ce528b126241ef02c6129d422381f602d032ab81da81e442dfb298119281d122d99293418561c632d1929cb188c1cc62d38293418c61c082eba29b6187f1d522ed029a618531dae2e0d2a0c18ff1c992e432ab1189e1d942e872a2b0f991c432e372acc11de1c5c2e382a6917f01db42e5d2a82166c1e022e5a292715111e6f2c322827169d1c7728dc250d982ea0da9dcf244212a41a2d1de420de11641a251c301e6015cc1be51cb41d1d15ac1bf51c831d64147c1bcf1c791d6814131ba81c511d5414dd1a861c4a1d0814a91a751c191da4134f1a4f1c0e1d4613bc19a51b801caf123119a01ad51b1212c918531a791bce11c418371a2f1b9b119618f819ec1aaa118218d819c71a721152189319521a261113183019e119be107017ad187219b910441793185319d9102817ae182d1923112517a018fd18fc101917e118ff18ac0f891479165518ac0f891479165518708d7c80f2037010708d7c80f2037010d6218d1c771e0e240e26571dc41da024b028a11c2d1e89243a2a681c3c1d3424a62b121dfc1dc324902c331cb11c6024c02cd7137f0e1824dd2c479ad19c94232d2d5ca0eea15821ea2c08a3b2a422207f2cb8a967ab0c21512c3eabb1ac9c231e2d3aa460a4b923282d8f987c228224962c111bb1282826022b391db72b49284228811da92c78293223771e4e2d5d2a4a1c3f1ea42de82af816eb1eeb2d7f2a0915f71d272e482a5515451d672e462a2a15371ddc2e342a4c15551d242f612ac214fd1c572fd62a8013f41c822fd02a7c10b71c7f2f122b2914d41c812f842a8e10151c762f0a2b5a10981b702f7b2bd412031c732f1f2b1d11bf17572e4b2a030a3e85182b6227320719945122582374908b9c719e9321b80c488e04954c2144135a185719a720e014d91bd61c841f51152f1c751d041f5615131c411dc11e0915931bfe1c411e4a14011b901cb81d9913841a4e1c6c1dbb13851a481c651da913221af41b091d001371192f1bad1c1112ed18561a451ce311be18061a0f1c7b1165189b199d1b52111f1856193f1b4311101832190e1b3711d9170e19b81af3106817c2185f1acf1020178d18f419a71007176218bb199410a01639183c19cd0fcb1584171d19160def12d5148a18160def12d5148a18f4854e092a0b0512f4854e092a0b0512fb1b081b0e1d1c246d21bf1cf81c70247e25181cf31c9b245b28251ceb1ce324512a331c6f1cf024072cdd1b891c3025962cea19511a0025ed2c9e8e3490c624542d4a9da09f1224342d01a395a4e923162d85a676a88024ec2c7ca70da9c424e32caca442a606250f2d8d9c38988025d92bb718ee24e626582935196129932815251f19322c462a261c161c692d132b3e90a31c942dc42b9089261d1b2ece2b450efe1c6d2e8a2b7914f01d212f892bfa14521e8d2f992b33152b1eaf2fbc2b28162f1ee32fef2b7e163c1e0930282c6b16201e2230352cb416cc1d34303b2c0615db1c2d304d2c9c14381cfb2f502c3111be192530522cf308d38bc92dd02aad03b391f2280b287f84af96c6184924c90f9b8519996022b1107d11718d0c211815ff1a4a1bae206d14b11aef1b18209d14ec1a4b1cdb1fdb146f1b9d1c941f8714051b721cd71eeb13611a181cfc1d5812eb19c91bb11d57128219671b681d17121119a71a041dd111cf18351a951c9c119718ee19601c86117b187f191a1c391127184b19e41b0111f517e918671bcc105c17a518d91ab310121772188e1a6410bf164018451a521099164718f619471091164818f7197610a5165218281a42105c161c180f1af00d1914ac15d018f00d1914ac15d018f08094093205880ff08094093205880f830bd719ae1c8e249917101c5b1cf0242a20f01b341d1e258124201ab61a0025a727c819161a65258129db17f7184c25822b541376123525932cd298119c15250c2dea9cf99f4325232d26a000a20925312d49a2d0a43025032dc1a3baa50426992c9aa18fa44e25242c659ec7a19525c329320f551d3f26992682155326552805207d1a692a032a3598f119a92c582b6f97ac1c812d352cf98e881d952e702cdb0c8a1df62e6e2ca212c91d872fb22cb115861ede2fc82c1415041eec2fc12ce014531d0730c62cf4144b1d2e30fe2c15164f1d4330ec2c4115d21c3e30032d1a13861b4f30162d6412ef1849300f2d6210d3160a30aa2c7a11ba165d2d052b0b10a3159927c52776126f18111a0e245110f50efa997a2296104c148395d4210f143c19fe166c2155134d19d31896204e13af19571a1220e712041a0e1b721fd3129819a91abb1ef8128319881a561e331230197d1aea1da811e5181f1a951d6c118518c319411d2a1142185d19e31ccf10121817198b1cf410ae17ec18641ccc107817c918441c7a104717a018091c411009177618c91b3f10ab163a18601b940f4116d817b11a770fc3153517401a340f65151617251a490f5715ed16de19290eda14c2161d1acd0c491249144319cd0c4912491443198080870c5b0b30138080870c5b0b30139c8f6c1b961c8f2424968519221c67254a0b081af51bbe25b81c6319d11a09263122fe189d1a3726cc2506134b144026be284a08019022260d2af199bc9d3e268a2bf59ed4a02826272cf19e18a157267a2c92a03fa398264d2c3aa122a4b926212b89a04ea304267529b79e23a293262e263e99b59f67268a2031927c1b4527f796548f67262129519c8b17fd2a472b339a701b772d662ca8983519bb2e032db4934a1a0a2f2a2da388af1b842f6f2d0710bb1c05309a2da411691c2f30992d04112c1c5330b52d4f12381c7e30dc2d1913051c8f30cc2ddf12351b9c30c82da111cd19af30ce2da81062178c30b52da10fbc141030fe2c590c230c892c8d2a9e0c3b0f57239c26450f4111309a0824f21015120e99b72253102f1478954722c711a4179e10d5216412c71892170721a9123a19e21890202212301930192420d511f4189d19c71fdf11e718d2193e1fe611b5188619671e8b1158185119df1d321115180919721df310ce17c218081da410c817be18cb1c75108c178d18801c1d103f179518561c0c10f5165818051cd20f931608184a1b5e0f4516b517f81a1a0fc0156517af1aaa0e6815e3165a1a8b0e071563162b1a7a0eb0142316111aa00e8d1424165b1a560da9136d153819560da9136d1538199385ba15631870149385ba15631870144a94bb19701c4f2498970c198a1bd125b1995f1a431c5b2611996019871b70268b143419db174f26541eaa156312822627224a888f944f26fc246499449cb9269527019d1da00427b8287a9e41a1ce2669295c9d5ca08a263b290f9da7a0fb269b27b79de1a0dc267b24489eeea13227d41d3d9d28a28d267b9a659938a0ee26a39d7e94b51c5a28919d29971b27f629d19a6615e62b2f2c239a0814f62d422dca97ce17242fe82d0f929d1af92f062eae83541c49303d2e170b301c6c30622ef60a1d1c9b308f2ecc0eec1bde30ad2e0a11381cdb30932e1112281cfa30932e58114a1b0931942eb310361aee303f2e9b102219a92f0f2d2b0fed143e2acb29f40dbe16871d9525ac10d415e899d9235c0e60124b9ac722890f5314a296502254113b179607bf215412291977163b212b13eb192419fd2085124a190d1923203911d518f618231fd8109f18ff18c81e701072181519631ecc105318da18191e6910e717db18aa1d3410711789182c1dc70f00170018cf1c2c0f56168717861ce10e00168117481cc40ed0153217031c850ef015f316bf1bc40edc153017a01ba40e7715ff166c1b480e57157b163a1b450eec144016d01ade0d89149c15721a700d9a134115871a54099e105f13d21954099e105f13d2193184a409b9046d143184a409b9046d147095ff15a6155224ff98d0141e151326fa99581581159d269c9a461449147726629bb012ca174126b1991511ad0f8426448d6311db92ba26fb192195239bff266a1f5c99d69c69270821cd99ba9da926e0213b9c319fd426c020439cab9f57262e1ec69cb8a060263e088e9ca8a01a27af9c8a9d4fa20e2711a1829cdba2072711a04c98849fb6275a9ce6880a1e9228799b3b911728652aa79a6f11a12ca12c1f99ad16e52e032e259615181d308c2e4094be189330d12e598f4019ae30ea2edf8ba91af530222f54833c1b2831762f6e08ae1a39315e2ff20bec192b314c2ff80900195431362f030e0f1aeb30bc2ee00cdb17492ebf2c600294147e2578283c02c412729a12252b0d2f14189b0c24500ca31433983523b80c4014a2969122590c83143394e3214a0e4a15c1865421b00f49171613de205a10cd17e914ad202a10fb17c8165420e70f0d17c116cd1f7c0fdc16bb16f41e0a0f7916bf16681e980e34166b16f81d5f0e0216a416981d060ecb155016521de80d98157a16151da40da1152f16bf1c6d0dfa14d015751c080dac145f15071ce10c75141915a61b970c0114d414131b220c41135714d51a110c8a123a14a71a160c4b1216146e1a240c8612a114801aa40abb109812ae18a40abb109812ae180000a6119115ff110000a6119115ff115a969112a017a0244f98f7143c157026539a02134112ec26239cf807b30ff0263b9c068ea18fa226b19c3b918e94a1263e9dd2945798a226e19c3899b89cc526c69b719a879da426e89b839bd09ead26979d949cdc9e54275b9f249dca9fbc2715a0499dcaa0862729a0789c0ea1d1273e9f2b9abaa08f278b9e009887a02027159d579529a12b271b9dcd96b0a0ca27099d9891661db928679b580eef28012bb3986b18812d682d58988e11b42ff92e199656179430b52f1193ef19e030c12f5c91cd192431e62f988f5f1a66310b30eb8b121a70310530880260199c3119307a82671895310730ab0621188130a02e530b1917032c5f2bed07cd1614205a2616824211939a1c243b02820fe79bae2394029912cf992023950af01214982e22f8087c14ed94c421c30d1f16d4866421720fb617c41133213c0fad17ea14ad20050f4f17be1519204a0f15174a16441f850ea8167716d21e600e5816a816521e740daf15e315f31d600d90159e15901d4d0d60156415371d3b0de6149515f81cdd0cf3144b15b61c9f0cb9140d15651c550c3214c2140b1cfe0be9137414921b660bf1122d14ee1a740a33125b13a21a7c0a03122413721ab90ae311a0137b1acc09fb102813ec1a81051e0e6810991881051e0e6810991800006e01a3851c1400006e01a3851c1456979b8c8b929624b499758dde913326309bf390b295af264f9c9c944797fd26839d6c98189bf7261c9ee496909a0a27739e3298299c31279f9e4399cd9c71275f9fbf989c9c9127759f229a7d9d77275aa0ca9ae19d2527fca0699b119f71275ba0f79a0ca07e27689fda980fa06727c29ebf9757a06627749e1d9898a05827f09d9b982da1c527769d7199dca0a527c89d7198679f7727039c5888d5130529bf99008f2d29ef2b769a4f16da2df42d7098d01562308a2f8a95071803312330c194d1154d3155303a93ab165c318230cf90721872316530a88cbf188b315c308f8eeb1639310a302b8b8417b32e802d3f8a3011602667293f8c8e8c629c962421028011c79c7d24d5062514e89a04249306bc14cd986a2317091f15e397c5220d090d1579952922fa08db149a92d621eb0829155c8d8721710a38156506d9209a0b7e15760f8520120cbc1559123020a50b6f154f13e41fa70b241503142c1fef0962148313931ec7091d14e212e31d9d0a8c135012671d610a1813e5110a1de009ba126812a51c79086a121a126c1c1b082912df11411cc608f1119711ea1b54072b115811931b57078a103511081ba40741102e10591aae07b40f9c0fa219fd07ff0e4011df19c60081011a82cb18c60081011a82cb185594f688208fae1e5594f688208fae1e8a95fb8cf08f731e439a5692be93c525889be1929395c726449c949444980227fd9cf39621994f27799dc898ee9a9d27019e6f985d9be6277b9e8b96bb9ac627499e8e96669b8b273f9e4f95da9c5427499f829a279f822740a0199aff9e942710a08d9ac09f62279ea02a993fa01827619ffc9a7da0622704a0209bf0a03127759e839a52a19e27fc9d44986da1a927129e8395a4a050275e9cf394ff9ef026d29ab6138319a328a499810f6628b72bf197fb17872dcf2d3097f6156b30bd2f75965815463170306595ff14743196301e9670158c316b307c93f5122d312a30e3953714d22f8c2e3e8d8c18422a182b248d3211fd1b262699863613549b94243d8291162399452427820d152d993a2480821a15689801245b027015fa95452340826915bf94ec2216822715fd908c22f40140155d8dc221c7011b144e86f820af01a513d8859c20950161138e054b2081011013ea0b15205a04cc12390e8b1f18049a11ee0d0a1fd0034d118e0d751e86030111300de61d6403b910cb0e861d5e051d11650e321d3c05ec10130ed41ce304a810530f6c1cc4046f10050f3d1ccb02410fa80edd1bf802210f640e5f1b0703ae0d0a0ef61af500490c790d501a87025c0a4d0d421a4d075e0d3b10b5194d075e0d3b10b51900002e8afa8dab1200002e8afa8dab1233998792af969824dc9ad6955a984626e99b2a972499b2267a9cb6972f9a0a27cf9c8698219b4227229d2698bf9a6927c89d4f97f89a7a27139e8298719bc8278c9eae985f9c0828909ecb98e69c1328759ec198be9dec27479ec198cb9dc6271f9eb798389eab27409ecd98cd9ea027359ede987b9fa627d99d22986e9f7c27829df696b09f3227539d0e970fa07b27a19c88955fa06127329c0f94d99f0127c89a1d94199f28275599e38e1a8c0228ef98381417257e2a49986d150b2c152dce968915a52e152f2c968616d82ff82ff594a415b72f7a2f3b946c155d2e452e56916514832af42b608e3f16da21be27bc8c63121e954125248a3a16699b8d244d8d07152b9a1324208fbe11649a26244a8c2713c3990e24e7898c12b0983c231d89541373966322d485f9120a95e6218085c413ad936321b481fa116391db209a81bd11678c8b208681a512478c69207d8174118c85342068012d113505bc1f4b81ae109d84b41e3481f00e3604fd1d2481ba0e1404cd1d2981980efa03871d2081640ed603371d0c81000e8d03d41cee80380c2903321cd9805b09d8025f1b82821706ad82c71a87820d069e829f1a7a82f90595828a1a8782ef058402371ad880ef058902931a5786e6818a82961a5786e6818a82961a0000a489598c9b080000a489598c9b084e995c9512997024389c8598869a3526aa9c8b99819b90260a9dd999039cdb26569dfb99789cfe268e9db199549c2427d99df999969c62271e9eb599dd9ca327479e4a99149dc427779eaa98c89cd927949e0898cb9ca927b69e10984b9d9127a69e1098c89d8d27289f4598fe9eba27439feb98069f8927529ea398139f0527009eed97209fdb26869ddd965d9ff826f39c9e95f59ffe26759c4792ba9f33278d9b3092ad9f0927839a169403a08e26089ae893f89eea26a199a40e671b722882981b0f8925872a13966788d228152c1f924415ae28cd2bcc9140153a26152aa4929310da1faa27279080150c955d254990f111e59ab824ec9324124b9b6624ef8fae132d9a6e24df8e5c11eb998a23278f711165997323e88e4111a6980a230a8ef010ac9775229d8daf103f9612222c8c4e10c5957e21a28bb00f5a94e520108b3d0f14947e208a8ad80ec3934720be888f0cd991e21f088a4c0c6591441f598bd6080f91ad1e5c8b1103bf90001e058bee027d90ac1dc08ace824690491d528ab2821890101dde899382c890ba1c648965878590781cf788fc86e78e2c1ccb888f89958ec51be2886e895c8e831bc08844892c8e491bb5880f8b858cdc1a3b87608cad8ddc1ac98bf78ecb90d519c98bf78ecb90d5190000328baa8caf070000328baa8caf07be98d595a1993f24db9a1f99ce9af425329c639a569c8b26d19c639ab89c1e27479d1b9a969c4327c39d649acf9c86272b9e159a0d9db627659ebe99ee9cf027799eee99219d0728549ebf98409d04280f9ec898519dd027009e2498609d9527029e1998cd9d5c270f9ef096d49d2d27269e2798579e2927139e16976e9e2727d29d1797049f1127579d1b97219f1227d99c169710a006277f9c11971ba0fc26f39b85952ba09626449bce911ba07d269d9a7608a09f60262999050fd19e6e262e980914d79dd526cc95240fca9b99273596950eee963d27c394280e48967326a494e41206982a25d093ba1688993525db927b15959b0325069493152d9a6e248b915f13cd9915242391cc116b9a162469927a11ac99d723af92de0e6499be22fb91680e7a98112299904f108997b521078f2a107e955521c38c03107b9424219f8c6c0d3b94c220498df9099b934820d48dab832c94c71f548e3e899394651f518e2b8c5994e31ef88d8f8da394571e6d8d3a8d4f94c41dfb8c5f8e0c944b1db78c148eae93061d708cd08d4c93ac1c188c778d11924b1c838b1f8dad91051c548ad48c5891931b8b8ab98c7c90281bce8aad8c6490021bdc8a8c8d3590b81a588a4d8d1c90df1a768c848f4d91d919768c848f4d91d9190000a68a078d4f080000a68a078d4f08e198fd972c9a0e24969b749a399c6026619ccb9ae19c7726ea9c9a9ad89cc126179d579aba9cf8262c9d1f9a059d50275f9d5899fe9c70278e9d0999db9ca027b69d2d999c9cab27bc9d0b98b89cbe27aa9d0597e49cb527bd9d21970f9dc027a49de595299daf27749de9953a9d8d274a9da894439d6127189da194409d2227f29cad92ba9dd026999c7692a39d7b26189c918f069e31267a9b0089939d1326939a31121f9df425da998715219df82531998016e49cb1259c980d171f9c402551963c18689a22250d960017ba9a4b2553960e16799b43255895e6153e9b0025c294d615339ae024bd938b17bc998324aa92dc14139a3224f5920614169a342476949d13529907243f93b51105999a231d92bb111099ac236e91a00c669952234191ab05e998a622799149855e98ce2154914f8b1b9875218a90ab8a8197fc204590378db5978b200590d98c0b9711202890398e6596621f0490908f0296cc1e5a905e904696571e4e90ef908396ee1d648f5791ae959e1d5e8f0a91cb95281da08eb1905395a11cd88ded90e494411c948db8904194dd1be28c8c901194831bcc8cf090eb93501be18cd990ba93f71ae38cc1908793cb1afa8c0f9132937e1af18b7c90d2915b1a438b968c478f1b19438b968c478f1b1900007084d689f00800007084d689f008bc99a198b99a5b24739c2c9ccb9d7e26c29c5b9ccb9ded26039d1e9ca19d0927169d699b6e9d0827129d959af49c2127319dba99c79c35275b9dc4988f9c29276b9d75980b9c5d27769de396c19b9b276c9d8e94439b8827119de18f8e9a6027f49c5889d2995627d69c0e1004993d27b29c1a1018990127869cdf121f99b126599cd31218996d261c9c0a10fb994526a49bea0fd59afa25209bba0fc09ae825659aa90f959bbe25f8994512319cae25209945141b9c9125739855150d9c7e2583976f17ec9a3d2593962c1827991925ff941e1976951f2533947819a39011258a9369198190ec24f590be195f90c9248391e418029399245b920518fc955d24b492c917f3956c2431924f1687951b2422913e178b950b24c48fc715fc9445231790861471947b22149042132a94f421dc908c0ba196b121aa91f88acc972f212b92c8904598b0206f915492939831207b91d6924f98bd1f3e911a9453983b1f3a914e945c98ae1ee9906f9458981e1e9d902a9414989e1dca905394ba97531d9b902f946d97011d359006941597c61cfa8fa4935696721c928f8f92ff95351c758fb0922f95991bab8f5a92d394e71adf8e83915994851ab78ec59114941e1a008d8a902292341ad88c7b90d892ff18d88c7b90d892ff1824841604ef0de91424841604ef0de914009b819c709df3245a9c6a9cae9eaa25859c039db49e3e26f49c199de79ea226459da09caa9ef3267d9d679c709e5927919df39a4a9d8627bc9d94996c9ca4278b9de097929b9e274f9da295309a94272a9dc38fb9987627ee9c4d09f7977727b69cc21256962f27a39cd814a094fe26709ca217a391df26429cb317c094b626219cb517c4947e26039c9c17a19637264b9b1d19b294d025799aac199791a525a5992c1a98947625da98ff197f9474251e983519179646256f971219a3972425c19689197b97f0242a95861a8198dd248293f91ac790b9249d92f51a388ab7246691c71a258ac124a490d61a160acd245f8f151af989cf242f9071195a90c2244a907418b1926424ac905d168a950b245a914f157a96e0233c92a512f397f522c992160c9e987f22f992bf8b4b9927224f93278e6699ab2172932a9174993321f992f9928299e420a4925d93689967207d92d994bb990d2053927b95b199761f45929795b399161ffa9192953399341e4c911295b798a01d0191c79471984b1dc9908f943b98ef1cac906d940d98ba1c9990a0946797741c8e907a941697421c9d905494d196191ca69072948896811b9e9049945396441b78905194fa95dd1a758f9193b895431afb8f5e946496c218fb8f5e946496c2180000cc103a1364100000cc103a1364102d9b269c789ddc24a69d4a9dda9f91250f9dae9d1ba08825719d529e63a0f325ce9dc39eb0a07e26f89ddb9ed0a00b27e09d099e51a07c27bb9d719c939eeb27bb9d8599729c2828319daf94af992128789ce312428b0e281f9c52199616d227ae9b241c361a58277e9be71c361bcb26759be61c1b1c5726d19a471d221c0426029b8d1c6119af25f79a9c1bef147e25d99a1a1ae38b3d256e9afc19d9910f259899851aa10bb62448982a1c98117c248696ac1c771145245595ed1c82143a24c894381d7d1452245493271d781469242f915b1d64148e2426903d1d0116a924ed8f531d5f17c324f68d241d1317c424b88dec1c1b18cd240f8f4b1c8d1781246b8e0b1bb7153f24088fbd19230ff4237c90c316ec93b623b392760cfa98222354944292ff9a742233958295669b002290950697159c7e217295ab97009c0721e0949897d39b98205a94f297ea9b2b20d193cf97a49b901f6093a997179bdf1e10937a978b9a351ea992d496f499881d399258968999071dfa91f495de98821c93917d95a598071c519172957398891b1091f3941498331bb290d094f897dd1a8390bf947b97bb1a07907a940897751ab88f7e94b696761a33907c948a964b1ac08e2e94ee957e1aea8e9e92cd94bb18ea8e9e92cd94bb18b9035c1393156714b9035c1393156714879a8d9c229e5624ca9c739e83a02425749cdf9d38a01625db9c469e6ca06925159d099fbfa0ea25869d1b9ff3a07b26ce9dd39ecba0c426859d2c9ddb9f4327ee9cad99ee9c8b27409c6389f3971d28ad9a8819c2163228e7994d1de11c14280999991e991e752701996d1f2b1f912660981120ac1f9e255b980c20181f0f2535981f20781fb32427985e1fe21e652498973d1fc81d36245897611eb11c2324e3952c1e181cd2238f945a1e031cac23bf92401e001b5923a4908e1eea1b1a23098dd41ee21b1223eb03651f5f1c0523c60c1a20a21d5323720e5020491eb2238d0c24206e1e4e244e096d1f6b1daa245203a11e851cf6240b8c081dde180125ab8e3a1bd514ca24ec915b18699272249d92e6117a9824241d949c8c5d9ad123ef949794c59b152320952096379c52225b957a974a9c99218f953898379c0321b5959c98389c8520a195b998689c21208195da98449c8f1f6095f6981c9ce61e6595da98f89b351ef694c6987a9bb31d7d947098e89a271dfc93dd972b9aa71c43934f97c599411c4592df965d99bb1bf391a296f598391b9a912b96d098011b7b91f7957f989f1a6391a3953998751a41915195b697601a519133952797511a9990ad94b9962d1ac190cf941997e918c190cf941997e9180000ad11b215e1110000ad11b215e111529bc69c6d9e9023d09cf09ed6a058240e9d919f2fa1b624209dde9f71a1fe24959d42a0cda15225f29d5aa0f4a1a525e09da39f43a1f325749d9d9e9fa04f26889d819def9f55279e9c96979c9b48288a99cb1c451c7d2890950f21c221752871928522a023d827408c062328246d26208f082300240e25e4909922ef220f240a9781218f21b222b296782048203722c295dd1fbf1ecd210e95f61ea01dc221f494ee1e0f1d75215794e41e821c70214592a01f881d672108905e20111fe3218784e92049201b22ef10642103218e22e813e1217b214423f3142922ac2118245e14ee2170216924581375211e21d524ac0cb2201120f524dc90281e1e1de1247192161a1c16b6245093311283956724a6940790d7990024de957595b39b24233a96be98d69c77228b96c499939da021b8965c9a999de9205196699a679d6b2029962f9a4a9d1c20d595e199fc9c5e1f439565997e9c801ee594fa982a9ce81db594d198e39b791d89949998889b1e1d59947e98199bdc1c2e945a98de9a991c91932e988e9a631c5d93d097179a1c1ce2928797d199d91b6792d8965299691b34927d96dc98d61ace91fc9576987f1a4d91bf952f98281a1791aa950c98f719c99087951498631ad0900995d996f618d0900995d996f6180000e510a615a6040000e510a615a604d79b5f9e54a07a23d89c3ba0b2a18724569d84a0e9a1c124c79d85a01ea2dd24dc9da3a035a208250e9ea8a04ba23425499e90a040a251258a9e82a051a29b25df9f9ea07ea2602627a08b9f3aa17627a19b5c90989672283a956d21e9215729b914a025a9264c29a51cda27d528f7261b1ce727af283e220519d8259e260720eb141c241425a11c3e8cab222823fd19a98e2321a8202e1c4793b320111f8819c0918a200b203118498e75205c1f1f180f0b6521ca1ee71567148f221a22241308181b246a233d18a3198b24d624c21a7f1a07256e25091f661b4c25d9253a22ba1a2825d0251425a8197d24e02462262d17af22ca225f2639105b1fc81ec325cf90c6184012e224f6956591469a432463986e99899d7123329891998f9d7c2294972e9a919d6d21f397139b129ef8202098659b469e8f20e3973a9b209e2e209d97159bd49dca1f3897e29aac9d1b1fc596a09a539db41e3096539a0e9d3c1ee995019ac19cdd1d459598994a9c521da494ee98c19b991c2c948798239b241c4e932898a09a831bfe9202982f9a331b9192a197e899e71a2b926a97d899ab1ad59107977f99731a9a91d0961199fa197a915896b5989319789100964a98611993908f95d2978f19f38f23943d963818f38f23943d9638183012271a191cf60d3012271a191cf60d2c9a9b9c409e36225f9d11a083a13f24a69d7fa00ca25e24e19d94a037a27d24059eb8a067a27e241f9edea09da29024089ee5a0b2a29024d89dc4a0cca28f24b59df2a045a3aa24a99f92a165a37f245c9ea8a0e8a24224ad9d47a1efa2d02712975a207820812b93232f2c392dd8294b24d62cf12d129f001fe328c42971a7b51173227b2328a5f197291bd015f6a16f99f1897198a99e259cd494fe9a6d9cea9930967b9d279b77994f906e99b09cfa959f1a3e15159f9e0415200c202aa1cf17e0232224a5a2c71c9626b627d0a31020de28e82972a0f6208f29f02a1a20061f952882298727841be225b826aa28f603e0202320f5272898551435983925d398f19a9f9e302439981a9c4a9f7f22cf98b69c27a01b224598ee9c2fa0a9218998f89c19a01d217498949c939fa4202298779c3e9f4620d5972e9cc19ed11f6497a19b289e271ffd96369bde9dad1ea996d09a839d261e6396739a359d921de9950e9acc9c231d9d95c099879cbe1c4c957699419c5b1c00951e99db9b1e1ca494d098649b921b57948798e49a3b1b4d946b98a79ad11a0e942e98499a9a1ab4932298e3995c1a4193d997ba99081abc924b976899b5193192d4962d9976193491269660983519a490f09412974118a490f09412974118000006122115f70d000006122115f70d1e9aa49c6b9e7121b99cbf9f67a16f23159d53a0c8a192235d9d69a003a2a623889d92a024a2d023b69db6a064a2e723bd9dc6a06da2a023f99df4a0bfa27123469effa0eca2d2229a9d98a09da2d221179d3d9f60a1a41f4b98d499c79c041bf18dda852f91c91694037f120d1029173484c307e18f1c1b94971a9a9f9cf81e7c9a419d04a0d920df9ba29e5ba19021aa9c0ba03da22022989d79a0fba2db22089e77a0e3a2e322929c12a11da40b24079d22a237a50625dc9c12a35fa6e5258c9d81a47fa6f526349a0fa1e4a21a28be1e9724cc239d2601217727872617234919f3201e1ccc27589c4da247a50e28f490d8a0b6a3f9235d963f9e72a1db20cf99aa9d09a1dd203a98d99c78a05020dd98549db3a04d20e798449d65a015200f990c9d38a08a1ff898dc9c0da03a1fe698c49cf19f111fe5989d9c959fbb1eaa98539c119f421e1498249c839ee11d1297c19b169e611d97964e9bbb9d0c1d6a96fd9a679dbf1c5b968d9a089d691c5a96279aba9c3b1cea9595993e9c941b189503995b9bdc1af394af98fe9a831af2948298b19a601acd945598aa9a5a1a70945898719a491a219428981f9af9198c93ec97cf99cf19e49295979c999c191d929596b698871920922c95fe96701720922c95fe9670170000ad12b715e60a0000ad12b715e60a739bb69d0ea0b221929c1ba076a18322149d78a0eca1bc22229d8fa016a2d422439d8aa024a2b222519d9da045a2a4224e9d6ea026a254227f9d26a0e6a1ba21f69d6c9fa1a10f21079d889d29a0ad1f8e99279b8e9dda1d5797f699d99cc91ea597b09b019d9f20de98579d009f2322b49bb09f04a173238a9dcaa06aa20e24b69d20a145a32524b89d41a1aca31f24ba9d51a1b4a3f023a69d64a1e1a3c323809d74a1d9a380237d9d60a1dda32c23419d42a198a3eb222d9d2ca16ca38d22cd9cd5a000a31522049c13a0cca186212b99889d26a08520c7920899ff9a091e4e81008f9093741a088718906a988c162e944f981b9d2f170199089d62a08a1acc99fc9dc3a0d11d5899a19d85a07e1e08995c9d6ca08c1e1f998c9d7da0821ef8986f9d53a0561ec798309d3fa0511ea998079d0aa0131e7898ca9c8b9fc51d07983d9cd49e491d7397f79b3d9e001db6964f9bd89daa1c8e96f09a689d7b1c5a968f9a1b9d371c31963e9ad49c111cf795f399a09cc01baf95bf99609c4f1b53958e994b9c2b1b0e9569991a9cff1ad6943099d79bd41adc94ef987c9ba91ad694c998089b671aaf948e98a19a051a70942e981c9aad192e940298b7992d19ce920897249969190d949f96829845180d949f96829845180000641144156a0a0000641144156a0a019ca19eaea08f21f89c73a0d9a1c9220c9d48a0c0a17722c79c08a079a12922cc9cef9f57a1ef21a19c949f33a1c621749c219ffaa08821129c659e98a01d21cc9aa69d0fa09620cb99299d469f4f202c9a7a9d889faa205a9ae29d13a05a21f79ad39ebaa02f22a69bda9f6fa1fc22609c57a00fa27023c09c7da07ea28423f39ca5a0aaa26423f29c9fa0b3a21e23e59c98a0afa2e422cf9c8fa0cea2b422b29c95a0c2a27322ac9c86a0d1a24e22799c7ea0aaa22922569c57a068a2d421239c3aa02ea2a121e49bf89fe0a15b217b9b6c9f66a11221619ab29ec7a0a020cd98379d849fe91fb096799b2e9e851e4395359a629e721dc995a69a339ec91ceb960f9cee9e661c0198b79cd69f341c8398d49ced9f341c8998ae9cc19f491c6598649c459f7f1c7898429cf99e851c3b98329cc29ea31c09983e9cc39ea41cbb972c9c9d9e9d1c8997269c689e8b1c1197c59bff9d681cae963e9b8f9d3b1c3596c99a329dde1b2096599ad59c751bd295ea99839cec1aa1958f993c9ca01a4e956199199c3f1a01952199c99b0e1ac794eb98779bee198394bf98349bd7192c949e98d49a8119fa936d98739a2c19bd931b98fd99ea18cf93fb97a0997d18d893af977199b1186f94d996e29819186f94d996e298191800000000000000000000641144156a0a019ca19eaea08f21f89c73a0d9a1c9220c9d48a0c0a17722c79c08a079a12922cc9cef9f57a1ef21a19c949f33a1c621749c219ffaa08821129c659e98a01d21cc9aa69d0fa09620cb99299d469f4f202c9a7a9d889faa205a9ae29d13a05a21f79ad39ebaa02f22a69bda9f6fa1fc22609c57a00fa27023c09c7da07ea28423f39ca5a0aaa26423f29c9fa0b3a21e23e59c98a0afa2e422cf9c8fa0cea2b422b29c95a0c2a27322ac9c86a0d1a24e22799c7ea0aaa22922569c57a068a2d421239c3aa02ea2a121e49bf89fe0a15b217b9b6c9f66a11221619ab29ec7a0a020cd98379d849fe91fb096799b2e9e851e4395359a629e721dc995a69a339ec91ceb960f9cee9e661c0198b79cd69f341c8398d49ced9f341c8998ae9cc19f491c6598649c459f7f1c7898429cf99e851c3b98329cc29ea31c09983e9cc39ea41cbb972c9c9d9e9d1c8997269c689e8b1c1197c59bff9d681cae963e9b8f9d3b1c3596c99a329dde1b2096599ad59c751bd295ea99839cec1aa1958f993c9ca01a4e956199199c3f1a01952199c99b0e1ac794eb98779bee198394bf98349bd7192c949e98d49a8119fa936d98739a2c19bd931b98fd99ea18cf93fb97a0997d18d893af977199b1186f94d996e298191800000000000000000000000000000000e6a1329b019a3315c925cd1b461ee222b229721f3d1f0b24812b1e1ebb1f8b24642c751e3820cb24942cc21e3720b124ca2c881ec91f4b24ff2cc01dc51d9421f42c431def1c331d072d891da81d0c1a232de01c181f6b186e2d80a046a1151d282a4dafe2b000240a2e401a8c24c720be2d211cc6280b241f2bbe1b3a2a0025282c1c1a092cf526b42b981acc2c9b2847298b1d012d61295425ce1d5b2ce328561cbf1c152c86270000db1af72bf02600004e1a182c1726850d591a102c0c267b116218102c4f26ca13ea14342c1426bb14c416812cd126c815d015c32c492713172917de2c53279712281de62c102809104a1db82dcf280419f61d202fa3290218b41e8e2e7d299a171e201d2d57286715d71dbb2887251909c998c81cdc2413971ca026a197223d12f91b291db21f6716a31c601d7f1d1215b51b001d581dc014bd1b1a1d921d7114831be61c5c1d4e14221bbf1c311d1914d01a951c221d0414801a621cec1cb513fd19001c9c1c0f1393194f1b1e1c8512fd189d1a791b5012e218621a0b1b0812c918471ac41a1712b818291aa51abc118d18ea19391a8f1145187219bb19f810b717dc18401908119117bf18001929117717bc18fd1815112517ad18cb18ff104a17a418a418da0fdb144e1626180000000000000000e6a1329b019a3315e6a1329b019a3315c925cd1b461ee222b229721f3d1f0b24812b1e1ebb1f8b24642c751e3820cb24942cc21e3720b124ca2c881ec91f4b24ff2cc01dc51d9421f42c431def1c331d072d891da81d0c1a232de01c181f6b186e2d80a046a1151d282a4dafe2b000240a2e401a8c24c720be2d211cc6280b241f2bbe1b3a2a0025282c1c1a092cf526b42b981acc2c9b2847298b1d012d61295425ce1d5b2ce328561cbf1c152c86270000db1af72bf02600004e1a182c1726850d591a102c0c267b116218102c4f26ca13ea14342c1426bb14c416812cd126c815d015c32c492713172917de2c53279712281de62c102809104a1db82dcf280419f61d202fa3290218b41e8e2e7d299a171e201d2d57286715d71dbb2887251909c998c81cdc2413971ca026a197223d12f91b291db21f6716a31c601d7f1d1215b51b001d581dc014bd1b1a1d921d7114831be61c5c1d4e14221bbf1c311d1914d01a951c221d0414801a621cec1cb513fd19001c9c1c0f1393194f1b1e1c8512fd189d1a791b5012e218621a0b1b0812c918471ac41a1712b818291aa51abc118d18ea19391a8f1145187219bb19f810b717dc18401908119117bf18001929117717bc18fd1815112517ad18cb18ff104a17a418a418da0fdb144e162618da0fdb144e1626181494b589488e6a081494b589488e6a081624da1c011f77245a28ba1d221e2825222a251c551d4824cf2b4f1d8b1e87259b2c421dde1df925f72c1a184615cc24e72cf5985c9c6122282d629a1d9c3420542d98986b9a8f1c382d249ddc9ea41a152db2a83faaf91a982cf4ab33adc21d572dada590a61b22e52df2981a226a22f42dc019a9289d24112d1f1cf12b1a273d2b961ccc2cd62807287e1e972de02952226c1de12dd729d515511df42d5229ab11a41b112e6b2831112019bc2e7d28cf14b719f92e6d285916fd1a172f7f28f616451c132f0f29b815601c642fa3281a161b1b9b2fd62887186d1cc72f8c29d815b61bcc2fe129c414b71bb42f562a32141a1cf42f8a2ad314c11af62ed62941139919672c1b281711da15e6243124a3905a9cf79daf20750dd0905f96b71f62142f19d419f01f7a154e1c1e1d101fa315491c7f1d601e5816731cad1d8a1ee115121c541d231ed614561bcc1ca61d1d14ea1a871c381d0d14991a4b1c121df213411a2c1cef1c7a13d5198c1bb51cb4126319ee1a581c7612f5188a1a191cd91198181d1ab61bb1116b18a0194d1b90114b186619021b61112b184119aa1a2f11d8171e19561ae3109117db18df19af103c1797188e19c010d41655181b190410491619181b19580d4a13cc146318580d4a13cc14631890931d914d90070890931d914d900708ff1d801b4d1d3a247d24901d981dff240728321c101d1825422ad21b671c3025232c151c2f1caa25dd2c131bac1b2d255d2dae19b51993248c2ddb88f0898423e82d1f9d279fd221852d33a206a49221ae2d26a624a8d121972dcda754a90422c02d6da5a7a7c9225b2e639ebb9c7e246e2daa19a525a525b62c1c1b7a2a2d286b29f01a752c062a2824b81ad82dfb2a9f1ad01d2d2edc2aed0c411e902eb32af70c941c992e0b2a4d14e01d782fd029ba16e31e0c30502a05161a1e12302b2abf17f71d3230ec2a4a18561e56307d2a6e160b1e6530022b5b15de1c4e30e82a7314651c5b30772b87110e1a4230ab2b63140c1c7030fe2b4b14ef19d92eb62ada0b97854e2a0828bc8b1198791d3924921077119d9209224d122715090ed620ff140a1bfe1a65209c14101be71ba41f3015931b7c1c881f3d15a51baf1c7b1fb0141f1b8b1ca01e2c148b1a3c1cfa1d15130f1adb1bac1de112c0195f1b531d31122819c01ac41cf211e2184f1a751ca811a318fa19201c93118018ba19e81b55112b1854199a1b3a110c182219281bf7107917b918ce1ad810391784185a1a7910e4165518171a6510d5165918c61964100a175c18cb197f1004178718d41935100e1792182b1a3c0ebe14871627193c0ebe148716271900006490608fcd0400006490608fcd04de11c519b31c8524cf1c761c451d2f25d8235c1be41cfa24cc27b51844184c25042ab217ef164d25212c46158a171d25212d8a0e4f890625872dfc97cf99fd24d82d959ca69eaa24012eea9fb1a15b241a2ed1a157a47724122ebfa3eea57725022e26a2fca46b25012e6e9f84a29325052db28fe91d2526bf2bf7168127482846270e14b12ad529bd1d7a1b462d7c2b7296681dfc2d1b2c548ea11ebe2e452cc50ddc1d152f552c83138f1d782f812c4216f61e0c309e2cf315341e17308e2c4916bf1d3330ad2c7216e81d5b30b92c2117f41d5c30ac2c6b16a01d6630c32cde14a11c7a30ca2c0114621a7c309f2c950f95166c30812c5a1183178b2e4a2b5b10b91408291e284a11d215bc1a1d24230e1586899c7c227510121105979a219c13e4185615282147134d19a61865201014721a211b1120b0135f1a671b531f1313fa19d41a771e9913b319c01a451ef412b419cd1aef1dd9112019941a861db411da18e019201d1e1189187719c61cb71023183819741ce4100e180a194d1cde10f517e7182f1cd010c517c0180d1c94108217bf189c1b5e101f1784183d1b051071163618c11a8b0ff015be174d1a6f0fd91554170e1a610f74150f17d619000f1a156e16cb191a0ed713e9143d191a0ed713e9143d1900008d08ae02050800008d08ae0205087193411c1a1e09251b8f5819071c7725761bf219de1b0026c1225219081a48261f270918fb19a726cf29cd0e38095126152c138f0d954526cb2ced96089a6226b22de09c2d9fac25fa2d079f4aa1a625242e65a087a3f725112ec2a016a48d26052ee09fa0a215268b2dec9c33a14826d62bf197e09d5326e528cb15b120d8274222758fc7275b29ab990b10be2bbe2b5c9b511abe2d772c37997d1adb2eea2c2695bf1a3a2f052d298c1a1cc92f222d3b107d1d2c304e2dd511031d67304e2d7112a71c8e306c2d6e12531ca9305b2d42142a1cba304b2d31137a1bc330442d5c119d19dc306d2da610d016d230442de50ddf0d95302d2d2e0cfe0cc22d6e2b120c7f110e265927210de60f539909247e104e0f119b6e222b117814aa95dc2191114a17a20d5721a212c3181017ba20f612901929195820d8126719ad19d31f49123e19fd195e1f35123c19f719f51eff11d018ba195a1e9111b0187d19cf1d2c1137187119611d05113c182c19001db5100618e918bf1c9210c817ea188c1c5510c317b518411c8b106a17a118041c6210f4164d18491b481068161818ef1ab70fe7158217a11a180f8f150d17581ab70e2f159916371a0c0ec7144916eb19110e73149315cb19320ca51262149418320ca512621494187b80ba100b1064097b80ba100b10640980955119301ad82470988219981b1426a39834197d1a872651107f16c1189d2658201118cb158e26b125191696127626d528fc113d90aa26a92a8b943499f526712c359bdd9de526f42c7e9e49a1b0268e2d28a073a29f267b2d9e9ff9a1da26d52cd29c7da09e26a02b769c53a067273b28859c83a1cc26a722409e12a236274a8f1996911e7428b39e5e946f284f2af59c0a18c62c532c109c8515882e382db79804187a2f982dca94e3181e30832d1b8d481c6930c82d7003691c9930de2d2c0c7d1cd830032e020e611c0531132e2012be1c2331fd2d63126d1c4131fa2d9c11c41b4231fb2da511ab1a3b31e12d4012dd19b6305c2d8a11a815c62cc72a6d0e561769225726d9101f16ad999a2335101e14809a6e2228105315d896fd21a1108417d68792218e110819e51410217213241ae518d6201513e519b6193120a4112d1941193e1f2911d5187919951e921098184019501eb9107d184619041e9d1016180319971d7010ab17ad18181d281031175918bc1ced0fc0160c18691c8b0f57169517221c720f2416a117e91b3a0ffc1565177c1b6e0f2d169d17591bc20ec4151217291b490e6015dd16c81a1f0ef61450168e1a8b0d8514f2152d1ad20c14142d15b21934094610dd113c1934094610dd113c1900005907af05640b00005907af05640b1597b3162118d324bc9945147a156e26c39ab914e615ec26199bf6107514a526a1981a881e8998265118880e4e89ad263822ac17cb89ec261626f50f9b97a927c2280398309c7127112adb9b359f4826f52a329d97a0ff26e22ac59dd2a03b277a29f89e87a11e2773277e9edea120273021339f09a4be270e9c809beba1f126299f1a93289cb227b89d6f894c21e328079d68975a29282b3c9c6f08cc2deb2c2d9a8616982fd42d00988f185430142e4f966718af305a2ef4921f19e0306e2e28901c1a3831b72e838c851a6f31d12e9283991a7831b22eda038f198831b12ee1026818a531c02e4a0c15198c31a22e090bb81778307f2dc28d6e15bf2969295f8a7b11e88a3c25f80a7d14459baa23d80dee14e998db22f80c8514c8963122b60ccc146694ae21c10eab15578d10211a101817cb11b5202f1000180d156b206e101518ea160c206510f2171b17b41f0c106417c817161fb30fe616b2177b1e1e0f7e164617ff1dea0e48167017941d510ef315fe163e1d050e1316ab16001de20dd4156716cd1cc80d89157916701cc20d2615ff151b1c190d93143c157e1bae0c1014ed140d1b320c52136314951a210c2a1349146e1a070c6c122114311a180cd112a614131ab70ba411b5139518b70ba411b51395180000e60f9f0e6a080000e60f9f0e6a084f98ac1100115825f099d3101e128a267c9b46084f891827869cbb94059611275f9c84936297ed26a69cb98886907f270199418fee99a92794169d96829b7527732025971c9c3127bc227299af9c47277024bc9ae79d0b285124019aea9e0628a120aa9a599e2b27ff09a49a689f3d277e9bc59beea0a227409e6e9ae1a16127f59ed4985ba13327e19ebe94299f1e28389ddd8e232130299f9c3997f02ad52b439be508aa2eac2d8699820846309e2e8b985817d330f42ecb954f192b31312f9794051a63316f2f0d93c719ab31a12f2f901119cc31832f1e8c9818d531902f3f833718ec31962f07034418ad31232f720baf18992f0d2d4583d91787262c28a487111361972724ad028a11479caf237d02f8122c9a2123c8076213599813223309bf144596ba213e0d6e16658d3a211010231836122921441084187615e220fb0f561860164420110fad17e7167b1f400e1217c516b21e540e8816c416061eb70dd0150616d51d3b0db115c515751d370d7e15fb15151d2a0df314ac15d21cd10c031557158a1ca30cc7141115351c610c8a14d314d01b200c0c149314691bad0b21134b14f51aba0a64129513841aaa0a3e125e13531ad50a95112b134f1acd0997105311a71ab503e20b290e1d19b503e20b290e1d190000fa008183d8050000fa008183d805e498198d2c9114253f9afb906c927626d29b9b932e96fe26c09c1296a1985827bd9d2096f2975c27d69e09957b962827ec9fd799169c8b27b19e2c9cc69d0928649e2b99899d1228119e7098199cb627eb980d9af39d1328f1992c9ca59f2a28909d2d9d95a01e28fa9f059d57a1c7272fa1609c27a16227dd9f219bb7a139285c9f269919a20e28539e859a62a2e1270a9e1998c49eeb27849ebf917b21d629eb9be791222cbb2c099bbd11bb2fa72e6099b3131431902fa797db135e31e42f3498fd139b311630a1961616d63133307c961418f4312e30c490ea181e3230306091a61640321b30498bfa158f312a2f278cc816212d1d2c8e920290c01bdf25528d7d06989c4b2490029411999b86233f023e148b991523d506bc14a198792265093215a996f6212909fc146294aa212c097515aa8d7d21ad0a8b15ce06d620cf0bcf15fd0f8c20570c1b16d9125320070cb615b513ca1fde0b5c1529141f1f680b7e14b813751efd0933140b13c21dd10ab7136b123e1d770a3113df12de1c010ad1127312761ca1097f1223123e1c2b094112ba121b1ce708001265129e1ba00837111c12471ba30793104511c41ac707591003116e1ae9072d0f0c10ae19b008450f7f10c61968022e08fc09771968022e08fc09771900004a89108d9c1600004a89108d9c165797e28ee391e322d69a07917494b8262a9cc6941c965727bf9cf99590986a274a9d7a973e9aaa271f9ec799219c0128e79e6799009c2228239fc795629a1228e29e0597529ca9274e9f25985b9c84270ba0439ba59df5272aa03d9ddba00e2890a0cd9d41a1e127c4a1a89abfa0952762a0ba9ab8a06c27db9fa79a33a1ae27129f179cc3a1df270b9fa49893a1d827f69ead9537a00b27cf9c6396c49d3427bc9c6c8fbc24f2298c9a918f9f2c2f2df898db137030532f3998000fad314530a8961d14f4315c30ea9546152432933097951b1560329d3051943d157b32a1300194ea1460325e30809185196830652e3e95c70f12283929e3899d139199f7243982a2173f9a5124558267144b99022478822c15769882237f02a3152696eb2267828c15e29494223b826915379152221d02c715d58dc621f4016b14c286e920df01f11314066b20b5019313b605262091012c130e0cb01f8304e5125d0e3e1f3704a112160ec51ef60357120610401e1f060412910fe01d0006af118f10631d9c0549114010051d83050a110310bc1c3b07ba109710551c140583106710271ce2046a0f2510a21bfa02170e750e161beb02e20d310ecb1ae9008a0c780c4e1ad000cc0a560c1e1a9705010e11102e1a9705010e11102e1a00009588eb8ac60300009588eb8ac603f19990945d97f024c39b6597be98ae26659cb2978a99f726e09c1f989d9a5927459de198ef9ab527bb9d7a98499be827b79e9298d29af927ea9e4598f19b0d28689f6097a39c2a28899f68982c9d22284d9f1a96329d1928609f5e982b9e06284e9f5698a79edb277c9f6c98ba9fc8272d9f389938a0e627d99e709835a0a2276c9e5e9862a06627319e73978ca08d278e9de39545a1a527159dd8957aa013276b9c9598359e4327da9b28942523a629529c08898f2c492d59982115aa300d30b8969c14c831bf305f973e163332f73073968b143432d3303d9555146032b1304793e9157a311030ac90b216962c6d2ce88f8b07301dba26d88ddd15319d3524ec8c8d14d89a462412905810009b35242a8cab11959ae9238f8cfb12859930238989c413d5965f22158689137194dc21ea853c142f948521d0817e131290bb20a281d211838c5f208c81b612ce853720858179119985f41f718133114d05891f5981d310cd04ae1e48813e0f5e04f01d3b81e50e3104b31d3981ba0e09045c1d9983860ee903311d6b832b0ea803bf1c07817d0c67034e1cee802f0c32030c1ce2808e09fb025b1b9b824b06c482a81a8a822506a5825c1a848202068502e819d68011069302301a6084ff01c4022c1b6084ff01c4022c1b0000a689068aed000000a689068aed00019a0e963a9911258b9cec98699a7226ef9cf499099ce626829d199a379c1f27ee9dcb996d9c4d27339e269ab79c9627799e849a0f9df127ab9e399a519d1128ec9e639a839d1b281b9fa8997b9d0828739ffa98e09dc727ca9ff598059ebf2706a0fa98989ec92754a0449904a00c284da0159a57a01028dd9fe39978a0ab275e9f6e9aaea06027cb9eae99b9a05427e99d1099cfa056274d9d4a979da04c27619cba95d4a03e27359cde95f2a06a271f9bdc989c1b262978993109902aac2c44999e94c32f472f5f9879945631a8306296db169831aa30a4957615ea3025301796c515922d642dcf8f40181525b528488e0b14ed97ea247a93b110d39c9b248b902712049b38242890741195994623ce8e69132b996023198e1713fb981a23468daf12f9965f22d58c65129a950c22fc8af61144959121438a44119993e720a989e010fe926b203d8993108a922220dc88970ead90981fc988280e4d90fd1e0f8a240c0b906c1e1e8ab8089b8fe91de08986083b8f7d1deb8adf026990161d4b89bc023090d31c2f8a9e82f98f7c1c9d888082968f451c428924872d8f0a1cf688b589da8eb51bf5888b89918e641bd18866894a8e131bb888418b968ca21a7a871a8bd78d691ad38a698cd18d9319d38a698cd18d93190000dd8b578c06810000dd8b578c06818b999c96f699fa24b49b7f99159b31269b9cdc9a989cda26419db49a929c3c27ba9d699acb9c8027539e429abf9cd527969e879a069d0b28dd9e1e9ad89c22282a9fb1990e9d3428fc9e14999c9d2e28b79e1699a99d0c28859e7298349ec027729e61982f9e8127799e6398b39e56279d9e1199309f3e278f9e6c984f9f4127629e1099ce9f28270e9e0d9933a00627989d1199baa0f8261b9d0999cca0f4268d9cec96a5a09c26089ca6954aa06e26999cf588b49d5426aa9a040935955c27179a3a0f5e24bd298d97d0161c2a722cea97c416ef2bb32c79943314d529882bf7924015a7233d287d911e1700174c259a9152156a9af424f692e216a09a7d24d99128144b9a2f24ff9250126b9a2e245b939511fa99c9230d931f1111997722f19222124598f721ee90e61113968c21908ea511dc943e213d8d5b118a93fa20f88cd50f27939e20908d3f0af3933420ef8ed0035194b81f8b8e968318942a1f768e2a89ca93aa1e268e218c40944d1e918dbc8beb93be1d118d1e8d6c93411dd08cd88cf792ef1c938c998c91928b1c458c4b8c2792421c098b0b8c0891d71b998aec8cbc90611bbc8ad08c9490f41adb8ac18c8190d81ac28a998d43907a1a2b89528d0e90291afa8bde8ddd8f5e19fa8bde8ddd8f5e190000668bfb8bd7000000668bfb8bd700ab993d981b9bba24059c639a269c7e26c99ccd9ae99cc5261e9d769ac79cf6267d9d409a159d6727b49da79a0e9da127c69dc599f59cc8270e9e6b99ca9cdb27489e9d99fa9cf227979e6c98309d1628a19e85985e9d0e28859eb697789d0328489ebe97039ee127009ec5970b9eac27009ed2970c9e5227129ece978d9e1927cc9dbc97ff9ed126619d7c97e79e7d26cb9cf0953e9f4026869c8794259ff025f39b9d8fa29ec725109bf708349fdf257c9be4084e9ff3256f99d911dd9d7b2588965b196a9b8225d1968315b098b626f8970d096f8c22279197d108100caa26f995730ed0930725fb94c11678999b24f3921116429b5c2473930015e1994824b594ca144598f8230094ac131798a123a4911d12d498ce23ee91281093986523ad918e0cb5989322eb90af054998fc21229146856b9886217190298b2597fe201690c08a82979820898f4b8d05974b20ca8fce8e6a96ad1f628f508eee95191fe28fa18f2c968a1ee18f6f9063960a1e768fe2907595a61de58e8c909095231d348e38901f959f1c998d9290bc94461c758d61901a940d1c2c8dc390c893b01b088d99901794341b088dfe90f393001b078de990a993941a038d339145933e1af88ca890a2923d1a178bdc8e8f908b19178bdc8e8f908b19000069852786e100000069852786e100319b9398819bfa24d19c799c829d9326379d409cb19df326419d679b119de726529dae9aff9c3227719df199949c5e27c39da099719c7c27cf9d4c99439ca927fd9dfa988a9cd6270b9e9697499cd727ad9de194d89bac27749df892fc9a65274d9da289269a2827399daf893e9a0627429dba09519add26209db8094c9ba1260f9dad891d9c5a26c89c2a90869c22266d9c0690db9cba25289ce18f439daa25b89bc88fae9d8225369ba68f169e7825b79a768ffa9d5e25f999f8089d9d72253e992c0f6c9d422530982f150b9b0625da969c17d7997225599764176a98dd248695d5189495d524f4924619f39237247092fe18ea9231243d94941861964c248194b9172f962a24b19290166a94a5238991df178694d623ff900817279432237a9083154b93512267908b135594d6214a918f10109594218591d6045a9607218991af8a5097922075919f9019983c20639142912a98e91f7f91c3923798421f1b910e944598b21e279137944598451ec9904e94f297b41d9c9018947b97401d5c90d8931c97fe1c39901094c196a11c0990189371964f1cab8fa992ae95111c668fc4923e95811bea8e7b92e394a81ab78ea1915b945f1a6a8e55911e94de19438d11914c93c419c28c68919c938718c28c68919c9387180000bd05410ba70f0000bd05410ba70fb39a909bc49cfc24849cec9cad9e0026e59c499d129f6e26229d169ddd9ebf266e9da59cae9e1027a09dbc9bc09d9027d19daa99769cb727f09d1198c59bd127f69dd195679abc27c49db692c6999b27589d828925986e27079d361098965d27f09c2213d0942927fd9c1815e694ec26ff9c1715e496b426069d1a15e6967726079d411365993026959c01156098e525429cfd12399a9125959bdc122f9a6925aa9ab412189b4325169a8e12719c34254c995812479c032535992b126c9bbf24b8980112099c9f2414987316109c8b243e94111bab8a6d24f593091b7b0a4e248292651a690a41246790d61a430a41241b8f8b1a0e0a4e242d8fa01add894224718f7b1980892b245f909218a48fb8234e912a184a92a123889140153c950e2328921b11c4965022029372058a98ea218592b68bae9867219e92339038990f21a09237925a99cf208392c89256997620e8911e94a3990f200092c4949099641fff9154958b99f71ebb915c956399481e69913c95e798b81d2a91ec949398381de390fe944f98eb1cd590db942698a01cca90c1949e977a1cb190969447972e1cb3906894f396fb1bbf908094a096411bba9056945d96f71ae4901c94af95941a19902b941796dc190390d194f1969b180390d194f1969b180000120bee0e65060000120bee0e6506549c829c229e61257d9dd79d10a0ae25289dc69dfe9fba25c69d4e9e6ba04026339ed89ecaa0ee26519e5b9e5ba05e277e9e6f9c999ec027279ea199859c1028039ee49404992228e39c0e15928b0d28299c601a7718e027c19b031ca21a5627159c751cbe1ace26209c151cb81970264a9c541bae180b26699c7f1a2a15bf25a19c271825927025759c3a1596984a255d9c6310849bf324469cb6092f9cbc24d39b8309039d7a24f19aa7126b9c21249b992217ee99a42314980e1a109890236196e21b5a9177234795391c609181231b94171d5311a72347930f1d4b11d32301905c1d7617c623198e7e1d7218fb23398ca91d341941242a8c171ddc182924698b791c7518fa23df8a911b2117b3236e8a221a03124b23928d2118b08ee6221d912714c2957b228294128f2999152200965a96ac9bc021ee95bd97339c3921ff949c970d9ccb207094f397129c4c2023941f98d09bbb1fd09306986f9be61e6c93c597c89a281e2d932b97f0997f1dd192b4969199091d6d923f961099781cea91fc95c898e81b7f91a4958b98831bed9068953c981e1b799007951f98c21a5890f094c397a41a5f90e5943e97521a22909e94d2963e1a339087948e96ff19098f3c943396471ad88e6a931995e218d88e6a931995e21800002211cb148f0500002211cb148f055d9ba99d759f4b245a9db49f40a17a25da9c1c9e3ba05625389da89eaaa0be25a39d939f1aa16726dc9d679f2fa1fd26a99de09d6ea04d27fe9cee99909dad27799ca309a59409288f9b671b9e191f28289af01d331e9d2798994b1f671fa62630999b1fdf1fa2257f99b91ebb1eea24179ac21dff1c8a24a49adb1cc11b55241c9bb51917154324449b3d15069556247c9b6e1078984824359bc9095a9a18248f9a9009179bea230d9a0510ec9a80231f99a014f3993523119842172198c4227e96971986915322db941c1c580b15220a8ffc1dea19cd21cd0cc91f641ea02132119c20e61fde2128105b20b51f8f22510e23203d1ff8239a03e41e691d7524e588571dec1b7c24b68edc1a481652241091ae170f89d2237b929c117a971f233994848f0f9aa722f6947c94fc9a342222951796d19ba4216695f797309c2921a0957298659cb920c095d0985f9c3e20b59524997d9ca41fce9538994e9cef1ee1950999289c331ea495b798bd9ba51dee945998e19a111d8594fd97629ab51c2294cd97009a521c24933a97b199001c8092ff964999811b00928f962899251bd1914b96c398d71a9e91e8956d986e1a66918f9503984d1a5e916895b097331ae390f2948497ff19a090c9940997b718a090c9940997b71800007a0fb214881200007a0fb21488129d9cec9d1ea00b240f9d959f2aa16f24689d11a060a1ef24b49d72a00ea27e251b9eb2a068a2de251a9e78a029a24826d99d0a9ffca0b826679d159d029f57273a9d0195069a42284a9af61edf1ea42889957922c32339289b8fc52397240127918f7f236b240f258692cb22a223f2230b981b21f3207322059abe1dd51cd521f49a031a6d12c221b29acb1617927621b49a611078985621079bd009739a55210d9bd2897c9b5d21e89a5690379c94218b9ab8892d9c8721e1994710529a78215e989218c5912b215c940f1d4419e720278d291f8c1db320340fad208d1fff20f6127421c720c2210014ce214921c122560fd52160211f248e100521d92090242f0e16201e1fd4244f88831c171a9e2410914518860f3124159507103d97962330960b94be9acd22b4966298be9ce621c496e8995b9deb20c2962e9a6e9d68207c96379a4b9d13202296f099109d661faf959d998a9c7d1e34952199239ccb1df694cb98db9b611dc4948f987e9b041d8c946d98419bbe1c2f944298029b791cc4931998bf9a4e1c2993ec97419a051cde92a597c499a71b5c92ee966c99331bd4919096f098c81a9e910b968a984a1a4791eb954598fa1911919a952598cd19be90b7952a985d1ac8908695a4971f19c8908695a4971f1900001d12e214d08b00001d12e214d08b789ced9e7fa068232d9d96a005a2ad249d9dd5a04ea2dc24009ee3a091a20025439eeaa0a0a23d257e9eeca0dea28a25e69edda0c1a2ba25849fe0a0b6a247266da0bd9f5ca1d727c39cfe105895c7281615bf2497258b296d1cfa27bb28f027f51c2e286129c4233e176d258e26df1d129819210c22e61c969b9c199c0c791d6f9c2397889d0f1e829d7a99209e1b1f859cf899df9ed21f689c2c9b2a9fa01f499bfb9afb9f121f9a9a539a029f8e1e949afd986c9e891d1699b192539cc81cd697bf147296e81a6094171d341a4b187b0ae320ae200f157615e4222c236b15af184f24c424681d8b1aef24bd254022b71a0825a425c9249a194024b5240826fa14ff201b21f5252391e41adc166325819832874399732489985f96019c6d235097c398949c0422e097f699299d1e214f984f9b119eb5202e98509b429e4c200d985d9b049ebd1f9997ed9ab29d2c1f0697d49a7f9dc81e8d968d9a3d9d541e0596429afe9ce61d4c95de998b9c641daf945c991f9cac1c4e94e598759b201cde937a98e49a711b4b932998679a1a1bdd920b98419ac51a8b92ae97009a821a38927897ad99561ad791fd963799d6198e918096d1988f197f9122966b984219a690af9535982c193d8f54942b96db173d8f54942b96db17950bc719bc1ba901950bc719bc1ba901679bac9d929f9d22689d45a0a5a14624e69dafa03fa25a24409ee2a0a1a278246e9e04a1bca28a247a9e0da1f0a29824809e1ba14da3c324459e0da17ba3bf24c59f7ea194a37c24b29fbaa1dba2c724749e26a106a391292022ea2bbe2cbf2afe24ea2c032ef2a315117224382576a5359cc49efba0429a059d5aa0d3a2e81daf9c4fa0e3a2e5201a9ec1a077a3a921e39d72a130a46422249e53a1fea3ee21c09d21a1daa3bf217e9df3a033a3d320179d41a01fa31520559cdc9ed5a1ea1dae9a7c9c4fa0091894980798a49d2e94ac93751a3415779d98185824cc24e5a10c1e1428d32830a105204629b32aa91fd21e892860299e27b81839254b254e28de99511ee81df425589800960c9c27245898ad9bbe9e76227498909cde9fdf21e498039d10a04e21db98b99c769fb12062988c9c649f60204498449cf69e0b20c997e69b6a9e271f66975e9b029e8f1e3f972c9b9d9d011ed596a19a549d931d5396469af39c2f1ddc95f099ae9cca1c7995a399689c681c309554990e9c0e1cdb940799ac9bac1b8d94d898239b231b72948c98db9ab01a40945598579a801ab8933398059a2e1a36930098e799e719b3927c978a99b219589218973b9960197e917196899866195590c894b296df175590c894b296df17000022130a15320c000022130a15320c169bcb9dc19f0a22409d6aa0d2a1ae23779db1a023a2ce23a59dc1a05aa2c023d49de2a06ba2d623fc9d01a1baa2db23049ef8a0c3a29323549e38a10fa3dc22af9ec2a0aba26f21419cbf9d33a0421d6e928694de976a169503c70ed410df17eb000c0c5603f41c059af89cca9f4d21519e42a1aea3ae23909ef2a14aa4e823a59e06a271a405249a9e1aa28ca40d24a49e46a29ba40d24ab9e26a285a4f423ae9ea5a139a46e23ca9ee8a17da40324139e4ea176a40a24e69cc8a027a48223759b85a078a33722559827a0bfa31d22a0986da1e0a40e24389c72a30aa6ca241e9b199da4a445221a228e2ab92a3821071c0e255d25e629089914a2b0a42f27d698f19edea13122f399539dc6a0b0200f991e9d86a034203299679d94a02a204599449d81a0bb1f1e99fe9c2ea0271ff398fb9c0da0ea1ee398b29cdf9f931eae987e9c569f381e4198539cff9eee1d8797109c619e631df1969a9bee9dfd1cab963a9b8b9da61ca696aa9a1e9d461c5996399ac49c111cda95a299469c431b45951899a59b771a1995be98399b3f1a19958b98e49a1a1afc945c98b29a111a9f945498719af91948942b98279ab319b893fa97d8998c194493b0977e997e194292019720998c19f191e5951a987e17f191e5951a987e170000a8114e15c90c0000a8114e15c90ce79b249e2ba0ec21f29c32a07da14722379d8aa020a2ae22639da6a04ba2ad22699db0a05aa27222699d9ca042a25a22759d68a01aa2d521939de49fb7a1e720a39c4c9daca0611ef098459a039d7d1d3397ec9a8f9cab1f8899c89d669ffc21399c45a09da1b4235a9d14a115a30824129e79a1c7a301245b9e5da1c7a301247c9e7ba1efa3ef23599e95a116a4ef23269e98a11ba4b723ee9d8ba12aa47723ba9d98a122a44823b19d80a114a4f1228c9d55a10ea4b122b19d4da107a48722649d2ba1d7a31f224d9d11a1d1a3d221c19cb6a05ca36021529c44a065a2fa2031998a9d00a02b1f798b52929595901a220718085c842d15ba8d1595799a5e135297b79b3a9fc118d699c79db5a0db1c4499779d7ba0e81d3199999d83a0201e0899949d81a0fb1de2985e9d4aa0f81dd698439d38a0d51db698079de69f8b1d4b98839c069f1a1db4971d9c659ed01c0a978f9be99d9c1ce7962c9b929d521cab96c39a279d271c6d96659ad89cc41b2596249aa19c641bfa95cc99619c221b9795af99339cd01a2f9574991d9caa1a06953999da9b801aed94fe988c9b631add94cb98179b221a96949098a89abd1952943598249a6b191994fd97cc99fa18df922c9728990519cc92ba968f981318cc92ba968f98131800006b10a914950500006b10a9149505589cf99eaea09021d59cd0a039a20523339d86a00da28422f69c36a0afa10922da9c0ea070a1c621989c7e9f1ba16e212a9cd99eb8a01921309bbd9d05a08b20e099249d369f55204e9af99d1ea00521ed9ad39ea9a0dc21099cb69f75a1a722d99c93a083a292235a9d4fa19ea30b24a69d90a130a43024ad9d8ea13aa41a24af9d7ea129a4d623a19d65a100a46923959d40a1c9a3fb225d9d1fa1a1a39c223b9dfda095a34122199de2a070a30622f39cc0a034a3bc21c79caea01ca379218c9c8ba0e2a24c216a9c69a0aba22221629c4da07ba2fd20539c2da04da2d920099ca29f9ea19f20729a309e7fa0232023985b9cd59ed51e8795a69a959d951d46955b9aa49d641cbc96039cd99e1c1ccc97559c289fb81b8f98b19caa9fed1b9898939c6c9f101cc198509ce49e3e1c56984b9cd39e461c0e984d9cde9e691cef97409cbf9e671ca9972c9c959e5f1c5f97d59b2d9e3e1cf4967a9bc39d1a1c6e96089b6b9da71b2596999a109d491b0096309abe9cc51aae95da99799c831a6795b599419c521a589570990b9c1f1a32954199ca9bdd19f3940f99909bcf197494ca981c9b951940948b98ab9a341928944d984a9ac418d193f497e6997918e093e497a3994618d194e5969098aa16d194e5969098aa16000000000000000000006b10a9149505589cf99eaea09021d59cd0a039a20523339d86a00da28422f69c36a0afa10922da9c0ea070a1c621989c7e9f1ba16e212a9cd99eb8a01921309bbd9d05a08b20e099249d369f55204e9af99d1ea00521ed9ad39ea9a0dc21099cb69f75a1a722d99c93a083a292235a9d4fa19ea30b24a69d90a130a43024ad9d8ea13aa41a24af9d7ea129a4d623a19d65a100a46923959d40a1c9a3fb225d9d1fa1a1a39c223b9dfda095a34122199de2a070a30622f39cc0a034a3bc21c79caea01ca379218c9c8ba0e2a24c216a9c69a0aba22221629c4da07ba2fd20539c2da04da2d920099ca29f9ea19f20729a309e7fa0232023985b9cd59ed51e8795a69a959d951d46955b9aa49d641cbc96039cd99e1c1ccc97559c289fb81b8f98b19caa9fed1b9898939c6c9f101cc198509ce49e3e1c56984b9cd39e461c0e984d9cde9e691cef97409cbf9e671ca9972c9c959e5f1c5f97d59b2d9e3e1cf4967a9bc39d1a1c6e96089b6b9da71b2596999a109d491b0096309abe9cc51aae95da99799c831a6795b599419c521a589570990b9c1f1a32954199ca9bdd19f3940f99909bcf197494ca981c9b951940948b98ab9a341928944d984a9ac418d193f497e6997918e093e497a3994618d194e5969098aa1600000000000000000000000000000000c1a0f099dc9abf1a33270c1cb01f5524822af41f302077241c2c121efe1fb724872c9a1e37203925ee2ccd1f55200725192dd11e351f4623452dfb1d0d1ed31e4d2d5b1e3a1e981a4b2d901d5a1eca185f2d4a1c7f1d5616c02d5f91e00cb31a072493ae3bb0a6200e2cbc997b215b221e2c371d2f28e620aa24761787287d207229dd18d82a0125492cb51ca52c5e28882b8f1ec32c4f29f927b61e07281124221d081ac920bb981b1816188f20000ec41d8f1c76223c9ebe1e8e1e1f24eaa0761f401dc523cea120208e1da82282a11e20451e232283a1891f9d1d4923d8a17d20c71f6926b2a32d203d1df526769b6c1cc61ca52ce724941a891c8f2e5f288f185a1e8c2e9d28fb17c61fe12cb6271e10da1409277f25f097b4a1a7a282248b13d51a0d1ef821b2160b1e4520cf1fef15a71cda1dda1d8f14121c101d2f1de7140a1cff1c3b1d1715931be41c1f1de3142d1bb61cee1c2914c41a831cd61c2514b21a781caf1cce132d1a391c891c3b13bd19b21b241cdd126819361b941ba9123c19bf1a461ba9120619a21afc1aa912f2187b1aa61a5d12c718451a451a05128518cd19cd192211e61703192419ed107a17de18de182f119a17d418b318f3101e17a6186718de101117ad186d184a0ffe14741667180000000000000000c1a0f099dc9abf1ac1a0f099dc9abf1a33270c1cb01f5524822af41f302077241c2c121efe1fb724872c9a1e37203925ee2ccd1f55200725192dd11e351f4623452dfb1d0d1ed31e4d2d5b1e3a1e981a4b2d901d5a1eca185f2d4a1c7f1d5616c02d5f91e00cb31a072493ae3bb0a6200e2cbc997b215b221e2c371d2f28e620aa24761787287d207229dd18d82a0125492cb51ca52c5e28882b8f1ec32c4f29f927b61e07281124221d081ac920bb981b1816188f20000ec41d8f1c76223c9ebe1e8e1e1f24eaa0761f401dc523cea120208e1da82282a11e20451e232283a1891f9d1d4923d8a17d20c71f6926b2a32d203d1df526769b6c1cc61ca52ce724941a891c8f2e5f288f185a1e8c2e9d28fb17c61fe12cb6271e10da1409277f25f097b4a1a7a282248b13d51a0d1ef821b2160b1e4520cf1fef15a71cda1dda1d8f14121c101d2f1de7140a1cff1c3b1d1715931be41c1f1de3142d1bb61cee1c2914c41a831cd61c2514b21a781caf1cce132d1a391c891c3b13bd19b21b241cdd126819361b941ba9123c19bf1a461ba9120619a21afc1aa912f2187b1aa61a5d12c718451a451a05128518cd19cd192211e61703192419ed107a17de18de182f119a17d418b318f3101e17a6186718de101117ad186d184a0ffe14741667184a0ffe14741667189c9a64914f98ec119c9a64914f98ec1110255a1c621e96246429ab1ed11e3a25682b751c661d8e248c2c091d2e1e5d260f2daf19ed181e260e2db295b99a0b240f2d2b98f69ae71d932d8a8df093851a6b2deb0661881e17992d479bd99d8790902d10a7e1a8389b2d2d7aab0fadf6956b2e3aa772a8451f682d459e541e541e2a2db90e3b276a207d2e7e18d02bb725412d091d412d5828562bc61de72dae297e24351a7c2c332934923818212cd0249a0db119462d72253c182f1cff2d1b26211cd41c3a2ea2262c1e3a1d7b2e37265a1e8f1c6d2e6326881ec41ccc2e3d27fc1d211c942e8a26831dfa1c532f7426081d6b1c8f2ec2268117db1a1e303a29a714da1a902fd529a2130a1a192fa929d6119f186f2c78281e05b595d8238a241094289e21a04d2097112412e910c01ef5140e1b371c171f7e15601c7b1daa1e35154d1c871df81dd615531c7f1dc61d1516231c381dc21d2915921bc61c641d6714171b851c1a1d3914b61a601cf21cc513681a3d1cca1c54130b1aeb1b7d1cc812ad19611b4b1ca7125119db1a011c8e120119b11ad21b4012d518341a761bfb11a618df19e41aa811721894198d1a521123186119281a2a11bd170419c419f710a917c2185419a71016178a181519191064161f18e918b40de313fb14c117b40de313fb14c117e39903987b997211e39903987b9972118d1fdb1ae61d44258326ab1e871e54259829411ce21c8225032c5e1b321cbf25e22cca1ba91b1e266e2ddb1a4d1b4225bf2d5a1acd19c423f82db013da12e8212f2eda98af9b7c20242eca9fe1a1391f722e08a599a6811f0a2e47a785a8c21e7e2e03a5ada6c01e9f2e919f7aa03e1e572cf091b22071205f2e0a1a6c2a3f267e2c4e1c142d5d29f028711a342e582a5722641ebb2e352a8e16121d872ef2272e10b11de32e9a263913f81d812f9e266118691e13300228d518c41d35307627421a661d4d305328a61bfc1d82300f28141abd1d963048280c19e91d8e304b283816741c9c30fa280e13a5198030122ada123d1b6b30bf2aa612b619652f342a280f4213422b0828478a4898b41d07241c0fe20f3c96cd214e121a166e11af20ba14421bfd1a572082142d1b1d1c951fb6142a1b3e1ce71ecb14d01ba31cea1e9914461ba31c751e8014231b791c2d1ea5138a1a1d1cae1d4613f719a61b471d7c127b19081bdb1c01120419881a681c8f11b218241a0c1c6c1184189d19a41b541155186619581b4e1118183719ec1a1e11f0170c19881a1e118d17c318611aa6103c1792181d1a6b100b176518bc19781005175a188919a310f31675187a190c101217a818d7196b0ef3146b16eb186b0ef3146b16eb18b78f3e96a095a70bb78f3e96a095a70b0c140718fb1aae247e21691dca1c6f258326521a551b6725bf2922184f18c825272c6718a51800263c2d18181919fd25e02d4d16f8122f25192e22924998b924512e189ca99d3e247f2ed59e12a100249f2e86a117a47e24d92e8ba2eaa4c6240e2f16a16ca4b324002f129e78a1f4248e2e7494ef1cd725e82de6157c27ef27762b4414332b8829c025dc148e2d1f2bc918301c162ece2b8b8f2d1e392e352c580fc81dca2e3c2cf813d01da12f402ca616b11eea2f2a2ca416361e2d30542cf516db1e8930a12c4e16c41eb030862c8017721e7f30392ce9172d1e9930262cd514c01cb230402c7912dc199f30142cb80d261582300a2c6c105c140b2fd02aa30955879129372840090a90b6180324d80bfb8f269d6422f4101a140e956721df12fb187f15ef201a137b1946192b202a14da1a5e1ba71f2214b91a921bd11e2913301ae41a151e6713fc19171bc51d1213d619ef1aa41d9a128a19dd1a5f1d3312fc18581af71ca411a718e7199f1c1e116818a4196b1c441152186819221c18111b184119031cfc10f1170d19b71bea10d017c918501bac106717ae18e41a1f10be1647188a1a07104816f117261ab70fff15d917ee19770f9a152b177d19910ed51479166519380e6414aa15c318380e6414aa15c31800000704b683be0000000704b683be001392be1bb31d4e25a6115a19931bd825992065198a1a25264e26af19b51b9726022a12154f17db26602cf70efc129726802dc1087b904e26262e8892a59787269c2ec899d29c0626cd2e589d56a04626132fc79f69a25926232f93a0f7a2c326122f5d9f72a2c9260d2fff9c78a17726352ead9bfb9d4e26d62c9089602011285129bf1257289029bf1e7490602cb22ba69c19100a2e632c6c9b90195f2e902c49960a1b7f2eeb2c638e001cb42fca2c230fcd1d5130b62c2f128c1d7530ac2c3812fd1cb230ca2cfb11231cec30c32cd2122a1cde30a72c7d126d1beb30b32c6d1071190731c02cd30f09170131ac2cb70a2c08c730b02c4508c707962e5c2bde08fb0cd627772729093f86ad9979235c0e810c699c02223d110e16f6957d213311c416b707e2204b12cb1857166220e112a1193319fd1ff612b619bc19351f9f125a19ba19c91e80126b191b1aa71e46124019481a351ec711ec18121abb1d34119318b719451d26116d186b19ff1c1f1160185a19b91cfc10341817197f1ce310081816194e1ce910bb17d118f51bbe103a177718611b931083163418c71a1210f3159817611a430f94152017191ac50e37156c16e0190c0ed5143916b219890d7f14781565193d0bc0115d136f183d0bc0115d136f1800007d0c1f09cb0200007d0c1f09cb02e596301a641c5d2527979e19701cb226d694c1141c17c0261b1d2308c412e42646251015c412ce26d629f91309108426622c26126113c8268f2dad928698f026df2e7e99329d7e26db2ed19a5c9ee426052f9e9bf89e7626652fc39c5ba0a726462fe49c8ca0d126ff2eb59bea9f70273d2d1099e19fcf273c2ab297159e76276e24ee09db20b6289c98fc922929422aa49d5509092d412cb89cc214ce2ed42cb99a3c09e22fe02cc1978f154e30052d3394411b7e30092d9c8c1b1caa30162da0038d1c03313e2da7036d1c47314f2d540fc81c6031372d4610741c5f31242dfe10841b8a314f2d0611761a9331472d4c114a1a4d31062d9d10bf170e2ef52a5a090c14bb247126200cb411ce9a41230b0f6314289b4d224c1056163d97a321ed10d51705081721a311e4182314c6205213331afe18812049131a1a9b19032004126c199819091f941156198119871ec810fc187a19251eca10d0187519ce1d921058182219551d6e101818c618f41c3910621772189e1c2510fc162718501cde0fd91619180c1ca00f8c16c617ad1b390f4b16d0172d1b680f2d16a117011bc80ec7156e17d31a460e6715e116751a1b0efb145f161f1a970d9014bf15fa19e90c361498158519c20946105d114b19c20946105d114b1900001e08c5029d0400001e08c5029d04bb97df16aa175525af9a10116212be26039cb80e91092d27d099548e0c90f526090e8d8e1490ec265823bb08cd893427ff282717de136d27aa2b9c093496cf270c2d1598049cda27132eb09c35a08327b32e849eada1fc27a72ee79dfaa000285b2ea09dcba136270d2dcd9a55a08c27ae2a4c9be5a0182797256d9c18a34c271609cb9acda01128b09eb29864202d296b9e8a9afa29392b0e9d7a956e2ed62c759b54121a307e2d529988197f308e2dd998bb18d530b82df3954e170331c62d3294aa186031092e3991bc19ac31222e0d8d011aaf31ff2d438ad418d731032e2b8ccb16ec31082e118a8216c031a62d16836c153e31572d5688df13732c402a4d8d120d311d412591075c13659c7823350c4713a29a8e22a30cf313fd969321b60c121583943421b30eef15838dc4200a1035173b106320201007181a15132064105118e816bb1fc0105318e217491f53101118fd17ca1e3010b3170718571ea20f25171218f71d5f0fe116a7179c1dbb0e821638172a1d7b0e4516e616ef1c710e0b161917c01c400ebb15b816641c330e06154316181c4c0db1145c157c1bca0c1d14fb14c81a400c6213bf144d1a3a0c46135414031a780b27123b14e019660b85127e14a819380bc611ea134d18380bc611ea134d180000050c6c0981020000050c6c0981024999cd113a11a625609b478e39090f27849cb4910f937527fb9c219565965527d99c5b95c4987927769aa0946f970d28661c35906d943c2886247b97629b0c281b29e899239eac275c2b169cbe9f4527742ca69c9ca03428872c739cd3a04528032c3f9bb09f66274e29b99c10a1b827e224e19cefa0c82786144398c8a01028989f389ce1a18227aea0ec986a9e15285b9f409915242f29709d8c9a372cea2b259cb1945b2fa02d0e9b02928a301e2e309ba515eb30592efa98f9164b31772efd96c918ad31aa2ee09525180132ca2eb093431812329d2e0791fe161c32942e428ddb163e32b82e2d8b74163c327d2ed782ee161b31942d008301180d2a5529f18d3310c5935224ea882410129c1623a5028b134f9bea225307b1124299e121b10960146b963e21ac0db316798dd920750f4f187612e7206810d818d515c4201110ae18d51645201f1037189217a91f5e0fb7176917da1ea50ef6163117f81dde0d7b163e167f1d320dd515e515311d200d9b15a315f61c100d0515cd15b31cbc0c15157915521c960cd2142815121c640c4514de147f1b2b0c1314a0141f1bd00b3c136814c91aec0a8b12de136a1ad80a6d1202136d1a1d0acf11d212171a220835107b115f1a29024f0a230c3e1929024f0a230c3e190000f000058302810000f000058302817599468dec948125249bbf942596b2265c9c6b96c0984327429d7d98fd9b9027ff9d0898ec99d927b49e5392b390b0274f9e6097909a212809941e9c6a9f2128281e9f9adb9e8a284f22b39afe9e8028bf25e19b419e39280c26129cf09e35285f24289d0da0ea270e1d0c9e26a19927879d599ee1a1802708a08b9e3ea46c285aa0149dd2a3152821a0fc9ac4a2ce27189f8d97ba9d08280ca08198f324cf29e49cae94762df42c379c56927130592e8c9bf50e5831e82edc988708bc31072f1499dd110e32252f1a985a155432882f889928177c325c2f25946918ab327a2f1a922216ba32642fde8c051697323d2f038ebc189030352d6391408d1925c627558f150de49c1f24ba821e10299cdb22560289146e9aaa22af06f214cc9823227406a414cc968f2145061915729543215b09fc14dd902b21ce0ac7150007a620c70bec15aa113320730c3816ee12fd1f2c0cd215ce135c1ffd0b76153d14c41e870bfe14db13451e610ba3141e148f1dc40a48148b13171d8c0a08140613be1c1e0a99139512711cb70932130913161c3309de12ba12d01be508961265123d1bbc08cf112c12fd1ad00796104b119d1aaf0767101611301afb057f0e2710ac193a06690e0910aa19720276080f0a1419720276080f0a141900005f83b988630c00005f83b988630c4f990292d295ff24f39bc794a6972c27b19c6497a7984b27669d6898709acf27ef9da798849b0828529fdd9a309d20284ba02699939c2b28f19f0495c8992528b6a0f197ed970c284f9e959c73a014285d9ace9b16a000286a972e9c05a00c28c79c539e43a1e32798a0e49e3ea20b286aa0b89f8fa3142843a0fa9cbaa2fa2704a0029c5aa2052839a05d9a12a2c127d19f809846a12327289d6c99f99d9c275a9d0f971528ad2a1d9cc694a22e0c2e7b9af9915f317b2ff6999f082932ef2fd997ce1165321830f6963b14d6324530a5968c15e63241309c958b15053347309c94d80e1e33563019980d189832ba2f41958c159e2d5c2c7f8c47142e1aa525b58747183099052493825e15169a4a2370826d15a898e722ad02eb15359647228782ad15eb94f12151829b155791ce2134020c161a8e672114024f153d87cf200402b71466064020db016d14750ce41ff0042e14070f781fbe07f5139510cb1e18079c135b104d1ebc0657131e10f41d4e060113c50f7a1d5806e511b6104d1d230689116d10fb1cfc05381128108f1c8505da10ba103e1c300584106810b61bc804600f24103e1bdd02190e880ea01ace02fd0df50c751ae100470ba40ce219c000ff08640ad519e903310d9e0db219e903310d9e0db2190000ed821f882e810000ed821f882e81159aeb9305987625429ceb97ce990b27ff9c2b98ff995d278c9d07996b9aca27e89d3e99709b0928ab9e75994d9c1f28f99f529a009d29281ea0a598399d3b2885a03f93c29a232811a12d9aba9c0728b8a08699579cf02738a04b9a459ed6276ca0aa9b53a0a727bba0a99bc8a0c827c0a0729a46a1052844a06b9939a1d527b49f2c9a06a1a9275f9fc09832a1aa278c9f9c98fca18327f79dac98fca0f6260f9df399c99c8727829c26944028752b149c0a973030d82ee99818105932623030985314b1329630539915170733b3304c97ae163633b530ce9531165e339d30fa9593158f33a4300e94a315de31532fc69355141a29cb295495f614ae9a4324a7905212279c4a242d92990d2d9c39242f8f180d3a9b2523418eb6116b9af422e989d012269826228886f213ae95bf2149868b1368945421be85b3121992bc20b1810a12cf8f3e209581e412ef85092085018712af85ba1f7d0136126105251f6f81f4100505aa1e61819f109e04fd1d55815d105b04831d548140103c0a431d4b81b10efe030e1d38815c0ec003a11c1d81020e8a03411c0681810c6a031b1cf080060a3003791bdf807f06d982801a94823306ab82ea197c82030287827419688203029402e3197d82f701b202a91a7d82f701b202a91a00006d882e8ada8200006d882e8ada822c9a7d96bd998025de9c79999a9bfc26469d4d9a519c35271c9e919aef9c7227bc9ee89a439dd827129f6e9b399d19284e9f139b859d2b28999f8d9bda9d4e28ed9fa49bdf9e4b28a99fe999879e0628cf9f3499339f942778a00c9aec9fa42796a0199a46a091272ca15b9acba0ef273da1419a19a1e427afa0069b33a1ce2770a0c09b52a1b827c79fa39b60a18a27c19ec49a8ea14c27859efc997ea13827799dbb994aa1d326f09cea98569c0328c09a619ba028e72b7b99ad9267307a2f45982d90aa32dc30bf98ed0882333431d9961518ac333131cc9660150c342331da982419ce33c030108fbf1b3f2fa92d9590b0164d20de26cc92be103c9e7c24c0904a124b9cfc23e38e9e13a29a3023e38dad144f991b239e8e6a136d989122ba8d561449971922de8b0e14d795c6217f8b9c138e948121cd88dc126592f8204a884312c5916120e887d111898f00204b876810e68e551f01891d10628e9f1edb88010e018e141e438a120ca28db41db588c90b5c8d4b1de7897008108ffc1ca4893c08b28e9b1c6e89ad024f8e561cff888d02f98d001ca8886982a98dc71b4e88f5866b8d721b2d88bb862d8def1aec879086f78ca71ab288698bb38c4b1a81883b8b0e8e4f1a8187ef88b28a70198187ef88b28a701900002b89b28a178300002b89b28a1783cf99ef96689a4925499cab9a499cdd265c9da99b2c9d89271d9e6e9b899de027619e1a9b619d1028c99e769b3d9d2b28339f0a9b719d3828999f8e9a2f9d412803a0fb99e29c462809a06899079d482811a0bf981a9e2e28c39fd198329f1028b39fc298a69fd627c49fbf9818a0a227899f179a55a05c27759f059a16a02027199fb69a5ba00927d49e5f9b2aa1fe26619ebc9a6ca1df260d9e9e9a76a1cb26c49d0c9937a17d26259c629806a16e26e99b6794799ce7262c9a5199c526b62af6998a97092f722e7a997f885832b0302e9cba088b332a310d97e8110f33ee307b95d4168b30202f74904714bb272b2926926e10ee98112439921d15809c462498926914129c1d24e1947f14759b092446959813d199f7228c93f812ea9893220194a612a5981422bb90ad1364957221098e20131e94fb208f8db9120f92b6203c8d3511c6917d20018e670ddf9227207d8ef909ad93981f0a8ebb0331931b1fd08d8d830594911e528e2389a393171ee68d0c8c3393bf1d658d5d8dc793401d238d158d4c93ed1cde8cca8cd792811c788c658c4e92261c4b8b258c2891a31bd88a0d8de190391bda8af28cb590c91ae48ae18ca190ae1a9d8bbf8e0f91271a018a6b8d19909919b88b0e8c128cba18b88b0e8c128cba1800001b8bd08b208300001b8bd08b20830b9a5298769b6f257c9ccc9a5c9ca926239d509b059d2327e39d249bfd9c87270e9ee49a389ddf27499ead9a8c9d08288c9e589a729d0e28e79ef6994d9d2e283c9f399a889d3d28dd9f95992d9d49280ca0ee98cc9d4128e19fda99769e2b28bb9fa49a8d9f12284c9fa59a8d9fc027189f759afa9f6527ff9e419a33a00f278a9ee49a6ea0c5261f9efd9953a07d26bc9dd99972a01226709d12996ca0ea25e29c42976aa0c925499cc4950ca1f825569d0297fba0e325339b0a90af9dff25ae98a71801233b2898975d17932ac72b4f993e156b2dbd2d579c5715b52c6b2d92953316dd26e92945957216b5150c25f193a7125e9c262463942a157b9b2424a393c11603969a239792e2141c975b23b69007154a9882232491e213c8984123b790a4115b9876226890890f0198f1219c90210c4c9769211490f7049196e020a68fb184fd969320c88faf8a9e965420548f378d2e96e81fe38ed68cbb95551f598f518efc95b21e4b8fa18f99951d1e0a8f1e8f3195ab1dc28e1590d294231dc28e998ff694c81c088e3590a094761c3b8d0890f893241cf28c79903594ea1b4a8dd9900b949a1bc38cad90b3930f1b478d1791ed93761a8f8d5b916d93e519d18cc190d192ec19748c009001924b19748c009001924b190000bd0053031c010000bd0053031c01fa9b8c983c9b55252b9d909cd59ddf26909db59b3e9d1027a89d599b0f9d1b27c09d909a989c6627eb9dd199869ca0275c9e88996c9cbe27b49e3299be9c0928d69e7d99059d1828fe9ee698b29c0c28a09e3098c99cde27829ee2965a9d94277e9ee196649d82279e9ed596699d4927879e2398f19d09278a9e19986d9edf26769e1698eb9e9926389e0598599f4626929daf978a9fe6253c9d4e97a79f8225ca9c3d9707a05b257b9c44984da06825a09c47988fa05325989b259887a04925eb9a3d8ff19fe2241799051032997e257e98f508b31a402604967f0e191aaf25b694a4147b0ad0243b932c176e933924f096d5187b99cc24bf96a7181698222456971317399724236993e716f995382341911418c4946823809058174994d022c6907d167f93f421ac909c1479948721ac9104123e944021b591400eac95da20bc91a98412969b203c91668d29973220399184905c97cd1f649126921498411f559187931c989f1e6191e1931d98081eeb9008949b97921db290a2931e97181d7590fa933397d11c48908b93c7966d1c05901a93fb95131c228fb892a895b31bd38e56924f950d1bbe8e0b920495a81a938ec09173942e1ab38eee913294ac19b58d9791f89389191b8d77911b94d1171b8d77911b94d117ad90f18f7c906d16ad90f18f7c906d169a9b9b9c899d4025269d989d07a05826389d649d4f9fc826889d9b9d9e9f3927c09dd39c9f9e8627e09d7d9a059de127529e3e980d9c0728a99e9397c49a17287b9e1c9329990428249e67905b98ce27bd9dfa09ef967e278f9d8c10109761278f9d160a97981327b89d1a8aa99adb26139e9393599c96264a9e41955a9d4e266d9eb496d49d0426f79d07983c9eac259e9da698159f6f25149d8d98879f4725719c7598f49f1f25c09b5398db9f0f25799b8b94a99fd124099bb38f2f9ec124e39a0e92b49f92244f9b7895eb9d8d246497711ab88a41247f969c1aaa0a38243f947c1be48a41245093521cd690c3238790881b350a7723ed8ed41a360aab23458e8b1aac095b231890571945892b23339047194589542329911518618fd822dc914b14fd942b22ca922a0f77976921a892548564980721a992438e9c98c620be92459129997d204992169330992e202f929d938899c31fb69172946799201fbe9104955799a21ee69180953999ff1db59169950f99831d81911695b3981f1d66911d956898b01c0c91ef9435987a1c0891cd94b397371cfe90a7945e97081cf39078940a97841bf5904794b196f61aeb905f946296771a1f913694c0952b1a459083944096b119fe8fc8945797b818fe8fc8945797b8180000fe0c531017080000fe0c531017080d9cf39b1d9df7243e9d199e0ca06825b79d4d9e27a00326fb9db39e7ba08e263c9e5b9e74a039278a9ec99c949ea027d59ebd998f9cfc27249e209534992b28639d2d0a028c1a289b9c2f194a170028829ce81ae1196a27b99cf01ae118fb263e9d4c196e159526299d6d18540c4a267d9df5138a971f26c49d488aec9acb25ad9d68958b9e9025799dd096729e5a254f9d9f96cc9e1925289d6c96a69ebe24bf9c2d96ed9e5c24629ca1944b9e0624ad9bc08f1d9e2223b09aae0f2b9da1224199c215379c8b228999e118e799b222e1977d1a6591dc22cb994f1c4c8bf4222996211d9417a1228991b51c88153922328cba1d5519df22958ee31d261907230a8c181d81191023c08b9e1c99185823328bb41b08164a23b68a421a4e14b122788c0419bb0e3e223d912c1464930222bb94fe90c498b5219b955196b69b512103958297269cd620b194de97219c452035941298d69b931f2a94fe977c9bc51ebf93c097dc9a341ef0939a974d9a901da3931e97e299121dde92ab967599961c7792859651992e1cf4910f96ef98c11b7791c395c6984d1bf090a2956898d91ad99032954898a71a93901a95e497391a4b9003955d97141a7990ee940797cd19568f8c94ab96c619b08e1694c595ea18b08e1694c595ea180000b4126c157d050000b4126c157d05ba9baf9d549f8a24419d4ba07aa1bb255d9ddf9ebba0a825cb9d509f0ea10026359eef9f44a1c726fa9d6c9e85a05b27749d5e9c1a9ebc27929cde89a9961328059c4f1c081c2228509b401e7f1e8d27ab9a991fb31fa1263f9a171f111fde251c9bab1d3d1d2b25309cf01ad518a124e69cb010309579245f9dd896d29ca124bd9d1a9bc39fb124cd9df79cd3a0a424bf9d469d46a199245e9d249df2a06724de9c409c8aa02224989cda9a6ea09c23389c7d992ca01a23e89b3298e79fa822219b84948f9eff214a9a2c09389d8f2190999414549c5b212b98271a068b28219b900a1f511dfe20090a10208f1e3021b90c6820721fd921b6090320741e2f234409901e761d19244183711d081c2e243b8b3a1b9917ae2339904517d588df222893e00f1d9860227c941791c699d621cb940e95cc9a912147952d970c9c162193952c98579ccb20b6959998829c4820d69530999f9ca51ffa953199629cd81e2296f698519c271e0f960a99009c921db795af98689b291d66955c98a59aad1ccf942598539a571c1694fb97179a2f1c35936e97ad99de1b7b922b9772995d1b25929396f698c41ad791629695984f1aa391c3952298281abf91cd95e697e219f3904c95aa97a019969097947a969718969097947a96971800007b11f815991100007b11f81599117f9d239ecf9f5924fa9ca99f42a17a24e89db9a052a25c25939e09a1e6a21b26b69e0aa1efa27c26629e53a005a20e275e9d059d529f9127829c7b9353985a28319a6e1fe11fa3288a9754234a242b287c940a24ec249726b6969e22ab23d024b198ac203421ba23199cd21b6e191723589ed98a459a4423b29d9c9a1b9f8123709da29b4da001233b9d5c9c9ba0bb22589d4e9d3da1a4229b9d8b9da9a195227f9d8a9da8a11e22689dd89ceda0d821ba9c759ce9a0d1212b9c949ba8a09121b89a7d99619f0821fc9852920d9d81209e97c215fa97c11fb7941b1c7811841f168f8e1eea1baf1f370a6820f41e3220d8122c217d207621ff149521372127237e12532104214124d9106e20b21f85240503b31dbe1c4224dc91e6197b15b0236e95a611c19322232e96c094bb9a4d22b996a998b29c31210997209a569d83206396129a769d12203096129a379d881fc595cc99be9cb21e6b954799729cf41d1795fe981d9c611deb94b698c39bf51c86948598719ba31c5e945598f09a761c02942498a59a2a1c60930698659a031c0893cd971c9a771b879221979199061b1f92b1960899671a9d916096c398e619439105967d98c0195291fa955f987119be90d59537981f1aa890e59500980e19a890e59500980e1900008913c714848600008913c7148486a69c969fcfa0fb23059ec6a006a2ae24059ee3a0aea2ef24f19d23a115a34b257c9e5da155a39725109f5ea171a3e725679f2ba1d3a214267d9ee69ed2a06d27e99cca1bb21b11292a184b2695273529a21d9728cf29c025a01b04274e28071cb491bf217a222d19e19b57111293031da49d4e9c2a9f5320809e1c9fa5a1df21359ea29f5da22722849e25a0dca20b22699e10a0ada27a21c89e43a0a7a27621d29d3aa03da31e21ad9de99fcda2a020459d849f9ca27020c99ce29d8fa11a20969c6f9c89a0381fbb9b3199ff9e7b1d4099eb0e3e99db1a1494ee1cbc192d16230ffe209520f11188176a23e92382171b1a98242d25861e091c3325ff251523d11a8f241b251b254814542118218225eb98021c501bdc24589a4a87ad95382435985f989d9ceb226597119a819d74213c989c9b619eb7204898cd9b829e3c203298cc9b339e861faf977a9bee9dda1e02970b9ba59d871e6296bf9a669d3e1e0196679a219daa1d7295099ab19c311d1f959a99589cb11cb5940a99c99b371c5094c498359bce1bd6935d98ca9a291b3b9338985d9ae71a2593f497039a881a7f926f979899191a129229975899aa19af91a496ee986319a8918b96af98f818f7900d965598e618928f9d94a996eb17928f9d94a996eb1704070319221bd90c04070319221bd90c349c199e0ea00523e99db9a0eea14d24299ec9a042a24e24769e05a1bba26c248a9e3ea1f4a27e24b49e28a160a3b1248f9e38a198a3ae24a3a00ea22ba4ec24cc9ec3a144a3cb24d79d8f9ef39e00296b25402da22e8b2455189a255e25fba3f79c77a04da3af1c5c9fd0a1c1a4a023589f2ea211a55c2457a034a2aea41924df9f37a2c3a471237c9f38a2c0a46d23ee9ed7a1a1a4cf23da9ebea174a4ce23a49e8fa15ba49d238d9e6da12fa44f23129e28a12fa48f228e9dd3a0fda3bf21f09c41a07ea350205f9c9c9fb7a2f11ec39bed9e39a2d11ca399849ca9a0da16a0928d1b6b182c9c3718ad243c25aca0151ed2289e29309e0f203329ec298224331c2e2694274127d50cdd1f0c206a26f5968a90e3996024ec97e79a1f9e6a224d99059d07a09821ad99e29cdf9f0021ea989c9c689f8220a8986c9c299f16200898359caf9e501f9297af9b599e7e1e57976e9beb9deb1df196e69a959d751da6968c9a2f9d2f1d2f96279adc9cbf1cf495d699949c5c1c6f958299409c0b1c0e953899049ca41bb294dc98759b171b7894a998ec9abf1a63947298909a641a019450985c9a091a6c931698139ac019e692b497bc9993198e92a397a9995a19c991d69608997b192890d194e696a0172890d194e696a01700002712a015a40b00002712a015a40be79b4a9e30a04d22c79df6a079a2f123cf9d09a19da2f823249e15a1c7a2ef23479e2ba1d1a2db23649e31a1f1a2ad23679e43a121a3ed22b69e16a105a3ef203e9bb69c0d9f5f1cc78a1e8aee8e6b164a0b3612a0107a1b2898289c519ef620f29d3ea172a3d22325a0cda2f5a4822405a0a9a2e9a47424889f96a2dda46924779fa9a2e1a45b24559f87a2dca46b24c99e35a2a6a427247e9ee8a177a40d24849ebaa150a4d223869e88a133a47e23af9e64a126a46123489e34a108a4eb220b9e05a1d1a37c225e9d8aa06fa3ef217a9c889f7ca2e02025985d9e0ea223208095ea9e2fa355209b99c3a268a5c722d8201929932970a30724352c6e2c4a28839b3c9fd4a1fd28259ce39d91a145233e9b269dc7a083200d99399d76a0f51f4e992a9d8ca07b1f41993d9d6ca0411f1899249d21a0be1e1699e79c02a0651eae98c49ca19f0f1e4998929c339fb11da097299c969e4e1d1397bf9b259eee1ce796599bb39d8c1c9496b49a389d241c4096339ad09ccc1bf095bf995c9c091b7e955c99d59b481a6095fd985f9b0c1a2a95b998029be21904958798bb9aa019c9946098779a88196a944c98319a6e19cd930798ee99541976930e98bf992a19a192a39776992b19cf916a96a198b317cf916a96a198b317000070104214de08000070104214de08079c149e2ca0b521189d80a0d0a15c225d9dd3a04ea296229b9dc1a069a28222b69dd5a084a26b22839d90a062a2ec211b9e2ba0eca10321c79cea9d5fa00f1f2199369acf9ce11d1c98389bf69c8320b69aca9ffea05323f69d7ea14da34b249e9ed8a112a45124ce9e04a237a43724d59ef9a130a41024ad9ed8a12ea40e247b9ebfa112a4c523469ea0a103a4a723169e90a116a46e23fc9d9ba122a44523e09da5a128a4d622019ea5a12da4a522ff9d7aa129a44922199e55a116a40e22cd9d28a1d6a3c6218f9de3a0b5a375212a9da5a075a3fd20179db0a088a3cb20289dc1a073a39d201b9cba9fd2a1ad1f4d95c299419c7a1c720ab10e8b0e8f14418451911f981d124b96b49a889eda174c99559d86a0371ce798bf9d97a07b1d0e99c69da0a0b11d2099999d7ca0c61d16998c9d6ca0a31dfc983c9d2ca05d1d9b98c19c6c9f0d1d16984b9c869ead1c5997db9b1c9e5a1cfd96499ba49d2a1ca496da9a349dc71b76967a9ae09c6e1b1f96309aa39c361bfc95dd99659ccd1a9995ba99319c9e1a67957a99059c7c1a17955f99db9b2b1ae3941d99919b121ab994c498199bd21965948598ae9a74191d943498309a0619e8930a98e799a71849939b974699dd186792e196d098a0176792e196d098a0170000181152144b040000181152144b04309cfd9ebea06021199d1ea1bea229232d9d9ea024a25622ec9c42a0bea1be21ee9c10a078a178218f9c3a9feea003215f9b229e28a04a20539a2b9d189f1420229b799e3fa02c21019c1ea07ea19522ac9ccba086a29523dd9d6da1c4a31f24cd9ef1a15ba43b24ab9e2ba299a445247a9e3ca29fa42824479e30a29da40424119ef2a17fa4b323fb9dc7a14fa43b23f09d8ca133a4b322b29d58a10da43d22869d3ea1d1a3cb217f9d10a1b0a382214a9dfba08da33b21079dd1a05ba3e220c39c98a004a3a0207d9c75a0d0a27e206e9c57a0a8a24b207c9c2da077a25320989c1aa05aa25820bc9cf29fdfa14e20189cc99e06a10320e198049d699fc41e9b95a59a299d291d3595419a7b9d381ce696e19ba49e2d1b3798489c019f591ad598a59c8a9fc31aaf98359cf09e351b7498619c089fdd1b21986f9cf19e021c14985c9cd09e1b1ce397469ca79e151cca970d9c699e001c6a97c89b049ec61bed96359bab9d751b9796eb9a4e9d1b1b41967d9af69cc51aea95259aac9c501abe95dd99749c231a919592993c9cf31968955899109cd4194a952199a49b8e19a894db983e9b60198f94bb98ce9a03194a945898679a93181a940e98129a561825941198fb99d81769943997d4982f1669943997d4982f1600000000000000000000181152144b04309cfd9ebea06021199d1ea1bea229232d9d9ea024a25622ec9c42a0bea1be21ee9c10a078a178218f9c3a9feea003215f9b229e28a04a20539a2b9d189f1420229b799e3fa02c21019c1ea07ea19522ac9ccba086a29523dd9d6da1c4a31f24cd9ef1a15ba43b24ab9e2ba299a445247a9e3ca29fa42824479e30a29da40424119ef2a17fa4b323fb9dc7a14fa43b23f09d8ca133a4b322b29d58a10da43d22869d3ea1d1a3cb217f9d10a1b0a382214a9dfba08da33b21079dd1a05ba3e220c39c98a004a3a0207d9c75a0d0a27e206e9c57a0a8a24b207c9c2da077a25320989c1aa05aa25820bc9cf29fdfa14e20189cc99e06a10320e198049d699fc41e9b95a59a299d291d3595419a7b9d381ce696e19ba49e2d1b3798489c019f591ad598a59c8a9fc31aaf98359cf09e351b7498619c089fdd1b21986f9cf19e021c14985c9cd09e1b1ce397469ca79e151cca970d9c699e001c6a97c89b049ec61bed96359bab9d751b9796eb9a4e9d1b1b41967d9af69cc51aea95259aac9c501abe95dd99749c231a919592993c9cf31968955899109cd4194a952199a49b8e19a894db983e9b60198f94bb98ce9a03194a945898679a93181a940e98129a561825941198fb99d81769943997d4982f16000000000000000000000000000000006b19688c6b86281b0429671dbf207f249d2b6c20e0200525722cd61d1e201a25d42cc41e5c209c25422d2220be203325532dc31ed91e4d213b2d631de81d491c9b2c891ccf1c8d18d12b531a291c6c12502b3a190c1eeb13e129941a8e1cac0b7fa78eacfaad6e12f39e6aa3b0a2f71c8220911d31214995b5185f1c9e21719e9220991c1f2a801f5e2b571c512ce126312c7e1f2a2c4129702a941c432170209d1f491f87242496fb17000062220e22b31e0a180125b3a1ec12330c8c2509a50000000016253ea5000000008d2346a400000000f321baa2000000007023aba300000000262838a700000000032925a400000000a12bfd217012151a032e02286d18d31e5f2e72289314191c172cc827cf951e9f461ec025ae12521cae214e22ce198b204722c120c017a41d6120f91f2017ef1c261e011e6415491c441d241d8c150d1c141d141d8015be1b041d041dd5157e1be31ce31caa14de1aa41cc01c4814c31a851c851cb4132f1a461c621c5413d919ed1b101c2b138f19881b881b62136f19341b341b3c132719d81ad81a5e130f19a71a7b1a7712e5186d1a421af1119d18fa19ab193d11051832190f191211a4171119cc181111ab17d81893180d111117b3185018e510ee1686184518d00fe414b116901800000000000000006b19688c6b86281b6b19688c6b86281b0429671dbf207f249d2b6c20e0200525722cd61d1e201a25d42cc41e5c209c25422d2220be203325532dc31ed91e4d213b2d631de81d491c9b2c891ccf1c8d18d12b531a291c6c12502b3a190c1eeb13e129941a8e1cac0b7fa78eacfaad6e12f39e6aa3b0a2f71c8220911d31214995b5185f1c9e21719e9220991c1f2a801f5e2b571c512ce126312c7e1f2a2c4129702a941c432170209d1f491f87242496fb17000062220e22b31e0a180125b3a1ec12330c8c2509a50000000016253ea5000000008d2346a400000000f321baa2000000007023aba300000000262838a700000000032925a400000000a12bfd217012151a032e02286d18d31e5f2e72289314191c172cc827cf951e9f461ec025ae12521cae214e22ce198b204722c120c017a41d6120f91f2017ef1c261e011e6415491c441d241d8c150d1c141d141d8015be1b041d041dd5157e1be31ce31caa14de1aa41cc01c4814c31a851c851cb4132f1a461c621c5413d919ed1b101c2b138f19881b881b62136f19341b341b3c132719d81ad81a5e130f19a71a7b1a7712e5186d1a421af1119d18fa19ab193d11051832190f191211a4171119cc181111ab17d81893180d111117b3185018e510ee1686184518d00fe414b1169018d00fe414b1169018501e7b11d9156712501e7b11d91567121728fc1ebb20d124742a701e221f2b251f2ccf1cad1d5425d42cc41a471af8264b2dcd8f8b953026f42c3198c79aba21a62d49156b15271a5d2e19195e19ff18122e0519fb180f12072f1e98bb9ad49c7e2d2ba5e5a606a2e02c7baa62ac30a2542b82a985a9ec9fbf9c30a1b6a1c89d6098d6919995339c192c4c10e2299b21852ee017552d9e28772cb7195f2d562a43274b10261ccc25260ab0184b16a5a47f010000f99323a4f60269082a9dcda4000000003a9ce8a500000000d9910fa5000000001b166aa400000000ee1093a400000000680a41a400000000841cfda2000000004e21e1a40000ce12702d5c27d8116617922f562a5a1013161b2f83292b09a395f82be627a78f829c6f21eb23608d8399139aae1f4715a81a741a561e05165e1c121def1e6516921ca31db61eff157b1ca91df81d1516231c5b1d7f1d6b16241c491d8f1dd415e71b081d6d1d8f14361b9f1cfb1c4814cb1a6a1cc21ca613671a481c811c50131e1a051c581cea12c319841b111cab128a19291bbf1b99123819c21a841b6012ed188c1a1a1b2c12c4180e1ac21ad0118518ac19541a5a1127186519dd192811f91730197d191211c0170619511907113a17d018f4183a1065164418ac18830e9414d615ca16830e9414d615ca16f91204038e014011f91204038e01401112243d1d7c1f7d253a28731ec51e1626f62abf1bc21c2e26a32c621a3b1b95266b2d721b6d1b0d26e72da01b4b1be7240f2e281b5b1bcc22302efb18a019a920672eed12e0088d1ed82eac9ca99f191c042fa5a375a52992582c0aa632a8cf9b952da8a487a5759a4e2e71a000a0c69b0599aa99a59a7995042efd1b2329b7224e2ebe1d342d8029de2b9810c82df02abf261b1adf2d762a641d001fe22fdc2af21b0b204e30a02a9f1a0b1ed530052b3c19751e1531202b0717b51d60316e2bc512131e27315f2adf139a1e3931742a00005b1cee30562a00001a181f31022a0000d4186e31f92a2005b018683047293811101784308a2a4210b012952fc629510d878df72a6827828cfc98cd1d70239c0d088dbb985e214d13d617d41197202c15f71bd71b37207f150b1c701c981f0815ac1b8f1ccb1ec914c51ba81c9e1ee514aa1bcd1c601eb114501bac1c261ec913b41a3d1c971d7313481acc1b231dbb129919381bc11c40122019ab1a4a1cb611c718461ade1b78118d18bc196d1b601165188e19021b281126185819931af710c9171019701a1b119c17ea18141a77105217be18dd196410e41682186d1989101e176f185619a410c1167e183b192f10c81686186919760ec91433169d18760ec91433169d187289118ef88f68087289118ef88f68084d1b3c1a7e1ccf24b723d91ca71ce2257428d21a1e1cfc255e2b4c19ec1831260e2d9519f7198826f62d85191b1a3e26632eba1afb195225a72ee1174b15dd24f72e6d92609775241e2f529b709e2a24e12e8f9ff3a13e242c2fdea096a358246d2f959f0ea35b246c2f579b54a0ad24272fb815b7206625342f5016b926d227902d2995462a5829e1296990382d9a2afc201b151b2e752b2f10e21d9f2e842b7d15441fc72e722b8716bb1e7c2f2f2bd517f51e0e302b2bda174a1e3730152bd416e81e7e308c2b9d152d1ea130612b3416b41d9d30092b69178e1da830112bad13fb1bcb303c2b3f0e4216b030492b690235919e303a2b5e0844932c2f422a5e825b9632296d27348272966d119223c609fa910a9d00220512981615942d2153138719c515a7202514731a241a26207714201bc71b7a1f8114ea1ae21b931ec013601a7f1be31d7713081a351b711d2113e619051b6f1de512bc19151b471d1f122119a11ad11cd211c218131a691c35118718d4193c1c3911651891190b1c041122185619c11be110f2171b193a1ba1108417cc18ca1a9c1029178618681a1c10ca1652181d1a14105f163418c919ca0f511606189a19e80fab15a4175219c40ee11439162319de0e9c14fa15a818de0e9c14fa15a8180000a9008784f1010000a9008784f101a58e1a1a401c60255f1980181b1a6e2671234a191d196d26cf28ea182d1b9826242cff11231346279b2deb088013fc266b2e5d124e8a8c26c02e68094d949d26122f5d902a98c326342f1d98009d5f26552f9e9c6ea0c8267f2f0c9e5aa1a826982fbb9dc4a180264f2fe399ada05027ad2fb2996c9e4427172f2f98bf1b1828a02c999afa2588290f26939cea2b342b2a94a098f12d0d2cb59d3b90752e342c7f995416da2e5f2cc5915e1bb72f252ce684631d4d30132c1510611d7f30c92bbd11211dd630042cbf0f991c0e31242c340f041c0131fb2b080fde190c31d72b190c51182431132c0f091b131e31012c3c88908eec30f22bfd023188052f652aae06b3874728bf2653829893ef9ad422400c4e86c79cae21211117175c962221fa103b181c0ea620ce127619961713204b13261a64197b1f0513b819de19d81eb712ae19d619961e83127e19301a451e77125b19281aef1dec110519fa197e1d3b11ad18e8192f1d1f1186189a19cb1cdd1080188f19ac1c03114f1843194f1ce7101f183b191c1cb810d717f318c61bd4105b179e18421b9f109f165018991a16100116c0172f1a320f9d154517e619a90e4015e116d619f20ddd147616c219de0dba1419161519710c5b12e1139918710c5b12e1139918c7806006ea82f900c7806006ea82f900db9615191e1b4d254d977d19ae1cfb261014990e14100127ea226188ae092427e728520f8b09cc26752c10094510b826ef2d6389638a2327bb2e0d95e9986a276e2f8899549d1f27882fc399ac9d3627b72f1f993e9e88260030e49b74a0d3271830d69cf8a099273830429b64a07027c42f089b01a0a327452ef29b85a0b6273d2a4d999b19a728411fac9d1e28242a5c9e239cd32c032cdd9d7915ce2e992ced9bcc89e12f7a2ce298ec1540308c2ce696d1198d30852caf92911ab630672c298d921b12318d2c0d8a531b7631a42ca904da1b7431832c740a3f1b8f31922c2c093719a531962c60095517b631aa2c1b0cb6177031712c940d2615b42e792a9e02a1873725e0258682af864a9ca022160e9d13b99bf62137109917b3968f21be1025186d0ee320bc11191956158c2018135a1ac91846207f13471aa119d01f3712a019a519021fd4119119d219681e1d110019b819f41d1e11c818a919951ded1084185a19491db8103d18f418e41c6d1000189d188e1c3d1081174818391cfb0f05173718b51b9e0fa616ef17411b130f5b16f817f31a410f2816ba17bc1a8f0ebc1583178d1a930e6415fe16391afa0d45157e16141a8f0d9c14e915d519170d70140e165c19330b581098115f19330b581098115f1900004c059402940200004c05940294028d98f8159f1630253b9b4888f00f2827449ca808d1096927d496429582965d271220649442958f277e28c394ac95f327742c31902f94cc271b2e3a95059b1f284e2fce99089ff127d12fa99c42a0ef270430ff9d66a11e2838307a9ed4a1ec2741302e9e0aa295270d30359ebaa257284e2f129f99a3d0279c2ccb9e87a4ca27f824719c34a1ce27469c719d8c1ef72869a01e9d012acd2a019f9998af2e702c679dbe892a30eb2c9e9cc216a630e22c799b5318f4300f2d2a987f152231f62c5096f9157231202d86941718d731382d5d92fd17f1311e2d1a919c160e32172d8690ed1326321b2db68ebb142b32262dfb8d91139d31da2ca48b5b08512d362a228dbf8d00200925c48221071a9de5220e081d12aa9c4f228309de1249983721af0c9014bc95c220c80e4116c78d832026100f181f123620bf106c180d16c51f7c105d18c717501f60106018ed17fc1e681028186b18a01e3e10e2177c18421ef10f61173918c01da60f1317e417601d240fb1160018181db20e5a169017d11c950e1a164217811c600e7515e216461ce80d191587160e1c970dc8148715251b900c2a1403157b1a740c6413c614011a560c47135a14b8194f0caa1244149b19200cf51283143719930bde1194136c18930bde1194136c1800008605d700840200008605d70084029899e7113c08a9257f9cb393e4948f27839d34948190bd272c9e0392a690e427239c5598dc99c427a51db6986f9b3c28bc274a95049c7528c42b589b849f7528e62d9d9cf99f1228fc2e149d65a11b28df2fc69d7aa171280430339e6da16b28ef2f7c9eb5a14828212f9e9dbaa171281e2d9e9f00a35b286028409d1ba34528f309909e6aa31f28a9a0c49d22a12f2837a0c79c9d223029809e199ca32cc52bbc9d31950830432d309c3497c0306b2d849cd9093c31922d069b07138531a22d0699b014f931c82d76988c144032d22de69537145732b22df19331147632bc2de49060169a32cb2db58fb2147032942d318c1615af314e2d9288de150e2ca0294f92978d5e914e24b58d0e07299dda22dc826412c79cd02287024c13d899eb21f409d61420976921c90df516b68db320a40f5a188512992038100119dd1685206b10ee18271727201f107e180818951f081010180118e11e580f53170a17e51d600ec3168316741d690dfa151f16fe1c400db4154a16b81c310d7615e9156f1cd60c261593152e1ca30cda143d15a51b580c4814ef14341b1f0c1614b614b11ae20b4c1387146e1a020b9a120d14401a050b83123a131b1a530a6111fe12e9194d083e109711001adc03790a480c6e19dc03790a480c6e190000f103068106010000f10306810601cc99708d24959b25379c1e97a098fb26ad9cdd9660989b271c9e0597669906289d9ec99734914128709d009559943628f99245905a96482878245c95b19c8a28d8291e9c669f7f28992c1c9fe9a13e28d52de89d18a18328522ec89ca3a07628932de99c7aa03e28812c829c18a13c284228519e0aa2fc27bc19bc9f03a43228a19fb79fa5a4ed27f5a0269d8ca49427c19f3298049f0d2814a07e9c3926c729a49e0194652ed02cee9d3a96e630b52dc79d7b8f6731cf2ddd9ad491f331112e2a9b2d893032262e5f992309af32a52e1d9a1f12d6327a2e919556163033942e2294321424338a2ea18f46150933832e0490d716c331752d7690eb90c7283d28499376870f9ca3237a8b280da69c5422a302b914b99a522264025f149399a521ec06cc1416983e2166093515aa95f5205d09c215fe90cf20e80a931641075c20de0cbb16e0110a207d0c5d166314e01f340cf315c4143e1fdb0b80154d14881e760b0f15fa13e81d590bb9143514661db20a5b14b713f41c7d0a1d142d139b1c110ab51393132d1cbe09a7121c13d81b3b09e712bb126d1bea08fd115712ce1ada0838111a128d1ae9078510e011221ab00763100111c219c607890fcd108719a3054d0e17106d1900043f0af909271900043f0af9092719000093023181f605000093023181f605bd99b6926d967125e49c5298339a8427a49dc9996a9bc327a69e6099609c23289c9eb4990b9c2d28a5a03a9bce9d2a28eda0b79828984d28249ede935c996b28be0ada954a9c8328b723369e2aa160286328fa9de5a03d2858297b9cb39f01286728229b529fe3272a24329d3aa10d286090b79f69a49b28d09edc9e07a4102879a0459d09a40028f0a0ef9dbea36727b1a0b89c2aa33c27389e059cb7a00628499e63980329c12a519d1693e72fd02d199ccc95c031b82eb09ce6884532dc2ed499aa0fc732252f9399a50f4b33ae2f399894126e33792f0898f8116833732f839698886833732f13980e1547333c2fba98f811ca30442d4c9186117a228e269d8b64180d987523c782921598997f229f829a15da986322cc822c168c96e1219f82d015da938a216e82b81570915f214c8235163e8e012124029315a28797200702fa14c1062b20c4059314a10c9e1f1d054f14490f311fe8071114bb10ad1e3607be137910271edc0679136e11a81d6e0628132211581d5906cd12d510081d410667129310c31c2c0654114e105e1cb705a1110110101c2a058b108210461bbf044a103510ca1ab504240ea50e5f1abb020a0e000d291ae4006c0bc00cae19c6000909820a9c190504310c6f0d5c190504310c6f0d5c190000d200048634810000d20004863481009aa69059979e25c69c4098769999275b9d6d98b199d327369e5e99c19b2928b49e509a049c40283b9f429b169d5728b6a0e29af79d71280fa1e6994e9e922832a06e95949a75286b9e389ce89f2a28d39a879e7da10e280290239e52a12f282298129e58a1c527e99d349ec2a1de27b0a0299ea5a20928aca0a89cf0a2f7271da0749c53a29b274aa03c9b85a2902755a0799a19a39a2721a0409abfa1c0265c9e6e9b649db027279e2798282ad92b4a9dec98e630da2e199c7e94cb32c62fb599d88f2d330c30fb993510c7333b30229971120034343052982d1207345330769a860f22343e3052965f120034123085948816c02e522ce4940508d599c324b491890d059db723af92ea0d8d9c8f237c90dd868a9c562233904110ab9a6e22568a6a14a197f121df861d14cf9468218c8694140e931a21ff8526149890a720cc818b13ea8c2620a8811a142006c01f8e01b613dd056c1f84015713250cff1e7301fc11c80b681e7181ad11430bd41d66818310d10a771d62815510720a081d5481c80e160ac11cc383720ebf097e1c20810e0e98031a1c0481820c7103da1bea800e0a35031e1be1806d09dd022c1adb802009b102a2198082080691025e196782f90195826819ca80b805a502091aca80b805a502091a000065861b8a1c81000065861b8a1c81709af1951b9a8f253e9d7c9a2c9c9227a39d989a979c4d27a99e0a9bf49cdf272d9f739b429d1328d09f579ba19d4e281ba0a09b039d712809a0659c349e7028f39f869b7e9f8d281aa09f9a429e4a28709f8b9ac89e3d280aa0639c1ba013288ba0999cb7a00b2875a1299dfda12928e7a1bb9c19a2d927d4a0d39c36a2bb27a7a04f9d3fa282276ea0e49c1fa26a2703a04d9c43a22127669fb09b51a20e27fb9ea19ad5a18c26ea9c7b9b318d0428199c3f9c9f2cec2c6d9b9a961f321930cb99a60991338b30309c430ff3339b30d89934162534d630179a6d143b34bb3038978a187534ba30ca93e119a033ec2f71939d15662949294c9550140c9d102447923a14d59c9b23158f0e140a9b20232e8ead1331995622f08c98147f983922878c6615849600223d8c10150795a921b289aa14629357212b894614d392ef209888d5136390712025883013e38fc91f91878b11298f121f45872f10e98b581eee88e00f308ef41dea88d20ddc8d7e1dc788f70b9a8d1d1d008a7d085c8fcb1ca8894108ef8e651c6b89ac02868e231c048988021f8e8c1baa886202b48d3b1b52884982b38bd51a1e883282548b801af8877b86fa8c201a18885389c78c0d1a8d872989d08a0b1adf85cc8502881819df85cc85028818190000f683ce86f9000000f683ce86f900dd994f96239a5e25ec9c0c9c3a9dcc27059e7d9c1c9e0428ad9efb9b009e2a28e89e9a9bc89d4228699fed9b099e4628ac9f869b569d522828a00d9b7f9d552850a09999329c5928c8a01299e29d512806a1cd99fd9f382882a08f9a8ba00e2853a0b499c7a0d02777a0729a0aa190275ba06d9a09a14c2761a0e69b9aa1192706a0549ca8a1e726d79f069d34a2ee26779fad9c3aa2d326ee9ea69bfca1b726b99e209be3a13426579c6d9a4ea23d26cc9c969af6963828179c7d9c5e2d992d759c0f9c8d32a030c899e69829341231ff9913905e3424313b97f2087d341f3198986c8993340f315b968c12c630862eae966d88291ead260a9358154a9c0f245c924d13319b1d2440959b14539b1824c095b413479adb22ba926f1432995822ae9257147197cc216a90de14bc945521848e7e136394ef20e18ded124a928c20818d6711ff9156204d8dec0f48931920d18d400a10947a1f428ee2037c93e41ed48da8830f937f1e978d4d89e893021e3e8d0c897993ad1ddb8cf88b00932f1d478d7a8b8c93b81c238df28c16936d1cb68c828c8092101cbd8b3e8c4691681b3c8b288dff90041b118bff8cc990881a0d8bea8cb6906e1ad88bb78d6f90e2196d89628c25902f19388c198c568d5f18388c198c568d5f18000050865888f780000050865888f780049a83979b9bab25219d7b9bda9c5227999df49b719d7627299e169b749dec279e9e789bb89d1b28c79e579bbd9d55283f9f029b0e9e5428ad9f369b399e532805a0a89ae69d642856a0c29a709d4e2871a03d990c9e4e2852a03a9a5d9f432818a0e09b43a01728f59f589cd6a0f227fa9f459c0ea19427b69f869cfda03627629fcd9c80a1e8263c9fa39cd5a18c26e59e7e9cdda10c26a29e179cd6a1e625fb9d359bd1a1c225209ef69a63a2d425199f359aafa18125689c94970b14d627019bd9978e2d062d849a468913338d30cd9b421064347b31829e33168a34ab31939cc914e3328b30f1991d151d2a622ad29799127a98aa23ec94fe12ae9c12241b922718389078237993b916df922223688f2317c2940d23e18fe5159394c82258909d146e9542220b908c113496d9213b903a0fad965421708fbc0bdc96a120df8fe00458966320468f9b84fa952320d58e738a9e95c61f7b8e058def95111ff18eac8c8995971edc8e1f8e2a95011e5e8f578f58958f1d258fe48efa94091d338fd88f9e94ad1c8e8e5d8f5794661c798d25902394151c218d00906d94e71bec8c6b905794c11bcc8cc9901194111b688d9d900794361a4d8d6e918693ce19088dc190e792ac19ee8c979013923119ee8c979013923119000093092f0a2081000093092f0a20815e9bb699a59c3525659dac9cf99d4927d09d0c9c889d1827399e4b9b0e9d59272c9e649a859c9c27aa9e4f9aeb9cdd27309f179ae19c0928b09f6d9a309d2b28d99fe399dd9c2128da9ffb99ff9c1c28b39f3a992d9e1028a69f159a5c9fd6277a9fd49ae39fae277e9f819b31a05f27449f129c68a024274d9f479ba3a0d126459f039cdaa07d26169ff09b1fa15d26c29ec09b45a1fa25529e469b3ba18925bc9d6d9a26a153257a9dce9982a15425f49d449b97a16625259c0f997ea04725249ec188078bc724749a30100d29a82a6f995b89d52f5b2e769867127230de2e27943d16ec2a3c2b3e9579160d1f4a255b9b3917eb961524b395e319de990e24dd955b18e899fa23f6917416fe943923fb902f18c192d622b39080173c924f22e690ca16a891ba21cf909e156f9382214d918d135c94062161918110f494ad2058913e0b7f95632065917c84b29616207991568ff6969a1f8b916791d697121f7291d592ea97691e1e9109944a98d81db6907a93f9976e1dc290c5937697f41c7d9008947597a11c5790a393fd96391c159029931b96e41b2c8fca92ba95671bb68e6592fe94c01a858e1192b6945d1a638ecf918694f219408e0b92479477199b8da2910794fe18d98c2c914294bb16d98c2c914294bb168e03511272141c0b8e03511272141c0b229b329cca9c1925049e8c9d1ea0c3265e9d699d5b9fcc26f89d839d889f6227f69d8b9c529eb3271f9eb599989cef27d89eb698169b2a282c9fde96799a3328d79eb990a1980528b29ed490ba98d127599ee690d698ba27659e1b94169b9027bc9e4d979c9c4227e19e6798339ef026fe9ee399b39f91262d9f549b12a03e266a9f5b9ccda0e725529f489cfba0ae25119fe29c51a16025679e1f9dc8a13b258e9db69ccba11d25d39cbc9bc4a1f724999c9c9977a1eb248d9c1998c6a09924a39ce298b6a1892495a09899e49e8024e9997f156a128b251294c087971c03259895d30fc5194f257997f518e3962c2375927c1adc953823978de31a530a9f22658daa1a4310202258900f1abd09ba223b91111a1e10c7228090b11814896d22e090f716d991eb21de91ba12cf9537215b9288051a98c4204a92868ecf9885205d92819166995f206a9247926f99f31ff791e59275999e1fd1911b945399c91edd91b39493994a1ef39133957499ac1dde912c954499321d92912895d898c81c289121957f98701c9891fd944f98251c6691e094df97fa1b5d91b7948b97a51b2c917e9432974b1b20919494d596be1af29062948796431ad5903c94e695d019ec8f43941c96881928906d94ae96e41828906d94ae96e4180000530c3a0ee5020000530c3a0ee502b79b4c9c839d9624129d6c9e3da075250e9eab9e62a05426359e519e4aa0c9267d9ea69da09f7927989e359b8a9d1228989e2598589a3d28879dd2102f8c4828d89c9718aa171228b69c8119cf17be27529da1179c1539274f9e3714b992cb26a59e00911b9a9726ba9e66973e9d6a26f19ed99a5f9f3626fb9e8c9cb6a0fd251a9f3b9d28a19e25e69e269d19a16d25999ea69c40a12f25609e209cdea0cf24ec9d8c9a79a089245d9dff981fa02e24fb9c39988a9f6d23669cb895049f2023e29c1898c69fc722249e2798629fd322f19b9e95a99e3c2331a0e488cb9c9122f79dbc113f9a9a214d983d143899eb21fd91f31c31142e22d293e01df31a0822178ecc1da91b8d22f18dad1d381b8e22118ca61c5219a722688bd11b55189522d48ab01a6e151c227e8c0919af0ec72199914d1160937821a994b693229a1721ac949f961e9c9e20af94a4971a9c27207a946d97cf9b5b1f6094c397cc9b8d1e1a9406982b9b061e2d948197949a641d05947797299a0d1d81930597c9999e1c1593fd96bc99451c919285965d99c51bab91129607994a1b0e91d2959098b41aef90a2957098841aae9082951498121a669028950098f6198b9046954297a819888f9c947e9694196b8ed993549516196b8ed993549516193184e011a513ac113184e011a513ac11649cb69e1da0b924649d98a0f4a13c26019ee19f58a12826639eed9f4da18526bb9ed09f41a136270e9e2c9d259fbe27179dc3965b991b281a9c411b151a2e28b69bed1eca1ee627d89b681f0320c226389cdc1eb31ee725b99c211c451a5725399de915708c1025c69db595069ce524509e569bed9ed024699e0f9da0a0f024c19e769ecea10025cd9e729fbca2f624db9e08a0eda2ec24489e879fcda2b724ee9d859e5aa25524b89d4c9dbfa11d24839d9b9c7ba1b923849d4b9c82a14e235c9d3b9b42a16022f49c1a9a93a0af217d9c2e981ba06f21bb9cf7919f9c2b214d9a85154894d1202997f81b12146120bc8c291f1f1dc920b90cd81f381e42210310b01f9f1e8422240e881e8f1d4e233d034e1df31bab23458b9c1b7c173b23a69172160a926a2237942b068f98d6219994fa901e9a5321ff9493958a9bf82082959c97259c9f20b1959d98689c4320df9500999b9cac1f24963999ae9cd01e35962199679c311e1e96f398269c821d1c96d998ae9bfa1ccc958e98239b811c2c955a98a19a531c97943c986e9a161c0794ce97f899a41bdc928797b699501b4b92d2962f99b11ad7919d96cc983f1a989120966b98fa198691e8953a988e19dd908595b59755196890949470966b186890949470966b18b6862911e9132b14b6862911e9132b14e69d809fa8a084247a9d42a098a1de24e19e22a1b4a2a925589f29a1f9a25c26f99efda0b8a2f026019ea79ec7a0ab27709c3d954a994b28ef99d51e911fba284f958a239624322865969423cf240826669964215f227d240d9c601d331d7f233b9d5311dd957923349ef79b6d9f5524919ef39d81a16b24649ea49ec0a158243e9e449f5ca23924479eb49fdaa23624859ed59f1aa35124b19efa9ff7a22124489efc9f23a3fe23dd9d9c9fffa26d23829d4e9f10a3d922f69ca99e9da29d22879cf99d5ca22522c09b5f9c00a16d21469a1499609f892009990c92e69ce11f3b979215aa99c01e3c93d01a6e111c1e480a001f771de41eed132221bc204020f713d4213a21b721aa10bf21b52156231b10ac20622007240a83701df31c98234991951868152223bb946d061a975a225a9671977b9b7e21bb966199f59cb1207c96dc99699d22202296279a519d681fd095da99009d971e85959299939ce11d4f951199309c631d0595e198be9bdb1ca394ac98759b8e1c72946d98199b391c1a943398cb9a0b1cc6931198949a9e1b0d93d997539a541b8f926d97eb99ad1a1792f8965899381aa2917596f098c6195d9119969f986f19639140967d984719fb90cf957098ba195390a9953a98b0185390a9953a98b0180000eb0e3c10ab810000eb0e3c10ab81ed9c3fa0bfa13d24759e21a1aaa2eb241e9e31a144a30d255c9e7da194a37225089f93a1faa3d925359fa2a1e8a35626059e58a008a28327009b291ba81a1b295916a42632283329231dca28222aa52403140f25c825921be29a9b19a518a21f4e9e5c9da1a02821fd9e11a05ba29622a39f1ba1a1a32324699f98a115a47f243e9fbea14aa49724679faea164a4b1242a9f9da14fa49b24069f9aa15ba45b24bf9e3ea152a4e123e39e03a116a41123389fc8a0cea35622e89e2ea046a3d621e59eec9fc9a28521229e2b9f79a20421d49cae9d53a10420699ae69a27a0371d0398e208789caf18b38e9b1d2f19a811da14b221ad218b18081a5924da24311d6d1b0425cc254b21f1198c24de2475244f1476218f20da24c793a019c41843242298bf931f9aed2203981e9ac29db3213198f99bd69eae207498219cbc9e20206c98f09b8c9e6c1f1a98959b3f9ee51e4f97029bda9d501ea996e39a8f9dfd1d0c968c9a4e9d721d82952b9af89cf81c4a95c899829ca01cef943e99119c2e1c939404998d9bc31b4c948d980a9b0a1bd69358987f9aaf1a7f931298169a431aba92d397af99061a41923c974e997819c491ba9616993d19b3919d96d698d618fe900c966e989318229014954c97c916229014954c97c91608134b1a9b1cb10808134b1a9b1cb108599c1e9eae9fc122589eeea041a27424969e26a1b4a27624919e2fa1f6a27124c09e23a133a38624d29e47a1bea3ba2447a091a1f3a39024989fc4a226a4ff24ec9df4a0d0a1fa285b232f2b9c2c38240c9e37a04ba27b21709dc8a23aa56424bd9f98a26ea58625c2a0daa229a540250ca083a2eda49824e39fa1a2e0a4a32402a0b6a20ea5e424e49fbaa214a5e924a79f6ba2eca4ae247e9f1aa2c2a47024019fb3a193a42f24af9ea3a17aa40424439e56a15aa4a423179e14a139a41923b29ddea015a45d226e9d78a0c4a35b21209d0ca056a303200a9de99f5ba30a1e5b9c0a9e88a1cf18be9909957d9cce93159418219e21679f071d11278128359f5320d928142a1b217a1de1260b28b126ca8ae320582024263696c38d53984924f0994f9c01a0fe22839a239d21a074219899c89ccf9fad20f598a39c889f1f2012983d9c179f6c1fb797f39b8f9e8f1e81979e9b319ee81d2f97239bad9d691d2997c59a569d161db096629a0d9db11c3d96039abe9c4b1cad959799609ce91b269551991f9c3f1bef94f598a09baf1ab094b998139b5b1a76947998a49a1f1a1d9458983e9abd19e89320982b9aac190493d697e1996519d292c997af995d19e19116977699ff18829010958d970f17829010958d970f1700003712af15570a00003712af15570a879b5f9e42a008222b9e57a1eba20e244d9e6ba12ba31424729e6ba127a30324619e66a11aa3be236d9e33a108a30823a09edda0aba22721ef9a6f9c6e9e7f1cf3012a08030d4a18a2028c0dea82991d259c029f8ba106230fa03ea31ea576247da080a342a5ef2475a035a318a5c92441a0eca203a5a0242ca0c9a2f6a4a924da9f84a2d1a48424ae9f8fa2e2a48224419f71a2dca45a24009f2ba2c4a43224079f09a28ca4fc23b89ec9a160a48c23569e61a124a4ff22f49d41a10da49822aa9dffa0f3a340228b9dfca0e2a30522fb9d18a1e9a3b4216b9da8a0a7a37821059db89f53a22320e29a229f56a23a1f1d9caba15aa4a6215f1bf8233224a6a466258e2cbb2d7122ef85b6203920ae29b599639e7aa19d23619af99dc4a067204d99809d65a07b1fec98479d66a0061ff6983d9d41a0a11e1b99019d15a0371ea898d09cb49fd51d8998939c3e9f741d1d983b9cb39e031d9d97119c709eaf1c22977b9bf29d4d1c7b96f49a759d061c0f966b9aff9c501be195089a749c9a1a7e957e99f79b0a1a539519997a9ba1191e95d398499b7b19e394b098f09a5819ba9482987e9a3d196c945198319a2019e9932898ec990619a3931a98c49909197c92de979499db1876916096dc98961776916096dc9896170000680dbc14c4030000680dbc14c403a39c949e4fa06b213d9d97a022a284228a9deca082a2b322a89deba07da27d22f19ddaa098a23622e69d53a000a26321dc9d699e5aa0c31f4999eb9aeb9c161e7698279c2f9db5203a9c40a076a19123b89e47a242a4a62409a0cda2b0a4c124d69fb8a2bea48924959fbea2b7a470242f9f8ba2a9a46324f59e5aa289a44324cc9e28a26ba40524869ee9a168a4a4234a9eeea15ba44a23339ecea14ba410230f9ed7a152a49f22309ec0a146a436225a9ea4a145a400227c9e70a133a4a921839e27a11aa456215a9eeca0e6a3ea20059edaa087a3a520ab9db0a084a37820fd9c69a02da32f20c79c7fa05ca32b207a9c38a083a2821fe798619cb19e861c260c7b0da60d53153c0496001992260da196dd9a429e6617fd98439d4fa02b1c3599dd9d89a02c1d5799af9d98a0671d9299c29d83a0641d9799529d37a0241d4d99059dab9fd51c85987f9cc49e6a1c9697fa9b249e261c3897829bb59dc91bae96f59a479d7b1b8796939af39c281b3c96479ab99cc71a1396ec99739c831ab895c2993a9c511a7b9575991a9cf6191f955699d29bce1908951499819bb119b694c0980d9b771958949d98a19af4180e9439982e9aba1889932e98f8996d183e93ec9770995718cc91a496a3984b17cc91a496a3984b17000053113c151b06000053113c151b06689c7e9fcfa06321919d4aa1dea21523379dbea048a22f221f9d63a0f0a1ab21019de39f54a11421229c659e51a02e203e9a779d4f9f4f1fed9a6a9e43a0d120979c94a013a2f322949d9ca1c5a33f246b9e1da26fa492242b9f57a2bca48724609f70a2bba46324129f67a2c4a43824da9e6ca2bba41f249e9e51a2b2a4e823659e28a297a47723479ef6a171a4f822469ed4a153a452223c9e95a13ca4dd21179e5da106a45821069e39a1e9a3f720c09df8a0b7a3ad206c9dbea069a35820e79c7da010a33320959c5aa0cda21a20859c30a0ada206207a9c20a07da2f01f8e9c13a06ca20520a39cfd9f64a20020839ca59f27a20020719bf79e83a1002084981e9d9b9f6a1e76940f9ab09ce31c01957a9a3a9da11b3c97db9b919ed919e1985c9c239f3819c698639c3b9f3a1a51987e9c589f111b1798829c3d9f681b1e985f9cff9ea01bef97499cde9ed61b0798279ca49eb41b7b97ce9b3f9e7f1bfe965d9be39d321b9496ef9a699ddb1a2b96839a109d571af395399acb9c1e1aa195099a899cb8197595b6994e9c8a1976957e99219c6d1930954199ec9b4f19bb94fb98569b21197c94bc980f9bc81834947d987e9a5a180f943d982d9a2418f9932898149a73176893fd961d99a1156893fd961d99a1150000000000000000000053113c151b06689c7e9fcfa06321919d4aa1dea21523379dbea048a22f221f9d63a0f0a1ab21019de39f54a11421229c659e51a02e203e9a779d4f9f4f1fed9a6a9e43a0d120979c94a013a2f322949d9ca1c5a33f246b9e1da26fa492242b9f57a2bca48724609f70a2bba46324129f67a2c4a43824da9e6ca2bba41f249e9e51a2b2a4e823659e28a297a47723479ef6a171a4f822469ed4a153a452223c9e95a13ca4dd21179e5da106a45821069e39a1e9a3f720c09df8a0b7a3ad206c9dbea069a35820e79c7da010a33320959c5aa0cda21a20859c30a0ada206207a9c20a07da2f01f8e9c13a06ca20520a39cfd9f64a20020839ca59f27a20020719bf79e83a1002084981e9d9b9f6a1e76940f9ab09ce31c01957a9a3a9da11b3c97db9b919ed919e1985c9c239f3819c698639c3b9f3a1a51987e9c589f111b1798829c3d9f681b1e985f9cff9ea01bef97499cde9ed61b0798279ca49eb41b7b97ce9b3f9e7f1bfe965d9be39d321b9496ef9a699ddb1a2b96839a109d571af395399acb9c1e1aa195099a899cb8197595b6994e9c8a1976957e99219c6d1930954199ec9b4f19bb94fb98569b21197c94bc980f9bc81834947d987e9a5a180f943d982d9a2418f9932898149a73176893fd961d99a115000000000000000000000000000000001aa30b9aec9cc01a4528441c3420a624142cd420ee2069256a2c281eec1fcd25f22ca11f6220ad26d02c611f3220ed24c82b871ee81d3620ea294c1c1c1c07182128771a2d1a300c99249319001a4594d122e418681c6d9a7c20841cc11b999c08a5d6a60aa8b8a68ea4c0a097a40ba42296a91adf1bb5a01616b11e5e2312a1ae25de20dc2aa522c82c001ecc2cc128522db01f692c8b2a042cb121f527ae2b6829921ddea96730dc25cf20dbb01a342722a8227bb277344123fc224bb3b734d3222b2257b2293563228a2186b22135af214521eeb227353821d32019b24434101f3721bab05633261c7f1daf9baf302719f81c26307b2a3719f41c4b3042292f155d1a842e8c28c18e92987229e7266513ff1a9f2671246517fe20f42305216e172d1fc920d91f5418491e8920032078177d1d0f1f691e4a15561c781d171d5615e41b031dc71c3a15b31bfb1cbf1c0116a71bfa1cbe1c24153b1bc71ca91c6314d21a9f1c661c1314591a691c321cd813241a211cd71b9813b519e91b831bac138919591bf81aa7136b192c1b9e1ad2132819f41a691ac3120619a41af319f4119f18d4195d195b110e183d19ae183111b8173319a6184611b717061979183e114d17ec18401875114317ea186018de0ffd14cd16641800000000000000001aa30b9aec9cc01a1aa30b9aec9cc01a4528441c3420a624142cd420ee2069256a2c281eec1fcd25f22ca11f6220ad26d02c611f3220ed24c82b871ee81d3620ea294c1c1c1c07182128771a2d1a300c99249319001a4594d122e418681c6d9a7c20841cc11b999c08a5d6a60aa8b8a68ea4c0a097a40ba42296a91adf1bb5a01616b11e5e2312a1ae25de20dc2aa522c82c001ecc2cc128522db01f692c8b2a042cb121f527ae2b6829921ddea96730dc25cf20dbb01a342722a8227bb277344123fc224bb3b734d3222b2257b2293563228a2186b22135af214521eeb227353821d32019b24434101f3721bab05633261c7f1daf9baf302719f81c26307b2a3719f41c4b3042292f155d1a842e8c28c18e92987229e7266513ff1a9f2671246517fe20f42305216e172d1fc920d91f5418491e8920032078177d1d0f1f691e4a15561c781d171d5615e41b031dc71c3a15b31bfb1cbf1c0116a71bfa1cbe1c24153b1bc71ca91c6314d21a9f1c661c1314591a691c321cd813241a211cd71b9813b519e91b831bac138919591bf81aa7136b192c1b9e1ad2132819f41a691ac3120619a41af319f4119f18d4195d195b110e183d19ae183111b8173319a6184611b717061979183e114d17ec18401875114317ea186018de0ffd14cd166418de0ffd14cd166418aa916380168b7205aa916380168b72053228911def1fc7249c2baa1e7c1e6b259f2cbb1b971c7125d62cf991e897fa25182d4596bf98c525ce2d181cb11ad021ca2e291e2d1e5610b42d361c6b1e70991a2e3d19b41bc99c852c658c82920e9e689d1aa05ba13da19ca0a2a637a93aa61fa403a6a9a836a49d9fc69f22a2f19e4fa03e983e9b3e9b6e9e909556280324f62c29995a2c8629032db89f772b2a2cff2870a1afa3092c6c22709d5d255d258018c01adc29a0282f151c1cac283829b81a6d1c5228e628021b451d49275329d619991c3b285b29b2179d1a542651286e8e1293b1268f28819cfca1d82aaf283a9f90a4642e9326b29ce0a0ae2f642a648ed19a0e2f6429f08c7a98df2ec928ba90069d302afb253e8d1b9a1a21af21e712b9188a1c721f6715751cea1c5a1eff15b11c861d531e6516ee1cd41d5c1e3016901cdc1ddc1dc6151f1c751d511df015091c4f1d4f1d35161a1c441d661d0015531be31c041d4a14dc1a811c9f1cd6137e1a3d1c5a1ce213371a181c181c82130b1ab41bea1bec12a9195e1b911bb2125419e61a181b7f120d19b41ae41a5c12d2182c1a591af0119718fa19fa194d115d188919b2190c110818521952190711d5172f190819161159170319dd184b10461655187918a00e1e155f171f16a00e1e155f171f160f91778d5891ef080f91778d5891ef085824cc1b401d9e253529851d231d0127142c441b0e1c0227392dcd195c1a1027972d221b421b7226e12d4a1bb41a9724082e711b951a5521772e371d391d7a1f522d251cd81aa718822d53875b97b09b572c8f9fe2a1fba05aa049a121a552a042a139a08aa4319cd42d8a1d031e071d202f1e215024b622ad323c20f92a2b270b2f929b9e2b9a29572ddf9e032d602b0328989e992d082ad098e29c8232c4287c9c419c00345828ae984f901134822be69029150434002ae407c4170d34c32ada103f165a34f62a478798128934032c6095399c9b348e2c099bf6a19c348e2d069e39a39434432daa95269e3b30e729e790fa9b0d305c2a23941f9d9a2e5829968ef59b5c292426bc8bb698971a36222f1146104598c1209414a019df164b2097158c1c7f1ce71fe0156b1cf31c5f1f0e151d1cd61c6c1ed614051ce31c361e0315051c051d561ecf14b21bde1c1b1e1c14171b8e1c8a1dd213691a231c071d1a13c619781b901c97127619e61a1b1c0b120d197e1abb1bbd11ac18281a231bb7118b18ce19c21aa0114d18a419901a26111e184119251a1a11c017f818d019d2107c17c6189419a110ec168e182c19951015178018f518cd10ca167618ea188210cb16a518f318a40e90148516a618a40e90148516a61800000000a9829d8000000000a9829d809c1a8e18531bf522a524df1b821a9f26d029211b021cd626722cd7194a1ab426892d911aa11ae1263f2e151b8c1a67268a2e1f1cb11cc625ee2e301d611d8825222f161c031c3a253d2f72168114c924cd2e3398bf9caf24042ed69a799fd524cd2d4e8ad2966c250e2f901c7b1de625fd2f651da6224f273f307a191e26f328542f0c9843296e2a992cd49a8f2c3e2a4625e29b0f2e752a2a09be16cb2ee529b00f511e312fae299c138b1d9a2fa8299a13731e2e30d92935151e1e27305a29dd148f1d403039295115831d65309529b515fa1c633054299112451bae30a129f90e5517b730c529d5887991a730342a8391699b74302e2a5e90289b952e3e29f48f7f9b0f28e525808dbd99b9947e22de0b4a8d239c4f2190128618bb88a8201e144a1afc17532093145c1b801b0d207414921b0c1cf41e97140a1b0b1c331e5614a61af11bc01d98131c1a691b4e1ded12d0194a1b051d2213c819331bf51cb9127619ef1ac71c0212f618701a6f1c9811b018dd19321c7f1187188e19bb1b39113e184d19611b2c1114183a19001bd310aa17e718911a7e103d179818271a3d10e7165f18dc191e107d164a18951926107b16281876191f10d515f51712194f0f57151b17ea180b0f7e14e01584180b0f7e14e015841800000000a880ec8000000000a880ec80e68b8a16e118f423e71cca17be18ea2631251918931745272e2add18231a7127032df0152c1433286e2ed1124714f827c02e39162f1149270e2f0615470b3927572f8310b4911227832f7c906398a426992f4998e59cc426e92f6f99129f4927da2f5d99c99f4927ba2f2b91ae99f8276430609a999f01284a307d9d839e5b28982e6c9e0f2256293c2a0ea00c2a9c2a601e379c512d202bb3a05e98202e292b819fb310a62ef92a3e9bc919672fcd2afc984c1b48308b2a1891391c7630392a9084b51cc1306e2a1b903a1bff30912a3e8b1019eb30762a8e8a3a15fd30a62a2c9095081931cc2a4191ff94fe30902a5a910899dc30a62ade881895072f54294a829894e726ab25528a5e98fb9d88221c0aaa86829d6c21171100187195c3208811ac18461149206d13061a8118f11f7313501aa519381f5513f3191c1a631e8913fc19841a401e0513b6197c1a121eec129119691ab41d4e123a193a1a4a1d9911dd18291a001d5d11ac18ce19b61c6d11ac18c6197c1c391171187919401c14113a183419dd1bd01006181a19651baa108d17c018e21a8210d0163d18671a2f101d16e717f819530fac155717a119eb0e4c15b0167719d50ef014b8167e19e50dd314e8162319bc0c7e1222150e19bc0c7e1222150e19000000004b80a082000000004b80a0826c9646143e18c1222b98da19a51c5b27951bd188000abc27cc25d0910f0a8827322b3b89628abb27d12d90891811e827a52e138aa5942728302fe693a69a4028b22f2c998e9d1128f72fba9afe9e93270430db9ae99fb4271830eb9c23a113285330629ea7a237286330259f5da34b287930de9e91a355282b30c09f38a44428b72de79c4d9d6f2861274c9f0025fc29619c64a0db2b3e2bfca1729a2c2edb2bd09d750acf2fbe2b659ce8122e30992b9e9b2f136730962b27997f1495305d2bdc957f170331922b8b9356176c316f2bf092c3156931832b699250129531a32b2e92c488ad31922b449174959731a32b0a8e5f9451316e2b4b89398f862e8229c88ae19057240525408a2292a29dec21b00a5710ba9c57215d0f6418e39527218011c318e20ea82056124c19981522207013831a0a1905207913801a131a891fb112df19bd19d41e3812bd19df19501e8e112b19ff19c01dd511f518dc197b1da011ac189119111d2b1167182619af1ce9102b18d018611cac10da17b618141c5a1058176b18a61b1810e7162118251b690f88161e189c1adc0e3616db174e1a8e0ec21542171b1a900e63151217f3191b0e4c159d16ad19480ef61464167e19920ddc14101781191f0c6511a1136b191f0c6511a1136b190000000000000000000000000000000059971d0e82149c22579c3d95fb945627549d6294258abb27460f179858991628e9247698df9758287b2b18988b946628192e6f937a964028982f989599987028f52f9399689e8f284130569ca29f0c287030859deba040287230f09e56a24f28a730a79fbca21f28a4303fa0c2a4a328ba30e09fc6a30028d12f9a9f10a4be27e62b2b9d65a2a1272120909d8a0f012967a12c9dba28032a43a18c9bbf2dda2bc9a0b499ca2f222c9ca08e929330d62be19ca909ee30eb2bd09987092931152c1b99491092313a2c95972610f331472cb19601100232282c309526092e321f2c7694dd0841321f2c699372883632252c9992df0eaf31f12bea8fe7915e2d3c2937906f950f1d8a242c8b4194f09f6922a0822207e09dc821f806c10c539ae5204e0be813f3967a20e30f2f17f7872b20c41094181915fe1fe510d2182c177e1f9f10b0180818021fdb10771869189e1e8f1078188518471e761040189918f21d2310f8175318971df70f391758181d1d730fd816bb17dd1cff0e7d1654179d1cad0e3816fb16461c8f0e9b15a216101c2e0e3c155616c01b8e0df214c0150a1b080d42140f15311ad50cf313c314ab19870cc613b81472199e0c4a13b21443199c0ca0135b15f3183c0b0312871499183c0b031287149918000000005980ce80000000005980ce80e496e40b01072b23ac9ce9913b93a327739e8b9403941628869e9894c48a342850947b99a99828285525a399da9a5e28d52b8b96c79a4328522e1999289d82281d30d69a989ea6286530449c539ff228a930279e3ca1e628f730b79e11a26928d830419f3ba37728f2304b9f3ba37f28b530ba9f09a43a28632e4f9f7ea43828b327bb9f70a4fc27319d249fcba1fc27aea1159d3c1cc32860a1f59ba72be22aa3a05d95f92f5b2c389da998b630632cc09d2c9737318e2c459c45909531742c7a9a9c09f2318d2cb4997a0943329c2c259820096432af2c35961a09af32b82c6e94580fbe32ec2c9f9265088832a92c839058141232862c288e1b147c2c1729e192f6900d9c6424e5915194ea9f7722288d9c0dfd9d42228802f611c29a8e212e0c151590972a21fa0d68170c887e20830f5e1839142a205f100f19fb163f20b9101e192b1801205a10c4184a18751f571055185718e31ef90fc0171e18d91dee0e1f17df164e1d530ea416fe16d31cf80dd9158a16a41cf20d95151f16391c0d0d4315c315f31bd80cfa146e15461b850c6214b314d91a4d0c251476144f1a620b67134f14171a2b0ba812a013e6193d0a0f128613d219960a83114613a2195b09d91077128819d705440cec0e1d19d705440cec0e1d1900000000e1800e8200000000e1800e82fe976e8fc592cd23f09c6898f49a2f270a9d7397d8982728729f47961d984128aa9e1199979681282398b5991a9b7828ef23dd96aa9c8328972a3597979d6728982e659c46a09028cc2f359d92a06728ba30489e87a1922822316f9d08a16c280a31eb9d65a11e28d230089e56a36128b32f4e9fc2a21028ab2a40a0baa33828ba183ba093a49227b2a036a03ca6b0274ba1309d0aa3042801a22a9d94244c29baa18b984e2e392c16a01e9817310e2dce9d47997e31fb2c799c76981932282d0d9c359583323a2d509b1693cb32512d279b1689fe32462d2698880f5c335c2d439561127f33812dcb91f2116d33642d19900f144b32d22c2b927091dd290d2832941e91159da0235f8ba707739e5b22ac02e414d09bdd2182028314df997d210007f31445980e216b09f215ca94b920720b6a16138e7e20920cc8169e0d2820ff0ced16d013eb1f780d1c1785147f1f310da616e914e41ec20c1b1618155d1e700c2415b514bb1d600bd2145214411db40a7414f913da1c6c0a321461135e1c1b0ae813e812161cec09d9127c12ac1b6d097112ec12061bfc0806126a12831ac708261117122e1a790769101611ad193a074f10f0105a198607860fd21039196808630e330f2819d503240a2c0cfe18d503240a2c0cfe180000000055811a830000000055811a83089842915794a723b59c4f99459bb327759eba993a9b2c28b89f1699469c4d28bd9f339ac39b5d2837a20c9c549c3e28ec9e0099a29aa028a8200491339bf32895290c98e19ddd28002d609d5aa1b3281e2fff9e17a2a4280930059f77a3c2280030d29e2aa389289e2e749ef1a28328ff2a439fcda24528a31fdd9e35a40528c19f639e3aa4f02731a19ea051a528274aa20f9e23a54a274fa09b9d22a05c271fa05c99a928302a3b9f8f963830ed2c0e9d4e99ef31a52d709d4896a832ae2d819bdb920433f02d249cb8924733042e1d9a9c89a533192e6b9a0f89c933242e30980492d533ee2d5b99ae88c333f12d73970a09bc31f52c7a921d89e624e526e490b815f59b3a2369882214209bda214288bf160399c32156885d16d5965c21d682cb16039417218e828f168091e220600243164d8ea8203d02cb15e0875e205106e615660dfc1f04067b15f70c8d1f71080f15b40f071f1508ba14f510751e72077414a610e51d180746149911851da60652134211301d8e06f912fd10c81c68069312b610841c40062f127010211cd0050c112210b21b35059c108b0f051bcd046f0f3e10451ace02140ea60e011acf02f50c060dd419f580a10bd80c7419ea003606210897196402930a5b0c35196402930a5b0c351900000000ca00d88100000000ca00d88181973a8f9c924223e69c9898689a9427169ecf980c9a0e283e9fbe99989c5a28b79f809b349d712827a0ea9b8e9d9e2841a1869b539c9d28c1a0859c389ec42830988e992e9e99289423079b299f7a28f828bd9dcba0af285a2a0f9fffa1ba28192ad49e40a26528d2260f9fbda11828f31812a03ba33e282f9f8b9f2ba33c28bca0659e7aa4da2753a1529d25a47c274ba1a19c0da492277ca22e9edca15626b8a0a19c4f9b3a273ea01f99542b272b1ba0299638310b2ef49e6597ed329e2e939b93975433902e199c4296db33ca2e6a9b63921534d02e2f9a998f4434272fde9977924634012f3498bf883f34da2ec3953a150c31b12cd894f1974795d1242e94c5073b9d1223b491240ec49cf62227913b8d6c9dd5210a905b10a79b13227a8a9b14fc979b214187f614ee940021db86a6143193b0201a825314bf8d5f20e9818f14ed860e20c701481471068c1fa201fb13940c281f930194134b0c871e80012713be0e261e7b01d5119b0ba01d6a017b11230b471d64816f10bb0afb1c5181e60e450a821c4381900eee09431c5983230eb303fa1b03818d0c81038f1be280050a4403d61adc805509e002d619da801a09b80258199b8217069e02fc18d780f901a4023319bf008008c807c219bf008008c807c21900000000e583308300000000e58330836a98d29422994623f39c4d9aa89c68276d9e289bf69cb027329f9d9b5e9d1b28d29f049c379d472851a04f9c119e7528baa07a9cec9d8a28c1a0549c009f702864a0029c9c9f6e2819a0399cf89db9286a9ce29c97a07c281998719d1da163281295079d989f53284c9d0b9f69a16d282da095a030a34a2872a108a063a4fb278ea190a073a4eb27afa1909eefa38f271aa1b29d7ca3fe2646a1fe9c02a387264da1589ca8a1fb25c99d119cf20d0b28949c259aae2dc32c519c0398a932102ff39aae93fe335f2f229b67904434c92f589b31106e34e82f7b99c214a634f02f2c974a18b634e02fab95d118b334a92f5695e314e02d492b83997b0e719e0e24f59514111f9ded2224905e14399cb422168e01141f9ae221508ebc1435999821ca8ca814ce977a217f8c39153d955121f689e214cc93152183892a153791a02003891e14b8904e208b8883133290a71f1f88d8128d8cbc1eb48752112f8c301e1b891210888ecc1d0489040e358e5b1db6880c0c2590f61c8e88a10bce8faa1c8f894408358f2f1c6e890208b68eca1b33898902358e341bc9886102bb8da71a61884302b58b431a32882a82558bf6192e8828822a8bd2197e898e86f98a7e19c0865086d382bd194584ec81a182da184584ec81a182da180000000040813f820000000040813f82ce97dc94de98b922539d639ce39def27b89edb9c1d9e3128589fa19c759e4228929f169c359e562819a0419c839e6f282fa0009cb79d6228c9a06d9bcf9d5328baa0cd9af19d4b2849a1659ac19e5b28a4a1b09c94a0162894a1b69e3ea1bd2712a1fb9d1aa14927eba0499ef1a14427dca0f29c70a2772795a19d9d1ea3ea26eea0af9e83a3e626e2a0ca9ec1a3992679a0da9d6da3692678a0199df6a2592663a0f69c3ba3fb25a29d9d9c5ca2e325d69e199dcc172528579d789b1530cb2dc99e299beb333e30629abe996f345b30829b2f90933472301a995409c7347d30079c8a8916358630f498b7145c34e32f4c9b37919f288228f2947d14ef999d233f929a13689b8123a894d914ab9a5c23119829142698fb2141939c141698e52137927a14b5978f2189901415ff943521e58eb1145393e720168d4a14b1927c20ca8cdd1242923220878d2310a093f11f0d8e790d4d94541f7e8d170ae193e51e108dca0367934f1e948da3831e94c71d4a8d3389ce937a1d008d1f8c5693271d668db68be393aa1c388d108d6593601ce18ca88ccd92d21b018c568c7191391ba08b208c2491d31a6c8bfc8b2990561a2a8bbc8b0d90fb194c8bca8ca78fa819f288e88a5b8f44196c8c868a8887a1186c8c868a8887a118000000003f81bf81000000003f81bf81499851954e993523669d289c759dab27f79dd89b669dbf27779e939bd09d1128329f759bcb9d5128a19f049c519e9428e99f319c9d9e98282ea04a9cc39e7f2867a0d69bc69d8128c0a0189bcb9d6028d3a00d9bad9f232852a1059d88a1032863a1839d79a2eb27d8a0939d8fa2bf278ca0569d42a24d2751a0a69d9fa2412753a04e9ed8a2e8266fa0e49ea0a3b92664a0979ee9a33d260da0849e10a40f26f49f519e2ea4e82504a0049d2aa472253b9f729b4fa27925e39cc89abe2283286b9cd598a431352fb89b21958034b030759a6113e234da305c9d74153c35e230a698d8126b35ef30f69a6d182932c72e8b9aad135c1d0a25d094f3138c9e3c244092b718039487232b9622153c93992257912a18ee9253224490e717bb922422c48f83162d92a3213e8f5a1515945321c58fcd12d9940d21eb8ec3105a9489204b8f580ede942620a48ec7046595c71ff88e6c84d4957a1f708f2f8a1e96ee1e288fca8cab95411ee98f4d8e4f95dc1df38ee08df094741d808f1a8fa094f71c918f0990cc949d1cfb8ea68f8f94611ccb8d4990ca940c1c5e8d21909b94c81bfe8c8f908b94ad1bd98c55903d94f71aec8c9b907793f4196d8dea90ef9288195f8c4190c6915819aa8c28900191ec18aa8c28900191ec1800000000c10c998600000000c10c9986c799a898b298fd226d9dee9c8b9e5627499e949cd69d4b27969ee39b6f9d9927b19e129b689d0828959f029b829d392818a0739b5b9d3d283ba0a59b829d2a286ba0f69a119d1a287fa0d29bb39d1b284ba0e29b7b9f0e2845a02d9bb5a007282ba06b9ceda0ab274da0cd9c70a1532739a0929deca1182756a0e89d2fa2f1263aa0529d1fa2992637a04e9d70a25f2608a0389da0a20426759fea9ca9a2ae25c99e5f9c68a25625949e139cd3a25725709f759c93a23825239c629800a0ea240f9d7398c0249528429be097c331792faa99e48ff334ec30ed9797126d351a312f983918c934de307d94cd178d2c4d2b7198bb163099a822a595da169c9a4a238a97dd18829aea23fe92ab16ac930023df8f45182d938d22d68f5d18d58ff421559009182b8f74214990d016b7913821d590b3143893d5201491591341946f200991520ecf9530202891ae043996c81f3491848a8796341f449192907997ad1e3b911a921c982b1e6191709326989c1df790ab932598371da890f193c097bf1cb6901894bb976d1ca190c49346970c1c5a903d934696761b878f4892da95f61adb8e77921095791a6a8e1692c394e819dd8dd59193948119718e2e925b943d19b88dc7913a9417190d8d70914b948d170d8d70914b948d1700000000460c218400000000460c2184689a579aec9b8023cf9d309db99e7026439e949d7a9f11275c9e4b9d1c9f5d27459eca9be19dad27c99e9799189c1f28809f6f98d59b46288d9fe095199b44288f9f239106991528609f579420990528b69fc898e79c002842a0599bc99fb72754a06f9cfba077272fa0329d42a12d2721a0d69dc2a1ce2630a0209eeea1692634a0699e65a20e2642a0519ed6a2d6252da07d9edba28025c79fb29e00a34725ea9e319e25a31425169ec69d81a30625cf9dca9c8da31a259d9d9d9bb4a2de24aaa0309b77a1f023529dba9b8f1bc9260899dd154a2f852dc79bd8089632c92fe6964489a02e652d67976d880d19fb242996c8075f9bb4214190111ae38a90229a8d3b1ca713d6211893861ad709bf21788fe41a0f13e9211390d61934099c2179907e186e8fa621d59017151b952d219c914b0fa497a6209c91108c79984b2036927490249932203e925b914099df1f4e922b934c995c1f369293939d99ca1e2592d394ce990e1e129245959e99651d0192a5956599ea1cbb914095fa98861cbb913995a198191cf19110956998ce1b0192e5943498701bea91b5940e982c1be391d1945b97dc1a4c919294e2963a1af7901494a196d419e19034945996671908901194029668195f90339480951b195f90339480951b190000190c6d0f95000000190c6d0f95007f9c6c9d329fc324769dd19eb8a01f26959e019fc8a0a726a99edd9d01a0ef26089f219d009fb027069f689a9d9c2828069e868a47953128569db7178f152228169dd1180118f1277a9d4411a78c7e27a79e5e94689a342710a0c098149edf2645a00e9c6ca0a22653a07a9e7ba1652650a0849f7da2482639a0c59fa9a20d262ea08d9fcba2cc251aa0009fb0a2922510a07d9e91a25725b39ff49d72a2fe24f69e119dfda196244b9e3d9cd5a13924129e989b7aa1d023d59d399afca08923729e879cc7a15d23249ee19cc4a32124a09a13983c9dda23b29c4498be143424d1980996e98b4424c398db93ea9a5e21ab97251c4b91d821cc92a91c14143221588ca81d5b19aa214291f61d681bc021628e781d2b1b22221b8cbf1c771949227b8b211c53181322db8ca71a8f16972109908a17930e462156935c0c9a96e420a1944894c19a7c2075943396c49b0b204694ab96719b281f64941197789b841e4f94e7972d9bfb1d6e94cd97969a571d3f94bd976d9adb1c0e94b4970c9a701c96934597f399111c2993d4968f999a1b229251962d99dd1a5f91f995ac98761a3091cb958998461ae990ab952e98d919cf9091951d98c219f3907d95e2978619d28ff394b6961219338ef4923995f818338ef4923995f8180000c315951762870000c31595176287419c7a9d679fa424309ef0a047a23d26d49e6da01fa2ca26c59e1ca0bca1e826029fe49ee3a05427869deb98219c0a28589cd618e3174228ea9be01dcf1d1728c49b451fbc1fe2260c9d471dbe1d1f26e79dcf19e215aa25579ef78a00985b25989e7b99459d5725f79e7b9d6fa07125469f5c9e80a16f25879f919f8ba25f25eb9f17a038a35325b39f08a01ca31f254b9fe19f3ea3ed24d09ead9f22a3bc24a79e1e9f3ea38b24989e429eeca25f249f9e879d5ba22f249a9e2f9d57a21024809e189d4ea268238f9d789cb2a1d022459c5d9c68a11222579d4d99559dd620349a0d92c398172197990d0f0d9c5f206296ef18c29502203390071d8519da1f3409871eec1c9920650c9c1e441d9521360c6c1efc1c7a22c7088e1d521cdb221d8df71a031643223c92841409948c214994e585d4980521a8945d93409a93200f95f095389b6e206495d797f09b0520a295a5986f9c721f11963099c09ca71e43962299aa9cef1d06963599789c5a1d0b96ea982b9cfe1ca1959898789b9f1c3b9558980b9b3d1c95944298cb9af21bfe931098749a8c1b1193ce97f499001b6b9211977099a01adf91ca96ff98201a86913a969498a8198a91f2955c986319e0904495d2971419c890c694b996eb17c890c694b996eb1700003b151218af0400003b151218af047d9d369fcda09524b19e4ca1d1a258253a9f46a1efa2e125af9fdaa0a7a25926dc9e49a088a12227d19d7099749c2128a69b5b1dd31ea3280d97e12216242128c3944323942403267d99ff2034227124129df71bc01ad323ca9e08985f9c2724549f039e03a18924789f1ba072a2dd247b9faea065a30825ab9ff3a0caa30f25679f04a137a41e25a09f27a14aa42f25f39f06a139a419252ca0b8a00ca40525939f8ba0c5a3d824ef9e44a099a38724b79e2aa0b6a36224389ef89f82a32e24e69d5f9f9ea3d623229d6e9edea21523119cfa9c2fa1cb21469ada9a28a0c42051991f98519e8a1f2798e88ed39c151e9e956f198e943c1d2b04941f7a1df41df7126d21b520ff1ede11b821a321eb209012a5218721a8220c10452038205c239b88e91c741cd8227b9250170e0f642272956e9187999821599623986d9cb62056965c99eb9c10200696ac99fb9c281f9895e999e99c931e8395aa99b29cee1d899566997a9c541d389529991f9cc71cff94a998c19b7e1ca1949798559b211c39945498019bac1bfe933198cd9a3c1b21930398939afd1ac8929197359a681a24920a979c99fa19c091849638996419b1916d96e3983819869158969d98ef18309112969e981f197190b7955c985c187190b7955c985c1800004f0c5e10728400004f0c5e1072842d9d52a09ca15e245da016a2a0a36c25799e58a10ea3c724e49e90a1c1a36e252c9fc7a132a425268c9e95a1b2a35527599c350b0f93d128ab16f92683284f29a71ce028362a64243c075c2443258f198f9c6e941b9d1b1df79e3a9fbaa1312283a081a08aa31b244aa085a126a41e2510a04fa28ea4642505a05da2bca47825ec9f79a2cba48325a29f48a2c8a46625539fe8a1a4a426253f9fbca18aa4f024099f6fa169a49b24009f6ba168a46824fc9efda027a42724ba9e7ca0fca39e23ab9e76a089a3d022579e3ca098a37e226e9db59ff8a27b21539c299e19a20820079c079de7a13a1dad9a9c997fa0701953959019548b7f11ba13282151217318de184024a9240d1cc6191125b225ec20b219542475240e24ba13892085205b24c9941e192c1718235a960995f99aee212897ed9aa79ee6204998f29bdd9e0c205f98e69ba59e641f1198dd9b9d9ef71e6897659b5b9e5b1e7496da9ae69dbe1d2396799a729d2a1d9a954a9a1e9dda1c9895f299a99c891c89956e99339c151c14954299d59b9d1bc994c798529beb1a40947e98b29a821acd932798369a081adb92ad97ce99ce194d924a9761996119c991ca9631990819c991b3960099b21828916096d0988218b390b3951b989816b390b3951b989816be151b1ca31d5d90be151b1ca31d5d90099c379e40a08822959e35a17da26e241b9f6ba1e1a26824399f69a173a37d24089f47a182a38524c4a0fda151a40e2507a08aa2b3a41f256fa1dea698a7d328a81ee628272aaa27f2a0eba49ca63c25919ed4a24fa592257aa00fa358a52b2663a011a385a5b32546a005a32da543255ca013a309a5342551a005a30da5372537a0e8a207a531252da0c8a222a522250ca093a2f3a4f324b09f23a2caa4b624629fc0a19da47424089f68a164a41624879e3aa140a4bf23139eeda034a45e23a89ddaa038a4d222b49dd9a03fa46322a09d95a018a45521a49d52a0e4a34920ef9def9fbca23a1ebc9c1a9e69a1f71937994998a79e08941a0ffb1f111f989f9b1d85260528dd9e9a1fa0287d29831f781cd9260e28f0253404de1fe71ef524569bf494939a7023879a709cd19eae21199ad19cb59f8e201d99b29cf99f2e204598769cc79f981ff497349cf89e511e0098ba9b699eac1d6d97579bd89d4b1d5797009b819ddb1cff96b19a479d891c8696499ae79c321cdc95d599b29ccf1b55958b99539cfc1a0e953e99019c461aa994cd98629bee196b94a398e89aae193e946398529a7a19fb934b98369a381970931598f79926192c930198d5992c1967927a97d599b71845918795fb97331745918795fb973317000070121f161b04000070121f161b040a9c239e20a083218b9ebfa149a31824ad9ec2a176a31124ad9eb1a1a3a3dd23c49ed5a19ea34b232d9f60a12ba3ba212a9c2b9de69fc81d53856c07e3079618bb8352826690261eac9df7a0c8a27a23c1a018a494a5f3249da096a33ca51425bca0a3a34fa5fd24d3a093a355a5ee247fa01ba342a5dd2473a0f5a22fa5cb2433a097a204a5a12410a087a20aa58224d19f70a208a55c24829f19a2eca444245e9ffaa1baa40424179fc2a196a4a923c59e85a167a43623619e61a151a4af22139e1ba126a42e22c09deda015a4d621a39dd4a0f5a33521bc9daea0d6a30d21a59e04a1b3a3f620f09ea8a0d5a37820459ec59fe5a2f31f0a9a4fa068a387203c1444209b2001a39b24c22c542d731eef0b4b212121cc282698a49e87a12d22c799639dcaa00c202d99389d60a0cb1e4b99559d60a0801e4c99359d1ba0e91ddd98e29ca09f721dc398a99c509f161d4598749cdf9ee01c1798349ca69e951c6197e89b239e311ca096319ba99da91b4b96aa9a249de51a1496279ab39c6e1a9995b199489ccd196b953c99f39b81192195eb98789b4a19d594ca98109b1e19ba94a098a19a0819589487984e9ae718f2933398249ac718e0934698d999aa18a892df97b1998218749146969798961774914696979896170000f80c211402070000f80c211402075b9cf89edda0e1214d9dd2a069a2d122b89d27a1d0a2b622ef9d18a1d4a2a022049eb0a03fa2c821ff9ce39eb6a00120059ad39b8e9db11e8798219c7d9d9320f09c94a0ffa195238a9f09a3d0a4d0242ea066a306a5e12423a032a3eca4a12406a038a307a5a924d19f31a30da59c24bf9ff9a20da58924839fd6a2e6a45224469f9ca2d2a41e24109f47a2afa4ba23299f42a2bea43223e69e41a2b1a4a022879e1aa2c1a45c22839ef7a1b7a40b227b9ee3a185a4ac21d99e79a126a42a215b9f1da107a4e620e49eeda0d8a37d208c9ecba0c1a35520169ea3a084a31920609d65a039a3931fc39c2ea011a36d1fb09c4fa0eca2f81eff9d59a0fba2d41eb299159d2aa0ff1ccc070e11f610cc12eb01758c1895da0c5096eb9bff9ef9175f99b89da7a04f1c9799159e95a0e51cb899cc9d8ea0041d2d9a7e9d48a0dd1c199a2d9dec9fa61c2899aa9cfc9e501c0e98339c4a9e061c8297d29bee9d811bfb96529b819d3b1b9196dc9a0a9db01a2896859ad09c841ae6951d9a859c3e1a8795c7995e9cda195c959799279c821911955499e99b5c19fc940799879b3519b194b598129b01195a948e98a89aac181a944e98379a5018d9932b98e1992e180e93d19770991018e6912e965698b716e6912e965698b716000033103e145501000033103e145501229ca99f1ea16021cd9d82a1f7a2f7224d9de2a05da22c22469d58a0eca178219e9c339fc2a077204e9b879d729fa01eee9a549e27a04920859c94a013a2c122ec9deea11fa44f24089fa4a2baa4a8243a9f9da2d5a48d244b9f98a2d1a45324609f94a2d6a436243d9fa4a2d4a42224279f75a2baa40924139f58a2c1a4bc23cd9e35a2b3a44523a09e08a299a4a022949eb6a16ca4cc21bc9e5fa134a40c21cc9e2aa1f5a38e20bb9e1ba1dba354201c9ebea099a31520999d86a04fa3c41ffe9c5aa007a3911fae9c46a0dda27f1f789c24a0c2a2921f5a9c09a090a2771f519c01a076a2581f499cf29f6aa24b1f179caa9f67a2461fe19bbb9fb1a2801fd19a359f05a24b1ffb97e39c669fe81d83947099539c3a1cf7949c99119daa1a3c98f49bbc9e7d18a598829ca19ff2183098689c879f001af497879c6d9f541a1098649c2f9fc81a1498479ceb9e341b1d98469cc19e611bfa97119c869e3f1b7197be9b129efc1ade96469bb29dab1a6396c49a4f9d231a01966d9aff9ce219ab95169aba9c7e197f95c699839c581981958399519c0a193b954099059c0e19c694f298909bdb187d94b2981b9b821833947a988e9a40181d944998419ad61795932f98129a5617b192ee9612995316b192ee96129953160000000000000000000033103e145501229ca99f1ea16021cd9d82a1f7a2f7224d9de2a05da22c22469d58a0eca178219e9c339fc2a077204e9b879d729fa01eee9a549e27a04920859c94a013a2c122ec9deea11fa44f24089fa4a2baa4a8243a9f9da2d5a48d244b9f98a2d1a45324609f94a2d6a436243d9fa4a2d4a42224279f75a2baa40924139f58a2c1a4bc23cd9e35a2b3a44523a09e08a299a4a022949eb6a16ca4cc21bc9e5fa134a40c21cc9e2aa1f5a38e20bb9e1ba1dba354201c9ebea099a31520999d86a04fa3c41ffe9c5aa007a3911fae9c46a0dda27f1f789c24a0c2a2921f5a9c09a090a2771f519c01a076a2581f499cf29f6aa24b1f179caa9f67a2461fe19bbb9fb1a2801fd19a359f05a24b1ffb97e39c669fe81d83947099539c3a1cf7949c99119daa1a3c98f49bbc9e7d18a598829ca19ff2183098689c879f001af497879c6d9f541a1098649c2f9fc81a1498479ceb9e341b1d98469cc19e611bfa97119c869e3f1b7197be9b129efc1ade96469bb29dab1a6396c49a4f9d231a01966d9aff9ce219ab95169aba9c7e197f95c699839c581981958399519c0a193b954099059c0e19c694f298909bdb187d94b2981b9b821833947a988e9a40181d944998419ad61795932f98129a5617b192ee96129953160000000000000000000000000000000092a3f999189dea1741282a1cf31f3e241a2ca3203221a525bf2c6a1f9e20d426042df11fb3203227172bdd1f4120ee24b926051e9e1e16200324511c761bd98e8f227f1b9415299194212f1d2b1941975f2000008612f1914222c71c071d9a9ee9ab58a1a7a246a521b55a9de09c2820e6b20d143f230029d1aa5a2177294c28c3a42a1c3b2ce829242d3c9a3c2ab528002bb2a7df268528b1292ca84324bca00f2ae811c72e58ac21248f1fee3188aa3c1ba1203c3250a76a1ab820623220a6ac190821a2320ca6c418e5200832c9a5a818d420b2314ea9f416e91f723111aca790a49c2a30c9acaea454ab0a2912ac3ea4aaabce2ae624f590f3991230de282d911398162ded262e10d517d8294e248918fc1f23268521ad17201f7721fc1f2918801e9220151f5518971ea5209e1f6a17b41d8a1f801ee315941c2e1e541d5615111c5b1db91c1115d11b261d8b1cbb15de1b341d971c6415821bf71c7d1cb114131bb51c3d1c4514b71a7a1c061ce313451a4a1c7f1bb513eb191b1c2c1bce139019a71bdc1aab137e197f1b851ab3132f19051b151afd120f19a51ac21919128918b21912193a1106182d199c181411cf173d1986183a11c017521997185e11ac17341959187d11771711198318bd0fe414d4160918000000000000000092a3f999189dea1792a3f999189dea1741282a1cf31f3e241a2ca3203221a525bf2c6a1f9e20d426042df11fb3203227172bdd1f4120ee24b926051e9e1e16200324511c761bd98e8f227f1b9415299194212f1d2b1941975f2000008612f1914222c71c071d9a9ee9ab58a1a7a246a521b55a9de09c2820e6b20d143f230029d1aa5a2177294c28c3a42a1c3b2ce829242d3c9a3c2ab528002bb2a7df268528b1292ca84324bca00f2ae811c72e58ac21248f1fee3188aa3c1ba1203c3250a76a1ab820623220a6ac190821a2320ca6c418e5200832c9a5a818d420b2314ea9f416e91f723111aca790a49c2a30c9acaea454ab0a2912ac3ea4aaabce2ae624f590f3991230de282d911398162ded262e10d517d8294e248918fc1f23268521ad17201f7721fc1f2918801e9220151f5518971ea5209e1f6a17b41d8a1f801ee315941c2e1e541d5615111c5b1db91c1115d11b261d8b1cbb15de1b341d971c6415821bf71c7d1cb114131bb51c3d1c4514b71a7a1c061ce313451a4a1c7f1bb513eb191b1c2c1bce139019a71bdc1aab137e197f1b851ab3132f19051b151afd120f19a51ac21919128918b21912193a1106182d199c181411cf173d1986183a11c017521997185e11ac17341959187d11771711198318bd0fe414d4160918bd0fe414d4160918bf9c000041984e02bf9c000041984e02c026a41a371d0025152c111f331f9126b82cdc12ad182c27cc2cc19765991126bf2d3518201b9b25c82cf51a301d0a209f2aab160116ae98c7910d141b10d694989a9f838887239b209ddd885292139a1ea1509c26a04da1aaa77ea54ea70ca4e296b3a451a6ac25ad2b34a4e9a4092af62864a0e81aff28892974a1cd24702aa12e23a57d29462bc92cefa6a9291a294a2a16a50728341c0625cd9e952e40b1ca17ce190e2fc7af31153b1d1e2fc9ae9418911d6f2f4fadf018fd1c3b2f2aada413fb1b00301daebf11cb18f52e68adf08e5c98ac30f2ad6599dda16c2e21b0949e46a82b2bf2b1d4a039a8ad2d0022e69b77a5c22d6029b39916a3f22c052890947a9e3528ca23b70e890dc220fa1f69155f1c5f1e191fd615db1cde1d201ef6150d1dfa1dc61d7516031d001ea41daa15a51cff1d811d66152c1c7e1d0e1d9e15fc1b2c1de61c3f16331c571d101da215a71b1a1dd61ca914f61a9f1c621c2614941a4a1c2c1cd813361a201ccf1bda13121abf1b891b2113ad196a1b021bde125a19f71ac41aab121d19c21a601a4a12e418741a171a1912a7181a1ac2195311621893196b1932111518641914192411f1173819c318f01067172119d51801104e164a184a18e10efb141f176f15e10efb141f176f15c1986896d299410bc1986896d299410b47221a14cd19ea25bc29c21d9e1d79274b2c4b18f419c927572d0d196b19c427d82d4c1b941ad226802dad1b541b5724d12c941a0119501a152c79180718cb98a92108840a0ccb9c091d668d0f97379a722cb7195617021f8f2d541e121b6123092ea81c1c1fc1267231e021e3233d2762348d9e4ca16627e935ea9fd4219929512e84a2aa26f6290a2d3fa3dc293229ea2830a25b2b8124901bf59e242e22afae9c649a863032b0a7986f1514304fae10946d19d6309aae5692be19513151ae82860019223149ae4404601804317bafed83c209d13058afc595209d1430d6af219996a21a2fa8b0619b32a3932d8f9f7796d5a0992efb265e977aa0fa2c1326c9918d9c35278d23a1023f94fb14db206a129c158f9544203e15bf1b7819e21f4e16fc1c221d621f08169c1c461dee1e4a153b1c121d5d1efb14231c071d0d1efa14131c3e1d141efc14e01b261df11d7014541bb01c431d3414a21a441cca1c69131c1abe1b5d1cb4128c19221b051c1b122119aa1a4d1bc811bf18191ab21ac6119f18eb19801a94116418c619271a4e1133189419c419301115180f196719eb10ac17d9182c1993101a17b01801198610f5167818c8188e1090166f18bf187810db16a618a618e80efd14f0169918e80efd14f0169918da8c6090db8bbf01da8c6090db8bbf011517e9100315981d68255f198c189926a42a09172a19e627cc2c01196919a627d92dfd1a3f1a3d27902e991b0f1bcd267c2e171d6f1cb326222ea51d201e4926292ee91d601d89252c2edb1c011d7f25c72e811cdc195c26332f811deb1d82272c301e207520c328a3308a1e311f1f295f307094168e7829d72f40a1869c172ac02ee9a13822232a302db3a0d8297229de25799f102c20296b99b89c1a2a5128559c7f10eb2ac52679994b17442c83268f96a41a2a2d3c2681944c19a22d8e254a925017a32db8250190d613ff2d4626ad9169900a2e932544947d9a232e39269996bf9d972e58269b972c9f622f762741983da07f2f0a27e895f89ec82c1c268493fe9c8f2418239d8d9199259be220000d27073a9a4e209d12fe18270fe41f8b14c91a8a189c1f2715301ced1b8b1fe114291c4d1cba1ec614641b1b1cc01d5014ce1a1a1c9c1de713901ab61b101d1c132d1a701bb31c1e130b1a4e1b9e1c5f1295191e1b7f1c3f122b19b71a3e1cde11de18481af11ba2119f18e219701b4b1175189919131b431120184519771ae910d0170119241a9b107317ba18cd1952102117831889194510b01668183c19511097163d183c1975103e163f18e3181a10cc150b18d518e70ef0140b17ee18e70ef0140b17ee18c585828917850481c5858289178504819d832a14aa15761fe91dfa15601885267b26b416cc16fa275b2b4518831821287e2df91771169328cc2eb41694166f28eb2e0c18b6142728382f6d15d9110d28712f0814d88b8a27bf2f740a21977227fe2f1b94a09a532730301898c89c0b283b301898519e2c283e30189d39a1ba282b30bca1f6a5cc280d302da2afa5ac28152fb2a2979ea028bd2b0da27e22a229e11fc49d852acf298aa16e9de42cec29c99f029b0c2ca6293a9ebe94af2cc228179d9989b32e5e2831990f136f2f2328ea97931328305b284b95258a293034283d9591964830282800963a9972305428e595029bbc306528cc95389caa30b328dd94429d8c3084280c940c9c5e2d2827a691f99a1220f2232a91679a83a14721d107fc068a9eda20bd11f618369758200d124319de130120ed13b61a4c19701f5513751ae019a41e5d13171a4d1a031e5c131b1a4b1ad81d0213e119b61ac31dfc12bd199f1a691d67129b196c1a001d01123719581ab91cd2110619f819711ca311d318ef193b1c601190189a19fc1b2c1152185719621b171122180719f41a9c10bb17e5187e1a7a1015175e180a1aca0f5f161d18af19460fd8153d177919150f9515d4163e19880ef814cc163919270f2015fd1589180a0e1b13b0149d180a0e1b13b0149d1800007680fd80fd8000007680fd80fd806894810b3a867f1f3b986d15e61b1927341eb29265947a28a4278092fe902228632c8c8951916728842ec689ba919f28112f7b8a9898b1287c2f4694019aad28c72fae983e9d73282c304a9aa19e14283030b69cd8a0a6284430939ed2a14b284a3058a026a4b22863307aa16da52d297430a4a169a5b228963040a253a66e285c2f46a09aa30e28742ab9a00e1711292092c6a0ac28ab2932a45c9ef82c6b2ab9a01d9dfc2d0e2af39fc998c32eac292d9e67909c2f93296d9cb6972130ff289d9ab3969330292906999799f0304d29cd98139a083127298a989d9a443100299897c49a61313229ef96269c82319e2943945b9a0f316c293992f297102dd82780929696551f2c234290f4965aa0f52023883987719eb120ec0d62161899ac20ab110119d2084b20a412e019d115ce1f6d13a81a4219621f6c13641af619451fd8121a1a251aad1e6b12b4193e1af61df6116019e8197b1dc9111219fa19221d9411cc18b619e71c7011871894198f1c2a11471831193e1cec101018db18f01b761094178c18341b451033174418c31abf0f151740186c1a070f6116bc17201a990ed9157c17ef19280e6915e6169219220e5315d0168019460efa14851644198f0dd314ce163b19160c50126b14f318160c50126b14f31800000000000000000000000000000000a88e2403c603031aa79cd49870989d27f49cb699af974c28c21c4c99049979280828e2986199cc28f42ce6968c99c328322fc59382998a281630da95e19994284830da98f19da32881304c9c1ea082287630d29d68a1d428c1308a9f99a29028d23040a19ca4bb28be3079a1afa6ad29f330cfa0fda46b28e1309ba0eaa41828ec2eec9e30a51a280027f99e85a2a62825a29e9e89230d29c4a2f49e992b762a57a18f9d822e012ba3a0029b1630832af99d1299b6302e2a719c0c98f430c629a09ba7966e31f429569ab696d931bb2926991b95f03194297a9854961a328229869604973832dd29009687952e32ea29b9941d927831d729ed928598412c6f27f490c298279d6d23be8eaa986fa1a9219a8ac79217a07d215982f08c669ca5206809a61222981020e50e71170b08b41f4910c3184216951f1511f3183218f41eb610ca188f18721eeb10e1188d18191e7b109018a318bf1dcd105318b118941d0a1009186a18401d4e10bc177118cd1c7f0f5617ed17951c130f90167917511cd40e52162017fc1bce0e1c16c116ce1be80dbf1582164b1bc40d1e15fa15b21a920d6d149815dd195f0d191434154a19ca0c4014dc141d19b00cea13d1143b19b60c1114bb15aa18860b8311e0130318860b8311e01303180000000074800f810000000074800f81c2913203b603261abe9cb58fe4938c27be9f14957e9486286b9dd997bf949828301aaf9a7b967c28cc28a399279b7f28c42df499e29db3281630629bae9ec728c0307b9c02a01629ca30979de2a02929d9307c9e7da1fb280d31d69fd5a297280f317ba04ba4a8284b31b8a0c1a4a0284a31eaa004a65b29f430aca0a5a60f296d2d86a09ea5de277b21b19ee6a4fa27c1a3099d58a22b2838a3a89cbf279329a3a1139bdd2eab2a659ddd997a30c52a509e2a9bfb30da2a429d83996e31992ae69b4b951332722a429aa9938b32ab2a6e99e9949032862adb98c992a132c12a76962c92f032e62adb941494b832eb2a3593b68fde31672a20940d8f4e2b3b27af959e94d8a07b23db94a89857a2e9212d91ab87759f7221be826810b39bf0200c0a3215bd978a202c0eb8173f880c200b10e5186e14c01f7410121920177a1fca102a1942184a1f8b103c197018de1e9c10d4188718671e2e105b185a18a91d350fdf174a17261d980ed3165817a11c040e6116d8164f1c5e0db3156116051c1d0d6015fb158a1bf80c1815a115dd1a960cc6144a15731abd0b39149e141e1a860b8a138114f9197e0bd412f2139419860ab912c013a119b10a921169136119820a741198124b198c094d0fe910d4188c094d0fe910d41800001500498002820000150049800282eb94208ca58e1a196d9d3899ac9b0527dd9dc59663988a2801a0e2986c9b8b28869e779c759aa028331ca19ce29db328fd28049ba6a00929062e299a459f6c2869300a9c4f9fa328dc30479da59fa3287931ad9e88a2ac28a231fe9f2ea41429c83121a020a4a728cc3165a038a46c28a131e2a0cca45a283b30a7a0b6a5bb288b2911a0caa4b727979d1ea054a7db27f4a233a0c7a5ac27b0a45c9d03169328b0a4c49cb22ccd2ae4a0c79aa630172c3d9ec09c7a31092c289eeb9b1c32132cb39cd9999932c32be49c0999f332dd2b469bd5943f33e92bd9981d908a33f02b3d965209cd33242c8d920f12e033382c6491680ffc313a2bab9244958f288326f294ea95af9fa222be901b8e5aa0f921ce823514a09ca421b282c214679a2221060a1416b098c420c50be41630958a20660b27174b8e21208b0c9317c70d941f070dc31701143c1f900d4c177215051f490dcb16cd157a1ed90c37163815001e7f0caf15d614671d620c55157714fc1cdb0a8f1423149f1c8e0a4f145c144c1c270a0f141114c71b000ab613a1134b1b7f0936131b13cb1a0c09ab128012051af50734112e12ba198607eb101b1131193a074910ec10d618dc05810fd010bb1860077e0e48100619ad05f10b160c7418ad05f10b160c7418e1825800f6819484e1825800f6819484a394618d9090b5196f9da099d29b9127159faf993e9bae284fa0be983a9b8c28aca0e699339a7f2852a1bb9c4c9da328711a0094f19d0f2958295b91559c1729652e6a96669ddd288c30c69c6fa168288831479fd4a29d28e93113a025a3cd280b32c59f1aa38a28e331f89fd5a410291e3134a1e2a4c0283a2d70a103a53b289c1c01a131a5e9275ba145a1e3a63027b3a483a053a6f726e5a0659eafa3bf2616a0319b5b225f295e9f9e9a542f072c989e7a9acb31a72cbd9f809aa4324f2ca09d099aee32262cf39c92986133412cb09bec94e133622c029c009010342e2cb09872922134562cba981f920f344f2c3894358fb1317c2b3c92918f05235125aa92360e58a02022df8a8f12129c0c21e8820617a19841219688a7163a970321778833165d958b20b682af16b1917b207a824b164a88392049028c160908f11f36060b169a0d951fe608af1558100f1f6d08cc150310841eaa0961152611fa1d70078f142e12941d0f075b14bd11061db60670136111db1c9d061c1342127b1c5f06b612dd10411c33065b12a010d71bce05ea115610591b4005c710dd0fa91af502bc0f2f0fe3190101460edf0ea219ff00060d2c0da2190381ac0be60c5619fd804109040b8619c900a9088b0c9f18c900a9088b0c9f180000f1014c0457830000f1014c045783ba92a903018a201a229d4d98059a93273c9fe199789b6b2809a0f69aed9c8c2889a01b9cb59cbc28dda05e9c189fe52878a0eb9cba9dcf28fb99ab9d5fa0d428db26869b3da0ef28fc2c999c29a0b2284e30dd9c24a1de284031649e34a41b298831209f22a4be28de3090a0bea4b328bd2d4ba14ca497285c2451a096a3fd26b1a047a01ea51a28d4a2759f5ca58827f6a2e79ecda42a27a8a211a0bfa45926d0a1aa9d629f2027d99f959cc5291d2a12a0a496f330fe2cce9f279ae832d92c549dd69a6a33a12c3d9de199e733b12cf29b39973a34ca2cb19cd1954934d42ccb9ce3956d34e12c4799f08f82344e2de494720fd8304f2b9e943398379a2a248b921a88ad9e90229092e88df19d0a223592918d339e9421648e9f10759c9e21a68aac15449855217687d2152095a0200d875f153e91432024821215f38d0720ec81b9143987901fcf01ff14040dff1e0005a414b30c901e9a016614540f231e84015313e40ec51d7b01dc12840e4b1d700177126d0b071d64015a11010bbf1c518149108c0a4b1c43810d10250a081c1e81350ed4038a1bfa80cf0d9203081beb802c0c4a037a1ae380780be7028819e0803209c7024c19a5822906ae02f018d300d505de07d51832025208440c7e1832025208440c7e185f84c080e38305835f84c080e383058340959491b992a219aa9d449b659d7127a99efa9b9e9d3e28819f1a9cec9d4b2821a0649c399e8328eaa0109d289fac2879a1439d539eb6285fa1019db9a0c2282f9fdb9c49a12a29f61c189ddaa0f828aa293b9d04a1c0289e2cba9d36a32929312dff9d5fa19028722b5c9fd4a14c288b237e9f36a31628599ebaa074a4aa270ba441a170a60828e5a40ca0eba514289da32a9ff3a42527e3a11f9e7fa47b2649a2f49c75a32926b69fa49bb79c0528459d3e98382d862baf9cfb988e32432d829c74981634a52d539c59977e34b62dfd9b7a90ad34f42d739b5313cb34a32d5d982c17fa34d02d11965c180935f32dc197ba8f7b2e502add993e8e0ca104235d96ca0ea69e53221890ae14639d9122638e6714129bad21a78e1115b7994c21d48c8315b496cd20978c13164d95a4202d8ac51503948320f5865e157f9153203189ed140f911d20a08882148490571f45880d13cc8c7f1eca8772125d8ce91d3d871911d18e5e1df788f20f808e1f1da788d60d5f90eb1c9288e70b2890871c60896f0bd28f1f1c8c8a2d083b8f9e1b498abb07868ee11ae08831073d8c771a83884302dd8bcd19648830027c8b861982883082568b6919058aa686288b46195d872102d68268194184e381a002d8184184e381a002d818d6805a006700a083d6805a006700a083b39435902692a319699d379cad9d7e27649fe69c9f9e6c28b49ff09cfb9e6c2822a0d29cd29e94286ea09c9c1a9fa328aca0359c479e9b28d8a1659c209e5d28cfa00f9ddaa078287da0fd9d45a09928ada09c9cb59f5128009c369f92a32e28390b77a09da3d227349c02a2b3a411280aa06ea17aa4b527f7a075a0a9a41a27d2a123a047a56d2780a2689ff7a4e4267aa1189f89a43526fea0ff9ec1a40926bea02c9fe2a4e725b39e289ea9a3c825a19f269dab9b90278c9f2f9a0d30cd2cc69d0a9be333962ec19bfc9a9334602e699d6495ca34742edd9993921a35a82eb699f4093035ea2ec2982213da34e72ed69a0298822a69281d984a082e9a7d2210959311239c682294943311b79c74223696f210889ba6214892e1142b999a215e91b814e1961521cd8f26161694bf20f78dad15cf938920498d931434915c20c38c3413c2920b206d8c83114592ba1ff78ced0f80940f1f458d340d1594671eea8cce09a793011eaf8cae0320936d1d808c828305942d1d008d03899393e21cd88cd38b16946d1c548d4e8ba393231c168dc38c0d93671b268c598a9991ff1ae38b2e8c7890651a8c8b098c3d90121a758ace8b1890ad19988bdb8cce8f68194e890a8b1e8e0419ba8a9c88548a0918ba8a9c88548a0918c2820f006800a883c2820f006800a8839694f18fd4912619869d839c899d6f27769e439cd89d1628bf9e0b9c309e1928bb9f6e9c519e842825a0c29ce29ec8285aa07b9c919ec02884a0f49cea9fba28cca0389cb29e9f285ea1fd9a8c9d7e288fa03d9c3ea05a28afa001a044a344288ba1f0a00ba40128d6a0f4a0bea4e82705a157a06aa44e2787a15ea057a423275aa1a99f6ea3ec260ca161a097a4c72683a14da029a57726eaa0e89ffda4252696a0659f18a5cf251fa0989e94a4182599a0ed9ca7a21725cc9fc09a3c216d283d9cd0992b32652e2d9c19989734492f1c9c518a2a35902fd89c3c095d35722fa19944137535a72f2c9c19167834012f739afb907b21ef24db94651689a14024f9934d182e9cb4220b94b8158b9dc42245915418d2976c21ab911518bc9429211b90c7165a92d8209a8f6b160b92c220cd8e201598918c200f8ede131f914a20618ee7117d92c31fc58d240eb694641f248f8d043295e51ecc8e568a89955f1e5b8fea8c2295e71d0790978c7195861d1f8ff98d1495271dc48f3e8fc294b01c2f8fbc8e6b945a1c618fd28fb194231ca08e5f8f7694a21bb28d278f4994551b2d8d14903b943c1be58c6590cd93771aef8c08908493a319938d649004934319d28b6d8fce910919a08d398e4b90b518a08d398e4b90b518c100080cf70c6c02c100080cf70c6c024a983796dc95a61d8a9dd19cd99e3027ab9ebc9c759e0928b09e569c089e1a28479f569c1d9e5f2832a0449ca49e8c286ba06c9cbf9d6a2890a00f9c5b9e522803a18e9c519d3b2852a1049df69e1228f4a04c9deba0f0275ba1e29da5a3162847a1839fbca3cf27b5a180a0d0a35227cea1db9f90a33527f6a1f09f0ba4222705a1de9e07a4d026e5a0239f29a47e26baa0129f19a41d2655a0529e2ea4e125739f4a9de9a34c25509f7b9da4a3fc2458a0979d7aa2b524e69ba0991ea0fc24da9efb9c5f289a29189c689bb533fb2f1a9aba09f0341f30d29977134a353830e298da10b6355730369a7f191533a62e7b9a51189c9d57240496c211a29dc8229e93ff18dc9c4b235d93c717019720225e9062183a93b121be8e7b18dd8f2921828f9b185d8ffd20438fed17328fe0202490ac158a9180206f9086148b9419208090df112796b21fa090430bb6955c1fd2907984d496ba1efa90508fc0972f1e71914a92d097b11d9191af924298491d4291fc92e397e51c43914193f597761cd99086935f97211cc89021937597941b7290a8926a96f71a1d906092fb95b41a0e8f99922f950c1a8a8e3892dd947e19758ef291aa944519e48e429272940619dd8df7916194c9184a8df491d89457174a8df491d8945717a9033e0a2c0af105a9033e0a2c0af10592980197fa98ea1c1b9e709e10a07926ad9ec79d1ea0de274e9e609d4f9fcf27ab9ed29bf89d1728669f5699819c572800a0c2983c9c572819a031968b9b3e2832a047967a9a2828fe9ff898769c0d2863a0a29bd69ef42704a1959c38a0a327fea0dc9c26a25d27e3a0de9e02a31527c9a0ea9fd2a3c126e9a02da05ba47f26f6a078a095a4222641a170a0bfa4042612a162a0a7a4c325c9a043a08ca47f253aa0ea9f69a43325ea9f6a9fbfa424251f9f619fd3a43e25ba9f739e67a3be246da0069ea5a26824809cde9c472a742a329cf913b8343b30339f2013033679305b99a016373535304b99028fd22c252be29a2696429cfb21949667887e9c9121f68eec1bc70ad221dd946d1a138a3921158fa11b8a106421818d151b9e092f21888e171a5a8944217f906b183e921221a890451433969420bc90ba0552984220de91f78bed98db1f0092539079998d1f1a924d921f99111f1d92d5928599901e56928f94cb99e11d41920a95fc99421d16927295bf99ca1cd7915d953599571cf4915395c798b71b34922b958a98551b5692ff944c98f01a3192c8942698b21a1392dd94f997711a479197941c97dd19fb9022945c9791197190369417972d1913900e93dc953c19718f049443964218718f0494439642180000f810441529020000f81044152902c09c369e4fa05e25549e1da0afa1fc26dc9e559f2ba13f27249f4e9e90a04527d29f8f9ce89eeb27dd9eb795d1992228d29d0b167a0c06286b9dea18cd15e727d49d6711b88c9827ad9e4596b39b54275d9fe198359e062755a0289c22a1ad2699a0419e37a2942608a14da03da3752644a199a014a44a267ea1b3a023a4092639a1c0a033a4cd253aa16ca02ea4a425f3a00ca028a45825b2a0919ff5a306252ca0a69e83a3c724569fcb9d67a37424fe9ea29d5ba30d24779e9d9c06a3c323b09eb29cf3a2ae2376a1379c53a30924219cb697462cc72a1f9f7c0a1f348c2fd8a102175c31972efe9ec99b2b974a25e49cfd133c9d9421f495491a4a960e21b58db91c3a911e21648e321d611912217d8eb61dda1a8b217e8c4d1df419dc211a8c7d1c8319cb214e8d9d1bda186c21718fa0195116f4203191ae153c8892203a94d98e219937201a949c94b49bd01f3c94d5955b9bdc1e6594d596139b421e41944197cc9ab81d4f949697d29a141d489476974f9ab21c1a9469972d9a451cab935497c999c11b4b93e496aa99491b4692729617999a1acc912296c998361a7491f3957098031a7d91c8954098931915915a9528987219ec90779595973419ae90fa94ec960f19dc8d9d93b6967118dc8d9d93b69671180000ab12ab15cc090000ab12ab15cc09229db89fe6a03925a29e21a1f0a2b726789f3ca085a227273a9fe89faea12d274a9ee69cbf9faf27019d6914928c4028329c151d5a1d3528e49ba01dbc1e4c278c9c931cbf1c6826249e8416e68c0d26009f8594bc9bba25ad9f5f9b909ea32514a0779e1fa1be258da0f8a071a3062605a12ba15fa4f025d3a02da134a4b525afa0afa0c3a37b2573a040a0bba3562540a01ea096a300252ea0a79fc3a3d624cc9fad9fe3a3ac24ae9f2a9f0ca48924b79fab9ea3a36824ba9f499e50a33d2411a04e9e6ea30e24699db69d5ca3d3232f9b6f9cd6a13f22ea904398e0999c23c795e395311a6324349ad298649cb320a099dd8e099d4520a2966818d195db1ef8904f1db918841f9f035b1e141cf01f200ed41e341de420d90da41e081dbd21a808211d051bd121d38c1f1a64125b212993e412f995d2206d94218c05993e20ad942294ff99e11ff29442965d9b781f7a95f997099cfd1eba959f98929c2f1e06961a99a69c771df2952699809cf51cd69516996c9cb61c6b95e098339c7a1c0f959d98a19b331c82947398359bb21be7933098809a301bfe92a797f199cd1a5a923a979599651acd91aa962799ee1971911396b398a019319108967e983219c9904d959a97fc1810911695bc96441810911695bc96441800009d123517b58000009d123517b580349e79a047a2a8240e9fd1a1b5a317262c9f2ca1ffa21d26d19faaa057a2c326319e299d989f8927669dd519571a8128679a692287233e287897722371244126479938216b22f2241b9e4d182e168f245aa0b89c5b9f7c246da081a062a2d32444a065a1c3a3fd248aa0d9a15aa4552561a0e0a179a4b32594a089a16fa49525d4a0bda176a4bd25c7a0c5a1b1a4e925a9a05da18da4c42572a0cfa04ba478258da031a09da30625ba9f12a0daa3ec246e9fbe9fcda3ac247b9fce9f3ea4b12412a0909fc4a372241f9fba9f04a43e24269d419e02a3cd22139be39c2aa195211c9af59b7ba07b208899869898a0a01ef0992895cb9e0a1d4796fd199591e31c440d4520d31e691dd8139e21da20dd1e0114f721b721c9208d124a2161214222a10f991fbc1f51221e880d1cbb1a032258938e14b2917a216896eb93359ac82077962d98669c062002961599a79c201fbd95a099ec9c4d1ec895a599b89cae1d799565998a9c491d53953399589c9f1ce994dd98dd9b511cbb949698999b0a1c5a947798439b431b2d945098449b0b1b82932198109ba11a1293db978f9a251a45925b97579aef192b92d196c5990919ab9199960d99e218a4916c96b898e31835910e963e998f187d90ae954098dd177d90ae954098dd1700000000f3106e8900000000f3106e89939afd9d2fa0dc21e89f64a251a44a25e69efaa1f1a314257a9fe3a126a4ad25079fa8a118a4a226709ec99eada0602897124f25d2265c29c41d2229762abb25608d1424f824461d2d9ee59c0ca07f1fde9ff2a076a37623a6a097a11fa407254ca14da2cfa47925d4a09aa2eea4b1258aa008a311a5b52539a0c1a220a5c22511a077a2eca4c42508a0f7a1b3a4c22546a0dda185a4b1254aa09ba17ca48a2595a069a155a4452500a0e7a046a41825949fc9a095a4ff24909f0da1a3a4d6248c9f0fa18ea443240d9ffba096a4aa23309eeca046a4dc22049df29f76a39221839ca29ee7a2c11fa69cff9deaa27a1cbd9bbc9b5aa1751921951118278b7814761410218021661831194124d024111c371ae22416259920ef18ef2311245c23990c1020f41fa523bf919e1721095422839533960d9e2d210598a89a689e12208f98fe9b7a9e0e1f1598a69bbe9e8e1e66978a9bb39e581ed096299b6a9ebf1d4096bc9abc9d231df4957e9a409d921ce595139ac29c411cc995b7994b9ce21b47956599019c211b0595f0987f9bad1a6a949b98d29a0d1a129444984e9ac2191893d897e7998e19829272977b99fb180392f1965699ae18eb91e396339967182a91809617999b1806910d964c98011806910d964c980118d911141a711cbb97d911141a711cbb975a9ad19d589f2021a19e98a1d9a26724ca9fb7a182a39824ca9feaa115a4c924739fe9a1c7a36d24a29ec6a153a4942428a2bda77ea86928c697a623d422f827e0a0a1a4dea6c9277d9ec3a23ba54f259da181a3dea55c26cca0d5a3a6a5d52595a0ada372a58825d9a0a4a37da59425c1a073a369a58025e2a070a335a57925bca013a3e3a4512557a09ea20da5652554a07fa2eaa4722535a045a2a5a42a2521a0c8a1a5a4e62452a035a1bba48f2433a08ba1caa43424ad9e0da1dca4aa23ff9d27a1a6a40823fd9d2da17aa47022f29d20a181a4bc21a99deaa049a4d920889da5a0b4a32e20de9c2fa0f1a2ff1d969b1e9f09a2671b6999ae9a169eb610a61475201d20929d291d182709282c9e911f9f28af294021131c9c251b2674250091db1bc31862247999e699fc9d0e2292995c9c349f76202099a59c26a00c203998a99c38a0a01f0d985f9cac9f681edf97fd9b859e721d91979a9bf19df71c80972c9ba69d961c4597e39a7b9d521cd096859a469d081c13960e9a1d9d941ba195bb998b9cad1a43954d991d9c0c1ac994d0988d9b8019b7948a98159b4a1963946d989c9a3c1926945c985a9aff18d8932f98179ac218b8933c98039ab2182f925c97609ae9174491e995959831174491e9959598311700000000c70c838100000000c70c8381a299b89c679eab1f759e15a264a3d723f59ef2a1d7a30924d39eeba1d0a35d23209fafa181a35d22249d159fe5a0811f618d039112941c1a2d8c27874c8f221ecb9e3ea1fea2b82309a147a4d0a50425e5a0efa36ba540252aa1c8a369a515252aa1d7a374a50c2522a1aca36ca5ee24d5a05da375a5cf24aaa018a34fa5ac247fa0f0a249a5922469a0d5a25ca590242aa07da24ba56e24e99f27a208a51f24f09f17a20ea5e623bb9ff4a1efa44f23389fbba1b0a4c722c49e80a185a467225b9e34a145a4cc211f9e0ca137a45b211c9ef7a025a4e620fa9dbea016a46920149ec0a004a47220149ec9a003a41920169e55a06da3431fd09ca99e95a2351f6c98649f07a3371dd51dd52500274aa68225342deb2d9823da923718e1994427ed944f9dcfa1de20bb98359dbba0d01e94998a9d64a0461e3e993e9d25a0c31de598f39cf89f4a1dd698bb9c769fe61c4798879c339f971c17985a9cd19e4d1c6f970a9c549ee61b94965f9bda9d381b6296df9a499d6d1a1c963c9ac79cef199b95bd99749c7619479576992a9c3719eb941e99019c04199994e5986a9bdc188294cb980a9be31837949798a09ab618e6935c983c9a8b18d09348980e9a69181893bc9781992f189091529696980d179091529696980d1700004b11a1157c0300004b11a1157c03f89ce49f58a12f22b59d4ca1a5a3a5231d9e86a161a32a23289e23a1d4a28522539d0ba074a1a520049acb9c0a9fed1e2f98439cc49d38209e9c7ca0cfa169234aa007a3c7a4eb2482a0a5a345a5f72475a0aba352a5c92451a09ea354a5b7242ca090a34fa59f2411a08ca355a59024f49f4ca344a56f24a19f0aa32ba53324ad9ffba223a5f223db9fa6a240a5122393a070a2dba42522939ff9a1d3a48f21a29e5da194a4f720809e3ba148a47b20ee9d0ca161a477206d9e08a131a43820d09ef7a02da44220e69ec8a025a41020309fa5a0d2a3e01f689e90a0eda3a91f239e82a0b7a3091f709d4ca055a3df1ecb9c19a0e8a25a1edc9c13a0dea2511ef69cbaa05aa4d91ed698c39c629fc91cf00cdc109d117f0d738c4194d298be0ac498f59c34a00f19f4991b9e9fa00e1cda99eb9d89a0921c909aa89d52a0a11cdb9a529d10a04b1c019af69c3c9f051c6298659c8d9e891bed97fb9b139e3e1b20977b9ba89dca1ab896049b4f9d4a1a5196a79a0d9d191adf95369ab69cce199195d099719c671952959999339c371905954d99f59be118f5940199b49bb818ad94b0981b9b8d1862947998b79a3e1826943798469a0f1810943a98e999d6175e93ce978399f517989138964098871698913896409887160000ef10b3147a010000ef10b3147a01999ce49f03a15c21399ecba170a31a23659deea072a22622f49c21a082a11721959b2b9e01a0641fe19b029e01a00120359c4fa0aba13622c69ddaa107a42624289fd0a2bca4aa24b39ff5a2f6a49924849fd1a2f4a45024789fc1a2eea42624939fd1a2fca42024aa9fd6a20fa51d24799fe8a221a509245f9fdba219a5a123509fa9a2f7a4b0222b9f19a2baa4a621829f71a171a4c320a69f37a12ea46020779f01a1f8a31e20ce9ed6a0c3a3eb1f0b9e8ba0afa3a21f8a9d73a058a34b1fdb9c49a03ea3321f959c2fa005a3121f619c0ca0c8a2ed1e479c06a0a8a2cd1e519ce49f9ea2c31e489cc89f8ea2821e149cae9f7da2711eb29ba79fbba2651e339b899fdea2701e2c9afc9e16a24f1ed096109c689eda1cfd93dc981b9c441b0696739a649d9e192e98999cc19f9a1730986d9cbc9f15190c98769c0fa055192598619c809f051a2c98579c309f6d1a45984a9cfe9e971a3498289c9f9eae1ad297d19b4d9e761a32975b9bd79d361ab196de9a749db41935967c9a1a9d6f19cd951f9acc9c3719a195cc99959ce4186e958999629cc7181b9541992a9ca018b394ee98da9b9d186394cd98619b461825948598b29a0c18da935598699abf1749933198269a29178f920a97e19825168f920a97e198251600000000000000000000ef10b3147a01999ce49f03a15c21399ecba170a31a23659deea072a22622f49c21a082a11721959b2b9e01a0641fe19b029e01a00120359c4fa0aba13622c69ddaa107a42624289fd0a2bca4aa24b39ff5a2f6a49924849fd1a2f4a45024789fc1a2eea42624939fd1a2fca42024aa9fd6a20fa51d24799fe8a221a509245f9fdba219a5a123509fa9a2f7a4b0222b9f19a2baa4a621829f71a171a4c320a69f37a12ea46020779f01a1f8a31e20ce9ed6a0c3a3eb1f0b9e8ba0afa3a21f8a9d73a058a34b1fdb9c49a03ea3321f959c2fa005a3121f619c0ca0c8a2ed1e479c06a0a8a2cd1e519ce49f9ea2c31e489cc89f8ea2821e149cae9f7da2711eb29ba79fbba2651e339b899fdea2701e2c9afc9e16a24f1ed096109c689eda1cfd93dc981b9c441b0696739a649d9e192e98999cc19f9a1730986d9cbc9f15190c98769c0fa055192598619c809f051a2c98579c309f6d1a45984a9cfe9e971a3498289c9f9eae1ad297d19b4d9e761a32975b9bd79d361ab196de9a749db41935967c9a1a9d6f19cd951f9acc9c3719a195cc99959ce4186e958999629cc7181b9541992a9ca018b394ee98da9b9d186394cd98619b461825948598b29a0c18da935598699abf1749933198269a29178f920a97e19825160000000000000000000000000000000008a13998fd9a131a6e28eb1bd31fd024202c532026215426ef2c112029212427e02cee1e84208426602abc1f5420a7249025da1cfc1d92187c24aa1c791bab962725c7154910e18ce4285a216620359b652e2f236d20f41f312f22223d2499275ab43b1dec1b022865b54a14da21a4292a216ea6d4a9202b732f2f9fb82401298d306ea22d267628d42e01a81e279d25ba2d009f692ba694e12b301e8e2e00a60d28c620be30bea9a11f5120d83028a9f71a8120bf303ea97a194e204c31a3a97918db1f543130a92019681f2b3107a94917cd1f433107a98d16821f703137a90116471f893168aac9164b1eec3090aaf18dc19c3930c4a989a4c1ac742676a52aa098a8b1263c21c218c51ff8284a214f18fb1ed623751f4217471ee320b21e7317de1d44203a1ec817cd1d2c206d1e2117901d891ffa1d9f16c61cdd1e711d9815541cd91dbf1ce314db1b5c1d5a1c5215091c5c1d7a1c5d15d21b371d751cff147e1bde1c261c8c14f01ac41ce31b1614691a741c541ba913021a411c001bc513ce19fd1b8a1a94139419cc1b2d1a9d134f19501bf319df120f19c41aaf19c8118218b119c118461118183a195e180011f217541974184e11f3177d1996187111d81768195f186d11c01705194f181110ff1499169917000000000000000008a13998fd9a131a08a13998fd9a131a6e28eb1bd31fd024202c532026215426ef2c112029212427e02cee1e84208426602abc1f5420a7249025da1cfc1d92187c24aa1c791bab962725c7154910e18ce4285a216620359b652e2f236d20f41f312f22223d2499275ab43b1dec1b022865b54a14da21a4292a216ea6d4a9202b732f2f9fb82401298d306ea22d267628d42e01a81e279d25ba2d009f692ba694e12b301e8e2e00a60d28c620be30bea9a11f5120d83028a9f71a8120bf303ea97a194e204c31a3a97918db1f543130a92019681f2b3107a94917cd1f433107a98d16821f703137a90116471f893168aac9164b1eec3090aaf18dc19c3930c4a989a4c1ac742676a52aa098a8b1263c21c218c51ff8284a214f18fb1ed623751f4217471ee320b21e7317de1d44203a1ec817cd1d2c206d1e2117901d891ffa1d9f16c61cdd1e711d9815541cd91dbf1ce314db1b5c1d5a1c5215091c5c1d7a1c5d15d21b371d751cff147e1bde1c261c8c14f01ac41ce31b1614691a741c541ba913021a411c001bc513ce19fd1b8a1a94139419cc1b2d1a9d134f19501bf319df120f19c41aaf19c8118218b119c118461118183a195e180011f217541974184e11f3177d1996187111d81768195f186d11c01705194f181110ff14991699171110ff1499169917229c0000ca985a0e229c0000ca985a0e7e262012941a9c25122cbd1bd71bf526c02c2c8a9d114f27532de71506121727a42c431d331cb026a1913015980e011ddc9a2782c0881a95399e000025813b97d2a206133415859c9716531ecd1eda24e32bac1d1c1e7a27fc29619c509e2228642cbda577a7202afe2fd4a867aa202b282ea6a602a6c82ab12e0da89ca498295b2ef5a8491d9a26222e98a69f282ca04b2cfe9f012deca87026b711f32e64afac19551d232eb8ad0213ad1dbc2e7ead4a168f1d1e2fd9acfc15a91dbd2f64aefe14b31dd92f14ae02178b1c782fc9adfc101e18c52fdeae788f4e974a2fc0afb39a70a3212f69b01b9f5ca7da2d21aceea03da9982b1ba3819d94a6f328361c7d949b9dbf240e1e67138d18731e8f1db916d51c4e1ea91d5717041de21ed81d9916451d711e6b1daf16231d4a1e321db815d61c461e3e1d7415551cc51dd91c4415081c2c1d7c1c8b152f1c261d981c9015e21b2f1da51cd614391bc01c421c3914bc1a5d1ccc1b0f144e1a2f1c7a1bd2131f1a0c1c041b5e13c419951bc11a1c139419191b4d1aec125719e61a1f1a7212f818651ad7191112b6183e1a8a1929116c18b6193719ee101f186619eb181e110d183919c118ee107c172719b11831105616281828188a0f8e140a1617158a0f8e140a1617159497cb98009c3e119497cb98009c3e118b23790e1e15fd26c629001b301a1928972c8816b7180c289d2dfe184a192e280a2e8c1a871b5c27cc2c081b5a1a3f2365281b11b7172491ac2c481c1a1c0d20222dc71be1181621d12e3c1e961f3f266331de212523ca2746340a13cf99b928de3501a2e9a4b628b9328fa546a74929dc2ee4a7c6a80f29192d2ea8b6a7ee28b52d3ea6c8987b280c2e61a4e426fd24332a90a1332ba4a30720d49cd62c3eac4e9df49aca2c62ac089ba710302c99abfc959016cf2d2eac08943218f82de3abb38a4818222e69ac20899f14032eebacee889c89d62d5aac6f95429d7b2d3eacba9b02a3aa2d1aab649c2ba4b82d7da6469b39a4c32d40a1a499a8a2b7293492f993879db020571b0e0eaf87678b3f1ee6128b189f10be1ee6159c1ce01b751e7216301d9a1d5a1e3e16cb1cae1d171e8315801c4e1dde1d0615511c421d9a1dfc14181c391d8e1dff141b1c2a1d7b1db514801bd11c1d1d5b14051b661c891ca013431afa1b3e1cef12be19701bad1b20124319ea1aea1ac811d918571a571aab11aa18131ae01974116518d519a41938113c18761976191611151822192219b510ac17e218e218bb103617991899189510ef168d188d18631085166a1893188210d21677182418300f1215f9163318300f1215f91633180000bd978997b30a0000bd978997b30abb180b942b94cc249126611bd81a0d28022b4a1307186328fa2cd5168d1679280f2e9519f1191628b72ec81bd51aea27762ecc1ce41c9a27682e891de01d0028292fb81e3f1eea276d2f1e1f431f4328c52fbb1c411e082948302b18341897290730dd9ec7a1022ab62a35a446a65c29d42a5ba5b7a8ee28662de2a48da78b28702e80a4c9a21e28e12d9ea21d25bf26aa282ca0a12a4124ad9dc59ecd29231b09a0db979e2a759e8f9c208a0f2ca09eed9a7e108c2cdc9e05994709d82ccb9eeb97e094472d03a127966f98b72d15a10897f69af32dfaa04a95539d4e2e4f9f8a98fb9ef92e4195229985a0492f021e19991fa1282eaa20219805a0742932214c93269d2d1ae31f3c8776971f9cb91ee20e51128998271f6f134d19d811931ea9148a1b9b198b1e80157f1c931ca91e5415941c031d681e2015eb1b811c771dca144d1b861c691d3f14dc1a4e1cf41c9313971ac61b9f1c19130c1a681b671c9d12d419321b461c5c126e19d01a0c1c16122f19761aaf1bcf11bb18061a291b5c118918af198b1a54115a185a19281afe1025181b19e0199710e217da18951957107017b7186d197e1015177a182d198210d2165e180d19961070162c18d4183d102e162418a118c80e54150518ae18c80e54150518ae1800007c90ba8f6f8300007c90ba8f6f83ce8eae132f187f24821ee3161917bd273b276416e0176728052c43189a16b028f22d7c1831170929fb2e76172a15f028192f64172212a128582f3d142e0c8a288f2f351156925328cc2ffd8a0f989b2804305c96869c8f28d52fba9cc0a02429be2f339fb0a31d29f82d34a38ba5ea28002f9ea39aa7e7287c2f70a41ea8562804301ca4eba5f027372d6da2de9faf274322c59e2f28a72689a117a0aa2a862676a1629f7b2bfd2487a0849aa82c1a24219df096942ef922ed9a68952a2f1623959a69987c2fb620eb98219b952fd11eef985d9cef2f9420d598359d5130ce214a98b29d8c300b241e983f9e703067245f96489f812fb7244498519ea4291c23cd94639cf3a09c2021904598cba2de1f020e2d12639e04208a11cc18a6927a1fd512ec197516321fe313e61a0f1afc1e1514b11a951a3e1eb713621a951aaf1d8b133d1ad51a721d2513041add1a5e1d1213e1191c1b0c1d8212b419dc1aa61c1c1252197b1a641cf1111f195c1a211caf11e6180c1ad81b54119918b519681b17115c187419d91a0d1133182a197c1a8910e317dd181c1a601077178b18b419fb0fdc1644188919600ffc1561171019280f94153e17cd18f40e3d15da16c3188c0e21157e172319530d9a13d215a518530d9a13d215a518000027090e0e4684000027090e0e46847a98a80d2b12342448982110d0170b283220fa89f58bc228c6287a90c591b828fa2c468afc94e428002fd09038970f29552f5391049a1829ab2f9d94689a0f29fd2f75966f9cea2833303b9b209feb284430b89dcca166293a3019a050a338295230d1a074a442297530f4a186a52b29583018a353a6ac28a930fea306a83c2839300aa2d0a6f727922c7ba2b7a45528961818a1f2204828a0a4ca9f352b5f2843a2699f742c3c284aa038983d2e8427e29e64951d301127f09c799a5330ec25339c3d9c92307f25f49aef9cd130f024629a809ded30cd249599429d30314e25b198f39c5d31c8258a98589d4b31b7263297f99def2fbf260b97d19cdd28a4249e917799679f2f21528e19976ea15e20fd8a9890c89f4520860ab813fa9b132067103e18648f8b1f5112121afb15ef1e8c13d41a5319b81e3d13821a111aad1e20134b1a731a1d1e8512281a971ab11d4312c519371a3d1dce117a19dd19d51cdc11f518dd19961c6f11b718cf19521c94117f1871192e1c4f1143181a19991bcb10f017ca18201b8d107c177118641a161000176218041a5b0f8c16f017b619dd0ef0159b1778195d0e6d15f9164619350e40157e160019560ee0149516d018e90d86142f16c3187c0caa12621475187c0caa12621475180000928500000000000092850000000046900e0aec8f7f1b1b9dff99fa980b28399c8b993d9ac42858204697bb990c2955298397dc982a29dc2d1694589b1f29ba2f58945c9c0d293b302698769c05296730fb9acb9ed6289830279d7ca0fd28cb30009e0fa15d290031a09e9fa22629f730f6a020a51429fa3024a2d3a69429223153a24ba6e6283431d2a1fca5012885301da1c1a6bc27362b67a1d7a51d28b49edaa0079c1928f0a2e99f5f280329caa2499e742d612922a1789d982fa9289c9f2f9c95302928289e029cf7306e27559d459b5631f426559c199bab316126779af19abc314626bb99c09bd23130269298539be831d8261e98b69acf3102286695b49a31308a27be95709ce8278a2438948d9acda0cd204391c899e7a19d201588e0900ea0e3208802200d449b3d20ee0ceb14db93281feb0f79180e11b21e66119d196517c81ed4118019da18961e4c113e19bf18161eeb10fe180d19b41d7910aa18bb18861d4f106018bf18281d69102218cd18e21c6110df1781186f1c3b107c175118631c0e100a170e181f1c220fce16ce17ae1b060f37165f17411bb30ee3151717f91ada0d92158f16741a050ecb14bd15a519aa0d71143c15fc18eb0c5f144d15e0181f0d4914a1150719bb0c1a14c0158518f60989100713e416f60989100713e4160000ef89cf8547000000ef89cf8547009692b8830d8aaf1a2a9d4396e997db2769a04597fc94d428ec9c5398a398dc280820de9add9be128cd2a629b339ee2281a2f229c4e9f39296d30799c869f3a29d030bb9ccf9f4529f830339e1ea100291b31cd9f7aa21a29493139a0a7a3fa2853319ba0b1a4ea28783138a19aa5e428c531d5a14ea6db28cb3103a22da63228423026a204a7c4271a28c8a078a80a2823a5cca094a5e42686a374a04d1139289ba1a79f292dfd288a9f919d583033298ea0e59c0431a828419f019c9c317d28c29cde990a32c5273b9b209983325727339bc69888322c27979a589996329e2743995398d5323e2899981e9a8832b528e797dc9924300d284494a0979d2513249294859565a25a21fe941999f5a2d1203a91c08d219f87204d887510079c49201e0a8514d196e71f260ed7176d08551f9610ff189b15011f631011194a17ae1eb81028195f188e1ea31045198e18671eca10f218a418f41d5e1081183218611dc30e0b18ba17f41cef0e6e172b17711c600e8f164117221cab0d4216c316b51b780df21549162a1b540d4c15da15ad1a420ce11468152b1ae80b4514b114d0198a0b9c132e147819b20aeb120f145119a90ada1236133919a20a9c11d8122219440b02127b13e6184a0a4c11e71335184a0a4c11e713351800005f005c80cd8100005f005c80cd81e194478c32903e19989d1d9afc9b3227ce9e8398b998f42826a0199a0e9df428979eb69d949de228e7213d9ddb9ed528e32bac9d1da1ee28c52f809d85a0ec28ff301b9dcd9fcd289331909e97a11129ab313b9f20a34229ea3141a051a410290932daa0d3a40e29303214a1e5a482286c3229a1d2a593282632f0a067a6ae28cd2eaca03ea5a627c51d44a090a6ad27f3a387a11ea8a027dea4c8a053a36f274ba4b1a0ca27fc2828a3569e462ff629bca05b9e5b31252a4ba19a9d3132b729c39e899cb1322329af9d439bf3323329999b64993d33db28699a91966a33bc281d981393e033292933954190a433a329e194bb944030d828af92fa97e81f7924e592af96c6a153214f926294fda0ca203d8bb2106f9dc720b582e514c09a8720410a3217619876201a0c5317a5952820e90c8717ae8ea61fb40d3e180011e11e460e54181415941ee50d1118a9156b1e9c0d9417ff15171e310dee166d15851db60cd41505151a1d990b7415a514b91c1a0b2415ed146c1cd50ae11495141c1c7e0a3b144614ac1b420afb13f013e31abd096c135213591a3e08d012a712c6191208d41141123e19c307fc102011b31880075c10531093181306b40f481087180208b60f7510e2188b07420da40d77188b07420da40d7718000073808d00c182000073808d00c1825f94b08fe490ab19cd9d0b9ad19bfd274d9f4199dd9b1429bfa04e98bd9bef28a0a1759a549b8d280da0da9d849ffb28c3235398e59de128dc2c399c25a04129b830b29cae9ee6288a31ef9e94a1f0282c32cba0a6a3512999324ca0cfa32929a93234a098a3af28bb320ba055a4a528c732fba0a9a44828893135a1fba57728392ba6a013a637283ea010a110a73a2731a577a241a7be2689a179a0b8a40c2628a2a09f909ef4272aa0f09d822cd129d89fb19cf630f02a01a0b69c8a32502af29d099c0833b3295a9d109ba4338129b59d7899e0331729b59c97961e3486298d9a84963934eb29aa98a79605345c2a40962798022f4e28b49587991d985022e196fb9547a17c20a191a507829e5f20318d2815b69baf20b08b121533996c209b886b168e951720dd82ce16188f11209202181765888d1feb0652171e08551f3d09dd16d210dd1eef087f165312711e7408fd15dc112d1ea9098a15e112a31d350928155a12341d2c077314e511aa1ce6063c14bc125c1cb70805146512251c9008a0131d12a51b50068512d2105d1be8051312a510181b65059c114b10511a4b03af106e0fad192501880e750d5c191e81400ed50e69191381f80cfe0c15190401b60c560e04192104510cd40d49172104510cd40d49170000dc089b099a810000dc089b099a81b692b98c8e90331ab69d1299449ba427e19fdf9a879c9f28a0a0869bc89cbf28f4a0859c5d9e272930a1db9c1a9f2729309fda9c089eeb2852215c9e60a12f29392d779e8ca23b29aa30539e07a1d52864322b9f6ba20f29ec322ea0a1a3bf282733fd9f19a34428453389a014a432287c32e6a131a55328f42ecda1d6a53028a21da3a0faa53c28c8a1fba0f3a5412723a28fa079a6562726a489a022a6222640a442a0b2a3882604a0659fe9246b285fa1129a422fc52a719f159c6e32c02a0d9f249c7c33fd29299dfe9a2c34cc29659c71995a34c529c19cd4988a34262a3d9c6b96cc34c72a279b56948134832b4f98f1963c2e38287c96e698599ff621d09438887a9e5421a293e787b19ddd205f928b87ee9dc220c58fb210979c0d21b88aea147298e020bc87fd154d9533202d8776155a91a01f7f8623151a8e7f1ff3817e158387ed1ed7012815370da01e170556150d102e1ed5048614930fc61d8d044114230f711d7e010f13d00e061d7301a812cc0bca1c62018811690b671c4e816910fd0a261c3e812a105d04801b2681b20ff803d21afc80b60d9c036d1ae380300d4603d519e080600bfd022219e5805f0bdd02eb18c0824006b902da187302da08ca0776183f02810bde097b173f02810bde097b170000bf80b38161820000bf80b3816182e69428910f93eb19089e1e9cf69de4272f9f4c9cd59e96281ca0809c829e9628a0a0689c499fc12877a12d9dd09f072955a1549c7a9ffa28a8a0dd9d26a10729ec1d2e9effa26b295b2c419e21a32f29fa30f99ec9a21729eb3176a0caa3ee28b932a0a06aa36d285132c9a01fa47c287930d3a046a451281828e0a1e9a4de2789a15ba344a7102885a49ca1cfa82728baa4e39f5fa60d2734a45e9f8fa68f2658a4139fc6a51e2669a1719e5fa4ed26759f129d7b291f29329da69b76319b2bb99c319be933c42b7d9ca999ad34912bf09c1997ec342f2bdd9cc589fa34f42a379927165b35cf2b539720128434eb2b7d98f2993b2b7b27d69880984da33d22af96d79181a0e32101926c1307a01a22b38eb314539c7621218d4f155c99ea20e98ca215f49658208e8a2c1669952220408aa2161494262042874a16a2910420ae86d2154e918f1f0489ae14db902a1f918549141d8d121e1985b912978c721d9e8741114e8c4b1d22891b10ce8ed91cc788060e838ea41cb788190c5690421ca589bb0b1d90091c9c895e08988f761b798a0708d38eb41aff887a072c8e0f1a8f885402048c861986893c02ac8b16199c883c02958b0619058a32825f8be31840855f06d9028b187484bd058c0260187484bd058c0260180000a102950440810000a102950440816c954b9440959f1ab29da09c7d9e7b27fd9f3a9d2c9f9c2830a0f39c089fa82873a0349d569fca281ba1069d9b9fc128e3a1ff9ce79fcb28f2a14f9e2ba1c3281fa04f9e05a1c028c099b49e98a13729f826059b51a0ae280e2d0a9f41a24f28362f739f09a1d827ac2d8fa037a2f5271327cba14da4e627da9e7ba106a51f27e1a396a024a7a227c4a40ea17fa682278fa12fa07da59126cfa05aa0d4a5fa25bea0f79ff8a5d025ea9f809f5ca4462550a0359e23a36c26c4a08c9c242d5b2a409d8f9d6233852ca89c499cc3346a2cb19ceb99e0341c2c8e9c19983135332c439b7090b435072d53994a0f5234ec2c6b983c986c262c26c596c58eb79a3b21f7954888529d6c21c3943708839d9e21f5944311159c58215b9230158598f520f890bc15be958c200890641641945520478ef415dd912e20b48d97159c91fe1fe38b87144e91d21f8c8c2113c2925d1f2d8c5c11b393861e8d8c6b0de392061eec8cfb096e92721dba8cc1034d930f1d7c8c8983f092a71c0a8d5a838b92631ce18cb2883e931c1cd28c658bc992b31b9c8cec8a3f92161b4f8c778ab291751ac98bfc897a90001a878bc48949908e19638a95892c9038195e8b888b109044197589188b4e8ea418ce86cb81148a2417ce86cb81148a241700008901f703528100008901f7035281f294cd928f948919cb9df49cdf9e7b27bf9e859c699e4e28529f769cd59e752836a0da9ce79ecc28afa0289d03a0042904a1d29c8d9fe0284ca1359ed9a0e2283da08b9c70a1c828fda0799d4aa06728af9f829d44a08b280f99bf9e80a31528781b95a019a4d327f19305a122a454279da071a18ca4c826b9a4f1a1a8a52a2713a6d29faea42227c0a2fca09ea50b27cba19fa0a8a596265ba111a061a524260da1d09f8aa5d82548a0ea9fa3a5562521a0eb9f32a53225b3a04d9d978e13268d9c259c5730622c1f9bb79894345f2df59cb2905735422d929b0a8ac235342de1996613e735932d0d9a9c143b34f62c8b97cf974b1df123cc97f411eca07022ea963315fc9de0218f9503155a9e3c22bc93dd171998f020af912f18ee94aa2068900c18bf9278201b90bb16a98f6320368f3f16e2913120418df0146b91b71fa68c9e13e9903e1f268dc4114392d31e7f8ee30d68937b1e258e55842994f41daa8e048d3e95821d4f8f8f8ee694261df08f1a8e3a95d81ce18f5b8fe194601c0b9033901895171c848fed8fcc94b51bc78e798f9294181bb38d2f8f5894bf1a3c8d1d9042949d1af08cab8fdb93e519748cfb8ee8922f19128dbc8f6b92d018c98b828ed2918a189e8e6d8d638a64189e8e6d8d638a6418000050128f149812000050128f149812a89a889a1b9a65246a9ef49d21a01928c49ee29c3e9f3c280f9fd89cc29e69280ea0bb9c339f922898a0fb9c0a9faf28c0a0b19c909e872801a1ae9c9f9e6d284ea1da9de79f5a2866a1c09e6da1372851a1a39ff6a2e22709a37fa0e7a325287ca314a233a455272ba4faa1e0a4be2602a47ba107a5d12679a463a19da54e2746a205a12aa504270ea259a02da5b9263ba147a0e3a43d26cba0db9f05a5eb2540a0129fcba48225a49f7a9e3ea4eb24de9f909edfa39424809d519dc5a34f25ea9f129e4924ec270e9cc796d632be2d579ac09229351d2ebc9b048a9d351f2e329953133036ba2e579be116c833302d689cd293e69e0723a597c28e479fb821f4914e18449c2c22759501177f9566214491781869900e21c98e1b196c89a820638ec91820896820348e8c18828f7520fe8ec916fa914220b38f8f15f394d61f09901a129096321f3090430e1b96ed1e6b909e046c96881e1e91608d4997d81d3a9180905e975a1d6091e5920e98f21c8e91319376978d1c4b9178938797401c3991b7937e979e1b00914c931897361ba590d0928d96a91aea8f849224963f1a188fb7924f95cd198c8e519256953e19718efd911a95d618f58e4d928594c6181b8e039266947b18ff8d75921b95bb15ff8d75921b95bb1500004d0fb511911300004d0fb5119113e79ab99ad89b0624d19e9e9f31a1e727129ff49d30a01928eb9ea29daf9f2f28299f559c129e63280ea0cb99e19c7c2860a00099749c57289ba0fd981a9d2a2874a0049a579e1d2870a05c9d1fa0152826a12e9e23a116284ba1eb9eeda2962785a284a0c2a45227d4a211a15ba51227f2a1a0a0dca4bf2685a17ea04da5a52698a117a165a54826dca12ca16fa5df25d4a127a144a5b42595a1d2a004a570250da170a0d6a41b25d4a079a01ea51e256ba06ba044a52025e49f8a9f10a49824259ee69f45a59a25319e1c9ef428da2925a0219930340b2f0c9d2315e335332fca975b19fd350b2f9d98e908b330bb2b109949960a9f31220d98dd94219fea20a1928a1998972a21a990111a70995521b88d2f1b6c0a1e21238c551bd609d520608ddd1a2c10c820a58ea9195789c220499027175e9499207590661148985a201d91a585e298d71fbe917a8e6399241f619260917099a41e649205926d99201e41924594279aaf1d4992d5945f9a141d26924b95d699a71c5c92b595ac994a1c619292951a99761b7e924095b598e21a8d9208952998691a6592d0943298201a23929c940998b11937915694b4976f19d4902a94969728194e90fd935097f818ff8e99929b95fa18528ea79285968516528ea792859685160000db123517d1030000db123517d1037b9d899fc0a024260a9fb7a03ea25927099f989f3aa16527329f829ecfa0d3278c9f0f9bb29d1a284a9e2d0b0e933928e99d701642131f28369e7b16db0ca927b99e82913598232702a0bd9be59ef82658a0149e82a1c726d4a014a0f1a3d1264aa17da035a4dd26d1a2c9a0e0a49e26f7a280a161a5622632a3c2a131a52f2624a24ea298a5282603a2bca1b6a5b62563a11fa118a5802530a1aca0f0a437259ca000a0a0a4e52410a0d19e87a487242b9f539e8da44824bf9e979d3ba4eb2325a0499dd8a39623d9a0b99c23a49c24fc9ca79cff2e7e2ce19b19944a355f2f0ba01b8a6b34b92ef49b679d56252827469b9f98439fe2213b98aa88d69c8520c192221abe976920628eae1cf7155e20b08c9c1d7d19c0209089c21d2c1a4021558c3b1dc3194921588f461c261910210c90601ae317a020398f2f18a60e5c208291350fab960a20f79286903f9a841fc6938b95579bd11e42941196069b2c1e63941897c59aa41d6b946c97759af61c32944697339a8a1c10942c97129a1d1cb2932197f299771b5793a8968e99bc1ab392439631994d1a2f92f695a798e5190992c5957b98ad19e091da954c98411981916495fa971919a6913e95549718196790d5944197b018bc8c6893c098ca16bc8c6893c098ca1600007113cd15a10f00007113cd15a10f909d24a037a1d025e79eeea0e8a2f62610a06ea08aa236271b9f359f67a16a27a99da697679d2928ed9c6d1a96184d28809c4f1dad1dc427839cc21cf41cd926749dd316220d5626399f3498439df62527a0399da6a01326bfa08f9f2ba219260ea14ea148a43f2655a14ba2fba4612624a249a232a54f264ba165a13ca55a2645a1c2a076a41b2647a18ca061a4dd2524a168a072a4602542a108a08fa46025b7a00fa0bba4242560a0a19f98a4dd2465a0329f7ea49f243aa0249f4ea48f2453a0f89e43a464244a9dd79db7a4b724109cca9efaa5fa25459d07993f2cd12a889e2f97862ceb29e49a7e9a5d9fb621d59ab09860a17620ec98e28e469e931f6d94b8193d94251eb383721d9319a61e4a0eea1ee11cd81fd10fd21e391db320bb0d611ea11c23217b08c91c89191421658f9518908fa6208a93520f7498fd1f7394f491dc99611f9c94a394c79ae31e2d959596939b731e6c9547982e9cda1d92950899a39c231d929541999d9c9d1c5d952799899c631c1895f098539c2f1cf394c198199ced1b79948e98769b351b18944898a29ade1a4b93c197fc996b1a8892549770990e1a0192ca963399981998912d96bb984a194a911d969098ec18cc9058950598b318319130950a971f18319130950a971f18000038140d18580f000038140d18580f8f9e20a1d3a26f2513a02ea2efa35f265f9ff2a07ea25b26159fa59f77a110278f9da0959e9823283c9b3c20cd2095285f9977238124ff26f09a6e21a02249253a9e07153b8dfd24f3a0769f39a126253aa1cba123a48a25f4a090a2bca4c62512a1c3a2fda4be2500a16ba2cda4ec25f5a000a2bfa41a265aa2d0a195a40c260aa298a1c9a45c2689a1fca0c9a467269ba079a083a4222614a02aa044a4b525319f049f4ea45525ce9e6c9e55a45d25939e5d9e8ca41025ec9e079fb9a41d255e9fdb9fb7a4d6241fa0d99fc4a46824499ee59e58a4fa236999799d1da4ff229298a69cbea18021b398b39adea10720c999859a30a14b1d83995896d89e321c4594351c7214aa1a8011da20001f4a1c4b145c212f21ae1e3b1475219521ad203514d420bc20c921880e561e421d8821d48d9e19611416216494350632999520ae95c095c49b0f20e9953098529cef1e1e969199bb9c291e12969c99b19c851de2959199ad9cfc1c80955e99559c7a1c07950c99129c341cd194f398ea9baa1b7d949f98849b0a1b4c9469983b9b8b1a12943f983c9b581a88930f98bf9ae319cb9290979d9a90197492fd960d9ae6180e92c19669998618119284960d998918fd90fa95d8992817c29099952198f616c29099952198f6162f0a990d5b0d78812f0a990d5b0d78818f98e399b19a7f19e2a0ffa2f7a44e25e79f3aa39ca41426689feba1d3a3cf25e29e71a1daa377274599cf20e6221529ac1d40298e2ade277f145a25d3265221379e229dbd9fbb2164a058a228a44924a8a0b0a2a8a47b2589a175a370a5c825c9a15ca387a5f92537a13aa352a5fa25dca03fa374a51c2690a097a24ea5332608a1d8a1d4a45826a5a181a14ea45026bba1b8a013a443260da141a0caa31f2672a1f49e1da22d2628a02d9eaea2fc25e89fe59d06a4c225f59f6f9f25a46e25589f61a064a4ee24b89e2ba1a9a47524609e52a18ea4fb23d09daea01da4ee22589dfb9fdfa377214a9db09ecca3331e0d9d1b9db7a29e1acd9a2b97189f4c179492b51bd317d3174a15b321d42176188d186d24ed24051b79195f24e524c71ff012ad221023d322bc8d4b1d5e1c8e22f294120d829856212397e398db9c34205b98279b1e9eec1e4a989c9b749e451e6297949beb9eff1de196319bbe9e851d8c96fe9a1d9e001d2396729a6f9d721c3a960b9ad59c0f1c2296a8995c9c4a1bc2955399159cd21a449500996a9b291ac094ae98f59ac71945945198709a81196493ea973a9a2419ce925397d299c7185492159783997f184192dc965899321847919c966d996c18f090ac951d984318f090ac951d98431841132b1a731bc38e41132b1a731bc38e7999219de39e301e759e0ca22fa32f24d39fe3a10fa4b024a19f30a23ea4b124479f36a23ea43e24839e02a714a882272b0ca124c925672874a2bba4f8a51128339e5ca305a63a2577a1eca3d9a50b262ca12fa409a60926faa01ba4b7a5a125fda014a4e9a5d12540a11aa4eaa5022628a128a4f8a5f82539a1d1a3b1a5e12503a152a351a519265fa184a211a52c265fa1cca130a4a026f99faaa02da4ce266a9f97a028a4bc264a9f18a195a49c26a8a0bfa0b8a51226209f8aa148a63a251b9ef4a1f8a4ae232c9e3ca198a47122379e75a1d8a4fc21fb9d5ea19ba4dc20789ddba030a40120869dd9a0c9a3911f8c9c28a0d4a2ba1d549b179fa5a17c1c2298a197e19fd18a178fb4219c219e9e8b1d3f27ad282f995c1f1228c228f92253191c23ba21eb2486973c0e499d56233c98bc9b8b9eae209f98909c14a0801f5298c09c43a00e1f45988b9cf49f6c1e0f981c9cb79e421dd797c79b0f9ea31cae974f9b939d3c1c9b97369ba39d0c1c5997ae9a699d841b70964f9a559d271b1e96ea99da9c471a8e956d993c9c9d192795e998b79b3d19ea949998429b0e1993947498c59ad61844945e98879a9d1814942a98629a5718da933798169a411863925497e7994918409114969b983a17409114969b983a1700005f10a510998400005f10a51099844599d69b019d891c6b9e11a26ea319230e9f35a22ca4fd23229f19a213a420237a9ee2a07ba249213394ff961d99cf1c16835a069988b31d8c9d28a1d5a2f72375a16da4eaa53e2504a1f5a399a5572526a10ea4a2a54b2555a1fea390a5242539a1e8a3a6a5262537a1cea387a507251ba1d9a3bda5e6240aa19aa3a5a5be24a9a06aa3a1a55524baa0fba291a5392497a0d5a2a8a5412450a073a288a54d23579fb5a130a5de20459f4ca1bca45e21ec9e52a189a40121b89e6ba19ba48721919e3aa15fa46521839e24a158a4de205c9efaa03da48320009ec1a00ba404200b9e9da0f7a3921fda9d90a0fea3441fb19d8ea0a2a39a1e2f9e96a001a40e1f589c0f9f2ca32d1e7698ad9f91a28f1b91214c29342afda53624932c772d0c28bd972d9bc39e38231e98479d3aa1ef1ec499719d7ea0bc1d43996d9d3ba0661d0c99109d21a0dc1ce498c99ca69f971c9498ae9c549f421c5698689c199ffa1bfb97309ca99e601b2d97c19b419ed11add962b9ba69d471a6396889a019d7819af95f299ad9c05192a959799789ce618a8942c99349cb6185a94f798fa9b92184894bb98499b8b181294aa98cc9a5718d2936c98639a5618dd935598299a2f180293d697b7999217c491ad96a698df16c491ad96a698df1600005b141c17a18000005b141c17a180f69c7aa0a5a25122b19dc0a17ba4c423629ec5a111a44e23359e14a1c3a2dd21ec9b3c9e09a0911e1c983f9c769e2c1f5f9b17a088a1bf22ae9f15a3c8a4da24dca0c7a353a50425f0a0f1a36ca5f324b7a005a49aa5f52474a0faa3aba5ef245ba0eaa3a3a5bf2441a0d3a392a5872418a0a5a37fa5532423a06fa35da5bb2328a0fca27ba58d2235a096a2a4a55321579f40a185a4651f3a9e29a0e5a2341d769fe69e0ca2e31c3a9d6a9f8ca2091dd99c549fb7a2c71cf29c889fa5a3081d109d05a08ea4001e7b9e33a097a41f1e219f6ba06da4581ea29e96a006a4491e839e92a0a5a36e1eaa9d49a052a38b1eed9c2da025a3111e709c03a0f4a2c91d739c0fa07ca3c21d9e9e85a0ffa2a81d2f8de79201958b187a02380d72104502cc9241981b9d3a0fd199429d93a09e19319a3d9e9ca0271c939ad09d65a04b1c1b9b709d2aa0fc1b769a209d989f881bdb988c9cb69e011b39982e9c5a9ec01a5397b59beb9d4e1aad96559ba19d1c1a5496fd9a429df019f2958f9ae29c6d199a95199a8f9cfb186595c0996b9cd31808955a99269c7418ef940399c69b43189594a4981f9b151851948798b29a8b172c9436984f9a46171d943998e79941173993c59787996c17979138967098df15979138967098df15000052104714b606000052104714b606db9c59a0e0a1fa21cd9e00a2c1a31123a09de9a035a2be21af9c819fe2a06f20719beb9d0aa0761f6b9cb69f01a12921759d7ba162a3bb234c9fcba2c4a48d24f19f4ea32da5a624ed9f5ca342a58124d09f36a32fa54a2400a042a353a5442422a06ca385a558242ea08aa3a4a5382428a06da3aca5ca231aa027a36ca5ea22919f64a2fba4bc21989f95a189a4bf2034a0eca04aa4422019a0d1a016a42c20329fdca0d8a32c20349eeca0f3a33b20939dc8a006a41b201a9daca0eda3df1fb89c70a0a3a3791f959c3ba047a3051f729c1fa007a3c71e539c0ba0bfa2981e4a9c01a0aba2531e259cce9f94a20d1efe9bba9f9fa2d01d939ba49f97a2c91d579b809fbba2d21d059b809fcda2e21dae99809e9ea13e1dd695199b3e9d001cf093d898dd9b3c1abd95f09b559f62178497439ce89fbd172a988f9c6ba0c0180998719ceb9f33193198479c4b9fb71944984d9cf49e171a3898309cb09e2f1af797e79b3a9e2d1a8a974f9bd29dc6192197e19a789d5219a996809a219d15193696359adb9cb718d095e899a89c9d188b95a399779c551832955b993c9c5c18b5941a99009c35185d94de98879bc31723949298f89aa517fe936598829a4b1757932298429abe1606931e972699951506931e97269995150000000000000000000052104714b606db9c59a0e0a1fa21cd9e00a2c1a31123a09de9a035a2be21af9c819fe2a06f20719beb9d0aa0761f6b9cb69f01a12921759d7ba162a3bb234c9fcba2c4a48d24f19f4ea32da5a624ed9f5ca342a58124d09f36a32fa54a2400a042a353a5442422a06ca385a558242ea08aa3a4a5382428a06da3aca5ca231aa027a36ca5ea22919f64a2fba4bc21989f95a189a4bf2034a0eca04aa4422019a0d1a016a42c20329fdca0d8a32c20349eeca0f3a33b20939dc8a006a41b201a9daca0eda3df1fb89c70a0a3a3791f959c3ba047a3051f729c1fa007a3c71e539c0ba0bfa2981e4a9c01a0aba2531e259cce9f94a20d1efe9bba9f9fa2d01d939ba49f97a2c91d579b809fbba2d21d059b809fcda2e21dae99809e9ea13e1dd695199b3e9d001cf093d898dd9b3c1abd95f09b559f62178497439ce89fbd172a988f9c6ba0c0180998719ceb9f33193198479c4b9fb71944984d9cf49e171a3898309cb09e2f1af797e79b3a9e2d1a8a974f9bd29dc6192197e19a789d5219a996809a219d15193696359adb9cb718d095e899a89c9d188b95a399779c551832955b993c9c5c18b5941a99009c35185d94de98879bc31723949298f89aa517fe936598829a4b1757932298429abe1606931e97269995150000000000000000000000000000000014992201f0124e185528d81cd721f6240c2c732017214f27e92c10202921f326492d7a1f14211f27862b0c202b207d25bb28931ac21dc022d129bd1dd91dc122b62d9b1b521e56235f2e6721d62286275027be2029240d288a2f461ead1ff32649301721ca1e18252830181c7d1afc248c2d93ab7cac69289630a0a854a53329253043a9a5a480266f3099185d29931f452f2420a92c0719602c2c21202e8a9efc26ae204c2fb1a67a20cd1fa62f94a76e1dba2000307aa7361cbc2045303ba8ac1ba520423025a8551c2f20423025a8d6199d1f753056a80c1a541f85303ea84d18f61e95309fa84c190320453062a8f81b341ef92f29a681994fa17e2c18a5a114db1bac2b2797a612f31eda251d1ed014f31d7821a61df9160a1e72207f1d6c18081e4220a51df917ab1dfa1f981db517851d8a1f4a1ddd16f81c271f041d1216791c471ea71c0d15341cb81d3d1c1a15161c7e1d331c8115091c551d2d1cf2149e1bea1ce31bbf14191bda1c4e1b4a14ba1a921cd31af213241a5d1c851add13eb19171c451a9113a819f81be61994135b19711ba819de120919bc1a1f19e5118c18b21972187a1127185b192e186f111e186c195a185511311898195e18c81123188b192e186411111883190b1846109c15ac176917000000000000000014992201f0124e1814992201f0124e185528d81cd721f6240c2c732017214f27e92c10202921f326492d7a1f14211f27862b0c202b207d25bb28931ac21dc022d129bd1dd91dc122b62d9b1b521e56235f2e6721d62286275027be2029240d288a2f461ead1ff32649301721ca1e18252830181c7d1afc248c2d93ab7cac69289630a0a854a53329253043a9a5a480266f3099185d29931f452f2420a92c0719602c2c21202e8a9efc26ae204c2fb1a67a20cd1fa62f94a76e1dba2000307aa7361cbc2045303ba8ac1ba520423025a8551c2f20423025a8d6199d1f753056a80c1a541f85303ea84d18f61e95309fa84c190320453062a8f81b341ef92f29a681994fa17e2c18a5a114db1bac2b2797a612f31eda251d1ed014f31d7821a61df9160a1e72207f1d6c18081e4220a51df917ab1dfa1f981db517851d8a1f4a1ddd16f81c271f041d1216791c471ea71c0d15341cb81d3d1c1a15161c7e1d331c8115091c551d2d1cf2149e1bea1ce31bbf14191bda1c4e1b4a14ba1a921cd31af213241a5d1c851add13eb19171c451a9113a819f81be61994135b19711ba819de120919bc1a1f19e5118c18b21972187a1127185b192e186f111e186c195a185511311898195e18c81123188b192e186411111883190b1846109c15ac17691746109c15ac1769170392ef81c60c78810392ef81c60c78817927281b671f2726a32b621afe181d28ad2c1014f014d8279e2def1bb01a0528582c391dc01c52267818e9117c1a8c2356992314bd1937210227fa1c1f1d8024382ba12044201b26c82c551f491f3427e42cde1c531e2a27ce2e0b1a2c156f27b72d33a762a84226cb2df7ab0cadf727872e98ab97ac0e29762f50aa4faa7e24c12f94a665993113d82e1ea10f290fa3412caf8b8c2d3fa84d25181c392f55ac1418d71d842e6cab72142e1ef12e60aa0416f01c992f61ac3c12631c00308ead0014601cc72f1bac0f13091c2c307fac0e130d1b0b3016acbf8b2d10223054ab14940d9b1230bfaae8955aa05c2f1da9c89c03a5112c41a7549be7a30b267ea46982ff945b2035937214b31a051d521a4e16211d641e9c1cbe179b1d721f2c1d3d17c61d081fee1cef16611da51ec61cc315f21c7b1ee21c7415811c051e931c3c151f1c5f1d391c4d152e1c3c1d421c8715e11b1b1d4a1c1915521bb91cf01b6e14d41a741c7a1b2a145a1a411cec1a0214171ae91b9d1a9313c219a01b291a01137219201beb1906135c19f01a92199f12fd189d1a7e190b12c1181c1a3a1953115318b819e41807112618651997183411141842197918f0106c17311992184e10b916df17f116ed0e20147215fc14ed0e20147215fc146e94e3969b98bf0e6e94e3969b98bf0ef7220409171a28277b2949167b1465285c2c43106e142028f02d3d17d2167a287f2e3f1a711b05286e2d74181719a022262e0816641c7e244031751c9d1f5b259034e91ccb1e802690358e1a3e1764281434510c938de226a92e53a185a22828d82c41a617a85628bb2b26a92baba828812dc0a910acb5281f2de1a87caa3d276c2fa7a686a5e025d62e3aa38024001e622abf9e222b5aa0341fb196bf2c4ea74999af8acf2c66a8b597de16d12c68a844952219ee2da4a8d992b918142ef7a8298bb017a72e03aaec8cad12ef2e25aa9b8f4a89082f03a9a797f2997f2f1ba98c99fea0da2ebaa9679af5a25b2e97a65a9a2ca3762cf5a24d98eea06325689e0190959a3b8d3b0d85114716e18a151c81144e1bc018aa1db116391d061d541dca16651d0a1e871d8416061dfd1d8f1da915b21c741d431d1b15601c5a1dff1c0f15481c531d281d1f15271c4a1d201dec14e31bfa1cac1c9014241b8d1c451c0f14651a3e1cf81b6813051aa71b2b1b9a1267191c1b6e1a1e12f218801a131aea11bf18341a9719b411a018f4195e196b115518b41924193a112b186819e118c710cc17f718a118c7105317a81855188c10f9167d185318601057167a182718a51095161318d1167b0f0015681723187b0f001568172318668b60920e94968b668b60920e94968b821b3192af15f4267e250c155e119d28a82a700add11bb28072d38143a12f628172e75179e18d828d22e121bb21adc280f2f491c1e1db9283a2f311dfd1ef328c92f681d011f5c29272f7918af18d029fa2b89996b9c7a29602b18a10aa49129422c52a50fa86e29682c31a78fa95229562df8a634aa6f28992ef0a557a97027202f6ea596a76726582ec7a2949864246929399d2329df1fbf996b9c0f2c819d4f9de294fa2b11a4e09ce197b92c07a46c9cae97ad2d3da3f299c396d12d43a4da982d97bf2effa4f996549a732f74a403983d9c862f35a46e974d9dea2fe0a11098469f0b30299e5c989ea0352f9294259805a10e2c7d19cd960ca0bf22db1c4191109c7d9e411d56826394a69da61de110ba166e96401e0514c5194a15bb1df414041cd01adc1d8215c91ce11cef1d8015c31c571d941d3e15251cdd1c101dd514bd1ba91c061d5614501b871cb31cf513d51a371c5f1c4a135a1ac81b081c8812dc198d1bd51ba512b119381b7b1b28123e19da1a1a1bff11fe182b1aa11aba11be18fa19311a88116c187119da1943113c1835199a19e1101018ff186019a61007181f194e199b105917dc180a199f105217a418d018cb10dc1661188c18fa0f40162a1853182210f61531185b182210f61531185b18958e8881d801c491958e8881d801c491c68d0e11ea154c25141e0515c8175a28fe26d913ce16b628092c3011510c4b29e92df70a7e8c7029002f5a117d0c5d291e2f420b748c1d29692f768b9c8c14298f2fc2910e960929992f7799ec9c4a292a2f689e6da1fa28822eeea1afa4fe287e2e12a46ba61629fc2ebca441a846299a2fc1a423a8b52808304aa5a1a8f3274b308ea44ca88a274e2e1ea3b4a351269d2646a02a2441258fa1739f1c2ad7231fa119a01f2b122001a0d69d672cf014009d8f97d32e2315f09b5699982f3a95e29b359cfb2f959e419ab39c38308e9e7099b69d5b30ab9b37996d9e87300a951b99699f8f30e7144898729f1d30881d1196b19eda2c5b1f2792f39cba20791e5791d69b70a2a81c9b8f279844a1f21c650fde150d9d421e8711dc185f89361e5413741a8118751e3814651b231a011e0014d01ab71a711da913961adb1a171d8a13531a101bde1ca7135d1a0b1bc91c4b13341a461ba71ce112c619fd1a6d1c87126519e11a2b1c4d122f19771a911b0e122919631a2b1b9a11d918041ac11a2c119718c219761a06116c187519201abc1026182c19ce1949108d17ac1877190510161768182919810f2816d217c818310fab153e17a318a00f5515c7163718b80ef2141317bf181a0e5114fb1572181a0e5114fb1572184f8ca112f314e5924f8ca112f314e59284984d16f5180e26bd99fa898f0b8528571fe7906792e628d628da8a3497ec28142d1191ea9924291e2f2d96249977296c2fcc91959a7f29ba2f0395f19a7b29f52f9e98ef9c782930309d9d5fa08e294530879fcca28f2940302ca173a47129553002a22da553296c3005a38ba633298330fea3f9a7e928ea3065a443a82628e130b3a358a8f427802d60a30fa8d227c21df7a1d6a09d26e1a132a0fd26302600a2b8a0cd2aab263aa0719b682e78256e9e5f9a5b3002245e9dc39a8b30af21b99c4a9cad30801e9e9b0c9de1308e1ed999a99dfd30aa1b9c992b9e4031511e3299539e4b319021a998a69e813042237d98339f752cca236896df9d371a1b21a890b598f3a1ac1fc08db094f5a0b61fc382b387439e061fa50cb513b69a3d1f031139181789d61e7f122d1a5517581e6513f81a6119051e4d139c1afa19dc1df6126d1a851abc1dee121c1ae21a871d9612b4197d1a191d7612a219081aa61c0f121819fc195f1c8e111119f619251cd411e018aa19df1b80119c184f19611bf81052180019b61ab310ca17a6183c1af80f8d178d18d219870fc516121876190b0f1316d6174119710e74152717dc18230e45159f16be18460edc1470167018320d451400165f18080d3c13cd14e717080d3c13cd14e717000066954d98890c000066954d98890c1d9a0699b8996d236b9d9790ce8bba282d9d33973297fb280c20189807997b29a4291398409c4629002e2298fe9c4029c92f7798ac9c682952307f99ca9c4f297b304b9c329f0c29a330289e6ba17629d430ba9f0fa3ad290131b5a01ba44c29fe3072a201a62a292231a9a2d8a6f4283931c7a2a9a73e297b3106a3fca619282631eda216a8bf27182de5a22aa8d5271a988ca17ba446267fa4e4a0c09eef2606a4bfa030297b271aa25c9f4f2e1627c59f299e8c30e825b79ed69df630ec245a9e419d3031fa218a9c529d7a31c220549b3d9d6d31861ee799ae9dd731c7204e99399db231fc216898169dd5306d243597da9c482c0b249e93029c2b17d62003913a9983a1fb1e6791d698d5a1b41f4f880f8e549f1520050b49123c99811f6d0e98169c887c1ea810e418a4140e1e7811a4193e181d1ee9119a19fe180f1e60116c19f418b41dfb106b193819511de410071932191b1d9b10af18d218bc1c51106418e3187e1c4110de1792180e1c2b1083176418cc1b121019171d18911b220fdd16e417001b090f421677179f1abb0eec151f17511a0e0eb115af16ee19ad0e08151f166f199c0d99149b15fa18580dc114ee15c218040d5814cf15d618bf0cc7137f153f18f00a7d10cc11ef15f00a7d10cc11ef1500005a9643995e0d00005a9643995e0dc09b949b889d0124cc9d9d93689a97288aa08399dd9ada28ce9d509bb59c27290821619b9a9e3429bb2b2e9cdd9f3429962fd69c25a055298f30459cb69e6529d6307c9c2da08e290331b09ef1a16429463149a0aca3a929aa3180a043a47229c33119a112a51f29ba319da131a60629053259a27ba6ae280932b9a2b1a61f28243141a3ada7ad27152bf2a19fa8af2708a34da262a87c26b6a2cca117a6612622a13ba15826ba26119faf9e312e59272aa02b9e65304a27b59f419e4031b625e69d009dbe315c24419ca99c5132ab23639ae09b72329c23699ae89ba4328a236d9aed9ad5323925b398359c60313a267c97239c0b2c58242b94a2997196fe203392ec9576a13f207194049730a22a2065910e8e9d9f032090889410b69be41f620a6e1516973f1f9d0f7118a7088b1e81107619c215261e5a10751965170a1ea51030197018f41d98104c1910199d1d6210fc18ad18631d70108f18a718ee1cbd0f21185a18701c450fa41765171a1cc90eb916e316a21bf20d6316ef16131bc60d17166e168f1af30c7015fb151a1a870c07158f15ab191b0c6214cf145419db0bd71344142f19ea0a15131d14fe18c80af5120214dd18e30abe11dc12c818fc0b96121f146418080c591305151118080c5913051511180000bd00e582d2040000bd00e582d2040599be9049953924d29d0b9ac89c3e28e89fbe99199b272965a08e9a759d6c29769e1c9e419f42299724f09c50a01829ff2c2b9e47a1f0289430399effa14e2945311a9f41a12229ac31bc9fdba39e29e03165a0ada37929413268a04ba42929743223a10ca5312996326fa161a57428823202a260a6a928c33258a2c4a67628ef3077a154a56d270c2835a184a6ae2709a5dea223a8422704a4cba11fa77b26bba1a8a17fa11627d3a2dea0602b132895a153a033304f289da0479ff031fa27029fb29d8232bb26969e8e9cc93208264b9c4d9bf0323d25df99889983336625f4988298df331d26d5963898c331d6262c956399482abb24ee956099829dda204194c198aea13c20c1927d959ca00520688dde10869d1820ec820815ae9bdd1f6e0a44172d996d1f700c3318d8954f1f3a0d5618a388ce1ed80c6f1834134e1e900d75183b150f1e2d0e2b18e015c31df90dc8173e16831d890d1517a4152c1d090d6e163415c61c030cfc157015651c600b421514151b1c320b0715bf14ad1bc50abe146d142a1b8b0a19141c14691aeb0994138a13e0197008f712d91256192308fa118412e318db07261157115c18dd078010231132183506fc0f5e104818d90880104911aa1878089a0f5311e21878089a0f5311e218000078809502950200007880950295021f99c79538980424339edd9a5f9ca928d09f549af99b26294aa187980d9c2b2909a2679cac9df7285d9ee29e46a02029bf265b9cd59e1729a82e009f97a14f2937313d9f0ca140291932cfa0e2a25529c43263a165a48529eb329fa0e6a487291333a7a0f3a44a294133e4a02ca5c028473356a12aa58e280e3349a1bca525282e30ffa165a60828f49afda094a64d27dda474a2a1a7bb2675a2ada057a5da253ca3bea0bea59d2669a18ea03a230b2879a01ba01c2edc280da0939e9231db28989d2c9ec0323928a89c089d61333c274a9c589cce338426bc9b199b43347c27869c059a2f340428a8980699f33125287a98619b4f281d24df971d9cd4a40c211f96209bbaa307209293ed92f8a028200d90d90d069e2e20068f4f14f39a1d20ab8bb1162c97561fea82001737924e1f9a023b179d88111f110779174208861e45099917ea10041ee50a36177512e11d3a0aa51603127a1dcd0933161a13081d42094015f5139d1c1709ff145f13451ce9084f14e312fc1bbe0812148a12931b8a08bb135112091b4b0867130511d51abe0539120311d21a5a05d411640f771a6903e1103f0e77192581ba0ea40d231931814b0e640d1919ed83140df50cb0185203d60ea70f9d18b507470f41105d17b507470f41105d170000ba132e16e80a0000ba132e16e80afb977f8dc48e4323c89e8399f99b5e2830a0349b4c9db22818a17d9c4a9e182988a1d29c27a0932915a29c9e2aa06f298f9e6a9e4d9d4329c627b69fa5a15d290230b8a003a481291c3232a046a237292433fba06da4c229ab3315a1cca48829d733c2a06da4ed28e433a1a04aa46a280234d2a06aa40e2817330aa158a67f287c2c43a1ada61128019feba192a5e626d9a27da167a7392794a4b8a055a7522679a428a183a50a26b6a0c9a026a19a2607a3479ff6297228e39e8a9e8330f4281e9e219dda324a280c9de39cad335627d89d7e9b233472279b9d459a9834cd27ce99e295c9349c28ae98e194c0315328e798879ae72500232c9b0b9a4ba2b1205898fd947da0b520ea94158e6b9e60208492d507da9d40202490c710399c5120008bef146f982e20d18723163894621f2b879715af93ff1eaa864415428ea61e06829c15bf876a1eb505e615630df21d3e057a15d611861de1042a156911511d930459141a11d41c67041614f00e991c6f01c912fb0b681c61019e11980b081c4f0149113e0bb31b3b812a108604351b2281bc0f0004201a0181a20d98038119e180060d4c034219da806f0b1f03c818df80760b0003c818e9804409cd02a4187802e40ac6072118d500e1097b092c16d500e1097b092c160000a880048504050000a88004850405e99979953199dd23ab9e989cd09e722811a0a19cbb9ed0288fa0eb9c069f062933a19c9de79f28291ea2999d46a06c2960a1cb9c3d9f3c29f99f23a007a13b29cb2809a077a3b129c63000a0b0a205291b33da9f59a32b29ca3303a153a429290a34d8a0f7a369283a34d5a0bda339280b3403a255a55c28853124a211a50728472402a26ba6d32769a44ea2f3a7cd268ea478a1caa798266da432a1c4a8912656a37ba1b5a880268ea140a1a2a5a225f7a023a1469b9f26ed9f5d9f5c2d7e28aa9cf19b9d323829459d189c2334152903a0509a8f3461281e9c7f963735f828f098869219351f29cd9b8f98f3306b283397c99a9e1c93228a984399d1a156204196e79467a0d52010954b08039ede2068916f13c99bd1205390781581997f20018db2151697e41fab8a3d168795871f468ab216ec918d1f47876216ad91f51ef086fc156091da1e4a897a150b8e6b1eeb857014548da91d5c850214bc8c081d07885a12748cea1c6f893510048f791c1089f50fba8e4a1ce788de0d5f8e101ce189e30b2c904c1baf896d08c18fc91a6b8a1508fd8e1d1afd88a1075f8e9219bf8867022d8c1e19aa894d02ec8bda18ec894c02e88bd818148a3d82ae8be6184f854e09f2022318a684e10500081618a684e1050008161800007b10ed12520a00007b10ed12520a3f983b978a989c22759ee19c599f5b2835a07b9d159fd228b6a0559da29f202910a1949dd69ff828f7a1dc9d66a00c295da20f9f12a147295aa24ba002a32d2935a1be9feca10129ff268aa09da31f2904313ea004a4ea289d3343a0cca406294a3445a087a349283d34aea0b6a30e280733d8a0d5a433281d2cf5a072a55727c9a4f5a2f8a5b92624a7a4a138a6862664a3d3a03aa66426ffa023a18ea6c425cda0e5a0bca64f2551a09da0b6a5e924fd9f25a0c3a53725aa9fe99f7f22a426949dc59d9f30f3299f9c539c60347e2ad39cec9bd534432ad29b71985b35822a929c5e943035182b1d9cd6983a3001297e983898649c0022869627968a9e3420a696728edd9e9c205795778ed19deb2093945c0e829ccc202c935f14519957201491cb16d8952420c38e68174a920320598e0d171f92ce1f978cea15e891881f0e8c8115a391311f5f8b691419917f1e3b8c87113c92ad1d998cc80f86913a1d378c170d9792da1ccb8cae0916927c1c978c8d030a933d1c3a8d5e839992f21b178dc0885b937f1bfd8c7b88e592071ba38c2e885292711a4e8cc087c591e119bf8a42878b907819848acf8951900019868ad6863e90ec189e8a6e89e28e1119c18b0f8b958e07194d86c5816b8add174d86c5816b8add170000d30e3d125c0a0000d30e3d125c0a049951983098a1227e9eae9c049f44283e9fd89cf49e8a280ba05e9daf9f0529d5a03e9d15a02d2951a1879d4aa04929a3a1a19d65a0402936a2c39e6ba1212938a2889e07a19c28f1a104a072a0d1285422cf9f4ea4f7285c2d3a9e1aa3e727413165a098a35828433115a0cba53729902c14a0b9a26d2796987ea1e2a4fc2612a493a3cea67727e9a126a2b1a6c42709a205a1e1a5df269ea1c3a09aa53c2655a1afa0f1a5f125b1a062a05ca68925bb9f28a067a60825c89eafa080a39f24ce9e02a0e228af28e19d9c9b8c32582b739f0695f6343d2b179ac092d0352c2b73977f88fd34f72a8b9bac94822f97284e995b981b99c2207598a68807a143216b98121414a03d214698a313ba9e7421a194c515a3996b20bc929c168f9648206b9170171a935a203590021703901820908f76164e8fc31fb48ef215bb8e271f008eae14208ec31e778d4f13a390251ee58d4810f291d71d7a8db40a06938f1dc08e318a6b95261d4d8fca8c0c95cb1c2a8f398e5c957e1cf28f8b8f01950c1c29904e90ac948d1bd08f1290e694181b208f8790a694b91af18d548f64945b1a718d30904694f619f08cb28fda937a19698c088f0093e218278dcd8f7d9286180c8c718ee2911118058d848c978cb517058d848c978cb5170000c312df1612170000c312df161217839cfb9b859d0027bd9f0b9fcaa083281e9f319d3d9f5628d79f399d699fb32857a07d9dc89fca28fea04c9d8c9fde2843a1f49c929fbb2895a1ea9daa9fb728c8a1559fcca09b2817a2baa093a371282da1aca0b8a45c28f3a2f4a148a46828838d46a129a53828399df9a1f6a60e2843a3e8a298a6332705a34ca337a62227f2a124a2dea5c9267ba3d0a04fa56326e5a134a14aa50e2637a154a1cea5ce25c8a0f3a0c7a57a2542a063a022a5fd2416a0e79fafa4692445a0289efaa3b723fd9dbc9f1da41d250a9ca39cf72de629359ccc992d34342c3d9e2895c5359d2cb99a0c95c6344e2c729d6892762d4f28529b85999ba12a21b7965891b29eb0206d948f17259b2621e99412163d99f020959096189590ae20188f4419aa095620a88e5f195f891d207f8e2b193d890320488ff017838ffc1fe28ed9150d94611f5e8fc913c995b41eae8f8f105d967d1e8e90cb04c396341ecf90aa8a8d97771de5909f909197f41c87912292b5979c1cd2918292b4973c1ca291d592c697eb1b79910a93b0974b1b329161934997e81ad390f792ba96611a6090ab925696cb19c48fe3927e9564198e8e76927a95d1187d8e24923b959918938e7792ff946518918e1e92a3946018f98d58932f968315f98d58932f9683150000ed0ed31337160000ed0ed3133716d39ca39c2f9e3c269a9f6ba0f4a18928389fef9d74a03b28589fa59d33a07028c89fb69cab9ead286ba0189b3c9dbb289fa02f9a579d7028e0a0259af59d4628e2a03d9bef9f3e2852a1a99ee6a1442857a25aa13da433282ba249a285a4e32734a46ea3d9a4c62723a46ea2dca532271ea268a233a64c2705a20ba30ba6fc2619a24ea1bea55b2680a2aea1eaa5392646a24aa19ba5c025cca12ca151a5762558a1bba01ba51b2512a18ca05ba5ed24b6a0bfa03ea5d12411a007a072a44f2425a00ea0f0a51a25579da49ee7a36e26a09ca09ae32f7f2cfa992a996c34112dc898e897c932562c89985195a62828264599a19401a32b2168985c88679ea620e9940114419ab12042931917ec9bb1200090c31a5f8a7a20b68df61af9096320c38b1b1b40105620838bc51a0e102420968f9c181e891420c8904515d297f91fef90660f32993f1f83916d853a99d81e1792408e5699621e7b924592b699d11d6d92cf93039a551d83928e94419abc1c829281950b9a531ccd928595e099fc1bb9926c954e99f01aaa926795e398631a9092229546981e1a5692e0944298cb19e891a5940c984b19f29055944497d0188e9025940f97ad18e98ffb93d9965a184b8e25924d95a9184e8d67918a943a174e8d67918a943a1700001d168c192d1200001d168c192d124a9db89e43a1c226459f78a0c0a13627369f6e9f33a13f271e9fe29d11a008280e9f1e98b29b54285c9ec7110a8d5f28e69dc7161b0d3028ce9e900b5698832795a00a9a599e082733a13b9fe5a1df2631a1f0a0b4a3df263ba138a135a4dd26eda23ea28aa53627d6a4fca1ffa53d27cca2efa1a4a5ab26e2a1eba1d8a547265da26aa20aa65626f7a122a290a5ff2545a17ba12da59a25e2a004a127a52725a5a0b6a022a5da2439a016a00ea57c247e9f629ff3a43b242b9f769eeda4db23f19ecc9deda45b236e9d469d9ca39c23309cf69c952372279c98ed984231f22b809c3f945a302b2ba09a8f9d9ba07723d19a9d9afaa0fa20f398fe97b39eeb1f6897c811d89cca1fee921a1bb897821f3290011d4514e61f8989c51d2c1a6d2083838b1d9e1a93208b90671c0a1a87201390961a2c184120fd8d5d180a0f0920a98f1d14d294a21ff290f80b0f99dd1e7092a692cc9a771e1d94c495f09ad91d3f94d596af9a541d47942c97b79aaa1c409470976a9a401c1b944997369ade1b2c943e97cc99151bad93c2966399581a2d9369960a99f019a0921196b6988c196892d895529854195f9297952298e618ec916395ef97b518e69140954397b118a5909394e49655189b8f2294119711179b8f2294119711170000e11340163b110000e11340163b11289e9ca0d5a16b26f79e0fa1c7a2272745a071a064a23c27489e5e9db9a0e6278c9dd211619b5228dd9c851dcd1b1f28f29c761dde1d5527d59d1f17b216c826589f539b279e65268fa0b49f17a27b264aa1e7a024a39c26c6a1c4a15fa4bf2674a152a25aa5d12653a1eca270a5e42693a162a2b8a5bc2646a12ca14aa5bc262ba23aa1fda470268fa127a1e2a4312653a1eba0c6a4a1252da19ea0e3a44f2553a15fa0e7a4e724f4a04ba042a5d32480a00ba009a59c2418a06f9fa1a4a124fa9f209f8da46924259e529e90a46c24069a8f9dc2a5f625d598129b252aa128659afd99fd2a6128be98a69cb4a18a22ad99839bf7a16320bd991b9848a03e1fbd971c0f159c3c1e7a8e3d1c4a145d1d6e09ff1d3e1b9a1ed80fc91ecd1cbb1fa310c21e1d1d3120920d231e1f1c6b20368b011cfe145f208391e716779506208a939a85e598171f3c940b93b599821e7a940695859aff1deb94ab96e99b801d2b95a698999cc71c239514998c9c3a1c1795f798949cf41bb394f2984f9c7e1b9e94c498eb9b1e1b6d948f98849bc11ae3932698b19a391a1393d797ff99c719a89219977b99b1192792d69640994019af913f969798f7185491ee9567989518c190679511989618e5900a958e960a18e5900a958e960a1800000912bc16530f00000912bc16530f4d9faea1b8a391255fa00aa377a46326809f86a028a24d26469e279e30a09927e49c801ad0197c283e997a2210231628149c3022b3233826539df41a2e1a3c25bf9fdd9d1ba157251aa1b4a13da4d12579a113a34da5452674a152a36ba55a2693a12ba335a587264da199a2d4a4602657a138a2b5a482267ea1aba1c1a47326f8a026a15aa48f268da0d3a076a4712604a04ea013a4bb25889fbf9fefa32d25b39e849e18a4c424529e539d29a38624909d909c6aa362243b9d349c1aa35b249a9dc09c41a349247f9e5d9d2ea42e24199d1f9e9ca54a24cf985f9d1fa35e23349a0d9ec39d63216f990e9cdea01a215e99049b3ea1c91e9d9aea9b1ea1631cac99cd914a9c201ae183c81d0a1c611a1814b8205420381c17157a218e21071f54155d213b2190201f143b20811fc420b90cc91c37199b20f4917a138c96182063957d92659b861fec950f985f9c801e6a962699bf9cad1df8958299a79c291db7957799a19ca11c779541996f9c251c01952699249cbd1bdd940e99cd9b081b8c94bb98a19b6b1a60948098589b2e1a2e944d985b9bc519c0931d98d29a86191693bc97a89a2d1998923097369aa3180292d3969b9952182392909633992418ac91339635999817b19085950d981c17b19085950d981c170000f21565179b0f0000f21565179b0f019ce19ea1a023237da0ada331a5cd25e39f16a393a406263da0daa1e6a35d26ef9dab9b6b9d1928021c6328ad29bf28b917d527da281e24939dac97459abf2112a180a292a4702407a1a0a314a5712582a10fa495a50d26aea225a4efa5292652a26da35da523260ea21ea31da5592666a1c2a2dba47e26d7a178a1bfa4062770a225a0c0a2d126b2a1579d2fa17226ffa0f499e49feb25e29f6f9874a08725e69f5c972ea0d324779e918a0da007259d9e5b9734a04b253d9e9895879f8125899d629a53a070253a9d959e19a31d25e69ddea08fa474240e9f5da178a4c823209e67a00ca47522df9d11a011a44b20769d2d9ef6a2a41c699d3e9c2ba1a319ce9970919f9a0417058d8f1d381c3816ac184523db22a8184f1a8d240925921ccd174d248f247f20521119215d210522c693541933166c21c396bc95a69a752062980c9a769df61e1498449b3f9e0d1e5d97809bdf9ebe1d0497669bfd9e5b1dd996f79a549efb1c2e96879a879d331c43962c9ae99c761b0b96b499689ce21a87956399259c3f1a45952199949ba919d494a898299b58192e944998a09a17198f931098719af318cb927697fc9961186d923597ad994718749239976499cc176b91b196799920187590a395089856187590a395089856185c15571cfa1d80125c15571cfa1d8012b79a019ee39fff21fc9ec0a201a4842404a079a25aa4e424b2a02da3ada4e224dc9d71a38da47d242691fb217724de27c61c2a272427bd29d19d3da4cba6f725c5a1faa36da6ee254da13ea4e7a5e72535a13aa4dea5af257da14aa417a6ff25b6a155a44ea602263aa26ca471a63c26fca15ba469a684266ea1f9a278a5af26a0a04da124a4942782a2ce9a3b9d3b28019c551cdb0c82278797c9201020652780951c228f1e2a27e28f4c213521d027d3962d21612028286a9a1919160d0328619db19e18a329266c9f81a1d0a44324a59e58a13ba51f22a09e34a251a5f820f79d6ca15fa44320bf9d0ca12aa4f41f6d9d7da094a3c11e729cb69f75a2f31df999fa9d71a1421b29988f12ce97c4988a187b2371244c9d4c1f102865286819491da62623272424c295331f9c1e2d239598be99d19df420f4971e9cd19f561f3d985b9c15a0a41e2e986e9cda9fb81dcf972b9ccc9ef41cfd97eb9b119e501ce6974d9b9b9db41bc597019ba59d4e1b6e97ab9a769dd01aa796679a6e9d841a4796f699059dc919b6958c99859c37196c950399159cd2182495a898849ba918c9948598129b801892946798ff9a451838943798959ae617f7932e984a9a8c1759925397ea991a1716911e968b98021616911e968b980216000029141916e189000029141916e1898f99059d869e9a1f0a9eb7a195a30623399f65a258a49c23359f38a2e1a3aa22019b929dc19f7f1f5e841a8b9882be1c0d9bb39eb0a0f1225fa1a8a473a6652557a163a400a6772589a142a4f9a55b258ca12fa4cea55e257da114a4bca54e2574a121a4b7a5332571a116a4a9a5102569a12ea4eea5e72420a10ea4d5a56724d9a019a42ca6bf23b5a0f8a311a6af2283a03ea31ea63020e79f33a29da5d208699e11a1f0a41b99839d4ea03ea49398d19c33a0fea3b696d49c2ba083a37613329d38a090a3031ce29dcca035a4371e199ed4a042a4121f099ea9a01da4b21ed09d84a00ba4941ee59da4a00ea43d1ebf9daea010a4f11db49da6a023a40d1e289ded9f3ea3f71c5e98239e49a2991c8798e29de1a001977025ee2c502edda0721c3526782778276b95a19c13a23e20d8990c9de4a0cb1d469aad9d73a0001d3b99069d45a0b51c2a99f79ce79f351cbb98be9c689fc31b9998719c309f411b1a98389cb79ee81a8097e09b5d9e6d1a0e97509bd99dcb194596ba9a2a9d38199995ff99c29cb51823959599929c9e18a6944b99529c761858941499189c53182294f798a19b4c181194c298ef9a1818e0937e98839a1a1800948098429ae21704931598bf9905170c92f496a198c5160c92f496a198c51600001614d2168f0600001614d2168f06d99d2fa115a3f7220d9e0ea2b6a4e323269eada128a4fb22669d6ba0bea1b520f299e29cb39ed01d6599419efba0e420609e7da285a47224a3a0bfa370a5f6240aa114a4b5a50d251aa132a4e2a5f724fea026a4e1a50925bea01ba4e6a5e224a1a01ba4e0a5c72456a00ca4bda580246fa0f5a3c5a514249fa0bfa3a4a58022afa05fa2d3a45b200f9d199fbba24b1d159adb9bf9a1d41cd599c99c98a0321d569af79c9ba0c81da899989df3a0a11ecd99b69d0aa1391e8899c29d5ba1081ebf990d9e95a18a1dae9aab9e38a2cb1d8c9b939fcaa2e01daf9ccd9fdfa2c01d7e9d39a020a3f71d8f9d33a041a3121e089d29a043a3bf1dc49c2aa082a3a51d4a9cb09f36a3291d219d3ba0eda2071d469cbe9e07a18e1c6e0ba411e713311164028f80728ff6854d98e09b239fb615b69a3e9e87a0bf1a7b9a099e85a0fc1bc49aa39d57a0a31b1d9a359dd39f1e1b3599aa9cba9e331a7798409c7e9e341a8797fc9b369ed019f0967b9bd19da6197596279b9a9d8b192396b49a339d4119a395459ad09cc3185b95da997d9c891814956999309c2518e3942b99d09be6178f94c298469b841768948a98ab9ae6164b9439984d9af7166c943a98e299aa167393c997899996161392b3969f9831151392b3969f98311500006014621612090000601462161209d59dfca057a2a922d89e51a21aa43b235d9dc1a00ba29521809c079fb7a05b20f49a8d9e99a05220e09cb6a03fa25822239f8da27aa4572423a081a33ba5b2243ca0cca390a59e2426a0d6a3aaa58a2436a0d2a3afa5652485a000a4dda56324d1a014a41fa65924e4a022a441a628248ca0d5a3e3a542237ca0bea2f6a4bd21579f87a1a5a4ec203a9f0aa164a48a207ca0e5a038a4a92058a004a15da4c120279f75a164a4da203a9e76a178a4d020999d2da159a4a020109d04a12fa44620d89cbfa014a40c20be9c78a0d9a3571f9d9c50a070a30f1f819c2fa023a3901e669c0ca0c7a2531e439cdb9fb8a2fb1d0f9cbd9fa1a2b61da99bbb9f8da2741d529b929f80a2691dfb9a549f75a2741dbc9a589f26a2311de398ac9d18a0571cda930a99db9b4f1a57942b9a749d4e183a97279c5b9fa2152198859c95a0bb170e98629c3ca0a4182898609c699f19192f985b9c1e9fc3193c98299ce69eae191998d99b639eab19b2973c9b1a9e4b194597eb9ac29de018e5968d9a699dac185d96619a219d8218d0951f9aee9c3a186d95dd99b19c1a181a9592996f9ce7179b942a99119c8c174a94ea989d9b36171b94a0980d9bd21617947598839ab91676932d98389a49164b93529735994e164b93529735994e1600000000000000000000601462161209d59dfca057a2a922d89e51a21aa43b235d9dc1a00ba29521809c079fb7a05b20f49a8d9e99a05220e09cb6a03fa25822239f8da27aa4572423a081a33ba5b2243ca0cca390a59e2426a0d6a3aaa58a2436a0d2a3afa5652485a000a4dda56324d1a014a41fa65924e4a022a441a628248ca0d5a3e3a542237ca0bea2f6a4bd21579f87a1a5a4ec203a9f0aa164a48a207ca0e5a038a4a92058a004a15da4c120279f75a164a4da203a9e76a178a4d020999d2da159a4a020109d04a12fa44620d89cbfa014a40c20be9c78a0d9a3571f9d9c50a070a30f1f819c2fa023a3901e669c0ca0c7a2531e439cdb9fb8a2fb1d0f9cbd9fa1a2b61da99bbb9f8da2741d529b929f80a2691dfb9a549f75a2741dbc9a589f26a2311de398ac9d18a0571cda930a99db9b4f1a57942b9a749d4e183a97279c5b9fa2152198859c95a0bb170e98629c3ca0a4182898609c699f19192f985b9c1e9fc3193c98299ce69eae191998d99b639eab19b2973c9b1a9e4b194597eb9ac29de018e5968d9a699dac185d96619a219d8218d0951f9aee9c3a186d95dd99b19c1a181a9592996f9ce7179b942a99119c8c174a94ea989d9b36171b94a0980d9bd21617947598839ab91676932d98389a49164b93529735994e1600000000000000000000000000000000f4191b158417521dc628861f2f230b26ec2b3020682084280a2d6f20bd21f1275f2d7b207e218927ae2c36208e20c425f22d931f74214a267630712094228626423108230622de25d530472173239a2678300c2172237726a430b3211e23c8269530082107243626b930541dd220c3250d30b4abe5ac3e222d2f0aaf73b0f826e230a3a028185524ea309720f528a021dc2e0a22562c1b200e2cdc20ef2cc99890265820f92de3a38a20c81f9e2ecca5d61c0f20322fb9a61e1a431f8d2fa0a76b191b1fd52f74a82e1a221f2a3046a8e518dd1d393056a879181a1e4430e0a7a4165f1e5730e0a73017ef1e3b303aa61c17d61c1c2e42a4729ceba4ee26b6a206190320ce27c28c6017391eda222f1cce174d1ec120b21cf317b41d4220e21c5e18d51d1d20161da417821de71ffe1ca617651d871fc21cd116011d381f8f1c2b16991c881e611c46155d1c051e0a1ce4141b1c9e1dce1b30151b1c631da71bc714ae1b161d3b1bb114611bf61cfb1a7414dc1ab71c901ab6135f1a7d1c061a8813fa192f1cc2196413a819151c68193a136019791b1519be120519ab1ab718d0118018ad191f18a91155188119fe17c4113018ae19201893114818a9191c18d9112b189a19d317cc112318aa196717b91099164918f0160000000000000000f4191b158417521df4191b158417521dc628861f2f230b26ec2b3020682084280a2d6f20bd21f1275f2d7b207e218927ae2c36208e20c425f22d931f74214a267630712094228626423108230622de25d530472173239a2678300c2172237726a430b3211e23c8269530082107243626b930541dd220c3250d30b4abe5ac3e222d2f0aaf73b0f826e230a3a028185524ea309720f528a021dc2e0a22562c1b200e2cdc20ef2cc99890265820f92de3a38a20c81f9e2ecca5d61c0f20322fb9a61e1a431f8d2fa0a76b191b1fd52f74a82e1a221f2a3046a8e518dd1d393056a879181a1e4430e0a7a4165f1e5730e0a73017ef1e3b303aa61c17d61c1c2e42a4729ceba4ee26b6a206190320ce27c28c6017391eda222f1cce174d1ec120b21cf317b41d4220e21c5e18d51d1d20161da417821de71ffe1ca617651d871fc21cd116011d381f8f1c2b16991c881e611c46155d1c051e0a1ce4141b1c9e1dce1b30151b1c631da71bc714ae1b161d3b1bb114611bf61cfb1a7414dc1ab71c901ab6135f1a7d1c061a8813fa192f1cc2196413a819151c68193a136019791b1519be120519ab1ab718d0118018ad191f18a91155188119fe17c4113018ae19201893114818a9191c18d9112b189a19d317cc112318aa196717b91099164918f016b91099164918f01665143c12e316ec1c65143c12e316ec1cd3273b1c93204427d42a618bcc92da289b2c7f11ab12b1285f2d6e1c531c6c28562e8d1f61207828da2d5b1c801bb926212c841f0e209027672df31ff2216c29882dfb20a32180284d2e4f2068202f28832fa61b0e1c3f27902f03146b8e4328f12f7fa46aa62926ea2f00ac17add9241a2ff0acd1ae1428a52fb6a924aba426d72f07a3619bcb201e2f559b9027fc9e2b2c591a862cd0a41525e81d162e11a796183b1d3e2e72a83315081d992ecaa85c169c1c772f72aa1a14bb1b612f0faab212821b992fa9a870131e1a732fd0a7fb105f188f2f9fa6ce898c930c302aa88a94759de52e6aa74b9503a18e2d53a39798faa1f22822a44095e29ddd21bba2700ac307e5195996dd14561b621ca6169716801d941e711a2418351eda1f1d1cbd172b1ec11f421c8c179b1d2c1f9e1c3416101db71eb11cc515a81c391e661c4615411c8a1dd31b26152a1c521dcd1b5115db1b271dd51bfb146d1bcc1c4c1b6e14ee1a861ce11a1414601a281c7d1ae213eb19f81b011a4913be196f1bc2191a137e192b1b8e19f9123419c31a32198712fd18731a24190e12c1181a1add1864115218ab1985181d1107185a193b180e1107180d191e1801119017ed182b18451085166f18ab17640e7013c714c215640e7013c714c2150e017e854a87571e0e017e854a87571e50231715b31b4628ad28f2938198c928022cc393fd91a6289c2d9211328ce228652ee717b7170c2803301a19c8196c265332431be91c4b283b33701f2120952870312f1d471ed8271a30b3158c144f284d2e3498f29b1c28052df2a046a36b28e52dc0a517a8ed272e2e3ba967ab4328a92d5faac2ac3828ba2ef5a850abbe26d22f95a6e3a7b8255b2fafa168183e22d82a119c7e29fa98141e8391412c0fa26598ae8acf2c4ca55595dc16782d8aa501937318932e1ea7fc927e15f02ea0a8e090bb13a62f8ca98f90ba90af2f75a9f491b599d52fc8a8b3991c9ecd2fe0a78f9905a1c42e1ba8c698d5a1cd2c9fa49396e7a07f2840a09e92c29c1d1d539ca78a1e989c9b0f0c4512f417230ac0198e15811cb21b841c3c17511d9a1d741c4b179d1da61ed31cd416551d981efa1cc415cf1ce21db01c4915931c761d631c23154c1c601d861c1a152a1c531d811c0815001c371d201ccc14891bd31cec1b6014c51a671c2f1b0614361a181cab1a4a139a19581b2e1aab123c19dc1a8e195b12d9184e1a45193f12b318051a0819a4116c18be19cd18651144184719be18f010fa1706195718d51057178c183818781001176b18d7178010a71655185c1716104f169b18de17fe0f7515cd17cd17fe0f7515cd17cd1785809b036e01461b85809b036e01461b521cd0099f145c28642426949299d828f0291d98af972f29c82cb391ec9583290a2ef111eb0ccd29db2ef9161516bd29762e03154713cd29da2c2b153e138c29002bab92de96e229a82c9199329f672a4e2cff9e47a2d229262ddaa1e3a46029372d40a52fa712296a2ef1a7ffa91229bf2f19a861aa16281a3002a71aaa4e26fe2fe6a5d8a8a325a02e5da353a53623b2292c9fe423431d1e97439d77299499419e259cdd2ad9a0329d549cd22c52a4a59c889a0a2e14a4169a3c9ab12e18a41c9aec9a762f15a4f298b19cd12fd5a44799e99dfb2f8fa4dd98389f1d30c3a20b9856a0152fda9f819831a1732c68997498fba0aa252d919e95759e699c03181b90ea99e7a0291aba02c78d779e3c1cba1169172a90081d5414bc197c17c01cf7142e1cec1b0e1d9a15be1c181d181d8215c41c461d0a1d7815571cfd1c941ce614081ccf1c6f1c9414a41bb31c861c2e14151b681c161cca13821af01b5d1bb1121a1adf1b0b1b9312ac19471bc01a2d126d19f81a761a011203198b1a111abe11c2181c1aab19aa11681890195a198711481852191e19421128184c19ea18c6101f183519d418bb10cc17f018c018bf107317b7188918a910fe166e184318d60f0e160818bc171710c515af175c171710c515af175c1744819c0db00ff91b44819c0db00ff91be88e3207050f92244b1cf3908298db28fb255a9493970929bd2b49989a9b72298c2d249aa49cc329a12e7598d59ac829a22e8c991a9ca429f12ed5994a9ca629d62e239bcb9d9429092faf9ef6a0be290f2f94a0b2a3ac29df2ef7a2bfa598291c2ff7a44ea74a29e82f6fa58fa84e296230b1a5b7a8b7285c3094a5a5a8a5274930f3a4baa85327912e3aa47da637265b27bda1f299e924e7a037a01d264d2212a2919ff328d41cd09f5b9ede2c959ab19da49a962ed9947b9d0c9cc02f649ea49c399e0530bca15f9b529e243092a1709a669f533082a1409a38a01d303aa05399a5a02f2f949d319782a0c32c6099b3961fa0aa256b104295d09de7a128172f92a89c8ba23b19b087c6950ea0121b60100616479c801d0d124f198209561d07144f1b2a19521d41146a1ba51a2f1d1214ef1acb1acd1cd113b31a081b951cb013701a3c1b671ccd13671a281b4f1c71133c1a651b371c1e13d419111b011c90127619ef1a871b9e1268197c1a091b69123119701a701ad411af180d1a0d1a3a116c188f19cb19e110381845197f19b01005180e19451933109617d2180619101025178718b918b30f3c16f5175518620fd71554172c18f40f7b15cb16c917df0ec614f1162618bd0d65144f169b17bd0d65144f169b170000f60e180d180d0000f60e180d180d57979807bc0f2624ba9c5b99869bcb28941c1d986e9b402904282c98089d5d29a52ceb993c9d9429dc2e709a229caf293d2fc398a69dc629a42f209ae79ddc29962fe79c30a0f7292830779ff7a1032a3930c3a0cca3f2295130e5a13ca5092a7030f9a21ea687299d30faa316a74929b83094a401a8b9280a31aca48da81728ef30b1a4f3a8b227112e22a451a8c5265e2117a3aaa56325b5a17aa0cc97b62417a21da0ed2480246e9fd19f8a2c7722f59c639db02e0720b19e759c4030041e8b9de69d9e300e15409c269ecd301595089bd49eba30eb941f9bf49fa630d694d59abe9f8c2fa61aa49826a0552c241efb96329fc020441f3591ce9acda14d1e558f5397c1a0cd1d188b5b91169f3a1ec102b407329df71dd20db0145299351ed91090182f09fd1d0513861a8317a21d87130a1b6119411d6c13c41a4e1a051d1f139c1ae61a031dc012411a5c1b271d5f12111a041ba51c7012bb197d1a3e1c0a126619711a011c06122c19171ae01b05120919da19471b9c11be188019d61a291178187019331aef1003180619ba197310b717a4188019d70fd9161618e3181b0f0f16c317a4185d0e6c15191775185f0e4c1593162c181a0ea8141e161b185f0d0f14c0149117c10ceb126a145c17c10ceb126a145c170000a7883c8ee40e0000a7883c8ee40e9d97aa91f5945e23bc9ee5953b970129cb9dd997fd991229cb1d3f9b349e932942291c9c059f9b29b42d659a9c9ea029c62f089bc09df7295d30249bde9dd2299030c89c5ea0a229a43016a0bea2eb29903078a1a0a4032ae130f0a2e7a5a429313108a4d8a651297131eaa3c3a6fe287531a5a3eba72d29b43129a41ba8752844311fa49ca8d127a12d43a3d2a853270194eca1f7a7af25f4a501a234a75e251fa5bca1fd1a11254ca3a4a1a12ae22440a01ea08e2e2c2358a08a9f6f307920599f709fac30cc1b859d07a006314f955f9cc09fe63019951b9bf59ef330fc148b99c99ecf2fa21afe98de9e4e2ca71f4199159e4522f71edd95a79b55a1be1d21932c9aefa1991dd291a3984fa1491e7f8b2f8e629ecb1edc0a1d14c7978a1e860e8317b9080d1ebf10f318c615611d8511b7194b186e1dce11ff191419701d6b11e5199719411d791187196819b51ce31015194d197b1c9910b81838194a1c45106518e618081c3110df179918441b940f89176718f51a840f32172118ca1a110fe616e017391ae30e43167917e819860ef4151b179d197b0eba15b1164a193d0e6b154d16fb18d10dcb14f215b3186e0dec14dc15a118400d7414ad157c18db0bde1295142818630a3210c6107915630a3210c610791500008689388eae0d00008689388eae0dd1987f96f298a323b99e5299bd9bcf288fa0c49a499c09290d9f309b9d9ea129921f209ba79e9529b82b389cdf9eaf29d22fe09dc2a08929ba30c09d4fa0a529d630609db7a1f32912314e9f06a3ef295331bfa0eba3242aa53135a1a9a4c029d83115a2c2a57f291232c7a298a6fa28473227a3f9a6ac285c323ca33ea74128773165a32ca81028982cfda216a8162746a296a314a96b2697a450a3a9a8d8255ea32da3b8a56e2596a03da1ae266325b3a0b79f042e2325769fc99e6b301124c79dcc9f4c31ad20829d539fc231d21e6d9cb39ebe319d1e579c309ea331961e5a9a0b9e6c305a210999469e0e2c28228896949ca81e1d208792c497969f9c1ed9915d9582a0121f4e91e691aaa1f41f8391248ee79f791fc1888012109be11eae0a5816a094721ef10f9e184e0ff01dfe0f3e19d0147a1d5f1027195c17461d9f1040197218431d83104d19ac18001d5210fc18b718d11c6810de18b6183d1c001039187318011ca70fd5171f18171b3c0f5217b717f11a4d0e7c1622176c1a030e33169916f119300d93152c16cd19d00c3015b7155f195f0c7d14e91404192c0c0014bb14d518280b2c132714a518080b06134913b218250ad211dd126d18040b0c1220143718f80bcb12f014fb16f80bcb12f014fb1600000000de81748100000000de81748126995c928c95f123709e959a769c602805a01d9a4a9c4129bea01b9b2c9d85299d9e019ef79fb229da24019db8a09229862d569f75a18029e130fd9eada18c297d3152a05fa27729d93135a149a4dc29fc3106a13ea4df293f326ea1f2a49a29ae3236a2a4a56329cd32b0a263a60529d5328fa2a8a6c3280133dfa2aba64d28ad3162a235a6ec27902aafa1eca6c0271ea6dfa36ca8ec2635a4b0a260a8282630a2b4a194a60525f7a0d8a01491eb245d9f17a00d2cf724009ed19d5030c424ea9d349e9b3122245b9e369e5f323e22019ec99c7f32d220699c879b7732dc20ae9a189cfd308022e199009cdd2b4a22de97199c509a62206d97e49a38a1ef1d1e96e79abba20e1f7594fb979ba02a1f6790f70d9c9dc51efb822115de9b8e1e940a11188c98791e970c3c188a94ff1d7b0d7018b9080d1e380ef3186913b11dc00d97185a167f1d860ea018f716751d380e44184117031dd10dca1799168f1c550da6161716641c030d3816a815d01b940ce115e8154e1b710b2f158215d01a080be3141f15561abf0a32143e14dd19370ab013ba135719c10824130d13e01852092512ca12b1182b085f11a3113b182c0843115c110518870622107c10c317c2088a100c122e18b508fa10f6121f18b508fa10f6121f18000000004d032086000000004d032086df998896dd950724849ef09a099c9b280da0829a0b9cf42890a1ff99069d8029e9a1ab9d9ca09a29fc9f579ed9a1ba29e027d29d32a07f29572fe79e6ea190298f318d9f24a2b82993323ba18aa4be29f132d0a154a5c72913334aa17ea5a529493340a171a56429703386a193a5d82872330ea246a6f228ae3302a23fa62e285f310ea25ea73028632068a135a62127aca48ca2eba7f12664a4e0a0d8a5d82501a497a132a7d125c6a343a240a46725b1a157a11f23ef25a09ea99fc52d1a255d9d259ff530af24199dea9e5b32a024c39c9b9ddb32c9245f9b349da732c624009c759d95307924a09a799c4e291323df963e9a4fa06e1f6b96499a9ba4be1f9e95809a8aa2de1e5993a194b8a0eb1ee2900588499e191f6190d012079b361f968bda154e977a1e67882c1771929a1eac027617e188401e4607c0177108b21d7009c9170111631d050b45178312001d540abc16d013e21cdd094b166714811c6309de1513142b1c220914158413b01be908d21402137c1bb00817149612bc1a8108bc135b12801a5a0675130711021a090633121511591a540327116f0ff919510157102f0e31192381220f4b0e49192781900ed60f55195686be0b3e0d97182101d50e9c0fc9171408330f401008171408330f40100817000000009e091781000000009e091781b8972b92ae086223d29e069a409ca7287da0a39bc89dec28a8a1e19c619f462967a2aa9dc2a0c829a7a321a0c9a1aa29ac9f579f6da1bb29ba29539fc9a19129ed3072a00ba377299732f99fb2a149296f33cba0f5a4bf29f0332da181a58f29003449a124a518291a3486a14ca589283734cba109a52428233483a174a66228b2306ea15fa74a28b59405a2f7a5082774a481a183a6de2687a455a1a7a64e2618a3eba1afa7522649a228a214a65525cda3aea1109c1525959f7b9f65291b25939d0f9eca2fdc24a59d7e9dfa31ad24999c7c9c0a33fb24429bed9af432b9241a9b9e9a8b300a25389c3d9a0a29b922a9976098bea033207f98ee997ba34b204d98ca9777a14d20af95919305a00520b4920a08af9da51f2a90a812b89b8a1f058bc5156897e71e02883d164994951e7587c815ab91611e538225164488ff1d1e026e16ef07d41ddf05aa169710651d82089915f111fc1c340846158211d21cad04f21431115b1c7d042b14f510281c4504d213ca0efa1b5e019312bf0b431b48015811600beb1a36812c10eb0a7c1a1f81a10f13047919f780be0e8f03c918f280110d39035518de80c70c3b035718e200d50c1d032f18ed805d0bd302f217dd00100bd3075617dc80530555024316dc80530555024316000000008a82d081000000008a82d081a09960942798e7239b9f159dfd9ec12883a0069d2c9f2129f8a0569da99f53299ba1f19d49a0992954a3149e7ca0c62925a23d9dd0a09929b5a079a1e9a18829222c66a1eda28c291332a0a0d2a20829e933afa02ca4322952342da1aca42d29683483a18fa4b0288a3475a1a0a495287e3403a2c7a43b283934d2a15fa518280f2d16a1bda5be27cca264a298a7b8267ca33aa3aea74d2675a37fa255a81c26fba1a2a295a8352601a242a240a6e22482a2d1a123a5c3248aa1aca0dc1a0625b19d439d522ce825e49c7c9a10310e26c69cb59c9e326226a19b519cb0323026c29cb79d272f8325069d439d01238522c699729a899fb91e2e9a2e9ad6a0051f4c97339727a0e81f16958688799d282057918a13aa9b2220599077147899d71f528eb6152b97011f928c47169295a81e4e8ad1160092c01e238a7716b7916e1eee891e16858e1d1e8689ad15228e011e288630155887651da0882214ee8cd31c34887f12958c7d1ca8893c112a8f081c56891110d88eb21b1789f90d798e471bfd890a0c3d90ce1aa5898b08e48f581a6d8a38083b8fcf190089f2079d8e5119d68878025e8cea18dd896002d28dae18d6885a02198c9c18ec894d82ed8ba8187b882702a68bb116728606024388491772860602438849170000000071074c800000000071074c8031981496f9965f22af9ef69cee9e762864a0559d719fed280ca1089e4aa0372988a1e79d2ba049295fa2e29ecfa0832963a225a01ba1982939a479a18da37d2938a37ea01ca22929ae2c62a0e6a2da28bd3394a1b5a44d29aa34d6a15ea58529cc343ca25ca51e29d334d9a1a7a44528ef34e8a1ffa51928303341a2bca51a285f22c4a277a5502707a55ba26aa79a2630a4cca12ba72726c8a1f9a113a7be2508a1a2a150a74c25fda044a18da6ba2483a1c9a0c4a52f247c9e5ea101a54d23f59e2ea04e20bb24ca9ccc9b822eb126899c5e98d4311828339b24998c323628479d009c4a2e79265f9ef99b061ed921a3997b9760a1cd1f0d98f99627a17e207498c08e939e1520f9955e887c9e7f20f59440089c9c4e204a938315c198dd1f43910517bb94441f1f906f1770923d1f5f8e2d174992121fa78cd9160d92ce1e1e8cae15d591901e9d8b90146993f41dbe8af8128092751dbe8b0110bb91d01c4d8c3a0dc3926a1c308ccc093c92111cc48c6809ce91941bc88c6c836b91121b928c34833492a01a078d7f88cb912f1a9c8c2f885f92c219568bbe87ed904319988a47878c8fed18678a00872c8f7c18b08aeb865c907518058b8f89478f8c18448b4a8b90935d1798882d8adf8d561798882d8adf8d5617000000004706e580000000004706e5808e981b9721973d22139e119c209e5228ba9f359d549f95288da0ac9d5fa016297fa1169e4fa06429f0a1609e80a08a29a0a26e9e46a1922917a35b9e77a1992927a43c9f66a0ed283aa1ada0d9a04029a22d19a032a55629cc3338a06fa57928d534aba195a35728f6340da1a6a45728873431a1aca41928c02e96a31ca62628bea2bca3ffa51e274ea297a269a6e5267aa37ba1cfa5a02622a238a19da51b267fa143a10ba6b6259ea0f5a03da61a2526a0aaa086a68b24359fb1a185a5bd23bfa081a002a4a52351a0589d19256d25f09da89c932f8127209cfe9a6c31b0270b9c4a9a952c1a25b09a4099f08c1821d698c49784a06d1f7a99c2969ca1a7203799e28851a0c820cd97a411f69d8620ae94d514d899fc1fa092cb16bb96aa1f6e918d173c93c71f539021171a90b01fc58f8d16838f0b1ff08e1a16fd8e8d1e218d9915698e461ea58c7714cc8dac1d4b8dfd12518d6d1dc38d1410ac91f71c3f8e4e042494cc1ca48ffb898d94491c6d8f778eef94081c0b90c68f3595811b888f6a906b95b31a058f2a900a953c1afc8eca8fba94d919dd8d678f6794ac19648d228f3b947519f58cc58fcd93d318718c208f21936818298de28f4493c917908c6e8fdf916d17d98cfc88988a6e16d98cfc88988a6e166902a1135716551c6902a1135716551c3d9b839afb997f25799fa09e89a05228f29f7d9db39f7b2828a0929de09fc728a4a0d89d23a0052934a19e9d06a0312994a1499d68a0192902a2549ee3a01929e1a23ca05ba1d42849a358a201a49f28e69e74a0aca4a028f628c7a115a5ae28bc31cba114a4aa282d330ca266a5b02808304da3d5a4f3277d1d3ca319a6052763a035a39ea6c52637a288a113a6902600a224a21ba61b2623a264a28aa6c025a5a11ea258a6452554a199a15ba6fb24dba0e5a0e6a58e240ea068a042a5d923a59d239f5ca5fd223f9c1a9eef9d7522199d539d1b28a124c29e589b432d5626879aa09ca1284e24359bdf99b6916720479a8c9985a0e31f9497368f4a9d5620979652157e9aa7203795c0115d996f2077922417a190262078905819c909c71f3d9076198e89761f2190421960893a1fa68f7918aa8f301f5390d1163194bc1eb38fc214ea94241e069015128c95ee1d3b90350e0d96b41dee909e840e97161dfe907f8f28979d1c479175910298451c0292d092fa97111cd8911a93fb973e1b689154935d97af1a689199936697401a16912f936496cd194390cb9277967719908f0793ac952619d48e8f92aa959718df8e41925d952a18808fa592c194ec173f8fbc92c7944117eb8d62930798de13eb8d62930798de130000c40faa11f91a0000c40faa11f91a3e9bb59b2b9c3525e39f34a08ba17f2814a0969e9ba06d28ea9f1e9ee19fa32835a0059d2c9fe0289fa02f9c299ee72810a1879ba29d982891a1c49cb09f63289aa1639eeba171286fa3c3a009a4532889a46ea2aea42a2879a192a35aa412288815d8a193a4d527f220afa2bea4f5271fa003a279a49926eba358a437a6ad2660a31aa133a7de2665a353a152a6522613a3c6a143a6f2257ba2a1a103a68b25c8a12ca1c7a5542549a116a17da5e624a8a0daa03da58624fb9f35a0d0a41d24d69f4a9fb2a4f323919f40a016a4ca222ca04fa062a3c024459c589c59203e24629835921217e422d197bc93e8996e204698a79821a115200098240f169b1020319508142c9a03207495ab0eb99c012072912119f193be1f4a8f901a228ada1fd08b501b5f10d51f8c8bea1adb125e1f528e0c1a7912471ff3906518e4882f1f8d9040143e96f31e95903d0c6b985d1e2691cc8b1599ee1d16926491fd996f1d8f9217943d9aee1cb092af946e9a801cdc92b295419a241c5893be95179a571b669322969199b41a1c93a5951b99281ad19251957298a5193092ef944b982c199c91f594ad97e118a6909d943f97681814902594fe964018cd8f1194d896f417b68ec79255952318d68c009101932b17d68c009101932b176c00cd142f16791c6c00cd142f16791c079f5ea0a3a1af27839f62a0c8a11828189f899f0ca1d127f99ea39c719e2a280e9fc796d89a6528b79e108ce7937d28be9e038c98963f2832a05c991d9ece27f6a17b9e7da1722746a2c0a007a3932746a1e5a1dfa3a32785a1e5a123a492277da4dfa383a5882701a42aa39ea6fe27e5a073a2fda4702665a1b9a23ea68b26e3a3c7a276a650263aa1c6a146a5de25daa06da12da57825dba057a168a51f25bfa044a190a5d6246da01fa1bda56f24c99f4aa06ca5f323d39e2d9f1ea559237e9e409eeda4cc22589de29da1a38522479b429e84a332236595da99069c1d241f981a934c938a221a98d09b17a1dd204199a09a76a15820f499aa986ba0f91f099a97882f9e091f5c964318119ca21e6c941e1b39948d1e598ee71c8418301f8183921d701b0320328cc71cdf1ac71f4c8ddd1a0319d91fb08c8618690f911f5a8dcb15cf931c1fd08fcd103e985c1efc91418e269a091e6a93d9945f9a721d309491962e9a261d40940197a29a821c3a9441975a9ae71b389408971c9a3f1b4494f496e8996e1a2194da967b99f81960936e9618998b19d1920e96809820197b92c8954498dc185d92889518987918fa911695e7975118519241954b972e18f290a594449744173a90cf9429977f153a90cf9429977f1500007e130e16cb0e00007e130e16cb0e609eb0a02ba2cd266f9f46a1ada24c2706a040a03aa26427429eca9a499f5028609dcd1958944d28339dbe1dc11cf427209f051c591a24276fa0aa99189d0b27e4a0899f03a2e82640a111a108a40827a4a29da2faa41e2759a3f4a23aa523274da235a31ea64c27c5a1eca2afa5fc2623a136a2dda4e52626a143a2eea4e62652a3b6a2b6a54a26b7a215a2d6a5fb25e8a19ea174a57425a9a12aa13da5f42475a119a15ba5a52424a1c8a0a0a59924a9a05fa078a54d240ca09b9fe6a42b24869f229f62a4a623619eb19edfa39923a89a979c0fa27923ba94a69a019a16240298279bec9d5423c398879c67a16721fb99bf9c7fa272203a9af09975a1591fb5990d943e9e3e1e61941b1af995e91c9a83cd1cac18e31c5e0c2f1e5e1c081eca0fc11e181d221f8f0fda1e981c651f2503571db619cf1f428e97194c09c71f14927a0f1097ee1e9c939e90e598f11dbe93d6934a99651d5994c495539b0c1dba945998679c671ce5940399a89cae1bc7940a997e9c291b9e94cc983b9cbc1a8d949998fe9b5f1a64948e98589b0e1ac19326987b9ac519f692b297e3993e1994920b9761992d193592c796f698c418c4913e96899889189e91fa9555985518c990b295149814189c90e294bb96bb169c90e294bb96bb160000320dc116e10a0000320dc116e10a3ca037a180a356254ca0baa307a58b26bc9f96a097a1a1260c9eb49aff9c2728d69c3320082076284e9a1123df238d27609d581e7b1f3426e69ea49be29cc72594a07ea119a40a266da181a34fa57126a9a1a0a3bba5dc26baa1c1a3afa51727e9a15fa36ca5112799a1d3a219a5002779a16ba2c2a4f72620a18ca17da4b22698a057a135a458266ca02fa1b7a4e0255ba0f8a089a4172568a0a1a02ea472247e9f45a018a41824439e159fafa36d23869d3c9de8a2e822e19cd59ae1a16722939c90984ca15622dc9c599629a16b221a9e369b95a3532364994d9deaa11f238199fe9ee2a15d22e199309dc6a10322bc99a09cbca15320ba9a9f9cafa1641d379aea99c19fc31a92946818b30a9c1852112a20c71e8f1a9b144321d820ba1c631585210d21f51e3215db205b2025207511b71eb01c0820579096177392421f9595b38c779ae41e24965d97859c241e7496b998c39c581d1e9610998c9cb71cb3954e997f9c571c8e9556997f9cd01b35953c99339c061b10952399169c9e1a9794d298c09b081a5d948d985d9b7e1938945898159b4919f0932398bb9a06197993e297549ae118c0924397fa9968182e92e596ab99fd174692a59638994117a4918c96689944178b909c958798c1168b909c958798c1160000b6143a17d80c0000b6143a17d80ce69e7da117a305253ea032a395a4d2251ca023a3b1a4752663a038a10aa35427fa9833221524c3289e1eb529152b6926199c081f2b1a63221ea1f6a2a5a43724c0a2dea32ca5d02595a126a4c9a5272671a28ba44ea66c26a4a39ea472a6902642a38da370a5c1266ca384a286a4212714a266a127a48d27dca29e9edea15e2746a1149c35a05026b2a07199da9d3a2529a0199a8fa03724179f9d9a37a1e622a19eb69a81a13921069f0e9747a1b6206fa09595c7a07c202ea01f145b9cf421529e86196199a0234a9c7c1712a099249d9b119b6fa4db24bd9df8a058a5ed23759eaaa1a9a44f22c89ec3a01ea4b120149e23a087a38e1eba9d919e71a3881b479ce49b18a0bb186f97b3113a979e15e3136720f31fbf160e1a28248e24c018c8196824f024961eea173f237c231d21898fad1daf1d3221989624922f997f205a985798349c171fca97c49abd9dbd1d6497799bbf9e391d0e97799bea9ee31cec962a9b9c9eac1c7a96c59ae29d001c58964e9a189dee1a1a96dc997c9c431ac7957d99339ca4194d954299f29b5619e094ec98509b0c1955947a98c19a991882931198759a6618d292bb97fa99031876923e97b399e41785920e976e99d916cd91bc964e99941768907a95eb974d1768907a95eb974d173d159a1de41ee3143d159a1de41ee3141f9cec9f1ea1fd22fc9ebba25ea40f25989f35a365a49724be9f2ba3cca4a9245fa225a7f8a7a22763204129732a7a24049f6ca55ea747287aa122a41ba67b25a1a18ca43ca6c025e3a03fa4c3a5942553a166a427a6f625a8a15fa43da6f02593a294a452a60326d1a268a48da63a26dda18ca2c4a47326d4a22a9c22a0c427ef9cf11bcf18c826fb9c4a1e3b1d9f24bb99b31c90180e217a9ed998bc9dbc1dc9a097980fa0821c929dcf982c9e4a19db9a2818cd9c7c18ad8600221b22cf1ca2192c25642537247999371ca018de258b9fbaa081a46324129ddca1d6a5cf203b9c71a1a5a4591f999d4ca164a4491fe79ed9a0e6a3121ff69c35a027a30b1e9b9b24a04aa28f1c9a999c9bf19f5c14ea957d18ae11069cd01c0d26c926959ca61f2c2805295120b018bb2397244323e1979f8e94991d215598ee9adb9e1e1f7198419c999f0e1e74984f9c8b9f641d2f98579cf49eb81c2e98e99b0c9eea1bea97629ba39d331ba697419ba49dc51a8497ff9a859d5d1a0f97c39a709d041a69964b9a2b9d7919c895b499b19cf81892952299309c57183895e598db9b2c181295a0987a9b1218a9947698389baf174b943298b29a531703942198569a961659923697af9913169e9188968c989d149e9188968c989d14000049144f182c8c000049144f182c8c239b429feea0ee20b09e42a226a4ce232c9fd4a25ea46823879e46a10aa3dc214193d996e998391d1793769620999f204ba1efa3c7a5e424c0a15ca425a68225c7a15ea424a68125d4a16fa41fa67e25dea141a406a64f25dca146a4fca54625d5a15fa405a6382503a2aca477a65a25f0a1dba4e1a6e62451a1caa4fda6db23c3a07da4b3a60a2286a0fca351a6cc2079a044a3d8a595208ca0f7a2c8a5632119a087a28ba52c219b9f28a252a5691fc59edaa1f5a4d01d299db3a0f0a3a11bb89cba9f4fa2a616a39c289f4aa29715c89c9a9fdba2ee18399d53a092a3571c789d75a010a4691da39da4a023a4981d5b9d7ca00da4081d009d69a006a4101d839d9fa00ba4161d819d26a011a3341d9297ab9ea0a2e318c51a1225d025ada3fd24fc2c1f2e68247b96d494d39c02237d95e09b19a1721d4999479da1a0ad1c4099339d3ca05b1c3299269d1ba0d31bd398d29c819f011bb5989e9c3f9fc41a5198579cc99e311a1298119c659ef4199d978c9bfc9d7019d296019b669d0319d6952e9af29c7a185695cb99aa9c5118e49479995c9c1e1882943c991a9ced173e940999b39bf7171394f798349ba117da939398c19aa61718948b98579a5c17de922a98039a8b161c92a8968d9894161c92a8968d9894160000dc141418d8070000dc141418d807989d74a150a3da229f9e20a24ba492234a9e69a14da35422d69c449fcda00c20ea99f49cb89e7c1ee59ce3a03ca3c4222fa0f0a37ea5d924f3a026a4d1a50e2546a158a40ea619256ca168a438a6122566a164a415a6f22435a151a408a6d1241ea140a412a6b12445a149a40da6552422a143a4d4a50e236d9e2da15ba33220fc99209d7da07b1d959a029f40a1991ebf9d79a128a4f620e89ee4a2eca4d921169f36a35ea5dd21439f21a330a5ea21fc9eb9a2d3a49521be9d88a1d9a3ea20489c7da06ea20320ea9a7c9f15a22c1ffc9a399f37a2771ece9bce9e05a2c81da99c6f9f85a2971d089db69f75a3941dc79c2aa073a3511d989c3ba0b7a3381d549c1ba093a30d1d579c1da009a36b1c669dc8a0f9a2b71c3796909a819d931977060411e8131c83289190971b9c050bdf9ade9d8ca0ef181a9a769e89a0101bf699b19d60a0231be699249d07a0861a2099bc9c349fc9198a98629cba9e5b191198229c6c9e35196497c69b0e9e1819a7963d9bae9df6183c96db9a5a9dc418af956d9af69c4f185f95249a9b9c15182895ad99479cbe17f3944299f19b5717b094d498599bf1168a949398b49aa116949456984d9a6016a5944598e7991d161b940398b899cb1575923e971999431475923e97199943140000dd14201744820000dd1420174482a09d8aa10fa37c22bc9ea9a22ea45d239a9d85a0bba134213c9cdc9e8aa01f203d9b709f8ca10a216d9ebda1baa342233da068a3faa476248fa0d0a375a5942478a003a4bca56f246fa017a4eca56924c8a042a44aa6782443a156a482a66224c7a14ea47ca648245da12da417a6e0234fa02da345a56222909e83a109a40321319e30a104a4de20539fd8a15ca4352171a07ba2f8a4682171a084a2eba45b21c69f90a2faa449210d9f51a2dca41921859ee9a1a5a4ad200c9ea1a16da46420b59d55a14fa427205b9dfda01ea4d11ffc9cd0a003a4601fc79c8da0bba3e31e759c5aa041a3571e5b9c27a0eaa20b1e259c1ba0b3a2a91dc09bf79f91a25b1d669bd59f79a2151d019b8c9f5da2121d9f9a529f39a2f61c399af09e33a1571ca5967f9b499d7b1a2a931299279c7518af95359b7e9eaa15a9976d9c98a0ac153798709c70a069173d98779cbe9f71183598699c2d9f1a1965984d9c239f12193c980f9c839e18191098709b1a9ea418af972f9bdd9d55184597a89a889d29187c96529a459daf17ff95339a129d89178095ee99cf9c49171d959c998a9c0217969437993d9c06174a94ef98bc9b59161294a198259bff1518948798939aa215c8934198839a4b157593ed979799c9157593ed979799c91500000000000000000000dd1420174482a09d8aa10fa37c22bc9ea9a22ea45d239a9d85a0bba134213c9cdc9e8aa01f203d9b709f8ca10a216d9ebda1baa342233da068a3faa476248fa0d0a375a5942478a003a4bca56f246fa017a4eca56924c8a042a44aa6782443a156a482a66224c7a14ea47ca648245da12da417a6e0234fa02da345a56222909e83a109a40321319e30a104a4de20539fd8a15ca4352171a07ba2f8a4682171a084a2eba45b21c69f90a2faa449210d9f51a2dca41921859ee9a1a5a4ad200c9ea1a16da46420b59d55a14fa427205b9dfda01ea4d11ffc9cd0a003a4601fc79c8da0bba3e31e759c5aa041a3571e5b9c27a0eaa20b1e259c1ba0b3a2a91dc09bf79f91a25b1d669bd59f79a2151d019b8c9f5da2121d9f9a529f39a2f61c399af09e33a1571ca5967f9b499d7b1a2a931299279c7518af95359b7e9eaa15a9976d9c98a0ac153798709c70a069173d98779cbe9f71183598699c2d9f1a1965984d9c239f12193c980f9c839e18191098709b1a9ea418af972f9bdd9d55184597a89a889d29187c96529a459daf17ff95339a129d89178095ee99cf9c49171d959c998a9c0217969437993d9c06174a94ef98bc9b59161294a198259bff1518948798939aa215c8934198839a4b157593ed979799c91500000000000000000000000000000000da16170d901065190629a1201323ef26882bfb15cd1cf028862c081fcf1f66275e2d27202621b726ae2d58202f20d424f42f5c228023f2277631d422f722252701314723e823d727b830ce2148246727c830c722b7245728dd30d52237248027bb305a212d24f1277630e4980b9cd926fc2df6aa9cac1222112e7fae60b0db208c2d5dacbeac23284f30d00e82242c25c22eb520e6292721f72afd1edb2b4b915225f91ec12c39a0dd1fe01f602d79a4831c3e20082edaa5051af91e6e2e9ea68919a21ece2e84a7dd19341f392f28a71a18401e4b2f9ea77f17e51e672f36a73417631ef02e75a5bb14131b722da7a4e4967f9d7229c8a1bd1370197327e29e6415821f3024f014ba14901d0421a2190818131e7c20cf1b6418341e7a20531c6f180f1e34208a1cca17bd1d08205b1cd717811dd01f671cf316111d651f2a1c3c16c41cd31ede1b7515891c461e871bf214371ccc1d3a1bf014181c711df31acc14b81b211d8d1abf14621bf31c3a1a8314d91ab61cd81905146d1a921c7019e213131a441c34198d13b5193c1cf3182c136819911b8b18c91216198a1a1918dc117d18b119a417bd1167189b198717cb114518ad19a017ea116718b519aa170a125b18b619771799111f189919051724111c17e418ec150000000000000000da16170d90106519da16170d901065190629a1201323ef26882bfb15cd1cf028862c081fcf1f66275e2d27202621b726ae2d58202f20d424f42f5c228023f2277631d422f722252701314723e823d727b830ce2148246727c830c722b7245728dd30d52237248027bb305a212d24f1277630e4980b9cd926fc2df6aa9cac1222112e7fae60b0db208c2d5dacbeac23284f30d00e82242c25c22eb520e6292721f72afd1edb2b4b915225f91ec12c39a0dd1fe01f602d79a4831c3e20082edaa5051af91e6e2e9ea68919a21ece2e84a7dd19341f392f28a71a18401e4b2f9ea77f17e51e672f36a73417631ef02e75a5bb14131b722da7a4e4967f9d7229c8a1bd1370197327e29e6415821f3024f014ba14901d0421a2190818131e7c20cf1b6418341e7a20531c6f180f1e34208a1cca17bd1d08205b1cd717811dd01f671cf316111d651f2a1c3c16c41cd31ede1b7515891c461e871bf214371ccc1d3a1bf014181c711df31acc14b81b211d8d1abf14621bf31c3a1a8314d91ab61cd81905146d1a921c7019e213131a441c34198d13b5193c1cf3182c136819911b8b18c91216198a1a1918dc117d18b119a417bd1167189b198717cb114518ad19a017ea116718b519aa170a125b18b619771799111f189919051724111c17e418ec1524111c17e418ec15860a938ee28f0f1d860a938ee28f0f1d4925d5896c8b60286829be9cff9ed428502c0d9774991d29512d3415280dae29732ea41aa11cde28972e851c0f1d1729222f131f6020cb289b2f8e1d991fbf28b02f151f831fb827e62f331ffc1e4828c32f821e641f7a272f30ac0d1e0fd6287e2ff7a6a3a8a328e22e82abd4ac7d24072f9dac31ae7622572fe5aa8cacac25b82f2ba650a7f425212fca9cd41d0c24902bc018eb284b985623741e062c5fa0d118271de72c7ea4fc13671ba32d05a8ca128f1a5f2ef2a7c112ee19bf2e83a712128819582f1ca63a1186116a2ffea43085b996492fe7a46c9864a11c2efba23c9c6fa5942af39e159d6da6a12027a39799a9a2889b2fa251124b145c1835a02a147919821aa7937815521c151d4f144417e91d051fde189618bb1e3420771abc17611e0420771b0717ba1d341fea1b09161f1dc21e2b1ca915b61c491ee11b6e15641ca81d641b2215281c4f1d391b3815e11b281d021b1515761bd51c931a8f14fb1a8d1c311a3214711a2f1cd819f913fc19041c9c196113cb197a1b5f193e1390193b1bfd1809136819d41ada1895122d19881aa4181b12c918271a8c1882117518ab19301841111c184219b0172811ed171e197b175f117017cd183e17d010f416a518a216860e41144b151216860e41144b1512162a8820930594531e2a8820930594531e7221a28a70924329cc26949c02a092291f2b579b839c60294c2dc898219cad291e2ea19179995c29af2e020bf0953b29092fad0b37922d28b72ea0181f0dd828f72de3179c0d38292f2efe12e29a6729b12e089b079f6d290b2f4ea24ba45629be2f60a68ea81f28ef2faca82daaff263e2fdca90dacb525123011a990abe3250830d5a7c5a90026b82e58a44aa5f824cd29e29de6229521b412f594ae289698119c03997e2abfa3a59881994b2c52a1bf957c964e2d92a44f962299fb2d94a8409560999d2e22a9a6953e9d562e53a8d6995ba15d2ee7a7c19b39a45d2d54a7d09ba5a46c2a5fa52b9aeda3be2445a1df9775a1c3983d9dde91ae9c7a9f6399da0e6f08c798f30a6114cc198c160018bf16141d8d1c971a9417981d141ea21b2317bc1d0e1f211cc3167f1dd81e331cb215e91c091efa1b8915a71ca81d5c1b34155d1c951dbb1b1815491c831dbc1b4615231c411d5e1bde149a1be31cdb1a9c14121ba31c801a4a148c1a381c1b1ae713f219e01bb2193c136f19201b5119ce122b19b11afe187412cf181d1ab618d211a918c919a6186f1151187b196718031105180d193218b5106117b718c6178910cd168e187517a31073160f18861626102d164d18fb16931003161a18a816931003161a18a8160000430ffd0ef21b0000430ffd0ef21ba118758a1a0ce628f321c39bdd9ce6284128a69d5b9fa3291b2cf59bc29d0d2a802d119a9b9c6b2a0c2e239af69d5a2a4a2d4a9a139e7a2aa72c129c419fba2a2f2c1f9ce29d862acd2dc79cd79f3e2af02eaea086a38a29a52fcba2efa45629522f4ca543a71b29183004a745a9b6285c309da7aca96a27633083a73faa9826493042a678a94626652e53a4f1a7832487282fa100a03b21a99ac09fef21481ec59fa69f2f261e99479ccc9d4b2a66a5a69a8d9cac2c9ba4a899939cbb2d5ba3f499839eb02e7aa35b99c39f1c2f4fa48c99d4a0c72e1ea3c89965a1d22da2a1649a29a2f72a7b9f3799f0a1c8235c9cf9951ea07aa0b6988a925e9cd9a15a0d988d5d9847a06618f00bd907199cda1995128f184d099e1b66148b1aea18cd1b1115581c871c411cbc15dc1c941d481c8915ad1c6e1d0b1c5215671c3d1d011c0e15261c151ddb1ba3140c1cff1cd01b7f14811bb91c761b0614f41a401cb71aef12431a051ca11aa512ec19af1b121a84127b19181bce1912123e19ae1ab519c411cb18421a1f19a4119d18b719db1887117818a319d21847115a1860199718c7101818351974189510bf17ec185d1898107f17c0183618a91009177a18f11704100e1668171517730f4a156217bb16730f4a156217bb1626880e093008e61f26880e093008e61f7a97fa981799301da18fbc9a269a5e2803248b9cbe9e2a293e2a759d4c9f9829d42c569c789f452a282ef99ac89e342a252e1e9cca9e082ac12ec49b369f372a882e359d1ca0362a652f4f9f6ba2432adb2fefa02fa4472a1e305ba3dca5cd293730eca46ea7162963307ea585a8e628bb30cca5c1a85d28cd30bba5c1a8af27813061a505a902270e2ecfa46ba8d9253a258da249a5042536a2b7a101a0162350a2c6a1d9911e1d1c9f51a090285899069da39d1d2c139aae9cab9ec22df59f159c8ea0bb2ea8a2119c16a1af2e79a3389c00a25b2e44a3759b51a2092d77a2b89a90a278298ba06d9ab3a159200f9ce4976ca047a29094c396959df9a3d18cc193139ce2a23215c8089e8ed89edb18b7102d173d993c1caf12cd19fb12b61c1114471bc419b31c4414541b851a4d1c2f144d1b2d1b0d1cb613ff1a771be31baf13c91a561bbc1bb613b31a9e1b9e1b79138e1a8d1b331ba213331a921b3f1b1a13cd19171bc91acb127e19e21a521a91123719701ae9191212e318081a891971119e18c6191119f41066188119d518d11006184519a0184c109a17da18a6182b101b1799186718b30f85160d180d185f0ff715bc17bc179a0f90151c171c17dc0e0415c916c916df0d7a148d168217df0d7a148d168217e38287123f128220e38287123f128220c292e20bd285191b809d879b2d9cb2284691769baa9ec0297425d59cd79f8729d72bc09de89ee129562eee9c059e542af52e1c9cc89f712a7e2f079d4fa0532aad2f639e2ba12d2a4530ce9f33a2262a90303ba13ba4582acc3009a383a5232acc30c5a343a66829eb3042a453a7fc281e31d8a42ba88b28463121a598a83a28f4301da556a9c627092e33a493a893266d21d6a2dba62c256ba24ea1fea474243ca3aca146a4a622a8a01ca21025c01e309f9ea01b2a371e1fa0eaa0382d091abf9d79a08b2ec19acd9c8aa0332fb49de19ba8a0942e519d829be5a0322dc89cfa9be6a01d292c12779b42a1bc1c4419bb989c9fb2a3e01bfd94069c25a2d81ba991f29860a07b1cbc887f91889e451de602ec0d769c3c1dfb0cd0147a98a61c0711e6183009061ddb12d11a7018e21c7b13011be6197d1c0a13dc1a2d1a761c5f13cd1a3d1b7f1cf7126d1a561b821ca0123c1a1a1b521c9612d619ae1ab51b17127e19991a901b09123d19801a1b1b01121919401ad41aae11d618e319701a451165188f19d119fc101f18261963197f109417bc18f518e90ff61657188b183e0f731622185318650e801530172518650e5b15a016b4173d0e01157d168a17040e60147c14eb15160ca4123b154217160ca4123b1542170c8c9c12d3126a1f0c8c9c12d3126a1f4593f284c98e281c3b9ff8981299092902a02a9ce99dcc29ee11539c449fa5290b286e9d1aa0de294b2d7b9d509edc29902fb79c309e3c2a6f30e29cc19f242aaf304a9e12a10e2aea30b1a08fa3482a04311ca29ca4292a4f317aa3d0a5de29a43117a498a68929cb311ea433a73329e83127a4b7a7cf28003246a414a8502856314aa494a8b027792d91a3b8a87e263f9b4aa31ba96c25c9a5cea28fa80325b9a4baa15ca4c7238ba2cca04b1a9d22b09fb89e69285020c4a007a04d2cb61c4f9e16a1902d4a145c9d0ea1722e8b9d609c37a00f2e1b9dff9a42a0fe2c6399169cb5a0222865110b9ae99fae9d3b1b5598179fbba2451c5797b39cb1a2231cb994ea9bd3a2071d2992669981a19e1dcf885c8ee29d7a1dda0c1416e5946c1dc10fa418ee11e41c61115719ec16a81c9411141adc18bb1ccd11141a2819ca1cf811051aba19771c8b11ef198f19381cf010791972190a1c9e10dd185e19711b4f1086185519461b2e103f18b518871a20100e187f183d1a7f0f541734181a1a1c0f0117f5178619e50e561691174019800eff152317f318450ebc15ab16a018ef0d1d15581667186b0dc314a5152f18300d9b1485151718320d2f145c1594176b0aec110b14e917740a0c1094105715740a0c10941057156e93d00b020af31e6e93d00b020af31e0596fd90e490791bdd9fa69a359dd5289ca1509b049c71290ba0af9abd9dc729b793579d249e9d29032ac49e6aa0232a532f0ca046a1232ab9305b9f21a1512a1631ea9ee4a25a2a513121a076a3342a7631eda01fa42f2ad1311ba22aa5fd290e3208a314a69529463298a3c3a60c29803280a315a785289132b2a38fa73b28af31c5a332a85228952c8aa29aa72927c6a3fba35ca891260ca691a34da8fc258ba452a362a8202527a260a23aa45d23d4a002a204215a22c2a0a3a1ef284220db9e23a1412c8a1c109fbaa02e2e2a143a9e71a01b2e1d14869e16a0542c4219609c81a08226711c249a12a0609c2c1d35983d9ecea2121d0c96a59c6ca2171dac94049aada14f1ecf9179957da1961ee5902788dd9e091e30832a146499921dad0c5717b292861dfc0f1d198a0f2f1d26105e19f514d21c6f1037196c17931ca7104e197618951c87105f191e198f1c571008192619381c7010ad18c018ca1b191051187d185d1be90f051829187d1adb0e9017d017691a830eab164417f619290e5b164217c719550dbe1546166519fa0c5f15d4150319860ca7147415e718590c1e14cb14b118790b56132f147b18620b1c13001449184d0a62127c130318170bfc115e133117fa0b3c129a13c716fa0b3c129a13c716c8898580fa84f686c8898580fa84f686e395978ebf90761a3b9f5b9cdd9c52286ea06b9ca59c89295ca13f9c0f9e7729dd9f3e9e55a01b2aab22199e48a0f3294a2da6a05da1d729e230a9a02ca31e2aa13143a171a3f729f231bda144a4192a29325da18da4042a7b322ca25ba5d429d2321ca306a671290b3372a3c2a633293b3360a3eba6b2283c3347a37ca63d28f431d6a2eda61528f92a02a320a75527c2a45ea41ea85c26caa3d5a230a8682525a215a356a89b24b6a1fba28ba8d922759f2ca2bca32322809f32a1a5253021769fbaa0822a26207f9ee89f6e2d8b1ed59ef59e992dd11ccd9ef49d122c3a1c379e1e9dad261d1ddb9a2f9c7a9c2a1d4397069a5ba5841e3298fa9bfea3261e6a97849b13a3111efe9407989fa0f41d6d900408ae9d4a1d08831f16fd9b851dc20a9218bd97741db20abe18a98f441d710cef18e511741d450d0519ee15411df40d061978171a1dc10eb818f817091d530e55185f17a91cfd0dea17ca164b1c820d49174116e91b270dd216d1155c1baf0cfc156b15da1a820baf150f151a1a1a0bf314b914b319b80a981458143d194a0ab313e713c418e6082b133c135c1893084012ef122e187d088811c611e3175a0869117611d317c506c8103a117e1701088e10f711e417f8080611ec121a17f8080611ec121a17868bbd826b10f88d868bbd826b10f88dd295418f17899e1900a05a9a269db62874a0f89be59c6f293ba1399c729dba2915a3019f26a1da294ea3999f71a0a329e625be9f1ba1c5291c2fd09f7ea2cd299d31649f1ba3242ab9329ca1a8a40d2a1f332ba246a5d8296033d6a19ca58f298c33c5a199a57029cc331da20ca62629dd3323a25fa6ea28103405a215a63d283f327aa238a74128282579a3f1a655279fa41ba44ca7b72626a58ea148a6bc2502a3f6a1e2a78c2550a3aea28ea638248ba1e5a272a78f2315a0c0a2559f9e21e29dcfa10525db20119e3aa1b82a2a205f9e5fa0cf2b4d1f329d3ca041293420c69d23a0901047200f9d9e9e93a31f1e5599599c94a4441d9898259c28a4b51dcb955e98d6a1811d2e9434938da0b61de5910f88669dcc1d338fd8122e9a001e718bfc156d97921de48272179f94c61da302bd171689901d3d07eb179d080c1d6309e7170c11aa1c190b591731148a1c770ace16c7143c1c0b0a64166c141f1c9209f915e714bc1b4a092a158d142d1bf508e4143d14af1ac3089514b912431a8c08df137b12bf1968067a1323119119a8031512c10f66198b0301113a0f08193d013510460e97182481d50e350e8c183a818f0eef0d8e18e4830c0d8a0ecf173e03a20dbc0c98167a042d0ddd0dad167a042d0ddd0dad16e880c708410b9485e880c708410b948561957f90d591c21aca9ffc9c499f9e2872a11e9dbb9e28293ea2169e2da04c292fa3989e18a11a2a8ca42c9f2ba11b2a13a4419f27a0ea296b287e9e91a2de29de3078a0f0a3aa29b43285a000a38e29db3315a1cda477291834ada177a56b2926341aa243a51d29453406a283a58928413424a29aa56b283b3493a19ca69028d531eea154a74d28051865a268a65d2760a48ba21ea67a2633a4d1a2e3a6d72535a2c2a266a83a2616a2faa162a6cf2449a1cea134a5f123b69ff6a104a5f021bc9fa1a1759d3720889e51a0b6243920689c809f8e284a1f419b7c9f1e27e81d469b179f5814271e219c879ef1a2851e149cee9c4da45d1e4599399c8ca32d1f3c987e9868a1221f2d96af93bd9fe71ead931208d99c651eff90be12d39a491e0a8dd5154d97ce1dea8a7e155794bd1d718afa15d191ac1d41879915848e4b1d2f02e6150a082c1d0106d016af10cc1c8b084f16be13a01c4b08f1152b13481ce5040c15be12071cbb044414fa10a41b7e01fc13ce0ef91a6c01ab127b0ea51a56016b11690b541a3881f610eb0a9e191b81a00f190af418fb80b70e85034a18ec80030dee089b17de80d20c4d03a317e100de0c3a030f17e800720bf902e116e1003b0b11089d165c84ef018c02d8165c84ef018c02d816578ac701fe80f586578ac701fe80f5865a9561907f911f1b6fa0639d6e9fc82806a1269ed39f9929d5a1389e12a07f2938a2c39e8ca0f02943a4d49e1ba11e2aaaa3919d38a2002a61a21aa17aa2bb29ba2cdda031a33a292832b0a067a377291234bca04ea4442974346ea1f8a434297134bca110a5ed288634e0a170a5d228a03435a223a549288f34dda12da6812826300ea201a6f927c4a165a2c5a70527afa227a3eaa74726eca213a3dba7df25c4a1d4a2dfa7852598a119a271a6602499a2bba106a619241da2bba13ea5bb224da006a11aa43121fd9c83a0569bb020859c7ca0231d70200c9ea39f368f4820829cd89e14a45c20f39bc39d73a3501f8b99ea9b11a25f1e1d99b89bd4a1fe1e6598b1991ea19e1fa995de911b9eca1f5993850e999b661f609070146699a91e7a8eeb143a97141ec28c85156094191e938c1e160192da1d638a9416da8e911d0d8a42165888911db189df151188351d3d89b7146f87ff1cca884314c286551c3e8abf12b18c011ceb8960115c8c721b538b3210248c121bf88a280e838ead1a658a280c4290ee195f8bad08ea8f8319fe8a5608448f5219b18ab502b18ee618618a88026c8c8918478a6e02f98d6018f9896702e38d4f18fb8952820c8c5a186e8424024490d914438810891f8bf016438810891f8bf0165780d007140aad845780d007140aad84f3956394c094d91a26a0ae9eb0a04c28b9a0659e769f42296ea1549e6ba0382917a2c99eb6a07b29fca2c59f74a1d92922a31aa000a2de292aa521a1c3a3032adea198a03aa2a6297a2e5ba04fa2fa280b34bfa17fa5d929da3482a25aa53429ef34eda299a6922912354fa294a5ae281a3561a2b3a52a28ef340ca237a67d28642c4aa2aaa5a527aaa4d3a2b9a6e6267aa4ffa280a7162657a26ea2e2a7e32591a149a2c9a74725c6a1c8a1a5a68324c4a183a1cea5b023a29f8ba1aea69922b59df1a16da79422889f23a084a2b2201f9c9c9d1ea0c720e19a9d9d749d5420629ede9d9da16720589eec9c84a35a20549b369b0fa35620159bc498c0a18620e9986d95339f9c1fdf96c28e9c9db01f92957f0e3e9c791f0d949214de98ed1e2c911817d594631e9c8e86177f92561ee38c34179b8f2e1eb18cef16458fe81d148ad5150d8fba1dc38bac146691891df58a3413ca90e91cfe8b4d11e0914d1c318b7b0f5d911e1c488ced0c5a923c1b2b8c7909e691b71af78c75037f91901abe8c39834a92261a838c8b88de91bc19b18c318877911819308bbe87fd90a618528a4287b48f63188a8a1287608f3318ce8a0d87859002181c8cb3898d903e1849893089e3944f15b38a0d8efc8d7b17b38a0d8efc8d7b17608552060208748460855206020874849195fe925b926719e89edc9d00a05b2898a0419e03a017291aa1699e7ea0272935a2e79e7ca09a29f0a2359fa6a0cf2905a4d59f19a1c22954a36e9fc3a2232afea2b7a10ba272294d9efca146a35d29ef3014a16ea563298b34d6a116a5c628603562a29ba4d6289235b6a0d7a30b287e35d8a000a66d2842346da31ea76f28fb9843a354a6b727ffa1b7a23da6b626e2a286a206a65926c1a2dda10aa6b72538a2bfa142a6492508a175a156a6bb244aa071a193a60a2411a054a1e9a518231ea096a0fda47a2158a0659fcca3ad20399f9a9e0aa4fc200b9cc09c29a1cf20909bc59b72a13420a89af79a4da48520e699249b3aa32620a899bc99b7a1d81f3a995b9505a00520199890083d9dc01f35959813e799471f9592de164e95041f75919d174793bb1e64903f172890c21efb8fa916b98f471e2b8f3716318fd81d888ec215998ea31dea8d9714fa8d1a1d8a8d40147d8dea1c098e6b112b907b1c738e9f0a6591251cbe8f208ae193b41b688fb88c0c953b1b3a8f2b8e4f95b71a718f5b8ff794481a068f3f902695d419748ef58fc4946619ea8d7e8fd7933019778d288f8093be18128dce8ff39265189f8c3d8f349314189c8d019070934317d48c7e8fad9233179c8df888b68c39169c8df888b68c39162c044a10351125102c044a103511251089986c950897471e989f839ffaa0d72747a0bc9d1da0a5285aa0e39d0fa0c6282ba1309e57a01a29c2a1ef9d39a05e2931a20f9ea0a05b29fda23c9f9aa18f297ea320a14ba21029e1a288a345a439290e21aaa01da54029e631d4a140a5da282935caa2c3a4a028b23511a2a2a5ba28663589a1a6a54e2811318ea24aa60e2896a221a4e7a69626fca14da243a66e2663a23ca296a6162688a205a376a681251ca2eba279a6392599a18ca293a6b82444a1f7a185a65f24c89f47a1eea6fd23929fd19f8ea5c421b39d339ef9a36d20539fef9d6da4ca206e9e8c9ef0a14820119c659d9aa182203d9c6f9ce2a1c51f519cf099a6a1e31f859a39920ba00b206c99d508e39cdb1ff995f80e469abd1f939229177295961f5891d518da89c51e5a909e19b389971ee78edd1981895d1ede8f09193289561e918fd817528ff21d0b90b5159d91c21d6e8fc7139f94861de98f770e2b950d1d9c90c0048695901cc090818d99962c1c749198907f97ad1b3c92199287975d1b259255938497c31a1a928c938197411aa991cc93f996cf1958915c937e966819c19094930a96081943903293bb958f18d98fb192c2951218ea8f5f927a95bf171290d192de946517818fe492d9940017478f449311961116478f4493119611169603e50c990d0b0e9603e50c990d0b0e50984996b296061d94a004a06fa17c273ca09d9e60a0a42828a0119eda9fd4286fa0be9d739fe628f7a0e49c0f9fea28aea1f89c299fbb28b1a2249f05a18b28dfa160a02fa4c3283fa423a22aa587288ba443a3b1a45228e51c96a232a56328f6305aa21ba586288d3404a217a5a828153392a0f2a43e2811266da1caa4d5268ca00ba24ea67626fba272a21fa6492656a3dca2a5a6d7259da28aa273a67f251aa22da225a6352563a188a192a5ae248ea015a145a52624b59f90a0dda48923c39fa99f6da4bc220da01ba0b4a3bf21f59fe99f76a47721ef9d35a01aa68522d69e8a9d78a49a21f89b299c4ba15a204f99e29a09a0e31e0398ed88129b471f4b952f155899321f889689880f9d161f169429172497f11e9790291a2b8abf1eaf88691b6a10ce1e8b88fe1ae812641e7c8e9d1a9314601e8f8f57195114521e3290cb16f78e3d1e55909d12fe96c81d5e9068053798551dd69156904399261dba924094ee99991cda92d2941a9af31bf9926095059a651b6893e995e399d81a8793f095c6995d1a2393df95519995199f927795d5985419ce910d952b98d9180d91b794b4977a18809058942497ea170d90d9938896a717bf8f1d94b8961517cb8ddb9292955e176d8c8f908493b3166d8c8f908493b3160000e7150d18ae0d0000e7150d18ae0dd89d989f57a1e12601a003a1a4a24d285b9fae9e8aa02828259f189cc99d6128b09fa998ff999f28b09f6495e098a7283ba0e79a329d7528a3a107a06aa26028a8a253a167a45c2884a257a2aca4602845a149a2b0a34b2814a415a368a4f8277fa254a3c3a62728c32538a15fa3de26902206a292a4992656a06aa2afa598261ea468a247a757264da1f2a176a5c225d6a0bca13aa53a25f2a020a2a0a5e524eca036a2dda58f24c7a002a22ca623243da04aa1e6a53f23119f62a072a5a622599ed69f11a51422779d069f08a4af21709d399ef4a35821359cd49c7aa13a21e19b5a9a7da0f8202b9c1b9dd1a14820389c819bdda1e21fb49b7b980ea1181ffc990194939e261e9597ec136c9caf1d6496d0182c94a21d0391121c4a17461e7e03571d671b6d1e5383171daf1bc51e8388951b1a19a21e0d8897197214831e338c2518f18e391ecf8d99146498cf1d299130856c994d1d29937294279afd1c1e94ae95689ac11c6994b896ea9a2a1c4894fe969c9a931b4a944a975a9aa61a0b94af961e9a1e1ac6939e96a899671956932f963199f618a792b3958498b9185892b49539986b185b9278950a980a181d920c957b97d8177292ea94399793170f9196940f97b7169990f0946a9742149990f0946a97421400000d135216e28400000d135216e2847f9ed2a014a25626b69f04a15ba2392701a0ed9fbfa11a28949e9298f19d9628679d2a1c71173c28379ecb1c1e1c1228cda1a8921f97be2749a21e9f4ca19b2739a2a0a007a4a527eca273a255a5b82770a4efa314a5f527c7a278a36ca5cd27aca508a4b5a5a22773a4eaa3b6a52827a9a080a14da48e261aa141a20da5c32638a476a3aba5cf2559a3d1a2e8a5782586a2ada225a6222535a276a2f9a5d224b8a151a2f1a55e245ba1fba112a61224b2a014a1e8a58b23aa9f38a028a53423a29e4b9f2aa47a22349e189f33a32622f39c969c37a1fa21169c469c5da0f3213f9c3f9c6da07021bf9bce9bb0a0b020d39bd59c7da21220779b899be9a1ea1e0b9a579871a0481e48965016449beb1c468e2c1cee155a1a4109981de91bca1c1c0ebe1e171de81db20fe11efd1c961e06095c1e0d1cc11e898b311c9617121f9890d9158e913f1ea5924a85ed97401d5093a192e598001d27945395a99a8b1ca994ea974f9c211c2795ed988b9c1a1bfd94f298899c9c1ad694de98469c3a1aba94a198d09be61956946b986e9b9b1901940498839a1719179345979999c1185292f896219986183192b896e9985518b89128968298e9177291f2954298d217da906095b5975d177590e494ca9687157590e494ca96871500006411cc16288600006411cc1628862aa085a107a3b7252ea0f1a337a58127689f4ea08ca18c273c9e4392e8967228d49cc521c7222828bf9de7215721ba26e19ffd12290e422699a085a037a27526d0a19ea37da5a82617a23aa417a618274ba228a42ea67e27b7a215a449a6c5277ca2fda3c4a57927c0a231a330a52d27d5a2baa2c0a4172730a220a1b6a47326fca089a178a49a25b7a1c0a11da54125e1a036a2afa5d224d4a065a294a53c24eda0dca110a5602303a047a1f5a4d322909e35a073a452228f9d7e9d52a3c721879cf199f6a07921569c5c90699f7e21039e0395689e0522df9b5f9aed9f20227c9bb49d03a2c8218a9cc09eefa29d21269c2f9ec1a2be204f9b2c9d0ca2f01e5f9a3d9cc9a01a1cb0981994d29b5b19b489ab1d791a9c19461305212320b61afe14612145219b1d74152c211921b91ec9141520d41e381f1e8be41a76179d1e6594010df39a7f1e2d965497469d0c1e33967498059d3b1d40961299a79c781c8f95ff986b9cdf1b90953b99619c461b43955899459c941a43950899089cf219db94ee98e69ba419a094a9987f9b1e19659470982a9be418109437988f9a9f189a930198589a7918c9924a97059a0c185092f696c4995f175f92b2964a99a116ea9183963a99ea161e9112967598ac151e9112967598ac1500007d155917b80500007d155917b8054a9f02a292a3c724b0a0e1a28ba4e72562a06ca3eba4c826df9eb79ef0a0db27c11c86289a297828f20821277a28fd236fa02b9ff5a0892420a36ca4eca50e2665a238a4e0a58226dda171a442a682266aa2b8a49aa6fb260aa4eca402a767270aa48aa3d8a5982722a26da146a4c62735a1fd9e89a18d27a2a2a49d13a06a264fa1b69e6ea15b256ba1eea0c7a3702465a18ea1a6a4bb23b2a09ca1bba4b0221ba0bba1b9a49e21c09f19a1b5a420212ba0faa027a4962071a0609e9ea2871f889ff59668a08a1eec9a141c5d9d4220ad96821d7296ee22ab9a0e97029ffe23929d5ba126a57a22b99ea5a00ba42c21c99ed4a093a31820cc9d5c9fc0a24c1dba9dae9d60a12a1b1b9bca97da9e13186391ca1b31164f11cd177a22c3221b153c1a5324d224ed1bb7194624bc242b20f813c1207d20ed20de9560173a9669205097bb95c79b1b1fe596ec99459d7d1d39971f9b1e9ec21c1797399b8e9e571cc496319bb19e041cea96d59a299e651b9e96779a5f9d721a2b96139aac9cc3198c95ad99589c1f193c9594991e9cda18a59411998d9b93180b948698df9a481868930c98529abd17d292c197fb99531784924697b899dd16a592569770998716e591cb963399c416ac90679534985a15ac90679534985a150000701af81b0f190000701af81b0f19c59b869fbba0b121e79f57a348a4e32422a071a3cca48724229c62a47fa67e258fa0e3a0d3a26b25afa335a79ca87d29ef9f9ea434a72726f3a152a428a6c72537a154a4f1a5aa258ea19da452a62026cda183a44da619264ea2a0a488a61d2600a3e4a4bfa66926b9a2eba3d0a5102792a01b9b01a0c5278da3a41e9a1e1e263b9f2f8c399a6522d09f3aa1c4a3822128a032a306a6372284a0a3a3aaa50c226ba067a3faa5d12193a0bca3aea56f213aa01ba375a5cd21f09e38a308a69b1f2c9dc5a17ca4531fa59ae3110c9ab61dec91ad1da51dce23339ed9a2e0a59e21f29955a1dda4261ec09dbaa1e1a4391e219f77a19ca4711e609dcda03fa4471e189c5fa0e4a2981cb89a519d8ca137188d9cf59ae19d6009f71559225223cd9d9e1f1e28f4285c14711db426062879225d91e01d021cc721b996e398ae9f2b203798109caf9ffa1da898ed9bd09e081d5f982c9cb39e431c4b98029c309e7c1b1e986a9b9d9dca1aa697329b889dff196a97f39a899ddd191e97c09a669d77198f964e9a399d0919ef95fa99d99cad18bd9538994a9c08186095f498119cd5173495a398bb9ba217be947f98609b171734943398c09aa916f39304984b9a361686922197dd99d9145c92ea960f9954135c92ea960f995413000000003f136b80000000003f136b80369ab39dad9f861fc29ebca234a48923a49f4ea397a46e238d9c169feca089208a86718d0b8b271d579d34a0dda1582395a29da44ea67a2535a259a445a69c2551a2a3a467a68f252fa29ba462a6a0251ca27ea43fa681250ba277a447a65825b7a19da49ca6422517a231a56da70a255ca26fa50ea88524f3a11fa5d7a78b222da1cfa435a7ce22f3a07ea4c7a67623f6a056a476a61e23b1a00aa424a6072387a01fa44ea6a1228da026a448a66b2262a013a43fa60422bd9f44a3b3a59221ad9ef0a1b3a4be20479d4da02ba34f1ed99b609ea5a10d1b069c049f3aa22e1acf9c36a0e7a3a11b119d81a01ea4251cfe9c5aa00ba45a1cd39c64a0faa35a1cb99c5ca0fea3951c939db2a0c1a3181d119bd29ea6a34b19ea96c29ca1a0c0974b24522ca92db3a1dc1cb525e427d6250a91699c95a0741de798fd9c93a0b81cdc99ba9d81a01c1c4099459d1ea05e1ba798e49cb89f9e1a9498ac9c5d9f081a5098649cdf9ebd192c98239c7c9e8619e797bc9b179e0c192197219b999dbb1834965c9a179d2e189e95f099b29ce117049589995d9c7b179c944a991e9c361751941199b89b46171a94f698469b0417f393b798e39a221716948b98879aee16e89230983e9ad915f191719672988215f19171967298821500002c157818ca0a00002c157818ca0a9d9d86a157a3c522619ee3a1a2a3d4226e9e7ba135a35b22879c299e02a09d1f239c1f9e26a04b207f9fa2a2bea416249fa040a4f4a5d82439a16ca42ea6062588a17ca43aa61025b3a19fa445a61825b4a195a445a6012595a18aa429a6bf2446a289a424a6932423a3b1a46ca618248a9fe5a10ea4eb20ae991d9e83a0261ec39dc0a13ea4032105a01aa499a54a224fa032a4d9a5382212a005a4eca50c224da018a42ba6f4219fa00ea439a6d821d9a00da449a6a82106a196a3dda5412100a0bba249a5f220389ea3a196a45820d99c8aa020a4ae1f679c959f43a36b1e9a9d389f3ea2351d979d7c9fb1a2ee1cd09c1ea019a3de1c5e9c35a0a5a3991c3f9c3ba0bfa3711c1f9c20a055a31d1c1e9c16a0dfa2891b149c339ff3a1ef1a5d0a9510cc1123105d01b486688c30856c9bea9cbb9f4316339ab99eb8a0f51a8c99ac9d63a0511a5e99309d0da0c219e498ad9c849f6f199598659cf39ef418fd971e9c759ec6186897c39b169eaa18ba966d9bb39d89184d961a9b699d2e18cd95b09a149dfe177495469ab99c98173095cd995b9c2817fd945499039cba16b894e2985d9b4f16c194a398b79a0416c1945598509acc15dc944e98e299881538940898e199f614ba925b973e99ca14ba925b973e99ca1400004916a018538900004916a0185389b79deaa181a3fd21ce9e70a20ba43e23709d30a055a11621e79bca9eaca04f20779c6da042a29721aa9fa1a28ba4fd2396a0f4a35ea58124d1a018a4b1a57624a3a02ba4e1a54b24c2a04ba430a65f2420a17ca471a665244ea164a488a676243ca142a452a62424f4a065a329a5d022b79ef1a11ba48921289edfa1e4a32a21759fa6a29ea4a5218da072a320a5ba2182a08da363a5cb216fa077a358a5882125a034a35da55421f49feda234a5f420879fb2a214a5b120eb9e43a2dca46b20639effa1c0a42f20df9da1a185a4d21f639d43a15aa4641f079d09a127a4271fa99cb1a0c4a38e1e7f9c72a031a3f21d2e9c52a0f4a2761deb9b0fa0b3a2101d879bdb9f73a2c01c439bae9f5da2b11cab9a4b9f6ba2781c5b9afe9ed0a12c1c9c981e9d5c9fe31a93933a99c69bbc187e942b9a469d50161897289c7ea01a1465988d9c99a067153198759c01a094173398839c989f921846986c9c779fbc185f980d9cda9e7e183098659b349e1018fc972a9bf69df217a797d89ab19d4e17e796849a8b9db7164a96419a579d97168295029a159d00161a95a899aa9c1916a5943b994e9c17164f94eb98039c751518949998549b331510947c98b89ae01484933998da9a4614119323983c9a7715119323983c9a7715000000000000000000004916a0185389b79deaa181a3fd21ce9e70a20ba43e23709d30a055a11621e79bca9eaca04f20779c6da042a29721aa9fa1a28ba4fd2396a0f4a35ea58124d1a018a4b1a57624a3a02ba4e1a54b24c2a04ba430a65f2420a17ca471a665244ea164a488a676243ca142a452a62424f4a065a329a5d022b79ef1a11ba48921289edfa1e4a32a21759fa6a29ea4a5218da072a320a5ba2182a08da363a5cb216fa077a358a5882125a034a35da55421f49feda234a5f420879fb2a214a5b120eb9e43a2dca46b20639effa1c0a42f20df9da1a185a4d21f639d43a15aa4641f079d09a127a4271fa99cb1a0c4a38e1e7f9c72a031a3f21d2e9c52a0f4a2761deb9b0fa0b3a2101d879bdb9f73a2c01c439bae9f5da2b11cab9a4b9f6ba2781c5b9afe9ed0a12c1c9c981e9d5c9fe31a93933a99c69bbc187e942b9a469d50161897289c7ea01a1465988d9c99a067153198759c01a094173398839c989f921846986c9c779fbc185f980d9cda9e7e183098659b349e1018fc972a9bf69df217a797d89ab19d4e17e796849a8b9db7164a96419a579d97168295029a159d00161a95a899aa9c1916a5943b994e9c17164f94eb98039c751518949998549b331510947c98b89ae01484933998da9a4614119323983c9a77150000000000000000000000000000000012997a98c2998a1957254e191e1e3227e129a81cd81acc280b2c871cbe1a1a298a2d562023205a29592e88217821b1289e2f2c22d6234b2870305423d624cc28073080221025062964300b24642515295830b823fe24b228a1300424512593284f30522185223a29da2ea6a840aa7728283022a071a15d237d307f9dae9a0423572d4aadfdae82242c2dc5ab8dac7d28da2dd51a98259825222af11fe02933168b23c11ec72ad499421ec31f112c07a1681c4f20d82c2da5761a1e1f272deaa5201a7b1e8b2d20a68f18901ebf2d1da6d0175c1e612e5ca54e14b31b852d35a5299f19a8df256c9b05a7b0ae60afd99c34a53dad03aeeca5621a2820452432983a1bbb1fe6210d17ac17371eb7203a198318de1e99208e1a1918711e98203b1b5718641e6d20c11b0118f41d4220d81b0518ce1d1920eb1b2517411d831f6e1b9516291df91e621bdf15b91c7d1ede1a5815711cfc1d9f1a1a151e1c881d431a1b15e71b381de919d1144b1bf81c87198714f71add1c2a191914731a9c1c0519f2131c1a4a1cca187113d8194d1c941870139b19b81b3818f4122a19961a8d171a12ae18f9192b17f3118518f41925171e126c18d0192b173c128918c6191e174b127018be19e516b71126186b1962167f115417ae184916000000000000000012997a98c2998a1912997a98c2998a1957254e191e1e3227e129a81cd81acc280b2c871cbe1a1a298a2d562023205a29592e88217821b1289e2f2c22d6234b2870305423d624cc28073080221025062964300b24642515295830b823fe24b228a1300424512593284f30522185223a29da2ea6a840aa7728283022a071a15d237d307f9dae9a0423572d4aadfdae82242c2dc5ab8dac7d28da2dd51a98259825222af11fe02933168b23c11ec72ad499421ec31f112c07a1681c4f20d82c2da5761a1e1f272deaa5201a7b1e8b2d20a68f18901ebf2d1da6d0175c1e612e5ca54e14b31b852d35a5299f19a8df256c9b05a7b0ae60afd99c34a53dad03aeeca5621a2820452432983a1bbb1fe6210d17ac17371eb7203a198318de1e99208e1a1918711e98203b1b5718641e6d20c11b0118f41d4220d81b0518ce1d1920eb1b2517411d831f6e1b9516291df91e621bdf15b91c7d1ede1a5815711cfc1d9f1a1a151e1c881d431a1b15e71b381de919d1144b1bf81c87198714f71add1c2a191914731a9c1c0519f2131c1a4a1cca187113d8194d1c941870139b19b81b3818f4122a19961a8d171a12ae18f9192b17f3118518f41925171e126c18d0192b173c128918c6191e174b127018be19e516b71126186b1962167f115417ae1849167f115417ae184916a394459a199b4012a394459a199b4012641b9ca3f3a2bc269f2608a454a5152ab32a5ba37ea4a22a062d08a10ba3192bf72d249d1a9f5d2b5c2e9496a099612b3a2f9018ae17de2a2c2fe21a331c412ab62f4e1dd11d4329002f691df21d07292b2f361bbe192f29ba2fdca1cea39a297e2f07a979aaf3277b2fa7a809aad420932f67a8dda9009b662f3cabb0ac58200a2f9daa5cac9026cc2d78a5bca6fd2730299c9e781d6824dd1e6617e4260e1fec88f119942907a0050dc9155b2b3ca4590f2114042c529fb20e8114942c11a0e0900499462d19a1fd963ea1792c94995b9d9da6ef280f9df4a099a9249f199d61a232ab45aaea9f87a1f1a9c0aa7ba3ac980ea223a48b9e18154018fd156b9ada15051c2f1caf94cc162c1de61eb30f0318e71d881f6417a318951e51206919d317451e3220361a0417d91d931fd91a4f16341dde1e571b1316e11c711e0a1bfb15941cd61db11a7115251c5c1db81a3e15e61b211d6d1a3915881bdb1cd419af141e1b9d1c88196c149c1a421c4119fc131a1a181c0c199c13dd199c1bd31838138e194c1ba018ee126719e11a7c187c122b19ca1a4d180812ea18601a0b1886116d18a819b4170f1116183019f7161111e0170e19c91649116917e0188c16b0101c17d618ec15770e8614b715b715770e8614b715b7158f986f9deb9d31188f986f9deb9d31184b9212a19fa20d282724f99faaa26d292d29eea05ca25f29412c1da0d2a1b129182dda9f61a16d2a9e2dba9d93a02c2a132ef99e659f5f2a5c2ed29c439e6b2a522e189c709ce629e12e119b389bc429462f939f94a1bf29892f46a3bca42929d62f22a632a80f280c3018a881a99425373023a895a9a5232c308ba893aa1e23992f9ea84aaa9b25532d6ca678a897260a2773a2b5a36c2410990c9e4511ef1d0e9c569eb920169d679a089f492692986c99f29d2a2979a3739aa59e852a29a2f899d5a07b2bd6a52a9bf0a3112ab2a50f9e62a60a2751a4e89e05a87f9217a2599f00a8d7a601a1089d0aa601a883a17f9a91a3f1a5529d5194689d6fa18c98bb11c7142094990ab215361b8e19a916f616301d231d4b199617ab1d431e681a7717c41d171fb01aee169e1df51e131bf8152c1d421e951ad615c41cda1d801a8915951cb21d7c1a5415561c911dd01a70152f1c531d841a0915ac1bf31c5a1acd141e1bb61c0c1a7a14941a751c751936140f1a191c2b19f4138e195c1b061934134f19ef1abb188e121119761a69181712b718de1922185b114e187a19ba17e310e917071955179e10f8167e18b3168e10b6164e18aa16a3106916ef17c2159e0fdc1551181e16a8104f1668181a15a8104f1668181a158c82968bd88c83158c82968bd88c83156097b899e99c0128191b1a9eb89ffb28b724ec9fcaa05429242acc9fcba0d029b92c7f9fc4a0702ab62d3a9fcfa0962a132e329fcba0902a752ef09e32a1052b752e919e83a0ee2aec2eab9e709f822ace2f1ca24fa41d2a2d300da4d9a5ea29423083a5b8a715298d30f4a580a81228c630a5a64fa9d525a13038a786a975252f3057a645a95825832dd8a401a83325e52447a232a5652449a00da3e0a43422d09effa0aea23818409d6ca02a20919beb9a259fea25579fe79a0ea1f728399c3c9c5da2d129259e7b9df7a3db28bfa0e39c09a56a2661a1389da9a5311e919f649d49a5d6a3dd9c069c38a41aa6b49b2b9949a1b8a4dd96f695729d14a2868cfc883e954d9e8816001187143d95dd1859137a19a014481ad214641b331aca1a81158d1c1f1deb1ac515d51cd21d811b7915ca1ca61db01a5615941c511de11a19155b1c241dcb1ad0141b1c0a1dc91abb14ad1bd61c9f1a3f14221b631c501ac813961a1f1cee190213021acd1b9c19db12be19341b5f195b125219ce1a1419ee1108196e1a8f18b411ac18121a4e186d117e18b2193e181811551860193418b21005184c19fd1794109d17d418d617b5104717c918c4177710c4168c1860171c0fda156f17c516dc0e1815b0160a16dc0e1815b0160a16649b539ca49ded1c649b539ca49ded1c03a0cba10ba2e719439ec79e79a16728341fcf9bb59fa829ca270da04ba1c429062c769d65a0422aef2d879c799f8a2a832e3e9d629f5d2a182fe19cd09fa12ac82e1f9f8da0c52aaa2f5ba08ea29c2a1c300ea2aca44a2a703039a440a6b329a130ffa498a70a29be3060a540a8a428fb3095a590a80828ff30ada598a8982775309ea5e5a8c1263e2df2a492a8b325a52070a253a7032511a468a3c9a6f023a4a104a405a88f2100a0b3a36da53318539edfa1831ec911f59d3ca25725bf98ef9d90a30227409c589f15a45d26bf9d4b9f34a49f22049f039e3fa43c91e59d3a9ce1a321a4dc9d5c9b6ca204a6579b609835a0c8a5fc98b896679c16a42b96c59126999da1620caa0d870e329d5316de119b186895911a9313cd1adc14fb1b3714691bcd19a21b33145b1b7d1a011b2114551b1b1ba61a1814151b761b081b1214e81ac91bfd1a0414c81aaa1b8b1a98139c1aef1b851aa2133a1aa01b531a1b13da192b1bf319d3128619f51a89198e123719771a26191312e618001ac71879119718b1198718e7104e1869194f18b910d91728191a184a108317d318351816100f179518fe179b0f3f1616181517670f0d167717c516990fa6152d178216db0e5d15c716c815580e85141b16bb16580e85141b16bb164e8ee490f08fb7174e8ee490f08fb7174994720cc78c5d1b8aa0669bb89aec28ea9fe19c389ff929bf1d339ecaa0bd296d29119fc3a0382ac42dbe9e569ea92a1a2fa29d0ea0b72abd2fd49df2a0932af12f12a06ba2792a7330a1a034a37f2ad130f6a1c8a4962a1a31b5a3fba5492a293135a4d5a6682953318ea480a7c4288031c1a40ba84d287b3116a595a81128d1304ba53ca97a27d82cf6a4c8a83f2676130fa4cea73d25c5a2a2a200a65a24d4a1aea210a8732289a19aa377a6791fc2a0f3a2a4a0ce1e3a9f2fa32f18f81ac49d80a2ea230892b89d5ba260257498759c05a3b5215f916b9ceca24f104f900a9cfda15ea30e15e09914a1eea42c170c98549f8ca45e19fa94789c89a11f1a9b91f39827a03d1b418c848e469d021ce5088c1419991e1ca70e8b16cf94e41b5c115c19cf0f111c5313db1a8918141c4313111bf119011c4313ee1a8e1a751b1c13e11a2c1b051c2413ce1aab1b0b1cf1126e1a881b881bab12351a301bd51a3a12a319c91ac91a0e125b19a11a521aeb112919571a0b1a9311e218fc19b5193b119f18a2191b19061127184119c3186210bf17e0186c18a00f2517671833188d0f99162b18f317cd0eb3159c179c17360ec8150f170f17730e6b15e6168b16680d8214f215ab16aa0cd21351155e17aa0cd21351155e173d8b1d837503fd173d8b1d837503fd17859605922e94a71c719f2c9a3c99212953a17e9dcc9edf2934a0a89c999de229e123a79e16a0422a732cb19ec49f6c2a6c2fac9dc29d7b2a8130589e63a0262aed304f9fb7a1282a353151a1f8a3692a6d3139a2b1a4762abd3162a3c0a5292aec3105a47fa69c29053226a45ba73e2947323ca494a7a3282d3232a401a81f284731e7a337a875277a2ca7a341a81c268ca052a4a1a86925d9a413a435a8dd2459a2c4a2aba75523daa181a353a7862196a098a2e9a4e51eafa0d1a27e9e221cd89e9da2e7905c17a19db3a2291aee90d19d96a28710cc969a9d11a2649edf8f549bf5a068a5c90ee39a8fa0f2a5f818ee9855a0d6a48c1a9696449ddea2451a0d95039c69a21d1c9d92d598e7a0ca1c66836a0e449cad1c1e0d32173790be1cd80ec1182e14551c1d11e6191617391cc5112d1aeb18031cef112b1ab419171c3712281acd19a91bc711051a0e1a4e1b19118619e7190a1bc61031197819861a78109f186c19681a521057181919b719c50f24188c186e19a00f721743185d19310f1a174318c718e40ec316a0178d186a0e0f163d175218e90db315c0160718670d11156416a117140d7414b715e6168c0c55143115bb161a0d3d14b0142f167b0985112c14ce177b0a4110ab11d6157b0a4110ab11d615c18fba91a58ed416c18fba91a58ed4165196a4926d91c81a07a0229ab79c3a291ea2849b2c9ca82981a0c29c7f9f342a3f9fc49eae9fce2954272fa032a1392a762e25a0b0a0532ab93052a0a5a1da2a4a3165a070a3bf2a8031a3a01fa4652ac6318ca193a44e2a2e32aaa2a0a5062a6d32bba31ba69529a13213a4f4a62029cd32efa352a79628e63228a4dda76a28de3142a30fa86f28452b0ba2c3a6f9267ca304a45fa75c263ca50ea4e6a7a4255fa35fa375a89e2423a158a301a8fe22eba076a3fba6712122a052a3e6a53a1f789f75a208a35d1c0fa0cea18f9d121b439d47a137a1f31a2a9c57a1dba3f219e89b53a143a5961bd999eba0c5a5ca1b5a99f99f9ba4c91b9897759d49a3db1cd5941d9a01a25e1d2d938b95c1a09b1d6490700ebc9cbc1cf8881815c497691cf00a8b171490961cdc0ec118b30fa71c401068190d15111c7c109c197317b31bbc1054197118b61baf106d191719bf1be5105c1926199e1b8a10fa18cb18181b2f105e18de18ad1a1c1016188718351a110fad17df17d219b00ec816e017af19a50d76164a174419800ddc15cd16ea182d0d781550168f18ba0cc21477157c18050c7d1432154218f10b071494141518bf0bbf135b14c317560aee1271144a175d0afb11f5136716ff0ac011d6120516ff0ac011d6120516258c4c8d398c398c258c4c8d398c398c5b969391d290061a1ba0b89c5e9da028bfa0119cbf9df629e9a1fc9c459f042aaaa05d9e4ca07e2aca1a2c9e459e502aed2ba6a056a11f2a9c30f2a0c5a1012af031a3a1a4a35a2a4a32b7a17aa4fc296d32d6a1f6a4dc29dd32b4a2baa5ab291a3367a32da678296433d9a3bca63e298c3307a409a7d128a03369a31ca78b28fc317fa3f9a62228ef28a1a3c9a7f52670a367a47aa8de2502a33da3d6a7fd2470a2d5a395a86c24bca108a4d6a8be22f6a007a431a8bb215ea1d5a31ca6352018a145a2dea40b1f699f37a15ea3ea1ceb9d23a13ba4671a309eb9a08ba4ea19ee9d05a0f5a4431abc9ad19e21a5971cf098b69ce7a4b21c1c98869cf8a27d1cea96299be0a17d1cac94e79626a0401c84900208319e321c17832f16149c781cf00a2f185996691cdd0ad21805898c1c860cfd181114801c740d1719f315bb1c2e0e19198f17681cf90ec81801185c1c770eb7187b17121c1d0e5818f1168f1ba30d84172b17fc1a350d0717a9167c1ac70c8f162c16021a8d0cc215c2159a19660b641555153119f30a9c1464148518740aa713fd131d18ea0818135513fa1793083512ff129d17a3089711df113d17f306821199114617a706cf104f11e71657069b100d124c17c307ef0e72111517c307ef0e72111517b18acd83d4082c8db18acd83d4082c8df195d08f3591471a27a0cb9a599c1d2900a1399c5b9dcb297aa10a9d0f9fec291da400a08fa1512a1ba3d29f52a2c12a87204ca075a3742af92d35a1bba2f629ba315ea0b7a1112af63222a263a4412a43332ba276a5f129a73347a2bda5ae29c73342a2eca570291234a4a254a64629213452a267a6b82837341aa22da63d281e32a0a253a756285e21e6a3e2a7452728a485a474a8b326c6a4d9a2eea69a2580a3c2a2eda763258ca2ada3a9a7272420a1cfa368a8ee222ca0f5a32ca72a21359fd6a10da60920c69d77a108a6321f169c20a142a65d1e269c79a07ca4121d859ca49fc4a4d61cdd9a1e9e54a4251c0898a39c5ea4d01c0798359cb7a3831c7995479909a29c1c9094c2945ba0e31c30933588f49cf41c7690ec12af98dd1c988b16163496a71ce8829917ab92d61ce20756181e89a41c3a0a6d18070f3f1c6b0904181911e71b0b0bfe172a14a11b7e0a6e17bb14191b300aff163215fe1abd090c16e614981a6909b1158e14221a0709e2144314bd19bb089c1409146f1997085b148c1235196d0658132d12a118fe030d12bf109e185d010411e60e50184101080f6e0c19181981880d4f0cf9171a01720ecc0da9172d81fd0c8e0ebc160c01990cad0a8215f880cd086c0c8715f880cd086c0c8715818c78816f85578a818c78816f85578ad3942d91bc93171cb89f239df39db62864a2aa9d989fbc2933a3459fe5a0de2912a4949fefa05a2a12a5e39e44a0722a83a4f39e6da1692a6725c39fd8a2262a7630e3a01aa40e2aef320ba2f8a4762ad53333a28fa50c2a27347ca2cfa5a6294034b3a2a3a546297134a4a2eea5e02897347ca28aa56c28a5348ea1ffa5512882317fa150a772282b9557a2cda63227e7a3d8a3c8a63d2603a4b7a330a7bc252ca205a3f2a7a52546a175a209a78b2460a069a207a74b232ba047a272a79021ca9e80a228a89c20579d07a183a615200c9e55a063a44a1e219d94a004a53f1e6e9c33a063a5081e779b1a9feca40a1e7599be9d8fa4e91de199499cbea2e91d5798459934a1891d76969b935e9faf1dd0930708cb9c2c1d5690bc12139a2d1d5c8d0d155397291d1f8d851646922c1dc48a1c16188fe11c908782166708d11c3b02b9161811751c0d09ec1697125b1c8a086c16c913001c5108011639136c1bfb04a115c712571bd604cd146512ee1a8e040514bf10461a6c019013710ef619570148121a0e57193a010711ac0df718208195100f0a2b180281e60e39092d17f080150df308cd16e580d90c43035116e180ed0c44035316e880930b1f030d16df80690bed02091640840882438893164084088243889316d58dab86978d978dd58dab86978d978d999515944594331c80a1b69d969ee728dda1359f84a0fb2925a32c9ffea0cf299ea3d99f7fa1282af2a43fa075a18b2ad8a3ff9e5ba39c2a3ea270a032a3462a8c2b3aa11aa4c5297e3212a1f7a4592a4e3461a19da4112a8134d2a1a6a59929893459a27da50e29bf3430a2a6a5e928ee340ca241a58228f434f9a1d7a583281630c8a113a74d28a5a096a293a6f526c2a2c5a387a71326efa2eaa3eba7bc25bda11ea3a6a7032552a17ca2d0a62f24e5a19ea2e8a6d323faa06aa2fca69022919f28a228a78f21d79e0ba2e1a50420af9ed7a19ea54c1f9c9ddca020a5061f809c849fb3a41c1e029b2b9fa3a4421f5798289d4fa4b01f9599e79c05a3601ff5982f9bada12f1f27966c95e89e5b1f6e937f0e949b951e5591e412a898e91d309009150196811d7a8e71165392381db58cfc16348f411d978ca2168988f61c298a57164a08f61cdd89fa150108a11c55896f155c07411cfd885914ca06d91b8f8aec124786421b258a7411588cb21aaa8b37101a8c531a3d8b2d0eb78bf319a18a2f0c018e41195b8ac908988de518388bf202418f8918cd8abb02b48e3018958a8802788c22183a8a7002488ceb17f0896b02ef8d6a17b7895482e388f117ce872e827b8d4a15a888478ba68c7a15a888478ba68c7a15d184da067085fc8cd184da067085fc8ceb965692b594791ce0a0a49e56a09828eaa0c49e03a0a8299ca1c79e4fa077297fa23b9f97a0bd292da3c59f63a1452a9da30aa0c8a1342a94a571a1dea2542afda1daa040a4e8294d2e4aa193a33d2945343ea244a49a29f7349ca25da56b290a359ea2aba6a229453547a292a5d6285d35d0a167a559285735bfa192a58228262d73a39ca52a2771a36da336a6f326a1a349a3bba73d26fda2a9a21ba8c225c6a1dda2dea74625a1a194a202a7962420a142a2b7a6ca2303a0e1a1afa69a2200a0b3a1ffa617220ca091a166a5c920809db8a0e1a5cb20f69ca9a0a1a44e20fb9c73a0eca44c205b9cd59eada45420909b319dc7a25e1fef9b519ae9a0131fbb986e96d09e651e6597aa91fa9dcd1e80957c0e409c461e6c93ad15f698ea1d7a901218ed94741dd98eb7179d92751def8c1618a28f401dc78c1017db88511d698cfa15fd8e181d0c8c8815848e061d318b6713dc907f1c1c8c6c113e90d91b648ba60fb58f211b588c0d0d1f8f961a358ca80ca0901c1a338c81039191b819af8c3f03339158196f8c0983e891f718268cd58292916f185b8ba88227911918c98aa5872c900e18da895d87f48fbc17d88a4587b1900917078bda86a88d78173d8d4e8beb909e16818b018f7590b016818b018f7590b016e1889983d888ea86e1889983d888ea86359629927392d21a369f369eec9f792808a1089f79a04729bba1459f9ba04729baa2439f9da0c429bba3989fd6a0f4297aa429a0a1a1f22970a378a023a44f2a8ca3a0a24ba39029aea0d9a2aba32129633123a223a65529c93447a32ca52129793561a26fa5172999356ba1aea45f28ea359ea1fea629292f3540a2a1a68a28282145a37fa5f826a7a2cca3b0a63927dca265a33aa6672645a3e7a284a6b1253fa3caa2b1a60a25a9a13aa2b4a68d249fa001a2d3a607246da098a112a6c82204a00fa130a67022d09ea5a049a6412110a01da0faa593204d9df49e93a59c20499ca59e8ba4381f359a789dafa47820119b419c8ba21e1fe19a889af4a0881ec999af97ce9f8a1e5f98e28e919d641e5a95b313009a331e9e93de156095f41d9892bf1765931a1e6d9162173990cf1d3490c9174789721da28f3e17ea88111dda8ee8157c889f1c428e6c151588761cb58d51148087561c3c8dbf121e8de21b908eda0fdf8f491bf78e27049692c51a938ebf897a945f1a0f8f3e8ecb94e919808e658f12958619c88efd8eb0941919628e07905694b818f68d958fea938a188f8d288f769347182d8dd18fe792eb174b8d5d8f3e936f17f68d0b908d93a816428e5790b3928616e990a28d278a6115e990a28d278a611500004715f916410c00004715f916410c4d9aea97dc98e9244aa0799f77a1b028b7a0829e5aa0c328b0a03f9e4aa00c298ea19e9e92a0492934a2ea9e77a0942919a3059fe9a0ad2902a43ba0e1a1d5294ea25ba1b3a27a29c9a2aea3eaa36329a125d5a1f2a414291e34e5a2d9a52729c335d6a2a6a5f428243628a266a59f287c36dea0c4a62929b3348ea230a63d28d9a13ba461a8a627baa24ba327a74f26d4a273a3c7a6cc25a8a2a0a3c8a658254da268a3b9a62325e9a156a3bca6ae247aa1d5a2ada62a245aa0e8a12da7c1230ba04da1a1a68d22fc9e52a00da51f21969fbe9e2ba5f5209d9d339f2ca43c20339bbc9d1aa3af1f0d9b1f9db4a2811fd29c9b9ceea20320089b53991fa2ec1f29997a95729e551fec96a1084a9aeb1ea393201628978f1e9391041996904e1e9290e219f0091f1e348f161aaa09d71db08e3a194f09ce1de18f7a18f6886d1d4790a616d68efd1cde8fe8133091cb1c1490961040945e1ca590420bc294011ccc90c18ad096691b6f91ba90f896ca1ac8914a92bc978e1a2392a193b397011aba91d893159786194a9103940a971619409178938896b818bc90a693159665184d903593bc952418c08fb692669566172b907f928c9515170590ee9251956b1679909992e99400167e8ffd92d29440167e8ffd92d294401600005a109313490d00005a109313490d6e9ce39a2f9cc72486a03da0c8a16928b2a08b9e67a0ee2875a0f89d9c9f0029d0a00c9eb59ffc286ba1b59d02a0192922a24f9e70a004294ca356a052a20329c2a247a1a8a41129b3a373a39da5f228d6a27ba30fa5d6281d294fa2a8a56228d0348ca3cba67d292e36cda2cfa5e0287b360ea05ba55f28cc3200a290a63c289aa152a372a5c0268ca371a3e9a5e925a3a332a39aa6a6256aa238a38aa64725f8a1eea240a604256ba180a2efa59524b5a0bca183a5e02300a0dda024a52f235f9f67a0c8a484222a9f43a089a43022839ee39e15a4ac216b9c4f9eb3a4a421b29cb69e10a3a920249cbe9d39a20720bf9aae9c57a1321f4e999d98289f281f6c96c4082f9b8d1e1f97e88eb09c511e3697aa0e3399341e2d939618a590ff1ddc88011b7810c61d2283251b1613d81d288d3a1bf315751df18f5a1ad816711d5b8fb918120f741da48ef014fa941e1dd08fe70e9b97b01cfc90908b6b984d1ce792e9940b9a101cf3926b95bd99381b28936f95059ab61a9393f995e799391aa293fc95dc998f192893f695699922197f927d95f298b018a49118953f987a18ef900e95ac970b183690af940a970a178d8f3d947596d316b78f27943d969816278e72931f9588166e8db0903692b3166e8db0903692b31600000713941694040000071394169404329f05a0d3a0742635a0fba0dfa27f28529f5a9e5fa06828e49fe39ba69d9c283ca0249ae39be22858a0589ad29cf528f8a0879efaa0ed2872a2b2a15ca4f628d6a2dca21fa51429a1a2dfa35da50c29b5a17ea309a5a72869a4c6a395a59828be2a8ca362a71b292634f1a18fa48428fd3453a2daa5ad283c29fba04da56427fda3e8a3e8a7dd2615a22fa30ea7152657a15fa349a63a2538a16ca32fa6d92407a166a339a67824e5a01fa376a6fc2363a085a22ea6f6222f9f65a1c3a56722499e8ea014a5fb21de9d649ffba35e211f9f359e3ea20521a89ccb9ce5a11b21da9ba99b86a2ed20c39c619c9ca23420399d599bc0a1bf1fc99cb799d6a0871ec99a4d966c9fba1d439887089e9d341d459634161d94241dba92711a9815fe1c7a83d61c621ba31d56032d1da31cbf1d0d83611ca11ac21dca82a51ad815af1d1e8aac18c488821dfa8d891506983b1dc290fc0b9798b61c56939d92dc99721c3394cb95939a151c8294d596249b821b1f941f97d49a7e1a25940297909af419f293c596499a721988939e96c299bb181c93859638994a187492f795b39813182c92a3953798a517349269950598ec1613920c957f97c4163792f59439978416ff9064944a964a161a91cd94cc9695141a91cd94cc96951400008b132217950800008b1322179508499f22a13ea2682611a02da142a2db27ae9f499f86a17528d49e9a92729a8528069f8f1b961751289ca0ad0c1b8e3f2854a2609da19f222834a2eea0bba21a283ba37fa2bea449282ea4dea39ea5702818a48fa452a6852800a497a4e9a5692851a601a456a65928a01fa8a200a8ca28f12936a2e3a4322815a4b0a3a3a590265ca204a3b4a58f252ba252a387a53d2547a2d5a34fa6e424dea199a377a69e249ca171a374a62f2457a121a397a6cc2363a026a2b0a60d23969f2da1cda549228c9e3ea08ba46521059eae9e2da31721cb9d0d9dffa1ee206b9c169cc2a131217d9c189b6ca1e4208c9b689bd5a1cb20179c749c43a22320d29b3c9c13a2681e9c9a949a60a1b21d8998a991099e341dc691851aa00a61197f83471dd01bd01b140e6d1e791daa1cd30fed1e611d611d570cd21ea11d041e168c311d791b3a1e52906e18e811c31d8291010c2995931c0a9342908298661c2e94d694b99a2e1cd09408982f9c411b11950699a49c3d1acd940399929cbc19c794aa984b9c631985947d98df9b1d19499449982f9b1819079408982e9a8c182f933397769939184792d6960f99111835929f96da98cd17b591119672981317ba91d9953098aa1666915c95a0979a16d69067952397df15d69067952397df15000099100f17990b000099100f17990b7c9f9ba190a3fb2562a0aca3dca4d027329fa19f9ea0a127519e45192a1c7e284b9e0322d023b52735a1cb1c351f772698a1e59d0ea1052776a276a390a57f27dea29ba456a68f270ea3a8a4b9a6ef273ca38ba477a612282aa44da46aa62228b8a3c7a3f8a51228afa386a379a5a22710a4e6a256a55626d9a471a2e5a50b268ca222a30aa6712542a300a4d0a6662572a13ca447a7e1240aa116a4efa646242ca19aa39ea65323d3a0d6a38ea6bf2251a019a336a62622709fdca14ba5da214d9e3ea0cea35421c19c0a9c93a0d2200c9c2798fb9c1b21539aba90ee9cf321fc99b99a7aa35922049c5b9e2ea48821ea9c899f21a3b820f99b7c9ec3a2a51f739a579c4aa1cf1c6e9a5699059f041a9394f31adc8a9319db0e2620801db8192a1480213521371c2b168e21c421701d6715b2208b20421e990e331d701cdc1d7492da14a295c91d1a975b964a9d901dfc952e98319df61cdf953899ec9c571cab9517995a9c101b8b955599389c5d1a66953499239cbf1928951299059c6819f694f6989c9bdd18bb94b7983b9b9f1876948398ec9a6d1832944998979a3718b2930c984f9a0818ed929597f8993d17a692eb96cd99a816a6929e9666990a16e2916896aa9992156191659601998d136191659601998d130000a8125a155b080000a8125a155b087c9f3da222a4ff24d5a15ca316a5d52575a094a3f2a4ce26259c51190e1c6128811f0f2aa52bf3261da1ed2060218f24c8a07aa265a4972536a2d8a47fa6a02612a2d8a483a6e4264ea2eba49aa6fd263fa2e7a49fa6472741a3eda4f3a6c62736a386a205a5ed27cca001a06da2eb27a6a0fd9e9ea1fc2698a333a101a46b25eaa346a3d8a5b1240da33da44ea65124f3a16da412a784237da177a4dfa6ef2204a152a4a2a65922a0a017a490a6f2216ba0cfa336a6432134a0f1a239a6fe1fca9f76a2e0a5ae1e679dbc9e30a4381d8998bf1cf40c1f1f7991a520a1203a22229b699a679f4623aa9d88a189a47021519e2ba112a43320f19d87a06ca32c1e8f9d069f2ca2711cb89b679b0ea07c18ca988208d69b980ac011dc20231fe811f41907247c244717fc1a89245a25721e32174122082344209197b71c071b2a20c997af94d99ab21ea2967899919ddb1c9d965b9a119e131c3197419b4b9e1e1b2897659b7c9eed1a5f971e9b589e981ab8969e9a9b9dd4192c962e9aed9c2019aa95f999709c7f182a95b299329c4118ba9433999e9bf1171b947698009b4c1753930a987d9a9516e392b697159a5b1694924697c6993716079360978399f0158492e1964f999416ea9093958e98a414ea9093958e98a414d00dbb19b01a5813d00dbb19b01a5813459c7c9e28a0c51d6ea080a36da46d24239f77a2faa4c32454a1e7a65aa8ed264a13dd277c28e52529a34ca778a8632829a1a6a434a73f2603a18ea49da604265ba1c3a480a6ea25a8a1c6a4a1a6532622a2b7a491a6402634a340a545a77726e6a1baa4d2a6f1266ca0ea9dcfa0e027449f4620671deb25b4a3f69c89a3d522cda113a4d0a5b5234ba1d1a4d9a6b52355a1aaa44fa7b42329a18ea4d3a666232ba18da4fca63d2318a165a482a6f322bba041a42fa6b4223ca00fa44ea61222439f17a430a6c421939ef1a37ca62021f39c34a264a574210498e89a08a0b9203c9949a117a5661d669d85a1d6a4221d6e9ebea1f6a4a61d479d04a1e1a4371d569ca7a0cea3a41c339b969e11a2dc19019b109d7aa077150491771d401d9f98ab1db2261928d799ac1f492821292d20e3164722072370215594c78d629c1e200898a69b00a0e71de098f99b459e571c0399d59b209ec51b9b98b59bee9ded1a1598419b879dde19a697399b6e9d5e194597f69a779d4619ff96bf9a579de7189d96699a309d841823961b9ae39c4118ef957299519cb3178595fd980f9c6a174395b198b79b3a17d1948a98439b991648942d98b89ae915df930b98209ae0157f9366971b9ada143f924e972e9a9a113f924e972e9a9a1100009b0f0910578000009b0f09105780259a569ce49c381c8f9f62a3b7a4732305a09ca3cfa47223b698029baa9c3d1ebd85a4903e942d1f5fa1caa385a5902443a2cda4a1a691259ea2afa48ca67e25b3a2cca474a67f25b0a2eda4b1a69e25b9a203a5e2a67f25a8a21aa5eba6672570a223a553a70125a0a100a553a7f02316a24fa5d7a784235ba27ba514a8d823b8a123a5c5a7b7237fa1fea450a79323a5a1ffa430a709234ba19ba4b8a67a22cca078a482a65d22b2a048a45da6f4217aa025a451a68b215ea007a430a6552151a0a4a3f4a53421c49fc5a254a5a820a39ddaa060a3d61e029b459e2ba13a1c239b7e9e22a25f1a5d9c27a0e1a3371ae39c68a008a4e51ad59c5fa019a4eb1ab89c6da00da4d21b849c79a08ca34c1c149c04a084a35d1ac895af9e9ea2490efc1c8a26bf279da1b824552c8e2da62406977a9cd2a0e41f3e98fc9c67a08e1c2e9af69ddaa0f31b5f99529d34a0911ab798f89cdf9f261aae98b99c769f8a1950985e9ced9e3e192a98219c909ed018de97af9b1c9e90183a972c9bb59d5b187c96a49a379dae17da95289ac39c2b172195ab99689cc816bc9457991f9c7d1669941499b39b8c163294f098499b57160294af98e39a7916df938798959aaa16e8922d98969a0a1551923996a098b21451923996a098b2140000e01468189f0a0000e01468189f0af89d8ba14fa3bb22599e86a219a494232d9e54a1bba2eb21fd9b799ccd9db21dc59e0ba0cba1b12199a001a4cca59d24fba094a456a6e5246ea198a458a6fa24cba1a0a45ca6152502a2b6a46ea6232508a2c4a48aa60e25d5a1bba476a6e724b9a2d1a45fa680246ba1a9a2a4a41e22229ce39ec2a0c71e919f70a263a4512101a16ea42ba66122eea06ca449a6122219a163a471a6232237a148a491a6d42163a137a49da6b1215fa122a4bba65e2122a101a490a64d21f5a0bea353a6012176a042a31ba6bc20819f83a288a54120fa9d7fa1eea4cd1f1d9da4a063a4a11e989c13a078a36d1d9b9cf29fe4a2bb1c6b9c03a0f4a26e1c279c30a06ca32a1c069c3aa0bda3941b509c49a0c7a32f1bc49bd69f4ca3ee1ab89c20a08aa3c51a38953599439c5c162b0a690f4312f2805f988a9baf9dba0d5a9a7b9ecba0d419cf99e39d86a0c2197199559d19a04919c498b39ca59fc1186f98609c049f83182b98249c839e1b189197c79b179ef91708977b9bba9dc8177e962a9b6f9d8817e595c79a1e9d3c179c955c9ac69ce3164395e699589c67160c956099e39bf015cc94e1981e9bea15c194c098a89a5c15c7947e984f9a3215e6946d98e599f81424942e98019a601459935d976799091459935d976799091400008816e618098300008816e6180983749dd8a18aa3d0215f9ed4a159a394222b9d32a078a10c21159c499fd5a06220499d0ea1d6a2012216a056a3eda43024b6a027a49aa57524d2a03ca4d2a56524d1a049a408a651240fa16da452a6602481a19ca48ba6782466a176a482a669248ca002a420a604247c9fb4a2b2a44822db9e41a24ba4cb2124a03da3f6a4372265a0e3a36ea52722c3a018a495a5dc217da008a4d1a59e216fa0f9a3cea572214aa0aaa3b8a5372125a07ea3a1a5fb20d29f29a371a5bb20509feca252a57920e29eaba239a54020649e4aa2f0a4e11f049ee2a1b0a4941f889d88a15ba4ff1ee69c18a108a4541e9c9cc4a06da3b21d3a9c82a008a3651def9b2fa0c9a2cb1c739bf99f8fa2701c349bb39f68a2251cdf9a559f79a21f1cd49a029f30a2a11b309a5d9eb1a0ad1a9595769a679cd9188092f4981a9c7716c396d59bb59f61128a985c9caea09f120d98899ce99fa4155f98b59cd79fc71742989d9cf39f22184e98429cff9ec3175898c59b639e55171e986c9b119ec5160a981b9bcc9d97163f97c19ab49d121697966e9a769d8315e0951d9a3b9d61152d95be99c89c1d1596943e99629cc8144294e0980b9c801407948a98839b451412947c98009b11148f9352981b9b20141b931a98869a8b141b931a98869a8b14000000000000000000008816e6180983749dd8a18aa3d0215f9ed4a159a394222b9d32a078a10c21159c499fd5a06220499d0ea1d6a2012216a056a3eda43024b6a027a49aa57524d2a03ca4d2a56524d1a049a408a651240fa16da452a6602481a19ca48ba6782466a176a482a669248ca002a420a604247c9fb4a2b2a44822db9e41a24ba4cb2124a03da3f6a4372265a0e3a36ea52722c3a018a495a5dc217da008a4d1a59e216fa0f9a3cea572214aa0aaa3b8a5372125a07ea3a1a5fb20d29f29a371a5bb20509feca252a57920e29eaba239a54020649e4aa2f0a4e11f049ee2a1b0a4941f889d88a15ba4ff1ee69c18a108a4541e9c9cc4a06da3b21d3a9c82a008a3651def9b2fa0c9a2cb1c739bf99f8fa2701c349bb39f68a2251cdf9a559f79a21f1cd49a029f30a2a11b309a5d9eb1a0ad1a9595769a679cd9188092f4981a9c7716c396d59bb59f61128a985c9caea09f120d98899ce99fa4155f98b59cd79fc71742989d9cf39f22184e98429cff9ec3175898c59b639e55171e986c9b119ec5160a981b9bcc9d97163f97c19ab49d121697966e9a769d8315e0951d9a3b9d61152d95be99c89c1d1596943e99629cc8144294e0980b9c801407948a98839b451412947c98009b11148f9352981b9b20141b931a98869a8b1400000000000000000000000000000000851abb18d2197610c12485a103a2ad25b92432ac08ade229712867ad17aedd2b6f292dadd4ad292cae2a09ac21adbb2c952cb8a73ba88b2c982ecb9c299b5b2b902fbe20a622972a2330f523ae25e52a3530ac24a8267c2a27300a247e25a829d12f2a0faa96e729e52ee9a85eab8228ed2f0c225b21042725301722b8247e256c2f3c8ffc968721162c69ad69ae1221ae2839ad89ad4c281128771dbd2511262922ed202729d520861c4a1ff72809962c1b9c1fab2989a02c1bcc1ef62908a21719561e6e2a3da00718671e0e2b6e9ed89c17a7529452947ea63caf37b0bf9f23a6d8aeb8af08a9429f18a832a73aaaf09d8da82ca97aa4fc17e61fb62065161a185c1ed820f0179018021fd6203c199e18171fd02088192e18d21ea120991a6718931e7a20cb1a0a18151e3e20d51af417dc1d0d20e41a2217571d9a1f771a8a16271dfc1e681a0416c81c8a1e001a8615861c121edc194515321ca31d92193415fd1b4f1d4019f514671b071dd818b514071be51cb71865149d1aa61c97184214471a6f1c6018de13061a491c1e18b313ac19051cba17e7125319a81a91169512d618081a46162712a5181b1aad163612a418f819b41639129918f119ad16fa115418bf197416be1112188519e6159d119817d918c3150000000000000000851abb18d2197610851abb18d2197610c12485a103a2ad25b92432ac08ade229712867ad17aedd2b6f292dadd4ad292cae2a09ac21adbb2c952cb8a73ba88b2c982ecb9c299b5b2b902fbe20a622972a2330f523ae25e52a3530ac24a8267c2a27300a247e25a829d12f2a0faa96e729e52ee9a85eab8228ed2f0c225b21042725301722b8247e256c2f3c8ffc968721162c69ad69ae1221ae2839ad89ad4c281128771dbd2511262922ed202729d520861c4a1ff72809962c1b9c1fab2989a02c1bcc1ef62908a21719561e6e2a3da00718671e0e2b6e9ed89c17a7529452947ea63caf37b0bf9f23a6d8aeb8af08a9429f18a832a73aaaf09d8da82ca97aa4fc17e61fb62065161a185c1ed820f0179018021fd6203c199e18171fd02088192e18d21ea120991a6718931e7a20cb1a0a18151e3e20d51af417dc1d0d20e41a2217571d9a1f771a8a16271dfc1e681a0416c81c8a1e001a8615861c121edc194515321ca31d92193415fd1b4f1d4019f514671b071dd818b514071be51cb71865149d1aa61c97184214471a6f1c6018de13061a491c1e18b313ac19051cba17e7125319a81a91169512d618081a46162712a5181b1aad163612a418f819b41639129918f119ad16fa115418bf197416be1112188519e6159d119817d918c3159d119817d918c3155c073d9c229d788f5c073d9c229d788f811d76a487a54e2656220da820a96d284d286aa84fa9c228232ba6a892a92329ba2c72a87fa9cb29ac2d8ca7c1a8192bb72e7aa5f5a6092cdb2e67a197a2e02b872f759ad59c152b8a2fa58dda0e7a2aa02fc69c1b9e0c2ad82f1ca63ba87a29d12f08a96daa82261f30b9a4cfa52c1c4630c2a19ba3c296ed2fd8a739a9a49c422e8fabdeac3e201b2bcaaa5cac3a275a24ada50aa74d28b610099dd799712766937292eb20341d8d903b970724c11fe991019a0425fd222794409ebe243722859c33a53d1d1e20a9a07da90ea802133ca30aac53ac229e7ca267ab5cacdca6fca0bda94eabeca6f69df7a6aca8f7a50f8fb79cf09fc29e00169b19b3192e985416c71c4d1d87970018eb1de91fbf0f2c181f1eeb1f1d168e18791e41205118ac175b1e3d2058191717bb1dbe1fbb1929164a1df61e4b1a2316ec1c901e1f1add15a31cf41de019ab15401c751df7198a15051c3a1db6194315981bec1c6119e514291bac1c1a198614aa1a541cdd180114291a2a1cae18a613f019c31b4318fd129d19791b1b18f5127719081bf21767120e19b31a93170912c2184a1a7a1744114418c519dc162c11171842191e16341104181619eb1557118817e618b515f2101b17941816154f0e2f14ef1433154f0e2f14ef143315679b9ea0bfa04112679b9ea0bfa041126d954ca190a2c826851cdda27ba49e287025cea3c6a4d2280d2acda3faa43d29962cc7a286a4cb29852d3da2d9a3722a6c2ee0a15ca32d2bbf2eeca0b3a2fe2a902e38a18ba2172be72e43a140a2f02a542ffba2dda4a42aec2f09a5b6a6d2293830a8a593a781284930f8a5bca79126813071a590a7b624383072a740a99e22f72e77a8d7a9fb23832b89a8f9a9dd2439205aa684a8712452a0cda407a70a244d9e72a3b3a5e323be9da8a234a16d222c9db7a1b99c121ea49c17a3019d4a18f69db8a54ba2ec91d89ff8a754a7019dc2a0c4a883a9959a2ca0a7a81daad09ee49edba779a9c8a0999c92a50ba8c1a29e9837a224a5049e1890809b32a09498331303191514888ac015611c191cfd1495161b1da31deb175417a31d801eb5187617fc1d471f8f19ff16b41d3b1fa3193516391da41ee019b615e51c151e99199215a51ce01d9a198b15681ca91d931968153b1c641da2193d15f91b031d8919cc142c1bc31c4319be14da1a811cfa186414521a2f1cc3181d14cb19c51b6c1868138819551b2c1896121e19901ab6170512be181b1a8f176311551885190f17fa10fa173c19b116db105317af181416d310cd167018a5157c106916121860151210b215cd175b1570103e162b18181470103e162b181814e698cd98a09ae48fe698cd98a09ae48f169e289d3da09d279095ce9e87a0d3282c2026a005a2ae29da27f6a06ba2af29d82b30a1b4a1f3298b2dbba0a9a1722a7c2e7da0d8a1c42a302f79a006a2dd2a342f3ba0b1a2dd2a4e2f1ba10ea2d92a333061a3cfa5a62a7530b0a46ea63a2a9b30fba41fa76029bb302da586a70c28d430d0a58ea8a3258e305aa6f7a809259b2f69a6f8a89e25332b13a6bfa8ea250214f5a40ca8a52493a230a535a81a25cba05fa465a89c2407a062a46ea69422b69ed5a345a5d51fb99edea4b8a5911d559f0fa6fca68c1cfb9fa8a638a8e990a09edba60fa9469dc99d56a675a8659c399d92a53ba8869b039c23a4a4a68c9af797ed9f96a38598848f5e98859e2c8cb50db711de98311673125e188910271835141a1a4b18f4184a15261cf81b9b19f715cb1c601d571ac815d31cc21d641a6915c31ce21dc5194915971c881da3190e15651c551d031a1615461c371d091ad814031cdc1ca1197c14861ba01c7d191414b81a561c241955134d1aea1bdc181313d119911ba5187b125e19241ba3180d1215198e1a2c18c411da182e1ade1760117c18c019bd1715114e1867194417ba10e81709192517a4107017b318eb168a1035178d18f6164410b6165c18ab16150fc8155d170e165b0f4715731631155b0f471573163115bc9a0f9a7c9a988bbc9a0f9a7c9a988b379e6f9f96a05125b89fe99caa9e0929ef9d5a9d869faf29d920ac9f0da1082aa129c09e18a02f2a3b2d8e9e55a0a72a742eb09e7fa0e72a642f229eaea0132be02f44a03ca32d2b3b3001a1f4a3ee2a6c30b6a22aa55c2a9e3076a4aea6b329e730dca459a724290e3129a51aa8a42827314ca535a83528ff306da56ca87c27f92f87a57ba8c126b92a7ba582a8e125809a47a4efa7292558a3dda422a8b5242ba252a531a99e2363a151a51ea9352011a028a545a8f81d8d9f4da52ca8ec1b549f75a522a8f716aa9fa1a5c4a7361063a070a53ba8a18fe79df3a437a88b95749c1ba428a7429b6e9ac2a1eca58f9a9b97b39e20a487987095189bb3a11798b68ec3962aa00a8cb20d75135f9a3e141112ba197f10a019bf13e51a7418821a9414671bff1aff1a4514ad1bed1ae6192f14411b811baf193514641be61bc31925143d1b1f1cd6190e14241b111c7d19a613b11afe1b8119bf138d1ab51b69193e13e919361b1019ec128c19fd1ab518b4123d197b1aa1182212e218f819431885118f189a190018001149185819a2178110d51712193e178910a717c2187e17c40f1e1799183d17ac0f8e16231870167b0f1e16e71725169a0ff11598179215830e771524172715ce0ec31458166915ce0ec314581669159b99f6994e9b65099b99f6994e9b6509559f8a980c9dde25b5a1e498769cf72919a2999ca39c1b2a33a0ba9d049f522add248b9f8a9fb22a6b2c80a032a0d82ad82e9c9fc1a0132bc62f809f37a2052b2130f5a0daa3c92aa73041a15fa4ca2a08317ea25ca5cb2a4e3128a4a6a6742a69318ea438a7b5299231ada477a7ea28a631eea401a86528943103a556a811283c302ba597a85327fa285fa5aea8f625cfa132a567a80d2568a39ba4b7a7642454a2d2a4eda8bb228aa2eaa443a96b2006a1b2a4a1a8d51f599f80a41aa88b1c2d9e3ba452a7f415e59d71a45ba7c915639d38a475a757159e9c1ba445a7ea14649cdba22ba64a14889b5aa14ea588168e98729f58a420188895709c88a16d18e4906d98bf9fde1842897008129c6e1a6c0391157895dc194d0d24180c90bc199e11d01974140b1a6213e71a1d19ea1a78132c1b931a931a6013621b131b9e1a2013f11a9c1bbe1a4313f11aad1bd91afb128f1a8f1b651a99124b1a541b411a1412e5193c1be319f2116719c01a7e19d0113119671a35198311ec180c1aec182611a518ac199e18e71032184d1951189d10eb17f418081824105d178d186817ba0fdb164f186a17eb0e3d16ca17a7162c0ef1157e176516d60ecf154417d915710ded14561656160a0df813f51453160a0df813f514531646962d928b95648f46962d928b95648f609e4898049a1025dca0a29ad49cc2299ca24f9e679f4d2a74a2ab9d59a0db2ab50d03a0ffa1b92a292966a09da1a22a2f2e899fbc9fc42a603012a02da1ae2afb3095a0ffa2a02a5b31c6a155a49d2a903196a211a58b2ae231e7a303a6332a133227a4caa6bd292f324da45ca74d294e329fa4a0a7af28083257a4c3a7212879302ea43fa7022776282ea4aaa74026f5a31aa53da8752546a4bfa421a8c4249da299a4eaa8a123c5a10aa5f5a85e2117a1c3a489a8ce1fb6a0a7a47ea8221d2b9f2fa433a8da1b169e24a4c7a70b18dd9df8a321a8c714129d52a307a8c7141e9cefa181a78f14b99af5a087a568168e9918a085a456195f98029e3ba3c919f995739b88a10f1b05924b963c9f751b6b039d134999b81b220d16189209501b37104519a116ee1a3a11121ab818f11af9113c1aff18931a2812821ac719c81ad711861a5b1a5b1af211171a341a341a41119319051aa219e2103919ea198f198910e6187e192919521069182a19da18351030189918e6187c0ff2179b189b18320f301753185318d40ed816b4171a186c0e22164c17c417ec0db515c7163617660d0f156516ce169d0c7a14581523168f0c5a14da140416af0cec13601485151e0a9a11c113d5167d0ac710531229157d0ac71053122915e39244973298950ae39244973298950a239dab9a829cfd24f4a1cf99039d232a43a20e9d119e332a63a18b9ee9a0062b8ca15c9f3ca07d2a4b1e29a099a0642a392c22a044a1952a3030f5a0b3a1b42a3a31d5a0dda3052b9a3156a189a4952ae23170a228a57a2a59323fa30ba6392a9f32faa383a6dd29db323aa4e7a68229e5322fa46fa70e29c73224a4a3a7d228993065a39da61e28e024e3a2caa6ff265ca4dba46aa75f262da42fa532a86b2567a2c3a48ea8812463a157a479a8da2264a13da474a85e21b3a052a4c2a8f21fb29ff0a353a82c1db79fb2a3e8a74b1cf89e43a371a70b1cae9deea2aba66e1b709caca169a6381cd39a83a0cba5c21c6599fd9e18a4071c2398fb9cbfa27f1ca295209ad4a1ec1cbe949495fe9f9b1c3c918a0eba9b451ce5885c15ea945f1b360b53186f89cf1b0f0f2a197012671b8c0f75194916241b05105b197f17bf1a471063196b18be1ab71077191119d41a7010201920195b1a9e1012192c19521a3d107a18da18ef191f1035188a188c19240ff31747188b19ba0e0017e4171e19670e42164f17bc18910df715d4166d182f0d2d1559161d18c90ccc147e151118020c35142c15a917070c0414fc14f916c90ac51353149416520ae3125f141e165f0a721237143a15f30a9d115f134a15f30a9d115f134a15d193ed94f497ff90d193ed94f497ff90459de399579c9924c7a0b99c779e942983a1449d5b9f2c2a4aa38b9ee19e612af6a1b79e08a0942a18a0d59ed19edd2a0d2755a058a3fb2a532edca161a3022aa0311ba2b4a3c42a603249a28ca47d2a843297a269a5222a0a33a9a2b1a5dc2952333ea317a6982990331da4c4a67229da332aa446a723297e33d9a347a7d5284e30c6a3e1a6b9277420baa35fa75c2680a40ea540a8a225d0a30ca424a8ed2477a245a46ea8602486a152a4b0a81e236da118a465a80022faa121a479a8eb207ea1e8a3d2a8671f6da0d7a39ba8f01c299f83a398a8151cd49dfda232a87e1ae59c70a1d5a6c9195f9af19f66a5b21b1d99139edfa3bd1b6a98109dbea25b1beb96209ba0a17f1ba494009704a0001b98902908f69dfd1aac884f15779b771b4d083d18e294531b2f08de18610fb01b8e0aff183015c81b970d1a19fe16cd1b560e22194618ca1b170f26197b184f1b850ec1182d18411b270e7118c717c11aa60d1918fe17481a370d2517b7167a19cf0ca81638161219970cd715cb15b9188d0b771563156418110ba514f8140d185809c4130e14661709092b138713dd16c60857123113fb167e07a811ff1198161b078b11af11a216e504d010631148166c06b51024125216a107b20d790eef15a107b20d790eef158492d28ad8030c958492d28ad8030c95569d5299e599b52418a1e29b4a9cbc2998a10f9d2c9ece2937a2fd9d37a0a52a5fa455a063a0ba2a39a435a07ba0c52a0ea26aa067a0762abc2a04a10aa3232ae63095a0e1a20b2bf032e0a11ba4182b60335aa28ca5652ace339aa2e2a5f0291434d6a212a6af292e3455a372a65e296234cba245a6ba282a3446a300a66b284b2fa3a46fa745284f9f65a405a8072739a4d1a4a5a894269fa42ea4c6a7c2251da44ea421a812257ca232a426a832244ea1f5a37aa89e2376a0eda38aa8ea21f99fd5a264a871201c9fd5a289a803203c9e9ca24aa8021fbe9dc4a188a6fb1d3a9d0ba093a50e1df09aae9e85a4ba1c3e99b89d2fa4f91b1798409c86a3561ce2956e997aa19a1b53952096e89f0f1cc0935b88399c391cb290f71201982f1ce88b2616e994081ceb82ae170a90bd1ba70266182409641b7e077b18180fcc1a760971183813721a130b0b1817153f1a820a791798153d1a240a09172a15c319c6091916a315d4196509b2158a1468191409651547141919d008ac141114d918b9087214d813601886067a133a121b1822042912ba109e1764016d10de0c8b172b012c0f800cf9160b019e0d3e0c95160e017e0ea30d3e160e01030d0e0df415f200320ba90a2915e800bc0a650aa414e800bc0a650aa414a5964592a890ba92a5964592a890ba92569cb19a839a0c25d5a01f9e0e9f672923a3509f68a01f2ad1a345a05ba1992a3da449a08aa1a42affa45b9f05a1132b8da468a16ba2172b651774a14da3a92ae02da2a14ca4732a8a32bba212a5b62afc334da35da52f2a3e344fa3d2a5c529653436a30da6932989347fa35ca63b29e23430a35da6db289c345ba272a55e28042ef9a3d8a7602861a173a4daa7dc2631a4e3a4fda74226d8a369a4baa7a025a1a215a4cca74b256ca141a378a75624c1a0f9a205a8c12374a0d5a219a83722779f38a252a8c2213a9ebea186a76d20719e4ca11fa6c01f0f9ed2a040a6ea1fe29d87a0aba55c1f899c9a9fe5a4861eba9a019e67a43c1e619acb9ceda21a1d2f98e9993aa1e11c8096eb94869ff21cf3931888609c601c4a91d9106599231c128f1b152096411cd48ecc1561924e1cee8c4e16d588621ce787ba16c50e181c5002f6163211071c450627174c14e01ba0089d16d3143d1b660822167814b41a0e05ba152f14a71ae604e314e013431aa70498141b12f0197b01bb137b104719640169123910fa18400120119d0da1182081aa10fc0cbb170181fc0e470ca116f180380e070c3e16e580d20cb908b515dd80ee0cbf08bc15ee80c50bc608c415d280920925834d15a1840782d0822716a1840782d0822716699906919994ae95699906919994ae95de9dff9c0c9cf42423a2089f5f9fa6295da23da0eea0702a37a484a0e6a19c2a70a4d6a058a2952ad2a424a15ca3d02af7a3a1a0a0a2ad2a49a4b7a160a2872a3d26ada26da5542a4b3177a2c9a6492a583471a205a54e2aa834d9a2c4a50a2aa8345da322a69029ed3407a350a66729613587a237a64129c8344da2bba57d28222c77a376a675277fa189a4a2a67226eca3bba4c0a73926c5a278a410a88225eca10fa405a8e6248fa171a37fa7252499a113a332a7752352a077a26da77722d19e34a28ca70022e99d01a2dba6ca20149eaca1dba6ca20e69d5da199a66620669d5fa0dea4db1e1d9c419f7ba4e41ef099899df8a3881e909a859d23a3421e87993d9caea1421e6396b2965e9f061e6f9364089c9b681d6b92fe12be98ec1c399127151b96951c1b908a165992991c338e0d17d488601ca48cb3168c08681c308a6d166e0e271ceb891116000e201c548982157d0d8b1b198b7314120df91a968a13134206741a3c8a8f11cf85ff19b98b49107a85a619578b4a0ebc8b5219b78a420c368ba918618ad908a18d5c18538b72083a8d0d18e28a1808dd8c8b17c88a8e02878c79176b8a74024a8ca616128a7002388c8a16a1885002d988aa1623889d86168f7a13ba84150245888315ba841502458883150c8c5482a3890b930c8c5482a3890b931c9aeb979c998a2439a1f19e56a06c293ca10f9f75a0bc29f6a1ed9f0ea10e2aeda2c69feba0252aa3a36ca0b4a1a42a2aa476a076a2832a78a571a1c5a16a2a67a40aa201a41b2ac22a9da24ca5a329d933e2a229a5192a26355ea3dda5272a313586a243a6a929643517a3c2a5ff28eb354ea12ca5a328fc347da169a57128ce2783a33fa6982771a394a3eca6bb26b0a337a48fa72f26b5a3bda30ba89c257ca2c6a3cfa72c25c9a186a37fa79b243ca1fba244a7b2232fa086a2b1a64a22469f17a23da6ff21549e8ba112a65721689da0a0eba52b21b79d96a031a55d20d29c07a0c2a43f20689cf89e68a43020689cc89d4da3b31f799bcc9b41a1161fb698b8970a9fc31d6c970594089e9d1da0956f08c49c2f1d3e94c114ea99ee1c8d902b180f95e11cf98e6418fe8f7f1c238d30181b89a01cf08c3217db08661c938cde169c08761c308c9e154d886f1c798b7314c9878b1b968ab1121e8d9d1aaa8bf810a58c621a728b350f248fe519718cc90caa8e8019588c58095f902719d28c4e0345918a188d8c1883ee903f18278cdd82c29198175e8bb58279913617bf899c8286904a17998987824290dc16c18a6e82bb8f3a16b38a4782988dcb156b895686ed901e15d188488c4d91d515d188488c4d91d5150a911a91dc9168890a911a91dc916889689c6e99099cda2456a0ce9e45a07f2983a1889fb6a090295aa2e39f01a1e92920a3a99fdaa00f2a04a449a06da1382ab8a4f3a03da2172a3aa4e0a038a46e2a2ea40da209a4f6290ea303a4e1a4d429932edda1aaa58529993487a3c6a541299c3593a22fa57029a835bca1c6a4d2288e36b2a170a5e028ad34bea1eca55e285d130ea47da601273ba3aaa406a7ad26dea375a466a77c26dfa3cea320a7bf2599a3b2a31aa70d253ca252a313a7852439a1dfa2eea618247da064a269a6ce22ba9f67a12ca64022599ea5a042a6d721fd9d49a093a52f21839d4b9fcda4b920dc9c209e0ba4f21f639ce49cb0a2d11e619b189c9ea1311e089b3d9b10a1141e3d9a1d993ea0e01da9980f946e9e9a1d6b96b00e019a671d5894f0156695341db792c8167290011d97917e17ae89cb1c3291f8175e89871c05906e17ff88371c2a8f04168e88211c888e89152588041cee8d681498875c1b7e8de612ef86271bcd8e0110c78c911a3a8f590a2c911a1ab38ee583a093b719388f8b8c33945519b18ee08d2295ae18ef8e0b8fb9944f18738e0b905b943b18ff8d9b8fef9315188f8d1f8f6a93a217438dd98ff0922517708d478e4f93bb16598e1190f1920816c08e7490959399159b90588ea690e3119b90588ea690e3113f01eb163e192b833f01eb163e192b834b9dad9b719ca42719a0f89e38a12c29d3a02d9fdda03e291ea15d9f11a17629dca1289ffea0c729a0a2679f3aa10c2a8da308a09ea10e2a15a454a1eca2152a0fa3c2a1daa3cc2988a3c7a28ca4d029e41c0ca138a5c7297732d4a1e3a66129783532a388a504291536caa278a5f228d536e8a1b2a6e42823348ba242a6e427daa105a433a70527d2a249a45ea7e9256aa347a4dda6b525f8a212a4d5a63a254ba2aaa3c3a6db24f9a172a3cca6652471a142a393a60a24cfa086a2dda6452355a0e2a1b2a69e22129f07a160a54d21109f19a0aca4e2202b9d159f16a49220b79c519e67a32c20849cbb9d27a308203b9c299d99a2391f629b009cbaa1c71e9a99b398809f971e0c98288f129c371ec494f7135d97ef1dac91aa18e993bc1d9d90141a110a7f1d3a8fc3194b10311dd38e6719b012d91c848e98187e0f861c708fd9169808741c0790c9144d8e111c1090fb11a792d71b1f90240ed893311bcb9096841796b31a01917b8f1b972d1ac89169924497b5192c92df92f7974219c891fd934e97d2186991169439976a184c919a93ae965418769005932396f41709902893b3956217cd8fba92609593162b908c9233955b163790fb920695c5157f90469392942017338ee39104946915338ee3910494691500000d138617401200000d138617401230a0629c0c9d3728bfa02ca046a11429a3a1e29e84a03a2906a14f9ef59f3c2939a16d9e19a06429a6a19f9e3ea094292ca2cd9f08a18c2965a3c2a0e4a272298aa33ca258a4682996a3afa3eda44129d8a28fa417a55429b426b1a411a6a828713481a336a71a2923364fa324a6f6280a3791a136a6c828f43262a46aa6232843a3a9a406a764273da40ea4a3a72926c9a37da40fa7a225b9a23ba4fda64325a2a211a47fa6d124cfa1b6a36ba64e24fda031a335a6be2364a05aa2f8a50d23f09fa6a183a5bb22789fbca0e1a44222d69eb49f8da35b213b9d2f9e8ba234216c9c789d1ca28d20c49b4f9d60a2c01fda9aba9c22a2731ffa99ca9a0ca1ce1e40988c95ec9d5c1ed3972294ca9c9e1d37988a88e59a791d8f942117d693e61c2d8ca41a050a151dc788c71a0c15dd1c5c8df01a6a17e31c1b90771a16188f1c898fa1195f15a01c858d9516be8e5b1cf58f0b0fb296fb1b7a902685ff963b1b99929593ca98de1a829379955799141a509383959d99f419a3930396859934199e930c968699ec180f93a2956d995018c9912395b99836182d910f9540989517bf90b994a4973b172b90b5940697a516f98f409469966916bc8f6d942596cc153e8efa936e95c715f78d4191f592cc15f78d4191f592cc150000b215751895110000b215751895111ea0cd9f32a1692714a0e4a0e7a19428ab9f639e9ca0fe2835a0349c339e0f2973a0bd9bf39c4729b0a08a9cd59d4c2952a1539fe9a14b294ea217a29da451299ca265a317a552291ca3dfa3cfa54d290fa2fca38ca50d296aa325a30da6f2281e2d1fa45da5712830354da173a6ac28f436aba211a775287f2e52a570a7ed262fa309a5e4a7a7260da3b9a4f3a7122606a255a413a73525a1a174a4dea6c12466a132a4b1a631240fa108a4baa6ab23a7a075a36ea6a522fc9f4fa2fca50e22e89e39a13da5bb215c9e35a045a44a216a9e6a9f2da3d4200e9db79c56a2b720f59cb09cf7a28220cf9c649b80a21d20469c1b9b7da2601fe79b059ac0a1571e849a129968a0f21ced981094099e5f1cad97be11c095501cad943e18cd10341c4f8c551cda197d1c4d033a1d4c1cac1c1303b71c6f1bc81cd882461b4a18c91c86874119450fb11c298eaf1515968f1cd890dd0e6a97531c10934090a498bc1b3e94b7945d9a301bfa947397629b3f1a25943c97bf9ab5191a941a97799a3519e293e296339ac1183893b096da994b18d69237963c99ae173c92f9957c98e216f7919b9535987516f6912495b09730161192129582970b163592eb94289768159f90559426967b15a491449459968012a49144945996801200000e186819051100000e1868190511be9ecca051a2b8268ba0bba0d8a1bb270ca0299eb3a06b28b99eaa8c52999b2879a04d18cd14a728a2a14b981e9bb228fda17aa015a2902812a2a8a213a48d28f9a25ba3f2a4a728f8a2e2a37fa5b72858a4efa459a6c82885a5eaa45da6e3283ea80ba4dba43d28382cc0a2a1a49c2755306aa2b5a54128d3a049a242a6c72675a11da4ffa52b25a9a186a3e0a5072503a21ba465a6b624c3a13da4a1a6422490a136a4d0a601243ea10ba4eea62323b8a06aa3e7a647222fa0b4a23da69e21ae9f5da12ba59520869e0ca02ca45f20be9da39da3a30720409c879bc9a27920c79a749a83a1b5201b9b739b37a100205d9b129ca5a14f1f469c7a9c7da1011e249bac9b3aa1b71c82993998fa9fb51c4a95391659977e18488eb31c1c1aed1a6b0c291e741d3d1ccc10f11e281e921c0e0e691f611e381da58fcc1d381d931d07907f1aa118181d2a90ad13d98d061ca692298e2a98ab1b41945794639acc1a39950e97009c241a42959798569c9c1915951e99799c2d190895c6982a9cd218ae948f98a99b981856944d982a9b4c180f94f897119a01182d933297339923175692d4960d99ee16269291969f989a169e91fa9569984d166591bf952398e91563918a959497e716b7904d956097ce15b7904d956097ce150000a516dd18a1130000a516dd18a113879ff2a1a1a40c269fa089a3aaa4d227f09f629f63a0ca27229efd1dc01f0828959f382128230d27dba09613d899c926dda1b2a178a30e28e4a372a465a61d2862a30da555a74f28e4a3f4a408a77c28c5a3b6a4b4a67c2842a499a42fa6752801a464a36fa52d28a4a325a35aa56d2790a330a369a6ba2633a4aea3f5a64d261fa269a40ca8d925aea227a5c5a703252da2e7a46ea76f2401a2e2a496a73f24c9a17fa409a75c238ea140a484a67422eba025a48ca6e22168a0bba35da65b211ca0b0a2bba5f220cc9e8ca04aa43a20cb9c449db3a0e01fdf99c790759dbc203999058a4d9e5721659b379c79a1c720fc9cd89f65a345204e9ca99f04a41f1f8d9a209d8fa2e51c779c749c48a03b1bbc98eb11ac988519f68c1f1e701baf19ef0c0c216b21a21a681557213e22291c011605211621c71cec13fd1e1f1e031d5c8e41198b14081dc79770913b998b1c7e96d096479b581c28968f986a9ca61bd5952c99709c331ab2956599409c831978954299239c301947951f99109cee180d950699b39b6b18be94cb985d9b39186f9490980d9b0b18f3935898c39ac317a0931298209a4417f0929597f3997016a192db96a299eb15a992be966d99b415ef910896c999971491915d963099191191915d96309919110000a2176b199a130000a2176b199a1328a096a28da4202587a137a475a5bf2543a0bba3d0a4ec268293472409267028611d2b29c02a9c256aa3059c809903259ba148a4aea53a261ba209a5c5a6842625a266a5f4a6f4266aa240a5f5a6792780a21ea5fea6ab27a8a2caa4a7a6d227d9a10ca242a40f2896a0939ffda19d27b2a1b7a190a40f268ea497a493a73b255ba4afa464a7b724f1a2f3a458a739243ea212a5efa7be23ada1f8a4ada7e4225ca1c7a469a78d220ea18ca41ea72922b6a046a4bca6ce2175a015a4a5a6dc2042a0f5a32da66720ae9f00a3b2a58b1ed99ed29fd6a2181d899be21dad1ead1ed00524216f21ae22c29cf29fdba29721a89d83a12ba420202f9e52a111a4691e219de39feea2ba1ca59b609db6a0481a089bab96e79f2b0a1895f21da811a8119e18382341231c12791b8c246c25561cd61873236824d01eed92fd1e131edc1ee4969e8d8c990a1efd971d9ada9d8e1c09978c9a499e761b8197cd9a139efc19bf97539b6d9ed0193b97259b5b9e98199c96ad9abd9d0d190d96479a109d2f1846951a9a929cc317e294d599539c58177b943d99a69bae1614946398ee9a0d1622930898659abf15fd92a797249a5115ba9248970b9a3b15d0926e97c099fb14dc920d977699b8158190e695c899990f8190e695c899990f11104c1c061eaa1611104c1c061eaa16809d2aa0ada1b920aca0eca3e0a40625709f3ea2f7a4652403a433a881a8f5241d9aa12122211e26efa0dfa572a7a02666a1d8a4efa620261ba1f4a49aa6eb25c0a124a505a73026f6a11fa50ba74a26e6a261a541a75a26fca266a5b3a79326a4a1efa224a64a278c9d9e1c401d902658a0219da8a14a2496a2b2a44da7552471a20aa52ca75a24f1a100a570a72224a0a1f0a453a7ce2381a1d2a41fa72c235da1b5a4f8a6d2222aa19fa4b9a67922faa07da4ada6f221e1a057a4aea6ab217ea02ea491a6282156a021a4a4a6ae20f49e23a470a78a204a9c75a2f4a5151f8198aaa085a4a119dd9c87a1e7a46a1a6b9df1a10da5a91c0f9d5ea1d8a4831c1b9cc0a012a4091c469b34a0b7a2d1195f9b6d9e56a16915059c5d1128956c90af1a81244025d797d71f5b286f29b01a8d1a2a250f26a420969077198f18311f0398e59ace9d4a1d1f99019c5d9e251c7799a19b1b9ee71a0d99f29bf99d361a4998529b729d6019f097139b6e9dd8184597fc9a759dc0180a97c79a559d64188a96769a269d3d1801960c9aba9c8417e5956b993e9ceb1675950099de9b93163e95b5986f9b5f16c4948798139bb3151b942798a09a7a15f1930f98119a27153193c4977b9abd1338911997469b4f0e38911997469b4f0e0000b81451162e030000b81451162e03a39b829f85a04020fa9f2da470a52a240aa01fa3bca40723609025935d92a61c5d97809c6d9e06214aa2c1a4cba6392515a2eda4c8a6ad25cda2f6a4c8a6982508a316a5d2a6a12510a340a504a79a2501a340a538a79425c4a239a51ca7322524a2dda4efa660246ea172a49ca6dd2298a160a5cfa768234fa298a518a8102414a25da5d8a7ae23c2a131a5afa73823d8a105a55ca7cd2299a1c8a4eda67d223ba1b1a4d3a64a22fca07fa499a6b521bca043a45fa6682189a011a42fa612216aa0c7a30ea6cb2046a075a3d9a58620ed9f9aa21fa5bc1f7b9d4fa0f8a2c81dbf99899d4ba1ae1bdf9abf9eb8a2c6199b9c2ba001a4e219a89c60a0e1a3df19909c77a0d2a3581a1b9c7ca0b3a34f1b539c5fa077a3dc1a1e99ca9e84a2b417c6919315d218e399e9258e2d502f1e12bf93de18dd1293214098009d26a0fc1b499abc9ddba0fb1a65993a9d1fa0eb19d198f89cc79f4a19be98c89c709ff6186f986d9cea9e6e1842982d9c9a9e5118c897f59b4b9e1d185c97779bee9de817ad96c49a449ddf16f395319ac19c57161f95a099589ceb15e3944e99129c0a16729421999c9bc6153d94e5983f9ba11510948598df9acc1528948998959a0316da92f797169b8a117d927996b69898137d927996b698981300006014d917dc0400006014d917dc04649fe9a1cea37e22c09e36a36ca4cc23559df7a02ba26721f199449ccb9d0c1db1a0aca1fca3d222eca061a44da6f0241da1aca472a60e25a8a1bfa479a614250da2dba485a6342547a2e9a491a627251da2e3a4a1a6082505a2efa4ada6e02476a13ca404a63324c69d8fa05aa26e2025a091a27ca41e21efa190a45da67f22c6a184a483a63422c8a17da479a6d2219ca172a486a6b1218ca160a4b0a6822165a14da49fa62c213ca12ba495a6f8200aa10ca46ea6ec20bea0d7a33fa6ad2053a09ea320a66b20a09f27a3d1a5de1f999e5ba24aa50e1fac9daaa1d9a48e1efb9c14a12fa4941da79c87a092a3ac1c569c4ba03fa3401c1a9c43a08da3461bfc9b32a0a5a3611a069c26a0aba34f1af49b06a054a31d1a6c9ca69fd3a2f419df99279d1fa05218160e89114b135c090e92f097829a87851e9a5d9ea4a04818529a049e67a00d1994993e9dfe9fa018d098bb9cab9ffd177598789c3a9fa9172c983d9c969e5c17a797eb9b179e0f171e97689bbb9de51684961c9b699da5161a96c29a289d7516a695519acc9c22165195d099499c98150d954d998b9b2315c794fc98069b3515b594b698a19ab914bb947c98719a9714dd9464980a9a1f141a944798019aa01307941697e698931407941697e698931400008a15b218e90200008a15b218e902e59dc5a161a308220c9e88a11ba37722ae9c46a095a127215d9c759f31a18d20409ef7a1a1a35d2233a0e4a353a54d24b9a03da4d1a56524d1a057a4e3a55e240fa17aa427a6692461a1aca44ba682248ba2caa430a66824b6a1afa46ba65a2455a0d8a38ca55223ab9e63a279a408224fa043a3f3a4492242a12ba4aca56d22d4a03ca4efa52322a1a04da426a6c52199a047a456a674218ca039a42da6392172a0f9a3e0a5f22062a0d3a3c8a5b52033a09da3aba57420df9f68a391a53920569f2ba37da50320eb9ed3a233a56a1f889e75a2dea40b1f089e0fa28da46b1e589d72a121a4ff1dd69cf3a08aa3541d599c9da018a3041d0e9c4aa0e2a2741c789b11a0afa21f1c3f9bce9f7aa2991bfc9a739fa0a2281bdb9a389f56a2911aba9aea9e54a1711ad1972f9c959dda1814925098649a02168b95d69afc9ed5120399479c9da0070f7a98a19c15a03d149298cf9cd99f47165698a49cd59fc31667983d9c1a9f72165698fb9b7d9e19162398659b369ef0150498109bef9d58155597bc9ab79dd3149696769a5e9db314f095319a229d95146495ce99d29c6414bf9469996d9c1d146c9407991b9c1b130794ae98e09bd21208949b986e9b91121e936498c79b1912a6922198279b7512a6922198279b7512000000000000000000008a15b218e902e59dc5a161a308220c9e88a11ba37722ae9c46a095a127215d9c759f31a18d20409ef7a1a1a35d2233a0e4a353a54d24b9a03da4d1a56524d1a057a4e3a55e240fa17aa427a6692461a1aca44ba682248ba2caa430a66824b6a1afa46ba65a2455a0d8a38ca55223ab9e63a279a408224fa043a3f3a4492242a12ba4aca56d22d4a03ca4efa52322a1a04da426a6c52199a047a456a674218ca039a42da6392172a0f9a3e0a5f22062a0d3a3c8a5b52033a09da3aba57420df9f68a391a53920569f2ba37da50320eb9ed3a233a56a1f889e75a2dea40b1f089e0fa28da46b1e589d72a121a4ff1dd69cf3a08aa3541d599c9da018a3041d0e9c4aa0e2a2741c789b11a0afa21f1c3f9bce9f7aa2991bfc9a739fa0a2281bdb9a389f56a2911aba9aea9e54a1711ad1972f9c959dda1814925098649a02168b95d69afc9ed5120399479c9da0070f7a98a19c15a03d149298cf9cd99f47165698a49cd59fc31667983d9c1a9f72165698fb9b7d9e19162398659b369ef0150498109bef9d58155597bc9ab79dd3149696769a5e9db314f095319a229d95146495ce99d29c6414bf9469996d9c1d146c9407991b9c1b130794ae98e09bd21208949b986e9b91121e936498c79b1912a6922198279b751200000000000000000000000000000000d71536105b16751ff61e4aa606a87c2752251719e3146625fa28e91fb02038264e2b2b200121cb26602cbf1c34196026d32cc1a2eaa38a25232d7ba9ecaa81280e2d19a9c4a91f2b712ed99c279e672c0930b3229d24172cc82f742105256d2a4b2f5ea56da76d2aae2fbf9c4aa05f28cf2feb231e254428aa2fe223b52465278b2eec222b245a24bc2caf0e6b9086193424d4ad65ae10a11fa189ad95aed2257a1ac7954618b828e41a3220642658210d1abf1f3726bc1db618071d3925b31ebe88689a82211622dea595ada4ae1225a1a654afb6b091a6b19cd8a4cca499a9d615561e3d22c4a58117f31c1920809e56142e18e81a7296271a5d1fc82000199218411f66216c189d18711f0c21de18c8184f1f062132196c18151feb2087199918b61eaa20a9192618361e5e20b119fe17f11d0620bc193c17741d771f7119d216351d0d1f79196916fe1ca61e2919cb15a81c401e26198715661cd61da4187115161c831da6182a159c1b291d7618e414301bf61c0b188b14b21ab51cdd175e14591a5c1cef1727140b1a4a1c5917f113d1191a1c081739135a19091b30169312fe183c1ad1153a12bb182c1a16164012b218fa190f163f12a618001ac015f4115818d519981588110e188c19531585119e17f5182a150000000000000000d71536105b16751fd71536105b16751ff61e4aa606a87c2752251719e3146625fa28e91fb02038264e2b2b200121cb26602cbf1c34196026d32cc1a2eaa38a25232d7ba9ecaa81280e2d19a9c4a91f2b712ed99c279e672c0930b3229d24172cc82f742105256d2a4b2f5ea56da76d2aae2fbf9c4aa05f28cf2feb231e254428aa2fe223b52465278b2eec222b245a24bc2caf0e6b9086193424d4ad65ae10a11fa189ad95aed2257a1ac7954618b828e41a3220642658210d1abf1f3726bc1db618071d3925b31ebe88689a82211622dea595ada4ae1225a1a654afb6b091a6b19cd8a4cca499a9d615561e3d22c4a58117f31c1920809e56142e18e81a7296271a5d1fc82000199218411f66216c189d18711f0c21de18c8184f1f062132196c18151feb2087199918b61eaa20a9192618361e5e20b119fe17f11d0620bc193c17741d771f7119d216351d0d1f79196916fe1ca61e2919cb15a81c401e26198715661cd61da4187115161c831da6182a159c1b291d7618e414301bf61c0b188b14b21ab51cdd175e14591a5c1cef1727140b1a4a1c5917f113d1191a1c081739135a19091b30169312fe183c1ad1153a12bb182c1a16164012b218fa190f163f12a618001ac015f4115818d519981588110e188c19531585119e17f5182a1585119e17f5182a15a696999ed89dbe1ea696999ed89dbe1e1b1a5aa049a069257b1f7fa29fa4c0225b2688a245a40d24b22902a432a5fa23342ca6a456a64125432d6ca62aa88326f42d42a85ca98e284e2e49a85da9852ac92e3fa7c9a8ec2b9c2fd5a31fa5222ce92f8ea1fca2ab2bbe2f1fa851a9ce293d30d8a74da9ce264d301a9f27a14a254430f20dcf957a24952fe99d52a1171b2f2d4aa7eda8e2994726f1aa6dac4b187f9db2aa48ac98272aa003a834a90c292f9c98a360a54e277899cda186a26524309ab0a272a40f25359faaa724a95f26b8a27fabd4ac452328a30eac6ead57a4eaa0aaa95eabeea5d49cefa501a873a71c9b7ea44fa6c2a459988ea107a3c0a3380caf949899d49cda15811b8b1c58984417cc1d2b1f9e96cc18cb1e282064149d18821e1d2096187418541e40202c194e17421e2a20ca18f716b11daf1fd81851165d1d111f3a193716041daf1e2b194a16c21cf21d60191116811c911d7e19ea15221c4d1d3b19c215c91b001def1830155f1bc21cb218c914e21a6f1c7e1825144a1a3c1c1018f3130a1ae71bca174d13ae19991b7e17e2128119231b3d178f121719cb1ae4161d12c118291a711666114a18de19201664112b188719c61552111b1819192d157211a9170919a914b31031178a189d149d0e0b14041549159d0e0b14041549155f9574981599061f5f9574981599061f63954b9f2ea0bb268f8b89a1b1a2ef27e6205da2c8a25e285727e6a2e8a393289b2b2ea213a4b7286e2db2a295a48329732ee8a27aa4942a2d2f40a221a4b92a452f9da2b2a49d2b7c2f79a343a5772bef2f96a41fa6e72a2a3075a58ba7242a4a3035a557a7d228633057a446a6d4268330b7a224a56825e22f22a449a6c123572d39a656a86e232c268ea8eea9882328a031a8bea9ae24aba1d8a6bca88325fe9f0ba69ea84225c09fc7a58fa8ef2500a004a696a890251da08fa79aa92c2269a0d6a8ddaa1b1f7ba0eda8e1aad61018a08ea875aaf39b319e33a70ea9a29dcf9b1da591a77ba1b79938a387a542a19494ce9e2ca2049e91097f94569bd9966f14111a1719438a4d16bf1cee1c15100f17671d1a1e5c154c17bd1df31e1618f916ef1d6a1f6c180017ba1d211f97187e165a1db21e9d181a16111d3e1ef418d615c81c061e0119ad15861cc01dfb185b154c1c6f1d071912150d1c311da918dd14911bef1cb918b014081b851c74188b147c1a571c47183414121aca1be9177c13a9195b1b7717df123a19d91af4163312ef18391a8516a2118618c519691678112f185819c8151a117c17c1188115f3103017701801158a1073163718c014e90fc31504180015b30f291649189015b30f2916491890151688bc8e67902d091688bc8e67902d098a9c9099379c5628a59c309d3e9e0029558cac9d599ea9295d23bf9f9ea05e292f29e4a04ea1492a052d37a188a1ad2a912ea0a0a6a2f42a6a2ff7a0d6a3242bc12f93a147a4322b0630e5a29ea40e2b5b3024a457a6ad2a93309ca4b4a63a2abc3055a473a68f29c73099a477a67928cf3086a44ba7b82628301fa5cda788252b2d57a63ea88625ca245ca6f2a8ac2553a12da6a3a82e2297a2daa558a8942533a1f1a5c7a82626a8a04ea62fa971246ca08da672a9822290a078a78ea9e8214da0c9a7eea92f20b39fa9a7d2a95b19019feba68ba91e96ef9d13a6caa8299ac19c08a507a8fd9a549962a2a3a52c9903929b9cc9a19e96e00c6b89c89a2c8c7a12681826110116ca13f4190e180e18b814781b1f1a301891158c1ccb1c5b182016051dda1da018f615081df71dd218a015fd1cf01d6c189a15cf1cda1de5182a15991ca11def183715571c711dfb18e614121c0f1dfa18b214b71bb71ca3185a14f71a711caa18ef138c1a341c6b189913391ac11b38181013ae19531bf81788125c19fd1a9a171712e918591a28176711a718e619a6160f114a187a199316c710e81711197416ae102217aa182916721005177118bf1534108c1613187d15410fcf15ce1742152510cd15c117e9142510cd15c117e9146c8ec090a89031826c8ec090a8903182cf9c5f99fd9ab928869e999bce9b7429b89e939cd49c9e29d2998b9d589fd929db246d9ff19f6d2a892b59a053a01c2b4b2e2aa027a18b2bc62faf9f52a2a62b383055a163a4e82b6e307da2a4a45c2ba330a4a374a5b72ac13087a498a6fd29ff308ba4caa642291b31b7a406a7d6281931bba464a757288c30eea488a788274b2d6da57da8c426d62344a58da8ef2535a15ba5c4a739253ea270a52aa8be2483a10aa61ea94624ffa063a691a98021a1a0aea6a6a9eb1e69a0c7a6f7a9ef1c08a0b6a6b5a9211937a06da630a9981501a027a6f3a81f8f4d9dfea4aca88995e09ba2a3e3a6fc9acd9958a12ca51b9aa995069e9ea21e983293dd996da08297018a3f94769ebf91e00dd715a995d91020133c1ae617aa18f813781ba519a5194914d11b711ba8196914be1bde1b54195714b31bf91bc8186314801b301cf21848145b1b291caa181a143d1b1a1c641892130e1b0b1c7d18a013aa1ad31b7f184913401a551b37180413ee19211b3818b2125719951aca172812f618141ab017a6119d18e719b71624115a18671964168b10e71722197e166a10a117bf184216b40f0e1789185d169b0f93162a18bd15490f651600188215080ffc15bb17fb14630e8015d416d414690ecf144f162714690ecf144f162714c18c528e698fbe01c18c528e698fbe010ba0c4914b982c29b0a02e9832992c2abca0bc9ac59a592ae4a00d9df99eed2aa61ab79f0da1682b642898a005a1422b7d2dd9a0eba0ab2bd52f9ea0a4a2cf2b7130a1a17da4a22bb9307ba23da5382b1e31a2a3dea5d92a653150a4baa6652a6e316ba4e7a6ab297231a5a45ea71b297a31d4a490a76c28d4309ba408a80828c92c45a564a80027a11ba2a5bca8e12505a4d4a59ca8492599a30da526a873246ea21aa5cda80e231fa2cfa580a93121c7a1b7a552a92c1f65a0e3a59ca98a1c5e9faaa543a9bb18cd9e7aa5cfa81215e09dfea489a800159f9c2da411a8d214af9bf8a26da65814859a75a117a5c0134298f49eb5a3fc124e95279c8aa12815e3908896459f911639899f0e8e9ade173509811796903418050fa418f50f4f183711471aec165a198812061b451aab192b133c1b331b9a190e13771baf1b5b192513581bac1beb192c13051b121ca3193113ea1a011cab199512701a7e1b4c198812031a5d1bf7185912b519d61aee18c0113519631a9b188f11f018061a58183811a518a4199c170e1170184c1924176b10081801193817f00f7b179c18a616690ffb1657184116cb0e4f161218df158b0e0916c5179a15a60ee6157a170a15970d301594168215610b611230148715610b6112301487150000cf816a8b118a0000cf816a8b118ae79b8694ab97602556a1309ca59d1a2a11a3449fc89e612a6fa308a0719eae2a3ca1c6a011a22a2b3a1c43a05ca13c2b542b3ea082a1f52baa2fcda020a2e72b153183a11ea4ac2b923177a210a5582bb2313aa3baa5ee2af43116a46ea67f2a22325ba4eba6f0292c32c1a473a74c292c32aca4d2a7ae2843317ea4e0a732286f2cd4a41ba8062779179ba42fa81326a4a339a508a8572588a3baa404a86a24d3a2efa4e2a84b23cba15ea557a9012216a156a51fa99520b2a031a5ffa81d1e62a0daa4a7a8991cb59fc3a47ea8451b849e6ba46ca8f317559ddea318a89f14b29b52a2a5a647178b9a38a14ca585168099bf9f19a4bf153d98639d54a2f316a295db9a99a0ef18449109945e9d941981031416a995111adb0e0f19d412ce1990104b1ade17c0197511b01a63196319af11c71aa21918197d12ad1a641a5f198b12a81a831a10192812821ace1a0d19fb11fb192c1a9418881197190f1a9718121101199e1941187e10c11842194d184c104818f5180e1829101618b1182018f30f6c176818be17070f0a172a185217be0e50166f17f4160f0ece15dd166c16690d12156b1601168b0c7f145e155e157a0c5c14d914d914ff0cfe1369146914420a2d124d14cc15ca08c5115e14fb15ca08c5115e14fb150000e683cf8b6e860000e683cf8b6e867f9cba967f996e2693a03d9bc89be1295ca1799def9e572a8aa2ae9ee9a0ec2ac3a36da014a0d92a6ba19fa033a0f42aba26afa07ba26e2bbd2dd4a11ca3492bee30b5a198a3a72bc63158a334a5ae2b2e3210a409a6822b983205a440a6f42ad13215a4a2a6522ade326fa490a6c329e43218a4f8a614299e3113a4c8a69528a02b3da417a7be27eba094a477a70527eca47ea5f8a73826baa32da541a86b2513a2fea46ba89524cfa199a457a842236ca184a44ba8ba21aaa071a492a8fc1f729f71a49fa8671deb9e45a44da8741c719e9ca358a7181c479da5a29da6c31b929c78a1c0a5561b019c45a08fa4051cc999229e08a32b1b6098559c12a2b71ae6959999e2a0831b449488954b9eff1a1a90ab0efb99fb19e1888d160b93fc197a086b186f09c619310e44196812161a071092196216171a3010df194a18cd196810c619d4184a19a71070196e196e19b91064197d197d198f101919271927193c10ca18321932191d104918e118e118340f14184a18ed18c80e3417f1178f187e0ee216731747182d0e1216f616fd17180d921577166d17ca0c19158515d8169b0c81149b1570160d0c0714ff143316f50bb313ae14cd155f0b5713ac145d156b094f127a14d014dc0af811ca138514dc0af811ca1385140000c2838b8e8b8e0000c2838b8e8b8e7e9d0798319bdf2547a0e99c919dc629dda1fa9d4c9f0a2acea2029f2ea0ea2acfa13f9f67a1672be3a323a10fa1882bf49dcfa03aa3de2ba72818a153a46d2b933066a36ea5022c7c32a5a249a5192cec321ba3b5a5c42b5d331aa3ffa5f42aaf3357a352a6622ac93342a4c7a6da29e33300a4a7a77629b63198a4cca7e3281b292aa500a892279da124a528a8962624a4daa58ba8cd259ba39ba415a8fc2438a282a46aa85c2474a18aa48ea8132349a146a45ba8162246a128a444a89e20e0a012a48aa8c01f4aa025a44ba8051d799e4fa33da8301c0a9d9ca2a1a7761a259c79a10da667183c9b6ba0f5a47e19019ae79ee7a3191af598f39c58a2771ada96d59a06a1ce193a94fe94db9e6719948f580e249d5819d38b5315a59add19f1024a18ee92e3193208e9181612641a980a08194b16951a6e0c22190818b81a510e2319bf18bf1ae60d1d197318521a7e0ec7189918ea19150e7c184718e819940d341808189119450dda178317d418e50cdc16f6167a18970cf1157f162d187e0b8615781533171c0bb0140f15a816e20a541428141c160c09441393130416f40873123f132e16ad07c711e312e0155607ab11be118e151805e3102912421510084d11e81246152108d20e7e0f98142108d20e7e0f98140000ba8070899a8e0000ba8070899a8eb19cec97229a9a258aa16b9deb9d672a0da2a79ec69f9e2a1ca3189f60a0cd2ae0a399a068a10f2b14a40aa1fba2d22b5ca4efa0c0a2bd2b5121f2a020a5b02be62df2a11fa5712b7f3241a25ba5042ca3338ba28ea5ec2b0434dfa25fa6f52a2d3411a36da65d2a4234f7a36aa6a1295734b4a3e1a6ca28be31baa3cba666289c257aa41da81d2819a4bfa4a4a7362796a423a533a87b2638a4b7a4e7a7802581a3a1a4fca7d42468a262a404a81124aca132a430a81123e4a000a457a8a62154a094a314a8852018a0fea2aca71420ea9e26a2e1a6f71e6d9d3ca1aea54b1db39c73a027a57b1cba9b399f6ba4141ce2992f9eeba3fb1a9298299cd0a2af1a9196b699fda0f61a43957396be9fa41aa9948488539c011bf3902b1315984f1a158c51160b93fc190983ce176189631aca028318ab0f131abf07931821149a19b6098318ac1474191e0b16181215d8188e0a89179315ee18ec0b1917fb159618e509bc16ad15bb188809be153e155e182a097015f2141e18e6082315aa14c717be087014b9136e17b4068613291201171e049011c71029175d018f10ea0eaa1628013a0f600e991606019e0de90d1f16e402720e830d5215e902010d0c0d3a15e7003d0bb00a2e144b04640c960a72144b04640c960a7214ed84088ab4896a0fed84088ab4896a0fad9b2c99069aa02544a10c9e1aa0082ac1a2f39f9fa09c2ae7a33da040a1da2a69a499a0d7a1002bf3a452a052a1652b01a51da290a4a02b8fa388a235a3d92ab52736a341a5fc2a6b301ba3aaa63b2ba23358a397a5582b4b3467a3ada6bc2a6b34aaa3e4a6732a983426a4b4a6e929bf3447a40ba7412997316fa3aba68a280120c4a404a94e2864a32aa53ea8fb2649a404a514a8802624a3b3a4bca771253fa24ba4cda71a256ca1f4a3a9a74124f6a084a3bfa77623f5a065a3ada71b22faa08da21aa73821f89fdaa168a6bc20c59e88a1afa51e20a79e9ea0e1a41f1f379e63a08ba40e1e559dee9e26a42b1dd79bad9d76a3731cd8999d9c8ba25c1c7e98529917a1061c8c96ff94fb9e051c76941e88529c231b2d93eb106499d41a4991441442964d1b4c90ee158392d61a1e8d6517ea88101bbf82c117bd112c1b5607f917c714a11a8406051856158d1ad208cb16e714761a8f0849168b14fc193b05dc153f1499190305fb14f5139b19b604ae14221247197b01db13bc119e1865017d122e1053183b012911ba0f00181f81b010dd0e9f16fc801e10eb0db515ec803d0ed30b4915e880e30cb40b3315e780050dae08e014fb80030ccc08ff14b4007d09b28deb12e886dd858e824415e886dd858e824415b78de788328d320db78de788328d320d1b9e0b9cbf9c98257ea28a9ff5a0332a01a3c0a093a1c82a24a432a153a2172b46a43ea15ba2202b45a475a146a31f2b1fa32da1cea3392b94a506a2b3a2302b859d7ea38ea5622b042b07a491a6f82a9032ada367a5732ac034d2a2b4a5db2acd34bba287a6b82a0035a5a2e7a6162a2b35a6a296a65429ec3013a4a4a6852892958ea4f0a758270fa3e3a477a7ab26c6a38fa49ba73926c0a2a1a40aa83a2511a283a42aa8e224dca143a4f1a7342470a1bba392a71e2341a018a39ca76b22eb9fe4a244a790217a9f3aa264a6d120449fc3a1b3a58720ec9e33a134a5541f589d5ca0c9a4ef1eb29c179f2ba44a1ed39b1e9e6ea3791dc39b9a9dcba2301d3a9a3d9ca6a1d91cf696ce972b9fff1c8c937608c99a971c80932c131598451c50924915d494f01b4690af16a08ff11b5f8e2b17d108861bb98ccd168e081e1b548c7d16700eb41ad1891d16040ec41a3d899415830d341a06892315150db719af8a341450065419338aa311cf05e618ba8b471177859c18478b4a0eb38b5518c98a480c3d8b1218f78be308b38db217788b7908458d1e17e18a1408dc8c8f16c48aab076f891c16478a7002458c5615db886b02308c3c15a2895082f98b6115098896863590bd1181841002dc02891581841002dc0289150000f983bc89030c0000f983bc89030c0c9a9a957199142529a1129f1da0f22971a1d99ff0a0452a60a270a041a1aa2a39a34fa081a1fc2a99a373a00da2252b4ca421a1baa2e22ab3a420a13ca32f2b12a47da2f0a4f82a450d7da268a6932ae82ec7a47ba68a2a523400a42aa5a9290c3502a3a4a50f2a713574a271a690295135c4a2b8a5ea28ad2f35a477a77d2886a4d3a414a8f327d2a415a472a67226d3a3cfa3d3a60d261aa43ba4aaa765250ea32ea4dba7052522a20ea490a7482453a16da358a76f237da04ca3efa60a220ca0b6a2b4a67621459fe2a103a6f820f19e2fa18aa58620089e9ca00da5e71f7f9d11a0a5a4b61f4d9d4d9f55a4ab1feb9c159e3da3d41e8d9b379c1ea1f31df4981b996d9f4d1d529705941f9edb1cc2958308d29c661c3c94d4142f992f1c879198172395381c338f82186789c51bd88ebf18b70f051c118d1a1815121b1c9c8cbf17de0eba1b468cba154208b81b888b8314c887901aa08acb12e886d419dd8b0711b08caa19a78c560f4f8c34198d8ce60cbb8ee118648c720967908f18dd8c61035a9103189b8c2d830e9194172f8cf38204924a16a78bce82cb910e16f089a582b5900316c4898e025a908f15a48973020e8e68159d8a4e82a68bc81426882482fa8c7114ee8a0f8bbe8c3b14ee8a0f8bbe8c3b140000168ae38c0f0f0000168ae38c0f0f539a65947498032582a0ee9ee19ff32983a1a99fc8a00f2a8da2fd9f1ea17d2a5fa31ea04aa1832a1aa496a0d1a1ad2a86a4a1a08ea2682a2fa414a12fa4b42a27a4f5a2ffa46e2a2ba4cca4e4a6d52aac244da465a6582a1e3132a5aea6ac29fc3417a429a5c429b83531a1f4a438290c35e6a203a54d28cd2d68a472a61728bea1e1a48ba78b2769a36ea508a8482799a36ea418a7332632a33ea413a75f25f8a22ca4fca6cb2427a2f0a317a75b2467a156a3f9a6b723d8a0eaa25fa6732272a00ca2eea5b221ed9f39a185a5fd20049faca015a59220f39d829f61a42a20479d429ebca3071f659c229db1a20a1ea19b829c00a2a21df99a429b83a1661d049a1f998da0aa1caf983495f89edc1c7396b00e069a9f1cd894e3147095781ca693d2167c904c1c88928d17bb891e1c499120177089d21b0690a2160f09451b318fe3169e08381b8e8e99153b089a1af98d2815b607821a908efe121007f619058e41117686da195b8f600d778f6919cd8ef7834f92bb186e8e9b8c41946b189e8efa8d99942318158e1e8fcd94a017318e079068940017d58d918ff293c7167d8d0f8f7b92b2164d8da18e16924a16838d548e8f92fb15408e1a8ff4924e15f58fc98fef9168155891258f55902f145891258f55902f1400004516be16371100004516be163711ba9d479bf99d3b2814a108a09ea1682941a1949fdea0d12971a107a028a1f8293fa22aa060a1392af1a252a08fa1702aeda3b9a05fa26c2a0ba46ba1a3a3732a24a4b0a2d9a3162a4da494a31ca6292a10a454a218a4ef29712af0a3e8a5da2971338ba448a698296c3501a3f3a437295834c1a3cca5ba28802b4fa47da6fe27efa1c9a438a7672739a410a5a1a7bb2602a387a4d4a6d125d1a24da4efa623254aa22fa4eea6cf24f6a1fba3dba6462472a176a388a6b62306a1f6a272a6ae2297a05fa233a647220ba098a197a55f21719fbba0e5a48d20039ec59f7aa44520f19d079fa6a3841f1e9d829e6aa3071fad9cb89da1a2411ecf9b7c9c9ea1fa1d389aad9a79a0461d99983c94689dfa1c4a95fc0e6b99cb1c999234189b95011da28f2d1a8f105f1c3e8fd4193113221cea8e7719bb12bd1bab8e191949123b1bc78fd617fc0e461b2a90a3154188a61a32901512cf907e1a2f903c0eef93f3195490ac845d959219e990a18f7c9626192f918c917597cb187191fe9289976c18759111947a970a18399132945c975c172d91c493d2965417769033933996af161d90a692b5958d160190d9925f95c515f98fa09238959b15f38f05936c950d15be8f5993fb94fb147b8d4e9153930f157b8d4e9153930f156c0c801a261c97146c0c801a261c9714049f3e9ea49e702821a1359f76a06929b2a2509f63a09229e1a1e29e42a0e129d2a1029f74a00c2a01a2c59ff6a01b2a76a285a0d6a12f2ac7a386a16ca3112a00a452a2bba4162ac3a405a400a5bc29d5a37da486a60b2a6fa46da4e1a56e29d22dc6a441a67d29383416a4f6a5ef28e63246a4ffa58528822419a5b1a65e275da412a663a87527afa59ca533a8732607a4e5a446a7a42552a3aea431a72325ada29ca412a79624dca156a4f3a6332428a112a497a64223c3a0b4a379a6d62266a0c2a219a62b2222a09ca131a5d521529f3fa022a40421349ec99ec3a2a4201e9df29d6ca21120259cca9ce8a2901f529ba59c23a2421e659a8a9bb5a1131e6099fb99e69fa41dbe98cf97b79d4b1d8698cf91c89bb61c1595d7131a97251c368cc31a120af81b32836d1b8d16a41b6c8d121b7c18ed1baf8ea41a3018691b358e381aba16a51b4d8c271898082d1bef8dfe10ae947f1a1890c30b2394361a2d924f91f696f0198693fd94eb984719849374952a99d5184a93789569997c1844938a957299f317d3928b951d997517e0911295b698df164291fd94339896169090a6949497f1152290b694b796f215ea8f42947496b715a08f70942b967715218f0794d6952115dd8ed992e6943914dd8ed992e69439149e01011a461ced149e01011a461ced1422a150a0b09fc12765a064a04da19e28a8a0ec9ecfa01e299da0079d849e5129a5a0b09c019e8e29b9a0559dd39eab293ea166a00fa2a0296ba296a2b1a49a2912a3aea365a5a12963a496a417a67b2950a2eba43fa79c29a1a4e3a3c0a674297ca464a128a49328423021a380a604292631ada478a73c2878a459a42aa7412530a3daa544a9532715a40fa562a81c2672a20ca57ea7202526a2f2a455a79d24eba1b0a423a7322468a164a406a76223dca010a4b8a6a62258a054a361a6bf21999f3fa2aaa57521ff9e3ea115a5e020a09e6fa051a48520699dbf9da7a23520d09c979c43a2bb1f279c999ba9a11b1fb09b469bbfa1631e649bde9a23a17f1d8d9a799ac9a0ac1c4d991a997b9f101c9497b388339a061b9f944a165f8a901b128e9e1b15196d1b5a034d1d551ce91b2e83cf1c221c221cef82ec1bae19b01b9882e6198315231c618ee115a291161c1691130f8a954d1b5b926c8bb2967a1aea934594a0990a1aff943397e89b34195d94fc96459bca1833944d97a09a5e1812941697509aed176d93df96f9992b17dd9245964f9960163d92059682981416f79158953898b215de913295ae976f15e2911a951e974b15fb91db94bf9605155b909b936d956d156a9204946294fd146a9204946294fd147e8bf319761c23137e8bf319761c23133fa044a1b2a1172785a179a0b3a1462837a0759ed8a09e28309ff28c1598d928a6a0cf131a950d2936a2e39c4b9e4d29e8a294a25fa43229c5a2dfa32ca5092953a327a460a5282905a32ea4d2a5ff2832a4eca41aa7fe2847a3eaa4d9a62829e3a490a32da5852893a0f8a0c3a3b326ed28f8a2a9a4b62740a20ca42ba6dd26dea103a54fa8d425cfa18fa465a70e25fba182a413a76924eba179a407a70724b1a174a411a7462357a15aa427a7672208a12aa41ba7d221d9a098a3cba6fa2072a0bba229a65f20a39f40a147a5c01fee9d649f67a4db1f739cfb9c9da2d51f959be89a64a11420359b209bc0a08d1fd79b729c5ba1c51e2a9cd99c60a1b21d3c9b7d9c49a1e01b649a829a5aa0401cbf97ca0e999c6718d392861a2d17c81aa203a41d031d9d1bd1110a1f931e2f1cf90fc31fd11e7a1c93922e1ec01e8f1c0491341bad1a4a1c7f8e8615240ee71a49910905c3968a1aaf9357928a998a19af95f096d09af8184c959998009c98184e952b99569c93181695a498099c4118d0949998a99b09185a945198db9a8117fc93fa97059a971617934a973b995c16ae92e496109927162c928e969998d2159391f1955c9885159791ba9519983015d690c5951a988715a690429554977515a690429554977515ba9af88aa0833715ba9af88aa0833715f2a039a412a586268f9faba25ba4d127d6a0989e3da0b727419f8720a922d827c29d50203b20042701a1bb9c059f1428cfa1fea2c0a48528f4a316a53fa7952872a3b6a58ca7b5289aa316a5d3a6c228d0a3faa4d6a6c628e0a3a9a4f0a58f288aa369a35ba5142829a321a35da5932646a3daa32ba6de2505a4bba491a6cc25e7a28ea533a8922539a36ba5dba7cc24f6a210a55ea73d24c9a2d5a4aba7332408a2b9a438a7682399a185a4baa68d2220a158a496a6f1219fa018a45fa6652160a0c7a331a6bf2099a0dba2bda5a61f2d9fb7a047a4311ffe9bfe98a1a20e1f6898fc1311995c20e19a0693329c9020849c139fdfa20920829c4ba046a4621e109b5d9edba3931ceb9b439d24a1da1ba89ab6914f9c271a4c95bc1b0816761a5e108e20b2208d1a42168f217522901aa7165721ae214a1b2c153520821f0b1ce082ed1bb219b51bca96e58c4b97921bd896b895d6993c1b729613989a9b6e1a03960c99529c9819d89568994d9cfb1872957f992c9c631879952b99229c33184a952099e49b03180e95ea988b9b2c17a194a998349b53175d947498ec9a0917db932198229a71161093a197b1999915a992ca96a2992815f692ae966c99f6146091d495719ab90e5191d795bc988c125191d795bc988c126d9a989458974b126d9a989458974b1247a366a43da58225ffa1c4a376a5ff251da038a2aaa47f26d816d727ea282e288f159a261b2855256ca1c0a225a4612519a2e0a42ba6b2261ca347a5ffa64227a6a2cda547a78a2794a297a553a7ba27dba26ea57ba70a28efa3b2a4f8a62428fba1a4a13ca41a28dea1c3a1f4a356271ca477a416a6ef25e7a480a50ba8772548a43aa5aaa7ff2429a34ea505a870246aa23ca50ea8ed2301a216a5eaa75f23baa1fea4ada7d02266a1bea44ca75a2204a185a4e5a6c021c2a05ea4cda6402162a02ba47ca6ac2025a0f8a312a6431f599ff0a225a6631d119da49b32a1c71c7a11be238d231821ed9c86964d996c216b9deaa0c0a3041f319e82a162a4bc1d5e9d6da0a2a3561c3a9c9f9e9ba1d31afc9a9f9a10a08016ee99401ad8980b8b06165a229e21ff11581b87245b25ad19871a3e240d25fd1cd4101b20b220cc1dcd940008ce92ef1ca99875990c9e141c67967e9a7c9f1e1be8969e9a039efe180498ff9a169ea1181e97e19a259e3518a0968f9ad09d3018f395479a2d9de7164295f299ae9c6a16e694e1996c9c0e1693942c99c09b76151f944e98f69ae614e7921498909ac1147993c897709a4a14e59257971d9a8f1406936197d89903145492f6968699bc14e9902b9634994414e9902b9634994414e80d171c3f1e0318e80d171c3f1e0318e39f42a29da33a2455a0e4a326a5112553a108a3dfa5c02442a3fea69aa7451d9ca4a6a772a8e928a9a0fca503a8a226f4a019a51ca74526aca160a53fa7302650a295a583a71c2693a2b3a5b8a725265fa312a609a84726c1a2baa553a8ff2630a1e89af19fa127539f1393b99437258ea11ea5bfa7a62499a1bba508a878240fa27fa5aba74f24d9a143a5bca72c24c9a12ca56ca7e823b3a1eea433a741237ba1c0a4f7a6d1223da1b6a4cba6722214a198a4a6a6eb21c7a073a497a67b2181a054a49ca60a2152a00ca436a6712004a0d5a30fa6bc1fc69fcaa3d4a5961e379d11a1bea3111a459d23a16fa47d12979dc7a10aa5c41a3a9d77a1c8a4311b3e9cb7a02aa4711ae79b71a07ca3ac18f39b5a9edea2170f449c2c967e9ef0899b175822332348924c1f32284429dd0d0b1c95263328311e1283151e521e521ed9967d981a9ce51c2f99039c5b9e4b1be999129c6d9efa195f99059c119e561962988a9bc79db618f997419b889d65183497139b769d3d18f496c39a449dae178f967b9a189d6f174396279abc9c1317d4958299649c231641950e99d39bbf15f594e6984c9be0159c948c98bb9a3415f79328987e9aad14fa932598fd996f14ad926c97599a9b1167910197e6997c1467910197e6997c14000011163d182702000011163d182702619eaca168a3152255a051a406a672248d9f50a226a41a22d50aeb0d7b11de1bed9c37a1f9a2f92239a2eea4caa6802526a212a5f9a6bc2595a20fa5eca6b125daa243a518a7902522a372a530a7a2252ba36fa565a79c25fba253a5f0a624257fa174a441a6702338a18ba48fa66c221da257a5a4a74923d8a2c5a518a8cd236ea278a5f3a75d23f6a12da5a4a72c23eba101a543a78322b8a1d4a406a71a226fa1c4a4e7a6b2212aa190a4b8a62b21f6a05ea48aa6ba20c3a031a448a66d20bba00ea416a61e209ba0aaa3dca505209ea036a392a56d1fce9f3ca2b0a4581e459b539f7aa2511cea98769d45a2d819009c4a9fd3a28b19729c4da08da34719239c65a0a1a355194c9c99a0a7a36e194e9c57a073a3671a8e9aaa9fa1a2b01a6c96559cd49e34106024942cb42daa9fae1cc225b626f1212e98be9ce39f001c199abf9d13a1611a3399429d09a04619a798099dbe9fa918bc98c09c539f20186598789ce89ec71740983d9ca29e9e17d297e39b519e41179e97909bd59df916b296d49a4e9d09160896419acb9c91153295a9995f9c3015e2945399119cef1480941999999b10154a94b898049be61415947698d99ac91460948098549a4a1518938897de9ada10af92cb96f898a012af92cb96f898a01200002a1504190a0900002a1504190a0960a00ea2b4a39c22219f04a363a4de23b09cb9a0fca1b3215f99839d8d9fbc1e74a1dca2c1a40123daa0a6a442a6fb2443a1cca468a63025c0a1e1a494a6412517a200a59ea6612569a204a5b0a63e2526a21aa5f7a64925b2a1e0a486a6e724b2a08fa328a54223fc9fcba231a5d12122a2e4a4d0a652221ea2b3a4c1a62c221da2a4a484a6f02117a2ada476a6b721e5a1a0a48da65d21ada187a4b2a62a217ba174a4a1a6d42052a144a483a6a12001a131a456a69220afa0eca337a625205aa0c1a3f8a5bd1fbc9f41a3c9a5301fd19ea5a270a58b1e179e2ca2f5a4da1d999da5a170a44f1d4b9d08a103a4651ce29ca9a093a3f91b3c9c6fa08ca37c1af79b45a082a3eb19d79b2ea065a366190b9c0da0eea28b19ce9bb39fb8a20d19909a5f9ecda02d18380d93106b12090c2b8c08925695008798998a9d2ba06e14839ae59d48a01d18bd992b9dc19f0b18da98ba9ca79ff1168198649c3c9fae165798419ca99e01161c98049c209eba157797729bb39dfa15c296199b5a9db8152e96ba9a0e9d83159195409aad9c341537959e99219cb114f59426997a9b5714c694d598fb9a3c14c394bf98e59abf13b5949698a59aa213a9947d98479acb1252944198199abf1300943897a0984d1400943897a0984d14000061157f18ee80000061157f18ee80c09ebba177a3c7219e9d70a1dea20a224c9c50a090a10c210c9d18a05da1b220e89e65a22aa4d32258a009a480a54b24bca062a4e7a57524eca075a41da6782429a1aca447a67f2491a1d8a470a69c2452a207a570a68524fea08fa457a64524cd9faba342a5f022569f0aa3d4a44622e1a01da497a5942292a15ba40ba641220ea16ba43aa6ee21c4a089a496a65321a9a075a498a6162195a055a44ba6a6208ba020a405a692206ca00ca4eea5552038a0eba3d1a541200da0b8a3b3a5b41f9d9f92a39aa5441f5e9f36a365a5ff1efd9ed2a210a5a81e6b9e62a2a8a4081ead9dbea138a45f1dfb9c2da1c9a3ba1c7f9cb8a02ba36c1c1c9c71a0f0a2b81b879b23a0bea2181b579beb9f8ba27e1a3d9b8f9f8ba2021a1e9b4d9f65a2e0190b9b029fa2a1ad1940992a9d2f9fc9189392ae97b7995615f9920e99dc9d02131699969c83a0d009a8988f9ced9f5b10cd98fe9ce99f3b15cd98cf9cc59fb8157a98569c419f09154998039c839ec11412987a9b3e9ea414fc97199beb9d7a145897d19ac39d04149d96849a649dce130096399a439dd1126795f899da9c4c13d1947e997d9ce41267941499389ccb112b94b198009cf3103394b098ac9bbf10e79259984d9c970c4292ed97de9b3c0a4292ed97de9b3c0a0000000000000000000061157f18ee80c09ebba177a3c7219e9d70a1dea20a224c9c50a090a10c210c9d18a05da1b220e89e65a22aa4d32258a009a480a54b24bca062a4e7a57524eca075a41da6782429a1aca447a67f2491a1d8a470a69c2452a207a570a68524fea08fa457a64524cd9faba342a5f022569f0aa3d4a44622e1a01da497a5942292a15ba40ba641220ea16ba43aa6ee21c4a089a496a65321a9a075a498a6162195a055a44ba6a6208ba020a405a692206ca00ca4eea5552038a0eba3d1a541200da0b8a3b3a5b41f9d9f92a39aa5441f5e9f36a365a5ff1efd9ed2a210a5a81e6b9e62a2a8a4081ead9dbea138a45f1dfb9c2da1c9a3ba1c7f9cb8a02ba36c1c1c9c71a0f0a2b81b879b23a0bea2181b579beb9f8ba27e1a3d9b8f9f8ba2021a1e9b4d9f65a2e0190b9b029fa2a1ad1940992a9d2f9fc9189392ae97b7995615f9920e99dc9d02131699969c83a0d009a8988f9ced9f5b10cd98fe9ce99f3b15cd98cf9cc59fb8157a98569c419f09154998039c839ec11412987a9b3e9ea414fc97199beb9d7a145897d19ac39d04149d96849a649dce130096399a439dd1126795f899da9c4c13d1947e997d9ce41267941499389ccb112b94b198009cf3103394b098ac9bbf10e79259984d9c970c4292ed97de9b3c0a00000000000000000000000000000000ff9946a12fa225161c18bb9c0d9e5c27d2228e220e246d278726ed22aa244d282b29fb23d02472285e2b652427258528772d89243b253b28332e34233423c828b82d05997e972328952dcaa80faa8b251f2ec6a9a8aac82ba82e7aa4e7a26b2c142ed0ab8aacfe2bdd2f1921c6219b286e2f062417253e28112e4e23272429279c2c3522a223172670290822ce22c42491259e1eb020661f23a071aa38ab9ea8eca67dad6fafcf2380a292a935ab80299d0e4698b097e3288f89209f539f1428baa423ad7dae3125aaa5b7adf5ae74a5a1163c1c3d1f639ee31857203d22129147172a1f662115912a19581de31e9c1969192c1e8f20ba8992193b20a121dc1998193520cb212d19f418a21f2a218318cc18991f2321da187a18381ff0201b197c18c21eaa20d2182818451e5c20e6181218fa1d0920011967177a1d801fc318f8163a1d181f8218a0160f1db11e90180616bf1c541e5218c7157d1cf41d2918b4152e1c991dd2177015f41b4e1ded171e15521bf61c1b17d214c91ab71ced166c14951a891ca81647145b1a681c79161814011a2e1c4b165b13b719881bac15c9122819791a5a154a12d918591a40150d12a0182e1a40150512b9180e1a4a150b126918c819b91468112518be1923140012b717041942140000000000000000ff9946a12fa22516ff9946a12fa225161c18bb9c0d9e5c27d2228e220e246d278726ed22aa244d282b29fb23d02472285e2b652427258528772d89243b253b28332e34233423c828b82d05997e972328952dcaa80faa8b251f2ec6a9a8aac82ba82e7aa4e7a26b2c142ed0ab8aacfe2bdd2f1921c6219b286e2f062417253e28112e4e23272429279c2c3522a223172670290822ce22c42491259e1eb020661f23a071aa38ab9ea8eca67dad6fafcf2380a292a935ab80299d0e4698b097e3288f89209f539f1428baa423ad7dae3125aaa5b7adf5ae74a5a1163c1c3d1f639ee31857203d22129147172a1f662115912a19581de31e9c1969192c1e8f20ba8992193b20a121dc1998193520cb212d19f418a21f2a218318cc18991f2321da187a18381ff0201b197c18c21eaa20d2182818451e5c20e6181218fa1d0920011967177a1d801fc318f8163a1d181f8218a0160f1db11e90180616bf1c541e5218c7157d1cf41d2918b4152e1c991dd2177015f41b4e1ded171e15521bf61c1b17d214c91ab71ced166c14951a891ca81647145b1a681c79161814011a2e1c4b165b13b719881bac15c9122819791a5a154a12d918591a40150d12a0182e1a40150512b9180e1a4a150b126918c819b91468112518be1923140012b717041942140012b717041942147a91fc9e0b9fd9947a91fc9e0b9fd9941b990a9f0d9eda26191d1e1f461f9027d4229c1a061c0a278327531b3a1b20278f2a021cd51b8127a52ca00e1590c827922d9e9e0fa196274f2e8fa40ba61b28c22e4aa89da9ec28082fb6a8e3a9fb2a572f3ea8a9a9092ca52f34a9e7aa872a0b305aa5c5a7e02809308a8e299932286f2f0d1d781da026aa2d9c18081516247a29369e05a14d1cb6200ea576a6699db5a14daab7ab52a157a390abc9acaf2140a162aa4bacb6288fa054a90dab16293aa130aaedab35281ca34bac8aada527daa2e3ab58adb51ba19f94a8eaa93da7bb9977a40ca6b1a0c396e2a0b6a270a4b293e09fa9a1bf9c4a92069ebb9fdf9d46138a15bc16419a4d16da1c991d67957b17191eab1ffe94e618db1e512074157e187c1e132066183518531e32207e186817311e23204e18c516c31db21f01187716701d301f87185a16201ddb1e93186c16d11c3e1ed3187416941cad1dff1857164f1c5a1db618e615071c101d741871156d1bd31c3e18f414f61a821ca9173d14941a4b1c4c1715142d1af51bf4167713c6199e1ba716f6128b19221bff159c121119d21abc15b711bc18311a5c1593115518c61981153c1113188c19f4143411fe171d19b5146d11d517fe18261481103817bc180f142c0f8f15f91683142c0f8f15f916831446889189a3891c1246889189a3891c127a970c957f93cb26d795d8990b9b2828221a139a759b9c28b821e198729b65286927bf9a279ce728792b399d589f5429242d27a1dda1cb29522eaaa21ba4e029f52e4ea443a5632a522f1da5a0a6b32a932f94a62fa8b62ac42f40a69ea82f2a07304ca5a4a75229203031a2c3a404280b304e9c12a18b26832d9e9e64a10125c828eea2d2a40823d2953aa652a81e206da208a860a9731f1aa28aa8dca9d32281a1f3a8c3aac025a2a140a930ab87251fa29ca9c1abea251ba21caa48ac8b2174a1fca94eacf31e71a012a91fab071cb39ebaa74ca92016769c68a5a1a74e9586995ea385a5389df9955fa00ba3289df48cac99789d7c9b211181151b0b71941814df1aee1ad6893416981cae1cbf0f0817601d351e0b146517bd1d1b1fe7151317f41d4c1fae171f17c61d421f0c187016691dda1e221853161d1d691e2418df15d21c231e37189715951cda1d3d184b15551c8b1d5618fe14111c311d5d18da14a31beb1c22189d14061b991cbc178714ab1a4c1c701738141a1af81be516bb13b6194c1b831630137b19e41a26165c120a19621ae015b311ac18161a9a15941149189b19551529117b17e518fb142611fe168118c014cb108416161879147a101c16c517b9148f104d1650173a158f104d1650173a15c4804b8393865081c4804b83938650812f9c658c5a8db928549c9093b294232995997a8dab0ee3295412bb989b995c29fd22ce9d0ca0402aaa2905a061a1ba2ad12c3ca019a2f52a482e45a1f9a3382b312f70a2e0a49b2bd92f2ba4bfa54b2b3930fda4ffa6112b67300fa543a7722a743063a496a6ee298a30e3a3cda54729273047a25ea548283c2dd7a35ba5742684270da59ea694256e9fe1a54ea8b325fda2e2a6a7a8802360a2cfa74aa9a225a8a135a8d2a931258aa14fa86daa602470a17ea8bcaaa922d2a08da8bcaa862253a049a883aa1d204aa0e7a7f8a970162f9fa8a65da90e968b9d91a532a8f299f19b56a4c9a65a99959874a1eaa40099cc91199c09a11c96e20c54097798f08bd61104193114de15da136d1a0e1ad6172015231c2d1c0518ec15f01c871d5e171716341d491e0318ef152d1d1d1e7c17a815fc1c201edd177f15ca1ce11d45175415951cab1d8d172415551c761d4218e614181c101d4a18c714d81bec1c09188214651b861c25180c14ba1a441ccf17c9135f1a101c70172b13cb196e1b0a179c127819171bb81645122c19a81ad7158811b818341ae0150d1144188219cf159f10cf1706194c153210e7165518ed141b10ae160b18c9149a0ff015aa178a14100f5715e51671146b10c81500182c156b10c81500182c155285ce87298a1b845285ce87298a1b84c79c6b9200944b29639d51964b99b7294e9ec298689b6e2ace9ef2988a9b3a2aa913339c0a9dee2a32251a9f49a0a02b4b2b3a9fe9a1a52b232e8ea0fba2152cd02fdaa182a4092c38300ca4a9a5c32b7c30caa4aea6592bac30a5a4f6a6bc2aac30cca4b2a6c529c13025a4f4a53129583004a428a6b9283e2db0a486a69627cd24d8a52ea84e26eea12ea6a9a8a62518a387a6bfa8ad246da299a6dea8672470a14ca782a9e323fca091a7f8a93721dca070a731aa201e85a06da73caad81b15a04da7e0a95616d79fbea65ca9b60f4e9f0ca6cfa86e95619df0a44ea85c987c9b90a390a6d99a2c992aa16fa4cd997795769da9a1399917925b99c49f7f97268a1392f09ca591d80dd715a690a6106712aa1a2b19951703146e1bb91a29186914d71b331c58188914061c1d1c3d182f14bc1b6d1c51184414e71b9b1c11183414b81b8c1c3f180514951b4e1c0418b2131e1b3f1c98178f13c11af11b191713134d1a731ba816d212f2193b1bca168e129919b41ad71613120519301a5016a911aa18ff19e0153511681871198f15aa1005182819ae152910ae17be187115d60f121784183115fb0e91162818fd14ec0e74160318d014840f0c160d184f14380e56154e17d013110eeb148316ab12110eeb148316ab12518568818a86ec83518568818a86ec83f69eb7921c94de2904a08798bb976c2a89a00f9a8b99c92a23a20d9c3298f92a46a0fe9cfb9c872bb38e8b9ff59fc82b3928aaa05ca21a2ccf2c2ca12aa4222c562f8aa254a4152c4a304da395a5902bba3053a464a6762bf3308ba4f0a6ba2afd309da4fba60e2a06315fa41aa79429623067a4fea6bb288a2ceea49aa71428142054a5aaa87027d6a2daa55ba84d261fa4b7a58ca88225e7a2dfa599a86c2493a223a6d2a892235aa293a661a9b12195a1b7a672a92a20b9a07ca69da98c1dd59f2ba64ca9aa1a009fcea5f0a85718399e4ca5a8a8b30e2d9d9fa41ba8540e409cada3a0a6a80d6a9abaa12ba5170d3698109f50a3970c4595909bfba0150c26904c95e29da6117383d513c098511419094118fb893c15170f26199714e8154411c81a3c190018d012871b381b5518dd12bd1b191c7f1822138d1b1d1c76181813671b101c9d18a013581b1a1cd6182a13fb1a0c1c8a18b9128f1a001c4818ab121e1a781b58187b12c819eb1a0618e7117f19b71a0718ab11fa18481a8a175411b018a4199016171179184c19291664100e18fc18cc15df0f82179d185e15700ffc1651186b15e50e4a160e181715b10e0316c017dd14630e9e156517a514330dd01468165e15a10a571148127515a10a571148127515468a7c011f819c85468a7c011f819c85ad983d93549121219ca05f9cf19be9290ba310a0b49f242b83a271a05ba0362bc4a2399f62a0e62bcba2ed9f649d322cae1f4fa015a2552cd12afaa04da4562c1a2fdca16ea4212ca630bba326a5b82b073176a467a6c02b38318aa4e4a6f62a5d31b0a447a75a2a473110a59aa7cf299c30c8a42ca85829612c31a59da757287c1e55a532a82c2717a297a535a877268ba21ea5a4a7862564a26ba540a8aa2464a2a9a5c8a8b323efa1e3a540a9ad2163a1c2a532a9a620b7a0aca5efa8f81e9fa05ca597a8c11c5fa0d8a442a8641bb29e47a484a732190e9d94a3baa632142d9c6ea2f8a527149d9aeea005a5a51363999b9fe2a3a4122e985f9da8a1d014d495ba99bd9f31168190118f179cbf1749091d16db907418d10e06190a165c18c910611abd198918a511301b951a4b18d911e81acc1a1418ab12191bf41aba179d12021b121b50173712931ae31a8d171a120a1aa91adc162d11a919291a181731112119171a4e179c10e418b2197b17671068180a1907173e103318c2183517f90ffb177d18cc16100f33173e186e16c40e671600180f162e0ee515f01699157b0d18155c162115970c7d1449158014a40c5e14291504146d0cec13c9144613140a9912a814a8140b0b3512fe13f5140b0b3512fe13f514ee8cd28305859683ee8cd283058596837d98f291ea9468207f9fed9b159c132a6fa1179ece9e282b80a3b09fa0a04b2b36a333a044a1092c97a260a0e3a00b2c6e9b30a056a3352c0725a0a1b2a4182c1f2d4ba33ea5232c5c30ffa233a5f02b403169a481a5b82ba931a3a47da6872bd8319ca4dea6f02ad631eca364a6302a8d308fa392a50429892be1a3c3a568280d9823a528a848289ca400a689a8ca27eaa33aa5e7a77c2652a3e4a43fa87825dea108a526a8a9243aa1cca419a83523f0a0b5a419a85221a3a0dba44ea80a20869fa9a464a8a31dc59e5da425a8751d519e05a40ba7221c659d98a228a66d1bad9cb2a14ea5f81a219c5ea037a4831a6e9a349ea8a2e4188298079c2aa18a181296aa99ed9f49192b944e94159ddc18d390880e4b984b18d28868164590a0188508dd181a107118db0c56197b14291811109919951760183610f019e3185f186f10e1194b196018ac10d119da198d18c81078198319b21898102d198f1969183d10de183a19811815105a18e9183b182f0f2a18a6180218cc0e6117511804186e0e9d160e18fe16000e221611178b16820da31591161516990c1f15fb158a15750c80149a159a15cd0b0914f714f714890b1d14a014a0140f0b3f139f144814a708411277147714a70a70118212bf13a70a70118212bf136e8d7f85eb89eb896e8d7f85eb89eb89119aed94ce96412007a0c69c319d032a9ca1379eab9f1c2ba9a2fe9f82a0912b7aa211a054a1062cd6a5cba119a1d12bb0a4eaa12ea4372cbda31aa1c3a21a2ce02777a452a51e2cd92e64a416a6652b2031fba3d5a4202bf331a2a3f7a4f02a4f3252a44aa5d92a433205a4b7a50d2a7e3056a4d4a524298b280fa553a7392820a3ffa54fa881277ca400a68ba8e726eca32ba52ba8d425baa246a53ea8f624d9a1e5a45ca84e244fa1bba44ba8be22dda08da409a8a92181a052a4afa7322009a00aa479a7991e989fa4a3e5a6c81cfb9e55a386a6701a2c9d7ca299a610196f9ca0a1a5a595181d9c84a0c0a43918839abf9e5ea3d318fd98bf9cb6a15819ea967c9a68a0f818ee940f94a49d9818bd916b0ea29b6b18a48d5e14f698f6180583be1786892d19e802ed1879152b19cb0a161960176419890c8519871899194e0d83192d19ac19f90d2319db185219980e1f19041904193c0ed218b1181a19a50d44187118d418610dfd1795172718fe0cf416b017b017b90c7f1684162317870c9e15231623162c0b24152015aa15090b7114b814b61532099d13d1134a15eb08ad12941393159607c71109132c154605aa11bc11c81419056f111f1281141808af1192138114da074c1009133014da074c1009133014948c0c813a814a88948c0c813a814a88cb99f2931295522053a1539e9a9d952aaca3a29fd19f762bb0a3cf9f60a0572b17a3a9a061a1b22bb2a3aba129a33b2ce1a411a310a4182c72a496a244a4fc2bcd0ef1a140a4d62b4a2c00a4a8a5ba2b7a3030a3a0a4502bec3129a3aea4c32a7032e8a3e2a4882a1f3288a349a5292a1f3001a386a5e128e72642a4e1a63428d8a480a5f2a7bb2790a592a50ea86727a1a4b8a479a72d26c3a3cfa4fea74c25dea2bfa4e4a79d248ca296a4cca7e62392a168a4e8a79a22b0a02fa4daa75e21d09f8fa3ffa6aa20209fbfa2a5a6a41f969e3fa23ea6af1ec79d81a169a52f1dff9ceda00ea5651c069c27a09da4611b6d9aba9ef9a3271a0d999f9ce3a183196597eb9987a01b19f195d697059fe219ac949688719c8019f9915d132298e318168c6d16389092188e8868185a090419d30292185412c018e4079d183e155f18de098a18ac1562183a0923180116d917af0ab8177b161a18450a3b170816a417020adc16b5153b179b09d5154615af1614097515fc145016c7081f151514981693086614bd13a8158a0889134813e215d2036412ec11a815a40361117d10bc1548035810061023150103cd0e7c0f3315bd028b0f8a0d8d14c602080d210d3714d9004e0bca0acf137b02590ca90cd4147b02590ca90cd414fd92c68d120e1f1efd92c68d120e1f1e799a909692959f2099a1729e509f392a95a25fa017a1602bcea393a03ea14a2b80a405a14da28c2bb6a4f6a045a2182c52a5bba08ca32c2cfea34ba221a4d72b5ca1dba217a5032c76247ea436a7112c792d94a44ba6c32b14311ea4eea4c32ae93187a428a5f12aa23132a4fda4342ac42eeaa371a5f228bf2275a4c4a618280ba393a514a8b72767a479a519a84527dca4b1a40ea88d2668a301a5a7a769255fa29ba4a3a7dc2486a145a45ba71b2435a119a415a7ce221ba179a318a7ee21e3a015a3c4a61921f19f4fa22ea63b20de9e80a14da5491f259ecba0b6a4e21ea49d23a06ca4821d749d919f0ba41d1c0c9cf49d5ea3f71a7e993c9c2ba2d31a0b98579995a01c1a60964d96739e3e1a3c95618efb9bb4197f93000e66991e1a529255144896ef193391f815e08f3c1a478d8117f508e3193a88601812141b1a85027b18f015ab19bb0622186e16b119f0089d17ee153e19990806177a15d9184505f6151815e6181b05151504149018cc04c0148a1349188301e413b511ed176f0184124e115f174001f211a30fd1161d81a810c10e8c15fc800e10d20dc914ec80400eb60bd214f580010d960b5d14f780280da5087414eb82000cc30bda14788214026788b3131e87ee8188022c161e87ee8188022c16e4945e8cd60c1c1ee4945e8cd60c1c1e519c8698b398e920fca1c69f3ba01e2a11a3d5a0a1a1732b76a332a134a26f2bcca3f5a047a2a22bcda380a1daa2922b9ca381a1eaa2a32bc2a66ba197a2e62b05a49ea326a5f52b0aa3a5a3c7a4e62b8226e4a47da5602b802e90a419a6e72acf300ca4a0a4712a7d3016a4bea4162a6b2c93a435a6bc284f9fbba532a84d2860a3dea53aa8022868a407a56ea7362752a4e3a419a8542688a308a53ba8462595a2bba428a8982414a270a4e2a7c9233ba140a4a3a77122a6a0d3a329a77a214aa068a3efa6182126a0a1a2f9a54d20e39f03a254a55a20ff9e52a1f2a42b1f6f9d56a070a47b1e859c419fcfa3c01d129c4b9e11a3111d779b989d97a23b1c419a3d9c53a14e1cd397dd97ab9e161c789489080e9aac1b4a944e13c596251b7e926d15fd92a41a2991cc1617090b1a808e43172d0f481ad98ce116ac11f519468a501755119a19ec89e716011142195289aa159c104c19158935153b10dd18b48a4114ba0c8718338abb12cf052d18fc8958117605d9174d8b19101b855617d68a030ecd84e716198c160cd38a8b169c8c7e084d8a0a16fd8a2108c0898315bf8ac8075c8923153a8a78021b897814da896802268c5b1494894d82e98b2714cc8983893e8d1f1319880b82ba82a11519880b82ba82a115df921b8c4b8c881ddf921b8c4b8c881d0e9ced971498182182a1909e49a0022aeba151a022a13c2b88a292a0c6a1532b4da3a7a0e6a17b2b91a3cfa000a29b2bf4a3e3a1f3a2ad2bb5a44da298a3a62b60a588a3cda4f12b5fa40aa3b5a48b2b78a019a364a5012b5e2741a4efa51a2a1f2dc6a3c3a4de29572e66a161a439297f2976a4f2a53428aea195a57fa89c2832a4a1a535a835282ba334a437a6082732a3d2a489a75426d0a3cba4a6a7862536a372a476a7b224afa258a46ea7072444a126a46fa7d2227ea0bba34ea7ac212ea02da3d2a63921609f67a252a66f20c99ebca1b6a5d31f299ee6a00da5bb1e959d4fa092a4e81d0f9d809f02a4b51da89c299ed4a2691d1c9bae9ceca0cf1c1499aa99739f781c3c986c96989e781c6996d18ec69c0d1b539487131e99b11a659298174b93ee1a67908d180d10171b4190cf187f14641ba68e2a183d14f71a0b8ed017ec13821a5e8c8f163e118e1aff8c9214c70d051a728cf012ee066b19198c1e114686e618d68b6d0fcc858718ac8cf90e188c4418788ca00c638e5817258c26093e90f8168b8c300335911416138cf20234925b157c8bc802f8919c14d789a402dd909814ba898a026c902d1489897302f18d081472894d82818be113fd852002238b1b14d489208bb38c8914d489208bb38c89145992ee031a04dc1e5992ee031a04dc1eb29938973696d620fca0f19dd19ef729eba145a0f8a0e82a5aa256a099a1ff2a3ea381a0cda1242b0ba4afa082a2762b1aa411a1e2a2452b4ca492a1b3a3df2ab1a45ea362a42b2b32a7baa400a6292bafa1eaa3dda5a42a23952ea442a6342a582686a4c0a494295629eba2eea4ae282e1e34a58fa7272872a416a6eba849285da45ea554a8d72787a3a4a409a7ab26eaa2ada444a7022674a280a402a7272564a267a401a7a424e0a144a424a71e247fa100a4cea60e230ca171a393a62e228ea0bca21ba6682122a0f9a1b1a5b320049ffea01ea54d20fa9d42a06ea4431f279d069f08a4f11d4b9ce99d06a3091d9a9b959c13a2b61ca59a589b0aa1751ce7992a995ba03f1caf986d96919e071cf6967e08039a9d1b54950316be935b1ba393d816f389111b86929817b409c51a42912d176c09701a0f909a171009041a3d8f2c16a508171ab28eb21545089b19238e3915d0079d19c88e131320071f19488e56117a86a818b68e700d7a8f4d18f88e050454920c187b8e98893a938f17b08e0a8e98946e16288e1f8fcd947f16348e08906294ee15d78d878fdf93c915768d0f8f7492cf154a8db28e15927915668d5c8e98923c15548d258f369292141190dd8f41912016478f08906d91fa13478f08906d91fa130000cd141017270a0000cd141017270a2aa0f09cc89bae28c9a1469f0da19d2911a1af9fc9a0452a97a156a095a1902a43a287a0c9a1ea2aeba20fa165a21e2bb3a37ba1caa2102bb3a32da2b0a3de2af1a2b6a3b2a4b72adda416a4c3a5b92ae6a59da403a6492ac3a49fa49ea6d42946a52ca5c5a65e29119f7ba46aa69b28359eafa402a771281ba129a5dea7712837a44ba5ada7ad2707a3b5a44ea74626afa2d8a43aa7d525b4a2b5a442a7352516a278a421a7c824d0a134a4fca6302475a1cea38ea66c232da147a364a6a022b1a0c7a2e8a5d5213ba00da28ba50921569f4ea1efa44f204d9e33a057a4fd1fe69daf9fd8a32f1f4a9d079f7ba30a1eff9cd29d6ba24a1d899b8c9c87a1291d499a729b7ea0d61c92988195d09d181c4f96b608389ae01b90933a1692958f1baf8f2a19160a3a1baa8dea193c13df1aea8e8f19ce12771ab28e33197114081acd8f6e18d911241a3b90c7154a08a219dc903d12cc8d8e194e90510e27920e19ee90b3848594ba180d917d8db595c1185591a3917f97761885911a93a397a3178b9162939497f816439145947e976216d490e0930197f8156c904c935296da152190c7924b95b715e98f029303956915af8fbc9246954615bc8f18930d950d159f8ed39297949714748c3f905494f713748c3f905494f7130000bf18181914900000bf1818191490c99ecd9d7a9d5c283da215a021a1cb2913a3289f55a0132a8ca2719f9da05d2a59a2989fcda0862a4ea22ba05ca1b32ad3a235a1b8a2c52ac1a34aa207a4b12a31a488a322a5b82affa463a41fa5f929faa480a365a5da29a0a630a433a5402962a492a49ea6572908a676a560a7822830a543a55ca71f2888a2f5a4c0a710288ba579a55ea8ef27f8a4e0a425a7ff2500a4d1a422a77f25aea3bfa42aa7ea24cda2b0a43ea78a2419a285a43ca7ef2366a138a4caa6b72228a11ba4a6a64822b5a095a33aa6df2161a070a26ba53421699fe3a090a4c4208a9ef89fa0a36a20639db49eb8a2a41f4a9c609c20a37a1e769b449c29a2c91da99a1a9caea1141d049a4c9ba5a0c21c3b992499989e781cc69819944f9ccd1b9795ab115d98be1aec8d461a1c8a7e1ad588071b98163a1a5d8d2c1b8f18aa1aab8eda1a5718581ad58cf219f316001a248a9718d4111e1ae08caa14368e6f193490ca0b6292c918a59146911a96ad181f937e947d982218fc927595bc981518e292719507999d178e9288951499ad160a92859511994d165b911095af98d415e390a6943398ac158790a694359726152d906c94c49638159d8f49947b96ff14c18f2d94c995bc14db8e4c94879669140d8f7794a6967b120d8f7794a6967b1200003519c619ab8a00003519c619ab8ac39e9e9e3e9f9427c2a1b7a0eaa2eb2821a1ce9ec7a0662976a0ae9c1a9ea429fba0e49c459ee72928a1339ef99f232ac6a101a1d6a2452aeca231a39ea4352a7fa337a499a5282ab0a333a5bea6fc29e8a23ba527a7cb2956a489a562a8a62994a6caa46ba6fd28a9a589a4a7a6d527eda42ca59ea79e2782a5cea581a8ad273aa391a50da8fc2606a342a556a79a258ea243a5caa73925a0a226a5c6a7b2244ba204a5a0a71224cfa1d5a47ea76a235fa198a427a75f22e5a015a4c2a6b6213ba03ba373a62221ca9f61a297a58d20ff9e2aa11fa53c20ae9d3c9f77a3df1fa19c949cfca12f1f199c789b93a17b1e7f9b2f9b5da1bc1d049b739b14a1f51c439a169b45a1431c87994f9a36a0581b409820945b9c391a87950b1408940d1abf907d1a7e15e21959830e1df81b731a3383d51c2b1c291afe02411c6c1a6c1aa982751a05187f1a438dde168d088b1a4791410f9294581a93929c8bbb969c191d949693ab99d41817954f97909b7618c2942197f39a19184b947397b99a8b171a943c97609ad1168293ef96b7991e16c892a1964f996e150a9217968198d1149191b3953e98ef14b5914695c697be147891d99433979d148391da94cb96b514719027937495211423912f93c494271423912f93c49427140000341a921b23900000341a921b23906aa09ba060a1e226eea223a1eea28d288aa0b89d5c9f8328a69f9d933098fa286ea11e94429a892911a400a0a3a1ce292ca408a4f3a4d729e2a399a476a5b5294ca3c7a429a6d22911a3b5a454a6b329bfa3c4a477a66c294da3a5a47fa66b29ada360a41fa6a928dfa201a414a6f72718a449a4c0a6a127d2a2d0a4c3a736277ca2baa55ea82326e3a21ea5c9a7f82480a2cfa49aa7552437a2d6a4a7a70124e5a1e1a489a70d2399a1a7a469a71e224ea15aa42ca78021f6a00ca4eca69e2094a067a385a615202ea053a2d8a5181faa9ef0a0f3a4211f1b9d7a9e46a3241f1d9c2a9b39a1c41f8b9b259a43a07e1f139cfa9be2a0961e519c3a9d71a1561dd39b219d7fa1391aa59aba9b94a01b1a5d991995fa9c61186095de188b15f119978c111dfa1cf819f4111b1ff41ec11ada10c61f351f671bdd8f4e1e761e041b5190231c6e1b241ab98e4f1779139b1958907f0e14954f19089332912399ba1855950597cd9ab8176c956498b49b30177595fd98609c50172c95a798119ccc16e3946d986c9b711658944f98e19af81509940998149abc1519936997519935159492e896dc985c150292859695980d157891e8955d98cf147691f295d8978214e590ae9512987c14b390ff94a996bf13b390ff94a996bf130000fc184f1a628b0000fc184f1a628b719f71a23da4292645a0afa28da43c2730a2d59c869d0128369e6821e7227627d39cfd1de51c2c287ba19da0cba2af2813a272a4f3a5dd281ba376a589a70a2933a371a587a71829a2a331a5f9a62a292ba433a5f3a6f72899a362a4daa5c32813a382a33da54e2830a3d8a3c4a54527f1a3cba4f9a6a62600a44da59ba70a26e4a3ffa553a8af25a6a304a648a80d2512a36ca5d7a77d24c2a20fa562a7f42350a2e9a430a73f23b4a1cba4fba68f2212a19ba4b7a6da219ea049a46da6412158a01fa45ba663208aa0a2a311a67b1fbfa069a2e1a50f1e649dd39ec1a4cb1d99998b0a619c4c1f6d9bb5194a151920529cfe9ca6a19c1f539c9c9f41a3ec1d8b9c389fdca2531ce89b419e23a2b01b009b2a98529db31a30999b1815118119d003d21f3e20a919a8156d210322d018af1641218521a0190a16c120c81ffc19070d901c3d1bdd19aa969d061895f1192698dc955699cd195b972298be9a3319919619992c9c9918f7956e99609c2518d79587993e9cc51792953d992b9c62176d953299f09b07173195fe98a59b4516c394c3984a9b731669947f98ae9a1c16e7931f98059a8315f9928a979499ba147b92b696af994a146a93d3963a991314e291e3951b9a830b81918b954998051481918b954998051477090018c11a2f0477090018c11a2f04b4a278a4cba5312640a176a4a1a5862676a04fa078a18c26ce1a2c29e52a2227609ac122a123a82537a1c0a437a60b2626a24fa51ba7f726fca2b6a5a4a7c727cca21aa6eba71928d5a2fca516a83c285ba3cda50ba85f28a1a43da43ca65828d4a2f0a13ba42f28bba305a463a5542738a494a570a7572687a4d9a5dba77f251ba48ea5eba7092515a383a507a8932470a269a509a8122419a237a5e1a79423cea106a592a7492383a1daa453a7982239a1b5a4f3a6b621dca07fa4d8a6322179a049a471a6a22068a042a446a6f51f819faea315a77d1dea9de8a1a7a45d1cee94d61f8e1e3e1f6a924d20a1209721f09c9ea064a3f21d839eaaa1a7a4c71c869dc6a0cfa3591c579c899f15a2761b6c9b749ceba02c19df9a8c087698de109712c220c320dd11cd1a4a2404254b17ba1a7c2471252d1bc615f6200422481c31938c15c014ce1bfc98da975c9c791a3898f79a0a9fe319e897219b2c9e8218ef97d59ade9d24174b97c59a0e9ef716a596839aa49d7d16e595439a1a9d51157295ea99c69cf814e794c899799c2a149f941999db9b35142c949098219ba213b3932f98a49a50138b9315987c9a64121893ac971c9aee127593d197c299d8118e920297e599fb1177913596cb988a1477913596cb988a140000d41a431c3d140000d41a431c3d147ba087a362a48a2489a128a43ea516257ba205a576a70526761ec828392be720caa430a8e1a857291da23da60ea8e826aaa15da595a7412643a2c9a5a9a71d2685a2dca5eca7d12561a3eea511a8a12503a46aa63ba81c26fea2a5a534a80d27ae9ddb1e08207827b7a1ada189a4112522a2cba55ea89724e3a1e6a51fa8632404a29aa5f4a71e2416a276a5d8a70124f4a157a598a78a23e5a12aa55fa71b23aba1f7a419a7a42256a1cfa4e1a60a220da1a0a4b7a68121cda08da48ba60f218ea063a483a6a82055a028a443a65c2042a006a4c7a5781f75a014a4bca5f71e8f9ecea1bfa4ee1a9b97cb9cb8a14894ec9c81a1c0a44e14499d83a1d9a4d018389ce2a02fa4b518839c8aa01aa44716fe9c759f45a20914719a649a579edb122612be1f6f20ac0b4b1ead278728da8d2f1e73274228e41bc2101f20f020d61c7e95a6935b99161c4d99009c699e4d1a0e9a339c979e61196b99089c569e711868989d9b0c9e08180198479ba49d57172a97199b6b9de216e696b79a419dad169196739af59c73166b962b9ac19cba15f195a9995f9c66157f951e99d99bf714e394e3982a9b061578948398919a611406942798239abc13ef931f98da990314f1926497b199bb127d91b496149937147d91b496149937140000e1185f1a110d0000e1185f1a110d1aa005a32fa47123bca080a4d5a59324499f77a1e1a2c221350f39119513691c1da01ca47ba56d24b6a132a5fea6bb25dda127a52da7cc2549a23ba54ea7cf256aa257a53ba7a525b4a27fa570a79e25caa29ca596a78b2530a24ca5eea6c42495a004a48fa54b2204a249a500a7dc22a1a2a9a5cda721237aa2aba5f0a729235ba270a5d0a7ef2251a24ca5aca7b1222ea21fa565a75722e7a1e7a43fa7d121a0a1c3a40ba7582154a19ea4d5a6cf2017a173a4a7a65f20d9a045a463a61420bba019a427a69d1faea0d8a3eca5701fafa09da3d0a5f61e58a029a368a5401e949d74a155a4e41ccf99759e09a2951a129bda9effa1f4181e9c1ea023a35018309c55a086a30e183b9c9fa0a3a35d173b9c7ea091a332183c9b51a0ffa23f1a30980b9e37a03017b721272aa02b3a9d3121cf296d2aea207c98529c0e9fac1b499ace9d9da06819a2996e9d18a0b3189c98239d989f0f18aa98cb9c619f2b174998839cf89ec4160098469ca99e981691970d9c349ec4157897989bdd9d9015a096d49a5e9d3215fb953a9ad39cc61447959e995a9c671401954b990e9c31149794ec985d9b55149094aa98fc9abd1341946a98ab9a93134e945798659ae613b89398974a9ab1128292fd964999a8128292fd964999a8120000c716dc196c850000c716dc196c85a49f5aa246a46121d29e3fa37fa4cc231e9c7fa0bfa1a621ff99629e9ba05d205ca18ba301a52724c3a0c8a445a6272558a1f2a490a66b25b3a10fa5caa66d25d9a12aa5dca67a254aa237a5fba65f2502a244a56aa78625d0a1cba4a4a6d32411a066a3f6a40d2349a179a486a6642228a227a56da742221ba2f5a4f5a6e92147a2eda4e1a6aa2146a2f3a4caa6692105a2c7a4ada60a21afa1b2a4aba6dc2068a190a4b3a6862035a16ba48ca64e20f7a046a461a615209ea014a445a6551f34a0caa300a6c91ebf9f59a3cea53f1e019ffea274a5a41d7b9e54a2fda4511d0d9eb6a164a4d11c999d32a1e7a3291c179dbca06ca3061b5c9c6aa04fa3f019fb9b45a03ca3ee18c49b1aa0dea2c018c79bed9f6ba2fa189b9bc49f4fa27f18e69b759faba16117e400c281f989910e8d84ad8f9a933e81c298ad9ce19e7c10469bb49d40a09616e2993b9dd39f7716bf98bc9ca29f63157a98899c509fc01562983f9cbe9e1a153098059c269ed314a297699ba19d0615e496f59a429dca1435968b9ae29c8914ae95269a939ceb135895b499389c7613fa944299ef9b2a13b594fc98849b18139f94f2989c9b2f137c94b9983a9b5012ba949998c59a4b1145945598519aae127693849700997e127693849700997e1200004515ac18488800004515ac18488894a0e2a143a393217d9db8a121a32922fb9b63a00aa235212a9d76a026a20521769fcca298a4492369a028a4a6a555249ba076a403a67424f8a0aaa443a6942457a1e0a484a6c224c0a107a5caa6cc249ca10ea5cca6a5248fa070a41da61f24949fcea354a5212322a0dda34ea5be2214a14da4d0a59c22fca189a464a6002254a19ea4b0a66721e0a0a8a4f5a6e020b9a083a4a9a69d20a5a065a445a62e20a0a044a417a61e2085a01da4f8a5bd1f5ca00da4dda5991f32a0eba3c2a5251fec9fbea3aea5bc1e919f61a382a53a1e499f1ba332a5f61dad9ea7a2c1a4561df39df6a145a4ef1c329d58a1d2a34a1c9d9cdca030a3911b309c83a0eca2de1aa59b43a0b7a2da19759b07a08aa24e195c9bc59f68a234195b9b889f72a22819f89aff9ec6a13119369a029e55a0391883934198a899cd14bf911998ab9b8212fb98949c14a09a035b99b39cef9fba09fb981e9d07a07f13b198e79cdd9f361487986e9c4f9f1b144898129cb99ed0131198b89b4f9e9813ed97529bf39d4b137797059bc49d5912e896b49a619d26124096549a389d1412b795129aec9cd91114959299879c7d1189943599409c77103294cf98199c4a0f2194aa98bb9b25105c935598fb9b3d0f3093e797999a5f123093e797999a5f12000000000000000000004515ac18488894a0e2a143a393217d9db8a121a32922fb9b63a00aa235212a9d76a026a20521769fcca298a4492369a028a4a6a555249ba076a403a67424f8a0aaa443a6942457a1e0a484a6c224c0a107a5caa6cc249ca10ea5cca6a5248fa070a41da61f24949fcea354a5212322a0dda34ea5be2214a14da4d0a59c22fca189a464a6002254a19ea4b0a66721e0a0a8a4f5a6e020b9a083a4a9a69d20a5a065a445a62e20a0a044a417a61e2085a01da4f8a5bd1f5ca00da4dda5991f32a0eba3c2a5251fec9fbea3aea5bc1e919f61a382a53a1e499f1ba332a5f61dad9ea7a2c1a4561df39df6a145a4ef1c329d58a1d2a34a1c9d9cdca030a3911b309c83a0eca2de1aa59b43a0b7a2da19759b07a08aa24e195c9bc59f68a234195b9b889f72a22819f89aff9ec6a13119369a029e55a0391883934198a899cd14bf911998ab9b8212fb98949c14a09a035b99b39cef9fba09fb981e9d07a07f13b198e79cdd9f361487986e9c4f9f1b144898129cb99ed0131198b89b4f9e9813ed97529bf39d4b137797059bc49d5912e896b49a619d26124096549a389d1412b795129aec9cd91114959299879c7d1189943599409c77103294cf98199c4a0f2194aa98bb9b25105c935598fb9b3d0f3093e797999a5f12000000000000000000000000000000007a9018a163a27e1e7719b7182b1e2e28a82033236f240f29c9240224de242b2907273f24d0241a29c9283f241e254029c02a2f2415256729462ca424ac25092a272d312593260d2a722d25224522f828a62d64a169a2fb26ff2c26ac28adaa29862cdaaed0af952c9c2e8821542142298f2d962238247227b52b1d2254237926ad28fc2129230426802501226d2212258021642221246223e81db7213224cf17b509959df19deb17a9a4d4acddad8594b6a73eaf99b016242ea849b06bb1e62431a57ead16afdaa229942b9f6aa01c1e5417aa1d741d00226f176d1ee11f1b217617701da21fdb1cb812d119411c641d091a641fb720d419c9182f207d219019701944209e21ef170d19f51f4a2122184e19b51f28216718e918471fe92031189f18d01ea320601840184d1e5a201b180a18001e01203c187e17881d7c1f0d182017471d151fab17d516211db61e44176916cd1c5c1e7c17fb158b1cfc1d3517d715511cae1dd7168f15091c641d7e163115721b081d3616eb14211bc41c09166714c01a981cd0154e14931a761ca6150114521a401c86157513de19861b0415ef124019b01ad1145d12e718691abe143e12ad183f1ac0140e12b9182e1a5a1414126918b319991311111118dd199d1356129817f818451200000000000000007a9018a163a27e1e7a9018a163a27e1e7719b7182b1e2e28a82033236f240f29c9240224de242b2907273f24d0241a29c9283f241e254029c02a2f2415256729462ca424ac25092a272d312593260d2a722d25224522f828a62d64a169a2fb26ff2c26ac28adaa29862cdaaed0af952c9c2e8821542142298f2d962238247227b52b1d2254237926ad28fc2129230426802501226d2212258021642221246223e81db7213224cf17b509959df19deb17a9a4d4acddad8594b6a73eaf99b016242ea849b06bb1e62431a57ead16afdaa229942b9f6aa01c1e5417aa1d741d00226f176d1ee11f1b217617701da21fdb1cb812d119411c641d091a641fb720d419c9182f207d219019701944209e21ef170d19f51f4a2122184e19b51f28216718e918471fe92031189f18d01ea320601840184d1e5a201b180a18001e01203c187e17881d7c1f0d182017471d151fab17d516211db61e44176916cd1c5c1e7c17fb158b1cfc1d3517d715511cae1dd7168f15091c641d7e163115721b081d3616eb14211bc41c09166714c01a981cd0154e14931a761ca6150114521a401c86157513de19861b0415ef124019b01ad1145d12e718691abe143e12ad183f1ac0140e12b9182e1a5a1414126918b319991311111118dd199d1356129817f818451256129817f81845120000cf13681488910000cf1368148891e41a0920e01d1a28de1a652056211b29461f9220ee21fc286b22a8208521e62833261d21c3210429a129882112224729252c8a209620e3284c2d331a6f19b028e22d759f39a139287d2ed4a66da8ca28642e50aa1aac2e2a632eb4aa74ac642af52ef8a42ca61629462e1215631675289b2c641fac200f28aa28701e9a1db525fc213116e68e1920c693df99519cc095989d85a4fda5539965a0dba84baa5ea0cea215ac21ad9d9f6da411ad63aee822e4a49bad5fafce2556a407ad7cae25247da16eaa00ac651d159e9ba7f3a85e116b9c4da52fa70e231f9ae1a3f8a44922589831a247a42c1dd8949d9ff8a00e9b4b15581a191ce78a4517931d6a1edd89a017001ed01f2b90cb18cb1e4c20a216a018731e10207f1734186a1e1d20f41691173c1e1820a117f716cb1daa1f23178a16791d2d1f791765162c1de41eb7177a16e01c4b1e331891169d1cc91d2b18a216601c6f1d34181516171c221df0179b15931bf21ca61712153b1bc01cd8165a14a81a5e1c75163514371a241c1f16a913f319a21b601524138a19241b2c15d4120619d51af4140f128f18371aa4147e113e18c91974142c11fa1769194c140a11c61735199c1339115c17e21882129710b9168b184112c70eac15b2172f14c70eac15b2172f140000600496818e090000600496818e098a8ed519f1195528df93471c221d7a296c0a521c471da2290c198d1c941c9129f020251cfc1c9b29bf26e71a171df4292e2ab48e1590302a972c059d609f742af62d9ea129a4642adb2e4da590a7c52a2c2fd6a760a9432bde2e81a71da98c2a252f64a528a7e829942e14a0c4a1ee28892c369845998227cd277997a09acd25d91c529d8aa06c24169ffda105a47421c2a022a62ea85e1f07a13da8ada9c221e2a169a92cab1f24a2a27daa56acbf23bea2e5aa8bac6a20c2a200ab9eacfc17daa151aa29acfb1070a0d6a891aaa6198c9e7ea7efa8fe1afe9cf6a510a81f0f249b98a45ba6d2979e969da0c3a26798ed836496c19ba7983a13e618981738947d143c1b6f1baa892416811cd91c0009ce16871d541ea1113617e31dfc1ebe144217f11d711f8f163917e71d2b1f1d167a16681dcb1e77165f16181d611ead16e715d21c141ee5167815991cc61d08172c155d1c761d4917f014151c201d6e17ca14b71bdc1c0a177514051b8b1c951649149c1a391c4d160b14191aeb1be9158813dd197e1b24153c139119021bf61496122919c41aca141612e1184f1a9c14d6115c18c31958149311ac17eb18f0131411f8168f18a213c9105216271835134a1145162518d013b910d4163418c912b910d4163418c9120000f900268126010000f90026812601359a2c181a195429279a93186e19ac29c299fc18021a982a629bee163718452a718cd0942d905f2bfb212b982d96232b9428f199a09c012b162c039dbca0752b992dc9a0fba3082cea2e3ca40ea69c2b652f88a5b4a7c92b3d2f40a50da7f72a232ff7a4f1a5572a542e72a3b8a48e29262ccca13ea472284325dfa1a1a40227589c99a34ea5d22503a2cfa456a686255da18ba58ca722243ea117a7eda825249ea14ea80caa8424bea1d3a8c2aa4423f2a117a91eab672052a1f0a8f8aa2c1d98a0aea886aa98164fa028a8f1a92e90109fc3a6e0a8949a389d4ba593a7a999729bb6a3c7a5fa982698efa0c8a37298e590ea9bf59f96922b0d3709a8969c0bf811ff186e172114e613e21a5c1b4f168115931c011d7615f115221df31d161612162f1d251ec015e3155b1d471e6b159e15241d561e11158c15f51c251e9b153515961cba1d06163e15791c821d5916ff14351c1a1d9316e714d81bf61cd5167b147f1bb31c18174814e71a4a1cb1161314841a111c571678131b1ab31b0116c5129119161bb71573124419af1aed14b611c9183a1a0715da103e18771993146610c91700198c140910c216471832144f0f7616dd176113050fd41533170b13af0e0115c7165e141a1010157e16e9141a1010157e16e9148a825281c884f8878a825281c884f887569c748c1d948729b29c468dcb94252a349e02974f982a2b2aa078976498dc2a059f0198ca989a2b3e9d1b9a5d99312c1522f69c0a9e272c992903a023a2332c1a2d24a101a33a2c842ec2a29da42c2c2b2f77a4e6a5e42b502f40a45ea5212b112fe7a3fea46e2a0a2e24a39ca4e029d52a04a324a5cb28bc21e1a34ba695279da1d9a4a6a62626c5a3d9a425a7882565a268a519a84e24c2a15ba67aa870235da161a756a960223ba107a81daa1f201aa138a854aaa01bb7a012a819aa6e1632a0aaa7c5a926902fa0f5a62fa9b795ac9f12a6b8a8379a979d1da50ea8659b179b41a3e1a5f59bc198b7a0b8a3ee9ad994ff9cbaa02899d690cf970f9e6097f483d688f89a9391870fde16270a270a8812951abf19bb146d135d1b321ba2153514d11b1b1c3a16a3142a1c961c72169014101cb51cf815a914f51bd51c71165514c51bb71c05163014931b741caf15db13111b321c5b15a613b61a1c1cb41518134b1ac11b6115bf12f119461ba4157512a019ca1a441517121619471a6115c811f518231a0d156c1185189219c714e1101e184019ed147210bf17f618a814c60f0a177f186714e70e8d1628184014ec0e341605181d14a90f1f16c917f513e70d2215c2164613ae0d6c14b6153312ae0d6c14b615331200005c8179847d8100005c8179847d81759d12935a94082a839fc196c694e82a89a0f098cf994f2b77a11c9ba59a102c3aa23d9bef9a1e2c10a37e9eda9e722c3e9cee9e16a2d22c2324efa0e9a3a62cc52aeea2cca4af2c9d2dd2a2afa4312cd32eb2a365a5212cf32e27a472a5162b7b2edea36fa5722a682d53a393a58029612931a30ea66028e38d55a42fa772273fa4eda403a8ef2651a423a5d7a7fa25d7a3b5a518a8532582a253a6aca8de243da291a6d1a8f5238ba1a1a601a92e22f6a0c5a630a92720afa0b1a619a9471d74a046a6e1a8481acc9fd5a5b6a832158c9e43a548a84d0e7d9d99a4eaa7f68d369cbca35da61394039a6ba1afa45f930f98989e39a26d8cfc94e89a16a0ec8b5b90f091519c450b7603fd1434940c11230c4b186d106d105310ac192b1784127511f51a5f1a76158e12081c121c4c173613d01b461cc5176713de1b541c05173a13bd1b461c7317bd13581b521c2a1747134e1b471cc316ea12e41a0f1c6b16c212341a961bb4161712dc19091b3816d8118919c01a4d16931131194b1ae0153d11aa18e1197d15ea106b18401921155710fc17ed18d014cc0f6a1790187614770ff01641182714e40e3e16a5174a14520eb6155e172214f60d94155917dd13ef0c7b149915ce139c09af10831161149c09af10831161140000d101cd8401080000d101cd840108a09cb191de97a72768a0ba99679c0e2b87a2599f38a0062c6ca18f9f12a0392c5ea3fb9d379e182cc7a205a00ea07f2c93a1bca02ca1982cba0d39a1b2a3862c4a273ba161a3772c422c1fa3c7a4292cdd2d2ca4b0a41f2c602ecfa357a58d2bab2d93a475a58f2a492cbfa36ea5a329382847a4dca56d281d15a4a411a708280aa399a58ca74d27ada306a517a79726aba216a557a7d9256ca2d1a574a80925eea125a6bca8532399a130a615a9242110a109a614a9102081a0cba5faa8161e63a066a593a8ef1b58a0caa419a88819739f46a430a74717899d4fa324a60a144d9ceea169a5540d8a9ae1a09fa4040d4a99109f32a3580caf97b69ce3a0a10b69959698069e5b118e90c208a9995a145a093118760aa815240f95195f180d160111f11a541aa1160912531bb91b71173612871b621b041683125d1b001cb6168b12311b921b5916a612b31a561bc815e811271aad1a42156711c019911aa21552117019281afc15a810eb18bc1991156910a5185f19d51541103a180d190f1603100518c018b3150f0f421734185a15be0ed116f8171215280eef155817ad14910d1d1543163e14900c70147f1534130d0c441401154e12930cd2139314c110df0a0713ef14f112890b15124e145513890b15124e14551300007784d384050800007784d38405088f9cb298f89a7a28c59f949c1b9db82b39a28d9e849ec32bdaa257a03ea00c2c55a3f6a094a1562c0ba3faa040a2ca2c4aa2f7a015a2982c19a393a398a39b2ca41918a366a4aa2c482806a205a55f2c0e2cf1a244a3082c052dbca33ca4842bd52cf2a3faa4e42ad52a20a460a5b429052496a4fca604292ca175a557a8ba2881a478a558a858284da4afa43ea7ff26e3a23aa5aaa7732604a360a5fea75f25bca118a519a8802431a1fda414a8ed22aca0eea411a8fe207da0e9a446a85c1f1ba0afa458a8b81dcc9f8da411a8691b809ebea3d1a68b1aa49db1a2c4a5af19f49c95a1e9a43b18039c18a0a3a309182c9ac99d19a2961786986c9cb2a01b171f960799e59ea81634944894229c5a14d190650e3b986315bf8842165a9014157a08e2182b10dd14490e6619c415c4150910091a641844153c10011a0319cd157510ee1963191616b010d919d7195c17da107919e819ed16aa102d19891942175a10e9189e19e31625106618f6188016460f3518b218ce16f10ef4175f185416990e1e171818ec15280e2d161a178615050da51594161e15920c1f150216ac14530c7f14a21562148b0b3e1451152214330b13149514b313d00a22138f146b125708af11e11289133e0a2811f61263143e0a2811f61263140000ed88e289e2090000ed88e289e2096f9dcf99d49c8b264fa0a99de29e3c2bb5a1a29f51a01e2cc8a279a0f8a04a2ca6a280a0a9a1562c94a412a2cca2802c28a5e2a179a4b62c15a648a214a2be2c47a2c6a3fca4a52cd81a8ca4b6a5372c4c275ba27fa2fa2bb72a09a323a47e2ba02a0ea4c6a47a2a7c28bca398a58829371e57a50da8e6281ba4fea401a83e280fa412a55ca8f52706a41fa57aa7c4268ba474a52ca8c32589a3b4a531a8f0241fa230a525a84f2472a1ffa411a8b922d4a0c3a407a83a214aa08fa4b5a7342000a045a44fa7d91dea9f28a410a7251cda9f4ca348a6f518019e62a2c7a5e6168d9c6ca118a57916139c58a04ca414187b9aa69ea6a24d17e298f79c3aa1601855977599989f2418a394e791fb9be115c8915d11129976154a8f61154295c3169888e0172d10a7176508f7188015f217b10a7a1935183518710c811903197c184b0d71191b199f18ee0d0e193b195218770e1619eb181018250ec2189c189d179a0d3c185c18f7176e0df3171818c3160f0dfb1699174716dd0c86161617da15b10c1416171683157f0b3915a9159514e3098414be14be144c09cf136b146b149b07c11295133d145407c0113412db13f6061b12bb114213dd044a115811c51224060f120d1466136c089210df1238126c089210df12381200004f832185210500004f83218521058a9de298d39a062744a11a9f11a03a2b72a307a095a0cd2b03a4b3a046a1282c3ba312a1d8a12e2c24a485a12ea24b2c9ca5d2a218a4852c88a687a369a4712c1fa531a393a4782c00a2dca254a5922c8614eca21da4262cb92455a47aa5832bc42510a4bda59c2a8e226ba4a9a682293f9fe2a5a3a8fe28aba3aea56ba8892830a50aa5b3a71628cfa376a404a8c9273ea40da5eca7822621a4bfa438a8aa25eaa2c7a4fba7942494a2bca4e6a798239ea1aaa4e2a79622d3a075a471a7382106a00ba4e5a63b204c9f4aa350a6c21ef59ecba204a6ee1d139e13a26da5171c4c9d2fa115a5ad1a389c83a0a6a47e1a6c9abb9e61a30319f4989c9c55a1f1161598b69a15a033187e96e0979d9e1b189894de8e0a9ca717f6917813da96da16088c7b16a4895916ff826918ab125617c5020019a815e816100812195c165c16310af418b717a915930b8118f8160a16c10a32188016a315620a5317e21643150f0ae416c015fc14b109e6154f154f150509e615f414f414d1080c15a314a31499085714a713a713670686133e132e14b4037012f3110e14830366117610361434035a10f20f3214fa00fd0f5f0f4d14ed00a30f270f2c14ee001a0d3a0d1713d580690be20ad911d800cb08630a4f14d800cb08630a4f147e88818c77139e187e88818c77139e18759d8a9a9c9950268ea1509f48a0ae2a5aa2a8a06fa1e12bdba310a136a21d2c86a4e5a1d9a2292c7fa4a5a198a24e2c6ca56fa13ea2562c1fa4c7a224a59f2c1da40ea4eea43b2cfda3a3a4c3a5f92bffa112a442a5c12bab9d2ba49da51f2b679f12a4eaa53c2a659e4ba565a7672913a481a56ba8bf28d6a49da51ea8752872a5bba5d0a74528a4a4f4a4d1a759276ca4efa4e6a78626e3a3e7a493a74b25c2a2afa4b3a79e24d6a17aa49ca7b52371a167a419a7742263a1e9a300a72321d8a087a3c0a6622026a0aea242a6ad1f429fd2a15fa5ea1d269ef7a0b0a40f1da09d3ea049a48c1b529d189f01a41019949b819dd2a2d1183d99ab9b7da12417a097a898729f52164e964195949d8c185795808e539b3d184c94120eb898b81832935a14469687183091fa15f08f4d18418d8417820f111838886b184415641888028f18fa159e18f00638187f1640182b09c417ff15d717cd0827178e150f1868051416301595172805b515d514cf17c704d214a6134d177404f4131113c0166b0194125b113f1645010112e7102d152581a110ce0e9f140a811610130e1f1401817f0eaa0d40142c834d0df30b2c140783540dcd083314e782f30ba90815144384f601128817116584ce017e02c4156584ce017e02c415fa84728c3214ca17fa84728c3214ca177d9e619b8f9cf825f2a10ca063a1d82aa1a21fa1fda1ef2b05a33ca11ca2fa2b4ea352a12da2082c9ba389a1daa22a2c4fa4ada17da24b2c03a6bda10ca4672c55a49ea386a5242c8fa481a4cda5ed2b6ca576a488a6a02b4aa41ea502a8452be9a3c0a51da8982abca3e1a592a88629c6a576a58aa8a6286ca47da527a89f288ba31da50aa73728cda32fa5fda7552726a45fa5e0a795266aa32da501a88325c5a2c2a4c8a7a12450a2b5a4b2a7682353a14da481a77d22a0a0f8a3ffa623217ba079a3b1a6b1203ea001a3f3a5142014a00ca258a5871f339f83a1eea4011ebe9db8a03ea4491da19c4c9f7ea3a11c169c489ec2a2f31b259b3c9d19a2781be8993c9baea0da1ad2979a96ce9d731a979592083e990d1ae69479135e95c019a79389154e9061195691ec163409e11808904517410f89184d8eef16ba114b188f8c64178b1395181d8af7160a1346186b895a166b12ca1720893815e011fa17ca8a4d14d90f7517718aec12630cf116198a6911160c7916d789211015050916f68a000ec184a515bb8a140c84845d15a28b8308428af414dc8a2d08c48990146e8ad90765894614ff897e024a8c4b139d8967021e8c0013488a4582838db2120189b38b2390651207881789d28a431407881789d28a431431805b0db210101831805b0db2101018209e2e9a689bdd25faa0159f35a05d2a4ba29ca07fa1882be8a211a13aa2e72b41a375a14da2fd2ba4a391a16ba2212c00a46ba279a3302c53a4cea246a44e2cbba5f7a314a56d2cc8a47aa45ba63a2cb4a30aa4c5a5c32b87a48da42da73e2be4a4e3a456a7502a9da426a51fa897299da4afa565a810293ba4d1a535a8c4287ea32fa523a71e287aa368a5e2a74127d7a36fa517a8b12660a31da5aea77d2533a3aea41fa76b24eba293a43ba7ad234ca141a450a72b22c3a012a435a76321b6a0bfa3c4a6832011a0fda264a6a31fe19efaa1b7a5951e259e35a105a5871d8f9d68a05ca4b61cfc9cc59fe2a38b1c8a9c639ea7a2441cb69aa49ce9a0da1a6899589aa99f901a3b989997319e681a3696b88e499c4e19ae945b114a98da1943939c16d8897a193d919718c812c4194a90d818c415161ab88e9f186d15ba19b88cd6170d155419468c88163e136f19e78c4715ba10f6187c8cfc121f0d7b18278c281136061318cd8bc910c0858c17948b050f1a8c7f16678ca80c6d8e1b16048c2809469031155d8b2f0338915914c48aeb022d924c13478ac502f0910513e389a202d890fe12a9898402dc8e5f127e884f07d98d451256894902708b9411ba8543064588781385897f8c098e321585897f8c098e321500002b1a7e1b181900002b1a7e1b18196d9c8e9cc99bf12601a1679e629fa82a38a244a0f2a0942b93a269a09ba1912b93a39da0d5a1e02b13a430a10ea30b2c32a49da18ca3fa2b4ea48da238a4a92b80a4dba36ba4c32bc7a5d8a4a0a6e92b04a309a47aa62d2bc2a277a4b3a7e12a7aa367a431a7672a1ca25aa423a7cb2904a238a518a75a292ba32da591a7ea287da2d4a49ba75b28baa266a505a83b27fda219a5cea7432651a2e0a450a75425eaa1b3a44ba7a824b1a187a411a7002457a139a4d6a6c12210a113a4a7a6ee21a3a09da333a62d2138a0f4a2e6a57120ff9ee1a123a5721fdd9da7a093a41a1e0c9dbe9f44a4c11c609c919e44a3ed1b7a9b3a9d1ca27b1b659a049c20a1331aa99930992fa0e119ad987296979e8719ee967e08cc9a001a4a95e714b493c7199d93d816ef8990197a929817ab0951193c913b1761090c191690c3160709b718508f3c16e80ee518b48ebf155d0e8218238e9014c6079e18ce8e1c13170735184f8f60117a86b017d58e7b0d818c21173c8e0b04f2900116718e9c894793a015eb8d0b8e989498141e8e238f4594d614a08da48e679467144d8d258ede9365146b8d0e8f76928614478db28e13924114438d678ea7921c149a8d238ff492f412b28dc78f29934314008dce8f8b92eb11008dce8f8b92eb1100000213c716178600000213c7161786b09ffb9da39dee285aa1ee9eea9f452a03a1ca9fe4a0f72abea16ca0a9a14d2b5da2fea054a2902bd4a281a1fba2e22b28a3dea152a39d2b58a38ea214a4662b1ca3fba39da4652b41a44ca4b7a5b02b7aa5c0a443a7962b16a5e2a470a76e2a0da528a5d5a60e2a7da4a8a447a752298ba454a525a7db281fa493a51ea88e2849a45da50aa73a2712a374a525a8ec26ffa244a5c3a7132653a2d1a47aa7312509a2b1a43ca78324c7a18aa406a70d247fa12da486a612232ca1c7a350a63c22aaa009a3dca57d2140a064a26ea5c8209b9faba106a5a41f7f9e8aa03ba4ef1ee69dd19f76a33d1e7a9dca9e04a3071d039dd69dffa1561cd39b359cffa0251c679a1b9aec9fb21bef98bf96cb9d701a6297bb88379a0b1bb794f5132297bc1ab990a118150ab4194d8f6b19331366190f8f9d19c7141e19de8e4519c215cc18df8f761828140c19e1908c165a089f1841904312d78d23184a90500e5f9027186490b1045693be179990828deb94f11737919d900596bb1652912d92f6964d16f6907293a99735150891d193099758158b9029939696011534904e93649680141690df925d958114cf8f16930c953d14708fca9252952314818f1e931a955914168e3792a3940a139d8b3690b09435119d8b3690b094351100006f137415440100006f137415440107a0e09d779fd428c3a118a19ca10b2a9fa23d9f48a0932a4ea200a087a0da2a7fa283a030a1292bada2f8a0cda15e2b46a3bba13da3882be4a3d4a249a45c2b1aa415a42ca5122b3da474a45aa5c52a31a4a5a3baa5e22aa5a67da518a88a2af2a4d5a4e3a6b42922a4e5a4cda6f828baa42ea402a6572887a451a4fba595272ca5cda4daa6ae26a4a30aa5d1a76126f0a214a53fa78a25a9a2e5a425a7d9246ea2c8a423a7402424a2ada43ea75323b2a15aa4d1a671224ea126a4a7a6ff210da10ba462a69821b1a010a383a5e320709f6ba1b8a48320d39e7fa098a3bb1f919da89eada28b1e5c9c089c05a2611d659bdd9ba1a1c11c229b1e9c2da1941c9a9ae09b9fa0ab1bcd99609a7f9f6c1a959874962a9d331a1b96d30e2b992b19b590c019230afc18db88181b0d18ca18b78b4f1bd0179e18618b821a7b171919bc8c9919b815c418298a9f1803144d18878b1716150e4f184c8f84108a90b717ae9112901a96bb172b9378941598bf161693f494b3982916e2926695b798c71586927e950f99eb1405922695d298af146f9128957898da140191b69406985f14829073944e9762145c907e94d6967e14bf8f4f948a964c14c88f2994d6951114538f52944296831337907094ad95d91137907094ad95d9110000b9142217b7860000b9142217b786829f51a0d5a03628a2a114a1dda23d29c8a08e9e23a0aa29bca0109d529ef429baa1eb9db69fc02ae6a18b9fe0a0e72a5fa293a125a3f92a35a315a42da5f72a33a393a48ba5d92a64a3f8a43ea6842a18a486a43ea56a2a21a378a4bea6722a36a35ca5caa64629baa30ba6fba7b22800a461a598a8d128c8a3fca5dba8532872a215a61ca8ed2601a4bea587a7b525f4a25fa5fca71525e2a241a502a8972484a241a5d1a7192401a211a5a0a71e2397a1d2a470a7612235a183a411a7762197a0dfa3bfa6de2005a0c9a2fda545206f9f89a161a55c1f059e25a061a4bc1ed49ca59d74a20f1e2c9c6d9c88a1671da09b3d9c14a1b31c189b6c9b94a0fb1ba59ab39bcfa09a1bf299e59a33a09a198f987196309d65191e96bf1174987418ae92e919b31017192a89cb1c361bef184883db1ca31b75191703921c241b1919cc82161bec194d19838df217f913681961917a0f118ecd188d92b78bcd953d1826946b949899df1772954297669b3517d394a297d09aa2164b9470978f9a1516c1933e97429af3140f93ef96a9997a14bb92a1964d9901140d9228968598fd139c918a9514982e1489915b95d89704143291ec944a974c143791f39488966a142790ea938995b7136a90e792ac95ce126a90e792ac95ce120000df13a718ce860000df13a718ce8691a11da157a36a275fa28aa168a2cd2841a0239da19e1f290ea010946898752941a11999169ff7298ba4a3a004a3792af5a341a40da6902a55a3d8a414a6942a7aa3d2a496a6a42a34a3eda486a65c2a42a3dda4d0a6f92998a4dca47ea6c7293ba39da460a68929e1a1c1a40ba7bf282da30da554a72428eca33aa5d8a74e2765a3efa565a82e26cda2b8a525a8fa24c3a257a53ba87f248da24ba51ca812242ca22aa5fea73623bda1e5a4c3a72e225ba18fa44da73a21fea045a406a79820a8a000a4afa6871f4da041a329a6011f439fe0a146a5081fbe9d65a02aa4221f949c679c3ea1431fae9bdb988c9f8c1f229c009b09a0391e6b9c609d4ea18d1cd39b759d81a19318109b809cc0a07218ee994c98bc9d591877973115510a22191e92371c8f1c28191111281f581f2919d1101120a51f19197283f31e281eda18158f311c801be418c08e9317e4141418b48f6113b090f9171a92fc8aff96ff16929495961b9a4a1660958598bd9bd915ac951499479c7d152995b398199c1015dd94a898619bbb1448945198d49ae514fb9303981c9a62143a936c9766997214ae92f396e0982e14059286969298d5136d91e595589814145e91eb95d297a7139290689534984212eb8fb594f0960210eb8fb594f096021000009916d518eb8200009916d518eb8202a03ca378a4cc26ea9f1fa25ea43a2768a2909cef9d3428d39c9620e121e127bb9d2019a7180f2956a21aa3eca368297ca251a544a76d29d6a2d8a5fca7ab29c0a3e1a503a8cc292da4bda59ea7cb2990a470a506a79729fda36ea423a61d2979a327a483a5c328dea384a4aba64d28caa44aa5a1a74727efa4c9a5cda75a269da47ca67fa8cf254ba454a679a8462592a3bda50ba87e2450a34ea586a7b623a9a221a58da77e2313a207a53ea774224ea1d3a4daa6a421d8a076a483a6032195a05ba47aa6182082a0faa31ea6461fffa072a379a5c31d3e9ec8a1e2a5231d3c9a2c9459a04d1ea49a221d4e1b061fdb9b939a34a07d1e9e9c8a9e57a23a1c3a9c319f46a25d1ad29b019f1ba2ed1aa69ba699d09d611a069871156c999618b70c3c1f351fde170f167821e22137165216552166212c16d015c62038206917b00ee71c691cc31788963710da8eda18a798519579987918359833985d9a0d18c7962699069c3117af958699469c871688958899469c151683954599109cc8157b954399ad9b771554950699999bbb152495cf98009b7515909482989c9a2715e4931b98ef99a01424936e977799c7137f92a7966d99fe12c292c3966f99c51209923a96149abc0e2d912f95429858142d912f954298581400003d0eea17630300003d0eea17630339a3a0a4e7a5e72534a28fa40fa62e260ea17b9e3da0b926201fff29592b93250e9f1d1c121f3f2625a245a511a7bb26eda21ea605a8552750a37ca648a8112850a3b6a64fa84f287ca3d2a6b2a8892886a325a64ea8a72829a4c6a37aa5c228a0a2c5a11da45d280aa4cda46da6222712a41ca6efa73d2621a428a617a88625bfa3f7a519a82125f3a2bea519a8942480a28aa507a82f244da279a5dea79123fda14ba598a74d23bea106a55ea769227ea1e4a400a7c02129a1aca4dba6fe20cca08aa495a67520d5a05aa45ca6881f1ca0bca377a6801dc79e89a331a64d1c5f9a6b9c68a1df1d6619bc2565269c21f89c0ea169a3b61cf99ec6a1f2a4841bd79d01a12aa4701b719c15a02fa2c01a9c9b789d2da1211b3799db93959a6c156d1040202f20bd11e6193e24f32456121f1b9b24902566180c18e8212523371abb8ed6196a1abd19c59770957f9acd184098ee9a3f9e551837981f9b229ed5160498d89ace9db8155d97b29abb9dd814aa96ad9a8a9d8e14ef95389a149d2c145d95e399c09cc412359593997a9c6112ae942799189cff113e94a3988d9b8811c0934b98bf9a161176931f98749add104493bc971c9abe108b939397d6993a116992f696229afa0c699113967b98b914699113967b98b9140e0fbc1b0b1c75150e0fbc1b0b1c7515d8a01ea4eda403256da119a43ba5c12451a229a603a8cf25aa24bd2d8530472560a39ea77aa8672860a2faa579a78f269ca2bba5b4a75626dba209a600a89525c8a20da61ea84925eba306a603a81b25a9a343a630a87125d3a204a59ca6c9269c9b042108221e2760a39aa5faa7d12435a20ea675a82f2403a214a63ea8272423a2d5a525a81d2456a2aea50ca8ec2319a28ba5d9a73c2308a257a57ea7cb22c2a10ca535a71e226ca1dba4efa6af211ea1bfa4c3a62821efa099a495a6b620baa089a480a6452092a069a442a62c2051a00ca4cba5241f8ca018a4ada58e1ea29fa9a2d5a43b1bd68fc395a09a6293279c73a010a4cb91719d6ba157a4be15659c00a127a40717b89ce5a033a41515969ce99ff5a2070f4d99a29b4f9e79129683201d7e1d4611741deb261f284294321f2128f0286217fd146c21b222e7192e942f071e942d1a60999b9b0d9e1019b6993c9cc39ec8173799019c889ef3165e98ba9b4f9e8b160498629bc79dd9153e97299b5d9d4d150997c59a3a9d2a159a96809af59c8a1452962d9ac39cd214e795b3996d9c961461953e99ef9b3714ca94cf98199bbe13579485987e9a4513c8932a98059aee12a9931e98c399ff11cc92c697a59968114c918096fb9876104c918096fb9876100000da19ac1bd20e0000da19ac1bd20e01a0a3a3a1a45723eaa07aa4fda59024be9efaa0d9a2b6214a0f540e310d0e1d89a0b3a40ba6cf244ea170a51ea7eb25cda153a554a7ea25dda153a546a7c425dfa147a559a7b72522a281a5a6a7c02556a2b6a50ba8cb25c0a15aa53da77124e09f54a3f8a49c1f42a25ca541a74622a7a2dca503a8f022b1a2d9a50da8cc2287a2aaa5f8a78f2254a26ea5c6a748222da23ca588a7f721f3a103a543a76f21a4a1d2a423a7f42072a1b5a4d6a66f200da186a49ea62a20cba055a45ba6651fa5a02aa431a6db1eb2a0fda3f2a5ad1ea5a0d6a3e1a5431e85a083a3b2a5d11d0b9f56a204a5e71cbe9b06a054a2b61ad09aca9e9aa1ca18329c00a0a9a23518759c5ba05fa35d164a9c8ca06aa3ae13329c7ea082a3b315e49b82a025a3cd182d9a259fc6a07017da1e1828bc28b89ae522c52bc62cfa1d4f98fd9bc39d061b8699939d65a0a018f0999c9d23a08a1783982f9db79fe416a198c49c5e9f701527986d9cfb9e2615e297469ca99e03158997f89b549ec3144497929bdd9d97148c96e59a829dba132496499ae39c27136b9599996c9c9c1212953299159cf812cf94da98909b9c12b594a498ee9a5912609444989e9a36124e944e98569af2113394f797119ae01369921c976699781169921c9766997811000031171d1a598b000031171d1a598b9d9ff6a276a43022249f15a35ba40724389c5aa07ba16421359bcd9fa3a14321baa019a45ba57824c6a0dca462a62b255ca114a5a4a67925b3a13ea5e8a68525d0a144a508a7852524a252a54aa7812585a265a588a7942547a2a3a447a6ca240d9f24a3eaa44523eba0b2a4c7a617229ca108a56ca78221fba103a518a778213fa20ca517a7372101a2eca4dfa6f220f3a1e4a4c2a6be2087a1c4a4bfa6612042a1afa4a2a62f200aa187a474a6e71fd5a05fa460a61c1f93a02aa425a69d1e32a0f7a3faa51a1eaf9f88a3b5a5971d119f08a357a54e1d8e9e7da200a5c01c1c9edea170a4571ca59d39a1eaa3611b239dd5a066a3741a6a9c7ca016a354190a9c53a0e1a25718f09b2aa07aa22718f19b15a046a21618f29bde9f23a25817489c18a03ca23b178f964399419cf211090484065301f883de97b69b479e5608689b7f9d25a0e2147999e79c9d9fdd14c998be9c879f5f148298979c609fca143a98429cc39e25143398009c239ecc1392976e9b989d0c14de96eb9a1a9dad134096629abb9c4413ae950b9a6b9c11134a95b199489cd912f3945b99239c0d12d3941199c89bf211a8940499ca9b41119494c898469b0511a8949c98c99a0e102b944c98019a1412a2934697c0987711a2934697c098771159076e1642196e8559076e1642196e850aa1e9a153a38921b39d06a287a34822309cd2a09aa269217a9d28a1cca25e2104a031a3efa491238ea05ba4dea55924b6a0aaa43ea68f2433a1f4a497a6bf2492a13da5e2a6dc24d8a160a509a7f82435a12ca5bea693243ba076a4d1a5f323c49f1ba477a542239ea039a4b1a5102332a175a414a677221ea2d9a4a8a68f217fa1bfa4eba6e9201da1c7a4d0a68b20d0a083a48ba621209ca067a457a6c31f8da043a426a64b1f7fa02aa4e8a51b1f52a019a4e0a5a51e2ba003a4c6a5361ef79fd8a3b3a5d01d9a9f78a375a5a51d599f3ba344a5281de89ec7a2eda4e41c229e1aa265a43c1c6c9d70a1c6a33f1bc29ceaa032a3b61a389c86a0daa29019e19b46a0a2a2fd18799b05a07aa27b18539bc19f54a2fe17579b989f42a2e817109b1c9f13a2ca17429a719e31a186179794b9981d9a14145790339640999411af983b9c229f4903529a0a9d07a0bb891d992f9d07a07f10c198f39cda9f70119398829c619f5e113598399cc09e0012f497d39b599ed811ab977a9b019ea0114d97229bb39db010cd96d19a669d58115a967e9a2b9d6b10c695269adc9c3c10fd949d997a9cf50f6f9429992e9c6e0f2c94c098049cd70d0594a698ba9b5f0c7c935e980c9cb2074f9304985c9a24124f9304985c9a2412000000000000000059076e1642196e850aa1e9a153a38921b39d06a287a34822309cd2a09aa269217a9d28a1cca25e2104a031a3efa491238ea05ba4dea55924b6a0aaa43ea68f2433a1f4a497a6bf2492a13da5e2a6dc24d8a160a509a7f82435a12ca5bea693243ba076a4d1a5f323c49f1ba477a542239ea039a4b1a5102332a175a414a677221ea2d9a4a8a68f217fa1bfa4eba6e9201da1c7a4d0a68b20d0a083a48ba621209ca067a457a6c31f8da043a426a64b1f7fa02aa4e8a51b1f52a019a4e0a5a51e2ba003a4c6a5361ef79fd8a3b3a5d01d9a9f78a375a5a51d599f3ba344a5281de89ec7a2eda4e41c229e1aa265a43c1c6c9d70a1c6a33f1bc29ceaa032a3b61a389c86a0daa29019e19b46a0a2a2fd18799b05a07aa27b18539bc19f54a2fe17579b989f42a2e817109b1c9f13a2ca17429a719e31a186179794b9981d9a14145790339640999411af983b9c229f4903529a0a9d07a0bb891d992f9d07a07f10c198f39cda9f70119398829c619f5e113598399cc09e0012f497d39b599ed811ab977a9b019ea0114d97229bb39db010cd96d19a669d58115a967e9a2b9d6b10c695269adc9c3c10fd949d997a9cf50f6f9429992e9c6e0f2c94c098049cd70d0594a698ba9b5f0c7c935e980c9cb2074f9304985c9a2412000000000000000000000000000000000000969f46a16f1f5a1c0e1f12202f2899203524f3242a2962235424da24832994245c240625b629ec2585248a25462af927c2249825412ac428af249425242ad4291725d625e3297b2a2b259825332ac52b232482241629d92bc6a0e8a344280926c3afbbb0082b722b3d19cc1c412af0299c229b24f027fd26a2227524d0262f24b12299249c262322cc225824fc25e01f53220424cf248a1c3421f0223923b61c08225d24bc245499e9a4eaa5ea250fa828b023b170a2a3a7a6afbab0e4aa6aa650aeefafcfa47ca6b2ae30b01b1513a73cafa3b00828ffa55aaef4af4f2b4fa3eaab11addd2ad89d18a868a90828d51a64201e226519001a0b2080212a19241927207021a816291907206d2152177519df1f2c21e7171919771fe7207f17bb18ee1ea02011174a18541e3e20a1160418fb1d012042168c17821da41ff9153917411d111fa815e516191dda1efc158816f01c5c1e4916fc15951c261e1416cb15631cbe1d421587151f1c7b1d8c153715a31b1b1dcb140915531bee1c1d159714ef1a9c1ce6146d14b91a721cba1417147b1a461caa14a313021adf1b4b14f1124e19e11ab3139312f218b31a39146212d1187a1aaa13d8119f18361a59131e125918ae1941125b1111189a19d5118c12b217d018dc1100000000000000000000969f46a16f1f0000969f46a16f1f5a1c0e1f12202f2899203524f3242a2962235424da24832994245c240625b629ec2585248a25462af927c2249825412ac428af249425242ad4291725d625e3297b2a2b259825332ac52b232482241629d92bc6a0e8a344280926c3afbbb0082b722b3d19cc1c412af0299c229b24f027fd26a2227524d0262f24b12299249c262322cc225824fc25e01f53220424cf248a1c3421f0223923b61c08225d24bc245499e9a4eaa5ea250fa828b023b170a2a3a7a6afbab0e4aa6aa650aeefafcfa47ca6b2ae30b01b1513a73cafa3b00828ffa55aaef4af4f2b4fa3eaab11addd2ad89d18a868a90828d51a64201e226519001a0b2080212a19241927207021a816291907206d2152177519df1f2c21e7171919771fe7207f17bb18ee1ea02011174a18541e3e20a1160418fb1d012042168c17821da41ff9153917411d111fa815e516191dda1efc158816f01c5c1e4916fc15951c261e1416cb15631cbe1d421587151f1c7b1d8c153715a31b1b1dcb140915531bee1c1d159714ef1a9c1ce6146d14b91a721cba1417147b1a461caa14a313021adf1b4b14f1124e19e11ab3139312f218b31a39146212d1187a1aaa13d8119f18361a59131e125918ae1941125b1111189a19d5118c12b217d018dc118c12b217d018dc110000920fbd81bd010000920fbd81bd017419861a071c9f28821b2d228021a829371d5c22c623ec29a31f08231024302a7721be22be23702a01254223f5231a2b1a2792231924042b6429b422cd23ed2ad32a70208121032a072cd69c90a02d29e02bd3a848aa7529262a9eabefac632a1d2a70a602a8e029582964188e19a728e6254c20aa203d28c3200121e7209827771a3d1f8f200b2694143d1dee1db4230a10b48da5955a228b9b44a447a6961ff2a0b3a94bab949b95a422ad8eae04a18aa45cadd0ae64a8daa395acfaaddda405a315ac53ad099fb0a28cabf8ac0320c6a1ddaa6dacc123bea098a91cab1d25d69d67a7d9a88121d89505a136a25f167b16911b561cf410de17c21da01e2a130c18461e16209009c018be1e76203c147418791e1f2069153518751e0320e115be17461e1f2098163d17dc1db71f2c16e7168e1d571fe015ba165c1d0a1f3716a516e31c801e181770169b1c081e3517c1165a1cb71dd4162816191c561d6016b515b41b011d24161715601bcd1c61157514e11a741c9d154b14911a321c4a15ec13131ae71b8c146d139719541b5614fb120a19c51a1f14cb118118fb19bc137e11301890196a131811e91734197c12fd10a6171219511227113d17c418f0117810e116a41803116b0efc146e1683116b0efc146e168311000091030905e009000091030905e0096c11461dcc1d28290014c11f3c20672aeb10c41fb520b32a3a1440203521312b511ab9203821e32b5e1f342016210d2c0824b71f161e2f2c1f27651dfb19b42b2b293b99e99d4e2b632a9ea386a5092b472bf7a692a85d2b562ac1a700a9d22a3829daa550a70a2ae126fba115a43829d620d99e5ba125288a0b339c829f6227bb9a6799bb9c2125fb9ce29e10a16524c09d12a408a60223eb9f24a7daa8ac214ea14da900abd42087a29caa4aaca91adca2dbaa85acbfa13fa284aa3aac94a16ea1bfa99aab1fa17ba0e9a874aafa9d939f42a87aa9ed985a9e5ba7e1a897988d9c9ea587a77999c09628a1fca229980384b297419b5a987d1263195e196e97ef142a1c5c1c3090b715b91c5a1de4085017871dbe1e9a0e5d17d81d171f38135d17f21d531f78145017bb1d491f1615ae16761dc31e94152c16081d641ee715d815db1c131e2b1685159d1ccd1d631630155a1c711da016eb141c1c1f1d3c16b714be1bd61ce3158e140e1b8b1c87154014a71a321c4215f913221aea1b7d14a313ea197e1b40145c139819151b2414b3124e19c31ae9134e12cf182b1a7113fa114518d61909135c119317fc18a512fc100017a4186a12e1104b1646182012bc10731694187611840fbc16a6182a10840fbc16a6182a1000003a036f016f8100003a036f016f810c99cd1a1b1c042a8f98a51cd21cd92a6e99e51a411cdb2b509b67198a1ac32b689a0a1a781b5e2c03989e18031d6c2ca918c41801176a2cbb210c16ed906d2c1326be9ed4a04f2c5a28b9a2eba41c2ce6280ea5aaa69b2b962844a5eaa6d42a9c27cfa459a6452a49241ea4bba55d294b1698a3bfa5b228799dc2a158a4fc2765a196a215a49d26b2a0eaa3e5a4bc2542a033a5f9a6fc246fa0cba68ca82f2407a138a8b2a9ce2274a1c1a876aa8a1eb4a1efa8b7aab910dea1b8a84faafd9ceba06ca831aa139fcf9f07a891a9819d619ecea6a1a8e99c279d67a565a74b9bb69a3fa31ba53c9a18987aa096a219981c92e09b009f3095010ac80f9f94658bcd117a197018d8103714bd1bf21be8127615cb1c971d3b145916221d231ee91440165c1d461e9c1413165b1d671e5914c515211d7c1e1814b115f51c141ead136715ba1ce11d631434157f1ca61dd114e714401c3e1dd915d814e61bf81c8b159914901bbf1ce9155d14321b7e1c99152b14a01a451c5215b8133a1ace1b0615c912ad196a1bc71472125719c11a0714f211dd18421a2c14061144187f1998137010c417d418ed120310b7164a186412420f2c16de17be12190f9415e316d111000f011583169213f00ed014b916d914f00ed014b916d91400005a818f818f8100005a818f818f813a9bcd8cdd8dba298d9cdc8df40e1e2ba39d6597338f7b2b41a0ed97a698d82b919ff68e5c99972c83a1610f9819ee2c3a9dfe0fe290ec2c2494929ca8a0da2c6821eba019a29d2cd7250fa3e1a47f2cca2660a4c8a52c2c3f269ea408a6be2b1b24e6a3dca5e32ab61d62a40aa6f829579e65a4fea61129c5a25ea3d0a5532812a2dfa37fa5e82689a198a35ba5a225d3a027a5e5a67624c6a050a63da8cf2318a15ba7fea80f2110a100a897a9bb1cdea007a8c7a9281085a0d6a7ada91f9632a033a733a9db9aba9f60a6cca8169de69ecfa55aa8ba9d4e9de9a45ea71b9d369b28a3a5a5859c3299ada09aa3d49a7595ec9caca0399abb9056966b9d3a97ca83430f16988a94da0dd616a1131a0ae811141aa519a412fd12531bbc1b30125e14d11b5a1c0e15b8142c1cd11c72149314431cf41c26149d142a1cdc1cc1145814da1bc21c74144e14af1bac1c321418142b1b5f1ca4149c13cd1a1e1c5f146813651aca1b2214f012031a4e1b7914a612b619e11a36143a125f19a61a6f14e1111119481a30147b119818ef19fb12d81031185b196f133d109017d518d113cf0fdd1686185213060f4f1625180013020f39160518cb12640fe31513189612860d31152417ec11000d6d14b5153d10000d6d14b5153d1000007c819e819e0100007c819e819e01949ce18c7b94ee29199f4b973c95b02bf49fca97cf986b2cfba0f999349bba2cb7a1439ae79ccd2c5ea3649d589d162ddea47d9dbf9e2c2d70a4d5a0fda1162dbea055a10ba4ba2cf90e83a3eba48f2cb02009a51fa61f2c0021d6a4dca63d2b2b1cd1a417a78f2a359886a5cca799299ba071a504a80129daa23ca519a78f28e7a3f5a4aea6d02743a2f8a4a6a620260aa2f0a552a74325d5a150a62aa8be24b2a182a66fa8be234da167a689a89021d1a06ca6afa81c1f53a046a67ea8181c38a0e7a561a853184f9f68a525a88d0ee79deaa46ea78394009d4aa4daa645940a9cbfa289a5ef93c999baa0e7a32893b597ba9d5aa143921b959b995d9ea991028fe608bc994b918d0329168d8a8d8ab10dd5182715e3092f10b719e718d90f6111f51ada1a2c149012a91b381ce6141c13d61b6c1c8d143313db1b571c29158b13b81b4d1cda1494134b1b511ca3143513451b451c2a15fb12e81a141cee147b12851aa11b52152e12eb191c1bf614e6119419d31a8d148c113919541ac9143111ae18e5197414c7105a18381947132510cd17d318bc12960f3f1782182213df0e7b164218bb124d0ee5154c171b13d80d5f15f616c812750df21495161713e70cc313c414e712aa081d10bc104413aa081d10bc10441300003401fb81f40800003401fb81f408609d0e966e99de292ca01a9c5e9cd22b35a1ba9e719e5e2c0aa1b19dec9ec22c0ea28b9f169fde2cb8a368a07a9f242d9fa492a148a2322d4ea350a26ea30d2dc3a28da290a3382db8a205a30ea5042d6aa0d3a4e6a5812c5c9d63a4ada6132c569fe4a491a70b2b64a108a5e0a73a2a72a2aba584a8aa2938a35aa501a82b29e7a324a5a5a6f22704a374a535a7b3264ea3a5a5fba7e3251aa2c8a512a8a32452a1e7a547a8fd222aa104a683a8ec20b0a00ca6a7a8e51e5ea0d7a599a8ff1c2aa067a56ea81f1a609fd3a4cda7e617c19e48a4b6a64b14c39d3ea3aaa5418d759ca9a1e5a4238d719a5ea0fba3d18cca988f9e16a2258c18970b9c14a0768bd994ce96269d298bff8e0512ea97090b87093718e410e410d70dac197518db125810fd1a561a39149311cd1bab1b1d15d011a71be91be914f411761b381c9b149e12461bf81b5814b012ba1ac31bfb13f011351a181b75148111d7198d1ade14ff103e19241a9014bf10f818bf19ed148610b21869194215531046181419ee140e100b18c718a4141a0f49177a185914c50ed8163c181d14270e561657179113340d60158516b812b90cb014be154d12090c401449157711990c3314e114b210090a071338156611250ca0129b140912250ca0129b1409120000d480198540080000d48019854008759dd099539c582a10a0079d639d412ccba15b9edd9e082c4ba200a048a0902caea337a159a2002d78a405a26fa3512d7ea479a14ea3392d3ba50ea4bea4512d51a4dea31aa5fd2cc5a253a4c8a5ba2c24a250a4bda5622c55a15fa48ba6fd2bf2a319a4f8a60b2b65a4b3a563a8412a19a559a6f6a8d92988a5aba560a8ef2858a46ba524a71828c1a343a569a7e826fca294a587a70c2636a251a56fa712257da131a5c7a74b2412a1ffa4c3a78622b1a0eaa4e7a78c206fa0e1a4efa7581e1da09ea4eba7a51c0fa042a48da7a419939eb2a36ea60d17779db2a264a53f16b59c69a18aa42413eb9bba9ff1a2cd12539ac79d7da16d127d986a9c6ea0131216965598e69da9113494ff913c9bce0aee90480edb96190a078c54156490641089087618011334105a0e80190a17ae0f10102e1a6318d9114f101f1a9c197b137e10021af8194d14c210eb19e019ca14ee108719e3194715b6103a19e719b6156810f61898196915271072184a191f15f20f40180a19e114d80e07186d1831157c0e311727184c141f0ea716b817fc139c0d1216a91666139b0c30151216a413690c8f14b5153013990b4d147715e212530b191404155012c6098e129214c0113c0829112b122b128c0a8211941312148c0a8211941312140000988131897c010000988131897c01af9e7a9bde9d14265fa0619f28a09b2b94a108a090a03c2c8aa25ca043a18b2ce2a2f7a01aa2e02cd3a350a2c8a34c2d35a4fda15fa37e2dfaa49fa220a3762de0a327a337a5042d0ea464a435a5c62cc4a31ba492a49c2ca8a265a477a62c2c01a4eaa4d9a7352b2ea460a558a87b2adca588a524a87f295fa585a525a8b0285ba475a532a80f2803a41da656a8a926f4a3e2a523a8a32558a3a4a5e7a7b22449a212a5c3a70b247da1e5a49aa73622f6a0b5a495a7c8207ca080a44ba7981f32a03aa422a7151dfa9f12a4eaa62b1c319f28a31ba6f518789dfda142a5ad16929cd5a08fa42e16009c2aa0a5a38f15759a5d9ef9a11e172099ac9c73a0bc167697e5982f9e6a163a95278f3f9ad415ec926311e1965a15a1906f156c933115e68b021832104b1603030719c3168815d80a1e192d182016780c8519f818cc16440d721912194816e70d07192b19be16740e16194d195c163c0e7c18fa18f915b80d3d185118a115810df8170a184515280df7168917ea143c0c841606179514180c1c169d164f14c10b4d15a2150614ff098f143a15781352093f145f14e712d508491328149012d6062b12d0120212a006d2115212941175061111431143119208da118c127a104909ed10f611e60e4909ed10f611e60e00004280aa87888100004280aa878881c39c8f99159cdf26dca0469f05a0752bbea24da06ba0282c18a4c6a053a1982ce1a3c8a015a2cb2c04a4afa172a2032d35a415a375a4242dcaa435a432a5292d5fa43ea489a50d2d09a5c6a3e4a4da2c38a572a4a6a5b22c11a5b8a4a2a63d2c7aa490a5e8a7242be0a41ca6a7a8982ad4a546a665a8bf2937a571a500a839296fa47da55da74e2893a38ca585a8212871a3aaa52ea86b26fca238a508a85725bfa2ffa489a707245aa2d8a4b5a70123cca1aea484a70e221aa162a417a7ba2069a019a4a2a6a21f939f6fa31fa6091ef39ed2a2bba5211d519ee5a122a5bf1a669d0ca1a6a45119429c24a00da41f19919a549e37a26817f798989caaa0c9142398bb9a7c9f8a14b29690986b9e6d14ff94b191fc9b3414c3915211e396a713988d8117a909131304837518aa14aa14cc020a19eb1667140b0815194b182715350aff1858189914aa0b9318f3173514e20a44186c17db136c0a6917f3165c13370a02179a16fe12f2098b161a1676123909f115ef14ec11e0080c158f14b1129f084f145a143911670888132c131212be056112de11de119205091256114f120c03f010c6108312dc02f50f7510e312c502b20f1c0fb812eb00420ec90ea811d480790bfb0aef11da80e5016707a010da80e5016707a0100000af80b505a80a0000af80b505a80aa09cb098289bd02681a1799f05a1b22b1ea292a03aa12d2cc7a37ea14ea2922c60a419a21fa3c82c6ca4c6a146a3e22ca8a4d5a2f9a3d92c87a4aba38aa4162d53a48da4f7a5b12c41a4eea4cba66a2ce6a53ca542a75d2c00a7b6a539a7442c3da7e9a57fa7002b4aa589a54ba8672a19a692a520a8f12905a5a2a5b7a7372948a479a59da74e28a0a37aa5dfa72a2735a36da591a73626b3a222a5a2a70e252fa201a5d3a79c24c9a1bea4c8a7ad2356a16fa42ba7ee2172a121a4e4a679209ca091a3aba6781f05a0f1a213a6521e289fdfa131a5a61c089ed1a067a4c11b529d36a00ba44a19b79c839f88a3f5178e9a8c9d60a26d150d99e69a9ca0fc14b897a998529e5c1463964f95c69ccf15c9956988a09a7515d1941c0efe978b163c935c14d69438162991ff154189e9152d8d35183f12a015c3826d1863166316880295180a17f415fe06461878177a164006c817e716fb15df0528179815981576051a1645154515400534152914ac15db04d514d01354157d01fb13de11e31464018e125611721442010112910f0d142781a010ed0e6c1316813210720ee8122581a70e170e65136683740d2c0c18132c83660df30802133785030cb108a5129d86ee018a82c21063842305010a8e1563842305010a8e150000cb81158234090000cb8115823409ee9d499ab09c692693a10ca030a19c2b26a287a02ba1ec2b46a33ba116a25a2caba379a15aa28b2c05a4aea199a2b82c6ba4dca13ca3ca2c0aa524a37ca4f42ceaa42aa451a58f2ca6a5b3a453a75f2caba552a456a7142cc1a6cca472a6172bada5a3a520a8df2ae7a49aa54fa8f42993a5cca5eda7932952a42ba536a7b528d9a39ba543a71728ada36da5afa73d2711a34aa5a1a75726f5a234a550a77625caa2dda455a7672430a292a433a74b234ea155a415a71222cda010a4d6a6cb208ca0a6a33da646204ea0eaa2d4a58d1feb9f3aa201a5471e2a9f92a189a44d1d169ec8a001a49d1cef9c599fc7a2f91b2a9cf69d0da2b21a159bec9c88a168199799ae9a3ea00d1901987795f49cbc18af95ed0e6c986c186f94ee14b4933c189792b315e3890c1885902b1757090216b88e6617540f7f15db8cd317c41130158f8c6c17a013fd15158af416061385156b895b165f12ea151d893b15dc114716d38a5514de0fe7156c8afd12590fc714f18975111c0c2315bc8929101b05c91460890b0ecf848114af8a180c86843d148d8b8a08408ad0139f8a3508bd892c13358ae6076089b912d689850219896012988969820b8c0f12678ada86708d0d11b889a68ba08eff12cc89948c018e2b14cc89948c018e2b140000b104220922090000b104220922096e9e0e9aae9b7626aea0019fd99f122b96a281a02da1f02bf0a276a1bba2652c4ea3faa1f1a2782ca5a316a222a3972cf9a3aba2b6a39f2c52a4d5a2a1a4cf2c1ea672a470a4e72c0ea5c2a47da6a72c38a4cba41fa63c2c89a419a5b4a6082ce7a4eba47ba6f12af7a4a8a437a6272aada4ffa476a6cb29e7a368a517a7f0281da4e8a5f0a751288ea4a5a509a8352784a464a505a853260fa423a5eba77425fba2d4a484a74824c7a2ada464a71e2372a14aa41ba7cb21eea019a4eda6f5209ea0dea393a629202fa020a347a6d91e6f9f4fa295a5331d3e9e3ea1c8a4481c859d6fa02ca41e1b149dd79f91a3e71a799c6a9e5fa27e1abb9a5b9cbaa0ff198c996d9ab59fd918cb986f98289eac184497a091409c4917b3945e11ea9639185b93a516ce89fb174a919e18c91277170e8fe118c2152818b08ea41896167e18b68c52181c162a18498c80169914aa17f08c40158312e8179e8cf61239102d17528c28112d068f16e68c720fb4050f16af8c060f6985c0156c8cad0ca68bc814048c2c090e8ee013628c33033a916312af8aef0205910511228abd02ec918a0fd8899c02ca90720f98897802d98e67107e883207b68d7d1070893f025888f70fd58514023c88b312a28a7b8d4e907814a28a7b8d4e9078140000ad188f1b58140000ad188f1b5814a49e599e099e752933a146a00da14d2bfca140a0d5a0c42bcda2d6a0a5a1342cc3a30fa152a2452c17a4a4a111a37c2c08a422a2b6a37d2c13a4c8a27fa4762ccea344a4e1a45b2c85a406a5c2a6782c2ea456a476a6e82bd8a4e0a4c3a6f52a53a4a9a448a6382a9ea396a476a695299ba356a5f6a65e29b2a3d7a525a8d92832a3dca527a844280da3c7a535a88a2772a274a5eaa75026fba114a565a75625c6a1dba44aa769246ea1a1a431a773232fa16fa4c3a68422e6a026a48ba65521a0a0c5a339a6e22039a017a3e6a52320439f35a23ea5cb1e0c9eeca059a46b1d199d1ba00ca41e1c4a9cfc9e31a3c019549b9d9d13a275199a9a149c20a13e199799dc99e79ff7185e9853954d9daa18de968488f99961183095e6149e9330188d93dd16e5090d1861929b173b10c11721913817081062170790c916810f10184e8f4616b7116f17b28ec2154b0ede17418f8e14b70d2517e48e08133a0d8816808f2a106106fa15e48f7a0d748cd214498f1104e9908f14988ea08945934513b78e158efc93c2122c8e308f52945612a38daf8e7094c912d18d1d8ee393f512ee8c118f84926113be8cb18e1c92ed12928c608eb192b112268d1e8f2d922d12ef8c4f90aa912a14c48c00901d926713c48c00901d9267130000e614141898080000e61414189808e29fc49df39d342961a12fa040a18f2af3a025a0b6a0582b8ca1caa092a1ef2b33a2ffa05ba22a2cb0a287a111a35a2c34a301a292a3572cb0a3e5a253a4392c1ba440a470a5252c74a47ca42ea6272cdca4b3a464a6f42b85a4bea4a5a6f52ab7a40aa5b3a6632ae1a4eba43fa78729baa5a6a505a811294da5b5a52fa8852867a4cda50ba8ae277ea3a9a531a8f8269da272a5d2a7f02547a232a578a72125f4a1f5a450a76424b3a1b1a4fea6bc235da152a483a6c02206a108a422a69a2189a05ba3daa5e4202da08ca274a53720c19fcda1eba4211fcd9edea041a4dc1df69df19f2fa3261d659de59e68a2721cd09c859de0a1801be39bc19ba7a0281b5b9a6b99ef9ed1190499c596eb9c8f1901981c8f55995519b495b3117b95171991921a18008ae018898ff5182913a7186490ac192416811738905819c5150e17cf8fee183014951614908f168d0e191721904712d5875c163d90540e60909016eb90b9844c9314161991838de29462164b919d90f995f91564912f92ed96f314569180930b9798141191d79315974014999023939a96ed133390429357960b13e18fce9251953b13888f10930695a3132c8f35924e957813c78e9492b5942713d18d4692a694d5107f893b90ff96ce8e7f893b90ff96ce8e0000b712da165d0b0000b712da165d0ba8a1539f7e9e992913a2e7a0d4a1862aa3a1489f2da0322bdca1fd9f7ea0832bd8a29fa0c6a1f82b4aa314a164a2202c7ca336a2d3a3122ccfa370a3b6a40b2cdea34da47ea5db2b16a4e1a413a6b02b14a4c4a446a68b2bd5a5b4a570a7da2af1a3d9a4c9a61b2a3fa3cba4daa6392933a3e6a48da68628d5a33ba5f0a632283fa465a561a72f2716a31fa5c9a7492638a235a53ba7512545a220a54ca7c82449a208a541a728241ea2c0a417a75323c2a183a4d5a675227fa150a486a6b7213da1f3a33aa60321b5a017a375a58e2009a0b1a198a4bb1f589f94a0bba3121fbb9da09dbfa1e01d879c6a9b98a0b81ceb9b2f9b75a0191c689b989b57a0091b9d9a3a9b1ca0c6190f9a699a789f8c19a19880962a9d8c188496b4115e982517b39039199c10ea160e8c2c1ba616a616b78bdf1a65166516568b7f1a16167117c18c2819a315e316588c9f1808152716a98bd5160b138b16728d2b134587e81551910d8b4f954f150f9379941f98a9145b937d95c298ec14e2927895bf98971487928895c798871337923895d0982513af913a957798a7134291d5941198e613fb90839405973b136290379477967213d88f059433962313c78f2194e995ce12798e7b93bc9677117f8f26941e968c107f8f26941e968c100000c31539196e010000c31539196e014ca01ba0c9a075281fa14ca153a29b2906a1e79f8aa0362af8a0909e129fe52acea1e29e52a0902bc5a157a093a1e62b67a254a208a4fe2b3ea362a494a5fb2bafa3bea404a6be2bbaa3f4a49fa66f2b5ca472a54ba6f92a3ea303a577a6c92ad6a267a5c3a6ac2952a354a5c4a6ff28fea37fa5fca7c22894a338a642a84228bea269a612a8052716a3eaa5c6a79925d6a2a3a5f1a70e25d5a27da5e3a774246ca257a5b5a7ef23e0a11ba59da7d2227fa1efa470a7172228a1a0a40ba7292192a0e8a36aa68d2002a0d2a2aba5ec1fb09fcda111a5c11e479e33a00da41d1efd9cb79dd2a16f1d5c9c7e9ce4a0c31ce29ba09cb2a0931c679b0e9c3ea0cc1b1f9b759cafa0881a6e9a4a9a22a0aa189f986596209d8318a596b31134993417d292e519aa100017458e141d321bd1162489e21c341c06182283d61ce81b9017cb829a1bf91916185e8c741847166c17cd904911058888160192c38be294a8161794739418994c15e3953f97de9ad314c3949a97539a7214379473971b9a1214b0934797e399771365930697aa99da12c392b496219934120c923a9690985f1297919e951698c81232916c957b9785121191fb944f972013dc90d2944b968d137c906394d7956f13648f4993c896a60f648f4993c896a60f000065166919be0c000065166919be0cf1a1a5a151a2012849a100a282a2ca287fa06b9e4d9fa3290ea0a49aae9a252abea0679c8c9dc02acda2a9a096a2712b5ba321a440a57c2b19a3dca424a6752b46a394a4e1a5712b13a381a44fa6fd2acaa275a49da68d2a8ba39da475a6462a22a3a5a403a6b72934a2afa41ca6e128e3a27ba528a72b2841a4d1a50ba85c270ca450a69ca85a262fa33fa6b6a82d25dda2eca594a89e24c4a293a547a8032443a257a501a8f122dca124a5c0a7e72177a1cca470a73a2119a17ea4ffa69420c7a039a4cea6052082a0b7a36ba6001fc79faaa25fa5fe1ea99e2aa11fa4111f579dc99c2ba1af1f539c1b98ea9df11ea79bc0993d9ec71d429c659dd5a0151c669b239d12a18e18ef9ac19cf3a04517e799dc98229e1f17db98be11e6931b1713934c1bbf1a241726109d1ef41e2717cd101d20b21f1a176a03461f991e4715f08e271c811be015b88e9b17fa15fa15eb8f9913908733152392bf845b955b1559942096c599d61428951598c79b7e147e95e398169ccf144495b998cc9b6914f894a9983a9b17139f945698b99a9d131d940598199ae712b89360976c996112da92ef960f99bf120f928e968d9892116391f1955b980b124e91f695de97b1119090b1950c98f410f98f85945b96940df98f85945b96940d0000e417f61a97860000e417f61a9786c19fc4a255a40b2713a027a2fda309289ba1109c8e9c31287d9c56205f20d0261a9e0e8ec50fa52965a144a394a4472af0a1aaa4baa6ab2a04a374a581a7df2adfa3b8a59da7172b4fa4b8a554a7eb2a22a455a506a7462a96a346a4cba5bc29c1a314a4d8a521292aa4efa4f1a69d2896a434a63fa8bf27bfa46da653a898268ba4d0a69da8cc257aa483a672a8db2493a3ffa545a8852468a365a5d0a75c23fca224a5bda7c72245a22ba571a708224da1efa405a77421e3a0aaa4a4a69420aaa076a475a6ba1f95a025a42fa6c91ee1a0daa3afa52d1dae9e1ea228a6241dad9c9498f5a0b51da899301e351f0e1e5c9c179a919e1b1de29d559f3da1f418419c419f4aa2c316dd9b289fcaa29419949aad9a829e521af4972d8f5e996f17d103941e5b1e63141a167721ad215711ab16582135215311d015cf206e201f14280d091d491ccc14b695150ddd8e26155c982d969298411603983e98739add15d29620990a9c2815bf959a99589c5f157d959e99579c00157a9551991c9cbc1452953999f29b6d142795fb988d9b3614d494c798359b04147f947d98999a9b13cf931898e9999c131a93649767997e119792cc9651996811ec92fd965c99451112925f96bf99eb0218913e952198621018913e952198621000006118f61a541100006118f61a5411efa03ca44da550263ea190a4aaa5a4262ea0999ce89d98261520482acf2b09273d9fc21624950925b7a2f8a4f3a54025fea363a624a8292685a436a7f7a8282717a499a7caa80e29b4a392a710a9c029c3a253a63ba8742969a23ca4d0a51929cca180a2cca4a128e1a339a5b6a66e27e0a372a646a85b26dda37ea64ca8b5257ba352a64fa82b25ffa2faa523a87e247ca2b7a509a8112458a28fa5e1a7942316a265a594a70f23dca133a53fa72e229aa1f7a4ffa6892158a1cfa4d6a6c6200fa1aca4b2a6422017a17aa47ca6be1ea7a022a43fa64f1d089fe7a342a6651c7d9d40a2cca4221d7c1cac2704291521f39c6ea28ba4b61bd19fd1a180a4931a959ef2a08da32c1a7d9c15a072a26919549bbe9d8ca0481a7a98ce93a699e518f50ebd1ff01db3111f190b24cd24360c2b1b9824ad25fd11491836225b23f8156188d61aa91b54179a96969347991d162f98ba9aa89d88168d98459b279e40150c98019be59d70147a97f59aab9d06138596a29a639d7e12e195259af59cfa117895fa99b59ca4103d95bb997c9c6c10e19435994d9c3e104994e298c79bd210f2936c98c09a4e1079933098659a15104e93d1970e9af30f5593db978f997210b492e696bf992d0ea391fc955b986311a391fc955b98631198114a1c641c171798114a1c641c1717eda08ca44ba5782575a156a463a5a525e3a263a630a88c2610252e2eb6305d27c5a107a717a8812759a278a52fa7112741a290a581a793265ca264a538a7832585a28ba560a76d24fca29ca5a4a75d2127a28ca5aea715230ca4bba4f7a6fa242a9db21dd41a7626cea2c5a6f3a857244aa252a660a8de235ba230a640a8c0235aa20ca634a8c4235da2eca520a845233ea2b2a5e9a7d82204a26ba5a5a72e22c0a135a562a7c32168a1efa4fea6212129a1cca4cba69820f8a0b3a48da61d20d5a087a46ea6b41fa8a06da434a62a1f6ba01ea4d0a5791e25a001a497a5cc1dd39ef0a2d0a4281cf30bfd0170882c8d119b1c9f35a3e694389d55a13da4f410629cd3a09aa39e15aa9cfda040a4de13809c1ea00fa3d211ab99969b339e7314f78f101c801c4914051d7a26172700975c1f2b28e728fa0d44171f229a23c2162294c310d108d2177f99959a109d771687993b9c429e7115eb98149ca99eef143598d19b919ec014ed97a19b0c9e45144197209b609d9813d596b89a339d5d129c96809af79c391227963a9acf9c06128e95b799939cdf1135953e99119c2d12b594fb98229b4e124d948b987c9ae111c5933498009a9711cd933298b79954112b93f9977a99ab12a091c396c9980111a091c396c998011100000e1aec1b1a0a00000e1aec1b1a0afa9fc9a3cfa4b523d4a1aea427a6ef24e29e20a126a22622e00d6f020f8cbc1d4da0bfa4f9a527253da1b1a589a76726ada1ada593a78d2687a182a560a75c2682a179a559a7352682a16ca592a70b26a3a182a5cda78a256ea14da55ca76923509f3ca3d9a4f51befa288a529a7e420f0a2f8a509a831229ea2daa505a80b2285a2baa5f5a70f2261a28ba5c9a7cd211da246a595a75321f0a115a55ca7d6208ba1e5a421a78e2052a1b2a4d3a60c20f6a08aa49ca6351fc3a05ba45aa6ab1e9fa02fa42fa6241ea3a00fa4eca5f81d76a0c9a3c6a57b1d76a07fa3b8a51a1dad9fdea237a56a1c939cdca0cea2481af19a609f97a1db184d9c02a046a2b8165f9c46a016a39e14519c78a061a34010229c6ca094a3da130a9c7fa016a33d18869a739f1ea131187f1c1a2696260595f1237d2c882d4018a7980d9c749d8b1ae799399d32a0dc16e3995a9d09a06f15a5980e9d829f0e15b298c49c2b9f42143a987a9cf49e0513f597399ca09ed3128c97059c2d9e7c133497a29bd29d34137096f19a5c9dc512da95519ae39c77116b95a699709c12111a953e99199cca10f694d898669b3911e694a498d49aef10b3944298829a761195944e98169a9f104a9440981b9a1c133d93849781996f113d93849781996f110000e817d7195b030000e817d7195b03f09e5ba3a4a49322f79ee4a252a4fa23329cada031a2cc21749c7aa0c8a2c9212ca037a46ba58224eba0e0a45da63b2554a14ea5dda690259ba199a561a7c925d7a1c8a57fa7da2530a2eea5eca71926d1a29ca5bba7d72590a298a40ba6d924089f6fa317a5f5237ca081a4a8a6de214ca1faa447a7fb20d2a12da552a7f020e1a122a538a7b020a6a1e7a4f3a6732088a1f6a4d8a642204aa1d4a4b8a6c11f07a1bba4aaa6561fdba095a47fa6e61ea9a06aa46ca61e1e71a033a42ca69e1d2ea0fca3fca51f1dd99f94a3b5a5a11c469f15a35ba5681cd99e96a2e6a4261c599eefa170a4141cc09d4aa1c3a3651a539de0a02ca37919999c82a0d6a262182f9c55a09ea2ad170d9c2ea069a2a7160e9c21a048a29f16f29bea9f2fa2c2156e9c08a019a21215f699309d25a08413440dc410f112d089f796f09a139e1d8e499b549d3ea0b3118199289de69fd513a098dd9c879fb7138798c09c5f9f901329985b9cd29e64120598229c2e9e02128997869b989d6412cd96f49a0c9dff113e965b9a969cac11dd95009a5a9c7f117a95ad99279c5c112a956799229c5511e7941599b29b7e10b894fd989b9b7110c794bf982c9b4910b894b198d09a121071944b980e9a611096936497ec98c60d96936497ec98c60d64044916a319120864044916a3191208c0a0efa106a34022d29d59a20ea46e22939c3ba1eda2ad212c9e9ca18da3d92134a0bea358a5eb2396a0ada440a6a124d0a010a5a7a6dc2454a14da50da71425aba194a54da72925cca1bca586a7232512a160a501a7c02447a0ada419a615242ea068a4dda58123cba078a4ffa5fd2256a1b9a464a615228fa1c8a4caa60f21a0a1b8a4c1a6622024a1bca49fa60020cba07fa479a6931fada070a445a6171f93a04da424a69a1e82a033a4e6a51b1e51a021a4c5a5f91d2aa008a4a9a58a1dfa9fe3a397a5281db59f89a376a5bb1c3e9f4ca346a5931cce9edfa2fea41b1c2e9e45a270a4841b759d89a1f0a35a1ad89cf8a033a36919629c96a0d3a2b918fc9b55a07da22a18809b22a074a299165d9bd89f3da27a166d9bab9f17a29415099b499f45a25016179a719ec6a1d1158e95aa99139b291338904a96a19833107d98e39bb39e2283199a299d15a0ad8e2199459d24a0220dc198fa9c16a0190f7d989e9c9e9ff00e2198419cda9e3710bc97ef9b6a9e16109197969be59dc2103c973d9bad9da40ff496eb9a659d660f8596979a1f9d290f2796359ab29c2c102195a5994c9c610eb6942b99029cf30d4294c498af9b700c3494b698429b480c33948a98699b9e0df7937098829a6f11f7937098829a6f11000000000000000064044916a3191208c0a0efa106a34022d29d59a20ea46e22939c3ba1eda2ad212c9e9ca18da3d92134a0bea358a5eb2396a0ada440a6a124d0a010a5a7a6dc2454a14da50da71425aba194a54da72925cca1bca586a7232512a160a501a7c02447a0ada419a615242ea068a4dda58123cba078a4ffa5fd2256a1b9a464a615228fa1c8a4caa60f21a0a1b8a4c1a6622024a1bca49fa60020cba07fa479a6931fada070a445a6171f93a04da424a69a1e82a033a4e6a51b1e51a021a4c5a5f91d2aa008a4a9a58a1dfa9fe3a397a5281db59f89a376a5bb1c3e9f4ca346a5931cce9edfa2fea41b1c2e9e45a270a4841b759d89a1f0a35a1ad89cf8a033a36919629c96a0d3a2b918fc9b55a07da22a18809b22a074a299165d9bd89f3da27a166d9bab9f17a29415099b499f45a25016179a719ec6a1d1158e95aa99139b291338904a96a19833107d98e39bb39e2283199a299d15a0ad8e2199459d24a0220dc198fa9c16a0190f7d989e9c9e9ff00e2198419cda9e3710bc97ef9b6a9e16109197969be59dc2103c973d9bad9da40ff496eb9a659d660f8596979a1f9d290f2796359ab29c2c102195a5994c9c610eb6942b99029cf30d4294c498af9b700c3494b698429b480c33948a98699b9e0df7937098829a6f11000000000000000000000000000000008d9a9da1f6a244208a1a121e262044286f204b242c2567291322ef24cb25232a90220625d2257c2a6c232c25c625172b8124662527262d2b5225942504262b2b3626ab250926bf2a6c26a225dd25572aaf26d324cd2447297827ad215221ed2804110eaf3bb0ce2a090ffdaae0acc42b0625c4232b241e2944238d230625092701210e2326255f261120d822db24b525b41e872257243125da1d3422d8238a24341af71f9321ae2535a5fbac6baef827b6a557ada5ae6ea3d316521b7f1d40a03b187c20ad214aa17515ce1696188aa6679711a4cba4bda9f4a05caa15ac15ac47a5f1adebaf25acc9a488ad9daffda6321ccc212723c59d1b1a222035211e08a2190b207f210e117819f71f71216714a519fc1f462106164219a01f0121b815d218f81eaf205a1565187b1e4a2003151518f81d0920b8148a17a11d891f811429173d1d2b1f4914f0161a1de21ebf14a516f51c701e8b1413169b1c311e5f14d4156c1ccb1d3014ab15291c911d06143b15ca1b381dbc1315157a1b081d7313bf140f1bb01c20137914fd1a801cbf132e14931a4d1cb312a1130f1ae31b2612fb127719f91a5212b212f318c81a50121312cd187b1a3512c81199181f1a2c1100125c18bb19d8104c111918d919e70f4112cc172619cb1000000000000000008d9a9da1f6a244208d9a9da1f6a244208a1a121e262044286f204b242c2567291322ef24cb25232a90220625d2257c2a6c232c25c625172b8124662527262d2b5225942504262b2b3626ab250926bf2a6c26a225dd25572aaf26d324cd2447297827ad215221ed2804110eaf3bb0ce2a090ffdaae0acc42b0625c4232b241e2944238d230625092701210e2326255f261120d822db24b525b41e872257243125da1d3422d8238a24341af71f9321ae2535a5fbac6baef827b6a557ada5ae6ea3d316521b7f1d40a03b187c20ad214aa17515ce1696188aa6679711a4cba4bda9f4a05caa15ac15ac47a5f1adebaf25acc9a488ad9daffda6321ccc212723c59d1b1a222035211e08a2190b207f210e117819f71f71216714a519fc1f462106164219a01f0121b815d218f81eaf205a1565187b1e4a2003151518f81d0920b8148a17a11d891f811429173d1d2b1f4914f0161a1de21ebf14a516f51c701e8b1413169b1c311e5f14d4156c1ccb1d3014ab15291c911d06143b15ca1b381dbc1315157a1b081d7313bf140f1bb01c20137914fd1a801cbf132e14931a4d1cb312a1130f1ae31b2612fb127719f91a5212b212f318c81a50121312cd187b1a3512c81199181f1a2c1100125c18bb19d8104c111918d919e70f4112cc172619cb104112cc172619cb100000a58fca9b51150000a58fca9b5115f318e31ac0972f29d61ca2224e22742a111dc322d8230d2b371e8c239524a72b791f1224b224e32bb02093243e25612c3b21cf24de25672c132340240925112c0e24d823cd240a2ca424e41cb01cf32a2f231ca6e3a72c2ac614e1abe6ac242b2294d6a984abe22a411c5ba164a3dd29e61a5f1eeb1de9281a19052154211d28f2187c2022217726e817c31c2b1dab25c908dc98c6986523419b56a5aea61f24d2a164abb1ac772117a259ab9fac65a39d9f9fa8d4a981a78e9ebba7daa8b8a9a59f9ba8d9a901a995a086a9c9aad9a85ba1fca9a0abb3a7aca147aaf4ab29a60fa0b0a828aadca2e19302a05ca1979c0d15651af31b71997617811de31e10931818901e5620cd927f18a51e6920c9086d185f1e0f20d9102118681eec1f05149317461e1220c7146a17e21dcf1f7614c716af1d601f3714d216561de61ea914c716e21c6e1e0315d116a51c0e1efa15ad16601ccf1d22153316281c571dd8149a15d21b211d32150c156e1bea1c7414a814f31a8a1c3a144c14a41a411ced13f813241af31b6813a5139d19571b081344131819b21a991233129018f01936127f1110188c1949111411b31741192b110e115f171b1906113b11f516a5181810c010011748188b0fe20e7b143e15a10de20e7b143e15a10d2f014d0f7b0f3d122f014d0f7b0f3d124915b21d0e1f8629fc173f202121322b7017e120f721532c3c19df219d22a92c121aae22df22c72cc019c022a723c82cb519da22bc230d2d091c6421fb219b2cbe1cd81cfa1d5b2c1f1d7e9fd09f0b2c301b52a5f1a69a2be29646a8bda9dd2a179cd3a70ea9f62ad69dcda4f0a6512a7f9f60a117a43a29d69bb49b289f5628799acd99829bd626629a169f1aa14f26a99c79a322a56925b49f62a7c6a8c12243a158a9e6aa341a11a193a917ab7a9758a0ada833aa6da2ae9f1ba883a9bca56a9f2ca86ca9f4a4a69f2ba864a996a4289fd6a711a94aa26c9e12a797a88aa0589c2fa5c2a6799e1697eaa07ca27e9bf48313961f9a1f9a2314061baa1b7098cc15d21cae1dd29417162f1de71dd888f0166f1d9d1e7b0e5517c01d391f11112f17d81d691fce120a17a11d251f15146c16681dd41e91135216081d871e4a14cb15db1c421eb8147b159e1cdf1d1a151115591c781d6415d614231c471d0e159e14c41bf61cc01457141c1b8d1c7c144814b61a501c40141514341ae81b0314e413f919861bbc1276138319101b8512b3122d19b31a5c112f12ad18131a0411df1128189219c01034118117001990100f113e17a7186710c710421637184c10ca10ad164118ac0c5310e8158917f70b5310e8158917f70b000071065c077981000071065c0779817f976c1c721d122be0954c1d6c1db32b8f977a1c631d512c7d9afd1bb81c9f2c259b541c091c152d2b9c0019011a232d6c9f291b8217472d3f9f7616d397ee2c1ea0fd9c779f212de69b01a269a38c2cef9925a42ca5262c1b9ebaa4e0a5ec2bdd9ffea4e6a6fc2a1aa1efa47ea61a2a47a1b2a334a56d29f09fb6a0b6a3a5280aa080a119a3cf272b9fffa28da4ee25bf9f15a5a6a6f42472a0dea68ca8cc23aea005a858a96520d4a046a8a4a9b190b3a01aa893a9569feca0b8a71ba992a1e89f3fa741a9b6a3299fd6a6afa8eea1f69e38a621a814a00c9d0ea5d9a6f49dfc99a9a2a9a4689cf39630a0cba11699ec9083993d9dfe94e90c6b14210b218b9112d619e119460a0e140e1c451c19105315cd1c931d3c0fe6151d1d171e6b11e7155a1d741e0f11fa155b1d911ec710a815161d641e7c109b15eb1c331ee2115115b71cd51d89112c15791ca31d1114ea141d1c4c1da413c914e41bfc1c40149814961bca1c15145c14381b8f1cc7132a14aa1a351c6a13b013451aed1bfd123d13bd19801b9d128b126819d51a3c12fc11ec18431ab61114114e1867191b1174107a17d1187411f20fc31656181911670f47160118e610790fe1154417a310020f8115701760124a0f7f15db17b4134a0f7f15db17b41300004581278127010000458127812701249a398d588e642ada9b798eba8f222ce19ce99406907f2c7a9e57956196c02cce9dc98f4b97822d4fa01090fa10a22d919f591626916d2d80a141901b91632d40a1e99de69d1e2dfaa021a36ba4fe2c31a2aca4d7a5bc2c75a2a6a55da7272cb9a44aa5f7a6352b9da372a535a7a62af9a3fba438a6b129b8a138a468a5e62855a01ea43ca5082872a053a494a565265fa043a5cda6ef24c4a05fa628a8a72307a133a7c2a86f20d4a061a7f6a828197ea038a7e2a815963ca0caa6cca87c9cdd9f60a670a8279e119fcca504a8999e199e30a56ea71e9fc09c4ea42fa6b59ddf9a53a2dba41d9d179955a01ba3dd9b6895c79c44a00e9aa890da926f9bf096c2832914339155945c0cd6166413e98985109919e218d00f75125e1ba11b530f5b14121c961c8f11a114331cca1ce9108a144f1cf01c98108714281c141d0c124314d31bbf1ca8114514af1bae1c5811cc132d1b651c0611bb13cd1a241c15127a136b1acd1bbb11f612131a561b9612b412d1193a1b3d1252127e19ba1adb1204123a19691a88129d11be18171a4111f2104a188619f61029109c17ea187011ab0fdf168c180711080f4b16f817d210120f3e16d717be10650fe81503185a11f40df2141d168a109c0cca134615090f9c0cca134615090f000076030405ac81000076030405ac81699c340dbe94792a579eed94f2953e2c20a041983299b62ccba0a09ad89b382dd9a01b9b4b9ca32d9ba1759bd09dda2da5a3e29d1a9fd92d2ca4a1a090a1c52d68a355a145a3952d46a28ea262a3522deaa16da428a5062dd2a2eaa435a6a82c2ca3f8a498a6de2bada3c8a5d0a7e62a86a3b7a511a8e5297fa22ba542a7dd2809a2e5a4d3a6fc27c2a138a5b9a6b926e7a1ffa5e9a7c425d9a14ea638a88c24a8a17da652a8442333a164a652a89f208fa01fa62aa81a1e2aa0c3a5e2a7381a9c9f5ea559a7a00eb39ecaa4d5a6288e8a9d51a40ca63897ba9c87a364a5ca98509b66a116a47d981e99ba9e93a1b7951197259c3b9ffb910a94fb95d09a7491108d311243941e91ac035917cb10cb90b80dd5188b16d08930102e1a80192d098111041b501b060fad12bb1b681c57111e13d71b561cf5103213cf1b841ca1107b13ae1b7e1c23128d13431b4e1c33103f133f1b481c93117813e71a121c4d118c127f1a941b58123d12e6191b1bf311eb118919ce1aa81288113219511a2d122111a318d519b411d6104818231942117d10fe17c918e510b30f33177e189910040f6a160e182411680e8b15ed169d11010e0f152e160112140d9b142416a411680c2113a8141b12ca087e1071129910ca087e1071129910e58cc70348048c14e58cc70348048c14939d4696ec97302a619f989b329b462c8fa0da9ce79dee2c12a13c9e529e472dbfa1589fc19f7b2d70a3c19f11a0d42d3ba4f4a055a1af2df1a238a220a47d2d0fa48ca2f3a3932d24a460a4cca53a2d51a4afa5d3a6082d84a4e7a515a7672cffa46ba587a6e22b90a498a5fea6eb2acaa478a553a70d2aa4a3c7a573a7302937a472a509a73528b6a2b1a59da715270ea277a56aa7a825b7a1a5a5daa779243aa1bda50ba85322f2a0bda52fa8d020a8a0baa537a8d81d5aa091a529a8fc1bef9f55a504a84818fb9ecda429a7b614439e19a41da6ac8dc39d1ea34fa5d8937f9c66a169a46e93719ab89ff6a2af957898659dd5a0f5945a96269a2b9e92946a935c94929b7494be8e061259943891940333180b14778ad70db519381990096f10101b091b570fbc11de1b191ca811f811ba1b2c1c63111f12871b681c0e131e12571b261ca2120c12c41aa51b1e12df11431a121ba9117a11e119881ab91209114219201a4e12c010fe18c4193f138510b3186e19d4124e10451815198c1312100b18c61817130a0f49177c18a912d10ee11607185812360e4d165617c8111e0d42156b160e11420c9214a215b910120c35144015f70f1a0cc713cc14d20fc90a071369145a0e0d0c8412df13ed0e0d0c8412df13ed0ed9853603ab835b14d9853603ab835b14b79de299749c6d2a31a0999c829d5a2c51a10b9f989e982c83a282a0d2a0372d02a4bda15ca2912dafa434a260a2a82d6ca4d9a13fa3b62d28a43ea3d1a4da2d1da4b3a21da44e2d70a463a4afa4e32c38a532a5c7a5952c9ba449a5aea6952c1ea5c8a507a7ec2bf7a587a55ca6952a80a5d4a532a7f2299ba565a57fa7e22837a4a9a5a3a71928eba277a577a7f126a4a254a560a7e025eaa13ea557a7ef247ea129a55fa7ba2328a11fa54ea71222e9a004a569a7152063a0bba455a75e1d18a07ea444a793197a9f27a4bba68d14809ebca33aa69d8d979dcaa24ea53a8d9b9c07a119a4c48cda9b529f31a29a920e9abb9d27a15892ff98639c1ea0fd91a596d498419d7b912c94de91319af490d2905c0edb969290c38b60156390d9897a088418f7129289f30c8e19fd161589f80ee519ed18a3085310311a8f195a0e78100c1aff19cb10cb10f2195c1a24127e108819f3196213a5103319ef19e3126410f5189d1985123010ba1854193012f10f45181519e711e20e0e187c18cd12960e441737183b11370ec216d617dd101d0d30163d177e11b80c93151b16fa10010c991423168111b70a101480154c11610aae13a8149711f0080c12d21319115508a7102e12e110ae0abb11d913c412ae0abb11d913c412d0973490d390d310d0973490d390d310359f9a99129b8f1d37a114a095a0c62be2a173a078a0c32c94a230a1bea1062d3ba3eca116a2662d41a4b2a2a4a3b12d14a408a309a4032ef3a3c1a2a0a3ee2daaa3aea218a4872dfaa388a20aa4f72c1da417a5cba6c32cb6a45ba532a7472cefa43ea5a0a6a02b63a43ba56aa6a42a47a451a532a7a82964a455a508a8e9282aa493a515a81528b5a3f7a53ea8a82645a3e0a51ea8c625e2a282a5b6a7b8241fa221a599a7b5238fa1cfa460a7332222a1a6a42da7c92097a078a4efa6d51e3ca028a47ca6081db29fe9a337a63219d99eeda2a5a5f3168f9dc9a1b2a4a413939ca0a0c3a30713ea9b929f61a28412719a129e2ca10d157b99b19cd59fbf14a297de98289d7c141f95228f4c991214bd937c0e3d957c13ac908614659053131f8c1f18fd12e4141a03231900184e1417082819ae18b5136c0c8a19e518a4143d0d201908195114cd0d111926190814400ec9184619a514f30dc418ec185514850d37189d181014560df21752189b13090d5f170a181b13350c7416e4169712180c16167c163412d60b4c150816b810f00982141a1560101e0928143e14ea10560791120814aa10fc056f11e81278101b06af11ab1128106504fe100212c70f43093d114511070b4d07f70fed10a0824d07f70fed10a082df91cb88048baa12df91cb88048baa12e599d0958b974c2123a1d39fe39fd32bf1a253a0eba0a02ce9a331a1c8a1fe2c68a403a24aa26e2d2aa499a27aa3e52d26a41ea376a3e12d68a4eaa3eca4fc2de7a47da431a5a62d3ca5f0a4c2a54e2db7a488a54ca7d32ca8a4f0a588a7442cbfa476a686a7982b0aa54aa6b4a7c22a81a4eca531a7d929e3a4afa5a6a73829e9a40da6daa75028c7a480a504a84a278da3b5a525a84e268aa260a5faa733257ba20fa5a6a7162440a2f0a44ea79a22cea1c2a435a793211ea176a4d0a64a2075a007a463a6d61ebd9f6ea306a68a1c0b9fc1a29da5091a059ef3a1b9a456181f9dafa0f2a3c7151e9c839f52a26115909a909d20a1ff143b99349c05a085116f98ab9ad49e49118c971e99bc9d19115295ed93b59bde10869254114b958a10a68d8d17381038108d888318a414a012cb82191907183112f007161931189711f409f318451806115a098d186c188512f70a441826181c12950a6f17f31616106a0a1617a416d00f1e0a0f162316380f710970159915960ef808041584143710af0856144e14bd0d52067c130c148d0fb1055212a6129b1065034411231123111403e010b610b610dd02e80f60102c11ed006310eb0eff10bd024f0fae0e1510d380b80c3c0e9e0fd680d8016782670dd680d8016782670da4914c03f9021013a4914c03f9021013a19a8c963d97d721b6a1759f26a01e2c2da2b1a066a1b92caba304a2eea2062d45a454a243a3562d7ea4fea20ca4952d5ca427a320a48a2d15a4bea370a4792d12a42ea428a5462d5aa4c1a4bea6382d1ea539a56ba6a82c30a43aa54fa7112c08a441a5c5a6462b21a439a565a7982abfa485a5f6a6e6292fa46ca54ea72b2965a465a544a7452843a38fa56ca72d27a2a25ea5aba7112684a241a5aca700253ea220a5c0a74224bda1dda4b5a7f72256a18ea470a75b213aa138a4fca6131fada0f2a3a7a6081e19a0e3a2eba5561cda9ef8a128a5fc1ad79df0a083a44818ec9c22a0eda3fb153f9c5f9f5fa3f012889a909dffa1440ce598f79a32a0ac0b08981198f49d0e0bd9965c95729c1511e895a88ee399da13d2941e117b96521049924d15c892c8124e90e41631097d12218d2f182b122b12b28261184f1603147e028c18f716811353024418361875145306c117ce161514f00518176316aa138a051a1640154513c50132152714cb129601d214c4135a127c01f7132413d7115e018b12521152114b811612db10db103c81b910080f85108e833710a70c3010c583610e630cd310c985700d1e0c5a116085560ddd0845115285db0b1d0347103588bb088b022210c4821b08810bc513c4821b08810bc5134e94f18bc88b9e124e94f18bc88b9e121a9c8198e998a52115a1de9f01a07b2b43a2aaa049a16f2c98a366a13aa2d62c08a4b3a182a2212d40a45aa250a34e2d8ba40ba30ca46e2dc1a41aa4c8a45c2d8fa45ea477a5312d2aa5a1a47da6072dc9a4e2a42ca7a92c14a56da570a6142c74a472a570a7382b66a4f3a501a8a12a15a4d2a50da89c293ea4afa5a7a7dd280ca4a0a59ca74e2892a36ca591a7552749a34da546a7302627a329a527a74925b0a2c7a4f0a6342419a279a4d4a68c226ca147a4dea65121d6a01ca474a66c2066a07fa349a63c1f22a0f1a2b1a5451ea39f09a2dda4b11d209f97a155a4201c399ed1a0e0a3011c1b9dc09faea2c419259cec9daca18a18b79a9b9cf8a0ca1681991b9aa19f7a164698c296f89c0d164696020f36979c1504940615a390b8138792dd16f30970137d9049171b10d912d48e861720122012e38c13170514be11858ca516ea14a413f7892f167d14fb124e89a515081446120a893c1571137113ca8a8f1382111613778a0f13610fa412fd8983111f0c8f13658b31109d0bfc12048b130ec4045d11bc8a160c74842012918b8d081b84a611888a3308aa893111058aa2025d89eb10a4898082468cb3107e896482128c7a105d89e286cc8b4a10a6887e8b888e2c12ef898f8d218f0d14ef898f8d218f0d141993df02a38805111993df02a38805111d9da098519ae72100a11ea054a0592b73a203a1cda1522cbaa274a1d1a2bc2c98a325a216a3ed2c1ba4d3a24ba4382d52a46ca352a4402d99a4eca33ba5312d45a5c0a435a5192da0a4d8a40da6d52c4ba4e4a41fa6842c6da439a574a6202c26a419a597a60f2bdea3e6a46ba6fb299ba3e9a479a66f2938a46ca56ea7ee28bea4e9a52ba84a28f3a4eba532a83e2797a498a515a8fc251ea455a5bda70f25a9a200a5b2a74b245ca2d3a488a7ad225ba169a4f4a6752118a135a4b2a69420a4a0fda365a6a41f26a027a306a61b1e1c9f14a25da5891c049e0ca196a4561b729d49a007a4011aeb9c889f41a3bf18409c1c9e29a20a17bc9a7d9ca6a04b18cc998f9ae49f5016fc98ab99919eef151098db93999c001412957e13d4964f156b92a917bd09061541912a18c012b91449906c18b615b6157c8ea01885165615868cbd170916ef142c8c68168c148f15d68c271571121015858ce7122e106f15318d1b11990c3714d98cc110b105d3139c8c020f5e8561135f8cb60c968bf412a98c3509f88d5f115e8c3003f08ff00fc98af402988f6d0d2f8ac802b290430afd8aa402428f300da3897902ba8ecf0ca2895c02aa8daa0d97893782288b710e03860b82e08c3911608c498e6e91b412608c498e6e91b412b2066e171d18ef14b2066e171d18ef14d39e7f9ec29e3429aca0179f0ba0c92bc2a142a0c9a0502cb8a2dca02ea2992c72a386a15fa2d02c1da435a2c8a3ef2c16a4cba245a40a2d09a4dea3eaa4f32ce8a362a43ba5d22ccfa37aa422a6992c44a483a408a63b2c85a446a597a6802b4fa43da5e5a6b12a32a48ba538a7c3295ea41ca683a73c29cda325a619a8b0282ca3eaa520a82028bca2a1a503a82a278ba26ba5b7a7e92540a23ea582a70925bfa1eea429a7142465a1b3a411a7ce2240a185a4d2a68f21f8a040a473a6bc2093a004a41ca649203da042a3bba5071f229f15a2e7a4261ec89df4a04ba4c91c279d2ba0b7a30a1b8d9c239fdda2b319d09bb59d0ca27118059b809c1ba1a716d799909ad99f47167f988396449de61515977a88ef998a15f8948f1394934e154293ce16d8891d152e9298173510e914fd9033170610b114e68fcd16810f6014248f4616a9111815cf8fb4152911a514288f8914a10d3814d68e00132b0dc0136d8f55115d062913f58e810d778c3511718e1504e990e910b28ec883f4919e0ec18e608c02942b0e158eaa8d5794c90d938dab8eed93660f348d278e08944410828d1f8fa592e0104c8db28e109393107d8c798fa39339115c8c1090ad9305100b8c3690e8929811498a0e8fa5914f12498a0e8fa5914f12a6808712d5137e0fa6808712d5137e0f14a0639d459d3a2930a1aa9f53a0752b00a107a082a0e42b9aa1d6a008a25c2c65a294a169a2a32c07a331a2cfa3cf2cc6a3caa242a4f52c33a4d6a3e4a4ed2c5da485a467a5b62c5ca4d6a46ea6652c5ca4e1a427a6002c76a420a5b0a6472ba3a477a53ea7a72ab7a4b1a5e8a7e62940a5eca50ea8242965a4cda533a86e2812a4f0a51ca89427dfa3cca5dfa7ad265ba3aca5c6a7da25aba26ca5aca71625fda108a539a743249da1bea4fca6102341a182a483a61e22f8a01aa427a65221a0a08ca3baa5502046a0b2a254a54c1fd29f1da2eea4011ee59eeaa044a4c11c2b9e00a032a3121c889de39e4ea2b01ac29c749d7da1571a9d9bae9b4fa00e1a099ac398f69dbd192f998895749caa187898e791459976187e96c90ef596f5164a930b17f089af166a8ff018f71462166b90b2191f16c31447906019c4157c14db8f841855152514229097167011e5144090c813d88769146f90620e5c90cb142091bb8446937214b690a18a1e94de14ca902f8f3c958a14d99033922b963814d9909693fd96af127f90d193f3961d126c900a936496a11110901093ae95ff10a48fad923a957011648ffd92fa942c11368f2f924b951911418f8c92af949e110f8eae9157946a12228b5290c394dc0e228b5290c394dc0e000076143115061100007614311506112ba01aa0a8a02229c6a197a045a03f2b74a1169f08a0a52bfca17da00fa14b2c23a39ba1eba18c2c81a312a21aa3a72ca0a3f5a25ca49c2cf7a328a444a5852c21a49fa4e1a57c2c74a43aa5a4a6212c7ea465a54ba7ef2b6ea522a60da8ef2a46a4b3a5efa7632ae4a3d1a5faa7a32973a3d9a5ada7e628b7a3c4a56aa74328c4a3a5a5dba73a27d3a27aa5e9a75926b6a287a590a76025afa264a582a7bf248ba22ca556a70a243da2daa4f6a60a23d9a1a3a4bba6342295a166a465a671212da107a40ba6b120afa0f3a23ea5e71f11a0bca183a48a1e0a9f99a082a3da1dd89daa9d60a1411d8f9cd69a899f221c5f9c3a9bc79f121baf9b999b919ff619e79a3f9bb49fb819129a059b6d9fa317d398ab97899dbe15dd96f513579887158c913419a313a313048c281b23155613848bd91af51415131a8b8019b614b614978c1f1987154d14448c45180316eb14f28ce6167c147c147f8ced146c8df8146490bc8475944c13ab927d9494977f12f1929295dc9809127d929995d4989c117b923395d398431152925195db98fe10e7914c957c989d107691ee941498211104918f9413979311679036948a962711a38ff0933896e610318f9b93929564113c8ed29270969e0e6d8f1294a9967b0e6d8f1294a9967b0e00001f154716940900001f1547169409b89fe0a0cda1962846a15ca1c4a1ab2a1ba1599f42a0532bf7a05b9f10a0072c52a1a99f40a0492c68a1cca01ea27b2c22a216a333a4742c21a36da4dda5652c95a347a55ba6452ca2a34ca5b1a6102c8ca39ba5a2a6392bfba241a599a6cb2ac7a20ea570a6e329a5a301a54ba6342935a456a5f8a6b32842a328a603a83928b8a225a609a8c526cda2faa507a8ce2504a30ba60aa8152564a2aca5f7a7562423a27aa598a7ab23c7a13aa57ca78b2257a101a547a7cc21fca0aea405a7dd2084a019a434a63a20e89fb4a271a5421f6a9fe0a1b8a41d1ed79d3aa02da37b1deb9c609dfda0dc1c539c2e9c51a0311c079c9f9c58a0fd1b5e9b009d5ea0b71a819b5e9dd0a09019c89ad99a0ea07c178f985696a39ca4150f97a811559883155894651ab313b313cd925a1db81c49151c8e2b1df01c5213c988a01c541bfb122988941b6f1964125f8c6b182a15bd11e3904011f307f51206922285c69413120494a1938a981a13c895b6974a9a7912ad94f7971d9af3116f946297f1997b1120943d97c3990f11bd932c97a199b6101c93dd9632995a102f9258969f98bd0f8691a9951198281115916d957597f810b39000955097a111ba90e3945b962d123b90b694be96bc10128e3294e3983890128e3294e39838900000bf125814e5050000bf125814e50586a059a237a495270da1e9a112a4c92827a0309ee49e082a659fe59963961f2b6ca0089dbc99f42b11a2c89fffa0272cf9a284a22ea4492ca0a216a432a52e2cffa269a4ada50d2c6da383a460a6872bf3a269a4fca5fc2a2ca357a411a6632a36a355a481a5ef29a2a28ca4c3a52329f0a28ca5dba6592822a4c2a5dba77a270da4a4a6cfa851269ba3b8a600a9392558a353a6cda89724e6a2d8a55aa8b72347a28aa5f1a79c22cfa133a5b4a7dd2170a1f5a46ea7f42016a1c1a42ca75820c2a062a4d6a68d1f7ea019a470a6051f18a02ba3aba5081f5f9f31a139a4051f4d9e769ce7a0af1f689dc196599ce71e7b9b7a98d69cd61c019c9a9ddaa0311afe9a199d61a04c19af9ab39cb6a0361740994698e89e1b17ae98e40ee6938715e193b61aba1a8a151a109e1ef41e9015c2100320ba1fec131509471f9d1e8910248d461c5d1bae0fe78f9017d8146111a790ca13ab87b612ba924f8b6b9580134294af95d199c212cd941f987c9b45125295e798159cc3113195b798c89b4911ee949798289bdc1075943998869a6b113894c197019afc10d09350976c99ae10fd92df9611995f102992979694981c108b9106966398e00f7b911296f3976510e590089643985b0f519092947d966f0c519092947d966f0c000032195f1a2314000032195f1a2314fc9f4fa3a6a48f2614a029a252a48a2743a0c799aa9d6c26ee9cc41d651e1f28bb9d8998b496eb2a99a010a1a9a2bf2b69a157a197a4942b45a31da27ca48a2b75a3bda33ba5942be6a23aa461a5062ba6a2fda314a5d52ad6a267a3bca4562a57a35fa343a5912910a4b7a460a6dd288ba433a62ba811286ba4b7a6a4a8f02614a4cba6cca8c225f1a38fa682a8032569a323a674a8572435a3aaa516a86e23e4a26ca5eba7912241a24ba598a78f217ea10fa516a7092109a1c4a4a8a62320aca07aa48ea6451f9ca041a427a6e21dc9a01ba4c4a59d1cd29f4ba263a6011da39d9297009d971d229427205120a81dfa9c6499fb9c1e1b1b9e1fa0d1a23a154b9c2ba0a9a39013df9b099fe6a22918569aca9b839e9519af97f0910d9a7018a1093c1e8d1c3311b4154a216f21190bc9169121e6211f8b8b15dd200f219c8a6f0b081d941c6d09ef94ea11d38ed30ef397c1949598d310bc974c98f39a8f11a6962d99399c35121e96ac995a9cf712bc95b299639c8b12729585992e9c06124e952199b79b941219950d99539b3f12d594ac98fd9af4115b9470987c9ab711cd930898e399301169936a9769990910d1923d974099680ed9924c972699ad0f0e92a9963099540ea5917595da97c50da5917595da97c50d0000341683185a110000341683185a116ca02fa45fa5b225d2a0b2a4bfa5bf25739f2d9b08a0a025e11fdc298b2b46266e9fa91b241f9422bca12ca42aa50a1f3ca330a5aaa7391ebaa434a7c1a8672589a397a61ea8b42b39a452a5cda63c2c40a26aa46fa54b2acfa0efa1afa3c4294ca18ca125a41629dba26da5c1a7c12798a3e8a68fa87226e4a3bba68ba8a22549a38aa66da8f424d5a234a628a8632477a2cea503a8d72348a2b2a5b4a70b2309a28ca592a79722c3a13da558a7b8218ea114a5fda6172157a1eba4e5a6512005a1aca496a6251ffba07da46ca62d1efba040a416a6cb1cc89ffba35da6ce1b459d85a21ba5761cc81e4a2797282a20cd9c8da3d0a4cb19fb9d40a132a42a18bd9dcca09ba32a183c9c12a0ada22e180e9bf89db2a0f2183e98b593c9988519e90c421f6f1c88167c180124a824330c771baa24bb25080c3c185622ab23ea0af882d71b711ce60fac959893bb98cc13f9974f9a409dd6125c98279bb69d6c1128981e9bb79d25123c97ed9a959daa115096949a0c9d1e11ff95229acb9c5c0fc595cd99a59c200f82959b99719cd10e26954a992b9c930e8794f698c49b1f0e23948998cd9a190fb2934598529a980e6993f497f699680e6493f1977d99140e9d922597a299ba0a8e9111967a98b7108e9111967a98b710960a9b1b051ccc17960a9b1b051ccc17f2a0a4a4bca5722590a065a4d5a5bd25a6a201a765a85727ab25fc2d443089276ea229a73fa865280ba293a5dda63528c8a16da51ba7d92776a1d4a479a6b626e8a16ca4f9a5852599a2b2a4f7a54c1f76a0c1a387a56c1cbda353a3eea47221939f1e993b9d95256ba243a7e6a8652330a258a654a8212370a240a640a8d3227da22fa63ba8e2227da20da638a8a12246a2d1a50ca800222ba290a5d9a79921dfa15da578a7fb2089a116a530a762203aa1eda4d4a6082007a1b3a4a1a60f1feda095a45da6e11ec0a07ea439a65c1e99a040a4f2a5d01d32a0dda39aa5d11c579ee1a2a0a4101cf800568ffc92851094992c9ec9a23196c49c3da1e1a37807719ca8a0f1a2a612bc9cfda0e3a38d13c29c0ea0e5a2b1110c9af09b429e4614f490731b7a1a0b16eb1c6a26fe26e7968a1f3e280a29d08d4d18ba22142406122c93c712fd085e145598099af59c98130d993c9c129e561293982b9c8e9ed4112198049c7e9ea211b797a49b049e191119973a9b699d96109796c59a329dd70e5c96649af69cb10eff952d9ad19c7f0ea395be99a19c680e17954099219c870f9f940199359b1e10409494988d9ab00fc4934a98139a5310d29348989d991d10f392f89788997411e8916d9751993007e8916d97519930070000dd193c1cb8080000dd193c1cb80862a0eaa3cfa41024fea2caa462a69225ba9df4a062a2d222890d6a82c38b941d44a0d1a416a66f2591a148a611a81127a4a151a609a83927b3a156a625a8692792a138a61aa8532769a1dda501a82027f5a066a56da771265ca089a467a60124309d7ba133a48407cda1caa485a6281dd5a2e5a5dda7ba204ea2bfa5e3a7422156a2b4a5e2a7ec204aa291a5c5a7b7202ba25da58ba77f20dfa128a554a73b207fa1fda413a7821f41a1caa4cda6521fe4a0a1a48ba6681eb6a06fa447a6e01d8ea03da414a6581d92a007a4cda52c1d7ca0dda3aea5be1c86a07ea393a5651cf29ff1a21fa5191c019d17a10ba3051a819bfb9fb6a12c18389c2fa05ca2eb15609c3aa001a3cf116d9c76a031a30a0d499c55a065a351100f9c5ca0c1a29e15b8999f9e53a15c163e1a5f25dd255b0e3f24be2cfd2dda91dd98019bf29c1e19749a289d46a0a3153a9a419de49f2514a798149d629f6e12c098c99c2b9f3f1257988b9cdf9ee610f7973e9ca29eba107797df9b239e751133978d9bc69d3c11c496f69a529ded105a966a9ae99ca510b795c2997b9c170f35955499229cb00e0395dc987c9bbf0f0e95a898de9a490fcc946898889a3210bc945898199a0310b1945b98249ae8110f937597b699860e0f937597b699860e000057172819400c000057172819400cc89e99a3c8a47823b39fcda24aa4ef23489ce7a06da21f22f39d10a1fca26c2249a069a4baa5dd243aa14da5eca69b2568a1eca5a6a73326e6a14ea637a89c262ba291a662a8bf26a9a2ada682a8d82606a346a635a8452612a205a57ea649258b9f08a48fa5452430a038a459a6a821e9a0d1a40aa792206ea12ba54ea75f2097a124a524a726207fa1f3a4eaa61e205fa1efa4e3a67b1f24a1cca4c1a6121ff5a0c2a4b3a64b1ec6a09ba486a6dc1d95a06fa473a6171d67a039a42fa69c1c36a005a4e5a5741c00a09ea3aaa5471c709f25a351a5121c259fb7a2dda4ac1b779e1fa25da4171bc89d61a1c4a37419529df4a027a39618be9c94a0cea2e717389c5ba091a204162f9c36a064a214153e9c3ba04da214154e9c2ca033a2ff14c69c08a0aea1461486999a9d8ea07f12f70dfa10d3127689c395659b289f6693549a399d63a0560a9a99379de39fbd11c998eb9c799f9e118598cb9c349f83113b986b9cd19e67112098319c3c9e211194979b9b8b9dbc10d696009bfa9c56103e967a9a7c9c1110cb95149a459cea0f69959d99119cb20f10955199039c990fe2942299769b600fca94ef98539bec0dc794b598fd9a110fef94b898b89acb0ea6944f98169aa10fc6938f971f99eb0ec6938f971f99eb0e0000ca163119a10d0000ca163119a10d629f2fa26da3f921a39dcaa24da4d822179df7a1b3a33722e89e64a241a4bf2260a04fa4c2a5592498a009a5aea6f324eba07fa545a7352563a1e3a5c4a77d25c4a10ca6faa78625baa125a610a8702518a1cfa5a3a712256ca042a5f1a6942471a0d9a45da6f923dda0b3a42ba6d52277a1d1a47ea6a42135a1c2a4bba68c2074a1c1a48ea603201aa1b0a47ca63c1fc3a087a471a67c1e9da079a43da6061e8ca069a426a6991d7fa03da4e8a5751d4fa027a4c5a5011d23a009a49ea58f1cec9fe0a389a52e1ca39fa0a366a5141c2c9f54a32ba5561bba9e07a300a5181b249e56a28ba48a1a8c9d97a1f7a3f418e49cf5a02da31a187d9caaa0d3a2cd172f9c5ca079a2b816c39b2fa05da20d155c9b0aa03fa23214529be09f28a22314c29a529f62a21914679a5f9e32a17013a796c599e69acb11b191ea96e998460f6998109cb79e2f83b3995b9d48a068923199459d41a02884ee980f9d2aa022047d98b19cb29f00042598569ce79eaa099997049c719e8f0c8997a99be99d130e27973b9ba99d3b0cc896e89a5a9d140c7696959a1e9df20b0496269aa39c3e0d1e959b99339cd90cbe943c99d69b860c6494e0986a9b3f0a7994da982b9b0a0a6794b098659b5207159487987c9a410f159487987c9a410f00000000000000000000ca163119a10d629f2fa26da3f921a39dcaa24da4d822179df7a1b3a33722e89e64a241a4bf2260a04fa4c2a5592498a009a5aea6f324eba07fa545a7352563a1e3a5c4a77d25c4a10ca6faa78625baa125a610a8702518a1cfa5a3a712256ca042a5f1a6942471a0d9a45da6f923dda0b3a42ba6d52277a1d1a47ea6a42135a1c2a4bba68c2074a1c1a48ea603201aa1b0a47ca63c1fc3a087a471a67c1e9da079a43da6061e8ca069a426a6991d7fa03da4e8a5751d4fa027a4c5a5011d23a009a49ea58f1cec9fe0a389a52e1ca39fa0a366a5141c2c9f54a32ba5561bba9e07a300a5181b249e56a28ba48a1a8c9d97a1f7a3f418e49cf5a02da31a187d9caaa0d3a2cd172f9c5ca079a2b816c39b2fa05da20d155c9b0aa03fa23214529be09f28a22314c29a529f62a21914679a5f9e32a17013a796c599e69acb11b191ea96e998460f6998109cb79e2f83b3995b9d48a068923199459d41a02884ee980f9d2aa022047d98b19cb29f00042598569ce79eaa099997049c719e8f0c8997a99be99d130e27973b9ba99d3b0cc896e89a5a9d140c7696959a1e9df20b0496269aa39c3e0d1e959b99339cd90cbe943c99d69b860c6494e0986a9b3f0a7994da982b9b0a0a6794b098659b5207159487987c9a410f00000000000000000000000000000000320feb12a708e722f01f10233624f028aa20af24c925bd29ee219825b226c02ade219a25b2266f2ba022e925ca26eb2b562364265727232c04249f2644273d2c5724b3263e272f2cc2240627dd27082ca123d4259326e52abc221f253f26542ac69ffaace0ad452bf9a3bbaca4ae112a7d184e9c90a0b429a1213824ac25032813206223f824e025c71e9d22da243425971e992268241825cd1c05221e24f624c099bba4dfa5002869a608aed7af702016179919d218c8951c1aa7203322611d8a19051fc820091c5c19b51f282164148e1801204e21ed0ab7150a1ea820c29c43116415951aeda3a89af5a4aea61ca2aa19e3204122219d10195e1f4a215093131a2720d521268e5419f11f5b21b407bb1905203b2171124419a41feb20c813cf18fc1e982045135d18761e3720d2121b18fa1d03207d129d17aa1d811f36124117671d291fee11fd161b1ddf1eb111aa16f41c791e7b110d169e1c371e4311df15731cef1d0611cc152f1c911de7115215d21b3c1da7102015811b0f1d7f11bc140f1bbb1c46117a14ef1a8c1c10113214851a511cee108d13271ae01b8010f7126519f91a18109c12dc18a11afd0f1112b2186e1a9510e9118318f4195c100a125518bd19161052113818d519740da91221187919420e0000000000000000320feb12a708e722320feb12a708e722f01f10233624f028aa20af24c925bd29ee219825b226c02ade219a25b2266f2ba022e925ca26eb2b562364265727232c04249f2644273d2c5724b3263e272f2cc2240627dd27082ca123d4259326e52abc221f253f26542ac69ffaace0ad452bf9a3bbaca4ae112a7d184e9c90a0b429a1213824ac25032813206223f824e025c71e9d22da243425971e992268241825cd1c05221e24f624c099bba4dfa5002869a608aed7af702016179919d218c8951c1aa7203322611d8a19051fc820091c5c19b51f282164148e1801204e21ed0ab7150a1ea820c29c43116415951aeda3a89af5a4aea61ca2aa19e3204122219d10195e1f4a215093131a2720d521268e5419f11f5b21b407bb1905203b2171124419a41feb20c813cf18fc1e982045135d18761e3720d2121b18fa1d03207d129d17aa1d811f36124117671d291fee11fd161b1ddf1eb111aa16f41c791e7b110d169e1c371e4311df15731cef1d0611cc152f1c911de7115215d21b3c1da7102015811b0f1d7f11bc140f1bbb1c46117a14ef1a8c1c10113214851a511cee108d13271ae01b8010f7126519f91a18109c12dc18a11afd0f1112b2186e1a9510e9118318f4195c100a125518bd19161052113818d519740da91221187919420ea91221187919420ec210298f9697a422c210298f9697a422dd1c9e1ed021682a801e1223ed23c12bea1ddd23cc24662c411f38241425b82c2a20cf24b625fc2c5c2037254e26f32c8d209d25f526e92c642174257b26f02c112030256b26a62ca81d5b21a9222a2c5c938aa303a5b72a4ca0cca96cabb12a37a158aa20aca02a439d4fa65aa8492a450a058fa496c628c818421f8d205f2804193820d2203b270b18621c6e1e2f271795dd9f15a12c2646a029a994aa5c2586a282abecac401d669de3a665a818a3479285a008a276a4d8943e9ec7a0eba54b930d9d4b9fb3a40c901f9c589d11a6d996f0a049a2ffa6d49a14a412a510a7a49a6da491a591a58b84df9beb9ccf9f1515a9194d1a1398d117a41dcb1ee1945c18d11e822097946918d21e9d20078f6218851e1820b20d1918531ef11f5a10cf17301efa1ff6118917031eb51f34133017a91d4e1f4f11f0165c1de51e7312e316091d751e6113d616c61c0e1eec128f16631ccf1da4123c162a1c8c1d7e13a815091c561d19122115871bf51cd1119314361bb71c88116514b01a4f1c32112514351a011cb511df13da19621b94104d1344199f1a39102512bb180e1af50f741125188619b70f1711cf174419370e0e1159170819250e4c111c17d518700cc0103e160c183f0e0d0fcb1419167a0c0d0fcb1419167a0c6511cf19cb1977226511cf19cb1977220a190b20ea20ff2a3819b2202022142c09193421de220c2de11a1d225c23432d4d1a5c22ee22632d4d1aeb22c323782d60183323a324df2d4b19e2223824712d67188121ad22f62c80966017f911b62cee9d88a262a4e72b20a1a7a708a97f2bc9a015a79ba8432bf79ed9a47da6652a559d57a1a6a39229b299219dae9fa728fa98b39d0e9e0f28b89987a04da11c27ef9c46a48aa51c2617a0e0a717a96123eea0fca831aae5108d9ff4a709a9609f919d77a5f9a657a2f29c4da498a52aa47d9c99a4baa56ea4b99cd5a431a6faa4949cd6a426a689a4059c38a475a57aa2869965a238a44ea06f955f9fdea0499dc6038c921c98c49b79150d1ce01c119951168c1da41ec494c216771d8f1e538fee16761dca1e42084917c51d4e1ff10d3f17d41d3d1fbf10d416981dff1e38128716421db71ec91129160a1d711eeb12d215bb1c331ee7137b15991cd21d6d130c15571c9b1d1b14ca141f1c431d72149b14901bd21c441357141c1b8b1cd8125114b91a491c75122814341a0b1c19121114f2197b1bea10a3139c19301bb80fca121819981a4e0f3f129818f919d30ed51128188819870e2b118b171119680eed106017be18350ea810b316c718a50f851023176d18e4023c10a4151117480a3c10a4151117480a00000d059e05df8100000d059e05df81df93d81bc71c1c2b9596c91ba81d872c8596081d0c1e1f2df798921c781d952dd69a931beb1d4a2e8799c61bb91c332e139cd51bd01a162eba9c181c101bf62d2d9e339a779b8c2d4a9f05a0bda11e2d79a0b8a3cca4c02cf0a160a5a6a6092c1ba204a67ea7c72b57a2b8a440a60e2b63a08aa3b7a4192a029fc5a27da4da28fd9edca21ba42d28a99e3ea39da49326999f2aa5a6a6f4245fa0e1a67ca8af2357a083a7c2a8432036a010a774a86290959f68a621a8d29edb9ed6a54ba7b2a0ff9d55a531a7d6a2c89d2aa5c3a639a26d9da7a4faa5e6a0959c79a314a58b9ee0998fa1b2a3579d6596859e9fa0499b7f8f7c9656995e98ba0ed016fb1546944f13ce1a831a98905a14031ca11c7d893515c31c921dd188b415171d041e4808c615521d5b1efa07e7157d1db31ea50dc215441d8c1e530dcc15f21c5c1e2c108115a71c061ee70f3a15651ca61d3011f014291c541d4a12c114fb1b061def11a314a71bd61cb6117414111b9d1c3c104b14b81a691c0c100114541a051ca30f5813c719901b9d10a81274190e1b4e100812e418201abd0f18114f184e19f10e69106c17c718ed0f0b10d11660188d0fa10f9d1610184b0f540fea155c17e30ef30ebe15c1172b110110dd15c61767120110dd15c617671200009601a201a28100009601a201a2819799f90d4c8f782b0d9c588f6110072d7c9c7c8f9210892d609d2296f090bf2df19dae9669914d2e159fd299a291772e1f9fbb9050986d2e0fa141975c98512e3da0429cc49ef82d79a04da1cda18f2df9a1b4a365a41e2d77a2eaa413a68e2c86a22ca569a6e22b2fa2eca42fa6ef2a1aa15fa479a5de2996a072a4eca517293ea0bba4b6a52c2876a0caa400a68e2698a07ba529a7ff24ffa051a646a81a23efa0b7a689a8aa1f9ba0ada66da8fc181ea040a612a8d595d59fd4a5dda72a9d439f63a542a7b39e6d9edda487a60b9f8e9d4ba4d1a57d9ec79c61a3fea4f49d2a9b4ca1e1a3d39ca698429f98a1769b7095be9bee9ea699dd905a897f967f962f8a5b151614e790b209f517da17b689880f9419111a1b099012f11a771bc70800141a1cc11c59087414351cff1ccc076f144f1c201d780d9514341c431d280d58141d1cec1c05105b14c91ba91c9b0ffc13381b651c4f0cd813d41a261cc50e3413741ad71b670eff125b1aa91b3410c812161a921b001069129319101bcc1019124d19b91a1a0fa211d418251abf0efa1061189819640e1c10ac17f018910fac0fc0168b18f60e420f48160918c20ee70e0216fe17b20e040fe815cf178a0e190e3015cd16470e7e0d26144215bc0d7e0d26144215bc0d0000a4004b060c880000a4004b060c88559789151c1495288e9d6b954890a62c3ca0919aab99352d86a0669b5f9ce32ddaa01d9dd09c7d2e5ba1749e7d9eb72e3fa28ba0d5a08d2e16a33da1eea0962ef3a15aa19ca2452ed2a104a2b2a2f62d48a23da321a48f2d98a221a429a5d42cbca20ca561a6252cb1a27ea5eaa62d2b2ea25ca5c0a6ae29eca166a50ea7f02804a25ba501a71928f4a1aba501a7b82616a20ca6c7a79925e0a11ba618a84a246ba113a633a84522f0a0fda50ca81b2058a0a3a5aaa71e1c04a01ea5efa61f15209f99a43fa6588e0b9e04a477a56897589d43a3c4a4db988a9c0aa22da4e699da9a42a05ca297994198279d12a0db9704967a99b59cf4940e925f8953968594048d5f14c30a1291a9837117e813bf901e0cd318e4174e90ee0e2f1a091a15897611021bb21b8f888712be1b4f1c2e08e812dd1b441ccc072513811b781c55077a13671b741c350d8613441b431ca7064213f51a3e1cbc0c0813ec1a0d1c850c9312461adb1bfc0e3912e9195b1b8a0ee5118b19c11a34107f112d19431acc0f2c11a318c919340fcd1041182019ad0e16109a17c9183c0e7e0fc7164d18e00dca0e1916bb17220faf0d33158f1620104c0db114cf159410de0c44146c1545108f0c04134214bb10bc09f010b5119c0ebc09f010b5119c0e469627081e10e420469627081e10e420319d11934994c728d59e4e9a8b9b7b2c9ea04f9d499d532d61a1db9e099fcc2d40a226a065a04d2e70a35ca056a1a02e9da3ada138a2b92e9da391a200a4b72e4ba43da364a3772ea4a32ba4dea4e52d42a4a9a4e5a55e2d19a4c9a49ea5aa2c81a406a516a60b2ca3a44ba5c3a6d82af0a3a6a5fda6d229c1a2d2a501a83729b4a2aba518a71a28a2a2b4a544a7bc261aa293a573a76f2598a1a9a5a3a73e244ba197a5d9a75322e7a095a5d2a74f20aea094a59aa7bb1d82a06ba56ca7061a0fa008a5efa6f814e79e8ba472a6280e319e04a4bda53d94a89dd8a2eca475966d9c1aa1d3a3e895e699c09e6fa16c973a98619cf79eb996f995ea98529c5d966d929c8fe2983796c88c4314e28a4d949d03bf189815fd93c60d311aeb192e905210841baf1beb88e410db1b5e1c8208e511ac1b5a1c38082412de1b521cec0d2f12571b481c8e0d3612211bf01b260d94115a1a681bcd0c9c11f319e41a720f3d115219741ae210ed101119c0199b109c10bc18691991114810471816193b110e100d18ca18aa0fec0e3c1784183a0fab0ed8160118cc0e160e31163017190e270d30156516fb0e490ca714b515a00e3b0c8d144c15940e8a0bd5132815650ecc0b1213b014a40f7b0b8d122b1404107b0b8d122b1404105d967a082313e9205d967a082313e920ad9d40985a941f290fa00d9cdd9cb22c3ca1e89e3d9f302d6aa27aa0b6a0d92da1a3dca167a25b2e2aa480a277a2572e1ca45ca37ea38e2e03a423a4bea4af2e25a4a7a3b6a4432ed2a4b7a46ea5d92d47a534a5b7a54d2da0a552a545a6ca2ce7a5aaa5b8a6442cd2a4a9a504a76d2b2ca59ca54ea7242a4ba5cca55ba7d42880a4c4a5cca7cc27e8a29ca53aa7b32619a251a523a7a225c0a161a539a7c62470a12aa53aa7d12320a117a525a7ac21e6a0f8a4fda64f1f95a0a7a498a6771c4da07fa47ba6bd17b29f07a430a6e90d0b9f21a3d5a54f94e59d5ba223a50b94aa9cdca0baa30e963c9be59ee0a1a697f099569dd3a037950f994f9c04a0de945c97bc98159d6b94c194e69149991094ae91700e4e959493d68b6f15c389339381088918ca141b90ed0c94191518888fdd0ee219d918908857102d1a0a1a33888c100d1a851abb07d810f9196e1a530d9b109719721afd0cb1103b19ff19bc0f6c100119ad19530f3510c2185c19ea0ef30f87181b19970ee80e1118d6183e0e8c0eb5178b18dd0d260ec516ea17a40f170d39164b170a0fd10cae1596165b0e3c0cfd142916a60f550b1d146b156a10d80ab513a01412100e09141228136e1039099211b612790c330c71120114c10f330c71120114c10fef9a1691e508aa20ef9a1691e508aa20b29ea79b219b24252fa1c59fbca0a32c46a25ea0d2a0242d71a242a1b7a19a2d7ba334a23ea21e2e6aa410a33fa36e2ec0a4fba336a4a42ef5a41ca45ea4c92edea4fea33da4502e19a5d8a449a5c92dc1a445a598a64d2d57a40ca553a6a92c8ca319a598a61a2c9ea3fea4caa6de2a0ba481a57ba79229eba375a5c6a7c428f5a322a61aa8ed2783a3e9a508a87b260aa3b8a506a8922572a286a577a77a24e2a118a55ea7422370a1e6a421a72c2215a1b9a4bba6c320b2a05ba447a6fa1d4da02ea40fa6ed1ac19f66a361a51b19de9e69a2d4a41114ee9d94a130a4e00ce99c7fa0eea2870cbe9b309fb5a15f12439a5c9da6a008122d99f89bd09ea311929732982b9c44110a951c8f6698cc10a59271116893721092909614ce895a102a8c2b18db14291027032619fc175f0f17082019ae189a0e640c2919e4182711490d2d190e19d010e90d231934198610600ed9184e193e10060e8518f218e80f9d0d3a18a0182d11600dfa175018d4101d0df916091885102f0c791672172c10140c19166a16cf0fc90b4015f4152d0de709cf147f15b10e11091b149c14250e31071913df13cd0da1066f11b112820d1908bd11bc115a0d130666106411080d2c08a9107a0ee1826a020a0d1a0ec88a6a020a0d1a0ec88a60953d926391981e60953d926391981e3c9bb899ec99972595a17e9f85a0af2c1ea3b7a04aa11e2d57a3e9a173a2a42d44a463a21fa3252e4ba453a398a38d2e80a487a342a49e2eb2a45ba40ca5962e72a49ea45ca53d2e6ea46da5faa5ef2d6ca4a1a5bfa63c2d6ca4d4a510a78f2c27a4cda505a7e02b2aa4cfa556a7d02a65a415a69da7d1297aa4d1a59aa7e92844a403a601a8462867a4dda518a8e42618a4d0a508a8d425e2a274a5bea7f7244ba24aa5aea7012405a21da572a75322b4a1b5a4dba6d32016a163a468a60f1f83a00ca401a6601ddd9f3ba398a5331a309f96a20aa5a018549e90a152a48a13219d58a0d0a2f512259c259fa6a14e12d29a399d86a0df114599379c839f77118198149a5a9e4211bb9781982b9d9e0afd95f5939f9a3a0ab89264115d93e509d78dac17f91294099c8801193817e00fcf8219199318520fa3021219ac18980ef609f618b918f80d6d0992186018870d120949181e18330dc80a7717bc17e30c900a09178b16280671088a160d16450c9409601590153c050409f2148314390baa084e1443148c0431066513f1135a0aa0053c127c12fc094903e11115119e0c0403d6109011fd0dc8027d1059101e0fe4004c102910ce0eb002240f01108e0ece00b60e6f10c70c7702530a2b072b877702530a2b072b87fb93c391f18d531dfb93c391f18d531de999e997eb986525d3a0799f8ba0822c35a212a1c7a10f2d9ba340a205a3882d28a496a277a3f72d73a456a3c5a34a2e5fa46ea349a44d2e56a406a4b5a43a2e67a4a4a414a5ff2de4a481a58ca69e2d9ba4daa5a0a60e2d38a46ba50da7782c4ba45da5a4a6cd2b0ba47aa54ea7c92a12a4e7a573a7ea2988a3b7a599a70a2994a3c8a59ea711283fa3aba57aa7fd26baa272a588a7ad2552a245a56ca78b240fa22fa56ca71923d1a1eca453a7922139a199a43ba72820f5a02aa4d6a69e1dc9a0d7a36ea6c11b4ca0e1a2b8a5261a669fc0a107a59e18089e27a157a49313119d45a04ea3c60c7a9c1e9f9ca27f8cf79a529d58a12c8cf0986a9a5e9f9b8b219827989c9d2d8b95977b958b9ced0a7296de8e3a996e0acb943c112395df09179353150b9065094e90db16aa0f1b09278d2b183c14d6081b8862183516c50e88828918f7175f0e600238183018ed103402ba17a617801007027a165416100de80111163d15d60cd3012c152314860fa6015114c713120f8001ec13cf11750e5f0176124d11e50d49813311880f610d3581af10170f100d858337109c0c9c0caa83970e430cf80d5383540d090c440f4985400dc608280f3a83fc0c0d03560d558ced08760d2811908200051c07a211908200051c07a2111d94ce927192f31c1d94ce927192f31ce79b719ba39c632569a03b9f85a05b2c3ca2caa05aa1092de8a3a5a15da27f2d45a461a24fa3c32d53a498a29da3002e8fa4e9a345a4302ebca453a414a5162eaca4eca470a5ec2d08a57ea526a6ab2dc8a48ba5b2a6322de1a4f3a527a7872c7fa411a6b5a7f12b84a437a6e8a7ca2a37a41ca6fca7bc2940a408a6efa7e928d5a3d7a5daa75028a7a3b1a58ca712277fa361a54ea7f62520a3eca4e5a6d52462a2caa4c1a6a323eca18da4aea6352260a15ca47fa6f220f6a00fa443a6691f95a06fa3f8a5931e5ea0eba25da59c1de19f01a2a9a4951c3a9f28a1c4a3581b7b9ee4a060a3e719609dc99f68a2b5181e9c389e54a1f016769a439c63a0bf141599229a109f8e147698c896fa9c5314bf96be083297cc10dd933316228a220a8991db16e509e5093c91411725108609229083172012e688458e0817fa138f08868c9816de145408348c17166f14e80d9d8b9215f5134e0d258b981466131c10d68a8c137e11d80f988aff11580f580ff48b8f11d50ec910a78b3b10900b6910418b240ebc04eb0dee8a1a0c70048c0da08b8c081484220f968a29089589840efb899e024d892f0ea8897d82408cf30d758962821d8c670f4b89df86ce8b760dd4884f89ef8c580ecc896c8c938ce610cc896c8c938ce6100d92ea900092d5190d92ea900092d519b29b889a7e9b2f251ea1c59f82a07a2c40a217a1bda1e22c8fa2f6a1cca2352dc9a3d1a2eda3972d49a49ca377a4d52d83a41aa4d3a4de2d9ba459a42aa5cb2de5a4e5a4cfa59a2deea463a569a64d2dafa481a5a2a6bb2cbba498a5b7a6562ca4a476a59ca6902b3ea45ba580a66e2a40a47fa5f6a69529b9a4b1a553a7f328d3a42ca637a8372872a4e6a528a8ea2618a4aaa5e2a7ba2573a354a5a0a7932465a216a583a7d02339a2e7a453a747226da179a4d6a627210aa11ea47ca63520c9a0e4a341a6011f7aa02ba3dda5761da59f01a2eaa4891c949ec4a034a4451aa59df19fa9a3cc17089d4e9f24a36415499c059e08a2e811e69a289c95a0a311cc99999a539f53114199a699139e071119981095269cbe1004957b13c89685104a92a0174910491043912818ad14011038906518a2154112768e9718a117de118b8c41180b176c112b8c1f177f15ff12f08c191521146c12978cdd122c10d7112a8d1f11980c5c11ca8cbc10b305fd10858cf40e5b85b0104b8caf0c938b500e9d8c3509ec8dec0d4f8c3003d58fb70acc8bf202718f4004598bca02a0901d041c8ba282058f040aaf8a7882858e970989895182948df90b748a7386fc8cfc0cbb871189d58c370ebe8d108d3491bc0ebe8d108d3491bc0e6e8f7f137c140a1a6e8f7f137c140a1aab9dec9cd99c29287ca0989f34a00d2c8ba118a08ca0952c77a2daa022a2ff2c72a3a2a12ca36b2d0fa4eaa212a4a92d3da493a3d4a4b42d3da415a431a5922d30a484a4d0a5462d30a4eda463a6f42c2fa451a57ca6782c71a4a2a5d3a6f72b8ca4cea571a7ef2a83a429a6c4a70f2a71a42ca6bea72429c5a3e1a5cca77f2832a3e0a596a7d027afa298a56da7902684a28ea5a6a79c252da229a562a78224b8a1dda410a7282366a1c4a4f8a6d2211fa17ca4bfa6f420d9a055a458a61e20a3a01da426a6581f57a043a367a5641e729f0ea279a4931d779e11a1e2a3e01c889d58a001a31f1ce59c879f88a2de190a9cbb9d70a15a182b9bd49cbaa07516259aa49a3a9f6114ff988b96c69c2614249787881999d913f39494137c9079130c94d516c40952103192a117e812e812f89034179d129d12a790c1162d122d1233903616d3139711e78fea141b111b11678f8714ad10ad10fe8e10132a0d4e10888f26105d06f50ffb8f810d768c760c5f8f1404fd8e9805c28ec783f3914a85f78e648cc392eb84648eb58d55949e04c28db48ee3933504cf8d128e0694ae09938d198fa0922f0e618db18e0d93cf0d748c738fae93a90d518c0990af93520bce8a2e9016922a104c89248d4690ee104c89248d4690ee10548dda023084fa14548dda023084fa143a9d9c9cbe9a46274aa0d09e849fd52b0da111a085a05a2c92a1dea011a2cd2ca2a2b8a12fa3312d34a370a20ea4792db0a39ba371a48e2d34a45aa42aa58a2d49a406a505a6402d82a451a5bea6d22c66a476a5a8a6542c56a471a5e2a6a72b62a4c3a555a7d92a9ca404a6b2a7022adaa40ea691a732293ea4cea5c7a75e28a5a3e7a5cea7952773a383a5a0a76826b5a39ea508a8ad25d5a274a598a7c824dda112a544a71e2493a1c6a4d1a6bc2233a198a46aa6dd21fba034a43da6c72099a0baa3cca5112040a0d4a25ea52d1eea9f17a2e0a4f21c559f22a143a4551c299f19a0a0a3351b479e229ff8a1e51af89cce9defa0421a169c659c21a0ea18519aca98669dc0187d997d95d89b6e17b898d291f1998b15d296a70e4a958d131d94fb16d9091f159790f218f51415132f91b6197717c9120d916019281865129e9081187116da1123909e1698136d11f590ca13d007e2102391630e338d11124e91be84a491411365918e8d1f94c0125c919d9033953e12529139922096ce11d39093934a9632106090af934696a30f5690e7922e96ed0e0090f3928b95350e998f98922a956f0f7f8ffb92ed945610648f3a92e1944a108c8fa792b8942710118eb29145941510cc8a2290c2940c83cc8a2290c2940c833c8c22128914420b3c8c22128914420b389d689e379e2c278ea03b9d739ea12b46a1339f059f5a2ce8a18ea003a1ae2ccba2b5a1faa1272d19a335a254a3382da1a3bca3a3a43b2d01a497a4f1a52d2d39a40da5d6a6f82c8ba46da53fa7822cc6a4aba593a7f32b16a536a622a8082b6ea4ffa526a8412a57a43ea63ba8b42946a41ea614a8f528bea3d9a5c6a71d2818a3bca5a4a7d426eca2c7a5e0a7152616a3b8a5dea737252aa390a5a9a77e24f1a265a577a7e2233ca20fa509a7cd22dfa1c4a4d1a6ab21a1a186a480a6ee2015a107a4d8a52f20a4a0e7a22ba5e41e37a0dea178a49a1dd19fc4a0b7a37e1d7b9e589ec7a1e11c0e9dd69b9f9e2b1cd19c619c5f9f2f1a619b389c7c9f9019629bde9b959fcd17049afc9ab59fd515c798a4977d9d1114ed97e313b290b2105992a518561593109d8d9e1a9116d709828b4f1a5616a2090a8d8019ff15fe0f0f8ea818a4163e0faf8dcc17f0156611428ef7166b15ed10be8ef2145e0d4312f090c7844293081027938994a097420ffe929d95dd98b60eae92af95ca982e0ec0923b958298d10d6e924a958498790d1a92de942e98110d8e91879494976e0eb1908a940697a90f5c902c9486961e0f018f42933d964b0d1f8f8d934c950510858d3992b297828b2a8f8b940098358d2a8f8b940098358df48b1614b514460ef48b1614b514460e359d289fce9ebc26afa09d9fb5a03a2bafa0879d649f042cbfa0559dab9e822cfea0769fb5a0d22c76a13ea1b7a2eb2c5ca2bca3eba4cc2c61a3d0a415a6cb2ca5a3b3a5eba6a62cfaa3c8a553a75f2caca3c6a550a7d12b8da37ea5f9a60a2b34a38aa511a71b2aaca340a5eca6672937a48ba550a7b328aea303a60aa8262802a3faa51da8d8261ca306a63ba8dc2501a348a62ca8012556a2fca5eba7532403a287a5a6a79323bea132a567a74e2242a1f8a424a78521dda0bca4d6a68e2070a022a428a6d91fe39ff6a23ea5a41e099fe7a18ca40f1ed99d21a0e8a2791dbe9cbb9c46a15f1c719c409c9ba03b1c279ca59c18a0041be39ac09cb69f6b19d79baf9daea09418b99a289ad29f3917a0985b962f9c94158f96a1116d95c0134d95f71ae416a913ef915b1d141d8310bc8f2f1d4b1dd709e08b651c571b988917881c1bd41826894f8c65182c159988d2901e11d087d08775928f8ba593cc06e29396932298b90c3d95d8975c9a5c0ca99409987e9aa90e6c94dd97f7991e0e3594a297be999a0df4933d97a3993e0d2c9300973d99e10c5f927196a998120e8791ad950e988a0d0c916895d697e10eb790fe9453972210d190e694bc96bc102390be94de96af0ee98f8e94fd97f902e98f8e94fd97f90200004a11d011fd8000004a11d011fd806aa031a36ea4d9278ca246a2a1a4e1283a9f3c9da49ce52a6c9ef98f0a11372c1aa02696c6977e2c25a230a025a0a92c8ca2efa36ca5b02cbba292a430a6902c1ea322a5a2a63d2ce4a338a501a7ef2b5da3d1a47ba6192b13a379a4ffa5542ae1a257a4c7a5d72977a279a4aca54029bba21fa57ea675288aa378a520a78727a5a377a679a8712669a315a70ca92f254da3ada6dda87c24f3a21ca64ba8722354a2aea5f5a75722dfa16ba5b3a7952198a128a56ea7f42045a1dda432a71820e7a079a4daa6921f94a014a46da6041f30a0e5a247a50a1f079f84a023a3011f0a9f7e9b049f041fff9df996b8997f1e639a1c97679a421b7a9b7a9d48a0431abe9ac19ce19f0f1a2b9a789c98a00a17bf983195c09d8e155898ed0ee493e413de92c01abf1ac3100c10a41ef81e600ac610c11fbf1f5b0a240caf1e8b1efb89dd8cf21b281bfb888f90cb1679134508f0910411d290c80de29358902197080d86945796d199820fd6941d98179bea0e2195e5980c9c590e8095f498c99be10d24958f982b9b680de3942c98759ad30ea594a297f3997d0ca69327977599fd0de492d8961499930d7592a1969d98890bd7911c9671983f0b959134960698cb0ce590e2952898c00c6e90b294f49696026e90b294f496960200005c189818f80a00005c189818f80a3ca030a39fa45126b59f1ba1aba3892515a04599569d07259e9d671dc01f8c28479e0e97fc91712cc8a040a0a5a1392bc8a26fa453a6652a69a4a2a532a76b2a1fa489a518a79c2a24a3d2a4e1a55b2a71a2dea3c4a4332a3ca291a233a4082a5ca267a268a4ac29bba2d2a345a5162967a385a53fa72a2819a47fa692a8e126d0a3d4a6b1a8ab2577a37ea690a8c2242ba33ea67ea81524eea2e6a538a8d522dda293a509a8e8212ea257a5a7a71a218ca127a560a7702005a1daa4f1a61e1fa5a09fa49ca6001e8aa062a43ea66e1db7a03da41ca69f1c0ea1f4a279a6f81c389b2c111d98ff1ce09034207020971c209d3f9ccc9e3818b89fa4a06ea25a10059d40a099a38110879b679f10a3c816c599be9c499fdb188e96bb888f955e18ba833f1e631d2b112716742165210b8b3917952148224a912015bc206b2116947d08cf1c2f1cb1925f95ff0cb38eb38efc97ba948b98a687c997a5987c9bdb0cf3964299499cff0e6196b199539c4a0ede95ac992b9c18107a956c99bd9b570f41953399289bca0e1595fe98329b9c0eb294aa98079b740e53948698f19a600e989332987f9a2b0e3b93b697029a120cbe920d9778996c0bc492f5962399e00cd891b196469927088b916f9577974f078b916f9577974f07000026122614f802000026122614f80221a08ea4a4a56825c7a045a47da5ae262ca1289c339ee2253c20e0295f2bef251f98b21e951f5b26d2a13ea7a3a885289ea3b1a833aadb2851a4daa801aa752958a478a88ba9012a49a5fca7ffa8fc29b1a174a2aca33029e99dc00ffa10ac29719fbe985f97c22922a3cba4a9a67f2873a32fa7e0a89626b6a3e2a6aaa87a252aa3c9a678a8ca24c2a287a63ba833246ca209a612a8722334a2bca5dda79922eea194a59ea7b321aea160a568a7172171a12aa52da7462065a1ffa4f7a6051f41a1d2a49da6f21de3a09ca461a6f21ca0a036a4fca5061c1ea02ea471a6b01a4a9cd8a2b3a4d119db144d208121561c24991ca22fa44b17c39c0fa1f1a32f16959dcca0dfa38b14019cd29fb4a27612719aa59d5aa03a179697709100982f1a0184ed1e151ef418bc16e823ee241a0c111baa24ab251d929316d22181235a945c88c71a161cd98f9d957a9553997c08c3976d9a149d8f0702982b9b719d6d0cc797579b929da70ef4960f9b6e9d1e0e2796849ae99c880dcd954b9abc9c310dbd950b9a9f9c140a5d95d7996b9cd0090a955e99419c980976940a99c69b610c2994bc98df9a930dc99356982c9a280d76932898ec99f40c609300986e99ad0cb7926a974a99830ab29163968998260ab29163968998260a0000631a711a17170000631a711a17173aa171a4a0a5ba255da07aa4f4a5aa26aaa255a78aa89c287f247a2c8e2ef22861a2a7a78aa82b2952a2d9a657a8c32802a33ba7b8a82f2900a31aa7c1a8ae287fa358a7d5a8d52834a3e8a645a84627e79d39a11fa333224d9e389ed8a076190d9cff164515b61d54a139a63ba8f31f4ea2efa522a8002285a239a627a8202282a233a63aa8192283a21aa62ba8a2214da2e7a514a84a2111a2a8a5d8a7b720cca181a5a1a760208aa13ba541a79d1f3aa1faa4fca6ee1e20a1cda4aea6f61deaa094a45da6c31dc9a074a428a6381d87a044a408a6c11c62a018a472a5281c709efea2e3a4b31bc38c3996d9970b14359a349fdca1b890109d90a118a4c307469ceda035a3e612a19cc0a018a3c7142b9d0ba0c6a1c8143e9abe9be79f9315ae8f761b5d1b11164f1da126b72712949d1f4c2821292297151777220724f2917b937a07298fc7080d98499ae09cc70c3d991a9c459e1f0caa984c9c879e720e3c98f19b6b9e6d0bc5979b9bfc9dc20a0b974a9b729d260a8896cd9a0f9dd9095a96689af39cd103ee95249acd9cb403a595ba99949c6d090d953999219c0509a094ff98369b3e0d55949498889ae10c17945898209a0b0e26945c98ae99c30d5593f897999938105f927297449954075f9272974499540700000e1bbf1c581000000e1bbf1c581008a042a477a5162429a23ba520a797257e9ddfa176a3d723950be98da491591e60a02fa596a6ce25efa116a79ba80228e7a16ea7bba840283fa295a7eba87b2845a299a7eba8682819a253a7bba84c2867a19da655a8f827bc9fe4a48aa61326c99b07a090a1851c12a08ea250a4111905a243a5f1a6991c2ca2aca5caa7131f1ca297a5b6a7a91f2fa287a5b6a7a91f20a272a583a7441fe6a138a559a7d11e88a10ca5fea6a91e33a1dea4b9a61e1ee1a0b0a48ba63c1d97a07da44ba6c11c71a046a40aa6481c67a00ea4c0a5231c58a0b4a3a6a57b1b57a068a37da55e1b909fbba2efa43c1afe9c2aa107a30c19b29b18a0c2a1ce16389c40a069a26014b89c4fa0eaa22810789c7aa0eba2fe0c999c6aa00da3170d019c69a080a29c130d99fc9d57a188152e1ad1252c2728185224a32cb32d129b21997b9a579d7a1295993a9d62a03b0f009a239de49f6010e298009d739f2210f898d29c2d9faf0d68989d9cdc9e9b0f0a98499c839e430d8b970f9c019eee0e4197939ba89daa0eb996fe9a559d490e4596779aec9cee0dbe95e1997d9c870d4f956e99229c330d1795f698709be60c2095b798d59aee0dd0946a98809ac70db69478981a9acb0e7d9456983a9a00105d921997389a878d5d921997389a878d000023185c190111000023185c190111289fc5a3c7a43324a6a033a397a47424a89ca1a15ea34123b69dc6a19ca3e42292a08da427a6f82474a1dda5bca72d26aea1b7a66aa8d3262ea228a7b1a81f27b0a25ba7d0a82a27f3a295a7f0a84227f7a230a7a1a8c426c7a10fa6afa7f32510a095a43fa68c24e39f25a422a670219fa0aca4baa62d2032a122a51aa7fc1f67a11aa508a78a1f5ca108a5e5a61f1f51a1f4a4c8a6bb1e15a1e4a4c0a6fb1dd6a0c9a4b9a6981da4a0a3a48ea6d11c75a08ea47ca6691c4fa057a438a6e41b28a021a4e9a59c1b0da0d3a3aba54b1b989f55a33aa5ec1a329fc0a2c1a47b1a959e26a24da4f319d89d82a1b9a3f418589df5a00ba36e17dd9ca3a0a5a22e16719c6ca086a22d15449c5ba05ca219134b9c5ca05da21b134a9c28a03ca2f612f79c29a0d6a1fb0f7898ea9c36a0ce0ea10a750f4511a088f995e89a4a9f39945a9aa59da7a0858a7699709de69f310ff398069d6c9f90108d98d59c329f020f2d987f9ca99ed80ee797459c469e910e7b97c69bad9d2d0ede962a9b159d3e0f4696879a7c9c2c0dc095099a389cfa0c5d958e99fe9bd00c00954699ba9bc10cc89404995e9ba30cbe94ef98399b8b0cc094b298d59aa80df694a198949a710d99945898139a440dc393c99754990c10c393c99754990c1000006218cc192e0100006218cc192e017c9e8aa2c1a33d22fb9d10a370a417237f9d75a20ba48d22889f65a3d5a44d2370a0a3a42ca68224b6a06ba51aa717250da1f7a5d9a76f2590a14ea634a8a025dda18ca64aa8bd25e0a18da65ea8a42580a165a630a85e25eda0d9a5aca7d824d0a05aa509a70b24faa0f0a498a6bb223ca1d6a45fa627210ea1c0a47ca63420f4a0baa48aa64b1fc8a094a441a67a1eafa08ba44ba6bb1d8ea07aa431a64c1d77a06ea40da6e91c57a045a4eca5791c3ba02ca4c6a55c1c16a00ba49ba5d71bd39fe4a37fa5111b819fa2a360a5511a069f57a328a590199d9e0ea301a565190d9e62a293a400197d9d99a1f1a30018059df3a027a37416969ca5a0b2a25115329c5ba06da25214bd9b2fa05ca2fe124e9b13a03da25511109be69f2ea24911bb9aa79f4fa23c11479a4a9e00a1f31120978f99509b7a10479296974a995a0d5e98639cdd9e118c6e99779d83a0dd941499379d48a03b8dd0981a9d2ca0368a7298c09cae9fff831f987a9ccd9ec903be972b9c4d9ea1039197e99be89d33095e97649ba59d10090197089b5b9de508b896a49a149dbb082c961c9a8b9c560b459580990c9c0108e59411996d9b81078d94e098429b5607ca94e498189b2b07db94cd98349b6e025a947298199a480f5a947298199a480f000000000000000000006218cc192e017c9e8aa2c1a33d22fb9d10a370a417237f9d75a20ba48d22889f65a3d5a44d2370a0a3a42ca68224b6a06ba51aa717250da1f7a5d9a76f2590a14ea634a8a025dda18ca64aa8bd25e0a18da65ea8a42580a165a630a85e25eda0d9a5aca7d824d0a05aa509a70b24faa0f0a498a6bb223ca1d6a45fa627210ea1c0a47ca63420f4a0baa48aa64b1fc8a094a441a67a1eafa08ba44ba6bb1d8ea07aa431a64c1d77a06ea40da6e91c57a045a4eca5791c3ba02ca4c6a55c1c16a00ba49ba5d71bd39fe4a37fa5111b819fa2a360a5511a069f57a328a590199d9e0ea301a565190d9e62a293a400197d9d99a1f1a30018059df3a027a37416969ca5a0b2a25115329c5ba06da25214bd9b2fa05ca2fe124e9b13a03da25511109be69f2ea24911bb9aa79f4fa23c11479a4a9e00a1f31120978f99509b7a10479296974a995a0d5e98639cdd9e118c6e99779d83a0dd941499379d48a03b8dd0981a9d2ca0368a7298c09cae9fff831f987a9ccd9ec903be972b9c4d9ea1039197e99be89d33095e97649ba59d10090197089b5b9de508b896a49a149dbb082c961c9a8b9c560b459580990c9c0108e59411996d9b81078d94e098429b5607ca94e498189b2b07db94cd98349b6e025a947298199a480f00000000000000000000000000000000058c0190238dde20fb1f22235c24f7286120d22445254a2a0b221c264a27582b7c225f269027222c3123c4260528872cc8230d274028a62cef2333275d28d92c2f241f275c28db2c472465277128a32c1b23af263728072cf021ec25db26c42a23a027ab70acf02ae696e0a4cba629290da216aad2ab732aa5209924f2249d27082023245d258e25e11ef922e724e7247b1e74228c241525f01b4a1ff520412673a669ae07b011285c9ceda445a55c98e31906216722f91da11bea20aa22cc1fb81a3d201e21931c691aa51fdb20331a8e19341f9220e71a6519351fbf20d11b2719021f332157176d0b3497cc97750c201b98205622eb98e319ea1f7b217e98b7193c20c2218e94331900207621c38d6c19f21f2921710d1119881fdb204510b518ed1e82208c113e186c1e2620760f1018fb1df91f2a0fad17b31d7a1fdf0e5c176f1d1c1f8b0e0417141dcb1e3f0eb216e51c901e0a0e2016ac1c261ec90dbb156a1ce91d900dad152f1cb71d610d3515f71b5b1d290dfe14751b0c1dfc0cb1142b1bcd1cbf0c8514d11a781c860c2a14531a4f1c5e0c9013ee19ad1bfa0b02134d19d81a4c0b8212ec18971aec0c2c129e18331ac10cff119818f0198e0c01126618c0194b0c1b1118189119f009b7123d189a19ac090000000000000000058c0190238dde20058c0190238dde20fb1f22235c24f7286120d22445254a2a0b221c264a27582b7c225f269027222c3123c4260528872cc8230d274028a62cef2333275d28d92c2f241f275c28db2c472465277128a32c1b23af263728072cf021ec25db26c42a23a027ab70acf02ae696e0a4cba629290da216aad2ab732aa5209924f2249d27082023245d258e25e11ef922e724e7247b1e74228c241525f01b4a1ff520412673a669ae07b011285c9ceda445a55c98e31906216722f91da11bea20aa22cc1fb81a3d201e21931c691aa51fdb20331a8e19341f9220e71a6519351fbf20d11b2719021f332157176d0b3497cc97750c201b98205622eb98e319ea1f7b217e98b7193c20c2218e94331900207621c38d6c19f21f2921710d1119881fdb204510b518ed1e82208c113e186c1e2620760f1018fb1df91f2a0fad17b31d7a1fdf0e5c176f1d1c1f8b0e0417141dcb1e3f0eb216e51c901e0a0e2016ac1c261ec90dbb156a1ce91d900dad152f1cb71d610d3515f71b5b1d290dfe14751b0c1dfc0cb1142b1bcd1cbf0c8514d11a781c860c2a14531a4f1c5e0c9013ee19ad1bfa0b02134d19d81a4c0b8212ec18971aec0c2c129e18331ac10cff119818f0198e0c01126618c0194b0c1b1118189119f009b7123d189a19ac09b7123d189a19ac0998851a90418e791998851a90418e7919181f3a228422752a0e1f0224dd23382cd61f46246e25fb2c3e200725a125832df6205e255b26e92d0121dd251027fc2d372119265627222e27214026f626c22dac20dc25bb26532dfd1edd237324952c1a13e29d64a0172b3c9ef0a899aa5c2a299e78a842aac429489ed2a812aac22a058b0da0b2a171291018771dcf1d2828561a3c204321a4276a17a019131b73276e9d9ea55ba75b27a8a295abe1ac0e242ea00fa985aa199e0d9885a14da36ba1ae070696069512a26a06b0124a141da08c0fda165818c39f80124818881975a0ea106e166f1960a0a28b9899619a5da160950ea016a164a15c0d1495d8945499f215881b771c9e920518401e18205b976418ed1e942001925d18ce1e9e209e8e2b18671e032071070518401ed81f280d81172d1ee31f35108a17041ea41ff00ff516a11d651f7c0fd216561dff1e160faf160a1d971ead0e8a16c61c391e4e0e3e16681cc91d030ee015291c811db70d5815fb1b3e1d720dfa14821bed1c410d83142d1b941c050d4a14a41a561cc00c2014601a0e1c390e2214d219a51bde0d6d133c19d01a5f0d6c12c318041a070db4112f18c019150b5211e9176b19430831116f1737193e0888112217d5189c07c710c4154b17b50bf50ecd140216e305f50ecd140216e30537836905c705af1a37836905c705af1a931a2720fa202a2b8a1adc20b321952cec1a60210923b32dcc1be62106233a2e721b45228823dc2e7d1c93224324ff2e831c5523be24102f451c68237424ba2e4b1be2227a230d2ec413531faa1d692da8996e9f45a2702cb79e27a60ea81b2c289fb3a530a8a12b099d4ca5f5a6a92a2f9bbfa241a431293899229fd2a0be284a98049ea09f08287e99b5a138a31227069ebaa586a757264ea01aa85ca9f122fa9f77a7b6a8cd19bb9d06a56aa6879c7c9c0ea372a41fa08f9a21a191a294a0019a5ca09aa19aa15699d69f15a10da32598089f0da118a4e196ef9e37a0c6a1a696119ede9f499fa892879bd39cd39c050dbe0f6811a99ba315851c771d2598ad167a1deb1eb994dd16ac1dee1e2992b216a61dd11e46884517bc1d2a1fc607c116bf1d501f920d9316881dde1e3c0d6d163a1dab1e1b104716061d681ea60fc915b61c2e1e04117d15901cc81db11016154e1c8f1da311da14191c381d77129c14881bcc1c1e127b141c1b891cba103b14b01a481c78101414251a0c1c910e0514cd19791b3f0e47136b19111b380cd4120019831a010c3f129218081a9808ef113a1892194e0b5611da171f192f0b04116417d618090bef10e5160e19f70c75104a172e18d59152100e1699182a8852100e1699182a880000c381480247100000c38148024710b194461b631c9e2b7197d21a0d1c1a2d8897981be31d2c2e4b98e619f51caf2e269a761a571d642ff298ba1a901db32f0199e51ac01dc12f7a9a0a1b2a1c712f4a9a32180c19ab2e849b77910699ea2d8a9ec6a15da4ef2c39a1b8a43fa6482c3da0eea498a6b22b21a001a530a6d92a7f9e38a443a5dc29279eb7a3c8a4b328889e52a397a41228a19e07a409a5c4267e9fb4a5f6a6fa2489a0f3a66ea8072323a07da623a81120be9e82a505a715100a9e8fa420a64a9d4b9de7a355a5c4a0a99c6ea3afa49ea1879c69a250a48fa1c69baea193a367a0f19a1aa1a1a27a9e779954a08ba1189ddf95bb9c639eb89c658a3d90b994249ab10e7f1878184f976d12a81a1a1b7a930014071ca71ce492b814781c3d1dfc919115091df11d568eb6154d1d8b1ee687dd157b1dde1e7387c515461d7d1e0a07ce15f01c501e9f069215a41cf41daf0c6315651c9c1d5c0ffd14281c511d2f0cc714f11b0a1def0ba7149d1bda1ca20b7b140e1ba01c470b5114bc1a671c9e041514511a001c830a8a13c419711b0e0ac0124a19f31aa8093412e3180c1a170937114c183b199b0b81107917be18280b1d10dc166318e20abe0fb1161c18b60aed0f3d16c517580aee0ecb15d017be0e760f9d157817fb10760f9d157817fb100000d901ff01fc0a0000d901ff01fc0a77990c150710fe2baa9b0490cb10472d2c9d73962691122e739e059a5298cb2e009f989abf98912f12a0d89cff98db2f27a0009b1a99d02f92a0ff9c2a995f2f60a05c9ebfa0d92e40a08aa089a11e2ecda013a3bca44d2dc7a1f4a48da69e2c6ea155a518a7f42ba0a0dda474a6192b61a0caa420a60b2a98a0f8a42fa6d528c2a0dea446a60328a7a010a5b2a6b226a1a0afa596a71a2506a16ea628a89922eaa057a618a88d1e60a0d9a5d5a7c815d99f2aa519a7a798509fc1a48ba6e19cf49e8aa4a4a5279e139ec9a3dea47e9e189d86a21aa4ef9d6e9c67a12da36d9d959a26a02ca16f9c9598e69dbc9fef9ac4957099149c52983b91d60ff00a3491cd8a9d1749183a8a290a8e1840199a89d70d9719001a0e899711ce1ad21ba388ce13081c991c34885314361c2d1db5875a14521c5b1d4b878d14351c051dd6066d141c1cea1c6b067414bd1ba21c0e0615142b1b891cb1059a13c21a411c570564139d1a041c09051013481ad91bbc040013011a761bc10aa212b619021b590a0f124419ab1a0b0aa611d5181e1ac209f5106c18941977093810ad17d818f308ea0fae1648189b0b5e0ffc151418950b2d0f1d16e1179d08490fb2158d175e0b0e0e6c15ae16da0a0a0e6214cc15450a0a0e6214cc15450a7d0cee0d3c0d82857d0cee0d3c0d8285e693de0f6b09ac218f9d8c95a196862c2ca0e69c8e9c382e00a1a79e809ed12e63a12b9f0b9f7c2fb8a18a9f90a0d62f42a24aa19ca1ef2fd5a27aa1cca1db2f72a23aa28fa3472f12a2f9a13fa38e2ee7a1dca23ca4982d22a230a49ca5ca2c00a242a58ba6292c0ea271a5baa65d2b0fa270a594a6b229f0a154a5b1a6e7281ba283a509a7ef2716a2b3a559a7c526aea1c9a5aea741259aa1e9a5d7a7732344a1e5a5a1a74021aea08aa57ba72d1e38a044a507a77618bb9fc7a451a6a18eb69e32a4b2a5b897da9d06a3d1a41799ff9ccda1b6a32c9acd9bb2a054a2249bd09a31a0eaa1ad9af3982a9d8a9f06990696ca983e9cfe96e991548981948194ed8c5514101138948f895b167f15da931e09da1895180d93160f2d1a831a3492cb10f71a951bbe8e9012b51b4b1c3f8e6e13d51b7e1cd58d2513811b711c788d2813661b681c298d5c134c1b371cef8c7513f51a321c3e8622139f1af51bec85a512371ab61b7b053d12dd193d1b2605cc117919b21a240b5711e5182f1a990a11118a18b519170abe1035181219a90923108817be184b09950faa163818f008bc0ebd158b17bd0b8c0de1147016260d0f0d5e14bd15420eaf0ce2130d152b0fe10bee12de14e80ee308ed106213230ce308ed106213230c148d0f09ae097115148d0f09ae097115e5998b933c948423e39e579c219c9c2c1aa12d9e589e632ec7a18fa0c9a0c42ec7a28aa1eaa1582fa4a3d6a13da2d92f9ba3ada245a3dd2fb4a3d6a221a4aa2f03a47ea317a4442f06a446a438a5a12e57a40fa5c9a5bd2dd8a326a54aa6e92c4aa364a586a6032c13a361a599a6db2aa6a291a5f0a6e529c0a2e3a50aa7de28d0a2f4a57ba7092885a2bba589a770266ea2c2a5a1a7c824eca1cfa57ea7202364a1aea55ea7602105a176a546a79c1fd0a06fa507a7c21c79a016a5d5a6e31915a0afa462a6dd14429f1ba4a0a5198e5b9ef3a2d2a402971b9df1a1b0a36598309c86a05ba2e8979199289e6aa08b983498119c699e46986e964598489c0e9862931689f097f0978d8e7e15c40a9d978183201875150497010c97192d19d59449100f1bac1b2392f510e21b531cb28efa11b41b451c24884512831b791cbc073012521b2b1c3607bd11d01ac11bb606aa11501a431b48065811a919d01ae505f4104619631a250c9b10c718bc19dd0b431077186619680bbf0f3b181519f80a540f0418cf186504c70e1c174e182d049f0ecc160c18ed03aa0d2b162a173509510d3a159316c808d90cc9146116bc0b440ca814e015950bac0bf9134415440b590c1b146915e40c8f0c8913c414890d8f0c8913c414890d02812611e210e31302812611e210e31364984392ea943a222a9f439c019c8b2c1ba1d69e0e9ff92deaa16ca04ba1a92e56a30aa283a2532f12a4f7a2aba39e2f36a4d2a35da4a32f1fa4dfa3d9a4882f57a441a4c8a4042f8ea4d3a483a57c2ec3a454a51da6c52d2ba574a543a6142d33a5bda5b6a64e2cb9a4efa519a75c2b0aa5fca525a7f4294ba43ea6e4a7d828b0a3eca5dba7db277fa292a564a751261ba28ba539a73225d7a151a542a74e2485a143a502a7e4224ca104a5f1a6c820f4a0f2a4a4a6881eafa0a7a46ca6571b5ea049a4dfa59e144c9f5ba386a5cc8d2d9e97a2fea40197d49dcba17ca4bc98c29c97a00ea33498169bad9e6ca1c298289a469da8a087984a993e9c449f38980998b598f89cc897d094e89143994a97b691850e9193d096c18b7b15aa09f594f0028718b914b994ed0c201909183592000fdc194f199791a10fc019ec192e8e9910fb19721abb8def10a0197a1a2587b310a419751aaa8661104319f41925868010ff18a819d7854010c21857198385eb0f421819194385dc0e0c18d318fc048d0eae178c18b1042f0ec416e1175904350d3c164517040af30cb41590166f09550cb1142f16f90d680b1d14ff14980dc409bd133b14270d22088e1122131d0e59079311fd13790c7c0b0912a413600b7c0b0912a413600bf88b450d830a7c13f88b450d830a7c13f89a0e97df97be20efa0119f6a9fac2c0ea260a0aca0a42d38a2e9a033a1752e01a3f4a17da21b2f04a478a38da3682f7fa4c4a351a4732fdea449a4daa4542ff7a482a4bfa4f62efba412a56da57b2ee5a47aa558a6b72d95a466a5c9a6e72c1aa4c6a523a7232c25a4baa53da7d62a64a4f9a5a7a7b3291ba40ea6f2a7b928bda3eca5d8a78f272ba3cfa5daa74126c4a28ca5c3a70d253ca25da53aa70424dda12ba52ba765227fa104a5f9a65e2145a1a8a458a6e81f18a159a447a62f1d93a03ca403a6de1ab49f9da3cea55e17cd9ebaa252a5670d7d9e8ba13ea4c40c529d7fa08fa2788c089ce19e79a1458cd39a569d97a0f10b3199339bb49e660b1198d598939cf88a169623943099628a3a945e08349576906191441358905890078c5817d21422901d03b118fc17ea8818081d19ae186788650c2c19e91822085b0d39199419c307010de4183e194c07a90de2184d19c9063e0d8718ec184d06ec0c37189518de05a70c691747187a051a0df416fd171d051a0c6c165f17b804020c121665167404aa0b341500162c04ce09d6148015d30308091e148b1431099f081613ca13ec089a066811e811ba08ef073c11c41113037b067910b6105808c9078b10e202af90ff035605c98c2d93ff035605c98c2d930b8c38027e8235140b8c38027e823514229a2f947c97d92043a1c89e139f642c7da2c9a04ca1a52d00a37fa199a24b2e04a49da246a3092f7aa49ea34ba4832fdaa444a4d8a4872fcfa49ea44aa5592f9da42da504a6002f87a49ea598a6722e5fa498a58fa6932d45a4dda5e7a6d32ceba3afa513a7fb2be8a3b4a532a7a82a08a4e0a565a7942919a4f6a586a7e6282ea4eaa5d6a70e2832a4d0a5daa7ca26e3a3a4a5caa75225d6a260a569a7722413a245a566a74a23bda127a541a7ad2140a1aca490a68220c6a045a426a63e1e85a0f4a3cea5a01bf99f8ca37fa58f166d9e5aa2f2a488138b9e83a18ca4ee8cac9dbfa03fa3bb8cf29c2da01fa25b8ccd9bf09dc7a0d68bab99cf9b339f6e0be598259aec9d058b3e988498b29c888a45972095b299138a7e94830e5390c489d88fbc17d4148589c18b081930182789398810197118bc88970204198d184988130787182518cc877f098e18531848872d09ed171218dc86ef086717d9167286c90864166c160c869e08f915f7159c85410872158515ca8b73078e141a15348bb80852143b14c48a29066813db12548aa1052e126712f0837505cb11ee11a6030603ca1080111409c20265100d11c60ba00230101310680bae02f70eca0f160b76028e0e6710b5027702240c6d0d3c877702240c6d0d3c87d907a10d8d0f7610d907a10d8d0f76100b98f9913c961b21b3a0ad9fbba0482cc4a1c1a032a18a2d30a3f0a17ca2462e08a4f3a2c6a3e52e53a450a38ba45c2fa3a414a411a5732feca4cca487a5502f19a569a545a6d32e51a53aa6eaa6462edea4cea5dfa66f2d5da495a512a7872c42a4cda5f5a6d82b20a4c6a545a7e22a09a4c8a591a7b6299ea3dca581a7bf28b4a3fda59ca7e02729a3b6a582a747269fa286a591a7012524a25ea56da71924f7a13ca558a72d2294a1eaa439a7ae203ca182a4eba69f1ee9a034a4a6a61e1c0aa108a472a65b1ac4a0daa3f1a5b0183b9f07a35ca56516579db7a19da443132f9de7a0cca3890cf09cf09f17a2558c369b729e75a11792e699459bde9fb8919498da98a99d87942598c396949c3b917396df8e4b99e390939451113895739325925f1565890c904590dc166512ad8f098d731739143d8f1b885b181e16748889821218c91727885a8292171618b0873a02e5169a160b870f02651635169f86f0017b152a155b86ce0196141214ec859b014314931382857701df12ac110a055b8156123711a38450811a11710f4004ba83d80ffe0eff039883160f680e7d098d83b80edd0d300c8a85270de20be20b0d85140dc90b740df2826d0b7208680b9588c5058502680c1d860d851287200c1d860d851287200c4f90138a898c200f4f90138a898c200fb4993496e498cf204fa0c59e3ba0442cd7a159a04ba17d2d7aa3bda16aa2092e41a4b8a2aaa39d2e74a4b3a378a40a2fe1a444a461a5062f1ba5fba43ea6e52e32a58aa582a6752e4ba5afa5bfa61e2e09a5a8a5c1a6572dfba4f9a518a78b2c9ea403a632a7c12b96a416a6b4a76b2a5ea438a605a87b290aa426a6d9a7c02895a3eca59ba7dd2776a3aea53aa7c12649a342a50ba77a25f8a203a5bca6402460a2b8a4a1a6ed22cca181a494a6882160a14da45aa63c20dca001a430a6d11ed4a0e0a3fca5e61da1a078a374a5e21c6c9fc5a2bca4931b889d33a113a4e119779d03a1e0a3a6183c9d55a09aa24117229c7e9efaa0da14829af29b4e9fb7140a9990990a9e5e11ac9807988b9cec0a2897178f60985d8a49940315899089904792be15cd095a9035914617d712d7920e909e161e121e92178efb16e113c18ec88d8f16bf14548e338c0e1649149e879a8b9015cd13ee86048b93144b137b06a48a871369112f06738af6111811d285c68b8a11c40e69057c8b34107e0bfe042b8b1c0eb604b684d38a110c628462845f8b7a080a840a84848aba029289b603d488970253898d03ae897d82428c680381896482c88df5084789d686b88ba308a3884189ca8cd80abf88b28a7d8c9102bf88b28a7d8c91027e91cf8cb18db10d7e91cf8cb18db10d4d9b55986499d621eba02f9ffb9f392c12a2b6a0c7a15c2d7aa21da2eca2cf2db2a325a321a4532e57a462a4c1a4b42eafa4b5a48ba5be2ef8a45da552a68f2e4ea5e9a595a6412e75a557a634a7c62d5ca50aa64ca7342d23a514a64ba79f2ca6a4d7a507a7932b5ea491a516a74a2a65a47fa5fba6682971a4d4a577a7a62853a4d4a598a79827f3a3b7a5bca71e2686a383a57ea7f52412a352a554a71e2451a210a565a74c23eea1e6a419a7df2181a192a4b1a676201fa148a463a6281f29a12aa43fa6aa1deca056a3b6a5b21cd79f76a2daa42f1a039ef8a038a43115769d4da0c4a3360cd59cb79f1fa37392199c3f9e19a2f991d59a639c93a0818bb3998d9a949fed8a4b998a99629e978a449826967f9cb19087956e0ec896068a6e93b0164510b28956926a17a81452894c906318ce16f308748e921881179e08938ca517ec1642082e8c0e176016e20df78c0f1510146b0d998ccb121e10f00c0d8d1411860c860cb08c4b0fa105a1056f8cef0c4c854c052d8c9109888b0605978c7203e38db604568c3b83cf8f76840c8c02836c8f3d844f8bcf828f90148a078ba382c08edb83b38a6087338e8b03768ae286028fac0851894389f58c160b9889878c7e8f220e4e900d8de08b57114e900d8de08b57110a8f5c07ad82b10a0a8f5c07ad82b10a169c14981f9a0b2312a0529e0ea0172c90a123a02da1382d41a2f0a088a1922d88a372a26ea3252e4ea401a44fa4842e8ca462a429a58c2e8fa407a5f4a5632e9fa438a5a0a6032e8da4a4a534a77f2d85a4eaa52ba7da2c9ba420a667a7122caaa439a6f1a7162b8ea434a6eba7f9296ca423a6c3a7102919a4e2a584a7602886a3b8a557a79327eea2a5a571a75426aaa2a5a57ea72b255da24ea561a70924e2a1f6a4f6a67e225ba1b6a4dba62a2129a194a4a9a65320d0a044a46ba6011f7da00da4dca51a1e39a023a34fa5af1dbc9f7ba292a4831d659eb2a112a48a1ca89c9da0eca28d1b329cf59fd4a27818469ca09ed8a1ae16d09ae69c18a06d14ef99009a969e191143996f980e9dda108f97c88e0c99a8100a95a3137890f5091194c615bd09bd0942929d17e5128509d791321794124309b190c1164914e60848903316b8136908e38fe21400130008778faa13a5106e070490d211270dde863c90321061066186e88f9f0a798c798c558f1004e490fd8e908faa89ec91958e118f618cc892298e728eac8d4794b48d7d8eaf8ed093408abf8d098efd93c283748df98e97928403538d8e8e21935b03e28c588fe2923d03de8cef8fea92e982c08b2a901392080f658a2d8d328f4010658a2d8d328f4010a68e018657895709a68e018657895709859a3297ca97ef21b29f169eaf9ea52b79a110a07aa0e32ce7a1e5a074a1542d67a2cea196a2da2d2aa3c9a242a43f2eaca30da4b6a45c2e36a4ffa4e0a54e2e97a47ea5d6a6de2dcda41da6aba7652dcda428a6cea79c2c98a4f4a593a70e2c75a4e5a579a7f62a8aa4dca579a7fd297aa40ca6a6a72b2918a4cca557a74a284ba399a50fa749273ca361a5e8a6162662a38fa584a74f25afa28ba550a7a72404a210a505a7a4237aa1daa4c4a62f2215a198a46aa60921f5a052a443a648208ea0f3a3e7a5711e55a0d8a25ba5211d20a088a217a54d1c3f9fbda1afa4451b679d9b9f35a2961aed9c069e30a1461a2e9cd69d31a114197f9b5c9c919f2018459aef99479d9a178999b297909c8f1539990894ab9ab6108097a70e4695060a3894f9165f10d50993917819c317a5092a91b1195f175c090d9161191b180e099d907d185c16a008c3909d16781345081f91d613bd07bd07dd91b60b5190e706ec91be843093cb0cf191888d1594740c6c91999027951f0cec902e920f96a90bb99079932d960f0b3f907a9323964504cc8fb492fb95bd09f28fd5926c953409a48f84921e95180c908ff492ec94df0b738f3a92d994c10b658fa592b194420d368ed2914294d0101f8b33900993b30a1f8b33900993b30acf118d1621184f93cf118d1621184f939897f99176978221ad9ec69b0f9e192c9ea07c9ca39d202d39a1e19e44a04a2df4a1a7a0eea1b62d8fa2dca120a4e02d5da311a4dea4e82d11a4eea44ea6cf2d72a4aaa539a7812da7a403a6aaa7fb2cbca430a6e6a73b2ce6a464a615a82a2ba4a45fa629a8342a8ca47fa633a894298ba46ba63ea8e5281ca4f6a5d5a7082823a3d5a596a78d2667a3e5a5f8a7e62594a3c9a5dea7f42490a3aea5a7a70d2412a370a57ea7e72250a221a513a7e221e0a1e2a4bfa61e215da17fa442a61220f0a001a4c4a54c1f8da0eea239a5021e6ca0fca197a4341d40a04ba1c0a3851da89edb9ef4a0d31c879ba69a309dc31a439b799ca19fd917309c2f9d15a0db182f9b6c9c0d9ffb15e599699be99f0e14269980967e9de210e29643164a0a4a0a9791c5192d18138aa58da11afb17ce89318d4d1aaa179289868e8819421746891e8eb8189a16cd88f38ed017eb154e08508e3a165815c707c18e4114420d0207ee90c3842c93610662939294a997d6854a932b958a9861056793b8958198f80408932f9578989d8483923195689845040e92c8941298f3038291709478976f09a5902994ed96090919902a947a96b608728f369343960903928ffb925395580b958e319327967a08718e6e94c0987694718e6e94c0987694190d981277137793190d98127713779356981598ba985a1d1aa08e9ec0a0ef2a04a0b39a949d892c8ba0d49c119e2f2dfba02c9f90a0662daca143a1d4a2872d8aa2eaa314a5792d91a341a5a5a63d2de2a333a687a7242d14a445a6f5a7ac2c05a477a619a8102ce1a31ea6c3a73f2b79a3baa55ea7522aaba394a531a76d2915a47ba542a7bc28dda3c2a5aca710280fa3f0a501a8c326dba227a626a8a025bea261a648a8c72469a243a61ca82724e6a1b5a5b4a77723a1a151a55ca719223ba1faa408a74221c7a098a4b1a6472074a039a431a6591fc59feda2ffa4201ee89e7ba101a40a1e669d1ba0afa2cb1c8e9c9b9d15a0da1a199a359a159d53199499fa9c909fc717c99b7a9defa09017109bdb9c6fa0c615599a7799b89d8715b9989997929bf8133396b511a590be13be950d1bb8199410e591281d711d020a0f8e441d931c6390c988a41c9e1af7921c88771b69197594918d53181d15f3936f910011a087ab920a93778b84932d90199483932398e08fd594d997699a658cc49413987e9a54857094e197419ae2844c94a297c89984840b94a097ac993884369310974099e80353927996b0983c096f91ee951198c308f690ac95cf979e0ba990f5944497730bcd902b950d970f0d3a90bf9476962b0d428fe6931c96e30c428fe6931c96e30c00002b1756197a8a00002b1756197a8ada9fa1a3f3a47627a1a0c2a26da4c428729e10991691402cb79f9290dd11e62cb9a0de9bf59c002de3a111a229a3282df5a271a460a61b2d87a30ca62ca8d82ccca319a787a87e2c13a4aba667a8112cdfa3bba59ca7412b56a317a5cca6732ad9a28ca41ea6ea29ada294a4e5a52c29e8a205a5aba68c2839a3a0a534a7a22729a32ea600a839263fa3f8a6bea8102547a3e2a6b9a85724dca242a64ea8fc224aa2dea5f7a72b22dca190a599a75621a3a14ca580a7752063a11ba573a7c91f04a1a1a4fca62f1f9fa003a443a6981e33a0afa2eba48e1e109f46a00ca2f11ef89e719c059f881ee49bef99369eab1db89a938a219795184e9c4b9d1ba00114a29b289d05a01a19279aae9c5ba0f8160c98ef8ee899df1312966516be90e7131f90f81b2f1c610a490ea61e011f688acf107c1f561fc290f0081d1e701e5b93198e021bfc1a1392279124156413568e7192b305ae92ba8d259416946998b98669946896c799f705be941098969a67052d95d6989c9b750b7895f398669bf70a589576981e9b4b0410950c98519ad0039f947b97c4997c03fe93059743994d031893db960899bc089692ae96a6980903be912e967c98ee02b2914e961498c702ee90fc953a982408859085946b96ec0d859085946b96ec0d0000951b4d1c278e0000951b4d1c278e199f38a109a20725ae9fe69fb1a18923339d9899259bf49df99e301d2d209d2a7e9f2d9a87983c2d99a2d3a2d3a4b32cf4a33aa7f7a8422cd2a42fa847a9672ccfa4cda8d0a9192c80a436a80ea9fe2a1ba45ca609a8172ac4a269a457a5af293aa23fa249a4532913a283a279a415291ca26ca4cfa58328aea21fa684a82a2713a3aba694a85225f3a27ca677a84524d6a259a67fa84a23e2a214a65ba85f22a8a2cca512a86d2119a286a5b8a7642091a144a584a7931f16a10fa528a7631ec6a0c9a4cda6421d87a0a4a47ba6a71cb1a056a441a6491c3aa1bba2c7a5851c9598281c01184a1cb094bd1d671e7d19909b4b9d01a0d411da9e46a1b0a3ec100a9d2ea0c3a255150e9cdf9f62a2dc16a499959c5e9fea18b3952a14c2105d18c083e21e7b1f2111bf1552219a216494ce169a2175222096af149f2034215897ed02511c2a1c5497aa95e10c7b8edc9423980b96ed989192119800992b9c119059979399759c99858096aa99419cf3040d9691990c9c8b04ac9541997f9b110437951699f69aaa091295f798159b92099e949f98029bad033b947598b69aa40370933498999a94030b93e297489a68039d927697c599210391920b975299e202f891fc961999c4029c913e9544971f079c913e9544971f07000054186018278c000054186018278cb49f30a4bda57626fd9f29a48ba53e27a5a037a0a0a02c284d1f0d29c92a2d2a319a6a16ba1c022b88a222a8f2a8fb2a49a40ca977aad62a46a419a988aaa82a4fa4f8a839aa572a96a4f2a816aaa42917a47fa886a9862989a1c3a41ea63c29029fe11516917b2998a1399d6b9d5729ada228a604a804276da32fa7d2a82d252da3fea69da86f24a9a279a64aa8b4236ca225a61fa8c52251a2eaa5e4a7aa2100a2c0a5a5a70521bca189a56ca731205ca141a531a73f1f46a114a5dca6be1d40a1e2a49aa6b61cfea0b6a467a62b1c2ca040a4e0a5641af49e19a4ffa5e918089d96a361a5b317519d37a25ba40d17be9ab2a119a43514b89c8ba1f8a3be11149dbba012a40f090d9c3a9fada22609229ad59cd29fbf153c97888e15957119288abd1f6720de19ab194b24b0242912841bca249a2527954a157221c322ba97fb8f40199019e39525963196019bd8937197749a4a9d8090fe975b9b7a9dbf85a3979e9ba09d38853f971b9b439dbe044196af9aca9c5104fb95389aaa9c1804bb95039a8c9cfc038095d7995a9cd00327959a99149cad03a1942499bc9b3b094d94d998ea9ad008fc9369983f9a7a087e932e98c499180b8d93f5976d99ad0a7c92389739999202cb91e596b5986402cb91e596b598640200006918471994160000691847199416fca014a4e9a40e26679fc3a48fa63927fca1eba7eaa826294a215a29332cc32ae8a134a85da98f29b7a241a832a94729a2a38ea8e7a9172a5ea4eca831aaff297da423a984aae329bca43da998aa5e29afa261a712a96a27c5a28ea655a82025a69fd89f7ca08a2147a037a5a8a60891ffa128a53da7cb1d2ba356a657a8802190a23da62ea80d2162a216a622a89d2040a2f1a516a85620fba1cda5f0a7aa1fbea199a5a2a70b1f94a15aa565a7691e4aa11aa502a7c51d26a1f2a4cea6371de6a0aea473a6a41cb0a08da42da6261c72a05ea409a60e1c5ca038a495a57b1a689eeba2eca41d199c91cd987f9ad611bf9a58a082a2b28ceb9c76a160a41688a39c30a14ca3fd10d49ca3a0c4a2ba149f9cb39faaa1dd15229bf79baa9e08186089d01c2c1d0d18fa1d3b275c2825945c1f2428db284d9a951472212f2222994594df9112979d937897619a499d9c8c1099309c8a9e2f8cd4984a9caa9eb68b4098119c3f9ed1848897b49be79d7184ec96359b679d11846a96c39a1b9dd88334967d9add9ca189ba950d9ab59c71894e95a499709c4389c9943099129c4c83a194f398459b0503639495988c9a310833945c982b9ac20a40946c98bd99770a8c93fe977599de0d5c922497009964075c922497009964070000961a4c1c9a120000961a4c1c9a127fa05ea494a57924c9a2c6a552a78c265f9e72a3c3a429252e8178944d95dc1e1da004a58aa6c32559a214a854a982288aa27aa89ea9e42813a399a8d9a9152949a3a6a8d9a9e92831a387a8bda9cd287ea243a87fa9812835a116a771a8be27419c89a167a367237f9c30a012a2721c63a0d6a363a56518eca149a54ca7861b26a287a59aa78b1d36a28ca593a75d1e22a278a579a7fa1df9a14aa555a78f1d97a11fa5f9a66e1d3ea1f4a4bca6f31cd4a0aca475a6741c99a07aa439a6501b6da042a4f9a51e1b49a00da4b7a5e81a47a0cda3a0a5261a2aa066a368a55e195d9f8ea2a7a4e718c79c09a1bba2e716bb9b48a0e5a16f143c9c70a083a20a10d89c72a00da3af069b9c86a0eaa2a786c99c86a0dca2b3861e9c2ea071a2f5115c9ca29df8a01618691d10280c29ce1a6023b42b002d0a9fff99289bb39cd68e049a5c9d4ea0af852b9af79cb39f520bd898ef9c709f120bd698bf9c199f7f046998939ccb9e4e0407983d9c6c9e27047997da9beb9ddc091697739b8e9d9c095696df9a1e9d8603f495589ad99c56037295cf99709caf081f9569991f9c720814950499719b010bf294bc98d49a950ac7946b98729a5d0ab2946d98089a460c839456980d9a830dbe92e3963299370cbe92e3963299370c00005e18a6195f1000005e18a6195f10c09ffea3e6a40824d69f6fa49ea5a924e49c65a3c2a48a24c09dd1a249a4042471a1d8a441a6f52403a277a64ba88c2614a294a7e1a833278ba205a827a97627f0a21aa841a9772722a32ba85ca9772713a318a839a9462727a24ca78fa87f2693a06ca557a7e024cf9f4ea435a6ad2146a05aa422a6ef1fe6a0c8a4a6a6271f5ba10ea5e1a6611e6ba108a5d8a6fb1d58a1f2a4bfa69d1d2ca1e7a4b7a6dd1cdda0e3a4b8a6821ca1a0c1a48da6191c6da099a476a6af1a42a062a433a67f1a16a027a4e1a5401afd9fdda392a55f198d9f55a32fa51219359fb9a2b8a4c1188a9e1aa240a45918de9d72a19ca3f816569deca011a39c15db9c93a0aaa25413689c63a07ba28a114c9c5aa054a2da0f449c58a04ba2cf0f499c28a028a2a30fb19c4fa016a25606ef932499b29d9d84fb044f091c0c0b870e98489c459fbb936d9a4d9ee7a001918899649de69f1b04fb98099d4a9ffc0c9c98c39cf19eeb0c6898a09c859ec90c2c98589c3f9e9a09c997f79bcd9d810c21974b9b419d290c8e968b9a949c8908ff95fd99439c4f0897959599019c220828953b99969b0008cb94ea981e9b650ad894d598c19a360ab794a198909a0a0add949b983f9ae109a8945f980c9a140c0994e697749923100994e6977499231000000d19541a988900000d19541a9889dd9d46a365a45b22d69df0a301a5e1231e9ee2a3e6a4ae23d19f46a494a55024a5a005a58ba6c824eba0d4a584a74f254ba17ba61fa89825bca1daa66fa8cf252ca216a799a8d22543a21ba798a8d025f1a1dba672a861257ea18da632a8cd244da10ea6eaa7342432a15aa529a7b622fda00ea5bea6ff20e1a0c4a47fa6731fbfa0b6a474a6961ea7a09ea43ea6691d82a08da445a6aa1c72a07ba42ea6431c4ba06fa40aa6c51b3ba05aa4f0a5f91a23a030a4c7a5ca1a05a010a49aa5f419ac9fe4a374a52f195e9f9ca34ea57418eb9e4ba319a58417999e00a3f2a44b17149e67a28ba4cc16869da6a1eda31c160c9df3a01ea3b614c29ca6a0aea25713629c65a06ba27d11df9b37a051a2b60f6e9b1ba035a28d0cff9a05a02ea2870cc09ac49f63a2760f5b9a5b9ec6a06b0e27985f99689ad60d36931098c099c80a51986a9ca49e6d8d4b993a9d52a04d95b798fe9c33a0bb919b98159d23a02f8f5798c09c899ffb8c14987e9cc89ea989c997309c3a9e9783a297d09bd89d6f034b97579b6e9d4f83ec96ff9a279d3383ae96a19ae29c18833696199a7a9ce50263958199f09b9e02ff9412995f9b7c02c294f0983c9b7002da94eb98ec9a62820095e2980f9b400c759441981c9a0f0d759441981c9a0f0d000000000000000000000d19541a9889dd9d46a365a45b22d69df0a301a5e1231e9ee2a3e6a4ae23d19f46a494a55024a5a005a58ba6c824eba0d4a584a74f254ba17ba61fa89825bca1daa66fa8cf252ca216a799a8d22543a21ba798a8d025f1a1dba672a861257ea18da632a8cd244da10ea6eaa7342432a15aa529a7b622fda00ea5bea6ff20e1a0c4a47fa6731fbfa0b6a474a6961ea7a09ea43ea6691d82a08da445a6aa1c72a07ba42ea6431c4ba06fa40aa6c51b3ba05aa4f0a5f91a23a030a4c7a5ca1a05a010a49aa5f419ac9fe4a374a52f195e9f9ca34ea57418eb9e4ba319a58417999e00a3f2a44b17149e67a28ba4cc16869da6a1eda31c160c9df3a01ea3b614c29ca6a0aea25713629c65a06ba27d11df9b37a051a2b60f6e9b1ba035a28d0cff9a05a02ea2870cc09ac49f63a2760f5b9a5b9ec6a06b0e27985f99689ad60d36931098c099c80a51986a9ca49e6d8d4b993a9d52a04d95b798fe9c33a0bb919b98159d23a02f8f5798c09c899ffb8c14987e9cc89ea989c997309c3a9e9783a297d09bd89d6f034b97579b6e9d4f83ec96ff9a279d3383ae96a19ae29c18833696199a7a9ce50263958199f09b9e02ff9412995f9b7c02c294f0983c9b7002da94eb98ec9a62820095e2980f9b400c759441981c9a0f0d00000000000000000000000000000000f98bdc9d2c9ef3208a1e4f22a2236b29dc2130261727ab2bb122a126fe273e2c942353276b28ae2c3924f427cb28292da5243c2837299c2da62440287129ab2dad24342852295d2d992426281d29112d2b24b727ef28a42cc6233d274928622b429da1a8b3a93d2b421bb7a0649ee9280ea2ebaa6fac762a221a741665117728ce1f4a24be25f325021fba2322252225631d14226b243325c99dfaa7cda8f827d6a52eaebbafa0215b1c0021c8211b1cf51e7522d323af1ffc1e41225e23641e541ed0217622571e681cae20ae21931bae1a1e202121b30a9819dd1f0d2121179518801e67207a159914af156717ef907919911f1d215d0945191b2016211f087f194620a4210e881a1903205b2189074719dd1f0f21560de618691fbe20000d9b18df1e6d20ac0c30185f1e2d20680c0818171ee41f420cc617b21d671f71055217771d071fc00b09171a1dbe1ef504ba16ea1c841ecb041f16a91c1a1e9804c415641cdd1d6a048915401cb21d4a842015de1b531d288aee14841b001df383a1141c1bc11cc1838014b41a631c8e832314301a241c5b838013b619661b1303ec122c19cd1ad4026112d418831a0f080e12a4181a1acf07e5118d18e9194f0ac7116218a9190a0ae410ad1732190607a7122d185a1949820000000000000000f98bdc9d2c9ef320f98bdc9d2c9ef3208a1e4f22a2236b29dc2130261727ab2bb122a126fe273e2c942353276b28ae2c3924f427cb28292da5243c2837299c2da62440287129ab2dad24342852295d2d992426281d29112d2b24b727ef28a42cc6233d274928622b429da1a8b3a93d2b421bb7a0649ee9280ea2ebaa6fac762a221a741665117728ce1f4a24be25f325021fba2322252225631d14226b243325c99dfaa7cda8f827d6a52eaebbafa0215b1c0021c8211b1cf51e7522d323af1ffc1e41225e23641e541ed0217622571e681cae20ae21931bae1a1e202121b30a9819dd1f0d2121179518801e67207a159914af156717ef907919911f1d215d0945191b2016211f087f194620a4210e881a1903205b2189074719dd1f0f21560de618691fbe20000d9b18df1e6d20ac0c30185f1e2d20680c0818171ee41f420cc617b21d671f71055217771d071fc00b09171a1dbe1ef504ba16ea1c841ecb041f16a91c1a1e9804c415641cdd1d6a048915401cb21d4a842015de1b531d288aee14841b001df383a1141c1bc11cc1838014b41a631c8e832314301a241c5b838013b619661b1303ec122c19cd1ad4026112d418831a0f080e12a4181a1acf07e5118d18e9194f0ac7116218a9190a0ae410ad1732190607a7122d185a194982a7122d185a1949820000409549986b1c0000409549986b1c7d1e98218221ef2b0d202d24aa24152d2421e124cc25012eea2070257426c72e9b211f2647273a2f8c22b426f827682f8423c7261428932f7c2276261628122f8321ea259a27512e6720b224a8251e2d241dec1a0919aa2ba999afa73ca9b12ab89be1a7e7a81a2a4d9ec4a824aa242a279a2fa5cca689290717a515d1194a287c1adf1ecc20f1268f89a19e20a04a27c6a089a919abef25eea121ab7eac2a20819c26a56ea6799944886f99af9af00d3015cc18e919418d6717281dc91d4f937017fb1d421e88928a15ca1c031d62970e11491a021c7b97240e2a174e17f59c478b8c970999e19d8c0da7929c91139a4d166a1c3c1e65097118b61e7e200c895818281fbb20a8884e18fe1e9f204a8833188d1e1c206907f417361ef81fcd06d517251ef21f9a06a417031ebf1f47064317a21d4d1fea050017521de41e95059016051d7f1e44055716ba1c1f1ef60401167e1cb11dbb04af15491c741d87044515041c341d54040615be1be51c2d04a714361ba71cf8037c14b01a6c1cc6034e14561a091c4e091214bb19811bef083d132219b81a8b085412b2183a1ae302ba115118e719e882aa11f517c919f1823c1190174d19e08278111517b218a48799107d1550178509c00e8614c515e585c00e8614c515e58500007591a394971c00007591a394971c041ce9203d21602c3e1cf9217122fa2d271ce5210d23002fce1bd521aa23b62f531c522230244530261d6523d3246530fa1d082445254530ce1de123bc240830f31c4d2240241a2f611a981ee720132e770d3a9b2e9eb12c1d9d43a5eca6ec2b8b9efda64ba8282b3e9ed2a641a81f2afd9c9ba4f6a52629a29a02a2d0a381280d999ca0ada1eb27db9b91a365a46d2721a0c1a7fea8fd2509a19ea8c7a9b421ce9fb4a614a8a2162d9d22a477a59495b39a12a083a1b799b495a09aa19dc19a35958c95589a959c4095a998949c0da045960c9a009dd6a0c695389bc39c729ef993069b109c109c2291e2984a993f9adf0d9d142216d1989d15e31c051efe965216a21d2b1fe594d516d01d571f3f92dc168b1d211f4e88e316bc1d0d1fa587c916c31d271f4307b416661dca1ee5068816431d991e7f061c160e1d521e870ccc15b61c1b1e400c77156c1cb51d9e0e0f152b1c831d360ed214f01b301d17108d14811bc41c880d7314211b851c3d0d3714b01a471cf60c1a14201a0b1ca1090d14c919781b5a0959136e19091b5c03ff1203198d1a390351129f18111a1583fc113718e019fc025b11e2174b19df0207116017da18d3027610e116fc18ff0a3f10e2160f18aa919f106216b7181d889f106216b7181d880000f689468a821a0000f689468a821afa94d618e81b692c0f980a17ea1a452ec898dd17e118ab2fe39a40181a191f303f9b9c1870196430779bc918bd199330099af818041dac304598e118f41c5e30e0975b12c419bf2f32998f986593872e569d95a1b9a28b2d319f77a455a5892ca09f85a5e4a6d52b10a098a58da6a72a7b9ff4a423a68629639e99a4b8a5a828139f60a478a52528089fe0a41da6b62618a039a6d0a7fa248fa091a62aa84722fd9fbfa544a7a01eaf9edea41ba6600fac9dafa31ba5d29b8a9c71a161a32b9f459aa79feca1b2a0019b859ef0a0d69fee99999e34a08a9e98999c9e53a0aa9df098d59ebc9f4c9cab95fb9ade9bd29a9f8a9709648b2898a20e181939196c987f11b01ac11b2c950814111cfe1cd294a414721c3a1d2e944415d41cea1d43910616531dc21eeb90f7157f1dd61e908de815531dab1eff86af15041d491e98866f15b71cf11d3c8628156d1cc21dd9850415331c491d8b85ca14fe1b0d1d4c85a814a51bda1c17858f14081b9b1c3e8b5e14a91a5e1cdf8a2c143d1af31b4f849a13b219541bfa8387122b19c41aab83b711a318f2195683291123183c190c0390107c17c018de022a10e8165f18be022310b01640180008021036160a188902440f9d1590177802e80e2c154716d709e80e2c154716d7090000fa814002a5140000fa814002a514499a0410cc10c22c709c12979991572e339e5a9a8b98562f159ff59c419c043040a0759daa9c763071a0c89df79cb0307da0e69d1b9dc130e7a0839f319f7630b2a0609f8ba0013093a05fa056a1da2e1ea171a2cfa3cd2d60a1dea4f1a5e52ce9a080a5eea60b2cefa078a5d3a6ec2a80a191a5f6a6a02931a183a5d5a6c02863a199a5f8a6e727cda0d2a564a77c26baa029a607a8aa24d4a065a649a84222d0a0baa508a8a81e08a049a5c7a6c118c99e5ba4d5a54995119dfca2daa46e9b6a9c8ba122a4009d4e9c17a18aa3439dd29cfba00ba3539d769baaa05da23e9ce19ac79f15a1249bae98399d4d9e8998b59477962298989475918b14321408910a8b65180019288a150a1719f0199789be0d091a971a06899011bf1a1c1ccd8ed213031cfc1c228e6014691c561d96874f14561c471d658d8014391c2d1dc2865e141d1c151d60862b14bc1bcb1c04861f14361b811c3d8cb313c51a641cf38b7813a11a211cfc842a134f1ad61b188bee12fb19bf1bc28a8a12b819131b4584fd115119c31a15847f11d5183a1ae983e5106b18aa19b28378109017c91841830f10a9163b180283c80f2e16211812036a0f2f16f3171a03de0ea5157c17ec82c40d1215dc16b10a470dbc136e15350a470dbc136e15350a8909341caa1c26098909341caa1c2609ac98d419be1ab729829eb4992598912d83a0009f41a04c2f81a1a5a0bfa01230fba109a10ca2553048a24ca176a2a13015a365a2d0a2c0300ea369a2cba28a30d4a23fa298a325304da2aea20ca4152f17a2afa3a8a4ef2d3aa2f0a4a4a5f62c86a2aea516a7332c72a2f9a519a7322b08a2a3a5f5a6ae292ba2c9a53da7962801a2c3a591a79127d4a1aca576a70d266da1d8a5a9a7b32449a1c0a58ba7e72229a1ada599a73c208fa04fa571a7411cb79fd0a47fa61d15dc9d61a32ba5dd94ea9b7fa10da48899329be2a056a3c59a809c92a022a3a79b439b699f8ea1209c949b81a07ba2a19acc99fb9dada03d9ad196d298329c7198ce9251896b94f397a58e57140c1192979f8c67168215829580035b188018d9948f0dc3196d1a49947911131b181ce7932413b81b4a1c4793e512751b3b1cc59222132a1b681c539219131a1b671c03925d13091b631cb6910d13011b5d1cc18fd012af1a1f1c658cab123d1aa61b70853112da192d1ba98bba117219a71abb844c11e1182e1a6584fe108a18b3190d8468100b180f19c38305107c17b81883837c0fa01635184903930eae1523171603600dd3140b166508c80c4a14a915dc0a710cc413fc146e0a3c0c6113d4145c0c970a5611af12f906970a5611af12f9060000e008d5105f160000e008d5105f160f9d26989e8fa82942a0569d859ed72da6a117a046a0f12e3ca201a262a2d12f72a370a2d2a33a303fa4a7a32da483306da4fda363a4ad3034a4e4a3d2a4793008a43da426a5143034a4c0a453a51e2f2ca42da5e8a5122e00a42fa554a6f42c47a36ea5b0a6102cdda293a506a7c12a0aa3a0a520a7632933a3d5a54ea76e28e8a214a6b4a767274fa2d8a5b8a7c22566a2d9a5e0a768245fa2b8a58fa7312205a2c4a58aa706217aa1cea575a7e21e89a024a5cea6c81b449f36a4bfa50818049d0ca22ca4360e479dd99fb4a29994a69d6e9fb5a1ec962c9c4e9f8ba11f99939b02a0b4a1c798269aad9da5a085981d98719b7a9d499898966398a19b0a98839321891d96dd97aa8e801509119e983c891d18df163398ed0b8619cb1923964e10911b341c9b95ee10f21b9c1cd193f611b31b3c1c2291aa118d1b761cd3904d12591b281c7e90b711ca1a0b1cfb8c9911471a291ba58c4f119719b71a5b8cee10fb18481a138c9b10ba18a819c08b40106c185c19588bbb0f2b180d19ed8a580ff717cd18968ab80e131756184e8a690eaf160e18e789060e1b1630173a895e0d4c15a9163b837f0ce51415162383450cb314ee150f033e0c4614a415e9029c0ca31417162d08530d6314df156802530d6314df1568020000a119951a85140000a119951a8514759b7a0eb115bf292ba02c9c569bd42d27a1a49eaf9ed22e3fa208a146a1a92f44a335a279a326302aa468a386a4703060a440a4baa4823046a42fa4a8a4523058a476a46ea5d92f8da410a51fa6f92e8fa48ca54da6232e8ba48ca561a6322daca4cea5cca6522ccda4f7a518a72f2b90a437a6bca7ad296ca316a691a786282ca303a6b0a766279ca28ea576a71a263da28ba54fa7bf24b8a14ca5f8a69423a2a149a5fba6ea2176a13da5aea64d20bca0bfa45fa6c01cd09f21a4bea508184c9d31a24ea41f0e349968a04ea25294069a909f1aa29e98379d2a9f2ba26b99b49b65a098a22d9a199cdb9ea6a18799179ac69c839f5d98cf98299bae9d179801981c98109cb2976d952c8f53975397df91a20e8190c296898d8b152c104296f9028418f915f995130b231997184994f10d7b193019a493f40fcf19cd190f933c10ae19641abc908910b219831a7d90c910b719761a2c906a1055194e1aa48f82100519fb193f8f4f10c718a219188c450f80180c19838ee20e0b18d018728b7f0ea5178e180e8b220eb616ec178e8a370d37164e170884f80c5e159116a003570cb514c5156b03200bf813e1141f03a109e3121e14dd020409ec110b13af0285089011c7129482610b4e11be113002610b4e11be1130020000421866191d120000421866191d12a99eb499a70feb29a7a0169ecf9c9e2db3a1d89feea0c72e0ea2fba057a18c2ff4a219a278a3173068a368a30ca4603040a43ca4b2a47c3078a493a424a54130c3a4d3a46da5d82fd1a4fea412a6ea2ec6a468a596a6002ea4a4a8a5f6a6062d4aa4c2a536a71e2c55a41ea64ea7e22a52a4ffa5a0a79829c8a324a6c8a780284fa3f3a596a74e27d1a2e0a58fa7b42586a2a3a584a78f240ba275a545a79e23b7a13da508a7062294a10fa5b4a6e520f5a0bca462a6e41e11a0eca3b6a51f1c399e51a2c4a40a19489ac0a0f0a210141299cd9f47a2bd8d579d5d9d53a14c931b9c1ba038a2a292e39bb99eb3a13d8c819b0d9dd79f1292c498889ac29d879166970f974e9b28910d9626943299fd93409469086c936c93a490b714c00908950d8c2b18cf14de921a03b018011829921808a7189d186e91470acf18e3182691250ced182819e9900d0df5184b199990b70cdd184d193d90650d8118e118cf8f080dea179318648ca70c6f174618d88e0d0dfd160318b38b0d0c7f166e17228bd60b1f166c16958d830b47150b16418dc309ed149915d789f8083b1495147d8393082f134d14468391067a11a812228312064e11c5119e884e060911781160885b021e0f9e0f2788a782cf81c6879702a782cf81c68797020000de0d170f1b160000de0d170f1b16bf9e32994a95902901a1d59e4da06b2d74a252a08ba1842ed7a287a1baa2122f72a3a9a212a4e12f5fa4e0a3dca43230f7a4f5a4a8a5553011a551a526a6363023a583a5e2a6c62f14a5fca5ffa6d42ea7a4f9a5f8a6f82d6fa4eaa554a7002d52a40fa694a7342c36a4fca58da7cc2a30a4f4a584a7722919a411a6c6a79f28cda3ffa5cca7cc278aa3d1a5a5a74e266aa3b1a586a7d02493a269a51fa7ea23e3a13ba530a76a2280a1e9a4cca6d020e5a064a4ffa5af1e44a0f7a399a5c61cd59e8ca24fa5e018b99b11a028a3530dcd95219f91a10c94c49be99cb6a24197329c639e01a2dc95369b579f6ea29192e29caa9e6fa1d4941d9a519ca89e8291b198e598f79c2f913d98bd979d9bd0905c97af912298829023957611c5095490f88f661889171c90ca8b0d19c018998f548804195618f08e9d028d187918508e07077f189318d0908c063118461880901f09e0170218108dd30857178117bc8ca7084f1601176c8c9208e915d815df8e3408701568155c8e81079c140a15ef8da706d3132b148f8d2906a712ce123c8db7052e125712e18c7205c711de116b89f604bc1069115583b8025a10fd1012039302ad10c210ed029b02e20e8710c902d0008c0e670fb182cf808b054507a98ecf808b054507a98e0000521b491c6f0f0000521b491c6f0f9f9af80d64181a291ba1e79e42a0492df8a1d2a000a2652eeba215a2a8a2322ff2a3aba215a4003040a4cca364a44030dda46ca486a55a303ba582a5e6a519306da513a698a6722f81a54ea642a7c32e3da531a636a7b72da8a4f3a566a7992c71a40ca643a7e12b55a4eea58aa79e2a0da40aa6c6a77929eda317a6f4a79428aea31da6e4a7572706a3c2a55ea79e25b2a292a55ea78f2431a24da51ea7ca22e5a10fa508a7402190a1caa4aea6941fc0a1c8a4a8a6041d2ba1aca45aa6a01abfa105a4d1a5f1160c9e04a1f4a33e143388799cbb9eb2135f0ef89c829f3a0d299c5f9deba0400ca59a8c9e6da1b78b239cdf9f61a2c7917b9a319cbd9fb0940199db989c9d7d945298b2966b9ce5953896e48e1f998395ea934f1167932f95fa915c156b09be943290ce165c127494ff8c6417651532941e88dd173217bf938e820818b0172c934e8277170c18aa922e02d81694162492070254162516bc91e381671511157591c5818114f5133c8f8e0157130912b48e6c81c3128c112b8e54816c112311b58ddf8305115d0f438d9283cf0fce0ed5897883360f7e0c98836083ec0ede0d5a033b835b0deb0b2b03f5842a0dae0b9c08d984880b080de0021f88c30576026107d8899c8bdb8b3f02d8899c8bdb8b3f0200004788fd023b0d00004788fd023b0d659cc19bad9cf028c1a0fe9e7ca07a2d7ea146a05fa1682e60a23da173a2e12ebca36aa267a47f2f8ba48ca3cba414301ba5fda4e0a524303da5a2a5aaa6c12f61a5cca5c4a6092f2fa5eca5dda6652e10a5dda5d5a6832df6a4d0a52aa7bb2cbea424a654a7c02b73a424a6c6a76d2a55a431a6f9a75729dfa304a6b8a78f2881a3cfa570a770271ba3a0a524a72d26e7a23ca5eda6e224a1a200a5aea66c2334a2dda488a6d521baa19ba465a6642074a146a430a6051fe9a017a4cea55c1d07a104a4d4a5861c1e9f2ba29ba4dd1aae98ab9e08a1d7191615ef9a819d8918bb9bf89d29a00418859c879f83a161159e9b7d9e1fa13b11909ac69b249e7511b1985198b59c2b0b71980498049c1291e796da911b99db9326949a13789037953e91bb164e10759645904616ad120296d68f83164114af960e8e1d1617151795cc8db315a414a494288c4b1533148792688b8e15bf130692cb8a89143f130790698a6e135d11aa8f088ceb113f0f14918c8b7e10bf0ebf8e3c8b820e770b398efb8a550cb3041d90998a110c6384ad8fda897c080e84118d608abe02a589b58ccc8898025b89768cc0897e82378c0f8992896482148c43835d89be86918b0703c2883189b48aae02eb899d8a838d7302eb899d8a838d73020000d18f178e39090000d18f178e39095b9c6d9b4b9da1288ea09d9fe0a03c2d50a2d5a00ea2302e8aa2d6a139a3b32e72a39da355a4452f64a469a499a5e62fdca42ca522a6e42f19a5cda5dda6792f46a54ea660a7e72e6fa5b3a6cda7402e63a59ca666a75c2d32a539a6baa7a02cc9a4f9a588a79d2b5ba4f0a546a7452a35a4c4a56aa74f293ea4bea544a72a28e3a36da5f9a6ba263fa372a530a7972545a380a52ca79b2406a334a5eda66e238fa2eba4e1a6642206a2c7a4cba606218aa18aa48aa61e20a2a16ea437a6791e2fa137a4a5a5e91cfa9f18a308a5cf1b939c68a060a2261886184d8c8e9e860d19184d12159ac296629c9d9a849f0396e69a439e38a11794dd9a899c4ea04d91bf99ce99479e32910499f598649dfb9364982c960b9cb39340964d089d9659934f94b3160513059377923818ee15e78f3191e017c0162392f28f21187317e28ecf8d8d17d5164e8e1b8cf4164816cc8de78c09150114578d868dbe12b3118386ff8c0e11790cf785918d3e0f8b05288c3c8de70c37853785ee8c90096d8b6d8b948c7003d98d058b388c3d83ba8f9f8a028c0d83568f498a598bd482fc8efd8c288bfb87868e9889a68a4f87a18f64833f8ac486da8e0c03138a478b488ecb02808a7c8c5c900608668dd28c258f8009668dd28c258f80090000e388bb83aa0c0000e388bb83aa0cad9cb29b839dd328fc9f949e3ca02c2d44a11aa027a1f82d25a216a14ea2712ea1a3c3a23ca4e72e4ea443a4f6a4642fa5a4b1a483a5712fbea45da54ba61b2fd0a4e1a5f6a6972ebfa4fba57ea7eb2dbaa42fa6b9a70a2da1a448a6e1a7282ca6a45aa604a8f72a90a45aa6baa7fb2945a414a6aca7f42827a409a66aa73b280ca4e0a584a7062772a3f8a59ca7f925dea2bea5a2a7c22469a260a570a72223e9a1f6a4eaa67f2161a1aca48ea6222014a186a48fa6581fbea036a419a6ad1d4da0dba3b2a54e1d579fd5a2aea4e51ce19da6a0baa2031d9e980f97c59d8e1c881e51195514f11b9a975a92b8995b162e9ad19c66a06b11959a1b9c32a02911039ae399539d1b110f997c98289cc0109097b1913898230a7f9578116c90e5090c94c6154510b28909939916dc121e90c29133179514da8f9d90c2164514528f399054159a13848ece8fde14ed12ef8d3c90b213a310a390de8fd511260d4a902e90010e5b06f28f6f907004728c30911f901584db90db90b48fb189df91df91e68f298ef1937f91218f3a8f36940e91638e7b8e9593138fab8d428fd5939c8c868de38e7d92538c838dc08f13932a8cde8c3d8fd992d588d38cbe8e2092358b5b8c24901b92b6079f8c89904692430f9f8c89904692430f0000a98b108910090000a98b10891009079b069a469b4b28e99f309fc59ebb2ce1a18aa01ea1952d4ba203a14ea2292e63a2faa183a3932e0ea30fa37ea4392fb3a3e9a310a56e2f18a4f7a4cca5072f72a4c9a533a76d2ee1a475a603a8ba2ddba483a611a8d52ca6a434a6c7a7192c75a4faa590a7de2a76a4dda573a7c52962a409a661a7f22816a4d5a561a7142872a371a5e8a6e8262fa331a5dfa69b252aa364a5f7a6f324a5a256a508a725240ca20ea5b9a6fd2276a1b2a453a6912116a196a437a67a20cba053a40ba6691f9fa008a4d6a5141e9c9f28a31ba5711c3ba093a2cfa4501a699e939e3ca16319e2201e20221e75163721fd217820a3180d9aa598ae9ce416c49a959c819f4d17c39ae09b0b9e2b14cd9904998b9c520a2099f393959a318ae397910e6c937490aa94fe173813389376926f19a5172b9014922d195318a8920891ef1815184792a4907d184716da8eca909e164d133791179164129d07c290c691b70b4f904f90e391bf842a93c78cea91a38fca946c8c5c918b911995158c3b910a92fa958c8b9c903a930b96e78a37905c930c96508a3390a7927b95b889fe8fde926d957983b68f8d9224954b83ad8f0193f5942c83938f4d92d9941a03738faf92b6940403a28e7c923d945e0ba68a708eb2908307a68a708eb290830700004c19e11aec0d00004c19e11aec0dcd991e8d8d146828969e349b9b9cfa2cc09f9e963e98b42d1aa1749dc99e142e93a113a035a1762e4fa20da2e8a3d02e54a3fda338a5bb2e23a437a5a7a6672e66a4eca583a7ec2da3a446a6e3a7462d80a476a615a8622c85a457a6fda7412b68a43fa6fea71c2a58a40ea6b6a7422954a40aa6aba7a4281da4dda575a7b32792a389a561a70f26a4a3bca5cea7752571a3c9a5cea78f243aa3bea5c4a7ac23dda292a5bda7162262a237a541a76121e1a1d8a4aea63e204ca151a4fba5f71ee1a077a35ba5291e6ca0b9a2dba4581d8c9f86a153a40f1d519dce9fb9a2aa1c289636929c9cc21ad6268826fd2418951c96991a6b96c699089b3e9d0fa1c8151b9b899c259f5514a999ba9af29dec100a99e891b99b820a0d956c17d913478a9491601aee188d904d8fad1ab6185890c58ed6198118ee927d8e0c193c188392788f41188816f091ff8ef016cf14698e7c8fc014a812b58d6f90e011230d238df691ec8d5694e38fa4939c942f98468fa59334958498b18ecd9341957998668bbd9335956398a98d309334954c98408a409231950198d4899e9173945c979183c3902b94759656836e902f940a961e83938f339339960483258f0193b795f382458fb593a7960b83428e4994d0987793428e4994d098779300005c151017921400005c1510179214779c7f9d3e9dc7274e9fa39c2b9faf2c4a9e6b904498602dad9f39978d98ee2d11a1a09d909d352e1ea2c4a02fa2712ef1a22fa46fa54a2ec4a380a570a7dd2d0ca47ea625a87b2d2aa419a748a8ef2c0aa4eba655a8362ce0a372a60ea81e2b62a305a6b8a7312a5fa3a9a54ea74e2977a352a518a794283fa343a5bea6af278da291a544a7652654a2d4a5d5a77425a5a25ca61ea88924a2a22ca610a8b22315a2baa59ea79422bfa13aa52aa7942158a1eda4cca6b920c6a08fa44fa6052062a015a490a5de1e779f9da29ca4251ed89d8aa07ca2d91d319c9a9ebca15b1d8d98c40ad79f3a99be266026f22450943d224822c120de93dd9c499c939f31111a9bbb99729f4114b199eb98399cd4109c985295f999c7101b96c811318aa5104694b21b3b1b170aea8f3c1d741d048a408c081dfc1c6293a488a91c001c4296d187e81a3919c296268c3718c11333974491ee10aa8d2396e1926d8b98946e95f39355942b985e94a0943098c79a97927f9440986b9a9c903f94b4972b9a048e2f949697019a958d0594a397a099478a3d9315973099cb8947927c96b1987e837691f095179832833991ab95ca970b039d9032958c976b08a9905e954a974408b88ff0940a97380b058fc092cc944d10058fc092cc944d100000a1175f1c14100000a1175f1c1410b2a08ba4dea5762681a014a4a9a4232bb39d0311fd18902d4a9f0811db189d2dcfa0699c169ff42d16a276a3d3a4202e12a30ea620a8e92d37a4c0a6afa8682d1fa4fda711a9c92c48a420a833a94e2c51a4ada7b1a8ac2b01a46aa615a8842a2da353a5dca68729e8a2bea41fa6d52816a3e9a45ba67a2853a3bea55ca75c2729a3d7a593a7ea25dda2a7a64aa8ff24e7a2f0a68ea8152499a25ca63ba8cd224da2f9a5e9a7c421dda1b8a5c0a7fb20b7a16ba572a7512060a126a536a76a1ff2a0aea4bca6ce1e6ca0b2a39ea5c41eea9f80a26fa49e1e609e4a9f83a1e61def9dbc9e64a0831c4b9d860e888f880f4d2c8f2d772dfba4479d539b58a00d99e599a29d5da01618319a569cde9e11176997a1881697df13b1945c18bf10530a478e901c981c648a260ea41e061f0394cc0fdf1e4f1f8895ef08891dfb1d86961a8e271a4d1a669565921713480eb6948d93408c3696b0926794b994da983890bc9465966699718fda9411982e9a028c9b95d898909b688bd795f7984f9be28aba95a798029b598a0c952698279a92897794bc97a6991e89129454976b99e788769342971999cc88b892d896ec98a3881192539695987d88f99177965898d782ff90e5954a983488ec90ee942d960108ec90ee942d9601080000b81b3d1c12110000b81b3d1c1211b59dc1a00da28f25ec9e049f34a0d026439e5f9c7a9c5c29ff9de91c341eb42d7f9f499a4f92de2d6fa396a442a5c22d24a42ca899a9652d38a42aa86da9f22ca0a4fca83eaa7c2ccba419a947aab02ba0a476a8a2a99c2ac4a36da615a89a2949a207a427a5cd28e8a1d5a10da46728b3a106a280a44b281fa21aa51ca758277aa2aba662a85f2570a252a641a80e2499a258a664a8c122caa21ea64da88b2173a2cca51aa8aa2003a286a5dfa76d1f77a163a5b8a7471e1da12fa583a79e1db7a0e0a430a7fd1caea0d1a400a7791c52a046a4f2a5631c1c9ee19f5ba32a1c42910e1f641f5319319904913b8c59120918d91d091c4e8cdc9cd1a061a3da10f89cf8a0b2a24715af9b7a9f26a11e185699ab9bdc9dea186b95e7179c156918d80cab1f6c202d11c9158c2111222d96e6169c21a422ca984f144c20be200d9a188b081b351ae698369658866693ed9732985597cd99099641984199589c4693b497cf996c9cef8eb296e199359c588bf495b599d59b988a879554994c9bf0893a950f992d9ba589e094f098fb9a7e899994bb98d69a618919945898ad9a41895e9315983d9a1289fe92bd97139af0886b921197cb99b6886c9205976699528bbe91ba96de98bc82d791479528975682d7914795289756820000f91a4a1aa2120000f91a4a1aa212cc9f9ea4e1a56f2705a0d1a44da64f2835a03ea493a54b29e219f32507284b2b749c1f9176127e2c38a360a85aa9082c11a660a912ab042c18a57aa9efaabb2b8ea443a990aa0b2baca42da94baa4b2a94a40ca92eaab72916a300a8fba8db28cfa0aca144a36f28719f12193391f5282ca08f9f7ea168288ea26ca7bea80d257fa366a7bea80524f0a2a4a655a8b02263a256a627a8b42124a204a6e3a7b22000a2c8a5aaa7b81fc2a187a566a78e1e71a14da533a77f1d35a11ea5d4a6721c21a1eda4a1a6d01b28a1e0a46ba6111a51a062a406a60419989e1ea4e0a522182b9ea2a3afa5c416d79dbca37ea5c414ac9c79a281a40e12179d6ea112a4cc0ef59cd6a0fea3c888989bcd9eb3a14b0f6c99ec9b4f9ec4168896bc0e75909219280d6c2088212d198b1aaf243b25220cbf1a822491259c982513e42016225d99b2935816d515dc98c396d496499c30977097bb9a449dbd931498939b5b9dea909c97949b539d5b8e29970f9b269dcd8d5196a29ac39c708aea952f9a879c208a9495fc995f9ce8895a95bd99349caf890c958f990d9ca783a6942899a69b73836094da98d89a2c03f2936898379af8025e930998bf993e083a93b7974c990908c7924e97ef98978217922497cb98228c17922497cb98228c0000181169185f150000181169185f15f19dcda1d8a3a924a9a053a64ba8da2819a137a8a8a99129e39ab29e839ef72c3ba1b6a7dba87a2821a43ba934aad52943a482a9d6aa9f2a89a4a9a930ab682a9ca4c7a923ab202a70a45ba9b7aa522907a4dea858aa6b2819a4bea840aad0261aa32ca855a911246a9f95a433a62c18209e13a24aa41691c9a2eea5d7a7721da4a26ca639a816203ca209a619a8b41f4fa205a60aa8421ff0a1e7a5f7a7491ec0a1aba5ada74b1d70a16ca554a7b71c42a12ca5f9a68d1c0ea1f8a4cda60d1ccaa0caa480a61b1b9fa094a457a6341a76a067a40ea64e193ea022a47ba55a18649da5a15ca40b163195159c649dbf0d3c9cc2a0b2a22790559d98a11da4f08d7a9c09a112a3ec10a99c94a084a2bc14339c629fa3a1fa156c9a059c4b9e3218910e311f00200719251f1728b0285f943c1e49272a28439ddc11012080201e9ba095bc95cd9890950898f99ac09dca92d1984d9c259f5a927199589c889e68909098089c039e0e909d97ab9bc69d6f8d0597319b5a9d098d7696c09af09cc38c0d96739acf9c7c8e9c952e9a9e9c3c8e3e95bf995b9c058ed4945299079c148ca894f3984e9b8d8881949598989a38884e945f98339ab80262947398f6999d02cc93fc979199be07d1921597c4983d0cd1921597c4983d0c00000d1ce11d901400000d1ce11d90144ba1c9a45ba6db24c9a350a625a8f5265ea038a5b9a68426fa90829a089cb320d69f40a4aea50e25d6a289a8c4a96f2861a306a957aa1529f3a32fa9b9aa5e29fba33ea9b9aa1429dda31ba995aac22888a3f0a87faa8128e6a2b2a8e9a9da27f59f6ba5fba68625219cb1a0d0a2c220fd9d8ea1dfa33319e2a03ba4faa56b12faa143a554a7311a0ba26da562a7b51cf6a161a556a7bb1cd4a14fa53ba7591c7ea131a5eaa6cc1b26a1f3a4aea6e71ac7a0bba469a6031a8da08aa42ea630195da053a4efa50d192ba01fa4bfa53d1821a0e9a3b5a52017d19f5ca339a5ce16f39e31a24fa4f9159c9ccda086a2e6131e9c6aa030a217107e9c96a0c0a29806e09caaa018a30c8dba9cb0a004a33890e79cc1a0f5a2f291819bb29f11a226103e9da19dcd9ff61981218f2a192c361c8f20fd28622a00a1f398649c7d9d5d95da99649d85a07292f299409d04a07b8bdc98149dac9f278bc898c69c229fc88a6598939ca19e6e8a11983d9c3c9e2b8a8797d59bda9ddc83eb96449b7d9db2834e96da9a199d4389da95599ae59c0e895695d8997e9cbc880d957d99329c0483f5941499849bd402da94d098e59aa8029b947d98459a9d079f947598f99942074a943e98049a4f07ae920d9712995a02ae920d9712995a020000ac19841b3a130000ac19841b3a1368a0a9a4a0a5ca2471a094a5e1a6a025059eaca40ba67f25d59dbca3e3a44a24b7a110a5bea649257ca206a7baa85d266aa22da86fa93827d3a26ea8cca9b32732a385a8cea9a92743a392a8d8a98d2742a36ca8b1a93327c8a216a820a985262fa177a63ba8142503a0e4a4d3a63e2201a037a4efa5a91f7ea058a4fba54b1e0ea1d0a462a62d1d79a1f5a4bfa6d31c68a1f2a4aaa6791c29a1eca4b1a68b1bd2a0dea4b8a6db1a99a0cda48da60f1a62a0a4a471a6421932a06ba42da61d1906a030a4dea54518d59fe3a387a51418709f4ea30da57d160e9fa0a2a4a40c16439ef6a119a48115e89d5fa178a31b14679dfaa0f9a2f711d99caca0a6a21010769c6fa063a2c10c5f9c65a05da251065f9c65a056a24906729c54a03aa24786a39c75a0a0a2c98c1401e2054b88298b5c03ca820181858899988f9d03a08c92bb99569ed4a01d9283995f9dcc9f2f8a10991f9d2d9fff03ac98d39cca9eea036398959c829ed2033098659c269ebf03d997109cd89da1034b97989b829d7d03cb96d19ae09c37833f963c9a799c0383d295bf992d9ce08263955d99c09bba82eb941599299b9302d594db98c39a7d02aa94a398629a3507be949c985a9a560278945d98e99901071b940298649933101b940298649933100000bb19ed1acd060000bb19ed1acd06d49df7a3dba4df229e9ec6a405a68724da9ec6a4eaa56d24cd9fbca42ca67224e3a06ea516a7ef246ba12ea602a879259ea1cca669a8c72509a257a7c3a8062687a2a9a7f0a80926a9a2a6a7efa8c4255ca25ca7b6a85225e3a1e6a66ea8b52494a16da638a804243ea1d2a5d3a75f22f3a05ca529a7b520c7a0ffa4b4a6f01ea1a0c6a46da6921d89a0a3a43da6b61c69a08ca425a6e81b63a067a40ea6701a54a05da401a6b51934a05aa4e9a5f61825a030a4c6a5331807a00fa49aa51318999fdba36fa5b116279f92a337a55415d69e39a315a50914719eeca2e5a4c613ff9d5ba285a447138f9da8a1f7a39c12119d00a10da34e10d29caea0a7a210106d9c78a05da2a90ced9b55a04ba226067e9b40a037a21386369b2ea02ea20a86e19af39f11a2d7057d9a459eb6a0fc04029682982b9a3f0a9e939398719a1f06b298a49cad9e048fd099319d42a0cd950799209d18a0bc93ad98109d04a090917698cf9c729fe48e2c986f9ca59e968edb971e9c0f9e728cbb97d99ba89d12895997679b4d9dd9880d97089b099db288be96989ac69c898827960f9a609cd4829a957699b39bc7875c9517995b9b7a82fc94e7981c9b73821195de98f69a30872495f0983a9b7d027f945298729a51827f945298729a518200000000000000000000bb19ed1acd06d49df7a3dba4df229e9ec6a405a68724da9ec6a4eaa56d24cd9fbca42ca67224e3a06ea516a7ef246ba12ea602a879259ea1cca669a8c72509a257a7c3a8062687a2a9a7f0a80926a9a2a6a7efa8c4255ca25ca7b6a85225e3a1e6a66ea8b52494a16da638a804243ea1d2a5d3a75f22f3a05ca529a7b520c7a0ffa4b4a6f01ea1a0c6a46da6921d89a0a3a43da6b61c69a08ca425a6e81b63a067a40ea6701a54a05da401a6b51934a05aa4e9a5f61825a030a4c6a5331807a00fa49aa51318999fdba36fa5b116279f92a337a55415d69e39a315a50914719eeca2e5a4c613ff9d5ba285a447138f9da8a1f7a39c12119d00a10da34e10d29caea0a7a210106d9c78a05da2a90ced9b55a04ba226067e9b40a037a21386369b2ea02ea20a86e19af39f11a2d7057d9a459eb6a0fc04029682982b9a3f0a9e939398719a1f06b298a49cad9e048fd099319d42a0cd950799209d18a0bc93ad98109d04a090917698cf9c729fe48e2c986f9ca59e968edb971e9c0f9e728cbb97d99ba89d12895997679b4d9dd9880d97089b099db288be96989ac69c898827960f9a609cd4829a957699b39bc7875c9517995b9b7a82fc94e7981c9b73821195de98f69a30872495f0983a9b7d027f945298729a51820000000000000000000000000000000012984ea175a2b9224d1e5f20d121222bf423e2277c28852c4b241428f7282d2d45244f2809299c2db32484286629eb2d0725be28fc29572e692501290e2a502e6525e528002a262e5b25c928b4298f2df22457288f29e02c45247c282629ad2b8e1a389cc0a0ff2a010d47a570a6cc299d95f6a456a6b2286f9bc0a626a80c2904210a258026082668206b246e25e1247f1d7d20f921fb2465a571ae06b01128ff1c4e9f14a1771da6238e25f425551d5a258c26c0268c1d38266f276f27a51d122667276f27a51d8a24c625ef25bf1c5e21d8234624a21a8f1d67212d221f1bbf19281f4f20fb1844150819011a9a157218a01db71fcd14561a3020682179136b1941208221ee12e41801203e219d10f018a61f08215410a8183c1f9d207d066918c31e5c2022061518511e2320d185f017161ecf1f9d857817ae1d4c1f5e851e176d1dec1e1885d616081da01e4f8b8416cf1c621e0a8b1216951cf61d9c8d8715481cb61d608d4f15051c641d328dfb14a11b301dff8e9214291bda1cb68e6d14ed1aa11c938c3914721a3f1c4d8cdb13f619ea1b028c42138e191f1b668bde121719ab1a28888612ea18621af58726129e18fb198e82e9118518c0197402ac11561885191107cf106517d918f306691207180f195982000000000000000012984ea175a2b92212984ea175a2b9224d1e5f20d121222bf423e2277c28852c4b241428f7282d2d45244f2809299c2db32484286629eb2d0725be28fc29572e692501290e2a502e6525e528002a262e5b25c928b4298f2df22457288f29e02c45247c282629ad2b8e1a389cc0a0ff2a010d47a570a6cc299d95f6a456a6b2286f9bc0a626a80c2904210a258026082668206b246e25e1247f1d7d20f921fb2465a571ae06b01128ff1c4e9f14a1771da6238e25f425551d5a258c26c0268c1d38266f276f27a51d122667276f27a51d8a24c625ef25bf1c5e21d8234624a21a8f1d67212d221f1bbf19281f4f20fb1844150819011a9a157218a01db71fcd14561a3020682179136b1941208221ee12e41801203e219d10f018a61f08215410a8183c1f9d207d066918c31e5c2022061518511e2320d185f017161ecf1f9d857817ae1d4c1f5e851e176d1dec1e1885d616081da01e4f8b8416cf1c621e0a8b1216951cf61d9c8d8715481cb61d608d4f15051c641d328dfb14a11b301dff8e9214291bda1cb68e6d14ed1aa11c938c3914721a3f1c4d8cdb13f619ea1b028c42138e191f1b668bde121719ab1a28888612ea18621af58726129e18fb198e82e9118518c0197402ac11561885191107cf106517d918f306691207180f195982691207180f195982000020a0a4a1d61d000020a0a4a1d61d6c1bb61c09203b2cea21f0250126de2d6122d0257026522f2222fd2518274330522307277428ad300124cd279828c230f9231b28d928c0306623b6278c283530e622e32615284b2f1c22e0258127152e23203622d723532c880d6ba41aa77d2ae09b34a843a9ff294d9d9ba8e8a9e8291e9d2fa826a997290c145199889a53286f19dc1c4b1f2727c19b6fa4d7a5d827d5a10aab74acf025f09caca811aa6f2189207c1a6210ac1b1d256c25f024bf1a0927872727278a18422714282c28508f1526e426ec268d142223e2241425820d121ea1204421201920117719121b5a8c7d8e619716984199e3850595b694890b7f17fb1c641e04185418d81e5720ae156c18121f7d20b31165180f1f82202e881118931e34205f87d8173a1efd1fd186cd17291ee31f8e86ac17091eac1f37865e17a11d2f1f5d8cf5164a1dc51e1d8c9716f71c601ebf8b4616ac1c0a1e578bac156f1cc31d008b56153c1c871db88afb14ea1b2b1d728ad914a51bfa1c348a9214281b9b1cee836314c41a5f1c99893514261af71b3c890a1491195c1bd6883d133119a11a7b882c12c0183a1a5688ea115218241a558bbc111c18cf192a8d3d11cc177a19078dae115817e3187c8c820f3c164918be06b60fc114a2150286b60fc114a215028600007d99459bfe1f00007d99459bfe1fe41a0a1f6f21ea2c751ce5213922002f591bf0210e225730161ca321b922f230881d3c22db247731b71d98231625b831cf1fd8244e268331381f8a245b25f8308e1d722379243d30521c6b203e22a92e8a1499988f99cf2c459a62a4b6a56d2bdc9dd6a626a8642a569e82a79ba8e3291d9da2a54fa7f728f49b0ea4fea46428d99b79a39fa41128659edaa550a7fd2623a17ca8bda90325dd9d3da7a1a81520a61b239e69a18f103d241222182076993e277026f9251e9b6e282e287127d59af727a12765272e9a53257b252025b69a1920c0208520069ab30f6f1476157695be945695c894bc91ad92039800981e8b8304c30f16111691fe14641c851d54953116a01d4d1ffd94d516f81dd61f6592b616981d241f778e75167f1df11ea68db816891d021f578d65165f1dae1ec98624163a1d801ecd8ce915d81c3e1ef7858f15a41cdd1d9a8541155e1ca31d3b85e0141e1c4e1dec04ac14d21bfa1c9d047014661bb21c5b043814d81a6e1c1b043214711a321ce4032514141ab41bae830d14c3195f1b49897c136e19fc1a018908130719841ad0885712ba18141ab78bd9116318cb1969882a11d8172f193788b3108b17e2181c88b8100717e118bd0266105b164118128d30100c165c18bd8230100c165c18bd82000083932a93151f000083932a93151fac95981022184c2d2b99c511e312432f339c8792b7935f30fd9c26991f94ed30619d949387946b31aa9c0b94d114ae319d9b4a14991bd1311799fb19111b1e319d985d1360146930e5993c992b945c2f359c82a061a1cf2d5a9d0ba4dda4942c839e26a5d6a69c2b00a0e8a5d5a7aa2a909f9ea5e6a68029f59e16a5a1a68128559f17a5a8a6a22736a0b6a515a7e0259fa0bea611a896244e9fc4a556a777216d9795a2bca49c1c5f2142151e9615903427cf25ea24c89c4529cf282828169f88290829622851a026286c276e262b9fc323172257218c9ed814ad91bb95de9c6c966b9aa79c1e9b5997cc99439bc796c58f6e89158b6d94d00c2319fc199795b411d11a221c799642142e1cff1c94975a14401c391d5f95f714a61ca01db594d715601dc31ee3922916991d151f809208165f1da51e5b90b715091d451e1c907615bc1cf11dca8f5d156b1c921d4f8f0115331c4c1df18eb814ea1b031d938e9014891bc71c62907a14e71a801c229040148e1a411c948ddf13031acc1b498d7f13ae19321be18c9e123019771a8a8cbb11a418fd19348c29111f184519998893107e17c1184f882410e8165b181988ce0fb0161018a782f80ff315b4178482360f921534175c87d70e2b15e5165902d70e2b15e51659020000708207832a100000708207832a104a9aa7909e910d2d669d5f982f99652f759f699d7d9e5130baa0e09f3d9df2305aa144a019a1583155a18fa03ca0a23175a1aca04ea0a63152a196a06ea13d31fca051a152a29030dba0fba001a2932f1aa108a342a4132e3ca139a5daa5fa2ce1a0dda54da7092c1ba112a67ca7c72a56a117a67ca734292ba16da6f9a784284ba15aa622a89827c7a16aa61da8892558a1bba62da81b240aa19fa611a83d21b19d2fa40da6d81c571dfb9b69a027103326282411215599a129a0287a27359ed32abb29eb2847a00a2a0f29422874a09926792582244a9ed11ca917338de19c76972c9d179fc699879a269d7d9eba9619972799a69a6f940891a015b315e390b58d6b18fa189790f309c619dc1a55909a0d051a3f1b908fa610961af31b958e9a13e21bd01ceb8d6014651c381d908d4b144d1c651d498d2814361c1a1dff8c4e14ef1b081dbc8c1614651bb71c668f96131b1b6f1cf58e9013ab1a2a1c888e7c13931a161c2b8e3a134e1ac91b1d90a812fa19b81b9d8d2e12b619101b548df0114e197f1a238f5a11cf18411ade8ec3105018a219998c70108117b918058c1510b3162e186f8bcc0f291615188e88180f0816b8178588160f8015fc162a8bc20df414d416aa02cc0ccc134315a607cc0ccc134315a6070000e1158b1773030000e1158b1773035a9c1797b311f22cada0de9c849f0b2fc8a19da1e3a11b3063a2ffa23aa4b13094a2dfa324a30c3164a32ba4aca35a313ea4f3a206a3a1311da4daa3b1a4473152a38ca4e3a490309aa22ea483a4c42f74a2b3a430a55c2ea1a285a5aea6202db7a28aa696a72c2c77a262a6faa7da2a43a253a6e9a76d295ba267a6fea757283ea263a61ea84527bea140a601a8642578a111a6dea747240da1f0a582a7882109a0c7a45fa67f1da39082a0dda2ae1570243121b31d2d99a4295f28d026389d032c9e2a87290ca0482cf92ad1294fa0fc29cf282f2840a023246222c020759e9591a99ab69c279c629a8f9cd69e969a6698029a799c2d99839486921696d3973991770f9f0a72979f8e4d158015129786839e1777171b96f50b4b19591a7195b610111b141c10956a12591b4d1cb194dd12491b251c3595a612201b561ce494a812161b5f1cb194df12101b291c4e93e712b41a281cf792b812531a181c179139122d1a9a1bc18ed711d019181b4f8ebb112a198d1ad28d4411cd18c919638dc0107f185f19ff8c74100418fd18a48c0d106217a418518c5f0f7f161d18038ce50d901557178488350dbb14e015d982b90c40148c15b1026f0cb813eb148a02320c5b13c91469077e0a52123414f5067e0a52123414f5060000bd02650383110000bd0265038311789d039ccc9c7f2cb2a0d39fb0a0de2e3da289a1a5a2b32f13a386a31aa450304fa48fa4ffa4c43081a4e9a45aa51b3109a5cfa423a5543182a437a5b3a5223167a460a5eaa58b3052a470a511a6b72f50a477a52ba65a2e28a4c9a595a60d2dd9a3eca553a7072c25a34ba6dfa76e2ad6a201a683a7fb2855a32ea6a1a7f3275fa30aa6e7a7a92657a262a608a8212570a222a607a8ea234fa22fa6cda7e221a9a1fba55da73e20799ecea3a8a5551c7620e70e819c0116ee28af271426c996802c9b2b1b2a709c792d8d2cbb2b509fb72c072ce32ade9f8528b0278f26fc9dd81a6512e296799c489add9ca79f6f9998999c9c6e9e499828977297c79af8984f941b894a94b7983b904314fd10679929891718ba16db989208fc189b194998cb0efe1ab01bc496ba10de1b551c07951f113d1b381c9b946411761b2b1c49948f11e81a1d1c00948b115b1a981b6293e710e119101bdf92291181199f1a0391c410e4182f1aae906d109f188e19719016105718421934906d0f1518fe1822911c0f61178218eb90af0e01174918ad90400e8516fb175a90da0df01524170e8e340d47159a169b8dec0cd2146416bf8bb20cef1438168a8b250c8014f215358b860c8c140116be02c30d8714f815fd86c30d8714f815fd86000083149715720f000083149715720fd49ddb9b1398a02ce5a0e29a299cb62e75a17f9f729f662fd0a1e5a0f8a137300ea291a1b0a2ca3035a3d1a3c0a4103137a436a46fa447314da48da4e6a4ef3075a430a5b6a56330b7a4c8a576a6b02f9fa4d9a518a78c2e73a4c7a5fda65a2d68a4eea536a7462c87a461a6d2a7f72a12a4a6a61ea8862918a353a6eba745281ea31fa6cda7eb2671a2aca576a79025fba18ca5eda66824e8a186a5eea60e2368a16da5baa6f52021a097a4dea5c21d150a269c52a07615dd26dc25fe238399822c012c7d2a119e762eae2dba2cf7a0872ea92dc92c5ea1572ca12b502aeea0a4239421b5203a9d22984d9be49e9d991a9ba59d76a01e98f698d999449c4a96ae97cd958799a7977495528fb29553979592980eec8912981e8f7e14d0127e976e8803182f172f973c089e188d187695b60c0719a919da94a10d6e19b119ed92800fb619521a37940810bf19711a389241106b19751a819358104d19f119e6920a10f8189c198492a40fb6184c1927921a0f2f180c19dd91c00eec17cb189191680e881740184691190ea416ec17eb902f0d29164917088fdd0c58159316898c270cba14da153489a00a11140515d288710ade122514348b0e09e3111813c18a35097f1186138b8a0f0cce110913c1860f0cce110913c18600003d143e15790900003d143e1579096d9ed59bc09a6e2c929fad9ae098a62e53a07e9f8d9f652ffda0cca010a12b3001a233a2a2a1a430fea2e1a345a4173137a4bca4aca5433176a4f4a401a6e530bea483a5a9a64c30c4a49aa5cea6802fa6a4a6a5dea6562ea6a403a646a7202d53a417a678a7302c2fa442a6bba78f2a2ea43da66fa7332986a30ba645a7412828a3e6a56da7d72694a2cca566a7832546a28fa54da75524f0a163a50fa7b722bfa157a5d6a69b214ca11aa58ba61420009e06a263a47d1ce2218c1cb00fc515fc2bb42a4b29239a3d2f2e2e182d0aa02a30132fda2d38a2ce2eeb2d9b2c78a1cb2892273f26e89d38924b962d9adb97199d119ec9a0aa94419af89b309d83941d981597609af39514962b945a988a9540946a085d93a0964c915313b4096b968b8d5617ca14299605832f18f9178595ba029c188918cd944a0acd18d5189594450cf41834197694080cfd1855192c94e60c92185119a793a90d3518e4180a932d0dea1798189e92b80c79174e183392530c07170718cd91090c96167a173090b20bbf1571160991580b66151216c0909d09a814ad15e88e16095614ae14748cb2085f1352141d8c520822126713ca8b350663118d12658d0908a9113712958e8f05340f0a0e0a8ed2809905a002a002d2809905a002a0020000d30ca80920120000d30ca8092012539fbb9c6b9c4d2cf3a0209f58a0792ed0a153a05ea1462f0da29da1e1a227305fa341a367a4b13050a4ada4a7a4e43008a505a578a500313da54aa577a6ad303ca530a617a71a30ffa42ca61ca72c2fc4a428a691a7052e9ea487a689a7e52c82a4a4a6d2a7102c5ca480a615a8a02a46a44ba6eaa717291ea441a6eba71c288fa314a6dda7b82608a3a1a582a7232509a37ba544a74f2449a24fa5eba69422b8a16da5dba670213da1e1a471a6c51f0ba0dea310a5341c6c90549b34a1ff149e29ed285027049c642f832e402d19a1fd303d30192fd9a3ec305530f02e27a49b2dee2c172c66a1311fe51d7e1c7e9cbf9d959d2ba05397f99b1e9dad9e4e94d098a898719cec9527988096ce9a9b953e977e8847954795b295aa13c6090e95c0905b186617b6949a8bfd185d196b944088fa1876190694a102e918eb18a8941b077718801843948d063318ae1803940c06da17e117cf91a405ad164d17619171053d16d41608914b055e15c015bc902508ff145b1569908d07b0140c152890c006f9132c1401914706c312d212b890810338125b12d88e4303c811d8114b8efa02b1105e11218cb2025210eb108b889502a110ae105288a002d80e7310bd82cd00830d010eab82cf80d90168826b8dcf80d90168826b8d00005416441786030000541644178603689d58961a112f2c99a0869c909d682e7ba14fa054a1532fd4a277a1c7a2263038a4daa34aa4a4302aa487a480a4cc30c3a441a435a5d530d2a477a53da694302aa505a6eaa6103038a51ba672a7062ffea477a6eca7d42dafa448a6b0a79f2c7ea43da6c3a77a2b47a448a6f1a7162afba346a60ba8de28eaa34da615a8152891a30fa6fca74e2607a3dfa56fa7ea24b1a2a1a51ba7b02356a21fa5c3a6cd211fa218a5d0a6672099a1e1a475a6f61d4ca184a40ba6381c2d9e88a2f4a47019cd239e2373207f8f4f2eaf2db62cb79e7531e53004300ca424328531a030c9a4da306030442f27a40928902749268a9dee96fb992d9ed598be9b529d2ca0fd95a999fd99e09dd69701989796fe9a67973596dd8e4098f5966c946a0e54930898f39274144d094a972690fa1558121f98548e6e176d15a196d98ad8171d161d969d87e0179c169c96e7865517151732952782cb169316b3950782c21545154595df81d81439143994ba817314c313c39380813213da1128936581bf115f115f91e7835311d10f0691dd833910470f478f5186f00fc30ec38e2686130e410e788c6b83df0df00d17896485770df10b2d83fc82410d960b0983d582ea0c610ed682c687fa018b828b029089b08c6a8f48829089b08c6a8f48820000be07290c7c0f0000be07290c7c0f139e929cc39e092caaa00f9f339f5a2ef2a04ca08aa0452f5aa15ea1bfa10230d6a209a228a45f3058a360a468a4923082a4eba4a0a596300aa5a2a59da6653060a526a631a7e02f30a52fa61fa7d52e0ea52ea68da7e12deba416a667a7c02ccda45ba6e4a79e2b82a49fa6fda7602a2aa447a6f1a70f29c3a3eaa57fa72c2877a3b4a52fa7a92619a38ea5fba64425bfa25ca5d3a60c2476a2e5a495a641222ba2cca465a6ac2091a196a447a6571f39a149a4f4a57f1d96a02ea4dda5f01baa9c319ebaa03414462ae0296828549c6f31da30f92f34a41f335a324e3169a5d9320e321a319aa5ab2d662d7a2cd8a0f396fe974b9ad091b49aec9a1f9e418bd4983b98719b60944798d096479adc953c97d2914498fb96f694661169900b981592ba154610d697c2914816ab1256989490a31542148f986c8f1a16d3133198c78da31582148496418d3a152114f895a78cdc14ba13b994a88a81143c136c94388a641353112f94b28bda11240fa5945f8b7510a20e4d93258b730e650bc892328c4a0ca1045d92f28b060c5384f2911a8b75080f849491498ac302c9895790e789980267890d90d0897a822b8c818f95895b82088c088c58893982848b848b7e891589ba8a0988ce8a2d8d1f908902ce8a2d8d1f9089020187f089e28ce7030187f089e28ce703139e8b9a6e9f362be5a0179f63a03c2e28a1d4a0f9a1d12e8ca141a185a2aa2f82a29aa283a430308da3a6a452a5673073a4bfa4f8a5713081a46ca5dea63b30d2a4e2a55da7aa2f10a541a6aea7a42e1aa58aa6a6a7882d30a569a6dea78e2cd6a459a691a74e2b5ca414a6b5a7fc2900a4cea578a7cd28fca3bba55ba7a12752a375a50ea70826c1a282a507a7e224c7a26ba51ba7e62317a32fa57ba62e22fca2c1a447a60f216da2caa45da63e20e6a1aaa45fa6d21e43a13da4b3a51a1d369e70a20fa5f71341220f20c31c32954d306c2f1e2ea2a38733de327e3192a718343833f631a6a8a53149315e302fa73f1bc2117f99069fdd99129c4ea09f9a6d9a6c9a2d9eaf9860997598179d559779982795a59a0997c59662083b95ba96c794d21622136c965f9377174b17f895f191d817ae167795cf8f19186c172395c68db216ce16b694438d27163d165294d58c0015f41330926f8dad129e119e91dd8df610650c2191918d1e0d7a05ca90558dd60926856e8e078db2034f8b178e5a8d7583c88d0c90e08c3d83a38fa38f8f8c0883288f288f1e8c3388c38ec38ef98bd687438e798c718bfb89458f0a8cfb8a9789b48e7888d28a4a8b368ec302298b748c248fca07208bb48bfb8d2d82208bb48bfb8d2d822f8248867d89a9032f8248867d89a903f99d749a459e322b16a08e9de69e2e2e79a00da004a19a2ed1a1cfa13ca3652fdaa25fa2eda203307aa303a495a4213003a41aa43aa5233069a4e1a431a6fc2fe0a4cca544a7342feba493a6c4a7452eb8a4b7a6f4a7262db7a477a607a8422caaa47ca60ea8d22a62a43fa6cea7a82910a4f2a57fa7c72807a4f6a596a7de2705a400a6a4a75826a2a3cda5a1a73525eaa2baa59aa7f22351a270a543a71b22d9a1faa4b0a6752077a1a3a443a6e61e2da15da40fa6f91dbea0e1a3a1a53e1c3da030a3dea4a31ce99c929f4fa17016f72bcf2b972a8f9c053396324a3133a78d341434a13281a9f2331b33e13174a9c828a0280228ea9ff498eb96649ad28a5c9ac799b29c8a8a1b99c197cb9a648aa197bf9138989b908595a10e709070907094c21447102193ea929315d812ca94899131168512df952f91cf1548148195299039156011d694c48f1114e31066942c904512930d1d9562908f10e606bf948f90300b668667944c906d04678f129419901584d09090933790c18cc3910a93d78f248ebf93bf93218f1b8f189419934d8eaf8f26945e91378e068fa493f290258e07904c93b98f698d8f8ff792608fe68d0b8e7e92df8ea58dbe8ef6914f8e5b8c3c8f8e91888aa08d78912294ef07a08d78912294ef070000f581288970030000f58128897003b69c4f9a2c9ecd2a89a0949e22a0c72d49a108a022a1122ef3a1f4a08ea11a2f0ca204a2bfa1592f82a205a3f1a3c42f36a30da4a6a41130ada3b3a401a6dd2f19a48ba58da6f12e8ba44aa677a7222eb9a4c0a603a8092dd5a4bea601a80d2c8fa460a6aea79e2a5ea422a6c5a7682946a4eea599a784281ea4cea566a7ab27a6a388a507a788262aa34aa5d2a64125eda26ba5fba6452498a244a5c5a6de22dea1eba48aa6b62165a19ba42ca6b12011a17ba408a6221fd4a03ca4d2a53c1e5ea011a472a5bc1ce19ecca2a1a48e1cdb9631966f9dcc0dc2307c304c2f54a597344734d13286aacd343c34203396ab72305730fe2e3da68a9c369cf29db591099b7f9ceb9e538ab39a0c99b69c19946d99ba91849b1f97a0968511d3962c98a594fe1727150c981194f418b817519615922c1961176197e290e9181418e696729072182f162f961c908816951499950391631286072c95c291b70b288dbc93a8910f8b13931393ba91888fb69485929b917291b29508921291d692df95909182900493f3951a9126904d930596b690c68fb9928c955890fe8f10939a95468ed88fb1924595e88d998f15930195018c178ff792e194af88768f4693b6940483268ef7929594ee02428b9e8e3d8f958a428b9e8e3d8f958a0000bb132f1719110000bb132f1719112b9c758f5b10252b9a9d0791cd18272eff9c3f1a011c422e1f9e5f11b712c42e11a04098739c2c2f4fa1b0a0f9a27f2fc2a2b6a36ba5992f1ba47aa517a7432f42a428a6dda76d2e79a46aa60ca87a2d67a4a6a62ea8692c5ca48da617a8652b45a429a6c3a71a2a12a4e0a56ea7072900a4cba515a7602803a487a50ea74f27baa345a5aea68b255ea365a50ea7aa24e1a282a58ca70824a6a290a5b6a7d52277a263a59aa7ae2111a211a525a78a20aaa18fa450a6591f47a10ca494a5ce1de0a0f3a2c6a4941d6da02da249a4c71cb69f33a1cca35e1b4626c324ba216a9a12334f32fc30dbaae03529352f3444ad0834c333423287ab679c2694589be191799a309cf09dea109d99aa99379dad8a8d98ca08f49ae990a5947a17df13df939391651aa8198a934f8f231a67190a952e9054197e183896ec8f8d183b18da955b8f89178016539513900016be14be944790df13a5102e94eb90bb0bb6868c93829247910e9500932594979420987592379433957d98fc9116943e9572988591f1933b956398189113933495fa97a1900d923895ea97519018918494e7963d8ea7907d947596d68d64902f9404966f8dd68f4993d7958a8bc68faa93ac956488d68f1f947696628ba58d1e949b992397a58d1e949b9923970000ca107013ab0e0000ca107013ab0e289e7d9ee49ed32aa49c2311ad12e32d8d9cc817f6185b2ec99d7191df12d22e07a0f19191997b2f51a121a037a1862f42a2aea3dda45b2f25a3f1a5a2a7d12efaa3e1a6a5a8242e5aa470a7bfa8472d2ca439a786a8642c0ca4e5a64ea8102b72a354a609a8b6293da3e0a54ea7cc282da381a507a70c28f6a21fa58ea64c2714a2fba470a6fc25c2a111a517a7d4242ba2bba5a0a70c24c2a2f7a5b4a7992259a2cfa594a7b521ffa17ea508a7192180a1e1a44aa63220c7a042a482a5881f53a0baa30da5eb1eba9f71a22ba44a1ecc9dcc9f56a1821e709c829caba12016eb2e752e052da8a8ce3543354f3495af89342634b632c6ad08a0139e28a08a98d69ac29d6ba01b14d999589ac39ca00a589805926d98710a2c957416d013400abf91cf1b041c1f8a5a8c4b1d7a1d8f930789191d581da2968d88561c981c6d98998abe1aad1915995b8d731796139c984291d910ba907e987693288e7b952b972194e194f498f2956d941598a89aad945b942998479a159372940598159a579163940098ac99bf8f4694a9979499448fbc931c972399b18e54927296aa98578ca391d8954498f08b39919b9514988d88e490709586976788fc9097953a973b8821902795e396d3821a8fb0920794bb071a8fb0920794bb0700006816301b710b00006816301b710be29ec4a40da652243f9ee2a069a0352d949ce81a2919f82d199d81912c19862e15a0349d8b9c532f7ea1b1a290a3492fdba282a622a8f02e84a404a86fa9602e2ba457a893a95b2d4da462a885a9932c48a42fa814a9bb2b3aa4afa7a9a8702ad3a31fa6c0a70129f6a2d1a42fa67828ada2a0a4ffa51028b0a2e6a44da60a2799a25fa5eaa6992588a212a6bda79b248da282a62ba8b62356a241a608a85a2238a2f9a5e2a75c21f9a1bea5a9a79c20a8a177a550a7332030a1eea4d4a60a1fa3a04ba4d6a5de1eb49f7ca26da4451e199e11a0a6a1571ee39af996de9aed1bfc98681d3b8de399c32c462eaa2d10acd93012314a30ccadc99fc99e03a11d0c7a9a229ca49eee18289a669b4f9d1517a096b0089195c6105b9493199b15698a8a8c801d091d07945c09ab1e191f4d975e0c981efb1e63984983031d971db098898f4b191b198198f492cf0f2e88cb960d940b8f31973c96c094c794ed98b694fc947d966c991d944c95ae97279a5093c295d998459b9191e295b698599b3091bd956698e89abc91129516980a9a1a906894b697ac99b48f3a94789777996d8f7f9346972099a18dd1923097f698728d7692b7969998428d089284966198018d7f91fd95f297108bb0900895e296b002b0900895e296b002630cd91af71a4a1b630cd91af71a4a1bae9c8a9f9aa10d28939d8aa0a4a17c2a2ba0bea1a9a23d2d779d1f9831133d2ef49dcf914313fb2e8ba166a4c1a4762e08a4e0a7dba8242e19a494a8eba99e2d95a40aa968aabf2ce1a414a983aafa2b9ca4e9a835aac82a2fa43ea84aa99129d1a28ca588a66028e7a150a252a41b2778a18aa006a372279aa14aa33aa5042739a23fa622a8202515a236a641a8952363a2f9a52ca8de2196a205a629a8b12033a2d0a502a8d01fb7a18ca5e7a7881e8ea186a5c8a7ea1d32a124a5a3a7cc1c24a11ea59ca7c81c37a1d8a4f8a6b01c529f52a309a5731c5098351a081c081cba8572213622d90cf49ad39cf59e7d94289d4ea12ca4988aeb9d56a152a35610fd9df0a01da2f614229bb29de09f0718b6987e99699cfc1835965a195c1989185b11692026214211271670215622009805166f213122629b0713d21fb01f7e9bce8fef181e18a79a6a96c88faf956e992298ed97a19a589874983b99449c2895bc97d499579c2092bc961c9a2a9c74912696ab99099ced908e956e99a19b81903c954b99479b4c90ee941799f99a688e7194a898aa9a1e8ece935798649adf8d369310981e9a9d8df992a397099a8a8d98926d97b899fc8e75920a97a49912902392b396fe98018baa91ee9508986f82aa91ee9508986f820000b91a6718750e0000b91a6718750eb49e8ea457a5622807a109a74ca8e0299da130a765a8e42a6f99471e391e802cc99a3f12f71c052ed4a292a8a4a9f82cf6a502aa07acae2cf6a424aad0ab6d2ccda49ba94cabb32b21a59ca9dfaa9f2affa46da9b6aa61292da4bba81faa6c2886a2efa5a9a7a927d4a0cf98289a8b27219caf1e732032282fa1a1a573a7642579a24ea7cca8cd22e3a2c2a66ea832214aa24ea61fa8682025a224a6dfa7911feea1d7a5b3a7591eaea188a56aa7c11c5aa15aa51ea7311c28a137a5f1a6761ae3a001a5b2a67b19fba0d3a460a67c1837a095a422a61017459e10a4cba54615af9d8aa334a5a3138f9dfda2fea4d3124a9eeba282a4650f619ebfa1e7a32314659deaa039a3f611309b249ecfa025141d9a459a349d1918d594ed1721172719ed14b221f9226319281bd924e325248cda1926240f257e9a240e831f47208f9be5959c0da48f0c9aae97c998a39c09998b97c59a3e9d2c964198c69b7b9da793cd975e9b779df8920297f09a269d38916a96989abf9cd090f495239a7d9c158fcd951c9a6c9cca8e5395de993f9c848e33957f99009c508eb7943e998d9b418c6394c698c29ab388f3935898279af18294930598b399ce827293b4974299ac02659253970999658aee910e97b798628eee910e97b798628ef2131219ba16dd09f2131219ba16dd09bb9c5ca0a1a00a1dbfa1dea719a9db286da209a925aab4292fa2e9a78ba87c2b6ca0daa679a830292aa426aac5ab472b4ba41daafeab432bafa43eaafeab012bb7a443aae8ab8f2abfa4faa97babb72989a499a9f4aaa7282ba410a964aa0f2727a372a8a5a92724b1a0caa4e6a54a16e49a049e4aa0669164a058a329a5ef95e7a230a623a8e71a48a25aa63ca8661d24a209a607a8d71df3a1e5a5d6a77a1ca5a1a6a589a7e71b68a16ea556a7e21a21a134a505a7e319eba003a5c3a6fd18b3a0e1a496a61c189ba0aca45aa606188da07ea4dfa55b16159f1fa3cda42612d69b4d9fbba0af0c5c98889d00a04785ee9c1ea115a37690129dcba137a42d8edd9c4ea14ea31a0eb89ca0a056a2cd14579c049fe1a02417ee985499f59b3119b615f12102230c1a18208728852986949d1c0c26ae261a9ff602081dc61c309d09962198839a959867980c9c199ea195c0987a9cf89fa0958899529cae9e2f948598189cfc9d3392e697e09bb19dd29022976e9b569d85909c96fc9a169d4f9026967c9acf9c1991ab95319a969cdc903b95b7994a9ca890bb944199d79b248f9794e198339b3c8d7994b5989a9aee8c51946098379a16888b947898cb999c82f993fb97ab99aa87f4926197de986602f4926197de9866020000f91b051d5d150000f91b051d5d1559a0a3a52da72c25a9a175a7bca81b280ea2bfa7b9a8e127269aa4a1eda22e24559fa5a24ba44b24a0a3d6a804aa76282aa4c8a964ab4e294aa4c9a98fab56294ba4baa969abfe2828a46ba905ab7e2821a43aa9f5aa0e28e0a304a99daa6f2738a228a83ca9ff252d9e15a467a5f722059d0aa169a3701e319f43a28ba4811833a1a3a46ea6d11298a160a521a7851987a153a52ba78c19a5a145a51ca7941956a127a5cea67b1905a1faa493a6df17c4a0b2a44fa6a7177aa082a419a624164ba060a4f2a5a8142ca02ba4b1a57512ec9fdda394a56c12899f09a30ea5310f0d9eaea1f3a3020e659cc7a08fa2d406489c9da08da2b686b29cdba0f6a240900d9d04a12da30b92ef9cf5a03da3f5930e9df6a00ba3de93be9cd79ff6a14b10de9b159b919d8b1b7124e62c482e89185d1a9f2469255ea0f298049de89e3a97af9a8b9d85a0a79493995b9d10a0ae91f2981f9dc79f3b90d598e59c309ff98f6f988f9c999e558d1d98399c289e1c8f7c97f39bcc9dc88c0197589b6f9d938c7296ce9a109d198ee8955d9ae69ce78d6795f199829c8c8df3948e993b9c9b8be6941b99989b248bb894d398fc9a0a887f948798759a8d8294947d98f09968821d944098f09968824a934197f7984e824a934197f7984e8200006719b81ac30f00006719b81ac30f24a076a580a68a248ba0dea664a8a926349fcda528a8aa26259ebfa4f6a5fa24cfa09da53ca7422522a2a7a724a96c269aa296a81faa082733a3eea865aa712780a3efa85caa292770a3d3a840aa212775a3bba802aac92646a36da88ea90d2609a2a4a7e1a8fb247ca0d2a5dda7df22df9f86a453a6162039a023a4b8a5f21db6a034a4bda5bb1c63a1a5a435a6661b54a1eba47fa6031a10a1f0a4a4a65819c1a0e2a495a6a8188da0d1a47fa6c81753a0a3a44ba6401622a06aa409a61316e39f1ea4b7a58b14789fcfa358a54e14049f02a3eca40614959e5fa264a44911eb9db8a1d5a3c810989d32a13ba34c0d379de4a0e3a2ba06b09ca0a0a7a28086849c7ea08ca26586839c76a071a2cb8c7e9c72a05da2bc8c779c90a04fa2f28f229c19a08aa298915810df118a13c08b4589da9096931a8b9e99689e58a02692029a729ea4a041938399719de39f4d8f3e99289d4d9ffe8cc698db9cc99edf8990989b9c7f9eb8894a986d9c4f9ea9892698239cef9d8889ce97db9baf9d68892397529b359d4b8c8c96859acd9c0c8c1d96eb99689c4e8da5956b99fd9b068b0d95fb98289bb787d894cf98aa9a5b8790949b98849a6682a6949f982e9a54828d946f98cd990d07f3931c987299a909f3931c987299a9090000a919cb1a930f0000a919cb1a930f7b9e89a481a53523ab9f99a53ea71a25b79faea511a7fb2430a091a523a7e7243da109a6dba7dd2415a2cca667a843253ea270a7cba89a258ea207a832a9b625f4a231a868a9ba250ea32fa869a97225ada2eca72aa9222513a260a7bfa8742494a1bba67ca8712341a140a621a8cf21d6a0a5a583a74f20b3a022a5f3a66a1e8ba0d5a471a6ef1c60a0a4a430a6601b5aa082a40aa6d21959a065a401a65e1849a063a4eaa549173ca03ca4d5a5e01522a020a4b2a576140ca001a476a53312a49fbda34ca5360f359f5da326a5020fe19e17a303a58c087a9eb2a2bba45c080f9e41a27da42208ad9d9ea100a49607309dfda02fa3ea06d59ca4a08ca265866c9c6ca03fa21a86069c59a031a28a8ce79b53a037a2988f6c9b47a017a28d8f649b03a0eaa1678c829af39d6ca0c1843994ce971099298221940099ea9a11821999eb9cfb9e8d90359a579d26a052952999379d0da05794cb98109dcc9f7b93a698d19c549f54915498799c9c9e2691f897269c139e0390be97e39bad9df18d58977e9b519dac8d0297159b039d728dbf96979ab69c398d1d96059a399cf78aa4956c99b49b7c8a32950f99309b2e8aef94e798159b178a2a95e498c09a1f87fc94d698fb9a5d871f942c981a9b26921f942c981a9b269200000000000000000000a919cb1a930f7b9e89a481a53523ab9f99a53ea71a25b79faea511a7fb2430a091a523a7e7243da109a6dba7dd2415a2cca667a843253ea270a7cba89a258ea207a832a9b625f4a231a868a9ba250ea32fa869a97225ada2eca72aa9222513a260a7bfa8742494a1bba67ca8712341a140a621a8cf21d6a0a5a583a74f20b3a022a5f3a66a1e8ba0d5a471a6ef1c60a0a4a430a6601b5aa082a40aa6d21959a065a401a65e1849a063a4eaa549173ca03ca4d5a5e01522a020a4b2a576140ca001a476a53312a49fbda34ca5360f359f5da326a5020fe19e17a303a58c087a9eb2a2bba45c080f9e41a27da42208ad9d9ea100a49607309dfda02fa3ea06d59ca4a08ca265866c9c6ca03fa21a86069c59a031a28a8ce79b53a037a2988f6c9b47a017a28d8f649b03a0eaa1678c829af39d6ca0c1843994ce971099298221940099ea9a11821999eb9cfb9e8d90359a579d26a052952999379d0da05794cb98109dcc9f7b93a698d19c549f54915498799c9c9e2691f897269c139e0390be97e39bad9df18d58977e9b519dac8d0297159b039d728dbf96979ab69c398d1d96059a399cf78aa4956c99b49b7c8a32950f99309b2e8aef94e798159b178a2a95e498c09a1f87fc94d698fb9a5d871f942c981a9b269200000000000000000000000000000000cd1fa7233d240128bb2272210621f72c8025c028a629302d1326262a532bc82e0e26ad2a082cb530a426172b402cf530ea265b2b312c7530ca26dc2ae22bae2f19260c2a2f2be12eec259529d02a4b2e6825fc28fd29062d70247a284e29492bb0226b258f26382a1e987ca83ea9332ad715ada2e7a30e28a2a104acf4ac8c2ab221122513268925a121e2244b26f1231921f316e297c32483a130ae4db05924b6285d29e3282111252a302af0294316b52ba42bde2af0164a2c512ca32bfc167b2c502ce82ba510092c012c672b6d10042a3d2af0298915cc26b7279227a81645214c23da233116f917e61b761cf2158b164215861686160a1b7920c0212f142a1916205821cd10c618fe1f3821630dd2188c1fe320b90689181c1f93204b8639189c1e3920f185e917361e0720408cd217061ea21f1e8c7a17a21d4d1f8f8ef5165f1df11e3e8ea716151da51e2e904d16b81c351efd8fe7157b1ce91d9b8f97152c1c801da8902d15d51b521d8290d614731bfa1c46917414fb1ac71c10914414b91a701cd2900414281a2e1c8b90ae13d019981b3b900a135d19ec1a798ed5120419951aca8c9812c618571a9c8c48127c18e319488ad1115818a61969827a112c186b195082cc105017ca1849825312f817fa18f0090000000000000000cd1fa7233d240128cd1fa7233d240128bb2272210621f72c8025c028a629302d1326262a532bc82e0e26ad2a082cb530a426172b402cf530ea265b2b312c7530ca26dc2ae22bae2f19260c2a2f2be12eec259529d02a4b2e6825fc28fd29062d70247a284e29492bb0226b258f26382a1e987ca83ea9332ad715ada2e7a30e28a2a104acf4ac8c2ab221122513268925a121e2244b26f1231921f316e297c32483a130ae4db05924b6285d29e3282111252a302af0294316b52ba42bde2af0164a2c512ca32bfc167b2c502ce82ba510092c012c672b6d10042a3d2af0298915cc26b7279227a81645214c23da233116f917e61b761cf2158b164215861686160a1b7920c0212f142a1916205821cd10c618fe1f3821630dd2188c1fe320b90689181c1f93204b8639189c1e3920f185e917361e0720408cd217061ea21f1e8c7a17a21d4d1f8f8ef5165f1df11e3e8ea716151da51e2e904d16b81c351efd8fe7157b1ce91d9b8f97152c1c801da8902d15d51b521d8290d614731bfa1c46917414fb1ac71c10914414b91a701cd2900414281a2e1c8b90ae13d019981b3b900a135d19ec1a798ed5120419951aca8c9812c618571a9c8c48127c18e319488ad1115818a61969827a112c186b195082cc105017ca1849825312f817fa18f0095312f817fa18f009511d901f0d1e9027511d901f0d1e9027c02388251626782c9422e224be25b82ebf234b26f7274c31cc23cc25d52778334e2433289028e1336724de27ad287f3208259528602908320525922863291e3164240e28d12818304423662768287c2e65215525f125942c8a1cfd9bca9ef029159b3ca851a90e29059db2a813aaa528229f2aa996aaf728ff8a2aa0d7a1bb272411229b739c8426d1996fa715a9b626b81697a9d7abd12202278a20af983e128f2ad729d5286e91522c402c902b6f910d2dcf2c4d2c0298572d202d822ca19c302deb2c552c4b9c672c272c9d2b439e93295729d628e394462370245a24139361161a181819ca123d8e7698ad9aad1a4117081d4e1e7f1a3518e41e4a2020172b18dc1e7c20f9136a180a1f7a2027081b18601e2e209590f1172f1eed1f3a90ca17241ecf1f0e90df17fd1d9a1fb38f3317b81d121f298fc316551da91eb9905b16dd1c431e709009169b1cee1d3490bc15611ca41d00906915331c6f1db58fe314df1b121d458db914911bdd1c0e8d9214021b821ccf8c3d14a01a461c8f8c32140b1ad31b018e9a137219391b8a8dde121f199c1a358d4e12c0183e1a118dde1186181a1a8e8eac114418de197f8ed41118188f195a8ebe11bf171619cf8da611dc161c18098cc11007153d16958cc11007153d16958c771a7c1e901efd28771a7c1e901efd28a01f58234d242b2d0e1cf41d7d208b2fd6173020db20f031ab129a1f94201834351e2f233b242534a01bff2094238733931fe024b625b732ce1e69243325da313a1f0823d224dc30681d1d212f231c2f201828193c1a432d5e943aa24ea4f92beb9c77a62ba84f2ace9e23a817a98b295d9e93a7c2a83329bc9d56a5fca63f28c29d9ba5eea64a27859e15a781a87925e795cda6d6a8f022da249d9731a2191dcc2985289d264a98692cf82b5b2a739e7e2dd82c142c43a10a2e452db62c16a33c2ead2ddc2c5aa1c92d3b2d692c9ba0382cf42ba12aaa9dc9269d26f125ca975a1a1218b8179e121b936d956298d116908d2f10941194118d14431c611dc990c8155f1d9d1e7096fb16dc1d981f869449165d1dd61e5d914d163b1d971ea09056167a1dde1e5c905d165d1d961e2f901f16371d6b1ee78ff015d81c351e688f6c159f1cfa1dee8e4315541c901d728eda14161c401d168e9914c01bee1cdd8a62145d1baa1c7d8a2214d11a641c188d1914761a2d1cd88c0314111adb1b8e8ccc13c219431b128e56134f19f11ace8dcd120f19791a2b8f2212b818051ae28ec711331883190f8d09118317c718b18c67100217ac188e8a8c10e31680188c8a9010d516b218c88c7c107c162f18e1877c107c162f18e18772968e9686971d2672968e9686971d264994c711f8183a2d449c899c639aeb2f289f479b389cc33107a117a166a0de33a7a0b89c959d29342fa0369f219d6e335f9e199c6d96c832659ce094c595ff319d996f9445951131e39a0e9a419b0b30989b0ea0daa0dd2dfd9cffa235a4852c629e1aa53da6462b57a01ca6e2a7dd294da049a6e6a72a29e29f43a60aa80a2860a086a61fa8d626c8a025a770a831258c9d46a624a8d2224021fd9cc9a21b1f0929082737246511862c542bbc29199de72d262d3d2cd9a0982ed52dca2c52a2172f3c2e2f2d3aa3302f4f2e322db8a3062e492d792c69a3492a8529d42801a1cd1f0a1e761b689c479619959d9489918295b89440965c91bb03c4167318db90ec0fda1a911b0a959e133c1c071d82986f144b1c3a1d9196b514811c6d1dd295ec15771d841e6c945616a41d0e1f2a94dc155b1d961ec793d115061d341e53937515b21cde1dec9249155e1c7d1d7a92dd14221c321d239285148b1be71cc9916314311bad1c85915c14db1a681c339104147f1a281ce990b713f619951ba0904713a0190b1b4d9053122619601a0790cb11a918061aeb8d31112c1865197e8d98107f17d018448b2d10e3165b18d58acd0fa91604188e8af40ffa15ad17458af10feb158d178c8d5a1024165f171e915a1024165f171e9100007985fb892d0700007985fb892d078c9c159b349ce32c09a022a1bc9f1b3034a123a289a04d31bea3a4a3a8a4763374a40ba4e4a3d7339ca240a2cba13133e1a28ea0eaa29432dca17ea18ba20b3270a140a212a21a3192a1c5a215a41f3070a1e9a3cba4462e24a13aa5cba5f82c3ea1daa523a7b62b67a1b1a62ca8192a33a18ea61fa8b22853a1eba636a8b52713a22fa79ca86e2623a22da76da8aa24c1a079a617a87b222412e6a200a5ab1e3d278623fb1d5111382c9e2a0d29249d1c2e3a2d282cf8a0472f452e102d78a3c72fad2e9a2d8fa41630252fd72dc0a4b42fa72e972d1da4332d7c2c9c2bf9a1e724b723df21089da9956a9a049c7f97a2995299da984b91a2926c142d17c990ab8a7818fb18aa93d40c621a001b5e93a40d031a2c1b5e943e116c1aca1b87935b13e71bc91ce79048145e1c5e1d92904f14451c521d14922914381c3e1dc2914014eb1bf81c75910f14501baa1c9692f313c71a601c2e924513981a1e1cd09133137a1a0e1c8291fd12391abf1b6e927c12e619611b2092f9116719ff1ac090cf110719711a8f915711b718fc196091b2103b189119179075107717a4181b8f2010d61658182c8db50f2416f717308d0a0ff115ca173f8b8a0e7515c116d98c2a0de714d116a982d90c4413b614cc87d90c4413b614cc8700003508ec0b438200003508ec0b43824ca0709f3b9fac2c72a23aa4e9a3952f2aa47aa4a3a40f31e2a23ca3afa10e33bea2f6a0fca16e33eda33ba44ca4b03254a438a400a5673257a496a47da5cf3127a445a5a3a5ee305fa39ba49ba5053011a31da53aa64b2e10a3f2a52ca7012d06a395a601a8e42b9ca207a757a83f2a52a294a64ba8ad2876a2f0a64da88b27bea2e4a667a8262601a2f1a647a8d224c6a17ea609a8c022219f38a5c4a67c1f2a2111965fa0fe16ea2a07292727e29c342e1b2da52bf4a1bb2f8f2e102d0da44430472ff62df0a49c30d62f462e9aa58f30e82f692ec4a5a72fa02e662daaa4cd2937296928e4a08e16a1192d13489e5598a198ed9b2199a6958994e895a5985692fc08970a87983b90ef11e21356987489ad15f3154c98e408e518bc19d997c40ffc1a0b1c2296bd11441b861caf9560123d1b491c0696b4120e1b3d1ca695bf120d1b4c1c7495f512b91a481c62946b12af1a1a1c3294ae12451a091ce4931612d919811b0192af117b19f01a8c913d111219691a2191d510b918f719c690a4103818551977906010eb17ff182f9012105817aa18d08ff60e801621183f8ff80d8e155217428d2b0dac142316048b9e0c35147915f787680cbf13e7149887300cf51289148002730b641250142307730b6412501423070000ea847a826e070000ea847a826e07289f899c5e9d8d2c69a16da2aca1692f81a306a54fa48f3046a504a679a7eb317ba571a617a73432a9a4c5a5f0a61232daa445a53da6023299a498a5b6a69b31b9a4c7a54da6d9308aa4a6a5eea6e92f59a400a6c9a62d2e62a44ba623a7bc2c0ca45aa6d6a7802b82a3b0a62ea8042adda248a6dda77b28eea26aa6f3a7462753a346a610a8e5257fa24ea61ca8a12463a24fa6d6a7df22b3a11ea667a794204996fca1a7a4721b6a28a42598228a97c62d8d2cb62a0ea10730d02e522d4ea3a130b32f522e26a509313430bb2ee9a52a317130222f6aa6f5304830fd2eb7a6872ddd2c492ceaa3741e2e1e7b1c149db399b29c729d4398e4984597c499c499d894918f0c9177992b920412e4104c995e8c1a180918c6981a0308191c1a2e98e30e061b1b1ce897ad10701b9e1c47971011411b791ca59653111a1b241c26968a11ee1a171cbf9511114f1a801b45950f11d2194e1bde94e2107219ce1a8a948710d4180a1a2d933d108918bd1908943d1047182619a6937a0f0318e0183d93f30e3e1774180d948f0ed2163818ac93370e0c16d7172d92c40d921508178a910f0d44157c165390c30cb91441162c90920cdd1412169f8e820c6f14dc15638e0e0c2e148c15b68c5f0d301446156a8f5f0d301446156a8f0000c208690b1e820000c208690b1e823ca0bc9d439d5f2c6da14e9fdf9e0f2f349f479357145f30259b2f224a251f32b6999c213224a0327fa029a04b9f3f32c9a299a286a206327ca4d2a4d6a589318ba495a522a6cd30c8a4e2a54ba7f22fb9a447a617a73c2e72a427a661a7f02c62a447a69aa7b52b51a402a71ea8532aafa32aa74fa8dc28fea291a620a84727f1a258a6fea7942538a2d9a55ca7952408a2a4a5c3a66723c8a142a560a6c0212ba0e9a458a6391e79218f18ba9c3410932c762ba129db9f0830fd2e672d26a414312e30c12ec6a568319830a02ff6a6a431cf30d12fc1a7d53106311230a0a78930a62f592e75a54626a6258624e89e6c99e79c5c9d219955991499c09a4d96e696bc9598979897cf955c8f20948a9877937c0ece09fb97558f7014951441988b88f1171b18f396e8028b180e198b96e60af8189219d695980d60199b195c953d0e5a19371afc95fe0f6419501aca9422106019571a5295960f4619e219ef94f00fed18e619a694860f64183d1965940a0f2318fe18d494bc0ed817be189694670efe1630185594060e9416d01701932d0dbd1543178291d30c6015b8162c90340cc214ef15e98f0c0af01334157f8faf093c134714b28eb308d011d2131e8ee109f8111113b891320dd9135e15bf8e320dd9135e15bf8e0000e309b20c16020000e309b20c160211a07e9c8a9b7a2c65a0479fdd9e0d2f40a03da0ba9d8b30bba295a300a43a32b8a329a48aa1e1322da481a4e5a443325ea468a42ea6f331b1a439a512a76e31b0a4c7a509a78d30b0a41ea6f9a69a2fa6a412a6eba6162eb6a46ba657a7cb2c9ea486a690a7ab2b37a44aa6b6a7ec2914a427a69da77c28b4a3ffa578a7272731a3e8a562a7e025d4a2c7a53da7822460a28fa53ea7dc2212a26da5bba6f620eca14aa5dfa6fd1efa9d3ca246a49e188f287627f524689d352f002eaa2c81a441316730102fe3a6e831ec300430f9a71e3228313d3055a8713277315c3064a82e322031203082a7e12b112bd529c7a25697169ddb9f579e3d9ae69c429fea978198cc983d9a7b97da962e941897569887946c087c901c98c7912813cb09f797048f5a162916889765882f18c0178f96ae0230187918d69668076918d0189696140a8e1830196b96110c941852190496ac0b7f18de185996b50c26188418e395570cde17a5189395ca0c7b175c183c954f0c04170e183794df0b1e16e716ce93810bb31569163e93ea0963151516e1929d09aa14b115719174095a14b114eb90ba085f135f1494902108131292136290d507f211ba125a90c307b7110f13d490f1056e0f270f8d8cce00ed0a0e0eb68cce00ed0a0e0eb68c00007801330298060000780133029806959f469c469b3b2cd5a0239fd69c322fcda039a0a89d8f3084a0e89a5c1c2032c5a1fc942f969f3201a310a00da1ff3163a447a230a5aa31cca48ea5d0a6113153a519a679a772300da552a6cda7542fa1a427a692a7cd2d71a47fa673a7b02c8ca4a5a615a8a32b5da4d6a608a8172a28a480a6d3a79428e8a331a6c5a7db2652a3f6a5a0a75325f4a2baa54aa71b24d6a298a533a7512265a26fa50da75221e1a169a57fa60c20b9a0c1a4bba53a1d501e838e169e7e8f0d2d502c7a2a34a24a318b30052f5fa64532493146302ea895329231b030c9a8f132e631b130caa867337132423108a92f305f2f482ec9a60f14a58a409a68a0ab9abe9cf69ea498e699c399e29b399a2c9846953999069a61979408a093b799c495ba13f209939997918a17f7154e98728b7218471909981e88e11863195e97a8827518da18a2966a027118eb181696aa062e18a518bf9512062b174f18839497059e1635172c946305aa15bf16cf932c055715ab155694dc04fc144d15dc9269043c146f147f920804221333133393ac03ba12cc12cc9275037d115c1261912f03c411dc110e90ec02a9105b11c48da5024a10e210428d81020b10a610288b8902ca0f6c101588cb00810c080eae82ce809c086e02138ace809c086e02138a0000080ccd0e6c870000080ccd0e6c8721a0029ac8914b2cffa066a0ed9efd2e39a1539ea79a9c3004a2ad9dcc15343292a31f9e9d9c953270a362a210a1033212a429a361a3943182a461a598a61031c2a4f7a550a76d30d3a419a69ea7292fc1a469a6eaa7b22d89a4aea6baa7952c62a44aa6c8a7162b3ba439a6d3a78c29c6a32ba6d8a76c28d2a339a6e4a7f726b4a32ea6bda77d25d9a2c4a532a72a248ba286a5efa6e02131a242a5b4a62e2003a216a583a6681e0ca1aaa41da68f1c4d9f0aa35fa4a914bf269225b122d29c6b30b42fe12dd2a5a4328e317130bfa81133ec31de3082a95e334a323231d7a90c34f3329b3131aaa932d231e5304ca9ad227d223b21479e609be69a599e2096839a199bbf9daf98a398ce97ef9a7c983a96ce8ee296f8980d95610e6090be98e69286146b091499d39004167014c198498e911669158298c28cd0171916b798488a0a1780164098f5864a17f816e69779862c168f166f970982c4154015dc969085d114e61469962785c5139e13329576841f13ba11c6942184b41141119693f0837e10b00f1f9468864210350fb29271869f0ede0c5b912886400e870c14906c83ff0d120e128e1983450cef0b8e8dd782300d730b738bb4828a0bdc0cdc8cfe83fa019c87b58d6a88208a978eca8f6a88208a978eca8f0000600af41019150000600af4101915b29e149c46983b2c6fa060a075a0c02e31a009a0c89a693008a101a1439ce8310ea32fa0879c5f3208a21ea100a1f0312ca302a434a44b314ca49aa5eca6c730d5a4a6a6afa74e30d4a45aa67ba7292fe5a459a65ba7c02dd2a490a68da7962cc4a47ea6a3a7252b90a4b7a601a8c82910a442a6d5a76528aba313a645a7b3266da394a5fda6242533a368a5c7a61124aea23ea5a2a6d2217aa2d5a471a6262013a2c3a473a6301f5fa1a1a422a6101dbba03fa4bba58c1af09e53a1e8a32c8e382c802bb1295ba359328b31773020a9d33385325e3193aae233ab328731fdaa2f343f33d031bfab37345933d83182abbb293a2951282ea2e8998d9ce79eaa9616998099f79cc6976698929560998d983c970e94329832986d95720e5290af980593a914fd123e99af913c169d149a997a90a3153b14bd996d8f3515ed14a798398fd5145e142098568d85141614b797b78cdd14b5134797498cc1132713c196de8b4b133a1159969d8bcd11e410f0953b8b6a10790eda943b8c600e350b8194188c430c8b04d394bd8bd4084e849394f98a7d081384a4934a8ac602c3893e92ee8998025e89d191da8978821b8c84908c895682e68b1b8f3d893282648ba68e82891686c28a158ef489478ddc908a8cf489478ddc908a8c00000000768576850000000076857685619cbf995c9c8b2801a0f3a0eaa0152ec0a0d8a0729d653039a18a9fde9eb63197a2d79df395473229a2c19f49a2ce318aa3c9a26ba54c3127a471a5cea6b2307ea461a683a73530a1a419a6b8a7e82e8fa44ea669a7552dafa42da68da73c2cb2a470a69ba7962a48a40da6a7a73129b3a3d1a572a70a2884a3b7a5fea62326dfa26ca5fca6e0247ca244a5c7a6112495a261a5eca65622b0a20ea5a6a6da20aba2c3a430a6771f5ba2a0a429a6721eaea189a405a6ad1c45a108a439a5da16cd1e271af99a969ea730a02ffb2d25a82634c1328b317fab27343c33063247ac4734473324328eacba340e34703212adee2e522e032d26a9fe981a9885a0f29fbd994f9abf9e879a5799fc97009c519a8d98129429992999df9675089493ed984795d7152213a4985e937316f8154f98d091e2167f15f1977e9043173f166197fc8e9616af15c197348d5c1532151597c98d4514e413b395478e951286112095e18da30f550cf1937e8e190d66056d932b8ed1091585fd92cb8da5032b8b9192528d6c83ab8d3d92c18cbf88788fde916b8c7288098f87910e8c228843903591da8b728a1b8ed98f468b178cff8e718dda8ab38b7a8e328b9f8aac8c178e1088598a698d27908e82da88178ac58ba886da88178ac58ba88600000000ed82d38600000000ed82d3861e9ce7975d9c2f28629fa59ed5a0fc2d71a0029e5a9d3f30bba1519d6e95a4311ea2b49d619c1132a2a3afa18ea55831f0a375a353a6db3099a443a59fa66d30f6a438a65da7d72ff5a4c8a613a87b2ea3a4c8a60ba8fa2c92a4e1a60da8012c8ea494a6d8a74b2a4fa440a67ba71229bda3daa513a72428aba3a6a531a7a026dfa3bea544a76b2599a3b5a530a7442417a3a0a530a79d2275a233a5e7a64f21f1a1c2a451a6621f6ba16ca4b8a5721d08a128a45ea5941cd9a0b4a3f8a43d1c02a05ca24ea4d8199027d6260725b5a120331f32e53082ab68347c3339324aad7d34be33b432bfad183557340a336aae8832b331c930e1ab4e99689520986b96fa99f49ae49cb190f398e39737990394b497ed8e4e9594931396a10edc892095f49469133810bc97b3938c140e1070973992451584123c982f91e5141a12ef97d9905e144911ed9786900b14cf103697c8904112860de7967d90850ed6068e959e90240b4e86e895d0906184458f74959490158ab6900c953090ad8cdd92af949d8fbf8f839355941e8f4990009400941a8faa8f169436938f8e32908293a092748efc8f29937a91fc8d808fc592fa91d18d0f8f4792cc90918db78ed8917890808c548f9591ea8d598e7991c0926d0a598e7991c0926d0a00000000be02be8200000000be02be82be998694359c44289b9ffe9ca29f342e3da16d9fbfa00e30c1a268a20ba32a31f6a2bfa250a46f31efa233a449a51731daa20ba35fa4b230c5a3efa4c6a54b3025a4daa5fda6922f40a408a6b4a7202e84a472a6a7a7d02ca3a494a60da8a22b87a486a6d6a7022a5ea428a686a7b8280aa4d1a571a7bc27e7a3aca53ca76a2670a37da5f5a67025f8a24aa5d0a64524aaa23ba5bea610235ba215a5bba6d421d0a1eca45aa65c2052a19ca4faa5c71e08a155a4c6a52b1daaa00da464a5501c96a0aaa333a5c319bf9e60a16da2c80cd32c582cd12a73a76b3471334332e3ad8d340034ae32b8ae5435b234d53311b0b9343334ea323eae589b389a959f569dcf99019c35a01799659a0d99be9c2f9af0980194ae9ae599b1967f115595b699d2940618191577992c946b1847163b99ef92ae185f17069994916a181018b0980c91e9171116b098cc90f214fb127a978f91ed105f07e89649921b05088d4b962792f98ae492fb942b92698fb69342958f915691e194e1941691b992bd9589948d90e892e19533948a904f930696dd933c908d9324965e9313903193be95f991089072935e95b990de8f29930e95478fde8f0193e4947a8dbc8f5493a894728be28d56928194358b0c8cd08f7e902f910c8cd08f7e902f910000111209127b0d0000111209127b0dbe87c41e5b218628469aeb1c3e1e302ee1970e22c323922fa29a2f2235209f30489c83217520fa30309ea41335a0c630f0a0eaa026a25e3009a3ada40ca61c3055a4b3a651a8362f3ca4b1a648a8a62d3ea4cea640a8662c64a4fca625a8462b2fa48ba6e1a7c8290ca4e1a51ea79e28b4a372a5e6a6bf27a9a33ca5a8a6652617a31ba533a6cb24aaa2dca43fa60e2452a2fda499a67e2238a21fa5dca65e2108a2d8a4cea64a20ada164a430a61f1f70a11da497a5821dffa03fa3d9a49d1c87a047a214a4731c9b9f76a1dba3491c5c9ec79e23a05b1366306a2f292e29abe7344b3456337ab05735b5340e34ffb07d340d34cd32bdaf1d9c6498c69d0c9a249a209c129e0691e9996599ce9d4d948698d2887c9814943e9456181a1786959c91e619a519c7967c909c196419e797e3904f19751875989f9080182217dd984f90671773166598ae904d143e13c3975b91e4104907d496ea91108527900f9701936392c9958f961d948f9416980b962d9433952398a195109441951c98909405944795109834943a934395ea97a29208923c955e972e921691e194dd96c391b1907c946496899075902c94ee95359007905693be95308d0590b3939095068d07906793a9954e8ba68f0e945b972690a68f0e945b9726900000c811bb117c8c0000c811bb117c8c049d549eb7a0e529699c999bdf93362eef9bbe12501f822f2c9dfd99be1b0a31ba9d8b1fdb1e87312f9ecc19f794ed309b9fcda122a26d30a6a135a4dfa5fa2f8aa3d5a6a0a8d32e55a4c1a70fa98b2d4ea4aea7e3a8752c17a457a793a8d22a8aa367a63ba8072907a3d2a582a73228aba234a5f3a6f32698a217a591a64f2650a2a9a42ea64025dea1aca49aa670241ca234a505a7502361a2b2a53fa7e8213ea2cea579a7fb2016a27ea543a768207aa1b0a4fca5f81eb2a0a4a3e2a41e1e55a020a395a41c1e419f07a1cda2801d689dde9d23a0da1ca69c449daf9f8e0c4b308b2f222e04ad30359b345033d2b141322532043194af5ca0e29cd09dfb9a799c879e8ea1b40a199a999a669cb40aa797dd080794718a39946f181f17548ad28fde1b111cbf930c89fe1c7a1dcd964683cd1c9d1db69867880b1cc61c9899678c4119d51867998190bd1540110a9a1593250c9d926f9946948c912c97da986194ea95ae991d985894e097799aa596819409981f9ab6946594f297f1998a938b9407989199f99130940d987a999b9192937797169934915192cb96aa98d18fba912b9653983e8f4c91e7951a98578df0907095f3972c8d3a9189958497e58c229008951897d88c2f8fa292f294be8d2f8fa292f294be8dbf078418ad1bfd9bbf078418ad1bfd9b469f68a422a5c71a209e7ca04b9df62c689c2899581d8c2fb59d0f9dca1b1231c89e52947f158a316fa04ba0c3a2e13061a1a7a4bca56730c9a31aa837a9d12f0ba4bba81faa642e6fa486a816aaeb2c5ca42ba872a9cc2b43a40ba807a9f4292ca40da76fa86f285ca34fa517a7a52736a246a485a5dd269da10da43ba5ff25b4a19ea4dea52d2525a269a5dea6682453a20ea689a7422335a217a6d2a7e32115a2e7a5a3a73221dda187a53fa76c204da10ca5c7a60520c0a07ca40ba6471f1ca00aa39ba4161f989ecca085a2621ee29c0b9c5b9d5b1de69b7e99259bb317469eca96bc9bf295ef9e8f9c429cf79d65a0459f44a1059b789c3da0dca18c18ad9dde9e75a05b18239a049c319efd132c96e5116898698afd92cb1a4219db909e8c151ee11dad95aa039e1e161f43998003331e821eb49a008c711cca1cbe9a1991b717b217a0997c93970c2d91ec988294539213988e98ec9403966399189822958f97c29950968c955198bc9a9595c295d698919b4095e095e7985e9b559498959498d19a5f94d4941298349ac3923f94b297b8997a92129489978f9975916293549760994691bc923397ff984f906a92c596a19829900a929c966d98f38f009113963598738ea6904c958a97b18ca6904c958a97b18ced07ff1800192f0fed07ff1800192f0f429c47a0d3a0e028c09e1fa3d6a3792c82a04ea53fa4ce2ea29fb6a2c59edd307ca0da9f4b1f9b3167a26da430a5b13011a330a7a7a8fc2fd9a3e3a87aaabf2ea4a4baa967ab932d05a568a9b9aa412ccaa41da94daa982a72a4c6a8e9a93329e4a388a7a9a85f2775a2a5a434a6a62534a192a0e1a1bd2594a0ef9f1aa1c625afa138a5c7a68e2448a23fa67ca811235ca21ea634a8302158a212a613a82f20fda1d2a5faa7d11e9ba1aca5cda7231e7ea170a5a7a77f1d19a122a54fa7eb1cd2a1c0a447a6a11ca0a056a40ea6d91c309e869f5fa4241dba113422d82397147b9b489a12a00e99e99c15a286a47295739e9ea2a8a4058a499d6ca1cca31d10539c4ba043a20316759a8d9cb99efe179c98fd8ecb993f185398a91c291ead188412d6202222220b1f1675211d22c8995e150421d921789c780d0d1e291e4b9c5392c515f2116f9b6896339453985c9a3098ad98229b4b9965987f99f79b6197a9971b9a449c59948a96239a4b9cd6930c96ee99159c32936e95b499d59bad9221955d99669b4f92d09410993e9bfa9152949d98989ac290819342982b9a72902b93f397df993c90d4926e97cc99f290849250979499eb90679218976999c6901492809615996b8ebf9141967a989b82bf9141967a989b820000d5188516418f0000d5188516418fbf9e21a55ba6b627b0a2b8a875aa752aaba3b2a91eab5a2c8fa115a779a8c22db99e899d099f443045a3fca80caad22e09a539aba0aceb2dfca412ab5cac4f2dd9a462aa17ac522c15a5fca9a1abaa2a28a5c6a93aab4e297aa43ba990aa0828daa34da89ba90a266fa18ba261a5cc24b79d2b1913984826479d3a1674914e263aa13ca7f3a83921f1a2e1a69da8ed1f6aa279a620a8641edfa11ca6e8a7a31d9da1efa5aaa7fd1c67a19aa553a7d01adba076a538a7d918d4a04ca5f7a6e6178fa029a5cca65a1437a0dca471a61f14049faaa419a69c10e69d28a4c4a55c106b9df1a376a57b108f9d15a30ca55d10cd9d4da263a42609259eaca100a4760f539dd6a0a0a24414719b7e9d2ca0ad16789bb798689abb193491211c8f1bc719631846236c242c177a1b0d25462636925618f12267241a9c0889cc1c141d539c37987890eb979d9baa984a999f9cbe991b983c9b689d21983398e49b8e9d7e96b797439b7a9d66950997cd9a1e9d52946d96769ab99ceb92e195059a799c8d92be95d299469c42925e95da993d9c1b9142958299059cfc90d3943299989bb38f6294bb98af9a6d8de7934d98129a3f8b3093fd97a499f18a7793c7973999f58782926597e6987f8c11920697ac98868e11920697ac98868e0000211bce1b930a0000211bce1b930a419c86a276a41b243ca3fba86eaa1e2980a5e6aa29ac492a2aa5daabf0acd92c7fa5c4abe0ac282e7aa565ac7aad6d2c0ea506abc1ac0a2c38a5e8aa7dac792bd6a4a8aa32acb32ad9a436aaebabb52980a4cca944ab732842a45ba9d5aae326d8a3b1a839aa7b244ea279a7bfa8d11e319d88a1afa3758f7e9cd99e60a111983da23ba501a7f58fb9a28aa64da8381414a20ba6fba77f19dda1d7a5b7a776199ba1b3a592a789184fa16ba542a7671807a14ba5f4a60017e1a019a5b3a6d816a7a0dda484a665137da0c0a44ea64113879f0ca467a51f098a9ceca09fa280873599d79d069f0b8e7f9a5b9faaa13693049e92a1c4a35694889de3a113a40e914f9d64a190a343119c9ce0a03da2d4140c9c3a9e04a0551730958e08139ae31a1f1c6025e925551c22208e28a029ce9a991a4e24d22401a00194eb16f5120a9d7c973499719b3099ba98789cd89ee097eb98b99c2ca04b9751996c9cd09e749555981d9cda9d2294a997d69b9e9def930f975f9b479d75927c96ca9aea9c27920696779abb9cee919395269a7f9c80923b95aa99359c3c92c8943b99ba9b16919494de981c9b10907294b098999a568e55945d983c9ac88c7d946d98d499908ad993e9977599538afb921a97fa982287fb921a97fa9822870000dc19101ceb140000dc19101ceb1456a087a626a8da250da27ea8d6a9932813a346a984aab0282f9f8da62ea8f5267e9c14a12ca3092388a37ca8e3a9ef27b7a4adaa52ac562992a486aa2eac2c2976a41faa01acc32859a4b1a96cab282849a476a930ab712726a42aa9d3aa95265ba3c2a80faa9325e9a08fa642a81724cf9d0aa3e0a4d320f99d93a1eba3271c32a082a351a57d124ca1f5a4a7a624135fa13ea5f9a61b1556a13ba5f6a618152aa11ea5b1a62f13e5a0f6a476a60913ada0c2a439a61f106fa08ca40ca6690926a05aa4eca54d09ec9f22a4afa52989789fc4a380a5998fa89e74a2b2a4c88e779d5ba178a3b5909c9cf7a0fda26790939cfca0f4a22292dd9c0aa12fa3e493ea9c17a122a3cb94c39cf6a03da3d695c29cf7a0f6a29c95859cd69fdaa118147198cb1cd91d5c1e0925542ddb2e9b9d139232195018779e5b99789da79f2f97ec9acb9d9ca01696b899c39d3aa0d4941a99529dc69fa4921099f49c329f21917498949c8f9ec69033985e9c209e8c908397079ca59d4890d8965b9b609d14904596cb9a049dbf90d595589ad69c94905e95149a7c9c569001958a99359cce8ed2942199a69b7b8e9b94d898199bca8c6f9499989c9a868a71949498089a1c8a3b945598f9990c8a1b93db9720994f821b93db9720994f8200003719e21ade0d00003719e21ade0d97a09aa627a84c2444a1f2a7fda895269ba069a7bca8cd26ac9fb2a648a8332686a097a649a8b225b1a110a886a95d26e4a203a997aacc268ba35fa9fdaada26cea344a9ebaa8426a2a31ea9a1aa3c268ca3fda851aada2578a3a8a8dfa95b25a7a231a841a9902424a1c2a65fa8ab2227a03ca51ea7742028a04ea4d1a5c61d7fa0eca34ba54e1caea052a4bea5e019eca0d2a45da6ba17e9a0f3a49fa66516a1a0e3a48fa6ff1475a0d3a460a609133ca0a5a43fa6221007a051a4efa54f09939f05a47ba50d09119f6ea31da5b5088b9eb0a29da46008199e0ba229a40188999d8fa188a35c876c9d40a11ea3378d099defa0d5a2018dbe9ca7a0a7a21090b99ca6a090a20290b89c9ba096a2a191749c83a08ca23293ad9ca3a06ba26194749a8c9e2da10894e20be30fa412588b33930098c099d58e389a0a9fa8a05f94c599779e69a01a947699959dc19fc8922299359d279f7991c498d59cc39e63909798a59c829e4d904e98749c309e3e902e98439cf39d2990f897009cc09d1a9088975c9b619de290f696d09a1b9dbb907796369ab19c7090be9595994d9c299018951d99989b258eb694f398c79a5c8c7494aa989c9a148a8694b0983f9ae18955948998029aef8965933498a299b48965933498a299b4890000bd19671bec110000bd19671bec11ad9e1da549a6b02221a0bba631a8d4244da08fa625a826259ea0a0a63ea80c25b2a118a795a81725a7a2c6a704a90d25d8a22ba866a927250ea362a8b3a912254aa37ea8d2a9d2243fa378a8cba9a624c8a239a871a933241ca2bca7fea8a3237ba112a7a3a86e221ea183a646a84e21d3a0e6a5d3a7a91f9ca056a518a7d61d6da0fba49ea6e21b59a0b3a441a6531952a083a40da62e1648a05ba4e0a5aa1442a046a4daa5dd0f3ca02ea4c2a5270921a010a48ba508890aa0dea360a5538fb09f7ea341a5f7915d9f3fa31ea5ce91e89efca2e9a4a691869e9fa2b3a46891229e1ea26ba429919b9d85a101a4bf90fb9cffa011a34090a69c96a06ca27e91539c7ca036a24f911b9c76a035a2d292fc9b6ba03ca2da92a09b59a017a24b919c9b07a0a5a10f91c499ea9cf99e378dd591cd96669892881195229a709c1b8cc499609dae9fee92209a5e9d02a04d9545993e9db69f4494fb98119d949f6593a798cb9c079f3f925398699c719e09920798259c019ed9909997ca9b819d8d8f3b97549b289d6790f696ef9ae09c3e90be967c9a8f9ca18e2496ef99309c388ebd957299c99be78d67950c993d9b5c8cfc94e0981b9b488c1a95d698c29a298cc294bb98c79a178af9933c98689a568ef9933c98689a568e00000000000000000000bd19671bec11ad9e1da549a6b02221a0bba631a8d4244da08fa625a826259ea0a0a63ea80c25b2a118a795a81725a7a2c6a704a90d25d8a22ba866a927250ea362a8b3a912254aa37ea8d2a9d2243fa378a8cba9a624c8a239a871a933241ca2bca7fea8a3237ba112a7a3a86e221ea183a646a84e21d3a0e6a5d3a7a91f9ca056a518a7d61d6da0fba49ea6e21b59a0b3a441a6531952a083a40da62e1648a05ba4e0a5aa1442a046a4daa5dd0f3ca02ea4c2a5270921a010a48ba508890aa0dea360a5538fb09f7ea341a5f7915d9f3fa31ea5ce91e89efca2e9a4a691869e9fa2b3a46891229e1ea26ba429919b9d85a101a4bf90fb9cffa011a34090a69c96a06ca27e91539c7ca036a24f911b9c76a035a2d292fc9b6ba03ca2da92a09b59a017a24b919c9b07a0a5a10f91c499ea9cf99e378dd591cd96669892881195229a709c1b8cc499609dae9fee92209a5e9d02a04d9545993e9db69f4494fb98119d949f6593a798cb9c079f3f925398699c719e09920798259c019ed9909997ca9b819d8d8f3b97549b289d6790f696ef9ae09c3e90be967c9a8f9ca18e2496ef99309c388ebd957299c99be78d67950c993d9b5c8cfc94e0981b9b488c1a95d698c29a298cc294bb98c79a178af9933c98689a568e00000000000000000000000000000000e21dfa21c4249826ec24fc269c28f62ad2253829362ad22ce725e328792a0d2f5f1e709c7b236b30111c7ea5e3205630e12345205c298c312828c42bf52c1e3158273e2c972cf92f8226962a912bf72dce25bd29c32afc2cbe24e228f729552b23241728052905290a19b3a134a49f2870967aa780a8d7279ea232ad24af9729722268256726d022222561274628b221ff24aba5d1a80924a4262ba718abd115dd2b3e2c8f2b499b992c8f2c532ce49c2f2dfd2c8c2c3d9e652d4d2db92c1f9e932d582dbe2c0a9e942d612dcd2c599f832d4f2d9c2cee9e702c5b2cb32bff9ddd280629bc289f9a51214f22ee22ca9279889da159a38a17441b9f20ee20ae14b319262042216d0d8518991fd9201d8d7f18251fb6200d905518d61e64204a910b185f1e24206a929d17041ec51f26926d17e81d951f00921917881d121fb891e116441dbe1e74919516ef1c6c1e5a922d169c1cf81d0a92dd155e1ca81db89182150a1c5f1d6b92fd14b61b111d34929e142c1bc01cde923f14ba1a931c9d921914741a441c5292ad13fa19e31bca928013ad19601b5992ea124119d61a5491c312f418a21a7c909512db18671a508f3e129318dd19a18dea114a1893192a8c691122185a19b589e9103517bb18a6896012a217c4180a070000000000000000e21dfa21c4249826e21dfa21c4249826ec24fc269c28f62ad2253829362ad22ce725e328792a0d2f5f1e709c7b236b30111c7ea5e3205630e12345205c298c312828c42bf52c1e3158273e2c972cf92f8226962a912bf72dce25bd29c32afc2cbe24e228f729552b23241728052905290a19b3a134a49f2870967aa780a8d7279ea232ad24af9729722268256726d022222561274628b221ff24aba5d1a80924a4262ba718abd115dd2b3e2c8f2b499b992c8f2c532ce49c2f2dfd2c8c2c3d9e652d4d2db92c1f9e932d582dbe2c0a9e942d612dcd2c599f832d4f2d9c2cee9e702c5b2cb32bff9ddd280629bc289f9a51214f22ee22ca9279889da159a38a17441b9f20ee20ae14b319262042216d0d8518991fd9201d8d7f18251fb6200d905518d61e64204a910b185f1e24206a929d17041ec51f26926d17e81d951f00921917881d121fb891e116441dbe1e74919516ef1c6c1e5a922d169c1cf81d0a92dd155e1ca81db89182150a1c5f1d6b92fd14b61b111d34929e142c1bc01cde923f14ba1a931c9d921914741a441c5292ad13fa19e31bca928013ad19601b5992ea124119d61a5491c312f418a21a7c909512db18671a508f3e129318dd19a18dea114a1893192a8c691122185a19b589e9103517bb18a6896012a217c4180a076012a217c4180a07fa17f91d28218c28fa17f91d28218c2845247c262a28c32b46232d24e6249d2ec1202020e220ad3152a42ba8b7a80133cda44ea9f6a99b33949d5aa122a2063492245b2736280934bd252f29a42902323b2576289b2975305b241a28de28dd2ec1221a264527942c452064205d213d29dc8d04a632a8c426a79e6ca9f8aa1a275fa059aa10acc0270292b5a31aa5dc25cb1c95a07ba22625ee2113a752a904246128e2a0b2a7f193032cf9296228b3a0e22c9b2ced2b38a1652d322db12c42a0d52d8b2d052d21a0462eee2d3a2d00a0702ee72d1f2d2aa1bc2e532e5e2df0a1ff2d7e2d9b2c17a1f52b4a2b312a92a04b245e240b24e89b298fdb9c749d04187813f91a5d1c3c1a1f18861e12204f175618c01e5b20b6113418cd1e572026881318631e38202994fa17221ee41f9493bc170e1ebf1f6d94bd17e21d7c1fd392f916701d101f479265162f1d7c1e3993fd15ba1c231e0994b2157e1cd21dab936915491c8c1d2e922a15211c5a1df691e714c11b1e1db391ad14791bc61c74919814ed1a871c2d913b147b1a2c1ce5902014f219a51b9c90c4135719131b4490f91215199a1a18902012b918351aea8fc6118918ee19c98fdd114918d619ab8f0c1228189119898fd4110b183d19329053126c178218808ef310f015b817ce8ef310f015b817ce8e92981a99c110d42892981a99c110d42852206f23ba24ea2cf2174c9bad158a2fc6933b9d2d9e5d3264a569a8f6a81f34bba4c4a7a1a99834cca47ea7e5a8483476146e215f1f4334cd1d20233224b232501e242333241b312b1df2212824702fb21a701eac1f002d310e389c1b9ffc2a2c9a07a594a67a29229f70a86ea98128fa9f98a8daa916288e9ee8a641a88726f49ad6a57fa793252b1d04a526a8af2322279c98f7a4511c802bc928f7254d99fc2c3a2ca42a969fbd2d342d402c26a2462ea22dbc2c6ca3b12e0f2e682d0ea5072f7c2e8e2d85a48f2fa82e972d8ba4fb2e422e402d33a4982dfb2c192c17a2ed27ed26b125f19a341540913d8c3d0c0995a8963b98a3119610391a091c268afd14ec1c791e99896b16ac1d431fbf8fc415161d7c1e4b91cc15ee1c711e5392f9152f1d931ec1932c16281d871e76930d16071d611e5294ab15cd1c231e089463156f1cba1d84931015441c711dae91da14011c1b1d55919814911bcc1c01913a14361b901cc2901814b21a4e1c7e900e14651a211c4f90e813011a931bfa906213bb193a1bbf9025134419df1a8390bf12dd18611a1a91cf119818dd19d6902611081845199b8f9310fc1699181a8f4610d0165618f08e491087162b18aa8d7010f0169f18d68d6b107b162f1893876b107b162f189387ff80179080920a16ff80179080920a16118f2019461d272c2f9f4aa0479fea2f0fa077a3e6a29732e9a44ca733a99e341ca6c8a8f5a9723579a401a60ea81d35d6a052a13aa46a34609ff09fa4a0e732509ed39ed09c5d310c9ced9a2f9c0e30289c5ba00ba08f2d389d83a2e3a3252cb29ef8a40ea66b2a67a0bea619a8c32847a133a7a7a8a627d1a0a1a7b6a85826a4a0a4a78ba801252a9caea67ca84123b324f59732a3d11eaf2ab42739247092062d792b5d29a1a0ff2dde2cf32b06a3912ea82dc12c9ba4f72e312e3d2de5a45d2f862ea02d31a5fb2f072f002e7aa511302f2ff42dbaa5722f932e812d07a5862bab2a9029c0a1601dac1c811c4d950399119df79d958ab391a58f4a8ab890a60cda19771bfa949512101cf01c6e980e140e1c2a1dac976014581c861d01979915151d8d1e6d96dc156d1db91eec95e015181d7b1e8795dd15ee1c151efb958015971cbe1da6951215491c581d4295cd140a1c091df4948614661bc11cae942614161b871cb8930414bf1a431c449392132d1a031cd6924c13df19581b7a9295125a19e41a13922b121819521ac491b5119d18fb199e90e5102718531942909f108917fa18848e3810e1165f182c8ec80fbb160e18a38ce80f4e16ca17748cbd0f0a161e18d68e46107e167818e08f46107e167818e08f00005982848c020200005982848c02022c9bf49da69df429cba19ca4dfa3c82f389c19a5a31d93313ca0c5a93ba32a3312a67da96ca8503400a2f3a9f4a1d0332aa4b0a7dea1fe33aaa233a3c6a09f3274a269a466a4403171a1a3a38ca411305da1c4a415a5c02d85a123a538a6652c88a112a652a77e2acfa1e8a64fa8c028bfa121a7b3a8672795a16ca7b2a8b6256ca2a3a7bba87724b5a001a775a8a5228e1a41a3aca5301eea281825f3201792eb2c812b402987a0402e092de02bfba3d62ed92dcd2c2aa54e2f532e522de0a5df2ff52eeb2d46a64830752f452e84a66330b32f722e7ea66d30b42f702ed4a5162e612d6f2c2aa458237121221f6b9c50971d9836989d9167950c89dc100c94f491270fb3136495df03451983199e96a00d0c19801ad096ad10ff19a21bcb95c1127a1b871c6894f713251c1a1d15944714391c401db7946314011c3a1d82943914e41bee1c41945e143f1b9b1cb2940814f11a4a1c0d95ef13c71a311cbf945313711af91b83941e13261a9d1b4f948812d519411b1b940e126019eb1ad593c011f7185c1a7c933e11a5181a1a2d93af1030188319c19235107817a9182991d10fdb1656180f90330f13161118f38fcb0ec91575173e8e500e6315df16098e0a0eed147f165590560d5f131715988c560d5f131715988c00005100028600820000510002860082e89d3c9c419b88294da24ba45da3482f34a5cca735a87b3123a873ab2fac47322fa6bba87caa8a3339a479a56ca7eb33f7a3f4a0aaa11234dda4e1a500a68432e4a49aa5a2a62031d6a3c0a4b5a5fa2f98a38ea5c7a6d12d65a34da6aaa76d2c43a3e1a632a8982a01a338a76da812295ba208a751a87b2765a2f5a682a8302620a364a78aa8c92429a23ca760a85323459fe8a5bea7e41f1d24d010849f78112f2cc8290c2858a0542edd2c862b25a42b2fd62db22c66a5b42f882e692da5a62e303f2f132e87a78d30e92fab2e2aa8b7302730022f53a8de304530fd2e4fa83a30542ffa2d02a74f283c283127e0a1e5940497629862980198c8986b9980978693f008790a73983c91110faf1012991a8e9914eb15ee982703621824198a98fc0f961a061c2a98fb10091b701c9b977711b81a2b1cc296f911f91a231c5f962912a21a391c019784129e1a371ce1959612911a071c5d96c4122f1ae01b40953f12bc195d1be994cf115c19d81a8f945411fb185b1a5893e010b218ad19dd929b10301852196e925210d017ff18f89216105f17ae18a9911b0f8f162e184c91330ea0154d171e90670daa14fb15278eae0c34146515938c4f0cbc13da14628c4c0b7b1239148182570b831262140c0a570b831262140c0a0000ba82f48afd810000ba82f48afd81339d149c6d9ea02920a26ca4fda3af2ed7a337a82da1943017a527ab03a90b3228a80bac0caca2338ca7f2a960aa0e3441a531a635a8ec33f6a475a64aa8263219a5a7a629a7c23059a4a3a549a6872f38a4e6a538a7b42d34a491a684a7572c0fa408a750a8692a9ca3e8a64ca8ed28e4a275a60ca85727cda293a614a8ba2549a3baa612a84f2415a383a6fba7ad2245a273a6c9a7d120e394fca25aa5c8190129fe26e122849e032ea92c122b6fa4aa2f152edb2ce5a51630cb2ea32d39a77030ad2f6a2e21a8da3046300a2f8ca80a3174307e2fb3a8533199304e2fcca843319330682fcda84e2cf12b7c2af3a46306c30a308cc299ad9aa995ac98f2952396828fea9081985393f911ca10fc99468e1218aa181a9a2e83fd18ef19af98780d7d1af71b6c980710541b801c17981111311b671c47981b11fd1a101ce4974c11d41af91b1898e410331a521bba960f11be19331b0497db105e19b81adc957e10b918f01975952f10631890191d95ab0f231803194c947f0f6e17c0189d94d30e171753187594280e35161018ae94d50dc7157517ae930f0d6015c916fe92e90cda145316c0919d0c991417168991830c7e148a15a690100c59145b157e90130cad136915388fea0c67147b15c890ea0c67147b15c89000008e80f681f68100008e80f681f6811d9d16975198aa29b89e3294fb949d2e00a0ca9bb39cd930d8a5d3a879a96732d9a686aa6faba033eea616aa03aa843376a4dca5cea665334fa4f9a373a6f8318da4e6a50aa7dd304ca484a5bba6732f5fa414a6dfa66e2d43a437a617a7182c65a4d1a6d9a7642a3da47ba764a8cd28bda33fa74fa827271ca3bba609a86f25b1a247a6c8a76c241ca2fba57fa712230da264a5c3a692217da0b7a438a6e21e9e21d515329f6d90982c022b4e29c9a1d32f2b2ef62c05a660303f2fe12d89a7be30fc2f7b2e79a822318c308f2f09a97d31c930f02f72a9a531ec3010307ea916323e31353089a9792f7c2e2a2dafa71b1b0f150494089fc1984296ec98ec987f979b95a3956d98be954e8fd9904199d7935c0e5c090699a39049146214b298788be3169d168298b982e117b9182b980908e4185f19ac97590cf518781922974b0e5719191aae97e50e5719291a60965d0f5119361ad196aa0ff3182e1a5d96f00fdb18cf19b0968d0f501830195b96050f1018e91804968d0ea7175a18b4952d0ebb161e186595e60d6516bc171195090da2153b177b939f0c4915bc16f892420c7e14ac157791af0a7713c214f3906a0a18132f1476918907d411cf136a902d0a72119c0fac94390c0d1268143592390c0d126814359200008880fb81fb8100008880fb81fb813e9c8d908f914c29f49e299df394932ed9999ba06d24ae30efa0bba8249d4d31bca12babff9d4f3295a230ab1a9e4b3269a470a925a3d432b3a459a771a5993186a48aa5aaa684307da4d1a57aa62b2f5aa4f6a5d8a6682d71a423a61ca71b2c89a4afa6d3a7982a49a47ea601a8ca28d3a354a6dfa7d226b3a32fa690a74f250da3fda573a71b24a0a2b4a572a776226aa2a5a569a76c2068a25ea575a61b1ebaa0d8a37fa59c15d527e825db23b7a0fe2ec02d602cb2a6a9307c2f132e99a8e9303030d42e58a96931b630af2feea9cc311631333041aa093233313d3060aa7c32a5319e30baaa8131d830c32f76a9052232214620dca0749a349d9c9eac97f5982999c29a6098e696f891c3930c99de946d08519065993392131385092b990b8f5716ea15959902880d185617cc98838227185a185a984b076718b81839983907791801190d98cd09711821199497b30b6718c118da97d50c1a18db186197820cde17a3180d97040cf41658189c965b0cee1650176895d80bf815c016fd941f0a87154616a394de09dd1406167494ee099e142f153294ba090314a914a992d5085613581435922b0800127a13e8911708fd11be12f391f308cf11271367925407ae0f3d0f989193059d0e9b10168b93059d0e9b10168b00008880c985ee8100008880c985ee81e69cc996f89a51292d9ffe9e309b832eaaa113a646a40031e3a67fab7cac00324ba5b6a916aae132f99f74a8fca0ea3281a3b0a406a1f93221a46aa647a58831a3a40fa653a77d309fa43ca60ea7212f8da49ca6bca7442d65a450a6d9a7f82bb5a4d8a603a8652a9ba4aea621a8b3283ca4a8a6fca7f726a3a362a6aaa7292512a31da66ea74923b9a2a2a525a7202197a28fa51aa7bf1fd2a2a2a50ea72d1f1ea255a57ca6d61c0594caa0e7a3398f432ca12a9b2827a4a430a32f152e9ba849317830782f8fa9bc31f330203014aa123251316d30a8aa6d32a231a330d8aae3321432f0306eabeb32e331b33066ab09284f27a22510a36999289b219dcc99be998b991d9d1d9d379845953e99a49c0697ec0e01949b9cf394f5149710679cd5903a182417d19a5e8dd618a718e599f58ae418d6186899a4826a18c118c19871021318601860983802a0172618269809061517b417e496930595161e175d964c05a415f815f89506054e159d159d95b3047c14a51443955c043c146b14019503041f133313b694aa03b012c8126f947c037e115912539329030a11c811c891ee02a31039113991ad023610c6100a907c02f30fbd0f548e9702b60e600fb18cc1006f0c930cd88780828a080d0a6c8280828a080d0a6c8200005d00f101f18100005d00f101f1815b9c16102a91c328ee9d9b939b941d2e87a3e6a5daa486305fa792ac03ac6e3118a5f3aac2a9473201a3b8aa64a4493283a2bba7cf9d7a3214a490a528a58131b2a46da682a67f309ba4cda54ca7c92e4ea447a649a7162d3da46ea687a70c2c44a426a69ea7482a1ba40da690a7b528cea302a69da74727afa316a6b2a7cf258fa301a67fa71a24eca2a2a502a7dd21a0a270a5e6a61d2016a23ea5b6a6ea1dcea138a56ea6d91bafa075a4a2a5ea14dc20391a0499859e3d2fdd2da12ccfa7af31b8308d2fb3aafa3137315330a5ab6a329a31803001acce32ef31ec305bac42336932373174aca9339e327b31b3ac3a2caa2b292a9ea65a996f98b69d399cde99159b3d9d7299d1980598169a169ae297ed8e269583997495760eb889149af092941421108a9ad5900b167214099a568e8f1665154a9ab08cc4172917c899228afe165f17a899ce868316d8163e994e8626167916f6981b86271505169e98a885d014211451982f85c31393133b9767840d12a9119996ff8399112f117895ce8369108f0f21955986e60e160d52947986ab0ee30c27943186590e6d0ef8916283ae0c1a0eaa9105853d0ce80b5990be82fa0b650b11905a845e09ed0a9e8f938500829682339098887d882d87c78f98887d882d87c78f00002c03620a040d00002c03620a040d4e9ae59583973e29dd9d35a0fe9ac22d4a9c8fa41624223060a2c5abeea4993093a485a92ca9cb31cea144ab20a61232e6a12ca8bea0573213a35fa503a558314ba41fa6c9a6523051a4a4a51ca7c12e75a44ba657a7202d96a46ca612a70c2cb0a469a68ca7392a7da490a6cea7a02804a45fa69da7f72696a3f7a523a719255ca3a6a5d1a6362317a345a597a63a2191a223a5a0a63a1f39a2c1a484a61d1c53a2bfa453a6011a6aa2aea4f8a5d317e5a039a485a57d948525d823731f98a211315030fc2e47aa76328e318e302eacc932c831bc306fac313341322031bfacad33b932923141ad28343333f931aaadab2fd52e5a2d65a9659958999c9a7c9b27994a989c9a9c9a389882957f98229a5c97ce91cc96e998a2955108419052995d93aa15d312cd99e9912b168914279a6f9093154c152f9a4b8f2415cf149b991b8fc61455140d994e8d7c140e142d99b18c32149d13dd98498cc41315132198d68b26122811bc97808caf10e20e3a973b8cc10e5c0eae96158c4f0e280b4296db8b3c0c8204ea956e8bc90846849c95e28afe02138a51954d8ac702ad890594068aa1026689a693cb897c82198c259290895482c58bd4913e893682568b8191a689158621887990bb89e88ae18c8790bb89e88ae18c8790db8cd982c986a889db8cd982c986a889ff95bf918591cc19029ed0a0639dc82c0c9da3a4d6223a3077a20aab1aa68930c9a4e7a8eda8bb3155a026a982a2fb3116a2fda4909d343282a2cfa5e2a41e3102a4cea536a71e3023a47fa501a7842e19a40aa617a7d42c1ba414a62ca7802b24a40ea629a78529f4a3aba51fa741288fa3b5a53fa79a2646a36ca5e4a6d624bba246a5b8a6a42361a210a57da6a12154a20ca580a6052070a21da591a6c91d4aa2d4a468a69f1c27a292a40ca68e1998a157a4b3a57917789f62a293a4db9c3f2b422aae2850a74b3257316b30acac06333632163145ad7c33af326f3179ade833f332ba31d6ad6934c1335132bbae7531b730642f7aac86987e901f99d19d8e9a1e9b5a9e729bde98a1960a9b0a9b5b98d4915b98bb9a699774087b90599a5495c3140b13b19a1f9468169e14439a7592ee158715d699589052161a156399ca8ea615991557994d8e8a142e14e198dd8e2413091218986e8f5311c10f5e97f58e6e0daf050a968c8f1b0a55850095fd8ed603818bb094918e8f83de8d6794018efd88928d2d94678daf885d8fe3930e8d6b8878907293fb8bc48a2590e892a98b628cad8f8b912c8b038c32903290d78aa98bdb8f6e8e798bad8c728fbe8c538a728d2c907f8c7d89038c658d658d7d89038c658d658d658cdb8022826586658cdb8022826586bd957c888e8ebd199d9d509c769fbb2c41a21aa549a64c308da40baad6a89e30b59d4baad1967d3120a0f8a84722c63127a0d5a72097f43131a27ea407a4e5307ba4a9a61ea8db2f65a4aba6fba7652e21a4dba622a88c2c2da477a615a8042b35a487a6d0a76e2922a427a655a72e2856a3b2a5d3a6862669a381a5a9a63e2567a39ea5cea6232471a38fa5b6a6972230a351a5b3a63a2194a215a53fa6062017a2ada4bca50e1d8aa12da45aa5fb1bf8a0bba3faa4481ae1a052a3a6a49018259e5aa1d8a34c97562e532d372ce6aa4c336032193145aea733ba329b31a2ae18342533e53152afbf341e34913214b0cf310f311b3037ada59912931296a399589a1b99c89a2d9726997b9559981e97f497f58e9193d0961796990edd89c3986f9450133010ef99ba9383140d10be99469242158a12369adf91e0141e12cf994291381426116799ea907a12b010ec983d91c7106b0d4998ff90650eb706f9971991ad04a18c55974a9146841c8fc196fa90ef8ceb913f969090618ea992c2952f908b8f39945895d08f35906594ea940a8f75900494f6943f8f1f9029942994208f82901293e8931f8e499075937593dc8d198fea923092118ec38f7492c691938c5d8f97919791618efa900b928b82618efa900b928b8295868a03e209e28995868a03e209e289149563885d911819479de198129da12c3ea2dda53ba70030b5a420a9b2a9453060a0f5a02aa0423108a3a8a4dfa3693110a4e3a510a78f3187a3cea51aa7b130c6a385a699a7872f01a4c8a578a7fc2d23a467a6aca7702c68a472a604a88f2a52a473a6c4a726291ea420a66ca7c027d2a3bca5f6a612269ea389a505a7d1244ca361a5cda6f523dca23aa5a6a6d52160a2fea461a6fa201da2d9a433a6b81f8ea190a4d4a5bc1d22a143a476a5a71ce7a011a433a5241aa3a0afa301a590167aa096a2a0a4ca13949d179ff0a0bc99b52fbb2e262d8eac1234f5329c31e1af3b34953351328ab0ae3422348732c3b08e300e30b72e99ac349c759c82a09b9ddd9a0e987e9c469bb6997f98b59be59afa980594da996a9ba2966e118490279bae947c186e16ca9a899457188a17839ab39322183d17e89a1f92b417b116639aec90df16d8142f9a44911614dc10979906921d0c2a07b3982e92fc04e68c4998f991c58a34911097e7919f90779372965d913391ba94fc954c918a928b958b95eb90d292c59538958d90f593f495ec94489091932996af9487903893c69563947490819377956f930990289319951e92ea8fee92e3944d90bc8fb7929d94a48e688db7917e93fe8c7a8c7690e191e1917a8c7690e191e191548f8a18611ac920548f8a18611ac920be1baa21be212d9d6312cc23bc269a2a138eeb225429602ed20d809d9a257f2f1c0fed248d28cc30b298be207b237531529dbc1ba01c583168a0ada0cea17a3054a2eba434a6152f88a35fa65ea8ae2dd9a3eba663a81e2c4fa4dea64ea8692a25a476a6c7a7ed280ea4d7a505a7a427aea35ca5c9a67e265ba327a543a6ee24a6a2dea4eca5fb2352a2a4a4afa5772217a28fa4cca5d920f3a16fa4aba52c20aaa13ca485a55c1e43a1b8a31ba5801cf2a024a3dea4431b97a067a246a4991922a0baa162a36d195c9e8fa05da2ec158f9e859d1d9e8198952c952cbf2b36abf2331a338a31f5b0683349323c31d6b0ea2877281c27e3a6a39b1a9d659fc694999b8d9a279d7b947899b098ae9de5956698de08ad954d975894f51858185898af91de19a119e1985c911019a0185699b491c7186418be995c91f9170817139aa89185150c14139ab4914711000e40993a9263054c8d1499b4922e8e4e93aa9862935e936c9658984494f8945c9853975194189565987c9730949c9559984d96df9338950998d9950d93a095e897d994cd91389553977d94d990db94c2966993929073944e96eb9267902194dd95ac9105905493a895bf904990239481955491eb8f08933595ac90798fe793da95188b798fe793da95188b00007e109d144b9600007e109d144b96209d169ed39cbe28729ace99301ecd2dd498c3a48d234b2ff0a196ac86a741308ba2f1a592a43e31fa9d9715ca967631699c7d15ad96c931fd9f4f9d49a3c2309ea16ca5c4a63d2f4da334a7aaa8af2d16a4b6a7f3a8312cfea37ca78ca8f9296da385a625a87828eba2f1a54ea7012775a215a57fa6642545a2d0a42da6992400a2aea404a69d23f4a166a451a61f2343a284a416a6922116a2eea41ba6b220c9a1f6a4a2a62e209ca1dba45da6531f01a118a445a5291e4da0a8a240a4411d8f9f5aa1e1a2321dc79e10a08aa16419e39fd69ee09faa0c399d7c9fc6a0009afa97209c13a060a0401c1b97239d4ba1829d899d49a0ef9cec9b1f9e94a01294199c3f9c249ec78a1199f7973d9aa78a9d961612640acb904294ac193019fb93da8fed1b7f1c0a97448cba1c7a1dea98ea88361c281d0c9a198d701a551b0e9afd8fef1615165b9a5392cb121608e69a8d947e853a94d09aac94049445991d9aad94de964d9a279993940798919abf9770942198409a67968b942398239ada945b943298c3998e942a94f99769998c936e935f97129913935992bc96b1988c92ea917f966b985791b391379664984b904a91ad9534981c904f91bf95cc97a08f5890d9949d96768f818f7793e3944f8a818f7793e3944f8ac116401c951d519ac116401c951d519a2b9ce49e07a09199439f7ba54fa49c2bf29956a5271fc62f789d28a9411ce32fc09bfca8d6210e311b9d4aa825276931ff9c65a49716d131f0a092a7caa6cf3041a309a837a90f2feea442a8d1a9382d9ea451a893a9392b53a448a83ea9682938a4e2a700a9ea2799a34da607a8142639a258a495a5512508a1b3a295a4d824faa067a3f5a47a24c4a1dda4f6a59523e6a164a59aa6e622d0a18aa504a7dd21c0a146a5eca6b92064a1e9a45ba63d20c1a034a471a5aa1f35a015a39ca48d1f1b9f28a1b9a2471e419dac9ca49ee91c049c1c96089998155d9c3899e79ac898ed9c5c9e9fa03f9cea9cf6a0e5a2a397c79d7ea1a7a3b70a689c12a01ba12c14759b6e9d439fda138999b699179de310c09588160894d6904291551cb51b0e94968e681e481e7598b88c591ea11e389c2c8e911dfc1d719c3f90321bf31b529cfc92fc130714319b71948e8c9594df9a1795af937998e2997e959396c2995499bb9552987d9a43981996d4980e9b8b9708961a998b9b779602962399549b09969a959998b09a4d95aa943b981a9aa8945294f997a59979941394d0977699d593e3935e972199d69233932f97f898d9919d92c5969e98a891769296967298b8902f9112961098b290eb9049952d97028eeb9049952d97028e00000e188b18209700000e188b18209740995b9dc99f7a287ea009a6e5a6ef2cb1a087a864a4d62e89a00fa907a1a22fc89d9da63320fc305ba190aaeaa13b3129a26fa99ca7a931c8a25fa935a96d304fa426aa5eab4a2e9ca4c6a97cab982c8ea415a95aaa5a2a77a4c6a8eea9802838a448a877a9f32546a3dda668a8de2368a17aa382a4ec23b49f4a98b69b452474a02da264a32c24cfa1a6a589a7082314a277a63da86c21a6a106a634a88f2063a1a8a5c1a71e1f29a153a54ca7ba1de7a001a55da7ac1ddba022a5fda6981d669fb3a35ba5b21d659cb19ceca0c61d6810d9222f2415183c96891c111c119c7b9e56a240a4a09a5d9ef3a285a49396839ddaa134a43c934d9d01a183a28f09db9bc59e87a1ea14e5993799329c90166597ae17c8130117bf90291f3e20171660157421e6226e91d1157f218722879b421340200721229d958b9e1b031cb69c5c94b806aa911b9ce7960797469a469b2a984099fa9b279a3e98b499129c5b98dd974f9a6f9c5b967c96569a869cd5950096f2994f9c5f958e95b899259cff9420956899bc9b2c94d29414994b9bdf937d94c3989c9a7f92f0934498089aee913b93de9774998b91bf9298976e99869173923a976e9986914f92fd9643991192d0916d960199f99126929a968698e68726929a968698e687000035176e17e390000035176e17e39055a056a659a8e82579a443a9a2aa282ac4a69badd2ae862ce0a852b02cb17b25f8a71fae0db0ed2b69a676ac99ad963024a6f8ac24aeea2f4aa510ac20ad352ee9a42dab94acc12cffa48baa4eac0f2bc4a4eca9a5abf02899a487a9dfaaef2658a4dba864aacf2425a4bba7fca8cb20579ec0983c9a8b226d161b26bc258c24b1a0dea695a83b2041a187a69ea8201d8ba18aa625a83d1c7da11aa6afa7271b75a117a6c1a7281a40a1c6a578a76316e0a08ea53da74e11b5a05aa504a7f68a49a027a5b7a6e18a15a0c3a43aa67b8ae89e76a4f9a5048a349e1ba49aa59089289e1aa47da525901e9e0fa3f2a43390939d40a2a1a4ad925e9dcba10ba42009e59c98a024a2d616549b549dfd9ee1180999d1915895bb19060f45203a1f7b19761a6f24742576121a1bd9240e262497cd15ac214723b59c11911f1a94181a9d86983c96e5995a9c3e99f0997c9c589a8698729b899d10995598b49bac9d3c98f797779b799daa967c97fe9afd9c56957596669a8e9ce19414962c9a579c28949d95e6992a9cfb937795c7990b9cd59249957099f29bb792c39414993a9b71917f94a398599a2b9016943e98f099cd8f9d93fb97a1993c8e8d93d1972d999b8ce8926497f298218fc591e696c0989c8dc591e696c0989c8d0000c019af1bb0940000c019af1bb094de9ec2a4c9a6b6244ea44baae4ab082954a57eacadadcc291ca7b1ae5eb0892c4fa7c9ade4afdb2e02a729ae7eaf752d8aa620adb9ae772c8fa512ac5bad942b80a52cab8eac772a1da59aaa14ac5f297fa40aaa75ab1a2837a475a9ebaae625d1a3eba871aa2924ffa2afa8faa940219fa0c9a580a70d19b399d29e9ea08695399f77a285a42a9954a298a5bfa71598a8a247a645a8ac98c0a1fba508a8109164a194a584a7750a42a16ea510a73c0af5a043a5e7a6190acda0f3a476a6de8989a0b7a431a62890959f08a453a55092ad9c75a16fa3ff921b990d9f9da0d490a49a3ba0cea14a940f9e89a1e9a35c97739f1ea220a4a195279ec7a1d8a33091649d3da102a35711999c65a0bca1fa14829a879c439ed218a00e971ef11e071dd61ed627d928101cc81ee72722298c9d7514fd20e12016a05695fd935296749c67981e9b5b9d579a3799199dbe9fc8985b99069df09f32984e998f9c999e86965b98319ccd9dbc95b597d59b949dfd940b97529b419d34944d96e59a039d7b94de95679ab09c4a9474950e9a769c16941e958e992b9cd293d2942399b29b6793a494cc98199b45926394ac989a9a499141947898389a7f8f3e946c98f999958c8293e1977199ae8dd0926097fb985b8dd0926097fb985b8d00008c19681bd51400008c19681bd51406a1b8a7fda8a52509a4b1a971ab4628a0a498abc1ac31292aa410ab58ac0929e99c36a4a0a55b24fda13ba7d8a83e2632a57babc4acdb2809a5cdabdbace328bea4ceaa71ac892894a425aaf7abaf2765a4b2a96cab542657a458a9f1aa9c250ba4eea874aaac24a4a230a85da95c2329a094a54aa74421019ebfa2b5a4ef1cd29e58a272a4c51564a034a4b4a50e90e0a004a57ca63c9004a13ba5bca64990e0a020a596a63e90aca0faa45da6289097a0c8a42da6179050a092a4faa5b0923da051a4cfa59d94f09f09a49aa57394dc9e35a310a56795f99df1a123a49e942a9d4ba12da3fa94039d49a13ca3ef940d9d43a143a3f494f39c32a12fa3cb95ed9c20a12ba3ab96c99c1aa147a3c596939ca6a080a2df93f89ac79fa3a1f5177e1f6e288829d9210523792bd42c46a4b4977a9c659e389c379a199e60a082983f9ac29daca05e98be99b89d49a0dc962999529dc79f23952399169d289f5e939e98ac9c799ecc924598559cff9d6d929d97e89b869d0c921197319b3c9dbc915d96a89ae59c5192c595409aa59c1f925e95019a5f9ce59121958a99279cbb91dd942a99c19bbf909994db98339b839058949498b99a4e8f629470981b9a908d32942e98cd996d8d1b931098949952821b9310989499528200000c19ea1ad60d00000c19ea1ad60d48a2ffa67aa8a323dda18ea8d4a94525a3a1eaa81daa4e267aa1eea846aac72677a175a8c0a9292623a281a8f8a916262fa365a9e6aa572604a4d4a98fab36260ca4c7a97aabda25dea36fa90fab5f25a6a322a996aacc2494a3d2a81aaa572407a360a87ea95323e2a17aa7b9a8ae21afa025a6e3a7172045a0e9a487a6771d38a03ea482a5ce1a22a00fa461a57a1853a082a4eaa5d61486a0dba461a62b106da0caa45fa68c8951a0a4a431a61a9014a06ba4f1a5a6927f9f15a492a55292e29e7fa320a5e691729effa2afa47891f89d3fa24da422939e9dd0a1daa39d923d9d64a142a33592219d2aa109a30492e59ceca0d4a28293ef9cd5a0bba26693f79cc2a091a27b94e79cb5a09da283949e9cb6a0a7a24995429db0a087a245964996e29a999e8d940000310a3e0cc6890697739b149d0991989a589fc3a035958f99519e47a049954b99af9de29f8194eb98299d179f4494af98d89ca69e52938f98a99c639e36926798789c2d9e1d9236984b9cfd9d0d9212980b9cce9dfa91be977c9b749dbf924497019b499d9193c496919a0d9d62931a960e9ae79c549367956999549cd691ee9412993e9b55909094c198ba9ace8e8c94b6983f9a4a8d4e948f98029a278c9e932d987e996a8f9e932d987e996a8f0000c419391bd5060000c419391bd506899fa1a5f9a6a32183a0caa7d8a8902456a1bfa7fda8d4244ea114a826a91e2525a25ba88aa95d25eda29ba8e3a9f72439a3ada812aa812430a3b2a817aa372459a3c1a823aac62328a39fa8f4a95723bca25ba898a97e2216a2fea728a9542182a156a7c8a8c02023a1b0a65ca8751fdda017a604a89d1da1a0a3a577a7621c6fa028a5d9a60d1954a0d2a464a6141540a08da415a625102ba052a4d6a54c8926a032a4afa5739228a015a492a56d9416a0f4a370a58e95fd9faca341a58f96ad9f4fa31ea58b97609f0ba3e5a45397dc9ea0a2b7a40d976b9e50a270a4b395e89dcba132a46495469d32a17fa3e394af9cc1a0b7a27194679c83a03aa22f94589c79a03da23094399c7ea047a2fc942f9c7ea04da23b94d89b64a00ea233945d9ba99f43a12992ac98349be79c8b909c91fd96c098098de396089cb19d8590dc99c39d11a03894c499659dc09f4c9540994f9daa9fd19404992d9d889fba949998d99c079f16944d98679c6d9ef39200981b9ccc9d8092c397be9b709d63915e97509b169d23910897dc9ac99caf919e96769a829c77911996e7992b9c789099957a99ca9b449044951e99389bd48ee494e398fd9ac28efb94da98ca9a5f8d8f94b998b69a6e8dcc936098369a248ecc936098369a248e00000000000000000000c419391bd506899fa1a5f9a6a32183a0caa7d8a8902456a1bfa7fda8d4244ea114a826a91e2525a25ba88aa95d25eda29ba8e3a9f72439a3ada812aa812430a3b2a817aa372459a3c1a823aac62328a39fa8f4a95723bca25ba898a97e2216a2fea728a9542182a156a7c8a8c02023a1b0a65ca8751fdda017a604a89d1da1a0a3a577a7621c6fa028a5d9a60d1954a0d2a464a6141540a08da415a625102ba052a4d6a54c8926a032a4afa5739228a015a492a56d9416a0f4a370a58e95fd9faca341a58f96ad9f4fa31ea58b97609f0ba3e5a45397dc9ea0a2b7a40d976b9e50a270a4b395e89dcba132a46495469d32a17fa3e394af9cc1a0b7a27194679c83a03aa22f94589c79a03da23094399c7ea047a2fc942f9c7ea04da23b94d89b64a00ea233945d9ba99f43a12992ac98349be79c8b909c91fd96c098098de396089cb19d8590dc99c39d11a03894c499659dc09f4c9540994f9daa9fd19404992d9d889fba949998d99c079f16944d98679c6d9ef39200981b9ccc9d8092c397be9b709d63915e97509b169d23910897dc9ac99caf919e96769a829c77911996e7992b9c789099957a99ca9b449044951e99389bd48ee494e398fd9ac28efb94da98ca9a5f8d8f94b998b69a6e8dcc936098369a248e0000000000000000000000000000000000008a9f42a1021b1624a027f828c527cc261a2b6b2cd72b6d18faa5631d7f2d389b14a6069de020d7918ea1f299da9e019b24a81fa190a4f21c21a9b521e51cc827402c872d0c304b27452ccb2c7b2e4526002a022b372c2f250129192a4e2a3c243928dd28af271b22962499252f25fe9c0daab9ab6425a1a5dfaf5db1222691251f27f626b31fa5282729a2292f1f5c251eac29ae601d442b4d28eb240ca0762c892c942ce9a0e92c102db82c5aa2532d202dd82c6fa18b2d532dd02c01a2af2d9a2d042dbfa2da2dae2d092d5ca3f22db82dfa2cd3a3ba2d672dc12c10a4952c852cfc2bb6a2af2893287a28049fbc1b1a98439db79b5617c41d651e2610fd1805209821898dc6185e1fc7208f937318131f94201f9534186d1e39207495df17201e0120dc955217de1d961f00956217c51d6d1fe594ed16711d081fa394c916341d8e1e6b945f16bb1c391e32942316851ce21def93d215421c711d41943d15d51b301d8794e5146e1bec1c67946e14f11aa01caf943a14841a761c8494f7133c1a261c4d944413cd19e01b15946513a4194a1bbf9316134e19051bc192cd12f818a11adc919712b218561aef9036126818be19f78fc61138185419418d831114184619118dea105617d018058d01125e17be18ca86000000000000000000008a9f42a1021b00008a9f42a1021b1624a027f828c527cc261a2b6b2cd72b6d18faa5631d7f2d389b14a6069de020d7918ea1f299da9e019b24a81fa190a4f21c21a9b521e51cc827402c872d0c304b27452ccb2c7b2e4526002a022b372c2f250129192a4e2a3c243928dd28af271b22962499252f25fe9c0daab9ab6425a1a5dfaf5db1222691251f27f626b31fa5282729a2292f1f5c251eac29ae601d442b4d28eb240ca0762c892c942ce9a0e92c102db82c5aa2532d202dd82c6fa18b2d532dd02c01a2af2d9a2d042dbfa2da2dae2d092d5ca3f22db82dfa2cd3a3ba2d672dc12c10a4952c852cfc2bb6a2af2893287a28049fbc1b1a98439db79b5617c41d651e2610fd1805209821898dc6185e1fc7208f937318131f94201f9534186d1e39207495df17201e0120dc955217de1d961f00956217c51d6d1fe594ed16711d081fa394c916341d8e1e6b945f16bb1c391e32942316851ce21def93d215421c711d41943d15d51b301d8794e5146e1bec1c67946e14f11aa01caf943a14841a761c8494f7133c1a261c4d944413cd19e01b15946513a4194a1bbf9316134e19051bc192cd12f818a11adc919712b218561aef9036126818be19f78fc61138185419418d831114184619118dea105617d018058d01125e17be18ca8601125e17be18ca860000f7a176a3001c0000f7a176a3001ce91d0820e1217a29be2471270828c62c7aa45ca9ddaa762b43a210a430a4a59cdaa06ca134a0549b19a14fa3dea3de235ba4e3a816a9173247256028a029db33f6242128f028e330cf2453281829a72e9123f9262828392c5b217d24fe246628111a389f5da2a125679ea9a92cab242594a046abbfac3b25ed1c84a35ca5122481257f1238a00723a8288ca122a8d81a2c2b1b24579fb8a0952c362bce29b3a11a2db92c402c26a27d2d012d532cbca0ad2d492da62cc9a0262eee2d0e2daba12b2ec42d122df1a2a12e282ea42d4aa4c22e3a2e442d8da4532ecd2ddc2cd2a4ff2a5f2a87295aa1bb1df111c5959d8c8784d709898b101be816ac1d701f3a169c17491e0a20cd0ea2174f1e05201b91d3171e1e1420cf97c817021ed21f4296bc17fa1db21fff95a117d41d651f9d95e616561de31e19954f16141d6e1ec394e715a01cf01d1d959315601ca41ddb945b15311c651da59426150a1c371d7d94e014991bdb1c91939d144b1b9f1c33937c14c91a641cd9924e145c1a0c1c7a920314ee19881b049390137419331bb692ca121e19c01a76924a12bc18261a0f92da116e18c2192891c411271898190391f71137187919e6900f1208184f19c1904311ad176819858ec610911675183591c610911675183591c58a7ea2b0a26a1ac58a7ea2b0a26a1a4599af99d39a8b290c1ca31c9420ec2c1ba5a0a8f4a977308fa4f2a47ba5ae21afa371a3b2a2771cd6a536a72da89c2427a917ac67ac5132a01b4f22fb24393417190f20bf1daf31861cac21b022862f6d1b281f4520f42cdb14f5922e94242a1797e1a2ada40f28969e1ca82ba97e26e7a006a923aa9425ec9cc6a7eaa8d024dd1e98a492a75b235727ea9d65a6a21e0f2b8b25d019c99ed12c1f2b78290da26d2d982c572b3ca3ee2d3a2d7c2cd6a30d2e542d642cb8a4b12ee92df72c7da5b12ef12ded2cb6a5822f802e912d12a65d2f7d2e9a2d2ca6682f632e572de3a5452d8b2c532bf9a264232d21441f6c984c97869cf09d9a0bd48ce813bc16fc09ac131d1cfb1c7e09b515751d861e1889bd150f1d7b1e68937415b61c341e1094e315fc1c5f1e9c951416201d851e36960a16031d541e9f96b215c91c0e1e259663156b1ca11db6950615191c571d4395c314e91b041df0948b14791bc01caf942a141e1b871c76940314971a471c3794c613471a191c09949213ea19861ba2935413a019281b4393ee123119c51adf924d12f418431a8d92bb116018bf1934922611f21722190d917b10f5168118be904e10d416441808904d1083161218fc8f8d10ca16a418b890641091165c18bc8e641091165c18bc8e00000793e895b30200000793e895b302fa8fb7939c949d292ca1f7a408a5602d16a35aa980a6a830c0a13ba319a31d2633a1c1a006a13223dda4b6a52da75d296ba8bfabd2ab01323da0699f97990f34b2a057a3bea25b31019e949ec09fd92fad9c629f6ea04c2d929dcba212a4ec2ae79ea6a41da6c428bba050a779a81c2742a122a810a96325c8a009a81da93624799c01a790a8d521a423c2a0e7a55f1c872a5d26d320639ca12c1e2a2228cfa1512d122c222a85a4f22de62c0a2c86a53d2e752d942c1aa6a72ef82d0a2d57a6162f602e792da9a69a2faa2ed02dffa6da2ff92efd2ddfa60c301f2f0c2ebaa61b2f232efd2c88a505284627ba25999ebc96149d629e910b8f9677996999a90a94834217241a3a938a11f91a9c1c7098d512811bf21c7e980d14491c511d16983815e61c0c1e6797bd152d1da61eaa97f915061d5a1e1597a115a61ce71d599768157a1c8e1dec96f6140d1c2d1d7396b614ab1be01c13966d143f1b971cb8950514f11a5f1ce094c613a71a221c9c946613201ada1b60942b13d1193f1b2d947f125619e21aef9335121619581a3b94af119b18f9192093f71011184919c491a6105e17bc18a6902510cb165d1873901010c0164a18668f22105a1628182c8ff10f62162f18bb9032109415191715923210941519171592a6920591ba8ffe82a6920591ba8ffe82d295659b4b9dd21bbea224a5f7a6682c69a0ffa999a12d2d2f9deca5caa03f20b89f83a152a0231f7b9f8da813a3fb23fda567ad5ca9ea3034a412a984a76f33d8a2e7a63ea65731b4a239a4fea4952ffba195a47fa5412d0da25fa571a6232bc6a1d2a579a7b32834a20fa756a8e52672a22ca81da9042576a234a823a9d923a2a1e7a7e2a887214e1393a446a73a1d472807236912cf986e2cfa29b4279aa28a2d282c422ae1a4232ef42cda2b13a69d2e9e2db22c3aa7102f2b2e2c2dd6a7822fab2e9e2d14a819302a2f0f2e3da84a30842f542e38a87130b32f692e15a85130672f0c2eb5a7452b8f2a6729e3a23e11748aea0bf29456982c987997d0954d95a3973e983e988e8c0a168716b798000c9418e119a498a20f8e19251bf197aa121f1b931c6a971214d01b081db6961114111c031d64961614f91b001d1f962b14801bdc1c7b96f9131e1b781ca996c913d11a2f1c3d96b3136e1a1b1ce3952313221add1ba395ae12da19811b619569128f19251b2095e71149198f1ae3948a11e0184d1a309529119d18cd19fa949e1029187e19b59425106d17b2189893cd0fe81658188b91330f0916f41798904b0ebb1541176390bb0d581500172a8f500e2a15c916f7902f0dcf13851559902f0dcf1385155990648ab78540864086648ab785408640863c9aef972a98ef1a93a3e2a44fa4042c94a5afa99da9a02f81a732a8b8a81e2368a121a442a4401d78a752a98baaf32749a83bab3eac3f32b8a1dd9ef39f193427a5f0a62ea898315da4f3a5f4a6692f34a401a62da7122de2a38fa6eda73f2b6aa365a783a8002928a358a782a8b227aba27ca79ba8ae25b7a284a7c7a85724fea243a7a5a8302253a07ba6e2a72f20a9212e9c19a36811112bc62864265ca1aa2d412c982a68a5732eff2ccd2ba0a6e62ec52d8f2cf0a76c2f5f2e2a2d5ea809300f2fc82dc7a85c30a12f4f2e32a98e30f52fb82e66a9bc302230ec2e4ea90a314430292f4ea9ad2df22c182c31a6241b781970196a9b8c98cc98029b6c973895458f588a27994e92a908a110c9998a8d3a13c314c8992d83d3177718a899e10e221a461b1f991f11f11a681cc9987111b91a251c4298f811a21a181cfb973712a21a2e1cbf978212961af71b6197a712341aea1bbc974e120c1aab1b28972e129719251b0996b4113519b01a3e962911dd183d1a4495bf106b189419ee9485102a184419a7944910d017ff186a94a20f1317b6182994f70e8f1641180e93420e97156417af915f0da514e9156490950c2a145815218fc40b4613e414f18e120c901256147f8c1d0c2113dd1483821d0c2113dd148382098e948ae3894f81098e948ae3894f81cd99f2970b98d71916a37ea349a5d02999a44eac36a8542d32a0c1a733a21923c99ccaa23ea1591f45a60daacea93c28bca913af8fadbc3107a5f5a47da9ab33cca47fa7faa71a3182a41ba62fa7c12e3da42ea6dda6ff2c19a4bca6afa7062b07a422a71ba80c29a0a3ffa651a8f326f1a2e8a61aa82725c3a2b3a621a8602321a3cba622a88221a8a2a9a6dda7861eea9f03a588a6f8160a274f23fd1ab09f392dfc2ba52953a5a52e292d222c45a7352f082edc2c7aa8d82fbc2e6b2deda83d304b2f082e1ba9a43003308c2e85a9ec304e301a2fbfa915316830272fd4a96131b030a92ff0a91130342fcb2d9da86621f220d01fa89eab99229770991c9b43978295f993fa998d94a508290a529baf8fcf158a17839aac886d18ad19ad99c208f219a71b6399ef0ec81a281c18995310bc1a121cb0984b108e1a021cd0989e106b1ae81b7d98de10dc19351b7b989310bb19b91a2e98c11040193c1a13977a108e18c21988963610401865191f96b00f0718e2184d95ae0e2c179718fc94260edf1623184495110e1c16ca17f5943d0db41529178e94f70c4a152e169493cc0cc414351625938a0c441493151d92020c6b146015e6910c0c0714db1406915e0b94135a1537907f0c6a142916738f7f0c6a142916738fce8bea8325812581ce8bea8325812581fb95638a9d8a5f19799bd21afb1e752a08a5eba738a8922f43a5b4a68ca7fd24299f2fa3a5a2b21f5fa515a9c7a89726a4a87aaf76acdd3028a416aa2ea2e13261a427a7e3a50a313ca474a58ba6a02e32a48ea5c7a6a42c5ca463a64ca76b2a57a434a727a8992823a476a758a8aa267ea302a74ba8ef2445a3e7a616a80123c2a262a6d9a7d9216da2fda570a7c6201fa2c7a5dfa6ee1d110c86a081a37290a82a0c299f2684a37d2e312d072c86a7a92f202ef52ccaa83330fb2eb12d4ca97830ae2f392ef1a9e03043301a2f7aaa44319c309c2fc0aa7531c830ea2fd9aad63116312d30f8aa3c316c303f2f69aaee2427235c201ca23199d999439b699a5a98cf970e97a99ad895e191c393999a61942b0809095a99cb903b144014c599798dd516b817a499b882d017a3182f99c30770185419d2984b0cec186b1979981a0df518eb199b98c50d4119f61951984c0fec18061a1598c20ede18041a3298320f8d18ae19eb97e70e461811198697640e9917c8181897060e30178718b8969e0db1160918f5964f0def159b170896f70c881527172d95890c14150a164094200b361434158d921b0a05136414f9912109da120714f3919408c9112a14aa9112087a1019117492cf094410af120c92cf094410af120c92c88b7586a6833781c88b7586a6833781ad96250a7d8a151a779ea514ba95422a259e16a9ca97422c6f9b77a61e9cd61c868c91a1d104ec16c908afa7b992721e179bb0ae2217cd2e469fffac06a268322ca28da7caa4bb3085a4d4a5f0a6872e99a4fca558a7a12c74a45aa659a7362aa9a4b0a6bba787285ea4dda611a88b26f4a37ca605a8782492a343a6aea7362212a3f8a565a787208da2faa58ba7671fa7a2aea515a7aa1dbca124a5e9a5d3186620b11a5d99e79d302d1d2c272aa9a6fc2f9c2e3c2d68a96d304e2fe12d2caaa130fa2f612eabaa2c317b30492f39ab9831e33004309babd031233133300cac1c327d31853030ac43328a31a83028acbb2851280e276ca4429a429c479d2d9b2c99a099919acc99f996d7919393ae99239552882290da99b393f90d4f894e9a439039157c14169ac98a1e172b17cb99728281175e18649968025e18ac18a8991b075318cf184399a8094118f318f3987b0bf817b6181f99500b12188218e698620cd817b618b698b60bd316f117f197d30a47160e170e97360ac0158016f0951b0afa141b1693950c0ac614f2156e95e60834142f152f955b08c6131d148c94a8086312c013c093a7077711f612c893230846123e130c9425081612ba13459409076c10a20f4a931e06ae0f6510bb8c1e06ae0f6510bb8c098c1984d983d983098c1984d983d9835298a390f5905e19099ead9da295dd2acaa3b2a91fa6302f43a4f7a69fa63323299ef4a2fca11a1e1c9e0fa90da35b24c317f6ac02222230859e1da89498f03149a3d5a589a372302da4c8a5efa65b2e53a440a6c0a7aa2c68a490a616a8512aaaa4dba601a83928a8a4afa6d1a7e92572a486a6a2a7ce23aaa338a6c5a76421e6a2f4a538a7a91f82a2c0a53da7eb1c7ba2aaa5d6a63a1bcea293a5eba6da18b6a156a407a5d88e4026e9237b1ec7a2322fbf2d862c63a98d30832f142e9faa01313c30fe2e2cab7f31be30c52fb5abe0311e31403028ac2b32753177306fac8332cd31d830d0ace832ff310431fcacdb2bf02a70297aa6069adb9a999b3f9cf7995298a69caa9e2f9815945d98c09d8a969708e793559ddc949b131a0a269db5904a1704174e9c498dc8188d18959bd98a6518c718769ad1875618af18ab99678211185b1846993582a0172218019903026d16b317a898d601f1151317d297bd011015eb155097a301c314e714de96840171149b147296460486139613b796ea030e1321134f969f03dc11b6126b956d037b114a1215951d03fd10ac112594e5028f101511a592a702300fa91061917002da0fa10f82906b029b0d450f458fd2005d0ce60d4290dc803b0c99023990dc803b0c99023990c58d9a810c020c82c58d9a810c020c82f797fd8b458cf01a389d9b14c815b02a68a4b4a9c5a5702d4da408a80aa71823529c4da3b7a1831db09ff4a813a44323689d64ae1da0182f26a1d9aa8498233238a42ca768a56b3014a5dea527a7fc2d58a448a643a75f2c01a437a63fa76e2a21a42ea62fa79e28faa31ea69da77f2691a31aa6b5a79f24afa327a672a7a72289a30aa639a740201aa3aea5d4a6ac1d9fa28ba5caa6ea1a0aa229a585a6681abba106a50aa61615c09e4fa3d5a4c399f729cb280d2715a56f304e2fec2db8aa373169301f2f39acb731de30063092ac193234315230ccac75329b31aa3049ade33224320031a2ad583358326331e1ad812dd02c122ceaa88e9958983d9b3d9ba79a089c479d579a8999e8964299e19abf97c28e4993319acd954e0e8e89989aaf9374149912989b8391f8145014169ba48f6b164615549b9c8cd216f615509bdc89e1164316fd9a7f896d16e1158f9a51862f16aa15509a0d8632154215de99b6853c14271418993285b3122b129f987284f7119011bb97cb86a810fd0f229765861f0f7f0fb1966e86d40e150dd8954886310dea0ca695eb85ed0c9f0c64946c859d0c4c0c4e93fd84020aaf08a2929484b60972084e9253847906ca02a092278704829b82d892bc877e88028a1b91bc877e88028a1b919690230598067f899690230598067f890799f4913f8ce71a689df99fbb15e929279040aa301d912bdd9beaa7e99f0e1f609a28a338a1a21bbe9ce7a8a8a1f121db9c53ad4d16982e119fbaa99a1ed9317aa250a644a56830bca329a55ca6fb2d3da4c2a599a66c2c48a426a6b0a6572a57a417a623a7962855a449a66da7b3260ba42da64da7b524a6a3d0a5f7a6d1225ca386a5a2a69b20efa21ba55ca67d1d79a2f0a419a6b11a57a2cca4e0a55315fda18ba4e2a5d90e70a1aaa450a6f894329d2fa224a5909e892c602b942968a84e319330572fa6acf8311f31483031ad4732663174306cadad32ce31cb300dae203352322a31a4aefc33dc32e2312bafeb2d1f2d2e2c2daa2e9a3299659b229c7f9879949497289b05980f929e95d39ab8970b94c196619a829652882b909a9a359493148d14d39ae79127159415229b1691ae14e8137f9a3e901a15a614759acb8ec3144314649a568e7c140514069ab88d1a139213ad99358d8b1270113e99ca8b15121511e698698ca510ca0e95981d8cb00e8f0bdf97f08b780cbc046697b08b110975848797498b2e033d84a096f38afa02098a4996588ac3029989e594248aa8825d893f94d68a8382218c0593838a5982d38ba79247893882498bec929c8809860d88be91e087ea85328b3895e087ea85328b3895948597809f819f81948597809f819f81e193908e1b90d912149de19fb495e129cf98cbaaf4169a2b499a39a8439f431f729a92a3b4a1941c03a020aa41a5ae23e2a329ad08a8342f46a312a933aaba31eda305a69fa62330f4a39ba57fa7ec2dbaa3a5a582a65c2c77a3e0a5e1a61a2a93a37ba5caa65d28aba37fa5cda674266da3d1a5eea6ff240aa382a5b0a66e2390a21ea57ca6072145a2dda435a64d1f65a2e2a443a6411c50a206a533a682182ca2cba40ea6cd0e40a2c3a4dda5c4943aa144a44ea57894c59b6ca0f1a2229fa62da72c272bfaa9033230314430b5ad7b32ad31ac3064aef6321e320331c0aea233b932753172af27344e33153267b0e52c762cad2b24a9e5999c98e2981a9dfd9a6b9a319dc79ca5984395029a359c1e98ad91ec966c9c2497870e6090329c2b95b61431105e9c14946d15a212269c4392da154814a59bff906915e813109b9c90e5148614499aa08fa6137512c59905901713f71153994b8f1410950cc698c98f600da5050f98758f04044585ec96ea8ec883698b7c968c8e8583cb8d1596f48ded88aa8fbf95648db08b388f6995018d3a8b5d909b94968ca48c079040944f8c4b8c838f1893318c1f8d2d907492fd8bed8ce78f6491bf8bcb8d958f958f4d8b8a8d4190e990988b058d918e608d988b058d918e608d52865100ac012f0852865100ac012f08a693808e179017105c9d62949a157a2a0da544a902aba12d9ba448a85ca840225d95dea3ea9d011af99f4ea9e8a3ec201da502aff5abc12e24a2c9a9dda7b3314fa318a89ea5133022a4a7a6b6a7a42dd9a372a6aba7052caaa33da66aa7d429b7a3f1a56aa748289da3f1a508a759261fa381a58aa6b724f1a252a562a6182310a375a594a6a32124a363a57ca6282012a323a537a6e01d97a2e7a403a6991b39a28ea499a5b7147fa113a430a5d20dfba0c1a3cba4940d62a02da37fa43b8d649dcfa001a3279aff2dfb2cb32b4cabb932ae31873035af393320320831ddaf0934f0329e3162b08b33b3327d31a7b08b28852886274ca7f69a249b379c3999f29bc6951f9a7e98a798df916095fe98e097d88e6c9390999696830eb709ca9a55952c1121103a9b38947614fb0fa69b019337145d12f59b9d92ce13ec11679b2f91df120e11519a64917412990dd5994391ca10290798997891940ba28630990e9193048f8cc09840914b8ae5905f98e490da8c2193739778900890c893e39671908c9026945b96bd8f009155946096ad8f87907194d895648fc99022947095058f8790cc93b894a68eda9053936f94568e1190de929893668d629079922793248d5e8fb291b593368e069102935790368e0691029357903d06fa08750e5c813d06fa08750e5c81d5922e8ee78f45098f9e191d3c1512291fa51aaac9aa032c18a462a730a86d1f7294a99f879c8e16ad9a22a32c9d001f65a422aa32a98a2e35a431a894a9c43147a262a68ba6d52fa7a343a6d0a7752dc4a30ea62ca7c02b10a437a652a77029dea3e6a55ea70b28a9a3afa518a71b2656a38ea5ada6992413a35ba5c5a6ea22d4a238a599a6eb2083a21aa540a6032020a2e2a4ffa5ab1db7a18fa4cba5791c4ea145a46ba5d81af2a01aa40ea5f718b0a076a3cca40b146ba01ea396a4ba9314a017a228a48893829e869ede9f3e99cf295e29f1270fa9f9311d312130b3af55336032283114b14b3007305b2e97ae3719aa1e281b31a2479a5d9acf9cc599379c3298429a189baa996b98b79be79a7c98aa9107990f9c0d969b13e989409c1195e3174b16059ce79496176217339c23941a17f816479c8b92bc154115e19b009259144a11ac9bc4910f11b307759ba092080c498d629a1492e1040990da99e7918b8d2b91fc98d0918b9062933398bc910e92a394b8975b916b926b958f96e79081939c952596e190ca935796d595949083931a969d957990cc9330964595789070936e958f94639005930f95b0931490d092d594cd91df8fa2928f94be90a08daf916e935d8e818ce49091924393818ce490919243930000b817b2182e1a0000b817b2182e1a081821241923122169185e28a1284a28ad9c7fa73f960d2a989cfea7759e7e1f29815d9c1a071b19fe86ba9f491c1b214f1baa9a5b266f2d4f98ef15e6244a31f69d459a7d9e8b2f3ba1c8a47fa52b2d47a339a6e8a7572b0da451a6e6a71a2907a433a66da71327c4a3a5a511a77f2569a360a583a67c240ea3f7a401a6ab227ba2c0a4c0a52421f8a15aa456a55120c5a147a43da56b1e89a1efa30aa5591c4da162a3b7a4a81aeda0d5a26ba4da18a7a085a236a49a1621a0f6a1b2a38a13b79f88a16da3da0c0d9f1ea1f3a22398939eb9a054a2529b729c7498909d259e711f471e091c99a5d10f3a956e9ad3a07b9a589ca99f8e98d79b7b9b3c9d498bd2990b98139a4b97859995984f9c84986098390f648aff994e94f3180d199c9a6b924a199719139b1992091999186f9b6b923b185c17b29b1192ed169c15ca9bfb92621397118b9b77935d0cc48d7d9a1793bb8ba493279af0925d915794b899a2932a9406975c9957945c959598eb982a94fc959b9849980e948e953e98e797f093919536985697e2929395c4974396129223953197cd952f91c0948f967294fd90609413961d9484905594ab95f3925290c5937695fc9149901a945595d991948fee92b1943791998fd8923d941b8e998fd8923d941b8e00000000210cba8300000000210cba83789c94a126a1502353996794cf20b22a5d8ee6aa2620422b199b4ba5a09f931c9d9abba0d39f191a159b54a2639e4b20b69494a8191f4d2eea8ef59f5d25e931909d09a21e9c143083a122a561a66c2d57a3dda65da88f2befa3f6a65ca8e52859a379a613a8de26bba202a64ca7372517a2f0a43ca67a2305a29fa4a6a50b22e7a15fa45ba53b2142a233a45ea557202ba21aa447a50a1f94a1e4a30aa5b51d44a1cca30ca5c61ce0a0b4a338a5c81b7da0cca25ea4ef19c59f43a1afa25a181f9f64a09aa10e16dd9e58a0d8a1ff953d9f51a0c4a1079d0d9e50a0eea1b09cb19c40a006a2049c389c879f9ca1b6952e9e08a00aa1f0907c9c319ef49f2991259a069b979cca9089984294709809941d966e1590159095a393421ab81a1c97e68fd91b7d1c1499f88d161ca91c579a028f851acc1b1f9b2b91c317e8179a9bbc913d13910ef09b0794820c138ed99b45952692ff959c9b5895b895fc99d09afe94ac97649aa999f4942a98b29abc989d945198839a929775945c98169a839633942c98bc999a9514942b98689949954b93b4971699f7945792b496ac982194179247966e980193d791ec952f989e9256915895fb9791913d9164954297bd913e9081941c969d914390ac936995558c4390ac936995558c00009518301b868d00009518301b868dc285c918ba14ec20d19beba2c2a0a12aa69a36ab9ca19d2a2b8ff8a6330a0919f78de2a1959335125e98c8a87d9d7d1d9294c1ac9a23c92dfc94e0a856a4143256a1cca531a7113038a41aa78fa81e2dc5a33aa84ba9172b24a460a860a9b72841a412a805a9d82579a3fca671a816243ea2cba461a65423baa0f4a112a491229fa06aa2b0a3342261a1f7a317a5a82197a15fa45da5432164a15fa491a57e2003a101a423a5921f68a006a362a4381f999f3ba1cda24e1e679e2b9f08a1de1ca39d239bb69c6518439c8a942a982a98999c659a639ef19e589d1c9f32a1569ed69d2ca13ea3209ba09d4da1e2a3a99a319de0a0a0a20d91f49b9a9fb7a0d010da9ac09cab9e0b149c984494419c7c8a6c94be191514b795b88e9a1d1f1d8298a48e711eb81ebc9bae8e081e961e649de790f21c721d729d9591ef185a1a2f9dd7934810a80e949cf394289165950c9c4e950c95ba98fc9aa0959297589af099e295c2980d9be198f1954699499b5f98d5954f99679b8d9772952999369b12970795cf98939a34968a943c98099a7b953c94f297c99943951694bf975b99a694fc933a970699239441930797e39847930093a6968e9852929a92cd966f9827924791ff9515982b9203913a95d8962c9403913a95d8962c940000c916ad18490f0000c916ad18490f099c5ea1d6a2ad26d1a030a77aa8542a769deca91ba57b2a638c0aa3b0104c18f8856d9e348c4e12ec96e2a7d59cf91d8c9741ad7015082e019816a978170332e8a135a938a9fc2f16a40aa919abc02c21a4fea853aa262a7ca4b8a8ffa9a7271ba472a882a9c22482a327a82ca980219da238a661a76720c8a05198c19b4321679f1f9853991f22d3a0bfa1e4a26a22f5a0ada4cea51f22faa01aa553a7222116a106a584a71120d9a08ea4b4a69d1f2ba0afa3fca4461f36a039a019a1e71e66986c1e8120681d08129023e9246a8ec89cc99a449b479ea1a067a22ca41e9c669f96a323a526986d9eb4a27ca41295e89d93a1e3a4ef98cc9c2aa09ea1e509cb9a359cf29d0c15ef98f1933c953c151d94491cdd1b2314b11093208321330b5715b12133231d98d614402167228e9cb10d971e7b1f909d1e925d16c415f79cd095a591fb966e9c64979598a49b519c0c987b99199cde9a3f98d799229c5499c497779a869c1d986e96b69ab29cb497f195549a829c95966795e7994f9c1a965695a399069cb295169553994e9bde949994d398d49a1e941c946d98029a7b9375930b98a099019316938f97a099be93919224975899e392b992f1962799a29287914a967199aa941792b996af98948a1792b996af98948a000022147014eb81000022147014eb81eca08ca73ba9aa245ea459aa03aceb27d3a883b080b1aa25bea949b17db2eda24ea9b2b0f2b12ba7d2a7d5ae28b0122084a8faafe6b0332c22a7f9ad5cafb22ec2a550ac53adac2d6fa545abb2acce2abea438aa10ac5228a5a490a9e6aa7f2543a4f3a849aae5228fa48ca8f6a9901e59a2fda631a9331ca5a0c7a3c0a5d11c37a0f1a381a54a1a39a18ba690a85d1320a199a648a82f8caea0f4a5c3a79a915ba122a6c6a7d294f0a0c4a56da7599687a08aa54ea7279643a041a5d5a64e94ef9f01a590a6d58a989f9ea4fca5ac90d29e6fa4dea56f90489e21a47ba5cd92519ef1a32aa5b792ee9dcaa29ea4a892c89d58a279a4b192289d9aa183a39a12209c7f9ff7a0e218a299349af19bdf193097df1a8a19641a7514f5224e22d418a61bf3244d268092121a37247f25339c8a1127204d21729efa94fa103089009e7e986c98dd9ab59cea98de9ae19c449b4b98cc9bd19d199a0e98c69bee9d5499ad973d9b909d8b986297b09ad69cd09686963d9a939cc3953a96249a4d9c92950c96e999509c6f95cb95c899329cd394c6956699d39b30940d95e1980a9bf09289948e98389a929126943398ad99f091c893ec975f991e91b793c4971899359098921797c0983090d59190969c981090d59190969c98109000000000621208080000000062120808289d87a38ba5312142a460abadac2326eea622aefbaf6b2881a818b04fb1e7281da8ccae5ab06e2953a817afa8b0582ce9a84ab061b1332ce4a68bad69af762bd1a505ac43ad192a20a5edaa49ac952863a42baa9eabf8260ba486a9e6aad0248aa3f8a865aac0211fa3a7a80daae21f2ea2fea714a9431b909d9ca3c7a42e8a569b1ba0a0a112987f9fb8a299a4079972a1b7a4c8a6719b12a2a1a5bfa7999b43a160a539a76b9a5ca14aa5eda6d5980ca1dca480a6c997b6a054a4ada51697f19e27a3b5a452966f9cf3a086a2e794cd9a9d9fcca09494b19c16a193a30b97719d56a2e6a4cb983d9f6ca276a490981e9f53a242a41697339ec3a18ca33388809d03a16ba29113f49bd49e84a04f16c797df9168950e1cc719702491253c1e1d209228de294f0ee61c08269327f0a05f8f8b1a7119549f2898169a449c449c2999de9c389fe79a8599609dbf9f6b992699179dab9fc298b398949c8c9e29983e98469ce69def969e97ed9b959d0b96f196449b3d9dac954296d69afd9c6695cc95539aac9ca1957695d599729c5c952a957f99239c1d95e09411999e9b7094a194e198099bf1925694a598d49abe9221947098799a2d910e945e980d9a4f900993de9786992990b0929e977999998eb0929e977999998e0000e219591b04100000e219591b04103ca104a824a9bf22fea388aa38ac8b254ba5c8ac06ae042805a693ade8aefd2889a168a922ab01264a9f01a644a8ce233aa5f1ab31ad4127e1a5acac02ae322807a5caab0eadcc27b2a4b6aa52ac51267aa4f1a996abfd2465a47ea905ab06241da409a977aa0e220ba378a8c6a9c0207da15ca7bfa8981f969ff7a497a6351c379e02a3a9a44616ed9e34a3cba4de8ffe9f4ca49aa5629833a071a401a6c9993ca072a4e8a55b9840a072a4c7a5369749a049a4aea5179709a02ea47fa5f696b59fe4a33da5a296f49e1ba3dca43e96049e67a259a4cc965f9d8ba15fa3dc964a9d63a14ba3c9964e9d79a181a3df965d9d70a170a3ec961d9d49a14ba3af970c9d1ea14ca35e98c09cfba0fda29a97fb9c63a054a22b926398759d4d9e441c0226902d1a2fcf1d6316d42290227aa49a9ad29d6da00a9ac39a1a9eb7a03599af99cd9d56a00799b499a29d45a0fa973b995c9dca9f5b962899229d359f6d958e98a99c839e799434984e9cf89dad949c97d79b789dd5931897219b099d5d936a96979acc9cd893e395359a939ca4937295df99559c66931b9585991f9c7192cf943799be9b33929294e598059b32914d9499989e9a5b9056947098239a099025943798b399418c1a93049867994e821a93049867994e8200000419bc19e00900000419bc19e00979a1d0a7dca84d2185a28aa9edaa802438a374aa1bacbc2588a3e7aa56ac842633a33eaa01ac0b2675a36da901ab4e2508a4dea98bab46254ba448aa11ac1a2550a446aa0dacb22419a4cda97aab2e24d2a358a9d8aa3d2394a3f3a843aa242245a36fa8aaa905215aa2f7a7f8a8671f34a1d2a650a8b51d80a0a4a53ba7811b3ea0c0a42ea649180ca01fa45da52f10ac9f0ca453a50690a69f33a47fa5a094c99f4aa4c3a5e295ad9f23a4aca5fc96499fd5a364a5ba96d69e54a303a55896419eeba2a3a4f495f09d6da245a490958a9df1a1e3a338952f9d9da154a3d195fc9c4da110a39b95eb9c23a10ea38395db9c03a1f4a27095159dfea0e2a277951d9dd8a0d3a26b95ee9cd3a0a9a23396cf9cb3a0a2a22c964c9d83a0bea2ff964b0ca50192021b92e085d88fbe93a48ed8991a9e9b9f4994659ac79e8ca063964c99f09d1ca040962b99b89ddd9f8c95e698349d2d9f5595c298db9cae9e2695a698ad9c6c9e8f948598789c319e7c944998389c029e6f941498089cd19d6094b397a69b7d9dc1942c970d9b4f9db294c796bb9a2c9d1f951e963f9a0c9da8946395a399749c9b93b8941799889b6e926394cb98d29ab5906d94cc985d9aca8f0c94a9984a9aab8e1993179861994e901993179861994e900000111a801b19870000111a801b198779a025a6dfa7621e72a168a893a91c22bba2afa839aa002424a2faa86daa71249ea240a9b1aa7624ffa245a9bcaa2a2429a312a985aa332333a3f8a867aa712227a3f0a846aab2210da3c0a806aaf020a6a269a8a5a92c2015a20ea838a9d11e85a183a7cba8681d2ba1e1a670a81b1cdca04aa617a8de1996a0c3a584a7a0185ca052a5e8a6d61334a0dca465a6cf090da086a408a6d892c79f42a4baa5d895e19f15a48ea5ee96f09fdea35aa5e497d89f82a333a5ac97c09f41a30da54c98589ffba2d2a4b798f49eafa2a6a48c984f9e29a260a4c998b79db2a1e7a3d897359d45a159a34c97b69cd3a0c3a20396609c97a065a2c595559c92a052a2cb955e9c9da067a2a5964b9c97a051a2a9962e9c8da03da2ce95f99b6fa002a2ad95059a1e9e39a0c7933a959d985a9a9790a093c4985c9a7590a7981a9df89ef893b799ba9d12a0639585995d9d9c9fc9955899579d9a9fc7951f99349d599f3095af98cd9cdd9e04956898659c3d9e5a942198f99bb29d3d930198769b3d9dec929397089be69c99923f97a69aad9c4d92b196739a759c1f921996e899229ccb9187957499a99bd69046951a99209b9890d394d098d39acc8fd194b398809a998f8794b398a79ac58f6d937098569ad9916d937098569ad99100000000000000000000111a801b198779a025a6dfa7621e72a168a893a91c22bba2afa839aa002424a2faa86daa71249ea240a9b1aa7624ffa245a9bcaa2a2429a312a985aa332333a3f8a867aa712227a3f0a846aab2210da3c0a806aaf020a6a269a8a5a92c2015a20ea838a9d11e85a183a7cba8681d2ba1e1a670a81b1cdca04aa617a8de1996a0c3a584a7a0185ca052a5e8a6d61334a0dca465a6cf090da086a408a6d892c79f42a4baa5d895e19f15a48ea5ee96f09fdea35aa5e497d89f82a333a5ac97c09f41a30da54c98589ffba2d2a4b798f49eafa2a6a48c984f9e29a260a4c998b79db2a1e7a3d897359d45a159a34c97b69cd3a0c3a20396609c97a065a2c595559c92a052a2cb955e9c9da067a2a5964b9c97a051a2a9962e9c8da03da2ce95f99b6fa002a2ad95059a1e9e39a0c7933a959d985a9a9790a093c4985c9a7590a7981a9df89ef893b799ba9d12a0639585995d9d9c9fc9955899579d9a9fc7951f99349d599f3095af98cd9cdd9e04956898659c3d9e5a942198f99bb29d3d930198769b3d9dec929397089be69c99923f97a69aad9c4d92b196739a759c1f921996e899229ccb9187957499a99bd69046951a99209b9890d394d098d39acc8fd194b398809a998f8794b398a79ac58f6d937098569ad991000000000000000000000000000000000000359f09a175164d25f6289329ba227927302b2e2c1528799f17ac04a632293b95a3a02999041800000000000000000000ae88ef8cfe8f9b9b4aa8e7a001a6cb1124aafd96fd16b227292c192dab2e22274d2bed2b542bfd243b29272ab12873242128ee28ea25d823ae262128eb21cd214f20f4222c20f3a40eb067b1941d44277f265c252619a12a982a732a5992802687ab99aecca04f2c862b6a2a11a2c02ca42caa2cc4a3b02cd02cac2cb8a4742cd12c822c07a4552ca62c582c17a39f2cc02c332cfea3d82c072d752c65a5a42d752d0e2dbca6ea2d7b2def2c04a7702d162d7e2cfda59b2b452bf82a9ba3402250223f222d9db2146f181e18fc89c619981f0721a090ea17011fa520de958c17001fa0209f960018681e26207e97d017261ee71f22972017cd1d811fed962217b31d531fc296f1165b1de81e609691161e1d8e1e0d961a16a31c0d1eb695d615671cb41d61959c15271c411d12950a15a51b041d4d95b0143e1bbf1c94953a14c21a7d1cd7950d147c1a561ca495aa13131a0f1c6995e612ab19c01bc994eb1287193b1b3694a5123519c81a6693a212de187b1a64928512ba183a1a26922d127a18b6192d91ec112e186b195590a011051837192b90111179170019208fac113a179f18e68d00000000000000000000359f09a175160000359f09a175164d25f6289329ba227927302b2e2c1528799f17ac04a632293b95a3a02999041800000000000000000000ae88ef8cfe8f9b9b4aa8e7a001a6cb1124aafd96fd16b227292c192dab2e22274d2bed2b542bfd243b29272ab12873242128ee28ea25d823ae262128eb21cd214f20f4222c20f3a40eb067b1941d44277f265c252619a12a982a732a5992802687ab99aecca04f2c862b6a2a11a2c02ca42caa2cc4a3b02cd02cac2cb8a4742cd12c822c07a4552ca62c582c17a39f2cc02c332cfea3d82c072d752c65a5a42d752d0e2dbca6ea2d7b2def2c04a7702d162d7e2cfda59b2b452bf82a9ba3402250223f222d9db2146f181e18fc89c619981f0721a090ea17011fa520de958c17001fa0209f960018681e26207e97d017261ee71f22972017cd1d811fed962217b31d531fc296f1165b1de81e609691161e1d8e1e0d961a16a31c0d1eb695d615671cb41d61959c15271c411d12950a15a51b041d4d95b0143e1bbf1c94953a14c21a7d1cd7950d147c1a561ca495aa13131a0f1c6995e612ab19c01bc994eb1287193b1b3694a5123519c81a6693a212de187b1a64928512ba183a1a26922d127a18b6192d91ec112e186b195590a011051837192b90111179170019208fac113a179f18e68dac113a179f18e68d00007fa12ca3301800007fa12ca330188120f4210d24dd20b725952807282926eca2f7a7d9a92822609db09eef9e9096000000000000000000000000000000001ca39da525a67e1c87a650aaa2aab0307e2493257d29ae328423642733278a2ef9227626fe26692ba8211425a4257227d21eab1e0820b722e596a2a6c9a86a20ee9c31abecacc31f0e248ba3ada6791f9528dc1924a3981ae829839d28a8289ea12bc826e620fda1702c9e2b292a7da2ee2cc92c302c5da2d92c902cbc2bbba11a2dea2c522c1aa2862d332d7e2c23a1862d672d9f2c07a0712e1f2e752d71a4412eac2d002db2a5962ef22d1f2d19a68f2dfd2c472c89a41726b524f4224794a3905b9c6d9e5f1c16145419b11afc19ea16b21dd51e94114617d11d491ff090bf17171e0520b4970c18051eb71f9d97ea17dc1d8a1f1d986a17a81d3a1faf977116271d9f1ede960216c31c311e6c96a415871cce1dc2968a154c1c931d7d963d15181c581d3a96f614db1b041dfd9599146a1bcd1cbc9590141b1b8e1c71956014b01a411cc3943c14591a0e1c8b94ac13e3199a1bca94351370195b1ba3946312fd18c51a6394e611a118031a5293a0115b18c91960927811271863191c9293110c185719e291061207180f195892f911ad17e3188a912911ad16531851922911ad165318519200001994219f5f0a00001994219f5f0ac19b3b9f38a06d21fd1faa2385248726c9a240a6daa80b2c83a00fa1f1a1151900000000000000000000000000000000f7a401a7f8a78725c5a796aae4aade30d91e6119f1263c33941829214c20332f6116581a691b182ce714cd921994bc2843942aa128a303258b9dcba670a83c22da9fb3a843aa4120531482a75ba9611e5826cda0c2a601140e2ac21ee8a1849ff22bc727ae20cda3aa2cb22aa92852a45e2c562bea290ea3142d8c2cda2b50a3492dc02cc42ba4a4e02d5b2d582c45a50d2ea92dd22c6ea5172f7b2eac2d4fa7352f612e7b2d32a7122f502e422d7aa7ea2ed42ddb2c25a6232910283826ac9ded93129e3a9f9811199608943d933d13ee0c8a184f1a4f892e14091d0c1e3492c215f71c861edc95e715f51c201e93970216fd1c8f1e16984216371d9c1ed398c515031d521e79989115c21c011e1f985a15691c9b1d2f98e5140c1c4f1d1597ac14991bfd1ca7967314301bb31c45962514da1a7b1cf995fc13821a391ca295b7132c1ad01b5d957613d019621b12953c136119061bd294a6121f19751a92945112bf18261af2939011421898197693e910c01704193f927210df166f18e991551087163418cf913b106a160018229131109916861872927a10e216901849927a10e216901849920000bf984d9f25100000bf984d9f25104da479a54ea69a224b9caa16e19764277194acab0ea27425d49610a04e989218000000000000000000000000000000006ca57fa890a82e2281a8d5abc3ab3e311a95129953233b335ca053a12ca2612f129f04a20fa3402c8b9eeea22da4e0282fa0ffa40ba68f25cca04fa773a8c32344a12aa82aa9d620819f05a843a9c61d3a1f42a51ba8bc12ea28a620a29ea29e1b2ca028f42413a3bf2c862a7c284aa5312d1a2c472a98a68f2dc42ccd2b4ea7fa2d5a2d982cefa74b2eb12df52c40a8af2e192e2f2d33a83d2f5b2e6c2d2ba89a2f872e942d26a8b22fb82eac2d44a8d82fa62e782de0a7122cdf2a8829e2a36d15ef99a99c638cda98789cbf9c9a0a1e927e88481048909c0ffc19c01b6a9785123d1b531c2f985314231c5b1dac98cf14aa1cc31da8989115e31c4f1e3598e215d51c411e4e989115921cbc1d53983a153d1c5b1d6498ac14e41bfa1c81974e14751bb01c119749141b1b751cb896d713e11a461c729681135f1a0b1c919512130a1ab81b5195be12bd191f1b8c9529124419991a5495e011f8183f1a0a9576117518ab195394e410f01731192d9397103917d018f3912210b8168118c6910910f916461807914b109d162f1894910510e3169218cf90d30eed143e165b90d30eed143e165b900000059cf79cb8880000059cf79cb88833a252a516a5c0134ea03ea546a43a2571a22aa95ba7a9213d9c25a02d9f9c1200000000000000000000000000000000a6a53ba9d8a860240fa953adbfacae300ea0fca19d196832b5a38ba57da6d12efda2aba5a7a6c32b7aa2d2a57ca6ef28fca135a686a71126bba1bfa61da8392472a209a8e9a80322cba26ca860a9ca1e9a9d1aa76ca8831820255a98e4a2ac9d212b142878232da4b02c6b2a3d282fa6552d302c532a82a7d22dd42ce92b53a8522e952d812c8ea8ab2ee32d012ddba82f2f612e552dfda8d02fdd2ec62d24a90e301f2fe92d18a93430762f242e0ca962308d2f352e37a9d72ded2c0a2c6ea65a1dfa196c15119ce0990e9aea9a5297e4979999629aa299578e041609151d9af2082618d719d799490e4d193c1ba1990012191b7d1c639994134a1bda1cbe98f513be1b061deb980514b61b051db6982614681b981c5198b713f91a581c42989a137a1a151c019829135c1a081c9a971a13141abf1b4f97a512c919611bf6965b127b19071b1a96e0110c197a1ad8956411d118021a229606116418b819d69586101e183c19919525106a17c218a894b60fcd164d18f492f40edd15b617d4918a0e9d1518179c91230e5215f71682911e0e5d15c016eb927e0dc71379144b927e0dc71379144b920000c58b768edf820000c58b768edf82b1a018a1efa07d1c4ea2d3a246a2b926679e94a2a9a3d62a07a06da201a3231c000000000000000000003497e4940e0e54a7fba9baaa5026c9a84eac78ac6d31cca106a5fb9f913267a41da608a81b2f16a48ba633a8ef2bb8a3f5a6e7a70a29a1a33aa766a86c2631a359a77ca89724c8a27ea79ea8e521e8a2e2a7d8a8bf1f76a28aa76ba8aa1ae195d1a4a8a61898aa281124ac1bc2a19f2c962aad28dfa57b2d332c7a2a10a8142ef22cbe2b8fa88f2e912d762ceea8162f2f2ef22c4ea9ad2fbc2e912dbaa92330442f0c2e1aaa5630a42f4d2e0baa7830e12f872e2daac6301c30c82e3caa772f602e5d2dd4a820210320441d7ea078983e9775999e983d962f94a590ce9920949c08040a659af78e1e11e4128c9ac688f815b6173a9a3b0da819561bb599f510a21a2b1c4e995211a11a191ca7989811941a0b1cc4987312a91a221ca398ad12971ae71b6f981912121abc1b7f981312c719171b1f9880115519971aaa9728110919361acd970c11c318d919cc96b3105a188219689681101f1840191b963e10c917fb18cb95d60f0d177c180895270f4a164e186994450e97155c172b937b0da414dd15b291ad0c32141215e990dd0b5b13f6142990460b87126b144190190ca6135515d18d190ca6135515d18d0000f98fed8fe2020000f98fed8fe202389f07a0b8a04a1c47a3dea403a53d2435a7fca905ac68284a9d11a28ba1e71900000000000000000000f897c08ff10b85a5f0aa28a97f2554a714ad73aba03030a2e0a7831fb6318da4b6a7c1a6422e19a43aa604a84a2b11a4b1a6afa7e728e4a3fba604a83126a4a3fda649a8f12300a3f5a61ba8f720c9a202a71ea84e1ef7a2b4a6dda76b1a8fa151a6a0a7c890711e439e29a2229f242beb284d267da5952d6d2cbe2a4fa8742e2f2d382c26a9dc2ed22db22cb8a9862f642e2f2d17aa1630fc2ed42d4eaa6030ae2f572e80aaae300e30b32ea6aae13049300d2fcaaa28318030662f23aba430e82f9a2e60aa10255b24e12137a2a099bc998799769c7b9881980199529b1f96fa936f93ce9ba69144139914e69af28bcf17fa18259abb08e219941be599ba0e4e1a151c0e9a110f311afd1b0e9a3c10241af81bb1999610061a651bb499c4107e19131b299981105e199a1ad2982f10ed181a1a1f98cf0f701898198f970810db17ed180997760f6a17ad182596790ef8162b18cf95e20d5016ed1702966d0d02169517bf95280d9815ec163e95e50cd814ea156394ac0ca314ac15af93110c30141b156693040c1514ef1477920c0c76136a1437925d0a83129f14c890240c6a131215ed90240c6a131215ed900000598a9a8b0b830000598a9a8b0b835d9bf491ef12ef128299831e49247421eaa387a856a8602a939cb2a163a0901b00000000000000000000000000000000349ec2a91ba3f71ee6a58baf8ea8cc2fe0a0ada6f018a231cca2eaa14ea4292ec5a3a4a556a7e52adba308a6e6a6792826a402a7b4a78125d3a30ea71aa89a23a1a310a720a8802133a3bba620a8681fc5a264a6dba78b1d79a241a669a7d51b45a18ea5aba65b908224341db5971aa2de2c832b9929f0a7802e392d0d2c4ba9412f052eca2c0eaad92fb22e532db2aa4830522f1a2eedaa9f301030ad2e64abef3062303a2f9cab3b31a030b22fdbab8e31db30f22f2aac5c319d30b52f08ac13273d26712414a4e999889b789b2c9ceb981099d1995e9b2f9724953495ce9ba59434885189fb9a6d9146145814239b518db6169c17509b1088c017a118d09a810268184c194f9af7098a185f19d7991b0de318d019d099ba0dd118d0196b99300ed618e8192699a10e85188c19d598200f7e184219eb98d20ef9170119ae98590e8a176f186f98f20d1317331833987d0d381678170398260dd015f9167e978b0cfe1482160596f20b5114ac15d494980a5613e4149c931a0a641243147b92560949121e1370928c08bb11cc122792c006070f49109a913e08b40e0710938d3e08b40e0710938d0000c18c8a8d2a830000c18c8a8d2a83c19cf79138993819d19cf79b621663247ca2f8a9a6a82828719b47a1769e431500000000000000000000000000000000369f45a948a2f220c3a781b062acb32f47a43eaa6fa58231e7a3c0a4eea4fa2d5aa485a6d9a7d42a58a46da67ea7432839a47ea69da701252ca479a606a8ad2214a4dfa60ba8e71fa7a38ea609a89c1cdba22ea69ca7f81983a2e2a57aa7c51660a27da571a60b10079f1ba480a59b9c4d283d2694231ba5042edd2c922b99a9a12f632e0a2dafaa2530e82ea52d30ab6f30982f422eb2abd8303830e52e1dac4231a3307e2f3dac7f31e630043072acf1311e312f30b9ac0032fb303830ccac4429a32879270ba65b9a829cba9c519cd299aa999f9a669bc89724952095b09b7b956b8e08900f9b6b9409884589949b099136146e14469bc58a04171118c89a6e8781175f186e9a6c02e317aa18a19a2707c917a8186e9aad09bd176718149a6009e917a1183e9a3d0b9c177d180d9a990a42174f187099be09a416b217da989d0a0316b316de97380a921550166997ec08ec1405168b96f6085c145c15619606092a1417150e965008801300144395540749127e138994e20685114413eb94d107c211af121f954b0895110913c294da059310aa0e00958504a30c1e0b56918504a30c1e0b56910000638acf8b1f830000638acf8b1f83d29dc491bc92bc12f09da620d61c0820c1a063a9b7a24625d79743a1429b2315000000000000000000000000000000006c9c1fa9769f0421d59cb3ac7c20632e12a006a89c98893088a399a6b2a59a2df7a349a6a5a7f02a60a493a6caa765284fa454a6eca75b254fa48fa6bda72b232ea443a6b6a78a1f56a337a66fa76e1ceaa2c3a528a7021764a294a511a76f9069a28ba5b4a6439933a29da5c8a6e79a3e9c71a264a4209f682afd28082708a7332f032e982cebaa4b301b2fc52df9abaf3002307b2e57ac2a317930442f9fac8031db30e82fe4accc311e31373028ad38326c31683044ad523272318f3098adf02941294f2847a7419aae99379d939ed799dc919895979e2c98e68ebb939a9db79675885d95f09dd594310ee189b29d00923b156714e09cb38ebe17b2174a9cd38cf5171518e49bb08a0f173917fb9a5c879816c917a59abe86ef165d17d9991082c515d8166f99e881571553160699c5817e143315ae98a1013c14e31466987d01de1393141e98650176138013c997480135120f1354973001d411a811f09658037711401203960e03eb109711f294da027c1000110b94a002160fc50f6a937502c50e900f88926802990d470fa09156025e0c3c0fe7925c051810ac88c4985c051810ac88c49800005f061a0cec0800005f061a0cec0855982010eb10261a5d9a9c1b941c57216b9e19ac6ca29620a79639a2449bd011000000000000000000000000000000003c9aaba98a9e721c9ea4a2ae37aa2f2f05a2e4a6d8a3413109a4a9a264a6eb2d04a40da65fa7f62afba3dea5e1a62728c6a317a630a74f24b2a322a655a7e320bca333a67ba7f61a82a333a682a7ab1783a3cea535a786100da3baa5e1a62790a7a277a597a6f89536a243a543a6779578a1e4a4bba50e9aee9994a1c7a36ba0232c7d2a24299ba84130f92e932d2aacdc302330712ed8ac4e319930752f33ada231eb3001309dad0232453167301bae7b32cc31b33054aec532cf31bb3074aeb8289f289a27e9a5a49a4a9b5b9a739c019b8f9ac49b4a9c459a4f9639999e9c49988c913693269c7f952d0e4309709c7393ba123d12859c6f91e1142f14569c798f71152b15749c8e8cad16cd155a9cd7890e162416229c6f89ba15cd15cf9b52897f15a015929b158997144315ae9adc8841142314959a5f88a9121c129a996287ec103710aa98bc867e10c50f4d988086e40e470d18986d86340d060d4a973d88200de00c9496f587dc0c980c4a955b85840a2309ec940887130aad087b94a684c809f90246940d862f02d2820d9472850682cc87789308893d8ade8bc79008893d8ade8bc790000058863883d408000058863883d40892980190cc10331c819c6da09e1ced2264100bac53179420be945ba2e89a6c0d00000000000000000000000000000000ff9c5aa978a0621e17a670afd3aa4f2e5ea35caaf9a7da30d0a283a356a5c72d78a368a5a0a6062bc6a353a539a67e28d1a399a587a657251ba4f4a5fba68423efa3eea553a7e2207fa3e1a50ea79a1e1ba361a5b8a67b19e7a223a526a6051650a2c2a409a6938ff1a1a3a49da5499599a15fa452a52c9828a13fa422a5f99a8a9a41a0fba2949fe02ccc2b0e2a7fa9d4302830aa2e2bad7831c130902fc0ade7310a3134306bae4d3271317a3011afec320632e23047af563277316e3079af722557253024f9a5959a6c9c649cf19bda98af956a97bc9c37981492ed938f9cfb97009428953c9c40963a881890d89b6994f7125d12f59b8692121568150e9c3191a114e9145d9bd3904a148e14569bcf8f0e1447145e9b3f8ea5130914f39ac48d1b13dc117c9a308d55115c11ef99ba8cec10fa1082995e8c220fa40e26991b8cb60c680bc998c18c730ca60436989c8c0e096684f997768c2b0326848497278cf582d9899496968bc0827689af95328ba5823b890495b28a7787f288bc945e895b82eb8b28944589b986698b43941f87f581a282e892f888e985c4825294f888e985c4825294000070849a82cd07000070849a82cd07c2966e8f759093198199309e771cd6240f900aab1c973922e691cca2d698880d00000000000000000000ac83008c7a0470a216aa86a7b222eaa189ad2aa8d82ea3a0f4a11a988c3001a409a6c7a6cc2d09a347a505a7e42a62a372a567a68628dda211a542a6e1250fa386a56ea600240ea357a597a67721d4a24da55ba6af1f5fa2eda4eca55f1b56a2b2a4f6a5d61543a2e6a40da6988f48a2e0a405a68b9801a293a4d0a5eb99b6a18fa490a5079bbaa0fba3c9a4c19a8b9c6ba0bea2339e092c752ab52890a92a316f303e2f12aedf3123311b3002af8732cc31b730e4af1b331c320a317ab0f3302830d92e82ae051ea71ff81cb4a1d899f39bcf9c649cf399f597a09b6b9dbc984a955998569d04989d914395749dfb96760e5c90459d749542139209669dc3945e14e60f199dbc92e0140512aa9cb69187148511479ca8902514f9121c9c689045126e12949b0990c0113c108f9a4c8fcd0d960cec99cd8f6e0aab852399568ff703e08bc298db8eb283178e1d982b8f2d89f08fa7979a8ed488828f3e97dc8d808b829042964f8df18a2e90ce95798c788cc88ff894748c3f8c7b904794fb8c248d2e90fa932b8cf78cba90e892728cec8e9490fc919c8bac8d0e91c093a48bf98d01903d91a48bf98d01903d9100005307e80dbe1500005307e80dbe159f969495bb16da1b5c9d279bbe15e623e4a233aa79a99026f09bd6a21ba1471500000000000000000000108cdc944d0a5ca3fca97da80e23eba31dae49a98e2e4da117a96fa49e308fa3bba7aca76c2de5a2b3a5a6a78b2a27a380a58da61f280aa38ca58aa66b25f4a26da55ba6e723d0a211a545a6332190a216a50fa6341ebfa201a5faa5c91ceba233a53da6e518e8a2f7a4f7a5340f74a2b8a4bfa5049511a25ea467a581996ea116a4fca4869aeaa09ca3a4a44d9adca077a35fa49f988a9eb5a1f7a2d09ad027042733253ba758305b2f192e19ae3332283125305bb0a331c4309a2fdbaf592a332ac228c0aae798c998399e5aa1d29b079d1c9e529a4e9a679434979b9be798e991bf935c9b1b98c58e4b93a99b73964d0899895f9cbb9521116809909ca994e312dd0f149dfd932b14760f219da6929513c40e5f9cbb914911f20dae9b7a9104119a0d3c9bc891c80e1707de9a7591790b8686ea999d917684798f6b993991278d2d92fa983791a98eff929d98bb90ed8fa6934498589054911f94f8970b90e79046944b971e902f916294b096d98fbc9081943796ea8e1a91ce938b95688ed3900b9433952f8e9f90aa93ed94048e6b903f935194e68b3f8fd993f995278e83914c950696278e83914c9506960000b709da10a8800000b709da10a8802093ba0e5a163c10fe9c9094271c9c23eaa3cfa935abae25ed9b93a23ba1671300000000000000000000fa8f86901d0610a3d2a9b6a85c2261a573ae3cacde2ecfa154a78b9d9030c6a3e4a6f7a7562d20a3c9a547a7392a64a38fa59da6d12741a397a591a6262515a36fa5c0a69323f6a25fa569a61121a4a22fa586a6391f7ca206a54aa69f1c3fa2f7a403a6991abfa1c2a4c6a55b1877a167a457a5730e17a11ca42ca5048ec4a0a3a3d2a4359463a027a367a4a69645a0c8a25fa473981ba033a2e4a39299339f7ea012a1ef986098c999af9cc7a10a2205211e1fcda6b42147211f204aa5d99bfc95c89a90a03799e29a939eba9d499a2298749a169c839a99984e9cb79c63999c96f09ab29c4998d58ef796399d0a977f11ef89019d6e95d115e514129d38957d15a014cb9c5b94ef153d14b19cbb930412b311b39caa93b10c508e9b9c7c939885a492639c6c94c88b1392039cf492f68d3593699b0c92a68f08946a9afb917591fb947a997a91d592c795699895912393e1958f9730911b940b961897cc90be934196c29678900f948396839675909a932296229674904593cb955d958090e5920795a0949290ba92cc944b936c90999285946c91cd8e9a914e938690078cd690c493c493078cd690c493c4930000630daf1765090000630daf176509501846221224c91f551c78276929f02594a001a631a8a328229d0da401a407180000000089887302000001964292df0bbb8b55a58899471d291b61a9be263b2d79156ba23f271a304a9dc39cd094092d59a2c8a424a6cd29dea364a5d9a63c27d7a3a9a510a74e247fa376a5cea6a6223ba339a542a6f320daa2d1a40da6fe1e4ea297a47fa5651cf7a135a41fa5601a9ca121a40aa54a185ea190a3c8a4af1420a111a374a4d00dc9a09aa230a4798d79a04ba203a48d9609a0f0a1aca3a399ae9f83a16fa3ad9a139f30a115a3559c9e9eeda0c5a2269c4a9e3ca031a2da9afd9c679fd8a1369f4b9c1b9fc0a0839b769c429d7e9fce9a939a8799149cba97f099f8964f994f997099629452971a9ae0973014df137a9bd994eb18f418009c53933b19be18329ccf936c18a7175a9cfe935116e5156b9c0e94ef14fc11579c4994da0f3b885d9c349490859590909b059462908394c49afc9399939696c89a38942f952d985b9a2b94ba957798c999d893d4957e981d99a093e7952c987598179379952398239882928195aa972b97c29163957b9793961091dd94c3961f95de908594d595539479903e94829516944290ac9357953c933c90159434950d93c98ed992e594bd910f8f629279944b920f8f629279944b926d11000035148f8b6d11000035148f8b6e9a6a9f40a07e14aa9cbc9a0aa1ec238d9b9dac8fa01a240992f99ee998a70300009987688f8302be86000000000000fd9a5ea8e7a08b1a3ea442af99a9152e5ea04aa94ba6e730329f65a178a18b2d06a19ca4cea5202ac7a2b5a54ba7ef26e8a25ca6a7a7cf2360a20ea64fa7ab21e1a103a508a64b1fb2a142a46ca5d11d9ba1fca3daa47a1caaa1b5a3e9a4641a5ea199a3aca4fc1423a144a3aca41a0efda032a39ea458949ba0d1a268a4ea9634a037a2faa38f98ce9f30a19ca2c39a509ffda073a2cc9b249f1da18ba2f09cda9e42a1f3a2b89dc19e58a115a3609c1d9e17a18da2d09b5e9d5ba05fa1949a749d26a000a1aa97da9b199de79e2f94769919982c99f5931c98e608c3905e982d957d181d191d99af92691b161c9f9ac090cc1b081c089c7591ce1ad21a7d9c58922f182e18fb9cc492ca14c611c39c7293c90c888ec39c9e94758c9094b19c7a9515955398719ccd95b6962e9a5f9b4795d897d69a239ade944e98da9a4299da948198d29ab298ac945598629a1d9840945d980d9a439712942398a0993f9659934c970399d495a592a8969d98ef941d92459668984e94ec91dd9522980a9472914795eb97bd9340914295d696ac931b906294eb9500949690f9934395358c9690f9934395358c00000000f315d80100000000f315d8019d124a1ef01e2a1c569934a2429cce23f217c0ab341dcf23a89427a1c9994f8400000000cf8b5d005582000001852f000799eea8809d991a9f9498aede95982d120f5ba17a97bb30ada115a410a7742de9a160a607a8172ae1a273a79fa8e42667a38ca7f2a89b2167a36aa7b9a8141defa2e5a5f0a6a01beca004a2a4a3601b8fa0bba1c0a2ff183ea1f7a270a476154da18aa263a4d90edca0d7a17ea37a0ee89f4aa0eea11e8e139fdc9d90a06294d79deb9bfb9f3f9a419d8c99a09d4d9cbb9d039c449d209fde9dca9e71a071a07e9e1aa179a353a0de9eeba140a4769e139e60a184a3d599659dafa091a2c097e09c42a0c7a1b98a679c679fa6a09d0afb9ad79b909d988a61975414e39012944090c31cc41b7e98d383401eba1e1e9abf8c771e161fa89c33916c1d0f1e0f9e94926e1b261c509e7c935c16ec16d19d08947e86508edd9c6895bf9301978e9cee95b696be99df9b4996d1983d9bda9a58962f998f9bcd9908967799879bf798a5955399b09b609841952f99829b1c98cb94d498989a389746945f98f499d895f79309989b998195f1937c975b99de94b993479706995c94a993d996bb9845946693cd96a698a793eb92b6965e98c592b491d9956c98949326915c952b97579226915c952b9757920000a6153d1a70060000a6153d1a70064f9c3ea26ea2142162a0e7a6e4a6e8219a9a9ca721a0c721778f0a9c8995c789000000000000000000000000b48a9e00c49c05a958a2ad1cfba080ae76a8a02d549f54a9f0a4a93006a42aa849a9372de3a271a80eaa7f2921a475a8cda9e025f9a353a879a9112284a360a8a0a9901d25a3b3a7f3a8e31812a248a255a433104ba1559dfd9e6099caa0e19c5f9fe6956d9e4d9483958315649d3c14368f0f1cbb9c19143215c31c659b821bd81bcb1c43944221a1204b158a909d224424949cb098b61cf61dbba0ff9e46a1fba2f09f869fbfa3d0a4349c329f7da258a44c98359e1ba269a46d95509e20a240a43b950c9e07a12ba43798479c209e23a0288ab599fd98919abb13e497930fa80afe10148d671e251e498b6f1440216b223498cd15aa2122234e9ccf115f207421f89d948e9a1a441b0e9e12951787d091609d8d96cb956699039d32988399699ca69c61984f9a909cdb9b6c98319a659ceb99fb97969ab79c2199aa96b19ae29ccd980e965c9ab79c35986b95ec995a9cc4975f959e99139cc5962b955699649bdd95ba94d698de9a049515947e981b9a9b94aa931298b1994a9443936097939993944d921197639990947a92139701993d948a911f96b898f59201922b965d98b68d01922b965d98b68d0000e815321599800000e81532159980d1a0e4a6cca8d61ebea46eabbbac1a2055a9ecb008b27f97c4a93bb18bb2b7a0b6a91fb154b2f7a38ba807b0f0b0eea2eca846b035b1d49810a970b090b11d2a1ba7f1ad50af842e4ea593abbcac3b2ba7a456aa26acc52753a486a934ab232452a408a988aab120eda3ada8d2a96c1beca19ca7c6a8b50dd5a0a9a5dea63e9303a1f3a513a83199b5a0eba5fba77a9cd8a0dea5bda7d39cb3a0daa588a7709c5ea115a6b6a7799ca3a0a1a554a79b9b6ea065a529a7a99a30a028a5c9a6c798479fcba476a6cb95209fa7a435a68f958a9e5aa4e5a532956e9e11a472a56096959ec5a326a572966e9e0aa3bca4dd94ba9d31a226a4d892859ca6a008a21d16f09a6f9de79e041a1f98f308c190bb1a3d971820e7202d1b41146c242f256c0c251bfa243a26059cbf1782224924d09eb08b531c821dc99f889604946b96909ebc987a994d9c3b9de298f99b609d349c53980e9c0d9e0b9b0398ef9b1c9e5f9a7a97789b819d6d992b97959ab29c1a9888962c9a629c29973996159a379c6996f495e599299c5496f095cd99059caa953a965799869b4c953995d198c29a829467947198139a9d933894269894993593c893d1973c995192cd93a79705996b9104930897ac980492fd9111960598c491fd9111960598c491d41564187f18fc86d41564187f18fc86169ea4a18ca2fc12b2a4b8ab04ad4a1c27a8f0ae7db0221f6ca97fb0deb1782044a9cbb0f6b18d2297a8c5af03b18c272ca9e5b003b21229d0a839b034b1022a11a621ad83ae0929dca45baba4ac3a2780a459aae4ab2f251ba476a9f4aa272287a3e0a841aa981e02a381a8d2a9801a58a21aa81fa9be13c7a016a69aa722122d9dcca252a49c94a09c04a115a30c984e9c17a06ca3399cc59ec1a03da3279ceb9d16a21ca4819cc49dfaa1f4a3e49bcb9c40a122a32b9ac49b18a07ea14397499a249f57a0b194e19b32a075a1d994799dafa11ca3f096a69fcda2b3a44c99259e6da215a56b9a2e9e3fa24ea4d698059e05a215a43f96e29dbaa17ba37a08359d9fa0baa13815349a639cf09d201b11040d1efe1b991d681eaa271729791e771f5c28c4299da0bc17c42237247fa29495589523982a9f1599899c629eb29ca099819df29f719b7599949d949f3e9ae598089d2d9f72999298989c7c9e9f981898389cda9dfd975e979c9b889d8c97ab962b9b339d18970696949ad29cbc96a6953d9a9b9c70966b95c0994a9c24960d954e99159cd995ee9408999c9b3495b994e098139b3b945294aa98da9a799313946d98809a9692d9935398169aab918a92cd97c9993192de923e970599ca8fde923e970599ca8f0000b719ce1a9a0f0000b719ce1a9a0f8ba1e9a735a97a1c0da430ab7bac6d1ea5a55dadb1aed1226aa7c8ae4eb05f2586a686adfeae4125f79d07a77da82f203fa342aa29aca82294a65eadb9aec3248fa58cacdeadcf24cba43babb5acbb2396a40faaeaabd02167a45ca9f1aa0620fca3e9a856aa061e24a383a8b8a9381c3ca207a824a96c1ae2a04ba60ea875181a9f82a4cea5f013849e53a3d3a45e09dc9e25a3c0a43998229f2fa3f7a45c9c159f15a3eaa4cc9cf09eefa2b8a4e79b5c9ea4a27da4c099fa9d7ea253a46c98ab9d5ca215a45d97ac9d26a2f5a32d97999d16a2d5a31197a09de2a177a3c097049ee9a1cca38698da9dcca1cea387988f9d9ea18fa3ec981f9d24a165a3d198a69c05a128a32f99a99df0a00aa35a98ff9a869ff4a0770d5a1e1227122964210c24142c682dc9a453996b9e85a034a0fe9bf29d9da06a9ac99a159ec3a0779a229ad99d6ba0c799ab99799d1ba08a9847994f9dc39f11983399049d279f15979498989c849e0e9648983d9cf89da995bc97b79b769d4a954497319bff9c839487969a9aa19cae94f8952d9a779c84947d95dd993d9c00941d958599099cca93c4943499ac9bdc928494e798289b8d925b94a6989a9aae9163947298279aeb91fe934398da992b919493ce972f99d1869493ce972f99d186000053185519d90d000053185519d90deea018a821a9761b9da2e5a968ab151f22a49cabc8ac9721a6a44aac5ead002456a4f0ab21ad1a2405a485aa28acc62174a440aa04ac3121aea494aa44acee2095a4a7aa3dac75202aa41caabeabca1fa6a36ca9ddaaa51e79a3e1a853aaf61c38a381a8c4a9071cb2a20da82da91219c4a133a77ca89518f7a019a6c4a7991467a02fa5b7a68f0a1da085a4d8a53f934f9f1ea442a5f795cd9ec4a3faa41398809e5fa3e7a48f98869e4aa3caa4f898689e12a3b0a4cb98309ecea287a49098e29d70a245a44e989d9d1da2efa328974b9dcba18ca3b797199da4a152a37b97fe9c86a149a37397099d5aa139a36297349d43a12aa354974f9d38a105a31298349d0ea1f9a20c98e29c0ca1c7a2fc977f9d5aa104a311980998219c849e989607044e0c590e688dc894cc99219c1492969a489fb8a05696f8998b9e60a071975a99f69d18a04f970899a49dbe9f2597cd98239d2c9fdb96a598c19ca29e16969498909c379eeb9576985f9cfc9dcf9545982e9cd49dc5950098029ca39db29562977a9b749d9e950697169b4a9d03966496b49a059dd4959c95eb99a89c8795f5944f99179c98947c94f2982f9b99934c94c098b19afb916194c698619a1a91b2937d98f79987900d93b7972099818f0d93b7972099818f0000621a1f1c98090000621a1f1c98094ca16aa603a8ed1a7ea18aa8cca99c1d90a255a9b8aa1d1e97a2c0a94dab1221e7a2f4a996ab912111a3c0a95eab1e2115a37fa901ab87200ba333a99daa0220eaa201a959aa771ec9a2c1a809aa081d60a264a89ea9591beea10da833a9d51885a16aa7c7a8171730a1dea66ea8a816cda03ea608a8721486a0d4a575a7011142a054a5f6a6ac9003a0dca45ca60e95b29f87a402a67f977c9f45a4b4a5da98899f15a485a55399819faca333a51799849f5ba303a57a998c9f0da3d3a446992c9fbaa29ba491999d9e53a266a45199069ee7a10ca4f698759d72a172a39098049d38a1eda24f98929cf3a091a226987c9ce5a08fa22598899ce0a0a0a2af97939ce4a0a0a24098899cc1a0a0a24098579c9ea069a28d97af9b2ea08ba1db966797329c699d3d9439932b98d599fb9047964a9bef9cf792b899ac9dea9f8f959a99779ddb9f7e9698995f9da39fee965199559d779fc796f8981e9d279f1c969c98c49c9f9e64954998569c0f9eac941498c79b759d5d94f1974a9b199d87938297e39ac99cf59313978b9a769cdb9285963e9a459cb192e395dd99109c5d924d956799629b099206950999059b2291aa94bb98b09aff90b994c798589a47904094b598989a8291ec924698b39af094ec924698b39af09400000000000000000000621a1f1c98094ca16aa603a8ed1a7ea18aa8cca99c1d90a255a9b8aa1d1e97a2c0a94dab1221e7a2f4a996ab912111a3c0a95eab1e2115a37fa901ab87200ba333a99daa0220eaa201a959aa771ec9a2c1a809aa081d60a264a89ea9591beea10da833a9d51885a16aa7c7a8171730a1dea66ea8a816cda03ea608a8721486a0d4a575a7011142a054a5f6a6ac9003a0dca45ca60e95b29f87a402a67f977c9f45a4b4a5da98899f15a485a55399819faca333a51799849f5ba303a57a998c9f0da3d3a446992c9fbaa29ba491999d9e53a266a45199069ee7a10ca4f698759d72a172a39098049d38a1eda24f98929cf3a091a226987c9ce5a08fa22598899ce0a0a0a2af97939ce4a0a0a24098899cc1a0a0a24098579c9ea069a28d97af9b2ea08ba1db966797329c699d3d9439932b98d599fb9047964a9bef9cf792b899ac9dea9f8f959a99779ddb9f7e9698995f9da39fee965199559d779fc796f8981e9d279f1c969c98c49c9f9e64954998569c0f9eac941498c79b759d5d94f1974a9b199d87938297e39ac99cf59313978b9a769cdb9285963e9a459cb192e395dd99109c5d924d956799629b099206950999059b2291aa94bb98b09aff90b994c798589a47904094b598989a8291ec924698b39af09400000000000000000000000000000000202353264727679f5b28e42b512ca0a26528192c532c4ca543a2d6acf3a892a7eb949c9fa8947c90058d000000000000c38f000000000000ab894d914788d5897a9c33a82da22da253989aa63b9d6827df257f2a252b542a0f25b129702ada2548242728e328c1227e243b277e286a1cea24e9256026d411f61d04ad84af7aa20d27d2a213aaa0a27f2a3e28bb2600a3b3254babfbada3a7932bb92af3293ca49f2af42a8a2a27a42f29b1299729ffa0fd244d271c284e9b7d210425ae25059d682096221523ba9b6d229e246924bd9d672a222a8b295ea4942d012d632caea78a2dd12c1f2cd6a6672ce42bc22a5ba4ee259c258125579f479bb9a497a57e99f2187a1f4521b996d818ec1ecf2059963c16461e20209d977a17451e0e205c989d17f81daa1f73985217b71d881f5f98fe16a01d341fea97be165b1dca1e76979816041d7e1eb597dc15a51cfa1d4297a5154a1ca01dd39670150c1c231d6196fc14791bec1c9096ae141f1ba11c52962f14a11a5e1c86960514631a3d1c56969913081a191c1e964313dd19b21b8295ea129019331bec94d2123e19e21a5b94d31203195f1a9c938d128e181a1aa79293124d1893193f921112421857196991d411eb172919c7912d11af171a19a09056110a17b518a48c0000000000000000202353264727679f202353264727679f5b28e42b512ca0a26528192c532c4ca543a2d6acf3a892a7eb949c9fa8947c90058d000000000000c38f000000000000ab894d914788d5897a9c33a82da22da253989aa63b9d6827df257f2a252b542a0f25b129702ada2548242728e328c1227e243b277e286a1cea24e9256026d411f61d04ad84af7aa20d27d2a213aaa0a27f2a3e28bb2600a3b3254babfbada3a7932bb92af3293ca49f2af42a8a2a27a42f29b1299729ffa0fd244d271c284e9b7d210425ae25059d682096221523ba9b6d229e246924bd9d672a222a8b295ea4942d012d632caea78a2dd12c1f2cd6a6672ce42bc22a5ba4ee259c258125579f479bb9a497a57e99f2187a1f4521b996d818ec1ecf2059963c16461e20209d977a17451e0e205c989d17f81daa1f73985217b71d881f5f98fe16a01d341fea97be165b1dca1e76979816041d7e1eb597dc15a51cfa1d4297a5154a1ca01dd39670150c1c231d6196fc14791bec1c9096ae141f1ba11c52962f14a11a5e1c86960514631a3d1c56969913081a191c1e964313dd19b21b8295ea129019331bec94d2123e19e21a5b94d31203195f1a9c938d128e181a1aa79293124d1893193f921112421857196991d411eb172919c7912d11af171a19a09056110a17b518a48c56110a17b518a48cb3209122d922e4a0b3209122d922e4a0b926102935295aa6ac252027b6255faa0ca560a8c7a9c7a9409c4c9b569c211700002a8c25834c04000074895990700f0000000000000000eda399a5a2a6d224f9a530a9ccaa6b304f227425f123f32e3c224025bc25ae284e21be243925ce22112064216f2340194b1ad4a219a5d499ca1c67a9cfabf39f4e26d4a4d8a874a22129ad9faaa7f9a3da2934a1b9a83ca4c82bb826de200ea46e2b87299228b0a25c261c26792597a0c9999d987d99af9bf39c07a11da17416098ad68f028a221b9187f109a48a431f8f2dbb2c072cefa2452e8e2db62ca4a7512e652d732c59a61b2e1a2d362cfaa44c292b27af24c495a7974fa457a5ce1fbb92ee98139ab01b7c14301c1b1dd711e2164d1da51ebb07b017ec1dc91fad979017d61d9d1f44987317cd1d751fd8984117861d1e1fdd985016071d8a1e5b98de15ac1c151e5b988215741cb71d329849153e1c831d549827150b1c4a1d2698e614ba1bf61cfd9792144e1bc21c2b977b14d31a691cd39655148b1a3a1c8a960d144a1a0d1cd595a013d919a01ba4951f135e19321b79953e12ec18cd1a2c9511129718f919ad946b114a18bd1929946c11fe1745193c934211f1173019ea926e11d317fe18a8927211d81710196b91d410d0165118da92d410d0165118da92dc8085994d9a5093dc8085994d9a5093eb21b4237e2449a62b1ea421b32059aacea532a95bab7aa45d9f089f78a0871b00000000000000000000bf9015826f010000000000000000d0a658a853a95a98b1a9b0ac9aad2d2b4e145c1eda98842eb7109e9491150c29980e1d99159a4f241c97eca10fa3b51c4d9ca4a56da7ab93769a1ba86ca9bf9e3122d7a5a4a885a1b228cf9cbfa5a7a4c02a011f1ba245a5022c06276f1d40a6a62bf628d225e4a4d697b2980e9ef49c149d9398c59bef22019f50a451a56d2185992b9e649f971ef2903c98e698591fc62ba42ad6292ba58b2f8f2e522d2ca8ef2ed12dea2c9da7122fc72d892c6da7a52b7a29252893a24a16449f63a1d2154d972c9c479d39146a8e678e65096589c6118e1aa71b4994bf15c01cef1db1989415041d6c1e9299d515031d841ef7992816311d9d1e169abb15ca1c461e99999415931cf21d26996715601c891dcb98de14fc1b391d639881147c1be61c1e986d140f1ba31cca970d14bb1a6e1c7297d213651a321c0e9769130f1abb1bb1962413ba19561b5a96e5125219f91a099661120c19631a4e950d12a5180b1a05959e11321888196494c0109d17091999935a10d916771835935b108b163c18779244102516f5174f921910fd15f2174d92ea10dc168f181492ea10dc168f1814920587289ab49a0e920587289ab49a0e9283992a9d43a064a6e19d58166c9743aa9e1ad9a80622eeaaf7931b9d1294d0070000000000000000000000000000000000000000000000006ea7c7a8e3a93a2874a9dcac90add1308ca01fa12fa4532f7da0b6a3a7a4d528629f5aa49fa4142493a04da55ca6981e81a0eda629a83213cfa027a83ca9469c1894fca6bfa8989fbe253da196a6e8a1312aab23ea99afa4fc2b3b28152401a6a12c082a862786a7f32cde2b112a37a8692da32ca52b70a8ad2d1d2d8a2cc6a8f72d802dd52c10a96e2ecc2df82c05a9e22efc2d212dfea83c2f2c2e202dcfa8562f4f2e332dcba8912f502e392d16a9152d0f2caf2ac1a61b1d0392679a679ad298909c9d9da88afe9464977e960d951109bf1615196798e6119f1a2a1ce2989313f01b401d6499a9143c1c751d1899f814a11ce51ded987915971ce91d039991155e1c971df3980d152a1c2a1d9398b614c61bd41c469851146a1b961c109815140b1b601cbf97b013971a351c73974b13471a031c1a97f112fb196e1bcd96a112ab19181bf99648122d19931ab096bb11dd183a1a57967b115c18ae1994951e1113183919bf94b1107c17cf1805945510dd1673180d932510d4166018ef92381082164418c392dd0f65165818a492120ea5146e161691120ea5146e16169100003d8d7a942d8a00003d8d7a942d8a1e9fcda0b3a146a83da0989c8aa0aca9059a01a9e49e2dab4798c19cb6994e1000000000548d0f0a0000000000000000000000000000000083a70aa957aa172585a8ebab0ead642fcda34fa553a8342e8da39da6fca7572888a20da639a70324d7a10aa654a74120f6a1a9a60fa844195ca2c5a787a871925fa13aa846a95f9d471d9ba4fea632a1a728f321429999a4bd2b6c284724fba6ad2cfa298a273aa82c2de42be12998a8b42dcb2c9d2be7a8062e452d6e2c46a95d2eac2dcc2c86a9d52e122e212da8a95c2f7b2e672dd6a9c02fc02e9c2dc0a909300e2fc32db6a933303f2ff22de7a95d2e4e2d5c2c79a8da20941d02165ba08599f29b939c939cbc98529cd19c0b9c49917d111813149c4c032e183c19159be00cfa185a1ae79a4c11931a421cf79a8f130f1b8b1cfb9943134f1bcf1c319ad213a51bc91ce799bc13f91a7f1caf99a013d61a1a1c31997513651a111c449955134b1abc1bb398d812f919751bd3985d12ae19171b4f982f123719b71aa297cc11fb18621a42975611be18ee198197d8105218a419ad968710d21733196a961910f116b1186495770f4916e4170894960ea9151c17f3925b0e7915fb16d1927e0e3d15db16b292110e49155b173692860d1f148815b693860d1f148815b69300000c85e78d8e8a00000c85e78d8e8a1fa25ba296a3b7a6fda1f7a3b9a4efa8dba2b4a7afa8b6a3719f03a0b3a0aa17918e0000f084f1000000000000000000000000000000000071a84baa0cacbd2540a9c4ace3ad652f16a3ffa410a7622ebfa48fa790a8e6281ba431a745a8662473a3fca6fda71c2035a33fa75fa81e19dea275a78ca83092b8a201a8c0a82b9b9ea0fda664a8949f8521b9a0d6a4cea2622ac0263022fba59b2c6c2a702838a84f2d142c252a11a9e22dc32ca12b8aa9422e582d5b2cd7a9c12ed12db52c2daa4c2f5a2e332d90aae32fe12ead2dbbaa2030332fec2dadaa58308a2f0e2ecbaa8330b52f532e0dabba2f462e4d2d98a997229b20071ddea1fb98f698359a099b4b978a96bd93599b8d948f88eb09c59ba0901f119712949bf08b091586166a9b040d32193e1ac99af20f3a1a1b1c399a98103c1a121c8199ab112b1af91b1d990212471ab41b559948122b1aa71b0a992e12ea19701bac981d126f19e61aa79874110a19731a59982811d1181a1a659819118f18c4192898b51053187119d9978410141830197a97e90fbb17ef18a796ed0f02177418dd95d90e4016441834954f0e8b1545174a94080d9f14da150693bb0ce11321154992050ce312ae147d911b0b0512f0122294730a0c1261148391730a0c12611483910000228ced90938a0000228ced90938a11a115a248a372a615a320a795a548a884a721accdacb5a5e19c629f269ebd17f792000000000000f88a000000000000000000000000000005a564ab45a9e024f9a69fae5eac8b2d01a7a9aa70acae2cbca40da8fda858280ea4f6a6eba75824b4a3c4a6c4a7fc1fa2a3f1a603a8ef1806a3eea60ea80a92b2a2f3a618a82f98a8a29ea6cea7769c019f79a5cca6da9f05257c1c7b9e80a4072c932960271ca8602d2a2c752a94a91b2efa2cdb2b23aaa02e9a2d7d2ca8aa2b2f262ef42cfcaab22f9e2e752d2cab1f30312fdf2d61ab6430aa2f422e8dab92300130ab2ec1abd9304430f52e03ac5930532f362e58abf024af23382168a42b9b139c809c499de9989499569aa89c4c971b959496929c2b931e0e8812159c648dbe165e18479b0f03f018ea1aea9af50cd119811bfd9aa50db6195c1be29a3d0faa19541b719a97109a19391b659a551076199a1ad9990e101019281a759949109b18a419ff98ec0f231828194698530fae17d218fd97b40e41174e180b97840e8a161d18bb96e80d4816d817e496690da4150f179a961a0d41156b160196eb0cca14cd150d95a50c541499158494090cc0130915fc93d70b83138d141393190bce121014d2922e0af611f1136691c70a03122c140c92c70a03122c140c9200001d851687e78900001d851687e789e89e65996f9d40a6939b5b20801f4fa8449d6baa1ba15ca98c96119e05974a0200000000000000000000000000000000000000000000000098a6cbaa62aad52422aa9fae5daf212f30a1d2a106a1672d01a37da50aa6f22778a3eba59da6582368a31ca615a7021e6fa3a7a6c8a76312a1a309a722a8e09146a3b8a6d7a70098f8a296a6c6a7199a57a23fa66fa7da9b209ed5a458a6cba003286024ac1f1ba6ea2c8f2bbe2953a92b2e0f2d012c83aadc2ead2d962c02ab802f602e3b2da9ab0830f82ebf2dd8ab5130942f412e03ac97300330a62e34acc43033300b2f93ac2f319330922fb6acde30fe2fc32e2cac8825d2242323cea33a9a229b089c4e9db0986198f498c39c35970d958396e29c11953d886d89949c1192be125914819c048dc21579172b9cbf87dd168e18c59b6c02f517bc18bb9bc709761846191c9bc10b72184119ef9a990c6b18ad19769a220e78186e192e9ab50d78187519cf99570e31182c1982991f0ef017ee189199a00d15175f18fa98f40d9d161a18ac98770d2b1646177298720c4b15b716b597050cbf141f169496c50a211443154395610a2813af1456945e095712ab13ab934509c211d812d8927707b710fa119c923c05ff0eb110b190b505f30c7410f089b505f30c7410f08900001e87458ddc8900001e87458ddc89a99e4393a49a5da6f09c821b1516fba730a115ac71a737a87098ca9c209ab3100000000034882602000000000000000000000000000000005da688aac9a950244aaaf5afecaf512e6da3dda634a8512d42a4d9a5c5a7322819a43ea608a71f249aa348a6d9a6781ff7a359a66ca79218e8a3cea62ea8b1918ca3c8a604a8de97d2a251a6bba7d599a2a203a633a79b9be7a180a545a69b9c189906a253a406a28a299c27eb24a2a7e32dd62c712b95aa2b2f002ee02c82abd22fa02e6d2d15ac36304e2ffd2d4fac8530db2f5b2e8eacca302c30ee2ecaac143170305c2f00ad8e31e530033055ad053138301b2fe4acf72487243a2349a42f9bf49d299e2c9c069a519a939a0f9c46984b968096279c01965c910890339cca940e8840896e9ca69187124f14769c928c2d16fb16299c61879c165918ed9b67829a178b18e39b570291177f18119ba806111745181f9b30094c172618ea9ae40a02170b18be9a580aa916ba17719a8a090516cb165699650a74159116b798e0081515b615379805098b1477150998220965145b156497e90883138714ea9621089f120613fd9554079e119f1243951f06691119127d957506a2116b11a195f004f610311292952f065110b6087a96f000290b040b8f90f000290b040b8f9000008285398a5b8c00008285398a5b8c9d9f719c6e9db3a5749d3e9e179660a814a08ba653a5c7a2b799ed9c049c8f11968300001682e30000000000000000000000000000000000fca0dca9d8a48222839af0ac39a28f2cbba1e6a848a63b2ceca29ea7d8a51327f2a360a6e4a72d232ea484a6a1a7c61d25a471a68ca7e51100a42ea642a70d9843a3dfa545a7309abea2a9a5b9a6279d6ca28fa5a8a6fa9d61a27da5b4a6e39fb1a14aa531a621a03291c2a14aa442a2c42a0529252709a9992ea32d792c08ac0530b02e852d96ac6f30732f1a2eefacba301630b92e52ad093163303a2f94ad4d31a930bf2fdaadd7312d314b302faed3301830d32e4ead05236723cc2193a3e599ed9a7a9c2f9e3999059202946a9f0c98a69190939e9e7496698e1195b29eef94f2871f90039e2d93c010910f349d70911b141d14da9ca68f6e15e7156d9ce68d7f153d16eb9b208cd215f015899b8a897e1577161c9b288615153315999aea81b014d814259ac781d5138314ba99a6815f133b145e998081dc12e013ff986a018b1268136b9850013112fe122b982f01c8119511df971c01ad102312d9960401e210a710b695d002ba0f051137959502170fed0fdd947702be0e380e529467029a0d020ead93bf00560c030e82948202620f4d0dc3978202620f4d0dc397410f95179a192117410f95179a192117579426142011b0971d9cc81db415c5a6549db7abbb9d89a80392049d469392898f8a00000000000000000000000000000000000000000000d8a503aa49aafb2392a97cae0cb0272e0ea3a19f26a5072d07a47ba671a77127a1a3c3a522a7102160a3a9a5ada6791257a3c5a5e4a6729b78a32da670a73a9e6ca3e8a525a7fd9e61a3c7a5eca6379ef7a27fa58fa6b09e80a267a57ba65b9e5aa260a56ca6c29e60a1f8a43ca6709f699805a194a3b6a2092b90294c285aa9be2f9f2e5b2dc4ac7d30c02f232e67adde303b30cc2ef1ad303192305f2f61ae9731ca30bc2f6aae36324b315a30d9ae1930da2ec32d15adc71c221f041d77a23a9b9d9c0a9d7a9d699a3899cc9aff9c709975963098249df89785911993269dab950b082289fa9c0594c110450fff9c0d92f41323142b9d3e9087141215379da48dbc159b15f89c158c4b151d15899c8a8bad15c815579c648bd51490152c9c22898e146a14d39bca885313b1123f9b058a8c119e101a9a3b89d80f0e101199b5882f0f5b0daf9889883a0d280d839876881a0df40918982688070dc6097597e187d60c8009a69666877a0a2f09d49518875b0725034e95c386f906f78200953d863082d1821a95ae8505829b0212942488a2855d82ca922488a2855d82ca9249968e8afb117b1949968e8afb117b19ea95e190be0a9597ab9baa9d021ff6a57f10f6acaea20ea85392549d2f948603ee91000000000000a88900000000000000000000000000007ba464aafea840222fa941b065af1a2d76a36ba52ea8ba2c36a2c4a313a63228bea2d2a494a5952308a31ea5f7a5ec1e94a39ba590a64218aba3e1a5f7a6309143a39da5c3a6039ac7a260a576a6b39ba1a2f0a4dfa57f9c04a2c3a4c5a53d9c94a17ca460a5d49c3ea14ca439a5819ce2a0f5a3afa4c69cb39c8ba082a247a0b72976285a26b9a8b82f742e1a2dfdacec302e30a82e49ae5e319230772ff4aeee31f330e42f25afdf31fd30d62fb6af302c912b422a2aab4594128a7e989da1ba9a619c629ccd9c39999c9578987b9d63982e946f95a19de497da930595329d09962d880490309d2394f010880fdd9c679217141414839c989157135d13579ca090f412f7121b9c848f9c124414269c0b8e99130414cf9bba8ebf11cb11a69b2b8d49115211079bba8c9d0f070f269a358d150dd90bba99068db80c5b0b5d99e58c58099e040d99ad8c62036284cb989d8c2c83348a4498418ced82cf898197ae8bba8255890096168bc7870589a5959e8a4c87c988619534895482d38be4940789ae866c8b01953e87e5018e825993018a1889ec8a4493018a1889ec8a44939d94368a7814991b9d94368a7814991b6e96d090858ab5950b9b979d2b1ce7a50590eeaa54175aa80590989d89901901a1930000000000002e900000000000000000000000000000f7a03daa6ba51e201fa140accd9c9a2a2aa36fa89ca5202b6da2fca5e6a59527a5a2efa42ca60b2487a2eda4bfa51420bba22ca50da6ea1ab3a24ea53ca61d1194a209a500a6069750a2b5a4e1a5509b43a2b8a4b4a55e9c57a2b9a412a6309e15a2a4a4bea5c29eb2a174a469a51f9e19a135a41fa5979d96a0b3a3c0a4609d079fa4a168a3999d0d245922961e09a6912d9e2c8b2b8eac96309b2f242edeae52315630ed2ecdaf882ebd2da82c69ad0d238023f82128a5fc98459b619d859c969b689ca19d359d8a9973986a9ba99dc0981294ec96599e1498bc8e6c931e9e019759085f90609ee295330e8f896c9ec094a5121a09e69d7b931d12180f789d5f9255135e11f79c4d91c312ea108c9cf290e2108f10389c82907010040dbb9b1890e70a19060b9bab8f4504a4852c9a0690eb83d18bb4997c8fa383068e4699f58e1989d18f9c98698ee68b4d8f0b98c38d548b5a907e973c8dc48c0e9088962c8d768cb790c9957a8da18d73900f951b8d4d8ef890c894d38c178e8f914294998c008f679191934a8cd68ea08f4693038c8f8a818da593038c8f8a818da593ac077f168317a21dac077f168317a21d5e933f8a680acd90729a6b9a041cafa5c49896aa77a2daa76491a69e47916b85338f000000000000f19100000000000000000000000000004b9b8fa8829fe81ed2a0fcab7da1dc2abfa1d0a594a4472b28a227a63ea6df2741a2c0a4ffa5572483a2d5a40ea6c6207ba21ea508a6d31c49a2caa4f7a5571739a2c9a4b7a5761063a2eca4e9a5349091a2f8a4f4a5d5959ea2f2a4eaa5409a49a287a477a5899cc5a134a422a5099d22a1e8a3c7a4689dfca0bda3a4a4419de3a03ba363a4a19d9a9f8aa2f1a3189d3498a89a1a9f67a13a21c32033204da6af2434240924c3a7811c761caa1895a4919b219c459f459f389c619c509e3f9fe59a00998a99e69c019a99957198a59c4099f89160956a9c3498c88e6190ed9c10974a089089649d5796170e53097e9d3495c012b70ff39d97945a124e0ff09d2e94c4117011089d3c934211d20d7d9cc7921a0f820d3e9c4192fa0be4868a9bd991dc04cb8cfe9a00929a8a21916a9aad911f8d159293992f91449015942d99c790ca905894c898ae904091959472985e908f91ac940e983e9024915794fd97e18f6d9187941f97718f24916194e296498ecf900f946196038e959032940496778d65909f920e95408c388f5c93d596d88efd91ef95b396d88efd91ef95b396ec1092132915728bec1092132915728b9794040a21146e97e999479aeb1b9ca54d95d0aa8aa0cea6b990b89e6a8f1e851a89000000000000ae900000000000000000000000000000209e2caafca4d41d5e8fb9ac941f022b94a27ca788a7552b93a29ea6f9a67526d0a230a58ea6f621c3a2f3a42ba6581ed8a21fa565a68f1aada21fa51aa624178da2eda4eca568903fa2f4a4f2a51396f7a1b7a4b2a5a69898a185a475a5479833a128a406a58399dca00ba4e2a4a19a8da089a394a49a9b4ca0d3a252a42c9b21a07fa201a4159c8c9fdfa18aa36f9c579f26a134a2239c119e8da0d9a12b9dad9efd9fada1049db49d07a0bda1a49c379d3b9f10a12c9ddb9c9b9ca59e459d119b8899059c4a9dc79997956e99a49d269904927598489e4198a6887e957a9e2297a40e7b90889e639659132210089eb295f712cd0f039e01955312fb11899d21943510c20e7e9d3994280629914a9da594e28e1495ba9c9d9400935696549cd6936292ec953e9cbc92e8921696fb9a439235932696fc993e9235943f9634990e925394db9640989b916c946796f0971d918b949a969597ca904e94df965997c7900d948396f596e590c593b8952596079171935195ec942391a092ac94d993f79012936f940892aa8f0b92de93d091158cb290a3934f92158cb290a3934f923119f218e618d08c3119f218e618d08c51088c1633183398401e722660293ea2e29f6aa85ca85817019ad9a0129cc30bab950000000000006395000000000000e58cdd9266834600dc9ed8a962a4b21e9fa279ad22a98c2a539c34a0cd15112bc6a029a066a11e273fa3c0a406a664233da30ea55ba68f1fcea231a52fa6701c76a2c2a4f8a5fd1653a293a4c6a54b90f9a190a479a5d795a9a12ca40da57d984da10ea4f0a4e3992ba16aa37da4e19af7a0f1a25fa4d99bb6a086a222a4639c65a02fa2e9a37d9df49fd5a18ca3799ea39f9aa147a33e9e0f9f1ea1f6a2f89dec9eeda0b3a2329db99eaca05aa2689cfd9dfa9f80a1a59c1a9d3a9e48a0f09a5a9cba9c889edc99299bbb99849c9799d89985947f97139bb09806897a8ab09b71972e146e15769cc2956c171a18a99c07951717d217cc9c3a95a815c714f29c3a9540145212e69c059551109208009dd09424860991a89c5e94aa8efc931b9c2f94b7920896d79b37944b943597c79b14949a956798de9a0e949b955998489a8693289666989c992b9340966398f498ae92cb9514989b984292c49506980698b19147955f97ed966b91bf949696c995e2905f940596ed94a4902794b7955594359001943095b2932f90fa9310958293ef8e1a931e9546922690d9922194ef922690d9922194ef920f190a1d341e3f980f190a1d341e3f98678f03846f8579933a17ce239b25dba4f49490ac879dfca5a88c7199058e708544823a9700000000d68fa9950000000000000000000000009ea360a9afa87f1fe3a504ad0ead522c8a9a4a1e3a16622ceb9fcca37fa4562720a182a460a5982227a287a5fca6971d34a2d2a554a7fb199ca1daa4cda5871076a116a4eda4429057a195a3d9a4f89828a145a3a3a4129c10a132a39ea4849ceaa027a399a4a39daea009a377a4a79e76a0a6a23da4fb9e2fa051a208a4459ff59f05a2aba3ea9ea99f08a2bba3b69e4b9f0ca281a3839ee59ea9a156a3ab9e399e31a1fca2269dc59deaa04ba2c99b5b9d8fa0d7a19d9aa39c2f9ef39f97999a9ad4983d9a7b974d9965949e956a9881974e148b15bb9a4d94411a661b169cc292c21a071ccb9c7392961a471bf09d17931d19ba18ba9e93931e1663146c9e679341108b08d29d6094c98c9d93d99d0695f8937197559dc49538968299bc9ccc952298489ace9b6e955198ea9aea9a0d95b198129b229aea948698189b9599be948698aa9af7985b9458980c9a6f98389424989c99bb97ea93a497f798b296d292a8969698c29582924296589876953192d8951a982795139247958797f59494910095df9686947a900c94e295ee9471900b94a495679271900b94a4956792281c841e841ee09b281c841e841ee09b990c1716b7126297959ca1a18aa0cea6469998ac1ca295a8408e439d6e92188171900000000000009c8cc08d0000000000000000000000008999f6a86f9cd21bf99780ac5d9c752bcb9c479effa25f2c49a0a3a548a6ad27f8a157a609a841220aa356a7f6a8071c77a320a819a97910baa295a632a8669012a177a21da44f99cda0e3a21fa47f9c85a118a43ea5959f75a19ba314a55aa029a164a3c2a478a0c8a0e6a2a0a4e6a083a06ca22ba498a01ca07aa1caa3eea08f9f64a109a3f0a0d09f25a22da4f5a0de9ffea2e5a4b1a06e9fe6a2cfa41ea0309f99a299a46c9c0c9e28a102a301980f9d32a07fa14f94a59c4d9ff5a0c00a959bf29c099ea88a8c981709aa0aff902593db1b561c6f979d89151e5d1e289ac703a61e8d1f499c9c8cea1d091f6e9df091891c221da89e77940e19d519b09eb0948c10dd114e9ed2949b8fe292889dc495ab959f98f49c3f966f98a59a549c61963799a79ba79b26969399b49b549ae295a699be9b88997b958399a09bee9844955299729b5b98b794c998dd9abd9738946098f6994896f39308988999d695df936d9716992f95a6933d97f598ae94a1930d97a4988d947993a7968e981b9447939f9643984e93a591e695d698ce952a91619567971d942a91619567971d940000001cd51c83980000001cd51c8398c29c46a246a49da48ba028a6a9a70ba75e9d89ab53a8d5a73b81109c5f065f86358d000000000000518c00000000000000000000000000006d9e3ea864a4221d279bd2acaca45d2bd4a0bba77ba64a2c0ba25fa8dba88f2759a309a857a9862396a341a845a99e1f6da34da86da9c6187ea3a7a7dca87f0f52a058a1c7a008165ca13ea5dda647a05ba1eea417a7cba1b0a00ea449a560a111a076a2c4a3f6a1719f4da2aba33ea2429f3aa257a351a2649f72a2e2a3b7a16e9f8da3dba4c9a09d9feda3fba40b9eca9f0da430a50b9a7a9f79a3c9a4a4952a9fc7a26fa47595a09e70a25da45f95609e16a20da45695269d49a0eca20597d69a659cd99d748a2b9adf95c398ed8af694af1af51a9191ba109d20f520c596ec15dc21f9227e9c24154f21da22be9e6983f71d001fc19fc194b41218092a9f2f969294b398389e4497b698449ba39d6898529aad9ce69c5f98af9ac39c279c6598da9adc9ce49adf97d99a009d129a5496ab9af89ca999d595619ac89cff987795039a7a9c69985895c999129cc39735955b99a29bd096c2940199d99adf95269493986b9a8095bc933d98fc994d95f092c897d7998e958a9228978399e1945a92f396de98c99457913a968d98fb939591f4952a985c929591f4952a985c920000e8195c19c7900000e8195c19c79082a0cba681a858a28ca4f1abedac4ea415a990b0b5b1e1a588a917b14fb27ba28ea918b15ab208a104a97cb08eb141a2d9a826b00fb11ea05aa9b6b0e9b19021e3a834b066b1752945a526ac5dad702950a439aaf1abe12416a445a9f7aa442020a4fea86eaa651870a3a8a8dfa96c0e35a153a77ea8b8967b9d4ca1ffa1ea9559a08da42ba6689abba04aa62aa8f69c30a18aa630a8759d54a1eca5cfa7929d0fa1d5a57ba72c9db6a083a552a7239d58a04aa50aa7069d6ba037a5dea61d9cbd9fdea462a63a9a669fada408a60499d69e4fa499a5a898949efaa31fa5b597599e68a3c2a487964b9ed0a283a42793a39dcca168a3b609e19c1fa026a1b218d2996e9ab39a7c1b7d92dd1c381e601cb1149f220124f919f2191d251d261099bd1941245f2504a04c10751fb320b3a093944a139d1237a0389748973b99da9ee4980a9bfe9ca19d7b980a9cfa9dd69cb397069c3a9e3e9c9e97bf9b149eb59b4397469b519d239af196859a8b9c7b988e961e9a569c07982d96039a369c5c970896c699309c5097e395b699049c05971b963e99559bfd953295b1988e9a219544946298f49971940d940d98769933948293a3971d997793a693ca97f5983d932f934797d598ed93d091439645985894d09143964598589400009e192f1be49700009e192f1be497869c5ca284a4bba0a1a4d0ab1fad79a2f5a7ebae64b063a2fba872b0c8b187a08ca939b1a2b2389f2da99bb0ddb16e97dba815b010b1261e58a9eab000b27c23fba705af63b0a9242da513ac44ad8e228ba44daaf0ab1e2000a46fa9d3aa961ceaa2b8a805aa7b1498a275a8aba98a8d1ea2b2a7e7a82d964ca152a601a84b9778a0fba443a691994ba09da4c5a5989a34a053a4c8a5ec9a18a018a404a5bc98209f12a426a5eb96979eeda3eaa45395f09e24a356a4d295589ef1a237a4cb96959e2ca35ba40797399f4ea3b9a4fb984e9f3ba3aca49799729f21a394a49199ee9e8ca253a48699729e2ba20da47698ba9ddda1c8a32694c29d67a11ca3ca886d9c449fa3a0e118aa95dc126b14691ece1a21254a264f20bb1fe228352a3e987c1cee25ce2734a4e1888c1c581dd7a12499c89ac99c08a0bf99579d109fe49c7199c69da99f919b4b99779d4c9f8b9ade98019d089fd99969988f9c829e68990498379cf79dcc983f97ac9ba39d8a98bf96229b3d9d51984196939ad49caf97c695389a909c43978395b399389cdf961e954c99019c22961b951099819b8295c194dd98fd9ae6944f94a598cc9a6a940a946598709ae493d5936398129afc927a92e1972b9ac494cb920197a9980891cb920197a9980891000015195b1a8783000015195b1a8783d2a172a7d4a8cf9d42a47baba3ac919fb4a564ad8eaecb9d54a7c5ae42b0d698eba711af63b01a1c86a347abaeace518649f00a809a9f512c8a5b9acecad5510e9a505ad72aee210cba4ddab01ad331674a42caae9abe30e4fa44fa9c4aaf98deba3d3a81aaa189408a36ca8a3a94f964fa20ca812a9c09567a1c9a647a812954fa05fa5d4a64d94c19f68a49ca52f93969f13a442a5b694879ff3a339a53d976c9fc7a30ca5c498659f96a3eca494984e9f66a3c2a40599e29e4aa39fa4cc98959e16a37fa49998569eeca257a4f598ff9d90a22ea4c798249e73a232a4cd99849e5fa21fa4cb99389e04a202a41e9ac99dc0a1b8a3fc99649d57a161a3e899f59ce0a0b1a21799f29c30a046a201985e99529e209e7617b725bb2d822f3a9e2892471d931b8fa4009bfc9ed0a08f9c9e9a439eada03c9a269a249e6ca08a9af899d79d3da08c99df99809d0ba015995399549d9e9f96983499109d119f57988c988e9c839ea1972c98319cfb9d27978d97b09b749da7962a972b9bfa9cc6957296949a9c9c789502963a9a549cdd948e95ee992a9cae942c959499ea9b2f94d4944099619b78938594ed98ed9a2f935594a5987c9ae59262946f98139a7592fe9313989999ac91ae936997b398a190ae936997b398a190000019181719238a000019181719238ac4a000a804a97b9d9da202aa7eab259c47a4edabeeac759af6a495acb3ad2e16e4a475aca4ad241b48a4a3abc3ac751825a485aa25ac590e83a4a5aa4facc99499a4dfaa65acdb971fa41baab7ab38973ca33aa999aaa69808a3c2a82daa7698eba272a8c0a97b997da2fea722a90799c8a124a779a881980ea133a6b8a70f9871a068a5e3a67d9800a0e5a42fa6d598769f7fa4b2a523991f9f34a44ea56d99e59ef5a316a5cf99c99e94a3d6a41c9abc9e41a3a9a4e3999f9e01a37ca4aa99679ea7a246a4e2982d9e8aa223a4ba98d19d5aa20ca41b996b9d37a202a41099609dfda1f3a305995d9dd2a1cca365995d9daaa186a3d398469d76a162a33099159d4ba125a319995b9d72a14ba30c99219c09a09ca132988d084906200b5c92c58aa39192947c90af99fb9d869f7495429aca9e87a0ac97c499319e32a0ea97b599e89d09a034982c99899d849f9597c798249df79ec897a798c09c779e04979c98909c399edf967d985e9c019ec3964b98319cf49db496fb97009cc69da1964697729b6e9df096bb96fb9a2b9dbf96f1957e9ac39c5a963795b2994d9c7b95ac943599c49bb6946294ee98189b67944394bf989f9a2b935394be98509ad5927a936798059ad6921c9307982c995e8f1c9307982c995e8f0000a21a091cb2040000a21a091cb204c4a0b1a633a851997aa1daa8eaa906965ca2b3a908ab538d9aa222aab5ab4c1715a358aa0eac8d1423a334aae9ab7e1408a3d1a967ab351409a347a9c3aa300dbaa2fba848aa4f9375a2a9a8e6a9f19222a247a86da97695b4a1e4a7ffa83a9757a143a7aca8d89619a1c1a64ba87596b5a031a6fda716967ea0bfa569a7ba952da04aa5dca6399803a0eea46ca66499939f92a405a6ce996d9f56a4bfa5d99a7e9f2fa490a5429b729fe0a346a5fc9a789f9ca320a5c99a579f4ba3eda4169bfb9ef6a2bba4d09a7b9e95a27da48d9a029e46a248a43f9a7a9df9a11da4029a049dbaa1d2a3cb99cc9c90a18da3ae99ca9c6ea162a38e99ad9c46a147a379999b9c1aa1eaa24799659ce0a0c1a228994f9c8ea03fa28698b5991b9e1aa0ed964f948399f69ad2937f934a99229bcb92b698f59ce39e98957a9aa29d0aa07f972c9a6c9dc09f0998cf996c9d9a9f37986599519d659fb497f098fe9c119f02978d98b29c7c9ea8963398319cee9de0951a98b89b699d2895fa97469b179d8c947697ec9acf9cc3940197879a839c8f945796339a489c0f94bc95ae99eb9bac931d953a99509b3c93d494fe98ee9a42928f94b098859a05928d94b6982f9a479137949498229a5b91929309989c998b91929309989c998b9100000000000000000000a21a091cb204c4a0b1a633a851997aa1daa8eaa906965ca2b3a908ab538d9aa222aab5ab4c1715a358aa0eac8d1423a334aae9ab7e1408a3d1a967ab351409a347a9c3aa300dbaa2fba848aa4f9375a2a9a8e6a9f19222a247a86da97695b4a1e4a7ffa83a9757a143a7aca8d89619a1c1a64ba87596b5a031a6fda716967ea0bfa569a7ba952da04aa5dca6399803a0eea46ca66499939f92a405a6ce996d9f56a4bfa5d99a7e9f2fa490a5429b729fe0a346a5fc9a789f9ca320a5c99a579f4ba3eda4169bfb9ef6a2bba4d09a7b9e95a27da48d9a029e46a248a43f9a7a9df9a11da4029a049dbaa1d2a3cb99cc9c90a18da3ae99ca9c6ea162a38e99ad9c46a147a379999b9c1aa1eaa24799659ce0a0c1a228994f9c8ea03fa28698b5991b9e1aa0ed964f948399f69ad2937f934a99229bcb92b698f59ce39e98957a9aa29d0aa07f972c9a6c9dc09f0998cf996c9d9a9f37986599519d659fb497f098fe9c119f02978d98b29c7c9ea8963398319cee9de0951a98b89b699d2895fa97469b179d8c947697ec9acf9cc3940197879a839c8f945796339a489c0f94bc95ae99eb9bac931d953a99509b3c93d494fe98ee9a42928f94b098859a05928d94b6982f9a479137949498229a5b91929309989c998b910000000000000000000000000000000009200425462653a50e288d2bc02c5aa8a328572c0a2d1baa091955a4079fd5ac839ce5a4bb9fbb9e0000000000000000000000000000000000000000000000000000f295e494ca98309f22a637a48da4eb221726cd2667a48a25d729592a79a1b5245a283429c39f0925cc27e1284da095253f2483244ea38b2518a193a793a72d29902848281da671293d95fea32ea8342357ad5eafa1a98e2874262426c7a44521f9237d2495141d1a361c6c1ce51583158d1a671c280d6915cc1ba81c2490b616461ba71c5292d814201b801be38e921f9b1f1820cd06bc2bc82a042a27a38c2dc12c362c01a6932cac2b022be9a535277c1f15925fa4a8a1bfaa3bacfba3150dcb10a014db9c77184b1f112104994f185f1ee61fcb981517d91da01fdb986517bb1d531ffd984617681d231fdd9836175b1d0b1fcc988d16121da41e86982e16e71c631e5a988615721cda1d14986715391c871db3974415f71b111db097f514591bd31c52979c14071b7f1cfc962c14911a381cb6960014571a191c8496aa13051acf1b5c965313d9198c1b2696f51280193e1b8b95d5122419b41aec949e12ea18361a5b94a9129218f219b8939f12491872194393f21135184e198292cf1109182119d6924a11a3171b194592bf11051764180892000000000000000009200425462653a509200425462653a50e288d2bc02c5aa8a328572c0a2d1baa091955a4079fd5ac839ce5a4bb9fbb9e0000000000000000000000000000000000000000000000000000f295e494ca98309f22a637a48da4eb221726cd2667a48a25d729592a79a1b5245a283429c39f0925cc27e1284da095253f2483244ea38b2518a193a793a72d29902848281da671293d95fea32ea8342357ad5eafa1a98e2874262426c7a44521f9237d2495141d1a361c6c1ce51583158d1a671c280d6915cc1ba81c2490b616461ba71c5292d814201b801be38e921f9b1f1820cd06bc2bc82a042a27a38c2dc12c362c01a6932cac2b022be9a535277c1f15925fa4a8a1bfaa3bacfba3150dcb10a014db9c77184b1f112104994f185f1ee61fcb981517d91da01fdb986517bb1d531ffd984617681d231fdd9836175b1d0b1fcc988d16121da41e86982e16e71c631e5a988615721cda1d14986715391c871db3974415f71b111db097f514591bd31c52979c14071b7f1cfc962c14911a381cb6960014571a191c8496aa13051acf1b5c965313d9198c1b2696f51280193e1b8b95d5122419b41aec949e12ea18361a5b94a9129218f219b8939f12491872194393f21135184e198292cf1109182119d6924a11a3171b194592bf11051764180892bf110517641808929117091e6021cda69117091e6021cda6f026fb29792b39ab87253627d42653aeb7a278a701a954aebba3b7a573a64d208394000000000000000000000000000000000000000000008a88c7940000000075a8e8a94dab8e28aca176a44fa7e0a31a239e26132762a41f217324c624ffa02f20a620aa2083a1561f1aa280a58ba4e9235ca5faa843a75528159465a421a938290da1dba7e0a8d729d8a342a93da86c29eb1c96a404a3439795a14fa3ae10b2121018041a608cca0376110c108d1c4a0e1215bd17ce1df78d4391698f051e81978e964b97211fa82de22c222c6da5e22d192d4f2c0ea6bf2d7a2cf12a51a5992d9d2b2c298aa4c2293a22509a5da11a981aa795a8f0940898a0a043a18c16b60e3b1481179e889c15781c7d1d5796b217d21d881fb9989617e31d711f81996c17a81d641f9199da164b1d051fde991c16ee1c5c1e5199b415941ce01d34993c15601c9b1df8980615151c4e1d1999f714c51b161de398b8146e1bde1cae986c14361bae1c7f985114b61a571c0d982b146b1a261cbe97e713081afb1b0697a113dd19891b659609135b190e1b28964e12d818651abf95e8117c18cc1935954a1130189119ae944611d91730192e943b11d1171419f3931b118917b6189893dd103f17c9186292a010b4164b18e993a010b4164b18e993339f40a131a0bba5339f40a131a0bba53c22c7258a271eac191c811cf616a2aecaa3f7a6ada863aec4a5eda781a8cb20f38b00000000000000000000000000000000000000000000c996739baa94c20edeaa86ac9cad18259da669a9cfaba018d517b61bfc95dda417955a9c289dbca3fa98d8a1d7a3d7a3ee9831a5a2a658a4641c6da51ea869a545260ba0e3a5eaa67629c9132ba5e3a7b22af51e0aa332a8c12b0a263c1d0ea8be2ba128382594a6f496279d5d9eb59c6799779f3ba03b20a49a81a05da1c821519a909f84a04121429c03a1c6a13a213b9f27a053a0260aa42c422b8b29a7a6fd2ec62d9b2c49a8832ef72c8d2ba4a8b82bfe28b32668a68f19caa0cea28a9ceb98439f14a086966794339acf9984973309ad12a7162399f514081c311d129c7915b31c761e2f9cf115281d9f1e689bec15fe1c6a1ef09aa615ad1c061e509a5815861cb11dc7991d152b1c511d3c99d9148b1bdd1ccb987e14501b941c82983d14e31a5c1c4b98ef13941a2e1c5e988813431af51b28982513f1198f1be697da127219351b88979f123519de1a2d975c12fa184e1a67961b129518f719af959111251874190595fa109c1705197194a610ee168a184d944b1093162118ca9344101d16f217e5924e0f72158a179e917e106c16081860917e106c1608186091a4a187a31ba2aba5a4a187a31ba2aba500901f14b61d12ac299f779f319d98aeb3a554aa37aaf4aeeda488a779a76022000000000000000000000000000000000000000000000000e097299b0192cd0d39ab1fad5fae3026dda79eaa7fac8a9e1f9fe8a12aa4eca42ea04ea427a511a470a02ca535a6e5a263a0c0a6a9a771a3009ecea67ea863a44a1fa5a4bca66ea5d127bb927ea4dca6632a5a24fe931fa8ce2b052836226ca85c2c4e298f26dda8a32c452bab290da9262d8a2c782b12a9872de32c442c4ca9c92d432d942c99a9112e7d2da72cc3a96e2e862d972c9da9cd2ebd2d9e2c78a9f52ef82dd52c83a9332ffc2dc72ccda9062d942bee2937a84e1e298c9a9b4f9f0e99749cae9c7a9802965f996499ac986b8c3b11b614649a6d106819e81a4f9aa112121bba1c969a5d14f41b121d5f9ad514441c751dc7990315671ca51dbf99f314261c4b1d9099c314d81bd01c0f993414541b8a1cc4980714f41a521c8a98a513a01a1c1c52981313731a021c7c98da12231aad1b4b98d812d8195d1b1e9854125c19c81ada9727121519801afc970112ca182d1a2597b1115018e21966963811091847199195c8106017c718b1944010b6164d186294f10f95163918f993211059161e18c593a90ebb15d1172394460d0e145b153c93460d0e145b153c9300005a955096c58e00005a955096c58e26a053a1da9f27ab46a28da2f8a149aec29e1da604a546ae1ea493a665a6a1210000000000000000000000000000000000000000000000009798ee9a0893f00d38aa9eaccdadec2792a7b7aa8aac26980fa370a5c7a7d1a496a2f4a52ca785a4d5a1e8a5afa6eaa2c6a16da6e2a70da402a2aca7a5a826a4c79e42a7c1a8daa4b1229fa028a5faa56129d5236919e4a7b52b782846249da8772c8b29fd264ca9ee2c6c2b9c2966a96d2d862c462ba3a9c02df72c282cc6a9132e602d822cfba9752eab2dbc2c49aae32eff2dee2c4aaa422f462e262d65aaa42f872e642d5caa0230cd2e922d9daac82d952c992b0aa97d20811ce915c4a1d59a1e9d819df19db5993c9df79d319d33938a8e8e89609d398973169918729c610b8a184a1a3d9c77115b1a1d1cbb9b0013dc1a5a1c5e9b0413451b9d1c159b9313271bb31c009b4a13b61a231c289a2313571ae71bf899f312f719931bb799a712ef198f1b7b99a812a2194c1b4b9938125419ef1a0899a21109198b1a7d985611ac18f6194298f8107318cc192498b5102f1855197e975f10901723193697ca0f8a167d18eb95f10ecf15531765941e0e4f15a816bd931e0e4215c016d893470e1d15b116c893e70d26153b176493f90d8b14c2157194f90d8b14c21571940000dd94ef94bb8d0000dd94ef94bb8d9ea26aa40ea4a0aa93a31fa504a6b7add1a0eba4cda401ae94a663a8daa8261e000000000000000000000000000000000000000000000000af98729c969be01378a97cacb4ad5c2527a740aa38acc91d6ca4fba662a88fa415a4ffa63ba8b0a344a3d8a6d7a7b8a2eda2aaa603a8fea2d5a207a73ea82aa34fa287a769a823a44a9d00a6faa7c9a41e254f11d9a027a6a92a4e27292351a86f2cf92937284ca9112de32bdc2912aa932d972c4f2b48aa0c2e032d0c2c7faa672e792d7c2cffaad62ee32ddd2c2cab4e2f4f2e382d50abb62fb72e752d3eab0e30082fbc2d6dab40306a2f1a2e0dac772e572d8d2c0aaa3d20b31d8c193fa3f899ab9b489c519e51986b984998a69d1295bb8e63904d9d9991250e8b12be9c6d8d29146315569c3a0b6818bd19ec9b0510d219b31bb39b0a11331ab21bd19a9111121ade1b409acf110e1a7c1bf399f911e6195b1b909971115f19c11a1b996e1139199d1a14993c11e118301a0999e610ac18e619cc98851076189b1990984a103b18541957981310a917da182598a10f3b179418d197ac0fe1165318f696a00e23161d18d095200e71151817e994f40c5614da158494670cf01321152394100ce412a614bb92c80be6112b12ae956509e610ec11ec916509e610ec11ec910000fc95e995ba8c0000fc95e995ba8ceca1e3a1fca341aa45a269a4ada3ccac1aa403ac6aa60bae089d97a8419e50940000000000000000000000000000000000000000000000004e987e9d029e191731a926addcadb826efa713abd9acbc24b0a4bda7d6a8ab9e0ba4dfa6d0a78ba194a3b4a6a9a790a278a3d4a6dba70ba2eca2cea6e8a740a294a2cca6f9a772a23aa28ba6b8a79ea2fc9ce2a461a633a47a265520779842a70f2c8f2917285aa9262d012c282a97aac72dc92c7a2b0fab4e2e5d2d482c54abcc2ee32dba2ca0ab4e2f3c2e1b2dc9abbe2fb42e852d19ac1b30072fcf2d31ac4430672f292e54ac8230e92f882e70acdb2ea82da52ce8aa5520381f521b2da3be9a769cd69c009ecd989399429ab59d5b971e965f967d9d679400881b09f39c2990ee145816789cf4827d185a1a489c090b6319eb1a3b9c5e0c4219c51ab59b010e2b19bc1a9a9ba70f2219a61a0d9b16100819331af39abe0fb618141a149a590f401880198099cc0eb61712191299040f22177e18c3985d0eb4163c183c98c30d6a16a3171198e30d2e16c617c697610d8b1504177797290d3b156416cd96e60cc114c015c0952f0c4a1490153495df0b9c13f5149e94d00a5b137e1429941c0a381206140694bb086811bb125f931e0a1711c112c1921e0a1711c112c19200008d90a08ddf8e00008d90a08ddf8ef09afc12311a52aa849b521b421f2cad2fa2b9a767a582aef3a18da7f7a45d9e000000000000000000000000000000000000000000000000ca98039cf097240f0daabbadc4ae662373a61cab09ac3c9d75a1d29f35a4dba40aa355a503a617a4f6a25ca597a63ba33aa33fa64da77fa3b6a3e8a614a8e3a273a3dca609a8eca219a376a6a0a747a22ca27aa6b8a705a3fe9b4ea464a634a57b2829255b218da8b62c802b92299faae32da72c552b8bab832e5a2d4a2cf1ab202f082ed12c2faca42f9a2e672d5bac1830292fe32d89ac44306e2f0d2ed0ac7030b72f572e15addb3050300a2f2aade72ef22de92cc5ab1e1d941d391a15a2d4992b9cfe9b1a9ee598a0972398d59ddf970f957196e79d8295568e1090959d9692c81031126b9d6c8ec4157917079def87fc160418af9c7f824b17c018a09cf7060f18c818369c7f0b0d182819059c700c571831197f9bff0c15184b191e9b8e0d1918fd18b69a710dc717bf18629a420d5d178318129a910d8c16431870993c0d1c166d171699af0ca815fb16c898460c121561162298720b7414ae15f1967f0a0014b114d1957c0a3c135c140f959809e911b213849485083911ae12509366072e102c1100937a05f10e92109290ad07080eb80e9590ad07080eb80e9590000019954c94858e000019954c94858e6b9d18990a9a2baa929df19db31541add6a673ac71abaeac65a2b3a737a6681b000000000000000000000000000000000000000000000000e993b39700000000cba834ad30ad2d2057a7b5abacac15a2f0a301a20da624a470a3eea5d0a6fca3b3a275a53ea6d9a24ca331a62ca741a2cca3a8a612a895a247a3e2a611a80ea2d0a26ba68fa7d9a090a2eba502a77fa0dca14ba508a6e0a0e7968fa199a353a41a29b3267524dea88c2d582cd62ae3abb92ea52d6c2c6cac4f2f392e082d99acf32fbc2e772dd1ac38305d2fee2df4ac6930bb2f512e54adb2302130d32e9bad113175302c2fafade52d042d1a2c4dab5717e515df9104a1aa9b959d2e9efc9cbe99c7997e9a289d92987c97f1973c9d96967893b0922f9d1595008e2989539d289299100412449dd18d5b15e915b39c248a8b169117aa9c5682a616d317429c3902b416eb17109c5806ea162c18bf9b0406a5161218f29bc408fb16ec17bd9b630895167717ee9a6009ea159016199af5086015eb153899e208aa14a615fa98fd08891470158998fd08e613c11461989f083d135a140198db075d12b812859608077e116312d2959706d210c91199954f06e7101411aa95bb0457100a113c951504af0e810f2993078354059d0b128f078354059d0b128f0000898c448c2d910000898c448c2d915aa0f39d179fb3a900a00e9b3e9cb0aca5a094a93ba44aad0f9a5fa7589cdd94000000000000000000000000000000000000000000000000cc93c89500000000f29b16acbca2da1c329d0baaf1a1aca45ca305a80ea799a4d8a25ea5a0a6c5a339a361a52da6c5a2caa30da6ada6dba276a30da61ba748a209a3c0a5c8a654a260a287a593a6e0a14ba271a58ba69ba162a228a584a663a2c3a129a5aca540a2ae9826a241a406a4422946270c25f7a8e92dcc2c8a2b2cac432f3a2e042d21ad1930062f992d7dad5d30842f2b2ed4ada4300f30ab2e19aee9304e30202f8caedc303230df2e1eaedb2bf82a672930aa6c960399799c10a1c79a2c9c5a9d7e9f5799c0966c981ea086981795ba96a99f39974d93d494129f5595e38dd18f5a9e48949207f508bc9db1928310c011539d5c905e13b214d49c1c8f09144d146c9c538d7114f6142c9cac8b1e14a1141b9c3d8968145514ad9be98515140d14309b5485a8128a13579ae18439120e13409a7a81b81291128799628187112c1230994c814111d211e5983101f3108211a1981b0198101b11109801012f10a010f096c202b50f0a1102969c020c0e1410bf958102d60e620e80957602a90cbc0c3e95c9006c0c030e2d95b3028d0eed0ff295b3028d0eed0ff295000042179b177990000042179b1779905a99cc173192bea8a69ddb14d91537ad71a41baac0a88bad8ba2faa71fa6689c000000000000000000000000000000000000000000000000cd951d9700000000e5a8f8ace1adb8223aa663a88dab59a3c4a2c3a3d2a535a5caa238a51fa6c3a4e8a23aa526a68aa31ea3a9a5b8a6a1a34ea3c8a5eba617a34da3c7a5fca684a223a3b1a5cda6d5a1a1a25ca55da6bea11ea232a539a666a1dea123a53aa606a1aba1e6a4c6a510a1269d8aa1f1a257a3c4279c25d42208a8d02dda2c752b57acef2fe62e6c2da8ad8b30ce2f2c2e49aee2302b30c72ec7ae11313430c02eddae0330b62e582d8aadff25f6256024e8a67b99d09b0f9d11a0a69b219cd19ce89e5a9a8198f099889e5499719628989d9e28987091f8921a9ef69500881b89e89d5394a30dd408e39dd9911912d211f89d13907814be13ab9d9c8ee1147514539d248d32150d15ef9c888bec14b615f09c4a8b22149714b19c078bcc130913659c7d8a0c127f12c39bb1895e107910de9a0189d70d970dbb999d885e0d470a19997888220d0e0aec985888210bd809c0980588ff0aa40959980d89bc0a5e0962976287b3072a09ab96a388750233033396eb865502f882c29548862f822988b895fd8507829e826a943d86ff81db0787933d86ff81db0787930000ca07700dfc940000ca07700dfc94069aaa970e9242a8239d069ba815dcace09dc4ab1b1738ad269996a6089c8e9800000000000000000000000000000000000000000000000055917996fc8c6a01bca738ad1aad7a197ca63cabcbac4ea472a287a11ba581a467a25ea40da597a2a1a2baa480a5b1a113a32ca511a632a144a3bfa5d3a665a1eca282a5a4a605a197a20ca50da61da137a2daa4c4a5a9a0eaa18ea47ea571a078a175a465a52fa00fa11aa4f2a4dc9eaea0b4a38ca4c59ecb9ebba166a3e0a07a20921f70181ba6d12b882a032925abf02eec2db82cadad1b30c52e452d7eae332f082eba2c0dae992934291c28cdaac9071d163392cfa1f799b39bb29c7d9e0f9bc2995d9abb9d77990e984099a99ea0984a955395a79eb097aa93f692179e4b963c8eef8fc89dc994dd07fc08c39dc5937d10b211449d4092b2113411d19c26916411e512cd9c4790871285128a9c288fc8102512809ca08e6e10b4112d9c158e1410810fb09b9b8d5d0de80e159b178e080abb0b489af38dac09e004f199008d91039e84a199b38c5d83918a56994a8d25832d8ac298b68c4788c18c2a980d8bc687468c0d97768a5287d98b15963589fd869d8be79506894d82c98ba5950089a7867a8b2c96e786e1017e02c893c589638cd28c8b92c589638cd28c8b9200007712061206920000771206120692609a1e9a5c9816a8e39ca3943e1cafac5f9c0aaa261dd3ac949421a7ea9986980000000000000000000000000000000000000000000000007592aa97bf94ac082a9c47ac73a47916a29fb6a825a425a49ea298a6bca69da360a28aa4b2a57ba167a2d5a4aba5c1a051a20ca5f1a518a185a237a51fa6b6a070a2eda4e1a5e1a046a2dca4d2a5eba02ca2ada4a8a50da11aa2a1a4aba552a1c7a178a47ea5f4a020a116a4f2a475a0a7a0c8a3bfa4869f71a077a399a4fb9f34a0c5a225a47a9f989cc89e2fa185a2a71e641ce81a47a5b32401244d23fda7ea22cb212d2157a60713ad14648ce7a19a99ca9aa69dd09c539ce59c829df39d819b3a9baa9cb19ef4990f99ab9add9eb3982c95cc96fd9e089890915593c99ece964a884b90fb9eeb95000854897e9ed894a310e0083f9e11944c10d60e8f9dfd92a311400e159de6913a11cc10eb9c9191ed0e600d979c0a914b0e83062b9cac90db0aff85ae9b4e903d04268c179bfe8fe083678e8f9a0b905c892890169a738f208cf2905b99a88e9b8b8f90f098168ef08c36905498e58dac8ce29053977f8dc68db590a196f48dc08e8c90ff95398d678e1591ab95e28c4e8f9c910d95b68c16907691ea944b8cfb8ff49114953b8ba48a358c0f943b8ba48a358c0f9400009616ca17ec8c00009616ca17ec8cc399cb99889117a71f9a6a940d1c22ac780f5ea85c20b0acc110cea6a809029a000000000000000000000000000000000000000000000000a483f39396848300f898c1aafb9e849b829d4fa8699f90a54aa201a6a7a684a323a270a499a564a12fa27ca442a5b7a025a2b7a48ba50aa108a2b1a490a582a01ea270a455a51c9f13a2caa48aa5b39e37a2b0a4a8a5399f3da2aaa49da59a9ebba14ba42ba5149e57a137a4e1a4829efca0e6a3c6a4d89e9ea086a352a4ca9f56a095a208a4459f57a04ea234a4a49f709fb5a109a455a1a79ef6a001a34aa1ea9d19a075a1da9e059df59ecba0219fac9c2a9dd39ee29d1d9c5d9a2c9c5f9eb19adc98019bfa9d089acb965a98229e5a991d944c95de9d9b98999145935c9ee49746882790679ebb9601083489589e1e96b40d03096b9e64956310ae08499e9f940410490ea29d1094760c9207169da5939d052b07d19ce69240850e8d519c5092208bd28f029c5f92678d86926e9bf29181905c93869a67911991ac94129a11918791e0949799a690e391059527997f9020929794b6988c90a991b1945b98a78f5391e9942a982c8fa6916794c1973d8e609189944c97038e95904094d696c28ef2907893df951d8a158e3d95ca98f08c53925a98609af08c53925a98609a00000418fa179c9000000418fa179c902a999f969e9ac6a7939945948d1eb3ab6898b2a90b2235accc8bb7a6bd09d19a000000000000000000000000000000000000000000000000ea8c799ab795280880960bac5e908d96a2a1d9a9a1a6ada39da106a63ea60fa31da23ea464a531a1b6a14ba40ea587a03fa27ba44ba50f9f3aa295a471a5a69f59a2a0a492a514a037a2a1a48ca5659fe3a19fa48ca5cb9e6ea16ca44ca53a9e0ea114a4e9a48c9ec9a0aba3a0a42c9e86a079a387a4cf9d4fa0c5a222a4289e01a037a299a3e59d459fa2a1dda28c9def9e2fa1f0a1cd9d2b9e44a01fa1839d1b9e14a097a0379df29d139f76a0089e359d509e8c9fb79d579ca09cfb9dfb9dce9aec984e9ba99e2299339270973b9fcf98278fa195709f8e98a088c993989fbb97680869902b9fe596340e6989ef9ee395d31018892a9f3e95540dbb88a89e7094f40c7188869e8a940e860191e29d9594cb90ff94569d5094f1924b96ee9c12943c946297909cee925a945097d69be39265944497ca9a8392eb944797ad995692fa9450970499e291ac94ca9666985c916294ec962d9801912794ba964a98d690d3936096b297ee9076930996dd961e9134933595fb95fa907992f59497942d91ec9262945e93c18f7a9237948d947e8d1891d5927b937e8d1891d5927b930000db17f81778940000db17f8177894629b5d9fa29efaa4b91aa527b6281baa871efca04428f6aafa9b5aa9ffa0a99a000000000000000000000000000000000000000000000000f78bdf9bc39bf00d8aa521ada1ac961628a41bab01ab8fa033a0e192629fbfa0c2a1aca374a46d9d34a26ea440a5be9c05a29ba476a55f9cf1a17fa457a5329de1a14fa430a5da9daba14ba427a53a9e6ba11aa4f2a4979e35a1e4a3c9a4ed9ef3a046a363a4589edea022a34aa4a79ea5a0baa214a4fd9e5aa060a2d1a3fa9f23a005a277a31da0e19fbca170a33ba0509f3aa1caa205a0f59ec9a03ca2a19e859e6aa0b2a1539ed59d4b9fb8a0159d0a9df39dae9fe39c579ca69c099e3f9c019b06997c9a599b4f997692ff90609c6398720fca10fd9cc197e11190137b9d1597e0131815a49d62967613e512b19d8b96fc0de90f199efa954e07d888e79d8295008d6e91919d3e9528915294299dbf941a936e969c9c9894859490977a9cba9457955198399c3e940096a498629b349476968a98bb9aca937d968a98009a58938c968a985d99da9213963c98bf98519202962c982c98eb918595b597b5978191ed94cb9668964591a094c2956895939056949a95ec941490eb9379957a941e90cc93099563942c8ff49265951694969050931195dd92969050931195dd926118e420712294a16118e420712294a1cb90ce8b280c10a1ce175a24a924c0a941951daaa3204aac209831a5f09bff98c088000000000000000000000000000000000000000000009493d293a185c50011a160a73ba7d70fa29bc49495958aa46d9f29a38da28da289a081a371a4d09f8ea1c4a40aa6569cb7a14ba55da6259c47a166a483a5179d16a1bba3a5a4d79d30a1d5a303a5559f5ca12ba458a526a045a134a467a520a043a12fa429a587a0fea0efa3faa48da0bea0c6a3b8a452a085a0a2a3ada423a04ea04da37aa4ed9f25a016a35aa4229f7c9f9da215a4eb9eec9ef6a1ada3829e149e12a18fa2f79d8b9daea040a2529c009db79ff8a0829bd19b2a9c5e9d719ac599ce95769764994a9801096b0a9e9bfc95f5171f19879c4e94a419561b379dae932b1a341ba29e27935a19af1912a071934b18581624a0ba93eb131c0f439f4094a206918eb49eda946691ba96579e7095e1957998889dcd95d697289afe9cba954098c79a4d9c5a957998bc9a659bed949398609b109bf894aa98129bc59acd94a098f89a1d9a7a9470985a9a459934940d9894995798ed938297129971971293e19672986996939273963a981796c092e0950e98d9957992459569979a955f921795d496299553914294c695279589904294cd95d79389904294cd95d79342196b22e223e0a142196b22e223e0a19791050f10103ba7039cf69e45a0a6ac3d9cc9aba096a8acaa8d1ca61598a8950000000000000000000000000000000000000000000000003e881696ef863d000c9662abfb95fb9ae19eeba8059fb8a3f89f19a6e0a59ea199a1e3a52aa7009e00a372a7bfa8f09b83a32ba828a9809919a2b6a543a77a9983a0ada136a3d09c4ea185a442a5a6a084a226a6b3a745a170a2b2a50fa715a193a104a537a698a014a1a4a4c3a594a000a167a481a560a0fea04da46ba530a0eea03da480a509a0bca037a47ea5259f41a0bea331a5c29edb9f50a3efa4789dd89e1ea227a4ea99aa9d9fa013a22f96e29c659f9ba048947c9c0a9d599f0a917599be8f04912e94cd94681b641c88976f904b1d791e6e99da83831ea11f549ccb03641e251f839d5d8ef61c1e1ee79e5f93e819a91bd79f58957014aa15659f7595f48c628ec89ed295a494e396da9d3396e397029a499db29663997a9b819c9696d099039c039c5896e7990f9ccb9ae195c499ef9b119a8395a199c69b6e9929956c99919bd198bf94dc98c79a119860945f98e699a696019409986e991e96db93ab9733997b959d932b97d4984995af93ef968c98d09443937a967298b6945b93a9962698ca93e391ba954c98e3946c9198959c9705956c9198959c970595d6183e21b1228ea1d6183e21b1228ea1329b6ba210a470a8459f26a4afa5fcabe79e25ab2ba878ace598f2a4359c0d98000000000000000000000000000000000000000000000000038abe90ab863480d096baa90ba0479c429e42aa95a395a3c4a008a861a7c39c60a24ca706a96c97f4a208a8fca80a90b7a353a85da9b798fca2f3a666a84f8f3b9d299e539a531a07a171a78ea8039e01a2cea694a876a04ea125a6b4a719a0f2a0c0a546a737a0cda053a511a75ca077a0eca467a6909f5ca0b5a413a6969e63a0b0a44ba6799d57a0a8a4e1a5349b10a046a474a59298789f7fa3aea4a2954c9fb3a249a4e293699efba1c8a3ba90b59dffa0c0a20794709c279e1fa1da95e7994d976e9b5f944a998d180a1aa5948f8d821f79205a98ee120621ba21259c381588216222329f0010e01fc0208ca08893f318261960a08596d7936398bf9fc29664977e9ae29ee397f699ac9c1b9e8d98679b249d5d9d7f988a9b2a9d959c3498799b499dcc9b6097279b3c9ded9a23967b9a0e9d7d9a98953f9ab59c7a995b95e699729cea987995c099089c58982f9590998d9bac97d9941699d99abe9683949d98749a5a96c4935a981f9a39965f92f9971e9a9e96809236974299879560922497e398499575917c9676983a945e9131963c98c0935e9131963c98c0930000951b3d1ca0010000951b3d1ca001dd9f58a61da8bfa5e7a325ab5eac78a958a8a7afe2b021ac43a9e4b01db246a478a90db15bb2c8a253a9dab027b268a18da805b0fcb0c1a2d5a84ab06eb13019eda893b085b141188fa599ac9cad17a396a419aa7aab0aa1b3a30da976aa44a000a4a9a8e9a9649ebba367a8c5a9ea9de7a190a7dda8c29d619d63a2eca3a79abc9f0ca465a5519c5aa1bba578a7e09ccca14da60ba8d19dd2a106a6f3a75c9e4da1aca55ba7889dfaa067a52fa77b9dada02fa5f6a6669d8ea01aa5b9a64b9d0ea0e2a49aa6c99cbc9fd2a457a6b59b439f87a4ffa5a09a7f9eb0a303a50b982d9ee4a264a44b95bd9de6a192a3fb890d9d2ea0a1a1de16c09cb59b2c9c8d1b7995d819391caa1cf214d921b823da1ba91aaa2424269f8cde19d224e82508a0d50f54212322e6a108954a18d4181ba15d96be91e395a29f2e9860996a9ba19ed898129cb49de89d62983c9c399e4c9d99972f9ca29ed19c8997ca9b309e279c4c97569b1a9d779ade969d9a8b9cda987a963c9a419c6f981a96fa992b9c1c98ee95b899279c5598c2958199eb9bcf9798950899079b8896f5947f983a9a999541942898a1990595e893f0976099cc945e93959710995794a093be97ea9835948b938797d198a292fc912c961398d192fc912c961398d1920000bf17c71aeb940000bf17c71aeb945b9d1fa38fa55ca44ba45cabb9ac78a7b4a603ae66af5da8baa83fb072b11da883a919b170b290a6c3a960b1cab21fa67da8a9afe5b037a84ea81ab00eb1cea64aa8ddafe7b0baa4a6a592ac05aebaa18ba405aae8ab73a0baa329a98caacc9ea5a295a8d0a9bf9e4ea233a841a9d89ee5a158a7a7a8a49e99a13ea6eaa73c9e03a137a5d2a6e59de2a011a58ca6919dc6a00ca57ba6bc9db9a0faa457a6269d93a0b6a414a6939c6ea0a8a4eaa5bb9caea08ba4cca5e79b0da058a4a8a5409cf29f30a465a51e9c8c9ff0a304a5449b589f7ea3c0a4ff9a7f9f4ca394a45b9a1e9fb6a233a43e9a609e39a2f7a38d98049e0ea2c7a3658f609db5a0f9a1021730990998f9995f1dac159a228224e120b21f9428fa299e1bf01c04287529aba38c11f2208722c1a3ea976e95229854a1c39b089dce9e499fe899939da19f8a9c3e99c29d9b9fdf9b0f99529d399ffb9a9898e19cb89e7d9a42988c9c569ed699b497289c039e8a99f796919b959d43997f96109b319dc3982596829aed9c8598ae951a9a829c059871959e99239c8f9753953e999b9bbe9621950599569b2096d094d598de9a88955c949298b79a68951a945298579ae69419945398ff991b943f926897659aa4967592d696d498c9937592d696d498c99300006419fd1bd98900006419fd1bd9898da082a62fa88aa2dda329ab43ac20a511a5bcacdead0da688a619ae96afb4a5e2a70baf75b0eca39ca6daad9dafed9f409ec6a701a9639cbca024a965aa2fa0b1a589acd7ad82a404a510ac46adeda339a43eaa02ac28a2fda319a97faa7ba068a384a8b3a9559f95a22ba83aa9d39e15a2a4a7c8a8549e89a1c7a641a8389ddea0d1a56fa72f9c5fa009a55da6839a41a093a4d6a50f9a27a06ea4ada5ce9917a04da463a59799f29f33a444a57799ce9f2ea440a55e99599f0ea422a5de991a9fdea305a5579a139fb0a3e6a4c79af19e4fa3a6a4fe9ab39efca270a4ad9a7d9e88a231a4ea9a729e2ea208a43f9bf99dbba1efa33e9b939d55a168a3829a3d9d82a0aba29599679cd4a1a7a27799bc24fb2c752e459cb51d0029e22943a6fb9aec9fb5a14da0ac9c1c9f55a14a9c9c9ac79ed6a0809b6c9a139e3fa0839adf99df9d1ba0ad99d1999d9ddb9f8a995899569d659f51992b99129de69ec8987098899c499e8a9818982c9ccd9d46986a979d9b5e9d769717972a9be59c86966996709a8a9c2f96fb953c9a439c8f958e95f099049cfd944095a299a29b7d94f09451994f9b67948f94f698d59a38945c94a798679a739374946898099aa493d693d097579950939b938f964e9819929b938f964e9819920000c31895198c860000c31895198c8653a070a7a1a8e7a156a2cca90dab76a30ea46aab9cac79a4c6a46cac76adbca3faa483acbcad61a170a41aac2fad74a038a38daa2bac8aa002a3dca97cab33a188a30aaabfab33a24ca395a936ab81a1b1a2d6a83eaac0a06da262a8c2a94fa048a21da868a9bc9fe7a18ca7f3a82c9f6da1eba657a8fc9dd5a016a689a7fd9c60a081a5dba6349c1ba020a56ca6e19bc39fb6a40ba60f9c6d9f76a4b5a5ab9b539f3da474a5f59b529f0ea426a5a19b569fc6a3f3a4549b1e9f86a3c3a40e9be49e28a39ba4d19a919ef1a265a49d9a319ed3a257a4869ae29d94a23ea4e49aba9d63a225a4ba9a9c9d0fa208a48d9a8a9de1a1baa35d9a5c9d94a19ea32f9a3e9d90a17ba3139ad89cfda067a271997a9028964e98cf9585006682e0871490e8971d9c199d95943a9b1e9f8aa0de970a9aad9e64a038989499229e0ea080983e99b29da09f6098f598589d3b9f3998b298169de49e1998a198c39c759ef89785987e9c3a9ed5975198469c009e14981a98109cce9d05989c97b39b939de2970597569b4d9da6976896d09af39c4b97bf95409a869cd09628959d991b9cf495ca943899989b4a956d94ef98069b01953494b598979a7f945794ae981b9af1939b934e98f099ea930f9316985e99dc910f9316985e99dc910000ce196f1bc18f0000ce196f1bc18f5aa098a620a8f39f58a1d4a8d7a951a016a28fa9dfaa1aa1b4a21faac1ab97a049a36aaa18acc9a025a347aa08ac57a0c3a2d4a971ab67a0c0a234a9a7aa4da060a2bfa80faa43a0fca15fa899a942a09ca1eda719a9f39f6ea167a7b1a8079f1ea1e6a66ca83e9ef8a07da61ca8839dada015a6bba7d69c65a0ada536a72e9c21a046a5cea6e39be49fe2a457a6149ca69fa3a4ffa5409c7f9f5ca4bca5649c839f3aa48ca5409c579f12a45aa5679c3f9fc6a324a54a9c2b9f8ca3ffa42c9ccb9e48a3d8a40b9c659ee7a2aaa4e79be99da0a28ea41f9c889d58a276a4099c439d24a246a4da9b2d9deba12ca4149c159dc0a1f0a3669bde9c76a19da3199ba39c30a125a3c49a8a9c01a1eba28d9a5e9bbc9f6da14a993696759b269d2796de931899949a8d935396d79b649d8795ba99a29d23a02b98b79a7b9ddf9f8e98889a6d9d9d9f7b98d1994c9d5d9f68984799309d219f4498d098f49cd99e2b9862988f9c4e9e80971e98219cc99db696e197829b499d5d96a197079bf39caf952f97a99ac79cdd95cd96639a7e9c44953996169a449c1995a595a599de9b7994019535993f9b3594a194fc98b69a5f934e94a798619a02935e949998019a349212945398369a5f93c8930d985f994f91c8930d985f994f9100000000000000000000ce196f1bc18f5aa098a620a8f39f58a1d4a8d7a951a016a28fa9dfaa1aa1b4a21faac1ab97a049a36aaa18acc9a025a347aa08ac57a0c3a2d4a971ab67a0c0a234a9a7aa4da060a2bfa80faa43a0fca15fa899a942a09ca1eda719a9f39f6ea167a7b1a8079f1ea1e6a66ca83e9ef8a07da61ca8839dada015a6bba7d69c65a0ada536a72e9c21a046a5cea6e39be49fe2a457a6149ca69fa3a4ffa5409c7f9f5ca4bca5649c839f3aa48ca5409c579f12a45aa5679c3f9fc6a324a54a9c2b9f8ca3ffa42c9ccb9e48a3d8a40b9c659ee7a2aaa4e79be99da0a28ea41f9c889d58a276a4099c439d24a246a4da9b2d9deba12ca4149c159dc0a1f0a3669bde9c76a19da3199ba39c30a125a3c49a8a9c01a1eba28d9a5e9bbc9f6da14a993696759b269d2796de931899949a8d935396d79b649d8795ba99a29d23a02b98b79a7b9ddf9f8e98889a6d9d9d9f7b98d1994c9d5d9f68984799309d219f4498d098f49cd99e2b9862988f9c4e9e80971e98219cc99db696e197829b499d5d96a197079bf39caf952f97a99ac79cdd95cd96639a7e9c44953996169a449c1995a595a599de9b7994019535993f9b3594a194fc98b69a5f934e94a798619a02935e949998019a349212945398369a5f93c8930d985f994f9100000000000000000000000000000000159748a20da2b99e8b247028952995a92628ac2c612dcaaaa027902b762c5eafcc1761a548a02baf5f9a94a4549ecca60b967fa2939a70a4859644a1c79a7aa2659ca7a401a0daa6bf9018a10e9c53ad9d254429022ab8ac72252029142a32a9c92466284e2970a6f0245427342852a5f82406a1e2a40ca99828f327c12660a8ce2a662bc32b99a62f2a8628092809a8b81f6dafacb00eaa75a4c0ac8fae23a2949d0ea7bba8321df20ce312a08d38947119bb1e191f039cfa18631eba1f37980519801d4e1ea493141441197e19c00fee92ce97cb8c7e1c5e283526212318a10e2cfe27382262a8f42b791e62a2a1ab1b2821249d1b2faa641db71ce41b37a49e9935a396a418a07215e31da41f839b6318971e1d20d699e3165d1df71e499946178a1d4e1f9e994717611df51e78993917461dc41e05998b16011d691e0a994816d41c2c1edb9898155f1cc31dca9842152a1c531d879806159a1bfe1c3e98b9143f1bac1c11989514ce1a7b1c1d983714881a341c7f970914271a141c4497a213f719c71b1b975d13a9197e1b7a96e61282190a1b3d9690122d19831a3e957c12c4181c1aeb94b0125418ab1945943c1307182d1901944812181833197e93e811fb171219d8931211861714194f938a113217f51840920000000000000000159748a20da2b99e159748a20da2b99e8b247028952995a92628ac2c612dcaaaa027902b762c5eafcc1761a548a02baf5f9a94a4549ecca60b967fa2939a70a4859644a1c79a7aa2659ca7a401a0daa6bf9018a10e9c53ad9d254429022ab8ac72252029142a32a9c92466284e2970a6f0245427342852a5f82406a1e2a40ca99828f327c12660a8ce2a662bc32b99a62f2a8628092809a8b81f6dafacb00eaa75a4c0ac8fae23a2949d0ea7bba8321df20ce312a08d38947119bb1e191f039cfa18631eba1f37980519801d4e1ea493141441197e19c00fee92ce97cb8c7e1c5e283526212318a10e2cfe27382262a8f42b791e62a2a1ab1b2821249d1b2faa641db71ce41b37a49e9935a396a418a07215e31da41f839b6318971e1d20d699e3165d1df71e499946178a1d4e1f9e994717611df51e78993917461dc41e05998b16011d691e0a994816d41c2c1edb9898155f1cc31dca9842152a1c531d879806159a1bfe1c3e98b9143f1bac1c11989514ce1a7b1c1d983714881a341c7f970914271a141c4497a213f719c71b1b975d13a9197e1b7a96e61282190a1b3d9690122d19831a3e957c12c4181c1aeb94b0125418ab1945943c1307182d1901944812181833197e93e811fb171219d8931211861714194f938a113217f51840928a113217f51840920000d0a2fca2c19a0000d0a2fca2c19afb20da249d274cacdf25a429ec2910af6e251f25822380b28fa807adaaad09b0c3a40fa697a63824bea0e6a170a28621879f95a1c3a2bb2182a5f7a778a8ef257fa801ac98ac17b01224c4259a25e6b00522962476259dab1b215824b22423a8f71f0d1d1d1953a5cf2071a425a7a7a6b02612937da2dea8892937269c22f9a960292f1a45a41faa5e2925a6c0aa6fa9012967a414a917a6ad9e50a8d7a9ef11529de9a58aa7c2210198d7a115a3b2226993089c3e9cac20309942a017a15a21dc9d5ba424a58723c92cdd29e72710a34e2d482adf2710a70e2d4929e524c9a8322d102933247fa9af292322599c0ca9a313bfa357a5fea44c997fa1b6a2969e0c830c960e96649a3d14391a2d1ca9999617bc1d4b1f409a4617cf1d451fc29a6217a11d101ff89aba16451dba1ed19a0516cd1c361e4a9ab415691cda1d139a2b153d1c821db799fd140d1c391d9099e914c91b051d5899b214701bca1c1a996d14021b9c1ce9984e14b01a4c1c789830146a1a1d1c0f980e14041aa51b55978313d419671b199708134c19cd1ab4965312cb183a1a5296d4115c18bf1980953d112c18741937952311cc171819b7940311ca17db187e9405117f179b1843943d10e2168a183c92a9106e162e182993a9106e162e18299339866da493a4239d39866da493a4239d0b9aee98011431adea1f65246524b0af831d241ea818eab21faa7fad62ae52b0b2a604a863a8100b95a323a50ea65d1f1aa2a8a488a54520caa849aa35abc42180ac41af2fb0f4ae8d9fcba2cfa35eb15e90809d7d9e76ac0195fd9d1f9ff5a8f298aca1d0a20aa7af8d5fa41fa67ca78c21cfa192a51fa8a4274a1cb99eeca8b629911eb7a153a9512a4d20c5a160a9f32a78241414f8a81c2bce25711e42a85b99fba2e6a48a9ff99d45a549a6c921f09d1ea444a5a522439d50a356a4012210a0eda4eca52322929fd2a3b8a4a318472cc02923289aa7542e8d2cc82ad9a9282e732ca82aa8aaff2a16289325caa8dd165ca048a248a24999c59faaa06c9f8794b89bdf9b479c0f89a487540f6d9c7e136a1a181ca99c65153c1c981d999cf715eb1c151e189ce315fd1c5b1eb69b5815891c0e1e1e9b5815631cb11d7b9ad914111cf81ca999af144f1ba91c26996414f81a711ce9984e149c1a451cb798f813501a1d1cca987013341ae61b98981513af19811b5e98c0126519f81a2f988d122f19a91afd974212fa18531a349706129518ef196496831121186e1909962b1199170e1977959b10a9166818f8945b10501602188f941210cd15931703943f0f631517173c93fe10dc1625185693fe10dc16251856935e95b3a4dea48e9c5e95b3a4dea48e9ce5a257a506a670ad499c271b871583af0f9acc1d9a9eadb208aa23ad7bae30afbba7a1a817a96722caa3dfa5aea69d1d8aa1d3a460a57aa02aa909ab03ac51a0a4aca5af7eb06fafc0a4e4a68aa801b12ba03ca45ea4c9ac12a0a6a397a413aac09faaa4a0a5e0a740a02ba668a768a7e3995ea543a7ada7d122dea05ea530a88d284b1c37a223a9862a61240114a2a98c2b7f274621e0a92a2c0729a825c5a97a2c9f2afb2897a9db2c222cfb2a7ea9542d932cc92bd1a97f2dd22c112cdca9c52d112d412c0eaa0b2e1e2d3c2c26aa4a2e522d432c5faa8c2e852d762c94aab42e752d582cc2aa2a2c1b2ae528e5a83b1b4d97839cdea18f99609de09d799d7196779a069a6f9cfa8f3a8855092b9c1b0e2c181219539cce11221a631c1a9cf4137f1bc71c399bde14101c2c1df79acc14341c5f1d729ac414e81b0a1d309a6414711bb51c95992714431b781c9a99ab13ef1a451c5b9957135f1a131c1d990413241ae81b3a99ca12cf199b1b0799ce1289194c1b119947123d19bb1ad8980f12e518721aa3980a12b118f9193c98dd114a18c419c197ad1110187219ee96c6105717cd18c3953910a5163718ee9402107d1603188f9425100216041865941f0e5415b1160494340d9a12e1139e90340d9a12e1139e900000659c589dd2970000659c589dd297b6a3e5a5eaa535adefa01ea02fa279af539e689d389e49b2a6a933ad25ae0aaf80a869a9f4a930205fa425a7c6a76f2019a347a601a73d1ecca912acc4ac5e19a0ab7eae79af43af7ea4c9a682a81bb1d4a28ea62fa70cad02a27fa5a9a6ffa99aa1d9a59aa637a8a5a153a6b2a7b2a76ea127a722a81ca71d9cf1a509a8ada76124809e5ba475a89c29f5236f1953a98d2b052878239aa93c2c062900261caaa82cb42af7283daa0e2d0b2c542a54aa5f2d9b2c6c2b74aac02deb2c122ca6aa1f2e472d642cc0aa682e942d902cebaabf2ed22dc22cfcaa202f132ee22c42ab612f312e0c2d81ab5d2c022bd5298fa9141c470bb698e3a13b9bbf9dda9da99e4699f79c9b9df89d8b94e294d292f89d708c8114dc16759d2b0b1918cb19d39c66116b1a031c7f9c8a12f31a7c1c419c3313021ba91c3a9cf912fb1a601c959bf712841aed1b949af8123e1a691b769a7b12ec197c1b439a9112a3192d1b019a3a126119e81a0f9a1d123e198f1a7d99ae11cc18331a309975119f18e019ad9810115f18a5197e989c10da172f191498e90ff71694188897550f1216b617a895730e4315b0169b94340ef31449163d94020e221541166c94590e08159a167494990da6143616f793910e4114c7146d96910e4114c7146d9600005d9af39bae9700005d9af39bae970fa434a6dca605ad18a3b5a4e6a41bafba9dd696e797bdb17fa870ace2ac66ae1fa89ba91caa7b12d1a42ca85ba82318d8a3eea694a7fb1554a903ac9fac98993daa99ada2aea5ada2a54ea88aa908b05aa4c4a7a8a893ac5fa3dca6cda7aaa9e3a2a6a69da79da78ca25fa6b4a785a684a26da6d5a702a6c7a1d9a602a897a6799a33a542a742a7e025d51ad79e47a8722a4e271e238ba9402cae2969273faac72c132b4229b3aa402d462c8d2a28abb42db52c912b5fab092e122d1b2ca3ab7a2e7d2d7e2c03accb2ede2dd62cf3ab292f242e0e2d04ac912f7b2e412d37ac0030d82e9e2d52ac5a2c152bfb2975a97618210b2897c5a2c999739c2c9ddda08998ec98cd9928a080958c912b93a19e8c922108bf0fa69d698d88126015879dd30a56183019c79cc10fb6191c1b899c5510c219951b029c4e119e195b1b5b9bcf11a919581bf89aee118819d31a7a9a58115c199c1af7994611ef18241a8b99ca10a5180f1a7f99dd106e18c7193d999510721887194599561008183d19c09823109e17fa188398ca0f33177a184298a10fd5164118ad97a50e2c1605187a960d0e6f150d179a95400d9c14f0154295c10c39142b152b95000c5513a814a894cc0a3f1205144e95eb0a3311f712c291eb0a3311f712c29100009b9c689da09200009b9c689da0923da4f6a5a1a77daca6a18da37aa47dae3ea079a723a099b029a09ead86a100af2695fda856986ca1f0950fa8cd9a169a859ef4a7d0a26992eca8dbac57ac939ce7ab5ab04fb044acd7a702ab3bac01aea1a461a7bea85caccea358a636a798a94aa33da625a739a834a358a6aca7e2a696a280a696a7d2a52ba22ea643a754a57da240a64ba76ea5b59cb3a47ba67ba68d264e2067987ea8be2b41298d273aaac22c6d2b682950ab5d2d672cc52ad0abe02df42cd02b02ac6d2e8b2d6f2c23ace32edc2dcb2c4dac442f302e112d7aaca02f842e5e2daeacf12fdb2e952de4ac2330e82eba2d9cacd72b632a532933a9a7062f945b9a7ba2219bec9ce99c449f1d99ff99319a029eec96dd950c96e19dc694d887f788be9dd49040122215469dce820218b619089d00087f183e1ade9c410ccf181c1a699c0a0ebe18251a229c6d0ec1182e1a169cf80eb718da19be9bb90e6318b219139b2c0fec1720195d9a940e3c17bf189c99140e1a17731842993c0e4916e117f598b10d05169317c498560dc61538174f98ea0c8115f5162698b70c381560169c97740cd014cc158b963e0c58149915f695240baf13f8145195d60a67138214d694f00a38120b145e946c09f8108a110d95c708a20f1b11a894c708a20f1b11a8940000e6962698c3940000e6962698c3942da03f9fc19e85ac739e0014c49454aec9a0e51551a0eab006a564ac64a90bb07c9f4fa9e3a2489a70a264a729a61519069e23a7f4a24e1711a201acf6a663a0f3a548aedfaa9cae4fa0aaa6c7a189af8ba225a498a57dacc4a229a5e1a5c3a927a2e5a4a5a514a8e7a20da618a718a777a3a1a615a86ca670a3d8a60ca8dfa515a37fa6b0a75ea526a298a67fa7cda5d09a15a434a61ca7f4274f24742039a9572c772a012975ab6d2d402c992a3eac0e2ecd2c912b68ac802e752d672c9cac182f012ee52ccbac992f872e5b2df3acfb2fdb2eae2d46ad3530502ff72d75ad1730e52ea02de4ac9c29e0287f276ba83998f39a369cc3a0519ab29bf89b569f23996598de98ee9ead97fe945d96419f74953f8efc8fd29e7f92c0101f12479e278ed1143916cd9d7a8a1f16f917729d7d8243173c181b9ddd063117ae18ca9c340bde17a318559c570cf117b7180e9c120cf317cb18a29ba90c761780182a9b650d23174918d49a2b0dc5165e187a9ac00c7216ae17d5997c0c9715241728990b0c1a15a416cb98ae0ba0149c156098cc0a231415158697a00a9c13bb14a096a609ce127514e195a309f311ad132c95a1083d110412469445072f1023118d93f906010f8f102a91b307180ff9118f94b307180ff9118f940000ec9bea9ccf910000ec9bea9ccf9138a37da459a64aaced9eef93c19476ae92a0709c3b9d11b1bea51bad0faa8dae399907a8cd9b229de39929a6969ef890f79ffca57ea4ef07a0a220abd2a6bb9eaca4e4ac10a906ae6ca3c2a646a7d0af19a499a4bba676ac30a380a545a6afa986a264a531a665a7cca2c3a5b1a654a64ba373a690a78ba5f8a263a683a70fa57ea20ea661a751a44da2d5a5e1a687a3bea112a5bca5e6a3929cb3a25aa4d9a469272224d61fbfa8af2c1e2b8a2909acf42d0d2d012cf7acb32ebf2da12c0ead4d2f2b2efa2c4aaddb2fa82e6e2d89ad1c30152fcb2dafad6830992f252ed4ad382f152e082ddcaca3252125b8237fa6839a469d2e9e089f4e9ba79cf29c209ece99589a229b319ec8984f98b298af9eae967593a694259efc94d58dfb88119ec5917210d011f69dd48d7b14e1157a9d478aa5154b16359df48680169c16bc9c29820116d3176d9c0c024a167e17709cd705a7165017559c9f086316d117309c3c08fc155b17e19b960772159116ba9af808ff14ff15239ad608bc14b2159099d8082714f0145499cf08db13b314d398760817133b1458987e07a61188121c97d306801150127f96bf06db10951124967d044310d610c5956e064d10f31085953804dd0eec0fdd94f200a6085c02f793f200a6085c02f7930000be8d2c8eb7980000be8d2c8eb79893a0f69e24a19eac4ea058a0d49d31aedb96601c5620d3b02d19d6acab1fceae8f9caca8d2a04f9c8aa148a6f9a5e6107da08ca6d4a5d410dda134ab44a77f9e4d9b0bac25a2b7addfa152a2b2a494afc0a25ca5fba534ac9da289a49ba545a9c0a2f3a4b1a5a6a75ea351a52ea62ea63fa3e7a5eea652a5d3a29ea599a6d8a42ea264a560a6bfa41ba219a51ca6d0a44da2fba424a6a3a497a1c8a481a528a49d9de2a286a4bfa40c25ba21b51b56a8262ca72abe2823ac252e042dd02b31ad612f2d2ed42cb7add12fb12e4c2d13ae45302f2fcc2d79ae1630152fae2d4dae782c682be02927abb81ba11af08c54a5679be99d3b9f04a14e9b579a2d9b54a07999ca97f69945a07e9801959c9622a030973d93b094889fb495e1908a8fc19e4f947b87d588319ee1925a0dd30ed59de1909b1138138a9dc78f88129c12d69c328d6d13ef13bc9cb88b0c146f13719c598b8813ee12249cf488f9127712ba9b6b888b1258132d9bd9841312dc12b49a6984ba1172124d9a61816d110a12a1994b812911af114c993881de105e1100991d818710fe106d98030128109f10c697f000b30f55104997e100170e1f10ee96da00e10d830eb196da00c00ccf0c5a96c5007d0c140ee995e7008c0d7410ff95e7008c0d7410ff95000083146118388d000083146118388d839b2a1d352062ac209dc319001e60ae8c9eda1ea116b7b072a5b2ac3cabf5ae00a1b1a92ca5859c3b9fdda686a43b085c9c0ea619a20711b1a68cab05ab838d2da99baf1fafc7ad7ba530a730a992af84a2d0a455a500ac1aa26ba417a5c2a823a2d1a4ada53ea7a8a237a530a630a6e3a293a5a4a657a5dca267a577a6f7a48da253a552a670a423a22aa519a6e3a3cfa100a5f3a568a38fa1f8a406a6f9a287a105a500a6e2a29a9f8aa3a9a411a44e1dce97b09e94a642298a270d255aaaf82c492c0f2b45ad792e772d542ca0ad8e2e7e2d5a2cd1ad6d2cdd2b732a3cac6d248624e722ffa66599509bf69de3a0729c8e9d3f9e33a0d99a9f9ad49a1ea0119a7e98f49912a03e994996199830a005985891e6926a9ff195028eab8f319f62946e07c308b29e9f924510d50e689eaa9033138f13589e688e1614e612cb9df68c78140b14809dc08c2c14ac14349d8c8cbf123d13ed9c578c67125311a89c0a8ccb10e9104b9c1f8b8f0e2c0e419b3f8ab30d7c0a149ad689860b1e0a7b99bd89520bec094e998389160bba09e4984b89f90ab903c4982a89ae0a5a0920980c89d90779039997ea887e0241031e9795885502f38216962b883282b882f195bd873886f587cf9405862d86d282779505862d86d282779500005c0b1614c69800005c0b1614c698349de5913c20a5ac9f9c52939d1446aec99f46a46996a8b08f9b35ac01a187ae5395bea8039ce69dac9bb6a68ea13a91fc9e62a6eea4381331a6f0ab82aad39819a9c7affeaee7ac9aa6a6a903acc0ae59a244a44ca562abbba152a48aa4a5a817a2a7a46ea5eda6a0a206a5e8a5e8a510a356a552a6c8a4a6a220a522a66ca41da2e2a4d4a583a3c4a18ca461a56aa392a17fa468a522a339a13aa423a5c7a20ea120a4eda4d5a19ea0c1a369a439a1f49fbea230a4fba1099e33a054a25da42014fb8c5f97cea5db22f421372106a861230e223a213ca81d1c4a19fa13bba5f899fe9bef9d57a14a9cd59ca19de19ea49bce9b369b009fe79a159aba9b1e9fce99a8983199c99ff7986896b0963e9f9d979893cc94079f24961d918e92b89e0c95b587ee88519e0b94400daf0efc9d0a92d60c2e0e899d0591980fde103c9dcf902b0f99102d9d0c90bb0e5410de9c848f3a0e0110829cd48ec00d6c0c269c468e540a140ca59b018ef0031505259bdf8dc103d3847c9ab38d8b83dd8a269a6b8d5383858ad7992f8da788178d3799998c3888ae8c8f98eb8b8a87238ca7975f8a1a87908b9e963c8add86778b8796008ad686a78bb2963b8998863a8de896db86e5018b024b94268a948a308abc93268a948a308abc930000cc0de91438980000cc0de9143898639cb291581e7aacde9bb59cbc9425aeb09bd0a1f31f6cb081998aaa981534aec78dc3a8fd913d9f549472a64c9bdd941a9a8aa6a0a02c88fba59aabdfaa709c80a5a8adfcabc7ac8fa01b15eea242ae0aa1b1a4dea5afabd2a131a442a585a8f6a1caa442a5b6a637a2b0a484a584a557a217a5aea5c2a43da2d1a4b6a552a4f8a18ca46da5d2a3eba18da47fa53fa3c3a171a45ea5cba234a112a4f3a4a9a2bea0d7a38ea4c4a1a3a073a382a47ba17da066a350a43ea13ba0aba204a4e1a0c39ffda1efa3d7a1ac9f1da1e8a2daa0e79d999f33a1aaa0309dcc9f24a116a0ff9cc49e56a0ad9fbe9c149d099e609f2a9c6f9cf29c879f769bca9baa9ce99f1b9a0f99a19a00a0f49857962198b09f05988b913c93c79fa496488e2290689fc695d6871689d59e0595790db3889d9e5a94190d6908349e8f93c60c1208ba9d71926c0c9c0d429d1e921b0c3d0de99c0091770b65067f9c9b9084046f8c579cc0902484198c039c5c90b1896590609bd58f5b8c3791849a188ff78bc290f3995b8e288d61903b99ef8ddb8c0a91b2980c8efd8de7905998428ede8dc090fd97318ef08e89903697d58db68f19917a96988d6c8fa891d795388d23907091a0955e8cfb8f0d922995008bf18a6d8a5694008bf18a6d8a56940000b812db16c8930000b812db16c893139a6091491c04ac039a5b99c51a93ad1998e0a173162fb0229c57a8a595e9ad921067a3d58b1e9e6b9a9aa663a117972b9e9aa63da58a99349ca9a944a485a1539991aa359b08ad36a0b2a224a156aeada17ea4aaa5afabb7a114a42ba5dca8c7a17da444a5b8a6fda19fa46fa56fa5f2a195a422a58ca4cba158a434a523a4aea175a467a54aa3b6a190a488a55ba2afa15ca43ca5c5a14ea134a407a553a10da101a4cca415a1b9a081a385a4c9a064a000a309a472a025a06ba2d3a373a01fa0fba15ea35ca0f59f7fa123a319a1169fe2a0f4a1e5a06e9e12a0dba05ba08c9d439e7e9ffa9f8d9c249d0a9e7c9eb49b289b879caf9ed59adc98269ac39e0d9ac0965198429f57995495ca96fb9e9e98da933c936a9f0398618e1690529f4c97e3871489239f95966907d208c89ecb95cd0674088a9ed99434060008df9db194ce855c87a29d26941d8c398d1e9d6093618eb591cb9ca1921490d992789c1592d090d3932e9ca59167914c94709b8e91eb913e95f09a349140926695649ac2908292ea94d199a190f791fb9456994a902592a094f598d98fdf91d6948598e68e99915c9442988f8e46918e941098688e1d9140943597768ee49052937296068ccd8f46936996938f5c915c94b694938f5c915c94b69400003814e317e19500003814e317e195229bf6909e9867ab7999ca9f5d1463add19a63a5d61ff0af009908ab8c9576ad3a92aea60197c29ebb916aa3789956962795c4a5019c86914a9bc7aa23a125a0b29b2cac49a2edacf4a03ba4bea5d4addca049a463a58baa2ba1a5a233a467a7eea0e7a200a464a599a1d9a39ca49ca4f3a10da4cca4daa316a24aa4e5a425a301a24ba423a5f9a1c3a17ea427a5eba12fa150a4f5a40fa100a101a4d4a4bba0a3a08ba392a47aa06ca01aa34ea438a030a073a2d2a3fb9fe99fe6a12ba3a19f2c9f69a193a24e9fa59eb6a0aba1ea9e1e9e0ea0e0a0969ed29d549f60a0419e619d279e609ff39dba9c309dbe9da99e579ce99bac9ce59efd9a4e98779afa9fba994892669702a0f5980a9235971ba074989888a493d69ffc974d88229303a01297f907e18fb79fe9956807648f8b9f7695e506e48e539f1495d18c5e91d99ee99428915c942d9e9d946293a496a49d89949494bd97319dfa932d954498ba9c2993249523980e9c259334952598369be5925395b297209ac1925295c5977e995092f4943097d598cd91a99441978f982a916e94fd966598cc902e9494962398f3905793e1958197159195937f954096ec90ec92e1943d9528915693a7944f9434906b922c942c95338e77916893f695338e77916893f69500009e17ce1ab19500009e17ce1ab195e89d69a246a4cba8fe9aab9f4a1439acd120e327382af8ae31a122abcba584ac99a138a968a7f0a0899796a709a0659a1a98b0a607a0fb98769eadaa9ca4dca049a016adcaa73cac069e80a5aaa145ad23a034a195a1baaa15a1c3a31da43ea7cca16ea43da5e6a4c5a159a422a528a3b2a13fa408a50ba287a109a4d9a406a244a12ea406a55fa128a1f8a3c9a451a10ca1a9a39ca44ca1d6a021a347a48da0c0a00ba338a44ea08da0a8a205a46ea04aa042a2a7a337a014a0e5a146a34ea0b89f9aa13ca365a02f9f1fa1a5a234a0cb9e7da016a2839f569e25a05aa1369f8b9d849e32a07a9eaa9c3c9dbb9ece9dc89b989a449c0f9e619a6597d297de9d0099c78f06917d9e5698f4085b0af49e0698a7087910e59e7797af0e4e105b9f4597500e7709579f3b97bb8723893a9f8c964f8dc691c99e0d96a991a594119e4e95e393e496a19d3a95cf942197239d27954a968698d29ccc9451968b98749c4c944796cf98ca9b1994be96b9982a9ba193d0967098279a8b93df9673988899419368962b982d99d09200962098989868927595a4970a98a991d394cc9630977791909424962496cc904c94ee95979564902c94759575958f9022945c950995e58e6093cb95cb954591a4921195bc944591a4921195bc9400008f1e1d205f9800008f1e1d205f98d913241fad2058a6e51647216e23faa87014f89b8b23a5af06a3dfadebaa3bad45a144a8cfa57797d49ed1a44ba3d00641982fa44ea02987a09e67a98ba4a99db59de0a85fa49cad259cf39f901559aef49e95a261a13daaa5a01ea396a46ca62ca18fa4d1a53ca339a198a4c7a5a2a1caa0e1a3f0a45da1a5a03ca396a480a111a14ca47da5d6a1a1a1aea40fa68ba1bda1bca41aa611a16ea1c3a406a610a140a187a4aba5c3a0f4a04ca43ea58aa09fa01ba4dea40ca053a09ca386a4c09f15a033a363a4849f4f9f74a2eda3b89ec59ea0a132a3ce9def9ddea042a26f9d429df79f1ea1c79c529c539d649e309cc39ab199739a4f9b89997f922a945f9ca4976b1443170a9d0f969f18ee19bc9dde941819931a619ec3948f19a4190ba04b94a518b818a0a048942f16921453a0a0945b109d08ef9f47952190c394479fb395839516989c9e4896e8968b99e09d5a965f98ad9a299dbf95a698db9a7b9c7495eb98e19a149c3895ca98459be39b1195e198439b439bea949798dd9a969aae946798869aba9982942d98cb99cf9808946a9704991f982193e1965f981f97b39276962b98c9960293f49509989196a29249956a975496a1921795d196279642923694ae956095c9907194fc95ac93c9907194fc95ac930000ae1f4721d0950000ae1f4721d09515087c1a371cf2a93998a59e859e88ad089a79a62d96aeb0c89b8ca7952023ae608ce0a13a97a09b488af4a329077990e184b9a44d928090cf903aaa44989d9f1b8df1aaf09a22adc29ab71d341c0baecfa034a33ba3e8a9f8a017a58aa688a5e9a115a6c4a7efa1d6a2cca60ba8219f9ca147a4d9a4179ec8a0a1a11aa3e39f94a13aa565a62aa167a2a4a633a879a111a233a6c7a784a08ea179a5c3a632a040a100a52fa607a037a1aea4d4a5c59f14a167a487a5ff9eeda03ba454a5bf9e9ca0c9a30ca5e09d3ba036a3afa41b9d339f29a201a4699c339ec4a035a2de994b9db59ffea0fd97ba9ce29d07a01996e09b04997a9ac69708984a17bc18bc98a693c21cc71d6b9a75905c1d8d1e709cd08cec1dda1e709ebb8c291d4d1eec9fb292c51af21b72a0c795ba1473177da002972c879208d99ff79642946495fb9eb196d697ff98319ed8960c99fb9a7b9dd496d299fe9bbe9cc596f399159c419c5f96069af29b4c9b0b96df990d9c939a9a958699a39b9e992f954c99629bf798c894d298c29a4d986d946798fc999d97f0931b987e99fd96be93b89734993f9671937097cf98a0957a93ec96a7987195ff9267965b98f594c79242963b98d094c8919e950398679531918895c597ea9431918895c597ea9400000b1c4f1d079b00000b1c4f1d079b119b1da0d9a1eaa9869e85a57ba6c1ac79a100aaeea95bb093a30daedaaad0ad5ca006a8b2a4539a17968aa3559c3a90068d80a3b294fa91229414a8969bb79eae9998abc214fbacb69c04a6179f95ad849ff3a520a72ba91ba1cea6a9a837a51ea289a7d0a8e6a1efa233a864a9faa064a19ea642a8be99589fcfa361a4cc14e6a01fa6d7a7879b86a131a6e7a7889e65a101a6d5a7959e58a1d9a5a2a76a9e31a19ea55ea7319ee9a054a5f7a6f49da7a0f6a47da6499d49a07ca4f2a5399cd59f19a431a58e9a769f86a3dca4b097469fe7a270a4d995099f0fa2aaa30991639ebea070a23894809d029f1fa11a96e19b739ab49d1b9886983113d096619836947b1e3b1f7b9a9e0dc620cf21349ce412ff20e121719f1b125820ee205fa19e8d471cf81c6ea11b968b876c8f8fa00b97b897b89aed9f6d9767999d9c1b9f5798219b6e9d969e6d98ba9b949dc99d58980a9c929dd19c1598ba9b609d5a9c0997429b1b9d629b45969f9ae69c969aa295319a8c9cd6998295e9995e9c58999d95be99039c909860959899939b149807951799d09a92976d9482985c9a119700943798019ae3961793e697d699b296cc9245972099159657920f97a1982d95749173966898cb944c91eb950898f1914c91eb950898f19100003d1cef1c898d00003d1cef1c898d9a9e40a530a730a70da2a8a910abc4aafaa542ad8fae9cadc3a853b07db1beaa88a9fbb046b263a452a9fbb027b2e0a0eea87eb087b12ba58fa611ae6faf39a6c5a60daeccafd2a8a6a42bab87ac33aaaea347a9adaa97a656a3f8a86eaa60a429a351a898a92ea248a327a84ca910a1afa13ba79ba801a0af9e33a435a5639d36a09fa4d6a5c89d54a1aea579a7129e68a1bba567a7339e72a1a4a542a72c9e2fa16ea512a7039ee0a02ba5bca6419e85a00ca588a6a49d51a0dba468a61f9d18a0b8a44da61f9d989f9ba429a6489cf69e3da4a0a5e49a309ed5a297a44099ac9dbfa19aa3dd90f09c21a0c0a1a615289bfb99ca9b261aeb989417bf19331c04114b210e235c1c041ab924cc25940c931b28257226d29f7810b222c323ffa29b97a71c061beba20898718d7b95f3a0849789985d9a6d9fcc98d89b3b9dba9edb98689c499ee79d69983e9c7e9e949ddb97189c839e169d4a977e9bf39d529c1097309b119dcd9aa996969a869c55993a96309a3c9c2199ef95e699229cc698bd95aa99159cb79879953d99bd9b40981e95e698a99a249792946698e399269622941c9886999b95bc93fb975c991d955b93a6971d9908957c93ca97e0981a95f1926497e498d194d991999579974094d99199957997409400009514a3151d8e00009514a3151d8ead9ab2a145a47ca359a36daadeab05a940a5ddacf4adf0aa1ea7d1ae4cb0d0ab82a827b02cb132abeea8c7b0ebb19aaa40a9beb0f8b16cab99a62eaeddafc0abd8a743af8db09caa84a605ad5dae7da8a5a4e8a9b6ab85a57ba3f0a843aa4ea488a26ea89ea924a34da219a819a929a2cda12ba775a864a15fa108a6a5a7efa0e5a045a5c4a670a008a131a5a1a648a008a11aa563a610a0c3a0eaa44aa6619fa5a0bea424a6d59e63a0a3a4f9a5499e56a08ea4d5a57d9e16a051a476a5959d19a024a44ba5179d04a0eaa310a5a09c9d9f7ea3c0a42b9c5c9f2ba37ca40e9bd19e88a224a4809a429e58a215a4c198759d6fa1c4a2d30fa29aae9ccf9d6f1d3d1045210223de217e1e39284b2967200920b128f0290fa3a917fd23ec245aa5ee94c5131615d0a2509a7a9c979e4fa18a9a8e9d479fe29dea99b39d789f699c4f99609d3e9fd39b1699209df69e599bae98c29c8a9ee89a38986e9c519e3f9aa297139ce79df8990997819b829db39996960a9b239d33993c96859ac39cb598d595e099749c669880959b99189ce197719543997e9b059730950a99419b6d96cd94d598cc9ad49555948698a69ab29504945b98499a8895f4933898169a08950c926e97a3993d95839131969e98b094839131969e98b09400001e145518c79000001e145518c790639c02a43ea5e2a28da258aa91abbaa75fa404ac0fadf6a881a52bad5dae75a9a9a633aeb5af43a976a7c1ae42b049a835a495abc3acaaa4469b11a506a687a02ba161a891a98fa4bba405ab7aac46a71ba42caadaab77a60ea3f5a84eaa9ca4ada243a861a92da322a2dda7e3a80ca2cea123a775a856a163a18ea619a8aaa015a1c7a554a73ca0a8a03ba59ea605a077a0cca412a67c9f64a09fa4c4a56a9e41a064a48ea5d89d30a044a46ba5069e21a030a452a5999def9f25a44ea5809d6f9fe8a320a5519d509fb5a3eba42d9d2b9f75a3cfa4b39c9a9e00a381a4799ca49e82a252a45a9c479e5ca24ba4649c369ecda1a6a3969bcf9d87a1efa2769ac69bf6a1d7a3c59bd0204529262a389fdc24c12cc62d09a68e9c72a02ba2c7a1f69c789f83a10f9eb89b5f9f2fa17f9c0c9a9d9e83a0829b8b9a3c9e4ea0eb9aee99dd9d03a0439ad799b29dac9fcf995499539d4c9fcf99f498f39cdb9e4b995f98879c469e4e990598269cc89dfd981797889b3c9d6498e796ef9ac49cc19759966a9a879c5d97f895389a3d9cab969795f099019c14963595a199989b2d95e39455990e9b0d958c94f6988f9ad19452947c98169a459446944f98b1994994e1939897209913942394bb9649985f912394bb9649985f9100001919291afe8b00001919291afe8b23a0f1a669a8b7a3eca156a9a4aad1a533a394aa25ac0da74fa400acf7acb2a7a3a43dac60adeca669a407ac24adeea5cda24faa0aac11a519a1baa8f1a968a44ea174a8b6a9aca470a2bfa82daa04a564a283a8e9a948a4faa11aa861a915a390a19da7e2a8e7a163a127a78da814a109a1a1a627a83da0c6a012a689a77b9f7fa09da5ffa60b9f50a033a58aa6359e0da0c9a40aa6d19de79f8ba4bca5869dbc9f5aa47ea5f89c999f2fa44ca5cb9c849ff2a304a59b9c589faba3d9a4749cf19e64a3aea44c9ca99e21a383a4259c699edda26ea4559cfa9da0a24ea4359cba9d73a225a41d9c909d22a20ca4429c5e9dfda1cda3dd9b6b9deba1a9a3b79b499d54a1cca2119b1397469c929d8b98a0020c0a020ad791cc92f49763999d938a9a4d9ebb9f7797279bcb9e75a0b198529a6e9e30a00a99d9990f9ee09ffb985b999c9d6c9fdc98e798649d129fb798b698049dc09e95987e98c29c6d9e72986c987d9c129e5c983998429cf49d8398e997069ccb9d79984797a49b949d9f98b7962b9b389d69983096b79ad99cf797be952e9a769c1a972c959a99fc9ba496ac9426995c9beb955c94e498f69a9a951f949d98859a109544949298269ac79471933998ad992b94f792f29740994692f792f2974099469200001e1849195d8f00001e1849195d8fe99f33a608a8b4a2eba08ba883a90ea4b3a14ca98baa9fa46ba2d9a94eab29a5e3a237aac0ab0ca59da2f8a9a0abc8a41ea271a901ab72a4f7a1c2a81caaf2a3a8a136a860a970a35da1b7a7f0a8eca224a12aa794a842a2f7a0d0a652a888a1d1a077a61aa8e4a09da024a6c1a745a076a0d0a562a76f9f43a07fa50da7b79e0ba027a59fa6089ebb9fdda434a6609d909f98a4faa52f9d779f6ca4ada5519d7a9f3ca483a5299d6e9f19a456a5ff9c1b9fd2a323a52c9dca9e94a3ffa4089d809e55a3dba4e49c269effa2afa4c99ce19dbea298a4f69c8b9d6aa27da41b9d5a9d34a252a4fe9c3b9deba132a4d99c229dc6a105a4b79cfe9c83a1bea38a9cca9c46a155a34d9c139c6fa03aa2a69b9197a19ca59ec698f193ce99059ce595e895019b509c7595b3984d9df19e1d98919a0d9e49a04499359bcf9d18a03199849a829d969ffa98b8993e9d369f0e991499079de29eaa98a898de9cb69e8d984498789c309e2098e897009cbc9def9795977e9b469d2b975997129bfa9ce596e196ba9abf9cb7966d96479a909c7496ea95f1994c9cd9959b959899ef9b2d9510953c99199b8694a694dc98a79a3d944e948698289a78934d948e98e3992593f8934b98f299c093d293d3972199b290d293d3972199b290000000000000000000001e1849195d8fe99f33a608a8b4a2eba08ba883a90ea4b3a14ca98baa9fa46ba2d9a94eab29a5e3a237aac0ab0ca59da2f8a9a0abc8a41ea271a901ab72a4f7a1c2a81caaf2a3a8a136a860a970a35da1b7a7f0a8eca224a12aa794a842a2f7a0d0a652a888a1d1a077a61aa8e4a09da024a6c1a745a076a0d0a562a76f9f43a07fa50da7b79e0ba027a59fa6089ebb9fdda434a6609d909f98a4faa52f9d779f6ca4ada5519d7a9f3ca483a5299d6e9f19a456a5ff9c1b9fd2a323a52c9dca9e94a3ffa4089d809e55a3dba4e49c269effa2afa4c99ce19dbea298a4f69c8b9d6aa27da41b9d5a9d34a252a4fe9c3b9deba132a4d99c229dc6a105a4b79cfe9c83a1bea38a9cca9c46a155a34d9c139c6fa03aa2a69b9197a19ca59ec698f193ce99059ce595e895019b509c7595b3984d9df19e1d98919a0d9e49a04499359bcf9d18a03199849a829d969ffa98b8993e9d369f0e991499079de29eaa98a898de9cb69e8d984498789c309e2098e897009cbc9def9795977e9b469d2b975997129bfa9ce596e196ba9abf9cb7966d96479a909c7496ea95f1994c9cd9959b959899ef9b2d9510953c99199b8694a694dc98a79a3d944e948698289a78934d948e98e3992593f8934b98f299c093d293d3972199b290000000000000000000000000000000000000ed9e22a16799b2243a281629f1a9e327152cb52c1aac2a281d2cb12c15aecc27ce2b5f2ce2b1672037200523b4b2981dbb96131ee6b2ed1c571c2622c4b14722c425ec2609b1f625162aee2a0bb0a626452a602b6ead342597288f29c4aaf6240e280a2930a847253e25d4251ea87c23f1a6b9aa73aba529fb29602965a8b12ae62a172b7ca7e529b529452971a87b251bac91ae2eac0b2760223a20d1a82816c59e4da1eaa8d4a213aa6eab20a963a6b2adf8ae5aa5a1a645ae86afe09f4fa796ae91afa39f54a7b6ae2cb098a43e1e66ac5faed4aaf72aaf23819b65ad272c4929ae2795ab0d2c352a3329afaa5727db26982652a7881fb321c5220ea121916a9a4e9ced9f1291ea94bf98059ea217301e82206d9bef17b81d791fbf99f716331d9d1e7f99a917601d311fb8997717371dca1ed1999c16e31c601e77993416af1c031e45997d154b1ca81d35994215161c5b1def980115b51bed1ca598b5142c1bbc1caf986a14e51a761c83983214851a4d1c5a981a14541a151c08989213ff19c41bdb976513d7197a1b339728138619081b969679122719771ae1954a12bc18f31919954f123e18701960944712ef17fb181d94f611031815193394f01111181e196394f7106717fb18629485126e17e918029400000000000000000000ed9e22a167990000ed9e22a16799b2243a281629f1a9e327152cb52c1aac2a281d2cb12c15aecc27ce2b5f2ce2b1672037200523b4b2981dbb96131ee6b2ed1c571c2622c4b14722c425ec2609b1f625162aee2a0bb0a626452a602b6ead342597288f29c4aaf6240e280a2930a847253e25d4251ea87c23f1a6b9aa73aba529fb29602965a8b12ae62a172b7ca7e529b529452971a87b251bac91ae2eac0b2760223a20d1a82816c59e4da1eaa8d4a213aa6eab20a963a6b2adf8ae5aa5a1a645ae86afe09f4fa796ae91afa39f54a7b6ae2cb098a43e1e66ac5faed4aaf72aaf23819b65ad272c4929ae2795ab0d2c352a3329afaa5727db26982652a7881fb321c5220ea121916a9a4e9ced9f1291ea94bf98059ea217301e82206d9bef17b81d791fbf99f716331d9d1e7f99a917601d311fb8997717371dca1ed1999c16e31c601e77993416af1c031e45997d154b1ca81d35994215161c5b1def980115b51bed1ca598b5142c1bbc1caf986a14e51a761c83983214851a4d1c5a981a14541a151c08989213ff19c41bdb976513d7197a1b339728138619081b969679122719771ae1954a12bc18f31919954f123e18701960944712ef17fb181d94f611031815193394f01111181e196394f7106717fb18629485126e17e918029485126e17e918029400008594da9b289500008594da9b2895a7244628e328d8acee25a329db2a2baf22267928d82822b1f5240526ee2459b423a205a71da84fb451a5c6a822aa66b467a44fa810a922b42694f49d209f0cb41825c7270e2806b44f24e625d526b9b0c221f724582569add920af2393248fa9f61e529de5a0caa7f3218ba44fa76ca9232863242220dca9d9296b28f4262baaa329ea22159480aa07290aa447a9c9aa3d2b81200aa2b9aa3a29a32005a197a9549dc8a6ada8dda5a79f28a835a92aa0c39f80a789a88a8fe9a06ca872a9a01504a2eba863aa4599542bec240a1c5aa9ef2c31298b25b4ab052d222a192769acd92cc32a7f288dabe628f0261e252ca9d1180d98899c44a55397fd9e55a0ffa05e90a19bc39c869dd41271165d19e49cd0169e1dc71ea69c3317d51d491f059c9116531de61ec09b0017201d5c1e4b9b6016ae1c3d1ef79ac815621cb81d639a4f15301c5e1d009a1015051c3a1d1c9ae614bc1b031dda99b514671bcb1c9a997014f61a9d1c27994f14ad1a4a1ceb982b14651a111c72980014fc19bb1b05984b139b19391b5297ec121b199d1ae4966912a818401a849606126e18bf19d59560113218631976950c11b717fb183495d510a317c118af94fa1059178518749423109a164e1828936210bf152b1785926210bf152b17859200008494b69cae9400008494b69cae9459171e1b4b1c6cad711f9f24fa252ab09420e921cb22e6b1e3207a241424b2b41fa44ba645a7ebb44ca73aaa7baa8fb4d9a7bbabbdab38b455a4f0a805a85eb46414e3179f1883b460189915671674b1f00f049a029b0faec194aa9dcb9ea5abed9887a19da266a95014daa38ea571a918248e9890a175a97328e6239d1c1caac629e221ee9e8faa342a18218da0b2aaa02a4a24c1932eaaa32bd927ae23fca9a42b07298a2660a9f729ee26e42394a6729a62a2e3a3b19c999938a199a2639ebe2861265322d4a6a92cd32b882988a9c62d642ca62a9cabb82d462c752a58ab8c2d582cbc2a6aab78291c273a25b3a85a0d659d339f92a37c98a69ed89fc6a06c94b19a249bf39dc888ba8de9885f9d8911a318171af39de9146a1bf21cf29cd615c01ce01dc49c5415c71c2e1e819c47158b1ce91df29b58155d1c7a1d219bdd148d1bcc1c0e9abb14161b651c8b995f14cd1a5c1c56991a147e1a341c6699d613341a0d1c339947131d1ad61b0799d612c719751bc99885125b19f61ad2984d122619a41a64983d12e418571a0098f711a818df190b979b113318601950964b117b17ff181196b31099165b188b9565103616e7171d95e30fb8157f174394db0e891545172294151195160f181f92151195160f181f9200002195179c5f9400002195179c5f940da073a2d3a3eeadf598e5199c1423b065111a95e795c4b10e9abd1db81e83b468a5f3a7d1a69cb472a61da958a998b46ba519aa76a9a3b479a590a95da841b49ba09aa2bfa31eb4a3a047a245a333b1999eada2d1a33dae949f06a456a445ac899f86a471a5fca9c09f95a5b9a666a95e8db7a35ba541a96024609830a277a9b7289f209d9c1caa642aaa24b8198eaa422b4927122193aa0e2cb8289125caaa462c2f2aae288daa952cc42b392a39aafc2c452c0a2b4faa402d7c2c682b84aa6d2db12cbe2badaab22dcb2cf72be4aae82df82cf72b3fab272e372d212c8cab002ed62c8a2b60aba2294d28c426cfa8800d0b98e19abfa27599949dc79d16a031965d9aa49a1e9eda904e9109908c9d0e09691607186b9d3b11a919811bdd9cfa13201bcb1c189ccd14141c201d539ba8142f1c491d1b9bae14e11bfc1c799a93145c1baa1c2b9a2514f51a6c1c269a9413d41a371cdc993b137c1a001c909938133a1abb1ba2990113b6192d1baa99a7126d19241b729980122c19a11a78996412d218691a10990d129818f419e098ec114b18c7198598a31113188619d597de106217cf181e964c1097161f1871950b102216d317109502101316c517d694730ec214471686944d0d3b13ac1460914d0d3b13ac1460910000019cc69b51980000019cc69b519827a020a121a13cae479fd799d69a06b0b39d349ec0959db10aa185a05a9e56b447a834aacaaa64b4dea74daae5aa29b4caa62baac5a9e6b3fda545a9b5a80cb421a1fda33ca106b40fa318a526a532b12ea264a566a67bae9da1aea56aa66dacbca1b2a570a653aa79a112a65da746a931a148a620a7d8a8f399e0a4d5a6e5a8db24f99a61a357a96429482440193aaa1e2bd0278722a4aae12be528ff2536ab6c2c2c2a85280aabbb2c882be52918ab1e2d482ccd2afeaa642d922c832b24abb82de32ce92b5dabfa2d222d2f2c77ab452e5f2d602cdfaba72e9d2d7d2c24ac4e2e2f2d1c2c70ab4729fb275f2644a8ca92fe98c09bd0a14f9ab99c109db09fa4980f9c699ce29e8394e394c394a29e578e231361141a9e410853173919a39d90111f1a041cfd9c68120e1b981cd49c2513f61a981c989c1813db1a3f1c0e9cf812861ad21b289bea12001aa11b019b6412e8195f1bc59a65129519071b749afd114d19b31a279a8111f3185d1ad8996d11ad180a1a8b992d117918ba190699e71042183d19cb987f10b017ff185c981310151758188897420f1116a4174896ec0e6b153f17a395630e19159e1654952d0e2315911649957f0e07155d162095140d5b14d81594946c0cfb116e134d966c0cfb116e134d96000022952995f397000022952995f39761a14ba3cda2f3ad12a2efa2ffa1f8af25a285a48aa474b18da00ca206a1f9b356a5cfa71ba812b420a75aa9e6a91cb4eca616aa6daaa5b3bca542a9c8a85cb356a4eba658a53bb38ba4c2a646a706b10ea4a2a6e7a783ae1fa323a601a74aac5da212a6e6a6f4a902a2cba5a0a605a9f1a1e3a519a76aa85fa143a636a747a8e79575a447a67fa8ee25231e439d5ba9352a3927072383aa0e2c5a29db2660ab8e2cad2ac3289aabf32cce2b012ac6ab632d5e2cea2a0aacb62dbe2c9a2b17ac042e1d2d282c40ac652e762d792c49aca92ebc2db02c68ac1e2f202eee2c90ac6e2e832d682c3eacf427b7269b2521a81498999afa9c2ba2ba99309ce29c2ca173986899589a93a054959193e594849f79922008bf0ff09e008fa6102e146a9e0408f0169c188e9d930f3219e81a1f9de610b119661b8c9c4c119519491b099cdc11a419491b049c5f117819a81aff9a2a1110197a1aca9aa910e518051a509aa410a018ac19f399611060186419ea9971102d182919aa993210e717e6186099fb0f7817a118dc98950f0f1763189998450f5a16231823985c0e0516bf175e97f40d5b15de168496350d9514e9154096a90c2b141f15c795d10c41139c149095f30ba2128f142396040dbf12c914d393040dbf12c914d39300004098aa98099700004098aa9809975da1f8a28da479ad3ea1c9a2e6a192af31a116a5a3a1e4b0aea106a70ca2dcb2afa3a0ab60a45bb3dea3c0ac99a571b3daa0e0a91ba5cbb215a827acc3ab60b2a0a8edac52ade3b1bca5d6a816aa64b01ba456a615a81fae36a34ba63fa726ac0ba301a6e2a627aab4a21aa60ba73ca941a2f1a5eda64ea8c6a1fda50aa7faa72fa2efa54ba7eaa7179d99a469a64ca8c325aa1dd59c44a9082bd2286c26b8aa8d2ccd2aca28d8ab122d002c3a2a3cac722d962c182b58acf42d0e2d142c78ac712e822d622c94acad2ec82d9e2ccfac042ffa2ddc2cf5ac472f3d2efa2cfaaca82da42c7f2bf3abba243f249e225ca60a9ab79d129fb4a2939a819cfa9c7aa05399eb99b09a389f1c97d095e6950a9fdc94d98de788979eee9083100114719e20881b178f18c49da10764189319759d320c4e187819ec9c140ea0189719a89c730eb718ba19a49ce80ead18de19729c6b0e59184d19059cc90ed917c218e89a310e33176b18699ab80db8162118ba99570d4d16c01760998b0df11568172399520dad151517af980a0d7415d4168498c70c32155b1634987a0ce314e7156e97570c5f149d15b396250c1d14ec144896ff0a6d137914cc955d0bd0125b145395210b7411971107982808a90f3a11ff952808a90f3a11ff950000b90bb3110c940000b90bb3110c948c960d1db92035ad099d3d193c1af3aefa9d3e9d669bbeb07a9a4ba1571d4ab31f9298a9dc224ab3fda014aa95a452b3f21c01a8eb27d1b2a11f1fa4b726c5b2b017321c9a2363b259a07aa336a287b002a3c4a44ba6f4ad86a2e5a4a9a504ac4da208a5d5a556aaafa2cda5cda66da922a360a6e0a79ca821a395a6d0a7d0a7afa28ba66da7dda628a280a657a710a78f9c33a485a5c8a79a25d2204b1717a91f2b3b2946278fabef2cc72bc3297faca32d752cf72acbacfd2de52cd02becac652e672d642c19adf92ef62dda2c5aad3f2f452e1b2d81ad152f0a2e122d74ad5c2c2f2bd92916abf61daf1af31245a4149c349ee49e7da0979a5b9b419c5ba01299e7988f992ba08697f89537960ea0ae952091d08fa69f5393aa0d3c0f159f2f8ec61422168d9e628a1b16e3172e9e74821e179e18b59daa06e8167a18039d0109a1178518d09c7a0ab3179d18869cc00b3217a718389c850c41176518fa9b5f0cf8162e18469b2c0ca016ec17e59a890cd0157b173d9a380c65156a16c599990be314ea151799720b75147615b298f70a23140c152398160abc13c314cf97d209ea128a1413978b09f211c813429696083c1109123d958a0734101f11aa946f05020f101105940008761093121b960008761093121b96000025903882d291000025903882d29138a017a2bca038ad0e9f1f9e479a42af009d659d2295eeb0d19e2ca43a1748b3f59c79a9cf1d71b3461893a90d1889b3f7a28aa907a7bcb2a69ae1a97a1d90b29697d7956b2075b2c7a071a25aa2b8b09ea332a546a612ae54a358a52ea610ac37a2f7a44da5cba9a8a25ba53ca6b8a801a3f9a504a7fea77fa2e3a5eda6eda62ea2aba5a9a61ea61ea287a583a67da59ba105a5f1a570a5b59f3fa453a511a69322e51a719927a86d2ac028ae261bab192d1d2c022aa0acf62d0c2dc02b2fad792e852d6e2c8cade22ed82da72c8ead1b2ff92dea2c27aed22d0a2d042cf7acec274a27ff2593a8d0951f99739cbda14e9c799edd9e479fa09ae99b769c929fc9994f9a709ac39f74984798a99808a01197c094eb95669f0195b38d428fcd9ec6915110ab11619ecf8d3015c415289e168a6b15e816699d4a825d163c17009d2b029916c017cb9c080230166117c29cc30500162f17a19c6f054f16e816759c33086d1595163e9cab07ff140116be9b2f079e147f15cb9aec0658142815619ab7062214f214da998c06ba139e1439995d063f124c139d983d058a116e1261979306e0103e12cb969d06cd10791163965c04ba10bf1005967d063510b5109c9506060e1097101e95aa02970c560be397aa02970c560be3970000aa8f12903e920000aa8f12903e924aa0309e90a007ad8da061a17aa109af60a0cea261a0d0b07a9f37a177a017b3949abba6ba20ebb20ba65aa91ea9c2b2faa40aaa9ca958b2649706a7571d82b299a1459cef9657b282a246a434a58eb008a38ba405a503aee1a2c9a418a50bac90a285a4d4a4e5a9f9a2dea4b3a5c0a810a386a57ca631a896a276a576a609a7efa1eea4d5a55aa6b1a1e6a4d9a5d9a5e3a1e2a4e9a5aba53aa17aa456a51ea5cf9fdba34ca4e6a48a19c89a719ec3a6f026f424b62270a9422bc6294628a9abf02c0c2c5b2acaac5b2d732cb42a0eadbe2ca52bf3297cacd428c5272f26ada9381c331cbc177da4c19a519ccb9de8a1d99bc49b389c70a15a9a5a99dd9abfa022999697039987a05498fb95d99731a005972c939894b79f5295de902892ed9e2f945b87ad88939ea2922a0d960e2d9e219078110b13ea9d7b8e77127b12709d658e0512d6131e9d068db8127214c09c788b4b12bb12659cff8acb11a213149c548866111b13989bcc87051172111c9b4a84c6102911739a08848310d310089aba8347109511b6992e81091053102a9918817510f810dc98ff002410a5108a98d102a10f5e101298a402210f2a10c1979002f60e02107897df00d70d390e1797cd00920cc30ca296d802870cf00d1797d802870cf00d179700001a144e14ff8c00001a144e14ff8cd29a51116a92dcacbc9c9192f719e5aedc9d229d5d9bcbb0aa9d189f281dd3b2c89fd7a939177db221a477ab65a9a0b259a21fab00a260b2e6a4bca8dda8fab118a1daa5a7a430b235a3c6a4d7a582b05ca272a477a5a9ad2fa2a5a46ca5b2abf7a15ba417a5f0a946a2a9a481a596a89aa216a502a68ca77aa209a5f1a586a613a22aa519a694a5c5a1d9a4b7a504a595a1b7a4a0a5bea460a1bca4bfa549a458a1eaa4d5a540a48da0e8a3e3a44fa4019ecca14aa43da58f8aa29d6ca00ea69c21bf1df91bb5a88d2402237f2100a95d22b1204c1f96a79d082c959399b9a4b59bf79d14a00da2d29ca09d509eaea0259c5e9bf09be9a0a59ad599989be5a0a8995598ef98a7a0e2981496da978da0d2975c93c3942ba01f96068eab8fd59f6f943b07a088169f8b9227109f0e099f73906c114411f99e4d8e0414e8128a9e0a8e7f133112dd9db28cf3126213709d668c95120113289d1b8c11112411de9ca38b240fc10e7a9cd98a890c2c0ba09b198a010c590a7b9abc897f0b0304e5997b893f0bd409b5994d89010ba30949993889de0ab003f49827899d0a57098f984589f507750336981189810248039697aa885302fc82e7963e883b82be820196c1885d890f8894950888988c2e8e02960888988c2e8e029600006910220d6a8f00006910220d6a8f359ce4976392beac819d5492b293abae229e0c9ada14bcb0559c2f9cd616c9b2ed9c81a8cf2358b2149df4a84fa27bb24fa6f5ab55abebb160a7afad0dadb8b1e2a47aa994a90bb207a43ca6c9a771b043a256a464a575adb7a128a4cfa436abada17fa4dda47ea927a28aa457a54aa851a2a5a479a5a8a6fba1b9a455a5e1a59da18fa46ba56ba574a147a414a5d8a43aa138a417a5dda408a11da407a599a4eca008a4a9a444a49ea069a39ca4c5a389a029a343a430a34da072a203a45fa3ba9ffda169a3c8a2169f6fa1a2a20ba2659e14a123a252a1d49daca097a1d0a0ee9d279f20a0a0a00c9dfa9c5a9dc4a0f09b3a9b8d9c71a0ed9a8399f39a65a0cd998f98fd9851a0da986597e09707a088977893ae94db9f269609916b928a9ff0948b8dbc88f69ede93c30654085b9e9392c40c1008399e9a917c0cbf0ddf9d4291380c630d7f9d7090950e3910639d2190520bb60ccf9c8f8fc10acd05719c058f27045a85189cc38ee0830585ae9be58db7832c8b069bb58d8783cd8aa99a6b8d4e837f8a179a008d92880f8db199728c2488998cf298d28a7087058c1f98748af486728839973a8ab286558b8497e589af86838bb49720897286288dea971988eb819f826895308893887f878794308893887f8787940000ec11a310a3900000ec11a310a390949bed90f79185ac4c9dc698c1939cae1e9df59ec91486b0129c7e9539209ab2949e70a93c204db23f1671a8411d67b2a8152ea60d20d4b16ca382a7faa886b119a30da80ea6b4b109a1c9a0fda11eb0a1a1c7a3dba46eade3a1b2a420a512abcea1b0a421a538a9c6a183a405a54aa80da29ba474a538a7e6a199a47aa503a6cba15ea43ea53ea580a13ba41da5e2a453a11aa4f7a455a4e2a091a394a499a3b7a080a386a433a3a6a079a34da4daa272a002a30ba41ba215a043a245a3b8a1e39fada1e5a2b8a1479f38a1f3a11fa1ad9e64a0eca074a1a19e04a075a039a19e9d9a9e5c9fdda0b99c189d769ecaa0a29b0b9cc49ca9a0d09a6c9a2b9c77a0bc996998b6997aa0c9983a96bb9847a0d3979d93e9941ea07396298e9e920da08995a5874f8f779fbf940e878988f19e279491063e887f9e54932b06e7070c9ede92bc0553079b9dfd915305d1066e9d6991d5044286fd9ce19068845c8ca19c9590118ac48e7c9c9690a38c5490199c7c8fe88d0c91259bf98e688d9990429a6b8e128d4691df993e8e518e1d9176992c8e158e0491e6982d8ed48daa917898ea8dd88e58910298888d7b8e18913f975c8d818fa3919396468d36905f9145962f8cfc8fff91d1959c89728c1f8eef949c89728c1f8eef940000f213e2139d8e0000f213e2139d8e119af196a19144ac899b8298851943ae669d65a0179b78b00ca0199c109d61b2cd15061fa62301b2659c64a8142223b2ada3e1aa96aabdb1ffa15eacdea880b1aca1caa268a18eb1b8a1d4a4c1a401b0fca168a32ca5fdacbfa130a499a4b2aaa3a155a4c2a406a9b7a16aa43ba50ba8c9a164a4eda49da698a12fa400a583a579a148a433a5f5a44aa133a41ea5a9a41da106a4e3a4b2a3e7a0dba3b6a4baa2c1a083a37fa40ea278a04da33aa4b2a13ea088a2daa34aa118a01ca25fa344a1c99f63a197a220a16f9ff0a011a239a1ee9e40a0e5a0a3a0e89dcb9e14a092a00f9d609de49ea1a0629cbc9c949d5aa0b39b5c9a079c22a08c9ac898119a25a09b99a096389820a0e9983895999620a07e98be93ec9421a0b897348e969209a0f096bb8d648f8b9f2d961b87e88e579fd29583864e8eb39efd940a86c88d259e9594458c8390fb9d4c94ab8e3e90689d0f9354902193409df89224911694ec9c6292cd913a959e9cee915c928995279c6391b192c695bf9b169119924a95199b19914e925c95829ae0908892f694cb993c90089210956599bb8fb591c494de98c78e869140948e989d8e45910f942898138e2b9140949497118efb90439317978e8c07907f925396948d6a903192ba94948d6a903192ba940000d117fe1778950000d117fe1778952c9ca99caa9da1abd69c49a10f9ecbad859d0ea3bd9d0db04d9cf7a19896eeb1dd9d46a8a296a6b178952ba24020cbb1758e76a8cf2547b1750ea1a82aa107b15aa00ca669a518b1eda015a583a472af90a104a495a4c2ac4ba10ba31fa4fca9b2a0c4a225a357a805a11ca3c3a3fca693a161a3aea4d0a5f0a1d7a3c1a403a5d2a126a4fda4a7a368a130a4c9a472a304a10ba4daa454a3bea0cfa3baa47da286a00ea377a420a253a0b0a20ba4c6a104a05da2aea32ca1bc9fd8a118a3fba02c9f23a136a2c4a0a49eafa05aa187a0eb9d969f89a046a0859dce9ea09f0ea00e9d649d5b9ec59f6b9c189c389df19f129c7c9a739b0ea0029b43987e9954a0aa99569434974ea01799e991679557a07698b88e499348a06197338ed4925ba0f796a187529230a0f9955e8df491e39ff6952b90c393a09f9d956f91a995139ffe9499940f96699eaa9488950d98de9d8b9495958398659dc59399957d98ef9c73938a955f98749c00938b955b98f59bb292a6950898d09a76923c951598ee992792da94a1974a99a991e4942997f7984a915694cc967e98ae901b946e964198b690d793bd95b897e0907e9368958696fe90d492ca94da950f914c939494eb945c90d992d2947d95fe8efd91ea93e994fe8efd91ea93e9940000921b451d83970000921b451d8397e29d5fa11ca211a91aa0aaa5dfa5a2abbe92ca1e3c1b4fafab1daa2a3c2a6eb14b9ef3a19ba141b1dc144ea84f243db1499469a80c2100b12719e4a63f27cab0840d549d6c23aeb08f9d769ecd9d08afc6a091a181a4aface3a046a257a3b3a931a1a7a337a496a72aa180a36fa4f7a5f8a0dfa212a4eaa4fba056a36aa46aa408a19aa390a4caa3f8a09da393a41ea3bba05ea36ba494a2aea0eca226a4d2a179a0dfa222a43ba165a07fa2dda3faa01fa01da273a3b7a0e79f90a115a3c4a05c9f46a17fa28fa0de9ed0a0f4a15ea0629e30a02ca12aa0ac9dff9e83a0909f049d5d9d649ed09f2a9c8c9bd29c939f4e9b8398cc99ce9ff399b7940e9601a04c99c78f039148a08a98e7884d8a3ba042989d88ec892aa015985588908916a0da97098ecd8ff79f179792901592c19fa6967793eb94f79ef195f2944a962c9ea595dd952c98d19d6c95fd954f98709d4e95b196c6980f9dfb94a696b998a39c78941397f598149c3b940f97a198509be993b196a3989a9a8293c596a698fa993d93609663986499e89258965598cc982792cd9595977198b591e094c196879719918e942096d496b2905394f1959f9658903d94e69593964e90279470951996aa8ffc932c962b97ae939a932093cd94ae939a932093cd9400005b1a171dc29400005b1a171dc2941608111f052115a90d10781de220a4a937916c1fc62017af1c9ccfa0dba30eb20aa506ada7ac92b116a366adb1aae2b1d99cc8aacf9f83b14d996ba98f9c2db14994d11d0a2144b1869e9e9e19a089af2d9f5ba1ffa05fac02a0efa102a312a932a0e6a210a402a6b39feea1fba2b3a412a008a172a258a46da077a2bca31ea422a14aa471a59ea29ba18fa4e0a55ba28ba1c0a41aa6a5a14ea1aaa4eca553a103a170a495a505a1b8a018a42ba579a060a0d2a3c9a445a013a008a34ba416a0819f5fa2c0a3579fc99e81a1f3a2159f2d9e95a099a1389e5a9d289f58a0e09d6b9c719c3a9dae9d559b3599c3998a9d5a9a17965594699dd49844090c11199ec397bf155317b79e8d9609182919579f7096cf17fd1851a0129671170418a8a05295cd152916e1a04c958412750f95a08795b0868f9119a0a895d0926496419f08965d960899749e7c961198469ac59d6e96dd98e69a219db195f498d69a969c52951199fb9a1c9c4b95f8986a9b039c1f95fa98119b5b9b1695b798ff9ab99ae1945598639ade997b941d98ad99319909944697ec987c983f93c8965798df97dc92849628982897ed92f9950498ea969192329554979d967e92d59429977e96059303945295b694a19053948e964695a19053948e96469500001719f71ba29300001719f71ba2934694298ee31533aa4299079f249e3ead6d9c3ea2ada129b06e9e19a48fa167b2089b31a36ba4f9b1ac97aea81020f0b1971c40a9899c6eb1951a30aaef950db1748d1720691c31b1439c959eec9d7aaf3ca091a297a21eac0ea07fa382a4d9a709a1a7a4fda4b3a46ba1b5a4e3a4fba258a09da0b6a0b6a082a0a2a225a4faa035a183a5c9a629a18aa1fda556a7e4a067a182a5b3a642a017a100a52fa61fa001a1b6a4d8a5669fefa067a49ca51a9fd9a01ca445a5d89e95a072a3e9a4059e2aa076a251a4c29da79fada158a30f9d7c9e9ca0f4a1f09baf9d4c9fb2a0f499ed9cd69d0d9fea99e29b4499c49ade997d99f3126011b99a56967f1aaa1caa9c8d94dc1cde1d6e9dcf93c21cc01d079f3e949c1c321d42a086946e1a881b0ea17296f5145b1608a144988487e988aea0c2987e94b59516a04a9826983999279f109780990f9bf39dc496e3990b9c5b9daf961a9a309ce69cb396379a1a9c709c58960f9af99ba99b0396a999cd9beb9a6c957a99999b379ae3941299139b4699a694c198a79af5986c946b98199a5398099425989399e89787937097ff98fb963a9318979598a596d492d6966a9868963e924e964498da9530923a96fa97b3954d91ab95e797a595289145950697279528914595069727950000d1156f195f8d0000d1156f195f8de99b9ca190a204aa669fe1a56da7e9ace1a068a8c6a8beaf35a489ac07ac6ab23ca5fcadd2ac26b253a0e2aca4a81bb23e9aedabe3a77fb11b995ea974a62cb1c79881a48b9c29b1a39cdaa462a275ae9b9fd1a4aaa5d1aa34a133a601a8afa7cda1f6a646a89ba4faa130a78fa83da256a011a57fa6e59c33a090a4bba5ea915aa1e9a5ada7019c8ea1c6a54ba70b9e83a1d0a549a7699d22a1a2a53da7cb9d06a170a511a7259ed0a03da5d4a60b9e8aa0d2a44da66b9d42a034a493a55f9cb29f56a3c2a4d1990a9f67a22aa4fd977d9e5da13ba30198009e33a0f7a14d96f39dbc9eb1a06996be9cc59a0d9e5399ae99fb09999999993f92891d701cd59b660474200e217b9e570d89208a2110a08d1069204c2186a18b83c71d8a1e3da2ac9479159f128ba11c976b96b2987da06d978599239c12a023984e9b9c9d849f8298329c099eb29e4c98119cda9dda9ded970b9c979d0e9d3f97819b399d429c8896e19afe9c9a9bf095909ab69ce49ab895399a6a9cee999995d999419c7699b395ba99149cfe987e959399889b85980a950c99b49a27984e947a98419a5897ec932398e799299729939497a8993a97da92449706994d967e92e19684985c95719164965598ec955f91b795a39734935f91b795a39734930000d11b281ded920000d11b281ded92029ea3a428a675a885a1c4a809aa21ab59a37baa00ac66ad2fa649ad8bae21b071a800b004b1d1b043a9cbb0e0b1d0acf0a858b04fb1c9ac55a404ab2facf6b0da9f8da40fa509b03da03aa5d6a608ac91a136a7dda822a8b6a33ea854a9b8a4bba210a808a991a2dea161a7b0a8a5a1dda051a6eca760a0429fa4a401a6af9e7ea0f6a42ca6b19ee6a06ca5b0a6a19e06a15da5b6a6a79e20a147a5c1a6969e1fa142a59ea6e59ef6a00fa57da6a69ea5a0dba437a67a9e6fa0aea400a6899d1ea060a4b7a50f9d879f34a464a53c9ce19e6da3dba4f39aad9d8fa167a30191b89c03a074a1fc15c19a729a9b9cb319de9717152f18e71bc0046820d421c51b001938246d25a10c631a0a253a268ba0151753237e24a5a38f92c01da01e60a35c98fe10648925a2a7980f98229bb0a0d5985d9b669d779f3199a19c7d9eb29ec198909c9c9edd9d13982e9c3c9e5b9d7397dd9b179eec9cf0967f9ba69d429caf96fd9af59cee9a6a966c9a749cfa99fc950c9a439c7d99b495c699209c1699989593990d9cfe9852951d99729b8298c394bf987b9ab4974b945598d199c596ad9314987d99e9955b9303983299c5950893a4971a99ac956d93bd97d3985d956c921b97b1989e94c59140958096cf91c59140958096cf915f140e1b4b1a848e5f140e1b4b1a848eec9942a083a1f99f24a2e6a82daa0ea9f2a315ab8bacfdabb9a495acb8adf8ac50a6a5ad2aafb8adbca7a5ae2ab0cead4aa7ecae7cb079ad7ca7b3ae4bb0cdad5aa57cac86ad58ad06a663acbfad77ab3ca445aa23ac4aa82da3a6a82faaf7a511a327a84ba9d8a41aa2c1a7e0a838a46ba1c1a634a8c0a22fa1cea56fa711a2e2a05ba5e1a686a119a121a598a616a107a10ea582a6dea0e3a0eca45ba6e0a08aa0baa420a625a057a094a4eca54d9f27a07ba4afa51f9ffc9f33a46ca5e29dbe9f07a42da5b69d9c9f80a3bea4dc9c3a9f32a375a4c09be79ef1a241a42d9bbf9e97a215a49c99209d1ea164a29a89a19a3b9b8b9c551db513a4214223d6212f1f8028b82940212b20f728f3297ba3221ad424f22543a61494ed166c185fa4e199239df69eb3a1729a9a9df09f15a0a299929d6f9f6b9d9d999b9d3b9f829cf898339d029f049cc798069da99e569b8298c09c749ef39a25985f9c289ea29aba970c9cc09d569a3c97b59b639d129ac096ff9afd9c83996096769a9e9c0399f395fb99399c7c9886958f99f99bad97709539995b9be4961795f898109b9e96cb94a598ad9a129663947a98829aea95159431982b9ac095db931098f499e0952f9225977b9918959391a195fa9757949391a195fa9757944f17eb19091a10904f17eb19091a10903e9c34a0cba0669d7ba1e4a8ffa921a835a37daa22ac0caa2aa4e1abf6ac5cabfba4b0acccadf2ab6ca50dad53aec7abd5a470ac99ad90a944a009a819a983a5699838a17da2f3a038a0e0a5bfa7d5a4dda32aa9a4aa1ca735a3e5a842aa4da616a22fa847a9dea4b2a14aa796a8e6a37ea1c3a629a888a221a11ca68fa7cca1c6a08aa509a752a1a9a029a591a6c4a098a0e7a436a682a08ea0b0a4eea521a067a080a49ca5ef9f56a065a474a5b59f39a039a45ca5939f10a01ea43ea5699fc99f03a410a5299f5e9faaa3e3a49d9e899f62a3c8a42f9e8a9e94a24da4789d119ed6a10ba4f79c699e12a288a3c79c049e83a19fa2c49a8f9d12a437a5279ec11c512558254fa2de24ae2c6d2d9fa6349dd4a1c4a354a2c49d02a0eca1c79d9c9c9d9f7fa1a49d279be69eeca05e9c629aae9e95a0c39b6a9a349e4ca0189bf199e29dfe9f6d9ac499a19da49f429a2099439d349f039ac898e09cc59ec4994e987f9c359ec39903981b9caf9d269932977f9b2f9dcb980197ed9ab79c3f987b96689a799cab970f962c9a319cf8969a95da99f99b6a962f959899939b3d96cc944599089bbb957294c398849a71953e9466980c9a2f953b9421989b99cd94be933d970f999394eb93b29658982794eb93b296589827940000e518f31957900000e518f3195790f29f91a62fa84da555a1c2a8d5a938a728a290a904ab50a82ba3a4aa2dac0da9c9a335ab79ac07a9aea3feaa68ac89a87ba2e5a98bab80a789a02ea838a9cca5d99e1da6c6a7dda43ca087a645a83ea580a1f7a712a96ea585a1daa71ba99ea412a12ca794a8bda3e9a0c3a644a89ea2d3a060a603a8dea1a6a0e1a56ca75ea184a098a50ba7e6a07ba027a586a669a06da0daa41ea6ec9f53a090a4d7a53a9f17a05aa482a5979eed9f2ea44ba5569ea79f07a416a5cb9d449fb2a3d6a4979dfc9e6ca3b3a46f9da29e2aa38da4429d489ed9a25da41f9d069eaea246a4459da89d7aa22ba4e39c989d40a20ca4d19c819d01a2e1a3b19c6d9daaa123a3409cc898119d779eab99a202a303a0012a94f2900895bf96c9933499a29d0b9fdb97ad9aa99e53a041993a9b979e6fa0ba998f9a589e23a09b99e399059ed89f80995299939d799f5499f3984d9d0e9f3799bb980c9dbe9e11998e98cd9c6c9eec984598769c309ed59819983c9cf99dfd989997f79bc89d28990697949b889d07994a96049b209dc198f895949ac99c55988895159a749cd99718959a99fe9b01979b942499649ba0964094c498fc9a429608947098849afa950e947298e8998e95559324988b995a94c992d997fa980a91c992d997fa980a9100005a18e619b58f00005a18e619b58f2ea0e2a570a729a3bea025a831a917a53da1bca8dca91ca680a114a958aa9ea6b8a157a998aaa2a686a117a961aa57a615a1a8a8f4a9d8a5b5a0f4a72ba934a582a0eca663a85ba48ba07ba626a803a48ba058a617a8e8a37aa01ea6cfa706a369a0eea58fa730a24da0afa54ca764a127a07aa5f9a6d8a0ec9f33a597a675a0989feca451a6d79f9e9fbba400a6369f879f86a4d1a5ad9e839f64a495a57e9e889f33a474a5099e509f12a43aa5de9d169fcca320a50b9eb79e88a3fba4299e759e50a3c9a4029e2d9efea2aaa4229eda9da4a294a4039ea89d69a279a4249e769d2ca250a4019e4f9de2a12fa4d49d1f9da8a11ea4fa9dfa9c5fa1c3a3a29d9d9cb0a05ca2709cd398959dc19f689a0e94a99a899ce0971e95679bac9cc7967f98e49c119e3e98f799689e28a0a199e39a489e33a0c799249bf79dfa9fac99619a9b9d8d9fb6999d99439d1e9f79990c99039dc99e1499a798d49c9d9ef2983e986a9c199eb998d597eb9bac9d58987a97689b579d2b983497fe9af39ca597d396aa9aba9c739773964b9a759c2b97f095ec992b9c24967f958c99ac9b7295f3941d99059b1895b294dc98a29ad09451948a98289a4a944b947698ba991594e4935b98c9996394a193cf970a99bb91a193cf970a99bb91000000000000000000005a18e619b58f2ea0e2a570a729a3bea025a831a917a53da1bca8dca91ca680a114a958aa9ea6b8a157a998aaa2a686a117a961aa57a615a1a8a8f4a9d8a5b5a0f4a72ba934a582a0eca663a85ba48ba07ba626a803a48ba058a617a8e8a37aa01ea6cfa706a369a0eea58fa730a24da0afa54ca764a127a07aa5f9a6d8a0ec9f33a597a675a0989feca451a6d79f9e9fbba400a6369f879f86a4d1a5ad9e839f64a495a57e9e889f33a474a5099e509f12a43aa5de9d169fcca320a50b9eb79e88a3fba4299e759e50a3c9a4029e2d9efea2aaa4229eda9da4a294a4039ea89d69a279a4249e769d2ca250a4019e4f9de2a12fa4d49d1f9da8a11ea4fa9dfa9c5fa1c3a3a29d9d9cb0a05ca2709cd398959dc19f689a0e94a99a899ce0971e95679bac9cc7967f98e49c119e3e98f799689e28a0a199e39a489e33a0c799249bf79dfa9fac99619a9b9d8d9fb6999d99439d1e9f79990c99039dc99e1499a798d49c9d9ef2983e986a9c199eb998d597eb9bac9d58987a97689b579d2b983497fe9af39ca597d396aa9aba9c739773964b9a759c2b97f095ec992b9c24967f958c99ac9b7295f3941d99059b1895b294dc98a29ad09451948a98289a4a944b947698ba991594e4935b98c9996394a193cf970a99bb91000000000000000000000000000000008198bca1c4a33c9c5c2257264227b3a9b326212bce2b96acda26ec2ad52b6ead35274f2b4f2cbbaf5e27b72b6d2c31b1b427942b5b2c77b1bf278f2b742c32b1aa26d02a2d2c73b05326362a812be8aea8257729772a19adbf2482287a29f7aa8624052765281da9a523189d6aa345ab22278b23c91a7eabc6297f2ae229dca8282a472a362a5fa8f1297a293b29daa8cc2652aaaead58ac762bf32919293ba831299229cf293fa7fd20d825a02653a50e1f9524752503a50c22f025b226baa53a29d8294e29ada8fa2b512cdf2ba1aaa52ca92cb12cbeabaf2c3b2c182c18ab902c252c8a2b63aaa92b872bf92ac7a9f12667275b2716a6121e222159227ca05c173b1d0d20059f049c79a11ca338a002120f1b9f1c549e6d17ab1d1020c19a52182d1dae1eda997e173e1da51ed2996d17261db71e0d9a6316c31c341efd993816921cf71dc3998b15481ca11db29921150b1c291d5699e314a91be01c0a99be14201b921c0e997214d11a651cdc983c146b1a241c7d9818143a1a071c5e989413e119ab1b12986d139a19661bdb97fd125219f81a3c977c121519601a74961f126f18b8197f95ee111b183e19c494ae11ce1703198e94ba11d51715199f94bf110118fc188994e9105517e018f094281308184419839400000000000000008198bca1c4a33c9c8198bca1c4a33c9c5c2257264227b3a9b326212bce2b96acda26ec2ad52b6ead35274f2b4f2cbbaf5e27b72b6d2c31b1b427942b5b2c77b1bf278f2b742c32b1aa26d02a2d2c73b05326362a812be8aea8257729772a19adbf2482287a29f7aa8624052765281da9a523189d6aa345ab22278b23c91a7eabc6297f2ae229dca8282a472a362a5fa8f1297a293b29daa8cc2652aaaead58ac762bf32919293ba831299229cf293fa7fd20d825a02653a50e1f9524752503a50c22f025b226baa53a29d8294e29ada8fa2b512cdf2ba1aaa52ca92cb12cbeabaf2c3b2c182c18ab902c252c8a2b63aaa92b872bf92ac7a9f12667275b2716a6121e222159227ca05c173b1d0d20059f049c79a11ca338a002120f1b9f1c549e6d17ab1d1020c19a52182d1dae1eda997e173e1da51ed2996d17261db71e0d9a6316c31c341efd993816921cf71dc3998b15481ca11db29921150b1c291d5699e314a91be01c0a99be14201b921c0e997214d11a651cdc983c146b1a241c7d9818143a1a071c5e989413e119ab1b12986d139a19661bdb97fd125219f81a3c977c121519601a74961f126f18b8197f95ee111b183e19c494ae11ce1703198e94ba11d51715199f94bf110118fc188994e9105517e018f094281308184419839428130818441983940b8e1ea08aa1b8970b8e1ea08aa1b897c420a324fc257dac5e25c029502addaecd2539290d2a8ab0cb253a28422903b20d266127f527e8b302262b284b2862b488257127b9283fb454252f28ee28e1b3a7246f275828c7b13623e025db2614b052215624382529ad4a200220df1f3aaa1e1cfea450a74fa91b24c39d0fa32dab732800270e26caaaa029c2281a2882aa7f29ce252a21edaaf0288aa1aaa835ab002a1021059f64aaea2ba529452825aa332bd729d128b4aa902be3297b28dbaade2b302aba283bab0c2c1c2a8f289aaba52b572a6128f4abc92c732bce2960acb92c882b0a2a20ac0d2d242ca12a44ac612c7f2b652a93ab2c2700277926afa83616be18731a23a426920a9afb9949a1e893089de79d0a9f1803d3943696b29d40152c1c581da69de8164a1dca1eb89cf915101dc01e359ca016071d631ee09b1516b01c021e359bce15401c7f1de49a1f150a1c491d739a1015c71b001d459aeb14841bed1c049abb143a1bbe1cc9997214f31a921c57995814af1a441c1f992a14391a0c1ca4980814f1197f1b36984c138719201b9c978f120c19851a2a971f129c18f9196896b4115e18aa191396311101184519a895ff10a41700195d95cf105417a318d89423116c1765189894c80f3a161f18dd93e710a41536175492e710a415361754929780219c419d52949780219c419d5294741ee522fb23fdac0f212b26b82607b0f621e625d62629b12d2292244c25d8b28920d122042461b43821d9237324eab4352002226824deb4cf1dec1f882258b4021e7d1e981fb1b22a19371ad914a8b00e1529992e9a3fae7d94d99e28a054acb3964fa133a3abaa0619fca160a490aa8224141de4986baa7428f424e520c9aa7a294f2378935babe329cb21db9ca6ab6b2afc249a195bab4c2bfd271424f9aa212c3e29df26c7aab02c882a9628d5aa072cc72951286eaa632c152b2b29ecaa472d222c992a81ab652d5c2c132bf9ab702d5c2c0a2b21ac642d422cc82aecabba2c862b1a2a46ab6826e024b623cda765948999a9994ba3c6958f9a729a06a15491c9973197ae9f9b8bbe90568f939e9b0fbf156e17249ed213011ad21b6d9d24153f1c781d069d68159e1cef1daf9c5d15681cd51d4d9c07151a1c241d969bbe144e1b721c599aa114bf1a491cef994614bb1a3b1cda99fc137f1a151ce7997313361a121cb5993013f419a51b8799d112ce19881b499982125d19001b109950122719b01aa1984712e118541a6298f4116918d419b5977d11fc171a19dc964e116217b8183d96e310af164a18c5954f101b160918a39508109c156117c794020f7515e1165a943e1023154816ae923e1023154816ae920000268add048f940000268add048f940e1a5820aa2208ae5118ad2070213cb0e615d21ee11f4fb14211fb144b1ceeb2009cff95139757b47499ef96db97d2b46b992a9dd897b0b49e9d8ba1af9d69b4b79cb7a08ba1e2b2e79de3a020a30fb18b9ebba20da4d3ae229e8ea2f3a3daac389fe1a326a54fabe49ea1a498a545aa861669a1d9a313aaa4243818209f3caa7a28e821d892f4aad12968245d1943aba12a7d26cb204dab792b7f28d1243aab092cc529482844ab6f2c332bab2928abcd2c032c5f2a17abff2c402cca2a52ab302d6c2c4c2b79ab642d972c772bd0ab8b2dae2ca42b15acba2dd52ca62b29acd12cad2b1d2a19ab31258724672321a83b976d99d99847a2ff98b59cc19cdaa04e95b7988f988a9fca9049915a89309f41035e148a159e9e8b10c8181e1a749d5c13af1a401cb69c8214141c111d3d9cb214251c321dbf9b9f14c11be61c649b38144c1b701c019b1814d91a5b1ca69a7813bf1a271c579a20136b1ae31b049a1613ee199b1b0e9a94129319111b139a93124619cd1a169a591207198e1aa2995212b918281a7d99f7118418f0194a99dd114c18cc19f498631112187b191698e9104617c718c79610107516e717bc95930f1116bc174f95f40f0616a3170a95c00df7146c164795560d4413e5146a93560d4413e5146a930000029e299f19950000029e299f199587a12ca338a4faadbc9c2c1905142eb0479dd09c9d9d28b101a02ea0d1a094b295a191a2c0a32cb48a9f33a0c3a0adb4719fc0a1b6a08fb488a1f2a41da441b468a135a439a4abb2d1a105a5e8a5dbb0bca12da5b1a5fbae23a1e4a4f0a567ad1aa1f2a40ea620ac29a19ca57ca693aa9fa053a575a6d8a9289802a4cba5e1a95724fb9749a261aae5284923f41853ab8e2a192743229eab7b2bbb28af250dac232cf3292328f9ab8b2cdd2a4129ecabdc2ce32b3f2aecab192d3e2cf32a04ac4b2d762c302b21aca12db52ca52b43acd92d042d182c5aac0f2e162d042c42ac6a2c182bad299daa2622fb20481eb1a66c99e19b749c0ba27a99a09be19b68a02d98fb99ba9a9c9f6c94ed94d992b49ff58f170e4f12189f4a0857168d18069ef3100e1a5d1b589db312ad1a721c229d1a13e21a431ce39cc512791add1b4c9cbe12311a6c1bc09bb112ef193d1b8c9b1a1290193f1b3f9b11127819ea1aea9aab112919931a939a4011da18451a459a43119f18b719f69918113e1868196899d01007181b19e4983c109517cf186598a60f19174718ca972c0f5816f717e796520ea415bd175d96490e4d1500175196170e3b1563160f96bc0e0a151316c495fe0cc41329152995130bfd10b8107396130bfd10b81073960000698d088d1c920000698d088d1c92649da49aca9b9aadbc9fdc9dd49efdaf48a02aa0e0a0e9b0c9a03ea2f2a13cb25da294a35da3ecb3a4a117a353a260b493a144a457a263b420a4aba66ca60bb4eaa36ba642a665b2f8a37ba610a7ccb035a3f4a59ea615af6da272a527a62fadc4a11ba525a6d3abb1a142a5faa53faa9da15fa57ca667a915a19aa52ea6fda8f498c7a337a5faa8c424761c6a9ef8a951291d2626216cab622bbe282f260bac422c462a6a282bacae2c3c2b7d2930ac0f2d0e2c562a4dac5c2d692c092b5cac8e2dad2c8a2b84acf32d082d1c2cc2ac482e5f2d682cdcac232e4a2d3f2c95ac3f2b0c2a2c2945ab1f1d9d1bd9157ba5509bc69c909dd9a1e899fe9bae9c55a1b698fa99e19a9da0ec95d694ca945da07a921488210916a0c28e780dee118f9f8a02fa15f5177f9e1e0eb3182e1a9c9dff10a119d41a469db7109719da1acb9c0d119d19db1a8b9c1f112d19941a229cd910f7180d1a9a9b67109918e919119b7d1054189119a79a4d1052184a19529a151021180d190a9a2110c817c618b499db0f591781182a998a0ff4164218e298200f401608186c98980ee6159117f097b50d4015c2161a97770dbe14d115d196f20c59145b155496ae0c9d1385141396c50b8c12781402963c0d15133b15a2933c0d15133b15a293000093121415539400009312141553943d9dd3973a9280adb99e1799f399feaf64a0c3a1569fafb0bda185a4e1a2beb1caa268a526a406b3b0a459a720a69cb33ea416a5e3a671b3baa3a2a60da8feb298a4c5a755a8c3b152a4c4a60aa899b045a3bca56ba6beaee1a29ea567a606ad69a2aba57ea6f9ab4ea2c4a5aea696aaf9a171a550a695a9a2a1c6a5cba6e7a8bea1a9a5c0a606a9f79d7aa40da6f2a8bb22a696a7a0a9a96d29ab267b2415abf42b052a252832acb22c152b902971ac102d092c432a94ac6c2d822c2a2bbaaccd2dfa2ccd2bd6ac202e272d1f2c0dad622e382d302cffac522d692c562b8eac3c284e273426d8a8198d39946f98c1a3059c759d9e9d24a2b29a6c9b699c15a11299d799e3993ea00d97c295d99525a0c694ce8ddb88bc9f85915c0da611349f998a2916d017a59e7507e917f018009e1d0c3c185819aa9de60d8e188019669d4d0ea018a319269dd40e5218ba19e59c5b0e47183219469cd20dcc17b118b99b270e27176418f09aa10da9161d187f9a320d3d16a617cd99700dd21545178399230d8f15ea160599fd0c5c159e16cd98b70c23153d1653988d0ced14fd1527985e0c6c14a8157a971e0c2114ee14f896230b7b138114d6967f0bdf12ae14a6959f08ee117213a496dd06c610bd13cc94dd06c610bd13cc9400007996589856930000799658985693c09f099ff4a049ad179ecb18939383af729e0a99059d6cb0d69f0a9d469bb8b1a0a0281eeb9513b3869edb1eca9cbcb31ca252158aa192b387a12e9ed6a2fbb20da18a9db8a0c5b1f6a113a455a470b087a223a5bea58eae7aa20aa5c5a5f7ac86a218a53ea6aaaba2a2d4a5c9a65aaabfa217a628a77da957a2b8a5d3a6b8a81fa2c5a57ba608a8cba1e3a5a9a6b5a7339fbca4faa52fa82220d89514a0f5a846289b25aa22bfaa922b8f29172851acba2c7e2ba029d1ac442d372c9e2a09ada52d9d2c0f2b21add82dc92c8a2b43ad942d8c2c4f2bfaac1c2b222a07292cab09222b22cb20dca6839baa9d0f9f09a25c9cd09d829e90a1459a069b1c9c61a10e99d5986499f2a00498fe966e97a5a09d9510915a9235a00d935907a608b29f658faf13ed14419f5f8a1916dd17f19e6c82ee1601183f9e5106ad164718669ded08e3166c18189d600a09178418c99c910b0a173318749c4b0ba6164e18399c4b0c64161318009c120c0a16b517479b820bb115b916979a090b47154716269aa00bd914cd1574998f0b85146f151b99300b3d141d15cf983d0ae013c3144a98dd09e6127e14bb978a090012c513ed96a3084c1113123c96b0083c10821090955305f00e6b1046942808ea0f53111b962808ea0f53111b960000e206d611cf8c0000e206d611cf8ce99ff49e8f9b56adbf9f069fa09cb0aff39e409c1a9aacb09c9f1b9d4c9bd1b172a05c9bf09531b3e5a09015e29ce2b343a07a15db9cbeb35ea05a9eb19c17b3dea02ca2d3a0fcb1aea122a37ca37fb008a314a5b5a584ae0ea30da5d8a5edac5fa2c0a47da5aaab9aa226a503a645aa56a270a55ba632a9e0a15aa5fca563a8dda138a524a6b5a7b8a158a517a616a790a1fda4e5a5dba685a1b8a46ba591a65f94cba0b1a207a8d3249e21d91c52a917291428062630ab702bee299d2840ac152c912a31297dac262ca72a202960ac302aeb28c4274aab082410232922f0a78f940597419986a3479c909dbe9dffa0229c1a9d079d86a0d69ada9b799c92a04399a999999993a078984f98a99893a0cb96b694879420a0c994608def8ea79fd0912b1076113c9fb38d0d158a15ad9ed8894a15b216ea9d958646161c178b9d1982821699174c9dfd0124163c173c9dbc05ef150f171b9d5b05b215d216ef9cf40461158016b59c8007031514163d9c09079c14fb14c39bce064f149e14ee9a70061114e014499a3106b412f1137d99e905ff112713f0980c0581116b120f989e045a112c1271976c06b5106111ff963506ad106e11b2965706a410511133969a05de0f7110a3950501b20c390e5c950501b20c390e5c9500008592c1936c8f00008592c1936c8f3ba0ef9fbea027add9a026a0f4a07caf46a093a0019f79b03ea189a03da0b6b129a1d694679c1cb306a0131ccd9cdbb3e29ffa9b93a1b6b38aa160a06ba11bb3dea104a217a2ccb115a25ba431a45eb0d0a278a48aa482aeeaa28da4c8a4baac96a258a4f2a499abb2a2bba480a540aa88a211a504a653a927a2bfa49ba54ea87da170a444a579a765a179a40ea5efa663a1bea471a5d5a629a159a42fa5d1a5b3a0eba36fa430a59d9d0da24aa3b3a5e909ee9df09e0aa79320e61ae81910a88d230a219f20aea8d0226a20321f49a8eb1c9613a68d17a61f9a7b9eb69f5ba44d9c709e439f62a2609cd29cc69c05a2279b569a3a9bd8a15c9a5c99039a83a1cd988b971998efa02a98fa95479672a059968f9484941da03795c8900292a99f0b942a8781882d9f39929e06370e9a9e9f90980fcb101d9e6c8ff4104612b79d1d8ef0119e13669dd08c61110213f79c228b1e127f129b9c998aa1110212419cc8894411a211fa9b9587e5104411779b3384ac10fc10c99a08846810aa105a9aba832a106d10c7998b83e60f3c1087991681610f01103b9901010b108d0fee98ed00840f6710b3989d02240f2f1047989502f60e07101e98a902e70d9a0f6e97ce00970c1f0ef996cc02070b960ac096cc02070b960ac0960000bb11f414238d0000bb11f414238dee9de299541818ad3c9e969b4a9375af169ee098e79975b00ca0ef99309ba6b12ca1ba94b895d6b2c8a04f958aa1aab3aaa1c39bb69c81b38ba168a1d9a4f0b26fa1f4a251a4afb169a2cda453a561b053a271a483a54baefda176a429a5ccace2a164a41ba522abf4a168a42ca5b8a917a2a1a46ea5eaa8daa186a451a528a895a17fa44fa509a761a189a421a57fa637a13ca406a5e1a507a11fa4c0a45ba5eca0e0a3ada4dda468a0c9a203a45fa4b59fc8a156a32ea4af9fefa170a309a4659f4ea1d6a2b5a3cc9eafa00ea32da5d49ee0a0baa284a3229ed2a00da28ca24d9dbb9e26a085a2829cf79ce19dc5a18d9b469bb79ca3a1889ab899a29a5ea181993c98799905a1c2981097af97faa0d197b094b1949ca0a996dc9028923ca0c894eb066888939f2293d30c3908869f269153111811429f618f6b12be12dd9ef08efa110b12279ea98d93111813d09d518d37114011579df48c940fe910ff9ca48cea0e860ea69c228c760c0e0b309c258aef0b35043b9bbb897508f703919a78894f08cf03129a6689000baf03a49963891d08a10354996189f7078503f398cd89c4075f0389982389710238831f989c884e02f68238974c883d82bf82b1969b885e89cd8aa19632886a8c3890549632886a8c3890549600009e0d4e126c0b00009e0d4e126c0b7c9e0b9c221bdcacbf9d5b9b08934eafda9e9a9dd09964b0a79feb9eff9d94b171a0cf9da095a2b2e49f1b159c9c41b3e89dfd141c9635b3c59f12a087a2aab278a1cda33ca4a9b10fa2aaa4cfa541b0dda14aa4dea416ae7da1efa321a460acaca108a44ca4caaae6a118a4c9a47aa9d7a139a4f5a476a87ba11ea4dba47ba740a105a4c2a4b6a619a1e0a3ada40ba6e1a0c5a3a8a4f6a5aca0a0a3a3a475a5a0a07ba38ca421a556a03da332a4baa453a074a2a6a327a401a01da2eba288a3fe9f93a1a0a282a3f89f21a111a232a3ba9fbfa08aa19fa2fb9e0aa003a1d0a20e9e839eb39f54a2b79c079d709d08a2ad9b3b9b269c5aa1b49a0c9ac99ae4a0a0996b98d098b8a0ae98259791978fa06897aa94819444a01296c0921f9235a0a0944d8dc48ec09f0e9498862f88319f09934006f807d99e2292e2058007729e37917a05fd06019ed49024059106a59de28fc1041a063d9d4d8f6284a485da9cdb8e0e843985539c998eb8895d8b119c848e7989028b739b338e27898c8d139bd48ddb88498d7a9a728d7288f78c159a578c1788948c2799c58b4f87008c80989b8bd186498bd5972c8a7c862c8bb697ea8974861f8ddd97f9894b89838e40983e88b885c487fc95898817852a820195898817852a82019500007b129514ef0200007b129514ef02039d62964c11adacf79d069df1921baf739e56a0c99c56b0ca9f62a0209b88b1849fb49d889586b2699f04958d9c10b37ca05f9b8f9ff1b213a0c79dada46db214a0a7a0cca16fb195a195a49ea41cb012a23da4d6a40cae0da289a447a573ace9a17ea4eca4b4aac7a140a4c2a474a9b7a14da429a589a8bba125a4f2a4bca76fa109a4cca4aba62da1e7a381a4d2a5cfa09da361a431a597a01ea314a4a5a45ea0cba20ea43ca453a0b1a2aaa3aaa308a028a211a311a3969f87a156a256a2079f19a1dda16ea2be9eb6a05ea177a2409e14a09fa077a2c79d4a9f23a064a20e9d159e529f41a2999c529d509ec5a1c49b549bad9c63a1949ac599729b31a17a995598909919a1be982296cd97e0a09c977b93b99479a09c9604915a9235a04695958d0d8f09a099942a8d8e8e839f6094d58c258e0a9fac930a86b88d8e9e22938f85478d0c9e4d922185ee8cda9db291a8848e8c699d3491738a0f8f079de090f58ca890be9c7090798c7991559cf08fba8dea90819b708fd68e8191a19ad98e748e4291549a578e5b8e2991fb99348e198ef9916699f38dcb8d9a91d998b88dbe8e33914c98718d838e0e91f9975e8d998f9a914997588d618f9790e2960e8ce98fc691f295f289628ecd90f694f289628ecd90f69400004d159a16db8200004d159a16db822d9cf898ef905bac639db69ce798b1ae649eca9e759e10b04aa042a118a04db1c69f07a1c2a03fb2b09fe314719cb6b2279dc614a0a2adb283a027a2e7a02cb21ea17ea1e3a234b1eea02da3e3a3d2afe6a186a348a4b1adf3a1a0a3d6a44eac9ba12ca495a48aaa92a141a4baa41da95fa13fa4b8a4f4a715a1f4a37ca4a9a607a1d7a3b6a416a6e4a0b7a3aca4c2a5b7a07ba387a4eea48ea058a362a462a458a0f6a227a4f4a339a08ea2d8a32da30da02fa25ca30ba3d09f8ca19da29da2129f08a111a259a2b39e5da046a1d0a1249e1a9f83a0cda1989df39d8d9f7ba1b69ce69ccb9daca13b9ce19b039d56a12f9b2c9a009b0ca1569aa598e19900a15d9992971298b8a0d09812964f96a5a03a986993af946fa02a97f690509257a07796a190f29117a01e96198d89919c9f7195de8f0891ec9e12954a8faa906a9e9c94ca901c92019e5c9483906893a99d3a93a4920995549d21933192b6942a9d9d92ce921b95af9c1b923f9363955b9ca591769397950b9c4e91b892ac956e9b0991ed924395a59abe9069925d952e9a6290f291f494b4998c8f899197941799358f5f9179949298b28e3e91589440981e8e2491b29383979c8e049113933e97ee8c5e8f83910096e18cf18eba909294e18cf18eba9092940000b818a91a9d8f0000b818a91a9d8fbe9c28a0139fb0abcf9da8a1fc9ff1ad3f9e0ca2d1a07faff69e1fa319a003b18d9eb59fb89ec2b1439ee19d6ca205b21d9eba9d169fe3b1f39e5b9d5ca468b1a49f55a068a19eb060a023a2aba2fdae67a1b3a29ea335ad56a105a30da49dab97a0a6a2f4a2b6a9e6a068a2e2a28fa882a117a384a4cda7cda1fba3d8a454a679a111a4a1a44ea528a1e1a376a476a4d0a094a357a426a480a000a338a4b7a346a093a2eda341a31ea041a233a3e2a2c19fc4a1eda29ea27e9f4ba161a261a2b09e9ba087a117a2209e2aa0fda0cda1909d049f2fa074a1fe9ce79df99e69a1969c949c539d35a11b9ca79a389c38a12b9b04998599fda0519af7967398f5a05c992f946695eba0ca98f193289510a14f986091da94f0a0f597fb909494d3a006979d90499484a07196ff912d953ea059966394cd9505a0f395cd943997199f3595b3952898759ef4948f964498ff9d9f949996b3988c9d3c940396a798169dde93e9953798729c7b93e8953c98049c38938f95e797f39ac5929095f097469a8492279570976699b891d694f996109947919d9487968798c0900e9430964b98b590b8937d95c197d39066933295fc96f3904693a79409960d91c593779475957c904793b9946095938fe991bb93ca94938fe991bb93ca9400009c1a831c829a00009c1a831c829a7c9e0ea343a38ea9bba05fa631a6f9ab98a0e9a559a783ade79ae21ee7947cb01697942582224ab1b4967f25642249b1e19927241a1c41b1049c281d2715f4b04c9c64139f9439b09f9e989d079fb7ae2ba02fa1bfa108ad44a016a1fda032ab2ea07aa001a117a936a005a1b7a1f9a75aa0c9a1bfa257a695a096a2cea353a5cda03ca34da483a4b6a005a332a432a498a0dfa21ba47ca372a07ca2c3a3baa25ba06ea2c3a371a226a01da25ea3cda1d79fc4a102a386a1869f40a1a9a23ea1079fc8a0d2a103a1739e2aa014a1d1a0cd9dc59e1ca09ca0e29c0c9d7d9eb0a04c9cb59b749c93a0399b5899ea99aaa0809a9e97f9978ba0c899af944894d1a021996792eb9005a1a098328fac90f6a04b98b28e5090f2a0ea971091c68f74a05b977b92269439a0e296c9930e9500a08f962895d2976e9f06963396f397aa9ecb950997e998159e8a951397f598a69d53959c97f6983c9dfe94eb96e298a19c9894da96d6984a9c6c94de96da98c99be293fd969698179b8a93a19695986a9a3d9341968f98cb99fc923696449830999792bf95ea97d098d0912b95099748983e91d49425968d979f905794f995569751904694ef954a978b903494c695c49610909b935c9789981b929494e39535961b929494e39535960000381cfa1d8a940000381cfa1d8a944599fe982895a4a9b096640ea71a6dabd891af1a221df4acc794eb1b141d79b0709b911a1d9c36b220973c1bdd95a5b20e9ba9144b9c65b2929d589ab29ed1b1129e4a99d79f95b09e9e3ea061a0ffaeb19eeda09ea0acac289f68a0eba026aa909e21a07da067a8889d6f9cb59d73a7b39f629e1e9f28a67aa059a20da4fba4bfa0faa3d4a4b0a3e1a0fba3d9a467a2c4a0f3a307a5d2a195a0d2a3c6a486a15ba070a385a4eba02ea017a376a4b0a0e79fc1a21ea47aa0389fcea155a34aa0779efba001a2bc9feb9dfd9fc6a07b9f329d059e1f9f1f9f759c389ce49cc19e7a9ba498fc98939e769afc924f91dd9e35997a89ed0a249f3898a414e115c59fa2977e14551761a05c9793152717dea015972514c7162ca198968413c71408a1bf95ed104112eda0ad951007a48890a03996eb92dd964aa04e96dc95c3985f9fd0963a98e799699ed4960899e89ab29d749633991a9b1d9d03965c99429b989c9e953799189b4d9c6b9520991e9b239c2195e398139b5b9b0d95d998c79a0a9bb09471982d9a2d9a5c940b987f997f99bc932297ca98ca980293ad9645984598939257961998d0976592bf95d597779722921b9578972097139219950897b49689914494b495529693902194e995a39493902194e995a3940000b01c351eea960000b01c351eea965d9ab49eb19d4aaaf59bd0a0c9a008ad1f9cdca04ea1dbaed99d87a3bea4e5b06a9eb1a472a61ab2549f4ea36da499b2759d1da228a57db28a9db7a12da3c0b1c89a4993e39ad8b0289e03a145a3f7aeca9fd5a2e0a382ac75a037a4b2a422a955a100a5faa590a6e3a190a5cca67da43aa1baa4eba57aa292a0e0a4f3a57aa1f4a02fa549a657a119a11fa541a6d6a0c0a0bea4d4a54fa099a048a472a525a07aa0f4a30aa54e9f62a05fa3afa4fe9e36a0dea25ba4b39e05a0faa18ba3649e679f26a146a2a99de49e0ba024a1809d019e7d9ec79f7a9c229df69ce19d789c129cbf982899749c51990a157a16db9c8b97011ab41baa9d5796421b191d529fa295341c661d6da09e96771b681c24a1f297c919ec19a1a11e988311231371a15298b8922d9205a1c29852962698a1a0fe98cf981c9a18a05e98ef99089bed9e6e972c9a219cdc9d02974b9a3e9c549df096809a329ce29c8e960c9a1b9c6d9c5996e899019c019cf995ba99cf9b3d9b63955e994d9b809a1595f898d39ad599b294b698729a45997f946298059aed98049411986f99409854933d97d398d597eb92ee96799831975f926e965298f3968a91f89508986b969891ec95d9973f960091b5959397f795ff901d955c965c96ff901d955c965c9600005c1b9e1d399500005c1b9e1d3995c89c6da2b9a20faa6d9fdca448a6b6ac0ea0daa615a848aef9a101a9e2a986b0a8a14ba9a4aac2b157a2f4a9e7aa8bb232a19ea8aaa96eb2de9fb6a7dea7c8b1169d95a4bba4a1b0379ebfa3eea24bae7f9f19a378a3c4ab65a03ba470a5b2a81ba07ca4afa5f3a5d09e98a275a42da3229de3a059a2849e05a19da436a67e9c78a19aa506a7819d06a13aa580a6bf9df3a014a554a67b9dc8a0eca43da64b9db0a0d9a43ca6ad9d90a08fa404a6989d62a037a477a50c9d15a00aa38fa4299a199fbca1afa333992e9ea3a047a24498759d2b9feba05198da9ca89c909e60980f9cfc988a9a889960990b172f0ccc9a7f94be1d0d1d859cac046d20de201b9f5d0dd820c22180a1120d63205a218aa28b89241e341fe5a21195e0179e1751a2bd971694a7975fa1dd97fe98779a97a03498c99af39c2aa08998329c409e9d9f85986d9c519ebb9e1c98449ce09de09d9297fd9ba29df69c2497919b219d5e9c9a96059bc79c8f9b0b967f9aa99ce49adc95299a499c459aba95f899209c8a99d095c799069c2a99ef957499b09bef983495f598ea9a939828946398349a3c98c8931098c099bc971c9386974f9961977592cb96e298c9966d92c7966d98da95f29031962998479653913295b396229453913295b39622940000fb1c091e43970000fb1c091e43974e9d2ca441a5baa837a1d3a72da90fab78a1e7a817aa96aca1a211aaa0ab1fae42a46eabbeaca6afeca44dac76ad30b049a57eacbead35b004a31caa03ac57b0579d9aa149a2ebaf4694951e4b20d4acd79b03917612bfa81ba036a37ca41aa5c6a0aaa5ffa631a2b6a0d4a534a7eca038a05ba59da66e9fb89fb2a4f8a58e9e69a0f5a448a6969eafa053a58da6b99ed4a02fa56ba6979eb2a0f8a450a67b9ec4a0e9a41fa6f49da9a0afa4d7a5c99d7ca07fa497a5639c26a019a430a5ce9bbc9f92a3c9a42d9a0f9ffca253a482971d9ec6a11ea3cc8ac79c11a0fba0f817c399d5984199361a9095f31a6c1ccf1b5f0e18211923601a77196224bd251f969d1ae7245226a3a116173223662466a47d89621e701f39a4f495b40e4110d3a2bf980099639a58a16f99ea9a8f9d82a09299689cdc9ec19f3599cc9cef9e8b9e7e98759c7d9ec79d0698259c259e4e9d5397d39bc39dd09cd496579b679d389c7796fd9ada9c4e9b1c96709a609c1d9adf95e899369ca6998695af99159c429963957199d89b0d990995fa98249b86987b948e984f9add9713943298bb995b977b9304986b997f962c93f2971f995796d59284970a99eb95e892449793988c954b92e6968e98c694e6913395d6963e93e6913395d6963e930000991b311c11920000991b311c11929d9831a0a1a1a0a44da116a844a9b7a97da28ba93aabc7ab21a379aa05ac83acbca320ab7bac05ad4da4d2abedac49adaea425ac49ad6fadc0a459ac9cad72adb9a416ac0cadb2ad3aa1aba50aa7dcac6ba283a8a6a93faa8ea23ca900ab0ba84ea1baa72da9aea5a4a121a7a3a8bfa43fa2c3a624a81ca444a1cba57ea7f6a28aa02da5d3a61fa2d2a019a5b4a622a2c9a0f6a48fa64ea1bba0e6a46ca6eda055a0b2a424a686a027a08ea4f9a538a000a063a4bba5e09fc09f25a455a58c9e819fb0a3eca4b39d289f3aa37aa4999cc49eb7a212a4699b739eb3a215a49098689da1a1dda29215f698a4968f965620be16d8235e25362455200429882ab91f742004297b2a65a4eb197824932532a78795be12511404a5df9afa9dc99f56a2209a1c9e15a06da0e699bf9dc79f629f7b99a19d7e9f609d69994e9d229f839cff980a9dd59e129ccd98e79ca09eb79b8398a69c429e059b2b98509cff9dfc9acd97fd9ba09d729a3597679b3a9d209acd96e59ade9c9c996896539a869c2099f695c999289c9e98a5958f99a49b289857953099049b7897ff94f898bc9ad396a994a3985b9a9d9659947d98319a719604943898129a509672930d98dc996896359234972f996995e5914e9678983f94e5914e9678983f940000051a1a1b6b940000051a1a1b6b94619b3ca269a32aa486a016a81ba9b7a8e1a144a9a4aa15aa83a2e3a953ab05ab41a3aaaa26acbcabb0a3eaaa62acf0abb7a325ab76ac15ab2ba3ffa988abfaa8fc9c22a419a567a4b894979cee9e80a09b9d12a3eba408a44da275a7e7a827a63aa2daa723a9baa520a1a4a660a8caa4e3a051a6e0a779a3dca0d1a521a7dba29ba070a5cea60ba280a028a561a68ea17ea0f2a42fa639a18aa0b0a4e9a5d1a05aa083a4b2a5a4a054a06ea495a562a02ba037a454a53fa0f59f22a443a522a0d69ff5a308a5b79f159f5fa3d5a41f9fb39efba27fa4d59eb99e30a245a4389e179ea3a16ca3199df69929a1cea2229c8c9fd3a418a54ea1a822a62a292c9ea62124b72b992c20a8809d47a345a5e5a2849c8f9fe9a1949d8b9d889ff4a1cd9d819bd09e38a15a9d1b9bd59ecca0979c909a7d9e86a0159c889a5b9e3fa0539bd899dc9dd79fe49aa999959d599f6c9a0099169de69e6b9a9f98cc9c839e2e9a1a98709c179ee79992970c9c939d8599ed965f9b189dee98a096c79aa39c62985296469a499c24980b960a9a169ce7979b959a99c59b53971a954c995d9bc296b3940199de9a47965194a098649afc951a944c98f699bb9510940c986499529521931097fb980d95479375964098719447937596409871940000b1189019e8910000b1189019e891969f03a69ea7f0a5d2a033a829a9fba75aa1c0a8d7a977a8e7a144a9a2aa32a96ba2b8a916ab64a974a2aea91aab23a9e6a144a9aaaa6fa8dca040a857a919a7549e90a509a744a51a9d32a442a567a4bb9e16a57ca6f3a4c9a0aea640a85aa520a1d3a64fa8bca4b1a038a6f5a7e8a393a0eea57ba702a37aa08aa51aa7a5a26ea03ea5bea61ca281a0f5a464a66da18aa0b6a404a6efa07ea079a4cca596a03fa04fa47ea568a015a025a447a5dd9fbf9fd6a30fa53c9f419f91a3d1a4fe9edb9e60a3b2a48b9ea49e32a38fa45a9e629ee7a25ca4e79d239ebea24ca4139eb79d87a221a4ec9d009e8ca249a48c9d349d65a17ea3389dd696209b319d579a5a006783808be59439905795e3968e943799579d839e57989899ee9e73a0339aa89abf9ea7a0649a359bad9e78a09d9a809a2d9e0ca01e9abe99d19d939fee9949996d9d369fbe99f398449df39ea299be98099da59e7d998b98cf9c5b9e5a993798759c099e4599fb973a9cd49d32996597e29b9b9d5399e596759b559d2a993896c49af49ce698bc955a9aa19cae984a95e299539c4798f6947799f19b0498b9942c99579b42975a94c798c59ada9604947098369a239615944c98c699b4955393149870998c94e2927397b698ef91e2927397b698ef910000b5189119dd8f0000b5189119dd8fe29e88a5efa60fa437a0aca7b0a8a6a5c7a02fa81da994a6e6a04da86da907a708a16ea891a920a7caa03ea860a9b1a685a0dea70da952a64ea004a794a8cea515a009a6dea704a50da06fa5fca683a425a04ea5e4a674a42ca04da5f9a652a439a074a507a7bea311a041a5dba6a0a2dd9f27a599a6eba18a9feaa458a656a1479fbaa417a6caa0529f8ba4d5a57da06e9f70a49ba50ea0759f48a479a5eb9f629f2aa460a5799f429f0ca42fa54f9fe19ec0a317a5789f8f9e83a3dea4419f409e31a3c8a4669f0f9ef5a2a6a4329fc79d9fa28da40a9f929d5da269a4159f869d2ca245a4f69e659dd1a12ea4d09e0d9d8ea114a48d9edb9cd6a0d4a2bc9d269a3d9e27a07f9b4e95529bd29cc6981195a49bfe9c3a98a997059d6c9ed4980f9a609e11a0059ab19a959e5ca08f9a159b369e23a06d9ade9afa9de29f3a9a1f9a729d559fe3996099219de39ea1990499f39cad9e39999d98ad9c5c9e10991598419ce69d16996997d19b7f9db6980a975c9b3d9d9498dc96f39af69c39989c96a09abe9c1e985296489a7f9cfa97d595e9992c9cda967b958199a69b1696fc941799ff9a6195b894c6987c9a1995559495980b9a969458948598be995b94f3936898f8993b954e93d697109960944e93d6971099609400000000000000000000b5189119dd8fe29e88a5efa60fa437a0aca7b0a8a6a5c7a02fa81da994a6e6a04da86da907a708a16ea891a920a7caa03ea860a9b1a685a0dea70da952a64ea004a794a8cea515a009a6dea704a50da06fa5fca683a425a04ea5e4a674a42ca04da5f9a652a439a074a507a7bea311a041a5dba6a0a2dd9f27a599a6eba18a9feaa458a656a1479fbaa417a6caa0529f8ba4d5a57da06e9f70a49ba50ea0759f48a479a5eb9f629f2aa460a5799f429f0ca42fa54f9fe19ec0a317a5789f8f9e83a3dea4419f409e31a3c8a4669f0f9ef5a2a6a4329fc79d9fa28da40a9f929d5da269a4159f869d2ca245a4f69e659dd1a12ea4d09e0d9d8ea114a48d9edb9cd6a0d4a2bc9d269a3d9e27a07f9b4e95529bd29cc6981195a49bfe9c3a98a997059d6c9ed4980f9a609e11a0059ab19a959e5ca08f9a159b369e23a06d9ade9afa9de29f3a9a1f9a729d559fe3996099219de39ea1990499f39cad9e39999d98ad9c5c9e10991598419ce69d16996997d19b7f9db6980a975c9b3d9d9498dc96f39af69c39989c96a09abe9c1e985296489a7f9cfa97d595e9992c9cda967b958199a69b1696fc941799ff9a6195b894c6987c9a1995559495980b9a969458948598be995b94f3936898f8993b954e93d6971099609400000000000000000000000000000000a71b43217a2212a53324fb27452977aa6025a429d42a69ac8525c529ce2a32adcf25d129f62a51ae4026e329432b4fafeb258729db2af7afc525b529de2a65af992575298d2a9caef024e528e229a0ad28251629172a98ac0c244d273d2851aad8238a23e723c9ab8520ada669a980adad285429f42850aa4d29bb29a82931a99c293f2a2f2a1ea9e229f629d1291fa9592616a940ad6dac74290725201dffa8782b452bb82a00a8152a632a732a82a8b12ae82a852acfa84c2b6e2bd12a77a90e2ce42b2a2bc6a91e2cef2b792b31aa3c2c222c072c75aa3d2c0d2c992b3aaa652c252c772bfca9cc2a9a2ade29f5a8a824bf257e2581a4091c0e20e62026a00518341e0320479e0111b316f819c19f039cb6a19ea309a1d914911dd21e6e9dca18b31da31f099b1418461d581e469a8a170c1d7d1e229a7616a91c171e6e9a2c16741cb81d2e9a8315331c6e1d1e9a3515eb1b1e1dc499dc14811bbc1c7699a114f71a891c70997614991a581c01994014331a151cd2982314fd19e21b7698ef13a819801b5a98a01369192a1b43980e132c19cb1af1979812d218251a0d97fc114f1885190996ac1116184e196095a211cd171e192f95a211f2170619d4948311ea17ea18fb940a114a17d11860951b13d9178f19a1950000000000000000a71b43217a2212a5a71b43217a2212a53324fb27452977aa6025a429d42a69ac8525c529ce2a32adcf25d129f62a51ae4026e329432b4fafeb258729db2af7afc525b529de2a65af992575298d2a9caef024e528e229a0ad28251629172a98ac0c244d273d2851aad8238a23e723c9ab8520ada669a980adad285429f42850aa4d29bb29a82931a99c293f2a2f2a1ea9e229f629d1291fa9592616a940ad6dac74290725201dffa8782b452bb82a00a8152a632a732a82a8b12ae82a852acfa84c2b6e2bd12a77a90e2ce42b2a2bc6a91e2cef2b792b31aa3c2c222c072c75aa3d2c0d2c992b3aaa652c252c772bfca9cc2a9a2ade29f5a8a824bf257e2581a4091c0e20e62026a00518341e0320479e0111b316f819c19f039cb6a19ea309a1d914911dd21e6e9dca18b31da31f099b1418461d581e469a8a170c1d7d1e229a7616a91c171e6e9a2c16741cb81d2e9a8315331c6e1d1e9a3515eb1b1e1dc499dc14811bbc1c7699a114f71a891c70997614991a581c01994014331a151cd2982314fd19e21b7698ef13a819801b5a98a01369192a1b43980e132c19cb1af1979812d218251a0d97fc114f1885190996ac1116184e196095a211cd171e192f95a211f2170619d4948311ea17ea18fb940a114a17d11860951b13d9178f19a1951b13d9178f19a195d51a622005213ea6d51a622005213ea60b248c27d528a9ac7624bb28bd29f1ad9d24e228e8298bafcc246128232990b0c9242728ad2894b17124e8269b27bdb11024a026d027aeb1ed23da260c2845b117232d26dc2649b0d9213825c725e1ae112045219221c4acbc18a9a148a48cab2619a3a503a8aeab1b252e226d1f13ac55284e281028d2ab4d29b228352856ab4f293a26602345abb52844a00ea833ab262963192fa4c8a9d62af4284427cca9822b602a7b295aaa292c612b502ad2aa452c3d2b412ab8aa6a2ca02bbf2a0eab962c1d2c172b8fabc02c4d2ca42bf4ab962c142c322ba3abb82c1e2cee2a59abdf2a302a3929aaa9ac2338241f24e0a5410f8919131c1ca2390ce9146718fea0f08b2b9799970ea06790d09a4c9cb49ea911be129c15c49de6151e1c201de39ce015c61c1f1e5f9c8616b51c381e1e9ccc15611cac1d4e9b3415091c311df89aee14b21b091d959ac4146d1bde1c1b9aac14381bb11ce1999414fd1a861cac997514bb1a5d1c78993014741a3a1c4c990414081a061cd498af13c2196f1b9598f5124719d41a22984b12bb18151acf97fa117918b719ff9697113b187419ad960f11f9172119f995c6108717cf189895c71036178d184c95f6100b174c180095ac0f5d162f181e945a103716d81763945a103716d8176394bb18802023214ea6bb18802023214ea67a21a025e2275fad2821a6250527cbae3321a425972663b0f820ee24c6254db131201c244d2420b2161fe321ed22bbb2161edb20b12199b27e1b3a1d241e06b2a718bd1986140eb10415f1121f94edafc20d9b9b909cfdad0f94e09fc0a0cfacab930ea1f7a1a7ab9d1c8b9c35a0fbaa6c24fa20421ddbaa04280a253a2294ab192992232a19a3ab75294e227499d7abe3291b25671c5fabb02acd27f824dcaa762b4129d127d2aa1f2c762a062938ab5f2c132b6d2952ab822c772b1d2aa0aba32c962b832aa3abda2c1a2cec2a05acd42c182ce72a16ace22c1b2ca82a00acc42ab129092922aaac20c41fd91d67a589958197149408a339922194b48942a1328ff6924f9205a0878bbf904b8f729f6d0c2d1218142a9f77127a18cf19ef9dcf14941ba41c8b9d5f15a11cd61d339d38156f1ccc1da89c0e15a91bee1c999b9c14e41a571cc19a7514b71a1e1c689a24147f1a391c5f9a0014491a141c269a7513361ae71b349afd12f919af1b089aa112ab19541bbf9963123b19fb1a43991e12f718771a0799f4118618031a7c98a31130187d1918985311ab170519679718111c17a618c796a4105a162c18389662101216d9177a952310de159017ff943a0fa4151817de94280fa614b2150794280fa614b21507944d8d761c0e1dd8a34d8d761c0e1dd8a3c31c2322e924ccadc1180f21f62180af6c17f420e121aab05a15341e541f98b1e895c813a71436b283994a941595b6b2d59b959d9a9ed0b2dc9c8f9f78a058b2419c6ea03ba157b1b69ceaa0e7a175b0e59c2fa13aa2e3aebc9d1ca25ea326ad2f9e4fa367a4f2ab559d79a37aa4e5aa8319cc9f45a197aa2124ae1a919b18ab092871214f1265ab28297524371ce6ab062a19266321faabfc2a1128ea24c4ab822b5729c527acab352ca42a122991ab832c5d2bf929b4aba82cef2b542ad9abd12c152cb42a04aced2c292cdb2a2bac2d2d5f2c3b2b48acf22c2c2cc02af7aba9299828762776a9cf1c061b761587a56f99779b939b47a20898139a3f9a3ca1f592b693fb9273a0e78d408e3d8903a0fc82af102c144c9ff70d9917d6183d9e7712f0198b1bd49d40146a1ba61c459d6b14e81bf61c969c5214621bac1c549c2514fe1a691ce49baf13911a2b1c759b4a13751a1f1c209bdc121c1ac41bb79a7112c719271ba69a4f126c19e21a659a26122419a61a2f9a0612e718691af69929128e180b1ad29906124e18ce199899901137189819fc984011b31744194f98aa10e516b5180497f50f2016ea175c96830f0916b617e695d80fc7155e17a295790e32155216c3952e0e161471158f942e0e161471158f9400003594dd951a9500003594dd951a956b959090191898aded96151bd81dc7afc79a46129e19c6b0d39c5a995d9a89b13c9fe89e14a026b292a0d4a0dda2abb294a015a20fa3b2b2e1a0f0a223a453b2c7a04da355a460b1b9a079a36fa467b09da038a48fa4e6ae72a02da409a588adaca093a492a55fac7aa0f8a4a9a51eabdf9fbba49da556aabe97cea2a9a430aa3e224f972aa1ccaa0928d721df116eabc5292b26cf2105ace52a6d2855254cac9c2b7229e12746ac362c602aca2834ac782c2d2b9a2939acb82cd22b352a3dacef2c1e2cc52a54ac332d622c0f2b77ac682d992c7b2b7bac9e2c9a2b122aa4ab7727d225dd24b6a81d8d8897ef9a67a52e9a449c129c1ba29b989e997699d2a0c2962d9881983ea07f934691ea8f0aa0808dd00d3a0fae9fad025415c816a69e83106019011b289e86125a1a311cc79dca125c1a121c109d06121a1a491b879cda11cc194f1b4e9c31128a19e31a0e9cc7117019e81ac99bd9113019d91a689b751112197f1a079b1a11c618291aaa9add106318a2191d9aa6102e185319c6996e10fe1710197e991e103917bc18bc98980fd016441844984b0f69160718b297770ebb1546174697060e0715c516c596290e01156216b6965f0ed014c81569969d0c5c13d3141296d5097f1088115e95d5097f1088115e950000c286a0880c940000c286a0880c94019c85107e1189adc09d4998c092c0af399ed89bad9cb5b051a0cc9f449f6bb126a13ba129a2ebb1aca1baa2cea357b22ca2e2a3aaa47eb265a2dba4d1a529b2aaa26ea5eca542b18ba2faa467a557b0f1a1eca46ba501af9aa1bea445a589ad5aa1cda464a552ac55a1aea451a549ab75a11fa5e1a547aa26a14fa527a6a1a9a59c03a45da56fa97121a199b6a00caad7279023dd1c35ab2d2aab278f240eac8b2b952901286dac422c862a0e298dac862c532bac29a4accf2cf32b522aadac092d332cbc2ac4ac512d6c2c3f2b05ad492d552cf42a98ac112bdd29c928f4aa76228e211b2079a7119a399dcf9d20a46a9b329d4a9dc1a286995e9b539ceba1be97be9894985fa14b95b8949b9404a11692ea8ded88b2a07a8e520dec0e41a073823b14a5168a9ff90d39189819999e67104119ce1a169ea9104419e21acd9dc0103c19721a409de11017192e1ac29c5e109e18f7195c9c521081187d19bd9b101039182b194a9b341002182419a69af10fac17eb185b9a730f4117ac18099a180fe2166c188099d50e8a1632183899d10e2c16f317f298500ed5157f177b98a10d3e1520171598550dbb1425167897eb0c56144d15e896ae0c9313bc149396c60b08120a146e96950cbd112214b394950cbd112214b3940000e2107513e7940000e2107513e794009b9e10a5119aad459cd7112b19eaaf949eb69b8b9997b065a0959f209f2fb124a104a1fda18bb185a14fa281a3e1b173a264a30ca5fab160a2a8a405a5b7b1d0a25aa5e0a523b115a360a583a676b0a8a240a5e0a5fdae2ca2f0a4ffa588adffa1fba4b5a577accfa10fa5daa571ab91a11ea5f5a530aa32a135a51aa69aa91aa144a529a646a95f9f85a471a51da9ef1aeb9f90a22fa930263121391d50aabe2911286425c1ab7f2bae2949286bac432cb42a5a299bac8f2c7f2be529cbacf02cfd2b452ac4ace52cd52b2b2aa5ace42b492ae528c9abd6267b255d2406a9ae15540b6697f4a4a19b379c7c9cf0a25d9b2e9c159c52a2fa993b9bc49ba3a190982b991b99daa05f969e95c0958ea02794b28dc78840a053913d0d8211d99f708a30158416249f7607fe16cb18829efd0b9e17cf18f49da10c27186319af9d110d3c181f19989db30d3e183819209d460dd317c618869ca30d33175c18229c550dae165b18729be70c3516a217f99a1a0dc7151517fb99d10c6515ab16a299980c29155b165f99750ca91416162499340ccc14ce15b598240ca41401168d98f70b7414a9151b98780bc513e6144497590b8a137c14d096840bed1253149196760a7b11ba12879788097a10e911b09688097a10e911b0960000d28efe8e05960000d28efe8e0596369f389e909f5fadd69f639ee79da4af8a9f919b929c7cb087a0679f099f1fb1d1a0f29fc2a075b1a7a08f9efba0b5b109a1999e23a1d0b15ba10da23da48cb1c6a17fa300a4e6b0d2a1c8a338a430b0dfa1a3a426a58bae51a2c2a463a555ad70a22da5f6a561ac7fa279a562a649ab0ba26da50aa61daaa0a124a5cfa556a985a121a5c7a5d1a87da130a5d6a589a8cba00aa5e7a547a85c99cda119a482a88e21571a059655a9a22777251123b7aaa9297028b026a6ab7a2a69293b281dacc92a6d29572816ac172ad128862773ab7927a9256c249da9501ed11ced1a0fa6fb9ad69daf9e05a4d29cf79ede9e24a2ab9b9c9c979c49a2529ad59a389bfba1e3983799379979a1af97b79627971fa14395b3920492bea0ab92f40670083ba03a8f7213d8141aa0208ada15a216c99f4182d9158a17c39e050277167117c79dce05c516f217949d830854161218399db8095f168717d49c72090116ca17719ca90abd156217359c5c0a7015f716aa9b390b20159116f69acb0ac6141c167a9a790a7214b615d499690a3b14fa1483991e0af11324154099670a5713c414ac98e809df1272142e98c1087111011381978a08b610fc11c7966e07560f731015964505f40d7a0f08958206000eaf10c7958206000eaf10c79500008189a202ef9000008189a202ef90ad9ee99ca39c56ad1a9f9f9ce49b41af7f9f089d629c5bb02da09b9ddc9efdb082a0cf9faea06eb1d2a02ca0e9a0b2b1c9a035a014a1d0b11aa11ba138a28cb1c8a16ca3fca3e4b0cea1aba32ba414b042a293a417a595ae8aa2b2a45aa54dad4ea2c6a42ba569ac31a21da5a4a52cabd8a119a5a3a500aa7da1dba463a531a966a1cba460a5b0a86ca1eea49ba53ca849a1d0a4b5a5baa747a1c7a490a53da7ce9ff3a3d2a447a7e596f09f71a190a7011d298e8095fca88721ff1ddb1ceaa87a22391f581d94a87920701b9017d9a71a147297d09a7fa5139bf49c269e42a3659ca59d479e9aa2769cd79d049e1fa2619be99ca39dbca1539a959beb9b60a1fc98eb987099fca03b9825979597eaa04e9678944e948aa08a942b8d9d8e33a0b7910b103e1100a0a68d2a145b156c9fdd893c15a016849e9e86921516175b9e0d82cc15ad16fc9df60182152117b89de0014a152f168b9d40051115f8152d9de304cd14b115f09c7d047c145a15a49ced061f14ef14239c9f06941385144e9b510611133814949a8b0375128f13e3994d03df11eb123099f504e9105c1295988a04ba100f12039870048a103911d69720068e1055114a971c06011093109097f603b20e680f9196e5023309100bd495e5023309100bd4950000988d1590b5900000988d1590b590c59ed09d30a01eadd89f599f339f41af81a009a008a073b0e2a058a058a104b1cca074a195a14cb1cfa0f0a0e0a193b1caa019a0ffa0bab176a1caa22da477b1c3a108a472a4cdb017a214a486a404b0c7a267a4eea461aeb1a289a4c0a4fdac50a253a4eda41fac63a26fa423a5c5aadaa185a409a5d5a98ea159a4d3a405a91ba12ba4a5a477a82fa143a4cda4eda722a139a4cfa45fa72da11aa4e4a4b0a6e2a0e4a3aaa4f2a534a032a339a46ea58c9f2fa291a321a52a9f70a1e6a2bba48f9ed4a022a269a4339ec2a048a2f5a3029e94a08aa19ba3939d739f16a04ea3de9c859d7a9e50a3329c6a9cb19c97a2bf9a419a129b23a26e99fc974798bca1879847967d9651a1ae97d294be94fea041961e937e94bba01a95b790f79165a0ec933b8d988e0da005925706f707579f1291600c820dc59e2d90d20e50105c9e048f7e10b311cd9dc08d1f1046115e9d758cef10e410fb9c188c7d1083106f9c91892a1063111d9c1689bf0fd70fb39bc586660f760f109b8886000f060fa59a24869a0eb70e5b9a8e83500e7a0e229a1481360f310edc990281ce0eaa0fa499ef00880f74102999e500170ecb0ed098a102f40ef90f4298e300dd0d820f03984e02970caa0c7f96e900e708980c8d93e900e708980c8d930000bc09bf8226910000bc09bf8226910d9d229b659c10ad6a9ea79c9b9d42af579f019d1d9e57b00aa0109f59a0fcb032a0789f83a03cb1d9a0d6a0d1a186b13aa1f0a032a3b5b181a1cca121a478b1cca128a371a4ccb061a275a487a51db057a2c0a466a551aee0a17fa423a5e6acc4a126a4c9a4d7abaea136a4eaa47aaabea16aa4e2a4a6a974a144a4bfa4f0a830a124a49fa453a811a10aa484a4d1a7a4a060a325a4f9a667a0cea2c3a327a641a091a275a3bba512a0fda12da357a5fc9fa2a185a219a5fa9f3ca1e5a175a47e9ffda093a1c0a3239ff0a083a13ca47e9e6ca0c4a0dda3999da39f05a0aca3d09c999d1c9e21a33d9ca39c639d91a2359b569b389c20a2409aac99399bcca11d993b98b098aea1a0980197a19776a182978d94cd9514a14296579209948aa0ef948d864e8e23a000933306160806a0d7915f0fef0dc99f3790e30eb010619fca8f81103d10ae9e948f3d10b80f159e428ea60d420f899df38d4b0d0e0c289d798dc30c860bc79cc38c29098d047b9c4a8b9c082104df9be18a5708e903359b848a3908c203769a628a1c089803f3996b8a080880039399478ac00762032d9924897a0734038198af8858020683109875884482dd825897108995861688fb966c87758b198ef1967889458d678d41957889458d678d419500003c07e1827a8e00003c07e1827a8e299dfc9a5b9cf0acdf9d649c9e9b00afa69ecd9c379c30b0929f709dba9ee5b048a08aa080a128b186a0bea0c4a167b1dda0afa10ba386b16fa184a20da44cb166a1f7a255a4afb09da1d1a367a4b3af99a133a456a40aae7da109a435a4cdac9ba1b0a36aa49bab77a11ba484a431aa34a1f3a369a424a919a1d2a35fa46fa8cfa0b2a356a40ba8bba08aa344a454a798a077a344a4f9a67ba065a382a483a668a047a343a4f8a544a0d9a2efa38ea50ca070a25da3fea4b09fcea18fa259a44b9f37a1e8a11ba41b9fbca056a109a4a09e15a08ea0ada3d29d509f16a04fa33b9de89dea9e08a3709ce99cba9dc1a26d9bd29b169c59a2269ad499959ab6a1209936989d9869a15b98e196439733a1ee9663944594f5a0fa954992bb91a7a0be943790778e61a0e293d48c248e07a08693938cc987aa9f9692bf855087f89e2c925585c986779e4a91fb845f86129e6390ef8a708c749d0d90658a1b8c0d9d838feb8c528e819c188f9d8ce98d379ce18e648cd88fb59bee8d218c7e8f5b9b4e8edf8b348fd19a638d5b8bd98e7b9afd8cc18a648ed299fc8b118afa8be398bc8b8f89228b3198078b4789ea8c1f98fc893e89f58c2a980b8a478b5f8e5698aa8aaa8aa48a23978f895885f906f6958f895885f906f6950000ed10901009940000ed10901009949c9c0e9d8c9fafac619d349c539bbaae7d9e459fb39d0cb0f09e1fa08c9ec3b0db9e69a064a008b13b9f8d9fa0a03cb1f39fb3a0cba05cb142a0b7a0dda119b197a01ba2a4a39eb05fa1d9a374a4acafe1a13da4d8a428ae20a251a4ffa4dcac23a281a4fba478abaaa1f2a370a416aa79a10da498a40ea942a182a375a465a8f0a073a32ea4caa7cca04fa325a4b1a67ea0c2a2b5a308a630a064a244a37fa518a00ca23fa309a5d39f9aa1bba283a41b9f28a1e1a126a4bf9ee7a08ea1d3a3a69e89a01ea19aa37d9e2aa0a8a053a31d9e969f82a057a3d69d3f9f18a092a30f9d0a9eb79e99a2599c299db69d73a2449b1f9b279c08a26b9a9999699abfa16c993d98b09852a1b198fd95969743a1f497b594e89500a17696dc924b94aea08b955192b19156a0db942c90499108a0a694c08fe9907c9f1994448f9790009fb893b78e4490809e5f932c8efd8f4b9e1992a68d2a91a19d83913b8dca90389d0391c18ec891e69cae90d58f7b927e9cc88f2f8fe291149c5b8f1b9070924d9bfb8ee78f4a92239bc48eb68f1e92b49a798e548fd8920b9aa48deb8e5d9268997d8db88e2491a698558db88ffe905298428d7e8fc6908797198d258f72905b97c58bb78fe9906296458b17909c907594458b17909c90759400006210cd0f9c9000006210cd0f9c90299d7c9e17a054ac0e9e609f83a04aae949e43a1c2a1a0afc99f64a1dea198b0e79f0aa12ea2d8b0e79f52a188a20fb1759f68a1bba11db140a06ba1cba2eeb08aa081a33ba473b0c7a0e2a2c1a35baf8fa19da351a4e9adbea1e1a38aa4adac6ea13da451a446ab3ea10ca478a4d7a920a10da47ba48ba8d8a049a34da4c9a7a0a039a351a4f8a67fa01ea34ba463a64fa0eda234a4c4a520a0d2a2cfa32ca5da9f70a2b5a3b6a4c89f20a258a353a4759fcfa1f1a217a4229f33a134a2a4a3a49e80a05fa193a3389ebe9fa0a044a3989d839ec69f25a3f39c6e9d6a9e02a3579c6c9c319d6ea2eb9bb39b7e9c19a2fd9a049ad39ab8a1fa990d999e9956a14d992f98929803a19998e2965d97f0a032989395be95dda0169747946c9597a065963d92f19353a0b795bc91669308a075955291cd92689f239563921794ee9eb0945d93b0947f9e7894e5926494179e8193a693ab95c49df39222940a966b9d629257944d96e49c38927294cb957f9c57910194e895269c5b913b93fd95af9b2a918793a495fe9ad090fb924a958e9a419086925495139a838f2392eb943799258fe8915d94a698238fc69140945798958e24919993c797978e8f91099334972b8d788f19908595298d348f098f5194298d348f098f51940000c016c418fc950000c016c418fc95f49ce0a004a267abf79eb3a2a1a388ad699f4ca4a5a4c0ae0ca0fea32ea45fb04e9f26a15ea0c3b0c79edc9d3f9aeab0bf9ee59d549de5b01e9fd19d419d90b0339f53a0f99e24b027a0b3a00da10eafe7a03da200a39cad17a1b2a2aba385ac82a059a2aea213abe6a083a283a298a93ea11ca346a498a85ca156a370a4cca7e0a039a351a44fa69ba0fba2e3a329a53ca062a2a5a392a4e89fe9a118a33da47c9f91a1b0a2fea3429f4aa15ca29aa32c9f08a10ea23ca3a59e95a083a1eda21c9ee29fb8a0e1a2889d289f03a0dba2179d059e249fc5a2bb9c019de39db7a2429c199cbe9c70a2999b809a619b30a2b89ae1985b99dfa1eb99c5965098c8a157996896b296dca1ca98ed945296b5a17a989594e2954fa109984694d09630a16c97dd948b97dca0dc96419511988ba04a968c952a981ba0249694963c983e9fa0956997be98b39e18959a97dc98529ebc949297de98ae9d7094f196d298129d229452966b987e9cd7933f9664982d9c2993d0951698419b9d926995b597579a4d9267953d97b899d19111953b9726990f917f945c96d298d190469405965f9874909b936395fc977e90df931a9538979c902c93f394a896b290b393c39414964d90ba93fa9442961b8ff791019355951b8ff79101935595c396279b609c8ca4c396279b609c8ca4f69e73a428a5f7aa93a092a530a647ac12a1e5a632a88bacb6a1f3a692a8fdadcba015a419a6fdafea9f8e9cc89d85b0139e41939b945ab0bc9e669c8f9d34b0159eaf9d1f9d7cafb19e339db99c8dae7e9f4fa0959f37adbe9f64a015a021ac9a9f5aa032a05faa8b9f55a0dda015a9bc9f6da145a1e7a757a036a2e1a252a678a0a0a2dba356a571a07ca2c9a3a7a45fa020a25ba337a439a017a250a3fea301a0cca100a3a6a3889f82a1a4a2f3a2249f38a153a29ea2b29e85a0bea14ea2469e1aa0f4a006a28f9da29ef89fc8a1f49cc99c229ec4a1449cc59b819c91a1659b6e99ec9aa6a1b89a9798f098baa14d9a9197d098cba18799a094e295fda132995c94f793dfa1b09804947293aea147984b93b6944ca19c973794359409a12c97c7943396dca0d2965e95ef9699a07a967596bb984ba00e960098c198959fdd955a989499b79ee39501988899029e7e95ec9778998f9d2b95b8970a99f69cc8942c970999819c8c9423970e99439c3e943697c798c79bd993dc96c098109b879387967f98729a2c9322963c98d6998f92ac95d3976599f9911995fc969f98f490c89437962c98719097940f961198799051945a96089869908794d99586972690269403960998e9909d94af960798e9909d94af96079888959a953398c8a288959a953398c8a2ff9cb5a1d1a2a9aa5c9c1b9ffe9e0dac05993199b79890ac55950a15611969ad759958968a9aa8ae119d9b9f94a24db0289e029f69a268b0a09e20a197a237b0409df29f10a14faf469e89a0e9a014ae939e7fa0d09fb8ac179e749dd99b29abc19c68998191c3a91c9e319e809df7a80aa0cea178a399a770a0d2a232a4e9a58da043a36aa499a474a0f1a22fa4a9a345a0a9a20ba4b6a223a062a2b8a314a2e19f16a25ea3cda1899fcea102a339a1c29e12a120a2fda0f49d36a00ea1c8a0729ddf9e15a09da0cb9c6e9dde9d77a0509c509b239c42a0619bc7982b980da0989a299368912ba09d999b094a1185a09798d9124b14d4a01d989f14cf1516a1d9975112a01586a16297fb115415cea1d596900eed12a1a1b696b5075f0f24a197965c8db491eba0b79682940a97cfa00e97a097bc996da0c796a6989d9a5c9fc89663995f9b569ea5969499939bba9d9696ce99789b3b9d4896b499599bc69cfb955199309b549cb3952a99179b199c38952499119b9a9b1695f398d19a139b7f945898029a7f9a3a94eb976099d699bf935c97ba982699d892a1967b98ae9840922e96099839981492d595ab973198cd9141954997a097ce911895ca961b9705918394a295d996b390e7937695d694b390e7937695d6942b8d4e14ce0e53a02b8d4e14ce0e53a0f69c27a351a4e5aae49c8fa1f7a279acda9c3ca24da3b6ada19d7ea3cba43baf3a9f08a594a634b00ba0eaa40ea6acb095a028a660a7c7b0dea03ca7e7a77db008a032a560a501b026a038a309a57faeaa9e5ba124a2a7ac6a9f2aa103a275a9a3a025a38fa4a5a6b2a081a37ca471a33ca0b0a37aa425a292a067a451a51aa2cda08aa47fa5c2a195a07aa486a544a13ba0f1a3eaa4aca005a0e1a260a474a0629f1ba2bfa3e49f019f65a19aa2959fae9ec9a017a24f9f459e03a0dba0179fe29da19ef59f6b9e7d9d7c9c409d409ed49c869a6c9bae9e0b9c4e95da96189f019a7810c914f09e5f987719e91bae9f6297c21abb1c9fa0b996911a9b1c5fa187979919251bfda16d98cd165b183da20899791140101ba2c1989c924f9477a18e980898ac9804a1bb985599679aaca09d98479a129c3ea01098829a279cfd9e5c97bb9a4c9cc39d1297839a3e9c499de6967f9a5a9cd89c7d96179a189c679c3a96f299019c019ce0958399799b339b22955599f39a719ac894f898bc9a069aa394b798699abc9965946c980e9a6c99ea93d6975599c0986d93fd96b5985a98b892b39660980898209241964198d8975a91e29501985c976b91e7957e972c97a3907d953f973f97c7902395f396f396c7902395f396f3960414021e4d1fce9e0414021e4d1fce9ebb9c05a369a4fca9009f7ba4dca53aac249f2ca632a755ad75a080a77ea8aaaeb3a020a8c4a87caf74a1c0a81da929b02aa189a8f3a86bb01aa13fa87ca84db024a04ba6f8a684afb09f3fa4b0a425ae439e20a08ea083acbc9c649c589cf9a94f9a6a0e1416b6a60799de130a1518a41a9c149cc49e74a06ca0cca21ba4b39d62a006a406a5419d26a0e0a3efa4999d28a058a3eda4d49d25a064a3d6a4919d30a033a3b3a4e49c1ba0aea260a49c9bfa9f49a2f4a3939b209f0fa1b2a28f997f9e11a07da19d99549dc69d709fa499f19b4299c29ab899589916144515da9abd95bb1c991d879c6d91f21fa8201f9eb284e9202f2258a0bc0abc20bc213ea205041120eb208fa36d8cfa1db71ee8a305952618c11839a35498a592769525a24a98fa97a4994ea11698df990a9cb6a07598239cdc9d31a093989e9c7a9e899f5798709c459e759ed997239c9e9d9e9d5497d19b4b9dd29cdf96349be29c4c9c2b96eb9aac9c719bf095769a6e9ccd9ad195f999449c4e9a0896cc99219cdd99f195b299d89b81990d9671998b9b4b994795ec98d19aee9821946298169a8b98a9930898ad995f989e922a97729928986892a296da9811973792af9648983d96ea90eb950b9862961b9118953d96da941b9118953d96da949c11971d011e019e9c11971d011e019eed9c6ca47ba5eba869a09ea633a8b1aa52a154a866a94dacffa1e0a816aa08adb7a252a9d4aa9aad3fa3d4a955ab15ae8aa3faa9c1ab70ae98a270a904ab5cae97a1fca704a916ae729dc0a03ea1a4ade609cd21e1243eacab129223442516a8d895dd1c411fdca1a29b6b9c8e9d699ee99ca1a1bea27e9c129f2da363a4bc9b09a0a3a4aea51b9c38a09fa485a5509c3da086a486a5209c1ea05ba439a50a9b05a009a4eaa4f898bf9fb4a3b1a4f3975d9fd8a24ea43b91949e1fa27ea3f30a509e29a145a20a0be29ca29f64a08114079c609c999c5c186c98fb104415cb19bc8b3e206e21471964143b23a324060df2188d24fa256c9da919ac24f92580a24516a1224824ada48a8c421dd91e95a43197c8917193b8a31799e79a639c20a25699f39b719d00a1b8998f9c5e9f62a0269a1d9d6a9f369f4699b09c549f659e3c98629c409ebf9ddb971f9ccd9d2a9d2597c89ba49dbe9c9796489b4f9d529c1b96cb9ad09c919bd795549a679cb09a8395ec993a9cfa995395b599f29b8e9951955299929b4a99ed94f898cd9ab19874947498119a22981b9420989e998c977193df97579911971093c5971899f596b4925c97db988696c7921a97b7982396ef919096729881955d927d9507971d945d927d9507971d940000dd1acd1c12980000dd1acd1c1298489a43a142a3a4a60aa195a7eea8dca982a1a7a8eca923ab22a22ca96caaf1ab8ca25fa9c0aa48ac16a3c4a93dab72ace5a2b5a930ab6eac25a3c4a969ab4facd4a229aaf5ab25ac8fa2b2a930ab81acea0bb61edc2119ab24973a1d6713bea8ada154a6ada82fa689a045a797a8a3a4d1a0d8a575a70da385a080a5e1a69ca2e6a067a5bba691a201a10aa57ba6d1a166a0dba446a628a177a0d0a44ba6b6a050a0a9a4fba56da012a074a4bca5869fbe9f2ea45aa58b9e219fb9a3fea4f99dad9e2ba382a48d9cbe9ef5a21da4049a339e45a271a32f0aa09c35a02ba1491dad95091a7d1c54234f1cec25e2276724b1206329152b0310c31f9c280e2a39a66e16ec228924e8a69e9723898a0af4a4d09a7e9dce9ebba2e399149e28a0bea0de991e9e10a0b89ffb99f69d07a0ea9e6099a19d919f5b9d3c99359d0e9fae9cbc98f89c999e3a9c9998c19c709e089c6198899c229e699b1998429cc09d1b9bc697e69b7d9dc99a47974e9b199d369ae196cd9ac79cbc995896469a809c5199e595e3992f9c109989957f99df9b90984e951999369b1b98fe94dc98b09a7897c0948498469a31976d945a981a9afe9611941f98d2998b9689930798cf99f896f4913a978e991a965f92ab96a49805955f92ab96a498059500008f18951a7f9100008f18951a7f914d9d04a422a567a665a03ca7a6a8dea818a15ea881a9eaa9ada1b8a8f2a98faa3aa228a977aa06ab35a264a9b4aa16ab40a26ca9dcaaf5aa91a295a9ffaa29aac7a17ca890a92aa86a9b7da254a4d8a37f90c098ce9b8d9f2d97ed9c0ba027a1739f61a39ca521a4aba10ba604a8e9a432a115a6a7a712a480a091a51fa77ea349a03ea5a8a6d0a24da0e1a436a642a258a0bca4eaa5c7a178a0a1a4dfa563a142a080a4a0a5fda02fa083a4a4a5c3a038a05ba46ba57ba0df9f1ba445a55ca0ee9e8fa303a50da0d49ed8a2c0a4929f3d9fb3a242a4e49e159d84a2a0a4999e6c9a72a46ea505a0149e51a221a457a45e23622a642c93a8711c9a2560276ea61e9a1da4bea5e9a19e987a9f03a26b9d8c9d2ca0c4a1b79d2f9c7e9f7ba19e9dc59b3c9fe9a04a9d779bc59ecca0039db79a759e6ea0649cb29a459e2ca0ce9bff99cb9d8b9f549bb499819d289fd09aea98089daf9ec09a7098bf9c4e9e7f9a0398459cbf9d2c9a6d97c19b419d8999cc96129bd19c30999596b09a859cac9851962f9a329c6e98ec95de99f39b33987d9564998a9bcd97e0941499f19a31977994ca98b09a1a9722947898469ad496b6932a98de998e9699930198839928967a92ed9610996995b2924696c597e693b2924696c597e69300000919e319739200000919e3197392bc9e6ea5e5a61ca682a099a7a5a81aa808a13da835a9a4a832a17ca893a90da9a9a1c8a8e3a944a99aa1c2a8e7a91fa95ea19ea8d4a9c2a806a12fa843a907a8479f30a6f0a7f8a51f9d14a44ca5b5a4789bf4a10ba4f1a3cb9cd0a281a400a452a00ea5c0a6dca415a1b4a5b0a7a3a46da071a53aa7c5a33ba042a5caa6efa22ba001a563a66ea21ca0b6a408a6d0a153a08aa4bca570a15ba058a491a549a142a035a468a5faa01fa011a43ba5a8a0b09fa9a3f6a47ca0249f3ea3c8a42ea0b29eeba27ea4d29f9c9edfa268a4679f529ea4a23ea4dd9e5b9eb4a261a4089f049ea4a232a47d9e2d9c5ca020a25e9de5922498329d0e9bbe81528cff904b95699211984f99399657996e9d339f69990b9ab79e5ca0da9a199a1c9fbca07c9b0e9b1c9fa3a0719bab9a909e4da0419b249a089ee09fdd9aa899b49d829f679a2b99709d309f3c9ad5983d9dca9e1b9a9d98049d829ef6995c98c69c349ec99928986c9cfc9db299d1972b9cb89d8e992a97959b729d9d9991961b9b309d3d991396939add9c3999dd95659a8e9ccc987295d499449c979803956c99e39b2a98b6942b99599bf1976094c198b69a6c970c946998269a6096d3933c98b199e695019300985299b6940e9358975c98d2920e9358975c98d29200000f19d919499100000f19d91949910b9ef8a442a672a4c89f9aa628a80da651a042a77ca8f1a670a07ca7bba85ca798a090a7d1a846a761a05ea7a9a801a747a015a77ea89aa63ea08fa638a80fa621a0d4a5b2a764a512a000a59ca6c9a4809f57a4d1a537a4939f62a4c9a531a4eb9fada423a646a4e69fdca450a6eca38b9fdba45ca61ba3339fb9a41ea654a22f9f93a4e5a59ba14d9f72a4b3a52fa16c9f5ba481a5c3a0869f3ba469a5afa06a9f1da44ba56ea04d9ff7a318a553a0e89e99a3f6a437a0719e60a3c1a43ca01e9e17a3aea42ba0ee9dd8a28aa40ba0ab9d88a267a4d79f769d48a249a4a29f4f9de9a10ba44d9ff79c86a1cfa34a9f199c8da08fa2349e9599279e33a04f9cc495899bbb9c4299aa95689baf9cba982698cb9c6b9e5399aa991c9e2ca0c19abe9aa19e8ea07c9b179b529e68a0999b349b239e1ba0509b8b9ad19daa9ff19a9d99589d129f469a3099129dc59e029ad698e69c679e8e997b98a39c419e6d9905983b9ccf9d3a997997c79b8a9d1299f896579b2f9dee98a696f49ae79c90987d96a89aaf9c72983d96439a709c4d98d995e299169cbd97729577997f9b9c96ff940c99f59af795bc94bf98799aac955c947d98119a709556948698c299e59496935a98f499c2952a93bf970f991f952a93bf970f991f95000000000000000000000f19d91949910b9ef8a442a672a4c89f9aa628a80da651a042a77ca8f1a670a07ca7bba85ca798a090a7d1a846a761a05ea7a9a801a747a015a77ea89aa63ea08fa638a80fa621a0d4a5b2a764a512a000a59ca6c9a4809f57a4d1a537a4939f62a4c9a531a4eb9fada423a646a4e69fdca450a6eca38b9fdba45ca61ba3339fb9a41ea654a22f9f93a4e5a59ba14d9f72a4b3a52fa16c9f5ba481a5c3a0869f3ba469a5afa06a9f1da44ba56ea04d9ff7a318a553a0e89e99a3f6a437a0719e60a3c1a43ca01e9e17a3aea42ba0ee9dd8a28aa40ba0ab9d88a267a4d79f769d48a249a4a29f4f9de9a10ba44d9ff79c86a1cfa34a9f199c8da08fa2349e9599279e33a04f9cc495899bbb9c4299aa95689baf9cba982698cb9c6b9e5399aa991c9e2ca0c19abe9aa19e8ea07c9b179b529e68a0999b349b239e1ba0509b8b9ad19daa9ff19a9d99589d129f469a3099129dc59e029ad698e69c679e8e997b98a39c419e6d9905983b9ccf9d3a997997c79b8a9d1299f896579b2f9dee98a696f49ae79c90987d96a89aaf9c72983d96439a709c4d98d995e299169cbd97729577997f9b9c96ff940c99f59af795bc94bf98799aac955c947d98119a709556948698c299e59496935a98f499c2952a93bf970f991f9500000000000000000000000000000000cd186c20252336a77523a0270829ccaa62246f28572933ace124eb28ef29f2ac042534290f2a99ad372515292e2a77ae92242e28222936af5c24cc279c2804affa249b2887290faec62486286b29eeac5823f32621288fabad22252434256cac781b28a509a942aefb24a9254f24e7ab9428b3298329d1a9ef28b529aa29d1a96b291c2af729a9a99129e929c7294da90b28ec9adfa603acb62682a63faaf6aa202b692a9c2912a85c2b4d2bb72a0ea9862b6e2bb92a64a9a22b8d2bdf2aaca9eb2bc52b072bd2a9022cad2bdd2af3a90b2cba2bd32aeaa9382ce32be72a1daa012c6c2b872a8ea9c428c128462883a719210e233b2356a21a1a7f1eeb1f629fa7171b1d0a1f049e8f14d31cb11ea49d9888e0084b10559fad91e798c79a16a09c18f41e3b20af9dd916341dc11e4d9b7317241d7f1e009b7016b81cf61dfd9a2316631caf1dee9a8815231c6f1d9e9a3b15d01b041d409ae114621bc11cee99b614fd1a8f1ce69970149a1a481cac995414251a191c3b992614f119ab1bd498f7139519451bb198a5134f19e51a92982f130d19711a35983a129518f0197097d8111a18551967967111f3173219f69523119817ff1877954f11a917fc184f955c119417d5182695cb10331793187d9576122f17111906960000000000000000cd186c20252336a7cd186c20252336a77523a0270829ccaa62246f28572933ace124eb28ef29f2ac042534290f2a99ad372515292e2a77ae92242e28222936af5c24cc279c2804affa249b2887290faec62486286b29eeac5823f32621288fabad22252434256cac781b28a509a942aefb24a9254f24e7ab9428b3298329d1a9ef28b529aa29d1a96b291c2af729a9a99129e929c7294da90b28ec9adfa603acb62682a63faaf6aa202b692a9c2912a85c2b4d2bb72a0ea9862b6e2bb92a64a9a22b8d2bdf2aaca9eb2bc52b072bd2a9022cad2bdd2af3a90b2cba2bd32aeaa9382ce32be72a1daa012c6c2b872a8ea9c428c128462883a719210e233b2356a21a1a7f1eeb1f629fa7171b1d0a1f049e8f14d31cb11ea49d9888e0084b10559fad91e798c79a16a09c18f41e3b20af9dd916341dc11e4d9b7317241d7f1e009b7016b81cf61dfd9a2316631caf1dee9a8815231c6f1d9e9a3b15d01b041d409ae114621bc11cee99b614fd1a8f1ce69970149a1a481cac995414251a191c3b992614f119ab1bd498f7139519451bb198a5134f19e51a92982f130d19711a35983a129518f0197097d8111a18551967967111f3173219f69523119817ff1877954f11a917fc184f955c119417d5182695cb10331793187d9576122f171119069676122f1711190696d314ec1cfd20c6a8d314ec1cfd20c6a8c5223327a72862ac9d22322741284dad1f244428262991ae272431281e2995af41243328cd286bb0a6236326942793b0bb22ea25ed2671b08e22a2259a2613b0b42190247e25f7ae0420ce211e225bad33165aa118a45dac7b9859a7e3a87dacb51f3e9e25a28eac9925f4258f2514ac3c286d287228e4abfe28b328262878ab3729db268b2434ab7928609cfda512ab9c2807a01ba701aa342a8327682476a9ec2ac829e02809aa612bc32aff297aaacc2b0d2b2e2a7baa002c5e2ba22ac8aa252cdf2b162b3bab4e2c052cf82a41ab5a2cf92bea2a2fabd02b2a2b342a71aa4128f127202738a8c61d04204520a6a3de0f521a321ce5a09711011a7a1b69a0f20cdf124f1414a05f888496f6966f9f20889598d6994b9e2213a9178619a89d4e158f1cfc1d909cbe156d1c011e439c9415381c5a1daf9b38159d1b041d019bcc14791bd11cbb9aa114421bad1c889a8314041b7e1c089a7d14c21a771cd6996d14b01a4f1ca2994d143c1a141cb3991914fa19c91b3a9964138319341bf898b1121119961a7d984b128a180d1a3e98c21145187b1996978c1107182d192b97f710961712198396ba102917c3181d96b010551779187995d610ed16301820950310b7160818739461128a1733193e9661128a1733193e962e94328dff1c55a92e94328dff1c55a99f207225e5262cad2e208324a52524ae8f205525a026bfafeb20a9254e2680b0482051242225feb0b61eda220f2449b1021e66217b2253b1531c581f5620d9b03019b61b85192ab0e418f8112493f9ae060df19ada9db2ad1c9349a027a1e7ac9c0ccb9e13a04eace21db710a391d6abf923b821122105abdc26e52407237eab8d283f241c1fceab012927241919f8ab92293a256f1f8aab0a2a6927c024f0aac92a06298127b8aa922b152af728fdaaed2bd02ace2913ab132c272b2b2a6aab512c792b612a6eab832cb92b9a2acaab8b2cb42b9c2ac5abba2b9f2aab2985aa672699252825c6a7d41464180417e3a33794208fc50939a2e38f6d8e400900a16b8dd390528f0aa03b8bb290298f9c9fa10709079508059ffc10d0157f171e9efd13771a261c7e9d1d157e1cc81d5d9d0d15661ca51db89cc4146a1bc71cfc9b5114d31a5c1c579b3414b31a2b1c049b0114841a411cef9aeb13501a171cab9a80130a1ade1b6a9a2a13c819a11b389abc127f194c1bf3997c120a19e61a69990b12b518471a159990116918ab19be984611ec1733192e9812119a17c7189c97ea102317971801978410641625187b9657104b16dd17c89546100b16821787951d10f915a3172395610ef7147e16c394610ef7147e16c39400001c976194e79a00001c976194e79aec19de207722f5ac1e1bdc20242304af8a19cd20772229b0ed18b020a021d6b0270e7e1d8c1e3bb18b8e0519e61970b1fd94e2920e147ab114982099079431b14d99089cca9c85b0f598dd9e5b9ec6af139bc39f9fa075ae059d81a195a246ad149d26a2b2a25cacb49b31a13aa275abba17dd9cf39edeaa4e22341717983dab9c265320c211a5ab96288b23ae1b15ac9c291a26d82124ac622a12287a2504aced2af4286d27e1ab782bfd29b128c4ab0a2ca42a7f29caab4a2c302b022a0bac722c9d2b312a1eaca02cf22b822a32ac802ca52b6a2a04ac3d2a6629a6286aaaf922fa21ed20d3a63b985199399ac8a3e7984e9a7e99f3a100950895139365a1ed9070917789dda0d48d318e26896da0d082570dce0ecd9f710cc5155e17c19ed2113119f91a699efe13b21a6d1cde9d6d14921bb61c449d4e140e1b9e1cc99ce913af1a3b1c629c9913801a1c1c1c9c35132c1ad21bd29bbc12c7195c1b1a9b4d12a119f71af79a29124e19b91ab99a03120d19851a859ae811a6180d1a469aef118018e5191b9a5b1132189919cd99fc10a91741191099b1104317b31859981410a616521856979a0f0c16c3178b96490ffc15a5172696500fbe150117dd95b70e151591164996250e26143616da96250e26143616da960000c29444959b950000c29444959b959d0bee1ac81f33adbd954e170d1d59af7b98c71a071c5bb0719af9113213fab0279d129ccf996bb1339ef09d049f8bb1359ec69f249f85b1c39e9da080a028b1fc9e26a12da18fb0509faca1b8a201b0b49e06a22aa396ae539fdaa216a466ad05a0e1a35ca452ace69fd5a3b0a484ab489efba23aa4f7aa4e9898a1f4a38eaa791fd49c34a1a8aa7f257f1deb9758abb2289824a0200cac122a8427e2244bacb42a9328f32652ac682b942970284eacf02b532a062962ac372cf42a952960ac632c862b172a6daca02cce2b572a58ac032ca72acb2937acdf27c826d1258ea9e41a3c1859129ea5119aa39b699c0ba45a996a9a999911a2fa97e39853990fa1ba950f97fc9593a0489211917f8f4ba0578e4307d80ed89f8f026914a4154f9f7110f518581ab29e4b12d019de1b0f9e1112dc195b1b309d0912bb19241bf79ceb118219f01a999cda117619ce1a509ccd111719871a229ca91108196d1acc9b4a11be18221a709b08117f18d1190f9bcc1059188f19829ab01006184619f3997110ac170819ac992a10421784181e99da0fe2164418a598690f7b16061834989a0ed9155217aa973e0e1f156b1667974f0e16150a160497220e9614bd15fb96210c4613a6142696750aee10a012e494750aee10a012e49400000202e602419500000202e6024195159af015341710ad679be610d71141afb09c139874924fb0989e799b7f9cebb003a0369fba9e51b127a099a07da085b198a086a193a17bb1dea045a280a238b1dca0bba204a494b0efa0e3a340a4e3afd8a004a460a482aef4a0eaa357a46dada1a01ba494a473acb0a009a492a4cdabcda045a434a5eaaa80a089a482a56daa3a9e21a430a5c9a9b71815a1eea208aa49247d193997d9aa11285e244b2165ab7f29722761251eac7d2af628c52757ac282bb729782882acc72b572a0c2986ac0d2ca72a5f297aacef2b622a11292cac61297628af27e4aad721382103204ea74e98e899be9b45a4e89b929d169d39a3419a989be19ba9a24a99149a3d9a25a202970d987b9787a1a4942093709426a1be91b28dc188d4a0198e140d950e75a011870a144115c19fad0b04178f180f9f8c0fdd18ec19a49e7110e318631a199e2710d318001aba9d2c10b718c919359d2f10431888198f9ca70f1e180d19079cc50fbf17fd188b9b7a0fcd17bf18ef9ac30f82179018ab9a570f23179418249af60ec9165818d599bb0e7a161d188399a90e1916ce170c99240ebb155c17c1987a0d2715aa165b98420dae1412160598390d48143e152797930c6e13a914c596090bef113b144696c70bef108712af94c70bef108712af9400007c103613819500007c1036138195f59a1210691722ad659ba617961b8aaf1a9d1898791246b0f39e339d769cd3b09d9f219fa69e22b153a08ca074a058b11da170a181a15ab1fea051a161a20fb158a19aa2f1a386b0afa13ea4aaa407b081a148a4c0a48eae80a176a4fea468ad6ba14aa4d6a4a0ac23a16ca414a509acfda0c2a43ba5ffaadaa0a7a46fa529aaaca0b1a479a5aaa9fa9f55a44ba55ba9679947a2dea32fa9a81eeb9c909fbca992247e1f841ba5aa4327ed24e42219aba628f62669256cab2029de279826a6ab3029e927692691ab0b2868267f25c7aa0e23e5213720a0a8d39031988c9b2ca6269c6b9d989e09a4849c7a9c599cbaa2239b199c599c56a2ba99829ac09a98a11d98fc97469804a1b89589945894bba0da93888d9b8887a0fa90b3064d0e22a04f8c4a1451159d9f6302d6163f180a9f8c097a17b518729e870c8c17d418e59d010db317f318979dac0dc417ae184a9d3b0d1f17a418b89cea0cff163f18529c570d9016ed17cc9bcd0cb7156917079b700c5415ef16579abe0c00158f16ff99850cc9144916be99700ca1149e154e993d0c7814d1151e99270c5d14a015c098000c301451154e985b0b29137e147c97450bf6126214a7967d0a52123414b196900980110a13e3964d0afb104b130b984d0afb104b130b980000af8cac8ffd9a0000af8cac8ffd9a8b9d659ca29e2aadec9d349c419b07af289f119ea69d37b0bf9f829e289eb3b097a03fa037a010b1b0a062a04ea137b1a9a031a154a12db14ca1eba136a2edb00ea179a2e5a274b014a1d9a25ea3a4af7ba19aa32ea437ae94a11ca49ca464ad95a1a1a44ea5c0acada199a458a502ac38a194a404a5b4aa04a181a4faa40eaa28a195a416a5a5a9f2a07ca4fea40da9e2a089a444a575a8679fcca3aea451a8199ab6a0f4a177a83f1b5c97d899c0a8b120b61d9e1cfca8cd21e21fed1ef0a88321d41e271d9ba8431d5c18b70d69a7a0961b9c669d30a5e39c0e9f06a079a3fc9cd59e3a9fb6a2799c319d549d9ca28b9b1f9cd99ce2a20a9a8e9ae89a46a28f988298009995a1b9966796b89644a185943d92a191dba0ea91b606850eb0a0228fa31162138da0028ac81453152ca02a82a9154d16099ffa01d51588163f9eba051e16c817069e650833163b176c9d1208b615bb160d9d75096415fc16a19c39099e15a416679c690ae3144516059cd909fb14df15889b7b09ad147e15cd9a600a65142c15309a670ac613f214e999110ae0130e158f997b0939134814ee98ff082512f11367988a08c0101612d997160794103511e5964a07240f641096963405030e5e0f1796ca02e60daf105597ca02e60daf1055970000918b318aa5900000918b318aa590979dd39a339c22ad169e269ded9ab6ae1b9f009f659d05b029a0a79fad9f8fb03ca013a010a0e1b0a6a0f8a02fa007b1f3a0c3a126a100b137a1afa101a2c3b0fba041a2b3a254b066a175a312a48fafd4a11ea48ea449aee2a1faa3d1a438add4a125a40fa572acb6a18ba444a599ab31a18ca405a594aad4a05aa4d3a4c2a9c6a025a4d1a43aa99fa03ca485a4cba8a5a03aa4cba43ba889a025a4a8a4b3a75ea0c1a396a41aa71c9f5da2b4a397a66c9e4ba1cca28ca60c9ea0a0e1a1cda55c9d23a08fa155a58b9d37a069a1c9a4399d7e9fa3a033a44d9dc19e819f27a4cb9c029e9c9e91a34e9cba9d549e0ba3779bd19c3e9db3a20c9a5e9bbf9b5da2b198b2982b99c6a14c97a2960a975da16f953394119403a1e7931f8d428897a07191c30c090e56a0998e9a123914db9fa4891d157c163d9f6b867515eb16d19efe81b4158316399ee9016e15f516f39dd6013d150b16c79db201fe14c8155c9da504a7147f15189d450456142315c29c04040014c9144b9c5a06571364149e9b8903c0120514fb9a5c037e115212019a1d031811d4115799c202be106711c69857047a10161152982e048a0f4e100e984b04c10f801011983e04b40f7c1039982d02530d110f9696f980df05bb07f695f980df05bb07f69500003b8be789ac8f00003b8be789ac8fec9d289c469ed0ac289f349e2c9ea4ae6ca020a03ba004b075a021a179a18db0d0a065a1bca1c4b0e6a04da2e8a1f7b033a159a2e5a2eab08ba110a3c7a3b8b0a8a19aa339a44eb0fca152a4d9a488af65a256a4e0a417ae23a234a4bea40dadcca105a48fa449aca5a11ea4bca48aab45a111a46ea483aa22a10da470a4a4a9eea0e9a357a4fca8c6a0baa316a45aa8c0a0d0a33da4fca7aaa0b7a337a436a78ca04ea31fa495a63ca0e8a271a30aa6c49f08a271a293a5289f44a1daa12da5569eaea0e3a0ada4c09d759f09a07ea4649da99eaf9e45a4d59c889deb9d16a4609c009de29c21a4f29b0c9c2f9c99a3619a2b9a259adca21a999598359868a26798299651960ea26897ad94eb95aca11396fd92659492a142958592e39114a12d94088d598e90a05b920c869287ec9fcd90a4054a0d299f1490fc0b050dcc9ec28e400ed20f289e838dc20d3b0fb29d218d6c0faf101a9db08bbf0e4b10869c4b89420efa0f349ce188e00d8b0ff39b8f86390f350f579b4386d90ed80ef79aeb85750e930eed9a71832e0e5b0eb29a2f83cb0d230e769a0181ba0eb80f539aee004d0e470fc399e500040ea20e11999502d50dc80f5598db00b50c660f1e98c5800709e7071597f680c4058b073e94f680c4058b073e940000b38b4f8c9e900000b38b4f8c9e90049ede9d239ec7acdb9e6f9fa19fa1ae22a0a9a0e7a0f9af37a00da168a17fb08da055a1afa1bab004a14da2d4a2fbb016a163a2f5a2f5b058a14ea2d9a2b5b0a2a17ca32ea442b0e5a1c6a3caa48baf02a23da4cba416aeb5a11ca4aca4faac74a12da4c9a422ac63a146a4a9a422ab3ea139a4a3a44baa09a1e3a396a4a4a9b2a0c1a347a4eaa882a061a316a459a822a050a202a37ba709a0eea1aea2f3a6de9f75a122a265a6a29f44a1efa130a6689feea088a19ca5219f92a024a111a5b29e4fa0c9a071a41a9e1fa04da03da4799d059fc49f12a4c89ce19d5d9e11a4789cd19c929d77a3049c8c9cdd9c16a3589b539b2a9ca4a2f6999a99489a30a2f39823988a9805a22f98c2964797b5a1f696549474953aa10d9606929493aca0ff94eb8f059155a06e93fb85c88732a0c391af05760705a0cf90010c510da49f7290710be10c049f678fc80d720c659e058f7f0a320cdc9dc28e150a40057f9d528d7409d004099d948ce7086284979c3c8cfa020a843a9cdb8ad202d683cc9ba78bc202ab83ff9a8a8bb1027c036b9a058ac4075003e799b28947071c03269970884902e702719829892f82cb821a98018821821488a597dd875486f387759773884a8b9f8cc19737896d8ae486069537896d8ae4860695000045828e02c08d000045828e02c08d169eb39e0b9ea3acae9e11a03c9f74aed99f00a1a9a094af1ba083a142a15fb0c1a0e0a168a29eb0f4a0dea29da3d8b00fa1ffa2d8a2e0b04aa1e6a2a7a3a5b046a150a350a339b074a189a337a42daf8ba18fa33fa4ddad53a1f3a330a4e6ac67a1aaa367a410ac37a112a481a4e4aad3a0eda36ca420aaada077a36ba46fa970a008a32ea4eaa882a0eda21ba47aa86da0d1a215a422a865a0c2a21aa488a714a057a2bba3eca69a9f03a2e7a225a6189faba16ea292a5c29e20a1bda114a5739ebfa019a1c1a4379e4da0d8a084a4ac9d709f2aa07aa4459d5a9efc9e27a4849c5f9dc29db6a3039c649c089d54a3ba9acc9ac69bdaa295999c99549a6ca2bc9827988398fda10598a9961097dca17d961e9437954aa1a195a993a4931ea1a494b4913591c1a02794cc8ffd906da000946e8fac8d14a01e932d8c558d719f27926d8eec8cde9ebd91f28d9e8f309ec690868d158f939d6490218d9490279d0d90a98e3d909d9ca28f308eec8f2c9c9c8ed68d828fa59b4e8e8f8d318f529be58d478de78e079bc58dfc8c4390c09aeb8ca68c408e249a958ce5897e8d3299528c6389e08c4498f58a2f8b368e3a98068b158b488e4698748a068b918f8f984d8c3d8cba8d7997d189d38a17882c98d189d38a17882c980000950f1c1466970000950f1c1466971d9d1f9e0a9b6fac7e9eb99f17a02dae9c9ff7a1e1a14faff99feea1daa138b078a0b1a137a27bb09ea0f1a188a2b6b076a057a1c3a1bcb0f2a0fda197a289b004a182a247a318b049a189a341a424afa9a1a0a3b2a4f7adeba1f5a3eba4e1ac7da100a457a4dbab12a191a32fa48caaeea061a31da48ca99ea0dfa20da4cda84ba084a239a352a83ba01ba2caa2b7a703a0b4a160a2dca6989f67a10ca252a6579f56a109a2c6a5ed9ef0a08ea128a57b9e92a01da1e5a4659e5ea0e0a086a4479e32a0b2a07fa4319ea29f40a050a4ee9de39e18a0d1a3869d9a9e649fbfa3999c659dea9d1fa3119c569c159dd0a2279bf19a039c35a2119a7299309aeaa1529926983d99ada18498db96549794a17f977f94a69519a1299634944695c3a0c295cc93a49370a012953a93999427a0d4943c91a792b89f4594e490fc93359f0894c9915b93a49efb921e90d6925d9e3d92988f6d92fb9d3d91048f55936b9dd3903390cd92069d8990ae906e93a59c1e904d90db92279cc78f0f908493e49b8d8fa7905593b39ba08e799001931f9b458e3b90b692999aee8dbf8e4292bd99c38dbc8f0a91f298c68d5f908b9187984d8d5d8f5d910598058d109011919a97578c2b90a690f8967f8b078f578e78947f8b078f578e78940000ea8b588ac1900000ea8b588ac190f09e91a1d9a2d9abaa9f8da262a3ccad43a008a4a7a4c7ae90a0d6a396a4f0affea0f7a392a458b0c6a071a233a394b072a038a1a6a197b0a4a0d8a173a262b0a5a04ba20fa3f1afe1a0a0a271a3cdae65a1f0a32ba4c0ad2aa1aaa364a4adace7a0e3a340a48cabdca0a7a32ba41eaab7a059a309a4f4a88fa0baa2f3a35fa83ca0b1a28fa3e1a718a048a287a305a7dd9f28a268a35da6889fc8a1e8a2c2a52b9f7aa188a246a5459f47a149a23da5ed9effa0f6a1d0a4869e75a044a17ca4dc9d8b9f73a040a47b9dc39e7b9f32a4189d989d989ef1a3799cee9cc79d82a3189c559c9f9c27a37e9bf09af29bcca2e19ae399a89a5da2f099ec986e99e1a157990e981a9988a1d198ab96339869a10d985296c2964ca1bc9604956096ffa06096a493e594b1a0aa95509490955ca0769504942695d69f24958793d394599fc1943c946095ed9e42949694d0957e9eb393e6943a96f49d319392948a96979d9592b094ad96019dfa91ac9415968f9c699132941d960d9c3491b793c295a29b08910794f395439bc6909493a995ae9a219010934495379a498f0892d9945599258fde914294b998168fbe912e947498888e159173932b98608e6e91dd92ae97bf8c1a8f6f905b96b28cc48f8b90ff94b28cc48f8b90ff940000191a581c959b0000191a581c959bf09c9ca04ea10fabdd9f59a38ba407ada4a029a527a60baeeda056a575a62aaf51a1fea4d7a512b0c9a001a3efa376b058a038a1aea182b056a083a0d3a04eb062a0b5a189a1edafd0a0b1a29ea3deae04a162a338a4bcadd4a025a31ea4bcacaea0d2a24ea386abe7a098a2ada305aaafa0c9a205a40ea9ada0b8a205a44fa855a04da289a336a70ea0cfa1eba208a6cd9fa1a15da25da5439f3ea1eca1d3a4d59eeba08ea185a4999e67a03ea145a46a9e5fa038a104a4f99de89fb9a0f7a3799db89e01a09ea3219d159e3d9f9da3bf9c169d759ec6a3429c859c499d3ca3d29b4c9b329cf5a2e89a589a349be3a21e9ad0984399c8a2b399ea970899aea2609961970598aba2c798c59572972ea26d984d95df96b3a1f197af96659858a144970097279916a11897f1973899a8a07b960598a3991da016961e98ae99ae9fc5953c98d699249f469553988899c59ee69400987599129e5c944b9703996b9d0a9491968e98c79cd19382964098529c5493a495eb978a9bbf92a0950198ae9a5a924e9591974e9aa19107951a977d9931916a9443962799b5903894e795aa98a89009943c953e985b90bc93f394ad972c900a93cc941e9772908393a0948b96df8f25938794b796c88d7b91ea932097c88d7b91ea932097d69a34a0dba029a6d69a34a0dba029a6d69f9ba460a527abf6a098a58ea666ac5fa165a698a7c2ac6ca1d1a652a81aad03a2e1a65fa8d7ad51a2d9a672a836af09a182a390a316b0589d1e92cf1c0eb0a19dde91ae1c6eaff49ebc9c3899afaed89f8ea003a1a3ad13a08fa153a28aacda9fcba10ea223abc19fa3a1fda1cca9d29fc5a13da272a830a049a2f6a211a730a072a242a3fba540a009a246a352a51da0b5a190a2b3a4dd9f70a18ca273a46d9f29a1eaa13da4cc9eaaa051a1bea37b9e3ba011a162a30a9ea39f8ea00ba3749d779e1f9fbaa2ee9cff9cd09db2a2539cf89b959ca1a2b79b379af79a9ea2d59a5499d799daa23d9a7e98ca98dca2089a56979e98d2a27d99b7959a95e6a2fc98479535959ca2af98cf94ca943ea23c985f949495a9a1a797ee94439656a13397749512983aa1b796af96dc98eca079963098ef9992a04a968398d1990ba0e895c898209a059fdc956098a099709e959557989499d69d5595fd978f997a9dd694f19746990d9d8b9462973e99bf9c239457974099609ce493fd96ec98f39bae93ad96a498429b22935a966298a19adc92e9951298f399f1911095079708991991c1943d968c987d9093946396679831904d9400965f9865909894ec955198a68f82945d968f988490629440969a978490629440969a97e3981a9c359c09a5e3981a9c359c09a5a99d4da2d2a38aaaa89e1aa304a40bacb19ec0a23fa4bcac7e9cbf9ea29fbeacc299499acf9b95ac37988698149834ac4b99a097d28f9dac3b9c1e9d509b88ad699ee9a08fa071ad2da02fa200a240ad92a09fa291a23eadeca049a4b1a421ac9fa05aa427a5bfa9cda085a47aa5d0a89da0e1a3f5a49aa758a0ada242a43da63ea030a2d1a32fa520a0b3a1d4a24aa4e79f80a198a2f3a3af9f46a154a24da3139fc7a0bba1a8a2629e15a0dba009a2c09de79e16a0c6a1339dc69dc89ed5a1b99c5a9cfb9c5fa1229cce9aa09b77a15e9b3498c99635a1719a4793508b24a15199a2094a112da1e098d212011677a169989f14cf15eaa130984f12901542a2db97fc114d1588a22997a70ef7125ba21697f78dff88b3a1c3970e94309567a14f98f997209931a11f983499419bd0a03297b899de9b37a0c1969499a19b239f7096f1999c9b489e8d962f9ae49bcb9da0962c9a159c339da296019aaf9bbf9c29969a99819b529ccc956c990e9b0f9c51953999049b459bea940099be9afd9a4e946f98c299769a069408983899e29968932b97a7987a99ab92c7966598fc985a920e962a988998bc91b495df9775986d9133953b971e98429118956996a9975c906494c7958f9795902e949495949595902e9494959495058d0c905b92b39e058d0c905b92b39ef19d77a376a499aacd9e0fa4d0a425ac8c9e2ea403a518ada99e4ca432a5bcad6e9fe2a4daa54bae969fd5a413a6dbae1ea02aa53ca64faf85a039a500a62cafcd9f12a4e6a499ae0d9ed2a0cca2a8ad9899ba940d9035accb98580d481816a9f99ba49a54992fa61e9ead9ec29eb7a4f19e85a052a1e3a3479f17a10da2e2a3259f28a187a2e2a2199f3aa149a2f2a1919eb6a0fba155a1389e43a01fa1d0a0a29db29f9ea052a0809d7f9ecd9f30a0099d039deb9d16a0b89c619a329b03a0609c8997a197e79ffd9b1594659221a0c39a5f0a250c89a0499972150017a0a02a98ee183a1b2da171973e1a691cb1a12f97ff19381c54a264970319531aa5a2e09755140117e8a233987288930988a299985b94519417a27c9853973498aca1c79871997d9a63a1d4981e9afa9be5a04598809a819c73a0e297c39a689c579f2097c39a869cf19d0b978e9a6b9c6c9d9696869a5a9cd49c42962b9a1a9c679cf895ce99ad9bf59ba4959499609b1e9bf8942299d69a999aae94c898689a2e9a75947e980d9ad7993f943b98af997d99da93c397199919991f93fc96bf98bf9870927d967098459803921e96319831986091d295f597f5978b91df956a976a97a8906b952397c697d3901695d5962297d3901695d596229700002f1d221efb9800002f1d221efb98899c7ea125a370a9c09ffea471a68babb89f2da642a79bac69a0a2a616a85caddaa069a763a8d1ad19a1e8a7b9a842aef2a05ba78da89caee2a0d4a61ba89cae39a0ada5b8a64faeaa9f00a4dba4a1ad729d909f4aa0c1ac919aae0e5c1639ab7e98251c0e1fa5a85998781c8b1ec7a5cc9a8b13061871a3b39d049dee9c1fa11d9edb9e619f0ba0359ef29f78a04a9e539e37a0dca0f69d5c9e44a02ba19c9d8d9e19a05ea05a9db49db99e739f2c9baa9d6e9dc89d299bdd9c8d9c3e9d239c959c52949d92299b019a0b16f718239c4b97f81c511e389dd192121fc720bc9d3d8b8220c021c19fcb840821ae225fa18204d020702232a30f84c11f032105a4ed90011d171e26a45c953f16941307a40198f9923d9728a38a982798d5990aa27f980f9ab39b28a18098029c679d8aa0dc98ec9c889e04a0ae98d09c659efd9e5398809c059e349eba97379ca99d559d4697d69b419dcc9cdb964b9bde9c4e9c2c96bc9a7b9c679bff95599a409c069bd895dc991e9c549a0c968f99f49b1c9a1f967599c09bf499c4952899549bcc99f3949d98919a5c9904942898f199ff989193ef979499aa98c49290974a9992988792b696d998b897289296964698ce96c190e195cc976d961b911895c796b6951b911895c796b6950000451cc21c8c980000451cc21c8c98ac9c53a228a487a887a054a6dea71faa06a198a7b6a88cab44a116a816a938ac9ca14ca860a992acc0a1a1a8cea9e4acbaa194a8eaa915ad91a17ca8d4a917adcea176a8aca9f8acf2a034a76fa8b6ac589d0ca1e0a1b8acb588a421e023f4ab07192c2520272ba8af166024d425b1a15c8d852037229b984a9b2e16d117410e6d9d019f769f43142c9eb7a000a1be133d9eeba0e8a10e16029eb1a0a3a1c815ab9d0fa0e3a0d117929d059f34a0e218279d9d9da49ed719949ccd9bed9bd0199d9ca48a6b159b1c5f973a1c001e491ccc9031206d2194199b139f22ea230b14251874248a256f9cba188c24df251ea2f2172e248c25caa4211391212c2339a50892601c021eb7a480977791ea9205a433993d9c5c9dd0a29b990d9da69e69a17a99349dbf9e83a08b99699dbc9f14a05c99919d969fd69e0c99ef9c199f129e4798859c459ec79dbf97229cb69d419d3c97b59b5a9da49c9c96309bf69c2b9c1a96b89ab09c6d9bd4952f9a6f9ccb9a8f950e9a2e9c5a9a5f95cd99fe9bdd991b9554995e9bc099c994c798d99a299962944898f69994980794f39779992b985f93a2973799dd97ea92949731998297a2924297fb981c97da92f396969876964692d9967c98d695c09371950e97a894c09371950e97a89400004a1a001c3a9600004a1a001c3a96389b45a1b0a26ea6c1a0d4a66ba87fa900a1f9a7e3a857aa8ca155a86ca912abcea184a8b7a9a4ab0da2b3a802aae6abc2a1ada8e8a9e3abe9a1a5a8f9a9c3abeea198a8e6a90dab52a17fa8f1a972aacda152a879a96daac99e90a2d0a3dfaa0e22f9294a2c99a83c1ce226db28bfa0739f4ba171a38fa0919e9da43ca68ca025a0d5a423a641a068a0caa42ea697a02ea09ea4cda53ba015a06aa4bba57f9fbd9f45a454a5e39dc69f12a4f7a4eb9c009f92a3cba43d9cbf9ef9a24fa476988c9d12a105a2e217329b2e9ed99edd1fc694331d9d1e0424531b97253627ea2449207f29122b69201d21ec298d2b09a5321d9a26462846a8608db71df21feba6e899bc9bf39c8aa46a9b489e14a090a2b89a5c9e3ea0afa0339a769e74a03ea0f8997a9e6fa0ab9fe799289e0ba0a19e4a999e9d889fb69df098339d089fde9c9298d99c979e6b9c6e98a19c4a9e379c4898759c049e089c03982e9ca39d799b7b97c39b529dd09a30972a9bf69c809ad696b79ab19c139a43963f9a6d9ca899d895e299269c6d9982957999de9bf49839950899309ba498f494b0989d9a3598e5947d98349ac6976c945598129a9c9713942298d89935977a930b98bd9962974e9291978a993a978292f496b998bc958292f496b998bc9500003e1ad01a839000003e1ad01a8390539df4a3f3a43aa61da068a61da8a6a87fa094a79ba879a9e9a009a809a90daa5ca144a85fa957aa57a16ba879a95daa6da17ca889a95baa68a16ca87fa925aa56a15aa878a92ba93ca1cda7e9a89ba7739cf8a27aa415a4f98f4797019a4f9f4202650c3603769c839361997e9b689f069d38a152a27ea16d9f46a461a563a252a03aa584a6f1a279a03ca54fa6eda22fa0a6a4bca569a242a083a47ba5e1a102a05da44ba540a10ea053a468a51da1059f02a427a57ca0769ee0a322a52fa0019d47a3bea4ba9ffb9ac6a3ada4f69ec59aa3a485a410a02ca058a4f5a48aa44a1de4245d2618a70d1dda25b9267ea7f59ee0a4e5a5b7a236966fa12aa48b9e2b9911a053a29c9d839d2ba0e2a1bd9df49bcd9f37a19d9d9a9b669f1ea1979d939b129ff7a0849d739bb29eb9a0459d8d9a389e52a0709c609af49dfa9f199cbe99ab9d619fbc9b66994c9d069f3a9bca98f09c6b9ede9a4a989e9c009e8e9ae497229c8f9d339a5897899b159dcb99da96ec9aaa9c3a998b96849a629cea9852960d9a109ca898ec95bb99899b3e98669542991b9b1998b594f098bf9af7974d94a198729a7b970e944e980e9a3497c1930e98ae99ef96c393f0973e9993967b92e196e798aa954692c8958a9737944692c8958a97379400001e19d5199c9200001e19d5199c920e9ebca403a6cea52fa0bfa625a805a889a079a794a894a8a8a0e4a7eea8eea817a132a831a91fa922a13aa838a926a906a12aa840a9f6a8dca0dba7f4a869a830a0ada637a8eba6539f80a515a7b2a52d9db6a326a583a4179a4da0b3a13ea289998a9f07a182a1b79c17a2f4a34ca3a29e1ba419a5e6a3f69eb2a499a599a3fe9e85a49ea5a5a2e29e46a479a53ea21b9f31a438a5f9a1619f16a430a5b2a1429fd3a3faa44fa1f59e6da3c7a4f4a0969ef5a281a49ba0db9ec7a285a48ea0f89eb1a274a47ca08d9fcca2aaa46fa0b99e6aa24aa403a0ea9c11a1aaa2ee9e2f98549dcb9e149dae8cf29443960f99b88ae49070944b966b947199279b7f987499369e4ba0309ba59ac29eafa04b9cd89af49eeba06e9cfb9a4b9feca0819cd69af59e8ba0359c579a529e35a0089cd599f09db69f609b5a99919d539f219b0d99529dfe9ead9acf98359db69e879a9898fb9c6c9e5d9a6098ba9c1d9ef1992498629cdf9dd099ca97079c999da8990997829b579db7997b96099b149d8c990d96859ac49c5299f395249a719c10998095c699249cd29832955f99b39b6998cc940699059b0c986994c198999a9c97d79349980b9a8d96e793179874990e964693d9973c996f958f9372978b98da948f9372978b98da94000067183519c490000067183519c490ab9da6a4f9a5c4a40b9fffa562a720a6cc9f86a605a80ba718a0c3a63fa856a742a0eaa655a880a70ea0a8a634a843a707a08da624a8eea615a04fa6eaa763a6e19fd1a57aa79ea5779f15a57ba6f0a4699e18a461a51aa4b49d3aa39ca420a3a99d04a384a41ca3d59d6da3c4a43ca3999e20a45ea595a3d99e59a488a531a3cc9e51a487a56aa2079f45a46da5eea1559f30a461a592a1629f27a442a539a15c9ffca322a518a1119fbba3fea4f5a0989e49a3bfa4c8a01e9e02a39ea4a7a0e79dc0a276a49fa0a89d6ca253a45ca0519d11a215a42ca0209dafa1aca3f59f869cf7a0eaa27f9f259bb09f8ea1699e6598449dfb9eec9b6695849bde9c45998695af9ba99ce1984298e49c599e159ae799f29d39a0bb9b219baf9eb8a0519c389bb49ed5a07d9c0d9b639e87a0589cc79afa9d10a0089c129aba9d689f389b68994f9df79ea99a1a990c9db89e6d9ac798c49c569ef1998c98a09c0c9ec6991298389cbc9d93996c97bc9b659d72990897249b279d1a998c96bf9ae29cee982e965f9aaa9ccf98f695249a7c9c9f98b695b7990b9c2b986c956499769b8a97f5940199f79a9596b094b2987e9a47965b947b981b9a09964e947f98c999b795b0934098d599289625937f97e498f39425937f97e498f3940000000000000000000067183519c490ab9da6a4f9a5c4a40b9fffa562a720a6cc9f86a605a80ba718a0c3a63fa856a742a0eaa655a880a70ea0a8a634a843a707a08da624a8eea615a04fa6eaa763a6e19fd1a57aa79ea5779f15a57ba6f0a4699e18a461a51aa4b49d3aa39ca420a3a99d04a384a41ca3d59d6da3c4a43ca3999e20a45ea595a3d99e59a488a531a3cc9e51a487a56aa2079f45a46da5eea1559f30a461a592a1629f27a442a539a15c9ffca322a518a1119fbba3fea4f5a0989e49a3bfa4c8a01e9e02a39ea4a7a0e79dc0a276a49fa0a89d6ca253a45ca0519d11a215a42ca0209dafa1aca3f59f869cf7a0eaa27f9f259bb09f8ea1699e6598449dfb9eec9b6695849bde9c45998695af9ba99ce1984298e49c599e159ae799f29d39a0bb9b219baf9eb8a0519c389bb49ed5a07d9c0d9b639e87a0589cc79afa9d10a0089c129aba9d689f389b68994f9df79ea99a1a990c9db89e6d9ac798c49c569ef1998c98a09c0c9ec6991298389cbc9d93996c97bc9b659d72990897249b279d1a998c96bf9ae29cee982e965f9aaa9ccf98f695249a7c9c9f98b695b7990b9c2b986c956499769b8a97f5940199f79a9596b094b2987e9a47965b947b981b9a09964e947f98c999b795b0934098d599289625937f97e498f39400000000000000000000000000000000a29969a02ba13ca3231f1a253026cea958234b28fc28ecaba5233f2805297fac0a2465283229e0ac1d2489285f2957ad00243928272928ae152302262227a8ae7a2397263127d5ad4d22d225f52668accb209422d723e6ac2b1957a410a724afce21a122c021ecac3e266528f42863aa0728cd28332933aae928952985291caa4c29fd298329a8a96e29b729782930a9ed2828265c244faaca2438ac7bae49ac842a94297528f2a73c2b2d2bd12acba8ec2ae22aa72a99a9072b182b582ad5a9312bf12a592ad8a9832b3a2b6e2aefa9b22b672b912a11aa842b362b582abda9022acc292a29c1a81d25cb258a252ca51e1d58201821cfa06318821da91ea99e6717051d0d1e0d9e19169d1c991eda9dfa13441b291d479e3d0ca48eaf8900a069120e18dd176b9e2517881d151fcf9c33173e1da61e049c4b169e1cea1dc09b0d165f1c831d659ba915261c4c1d5b9b5a15ac1b051df79adc14411bae1ca79aa614dc1a7d1c629a6214641a4c1c1c9a2914e219fd1ba099e6139e19901b229972134019171bef987313fa18ab1a97980a13b6182c1a5c9825126c18e3190198a3113618751906977911c1172b195f964a116617d918b5956f117917d118869580118717a9185895a710eb165618409593114a161e18e3940000000000000000a29969a02ba13ca3a29969a02ba13ca3231f1a253026cea958234b28fc28ecaba5233f2805297fac0a2465283229e0ac1d2489285f2957ad00243928272928ae152302262227a8ae7a2397263127d5ad4d22d225f52668accb209422d723e6ac2b1957a410a724afce21a122c021ecac3e266528f42863aa0728cd28332933aae928952985291caa4c29fd298329a8a96e29b729782930a9ed2828265c244faaca2438ac7bae49ac842a94297528f2a73c2b2d2bd12acba8ec2ae22aa72a99a9072b182b582ad5a9312bf12a592ad8a9832b3a2b6e2aefa9b22b672b912a11aa842b362b582abda9022acc292a29c1a81d25cb258a252ca51e1d58201821cfa06318821da91ea99e6717051d0d1e0d9e19169d1c991eda9dfa13441b291d479e3d0ca48eaf8900a069120e18dd176b9e2517881d151fcf9c33173e1da61e049c4b169e1cea1dc09b0d165f1c831d659ba915261c4c1d5b9b5a15ac1b051df79adc14411bae1ca79aa614dc1a7d1c629a6214641a4c1c1c9a2914e219fd1ba099e6139e19901b229972134019171bef987313fa18ab1a97980a13b6182c1a5c9825126c18e3190198a3113618751906977911c1172b195f964a116617d918b5956f117917d118869580118717a9185895a710eb165618409593114a161e18e39493114a161e18e394159463a100a2aaa0159463a100a2aaa0bb1c4623972446ab39221428742818ad09239627a328f2ad3323e027d22870ae4c23bd27c128fbae86229c26db2765afa8212125112695afc020f323ba24c2ae2b1eb31d511da5ad011374a2b3a4c1ac349a31a7d1a8e0ac7b1576a3e3a4beacb920352062206cace124e325a9256aab4c27cd277727e8aa96288c2832281bab0529a6274f26f0aa6d28ec18cca105ab1628d1a371a87aaa5829332582206ea99e2a68298228b3a9022b542a8929fda97f2be72ada2920aab02b042b1d2aa9aad02b592b752a27ab192cae2bb02a3aab982b362b462aa4aa58294429ee28a4a9d82208241e24f6a5c6151f1cdb1ce0a10a12f51a821c70a05b14201c081d19a0bc13971a2c1c1aa01e110e15a317c89ff88a6599629abf9f3f8a8d98dc9813a00315dd1b281dff9d8515681cb41d069d4d15091c491d649c3415b61b031dd29ba514931bd91c919baf14471ba61c009b7814fe1a981cbe9a5b14b21a6d1c7e9a4914671a451c439a1a141c1a001c089a9813a919601bb69910133719c81a35996912c318341ae798b6116418ae1975988f110518311934983011a117eb18a797ee106e17de180a97be10091796185996c810dd167218b595c610aa1625185295ef0ff2153e17de94e9103a1521171796e9103a1521171796559349a1f4a185a1559349a1f4a185a182197521db221eac5720a025a1268fad5d203e258026c4aec720c425d8268daf45200325592626b0ce1f0e2495255bb0961e51228a2357b0af1c501f562004b09919961abf1844af45184f91689274aeb412759ced9e88ad5c9582a017a2e2ac5112079d4b9f45acf11d7a192011c5abef2255211220f7aade252b246b2258ab03284a241920bcabaa28d323221c15ac1929c024671febab9929a02604242bab7f2a692848268aaa1c2b90299b28ddaaa52b702a4a29f9aaf72be42ab82934ab0c2c272b122a5bab302c562b462a60ab412b772a92298daa05288d27ee26daa81f1d1c1ed01df2a4ed93d30ef61286a2c2913c88d60ff6a19f90158e088945a1f68ed290069272a0fb8a1e940f94f99f8b820292ba93969f490e53116414b69e6f13ad19be1afb9ddb14101c671d9b9de0141b1c5d1d039d9714321b9c1c759c3314941a3a1c3a9c1814841a351c139cc913791a3c1cf29b9913341a041c4b9b4e13f119be1bca9a2513b319761b8b9aa2126019d61af9990112e2182d1a91998f116318c81937995c112c187719bf984611b717ff187d980e117317ca18f597a110fd167d186697921086162e18249778106e16f51775964f10041690172396c30f031657173c966d0e57138c14a5956d0e57138c14a5950000109db99e7f9a0000109db99e7f9a7b89c61d221f8cac481c6c23712433ae001c4d220a244faf961b5d22262415b06418de20882265b08616891f4721a5b00b14ef1c871fadb0430d3518fd1864b070930c98d498ccafe995939c7d9de8ae1299af9dc99e14aefd9a7ca05aa14ead599c43a153a29fac879aa49fc8a1fdab00126b9c51a0f9aae01f3710329cf7aad024831e2d9186ab682758223d1804acba2803256c2105ac9b290127762410ac582a99285926faab072b76292c28c6ab8c2b262a0729e7ab0d2ccd2a992906ac272c0f2be32910accc2baa2a9429a5abb629012945280caa5e24a324262446a8940679132211c2a49599c299f8973fa28d960394de92eca1ee92a78e78098ea19890638e548915a1c78ef490648fb2a0a087a986378805a0eb09a6123a14299f57103f170719e39e6a13301ad51b539e6314021b681caa9d1414d11a551c269d9613561a081ccb9c6a132c1ae21b5f9cd412de19771b249cb012ae19421b839b37125419d61a139bfd110719521ac89acd11d1181d1a8f9aad119718e719549a451137189e19069a0011c4170c199d9999103817d218fe985010d2164c184c98ec0f67160d187c97d20fe115b6171b979b0fdd156c17d196560f85151e1788962b0e0a154d16dc96e90c311337153098e90c31133715309800005ea0fea0db9a00005ea0fea0db9ab89b7e8ee88fa9ac9911c020a62182ae588c261d6d1fa3af09939a1dae1e32b06b98e717d21b79b0d7997a91e318a8b03d9b3198a492a5b0229cd09c199c60b0249d4b9f259fe4af919ddaa00aa108afd69db2a09ca120ae1f9e9ca1b6a241ad469f3ea281a3c6ac949fcba29da313ace69d11a2cba276ab659aa6a139a37caa7118f79fcba297aae721359003a07bab60268a21471ac5ab692841259c22f1ab532977273a2514ac582ade286f2727acd82a9a29692824ac462b1c2a002912ac1b2b0f2a012919acf1291129422818ab7726c025da2498a95f1bd01bf6155fa7fc996d9b089c31a4889a0e9b5c9a04a3e598b5996e993ea2c597c2982b999aa16494a3946e94fca0d691c690bb88cda0048ed186520863a0738260116014e69f160ee317f418c99e58112819d61a279ee2116019bb1abc9d60114519a01a869d4c111e19351a049da91115197a1ae59cab11fe18791a879c8e11b918531a3d9c3311a918fa19019cf0103c18a419539bbe101f186e19d09aad10fe17f618499a63105017c318099ad00fe7167d18af99cc0f861638182999300f3d169e17b298750eae15ef162598f40de7145016ef97ce0d831489156f97790d3314f0145697370c8a123b133796bc0bd9103811ad95bc0bd9103811ad950000f60dc20e449b0000f60dc20e449b6e961f180019a8ac1e992f162c1a98aee19a9d1015189daf469c0091f79137b0449da49abc9878b0059eca9c169cadb0b99e3d9ecd9da3b0909e899f699f74b08c9fffa037a109b0e39f28a29fa210af07a08ea216a3ebad07a0a5a246a33dad6ca011a3e9a3b5ac74a07ea3f0a327ac42a0eca347a461ab26a003a49ba4e7aa249f9aa3bfa425aa5b9902a23ba4fba9511dac9b90a0f2a96d23121e101069aaf82520240e21fcaafd271b26842453aba3285227aa254fabf8281528832636ab81288f272426ecaae625f4242e247ea9e21d581d1e1c35a70999209b9f9c8fa4129c379d079d24a3029b8f9bd19bcba272996f99119ab0a228981298839768a2b495a495d79516a2bf93ca921592b4a137912d8789882ca1758dbf0c2e0eb3a036824612ef14bd9f660b2d16e9172f9f4b0eac17ff18e59e9a0f2a187f19599ef20f1b188819fb9d5c0f10186119769da10fef171419b79cb60fa217dc18239c990f88179918949b410f3d179c18f99a8a0f55177218ba9a2b0f071748187a9a560faf164718279a040f0c160a18d099750ef115a3177e99150ea11541170a99920d2015a01681985f0da61403162598470d42147d155e97f60c56139314ef96020c61121e141b96c90ac711bf13e195c90ac711bf13e19583004618721a259c83004618721a259cdb94931ca01eaeac0499711bbb1dcdae689cbf909511b8af499da0970d922fb0509ead9ac1986fb0169fcf9cba9d94b0ca9f3f9e739f95b08a9f779f5b9f5eb034a0eda029a1fdaf99a0aea285a2f4ae98a0fda2b2a3d1adcfa0a4a345a440ada8a00da442a4c4aca6a0dda334a42bacc2a003a456a44babb7a022a492a49aaa8fa028a4d0a40baa63a02aa4bca458a9059ea6a270a423a9cf98d2a0dfa20da96f17bf9c5aa021a9f01e3519a78e40a93e21401e5e1b45a995211920e11df3a8a920771d6a1a52a84a19678ca69341a7c799559bee9c83a5329c189d689da5a43f9cb09cf69c27a4809b569c3c9c90a3609aec9a259bdda2f3983999d69917a24197a996f19671a1e4949892149406a17c92248d458899a00b905206ef0d44a03b8cc1123914db9f4302e31567174b9f4f099d162818a29eca0ab216a118359eda0bea166d18ef9d900cf6168b18789dfd0cc7167918049dc60c46161618719c350dee15a617059cb10c98152d174d9b5d0c3d15d316f19aa60cf31408165d9a8b0cc414d715299acf0b48149b15eb99320c6c147115be99210c46143a155399e60b9e13ec14a698a40a7b121d14bc97670b4912e2131897b20abb118a13c9962a0869109311e596930874103e12fc96930874103e12fc969e9571969c95aaa59e9571969c95aaa5319d0c9c729b16adb49db39c469a77ae3c9e4b9de49ca4af219fa89d3c9d23b022a03d9f129f65b03fa060a078a08cb098a01fa15da19eb08ca012a155a16fb0bba0a1a108a2fdafc6a00da28ba2c9ae00a182a39ba3a9ad3ea121a4aea454ad47a157a4b0a4e4ac12a139a4a7a40dacb5a008a45aa4c5aa93a0fca357a429aaafa011a47da4eea99ba005a478a44aa9b1a012a4bea4b1a85fa0b5a3b3a445a8f39e2fa2f0a31ba8619d78a0a1a16aa7f59bf69ed4a013a7589c00a061a13aa6459de3a033a2d2a5249eb2a0bea165a5d19e759f5ba0aaa4279d7a9e8d9e1fa41c9cd19c199d71a3bc9b499c829c28a3f19a7c9bd39bfda2ea99bc99df9979a22198ae972298f6a17f952b954295c5a13e932f8d64886ca1fe90e40c5e112ba1b88e820ff612c9a0c18b8113d4141ea02f86cb140416529fed011b156a16b39edb016f15dd163a9e1f058c151b17d79d15082915ad167b9d75095115df16019d26090f1585169b9c2d0abf140e16479ca6096c14a315b89b7e0a2a144d15089b4d0ae9130615719a500a8713c4141d9a010afb127414b699af0969122714f798350876110a1371988b072810eb11f2970b0702101011009779050c0e4e10be964802180d3a0ea896d902f00c710e2b97d902f00c710e2b970000f08a4f8c00900000f08a4f8c0090cb9cbc9bb89cc1aca39d939d449c48aea89e419ffd9d32afc39fea9f08a00eb06fa028a037a03db0c4a0e0a019a163b0c8a08fa1eaa15db001a17ba1a9a230b0eda00ba28fa2abaf09a127a32aa3a6ae40a16ca384a3c6ad6fa1eca379a418adc4a162a4c0a4a3acc4a178a440a526ac0ea13ca4b7a453aba8a0b4a37aa442aa74a093a369a4a5a934a018a3dea318a919a0eca265a398a80ea08ba259a314a815a074a2bba379a7b39f41a27aa3e5a6579ff8a13fa3d8a63d9fb3a1c1a25ca67b9e72a1eca101a69e9eaaa0a3a018a5b69d909feb9f9ea4f59c829ec79e6da4599c819dfa9d47a4a59bda9c469d0da4a59a4c9caa9ceda3aa99f19a589b15a34a98d198c69848a285961a967596cda10695fb93c19355a1dd92fb8c2388faa031911c06c20d7fa0418f070f431215a0878b3d13a014779f3186a614f215099ff9810815af158a9ee401cc142f16469ec9018d14dd15f29d9a0137146815549d6004d3131715049d15045d13d014999c8806b8138e14389c3c061f133a14d59ba405d811a613dc9a32035211d812249af502eb109911b199b40216104b1134999802b00f5c10c8987802490e270f78982f04640e590f6d9885026f0dee0d5d98b700640a0d0a8296f78095056382d195f78095056382d1950000ef05050a6c8d0000ef05050a6c8dfb9c4d9d7a9d74ac199e629e609d28ae0da016a041a029af4da000a155a1deaf98a035a18ca123b0f4a0f6a17da251b00ea1baa2a0a25cb054a1baa270a32fb093a153a365a3bcafb1a1c4a35ba4c4aee9a100a4e1a4d2adcba146a4dda414adc7a115a4a9a47aac64a11ea47aa4ccab11a1b2a371a4ebaacda0b2a33ea47daaa4a071a31da481a935a08da23ca3bea8e69f51a201a32da87f9f3fa2a8a298a75c9fb1a15aa2eca6219f3aa1cea15ba6e59e08a19ca1fda5a99ed3a023a1a8a51b9e64a053a03ba5979dec9e079fe1a4019dbe9d199e73a4949c6c9d4d9d35a4279ccf9ca49c24a4a39ba79be49bc9a3129ac499bd995ea3bb983d98d897dca2e697cf95029697a29c967d94ba9548a2d7955d9456941ea2089549920394a8a15e93e48ff78da8a00d92438c17870ba0a5906705c406829fc98fa60bd30c239f598e230b7c0f759e1a8e780dea0ecb9db38c0a0d5c0e549d288b6a0e1110b89cf688f40d9d0f6b9c8f88ad0d420f379c2286720df90e0c9cf0853b0db90e909bb185f30c790e829b5583c20c480e4b9b2083c00d0e0e3f9bfa80600dd20dc39ae400100d070f269ae000d40c080d1f99dc00bc0c450e9d98dc00380b030e4298c783fd01a18a6498d186ef81cc875696d186ef81cc8756960000ea909d92ed8e0000ea909d92ed8e169e969fa1a07bac5d9f16a195a10fae12a0efa1e8a1e1ae68a07da238a3b0afc9a0d4a298a317b03da120a3f7a34ab0b4a1fda31aa45fb0aaa14ca315a434b0c0a1b5a35aa49daf93a179a338a4d4aea6a1aba305a4d0adb3a10da460a424ad64a1e6a343a472ac11a19ba31da47eabd0a07ba310a496aab2a015a3bfa30caa5da008a3c0a37ba937a062a211a3e5a8e09fc7a109a258a8a69f22a15da1b3a7469ffba040a1b4a7099f8ba0b9a0c2a6e19e92a010a137a69c9e84a0cba099a5279ef89f27a0e4a4649d0a9fb09fa7a4e09c439ede9e8fa4959c909d169e57a4439cff9c659d27a4ba9b689cb99cb3a3ab9ac79a179bffa28099af99d2996ca290985c98e1981aa210984c970398c9a1c196fe941a9551a1b2958a934b93e2a024957591df929ba0d2935c8c9c8d62a01b926f051b872aa033911805b606dd9fc890b8043606169f03906604af057d9ead8f20045c051d9e848ee1030685bb9de08d70038784079d6b8c13032484979c328ce802e583529cbc8ac302ba83049c738ab5029603819b378a9f026803ec9ab08870073103489a8c88550203038f9933892e02d302079919881f82b4827a9804883886eb8735989d881f89768a1e982e88ee8ab88d3698d288958be28d3895d288958be28d38950000ce06b682198e0000ce06b682198e719d16a0faa03cac4d9fefa06da108ae5fa03da2f0a2adae87a0d0a2b6a380afeba038a312a401b061a18da3d6a339b097a1caa369a43eb085a1bca367a423b090a17fa3a4a490af51a12da310a494ae11a156a3aea38eadfea054a3caa3deac01a12ca3b6a32eaca6a0dfa2fda327ab8da019a360a35daa55a0b2a2e6a3b2a91ba04fa26ea326a90aa036a2eba298a8ef9f1da2e3a224a8e89f08a2e1a252a78c9fa2a171a2b0a6f79e4ca112a226a69a9e34a1aca19aa56a9ec2a066a131a5f69d46a0d1a003a5af9d699f23a0f4a4799dd09e959fb6a40f9dd99d749eb9a4a39cda9ca69d5aa4bd9b159c4b9ce0a3209a349a139b2ba33a995199f199baa26f98fe97559869a2d2974696eb9704a27196d294099587a17d959794d59470a199943193389317a163945691d992b5a0c5930f91719251a06493b690f691fa9f889250907a91249f2092e18f0d91679e04914e8fae90999d9990c88e9a910e9da98f0f902b91869c278f878fcc90339c3d8e868d178fba9bf08d4a8dce8e699bc38d118d948e2a9bb48dcf8c1990f19a918d878cb08f4e9a9f8c098cc78e5d994f8cc88c2f8eb998038c9d8c7e8faf98f58a7a8cac8f9f98888b7c8c6590d298a58ef98e6a8f2296298cb18d7e90a297298cb18d7e90a29700006b0e4f0e089400006b0e4f0e08945f9d6fa06ca1bfab2da07ca2e9a3b2adfca043a4daa470aeeba053a403a527af61a14ea449a5a2afa6a136a43aa514b0a1a10aa4a0a423b069a17fa346a405b060a161a399a47faf68a1aea36ba4abae4aa1bca322a4a9ad80a1bea378a4bcac7da105a463a411acf2a046a3fba3e3aa82a0aba254a3f8a93ea02ea2d5a220a9cf9f95a11ea297a8b29f43a1cba10ba8589f46a1dca146a73a9ff0a07da1a4a6f89ee3a075a15fa6c79e8ea019a1a4a54e9e36a0bba061a52d9e8d9f7aa016a5fb9d339ff29feea4b89d829e9b9f7aa4669d259ec99e81a4c69c659dea9d38a41c9ca99c0a9d90a33b9b119cbb9c49a3729aa09a9b9bcaa2af99c899939a50a2f0980999aa9914a22f9880971e98c7a152971296849642a19a96d1941e96f0a0ef958494c79589a03b95389465953ba0f794da9301950aa052944d93a894839f2894b9921095eb9e43932e92f3936a9e5b92bb916894049e3a9139911c949c9dcc90cf90ae93189d399057912d94cd9ced8f0791d593819c9a8fbc903994499c648f96902d93019c698e4c90be92879b168e11903693e59ad48dc48ffd914a9a898d6290ac9164998a8d37905391b398148d0890c9915798188d51907e911e98698c9090cf91cd97da8a3e8c418ac995da8a3e8c418ac9950000858e13925c910000858e13925c910b9ec8a107a3fbaa1fa049a332a44eadc0a0bea441a5f7ad15a12da5d4a5b0aea3a15fa5f4a547afe1a131a512a6d8affda1cfa492a5f4afb1a133a4d9a4c3af54a116a4b9a421af1ea1caa387a456ae06a1d6a344a47eadfba050a33da4a5aceaa057a3f3a39cabcfa04fa3fda382aa8aa0c7a269a370a968a042a2eda2c0a811a0dda17da23da8919f74a109a24da7469f60a10aa2aea6009f10a1aca11aa6aa9e8ca007a198a56e9e1aa0c9a053a5ee9d3b9f35a027a5759dde9e719fe5a4049d0d9e859ea0a4e59cc29d3c9eada4839c0a9dec9d71a44a9c6f9c289d18a4d29b319c789cc5a3219b539bac9b92a3ab9a459a299b11a31c9a4c99ef998ba279996998ec9826a2a8982e98a398f2a12298ea965e9876a1ef967f9630972fa122960196b996d9a05d9583953c969da047952d95c6952aa0fa94e6944896a49fa6944e95be963d9f3f9497951597cd9e9893c29552972f9e0e935b95da96a19d59924595c596ee9cac91ad941b96519cf4904594b495cf9be5900e94fa95889bea90dd93bb95399bdc9087937e95b29a429011932695489a00909d92ca94a699bb8f689239943b99e58e29921894e598408e7491e9936398e58d49915393cd977d8ca48f49918a966b8ce28e589179956b8ce28e58917995680ee11c511dc2a5680ee11c511dc2a5839df9a1d6a282ab03a0a5a398a492ac12a166a52ba65aad2ba1aea5daa6c8adbda12ea658a746ae29a284a6c8a7e7ae61a2e7a54fa759af14a239a582a64dafa6a1f0a481a5e1ae4ca142a455a542ae18a111a479a485adfda0ada338a49eaca8a01ba323a4adabe1a076a318a424aabca04da310a40da968a0caa2aaa353a828a016a24ea3d5a78c9f53a159a271a62d9ffca0e7a1d0a5d69e9da075a134a5409e0ea0c7a0daa4ee9dab9f7ca069a4c79d449f3fa074a46d9ded9ea29f69a4f79c2f9e569f3da4b69c2d9d989e18a4899cf59cd89d08a4109c109cbe9c02a4679b279b909cefa3c59a3f9af39bd9a3209a5e99fc99aea363997b98b499b3a320992398a49867a3d2988a974098c9a26d984a980a9902a20c98b798c79992a14997c298d59a20a1dd961b99b39aaea06096db983a9a3ea00396a998ea99db9fc295c2980e9a849f37957c98b399e59e94941a983999259e56946997be986e9d0794b4965c98da9cfa933e9616988d9c1b93cf95b6970b9c3f927095d597799bcd9124958797f59a6191e6942397299a06919c94c296d699a3902394f09544999d90069499959b9842901994e794259843907393bc94ae973290e293d5945497778f059376943b97118e9290d0908a97118e9290d0908a97a68e5b9a319b1ea0a68e5b9a319b1ea07e9e0da35ba430aa7ca0f6a4d6a58bacfea0bca5d3a6d6ac42a1f6a53aa7f5ac60a156a69ba7f7ac31a1aaa609a82dad01a221a76ea89dad8ea2fba686a8ffad53a27fa649a8faadcba1f0a5a0a791ad6da155a5c5a615ad40a1c1a4f7a546accca034a4faa4fbaa7fa0a3a34ba4fba930a029a3faa3b0a827a0afa219a367a72fa051a225a347a614a0efa1c7a2c5a5f49f5fa11ca253a5a69fdaa0c8a1e0a4eb9e95a028a19ca4439ec19f97a05ea4b29df09e959f49a4389d289ea09e0ba4cf9c079dcb9daea3269c049c1b9c9ca37f9be79ad39b7ba3259be5999f9a65a3889a0c9980994ca3e399d298479969a3b699959803993aa337994296df97b4a2c398c495449786a26f984d95bc960ca20e98d1956197bfa1989723978f986ea172972298d79924a13f97ef98779adaa086964599eb9a85a067962c992a9b0ba0299626999d9a169f0096c8987c9a939ebd95b998159a009e66955d98049aa29dc7940898a199449d4f9475974499ed9c2294fe960899949ca5930797bf98329c5493ba967698aa9b3c931e964698209b9992d0952298e49ae2917d950198429af49038954997ce999c909594c49665995690a394849632994f909994619616998b8f96947296f7988f900594a5943f968f900594a5943f960000bf1bc21c169a0000bf1bc21c169ab59cc9a0d6a2e1a9599f06a4baa419ac7da0f2a4dea58fac86a0baa49aa5b2ac76a06ca44ea5a1ac2fa05fa47aa56bac26a090a4afa51eac2ea0d1a4fca536ab55a035a5eea695aa97a07fa56ea728aae0a188a623a83daa67a18aa5eba6e8a97ea03ca474a51aa981a0d5a3c3a4b6a83ba0b7a209a415a807a009a241a3f9a6939f81a196a224a6679fc8a0ada13ea5ec9e5fa0d6a0eca47f9e619f53a090a4c59d0d9e699e32a4239dd39cef9cfca3b59c2a9c2a9c5ca3699c519af69a5da3149c4599ad9918a34a9b0697fd965da3699a6c93b491c7a27b9992095411c5a2a198a112ec15dfa232987214ae15cca2129843146c1511a3ca97c6114b1334a3db975a08221024a33598208e2889b0a2969829968c962da2a398ec98b799c8a17c989399219b19a1df97b299509b7da093967b99fc9ae29f6e968799779b319f7f96589a0c9c759eda96889a2f9cfc9da9967a9a1f9c5e9d8896199ac59be99c3396e799899b749c90956d99fc9a009c24955f99e59a9e9ba694fa98659a189bd0933c987799949a8893ba97f298ff9932933497b198b199889290967a983c995b922d961298fa98d691f495c697c0984a91299522978f98f59004954b9639982f909d94e695e997ae90f59357955795ae90f5935795579500004a155216b09700004a155216b097c49c00a2b2a3b2a9579f4aa429a58cabae9fb8a4e0a568ac8a9f77a494a5d1acd79fc3a4b2a5f8aced9fbca4ada534adad9f1ba457a54fad6d9eafa2e9a32bad049df89f0ca1ccace99ccc9ee29f2dac8d9c5f9e599f1bab209d339ec19faea9ff9d829f51a0bea89a9e1ea0c6a00ea87d9e7e9ff39fb9a6099e1a9eec9e8ea5c69dd29da29ea0a46b9d9c9dbe9df0a33e9d669d8b9d56a3279d349d5c9dc8a2ca9c0d9ceb9b8da22e9c239823985aa27c9b1a8b9b8c2fa21a9b3111b8124da2579a3714761524a281995817c6187ea2ae985e18a01a7fa233980019571bbaa260979219f41be6a2a6979c18b61a7ea3ad974d177019d8a30c980d126015c7a34d98878e858981a376985c95cd9630a38e982f985e99b6a2d398a098a49a70a2f2986799999bb3a1dc98f1992a9c1ea11198a99a939c9fa09c97f39a8d9c869f3197c39a8c9c709eea96a29a709c919d7796589a349c209df295309af29b8d9c9e95bf99b79b219c4e957d991a9b9a9bb3940e99869afc9a7694af981b9a889a4d943d98c099279a22940e987699d899ac93899730998c99e3920797af9806995f929c966898bc98f19142962f98ad985b91c095fb977b988a910096629702989d908f95aa974d9870911595a296d09770911595a296d0970000081a2b1c58910000081a2b1c5891099d95a22ba4d2a8f79f1da598a6fbaa38a0e6a528a701ac3ea0baa556a750ac8ca049a69da786acc4a094a61fa8d3acd0a023a6b2a703ad70a080a528a709ad2ea003a58ca6dbacbe9fd2a3c3a492ac4e9e5aa1e2a230ac7d9c6d9ca89d3bab359b5e0dc40efaa9a79ab518a71bd6a8cb9a3f1b411efca60f9b221c0e1e5aa5569a371d5b1ff0a3919a861dfe1e12a2d69a351dfc1d1ba1489cf61cb11db39f909cc41cba1e169eba9aa31c4a1d289fe698fa1d011f019f22953d1f9b20d59ee59176203e2236a0ad8b0e21b2226ba0668bef208a2226a10d8e6320cf2114a24091341fcd2065a35893471db21f68a4e294991b4c1dc8a4b2951a17361a9ba40597f08ef08980a45a986b98889a2ba4f4983d9abb9c41a311990b9b789ccfa1da987d9c5f9ddba0f498239d4f9e55a0d8983c9db39eb49f8d98ed9c589eb69e0a98829ccd9df89d9097309c6d9d459dde96c39b1a9df59c6d96049bb69c4d9cdf95719a519ce19b9d95089a179c3b9b8095a599c09bd39aaa9563998f9ba89a8c952d99589b779a6095ee98319b549a9b945798469ab299d093ed9798993d995f9393974999f098d09282972d99ac984792e796b8981598e291cb9649986897c290d495a5979396159101955b96dc94159101955b96dc94000098187f1a5f92000098187f1a5f921d9d50a3b5a420a855a0e8a53ca7bda978a096a609a8c2aaa4a0dba647a854abd5a034a76ba8bdab0ea177a7afa806acf5a081a7a7a820acd8a065a7b0a81bacf3a059a7c1a8f5abc6a01ba781a879ab45a0e3a52ca721abbb9d7ea255a3fdaab897a11a091e23abb2162b241926c6a9a41af0251128cda67f19a6255e27fba23e158e24c625679ddf0d1a23ec24008f4094ac2182230f1884968920ba21e617019807208b215b19259a2c200022ba1c7f94ff204322e01bbf0ce5222c24641af71532248f25a58d1f19ef24682638978b191a25d926789f44190d255a2622a334181f245525a9a5bf131e2204245aa6ed8c831e9f1e30a62d966715051705a5929893950f970da4ef987c9a6b9c56a3d899529dcb9e33a2c499e59d7a9fe4a08199089eb69f10a04099249e00a03a9fff981e9e01a0c09e0099b79d6a9f159e4798cc9c7f9eb69da997529cbf9d2a9de296a19b459dbe9c4d96089bb89c1b9cc7958b9a709c7f9b8295239a559c169b4e950f9a3c9cb69a2895a599ef9b739af5943999589b249abe94b098cc9a7e9951943698d899ff98c093aa9769999b982f93a29728993498bf92659726990a98a7923097fa98bd97fc923897d6983897cd922597c898ea9612950896b796729512950896b7967295000044159c17ab92000044159c17ab92b298bf9feea080a4ae9fdca56ea7d5a84fa07ba600a899a989a023a761a813aae2a079a79da88daa07a1c7a7c9a8e1aaf4a0b3a7cfa8eaaaeca0a9a7dda8cbaa3ca1a6a7e0a874aa3ea142a7ada8f8a905a238a7a4a845a98da0a6a651a8b3a8f39f5aa660a72fa9fa150c244d259cab3c24f22c092eb3a89123382c582da319541e712898297024199567204221c323909c2799aa9a7c229d9cee9d0ba0aa21ae9ce89d3b9fd021829cac9bc29c82228c9ab39269973a230f97722098211d25981af12546274325a71f1f296a2a1a258c21962a322cc010d621822a382c7da6bf1e0028332933a97585c62029228aa8e299bf99549e63a69e9b369fb6a02ca4e39b759fb6a06ea2e49afd9e83a0f5a0d39aee9e7fa04aa0099b0e9f9ba019a01c9ab19e86a0af9fa8992f9e32a09f9ef0989d9d7b9fdf9da498159dc29e209d5398cb9c6b9eba9c3398929c279e659c08984a9cdf9d329cb797239c9c9dc49b6897b39b1a9d289bf6960e9bc89cdc9a9596969a829c699a1296259a479c059aa895dc99279cd8992f957299bc9b949907950099019b3099f394ac989c9ab898c2947f982b9a5b98829455980a9a44983b942598d7993d9826942298099a44985292a0971f9a78999492029741992997949202974199299700005c19401aed8f00005c19401aed8fe99c8aa3ada42ea6709f7ba50fa76fa8c09f30a6bea7f6a851a0b8a63ea86ba9d2a02da78fa8c7a9caa05ca7aaa8d2a9b0a043a789a8bfa9d8a049a790a8a0a9eda033a796a835a91aa154a787a8bba800a11fa76aa898a7829fc8a41aa6d5a4a598fe9e74a0fba07505590b0a0da79bc70b81147615029aea0e69147414e19a178a2f91c595169d629bd89e49a00ba09c9da9a196a2bfa0bf9e91a2eba3b9a02c9e97a200a44ea0d19ce2a130a33f9f339b4fa1cea2859e359ca2a18ba3ce9e409830a1d2a2349fda9cb1a10ba30ba39388701ae31b37a5220bb810659869a664a067a60ea7c8a228994fa492a51fa0a79705a1aea27a9d5a9c29a05ba2039eaf9c51a0c9a18b9ebc9bfe9f41a1d19d999ba19f00a1e69d939b699feca0e89d4c9b0e9fcaa0949d359b959e82a0709d7a9a229e21a0c79c389aad9dad9f609c85996b9d369f309c0d991e9db79ed89b7e98ca9c3c9e6e9b2198639cd09dd49aa697059c419d719a1b974a9bc39cf8999796ae9a749c63994d96359a1e9c1799f095e699ad9bda989c958099279ba0981b951599e19a73989d94c798849a2a98339492984a9aeb9711945698fb99ba97e0930098bb999697f093e49746992d9742930a974d997996ff924f965b98d995ff924f965b98d99500000318dc18819100000318dc1881917b9d3fa46ca5b5a5e79fffa582a7d9a702a05aa6dba738a804a0ada632a880a885a03aa781a8d4a8b1a06aa7a1a8f6a885a067a7b1a8e4a879a035a77ea87ea846a07ba615a895a71aa003a684a78fa64f9f4da5dea69aa54e9de3a3f3a431a4909a5fa08fa175a105978f9c499e0b9fa898279d599f2fa05d9abaa0eca209a3a69da9a249a43da3aa9eeaa331a5ffa2a99e11a428a5a8a2289f16a4fca43ea2c79eeaa3e9a4eaa1989e69a3b7a47ea1339e2da39fa44fa12b9ea8a226a4fba0579d9da13ea3a9a0d99a8c9fe9a0c39fa2957b9a409cba9c6f8d0d955697679ade88b892b3946798e79135983399ac985798359c5e9d689a8f9ab99eb1a0f09cef9a5d9f61a1be9d539b509f30a18c9d529b4c9ffda0449df09a069fcda0269d6a9ac39e7aa0d09cf0994e9e25a0779c8299f39dce9f249c26998a9d5c9faf9bcb984b9d019f729ba898269dae9efc9a6898e59c589ec29a49988e9c069e509a1598529ca59d269a8397fb9b639dc499c796669b219dd1992e96d49ae09ca599c395509a8f9c97998695da99399c4a9967957e99ec9b419916952d99599ba6989e940e99da9a1c985994b3987b9ac697f9933898f199bb96e0932c98679901964b9388974d99a195c59334978d986094c59334978d98609400002b18fe18e49000002b18fe18e490719d38a465a5dda4cb9e61a5b2a667a6539fcca547a7f8a6679f29a6a6a753a7f09f6aa608a881a7989f38a6e4a773a7939f2ca6cfa744a7b09f01a698a7a4a6689fc2a535a7cca5f89e31a575a603a5f49d3ca470a534a4ff9cffa27ca408a3559caba168a3cfa1a69b05a197a257a1189c56a1f3a2bca1b99cfca1b3a372a28e9dc8a26aa4e5a23d9e68a3afa47ea2959e94a3d0a41ca2ef9eb7a3e0a40ca2e59e91a3d6a4c7a1db9e59a3b8a4a2a16e9efca276a467a1429e91a250a46ea15c9eeca104a4f7a0939d7ba188a3baa0c69c9da0b1a2bba0879b579f45a1ca9fad99589d259f2d9da197c89b559d139b7b95179b9c9c6699b296739c759dc7993899f79d3b9f4a9b839a9e9e57a04e9c069b909ea8a0d99c3e9bb99ec3a01b9df09a6b9eb7a0fc9c769a2d9e57a0be9cfa99ce9db29f469c8c99809d3d9f8c9b4d994b9ddb9e459b0499009d7d9ec79aaf98b79c469e539a6598799cf99deb99f297279c8f9db6993297919b4e9d8f99d296009b129d9d996c969f9ad19c3e993896459aa09c2399f895eb99539ce798bd95a399019ca49883955299789b4298f594f398fe9ad797b794c898ae9a7c976f949898549a419752947498d799949699931e98bc99cd95ff921397d198fd94ff921397d198fd94000000000000000000002b18fe18e490719d38a465a5dda4cb9e61a5b2a667a6539fcca547a7f8a6679f29a6a6a753a7f09f6aa608a881a7989f38a6e4a773a7939f2ca6cfa744a7b09f01a698a7a4a6689fc2a535a7cca5f89e31a575a603a5f49d3ca470a534a4ff9cffa27ca408a3559caba168a3cfa1a69b05a197a257a1189c56a1f3a2bca1b99cfca1b3a372a28e9dc8a26aa4e5a23d9e68a3afa47ea2959e94a3d0a41ca2ef9eb7a3e0a40ca2e59e91a3d6a4c7a1db9e59a3b8a4a2a16e9efca276a467a1429e91a250a46ea15c9eeca104a4f7a0939d7ba188a3baa0c69c9da0b1a2bba0879b579f45a1ca9fad99589d259f2d9da197c89b559d139b7b95179b9c9c6699b296739c759dc7993899f79d3b9f4a9b839a9e9e57a04e9c069b909ea8a0d99c3e9bb99ec3a01b9df09a6b9eb7a0fc9c769a2d9e57a0be9cfa99ce9db29f469c8c99809d3d9f8c9b4d994b9ddb9e459b0499009d7d9ec79aaf98b79c469e539a6598799cf99deb99f297279c8f9db6993297919b4e9d8f99d296009b129d9d996c969f9ad19c3e993896459aa09c2399f895eb99539ce798bd95a399019ca49883955299789b4298f594f398fe9ad797b794c898ae9a7c976f949898549a419752947498d799949699931e98bc99cd95ff921397d198fd9400000000000000000000000000000000c01be120d42130a50e21af25e12654a9762257276f2816abd922aa27a12812acdb227b279e284cac07239627b92872acfe22a727cc28c6ac83223127612845adb4219425c9263aad9a1e602029219cad3e8da6a58da8b0ae5920d7210d21e7ac962452276f281bab162515270928f8a910276d28a42836aaaf285b2965293caa3d29a9298929f8a96c29ce290c2a99a9ee294a29562987a93d2422ac75ae57ac06295626ae2290a8eb2a112b2e2a95a8da2ada2a5d2a9ba9bb2ab22a0b2aeba9f92ab72a162abaa91b2bfd2a1f2a00aa1e2bf82a332af4a90b2a0d2a672931a9fd267327ec26c7a66d207622e322e3a2f219991eec1f38a0b917ca1c171ece9e8416cf1cda1dda9d6e14341b891c589e41111e13ba15ca9f978aeb9764987aa00e14f01aa31cab9e6d167e1ddd1e409d4116e01c2d1e9d9cee15891cba1d619cc215351c741d2b9c8515091c3c1d009c5315b41be91cb09b11154b1bb71c629bbf14b11a631c0a9b6a14381a301c849a1b14b519b41b259a9e135b194a1ba19981131d19bf1a2b990813cf18761ac99883128e18fc196498f9112518b81928988f1101186519729740115e171819be9623111b17ae18ef953811341785187a953311311775187f957f10631698176d957f119c15f016c3940000000000000000c01be120d42130a5c01be120d42130a50e21af25e12654a9762257276f2816abd922aa27a12812acdb227b279e284cac07239627b92872acfe22a727cc28c6ac83223127612845adb4219425c9263aad9a1e602029219cad3e8da6a58da8b0ae5920d7210d21e7ac962452276f281bab162515270928f8a910276d28a42836aaaf285b2965293caa3d29a9298929f8a96c29ce290c2a99a9ee294a29562987a93d2422ac75ae57ac06295626ae2290a8eb2a112b2e2a95a8da2ada2a5d2a9ba9bb2ab22a0b2aeba9f92ab72a162abaa91b2bfd2a1f2a00aa1e2bf82a332af4a90b2a0d2a672931a9fd267327ec26c7a66d207622e322e3a2f219991eec1f38a0b917ca1c171ece9e8416cf1cda1dda9d6e14341b891c589e41111e13ba15ca9f978aeb9764987aa00e14f01aa31cab9e6d167e1ddd1e409d4116e01c2d1e9d9cee15891cba1d619cc215351c741d2b9c8515091c3c1d009c5315b41be91cb09b11154b1bb71c629bbf14b11a631c0a9b6a14381a301c849a1b14b519b41b259a9e135b194a1ba19981131d19bf1a2b990813cf18761ac99883128e18fc196498f9112518b81928988f1101186519729740115e171819be9623111b17ae18ef953811341785187a953311311775187f957f10631698176d957f119c15f016c3947f119c15f016c394f11a321fba200da6f11a321fba200da6e92051255026b7aa5e216826e92748ace221e5263028ffac1e22fb264a2877ad822230276028cdad1b2205272c2842ae51219c25682684ae831f2021772126ae7b1719a199a390ad219784a62aa847ad818bfaa335a541ad5f1c171b0c1a7fac9b2023237624c7ab5e248726cc26baaa672667272a2740aa1e286228d027aaaacb286d28ba2720abcc285b24b71d73ab0d2853a4a5a828ab1729751f459eefa9582a1b29352895a98a2a1b2ae428e9a90d2b992acd2959aa1f2bbb2a042ad0aa4a2bd72a0b2aaeaad62a4a2a7b290caa292904297a2823a99e248025452561a7291b281e1f1f61a3330cc617e0191aa17c12521a141c6ea03c143b1b801cfc9f5f12a8188319b09f10110d14441506a0fb8d889aa09c8da05782b098929993a08f14761acf1b919e0f15d81b031d7d9df814e41b281ddd9ce714c31b0f1d819c9c14701be31c379ca714581ba81c059c6014f91a941caf9b4214a61a461c609b12144f1a161c0e9bc613c619951bba9a2c137519231bef997b12e3185d1a9b99fd117618d7191f997a1126186019b2986011a417eb1870980a114617b5181798a410ef167f1886977c109a164618dd9669105f162f18fa9561103516c1178a95300f6d15c21619954c0fe514b91673964c0fe514b91673964318c71def1e28a64318c71def1e28a64c1fbb2317258aabe91f3b255626dcac272040257426cbad37201e2562265aae0520b5242626afae9a1f8c24b52536af431ebf2259244aafb11c1d20eb2001af7e1ac1160d188cae1117c099db9c06aec716b599cf9c89ad8e1162967f9cc7acec17ea15bc1008ac0d1dd51f001fa9aa61212622552163aad024d823d5229daa9c2671244f2239ab1b283b2409209dab87283d248c1dd3ab1429d5259c2164abea2913285b25bcaae52a6f293c2801ab102b002aed2822ab812b962ac9292fabe12a5a2a7929e3aa032aa129ed282caa3d277827e426eaa8e01f3b213d2162a62d8e820f561383a204945d8e400955a177922691168953a189900e9341923da1199033956b9672a0498f5d97a4982aa0508cbe976c983ba0b50bd205770707a01c13bf19341b199f7c14a21bf81ca99e9f14c31be21ce09d4a14d61a651c4a9d1014831a321ce29c8913401a011ca99c7b13311afe1b609c2a13ec19a31be19be212a519441b449bca126319e61aae9a51120f19841a4f9ad6119318df19ad99411120185c192d991e11a317f018c398c6106917be189498be100417a3184f9878109a166d18e497671069162818009864104a16f717a7970410d215a1175497700f30167917a096ee0dfc121914b393ee0dfc121914b39349142d1b971c69a649142d1b971c69a6431b6b21a42241acc41c23236e245cad081ca1226c2433aebd1b95223924ceae5f1a7921192336afaa19b3203d22c1afd418831f7520efaf9117201c541eb2af4d1200172f181baf038cb699e49a6bae0592ab99d99addad95916e99d097d8acd698019b819d52ac829a2c9c189ddaab4e91a198ad9b33ab4f1a758f6099c9aaef201616af992dab2724d819c09de9ab0d26ef1f39910aac16286724fc1edaabd828b2261d24d8abb8295f28352694ab382a3829122861ab6b2ab32975281fabef292229872895aa2528b827cb2644a9f82247231f2357a77213cc19b31a31a5fb988a97ed9421a3f8972897c19229a25f95ac93009016a29f926b8e468904a23c911191a18f7ba1718f1a942c95f5a0fa898f91fc926da0e806c405790d0ca0140e0d153517bd9f34121b19be1ad69e0e14bc1a461c5d9e6a135a1a371ca59d3a13031ab41b5d9d1f13e219891be79c84128b191f1ba39c5a125c19e61a549cf01107197b1ae49bb311c418fd19939b7b119018ce191e9b4c1154189219d59a0111d7174519779a87105817f418e29960100217a5182b996f10d41672189d9835107f1627182798181024161a181a98d80ffa159a174b97c30e6015e8169d96b60e4e152816e097a00ce511c410ca9ba00ce511c410ca9b06964d9856975aa606964d9856975aa6d3178d1fcf208dac3517f020d222a6ad63148720e6217fae91119d1f292119aff58be71d272078af3792da1b5b1fe6af4195e716dd1af0af4e97a4909011c6afaf99c499ea9a38af829b5d9f8b9f7aae7c9b399e829f97ade19be29dcb9df3ac859c4a9d889ecaac4e9d36a0a9a037ac979d19a004a10fac969c44a01ca245ab78980fa179a202ab56182da0e4a256abc620ad9860a046ab2124261e10900dabd9255d233320fbaab727b8255423aeaa3e28e7267025f4aa2b287a27f02554aa0f275126a8259ba94a234f234323b0a89518761a211932a71f9a699a6c9bffa5dd9ae69b799b2ea45a998799b0984da32c98d1988b98e7a27b95e896e19549a2ca9267940a92cfa145917790a28e53a1678dd68c0788b8a04582530f931049a0ec0de1164e18b09f2f11f518381ae19eab114119a01a8a9e39112f19851a1a9e4611cb181c1ae09d54118b18191a939d5b11b618161a4f9d49116418ef19d09cf6105a188b19609cff1025183b19039cbc10b41711198b9b65107c17dc18059b1e102b1779188d9aa30f6e163818fb993a0f1b16f1177299b10e9c158217cd987b0e1f1587167098ff0da014e1150d98550d291409157b97c90ca01374145397470b41129e13c8950a0d451308151c970a0d451308151c975c8d9116b51836a65c8d9116b51836a6cd947019151c82ac9d95541ac21cdaad0198f718191cb2ae19993416361a2faf679b579034119bafaa9bbc966591e2af669cb5991e98f0af689c099cf79acaafdc9c519ee79c4fafe29c359de49c82aec19c319df19a83ad079deb9cfb9d1bad3d9e1fa0baa1efacf89eb8a0eba18cacc09e55a1b6a243acff9e5ca186a24fab0d9f33a19ea275aa5f9ebea2eaa3f0a96b9981a150a31daa87151b9e31a1dea9de1dd60d5b9bdfa9ec206b1d1b18e8a9ba212020031eaaa9f0219b20072052a91c1f991db81d40a80488608b589269a6a19bdb9c529deaa42c9c289de39c32a43a9b859cf59b4ba31d9a009a0e9a36a3c398a69890974ea3ff96d396e995f9a2fd947c943992c4a25793a490ef8e49a23090ad863e88c5a1f58b760cd91027a139827613c0145fa0500b01169517e29f4c0d8717d918769fb20e88170119f59eee0e6f171719959e1b0f6417fe18b79dd40e47176318e29c060f12177818469c000fff167e18119c4c0f1a174c188c9b9e0fde166318159b390f97163818d19ad90e3e160318479aa10eec159417ee99380e47152d179d99030e5115da162f99dc0dcd143816cb981a0d4f1491150e98c30cd31307152997560c2f136c14b396350bd11241142d96160a8310e9115496160a8310e9115496dc11511cd21d64a6dc11511cd21d64a6d595dd1afd1c90ac6998611ad51cdfad8d9afd8f1117bcae559c429603113daf959c7599d5978baf3d9de49bc49ae8afcf9d039cde9af2afd49d359de39ccfafd09d659e609e65afdc9e9d9fbf9f8fae309ea19fc19f55ad6b9e2da06da03cad909e7c9f3ca11ead5c9eab9f4aa17dacbb9ea1a0b3a1fdabf19e51a193a232ab03a09da1fda24daaef9faca19aa20eaa059fa4a188a276a93f9e4da13ca2ada8099de1a07ca29da8179bbe9f85a123a85199e89d69a0d5a71b99899d309fd3a6759b1e9f789f77a59e9cc09d819f1da5af9c989d3e9eafa4969c379d6c9d7fa4069c8d9cd49c76a4c39a369b939b3ca44f99159a2e9a8aa31998eb974198cba2c89529953e95e7a1f793dc913a9129a1cb91be8ccd87d1a0a98ff6059e0da0a0358c5112e41464a048028815f616e29f30095316e3170b9f950a73166d18769eec0bc1164a18429e8a0cb9166718f39d4a0c0a16f1175e9de20c08163f17c49c860c5615dc16629cd80c23158c16109c780c4215c5165b9b310cfb140a160b9b0d0c7114d715d19ac30b3e149815519a7f0b1c147115269a360cf0133e15bb99190bf51295140999ab0ae21180132898500a941110138797580a831124122a9711073c106f11b89652098310f811a39852098310f811a39800004b90518e949800004b90518e9498989b4599a4988eac799c309c989942ae389d7f9c289ccaaee99db79d5b9c32afa69ee19dcb9d71afcd9e209f4a9faaaf779f36a06aa0daaf939f46a07fa0beaf18a0eba099a04caf32a06da0a0a05cae19a008a15ca139ad19a042a127a327ad34a095a19ca30fad23a0c5a139a372ac10a00ba260a3caabfc9f47a2b4a3fdaafe9f65a2d7a384aa8d9f68a279a3e9a9f79f22a23aa354a96a9f52a2f2a3e6a84f9fbba19ca23ba8ea9ea9a042a195a7c59d15a023a06ea7549de09d139e94a62b9d5d9d859c1fa50d9d499d7c9ca9a4079de79c179dd0a4629c239d639d79a4059c899cae9c1ea4459be39b0e9cd2a38d9aa89ad19a44a37199fb98e598c5a2549746955d9554a268946d90a48ee1a12b92bb0639087aa1f18faa0c001131a11b8de910581296a0788bde1184140ea000860b14d815b29fe38164144a161f9fcb01b614ad16969eff04e3144716319e0d0808158016ce9dbf07c1142416569d2a0981146216ed9cd3089d14dd15659cab0948147115ec9b3909001415152d9b200a9113d014969af0087d128614009aeb0813123d149e99bb08ae113d1316993708ca10c11295985c070710ba11fc97cc06e00ff4106e975205f00e4010399776024e0e840e4297db020f0dc50e5096db020f0dc50e50960000478a1b8b14890000478a1b8b14890b9c949a099c58ac699ddc9dde9ceaad1b9e2f9e399e67aef19ea49fc49e09afec9f96a038a06daf45a0b6a004a1a5af53a0c4a0c4a1c1af5ca05da1d2a194af5da05ea1e1a121af9fa064a1d4a120ae51a071a131a126ad8ba01ea148a200ad09a0f7a0c5a2d2ac4ca0bba1c4a362ac2fa049a2d3a3c5abe09f61a2f1a3d1aacc9f8fa2f4a3f8a9f89f9ea2b6a36da957a051a268a309a925a092a18ba293a8599f24a169a28fa8069f70a066a1f2a7299e8ea0eaa038a71a9e75a090a0b2a6729de99f20a0e7a5499d0b9faf9f24a5bf9c719e949ed2a4279c809d8b9d5ea4919be79cdc9c3ba4da9a529c9b9c19a4dd997b9bf59bb3a3f398e599c19a28a3f8977a9804996aa25396ad964f971da2d8949c937993aca11093c58fd68d0ca17591b5851f0781a00790040c0e0d28a0b28d7810a911fc9ffd88a7120a15769fbf858b13d514299fce811b145715db9eac81a913ea14249e8701e7130915689d2b045e13be14179d000406139014e69c640673136514969c050630121814279c5e03b1117613599b2503a310e211609af4024b107e11f399c002f00e7f10a099e000950d4e0f3b99d8005a0ccc0dc098d700c50a9a0ab598d280c00a580a8598c3806f0809072f97fb802809c80c2f98fb802809c80c2f98000040102d150602000040102d150602649d739a461518ace69de59dfd9df4adef9f8fa0daa075ae23a049a1c7a1f5ae5da07ea104a23eaf76a0a3a130a289af98a0cda15da2bfafa0a0dda177a29dafa5a07ca294a224af40a199a24ca34daedca090a246a33dad11a128a222a4ecacb3a0dca1daa3c3ac68a0f9a1f0a235ac51a01ea29ba3c9ab34a07aa2aaa342ab05a02da2ada362aa9c9f66a191a27ea9129f0aa172a2d5a8a49e97a094a144a8e49ec7a0f9a105a8ae9ecfa000a264a7ae9e6ea13da209a7319e86a0d0a0c8a6e09d02a064a005a6399d319f6a9f90a5d99c1e9e1f9eb5a43b9c049d4d9d67a4829b569c8d9c34a4749a3f9b1e9ccaa35d99059a369af1a26398c898b998b1a2a5974997f4977fa29d962696999686a26895099543955ca2b69483937593a9a19893558f9790c3a0f0910d8cb4863ea02b9130857f0603a0898fe704a30ca29ffd8eda0a5a0cfb9eb38d4d0ab80e4d9e628cd40c1f0e979db18a6d0c9a0d1d9d178a230c4d0db59c7588f90b1d0d899c4b88630de80e619cf885390db20e3f9cc885f50c730e169c5883b60c6e0cdd9b2283680c3c0c839bff802a0c0a0cf79aea80d30b530d2e9adf807b0b0e0b3499dd80440bc50aa79897822606840a51984285e901118f8b99b088e7815b879696b088e7815b8796960000b292c593e7860000b292c593e7869f9e12a160a11dac23a0e8a121a3c6ad0ea001a2aea21dae69a0c0a219a390aeb5a011a301a4efae1aa1e6a330a43faf5aa11ea4aea477af86a136a4cfa46aafc4a1dba384a4fcaeafa1d1a2aba34aae3ca138a24ba242add0a0bea18ea2b8ac6ca00ea157a283ac38a097a0c4a10bacd99fbca0e6a17eabcf9f39a114a2ecaa909f41a183a225aa649fe3a086a27da9299fd0a0fba1d9a8ae9e7aa093a185a8a99e97a05ea130a8639e5fa0cda0aba7ff9d64a0dba0d9a6cb9d11a034a073a6689dd99f68a068a50f9da89e4b9fe2a48b9c859d569ec1a4419ce29cad9d93a4e19bbb9c1a9d8ba4109bb39b709c1aa4359a569a949a5ca3229961997499d0a25e983298aa989da2de970a97ac971fa25d969295e6956da15d955e94739401a1cc94a8927a92afa00594e68e5e9050a08092c68ba5861aa07691d1843f86b69f83907584de853e9f36902d847785bf9e2b8fed832f85659e268eb103c984e89d758d3c033e841b9de68ce902f683a49c048cd202d2837a9c9c8bb702b183379c388aa6029083119c018a92826383839bad8971822b83a29a75895282ff82159a38892a82c8824e99f8882986e087d698d38800865b8a87989888e488288a3c980089a08a788d0798ae8a458da28e3594ae8a458da28e359400006f096113b30700006f096113b307a99d0f9f719b99abd69edaa060a1bbad33a04ba20ea3e9ad85a005a306a46aaecfa05ca3cfa3c2ae04a118a467a419af30a1f2a38da442af44a188a3a4a43daf09a1fda25aa4e4aed6a0f1a2f5a32baeeea0e4a2d7a322ad29a1aea2a7a3dcacbaa000a2daa17eac7ca0b1a129a2b3ab829ffba054a13cabaf9fa3a0daa174aa4c9ffca08ea2b6a9e69f8fa13ca326a9829f06a27ba3a7a81f9f5ca1b6a24ba8339e86a05ea1bea78c9d07a093a04ea75c9d449f7a9f71a69c9d6e9f5fa008a6689dbb9fa6a056a5229da09e00a046a5d59cb59dcb9e54a5989c2a9da19d03a50e9c289c659c8da4cd9ad69a0d9b09a43099ab99619a4da3e59809999a992ba33d984b98af98cba28697d196799740a253967e95f09502a2ac957594b295c2a1d39446947d946ca199940e94429407a12294459201949ea05c93c691589322a0ee923a91b092569f1692be901a92869e7a916a90a191b49d9990249052913e9d2a90b58fef90bb9c158f338f9890679cb78ed38e5f90129cb58d108d2e90c69b858d3e8e06907c9b5d8de18db58ff69a388d718d1b8f6b9ae98cef8cdf8fa2999d8cb58d818f3399b38b928d6b900399618b568d7e901899878b248df2903199668de88e0e91e197c78cd88de7900897c78cd88de790089700005114d2154b8a00005114d2154b8a839d68a051a0feaa25a0e5a2e2a34aaddba04fa4eaa4b3ad0fa182a445a52eae66a1b8a481a586ae71a1aea47aa5d9ae6da192a455a50baf45a15ca419a5feae30a123a483a4bbae0fa18da36ba40eaedca072a304a451adfaa0b9a2bca38cac7fa0cba1b4a242ac34a042a126a271aba39feea0bba1b4aa6e9f43a0cba10faa5e9fc2a08ea19ba9f89e8fa0c4a152a9089f92a0baa17aa8949e39a0f0a0eca73f9e27a08fa050a7389e2ea0a4a0d0a6019ed99f60a049a6cf9d669f25a0d1a54e9d7e9ea69f1fa5019dc79db99eeda49c9c669ddc9d9da4269cbc9c1a9d3ca4349b189cb89cd6a3909a2c9b179c8fa3fd99579a319b47a37e999d994e9a0da3ea985299089abfa234980298159934a26d9785962e98c8a1db962596f1977ea12596d695839632a1569572951396d9a014956a94a1957ea06594b7940d962fa0269459949295b59f4c93fc932b95f99e7c926f9377955a9e8391dd922895d79d19913e937695649d8290d1923395229d47907d92e594d59c918f5e919094819c118f0791be93289cda8eaf902a937b9b6e8e7d90bb92089bc48d62907192599a9e8de4904092cb99668da990e5911e995a8d53908e917d985b8d8e90e7911e98098ddc90919329983b8b458e229085963b8b458e22908596000096926590bc8c000096926590bc8c199e97a185a15caa23a09ba39da4ecacdba0d2a491a54dad2fa13ca52ca6c3ad9ca175a567a60baebea1b8a5bea65daed5a172a567a694ae89a100a5eca58aae76a187a40ca54fae3ca132a4aca4c5adb5a0bca34fa42dad9fa034a3d8a35cac8ca0ada221a375ab9ba050a2dfa2afaaf89f24a17da1e8a9329f73a0b6a037a9ab9efc9ee19f83a8349ee39d8b9e9aa7419ead9e939ff1a6589e569fcf9f8aa6ea9de19ee39f13a6359d009ea89dbba5389d709efb9e60a5cc9caa9d1e9e41a5a99cbd9d369f09a5679c1f9de79d04a51d9cca9c959ddba4a39b359ceb9ca6a41b9bf39ba69c65a4e89af19a079c2ca49e9af899db9ad8a3339a9999629a4fa3b299af98ee99a1a2f398589883992ba23f9814982f99cca10797ac97679881a1339663961d9824a17595eb95ad97afa05f955096309763a02b950996a497f19f829456963f97889f4c94ef958397e39eac93f795a4973a9e0593779511979c9dff913d95cc96b19c8191b5942d96439c4b917c94f395fa9b01915694c495ba9bf590349483952a9bf090fd933d95d09ac9907f93ed94689a28901893a494089ab68fc49272949a998b8eec9141943199c88d3e91ab93c098c58daf914e935e98798dec90b2920198838ca18e82929298838ca18e829292981007d9192b1ada961007d9192b1ada96cc9db4a1c8a2ebaa5ca068a44ba597ace1a00ca52ca6e6ac08a164a566a623ad40a18ea588a63ead64a1f8a5d6a68cad7fa1c8a5d5a6bead77a17aa584a6c8ad5ca123a5daa5b2ad6ba1e2a4d4a568ad38a198a440a506ad0ea17fa4e9a460acb0a009a48ba46dabaaa0dea32aa41faa9fa038a304a4fea805a0aba1b4a22aa82aa085a190a2bba7029fd4a053a19aa6ee9e75a0afa1c6a5e49e73a03ea17fa57a9eb09f35a038a5789db99e489fe2a4199de39dd19ed8a4129da59d049f21a50f9dbc9db19e24a5b99c199df49df2a45e9c819c419d15a5fe9b4d9c089dc2a45b9ba69b6b9c93a4c29abe9a409c66a4239a699a569b4ba4d5996f99349a27a4759983996c9a86a30799e798759ad8a2a5985199059b63a218984f99059bc8a127975199f49a38a1a596f698629aaea03796b998039a4da0ef95de98269a04a0aa959f98dd99a99f19959698dc99029fb2942a9856993a9e3e948197d598a39d1b9480967998159d11941a963698a89c4a93ad95f9972b9ca0924d95a097f99bd19108956e978a9b6491c9942397079bf2907e94c096a69a9f9057943d96c4998a90329480950f990a90f89316958398868f3a939e943898e98faf936a940898a08f7593b1941c97a98e269195930a98a98e269195930a980000779764982a980000779764982a98c09d00a28da383a959a087a493a562acdba054a549a68fac26a172a573a6bbac33a1aca588a6d9ac1ba1aaa5c3a6dcac1fa1f4a5eaa6d0ac67a1f1a522a7b6ac32a199a5baa690ac41a144a559a663ac37a134a53aa62eac3ba1faa4f2a5bbab1ba1b3a49ea5d8aae7a0aca433a5ffa9d2a06ba4dca4d0a899a08aa342a4a1a744a093a27ca39fa600a0aea185a20ea6a19f2da1e3a1fba5db9ec2a06ba180a54f9e29a0fca037a5fb9d909f22a033a5319d2b9ebf9e0fa5799cfc9c4b9d99a4069c4c9ce59c41a4739b6e9b8b9b29a4c29a639a359b15a48b9a229a239a0aa4519a4b99e19911a4d1990599a399fba35899ae984999a9a34099bf986599e7a2dc98db98859951a29b981499d19906a28498a599a49ac6a144980b9ad19b7ba1f197eb99c59b1fa19197d199bb9bcda0c396df99c49b90a07f967e99ac9b2ea03f967b99209b959f2e962d99069bef9edf951b999e9a609e2b9571982f9ace9d84940998ad99559d169466978c99d69cce9369975299849cac9317970999479c2293de969098e79b38935a966f98769bb792029656984c9b7492cf950898ec9af6902195a697ed9a9790dc94db96369a3f9084946896a199499086946496c999a78f429424965b993c90d092bb94a6953c90d092bb94a6950000f2182b1b3f8e0000f2182b1b3f8e0d9d04a16ca27da91ba04ea455a5baab89a000a524a622acbba03ba569a65dace7a071a577a667ac14a183a5c2a684ac0fa19aa5caa67caceaa046a559a62cacbfa0f8a4e6a5c8abb5a0aca4b3a50eab6ca06fa461a585aa64a0f8a3afa433aa37a0aea397a471a937a032a352a41aa91ea096a2e7a3a4a8bc9fd6a1ffa215a86a9f71a180a24ba7fb9ebaa09ba18ba6649e0ca06aa0f8a5c99dbd9df29d8ea5e09c049cb39b42a5459cc9990e99fca4b49ba8987e97c0a40f9b4d9731978ea4c59afe96e4965ea4419a6d93ba9450a4ae993290278b6aa4d09843090c1127a46598810f06142ca43898d808b11059a48998e88e7d9058a4b798c394bf9407a42d995097a99861a3a999bf980d9ad8a20999fa99189b1ca29498a29ae39b70a1d097149a3f9be3a024973599ae9a67a0a096bc99f39afb9f8a963d9aa69b619fb796c59a529cdc9eb296d59a609c1f9e8a967d9af89ba39d67961c9a8f9b349d0596b199449bb09c58953199aa9a2f9ce7942199a69ad09b7194ca98349a549bde9318984e990a9ba193be970199719a66934697be98199a1f93a8968b98a899f49262962f9841994292d995bd9712995f9160952397e5980a91349597968698489053940296f797a390fd92af94f494a390fd92af94f49400008b177419cd9200008b177419cd92059da8a194a211a9c19f55a457a5f1aa0aa0e2a4cba5a6ab1ba0cfa4bca52aac31a0e6a4d2a546ac55a023a5f4a55fac13a0d4a4c6a56daca49f76a42aa54cacbf9e30a322a410acff9ebba2c4a3a2ab849f88a275a323abab9f1aa22da395aa939f88a18ca209aa589f19a1a1a14fa9ed9e67a029a195a8539e839f00a00ca8e99d349e249f3aa7539d7e9da19d35a6019d559cd39cb5a5839c6b99989934a55c9bb491d08ce3a47b9a7d11d015b9a4a29928160d198ea434999d17f219a9a4fe987418af1975a4da984418751986a49d98161832196da42b98ce17fb1878a4cd971316b81874a4de976a14421796a40b98ae086f136aa45898cb94ca921ea4c6989998479988a3e698fb99c39b42a32999ae9aa69cd8a22c997d9a8f9c79a20d99499a979c8ba19c984f9aa39cc9a00598b79aa09c4ba05797d59ab09cb39ff596109b999cc79eb196ab9a4c9c049e4396569a389c8e9dd495289af79bf69c4d95b4997b9b879c0e9535992f9b339cd394cb984f9a329b82947898de99b09a4a9442988f99569a2a941c984a99d8999193cc970f999899b8923b97ca984b997492c7968c980a99cb9162964698eb983991d7951398b7985891df958d973d980991b59588973a98c891e59452967a95c891e59452967a950000cb19bd1bc8010000cb19bd1bc801b59d0ba317a46da8c09fbea4cda588aa41a0a2a58da613ab28a070a5b7a680ab15a09ca58da696ab2ea0aaa5d2a6c9ab23a06fa562a6e0ab08a033a549a6e1ab1aa015a529a6c5ab1ea0f0a405a676ab959f25a439a509abce9e26a20da4b4aa9b9dd39f8da024aa0f9dbc9b219cc6a9699c4c93200e51a9929b1a16f01aada8cf998d1c441fefa7dc98be1e002193a6f696a420452249a53093f820032211a5eb920f2115235da435916921db2239a40d8f4421a62219a40c8c1a216a2240a4b38bed202d2261a43d8e4e206321a0a496928d1e5e20f6a480953c1cd01d5fa54997c9163c19a6a585981e90ff0a85a5fb98049819972da5ed984699089abfa44399729bc09c62a4af99de9c509e0ba48199a79c1a9ed9a25f99ee9c199e94a16b99569d829edba04b99589d8f9e64a0ed98169d7a9e9a9f9398d09c2d9edf9e1098719cbe9d3a9ec9972b9c769dc59d0d97829b2a9d4f9d7196f79a8b9cac9c08962c9a269c269c8295c699f49bf49b579576998d9b8d9b569544996a9b329b08950799239bb79aae94b298d59a6d9a1a943898cc999e990b93c3972999ff98fe9267970f99bc984b924697c9987998e691a09683983498a19196964398f297aa90e99594970d97fb9022954797b195fb9022954797b195000052193d1beb90000052193d1beb900c9eb2a396a409a819a098a5d3a670a942a014a623a7f9a953a00ba673a775aa71a034a6b0a79caa67a04ea6d3a7ccaa4fa041a6c9a7c4aa56a036a69da7adaa89a027a6c7a788aab9a0f6a587a739aa10a191a50fa7d5a965a01ea556a65aa94b9fdea3bea47aa9909d919f52a0d6a9539b6b16001827aaf39811213623bda9090e8224022620a9ad18e225b02756a80b1a6526412897a6fc1bd126152853a5fd1bbf266f2860a4911a3626ef278ca4301a0c26072862a48218ba2576278ea44a192a2588266ea504178224922515a6af13ea229224f9a6fb8414217c22fda61293521db41ea5a6c397fc0f5b140ba65299f299979c30a5a8999c9b479d71a4379abf9c7d9edba34a9a319d769f65a3d0999c9d679fc0a1b1990b9ed19f9ea081993c9e06a006a05299159e09a0849f1b99ee9d07a0fe9ee498669d0f9f1c9e52989c9c339e789db797339c9e9d149d0597ce9b119d909c5496e89a859c2c9cbf95679a559cc99bad953c9a549cc79b6c95fd992f9c489b2795b6990f9cdb9af2941f999a9b969abc94c998ff9a0a9a5c945898389a8699f193d997b4990a99529392976999c398dc928d972b998998a6925597ec982598f3923597cb98c3978c920f97b098c79691934295a1966d9591934295a1966d957e145d19de180c947e145d19de180c946799dc9d739e51a0bb9ebca4f8a510a8ca9f9ca5dca6f3a80ca00ba673a761a952a054a6c4a7ada968a06aa601a8eca963a09fa61ea816aa5fa083a61aa8ffa99ca098a632a8cba9afa056a6fca767a98da0fda577a7e2a88ca0c7a554a761a8929f90a5ada6f9a6199ed2a451a606a7aa9e58a4a5a52fa8c49d40a08da0e3a91a1c1a27be282eac3e233b2cd42dcfabd124452dd22eeda8fc248b2dbe2e76a6a7243e2d472e02a49524d62cf62d7ca34024aa2cf22d0fa59e234e2c4a2d84a766217c2a2b2c52a9d91a2e289d2969aa8015ea235f253caa9c94d61c661fc6a8ab99a5996f9bb9a6419c069f52a012a5999db29f37a1daa3489cf39feaa01fa2ed9ab79fbca049a10e9b769fafa0afa0e59a1c9fa4a026a0a79aec9e92a0d29ff699759e7ea0599f9799eb9d15a0849e0099639d559fd29da198de9ca29e5a9d7998ae9c339ed69c5f987b9cf99d879c1d983b9cc29d3d9cbd97169c869d119c4197699b059d809bb896fb9ac19c0b9b51968b9a849cdb9aad951a9a4e9cb29a6e95d2992b9c7c9a08955d99c59b319aea9411993b9bc599bc94c298a99a4699a3949b98409aeb9858944f98f799fc98299426980c9a0e9909941c98009ada98149225978e99bf9863922e968098879763922e968098879700007419471acf9000007419471acf90f59cfea250a4e3a5389f4aa5d0a661a8499f88a5e3a699a8a99fb7a554a7e0a826a015a6bfa722a945a031a6eba74fa93da049a605a84ea95aa04fa6f7a731a975a027a6d2a7e5a826a0cca591a78ea819a099a54fa71da801a09ba50ea7bea679a07ea5c3a639a5aa9f69a418a54ca3989c3aa193a278a03595fa9bd49c769cfb02e805bf0295990b0a881522174b98270d86161518e297ee0cf9171f191f99d50d07186e19d299e40f4019651ae59a2f14b31b5e1c8c9c4e16881d511d229e8616841b561c6b9e3f976d9f32a180a0c39e81a51ba698a1e6987aa4afa5b8a09b9537a1f4a2cd9ec496c69f5fa2139f589d24a198a210a04b9c8ea0e8a1299f1a9c1ba056a1cb9ee89b03a04ea1de9e679b969fe9a0939e8c9b679fd5a06b9e239be89ea9a0059eb99a6a9e43a08e9d409aef9dc59f039df299919d549fad9c2799299de89e5c9cbc98e49c8f9e389c5a98969c119ef79bde97459c839d509b3b97c89b0a9dd59ab4960f9b9c9c2e9a2f96829a3d9ccf99f4951c9af19b9299b895de99949b23997a9583991f9bf0980a951d99e19ac698a894e798879aa49862949d98429a68982a945398e39940980694f897a59909981994b7973399a197e7933997eb986c961e939d96a19862971e939d96a1986297000006174b187491000006174b187491279db7a3d9a45ea5539f54a5bea67ba77c9fbba51ba70ba8689fc4a569a735a8f39f29a6d6a771a81fa060a60ca895a824a082a622a88ea816a073a603a85da80ca006a69ea7bba7a19f86a500a7b2a6139f1aa57ca6d5a58a9e90a4c6a5dca4739ea9a3b0a476a38a9cf4a168a3d4a18299819fa1a0fe9f4b95379cb89d509e2194039a489c3c9efa94ba999b9c4e9f8395bf9a949d63a0c896889b039e87a04995019ce39f3ea15096aa9bbf9d1ca0ea94f399749cb69e2f9258974599069d998caa94e997fe9b23881f93bb95f099338f1a979398c699b295899b579cb69a5c9a3e9f32a0a59c3c9c79a0cfa13e9e549c49a022a2c79e159c3ea0e5a1f79ed59bed9f8ca1979ebd9bb69f3ca1409e5c9b5e9feba0e69db99afb9eaca0b29d279aa29e63a0619d9c992d9e24a0e39c4199e09dd99f939cf7988b9d6e9f469cc1983c9d019ff49b8c98fe9ca89eb29b7298dd9c5f9e449b4798859c099e049b0f984d9ca59d989a6a97f99b5f9d689ab6963c9bfb9c649aff95989aaa9c1e9ab4950f9a559cce998795bf991e9c85996f955f99b79b4a9916950e991b9bd298c494f598979a44984b949e981b9acc97f5934198c09911971b94009840995a9646936697199912965e94a696839892945e94a696839892940000001897189f900000001897189f90129dcaa3dda4dda4489ee9a417a647a6bf9e46a58aa6bba6ff9e90a525a73fa7ab9fe3a56da7a3a79e9fe0a575a7aba7919fe7a57ea77ea7899fbea544a7f5a6699f8aa5f1a627a6ef9e16a560a661a50e9e77a4b4a5a7a45b9db4a3eea4dfa3db9c74a21da456a21e9c53a1b1a234a1809a8aa0e5a1bea0659904a045a189a097997e9fdea08ea04b9acc9f33a1f3a0399b45a070a1ffa00a9c95a0f8a134a15c9cf8a084a264a1b59c01a17ba257a1019cafa075a268a11a9c4ba0cea1eda0e29b549ff4a05aa06f9b509e15a0229f789bc49cf09d089d9d98059c3b9d0e9cfc96649bcf9cd89a8397829c649dba9afc989e9d1a9f099c1a9ade9e6ca0cb9cbe9a769fa7a00c9dc39af89e95a05a9dd39aa59e81a06f9def9a909e7ea06c9d7c9a2c9e6ca0319dc699c89d0ca0d49c92999a9d949f659c5a997e9d369f229c2b99499dd89ebc9be698f69c6a9e279ba798a89c199eeb9a6298669cc59d759a00981b9c7b9d0b9a3e97899b419d1b9ab796ec9af49cfb993f96879ad59cd799df95229aa89cbd999c95f399639c85995e9580992b9c699943954699ba9bcc98d4941199079b6798a794d198bb9a379861949898719af59739947298fd999397d5932298a299dd964593a5965f98e1944593a5965f98e19400000000000000000000001897189f90129dcaa3dda4dda4489ee9a417a647a6bf9e46a58aa6bba6ff9e90a525a73fa7ab9fe3a56da7a3a79e9fe0a575a7aba7919fe7a57ea77ea7899fbea544a7f5a6699f8aa5f1a627a6ef9e16a560a661a50e9e77a4b4a5a7a45b9db4a3eea4dfa3db9c74a21da456a21e9c53a1b1a234a1809a8aa0e5a1bea0659904a045a189a097997e9fdea08ea04b9acc9f33a1f3a0399b45a070a1ffa00a9c95a0f8a134a15c9cf8a084a264a1b59c01a17ba257a1019cafa075a268a11a9c4ba0cea1eda0e29b549ff4a05aa06f9b509e15a0229f789bc49cf09d089d9d98059c3b9d0e9cfc96649bcf9cd89a8397829c649dba9afc989e9d1a9f099c1a9ade9e6ca0cb9cbe9a769fa7a00c9dc39af89e95a05a9dd39aa59e81a06f9def9a909e7ea06c9d7c9a2c9e6ca0319dc699c89d0ca0d49c92999a9d949f659c5a997e9d369f229c2b99499dd89ebc9be698f69c6a9e279ba798a89c199eeb9a6298669cc59d759a00981b9c7b9d0b9a3e97899b419d1b9ab796ec9af49cfb993f96879ad59cd799df95229aa89cbd999c95f399639c85995e9580992b9c699943954699ba9bcc98d4941199079b6798a794d198bb9a379861949898719af59739947298fd999397d5932298a299dd964593a5965f98e19400000000000000000000000000000000eb8c2718ef1954a14a1f5524bf25aea853213e26312771aa7b215f26ab2736abbc217026bf2789abe2218c26f827d6abf72182260e2814acea219f26262844acbd21c2263b285bac4b214326fc2783ac841e6f2103212aac32206623ff2485aace21a024a22594a9a623bd251726a1a96d25ea263827d5a987269227c327d9a9d926d627ae278ba9ad26bd27bd27c2a8e2277928302886a7ca229ca47ca856aa1d1107ad11aef5aa39291e298e28c0a7d129d62967292ba9482a122a8b29a9a9592a1c2a652965a9352a2e2a7a2997a9b529b429102910a98327e42744276aa7c7215f23c62343a43d1cb81f8d201ba10118281d0f1e349f9b151a1cf81cea9e1013d21aec1bf79ea60a670ecb12d8a04395f49c489ea8a10d13a819601bdaa06016a61d6d1f3c9fcc151e1d821ee59d1c16b81c191e419dbd154e1c721dec9c6c15251c341d949c4a15cc1bf21c759c2615871bcc1c539ccf142a1b901c389cc114961a531cfe9b4014f719f41b569bb71383195e1b999af4122319de1acc99ce12c0184e1a4c99801273180c1ac29849125718b2197298b3111618791965989d11f4174219d99722112217ee184b971211df16721880963c11c9164118f895d810a0161e185f95cf0f121655174d95261011154a16de940000000000000000eb8c2718ef1954a1eb8c2718ef1954a14a1f5524bf25aea853213e26312771aa7b215f26ab2736abbc217026bf2789abe2218c26f827d6abf72182260e2814acea219f26262844acbd21c2263b285bac4b214326fc2783ac841e6f2103212aac32206623ff2485aace21a024a22594a9a623bd251726a1a96d25ea263827d5a987269227c327d9a9d926d627ae278ba9ad26bd27bd27c2a8e2277928302886a7ca229ca47ca856aa1d1107ad11aef5aa39291e298e28c0a7d129d62967292ba9482a122a8b29a9a9592a1c2a652965a9352a2e2a7a2997a9b529b429102910a98327e42744276aa7c7215f23c62343a43d1cb81f8d201ba10118281d0f1e349f9b151a1cf81cea9e1013d21aec1bf79ea60a670ecb12d8a04395f49c489ea8a10d13a819601bdaa06016a61d6d1f3c9fcc151e1d821ee59d1c16b81c191e419dbd154e1c721dec9c6c15251c341d949c4a15cc1bf21c759c2615871bcc1c539ccf142a1b901c389cc114961a531cfe9b4014f719f41b569bb71383195e1b999af4122319de1acc99ce12c0184e1a4c99801273180c1ac29849125718b2197298b3111618791965989d11f4174219d99722112217ee184b971211df16721880963c11c9164118f895d810a0161e185f95cf0f121655174d95261011154a16de94261011154a16de9474092a1cba1c9e9d74092a1cba1c9e9da41ed3237425a1a9992086259926e0abfe20f32542276dac232128265d27cbac66214226ac270dad5221542696274badfc20ac250e2798ad002095238a24bcad3f1ca40fda96d0ad62187c9e2fa174addc19680f7890c8ac641cb41f1a2003acc41f4b2352244cab3922b1255626a8aa7a2400261b26bea8862689274627faa8092857282c2852a9af281b28872681a980273e9c58a528aa2828c1924aa5dda989294328f125c6a8bb292829a62805aa8f2a282a4029c0aa342acd292b295baa82295f29c728d9a93e2871283d2831a959242b250d25fda6771c431f0c20fea3ba0e2a154e1790a01f035e10fa1548a0280da712351520a0cf02d0903c8f629fa58c7e980f994b9fee900e9ad09b8fa06482ec961298a2a1ea10f414621685a0d613fc19f71b959eb814a71b001dbf9df214e41b221d6c9df0148f1bed1c339d9714781bdb1cdb9c8a14571b9f1c9f9c4514ef1a671c499c2614851a2f1c119c8613fb19b41b7c9b3b136b190a1bd59aad12f518641a349a25129918ec19bd99981111186f1943992011c117fd18d398f510301798187198c310e7166c181f989510b3165218c3978b107d162218259759105916fe175f961810031689178f959d0eb3148c151895a40f3d1586176c98a40f3d1586176c984b8f4b8c0c10649f4b8f4b8c0c10649f1d1c88212a247daafb1eac2449258facf91e75248125e7ac151f9324b42557ad1c1f99247d25a2ada91e38248b25f2ad261e2223cb241faefa1c232129220fae9a1b081d0c1ecfad7118878f8c9093ad9c15d398e29967ad4595e39c3da0c6ac4498ab9b289b8fa91011361a5016cca8961ce81d011d5ba9cc20781f371ee0a8cd223c1f4b1c22a9a824fd1f5b1170a90c26271e319da8a95f277922c491aca93e28de253c227fa9b628e1279125a4a90f29a4283a273eaa9429eb2822280eaa3f28b327bc2653a914258f25182578a8c21e9820c620efa51c0c31172a18daa37f93c18e7f0919a2a2925c93278965a1139222933f9264a1ef905295649504a15e908897ac98bca0968e95974498b5a048821e944594cda0ee107a161a1896a01414e61a4d1cef9f3d14fb1a811ce29e4a14c91a691c1d9ef013701a371c809d8d13231ace1bf59c2313d819b51b9d9cee12c419601b699c9a126f19f41a0c9c60122c199d1a7b9b3612c3184b1aea9adc117c18b419489a43110a182219ac9906116617ec184499b510ef169218e6989610c2165118a5986910bf164918729869107c16551855985f105f16201849983c102e1617184098720f901591171898560f4215d416d4968e0d0f13ad146f948e0d0f13ad146f94bc079c190c19a99abc079c190c19a99a12194f1f2c215cab541bfa21d123feacc41b3422d22347ad381cad224124ddad7c1b3122662327aef91a2721b6227aae8519ed1f4621a1aeb918341f4f20a6aed617721c461d57aef00af58fc69026aef995619d799e2fad309b52a093a1d6aadb9a439ea1a009aace9be99cbe9daeaace990b9cd99b7caa4293139cae9d48aa84174c9cc39e5faa881e5e982ea0d2aa0122b215c69d27ab8a244b1f2c10f9aaf025f123d320cbaaa2260125012338aa332646251d2480a9d7255b256224b9a83e249223d82122a8531ef61e0d1ffba6e2868f136414ffa45098649286901aa4f0974f962a905fa3589606950b90fea22c948493cd8fbfa26b9117910489a8a22d90b790228f50a22c90a794e394c5a1d58bd492c0923ea15509100f6f10b6a0e20ea415e21769a06611a618cf19969ff312061aad1be89ecd12081a001c5b9eeb12df198d1b009ea6128f191f1b839d29123a19ae1a2c9da611d518381ab29c34117e18d119649c0911451894191a9cd21013185719a49baa106817dd180d9b3710e1169718779a05108b165918c599fd0f6716611869992a10b016571805992a105b1642189798ac0f3316f2174c984b0fc4155817a997820e6015f716f796770dde142f16a097e70eb1149c16e697e70eb1149c16e697af8383111a0c4d99af8383111a0c4d99f014411de1201fac99120b20c12076ad70163d208021a5ad69151620672124ae2114b81f9b2088ae3211271e4120d8ae0d8bd01a391dedae4e91f518ef19efae97941a10de90bcae2198329b2b9a70aebc9a879d9a9e10adc39d6fa1cda25daa0a9b239c8e9e7bab3f9be09ba39b7aab189cce9d0c9ecdaa499c019fa29e7daa749ac89de49e70aa6e97dc9dad9f36aaa6166e9b829eb1a9ed1c5c8d1f9c7aa9e21f721b8a146fa958214b1e4117f0a8eb20a620861fcaa85d1f3d1f2b1e62a70e198f180e1872a63799a99ac4995aa6279bb89c439d34a6059bc19a899b7da58a99419a839946a44098ba987b97bca31596f095a4948ba349948f943e9219a31d927a92b19154a2fd8e2a90338ebfa1ad8b1986a0072fa154065612d514c7a0900fbf174a1929a02311c218641a949f1f1126197a1a439f11111419681aa79e3e11b518011a639e26117d18a319009ecf10601891197f9dbc1004186d19fc9c64109b170819819c40103d17be18239c1d1017179e18d79b03108b163e18599b640f3d160c18ce9aed0ee115a3170d9ace0e6f155617a399580e4615ae160d99a40d86142016b8980a0d04141e154498e60c34134d149197440c7312751352970d0a64129913a295080c0714be145b99080c0714be145b99d2807a123d13d599d2807a123d13d599998ed11afd1c0dac1c90071bf21d76ad6693cd19641dbaad89952e1ac91c58ae6c977b15791977aea3987c0fca16afae8999aa8f9910caae859adc950997edaec39a179b0c9ab1ae4f9d8d9fc89f06aefe9e9fa246a333ab5f9d069e3da119ab009ef5a0faa155ace99c899db19defabc79c0f9d389df9aacd9cc49d4e9df8a92a9df69d499e55a9529d9da019a10ea9ea9c8aa00da1eda8c19b30a0faa0b2a8299a049d2a9d24a88095e49ac69c18a8a695949a719c08a75599209b4f9cd1a5a79c8a9e049fdea48a9d8f9fa79fdea4b29cd19d4a9e9ea45e9b9e9c769c69a42f9a5f9bdf9a1da4e7984d997198c6a3e6970b97fb9590a38296a4956f9434a39894d890278feda2cd912b8d538848a26c8f0006d40dc4a1988b150f841287a12f024c145b16eda03d0b6c1613186aa0460d4b17c61840a07c0e4217e218af9ff00e3a17ea18dc9e6d0e4217d018229ebf0eb6164818519df30e80164f189e9c6c0e74161618429ca80e84162a181b9c090f53164218c09bbc0e1b16ca17439b640ec2156517b19a310e2815fb16209a8c0de614a616aa99d80db314031611999c0d7414c215b0983b0df7131e151c98b70ca31399144697540ca4124b14c996580b89137814d295c00b1212be122f97c00b1212be122f9736811d16a6166d9a36811d16a6166d9a24966c185c1924ac4499938ede15b6ad6a9a31952010f6adc99a76955f1074aed99baf98b7968aae699caf9ac499ceae7b9cd49adc99d9ae069d7f9c339cefae429dae9c9d9de6ae00a095a15ba106ae39a024a320a3beaa659e87a052a1eeaacb9e07a1d5a12bac519e74a03ba196ab439ea3a075a172aa3e9ea8a07da1e2a9459ec3a0bca185a9749e37a14aa251a99d9df0a0a3a116a91d9e6da09ea048a8289e30a0b2a09da7459d239edf9ecea6159d0f9d839d3ca6449d279e089f04a5319dd99e709f2ba4999c7a9b3c9a38a52e9ce99bd89a6ba55e9c559d379dd9a4b39aea9b1f9c76a45899a49993993aa427982a987f98dfa3359678958b9502a3d094be935c9119a2d992d98fdc8d6ea1f7900986770730a1518e4f0c8510eba0e589ea1189147ba0440287146b1603a005067e15d016709f8008b515e117ef9ef1090c162618b89e2c0b0916e017399e440ccc15ab17bf9d2d0c6c150017fe9cb00c3a15a2167c9c490c03156116329c750c27152416d89b360c9314eb15909b1e0c6c14cb15309be30b3d149415ec9a840b0f14fe14b09a520b3313c714049ae5092c121b1472999c092f11ad125f9852095e11301283974709d610d11157973105f31036129d967f0bd813de14e3997f0bd813de14e3990000ce85868825900000ce85868825905299d393cd942dac7b9be9990b96e2ad9d9cc19b289bf9ad319def9c9a9b58aec99dfd9dfb9c77ae399eff9e3a9eb1ae5a9e319f809fbeaef09e589faf9feaaeb69e8b9fed9fd2ae1da000a15ea1e2ada9a0f3a212a4ecaa819f7a9f01a123abe49ead9f04a02aac8d9e0fa0f39fb0aba49ebaa09da1bbaa309e11a0cfa003aa439e64a098a07ea9c99d9b9f8fa0eaa82c9e49a074a06ba8cc9de69f30a05fa8659d599f30a015a8c29d2aa083a096a7b59d0ea05ca0cda67b9df19d339f44a5f89c349e8b9efba3969cc99c759c1aa57a9ca79c649c2ca5b59b759c319cbea4fb9af29b129c9ba4749ad49af79a43a4ae99ba99bd99d9a36b987f97d09633a352958390c18e8ba2f392b7863208f8a14a91d20c041194a18c8f780f931239a1e48cc2100a12b0a0578bb711671441a0ec889112e014c79fcf81411346154c9fb681ed130a15cd9ea2012e146315429ec2045714a315dc9d9b072114f215749d34075814ab15ed9cd00816143415869c7c089813cc140e9c14080013d914449bb507791281148f9a750705129913e1998d07b111311391994707e6103012219980063310ec11c1985907fe0e03115898aa06ca0f4f1018983105e80e4510d3975b04b40f18102c987702bc0cea0c6a967702bc0cea0c6a9600007d88598c598c00007d88598c598cc39aa199de9af8abdd9c439d559d8bad6c9d4b9e7d9ed5ad6a9e879ff99e57ae3e9f6da02fa085ae659f83a051a0b9aed89f97a0efa0caae07a0a8a0a0a1ebae4ca0b6a154a2abae7aa181a32ea4c4ad52a165a486a47aaa48a069a284a39daa18a04fa2e4a2b8ab0ba0f6a191a2b6aa6e9f31a18ca253aa439f7fa138a2eea922a006a1a2a15aa9eb9e8aa08ea11ea97e9e97a049a1a4a8509e33a0cda055a84f9e7fa034a1f3a72e9ec89e1fa0fca6b19d309e6e9e3da6569f60a0c2a010a54a9e56a0e2a071a4de9c479d749ed6a4639c069ddc9c05a5e89ba59c859caca4f49a0b9c389c72a4f399f69a3b9b42a4fe98009a269ad8a345989f981e9925a3ef96c59765979da2c9959195f8952ca23d9415930093d0a195920e91819020a12191bf8eb186a7a068902085760664a09e8efc04b80c2da06e8cf40d4f11df9f93881011f913869f1185c9126c140f9f95813712ea13299e74818c1221146f9d56012c12e0132f9d4801ee11a213069d3b01af115f13bb9c280151110512579c110138108111ba9bff00c50ff410c39af000410f9f104f9ae500c60d7e0fe099df00900cfd0dbd99dd80f208880a7899d780d608f50763995a82990573028598c280bf0ba60b8397790686122f13d298790686122f13d2980000dd0f960f01870000dd0f960f01873c9cdd9b30998cab2b9e9f9eff9e65ad309fb7a0a7a0b8adf19f74a18fa141ae30a01ca247a261ae33a0b7a16aa285ae41a0dca1f6a1a1ae2ca077a117a2c8ae09a016a1a3a190ae1fa199a3f0a38caddea0cea34ca44daa6aa02ba2cda341aa0da02fa271a207ac069f86a009a14daba29f60a15fa29daacc9f0da142a1f0a9cd9ebba0b8a145a9fa9df59fdda0fca8f89db29fe0a026a91e9e2ca086a06aa8199ea4a0baa103a8869d349fb89f41a7c99d179f019fd0a6b39d4da0cfa0d6a5ce9d30a028a1b1a4169d699ebf9f75a5159cfb9ced9c4da5a99bd69ce29cd5a4ed9a8a9cee9c6da4129ac59b819ceba364993e9bb59b04a3b698769ad09abca2f197d298e098aaa293967f97339771a265957f95ec9542a28f9457947f94afa1da9349921792d6a099928690d88c7da0b691768b408640a02990ae84e505d29fce8e5e048605559f748d0604c30bb69e3e8c9809160bfa9dc88b11095c0d4b9dd789d108230d149dab89b308010dd19c6588a90be20cb39c40886f0bba0c8d9c15880b0b7f0c379c9485a10a420cc59b2b85270a010c4f9bba84ef068e08be9a9d827f0654080b9a9a824d0623089a9992822f0607081e99c28503829d027d984288a585518a07989884200fa00e7a969884200fa00e7a9600007a90c792738a00007a90c792738a479d729f86a077aba49f29a26aa260adad9f1ba25ca272ad18a058a2c5a2ecad57a0a2a283a31eae68a034a3bea34faeb1a070a3eca374ae28a112a460a498aeaca13ca420a58eae84a2dda424a6adad97a130a5f9a575aa15a0f6a193a3aea907a0c0a16ea250abe09f4ea100a2d3aae89f70a117a252aab49fd8a1bba20daa659fe7a091a145a9619e0ca0f3a0d4a8d99d829e4c9f32a83b9dad9d5a9eaaa72c9e6b9e329fffa66d9e7ea0baa0d3a6609e5ea097a14ea63f9ed39f19a16da5fd9cb69eb1a0c1a4a69cad9dff9e5ca5259c6d9d489e78a5e49bb89c7d9d22a58d9b8a9ce49cd6a4859a5e9bad9b85a49799299a509ae4a39e983599389922a31a980b987998eea2f39698963c9754a268950d95699599a1ff940d9425941fa176949193c793cfa0a0938690159071a0d792298eb38c5ca0d491e88a708c06a0cf90698a2f8c949f15900e8ae08bf89ec38eca83918b8b9e848e8383c88add9de08d1983f989099dc28cdd82ba89b69cf48bca829589b69c9c8baf8274897d9c6f8b9e8247893c9c2c8b8d820c89e29bcb8a6d822283279b688add8663884e9af88948860c887b99c389f3885c8a0399c088cf884a8cac9860889d88e18930986088a8881a8c2e985f89998c96909c965f89998c96909c960000980e830d5b870000980e830d5b87179ceb9c909ce5aa369f2ca138a237ad1aa054a225a355ad5ca0f6a205a4c2ad83a08aa314a4d7ad8ca0a7a32fa4fdadcba0daa345a41daecfa09ea362a446aee2a0f0a38ba43aae01a1e1a3c0a488adf3a07ea422a591ab4aa280a587a614aa43a158a4b2a4b4ab0ba059a2a7a3d2aa8d9fbfa177a23caa89a0e3a143a28ba93e9f18a1c0a1efa8799e0da03da174a81c9ee59e2ca010a80f9e08a0a6a0ada7679d22a0a3a03ca72f9e64a095a07ba64b9ec3a0baa10ba6b19d1aa0efa19ea5aa9cfe9ecba03aa5ad9c5f9e1e9f74a5409c7d9d839d76a5a99ba89c119dd1a4b69a579bcf9b82a4ac994a9a8b9a2ca4199987999899fba37198de98b9987aa3e19702985a98e4a2e7963f97009764a2e0950296a89614a25f95c8956196d4a13795d194279681a1ac949094d29518a129943d948f949da0f2939d931e9412a0ff92e7928393429f549254921d94909e7a911b91d293179e2891f6905d92b79d4d909b90d8911e9df18f45906e91a09caf8e9d8e2691459c248e398ee4900e9c178dda8da390b09bd18c9f8e5390fc9a818c148ef78f6c9a5e8cd28d9e8ff999698ccc8e7990c399588cab8e7090b7999d8b7d8e299197993a8b378eef905899198daf8d238fff96e08d648dc2909496e08d648dc2909496000070105210c289000070105210c289da9cbb9f06a03daaa99f95a287a3ddac49a0cda379a40cad9ba048a4c7a472adcda068a421a5a3ade7a082a44fa5d6adfea09ba427a5e0adb7a03ea4fba4f8add6a01da4caa4ccadb5a0d1a386a4a8ad0ca1a8a4aea496acc3a026a4aca4dda9eb9f54a20ba397aa229f86a147a26baad49eaca038a1cda9c09e9da0d5a135a9a49eada04aa1c4a83f9effa0a2a18ca87a9ee7a012a1c1a7df9d8fa051a127a7e69d74a0dba029a6f49d44a0eaa0d0a5909d1da06da1d8a54d9d0aa0eca0b4a59c9c579e239f5ba5579c999dc99d17a5e69baf9c0c9db1a4599b1f9c609c85a4849ac59b259c47a4fd99de9a389bfea34e99059adf9ac6a30a99cc99aa9ab2a397988299c59936a33098bc987b9900a37797fb9721998ca2ee967697dc9834a23c960a970998c2a1aa957f967c973ba115956c95ea96baa073940595699649a02e942d959c96bd9fbe93c0942496dd9e7e926c945696699e05928b94fb95e99d4f9149944f968e9d99900f948595529d5990f0922b95dc9ca78f5392b994559cdd8e3991e293fd9b2e8ee0903293199b198ebf90e692d09a0b8ebc900a924e9aea8d3b91f791e0999d8dfe9061924a99118da5900d92b298cf8ccc90e3916a98fe8c33900c94de98d0884e8a8a8e9397d0884e8a8a8e93970000d093939623930000d09393962393049ecca1c0a2eca960a0a0a3cba490aca9a094a454a5d4acc2a0efa4a1a529ad01a101a5e2a530ad07a10ea504a64ead0aa1f7a4a4a561adeea0d1a47da567ad06a185a455a55daddea052a421a538ade5a092a41da5c9ace1a09fa4e5a492ab20a010a4baa4e4a85c9f65a2aca34ea8de9d73a0e9a014a8089d919e769e52a7ec9cb29d0e9f97a6e49cc99c389d01a6c19c0f9e12a04ba5a59c1b9da39dd2a4849c839d569e57a4359cfb9c329d25a4ff9c7a9e16a007a44d9c7b9dfd9ecaa4f89b549c7e9d38a5109c929c199dd1a5aa9bc19cac9d4ea51c9b379ca09cfaa4aa9a119c659cbaa4419a299be79a68a42b9a379a2c9b24a4fd99b8999c9aa1a333993b99169ae3a2a998e498b69998a21598a1987d9935a23c975b982699b3a151960798b19815a1a89589976298a5a05e95369785985fa0ec94e496539817a0949407971898919f109468961e98d59e319336961d98049e8a92a1958a97839db8910195c396b29c6491ad944d96609c0a91a79442963b9c24913b940996ef9b1e910994b495809bcd90b793f694da9ab2903d93ae94a69a1590d19270941f9a578f8a924494e399638e46921a945599978daf910e94f298b48db8910094b898238db7913b947798218daf8ea191e298218daf8ea191e2980000e60ec70993940000e60ec7099394119ddea0a1a10baa3ca028a428a586ac99a0d1a4b8a598acd0a029a523a6d0ac06a169a56aa6ddac26a188a596a6ffac41a170a573a60ead4fa14ca551a620ad6ea12ca5e6a509ad45a1e4a4daa5d4ac39a10da5daa5aaac34a11ba5f2a523acaaa071a452a584aa80a077a365a422a714a062a218a467a6f59f90a169a33fa619a052a1c9a2a8a5379e95a058a184a4e29e469f16a05ba3ef9d3f9e26a09ca2449d489e07a001a35b9dbf9ede9f23a4609c7d9dc89ed5a4649c8f9d879ebea5509c429d2b9e6da5429cff9ce19d47a5c89bc79c2b9d04a51b9b429c8f9ccfa4779a769b539c8fa41c9aa49b179c50a48699919aad9b21a463990f9ace9be1a3fb98269ae99b3fa37f989599499b8ba24298b599699b12a2d79772990b9ba5a1f99623998b9a22a1909619990a9aa3a02b96d498169a45a0cf95e998309af99f7d95ee98e299949fdc948998d199e69e4f9418984d99499e19947097d698999d179405979098279d1394a4965398e29c9093dc9525988e9cee927b95fe97669c09923895cd972e9c7591ea947597fd9bb390a694ee963b9b92903094fb95409a2e904994a8959299968f1b9443950699e38efc92c794b298d58e6f9397945e98e18dc59292948397c88c26906e931698c88c26906e9316980000e7974d9947940000e7974d994794799e8ea221a435a983a0c7a417a61aac8ba0fda4eea52aacbba01fa543a65caccca04ea550a665aceba063a577a68dac15a160a573a67dac05a14ea55fa670ac11a1f7a4eaa53eace4a0bfa4e9a525acdaa0b3a4a1a5c7abeca0aaa499a559abd6a0f7a4c4a5c1aacfa07da461a5cba9cda0eda35ea455a73ba0f1a382a482a4689f0fa282a3a0a4cd9ff6a1c7a368a4fd9fe3a252a47ea4609e33a1a5a21aa5479d3d9fa0a0bea51b9d259fcda0eaa6d99c549e15a040a6839c0c9dee9d83a5f19b629c0f9d1ea5579bb79bf59bfaa4fd9a6e9ba99bc9a4879a1e9b6c9bbca4419ad09ad79b9fa43f9a749a769b7ca4e999059a069b24a45b99dd99de9a64a3c398c399b69a83a289985b9a7f9b45a27698e19a1f9cefa14d98b69a479c7ea11c987e9a359c20a1b497179a049ccaa0f3961d9a0d9cb2a08e96c699aa9b41a0fa9578992b9bc89fa9956999099b1f9f54950a99999a5d9eed949798049aab9d3494e2977b992a9dc9933d972a99bf9c309352973399739c11931197fa98259cf892f1969398c49bc492719674988f9b919226965598289b7d929195f097df9aa291f2945097a99a0391c994ef96509af88f56943d96a699199060946e96009a398fe393dc96119a299046931a951a95299046931a951a950000e0175519e9890000e0175519e989779d8fa16ca215a9c99f4ca414a5e4aa53a0d3a4b6a58bab46a0d3a4e7a5f8ab5fa0eaa4d6a510acb5a052a525a632accda05ca53ca642acdca05da539a634acbea015a5f4a502ac92a0cba4a5a57baba4a076a45ea5ffaa7da02fa4d8a47faa53a0c0a379a409aa2fa07ea37da4a2a9d69fd2a213a41da9249f99a1f9a295a8dd9e39a18ba230a8259e57a07aa1bfa7529d709e0ca01fa7a19c2f9def9d91a6629c769c799cfba5099ce69a8d9a9ba54c9b09995c9883a5a59a2298499889a5379a8696699670a5c5994196239634a57d998994229403a55699a2958e95cfa430999796ef96dda4cc99ff98ba99eaa4399aff9a8f9cb2a4319b559c239d02a4bf9a729c5a9deea2269a8e9c889d7fa25d995a9c539ddaa1d8984d9c1a9d80a14898729bd99c1ea1bf97839a3d9c96a04b97bb9a189c24a0f596e49a619ca49ff696f89a689cce9e7296839a009c439e3396fc999c9bd09dbb959e99419b689d46952c99ea9ad69ceb94b0984a9a4a9c869482981a9a299c2f945a98b699df9b2c9301983a99469b0d933597b1989a9a02933597b798319a5293c0968e98ce99579394967098a8999d92579620987999ba91a595aa974c9907913595aa96e2984b908e943d9692980690859276942695069085927694269500001e1a321c539100001e1a321c5391d19d0da27ea3baa8f29f8ca488a54eaa04a0c7a4aca5e1aa03a0c2a4b5a55bab18a0d8a4d4a598ab12a0cba4cea5deab23a0b5a4b4a5f5ab24a097a4c3a5f4ab34a06ca466a5abab2ba026a466a569ab28a0b4a3afa41cab23a01ea347a4abaaba9f2da233a33daaaf9fa1a1d1a2dda98b9f0ca120a282a9f59e38a011a11ba9999ede9fb0a0cfa8d99d419e469f64a8099da49c389de7a7559c0b9b759a44a72d9b09989e95d0a63f9a26914d8c84a65d99e9102a1543a6ee9877157318ffa50e996c139d16d8a54d993510651191a5d8994009bc0a51a5d6994c8f578a33a55a99b2916893dca40399d394b597c6a4d998c998389a75a41f99df9a239c1aa447994e9c499d80a32199579ca99de8a223995a9cad9d57a2dc983c9c7e9de2a1db98119c129d3aa16598789bd59c81a0fc97299bad9c03a05b97059b989c9b9fcb96f89a839ce39e7a96cd9a639c2c9e2596709a359ca39dab950e9afe9b389d64959a997a9be29c3b9524993e9b749cf894b398519ad19bb2946898d699a09a5b944698a299659a1f940e984099fb995893bd970699e799b1921a97bb9890993392889671984099e9915d964f9817995391d5952298ea987a91d795b6977698fa907d95f997be98f091669501983295f09166950198329500008019641b140800008019641b14088b9d8ba210a461a8b69fa8a4d5a5efa916a01ba523a677aaef9f15a51fa6d8aaf49f56a548a6ecaa15a055a56ea6ffaadf9f22a531a6e6aa929fd1a4d2a5d2aace9fd0a4d0a5a9aa12a0e7a4f3a55baa2aa0d5a4e1a549aa2aa08ca4aba529aab39fc5a3d8a4e1a9f69e5da2b4a3b3a9f89db7a0a0a195a94b9df69e15a058a9609cd09b499c12a9b29b2b979898cda8e79a0b8c240d75a84f9960199c192ba81898f81b1a1d94a795962a1d051e18a74596f41c421e99a61f96591c7d1d77a676968f1bc71c59a66a97fe18421b3aa6909860109e142da6929991971c96f1a5029a459ba29b92a5f899309c939c2ba5009a5e9c2a9db5a4d199899cbc9d4da4ef99249d8c9eeda3fd99039e649f30a3af99c49d669f29a28c99c59d739f4da1bf99bf9d5c9fe4a05c99619de49e4ba0a198fb9c629e9b9f4698c39c279ef99ed397579cd59d9d9e4497179c6f9d2d9eda967a9b049ddd9d76969f9a7a9cfb9c0b96ec99019c789c8b95ae99c89b3b9c419586999d9bd69bfb945d994a9b809b9b94d8988a9abb9a25946c980c9ade99b6930e9871994999449384970699de9800937297c6989e987392fd96ad9887980992a79649982398ab915496249800985a908f95c397c3970f912695799772950f912695799772950000e919fb1a3e8c0000e919fb1a3e8ce69d32a394a4d7a721a079a5c2a635a9d39f5ca57aa660a9e99f7fa5d3a6c0a926a09ea5f6a6efa926a0aca509a70faa18a0aba509a70faa27a086a5d6a6e0a933a088a5eba6b3a916a066a5a1a660a912a044a5aea630a94fa02aa54ba6cca8aca001a512a68aa8cca04fa460a58ba85ba0dda27fa4f2a8339f0ca299a38ba95a9d219f28a0b2a9a99aa292918db3a9cc98581b271ebfa9ff941a1f21206ea9b3924c20792114a9c08e67205a20eba8af90ed1fbb2087a80895051e901e7ea8c396b51bfa1c5aa8129b92189c1cefa75699ef89eb8b7ca7be9938978c9974a6e9993b9bf39c74a59f9a669df59ea7a4579b619e11a041a4649bce9e72a0faa33a9bae9e9da058a39c9a2d9e36a03ca29499ff9dc49f10a17499139eb49f80a07a990a9eed9f54a05299de9de39f20a02899919d6d9f189fba98d69c3f9ed09d5598729cbe9d569dbd972c9c669d039d0697ac9be39ca59c5396bf9a569c1e9cc695599a3d9c069ca095519a4a9c129c8c95029a239cd89b2c958f99da9b6f9be5942399689b349baf94c698fb9ac89a54945e989e9a9e9ac99315980c9ab2998793ce9781992c99fd9275974f99fe98cd927e9727998a98d5925097d9981a98089270966398d296fa91a7945c969996fa91a7945c96999600007a1ab61a749800007a1ab61a74981799389f70a067a4659e6ba4c6a530a8819f5fa59da6cca8dd9f95a5dfa6f6a8c59f9ca5f6a626a918a0c2a53ba742a937a0eba556a76da94fa0f9a56ca77da947a0f4a560a72ca955a0d2a52ca7dba868a0b2a53ba78ea885a07da519a73ba8e6a090a512a718a8a3a039a58ca69ca70da012a582a657a7ba9eeaa4c7a5bca6049e66a4e6a57ea7449f3ca48aa564a8b69ea4a240a4fca8e79d5fa024a192a9cd9de19a499d1eaa1c9b93970e9720aa5e9bc4963a967da9e49b4b9beb9ab0a8c49c5d9d0f9f3ba8719cc19e37a025a7aa9bda9f48a20ca6799cbfa00fa2b8a4529ca5a03ca3a7a4699ce1a045a2f5a3679c58a06da162a2819b1ea033a187a1019bbf9fcda0b5a07d9acd9e54a026a0e6995f9e1aa0b29fb5993d9e22a06f9f8099259e20a01b9f3a99c29db79f7e9ebf98339d139fef9d7298c79c549ea69d72989c9cf49d4d9d5c987b9cc99de59cde972b9c919d779c5697f49b349d279caf96769be49cc19b4196d59aa89c909be095699a759c689b4e95f9993d9c3a9b23959299129cbc9ae6944b999d9b759ad8940599259b0f9ab194ba98999a9299b9949598489a7199439455981c9a70991a942298269a7a99a793f297fd998099bf916b9612991299fa917e95f397d596fa917e95f397d59600000719241ad69000000719241ad6906d9ddaa242a4d7a5019f05a58fa658a8189f5aa5bba68da8159f77a5e7a6a6a8529f8ea516a7d0a8a09f9aa52aa7dda8c59fbba538a7d8a8cd9f97a51ba7b6a8eb9f9ea520a775a8e99f80a504a737a8a49f2fa5dda6caa7db9f3ba5b3a600a7da9ffaa433a633a6629fe7a4fda577a50aa0cda4d6a5c7a45fa095a48fa5ada3899f04a4c3a402a23d9ee5a222a492a0609c91a190a2c49e7c9b28a145a2139ea59c81a1b1a27d9e059d69a200a4f39f5f9ec8a385a4a9a04b9e22a471a5ada104a0a6a490a5dea1829e7ea3d4a47aa1989d82a20fa418a1499a5ca072a238a0559d05a1cea2c3a0639cbfa04ba24ea08f9cdea01aa24ea01d9ca3a0c6a146a0b49b2ea053a112a0889be99f30a1b79fef9a769feca0469fd29a189faca0b19e6e9a609e2ea00f9e259af99dcc9f779dc4999d9d309f229d5b99499de39ee29cb998fe9c809eb39c4298b59c1c9e829ce097659ca99d259c6997189c439ddd9bc9967a9bd89c309b3a96d19a729cbe9ae7954f9a1a9c2d9aa595fb99b79bf1995295aa99759b9299239581990e9b3b99d6941e99db9a15999694f2988b9af7987894a198439ab89845945798d599809807941498c3994d98f8939c973899b8974a94889650988995f9928695f297ee95f9928695f297ee9500007a1817197d9100007a1817197d913b9d96a3b8a433a5a09eeba413a661a7569f68a5afa607a8599f8aa52fa722a8ac9fb6a53fa74aa8bf9fbba562a75ca8d79fcda56ea752a8e19fcba550a733a8ad9f99a50ba7c7a7929f46a59ea602a74f9ff2a44aa634a6339fcaa40da672a54b9fa0a492a5b7a4a69e56a444a51ba40c9edea3c6a4e8a2539db6a229a491a1e49b12a160a20ea0a79a869f7ba0ff9dc6988f9dd09ee69cf195d29b8f9ca59b70941599c5990f9afc9390986099cb99e8934d999c9a279aca97d29b559cd19ae598b79de49e499c1c9a769f7da0049dd19bbba0cea1ea9d5c9c07a12ea29f9e509cfaa035a2d39ee09b71a0d1a1049f4a9b29a097a1ef9e499b12a068a1ce9eff9a809ffba0909e069b529fd8a0549ec19a229fb8a01d9e5c9ac89e7ea0039ed999709e52a0bc9d8399249e0da06d9d2499e39dc99f4e9de3988b9d689fe09cae98449d259f929c8998f69cb89e419c5e98ae9c549eec9b23986f9cd79d999bf9973c9c919d2a9b4197df9b409d1a9b8e96249bf59cd99abd95639a7e9cab9a6f95cc991e9c3e9a63957799b89bd099479541997c9b7899db94e398ec9a04998694c798699a99981f947298e0992d98c69327989199a597c193f5972199b696f6926497d69801963496eb95979608943496eb959796089400006718e918239100006718e9182391959dc6a3cca40aa5f09d7ca47da51aa6519ecca416a68ca6849e34a5ada611a7009f64a5e4a665a7289f80a507a76fa7239f7aa5fea665a72a9f60a5e1a613a7079f31a59ea66da6d19eeaa447a6bca5639ea3a4c9a51da5e79d42a447a56fa46f9d73a399a473a3179d71a2d6a301a2529c9aa1fda227a1899be4a02ca26fa06c9ad99f01a1879f059a5c9e2ba07f9e2299799d6a9f129e2f980d9d029fd59d9d98cd9c689e7f9d7d98d99c369f4e9e4f99ea9c209e749d2a9b599cb59df69c3a994f9cd99dc79cb698229cac9d449c4098839c709d589b90985d9d759ef49b409aa29e01a0e79cd69abf9fe7a0129ed89a01a04da18e9e1b9b9c9ff5a0209eb89a459fa3a0d19d729aba9e5ea0bf9d589a799e42a08f9d2c9a2d9e3aa0859de599da9d0aa05d9d8c99bb9dcd9f0d9d7099b19d829fd19c77997e9d599f769c23994b9dd09e169ce598ef9c519eb79b9c98a39c0c9e869b4d98569cb39d019bd0970b9c619dbe9a0097619b279d939a6796e49af29c709afb95589aba9c469abb95059a8c9c279a5c95b599469ce79922956399119cc8990a9526998c9b2a99c094fd98069be9988994ca98a29a98984e949298609a5e9838947398fb990e984b933898df995b975b93df9674986d965b93df9674986d96000000000000000000006718e9182391959dc6a3cca40aa5f09d7ca47da51aa6519ecca416a68ca6849e34a5ada611a7009f64a5e4a665a7289f80a507a76fa7239f7aa5fea665a72a9f60a5e1a613a7079f31a59ea66da6d19eeaa447a6bca5639ea3a4c9a51da5e79d42a447a56fa46f9d73a399a473a3179d71a2d6a301a2529c9aa1fda227a1899be4a02ca26fa06c9ad99f01a1879f059a5c9e2ba07f9e2299799d6a9f129e2f980d9d029fd59d9d98cd9c689e7f9d7d98d99c369f4e9e4f99ea9c209e749d2a9b599cb59df69c3a994f9cd99dc79cb698229cac9d449c4098839c709d589b90985d9d759ef49b409aa29e01a0e79cd69abf9fe7a0129ed89a01a04da18e9e1b9b9c9ff5a0209eb89a459fa3a0d19d729aba9e5ea0bf9d589a799e42a08f9d2c9a2d9e3aa0859de599da9d0aa05d9d8c99bb9dcd9f0d9d7099b19d829fd19c77997e9d599f769c23994b9dd09e169ce598ef9c519eb79b9c98a39c0c9e869b4d98569cb39d019bd0970b9c619dbe9a0097619b279d939a6796e49af29c709afb95589aba9c469abb95059a8c9c279a5c95b599469ce79922956399119cc8990a9526998c9b2a99c094fd98069be9988994ca98a29a98984e949298609a5e9838947398fb990e984b933898df995b975b93df9674986d960000000000000000000000000000000000009b9bf49c539c7d1c6e21dc2200a81521ee25192741aac320a8250b27a4aa1521e3250e27ddaa4621d22505270fab3821c525162733ab2d21d225122759ab0921e525fd2659abc320af2506277eabb620ef24d925a0ab6f1fd823ef24fcaa3c20aa22292391a9ca20f42242238aa92221ad229d239da8a81d6320db2027a63917da198a1acea1b60dd91174128d9a290dd20d4211f395bf92239c0f9eb8a220a83faf37b083a99018469d52a054a51628102898266ba6b2293b29a7285ea94629bc286328d9a866281d28722775a85a268826de25f1a6dd213323de2221a4781ca51f3c2072a1b2176c1cfe1c8d9fd114f61af71b34a0071423196b1953a1cb82b0942a9424a2b210ed174a181ea39c151e1df81d81a1ec15091e6e1f17a00e164a1de11ee19e7115c01c2b1e059e8c15841cbb1d549d4e153e1c4e1d0d9d47151b1c281dc89c1215a71bdc1c7f9c0315301b9d1c619cd114dc1a801c469c7a144a1a2a1c0e9c2114b419d21b6a9b71134b19011ba29a9912d818821afc996412a518031a85992d126018cb19ff98f3114418a319b6988911211865197c986d11bd1731192b98c710fb16c018cd97d510b7165518cb969c1085161618299689102616e7178a9585109716a017a3952310cc15ef165795000000000000000000009b9bf49c539c00009b9bf49c539c7d1c6e21dc2200a81521ee25192741aac320a8250b27a4aa1521e3250e27ddaa4621d22505270fab3821c525162733ab2d21d225122759ab0921e525fd2659abc320af2506277eabb620ef24d925a0ab6f1fd823ef24fcaa3c20aa22292391a9ca20f42242238aa92221ad229d239da8a81d6320db2027a63917da198a1acea1b60dd91174128d9a290dd20d4211f395bf92239c0f9eb8a220a83faf37b083a99018469d52a054a51628102898266ba6b2293b29a7285ea94629bc286328d9a866281d28722775a85a268826de25f1a6dd213323de2221a4781ca51f3c2072a1b2176c1cfe1c8d9fd114f61af71b34a0071423196b1953a1cb82b0942a9424a2b210ed174a181ea39c151e1df81d81a1ec15091e6e1f17a00e164a1de11ee19e7115c01c2b1e059e8c15841cbb1d549d4e153e1c4e1d0d9d47151b1c281dc89c1215a71bdc1c7f9c0315301b9d1c619cd114dc1a801c469c7a144a1a2a1c0e9c2114b419d21b6a9b71134b19011ba29a9912d818821afc996412a518031a85992d126018cb19ff98f3114418a319b6988911211865197c986d11bd1731192b98c710fb16c018cd97d510b7165518cb969c1085161618299689102616e7178a9585109716a017a3952310cc15ef1657952310cc15ef1657950000b40fae0f39940000b40fae0f3994f91d43239b2434a91d201e2561264fab83207e25dc26ebab8a207625ab2634acb6207e25f12678ac99207f25932699ac67204d25a626d6acd21f8c248325f7ac4d1e4b2157222aaddc1c5b1e11205aadaf1b161c0e1c97ac40190d17371853abff880598379ae9a9219bb29f93a05ea54d980f9d129e34181295709aa59b70185a909b98d9991b151292939b949c9217089c04a403a54a1d94a045a9afaad920e6a1c7a8efa9bf2056a26ba508a6bb912a252a241b22afa69e282028e526d3a8a1252b25bb243ba84622ff22dd228aa6071c021efa1d00a461114d164d1629a1658d51946e96bf9f2490b8988a9829a03b91e39a3c9c78a058920b9c149db1a0d58ea99ac39b64a1ab099e911e91b1a17612ba17831958a11014f7193e1c33a07c14fb1a871c869efb14ce1bde1ce29dbb14831be11c959d8114231ba01c2a9d3a14011b871cea9c4114d91a711caf9cf713ad1a421c609cb3134e1a0c1c0c9c6f13d519841bbb9bbb125f19e21a159b4e12d218531a849ade117418a919049a8c1116185d1989996311d217f5181f99ff104817c018c098f510161776184f98c310e4165a180e98b210b3163818939747104a161218c3961910e5157c173796640fab155b16af95190fe5142816f196190fe5142816f196000045947997fe92000045947997fe927b106819bb1cf1a7811d6124002525acbe1e7e247b2587acdb1e7e245725bbaca01e3d244425e5ac0c1ea423c92403ad891de322962441ad111dbc214d233aad101ce01f3c2143ad001a211cee1d19ad0e185c174415eaac359bcba024a295ab889bcfa0aca1c4985199399e739f2d17d496469da79e4b187995d99c339e45184295859dd89ea4180097889fdba07d19d09a5ba212a4361b319d32a56ea6b81c8c9dd0a516a77a1ca89e37a40fa5ee197c9f7da277a30696461d3b0b95942ea44120211db71b99a5b218f815c91453a5e1912b90fc9069a44a959d968e9660a38d93fb95a1945fa26b918c945294f1a1b48e4f942094f8a1278ee5940395a3a1f1896293969469a17f0b890ca8104da1b510c8150518eca08a130d1afe1b89a02714421baa1c01a01714b21a4a1cc99e0b144e1a121cc89d71130e1ae31b499d3013ef19721bdc9cee12ad19691b709c96125c190b1b379c7d121219981aad9b2812cc18401a469beb118618bb19b39ab211441865194f9a4d11cc17fe18de99ef100a17ad185b99a51097165518d2985f106e163818b2984510601611188c984a1041162918a6984a1074162718a498191031161f187298ad0fa215a51772987b0d5814e915d697990d141444150d95990d141444150d9500006509dd0e768f00006509dd0e768fd1169a1d861f75a8431b3721412389ac1a1b7021ed22c7ac4f1cde2224243bad491c7d22d22381ade71bea212823afad3f1b71205922bbad3b19821f8d20d6ad0917d61deb1e9ead99128d17a71870ad939ac59f01a16fac579e40a424a52fa1eb9bfd9f71a1f80e6498559d989e5010e195e99c479e5112d2967b9e4da0c5152a98c49f11a10d188f9897a0aba15e18519a5ba19aa27a18ae9ba7a22fa44d191a9cf0a24ea4c2189e9b3da295a36f18129c93a1a5a25a16de9db5a151a2618fd89a58a0b9a094a07298369b389cfaa38e981e99419a5fa43e98d19702983da435962b95d094d2a3c4948a93799286a3f89113932392fba2e08f9c90ec8edaa2968c198d4a8880a23c875c06100806a2c20c1014171691a1cc107118ff1961a1c71128197c1ac2a07511d318291aa99f13124f19ca1ade9e6112d119561b5c9e49128119021bf09d2b123c19a51aa19dda11e5183f1a299d7a118f18d219b19c0511401876194a9cbc1007183719199c8110b017f8189c9b591002178518059bf50f88164518729a990f46164618d8990a103416341893990e106e164e18fb98a60ff815f7177898770fd615ba172e98f40e91154e179d975d0e2a15d916c397580e471569164497880e7415c1167b96880e7415c1167b9600009a8d888d388b00009a8d888d388b4a147e1c8b1deba83e16bc1ff020ddac0917ed1f242111ad04163e200d2167ade714541fdb20b2ad2313f01d0d20dead4e106f1c581ee2ade009c7197e1c05ae23900415f115c9addd92d494f795cfadb89c81a1eda2e9ab8c9d1fa24fa34393b098b89c289ffa0c7e942c9ce89d9c072a950c9c229de50c47958f9d4d9ed11045946c9d089f0312b896f99e69a0bf133c99d0a005a20e16cd99c2a161a3ca18bb9ba8a132a328181a9a67a1dea23718e3995ca047a1a414439bd0a08aa184049c9c0aa186a10a9d519dcaa032a113a2b69bd69d499e89a4369a399b6a9b5fa481985199c299dfa3f895d296c3959aa376942f934a9279a39c91c690078ff5a2c38dcd8631085aa2e689a90cc60db6a11a821411161464a13a0b26151018faa025105318b3192fa09311d018741ac39f74115119a81a6c9f4e113b199c1ada9e8711e0182c1a3f9e2a11b818c419d69dee1053189919459db210e8173019e39c8a103d17d918749c381035176618229c181093164018c79bfb0eea15b217669be30ea815a617a09a410e711559172f9a380e5815d816b4994b0ef4149a165699110d7f14bd15d598870c7b13c71464987f0ca7123414ae97320bf811de128d97190be311d2127196ec0f12160c18f698ec0f12160c18f69800005a034405cb8900005a034405cb898b8cbc18f419e9a8cc8e991b2c1e04adfb8fda1ba51d3dad2790dc1af11daeadb9947519371cd4ad6596e617c41a13aee0940318c71af6ad0198850ee2150aae3a980098c095e7ada19c95a03aa1a0ac569faaa49aa5329c78990da069a1130a3298579d4ea00b034d952b9dfe9ecf0c0895099c269dbb0ea092649d199ebc10ec92f19d3c9fde1260953e9fb9a0b214619512a060a14a15109882a011a2ba143198bba052a27414f8986da003a27b114098529f83a0060f6d961c9fc1a0280cbc98b79e6ba07595829cf99ff2a0f2a0d69b9b9d9d9e83a4b99aed9c079d77a4bb99699bb39b25a438980c993598d8a36d96ba956b947fa3b694db92368ffda238927a8d8108d3a2f28fbb0cfc0d0ca2e98cf70e8b1082a1a88693130115a1a17e0689151a1711a1a10cdf16541878a05b0d1117031968a0a20e8117101926a0f90e9417ff18029f420f3617a1185a9ec40ea4168018a99d060f7b164e18dc9c770e5b16fb17819c0f0e1416ae17569c540e2b16d717149cf80df0159217e19bce0d531534171b9b4b0d221584166c9a330d9b14e015c9990f0d211498152b99680cc713fc14be98710cf012be143498070ca9123f147897070b1912fe130897ff0ab612de1360964409ac0f121125984409ac0f121125980000090722075a8d0000090722075a8df5906a17a51810a9f898b58dd40e26ad1e998794500f57ad3599508e930fd4adbf99cd94b68ff0add19a1098f6952daeb09abd99f598fbadba9bc99904990dae089c709c599e03ae979d10a1afa1a8ac579d51a133a22c984298559d459ffd0f6a97fc9cc49ea802a996389dde9ea087d094649dcc9eaf0ee792b19da29e1a0c5c926e9d219fc90e5094b39d4c9fb90e5892c39da79f8211c7944d9e25a077101e92a89ec6a0381083946b9e8ca02b0d6c95ff9dfd9fc90c4695579e60a0fb0fb298629ef39f13921c9ca99f79a0fc9fbf9be69da99ebaa3029b5e9db69d0ea48999db9b3d9c0ba457987f98e69820a43f97e596eb95f9a3a0954f95389476a3ab9345903f8eb3a2d191948c9987ffa1568fc9056b0d97a1fc8c340c2d123da16489bb115d1483a01002641433160ea0c5055b156417a79f6a083616d017399fd4097e161518c79e080bee1527183a9e1e0cb8158b17a99d0b0c57157217129daf0c34158716a79c3e0cfa143f16569c690c09156a16099c140c7a14bf15c59bfe0b56149d15629bbd0b2d146f15259b4a0b5813d614df9a100b0213a014339a930976110114a99952090f11a612ac983109d610251206982f08ae10c711919722076f11b0128e96c40bb313b2140d9bc40bb313b2140d9b0000ed824586f48d0000ed824586f48d8d979c91929553a9c99a939758955fad169cb39a569a58ada19c529ca09ae3add69c359d5b9c05ae839d1e9e859d3eae6b9d399e879e0eaeb49d1a9fa69e2caeec9cf89e729f1dae629e26a188a2c4ac909c0ca105a29a95ca980b9e3ba05c146496499cce9d840bc294289c8c9dba0cb694d69c269e4f0f6b94fc9cb79dbf0da390159c4d9d290eb88f999b159de90b3492d99c579ec20edd91049e2aa04e10b294af9dbc9fd60e31955c9df99e0d0d4094cd9c579eb80d1994b19c639edd0f0096569dfc9e4c90b89b069f1da01da0a19b1e9d5b9d2ba4869a579b289ba5a4339af19a3b9bb1a47299279a599a78a476983798a798d5a3b89619952f9545a37094208d3988cca2ee915c06ef0d1ea24e90900cb910baa1168e4a0f62126ba1ad8cb010a013d1a0d08a8111451451a09d882c129814b09fb681c912ed14f99e9a0188136415949e9001fa131915139e98042b145f15ba9d8a041014c4156c9d5607cf138815129df30610142715999c76086d13ba14399c0908d3125214839ba6074812f013b69a690753116e131a9a69071e111a13d69920075f1029126f997504560f4b110f999405f70e6910a398fe04cc0e40105298cb03010f52103f9870061711fb1066982c06d10cee0c26942c06d10cee0c2694000042821a87988a000042821a87988a08978b947f950ca94c9ca89c9c9c00ad1b9d1f9eaa9d26ada59d8a9e049eb2ade29d779f209fe8adb19e39a034a016ae8b9e44a02da0eeadc79e3ea0b5a00aae779efaa00aa212ae2ca0c3a3b0a49cac059c31a0ffa0f3949b95ce9baf9da40f08952d9bcb9c02027293f39abb9c7c08a394db9a749c38081e913d9a0b9b5a01d791249b6e9cbf076c92f29b5d9d000c3a917e9cb29d040e87902c9caa9d2f0cc693ff9cba9ec20e3b94a49c7f9e770e3592649c989dd80d1b915e9bc69ce70ada93b09a849bc98ea798e19b909ccb9d399a1d9ca39cf5a27a9ac59bcf9b41a43e9a919a209a7aa4459952995c994ca44b98a6989c98e8a342972797c097ada3b395039514951fa399949193649367a26e934f91c190a5a1fa91368f6b8d5ca11191f58b9786c9a04190f684418672a02b8fd3841f0642a00d8df70a640f04a0fb89960fe5106f9f118887102a13eb9e9d8406115d12dd9d6b817711d612539d558131119612219d468100116412db9c3801d2103312b69c2481b00ffd107a9c11011c0f9910079c0101960e3010249bee00220ece0fa79ae400c60c280e3e9aa0822909ad0c179aa8820409e407009a9b82d5059a029c991f84db816a02e798b580d209f408cc976a02cb0e390f2b996a02cb0e390f2b9900009003f1001f8a00009003f1001f8a53995f9ab99a9fa8ca9c1c9eab9d77ac369ee49f61a0edacf79eb7a03da19cad339f38a1e0a1d9ada59fada10ba203ae109f4ba17ea1d1ad499f3ca185a1d9adbd9da0a034a193ad369e7ea146a265ac2c9b60a027a19295ae96e59ce19e9312e694d69c999eda068c96679d0e9f600d3994fc9c0c9e710f5894929c659dda0e7d90029ba19c860ed191b79a099c710c7d8d119bf09c5810ba929c9b249d2d0865928d9c4d9e780c1394219bdc9cb381228e2d9a7f9b69069d8f4e9ba49c54095a95609ddd9d09903999bd9d319f869f1a9be19dff9e75a3ff9a8e9d5d9e4fa4f499a79b1a9c8ea44999919adf9a4ba423997f9a169a34a43498a899c0990ca4ad963598b39865a3cc950d97d897dda2959408968f9541a25b943d945a94dda1a99361938893dda0f9924b9068917ea0ea91fc8d818c45a06b90c58aac85e39f768f418464057e9f5a8d0604b00bf79e418c92090e0b3f9eda8b0609650a889dc789d308220d549d5b88b808040d149d5688a30be50cd59c2988650bb10ca39c09882508600c369c8f87be07e708aa9b068766029b08329b8b864302ed02ae9a1f862382cc02349a2b861982bb82b7994b840f82ae827299bd870c869b82f798d287d588e28dd29812039d10ea11709812039d10ea1170980000e889828c94890000e889828c9489d99a309dc99d8fa82c9e0aa18ea1cfacfb9e5ca128a2f7ac789faea176a26fad549fd2a1a1a2a1adc69f46a2cca2c6ade49fe3a1bfa29cad84a021a3bfa3b8ad5aa014a4b8a49cad94a0d4a42ba693ac099c04a10da22c99e896709cce9d2188b994059c609d8c0915940b9c3b9dad0e3694279cc09ca50d6e935b9cf39ca00de790b299e79aca0a54894e98e199ba08088ea098349af007538e0f9a2c9ce408628f519a5a9ccb06b68c789b5a9dc704ad8ff8998c9b40812491dd99849b61079192de99b89ae990c398969ac19b399f7199339ba99a18a4229a4a9aeb9bc7a40f9aa09a779beea42799b8997c9aa6a4e798639967992ca4de97de98ee989da3a8964498389861a30896f996e796d6a20095e1943595bea1a394ec93049469a14a9434934f93b8a02f939191b78f64a07e92008e838f46a00f91aa8a4b8c12a027903e8a1a8cc69fdf8ff489cd8b659f7c8eb583778bc49e5b8e7683b08a0f9e178d1a83ef831a9da68cdd82ac89e79c908bbe828089c19c418ba38257899e9c358bba872f89609c3c8b7f8705893c9cf48afc89ad88809b8b8a8f894d888a9ad28a29899e8ab599d889d388438a3e99dc89ad883d8ceb98c58a3c8c128c7098ac857408220762988f899301ea93199c8f899301ea93199c0000dc04e2809d8a0000dc04e2809d8a1e99739a0d9af9a71b9e6ba1a4a173ac5b9fe5a1d8a2d9acd29f76a280a32bade99feba29da35cad34a058a31fa47dad35a001a317a455ad61a032a3dda36bad869f02a307a44ead7f9df1a100a36cac0898749db29dbca2f396b29c099e8589b0941b9b1b9d3902e2943a9b779c15860092a49845996b89de91199a3d9b89011590269ac09bda089a91889bcb9c6b0ccc91e39a799c070d9e8e1b9b0a9d710b3690439ad19cb104de8f8f9adc9cb084b28e759b379dc18c64901e99a09a63915290ba962898b89af19526985a9855a13598ac99f3996ca48f99469a829ac1a446999d99529a9ea4a098ef98fd9872a4d098059906997ba40998a1983a9909a417974d98b1983ea34396e19648987ca2799548960e97d1a121951d96e29691a1b194ec9599961ea140949d954396dba022949694cb957da073931d94529508a0d092ac935794989f5c925b922394169fd49113920094b19e2891cc919a93379eea908990c991759d229044906591f79c7f8f00901d91979c238e8a8fda905b9ca28d0a8f8e90f99bc48c678e4490779b658cef8dc090da9a378ccf8dde8fb39ab38cdb8e93906b9a298cab8e2891469a0a8c9a8e1a910a9adc8a748e0a91f799f3894488cd8c7898ec894f841b8d2796ec894f841b8d279600002e04c7009f8a00002e04c7009f8a799ade9dc39e41a7a69ef3a2eaa32aacdd9f2da341a49fac22a0d7a364a4edac30a025a4aaa40ead89a032a404a541ad55a011a4d2a41eada5a032a4bea453ad57a049a407a5f2ac44a065a45fa507adf99e02a440a535ab349b649f48a0e6974b95b69b099ddd073e90e69a0c9d628b6592e69a259c39886d935f9c249d7405be90149c5d9da4082291d89adc9ca409b98c4a9ada9bd303848c2d9a6b9c438476906a9a9f9cf88a0390c49ad59c8e8ea7906c9a609c66910394079bb69c5b979a953e9a4a9cc19f94979e980f9a2fa3c8982499dd9934a4a3999299619abea4d599a099189b9ba4b299989af09a6ca45299419a799aefa3e298f199f09aeba35a98029a289b5ea30f984399d39ae4a24d979d98f39988a2b196e8972f993ca211965f97c798a1a149952e96049820a10395ce956897a1a08e946795df9634a018948e955d96a09f9d9329958f96cb9ebb92ca941696299ee791d0944d96af9d299182940896719d78905394c995189d2a9058936395be9cdb8fc0927894349ccd8ea2917093899ba28e6391e792ff9a868e3c91a692bc9a088ea490dc91499a318e00915292e899888d4a91a8924f995e8d83906792a698cf8db090bb91739857892a8d8195289bec8af484e68c7c97ec8af484e68c7c970000248c2b8e418d0000248c2b8e418d8d9be69e12a052a7b69ff4a3cba418ac4fa014a4e9a480ac85a065a435a5b1ac80a094a43ea5c7acb8a0c6a490a5eeac83a079a457a5c3acc6a098a444a5eeac4da064a4f4a4c7ac2fa0c5a3aea48eace49e44a37aa4f2ab0e9db2a2f9a358a94d9add9e0ba03b974595049bd69c0283bf93019b3b9c088dcb94109c729ce28d1992109c449d1882b191149c729d1082a790129ba89cb9010f903d9a1f9cbc893e8fad992f9ca18c5a90609a6b9cc290f992529bb49d8f958f8fd1956a97729e7494c18c5288f4a26d98ba970d96c0a42b9958996099cba4df99a79a0a9bf5a4fa990d9b7b9bada4c899bc9a219b5fa475995c9aa29a11a45499fd994d9ab8a3e6988299eb991fa33098a498709969a262975f98af991ea28d9616983e9988a101962b98dc9805a17a95d297869893a021956697459851a084940d97129807a02294869622985c9fcd9350961e98a19ea892bd95ba97159e2b923d951f97bc9d9791c3947396d69c9791a9944196949c41919b944096759c27916a94d995109c1e9130945e95429bb0900394b894b49a8d90ac938094639a0490b1924a94169a238ffb922594e299468e2c92f29353997a8da591d893f298f88ddc916293e598158e0c926b945299d28e3b914e932299d28e3b914e93229900002a814e863f8f00002a814e863f8f5a9a019e5f9f6da7b49f68a427a50aac40a06da453a546ac70a0d4a4bfa574ac9ea02fa5fda58bace5a042a55ca6acacb5a0f2a4efa58cac0da100a505a6b7ac92a0e2a4d1a582ac65a065a41da558acfd9fc6a3c9a4b3ab5a9e35a39ca43cab039c03a247a390a80499d19d469f5294fd953f9ab59cb20d7f95179bf69c468720927f99129bc08cc190f197b098128d0b8f7f98fd99928d928f0098b799078c3290a998a19a978cf09161990b9b1b95de907e97c9981d9ec4923e90ce9375a3ca97bc9733979fa4a5995b99a49ac3a4429a7d9aa19ac1a47c9a929b079cdca49e99969a789b96a4cb999b9b309c26a44e99119bd79bc5a36199a19a059c46a3fe98599a879bf1a22c98b399ce9a47a232989099429b42a2f496fd985d9a6fa1ce961499169afca03c96e598c4999fa0df95f598d9994ba03195b398ef9900a0d994ac989999619f7d942c988399da9e3394ad971599519eda932c97fe98bd9d15944d97c7987d9d189498968598119df79328964f98b79ce692c2952598899cf4916f958c97799c6d91ca9429970a9ccf909294a996549b83906394cc95699a04902d947895e299a18fea9315954f998c8e3f93e494f7980f8fc093c8948f98d48d359229949a97928c408dec902097928c408dec902097000001905c923a8e000001905c923a8ee79a3da094a1f3a66d9f30a41fa54aab33a07aa456a5aaab30a0aaa43ea510ac1ca0c8a48ba508ac63a0d6a480a52bac54a08da4a6a505acd0a0eba4f8a52aac55a0b6a4a0a500ac5ca069a438a5eaabf99f91a3b8a43dab769f3ca36da4b9aa5e9dbea1b6a213aa0b96e0983599b5a8d2896906d41095a2f0937d9aa59ce29222921f9a469c838a8d8f3c991b9b128e66894094d2957791b00c9f141717b19829157b1c9d1da79ef115551d051fb3a22803bc19541b04a5ad9802926e9593a50a9bdc99b79a93a51e9b989ab49a92a5049b139b0a9c56a5989a549bcc9b0fa51d9a019b0a9cb2a4e2990a9bef9a80a487998d9a119b30a43499279a3b9bbca3b998969abb9bffa201985c9a809b3aa20d98019b2b9c03a2d597629a079c80a1d097249ae89b04a1fd96ba998b9bb1a07b96c899a99b87a04796d799b49b2aa00a969799389ba39fa4957499b09aec9e2c950a997e9a239e8c945a989499639ddd93c9975499ea9c3c93929711998f9cfd926797eb98519ceb928697f898129cb09201979c98af9bb9927f963e98349b7c9247961f98ff9a4292bb958697b29a81912395d096609ac490a5947e96149a28902b94e1957b9967900094cc95b799998dfd911f97e79b3b900e93399511983b900e93399511980000ef18761aec940000ef18761aec948a9c8fa0aaa1a7a89e9f0ea4eba419aa11a06ca444a5e8aafa9f81a420a55fab1ba0b1a464a586ab4ea0caa47aa5a5ab7ca0dda4aca5c5abb9a004a5d7a59cabb3a0c7a492a578ab53a062a454a51eab39a037a424a5c4aae29fcfa3b9a476aa0e9fe5a201a428aacf9d92a107a3b4a9b69b979e33a0cda88e9635961396dda72203bd19301b7aa64b14031e7a1fb2a54615d41d112052a53e13411d251fa2a5d388a2195e1ca5a51d95830fb615f8a5e498d095d295dfa5dd9af2984099b3a5e89ad898eb9ad9a5239b4099899be6a5349a8b99809ab1a54f9abe998c9b42a5af990e9ac69bdca4779a109c929cc8a4729a5c9cb59d71a4479aa19cdf9dcea3c799d89c949da2a25299a79c579d3aa2e2985f9c4b9dcda1bc985b9ca99d7ea13798e39b419dffa0a097329b869c62a01897f99a5c9cf39f8b96829a139c459f6096469a999ba09ef395c599509b3e9ec5959499139be69d3a953d99b89a789dbe94b598699ae69c46945198e599819c25942b98ba99459c9a93f5978599029c06938f9701995d9beb923197b198b79aeb92f7968e98579a4b93eb966d98fd99819306978198de99b3929a963b98e3990e92df95df978b9970917295289754992890ca94d6960399b88ea6922e944e95b88ea6922e944e950000071b851c04950000071b851c0495ac9d27a2f0a36fa8729f4da41da5e6a913a0d1a49ba56caa0da0cba49ca5beaa15a0d3a4b3a5ecaa0fa0c0a4a6a51fab11a0ada4e8a554ab68a04aa597a63faba1a055a573a61cab97a024a55ba6dbaa6ba08da4c9a594aaada01da41ba526aa18a0cda234a4cea98f9fd0a176a398a9a69edda062a25ba9149eea9f16a1fca83a9d719ebb9fa1a8309ca19c669d56a83c9b699b7c9b06a89a9abc99419bada7be99d29830995ea7e699ec971f98eda68299409629968ca69a99a794e9952da6af99f7964a9705a62d9ad1970399bca50e9bca9877996ca5dd9a7e983a9945a5289a2699d69ad8a4289a2c9bc09d9fa4fb99d29c019f5ca4b499229db99e1da48e99479d809e5ea36499e99cfd9d8aa2b2987c9c8e9d11a2cd98e29ce59d85a12a99fc9c4b9e24a1a898249c579d7ca0fc974a9b939ce69f1397ed9a5a9c5c9fc096e89a7a9ce89e9096dc9a6c9c4e9e2396b99a409ca49dad95169a0c9c5f9d579585998b9b039d639524992a9be09c2095dc98ae9a1b9cde9490981b9a1b9b90945098a599cb9a41942a984999659ac193f9971d99ce9924930197949861999d92ba966f9835996092489653981699bd910b962798c1981292ba95de976198cc90869425979d99ae920195c3975298ae920195c39752980000351bd81c68900000351bd81c68902f9dd2a116a334a89e9f6aa46ea555a900a0ffa4d7a5dfa9ca9ff7a4cfa530aa14a033a54ba654aa2ca055a554a65daa5ca063a590a664aa54a054a574a637aa4da022a53fa626aa1ba0d2a405a6dca910a0c9a4e1a5c7a9ea9f8ca4a0a5a9a99a9f69a476a56ea9549ffaa3eba447a9c49eb0a20fa4fea8af9d8fa133a3f0a81e9d1ea018a1cca8c99cd09e15a0b6a8239d7d9d1e9e7da8689cdd9a049d74a84e9ca89a5f9c25a8c99b729a2e9ccfa7d49a259af09a3ba7b09ae599879acda67c9a289a289a6aa681993399e9990fa6ea99469b4a9cbda5349a859cc49d33a5849a099eb89ecba4989afd9d4d9f8ba47e9a0e9e4e9f0ca4d59a609eb79fa5a3629aa09ee49f0da3e8997b9e1fa064a2c0991e9eef9f72a1139a119e01a01fa1cd99e69da39fb0a01f994e9dbf9e13a05698cb9c0f9e089fd197789cc59d8a9e5697399c829d649efd96d19b2b9d049eaa96159bc19cd29d63964a9a4b9c239dd295ba99e39ba19c75959899b89b6b9c09955b997c9b2e9c97941699ba9a889b399499981d9a7a9aea934c98b499e099c093259854997d996493ab97f098179946937e97c998c9989a920297b198b198b29198964e987298a0917a9648986c980591ad9519981299b3915a959d97a498b3915a959d97a4980000d11a281cf9930000d11a281cf993589da9a255a468a7909fdca4eba5c7a8769f0aa505a6f5a8a69f14a539a640a9e29f4ea575a667a913a07fa594a680a9e89f69a5a4a69da9fc9f7da572a66fa93ea091a5efa66fa9c89f5ca585a61ea93ba024a583a61ba9b49ff2a470a6f6a824a000a53ea6b2a8a69f8ea4b7a572a81e9f37a454a571a8279f68a3afa451a8e39d8aa263a47aa8929d6ca193a23da8269d83a093a15ca8ea9bca9e5ea038a81e9c629ea19f13a8929ba59d999eaea7809b769d809eaea7309bd49cf09eaba7079b8a9d739f4ba7a69af89dfaa0f4a6829aba9d24a11fa69d9b359e2ca014a58a9b559fb6a075a4019c57a086a1faa3169c5fa07da14ca3d19b2ca05da1b9a2479b01a01ba101a2a29a499f94a047a1cd996d9e11a09ea07699289e08a07ca053990c9ed79f5fa03799ba9de09f34a0d6980c9dde9e079fba989b9c089ee39d7d98779cad9d699d1898229c6d9d2a9d1c979c9bd09cb19c4a96c89a519c359ce595679a1d9c029cbb95369a229c229cad95069aef9b129c54959a99c49b179c0f952f99649b339cc394cb98fb9a5f9b41945398b69ae59af7931f98239a239a6f93ec97a3997999cd92a39764993b99859254972099ae9843924c97cb9814984a91cf95f19767970292bd9508988d970292bd9508988d970000c819d81b4c990000c819d81b4c99699bb9a0fba143a6039e79a4a2a565a8ef9ef8a406a689a8819f10a54da69ba8a29f1fa548a6b9a8aa9f4ea561a6cca8f09f5ca588a6e3a801a04ca58aa6dca834a067a5d4a6c4a80ca083a5c8a67ea813a07fa5fba65ba8a59f2da5b3a6f2a797a056a5e5a6d0a71ea0f5a423a6e8a65da0e4a467a6e1a608a0bfa40da654a6aaa0a3a4bfa5d5a5ffa095a472a588a532a0b0a4e5a5e5a57d9e55a452a5dca5c29ea4a3dda4a1a5d69dc1a216a432a5dd9d5ba24aa4d9a5ad9d85a210a49ba5839de7a109a457a5269dd7a146a381a4319d7aa1ada295a3be9cf3a0b8a1a6a2229c98a036a2cda2d19bb1a017a252a2da9b85a0e1a1aba1d19afd9f9ea16ba1c99a699fc8a083a0359a849e30a0e39fc0990d9ec19f219f8b99f29dbb9f419f2399af9d949f449fef98789d559fba9ed5983d9de59e0b9ed498109d879eb49dc298ea9c369e249d6498ae9cf29dec9ca297449c819d8a9c0497cf9b199d2e9c7196589bca9cd19b2396c99a8d9c9b9bb595549a589c6f9b3495e7991a9c319b00959c999e9bda9ab39430994e9b629ab9940599fb9a199a9394ea98939ab8997d94a198679a929912945898359a8b99c493f497f2997599e5929e9795999599e891ef953498a5987191eb94c7960a977191eb94c7960a9700003e199e1a379400003e199e1a3794419d6ba291a3daa5529eb0a4dfa53ca8ce9e1fa570a663a82f9f42a5a5a696a8369f35a585a693a8279f5fa5b9a69ea8f79e41a599a67ba8f69e27a580a669a8459f1aa595a639a8099f17a552a605a8649ff7a44ea6aca7369feba433a6f0a65f9fc3a412a656a6239f9ba4d4a515a64c9f57a486a5afa5079f04a43aa526a5529fdaa3f0a4a7a4cf9fe4a3f2a42fa4cf9ffca3e9a4f3a3fd9e86a3a1a41ea39f9e62a38ba4c4a2659e3ea369a4a1a2bf9ec0a367a4bea2d29dc5a22fa47ea29c9d3aa2bca327a28f9deba19ba3eaa1d89c61a1b7a242a16d9c15a184a2eca0d19c3ca194a2c4a0879c04a16ea2bca0649ceda046a2b7a0239cbba01aa2c2a09b9b4ca085a1b2a04a9bde9f35a128a02d9a0a9f85a03e9f089a8b9e26a0779e8799ce9d839fb19d4c99839d099f4b9df598409dbf9e2c9dcb980a9d829ef69c6d98c09c339eb29c11987f9cda9d869cbe97339c879d289c4797cf9b1a9dd89ba0965b9bb59c309b0496b79a579cc59ad5953e9a059c6a9a5c95ef99939b2e9a3d95af99399bdd99f3948099049b8799ac9428999d9a56997994fb98749a0e995694c9984e9af09826945c98e0999298f5931b98a4995b98c393d1972099da975f93ab966798d1960093e2953c98dc960093e2953c98dc9600001b197e19379200001b197e193792e79d73a3c6a467a5069e85a4b1a520a7bf9e14a539a699a7dd9e0da58da6daa7f49e31a5a9a61ba8f69e26a5b4a622a8009f2da5a2a607a8359f1ba57fa6c9a7439f10a587a682a73f9ffda453a616a7f69ed4a415a688a6ce9e9ba4c6a5c6a5b89e5ba465a53da5879e40a434a5e7a42c9e1ca4f5a465a4f39d02a4f0a4f8a3719d6aa378a4c0a2709dc8a218a4b2a1339d20a236a3baa0749c9ca1e1a27aa06f9c39a146a2e49fd49c0ea1e1a19a9f689c81a1c2a224a0a39c8ca1d8a224a0799c7da1c9a212a0b69ceaa0f8a1b79f359ceaa01fa2a59f189caea0cfa1aa9fca9b93a0aca17b9f049c8aa09da1259f6d9b10a037a1c59ebc9aae9ffea0af9eae9a7f9fd6a0879e919a369fb8a02b9e629afd9e98a05a9e2c9ac29e73a0409eae99649e36a01e9e4f99fc9d00a0c79d1099bf9dba9fac9de0986e9d6a9f699da798209d0d9f1d9d7c98d09ca89e299d6f98789c489e9c9c2f984f9ce09d2a9ce0971d9c979ddb9b1897cd9b179d739b4696fb9ab29cd29a7595289a4e9c919a3295a699c39b309a0e956099809bfb9901953899189ba099c094db98ba9a2f995b94a098319abc98db934a98c5994698a99311986b99f597e893bd9730991f97d5936d970099f796a994a0962a985396a994a0962a9853960000e2185b19d6920000e2185b19d692a99db8a3fba44da5d59d26a40aa5f6a50f9e99a4a0a539a6459ec6a417a6a2a6909ee2a43ca6e2a66b9ee4a449a6d6a66b9ee3a446a6baa6949ee7a429a686a68d9ed1a41fa61fa6999eb5a4fba5baa5b79ea1a4d6a56ba5569e63a486a5e3a4e99d0ba403a54aa4759d11a35fa41ba3309d9fa2f8a357a2e29c82a2dfa3f2a1b89c05a23ea343a1649cb2a1d5a2cca0cd9b35a197a289a0989bb7a0e0a1ea9f499b3aa026a1e39e189bbb9fe5a0699e0b9b439f32a09d9d329b689f40a08f9d309bfc9fc7a0039e829b69a046a1749e209cc2a098a1bf9ec89ba7a0b4a1e19eab9b5ba082a1a59e179b23a05fa1aa9ea29acd9f28a17e9ec59a899fc7a0339e849a0e9f77a0bf9d1f9a909e3fa0bb9df999649e26a0d49dd999229e1aa0c49da599e29deb9f869db699c39dad9f729dd299a99d969f209db199829d459fbe9c1799279dc59e6b9cc098c49c1d9ed29b6498789cd89d9d9b0e98279c7f9d809b6e97bf9b539d119be4964f9b1b9de89a3596c49aea9cf79ac2955b9ab09cc89a8895099a729c609a3c95c8992e9c1d9afe947299dd9be099f0945799969b8399cc940e990e9b3c997194c798999adc9833948c98479a96981a944498df99f7971e93e197a99981973294b8965998d5953294b8965998d59500000000000000000000e2185b19d692a99db8a3fba44da5d59d26a40aa5f6a50f9e99a4a0a539a6459ec6a417a6a2a6909ee2a43ca6e2a66b9ee4a449a6d6a66b9ee3a446a6baa6949ee7a429a686a68d9ed1a41fa61fa6999eb5a4fba5baa5b79ea1a4d6a56ba5569e63a486a5e3a4e99d0ba403a54aa4759d11a35fa41ba3309d9fa2f8a357a2e29c82a2dfa3f2a1b89c05a23ea343a1649cb2a1d5a2cca0cd9b35a197a289a0989bb7a0e0a1ea9f499b3aa026a1e39e189bbb9fe5a0699e0b9b439f32a09d9d329b689f40a08f9d309bfc9fc7a0039e829b69a046a1749e209cc2a098a1bf9ec89ba7a0b4a1e19eab9b5ba082a1a59e179b23a05fa1aa9ea29acd9f28a17e9ec59a899fc7a0339e849a0e9f77a0bf9d1f9a909e3fa0bb9df999649e26a0d49dd999229e1aa0c49da599e29deb9f869db699c39dad9f729dd299a99d969f209db199829d459fbe9c1799279dc59e6b9cc098c49c1d9ed29b6498789cd89d9d9b0e98279c7f9d809b6e97bf9b539d119be4964f9b1b9de89a3596c49aea9cf79ac2955b9ab09cc89a8895099a729c609a3c95c8992e9c1d9afe947299dd9be099f0945799969b8399cc940e990e9b3c997194c798999adc9833948c98479a96981a944498df99f7971e93e197a99981973294b8965998d5950000000000000000000000000000000000005b9dc99eec8b071d2621ad226da78b2026256526f3a9ad205125a82647aa6a2083257a2671aadd2067259c26dbaa40204d250c26deaa992027254726e1aa39200125d2258baaf91fd524bb2571aa431f712404252faac21d2123de2309aacf1d4021c321e0a9301ce31f501f82aac91c531f8e2058a890153217c417a3a461832587680818a3b0840f8aab8acb9c4400b181440499950000e287468ec798e3a082a9fdaa0ba8b1a85cb00db1f7a6519d889d899c33a1b7256e252f258aa5f8265926c92543a6a4244324ea2329a56b20802097203ca3ee1ac31dcd1d82a264176c1ca81cb4a13f14341464163da12e832c93829100a3cc14c31940195fa3f6169b1d451f1ca27f148c1d282019a1d514031d431f11a01316231d931e0d9f4116e71c561e7c9e5a15811cbf1d9b9d51155f1c9e1d5b9def14271c441d049dea14df1b031dc39cc714361bda1c9d9cb514c81a9d1c7f9c99148a1a691c309c49141c1a101ceb9bd21381198c1b289bfc12fa18cd1a709a3d129418241ace9924127318df1964992b125818e5191b99d4113518c419d8983e11eb177f1971984611801739193198dd10e616ad18e997b01069164d188197ed0fda15681767964110a4154117d4950d10b3162d187996420f50142f152f95000000000000000000005b9dc99eec8b00005b9dc99eec8b071d2621ad226da78b2026256526f3a9ad205125a82647aa6a2083257a2671aadd2067259c26dbaa40204d250c26deaa992027254726e1aa39200125d2258baaf91fd524bb2571aa431f712404252faac21d2123de2309aacf1d4021c321e0a9301ce31f501f82aac91c531f8e2058a890153217c417a3a461832587680818a3b0840f8aab8acb9c4400b181440499950000e287468ec798e3a082a9fdaa0ba8b1a85cb00db1f7a6519d889d899c33a1b7256e252f258aa5f8265926c92543a6a4244324ea2329a56b20802097203ca3ee1ac31dcd1d82a264176c1ca81cb4a13f14341464163da12e832c93829100a3cc14c31940195fa3f6169b1d451f1ca27f148c1d282019a1d514031d431f11a01316231d931e0d9f4116e71c561e7c9e5a15811cbf1d9b9d51155f1c9e1d5b9def14271c441d049dea14df1b031dc39cc714361bda1c9d9cb514c81a9d1c7f9c99148a1a691c309c49141c1a101ceb9bd21381198c1b289bfc12fa18cd1a709a3d129418241ace9924127318df1964992b125818e5191b99d4113518c419d8983e11eb177f1971984611801739193198dd10e616ad18e997b01069164d188197ed0fda15681767964110a4154117d4950d10b3162d187996420f50142f152f95420f50142f152f9500003790c8904a9200003790c8904a92ff1d09234124e7a8161f64245a25c8aa2d20de24e7252dab701fb224892578ab5120e7242d261cac431f9c24632500ac9c1f8524c9252eacb41e2b24eb2421acec1d2023132438ac441dbc21aa222aacb81b321ffb1fb4abac1757158118f4aaaa94c2a0d0a1a1a9e49a49a372a469a5c29adaa154a3748d709965a079a19a191897949dd19e4a17e1968f9f97a0ae15339c48a44fa56f89a0a128aac3ab829c05a40eac2fad4c18bca157a861a907209fa00ba4ada44b9a0620431ccd1616a3571e0d1b611775a2ed13579127928aa2a691d598939972a079945c9bd99c9da07194b59cd69deba03294ea9c5b9e4ca108941b9da69e6aa28e02d1974f9865a32d0d5a86dc8d29a295132a184b19aaa1f014c21a481cb1a05f15581bcf1ce79f19153f1ba81c6e9ef614471b871cc89d7714fe1a6d1c859d0b14a21a2f1c169d9c134a1ac61bb99c3d13191ab51b8b9c6213091ac11b719c2013f819ad1b2a9c4113ad19291bc89b7f121919581a209b0f129018131aa29a711143187019fa991411da173419b799f810e0170d19619901118117ed181799f2105817b018b098c71035179c184b98c110c1167f1831989c0f62162018ab97980f9e154a17c7963b10aa145d159f960f0e13140a1597960f0e13140a1597960c944b940b93bc870c944b940b93bc87c2146315c817879f121caf21d32291aa571f8f2495253cac4a1e1d24e22442acaf1e1024012580ac411dfd22382499acfa1c4f223024c4acaa1ce1215723d3aca11c5121712200ad911b32201421adac7e17951d9d1c53ac890dac98aa9946ab349b6ba157a2bea6bb9922a044a1169c6697859d909f570329983f9fd5a069149b9820a0f5a00c14809994a1fea2fd10289c3da449a5ef0df69ef4a643a81d9008a032a82ba9a60a7ca0baa61ca82290ab9f70a45da5eb94ad99fba033a125a0ca9814a0b2a08ba0409a6e9f76a038a1c998a29dda9dc7a13998b19c289d2da21195019beb9927a2a09204985f980ca24f8ece950e9665a290024190628edaa2650f8911721540a224129b174019c3a18d1277185d1a4aa1bb139d19721b7ea0ae13171a081cd09f9113ef19871bdd9e24139a19071ba39d04136d19121b069daf127019ea1aac9ce1124d19f91a8d9c84122f19941a129c0c12b0181d1a919bc6118618cb19f89a8f11451874198f9a4411f0170f194d9a40117617d418d8994f11bf167618a499b21084164418ea98481012161218de98cc0fb515b2177a981910de15e217bf9842102916f717cb985f0ff41596179998520fc615fc169498d00dc012ec13a4950709570e3e0fb1900709570e3e0fb190a581ba056e820195a581ba056e8201950190ba8c279180999419051f17214baa1e1df722272471ac791c8422ce23a6ac621c9122d22331adb2197821682115ad001b7e2002224fad4517f31ea91f51ad66195d1f9e20a4ac2715d91c111dccaccb141316a91a8fac899bdea113a3b6a8299b22a045a1e59c229a339fa9a00896c59938a080a1558dbb98fc9f20a11304b698659f72a094834c990ea12ea2a004349be5a253a4eb05b09c39a446a5a706429dbba4d7a52807e59dc4a4d0a54287069e65a45ca5818d8c9e7fa348a476953d9d05a2e5a2689f419c2fa0e4a0e4a0879a7d9de89df8a1ca97579ac59936a257950198aa9753a2da938295c595c1a26d91bc935993a0a2678f9093689313a3be860d86a70728a2d90cbd13c915f4a1ec11cf18791adca10e13c6191d1cbaa16b12d619ce1b1ea17d11ae18da19329f1f116618a919759e9b1110193a1a4d9ea4111919971af69df011d818491aaf9d5b118e18f319219d171144188719c39c9d10fe172c195a9c9c109417ee18259c5310e216aa18a59bc00f87162e18999a780fea15f917499a2b0fb5150718be99430fc915e2177499420fdd150318ff98d00e6715c3175b98d30e57154117df97270e3515fc169a97930dd61445163498980e0515e2156896930bc8121d14d597930bc8121d14d59737981392c791748137981392c791748105931594c1939d995b15e51d5820d6aa51183e20be21b3ac2c1744206c21d6ac80167b1ff22037ad5b15621e3e202dad3e14bf1dff1e39ad8f08581b801c72adaa08b718f01ad8accd88ca16011523ad5e99119fb8a0d9ab5a9914a037a11fa2ba99d89e8ca07898a4995e9dd09f2c938d98419d009f5c909197f29d2d9f578e4a98159eb89f3a8b1a99aa9fb7a00f894099c6a01fa2388a399ab7a173a3e88aef9b1aa2efa3138ea19b9ca21aa4390ef69cc9a1c2a26f84d59c39a238a35f909f9c94a17ea2289c119c2aa0a7a0ad9f799bbf9ede9f71a12d9a4f9de09d2da28998619b8a9bc5a29a950998bc97a9a3ba935494f191cda38a9055905b886aa3288c2206de1026a23a82120f5b12f6a11e0679138e1564a1a90c92155018fba000101d182a1924a04d119318371aa59f7611da18841a9a9f7e11e918971a289f5c11cf18291a639e0911be18fd19ec9df41013187619449d97107a171819cc9c74102017cd18699c6210c51655182d9c920f0e161f18bf9bea0ecc1562174a9b4b0e3815f816869a090e0515be16f799090ea714a816b7999a0d8c1427163c99f40c25145a15f2985d0c5813c1148698610aa4113c132098000ae5109c119d978e09d011e41295955f0f0b16881710985f0f0b1688171098e1804d004f802502e1804d004f80250281828309b60c8899b2867918c01b31ab0609631cce1e15ad5a08241ce01d11adb78ef219621c34ada0921819031a81ad6592f218fd197bad3594e516dc199eade197748d658efaac7c98a4998999ebac679c3da1a4a26ba83497089ec79f3298b898759cf09ec194e3980e9cba9ddb937c98fd9aa99cf38d2f970e9d149ed3869c98b29d049f7b02ef98739feda03303509846a0b8a169099e9830a08ca16e83c797919f14a133039d98299f7fa041087199b39fcaa09f88679b64a047a1a292209a5d9d0c9e589a9d9a3e9d0f9e169fd89a5b9dc89dd7a1539aa49da09d62a31a99c69b029c65a3e8975899f09808a4a1954b95dc91d6a3a0939290878893a33991d986690ebea24b8eb7059610cba1578b8e10d0113ea141823e13b5158aa188066c150d1722a1ce0afb154a186da0530df716f61846a0d20ee316a118f19e610ee616c918b79e120e6c1672183e9e790e56162b18949d1e0e53164818f49cbe0dde15cd17839ce20d8f157e17559c230e52153d17309cc30d1b15f616db9b9b0d2f15be16399b280db8147e16679aba0cfd137a15be992a0c1b13e5142699d10b2b125214b898340be81118147998de09bd114c13039866091d116212a197cb096311cb116b957a02bb05340794987a02bb0534079498938252805f801304938252805f80130417879709640e98991d96b6948a0ceaaaa895830d231832ad2b972f8ddc1417ad1c98ef93588e2dadae9965974795a3ad289a2f998398baadd799ed985798f1ad469bcf99db9aedac74987e9b8a9a79ac959a469e63a003a5b88fd2998f9cb6931398549ce29e268e0999879c4a9eb6919798009c7f9da70861961d9c9a9de0010f96e19bb29de901e196d29c3e9e0c024596639df39e4e82e796ef9d03a096875f97749d0d9f2e02ea95f89d00a02407fe98ad9e4ea0b002d198fe9e4fa0658d1e99e39ab49bda98be98b39c889de69eba99089ddf9d4da1a499cd9c4e9d0fa2b6981a9c569c80a2d697fe98579971a30196eb94159533a404959c946293d8a3c1926d8f979099a2a590708c3f0765a2fd8d81055e10d7a1ef8c100c4e1038a10a865f1057147da0e901811329161fa09a05af143a17a79f6e089815bb174f9fbe09de150b18e19e0b0bdc1518184a9e270cb2150518c09dc00c5d1581173d9dd20c6015e616959c000de6149816439c520c98144616e49b7c0cae14fd158a9b510c86143e16599b280c0c14a5151b9be10a10130515c99a800a24127214509a4b09c0101b13ac99fe087210a012f89877064110fa10519822083010f2112d988d0ad7113112f197530c33122709879d530c33122709879d0c018300928040060c018300928040068c8f448c9c8c2f99b297c69862960fab299bef98df9937ad289ad49906981aadcb9a479b1e9b37adb79cd99cc49dbdadad9c959dc99eccad7d9c309edc9d0daef99b929de89df3ac599aaf9c269d50ac7398e29ca99e09a2038d46989d9bcf90e895a098379cd88c2197549ab19c8d8bc9961a9a769c87016096419b8f9c8781fa94049ce19dd6010496ef9cb09e1102d795db9c999e14824295629cc09d89888395239bae9c85015595b39c4f9ebe082398f39d9c9f8f098197649db09eba89c795e299349a1c9752982d9c9c9cf29dd4987d9cc09c7aa13b98f398ff985ba270980f99819900a37f987999519929a4db971a98c29860a4d2950c968795b8a3a1946d91bc8ddea243928a86fd0dcca2b68f690c6b1204a2f08d040f2d125aa1b38ca10e9313e4a0b68a2c10331457a04d88be106a13809fcb844b110314b79e90812c128514689e8601b012d214e29d7e042d1323157a9d8904f013a815749d8007cc138515529d0e074a132d15c09c5b08a112b714539c8f07fd113f14949b07078711c113be9aed064a115313309ad1068c102213089a820662104b12b799f6054f0f52113d997905e10ef610bf986803c30d4c0f8f98a303e20d720f8398fa070212c412eb98f3045b0de10dcc95f3045b0de10dcc95e7876781a582d105e7876781a582d1055b904d90a18f2298bb99969b76992eaa579c579c509cedac9b9b9b9cde9cccac369c459da59df7ac579d0f9e3c9f74ad689dd19e6f9f9aad8c9d169e849fc7add09ca99def9ddeac0f9c779e009e6fac0a99989c429f69a2798a32917396ac8d3c954696389ac887e0954499e29b65015b96e298d29a9e036d942b9a479c7f011e95439acf9ca3847894459bf49c6989cd94729bd19ca6847194e29b529d32881d941a9cad9d8805b693619cf79dd301bb97559c3e9db0818c940b9a279b368fd293a59623962396419558989d988e9c1e97f79842998ba0a998f698e598eca12a994b99219944a30e9909994199cfa3a4970f97e7963ca3a3953395569490a226959b944a9339a3b994e293b093a9a2ec927191ef8d3ea2f6911c8f668d75a16890c88b9406e2a04c8fd684270679a0c98e9e84e0052da0bf8c62043e0cde9f778c310ab80e4f9f7689af0e5f10ca9e6084d20f1712bf9d27845d0fac115a9d438138105f12f69c398115104411d99c2a81de0ffa118b9c1781160ef50f5e9c0881be0d96101e9cfb802f0c3310589bf280d80b6e0ee19ae3006f0b260e689a88822406a60a3a9a7582ef01a607fa997085d78170829099428612859e89d998928365076805df964a8ab28f939066974a8ab28f9390669797865080f882aa0497865080f882aa049290649063925d98809b459db89d0faae59dd39fa69f1bad709df19f72a0f4acaf9d5ba0eca031addc9ee6a066a17badb09ecca0f0a194ad7f9ef7a0c6a1a4ad5f9d07a077a071ac699b809c5e9c39ac83943f9723983ca34987d7937c97338a3694079478989d848f958e958f98d484db9391963299f48230942f95b39640856c9376978e993285eb931799849b70891994949ae69ca6079b94119a9d9cf0884b923e9a5a9cba06c691d39a9d9c6381ac95869a289c6c8194920199fd99fd9398902992ec8fb79ae1941c98f098db9fb2985b9b9f9c0fa237990f9d5e9d79a29e989e99979a62a3259849985b9864a4e398d198bb98c4a4d696d697569816a47b959c96569608a24795a5962897bea2ba94c895339661a23d94bb942495e7a12c93e7923193bfa08a925d92a09248a0d8913291428f38a015918e8d348cf89f678f438a5385929ffb8d0a842605289f308cc203110b8d9ea28b0609430d979df6893c03230d769dad89b308040a149d20880d03eb0cfb9cf087e4029809999ccc870708420c1a9c25877c02df0b619b42885282fc02ce9a03889686df825f9a9d8748862b88fd99ba8719892288f09985883686b68ac99918882289a98abe9934892886838c6f988d94018d1d8e4b958d94018d1d8e4b95f1878a8212841204f1878a8212841204c592a99368937898749c5f9fb09f1daad09ee6a077a116ad949dd5a03ea1edac339edda07fa1e7ac259f6ea105a245ad159f46a11da23ead639eb6a015a15cadaa9d13a074a06eac5b9b119fad9c62acb399169d999f79a6f487e59412981b90af933f92cd96dc8393943095c198df82e194b895399800846092e596619819845c938b95489852822b920298609a3c833594bb98a69a58856e938b98ec999088b6933499389b8488bd8f3c98d199fd8db18a6c8de48c4092e5815910df120e96818958093e10a798da903c91ac906c9eda94229574942fa1d696059603960fa211972997ab96a2a303981f98b99834a4089885989d98cea3619621984298b3a24896c597bf9701a22f96d297d297d9a2c6948e952195e3a1d0948294bb936ca18c93ba92539183a0b89240914c8f3ea00592e78f4e8c2ba0c1905d8df68e22a0f28f048a048cc89fb18ed683bf8b819f828d9a83f384099f4b8d5c836c84039ec18c1083df83439d018c3588a983bf9c8a8b06885189989c338bb0873589659c0b8b87871b896b9c128b038ae188389c3c8c198c988b099c838b8a8b068bef9ae08b868ca48c0c9ac38a4e8c568c5899768b368c5e8d24991e8da18c0b8e30982986070869065797be88718c20904a97be88718c20904a97b6852d8073819c02b6852d8073819c025191f7925093d898819c22a036a0b3a9029f4ca171a2f4ac719e63a1c1a2a3acb29e6ea224a3a5ac4aa0e7a22da404ad52a0eaa23ca43ead67a053a355a444adee9ed0a127a28cac229dd79fa8a07eac8d90f20fd0173ca970873f8fec91909b2292d090ea94f68cbf945f94ea97e0000894309618990f853994b2968c987684469498959597ad83bc92a2978c99bf84aa92b7984d9bc085df91c398fd9a4489708f0b98df99ff89f68dec935c95bc8b53890a8d0c8e3c908f001810c910a9944e05de114014be9a1a8f6e839d0d2da0bf94a993a5927ea14b97d096a695e6a31c983698b298bca46f985198e398afa44a988d98379955a4fb961a98059853a28d961a981398d0a18596199816986da24c957b96529652a1459510972b9738a1ed945f965296e5a082941b96ee96bca052948c95539653a083938794cf95f29fd19248940795cc9f7d922f94fa94b79fbe911193c694139fb691bc91ab936a9e41913591d292929d3b90fe906a921e9d938fb6902092c69cab8e7e90ad92819c698d29906591339c6f8c468e4f90bc9b598cc88e1b90be9b298cce8eea8fed9a118cd28f9090ee9a118cc58f26919a9a8a8b908ff3902f9ab88b878fa9913e9a3288e18157820d990288a80108823c970288a80108823c970c842b00bd8037020c842b00bd803702e59284940c95ef98f29c04a1bba12aa90da002a351a492accc9e8aa2dda358acf49e47a32aa468ac66a008a4b5a4baac86a00aa407a5e7ac71a023a4fba419ad2fa05da31aa4a0accf9f86a2c9a3b9ac31993999869c5bab86882d0b6111d5a3a38c5d8eb1909b94e98fb88d09949d8891910494ef96348c45919a967d98fa8b2c90b4918b94198b718cba910294578bda8afe8c958d0a8fb40bfc0f41129792430fb115bf17c794401038186919359603119718361a6998ff0d4617c3189c9981080d15de150a9da98fa00eef0edaa13294d98be591c9a23396d3931f961fa32f98ea96e59849a3b799ad99029b2ca4a399339a1a9b09a344994f9ae49ab3a2c098f199ac9b8ca2cd98759a1d9cf8a27b972699af9a40a2b0967c98e89934a2b495bb97989869a1809532974498eda0e4941d96d69786a061943796539724a04f94e295d696929fbd937f95f696bb9eb8929a958096029e2d921d959596769d5c91b9943f960f9da89087942896fd9c4890c893c0958b9c818f4193bf942e9ca48e1f9224933c9b668ed291b092c79a5a8e2691d2916c9a9e8dfb90a4910e9acb8d469100929b99048d40911192fc98cd8c049182929998ec8cd49080924f98338c828fce911597ef8b648af58b3295ef8b648af58b329579889880f781400179889880f78140013394e6958496f098799d08a2baa21da941a0aba3b9a464ac5b9f9da3a5a433ac8b9f1ea4e7a418acbaa0a7a47fa570acb9a08ea4aba594ac56a06da431a59facb39f5da30ea462acb89e2fa2e3a264acbf9c369e37a016abfb90708f5b0ae4a8fa0c2d149f16b7a1af0cbc102714c298570dd80fde118395cf0d0f11ec12a694bc0dae103c128293750fb814fd175b950212461733197f95211342190b1c0398de126719aa1bb098cb12c61bcf1d229abc14491c411d049a4d14a61cd91e359d6512f11b6d1c27a09988631a431c49a225921b13ad158ca3e3954290b3913da4ea975b98189928a48299a59a2c9c71a43499ef9a569c39a43c99c19ae39b46a431989099169a15a3e4973f984499c8a159973798db98b8a16c96c997069985a18695de97b298f4a02c958197b39878a0f094fb96699831a07194a6963e98e49f06949f96db974f9f2a93fb95d997c29ea192eb957097209e59921b95ee96959d58919d94d296ff9cca907a949596989cd5907c94b796939ca490359431961d9c5d9004943d95169b3090ac939e94be9ab28f7a936f947a9a558f1593ca93039aa78ee6921f94b199ea8d9792e0934799188d7c922594fd98588d2092bb9306997a8d6b9281949598f18e5b8fe1909e95f18e5b8fe1909e950d868c804d81ac010d868c804d81ac014a92af95c8957799859d74a260a367a9c6a094a441a535ac19a07ba45ca510ac41a0c7a4b5a5e6ab1aa151a54da648acd6a010a550a661ac7ba0eaa4e5a54aac48a033a4e3a4ccab709f8aa36ca47cab639ebba16aa3dfaa189b4e9fa6a069aafb917796b4961fa84110691749199aa2201357192b1b159dac14611a421c2c9b3915351b6b1d139b2a15331cad1d0f9bf614761b351da19ae5145f1b271d8b9a32146d1b091df19a1013c31b371d0f9b3315c91cf71d6d9d6814a01b621c81a00f0e941a5c1c9da186932811391455a36c961f9039880fa4c69960960e96e9a3d2983a9915994ca4429abf9b909c74a4e299ea9bfc9c2aa4a8994a9b9f9c3da416998f9a5d9b4da30a984199519a43a2f5985499b29a69a28f97db98239a74a1ee96d698dc991aa13596c198a599b9a0d295d198b29945a039958598b499de9f93946998a299539f5594c79724998a9e0894cf974299c09ec0935597f098f19d01941997bf98949dfe93df967e98099dc09379967898de9cc79203960e98709cba9188959697279c1d91e494b2965e9b8590a1945496f69afd8f2a949395569a8a8f37944c95dc99288f0a94fa948099768e8393d5943399d98eba93f694e498b18d579125935c988c8d348f79916e978c8d348f79916e971c8c168bcd8941081c8c168bcd894108659560988d98c899b69deea24da302aa4ea0cda479a5ceaba79f7aa42fa577ab2ca0aca4c0a567aba1a0f6a49aa5d6abb5a0c9a445a6f0ab7ea0c9a4e5a5f3ab85a074a464a589abf89f00a4f2a4bdab229f25a219a4ccaac59d5aa106a30faa769aa09e5ea00aa9f7021c12b81339a8ff158a1dad1fb9a4bc14fb1c291e7ba11b178f1de61f05a0c117511e3020f89e61174d1e2b20569eac17fb1ec7205b9f0916731e2e20de9e1316551dee1e529fa416f61d171fe9a1c711dd1cfc1d38a3988d2e18f41a06a41d955c079b085aa4ca988f980a998fa4f0981a99759abaa47a99d29a429c39a41499399a299b30a42d99529ac59b92a35199799a209c3ba474984b9aad9b9ca37697179a9e9ad1a15b98199b239c35a2df97539aef9b86a12f97e9997c9bd9a0ab96cb998d9b8fa053968a994b9b50a0fd95ae998d9b2ca0dc9598993c9b7a9f58956799c79a8f9eee94e498519ab69d8f947b98b7990c9dbf930398ed986f9c2b939097fa982f9c9192ad97e1981a9c5c927997eb98ba9b3a92ea968d98439b339261960798d69a3a925296dd977d9a0692d495da963c9a359124955c96cb993e904f949c9563994b8fca9377951899b18e5b932395eb982b8daf90de934098d78d958e3890c796d78d958e3890c796000040194b1bfb95000040194b1bfb95859c43a1dca172a8949f76a4d2a4faa9de9f6ca437a57faadf9f71a481a5f0aa5aa0c2a4f7a51aab37a0aaa4afa520ab8da0e4a42fa644abada005a548a660ab62a0b2a41fa638ab3ca06fa4d0a5ceaacc9f78a3bfa48caa349fc8a274a40faa7b9d54a14ea290a9ff9a309e11a007a99c97eb8e601086a77d0cc018e219b5a5d814721cc71d46a467153e1d981ee2a33816371e412059a3c2168a1e2b2056a3e2151b1e941f19a3e414121dd51eada30c0d9f1a561c03a4708ccf17151995a49794dd0d720f01a5169b8b929e951da577991d9894998aa5049cd2979098fca4629ae799df9a28a44d9afc9b649ecba4099dcb9d709f4aa4319b649d199f2aa4fa996f9cde9c83a20c99939c209dc7a2be98129cee9ceea12598ed9b0f9d1ba1bb977f9bba9c6ba07097fc9a959c1ba0fb96a69a459cc89f4f96239abf9bea9efb95b7993a9b4f9eb2958b99159b2e9e5e955499d49ad29de694f498979a7e9d84948798089ae79c1e942798c399839cd893fc979899469ca9929c979199419c7b922597de98599b6592e4968598a69adb921f979f985d9a10931f9783980b9a3693369799981b9ab692fd965798fa991e924e963198c6993291b69588979c998790a593ba95fe980d8fbf92d7951e980d8fbf92d7951e980000a91ab21ccc960000a91ab21ccc96359d1aa217a340a8a19f92a45ea5daa93ba0bea4c4a531aa6fa020a531a694aab7a05ca5aea6dbaa4ea027a546a6bbaa59a00ca567a602ab2ea042a5aaa6feaa9ba069a57ea6abaacba04aa52ca66aaa36a004a5e2a530aafaa083a45ba593a9329f87a399a45ea98e9d80a116a3dda83c9c0e9f8ca02ba86099ae9c269eafa7f494c59345902aa7fb932c084f8984a6488f72140617f2a567902916af1695a5008f4d14b31699a5a292b70d371475a5a695b092e38861a5fa97169894983aa54e99769af69a1ba53e9aaa9c4c9df5a4879a0d9d919deda4679a9d9c9d9ebea4d699299da59e58a48d9aed9cf09d63a4529ad99de59e3aa4589a199d2e9e2da4d199609d9e9ed9a31e99e49c369e18a3f298c09cd79d36a26c994f9de19e98a19199b29d469f17a14799949c159e47a025984c9bb19c8d9f8397d09a689c579faa96b79a5d9ce19ea196df9a7a9c779e2b96ca9a6d9cec9d1f964d9a339c5d9d98957599839bd49c999514996c9b019d0395c0982f9bf59ceb9482983a9a739ba9946498bf99e19a6b94159844998e9a2094cc97ec984e9a4193cb9674986599e192d29650981199909249962a98bf98a19298963598f2983892f6950c987998a7900b94ba953398379005945a961199379005945a9611990000f41a401d68930000f41a401d6893859c92a176a2d2a7c99e6ba416a52ca97c9f9fa477a57fa9d89fe5a4d5a5bda946a033a562a6f9a9c89feda422a6d9a985a045a5d9a6fca952a0b2a5e1a6c6a986a071a5aba6b4a97aa01ea547a665a92ba0f7a419a62da90da0dba40fa604a9a59f65a446a5b5a8979e95a3a8a478a8f39ca8a117a49ca8849c1ea185a252a8eb9bb39e55a0d8a7ae9a7f9d989fd6a7a998359c359e07a81799e19b209d5ba752984a99289ad6a6bc984a9a829a8da61699129ae698eba560991d9cfa9c0ca66c99649d6e9e0ba66c9aa59d769e52a5bb9aea9dc09e0fa50b9ac89dfb9eaaa4859a689e509f17a42d9b739fbba02aa4389bf39fdca0d8a3049ccf9f3da1d3a3a29a689f8ca04aa3659a6c9ed39f0ea29899c69dd59f71a19999a29dfe9f7aa143997d9d399f86a0e498e29c629ee09f0b98819cc49dd69e76973b9c769d309e4597099c459dfa9d1f978b9b249dd49dc896089bb79c9d9dbe96fb99229cf39cfb95cb99db9bd69c42957599be9bc69c9f942899369b219c1a94c6985a9a4c9bce938598ab995d9add934e986b99ea99ce93149815998c99e3939897e0985399ab938897b998de98a0921197a798f098c49197966998b1980a92969683981699628f6f941b9ad39cf390cd94e7969f98f390cd94e7969f9800005514c9170f9100005514c9170f91499c9aa1d6a238a5939feda4cfa5baa89e9f21a509a6e6a8759ff2a41ea615a93da07ba5dba637a9c69f49a565a637a93ca04aa5c5a669a93da046a584a665a909a03ba5f6a669a9fb9ec8a4c3a63ba939a005a527a6c4a8a29fbfa4eba5aaa8bf9f85a4cda578a8c79e46a487a536a8a99f29a43aa5e9a7859e00a4eaa4c7a73a9fefa221a4e2a6419e20a34ea4cba6b99c3aa2aba3e2a67d9c0da112a249a6da9c57a0c1a001a6499b849f01a11da6339c53a02fa19ba57d9c93a0bba14fa58c9ca5a0a6a116a5fb9c1fa109a294a4149d70a19da254a4979c22a17ca203a43c9c27a167a280a3839cb8a0a1a1e7a2169ceca003a2b6a2a19b42a03aa159a2369bce9ff3a0ada15a9a2f9faea0f5a08899369e22a07ba0cb991f9e1ba075a066990a9ef19f54a03a99a39de99f39a07699e59c419eb29e6999699cc89deb9d1d99719caf9dd29d5f98359c659d659d6c97e19bea9cea9c4b96dc9a629c459ce2959f9a229c229cbf955a9a219c219cb295fd99e69b299c61959299bb9bbb9b049531996a9bd29bba94d298069b6a9b4d9468988c9a4e9bbd932898199a739a3d930898a2991f9ab892b3974d994d99b19293972399fe982d92799701990b988a90c29446960297ca8f73931d951196ca8f73931d95119600001b163818519400001b16381851944799c89fa3a044a4099ed8a3a9a48fa7649fbca4c5a57da8359ff8a453a6a0a8a39f33a56da699a85d9f20a552a699a8259fe0a412a678a87c9fc0a409a684a8d19fe5a435a665a86c9ff5a439a642a8909f16a5afa642a81fa034a54da625a8a6a01aa56ea6c9a746a0b1a4aca5bea6d09f79a479a57ea69e9fada37aa44da5d49eeca3ada430a55a9e30a333a4eba4be9df6a23ea4bba4229d26a2a1a38ea4c59da8a223a4b1a41a9d70a267a380a4ae9d79a298a378a4b99c28a295a32ea49d9c9ea13fa39ca3799c14a160a2d2a2289c1ba171a271a2409ce6a03fa225a2629c9fa0ffa1cca1159c89a0cfa104a2e29b7aa0c3a1aaa1fc9a2f9f55a02ba0c99a949edb9f439f769ac59e1ca0e49fd2992e9e09a0709f8f99f19daf9f359f7a99a29d2c9f059f2f99569d2c9fde9ed398339df89e1c9ef2983e9dcd9ead9dbc98209d879e529d5698c49c0b9ee69ce297529c8b9d979c0497ad9bfb9c159c3996189ba79cce9bde95a19a659c8c9b7295339a239c479bf794c599ce9b089bae945e99529b949a7d9429990d9b289a82940a99dc9afd9974940099829ad5995594b9984d9a7b999d935c98099a8e992a93f197b49965996092679788996199de9101963b985f98be91af958d97d197be91af958d97d1970000ec14b01666940000ec14b0166694e09949a060a11aa4169e16a421a544a79e9ff2a419a64fa8329f07a569a695a8a39f21a5cca6bca8429f1ea594a67ba8109ffea453a63ea8759f20a535a653a8259fa9a40ea607a8079fd1a41fa60ea8369fdba401a6fda7f69e9ea4f9a53ba7a69e78a4a2a5d1a6859e57a488a51ba6989e12a422a5ada5029fd5a305a551a5359f5fa3dca4efa4989ffea297a4cca40ba030a3d1a479a4829f09a39ba456a4aa9eb6a264a4e6a3199eeea1a1a3a0a25a9dc5a1fda212a2c49ddaa145a3a5a1569dada1d5a22fa13e9da4a1afa24ca1f29c6ea1a5a244a1c49c65a18aa210a1d69c5ba1a7a241a1a39c01a143a22da17c9ce7a050a223a1269c72a0e3a1c7a09d9ae69f3ca14da09a9a459fe0a0fa9f8599589e30a0a19e8599139e9a9f199ef698959dde9e549dbe984b9d7d9e1a9d83981d9d5d9eda9c5298c79c369ed59c1b989d9c179e9e9cac97609cb49d699c5097169c539d349cfd96d79b0e9dc49b5296309ba19c459bbc958c9a3e9cd09a9095139ae69b4d9a4795ef997a9b469aec94af992d9bff99b0945a99cd9aa8996b942a99919a4d994f94ec98609a24993c94c198339ada9815947098d899b198cc933f989b999d984293fa9716994b98eb912d9610982897fa9180942d96cf97fa9180942d96cf9700002f18a819a49200002f18a819a492999c27a321a483a5269e52a429a5c9a6409e58a44da5eaa67c9e9ea4b4a552a73f9f05a533a6c9a78c9f1da557a6c5a7699f2ca588a6e3a73e9f23a577a681a7739feba420a621a76d9ff0a422a6d9a6399fa5a4aaa540a6979e62a453a5cda5539e22a407a566a5319ef5a3d5a41fa52c9eeda3cba4cba4499e9da3a1a45da4c29d2aa34aa4f4a34b9d35a2aba31aa3549df4a11ea3e8a1839d4fa2d6a31ba26b9dada24ca46ea2d89c16a257a4b2a23a9d1aa2a0a3aea15f9dc5a11ca35fa1bc9caea11ea31da1c19c56a18da2bfa05b9c1ea158a26ba0049cafa0cfa106a0e39b44a024a18b9f5c9b49a03da1889fbf9b14a0f7a03e9f569b659fbaa01b9faf9a459f03a16a9f749a529fdea0109f4a9ae19e77a0769e289aa79e6ea0699e8e990c9e0ca0fb9d5199cc9dc59fd89d05999a9d7e9fbd9dcb984c9d709f909d9698009d199f469d9b98bb9cb29e319d83986f9c519ee09c0b98499c089e189d9097159c819d329cde967a9bf29c7e9bcf95b89a7a9cb29a0c95eb991f9c4a9ac19479998b9b309aaf943c99299b029a87941099fd9add992894be98a09a4199d7937298039abe9869934098a0994d9856931e9880993498a993fa977599a6974b93fb96b898ec9684935d973799fe9684935d973799fe9600004f17b818699100004f17b81869913e9cd1a211a4d9a4f29d35a407a5e7a5099e7aa487a574a6989ed4a40ea60fa7c79ef6a453a63fa7979ecda401a6e4a68f9eb2a4d2a599a66e9e9ba4aaa56ba6d09e7fa463a508a6ad9e7ea48ca5b6a5b19e6fa477a58ba5849e95a494a542a5869e40a428a5a5a4bf9dfaa3d4a425a45b9d6aa37ba491a3049d1aa33da4eba2389da2a2cca30da2109d8ba2a0a38ca1a39c7da200a4a4a1939c27a258a326a1c79c66a13aa266a00a9c8aa1b8a260a0e29b10a10ba2eb9f9d9bb8a0a3a1709f469c6aa003a1db9e099cbfa089a1779f039cfaa048a2fe9f099cdaa020a2a19f149c93a0a4a13a9f9d9b26a01ba1d59e8a9aa39ff0a09d9ec19a359f71a02e9e409af59e6da0ec9d179a439eef9fd69d9e99029ec09fab9dbc99dd9db39fb19da299909d5c9fa39dd599939d9c9fc29d299a939d959fde9dcc99709d459f1f9d3c99129dbc9e839cd898b79c309e1b9c41986d9cc99dc09b05981a9c899d8d9b5097e39b579d4a9bc4966d9b109d3c9b0d96d09ac79cf59aab955a9a879c8c9a3395da994e9c5a9a1e95af99fc9bf8990e959999bd9bf29924955f99479b6699d3942099cb9a27993c94cb987f9aed98429493984f9ac898e9934698cc993c9867923d971099bf979792be95a597a9959792be95a597a995000000000000000000004f17b81869913e9cd1a211a4d9a4f29d35a407a5e7a5099e7aa487a574a6989ed4a40ea60fa7c79ef6a453a63fa7979ecda401a6e4a68f9eb2a4d2a599a66e9e9ba4aaa56ba6d09e7fa463a508a6ad9e7ea48ca5b6a5b19e6fa477a58ba5849e95a494a542a5869e40a428a5a5a4bf9dfaa3d4a425a45b9d6aa37ba491a3049d1aa33da4eba2389da2a2cca30da2109d8ba2a0a38ca1a39c7da200a4a4a1939c27a258a326a1c79c66a13aa266a00a9c8aa1b8a260a0e29b10a10ba2eb9f9d9bb8a0a3a1709f469c6aa003a1db9e099cbfa089a1779f039cfaa048a2fe9f099cdaa020a2a19f149c93a0a4a13a9f9d9b26a01ba1d59e8a9aa39ff0a09d9ec19a359f71a02e9e409af59e6da0ec9d179a439eef9fd69d9e99029ec09fab9dbc99dd9db39fb19da299909d5c9fa39dd599939d9c9fc29d299a939d959fde9dcc99709d459f1f9d3c99129dbc9e839cd898b79c309e1b9c41986d9cc99dc09b05981a9c899d8d9b5097e39b579d4a9bc4966d9b109d3c9b0d96d09ac79cf59aab955a9a879c8c9a3395da994e9c5a9a1e95af99fc9bf8990e959999bd9bf29924955f99479b6699d3942099cb9a27993c94cb987f9aed98429493984f9ac898e9934698cc993c9867923d971099bf979792be95a597a99500000000000000000000000000000000328c5e9c939d35931214321be11c66a5411dde232324b7a803209d24ea2520a9b41f762434255ba9a61e922390245ea9081f1e24ca24aba9901f5c24302581a9c21ec023d8248fa91a1e8323a7245fa97f1d52235624f8a8de1cce221624fda81d1dc72179239ba8b81a2c20822115a81618841c2a1d25a6d5907d9c989db9a61f9e89a507a7e6a5039c93a238a4330b5d94979ab49bb816e7876990e990b1927495459dc09ea7a293a8f9aff2b0f3a923a57aacc3adb7a583203e207a1ddca08e212b21072007a0411d381e681def9d6a16ab925790df9af49c3ea5bea6ad9e5a99ffa13ba498a49c17ce198b1b8da493176e1bfa1cd2a2ff12b11a181ccfa07614961c121e1da077157d1c4d1e01a00516d31c201e239f0616071d331ecb9e7f161f1d3f1e889e94159b1ccf1dad9d2415761cb41d729dec14441c371d379d2a151a1c091d099d1615cf1bcc1ceb9cb914491ba01cdc9c2b14a21a431cb59cbf130e1ad91b219c4a13a119181b189bcc123319831a579a6212f818491af399a912c918ec1999997b129918d519359951128e18b819fa98f1116a188019c498b11138186d198f988e11cf170d1932987211431795188697b6105a16f817a9960c1129170c188e96eb0fe414c215569523105d16961753980000000000000000328c5e9c939d3593328c5e9c939d35931214321be11c66a5411dde232324b7a803209d24ea2520a9b41f762434255ba9a61e922390245ea9081f1e24ca24aba9901f5c24302581a9c21ec023d8248fa91a1e8323a7245fa97f1d52235624f8a8de1cce221624fda81d1dc72179239ba8b81a2c20822115a81618841c2a1d25a6d5907d9c989db9a61f9e89a507a7e6a5039c93a238a4330b5d94979ab49bb816e7876990e990b1927495459dc09ea7a293a8f9aff2b0f3a923a57aacc3adb7a583203e207a1ddca08e212b21072007a0411d381e681def9d6a16ab925790df9af49c3ea5bea6ad9e5a99ffa13ba498a49c17ce198b1b8da493176e1bfa1cd2a2ff12b11a181ccfa07614961c121e1da077157d1c4d1e01a00516d31c201e239f0616071d331ecb9e7f161f1d3f1e889e94159b1ccf1dad9d2415761cb41d729dec14441c371d379d2a151a1c091d099d1615cf1bcc1ceb9cb914491ba01cdc9c2b14a21a431cb59cbf130e1ad91b219c4a13a119181b189bcc123319831a579a6212f818491af399a912c918ec1999997b129918d519359951128e18b819fa98f1116a188019c498b11138186d198f988e11cf170d1932987211431795188697b6105a16f817a9960c1129170c188e96eb0fe414c215569523105d169617539823105d169617539835825499549bcc9135825499549bcc91f40da016a21a1ea6201e0e24a82474a9471f812475259caadd1d94237c2448aa031ed023e424ccaa421d50221e2491aaab1f7424a62562abc61dc3237b24caaad51c1f22ac23f0aafd1d22237624c2aa7c1c7021ca22e5a9881b63204f2185a9d314d6090a8b16a9e294899ff8a08da7b1990ea2b5a38ea46c9b36a380a42d9e4b9beea238a4e997289abca226a4ac98199a0ba379a4859efb9e33a789a8aea475a23baba5ac85a633a2daa955ab54a0129f22a542a6e5983a8b06a05da11b9efe963aa05fa1729e259a0ea2a9a336a23999c1a0f3a108a05b982ea07aa112a1d694fb9de49eb0a26689cb96419811a36986bb90bb9116a262138f19c71aa1a1a111d317b918c4a09314c51a391c2fa0fa145b1bf21cc59fe115c61c0b1eec9f05166c1c9e1dc19e6815df1b3c1d299ef214e21b031d149e7514911be71caf9dd914771bf61c379d69148d1bda1cbc9cef13ff19931b569cf5127519091b269c94126419911a189c931228196b1a919bc812f818561ae39a39127d18bf19749a2812c218eb19179ade118718e519e59905127818b619b699ec111e183c19e79864119517b118ca97ac106316551867975e10d9156717199795104d161e182897460da313c9144e95210f6815bc162498210f6815bc16249897825c9a3d9a9f9297825c9a3d9a9f921e925f94b48d6ea3a6178920da1e76a97e1d4f23782483abd31c52233924beab0f1d40229623b4ab931c8622162309ac871cef2141234aac431c7021c322b4abce1ad520512262ab331a3b1fa11f96aba618e11ea21e1aab770f6a170117e9a9e994bf9b129d70a81a96499ffe9ff0a3c398ad9ee39f139eec99aea014a2ed9a4199f5a004a2259a2d9a1aa299a3f09bea9b72a39da4859e1b9dc9a528a721a1759ee7a640a897a0d89fd6a64ca846a0cb9e3ea570a6bf9ccf9c68a236a3699fac9baca014a277a1e29911a058a1f2a14a98fa9cc29d4ba0d897fc9ce59daca09e95149ca89c89a164926099269c75a22b906996d89786a1910fe915b31534a10314a5190d1beea1121308194e1a1da10614a619201b0ea1bb13631ae31b00a15614b01afa1bbe9f8313b519391bde9e97125519871ab29d68126819641ad39c70126c19be1a839c3d125a19a11a379c1612da184e1a8b9b1112d918ab19349bb11144183419089bb7112d185219f19a011276185b19fd9a671222180519c89ac412f417be18bd9938118416aa171699470fc8150a17de98fa0f281696173e980510d0156017ae9701100e167c177c97300f9c155317fa97210ff0150018d6963d0c3a122114f5965a0d8b14971513975a0d8b1497151397f58ead85af0781a3f58ead85af0781a34197e59aad94758d93954094029645a6821b68223524f0abe21a3a21f4239dabd71bf820f7202fac5a16571fc31e16ac1b1a2e20772115ac5f16371e981f98a988152a171918c2a0de0bc310ea1174a998114c183319d3aaa894e39baf9d51a97598239e8b9f97a43b99679efa9fd79d6098d29e56a0e29b5c99b89fb7a0d99a7498a79fcba08e9aaf99dea00ba2209b139b23a2a9a3459c5e9ccca3cca4d29ced9c98a487a5009dd09daca48ba5869cd89d61a45ca50e9c389db2a200a4569deb9b2ca0f4a02ba08c9ab09ec49f3d9f6899219d1d9ef8a03498219c999c09a1ab960a9bf89b43a13b945b98b99820a2b790159475922ca213026e0cb60d7da2710e8c155e15bba137101d16f5172aa11113161ad61b60a18514331ba41c2fa1bc14261ce31ca6a0a512081a911b569f6a12cb19251bc89e6112d619a41a6d9e45118e18b419c59d8e117818031a6f9ded1062187219069d151158189c19c19c9b11d818f419569c5a115f18a219019c031172189e19b69be71001181419ae9a531072178a18059a7f10201760185499b30f1f16b717c498a50e5215251703985c0ebc15b1164a97df0dea142616c096120e4d15b7165797bc0f03167517e398170e09157316bc98690c69145215b598690c69145215b59800000000b281648000000000b28164800000000000000000b485f608df0906a2e214f41db91e07ab5116ae1e492008ac7017d11ea21f60ac7b16111e8d1e60ac4a14341d4f1e2cac01119d1b2e1cd1a9551063145b1589a1080645117212cea9d296b59cff9cccaa5898039e449f05a69098e19d609faaa1119503981199129cf895d39be79cda99ba976c9daa9ecb985d971a9eb79ff3986597289f7fa0ec98af915b9e6fa01a9a1a955299de9a2f9ac0954d98b198729a1299ba9f05a14d9cc19bc2a1e7a2c99af19b57a142a2079d269c5c9f18a0b99e5f98f29c819d78a0dc9812992e9a8da02f976c9a8f9ccba0c096c59af19a35a1a095f598c699a2a1d59163944e95aaa1f98d43851a8d1da29b850910350d75a2a505af13071514a1e60ec517d61898a06810c418891989a010119c187f19be9f2412a019ee1a2a9fd6116119821a899fc311b719761a7e9ff710c118e019db9e0511f5180c1a659ec2109d184c195c9d8310081746188c9c6c10e1165f186c9c8f1002172d18059cda0f7716f717499b8f0f0d163817f09a410f48162b178f9a150f1e166217199afe0ef1152217ba99640e7e15871605990f0d991467153f988e0ced13e414f7968c0b1c122814bc96350de412e113ee96a40a7112f7133498810f08173718f89a810f08173718f89a000000009d002000000000009d00200000000000000000004a8b67833d84a8a22d06291b0a1de6ab250ca31b9d1c88a98a0e82151715fca3a986c916f017eaa9ad90591267161aac388f85148815faa96e8a170759076ca0f3964d998a99c3a98599b69ee39f61a98398ae9edf9f8fa17495b09a839ce99c6b92f59426964a9be994589a2b9c20991b94269c829d0f978a96969c889d93965494e69cb89ec19684939e9b469df4959790df95c097f492708246884e8c0f8c15003700548095855789bc8a268cee897197b09c709d4999da99619f38a0509e0f99dc9c939d2b9fbd97af999a9a78a01898229b229c30a1f1955d99539b8aa2c4951b98ff98f8a15893749514959ca1fa91e18b968667a1d08c1d11a51053a2bb88f413b914f6a107826414a615daa0bb0995173718dda07b0e4f18aa1827a0bd0ddb17f418f19f270d2d18fd1800a0dd0db6178718939f490f39179818319eb50dbe160418a29d280e0316b217669d050fa017a018299d350f07173318789c7f0e7e16e617349cee0ddf154417149cfd0c7f1591169a9bfb0c3e154816e89a010d26155916cd9a7d0d2115b315f699510c1014a414e1981b0a361337147498ce0984128c1300989b08fd10c1120998c4091411cc1135988205410c520c1f96ae809e01e685fd97ae809e01e685fd9700000000cd80298000000000cd8029800000000000000000db933b946f9441a12e947393a694c8a9d094c28a060c10a9cf912788f58e3da46996c294b792e8a99d981899d29653ac5b96b094cb9569aae18d478ce38f989ff096e590f58b81a97e9a76a005a147a7a995239cac9c699d6794e598419ba899a9908494f694de9829916e983f9a6196dd8d5198b29a7792c39227963a969b8fd58b5a99009c8a93848ca0988b9a78946e8a979020922092fe82bd8396867d895980f3819582bb83c38a9a8de68d76840296f09a3b9ca3950a98919a939a179db8961f9cdb9c049f5599bd9b999c32a05e986e9b6a9c7fa10f98039c899c20a2f297e29bb99b30a293942f993b99d4a2ea8b858d479361a18f8f7a90269223a07990da8f1b919ca18d8ca90e411079a18c89c8103110faa01482fd1224139da0ef016f149b1570a09305f71582173ea0fd0c2d18ef18be9fbf0ce1179d18139f620c6d176b18799e8e0cc916cd17b79d300d25165617409d890c9a157b161a9d9e0c72156d167d9c5f0c37154d16d29b970c10151716919b9d0cf7144d16289b740c6d14a015cd9a5d0bb01390142b9a330ad5121a14a999fd09f0112913379926094e11d312ac98b903ab0ff610999853089010e711e498a600230c140e99975608a910701116965608a91070111696000000000000000000000000000000000000000000000000158c078b39035699d39403912d92b1a9da954b91468c4fa91292319287947aa24498ca962c9912aa199a549a9c9b7aac65984a996599a1aaed8fce911491e39db798b199b799e0a9b198b79ccc9c68a71295a19a009b5f9b3e92ee96f8987097268d9c9085910097ce8fe797ce996695968c0d97e2987c90bb8f7f93bf93b18d359025971099d2900000c797a89a4894128b3090d8917b9109829f83e684c188160049807c80c9817786d884ac852984ca9038957f963995a0944687e00fe49a8e96bc9b2a9ba19d69953192a9949ea02298f392ce952aa19e97cb9a389cf3a12d96b198e199bfa116953c971d984ea15c891d8d0e8f529b108f088ecb901b9dd591768ee291aba2598f680e9c1083a2dd8c1c137f135ca12d89f714b11410a1cb81fe14ea1495a095818a132214649f9784c8123d146e9eb884881215140e9e7981ec130d14029e7981ce12b213949d67011514b914479d36046b14bf144e9df303cd139914069d6b085e141815989ced08c81342141b9c5408b212ea13a29b610982121514d59a2b089912c113279a3d08f911f4120b9a66070011d2114999d8039f0e530f94980f82110ac50b5f9871021f0d280cad985386708a5c8db0986708fc103c110d986708fc103c110d98000000003c812d80000000003c812d800000000000000000298d538a818b8999c399769ae09b89ab5b99139a1799d5a92e943294af9585a1c499369a489cf6a96d9bfa9cc19b79ac60996b9a009ca7aa3d9089916f94b09cb9986399f596cea927998c9c439d4ba7e39088960297bd9b6191439714998f94a98dc2916192a48a9d8fd196ef98e48f758db2966e9878908290ef931994d28c408d3c979999de908d8442977899e7933089468fa890ab910681b681ee82fd86000057807f802981d48423850384e784068d379076911c966993a993de908b9b8093b5913b914a9d4d967495b694229eee95ed976b9862a0c89514986a9850a0b295f0965a9832a162933c946495a29f99865a8aad8a5394478c2d8ccf8ce49a24927791ed92baa11291cc853587cda15f908185df86daa1338fe40b770634a1bf8f610b8b0ce0a0e28bc910c11008a0a8898a10cb11539f778b76108e11de9ef58709116311ce9e43845f11ef101a9e27843e109a118a9d4401bc113e12fb9cb88309102811bf9c6d03e811de11929c20016c10c610649c040120108a10139cf500b80fee0e6a9bb802110e500e949a9302b50df10d059ad700810cc40d029ac780350c450cb89955828708ce097099ac803e0b470b7c987e803801a884b296d004a30c3c0c6897d004a30c3c0c68970000000031809380000000003180938000000000000000008690a5907f92d499499a609c7b9df7aa0a9a4b9cb89c1fa987949e955d97aea10b9a429be59c15aa6d9c9e9dce9e8cac729a469cac9cbbaae690be927093d19c549a019b679ba5a97f947f0ea4153ea7af925f99199a0b9e8791c19775990496da8b228f4a90348c7c8c369365950f90b18ab1925d94bc8f1c8c7f8f5f8fba8c25887292a0942c91008bbc927994af9324842c8c288d31924980cd80598133854280b580ca80ca80978248829883a685ab85b201de0bba97769034901d8cf99a3094d6907d8d3d9dda916d8c7804e39f36967195c695e6a124953d93709901a4cf942c93c39447a28f924990579103a172867f871887da915d8a8686e389b4925692ef901894e2a011927a8ef49243a32e92178c1a8dcca19c908704bd859ea0ae8f900a7a0553a0818f5f04858544a05f90988ae28e16a0ac8f2884a28b659f9d8ef103f7840f9fe18a5c0e4c0beb9e3a84a110e610549e2e845d10a4109b9d6186f10e000f709dad8316104511f89c17819a0f0911a39cfd8012106c0f129cf780a40edc0ef59ae084fa0b180b7a9a76845809c40a2d9aa68217090b08509a7984de08b402809afa84fc01718b249c94846c097808fc9acf85d28b178de9990d861b84318822950d861b8431882295000000000000000000000000000000000000000000000000d692e99100946c9a609a1a9d519e42abd099c19cb99c86a9e4972198c8985aa2379cbf9d489e19aab09c1ca0a0a0a6acb49abb9dba9e52aa0893c1947094359dd196cf906698a6a9c4962190be95bfa858094a11d8118da0b68a6f908391db985f8a418e7c90358c018e419554975b8d4588049421957e8ef78cda90d390638cee8d9a95269854919384d991ed93ed93b30b4010bc10de8f70042808f50851887c010c059b053f831003b9061d0863836e8039108812a996d589950ffc13629ca68e6003660fef9e4e93d089248eb9a04e953895e1943da19e94ff91b693e8a25c949692ef9237a2e59239939c9332a088865d88e5896691b88cd6897b8b43946c92c4926994c2a030938a913b932ba12b943e935b9583a19993f493e694c2a065922093679431a04992be913e940ba090919f90d091d69f828fd983638ebe9f4b8f978caa91509ff68d7b03ef8d999edc8de488528da69d3e8de8829589f29ceb8a85027183789cd88a80020d89949cb78a6c02cf88419cc98a5402b1880e9c638a55829e88169c818b3c827588569b178a1e82b682b29a9089c28594873d9aca88f381a0871d9ab389d388458ce099538bbb8a3b8d0499fb88f88d938f01982f894e8ae38c24982f894e8ae38c249800000000f480ae8000000000f480ae800000000000000000a8901e9252936d9b799be69d5d9f60aa919b529f5b9feaa81d98069aea9af9a2549c4d9e11a079a9fd9de5a0fca1e3ab529c42a007a1b8aabc941298f2972c9e2b9a099d289d7fa94295b313a4148aa9bd815715e7167fa3950b4a114e11cb998c07ec0af00b3d8e3002bb0b640e9191c186c68d3990079026037605f306288efa056812c8141393e506b70f24118092b8054b80b381608e63001f004200398813002c003300fa82a7023b0886098689430da816781818996f0fe819291b4b9de68b11115712e39ec492578c9c8d85a078931494b99497a1d495d994e895bfa2ef941e94479430a4a5923490aa8fa5a00a859d88d388b892eb8c208b398d529581935e941e9808a2b094d494059786a16595f9964398eca0d694a496259897a01994ba9504988ba02794d69488972ba0fc936995f1971aa076932d957d98fba0ed921295cc975ea06f914f949c972da0af918e94e296ce9e7991a3937e95f39dc690b5915f93589d9e8e658e0f91e39c698d1e8ed5908e9c858c858c788f4e9c298b148cfb8ed99b7b8a4a899f8e739bea897b8b098d499b828a8c8c198eb19a1f8a728c4f8f909a758b418d1890389ad38a638d2790fd99ac8470888b89089a3f869804e40142963f869804e401429600000000000000000000000000000000000000000000000039945295e596f89b589c6d9f94a02daa549b7b9ead9e93a883984a9aa59bf8a2469cd69feca0a9a89d9d38a18da296aa709bea9e5ba023a9fb9520990998e0a14199bc993c9826a96697fb900897dfa9c6872314421763a66912d019a01aa1a05f0b850d5a0d2f93a80dbc14e81695952f0c39159716c294fb083d0d6f0cc090a080fe809c885d94640729148416d795dc0df91150132191ee064b0941099d8a85007504c8061b888d028508230a988d3402000f5c11759525080f0eb110b2956589530fbf10b09cc290b58de192269e24912c906691769dcd9019939891769cf094c8943d941ea0f892c9949c95d79fc98f779116929b9b9590f992c493319b28958696e196b09f28963b9852990ea1c1965f98da99b2a15d957f972a9937a12d95d196cc98d9a0c694e2951b9882a0c094b294509765a0ff946895259805a028946e9594970d9f1392229460962b9e71911b945d96699df3901994f395d19c3b90ab92cb94829c4f8f2f929894379c738f5e914894079c998e8d906b92459bfd8d2a9030917c9a808dd08ee3901c9ab58c6b8d2690fb99af8cfc8d77909499388c2e8ecd8f9d989d8c8c8eb79047982f8cac8d67912e983389828a158e4598f488f3860e8a3e97f488f3860e8a3e9700000000b5804d8000000000b5804d8000000000000000009392339486952d9b6c9c1ea01da194a92b9c93a0fca06fa85199579cdb9c08a3d39cbba0f0a182a8a69dc2a146a32faad29b869fbfa0c6a81898179b769b51a25b9a4c9d4c9db1a81099079ce59d82a90c837716bb184da8da103c1ade1b6fa3c20d0f1335126893170ed5145616f899970d78157a164198940f531394123893e50cde1526180a97dd0abb15d1172c97d90d0114da14da940c086d09a60ba68b00006b06c20af686c205a509180d188dea05b712f8152195410b31115710af9599093d17801253a0bc8f9e1529158ca1428d460ea493fea0b68e238d3092f09c7e9562928592c1a095965c968795e6a17e9537968198bda1b893b1952397a6a07a92c6934195119d25941494299608a0b49500976398d1a0499511981199bea035958d97cf9868a0f594249782980da0a6943d964e98699fbe93529659981f9ffe92ae96de98289f8e926e968699899f4393d7953b98169e56922294b096e99c4d91f793d296e59c32914c936096ac9c4c9079935f95db9bda8f79929b94179b458f69921d94e29ad48e3c920794649aff8e3d92fa93549ac58ed6918093c999988d2a9142934999438dd6906693cf98168c4d8fde916798118c8090e492e598a48d808e3e917a99a48d808e3e917a990000000097801f800000000097801f800000000000000000c993ec961e98ca9a749a609fd5a058a7ea9bc2a008a128a7be9a939d6b9eb7a39e9d17a186a265a8459e91a223a413aaf39bf6a045a296a8cf98fa9bc69b11a2a09a649e25a02ca8d39cc59f08a1f3a8bc99b49d949ff4a8c09051918b942ca74216861de41efda4db17961eda1fc7a2c117b81d181f11a05b16901c341e169e0f14651b7e1cac9c6b108118ee193b9bec0d0a14e514ee96b108350b8d0cd48c5a0144044d080d83ac094b0de40ce48cb60d72166016ac9c520d35198e1ad6a0128d6518691ab8a1a3898d18f718f7a2ac91ed8f568f00a1dd905c93fd94809cdd97109b4f9cd5a1ad98189cc69c94a26d98d69a049c7ca23d9633992f9bc6a0d19264945c95409ad295d1982e9a2ba050979399189b52a128976c99159b06a18f961699ce9abca0bd95af99fb9b92a038951d99e59a29a09d94ae98639a8f9f34941398b699d09eed93df974a992c9ebe9344973a99cd9d16940b970899009e2293f7956198449d64929d951398929c0092d8941e97049c8c90f893c395289bd88f8d93ff94769aaf8f4f932695399ac68f2193e994c799d58e0793d0942d990f8ee59274941a997d8e69929d94f798e58d4e92af94c198bb8c24921f95d199278dae907f922a98278dae907f922a98000000000b810b01000000000b810b01968c9c8c558d558df598439dd79d5aa6839c49a079a1ffa8c99a40a0daa047a7db9bae9ea09f10a4c39c86a0e9a11ca8949d51a244a47fa9139b30a15fa234a8489a8e9c4e9da9a2d99a9d9e65a050a8d39c65a04ba107a9879c61a086a1e6a81b99da9c1a9f36a88a878a0d93082fa68016e21ca01dada428152b1d7d1ed0a2d416ec1cdf1d53a02e14b31a141cdf9e69106019b01b6c9d420e8f1529171a9aa2091f0df20dc08f750a500cac0c2e8e9c0e3518d118b09bf3118f195f1aca9fb1013c1a8d1c2ca1f1891f187c1894a29c92861507180da39c94e88e1b94b3a3d1985e997d9a11a321990b9a539b60a3d998949cbb9d32a352987b9b719d37a41796ab99789b47a1c890a4929994f8988096ab99809bf59f9598529c4e9de6a1ce97a19bd19c10a107977b9a639c6ea06e964a9a009c0ba02d966599509bb89ff694d898679ac59eac944b98ea99da9d569452988099329d55946497d098879c2f93d6965a98199ce7928d9668988b9b5b929d9695984f9b7092b9968f982b9b4a92a0966398b69add911f9626989f9a9591ba95ca97519a309118959196d8997190679402965a99968f129476951b994290fb93209531999b8f2a93d894ea98318a508e6e916698078f1593d294b29a078f1593d294b29a510aaa17ac18e397510aaa17ac18e3972b997e9c2f9d7ba6469d26a16ea21aa91c9e4aa20ba4c4a9699e5ea389a4dfa94d9ff4a3e6a44eaa099f62a3d1a442aaa79ffca35ba56baa1f9f87a340a569aa289f18a407a5f3a9f19d76a25ea3c6a9c89ce0a011a23ca9679cc99f12a1a1a88599a19c759d29a84d963e99979adda6f18963909c91c8a5e50dd51561161fa54414691a7f1bbfa32a14c01bd61ca5a2a912181c091deea0331162177818819c380c7b119f12bf93820f77114712bc938b0d1c18f718cc9d37119d1aaa1a99a175056419a71804a4c8928110b797fca41595e194349690a260972b99249b52a3b2978b9b559da5a3fb986f9c0c9d18a495992c9ca69d60a4699daf9bfc9cb8a32c9d109c159d4fa14199cb9c2f9ee7a1e498479c8b9d7ea141983b9c1a9d3ea103983b9b7d9c1ea0e696309be49c609f2397159c299d2a9f4996a09a589c7b9ef495aa991f9b1d9e27966899869a0e9e45958399089bb19d8b948f98c99a7e9ddd92a1975f9a979df99250973c998b9c6d9242966898119cf191ae9524989b9be891e19520980f9b0c92f0951098c49acd910d9624986e9a209256962c980c9a1e924596c897a3990a922696a297af99e09153961298fc998291f495b797279a908f2c9484966e994a910395809bd89e4a910395809bd89e000d781826190998000d78182619099854991c9e2a9fa8a5649d56a2eea298a81f9e85a2bda303a9129edba22da471a96d9e06a406a502aac79f4ea47aa5f2a9a09f26a579a680aa2ea090a438a579a9d19e12a34ca45ca9f79e1ba333a41fa98f9d6da2bda3fda8119fcaa06fa138a8999c9d9fe6a034a8559c119e02a09da7609c1599119c4aa6ff949395119c36a62207ed0f36884ca5df01790fe00786a495100719a01922a4dd11481ad01acaa3db10e31b9e1c39a38b10d61a111c62a33b05c417091780a3a891808e2e9078a35c935f051e87baa3a895939630988ca38a9599977a9818a42e98519aae9bf8a38699379d689ecfa3c6996f9d729e1aa48098aa9cee9daea3da99499de59ed6a26c991f9ea0a042a48a99299d279f6aa266999c9d129f7ba185992f9ee39f95a16b99cd9d259fe9a0d5988b9cff9d21a0d197759bc89cc19e1097c19a439c6d9ebc96f399df9b259e5696a59a659cc39ef7951f9bf49ca09e4a96829afa9c909e6796c3991e9cb29c65963a999e9b619c47959998a69a6a9cdd944298d899a19b289462970399339b4f9424978b986d9afb94709660987e99bc93e89504983b999892e39586970a99d7929995e39685987d940d9580962e98d4927295179704992690eb9323952b9803905b94d495c29903905b94d495c29942105519021b689642105519021b6896499aca9f37a041a5589d4fa2fba22fa8fa9d85a226a484a8049ef5a23ca49ea8ce9de0a3fda4e9a8f99ecda314a5cba8779f73a4a5a567a9e79e72a407a51ba9919e70a372a4d6a89d9e6ca38ba4e5a8579d09a3d0a42fa9349e71a3a1a435a89d9ddaa21ba421a8d39cf4a052a258a7049cf59f60a112a7c39cc49fb6a0b8a58b98f79c399ffba51a98029c659d4ca5cb94db98ad99d9a47c94da9763995ca44291598f24956aa4fd913591d8927da42394e694519477a4d296bb98979929a42498319a359c0fa45798909c149e06a45899089d699edea307998f9d989f21a4dc98619dd09e03a47199bf9d729f65a37b99d49cdc9d19a266991d9dca9f49a3e498879eec9f9aa22299929d7e9f34a1d9990f9ee09f34a0009a7b9efd9fd2a026996c9d0b9f4ea07e980e9d8b9e779f9897409c7e9d529ebb96bd9b089d8f9d5496399be09c419d7b96249bc89c279d1797109bb99cf69cc896879a339cc29c1596b599d59b949c7f9428995f9b6f9c2d94a398539aa59bef934898b799c59a6d93d2973399319a8993a597dc98a899ef936f97a4983e997294ba968298f4987b93c7965a981199c4926c9675984e9952925c9665983b99af9177966e988e990c91af951f98d59992904b94d7956a9892904b94d7956a98fd0fed0c420e5e81fd0fed0c420e5e819e90bd9307917c96fb9b66a1b0a286a5999ecda3eea407a88a9e60a3b1a45fa8b49e1da465a590a8d69e83a4aaa5cda8a69fc0a419a6e4a83f9e33a46ba57ba8f39ac6a1c3a301a6339a559da09d189fc49bcaa024a26ba5689dada2fba33ca7019e13a266a31ba7cb9da0a124a319a7ada08da0e1a1c6a5fb9c8ca0b8a10ea6099dca9e98a0e2a4ba9b9a9fd8a068a40a953c9ac59b86a288937f94b7956e9db496619a059c23a21697c09c3ea0aca46999959d6a9f23a4e7995f9efb9feda35d9a0b9f57a087a3049af89d0b9f7ba27e99439e6d9fdaa291994a9d709e7ca29e99069e289f20a2339a149ea49fa9a15d9a5b9f9ea09ca1ff99fb9e2fa0b3a0b1991a9e9c9f98a0a8983b9d349f8ea0e098db9c6b9ec79fb899a49e09a060a0f3997b9e1ca0e29f5c993d9e4ea0a19fb698a19c319e569ec8988b9bdc9cc59dee99bc9bb39c349d6298e29be09c209d2b972a9bba9cd99c48968a9a4b9c859cc5954e9a339c4f9c0f96459a3c9c3c9c9095cb99c59bfa9b339538995f9b929b1695e698a89a3c9b9b9460981f9ae19a29940898f699e19a3293a29763996a9a7492439734992b9a45924b97fb98e0995d922197c0982a9963925e97b098cc9758903694b59580972a8f0394c99469962a8f0394c99469962209cd09600a71022209cd09600a7102ba836b8ab588f88c1993879683970999ae9aa19ff5a07ca43b9d99a20da4e4a6b19d67a393a4c5a7089ed7a3f2a410a8b29d94a3aca4c1a7e49c3fa39ba435a79398c6a03aa2b0a42b952a98279800991b8c228e1990ba908f913893fe944b980493c999589ca19ebf95c2983499829c7e943b9b4b9de49ff396b299619aa29d5598789d999f88a11d997a9f2aa15da21897259ef99f2da17d95229978994a9d97998f9d8d9fbba0879b93a027a20da2e39bf7a08ca272a21e9c82a0b1a151a24e9cb9a003a253a2459b64a09da179a2a79b68a079a114a2a69a629fb7a0c8a1559b289f78a000a17199b39e4fa0c3a06d96b59c0c9e0c9e9b8df7915692a293a08e6a9092917a92d996229bc69c2a9ddc99949e27a0509f7b9a569f72a04a9fc299da9ea9a0189fbc98af9d5da00ba0c898349d979ecb9dda98189d619e539d8098ef9c529e279df497739cb19df09c5397f19b399d899c9f963e9baf9ce49bff95869a639c5c9b2f95df990d9c209b0895b699db9be89ad8944199199b619a8294db987d9acc995894a498469a9a9925947a98129a6d99d5936b98089a639996934e98999922993c930e987199fe980a93da974199f7984792f096bb98bb98ab91af9699984e99da90fa95b597b597da90fa95b597b597f105a1078608aa80f105a1078608aa80e583c88a7489b18e8792d796b8971f9afd99ce9e96a0f4a35b9cd9a192a301a6629caba14ca348a6139b15a16aa2eea4e29b709f27a07da1469a43a01aa190a4fa98f19f5da101a4b29bd59eac9f73a07b9b41a193a2b3a4f59c06a259a35aa5ee9c1aa27ea363a5299d0da276a332a5ef9c0aa23aa3e6a4169dfaa187a3d4a4069d9ca161a372a4b79ce7a063a2c5a3869bc19f34a1f1a11b9abf9de69e3f9f739bb09e38a093a05e9c119f79a0b9a0469c9e9e22a085a0129cb69d919fd89e4f99449c6e9d849c599aa99d0d9f089eaf9b1a9f7ba051a0779b939ff0a0f0a08d9bbe9f2aa157a1429b879fcaa0caa0719aa69e57a042a0a898419de79e319eff968c9b559c219b75978c9b269d709c2898b89c299e699de998859dd09ed49d0899809db89e7d9dea98fd9c859e2f9da198e09c399e049d6998949c019eb19ccf97389c049eb59c7e971a9cc49db89c2497bb9b229d299c75960d9bcc9c549bac95809a6c9c4a9b3b95049afc9bbb9a28959199499b419af5945299079b0a9ac6943c99b89abf998694e9988a9a98992294b198599a4699d59380980b9aff98bd936098cd99cc98ef932f988299ac9862930f986c9998984e932a984299fe98b791b297c398a498739213960398c996739213960398c9962c10601878199b942c10601878199b944799cc9e30a01aa43d9d3fa331a44fa63d9d3ba34ea449a6089da5a20ea411a6f59cfca282a453a6b29d88a3d0a474a6fa9d21a42ba58da61c9e41a449a5b2a6819de7a305a539a6179d4ca399a4e5a5d39caba248a493a5cf9c26a2f7a34ca51e9caaa12aa471a5559c82a16da376a4979c70a129a32ca4239c5ea1b6a37ca4ff9c66a1f1a282a39f9cffa1e3a3c4a3ca9c31a187a2daa2b99cfca060a260a2509c2fa1b1a2faa1ad9c18a17aa281a1589c21a17ea243a1289c93a0d4a1dda0d79b0fa028a1a9a04f9b8d9fe3a069a0499a7c9fd1a030a0659a029f6da03e9f169a5c9e0ea0659ef699879e32a01a9f479af79eb6a026a0379a7e9e4fa1f6a0da9b319e32a0389f209aeb9d849f4d9eaa990f9ee79f569e549a889e00a0569e6599d29d619fa69df298669d0e9f469da7981e9db99e3d9dac98f69c9e9e219d38985a9c439e129d2598ec9b639e259e0598349c0c9eaa9cbb97e99ba69d559cda964c9bda9c8c9bd1957a9a489c719a5295e9990b9c369ae3947299759bfb997a941e993a9bee9972940999ae9abd996d94c398859a729923948398269a239975933198c8998f98e5920e987d9932984f93f4975a9918980a9464988599fd9769930398fb98fb98e6911b97ae98cb98e6911b97ae98cb98b70b101748189d91b70b101748189d91759907a0eda024a3009d46a353a469a5389d3ea376a491a58f9db2a3d0a401a6f99d33a44fa537a6e19d26a43da561a68e9d19a421a56ca6b29dd9a3f4a40ca6289d75a3bea4e6a57c9cc5a2b5a420a6429d4ba2f4a316a5c99c4aa2f4a3dca4fc9c88a20aa4b8a4fc9c82a215a458a4bf9c59a209a4f3a3ee9c05a2a0a345a3b39ce6a139a3c4a2ad9cbaa1f7a26ba29c9cf6a16ea369a2419cd0a12aa3fba1259c00a12da223a1999baaa00ca205a1b59b52a047a181a0549b79a09ca1b7a0de9a8aa099a18aa06d9b4aa065a128a0619b889faea0a79ff69a719f9ea08f9fe19ab09fc2a0c99f1b9a439f9da0869f7599149ec19f8b9e1a99649d0d9f259ecd98549dcb9ee79dcc98909d4f9ff89df898939e4da0549e699afe9e5ba01b9ef2992b9ec79fc99d339ac29dae9fd09df79aac9d9e9f679df999829d459f329d2799ea9c6a9ebe9c27997a9cc39d489c57984e9c939d0b9c1098029c699dfd9b8d96469b309d009c1196319bfd9cb39bf0958d9a9f9c179b1b961e9a4b9c609ae8959b99259c479a16957299f99b2b9a0c956199819b0d9aee94f798959a41990a95b898469ad49890946398c599af98c3931498069acf984f93bf9772995298699256963b989f96689005943495349568900594349534950000000000000000b70b101748189d91759907a0eda024a3009d46a353a469a5389d3ea376a491a58f9db2a3d0a401a6f99d33a44fa537a6e19d26a43da561a68e9d19a421a56ca6b29dd9a3f4a40ca6289d75a3bea4e6a57c9cc5a2b5a420a6429d4ba2f4a316a5c99c4aa2f4a3dca4fc9c88a20aa4b8a4fc9c82a215a458a4bf9c59a209a4f3a3ee9c05a2a0a345a3b39ce6a139a3c4a2ad9cbaa1f7a26ba29c9cf6a16ea369a2419cd0a12aa3fba1259c00a12da223a1999baaa00ca205a1b59b52a047a181a0549b79a09ca1b7a0de9a8aa099a18aa06d9b4aa065a128a0619b889faea0a79ff69a719f9ea08f9fe19ab09fc2a0c99f1b9a439f9da0869f7599149ec19f8b9e1a99649d0d9f259ecd98549dcb9ee79dcc98909d4f9ff89df898939e4da0549e699afe9e5ba01b9ef2992b9ec79fc99d339ac29dae9fd09df79aac9d9e9f679df999829d459f329d2799ea9c6a9ebe9c27997a9cc39d489c57984e9c939d0b9c1098029c699dfd9b8d96469b309d009c1196319bfd9cb39bf0958d9a9f9c179b1b961e9a4b9c609ae8959b99259c479a16957299f99b2b9a0c956199819b0d9aee94f798959a41990a95b898469ad49890946398c599af98c3931498069acf984f93bf9772995298699256963b989f96689005943495349500000000000000000000000000000000000000003d8b1d8182969f9a3b9cd4988298e49c7b9d659d338b5a94ae9063a0d192a3951f96089d9c99259cd89c3c9d91994a9c4c9d9a9dae8d1c97a698999fad94cf97ab97c8995897029aab9a2099bc92b998229711940000eb94e990f28c00005386000000000000000000000000628aa68df38bf38bb6907994839635926183b1913d94ee90b48277866c8f748c95807887bc88bc880000000000000000188c9b8f0e94a19cd996c3a0aba242a7a48830a290a4b2a5c792549a78991f9dbb11f38c42148596dd0e930edc121a9db6002c929d90bf9c43924299629a4b917b8f0398c09a3a94cb04320c9211c19800002f024b077e974b8f2b931b96149537917b943d952a93ef8e16949c93f993af00520c0e0f6b963c0eaa15b315ff94a0119618591add994b139d19ce1b1a9cbc144d1a0c1ccd9c0514ec19fc1b3b9d09149d193e1b079d7e13b719a01b199dd7136d19321b639cd2132719971adb9b95126018d819079b8311da17fb181a9bc6118b170e19749a2d12e217de18b99af01108185f19c59a04120b182919779a46115917bf18f2991911cb163718189914112016b6173698d91061157c162a97b80f67151317c595651040151d16d8937811ab17e31802965e101c16ad1725987b0e37151216439a0000000000000000000000003d8b1d81000000003d8b1d8182969f9a3b9cd4988298e49c7b9d659d338b5a94ae9063a0d192a3951f96089d9c99259cd89c3c9d91994a9c4c9d9a9dae8d1c97a698999fad94cf97ab97c8995897029aab9a2099bc92b998229711940000eb94e990f28c00005386000000000000000000000000628aa68df38bf38bb6907994839635926183b1913d94ee90b48277866c8f748c95807887bc88bc880000000000000000188c9b8f0e94a19cd996c3a0aba242a7a48830a290a4b2a5c792549a78991f9dbb11f38c42148596dd0e930edc121a9db6002c929d90bf9c43924299629a4b917b8f0398c09a3a94cb04320c9211c19800002f024b077e974b8f2b931b96149537917b943d952a93ef8e16949c93f993af00520c0e0f6b963c0eaa15b315ff94a0119618591add994b139d19ce1b1a9cbc144d1a0c1ccd9c0514ec19fc1b3b9d09149d193e1b079d7e13b719a01b199dd7136d19321b639cd2132719971adb9b95126018d819079b8311da17fb181a9bc6118b170e19749a2d12e217de18b99af01108185f19c59a04120b182919779a46115917bf18f2991911cb163718189914112016b6173698d91061157c162a97b80f67151317c595651040151d16d8937811ab17e31802965e101c16ad1725987b0e37151216439a7b0e37151216439a838600001a8c2181838600001a8c218130864d9567980b8f0c9a069c119c90984c813010a31527a2e00ba70ea70f3697cb8d5d928891678da39cd19de69d169890870e8f780d12a419919b938f930496d3989b998498b68c64964e953195a0897990c88d00000000b6834881000000000000000000000000438000000000000000000000000000000000000000000000000000000000000000000000000000002280000000000000c390c798229a6b9d6c9bf0a317a54aa5c2947a9d729f8899948e8e948396de8a798563897489290c4d92b5986e99039e0794e19c3c9e779f3b88bc8b308cdb8c698321829683fd8e23029909b90c5b9dd0840f8e848e799e7092c394c2942d89468868897e89170a1a8bf78cbf8abe047e059b10e2111498bf0a60108c10e1864f105d17d318689a1313fd19b31bc69c6a138f19111bed9c48139919d21a129e99122c198e1ac79dee126719b21aa09cd113651a121c619cc5127719c51a509b271357186919339a5410a617b818b49a9010a41767185c9c2311201872193e9cac1076162618e09b10103316e817bf9a37109d15cd167b99ed0f571655170d99c210e2163e187a9933117b17a418cc985210b1161518029678103d158316d09302109e1594178496c00f7a150e174f97cb0ae010a9116395cb0ae010a91163953c93198daa92e0883c93198daa92e08800001094ef99a690939b789d0e9e959a3494099a1599fea4348b4b10100faaa2f48a428e1d8d2896949869953996ff98bc8e9897d8977aa42395fe97d297c8968298ba975c9505894293a4934591b1807d8600000000000028850000000000006c8100000000000000000000000000000000e600000000007885dc8abb8911800000000000000000000000000000000000000000000000000000558daa90239195805e824685f584228862875489b58200003e880d913c820294ae94cf95dc0960945f98e39ae6a0f092fa99079cdf9d8b8ee5924e92928c1392ce961897948c988e7c974098829c04895b8d0592e09cff810783908c0c10ae005102eb02a30b5808e10c670d4609f7040c10c2116899f909350ca90c678f420bd5100412849b6c104c17ba18aa9d8a12be194b1bd49e6713631a2e1c099eeb12301add1bee9df7111d19dc1a4d9d64112c19981a929c42127518ab19469c3d12ea186e1aa59cc6104f18a2198e9c2c1080163918789c050fd2167018479ae3105515f1165e9bc710dd159417099b900ef614af16e799390ddc12b2134198770d2a1397142f97790dd514c5154996d60ede14bc159d94a70eba14611611966a0fd814941634986909bb0e5b102b94430e311443155e97430e311443155e971793c595619661961793c595619661966e97999a049bc893b296ec99c09973a7f611981f8420bca764937b1851191194928f768e6b8e8e88b790a99328944f868785b98c0d866b81b786f6880d8d87881889000000000000ec870000a383650000000000000000000000000000000000d9808780e7802881e407a3054705718100001609540ae2800000860243017780000000005c009a8000000000000000000000000065808d800000bc802281a2800000d780ed8111810000c683f884fb028082078d549025104a91ec934f940110f28b3c9172931598b60cd00f3e107c868a0031023201a0824581f78122828284748388815481c28c5881120a1f0efa97e280c00192010e8c4e02400498057981f50b650ef00d1587df05240e7c10e497d60af00dd10e5d8fff0ce114c116769b0e117f189a19499ef5102a19001b129f3512d518fd19c29e74114e199f1af89e60114e186c193e9d7d106b18fb19069dfe105b18be19709c2111181805198f9c0811b518331ae29c69118718061a429cc0109018de19d99bad103f17ef18a19b6a0f40166018db9a6d0e461500174d9a100d6914f615589aa40c19127212719ba40cad12fd134d97810bf112f2136f93da0db714bb15c997600e22141a159896300f771520172097150dea1434166398150dea1434166398f2890000ef838285f2890000ef838285fb88b082ff8ca784838d118f068e3c95170a351660196aa48b056505b50962944880678070809786c080448297826788a3800783be81bd82f6836a871a8a918696870000000000007f8800000000000000000989000000000000000000000000c2853483738679839380cc80f780708400008d804081408100006980a780a78000000000fd808d8000000000208160800000000010829000000000000000000000000000000000007480be81ff82ff003d80718a728c230c878bad90a291140dae853d8a87890194ff80450835080286d3837b112c1182814480cf058c06ec87ae8890897089278ec6851b9095910f961584aa886a8840047082f681cb81c5002c81dc802a8176889f81e9818b82e295880700085e0b1792ef0b1e151617339d770d7415e716e19f3e1019188a193ba05f107c18a41927a06b10ed18cd1abe9f2b1016184f19fd9dc10fa1167818fc9c0910c0163018099d540da0158f17969c870e6e15f016509c880e56161c18959ca41005178b184d9c200f1716d2170e9c7e0e3815ea16b69bc30df5148816f49a5c0d8214e7159f9a330da3140916cd99380c0314fe143c995b0b85129d13c7972d0a8311e412be96fc0ca81295133898fb0afd102913a899ea092212f6128098ea092212f61280986f810000100201856f81000010020185000000006e00de815288818431040696da8184139c18fca49c81400847084e977d8100000000000000000000000000000000fc810681068133811585318631865b8cee8800000000f29300009e873f80000033900000000000000000000000001d82db80ed837f821f802f803180c9840000c680ac81ac8100000f00788007820000000000000000000000001f81df8000000000000000000000000000000000000000000000000000000000000000000000000000000000b383b78ae98ffb83bf85ba8f2392c7924f004b01f00101844c0c37057b0a3f810000bf019000be80b084ea83a583158d4485978d089015988b86dd870a8657093b82d080000000009282e08295822c87de819b80e2003d96d180a105e605c091fb0691124414369ea2090217d118849fba0d8b16e3170ea0550c0f16311867a0cf09d5138515df9f0d0dd9143417459ead0d0f178418179e380c0b16cd17fc9dfa0c64155717439e420cdc143017a09d010c711378159c9c900b5d1225147a9bb908eb10c3120d9c8204060eb80ffc9b9005e20ccd0d029b5c0714107012339b2b08d910b712289aef000510d4100d98e000d60cd10d37969202f50c2b0fd394c608cc0e56101f98d60dd4144816359a93800204cf07bb9693800204cf07bb96500bd50330098982500bd5033009898203060b06a506d20000000000000000003b0087026d075d899e8278841583a68900000000000000000000000000000000000049803f8038811d003702c4017a862e025d010000000005891801ac04d30000008589d2822f0000000000000000008182d000e981d2805e01ac040c040c84ca827206390b288000007e0198011b810000c500000000000000000085808580000000000000000000000000000000000000000000000000000000000000000000000600000000001c806b80fd814f0200006e825f86858c0000ba82f283c78443813b817d81cf827c81e4823785d18bf68d3a906b9092983f8eb4961997ea994f8fd29a74993295c08ba096f197449cfb8ce19016909d946989128fe88f9f98398ad98d518d31946e8a05830e04869e158afb0ceb1165a0118bd7118f13c4a0cf815f0f960e7da0bd0141120d15349fed0a3f146015dc9e28095614f3154f9e2f0916149315279d390bea14af16049dd80ac0147516719dac090514cc15c79cee0a95136715259ca10bf3127d14919bfd0937128a14a59b0208bc0fd310289b1104540e8b10969a7102380dc70f0e9a14040f0ee70f4e9a5e05b00f2c11519a9f039c0e1508769ce508a50fdb10659aa0063a0e93834f9ef4809b0c360ad299f4809b0c360ad299348ed084908b9c81348ed084908b9c818a8f8a8f388f7f81000000000000000000004a8251855185228156854083e18800000000000000000000000000000000000000008b808b807d80c68174837d8852801c800000000043812681ad81ea8300006a004001c0810000000000000000ba81c280f3824580740018003000918100004b80bd802a81000000007080b08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d808386918b458155800000000000000000000000000000000091071b0ab2001a821e0193000c82dc8cb090ad912798fb8d708d748ca19a3c86528487836c0e00000000000000001d830000608178830f82e989b28cfe97bf878a858a875392ac886a0c448d2ea0f387460ffc119da08e88a213041628a00f8522147116be9fc984cc12dd13c99f04887a105e1053a0ff849c112714719e3884681153138d9e1104a3110e133b9df0078a124d14609df905ac103011d69c06093a11610eaa9e1207ef112814169dc6073a12d312fe9b95074d11a7120d9b20042f1085108399e303900e2310dc99cd00690d4410d498a400070c050d9f98f7816304c2811e9854022205480684985c811710be11d69a3c85d80fca10459a3c85d80fca10459add0c0000b209c280dd0c0000b209c280c60cec06500e9882e404250bec020184728e318f798523a39784f787b881d694000000000000000000000000000000000000000000000000f9814285b3854b895086ca80000000004a904b899d8792040000da8c918f40000000000000000000e78275811d843782b80089019f01268085012a0475081c80f4007501a50154800000d1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b80e887d3010381a880c881c987000000009581098564887288cd88f28c608d31944495919d16921294c1940f9bdb8ead920594ea9af68898850d864a1000000000000000006e82000000000000e5813d89ef8d9b958d8bb68ede8e15915d8f049415956c9f4f90de90138f2ca1bc8d618411926ca37d8ded0f46116ba1a50169143115b7a0e6085216821428a108051215e515fc9f8e01c614bb16199ffb8d5213f714249d3504801294147b9d4481a10e4210449d5481990ec3110a9d10019a0fe510109d1201c70d69108f9c0181f00c3a0f4f9bcc00380c430e9e9ab280860c49107b99a20014082a095c99b3807e09ad0ab698b50032082c09fb984402b30bec0db8992b05760efc0ffd953604b910861153993604b9108611539928040000fd01aa8028040000fd01aa808c800000c1812582fb85a686a583bf8ecd90a992b990b1a41888a08a9c88309588800000000000000000000000000000000000007b80cd804380ca80848274894c00000000000000960b6009c60c54820000e609e10d2b800000c900000000004180a3005f009c820000000000000000000000007c804a8000000000c9809c80000000000000000000000000be8072000000d38070819682000000000000000000000000000000000000000000000000000000000000000022801e80be80e48477800f80000000000000000000000000000000001b04b80017000700a7009a8195871f8be28d0695798d948d4f8efd97fd864d86bb87818b00000000000000009282558061802281fb803c868a89d994b686828c2c8d94919a8f729199916c9e2690909211934ca08590538fc690a5a0d290498a5a054ea05791848fe09092a0e68f3a8f8b93ada0778f928c539575a13794748375847b9e3e8b6103950a609e4b8a5310e212279ef189890bed0cf99d6983b70c0c84249f4483680a1709099dff00ea0bc20ab09bdc00a00c0510309bc800920c0b0f9b9bdc80330d4a0eca9ac500bc0c120f529a4082500e2810b99aed839e08e206619a0f86e68a3d8ac99a6c83a504fb08ac98e88540082d065699e88540082d065699aa04000021023280aa04000021023280000000007781ca818389c0894584e68fbb91f594ee92cba4ad8aed8cf08b1796df810000000000000000000000000000000000005b00c7818d02480649068a88c103e10000000000800536011703240100004d8cd98d40800000000000000000be829f8160836083000000000000000000000000d1801780000000000b8179800000000000000000000000008e81248000000000518130000000000048009b8000000000000000000000000000000000000000000000000049804580218033071a8015800000000000000000880059800000eb00690665800000000000000000fd87b9849085659897898189e686929d1687cd85e786f28d0000000000000000508200002b8079807c80108440885b946e8739896c898f905e9013908a8ee59d1d9296940a9669a08c930f96809722a1b89373966798faa0d8923e97089a4ca10a91dd93389542a03f922c94e694699e0090ae918b93bf9ed2906090ba91eb9df98d68903896e99f468f8990e6915f9c728eac90e191759cfb8c7490c591db9cae8c1c8e3d8e609c7f8ce48a3e8a929b628cf48561879d9b0d8aa888df89d49a468a8a8c7b8e0d999c89fc8ce08d4599698abe8a1a8cf099718622829502379a8788fd8ab18d159ace8a3d8c008d7b95ce8a3d8c008d7b95b20b0000d9072d80b20b0000d9072d8000000000b40ba581ef076f0d220c3b901191da943f92c0a31f89198dee89ab967480000000000000000000008581df824b88738b048bf794eb8b7392d29360a1808340838b83238d470bb80a0d0ef1830000d20f4110c20200007a064a0877810602f2025f05e58200009980e480218000000000c700008100005f80c280c2800000000000000000000000005180868000000000000000000000000000000000000000000000000000000000000000000000000000000000b0009b85268eaa8000003a80c5807c8300000000328076800000000000000000000000008e016303078d6d8073802a946389338d808ca89c11899488aa88938e00000000000000006f820000000000000000a1816d89bb91c88a2c8ebc8e979295919294b795999eca927b96f6962fa02194cf95b196c89f519292945a9535a05c92d0949995ff9ea4928f955396649ef7914a9628983d9e0f92d3940b96609dc4916994be95ae9d3391a794cb95279def902d958f96ec9c399080943b958d9cfe8ff892ec931b9cef8e7192dd93f49b458d669133920e9ce28ce08f8b91e89bb78cb78e49915c9c5d8b12907494919dfe8c7690ee91929bce8b4d8f3b91fc99b2881c8e838ff298538389040202d398a382eb0a3e0b9498a382eb0a3e0b949816030000dd01358016030000dd01358000000000558138821a890d8a8b887090d9911898a998b6a31f8b428e358cc3965b8000000000000000000000000000000000da808080d5808e803481b682b68259085e0200000000d90800000000000000006c0a000000000000dd0a8a0cf4846210d612cb155a95920422031c035d829000f100b901198100003e801d80b38100005c0000000000000000000000000000008d0269047d0000000000f0000200000000000000000000000000000000000000000000000000528023802001df8700005b015e0975900680cb00c703398403845e00700fec0d608beb099d0e9d0e4b8a4903a60d0d99048d468cfc88ca9b0e8e2d8c018cd6988a810004da08c399768526841f854c933d8afb88268cd397d18cd78f9d909a957b92e8959b977d9d6b948b97a598ab9f2a950a98f4982aa02f95a698039a5ba08294ce971a9967a0e693e2963e988ba0c193a796c897b39ef7928095e796909d6c91a394e394109d70927e949895009c8190e7942796679cae90169469958f9cd4903894fe944c9c28905e94bc95cb9cb29078944295379c1190b59321955e9b4190999219949a9a9d9291914b926899128e94908b91e298218c428fa691b098fb8c0391fa911c970789ad8fe19026984684ba087f0880964684ba087f088096df0b0000ca083280df0b0000ca083280000000003a0cfb816806360c2d0b068f368f7d95fb94c0a21989a38c89893996000000000000000000000000bb802681000000009e800781828133002481e7811401000000000000f88100004e0a39060000ba01000000000000f802000000001d06cd06f50a8e82c40bd5099708290100001506d00b6e8306022e03fe045d82000000000000000000008100ab01318100005c01090314800000000000000000000000000000000000000000000000000000000000000000000000004d034080000036042e01080000000000e101f90000005208ee0cee0c00001b012109b30fb9803700f6017587000052819b022296948047827280c68ccf826782a281408aa489c689f002c6901185638e338f7699c38c938ea68f1095b892f2948295af9c1894d8973c985f9fed962f97c397429f5b94b497a398da9f2a94ea963f983f9fee92cc967498679f6d932f978498cc9f87941b987499959ef9921297e29a5ba0c89330968f98bb9ddf93c795a597639d809561941e95a89cc39157939593339c429063917891a49bb18e4e912d92e29b3b90f1910793d6995290b393f7943e9a989076949d95d5992390459415958999208f599203941d99c98a9f8e169009986f8be88d658fbf98b0867889078c0b97b0867889078c0b9700060000f6031b0000060000f6031b000000c904000000000000d6010000000000009f00b4024f86d08170834a84b787000000000000000000000000000000000000ec80d7806781a78073819682d98100003501000000003d0a2e0107137d030000b806000000000000090300000000bd036309000000000000670a3710fd800109360e49116681000013079c098a81000068011c04c38100006f0103020382000000006b021d000000000097014e000000000000000000000000000000000000000000000000000000000034076b06000000000000000071010000000000001f068006e4086603b8013c1115121512388db10d79100b9cf58c11888a893a9db582aa830384048d708120819d812781df80538157857e02c48083808680f1008185a48a698b9e821a916395cc96519d0c957799cd9a4fa0d5956599bf9a3ca0d995f399329be29f7e950099159adc9eb094cc98429a0f9f859409989c99c79e98923396d69a54a0f0948097f898069d2c947698139a8a9dcf9306974b98569d1c9305960097c09c7991239549960c9c26913894c394af9a3f90ab93e494e49a7f90bd932895b49a71902e94b395029b4e9069949795179ae28f5d942095af99178f5c93359547991a8ee0930095f398748c5b9199933599219021944e95b998219021944e95b99868088702250e440c68088702250e440c000043104a104e09f010ff18481a8e85220ccb182d1aeb05f10908140216b707000000008009850200000000630de5030000350aab0aa00125016b032f09278100000c02000000003b010000cd1027020000290e0000000000003709000000000000950200000000f10047099c068b05c001560b7f0d0f070000f702490ad10000003c02b80213000000c102840492002401e80365041202ac0100000000000000000000b103b50000000000000000009000000000000000000000000000000020010000000000005401000000000000ff020000000000001607d30805080401130b700a2a086f85c683820bd20ba09880810a8123811d895e80a580c780c780ac814e814500e80155800000000000006688848be98c3b8769946098119a209fc097229b579c62a00198429a8b9b0ea0de96d69af99b909fb797809a389c4a9f8d96639af79bc79e129953985a99409c439599987299c19c23958197e798a59c369394972d998b9dc9924e97a299389ecd926c9703992a9d5b92e49635990e9d03920697fc988b9cdc92c4964d98139c25923196fd97809a799090942f965d9912908a93dc947798e78f41934f949698338f1e933a950d9ac290b793c29490983e8d2d93ac943b98e18d04919d923998e18d04919d92399800000000000000000000000000000000af0f900c33138e0100007f10d31498060a01c20d0a0e24800000200ec30c2200be095c0c030eda00000c050e7d0c38027e09c60bc0054800fa092d09b2051380070c050e000000005508d80b000000009e04f60c0000000084088d0a0000000078080000000000000000000000000000070100000000000000002602000000008c011e09bf002a0000000000000000004a03af0500000000950bb70b490c1b0397019a03660f7e094c04000000000000a1070000c90c73030000000000000000fd11151455135e8819064115af175699f20fb910ac109e08dc093d08d10cda038500f4000e86f9870885e308f40a6496f6097f0d000ed082410c1d0a8f095105d90113001b005f0104806a802880af0a2788a98a7a8a3b0dd4940b980699669f4f9bbd999d9ae0a09d98479b829cc39f9a97719ca39d05a04497a19bfd9c729f3f96f6991f9c569f42953099e19af39ecd942f99d49a5b9e9d948798f7998a9df59491973398a99c669318976b98789cc0929c963c98189c42922996a497bb9b4b933a969197419adc9193964d98939a799227966a97bf990e92ea95b796a499c89023952396ec9913908d946195249add8f14944295f19af890a69400968299f68e1992059367996992c396a0983f9a6992c396a0983f9a000000000000000000000000000000009d10c0137f16fd0500008716b1184906000099109b13a0812f0d2b171b1977826113791a041c4e818d1a6f1c971c3a9500004088228f05a21911de14be1558947118dc19ad1a9f83fb130e16ba12c7801102ab0d7f0c9f001509861000000000000000000000000037020000000000000000790f0000000000007f05fa03b203dd05c70c000000000000c0040000000000002d0b260a84000000a10c0c0e12030000a00e5e0dfa0400008c0bfb085d010000790a41046c000000940c26012500c303a60b820a8c01d701ce0a00000000980ad50d200ddd02210d1d125a1145006c0c460fea0da18bc8005d107113da993311cc145315168a030ddb0f3c0e3204ed01e603be075f08c1007502ae03d90c6e89ff8c3b8cba0c7d949998089a229d6497599b859ce39f4f973e9c5f9d5fa02c98399c2f9d3a9f7b97049c059de89e5496949a659ce79e6c962f9afa9bbb9ec396a59a239cf09d3e968d9a4b9cde9dda95a499289be69c3c953999049bb29c0595e698649a799c1f949998289a0e9cb5945e987d990e9b0d9416987099ae9b3c9465970199de9bf7940f974298b69a84947d96b5974a9acc920c96c497b899c0913c955097db98829123950496ba98d190d894239652985b925f95e196fa955b925f95e196fa95000000000000000000000000000000000607380c6e0ee28100001b15cf17c9800000bc11d113c184770fab17861842888812d819511a91871d19b31bdc1a93940000ea0299846ba074111d15e31534945a160d194c19f7879c0fc51580140e83bf05710c890c40020303d20a19014c0100000a05070289004c0300000000000000000000000000000000ae07000000000000530b190473001804eb08d6001100ba0154092f0469000000940c5006bc000000d00c62041b01000016066e07b805ff05f50c680ba302fb085f0c240a020180057a08000000009a09b209c806d901860aca0c6907b800d808700d580c1c80ab0ee410020e058945033d10d1110a98cb107212dc112388de0a170ad80c1c031a03d001f900a0011200ee81ce82de05d2893e90dc90c687c094679a309c919d5b987b9c7f9deb9f4098059d7a9e70a07596419c729dfb9f8696ae9a399c2e9e7e96339aad9b379d6496019a4f9b3b9d8c965d9a1e9c659d1996c29a789c269dd2957f9a309ca09c7695d199dc9a1b9cdb94c498ef99a79b22949e98309aa09b32949098c799819b409448985599919af7926897de98ff9977926b963d986199bc9235967897af986e9203966a974a999c9216967597dd980d923996c497cd982c9045959a966d98a391fb9427964998a391fb942796499800000000f605088000000000f60508800000000000000000bf032012e2172d0b0000a91167145c0e8e0d0117c417c706f410e5184e19fb8009188e1a611a8994ce02d816b118b29e7e164b19c019d092f10f42158616dd80c1044909000000009f0400002a0c88110000000000000000bb0c000000000000000000001b022e00730e00000000000000000309ff0cf8075c0c220900000000ab00000000000000f00c9a0d4911c70000000000000000007a02bb095c0f260000000000860507008a0b390f2305cb007e00ac0398039a05dc03ce0251043602b108a90200000000aa07040680050700790a7b07000000006e0c8109fc074700780cf50600000000ad0d0a0c84080e00980a470500000000fa0820036a037d0095010601ec0279021c883d8c198d508a76959199a59be09da5971f9c7a9f8ba1cd98149dbe9e34a07198959cd79dc29e05970f9c129dab9da6961a9ba09cdb9c6a96659bad9c929c1597a39be39c5d9c3596ac9bfc9ca89c8396e89a389c6d9c3396ad9a4b9c819c6995139acf9b699cb3959b99ca9a3b9cda943299d69a5b9caf94d4980f9afd9b56957a984d99699a14942198f898029a4294b69760982f99ad927297c1989599fd925997c3986e99ea92de970d99c69875919d96f698029b569197949a955d96569197949a955d96b806260800084400b806260800084400000000009702208000000000000000000000fc0c090f3a810000d114b2135580ad001a128e113e8000000c12951035800000c211740d20803b03c2122d0fdf8000009b11bc12f78179054e080000000000000000d10417802010bf106909d2006b010000bc098080050f8c0d0000000000000000260222809308e60d000000000000000000000000000000000000000000000000000000000000ef090000000000000000a20533805d01aa80000000007f01e9820000000057029e07d20461800c094509420a7780ba09eb05430a9580700bbd0986043b808b087b0afb0a99806807fb0500000000a5020801000000000000fb020000000000000000000000000000000000000000000000005f001e010c8a068ea68f328cd194df99fb9b9d9c6c98cb9c1c9e809ebf98b29cc69df89e4298119c3b9d5d9ed2978c9b039d7e9dd7970e9c479ded9c0b98429b7c9cf09c6996a79a699c479dac95569a249c3d9c8b952e9a059c239ba2959199b99a8f9a39965299389a0e9ac39411999a9a9a9a0d95c8980b9a0b9a51948c98be99e699e793449865998b9975942998d8984399c5932b983d996399169418981d998699689333987599bd9972926497bf98b699dd91d4954e977e98e49338976b98d498e49338976b98d498d9016204ba066800d9016204ba06680000000000fa000580000000000000000000004e0b9a0e94802e044d138d146e816d09a9118f139a8300000000f70fad810000000000000000000000007408a7800000000062083780000025010000000000000000a20743800000550300000000000000000000000000005f01000000006b01580600000000a20a4b0b54088d80e00ce80d5206558060083d0bd3034080b3026e07cf08c7800000fc03d40810809f02a90b220b9280cf0c7a0d1d0e4882c40b89113f13ab86380345100a1208870000f4096d0f2881cf07101057123e82ad09341258140583d1094513d4141682960a1713e01320822c04d1105611e98100007f0c0e0c658000000f05d70537000000ea0148012f00df800b83568256021a8f6b903a91108f0498f698169a169ab697a09bd89c0a9dad989d9c389ec09da798e99cb69e769e3798b59c099f8d9fbb98849cdc9dbe9d6899079c3d9db39cd6962d9bdb9cc19c3a96ff99059c059c3e957d991e9b1e9b8e945899069b069bdc945899059b869ac3947299219bcd9aae945e99069bb49a50941099a89a139a61948c98ce998a9951944e986c994b99289404980099e0981793a597db98fb98dd926897a998a9984f929796e7972a981491809616984f98a990129501985398a99012950198539800000000000000000000000000000000dc0c0b0c28113683000016105c1334820000e80d550da9810000900d140cd980740ac70bd10cca80d9091c0a00075e808f064d0a00000000fe03050d000000005e09c50f0e0ac180180df510660f7981620cfb0f5f0eff80540b8f109d0d6280cc09e408ea0c5a80310a4e0d760bcb8000009b0c44032c800000000081032f800000d403000000000000000060099580970ac10c0a096c802c05ec0738077d8000000000cb0239800705ad030000000000000000000000000000af00e401208000000000cd04458000000000210114800000000000000000d006c6073107a3805c06bb047203488000000000000000007e03c9080b045480dc00a0071d09bd802709e9085c0a54811a032508800874810688288b5b8ca68e6695b2998d9b8d9b8298c09cf89d6f9d1d986e9cb29d5c9d0698219c6e9d519db097099c699d149ddb96039c559d009df597889b539c3b9c3097719bc09c599c7b973c9b909ca09b8b95ad9ab69cbd9baa962b9ace9bd19af49483998b9b939abb95e5985a9a5a995e95a398c499a199f894b298529a0a9ac094b298499add9919949b984b9a9e99409471988199069990947c9892997e980d9448988a998b980e94a398519a0d9a9a921d98d2991f9ab6916895f0968297b6916895f096829700000000110bdf8300000000110bdf83680eba0df610d18d000058123513d08e4604bf10ed10f58c9808a6109910188cc90d4b129012008e0f10f313e9131890d41078147a14629083108914b014a7904510c0148d1468902b0f7713d0149890d11030146a142a90570cf3118812278ed60db710e710cd8c060d6c115310988c750db1110611548d560d53115711998d990d6f110512508e450d3e10fc0f768cc50d120fe40c51894d0d5510860f178c8c0e4610bb0f188c540e5d10d810998db30d31101f0f688c450b050e9a0e0e8c5e0d0b108c0fb28c4c0d380f7b0eb48bbd0d03102e10048d550dd70fab0f8f8c4b0e310f460e768b4c0fdf0f230f298ca40e22106d0f648cb40e5a1012103c8d4e0d28103b10838d390de3103e118f8fab0a220efe0e789487954c994e9a739b9d98a59ca69d199d4599059d339e639dcd98fd9c9c9ee19d9598949cbe9d199d05981e9c479daa9c0b98639c9e9d189dec96289c6e9d049de396f39b5a9dbc9c1297389ba09cf99b9897e89a5a9ca29a79965c9a359c659bf9950e9a309c619bdf96b3998f9b199b38987a99b69ae199eb985799599aaa995a960999329b969a65959d982a9b6c9aa9934498c19b569cb3946898239a449953940b986699c89804922b97c798dd97b191789520977d95b191789520977d95000000000000000000000000110bdf83680eba0df610d18d000058123513d08e4604bf10ed10f58c9808a6109910188cc90d4b129012008e0f10f313e9131890d41078147a14629083108914b014a7904510c0148d1468902b0f7713d0149890d11030146a142a90570cf3118812278ed60db710e710cd8c060d6c115310988c750db1110611548d560d53115711998d990d6f110512508e450d3e10fc0f768cc50d120fe40c51894d0d5510860f178c8c0e4610bb0f188c540e5d10d810998db30d31101f0f688c450b050e9a0e0e8c5e0d0b108c0fb28c4c0d380f7b0eb48bbd0d03102e10048d550dd70fab0f8f8c4b0e310f460e768b4c0fdf0f230f298ca40e22106d0f648cb40e5a1012103c8d4e0d28103b10838d390de3103e118f8fab0a220efe0e789487954c994e9a739b9d98a59ca69d199d4599059d339e639dcd98fd9c9c9ee19d9598949cbe9d199d05981e9c479daa9c0b98639c9e9d189dec96289c6e9d049de396f39b5a9dbc9c1297389ba09cf99b9897e89a5a9ca29a79965c9a359c659bf9950e9a309c619bdf96b3998f9b199b38987a99b69ae199eb985799599aaa995a960999329b969a65959d982a9b6c9aa9934498c19b569cb3946898239a449953940b986699c89804922b97c798dd97b191789520977d95000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d8b1d8182969f9a3b9cd4988298e49c7b9d659d338b5a94ae9063a0d192a3951f96089d9c99259cd89c3c9d91994a9c4c9d9a9dae8d1c97a698999fad94cf97ab97c8995897029aab9a2099bc92b998229711940000eb94e990f28c00005386000000000000000000000000628aa68df38bf38bb6907994839635926183b1913d94ee90b48277866c8f748c95807887bc88bc880000000000000000188c9b8f0e94a19cd996c3a0aba242a7a48830a290a4b2a5c792549a78991f9dbb11f38c42148596dd0e930edc121a9db6002c929d90bf9c43924299629a4b917b8f0398c09a3a94cb04320c9211c19800002f024b077e974b8f2b931b96149537917b943d952a93ef8e16949c93f993af00520c0e0f6b963c0eaa15b315ff94a0119618591add994b139d19ce1b1a9cbc144d1a0c1ccd9c0514ec19fc1b3b9d09149d193e1b079d7e13b719a01b199dd7136d19321b639cd2132719971adb9b95126018d819079b8311da17fb181a9bc6118b170e19749a2d12e217de18b99af01108185f19c59a04120b182919779a46115917bf18f2991911cb163718189914112016b6173698d91061157c162a97b80f67151317c595651040151d16d8937811ab17e31802965e101c16ad1725987b0e37151216439a00000000000000000000000000000000838600001a8c218130864d9567980b8f0c9a069c119c90984c813010a31527a2e00ba70ea70f3697cb8d5d928891678da39cd19de69d169890870e8f780d12a419919b938f930496d3989b998498b68c64964e953195a0897990c88d00000000b6834881000000000000000000000000438000000000000000000000000000000000000000000000000000000000000000000000000000002280000000000000c390c798229a6b9d6c9bf0a317a54aa5c2947a9d729f8899948e8e948396de8a798563897489290c4d92b5986e99039e0794e19c3c9e779f3b88bc8b308cdb8c698321829683fd8e23029909b90c5b9dd0840f8e848e799e7092c394c2942d89468868897e89170a1a8bf78cbf8abe047e059b10e2111498bf0a60108c10e1864f105d17d318689a1313fd19b31bc69c6a138f19111bed9c48139919d21a129e99122c198e1ac79dee126719b21aa09cd113651a121c619cc5127719c51a509b271357186919339a5410a617b818b49a9010a41767185c9c2311201872193e9cac1076162618e09b10103316e817bf9a37109d15cd167b99ed0f571655170d99c210e2163e187a9933117b17a418cc985210b1161518029678103d158316d09302109e1594178496c00f7a150e174f97cb0ae010a9116395000000000000000000000000000000003c93198daa92e08800001094ef99a690939b789d0e9e959a3494099a1599fea4348b4b10100faaa2f48a428e1d8d2896949869953996ff98bc8e9897d8977aa42395fe97d297c8968298ba975c9505894293a4934591b1807d8600000000000028850000000000006c8100000000000000000000000000000000e600000000007885dc8abb8911800000000000000000000000000000000000000000000000000000558daa90239195805e824685f584228862875489b58200003e880d913c820294ae94cf95dc0960945f98e39ae6a0f092fa99079cdf9d8b8ee5924e92928c1392ce961897948c988e7c974098829c04895b8d0592e09cff810783908c0c10ae005102eb02a30b5808e10c670d4609f7040c10c2116899f909350ca90c678f420bd5100412849b6c104c17ba18aa9d8a12be194b1bd49e6713631a2e1c099eeb12301add1bee9df7111d19dc1a4d9d64112c19981a929c42127518ab19469c3d12ea186e1aa59cc6104f18a2198e9c2c1080163918789c050fd2167018479ae3105515f1165e9bc710dd159417099b900ef614af16e799390ddc12b2134198770d2a1397142f97790dd514c5154996d60ede14bc159d94a70eba14611611966a0fd814941634986909bb0e5b102b94430e311443155e97000000000000000000000000000000001793c595619661966e97999a049bc893b296ec99c09973a7f611981f8420bca764937b1851191194928f768e6b8e8e88b790a99328944f868785b98c0d866b81b786f6880d8d87881889000000000000ec870000a383650000000000000000000000000000000000d9808780e7802881e407a3054705718100001609540ae2800000860243017780000000005c009a8000000000000000000000000065808d800000bc802281a2800000d780ed8111810000c683f884fb028082078d549025104a91ec934f940110f28b3c9172931598b60cd00f3e107c868a0031023201a0824581f78122828284748388815481c28c5881120a1f0efa97e280c00192010e8c4e02400498057981f50b650ef00d1587df05240e7c10e497d60af00dd10e5d8fff0ce114c116769b0e117f189a19499ef5102a19001b129f3512d518fd19c29e74114e199f1af89e60114e186c193e9d7d106b18fb19069dfe105b18be19709c2111181805198f9c0811b518331ae29c69118718061a429cc0109018de19d99bad103f17ef18a19b6a0f40166018db9a6d0e461500174d9a100d6914f615589aa40c19127212719ba40cad12fd134d97810bf112f2136f93da0db714bb15c997600e22141a159896300f771520172097150dea143416639800000000000000000000000000000000f2890000ef838285fb88b082ff8ca784838d118f068e3c95170a351660196aa48b056505b50962944880678070809786c080448297826788a3800783be81bd82f6836a871a8a918696870000000000007f8800000000000000000989000000000000000000000000c2853483738679839380cc80f780708400008d804081408100006980a780a78000000000fd808d8000000000208160800000000010829000000000000000000000000000000000007480be81ff82ff003d80718a728c230c878bad90a291140dae853d8a87890194ff80450835080286d3837b112c1182814480cf058c06ec87ae8890897089278ec6851b9095910f961584aa886a8840047082f681cb81c5002c81dc802a8176889f81e9818b82e295880700085e0b1792ef0b1e151617339d770d7415e716e19f3e1019188a193ba05f107c18a41927a06b10ed18cd1abe9f2b1016184f19fd9dc10fa1167818fc9c0910c0163018099d540da0158f17969c870e6e15f016509c880e56161c18959ca41005178b184d9c200f1716d2170e9c7e0e3815ea16b69bc30df5148816f49a5c0d8214e7159f9a330da3140916cd99380c0314fe143c995b0b85129d13c7972d0a8311e412be96fc0ca81295133898fb0afd102913a899ea092212f6128098000000000000000000000000000000006f81000010020185000000006e00de815288818431040696da8184139c18fca49c81400847084e977d8100000000000000000000000000000000fc810681068133811585318631865b8cee8800000000f29300009e873f80000033900000000000000000000000001d82db80ed837f821f802f803180c9840000c680ac81ac8100000f00788007820000000000000000000000001f81df8000000000000000000000000000000000000000000000000000000000000000000000000000000000b383b78ae98ffb83bf85ba8f2392c7924f004b01f00101844c0c37057b0a3f810000bf019000be80b084ea83a583158d4485978d089015988b86dd870a8657093b82d080000000009282e08295822c87de819b80e2003d96d180a105e605c091fb0691124414369ea2090217d118849fba0d8b16e3170ea0550c0f16311867a0cf09d5138515df9f0d0dd9143417459ead0d0f178418179e380c0b16cd17fc9dfa0c64155717439e420cdc143017a09d010c711378159c9c900b5d1225147a9bb908eb10c3120d9c8204060eb80ffc9b9005e20ccd0d029b5c0714107012339b2b08d910b712289aef000510d4100d98e000d60cd10d37969202f50c2b0fd394c608cc0e56101f98d60dd4144816359a93800204cf07bb9600000000000000000000000000000000500bd5033009898203060b06a506d20000000000000000003b0087026d075d899e8278841583a68900000000000000000000000000000000000049803f8038811d003702c4017a862e025d010000000005891801ac04d30000008589d2822f0000000000000000008182d000e981d2805e01ac040c040c84ca827206390b288000007e0198011b810000c500000000000000000085808580000000000000000000000000000000000000000000000000000000000000000000000600000000001c806b80fd814f0200006e825f86858c0000ba82f283c78443813b817d81cf827c81e4823785d18bf68d3a906b9092983f8eb4961997ea994f8fd29a74993295c08ba096f197449cfb8ce19016909d946989128fe88f9f98398ad98d518d31946e8a05830e04869e158afb0ceb1165a0118bd7118f13c4a0cf815f0f960e7da0bd0141120d15349fed0a3f146015dc9e28095614f3154f9e2f0916149315279d390bea14af16049dd80ac0147516719dac090514cc15c79cee0a95136715259ca10bf3127d14919bfd0937128a14a59b0208bc0fd310289b1104540e8b10969a7102380dc70f0e9a14040f0ee70f4e9a5e05b00f2c11519a9f039c0e1508769ce508a50fdb10659aa0063a0e93834f9ef4809b0c360ad29900000000000000000000000000000000348ed084908b9c818a8f8a8f388f7f81000000000000000000004a8251855185228156854083e18800000000000000000000000000000000000000008b808b807d80c68174837d8852801c800000000043812681ad81ea8300006a004001c0810000000000000000ba81c280f3824580740018003000918100004b80bd802a81000000007080b08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d808386918b458155800000000000000000000000000000000091071b0ab2001a821e0193000c82dc8cb090ad912798fb8d708d748ca19a3c86528487836c0e00000000000000001d830000608178830f82e989b28cfe97bf878a858a875392ac886a0c448d2ea0f387460ffc119da08e88a213041628a00f8522147116be9fc984cc12dd13c99f04887a105e1053a0ff849c112714719e3884681153138d9e1104a3110e133b9df0078a124d14609df905ac103011d69c06093a11610eaa9e1207ef112814169dc6073a12d312fe9b95074d11a7120d9b20042f1085108399e303900e2310dc99cd00690d4410d498a400070c050d9f98f7816304c2811e9854022205480684985c811710be11d69a3c85d80fca10459a00000000000000000000000000000000dd0c0000b209c280c60cec06500e9882e404250bec020184728e318f798523a39784f787b881d694000000000000000000000000000000000000000000000000f9814285b3854b895086ca80000000004a904b899d8792040000da8c918f40000000000000000000e78275811d843782b80089019f01268085012a0475081c80f4007501a50154800000d1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b80e887d3010381a880c881c987000000009581098564887288cd88f28c608d31944495919d16921294c1940f9bdb8ead920594ea9af68898850d864a1000000000000000006e82000000000000e5813d89ef8d9b958d8bb68ede8e15915d8f049415956c9f4f90de90138f2ca1bc8d618411926ca37d8ded0f46116ba1a50169143115b7a0e6085216821428a108051215e515fc9f8e01c614bb16199ffb8d5213f714249d3504801294147b9d4481a10e4210449d5481990ec3110a9d10019a0fe510109d1201c70d69108f9c0181f00c3a0f4f9bcc00380c430e9e9ab280860c49107b99a20014082a095c99b3807e09ad0ab698b50032082c09fb984402b30bec0db8992b05760efc0ffd953604b910861153990000000000000000000000000000000028040000fd01aa808c800000c1812582fb85a686a583bf8ecd90a992b990b1a41888a08a9c88309588800000000000000000000000000000000000007b80cd804380ca80848274894c00000000000000960b6009c60c54820000e609e10d2b800000c900000000004180a3005f009c820000000000000000000000007c804a8000000000c9809c80000000000000000000000000be8072000000d38070819682000000000000000000000000000000000000000000000000000000000000000022801e80be80e48477800f80000000000000000000000000000000001b04b80017000700a7009a8195871f8be28d0695798d948d4f8efd97fd864d86bb87818b00000000000000009282558061802281fb803c868a89d994b686828c2c8d94919a8f729199916c9e2690909211934ca08590538fc690a5a0d290498a5a054ea05791848fe09092a0e68f3a8f8b93ada0778f928c539575a13794748375847b9e3e8b6103950a609e4b8a5310e212279ef189890bed0cf99d6983b70c0c84249f4483680a1709099dff00ea0bc20ab09bdc00a00c0510309bc800920c0b0f9b9bdc80330d4a0eca9ac500bc0c120f529a4082500e2810b99aed839e08e206619a0f86e68a3d8ac99a6c83a504fb08ac98e88540082d06569900000000000000000000000000000000aa04000021023280000000007781ca818389c0894584e68fbb91f594ee92cba4ad8aed8cf08b1796df810000000000000000000000000000000000005b00c7818d02480649068a88c103e10000000000800536011703240100004d8cd98d40800000000000000000be829f8160836083000000000000000000000000d1801780000000000b8179800000000000000000000000008e81248000000000518130000000000048009b8000000000000000000000000000000000000000000000000049804580218033071a8015800000000000000000880059800000eb00690665800000000000000000fd87b9849085659897898189e686929d1687cd85e786f28d0000000000000000508200002b8079807c80108440885b946e8739896c898f905e9013908a8ee59d1d9296940a9669a08c930f96809722a1b89373966798faa0d8923e97089a4ca10a91dd93389542a03f922c94e694699e0090ae918b93bf9ed2906090ba91eb9df98d68903896e99f468f8990e6915f9c728eac90e191759cfb8c7490c591db9cae8c1c8e3d8e609c7f8ce48a3e8a929b628cf48561879d9b0d8aa888df89d49a468a8a8c7b8e0d999c89fc8ce08d4599698abe8a1a8cf099718622829502379a8788fd8ab18d159ace8a3d8c008d7b9500000000000000000000000000000000b20b0000d9072d8000000000b40ba581ef076f0d220c3b901191da943f92c0a31f89198dee89ab967480000000000000000000008581df824b88738b048bf794eb8b7392d29360a1808340838b83238d470bb80a0d0ef1830000d20f4110c20200007a064a0877810602f2025f05e58200009980e480218000000000c700008100005f80c280c2800000000000000000000000005180868000000000000000000000000000000000000000000000000000000000000000000000000000000000b0009b85268eaa8000003a80c5807c8300000000328076800000000000000000000000008e016303078d6d8073802a946389338d808ca89c11899488aa88938e00000000000000006f820000000000000000a1816d89bb91c88a2c8ebc8e979295919294b795999eca927b96f6962fa02194cf95b196c89f519292945a9535a05c92d0949995ff9ea4928f955396649ef7914a9628983d9e0f92d3940b96609dc4916994be95ae9d3391a794cb95279def902d958f96ec9c399080943b958d9cfe8ff892ec931b9cef8e7192dd93f49b458d669133920e9ce28ce08f8b91e89bb78cb78e49915c9c5d8b12907494919dfe8c7690ee91929bce8b4d8f3b91fc99b2881c8e838ff298538389040202d398a382eb0a3e0b94980000000000000000000000000000000016030000dd01358000000000558138821a890d8a8b887090d9911898a998b6a31f8b428e358cc3965b8000000000000000000000000000000000da808080d5808e803481b682b68259085e0200000000d90800000000000000006c0a000000000000dd0a8a0cf4846210d612cb155a95920422031c035d829000f100b901198100003e801d80b38100005c0000000000000000000000000000008d0269047d0000000000f0000200000000000000000000000000000000000000000000000000528023802001df8700005b015e0975900680cb00c703398403845e00700fec0d608beb099d0e9d0e4b8a4903a60d0d99048d468cfc88ca9b0e8e2d8c018cd6988a810004da08c399768526841f854c933d8afb88268cd397d18cd78f9d909a957b92e8959b977d9d6b948b97a598ab9f2a950a98f4982aa02f95a698039a5ba08294ce971a9967a0e693e2963e988ba0c193a796c897b39ef7928095e796909d6c91a394e394109d70927e949895009c8190e7942796679cae90169469958f9cd4903894fe944c9c28905e94bc95cb9cb29078944295379c1190b59321955e9b4190999219949a9a9d9291914b926899128e94908b91e298218c428fa691b098fb8c0391fa911c970789ad8fe19026984684ba087f08809600000000000000000000000000000000df0b0000ca083280000000003a0cfb816806360c2d0b068f368f7d95fb94c0a21989a38c89893996000000000000000000000000bb802681000000009e800781828133002481e7811401000000000000f88100004e0a39060000ba01000000000000f802000000001d06cd06f50a8e82c40bd5099708290100001506d00b6e8306022e03fe045d82000000000000000000008100ab01318100005c01090314800000000000000000000000000000000000000000000000000000000000000000000000004d034080000036042e01080000000000e101f90000005208ee0cee0c00001b012109b30fb9803700f6017587000052819b022296948047827280c68ccf826782a281408aa489c689f002c6901185638e338f7699c38c938ea68f1095b892f2948295af9c1894d8973c985f9fed962f97c397429f5b94b497a398da9f2a94ea963f983f9fee92cc967498679f6d932f978498cc9f87941b987499959ef9921297e29a5ba0c89330968f98bb9ddf93c795a597639d809561941e95a89cc39157939593339c429063917891a49bb18e4e912d92e29b3b90f1910793d6995290b393f7943e9a989076949d95d5992390459415958999208f599203941d99c98a9f8e169009986f8be88d658fbf98b0867889078c0b970000000000000000000000000000000000060000f6031b000000c904000000000000d6010000000000009f00b4024f86d08170834a84b787000000000000000000000000000000000000ec80d7806781a78073819682d98100003501000000003d0a2e0107137d030000b806000000000000090300000000bd036309000000000000670a3710fd800109360e49116681000013079c098a81000068011c04c38100006f0103020382000000006b021d000000000097014e000000000000000000000000000000000000000000000000000000000034076b06000000000000000071010000000000001f068006e4086603b8013c1115121512388db10d79100b9cf58c11888a893a9db582aa830384048d708120819d812781df80538157857e02c48083808680f1008185a48a698b9e821a916395cc96519d0c957799cd9a4fa0d5956599bf9a3ca0d995f399329be29f7e950099159adc9eb094cc98429a0f9f859409989c99c79e98923396d69a54a0f0948097f898069d2c947698139a8a9dcf9306974b98569d1c9305960097c09c7991239549960c9c26913894c394af9a3f90ab93e494e49a7f90bd932895b49a71902e94b395029b4e9069949795179ae28f5d942095af99178f5c93359547991a8ee0930095f398748c5b9199933599219021944e95b9980000000000000000000000000000000068088702250e440c000043104a104e09f010ff18481a8e85220ccb182d1aeb05f10908140216b707000000008009850200000000630de5030000350aab0aa00125016b032f09278100000c02000000003b010000cd1027020000290e0000000000003709000000000000950200000000f10047099c068b05c001560b7f0d0f070000f702490ad10000003c02b80213000000c102840492002401e80365041202ac0100000000000000000000b103b50000000000000000009000000000000000000000000000000020010000000000005401000000000000ff020000000000001607d30805080401130b700a2a086f85c683820bd20ba09880810a8123811d895e80a580c780c780ac814e814500e80155800000000000006688848be98c3b8769946098119a209fc097229b579c62a00198429a8b9b0ea0de96d69af99b909fb797809a389c4a9f8d96639af79bc79e129953985a99409c439599987299c19c23958197e798a59c369394972d998b9dc9924e97a299389ecd926c9703992a9d5b92e49635990e9d03920697fc988b9cdc92c4964d98139c25923196fd97809a799090942f965d9912908a93dc947798e78f41934f949698338f1e933a950d9ac290b793c29490983e8d2d93ac943b98e18d04919d923998000000000000000000000000000000000000000000000000af0f900c33138e0100007f10d31498060a01c20d0a0e24800000200ec30c2200be095c0c030eda00000c050e7d0c38027e09c60bc0054800fa092d09b2051380070c050e000000005508d80b000000009e04f60c0000000084088d0a0000000078080000000000000000000000000000070100000000000000002602000000008c011e09bf002a0000000000000000004a03af0500000000950bb70b490c1b0397019a03660f7e094c04000000000000a1070000c90c73030000000000000000fd11151455135e8819064115af175699f20fb910ac109e08dc093d08d10cda038500f4000e86f9870885e308f40a6496f6097f0d000ed082410c1d0a8f095105d90113001b005f0104806a802880af0a2788a98a7a8a3b0dd4940b980699669f4f9bbd999d9ae0a09d98479b829cc39f9a97719ca39d05a04497a19bfd9c729f3f96f6991f9c569f42953099e19af39ecd942f99d49a5b9e9d948798f7998a9df59491973398a99c669318976b98789cc0929c963c98189c42922996a497bb9b4b933a969197419adc9193964d98939a799227966a97bf990e92ea95b796a499c89023952396ec9913908d946195249add8f14944295f19af890a69400968299f68e1992059367996992c396a0983f9a0000000000000000000000000000000000000000000000009d10c0137f16fd0500008716b1184906000099109b13a0812f0d2b171b1977826113791a041c4e818d1a6f1c971c3a9500004088228f05a21911de14be1558947118dc19ad1a9f83fb130e16ba12c7801102ab0d7f0c9f001509861000000000000000000000000037020000000000000000790f0000000000007f05fa03b203dd05c70c000000000000c0040000000000002d0b260a84000000a10c0c0e12030000a00e5e0dfa0400008c0bfb085d010000790a41046c000000940c26012500c303a60b820a8c01d701ce0a00000000980ad50d200ddd02210d1d125a1145006c0c460fea0da18bc8005d107113da993311cc145315168a030ddb0f3c0e3204ed01e603be075f08c1007502ae03d90c6e89ff8c3b8cba0c7d949998089a229d6497599b859ce39f4f973e9c5f9d5fa02c98399c2f9d3a9f7b97049c059de89e5496949a659ce79e6c962f9afa9bbb9ec396a59a239cf09d3e968d9a4b9cde9dda95a499289be69c3c953999049bb29c0595e698649a799c1f949998289a0e9cb5945e987d990e9b0d9416987099ae9b3c9465970199de9bf7940f974298b69a84947d96b5974a9acc920c96c497b899c0913c955097db98829123950496ba98d190d894239652985b925f95e196fa950000000000000000000000000000000000000000000000000607380c6e0ee28100001b15cf17c9800000bc11d113c184770fab17861842888812d819511a91871d19b31bdc1a93940000ea0299846ba074111d15e31534945a160d194c19f7879c0fc51580140e83bf05710c890c40020303d20a19014c0100000a05070289004c0300000000000000000000000000000000ae07000000000000530b190473001804eb08d6001100ba0154092f0469000000940c5006bc000000d00c62041b01000016066e07b805ff05f50c680ba302fb085f0c240a020180057a08000000009a09b209c806d901860aca0c6907b800d808700d580c1c80ab0ee410020e058945033d10d1110a98cb107212dc112388de0a170ad80c1c031a03d001f900a0011200ee81ce82de05d2893e90dc90c687c094679a309c919d5b987b9c7f9deb9f4098059d7a9e70a07596419c729dfb9f8696ae9a399c2e9e7e96339aad9b379d6496019a4f9b3b9d8c965d9a1e9c659d1996c29a789c269dd2957f9a309ca09c7695d199dc9a1b9cdb94c498ef99a79b22949e98309aa09b32949098c799819b409448985599919af7926897de98ff9977926b963d986199bc9235967897af986e9203966a974a999c9216967597dd980d923996c497cd982c9045959a966d98a391fb94279649980000000000000000000000000000000000000000f60508800000000000000000bf032012e2172d0b0000a91167145c0e8e0d0117c417c706f410e5184e19fb8009188e1a611a8994ce02d816b118b29e7e164b19c019d092f10f42158616dd80c1044909000000009f0400002a0c88110000000000000000bb0c000000000000000000001b022e00730e00000000000000000309ff0cf8075c0c220900000000ab00000000000000f00c9a0d4911c70000000000000000007a02bb095c0f260000000000860507008a0b390f2305cb007e00ac0398039a05dc03ce0251043602b108a90200000000aa07040680050700790a7b07000000006e0c8109fc074700780cf50600000000ad0d0a0c84080e00980a470500000000fa0820036a037d0095010601ec0279021c883d8c198d508a76959199a59be09da5971f9c7a9f8ba1cd98149dbe9e34a07198959cd79dc29e05970f9c129dab9da6961a9ba09cdb9c6a96659bad9c929c1597a39be39c5d9c3596ac9bfc9ca89c8396e89a389c6d9c3396ad9a4b9c819c6995139acf9b699cb3959b99ca9a3b9cda943299d69a5b9caf94d4980f9afd9b56957a984d99699a14942198f898029a4294b69760982f99ad927297c1989599fd925997c3986e99ea92de970d99c69875919d96f698029b569197949a955d9600000000000000000000000000000000b806260800084400000000009702208000000000000000000000fc0c090f3a810000d114b2135580ad001a128e113e8000000c12951035800000c211740d20803b03c2122d0fdf8000009b11bc12f78179054e080000000000000000d10417802010bf106909d2006b010000bc098080050f8c0d0000000000000000260222809308e60d000000000000000000000000000000000000000000000000000000000000ef090000000000000000a20533805d01aa80000000007f01e9820000000057029e07d20461800c094509420a7780ba09eb05430a9580700bbd0986043b808b087b0afb0a99806807fb0500000000a5020801000000000000fb020000000000000000000000000000000000000000000000005f001e010c8a068ea68f328cd194df99fb9b9d9c6c98cb9c1c9e809ebf98b29cc69df89e4298119c3b9d5d9ed2978c9b039d7e9dd7970e9c479ded9c0b98429b7c9cf09c6996a79a699c479dac95569a249c3d9c8b952e9a059c239ba2959199b99a8f9a39965299389a0e9ac39411999a9a9a9a0d95c8980b9a0b9a51948c98be99e699e793449865998b9975942998d8984399c5932b983d996399169418981d998699689333987599bd9972926497bf98b699dd91d4954e977e98e49338976b98d49800000000000000000000000000000000d9016204ba06680000000000fa000580000000000000000000004e0b9a0e94802e044d138d146e816d09a9118f139a8300000000f70fad810000000000000000000000007408a7800000000062083780000025010000000000000000a20743800000550300000000000000000000000000005f01000000006b01580600000000a20a4b0b54088d80e00ce80d5206558060083d0bd3034080b3026e07cf08c7800000fc03d40810809f02a90b220b9280cf0c7a0d1d0e4882c40b89113f13ab86380345100a1208870000f4096d0f2881cf07101057123e82ad09341258140583d1094513d4141682960a1713e01320822c04d1105611e98100007f0c0e0c658000000f05d70537000000ea0148012f00df800b83568256021a8f6b903a91108f0498f698169a169ab697a09bd89c0a9dad989d9c389ec09da798e99cb69e769e3798b59c099f8d9fbb98849cdc9dbe9d6899079c3d9db39cd6962d9bdb9cc19c3a96ff99059c059c3e957d991e9b1e9b8e945899069b069bdc945899059b869ac3947299219bcd9aae945e99069bb49a50941099a89a139a61948c98ce998a9951944e986c994b99289404980099e0981793a597db98fb98dd926897a998a9984f929796e7972a981491809616984f98a990129501985398000000000000000000000000000000000000000000000000dc0c0b0c28113683000016105c1334820000e80d550da9810000900d140cd980740ac70bd10cca80d9091c0a00075e808f064d0a00000000fe03050d000000005e09c50f0e0ac180180df510660f7981620cfb0f5f0eff80540b8f109d0d6280cc09e408ea0c5a80310a4e0d760bcb8000009b0c44032c800000000081032f800000d403000000000000000060099580970ac10c0a096c802c05ec0738077d8000000000cb0239800705ad030000000000000000000000000000af00e401208000000000cd04458000000000210114800000000000000000d006c6073107a3805c06bb047203488000000000000000007e03c9080b045480dc00a0071d09bd802709e9085c0a54811a032508800874810688288b5b8ca68e6695b2998d9b8d9b8298c09cf89d6f9d1d986e9cb29d5c9d0698219c6e9d519db097099c699d149ddb96039c559d009df597889b539c3b9c3097719bc09c599c7b973c9b909ca09b8b95ad9ab69cbd9baa962b9ace9bd19af49483998b9b939abb95e5985a9a5a995e95a398c499a199f894b298529a0a9ac094b298499add9919949b984b9a9e99409471988199069990947c9892997e980d9448988a998b980e94a398519a0d9a9a921d98d2991f9ab6916895f09682970000000000000000000000000000000000000000110bdf83680eba0df610d18d000058123513d08e4604bf10ed10f58c9808a6109910188cc90d4b129012008e0f10f313e9131890d41078147a14629083108914b014a7904510c0148d1468902b0f7713d0149890d11030146a142a90570cf3118812278ed60db710e710cd8c060d6c115310988c750db1110611548d560d53115711998d990d6f110512508e450d3e10fc0f768cc50d120fe40c51894d0d5510860f178c8c0e4610bb0f188c540e5d10d810998db30d31101f0f688c450b050e9a0e0e8c5e0d0b108c0fb28c4c0d380f7b0eb48bbd0d03102e10048d550dd70fab0f8f8c4b0e310f460e768b4c0fdf0f230f298ca40e22106d0f648cb40e5a1012103c8d4e0d28103b10838d390de3103e118f8fab0a220efe0e789487954c994e9a739b9d98a59ca69d199d4599059d339e639dcd98fd9c9c9ee19d9598949cbe9d199d05981e9c479daa9c0b98639c9e9d189dec96289c6e9d049de396f39b5a9dbc9c1297389ba09cf99b9897e89a5a9ca29a79965c9a359c659bf9950e9a309c619bdf96b3998f9b199b38987a99b69ae199eb985799599aaa995a960999329b969a65959d982a9b6c9aa9934498c19b569cb3946898239a449953940b986699c89804922b97c798dd97b191789520977d9500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + image data: 216480 + _typelessdata: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008727b4259e255a24b1271324d524d1246d2abf23be251328582c9224d8280629b32b9326ee2bec27d5285c262b2ff824bc261028c4317f2259286d29c13209228828a729eb32b22048283b2a0c33261eb728172a8f31911d3c29c52ad92d2d1d85297d2ba12cb11a1d2a042cb72c7615f72a192cb92c1c8b252cb52c052d4a95a42c1a2d4d2d849a012d7b2d8a2dca9c682dcc2dbf2d969b402d892dc52d069d00000000000000000000000000000000a929ce2a40290f15562a1f2bc329df1a0b2a1a2b9529341de02b872c8b2bca1fdf2c692d702c7021ca2c2e2d4a2cf621212c382c442be02050272a276426d11f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a253b26f6264e22ea2464254d27502296259424ae262c23af27c7262a299024a225e7263a2a6d228f2497255c2b0e21b925ba268b2e4021000000005627000000000000442800004c2611293f313a1ac029632b71300e1e2129ff2a4c2d6b1c762a002c642d5c194329f22a512c5f09c92bb02c372df791e12c9b2dff2d3a96bb2d5c2e912e069c3f2eb72ed12efa9ddd2e452f3c2f919eaf2e042f602f0da000000000000000000000000000000000f53063317a3098975631dc31db30221ead3169321931e222f63174327331fd23063285326a316c240c327f3256313525cd313432ed304224c8303d3184301e24000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e21d7209b217d180a257825cf274421da24a025eb276121f51ef21f2e21b7193524e6255a2976206225cd27ff2bb621c1255227222c002100000000b425000000000000dc2600000d26bf29ca2efc199f28b32a8f2d921c1c266b280e2ad915782a2b2c962dc7157e2c732d6e2ee292232de82d8a2e97984b2efa2e752f6b9c212fc12f0430d39eeb2f3a305730cfa17230ad30a330d2a066309430c430e5a100000000000000000000000000000000fc33353428335fa60f3451345f33379ac53351340833f51c33347e34df33d3201f346834b233bb20203451348133cb2154344e34fd33f82067310732ca312ba100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eb21bc2162236119c424d4256028e7205423cd24a727e41fe0197e1a6920d3145f244f267229a420c6266428832b132310271128a52bea2100004514f12200000000ad1d4324000076289f2a272d691caf293a2b2c2d421df3269328d529c4150a2b712cae2d300b0b2dea2db42ecb992e2ece2e572f209db42f16305c305f9f7b30ba30ee306fa1283168317a3171a4f0312c321b32f5a3e93125325a3217a50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e232b24c024ed1a93252526952817222624fa259e2810218a251328112a7e22002616286d2aa722a326f628a52bb922ec26c528982baf21c720232316265615d12088247627741294286d2ac22ce31b0d2abe2b152dd31c2b281029da29ca14732c1d2d092ef317c82d942e5c2f2a993a2fc22f2730129da430ca301631849eb331e9311e322fa2c7320e331c33d7a5fc3321340a345fa6093421343c3482a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001525cb266a28e72096256a27f9284323e624c1278129e721bf255b28332aa622fa260929572b8323ec27d629302ca5236c286b2a9e2c2023ce28bd2aa82c36221629852a3e2c0e1c1b2a042c5b2d6d1ee92be42c192e521f5a2c372d572e461d402d042ebe2eb118302ed72ea12f879924307730bd30669b8f31af31fd31f79c083344338933a1a34634733474345da73d3558353635d9a871358d35b9356dac0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e24f225c327e6208e237a25c2272120f5216f245927391ed2205b24fc25091c892326275929651f3f266629f02b8821df27542a502c56212d273e29782a191b5429bd2b132d8120712a832cb62d3720e52bf42cef2dcd1e5b2c4e2d2a2ed61d4d2d302eb92ebc18c22e422f0630509867309630c6300f9dfe3120325732a69b0a3424343b34bca32f3561355a35cca89b36c136873652acf03618373f3798b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c245f2516278f20cd239525a2275320ca22a724e8264f1f2023b6240727e11ed823e8247327121f4a245725c927801e542546265128b21dc026ea275c29101d4628f0283e2ad11a3129d4291b2ba219e92a422b642c9d1a542c932c422dbc17752ddf2d552e920dbd2e242fa32fbd9b9030bd30e730149c5a325f329a320d9c47345434663418a48835be35b435c3a83e3776372037aaad9d37bc37d03729b6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008727b4259e255a24b1271324d524d1246d2abf23be251328582c9224d8280629b32b9326ee2bec27d5285c262b2ff824bc261028c4317f2259286d29c13209228828a729eb32b22048283b2a0c33261eb728172a8f31911d3c29c52ad92d2d1d85297d2ba12cb11a1d2a042cb72c7615f72a192cb92c1c8b252cb52c052d4a95a42c1a2d4d2d849a012d7b2d8a2dca9c682dcc2dbf2d969b402d892dc52d069d00000000000000000000000000000000a929ce2a40290f15562a1f2bc329df1a0b2a1a2b9529341de02b872c8b2bca1fdf2c692d702c7021ca2c2e2d4a2cf621212c382c442be02050272a276426d11f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008727b4259e255a248727b4259e255a24b1271324d524d1246d2abf23be251328582c9224d8280629b32b9326ee2bec27d5285c262b2ff824bc261028c4317f2259286d29c13209228828a729eb32b22048283b2a0c33261eb728172a8f31911d3c29c52ad92d2d1d85297d2ba12cb11a1d2a042cb72c7615f72a192cb92c1c8b252cb52c052d4a95a42c1a2d4d2d849a012d7b2d8a2dca9c682dcc2dbf2d969b402d892dc52d069d402d892dc52d069da929ce2a40290f15a929ce2a40290f15562a1f2bc329df1a0b2a1a2b9529341de02b872c8b2bca1fdf2c692d702c7021ca2c2e2d4a2cf621212c382c442be02050272a276426d11f50272a276426d11f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a253b26f6264e222a253b26f6264e22ea2464254d27502296259424ae262c23af27c7262a299024a225e7263a2a6d228f2497255c2b0e21b925ba268b2e4021000000005627000000000000442800004c2611293f313a1ac029632b71300e1e2129ff2a4c2d6b1c762a002c642d5c194329f22a512c5f09c92bb02c372df791e12c9b2dff2d3a96bb2d5c2e912e069c3f2eb72ed12efa9ddd2e452f3c2f919eaf2e042f602f0da0af2e042f602f0da0f53063317a309897f53063317a3098975631dc31db30221ead3169321931e222f63174327331fd23063285326a316c240c327f3256313525cd313432ed304224c8303d3184301e24c8303d3184301e240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e21d7209b217d181e21d7209b217d180a257825cf274421da24a025eb276121f51ef21f2e21b7193524e6255a2976206225cd27ff2bb621c1255227222c002100000000b425000000000000dc2600000d26bf29ca2efc199f28b32a8f2d921c1c266b280e2ad915782a2b2c962dc7157e2c732d6e2ee292232de82d8a2e97984b2efa2e752f6b9c212fc12f0430d39eeb2f3a305730cfa17230ad30a330d2a066309430c430e5a166309430c430e5a1fc33353428335fa6fc33353428335fa60f3451345f33379ac53351340833f51c33347e34df33d3201f346834b233bb20203451348133cb2154344e34fd33f82067310732ca312ba167310732ca312ba1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eb21bc2162236119eb21bc2162236119c424d4256028e7205423cd24a727e41fe0197e1a6920d3145f244f267229a420c6266428832b132310271128a52bea2100004514f12200000000ad1d4324000076289f2a272d691caf293a2b2c2d421df3269328d529c4150a2b712cae2d300b0b2dea2db42ecb992e2ece2e572f209db42f16305c305f9f7b30ba30ee306fa1283168317a3171a4f0312c321b32f5a3e93125325a3217a5e93125325a3217a50000000000000000fc33353428335fa60f3451345f33379ac53351340833f51c33347e34df33d3201f346834b233bb20203451348133cb2154344e34fd33f82067310732ca312ba100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e232b24c024ed1a9e232b24c024ed1a93252526952817222624fa259e2810218a251328112a7e22002616286d2aa722a326f628a52bb922ec26c528982baf21c720232316265615d12088247627741294286d2ac22ce31b0d2abe2b152dd31c2b281029da29ca14732c1d2d092ef317c82d942e5c2f2a993a2fc22f2730129da430ca301631849eb331e9311e322fa2c7320e331c33d7a5fc3321340a345fa6093421343c3482a8093421343c3482a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001525cb266a28e7201525cb266a28e72096256a27f9284323e624c1278129e721bf255b28332aa622fa260929572b8323ec27d629302ca5236c286b2a9e2c2023ce28bd2aa82c36221629852a3e2c0e1c1b2a042c5b2d6d1ee92be42c192e521f5a2c372d572e461d402d042ebe2eb118302ed72ea12f879924307730bd30669b8f31af31fd31f79c083344338933a1a34634733474345da73d3558353635d9a871358d35b9356dac71358d35b9356dac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e24f225c327e6209e24f225c327e6208e237a25c2272120f5216f245927391ed2205b24fc25091c892326275929651f3f266629f02b8821df27542a502c56212d273e29782a191b5429bd2b132d8120712a832cb62d3720e52bf42cef2dcd1e5b2c4e2d2a2ed61d4d2d302eb92ebc18c22e422f0630509867309630c6300f9dfe3120325732a69b0a3424343b34bca32f3561355a35cca89b36c136873652acf03618373f3798b0f03618373f3798b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c245f2516278f203c245f2516278f20cd239525a2275320ca22a724e8264f1f2023b6240727e11ed823e8247327121f4a245725c927801e542546265128b21dc026ea275c29101d4628f0283e2ad11a3129d4291b2ba219e92a422b642c9d1a542c932c422dbc17752ddf2d552e920dbd2e242fa32fbd9b9030bd30e730149c5a325f329a320d9c47345434663418a48835be35b435c3a83e3776372037aaad9d37bc37d03729b69d37bc37d03729b6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c245f2516278f20cd239525a2275320ca22a724e8264f1f2023b6240727e11ed823e8247327121f4a245725c927801e542546265128b21dc026ea275c29101d4628f0283e2ad11a3129d4291b2ba219e92a422b642c9d1a542c932c422dbc17752ddf2d552e920dbd2e242fa32fbd9b9030bd30e730149c5a325f329a320d9c47345434663418a48835be35b435c3a83e3776372037aaad9d37bc37d03729b6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1286f23d124e724952c8325bd27b728532f9827c327892b92307528c9291e2ca5303f29e62c562b402e5026f930092950286d283a334222cf25e6261833db1a0b2846280a346318ca28e32a8b3480153629492b2f34fc15fb28ac2b653073147629432b9f2c9389332a812ba52c1f97d32aa72bbf2c679b332ca92c002d8e9cd52c1f2d612ddc9d042d562d8a2d52a06e2da62dbe2d06a1872d882dcb2dc3a000000000000000000000000000000000cc291a2bfe28a8163c2f7b2fb72ed920f92f2b30592f5c22ca2f3330fc2eb721a22f3d30fb2e9422d02f3f30372f3c225a30a23006308023392f982f892e07270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1286f23d124e724b1286f23d124e724952c8325bd27b728532f9827c327892b92307528c9291e2ca5303f29e62c562b402e5026f930092950286d283a334222cf25e6261833db1a0b2846280a346318ca28e32a8b3480153629492b2f34fc15fb28ac2b653073147629432b9f2c9389332a812ba52c1f97d32aa72bbf2c679b332ca92c002d8e9cd52c1f2d612ddc9d042d562d8a2d52a06e2da62dbe2d06a1872d882dcb2dc3a0872d882dcb2dc3a0cc291a2bfe28a816cc291a2bfe28a8163c2f7b2fb72ed920f92f2b30592f5c22ca2f3330fc2eb721a22f3d30fb2e9422d02f3f30372f3c225a30a23006308023392f982f892e0727392f982f892e0727000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5203123a824f91df5203123a824f91dbd25912522288c22a12bf526ff285a28df2dc128262c522ab82c1d29252dee28e229a729472ef625fd27ed28b83112239e2792275c3232202b291d2aa533c01f91287e2a4e34841cee29042c5d33f21b1c2a142c352fd9192d2a582b432dba10ff2501283829978cbd2b492c0b2d7298502dd02d522e689ce82d592e9a2eea9f512ea42ee02ed8a1e12e242f562f3ea3082f132f772f82a2082f132f772f82a27d31f431e2309a917d31f431e2309a9102326c328831fc201b328b328f316723233287328d31a8222d328b3288317c231c3282328731a022133273326d31d021bc31ed3121314e25bc31ed3121314e250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c0c551a311ca2034c0c551a311ca2036f242b26b128352072268d28652aa1225f285d27c12a3824f9284a280c2c092591260f29a02c3c222628352a3a2e15238c282929aa317021be29812a0d34db20822bca2b5534e920912a7e2c7b313d1dcb28532ba12d4814682b222c172eac917a2c472d452e499c3a2de72dbc2e019f512ef72e562f3ca0432fbd2f043041a2023032305a30bba47e309c30b73097a58f309230cf30aca58f309230cf30aca5f23336342b3357a6f23336342b3357a65234ac341234b89f2a3489349e334014103466348833391a12346c348f33321d26347a34bc334b1d593491340c347014ea33e43390338fa1ea33e43390338fa1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022150b1d0000000022150b1d000003269f27a029cd218826a028042bee22ff266129ee2bdd220d282c29182c2b241928c129d72ca6239228292a562d82235828a929232dec203729072bdc2f14207729512c7e301b1e4a2a492c862ea01bdc29032c642d7d101d2cc52c7b2e5997152d052e912e299e6c2e292fb32fb7a0cc2f38306330b8a28530c730f1300ca52b315f3179316ca7ed310a322f32a1a8183225326b3227a9183225326b3227a90000000000000000f23336342b3357a65234ac341234b89f2a3489349e334014103466348833391a12346c348f33321d26347a34bc334b1d593491340c347014ea33e43390338fa10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0191b1f10207210b0191b1f102072100225382757291221da2511282a2a7d2297274329f52b35242028d429872c60246028c52a672d3924db28d32a5d2dd2235828032b542d5e204829d22b7e2de81ea82a822c092f961e002b802c952db31a492b872c8b2d700bb92c7f2d952e6d99e62dbb2e5f2fe89f682f0e304330e8a19b30e1300531daa4a431e6311132bda7a332e732fc323faabe33de33eb3343ac1b3415343a344ead1b3415343a344ead0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132162249225e21a132162249225e21a492504286d2986217e258e28ad2a1722d326a929d42b9123bc27362a602cb6233928b52aba2c57239028f72aff2c7b22b7281d2b1e2de4207229d82b682dbc1d972a592c232e421dea2bf22c732e901aa42c6c2dbd2ebc0c492d072ef12e129a7a2e232fed2fc1a028308230d23060a46131ad31d23161a7cf321433473331aa18343a34413429ade734f934f834e6af6a355635853523b16a355635853523b100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006c24ff254f28e7206c24ff254f28e7200025f026042910214325b226522955218325da28a32ae2202527d82a7e2c36226228342cb32d5c228c285e2c292edc204429bb2c212e371e922a0f2db62eeb1e292b472d9e2e571cf42b862daa2e991ab02ccc2df52ec90c932d5b2e312fd39bff2e702f053022a16530a630d73030a5e931183235323ea8bb33f633133422acde3400350635d8af04361c361b36c4b2c136b336e136eeb4c136b336e136eeb40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d024742634284221d0247426342842214024302646283d202523ff24b227201f2b238624cf26b01e2e238224f2263e1e4d24dd250528621e1826e9270c29521ec627bd28fb29d41d862860298d2a55188829162a722b0f93fe2a1d2b5a2c04986b2c5c2c1b2d3b9c9e2dc02d5c2e1fa0f12e5f2fdd2fdda28430d7300f319ea5fc3152327c32aea8fc3322343134a6ac1335343538357eb06f3682367c363cb454371e375b37d0b654371e375b37d0b600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d0247426342842214024302646283d202523ff24b227201f2b238624cf26b01e2e238224f2263e1e4d24dd250528621e1826e9270c29521ec627bd28fb29d41d862860298d2a55188829162a722b0f93fe2a1d2b5a2c04986b2c5c2c1b2d3b9c9e2dc02d5c2e1fa0f12e5f2fdd2fdda28430d7300f319ea5fc3152327c32aea8fc3322343134a6ac1335343538357eb06f3682367c363cb454371e375b37d0b60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b2cce269128a526732f7228052a8729c330b128ff28272a55311f2a4d2ad92838338d2a482f1b2a1d34992a71327b2b8f2efc2aa0338b25fb28482728337314fb2819281d3416898428242abd349c88b828f92a73346c951729c02b2d312597d829be2bfa2cd59b8a2aa22b8f2ca29d342b9c2ba92c359e3d2cae2ce82c4d9fc82c192d472dbaa0f62c432d792d8aa15a2db22dc02dfaa16e2db02de22d73a3000000000000000000000000000000001f2a532b73290817832fec2fe02e3c1e922f0730fe2e481ef52d142e302db41d662eea2e7b2df01e0a304b30372f6220bd30023142308f238c309f30c42fca2400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b2cce269128a5264b2cce269128a526732f7228052a8729c330b128ff28272a55311f2a4d2ad92838338d2a482f1b2a1d34992a71327b2b8f2efc2aa0338b25fb28482728337314fb2819281d3416898428242abd349c88b828f92a73346c951729c02b2d312597d829be2bfa2cd59b8a2aa22b8f2ca29d342b9c2ba92c359e3d2cae2ce82c4d9fc82c192d472dbaa0f62c432d792d8aa15a2db22dc02dfaa16e2db02de22d73a36e2db02de22d73a31f2a532b732908171f2a532b73290817832fec2fe02e3c1e922f0730fe2e481ef52d142e302db41d662eea2e7b2df01e0a304b30372f6220bd30023142308f238c309f30c42fca248c309f30c42fca240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007c28da26d52879247c28da26d5287924582c2828152a1f288330dc28a92a362c0a32182a6a2c8a2d8e31d629742d182da730142b0830322c882c072c22332827a62aba2a1f34be23c52a9a2a3b348221af29ce2bae34421d212a7b2c86340a175f2a9f2c5a30e110b92aba2b3f2ddd0a39266e272828c38c252c8c2c5a2d7f9c5b2de92d4a2e46a0eb2d4b2e852edaa1382e852ec22e57a3a62eee2e172f8fa4ce2e022f3d2f52a5ce2e022f3d2f52a5e5318a3267318318e5318a32673183182332813281310d1f1f32933286314c2034329c32b0315b204a329f32b231382129327832943153203c3288329031c3222d3242325f3123242d3242325f3123240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d27732890296a221d27732890296a228526b3287d2a65221e2c472a672caf27e02fe029e12c592b5c30702a252d232c202dbf2a952ec928592a5e2c7530ea242c2c232c4934fe24112c332cc734e122c32a6e2c4035fb1fa32bb72c9b344f1bb72a6e2c532fdb8a242c992c362eed9bcb2c7d2d622e21a0572dd62da22ef7a13d2ec32e1c2f5da3332f8c2fe52ff0a4d12f173040305ca63e3072308b30b7a751306b308c307aa851306b308c307aa826348b345933c3a026348b345933c3a02834653481333e1405345c3434339e20f9333a345233201f0e34523474332c1d07345a348633321f37347134c933d8204c346734cd33951a4c346734cd33951a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009926b228462b28229926b228462b28220e273329242b43237927092a382c7323a129ee29c12c6f25562bdb29fa2c15275829912bdc2dfd245c29c12ba72e1024242a102cc0305823a72cc92c1e35de235c2c7f2d973509201a2c5b2dc933b618bf2b0b2d832fef91912c3d2d412f5f9c372d362e342fd3a0652e102fd22ff5a3a42f1d3055307da571309730cc30cca7f1301731353149a97831a231bc31b8aaa231ba31db3176aba231ba31db3176ab000000000000000026348b345933c3a02834653481333e1405345c3434339e20f9333a345233201f0e34523474332c1d07345a348633321f37347134c933d8204c346734cd33951a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182599275029c120182599275029c120a0266d298c2b07235628462a452c6424ea282e2b482dd2248828bf2a592d6024be281e2bca2d46246529d22b2a2ea923e829082c5b2e1f223f2a452cf02f7c20da2acc2ceb31771db62b022d5930e811a22c4c2deb2ee995042de72d4e2f159e002ee02ed22fb3a2422fe12f4530aca568309930d4304aa85e317a31b03198aa24324d3271328eacfb3218333633f6ad313349338333d3ae313349338333d3ae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067242828ec29402067242828ec29402039265d29902b4e228d271f2a482c68236928e62aec2c1e24c5283c2b5e2d2624e1285f2b832d8c232c29882bbc2d5a223a29ed2bed2d1620222a732ca12eda1edc2ae02c2d2f901a352c4d2d542f4b0cc82cd52d662f7e99552d532e7e2f259f7e2e692f2b303fa3f62f5430b530fca60f3149318331e5a953326532a23297ac6f338a33b6332caf4e345b346134e9b0833483349834a6b1833483349834a6b1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086249d278529702086249d278529702098250e28ee2939210127172a202c1722ad270f2c812d0f223528322ce22d3e22a728122ccb2d29220629162cd02d352182294b2c172e341f1f2a902c412e6c1b572b212db02e7f0b3f2cc12d412f96970b2d772ed32fd49cd52de72eec2fa7a0e72e922f2d3084a43a306f30c03040a871319431c131dcaa0c3324335b33e7ad43345b346c34b9b0093513352535f3b25435543566353bb45435543566353bb400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e24a5264f2801205e24a5264f2801200f24e4253d28521f4323f7242b276e1e84235625a327881e962479269428d31f20264628de297220c927db28b42a541f99286b293e2b8c1c2529fd29f22be915212ae02a542cd2931b2bab2ba52cab9d542c572c222daaa1542d952d302ea1a20d2f5e2f083010a56d308f30e0304ea89331b931f53161ab3f33493384336aae7d3485349a3468b1623560356b3525b4b135a935bd35f8b4b135a935bd35f8b4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e24a5264f2801200f24e4253d28521f4323f7242b276e1e84235625a327881e962479269428d31f20264628de297220c927db28b42a541f99286b293e2b8c1c2529fd29f22be915212ae02a542cd2931b2bab2ba52cab9d542c572c222daaa1542d952d302ea1a20d2f5e2f083010a56d308f30e0304ea89331b931f53161ab3f33493384336aae7d3485349a3468b1623560356b3525b4b135a935bd35f8b4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000222d202670287d25c6303029082bf328c7303729042a8e261f31b7272f2ce6205837bf2c6a306429aa38112bf433402afd32eb2da03677262b2dc12bab37ed1ea22b792bed379a1d2a2b162c6c37dc1a6d29482c17353c9677289c2b9530b29bdd29d92bcb2c6d9d652aad2b6f2c539e5d2be02bb22cc09f4c2cbd2c002dcca0ce2c202d3f2d5ea1f02c392d6c2dd5a1432d992db62d8ca2572d9c2dae2d01a400000000000000000000000000000000dc2a032c812a601435305730c42fe81d9c30ba302d30791e2c304530832f751b3a3064308b2f8d1b8830c73015300c1ce73025316c30e21eb630d4300230d11f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000222d202670287d25222d202670287d25c6303029082bf328c7303729042a8e261f31b7272f2ce6205837bf2c6a306429aa38112bf433402afd32eb2da03677262b2dc12bab37ed1ea22b792bed379a1d2a2b162c6c37dc1a6d29482c17353c9677289c2b9530b29bdd29d92bcb2c6d9d652aad2b6f2c539e5d2be02bb22cc09f4c2cbd2c002dcca0ce2c202d3f2d5ea1f02c392d6c2dd5a1432d992db62d8ca2572d9c2dae2d01a4572d9c2dae2d01a4dc2a032c812a6014dc2a032c812a601435305730c42fe81d9c30ba302d30791e2c304530832f751b3a3064308b2f8d1b8830c73015300c1ce73025316c30e21eb630d4300230d11fb630d4300230d11f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c62ad5283b2b5a25c62ad5283b2b5a25ca2fdc29222cc7290432562ba82c5e2c0734052c9e2dd92d0934de2b5a2f9a2d1834482c57314a2da530202d47341d297d2d972c2035a424d42c482cd23451227a2aa72c1e35571caf293b2ca634ce89c829852c3030cb98682a1e2c8c2df39a2b2aa72b832c7a9b622c1c2dee2d8d9f492dd72d352ee7a1d72d422e882e44a3212e742eba2e34a4622ec62ef52efda4702ebb2ee02e0fa6702ebb2ee02e0fa62032d732b13141122032d732b13141125432b732c831712045329b32af3167204d32aa32c131a11d6532ab32c431581f52329632af31a51d60329d32bc31531f6f328532843184206f328532843184200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a28fa29422b50238a28fa29422b5023be29832ab82ce6241231192c562d162cf633732c2a2eab2e6134c92cfd2e562f15334c2c5f305e2d712d952c96318326b22c272cc434a423ce2cd82c3b35ac21982cb42dec35be1e552beb2c0535ae14782aa42ca42f5e99052cd52c952ee69dd32c9d2da42e15a14a2dd32da12e42a3102e822eeb2ebea4e82e512fad2fd7a58d2ff72f2230dda6033038305930cfa7ff2f1f303530c9a8ff2f1f303530c9a83c34ad34e83353943c34ad34e833539431347734b133d1201a3452348933c22114344a347733ba21163449347533c8222e346234ab33781f30344f34ae3346145e349a34da3375945e349a34da3375940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b287f2acc2cfd235b287f2acc2cfd236e287c2a3b2c22248629682b1c2de424d130532cbc2d302ce732ae2c6b2f1c2e9230b22cd42f5d2be32b432c2230f824da2b902c0132e422492d562dd93594228a2c602d8536151efe2bf42c24351915a12b3b2d21305b99ce2c9f2d6d2faa9f5e2d5d2e7c2fffa11b2ee62eb72fc6a44d2fd22f2a30dfa6353055308430a1a89430b530df30a0a9e63019314231a5aafa3028314831b4abfa3028314831b4ab00000000000000003c34ad34e833539431347734b133d1201a3452348933c22114344a347733ba21163449347533c8222e346234ab33781f30344f34ae3346145e349a34da337594000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097266c29842bd62197266c29842bd6212328782a622cb8232d29812bf82caa24e728612bd32d43242c2c222b012e6427072d022c8c2ef127e7293e2cd72e1023d62a412c9a305821dc2b452d1a346320a12cf12d9035ae1b172c472db5333895792cbe2d5d30da9c482d282eeb2fe3a0d12dd02eec2f9ca3c32e9b2f303026a6113052309530bca8da3007313931e4aa77319731c63167acfa311a323c327bad0e3237325b323aae0e3237325b323aae00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007726d229112cd4217726d229112cd4212128dd2ab72cb523ad28802b432d11247c29062ce02d98248b29b52bfd2d77243a29a42be62d4123c129102c442ef821ed29562caa2ec01faa2ac72c5a2fbe1d012b2d2d17304216502c8d2d06308195d92c022ea72f429d672d862ed42f58a12f2e502f25303ea4652f2a308f3032a78630df302531fda97731ac31e7317dac63328932b5325fae23334a3375332fb04a337d339933bcb04a337d339933bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000244e28472af51e00244e28472af51eb7268629722ba0211628262c7a2d31228128302ced2d40226c28052cca2dff21a128e72b9d2dfb21f628032cb62dd4209529432c0b2e3c1e1f2a912c3c2e1419642bfa2c6d2eb7946e2c882d072f3d9c262d9d2e0a30e69e042e762f4f3056a2c82ee62f603016a5d22f47309e304ea8ca3008313931f4aaf6312c32503290ad1f3341336a3310b00434143430348ab12a344534583447b22a344534583447b200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a2414269628df1e5a2414269628df1ef92363252d284b1e8a23d9252328f41d122548273b29d81f60267e28672ad4207027ed28172b92202a28fd28132bb61d552827295c2bb318f228ac29072c6b94a9297e2a592c279c322a032b772ceb9e1a2bb52bb22c19a1542c9c2cfe2caaa1a72e1e2fb52f0ca624305c30a330d2a8e9301731493171ab01322a325232e3ad5a337a33a0338cb0373444345b3438b249346a347334cdb249346a347334cdb2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a2414269628df1ef92363252d284b1e8a23d9252328f41d122548273b29d81f60267e28672ad4207027ed28172b92202a28fd28132bb61d552827295c2bb318f228ac29072c6b94a9297e2a592c279c322a032b772ceb9e1a2bb52bb22c19a1542c9c2cfe2caaa1a72e1e2fb52f0ca624305c30a330d2a8e9301731493171ab01322a325232e3ad5a337a33a0338cb0373444345b3438b249346a347334cdb20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a2eea28fb2a11258931882a2e2d982714317b29232e7323a735052a372e0d211b38e32e3b3131181f3749306734741df333d22e6f359822162d0b2c25362b1e1b2de02ce536d81ea52b4c2d583764189229c12cb734d2971628212b392e009a9f29732b432c209c672aa82b7a2c1b9d5c2b132cbe2c479f5b2cce2c0e2d96a0c82c1d2d3d2d08a1e22c332d632d74a12d2d732d912dc7a13b2d5a2d862d82a3000000000000000000000000000000005f2b262cbb2a878b44306d30c72f5b109f30de302b3013172c306a30a82f421045307e30c02f5c109130db302f30fe96023143318530ab17b730e5300830d11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a2eea28fb2a11253a2eea28fb2a11258931882a2e2d982714317b29232e7323a735052a372e0d211b38e32e3b3131181f3749306734741df333d22e6f359822162d0b2c25362b1e1b2de02ce536d81ea52b4c2d583764189229c12cb734d2971628212b392e009a9f29732b432c209c672aa82b7a2c1b9d5c2b132cbe2c479f5b2cce2c0e2d96a0c82c1d2d3d2d08a1e22c332d632d74a12d2d732d912dc7a13b2d5a2d862d82a33b2d5a2d862d82a35f2b262cbb2a878b5f2b262cbb2a878b44306d30c72f5b109f30de302b3013172c306a30a82f421045307e30c02f5c109130db302f30fe96023143318530ab17b730e5300830d110b730e5300830d110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eb2aa028e52b0724eb2aa028e52b07248c30a42b3f2db7284d33c52c2c2e562b21350d2dcc2eaa2c6b35ea2d9430102c0735182e48329d290432e92d9e339125b52db02cd134eb20ec2cca2c7935da1f002b462d9835cf19102b212df633368b032aad2c882fc299dc2a862ca32d989c1d2cfe2cac2d909e7b2c3d2d012e6fa0342dba2d132ecfa1c52d1e2e632e2da3032e532e9d2edea32e2e8e2ecb2ea3a4362e6c2e912e74a5362e6c2e912e74a52e32b132a331bb982e32b132a331bb985632c632ce3179125832b132bb31dc186232b732c331e3187332b932c8311e1c5a32ae32bd317c126632ab32c331e618713288327531941271328832753194120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f283c294f2b45229f283c294f2b45227b2b052cc42d4f25ec32b42c422e952cde34832dc12f232e6935442e6e30792ecb34602d0f31832cb22f4c2dc6314725ed2c662cf632e0204a2de82c323538204e2c652d7435241ba82b692da433dd11df2a032dbf2fe497172c462d0e2ff59cc82cb72dac2e1ea0302de72da82e1fa2f02d8c2eef2e74a4a32e132f722f66a52f2f9b2ff82f13a68b2ffd2f213019a7762fac2fd92f58a8762fac2fd92f58a820347a34ab33369420347a34ab3336942c347d34c4334214093442346c331f94103443347333389a1434473480333f9a28346534b2333e9432345334c73349147234a534eb33ac9d7234a534eb33ac9d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a428cf2a9c2cec23a428cf2a9c2cec23f929f22b252dd024672df62c412e18289c34c32d262fd62ef935f02e9d303d30b834272d52307f2d3b2d982c1a309724932bd02ca530f420582c822df4344c202a2cc22d7e350d1d7a2b392d2e32ba11f52b892da72f95999a2ce82d662fc19e6d2d562e812f5ea1e12dc22e962f08a4d52e702f033036a6bd2f0d30463003a82f3052308330bea865308e30b5308aa975309330b4309daa75309330b4309daa000000000000000020347a34ab3336942c347d34c4334214093442346c331f94103443347333389a1434473480333f9a28346534b2333e9432345334c73349147234a534eb33ac9d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f28d42a992c62233f28d42a992c6223a228af2b292dc3235e2b7c2c022ef025772dc52cf62d51287034a12dde2ede2ec1333c2e4130032dad2c922c482f6724282a642c58306b208c2b872c5331801e702b8c2d58343919442c782d403188927e2ceb2d3930e09cfb2c3f2eff2f4aa0c12db92e0130cba2802e6a2f1c307fa5982f183064304da85c308430c030c6a9c330ea301b3110ab1b3147316a3146ac333151317531daac333151317531daac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004627d62ab52c71224627d62ab52c7122b028102c782d0024a129382cd42d8924952a472cea2d18251c2b1c2ce92d29251b2c1a2c152eea24ee2b212c572eb4222d2bae2c332f3c20fe2aee2ca42faf1ca12b4f2d0030de14692ccb2d1330e197d92c242ec62fa49c672d952eec2fa7a0272e3f2f2a3006a4202f083078307ba620308530db3055a9ca300331473191ab8f31a531d831ecacf7311132373223ae0a322d325432cbae0a322d325432cbae00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004124e228012bb81e4124e228012bb81e3828692bd02c42225a28572cfe2de721db28442cf22d4622bd28182ccc2d462217292a2cd42d17225c29382cf82db320a5294a2c1a2e391d442a932c662e6618502b0c2da62e9a916a2c5a2dc12e539b032d602ee92f5b9ff92d972f7330e8a1d72e0d309130b1a4922f363097305ea75930a830ee302caa17314931813182ace5310332263211ae6932763298329eafae32c932f8323cb0ae32c932f8323cb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c24f225a928ec1d2c24f225a928ec1d4e2352251a28111d84247a275329691eca26b728be2a7f208b270229692b64204027e0282e2b0e1f0727ea28eb2a7e1d3a27f528272b9c1bc127e628332b3518c12746287e2b6e167d261c289b2a3e1c6225a4265629fb185727fa27a7287f07e42d1b2ead2e6ba4c62f1830553067a870309d30d33096aa1b313d316d3185ac0132233240328fae8632a432c63216b0c332d532ff3281b0c332d532ff3281b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c24f225a928ec1d4e2352251a28111d84247a275329691eca26b728be2a7f208b270229692b64204027e0282e2b0e1f0727ea28eb2a7e1d3a27f528272b9c1bc127e628332b3518c12746287e2b6e167d261c289b2a3e1c6225a4265629fb185727fa27a7287f07e42d1b2ead2e6ba4c62f1830553067a870309d30d33096aa1b313d316d3185ac0132233240328fae8632a432c63216b0c332d532ff3281b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ba2d582c2a2e7e23e231ee2c772f71252034132d5330cb21a536192eaf30c9166c362930273219a02e35393058334a954231052ffb32b21cb62ca82d4b33d11bea2ace2d30349e1a0f29962e2d3475126729482d8031d394b128ba2b382dc8975529712b3f2cc8999f2abb2b892c709c832b3a2cbd2c839d5b2ccd2c012df39ec12c172d3b2d19a0d32c2b2d622d76a0112d572d7c2db0a0322d502d6e2dcda100000000000000000000000000000000272afc2a9e29480a59308730f72f7090d3301c316030ed109630ce302430af10b130e9302d30ca90c5300f3150307a9d113164319030779aca30f73022301d9a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ba2d582c2a2e7e23ba2d582c2a2e7e23e231ee2c772f71252034132d5330cb21a536192eaf30c9166c362930273219a02e35393058334a954231052ffb32b21cb62ca82d4b33d11bea2ace2d30349e1a0f29962e2d3475126729482d8031d394b128ba2b382dc8975529712b3f2cc8999f2abb2b892c709c832b3a2cbd2c839d5b2ccd2c012df39ec12c172d3b2d19a0d32c2b2d622d76a0112d572d7c2db0a0322d502d6e2dcda1322d502d6e2dcda1272afc2a9e29480a272afc2a9e29480a59308730f72f7090d3301c316030ed109630ce302430af10b130e9302d30ca90c5300f3150307a9d113164319030779aca30f73022301d9aca30f73022301d9a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000068279d252f28da1a68279d252f28da1afe2fc02cb82e60221934332e7a3095277d35da2ea630a7267d35872f71314e22d134c92e3832261e7630512eee31201d602ca82d3132301c3f2a7b2daf322f1c9c28742d28320019382a4e2d7930f013372aca2c972eef93c42ab22cc42dc0980d2ce92cb62dc19b792c422de32d909e162dad2d042eb5a0902de92d322edca1d12d252e702e7ea2fd2d582e992e12a3fe2d472e732e4da4fe2d472e732e4da40d3287326b31a3980d3287326b31a3986232cb32d431e3186a32c232d031bb1d8832d632e331d61d8e32d032dc312f1c4a32aa32b231039c6a32c132c9318d92473270328531699247327032853169920000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008421a7255e26eb178421a7255e26eb17072c0d2d8d2e2d246532942d7d2f392ae234512e4b30a22b9a35442fe6309d2a5b34012e503108282a2e622d3431eb201c2c7a2dd930821d812a032d8d315b1c9c29682d9c31161a112bc22d9230f618712b732d782f998b272c7e2d292fd599b22cb22dac2eb29d292d012ea72e72a0df2d922eec2eeea2672eda2e2b2f30a4da2e472f9c2feba4212f9b2fed2f58a5002f552f862f97a6002f552f862f97a635348734f233841f35348734f233841f35349534ef33841f0e343d347f33c323123446347533c1220e344d346e33ba2212345e349d33289428347334b3335d1a6a34c0340f3482946a34c0340f348294000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f229892cbb2d6924f229892cbb2d6924602b292d9d2e7825df2e502e013070285d34792d3230f22ca5359b2ec330222d9f34d22dc430ee2a622db82c7130b222f52a502d3630c51f672ae32c7030ec1dfc2a802d08313c1c742bdb2d5130a816592ce52dfb2f8c95b22c032e852f7e9c4c2d572e662f199fc72db22e822fb7a1822e3c2fcf2faca4442fc32f183025a6ca2f1e30493055a710304030643015a813302d304f30bfa813302d304f30bfa8000000000000000035348734f233841f35349534ef33841f0e343d347f33c323123446347533c1220e344d346e33ba2212345e349d33289428347334b3335d1a6a34c0340f34829400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a298e2cd02d2d244a298e2cd02d2d24c229e52c2d2ebb24362c4c2df62e6226ed2f852e0f30c029cf34112e9430e82df834292d4130d52cdd2c9d2bdc2fea23512a9d2c0b3089208629fc2c892f771d162cde2cbf30d21b0a2c9a2d5f30200c872cde2d1c3033992b2d512eff2f439eb32dc32e0230e9a0622e3d2f093089a32b2fd42f39304aa601303630753068a859308b30b63057a99830c730ea3015aaa230b730d030baaaa230b730d030baaa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a28182ca12df1223a28182ca12df1225729f42c632e6324052b402dd92e5225452c182de62e33264c2d2b2dd72e04275c2e8e2c892ecc26542dfd2c0f2f2a241d2c2b2d542f9820e42b592dad2f4a1d382cb82df12fd918ac2c162e17302893162d602ef02fd799932dbe2e0730c29e332e3f2f3230bca1e52ecf2f5a3082a4af2f44309830b8a75830a430df3079a9ef3014314931d9aa503132315e3107ac24313c315c3163ac24313c315c3163ac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005926c82a8a2cb6205926c82a8a2cb62051292b2d9c2e8c23e828652c202e57222b294b2c092e592238294b2c172e3f2277296b2c2a2ed7219f295e2c232e6520a4294c2c102edc1c4c2a7b2c572ea015562b2c2d0b2f9e91612c9d2d262fd297f52c3a2eb72fbf9cdd2d812f6c304ea0c72e1230983023a3602f203083304ba50b306830ad3073a88f30c630043153aa1f3141317831ecab5f317b31ab31acac7e319631c13109ad7e319631c13109ad0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae249c262d29bf1dae249c262d29bf1dac239a250928d51c5026b428852ac11f08289129c72b9020c4275829b62b8f1f99276629d42be81e91279029ee2ba41ebe279729132c4d1e31274a29c82bda1d8c254928092bde1cc4242b27e0292f1c3823d4250d29a4196524592692287819922dbc2d432e94a25b2fbd2f173074a6273051308a30b5a89b30b930f13064aa4031573183313bac82319931be31f7ac9131a731d5315fad9131a731d5315fad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae249c262d29bf1dac239a250928d51c5026b428852ac11f08289129c72b9020c4275829b62b8f1f99276629d42be81e91279029ee2ba41ebe279729132c4d1e31274a29c82bda1d8c254928092bde1cc4242b27e0292f1c3823d4250d29a4196524592692287819922dbc2d432e94a25b2fbd2f173074a6273051308a30b5a89b30b930f13064aa4031573183313bac82319931be31f7ac9131a731d5315fad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a22a922c302e21205e2f372f9c2f682127332a3008317a191035d1302532d0a1d234e2305c32c4a24b32542fc131049cd02ce02f13322416982b4330c5324d1a542a1a309232dd1ad129352f2631d318e829d32cf72e8a138d296c2b0a2dab89b4299c2b742c4793a22ae92b832cec95852b4c2caf2c47994c2cb82cf72c219bb72c0b2d3b2d839cd12c2a2d5c2d9c9cfd2c482d6c2d699d0f2d3f2d5f2dc89e00000000000000000000000000000000cb29e829532911984b306630c32fee9cea3041317830a59d0a314a318630139f323171319a304b9f223162318e3091a12d3199319330f4a0a5300131013009a10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a22a922c302e2120a22a922c302e21205e2f372f9c2f682127332a3008317a191035d1302532d0a1d234e2305c32c4a24b32542fc131049cd02ce02f13322416982b4330c5324d1a542a1a309232dd1ad129352f2631d318e829d32cf72e8a138d296c2b0a2dab89b4299c2b742c4793a22ae92b832cec95852b4c2caf2c47994c2cb82cf72c219bb72c0b2d3b2d839cd12c2a2d5c2d9c9cfd2c482d6c2d699d0f2d3f2d5f2dc89e0f2d3f2d5f2dc89ecb29e82953291198cb29e829532911984b306630c32fee9cea3041317830a59d0a314a318630139f323171319a304b9f223162318e3091a12d3199319330f4a0a5300131013009a1a5300131013009a1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000db29932c052ea91fdb29932c052ea91f492d562e0b30bc1d5e31113064312b1e78346a30d83190147d346830f231bb9daf312630de315a98822dc02fcb310717332c052f98318e1c412a642e7031971cdb29f82dba30d91bd02a562d8b2fa619212bbe2c462e8d14882bee2cd72db08b162c072dc52d3795782c3c2dd72d469afd2c982dfe2dc79c792dd42d222ea29ea72d052e532e939fe32d312e622ee39fdb2d232e4c2e6ba1db2d232e4c2e6ba1d53142324c31d6a0d53142324c31d6a08732d232e931aa927632c832d5319812a432f132f431c812b23201330532d6126f32c932c5311b9ca7322833e73118994b32cc3292316d124b32cc3292316d120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a29f02b912df7201a29f02b912df720c12b032f9730a424322eaa2f0e31a225bb32163072313a26ad3315307831a724c93003307b31cd21f72c062f6a31051e8a2c7a2ec230151e322ac22da130831b412aad2d3c30951ba92ba32db62f5b1afb2b5a2d0e2f1815642ca52deb2eb992b42cbb2db62e67992c2dfd2db02ef49cd22d6d2edb2ecd9f4b2eaa2e082f9ea0992e042f5c2fafa1e92e432f942f83a1d32e152f332f9ea3d32e152f332f9ea31c343b34cd338e261c343b34cd338e2663349e340e34e12512342734743388273e345a34b233bc2836346534bc33b328213466349d331e276b34c53405345f289434ed34343487289434ed3434348728000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000722a622cf42d8123722a622cf42d8123302ca12e23303626032d8a2ffd3028260a30492ff3305827a6314b2fda300727c62f3f2fb43057244f2c4a2ec0308a208b2b5e2ec630761f8f2ae52d2f303b1d032bd52d44309b1b482cf32d1630eb18832ce72d942f9c0c0b2d4b2e8c2f8198442d5f2e782f659bd12dbb2e8c2f919d802e372fcd2fc6a0212f9a2f083098a2892f02303130efa3d12f233049305da4c32f0530223053a5c32f0530223053a500000000000000001c343b34cd338e2663349e340e34e12512342734743388273e345a34b233bc2836346534bc33b328213466349d331e276b34c53405345f289434ed343434872800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c298c2c312e58238c298c2c312e5823922b8a2e0c301a261e2ced2e77301c26082d5d2fea30d326642f242f8130aa27bc2d4b2eda2faa24fc2a712d3e303c21222b912d50301f21122bfd2df02fe61f452cea2d0b302d1d7b2c1a2e28300118be2c032e0430d88c612d802e0130cf98c12ddf2e0330829d5a2e322ffb2fb49f092fb42f243083a2b12f183053308ba4213058308630aaa557308530ab3082a64b3073309530fda64b3073309530fda6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083289d2c592e202383289d2c592e20234d2a262ec42fe024d22ba62e2930cd256a2c322e12302026fe2cb62d942f22262e2d622ddd2e0a25812c612d682fc1222e2c922d972faa202e2cc12dbb2f231e7f2c102ee12f501ae62c602e0f308113452d852e04300994ae2dd82e1130f99b3a2e422f3130c19ed72eb52f4d3005a1792f22307c3064a31d306a30ae3061a58d30c330ee30d3a6c330d43001312ea8bb30d530f1304da8bb30d530f1304da80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b226102c402d6f20b226102c402d6f20552a082f8a30c723cb29752cf12dbf221d2a8c2d3a2fba22ff290c2d442f6922ce29bf2cc22e1821bf296d2c432e2020b929532c092e4c1ddd29372cf62d7b139d2aa32ca22ee895622cee2d8d2f798c002d592edb2f6296c32d752f68300b9cb12e12309b30429f3e2f11307b3051a1c12f3f30853015a443308230c5301ea6af30d6302231a0a7f43008313631d2a8fb301531403101a9fb301531403101a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001925eb2789299c1d1925eb2789299c1d1324d1261429221d9727f229e62b6b201b282d2a382c422052279329da2b5c1fa527b5290e2cf41e0628022a432c8c1e1028f5294e2c5a1e7a27a0291c2c9b1dc0259c28f12a211c6a241427ca29c61932242a261d29f418d624c026e9282b18a02da62d1a2e1a9e232f832ff92f26a2e92f27305b30aca45b307f30b83088a6d530f2302c3116a80e3128314b31eba8fe301a313a3105a9fe301a313a3105a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001925eb2789299c1d1324d1261429221d9727f229e62b6b201b282d2a382c422052279329da2b5c1fa527b5290e2cf41e0628022a432c8c1e1028f5294e2c5a1e7a27a0291c2c9b1dc0259c28f12a211c6a241427ca29c61932242a261d29f418d624c026e9282b18a02da62d1a2e1a9e232f832ff92f26a2e92f27305b30aca45b307f30b83088a6d530f2302c3116a80e3128314b31eba8fe301a313a3105a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0285d2d822f591e4b2ac62e5430391ebc2c05304931a61a012ff130c432278f0f2ebe31b533a494a82c38306b322213b12b8a308a326b18262d58311833951d8c2c8f30f931171e1f2bb72f0f31c61c36298d2cf62da819a929a12bcf2c6b19f529bf2b942cf218a72a102ca12ca4178d2b5d2cbb2cbf16492cbd2cfe2ca917b02c0a2d3a2d3018c82c222d522d1a16f62c3d2d5e2d5416f82c292d422d128d000000000000000000000000000000002a294829d52831a1612f3d2f5a2ea6a79c30da301b3080a7a930d1300f30e1a7b430f230f12ff4a7b730f330e72fc5a6c8300a311630a5a531308730ee2e49a60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0285d2d822f591ea0285d2d822f591e4b2ac62e5430391ebc2c05304931a61a012ff130c432278f0f2ebe31b533a494a82c38306b322213b12b8a308a326b18262d58311833951d8c2c8f30f931171e1f2bb72f0f31c61c36298d2cf62da819a929a12bcf2c6b19f529bf2b942cf218a72a102ca12ca4178d2b5d2cbb2cbf16492cbd2cfe2ca917b02c0a2d3a2d3018c82c222d522d1a16f62c3d2d5e2d5416f82c292d422d128df82c292d422d128d2a294829d52831a12a294829d52831a1612f3d2f5a2ea6a79c30da301b3080a7a930d1300f30e1a7b430f230f12ff4a7b730f330e72fc5a6c8300a311630a5a531308730ee2e49a631308730ee2e49a60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006729482e043092206729482e04309220892bc42f0931ee20ed2de8304032ac1d622e6c311f331218c62df930c932e50d852db7306732a30def2c653066326818082c1330df315f1c9c2bb62f3631951d322c3b2fb130a01d912a5f2dac2ff71b2a2bd92c572ec61bce2bf42ce12d7a191b2c0e2dbf2d5617752c362dcf2db115ef2c892dfb2d4b166e2dd62d282eee16952dfd2d502e4614d32d252e542e7614c42d102e3c2e6a94c42d102e3c2e6a94dc2f3130142fb3a8dc2f3130142fb3a87a318d31d43028a933329b32b03141a854327b327731bfa84232a03258317ea822326d3230313da78432c732a23146a7213297322f3167a8213297322f3167a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c26ae27000000003c26ae270000522cf62f0e310825512d3931bd325725702e3e31db323624152ea33060323d21162d5e30dc31771f502cbf2f8a31c71d7b2c0a2fe830011ecc2bd62ec530ba1c762c0b2f7e30d61c882b622d0e2f3f1a172c4c2d9f2eb2187d2c942dbb2e0318bc2cc52da42e41132e2dfd2da12e4a0dcd2d5b2ece2e7114452ea42e032fcd14822ee92e422ffc14a52e0e2f912f3d189c2ef92e382f10959c2ef92e382f1095ac33dc3399330aa8ac33dc3399330aa8af330a340c3340aa00345834f333b9a82c346b34d13386aa4734a434d1336aaa4e347d34ab33a2a98f34b0340a346aabcf342635353486accf342635353486ac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000526012800000000052601280000b22c36303431f726832d153166324c27db2de5304232e225632e5c30fc31f223372d353075317e216c2c01308031a820b62c522f07315c20842b382ec730831daa2c192fd130771c722c3c2e17303e1a822ce32d542f07180d2d332e762fbc134d2d672e632f690dd52db22e7a2f77148b2e2d2fc92f2d181d2f8e2f00308a18662fdb2f2030b918ab2f0d303830df158f2fe62f0f30c9958f2fe62f0f30c9950000000000000000ac33dc3399330aa8af330a340c3340aa00345834f333b9a82c346b34d13386aa4734a434d1336aaa4e347d34ab33a2a98f34b0340a346aabcf342635353486ac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae26272800000000ae26272800001a2ce82ffe305926702d12314f3209282d2dfa3069320527a42d7c30a731ab25e62cb52f1131f923052cd02eb1304922d32b4e2e42309d21bc2a752dfe2ff31fa12c7d2e0f30ae1bc32d472f7c309e1af92c492e0c309d13542d872ef42f1514d62de52e033078146b2e3a2fff2fea14082fa82f1e307d18942f0c304630ce1503303f3077302516413078309c3058103b3060307a307b963b3060307a307b960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e128592deb2e1623e128592deb2e1623572c0f300c317126882c9630c93170268d2c4e30c3312c26542c942f25312d25522ca22e6f3011240b2c0e2e243052222a2c042e02302f21402cfc2dc32f531fab2c502e0230781ce82c872ed82f8313a32dfb2e2230c28dc42d012f1030e38d292e352f2030b814c62ea22f3c3030156b2f15306b30ae1502304a309330181055309330c4306c10a330cc30df30bc10d330bb30d630ed90d330bb30d630ed9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009325172c4f2de41c9325172c4f2de41c1a2a30304f31341f1428f1297f2c071bbc2b9130c631d0206b2b9a2ff8300922d82a9b2d702fea20812ab62ca22e0c20ed29832c342edd1d3229232ccc2d4b17b129062c5a2d44933d2c8a2dc72e540c092d592eab2fb613d12d7b2f5e307414ba2e123099302715402f11308130670f9d2f2a307a30d51527306530ab305c168530b830fa309d10bd30ed304231d610d130f7305f31eb90d130f7305f31eb90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097258428072a5f1c97258428072a5f1c9d240d286429141d18284c2beb2c822042289c2b0c2db0201327402a3d2ce31ed4272c2a422c5f1e58287e2a7c2c3d1e52287e2a732c341e43283d2a5f2c1e1e11275229872bfd1a6d25b027ac295e198a244c2617293d17b524e72610294f16992da12df42db70d1a2f6c2fd72f418fc62f0d304530f415433065309e3087169c30c6300031b510ec3007312b310611ec3005311e310691ec3005311e3106910000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097258428072a5f1c9d240d286429141d18284c2beb2c822042289c2b0c2db0201327402a3d2ce31ed4272c2a422c5f1e58287e2a7c2c3d1e52287e2a732c341e43283d2a5f2c1e1e11275229872bfd1a6d25b027ac295e198a244c2617293d17b524e72610294f16992da12df42db70d1a2f6c2fd72f418fc62f0d304530f415433065309e3087169c30c6300031b510ec3007312b310611ec3005311e310691000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d5289c2fbf308d1f742a3a319332d620842c81321834c120052d3e321e345e1f592ca4326e34451d6c2c81319033561bca2d5e322434cd1c4b313a3395336b22a1318832bd327d24aa30ad3172327123bd2c512e782ff41e7f29bd2ba52c5e1b0b2a892b772c8e1a812af82b812c391a8f2b652cb42c1a1c532cc92c0c2d3e1db92c172d4d2d541ecb2c292d5c2dcf1dfe2c422d652d0d1ef32c212d432d5e1d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d5289c2fbf308d1fd5289c2fbf308d1f742a3a319332d620842c81321834c120052d3e321e345e1f592ca4326e34451d6c2c81319033561bca2d5e322434cd1c4b313a3395336b22a1318832bd327d24aa30ad3172327123bd2c512e782ff41e7f29bd2ba52c5e1b0b2a892b772c8e1a812af82b812c391a8f2b652cb42c1a1c532cc92c0c2d3e1db92c172d4d2d541ecb2c292d5c2dcf1dfe2c422d652d0d1ef32c212d432d5e1df32c212d432d5e1d00000000000000002a294829d52831a1612f3d2f5a2ea6a79c30da301b3080a7a930d1300f30e1a7b430f230f12ff4a7b730f330e72fc5a6c8300a311630a5a531308730ee2e49a60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000472a333025311c22472a333025311c22012c8b316333ca23612ed7325c342c24492ec73261340421812d31323034f91d542d59314f331e1a632d1a31c832d0185c3037322533ca1b64328533ef337c209e325e338c339a1f3f2d382f6330061d712b132d0a2efd1cf52bf52cc12d551d322c142db72d041c7d2c3b2dc52dde1cf52c8c2df92d461f732ddb2d332e58209e2d062e632e1f20e32d332e6e2e1221c82d122e492ebf1fc82d122e492ebf1f0000000000000000dc2f3130142fb3a87a318d31d43028a933329b32b03141a854327b327731bfa84232a03258317ea822326d3230313da78432c732a23146a7213297322f3167a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a62b2e30e6301624a62b2e30e6301624832d043280337927fc2e64339534bc28152ffc326e345827f32dfd31e83345242a2d0431c3327021052c4730ca316a1e542d9b30b231c71ded32cf331134f41f063479348834291a8a2e2530f0302c182c2ccc2d012fec1a752c862d822ed51cd52cc82d892ea01c3b2d0c2e972e581ed02d682ece2ea3204e2ebd2e0b2fd621802ef12e3d2f0422d82e202f552f3423c72e112f322fd721c72e112f322fd7210000000000000000ac33dc3399330aa8af330a340c3340aa00345834f333b9a82c346b34d13386aa4734a434d1336aaa4e347d34ab33a2a98f34b0340a346aabcf342635353486ac0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000682c9030a6314126682c9030a6314126532fc73226349a2ab73040342f35bf2b19303f3389342a29c02ebd317d337e25912d0e31d1329322db2c4b309f311d21452bf62e8530431e1e2fce309b31d01e9b34d734d6340e9b723121328632419ed82c832ed92f9019d32c032e1c2f3c1d5f2d562e3b2fd41ddf2db02e5f2f4f209c2e382fc42f1d222c2f962f03300124672fde2f23302224bf2f133036301125bb2f023017305124bb2f0230173051240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000262c773052310526262c773052310526782e6632f2330a2a2630c533c434362b242ffe3280348729862d4831be324126ad2c6c30a8311a240d2c812f20319722ca2be82e6a30d721522c542e4a30d320bf34d634b13426a5843587351835c0a8e52d2e2f3d30040e542dce2eec2f6c1cf82d012f03303c1f912e5b2f0c30a921322fd72f2b309323b92f1c304d30cf24073046307830872547308030a430b02654307e3097307d2654307e3097307d2600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005229382f603036235229382f60303623a22d0e32ba332e28a32ea9322b34ec28252eae3122332b28712c7830ed312c253d2cab2f1831fa23222cb62e8030ba221f2c592e2830ea21502c4a2e0830d1203b2d172f5030011d942d352f2f30b28de92d462f33308b17092e4b2f2630011d392e432f17302b20e82ec72f433082218c2f29307030f22319305d309930a0255c309c30cd301827a930db30f6303d28cf30e030fb305f28cf30e030fb305f2800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001923682c482d221b1923682c482d221b512c1832d9333324a32c7030b7318324162c1f301831b223bb2a912fe6307a21e02a1d2fa83047204f2b502d9f2fb21faf29842c512e421d6b28822b0a2d0d1ba628182b972c7318162c0b2d4b2ec81aee2c362e6e2fb81cea2d842f58306a1ed92e1730953006215c2f213083305722b62f383084304e243c307b30bb3014268c30c830fc30fb27da30ff302131e128fb3017313931d928fb3017313931d9280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e92458292f2bc71ce92458292f2bc71c48259429342b291f6c28852ce62d4e20a328d32c432e83202428122c402dbc1e5528342bd42cd61ca428282bd52c2f1dbd28392bbd2ce61dd928182ba12ca71e87287c2a4a2c361ea9273429252b031d24260128c7294f149f25ea27772975127d2dad2d022ef41d322f912fe52f3322fb2f28305a30b6246f309230c330a626b430e430143121280e31243144311529193130314f312029193130314f31202900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e92458292f2bc71c48259429342b291f6c28852ce62d4e20a328d32c432e83202428122c402dbc1e5528342bd42cd61ca428282bd52c2f1dbd28392bbd2ce61dd928182ba12ca71e87287c2a4a2c361ea9273429252b031d24260128c7294f149f25ea27772975127d2dad2d022ef41d322f912fe52f3322fb2f28305a30b6246f309230c330a626b430e430143121280e31243144311529193130314f3120290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b2aad312433811fe12e2736bc370926a72f8336183839262b2e8734be35e322c32db033f4349820692fdc33cf34181f902f913379343d1f252d473080303d1e4e2e19303d30a02060312b325032d521d02fb7301a31bc20842a4d2ce92cc81c0c2a872b492c701c672ad02b5f2c1b1d752b502c982c6c1e582cc12c052d7b1fc72c1c2d502d6c20d52c2c2d632d2a200a2d4b2d732dfc20052d3e2d512da520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b2aad312433811f5b2aad312433811fe12e2736bc370926a72f8336183839262b2e8734be35e322c32db033f4349820692fdc33cf34181f902f913379343d1f252d473080303d1e4e2e19303d30a02060312b325032d521d02fb7301a31bc20842a4d2ce92cc81c0c2a872b492c701c672ad02b5f2c1b1d752b502c982c6c1e582cc12c052d7b1fc72c1c2d502d6c20d52c2c2d632d2a200a2d4b2d732dfc20052d3e2d512da520052d3e2d512da5200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dd2aee311a334520dd2aee311a334520142fe6356f37572728304836f437d2278f2e9634d7351524532e5d33a2340c211d2d1432c8333e1ca72f7932ad33d00f0632b4331d34ffa0f632e8332e34aaa4e13325342534c7a4f630b131e03199971c2c6b2d6f2e821dcc2bf22cb62d381e442c192db62dce1e902c4b2dc52d39200a2d972dff2d4e21812de22d372e2522af2d172e722e59221d2e512e662ed422f22d3c2e5b2e0523f22d3c2e5b2e05230000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d92cea31f0329423d92cea31f0329423d331e6362938282b33322a376738012c6b300c3541367128b72e30337b340925332d7b31f8322421072d04315d32191eb9315c331e34939e1e348934b4349ea7a334e334ca342da9d7327a33c03395a4992c3c2e7d2f671c712caf2d8c2e851ef22cd62d822e42204b2d0f2e932e9321dd2d7b2ed92e4c23612ed62e1c2f9424972e0d2f562fbb24ea2e602f9f2fa025f82e482f712f7225f82e482f712f72250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad2ee33214347f26ad2ee33214347f2603358b383e39462f0e3583385b39a92fd0318c35b236f52a4f2f32336a346a26772da6312333cd22fe2c9030c9314221132d59305b31cc1e04349634cd34e5a58d35be357a350cad6b34a1347e3438a9f72cce2eb52ff81aed2c412e482f3b1f8c2d742e3a2f2221f72dba2e562f0a23b82e592fcf2f0925602fca2f14307926af2f12303e30be26073048305b302d2810303b305130572810303b30513057280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000be2d853287339725be2d853287339725ea330438bb389e2d0d34e437be38032e023114353536792a952e8a321e349e26f72c2331bf323324852c8e301632a4230a2c05301a319322082d12304331422258358f3567358aadf5340335af3475adb12df12e0c30b91c532dab2ead2fed20092e122fe92fbe22a02e7c2f0c30c1246d2f0f304730c1260f3050307b30572846308830ad30fa288730bd30d230ff29a030d030ea30462aa030d030ea30462a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000942ccc3107332823942ccc3107332823253222374e385c2cff31d4363138a42cd72f5d346835d1285b2d6f31ef326125582c9230f431a023062cc42f5331cd22112c182f8c305b22482cb42e14305421ab2ccf2e0330a91dde2c842ec82f091ccf2c4e2e732f721edb2d0f2ff02f0c217c2e6e2f2230a7232c2f053057306025e02f4f308830aa275b309a30ca305a29a230de300431942a053130314a31202c1a3147315731462c1a3147315731462c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e128a82fbc30621ee128a82fbc30621e98307836f4372125b630ef356d375e27ae2dae3104339f246a2c1f301531ee20d92b41307a31c31d442be52d832f681ccc29b22c1b2ec51b2d29112c232d211cf429282cf92c211d532c362d3b2ee61e072d6d2e862f5520f72d9a2f5530e721cd2e0f3082303b246e2f2d307e300b260c306930a63053288830c430f630002ade3017313d31d82b3d3167318431cf2c6f318c319d31122d6f318c319d31122d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001126ff2b172d631a1126ff2b172d631a7427ef2c052ef81feb287e2dee2e1e1ec928602dc72e6d1c8228a42cdc2d9e1a8328072c402d7819b628852bfe2c501ae3287d2bca2c851c3829782bad2cd41e5e29472b812c8a208929232b5e2c63211629592ac62b4d1fd628c729f82a191bc92d162e762e91238c2ff42f20309f26403065309130ae28c830e9301031542a1c31453170311e2c8231a531d131232d6f319f31b231552d6f319f31b231552d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001126ff2b172d631a7427ef2c052ef81feb287e2dee2e1e1ec928602dc72e6d1c8228a42cdc2d9e1a8328072c402d7819b628852bfe2c501ae3287d2bca2c851c3829782bad2cd41e5e29472b812c8a208929232b5e2c63211629592ac62b4d1fd628c729f82a191bc92d162e762e91238c2ff42f20309f26403065309130ae28c830e9301031542a1c31453170311e2c8231a531d131232d6f319f31b231552d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000822ac331f832449f562ec7354f37429d053016376c38e621ba2ee235723714207c2e12342935611d8830c134e535c8197432423541369792343249348734eb9b8b32f4330f346ea138332d344d34d5a37330a2311b32d116b02a932c302d7b1c5829ef2ae72b9b1c682abd2b3e2cee1d7c2b4e2c8e2c671f5e2cc42cfa2c0b20ce2c1e2d482d0f21e22c352d622dd420342d642d762dcf212a2d612d772dc12200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000822ac331f832449f822ac331f832449f562ec7354f37429d053016376c38e621ba2ee235723714207c2e12342935611d8830c134e535c8197432423541369792343249348734eb9b8b32f4330f346ea138332d344d34d5a37330a2311b32d116b02a932c302d7b1c5829ef2ae72b9b1c682abd2b3e2cee1d7c2b4e2c8e2c671f5e2cc42cfa2c0b20ce2c1e2d482d0f21e22c352d622dd420342d642d762dcf212a2d612d772dc1222a2d612d772dc1220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000712bbb31f532699e712bbb31f532699e9c2eb6352037a49c6830ed366138e8211430583603386c20ad2dad33d93458149d2dc7324e34739ad630ed339c342ba4af325d34a83496a839334a347834e0a9423315340a345faa8c307a31ae3117a2582cb82db22e441daf2be62caa2d1c1f362c082d8e2d6f209d2c542dbc2d27212e2dab2d082ec821a82d022e492e0a23d72d3d2e8d2e44233b2e8a2eb92eac24302ea02ec52e3b25302ea02ec52e3b2500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ed28862900000000ed2886290000d3300d368137289ab432ef37e638c625f13113375a385c24552e8a33b234461b342dc8313b33f893dd2c0a314532a89c8c316d332d3428a8d533a634f0345fabe53349345c342dab483036318731a5a08a2ce12ddf2e811d862cb22d722e2f20ed2ccb2d5b2e80215a2d182e8f2ea922fa2d942eeb2ed123952e072f432f2625ed2e622f9d2fdc25602fcf2ffc2f69276e2f9f2fb52f17286e2f9f2fb52f17280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000371f772a712b8785371f772a712b87858d341738e53811a0ef354439423ac32b023586385d39e929c22f0c34ea34b320da2de8314533db1cc92cb130d331b81ae82c6b307031038d3a30f331f53296a099327c33b13300aa4b2ef52f6830d294292cae2da72e2b1f4f2d7b2e602f9721932d772e2b2fef220f2ed42e5e2f5a24f32e902ff52fa825bf2f16303e308a2723305e3081304a2866309c30b930af2974309330a8302e2a74309330a8302e2a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005518912a432bc4825518912a432bc482003343376b38eaa0a63494388d39ad2a0434c037b6383b28da2f92339b34c220912e103274338124922d3b317b3211250b2d9830d0314424432c9f2fad304d21bc2c4c2f6a303b18bd2cb42ee92fdd1b7c2c3b2e6a2f7020892dc72ebe2f2e22fd2deb2eb22f7d24b82e8a2f0c30e625db2f45307a3012286830b030d9306929cd300d313031832a2d3152316c31412c30314d316231ad2c30314d316231ad2c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009623d02d862ef6989623d02d862ef6987d31c43624384e9ed032123800395329d831a33610388626bb2d4d32ae334d215d2d8131d432b423172dd6300232a2238f2c0230f430f7215f2cfb2e463053206e2cb32e0230f01dac2c6e2ea42f421ef52c772e622f9620cb2df82ec12fd6228e2e8f2f2030ea246e2f24306d30fe262e308730bf302229bc30043130312d2b58318f31b331a62ce2310a322c320d2eed3115322d327a2eed3115322d327a2e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b829832a00000000b829832a000005300f367037b29f8132c0380b3a269cc93024368b37b81e912b0430ce30cc91232a1e2e952f438a2e2a522dc32e8615e929012d5e2ea919632ae22c102ebe1b1c2b072d472e381d7c2ca02d9f2eba1f3f2de52ee22f3121182eb72f5730ce22cd2e08306c305125982f41308e300f286230ba30f630152a0c31463177314f2cc031ee311232d42d54326f3290326c2f9032a332c3320e309032a332c3320e3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000827bc2cc62d829a0827bc2cc62d829a1a28db2d0b2fce969f28a02de62e7d9687281e2d5c2eea987428772c8e2df89992280e2c1a2dd591a7289a2be02c2814f328812bb92c5e1953297e2b952ced1cd429a72b932c8e205b2afd2ba62c6322d22afd2b8f2c1223052c702cd32ccc227d2ed02e3a2f5026ea2f2d3054309c288c30b330dc30752a3f31623182318f2ce931093227322d2eaf328a32bc32d62f9e32c232da3240309e32c232da324030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000827bc2cc62d829a1a28db2d0b2fce969f28a02de62e7d9687281e2d5c2eea987428772c8e2df89992280e2c1a2dd591a7289a2be02c2814f328812bb92c5e1953297e2b952ced1cd429a72b932c8e205b2afd2ba62c6322d22afd2b8f2c1223052c702cd32ccc227d2ed02e3a2f5026ea2f2d3054309c288c30b330dc30752a3f31623182318f2ce931093227322d2eaf328a32bc32d62f9e32c232da32403000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055271530f23060a26b2c2e343f35aea72f2ee5356d37b0a89b2d9f34c235d0a59d2d9c33c9348ea13c30c334ac35dd9c8632ee35f5363fa2d1325535ee3506a81433c534193536aa3132bf330b34a5a8722e5f30d7302c9e8d29312cf62cca179728542a172b261a3b2a692bf72bf81c772b362c792ce81e512cae2ce82c4520ce2c112d362dac21f42c3d2d5f2d3721362d722d9c2d2722452d892d932de5220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055271530f23060a255271530f23060a26b2c2e343f35aea72f2ee5356d37b0a89b2d9f34c235d0a59d2d9c33c9348ea13c30c334ac35dd9c8632ee35f5363fa2d1325535ee3506a81433c534193536aa3132bf330b34a5a8722e5f30d7302c9e8d29312cf62cca179728542a172b261a3b2a692bf72bf81c772b362c792ce81e512cae2ce82c4520ce2c112d362dac21f42c3d2d5f2d3721362d722d9c2d2722452d892d932de522452d892d932de522000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000329e629000000000329e6290000422cca33f534ffa6ff2ef4356c37a3a9e52dc434f9350ea7fc2cf9324c349da08f2cdd316533b19e182f9e32dc3378a3d6310934583460a8c43242348c345faaa131b532d832f0a83c2d382f0930039de02ae02cb62d2b1c8e2bc72c622dfe1e242ceb2c5d2d1920aa2c422dad2d3521422db02d0d2edf21c42d0f2e5b2ee923012e612ea02eda23562ea42e182f2825812ecb2ee92eb525812ecb2ee92eb52500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad24a92600000000ad24a92600008a2e3b342f35cba93f31ac360f38a5ac47305535823687a9b32da23209345da2972b583076313da07f2bda2ff2306da0c72c43302931a09f0b305d324833efa1252e7e300031199dc22b8d2d522eee16e32b252dbc2dc81c4f2c622df62d6d1fee2cb52d3d2e8121812d1c2e8d2eda222c2eb62e0e2f3c24db2e3f2f862fcc25562fd52f04303426dd2f18302830e727fa2f14301e308528fa2f14301e3085280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088268927000000008826892700001432c335cf36f7aded3495385839adb0663246367237f4acfe2ee432293493a42f2c8d309831359ff02bef2fe9304e9cbd2c0330dc304213352dc830b731a41fdb2c8e2f64305618dc2bf22cdb2d8519c92cf12daf2e951c062d1f2efe2e5420972d722e2e2ff5224e2e002f832fba24462fc92f1f30eb251e3048307b3023287b30b230d530ca28d530f53007313f2afd3021313431672bfd3021313431672b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ea259d2700000000ea259d270000ae301135183697ac6233d837ad383eaf57319135b03622ac192f4a335e346f952b2f47334b3434273e2ffd3223341a28ae2eb73115336f252a2d1e302831c720422c862ebc2f9e1c4b2ce92dde2e341d9e2c092e2b2ff41f332d582e512f79210a2ee22e982f8724142fc62f223070263f308c30bf304528de301c314931232a7b319d31bf319b2b1b3202321a32042d253236324932ef2d253236324932ef2d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002529762f7e308ea42529762f7e308ea4e02fdb34e4353aabfa31b2361a387badac2fe6342c3692a9552db831fe32a2a2f42dc631f1325219a42d373151329421fb2c0930da304f1f232c862e1030eb1b322c122e3c2f041c612c012e092f4f1d132d732e5b2f5f20ce2df52ea92f7c229c2e9b2f1930f524c22f433082308c279630d5300331a2297431a131c2314e2c56327d329632b62df13217333433cf2f353349336f336630353349336f3366300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a727172d262ea7a2a727172d262ea7a2572cfc311c3354a867304f36bb371cac042e14342a3514a8c32a322f9c305da26c292e2d592e539ced29f82c292e4b95e529cb2c092e4415572af12c0f2e42194c2b6c2da02e6c1c772c322e2b2f201f3b2dfe2ee32fd620f62d642f1f304722c62ed32f3f304c2503305630a4306b28f43025317631df2aea310b325032552d02331e3348338c2fdf33f03303343e313034363443340c323034363443340c320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ed25422c1e2d96a0ed25422c1e2d96a04d27272d392ee1a13827d22cf22d95a1b526d52bf52c15a12827ec2a6d2c2ba01328222b782c129d65280b2b7a2ce3990e29662b992cce95c329c12bae2c5b935b2a032cc02caa1cbe2a162cb42cd820852b3f2cc12cd6221c2d762dd42d7c24ef2e402fa22fc0262c305d307430dc2808312e314531242b123227324432aa2d3033463361330b3015341f342d34b331493450345c349932493450345c34993200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ed25422c1e2d96a04d27272d392ee1a13827d22cf22d95a1b526d52bf52c15a12827ec2a6d2c2ba01328222b782c129d65280b2b7a2ce3990e29662b992cce95c329c12bae2c5b935b2a032cc02caa1cbe2a162cb42cd820852b3f2cc12cd6221c2d762dd42d7c24ef2e402fa22fc0262c305d307430dc2808312e314531242b123227324432aa2d3033463361330b3015341f342d34b331493450345c349932000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf25312d5b2e71a2ac27702e1f3060a40e2a26318732b7a60c2afc308732bda52127512fe53010a12e260c2c4b2d539902280b2da92e59987f2c412ed72ee3a3792eec2f5d30bea7f22d232fdb2f68a56d2bcc2c8f2dfa9cb729f92b962c4b133c29e32ad42b591a2f2a442bed2bee1c2f2b0f2c542c1b1f3a2c922cce2c7320c32cfe2c262dec21fa2c2b2d492dec20572d932dc92d54234c2d912d932dea2100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf25312d5b2e71a2cf25312d5b2e71a2ac27702e1f3060a40e2a26318732b7a60c2afc308732bda52127512fe53010a12e260c2c4b2d539902280b2da92e59987f2c412ed72ee3a3792eec2f5d30bea7f22d232fdb2f68a56d2bcc2c8f2dfa9cb729f92b962c4b133c29e32ad42b591a2f2a442bed2bee1c2f2b0f2c542c1b1f3a2c922cce2c7320c32cfe2c262dec21fa2c2b2d492dec20572d932dc92d54234c2d912d932dea214c2d912d932dea210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f728402e832f1ba5f728402e832f1ba52e2a8d30a2318ba7d12bf1316b33f5a8482b103171329ca7ac20ef29292c9f9453206626fd283502b821dc27a42961881726e428c7299c963629742b612cd19d9a2be82c642d7da0de2ae72ca32d999c912a702c242dde15272b6a2c132dcb1cfb2ba72c182ddf1e9e2c222d822ddc20322d9d2def2dcd21bf2d0e2e532e8423252e712eac2e0524aa2eee2e0f2fff24ca2efd2e0e2fe024ca2efd2e0e2fe02400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d2a542f5c30cea60d2a542f5c30cea6812c4731523225aa5f2d8832e13395ab942c493177324ca9df207b28072a329477201b258b27488260229c264728110cc624942768287b1150275129322a9a8d4d297c2b2e2c7197e72a852c052d2b96652bb22c472d3f182d2c032dab2d991dc62c702de02db9207f2d0d2e682e23223b2eae2e062fc023032f5f2fb12f7b25a92f093024307a2624304e305f302a2855308730a530372855308730a53037280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000962a212f1430fda6962a212f1430fda6dc2dfd3108330bac112f5033513445ad0a2d5031643250aae8223a282329d596b8218a256927eb82c8231927622878108e24dc27cc285c14fc2670298e2acc158829982b722ca509302b972c2d2d8111212c3a2dfd2dcc19d02ccf2da72e101f7c2d3b2ed72ec6215d2efd2e6e2f2a24882fff2f3130a5254f307b30ac300e28d230033124312729413163317a31ca2a9131b031c0315f2b9131b031c0315f2b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bd294a2e5b2f16a6bd294a2e5b2f16a6192d2e31103232ab6f2e25334b3498ac0a2d9b31e432dfaa2728f62c152eb1a215233128c0299d834524a6270c297f18bf2559282b2938183b28102a172bdc14142a712c2a2da7108e2bf72c9e2d5718252c492d2e2e7f1cec2ceb2db42e3d20f42dab2e4b2f68232e2fcf2f203063257330b430e230cf2743316f31a531f52943323f3253323f2ccb32de32f232b12d2f3354336933972e2f3354336933972e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063265e2deb2ee1a263265e2deb2ee1a27029572ecd2fe5a6382b1e30b830b1a8512e69345235f5a7612aee2f7d30f4a526289d2cc12d4da01c278d2bbe2cce967f28962bcf2cbd9195294b2cb52d4690a22adf2c092ec50a952b312d412ec716942ccb2db42ef71c942d802e432fcf20a32e722f0730d6230730543092300a26f23022315231f82825323e326d32442c74338e33af33b82e36344e345c3499308b349834a2349d318b349834a2349d310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ce248a2ca82d67a1ce248a2ca82d67a19c28712dc52ec6a54229232f7230d6a66229c32e693091a6c829062f7630efa42c28652d162f869ec2287f2ca42db59c4829862c8a2d6a97172a122d362ea990ef2ab42df72e3116282c292e372ff51bcc2c502e2b2fd11d962db92e632f2b21af2e612ff62f5f243e308430c430712753319031e231082acf32fb322033602d3c34473457347e30fd340f351a35cd326b3573357a3542346b3573357a3542340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dd254a2b5c2cc0a1dd254a2b5c2cc0a167261d2ced2ccba26925952bc02cbda1aa24e029a92b81a07b247d28b42965a0ad250629692a9c9e2c279329f72a769c7028312a932b159b5229e22a202cc699e5293e2b3f2cc516782a6a2bfc2bfc1d1b2c6a2ce72cd920862dd02d472edf22022f582fc62f082554308430ae30df2775319731c431872a0e332d334e33e92d72347a348834ee3045354c355435b233c435ca35d135f234c435ca35d135f23400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dd254a2b5c2cc0a167261d2ced2ccba26925952bc02cbda1aa24e029a92b81a07b247d28b42965a0ad250629692a9c9e2c279329f72a769c7028312a932b159b5229e22a202cc699e5293e2b3f2cc516782a6a2bfc2bfc1d1b2c6a2ce72cd920862dd02d472edf22022f582fc62f082554308430ae30df2775319731c431872a0e332d334e33e92d72347a348834ee3045354c355435b233c435ca35d135f234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b423402bb02ca4a04c252a2c532dcda294275c2def2eeda494276f2e353090a41b26e32c902efda12925442a232c809e0c24882a8e2c969ab825fd29d02b1d9eed274b29e02af89fbc28322a172b319e1329722a702b0c9c96294c2b232cfe94df293e2bf42bbf168d2a4f2ba12b1b1b5b2be62b122c661d202c682c8b2c951e972cd32ce32c8a20062d182d2f2df8204a2d7d2d0b2e3b21602d832dcc2da92100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b423402bb02ca4a0b423402bb02ca4a04c252a2c532dcda294275c2def2eeda494276f2e353090a41b26e32c902efda12925442a232c809e0c24882a8e2c969ab825fd29d02b1d9eed274b29e02af89fbc28322a172b319e1329722a702b0c9c96294c2b232cfe94df293e2bf42bbf168d2a4f2ba12b1b1b5b2be62b122c661d202c682c8b2c951e972cd32ce32c8a20062d182d2f2df8204a2d7d2d0b2e3b21602d832dcc2da921602d832dcc2da92100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006124ba2cfa2d46a16124ba2cfa2d46a19c28162e9d2f82a6bf28b52e5530c7a60e29192f80304ca709244d2bc42c259f73232129d22a759c3c24fb28d62acf99a2250b295a2abb9bc427052a012bd29d2129872a472bb69e7d294b2b0c2cba9c192a6c2b162c7295422b1a2c702ca114e82b5d2cb32c911b8b2ce82c1e2d161e0c2d782da22d5920a72d022e272ef3214d2e872ea62e09233e2f182f422fda20052f2c2f512f6423052f2c2f512f64230000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f826a52ddf2e6ba4f826a52ddf2e6ba46029ea2e59300da8e129742fba3093a85d29a72e143037a88124ba2a2e2cfa9f0d215027a2281c986223ac2704295c96c524ac27ab28649669271529172ae9993729ac2ad72b529aff29ae2b572c459bcc2a082c6a2c5694202ca82cf32c5f178f2c0b2d442d871d6b2dbe2d042e52202e2e8e2ee22e8222192f792fb92f3024f92f26303a307825573070308630ad259630aa30fa304a269630aa30fa304a260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000072252b260000000072252b2600000a29492e1a305ba7832aaa2fc43053a9bf297a2ecd2fb2a83825f02a132c09a10c2405293d2a959c46241b28ff28ba954825f727d82862943b273f29562a149537299b2ac52bfd95312aad2b532ce793232b352cac2c8e14a22c502db12d801a582dd72d262e7b1e662eb42edf2e8321982f063034303d248230ad30cc302f263931523166314028ce31f3310632e928253248325d326429253248325d326429000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006a269327000000006a269327000069287e2d302f82a6d829c62e4330bba8f3295d2ec92ff5a8d326092cec2c2aa4ff24a329442b699f7625f828292a729ab22593286a29b9941628d729b72abc956329082b2f2cdf92a52a212ca62cc98aaf2b8d2c042ddd16dc2c992d092e451df42d5d2ea42ec0205a2fbf2ff72fbe23ba30cd30ec3094259631c031da318c28c332cf32e3323a2bb933df33ec33602c253436344434392d253436344434392d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815ab264328608d0815ab264328608dd525282c682d12a4e327072d642e12a66f28222eec2f1ea684262d2c7d2d2fa4f925e32a792c56a0cb25c4293f2b289cdf268029b42a2a986928c52a102c5297132a112c842cd099f92a8c2c4d2d1f8b842c372da82d9c0cbd2dfe2d6b2e5317b92e332f9c2fef202a306c309c30632441316d318c318b27bc32d732fa328e2a3b343b344834bd2d033509350c350930813589358f352331813589358f35233100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003024c1299a2b94a03024c1299a2b94a0b925772ba22ce6a36b272d2c252d6ba52f26592b812c05a448263f2b842cc4a3f126862bbe2c41a2a328022cdf2c70a29e284b2c342d389f7529a42c7b2d719ebb2a9c2c1d2d5e9d202cdb2c402dd89ada2c012d6a2d9299782dea2d482e8a1cc32e0b2f602f41227630aa30d030d625c031e3310d32ae28b133c633db335b2cf734fb340735283034363c363936e132e236ec36eb36ea34e236ec36eb36ea34000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082225929822a6d9f82225929822a6d9fa1240d2a692ba6a1f824262ac62b11a29d242029b82a8fa160232d284f29d29f6824a5276828019c3b252227b127ad900a26a4274928b50f3528c32842294b883829062a852aa912a02a862b182c7f19392c992ce92c1f1d802ddb2d312e0920fd2e712fc12fea229330b530dd30b125033207322832e428003405341034a82c3d3542355235cf30b936c236bc3644348d3793378b37e5368d3793378b37e5360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082225929822a6d9fa1240d2a692ba6a1f824262ac62b11a29d242029b82a8fa160232d284f29d29f6824a5276828019c3b252227b127ad900a26a4274928b50f3528c32842294b883829062a852aa912a02a862b182c7f19392c992ce92c1f1d802ddb2d312e0920fd2e712fc12fea229330b530dd30b125033207322832e428003405341034a82c3d3542355235cf30b936c236bc3644348d3793378b37e536000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0242629142bd1a22224ef29832b09a29e24142a4e2be3a233244e2a892b54a25524ed29972bfaa12724fe299b2bcda03f254e2a122c3aa0c522302a922c739bed25be29082bf49d0b27cb29ee2a819dcc273129f729b69b9b2822292e2a2c9a5d29d4293a2a809a0e2a752a992a919afc2a352b522be798d62b232c3d2c80986b2c9c2cb02ca3950a2d172d172d260d5d2d722d802dd916502d6e2d682d6d8d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0242629142bd1a2f0242629142bd1a22224ef29832b09a29e24142a4e2be3a233244e2a892b54a25524ed29972bfaa12724fe299b2bcda03f254e2a122c3aa0c522302a922c739bed25be29082bf49d0b27cb29ee2a819dcc273129f729b69b9b2822292e2a2c9a5d29d4293a2a809a0e2a752a992a919afc2a352b522be798d62b232c3d2c80986b2c9c2cb02ca3950a2d172d172d260d5d2d722d802dd916502d6e2d682d6d8d502d6e2d682d6d8d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051f312301256c98051f312301256c98ad23a829282b7aa109263c2c192dcaa4b524f02a492c6ca2ed1e8f2399242598d61fa9273e29b09aff214c279f282c9b9a221b2472241b98e6243a282729f99bf727a6299b2af99de8274529f6292a9c1d218a2143228193b6292d2a842a339a9c2b2a2c5f2c499b5c2c972cd02c1e9af12c2e2d552d6a98b72de42d0e2e60945e2e822ea42e808ee22e152f372f4515d92e1f2f3a2ffe0ed92e1f2f3a2ffe0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fb197a2244248a93fb197a2244248a932325102b7d2cd3a35e27ea2cfc2d60a6cb249929c02a9ca3bd132a1d5e1f4b8ace19171d0c2013881621a22617284d97bc1f7d21a5215294b1255b280a29b89a9728d829892a6c9d74288829222a1f9cc6203821e7216592b12a8e2b0a2c689a8f2c1a2d5b2d909bb22d8c2dad2de79e252e692e9b2e7e99202f4f2f7a2f460ff62f143024301519743088308f30af197e309330a030e2167e309330a030e21600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c1e311ed02030965c1e311ed0203096df25702b982c9da4a826472c232dd0a5cc22d926112857a1181e44217822e09714228028d1299b9c20238a276e28b49a6821572260220095f42503287d28c098c528172ae12a1c9ccf28112ac02a0f9b4a21f4218f226a92892b192c512c369b3e2da02de32d599c432e852ea42e319b722fb02f0630b49584309830b2309c904d315b316731c41a093217322332641d16322f323c32c51b16322f323c32c51b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000461f04205722d996461f04205722d9965425b62a212c30a40a27452cec2c17a686257b2aae2b14a4b320f42216245399042432284229999e14245d281a295c9cbe214123812351956e26f028a829b8982029a62a982b169c4d29912a332b6d9a4f20c2201c21ad90602ca72ce02c309c672e092e392e4aa05d2f802fa42f949a9a30a730c330df99a031c731e5314f18e232ee32fc32261e22342b343634cd2136343f346734d62036343f346734d620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017279629402baaa417279629402baaa4b025052b772ca6a46825fb2a772c56a4a225c62a332c9ba43825f929c72bb4a3f8246029682ae0a0c725e428ac29ea9ebf262029e1290f9d3328ed29ce2a6c9c4329c82afb2b899cec2a022c752c689ee22c6d2cae2cb3a24a2d7e2dc52dbd9d4c2e862ebc2ea09907302b3045302b9627314c3175314311ce32e4324133141e77347d348e342121973599359f351126c335c935cc354026c335c935cc35402600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a20aa23182535995a20aa23182535996e2279289b2970a020237f286929b0a0951f0d232e243a9a31236027bc2846a0ec24952885291fa08b258f286929ec9dd726fc28c529b19c6c281d2a222bf09c7d29a42a742b6e9db02a7d2b0d2c7b9c222c4a2c952c8a9d452d8a2dd82d5f9cb22ef02e302fb09b5f308130a130b296d231e83139327518e533ff33123489205c3568357235d0251b3720372937072b623772376d37102d623772376d37102d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021247828c82980a121247828c82980a11524dc28d929a2a13624d528e429cfa10d243d28b829a8a14824262864295da10f261e28c628f2a1c5251828b1285a9ef62659284e29389d18291229c72925a09729012a7b2a2c9de72a562be02ba09c242c572ca02ced9b5b2d912de22d279ac32ef82e442f51986b3081309f308390fb31133231329418183424343234b320be35c135d435f626e037db37de37e82d2c3824381d38c2352c3824381d38c2350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021247828c82980a11524dc28d929a2a13624d528e429cfa10d243d28b829a8a14824262864295da10f261e28c628f2a1c5251828b1285a9ef62659284e29389d18291229c72925a09729012a7b2a2c9de72a562be02ba09c242c572ca02ced9b5b2d912de22d279ac32ef82e442f51986b3081309f308390fb31133231329418183424343234b320be35c135d435f626e037db37de37e82d2c3824381d38c23500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0242629142bd1a22224ef29832b09a29e24142a4e2be3a233244e2a892b54a25524ed29972bfaa12724fe299b2bcda03f254e2a122c3aa0c522302a922c739bed25be29082bf49d0b27cb29ee2a819dcc273129f729b69b9b2822292e2a2c9a5d29d4293a2a809a0e2a752a992a919afc2a352b522be798d62b232c3d2c80986b2c9c2cb02ca3950a2d172d172d260d5d2d722d802dd916502d6e2d682d6d8d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051f312301256c98ad23a829282b7aa109263c2c192dcaa4b524f02a492c6ca2ed1e8f2399242598d61fa9273e29b09aff214c279f282c9b9a221b2472241b98e6243a282729f99bf727a6299b2af99de8274529f6292a9c1d218a2143228193b6292d2a842a339a9c2b2a2c5f2c499b5c2c972cd02c1e9af12c2e2d552d6a98b72de42d0e2e60945e2e822ea42e808ee22e152f372f4515d92e1f2f3a2ffe0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fb197a2244248a932325102b7d2cd3a35e27ea2cfc2d60a6cb249929c02a9ca3bd132a1d5e1f4b8ace19171d0c2013881621a22617284d97bc1f7d21a5215294b1255b280a29b89a9728d829892a6c9d74288829222a1f9cc6203821e7216592b12a8e2b0a2c689a8f2c1a2d5b2d909bb22d8c2dad2de79e252e692e9b2e7e99202f4f2f7a2f460ff62f143024301519743088308f30af197e309330a030e2160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c1e311ed0203096df25702b982c9da4a826472c232dd0a5cc22d926112857a1181e44217822e09714228028d1299b9c20238a276e28b49a6821572260220095f42503287d28c098c528172ae12a1c9ccf28112ac02a0f9b4a21f4218f226a92892b192c512c369b3e2da02de32d599c432e852ea42e319b722fb02f0630b49584309830b2309c904d315b316731c41a093217322332641d16322f323c32c51b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000461f04205722d9965425b62a212c30a40a27452cec2c17a686257b2aae2b14a4b320f42216245399042432284229999e14245d281a295c9cbe214123812351956e26f028a829b8982029a62a982b169c4d29912a332b6d9a4f20c2201c21ad90602ca72ce02c309c672e092e392e4aa05d2f802fa42f949a9a30a730c330df99a031c731e5314f18e232ee32fc32261e22342b343634cd2136343f346734d62000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017279629402baaa4b025052b772ca6a46825fb2a772c56a4a225c62a332c9ba43825f929c72bb4a3f8246029682ae0a0c725e428ac29ea9ebf262029e1290f9d3328ed29ce2a6c9c4329c82afb2b899cec2a022c752c689ee22c6d2cae2cb3a24a2d7e2dc52dbd9d4c2e862ebc2ea09907302b3045302b9627314c3175314311ce32e4324133141e77347d348e342121973599359f351126c335c935cc3540260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a20aa23182535996e2279289b2970a020237f286929b0a0951f0d232e243a9a31236027bc2846a0ec24952885291fa08b258f286929ec9dd726fc28c529b19c6c281d2a222bf09c7d29a42a742b6e9db02a7d2b0d2c7b9c222c4a2c952c8a9d452d8a2dd82d5f9cb22ef02e302fb09b5f308130a130b296d231e83139327518e533ff33123489205c3568357235d0251b3720372937072b623772376d37102d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021247828c82980a11524dc28d929a2a13624d528e429cfa10d243d28b829a8a14824262864295da10f261e28c628f2a1c5251828b1285a9ef62659284e29389d18291229c72925a09729012a7b2a2c9de72a562be02ba09c242c572ca02ced9b5b2d912de22d279ac32ef82e442f51986b3081309f308390fb31133231329418183424343234b320be35c135d435f626e037db37de37e82d2c3824381d38c2350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bf20d21cd41d8123f820a11ab31c0322b0235119391d19213d22e017931f9421631a8d133021c422ef880f104a268821e106301153284922db1cad1c10290223462199201528dd21a022de219e2511222c24b42208222621a324e223aa20dc20fa24b8245a22681f692531252324de1cf2252a257224b51826267b25e324021600269d255024350d5a2529259a23998d6a235d213c1eeb8db396019e0d9cc59b00000000000000000000000000000000271ca519311d35113f1cc61c3b1cd11ad21c4e1c191caa1dc71d111e7f1e391f271f5120151f5a21a41ff01e4b1e1d22cc19001b90910e227b9d759c629ce31f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d61e761e46203324821e6b1d40201024261edd1a801e9c224a1c6819c11e9f240811490df41e60249093228f471fbb22bf940292e422ec22000000007218000000000000b71900001120f41e06217220a12430233d1eb822c924ec236c1e78214f256724e91fea1fa12219223c1da71ca5269c259424631916278726d62528171128d0272e26de14df279b27c42524959525c124c5217e9ad38eed9c979a9c9f000000000000000000000000000000006e1c8011241d209816187a1b7017bb1e3e1b171c8e1cc6239018f018f51a00239d18291c87915e242d12a212c49cc4247198c09858a1f324cfa898a840a82e2400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000681440113015b618be1c811b991f7f22f71aec19301ef5228c0fd1102214161cfb122414511e1a231f0cf90d661fc224e0057987db1a882300000000a41700000000000098180000db1e7e201e20ad2001234e22be1eaa21241e0f1e711c0d1b5926eb25b9241e1e2029ff280d28a61b5e29f32839288614132a9e29d128208f332a002aee28f095e029bb29a428db9c2f284f272d255f9d9d19d899dd9023a2000000000000000000000000000000001d9a849f7a193fa7419f9d9ab59c9d9aef139d1a2d13821d6e1abc1d081f0320501a1021db93e01f511a821daa93b61f1d29152934280b2239a854a877a6639d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000da153514c617f219ca1ced1cd120be22cb18ab19391ef021e0080b0b7912ae162f140a16631d9923c1144917791e5c254f124413581a1e240000e801f90f7e0b0000e20e14146d13562163211c20cf21da24f423c920e121df1f711fc51d4c1beb2770274026d21c7a2a5f2a4b298c17712be52a082a3595452c022c2a2b37999c2c8f2cc92b6e9dbb2cb32cf32bdea11a2b982a29291fa1471d4612dd184ba50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d179515b218521c9a1d321de620fd23381a4a1c58204424c6188a1bf01faf2546176f185b1e71250618f7161f1dfa258217b2165c18c124cb111910c50f20191215a7163016c618802275220321062122269e257524ce21fd20ed200420241aef28db284928331e212c042c392b8f1bfd2cac2c462ceb8f092eb12d652d1d9af52e062f332e26a04c2f7c2f852e47a40d2edd2dd52c01a5b222601f072359a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f1c871d9420a423261e381f1c22d425081bd01d2f214a2551194f1c0e20f125ad181b1a431f6326d61b9719141dc026391db61c6b1c80261020aa1e3e1e6e25011e331d101c471f6825cd2430244d2393285528e8262324a9295e29b3287d223e2b572b672a4b1fb72c9c2c3b2c5e18712e292ec82dd6163030ef2fb02f5a9830312131c8302ca0c331dc314b31d3a4393128318730d8a78324ca233526f9ab000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000151dc91dc4205923de1acf1c2620a5237818cd19eb1ea021c4140818af1a58207317ca184a1dd023941a8c1a521dba25661da51c211c67253c1cb21b051b311f91230923ab21a1248626682631251d25e228b3281e28be23382a0d2a4329f022fd2bf22b062b8b20872d5b2d092d690f7a2f352fd12eda991731f530d4304192cc32d6328332c1a033345b34fb3335a7c434c4343e34f9ab4e2b052b0c2c5bb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f1ce21c0320fc22d91ae61cea1ff9237118cb199e1d332224160f18f41ae721c317d3175e1bfc21721cdb1c971d5321a120f420e42027200e2383239c23f41f6c25de255425751ebe271128a627651dfd285b29de28541d862a9a2a2b2af61c812c902c382c3e19f12df32dd12d8e980f30fa2fa02fd690a6318331583182929c337e334333f8a0d43404359e3437a862369436c53598ad41325b32ab3253b600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bf20d21cd41d8123f820a11ab31c0322b0235119391d19213d22e017931f9421631a8d133021c422ef880f104a268821e106301153284922db1cad1c10290223462199201528dd21a022de219e2511222c24b42208222621a324e223aa20dc20fa24b8245a22681f692531252324de1cf2252a257224b51826267b25e324021600269d255024350d5a2529259a23998d6a235d213c1eeb8db396019e0d9cc59b00000000000000000000000000000000271ca519311d35113f1cc61c3b1cd11ad21c4e1c191caa1dc71d111e7f1e391f271f5120151f5a21a41ff01e4b1e1d22cc19001b90910e227b9d759c629ce31f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bf20d21cd41d8123bf20d21cd41d8123f820a11ab31c0322b0235119391d19213d22e017931f9421631a8d133021c422ef880f104a268821e106301153284922db1cad1c10290223462199201528dd21a022de219e2511222c24b42208222621a324e223aa20dc20fa24b8245a22681f692531252324de1cf2252a257224b51826267b25e324021600269d255024350d5a2529259a23998d6a235d213c1eeb8db396019e0d9cc59bb396019e0d9cc59b271ca519311d3511271ca519311d35113f1cc61c3b1cd11ad21c4e1c191caa1dc71d111e7f1e391f271f5120151f5a21a41ff01e4b1e1d22cc19001b90910e227b9d759c629ce31f7b9d759c629ce31f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d61e761e46203324d61e761e46203324821e6b1d40201024261edd1a801e9c224a1c6819c11e9f240811490df41e60249093228f471fbb22bf940292e422ec22000000007218000000000000b71900001120f41e06217220a12430233d1eb822c924ec236c1e78214f256724e91fea1fa12219223c1da71ca5269c259424631916278726d62528171128d0272e26de14df279b27c42524959525c124c5217e9ad38eed9c979a9c9fd38eed9c979a9c9f6e1c8011241d20986e1c8011241d209816187a1b7017bb1e3e1b171c8e1cc6239018f018f51a00239d18291c87915e242d12a212c49cc4247198c09858a1f324cfa898a840a82e24cfa898a840a82e24000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000681440113015b618681440113015b618be1c811b991f7f22f71aec19301ef5228c0fd1102214161cfb122414511e1a231f0cf90d661fc224e0057987db1a882300000000a41700000000000098180000db1e7e201e20ad2001234e22be1eaa21241e0f1e711c0d1b5926eb25b9241e1e2029ff280d28a61b5e29f32839288614132a9e29d128208f332a002aee28f095e029bb29a428db9c2f284f272d255f9d9d19d899dd9023a29d19d899dd9023a21d9a849f7a193fa71d9a849f7a193fa7419f9d9ab59c9d9aef139d1a2d13821d6e1abc1d081f0320501a1021db93e01f511a821daa93b61f1d29152934280b2239a854a877a6639d39a854a877a6639d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000da153514c617f219da153514c617f219ca1ced1cd120be22cb18ab19391ef021e0080b0b7912ae162f140a16631d9923c1144917791e5c254f124413581a1e240000e801f90f7e0b0000e20e14146d13562163211c20cf21da24f423c920e121df1f711fc51d4c1beb2770274026d21c7a2a5f2a4b298c17712be52a082a3595452c022c2a2b37999c2c8f2cc92b6e9dbb2cb32cf32bdea11a2b982a29291fa1471d4612dd184ba5471d4612dd184ba500000000000000001d9a849f7a193fa7419f9d9ab59c9d9aef139d1a2d13821d6e1abc1d081f0320501a1021db93e01f511a821daa93b61f1d29152934280b2239a854a877a6639d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d179515b218521c0d179515b218521c9a1d321de620fd23381a4a1c58204424c6188a1bf01faf2546176f185b1e71250618f7161f1dfa258217b2165c18c124cb111910c50f20191215a7163016c618802275220321062122269e257524ce21fd20ed200420241aef28db284928331e212c042c392b8f1bfd2cac2c462ceb8f092eb12d652d1d9af52e062f332e26a04c2f7c2f852e47a40d2edd2dd52c01a5b222601f072359a8b222601f072359a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f1c871d9420a4239f1c871d9420a423261e381f1c22d425081bd01d2f214a2551194f1c0e20f125ad181b1a431f6326d61b9719141dc026391db61c6b1c80261020aa1e3e1e6e25011e331d101c471f6825cd2430244d2393285528e8262324a9295e29b3287d223e2b572b672a4b1fb72c9c2c3b2c5e18712e292ec82dd6163030ef2fb02f5a9830312131c8302ca0c331dc314b31d3a4393128318730d8a78324ca233526f9ab8324ca233526f9ab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000151dc91dc4205923151dc91dc4205923de1acf1c2620a5237818cd19eb1ea021c4140818af1a58207317ca184a1dd023941a8c1a521dba25661da51c211c67253c1cb21b051b311f91230923ab21a1248626682631251d25e228b3281e28be23382a0d2a4329f022fd2bf22b062b8b20872d5b2d092d690f7a2f352fd12eda991731f530d4304192cc32d6328332c1a033345b34fb3335a7c434c4343e34f9ab4e2b052b0c2c5bb04e2b052b0c2c5bb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f1ce21c0320fc221f1ce21c0320fc22d91ae61cea1ff9237118cb199e1d332224160f18f41ae721c317d3175e1bfc21721cdb1c971d5321a120f420e42027200e2383239c23f41f6c25de255425751ebe271128a627651dfd285b29de28541d862a9a2a2b2af61c812c902c382c3e19f12df32dd12d8e980f30fa2fa02fd690a6318331583182929c337e334333f8a0d43404359e3437a862369436c53598ad41325b32ab3253b641325b32ab3253b6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f1ce21c0320fc22d91ae61cea1ff9237118cb199e1d332224160f18f41ae721c317d3175e1bfc21721cdb1c971d5321a120f420e42027200e2383239c23f41f6c25de255425751ebe271128a627651dfd285b29de28541d862a9a2a2b2af61c812c902c382c3e19f12df32dd12d8e980f30fa2fa02fd690a6318331583182929c337e334333f8a0d43404359e3437a862369436c53598ad41325b32ab3253b60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b24ff1afe1c212182264f1c8b1e9b2308287c1cd11d35249026d518911fc02372205b09c8212524c9940790c6279520819185881c2ab8210119621aae2a831c7320f41e4929461aa622432216260e1d4824c923f022e21c182477230d1d241dec241d249220061aaf259c244323ca14ef2594245124e2947f26d524b5245b9917267e246024319bb8245223e422c99db721921f3a1e929fa48db49e2c991ea1000000000000000000000000000000005d1de519931d89144f210e20a522291f5c228520cc2295213920f71eae2017214e1f0e20931f4d23fb1ae11c101d3c227190bb902299fb2344a4f7a4e6a4b22500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b24ff1afe1c21213b24ff1afe1c212182264f1c8b1e9b2308287c1cd11d35249026d518911fc02372205b09c8212524c9940790c6279520819185881c2ab8210119621aae2a831c7320f41e4929461aa622432216260e1d4824c923f022e21c182477230d1d241dec241d249220061aaf259c244323ca14ef2594245124e2947f26d524b5245b9917267e246024319bb8245223e422c99db721921f3a1e929fa48db49e2c991ea1a48db49e2c991ea15d1de519931d89145d1de519931d89144f210e20a522291f5c228520cc2295213920f71eae2017214e1f0e20931f4d23fb1ae11c101d3c227190bb902299fb2344a4f7a4e6a4b22544a4f7a4e6a4b2250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f1c301c501e22214f1c301c501e22214220101d8d200524cf248d1c8b20bf24f7245f1ab1210826841cd58fbf212826e29b69999c227326e79b1698a728ad24ce92cc0df8284121c51d191c06281f230c22de20ac247e217e240b23b21c052237251924851514216224be215f8d641d970c589814a0a5167f25cc23eb22600c32286526f32531993228c9263726449df426d425602573a080248423da21b2a12d0fc59eab9a72a32d0fc59eab9a72a3f421991b8b22999bf421991b8b22999b3820191c4b21191c49202d1c52214322d51baa12f51c6b214f1203193c181923ae98a5920e9b6621c09bf098d99c2c221ea871a880a8eb201ea871a880a8eb20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f302430e7b112c13f302430e7b112c13751c6d1c90206e23111e5f1dd021b325b71de019a3206f24081a05164b215f259c94cf95331e1726e296ec938c1f9626a58845890d272824f31c0e1b4c294e24d4225722ea2694238e241624ff1a4f230424212322203e1f9e274326f424e91bd22856281a27648d7629c1283e28c89a4d2a6429db28c79d502a7f29102930a14e29c128602826a4bc26bc25a92426a5fc1660a0239a46a6fc1660a0239a46a693214d14082142a793214d14082142a79e9af79d3c1a79a4511df31adc1cf19a391a7e94c519bc9a2814c51ab71384143c149214e693db1a4d2864298528a994aea92baaaca94ba6aea92baaaca94ba60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bc099013fa0d0000bc099013fa0d0b1e721e312287241b1d761d9a22cb257a1ae41bef207b266518f418d52065262f8868107c1ea826aa884a0a6d1c3e26a70e5610431c3324291d281dc5226d248a22c02228243324f7242b245f206d227825ac245d22ea1ed3282628b8267a195d2ae829c4289c94d72bea2af629079d722cbd2b112b94a0822c272cce2b1ea42a2ccc2b6c2b07a7c4291b29702825a8c71b19a18d9297a9c71b19a18d9297a9000000000000000093214d14082142a79e9af79d3c1a79a4511df31adc1cf19a391a7e94c519bc9a2814c51ab71384143c149214e693db1a4d2864298528a994aea92baaaca94ba60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ce0ff01393155e17ce0ff01393155e17b71ce01d89219424631ccd1ccd216b25821b331cb62102277a18d518c4207c2724162f11dd1df02707183a11ca18b226601a7914c218dd2477203d1e08204e24ba24632427243e24de261a262f249a2144279326dd24111ec4293829ad28b71bf32b772b872a039afe2ca02c1d2c66a0232e912d2a2d34a4cb2e5a2e0c2ef7a6832e542ef52d47aae12c952c5c2c14acb720359d651d89adb720359d651d89ad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c174b1a891cc81e9c174b1a891cc81efa1c4d1fcd2118251e1c401e7f22c725e119841c1f21172732182719fb1e1627a919b618861cb026831c391c251cd625ac1f091fdc1eb6242b2261205020a122d625ed2499248522e4277f271226d72197293c297628f51f202baf2a092a6319c82c782c142c199c562edd2d802d0ba21930902f322f57a6ea30a8307f30fca9ee30f530b83031ad43301630d92fdaaf7e247215bf2310b17e247215bf2310b10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b61d691eb421e423b61d691eb421e423dd1c4f1eae218224e41b611c2d21232474197d1cd61f3a253e19261c981ed326fe1af91a751de826141d2e1c531c3a25e61f571e6e1fe3218f24e923a4229623cc267c2663253d23992873288c27df22522a9929f028fe20062c732bb62a761c712d222db72c2c9e422fef2e862e4da4ed30b1307b302ea842322032143200ac07332333da3294aff532df329332c7b28628b2232b28c8b48628b2232b28c8b40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e1a1f6e214c24381e1a1f6e214c24bb1b081d6f201f2438189f18c51d6b2243155514de198621451551148a198021ff1a8c1abf1c50226c20b31fe41f3f2281236d2295228521bd255c251125b71f2b281a280228fe1637295d291a297291192aa52a502a1e9a482c322cc32bc69cad2dac2d4d2df0a09a2fae2f392f7aa422311e31e3308aa8b832a0328532aeace433ed33b43371b03c342e34103448b4182c3929462b8eb6182c3929462b8eb600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e1a1f6e214c24bb1b081d6f201f2438189f18c51d6b2243155514de198621451551148a198021ff1a8c1abf1c50226c20b31fe41f3f2281236d2295228521bd255c251125b71f2b281a280228fe1637295d291a297291192aa52a502a1e9a482c322cc32bc69cad2dac2d4d2df0a09a2fae2f392f7aa422311e31e3308aa8b832a0328532aeace433ed33b43371b03c342e34103448b4182c3929462b8eb6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0279f1e97200b248729aa1ee620c924a328f01c8a1e43239d25a41a091ff421fd21b00aab23cb2233940e91a02843231e9f5a91b12a3e232218cf19f72acf192a21251e9828cc168c219b203c20e1197323e621f39fc819e0235121f29d7019cd244a23661dee117a2514246121d296ce2530244a23509a0426da24fc237b9c91254f249423d59e09243622c32133a09c20e71e091c8ba03d9aa09f51a0b7a2000000000000000000000000000000007e1c021b641d021b311f931e2b20901d1b20af1eaf20a81db41d441ca11d0a1d4e1dda1c8c1c9e1e2f1662108715201f0c9aab97fa9d5923caa475a5d2a5c9220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0279f1e97200b24e0279f1e97200b248729aa1ee620c924a328f01c8a1e43239d25a41a091ff421fd21b00aab23cb2233940e91a02843231e9f5a91b12a3e232218cf19f72acf192a21251e9828cc168c219b203c20e1197323e621f39fc819e0235121f29d7019cd244a23661dee117a2514246121d296ce2530244a23509a0426da24fc237b9c91254f249423d59e09243622c32133a09c20e71e091c8ba03d9aa09f51a0b7a23d9aa09f51a0b7a27e1c021b641d021b7e1c021b641d021b311f931e2b20901d1b20af1eaf20a81db41d441ca11d0a1d4e1dda1c8c1c9e1e2f1662108715201f0c9aab97fa9d5923caa475a5d2a5c922caa475a5d2a5c922000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cd238b1fc8219024cd238b1fc82190242327071f4f226725f929bd1da2210226af29791cc62125271424f609be21a826a4a14a9cc224a02716a3e99d082aa527749c0296c32b6c255214a318892944241322b91ec423992241249321c69d4a21ba24ee22c69b462005244d215b8dac1d2513a492a19a1c17392566235122ce95f22751265225699e7627ec25192537a0a825ae2434249da16d236a22c020dba25798b69eee9e41a55798b69eee9e41a5a421831f3d239720a421831f3d2397207b1d261c521ecf1d081fe01dc11f8d1feb1b1019881e981fd11812195c18a620dd9bc79dfc9c6e1ff59b0099cf9f4022e5a6c9a75fa8301fe5a6c9a75fa8301f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f200c20f2216e255f200c20f2216e2537201f20ef220926ed241b202524f727aa27101da1232b27832365171322f527de9e179c4d1ece27179f3e9b20246d28cb98390c2b2cee26f81d8e1cc62b9025ef21cc215d2674242d25ac23b3147722a0252b24f21f111f9927a525bb231b18a028f827ce25b59b53299c28ba2748a0eb293b294128d4a1af29ff28582837a44d287027a5269ca5472565241622aaa69d96559f629e71a89d96559f629e71a8c320f51a3820a494c320f51a3820a4943e949c9daa937d94281a74148519901d1b1a5114ac1c791a361a69149c939e1a1d948e9dae938e1d432764283626cd1a58a90aaad9a92ea258a90aaad9a92ea2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af1fb820b324a825af1fb820b324a8253820e5202824ae26451fe61ff123c0270b201b1dd3225527631dba16ec200e27d292d4945b1e41287f9aed96a41b7b27b39039126524ad26741c6a1e2a2c7d26a92423223e2a2c255926b324792001235b27b625f4225820d8289b27e725041ade2933291428229b4b2b5d2a4d292fa1fc2b272be02955a4de2b1a2b822ae2a68b2a172ae629f4a846280b28682605aa509805a0ba9e66ab509805a0ba9e66ab0000000000000000c320f51a3820a4943e949c9daa937d94281a74148519901d1b1a5114ac1c791a361a69149c939e1a1d948e9dae938e1d432764283626cd1a58a90aaad9a92ea20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ef1de11f30228424ef1de11f30228424b71f4721462424270e1f1a20c42307282c1dba1d9523702884174e14f3201e28430f7491cd1ce427e312fc8bb8142c27291b2615ad19fb25af20451e54226125512432235d270e24d426fd256925f42040282f2730256c1e9029da285f288514532ba22acd29769fa92c2e2c6d2b66a4602de12c5a2c7ba7b22d492df22c08aaf32cc72cad2c5fac042be72a192ab7ad5713a69ccb9cafae5713a69ccb9cafae0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fd1c4f20e522f024fd1c4f20e522f0240d1f902186248c26e71d652008245f27991b811d7122c32743148a11821ead275c14878b541ae126ee1aba162019f2251620d41ef11f9e2424234121712030244e256f24b12461222f27ae26f7251a1f2629b2281228181c822ae7297029750e382cdd2b1e2b05a08f2d142db12caaa5fb2e732ef02d24a9eb2f802f242f56ac4b2f282ff42eebae4a2d5a2df62cd4b008209c14091b94b108209c14091b94b10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b41d31202223b524b41d31202223b524cd1d601f8722d224411d2e2081238f261f1af41d2522f727d5145b15e21c6e27b8173c12a71a2c26a61cbd19151c47254e20661f621f2e24b723d822c921ad2126267b259624901d1928fc2798260a1cd5294f298e288a1c952be22a222a0d0fc32c612c082c85a24e2ee82d922d7fa70f30b32f342f7faadd30b3309b30a3adcb30d430b130c2b0a22f882f242f16b36c24cd1ee41e3bb46c24cd1ee41e3bb400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d1d501f4b211b245d1d501f4b211b24141c2b1d872031238518e918261d0f228e141b15111b582271122110f718b223ab191718dd1b892409205a1ea11e8323d222cb216e214521a42428247a23121f8026c22551252b1cad283028ed276798a92a332ada2992a0252ce12b422b2aa16e2d242dfc2c59a4bf2e702e1b2eb5a73f302230bf2fd9aa3b311631013138ae7a31713153314db156305530313023b4b9243a1f9722e6b4b9243a1f9722e6b4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d1d501f4b211b24141c2b1d872031238518e918261d0f228e141b15111b582271122110f718b223ab191718dd1b892409205a1ea11e8323d222cb216e214521a42428247a23121f8026c22551252b1cad283028ed276798a92a332ada2992a0252ce12b422b2aa16e2d242dfc2c59a4bf2e702e1b2eb5a73f302230bf2fd9aa3b311631013138ae7a31713153314db156305530313023b4b9243a1f9722e6b4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ca28281ebf20b122622bc71f7f21ed243128291c561e3e2216246716ac208a1d3824d98c5e249e24bda7dd99b228e122e9a9b8a0d22bf225daa5d3a02329d021b2a2de9f0f215d21589cf49c949716211b21491e86a5bd1da121121e3da4db147124a2211e16018cd924bc22a41f6898582569238b21459cb12528243922599e2225af23312216a0672380210521d5a089205c1d8f1a89a11d9d79a0e4a056a300000000000000000000000000000000281cdd1c431f5a1ca3214321b122fc1c00216e1d8720091adc1d72193c1e8a16db1c9a19d0189a19a010529740965217a29de99dcca0e91ddda551a608a701200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ca28281ebf20b122ca28281ebf20b122622bc71f7f21ed243128291c561e3e2216246716ac208a1d3824d98c5e249e24bda7dd99b228e122e9a9b8a0d22bf225daa5d3a02329d021b2a2de9f0f215d21589cf49c949716211b21491e86a5bd1da121121e3da4db147124a2211e16018cd924bc22a41f6898582569238b21459cb12528243922599e2225af23312216a0672380210521d5a089205c1d8f1a89a11d9d79a0e4a056a31d9d79a0e4a056a3281cdd1c431f5a1c281cdd1c431f5a1ca3214321b122fc1c00216e1d8720091adc1d72193c1e8a16db1c9a19d0189a19a010529740965217a29de99dcca0e91ddda551a608a70120dda551a608a70120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c82579218e243526c82579218e243526a62a242149246f272c2c1920fc224d280c2c631dfd2285287026040c45233c2888a6bd9da5263328f7a8baa16a2a75282aa5bc9e552cd026eea21a9bb12942257120881ae1219223fc224a1fa3a5d51fa7232f20aea2e71c3e2420215f9ac719932385200818d00b15267c243e22e49c5627ae254224a8a0cd264b251024cba12f250424152335a3b922f8208c1f37a4659b4d9f9ca0b1a5659b4d9f9ca0b1a5dd218c22e724cd20dd218c22e724cd204021b7204622b61f6720371cfb1f371c051ccd12581b411ce518ce12e311411cd698349c149d0c19e298389c969e381c99a7aea8d6a87c1f99a7aea8d6a87c1f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000272233223a247c27272233223a247c27c923eb2132252128642a192183240029a32c191f9f245c292b29e30c0522c4294ba4db9e231eb22899a4e49f192447288ba1c698ca2c4b26379df28cc22ccc251a1847176c268c253322d81f72a51e2297245d22d39a711cbb26b324fb1fef8c59281327c4245f9def283a28a926c3a145298428f4260da4e7282528fb2641a55927f92524253aa67b24a8212a2022a7249be39f90a0aaa8249be39f90a0aaa8671d902291232e20671d902291232e205a1dd61ae91c21213c1d6994cf1cb81f3f1a6114b719ed202c14909ab699ec204514989ddf99b71ac02743289e266694d4aa32ab64abb214d4aa32ab64abb214000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a121272382264628a1212723822646287121502210252a288e215f20522494288928591e23233529bc28c70cdd227d2960a0189d7e1efb2869a1419e4619d127c39e929b2c25a026bc9d1694522d3726ce22261d732a8c242a252922e09bd92125269724da1e581e68285d26d123bd0d442951285426179e2f2a3a293f2843a3ee2aee29b828dda5832ae0291e2937a85529bb28962855a908275e25872443aa5a9a47a0bba17cab5a9a47a0bba17cab0000000000000000671d902291232e205a1dd61ae91c21213c1d6994cf1cb81f3f1a6114b719ed202c14909ab699ec204514989ddf99b71ac02743289e266694d4aa32ab64abb21400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d205022fa24ca265d205022fa24ca26f32080221a250028c31f30200b248528291d001ce1225328861c6096841e2028c699599c04152028a699109c1c9a1b27da976e95751ec525441c661ba129cd2510241f21912a14243326f7246422bf1fc72780260924981a5a294628b22680995b2a7d299d2890a0b62bdb2af22938a5612ced2bcc2a57a8732c212c952b7faa952b0b2be82a3cac3e296228472867ad2e92239f45a119ae2e92239f45a119ae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062205623c6251a2762205623c6251a27f020c623f125f027b71e302048242828071cad1acf2145283e106d98e11aef27ac94509b058ee326e089aa98658e06261a1dbf171a15ea246c21021f1a1e0a24ef23c522d42474214226ef250125511dc1282b28b7269914fd2942298f287f9b412b7a2a9e295ea1832c162c0e2b3fa6602def2c4f2c85a9b62d4b2df22c4cacf02cbf2ca72c34aeb82a652a112a28b07193c89cca9ec0b07193c89cca9ec0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d27215b240c250a1d27215b240c252d1f8e2174241f26161dad1fdd2301284f187b17f11f6a27c50e21956417dc26ba888a984d145d26f7162592d50d91253c1e121bb6174924f4213920f81df9218a247723f221661db726cb26b725a50d4c2903295128e899dc2a222a4b29309e152c5f2b7d2a4fa3062dad2c2a2cc7a7132ebd2d352da9aab42e732e172e77ad312ef62dda2dedaf6c2c192ce22b7fb140148a9ac39f4db240148a9ac39f4db20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000351db11e13222123351db11e13222123221c3e1dbb2051227318c819f11dc322da141d15821c2724e20cbc915b17fb2439158b8f5616ad24721d531bad1bc3222f21af201c2007202524df2311239a1b5f2555258224f8906026c325ea24b69a552816286a27229fb229b3290f29daa0a52c662c362c1da5852d522deb2ca9a8622e222eb12d3aab3b2f082fce2ec0adfb2ebe2ec02e81b0c72cb22ca82c3ab2901a82148b94efb2901a82148b94efb200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000351db11e13222123221c3e1dbb2051227318c819f11dc322da141d15821c2724e20cbc915b17fb2439158b8f5616ad24721d531bad1bc3222f21af201c2007202524df2311239a1b5f2555258224f8906026c325ea24b69a552816286a27229fb229b3290f29daa0a52c662c362c1da5852d522deb2ca9a8622e222eb12d3aab3b2f082fce2ec0adfb2ebe2ec02e81b0c72cb22ca82c3ab2901a82148b94efb2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e929c8201124d2241b2c7b200d24c825f127051c4a21c82326283918f5200223311846950223242780abd6a256254e2860ac3ea48224a42693a652a20f235b23f8a411a2471d4f23e194199f07a79321381ead9a5fab8d1cb21f5f1678a48d147123d81f70959b0b572401216e1de394c1241c221620c29a122534230021d49d80245c22d920819fb322d0204c207aa02120a61bfa180aa1019dda9f1da1a9a200000000000000000000000000000000001cd219841f5a12a0205e213422a6196c20981dfb1ff810cb1ca219651c82907219e216ea0f9690fe96339a799b709727a05ea07aa1081877a607a796a77f170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e929c8201124d224e929c8201124d2241b2c7b200d24c825f127051c4a21c82326283918f5200223311846950223242780abd6a256254e2860ac3ea48224a42693a652a20f235b23f8a411a2471d4f23e194199f07a79321381ead9a5fab8d1cb21f5f1678a48d147123d81f70959b0b572401216e1de394c1241c221620c29a122534230021d49d80245c22d920819fb322d0204c207aa02120a61bfa180aa1019dda9f1da1a9a2019dda9f1da1a9a2001cd219841f5a12001cd219841f5a12a0205e213422a6196c20981dfb1ff810cb1ca219651c82907219e216ea0f9690fe96339a799b709727a05ea07aa1081877a607a796a77f1777a607a796a77f170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007725a6207924d5247725a6207924d524072c3123c625a928f32c06213c244a29fe2c1f1e98237029e1258c97b822ce29a7a840a19d234c29c6ab0ea49725932882a8a3a0eb2a8226e3a5bca004286d25250b0d9d6da2e923d9208c9635a96b203c225f192aa5c11ba724c3207a9ac615f9252b23f71ba59313261824ca20049d8f26d824652292a0cd2564245122a9a18224a922b321a9a21d221c1fce1bbda3229bc99fd2a03aa5229bc99fd2a03aa52021af1f2324d5922021af1f2324d5927220c120d12030194a1f451c0620d512121cdb125b1bdb12f018dd12e79126190d9c439c209d1e19e698419c9e9e411c02a8e5a823a9001902a8e5a823a900190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e22c220d0238e251e22c220d0238e253125d22359261929402c4121e4249729ab2d461d1524602a5a29329b3d20f32acfa5faa0851c5c299ba844a35e9bb0285da6eaa000263f26a4a43aa0a0278f251f9c2a9df69e8f24c320371a12a70b22c823b71eafa1701df025e62267950a148d2761255321909a2e287f26902455a06828352733254fa3f1276e261b25a0a413267d245f2376a57623a51f601b3fa6aa9a29a0c2a01aa8aa9a29a0c2a01aa8511a921467209214511a92146720921442149514f219df1a271d5994bc1c5914391a5a94b419879a3f9aa49fb39e8d9a5d9abb9ae5997d14c427d428b2279f1acdab13ac1bacbe94cdab13ac1bacbe94000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bc2247231b265128bc2247231b2651282523bc23fd2509296e253921b024fa29c82c831d9d22d92a6f2bc29d7a1ece2b53a615a29e963829c2a402a2faa0d72732a160a1b59fae26d29d0ba095283d26b51fe18d4f22af248323ab1f56a080216525e322d08f4c1d6a272f257c208694b828f926ac24429d342942286a2641a2b829ed288d2793a520299628c627a1a7122808277b267ba830254423b5214ea9b19961a0b4a159aab19961a0b4a159aa0000000000000000511a92146720921442149514f219df1a271d5994bc1c5914391a5a94b419879a3f9aa49fb39e8d9a5d9abb9ae5997d14c427d428b2279f1acdab13ac1bacbe9400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000822bc23162601280822bc23162601284021b8230226a028d220262050243029c2217a19602070291527d39e028f3e2a6ca35ca3f99d372aa0a01aa16aa082274d9d919f28a0f425561833996f91b2241a215f1a442542231a258123081ea11e18279225a9218d1792284627fa2494998e297428072714a0462a6129642860a4f72a352a1d29b5a79c2a1f2a61298ca98b291829cf28d2aa55278f2503252bac4f911b9e87a0b5ac4f911b9e87a0b5ac0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000832186244827cc27832186244827cc2776217924b8269228a51ebb1e41238b28fb1b8d122b1f78287111759c86942a28fb9c119fd29d8727d19d15a0af9fff25540bac9dcf9f4d25061e8c13d39a2b246d239320a21e4121b325e624fb21491e3728f5261625d6174d295b28f426e199542a43292f28dba0552b3d2a102946a51d2c482bf729d4a8df2b462b7c2a46aba72a372a0f2ad1ac7928f027f0260cae2b92189f40a1c0ae2b92189f40a1c0ae0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a21daf21dc241a25a21daf21dc241a253d20af23c2258227801bb61cee21d22707185b8c2c1c8d27428fcb9aeb8d3f27e0981d9eb29a1b278797319e7a9e1f260a15059a9f9e7224661f6c1a159847220724a321aa1c681f2026b8253424d416eb28a0281a28539b3e2a8229c1284b9e422b032a2c29f2a1332c302b5f2a51a6af2c452ca12bb8a9962c422cfd2b57acfe2b932b5c2be6add529d828862879afd292cc9fe4a024b0d292cc9fe4a024b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000861ded1e9e226722861ded1e9e226722cf1b851dc720fc21c118711aa01e25247f166b15f31c0025b4872798ad11fe2467874a9995943d244218878f108bd222ba1c6e1464164c21cd1e51196e1625206c975d08809d971d31a02da12aa4862098a0eda093a3ad1e16965398d49a9514882afd29982999a38e2c582cf22b1da8da2cad2c452c41aaed2ca42c752c8eac742c292c0a2c6aaeef296729dd280db0e7925c9c04a071b0e7925c9c04a071b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000861ded1e9e226722cf1b851dc720fc21c118711aa01e25247f166b15f31c0025b4872798ad11fe2467874a9995943d244218878f108bd222ba1c6e1464164c21cd1e51196e1625206c975d08809d971d31a02da12aa4862098a0eda093a3ad1e16965398d49a9514882afd29982999a38e2c582cf22b1da8da2cad2c452c41aaed2ca42c752c8eac742c292c0a2c6aaeef296729dd280db0e7925c9c04a071b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e290f25f727d5275d2c652399252128ec29271e59225e270728390e7c20092854a50ca14812942870ab2da4a0991c2874a925a4749c6226e3a451a29519c8244da042a046143923bf8fd5a020a619228d1a3ca268aa0e1da21fee9494a470186122e31e9697b3114724d020571ceb91bb2412228f1fdb98cb24e522a120989c2c24af212c202c9e50221f20361f959fca1e231ae618d69f4f9c719e469feba0000000000000000000000000000000004d1d931bea1d218b6222a522dc229f107722e420fb22d3979c1f841dde1ee790311c451a44108697439c859c0e9ecf9ddaa079a01da2819193a6d0a684a7119100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e290f25f727d5279e290f25f727d5275d2c652399252128ec29271e59225e270728390e7c20092854a50ca14812942870ab2da4a0991c2874a925a4749c6226e3a451a29519c8244da042a046143923bf8fd5a020a619228d1a3ca268aa0e1da21fee9494a470186122e31e9697b3114724d020571ceb91bb2412228f1fdb98cb24e522a120989c2c24af212c202c9e50221f20361f959fca1e231ae618d69f4f9c719e469feba04f9c719e469feba04d1d931bea1d218b4d1d931bea1d218b6222a522dc229f107722e420fb22d3979c1f841dde1ee790311c451a44108697439c859c0e9ecf9ddaa079a01da2819193a6d0a684a7119193a6d0a684a711910000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006021491d792041206021491d79204120912a5224f726e3282a2dbc21dc252e2a772cd01c6a23802a4e2215a0f11a8c2affa994a3c39840290caabca4d09e96285aa66ca452927e2747a179a27aa4dc25699817a2d0a87b23c21de9a05aa8c91fd9215693f0a4f21b44240c209f9a32185d25cc21021c040dc725e22352200a9a3f2670249121e29e69250e245621b7a0fb23af21b920afa12921431de51946a25b99d09ed19fd0a35b99d09ed19fd0a30e2495205224aa920e2495205224aa924c21a321112333192422c31f0d232c19811f5c1cc31e5c1c2f1cf512fb9138193a9fa79ffe9f1a99189c099e10a02c194ea8d3a832a9ee184ea8d3a832a9ee180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f1ac81cff1d76203f1ac81cff1d762014259724cb269a293e2b8521e624462a382d08184d22012b8227cca100915c2bdda8daa368a0822947a861a4a3a356284fa5dda31ea36d27aca03da213a43225ba89f09fe8a50e24d920599765a56e227a23421a64a34d1f5e251521f19d0217d1264524891d5c94542744252722fb9cc627fa2516243da1d8265b25002436a32325aa2312224ba4af214f1e12167da47898f49f8fa0f7a57898f49f8fa0f7a5e821ef1a93215b22e821ef1a93215b224b94ae14131a43213e1f7e1a3822de20461f751da91ee920361a969abe9caf1f28947594d59975942927af282027f31f04ac04ac78acda1404ac04ac78acda1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069246d2596279b2969246d2596279b292d2406251127762a08267021ba249a2bf02b31148d20542a2528f5a2419c1c2b92a85da463a26f29c0a5fba31ca44d27e2a1a1a32aa409274a9cc5a115a36125931bab9efaa44d241122ba1a56a2cb2133251421959ce41cd1265124521c240e4428f8256022aa9990282827ac24439fd428f727da250aa458280f27e125d1a5d5266325c924f6a605242721491fbba73399ee9eada098a83399ee9eada098a80000000000000000e821ef1a93215b224b94ae14131a43213e1f7e1a3822de20461f751da91ee920361a969abe9caf1f28947594d59975942927af282027f31f04ac04ac78acda140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad23e22509284429ad23e225092844292722c3249926d1296f20191f5423f6294f21d299a91c552bc0228ca3f7a0882a48a833a43ea2e628fca231a223a403260e9fa0a284a41c263b904ba07ea22b250a1ff80c0e9afd223024e621b296821fb826c624d21e3d193f2826266122d694f5287127fd249c9d722955284f26c6a1c6290f29f3279ea56e29c628322819a88228ae27102700a96d251e249622b7a918979f9efc9fb2aa18979f9efc9fb2aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d0221326b7288a28d0221326b7288a28e121232508277e297e1e5b1c76219229ff198d9867185329680dc5a195a027291aa31fa3e2a208284fa338a49ea43e27839dc5a118a404268a19829b589f85245322bf1c0e906322d924f723d51f1420df2734262e247a1cd9286c2745252a95972956284a26ef9e1b2aec285c27baa3ae2ac829782836a72b2a8e29be2842a946299e284d2890aaef2578254f25e0ab8f9a039e879f38ac8f9a039e879f38ac0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000682046249726fb26682046249726fb26572132254627d328331bda177f20a4279e14ee9864197727ff98da9e0d9d7727b69c38a1eba04327209c6fa176a234267b96679f9ca19724381c930c499bdd2123237221f21c981f1426ed242822e11b8c28062886265b0ea929f72805284f9c6e2a00290828ca9f002b9829ae2815a48c2b8a2abe2926a80e2b792ad7292baaf72972292629ccab0728d226f82581ac3598fe9c0aa0dbac3598fe9c0aa0dbac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e1e45200124cd227e1e45200124cd22581c581ef520f1213e1a811b471fea24a114af09741a8c256f979b9c619bfd241799af9dbe9d70249698369ed59e3724929c5fa0d9a1f0233a9f28a209a42c2307a07ea28ca4cf21d59f76a2a4a46720bc9e88a18da4291fad9d9ca0a2a2fa1d77291429d9284ea1eb2b582bb82acda5e22b812be12a7aa86c2bdb2a632a41aa732ae129b7290cac21285327c826deac43980d9db39e5dad43980d9db39e5dad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e1e45200124cd22581c581ef520f1213e1a811b471fea24a114af09741a8c256f979b9c619bfd241799af9dbe9d70249698369ed59e3724929c5fa0d9a1f0233a9f28a209a42c2307a07ea28ca4cf21d59f76a2a4a46720bc9e88a18da4291fad9d9ca0a2a2fa1d77291429d9284ea1eb2b582bb82acda5e22b812be12a7aa86c2bdb2a632a41aa732ae129b7290cac21285327c826deac43980d9db39e5dad0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003026c3253228a7271d291a263126ee29e928f91f1a22c72933244e9cb518ea2975a6d4a416a2382985a88fa4b6a3e626afa427a512a4e8260fa44da57ba21e268ba052a4a9a5522415987ca406a8bf2125188ba30ea8d91df91f359942a4071ca522951daf9557191324ac20521c0e127f24e621791f638c97242c2247203798ac234f21ad1fcb99ff21941fd01d3f9baf1e111aec16119a1a9b5c9e49a0069d00000000000000000000000000000000d61eb61cf71e2598a820c620b2212d9e5521091ed920609f131fc01a5a1e6d9fa41c2b18b210a49f8d9acf9c659e27a14ba06e9e22a2249b8fa73aa68aa7639a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003026c3253228a7273026c3253228a7271d291a263126ee29e928f91f1a22c72933244e9cb518ea2975a6d4a416a2382985a88fa4b6a3e626afa427a512a4e8260fa44da57ba21e268ba052a4a9a5522415987ca406a8bf2125188ba30ea8d91df91f359942a4071ca522951daf9557191324ac20521c0e127f24e621791f638c97242c2247203798ac234f21ad1fcb99ff21941fd01d3f9baf1e111aec16119a1a9b5c9e49a0069d1a9b5c9e49a0069dd61eb61cf71e2598d61eb61cf71e2598a820c620b2212d9e5521091ed920609f131fc01a5a1e6d9fa41c2b18b210a49f8d9acf9c659e27a14ba06e9e22a2249b8fa73aa68aa7639a8fa73aa68aa7639a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001725c42515280d281725c42515280d2842282b265228512abd2974210526962bfe2882901a20d12b28a1a4a4b1a1f62a71a8c0a64ea4e32978a78da65ca54129a1a6f0a52da5162849a29ba5cfa79b256b9d9ea50ea94922641bfba208a8271f08223d98e7a48a1c6324fa1dd99cec1a2725fa2028197e18a22584234920588dcf2532242921ff98fa2441238020949dc1233021ab1f879e5220231db419b89eba9a719f38a081a0ba9a719f38a081a04824fd21392464a04824fd21392464a09520171ea92139995c210e1e9521ed92a11f5119521d1713461c271325125d19ed980f9ea09eed92cb927a19899b1c201fa9e1a86ca9a3211fa9e1a86ca9a32100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097221e242026c72697221e242026c726032545270e29e32ba2251d22a525302cd528b19c411e452cd69315a554a39e2bc9a70aa7c5a5762a93a69da615a7fd2806a719a622a7f42772a080a43ca73c25638a57a25aa6c923c4201d9ecca4f021c423191487a27d1e41252520bd9d7c1a3a262123b61c6314d926ae24c321a497f7263a253823839c1f269324f5220aa0bc24f0226621b3a01221061ed61854a1d79b4ba0d3a001a3d79b4ba0d3a001a3c521529479213626c521529479213626d79f4da12c9df427461f3d94a81eaf27e020aa1adf1e2329879f0da171a0302937147e94d59912287f29c32bbf28f02975ac02ac7eac122b75ac02ac7eac122b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fd24aa250928b828fd24aa250928b828242516278e28192ce12292209e246c2c83241d9d9417192c7d9eb4a57da4642b53a6d2a627a62f2a05a5b9a6bba7772808a49aa630a80328e79e6ca48ba61d26d119a7a094a55f246b22981779a18121f724e91f529da61dae266e23d118a019a527fb240121820e21281f2677234b984e288f265b24e89e9e27f125812494a122267a24c123e7a23b237d20041e18a4ef9ab29f8aa100a5ef9ab29f8aa100a50000000000000000c521529479213626d79f4da12c9df427461f3d94a81eaf27e020aa1adf1e2329879f0da171a0302937147e94d59912287f29c32bbf28f02975ac02ac7eac122b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000072405263328892807240526332889284a24c8265328c62b911edc1cfb21ae2bb513fd9f649c062ce6a10aa652a5592b7ca486a6a3a5922993a2d1a5e7a6092893a198a54ba73227f69873a331a567265c1f8794e6a03f24932316204e9942216e26de23a31dfd1c14284a255e21a20ea328b026f02363980429b02739250d9d38293d287a2629a1d928f827c3260da4c6278426eb2568a59224a222102134a67a99619ff8a0ada67a99619ff8a0ada60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fd23e027b829f728fd23e027b829f72823236026ce27b82abe1cca0ed71d0e2bc292b99e469b602a4da0d4a4f5a48329b6a419a6cea5822819a4bfa5bca6a327aaa05ba472a54f26cd18f99ea9a2af242b22f71a869cc5229d241f23b31dae207b27b8256f23681d9428e1268b24fd0e3729c1277b25a1989e295e287326649ee729d028952798a2512970289d27eea46e28bf27132788a6522578245823dba73a9cc99ebba016a83a9cc99ebba016a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f720a325f527b627f720a325f527b627c42211278f287029061bd392af1d5327ce93ba9e759a62288c9d9aa2b9a21128399fbaa334a43227c99e06a4b2a42526ee9c7ca224a4e624fc09b99ee6a1c821cf1fbc0c599ea01d1a25bb20b60f6e1e07289526a3244b1b032957289c269d8fec297b28e82632994b2abc289327bf9e5f2a5a298b2850a3ea294029a4289ca501298d282d2890a77b269e257d2493a85b9a229f06a1f2a85b9a229f06a1f2a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000901f5e211b240324901f5e211b240324bf1cb81f3d220423821bbe1c6920ee25318856984f0cf625c59a4b9fc49fd924459c48a0c9a06b24439de3a0d9a12b24a69fcca147a3e32379a017a386a4bb2215a022a398a4ed20659f61a263a41e1f4c9fc0a187a4cd1d059f39a1e9a3101d85292f294e29689d582ba72a2b2a08a1e12a6d2ac5291ba42f2aab2932292ba65229d0288a28bca7ef2616269325b0a85f9a2a9f56a0f7a85f9a2a9f56a0f7a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000901f5e211b240324bf1cb81f3d220423821bbe1c6920ee25318856984f0cf625c59a4b9fc49fd924459c48a0c9a06b24439de3a0d9a12b24a69fcca147a3e32379a017a386a4bb2215a022a398a4ed20659f61a263a41e1f4c9fc0a187a4cd1d059f39a1e9a3101d85292f294e29689d582ba72a2b2a08a1e12a6d2ac5291ba42f2aab2932292ba65229d0288a28bca7ef2616269325b0a85f9a2a9f56a0f7a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005124c927cf295228bb23f1250b275a2962202f1bb91c7429270f5ca1c69f9929ffa125a7a4a6972917a285a559a62227c4a1f0a577a6842606a44fa690a6f825caa038a44aa6462317984fa4f0a62b21a71288a2fda51a1e671f549a99a21d1df022311dd895b21cf5238a20061dc71b65246e218c1f201a71249821541f71195423a920571ec9195721891f181d9618041e5b1bda16ae181f9c419e32a0458d00000000000000000000000000000000af21a320032123a1101fda1f4c1b46a74b1dd01efb20a8a68b9e889db39d12a81aa1bba0d8a2bca7b7a144a34fa31ba7cca105a490a397a65ba75ea7a1a7eca500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005124c927cf2952285124c927cf295228bb23f1250b275a2962202f1bb91c7429270f5ca1c69f9929ffa125a7a4a6972917a285a559a62227c4a1f0a577a6842606a44fa690a6f825caa038a44aa6462317984fa4f0a62b21a71288a2fda51a1e671f549a99a21d1df022311dd895b21cf5238a20061dc71b65246e218c1f201a71249821541f71195423a920571ec9195721891f181d9618041e5b1bda16ae181f9c419e32a0458d1f9c419e32a0458daf21a320032123a1af21a320032123a1101fda1f4c1b46a74b1dd01efb20a8a68b9e889db39d12a81aa1bba0d8a2bca7b7a144a34fa31ba7cca105a490a397a65ba75ea7a1a7eca55ba75ea7a1a7eca50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003725f628992a0f2a3725f628992a0f2a782526288b29be2bff22621c9423a82ce314e1a1e8a1742c73a275a739a8382bd8a470a8cda8642abfa58ea8cca86629d3a4eda7c7a86927f3a1c4a6bca88d243b9f94a6b7a83a220711b7a458a8e21f7520429d29a57f1ed823f41ae19c011ec824ae202219d61c792527234320501b97259823c6205b1ac3248422202037194d23c7200b1e96144620191d0a187e190c9c10a0faa0308e0c9c10a0faa0308ec320f41ea521e2a8c320f41ea521e2a8fd9a609e01a094a95412bf12fc1f60a771a08da0ac9fdca8caa258a29ba48ca8dfa14ea478a4fea7a7923199089d38a8caa885a835a95ca7caa885a835a95ca70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dd1e1b206d200000dd1e1b206d202b2521283d29292c422155201624752dee1484a470a3fa2c92a337a8fca8c52b1da5aaa824a9342a92a583a837a90129caa653a8c7a88627b69fe9a475a75825f91784a2e0a5de23731fd79d2aa4a4202d230e14dca06c1e1625c31ebb9ba01cd1251322a91ca01a87264d244a215a199126c4244b22ad19802522240a223d1877246422dd204b152622c11ecc154e1aa49c1ea138a21f8fa49c1ea138a21f8f5823041a1f2423a85823041a1f2423a8a3a5e5a4dfa749a9259ffda0161a7ba7639ac49afd9ca0aa5fa767a75da85daa24a396a6a1a528aa412a222a07291dac5fac85aca1ac65ab5fac85aca1ac65ab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000961f2c21c1200000961f2c21c12052255e286529de2c621f8b1c4e21cc2d3b9928a5fea4312dcaa4a9a841a9002cbda508a9a9a9832a6fa50ca9e1a96e297da57fa85fa96128eba075a50aa8da25711ffc9cafa330243c23601cc99e9320d224e31fad98631e35268722c318241d5c27642401205b1b0c2872257122b01b1f28d725b3231f1c27276d256723c01a8c256324952204191823ea20d91c3d1b4e9dcaa07aa20c964e9dcaa07aa20c9600000000000000005823041a1f2423a8a3a5e5a4dfa749a9259ffda0161a7ba7639ac49afd9ca0aa5fa767a75da85daa24a396a6a1a528aa412a222a07291dac5fac85aca1ac65ab000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a201a216c2000001a201a216c206224f227dc28522c3f1a2d91071ca02d21a0e0a557a6332d21a5cba880a9422c3ca5dba86ba9362a2ba42fa804a9d6289ea224a76aa81328729ad6a3ffa5d525c321731b419ba9230e25e120019cce219626d223ae1d691c9127e524d220801b6c280c266d23eb1bdd280827fa24751afe28b227a625651c89281a27dd253b1b4c27192645256c197a248f220021d816dc9cbfa000a27890dc9cbfa000a2789000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e24fe28ae2a81298e24fe28ae2a8129a424e7279728702ca00c9c9fa59edd2c36a05ba511a65c2cdfa32ca82ba9122b9ea449a8e2a85829dfa33ea78fa8342872a178a508a7d126831228a116a40f25cf21411b299b0d231725df22821e151fd227ae259822e61c762897268a24421af62879276525711a5a2914285a26d21a9e295d28e82635190d292c2827277919142827273c2601172d257024c52358179ea0d99f03a0d4109ea0d99f03a0d41000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e205426722854267e205426722854268c2159277d2813283411729a978c98212f9dcfa43da4522917a1aba673a746295aa1a2a54aa69a27e1a0e3a408a63d263d9ea1a3a7a4f724a09b77a289a4ad215c9043a15ba4e11c42244d1d0e9a4d1d0e2861268624131ee0281e284626411da2295a28e526461b132a9b2854273119032afc28db2761168029b228e427bb16b02824287727d11033268025b7238b174e9c1ea033a39b974e9c1ea033a39b9700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c206922922437243c206922922437243a1d75204722d1230e1be41c8d20d0269b93199d169bfb26e79b49a116a2ef241f9d9ca1a8a22f24ae9de7a102a3c523609de7a1f5a25b23649e45a2aca3de2200a00ba39fa42d211da0cea2c0a4801ee49fe0a144a4851cfc9eaca1d6a3b51b672912295e292f17db2a562ab129940f632ae1293e2934165f29fb285828bb16a32830288027e01071269d251d252211659c0b9f3ea0b097659c0b9f3ea0b097000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c206922922437243a1d75204722d1230e1be41c8d20d0269b93199d169bfb26e79b49a116a2ef241f9d9ca1a8a22f24ae9de7a102a3c523609de7a1f5a25b23649e45a2aca3de2200a00ba39fa42d211da0cea2c0a4801ee49fe0a144a4851cfc9eaca1d6a3b51b672912295e292f17db2a562ab129940f632ae1293e2934165f29fb285828bb16a32830288027e01071269d251d252211659c0b9f3ea0b0970000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008224402acd2ba52984234129c529eb2b571aa492459a4e2c169e2da618a7df2a4da058a83ba9402a9e9f7fa6f7a74d28489e7da5aaa72a28c19ad8a40ca6b026771e819f16a435258c1e28a224a58724429322a4cba6a320c91db19c13a2ad1dd922921c8f8c0d1d93237320761d521c672478210d20c41c9f24a6210720cd1d6223b6201a1fd21ea921931f721c991d0d1e0a1ad218601ef39a389eb99fe91c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008224402acd2ba5298224402acd2ba52984234129c529eb2b571aa492459a4e2c169e2da618a7df2a4da058a83ba9402a9e9f7fa6f7a74d28489e7da5aaa72a28c19ad8a40ca6b026771e819f16a435258c1e28a224a58724429322a4cba6a320c91db19c13a2ad1dd922921c8f8c0d1d93237320761d521c672478210d20c41c9f24a6210720cd1d6223b6201a1fd21ea921931f721c991d0d1e0a1ad218601ef39a389eb99fe91cf39a389eb99fe91c0000000000000000af21a320032123a1101fda1f4c1b46a74b1dd01efb20a8a68b9e889db39d12a81aa1bba0d8a2bca7b7a144a34fa31ba7cca105a490a397a65ba75ea7a1a7eca500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c26b42bcd2c702b5c26b42bcd2c702b2c25742a2f2c432d541b3d99ae9a462ed0a1a6a872a93e2d21a4a1a915ab192c81a460a96aaa3a2a0aa47aa84da9cd28492128a127a6f026042a0026171f8f24f7263b20be9e0e23b29669a545a8d620f01d0ca0b8a4721f3c236e18c69ce91fc124b220901ace1e83252d233c20581e9d259c23c3201220c8248a222720ac20592331214c1d09205220241d1a1857210f9c5c9f9da05c1f0f9c5c9f9da05c1f0000000000000000c320f41ea521e2a8fd9a609e01a094a95412bf12fc1f60a771a08da0ac9fdca8caa258a29ba48ca8dfa14ea478a4fea7a7923199089d38a8caa885a835a95ca700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e2567297c2abc2a8e2567297c2abc2a6b269f2ac72b192e220f9a9e059b412f68a4e8a9a5aa2f2efba5c9aa39ac8a2c03a652aa71ab522af0a487a98eaa9328a6a37ca8baa9e8262f2bba27bf223a278c2a6d25a0144824a221e19ee2a4ef1fca22eb0d23a14a1e0d25b21efc94b21ef0257522411e021fc22657241922551ff526cd242a231d21bc2532248422ce21aa24dd22c62189217621bb1f261d8123a09dbca047a18a22a09dbca047a18a2200000000000000005823041a1f2423a8a3a5e5a4dfa749a9259ffda0161a7ba7639ac49afd9ca0aa5fa767a75da85daa24a396a6a1a528aa412a222a07291dac5fac85aca1ac65ab00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a267b2a032cef2b8a267b2a032cef2b08283e2b2b2cbb2f6b9d0da347a3a530aba60dabababfe2e25a8c8abb8acb72c32a7dbaa67acdb2a6ea6f6a916ab232900a463a8b2a9c726161c0ea3e7a5fa25562c7a28ca220424c7286e23ff98b1182d255d2001903c1eee255422151c4a1f75278c24d9203f202b2871254b23e92060281b26562424237027b1253924fc230526a52421236424aa237621082054256d9ddca07ba1bb246d9ddca07ba1bb2400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002726572aba2ba02b2726572aba2ba02bb626a22a7a2b182ff19fb6a42ba54f300aa607abe6abf82e9ca6feaa24ac822c98a523aa21ab6b2a55a4d9a822aad928d5a222a8dca82228119a23a4e2a5c225d52d172cd729f094042d862ad3264ba56e2778240e206a1a91275225d021841e86285f26f023b120152929274b25de213929e127fc25c123bf287927e725da24952769264625dd25c724c023a1210927f89c4da091a17326f89c4da091a1732600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003925502b6f2cda2a3925502b6f2cda2aaa25e529c82a3a2e06a0bda52fa7db2e00a5e3a97caa642d08a5eaa947aba12bcda433a942aa912927a43ba83da9562821a12da60ca8fd26670c06a3c9a58525d8226e150e9e042324267c249b21231c32282626c523091ec42819272925e91f1d29c3272226dd2090294828ef263422f629942881271d246d296328c6276e256228cc27e5268027cd251d2546249228869d9a9dfe9e1f28869d9a9dfe9e1f280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b71d3d278228d226b71d3d278228d226c0229228e229ae2b259883a278a1282a90a0f8a6fda69729b1a12aa8c4a8212940a241a8faa87c28a6a286a612a830265aa1b1a5f4a68a2446a22ba628a7df2160a05ba40ea5781fe424f421061e0620492809279225f4200d29422811278321d829c328bf270122482af0281a289622562a2f2965287124e029ee287428dd25dc2880280e28322859263726bf24dc28b89dd89d55a0a128b89dd89d55a0a1280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c11f0d24ac256424c11f0d24ac2564247a1d9b2178231e255d19531c271fb727089915a165a19e276b9deca3c7a42125649d02a38ca478234b9c47a2dda382222399f4a080a2cc22559430a0c3a1e7229f08a79f6ea2e62155973ca045a26620c0a053a249a4ba1c15a0e2a251a4501af3287c28bf28e21ef12a752a9b2900238e2ae7295829e924df295329c9289026e1287228f12723289d261226e1252a298e9cf69d739f0d298e9cf69d739f0d2900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c11f0d24ac2564247a1d9b2178231e255d19531c271fb727089915a165a19e276b9deca3c7a42125649d02a38ca478234b9c47a2dda382222399f4a080a2cc22559430a0c3a1e7229f08a79f6ea2e62155973ca045a26620c0a053a249a4ba1c15a0e2a251a4501af3287c28bf28e21ef12a752a9b2900238e2ae7295829e924df295329c9289026e1287228f12723289d261226e1252a298e9cf69d739f0d290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b26922d012f29293928f82e03308f2fdd9567a5cba600301aa280aa83ab8d2c55a146a929aa412a339dc5a673a8e428d31896a422a73928451c18a02da3812439203b9999a095238422829d0ba28624fa8fa9a453a7ec22081ec49d1ca2dc1e7622341b9092011ede239d20dc1dbc1d7624a421ea1f541ea5249c210120fb1e0a240e211f1f142003222020281d981fc11e641cf516e620c499af9d209f3021000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b26922d012f29298b26922d012f29293928f82e03308f2fdd9567a5cba600301aa280aa83ab8d2c55a146a929aa412a339dc5a673a8e428d31896a422a73928451c18a02da3812439203b9999a095238422829d0ba28624fa8fa9a453a7ec22081ec49d1ca2dc1e7622341b9092011ede239d20dc1dbc1d7624a421ea1f541ea5249c210120fb1e0a240e211f1f142003222020281d981fc11e641cf516e620c499af9d209f3021c499af9d209f3021000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049274a2e4e2ff62949274a2e4e2ff62993280f2f35304830e59e03a958aac230b6a476ac20adc72d26a5a3ab5caca32b57a387a9d4aac028d00f66a6c7a83b270d2a6821599f6422ff2a4c25551d09942628e1223b944a9d1011a1a38fa6441b8e1ef39fd3a4431f9623ae19029c421f1a255e21bc1c11209b2543239b208f20de25ab232a2188215b255223f520312215240622fe1e0622a11e0c1e7e1c7523ee9cf89d42a05c23ee9cf89d42a05c2300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003127632ced2c522a3127632ced2c522af82a043072303a3127a42caa95abc63195a8e1adafae012f20a8a5ac5cad2f2c63a66fab48ac2929e4a401aad1ab33277c27839378a4fc23742def294e2635a1f42a2c271d1eeca526244ba0afa54ba0e5225d8ef9a1f81d2c252c200415e41e8c26a323c720a8202d27bc2480229b2193274525a5233c23d226e9247c2341245d252a2452226324d622f0205a1d8825009cf89efda0ec25009cf89efda0ec2500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004529702d0d2e5d2b4529702d0d2e5d2bad2d26316f31523300a9c0aca3adfd3354ab58af1db01d304ea991ad69aea62c95a748ac11addc299da6a0aad8ab2628a4a23ba837a9af254b2c3e28f723da9da52e4e2c1129c8aa792b0625e21afaa74e258f20df0fa51d8626c823e61f31200728402525238f216d281e2690248323a92827279b250a254b28d52699251626fd269525bc24e2263d24d422b9207028aa9c0da0c8a18528aa9c0da0c8a1852800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008928412db42d2d2b8928412db42d2d2b5b2c6c309b30373244a8e9ac4cadbc32d5a9e3ae6daf892f76a8daac95ad1f2c42a64bab5cacfb29d4a4e2a949abde28d4a2f0a89da92b282c9c5da68da79525132f3b2d112b86ac232d3d2a792765ac89278b24f121a51ee727a3259823be21c428e226ec24fe225629c3271226e524bf295728f626dd26812956284b2732286f28aa27b726fd285825b024b0236d2a4f9dfc9ff6a1602a4f9dfc9ff6a1602a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c9286d2e912fd429c9286d2e912fd429c32aa02f30308531efa578acf3ac0c3251a8a3ad4bae7a2e94a6b7ab7bac062bc8a40daa50ab2d2952a3a5a808aa46280fa195a792a85b27a69707a5a2a6ab258221a69de3a1de215c25dc22721f111ffb265525d8230721d0285227b325152289295328fd2626241f2af02816288325b92a4b296928d627762a8129d02837294029bc283d28c12a3f2674263b25432c839ab79c7f9f562c839ab79c7f9f562c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a24c82a312c35272a24c82a312c35279826a52c752d072c1da17ea9eca9e82e42a440aad4aafb2a27a432a9eba92528e3a37fa98daaec26c4a3fea79da86c241fa344a756a80a2388a1e7a5cda6d721a720e51a140de9208e261225f5227d2174281227a4255b2260298c289a2784233d2a1e293e28ca24ef2a8829cd28ff254c2bfb2944294b28282b282a9e29022afa299a291929052c86276927cf25f52cef9a159b739e002def9a159b739e002d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004621b2266d2804234621b2266d280423bb1ff5240d263826e7163514311a0c266d9c34a4dda4e324e69df6a4e3a5a922549d2da446a545211d991ea238a470205e14689fa8a1e620d41c3e99459ed7213921e41be6129e22ae235a21871f2c23011e131af6949221049ee3a072a1b71d1f2984287c282d24872b0a2b622afb26aa2b152b7c2ab2283f2bd12a382a582af329cd291e293f2ce927be271f26442d29982c9b8b9e562d29982c9b8b9e562d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004621b2266d280423bb1ff5240d263826e7163514311a0c266d9c34a4dda4e324e69df6a4e3a5a922549d2da446a545211d991ea238a470205e14689fa8a1e620d41c3e99459ed7213921e41be6129e22ae235a21871f2c23011e131af6949221049ee3a072a1b71d1f2984287c282d24872b0a2b622afb26aa2b152b7c2ab2283f2bd12a382a582af329cd291e293f2ce927be271f26442d29982c9b8b9e562d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002271d2e9d2ff6a41828192f5f30a2a2ab9ec0a8cca8ea2bf1a3c9ac95adb22bc2a053a917aa0728c81928a525a719285324b2a0c9a60b27bd25789d55a4a62479261094b3a1141dd624549d23a3549d8b107ea46da6081de91c3ca072a3b71e0120150b499c881d092410214f1f2c1ed624bb2260216a1fcf248a229b201b205f240b223720bc206322d120871ed1204f1e291d871c5d223f9b769ca09e61230000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002271d2e9d2ff6a402271d2e9d2ff6a41828192f5f30a2a2ab9ec0a8cca8ea2bf1a3c9ac95adb22bc2a053a917aa0728c81928a525a719285324b2a0c9a60b27bd25789d55a4a62479261094b3a1141dd624549d23a3549d8b107ea46da6081de91c3ca072a3b71e0120150b499c881d092410214f1f2c1ed624bb2260216a1fcf248a229b201b205f240b223720bc206322d120871ed1204f1e291d871c5d223f9b769ca09e61233f9b769ca09e612300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f27ce2def2e37a22f27ce2def2e37a24528612f7d308fa257a1daaa8bab162ca2a660ae8dafae2acca4f5ab90aca72445a283a9bbaac220b72396a3f1a70c945c2b2d24229b2da4572a1e23d89a64a740262b14b3a24ca8a5906ba5caa7b09fee1e8fa097a4791d1b24101c3b97d01f4e254222711f5620f725fd23ac21ee2033264024f7219b21de2550243722b62290245d233a215d239320ed1fb81bb1248799589e8aa09a258799589e8aa09a2500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000442160218b0f0000442160218b0f3c2aa12fba302e967ea4d5aa31ab712dbbaa58b011b12d2c31a83badebad0d25b9a61bacc9accb209aa38ca91aabb7972828be1ccca074a5a02b3a264e1ee5a8a928a91f1ea283a8312151a286a6fc9dce22018e0aa1611e8f25a221581d2e20d6265824e1215c219927582515246b222628fb25bf24c423e027f125c0240c254d264d254024c525c4233a22d8205927449c609c649e3228449c609c649e322800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f167f220123f4108f167f220123f410722de530dc31439e3faa8bad30ae1e30caae47b21ab3c92ec2a985ae4baf7e2757a8c2ac65ad172508a6d0aae6abe322daa0c0a7f2a83b2042258e988ca31392c9292a23e99c2ea8b824171657a11090b7242b2018152b20b527dc24e2212b217e284a26b024ce22e22884273a26402460294928fc26ac2541293d282c272b274a28aa277726642879258f24ee22cf29f59b6c9eba9f592af59b6c9eba9f592a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a0fd0229a22b40a9a0fd0229a22b40a4d2c58304a312ca431a9fdad8eae2a3010ad60b116b28d2e33a97fad1aaef428dba704acd1acb5296ca542aa8cab6d29e2a35aa965aa9e28579f32a872a93a25af2049a27ea5851a4f244718929f6b1e8326c0230520f820b9286126922446226629072842264e240e2ae0281128e525d42a8529a5282828d22a9c29e0284f2998293d298d28b02ac5269f265d255f2cf297c49a2f9eb12cf297c49a2f9eb12c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f51ecc29312a01a1f51ecc29312a01a1372a722f6d300ba22ca795ade7ade22eceaa4ab01fb1fa2cdba65fac16ad702764a596aabcab7a28f5a353a96caa3e2861a128a823a9c726239a75a580a71f2483216a9e5fa1eb200a26c5222520b820d5274a269824922151290f28cd26e522392a20294728b3242c2b032a4c290027f02bb82ad52921291e2c492b8a2a1f2b3f2bd42a462aa82c992856284a27372e8a98c39b859d742e8a98c39b859d742e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e246a24d78900003e246a24d7894225ed2bdd2c07a50ea394ab6fac0f22c9a7c2aed2af4a291fa352a9e7a9de2094a1b6a78aa8a21e70a006a671a73e20179d64a497a5f320be1bca9f62a2d4207b245520351bfa203926ef2465239021ba2896276a26d222e129bc281628a223ff2aba29de284625f02bb82a082a0128822cc42be32af629ca2c402cc32b402c442c1d2ca62be92d8e297029b628a52fb392c792519c0d30b392c792519c0d300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000392244286429f39e392244286429f39e1f20b325db26db9cb808769a299abe8d0e9d7da460a53a8d8a9deaa4c3a5b395d09c56a44aa52c155895b3a1a0a3461be61b079d5fa0071d2a20a60b4399691f23248520e11f40216d254423c8210223ac272e264f25c623b728ec28d0283923032cc52b522b6a26942c4c2cf12bbb28e52c9c2c4d2cad2afb2cae2c702c982c622c492cf32b672e7029bd2944290b3011992c995f9c493011992c995f9c493000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000392244286429f39e1f20b325db26db9cb808769a299abe8d0e9d7da460a53a8d8a9deaa4c3a5b395d09c56a44aa52c155895b3a1a0a3461be61b079d5fa0071d2a20a60b4399691f23248520e11f40216d254423c8210223ac272e264f25c623b728ec28d0283923032cc52b522b6a26942c4c2cf12bbb28e52c9c2c4d2cad2afb2cae2c702c982c622c492cf32b672e7029bd2944290b3011992c995f9c49300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001124862cb82dd6aa4a25222d472eabaf1a9ba4a544a478b042a2a2aa88ab34acce9e7ea8a6a949a3911b2aa5e1a68f24de260e16e2a42a240628ce1ed0a26ca467284e1b8ea03daabb25ef99b6a290a9581d4da12ba44da16016f3a0c1a3d1181a14429edda0dd1a7622db1e98197e1cf22464234721b81e2a255023da20771fad24f42228210321cc22d9214920832128204c1fe01bc7220d9ac59b0c9e2624000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001124862cb82dd6aa1124862cb82dd6aa4a25222d472eabaf1a9ba4a544a478b042a2a2aa88ab34acce9e7ea8a6a949a3911b2aa5e1a68f24de260e16e2a42a240628ce1ed0a26ca467284e1b8ea03daabb25ef99b6a290a9581d4da12ba44da16016f3a0c1a3d1181a14429edda0dd1a7622db1e98197e1cf22464234721b81e2a255023da20771fad24f42228210321cc22d9214920832128204c1fe01bc7220d9ac59b0c9e26240d9ac59b0c9e262400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cc22a02365a00000cc22a02365a0a325682d092fa6aeea9cb3a535a5ccb09ca47cac3dad8cadcaa3c9aa8aab90a5b19eaca712a91ea01825119985a256a29d2a6024a71a70a6272a1424f79a4ca9a52623996da399a8031d24a306a560a04720d89a49a19a19a4241e20cf18671ee125b023f620d81f7a269d2410238720cb26fe24882343218726ee24e9232723142594248d22f023ab224c21131c3125789b809e30a0f625789b809e30a0f62500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000401c451e4f9b0000401c451e4f9b39289a2d072f5cafb1a13da7c5a797b193a836aec0ae36aea4a664acd4acfca6dfa39da988aaeea2389aa4a606a8c3a208219d9beba214a04a257f12e6a37f92792205a2e7a5e2961421059ed9a1ab0ded23391b5297391b1e2662232221871ec9275f251524eb206f2887268a256e22c7286427f725ec23a62849275c2633255f27602641256026a4240d241a221d2817994a9bc79dc02817994a9bc79dc02800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000511d5f1e869d0000511d5f1e869d772b432f663049b1dba7baaa29ab34b408ac27b074b041b0f7a871ad0aaeb2a7e0a451aa68ab5ba06fa03da8efa8929d3c98fea44aa79c1c521ca1a37aa76c24cd2010a1e7a4571ca4210d0dd99fae1992251f2144182c1cc6272c25eb226c1ff3284d279c256022c829a3288c275b24532a2829462897255f2a6529a628c9275c2905293d28de28a1267c269d25902aa497959c4e9f722ba497959c4e9f722b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f1cf31d3f9c00009f1cf31d3f9ce6298c2e0930bab05ca642ab76ab92b338aa04af00b021b03fa8d3ac5dad711300a4eba9fdaac72bee9e59a869a9122c3f9fd7a716a990299796e9a532a85624c120caa0d0a4d419ba24ca1ab39d471996278624b721011d1a296427f425a820372aff282e281024662b432a7929d4253c2c2f2b492a2228632c942bd42af3299b2b412b532aca2b9428e3282f28212dd89bed9b9d9dff2dd89bed9b9d9dff2d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f724332b682c5faaf724332b682c5faa5628802ddc2e60b026a531aa8baa40b2b6a7b4ad98aea5ae0aa692ab68aceda439a55baa6cab3d24f0a1bea8f2a9d226679dd3a669a840246417dea293a5e91f8f22330e149d091dc7264f249c21bf1dd128b7273826d11f282a0d2957288c218a2b9d2af3297d246d2cf42b682bef26162d962c332c5229b32d412dea2c162c4e2d202dad2cbe2df92a732aa229bf2f5c939499a49e72305c939499a49e723000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b222f2840292fa80b222f2840292fa810230f29772af8adc7a0a6a76aa6e3b1e5a43bac06ade1acefa189a883a93fa4709fb4a5fda6f59cac99c5a335a59c13651a21a05ba2961cf5209193079dfd1d4c25b521581e441fc42708263b242720772968286d272121b42a9a29ee286d21302c2d2b702a9e24f62c762c1c2c15280b2e602dec2c7c2ad82e382ee52d282d8b2e4e2ede2d8d2f952c5e2c292c393146944d94879a143246944d94879a14320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b8211c281a2951a6b8211c281a2951a61b1f04250e263ca89c903b9dee9c9da7a29adfa2c0a3cfa5899b2da32aa466a3059bb7a210a4aaa0da1328a0dca12b9def1e4098939d4098cb21351cc78cf0119d24fe205d1edd1c5e2774267a2516215e29ea28d128e822c82b302b8e2a4524012db72c8a2c5c26a02d532d152daa288b2e3d2e032e062b4f2f052fc02e722df02eca2e4d2e1730c12caa2c332cc03160946794ae9a913260946794ae9a913200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b8211c281a2951a61b1f04250e263ca89c903b9dee9c9da7a29adfa2c0a3cfa5899b2da32aa466a3059bb7a210a4aaa0da1328a0dca12b9def1e4098939d4098cb21351cc78cf0119d24fe205d1edd1c5e2774267a2516215e29ea28d128e822c82b302b8e2a4524012db72c8a2c5c26a02d532d152daa288b2e3d2e032e062b4f2f052fc02e722df02eca2e4d2e1730c12caa2c332cc03160946794ae9a9132000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cb210329572a01aa5820b4271029c1ab68154291d51dcbadd39ce2a575a66aacf79bb8a507a79ca856947e9f93a1e99c381cba13cc8e268d7422fc1ddb1bfca2da244c2092193ca8d624d51e03107da6ce21bc1aad0d22a04920171544991b929720b619ff94e9174a24e921ae20f51a712535245223f41dbb254d248323e01f8b2538246523f0202523c32291211d21a021cd20891da623659c0a9ec29eed2200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cb210329572a01aacb210329572a01aa5820b4271029c1ab68154291d51dcbadd39ce2a575a66aacf79bb8a507a79ca856947e9f93a1e99c381cba13cc8e268d7422fc1ddb1bfca2da244c2092193ca8d624d51e03107da6ce21bc1aad0d22a04920171544991b929720b619ff94e9174a24e921ae20f51a712535245223f41dbb254d248323e01f8b2538246523f0202523c32291211d21a021cd20891da623659c0a9ec29eed22659c0a9ec29eed2200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d24a3280d2abbaa3d24a3280d2abbaa18242c2a002cd8adfc118d98a01ed2af4ca098a737a821ad019734a1c5a27e9d8589c197f59b1510271c451bae180613cf20651ebe1b5f941123a420de1d6c9ea423931e311acba10622611832978aa03a23f21d400ded976c25e622052112198e26ad2425240c1d7027a6252f25891fb5270026052532216d27e52558256022fb25092527249b2371236a2248206b25a29db09e47a03d25a29db09e47a03d250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af246228e92910acaf246228e92910acd125d22a2f2c1eafdb96819f05148fb048a24da86fa89badd194939d1e9f259b4610e394fb9ad10b571d1d1c3019e811102169202b1f52152c2331220822129030249122bc2141993b257d224921539c5e250a238c20ff9521275c256f24091b742807274826981e4e294b28df27372185298728172808236d2969281c28d2245728da277a264f26f225a22553243028fa9ceaa039a26828fa9ceaa039a2682800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002624b6265c281bab2624b6265c281babc3278c2ba82ce1aff69c22a19d9a39b142a42ba9cfa90fae4c98259f58a0499ba8153e8cf798a805431f011e2c1d6f0d0d21f420ac208515be235f23a2233f166d256c245324d994b6269d246f23dc95eb26eb24122300947e28c326a025141ca4298628f8279320da2ada2965295c23a12b712af3293b25c52ba62a562a4b27b12a512a5529e1289c288e288327ca2a1a9b889e09a0882b1a9b889e09a0882b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dd22852565272caadd22852565272caaea26b12a042c11af849ceea1939aeeb03aa559aa5eab1caf29a2e3a607a834a768186b8e81994888de20d220c020911ba6220922da21d419e42404245b23a5105a262c2587241a99e427c825c02456965528ff26d125650db229c4287028e91c2b2b1e2ae029be21702ce92b912b9c24142d772c3f2c5b27802de62cd12ca2290c2dd52c642c232c432b1f2b192aa42d80999c9941a0b92e80999c9941a0b92e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000402111285b29b2a9402111285b29b2a9fc21c7266b2812ac7396c79dd19028adbca476aba4ab27ac6ea3ffa85fa943aaf49d7da4c8a57da41f1a949cb1a03a9bab21911d4b18cf919624e321a61fac97fa25462420235a98ec27e1251725f3931429342861276517b82ac2296329391e512cc72ba52bf0214d2d012dec2caa255a2ef02dbb2dd428802fec2eb72e082c8c2f692fed2eb02e2c2d042d852c9230cd1d091bbb149b31cd1d091bbb149b310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000be1fe1268e2853a9be1fe1268e2853a90b20f3245f26fdaab294039d8a90d0ac5b9e49a50da62eace3a0bba7a0a819a9219cbba438a64ea0ae16bf9ff0a12a994c209e0cf398c695ad23711f5c1c2d0dcf25182472224717582896262d258119b429c9284a28a419882bb42a8b2a701ec62c712c5a2cc523422edf2dbd2dc5269a2f3b2ffe2ef229a5305f303c302d2df730d0309b306730b82f812f152fd2323922de20e42048343922de20e42048340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ea20df25062762a7ea20df25062762a7d21d7b237a248fa8258c429b3e9834a8719797a080a1aca50199a7a001a130a4b694da9f38a1a7a2ec1cfb94c79989a0e021551d481abb9d1e24b222de20979a19272e26e525650bac2895285d28711d302acf29fb29a620352ced2bdd2b7d22652d2f2d0e2dcd24bb2e732e4f2ea3271230e42fc62f832a0931d630cf30ab2d7f3165313d31f6303f3044300930bc339f222c213221f7349f222c213221f73400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ea20df25062762a7d21d7b237a248fa8258c429b3e9834a8719797a080a1aca50199a7a001a130a4b694da9f38a1a7a2ec1cfb94c79989a0e021551d481abb9d1e24b222de20979a19272e26e525650bac2895285d28711d302acf29fb29a620352ced2bdd2b7d22652d2f2d0e2dcd24bb2e732e4f2ea3271230e42fc62f832a0931d630cf30ab2d7f3165313d31f6303f3044300930bc339f222c213221f7340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f1fc4266028a8a8d11c0d245a25aea9c512281a861f23ab1499b9a01aa18babc69c71a48ca5a4a81a99669f5ba0b3a38518401aaf1eb0a0f01f031cfc14ec9d7d20431fcd1ea5a093224020771f40a0da2311220d228e9dae24042443230d9a4b251a243b23658bcd259b249024aa1447261a2500258d1a402622250025e81d392677253925282092247824c62309213820411db697ba20cd98939c41a01921000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f1fc4266028a8a84f1fc4266028a8a8d11c0d245a25aea9c512281a861f23ab1499b9a01aa18babc69c71a48ca5a4a81a99669f5ba0b3a38518401aaf1eb0a0f01f031cfc14ec9d7d20431fcd1ea5a093224020771f40a0da2311220d228e9dae24042443230d9a4b251a243b23658bcd259b249024aa1447261a2500258d1a402622250025e81d392677253925282092247824c62309213820411db697ba20cd98939c41a01921cd98939c41a019210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000561f2a27b828eba9561f2a27b828eba91221b326312865ac450fd90e8819e5acf89deda374a403adda9b68a208a400a6e496629e2f9f7ba1be1dc4185c14e19db820991eb41bfd9ca122e620222021a022244f21c220b0a0af24dd224b2112a01b253424a622079ce4266e25e3243c9581270e267925af120528a7261f26e31a262811276126a11e49286127f8262c21ef26f02568257522ee1e4d20051e90227b98089d129e18237b98089d129e18230000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ba210228352929abba210228352929abbf219c27a6281aad8190c198d390bdadb49fc7a499a51fad199ce7a111a387a59402b39b499c2f9e6b1e491c151a969b3721b620192024993a2491228322b39c5e254f243024bf9d5c2616255c241b9fc726da2500255f9c602834278e262293fc282528d0278118aa29b8285e283a1e112a2d298e283a21652a6d29fd2864236829b2284028a324ad25f52479243d25af902b9c66a1ce25af902b9c66a1ce2500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b11851196e9c0000b11851196e9c42205125ef2663aca60adf95dd1005aeada010a59aa5fcacea9c4fa269a308a62284499d919e2ba2fa1fe51d431dd99c4722c821a421d899b32425243224089b73266d254425019ca7276d26dd252a9c2f287327a226d598bb29e0287e286d8d852aa3297129b61a9b2b792a312a1020452c612bc52af523a42c372c042cd125352ce42b522ba427b9284528e127a7284692029caf9de9284692029caf9de928000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e190b1a9b9c00001e190b1a9b9c761fa5241426d8abf809eb8e871653ad76a095a595a627ad85a0b3a4e3a58aa8bd913aa072a1b9a47d20481c1d1985a039227921c0203c9c402555243b24a89cd526c725ce25b69c5f2871270b277a9ce0288a283328639ac92af029a2294914102c282bf02a171ef52c6b2c4a2caf21c52d532d392d5d25ba2e492e1d2e4f28be2e5b2e192ea02a602c152cb52b352c591a4d94889a2c2d591a4d94889a2c2d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000930ca31d351fc49f930ca31d351fc49f301c3c226624bca908116b167c1c94ab3c9d3da3d6a32fac619f55a485a53ba97b96f2a0fea28ca5db1f0c188c1129a29e230e22ab218b9f9825b2245724909f5027d0261f26879fc1285128b227839d3c2a88290329fd99bc2bd52ab42a9714cc2c472c482cf91d142ebf2d8e2d1824d62f502f092f1927eb30aa308930382a3b310731f430772dea2fca2fa62ff42fba235b2262221431ba235b226222143100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d1e4524e12590a69d1e4524e12590a6061d8d22372427a9ae0d6592410d19aa5499449f2ba0d5a8829c20a259a3c4a8178733a04ca1bea73f1f1e15769313a6ff221121f91e00a52d258424842338a45b278c26a12508a208296028f5272fa0132a8c299229069be62b382b102b8c17192ddc2cae2c2b21272fbc2ea42e35259c305830453099284a32fc31dc31472c6833313319330330ae329d329a32ea32782782278127e334782782278127e3340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000741d392423255ba6741d392423255ba6f11a58208f21ada712051097f491cda72f96619e2ea041a6d396549fd4a07fa4e41a6494c898b2a0b822f921b521b199cb249924af245d95ae266b26562678954f282828222861956b2931291029c311d62a582a4f2a741a742c2e2c132c5a1eb62d6e2d3a2d76218d2f192f062f4225f630bc30b030e728cc3293327332ae2c3e3422341934933028341f340e3449348a298f298929eb368a298f298929eb3600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000741d392423255ba6f11a58208f21ada712051097f491cda72f96619e2ea041a6d396549fd4a07fa4e41a6494c898b2a0b822f921b521b199cb249924af245d95ae266b26562678954f282828222861956b2931291029c311d62a582a4f2a741a742c2e2c132c5a1eb62d6e2d3a2d76218d2f192f062f4225f630bc30b030e728cc3293327332ae2c3e3422341934933028341f340e3449348a298f298929eb360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006f1dd5213c2445a7ef19a420ad2079a8e58dfc169811a1a8f598079d169ccda8e19bd2a035a117a86f991ca0bba02ba60615700a321546a4e21be613d59508a1c7204e20821e4ea0cc22d221fa20e6a013240a232f22c99fd0240e240023149d8525e2248524059df12568250025539c4b26ce25aa25fa997026be259c25dd9a462683259c25799a3a25ca24ca24328da5210921bc20f316c896da98969b8b8d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006f1dd5213c2445a76f1dd5213c2445a7ef19a420ad2079a8e58dfc169811a1a8f598079d169ccda8e19bd2a035a117a86f991ca0bba02ba60615700a321546a4e21be613d59508a1c7204e20821e4ea0cc22d221fa20e6a013240a232f22c99fd0240e240023149d8525e2248524059df12568250025539c4b26ce25aa25fa997026be259c25dd9a462683259c25799a3a25ca24ca24328da5210921bc20f316c896da98969b8b8dc896da98969b8b8d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000460a6c0e2714c39c460a6c0e2714c39c0519c31f7420fca7ee120d1c281b85aae896359c1c9bada8879108962996a59cc0939e995b9a6aa2b0187307e691d4a05f17061664151b992e20881d901b6a9fb02351211c207fa1c0224c214820e79fcb199119e519c694262562245124899c7727f9263526949d3528b0277227659c9d280228e927459b9b2816281b28439902278b264026fc9410240123c2216d155f98ff9ceb9e74955f98ff9ceb9e74950000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de06c90d13132f9cde06c90d13132f9cbd192b20ba2028a9860746161c0e0eac949a539f6aa066a83085948f78905e94d108e6031102868d4d18c586c9963e9e52146114d8122096672160208f1f889ede24ec23322362a0712453235c22e29ea01abf1a101b2a949026d8255a25109dc3287028c627d69e3a29172906294f9d202a93295329809ca62a1f2a062aaa98e82988295a293f163f27cb268c26c81996100197229c011796100197229c011700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f881c8b75826f950f881c8b75826f958e1aa0208b208ca9a5935e0ce79910abbf99cb9d9e9e45a56b928d96d096f99a1a03749c1f9e8aa39d1bbc12ea93c0a0bf1826181f17ad96d721ed20a720409d7025b62439242ea05525b1242524c79e431c831ca81c5e943d2884275e27729c3a2ae12966291a9e712beb2aba2a3e9e4e2c042ca32bde9add2c822c892c0997b12c7c2c702c1a18732a512a2b2ac61bc51bbc185d12e41bc51bbc185d12e41b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f8aa98e0c8cca967f8aa98e0c8cca964a1aec1fa41f01a93007e718060dfcaad199ff9d209e93a80c94709685960c9c9d10f49c369f1ea41d1a9291d69a31a24e180d18f1162c97b8221122de21c79e41265b2507258fa037266525ff24ea9e151bd11be81b60924529dc28a028749cb62bc02b4c2bee9ae72cc12c992c449dfb2dc02da92d289c3a2fc72eb92ee691da2f932f862f6c1c9b2da62d712dca20871f961f7f94e120871f961f7f94e1200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000731eb9200e23e8a6731eb9200e23e8a6721c2822692292a9248c74148f8c5fa90b9c37a0b0a044a93e9dd0a112a350a87010fa9c289ff6a56120861c6e1905a4e923ce21c9204ba2bb250f25812464a15827fb264e2685a1ff28a3287228c2a1462af829f029a09f1d2cc12b692b08a0d92cd02cb32c949c432e042ef62d729b1730d12fca2f0e98663132311f31651c603231322432032065317e31563113269e2210242d2104279e2210242d2104270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c60bd90ed911d49cc60bd90ed911d49c8a15231c831bf6a5a3032a158689a2a50c92a0959a95ae9d0498c49d199f53a4da17d39cde9ea5a433205d188689e8a2792354215320f7a1d125ed2462245da1bf27f0265c2658a04129b0287e28e29fa02aeb29f629649f6f2c222c142cb79e872d652d302dc29d4a2f012ffb2e069cf230bc30b1300892f532aa32b932241fc434a334a0347c24303533352b350d2b4d2be42a652ade2c4d2be42a652ade2c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000261c7e205d2206a6261c7e205d2206a615195b1ec81db4a6738aef888390aba60198469da89deaa5c898389e659f21a5d518d596659aafa31b21a91ef01c6ca1d5232c22ac21e89f0e2676254d25569dfb276d274a27529e5e291f29ee28639dc52a682a4f2a439d972c602c3f2c549dda2db32d892d009ca52f5d2f7b2fe69652311d31293134129c336f338833661f793565355e35822571376d375f37e32dc933dd33cf33c735c933dd33cf33c73500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000261c7e205d2206a615195b1ec81db4a6738aef888390aba60198469da89deaa5c898389e659f21a5d518d596659aafa31b21a91ef01c6ca1d5232c22ac21e89f0e2676254d25569dfb276d274a27529e5e291f29ee28639dc52a682a4f2a439d972c602c3f2c549dda2db32d892d009ca52f5d2f7b2fe69652311d31293134129c336f338833661f793565355e35822571376d375f37e32dc933dd33cf33c735000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006f1dd5213c2445a7ef19a420ad2079a8e58dfc169811a1a8f598079d169ccda8e19bd2a035a117a86f991ca0bba02ba60615700a321546a4e21be613d59508a1c7204e20821e4ea0cc22d221fa20e6a013240a232f22c99fd0240e240023149d8525e2248524059df12568250025539c4b26ce25aa25fa997026be259c25dd9a462683259c25799a3a25ca24ca24328da5210921bc20f316c896da98969b8b8d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000460a6c0e2714c39c0519c31f7420fca7ee120d1c281b85aae896359c1c9bada8879108962996a59cc0939e995b9a6aa2b0187307e691d4a05f17061664151b992e20881d901b6a9fb02351211c207fa1c0224c214820e79fcb199119e519c694262562245124899c7727f9263526949d3528b0277227659c9d280228e927459b9b2816281b28439902278b264026fc9410240123c2216d155f98ff9ceb9e7495000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de06c90d13132f9cbd192b20ba2028a9860746161c0e0eac949a539f6aa066a83085948f78905e94d108e6031102868d4d18c586c9963e9e52146114d8122096672160208f1f889ede24ec23322362a0712453235c22e29ea01abf1a101b2a949026d8255a25109dc3287028c627d69e3a29172906294f9d202a93295329809ca62a1f2a062aaa98e82988295a293f163f27cb268c26c81996100197229c01170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f881c8b75826f958e1aa0208b208ca9a5935e0ce79910abbf99cb9d9e9e45a56b928d96d096f99a1a03749c1f9e8aa39d1bbc12ea93c0a0bf1826181f17ad96d721ed20a720409d7025b62439242ea05525b1242524c79e431c831ca81c5e943d2884275e27729c3a2ae12966291a9e712beb2aba2a3e9e4e2c042ca32bde9add2c822c892c0997b12c7c2c702c1a18732a512a2b2ac61bc51bbc185d12e41b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f8aa98e0c8cca964a1aec1fa41f01a93007e718060dfcaad199ff9d209e93a80c94709685960c9c9d10f49c369f1ea41d1a9291d69a31a24e180d18f1162c97b8221122de21c79e41265b2507258fa037266525ff24ea9e151bd11be81b60924529dc28a028749cb62bc02b4c2bee9ae72cc12c992c449dfb2dc02da92d289c3a2fc72eb92ee691da2f932f862f6c1c9b2da62d712dca20871f961f7f94e120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000731eb9200e23e8a6721c2822692292a9248c74148f8c5fa90b9c37a0b0a044a93e9dd0a112a350a87010fa9c289ff6a56120861c6e1905a4e923ce21c9204ba2bb250f25812464a15827fb264e2685a1ff28a3287228c2a1462af829f029a09f1d2cc12b692b08a0d92cd02cb32c949c432e042ef62d729b1730d12fca2f0e98663132311f31651c603231322432032065317e31563113269e2210242d210427000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c60bd90ed911d49c8a15231c831bf6a5a3032a158689a2a50c92a0959a95ae9d0498c49d199f53a4da17d39cde9ea5a433205d188689e8a2792354215320f7a1d125ed2462245da1bf27f0265c2658a04129b0287e28e29fa02aeb29f629649f6f2c222c142cb79e872d652d302dc29d4a2f012ffb2e069cf230bc30b1300892f532aa32b932241fc434a334a0347c24303533352b350d2b4d2be42a652ade2c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000261c7e205d2206a615195b1ec81db4a6738aef888390aba60198469da89deaa5c898389e659f21a5d518d596659aafa31b21a91ef01c6ca1d5232c22ac21e89f0e2676254d25569dfb276d274a27529e5e291f29ee28639dc52a682a4f2a439d972c602c3f2c549dda2db32d892d009ca52f5d2f7b2fe69652311d31293134129c336f338833661f793565355e35822571376d375f37e32dc933dd33cf33c735000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044205e1d011e36231322391cdb1cbf22cb25cc1a4e1c492308264b1705183825c122080d13120627b51b0f901723c6291518429323288d2cdb1c2810b6291e2dcb1e221a2c2b5b2d2b208f1e1a2c1e2dcb2158212f2b8a2b22247c24be274026dc25de262c28f1225d27952827295d2095282229b129201dc9296c2ad92ac419d92a872b922b0f148b2b432c0b2c3e94a32cf82c782c2299812c862c212de50d000000000000000000000000000000005690611b08165f17df1af41f981cf61c981d53212a1d2a1db624b5257925b120d927b528002816223d28962835286e222f279b276e268520c91c5f1d3d1f0c21000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d10c01be31aa32405855d1a6d1818257c978c15ac934a249a9b310d739c2326bb9bed9312a0cd26f7996c12bf9f56279098270dae8e7a2900000000eb18bc1d00000000da1d651eba1d461f9d2a9d2a9d232f24e4289929f02385247a247e25cb244c256b250e23fa2327250725701fa02832293329531cbb2a782bcc2b351c462cb12cb02c0715e92c612d232d179a1b2e772ebe2d149df22df62dbc2ea59500000000000000000000000000000000062d1d2dae2cdb96682dbf2d3b2d0720052ecd2e922d88216b2ebf2e7a2e0a25952e052f702e0325cd2e342f6d2e9e25e02d7b2e262d3b238a2ce42ccd2d0f27000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e902d0a4b88d019ea9aa116f9076424e49baa148f95532470920782f092811c3b9c848c579fc425099c791535a00d280e9aac1024a1302700000000bb14751c00000000e919ed1c8a1c20209523102816214e2235221e268f1d0420891ffd1de624c92542253d22d6286f296329cc1f5a2abc2aba2a831b3e2c892c8d2ca91a432d992d8a2d1a90192ea52e562e179e06303c30822fb29ff72f09307830799d000000000000000000000000000000002e2e602ec42db5a5052e8b2ef02d8713e32dd12e702d7d1ca12ef42ed82e4524832ef62e912e5e23842eae2e682e1224b22ecc2e4f2e1e1a022c882d082d10a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b894ed822f91a71b259bb212d193c8248f98be12d6923e24881181144619cf1b479a3f13589cf325009ce2198e9cbb279f9c311145a0c4260000450035946d190000f80b870a1e1a691cd11feb198225cf206c214a1c3325351d711f661dc51d8c24512514244221b5280d29a728901dc12a002bbb2aaf18b32cdb2cd52c74102f2e732e692e4a9a9c2f1e30bc2ff1a13c317e31d9309fa24e315231da3114a20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a990e951898141d349f7397b49d85257e9dc498a19ec825839f76995ba080272d9fd29768a089273f9e6f9483a00e28c09cde08839fd926029377099a96f71b60875614b68d671c231a891d4a13a124241f9220371cc924b71d981f6b1daa1c792423258223f8214a2890280d280b1fa12a9f2a4b2a4d19da2cda2cd42c3111dd2e1f2ffb2ecf9b8330de3090304fa4a83204332732eea50d331533ce33c1a60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e9ff69d70a0e524c4a0459ea2a1dd26449f129d5ba18b269c9f819ba6a0782710a02e9819a03028b29ef689c09f7128399d5f17999d4f28719abb18759c5b27d7953e1a949747217515e51dc9988e254d1d3720c817bd25dc207d22121ef5241a24b3243d22ab223826a8267a25541e5a295729c328a71e362c372c282c5a1d732eaa2eab2ecf9c8930ef30953066a5a53307340633d2a868347334f434daab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aa008a082a18d24ee9e619e63a1cb24469de29c38a1e9239d99419a419d3421559bb499569f8125e29c8c9a6fa08927659cd990e29ead265a98b1126e970720c294681bd4996526940a7c1b1a99772609151c1c4d9965253a1b6e1e4b8e0425c81f2520021a1523af22b722b41fad1ec3251f251d244f17e028ca288d280c1c0f2c4b2c1e2c8f9f0a2ef42e3c2edaa796322a33fc3145ac8234ac340f3573b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004aa0d8a0f4a2452423a0c3a07ea3c824fd9ef19fc7a2e123e19e989f72a2ae23b29e209f98a2aa238b9d639ee6a124235b9de89d94a145227e9d719e6aa26a22979d179fdfa24721779de29eeaa23220f49d2d9f6da39f205a9ee19f36a33220eb9dde9f12a30f1e979dbf9f94a2d915689e23a132a3411a4c9f79a052a2371ceaa0bc9f4ca3db9ff0a0659c01a48da89fa0c3a0bba757ad7eacd0acbbab63b60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044205e1d011e36231322391cdb1cbf22cb25cc1a4e1c492308264b1705183825c122080d13120627b51b0f901723c6291518429323288d2cdb1c2810b6291e2dcb1e221a2c2b5b2d2b208f1e1a2c1e2dcb2158212f2b8a2b22247c24be274026dc25de262c28f1225d27952827295d2095282229b129201dc9296c2ad92ac419d92a872b922b0f148b2b432c0b2c3e94a32cf82c782c2299812c862c212de50d000000000000000000000000000000005690611b08165f17df1af41f981cf61c981d53212a1d2a1db624b5257925b120d927b528002816223d28962835286e222f279b276e268520c91c5f1d3d1f0c21000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044205e1d011e362344205e1d011e36231322391cdb1cbf22cb25cc1a4e1c492308264b1705183825c122080d13120627b51b0f901723c6291518429323288d2cdb1c2810b6291e2dcb1e221a2c2b5b2d2b208f1e1a2c1e2dcb2158212f2b8a2b22247c24be274026dc25de262c28f1225d27952827295d2095282229b129201dc9296c2ad92ac419d92a872b922b0f148b2b432c0b2c3e94a32cf82c782c2299812c862c212de50d812c862c212de50d5690611b08165f175690611b08165f17df1af41f981cf61c981d53212a1d2a1db624b5257925b120d927b528002816223d28962835286e222f279b276e268520c91c5f1d3d1f0c21c91c5f1d3d1f0c210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d10c01be31aa3249d10c01be31aa32405855d1a6d1818257c978c15ac934a249a9b310d739c2326bb9bed9312a0cd26f7996c12bf9f56279098270dae8e7a2900000000eb18bc1d00000000da1d651eba1d461f9d2a9d2a9d232f24e4289929f02385247a247e25cb244c256b250e23fa2327250725701fa02832293329531cbb2a782bcc2b351c462cb12cb02c0715e92c612d232d179a1b2e772ebe2d149df22df62dbc2ea595f22df62dbc2ea595062d1d2dae2cdb96062d1d2dae2cdb96682dbf2d3b2d0720052ecd2e922d88216b2ebf2e7a2e0a25952e052f702e0325cd2e342f6d2e9e25e02d7b2e262d3b238a2ce42ccd2d0f278a2ce42ccd2d0f270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e902d0a4b88d0193e902d0a4b88d019ea9aa116f9076424e49baa148f95532470920782f092811c3b9c848c579fc425099c791535a00d280e9aac1024a1302700000000bb14751c00000000e919ed1c8a1c20209523102816214e2235221e268f1d0420891ffd1de624c92542253d22d6286f296329cc1f5a2abc2aba2a831b3e2c892c8d2ca91a432d992d8a2d1a90192ea52e562e179e06303c30822fb29ff72f09307830799df72f09307830799d2e2e602ec42db5a52e2e602ec42db5a5052e8b2ef02d8713e32dd12e702d7d1ca12ef42ed82e4524832ef62e912e5e23842eae2e682e1224b22ecc2e4f2e1e1a022c882d082d10a0022c882d082d10a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b894ed822f91a71bb894ed822f91a71b259bb212d193c8248f98be12d6923e24881181144619cf1b479a3f13589cf325009ce2198e9cbb279f9c311145a0c4260000450035946d190000f80b870a1e1a691cd11feb198225cf206c214a1c3325351d711f661dc51d8c24512514244221b5280d29a728901dc12a002bbb2aaf18b32cdb2cd52c74102f2e732e692e4a9a9c2f1e30bc2ff1a13c317e31d9309fa24e315231da3114a24e315231da3114a200000000000000002e2e602ec42db5a5052e8b2ef02d8713e32dd12e702d7d1ca12ef42ed82e4524832ef62e912e5e23842eae2e682e1224b22ecc2e4f2e1e1a022c882d082d10a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a990e951898141d3a990e951898141d349f7397b49d85257e9dc498a19ec825839f76995ba080272d9fd29768a089273f9e6f9483a00e28c09cde08839fd926029377099a96f71b60875614b68d671c231a891d4a13a124241f9220371cc924b71d981f6b1daa1c792423258223f8214a2890280d280b1fa12a9f2a4b2a4d19da2cda2cd42c3111dd2e1f2ffb2ecf9b8330de3090304fa4a83204332732eea50d331533ce33c1a60d331533ce33c1a600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e9ff69d70a0e5240e9ff69d70a0e524c4a0459ea2a1dd26449f129d5ba18b269c9f819ba6a0782710a02e9819a03028b29ef689c09f7128399d5f17999d4f28719abb18759c5b27d7953e1a949747217515e51dc9988e254d1d3720c817bd25dc207d22121ef5241a24b3243d22ab223826a8267a25541e5a295729c328a71e362c372c282c5a1d732eaa2eab2ecf9c8930ef30953066a5a53307340633d2a868347334f434daab68347334f434daab00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aa008a082a18d242aa008a082a18d24ee9e619e63a1cb24469de29c38a1e9239d99419a419d3421559bb499569f8125e29c8c9a6fa08927659cd990e29ead265a98b1126e970720c294681bd4996526940a7c1b1a99772609151c1c4d9965253a1b6e1e4b8e0425c81f2520021a1523af22b722b41fad1ec3251f251d244f17e028ca288d280c1c0f2c4b2c1e2c8f9f0a2ef42e3c2edaa796322a33fc3145ac8234ac340f3573b08234ac340f3573b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004aa0d8a0f4a245244aa0d8a0f4a2452423a0c3a07ea3c824fd9ef19fc7a2e123e19e989f72a2ae23b29e209f98a2aa238b9d639ee6a124235b9de89d94a145227e9d719e6aa26a22979d179fdfa24721779de29eeaa23220f49d2d9f6da39f205a9ee19f36a33220eb9dde9f12a30f1e979dbf9f94a2d915689e23a132a3411a4c9f79a052a2371ceaa0bc9f4ca3db9ff0a0659c01a48da89fa0c3a0bba757ad7eacd0acbbab63b67eacd0acbbab63b6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004aa0d8a0f4a2452423a0c3a07ea3c824fd9ef19fc7a2e123e19e989f72a2ae23b29e209f98a2aa238b9d639ee6a124235b9de89d94a145227e9d719e6aa26a22979d179fdfa24721779de29eeaa23220f49d2d9f6da39f205a9ee19f36a33220eb9dde9f12a30f1e979dbf9f94a2d915689e23a132a3411a4c9f79a052a2371ceaa0bc9f4ca3db9ff0a0659c01a48da89fa0c3a0bba757ad7eacd0acbbab63b6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000db233c1bb01c7e22ad27901b8b1e3825402a8b1a161c4e24332a65971098a92443295c9a60985426b0240790ef23cb29c719e8136c297f2ba3187b17ae2a212b841c5d1b0f2c9b2b7c1f1120002df92b67213b21e02c9c2b122339241e292727b5256e26be27dd20aa2729280029721c8c289c28a4294513ff29222abe2a1b8d352b252bc42bdd96532b9e2b0b2c989c4f2c702c8e2cb29feb2c7a2c332d069f00000000000000000000000000000000eb89b41b76940217f72784272d27a522ea29c9295529bd23c52ac42a2f2a7622462af72ad829cc238b2afb2a9e2a9923fc2b532c242c7e2479290729342a9c270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000db233c1bb01c7e22db233c1bb01c7e22ad27901b8b1e3825402a8b1a161c4e24332a65971098a92443295c9a60985426b0240790ef23cb29c719e8136c297f2ba3187b17ae2a212b841c5d1b0f2c9b2b7c1f1120002df92b67213b21e02c9c2b122339241e292727b5256e26be27dd20aa2729280029721c8c289c28a4294513ff29222abe2a1b8d352b252bc42bdd96532b9e2b0b2c989c4f2c702c8e2cb29feb2c7a2c332d069feb2c7a2c332d069feb89b41b76940217eb89b41b76940217f72784272d27a522ea29c9295529bd23c52ac42a2f2a7622462af72ad829cc238b2afb2a9e2a9923fc2b532c242c7e2479290729342a9c2779290729342a9c27000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20def18cc194722b20def18cc194722530f0a16e9175f25bf20fd131a092d26c72411928f9d8928871fda9a6ba10c29519c3693029ea9297a9d5819c026552cdc908f199c2bd02b1d1d701eac2db22c7120de20cc2e4a2d18230924862c2b2c2524c024532653269524a024f4248a21381eca1f291f2a1c4a285728c928151b802b8f2b0f2c0818802c892cb72c3798c32ce62c212d769fbc2dd72dd22d63a16c2ee62db32e00a16c2ee62db32e00a1002ebf2d7e2dfc90002ebf2d7e2dfc90c22e9c2ec02eb422c52ed62ec92e14249c2e9d2e822ebb228d2ed62e7c2e0f24492e982e642e0e240e2e6e2e042e94225b2eb82dc02ebb255b2eb82dc02ebb250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e8041091201e3139e8041091201e3132c9cb90cca88fb24189f3a95f09afd2641a07698a3a0bc26cba1d89ad8a23b28709fcf95d2a36428479fc1108ea26929ee98931bb2294b2c0818301dc92e032eac209821fb2e6d2ef92199238229bb2a4621e522ee215d23bb259b258a25a3219c280329da28331b4b2a8c2a9c2ae18e4f2c6b2c5c2caf986b2d672d9b2da99e0b2e1f2e482ef1a2902f9c2fa32ff7a433309e2f5a3010a533309e2f5a3010a5092f1d2e1e2e2da6092f1d2e1e2e2da6832f872f992f329d942eba2e9f2edc1c282e3f2e302ecf1c4d2e8f2e362ed31c052e5b2e3c2e7120732ea12e852e2214622f5b2eaa2f3da3622f5b2eaa2f3da30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fb80d48c96140000fb80d48c9614329fd68d63990e269b9f4f95269de427949c7618919914283ca1f4989da1582840a0e009b6a1ac2803a0b81052a3a428ee9a8016c1a021275389b61c45227529c21d5f219725f329b720b322de22f92683210a23a5205d225125b5257224c1208028f22823283118d02a062b732ae695d22ce12ca72c099d4f2e492e6c2e9fa2762f952fa42f76a6e430e430dc303ea891311231a93105a991311231a93105a90000000000000000092f1d2e1e2e2da6832f872f992f329d942eba2e9f2edc1c282e3f2e302ecf1c4d2e8f2e362ed31c052e5b2e3c2e7120732ea12e852e2214622f5b2eaa2f3da30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0904f9084939d16a0904f9084939d16f49e4c994e9e172627a0019bac9f542782a10d9bb6a1ba2876a1949915a31829d1a0c79769a38f29e79ff78a54a2d528059c071897a03a27b8947d1a02973826391bc51f491af8275f1fe321571db8243b21ca226c20212172242c255923d42000283e282c27870f712a682ac729e59cd02cc92c862cbaa2e32ed32eec2e63a6513060306030aea905321e32f8311bac4d33ad32733354ad4d33ad32733354ad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009599039a5b9c8d1f9599039a5b9c8d1fac9fff9cc3a0ee2513a0169da5a19d27d9a0849cdfa17728e0a02297e3a093281ca0fd1560a06928429e0018559f0728109cce1a359ef0268598c11c7c9c1725ba0aef1e7b999425931b3521f014a12497201823971d8723412354248921881f19267d26ee240c90fa28f628622800a0142c082c862bc2a55b2e272e362eb1a9373048304f3017ad9c32b4327632d9af5734113478343db15734113478343db1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069a072a0f1a2312569a072a0f1a23125fca098a071a3b825bea0f19eb4a2d0254c9fcc9c66a131262f9f1d9671a01f284b9ed418e89e69287f9c4c1d539c9127b6991320b19467248c97ae20da8eac254f8be220c20e2c251415c220cd0eff24c71b412054151b24c21eaa206c1a5c200622ef21ab1e2199e92499241a23b8a39f286028ba27baa7c52b3d2b692b18ac832d812db12d9daf3b314f313731c5b2eb3389331634eab4eb3389331634eab400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fa120a231a410252fa120a231a4102594a0c6a132a4e024779f81a06ea34424439f6f9f76a25523969e669e42a22523d59dd49ef7a1a223ee9d1aa085a22624149e28a0f7a2bb23a19db79f00a35421789dcc9e02a33a19069e959e5ca3c617eb9df59e01a3378d609df89e1aa3de94c39d00a046a344a0309d40a16da309a4589d3ea135a209a8229fcda1e2a1c0ac20a3faa154a374b064a379a372a344b414a6c4a82aa5c7b614a6c4a82aa5c7b6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fa120a231a4102594a0c6a132a4e024779f81a06ea34424439f6f9f76a25523969e669e42a22523d59dd49ef7a1a223ee9d1aa085a22624149e28a0f7a2bb23a19db79f00a35421789dcc9e02a33a19069e959e5ca3c617eb9df59e01a3378d609df89e1aa3de94c39d00a046a344a0309d40a16da309a4589d3ea135a209a8229fcda1e2a1c0ac20a3faa154a374b064a379a372a344b414a6c4a82aa5c7b60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005427521d431e5b253d2af71c7e1f3126d9296415bd15c722d928a49aa49bb920902a49a0e1a0ff24b12a289bc21da0287d22220b422842289c1c2f145e294125ed1cd817b12afd249e1d821c282c8f27ae1f021e552c672810238b23b3292124d425db260328fd1aab272c28b128a78c9228852864292a98a529022a252aa399c02af42a1e2b0d9ded2a2d2b8d2b559f092c282c272cf4a0392c272c572cd1a10000000000000000000000000000000008171720851838197e283c280128761f682834296828951ffc258725b625f41e3f27d52762260520dd295f2a0b2a60207f2c832c502ccb22192c4c2b9e2b562400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005427521d431e5b255427521d431e5b253d2af71c7e1f3126d9296415bd15c722d928a49aa49bb920902a49a0e1a0ff24b12a289bc21da0287d22220b422842289c1c2f145e294125ed1cd817b12afd249e1d821c282c8f27ae1f021e552c672810238b23b3292124d425db260328fd1aab272c28b128a78c9228852864292a98a529022a252aa399c02af42a1e2b0d9ded2a2d2b8d2b559f092c282c272cf4a0392c272c572cd1a1392c272c572cd1a1081717208518381908171720851838197e283c280128761f682834296828951ffc258725b625f41e3f27d52762260520dd295f2a0b2a60207f2c832c502ccb22192c4c2b9e2b5624192c4c2b9e2b5624000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021ac71ab51bf925021ac71ab51bf925a524d615fd1622274129710f19116227312c390a5a9d79281f2c979970a20029de27be9cfaa3a02a7ca01d8c9926b92cf195ef1ccc2c682cf71ccc1f392f1e2cfd205b212530682c23239323232e5d2b38243c25ea27dc241825de24f0242f201f2072204b1f921922283e287c28770d0d2b4e2b932b3a9b392c4b2c572c3e9e642c722ca92c64a11e2d392d2c2deba3662d3a2d832df7a4662d3a2d832df7a4592ed52e562e951f592ed52e562e951f512e7c2e1a2eba1f4d2e8e2e362e95207b2e972e942e7121932eb62e962e2e220b2e242e192e57216a2e692e142e09228d2ed72d362e83228d2ed72d362e8322000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099bd31842104126099bd31842104126199d320f249467274e12698a569dbe286926e09b48a419296d25229dd8a4212965a11a9f09a73f2a82a4bc9c1da60a2b21a08b1d892df22d3115c51fb030de2d3520cc217d311d2ead23ac23fb2e7c2cd2239824ca24b6232526cc254125f21d8d28c6285428e394eb29012a152a599eb62b052cc52bc3a0062df72c112d4ea3852d832daa2d4aa5762ea12e6a2e86a6c92e972ec82e48a8c92e972ec82e48a8492e982e0a2e8193492e982e0a2e8193c52df62d912dbf19742de92d582d701ea92dbb2de62d3420e32dff2d012e4820762dc32db42d4721632e4f2e262ef51e792f402ec92ef793792f402ec92ef793000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a19e7e98329f7c27a19e7e98329f7c2755a0a4999c9eeb271da0c799bb9e8b2804a27d9d4fa10c2909a4ea9e35a40a29b6a1009f13a6782995a26c9b42a65c2937a0b419e11fbf2ad49ecd1dc12fc72e831fc9210931de2e6a223024e72c932b0424e92427253224c225c425fa24f11e34289c28ed275b8f2c2a412aee297c9f2d2c5d2c1d2c77a3a22d872d8c2d47a6802e742e9a2ebca8fb2f0530d22f22aa3f3022302e3032ab3f3022302e3032ab0000000000000000492e982e0a2e8193c52df62d912dbf19742de92d582d701ea92dbb2de62d3420e32dff2d012e4820762dc32db42d4721632e4f2e262ef51e792f402ec92ef7930000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e89e839bf39eb825e89e839bf39eb82505a1059defa06d286ea2ce9ddca1cd2822a32f9e3ea3dc2970a2d09d85a4972920a2969e72a57f29c4a13d9dcda5de280da02695c4a43528c79a72151099c0288f1aa71f5d27e42aa11f3c2269258526a722f1234823852167242d251424211d2d27c9279d267e9c9d2998291b29e7a3f12bfe2ba02b3da7de2db82dac2de6a9332f162f242f44aca630ac308430b2ad1431e9300031a7ae1431e9300031a7ae0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad9ec39ec4a14826ad9ec39ec4a14826d1a0ad9ee1a21228b8a1d69e3da38b288ba2439f01a4fd289fa2d99cb5a31829d6a10e9b90a3b528dea04a9980a31228d69e0c8c3da286261c9cf31771a0732641914a1d699ad725fb1a3b20ad18b7231e20e322151ff520a2225724fa21b11a49250826a724da9d212813285c27f5a4602a7e2ae52903a9fe2cf32cb62c64acb32e8e2e952ef4aeb530b1308230c9b05d3114312a3188b15d3114312a3188b1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095a067a15ca4082695a067a15ca408267da11da14ea41a26c2a1c2a047a4d52715a1fe9e21a4c928e6a08d9c52a375281fa16b9cf3a3db270da1799d5ca4c526d5a0a89c2ea48a253a9f14982fa2c823739c9518669e552180923e1e8e95df1fcb19bf20fe18bf20531e81218d1c8d1c11218f21ee1e99a1d223a423c32120a76c269626532526aabc295b290c29b1ad032ceb2bc32bb1b0822e3c2efd2d05b3e82f3a2f7e2f3eb4e82f3a2f7e2f3eb40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d8a06aa26fa4a424d8a06aa26fa4a42480a098a14ba46e24d29f8ea025a36023da9fd0a07ea3fb2393a06ca158a4a42421a17aa24aa5612508a146a266a5fa24c4a0f7a124a50d235aa0a3a122a5322134a060a1e7a4e71e7b9fc6a05fa41c135a9e7a9f5fa318a0199dc49e84a225a0d99dfe9ff1a2faa3379e5da088a2a0a7689ebfa076a2c0aa7a9e2fa03ca24bae4da258a2a3a353b1cfa0cda09ba315b416a1f2a307a4ecb416a1f2a307a4ecb400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d8a06aa26fa4a42480a098a14ba46e24d29f8ea025a36023da9fd0a07ea3fb2393a06ca158a4a42421a17aa24aa5612508a146a266a5fa24c4a0f7a124a50d235aa0a3a122a5322134a060a1e7a4e71e7b9fc6a05fa41c135a9e7a9f5fa318a0199dc49e84a225a0d99dfe9ff1a2faa3379e5da088a2a0a7689ebfa076a2c0aa7a9e2fa03ca24bae4da258a2a3a353b1cfa0cda09ba315b416a1f2a307a4ecb4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f62646194018b624522a4e18ef183926a628538960953d226525aa99129dbe1fcb2ae8a10aa30e269d2ce49f9da371283c247aa1c3967f2598166c9b6724d5174e1bad9615231523b71d2c8cbc20a122191f8e125c29cc1b0e222a2350280597a925d32644271e964b2712286c2818997e288e2834297e9c8529dc29f1296d9d7a2aaa2abc2a089fd12af52a4f2b53a0ae2bfe2b082c49a1752b902ba92b11a300000000000000000000000000000000b520082480216519c82a4d2a802a711e022c092ced2bdd1d412b042b022b511cc12ba32b472bbe1a032c272c012c3519bb2ccd2cb12c351e522c5a2cfe2b9b1c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f62646194018b624f62646194018b624522a4e18ef183926a628538960953d226525aa99129dbe1fcb2ae8a10aa30e269d2ce49f9da371283c247aa1c3967f2598166c9b6724d5174e1bad9615231523b71d2c8cbc20a122191f8e125c29cc1b0e222a2350280597a925d32644271e964b2712286c2818997e288e2834297e9c8529dc29f1296d9d7a2aaa2abc2a089fd12af52a4f2b53a0ae2bfe2b082c49a1752b902ba92b11a3752b902ba92b11a3b520082480216519b520082480216519c82a4d2a802a711e022c092ced2bdd1d412b042b022b511cc12ba32b472bbe1a032c272c012c3519bb2ccd2cb12c351e522c5a2cfe2b9b1c522c5a2cfe2b9b1c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a1ca01889112f288a1ca01889112f282a28fb09388cc828d12a7e8b2293dd28972d28921fa083299a2dc49c47a5642a822c609f01a8122bee19bea019a3f62a20a2dc156a280d2a6513bd1deb2f1429db207e21f030bc2813228921742e3a264a238b240326e11ddb240f25b024f518f8246f251d259c0c4d28b028e028eb9c882ad92ae22a28a0c72b052c092c35a1222c322c522ca7a2a82cd52cdb2c1ba4982ca52ca32c98a5982ca52ca32c98a5672e952fdb2e161d672e952fdb2e161deb2e202fc82ecb208d2e602e4e2e871e622e6e2e612e9c1e952e702e642e271d342e252e082e411b5b2e472e2d2e201d842e652e1d2e0a1b842e652e1d2e0a1b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a9e57152b9815283a9e57152b9815286a9e2894b89d4e29a226539798a0a929662d659d08a4712a04307f9977a5db2a712a86a017a9532b61a71ea16fa9af2aa4a33d0c8a2a2f2c0e9f90190d31822b281eea20a932bf2b33221e22c52ff728b62212249522571e942579258424b80e1e286f28bc27a99c31296f2972294aa1d22ae72ae62a49a3612c592c602c05a5f82cec2c0c2daca5bb2dc22db82dcca6852d7e2d892da1a8852d7e2d892da1a86b2eaf2f202f0c1d6b2eaf2f202f0c1d7c2ee82e712e6b20b22d952d972d5420a92d8b2dc62d3d21cd2d892da62d3c21ab2d632d712de51c142e912dd12dd793092f1f2fd42e049f092f1f2fd42e049f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037a1389abfa0792937a1389abfa0792971a1099b4a9fd32833a1049cb5a18029af2385951ea4fd29b82a609938a7292bd519f2a0cfa88e2a1aa608a1bca99b29a4a2fd92e59e9c2a94a27e1b8c31812da91e4a20a5334e2d3a218821a12fb92a7322d823e024882122254b256224af159e271d280b27369e1d2972291b29a6a20b2b2c2bf92ab6a5aa2caa2c932c1ba8832d712d7a2d0da9862ea12e802ef4a9642e752e722e29ab642e752e722e29ab00000000000000006b2eaf2f202f0c1d7c2ee82e712e6b20b22d952d972d5420a92d8b2dc62d3d21cd2d892da62d3c21ab2d632d712de51c142e912dd12dd793092f1f2fd42e049f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3a0b59deba02b28e3a0b59deba02b2823a2929d75a1ee2859a36c9fd1a24529f6a21fa0bea4e72986a51fa1cda6cc295fa5c2a1d6a77b29a1a347a187a887284ea3c99e2fa8c628a4a1669b5228fb2b1793be200930b32c701c3921842a4e28ff20252384232d2021249e24d2220b900826a1266f254ca05e288d281328f2a44b2a462aeb2975a8732c742c4a2c95aaa02d932d922d31ac022f0f2fea2e52ade82ee42ed82e23aee82ee42ed82e23ae00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fa18da065a361284fa18da065a3612885a2aa9f5fa3ed283ca36da01da42a296ba4c7a157a57b2977a488a104a64d290ba47da17ea69028cea393a119a77f27f4a1789f46a60f26719fb49a1ba43726999bed134e9ba8268115bb1e1b10ee22e11df121651c651cb121b4233e21ff987024042519247fa04026c726ac25f7a5b128be285a2880a9102bf72a7f2a49acd62cbf2ca72c27ae6e2e912e5d2e32b0742e642e5d2ea3b0742e642e5d2ea3b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ea040a20fa55c263ea040a20fa55c2660a241a2eea4302774a2b1a1fba4ad28f8a2bfa164a59628b3a283a1d1a53428dea2eca18aa69c27baa204a2a7a6772680a24da175a61d255fa139a078a55c2399a0669d68a44e205f9d3c949ba1471ae2132c1f2f961f90fe1c7921f31cb39b1d204b21241efba2bd2147226b20cfa76f24562400236aaa6a274a273e264aad572935291629deaf092cf02b9d2b83b10d2c052ce72b46b20d2c052ce72b46b2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a1f7a1cba4932408a1f7a1cba493246ca01da13ba42a243da0bda142a42024a0a107a377a52225dda244a496a6df252da348a4f5a6b62572a290a343a6752476a1a8a20ca6852171a19aa25ca6e91d82a1bba273a6700c3da160a2e9a5fa97ef9f8da045a47e9f259c009df0a04da0859db89fa4a2cba4d09d2ca0cea283a8a49d39a069a2ffaa5d9d53a00da2b3ad39a040a153a269b0619da09f00a138b204a233a261a3dab204a233a261a3dab20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a1f7a1cba493246ca01da13ba42a243da0bda142a42024a0a107a377a52225dda244a496a6df252da348a4f5a6b62572a290a343a6752476a1a8a20ca6852171a19aa25ca6e91d82a1bba273a6700c3da160a2e9a5fa97ef9f8da045a47e9f259c009df0a04da0859db89fa4a2cba4d09d2ca0cea283a8a49d39a069a2ffaa5d9d53a00da2b3ad39a040a153a269b0619da09f00a138b204a233a261a3dab200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042264612218bda2608292b949d96812852268c98719f29289829cd9cf5a0a526102c41a382a46c28972a0fa55ba8a328d224bfa2faa73e22310def9db59c7ea1d113e99d479deba3e114199fb0a0f8a7941e3f981e251ea5cd21d923dc25f49d56257a265226e598cb26a2272e282499332874280829de9b3e29a229c429209e242a3e2a642a059f592a982ad52ae89f3a2b582b6a2bcba00d2bf52a182bdfa200000000000000000000000000000000f022d424a0234b14252b6a2b222bf6183d2c772c282c6216c92b1e2cc12bd18f422c562c1d2cef95562c9c2c5f2c6996ea2c142dcb2c9d10402c562ce92b2699000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042264612218bda2642264612218bda2608292b949d96812852268c98719f29289829cd9cf5a0a526102c41a382a46c28972a0fa55ba8a328d224bfa2faa73e22310def9db59c7ea1d113e99d479deba3e114199fb0a0f8a7941e3f981e251ea5cd21d923dc25f49d56257a265226e598cb26a2272e282499332874280829de9b3e29a229c429209e242a3e2a642a059f592a982ad52ae89f3a2b582b6a2bcba00d2bf52a182bdfa20d2bf52a182bdfa2f022d424a0234b14f022d424a0234b14252b6a2b222bf6183d2c772c282c6216c92b1e2cc12bd18f422c562c1d2cef95562c9c2c5f2c6996ea2c142dcb2c9d10402c562ce92b2699402c562ce92b2699000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000811be7910995df27811be7910995df276627579a5a9cd129df2a7a99e89d272a7b2d309cdaa18f2af72dd9a128a73b2be42cf9a31daa502a2f2560a571aa892701a556a0269e9c243a9ff29b292b4922b11cbb16442db615bf21df1ef829199ad02240247224c495fb24b425f22432970627e227542711996528cf280729bf9dda292b2a272a75a00a2b132b2f2b80a16f2bb82bdd2b1ea2372c502c4f2c96a3302c122c1d2c57a5302c122c1d2c57a5422ec82e9c2ec291422ec82e9c2ec291852e132fb72e7218872e752e722e63185d2e7b2e4b2ee211882e982e512ee711082e3c2e162edc91472e542e352e6918522e692ee02d2e98522e692ee02d2e980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b9e0290119a4a270b9e0290119a4a27e4a02f97419e942a8728ce9b30a2a42a232ec0a012a5fb2be130ffa04fa8fc2bce2e59a2bba9062b87a524a4d5ab6f29e5a5749efe9fc627efa3a3998e2df626f2982294392fa7230820df1d3d29e11ccf21e122701def152825a325e123348f8d2726285827af9cc2282229272976a01c2a6c2a5c2a4da3772b652b8b2ba1a4452c472c6b2c37a5d82cf02ce92ceea5ac2c9f2ca92c32a8ac2c9f2ca92c32a8402ec92eca2ed513402ec92eca2ed513302ef12e802ef299792d5e2d632d9493612d5f2d682db499882d642d712dc99c1b2d422d382ddb93d22dba2dc52df419062f562f822e139f062f562f822e139f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d9a1219cdaa05529d9a1219cdaa0552925a39b9b1aa0de29b9a2a69efca2d52a7c2c839d5ca5782bd030c29d0ca83b2ccc2dc0a14ea9462a42a6e4a2f4a9a5289da3739e5fa81328aea10ba09c2dd9296112e10d56306228eb1e001fb0277e2376212e22a420651c5524fe24d922aa95022794275826399e8c28e728c8280da2f1293a2a352a81a5782b6f2b6e2b80a7702c602c6d2c64a8272d322d112d55a9162ded2c102d3aaa162ded2c102d3aaa0000000000000000402ec92eca2ed513302ef12e802ef299792d5e2d632d9493612d5f2d682db499882d642d712dc99c1b2d422d382ddb93d22dba2dc52df419062f562f822e139f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029a2a09f4fa2e12829a2a09f4fa2e128dfa29a9f15a38f291da501a150a42e2acba4b8a03ba5d92919218b9f54a84d2aed1e5ca33aa9732a67a4dba22ba91f285ea3bea1e3a91628b2a0399f22a3fc2745981517812c6026a01c5c20b2215d2228207a21da1c64198422c623d920249bc8251d26fc24aa9fc7271528792753a4262929291d29b5a7bf2a8e2a712a88a9372c322c1d2cecaa172d2d2df72c46ac052de12ceb2cbfac052de12ceb2cbfac0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bea1e9a048a4c428bea1e9a048a4c42867a347a046a48a295ba440a1bea48829fda46aa2c2a56d2963a5f3a243a72329f6a576a31fa8832881a5c6a366a8fb264ba450a3a7a816263ea18fa0f3a67d25999d199a67a3b924c1922c19c29ef020051c8220f415f618ff20ee224c200e99062482242c2385a092250c26462546a58127a427f826e2a81f29e128a12828abd42ac12a6e2acdac6d2c4e2c372c00ae622c302c302cb7ae622c302c302cb7ae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083a017a388a58a2683a017a388a58a2678a380a274a55628dfa2f4a172a5a3284da427a41ea7692832a460a4ada764282fa451a4e7a72328c8a3aca3b6a7c326c1a26ea21ba7f724e6a11ba16ea6252304a159a09ea574200a9f709c8ba3091a6596b2198e9d0d99321c9920d1163f9e6c1f6e21691e89a11221a4219d1f01a67e23d5225a2195a95c258d240a2458acf526b7261526d6ad0329d828502886af0329a7288f2833b00329a7288f2833b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2a0eea1f2a43324c2a0eea1f2a433240da022a149a4c92315a193a3a6a5e224a3a3c7a427a7f8251fa412a5fba7f82576a3b5a464a7fc241ca232a491a623247aa1aca372a6bb22a1a144a3b8a62b21e0a17aa296a7421955a1c1a2e7a65220799f9ca08ea4fb1eda99619b169e5815e39c9f9ec0a19aa2759dd69fcea137a83a9ea79fd9a13caa8f9c5b9f32a18bace59e4fa030a16eae2a9cef9dc1a007b00b9ecba0cea170b00b9ecba0cea170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2a0eea1f2a433240da022a149a4c92315a193a3a6a5e224a3a3c7a427a7f8251fa412a5fba7f82576a3b5a464a7fc241ca232a491a623247aa1aca372a6bb22a1a144a3b8a62b21e0a17aa296a7421955a1c1a2e7a65220799f9ca08ea4fb1eda99619b169e5815e39c9f9ec0a19aa2759dd69fcea137a83a9ea79fd9a13caa8f9c5b9f32a18bace59e4fa030a16eae2a9cef9dc1a007b00b9ecba0cea170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e23a792539c2a295227179c86a0e529a227279ee6a2012a262adda0a1a49b29f129b3a37ba633297628b7a456a8bc27b42164a375a6cb21d08c3ca1e3a4a79c6914a1a014a5f3a285144fa4bba799a53920650d369809a41c23de241525aa9d102597267026f699d026952729285d9a1b287c28e128a79a09297a298c29ca9ce129222a372aac9d0b2a642a912a879e962adc2af52a599fc12ae82af92a06a1000000000000000000000000000000009d20ae21b51f4d90fa2bdf2bb02b1110d02c422dda2c7810a52cca2c752c5896d42cfa2c902c769b872ce22c822c21a0e42c602dea2c149c642c7a2c522c629b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e23a792539c2a297e23a792539c2a295227179c86a0e529a227279ee6a2012a262adda0a1a49b29f129b3a37ba633297628b7a456a8bc27b42164a375a6cb21d08c3ca1e3a4a79c6914a1a014a5f3a285144fa4bba799a53920650d369809a41c23de241525aa9d102597267026f699d026952729285d9a1b287c28e128a79a09297a298c29ca9ce129222a372aac9d0b2a642a912a879e962adc2af52a599fc12ae82af92a06a1c12ae82af92a06a19d20ae21b51f4d909d20ae21b51f4d90fa2bdf2bb02b1110d02c422dda2c7810a52cca2c752c5896d42cfa2c902c769b872ce22c822c21a0e42c602dea2c149c642c7a2c522c629b642c7a2c522c629b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e12e193019823219e12e19301982321e322c39deea0a1295c29ba9e25a4c82bfe2c27a0c8a5a32b0b2e7ca26da8082bb02c70a4daa942298e9089a426aade25d8a23ea49eaa5820949ed2a270a9d3921e1400a007a8809ddc20721b90a2239dd5235b24ad21e399202512263e2527990b27c12790271a993f28a828d628229c6529c029ce29869e702aa62aab2af2a0ea2a342b582b8ba1992bd82bf22b86a2b22bdd2bf92b03a4b22bdd2bf92b03a46b2e9d2e172eea9a6b2e9d2e172eea9aab2e192fd52e7618ce2ed92e002f6c1bd32ed12e9f2e0312bf2eaf2e7f2efb91ab2d1d2edd2d8b9e162e852e232e6e98282e372e352e3a98282e372e352e3a980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007595548ce8961d207595548ce8961d2045a1179b1b9f1d2a8c2718a073a2582b772e09a1b6a6252cc83042a2eca8bd2b522edaa357a95b2ad2a48da40faa6628a7a483a31caa2d2476a0f5a0efa9ca1fba89369a63a8ba112c209d1ae0a3aa10c4226e22a10fa10f1a258625152392981e27b927b426af9c7d28d628d428389fab29062a042a86a1b12ad52acd2a17a3992bb82bf32b40a42e2c562c552caea40c2c2f2c2c2c5ca60c2c2f2c2c2c5ca6a52edc2e872e191fa52edc2e872e191f602ef12e852e101de32d9c2deb2d3822c72da92d882d4820a12d8f2d652da41ede2c3a2d0a2dc693c52d512ed62de619b12e0d2f0f2f371ab12e0d2f0f2f371a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eda2809daba1432aeda2809daba1432a87a4999d6fa0702b5fa509a169a3402c432a29a34aa6512c3030cda3f0a8102c3c2d8da43ea9022aeca54aa4e4a82e282aa44aa34ea90c2601a115a281a71b24218b519a9ea5d120f21ddb1cc8a1f51c3e223522211b1c166b24e4247b22c29582262f270526409c32288a285f2812a0582999298b291da48d2aa02a982ae1a5a42bd12bba2bf9a63e2c4e2c4f2cfca7312c2a2c282cbea8312c2a2c282cbea80000000000000000a52edc2e872e191f602ef12e852e101de32d9c2deb2d3822c72da92d882d4820a12d8f2d652da41ede2c3a2d0a2dc693c52d512ed62de619b12e0d2f0f2f371a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d5a281a03ca3e329d5a281a03ca3e32916a4d8a00aa48d2a93a541a2ffa4f02a73a644a461a7f72b5d1b2aa47aa9f72bb521dba4a2a9a22944a468a375a9e6278fa357a4bda9182751a034a2d0a7ee24429259988ba0c221b31ade1b4da1051d30204e20329032101723dd23a71f249b5d25b7257a24a69e07278127d326eca18528af288328cba5d029b6299e2932a8de2a082bd62a30a9d72b002ceb2be1a9c32bbf2bc12baeaac32bbf2bc12baeaa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ada224a2f0a45729ada224a2f0a457290ca488a1caa4452a35a5dea292a5642a33a625a428a7382a2fa7dda44fa8bb291ca894a46fa88928e3a655a520a98b2751a532a552a9f7252da356a359a88724319e799db0a45622c68cc51770a0c91ede1cbb1f0d901019cd20ab22af1e2399b7238224b122f69e2b259b25dc2407a4be26f0264e262fa75e283828ed275da96e296e2924297eaa5b2a0d2a142acaab262a432a3e2a3cac262a432a3e2a3cac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006a22aa4dea5052806a22aa4dea5052833a417a303a66e2908a46fa35aa6a428bea400a5fda77a28caa446a553a85328d6a491a5c4a8f72787a481a5d9a88f2601a401a598a8be2455a338a44da8de2180a11ba24ea7d81dde9d179eada48f1853965b8e2fa0e895bc1a12208410159d5b1f7521461d739ef02087217c1fc6a3ef2177227a201aa838241d24b92252aa65253225b624c4abaf267926f8257aac3027f426cb26eaac3027f426cb26eaac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069a1b2a293a5412469a1b2a293a5412431a07fa137a4e32219a3eaa405a7912599a4d1a540a843265ea4aba546a8b82527a48ea557a8ef24c9a38ba555a89e2499a365a563a81824d3a21aa551a8922344a111a4eaa7d32099a0cda29ca6ef1ebc9e58a170a5f71d429d00a0a2a21a1dc19e35a098a231a2399c6b9e7ba1dfa5d59d22a015a28fa81d9ca19e5ca163aa089e7f9f46a100ac079b009d08a0d0ac1a9b0d9d359d5aad1a9b0d9d359d5aad0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069a1b2a293a5412431a07fa137a4e32219a3eaa405a7912599a4d1a540a843265ea4aba546a8b82527a48ea557a8ef24c9a38ba555a89e2499a365a563a81824d3a21aa551a8922344a111a4eaa7d32099a0cda29ca6ef1ebc9e58a170a5f71d429d00a0a2a21a1dc19e35a098a231a2399c6b9e7ba1dfa5d59d22a015a28fa81d9ca19e5ca163aa089e7f9f46a100ac079b009d08a0d0ac1a9b0d9d359d5aad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de1c1598e697b0286821fc9d499fa529cb2494a162a3802ac92611a379a6c32ad82585a482a72c29d422b7a387a76d262416a6a4f2a71224c99693a5a5a8521c459726a6b8a88c9f6d13b7a46ca545a0fe20771eaa1ec79d4b240825b525c9993b259e26e426f597b826a3271128c2951c287d28bf282f98f8284e298129b499c229ff29222a029ae1294e2a742a289a2b2a9d2a9e2a3a9a6a2a912a8e2ad49d00000000000000000000000000000000f31f3d20f21dc6990e2baa2adf2a719ee62c682df42c47a0442d712d042de9a0982dc62d532dfea0332d5e2de72cafa2542d1e2e122d8ba1562cfd2c602cdba00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de1c1598e697b028de1c1598e697b0286821fc9d499fa529cb2494a162a3802ac92611a379a6c32ad82585a482a72c29d422b7a387a76d262416a6a4f2a71224c99693a5a5a8521c459726a6b8a88c9f6d13b7a46ca545a0fe20771eaa1ec79d4b240825b525c9993b259e26e426f597b826a3271128c2951c287d28bf282f98f8284e298129b499c229ff29222a029ae1294e2a742a289a2b2a9d2a9e2a3a9a6a2a912a8e2ad49d6a2a912a8e2ad49df31f3d20f21dc699f31f3d20f21dc6990e2baa2adf2a719ee62c682df42c47a0442d712d042de9a0982dc62d532dfea0332d5e2de72cafa2542d1e2e122d8ba1562cfd2c602cdba0562cfd2c602cdba00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c98f69cfe9cf2281c98f69cfe9cf228bf96ae9f63a0292b742069a04da4582c6c2816a4e6a66d2cdf2933a575a81e2b2c246da526a926298fa3cfa5a3a935275ea3d5a63babc822c89f6ca6aeaa2a187c900ba373a8099a052016147fa2be9a61240324ce210198b5258726df257994f926f12719286b942c28a328cc28739737299429b129e29a3e2a762a822adf9da02af62a042bdc9e172b5c2b472bed9e252b652b492b9fa0252b652b492b9fa0602e8a2e202e12a1602e8a2e202e12a1d22ecd2ebe2e0992c02e8c2e8f2e77980b2fd02eb22e8f981a2f182fde2e9c981b2e392ef02da09ed92eb52f8c2e85987a2e892fcc2eaf117a2e892fcc2eaf11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000129c10950a9e7c28129c10950a9e7c2855a0d19d9d9fa62c8999569f6ca3e12c162790a46da6ff2c3a2b9aa5cca8f12b0623fea4dca9dc2926a5f0a5c9a93c2824a545a5d8a9b52440a0e7a33ea96f2030992aa0e4a6911b9e1d32970fa4e8150023fa214e1a348f6525da254e246a98d4266827f626ff9940288a288928ae9b6f29b129be29909e7a2a8a2a902a43a01b2b552b752beea08d2bd22bcd2b14a1752ba12b682ba9a2752ba12b682ba9a2472f162f472fba25472f162f472fba25a62eb42ea92e7726c72d3c2dc42de526902e0a2e332e0d28622e3e2e3c2e1228342d8b2d292d9725ae2f4d303f2f3c280e3071304230f6280e3071304230f62800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011a2c19cc0a0f02911a2c19cc0a0f02913a4319f99a2c92cb8a488a1efa4372d83a411a41ba7ef2c531878a530a9d12b34a233a5baa8c72905a51ea53ba9792808a4c7a4b6a9db268ba10ba4e0a835239b9bd19f7ca7131fa617138e0ba4371954211621d618bd0fbf241f25fc22c79522260427d725ad9a092859282728569c2229782969293ba0502a5d2a5d2a6ea2082b3a2b282b39a36c2bb82b962b3da45e2b602b302b24a55e2b602b302b24a50000000000000000472f162f472fba25a62eb42ea92e7726c72d3c2dc42de526902e0a2e332e0d28622e3e2e3c2e1228342d8b2d292d9725ae2f4d303f2f3c280e3071304230f62800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ba2d69f85a294291ba2d69f85a29429c6a40da2c7a45b2c52a5bca320a6742c05a686a5a0a8be2c11a87ea6ada9672bf2a51fa6f3a8122983a4fda5e3a9442862a46ba5b6a94b2734a27da47fa8f024169be79cc6a46b21930cac94b0a36d1bf61efd1c9d9c1a906123ac23a51e289b3b2597253924a29dca2600277e26a49f52287c284b2814a276296c294f2947a4202a4f2a232a57a5b72ab42aa02a68a6822a992a5c2a94a6822a992a5c2a94a60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1a2eba25ea5ec29b1a2eba25ea5ec2979a4dda254a57f2bada559a4c5a6a22b45a66fa538a8352bc5a6bda5a7a8392adca6c0a58ba8a728ada517a642a9ea2767a522a664a9ef2511a4afa4a0a81224999e949ee7a44721008d111867a0bb1e0c1d3e1e26962616e420e621bf1e3199592349242722d19ce9244a258724239f51267626de2528a3012804289d273aa5b828c9287c2873a6f0280129b628d2a7e7280329a72805a8e7280329a72805a8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024a2dca4c9a63b2824a2dca4c9a63b28b2a426a419a74d2aaaa40da45aa61f2838a51ba670a8e62867a50aa6d0a8d02853a5bea671a9df27ffa4daa68ba97e26cba4b1a670a9e9242aa4b7a5fea8c12003a237a464a815156e9ebba0aaa5d21862960d9843a1039026193c1d7f90e09b681eef204a1d1d9c642074216f1f4aa0b121b12153202fa4e323c523c8213da6a12479241824b3a73725fa24282493a83e2507258624f0a83e2507258624f0a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d0a123a40ca68c24d0a123a40ca68c2452a0e7a263a5db2335a436a641a85d269ea474a69ca887260fa4eaa55aa893253da40ea68fa8b92455a460a6cba849242ea422a6d8a88d2393a3b3a59fa86c22a4a173a4b3a7c01f42a0b8a253a6fd1cf79fdaa197a5681cca9f8ba16da4951ad9a097a134a3669f039d319f57a1d9a18e9df39fd6a14fa4009d509e1fa17aa68c9df19ef4a00ba8849c9c9c6e9fd0a85f9a8f9c019eeba85f9a8f9c019eeba800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d0a123a40ca68c2452a0e7a263a5db2335a436a641a85d269ea474a69ca887260fa4eaa55aa893253da40ea68fa8b92455a460a6cba849242ea422a6d8a88d2393a3b3a59fa86c22a4a173a4b3a7c01f42a0b8a253a6fd1cf79fdaa197a5681cca9f8ba16da4951ad9a097a134a3669f039d319f57a1d9a18e9df39fd6a14fa4009d509e1fa17aa68c9df19ef4a00ba8849c9c9c6e9fd0a85f9a8f9c019eeba80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b197a8dbf9517293919c89b25a0252aa61ab29f69a27e2aeb1c9fa2f7a4042bf61a95a422a7c729f1152ca42ba72b27da8b11a5b8a738259998fea652a9e221f71282a40da71a12231ee49a32a0bf973c21f421e621160e78246b250f264b188f25dc2686274219d926f927522823182028a128de283a18e328542989297618a529e9290b2aac18ae291a2a3d2ac1180e2a7a2a772acb18392a612a562a5e8d00000000000000000000000000000000ad2229232b23c8a19829062904299aa7152c382c5b2caea65c2b732b522b35a8042cf82b082b3ea8062cd12bdf2ab0a73c2cf52b7f2b20a6e32ab82a062a86a600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b197a8dbf9517299b197a8dbf9517293919c89b25a0252aa61ab29f69a27e2aeb1c9fa2f7a4042bf61a95a422a7c729f1152ca42ba72b27da8b11a5b8a738259998fea652a9e221f71282a40da71a12231ee49a32a0bf973c21f421e621160e78246b250f264b188f25dc2686274219d926f927522823182028a128de283a18e328542989297618a529e9290b2aac18ae291a2a3d2ac1180e2a7a2a772acb18392a612a562a5e8d392a612a562a5e8dad2229232b23c8a1ad2229232b23c8a19829062904299aa7152c382c5b2caea65c2b732b522b35a8042cf82b082b3ea8062cd12bdf2ab0a73c2cf52b7f2b20a6e32ab82a062a86a6e32ab82a062a86a6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e592369ba39dba2ae592369ba39dba2a4a99719e2ea0612cce9ab2a094a3092d4c9d44a397a6492d439eeba439a80f2c1ba191a5cda8062a54a4dea69da964284ea227a716aa5f22129e0ca568a8a71a8d1c9d987ca3ca10ea1e8a1b639dd60fe323e3231523db148a253e2649268117e126d2272c28221929289d28dd28691714296e29ad29a217312a612a6e2ab7145d2abc2ae62ad514d42a342b052b0a18da2a1b2b022b5d8eda2a1b2b022b5d8e8c2ca62c352c23a98c2ca62c352c23a9962c8f2c1f2c51a94b2dd92d092e71a7192d042d042df8a8242d562da62c33a93c2df82c6d2cb8a84a2ead2db52d39a8032ebb2d952db7a8032ebb2d952db7a800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d066994792000005d0669947920579e979dd6a08e2c209f559f84a42e2e22a15ba2c8a6da2d68a2e2a494a8522c23a4b6a5c4a8132ae3a40ba7eba9822838a52da617a92a25369fc3a2c3a72c21f9177e982ba3291d901c7f0d47a081186522ea212f1fc30e5f259b250c252815b92645271927161541288a289928c40e5229a129b32935155a2a842a8b2a5e15b22a002b1f2b8f15282b5f2b6d2bcc15022b4a2b332b5f8f022b4a2b332b5f8f8f305b30c23075a98f305b30c23075a9b32dff2d1e2ddcaa2b2de32d882e33a9862d912dec2d5cab642d002e4d2ddbab042da72c962cb5abc82fce2e062f51ac2e30f82f952fa1ac2e30f82f952fa1ac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003994db980c2100003994db980c21bea2fd9ef9a2702d03a561a425a7962ee2a5d8a464a7f12d9ba56da5aea8892c68a581a59da8872adea442a65ba92d29a3a5f4a537a9382798a20fa590a91e24c38cfc9c60a5881da91ff81db29c4316082112218c1a7b0fc124d9246123b6152d26a426c625a815e92738281d28ba15102953294729f7182f2a532a302a1b19ab2ad42ac82a4419082b4d2b332b6319ef2afe2aee2a3796ef2afe2aee2a379600000000000000008f305b30c23075a9b32dff2d1e2ddcaa2b2de32d882e33a9862d912dec2d5cab642d002e4d2ddbab042da72c962cb5abc82fce2e062f51ac2e30f82f952fa1ac000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a98289b702000007a98289b70201fa44fa2f0a4e62c28a656a50ba74a2e31a683a69ba8152e4aa702a723a98e2c54a680a76ba9632a53a549a7c4a9b728cfa457a680a93327e9a144a4c8a876246f9c739b46a47021c81c801a70a1ba19aa1e691ca69c22904f234a239d1f10901f252b2539242516a826cd2682261f16352875284528411942295c2940297519d229e529c529b319502a7d2a402ae219242a132aee299290242a132aee29929000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ea256a368a53d2a9ea256a368a53d2a78a546a4f5a5f42cdaa5b5a527a87e2d2ca647a76da91a2ddfa560a7aaa9102cdca5e1a64ea9df295ba5aaa65aa98f2861a59fa64ea9852668a471a5a5a89524a99d0b9e7aa45f214316801b819c811c651daf1e38905416f7209721be1e2610e12296230e225116a624fe247524671909266226c725c416cd27cd27712701177e28742855284c17cf28d22896287617b2289b286528f090b2289b286528f0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000efa006a5b1a62f26efa006a5b1a62f263ca4bfa552a87d282ea267a1a9a4e121fca571a85baae22854a64ea81baa782947a612a8e0a9b627dda5bea715aa742627a56aa7cba9a7242fa488a652a9a02072a2f2a40ea819144d9fd5a1bba553186d96ac9923a1df1532194c1c7590b016711e6b20471db1906520ee20791f991097211d22db209210af2392234122271778245e244e231511fd24302532245e91c3249824e223db9ac3249824e223db9a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049a2caa47da6f42449a2caa47da6f424e5a03ca4cea56e248aa4dba788a99c27b8a419a899a9a627bba3d4a6c4a87a2547a4a6a6caa848248aa4e3a6f8a8952360a4aea6efa8ad222ea438a6b5a8b721b6a20da5fca73420fba00ea3eea59a1b3ca0e0a17ba5cc0fbc9fc8a1a5a4d01589a1a5a2c9a3148efc9c07a0c0a10196759dc19f2da18a16e59c4b9f03a112174b9deb9f6da11b11659cc69d49a0ea17659cc49d2f9f3a91659cc49d2f9f3a910000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049a2caa47da6f424e5a03ca4cea56e248aa4dba788a99c27b8a419a899a9a627bba3d4a6c4a87a2547a4a6a6caa848248aa4e3a6f8a8952360a4aea6efa8ad222ea438a6b5a8b721b6a20da5fca73420fba00ea3eea59a1b3ca0e0a17ba5cc0fbc9fc8a1a5a4d01589a1a5a2c9a3148efc9c07a0c0a10196759dc19f2da18a16e59c4b9f03a112174b9deb9f6da11b11659cc69d49a0ea17659cc49d2f9f3a91000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dc19db184517492a1e14ab9a8d9f902ceb1265a1d6a3e62cb013c5a2fea4232ca81273a480a6352b840cbea47ba7b5286f147da55ca8aa27c523759e42a398246728a1254f2397218a281027f725671f3825f024a6243e1d6d247f250126b51bbc25cb26c427681bcc26f2275928521a3128bb28ea28ce1b002961299929791db129f829222ac01dc629222a492a211d172a802a7f2a3b1f472a6c2a6c2ab51d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dc19db184517492adc19db184517492a1e14ab9a8d9f902ceb1265a1d6a3e62cb013c5a2fea4232ca81273a480a6352b840cbea47ba7b5286f147da55ca8aa27c523759e42a398246728a1254f2397218a281027f725671f3825f024a6243e1d6d247f250126b51bbc25cb26c427681bcc26f2275928521a3128bb28ea28ce1b002961299929791db129f829222ac01dc629222a492a211d172a802a7f2a3b1f472a6c2a6c2ab51d472a6c2a6c2ab51d0000000000000000ad2229232b23c8a19829062904299aa7152c382c5b2caea65c2b732b522b35a8042cf82b082b3ea8062cd12bdf2ab0a73c2cf52b7f2b20a6e32ab82a062a86a60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000690a6e96989cf72b690a6e96989cf72b9e995d9e30a14e2e4b9d8ca2baa44d2f049e1ca46da6382ead9ef0a4c0a7bf2cf3a150a604a96a2aaca159a6dea838285f278f244c93c0232b2e562d1d2c131af72d1d2dd32bb593c6242f259e249919f4239d2456246519c6259026b326c61c4c2718285528031c5528b7280429c91c2d298829c4293e1f4e2a7e2a942a841f7f2ac72afb2abe1fe72a452b3b2bb820f72a362b452b9e1ff72a362b452b9e1f00000000000000008c2ca62c352c23a9962c8f2c1f2c51a94b2dd92d092e71a7192d042d042df8a8242d562da62c33a93c2df82c6d2cb8a84a2ead2db52d39a8032ebb2d952db7a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf0b67160091442bcf0b67160091442bbd9bad9bb39e1f2fcc9d22a29aa34730c89ecca1cfa4472ff99f03a4d0a63c2d6aa33ea6dba8cc2a4ca407a8a2a98628eea058a300a6a225af2e8b2da72bbf228630c72fda2df01a9326af25412490174122d82223215d150d2560251625d019042778279c27961c7728c728c928771d6d29c629cf298f20962a9d2ab02a2b21b02a082b1a2b4f215f2b8f2b6e2b41234c2b9c2b842b33224c2b9c2b842b332200000000000000008f305b30c23075a9b32dff2d1e2ddcaa2b2de32d882e33a9862d912dec2d5cab642d002e4d2ddbab042da72c962cb5abc82fce2e062f51ac2e30f82f952fa1ac0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000579d149cb0a05f2c579d149cb0a05f2cc7a2c2a0f1a3673091a527a522a86b3119a5dba43ca716306aa494a468a7512d87a4f8a575a8812b6aa4e3a565a81d294ea371a541a8e925ad21bf1edf9f1d2454318530052f681b852d092d012cd49d19244224432302163c2451247c23fe1c412691261d26001e2b286d284b2800203829782964293122762a7a2a562a6d23ad2ad82aee2a18243b2b792b532b3d25562b5b2b3e2b9224562b5b2b3e2b9224000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029a169a121a31e2c29a169a121a31e2ca5a4b2a457a6063004a731a7b7a8e730b9a6cfa751a90e30bba53ea70ea9002dffa4eaa6c8a8962a75a458a6fda8fd2869a448a6b8a82f27a6a111a341a7f023cf305c30f62efc9dda3129312f3087a53b240224382268994f233c24d0210e193c257925fe24a81e3a2765271a2764208928b12875282f237b2992296c298724d929ef29ea2990257c2aae2a712af6268f2a852a842a4d268f2a852a842a4d2600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008aa2b9a48fa6542b8aa2b9a48fa6542b7ba59aa511a8362f18a704a730a9c72f8ca771a8cea9162ebda510a8c4a94d2c7aa5b5a79ba9ef2957a52ca73da9862832a5c9a61ba9c32679a4eba590a80425ac9db09ffba33b21a01ce61e45104510691ee41f5c195c19332148228020c31c58230e240b23d51ff5245625c2242b21622680261626a5231e28f027c6276e2562287c285e283327fb280929d4288328fd280e29d9283628fd280e29d928362800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e9dfea426a6fe267e9dfea426a6fe26b7a5f5a8a2aab22c07a776a81caa342b52a668a8c5a9192a6ca52aa8dda98c2916a6efa8e8aa8928d2a69ea83cab342637a512a833aa2224d2a3c4a6dda8fc20b6a109a53fa7911d909f47a286a5391d4a96ed9781a01c1f4919461da71628208e1e7020431d6320762001217c1f0c22a921a821e620c8233024b823f122e3257f246c24f3230e281b2543256b24fe2890255c25d524952890255c25d5249528000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a1d7a5f7a7372571a1d7a5f7a73725afa12fa60da8ce250ca528a9ebaa482837a581a93eab3f2897a494a813aa9c25aaa4dfa782a9ee22c7a47aa75ca9b4217fa433a707a9982137a49fa6b0a82b214ca3a3a524a88420eea146a48ea6b31df3a094a264a5a2162ba000a27da4471620a2c9a350a4fc1cf89d1ba04aa14a219a9df59f46a19524189d959f2aa13a269a9e0ea082a1f127849ce89d5ea04b29829aa39c739fff28829aa39c739fff280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a1d7a5f7a73725afa12fa60da8ce250ca528a9ebaa482837a581a93eab3f2897a494a813aa9c25aaa4dfa782a9ee22c7a47aa75ca9b4217fa433a707a9982137a49fa6b0a82b214ca3a3a524a88420eea146a48ea6b31df3a094a264a5a2162ba000a27da4471620a2c9a350a4fc1cf89d1ba04aa14a219a9df59f46a19524189d959f2aa13a269a9e0ea082a1f127849ce89d5ea04b29829aa39c739fff28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000421c851e611e0a2a44154896e8a24230dd9592a4d6a7c4304d8e55a4f6a6672de20da9a4e7a76e2bba18c5a573a85f2996204fa1ffa5b628bb221820e416bc24882551242321c32267293b28d725d9224d285f275926e22026251b263026541dbd25c9267327a61cb126ca273828be1c2228a528cc28fc1c06296c299129161ed529132a252a1f1fe6293a2a672a881e502aa12abc2ab1209c2ad12ad42aeb2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000421c851e611e0a2a421c851e611e0a2a44154896e8a24230dd9592a4d6a7c4304d8e55a4f6a6672de20da9a4e7a76e2bba18c5a573a85f2996204fa1ffa5b628bb221820e416bc24882551242321c32267293b28d725d9224d285f275926e22026251b263026541dbd25c9267327a61cb126ca273828be1c2228a528cc28fc1c06296c299129161ed529132a252a1f1fe6293a2a672a881e502aa12abc2ab1209c2ad12ad42aeb209c2ad12ad42aeb20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061148b98589eea2a61148b98589eea2a539ac7a22ba60a31d69d03a6d2a82732479e90a549a8fd2eab9f58a695a8822c63a12ba854aa5629a42006a349a81a270c2d7f2b9828591fb72f7f2e442d789f3e30f12e5b2dd1a1842bfe2ae829409d4f25cb25a525ed14c8258c26a726021cb02745288228771d8d2806293329ff1e6d29c029e22967205d2a862a982af520aa2af32a0b2b2421762b9c2b672b25238a2bcf2bc12bb1228a2bcf2bc12bb1220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ce1a87181613c02ace1a87181613c02af211499d4fa1e831bf981da40fa51833c49616a364a40b30009a5ba425a7a62c24a284a73aa972298aa386a7faa8eb271e2a1c28c721c721c330992fa12dcea3e13143312a30cea57e2eab2d832c34a4c4247825e624a50f5125b625be25861ba7270d2834280f1fb028fb283129d320a929f229112ac522de2aed2adc2af123192b5e2b6f2b5524e32b262c1a2c3a25082c452c3e2c9425082c452c3e2c94250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab9b659c4a9ff02bab9b659c4a9ff02bcca438a55ca70e3420a67ca7cfa99334caa34fa50fa8a6305da15ca4eaa5242dc2a13aa59aa6432adaa2cda476a65628fda106a4fba54c25d52d9c2cf92983a1a9335d32ef30c4a96830e72f3c2ebda772233c242223e715a324e42487241d1d2b278427432762208528ac289f2852226929af298b299c24c42ac52ab32ada250d2b562b3d2b5c26042c332c112c19282e2c492c3c2c7a282e2c492c3c2c7a28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095a068a134a3062c95a068a134a3062c53a75ba8bca9523386a8cba9f6aaf233dea6b2a824aa683091a511a8a6a9452c84a460a746a9232a1ca4d4a626a92629dda3cca6cda8532742a2cfa448a86122d1301f304a2e0dacf2304730a72e53abcf2319247e233316fc23c9240b245f1e11266e262f264d21b7271e28e0270124ae28db28b6286a26052afc29cb2913287a2a702a572ad928702ba32b4e2b132ae62b082c092c5a2ae62b082c092c5a2a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007aa516a9b7a9d62a7aa516a9b7a9d62a05a83ca9c5a963324ea8e2a939ab283311a8fca9c3abad2f94a6c4a84eaaa22b56a572a82caa9a29f2a4cea7dda9d828dda421a701a966272ba4e1a519a8d124419effa039a4ae1f5918d219f695f41a381dd61ea81a2e1e6b2188225221d0203e249f245a2498226025c5256625d924a826022782265f278428552834281f29f428e428b828a52ad829e029a8292d2c452a502a0c2a4d2c452a502a0c2a4d2c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eda218a883a91927eda218a883a919273aaa80ae40b0332db0aa58aef0afb32f65a89daa16acf22b1ca7eea868aa752893a6e8a9c7abd126c8a638a902abe92369a575a816aaa6216ba455a7e1a86d205da281a538a74c1f739f27a211a52c20b393ec94339f8f20da1a461f8819ce21601f6720541ec523fb201021731f4d25f121e9210a2114287c241b244923c7292025b6242e24c62bd925b1251a25cb2c1b27e7264526f82c1b27e7264526f82c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eca2a0a8f8a92424eca2a0a8f8a9242440a4dda941ab9627c4a587aa3bacbf2689a54eaa07ac832512a54ba9deaaeb22c9a467a8fda9db209fa4bda775a9541f2ca4fda6c7a86b1e69a323a637a8532098a249a542a7522145a29da457a6b62199a100a465a5962004a18ba248a4391c17a293a3a4a4cd22429e51a087a12f26f89d35a089a171287e9d13a07ea10e2adf9d5fa034a1092cec9c7c9ed3a03e2def9a759efe9f3a2def9a759efe9f3a2d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eca2a0a8f8a9242440a4dda941ab9627c4a587aa3bacbf2689a54eaa07ac832512a54ba9deaaeb22c9a467a8fda9db209fa4bda775a9541f2ca4fda6c7a86b1e69a323a637a8532098a249a542a7522145a29da457a6b62199a100a465a5962004a18ba248a4391c17a293a3a4a4cd22429e51a087a12f26f89d35a089a171287e9d13a07ea10e2adf9d5fa034a1092cec9c7c9ed3a03e2def9a759efe9f3a2d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b1d4022902373a60b186c1c999d87a2219954a235a6f02cde8ee2a40aa8652cf714caa341a61a295c1e8da453a814298f25079cc9a6fd2874281c239f14a526be29de2767242d1d902aee2850267d9d55285e27a625ca1bc02454256125f71cd124eb255d26491ccc26d7273b28241d5428d828e7281b1e43299729ad29091e172a532a5c2ac01f1d2a852a912a4b20ee2a2f2b1a2bc021352b6d2b8a2b2723000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009b1d4022902373a69b1d4022902373a60b186c1c999d87a2219954a235a6f02cde8ee2a40aa8652cf714caa341a61a295c1e8da453a814298f25079cc9a6fd2874281c239f14a526be29de2767242d1d902aee2850267d9d55285e27a625ca1bc02454256125f71cd124eb255d26491ccc26d7273b28241d5428d828e7281b1e43299729ad29091e172a532a5c2ac01f1d2a852a912a4b20ee2a2f2b1a2bc021352b6d2b8a2b2723352b6d2b8a2b272300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004618d991709c1ba54618d991709c1ba5c08e4a9f00a518a4a099dca444a7722daf9c13a6dda8392ce29e1aa71aa94225e9a115a947ab0b22792494a2daa8b514da2cb529d5265aa1832e222dd82b6ba58b2e892d0f2cfda7052a81297128b6a0322533253c25fb19d2257c26c7266c1ddd2760289028061ed22851297129af1fbe291b2a352a6d20d02af32af82a6b21212b6a2b792b0f220d2c332c282cf023452c772c822c1425452c772c822c1425000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004912a409a48900004912a409a4894f1c2e16bf9daa97221910a160a4692e111210a4ffa4dc2c0b9817a44aa6b22526a190a731a927205ca28fa74da9cd980c291b23449420a6302fdc2d7d2c33a91e2f382ef02cdea88829bc283b27599ead23b023ac23e41bb425162611262c1e0c28342869284220fe284c296429a6210e2a592a752ad8224c2b752b792b8524e72b182c192c39259e2cc32cbf2c7f26c62ce52cf32c1e28c62ce52cf32c1e280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000728a2094a696b391728a2094a696b3913aa14ea3dfa67f9f2aa40ca631a9e43027a45aa673a8ad2e6d9fbfa3f6a53c284ba0eaa3cda5de24bba00ba4c3a510238aa00da308a5dc1c1226f923701c1a13e52cc32bc4290da80723db22c8204f9f62202b205f1ea41b8125af2588252d1d8f27f127e4274321c9281129ff284a23ef29372a282af4247a2ba12b832ba226202c492c342c1928f32c1d2d032d8029392d4b2d632d502a392d4b2d632d502a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b3888b971999a394b3888b971999a39423a506a63ba8e4a3d3a662a805aade30eba66ca71da9762e22a48fa558a72429c0a39ca55fa7112aeea2d6a43ca7e529eba221a52ca85c2864a23aa54fa70724a69ae4a016a4a299f41e6b1e111b0d19b920f820191f261e8124dd2453246f1d6726f426c126a1223c28832853284b25542985295b299227f62a1a2be22a0729bc2b122cdd2b602ad42cf72ccd2c322c2c2d492d5e2dae2c2c2d492d5e2dae2c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000df9de2a7a1a809a2df9de2a7a1a809a2c7a5f7a89aaa66a34ea6caa76da98c3092a869ab8aac512d7da654a9beaa9927c2a688a94cabe62840a604a9ceaa812875a528a89ca9292665a459a66fa84622119fc5a1bba4a11df715ec14d39a5d1dbf1c041f3d1c01205c21e522b1213221b5243025de2415240b26bc2613265b26de271e28ba27ec285d295d293729de2a392a4b2a172a802c152c182cfa2b0e2e7e2c832c7c2c742e7e2c832c7c2c742e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007aa2caa3d19500007aa2caa3d19574a97aae18b045a419acedb045b266257daa90ae08b00e29faa552a95caaf91f3da5a3a8fca9531d92a5cba850aa791e3ba597a80baae81e89a4b6a72ca9941ec8a189a50ea8d01eba9f90a11ea404205b8d47150899c820471c621ffc1c4321601f5f20351e60249221b3215c201f278d238a230422c729f6258e25b6240e2c28279f260126c32d8b286a2815287c2f2129302912290530212930291229053000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fa4a1a90bab3da01fa4a1a90bab3da0e0a425ab69acd89d6ca5ddaa35ac67983ca515aaa9ab0f98f0a42aa984aa9c9cb3a46fa8bda9358d45a476a718a9779357a368a655a806168ba270a562a7631caca1b3a459a6e11f2ba125a490a5c82176a0c1a295a4d6223ca0cea13ca39e2259a04ea29ca3e125909e87a0cda17d28629e7fa0e5a1702a069e77a045a1702cca9e3ca0e3a1232ef99dd79dbaa00030e99d0a9edf9f3c30e99d0a9edf9f3c30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fa4a1a90bab3da0e0a425ab69acd89d6ca5ddaa35ac67983ca515aaa9ab0f98f0a42aa984aa9c9cb3a46fa8bda9358d45a476a718a9779357a368a655a806168ba270a562a7631caca1b3a459a6e11f2ba125a490a5c82176a0c1a295a4d6223ca0cea13ca39e2259a04ea29ca3e125909e87a0cda17d28629e7fa0e5a1702a069e77a045a1702cca9e3ca0e3a1232ef99dd79dbaa00030e99d0a9edf9f3c30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071d8d23942438accb1cde21041ca5b0508e44a137a582b1719a9aa539a86cad4d9419a5a2a7f1a3531099a79ca96e251323ada5ffa9a9263e281f22d0a2919ffc291c28e12458aa0929aa27e62411aa09250c247c227ca27622a02370239913b023ff242625fa189c26a027f127a01b6028de2808296d1d6829b629c029931e532a822a722a7d205c2ad02ad02af820312b832ba62b4322b22b212c1d2c002400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071d8d23942438ac071d8d23942438accb1cde21041ca5b0508e44a137a582b1719a9aa539a86cad4d9419a5a2a7f1a3531099a79ca96e251323ada5ffa9a9263e281f22d0a2919ffc291c28e12458aa0929aa27e62411aa09250c247c227ca27622a02370239913b023ff242625fa189c26a027f127a01b6028de2808296d1d6829b629c029931e532a822a722a7d205c2ad02ad02af820312b832ba62b4322b22b212c1d2c0024b22b212c1d2c002400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000651285102ca10000651285102ca19b17f7996ea04fb05c15d6a235a5ddb1239cffa626a9c4ae9da0c9a872aa67a7d6a2e5a9abab31a1139cf6a825ab85a230281f9419a2b7a4e12b7c28ad267fa8602ad128e625b2a88321d620ba1feca1b1224f23be22d50df825a1269d26771c10286f289428d11d06296929a9299b1f2b2a652a842a7120672b7e2b732b49229d2b0c2c0b2cf9225f2c7a2c8e2c3024bf2c032d0c2da025bf2c032d0c2da025000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e10190dfe9c00002e10190dfe9c181f661df01b82b05a20d01625988ab2ea1cce9ed0a1f5ae8c9adea478a7fba7829f3da618a867a524a1a4a67fa835a5b49a57a315a7f0a0f722101c2fa06f13e6204f1e1b11059f351c4014a5990898ea216b2135205217b4254526fd25f21c35286b2887282e2066299b29cd29a421a62ae72aec2afb22132c222c1d2cec246b2ca72ca52c05262c2d642d562dd227812dd22dae2da928812dd22dae2da92800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008dcf90229e0000008dcf90229e3592e29558a076b28b9b059fc7a4a6b4e69801a0a7a2d0b07698289ed7a162a8cf98639e12a27fa3999b4ea095a254a1599e60a17fa4341a529c30a1a8a58f245618d29834a07c90041293137c947c94a6217f210d201e155e25c3257725041c0e2844284b284521472987297429e923ad2ae52ac52a21255e2c562c412c4b27e52c212df82c8c28e62d0d2efa2d2d2a682ed52eaf2e642b682ed52eaf2e642b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e7944a97399d0000e7944a97399d14a1d1a100a3c8b111a301a35fa55db46ea0faa0f9a1dbb08798711375947594520f801eac1fcf2b8b153e1e471d6c2cb09c6098f8a04f291ea085a1c6a44022fa99e99fada1ef98201b861442954295dc203321dc1e7d956524c2245224341c0827932725278b22cc280629d02868254d2a752a222aba274f2c482c172ca629072d0f2de72c6d2b2f2e602e472e042d022f492f2b2ff82d022f492f2b2ff82d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083a098a573a687ab83a098a573a687ab46a144a5a3a567b1f5a046a0489e43b319a3f0a5b2a62fb0aea41ea793a879a68ea6e2a850aa352491a614a98daaa726cda50ea857a9e221c9a385a5e8a73019c49fd8a09ea3620f790c220e499a6315811dd11f1a1e391c1d22c52317232820f524b4255c2595230e27c0275627c226c12803298e2832290b2bea2a852afd2b322c4b2c0c2c852d7b2d992d582d872f7f2ecc2eb32e6b307f2ecc2eb32e6b3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006fa117a68da740a96fa117a68da740a9bfa5c8aa24ac17af68a957ae02b017b333a7adabb2ac03ae7aa413a812a953a6b3a3dca64ea8e39e7ea488a7dda8dd972fa41ca7aca86419c7a2e9a5d5a7f61aaf9fbfa2c1a4a71c469c599cdc9e081d578d041c0819891d2f1c0220c91dd61e1b20bf20f61d5023e3215d220821d927e624c22402245c2a0e2822273e26162dcf28a8281128602fa82af72a462a1731572c802c8e2c0432572c802c8e2c04320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f3a20fa929aaeba7f3a20fa929aaeba739a41faa98ab04a90fa493a911ab99a870a378a8d0a983a77aa391a70da928a5bca357a7d0a8b3a25da376a664a86da004a3f6a5fea7299e86a261a518a7919ac7a16ba4d6a50f1632a063a247a4811f7b9ebea038a2ea21319eb5a023a24123a49edba016a2f825ec9ebba0f8a17a28109f4ca0b7a1d02a6d9d52a000a2722d0ca11ba11fa208304b9f5d9fcca0a131a99f819dca9f8032a99f819dca9f803200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f3a20fa929aaeba739a41faa98ab04a90fa493a911ab99a870a378a8d0a983a77aa391a70da928a5bca357a7d0a8b3a25da376a664a86da004a3f6a5fea7299e86a261a518a7919ac7a16ba4d6a50f1632a063a247a4811f7b9ebea038a2ea21319eb5a023a24123a49edba016a2f825ec9ebba0f8a17a28109f4ca0b7a1d02a6d9d52a000a2722d0ca11ba11fa208304b9f5d9fcca0a131a99f819dca9f8032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061e2023902473ab051dc8229322e6ac711c3a1f801f57af2d8a68a1eaa3adad3b998da407a72baaa39ce0a3d4a5189f7a9caea684a8cd0ebba017a4e9a4c4a2c0200e19af963fa86623c820841e64a62620d11d081ecaa06121ba211f21da958d248c256f25fe162727d2271428941a7f28d3281429401d6e29ba29dd29711e932abb2ac72a7020a12a0d2b0a2be420f72b4a2c392c1722fc2b602c4a2c392200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061e2023902473ab061e2023902473ab051dc8229322e6ac711c3a1f801f57af2d8a68a1eaa3adad3b998da407a72baaa39ce0a3d4a5189f7a9caea684a8cd0ebba017a4e9a4c4a2c0200e19af963fa86623c820841e64a62620d11d081ecaa06121ba211f21da958d248c256f25fe162727d2271428941a7f28d3281429401d6e29ba29dd29711e932abb2ac72a7020a12a0d2b0a2be420f72b4a2c392c1722fc2b602c4a2c3922fc2b602c4a2c392200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a1d2d1bcb180cac3a1d2d1bcb180cacee1c3a1dc0113cafbc1d1192ae99d2b093915ca4c8a66caeb2984aa3a4a51da097995ca16ba4a40fa798d5a18ba47b16319beba019a3e6897d9dd4a11fa4fd9e9c9cd39f5da20ea32316018d09994ba2642239236522ec9cfd258d26b826c6132b285728ad28d91957298729c229fa1d822ac32ac42af31fd72bdf2b032cda21312c572c562c9922f82c472d352dd8241e2d8c2d6e2d10251e2d8c2d6e2d10250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc1d8c1a7410d5acfc1d8c1a7410d5acc31f0f1e741242b0a0202b1c091a70b18c1d6591209cdcae0b90259c1e9f319d2294279c949fb4874a912a9d93a0ea14e004879a7b9d381833141b96b99a538a0f10b096cd98899c7c1bc515208dba9e4022be223a220f9a3326a226992657149c28a428d328e01ceb29092a2f2a4b204e2b832b732b0d228f2c8e2c922c8b240a2d402d302dae253e2e8f2e502eac27882ed32eb42e1328882ed32eb42e13280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b90a8d98af9c22acb90a8d98af9c22acfb0d1d927d9ca0b0691577139d9a19b28118111886924aafd91065113e89689dbf10f310910791873715cb162716d5134417c318f517bc16ae18e61999182f1497185519ac15419cd11c651cf2199d9d312280222921f79cc22565260c261895822886288728ac1df029132afc29ee21c02bd82bb02bae241f2d0a2df52c0127f62d1e2ef22dad28952fdd2f8f2f612a053027301b306e2b053027301b306e2b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f29c9ea057a255abf29c9ea057a255ab64a0f0a273a40ab0fb9e04a120a3c9b18198ba9146995fb08118491f132038a87517f31c0e1edf899519401d481e591c6b1a221d1d1d4918c01aff1d1c1e5696d119d21c491c9a9d8b1d051ee31b609d6c21e721ee20569ca32401259924221550278d2755276c2054296c2933291524732b942b172bb326552d282d172d7e298b2e872e4f2ef92b6b3085304b305f2dba30f030d130ae2eba30f030d130ae2e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039e5da3f7a457ab039e5da3f7a457ab139e76a139a2f3ac5f8be21fd51fd6ad730e39241825d6ac54978e1c031c60ab4b91a71b241926a6710d191ca81ac09de38e53195d13d59d4690ac178e9aeba03c943716298e0ba05b184a1b9719309d231e4020451ffd99e021d822cb21a318302558254525e220d727132803281a25ea29fa29af29ac28a82c6f2c412c0d2ce22df82dd22d702e55307f3047307c30f730513135319431f7305131353194310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000219fdea57ea7a2aa219fdea57ea7a2aa8ca208a760a867aca0a2dba7e5a8d9ad45a226a627a874ad71a15fa468a69eaaba9deb9f76a376a3eb9d069edca0eb9b909d7b9d11a05c9a159c8798229b8c99c0991819001c72983e8c1d1d101d9b981f163c1d1e1c9398581d4b1f301d991a7a2079209a1e5a22d923342363223c26a0263626712589298a2903296f280f2d292bf62a822a5430cf2d0d2e9d2db7320530213026304e340530213026304e340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0a237a81da97ca8b0a237a81da97ca819a3b1a8b3a961a9d4a125a844a931a9b9a024a62fa884a70aa055a4afa5f6a564a04aa4ada58da4a3a039a49ca5c7a299a000a442a5f4a07fa093a3efa4a29f0ba05ba245a40b9b659e9da0bca19b19809d16a079a1321ffd9d44a0cfa16821b69eeca034a25724149ee6a046a25027459ea4a041a2592a819c1fa021a1c52d1ba124a15ca2e130ba9ec29ec2a09b339fa2649f6d9ffd349fa2649f6d9ffd3400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0a237a81da97ca819a3b1a8b3a961a9d4a125a844a931a9b9a024a62fa884a70aa055a4afa5f6a564a04aa4ada58da4a3a039a49ca5c7a299a000a442a5f4a07fa093a3efa4a29f0ba05ba245a40b9b659e9da0bca19b19809d16a079a1321ffd9d44a0cfa16821b69eeca034a25724149ee6a046a25027459ea4a041a2592a819c1fa021a1c52d1ba124a15ca2e130ba9ec29ec2a09b339fa2649f6d9ffd34000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f61d92240e2605aaaa1d93232a2458aba61e53226a229eacf51c841c5e19ddac49149d99dd993aaaeb96999e9fa0f3a464941ea408a640a2ef9672a12da4bc9d8d140d90639460a1971d8c1cb01bdda0ef1ff71dfc1c759d93231a232621eb9bab254b2669261b97e327df272b28ca8bb928c228e728b7196e29a929d629ed1c8e2aa82aaa2a2c1f412b5b2b522b7720282c452c382cf01a7b2c982c992c071f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f61d92240e2605aaf61d92240e2605aaaa1d93232a2458aba61e53226a229eacf51c841c5e19ddac49149d99dd993aaaeb96999e9fa0f3a464941ea408a640a2ef9672a12da4bc9d8d140d90639460a1971d8c1cb01bdda0ef1ff71dfc1c759d93231a232621eb9bab254b2669261b97e327df272b28ca8bb928c228e728b7196e29a929d629ed1c8e2aa82aaa2a2c1f412b5b2b522b7720282c452c382cf01a7b2c982c992c071f7b2c982c992c071f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f71bfa20e92164abf71bfa20e92164ab9e1e78204a1f7fad9a1d901d881941ae531d6f95059c48aeaa116d9c1ba0d5a70b945d9f55a1a4a20d942aa133a4a29f1c9644a0caa2489e369821a0cda095a095149598e49b75a12d1f5a1dae1909a14c2376236322859ea82659264d26409c62283628762800967929852998298816902ac32adf2a641d092c192c192c8420992ca92ca42cbb21852d852d882dcb21052e262e282ec522052e262e282ec5220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000561baf1cd31c4dac561baf1cd31c4daca11c2d1a70906aae101dc1183d9733afdf1b18954a9b37ae0610719a239e00a7728a519ca79e3e9fa8097d9e86a1f69c4e8b879c999fda9a1817d09a6a9e069ea71b1b11008c60a04e209e1eb61cd9a07b23d823e6227b9ec826c226de26af999e287728a928600d022ae929002a391cbd2b942bbe2b971e032dfb2c052d2922022efd2de72d73242a2f302f1b2f0d2514301d301230492414301d301230492400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dd908291a09c0000dd908291a09c6e92d29e73a0cbada60ae498e89f56afc4189d0ef995e1adfe16de18471736a74318ba1af91944a30c19121bb21a8a9e3c1adc1a4119bb9b091c851c3f1c0e9d281f1d1e371caf9f72208720002000a02c231e236922aa9d9426862672268a9a8f286d288f28470e2d2a0b2a312a941e452c342c312ca221dd2db52dc72d0d255f2f572f472f6827a730ad30a33084286b317d3182312d296b317d3182312d2900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5969798f49c0000f5969798f49cc59d30a3eea430ade69e91a34da58fae209d7ba134a33eaef7062e12068d9da94e18db1c551ddaa51a1ad11e6c20ffa1171b911e151f5b9d161d90200921129fb41e0d217921aca08f20672131214da002226823e222159e8125a1251a25649909289d278627ef19ec29bf29a829d420422c2c2c482cde24482e022e1d2e04283c30273018307b2ad231cf31b8311b2c0a3317331c331a2d0a3317331c331a2d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000958adf9bc29cd4a0958adf9bc29cd4a00c9e0ca443a58cab6d9f17a433a5c4ac5d9edaa22fa567addc9a109d5b9fc9aa930cb6196c1b35a79f188b1f33211aa4eb191f203d2175a1a51c4b21932117a2751c52219e2133a2571f5e21c81fefa2c120d221272083a06922752359221998af25a1253925cc1a9528722831282d22202bd62ad12a8c26bf2d672d662de6290430c32f942f652d47323932eb31f92f323442343c341931323442343c3419310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000599ecea385a546a8599ecea385a546a8b3a08aa506a752aa44a188a5d0a658abcc9f29a43ea5dca9e99d33a10fa3f1a94f9b339b8a9c1ba9379aa61ae81d00a8128ff21f2621b9a69209e3201e2209a628115b1f811f7da4bc18821e5b1cdda13116ca1c381a7e9cad1be71c9c196a8ef62045202d1d0020b2240424732274248627932699255828802a142a6429332cd52c872c172cc72f67306d300530cd32dd3291330233e234dd3291330233e2340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b29e81a5b2a6bca7b29e81a5b2a6bca7eaa052a6bea7c2a808a13aa600a8eea84ea007a5cea627a8f19d43a3c9a4cda5929c10a141a28ea1829bf19e7c9f0d9c5c9abb9db39e1a98c99b889e8c9f5c987f9ce19fe3a06899499d33a09da15097a99d41a07ba1040df89d4ca01fa21c1bcc9d83a02fa235206c9e81a084a2d02438a0c5a177a36b28259fa4a1c7a3792c04a261a318a58b30b8a4bfa472a638343aa751a539a7f3363aa751a539a7f33600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b29e81a5b2a6bca7eaa052a6bea7c2a808a13aa600a8eea84ea007a5cea627a8f19d43a3c9a4cda5929c10a141a28ea1829bf19e7c9f0d9c5c9abb9db39e1a98c99b889e8c9f5c987f9ce19fe3a06899499d33a09da15097a99d41a07ba1040df89d4ca01fa21c1bcc9d83a02fa235206c9e81a084a2d02438a0c5a177a36b28259fa4a1c7a3792c04a261a318a58b30b8a4bfa472a638343aa751a539a7f336000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021fa722b024e2a8001eab232224b8a9871d4e22e122a0a9381cba206821bda9541b1a1d921d2da93a1ae216da9495a75c161fa024a385a5d51532a45da725a3111cf69a26a099a07020791ea21a4ea22822e1219d21cea127244d24fc2303a2dd252f261c26f49e7c2792278727af9d7c2883288628709c582982299429089ba92aa82ad82a959a292c1f2c2a2c328dba2cb72ccd2c0517a42cc92cae2c249400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021fa722b024e2a8021fa722b024e2a8001eab232224b8a9871d4e22e122a0a9381cba206821bda9541b1a1d921d2da93a1ae216da9495a75c161fa024a385a5d51532a45da725a3111cf69a26a099a07020791ea21a4ea22822e1219d21cea127244d24fc2303a2dd252f261c26f49e7c2792278727af9d7c2883288628709c582982299429089ba92aa82ad82a959a292c1f2c2a2c328dba2cb72ccd2c0517a42cc92cae2c2494a42cc92cae2c24940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b80e21102714779eb80e21102714779e8219e01cc41b1ba9551c3020d51e01ac0e18de187815b5a9300adc83b184809d4012e390599864a40414e498c09d45a2370c498af18f8899781965119b94afa0bc1e251ca3187ba3f21f3b1f221d3ba1fa1837197f19cc95f724ae24d524089e092827280328889f2f294f294229109f952abc2aae2a6c9c382c282c522cf59a4e2d382d532d3d98492e4d2e6b2e5e8f412e732e5f2e9d98412e732e5f2e9d980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c380228c5b04609dc380228c5b04609d6d180e18958c9faa591aa5191c0efdac9614b789e48a4da93f00f483e1813a96aa067f062a096d910e14c506be953ea0710ce70c340baa965b1a1d1626091aa0971ea91c611c87a1d01fe21e491d99a0c5173f186d1816952d2500251725fd9f542870286728f5a0ad29e229ef29289eb22b6a2ba42b7a9d512d1a2d472dc698e42ecc2ed62e3a903e303f304630fc16233040303030b990233040303030b99000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e8b1c8b248ad5974e8b1c8b248ad5977f0f4598fc9cdaaacc86019ae29e3dac7883de93b59533a68e010c8e218c2e9cd111e48eaf960fa5d212b307ea9302a2960f0c0c110cb7968219e3197119bb9e3d1e6a1e7d1dd1a1841f2a201b1fa1a0ef17a71880183b95fd24c624e424e39e4e285a282e28b2a0d829fb29fc29349f302c232c142cad9e282ee62d2e2e319760304b3055302318b431b531c031b318a831cc31b231c718a831cc31b231c7180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e090de901292c198e090de901292c19845997f9f67a128aa619cdca161a310ac2b9a72a044a14ca97f9037946f94a09c260a6d8e079054a5af102016dd15bca308102b10b40e6c9721199e1ab1189ba00d1ebb1d9b1c6ca2981e551f341ef0a01615eb150816d992652461241f24289f7527cd277227299d9429af298b29579e392c322c242c419cb02e682ea12e0492303100311931751c9d338c33a033d620d333f533c3337f14d333f533c3337f14000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078a0afa239a47ca878a0afa239a47ca8ce9e6ca4e9a5f1aa779e2da47da5dfaa619e0da429a565aaea9cd0a192a37ea9ed97519d909f1aa76c8c7e8f8496eea406128b12010ac9a317196d1a1416b5a3331cfa1c9f1aa6a4f71d6a1ff91d32a4ca1f8221ed203aa1982389237222f8a0ba25ba254425729e6f2896286d28a19b502b592b3a2bf79a5a2efd2df62d689360311f314431d01d86348934983419264335543540354a264335543540354a260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ee98389c499dc59dee98389c499dc59d5c9c7fa19aa3bca7b89c18a179a209a72c98c39bde9cbc9eaf9b0fa083a1a1a5b29be6a013a2aea5d69900a0c8a15ca40599349e53a0a4a315957d9c0e9fdaa39a89a998859c4ea24514a58b3d974ca1bf18aa170513d3a0631e4d1d391908a15721a620f71dcc9fe224c323cb227f9e2e280d288d268f9d6e2b042be22a321d702fa42e092fa523fd33ac33f033a02aeb35e935d635db2ceb35e935d635db2c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fa075a4c4a584a72fa075a4c4a584a712a0d9a404a615a822a0bea4f8a528a8b09f3aa4cba5fba7949f01a460a5aaa697a080a2d8a3c2a42b9e07a1a9a21ca3719d5fa084a202a2fd9eed9f70a1ed9fe29dda9fdca03da0f29d429fe6a0ca9f8c9dec9edea0619f209dc09e11a1229f799e39a0cca1f59e3ba076a131a2e699f6a097a226a45292bfa1eda38da47f1f549f0aa418a4d52487a584a744a8e62dfdadf2adb1aebe35fdadf2adb1aebe35000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fa075a4c4a584a712a0d9a404a615a822a0bea4f8a528a8b09f3aa4cba5fba7949f01a460a5aaa697a080a2d8a3c2a42b9e07a1a9a21ca3719d5fa084a202a2fd9eed9f70a1ed9fe29dda9fdca03da0f29d429fe6a0ca9f8c9dec9edea0619f209dc09e11a1229f799e39a0cca1f59e3ba076a131a2e699f6a097a226a45292bfa1eda38da47f1f549f0aa418a4d52487a584a744a8e62dfdadf2adb1aebe3500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021fa722b024e2a8001eab232224b8a9871d4e22e122a0a9381cba206821bda9541b1a1d921d2da93a1ae216da9495a75c161fa024a385a5d51532a45da725a3111cf69a26a099a07020791ea21a4ea22822e1219d21cea127244d24fc2303a2dd252f261c26f49e7c2792278727af9d7c2883288628709c582982299429089ba92aa82ad82a959a292c1f2c2a2c328dba2cb72ccd2c0517a42cc92cae2c2494000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b80e21102714779e8219e01cc41b1ba9551c3020d51e01ac0e18de187815b5a9300adc83b184809d4012e390599864a40414e498c09d45a2370c498af18f8899781965119b94afa0bc1e251ca3187ba3f21f3b1f221d3ba1fa1837197f19cc95f724ae24d524089e092827280328889f2f294f294229109f952abc2aae2a6c9c382c282c522cf59a4e2d382d532d3d98492e4d2e6b2e5e8f412e732e5f2e9d98000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c380228c5b04609d6d180e18958c9faa591aa5191c0efdac9614b789e48a4da93f00f483e1813a96aa067f062a096d910e14c506be953ea0710ce70c340baa965b1a1d1626091aa0971ea91c611c87a1d01fe21e491d99a0c5173f186d1816952d2500251725fd9f542870286728f5a0ad29e229ef29289eb22b6a2ba42b7a9d512d1a2d472dc698e42ecc2ed62e3a903e303f304630fc16233040303030b9900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e8b1c8b248ad5977f0f4598fc9cdaaacc86019ae29e3dac7883de93b59533a68e010c8e218c2e9cd111e48eaf960fa5d212b307ea9302a2960f0c0c110cb7968219e3197119bb9e3d1e6a1e7d1dd1a1841f2a201b1fa1a0ef17a71880183b95fd24c624e424e39e4e285a282e28b2a0d829fb29fc29349f302c232c142cad9e282ee62d2e2e319760304b3055302318b431b531c031b318a831cc31b231c718000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e090de901292c19845997f9f67a128aa619cdca161a310ac2b9a72a044a14ca97f9037946f94a09c260a6d8e079054a5af102016dd15bca308102b10b40e6c9721199e1ab1189ba00d1ebb1d9b1c6ca2981e551f341ef0a01615eb150816d992652461241f24289f7527cd277227299d9429af298b29579e392c322c242c419cb02e682ea12e0492303100311931751c9d338c33a033d620d333f533c3337f1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078a0afa239a47ca8ce9e6ca4e9a5f1aa779e2da47da5dfaa619e0da429a565aaea9cd0a192a37ea9ed97519d909f1aa76c8c7e8f8496eea406128b12010ac9a317196d1a1416b5a3331cfa1c9f1aa6a4f71d6a1ff91d32a4ca1f8221ed203aa1982389237222f8a0ba25ba254425729e6f2896286d28a19b502b592b3a2bf79a5a2efd2df62d689360311f314431d01d86348934983419264335543540354a26000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ee98389c499dc59d5c9c7fa19aa3bca7b89c18a179a209a72c98c39bde9cbc9eaf9b0fa083a1a1a5b29be6a013a2aea5d69900a0c8a15ca40599349e53a0a4a315957d9c0e9fdaa39a89a998859c4ea24514a58b3d974ca1bf18aa170513d3a0631e4d1d391908a15721a620f71dcc9fe224c323cb227f9e2e280d288d268f9d6e2b042be22a321d702fa42e092fa523fd33ac33f033a02aeb35e935d635db2c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fa075a4c4a584a712a0d9a404a615a822a0bea4f8a528a8b09f3aa4cba5fba7949f01a460a5aaa697a080a2d8a3c2a42b9e07a1a9a21ca3719d5fa084a202a2fd9eed9f70a1ed9fe29dda9fdca03da0f29d429fe6a0ca9f8c9dec9edea0619f209dc09e11a1229f799e39a0cca1f59e3ba076a131a2e699f6a097a226a45292bfa1eda38da47f1f549f0aa418a4d52487a584a744a8e62dfdadf2adb1aebe350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad358c35a4354129e235ee35e535312a0b361736fe35fa29383634362836c2297c3663365e369729d236c236c136e029b337ae37a037242a5c384a384038832b553851384238022c353732372737212b593662365536e0295d3661364b36e32979366a366236fd29c436b736af36d429c637b737ac37342a543842383538e72a4e38463836386a2b513741373237c52a4d3657364f363c2a3e364b363136c62962365a364a36e829a836a3369336bc29d337ca37b7373e2a72385e384f38182b5e384c383f38f72a7f3773375137fb299136a3368936a9296f3671365a3622297e36693660362d2992368e367a36d22884377d376e37092917381d380c38f5283338593817388e28a336b736b236a824412c402cf52b6e95c4285328ad262b99d82de02e3b2ec1a4232c2d2d482cd1a4d9342d354835f31400000000000000000000000000000000c935d935b735172a313637362c36ea2a64365c365036f42b683666365136282b8b3681366e36e42ab336ac36a3360e2b4b3761374837362bf637e137db37312c993773377137002cba368f368836152b7b36733661363c2b8d367e367036e62a833673366e36db2aa0369a369536f92a5b3761374e37462bd937c537b537c32ba83787377c37932bcb36a636a736272b7f3673366636d82a823675366336da2a773666366036652a89368b368136762a4f3755373f373b2bf637df37d137e02bc837a5378f37b32bff36d936c736ec2ab536ae369136a22aaa3695368636972a9b3682367b36882aad369e369e362d2a71376b376e37e32ad537b837cb37c02ab037b1379137a429543630363d36ac27bb2ea52ec52e951d682d832c292d8e1e6b3311335b3371251a2e392f7f2ede208c3573358635e72a000000000000000000000000000000008035b73569357e2a6e3655364d36342cad36ac369b36942c9f3694369236552caf369f36a636282cb936a936a1362f2c3b3635362436c02b5e3540353e35562aa73591358835ad2a6c3660364d36fd2bb636a0369836642ca4369c368d36222cb836a736a0362e2cb936993699362f2c483644363436d12b783569355a35ce2ab635b13598351b2b7136643653369b2bb7369d369536ed2b9f3697368936d12bb336a1369a36e92bb6369a369736ec2b543651363f36112b7e356b356435222ac135b635a335cb2a90367d366336bf2bd636bd36ae36092cb636ad369a36ec2bca36b936af36022cbe36a536a136882b5d3657364e36b32a703570357135ba294d355a352c359429b836a9369536812bf3340335f134282aea300731ab300e27b334ad34a434c02a152efd2da92ef32436353f351c35272b00000000000000000000000000000000f93247331e335728d035d235d1353c2b2237083704371f2de236cb36d536f02c0237e936f336412df536f136e136382d1b350b351135552b1d2fdd2ebf2ea724da31bf31c2314927373630362d36112c0837fb36e536d32cea36dc36d136f62c0e37fc36ff36102d0437fa36ee36092d17350e350e35a82a242edf2de22d0424693146314f3113273136273624360d2c0437fa36e036d02ce736dd36d036bc2c0b37fc36fb36d52c0a370037f636d42c3e3535353235dc2a1e2edf2ddd2d9c232b31083112316e262d361d361a360a2c13370a37ec36da2cf536e636db36c62c0d37fe36fa36d62c0737fc36ec36d22c6c3559356035182bf02e722ec22e8a24d5309330b13052261c3615361636312cda36d936a036eb2c50365e365036bb2cee35e935ef35112cd42f19303630df25823471348434c22a00000000000000000000000000000000a12db72db52dc2243134083420347b29e736fc36dc369d2d3937223724371b2e403740373637222e3236323625363d2da92f6b2f412ffd259126a825fa24221dd02891284d28871f0034ea33d433412a4e374d373c372d2eb437ab379937842e933790378037682e9c368a368236602d372fee2eeb2e69256724db2326239a1a1027ad26f3254c1da53399338933fa293f373a372437202ea937a3378f377a2e953789377d37692ebb36af36a6367a2d9a2f572f552fb32519245423b322251a7c261c265425dc1c3d3336332e33a92933372c371837dc2dad37a9378d373f2e953793377f372c2eb036a13699363a2d2b300930033040269124f5231c23231bac2725270c27001eec32d332e7326929343716371337172edb37cd37ba37642e8a3778376e37232ebc35f035b335372ddf30c530bc309d270000000000000000000000000000000034267427ea25da1c862d262d222d8e250c350c351e350a2e4837383728371f300237fa36e336b72f463150313531f628b126e7250e26a91df925fa248a250d1d9a20c720341f0918c429992954299c216e3573356b35fa2deb37db37d9375c306c376037593716303231183111313929b2244a2414241f1cb72449246324ac1b9c2282226521971981283f2828283d205c3558355035bb2de737d237db377a3089377737753745309a3179317531a1295e24af233e23aa1ba72434242d24921b3e23fc22b421e519cb275d270427161f3035293522358b2ddb37c837d33773308d3780377d37473023320d3209322b2af7232523b622fd1ab82401246d24fb1bb2213921b81fa318e828262985287620d334c934c534282d99378d3779374e30653747374e376c306a331a33f132332c67281228bf27c31d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad358c35a4354129e235ee35e535312a0b361736fe35fa29383634362836c2297c3663365e369729d236c236c136e029b337ae37a037242a5c384a384038832b553851384238022c353732372737212b593662365536e0295d3661364b36e32979366a366236fd29c436b736af36d429c637b737ac37342a543842383538e72a4e38463836386a2b513741373237c52a4d3657364f363c2a3e364b363136c62962365a364a36e829a836a3369336bc29d337ca37b7373e2a72385e384f38182b5e384c383f38f72a7f3773375137fb299136a3368936a9296f3671365a3622297e36693660362d2992368e367a36d22884377d376e37092917381d380c38f5283338593817388e28a336b736b236a824412c402cf52b6e95c4285328ad262b99d82de02e3b2ec1a4232c2d2d482cd1a4d9342d354835f3140000000000000000ad358c35a4354129ad358c35a4354129e235ee35e535312a0b361736fe35fa29383634362836c2297c3663365e369729d236c236c136e029b337ae37a037242a5c384a384038832b553851384238022c353732372737212b593662365536e0295d3661364b36e32979366a366236fd29c436b736af36d429c637b737ac37342a543842383538e72a4e38463836386a2b513741373237c52a4d3657364f363c2a3e364b363136c62962365a364a36e829a836a3369336bc29d337ca37b7373e2a72385e384f38182b5e384c383f38f72a7f3773375137fb299136a3368936a9296f3671365a3622297e36693660362d2992368e367a36d22884377d376e37092917381d380c38f5283338593817388e28a336b736b236a824412c402cf52b6e95c4285328ad262b99d82de02e3b2ec1a4232c2d2d482cd1a4d9342d354835f314d9342d354835f314c935d935b735172ac935d935b735172a313637362c36ea2a64365c365036f42b683666365136282b8b3681366e36e42ab336ac36a3360e2b4b3761374837362bf637e137db37312c993773377137002cba368f368836152b7b36733661363c2b8d367e367036e62a833673366e36db2aa0369a369536f92a5b3761374e37462bd937c537b537c32ba83787377c37932bcb36a636a736272b7f3673366636d82a823675366336da2a773666366036652a89368b368136762a4f3755373f373b2bf637df37d137e02bc837a5378f37b32bff36d936c736ec2ab536ae369136a22aaa3695368636972a9b3682367b36882aad369e369e362d2a71376b376e37e32ad537b837cb37c02ab037b1379137a429543630363d36ac27bb2ea52ec52e951d682d832c292d8e1e6b3311335b3371251a2e392f7f2ede208c3573358635e72a8c3573358635e72a8035b73569357e2a8035b73569357e2a6e3655364d36342cad36ac369b36942c9f3694369236552caf369f36a636282cb936a936a1362f2c3b3635362436c02b5e3540353e35562aa73591358835ad2a6c3660364d36fd2bb636a0369836642ca4369c368d36222cb836a736a0362e2cb936993699362f2c483644363436d12b783569355a35ce2ab635b13598351b2b7136643653369b2bb7369d369536ed2b9f3697368936d12bb336a1369a36e92bb6369a369736ec2b543651363f36112b7e356b356435222ac135b635a335cb2a90367d366336bf2bd636bd36ae36092cb636ad369a36ec2bca36b936af36022cbe36a536a136882b5d3657364e36b32a703570357135ba294d355a352c359429b836a9369536812bf3340335f134282aea300731ab300e27b334ad34a434c02a152efd2da92ef32436353f351c35272b36353f351c35272bf93247331e335728f93247331e335728d035d235d1353c2b2237083704371f2de236cb36d536f02c0237e936f336412df536f136e136382d1b350b351135552b1d2fdd2ebf2ea724da31bf31c2314927373630362d36112c0837fb36e536d32cea36dc36d136f62c0e37fc36ff36102d0437fa36ee36092d17350e350e35a82a242edf2de22d0424693146314f3113273136273624360d2c0437fa36e036d02ce736dd36d036bc2c0b37fc36fb36d52c0a370037f636d42c3e3535353235dc2a1e2edf2ddd2d9c232b31083112316e262d361d361a360a2c13370a37ec36da2cf536e636db36c62c0d37fe36fa36d62c0737fc36ec36d22c6c3559356035182bf02e722ec22e8a24d5309330b13052261c3615361636312cda36d936a036eb2c50365e365036bb2cee35e935ef35112cd42f19303630df25823471348434c22a823471348434c22aa12db72db52dc224a12db72db52dc2243134083420347b29e736fc36dc369d2d3937223724371b2e403740373637222e3236323625363d2da92f6b2f412ffd259126a825fa24221dd02891284d28871f0034ea33d433412a4e374d373c372d2eb437ab379937842e933790378037682e9c368a368236602d372fee2eeb2e69256724db2326239a1a1027ad26f3254c1da53399338933fa293f373a372437202ea937a3378f377a2e953789377d37692ebb36af36a6367a2d9a2f572f552fb32519245423b322251a7c261c265425dc1c3d3336332e33a92933372c371837dc2dad37a9378d373f2e953793377f372c2eb036a13699363a2d2b300930033040269124f5231c23231bac2725270c27001eec32d332e7326929343716371337172edb37cd37ba37642e8a3778376e37232ebc35f035b335372ddf30c530bc309d27df30c530bc309d2734267427ea25da1c34267427ea25da1c862d262d222d8e250c350c351e350a2e4837383728371f300237fa36e336b72f463150313531f628b126e7250e26a91df925fa248a250d1d9a20c720341f0918c429992954299c216e3573356b35fa2deb37db37d9375c306c376037593716303231183111313929b2244a2414241f1cb72449246324ac1b9c2282226521971981283f2828283d205c3558355035bb2de737d237db377a3089377737753745309a3179317531a1295e24af233e23aa1ba72434242d24921b3e23fc22b421e519cb275d270427161f3035293522358b2ddb37c837d33773308d3780377d37473023320d3209322b2af7232523b622fd1ab82401246d24fb1bb2213921b81fa318e828262985287620d334c934c534282d99378d3779374e30653747374e376c306a331a33f132332c67281228bf27c31d67281228bf27c31d000000000000000034267427ea25da1c862d262d222d8e250c350c351e350a2e4837383728371f300237fa36e336b72f463150313531f628b126e7250e26a91df925fa248a250d1d9a20c720341f0918c429992954299c216e3573356b35fa2deb37db37d9375c306c376037593716303231183111313929b2244a2414241f1cb72449246324ac1b9c2282226521971981283f2828283d205c3558355035bb2de737d237db377a3089377737753745309a3179317531a1295e24af233e23aa1ba72434242d24921b3e23fc22b421e519cb275d270427161f3035293522358b2ddb37c837d33773308d3780377d37473023320d3209322b2af7232523b622fd1ab82401246d24fb1bb2213921b81fa318e828262985287620d334c934c534282d99378d3779374e30653747374e376c306a331a33f132332c67281228bf27c31d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d535ba35d33535a10a36153607362b962a36373619364b96563652364736da9c9e3682367d3639a0ec36d736d7364d9dae37a4379837e6a0653852384a38bb9e6e386e385a388698793782376237a1979836a2369236bb968e368b367936b196ac3697368b36d096dd36cf36c236429dc737b837a837f49d5d384c384238af9e63385d384938b89e94378a376637ce9d9736a0369336ba9679367e366736f59c9e368d367d36119dd436cc36b8363b9dcd37c437ab37f99d6b3859384e38c49e6c3860384d38c59eab37ae377b37df9dba36c836ad36279d97368f36813634a0ab3692368a3641a0bc36b536a13604a2873789377237b9a208380d380138a1a43a3859381a3804a7ea36c036d33680a73c26522595255f99d5253327fc25249a4127b129a626709d162c1b2def2abc9964357835a23591a30000000000000000d535ba35d33535a1d535ba35d33535a10a36153607362b962a36373619364b96563652364736da9c9e3682367d3639a0ec36d736d7364d9dae37a4379837e6a0653852384a38bb9e6e386e385a388698793782376237a1979836a2369236bb968e368b367936b196ac3697368b36d096dd36cf36c236429dc737b837a837f49d5d384c384238af9e63385d384938b89e94378a376637ce9d9736a0369336ba9679367e366736f59c9e368d367d36119dd436cc36b8363b9dcd37c437ab37f99d6b3859384e38c49e6c3860384d38c59eab37ae377b37df9dba36c836ad36279d97368f36813634a0ab3692368a3641a0bc36b536a13604a2873789377237b9a208380d380138a1a43a3859381a3804a7ea36c036d33680a73c26522595255f99d5253327fc25249a4127b129a626709d162c1b2def2abc9964357835a23591a364357835a23591a3f3350336e5351316f3350336e535131655365d3650367796803678366936fb1c853682366e36a896ac36a4368e36d096c736be36b536ec965e3771375a37a49d2038153816383698f937d637c6371298f636d536bf361b97a03690368236c396a93695368c36cc96a93697369236cc96b636af36ab36239d6d377d376837af9d0a380238fb372f9eea37d237bd370f9e1237ee36e2363897ab3696368c36ce96a43691368436169da33690368936159dac36a936a1361b9d603772375937a59d0d380638fd37349ef337e137c137169e29370937f6367b9dc636ac36a236309dbe369f3699362a9dbb369f369936289dc836b436ba3654a07c3773377437c7a0f237d937ea3719a3e837f337d5378ba49e36573676367ea56b301e3052303ba010346d330634bea23d2e6e2e562e94a0b92cd22d3a2da11aed35fa35f835eb24ed35fa35f835eb24ce350836b735729cce350836b735729c973682367236ba16b436b2369c36221db936af36ac36dd96c736b636ba36ec96d036be36b636f59682366f365e36a596ef35be35bb350e9626360a36f9354796a5369d368336c996d336b736b736f796c136bb36b036e596d136c436bc36f696c3369f36a336e7966d36603652368f960736f735e53527963636253611365896b736aa369636db96d536b736bd36f996bf36b936af36e396d036c236bb36389dc336a136a0362d9d6c365e365036eb9c1036fe35ed35a59c39362a361236c39cc136af3697362c9de636c636c836499dd236ca36b936399dda36ca36c136409dcc36b136b23656a0903684367e3630a00736fc35fd3563a1c535c835a03528a19d368f368436e8a15b365d365a36ada1e336ef36c13665a0123625361336f9a239366c3648365a1657366d365036db1c57366d365036db1c0a343a341334289d0a343a341334289d3d3637362336f79f3137113712375717e536d036df360a17f236e136e93617171737093701373d178b3583357f35a9158d306f306530a69027331c3317334d93823684367c36a5961037fa36f3363697f236e036d93617170d37f936013733171a370e37023741978d358b358535ab951430dc2fdf2f2a90c932b132b532ed927a367c3674369d9614370037f2363a97f336e436da3618970a37f936fd36649d1a370e370137709da835a835a335559c3d301c3021307d969c3286328a321099793678366e36f59c18370337f6363e97f836e636de361e970737f836fa362c9718370537f9366f9deb35e035e035899c56301f304630899932320c322332e89b513651364f3608a029370137fd367b9d0c370337ef36659d18370937103757a22e3717370037801d1736f535fb3538161736f535fb3538166b2fa72fb92fae156b2fa72fb92fae150a35df340235c9a1443749372f37a3a02b3717371a377d9d5237473743379b9db736c936aa36249d84315d31383139983b286c27df267b8e3e2abf299029c89017350135f334cc9bae37a9379f37e19d8b3782377537d0a0933797377c37d5a002370537ef3679a03a31fe300031ab9a7026a0250c251b90aa283728e127f491e734d934cb34419e9d379c378837dca081377a376b37caa0993797377f37d9a017371a37053786a08d3155315c31f59cf7254525d324549125285d27b6266893ba34b034a13439a08e378c377637d2a0873785376d37cda09c37a6378637dba00e371c37043781a0fc31c331b831a39b3e257c240324b18eac282f283928f7918d3478347434f89a853781376f37c29da737b7379a37e2a09d3795378037dca002371337f0365e1d7e3256325c32a1927e3256325c32a192802863299a280594802863299a2805949d2f1d2f4c2fc68ff235ef350b368d9c73378c376637c1a0403740372a37a0a0b834c034b534059ed12841287728608f32260225c525bf8c5a21fe211720bb82462d262d012d638d94369c369a36099d0b380c38073829a1ad3794379f37e6a0e134da34da34799b1b2846274a27498e842505252025a28549238c23d421b8837c2c3d2c422c948caf36b036ac36d3960f380d380b38379ec937ac37bb37f79d28351c351e35e69bb227e526cb26e58d09258d249f24b68bcd230524fb21fb8c2f2ccd2be22b6992a1369b369d363ba00e380e380b382ca1cf37b637c437fca062355c356235de9e66280e28ee27db93e8245024ca24438e3a22f5212020f28b8f2c652c622c12985f3656365b36e19cf9370238ed3717a1dd37ac37c437059edd35ca35d035fc953e281a28d627e0943e281a28d627e0940000000000000000802863299a2805949d2f1d2f4c2fc68ff235ef350b368d9c73378c376637c1a0403740372a37a0a0b834c034b534059ed12841287728608f32260225c525bf8c5a21fe211720bb82462d262d012d638d94369c369a36099d0b380c38073829a1ad3794379f37e6a0e134da34da34799b1b2846274a27498e842505252025a28549238c23d421b8837c2c3d2c422c948caf36b036ac36d3960f380d380b38379ec937ac37bb37f79d28351c351e35e69bb227e526cb26e58d09258d249f24b68bcd230524fb21fb8c2f2ccd2be22b6992a1369b369d363ba00e380e380b382ca1cf37b637c437fca062355c356235de9e66280e28ee27db93e8245024ca24438e3a22f5212020f28b8f2c652c622c12985f3656365b36e19cf9370238ed3717a1dd37ac37c437059edd35ca35d035fc953e281a28d627e094000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bc359c35b43580abfc35073600364daa2a362e36193619aa413640362f3662ab6f365936513601acae369f369c36e2ab7a3778376a376aac583844383d38daac56384c383e3890ac4b374837393736ab8a369236873677aa693672365d3657aa753668366036ccaa9a3693368636f4aa87377d376d3734ac51383b383038d2ac5338463837388dac6f375a374b37d3ab8b3696368b36e4aa563668364d36abaa63365d364c3622ab833682366d3645ab8c378a37723737ac64384e384238e7ac593848383938dbac813783375a3730acb136c136aa3679ab79367a366b363bab7936653660363bab7d367a366c363eabe7360137e336b5abfe370e38e43735ac3c3858383b3830acd53091309230b5a3c221442571260b1010242d24c222cb18061d6e23e31f6814da2c942db12ccca0bd35f1350336e0ab0000000000000000bc359c35b43580abbc359c35b43580abfc35073600364daa2a362e36193619aa413640362f3662ab6f365936513601acae369f369c36e2ab7a3778376a376aac583844383d38daac56384c383e3890ac4b374837393736ab8a369236873677aa693672365d3657aa753668366036ccaa9a3693368636f4aa87377d376d3734ac51383b383038d2ac5338463837388dac6f375a374b37d3ab8b3696368b36e4aa563668364d36abaa63365d364c3622ab833682366d3645ab8c378a37723737ac64384e384238e7ac593848383938dbac813783375a3730acb136c136aa3679ab79367a366b363bab7936653660363bab7d367a366c363eabe7360137e336b5abfe370e38e43735ac3c3858383b3830acd53091309230b5a3c221442571260b1010242d24c222cb18061d6e23e31f6814da2c942db12ccca0bd35f1350336e0abbd35f1350336e0abd535e535c33524aad535e535c33524aa433648363d36feaa79366c366136d1aa6f366f36573699ab84367a3667360eac8d3685367c36bcab05372137073725acea37d337cf37acaca3377e37743744acd136ad369f369caba83698368a366fab973687367c365cab863672366e3649ab7d367a367136a9ab193720370c3730accf37b937ae379cacab378b377a3786acde36bc36b7360eacab36a3369136dfab933685367736c3ab7e366c366536aaab6a366b36613692ab0b370d37f93628acdc37bf37b537a4acb03792377c378aacef36cf36bd3618acba36af369b36f1aba3368b368636d6ab95367b367736c5aba7368a369536daab24371b371c3737acbb37cc37a83751ac6b3759371b3756abc82fe42fce2ff49ac628ad289a2957201321651d1720121a5e21b6216122401ad8340b35cd34dfa5ae36d536ab3608abae36d536ab3608ab7635b035633524ab7635b035633524ab71365736503637acba36b636a4362faca3369936963657acae369f36a5365facaa369b3690365cac143613360236f3ab4e353235333599aaac3599358d350fab76366d36553605accb36b036ab3671acad36a336963627acc036b036a93633acaf3691368e3628ac293629361636abab673557354e35b9aab835ad3599351eab7b366c3659363daccc36b336ab3672aca8369c3692365bacba36ab36a23666acab3691368c365cac333631361c36b7ab6b355935513517abb135a835953572ab80366e36573640accc36b336ad3672acaa36a13692365cacbe36b036a83669acb1369836993697ac793673366c363cac3435403538357aaa7a356e35383577aa92358a3575350ba6712cb52c6a2cad204e293229ec28a720482b362a822b76213d3614361e3690a785367936813679ac85367936813679acdd322c33083326a9dd322c33083326a9c935cc35cb3556ac253709370537e6ace536ce36d736f3ac0637ec36f5360aadef36ec36dc36c2ac0835f634fe34e7aaf82eb42ea12e8fa4c431a531a931e9a739362e362b3678ac15370637f1364fadf236e536da3635ad1237003701374dadfb36f036e7363cad09350135fe343babda2da12d9b2d33a44a3125312b3198a7303623361f3671ac15370b37f1364fadf036e536d93633ad10370137003786ad0637fc36f33644ad2e3526352235c5ab1e2ee32ddf2d96a42031fc3005315ca72736163611369dac0e370337e6364aadee36de36d43632ad0937f836f83680ad0637f936ec3644ad733563356c3516aca92e152e712ec8a47030493064305fa64d364936293686ac8236a4367a360dac0b36353611365caad536e036d13674a9f836d036d236c8ac84357235813523ac84357235813523ac5b2d6d2d712d30a45b2d6d2d712d30a41f34ed330e3403ace136f836d636b2ae3c3725372937d0ae3a373e373437cdae27362636193698ad5c2f182ff02e39a670268325c524719d90285528082801a0e233cc33b833ebaa453741373137d8aeb237a93796373eaf87378437753753af8d367c3674362baefe2ebb2eb42e5ba64424be23fd227c9be8268e26d1250f9e78336c335f33cbaa3b3734371f37ceaeac37a637913739af8f37833775371eafab369f36983647ae5f2f1d2f192fb3a630247d23c6229d9bc926642681252c9e193314330933aeaa2a3722370e37bfaeb537b037923741af933792377f3721af91367e367a362eaef92fbd2fb72fffa6fc2528250025419d4a289a271028879fb8327b3294321caa833745374d37d4aefe37d937d33744afb1379c379137feaeed36dc36d8364dae273002301630c2a6273002301630c2a6ca25dc266125e59cca25dc266125e59c592dff2cf62c08a5e934eb34fa34b7ad3b372a3719378eb0fb36f536dc364ab0fc300331e830a5a99726dd250526349ed925e2247325219db520e720741ff59787295b29172934a148354c35433526aede37ce37cb37f5b06937603758378db0e030c330be3086a974240e249823559cd82470248224409c39230823fd21579a2828d1279f272ea03b3537352e35ecadde37c837d337d5b07e3770376a3799b03b311a311631eca932246523e722159c092596248924949ca9234c23fc21359b4527dc2677264e9f0b350235fb34dfadd837c337ce37f2b08b377c377837c1b0c731b131ab318baa2c234822ce21fb9ad524312458243d9c1624802382222b9bdf262c270d27779ebf34a934a53487adb537b037b337dbb0893770377137c0b034320332093207abcf25b9255825789dcf25b9255825789d0000000000000000ca25dc266125e59c592dff2cf62c08a5e934eb34fa34b7ad3b372a3719378eb0fb36f536dc364ab0fc300331e830a5a99726dd250526349ed925e2247325219db520e720741ff59787295b29172934a148354c35433526aede37ce37cb37f5b06937603758378db0e030c330be3086a974240e249823559cd82470248224409c39230823fd21579a2828d1279f272ea03b3537352e35ecadde37c837d337d5b07e3770376a3799b03b311a311631eca932246523e722159c092596248924949ca9234c23fc21359b4527dc2677264e9f0b350235fb34dfadd837c337ce37f2b08b377c377837c1b0c731b131ab318baa2c234822ce21fb9ad524312458243d9c1624802382222b9bdf262c270d27779ebf34a934a53487adb537b037b337dbb0893770377137c0b034320332093207abcf25b9255825789d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bc359c35b43580abfc35073600364daa2a362e36193619aa413640362f3662ab6f365936513601acae369f369c36e2ab7a3778376a376aac583844383d38daac56384c383e3890ac4b374837393736ab8a369236873677aa693672365d3657aa753668366036ccaa9a3693368636f4aa87377d376d3734ac51383b383038d2ac5338463837388dac6f375a374b37d3ab8b3696368b36e4aa563668364d36abaa63365d364c3622ab833682366d3645ab8c378a37723737ac64384e384238e7ac593848383938dbac813783375a3730acb136c136aa3679ab79367a366b363bab7936653660363bab7d367a366c363eabe7360137e336b5abfe370e38e43735ac3c3858383b3830acd53091309230b5a3c221442571260b1010242d24c222cb18061d6e23e31f6814da2c942db12ccca0bd35f1350336e0ab00000000000000000000000000000000d535e535c33524aa433648363d36feaa79366c366136d1aa6f366f36573699ab84367a3667360eac8d3685367c36bcab05372137073725acea37d337cf37acaca3377e37743744acd136ad369f369caba83698368a366fab973687367c365cab863672366e3649ab7d367a367136a9ab193720370c3730accf37b937ae379cacab378b377a3786acde36bc36b7360eacab36a3369136dfab933685367736c3ab7e366c366536aaab6a366b36613692ab0b370d37f93628acdc37bf37b537a4acb03792377c378aacef36cf36bd3618acba36af369b36f1aba3368b368636d6ab95367b367736c5aba7368a369536daab24371b371c3737acbb37cc37a83751ac6b3759371b3756abc82fe42fce2ff49ac628ad289a2957201321651d1720121a5e21b6216122401ad8340b35cd34dfa5ae36d536ab3608ab000000000000000000000000000000007635b035633524ab71365736503637acba36b636a4362faca3369936963657acae369f36a5365facaa369b3690365cac143613360236f3ab4e353235333599aaac3599358d350fab76366d36553605accb36b036ab3671acad36a336963627acc036b036a93633acaf3691368e3628ac293629361636abab673557354e35b9aab835ad3599351eab7b366c3659363daccc36b336ab3672aca8369c3692365bacba36ab36a23666acab3691368c365cac333631361c36b7ab6b355935513517abb135a835953572ab80366e36573640accc36b336ad3672acaa36a13692365cacbe36b036a83669acb1369836993697ac793673366c363cac3435403538357aaa7a356e35383577aa92358a3575350ba6712cb52c6a2cad204e293229ec28a720482b362a822b76213d3614361e3690a785367936813679ac00000000000000000000000000000000dd322c33083326a9c935cc35cb3556ac253709370537e6ace536ce36d736f3ac0637ec36f5360aadef36ec36dc36c2ac0835f634fe34e7aaf82eb42ea12e8fa4c431a531a931e9a739362e362b3678ac15370637f1364fadf236e536da3635ad1237003701374dadfb36f036e7363cad09350135fe343babda2da12d9b2d33a44a3125312b3198a7303623361f3671ac15370b37f1364fadf036e536d93633ad10370137003786ad0637fc36f33644ad2e3526352235c5ab1e2ee32ddf2d96a42031fc3005315ca72736163611369dac0e370337e6364aadee36de36d43632ad0937f836f83680ad0637f936ec3644ad733563356c3516aca92e152e712ec8a47030493064305fa64d364936293686ac8236a4367a360dac0b36353611365caad536e036d13674a9f836d036d236c8ac84357235813523ac000000000000000000000000000000005b2d6d2d712d30a41f34ed330e3403ace136f836d636b2ae3c3725372937d0ae3a373e373437cdae27362636193698ad5c2f182ff02e39a670268325c524719d90285528082801a0e233cc33b833ebaa453741373137d8aeb237a93796373eaf87378437753753af8d367c3674362baefe2ebb2eb42e5ba64424be23fd227c9be8268e26d1250f9e78336c335f33cbaa3b3734371f37ceaeac37a637913739af8f37833775371eafab369f36983647ae5f2f1d2f192fb3a630247d23c6229d9bc926642681252c9e193314330933aeaa2a3722370e37bfaeb537b037923741af933792377f3721af91367e367a362eaef92fbd2fb72fffa6fc2528250025419d4a289a271028879fb8327b3294321caa833745374d37d4aefe37d937d33744afb1379c379137feaeed36dc36d8364dae273002301630c2a600000000000000000000000000000000ca25dc266125e59c592dff2cf62c08a5e934eb34fa34b7ad3b372a3719378eb0fb36f536dc364ab0fc300331e830a5a99726dd250526349ed925e2247325219db520e720741ff59787295b29172934a148354c35433526aede37ce37cb37f5b06937603758378db0e030c330be3086a974240e249823559cd82470248224409c39230823fd21579a2828d1279f272ea03b3537352e35ecadde37c837d337d5b07e3770376a3799b03b311a311631eca932246523e722159c092596248924949ca9234c23fc21359b4527dc2677264e9f0b350235fb34dfadd837c337ce37f2b08b377c377837c1b0c731b131ab318baa2c234822ce21fb9ad524312458243d9c1624802382222b9bdf262c270d27779ebf34a934a53487adb537b037b337dbb0893770377137c0b034320332093207abcf25b9255825789d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006d2e482ec02ec828492ef62d7d2e9f2a222b312b132bcd2ac31ceb1f4916232a58a8eea6ada8e92950aa41aaaeaad229a6a920aa91aa9e2a1ea61ea70da7642ba21e68185918fd2bbf2947294029a82a1029af28a628e829af211220d21ce72956a84ca8afa887298fab80abe3abc829b0aba2ab0aac272a2fa79ea807a8cb2a7f218c1e731e5d2b4e2ac929332ab72a0729a728a128462a9321a021be1cd22947a8b4a737a8e0296fab69ab57abb7293dabb4aba2ab372a60a7bca820a8f72a9321951e801edb2a752af129d629f129d228de28cb284b291b20ee1cdd1c23295aa84ba8aea81d29c1abe7aa3babd028eaab68abd2ab0529d5a776a8e9a8fd286e1e7018439e4529ee210022d616b724c5a52ca608a66d959d229721d920e69a452328258f22d0a5ff228b243d23dda57fa69da50b9ca020000000000000000000000000000000007a306f308330872ace2f50304930bc2b962cc42cef2c822bba2115200820bc2aa3a99aa9f3a9d92a74ad6ead66ad062ba1aef1aedbae4c2b5aaac8a945aaca2bba2ce02cde2cd82b8c2ecd2ec52ee72aa62b6d2c602cca2a041df81c1b20d62a71aa61aa5caa612a9aadcbadc6ad872ab0aef1ae1bafd42a42aab4a926aa312bc32cec2ca82c722bd42ee52e1c2f942a0b2ca12c642c612afc1c1f20b521632afba954aa4eaa542a87adbeadb5ad792aa6aee6aed2aec92adcaa47aabbaa492b982cc22cb32c122b082f1a2f072f562aeb2b952c812c2e2a1a1d0a1dd421172a88aa70aa69aa052aa5ad99ad99adb329c4aefcaefeae642a1fac24abb5ab282a1c2b0d2c7b2b2829e02b3e2c152cb72630a4ffa290a3aa1c43253f24ae25561a4220f6202a21bc2453261728f12608249cab21abefab7a2b00000000000000000000000000000000f530f830b530bf2ae030e630c730582c482e112e022e5d2c57264b267425182cc2a9b4a927aad12bc2aee8aedfae252c39b068b075b0542bb5abe0abddabdd29c32e7c2e712e932a8f3086309330ef2bac2dd02dc92d1f2c82257b256f251d2c37aa95aa8daa232c30af43af43afca2b75b08cb081b0662b1aac3bac2fac632a492e432efb2db82aad308a3097308b2b1b2e392efc2dcf2b572677256c25c72bc5a923aa1caa672bf6ae44af0baf5f2b7eb0b0b089b00e2b78ac68ac63ac0d2a262e1b2e062e612a8e308130a3303e2b002e202e132ef42b91258a257a25e12b48aaa6aa9daaf02b35af1aaf16af6c2b9eb09bb094b0152bf2ac1eadf3acba29ab2d8c2d5d2dfa29c630d530c730702b6c2b3d2c2e2c3d2aae27dd2799273827321bf81dbc14b72a80262a278b274125bbaef3aec4aede2b000000000000000000000000000000002c2f7c2f352ffe28c730c830b0309d2ba02f112ff22f992c2c285e272528a92c23ac14ac53acf62c9bb098b08eb0342dedb0deb0f8b0eb2a77a6aea690a67d246f2c722c5d2c84271b312f312c313e2c112f042f272f032d802728286527ed2c6eab5babd0ab3c2d89b049b07ab0032dc0b0a3b0b8b0ef2a2ca647a649a60724822ba72b5e2b3c27fd300e310c31062c462f3c2f212fc92c7c2729286427ed2c6aabe8aa59ab042d8cb04db063b0cd2ce4b0c7b0d9b0d02a8aa6a7a674a6ae232c2b4e2b332b9526fa3006310431002c562f4d2f662fd42c8c272f282828bb2c6dabebaa58ab052d6db04ab05cb0ca2c26b1e7b004b1ff2a26a810a842a837243f2ae929c42947260531183100312c2c8b2fc12f812feb2c0d2b842b732bc72c2aa426a42aa40e2c9e2783288028ab2623b001b037b03a2b00000000000000000000000000000000542a6d2a6b2a32258f2f652f912f0c2a3d3083301a30202e4d29c8283d29422e34ad70ad68ad982eaeb1aeb1a3b16f2d07abecaac5aa092649966b95c3946c1c24210721e020231f162f012f2f2f302af430f330e730f12d2e2828281f287c2eaeade9adddad652ea4b1afb1a9b11d2d80aa5baa75aa32259597c4969d96e319a61eb61e2c1e011d862eba2ecb2ef02907310431f530e12da52825289528752e71ada6ad9dad5f2ea3b1b4b1adb1702df9aadaaaf6aabd2503966095eb947f19b11d8f1d301d631c0f2e272e3e2e6829ff3034310931d62d2429a5280f293c2e33adaead9ead292e9ab1a9b1a2b12f2dc7aba9ab9dab0d26019cfc9a3d9a381a051de61cd51c951d772d9b2d902d8e291d3124310631382e452bb82a272bd92ea8ad9aad55ad8e2e69afddaf2faf972db3acaeac7eac2f28000000000000000000000000000000004b21c42155211d1d2829b928a028d9247c2f542feb2fe12d0a26d527c427163032b010b01fb010306bac89ac72ac2b29319ad7999a992d1d0018ab166d170d1c6f155615051431188722852260227221e22fbd2f0530d42d512ac429c32a7330b3afa6af9eaf0f3045ac59ac53ac1f298b995699d198411b048e908a998df91a980f790fd20c81193d20fe1f0c20b81ff32fc12f0730b62d4f2bbc2a452b8e3055af81af7faf3a30b1acc2acbfac8029469a85993399be1a208b5d8d658ad61a161103108d0eae19981d4a1d091db21e5e2f542f9d2f5a2dc52b332b1e2c683059af4caf4aaf213023ad43ad40ad152a019c2f9bf69a0b1aaa98eb976098841a458baa8ae58a15186b1e681ee91d8520da2e7d2eed2ed02cba2c752ce32c283004ae27aeb6ad8c2fafaea0ae7bae052c9a9e1b9e909d531d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006d2e482ec02ec828492ef62d7d2e9f2a222b312b132bcd2ac31ceb1f4916232a58a8eea6ada8e92950aa41aaaeaad229a6a920aa91aa9e2a1ea61ea70da7642ba21e68185918fd2bbf2947294029a82a1029af28a628e829af211220d21ce72956a84ca8afa887298fab80abe3abc829b0aba2ab0aac272a2fa79ea807a8cb2a7f218c1e731e5d2b4e2ac929332ab72a0729a728a128462a9321a021be1cd22947a8b4a737a8e0296fab69ab57abb7293dabb4aba2ab372a60a7bca820a8f72a9321951e801edb2a752af129d629f129d228de28cb284b291b20ee1cdd1c23295aa84ba8aea81d29c1abe7aa3babd028eaab68abd2ab0529d5a776a8e9a8fd286e1e7018439e4529ee210022d616b724c5a52ca608a66d959d229721d920e69a452328258f22d0a5ff228b243d23dda57fa69da50b9ca02000000000000000006d2e482ec02ec8286d2e482ec02ec828492ef62d7d2e9f2a222b312b132bcd2ac31ceb1f4916232a58a8eea6ada8e92950aa41aaaeaad229a6a920aa91aa9e2a1ea61ea70da7642ba21e68185918fd2bbf2947294029a82a1029af28a628e829af211220d21ce72956a84ca8afa887298fab80abe3abc829b0aba2ab0aac272a2fa79ea807a8cb2a7f218c1e731e5d2b4e2ac929332ab72a0729a728a128462a9321a021be1cd22947a8b4a737a8e0296fab69ab57abb7293dabb4aba2ab372a60a7bca820a8f72a9321951e801edb2a752af129d629f129d228de28cb284b291b20ee1cdd1c23295aa84ba8aea81d29c1abe7aa3babd028eaab68abd2ab0529d5a776a8e9a8fd286e1e7018439e4529ee210022d616b724c5a52ca608a66d959d229721d920e69a452328258f22d0a5ff228b243d23dda57fa69da50b9ca0207fa69da50b9ca0207a306f308330872a7a306f308330872ace2f50304930bc2b962cc42cef2c822bba2115200820bc2aa3a99aa9f3a9d92a74ad6ead66ad062ba1aef1aedbae4c2b5aaac8a945aaca2bba2ce02cde2cd82b8c2ecd2ec52ee72aa62b6d2c602cca2a041df81c1b20d62a71aa61aa5caa612a9aadcbadc6ad872ab0aef1ae1bafd42a42aab4a926aa312bc32cec2ca82c722bd42ee52e1c2f942a0b2ca12c642c612afc1c1f20b521632afba954aa4eaa542a87adbeadb5ad792aa6aee6aed2aec92adcaa47aabbaa492b982cc22cb32c122b082f1a2f072f562aeb2b952c812c2e2a1a1d0a1dd421172a88aa70aa69aa052aa5ad99ad99adb329c4aefcaefeae642a1fac24abb5ab282a1c2b0d2c7b2b2829e02b3e2c152cb72630a4ffa290a3aa1c43253f24ae25561a4220f6202a21bc2453261728f12608249cab21abefab7a2b9cab21abefab7a2bf530f830b530bf2af530f830b530bf2ae030e630c730582c482e112e022e5d2c57264b267425182cc2a9b4a927aad12bc2aee8aedfae252c39b068b075b0542bb5abe0abddabdd29c32e7c2e712e932a8f3086309330ef2bac2dd02dc92d1f2c82257b256f251d2c37aa95aa8daa232c30af43af43afca2b75b08cb081b0662b1aac3bac2fac632a492e432efb2db82aad308a3097308b2b1b2e392efc2dcf2b572677256c25c72bc5a923aa1caa672bf6ae44af0baf5f2b7eb0b0b089b00e2b78ac68ac63ac0d2a262e1b2e062e612a8e308130a3303e2b002e202e132ef42b91258a257a25e12b48aaa6aa9daaf02b35af1aaf16af6c2b9eb09bb094b0152bf2ac1eadf3acba29ab2d8c2d5d2dfa29c630d530c730702b6c2b3d2c2e2c3d2aae27dd2799273827321bf81dbc14b72a80262a278b274125bbaef3aec4aede2bbbaef3aec4aede2b2c2f7c2f352ffe282c2f7c2f352ffe28c730c830b0309d2ba02f112ff22f992c2c285e272528a92c23ac14ac53acf62c9bb098b08eb0342dedb0deb0f8b0eb2a77a6aea690a67d246f2c722c5d2c84271b312f312c313e2c112f042f272f032d802728286527ed2c6eab5babd0ab3c2d89b049b07ab0032dc0b0a3b0b8b0ef2a2ca647a649a60724822ba72b5e2b3c27fd300e310c31062c462f3c2f212fc92c7c2729286427ed2c6aabe8aa59ab042d8cb04db063b0cd2ce4b0c7b0d9b0d02a8aa6a7a674a6ae232c2b4e2b332b9526fa3006310431002c562f4d2f662fd42c8c272f282828bb2c6dabebaa58ab052d6db04ab05cb0ca2c26b1e7b004b1ff2a26a810a842a837243f2ae929c42947260531183100312c2c8b2fc12f812feb2c0d2b842b732bc72c2aa426a42aa40e2c9e2783288028ab2623b001b037b03a2b23b001b037b03a2b542a6d2a6b2a3225542a6d2a6b2a32258f2f652f912f0c2a3d3083301a30202e4d29c8283d29422e34ad70ad68ad982eaeb1aeb1a3b16f2d07abecaac5aa092649966b95c3946c1c24210721e020231f162f012f2f2f302af430f330e730f12d2e2828281f287c2eaeade9adddad652ea4b1afb1a9b11d2d80aa5baa75aa32259597c4969d96e319a61eb61e2c1e011d862eba2ecb2ef02907310431f530e12da52825289528752e71ada6ad9dad5f2ea3b1b4b1adb1702df9aadaaaf6aabd2503966095eb947f19b11d8f1d301d631c0f2e272e3e2e6829ff3034310931d62d2429a5280f293c2e33adaead9ead292e9ab1a9b1a2b12f2dc7aba9ab9dab0d26019cfc9a3d9a381a051de61cd51c951d772d9b2d902d8e291d3124310631382e452bb82a272bd92ea8ad9aad55ad8e2e69afddaf2faf972db3acaeac7eac2f28b3acaeac7eac2f284b21c42155211d1d4b21c42155211d1d2829b928a028d9247c2f542feb2fe12d0a26d527c427163032b010b01fb010306bac89ac72ac2b29319ad7999a992d1d0018ab166d170d1c6f155615051431188722852260227221e22fbd2f0530d42d512ac429c32a7330b3afa6af9eaf0f3045ac59ac53ac1f298b995699d198411b048e908a998df91a980f790fd20c81193d20fe1f0c20b81ff32fc12f0730b62d4f2bbc2a452b8e3055af81af7faf3a30b1acc2acbfac8029469a85993399be1a208b5d8d658ad61a161103108d0eae19981d4a1d091db21e5e2f542f9d2f5a2dc52b332b1e2c683059af4caf4aaf213023ad43ad40ad152a019c2f9bf69a0b1aaa98eb976098841a458baa8ae58a15186b1e681ee91d8520da2e7d2eed2ed02cba2c752ce32c283004ae27aeb6ad8c2fafaea0ae7bae052c9a9e1b9e909d531d9a9e1b9e909d531d00000000000000004b21c42155211d1d2829b928a028d9247c2f542feb2fe12d0a26d527c427163032b010b01fb010306bac89ac72ac2b29319ad7999a992d1d0018ab166d170d1c6f155615051431188722852260227221e22fbd2f0530d42d512ac429c32a7330b3afa6af9eaf0f3045ac59ac53ac1f298b995699d198411b048e908a998df91a980f790fd20c81193d20fe1f0c20b81ff32fc12f0730b62d4f2bbc2a452b8e3055af81af7faf3a30b1acc2acbfac8029469a85993399be1a208b5d8d658ad61a161103108d0eae19981d4a1d091db21e5e2f542f9d2f5a2dc52b332b1e2c683059af4caf4aaf213023ad43ad40ad152a019c2f9bf69a0b1aaa98eb976098841a458baa8ae58a15186b1e681ee91d8520da2e7d2eed2ed02cba2c752ce32c283004ae27aeb6ad8c2fafaea0ae7bae052c9a9e1b9e909d531d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c2e7c2e282f94a2742e1d2ea22ea81ce22af02a332bc21c79160820699674966fa80fa759a8fc9cd9aac4aa34ab3d9d26a99ba90eaad99ddaa311a6eda49e9e861886987198869801298d28f328ab97d62872286728c596dc212d20f51c039d78a8fda7cda80c9d45ac9aabfaab379d32ab24ab16abe99d03a51da810a77ba1992175186018af9e0b2a88296e29c69dd628dc286828129d212025208a16f89c6fa8f1a7c3a8049d08ac98abefab56a038ab30ab18abf5a034a62aa824a78ca1c51e7818641895a1a129a3297e29e6a0ef28fa28792854a034202f20a416dca178a867a8cca8dfa1f3ab7eabd3abfda172abf9aa5dab54a4b0a665a8aaa7afa55118a89e3ca11ba60f172b1df71618a853a08d9fbf9f3e986619be19c618949bbb2121250921729fca28502a11288496d1a095950821fb9e00000000000000009c2e7c2e282f94a29c2e7c2e282f94a2742e1d2ea22ea81ce22af02a332bc21c79160820699674966fa80fa759a8fc9cd9aac4aa34ab3d9d26a99ba90eaad99ddaa311a6eda49e9e861886987198869801298d28f328ab97d62872286728c596dc212d20f51c039d78a8fda7cda80c9d45ac9aabfaab379d32ab24ab16abe99d03a51da810a77ba1992175186018af9e0b2a88296e29c69dd628dc286828129d212025208a16f89c6fa8f1a7c3a8049d08ac98abefab56a038ab30ab18abf5a034a62aa824a78ca1c51e7818641895a1a129a3297e29e6a0ef28fa28792854a034202f20a416dca178a867a8cca8dfa1f3ab7eabd3abfda172abf9aa5dab54a4b0a665a8aaa7afa55118a89e3ca11ba60f172b1df71618a853a08d9fbf9f3e986619be19c618949bbb2121250921729fca28502a11288496d1a095950821fb9ed1a095950821fb9e9b308e30a83024969b308e30a8302496fb2f6b3062307f16aa2cda2c032d9a16d22127201a20fc9c2daab8a9a5a9c896f2adb3adacade29676aec4aeafaeb39d0eaa78a900aa409e742ce02c962c00988d2ede2ec82ef996d22b4b2c772c069d191d0a1d2e200a9d96aaf0aa7faa0c9d1aae14ae47ae1e9dc1ae0daff8aec8a0eea9e2a9dca9249eac2cdd2c922cfd9d1b2f302f232f4e9ddf2b852c7e2c0c9d161d071d2820079d24aa7daa0caa069ddaad0eae08ae199db4ae02afebaeb49df2a9e8a960aa299e702ca72c552c099ef82e122f382f639d372c942c8d2c42a02a1d121d362039a0a8aa8daa86aa39a0f3ade1ade7adfda1ceae02af04afa8a2dbab43abd3ab82a44f2a5b2bc02a90a4542c262ca42c42a50fa663a534a6e29f269495131b141ba35f0e900e790e4fa00d25c826c025501e41ac1aacaaac7c2641ac1aacaaac7c26533157310f312896533157310f31289619312331fd30a5164f2e4e2e032ed6167026652689251e9dd7a9c8a9cca9da9610af35af2cafe29684b092b09fb0919673ac4eac7bacdd95292fd82ec42e2b96b830b230ba30c196fc2d1b2ee52ddb969a2595258c25df964faab1aaa9aae89671af80af84afc296aab0bab0b0b08396b6aca9ac9cac929ca42e912e7c2e4696e030bb30c830cd96ff2d522e202e249d992593258b25dd964eaaafaaa8aa2c9d71af4caf4baf149da9b0b9b095b0e19c20ade0acd2ac979c742e972e4b2eb89ccb30bf30c9301e9d462e602e2b2e309da9257f269325339d57aab7aaaeaa339d7baf5eaf5faf45a0c3b0d5b0d1b028a07bada2ada3ada39ffb2dff2dd52d619f0331dd30f030dca15c2c922c5b2cafa12722f72309224f9d74a8e6a8d9a80fa343add1ace9aceb1ce7b014b116b1be21e7b014b116b1be2149306b304230519449306b304230519453314e312331c29cea2f542f1e3036972e2821289b28f59619ac10ac4dac0697cfb0c6b0c0b02f9787b17fb17ab1a195b8a8bea8b2a88690892dbb2d7d2d4293743190318931a796192f022f342f201789272b286e2705176dab57abd2ab1f17b3b072b0a4b0341745b143b154b1a9157da894a875a80390b62cdb2ca72cd5926d316e3167319f96572f422f6d2f25978a272e286f27099769ab57abceab1f97b3b072b086b0349776b15eb170b1559ccda8eba8cfa84b96962cd62c8a2cff9852316b3149319a96952f452f712f299739282f282a280b9766abe5aa58ab1e97b2b06cb081b0609dceb1acb1acb17f9cbea9b8a9cca943991a2c012cbc2bb79b7e319831953108a00e30ef2f123078a04628402886275e9d78ab68ab70ab49a2a4b074b04cb06620fab1d8b1deb18f1cfab1d8b1deb18f1c592c8c2c872ce218592c8c2c872ce218c930b330d530769bb130f030873070974329c028aa293d977dadb1adadad6e9745b271b26eb2ed9653ad58ad34ad1b9805971a979496bc90de233e235e236790d530d430db30639e163151312b31e3a0182812280c28caa0ebad2daed9add8a035b253b240b246a221ade6acfcac769cf499909951992d8fb0203c20162061917f3086307930309e493167315831dba08d2889287f28c6a0b3adefad9eadd8a029b249b237b258a25cad3bad58adc39cc29834982898b690ce1fee1e881e94922f3039302c3030a07b3199316b31bea20c290929fa28b8a277adfaada4ade2a023b24bb236b28aa0f8adbeadcbad5b9bef9c389ccf9bde8a531c231cd01b698ea02fc52f9a2f9094d1310c32df31aa971b2a272a112ae09777adafad63adbe97c2b1ecb1cfb15222aeae85ae71ae7912aeae85ae71ae79124524af24962428994524af2496242899292ca92bbe2b8a98b230b0301031939f212793287c2856a492b092b0a1b0a0a07ab096b09eb03ea0609d069dfd9c6e912315cb148615648eaf174d18df150f83552850284528e29367316e31a231109d732af129732b2aa159b04bb051b0d6a08eb09bb0afb06e9bf19e269e299e928d398c688e8b8eb08b47160516a614c789392604262e26548c7e317f31cd311f9d832b7f2b002c349e29b01ab022b0e09dd0b0dab0f0b0859e429ed59dbe9d478d6d8ecf8de68df88aba15e6150214218d0125aa24d824fb9457315331a53137a0032c032c842c2ca10cb0feaf07b0eca006b116b11db1caa08fa056a03da03e93d3976e972098f490f28bd88ecb8dd88e00246f23b0230d990831e7301f31a9a1f62c3e2d702d9ba465aebbae90ae5da6f1b1f4b1fbb16f9cfc9f1fa0609fc295fc9f1fa0609fc29500000000000000004524af2496242899292ca92bbe2b8a98b230b0301031939f212793287c2856a492b092b0a1b0a0a07ab096b09eb03ea0609d069dfd9c6e912315cb148615648eaf174d18df150f83552850284528e29367316e31a231109d732af129732b2aa159b04bb051b0d6a08eb09bb0afb06e9bf19e269e299e928d398c688e8b8eb08b47160516a614c789392604262e26548c7e317f31cd311f9d832b7f2b002c349e29b01ab022b0e09dd0b0dab0f0b0859e429ed59dbe9d478d6d8ecf8de68df88aba15e6150214218d0125aa24d824fb9457315331a53137a0032c032c842c2ca10cb0feaf07b0eca006b116b11db1caa08fa056a03da03e93d3976e972098f490f28bd88ecb8dd88e00246f23b0230d990831e7301f31a9a1f62c3e2d702d9ba465aebbae90ae5da6f1b1f4b1fbb16f9cfc9f1fa0609fc2950000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e2e5a2e012fb2ab962e402ecc2e93a9192a1d2a6b2a1daa6396c91c5096fbaa4fa8b3a7a3a87fab08ab65ab61abd1abf7a9f6a963aa68acfda413a708a7c3ac8921951e7f1e86ac482acf29392a34ab6228672860287faa1720ef1c7f1660aabca84ba816a9bfaa1bac17ac44ac57ab72ab68ab58ab2eac0fa697a802a8b9acf72475216121c6ac5b2b562ac02a1bac6228692862285babda1ce71c6e9628ab48a844a89fa81bab0dac0dac34ac44ab77abf0abd7ab35ac49a7aca814a8cfacc52377216421c8acf12a792acd2a32ac7c2886287728f9abf51cf61c8e16a5abc0a849a8aea88cab09ac3bab94aba5abd4aaedaad0aad2aba1a6c3a748a845acf2a528a80da805ac82ac68ac7cacb3a2499dd4a0cea16513179a549b5c9a6518cf0c1c13870cc21abb2651285c2673a07ea5d3a25fa165ab00000000000000007e2e5a2e012fb2ab7e2e5a2e012fb2ab962e402ecc2e93a9192a1d2a6b2a1daa6396c91c5096fbaa4fa8b3a7a3a87fab08ab65ab61abd1abf7a9f6a963aa68acfda413a708a7c3ac8921951e7f1e86ac482acf29392a34ab6228672860287faa1720ef1c7f1660aabca84ba816a9bfaa1bac17ac44ac57ab72ab68ab58ab2eac0fa697a802a8b9acf72475216121c6ac5b2b562ac02a1bac6228692862285babda1ce71c6e9628ab48a844a89fa81bab0dac0dac34ac44ab77abf0abd7ab35ac49a7aca814a8cfacc52377216421c8acf12a792acd2a32ac7c2886287728f9abf51cf61c8e16a5abc0a849a8aea88cab09ac3bab94aba5abd4aaedaad0aad2aba1a6c3a748a845acf2a528a80da805ac82ac68ac7cacb3a2499dd4a0cea16513179a549b5c9a6518cf0c1c13870cc21abb2651285c2673a07ea5d3a25fa165ab7ea5d3a25fa165ab833078308d30f5aa833078308d30f5aae42f7530543004ab3c2c682c942c94abbf21ed1c0c2001ac08aa94a9eca908acbfadeeade6ad0eac9caeb6ae9dae35ac50aabea9bba99eacc02c232d1d2d2faca22eec2e132f75ab6f2b502c112c5dabba16aa1623204aab74aac9aa5caa9cab1cae19ae45aea5abaeaeefaedcae6facbba9aba9a3a9cfacc62cef2ce42c74ac1f2f332f2d2ff3ab722b572c4b2cd6abb716fe1c2020b3ab6caa5aaa53aafdabd5add6ad01ae93aba1aedcaec9ae2aacc5aaafa926aa93ac8a2cf42ca82c78ac312f472f342f05acf12b5f2c522ce3ab151d031d2a20baab17aa69aa65aa08acd6adbdadc6ad11acf3aeb0aeb1ae32aca9aa38aa1caa5bac1a270827b527ccaad4a6aba6d9a60d9b7ea040a0eaa01a2074981495f5977416cb8c4a8b548fa71a41a5d4a4d2a51da6ddad36ae7dae32abddad36ae7dae32abec30f230af3013abec30f230af3013abe230e730c93026ac1e2e1a2ed42d64ac812551269f2486acc2a9b4a926aa8baceaae0faf04af52ac38b050b05cb0f2ab9dabcaabccabccaac92e572e762e53abb0308f30983034acbe2dde2da32d60ac8a2581259f2457ac3faa9eaa96aa60ac5caf70af6daf4bac5fb092b06bb008ac0dac2cacf4abfdaa4b2e112e292e6dabb5308f309c3033acf72d172ed92d98ac86257b25742553accca998aa8faa5cac21af3aaf35af4bac67b098b06fb00dac3cac5aac53acffaa152e0c2ef82d66ab9d3090309b3034acf72d4e2e122e62ac87258025742556ac3daa9eaa96aa60ac27af42af43af86accdb0c9b0c3b038acbbacf0aceaac88aa8d2e262e3f2e69aa112d372df62c02a6898ccf0c828c4221c592a4946594b920a614588aab8bdb2046ad55ad2cad5ea70cb1d5b023b188ab0cb1d5b023b188abf42e442f022f26a9f42e442f022f26a9c130c330aa302aaca32f122ff32f46ad2e28612795281aad25ac16ac54ac31ad97b095b08bb0f8acdbb0cab0e6b0ceaa57a686a673a699a4472c5e2c4a2cbea71d312d312a3170ac1f2f0f2ff92e44ad89272e286f272bad71ab5fabd2ab40ad82b043b076b033ad9eb083b0a8b030abe1a504a6d0a50ba42c2b4e2b022b62a7fc300a31073199ac582f4e2f332f47ad87272e286e2764ad70abedaa5fab79ad6db04ab061b03cadd5b0b9b0cab0b8ab58a67ba647a66aa4f32a132bce2a79a7f5300031e3305fac8a2f452f5f2f42ad33282a2824285eadf5aae5aa56ab72ad8ab048b05cb03aad42b107b126b10aac17a8dba70fa85ea4282aac29ac296da6fa302a31f63083acb62dd42de32dd7ab8e268727ce25bea98ba695a686a69ca82bb0efaff1af3dac3cb12bb123b178ab3cb12bb123b178abda29042af229caa3da29042af229caa34c2f452f702ff4aa39308130173057ae4f29c92841297fae30ad6ead67ad96ae8bb1a4b198b198ada2aa82aa7aaa00a6579593949094d69cbb20a1207020549fdb2ee72ef52ed7aad030eb30c330d4ae2c2828281d2875afa5ade0add5ad50af98b1a3b19cb150ae4eaa2daa26aa56a6e4972a97ea960a9b481e2c1ea91df59d602e742e872ec0aae730ff30f230c8aea7282628962871af6dada2ad98ad4faf95b1a6b1a1b13caea5aa86aaa0aab2a6ae96f995d695d09a171dff1c4d1ccf9dd52dee2d012ea9aaf8302d310331f1aeac28272912297baf32adadad9ead5eaf80b18ab187b151ae71ab39ab33ab09a7a29dda9cb59c869c9c1d371dd51dab9e692d882d822dafa9743182314d319daee32ac32abe2a62afc9acfbacf3ac2aaf94b187b167b175ae02acbdabc1ab45a602acbdabc1ab45a6f0203321c320759ef0203321c320759efe289528792806a5212f232fb42fe2ad0026c627b327bfb02db00db01ab046b004ac33ac30acd6a942990d99cd98b59d4a18ca17b118719cf514d9145f13759842223d22ee2137a1ab2f862fa32f2baec629bb29372aebb0afafa6af9daf87b001ac10ac1fac65a9d49990993599139c6c0b87049b04c99b6114a1137f12649a2e20db1fe71f9b9f982f922fd92f13aec72ab42a3d2be7b04baf3daf73afb0b04cac46ac57acf1a97d991299f5986f9b6d0eda0d0d10519c5b121f113310de9aae1d5d1d0e1de59e292f1c2f3b2ffdadc32b2f2b1c2ce4b057af49af45afb7b0bfacdbacd6aca1aafb9a1d9aa699509a799825984c98a09b4d8f4f90798f959a3c1b181b6d1bfb9e492ee02d722e93adcb2c8a2c092d37b1a6ad0dae94ad0ab1cbadb5adbbad32ab499d639db09c929d499d639db09c929d0000000000000000f0203321c320759efe289528792806a5212f232fb42fe2ad0026c627b327bfb02db00db01ab046b004ac33ac30acd6a942990d99cd98b59d4a18ca17b118719cf514d9145f13759842223d22ee2137a1ab2f862fa32f2baec629bb29372aebb0afafa6af9daf87b001ac10ac1fac65a9d49990993599139c6c0b87049b04c99b6114a1137f12649a2e20db1fe71f9b9f982f922fd92f13aec72ab42a3d2be7b04baf3daf73afb0b04cac46ac57acf1a97d991299f5986f9b6d0eda0d0d10519c5b121f113310de9aae1d5d1d0e1de59e292f1c2f3b2ffdadc32b2f2b1c2ce4b057af49af45afb7b0bfacdbacd6aca1aafb9a1d9aa699509a799825984c98a09b4d8f4f90798f959a3c1b181b6d1bfb9e492ee02d722e93adcb2c8a2c092d37b1a6ad0dae94ad0ab1cbadb5adbbad32ab499d639db09c929d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e2e5a2e012fb2ab962e402ecc2e93a9192a1d2a6b2a1daa6396c91c5096fbaa4fa8b3a7a3a87fab08ab65ab61abd1abf7a9f6a963aa68acfda413a708a7c3ac8921951e7f1e86ac482acf29392a34ab6228672860287faa1720ef1c7f1660aabca84ba816a9bfaa1bac17ac44ac57ab72ab68ab58ab2eac0fa697a802a8b9acf72475216121c6ac5b2b562ac02a1bac6228692862285babda1ce71c6e9628ab48a844a89fa81bab0dac0dac34ac44ab77abf0abd7ab35ac49a7aca814a8cfacc52377216421c8acf12a792acd2a32ac7c2886287728f9abf51cf61c8e16a5abc0a849a8aea88cab09ac3bab94aba5abd4aaedaad0aad2aba1a6c3a748a845acf2a528a80da805ac82ac68ac7cacb3a2499dd4a0cea16513179a549b5c9a6518cf0c1c13870cc21abb2651285c2673a07ea5d3a25fa165ab00000000000000000000000000000000833078308d30f5aae42f7530543004ab3c2c682c942c94abbf21ed1c0c2001ac08aa94a9eca908acbfadeeade6ad0eac9caeb6ae9dae35ac50aabea9bba99eacc02c232d1d2d2faca22eec2e132f75ab6f2b502c112c5dabba16aa1623204aab74aac9aa5caa9cab1cae19ae45aea5abaeaeefaedcae6facbba9aba9a3a9cfacc62cef2ce42c74ac1f2f332f2d2ff3ab722b572c4b2cd6abb716fe1c2020b3ab6caa5aaa53aafdabd5add6ad01ae93aba1aedcaec9ae2aacc5aaafa926aa93ac8a2cf42ca82c78ac312f472f342f05acf12b5f2c522ce3ab151d031d2a20baab17aa69aa65aa08acd6adbdadc6ad11acf3aeb0aeb1ae32aca9aa38aa1caa5bac1a270827b527ccaad4a6aba6d9a60d9b7ea040a0eaa01a2074981495f5977416cb8c4a8b548fa71a41a5d4a4d2a51da6ddad36ae7dae32ab00000000000000000000000000000000ec30f230af3013abe230e730c93026ac1e2e1a2ed42d64ac812551269f2486acc2a9b4a926aa8baceaae0faf04af52ac38b050b05cb0f2ab9dabcaabccabccaac92e572e762e53abb0308f30983034acbe2dde2da32d60ac8a2581259f2457ac3faa9eaa96aa60ac5caf70af6daf4bac5fb092b06bb008ac0dac2cacf4abfdaa4b2e112e292e6dabb5308f309c3033acf72d172ed92d98ac86257b25742553accca998aa8faa5cac21af3aaf35af4bac67b098b06fb00dac3cac5aac53acffaa152e0c2ef82d66ab9d3090309b3034acf72d4e2e122e62ac87258025742556ac3daa9eaa96aa60ac27af42af43af86accdb0c9b0c3b038acbbacf0aceaac88aa8d2e262e3f2e69aa112d372df62c02a6898ccf0c828c4221c592a4946594b920a614588aab8bdb2046ad55ad2cad5ea70cb1d5b023b188ab00000000000000000000000000000000f42e442f022f26a9c130c330aa302aaca32f122ff32f46ad2e28612795281aad25ac16ac54ac31ad97b095b08bb0f8acdbb0cab0e6b0ceaa57a686a673a699a4472c5e2c4a2cbea71d312d312a3170ac1f2f0f2ff92e44ad89272e286f272bad71ab5fabd2ab40ad82b043b076b033ad9eb083b0a8b030abe1a504a6d0a50ba42c2b4e2b022b62a7fc300a31073199ac582f4e2f332f47ad87272e286e2764ad70abedaa5fab79ad6db04ab061b03cadd5b0b9b0cab0b8ab58a67ba647a66aa4f32a132bce2a79a7f5300031e3305fac8a2f452f5f2f42ad33282a2824285eadf5aae5aa56ab72ad8ab048b05cb03aad42b107b126b10aac17a8dba70fa85ea4282aac29ac296da6fa302a31f63083acb62dd42de32dd7ab8e268727ce25bea98ba695a686a69ca82bb0efaff1af3dac3cb12bb123b178ab00000000000000000000000000000000da29042af229caa34c2f452f702ff4aa39308130173057ae4f29c92841297fae30ad6ead67ad96ae8bb1a4b198b198ada2aa82aa7aaa00a6579593949094d69cbb20a1207020549fdb2ee72ef52ed7aad030eb30c330d4ae2c2828281d2875afa5ade0add5ad50af98b1a3b19cb150ae4eaa2daa26aa56a6e4972a97ea960a9b481e2c1ea91df59d602e742e872ec0aae730ff30f230c8aea7282628962871af6dada2ad98ad4faf95b1a6b1a1b13caea5aa86aaa0aab2a6ae96f995d695d09a171dff1c4d1ccf9dd52dee2d012ea9aaf8302d310331f1aeac28272912297baf32adadad9ead5eaf80b18ab187b151ae71ab39ab33ab09a7a29dda9cb59c869c9c1d371dd51dab9e692d882d822dafa9743182314d319daee32ac32abe2a62afc9acfbacf3ac2aaf94b187b167b175ae02acbdabc1ab45a600000000000000000000000000000000f0203321c320759efe289528792806a5212f232fb42fe2ad0026c627b327bfb02db00db01ab046b004ac33ac30acd6a942990d99cd98b59d4a18ca17b118719cf514d9145f13759842223d22ee2137a1ab2f862fa32f2baec629bb29372aebb0afafa6af9daf87b001ac10ac1fac65a9d49990993599139c6c0b87049b04c99b6114a1137f12649a2e20db1fe71f9b9f982f922fd92f13aec72ab42a3d2be7b04baf3daf73afb0b04cac46ac57acf1a97d991299f5986f9b6d0eda0d0d10519c5b121f113310de9aae1d5d1d0e1de59e292f1c2f3b2ffdadc32b2f2b1c2ce4b057af49af45afb7b0bfacdbacd6aca1aafb9a1d9aa699509a799825984c98a09b4d8f4f90798f959a3c1b181b6d1bfb9e492ee02d722e93adcb2c8a2c092d37b1a6ad0dae94ad0ab1cbadb5adbbad32ab499d639db09c929d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d349434d634f029c334f2340135f52a223545352335ee292f3552353b35b2294035603542357d295c356b356b35d129ce35f935df35912a93369a368b36532bbe36c936b136e12bc735d435d9359e2a313538354735dc29413544354c35d2294b354c35523580295e3561354e355529dc35f035d8351e2a75366b365836b62a8f36a6367c36422bcf35d035d435a82a1a352f3535353e2a1a353e353535bb2938353e353e35d1293b3544353835aa29e635ff35e035272a8f3696367f36df2a96369e368a36c72ad535e935de354e2a373552355735a129353544353e35112942353d35433516291d3527351735c1287d3595358a35fb28d735f035e8356d2933366a360936f5280d34423416348e25e825fc26c6251495f22035207f1e0c98f0247926112611a518a0449b3ca0cea51131d2318732bb25000000000000000000000000000000007434e034b834622a04356e3557354a2b883581359d35db2b7e357d3585350e2b813593359d35c52a5f3582358835902a9d35cc35c735342b003601361c36232ce935f9350636d62b8035783571354b2b67357a357835202b833583359235312b6e356e358335c52a4f3558356f35ee2aaa35bd35cc353a2bda35dc35df350e2ce535f9350036e12b8e358a358b35012b6b3588357d35bc2a6d357d358735b92a643563357735b72a30354c355e356e2aa035b435c0352b2bf035ef350436bb2bee35f235f0357a2b7f358b357d35b42a6e35833579357e2a72357d358a35742a66355f357435692a4c355c3569351f2abb35c535f435df2ac735b2350036b72a9c358e35c435092ad2338d33e933902751294029ab299d1d8127af25ff26991d362e942dec2dee243a8ed61fce192f21013486338933df2a000000000000000000000000000000004734c3344034632a69357a356735d72b9135b835b7351c2cbb35bf35cb35162cc835c835ea35232ca935b635af35562cf234ed34ec34a42b3c3329333c33302a37343d343734e22a4d3551356735d72bb435bc35d035502cb235c635c635492cc335c235c9351f2c9a358e359b351b2ce334e034ec34b82b5f334b334d33a92a37344a343734f62a523546355335772bb435ac35bf35c52bad35b435b535b72bbe35bd35b635cc2b98358f359935c72bec34f634f534f92a50334e335b335d2a273437341d34a82a4335333546358a2b97359035bb35e22b8a35ac35a935cc2bb635a935bb35e32b91358a359435672be634ee34f4340a2b9833ad33c533bb299233ba338c33c629be34c134c034592bba31f431f331262ad22c182d952c6826d530f630b330122ad21d431f5121a2255c327c321332022b000000000000000000000000000000001630bb3058303328b534cf34b6347e2a0f36f9352036092d0336fc352236e72c2d3609364a36352d22361e362c36f02c0b3333332733f42a8129a329a6296924352e762e7a2e2a27fc340f3500350a2c08360b360536ba2cfc350c360236ad2c1b361a363936062d133617360d36c12cf13238330e339d2ada28eb281e29b223d42def2d0e2ef126ea34fb34ec34042c04360a360136b72ceb35ff35f335ad2c19361a363536ca2c17361d3614368d2c273384335633772ad428032919294c233c2d562d762d4f26cd34cd34bf34fb2bf435fb35e135872cda35ea35ef35b32c0c360d362636c92c24361a361a36872c9233a333ad33082b5d2a6d2abc2a6c24972dcd2dcd2d7026cc34c834c8342d2c543538351935c12c413458344e34bb2cb633e033e833122c7e1e7220a42195266e31a231a8317c2a00000000000000000000000000000000da206222bc22d32451311d314c31ec29f9352836d435942d403658365a36432e8236bc36a5368e2eeb340435fa34322d1229ea280829e725eba119a190a0c81b389ff99d5a9db91ed130b330c7305f2a7136613661361e2e9a36a236b2366c2e9e36ba36ab36582e5a3566355f35162d1f29cf2822293025cc9f159f729e5c19f99d389d459c761c5c3046305b30e32963365f365a36cf2da136ab36b936642eaf36c336b836542e723592358a35682d852935297029bb25a69fd69e5c9e0619239f569e5b9da61bae2f892f9e2f63294a3652364036c62da536b136a836252eaf36cc36aa361a2e783587358035282d2f2a9a29142a0426e79d449db59c5519c69c869b6c9b491de62f00300c3065292d3622362e36c22d5c3671365136882e0b362b36f4350b2e5b328833c7328b2d9f2cc12c7e2c6727000000000000000000000000000000007ba2c9a316a2601d68a08f9f919dff240032eb312932732e203630362336483090359835af350330d22b322c5c2c3c29d1a122a15ca1511daca379a234a3af1c8b9d9a9d569c5216e0a005a0a69f3021053220325a32f72d9936bc36ba369230f335da35113629305a2c592c922c412928a0bc9f7b9f281be8a16fa190a16c1b16a0d79f959e8f18f5a067a04fa0d21faf31d731fa31d92dc736e536dc36933038361b3656363930f62c052d2d2da929e09f0d9fa59e5b1ae7a177a16ea1cb1ad3a08ba0999fd21888a13aa1fba09a1e2c314f317231a62ddc36fc36e5368e304b3622365c363e30f22c112d582d112a4a9ea49d689dac19d6a104a18ba1341b969e0a9e969c481666a156a1faa0ef1fc62f682f3930cb2cab359235b235fc2f2936e5350836932fa53055305830a42b60a3d2a2bca2111d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d349434d634f029c334f2340135f52a223545352335ee292f3552353b35b2294035603542357d295c356b356b35d129ce35f935df35912a93369a368b36532bbe36c936b136e12bc735d435d9359e2a313538354735dc29413544354c35d2294b354c35523580295e3561354e355529dc35f035d8351e2a75366b365836b62a8f36a6367c36422bcf35d035d435a82a1a352f3535353e2a1a353e353535bb2938353e353e35d1293b3544353835aa29e635ff35e035272a8f3696367f36df2a96369e368a36c72ad535e935de354e2a373552355735a129353544353e35112942353d35433516291d3527351735c1287d3595358a35fb28d735f035e8356d2933366a360936f5280d34423416348e25e825fc26c6251495f22035207f1e0c98f0247926112611a518a0449b3ca0cea51131d2318732bb2500000000000000008d349434d634f0298d349434d634f029c334f2340135f52a223545352335ee292f3552353b35b2294035603542357d295c356b356b35d129ce35f935df35912a93369a368b36532bbe36c936b136e12bc735d435d9359e2a313538354735dc29413544354c35d2294b354c35523580295e3561354e355529dc35f035d8351e2a75366b365836b62a8f36a6367c36422bcf35d035d435a82a1a352f3535353e2a1a353e353535bb2938353e353e35d1293b3544353835aa29e635ff35e035272a8f3696367f36df2a96369e368a36c72ad535e935de354e2a373552355735a129353544353e35112942353d35433516291d3527351735c1287d3595358a35fb28d735f035e8356d2933366a360936f5280d34423416348e25e825fc26c6251495f22035207f1e0c98f0247926112611a518a0449b3ca0cea51131d2318732bb251131d2318732bb257434e034b834622a7434e034b834622a04356e3557354a2b883581359d35db2b7e357d3585350e2b813593359d35c52a5f3582358835902a9d35cc35c735342b003601361c36232ce935f9350636d62b8035783571354b2b67357a357835202b833583359235312b6e356e358335c52a4f3558356f35ee2aaa35bd35cc353a2bda35dc35df350e2ce535f9350036e12b8e358a358b35012b6b3588357d35bc2a6d357d358735b92a643563357735b72a30354c355e356e2aa035b435c0352b2bf035ef350436bb2bee35f235f0357a2b7f358b357d35b42a6e35833579357e2a72357d358a35742a66355f357435692a4c355c3569351f2abb35c535f435df2ac735b2350036b72a9c358e35c435092ad2338d33e933902751294029ab299d1d8127af25ff26991d362e942dec2dee243a8ed61fce192f21013486338933df2a013486338933df2a4734c3344034632a4734c3344034632a69357a356735d72b9135b835b7351c2cbb35bf35cb35162cc835c835ea35232ca935b635af35562cf234ed34ec34a42b3c3329333c33302a37343d343734e22a4d3551356735d72bb435bc35d035502cb235c635c635492cc335c235c9351f2c9a358e359b351b2ce334e034ec34b82b5f334b334d33a92a37344a343734f62a523546355335772bb435ac35bf35c52bad35b435b535b72bbe35bd35b635cc2b98358f359935c72bec34f634f534f92a50334e335b335d2a273437341d34a82a4335333546358a2b97359035bb35e22b8a35ac35a935cc2bb635a935bb35e32b91358a359435672be634ee34f4340a2b9833ad33c533bb299233ba338c33c629be34c134c034592bba31f431f331262ad22c182d952c6826d530f630b330122ad21d431f5121a2255c327c321332022b5c327c321332022b1630bb30583033281630bb3058303328b534cf34b6347e2a0f36f9352036092d0336fc352236e72c2d3609364a36352d22361e362c36f02c0b3333332733f42a8129a329a6296924352e762e7a2e2a27fc340f3500350a2c08360b360536ba2cfc350c360236ad2c1b361a363936062d133617360d36c12cf13238330e339d2ada28eb281e29b223d42def2d0e2ef126ea34fb34ec34042c04360a360136b72ceb35ff35f335ad2c19361a363536ca2c17361d3614368d2c273384335633772ad428032919294c233c2d562d762d4f26cd34cd34bf34fb2bf435fb35e135872cda35ea35ef35b32c0c360d362636c92c24361a361a36872c9233a333ad33082b5d2a6d2abc2a6c24972dcd2dcd2d7026cc34c834c8342d2c543538351935c12c413458344e34bb2cb633e033e833122c7e1e7220a42195266e31a231a8317c2a6e31a231a8317c2ada206222bc22d324da206222bc22d32451311d314c31ec29f9352836d435942d403658365a36432e8236bc36a5368e2eeb340435fa34322d1229ea280829e725eba119a190a0c81b389ff99d5a9db91ed130b330c7305f2a7136613661361e2e9a36a236b2366c2e9e36ba36ab36582e5a3566355f35162d1f29cf2822293025cc9f159f729e5c19f99d389d459c761c5c3046305b30e32963365f365a36cf2da136ab36b936642eaf36c336b836542e723592358a35682d852935297029bb25a69fd69e5c9e0619239f569e5b9da61bae2f892f9e2f63294a3652364036c62da536b136a836252eaf36cc36aa361a2e783587358035282d2f2a9a29142a0426e79d449db59c5519c69c869b6c9b491de62f00300c3065292d3622362e36c22d5c3671365136882e0b362b36f4350b2e5b328833c7328b2d9f2cc12c7e2c67279f2cc12c7e2c67277ba2c9a316a2601d7ba2c9a316a2601d68a08f9f919dff240032eb312932732e203630362336483090359835af350330d22b322c5c2c3c29d1a122a15ca1511daca379a234a3af1c8b9d9a9d569c5216e0a005a0a69f3021053220325a32f72d9936bc36ba369230f335da35113629305a2c592c922c412928a0bc9f7b9f281be8a16fa190a16c1b16a0d79f959e8f18f5a067a04fa0d21faf31d731fa31d92dc736e536dc36933038361b3656363930f62c052d2d2da929e09f0d9fa59e5b1ae7a177a16ea1cb1ad3a08ba0999fd21888a13aa1fba09a1e2c314f317231a62ddc36fc36e5368e304b3622365c363e30f22c112d582d112a4a9ea49d689dac19d6a104a18ba1341b969e0a9e969c481666a156a1faa0ef1fc62f682f3930cb2cab359235b235fc2f2936e5350836932fa53055305830a42b60a3d2a2bca2111d60a3d2a2bca2111d00000000000000007ba2c9a316a2601d68a08f9f919dff240032eb312932732e203630362336483090359835af350330d22b322c5c2c3c29d1a122a15ca1511daca379a234a3af1c8b9d9a9d569c5216e0a005a0a69f3021053220325a32f72d9936bc36ba369230f335da35113629305a2c592c922c412928a0bc9f7b9f281be8a16fa190a16c1b16a0d79f959e8f18f5a067a04fa0d21faf31d731fa31d92dc736e536dc36933038361b3656363930f62c052d2d2da929e09f0d9fa59e5b1ae7a177a16ea1cb1ad3a08ba0999fd21888a13aa1fba09a1e2c314f317231a62ddc36fc36e5368e304b3622365c363e30f22c112d582d112a4a9ea49d689dac19d6a104a18ba1341b969e0a9e969c481666a156a1faa0ef1fc62f682f3930cb2cab359235b235fc2f2936e5350836932fa53055305830a42b60a3d2a2bca2111d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad34af34f334769ce43406351f359e1c303561352f35399647356c355535cf9c69357a35683524a08c358a358a353d9de9351136e835d09da036a7369a36919ec036e436c4367198ef350436fa358a9756355f355f35b6965c35673572359c96753571357535ae96803583356b352c9dfc351136f435dd9d82368c366b36859e9d36ca369936909ee535fc35ef35aa9d49355d356035b7964b355c355635e79c693568356835f89c6c3572356335269d01360a36f735df9d97368e367d36989eaa36aa368d36969ef7350936f035bb9d5635703567351d9d56355d355e3526a066355f3574352ca04b3553354335eca18e35ae359c35a7a2e235fa35e93599a41a368e36ec35c2a5c733b333913367a75f19951874187498c519a91a101beb992c1b721fd91bc69c1b24c8253321869b4433fb33563408210000000000000000ad34af34f334769cad34af34f334769ce43406351f359e1c303561352f35399647356c355535cf9c69357a35683524a08c358a358a353d9de9351136e835d09da036a7369a36919ec036e436c4367198ef350436fa358a9756355f355f35b6965c35673572359c96753571357535ae96803583356b352c9dfc351136f435dd9d82368c366b36859e9d36ca369936909ee535fc35ef35aa9d49355d356035b7964b355c355635e79c693568356835f89c6c3572356335269d01360a36f735df9d97368e367d36989eaa36aa368d36969ef7350936f035bb9d5635703567351d9d56355d355e3526a066355f3574352ca04b3553354335eca18e35ae359c35a7a2e235fa35e93599a41a368e36ec35c2a5c733b333913367a75f19951874187498c519a91a101beb992c1b721fd91bc69c1b24c8253321869b4433fb33563408214433fb335634082194340335dd34041694340335dd3404162d3582357735729693359935b4358c16973594359d3590969d35b235ba35b1967d359e35a535d996bb35f735e5358197383649365b362c98343638364b36f097a335a4359235e396863593358735a5969b359835ab35af968e359935af35b6966f3585358f35ce96d635f135f035909706360b3625361398173625363436e797ba35b835ae350797813598359035af96893594359735a796883586359b35ad965a3572357935c496bc35e935e335a19d1b36113626361e9e0e3630362736ea97ae35c035bf351b978a3590359535c59691359235a9350e9d8f3585359b350e9d70357b359b354ba0d235da350936c1a0fd35fa35383612a3c535de35f835ffa232341234263489a4222a9529692a23a0532f382e412fada23b28aa28b328a6a0fc2309266b24ac1847347534673430244734753467343024833407358a34609c833407358a34609c9935af3594359596b235cc35b835c096df35e535ef35d096f935ea350936de16d735d635dd35da164535353534358096243402340c34d995a334a6348d3419968a3583358835a696cc35d035eb35db96d835ef35f235d496e635e935f035e196b135a035b135c79627351d351e35d69c35342a342934839caf34ae349f34319699358e359835b996bf35c235e235e296c835df35e535d396d735d935e135289db135a235ae35129d26351a351d35d59c3b342f342f348a9c9734a63494343396863577358b35ba96c035c235df35ed96bd35e035df35dd96d235d235d8352c9dab35a235be3546a028353935343525a066346b347834a49f423450343d342d9f4d355d356135d2a1be34bf34e434aca177358f356b354fa09434a1347c34fba2a4340c35e3346a16ee345b35dc34d51cee345b35dc34d51cee30b3312b31479fee30b3312b31479f33353b351e357ba139360f364a36381722361d36473604173c361e3650360e975c36413658362717ea33063403349c95a02bb62bec2b7d901430653045303d9352356e3567359f961d362636203618971f362c363336fe963736343649362797423646363c362897ec3317340734a395392b562b792b0696a22f0830f92f23993e354d354635f09c12362c361136529d123620361936409d2636253637365a9d423646363a365d9d153438342834519c812bac2bd72b5396022f562f5b2f0199233530351a35ec9c063612360636559dfa3506360d36429d243625364236579d4f363e364236579d523462345634809f412c3d2c772c7599f82e7a2f322fd59b51355135353507a05f361e36283676a027361f362b364f9df835fa352b364fa2c936bb36a936381de2340435bf341b96e2340435bf341b96462672270128ea15462672270128ea15463308333b3379a068368a36283695a06e3688368b36709dbf36ef36dd36909da635c435aa351a9d712c262c342cfe9716a356a2dea16390fb9cf79a53994290c832bf32c032949be436d036d636d69dc436bc36d036c2a0eb360e37f536c7a002363036003631a2602c1a2c452c789cb3a112a1a1a0718ee39f979ee89d07910f32123214321e9ee436f336e136cfa0cb36c436c736bba0f036fe36e836c9a023364236223646a2d32c772ca92cca9cc2a116a1bba04f90b1a0df9fbf9eff918b3158316e3123a0e636e536d136aaa2c136c036b936a2a2f3361b37ee36b9a20c362736133645a2342dbb2cf82c1b9d469f5d9ef39d2b8f40a0ce9e249f649143314f314b31af9dce36db36ca36bfa0bf36fc36d236d29dc5361b37da36b3a2c9352e360f3633229d2f882f5b2fde989d2f882f5b2fde9841a357a444a30d8f41a357a444a30d8f3126b2261a27a89887349234c0342c96af36e536d136b9a0373656366d3693a054305b308b30029e09a466a3c4a3b39114a497a2c7a36b8cad9d2b9e579c43860d1de61e4f20aa939734aa34de340e9d313754374b372b9ec4369f36c836d69df230ea3011316e9b02a353a257a2948d16a39ca2d4a23b8519a010a08e9efa82719b93978592598c74348f34a834d0967a3798378337319efd36e3361f37eb9d8e31aa31d631d69bd1a253a21fa2338d8ca20fa228a2138bf3a0f8a0959fa28b57a359a2e9a108950c3430343f3438a08937bb37b53729a11237ec364737f5a05e318331cc31cfa0aaa225a223a28e9411a278a100a28091679fcb9ee79cbc8c00a46fa369a3089974325132f132ada1d636d036dc368da46f370137473774a5cf338733be33749cf8a29ca290a28094f8a29ca290a28094000000000000000041a357a444a30d8f3126b2261a27a89887349234c0342c96af36e536d136b9a0373656366d3693a054305b308b30029e09a466a3c4a3b39114a497a2c7a36b8cad9d2b9e579c43860d1de61e4f20aa939734aa34de340e9d313754374b372b9ec4369f36c836d69df230ea3011316e9b02a353a257a2948d16a39ca2d4a23b8519a010a08e9efa82719b93978592598c74348f34a834d0967a3798378337319efd36e3361f37eb9d8e31aa31d631d69bd1a253a21fa2338d8ca20fa228a2138bf3a0f8a0959fa28b57a359a2e9a108950c3430343f3438a08937bb37b53729a11237ec364737f5a05e318331cc31cfa0aaa225a223a28e9411a278a100a28091679fcb9ee79cbc8c00a46fa369a3089974325132f132ada1d636d036dc368da46f370137473774a5cf338733be33749cf8a29ca290a280940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d348b34cc34bbaacc34ed340035efa92335403515356baa37354f3534354dab4f3557354435ddab5b356935673561abc235ee35d43560ac8d3691368636bbac9c369e36883678acbb35c735bc3524ab3e354435493575aa3d3552354e354baa553557355d35b7aa58356035553549abda35e235d63526ac713672366136adac733683366c36b5acb835b735bb3512ac17353a353e354eab21353d35333509ab393541354c3508ab3935453534352dabcf35ec35d93528ac7b367d366b36c1ac7c3686365d36b7acb735d735c7351bac34354e354a3571ab30353e354c352bab4b353a3551351fab27353e35333594ab343572354d35b0ab9435da35923527ac0c368d360a36d5ab352ecb2ddf2db6a2851a771eea1f2b16dc1cdd1c271c34180316651d5819ad173a29b82ae728a4a05334d03428352da900000000000000008d348b34cc34bbaa8d348b34cc34bbaacc34ed340035efa92335403515356baa37354f3534354dab4f3557354435ddab5b356935673561abc235ee35d43560ac8d3691368636bbac9c369e36883678acbb35c735bc3524ab3e354435493575aa3d3552354e354baa553557355d35b7aa58356035553549abda35e235d63526ac713672366136adac733683366c36b5acb835b735bb3512ac17353a353e354eab21353d35333509ab393541354c3508ab3935453534352dabcf35ec35d93528ac7b367d366b36c1ac7c3686365d36b7acb735d735c7351bac34354e354a3571ab30353e354c352bab4b353a3551351fab27353e35333594ab343572354d35b0ab9435da35923527ac0c368d360a36d5ab352ecb2ddf2db6a2851a771eea1f2b16dc1cdd1c271c34180316651d5819ad173a29b82ae728a4a05334d03428352da95334d03428352da97d34d234aa3470aa7d34d234aa3470aaf83456354d35f7aa72357535923520ab773577357d35e3ab7b358e359835f8ab5b356f358235a7ab8335c635b1355fac0836053623369cacf135f235fa352aac77357635693565ab71357f3581354dab7e357e3590353dab70356d3583352fab413558355e359baba235b635b53529ace235d235e93589ace735ee35ef352cac743574357e35edab74358835793555ab6e357d357e35a2ab693567357b358cab31354c35523588ab8935a635b4351eacec35e735ff358daceb35e335e1356bac813583357535f4ab723585358135cdab7a3581358a35b4ab6f3567357e35a2ab633566357d35c5ab8e35a435c235f1ab8535a135a63546acf034f434bb3493aa052afd2ae82afb98eb1790165d191821a41606125a15e5180d198f19691aa21bfe32d83316330ba7f1355936fc3506abf1355936fc3506ab3f34b2343c340bab3f34b2343c340bab6c357035693521ac8e35b435b23558acb135b635ce354facd635c835e93558acaa35aa35ae3515acec34de34dd34dbab3c3316332c3379aa2f3438342434e8aa49354e35543525acaa35ae35c5355cacac35be35c0354facc935c935c43525aca03594359e354aace434f034ed3493ab493349333c3399aa383447342d3453ab4c3540354b3527acab35a335b7355caca835ab35af354cacc535b735bd3557ac9c3594359d3548acec34ea34e634feab4e3335334133f5aa1c342c341e344dab433534353c3526ac9c359535ba355eac9b35af35af354cacbb35ae35c3355bac94359a35a93551ac16351f351935fdab433354335e337eaae833c033893329aa883268329332eba55e1bcf1b331aee201419f61a1518a320762175202721df218d34a134b6346aa7bf35ee35c835acacbf35ee35c835acacf02f9b304a307fa9f02f9b304a307fa9bb34be34b13487ac1236eb352236d1ac0536f1351536e9ac30360c364d36feac1d361a362736edac06332a332133daaa472966298e298ca4062e2b2e2f2ec4a7fd340035f234a0ac04361436023634adf4350536fc3523ad1e361d362d3641ad19360f3608362cadf3323a3321337cabb728cd28f62806a49c2dde2de52d6ca7ea34eb34dc3497acf6350a36f3356dade535f835ee355bad0e360f362c3679ad14361a3612366fad3b336f335433b3abbb28d6281a2967a4072d352d532d87a7c934c834b8348cacf035f435dd3565ade335f135da3556ad16360836253672ad23363436283669adb233dd33d33311ac372adf296c2ad4a4102d292d382d96a627353d3522359eac703487349f343cac44346234553463aafd34f634fa3400a9c035e635d93507ac8e34ac3496344dac8e34ac3496344daccf1df71fb02041a4cf1df71fb02041a41831e6301431a2abf4352536cf35a7ae42365b365f36beae7c36ad3694368daee234fb34ef348badfd28b228ed2816a6e8a124a174a02f9c6d9f7f9ec99dd19e9f309330a63005ab593656365736c4ae9936a136b03661af9336af36a13642af41355b35543548aeda289028dd284fa6d39f1a9f699e5b9ad79d209d2d9c4a9d42302c304330b3aa51364a363836eeaea4369f36ab365dafa936be36a13642af7435853571356bae5a290d29602974a60ba03a9fa69e609a0fa03d9f0f9e019d882f662f772f9faa513658364636ddaeab36b736bb365eaf9e36bb36aa364caf5e35693566354eaeea297f29d82943a758a07c9f949f8c9cb49e759dd59d219f8f2f152f662ffba99f3669367e36a4ae4d370a3725379dafa83696369c365dafb735e135de3539ae8a2c612c772ce8a68a2c612c772ce8a6f4a10fa389a1349cf4a10fa389a1349cd99f0e9ec09c24a5d631d831ff31f4ad06362536163696b07b359335aa3552b0652bea2b1c2c8fa9bba131a13ca1dc9d53a346a2ffa2f59cab9dbf9d6e9cc7967fa004a0fc9e1ea1dc310b322c3220ae9f36b1369f36eab0f135da35013683b0012c102c462c5fa9e29f4f9fd99ea29b11a2b3a1c9a1199c5aa01fa04f9f72992ea05c9fee9ea99fa231b331e83109aebf36cc36d536eeb03f3615364d36acb0a12cae2ce92ceca9b39fe69e549ef09a77a209a2f8a1459cfba0a0a0e09f71990ca1a7a07da07f9e07313b313431f6adca36e736d1360ab13a361e365836b5b0d62c0a2d4a2d99aaaa9df69c959cd699d1a12fa14da1e79bcaa056a0bc9feb99c4a0fba001a1169f0d30f42f3030b5ad3e3639363c3639b17636243652360cb1ab2f882fc02f39ab83a140a112a1339d83a140a112a1339d0000000000000000f4a10fa389a1349cd99f0e9ec09c24a5d631d831ff31f4ad06362536163696b07b359335aa3552b0652bea2b1c2c8fa9bba131a13ca1dc9d53a346a2ffa2f59cab9dbf9d6e9cc7967fa004a0fc9e1ea1dc310b322c3220ae9f36b1369f36eab0f135da35013683b0012c102c462c5fa9e29f4f9fd99ea29b11a2b3a1c9a1199c5aa01fa04f9f72992ea05c9fee9ea99fa231b331e83109aebf36cc36d536eeb03f3615364d36acb0a12cae2ce92ceca9b39fe69e549ef09a77a209a2f8a1459cfba0a0a0e09f71990ca1a7a07da07f9e07313b313431f6adca36e736d1360ab13a361e365836b5b0d62c0a2d4a2d99aaaa9df69c959cd699d1a12fa14da1e79bcaa056a0bc9feb99c4a0fba001a1169f0d30f42f3030b5ad3e3639363c3639b17636243652360cb1ab2f882fc02f39ab83a140a112a1339d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d348b34cc34bbaacc34ed340035efa92335403515356baa37354f3534354dab4f3557354435ddab5b356935673561abc235ee35d43560ac8d3691368636bbac9c369e36883678acbb35c735bc3524ab3e354435493575aa3d3552354e354baa553557355d35b7aa58356035553549abda35e235d63526ac713672366136adac733683366c36b5acb835b735bb3512ac17353a353e354eab21353d35333509ab393541354c3508ab3935453534352dabcf35ec35d93528ac7b367d366b36c1ac7c3686365d36b7acb735d735c7351bac34354e354a3571ab30353e354c352bab4b353a3551351fab27353e35333594ab343572354d35b0ab9435da35923527ac0c368d360a36d5ab352ecb2ddf2db6a2851a771eea1f2b16dc1cdd1c271c34180316651d5819ad173a29b82ae728a4a05334d03428352da9000000000000000000000000000000007d34d234aa3470aaf83456354d35f7aa72357535923520ab773577357d35e3ab7b358e359835f8ab5b356f358235a7ab8335c635b1355fac0836053623369cacf135f235fa352aac77357635693565ab71357f3581354dab7e357e3590353dab70356d3583352fab413558355e359baba235b635b53529ace235d235e93589ace735ee35ef352cac743574357e35edab74358835793555ab6e357d357e35a2ab693567357b358cab31354c35523588ab8935a635b4351eacec35e735ff358daceb35e335e1356bac813583357535f4ab723585358135cdab7a3581358a35b4ab6f3567357e35a2ab633566357d35c5ab8e35a435c235f1ab8535a135a63546acf034f434bb3493aa052afd2ae82afb98eb1790165d191821a41606125a15e5180d198f19691aa21bfe32d83316330ba7f1355936fc3506ab000000000000000000000000000000003f34b2343c340bab6c357035693521ac8e35b435b23558acb135b635ce354facd635c835e93558acaa35aa35ae3515acec34de34dd34dbab3c3316332c3379aa2f3438342434e8aa49354e35543525acaa35ae35c5355cacac35be35c0354facc935c935c43525aca03594359e354aace434f034ed3493ab493349333c3399aa383447342d3453ab4c3540354b3527acab35a335b7355caca835ab35af354cacc535b735bd3557ac9c3594359d3548acec34ea34e634feab4e3335334133f5aa1c342c341e344dab433534353c3526ac9c359535ba355eac9b35af35af354cacbb35ae35c3355bac94359a35a93551ac16351f351935fdab433354335e337eaae833c033893329aa883268329332eba55e1bcf1b331aee201419f61a1518a320762175202721df218d34a134b6346aa7bf35ee35c835acac00000000000000000000000000000000f02f9b304a307fa9bb34be34b13487ac1236eb352236d1ac0536f1351536e9ac30360c364d36feac1d361a362736edac06332a332133daaa472966298e298ca4062e2b2e2f2ec4a7fd340035f234a0ac04361436023634adf4350536fc3523ad1e361d362d3641ad19360f3608362cadf3323a3321337cabb728cd28f62806a49c2dde2de52d6ca7ea34eb34dc3497acf6350a36f3356dade535f835ee355bad0e360f362c3679ad14361a3612366fad3b336f335433b3abbb28d6281a2967a4072d352d532d87a7c934c834b8348cacf035f435dd3565ade335f135da3556ad16360836253672ad23363436283669adb233dd33d33311ac372adf296c2ad4a4102d292d382d96a627353d3522359eac703487349f343cac44346234553463aafd34f634fa3400a9c035e635d93507ac8e34ac3496344dac00000000000000000000000000000000cf1df71fb02041a41831e6301431a2abf4352536cf35a7ae42365b365f36beae7c36ad3694368daee234fb34ef348badfd28b228ed2816a6e8a124a174a02f9c6d9f7f9ec99dd19e9f309330a63005ab593656365736c4ae9936a136b03661af9336af36a13642af41355b35543548aeda289028dd284fa6d39f1a9f699e5b9ad79d209d2d9c4a9d42302c304330b3aa51364a363836eeaea4369f36ab365dafa936be36a13642af7435853571356bae5a290d29602974a60ba03a9fa69e609a0fa03d9f0f9e019d882f662f772f9faa513658364636ddaeab36b736bb365eaf9e36bb36aa364caf5e35693566354eaeea297f29d82943a758a07c9f949f8c9cb49e759dd59d219f8f2f152f662ffba99f3669367e36a4ae4d370a3725379dafa83696369c365dafb735e135de3539ae8a2c612c772ce8a600000000000000000000000000000000f4a10fa389a1349cd99f0e9ec09c24a5d631d831ff31f4ad06362536163696b07b359335aa3552b0652bea2b1c2c8fa9bba131a13ca1dc9d53a346a2ffa2f59cab9dbf9d6e9cc7967fa004a0fc9e1ea1dc310b322c3220ae9f36b1369f36eab0f135da35013683b0012c102c462c5fa9e29f4f9fd99ea29b11a2b3a1c9a1199c5aa01fa04f9f72992ea05c9fee9ea99fa231b331e83109aebf36cc36d536eeb03f3615364d36acb0a12cae2ce92ceca9b39fe69e549ef09a77a209a2f8a1459cfba0a0a0e09f71990ca1a7a07da07f9e07313b313431f6adca36e736d1360ab13a361e365836b5b0d62c0a2d4a2d99aaaa9df69c959cd699d1a12fa14da1e79bcaa056a0bc9feb99c4a0fba001a1169f0d30f42f3030b5ad3e3639363c3639b17636243652360cb1ab2f882fc02f39ab83a140a112a1339d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 m_StreamData: serializedVersion: 2 offset: 0 diff --git a/Assets/Quiz/Scripts/NoPoints/NoPointsAnswerRow.cs b/Assets/Quiz/Scripts/NoPoints/NoPointsAnswerRow.cs index 79f0276..53ce03d 100644 --- a/Assets/Quiz/Scripts/NoPoints/NoPointsAnswerRow.cs +++ b/Assets/Quiz/Scripts/NoPoints/NoPointsAnswerRow.cs @@ -20,7 +20,6 @@ public class NoPointsAnswerRow : UdonSharpBehaviour { if (noPointsMeter != null) { - Debug.Log("Answer row pressed: " + answerText.text + " with score " + scoreText.text); noPointsMeter.networkTargetScore = int.Parse(scoreText.text); noPointsMeter.StartCountdown(); noPointsMeter.RequestSerialization(); diff --git a/Assets/Quiz/Scripts/NoPoints/NoPointsController.asset b/Assets/Quiz/Scripts/NoPoints/NoPointsController.asset index 51ef3aa..d21daa6 100644 --- a/Assets/Quiz/Scripts/NoPoints/NoPointsController.asset +++ b/Assets/Quiz/Scripts/NoPoints/NoPointsController.asset @@ -43,7 +43,7 @@ MonoBehaviour: Data: - Name: Entry: 12 - Data: 9 + Data: 10 - Name: Entry: 7 Data: @@ -512,6 +512,54 @@ MonoBehaviour: - Name: Entry: 8 Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: resetMeterButton + - Name: $v + Entry: 7 + Data: 26|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: resetMeterButton + - Name: k__BackingField + Entry: 9 + Data: 7 + - Name: k__BackingField + Entry: 9 + Data: 7 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 27|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: - Name: Entry: 13 Data: diff --git a/Assets/Quiz/Scripts/NoPoints/NoPointsController.cs b/Assets/Quiz/Scripts/NoPoints/NoPointsController.cs index 0d977b4..55eba30 100644 --- a/Assets/Quiz/Scripts/NoPoints/NoPointsController.cs +++ b/Assets/Quiz/Scripts/NoPoints/NoPointsController.cs @@ -21,9 +21,16 @@ public class NoPointsController : UdonSharpBehaviour public NoPointsScreen noPointsScreen; public NoPointsMeter noPointsMeter; + public GameObject resetMeterButton; void Start() { + if (!Networking.IsOwner(this.gameObject)) + { + this.gameObject.SetActive(false); + resetMeterButton.SetActive(false); + } + for (int i = 0; i < noPointsManager.questions.Length; i++) { NoPointsQuestion question = noPointsManager.questions[i]; @@ -75,7 +82,7 @@ public class NoPointsController : UdonSharpBehaviour answerInfoRow.noPointsMeter = noPointsMeter; } - for (int i = 0; i < question.answerText.Length; i++) + for (int i = 0; i < Mathf.Min(question.answerText.Length, question.answerPoints.Length); i++) { GameObject answerRowObj = Instantiate(answerRowPrefab, answerListContainer.transform); NoPointsAnswerRow answerRow = answerRowObj.GetComponent(); diff --git a/Assets/Quiz/Scripts/NoPoints/NoPointsDeskManager.asset b/Assets/Quiz/Scripts/NoPoints/NoPointsDeskManager.asset new file mode 100644 index 0000000..7db8c2f --- /dev/null +++ b/Assets/Quiz/Scripts/NoPoints/NoPointsDeskManager.asset @@ -0,0 +1,112 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3} + m_Name: NoPointsDeskManager + m_EditorClassIdentifier: + serializedUdonProgramAsset: {fileID: 11400000, guid: 38e58b2c6ec82a540b5c26f7c771a794, type: 2} + udonAssembly: + assemblyError: + sourceCsScript: {fileID: 11500000, guid: 49ba8138bafa3df4fb2a0f99842d8768, type: 3} + scriptVersion: 2 + compiledVersion: 2 + behaviourSyncMode: 0 + hasInteractEvent: 0 + scriptID: -5056111370221645195 + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: + - Name: fieldDefinitions + Entry: 7 + Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition, + UdonSharp.Editor]], mscorlib + - Name: comparer + Entry: 7 + Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String, + mscorlib]], mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: playerScreens + - Name: $v + Entry: 7 + Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: playerScreens + - Name: k__BackingField + Entry: 7 + Data: 3|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: NoPointsPlayerScreen[], Assembly-CSharp + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: 4|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.Component[], UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 5|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: diff --git a/Assets/Quiz/Scripts/NoPoints/NoPointsDeskManager.asset.meta b/Assets/Quiz/Scripts/NoPoints/NoPointsDeskManager.asset.meta new file mode 100644 index 0000000..c98edea --- /dev/null +++ b/Assets/Quiz/Scripts/NoPoints/NoPointsDeskManager.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f105e1f1c6b2fe14786ff87c06b7adf4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Scripts/NoPoints/NoPointsDeskManager.cs b/Assets/Quiz/Scripts/NoPoints/NoPointsDeskManager.cs new file mode 100644 index 0000000..0690583 --- /dev/null +++ b/Assets/Quiz/Scripts/NoPoints/NoPointsDeskManager.cs @@ -0,0 +1,26 @@ + +using UdonSharp; +using UnityEngine; +using VRC.SDK3.UdonNetworkCalling; +using VRC.SDKBase; +using VRC.Udon; +using VRC.Udon.Common.Interfaces; + +public class NoPointsDeskManager : UdonSharpBehaviour +{ + public NoPointsPlayerScreen[] playerScreens; + + public void SendSuggestion(string suggestion) + { + if (playerScreens == null || playerScreens.Length == 0) + return; + + for (int i = 0; i < playerScreens.Length; i++) + { + if (playerScreens[i] != null && playerScreens[i].claimedPlayerId != 0) + { + playerScreens[i].SendCustomNetworkEvent(NetworkEventTarget.All, "AddSuggestion", suggestion); + } + } + } +} diff --git a/Assets/Quiz/Scripts/NoPoints/NoPointsDeskManager.cs.meta b/Assets/Quiz/Scripts/NoPoints/NoPointsDeskManager.cs.meta new file mode 100644 index 0000000..bf73c8e --- /dev/null +++ b/Assets/Quiz/Scripts/NoPoints/NoPointsDeskManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 49ba8138bafa3df4fb2a0f99842d8768 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Scripts/NoPoints/NoPointsMeter.asset b/Assets/Quiz/Scripts/NoPoints/NoPointsMeter.asset index 61e6aec..04f9aff 100644 --- a/Assets/Quiz/Scripts/NoPoints/NoPointsMeter.asset +++ b/Assets/Quiz/Scripts/NoPoints/NoPointsMeter.asset @@ -43,7 +43,7 @@ MonoBehaviour: Data: - Name: Entry: 12 - Data: 13 + Data: 17 - Name: Entry: 7 Data: @@ -277,19 +277,19 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: targetRenderer + Data: propertyName - Name: $v Entry: 7 Data: 16|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 - Data: targetRenderer + Data: propertyName - Name: k__BackingField Entry: 7 Data: 17|System.RuntimeType, mscorlib - Name: Entry: 1 - Data: UnityEngine.Renderer, UnityEngine.CoreModule + Data: System.String, mscorlib - Name: Entry: 8 Data: @@ -331,19 +331,19 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: propertyName + Data: pointBarMaterial - Name: $v Entry: 7 Data: 19|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 - Data: propertyName + Data: pointBarMaterial - Name: k__BackingField Entry: 7 Data: 20|System.RuntimeType, mscorlib - Name: Entry: 1 - Data: System.String, mscorlib + Data: UnityEngine.Material, UnityEngine.CoreModule - Name: Entry: 8 Data: @@ -385,73 +385,19 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: _mat + Data: pointMeterMaterial - Name: $v Entry: 7 Data: 22|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 - Data: _mat - - Name: k__BackingField - Entry: 7 - Data: 23|System.RuntimeType, mscorlib - - Name: - Entry: 1 - Data: UnityEngine.Material, UnityEngine.CoreModule - - Name: - Entry: 8 - Data: - - Name: k__BackingField - Entry: 9 - Data: 23 - - Name: k__BackingField - Entry: 7 - Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib - - Name: - Entry: 6 - Data: - - Name: - Entry: 8 - Data: - - Name: k__BackingField - Entry: 5 - Data: false - - Name: _fieldAttributes - Entry: 7 - Data: 24|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - - Name: - Entry: 12 - Data: 0 - - Name: - Entry: 13 - Data: - - Name: - Entry: 8 - Data: - - Name: - Entry: 8 - Data: - - Name: - Entry: 8 - Data: - - Name: - Entry: 7 - Data: - - Name: $k - Entry: 1 - Data: baseSpeed - - Name: $v - Entry: 7 - Data: 25|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - - Name: k__BackingField - Entry: 1 - Data: baseSpeed + Data: pointMeterMaterial - Name: k__BackingField Entry: 9 - Data: 3 + Data: 20 - Name: k__BackingField Entry: 9 - Data: 3 + Data: 20 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -466,7 +412,7 @@ MonoBehaviour: Data: true - Name: _fieldAttributes Entry: 7 - Data: 26|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 23|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -487,25 +433,115 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: scoreText + Data: screenMaterial - Name: $v Entry: 7 - Data: 27|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 24|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 - Data: scoreText + Data: screenMaterial - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField Entry: 7 - Data: 28|System.RuntimeType, mscorlib + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib - Name: - Entry: 1 - Data: TMPro.TMP_Text, Unity.TextMeshPro + Entry: 6 + Data: - Name: Entry: 8 Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 25|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: platformMaterial + - Name: $v + Entry: 7 + Data: 26|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: platformMaterial + - Name: k__BackingField + Entry: 9 + Data: 20 - Name: k__BackingField Entry: 9 - Data: 28 + Data: 20 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 27|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: circlesMaterial + - Name: $v + Entry: 7 + Data: 28|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: circlesMaterial + - Name: k__BackingField + Entry: 9 + Data: 20 + - Name: k__BackingField + Entry: 9 + Data: 20 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -541,16 +577,118 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: audioSource + Data: baseSpeed - Name: $v Entry: 7 Data: 30|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: baseSpeed + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 31|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: scoreText + - Name: $v + Entry: 7 + Data: 32|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: scoreText + - Name: k__BackingField + Entry: 7 + Data: 33|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TMPro.TMP_Text, Unity.TextMeshPro + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 33 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 34|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: audioSource + - Name: $v + Entry: 7 + Data: 35|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: audioSource - Name: k__BackingField Entry: 7 - Data: 31|System.RuntimeType, mscorlib + Data: 36|System.RuntimeType, mscorlib - Name: Entry: 1 Data: UnityEngine.AudioSource, UnityEngine.AudioModule @@ -559,109 +697,7 @@ MonoBehaviour: Data: - Name: k__BackingField Entry: 9 - Data: 31 - - Name: k__BackingField - Entry: 7 - Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib - - Name: - Entry: 6 - Data: - - Name: - Entry: 8 - Data: - - Name: k__BackingField - Entry: 5 - Data: true - - Name: _fieldAttributes - Entry: 7 - Data: 32|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - - Name: - Entry: 12 - Data: 0 - - Name: - Entry: 13 - Data: - - Name: - Entry: 8 - Data: - - Name: - Entry: 8 - Data: - - Name: - Entry: 8 - Data: - - Name: - Entry: 7 - Data: - - Name: $k - Entry: 1 - Data: pointsMeterBar - - Name: $v - Entry: 7 - Data: 33|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - - Name: k__BackingField - Entry: 1 - Data: pointsMeterBar - - Name: k__BackingField - Entry: 7 - Data: 34|System.RuntimeType, mscorlib - - Name: - Entry: 1 - Data: UnityEngine.AudioClip, UnityEngine.AudioModule - - Name: - Entry: 8 - Data: - - Name: k__BackingField - Entry: 9 - Data: 34 - - Name: k__BackingField - Entry: 7 - Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib - - Name: - Entry: 6 - Data: - - Name: - Entry: 8 - Data: - - Name: k__BackingField - Entry: 5 - Data: true - - Name: _fieldAttributes - Entry: 7 - Data: 35|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - - Name: - Entry: 12 - Data: 0 - - Name: - Entry: 13 - Data: - - Name: - Entry: 8 - Data: - - Name: - Entry: 8 - Data: - - Name: - Entry: 8 - Data: - - Name: - Entry: 7 - Data: - - Name: $k - Entry: 1 - Data: pointsMeterStops - - Name: $v - Entry: 7 - Data: 36|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - - Name: k__BackingField - Entry: 1 - Data: pointsMeterStops - - Name: k__BackingField - Entry: 9 - Data: 34 - - Name: k__BackingField - Entry: 9 - Data: 34 + Data: 36 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -697,19 +733,25 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: pointlessAnswer + Data: pointsMeterBar - Name: $v Entry: 7 Data: 38|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 - Data: pointlessAnswer + Data: pointsMeterBar - Name: k__BackingField - Entry: 9 - Data: 34 + Entry: 7 + Data: 39|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.AudioClip, UnityEngine.AudioModule + - Name: + Entry: 8 + Data: - Name: k__BackingField Entry: 9 - Data: 34 + Data: 39 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -724,7 +766,151 @@ MonoBehaviour: Data: true - Name: _fieldAttributes Entry: 7 - Data: 39|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 40|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: pointsMeterStops + - Name: $v + Entry: 7 + Data: 41|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: pointsMeterStops + - Name: k__BackingField + Entry: 9 + Data: 39 + - Name: k__BackingField + Entry: 9 + Data: 39 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 42|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: pointlessAnswer + - Name: $v + Entry: 7 + Data: 43|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: pointlessAnswer + - Name: k__BackingField + Entry: 9 + Data: 39 + - Name: k__BackingField + Entry: 9 + Data: 39 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 44|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: incorrectAnswer + - Name: $v + Entry: 7 + Data: 45|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: incorrectAnswer + - Name: k__BackingField + Entry: 9 + Data: 39 + - Name: k__BackingField + Entry: 9 + Data: 39 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 46|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 diff --git a/Assets/Quiz/Scripts/NoPoints/NoPointsMeter.cs b/Assets/Quiz/Scripts/NoPoints/NoPointsMeter.cs index 2a35432..e89f129 100644 --- a/Assets/Quiz/Scripts/NoPoints/NoPointsMeter.cs +++ b/Assets/Quiz/Scripts/NoPoints/NoPointsMeter.cs @@ -1,8 +1,10 @@  using UdonSharp; using UnityEngine; +using VRC.SDK3.UdonNetworkCalling; using VRC.SDKBase; using VRC.Udon; +using VRC.Udon.Common.Interfaces; public class NoPointsMeter : UdonSharpBehaviour { @@ -10,11 +12,13 @@ public class NoPointsMeter : UdonSharpBehaviour [SerializeField] private int targetScore = 100; [SerializeField] private bool isCounting = false; [UdonSynced] public int networkTargetScore; - - public Renderer targetRenderer; public string propertyName = "_MyFloat"; - private Material _mat; + public Material pointBarMaterial; + public Material pointMeterMaterial; + public Material screenMaterial; + public Material platformMaterial; + public Material circlesMaterial; public float baseSpeed = 10f; public TMPro.TMP_Text scoreText; @@ -23,10 +27,11 @@ public class NoPointsMeter : UdonSharpBehaviour public AudioClip pointsMeterBar; public AudioClip pointsMeterStops; public AudioClip pointlessAnswer; + public AudioClip incorrectAnswer; void Start() { - _mat = targetRenderer.material; + ChangeSetColour(new Color(0.1686f, 0.6706f, 0.8471f)); } public override void OnDeserialization() @@ -36,16 +41,35 @@ public class NoPointsMeter : UdonSharpBehaviour public void StartCountdown() { - + targetScore = networkTargetScore; isCounting = true; } - public void Reset() + [NetworkCallable] + public void ResetMeter() { currentDisplayedScore = 100f; targetScore = 100; isCounting = false; + networkTargetScore = 100; + ChangeSetColour(new Color(0.1686f, 0.6706f, 0.8471f)); + pointBarMaterial.SetFloat(propertyName, 0f); + scoreText.text = "100"; + audioSource.Stop(); + } + + public void ResetMeterNetworked() + { + SendCustomNetworkEvent(NetworkEventTarget.All, "ResetMeter"); + } + + public void ChangeSetColour(Color color) + { + platformMaterial.SetColor("_EmissionColor", color); + screenMaterial.SetColor("_EmissionColor", color); + pointMeterMaterial.SetColor("_EmissionColor", color); + circlesMaterial.SetColor("_EmissionColor", color); } void Update() @@ -67,6 +91,13 @@ public class NoPointsMeter : UdonSharpBehaviour if (targetScore == 0) { audioSource.PlayOneShot(pointlessAnswer); + ChangeSetColour(Color.green); + } + else if (targetScore == 100) + { + ChangeSetColour(Color.red); + scoreText.text = "X"; + audioSource.PlayOneShot(incorrectAnswer); } else { @@ -83,7 +114,7 @@ public class NoPointsMeter : UdonSharpBehaviour (baseSpeed * speedMultiplier) * Time.deltaTime ); - _mat.SetFloat(propertyName, 1 - currentDisplayedScore / 100.0f); + pointBarMaterial.SetFloat(propertyName, 1 - currentDisplayedScore / 100.0f); scoreText.text = Mathf.RoundToInt(currentDisplayedScore).ToString(); } } diff --git a/Assets/Quiz/Scripts/NoPoints/NoPointsPlayerScreen.asset b/Assets/Quiz/Scripts/NoPoints/NoPointsPlayerScreen.asset new file mode 100644 index 0000000..a3ba0b6 --- /dev/null +++ b/Assets/Quiz/Scripts/NoPoints/NoPointsPlayerScreen.asset @@ -0,0 +1,592 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3} + m_Name: NoPointsPlayerScreen + m_EditorClassIdentifier: + serializedUdonProgramAsset: {fileID: 11400000, guid: 14514685a562edb4e839700a8ba17202, type: 2} + udonAssembly: + assemblyError: + sourceCsScript: {fileID: 11500000, guid: 56226d676b0e8a94e9461ad87a1c012e, type: 3} + scriptVersion: 2 + compiledVersion: 2 + behaviourSyncMode: 0 + hasInteractEvent: 0 + scriptID: 1973463624396380151 + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: + - Name: fieldDefinitions + Entry: 7 + Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition, + UdonSharp.Editor]], mscorlib + - Name: comparer + Entry: 7 + Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String, + mscorlib]], mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 12 + Data: 10 + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: claimedPlayer + - Name: $v + Entry: 7 + Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: claimedPlayer + - Name: k__BackingField + Entry: 7 + Data: 3|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: VRC.SDKBase.VRCPlayerApi, VRCSDKBase + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 4|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: playerNameDisplay + - Name: $v + Entry: 7 + Data: 5|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: playerNameDisplay + - Name: k__BackingField + Entry: 7 + Data: 6|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TMPro.TextMeshProUGUI, Unity.TextMeshPro + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 6 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 7|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: claimButtonText + - Name: $v + Entry: 7 + Data: 8|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: claimButtonText + - Name: k__BackingField + Entry: 9 + Data: 6 + - Name: k__BackingField + Entry: 9 + Data: 6 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 9|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: suggestionInputField + - Name: $v + Entry: 7 + Data: 10|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: suggestionInputField + - Name: k__BackingField + Entry: 7 + Data: 11|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: TMPro.TMP_InputField, Unity.TextMeshPro + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 11 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 12|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: deskManager + - Name: $v + Entry: 7 + Data: 13|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: deskManager + - Name: k__BackingField + Entry: 7 + Data: 14|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: NoPointsDeskManager, Assembly-CSharp + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: 15|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: VRC.Udon.UdonBehaviour, VRC.Udon + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 16|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: inputRow + - Name: $v + Entry: 7 + Data: 17|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: inputRow + - Name: k__BackingField + Entry: 7 + Data: 18|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.GameObject, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 18 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 19|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: suggestionDisplay + - Name: $v + Entry: 7 + Data: 20|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: suggestionDisplay + - Name: k__BackingField + Entry: 9 + Data: 18 + - Name: k__BackingField + Entry: 9 + Data: 18 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 21|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: suggestionPrefab + - Name: $v + Entry: 7 + Data: 22|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: suggestionPrefab + - Name: k__BackingField + Entry: 9 + Data: 18 + - Name: k__BackingField + Entry: 9 + Data: 18 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 23|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: playerNameText + - Name: $v + Entry: 7 + Data: 24|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: playerNameText + - Name: k__BackingField + Entry: 7 + Data: 25|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.String, mscorlib + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 25 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 3 + Data: 1 + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 26|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 27|UdonSharp.UdonSyncedAttribute, UdonSharp.Runtime + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: claimedPlayerId + - Name: $v + Entry: 7 + Data: 28|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: claimedPlayerId + - Name: k__BackingField + Entry: 7 + Data: 29|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Int32, mscorlib + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 29 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 3 + Data: 1 + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 30|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 31|UdonSharp.UdonSyncedAttribute, UdonSharp.Runtime + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: diff --git a/Assets/Quiz/Scripts/NoPoints/NoPointsPlayerScreen.asset.meta b/Assets/Quiz/Scripts/NoPoints/NoPointsPlayerScreen.asset.meta new file mode 100644 index 0000000..149a30a --- /dev/null +++ b/Assets/Quiz/Scripts/NoPoints/NoPointsPlayerScreen.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e4d9c8e9ec3e9af4e9bbd288b60f982f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Scripts/NoPoints/NoPointsPlayerScreen.cs b/Assets/Quiz/Scripts/NoPoints/NoPointsPlayerScreen.cs new file mode 100644 index 0000000..1858c85 --- /dev/null +++ b/Assets/Quiz/Scripts/NoPoints/NoPointsPlayerScreen.cs @@ -0,0 +1,91 @@ +using UdonSharp; +using UnityEngine; +using UnityEngine.UI; +using VRC.SDK3.UdonNetworkCalling; +using VRC.SDKBase; +using VRC.Udon; + +public class NoPointsPlayerScreen : UdonSharpBehaviour +{ + public VRCPlayerApi claimedPlayer = null; + public TMPro.TextMeshProUGUI playerNameDisplay; + public TMPro.TextMeshProUGUI claimButtonText; + public TMPro.TMP_InputField suggestionInputField; + public NoPointsDeskManager deskManager; + public GameObject inputRow; + public GameObject suggestionDisplay; + public GameObject suggestionPrefab; + [UdonSynced] private string playerNameText = "Unclaimed"; + [UdonSynced] public int claimedPlayerId = 0; + + public void ClaimScreen() + { + VRCPlayerApi player = Networking.LocalPlayer; + claimedPlayer = player; + claimedPlayerId = player.playerId; + playerNameText = player.displayName; + inputRow.SetActive(true); + } + + [NetworkCallable] + public void AddSuggestion(string suggestion) + { + GameObject newSuggestionObj = Instantiate(suggestionPrefab); + TMPro.TextMeshProUGUI newSuggestionText = newSuggestionObj.GetComponent(); + newSuggestionText.text = suggestion; + newSuggestionObj.transform.SetParent(suggestionDisplay.transform, false); + newSuggestionObj.transform.SetSiblingIndex(0); + } + + public void HandleClaimButtonPress() + { + if (!Networking.IsOwner(gameObject)) + { + Networking.SetOwner(Networking.LocalPlayer, gameObject); + } + + VRCPlayerApi localPlayer = Networking.LocalPlayer; + if (claimedPlayerId == 0) + { + ClaimScreen(); + playerNameDisplay.text = playerNameText; + claimButtonText.text = "Unclaim Screen"; + } + else if (claimedPlayerId == localPlayer.playerId) + { + claimedPlayer = null; + claimedPlayerId = 0; + playerNameText = "Unclaimed"; + playerNameDisplay.text = playerNameText; + claimButtonText.text = "Claim Screen"; + inputRow.SetActive(false); + } + RequestSerialization(); + } + + public void HandleSendButtonPress() + { + if (string.IsNullOrWhiteSpace(suggestionInputField.text)) + return; + + deskManager.SendSuggestion(Networking.LocalPlayer.displayName + " suggests: " + suggestionInputField.text); + suggestionInputField.text = ""; + } + + public override void OnDeserialization() + { + playerNameDisplay.text = playerNameText; + if (claimedPlayerId == 0) + { + claimButtonText.text = "Claim Screen"; + } + else if (claimedPlayerId == Networking.LocalPlayer.playerId) + { + claimButtonText.text = "Unclaim Screen"; + } + else + { + claimButtonText.text = "Screen Claimed"; + } + } +} diff --git a/Assets/Quiz/Scripts/NoPoints/NoPointsPlayerScreen.cs.meta b/Assets/Quiz/Scripts/NoPoints/NoPointsPlayerScreen.cs.meta new file mode 100644 index 0000000..c5703df --- /dev/null +++ b/Assets/Quiz/Scripts/NoPoints/NoPointsPlayerScreen.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 56226d676b0e8a94e9461ad87a1c012e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Scripts/Tablet.meta b/Assets/Quiz/Scripts/Tablet.meta new file mode 100644 index 0000000..90c87bf --- /dev/null +++ b/Assets/Quiz/Scripts/Tablet.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 19ab316e7594dda4ea31eb74cd1868f0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Scripts/Tablet/TabletScoreboard.asset b/Assets/Quiz/Scripts/Tablet/TabletScoreboard.asset new file mode 100644 index 0000000..9eb7bab --- /dev/null +++ b/Assets/Quiz/Scripts/Tablet/TabletScoreboard.asset @@ -0,0 +1,52 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3} + m_Name: TabletScoreboard + m_EditorClassIdentifier: + serializedUdonProgramAsset: {fileID: 11400000, guid: df247d7b569cff840b3944dc418bb766, type: 2} + udonAssembly: + assemblyError: + sourceCsScript: {fileID: 11500000, guid: 2e4aa509cd20e7841b43bfa4fef799cd, type: 3} + scriptVersion: 2 + compiledVersion: 2 + behaviourSyncMode: 0 + hasInteractEvent: 0 + scriptID: 8196262517638852912 + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: + - Name: fieldDefinitions + Entry: 7 + Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition, + UdonSharp.Editor]], mscorlib + - Name: comparer + Entry: 7 + Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String, + mscorlib]], mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: diff --git a/Assets/Quiz/Scripts/Tablet/TabletScoreboard.asset.meta b/Assets/Quiz/Scripts/Tablet/TabletScoreboard.asset.meta new file mode 100644 index 0000000..d4f4ff9 --- /dev/null +++ b/Assets/Quiz/Scripts/Tablet/TabletScoreboard.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b7519f645cc7a5344b80e26eb2ffaea6 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Scripts/Tablet/TabletScoreboard.cs b/Assets/Quiz/Scripts/Tablet/TabletScoreboard.cs new file mode 100644 index 0000000..2edadfe --- /dev/null +++ b/Assets/Quiz/Scripts/Tablet/TabletScoreboard.cs @@ -0,0 +1,13 @@ + +using UdonSharp; +using UnityEngine; +using VRC.SDKBase; +using VRC.Udon; + +public class TabletScoreboard : UdonSharpBehaviour +{ + void Start() + { + + } +} diff --git a/Assets/Quiz/Scripts/Tablet/TabletScoreboard.cs.meta b/Assets/Quiz/Scripts/Tablet/TabletScoreboard.cs.meta new file mode 100644 index 0000000..816f680 --- /dev/null +++ b/Assets/Quiz/Scripts/Tablet/TabletScoreboard.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e4aa509cd20e7841b43bfa4fef799cd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/DownCount.meta b/Assets/Quiz/Textures/DownCount.meta new file mode 100644 index 0000000..789984c --- /dev/null +++ b/Assets/Quiz/Textures/DownCount.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 71f24cecfc50e164db32f3ed20d40131 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/DownCount/t_Clock_BaseColor.png b/Assets/Quiz/Textures/DownCount/t_Clock_BaseColor.png new file mode 100644 index 0000000..d52a400 Binary files /dev/null and b/Assets/Quiz/Textures/DownCount/t_Clock_BaseColor.png differ diff --git a/Assets/Quiz/Textures/DownCount/t_Clock_BaseColor.png.meta b/Assets/Quiz/Textures/DownCount/t_Clock_BaseColor.png.meta new file mode 100644 index 0000000..2dc9ce5 --- /dev/null +++ b/Assets/Quiz/Textures/DownCount/t_Clock_BaseColor.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 1b6a0451af77693439a9530f994a4c36 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/DownCount/t_Clock_MetallicSmoothnessMaps.png b/Assets/Quiz/Textures/DownCount/t_Clock_MetallicSmoothnessMaps.png new file mode 100644 index 0000000..b385c89 Binary files /dev/null and b/Assets/Quiz/Textures/DownCount/t_Clock_MetallicSmoothnessMaps.png differ diff --git a/Assets/Quiz/Textures/DownCount/t_Clock_MetallicSmoothnessMaps.png.meta b/Assets/Quiz/Textures/DownCount/t_Clock_MetallicSmoothnessMaps.png.meta new file mode 100644 index 0000000..1c3ff5e --- /dev/null +++ b/Assets/Quiz/Textures/DownCount/t_Clock_MetallicSmoothnessMaps.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 0082c9e18d96013488c0ead9bc775779 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/DownCount/t_Clock_NormalMap.png b/Assets/Quiz/Textures/DownCount/t_Clock_NormalMap.png new file mode 100644 index 0000000..1013cf1 Binary files /dev/null and b/Assets/Quiz/Textures/DownCount/t_Clock_NormalMap.png differ diff --git a/Assets/Quiz/Textures/DownCount/t_Clock_NormalMap.png.meta b/Assets/Quiz/Textures/DownCount/t_Clock_NormalMap.png.meta new file mode 100644 index 0000000..29495a6 --- /dev/null +++ b/Assets/Quiz/Textures/DownCount/t_Clock_NormalMap.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 94e2ade721dbb3d4b925d4421dc41ad7 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/DownCount/t_Floor_BaseColor.png b/Assets/Quiz/Textures/DownCount/t_Floor_BaseColor.png new file mode 100644 index 0000000..22be795 Binary files /dev/null and b/Assets/Quiz/Textures/DownCount/t_Floor_BaseColor.png differ diff --git a/Assets/Quiz/Textures/DownCount/t_Floor_BaseColor.png.meta b/Assets/Quiz/Textures/DownCount/t_Floor_BaseColor.png.meta new file mode 100644 index 0000000..abb318a --- /dev/null +++ b/Assets/Quiz/Textures/DownCount/t_Floor_BaseColor.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 60389bb861590e745b808ac4308d4597 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/DownCount/t_Floor_EmissionMap.png b/Assets/Quiz/Textures/DownCount/t_Floor_EmissionMap.png new file mode 100644 index 0000000..99434a9 Binary files /dev/null and b/Assets/Quiz/Textures/DownCount/t_Floor_EmissionMap.png differ diff --git a/Assets/Quiz/Textures/DownCount/t_Floor_EmissionMap.png.meta b/Assets/Quiz/Textures/DownCount/t_Floor_EmissionMap.png.meta new file mode 100644 index 0000000..41c155c --- /dev/null +++ b/Assets/Quiz/Textures/DownCount/t_Floor_EmissionMap.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 1d95aee74be4c6d4a91f520a30d3f0bc +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/DownCount/t_Floor_MetallicSmoothnessMaps.png b/Assets/Quiz/Textures/DownCount/t_Floor_MetallicSmoothnessMaps.png new file mode 100644 index 0000000..55b3f9e Binary files /dev/null and b/Assets/Quiz/Textures/DownCount/t_Floor_MetallicSmoothnessMaps.png differ diff --git a/Assets/Quiz/Textures/DownCount/t_Floor_MetallicSmoothnessMaps.png.meta b/Assets/Quiz/Textures/DownCount/t_Floor_MetallicSmoothnessMaps.png.meta new file mode 100644 index 0000000..3e74b46 --- /dev/null +++ b/Assets/Quiz/Textures/DownCount/t_Floor_MetallicSmoothnessMaps.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 80ff50b539b7f0b47b76ca5e3853c6e9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/DownCount/t_Floor_NormalMap.png b/Assets/Quiz/Textures/DownCount/t_Floor_NormalMap.png new file mode 100644 index 0000000..d69a47a Binary files /dev/null and b/Assets/Quiz/Textures/DownCount/t_Floor_NormalMap.png differ diff --git a/Assets/Quiz/Textures/DownCount/t_Floor_NormalMap.png.meta b/Assets/Quiz/Textures/DownCount/t_Floor_NormalMap.png.meta new file mode 100644 index 0000000..4c4c654 --- /dev/null +++ b/Assets/Quiz/Textures/DownCount/t_Floor_NormalMap.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: dd526623e7f7bea42bc678fdaaa34e48 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/DownCount/t_PlayerDesk_AmbientOcclusion.png b/Assets/Quiz/Textures/DownCount/t_PlayerDesk_AmbientOcclusion.png new file mode 100644 index 0000000..698e1af Binary files /dev/null and b/Assets/Quiz/Textures/DownCount/t_PlayerDesk_AmbientOcclusion.png differ diff --git a/Assets/Quiz/Textures/DownCount/t_PlayerDesk_AmbientOcclusion.png.meta b/Assets/Quiz/Textures/DownCount/t_PlayerDesk_AmbientOcclusion.png.meta new file mode 100644 index 0000000..0c3de1b --- /dev/null +++ b/Assets/Quiz/Textures/DownCount/t_PlayerDesk_AmbientOcclusion.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 83f5245d14b70db40bea601c0a8fb518 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/DownCount/t_PlayerDesk_BaseColor.png b/Assets/Quiz/Textures/DownCount/t_PlayerDesk_BaseColor.png new file mode 100644 index 0000000..f98ce6c Binary files /dev/null and b/Assets/Quiz/Textures/DownCount/t_PlayerDesk_BaseColor.png differ diff --git a/Assets/Quiz/Textures/DownCount/t_PlayerDesk_BaseColor.png.meta b/Assets/Quiz/Textures/DownCount/t_PlayerDesk_BaseColor.png.meta new file mode 100644 index 0000000..cfa3bc8 --- /dev/null +++ b/Assets/Quiz/Textures/DownCount/t_PlayerDesk_BaseColor.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 7d05f559f6e250548ad9c064a042e292 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/DownCount/t_PlayerDesk_EmissionMap.png b/Assets/Quiz/Textures/DownCount/t_PlayerDesk_EmissionMap.png new file mode 100644 index 0000000..1d9a0fa Binary files /dev/null and b/Assets/Quiz/Textures/DownCount/t_PlayerDesk_EmissionMap.png differ diff --git a/Assets/Quiz/Textures/DownCount/t_PlayerDesk_EmissionMap.png.meta b/Assets/Quiz/Textures/DownCount/t_PlayerDesk_EmissionMap.png.meta new file mode 100644 index 0000000..96b1d8d --- /dev/null +++ b/Assets/Quiz/Textures/DownCount/t_PlayerDesk_EmissionMap.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: be7ed85c7c7b6ac409888cd1d60c3c63 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/DownCount/t_PlayerDesk_MetallicSmoothnessMaps.png b/Assets/Quiz/Textures/DownCount/t_PlayerDesk_MetallicSmoothnessMaps.png new file mode 100644 index 0000000..c898114 Binary files /dev/null and b/Assets/Quiz/Textures/DownCount/t_PlayerDesk_MetallicSmoothnessMaps.png differ diff --git a/Assets/Quiz/Textures/DownCount/t_PlayerDesk_MetallicSmoothnessMaps.png.meta b/Assets/Quiz/Textures/DownCount/t_PlayerDesk_MetallicSmoothnessMaps.png.meta new file mode 100644 index 0000000..766f41d --- /dev/null +++ b/Assets/Quiz/Textures/DownCount/t_PlayerDesk_MetallicSmoothnessMaps.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: f5925b094980d204d8fd903d1d803f6a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/DownCount/t_PlayerDesk_NormalMap.png b/Assets/Quiz/Textures/DownCount/t_PlayerDesk_NormalMap.png new file mode 100644 index 0000000..aa71f73 Binary files /dev/null and b/Assets/Quiz/Textures/DownCount/t_PlayerDesk_NormalMap.png differ diff --git a/Assets/Quiz/Textures/DownCount/t_PlayerDesk_NormalMap.png.meta b/Assets/Quiz/Textures/DownCount/t_PlayerDesk_NormalMap.png.meta new file mode 100644 index 0000000..f5a2e02 --- /dev/null +++ b/Assets/Quiz/Textures/DownCount/t_PlayerDesk_NormalMap.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 70fae7d1f55aa924fa736900ee4a5b55 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/DownCount/t_Walls_AmbientOcclusion.png b/Assets/Quiz/Textures/DownCount/t_Walls_AmbientOcclusion.png new file mode 100644 index 0000000..9ea3e12 Binary files /dev/null and b/Assets/Quiz/Textures/DownCount/t_Walls_AmbientOcclusion.png differ diff --git a/Assets/Quiz/Textures/DownCount/t_Walls_AmbientOcclusion.png.meta b/Assets/Quiz/Textures/DownCount/t_Walls_AmbientOcclusion.png.meta new file mode 100644 index 0000000..81202c5 --- /dev/null +++ b/Assets/Quiz/Textures/DownCount/t_Walls_AmbientOcclusion.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 58de770f88430dc4f89dbeef68015f90 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/DownCount/t_Walls_BaseColor.png b/Assets/Quiz/Textures/DownCount/t_Walls_BaseColor.png new file mode 100644 index 0000000..e1348ae Binary files /dev/null and b/Assets/Quiz/Textures/DownCount/t_Walls_BaseColor.png differ diff --git a/Assets/Quiz/Textures/DownCount/t_Walls_BaseColor.png.meta b/Assets/Quiz/Textures/DownCount/t_Walls_BaseColor.png.meta new file mode 100644 index 0000000..962914f --- /dev/null +++ b/Assets/Quiz/Textures/DownCount/t_Walls_BaseColor.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 5fe84a5a7d7b96541a716da6450912d7 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/DownCount/t_Walls_EmissionMap.png b/Assets/Quiz/Textures/DownCount/t_Walls_EmissionMap.png new file mode 100644 index 0000000..919e827 Binary files /dev/null and b/Assets/Quiz/Textures/DownCount/t_Walls_EmissionMap.png differ diff --git a/Assets/Quiz/Textures/DownCount/t_Walls_EmissionMap.png.meta b/Assets/Quiz/Textures/DownCount/t_Walls_EmissionMap.png.meta new file mode 100644 index 0000000..3352d09 --- /dev/null +++ b/Assets/Quiz/Textures/DownCount/t_Walls_EmissionMap.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 7b7275b808b61f1499ce6005ee06ba4c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/DownCount/t_Walls_MetallicSmoothnessMaps.png b/Assets/Quiz/Textures/DownCount/t_Walls_MetallicSmoothnessMaps.png new file mode 100644 index 0000000..fa61f77 Binary files /dev/null and b/Assets/Quiz/Textures/DownCount/t_Walls_MetallicSmoothnessMaps.png differ diff --git a/Assets/Quiz/Textures/DownCount/t_Walls_MetallicSmoothnessMaps.png.meta b/Assets/Quiz/Textures/DownCount/t_Walls_MetallicSmoothnessMaps.png.meta new file mode 100644 index 0000000..e15d3c2 --- /dev/null +++ b/Assets/Quiz/Textures/DownCount/t_Walls_MetallicSmoothnessMaps.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 487f8b323c297c945ab4bbdd7fefde3b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/DownCount/t_Walls_NormalMap.png b/Assets/Quiz/Textures/DownCount/t_Walls_NormalMap.png new file mode 100644 index 0000000..4c0d5d6 Binary files /dev/null and b/Assets/Quiz/Textures/DownCount/t_Walls_NormalMap.png differ diff --git a/Assets/Quiz/Textures/DownCount/t_Walls_NormalMap.png.meta b/Assets/Quiz/Textures/DownCount/t_Walls_NormalMap.png.meta new file mode 100644 index 0000000..36bdfae --- /dev/null +++ b/Assets/Quiz/Textures/DownCount/t_Walls_NormalMap.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 11c8dc923a1337840a6a9ebf4a27aa70 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/Generic.meta b/Assets/Quiz/Textures/Generic.meta new file mode 100644 index 0000000..48b8abf --- /dev/null +++ b/Assets/Quiz/Textures/Generic.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5c4016ddad9bae94eb7b47fdd3cab0a2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/Generic/PlasticNormal.jpg b/Assets/Quiz/Textures/Generic/PlasticNormal.jpg new file mode 100644 index 0000000..ddf0a2a Binary files /dev/null and b/Assets/Quiz/Textures/Generic/PlasticNormal.jpg differ diff --git a/Assets/Quiz/Textures/Generic/PlasticNormal.jpg.meta b/Assets/Quiz/Textures/Generic/PlasticNormal.jpg.meta new file mode 100644 index 0000000..ed24292 --- /dev/null +++ b/Assets/Quiz/Textures/Generic/PlasticNormal.jpg.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 213f64ff18bd7524a8018e8e1949afef +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/Lightmaps/DownCount.meta b/Assets/Quiz/Textures/Lightmaps/DownCount.meta new file mode 100644 index 0000000..4171465 --- /dev/null +++ b/Assets/Quiz/Textures/Lightmaps/DownCount.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5755e7cb9fe0f634cab5ed1a857aadfc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/Lightmaps/DownCount/LMGroup_DowncountPlayerDesk_final.hdr b/Assets/Quiz/Textures/Lightmaps/DownCount/LMGroup_DowncountPlayerDesk_final.hdr new file mode 100644 index 0000000..a8e1410 Binary files /dev/null and b/Assets/Quiz/Textures/Lightmaps/DownCount/LMGroup_DowncountPlayerDesk_final.hdr differ diff --git a/Assets/Quiz/Textures/Lightmaps/DownCount/LMGroup_DowncountPlayerDesk_final.hdr.meta b/Assets/Quiz/Textures/Lightmaps/DownCount/LMGroup_DowncountPlayerDesk_final.hdr.meta new file mode 100644 index 0000000..98f69ef --- /dev/null +++ b/Assets/Quiz/Textures/Lightmaps/DownCount/LMGroup_DowncountPlayerDesk_final.hdr.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 049d0015b1ef25c458bb40c379596a40 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LM0_final.hdr b/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LM0_final.hdr new file mode 100644 index 0000000..bf3f696 Binary files /dev/null and b/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LM0_final.hdr differ diff --git a/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LM0_final.hdr.meta b/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LM0_final.hdr.meta new file mode 100644 index 0000000..08b704d --- /dev/null +++ b/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LM0_final.hdr.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: a171eca5a41371b49af1a8486f069191 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LMA1_final.hdr b/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LMA1_final.hdr new file mode 100644 index 0000000..e2a98e4 Binary files /dev/null and b/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LMA1_final.hdr differ diff --git a/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LMA1_final.hdr.meta b/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LMA1_final.hdr.meta new file mode 100644 index 0000000..e6998d6 --- /dev/null +++ b/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LMA1_final.hdr.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 3bb4b8df33acc844d86b745ad5142f4d +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LMA2_final.hdr b/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LMA2_final.hdr new file mode 100644 index 0000000..54cf531 Binary files /dev/null and b/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LMA2_final.hdr differ diff --git a/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LMA2_final.hdr.meta b/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LMA2_final.hdr.meta new file mode 100644 index 0000000..824d9a8 --- /dev/null +++ b/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LMA2_final.hdr.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 2c4a25ba39330d04bb43765156c38b60 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LMA3_final.hdr b/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LMA3_final.hdr new file mode 100644 index 0000000..7a70d23 Binary files /dev/null and b/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LMA3_final.hdr differ diff --git a/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LMA3_final.hdr.meta b/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LMA3_final.hdr.meta new file mode 100644 index 0000000..427c51a --- /dev/null +++ b/Assets/Quiz/Textures/Lightmaps/DownCount/QuizScene_LMA3_final.hdr.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 5c4db802caf40924d9e1219ab9502d53 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 0 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 6 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/Lightmaps/Lobby/QuizScene_LM0_final.hdr b/Assets/Quiz/Textures/Lightmaps/Lobby/QuizScene_LM0_final.hdr index 52fec49..033b680 100644 Binary files a/Assets/Quiz/Textures/Lightmaps/Lobby/QuizScene_LM0_final.hdr and b/Assets/Quiz/Textures/Lightmaps/Lobby/QuizScene_LM0_final.hdr differ diff --git a/Assets/Quiz/Textures/Lightmaps/Lobby/QuizScene_LMA1_final.hdr b/Assets/Quiz/Textures/Lightmaps/Lobby/QuizScene_LMA1_final.hdr index 5cb35d6..2fdd744 100644 Binary files a/Assets/Quiz/Textures/Lightmaps/Lobby/QuizScene_LMA1_final.hdr and b/Assets/Quiz/Textures/Lightmaps/Lobby/QuizScene_LMA1_final.hdr differ diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_371857150_probes.asset b/Assets/Quiz/Textures/Lightmaps/QuizScene_371857150_probes.asset index 22fb338..c50846c 100644 Binary files a/Assets/Quiz/Textures/Lightmaps/QuizScene_371857150_probes.asset and b/Assets/Quiz/Textures/Lightmaps/QuizScene_371857150_probes.asset differ diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_371857150_probes.asset.meta b/Assets/Quiz/Textures/Lightmaps/QuizScene_371857150_probes.asset.meta index 0e559b1..51e4341 100644 --- a/Assets/Quiz/Textures/Lightmaps/QuizScene_371857150_probes.asset.meta +++ b/Assets/Quiz/Textures/Lightmaps/QuizScene_371857150_probes.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bec44cf7632dbc245a9c3712730cbdd2 +guid: a95df8239daedb8489d82c9fcf2fc126 NativeFormatImporter: externalObjects: {} mainObjectFileID: 112000002 diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_371857150_sky.exr b/Assets/Quiz/Textures/Lightmaps/QuizScene_371857150_sky.exr new file mode 100644 index 0000000..0d4a9d6 Binary files /dev/null and b/Assets/Quiz/Textures/Lightmaps/QuizScene_371857150_sky.exr differ diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_371857150_sky.exr.meta b/Assets/Quiz/Textures/Lightmaps/QuizScene_371857150_sky.exr.meta new file mode 100644 index 0000000..330e2bd --- /dev/null +++ b/Assets/Quiz/Textures/Lightmaps/QuizScene_371857150_sky.exr.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: c290f0dc1f7a6964189bb5df7c62a504 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 1 + seamlessCubemap: 1 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 2 + aniso: 0 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 2 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - FirstCorridorLightVolume0.asset b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - FirstCorridorLightVolume0.asset new file mode 100644 index 0000000..d968761 --- /dev/null +++ b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - FirstCorridorLightVolume0.asset @@ -0,0 +1,40 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!117 &11700000 +Texture3D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + m_IsAlphaChannelOptional: 0 + serializedVersion: 3 + m_ColorSpace: 0 + m_Format: 48 + m_Width: 39 + m_Height: 6 + m_Depth: 3 + m_MipCount: 1 + m_DataSize: 5616 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_UsageMode: 0 + m_IsReadable: 1 + image data: 5616 + _typelessdata: ad358c35a435a62ce235ee35e5357b2d0b361736fe354a2d383634362836182d7c3663365e36f22cd236c236c136332db337ae37a0376f2d5c384a384038a62e553851384238182f3537323727374f2e593662365536332d5d3661364b36362d79366a3662364d2dc436b736af36282dc637b737ac377d2d5438423835381c2e4e3846383638902e513741373237fe2d4d3657364f36842d3e364b3631361c2d62365a364a363a2da836a3369336132dd337ca37b737862d72385e384f38472e5e384c383f382a2e7f37733751374b2d9136a3368936022d6f3671365a368b2c7e3669366036952c92368e367a36442c84377d376e37752c17381d380c38632c333859381738082ca336b736b2361f28412c402cf52bce98c4285328ad26939cd82de02e3b2e35a8232c2d2d482c43a8d9342d3548356118c935d935b735642d313637362c361e2e64365c3650360a2f683666365136552e8b3681366e36192eb336ac36a3363e2e4b3761374837622ef637e137db376b2f993773377137142fba368f368836442e7b3673366136672e8d367e3670361b2e833673366e36112ea0369a3695362c2e5b3761374e37702ed937c537b537de2ea83787377c37b42ecb36a636a736542e7f36733666360e2e823675366336102e773666366036a92d89368b368136b82d4f3755373f37662ef637df37d137f82ec837a5378f37d02eff36d936c736202eb536ae369136df2daa3695368636d52d9b3682367b36c82dad369e369e36772d71376b376e37182ed537b837cb37f92db037b1379137fe2c543630363d36ca2abb2ea52ec52ef120682d832c292dcd216b3311335b33d1281a2e392f7f2e4f248c35733586351c2e8035b7356935bf2d6e3655364d36712fad36ac369b360d309f3694369236aa2faf369f36a6365c2fb936a936a136672f3b3635362436dc2e5e3540353e359b2da73591358835e82d6c3660364d36122fb636a0369836c52fa4369c368d36502fb836a736a036662fb93699369936672f483644363436eb2e783569355a35062eb635b13598354a2e713664365336bb2eb7369d369536042f9f3697368936eb2eb336a1369a36002fb6369a369736032f543651363f36412e7e356b3564356d2dc135b635a335032e90367d366336db2ed636bd36ae36242fb636ad369a36032fca36b936af36182fbe36a536a136aa2e5d3657364e36ee2d703570357135112d4d355a352c35f02cb836a9369536a42ef3340335f134732dea300731ab303e2ab334ad34a434f92d152efd2da92e612836353f351c35542ef93247331e33ae2bd035d235d135672e2237083704378830e236cb36d5365f300237e936f336a630f536f136e1369e301b350b3511357d2e1d2fdd2ebf2e1e28da31bf31c231722a373630362d36322f0837fb36e5364530ea36dc36d13664300e37fc36ff367b300437fa36ee36753017350e350e35e42d242edf2de22d1c27693146314f31432a3136273624362b2f0437fa36e0364230e736dd36d03631300b37fc36fb3647300a370037f63646303e3535353235122e1e2edf2ddd2dbc262b3108311231b1292d361d361a36262f13370a37ec364b30f536e636db3639300d37fe36fa3648300737fc36ec3644306c3559356035472ef02e722ec22e0428d5309330b13098291c36153616366b2fda36d936a0365a3050365e3650363030ee35e935ef35332fd42f193036303229823471348434fb2da12db72db52d3628313408342034da2ce736fc36dc36f83039372237243767314037403736376d31323632362536a330a92f6b2f412f4d299126a825fa248b20d02891284d28a9220034ea33d433892d4e374d373c377731b437ab379937c431933790378037ab319c368a368236c230372fee2eeb2eca286724db232623d81d1027ad26f325b020a533993389334a2d3f373a3724376c31a937a3378f37bb31953789377d37ac31bb36af36a636d9309a2f572f552f0b2919245423b322701d7c261c2654254d203d3336332e33022d33372c3718372f31ad37a9378d378731953793377f377631b036a1369936a0302b300930033088299124f5231c23511eac2725270c274f21ec32d332e732ca2c3437163713376431db37cd37ba37a8318a3778376e376e31bc35f035b3359d30df30c530bc30bd2a34267427ea254b20862d262d222dea280c350c351e3558314837383728374c330237fa36e336d432463150313531642cb126e7250e260221f925fa248a2578209a20c720341f251bc42999295429f7246e3573356b354a31eb37db37d937b7336c37603759373b333231183111319f2cb2244a2414244b1fb72449246324ca1e9c2282226521f21c81283f28282881235c35583550351231e737d237db37ec338937773775378e339a3179317531fb2c5e24af233e23c81ea72434242d24b31e3e23fc22b421371dcb275d2704274522303529352235e830db37c837d337e0338d3780377d37923323320d320932752df7232523b6222f1eb82401246d24101fb2213921b81f1a1ce82826298528e523d334c934c534903099378d3779379e33653747374e37d4336a331a33f1326e2f67281228bf271921d535ba35d3359ca40a361536073675992a363736193692995636523647364ba09e3682367d3679a3ec36d736d736b1a0ae37a437983756a4653852384a38f5a16e386e385a38019c793782376237c09a9836a2369236f5998e368b367936ec99ac3697368b36079add36cf36c236a7a0c737b837a83745a15d384c384238eaa163385d384938f2a194378a37663723a19736a0369336f49979367e36673663a09e368d367d367ca0d436cc36b836a1a0cd37c437ab3749a16b3859384e38fda16c3860384d38fea1ab37ae377b3732a1ba36c836ad368fa097368f36813671a3ab3692368a3688a3bc36b536a13653a5873789377237f3a508380d38013819a83a3859381a3835aaea36c036d336a3aa3c2652259525c19cd5253327fc256f9d4127b129a626d0a0162c1b2def2a139d64357835a235b2a6f3350336e535601955365d365036b9998036783669366820853682366e36e499ac36a4368e36079ac736be36b536209a5e3771375a37fea0203815381638749bf937d637c637349bf636d536bf364a9aa03690368236fc99a93695368c36049aa93697369236049ab636af36ab368ca06d377d37683708a10a380238fb3779a1ea37d237bd375da11237ee36e236639aab3696368c36069aa4369136843680a0a336903689367fa0ac36a936a13685a0603772375937ffa00d380638fd377da1f337e137c13763a129370937f636daa0c636ac36a23697a0be369f36993692a0bb369f36993690a0c836b436ba36a9a37c37733774373aa4f237d937ea3748a6e837f337d53705a89e3657367636dca86b301e3052307ca310346d330634f7a53d2e6e2e562e0da4b92cd22d3a2dde1ded35fa35f8355a28ce350836b735de9f973682367236f419b436b2369c368b20b936af36ac36139ac736b636ba36209ad036be36b636289a82366f365e36e199ef35be35bb355c9926360a36f9358e99a5369d368336019ad336b736b7362a9ac136bb36b0361a9ad136c436bc36299ac3369f36a3361c9a6d3660365236ce990736f735e53572993636253611369d99b736aa369636119ad536b736bd362c9abf36b936af36189ad036c236bb369ea0c336a136a03695a06c365e3650365aa01036fe35ed351ca039362a36123637a0c136af36973694a0e636c636c836ada0d236ca36b9369fa0da36ca36c136a5a0cc36b136b236ada3903684367e3669a30736fc35fd35c4a4c535c835a03590a49d368f3684363aa55b365d365a3606a5e336ef36c136c7a31236253613362ca639366c3648369f1957366d3650364c200a343a34133490a03d36373623360ca33137113712377f1ae536d036df363b1af236e136e936461a173709370137681a8b3583357f3502198d306f3065301d9427331c3317337696823684367c36e1991037fa36f336629af236e036d936461a0d37f93601375f1a1a370e3702376b9a8d358b35853504991430dc2fdf2f5f93c932b132b53221967a367c367436da9914370037f236659af336e436da36479a0a37f936fd36c5a01a370e370137d0a0a835a835a335aa9f3d301c302130be999c3286328a327b9c793678366e3663a018370337f636699af836e636de364c9a0737f836fa36599a18370537f936cfa0eb35e035e03503a056301f304630e69c32320c322332ff9e513651364f3622a329370137fd36daa00c370337ef36c6a01837093710379ca52e3717370037de201736f535fb3581196b2fa72fb92f07190a35df3402351fa5443749372f371aa42b3717371a37dba0523747374337f6a0b736c936aa368da084315d3138317a9b3b286c27df26bc913e2abf2990293b9417350135f334e69eae37a9379f3734a18b378237753742a4933797377c3747a402370537ef36eaa33a31fe300031e79d7026a0250c254593aa283728e1274595e734d934cb3489a19d379c3788374da481377a376b373da4993797377f374aa417371a37053701a48d3155315c3163a0f7254525d324b79425285d27b6268e96ba34b034a13479a38e378c37763744a4873785376d3740a49c37a63786374ca40e371c370437f8a3fc31c331b831c29e3e257c240324ec91ac282f28392847958d34783474342b9e853781376f3718a1a737b7379a3752a49d37953780374da402371337f036c0207e3256325c32de95802863299a281e979d2f1d2f4c2fe192f235ef350b3607a073378c37663735a4403740372a3718a4b834c034b53454a1d12841287728879232260225c52533905a21fe211720d684462d262d012dc49094369c369a3675a00b380c38073891a4ad3794379f3756a4e134da34da349d9e1b2846274a279091842505252025fc8849238c23d42195867c2c3d2c422c0d90af36b036ac360a9a0f380d380b3880a1c937ac37bb3747a128351c351e35fd9eb227e526cb26379109258d249f24d38ecd230524fb2168902f2ccd2be22bac95a1369b369d367da30e380e380b3894a4cf37b637c43769a462355c35623514a266280e28ee27f496e8245024ca248b913a22f5212020088f8f2c652c622c359b5f3656365b3651a0f9370238ed3781a4dd37ac37c43754a1dd35ca35d0354c993e281a28d6275098bc359c35b435a3aefc350736003693ad2a362e36193665ad413640362f3689ae6f365936513616afae369f369c36faae7a3778376a37d0af583844383d384bb056384c383e380ab04b374837393762ae8a3692368736b9ad693672365d369cad75366836603604ae9a369336863627ae87377d376d3770af51383b38303844b053384638373807b06f375a374b37edae8b3696368b3619ae563668364d36e7ad63365d364c3650ae833682366d366fae8c378a37723775af64384e38423857b05938483839384cb0813783375a376aafb136c136aa369dae79367a366b3666ae79366536603666ae7d367a366c3669aee7360137e336d2aefe370e38e43772af3c3858383b386aafd53091309230d2a6c22144257126271310242d24c2223e1c061d6e23e31fcd17da2c942db12c3fa4bd35f1350336f8aed535e535c3356fad433648363d3630ae79366c36613608ae6f366f365736b9ae84367a3667362daf8d3685367c36d8ae05372137073755afea37d337cf3722b0a3377e3774378cafd136ad369f36bcaea83698368a3694ae973687367c3683ae863672366e3672ae7d367a367136c7ae193720370c376aafcf37b937ae3714b0ab378b377a3701b0de36bc36b7362dafab36a3369136f7ae933685367736deae7e366c366536c8ae6a366b366136b3ae0b370d37f9365cafdc37bf37b5371bb0b03792377c3704b0ef36cf36bd363eafba36af369b3607afa3368b368636efae95367b367736e0aea7368a369536f3ae24371b371c3776afbb37cc37a837a4af6b3759371b377eaec82fe42fce2f279ec628ad289a29af231321651d17205f1d5e21b6216122881dd8340b35cd3432a9ae36d536ab3639ae7635b035633552ae71365736503675afba36b636a43668afa33699369636afafae369f36a536bcafaa369b369036b7af14361336023609af4e3532353335d7adac3599358d353fae76366d3655361dafcb36b036ab36ddafad36a33696365aafc036b036a9366fafaf3691368e365caf293629361636c9ae673557354e35f3adb835ad3599354cae7b366c36593681afcc36b336ab36deafa8369c369236b5afba36ab36a236c9afab3691368c36b8af333631361c36d4ae6b355935513546aeb135a835953597ae80366e36573686afcc36b336ad36deafaa36a1369236b7afbe36b036a836ceafb1369836993610b0793673366c367eaf343540353835bbad7a356e353835b9ad92358a35753559a9712cb52c6a2c23244e293229ec281e24482b362a822bd5243d3614361e36b1aa853679368136eaafdd322c3308338eacc935cc35cb35adaf25370937053756b0e536ce36d73661b00637ec36f53676b0ef36ec36dc3636b00835f634fe341caef82eb42ea12e09a8c431a531a93100ab39362e362b36e8af15370637f136b3b0f236e536da369cb0123700370137b1b0fb36f036e736a2b009350135fe3466aeda2da12d9b2d6fa74a3125312b31b8aa303623361f36ddaf15370b37f136b3b0f036e536d9369ab0103701370037e3b00637fc36f336a9b02e3526352235e0ae1e2ee32ddf2d0fa82031fc30053183aa27361636113615b00e370337e636aeb0ee36de36d43699b00937f836f836deb00637f936ec36a9b0733563356c353bafa92e152e712e3ba8703049306430a3a94d364936293601b08236a4367a362baf0b3635361136a1add536e036d136d3acf836d036d2363bb084357235813552af5b2d6d2d712d69a71f34ed330e3419afe136f836d636edb13c372537293707b23a373e37343705b2273626361936f3b05c2f182ff02e82a970268325c524d1a090285528082816a3e233cc33b8331fae4537413731370eb2b237a937963769b28737843775377bb28d367c36743675b1fe2ebb2eb42ea0a94424be23fd22a09ee8268e26d1255da178336c335f3303ae3b3734371f3706b2ac37a637913764b28f37833775374cb2ab369f3698368eb15f2f1d2f192feea930247d23c622bd9ec9266426812576a1193314330933e9ad2a3722370e37f8b1b537b03792376bb2933792377f374fb291367e367a3678b1f92fbd2fb72f31aafc2528250025a6a04a289a271028a9a2b8327b32943268ad833745374d370bb2fe37d937d3376eb2b1379c37913730b2ed36dc36d83693b1273002301630fba9ca25dc26612555a0592dff2cf62c74a8e934eb34fa340fb13b372a37193708b4fb36f536dc3697b3fc300331e830ffac9726dd2505267da1d925e22473258aa0b520e720741f0b9b87295b2917299ba448354c35433571b1de37ce37cb3763b469376037583707b4e030c330be30e3ac74240e249823ab9fd82470248224869f39230823fd219c9d2828d1279f2765a33b3537352e353eb1de37c837d33747b47e3770376a3712b43b311a3116313ead32246523e7223a9f0925962489240da0a9234c23fc21619e4527dc26772677a20b350235fb3432b1d837c337ce3760b48b377c37783735b4c731b131ab31caad2c234822ce212d9ed52431245824819f162480238222589edf262c270d27b9a1bf34a934a534e4b0b537b037b3374cb489377037713734b434320332093238aecf25b9255825d7a0 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - FirstCorridorLightVolume0.asset.meta b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - FirstCorridorLightVolume0.asset.meta new file mode 100644 index 0000000..da123f8 --- /dev/null +++ b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - FirstCorridorLightVolume0.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 97502640ba8093f44bc1b76d6c9b50c8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11700000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - FirstCorridorLightVolume1.asset b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - FirstCorridorLightVolume1.asset new file mode 100644 index 0000000..da90a9b --- /dev/null +++ b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - FirstCorridorLightVolume1.asset @@ -0,0 +1,40 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!117 &11700000 +Texture3D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + m_IsAlphaChannelOptional: 0 + serializedVersion: 3 + m_ColorSpace: 0 + m_Format: 48 + m_Width: 39 + m_Height: 6 + m_Depth: 3 + m_MipCount: 1 + m_DataSize: 5616 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_UsageMode: 0 + m_IsReadable: 1 + image data: 5616 + _typelessdata: b0318f31f9313b2c90314631be31dc2d502e5d2e432e052e3720022390196e2db1ab22aa23ac3b2d96ad89ade9ad272d00ad6cadd0addb2d6aa94caa3daa8a2edf21cd1bb21b122f162dac2ca52ce42d7b2c252c1d2c3a2d082534234420392dadab9bab25ace42cb0aea3aefbae1e2dceaec1ae26af722d5baa16ac21ab032edd24cb21b521842e942d1f2d7c2df12d732c1e2c192c8d2def24fa243220272d92abd1aa75ab332d94ae8fae7fae0f2d68aed1aec1ae802d87aa31ac4dab2a2eef24d321c121112eb72d422d2a2d422d442c4f2c3e2caf2c44235d204e208c2cb3ab9aab24ac862cddae1cae66ae422c01af8eaeecae712ceeaae6ab58ac6a2cb121db1b8ba1aa2c3f254f250d1a2c281ba976a956a9cd98da25f2244a241b9e6f269028ce2525a931260528682630a9c0a9f8a8289f1824ec33d833fd33c72de832a2339533d82e0f3038305e30a52e11253a232223f62dfdacf5ac44ad0f2ed3b0ceb0c7b0372edeb125b211b2752e9fad1ead8cade52e2f3050304f30f12ecb310532fe311c2ec52ed52fbf2f022e7020662045230d2eb3ada5ada1ada52df5b020b11cb1c72debb125b24ab20b2e8aad0cad71ad5d2e37305b301f30972e0b321a324b32d22d272f1930c52fa52d69204b230d25a72d4bad9aad94ad9a2de4b015b10db1ba2de2b11bb209b2012e12ae8eadf5ad722e113036302930422e3932493238329b2d022f0e30f92f782d842076202825642dc8adb2adacad542dffb0f4b0f4b00b2dfdb12eb230b2a82d4caf52aed2ae732d4b2e2b2f9f2e902cf82e832f392ff12969a731a6b1a62120a828842707299b1d8a2364249224312899293d2b252a2327bcae4fae05af9e2e633466342a34f82d503456343a34b02f8f315e315131b92f9c299229d3283e2f18ad0cad72adeb2efbb11db215b2562f7ab3cdb3e4b37c2ed2aef8aef5ae302dfc31bd31b331d12d093401340c34052f053125311f314c2fe028da28cf28472f80add3adccad532f5cb26db26db2e52ee4b306b4f8b38c2e42af7caf67afa72d90318b314b31f22d233404341034ad2e673182314c31e92e9c29d628cc28e22e1bad6ead68ad8d2e29b26eb23cb2862ef3b326b403b43e2ee9afcdafc3af5b2d713167315531a52d0834f8331a34692e4f316c3160310a2fed28e728d928f92e8fade2addaad062f61b249b245b2912e16b413b40db4442e60b087b061b0112d0431e930bf304a2d393447343a34952e912e802f652f852dcc2af52ab92a632a5e1e48213118f12dc129572aad2aa628f5b126b2fdb1f62e5932a03261326b2c3a343b342634bd2ebf32413208331230632b852a552b203052af38afa7af643013b411b408b49b305cb44fb466b41f2eb9a9e9a9cfa9f227d92fde2fb92fa72a853496349434832f4132353254326f30a32a5c2b8b2a5c3093ae82aeeaaea23003b495b3edb36f3034b41ab42db4232e76a98ea990a92127a52ec62e852e672a6a34793477341f2f703267324f323c30a02a5d2b8a2a5c3090ae1dae81ae703006b49cb3c3b3403054b43ab44ab4072ec9a9e3a9b6a9cc26592e772e5f2ed329673472347034142f7e3276328c324630ae2a672b5b2b303092ae1fae80ae7130d6b398b3b8b33d308eb457b470b4312e58ab30ab89ab7627872d3b2d1a2d8e29713482346d34622fad32dd32a4325a303d2ea72e982e3a305ea758a75fa72d2fbe2afc2bf72be72952b316b375b3652e9a2db02dae2d9928b0328b32b2325a2d8133fd3343336c31b12c3b2ca32c8a319bb0d0b0c9b0d63107b507b5fdb4cf3038ae20aefead57299099cb983798d31f8d24732450245122453233325b327a2d6234613457344231652b5c2b4b2bbd3107b13bb130b1a931feb408b502b58630c1ada0adb7ad9928b69afd99da99361de221f02176216e20c631f4310332412d73347034633434311c2c552b0e2cb731d1b000b1f8b0a331fdb40cb506b5d0302cae10ae29ae14295299c2985a98dd1c0921eb209720c31f5d3172318631c92c6c349b3475342a318d2c1c2c7a2c84319ab007b1f9b07431f5b402b5fcb49630e2aec7aebdae5b29179f2e9e859d811d712056204720f120d630f630ec30ea2c86348d34723481316f2ef22d542e0f3201b1f5b0b8b0cd318fb2f5b25bb2f23029b024b0f4af682baf241a25b8248620902c2e2c182c4a28a0327c32023334315829ee2adf2a3c336cb331b34bb33133d1af03b0deaf932c7b9d2b9df59c9520151be719921a2b1fcf18b9181e176b1bc725c525a425d224fa32d9321d332831972d1a2dfc2de033d0b2c5b2beb22f338eafb2afa7af882ce89cb99c439c6b1e5391cf8df4902c1eb8129d124410df1c812313232923d5220933dd3220330e31782ef62d6f2e08347db2a4b2a2b27b3327b036b033b0de2c8d9de29c9a9cf71d4e8ebf90a98d0d1e80141913cc11071df320ae207520ed2185327c32bd32bc30e02e5f2e4a2fcd3381b275b273b24e338cb0a8b0a5b0622d169f5b9e299e591d219c029bbf9bc41d6f8ee68d1a8e3a1bae21ab213b21ff231032be31213242302f30e32f53305b3353b172b10eb1ae32eab1ddb1bcb11e2fd8a167a1eca0b620d931bd315532d2a5b6316931df311f20172e242e5f2e3620ba192323ac99b699d9ab3faab2ab69a00faefdad60aea3a08eacf6ac5cad2da1f3a65ea95ca8dba1011c019cdd9b019c6e2c072c612cc99a482cde2bcb2bfe992f25642363206fa0e9ab12ab40ac77a08fafbaae0faf9da05eae52ae45ae3ba16fa848ab40aadaa4f424e31bbe1beaa1592de52cce2c1ca1482c4d2ccc2b7da04f235523c91966a0d9ab07ab37ac70a022afb8ae05afada363ae5cae47ae63a47da95eab52aae9a4fe21e81bc61bf1a4fb2cfd2cdc2c56a45e2c672ceb2ba9a371236823e0192fa5e8abcbab3fac32a509afa1aeedae4da597ae2cae84aea9a7eba9c7abc8aa08a9a31be4a1a2a467a93f1a93202a1a3eaba8a3afa2dba2839bc71c151d391cb59e12258a28752497a23d2c962d322bc49943a4f19874242da2133408341f346f991033d133c133c01921304b306f30d81927255a23432369a077ad10adffac009a43b10bb105b1179ab8b1fdb1eab10ba15cadd7ac4fad88a1e12f50300f30149bcc31143200322c9aec2e992fe72f72a083207620652376a0d4ad24aec0ad77a066b161b18eb187a0fab13db22bb23ba43fad35ad2fad6fa122304e300b304da14a325c325132b2a0f72eff2ff32f77a0802073205c2373a06fadbead5aad72a02eb15cb156b183a0efb134b21fb20ca143ad3aada4ad74a1db2f1e30aa2f57a12b3242326332c4a0752f0d30073089a392207d2074237aa3e4adccadc6ad7aa344b134b139b14da506b234b235b2e4a5f4ae6daeedaefaa7952d822ef92d0aa8a92f572f1b30a7a85da9c4a87da9faa25797b61645174aa6a311cf11ba11a0a37828002a1729962187af42af21b0bd29b634ba347a34739983348c346a34e1199531943152310d1ab229a929e62887a02bad1ead21ad109a40b261b259b2179afeb30bb417b4d099e0af9fafeeaf309956320e32fd3175992d3428342f34fa994c3167313731119af528f128e928159a95adecade5ad1d9a96b2a3b2a7b2fb9921b42fb426b4c3992bb020b014b00ba0e031d031bd318d99503430343b34059a4e3198316c318da0f428ef28e828139a94adeaade4ad94a096b275b274b27ea020b42eb40eb451a089b050b044b010a0b631d53192312da03e3433343c3487a08d31a431753197a00229c029ef289aa09cadf1ade9ad9aa09fb285b286b28fa337b447b443b45ca3dab0fcb0fdb0c2a24b314e31293188a26f344e345f342fa5b72f0b30b62f08a572250c275725b3a0e2ab56ac4aac3fa6a8b043b058b05a2057b47eb480b415259533d1338933a397b634b2348c3436a001337c324933629a662b4f2b132c289a41af30af9caf379a41b439b434b45b9ae4b4ddb4d9b4fb982dac32ac28ac0194e6301231db306c96d334ec34e634e3994832343260324e1aab2a602b932a361a92ae7faeecae4d1a29b4deb31bb4601aaab4a8b4b7b40219f2ab0dace4ab1a932b304c301e300c96cd34ce34c834dc997f326c329232539aac2a652b942a3a9a8fae7faee8ae4d9a29b4deb301b4609ad5b4c0b4d0b4aa9f40ac5aac41ac92990f30483004306c9cb534cb34ad34d899b6326f329632569a7a2b672b5e2b3c9a8cae1aae80ae4c9a28b4d4b3f9b3c2a023b505b505b5f69f15ad10ad21ada89c422f162fd82ed49edc34f334f13422a32d3305333433e9a3902b862ba82ac0a09cae8eae95ae90a51bb40eb4cfb301244ab52cb531b50920b22f06300230521c3c34293447349a9e27345f340234959aa82c342c032d689adbb009b106b1939a8cb5b3b5b1b5219ab6b0bbb09bb0459b369a499ad2993194f62669268526ca93473446344c34a7a18034b434933453a43e2b352b292b3da43db177b12db149a47eb599b588b58da58ab056b069b0e59f459dec9cb49c5a9226247f233b23c394f6330134eb337aa1ad34c834bb344ca4072c032cf62b39a40bb140b1f9b049a474b590b580b59da5beb0a1b0bbb037a0369c709b5b9b2b94e8222222c821d29568337a33623369a3da34f434cb34f7a5772c752c672cf2a5d6b04ab1feb052a46eb592b57fb504a448b115b120b1829e5ea0789fe99e148ea71f531fea1eac91bf32e032ba320a9826355a353235c89a672d722d5e2df89ad6b008b1c4b0da9a18b53eb524b59825e9b1c5b1b3b1ba158f2725280f28909c5d2fc72eda2e049c283426347b34b4a24f2a0c2cf02baca70bb40bb419b418a4edb30fb416b483a3c2a072a06aa0ce948c183e18e318a891cd1a9d1b32196a85ab2ba22b8f2bfa96c834ce34fc347ba0b52d422d982e92a4b2b399b3a4b348a408b413b425b4939e25a271a174a1ee907a8fab91ca91ce8e8e1954191d181d8d822953297829a98fdc34dd34223588a0a62ea22e142f7da15db342b350b333a142b44bb45fb4c5a18aa129a115a1ac90b091249138912b8e1119381918178a906e28212849286898ba34b634ff3476a3192f192ffe2f94a42ab313b320b35ba472b480b486b43da409a4aca380a36996ed9a939a4d9b6294088f0e9220910e9214279426ce26789c74345734883402a56430a430d03013a8a9b1f5b1cfb1a2a942b545b54bb5d99f11a34ca387a21899bf319f313332cfaed43188310432efac652d692dae2d69ada7993c2096992daea1abd0aa1aaca2ae39ae8bae88aeebae47ad46ada7adcdaf6aa843aa39aa37b0e624d321c02101b08f2d242d822d60aec12bcb2bbe2bc0ad3d235e20c019a4ad31ac99ab80acf8ad45af3daf8daf7fae97ae8eae80ae66af5da910ac18ab2eb06528d424c32439b0822e9b2df92d44afc22bcf2bc22b82ae4b205720b19955ae93ab8cab17ac4aae2caf2baf70af6eae9bae06aff0ae73af72aa22ac37ab41b0e026d624c5243bb0252eba2d052e6cafef2b012ce72b0eaf63206420cd19c4ae34ac95ab24acaeae25af66aeb5aec4ae0bae21ae07aeecaedea9deaa93ab8eaf43a95cab2bab1daffbafcdaff0afeea5ada046a423a58b16649d7c9ea19dc81b41104b160210fb1df529a42ba129e0a3dca80aa6c1a48baefd33e833073428aefc32e433a93335ae7e2fcc2f0d30b5ae16255c20292316af56adf0ac3ead22af16b13fb138b12eafd9b1f0b1dab173af96ad15ad12ad16b034308c30863067afdf312032433299ae942ea22f332f84aef419e619532373aeb6ad01aea1adbcae68b165b18cb1c4aee9b123b212b2d9af12ad04adfdac41b039305e305430e1af4d325f325a3209af972eaf2f9a2fefaef1196b204d23d0aeafad9fad99ad12af29b12ab150b1b4aedeb112b201b25eaffead08ad71ad0cb0043062301f30e9af5d32713260321daf072fbd2fa62ffbae7f206f205e23d6ae64adacada9ad23af2ab114b11cb133af26b2ebb1ecb16cafe5ad81ad68adb5af492a392ad22a04ae0baae7a90faa3d9ef4a386a359a44323e19b7e980b9bb6193e90738e7c92e31da6a846a827a969a930b17fb1beb15eae5b346034253443ae523457343c3457af6a3166312831c5afdf289729172801b018ad0cad71ad05b01eb23fb235b2a6af77b3a2b3b8b308afbdaee5aee6ae04ae01329c31b8317bae26340934113470af15313131fd30beafe728df281728afaf87addbadd4adbeaf83b295b292b29aafbdb30bb4d2b322af2baf63af0aaf2fae92315e31743192ae2a34093414346faf473164312d3111b0e328da28d328a7af21add6adceadb8af4fb265b261b29aafcab311b4d9b32baf7fafb3afa8af31ae62315a3148318cae15340a34133471af473194315f31c1afe428de28d328adaf85addbadd4adbeaf54b26cb26db201b040b43cb437b477af30b05fb059b0c8adcc3171318731acad7c309d30643051a903904110fa8fa724fe951b98c8972e241d189d8dc98e4c24abb0b8b094b085aa77b457b48cb4c3ae27326e3234328eac3534373421345eafc23242320933abb0662b882a0e2c84b056af3bafa9af98b010b40eb405b466b04cb43db456b406ae9ca9c6a9b5a912a8922fbb2f972fdaaa863495349234daaf4d323f322c32a9b0ab2a662b942a93b096ae86aeecaea5b0fbb38bb3e5b39ab016b4fcb31fb45cae34a953a925a927a7592e772e342e89aa69347634733412b0803277325f32acb0a92a662b932ac5b095ae21ae86aed8b0d5b398b3c0b3a2b047b42eb43db4d5ae9da9bca98ea9d0a7262e432e062e9daa63346d345334bcafac326f328632a7b06f2b5e2b542bc0b028ae1aae7eaed2b004b494b3b8b3a0b0a7b473b48eb426af3dabf4aa2fabbaa7732d052d052db0a9673492346434fcaf0e3128313631f0aecd29a92a232915adcaa9d3a9c6a914ac61b305b307b380afa2b493b48cb49cae2e2d532d432de5a675326f32953227ae7a33f8333d339cb1b32c3c2ca62cc0b197b0ceb0c8b0d4b1e8b4feb4f3b4f3b0dfadc2adbbad4fa9ba980c980a9848a030241924db237ca211321c3228320eae42345a3437340bb2632b5b2b482b99b2ffb033b129b179b2f3b4fdb4f7b496b194ad77ad71ad9ba9fc9a579a1e9a3b9e8f217621022146a1a431b631c731f9ad57346c34603400b21e2c582b0f2c96b2cdb0fcb0f3b078b2f1b400b5fbb484b1e1adc6adddadeda9e99949992a99079e81206c209d1f24a129313f315031e5ad663495346f3425b2222c8f2c7d2c9fb299b006b1f9b085b2deb4e7b4e4b497b196ae64ae5fae3aaafca04ba02aa001a0f7209d202921e7a1ca30e530e03008add334e034b134dab1182efc2df72d89b23cb068b061b057b2f0b4e4b4c8b4b7b118afd9aeddae8ca95f249a243724b7a16b2c0e2cea2b72a84f325132d13235b14f29e12ad02a33b464b32bb343b390b31baf6eaf69af2aada79c789c409c0da1981be51a271cdc9f63184a188616e49b8a2585253f259da4c932a832c23275b11c2d122d802d5ab4cdb2c5b2bdb202b417af31af4cafc6ac289dec9c9c9c369f910e02081308e49ec017c016c015a89d6523f422fe22bba2b832b332f23260b1ff2def2d682e57b474b268b298b226b49baf90afafaf42addb9c7d9c639c949eb0112e112c13a49fa01588146f13149e0721bf2079201aa256324b3266324db1de2e5b2e462f54b47fb272b26fb22cb433b04cb048b0dead2d9e699d009d969dea9b569b9b9bbf9e7692a0939d92d39d671e471e921e2da290313331b431efb03e30043075309db400b15bb1f0b076b420b10db112b15eaeada0c4a026a0eea0 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - FirstCorridorLightVolume1.asset.meta b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - FirstCorridorLightVolume1.asset.meta new file mode 100644 index 0000000..416979a --- /dev/null +++ b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - FirstCorridorLightVolume1.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7a20bd65aa8aa634691271b2935eb2ac +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11700000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - FirstCorridorLightVolume2.asset b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - FirstCorridorLightVolume2.asset new file mode 100644 index 0000000..7282913 --- /dev/null +++ b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - FirstCorridorLightVolume2.asset @@ -0,0 +1,40 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!117 &11700000 +Texture3D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + m_IsAlphaChannelOptional: 0 + serializedVersion: 3 + m_ColorSpace: 0 + m_Format: 48 + m_Width: 39 + m_Height: 6 + m_Depth: 3 + m_MipCount: 1 + m_DataSize: 5616 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_UsageMode: 0 + m_IsReadable: 1 + image data: 5616 + _typelessdata: 07380d384838412d373860386e38282e8b38aa388c383f2d9638b538a1380a2da538c238a738db2cbe38cb38cb38262d233949393239d02dd139d839ca397b2ef739013aec39f92e1d3928392d39db2d98389e38ac382f2da638a938b038272daf38b038b538de2cc038c338b238b82c2f3941392c396a2db739ae399d39f02dce39e239bd396c2e243925392839e42d843896389c38862d8438a4389c38122d9e38a438a438262da138a9389e38032d38394e393339722dce39d439c039152ed439db39c939ff2d29393b393139942d9d38b538ba38fb2c9c38a938a4387c2ca738a338a838802c86388f388138352cdb38f138e738682c2b3941393a39cd2c7c39ad395739632c2b3789373b37ea283a292e2a1c297e9860247323c0212a9b5f28ba295e297ca83ea36e9e7fa323a97c342735c7351229e23750382d38a62d7038ce38ba38732ee538df38f838f42edc38db38e2383e2edf38ef38f838fe2dc138e038e538cf2df83821391d39602e4f3950396839522f3b3949395539ef2ede38d738d138742ec838d938d7384e2ee138e138ee385d2ece38ce38e138fe2db338bb38cf38222e033914392139652e2e392f3932392e2f373949394f39f92eea38e738e838332ecb38e538db38f62dcd38db38e438f32dc538c438d638f12d9738b038c038b12dfa380c391739582e413940395339d72e3f39433941399e2edd38e838db38ef2dce38e138d838bf2dd238db38e738b62dc738c138d338ac2db038be38ca386b2d12391b394539152e1d390a394f39f12df738ea381a39572dec36af360037b12ab42ca52c042df820a42a0829312af4207f31f0303e315d288391ef22231d96241637a836ab36152e923737388637a72dca38d938c838f02eed3810390f39462f1239163920393c2f1e391e393c39522f02390e390839ad2f60385c385b38c32e6736563667367a2d763781377537172eb138b438c838f02e0c3913392539a22f0a391c391c39952f193918391f394c2ff538ea38f638442f533850385b38d52e863674367636e52d753798377637292eb538ab38b6389b2e0c3905391639e02e06390c390d39d42e153914390e39e62ef338eb38f438e22e5b38643863382c2e793677368236a22d5a3775374837e42da8389a38ab38ac2ef238ec381239fa2ee73805390239e62e0e3902391239fb2eed38e738f0388d2e56385d3862383b2eb836cb36e036122db336d636ae361c2d323835383438812e113545354435712d443082300e30ab294734643429345f2d27216d22b424fc28a135bd356035342e3c333034b0336f2b2a3841382b38bf2d5d3949396c39753052394c396d3957307739573991399c306d396a3976395f303c365f365436272edf2cfd2c002dcf277e31b831bb31572a69387a386d38262f5639593954392f304c395a39513923306739663982397230603964395b393530253663363e36da2d4b2c5a2c872ccf26283140315c31252a593868385b381c2f5339583950392c303d394e3944392330653966397e393d3064396939613907305436a7367e36b92d462c6f2c832c7526a230b930d5309529403840383338102f45394b39343902302e393c39403929305a395b3971393c306f39663966390230b336c236cb36392ea22db02df62dd327f23022312231b2293f383b383b38642fb7389e38833835308837b0379f373030d336f836ff36342fbf21de23fe24d329ce34fc340135bd2d4b24a625f6254528b4348634b0343e2d493973392839f03088399d399f398b31c239f639e139cd315a387038673899307d2c592c742c39293da583a40aa4e31e63a249a1bca0f321433429343a34a32db339a539a5396a31d839df39ed39af31db39f439e7399d31bc38c738c1388030882c412c8b2c9728e6a244a2b4a1be1c49a19ea08f9fe51fb7339033b633362da739a3399f392431de39e739f339a831ea39fc39f2399a31d238ee38e738c930e22c9c2cd02c1229c5a20da2a1a1721c51a29ba1bda0c51ecc32ab32be32c42c9139983988391c31e139ec39e4397031ea39043ae6396631d738e438de389030792df52c612d532939a1a9a02aa0b81c39a0a89e919ead20fd3215332a33c62c77396d3978391831a139b3399739c8315939753945395931a035aa36ff35e83017303530f42f8d2abca5e4a663a5c220cca3b0a2eda06c284f353d357435b5316c397a396e399433ec38f33808391933ec2e6d2fb82fa22c26a58ba4bea4b420caa6baa560a62520e8a0f5a0ad9f981950a41da3c5a2972454356c359f354731d739f639f4390b3444392e395e395d33b42fb22f0b30a62c5ca3d8a29fa2551e3aa5cfa4eca4911e3ba3f0a2d3a1091c63a4cba3a1a3ec2208352b354a352d31ff391a3a123a0c34813967399b397933643071309530022df8a23da2e1a1a01d39a5d6a4cea4031e45a405a4b9a2441ce5a4a0a468a4d8219434b334d2340031123a2e3a1a3a083492396d39a139823360307c30bb305e2d91a1fea0c9a0051d2aa570a4e8a4601ed4a158a10fa08f19c7a4b9a467a40523e1328e3279333e300439ee380a391133743937395639b4321c34ab33b133c32e87a609a6f6a57c20233825386138e59f54387238883816209738c33896388299ac38cc38b83841a0ca38d938c93854a3e938e738e738a3a03b395e393a3925a1dd39e339d839d0a1f939193afd39dd9b403953394a39ac9ab938c138c138f099be38c838d238d999d438d138d438e999de38e138cb3894a04c395e39453930a1c239cb39ae39c5a1da39023ad739cfa137394c39403903a1ad38bf38c238f199af38be38b93857a0ca38c938c93866a0cc38d238c4388ea050395839473932a1d539cd39be39d6a1e639e639cc39d4a147395739413912a1b938d038c83886a0b938bf38c03858a3c738c138d33863a3af38b638a8383ea5ea380739f738e3a535394a393b3912a86639cd393e3918a9e236d036b2368daac11c0e1ce11be19b1b1de51d401e3d9d591e9722f21e39a045271e299a24a89e6e361037ad3774240d386f384e3853199538e038d638b499ef38f4380c39cb19f238f038f838cf99f8380a391139ec99db38f938ff380f9a123947393739a49a81399039a039629b7d3981399239069bfd38fe38ee38189ae338ef38e438e199f638f3380439ea99ea38f4380839f099cf38e238eb38069a2a3942394139b19a553959397039369b643970397d39fe9a113910390739389adf38f338ec38ea99e638f038f238e399e538e338f638e899bc38d238d838fd9913393b393639fba067395e3971396aa15c397a397239019b0739173916394a9ae738ec38f138fe99ed38ee38023979a0eb38e238f63879a0d038da38f63899a327392e39573935a44d394a39813942a61b393139483931a66d373437583703a86d2df12cac2d52a37b3281316b32e8a57c2b212c292c1da411275729d227221c9237e437cb376a27fd3773380438bf9ff4380839f038d3990a3921391039f999323937394039079a49393c395739141a2b392a393039101aaa389c389b38c1995437183729372d991a381d3807386599e738e138e538e299213925393d39119a2c39403943390b9a38393b394139169a0939fa380939ff998f388638873848a072375e375d37fd9f2538243817387b99f438ea38f338f399163918393539179a1e39323937390a9a2b392d39343990a00939fc3807397da08e388438863847a07d376737673704a010381d380d387c99e338d638e838f499173918393239219a143933393239139a273927392c3994a00439fc38153990a390389f389b3855a3c937d137e837c3a28937a23781375aa2b138bf38c33827a532383338543805a5d638eb38cb38a1a30d381938ef372da61b3877385338ad195d38bd384d3847205d340b35933471a29a38a1388738daa482395d399139631a6d3969398e39351a84396a3996393e9aa13989399d39541a01371f371a37f798bf2ed32e032ff1933833c7338f336896b538ce38c838dc99693971396c39479a6b3976397c39309a80397d399039549a8a398d398439559a03373d372137fd98642e7e2e9d2e5599c13222330e338c9ca438b138ab385fa05f3976395e39b5a05f396c396539a5a0713970398039bca08a398d398339bfa03a3777375c37a49fa42eca2ef02e999934327e3282326e9c8c38973884385ba055395f395539b8a04a3955395b39a7a06f3970398a39baa0953986398a39baa0a537c137ac37a3a2872f812fe72fd49c2b329e325e32ee9eb438b4389c3820a3a3396a397339e5a372396b397539b3a048394a39753995a5013a213a0e3abe2052387038333867998d29972a162b3c19703639366636eba3ab39c93973390ea4b139c839ca39d0a0f839233a133aeca000391a39033984a0dd2f582f712f139b45a69ba531a5c39368a02a9eb69c8a930036f835f935b59e193a073a0d3a2aa1fd39f639073a36a41f3a3e3a283a3aa451397a394f397ba5bf2f422f8e2fe89f0ba57da419a4b391fba2d5a13aa173945d355f3561356aa1193a263a163a41a4033afd39ff3930a4243a303a1d3a3ca46e398a396d398da54530e72f20303da018a580a430a4a19327a4f7a2f8a14e95e834bb34ce3452a31b3a1a3a083ae6a5fa39f939f339dfa5263a4a3a223af3a55a39723960398ca59b303030663085a070a2a2a144a1589285a306a252a2c594a834b334af3408a1063a113a023a33a4f8392e3a093a27a1fe394a3a103aeea51f3978395d397c25bd32aa3282324f9c6ba6aea76ea63d927b29ed29492a1f9c02380b3834387699ea391a3a083a2ea480399b39b0390ca4a933b633053451a124a78ca6dfa60b9537a7d5a5e2a6d28f06a175a1ae9f8b8978201b22a123c896103821384f3879a05d3a7c3a743a75a1fd39dc39003a2aa1603459347c34939e34a699a59ca5f09045a6d9a50ba6a18840a331a3cda14485969eb49ac595b28fe13709381f38079a9e3ab83aa63a7ba12f3a183a4d3a3da1ea3403352a35ef9e08a699a56ba59a90cba55da573a5438e61a466a4b6a2c18e7fa69ea53ba5749829376a37843778a3ab3ad73ad23a91a4423a203a713a63a4c034e134213541a4e6a570a56ea508985ea5d7a44fa5de948da203a257a0319014a794a68fa6749cb6359735253606a50d3a073a123a07a8943a333a713ad3a8e936a936da36e19f2ba6d9a5cfa5f797073805383f38f5ad3f385c386d3840ad8c38a5387f38aead9d38b3389b3876aeb338ba38a938f5aebd38ca38c83888ae18393f392839bfafcc39d039c63930b0d939db39c839e8af12391d39133952aea438a938ad38b7ada338b538b23892adb838ba38bf38f1adbb38c238b83872ae2e3935392a3957afb339b439a53923b0b539c339af392ab010390f39123935af8138a038a43877ae8a38a3389a383aae9f38a638b03839ae9f38aa389b385aae24393e392d395cafbc39be39ae3935b0bd39c639a2392cb00f392b391d3944af9b38b238ae3896ae9738a438b03858aeaf38a038b4384dae8f38a4389a38b5ae9b38d238b138ceaef0382e39ee385aaf5a39cc395839eeae7e3120313231f0a5c51db921012375194d204e20591f711b5219c620bb1ccb1aa02cf22d572c1ba4a8374238903895acf23744382138b2ad6638b938b1382aaed238d438ee384eaed638d638db38fbaeda38ea38f3380dafbd38cf38e038c6aee1381c390939bdaf563954396e3914b0423943394a395eafd638d538ca388baed138dd38df3876aedc38dc38ec3868aed038cd38e1385baea638bb38c038bbaefc380e390d395daf353927393b3903b039393f39403963afd338d338dc3804afd338e538d8387daece38db38dc38c1aeca38c838da38aeae9838b038b538aaaee63800390c3949af3e3939394e3907b03d3936393439d2afdf38e138d4380aafd238e238df38e7aed938df38e738d1aecf38c838dc38c1aec438c738db38e0aeea38fe38183907afe238fb38003991af5f3862383038d1ad542d2f2e1d2e689c021bcf19bf1c8224e0195515bc18551c781ceb1cac1dc11e3036f13645363caa42399e394c3937ae843728387e373caecc38d038ca384fafea380c390a39b0af09390e392339a0af2a391e393b39b1af0339033907393aaf5b384f384e38f4ae673645365936baad6837783754371daead38b238b73855af033907391b39b8af053915391739a0af1f391f391a3956affa38f038f93897af54385f385c38b4ae723672366736d7ad7837923764377baeb038a538af3859af0439fd380f39b8af0139043908399baf1b390f391439aeaff738f038f83894af5b385938563813af773661366b3628ae463763374a3776aea8389b38a23857aff738f1381139baaff638083908399baf123907391939b5aff038f5380239a3af80388838833812af6d367c368536bfadff36dc36ab3674adc835ab35d1353da9851ee91e7c1d5d247e1c291e3a1b1a24d524e4238f243225073819382b3890aa163953391e3922b0063313349833ddac30383238273802b05f393d396d3943b054394239623958b07a395a3993396bb06939663972395cb0373657364f3610aeac2cc72cea2c06a8553175317931dfaa6a386d38603818b05339613951399bb0453954394c398cb06a3969397739a6b065395d39563994b0263665364f36a0ae2c2c402c642c1fa7f7303131373191aa59385a384d3810b0463958394439cdb0373948393f39bdb05c395d397639d8b0613966395f39cfb0663694367c36d0ae302c482c842ccba773309c30b630a9aa3c383b382d3806b0413945393039c6b0363942392e39b9b0633956397039d2b06e397d397339cab0cf36f536ed3632af802d322daf2d46a87b3091309e30d4a98f38a3388b3816b0db37023817387faf8d37c137aa37a7ad6a38643867386dac173938392d3920af083822380f389daf24210c23262487a7823456347e34c1ae453970392439e3b18a39a039a339f7b1bd39e839d239ccb1523868385e38e8b06a2c282c5c2c63a93aa58da4e1a3689f92a2c0a11fa108a217340c341d3436ae9e399b399c39fdb1d739de39eb3988b2d139ea39de396cb2a638bd38b7388fb14b2c0a2c4e2c95a9eda249a2aca1a09d2ba189a0649faea08a3363338b33eead97399139813922b2e039dc39e73984b2e539f739de396cb2d338e238d138aeb1bc2c782cc22cb6a927a365a2e2a1a49d2fa368a25da16ea0aa328c329b32dcad97399d398d3913b2e739f139f53985b2db39f539e63975b2c038ca38c73894b13c2ddd2c2c2d6daab0a3a0a2b5a206a0efa1d4a029a14fa2b03244328c324baddc39ac39bf39e0b1763a3b3a533abdb2e439d439d93984b20f393439313982b10430c02fe72f1daa45a53fa6e6a4719ff2a25ca134a08da82a352c354e3545b15539703963390fb4da38ef380339a6b38b2e012f462febac12a598a4a2a42fa17ba68da531a663a004a116a1d79fff99f6a31ba32ea287a42f35593576356cb1dc39ec39dc3959b442392e395039fcb3172f312f912fc1acfaa278a20fa2c19e5ea50ba51fa5419fb3a34ca378a2d29c65a383a222a2c7a2fc340b353a3557b1f839043a0c3a5db487396239933922b41930243058303eadd0a21ba29aa1249eb9a557a548a58e9f68a418a4f8a2d19c77a41ea4f1a3c0a17334a1349b3446b1023a1c3a083a76b483396a399d392ab448307630ae30d7ad03a164a00ea02a9d26a596a4b1a4fe9e3da4ada3d8a23d9d38a468a46ea445a22b330a3369330db18639823984399fb4b8396f39983977b4c932aa32dc3264aee1a4a5a47da49aa0 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - FirstCorridorLightVolume2.asset.meta b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - FirstCorridorLightVolume2.asset.meta new file mode 100644 index 0000000..4987c75 --- /dev/null +++ b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - FirstCorridorLightVolume2.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aa5ad81283b32354aa1fa50a28efae58 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11700000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - LobbyLightVolume0.asset b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - LobbyLightVolume0.asset new file mode 100644 index 0000000..d0d141e --- /dev/null +++ b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - LobbyLightVolume0.asset @@ -0,0 +1,40 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!117 &11700000 +Texture3D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + m_IsAlphaChannelOptional: 0 + serializedVersion: 3 + m_ColorSpace: 0 + m_Format: 48 + m_Width: 8 + m_Height: 3 + m_Depth: 8 + m_MipCount: 1 + m_DataSize: 1536 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_UsageMode: 0 + m_IsReadable: 1 + image data: 1536 + _typelessdata: a929ce2a40297a18562a1f2bc329151e0b2a1a2b95299b20e02b872c8b2be522df2c692d702cd024ca2c2e2d4a2c4625212c382c442b502450272a276426eb22f53063317a30b89a5631dc31db306d21ad31693219311726f631743273311227063285326a31d3270c327f3256319c28cd313432ed308927c8303d3184304a27fc3335342833a3a90f3451345f33809dc53351340833632033347e34df3345241f346834b2333024203451348133202554344e34fd33662467310732ca3193a4cc291a2bfe28e4193c2f7b2fb72e4a24f92f2b30592fa125ca2f3330fc2e0f25a22f3d30fb2ed225d02f3f30372f84255a30a2300630a326392f982f892e382a7d31f431e230f59402326c32883169241b328b328f318d26233287328d31e4252d328b328831a0261c3282328731dd25133273326d312525bc31ed312131b228f23336342b339ca95234ac341234d5a22a3489349e338617103466348833821d12346c348f33992026347a34bc33af20593491340c34db17ea33e4339033eba41f2a532b7329391a832fec2fe02e8421922f0730fe2e8f21f52d142e302d0c21662eea2e7b2d24220a304b30372fc123bd3002314230b0268c309f30c42f3d28e5318a326731fd1b2332813281313d221f32933286319b2334329c32b031b5234a329f32b2319e24293278329431a7233c3288329031fc252d3242325f31532726348b34593337a4283465348133831705345c3434331624f9333a3452334e220e3452347433942007345a3486335e2237347134c93349244c346734cd33d31ddc2a032c812abf1735305730c42f3a219c30ba302d30ba212c304530832f991e3a3064308b2faf1e8830c73015302a1fe73025316c301722b630d4300230eb222032d732b13189155432b732c831dd2345329b32af31ca234d32aa32c131fb206532ab32c431802252329632af31ff2060329d32bc317b226f3285328431fe233c34ad34e833a79731347734b13343241a3452348933182514344a347733112516344934753300262e346234ab339c2230344f34ae3391175e349a34da33e4975f2b262cbb2aa98e44306d30c72fb5139f30de302b30431a2c306a30a82f8a1345307e30c02fb7139130db302f30309a023143318530c91ab730e530083043142e32b132a331309c5632c632ce31ba155832b132bb314d1c6232b732c331531c7332b932c831491f5a32ae32bd31bd156632ab32c331561c713288327531d21520347a34ab3374972c347d34c4338a17093442346c334b97103443347333819d143447348033879d28346534b233839732345334c73395177234a534eb3305a1272afc2a9e298f0d59308730f72fdb93d3301c3160305c149630ce3024302514b130e9302d303d94c5300f315030d9a0113164319030b99dca30f7302230699d0d3287326b311a9c6232cb32d431531c6a32c232d03112218832d632e3312a218e32d032dc31671f4a32aa32b2311a9f6a32c132c931cc95473270328531ac9535348734f233a72235349534ef33a7220e343d347f33de26123446347533fa250e344d346e33f42512345e349d335b9728347334b333a21d6a34c0340f34fa97cb29e8295329329b4b306630c32f5da0ea3041317830ffa00a314a31863043a2323171319a3074a2223162318e30eda42d319931933062a4a5300131013075a4d53142324c3148a48732d232e931e6957632c832d531d615a432f132f4310016b232013305320d166f32c932c531449fa7322833e731829c4b32cc329231b0151c343b34cd33cd2963349e340e343429123427347433aa2a3e345a34b233312c36346534bc33292c213466349d334c2a6b34c5340534bc2b9434ed343434022c2a294829d52898a4612f3d2f5a2ec5aa9c30da301b30a3aaa930d1300f30f9aab430f230f12f0aabb730f330e72ffea9c8300a311630ffa831308730ee2e90a9dc2f3130142f29ac7a318d31d43090ac33329b32b03187ab54327b32773133ac4232a0325831f3ab22326d32303168aa8432c732a23170aa213297322f31caabac33dc33993326abaf330a340c3388ad00345834f3332eac2c346b34d133c6ad4734a434d133adad4e347d34ab33fcac8f34b0340a3490aecf342635353401b0 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - LobbyLightVolume0.asset.meta b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - LobbyLightVolume0.asset.meta new file mode 100644 index 0000000..e8b46cf --- /dev/null +++ b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - LobbyLightVolume0.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8a5a6948b8f79754fa771d8299ec1baf +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11700000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - LobbyLightVolume1.asset b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - LobbyLightVolume1.asset new file mode 100644 index 0000000..8f50256 --- /dev/null +++ b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - LobbyLightVolume1.asset @@ -0,0 +1,40 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!117 &11700000 +Texture3D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + m_IsAlphaChannelOptional: 0 + serializedVersion: 3 + m_ColorSpace: 0 + m_Format: 48 + m_Width: 8 + m_Height: 3 + m_Depth: 8 + m_MipCount: 1 + m_DataSize: 1536 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_UsageMode: 0 + m_IsReadable: 1 + image data: 1536 + _typelessdata: 5a1fff1c98209c14841f39207c1f081e44209f1f401f03211d215e21c02164225422a3234422bc24c322242292216925211d321eec945c25daa0e49fc29ffb22d71fde148d204d9b3b1b9e1e951af521691e3d1f0820e1260a1c5f1c281e3226151c5d1fe494bb277715df1538a03828dd9b349cbba4612841ac11ac86ab6527699da7a2d91c6aaa6ba2da9d2aa0da9d0517da1d5a16e020b11d132139221a23961d7b24f496f822971de020c896d322862c7f2c712b592579aba9abb9a9c4a0bf20371def200318b3242e23e1255622a12500240426f1247a232a222424812477222e23b42276262d1e51207b208425dd9330948b9c10278ca765a856a80a294525b91eca25b99e7723411faf24411f9623641fb5248b25ee1ee6156320cb2495156f1c7f1b4826249ce1953e9ec724dc9e5f9c4aa0762549abddabf7ab5a24ef249c1774246caadb9d47a1841deaa7b420261e4d20259e821df3971b1df69d5b17fe1dd416fe177f170b18fd96111e9c2bc52c002c209807ad75ad05ad92a9f31f341ec520341e5d22d1216023ec204423ea21252401210c218d1ffb207620b2204b200620db217919c213e4184e225a9dc99a4aa181263da8d4a827a90126fe24a62268261024da20581f9821242139223321dd22af22021f7b1cc821b822431c7d1cb81b1d24f59e1da169a093220b9f6d9ce9a288251aaae4aabcab5c223724281e78231b988397f7a0c896f197731de117e21cec20671da3172220ba1d7f1dcf17bc96db1d4797eaa0cc96ea206d2ac62b7f29051ebbac58ad2dad78a55c1f4e206d22b41ffd24a824ec2569206d24ce200224571d2f21d21c8421c9194c20f51c421cf51c18147a9a88997a1afca03ba13fa43b2130a997a939aa17233025cb2557284024a5242c248d25d322ca23761f1023761f1e1f0516801e871f551c06163615881f489c709f7ea0771c529c789fd4a1781fb9aa24ac48aca022c820cf25b2266523bc200d1e58208a24a220cf974120d522871dc0170f1d5c246217cf9d0e9d5b248e17f3a0329df11ddc2a8b2bdb29c9970bae5eae8aae2818141f271da7229f151824c0247d25001dd423f320102366143e20fc1cc81ffa93d21c171a01130f94309a7c9d9d9e959a5aa3baa3d9a4221bb9a938aab7aaa21a8924cd2252270c96df2335244324971c73228f1f1f230c16351f1116821e11165f1c131639958e1c2c9f8b9f89a0871c569c889fdba1881f18ab55ac8cac6d1c971d0b18cb230b188a170e18431d151e8f20b2973120b217821db3970c1dc79d879dc3a2eea1cc9da29df59d379df117df2a462ccf2adc1de7ae36af44af3298b120b41e3c214f8ea625e12512261714b92554242d26ed9abc22e220142257946b1f8c1d8c13a89a8b9f00a05ca124a14ba4eaa369a5df94d1a907aaa7aa7c942d270e24a627e695b024fd2441269a1c6f25de223d26941ca422b81ffc21b81f671f28164b959e1c65a2c6a213a3849c3e9f57a130a3941c9fab45ac99ac5d1c3a25231eef24a0259a972418601da8246922bf1d81254f247022d420e52158247f1dd49d32a0cd225b97e497299de497562a252c4e2a09231baf1cafe8af4b180d222b202a22569b1f2439240a2577a1b82457214a2487a24322f91d9f2192a21b20601b2814c3a2cc9d41a0a9a18fa499a3b1a16da5529eb0aa83a9acaaa79d93274d257a27c6a30e24642102259f9cbe245c21f1242196c022b41cb5204616901f54167015bf1c5c9c5da1dda121960396d91cab9e462388ac51acccacfd241b25a597d8247f29f0a2b1a494a00a2b70228197e421cd2a5024e61d15228c2ca9a278a4dda3972c7617f397299d342bdd2cde2e332c412de3af18aff4af422e08251a246f248ca44022f322751e70aaaf2007226824e4a9caa1e5a00ba135ab84a430a40ea6d8aa0fa56ea678a64aaa21a51da7b1a6d5a982aa85aac0aa3ea937242722ff2452ac2f9ea4a117a3f0ac9a15f815112387aadda307a4caa24dac02a69da513a806ac32a59fa7e9a713abe395989c74a077ab3dac00ac9cac83aa8026531d4b2753abfda855a8f7aaadac53a26aa4631d9faaa79dfd9d6aa0ddad86aa8daab9aba2ad52a6d4a9fba873ad892d6d2d732c48afbdafffaf19b08bae + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - LobbyLightVolume1.asset.meta b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - LobbyLightVolume1.asset.meta new file mode 100644 index 0000000..d189197 --- /dev/null +++ b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - LobbyLightVolume1.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c06fbde891ea2e44aace8c20b071c68b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11700000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - LobbyLightVolume2.asset b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - LobbyLightVolume2.asset new file mode 100644 index 0000000..8819c72 --- /dev/null +++ b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - LobbyLightVolume2.asset @@ -0,0 +1,40 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!117 &11700000 +Texture3D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + m_IsAlphaChannelOptional: 0 + serializedVersion: 3 + m_ColorSpace: 0 + m_Format: 48 + m_Width: 8 + m_Height: 3 + m_Depth: 8 + m_MipCount: 1 + m_DataSize: 1536 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_UsageMode: 0 + m_IsReadable: 1 + image data: 1536 + _typelessdata: ac93881e5619861a151e0a2311206420f320b624922092202b280d29d8282724f22a2a2c142b6325812b0f2c732bb1255b2abb2ab12900243c20c12068227724723086302430119ac9301631a130212354310532ee30e524ae31f831bb317628d3313632b2316f2805326032b031f9283331bc318e3066260430543022313f2a7831a4311a310da95431ca314131a91636310832d030f11fde3127320e328e27c3312932d0318526c431e931ab313427ed31043295316a1d182fe530743031a33d8dd11ee597341a0c2ba72a5a2ae1253c2d1f2db82cd926fe2dfd2d792db8258d2d2a2e2c2de626ca2d2d2edb2db926112fa72f542ff427d82c732c7d2dbc2a4f311631dc306994fb31d931f931ef25fe310d3201323827d931da31c231f525cc310d32bd312f279031d631a8312e275c31b1315331d225a0311031f93112293a3269316a3177a9a632a932b93299a0d231f431dc314d20733187317a3141209331ce317f3145205431a0318431dd23b531de31c53150178932a031c83268a6391a3d23001c9e1cf42b7e2b162b9a22cd2b9b2ccc2bb6224c29e4280e2927226a2aee2aa6291e23302da32d592dbe23f62ffd2fa22f0326412f752ebe2ead279e310c329b31b6229731bd316631d6229331cd317f310e24bc31d531d231d124d131f031d431782559316f316531ba24ad31ac3161315725cc312b317f31c3259031d6315831a4961b314631ed30161dd3303b31bb30b221023112313831712336314e3150319323d53019310c31ac24a7319531713128229d32883101320c972a242327de24c61c002e932dc12db321182f242f042f30216b2e352e342ea31fdd2ec22e712ef71d1a2f5a2f172f9c1c3030403027307e21a62fb42f132f1320aa31b632113280201f324e3200323e24cc31a4319431c721a631b131a531d921d331b231a8318f207d31703156316b1ea0318e3177318920c431a93169313b1eae31cd324e327720bd311d32b331d1230a31f130f230a9230231e8301c31a3242231e6300031a2240431c430d13055206131ed302631f0963a324d320b3235a224264628bf269a17532e902e502e641c812fe72f5b2fa619e42e4a2fdd2eeb92892fac2f472f4099ac2f1430bd2fac9959307e303e301514862fac2f002f8e9c8a310032d9311895c5314332f131de1bc731b731b431c41ba231bc3192313515c831d631973139155631843163312f958e319a317e31cf1b9831ac313331659b883101320232ee167a312532c131439dd830c030c430b596c330c130c9300c9de530c530d1303ca08530a7309e30f496273111311b31451d37327e32c23143a215240725d2229d930f2ff72ece2e32134230a7304b30e8131c303d30e42f9d99463067300a309a9e02305230fa2f4ea35430c2305930379fc62fec2fa52f899eae31da3164311e9ee73148320c32e61b06320f323232911e0a320832dc315215f831ea31c0314b95043169313031caa16331c5316e31d79b733180317e317b9be1311232c7314822a4312532c5317b203631f7303d3181251d310231e5309423fb30eb30c630e0214f30a0307630e1961b3197312a31381dec313d323f32801d0923812343211c9d3e2ee62d152eb3a15630c930623092a3a930d130703058a4f3301c31b6306ba49a30c0305730eaa5b7306a317d30e8a4ac2f6a30be2f4ca4a431c9316c317da409320532f7315795f931cb31ce31e79b3c320732ed31099c493247321432149c673182314131dda10f32d232cb31009cbb31ab32043208157132453271321129e231ef31e531b9291d31a2301a311a2acf3158317c312c2ba63186318431352b9b30e8309130f228cc329c336a327e2b2d33dc338933642ce825562658261ea5f32c722c702cbaaa392f772fb52fe9a9832e982e7a2e73ab1b2f0d2f392e83ab1f2feb2e152eceaa7e2f0b2fa22e6ca9182ef22d552dc6a906301d30722f8cac0f3009304b2fb4acaf302d31573196aa83307030703066ac8d30b9301d309aaca2306630d62f2dac913106310d317aab52311231f1302cac0934b6333634d4ac0b314e31873012ae93303631c8319aace330ed303e3183aec5304f31b130f4ae70301e300f30d2aee33206323732a4af66330d33b63219b0 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - LobbyLightVolume2.asset.meta b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - LobbyLightVolume2.asset.meta new file mode 100644 index 0000000..653ac71 --- /dev/null +++ b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - LobbyLightVolume2.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c5fb4f72ff52028479bca2f2614494c0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11700000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - NoPointsVolume0.asset b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - NoPointsVolume0.asset index a87f837..4d31f41 100644 --- a/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - NoPointsVolume0.asset +++ b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - NoPointsVolume0.asset @@ -6,7 +6,7 @@ Texture3D: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: QuizScene_Bakery Volume - NoPointsVolume0 + m_Name: m_ImageContentsHash: serializedVersion: 2 Hash: 00000000000000000000000000000000 @@ -16,11 +16,11 @@ Texture3D: serializedVersion: 3 m_ColorSpace: 0 m_Format: 48 - m_Width: 59 - m_Height: 24 - m_Depth: 44 + m_Width: 20 + m_Height: 8 + m_Depth: 15 m_MipCount: 1 - m_DataSize: 498432 + m_DataSize: 19200 m_TextureSettings: serializedVersion: 2 m_FilterMode: 1 @@ -31,8 +31,8 @@ Texture3D: m_WrapW: 1 m_UsageMode: 0 m_IsReadable: 1 - image data: 498432 - _typelessdata: 481f8b1f991c09199920fc21f121f7208b2015215a20d820ca1e371c5117fe1d5c1fb51be017b41ec222c320cd1fa12252258f204520c524df241120601e7f2342255c1e7a1ef1232025551d2a1fe22428270c1fc2203927f425841be020ac25bb1d0000da1ce01a000000002b14000000000000eb18000000000000e81b000000000000a422000000005f230927008000002a1d7a25008000000000d22400000000c8164f2600000000b3107726000000004a1f2c290000741d2d25192fbc1dc21f66243a2f6c1d00004d1e922900000000ee1f6629000000004526952e000000008c1f082f0000000000007a27000000000710f52500000000131f3c2b000017171f21df2974150514751fd125f511c50de61cf9204b092215841e17214610a617c51ef9207b1439199d1f7421be171f1a14208821a018841a2f20bf21ec18ed191c2069217a1840191a204b21c817a2191d2020214118f119472058216718a61948203721441890194820472134184a192e202721d717c81921202e214918b81a3a202821fb18831a18202121d4184d1ad11fbb20ac18e119201f25205b18d618b81ec61f0817b5184c1e551fb6160919d31ddd1e0a17e618511e111f1f17da18a91e731fc8164f18991ee21f0c15a616ab1c441d2d14771cb21d041ded15a51e1022082333207a1c4e207820981d2a165918b61470156f18e3184b171a187b1f2521c5214020de211a20d520d7216d1e311bec19cd17cd1dbd190817fa19d322c41e1f20812289243321e9226925f622db2050236b233819500fe11a0d14000000008a0c000000000000d21c000000000000391e00000000000005210000000000001b2200000000000010230000000000002d2400000000000099240000000000007824000000003a1c562800000d1e1425752f2b1d7a20f223d62fa31e0000a618f6270000000092153528000000003020452f0000381cbd219f2f051c00000d0e62270000000000004b2500000000a31e482a00000418df21ef2856180e156520f424ad140815ed1d2d211c0e8b18b41e7b21ac0a6f1966205d22fb16d91bf1202c23981aa51bd1208022351a091c2621c822701aee1b4321da22531ab01b692115233e1a811b4721c522fc191d1b5121c7229319b01ad620ef210d19491a9320ba21bf18f619542066216b18421a3b205521a3180e1a0d200f216718e219d41fe2204718f019bd1fce203c18a119a81fc3200318b318251e8b1fb316b918731e811f9a165519aa1e0b207417ca19b71ef51f4a186419c71ef21f62170118601e7c1f5f154e16881c1f1dec138c1c861d691d8515331df3201122591eb81b93204121a91c9d19e11b3c1c3d185a174719651a9716221e19215c22251ff61fd52067225b20361d121c0e1db21ae11b1d1c771c4919b91f472035211020a3216b225f24f7222b20a2214124ae2025194616101dde14000000009118000000000000381b0000000000002b1f000000000000cb20000000000000de210000fd0ace066d23e30000000000252400002c14d30de324200600000000e32400000000191d912800006d1e28242c2fb61b54206a22932f6a1e0000f818882800000000b614a7280000bf1082200e2fc40e561bcc21302ff4190000ab161e280000000032147b2500000000ee20072900009e183f221128ca188715a520a824441575163d1e4421ed111a18911eca218410f91842208f22ab16dd1abe200923c419f31b4c214f23ad1a9a1c07221a24bb1ba51c31221f24ce1b4a1c23220724161b051cdb219723871a0f1cb32184237a1a521b4721ae22bc19ad1ac320de210b19cd194c2055216218c619602096215c185f1a54208321b918831a4f208b21d418891a20201f21c018221a1e201621751885190e200b21df17061a4f1f67204b18b319ea1e1e20f7178819851ee91f0618f3180f1e461fa3167117dc1ded1ec8144a171c1def1d2b14861cf21ec71e01167c1c42213822b71ca218361b921c0e10a116b318461bc610fb17fa19d11c24169a1d63212623001f851e40210623c71f0d1b231bde1c45166214d018351a8f0e0118581a831c72124320d52350257b2039203e24f925cd2053103c068e199806000000003e1c000000000000291c0000000000002a1d000000000000261e000000000000f120000000000000db210000710d2012bf234e02360f00003f24760300000000b22400000000591c4d280000861d5423e12e181c091cca21612f1f1bb419291f792b26180000ac22a52d0000c71e1624102fb11d230f0221cc2dff0d0000ad13ac28000000000a1ab82500000000c02121280000d21bb322f526901b041af0214c25651930195d1fab21d5107c1a6c20bb22c6123a1c9c22f324e819ce1d2d2357251f1d641dc322b624ae1c4c1dd422b524731c501d99227c24501cb31c6e224d24a11b401ce321af23c81ae41bd4218d234b1ac11b8f212923131a5b1b4b21fe22a919e11aa020d2211919731a50205421b0187b19791f9f20d1179c198d1fd9200018da19991fa6201718fb181a1e0220f6160f17601d101fd5145f181b1e6d1fdd152f181e1d5f1e7e15c9184f1e621fb0164f19081f2820f81681189a1f982068150516cf1cc01d9013561bc21e871f4815d01bad202221c71bb11b431f59203016ae1baa1f08217b170c1d3b20ad21571be41c3c20e321861c2218b51cd51ef4110000c812011a00004d121a1a791d84099c18091e6020e612d41e6423ea249a1e161e1622a1247d1e080e0015a21ba4065e00f318461e220000007517bc1d000000000000af1d0000000000000000000000000000322000009e1a2a173723a9138a1d14219c27ce1a961c2e1cd124141800000000512400000613801d1528a50e2f1d4324342e101cde1a1322882e411a0000841d2e2900000000921d22260000690b3f1c132c130900001f1874280000000000007124000000007c16192300002c0cb1211526020bfb1b32235126071c7b1598207024251594162b1de01ffd0f40194a200f22ac12571b8422f5242119b61cce222a25ea1b881cb622d2249d1b071da322b924271cc31c87228a24991b311c6a228624b01a551c00221224ca1a651cd021a123e31a561c5e211923ac1a7a1ce4207022c31ae61b9020c521db19491b6a20bf216619f41a352056210e19dc1af91f0221fd18421a8f1fad207618541a201f5b209a1854197d1fb42099174c1ac11fcd206718c619341f7620e817dc19801ef01f03186519e11e2520ee169b179a1ee01f5914a4181d1edd1e1816151a211ddd1da31068192f1e4c1f3c1846196b1d4d1f981380187b1dba1fb811bc19211e472074145a170f1c2f1f440f000065164f1b000000000000b717000000007c184f1d00004a15221ec820f212a21eb0233a25721f281e56232025a61ebb0b8218131e42049810ac1afc1f190aa002f41b7c1f510100000000001e0000000000000000000000000000a41e00001c1bae1934226d135f1d91213427721a4d1b431c2e24e015000092104d23000000000000f62300000000a61aa126000000001420282c00000000071c3e28000000009019ab23000000001a1e5a2a00000000d419322600000000000023210000000095197e210000031794220126fd15731d3e2322266c1d1217bc207424a3166716211cfd1e111024196c1fda21d2124e1b3322d7241b19081d5d237e255e1c5d1d4a233725951c2b1dff22f424571c551c56227824081b101c03223a24981a011ccf21fc23631ae91bc721b823331a1b1b752127237819311b2421e5226e19e21ae3206b223319f61ad42061222919831bbc201e2276195e1b9620fd215b19ae1a54207621db18061a302053216118081a801fe0204d181b1a901fa3204418411ac31fc0204818d019751fc12025183d19831e2620bb16d516a81d941e6d138f15c91c981d0b12e81a331e0e1f3713fe19151f1c209c180e1c1820f22071179a1c56205d21fe1bbe1c07209021d319a51ab41e452159151912e81a0b1eae090000e216241c0000dc0db81a9f1ec8068d19ec1eb4217217bd1e33232a25901f581d4a22a024d91df912871aca1e3c0c30160e1a702048101e04ef1b7e20100200009b156d1d0000000000000000008000000000131c000000000000d41d00005d172710152028045716891874219503000000006a210000000000007e2100000000681a692400000000cf1e2929000000004e1bd125000000002216f4200000000006207228000000008e19d52300000000670ddc1e00000000ff184c200000ee02c3209d248d018e19a51daa20001400000019531d000000001615e21a000003196f1e7e21610d381c3022b424f218aa1d48235125991c8f1d32233025831c381dfe2220253d1cf61cb922cc24ea1bb01c86228c247a1b2e1c31222e248d1af41be021f2231f1aec1a732148235319801b3d210223aa191d1be82067224619101bc82043223c19781b9820d9216e195b1b7220c2215919ac1a3b207221da180e1a212058216718da1a7420e721fb187e1b3f2026215719d51ab41f9520df18541acd1e35209a182a194c1ead1fc8163118581efd1f0815ff147f1c321dde10fd18421cef1c16105917f41c0e1e3d151618941c871d0a104d14c719631cfb0c5e176d1be91d79100115fc18b21d190c0000c0125d1a0000000000003017000000003418a01c00001c11861d5b20a50b191f94240226f71ebb1f2a250d273b205d105c16671d50080000e519961e000000001619b81e00000000bb0e881d00000000000000000080000000000000008036110000321d4b001615960cde1d930000000000dd1d000000000000272000000000000055200000b611671cfc22000900003822e6270000eb123b1e9c245f0d00001a1bff200000ba0f67228e27870c2d17771d4c235f110000c20f7d1d00000000ed190c2000000f0e86203f24130ab019d81d65208c130000f31a5d1e000000003718af1c00001119ab1e6221700b581c2c228f2436198b1ef5239f25671df71e1c24d625c11de71dda23a725e01c931d57233225861c531d0723fc243f1ce41c46225f24aa1bc41cde210a24551bb81c85215623211bc31c68214423311b511cee208a22661a581cdf208122511a701ccc205122541a941cab202322871a3c1c7020c6210a1a751b6120c6215119c119cd1f3021e1179c1ab11fe0206f18ee19d01ff020f417751a361f7e2054184a19d31e36207f16e0173c1ec61f9d149417511d321ea7145c183f1b4d1d280e2e19531d051f3418a018fe1b141de0114413651b4d1d000c50136e1b5f1ea50cac10b318581da70700000000d817000000000000610f00800000fb152c1c0000b70b961cdb1ee704851e8924f525f01d651f50245626ac1ffd0a35156f1c0f030000df18e51d000000003c16441d000000000000271c0000000000000000008000000000000000808a04320c571c0800be090000621c3e00000000008e1c000000004e10821e000000009110052000000a1afc1dc0223315fa10a4225426610f5c15031c0021820eea14ad1a7620220de6161e2106256e14031b941e9f223f150000ca16131f00000000c51ae02000000a145821d9240c10fc18211d7020e5120000321ade1d00000000f615241c00003418351e6c2139095a1d55237925931a821f3b2410264e1ee21e3824fa25c81da01ed8238c25911d051d57230e25131c9e1cdf22e8245e1b831c92229f24121b2a1c53227924861a1f1ccf2102243a1a271cc521cb23281a1c1c81216223fa19111c69214d23ea19541c4d212a232c1a141cfa20f122d119de1b8320ef219c19c01a8e20de21d018d219581ffd201118d219371f8820f8174219f91e93200d17f419c81e4a2029185719761e0d20dc1679183f1ec11f5e151319771ecc1f17166a18f91b7a1dbb0e0819501dcb1e9a174618d21b221e65129112c91a0e1df90b1012501b851e060c2a15d519af1d3a0c00009d12281a0000000000002817000000009219a51d000000004b1d11200000ec1d8624b625ba1dae1fa12480262620e1111214b61c7a090000ba14de1c000000006b14d11c000000000000d21b0000000000000000008000000000000000800000ec08c01a008000000000011a000000000000711c000000000000221c000000000000501d0000c418691d8a212c10b314cd210625e8116a179f1b822021110d18591cc0209b118f190c224025d4160a195b1f95230c160000341b272100000000ea1c3c2100009c126521b4242710d616fa1a2b20141200004918131d000000009c14131a00005115171d90200e0c0f1c4922d124c118f41d0024d125c01c981e1724e3255a1d6d1e03249e25371d401d84232b25301cf71cf222d724ec1bbf1cb6229824921bb71c8c228824631b921c2a223e24081b851ce1212824d41ad01c6d219a23221bb51c41211923fa1a5b1cee209022551a411cd3206d22301a421cc2201122311aca1beb203a22aa19991a9120d221b418451b6a2071211519b61a42205d21b118c81a7f1fca20d6183b1af51e42202e1882186e1eda1f0715ac158f1cd51d7c124019e31cb11e690f6c1ad91e3720f1187218541cb01ea61173147c1cf81d250c8410b71a871d65075c0ff619211d880300004c16521a00000000000020170080000052199c1d0000d401101d241f8700851e43249a257d1ec22080248e269c210000ee01181a000000000000e408000000008915981b0000000000000e1b000000000000980800800000000000000080000074066f190080000000009019008000000c00301c00000000db106e1b000000004714b91c0000fc15061e00223d0d12193723be25a816e916c71b302032104512eb1afe1fe70a3b186622cb2499140000b81e4b22000000006810121b00000000c61cd52000006314b7200e2407108a18cb1bf31f481200008b17261d00000000851588190000a814ea1c482078086c1c8922e5244e19791e2424e3252a1dc91e1b24c525821d0d1eeb238825e91c4c1d852344253a1c3e1dfb22ec241b1cc21cbe229f24751ba51c82227e24261b891ce121e423da1a271ca321a723281ae01b3f210123ba19e11b3521d722ba19061c1021b022bd19171c0b219b22b7192e1c05217a22f619ef1acb204922d818461aaf1f19214c18161a971fd8201518091a801fe9200c18851a191f79208e183519b61e3c2040166918e71d871f6b159d154c1ca41df21176154d1aec1cb60bce18971d521f1f1710173d1b551cb0100000bf18911c000000005217571c0000d40be714c5191a0200000000fb17000000000000c11200000000b7165d1c0000c20ee01dd11fd307fa1efc248d260b1fdf20a0249327f32100000000521a0000000000000000000000002a14ed1a000000000000661c0000000000006a10008000000000891100800000830e131900800000ee02331a008000000000ec1900000000cb0d701a000000004a091d1c0000f2145a1c86200d0c4b14d9209124651127121b19461ec60af510a619321e9e08991924211b2416160000571ccd20000000007914071c00000000291c80200000d31658208923a6129618671c70205812000056197f1d000000004214861800008814331d5120a786641c8e22ba24a618bb1dac235b257d1c1a1eeb238925c81cf01db6235b25bc1c671d74232d253c1c841d2623fc24521c351df122b224141cda1c88227b24771bac1cff21ff23301b831cb221a623d11a911c53213823c51aed1c50211d232a1bee1c2d21d122071bd31c01218a22be1a1e1cbe201222c119881b9c200e224319561b5a2099210619351b05201521bb184c1a00202f213918361ae81f23214118ca1a25202f217518131a6b20a721a2178d18231e5d1f55154d17031b4d1d270d5f19291dab1ef617be175f1cc41deb107a10491b001dd6070000f618ea1c00004e0a3d170a1c830100000114a91900000000000025150080000086179e1c00000000a81c1b1e0000791e9424d0255a1e1d21a0245126f521c4100f138a1aba0600000000e81000000000c916571b00000000840cff1b0000000000003a08008000000000811400800000de0038160080000000005418008000002f0cd61a00000000b714051c00000000000042190000f70d361c2c20390569199a22b7241a17f6148d1cf11d760d6c18e71c5f1f5f10a41c4c2318254f192617ca1c3b20be1000004d18c81b00007114a81c9220240db7174920d823bc132f1ad11b821f741400009b17ad1c00000000ca13251900808714f71c6220e189ef1ca322db245d19051f1724b825991dab1e1924c725821d691eff238f25341da61dd0235525961c471d4c230a25491c431dc9229324321cf31c75227524e51be31c1d223224a81b961cd921c8230f1b291c81214923491a3a1c59212223621a321c3f21ef22561a511c1321a322661a321cf82054221a1ae71bd5203c22a219f01a8120e221d918ff1b552070215d19351b36202c21ef183e1b911fcd20db18521afa1e542096172119011ef91e9315a717a01da71ecf14eb18641cfa1d630ed119a21e18206518f7161c1b161d3a104413ee1a1d1d21093412a91a401e070800004e1aca1d00000000e117341c0000000000004317008000001014e01b00000000ba192d1d0000d9144d1e5c209d0d7b191223a6241018f414a2183b1c0e0c000000003514000000008d144e1a00000000890de01b0000000000003213008000000000a714008000003912e41900800000ad09451a008000000000a8160000000062011719000000004016e11c00000000a51dec200000b4178022c8240f15b715b01b9a1df80d2316001be71d5f0d601a03204a2278170000fe18631e00000000a9174b1c00001f14ee1c6d20130c2d19d12093230b15a219a71df220b114a1091a1c521f88040000ef17d71a00001f156d1daa203b8b4c1d69238025c219871e1c245e264c1d971ecc23df25591d721eba2372253b1db51d782337258d1c811d2723e424641c3a1dd8229e24181c151d92229224f71bdd1c3f224a247c1bea1c042205246c1b981c90215223cf1ac11c42213c23ea1a6c1d1a21d222bb1bca1cd8206b22b21a0b1c94200622a719791b2220642139195b1a2d2062215a182a1b1f203f21ce18691a082032214c18f21a5b1fb120c118601a1a1f722018186d187d1e1f20f014d017fe1c341e9414d519201d8c1e6913df1a811f3f20ad19c914651cb01d370a00008115351900000000b618931c0000811387179a1c5b060000180f271900000000000020150000000015184f1c0000260cbf1ce01ecd0405202e2584261d204021e325fa2769225e160418b51c230c00000000ff130000460e54154c1ad20a00000000e7190000000000000415008000006204711a0080000013144319008000001d0e99190000000000001e1800000000ba049d19000000000715291c00000000d21c7c2000002f174522d4244f149411651efe20b80b1b12cb1c211f58092218c820ae239c140000181ad81e00000000d314321c0000680f001c162049088d14121f7f222d108b19101cfc1f5b130000c119c61d000000000b18a01a000011169c1d7420328bae1cab22bf243819581e00249725261d581eeb238f25261d3f1e77233625121da31dff22bb247f1c051d90226f24de1bc81c392239247e1bcf1c13221b24441b501ccd21b323841a471c78216b23571a1a1c42211823f719511c0f21cb22471a151cf0208622d219091cba205322c119691cc2204d224a1a1d1cd820af22c019e81cfd206d22b81a081c232035216819241b3d1fd820b018ae1a381fa0209318061add1e5120911733192e1f742018164c16ff1c411e50122a1b5e1eef1e5914da1d0322bb23911e881ca821af23c41cc016e61b301e01127014891bfc1d230d3e0e2e19b21c1c0500009b12a71900000000bc02891700000000dd17841c0000030e161d851f4d07fa1daf230e25dd1d9c1fa42475267c2090179918e21c570d00000b10e7170000ea16ed1c321f7114b418e721392448185518dd161d1d950f0000ce14821c00000000b0127619000000004712d01a000000005514341b000000000b18441d000000006f1ec52100007a170f238325a6155d1c6d231426f21b5318cc1f3b22fc11d415dd1cb41f6e0d3e196f206e23bc162b199f1c4a20dc126d0bc11ac21e7603d807e41bb81f45021d0c491fc5223d0827182c1bd01f471100005e19da1c00000000ce14721900806815341d31206d8c561c6022762415192a1ec3235a252e1d2c1edd239625191def1d93237925d11cc21d1023fc24831c401dee22c0241d1cbf1c7c228824701bf41c2d2244249f1bd21ce621f023481b691c8d2177238a1a091c1021c822de19181cde208e22f419cf1bb22054229119d31b89202f229419b51b5020a82163195d1ac81f32217218ac19fa1e7a20c41739198b1e24200117e119de1e7c20e217ad1a381f92209218c71aa71fbd2073182f19ce1e42205e16f7172e1dbb1e1b14e21b0c1f6e1f1f160d1f39235e24d21e171eea227424941ea41c12209121cc1b221d74214e232e1dd81dd0204f22be1c921b3f211123931a99188b1ce91eeb13f1141a1f2c21a711671d1823c8244d1dd6201025ac26b3213a205924d3252620681aa91bbf1ec7137010ed1adb1fa40a8515ad1d6d20171300003c20d22300004918d519a91e800f0000c019d91e00000000a519311d000000001f17aa1c000000002f15491b00000000d717c61c0000fc10891d8a203509be1a5d2482263019681efb24b127041e9a19291ede20c6157718a21e3b219a14d31904238525a5189f1c24248326251cf718991cb11fd115e314ec1c6420e61083100b20ad226f0e5318581dab2094145c190821ef230c182d193d1eeb2050141018f51e0a21920f721bbf215524e3183d1df3222c25791c921d28233025ae1cfb1d55231f25f01c001e5b231325df1ca71d1b23db24821c341d8d227424141cf51cec212c24a11b6d1c26214123af1a0c1c6220fb21e219211b19209c212f19401b1b209d212b19051c27209821bb19ed1b4020a1216d19071c6320982184192d1b5420c021d0189e1a14204e217018a91ace1ff8205f182b1a741fd2200d18951a7a1fb82082187f1a7d1fae202c1822191e1f692073160917d91c901d76119c1a5e1ef41e6314b61dcd213823161e7d1dd321a9233d1e6a1d1a217b22031c821efb227824361f341e1b23ca24aa1f531ee722b524d51e3d1e2421bb22221b1d1d4121ee22481abd1ea3233e25841e29216f241626f021a01e1424d625c81ece18da1d5e20d1140000d119281d0000dc144b1c381fb21137156c21542429146319621c9c1f8a1200000817fd1b000000009c160b1c000000004814941a00000000b415221b000000008c17621c00005e0eb21d6c20ef05fe1c5a246b26f71b5e1f3625c527201f2d1b841fcd2192158f191b2036225114f718ea227725c817741b2b222725e41a3719ed1de9200d145917e11de620ab102a1960206523e815ee1a7f1e6f212a16e418a92071231d1781197a1e1d21ed138518c71f92215c0da31afa213c24f7170f1d65228a24091c221d6c226d24061c5b1d5b225a241f1c4a1d4c224d24121c3c1d4b225724071c3a1d0a221c24051cd31cd021d6234a1b851c7e217123f41a9a1c5c213623f31a8a1c4321f822ba1a5c1c2321bb22571a1a1cf6208322f719f11bcb206622a919c21ba22026226c19b41b7d20f1216219971afa1f54219b187a1a0d1f86206f187a1ac81e50204018fa1a6c1e482094182e1c791e2420e618ea19421ee31fee161418131d261ef213c21a381e551ead14a21ddb212723151ee91c90212423711da61d3c216822aa1ca81e47237e24601f2e1e8123e424491f861e2a23cf24f41e0e1fab214123bb1c621d64211b23111b0b1fe1234025e91ec420aa244e265921891e2024bf25991e1917b61cdc1e1d1300003018ae1b000074132a1ce21e5e107015c721672443148018e11c9e1f3a120000fe17521c00003b158e1c621fc20d0a16bb218f24c213091b5d1d6d20ab1400004a1aae1d00002f14a91d9920140df21a9423c025bc19851d3a2475266a1d051a061f3c21d81409183c1f7a21b9125f1b50244826311a7b1d32247726741d7b18fd1dba209e142318341fba216114021a1a22b0246319a61ca0223025e41cb81c4622c324a11c181d27212723ae19d71c7c227124571c341d0023e824d01c8a1d0823e624cf1c801d0423db249f1c861ddb22c524901c6b1db1229824521c551d712261241a1cf51c0b2226247d1bd01c8a218a23221b351c1c21d1223c1a151cc1206f22f0190f1ca1204922c919201c83202422c419251c6420e921cb19ca1b5020d1215519f51b4d20bb219019261bef1f3521cb182e19ff1df31fcd16c5185f1e2b2021160019341e33202416bb19521e28208617da19591e0e20db166318bc1d1c1f8514ed16f81c151ebf12611a111e581e3c14f51d8a22fc236f1e611cd3204922bb1c4c1b381f9f2069192f1eb5224d24ae1e5c1e7623e5247f1fd71d75226124391e601c541f07216019671b281f1c2106180f1ba1209f22a119541c951f3c21d418431a80212224e8189818a51cbc1e65138515751c6b1e2110841c5123e5242d1c011ef5237a25fa1de315661c5c1e7b0f0000c814be1a00009814441b891e8a0cdd1706210a247f154218bf1c721fee100000ea194d1d00003018e81d7b202310211de424f226ac1ce11ef5242d270a1faf1ad51da52000155216811d8f2071112b1b66238725531aa71e41248226771f431c622396259a1c421a7f1fc821fb16b11b8922a724701b7d1c25238225a81ca31c3722c9249d1c521c842084223518271c9e210a24541bb81cdf2132242a1c011d51225e24341c1e1d4c226024271c6b1d46225224521c0c1d35224624071c491df9212324111ce81cf5210b248d1bba1cb121ce23241bcd1c802182231e1b141d5d214623621bdb1cfb209922ec1a611ca1202a221f1a751b3b20bc211b19eb1aff1f6b21a418021bcb1f2221cc18b61aed1f2a2198187d1ad41f222171189c1a8b1fd9206f18431a081f8a201c18551abb1e68205618d01a1b1f832060189219411fb62000178b19d41e0c201f17291c691fc020fe186e1c86209a21291c371ddc2036226019171f902237240e1fdb1f2823ba248520631fe522a52418206b1e1f222e24351e961c1e207e211d19081c00206c21a017281cbd20942275191d1cce1f0f21b115541a811e9e20e5117316ff1c5e1f8d0c7719641e4820f212381eaa229624df1c001f4d23fd24ac1e89158b1c211e2410b215351cc31d4310ac1c4523e524411c7b1d46231225eb1d9c1cf91f72211a18341da2244126411d51208b254d275521fe1fbb24ab26c420ef1eb124c7260a20d11ed623a625131f991cd91fb1219f16011a9a2202252119391e8b239225a21e7d1cc222d824781c6414821b1d1fe61043167d20fb228d14081397197e1d430dc8088319851c1802cd13b21c321f7d070d1a8c20a1225018881c7f210324101c131d88210e24431cf71c94210424081cc11c7221b023951b031d50216423db1b521c43217323a61a201cd720da221d1a391cdc20d422421a581cca209822511a241c9d204a22e7191b1c6220ff21bd192d1c4520cc21d619241c19208521ac19041cf81f6a216319231c04205d21aa19111cfb1f52217419921a541fd6208018661ab81e582033184b1ab31e51200b184e1a8d1e3a203a18b21a901e0c201d18c3184f1e132094158618a01dde1eeb14ef196c1d991e7316e61bba20a021311b0b1d58203f21a019011e4e220624661eb81e9c2247240220d11e76223a24d81f0a1e15221f24b11e8b1e01215522de1d431ea421c823521e141e12222c247b1ec11ffe219a23f71dae1f1423a824a51fdd1f65231a2594201d2091237b25ca206620a523772510217820d823732555216c20c723692556212e2090232f252a21de1f5223fa24c020431f2d23e5246220dd1e3523f0240c202e1ef6221025491f791e7c22cd245b1f621f18234325f91fbc1e0f22ca24221e3f1e1021e5227f1b0a1ec4228a24541d781f85231d2516207a1f012439250a201d1fc2231525951fda1e95234c25351fe11d9222b724ef1d781cbb210424221cda1c1321cc22d219d21c722188232f1c681de7214524131d3e1d9c210b24b31c5a1da9211124921c661c3f211c24441b821c29217223521b551cf720f822ca1a251ce020ce22431aa11ba6208e228c19b11b792035227c196f1b602022223219ad1b4b2000224119ac1b2d20bb2141198c1b27209c211019ec1b14207d215019281c002041217519861bb61f02210c19aa1a621f02216018d119691e7220a317de19681e49208a17f319591e4020a517f2194e1e1c20ce1792190f1ef21fd7166e18751dde1ef11404160a1c4c1de11250183f1c001dea13851d9421eb22ba1d911d3a212023531e991e29239e24af1f361ff022dd243320cd1f2c23bf247d20691f2523e22436208b1f3c23d2243c20531f3e2302250f207a1f522306252520e31f552302255120ce1f4523ee244520d61f2a23cf244920a91f0d23cb2423204c1fd622ac24e11f1c1fac229d24941fbd1e8b229a24161fd51e14224624301f0d1ecc210c24471e161ea421d8233b1e061e9d212224151ee81ed2211624e01e771ece212f24871e2e1e6121dc233d1ecb1d7121d123d91d8f1d5d211f249c1dac1d96210e24ce1df61d83210b241a1ec61d97210b24e91dfa1daf2126241e1ee71dfe215624e01d961dc92148248f1da81d3a213e24781d3a1d392103240e1d3a1d4d210e24e81c2a1d6b21f823a11cfc1c81210224301c0a1d7621f823051cbc1c7721e9236b1bd71c5021b123501bb81c2d217123211ba61cfc201923061b8a1ce120cd22ba1a691cb9208a228a1a471c9b205122381a361c73201822011a401c5220dd21f119011c2d20ba219919221cfd1f6a218b19d11ba11f24213e19351b251fdd20bb18251bd41ea4209718f01aba1e77207518ce1ab31e6b204618581ab21e7120f917641aaa1e75203218351ab41e5f20a0176719301e1520a316ad17fe1b2f1d10144c19a61c721d2915511ee72143238e1eff1d2522f6234e1ed31e7d222624461ff01eb7227024651f201fc2228824981f601fac226a24dc1f041fa6227924611f2a1fa42273246f1f7d1fad228c24aa1f861fa2229524b31f651f73227724921f191f112235242a1f3f1f0d224024361faa1e09223e24a21e4b1eda2136242d1e341ec1211f24001e271eab211624f31df31d9a210a24c11d561daa213b24161de81c23216624bf1ca61d0d21cf23391d891df5209f230a1d5d1ddd205a23cf1c651df2204123d61c471de9203d23ce1ce51c0d216223751ce91cee2044238a1ce71ce3203423891cd51cd6203423781cfa1cc52026239a1cd61cd3204923671cda1ce2206323591cd91cd6203e23591cce1ce12024233d1cb11cdb200b23021ca31cd320ec22871b961cc820dc220f1b5e1cc420c322791a6a1cb2209e226b1a461cb4209a22371a4a1ca52086223d1a151c9f207622d219161c7e204b22d319161c58201322b619291c2320c721b219ff1bd31f48215d196e1b331fdf20fb18ec1ae91ebc20a418021ba01e82209a189c1ab01e70206f188f1aa01e62206618261aa41e5b200918201a751e32201b18c8194d1e1a209717c219091e0420e317dd19f01dae1f8817bb18621d771e021581181f1d141e0615721dad1c321ad81180215f2200243e2177232f230124f5230a25342216232825bd26072201239d26b02822229c2388289c295321f6225829fa29e320c0239c29992af02007241a2a232b04217324e72a0e2b87213d24ec2a932ae91e3f245c2a5a29291d0f230629412971219d26612960283e25812a5b283725a3248b2cc0245f24e827c12e97239724fc2b2731001b3b201829e8308a94f51bc8256130bd0e341ddf257b309c16e01dd925a130b919921cd125be30001aa41cff245e312d193e1aea245c31d1119e1dce27db30fb8e7022a22958318b12e422d92a86321a1fe02177289431371f6a2157257c301c1f1e1eb0248d2f1a1ccd1a6b22ca2e23196111d51f192c1010be186e202a282a177f18ea1fa5238a16b80b131e4521b9099414d31e1e21c91209194f20ed2177178e1aaa201c22f3189a1aad20ff21fc180e1a7a2098219318d5195e20552153184f1a51202721c418ee19402012216518091a422001217918281a41201e219018e2192b201d215c18df191a2019215a18d9190820092156188119b71ffc201418b3195f1fb9202518f0192f1f68205118ca18611e2120d416f518b61d0d1f11170319e01d231f2517ce18f81d4a1f1f1792182c1e591f211649183c1eb81f621550174b1dbc1ef01500003f142c1100004a1f7f2239244c20ae201d23522484216221582330243222a123d02216243a247325b223e5240a26cb265f23e5242527af270f23f82437277a28a42263249528e628052464256e290129682423269e29e828aa25062870292e28f12474274728e426c724272871274f25a525fb29cf250923bc25092c9b228421ad26be2d1a214020de26382f4d1e1c1fb3250a30de1cc11ced257530f919da1cc625a4303c1a951c9225b0303d19b91e8626ef307f1b7d1fbe26c231b41c2a187f256e312d14671b1c26d4301012a41ea6261d31f818161fc02575310d1c101bb125563189184d1c6a258a3086190a1c2724c42fc2190e1c07247b2e801bfc199623752bca1978180a228a2742184017c720f023b416bf17dd20b622ba16dd180321c8229118e11a97214923f919061b8021f722e619331b8221f7220c1aff1a6721c922c719081b6721d422b519711b7221b822f0198c1b5621ac22cf190b1bfa2001225219be1a9420b0211819491a4c205921a918f219102030215318c019d61f03212e18b619b81fe6202718dc19aa1fe2202d18451ac61feb2078183d19021f6d2052172c19b21e36203a179919ba1e3520fb177319ad1e1b200a180e19a81e0a20c7165418261eb31f7015cf17681d8f1e75151512291960186782491efc217a233b1f971eef2253240620ed1e85239b241520842067238e243221e62229246725d7235824d0234525c124d2244224ab2500255e257f240926b9253b269e24d4252b272526c424982628274f26cf251c282b27a925ad2524280826b324c1257428132516245c25b1289624bb218c26b12a9f21ff1f9c252a2cf51f411dcd23ff2c021d691d9524b72e141d191b7a24ce2faa1ada1c77255e307c1c721c5a259f30d81bc81e5226f230811de41fd725a431121ee119f92475314618b01c4825cc306b1a4f1f7625f230011def1fd6247531c51da91a2224213108194a1c0e2421307b1a041db823a62e001c1c1d8624602dba1c1e1c6c243b2a9d1b9d19d1227e263119d1196c2137240d19251a9721fe2356190a1be0211524361a171bc721d7230e1a4a1bda21ae233a1a341c38221324101b201c56221524d01aca1b1222cb23531a001cd9218123621ab01bba215023061a951b5921c322d519eb1ae020ed213a196c1a7e208521da18f81944207f216d18fe193a206e2171181c1a2e207c2171180f1adb1f09216818001a9c1fe2205d18cd19671fad202318a719191f602008185a19cc1e3c207b174219701e1d20a517c018341ec51f3d16e6174c1d8d1eda14b116261d8b1e9514e3089e1ab11a7c009d1f7d23a4243021ef1f05240c25bb202f20da23e124672183205b246f2593211c225725df26ce231c23102591265724d622df2470267b2392232d25c3264d240c243325c3266e244b24512654281f252524cd250c286b24861df91cfe1e89190e22b0242e278321cb220226c2280c23cd216a25fb28f021ec20e024b629632146204925022c8e20ce1e1d25482df71e9e1d7f25d12e831dbe1c4d24c52f961ca01c4f257130681cff1e3026e230781e8020d3259f312920171817259e311a17801e4f24d92f471d971ae41de42c59195b1b78212630f919671e74235e30611d471cc0244f2f301b901cb624962dcb1b0a1d1c24e12bbb1c6c1c03249528271c0c1c2624de26991bfb1ad3222425101aa21a4322c3240a1a4d1c06232925f41bdc1c762340255b1c3e1c0023b9245e1b731cdf228b247a1bbf1ce0226724d71b521c6a222124041b411cda217723c91a0e1c9a212f235b1ae81b7721f622151a771b1f21c822be19771aa220e121cb18811a9120bf21bb18a619db1ff9200718a9199d1fe72009183d1a0b200b215c18ee1915203b2125188019f31fe0208817d119a11fc320cd17be18661eb41f3a168919ba1e1c2094177a19211f4b200917e018e31e732093159416281d4e1e8114fd15191d981d1309e81e35224d234420b51f0c236b24992093200e24f424a721bd202c243325962170200e2431250b210020d8229624d91f052032220b24471d102120245925c12015223d257d2650220822f8250b28db221b224b25a627e821b41f502180230f1d8921b224cf260a21a92144252c28a221032166248b2790208d1d0c1ee521ea1b291ee82312299c1d4a1eaa24b82b151edf1e4f25172d211f101ec024202e1f1ef41d8a25e72f581ec51f82269d30bc1fad21d0267c317d21751fea257b31e51e2b1cc823a82f881aef1e7a21a82a291c66174621ff2e1c167d1d68243c2f751c731de422b32de31cd71c3b243e2c681c3f1d66240d2a131d401d5f24a327011dc11933223725ea18461a082084212d17a619a621222459189d1c1c235d25c01bc31c2d232d25de1b1d1cb822b424e91ad01cd9229124f31bae1cc2228a24771b6e1c84227124111b9e1c302210243c1b5b1cc4216523b41aa61c3d21dc22061bcb1cce204a221b1b521c8f20e421481ab11b6b20c9219819dc1a4b209721fd184e1a492077217f186a1a4c2080219318f71a68204f21f718491a1b2048216418781afe1f09218518201a851fac20321867198d1e1d208d17c7186e1ef91f01165718de1d491fb8149a18d51e3c2036178e146e1b511c9202cb1a8b1e15203c16701e7b21ee22221f51208f239e246521e2203a241525c221bb2026244c253e21c51f0a23b324831f0d20492201248c1dd52027247f258920ae2110257b262222c121e72509288a22f2221a261828d122961f8c221b25321d5a22dd24fb26f721a521c1255b289e21b320c824d1271420281f39209b22341d021f802442287b1e391e6e25a7291b1e4920e925982b8220121f6725502c561f9b1e1025922d0a1f611e28250f2f9e1e772002260330612029206d25a8301520201c0e24fe2eb21ad91dbf20d728d81bc318a722092e2218031e7c24fc2d641d731da023632c311df41c7e24b12ab81c6c1dff243629521d411ebe246227c81dff1a12238f25fa19061c5d2076210e19941b21229124421a861dba23d725f41c7a1dec23a925d51ce01c722317252a1cdb1cf122b024031c571c5a2257240c1b151c05221e24831a2e1cbf21d9238d1a331c94217523951afd1b4521f122251aea1b1a21b622fa197e1bf4207b22a919da1acc205c221419ae1aa9201f22db184d1a852006229518791a3b20a621b518531abb1f0b219918ef19a91fed203b183b1a0120002171186e1af71f07217e18481a951fe9207a18a719261f92201a1753188d1db71e94148817201dca1ef2141f138c1c9c1d3a05581a361f9f20e5162b1d01216222451c231efd217723971dcd1f0e236b241a1f6720a623012552200c2002238c247c1fd51f04236b24231ebc20152472259420ac2107258f2649225922c625cc2720232223812578274d23712025233225751e8023de241e27412354228e2564287a226621e024c42711213020b5205a22f91d16204f24f627e71f561f5625c528821f16203d25f9286a200120a925272a7020b31e6024c12a541f531f9b24502c02209c200d26a12dd920f31f3425922e3d207a1a38231c2d59191a1f7d21ad26901c7a1a2924742cce19fa1e7b241c2c411ec91f9e24512a6b1f001ff224c728921e8c1f57255c284c1f221ea224fa26ac1d531842224d2544173f1bae1f0321a818701c4d22a724d41ad91dae23d025ff1caf1dd9239c25b21c301d83234325361c171d37230725221c031d1823d624ff1b981cb0228724541b3d1c18221924a41a161c9c219923671a761b4d212423be19921b2821e322b8197d1b0821a0228d19e01ace205c220019d71a9520e921e018031a22207f214918411a112056217518221a072032215f18fb1a6a20cf21fa18a51a68207e21bd18221a531f8d205f18d119611e252026184e18f01d701f69153e198a1e68204a16e317de1db41fbc155b14071b691c6d04721adc1d701f1916d71c47207e21dc1b5c1d13215b220c1c6d20fc2256240820bd20ff233125a620c61f2023b924141f51208a22dd23851ed7205f24da259d205d2271250627c822b422982666289e236022b225d4272a22171ff7206922db1c3a22f224c5260522c6210825b0276622232054246227891f7e1dac1c301efa16601d001dc11f7017d71f34248b27eb1ead2034258128eb206d20c7241c28e820262079250829a8200b21f825fc29a92127215126eb2a5921d1203226262cff20ba1ca124b22a091c6e1fa8212f25c61c841d98248e2af21c8e209825f7293620f21e6a244f28ea1e601e842486272a1e1a1eab24b527fd1d291c01246426b21b3c183f225325e016331af01f95217017ba1c25226e24241b2e1d27236c257f1c9d1dc023af25cb1c681dc723a4258b1c671d8e236d25761caf1d87232625891cca1d1f23de24891cbb1d70225e24691c621de121da23111c131d94215723aa1b0f1d4d212023801b871cf3207f22951a671cd0206322471a381c9e203e22041a9a1c9e20fd216e1a011c51209b219919181c5d20a521b919621a252063215f18991a2b2044218418141af91f3b211318fa19831fcb2018180819911e34202e166e18d01da91f111528180b1eb91f831672141b19ed1a8100c61a9e1d9f1f061615205f2252246920ab20a124a825f72139210a2506263b222421f1246426a021871fa6233225111f0020e82199227a1db1207d24a725cd2092217c25d92618229a22a9269328c823cf21f6254328b3215c202023ac24b91d6d210125ee262c216f21b9242a27a321ee1f1f246326e31e8d1df21c301ef018251d011dad1f93182c207f254e28c61e69218d261c294f212c211426c928a92109213926eb2895216521fa25d428fa21c3202c2647296720e81ee0246e28311eb5165c1b651e3511981c051e5c201618ba1d26246027a61cc71f6025ab28dd1edd1f582593289b1f381f0f256828c71e891fea240828131fe41eae241127781e3f1c9b230b26e51a65192b2002225216921dab22da24351cbc1e43246a260a1e9e1e7a245826d71de11d3b24e625051dc71de0235925da1ce51c1523df24f21bb91cce22a924891bb51c7b2279243e1b6d1c21224224cf1a421cc521da23501a071c97219823f819101c73215d23e819cc1b39212c238f19721be320cb224f199e1bac20a2226e19b01a2c208e21c518031b7220e82100198d1a372060219418d919092033210118081a821ff0202118fe19221f9f2030185719ac1e4120b6164718771d2f1fc5140c189f1d0f1fbe1411123f1a761c6602811a561e0f205616e21e342219246f1f3b20552442251b213321cf24f2250e229621032574261d224f2056240a264a20da208e237e24311fc0210f25b926b9212722eb25a027a5224722c12691286623652168257a274b21bd20c1224e247d1e9e210925ce265a21b9213325b5272e2256207924c326c61f771d1c1d441edf173f1c6b1ca81e98161220a5244427111f6c211026ae288d212321752644299f2104215226e2287d21ca203826e8281b2137214e26e328e5205d1e05250928581d1519fa1cd11f8514e71b801ed920ec17f71d2024de26001cb01de5236726ca1b221eea209d22b81c2f1d20244426fa1b0d1fd824f027061e601e2424c8265b1d371cfc22b925b91aa71a2b202e217618db1c8a22a824791bf81d10244726041d501e2e242c26371de81d3424f325e11ce11d1b249925c61c3d1d5b230a25411c101dcd22a3240a1c021da6228124fd1bdf1c5b225924a21bcf1c19223024661bb01cbd211c24151bbf1c6721b523091b5f1c002128235b1a0b1cbb209522c419a41b90204f2273198b1b932010226119cc1bba202b22ab19dc1a5920a421e418b81a28206221b2187c1add1f442188185e1a641fcf208a18d319d61e4a20a6179c18171ef91fc014ec16ce1c101e2714380c291a7a1c1e009b1ab11e8c20e0152920752333257e204b213f257e269d223b210525282605223d210d256b26a82134208e241b261120ac20f3224124881e4421a62455263e211222c7257527782230230b27e0287d24ee21ed253228d121b41c0c1f5320a614ee1d3d20ac2133171420f223f525321f421e84235726fe1ced1c851da61fd116ef1ba11cf11ef015412018253f27e81e9822bb26f22878221d228827a3299a223f226427572903233e2101273029bc2105219e262a29db20572045252a286a1fab195a1e9e20b914e01a5c1fea214f16c81e2e247626a51caa1d3b23b625c21bf81aba20df22c6188a1c0523a425fc1af21d472470273f1dbc1de22339260f1d741c91221e25da1a0c1bd820d5213a18e01c2023e6245d1b8b1e35244e267f1d841e62244226791def1d3d24e025e71ce61d1e249b25ca1c901dee235525701cea1c6f230e25b31bf41cd022a824c31bf31c5b224c249e1ba81cdb21b923091b4a1c85217e235c1a531c48211d234a1adf1bfe20bf229d19a01be4208f227019e11beb208d228219fc1be420792294191b1b90202222f718b11a3620862195188b1a2b2056216318ed1a0d204021a518191a821fca202d18e918801e3a20e41586188e1d3d1f4d15fd166f1cb41db014000071156d180000fd191a1d3a1f7f156520af233225cf20c5203e250d2707222b213225ac26f2211421cf2420266a21a41f7224ec25641f7e2081228223881e2221b0242e26f720ff216326202864222523e62731296a245b21312659288f211b1c441ed41f0f14411d2d209521c9151c1f9523aa25ad1ebb1e45244526c01d7d1d781e0c20bc15e71c351fb52081161721c025a52747205c22362714296b22182214272829ab22f121e826eb288022cd21dc26ea281a22b6217226b4285d21ca1f6c241a27a71ec418771ec220f0134418551f7c225913f91dbf237626171ce81d3823b9250b1c121dc7211624f11a2f1d06242426101cf81fdf246a27251f5c1fe9242827991ea41d2a243526801c2a1b6e20352166188b1d6f23ea24081c291f41243626041ed81e3124db258e1df61dea238925c11cef1db1234825bc1c7a1d642318254b1c461d2723e824221c2b1def22be24f41bca1c86226e245f1bb51c0c2208241c1ba61cae219223e41aac1c66213c23cb1a931c3421fe22861aa11c0421d4229a1a7d1cde208722461afd1b8e2017229519e51b802011228419881b5420ca212819c01a0e2046218718861adb1f3a216018671ab71f20216218ee19be1f0e21731787196d1fe1207a16b417d51d3c1f7e1500002318321a0000fc1a441e3d203616722003247625ed2048211e257d266022e220002529268d21f220b924f3253421971f5724ca25201fc62037234a24891e6e20a1242d265920a621a52547271a220222a526c42897230b21c5250f283c21f51d1320b420e3154c1d7420e1218915451fef238325d31e981e38241626a21d081e861e8220a416851cfd1fb6208216c120b2244d26fd1f4f228d2687287522462292274129f422072288273c29ae22d3214b2660284a22c320f42563289b20761fe024bb277a1ed8189c1fa42140130116c71e242200111e1daf238426711bf81c8b23d525f21a671dc6214423661b951d1d240226601c1b1fca243b27451eec1e36248b261c1e0c1d0c23c325191cbc19121fd420b8166f1d21232a25bf1b601f58247e264d1e2e1f87244426081e9f1e55241126901d7a1e3524c325591de61dfd236a25ca1c671d682308254f1c351df022a324271cd11c6c226a24af1bb91c1f222f24671b811cd321cc23ee1a3b1c88215c23641a0f1c52212323041ac11b1e21ea22bf19af1b0121a9229619da1bef2089229919c01bc6204e2286194f1b7920fa211b193b1b45206921f3183c1bde1f0e21f418011b2e1fbd20b2181c1b931e4d202a18c31a0b1ee81f96168a18ed1d0c20db16160dc718ea1a25001a19ba1ddd1fae141320842277247520d820fb240326fc21af215d25b9269f2283215f25ec2608226021ac240e263321fa20b023a124611fd72099240926d1204421b0255b27b0211c210f26f827bc2139209325c92743206f1e2421ad217317b71e1121d6224418a61d07232225251dad1d53238d25d91c061d2c205f218815901dad208f21b2170721c1259427272013223827f7280c22fe21da26b9284d22dd21be26d3284022bc21cd26d12808223021a526cd28df20a020862526280420031b5d206e2242142b18b21f6c223d12361ed9230e266e1ce71ddd239f25201cf81cdc21bf23aa1a3d1da9239a251b1c4f1f8624e0268d1e901e8e2403279b1dc01d2f242e26961c641b7a2077215418b11d88230c25231c601f7b249e264d1ebd1e6824a226911d111e12242026ed1ce91db4238125cc1c971d80233d25751c691d2c23e4243d1c171de8229d24fa1bd41c87227d246e1bb01c27223a24151ba21cd321d923de1a901c62216123a21ab11cfb202f23b01af51ccf20bd22ee1a4a1c55204522ff19fb1b5120f6219419161b15206c21f418ff1a15206a21ca18f41a27204f21aa18c61ad11f33218b18911a5a1fcb209718e019021f88206217c618c61d9a1fc9142f17a71c0b1eb7140618951dbf1eba0bb81e5b228123d31f821e31220d244b1e4a1d1221e621b11b8a1f3b239c24c21efd20522474259d206a1fe2235525c01ec520aa22ec23121f36207b24c325032009213525ab265e2144229826642801243f219825eb279721d918c81b3b1d8410101cf61fac207914be1f5e24e025611ff41ffb249c26e81e5221f7238824c91dd920962593276a20a32125264a28732134217b26922853210b22bc26a3285b22eb21b0269c284f22cf21bb26a828312259219126a32866210a211d26b7281621311ff6241227bc1d291edd229224911b391e9424e026e01c8a1dfc23dd25e61bfb1cd0212724d21ac01d012401266d1c521f7a24d7265b1eb11e4f248526b71d6e1c2024fb25f11a3c1d3f2182226e1a1b1d66230a256d1b211f65246026171e1c1f8e247126f91d6b1e56241e264d1d0e1e1924ac25ea1c9a1d74231125781c291dc5228a240b1ccf1c57223b24661ba11c16221f24fe1a621cd021da239f1a3b1c8a217d23451a0d1c45212c23e419011c1521dc22b619cb1be320a3228e19f61bc82061229019581cb3205622f319c81c8b2065228c1ae41d0f208622091c731c27208f21f819561b791ff820eb18c01a2b1fcb209f18f719111f7f2054178719081fbb2052163718611d251f6a150000bb19cb1a00003e2022244025c320c7201625d426e721b420e3242e26ad21a920c824f4255d212f2078248a256620b31fe1232c251f1f1c20b7222524be1d1a2014248625b41f7f20e8246726bb202a21842521274e227420b124c5268f205e1ba61d431f48133d1c65201f21ab14901f94243026761e04204d256a27a71f052180234024751d7d21632635284f21bd221527b1289d2246226e2724298222a022f7278529282317220728852968226f228227362996220d22e3260f294722e8216826c328cc21ca205e255927e91f6d1fba232125711b6a20ce2470278a1ff6205f25e52773203b214125f427fc201b202225df27d31f3a20be24e1272620f21fde245927031f351d1124cf25141cbd1daa208521ea19321d7e225f241d1b561eb323a125521d191e83236f25c71caa1d64236925701cf91d5e235d25c41ca91d1f230c255b1c2f1dee22d324101cf91caa229824a71bc61c65225924361b8d1c09221624e01a411c8e2172234e1a0a1c1c21c722e0199b1bb6205f226c19551b8b2029223a19321b5e20fd210719ba1b5620c3216619fb1a4c20ee21c818f21bd71f0e217119301ae61e65202618821a041f9d205d18771a001f9a206d18081a1f1f992094175019071ecb1f13164618241db21ebb150000dc19811a0000e11f7323af24d81fbd201224762574218920c923e324e620d92027246f258221e82058245e251721f11fe4234f251f204120d222e223ab1ea420002555267d203c22cd256427e922d422b025f4276023b1215e254227582189214e24fe24e41f1621a4258027d920df20c725d327c8203d2058259c27b81fa421a5247025681f98216c26632855210222fd26e028e521e8217327412936225f22c2276329ca2233220b28c4298522a22206286529b222f82195274c295d2215222c271c293a224e21bb26b7282121ea219626bd28ce218c218a26ba287121b420902612298c200b21ea251428e0202120bb25f4271c2016204a25a42720201620e524a226ca1f261f682449261d1fa71e6624f8253f1e021ef7236325631d5e1eb3238225b51d221eca2385253d1dd21d9b236325e41cda1d94234225d51cbd1d6a231b25a81c7a1dff22ca245e1c061d66226524df1bb81cf1213224431b761c8821c123bd1af81b0f21da22e819871b962039227919501b5b20ee2137193d1b5520c9210f19f31b5920ec2171192a1c6820b0219619ec1b022082215019b31b851f2e210e19dd1a231fe0208118611a0c1fd5203018401a251fcb203118e319391fa7203b179819ee1eac20df16fd18ac1e6220d5162000ed1ad81b04005c1ef42258240c1f2120eb233b25fc2015203d244725d02067206524a625702170206624b5252b21a8206e24fd255c218121cd240d26de215a212325a226ee219d21662548277522ca21a62552279422d121e525ce279c22f92150260b28b422e621a6265e28df221422b8266728d2224c222927eb283f23f5224527ea28382371226527f928232350248927f7286a24ad22a12738294e238b22d02762294023fe2105287e298e22f021f92746293f224922e6277329e0220422992767299522b12174271229aa2118215827d7285c217e21b926b928ee21652126267128ac21fa20a325c1279a20ab204d253e2751209d20f124152776209c209d244b261120081f43245b269a1ec41e1e249625e01db31d7a230f25de1c9c1dfc220925cb1c421def22d424451c4d1dbc22b4243a1c5d1d9e228524201c401d76226724c81b471d4f225924d31b221d142224249c1b991cbd21d823d11a581c91218323701a5d1c76215023781a461c51211223561afe1b1821c822d019991be32088226b196d1bb6205f224b196a1b9f2038222e199d1b9a2011226e19ea1a4c20c321d518851aa91fd1207718ab1acc1e68206118431b701e7320aa185c1cb81e5620fc18661ac61d3a2023174718891d8f1f7f159609111aca1a8001511ec9226424d21e311fb22331254a20ea1f1524fd249c203720172448250721d01f0a243e257f20322012246625c520d9209524d2257121412124258726e62159229925142765232822ca2580271523b921ac25892796226c216f2513275122e720b825b327eb21e1200726f5279d21d12189265928db22e6211f27b7288922e6217c270029f422b722c927092941237b2212289b298c23582204287729da22e0212d28b429ad2296213328a529f421f82189271e29b322a6217a274c295722522189271529852118212d27d6285c2147212627f728c621f820b626da285e217c20b825b627772001202325d8260b200420a524982648202b1f45242c26701f971edf23b4258f1ef51d6e23f8246d1d961d102308253f1dd11d462315250d1dcc1d3f230025081dab1d2f23f524c31c991dfc22ce248b1c711db122a724431c341d5a226c24011cd41cdd211f244b1b821c54216423af1a0b1ce920ce22fe190d1cb5208622e419131c92204c22cf191f1c79201e22c3190f1c5f20e9218f19d41b4920bf215c19051c5120d6216419471b52200122c718ce1b341f642003190a1a031f6820c217691a801e6d200718f119411e4720cd17ba193d1e1520b6169e18cb1d0220e414e618dc1dbe1f2816800a9b18c418d8022a1ea3225924eb1ec41ef222d924c91f341fde23d224322080201d2458255e21f41fe8233b2593208a1f5c23fe244920c71fae23ea2441201a20032431259a208d20352497253c21be208b24a6254121a721dd24a026582268221b25b526a62228215625e726ca2173217d2542276c22ce21ec250f28d8226e217426502818226d21d22694287922bb21f426a4285a2200221c27db285423d8215d27e6287a221821652707290122a421df268928552290211627f228a3222921cd26c528f021e62051264d2827211d2001261028622057203325ad27fe202520f124f5278920e41f152594272620a61f8b240026661f971e1824e325ee1ea21e47242a269a1ee11e2224f325c01e7b1e16247625cf1df11d52232e257e1dbd1d2023df24e71c841dcd22c324a21c3e1d78229124541c301d64226f24231cfa1c3f225524f01b0c1d2e223a24c41bdc1c0a2226247a1bc51cc521fb23121ba51c8c219823c11a881c32212423761a711cd4208922351a1b1c6920fd21bd190b1b08209321d318bc1aae1f502184188b1a821f1b217b18a21a8e1f0f218b18be1a721f06219e18611a151fc5205e18131ab61e79201318d719611e4520ff17061a731e2c203a17cf18cd1deb1f1715b1181d1ed01f4b16a0182b1ed01f9e11401df7202622861d331f4f221324ac1fe91f4823b524aa203820a3230a25cb203620a3230d25ba20f11f5a23e32467208f1f5623ae243020741f4923a2241420ed1f1b23cd247320f01f7823dd243b203020c0237425b32080201d24a525cc20ba205424af251b21e32084244c268e21b1206624bd2666213620bc245e26ab202320fb246826a5200f213125fd26e4213a206a256627ec204820db24c9269020ff2083257f27f6213d2048255d27c220951fb924b6264f206c20b3249a260621e920fc242d27a62122217d24eb26e4202e20ec241d27cf2048205a2445268120bb1e742462262d1fbe1efd231626ce1e181f0624e725901fb31e2123f924931ebf1dc422a9247a1d671d55225124c41c951d08225724011d8b1d2c225524a81c5f1d20225224831c201d0e223e24291c091de9211824e41be51cb221d423881baf1c4f216a23f11a5b1c1421f422551a431ce420eb22321a351ccf20b422001a1b1c89206322bd19261c6e200622cc19251c3820c521ad19221c1b208b218b19ef1bf21f6c215219751bbc1f472100191a1b911f2821c318d61a4f1fe62096185e1ae21e65204518731aa71e61203c18231a6f1e3e201d18131a351ee01f1e177b184e1d751fbe143a18821d8f1f6e155f095418101ace02b41d7a212023eb1d9b1e82224e24f31e471fd522942457208f1f5023c6244c20911f4a23c1243f20ed1f2123da24562016208723a1244c2034208223fc247b206920ca232625b320692007241d25b3205320da235725cb20902006247925ed209020d9238725dd20a220f9238725df208f20f02386250d217a20d8237925f620372099235825bb20bc1f552322253b205b1f122301252120a41f092303252020981fd7220d251a20af1fa122f3242620c11fc22214253e20f81fea22ef248720841ef0228b24ab1ec91f5e231e252620ef1f5e236d251e20e91f42235f253720861f0a231425cf1f671f5c235025941fc71e16230925bf1ec01da422d524a41de81c34225024661cbc1ce2214e24721c351ded215224ab1c481dd6213324a91c9d1df7213124b71c7b1dd3213924871c601db221ed234a1ce01c65217e23801bb71c09211723fd1a561cb420bc222f1a2b1c8a206722d319e31b642039226619041c56201c228019b51b4120e4212b19731b2a20be21ff188a1b13208b210e194a1bdb1f4c21c918d81a6d1fff2097180a1b771f1921b8188c1afa1eaa204c185b1a041f9b202c181c1ad91e742003188d19701e462072173019241e20203a169718ff1d30204015ba189f1c6b1e9b160000c613ec1500008b1d5c21d622ac1d7e1e4a214923031f9f1f6323b4245520891f4423d6242d20f11f5823d3247520c51f3a23dc244e20da1f5623dd244c20c71f5723ff243320d61f662310253b20d01f682307253820ed1f6523022539200e207723fc245220b51f3723e0240e20721fcc229124ba1fe61e8b227724f71eaf1e32225524a71e7f1efa212724601e081ea821f323bf1d0d1e64219a23981df31dff2084236b1d341ee4205c23901d1c1ec6206a237a1d241eda207b23ae1db31d1a21aa23451d371d1a21dc23e51c571d4421a523171d9d1d5a21f3236e1dd81d90210d24921dd91da6212124931d2a1ed9215424e01de51dcd214e24891d891d852130241e1d351d4a21ce23d11c3f1d4f210524a11c611d76210524981c5a1d82210b24581c441d75210324331c071d5d21fc23bc1b001d4121c9238e1bd21c21219423251ba81cf7203123e71a831ccf20d222901a5a1ca4208c22541a431c88205922141a201c6c202722e219061c5120f721a019cf1b2320c2215919db1b0020822145194d1b931f3521e5182a1b161fde20b418271be01ea320b218151bbb1e86208d18f91abb1e7d206118ba1ab01e792052184a1a6d1e56202118a519571e31209d16ec18931d991f7d15db184b1ca61d3d160000ea1494160000281f0722a4239e1e501e60223d24321ef91e77222e24551f661fc2227c24931f831fd0228f24b01f861fe1229624b31f581fdb22a8246a1f801ff622b524771f631ff122c0245a1f561fd622ba244d1f6a1f75226224461f621f29223524091f101f24223024a11ebe1ef2212b24541e621eb9211924e71d1f1e9121f823931dd41d5f21af234f1db61d23219423331d841d1221cd23061d411d0a210c24dc1c701d0b21cb23f41c3f1de0209423c71c751ddc205423d11c471dc2202b23a81c181db22030237f1cb31c98203023251c761c83200923df1b711c8220ff22d61b911c84200423ee1bb31c9c201a23041ccd1cbc2049231a1cdf1ccd205723291cc11cd3203f230f1cb41cd5202b23e71ba81cd12011238f1ba61ccf20fa22491ba91ccb20ef220a1b9c1cc220d622d51a921cb920ba22a51a831cb220b6226f1a871c9d209222751a6d1c85207d22501a5d1c6c205722191a301c44201a22da19081c1720d4218519bf1bbb1f5d213219241b241fe520b018d31acb1ec1206218c31ab71e94205818691a8b1e79201e18561a811e572029181b1a5f1e51200218041a561e3920e617b3192a1e26207c176319f41d022060179b19da1dba1fe31683185e1d141fe814af19ba1dae1f9f17a11e021d0e1a051bb323112257248e235c26be236d248226a128fa222b249b28402a61235624222ab82b82239c24932b5c2cc9229824472ccd2cb0230225b62c0d2dc9231125f52c192d3d231d25002d292d43245325102d442d1123fe252b2da22d2329c82a722df92ce8283e2c752c5a2c092aff2e502be42add27182fca29a228eb26243038280c264828f830d3240422a3251831a120371dd02404314f1ce91e0f254f31e71d2320dc247e31111fa81e5c2475311f1d431f7e247131901c061dfd2387317619531d9f24b231f8174b20f725e8316d1a6f215e26eb31361b2c211027b831d21841228c285132891aa823382ad732831d8b2357284d31c61f931cc924a32ee019761ccd22cc2a9d1a6b1b84208d257f194b190c20d121d917a417cc1f8821c5152b1a8b204722a9186b1bc82097229a194b1bc22064228219241bb62032226519e01ab22027223119e91ab7200d223819691a9820dc21c0187f1a72209921d118491a56207b21a9181a1a2b203d217018091a112017216318f919fa1f02214218a919d41fff200918121abe1fdc203e18211a751fa4205f18ac19ef1e6020ed170219611ed71fdc16d718431eb61fa116c7181d1e851f6816f3182f1e991fa316de183a1eec1f6416d8186b1d791ea216df14c2168a16fa0b70207522fb230b212a23ac2394241f2425254a24e524b4256e270824e22403281c296b24882572293c2ab1240e26d22a462b8224f325db2b292c69247525602c612c6d250127cb2c8a2c8e252127e72c992c5d27ed28182d6b2ce828b72ad52cab2be2288d2b242c142a2428232c4f2a992808286e2d512883260428032fbf251a243f273230a9229c211e26a5305120d02080261e31ff1e632066265031611ec920a8268d31181f1a20d5258d31141ed91eec247631351c9d1d2c258f313318de1dc325cc31f512731eab25df31eb14df1f7c259d318e18ce1f9325a6319f19f91d8b2594315019991da6253e31671ad71d64268b302a1c431d4625e32d6b1c131c0224112a6b1b621b4c22de25ee1a031c132262246b1b721b3b214b23c81aea1bb821dc23df1a1b1cdc21fd23e61a041cda21fe23a21a6f1b86216d23091a521b5c21ff22d719911b5221ea22ee19be1b5821fe22f519a81b1f219d22c8196e1bbb200c228219ca1a55208321f018421a292054218d18491a12202c217b18111afd1f12215318e819d01fef202118151ad11fe420401895197b1fb020cd176e19311f7a206f174919f61e58203d173819d41e3920261762199d1e16208617d4180d1ed01fee151418861ded1e8c141516b11b1c1c77080d1f0b23652428201c216824fe242b229e229c245c25b5238b24cd24f3252a2588262425872655273628f6244626c9280b298425e926a929bd2913268627472a5e2a7126b127252b872a10279a28532ba82af8275a29912b0b2aa7284e2ac82a5c29b128fe2add29302865281d2b86287e261928442c5f26b62438273b2d7d243223a726d52ec12246212b264430e020f121772606317e219221e926783127218e212427c0310f211f21c526cc31602063211226ab3138205b20ec25d331751e471fbc25f231161d581efd24c6316f1c1c200b25bb31a11de31fac25dc31831d2b1fef248931021d1d1eda24f3305c1cff1d5725e42f9d1ce71d2525e52ccb1c8f1c5b242d29ea1bd71cbc237826451cfd1c8823c325671c3e1dfc221825b31c0c1da022cd24621c751c4e2284249d1bb41c71228e24e71b5b1c60227024121be91bfa2109244f1a0a1ca7218a23541afc1bad218823251a1b1c73213f23511a461bf32069227e19e01aa620ed211819651a6b20c321a6182a1a52209a217b18cf19322076212418ea19f91f14213718e3198a1fca2032187419521fa7209f1757191b1f6c2050174319e11e4b2035170919ab1e3d20c1163e19c61e4a202e173519101e551fb11604183f1d5e1e7b140000fa193b1b00803c200e2404250d219d20ce24cf25a221ff20a3249b251a224a226825c02681238f244226d12791251a25c12532273b26302640256e26622743272526b8273b28ac27f526a1286a28242815278e28c4284f2825289f29e6287e274028b629fc27d62649284d2a31272026d9280e2b8726f8243328e42a28251624ea272d2c4c244423a127812d8a2393229f27642fea221b23d627c1305f2380214f263031a12181219326a2317a21c9202c26cd31a12077211126db312121dc20d525f6314a2024206a2573314f1fbb1d98240931e51cd020f424b1310b20ce21a925ae31f5203e1f6c257e31301ee01fb425ba30ba1ed51da5246e2e3a1d321c1224fb2a861bad1da8246628541da31d752409274b1d9b1e1224d425041efd1d7f239325741d3e1d972395258d1c8a1cfb220a25a01b8a1ccb22bf247f1bcc1cd122a324ca1b6a1c5d2244242b1b251ca42194239d1a101c81215f235e1a1d1c8a215a23541a891b3e210023b119881ab0201022d7183f1ba72000222b19bd1a4b209021ce18631a1d2069217718631a422070217718361a0a203a2141187a19ec1e442058170719a21e32209a16a6183b1edb1ff915fc18861e25206716011a1d1f6b20e217f819021f8d2080173818a31e4a2010150000dd18fb190080061e4f22fe23401e9620d624e925cb2150211a253c266a220d22302575263823e0227025cb26262431236925d5263024ec23c82553275524a324672640285625a12520279228662675251228662947266026e827532956273925ff26e3289125e9245a2762294e2504251528cd297d25fd239027d2295f244421de2539298a21ff214f26c82b7a229321aa26932dc921af225b27862f08233122fb26a83083226521f1267731ac21b120a526d431de20e021e8261f32d921b921ff264b329d21dd1f8d25d4311420b521ee2566311e217a217f25fc311021ce212426d6315e2100202e251b31831f951efb24c12f2e1eb91ebe24e12c501ed71d8f246a297c1d701d5824a1272e1d6b1cb6236026cc1bc51ee123f1252a1e7f1ed4231626bb1d1b1ecd23d725371d1a1df2222425491cfd1c0123ec240d1c061dee22e424021ce61ca722b024d01bf91c45224c24cb1b721ccd21d523d71a781c52212123a01a951ce2208422aa1a501ca3202422261aec1b8d200b22a6197a1b8320ec213a19d11a8020df21c318bf1a6b20be21b718c81a4f208321a518641a122044216018431a0a2010213318d619721fa020aa176e19a81e3d20fa165b19af1e3220e11658199f1e4920dd16a119861f0421de170000d01ac71b0000cc1c7a20c721081c882056245025ca215d2116254426a0221622ce252d2785236323782613289024522375263328782461236e2641282424b7233227d62870248924e727192927253f24ab272029d32416255628b529c8253724be2752297e24a424062884291425c2242428c0294625cc23ae27bc294424cd217426ef282f2261223b276c2afb227022c727132cdd22b7227b27702d4123ac22c4273b2f3523ef21a627af3069225221ee267331d221c9217027fc313f226f221a272132f32231202e25d831692017238e255031282377213226ee318421d62130268131ba212c1ee8243030f81d731ef024b42d3d1eb71e9424a82a7e1e701ef2246328221eaa1de524ee277a1db61c4724da266c1c821ea32430271c1eeb1e902403274d1e3c1e54246726801d981dd723b525c71c461d5b233e255b1c841c5e229024551b1b1cdd2139246f1a2a1ccf212224681a061ca121ef23141a081c6f218123171abb1b43211e23bb19861b1721c9227819221bea208f2216190e1bc3204e220819a61a9b202922bd18cc1a6d20db21c018201a1f205a2148180e1a2c2054213b186c1a34203c216618621a0a201e214818331ade1f0b2112180a1ac41ff9200d18cb19a51e2720a016d318d51ddd1e4a140000ff1b9a1c0000681c7720d621071b38201c241825ea200f21ec241b269b210922ab25fb26c62238232f26c4272724a32388262d2873248623c4265c284624b123ef267b288924d42316279c288f2429246727de28ba249424ec273b294425d123662724294724d92425288e2982259b242a28cb293c25c6236727b92979242822e7262129bc221d24a727ea29ca2493230328a02a40249c2384275d2b53240d23e727d52cea233622d7261c2ef9224b22fa26f02f1023a222162805315a231f2309287231fe230221692666314421ad237426f33088239a204e261c31a520bf2109264030cd210d20af25e72d2520231f5b255b2b4e1fa91f54250a29f31f181f4c252c285c1fdd1e6a254a28ee1efa1d5b24b026b21d261f7f243027b61e151f5324d826591e421e32243e26581d281e0a24d225161da41db1237825941cb51d95236c258d1c021d14231325d91b701c0b223a24f41a0c1c9021d0233a1a9b1b61217123bf198e1b422130239919d21b3521fc22b019361b1121dd222419221be92078221619c71a6820cb21bc180b1b5320b821ec18f41926207f2129187b1a30205e217018321a21204c212818de19201f9c20de174d19911e6420f616e4190a1f8020bc177619511ff42004171019ab1d221fca150000311a4b1b0000c01cb0204f22fb1bce20ee243026de2143218725f02634222422ce253e272723b622f32584270124e5225c2628281d241423e32668281f24c4234727c828a22410245927cb28ad241d248b27f328bc242524c2272f29d42417239d269f28db23ab2445270c295f259924ee2761295b255d244b2738293525202357262729cc235d219f26fa28cb2178234327862959248124cc27522afe24d3222527402a7723e322a027d32b89233423b527362de2238a2268277d2e1023fc21ce26d42f8c225520eb250030ae20b1212526642fd321b7205e26392f07217221ed26bb2dba213d206a25632b66201a205525242950207320c5258428be20571f4025ee27d31f131ff124c327571fc41d1e24ad266a1d0d1f7024e3269f1e7b1e20248e26e71d001ef3233026361dd01dc323ea25f71c991d9e2394259f1c0b1ea5236f25d21c8f1e44231f25241dd21e6f2281243f1dd11d08223424651cea1cb821ef23491bb01c57215723d11a581c0421ac22321a501ce0209b22071a821cbe204f222c1a8a1d5820b521961b3a1c7120ea21ab190e1b5320a521bb18391a17205e212c184c1a1e2036212218511aa51fd1200f18ee19741fd72073171e1a581fae20dc175e19061fb220be16ef18941e4a20ec1500008e19081b0000bc1c2d21ee223f1cff211925fc257e23ae215f25be2604232c2213269927b6233923772620288324e922f9250a2851245d223526142852234a23e526c62881246423672717294e2408245e27eb28b224082414288f29b2248b23a72763292e24fc23d0275b2998244a24d3276529ef24bb24f027a3298225b223ba278129282415225f273929a8228323ab27b82945241124a827d1296424c0231e280b2a3d241523a8271a2ad9239822ac266f2a6723bf22a427b92b622372233c27582c20244121cd26d92c6121e6202c27f62c2721552105273e2c8821c0203f26272bdd201a2193251c2926214a218b262c296a21cf20f8254d28fd20e01e0d25b5273b1fb41f3d25ff27c71f2d1e8d241f27b61dc51e8e240227431e721fd4243827c81e631ff2241427851e9d1e95248926a61d2a1e2024ce25171d511d0a2308253e1cc51cb122bc24791bbb1c87228e24481b7b1c3c226324c51a7b1c22223c24a41a5a1cda211224541a521c9521b223291ae71b4221442386199e1bf120cd225319021b96204e22e618d41a4220c221ad185e1b792005220b19061b46205921cf18ee1a13201d21a618cb1ad71f13217618581a971fe3202a18a31a741fbd205b18a819c41e8e20a116ca18441e302035150000031b921c0000601c3621de221a1bef203f256f261822492193250727742204223326ce2759230523c826562856241223ba26792877248e23b9266d2874243f244a27cd283f251b24c2272529d724a124c4270c2975257224132873293e251524cf273e2995247023cf275f29472400240a286d29a92423242528bb29b424a623c8277b291324162210271729a92224234f27bd29292465239a27a52919243023bc27aa29f7235022e026302916239a22fb267629692387222f276c2a2423e3217f2649295c226b209e25f6285620c92040267329c3201e2226279029ea214322a726ff280e2243218925222804218c20ef2588285520c320f62577289b20441f7e258828071fd11f49252a288f1f5a1f9624a426e71e5a1e53249b26e01dd01e912404271b1e001fa024cb26fb1d391e762471263a1d181e3e24ff25f21c9f1d83235525901c431dff22f724321c151ddc22d124f71bbb1c9822a824481bd71c50226824501ba41cfb213c24e11aa61cb221f023c21a731c3d214f23581a211ce720b022e319a81bab2057225a19d81bb9204b227b19a01bae2028225419bc1a54209e219c18f61a45208721ab18d61a0d204f2196184c1ba71fed20ca18f91a111f822094182a1a631e322066177f18ef1dc21f24150000b718421b00003b1c172113233a1b2921f32429263b2262217225df26a6229621fc259927d22223239a2632287524c722b62661284824172215262628022364229e266d28ce23d8223127b928f923b723c227fd28a82490248628012a82258c23382897292f24e423ff2766295f244a241e288e290e251f2402289729cd24d223bc27a0296324ce226f274929a3236a236f28512a442438245428252aad244d239428b42afd23ea22a5273a2a91232a2211276e29d5227a2290261229ff225c22f2262329232315202026bf283c20a7203726c628d4203022a326ff283f2281211f26e8287a210b2066253c2806204c208c253d28472053208c2554284e204220662503282d20701f34250e28161f1e204e25a727801f3d1ffb246d277d1ead1fec248f27c61e9b1e9424b6268c1d741e60243b26541d281e2d24de25e91cc61d03249d259b1c841dbf235b25521c1f1d4123fd24031cdf1c8c2287247f1bef1c34222824741b6d1cfb211424901a5c1cbc21dc23571a151c6d216723d219fd1b4b2122239519e01b2f21f3228119b51bdc207f2247190c1b6220c021ba18f91a5120a4219418bc1a53207c2153187a1a042033212918241a881fe820b717cb1aae1ff3205d18611a061f7d20791712197f1e172083150000641500180080d11b932076223c1a34226d25fb2650238121bf250128b922eb21992637283a23cc23f0266c28d1242d244e27c92829259623f12694286b242f233d27e3286324c0220227bb28dd23482373271729652429245c28db291525e422bb2743298a238323bc2742292a2417242b288a29e12433246c28292ae42406245028fc29582426243a28e1297b24622494286d2afb24b3236928432a28246723f827c729e423b52291278a293e230222d427d7297d22f822f527e3296e23d422a927ac29aa23b6207c26d628d22055215a26c22875218622dc260a2996221122da260a29f42104215e26a128ec20ae208c26f228a82083211d2699287c21b220ec259328ac202d20942578282820d01fcd2455271d1f641fd0242a27bb1e4a20fe248627731f2720a824ba26fa1ec91e2c24eb259b1df21da2236825be1cac1d6d233d25721c6d1d3c231625401c3f1df922fa24091cdc1cb922c424571bc51c3d225d24121bae1cce21fa23ce1ab71c70216423db1aaa1c3b212823a71a9a1c0f21ec226e1a3f1cd4208a22d1193c1cab203222cc19e41b90201d2267195a1b6720db21ee18c11a2b206e216f187a1afc1f49214018471ad41f36210818761ade1f3f212618f219321fd6204d17dc18071ee11f8f150000f9163b1900802d1c3e213f23a91a5b217225e5268a22fa213f25b02637236d21c4256a27a022a722542617281c248822b12666282024ea22af2671281324ac223f27f72837242024b9271129fb241424ec272e29fb245324232885295725c8235e27012918243123a82755299023c22406285029682533241f28d629a724e6234c27c2291924d02207289229432300247628262a8c243e234e28282ad22394233028e3291824e5222d281f2a8b235a22a927b129dc223f227e2792299222022389276529c4231821ba26d72812215721b426e3287721bc22ed26fc28cc22a221bb26342987210c212f26962806218b205e26a12896209220e92576288c20282003252a2832205520e4243f2730203d1f4f24b426b11e051fc2243d277e1edf1f8c24f326f21e761fa72494267a1e531f7e246426271ee51e5b241426b21d2a1e0e24a125011d9d1d8b233f257a1c491d3023f224241cfc1cab22ac24ac1bd91c41226524531bab1cf8211224eb1a5e1ca2219823791a141c5c214523ee19e31b2a21f9229f19ef1b1421c822a8190f1cfb209f22ac19901bc22054224919f91a9420f021c618ee1a422057218d18311ba71ffd209f181e1b361fdb2079186c1c331fa2206e19c81ba21ea2208f1898196a1e2020df1600004d1756190080001c14215123621a4c2221257f26282323215a25c12633226021b8255e277d2246220e26e427a92378225f26142816241922722649281a238122b9268d280424be222127e028f323742388270029722432240428702920255d237e271b29f423f923a0276e295d2403240a287529ac247924f727802915253223e527a32991232d23da277129a623c4234828fb294e2469234928462ae6237a223728232ab8225c22a427ac2999222a228a2799297c229b229f276f29c3224d23ef27b329ae23de217f2743298221bf21ee26fd28a321fb21bf26d228de213e21e326f4281221d4205926a7289a20c0203a268828ba20c920f5257228b22060207a251a284b207320902516285e20112026252e27851f721fe724e926e21e1a20372568271f1faa1feb24f8268c1e0b1f58244c26d11d061e85239425ce1ca41d75235f256b1c5a1d36231325311c231ddb22b524061cde1c6c227e247d1bce1c182238241f1bf71cd421f823381bfd1c922196231d1bcc1c4b216223b41ac91c1421fb22b01a261c95206e22ae199e1b5f20f4211c19011b27207a21b218e81a1d206521a218df1a352072218318b51af01f3f214f18911a821fe3203818c11a861fde2057180e1ada1e82201817d518fa1db61f641500004a197f1b0000fc1d05235924df1dee2049257e264c228220cf240526612184214d259f2694227922f625c227d023672246261728d22323237b264b28282480225b27e628f02338239627062934247523ee2724295824842319288f296e242922d826df284e22c0226d271e29192359248127f828d1240324d6277b2964244623ca279d295823f1220628c9297f23d4230528b32910244e232428db29c92325232b28062a9d2379222e28382acf226d223028352aab22ee221c28d3291823e3220d28d52925237e22f2279529a52244226c272a292622fe2174276929f721f82156272229c62123219426ca28f820f320ae26cd28db20f9208226b228e120f1201b265a28d920d0200d264528b920cb20b3252c286f2029206925d327b21f2b20252599275b1fc61ff3240b27c01e161fb1249926f41da51e77244526651d141e0b24b425d91cad1d2c23f624721c351d95228924021ce41c50225d24631bb41c02222424f91a631cbd21d723611a4f1c68216223441a251c30211023cb191e1c0a21ca22c1191f1ce3209b22a5192d1cba207d229a193b1ca3203122ac193f1c6f20f1219319c11b4c20c3211719751ba61f2921ca18181b771ff5208f18ec1a8e1fd72072185f1af71e9b20771762198f1db91e01160000f5195d1c0000112092247f25ae2014216c25082746224721842512279822a721b6253727e722452256260f28bf233b23ad2646286a244e22df26872858235022e3269b288823ad22bf267228c623ac2240279a28f623b323f4275d299824f1220a2876294d235b235728d529d7230e247528f9299c2416247e28182ad124da234728b329132488236928482a1124b4237128642afe2371236e28762ad423f3235e28352a1124e5224328382af62293222e280c2a8b22e5222128ba29dd22dd222e28bb29bc225b221f28d2295322e721c2278a296021b9227727472968229321742756293c21fe201d273329c2208a20ec26e02864206521d3254f283821022060256628dd1f19204725202805205e1f7b24aa26801ec01e91249b263e1e6e1f6d245826731e131f482410260b1e811e1124c225481d851ef0239825331d361ea9235125de1cb21d43230825761c4b1dea22d024131ced1ca2229f24711bbb1c3f225b24031b631cd3210624611a4e1c4a211c23231ad11bb42073227619511b89202f221d191b1b5920f621dd18d71b5c20e5215e19201c6e20f32188191f1d4020c521de1ac51b042052211a19241bb31f1521b018e81a731ff92070182b1ba11f06219b18311afb1eca20c8171d195b1e7c20fe1500009015ab1900007d219523d224b221172199244e26ee210921c9241d26cb21be214c25b8269b22cb21a9252d27aa227421eb25f8275a22e52141260a28b3220a22ab266528f322cb22fe268b28012422239127cb2834246723fa2735295d24f02219285b29b023d2223e28d229c0232e245628b129a2244a234828052a0a24f0223a28da291a2390224928332ae7227e232728c229752312232228b7293d23c9221b28b829f22282222128d129a92274224728302ab22289224c28152ac822e8223828d429122351222328e6297722f8210228db290622b421ca27c62999216322942773294422f92177278929f221112148272029f920bb215a265028b421da20c8251028c32077208725c6275120801f5e25a427261fb31fc824c1261f1f481f5b242026871ee61e3324cd25e41d5f1e05249125431d351ed4236a250a1ddf1d97234425af1c8d1d2b23ec246d1c4a1d82228124251cf31c402260247a1be01c05223a243a1b8b1cbb21ff239b1a421c4d213723311a261ce620b222cc191b1cc62098229f193a1caf204a22ab19321d35209121d21a6d1c05207a21b019e81bbf1f3b211419e51a721f1d215518641a5b1f05210418631a501ffb200318c41a561fe2204018641af61ede20ab17b7191e1fc52060160000e219151c0000cf1f9e23a8244620b820a8241126b22195209f24dd258821f220e1245226d421092107257d26dd214d215b25032753229321b725742792227f21d325a7276722d921f3250328e5224122692631284923ae22fa269a28e023f022cd2766290a24d4223428092af42366235928e929272449237828042a3124bb238f28142a4924fb228b283c2abc233623aa285d2ae4232723a5284f2ab923d82392282c2a20246a2385284e2a7c2359237028462a5023372385287d2a142334237f28352a4523cd224a280f2ac522da21b2275e2912227022542706298022b52165272729ec21ae212827fa28d0217f210027ca288c214621b426a42853212f216d26462816215820ec25242833201a208c25ae27b41fc41fee24ca262e1f4b1f572409268a1e951e152496259f1d011e84233325f51ce41d2a23ed249e1ca11dce22a9242c1c7a1d812284240f1c391d2e224424be1bcf1ce0210c24211b901ca921b723c31a891c7f217223981a701c53212723541a291c1221d622d019f01bd82082228c19ac1ba9204f224119691b81200e221319fc1a4d20bd21c8189f1a172073215918601a671fbf2018183f1a8a1e6220ac176c1a651e6d20b5179f1b961e5f209318e01a1d1e4b2020187a19e01d16207d15000005183b1a00002c1fc722312413207620df23292552218d207d24ab256e217e207324ce253b2185208324d3254421c320d32440268c211d212f25d8260722342189253e27fd21bf21c2257027c622c7210d26ce27bb220b2227260f2835233522d726ab283b23c9229d274829cf23aa231828a7293f2402245528cf2980249323c528672a25246623ce28af2a19242523fd28c92ad1238e232229f72a302435232329fe2a95234323ef28cd2aa323d522c828b62a1723042399282b2a4823ae227228092a1f234e225e28112aa222e1212528e3292f2286221528a229dc221422e02782299022bd215e2713291e220c219f2689284f21fa20e22518282a2154204d2575276e201420fc2401271e20b51fbe248026901f3f1f59240126b31e981e1424a425d11d4b1ecd235e25601d0a1e84233725fd1cdd1d4c230f25c21cc51dfe22e324851c791daf22b424361c0c1d1d224824a01b8e1c83219623a01a611c21210d235e1a531cf120c7222a1a391cbd208122e7191d1c9a204e22a219211c762018228a19011c5720f4215f19051c6620f2214719791c3d20ba21bf19ce1d6b1feb204b1bf01ba61f5421e018f61a161fd9204618181a6f1e5d205017ff19381e1f205d17d319f11d19207f165419621e74203e16000095177d190000c91ece22a5246c1f7f200823f1241c21652066249b252e21a0209424e225522137205a24a525d92098209a24f0254921f72005259426b621e5201425ba267e219f210a256826782265217c250a2735222b22232609282f23582282266328a8235a22f726a428ab2346227527e8287c2393221527a828d823fe22eb273d29f22335236728e82932243d23ca28a52a1024fa231129c22a972487241129ab2ab324a1231529d62a1124aa23e9289f2a232430230c29082bc323ab22d028da2a6423e0219928752a5822f1215328002a6b22d221c5274e294922c521f426cc2826221c215e2691286021c620ba251028f4200121502535270d21fa201c255c27f4205f20e82414273a201020bc24a926be1f961f74242a26cd1e301f2524bc25241ebc1eb3236a25901d371e4c232d250c1def1de022df24bc1cae1d84229324731c7f1d4e2260243b1c6a1d19223b24171c211dd6211224751bee1c9721af23071bd61c4f214723c21aad1cfc20d322671a181c792015227e19031b0c208821b418b31abd1f54217e18aa1a9a1f28217818a31a8c1f232173183e1a5e1ff8201918df19f81eb4208b179b19941e6f200b1789194a1e3f20cc16d2194e1e342026173219ca1d1520f11509192f1e48202f16530ddf1b8b1d77063c1dd7201222b11c9f20c423e924ed2038201a244f25ad205a200c246925d3207b202f248425072187204524ac253621c1207e24df257821d4208c24ec256b21012199241e26c221ab20942438264e21ef20a5248f269b21f120b2249f269e21de20d424ce26ab213a21f224f2260322fa21ce25e527cb2270219825aa274222722038256d271d21b02031252327542198214b264c285b229921292739297122cd22e5273829892330221e28b22908235e21012899291a224d21bf267e28e02192206c266c2842217420e2251128cf202121da25fd279d2180208b25be27cc20c920072525271a212821d924f0266c213a207d2472267220601f492404268c1fd91e1c24e6259f1ea51eaf2365253d1e561e2f231225971d171ef222d724341dba1d8722a124a61c621d44228424381c801d382279243b1c5b1d0b2258240c1c3c1dbc210a249d1b121d6a217c233b1bcc1c20211b23d71a761cf220d8225c1a5d1cb0208e22191a2d1c87204222b819271c5720fb2192191c1c2320b6216519ee1bdc1f762135198a1ba91f3d21f3183f1b711f1421c218201b3f1fdd2094180c1be11e85208718ed1ab41e77205a184e1a841e5920be175a1a4a1e17209f177c19961dd61fcf150119e51d4c20b91500008711f0160080e41c0621df221c1ca81fdf231a2530201720cd23472588201b2000245d258d205c2023247125d5206e2037249925d9208f205e24a2250d21c4205924a4251421d2204b24b0252321db205e24d1252d21d3204124c5252421e6203624b9251521bc2015249725ea20d52007248f25e120ca20f4237825f8209e2096235825a9205c200323042557201b20c522eb241620751f6e22a424e51e901f7322c024501f5620c2221d2541207d208e22f32437204720de2198245120a2209e229624be20771f4b220a24891f3c1f1a222524681f2e207f22b6243820b91fb0225625b01fd81ec6223c25d01ec51e3c237d25a41ef81e21238925a41ea51ed7224425551ec61dbd22f1246c1dd91d5a22aa24531d451dfe217a24a61c5f1d02225d24831cb11d26226d249f1cb01dfe215424891c6f1dc82128242e1c2f1d9221e1238a1b0a1d3c215d232f1bae1cfc200f238a1a5a1cd120c422151a381caa209522c7192b1c912074229719221c74202f226d191b1c4c20ec2164190c1c2b20aa213319711be01f5721c818641b7b1f1a21bf186d1b7b1ffe20c5182c1b6a1feb209b18a11a611fe5202a18181add1e8720a817fd19861e5b2086175d1aa51e5c20d117cc184e1ebe20e415be194f1d2e1f141600007f1475160000621e0e22a923151e4b1fde227d24fb1fe41fd4230a255120fd1fcf2325255f202720bd2311257c201f20a223152565202620a62319256c202220a9232d25592012208e232f2548201820ab2334253f201e20bf23432546200c205c231c252420de1fbb228024d51f6a1f4e2266242b1f891e182260240b1e041e7a21f223651d761df5205223aa1cde1c7820ba22051c841c2c206622751bb01c06205722be1bb81cc01f2922cb1b9c1cb11f17227c1b931cba1f3c226d1b8a1cf71f56225f1b731c1320c122591b681c5920d522471bdc1cba205c23271c941d3321fd23d81cc91d6c211324061dd91d99213124291dce1db62156241f1d9f1d99214924e11c461d3e21d523811c491d5b211424711c5d1d74210f245b1c5d1d89211424471c4d1d87211124141c341d79210524dc1b1e1d5c21df23961bfd1c3521a223411bd01c07213e23ff1aab1ce220de22a81a6c1cb3209e224e1a581c94206122121a3f1c70202b22d119221c5020f121a919221c2b20ce218b19ef1b06209b2135198a1bba1f5921d818561b5d1f1821b618781b3a1ff020b118731b031fc02093187a1be81eaa207c18eb1be71e9820c018001baf1e7b201a18c819671e4220f016ce195b1d0f1fa316ca19bd1c311e7a1500001515f41700002320a6221424a71f641f2423be245b1f741f022381246b1f8b1ff0228524821fb11f0c23a3248c1fc71f0e23b324a21fa21ffe22c324621f941f0423d224541fa41f1e23ed24481f831f1c23ec24291f8a1f82226d24141f981f01222a24cf1e0f1ff5210c243a1e631eaf21f623ba1dff1d8c21e923601dc41d7121be232b1da31d572199230e1da21d4a2181230d1d841d472194231a1d8b1d5121bb23201d891d2c218523321d691d10217823011d301de3204423a71cdd1cc22010235c1cae1caf201523321c631c9b201623dd1b141c8820f922151b241c7220d122131b2f1c4920c222e91a311c4f20cc22b01a701c83200023141b911c9c2020236a1b9b1ca9202523591ba81cb3201b234c1ba81cbb201323091ba61cbf200723e41ab21cc5200323d41aab1cc520f122a81aa11cc320e0229a1a951cbd20ce22671a831cb220b3224e1a6b1ca0209b220d1a461c88206b22da19301c63202422bc19fe1b3a20e3215c19c61be51f6f211a193e1b3d1f0121a718d81ae51ed5204d18a11ab51e9c202a18751a891e7d20ee17441a721e6020df17061a4e1e4e209117ea19421e39204417c919181e1e201b17ac19f81d0320f716e919ec1dc51f6d176419931d8f1f03165f1a081e15206316a620d51c6a1d6a1f6625fb205c241125802816236f244a28912a6c23d424422a452c6a247125122c232d6a245925e52c812df22312253f2dd12d8e24a125a02dfc2d84249025df2d3d2eb624bf251f2eb82e662721287f2e972f9c2bda2cce2e81303b30a631ce2e0e30c629be2c202e5f2e16279c2db92c452dd924fc2ef62b4a2b4c24e92f052a66286024813064272f245924c230cb2281202f2509312f1fcf1def241c31e11c0d1fb0242231061e921df12334310d1cdc1ce4235531d5191f1db42268316c19901d71228531f318241d84229d3123185f1cf4229e314b16ed1941238031dc127b129923a931c50a33186f25f331d30f51207d27e531ff1885209c285131461bb3209f260b2e1c1da21ddb24da293d1b321de122e6248e1b001a3521af2272182b1b2a21db226a192e1c50211a23501a071c0c21cc22151ad01b0c21af22e719b91b0f21a822b919961b0a219a229f19ef1ae52067220b19b11a93201022dd18641a5120a1218e18311a262050216a18161a022026214118f719f51f15212b189e19d91f0021b117b719a21fd320d3175e19331f892033174d19e41e45201c17db188a1e05206016bc18471ecc1f3716c6182c1eaa1f2216f618141e781f3c16f418e11db01f3916fd18651d0f1fb116ab19c2191b1bd8133722842267245c22742542243525bc2557281125ff258128082af5240a262c2ae32baf24c625f62bb12cb424e525bc2c592d9424d225532df62dd6240126042e572e1526be27662ec42e9528d429d42e422f652bc92c532f2f2f112c682df22e6c2e6729492c072e4f2d0d28782ce92c0a2cdd26cb2d212b62299f25202f9928ad26d425503083255d23cc25c930fa21b021102626319e2041204f253131071f522059255031e41ebc1ec5245831b51cda1c3e246f316919511c25247a316f175e1da2249e316d17901e0825c2319917011eb424ac31ef15251e7924a3311216f91db824b73194160d1fc925ce317b18c51e3c266631e018301e12261e30071a661c4b25bb2ce619431c48247c28701ad21dab235b25cf1c4e1d72227d244e1ce91c4f224c24f91bad1c59225224761bec1c3f225124da1b6b1cd621f623ec1af91b6f213b233f1a951b2e21d022d519d11b48210023e719cb1b1a21d622e3196c1bc72044228019dd1a6520a521fd18391a31206d217018401a1a203a215e18ec19f51f12212318d519c01fe820fd17db19a81fca200218a3197f1fae208f176e193d1f8d2048175a19031f622007174119cc1e3f20c0163919841e0920b616d318ca1d9b1fa7151219471dda1e5e1595168f1c381d050d68204b23f124e2203c23dc240b260f244325d324fa25c2259927ca24f9251a2870293a256a26df29eb2a3725a526792b302c80250c27772ccf2c6f262028202d442df92673289d2d8b2d2c287229c02dd92d76293e2bfc2d7f2db4299b2b782deb2c3929d52be52ca22b6228b32b622bcd298b27732c5d2902281727002e4d2750250527ca2fd624ae2207269330e521c922ab263831e421792138265b31c020b42027267531e71fe1207126a931ec1f3e20a725a831871e761ef724a031b31cb71e2025c531991c751e1f25ce313d1c841ee924cf312f1cc11e2225df313e1c531e4a25ed31c51b881e1925c431031cb51cce24ee30ea19131dd224ad2eaa1a7d1bcf24732b8d19f71cb5245d28081cea1d7224dd26f81cdf1de523f625ef1ce81d95239725f61cf61ce722f424191c321dcb22cf24381cd11ca022a624af1b6a1c17222524cb1a251c8e218723611acf1b7e216e23e6190c1c5e2135231d1a731bf7208d228519041baf2019221a19951a8420e721b1188a1a6a20b9219218321a432092215418081a142048212118da19a81fd5200218b319711fa420a51768192a1f7a2040173319e81e5620d4160619bd1e42207416fc18c61e4f2043168d197d1e2120d11665199b1d411f04160000801b861c0000352019244725d720462197246f252422c822d5240526e6239a2407252d263b25af26b525332799274d28f025ab27e328622916268827e429ed2a07278e287b2ba92b19287629232c052c17283129572cfc2b4828c729412c712bb928612ab92b7a2aab28d62a8a2a4629b528142b5329a9273728992b84278a251f28c82c6f255f243b273d2e2a249522d92621304622e822e5260d317c22ae217b26723141218b218826ad310c21b5203526d43149204e217f26fd31d5205a2032260f32ae1f4f1f7b253532581e871e37254c32931dde1f5c253b329c1ede20a52532321720381faa253832f61d6b1ff025ea313b1e821d8425ac30a01ce61cc0246f2d1d1c6a1cab24b5298a1b461ecd240828451d2f1fa324f426091e731e54247e266b1d381e3b245726231d431d72235925581c051dd922ce24131cd31cc322bc24b21bda1c77226d24bd1b711ca921b223f61a401c862170238a1a461c95217623751a111c61212b23071a181bc02043222819201b8f20fe211419d71a7920d021c818a41a5f20a9218c18b51a6720a0219818671a27205e214b18d7198d1fd920ab177e19111f91200e174c19d21e5520a8160319b51e4b202816d619011f5b202b17021a041f96206117e519051fa7201317b50ddf1a1e1a5105a81e6b21fa21a71cca20d0243d266021aa22ac25f126c3230424a52515279f247f24a4250e272c252525aa254427d92575263e26f727f9264e283427c6289728cc282c286c291d298d2865281c2ada2817297828182a7f298e2883280e2aca28342826284b2a5d2803275c28642a2d2769251c28a12a7625a6241e28472b90241b249a278b2c07247622f426722e6e224724aa2777304224dc2236275031a222f821e626cb31b021092175262032ba205c2210275932f8217321a8266a321e212620ed259032ca1f56206226b932e61f08212726ad32952000211d2692328e20d11fc0255432021fc11ee12585310e1edc1c5425a82f5b1cd51cbf241d2c551cc21ddc24ee28291d991e2a256a28a31db01f0225c527911ed01e9b243d27d21dd91e5524b926c11db61da623c225b71c5f1d4f233c255c1c571d3b231825421c151dd922d224f71bed1c5d226a24941b951ce0210d24ec1a9c1c70215d23b41a9d1c1a21d222941a5d1cd1206d22191a011cc02047229919931ba82021223019d21a8720e821ab18c81a6d20ba218c186a1a3a206f214d182e1a0e203b210f18ed19be1ff5209d17ac193d1f942049175719cd1e5720b6165a19c11e3b2093169719c21e5e202e17671a361fec201d189814441d4f1d050c371e2221ee21cf1bc22019259d265721f3224326ff27192414245f262b28b1243724a9264628d92424248d265428a624aa24112781281a259325de27202919267f265a288e291c272d266228c829c226cb2624288e295627a62519289029dc2591254228002ab325152579285f2a3425bf2420281b2aca24962424284f2a90241f2418284c2b29248b22ff27d42cb2222b230128f92e5623b7221f28bf30df22ee222d28dd31ff229f2219285e32af22cf220128a832df222a21bf269e321121761fa525c332371fc2205826fd327720b220a126fb3257201621b725cf32b4206c1f7f251e32dd1e5a1eed25df30e01d0a1c1925f02d781bea1cfa24492a8b1cf41e332579286e1e0e1f762561283a1e2a203f250c283b1f671fe4249227531e001fa9240427e11d4f1e45244a26361d121e0e24d825ed1c251dc722e524081c541cee214a24a91a4b1ced2138247c1a271cc3211624281a2f1c9a21ca23341a0a1c6a217023e019d91b352107239819661b0021ab222c19571bd1205d220719ec1a98201722bd18d01a7420d421aa185c1a4a20862144184f1a3b206d213b18521a262049213d18471a092023211f18401adf1ffd2004182e1aa61fe220f0172e1a2b1fb1206a176719b11ea320b8154a12261d731d370a651d26212722b11b7c212f25c9263c22d8227a262428f9236723b32652285024b123b426542851241724c826882897243424ed269728a82495245c27d7282525ef24be271c296625ba240c2859291b251a255928b5298225662418288e29a02481241b289c29bd248c243f280b2ab824be242a28322aec24b12473285e2abc246d245528bb2a9824aa22f7277e2b0223222347278f2cb4239a22fe27bb2e21236b220828a530ee2256220028c931c122c22204288f32342365216827b13299218e206427ff328920d82121274b33a72179213726f4324b212b213a268632ed200b2061266b31b51f571e0f26512f0b1e5e1d81250b2c1d1d9c1e2f25a028051e8e1f79258428c61e351f85256728421e7420192505289b1f891fb8245f27701eeb1e6624be26d01dba1e3d243f268e1d2a1e0e24cf25011d0f1e0b24b525d51c861d7c235625541c9d1c36227624191b401cb52111246c1a131c9021b8230a1a071c6c217823db19fe1b5c214123b319961b492121236919941b1e21d7224c19fa1aa4202422c718d21a5420c4219318481a2e20892136180e1a0d204e210f18f819e51f4621d617bb19731fe3205d176d19fb1ea820d116cf192d1fb1202217f419c41edc207b175d1a931d3e1f61167a12df1c041d090a271d1b21ff210e1bdc20a9255d279721782297264028b823f822782632281c249b23ce2653286024e023f326a6287a2414243627c72885244e246527f828b624b524f8274c292625cb243d2885293e253b251e28b729df257b24de278b29e724c624c0278929282580245628152adc245b24c028af2aa4240d258d28bf2a3e25fe2349284c2a2624bb23e1270a2a11246023a7271d2bc2233f225b27372c92221222f2271c2e62226f22ae274a30c4223622e4276531882295217f271032b721452226278d3254221f22fc27d0320222032105277532d9200b21a4268431e0207c1f5c26ee2f3d1fab1d8f25d72c7b1d681eae25b8291b1e491fba257328d71e151f49258228591eea1f6d254e28df1e092034251128e51e841f93242d276b1e011f5624a426fb1d351e21243426201db31df723c125a01ce61d902377259f1ce31e0a2316254c1d0c1f69228b24531d1a1e32226024861c241dea212a247a1bd11c9021c523de1a8d1c3f2123235c1a9b1c0621ed224f1ad31cf5208622781abb1cba200422581a1a1c8e20f32163192f1b6920bd219d187a1a3920852129184c1a02204121e917db197b1fd8205b17e519511fcf203d17111a481faf207317321a361fcf20c917441a4c1e2120a216bb12831caf1c22099c1d53215422bb1aa621bf254c275722d222732629281e243523992633283f24e623db265c289a24ed230327ae289e24c823bc273f295e24542430289229dc249b244428b9291b25ce246a28ce295325ae248528192a302544246528272aab24af248328342a202546249b28502a9e2450242028c129992408242328182a3d241f23d627092a7d233323ef27332aac237223d6271f2af0231e23da27642a962396211e27462be02132225827002d8422a0222d28172fe022352393274a306023f2217e271e3116222b2104271c313721542023267e304f20222092250a2f0e20561f3025712c331fae1f5f25d329891f6d20622612295820cd1fc42555286f1f3f208a257428f91f062011251628371f6e1fcb24a5278e1e151f02259a27261eb51f1a257a27951ef31ec824fc26bd1db81e61245d265c1d251e6c235b25d01c721dd222cc24311c311dc922b524d81bfa1c98229a24611bed1c71227c242a1bd51c2d224924e41add1cd2210324cc1a6f1c6b217123121a5e1c1721f522fb19ae1bbc206b2226193f1b94201a22dc18181b77200a22c218af1a4f2098216318531a0e2053211018721a052041212418ac1abf1ffe2019189f1a571fb820f2171a1b351fb9200f18b21a0e1e0420e616e2176a1d351e5710af1c13212d22c1199d21a5257827752299227c262028f7230c23b52647282724b42310277c288a24c2233b27be2893244624aa271b29eb2483240a2855292125aa2432289d294d25b7244c28a3293a2599245c28e3293a2535243328dc29aa243924f127c1299f243624f5276b299b2425240c28b0297a2442243728022a8a245623ad279d29b723ef233628512a3a2461247928c52a9b2419231128092a5d232422cd265229492279237f27c2298b235b230028b92b5223d722a1279b2c9d22fc214027952db4211f216e27d22de120f9208926ed2cbd20f720f326102cbb2073207626202a2d200f21f2259028d22073206226c6281d204e201226ca28b81f8a20c7257a2812202820bd256928381f072088253628e11eb51f4d25f727951eb91f2925a4277d1ea01eb224e726791d681e4c244326331d301ede23ab25ef1cb51d74235625791c821d48232d25511c2b1df822ee24cf1b1b1da422a724911bf21c54226d24311bd61cea212124e51a8f1c77218f235f1a301c1921f622bc19a91bdc208c223f19691bc1206422f818231ba5202622c918e31a7b20d7218518391b6720b521a418a61b3b207521ea18041cae1ff9200c19541bee1e82208018861a5d1e5420d417b619f61d39205f16e30cb11bb51b73031b1dac20be218f1a4b214a25e726de213b223c260c288523b222da265f28e523932347279128772452236c27cb28512466234327d7284224b1238f27f2286d241f2405283d29af24692440287a29032571246228d829fc2409244528f72979240b242528ca295e241f243d28e729822427247d28422a6d24682488289a2aa224a3236c28492a0424bd239028972a202491245f283f2ace2444232b28122aa4236a230f28642ab123a3228527b029e3227322c827e1299a22cf23f3271f2ae2239b234a27262a7623d3213c275a2aa221af21f126352a6b218a21c4260d2a3321b921a8266d295f212f227826c228ce21e1201726a72883208620f62578281e204820c025a8288e1fce2026268b281b205b2061251628511fbd1f0625c827801e071fbb243227e71d9d1e73248b265e1d4d1e37241326071d3a1e1a24d625f71c0b1e0724a425bc1ccf1df7238a25781c6b1d6e232725181c351dc122a124b81bcd1c48224224fb1a8c1c01220e245b1a6a1cd421dc232b1a4f1cb321ab23e619181c632147237e19de1be22097222a19f01a5920c0217518531a1c20732110180c1a052048219917f019b41f0d214b17f419871fea2025176a1a9e1ffc20b2179f1a4e1fbc2062174b1a1c1fde20aa16000028162a150000c31cd220c121d919bd22b7258227472318233c26142848247d2204277c28a6236a233c27a3285f2483235c27d12860248f239c27122959240824e3273829952424240e284829a624382433287529cb2447245c28bd29dc2482233e28f4292924ea232028ba294624db233628d2294c24c7230928ec292524c12354283b2a1424ca2347282a2af92323244c28fc294b2411249628892a29241b245c282c2a252440230c28be295123aa221728f229a222ab230f28e82986238d22e0272b2a6d22012221275629e421d5217826f628a4217521b5261e2933218321102726294121e92129270d298c21c62122275a298021e220392602299620e6204126de287620c2205126d62833202d20c8256e28041f382089252128f81e072025259d27a71efe1fd52413279a1e0d1f75247f26b91d601e2124f025161d021ec1238f25b51cb01d76235a25601c7e1d39233b25261c211de422ec249a1b1f1d6b229224721b0a1d042235242f1beb1ca721c223e01ad71c68216823a11ab61c30211223511a5b1cfc20bb22d7191b1cc72060226419a21b982019220319231b5a20c02196186e1a1b20682121188e1a09204b211e184b1ad21f2b21bb173e1aa31f0d21ab171e1aec1eb9202b17c71a741e12208f170000c9178a170000021c8a209c21ec180a2197256327cc214e225a261128b323d722e4266e28082494234727aa2877246a237d27fa285f24c023ca2733296724e32303285c298a24392442288329cd24202449289729b024fe234e28be298b24f2235c28002a59240d245228162a602465249228142aaf244a248228382a832464249428932a7e246124c028e22a6c247224c528b32a8d242624a1289a2a3f2403247f28522a0d2481234c284a2a782322232f28272a0023f9221b28ff29be229d22e227bc297d2253228e279529352269229e27a0294a2241228d277a29f621f221882788299521af21a62797295621c2217a2773296821a021ba26ec2834214a21da257928d120ce20b12525282c2023205a251228111fa61f6125ef276d1e8a1fcc2425273a1e0f20a124e026b41ef11f78248e26721e1b1f68244126ab1d781e3e24e725121df41dd9237125aa1cbd1d6a2322256a1c5b1ded22da24f01b2e1d81229424ae1b111d2f224a245e1bc01cd521f523c61a6c1c842180232e1a321c47211e23dd19051c1121d0228119b81bec2098222d195d1bc1205422d518f91a8420f5219418911a16205f213818ac1aa11f0b213118e31a651ff7202218a91b721fcd207d18961b051fbf2056188b1ac51eb2207b17000052178e170000081c7e20dc21f41825229425522760221e222e2602284c237d229b2643288f232e23de266b282e2426232527b3282a241c234e27f9280a248223ae271f294424c223102874295a241a244a289d299a2402246328d9298024df237c28292a4e2407247928362a3c24e4238028332a3524732482280c2a8e249c238b28982aca231024a928ad2a1a240b24cd28d32a232405249f28a52a1d24bc238228932ab323c7239028802abe23972374286b2a7223b82354282e2a5b2340230f28012ace225f22de27e329fb212e229427c129b7210c226027852997219f2137276e291e2144212d276229b820832106273129052121219126f128ac203a217d26b628af20ec2007266d285820a420ac253828ed1f422089250828271f10206e25c627d31e0b20f7242127cb1ee01f7b247426651e6b1e0124ba251f1dc21da1237b25831ca61d69234425591c771df822d624211c4e1d8a229124dd1b341d37224c24911b4a1ded2114248b1b501daf21c923461b101d77216e23ca1ace1c36210a23721a171cc42076225f192a1b6120eb21b418a01a242083214118691a052051211e18731a00204a210d187b1ab81f17211218321a681fe0206f17511a5b1fd2206717821a211fbd20a017fb19a21e8b20551600009c17cf180000491cba20af21fd195021d725b02756227c22ca265c28eb237222b2264628b0231223fc2683282b24df225827d7280d24a9238d2705295a241b23c327472916244d23d227352919245f23f927492923242b23fc277129f2238b22c6277b291123d422da27a12947234c233528b929c723632343281d2aaa238c2351282a2a9e239f2389287a2ab1230924b4287e2a13240e24c228922a0924ea23c028a82aa723f223b728a92a9223b623a628a92a3d23b7239928822a3e233b236228522aca22ad224128242a442273221a280c2a0e225322e627dc29f0214d22ea27be29d421e121ae279c295a21ba214e27622937210f21be2600299b202f21a026c128a620e82051267d2854202d204826b628221f5e2006266728761fee1f6025c727a91ea61f032529276d1e2c1fd024c626d21df31e92247e268b1d891e4a241a261f1d201ea4235d25b61c9a1dd522cc243b1c411d8b229a24ca1b161d3b225624651bbd1cf0211b24c21a821c9521ab234d1a5d1c50214223fa194e1c2321f422c619301cf720b9229e19281cd7209b227519e21ba02051221019831b5f20e821d318cf1b19208221e8188a1bb41f1d21bc18151b611fef204018d71a531fd3201b18a11a9d1ea220c417ea19fa1d122043160000331b641d00004a20c024ee25e0205521622518277022cc21c1258127ea2255223326f8278e23b722bd265d28ea2307231f27a6281824c2223e27f028c7232523b22723291c2489230628482948246b2325286a29372491235b28d3293f2457234928ee29ed2338238928452ab2231224c7287d2a48240024dc28bc2a2724f523df28d52aeb231324e628f72a0e242424e828e32a10240724c328c72aad23f723be28a82a7a23bc23a4289d2a0b23a023a028902af12273239328832aae22e4226628492a2d22652230282b2ad3211c22fe27112a7a2156220828e629ae2151220428e629aa215c220528cc29b3212022e427a82994211322a827762988211821b22611299120af20ea253b2822205320f3254e28631f2520b8253328141fd71ffe244327961e7e1fbc24d2264b1e1e1f8e247026c71d011f522413267d1dd31e1224b925401d4b1e93235625d81ce61d26230b25741c761dd122d4240c1c471d85229b24ad1be11c27225624f51ab41c8e219e23931a371cde20bb22c619de1bb2206f2247197a1b7e2026220419c01b6020f5211619b51b6c20e1210f19121c6120c5213b19c11b4a20a221fb188a1b16206921bc185e1bd81f2f218618441b9a1f01215c18bd1a081fd4200b186f1a701e7f20d01600003817411a00004a20f6231b25a2201421ec24f626d8213e213625dc26082277218b252e274a226821e225a627382269213a2629283a22f821ca268828c9224c224227d4282823e622de272a29f0234f233e288f293424a8237b28fa294c24a0238f28302a1e24f923b6285b2a40244824fb287c2a81242a24ee28ca2a43241524fb28db2a10244024fe28d32a1c2448240f29ab2a05241624f2289f2a7123ef23e4289d2a0023d723e428ab2aeb229f23c3289d2ab9223a23b728a52a46221f23af288f2a49220c23a628962a38220b23a2288b2a372294226628462ae6217b223428d729e721e521e527c5294921c021932771292821d521d926c82825211f215e2688288520802017263a28f11f1f20a9250d28281ff51f29257327cc1e3d1f92249b26151e221f53240d26ca1de41e3a24d825981dd71e2124b425751d7d1ee3237325151d151e6f232425ae1c971dc622b024391c221d6a227a249c1bec1c27224824281ba01cd3211724981a671c6e217523271a1a1cfb20cf229e19e61ba72080222f19351c9f20362268194e1c5e20ac216919d61bf11f7321d0185e1b9f1f34218618bd1a6e1f22210b18611a681f1021a817501a561f05216617931a5a1fed20b417a41a351ffc20c817de1a171fb120a9170000bc1b5d1d00001a20462470257d20cf201125b826bd21dd20ec247026aa212f213c25cf260a225b217f25282729229a21f125c427862205226e262e28ed225822db266c283623d1223a27b528d8234e23db271a2934247d233a288c29412484237128ee292a24b2239a28442a1a240324df289a2a3824022423290d2b29246a245529202b65244c2462294a2b18246a245f29422b152448245d292f2b8e23442457291d2ba623ff234a29362bf122f5233629182be922b8230a29112b9822ac231a29042ba92255230629f92a4322f722be287e2a0c2246225328f2297221b621ef27a3291f219b2182274b291b215c2143271a29f520eb200327f8288c20ca20cd26c0286e208a20632685283320582015264328ca1f0d208c25c927261fc01ff724e3269f1e731f9c2448265d1ef61e4924e625d91d981ee6236e252b1d2c1e4d23ff24931ce91dd022b224611ca81d64226c241d1c391d16223624981bf41cd5210224101bdc1ca021b223ee1ab51c69215a23941a531c1e21f022ec19141cd32089227819a11b8e202c221e19f81a4820c8219318581a052068211318741ab41f33210e184b1a331fd2208d17791ad51e9b20c4177a1a9f1e83206817f41a9c1e7120f317a21a561e642096174a1ae71d00203d1500004717f01b00002020e2232e25742071209324f1250c21a520c624452658219a20d9246c263b21e620f5248b2691214f215c2500270822a521c5257f276a22ab211a26e8277122c9213f261a289322922177264b2855221023a127ff280324362335289b290c2443238728182af2231f243d29e32a73247024b829832bbb247a24fc29de2b8524a9241f2a0e2c71249a24292a1e2c202489241e2a172ce0237f24142a132c8e238a24102a062c3e235e24f329fc2bf8224824e529cd2bd4221324cc29b82bbb22e123a229972b9e22932366294b2baf22ee22ec28c92a36223b226c28392ac321ed211928bf299021822184274e2940211c21bd26c828de209220122651285b205d20ba2500281920332051256c27e21fa21fd024be26f31e321f88244426591ecf1e4424ed25d11d5a1e0824a6253f1d0b1eab236225d21cf91d46232225981cc81de622df245e1c5e1d4f226524ce1bc61cae21d223ce1a811c46214a234b1a6a1c0721ff220b1a591cd620b222d5194c1cc2208c22c319471c9c2058229e190f1c6e20182237190e1c5f20f9211819181c4720b62125192c1c372043212019c71bbb1f4121ab18921b361fb7208b18501a821e722066172c1a741e52203b17dc19471e67208916d2192c1e81207e160000ba13b71800000a20fb233d2589203e206524cb25c320bc20ee2449265021062111258026a321e2201b25a7267b2143215d25ff26e8214f215d250127e2213c215225fe26cd215c216925f026f021fa21fa25da27b522e922cd267128c123fb222127cb28a3231b23f2276029ad2347237628152adc237c231629cd2a26247f242a2a132cbb24f424fa2a8b2cdc2453254a2bd02cc6244d25902bfc2c9a24ca25b42b052db3245c25f22b442d46247a25d62b2a2d5e24f5248a2b202de8236025f52abc2c5d248024962a672cb0233924f829052c9223a7237029532b1323c422c528702a72225e211b28cc293121d72005271629ae20872002262a2861207220a025fc273c2091204825782739204f20fd242327d91f8f1f72246e26901e411f1924d725181ee71ee82391259a1dbb1ea0236f255e1d501e38232025f21c011ecd22c4249f1ca71d68228224301c821d26225224011c5f1df0212624a91b1f1da121d223281b071d54216123e21ab61cf320e122511a231c7c202d226e19211b14209721ae18c81ac91f5c215b189f1a9a1f35214118751a7f1f21210e185b1a521ff820fc170d1a081fbd206f17cb19a31e8220f4169819561e50206616b919231e1d2062168419e21d05204f166b19c21d1f20a816ad113a1b181de202961dd0201e22dc1ab02030244c258820ae209824f425fd20aa20a22418261a210f21c9244b2689214f21f1247c26f5214f2106259126e2212121fc249126af212521fe24a426b4211421ce24b3268e2117211025f3267f21f820f524c6265e21d02191257a2732224e21a525af27ce21a420c225fa2714217921ca26c82811225723f728922a0424ce24412bc12c30254a26912c0e2e70269d262e2dd42ead26db26692d072f7026a7262d2dcb2e2726d225cf2c682e77256825382c902d2725af243d2bba2cba24d823de29a82b12247b22e128ae2aa2225a212228a4298e214f2161265e28822162208d253f288c20372036255d2741206b1fb5248c26471f121f3c24fb25701efc1e4824f325431ea21e0e24c525aa1d7b1eaa237325721d341e31232425091d091ec322e424bb1cfe1d9e22c124871ce21d50229624471cb41d0d225524111c7d1db8210e24ac1b181d582180231f1bb91c142118239a1a901cd020c0223f1a681c9c206c22e919571c6a201922b319361c2720cc216919c61bc81f7621e218551b891f3b219b18221b561f0a216118061b191fda205018481bf31eb4205e18d41aad1e7f2019187b1a831e6d206917401a331e2220f816a719c71de81faa158019a61d2020fb1567138916f1174506f31c29209f20381ae11ff723382508206d204b24a425b82075204d24ba25d020a1206724d82500219e207124e525fd20c0207a24ec252121f6208c240d264a2126218e240a266a21ff206c24e1252f21ff206324c3252f2118215724b22549219f20d2235825dc20822065231d257d20292072228d241520f91e3421a223a91d2d1e5220af22c21b2c1d761f46229f19db1c102081224417611c772034231514411de32124240114dc1d46224f25cc1412215f266b28961bfd2100286329011eab20e127af28ca1e4319f324ac25a518561a9421ab24651a011ae620c624251ad21f8822ed24741f0b20812215257a1f131e61239d25721d411e2823ae25851d3d1ea32223256b1d6b1e8c22f1247b1db11d39228a24c81c8f1d2a227e24831c051e54229624b71c321e43227f24c41cc01dfe215924431cb41dc5211e24f91b791d6c219c23a61bf21c26214923c61a7a1cea200123211a691cc920d422ea19771cb120aa22dd197b1c95206222c2198f1c66202222ba196a1c3120c7216c19b91bc81f4d21be186a1b671f13218e18721b441fee209318511b491fea207e18651a121fce20db17471ad41ea420b617211a961e72205b17461a711e54202d17fc190c1e6d20d8162f1a5d1d251f5f160000771243160000f91e912231240a1fa71fd223182506202d2016245f25552026201d247f255d203b200d24722564204920ff235f2563204c20fb23502556205e20f923502559204e20d723542549205920f3235d2544201c20ae237325d51f1c1f8f22d224931ebc1e93210324d91d4a1e2f2189231b1d1e1d84209f22021c9d1c4c2062229f1b5b1c35204d22901b0a1c422030225b1b781b402012221e1bc31a1120d721721a091a731f8121c0198219ed1e2a212c193b19751edf20c3189718ca1d9a20d71768189d1d9e200717b7189c1dbb20fd168319dc1df320b417e31b421f002266190d1d802030230f1b0c1de420cd23c41b201d4e213924291c621d93214124721c731d79211624801c721d7c2117246c1c831d94211c24651c771d9e211d24341c6e1d98212124061c591d8c211224c71b4d1d722100248f1b2c1d4821c2233a1bfb1c0c216023f61ac51ce520f822881a801cba20b9222a1a691c99207b22ea194a1c73203d22c119221c55200a224f19191c3020d7214419001c0d20af210719781bd31f73219618461b881f412177186a1b701f26217318651b401ffd205518611bfb1ec3205318e61be61ea6208418581b9b1e8020fc17711a2c1e40200117f719791da31fa716951a131d281f3a1648055a178919ef0020202b235524831f10208b23cf24f91f18207c23ce24cd1ff51f5223c524951f08205a23d724af1f13204d23dd24a61f0e204123e624801ff61f2023e424401faa1f2a23e824df1e511fe222b924751eea1e06223224011ea11e9621b623911d791e9d21a1239f1d4f1ec121d423d51d351eeb210124d41d231e08221124ef1d2c1e2c2216240e1e4f1e5b222e24471e701e73223e24681e5a1e5e223a24521e5f1e57223924571e351e3a222724171ed61d03221124ba1d4a1db921cd231d1dee1c67218e23b31c8f1c21214423371c261ccd20fc22701b0c1c7120ae22071bfd1b1d2072225f1a7d1b06208022c319b01b2720a022ea19181c4b20c8222f1a571c6d20ee226f1a841c91200523911a961ca02007238a1ab21cae200923901abf1cbd201223801ac71cc8200d238b1ac81cca2006238c1ab31cc420f0226f1aa51cbd20da223b1a881cae20b922141a691c93208322ca19481c6f2039229f19101c3c20ea213819c01be11f8121de18461b571f262177180a1b091fea203918c81ac41eb720f217921a9d1e9720b317521a7a1e722068171c1a601e5b202917db193d1e4120b216a8191f1e27207816a519eb1d0a204c16d519d51dcd1f81166719721d901fdf153c1ab61ddd1fc716d323bb1ec11f5b216f27f02170247426fc290524822432295b2c82245f25ef2b632dcf24a225e82c1b2ec524ce25792d672e9824a225ec2da82e35251c26402ec82e692561265e2eb22f59270a28ae2e5730ff2a232c6f2e1331872fc830602eba315e326134852fac3032297a2ced2e053083251c2d122e0b2fb024d92e9e2d932dc9243030722c902bb924a530082ac8270025e1301926ad23852534313b22971e2b254f31891dcb1d90244e314b1cce1cbe236a315c19871af8228c31ce15a31921229d3189147f1af421ad31ad1455199f21be31ae1331185521bb319011f8189721b83150124e157521ab31240eb61a0e24f4316413ba1c8d24d931f014281ec0255431c716a120f5261630aa1ae9204f287c2dc81c081faa260c296b1c2c1c4b229323f319621b7d21d1227919b51bc3210923b619341c6321e4223b1add1b3321dd22d419791b2121ab228a19c41b25218322a5191d1bfd2070222c19121bba2046220a19c81a7520bb21bd18761a28202e216d18121ae51f17212818e919d61f0521ed17b319c81fef207c17c0199a1fce208d177119461f9220fe164919ec1e4c20ca16ef18941e0e203316e2185a1edf1f2316e618411ec01f28160a190d1e681f30168d18c31d971f7615e5185a1d311fbc152f1f441d471feb1cd824f1236725d2244828e124d82543287f2a7a257b26602a592c30253f26252c652d02250b26112d4d2e28254426012ee12e1526c527752e752ff5265c281b2fec2f10280b29702f4730572a172cca2f9430382dcb2ef32fa630912d712fcf2f3d302f2ade2c5c2f7c2f5428e42c9b2ef92d7926362e302d792cb525fd2fc42bb1290b26c530dc281426352625313125f9224c265f31f5211a21ad256e315b20561f02257131da1dfc1d52246d312e1b5e1cc3238c316118171cab23a3318217c71d2e24c2314d19511e5124d731cc191b1cb823c931e915541d9623c431de15b91c8b23c431ab14bd1d6524e531f816b91d0325c831f316511d5325ef3028165f1c81254f2ecd15211d6725752ada18f41df424a7273f1ce71d0224c225b51c071de122d324031c531c8a226124c71abd1c842262246d1b5b1c1a221b24d31a2e1cb0217f236f1af31b3b21b522011a871b3c21ce229419cb1b2621cc22c7199a1be02055228719d81a7a20af21e118361a3d2072215718351a242042214018f619f91f1921ff17d419c11fef20d117d119a51fd220a317d319821fb820a617a9193f1f8c2046178919071f5f201c175519c41e3c20b3164219631ee01f7516e018e61d961fb61505195c1d231f0815f41be21e2f20c61819222a247f25ac224e25f6241726812551283f2541267b28282a802590264d2a362cd825ef26402c3f2dc525cc264c2d322eb1261b282b2eed2eff27e628e52e9e2fa528ba29952ff22f9d29242baf2f2b30922b112df22f1c306d2bf42cb72f722f432a792cfd2e402eb6283d2cf52dc72c4128562d6b2cc02a4627c72e252a532835275c30e0273e25cc260a31b324ef23f12679310023a9227f269f31e021241f59258a31001e67209625c031e61eba1e0725c431fc1cd11dbb24d231f71be41e1d250132861c6d1e20251032091cfc1dc9240a325a1b101eee240e32461b0f1ee8241832191b991ef7242032bb1b181d2825cb31f819401dc6245130731a621ccb24f82ce119e91d092576294c1c331ff624d027be1d511e3c245526211d331e0a24d425081d2e1d62232425221c061d0223d424df1bd31cd322ac246c1bbc1c53223324271b4f1ca4216623821a611b642136237819a01b3e2101238b19531bfc2077225319fa1aae200d22f918951a7e20db219a18931a6720a4218018301a3e207b2126180e1a16204921f317e119ca1fec20b817b6197e1fb02056177919301f8a2008174a19f81e6920a5163319e41e5c2088164919f41e5d207e166f19bc1e5320ac169e19de1da51ff315fe17f51db41e8f13f4208e24fc25e921a62246257b265e230525af254d277e257627d1250827f427b929dc262428052ab12b5a277b28fb2bcc2ce127c128e92cd12d53285929092e762ef228592ab42ecd2e5529d52a0f2fe22e61292e2b0b2f972e7c29432ba72ec82dc728952ac12d7f2cb928972b7a2ca32a3228142c832aad286128882d75285b2691273b2fe0255c24f526a3300824c023f92673312b23ff224227d73178229721af26e2311721d3206e26183265203821b2263d32ae20682054264c32c71fa01f7b254d32831e951f512566327a1e44208b256e322b1f7420b8257d327b1f2a1fb9259532eb1d67200d268432461f0320fa25c931a01e841f9e25f22f1a1ee41c2825172cf11bff1e2825d028ae1dd81f0825fd275e1e181fd3247227c21def1ea524ff26a11dbd1ddd239525941c1d1d1d230625021c5e1cd122bf24b81ac41c86225c24551bde1c0822e8235a1b4c1ca8218d235f1a231c8d216223041a131c60211023ed19531be92062223919de1aa4200922cd18ff1a9720ed21ca18c01a8020c7218718b71a6620a2218118601a3c2071212f18211aff1f1e21e017a1196b1fbc201317a1192b1f8d20ea164019f71e6f2073169f19ef1e5220e7169719f31e8d20de16f119a01e6d20cb162116da1df81ef811f31f33243d25032068215225f3262522ae232326a3275d24ca244126cc274f2587269026e02724276928c4262f28c3281d2a3c2781286e2ae72b07283f29282c842c7b28a829c02ca72cd328382ae52ce22ca3283c2a112d8c2c3629fa2aa72cc82bbf286b2bf72b272ad528482b202a64286728412b4f28df265c28232ca5263d254028a22d11251924d227e92fed231c247e272231f3230c24dc27ff31d423a3226d273c325322a7219026843263210a237e27ab329c22e321be26a93272218e202e26bf3226201221d02601338c204121aa26fa32b62007218b26fb32822008203d26fb321d1fa0207126a4322520d61f20265531ea1e241edd24272e551df81d10254d2a2f1d53208f25a128631f21203d251f280e1fb01fe524bd27911ea31f97240c276a1e561e0b2410263c1de71db4237e25cb1c881d61231f25691c571d1723e7241c1c0c1d90227e24a01bcc1c0d2214241c1bad1c94217823ab1a9c1c4a211223711a541c0121a422ed19061cd6206a228219b71bc32037222c19eb1a9020f5218b18a61a6a20b3215d18461a2b2058210818111a022029219f17ea19971fe9206e17b1193e1f9f20fe168319031f7020c5169b19f01e4e20e316d119ce1e73207917261ab21ead20db166714871edd1f950f112024241825c01f7121b825d6272f222524fa267228c524db24cc266b2873252b25fa266e28ba25cd255327a52859261e276427b32896279528c4270a29e2287e296428bf29db29a029ea288b2aff29022a0829a92a522a7d290929d52ab2298a289a28c72ab6287127a128b82a9e27f9255b28512a0726bd258628ef2ab625d0248628672cdc246b230b28f42d7d230e24ec273d301824492451289c315324172465289432212488224828e5328022aa22062805338a220f210b270233f720cf208826273395209f21d8264f3347217221fc2655330921d821d32662336721062096264c33711f372072269232ad1f611fe925a730b81e451e3025ec2c9f1d901f65255e29ac1e2a20cc25a5283b1f6c206b2522288e1f911fef24b7275b1e3b1fbf243827f91d0f1f7a249b26a11d0a1f60243726841d941d4d2328254b1c831c4b226724d11a5d1c20224324781a251cec211e24071a361cc721e223201a131c88218223b219e51b4a2116236819631b0321a8220f19441bcc204b22df18ea1a8e20f821a318c71a6820b9217318811a4820862145186e1a3b20702139186f1a252051212218681a0c202c211d18621ae41f062103184b1a911fb920bb17141a2b1fc22077178b1af91ec9201d17ab0fe51d201f090b152042242a25e51f8022f525f6277b23892312278e284824d1231727932863241124fe26782882246b241b27a528e52402258f27de287b25bf25f4272e2935268a2615287c29102771264428c529de265d278e28362ad927db267a284b2a4f2765263328e329ba26a3259028962ad92577259728c22a98252325b028182b2f25a9249d287f2bb4241d245f284b2c272471239427d82d9e2313243d287d302c24fc238c281f32162484222c280133ab22f222f22764330323b6210c274b33af21a621da278e33762185220028d53336227d213527b13327215b21bc269d3307211f20d7265b339f1f732097271d321d20491f5426282fbd1e691f6d25ae2abf1e97207b25c6280d206020cc256528791f0921412513284d20e51fd0249627a21e7f1f8b24d426311e471f41245a26e81d981e2024e525421d571e2824d025f81cec1dd2237f258e1cd91c9a22ad24531b8b1c09223224bc1a4a1cb721cd233d1a351c88218d23001a231c79216123c819011c572123239919e81b2c21cf226a19381bc8204a22d718ee1a6f20dc218d18701a432098212318661a282062211c18341afe1f3121cb171a1abb1f0721ab17e119621fd5203817021a351fb1206117b719cc1ed72005176619ef1d41206915f605a31d8e1e6602a91f592437254d1fc2214f264428b5228a235a27b528642405245b27b928a02424247827c128b52450248727d828d724a324b027f0281325fa24ed2742297225392541288c29a4255e256e28be29cc250126c328382a7c266b25e128902ada250825a0284c2a4b25fb2488285f2a3d25df24c828cb2a0e259525b428d32ab7257c247f28fc2a872464248928242b6f24dc232f28682c062437231628fa2d6223c9237b28a830f823f8222d283f320923ab2224284033a322e021b227b033c42102226c27db33cf21a7223828143457221b222d280934bb215521d027da33ee20de202328ec3280203a20ad26ad30d11ffb1f2b26e62c441f30205426b529821f5520a9258f28861f8920a6255a289e1f4e204e253c283b1f0a20aa247727c91e211f6e24c326e31d551e45245b26241dcf1d2124ea258d1c0b1ebf237225a61cbb1e1a23f724fd1c8f1e85227624dc1cc21d31225524301cfa1cf3212b24191ba81ca021e823821a791c6f216e23201a731c3b213123f819761c1f21db22db19491cec2081228119d21baa203922ea181e1b7620dd2179188f1a40208a210718431a002031218417fd19a31fe9203017f419621fcf2025170d1a3f1faf204317f819201fc2208017591a0e1e901f5d16e715761fab206b111220b024be25fd1fea214c263328ce2299231d27bc287a2408246c27b928a3245724a527e628ef248a24fb27322929257b2432288829f724c3248e28f1293625ee249d281f2a53250125b1282b2a67252a25b028412a81255125c228742a84251725b828812a48250a25dc28d62a28252925b228a42a5b2587254628172abc25b3242a28702acf2428247c28d52a412424245628f72a3d2435231a280e2c602382224428bb2d92225323812875304a2386225828e2317e2249223b28e5322b22ce21ca27a0339d213b223927e333f021d9219f27ca337d21d221aa2719337721b02030272b316720651f86257e2df11e6a20d526d32a15203f202a26ef28da1f11200a2614294a1fd21f6d257028e61ecd1f1b25e027aa1e941f1625cd275e1eba1f1e258a27621e491fda242427d01d091f8324a5266a1dc41ef423bd251c1d081e6a232325781c851d2f23f224031c281df322cc245a1b2a1db22295245d1bfa1c56225b24f51af61cf6210a24cb1a941c75217723241a741c2321f422d9190d1cdd208c225219811baf205122d2181f1b88201d229318c11a6320c4213e18671a2b208421dd178d1a1b2061210618d81ac21f012102189b1a0e1f95208e17a31b0a1f86202718d21a861d0f1f1116a0166320d4219313281da922ac24351b882260261b286c23612305278f284c24c8236527be2888242e24d427f928de2459240f28382901259224412885293225cc246c28ca296225bf247328e5294325c7248528062a3a25e3249828242a59251825a8284c2a80250c258128322a4f250b257d28002a4e25b7245e28202ae4240c254d280b2a3d2553242328602a5d246c24ab28242b6724da24be28642be624bc235328fb2acf23dd22ee27562bd52235239d28ff2c2c234f237228fe2e2c2373222428bb303d22ec222b28f9318022112216285b329c2196212b27da312a217921f927e630fc209d205827682e33201d21be26402ba8209d202626402923208b203426cd2802208c20d6259628e51f4620e825a5284d1f7820dc258428a21f28207f252f28fc1e262068250328f81e511ff72452270b1eeb1e6a247d269e1d6e1e0e24d925211d041eca238c25b71cd41d8e2351257c1c881d39230a252d1c681de622c124dc1b2f1d8a228424641be11c28223624d21a911cc221c623411a4a1c5b212f23c1190a1c1a21d5224e19b41be72082220f193e1bbd203422a7183d1b9d2003228c18661b6320c4218b18c61b3d207e21c618fe1bb61f0221cc18581b181f82206818551a9a1e5220c7173b1ae71d02203f16f110d81e3220d60a282076247d25ec1fca2131262f28be22e222fe268f28272460238b27cf284b24ca23c927f2288924d823e3271029832424240a283629b524642441287329de249f247528d8291f25e224a7281c2a5825f524c028402a5b25cd24b328522a0d258b2499283e2ab7247f2498285b2aaa2481249c287c2aac2466249f28852a802482249e285b2a8d246b24b728e12a6624c4247b28812acf24d9233c28662aec2395236228c92aa7234d230628f4294423d5239c280f2caf235b248028092d36243b2325285d2eca22be2155279f2e3b210e219426eb2d9a206120a226a22cfa1fe21e8525f929441ecd1f11259e281a1fc22041260d29442092202e26bc280820c320c825ac282220fc201526c42842204120c9257628261fa71f2b2502286e1e651fda2434271b1e541fab24c126f31d9d1e65245226461d271e2724e925d21cf41d0e24ac25951cc91df72391255f1c831db3236925161c2e1d2423ef24881bce1c64224b24da1a911cee21f923621a611cc121cf23ff19671cad21b123e819311c75215d238119c31bff20a322fc18201b6b20cb217a18961a1a2058210b18311ade1f21216e17381aab1f042176172b1aa71ffc203a177d1aa01feb209a17441a651fc8202a17aa1a071fba20de160000e119c8190000a71f6d246925a51e3b2338262628cf239723c4266d2887244a237f27b62831249023a527d9285a240124ed2712299b24432426285b29c8248824572898290625af247f28db292025c0249a281a2a3225d724a528242a3a25a3249128362ae024a1248b281e2abd24b1249928512abc24a52471283b2ab02458244228e829532485247428452a6f249c24aa28892a75246924ba28e62a54247e24b128e42a6824f0237928ae2aca237d2356287b2a3e2375233428c62a1b23c4230528772a662372230c288f2afd22e7214627922a75213f21fe26a52ada202221de26c829bf20fa20752630299a20302163260829cc20572017261029c81f7a214526e328d520ff208726dd2844207820c1257e28821fc220d3256028dc1f402086250c28e61ef51f26257e27761e881fd3240027e71dc41e772488264d1d231e1424ec25b91ccd1dbb239425621c951d66235a25231c401dfc22f524a21b361d8a2293246e1b1d1d1c224124261b181dcf21f323fa1af11c94218923a11ac51c5d213123431a7a1c2a21e922e119191ce020942244198f1bb1203122c018061b6a20c0216a188f1a2a207c210718b91a1a205b2121186b1aff1f3b21b417691aa91ff32083173c1a391fe0204e178f1a201ff720f2160000c91afc1a0080b01e0f24ea24ce1d4921022615281522c0221427a32807248f23c327fa286724ff2305282129a8242a241b284f29cb2451243f287829e82475246028b32901259e249a280a2a1e259824ad28362a0725a524ce285a2a0425a124d828702ade24a324c728732abf24b424cb28782abf24cd24ce287c2ad924dd24d6289f2ad724db24db28c72ac424b324e628e62a8b246c24db28f02a47244824ce28f02a242419249828b92acf23d62369289e2a782351232928822ade229322f527552a2c22a4229f27cb292422b922a727b9291f22f8214a27a8296f210c22562792298221fe21882786295f215e217f27b329d0202b2104275f298f20bd210e26c028fb20ca20e425732817206b20e32564286c1f7120c7255828561f0a20ea247627ac1e4f20c624ee26ff1e1a209a24a0268b1e2c1f7d2464269f1d931e602438260f1d2a1e1824be25a81c0d1e892330257c1ca51dff22e0241b1c6e1db122a624be1b661d582265248c1b211d05221924061bb51ca121a523721a5f1c58213923dd19351c2021e1228619081cf2209c222e19ab1bbe204f22d118171b7420e5217418aa1a15206d211818cf1ade1f32211618011bc81f222134183e1baf1fef203e18d81a491ff1200218611ad31efd20c1160000c8195f1a00808f1ecf23e324c91d272254263628fe22af22e4268228f9232a235627b9281f2442236627c6282d248023a327f4285124ad23eb272c294f240b242f287e296c2434246528d529992449248528ff29a12448249a28242a90246324b5285e2a9d247424c928892a8f246124cd28b32a6c247024da289e2a6b243c24b328a32a28243624b128992a03241824ad28b92ab0233b24c728d02ad3233324c828df2ac4232924d628f02a9423f623ab28d32a23239f2376288d2ad5222d232f28352a55226b22d227cc29aa21b322cf27d429d121c122d327c329dd217622ab279c299c219f2171277f29e1205f2125274329aa200821b32611294c209a21c026e328b520d1215026c228ce204a21e82578285e20b920df255028cd1f4920aa252528f51e41203a257c27e81ebe20c8246c266e1fa81f6a243326e41d391e0724c125b31cfc1d97235e25851c9e1d1123e3242a1c4e1d97228924901b371d3b224f244a1b5c1dfa211c24571b641db921dd233b1b161d7a218523ad1abb1c35211223141a141cce207a222019451b6220ee219118d01a2b2096212f18ab1a1220642118189b1af21f4a21ed17a61abf1f1c21fa17701a941ff4208b17991a641fc520bb175a1a281fba207117041a721e982008160000c919b41a0000ad1ecd23fb24141e3d2286265f282d2300237527d9283a2402239527e828212421239127e6281a244623b32700292f248223d7270b293724a223eb2734293b2404242828702965240a244e28a9295d2453249928042a9c246724cd285b2a82246f24df28892a7a246724fe28c82a52248224fe28db2a6c249f241129d82a67249a241629022b52248b242b29252b332465241b291b2b00245c240e290d2bd1233e24ff28f52a9b231224de28e92a4c23c623c028d22af82253238b289c2a7622e6226928592a2f228f223128112ac9217d221f28e929ba2162220a28cf29a221f021d52799293d21eb21a72775293921782119274529c0206721092712299d201821a426cd285a20e420262678281c20d220fc256728f61f28208125fd27dd1eed1f272547276f1eb71ff624e826271e841fbb24a726c81d211f69244526621da01efd239125e91cf51d3023fb24551ca11dcf22bf24031c541d73227224991be71c1f223124da1a9c1cc721e323501a711c76217423f5196f1c49212123d219531c1d21de22ad19271cec209d225619061cc72073220e19d31b7f201c22ea18ab1b1b208021b618231c951f0021f718801b5d1ff1206518001b221fb6201a18541aa91ea3203d17c319281e8d20f0153f190f1fdb20391416217225de26da21aa21ea25b427ad224422a8264f286323e72236279f2805243a237427d02828249223c42702295b24b323ed27272960240a2435287c29892421246b28cd29842428248828f5297d245b24b8282f2a95247424d5285d2a8f246a24eb28932a652492240b29bd2a6b2496242929042b6f24aa244629332b6124a1244a29492b482498244a29472b1e2473242e29322bba2358241c29262b8b232524f228f82a14230724d728db2afe22ca23c728cd2aa7227d23a328a52a652220237528742a1622c7224928412aca2198224928202aba218b223028fd29ae217c222628eb29b92161221f28cf29a121ee210a28bf29262175219e277a29a920f420d626d8282920c8206426a62804207320dd2557287a1f33204d25c627f01edc1ffd243a277e1e8c1fd124e726051e7f1f95248326e01d371f45240f268d1db51ef723a225f91c161e64233325831c931dfa22ef240e1c661dae22b024b31b111d58227a24151bcc1ccf21fb23921a451c27211023ba19071ce320b7226719a01bb520762201199a1b94203222fd188c1b87200422d918a51b7f20e921cd18991b4c20b921aa18911b20207921a618a41b002043219618941ba21ff6207118211bec1ed3201318981a491e81200d168418d01c141f8613bd209b24a3252f21af2193255d274c22ad21ad25622773220c222726ec27df225a22b3264e283823a4224127aa288c230423c1270b29e023702333287b291f2414248e28f72985245d24db28512ab6247b2403298d2ac7248f241029a62abb247d241b29c62a7824b4245229032b8c24c6245b291d2b7b24db247029362b6c24bf247529402b1f249e2479295f2be3237d246329602b6a236e245329622b112357244229512bcd2249242d292f2b79220f241329292b2222e8230c29292bf921ce230029182b01229523ea28fc2af1212123b928bb2ac921cb2289285f2a9c2183224d28152a612154221a28c6295121fb21ae2750291c21aa210327e228d6204d21982694288720db203426652826206720d1253528651f412054259427071f1520e824cb26a11e981f93244826f31d3a1f5d24fe258f1dbf1e1924a325181d3a1ea6234d25b41cac1d1b23e724341c331d982298246a1bf11c3b2253240c1bbb1cde2113249d1a721c59216823f619191ced20d0226119cb1b9e20642201198b1b4f20ea21bd18961b3120a421a9183d1be21f6d215818071bb91f53213718b71a831f3721de17961a771f1d21b817911a711f12218217a81a611fe1206c177d1a4f1f03216b17aa1ac31ea420ae162618fa1e9f206414912001255a2620211e217b251a27e321302154250e27e521652189255a272122a9210326ed276f223222b7266828f422bf223727b72892231823bc270d29dd2393231e2864293224d2236c28d2296324f523d8285b2a5a2463244b29f32aad24bb24a129632bc624eb24eb29d32bb024ea24f4290a2c6824fe24052a0f2c1f24dd24ea29042c9f23ea24e229f62b4923b024c229de2baf228224b029c82b2c224e248c29a92bc621412482298d2bb5211b246a29762b8221eb235e29652b4f2196234c295a2b32215c232829392b3f211a23f228e62a4321ef22ae287f2a6f21ec2265281b2a9e21a2222e28cd29922124220928a5295521c721b427592919215d211427f528cf200a21a526af28722093201f265f28f11f45209d25ee274b1ff21f16250e27ad1e801fa9247c26321e091f4824ee25831da51ed0235725051d3f1e3623f524a11cf11dc322a724521c921d64226924f11b631d10222824871b3a1dc021e823281bf81c7e217c23aa1a8b1c2621ff22f719331cce2089226519af1b76201522f018fa1a3020ac2162188f1af01f5a210718841a961f1621d217651a4c1fe7207e17991a301fd1208b17b11a121fc220a717f81aed1e9a20c617f41ac41eb5208f17b51a5c1e7920f715a8148319d11ec20fa1206324df250021722008256526ed20e8201b25b9268221eb202c25e8268521442174253127e921d621e225bf278d22352243261828e12234228c264f28e02285221627b1282223a423462897292e242024e7287f2a742409243c29fc2a3e24c324ef29d12bce2423257c2a462cc0245c25bb2a742c94246025e12a912c36245f25e02a8d2ca9234025ce2a7c2cbf222125bb2a732c4d22f724a02a6c2cd121e324952a602c9721d024882a572c5e21b324762a4c2c60219224502a3e2c5b217824362a2c2c7d215924082a172c9621f823c029e22b92212a234e29542b4f21e222dd28b52a7d2163226d28232a5d211d220c2893294f219f212f2701290a210d21832690288720a920062637281d20292078259a27571fca1f0425e326a71e421f97246626191ed31e4b24f8258a1d7c1e06249425fd1c511e9f234825c51c211e1f23fa24751cac1d7a227f24201c231dd4210224531bce1c66217523941a9f1c1e211a23331a751ceb20cd22da194a1cd020a122a219321cb32074226419e21b81203422f418c41b66200722c518951b3e20b821a818ae1b36207e219c185d1bb11f3c215018cf1a261fda20fa17431ab91ea1202917791ab81e862067176b1aba1eb0205717861a421e51208a16000002144f19000055203f2488259e209f20ea2477260e2114212925a4268e2162214a25e326e4216e218d253c27f121a621b32571272e22b121ab255d273a22bd21bb2588273322532233260d28be225323ff269b28cf230223d1272229782358238328ea29ee236524082aaf2b8f24a225ae2bdf2cb0252a26622ca42d70258526a32c072ea6249526b62c2b2eb6236e26a42c132e432222267f2cf52d48211b265f2cb52dbe20b6252f2c902d4620ae251e2c762d17205e25fb2b672d04207d25cd2b3c2d6b203825922b1e2dca202825552bee2c7621b024012bb42c062256247c2a522c8d227d239429a22b4a220422ba28902a6521ef20352725297e209120152650284920c020a925f1276420a5207225d22719209720fa243b27d71f3d2080244326001f2e1f17249c25d41de21eac235f25651d751e41231825f81c301ede22d224961ce91d822296244c1cb91d3a226624141c861d03223324901b341db221e923fa1a0a1d692171239e1ab91c1621f722111a3b1c9f2058226f19681b3020c521a718e61ad21f6b213d18b01a951f3b211b18791a711f2321c417561a401fff209a17101af51ebe20ef16021ac11e9320df16dc19831e6b20b316001a381e2520b116d6190e1e3120ac168519701def1fb01532163f1dd91eb380101f96221924d51daf207c24cf25ba20d420c9244f2625211121ef24842666212421ed247b268d216f211c25af26f22163213225c026e52134210925b5269f2158212325ea26c5217c2157252d27c5214f22552575278c22ae21e9253f27bc2136210a2616287b21a3231e29df2a2e24af26202d602eef260729612fde30bc27cd297830ce31ff248c298530d8313b202d2936306c314319aa28d32f0a31378c7d283f2fb53090984e28c52e61306098da279a2e5330188b9a27722e423095196c27812e39304c200b27172ef22fdc220826162de32e37243a25022c532d77241c24f729d92bb72358229428332a2322cc20e826e328a420cb20e7251a289120d11f172555271e1f061f8f249f26321e011f47244726fb1dc51e1424ef25971d841eba238d25321d261e29232725bb1cfa1de122e9246e1cd01d76229c243a1c9f1d20225e24db1b671dd6212824661b131d7721b623f31ace1c2d214223721a971ce620e322071a691cb2208722aa194f1c7620292289191f1c3520d4212e198d1bcf1f7721a3185c1b961f41216a18531b601f0d214b18361b331fe8203a18581b1a1fd0203318041bd31e98200318721a8f1e7e203017491a361e3420d516f919021e222028167d195e1dd11f311500003517c9180000a81d9821e4226f1c152011246f252e209c206c24cd25d920ba208124df25f920dd208e24f8251d21df209a2417262021f220a624272622212221b12439262e21032185240f260f21172173240726fe20a72026247a256f2077204b23f3240120f71eb421fe238e1d351c831f83215618041bfa1da320ef12891aab1dcc20460e841a4b1e032170123c1ba31f9d210115ab1c1121ee22c7171c1f03243c25ed1a4522a6265927a31ecc252c2b7c2b2821892adc30c6312724f72bd3325b342c21c62a45321134f91c88293b3095319f19d426af2c732e971dd91e8029882b1c1cba116d252428f910fc15c122c8257315311cd121d424291b2f1e04239b25481d321eee22a425341d491ee6223325311df91d6b22db24c41cff1d6422a624b31c371e6f22ab24b21c411e4a228f24a31c221e332276245f1c071eeb213f24211cca1d9121d123ed1b1f1d3e216423de1a961c04211f23051a751cdc20e122da19961cb920b522c319981c99206522a419bc1c6f203322d1197f1c3520cb216519bb1bb61f3a218718961b551f0e217218b31b351fe7208318921b181fe6206f18ea1a021fd1200d18b21adc1eb420d8174c1aa31e87206117551a721e68203e17001a131e5620dc16f018fe1c3f1f88140000f8132e1700009d1f1c237b245d1f06202024472501205420262483254f2061204224b5255c2073203e24ad255e2076203324a225502077202324842541207d20f323692526208020d323582509209120ac234b250720cd1f51227324711ebb1ddf20f123691c1a1d8220a922121c4c1c4a205722b41b1d1cd3208122181c4e1dcb218d23941d131eb8225724631e271f9c23f024521fcf1f0b244525e21f0b2023247725ef1f0c2013246525d41f9f1fbd232225431fd41e1623b724691e8c1d13221e24351d491c24211323ed1bb01a2520a821ff192318281e8f20f3166c148d1cbf1f6e120318ab1c5120b314a51a671ef521c9177a1c74206b23011a381d73211024e21bab1dba213924851cd31dad2133247b1c9f1da7212c243f1c891dae212b241a1c981db2213424111c7c1da0212224d21b731d85210b249e1b571d6121d423501b181d1a217523d51ad81ceb200b235c1a941cb920b922031a891c98207922d4195f1c692036229e193c1c4e20ff2133192f1c2920d3210519161c0320a221e718b91bdb1f7b218618691ba01f4f215718751b851f32215e18a21b641f11215d187f1b241fe0202e18ac1bf31ebe204718611b901e7c200318ea1a281e2b2084174f1ad21d0620dc16d81baa1d471fc1160000051699180000ff1fb223cf242b1f2a201f246e25d21f3a2003244c25d11f2a20c6232825b31f3420b4231825a81f2e20802300257e1f0c204523e924241feb1f0b23cd24fd1e4f1fb8229e243e1e651e31223a24761d391e8b216b233a1d2e1eb121ab23741d781e30221b242a1eb91ebf227424b11e0c1f3b23c0241d1f671f95230425791f9f1fd9232825961fcd1f01244f25a71ff41f11246625ce1fef1f0d246d258f1feb1f0e246d258c1fbf1f04246525461f7c1fe2235325071f261f8a2319259c1ea81e0e23c024281e201e7c225f24941d541deb210824c71cb71c352145233a1c3d1c7b2097221f1b8e1b1a206922eb19f11af41f582225194c1b12206b221919031c3e20a2227e19461c6520cf229c19701c8120e922b319a61c9a20f822f919cd1cb5200f232b1ad31cbd200a23331ace1cc02000232c1ab81cc020f422101aac1cbf20e322011a941cb220c422e2197e1c96209222a519641c74204e2284192d1c3f20fd2121190c1c0320a021db18bf1b991f52218a187e1b471f15214918241b001fe4201518e51ad41ebe20b017ae1aaf1e97207317881a931e7b204917291a6a1e5420b216f919471e3a207e16ee19081e1b207216351ae11dda1f9216071aa31dce1f6216481a5b1d851f4c1677239b1d1c1e6e1ec22868229024b927992b98249d24462a502da424f3258a2c4a2eee245b265f2ddd2e2d259226dd2d2d2f6a25b326552e682f05263227532e9a2f9326fc27d92d55304b283829b02dab30d528f129dd2d2d31052e2c305b2e3b32e232e634a72fc0303f29572c812ebb302725442d252f3a30b824232f622e892fc5235530962de62ded23b830742c6d2bdf240931d129282808264f31a126e223902548314a2228209b231631671c0e1e3f2213313018e81e67225d31ff170e1eb92285315316c91ebe23c931b516b21e802306329e161c1e0a230a32b115431fea231c32c4166a157b22d1315a0d4618dc22d2313011991d472423321d17091dda247f316616aa1dd9254f30d61736216128052e571ce82158295e2c411e081da0253627771af01afb21ff230b199e1ce3213923b71a641c8721fb22621a8a1b6521ee227b19c71b5821de228b19dd1b5021d6229b198c1b2821bb224619261b0121ac22e518041bab201122ce18721a572065215218da1900202621af17c719f81f0f216c179419e11ffd200217a319bd1fe220ec166b196b1fa920a8161f19ff1e56204a16b818911e0420aa15b3186a1eda1f8215d318511ed21fa715f518231e881fcf156618ef1d8c1fe814e8185d1de01e5515691b93172e1aeb14d62642248e253a26fb29502557265c293a2c18252526942b762d0525c225e52c862e9425d326c22d4a2fda252c27892ee32fd3263e28122f353047289729302f7a30cb28172a452fa130352ad92bfe2efd30502de02e652f27312d2e1d30a32fe530e22a612dcf2f96303428f52c722f05305426542ec12e9c2e8c252230752da52ca825d430ac2b4e296f26523175287d25a3267b31c4249f22792694316021571fdb246531071ddd1d6c2363310d19d51c07237a31c7178c1c3023a23193178e1bba22b7314b16ce19d222d9315814f016a422e93136109a1af622eb3161146b177b22e231b6101218e622f031dc11821b4324f331e416ef1d7f244331f1183c1d2325592fc415a31dd6250a2c3818111ecf25ec28481bb91eec242427cb1cd71d2224c6257e1cb31cee22aa243b1bd41ca42271244b1bd91c77224724531b931c0322ec23c81a031c8f213e23d519531b4e2102235319b11b4f21f8227c199f1b2021a6225319321bce202b22ed18711a7a20c1215218411a4f2079211b18081a1d203f21eb17da19f41ffe208417c919d51fdc206f17bc19921fbb203417a4195f1f9720ee167b19171f642094164e19c71e3a2037163719641ee81f1c16fd18271eb91fd8152419931d641f4c153e189f1c1a1dfd0df1235224c225cb237a2768255c260527fd2976259926b5294d2c0a262b270a2cb22d1f268227442dde2ea9264e285a2e9e2f6b27b728f02e253052287d298c2f7c300629752ac92fa1302f2adf2be82fcb307f2bf32c1830dc30c22b112d2730ad30e32ad82c0f3050304829b92cbb2f142f58289e2d582e5c2d1927412fbb2c522ba427bd30762a3228c32758318627c02473279831312443232c27c1314e228c1e21258f31211dd71ed524b131c81c781da924bd312e1b2d1d8c24d7315b1a981dc924fe31b61ae61d13252232bf1ad51dfd243432ab1a171ed8243d324f1bff1c69243232231ae51c562437326d1a401d74253932e51a8a1d1c252531f61acd1cf624422e2b1adf1d8325cd2ae01b2d1f7e25b3281e1d001fc7241b27301d841e4d242c26ec1c711da1234a25301cab1d5a231425481c891d2b23e6242e1cfb1c91226c24621b5b1cf821e623551a3b1b8a2182232819391b502123232619351b0b219e220919e21ac8202d22b618a21a9120e6217318c91a7520a62174186b1a442070213718271a17203721e717e619d11fef206917c719831fb920421765192b1f8420a0165019031f652060164219fa1e662029167c190f1f702095167219ff1e5e208916a319431e2220cf15300af31b121c0202e321b1243e2671226924a825002794245a27c925402786277b29d225402761293f2cb72626281b2c9c2d3e279428582dc62e1a281029432ecd2f71288a29372f4e30f828682af62f81308829182b2a309e30e129d52b56309630d92a8b2c4e306730c129d42b3230b12f2429062c542ff82db328662c9b2d442ccc281a2ee42b9a296c2824301a29f1266f282c313926a9242f28cc312d24ce2308281d32ff226f21cf261a32cb20f320992655325e206721ef267232c4204d202f266932781f1b1f78256f32121e381f702597322a1e6f20a425a332731f0420b3259c32bf1e5c1ec025b632411d02203026ad329f1e0a204a264a328f1e85203326d630361fab1ee3255a2d521d801f8e259729e01df51f732576281f1e901f2e25db27d21db61ff9244e27ef1d911e43240d26f61c961d95235f25381ccf1c1d23ea24211bc11c9d2271240c1bdb1c49222e240f1b511ce921f923281ae01b942187239d19e71b582114238619871b092197222719021bd0204222cc18381bb8200d22d718ff1a9720e1219818d81a7920b0216518811a53207c212e18311a19203221c817cb19b01fd2201d17b5195e1f9c20d9168219321f88209c16da19201f6e20db168519121f8220a016061a5b1e12208c16b0092d1c3d1da6026c212b25af26a021a322f72567275b23c2248426062823259226c1264628e9262d29732781285f29a62bdc27cf28b82b152d33283b29fd2c2b2e6f28cc290d2e1b2fd8282d2af92eb72f4f29cb2a922f19309d29732b05301e30f529bc2b0a30442f5d290c2b212fc02d6529d92ba42d422cd528cb2b1e2c0d2ada28832cc4293328c9285e2e002885258c289c3043258424052892314e24b5244c2858327c241a23e3278a32ab220e224d27e132af2102230228f4327b22e5211627f33273219f20b42616333520b520c826453338204c21cf263133c0202121d9262e3387203320bb2635334b1fdd20cf26153339209920bf265332fc1f921f67252630771e911daa252f2cc11c6220e1251b295d1f14204c252b28da1ef91f0b25ca27961edf1fca243d27641ee91e47243e26831d531efd23ab25f51cd31d8f233e257b1c8a1d382307252f1c421dd522ae24a51bff1c46223924201bb21ccc21c023901a671c71215723071a311c3421ef228119dc1bfa209a2229198e1bd4205722da18f81aa3201c227a18db1a7320cb214f18a01a3420602112183e1a02202421ab17041aab1fee203817f819891fcc20fe16dc19551fa820de16cc192b1f7920cb169d19f51e7a20bc16c4197d1e5c20c71599140e1d2e1e060c6121212578265b21cc2253261328a123932465279b28f1247a255327b828d6257826c427bc28ce266928092801299428532a33281a29622a2a2c7228d029342c012d10299d2a1f2d872d3429b82aa82d392e1729aa2a482ece2d77291d2bdc2dea2c1e291c2bf62c4b2b0c29952b422b3829b128052b32291028f9288e2bf9276c260729ea2c4d260f255128da2ef7243024b127e7301c2479248328473263243624b4280d3322244e23812831331023352360284f33f8228e21812758335f2174215d278b333221eb218627ad338e2114228f278f339f21972172278f3317216920ec269033e81fe920b626513367203e206f260a327c1f5220f0250d2f811f2e1f3726ee2a221ee1201626df28192088208d254a287c1fdf1f3725ff27641e421fed246e27ca1d591f9f24c226c21dbf1f86247226f61d311eb5237525ad1cf61cbb22b6245b1b991c70227924af1a371c31224e24031a4c1c06221c24011a301cc221cd23bc19fc1b6d214a235b19631b1a21c622d918411bd8206022c318f41a962008227718d71a7220c8216518971a5420952124186d1a45207e2109184e1a2d205921be175a1a152035219f17561aea1f06219a17571aae1fc1209c17e119381fb420e4166c1ae41e9f20cd16ba13e91c2b1e410c7f218725d026a0214823db2674281624f9239e27cb286b243a247127cc28a0245e247c27b228b7246725f6270329c225e02638285f29222777287728e329a228ab29f128972ae229302ac928302a6c2ab22ae928702af32aed2a9b28292a302b892946284b2abe292828ec281f2b32282927f628302b3a27b026df28482ba826ff252e29102cf8257924cd28fb2c7424ae231928392f89234124422853312d245624c128ea3241242223442888330023d6235f28b233b0236622d527ab3330222b222d28ea33e1218522332811341f22c921c027043459213a226d27f433ab21ad20d126003442203c2199277933b1203e207b265c317c1fa7208525232d1b206020e425f129791f8020f625d5288f1fd42096256328fa1f1c201f25ff27ac1e921fb7244f270a1e951f5d249d26f11d171f3a242b26741d7e1e3724eb25e71c371e092498259b1c621d21230a25fb1b1a1d84229624461bcc1c25223a24d71a7e1ce4210624271a571cb521b523d2191b1c802154238219061c502100234819b01b0a21af22f018651bba204822c018db1a6f20ce214f18a61a3c2083211518411a0c20382181172b1ad61f0a216717111a971fe8201c17191a4e1fbe205117a4190d1faf209c167a19ef1d22207d1500001e1c5e1d00006121b82507279521ee2213278f28f9230c24d927e72899244024ce270729c5245924de27fb28d124ab24192819290b250f2532283b296425c5254e287a2926263f26632896299226b2265c28c5290b271328f228842a492859283329fa2a932810280529fc2a3728f42630295e2b1e27bf2516293b2bcd253125d328ed2a2b25c124a628302bbb24c724d828f12bc12493246228fa2c8d2412242428a32f0d2436249d28003222245c235a289a331e23a4236c282134642384220b28283436227622e827293411229c22572842341d22342223283c34bc21f520542751348420da200f283e3459205b209d271a33b01f19208b2617301e1f2d2145264e2b6c201620e225e828c01e5e20e2259628371f0e21bf2556281a202821f12485271d20ca1faf240427371ef21e9224b026711ddd1e7a247426481dab1e2624ec25091d781e64234b25b41c031eba22b2245f1c611d52226824ab1bc21c06222c24a61a7f1cc0210324281a6f1ca021a923f2195f1c6f215823bd19501c4b2100238a19031c0121a2220a199f1bc6205522ae18251b8920f7214918981a46209521ea171a1a08203c212617f319c51f0321ce16fa19891fde20d616321a621fc72042170e1a6f1fe0207017291a641e10202d160000981d5c1f000059210326532779210223202799280824e723c127f5286f24282403282f299b249c2413284b290b25f92427286a295f25fe246228ab2952254125da28052a8725b425f528482a0026ea250f295e2a38266b2611295b2aa926dd260d29b62a062747263329db2a6d2698251129e02aa5253b25ab28f92a48251f25f528072b1925d524cf288d2bcf24d22404296e2bcc24f724a4287c2bf1241f2441281d2d1a245a2392281c30372380247e282b325a2484232428af3345236e223528373409227a22252858341522f621052873348321cc21192868345c213621d4275f34d220b6212b281e3433219e21da27cb310921e5201028ca2d5220c120f325162921202b20282629293d1f7620e725b5287f1f4b20b5256d28171ffa1f5a251f287a1eea1f4725cd27331ecc1f13256427001eb41fc2240027d11d361f4e244426581d9e1e1924d825d01ccd1dd0238725231c721d682335259c1b741d0223d624781b2a1d8a228724ed1a081d232226249b1ab61ca2219c230d1a8b1c4b211a23d6192f1c0521b1224219c91bc9205f22e418261b992022226418cc1a6f20d6212d18611a43209621a817641a2f2071214f17a71ad71f09216b17b01a1a1f96204517791c4f1f54207c18101ae41d1e209015561f7b22f923701db81fce2371242d1d6823172755280d240024b327db288c241d24f92724299e24672430285c29f12493246828b7291225e324a128132a59252425a928352a8d25fd24ab281a2a5125f524a028152a37255f25db28672aa625ba250729a52af125b925e328912adb251826c3287e2a27265125c228dc2a4b25ec25db28e22ae525ff24dc28682be724012524298f2be9243625cd28742b1d2516244f28132be723c6235128cd2c68238623e628fe2f2b2362222b28ec31fe21d3223f28a3334f227f23a7286134d32259235a2887349622ab23c0276e34c4222d22ca273e345d2162235727ac32692291208027792fee1f7a20d125972ac61f4f204826fe285c1f62200e26bd287d1f37201626c628151fe62026269b281d209e20af254228a01f6820a7252228271f16206225d127851ea61fd7240127fe1df91e4a242c265d1d9a1efd23b925fc1c321eb6237025981ce41d61232b25481cae1d1a23e0240d1c581dc022a524781bfa1c64225a24ad1a9a1c092210240b1a6e1cb1219b23b119351c5721292349191a1c2421cd222719a81bde206022b418791ba1201c227c184b1b5f20cc214618c11b4c2091216f18e71b0c20422185187b1b771fc42047189a1a1f1f9e20bc175b1a791e6b205f160000611d351f0000b821af25fb26b1210d2309278c280224a1237c27be286424112407281a29ae243e242c285229d224682456289029f224b5246828c0292625f224b628232a57253225e328862a8a2558250229ad2a9f254225f728ab2a75251c25f728b92a3b25fc24ed28b92a1a2517250529e02a1125302516291b2b2a250625fb280e2b0025dd24f528e32ac624d6240629452bbf247724d128672b51242c248b28072b0924ba239b282d2b79231d237f28052cc722e022b928832e8d22ac23b928043134234424d228e232c523bc23a628be33ef22c12205286233f6215022b92749329221eb20a7271f3057208a208626142ce21f4d212627ba298720d02082260d291c209e2010269a28c21f34226e26c5282021cd203a26c028ee1fa020b3255228821f01203825c627631e9c1ff8242e27121e2e1fae24af26861dab1e42240726211d441e1624c025bb1cf91d012496256d1cd31dc4236f25271c831d60231a25b41b0e1dab228524ec1ab71c0b222024531a791cdb21fd23df198a1cbe21c923d519661c9121832387191a1c3921f5220a19481bb92030225e18a31a32209121c7178e1af41f3e217f17991ae71f20218b17781acd1f0f213717991ac01fee205c179b1abf1ff7208e17191b6f1ff92084170000e519021c000074219925e926a9217423be2672281424cc238e27b4286e241b24f92707299c243c2413283029b12468243f286d29e224a4247528c0290325db24b528192a3e25fb24e0285d2a4f252225e028842a66253825dc28882a6a253125e528a22a3e252525e628b72a1f2567252529122b4d257c2523291a2b4e250425d728b82ada24e224c728c42aa724e024e428fe2aa524a124e428202b69249524eb28562b4d240324d9284a2b88236b239328cb2af72205246d280c2b8c231a245628762c96230924a4288c2e5923902250280730fa210d218127d32f8720c8207a27332e4920f4202a27f12b5f200121a126a6296a202b21a62625297d208922e026f8289521c820b0261829e61fe520ff256b28f21f1821172673281020ec20e1254928b61f4d2087250228bd1eff1f3e258827271e441fd124f4267d1da51e4e243326ed1c261e0d24cf25781cb11da8238725231c4e1d26231825901b401dbc22b224561b3c1d522267242b1b3e1d02222224e21a001dbe21d123911acf1c7f2171232d1a811c47212123a9192e1c0b21d0222219ad1bd4207122b718131b8f2003225818d51a5b20bb211918f51a41208a211318c51a20205f21ef17b41ae71f0f21aa174b1a9e1ff12032172e1b471f022166170000a21a4d1c0000df20602588260e213a226b2644282a2335236a27b0283224d823012819297524302429285329b32475245b2894290125a8248a28dc291825d524bd282e2a38250225e4286e2a56250625f528952a5b25ef24ff28aa2a1f25e224fe28be2aee24e424f128bc2ade24ef24f128c42ad72401250229da2ad72414250c29f32ae92400250d29172bc424da241029352b8e24ad240c29472b6424792409295b2b23243924ce280f2bb123fd238c28f42a462310245f28d42a492326249528e42a7023f0238528522b01234423aa28122c6922b5224c28c22bd321f9210528082b30215222b727bb29662134230e28c7292722a721cf27a929d420a322b826182993211c216b26c9283820bd207d26ca28b11f49212226ae283720fd2062250628d11fef2005256227bb1f3d20d324f226861e581fa9249f268c1dc91e7d246226071d951e3f240626e11c5f1ecd236b25a21c161e2f230725571cd61dd922c724141cd31d88228b24fa1b801d39224624391b001dd921f123911a971c8c217523e619591c4b2114237619171c1021ba2224198c1bc2205622a218ed1a7520ee2128189d1a34209621c017d51a1d206721d0171d1b12204b2111182a1be81f13211918a11a8e1ff4209517a81aee1ee320ac160000f618811b0000b42002253d26e1208422fa269128682321235827a2280d249b23aa27e5284524e023f3271c296b241b242c286d298d2443246928cb29aa248524a528162ad124a624c628482ae424ab24e0286e2ad824bc240029aa2ad924cc241429e42ad824d8242129082bd224d02425291f2bb924ce2437292c2b9424c4242f29272b7924c4243b292d2b572493241029112b1a245924f128ff2aac234324e628fd2a66233424da28fa2a2e231424d028fe2af722f023a228aa2ac822cf234028262aab22d422ce27e729d52196233828342a5f22582350282a2a2b22b3223328f92988211a232828b629dd216222e227492945217f21ec2602297620bd21012705299420a822a126e7284f21fa216426a028c4200b216a26ab28e71f7a200a267428e31e55208d250c28ab1e84202d253427d21ef31fc624c626e41dc61e5b243026ed1c5f1e1624c025a21c001e98234225471caa1df722c624eb1b791d95227c247f1b751d39224624521b651df3211524ee1a091d9421be23541a9e1c44214323cd19271ce720ac221a19541b8a2022226618fe1a5a20cc213218a71a31208a21fc178a1a13206521aa17a61aff1f43219a17a91ad71f21216e17c81a8d1fe72090178d1a661fcd204e17b21a881e632055160000f818091b00001021012563265321e3221227a728bb235e23ce27e8283d246323d2270a293324af23012828295024da2320285a295a241e2446288b29722440246528b82988248724a828082ac324b024e828662add24c9241929b22ad524be242529d92aa724c7243c29052b8d24d0244c29252b8524d4245c29422b6524cf2463294b2b5024c8245929422b2724af244629362b112485242b29232bb82361240b290d2b5b2344240029fe2a2b232824e928ea2afc22d523c728c62a94228a23a428af2a3a2223237b28612ae5211b235c28352ade21cf2238281d2aa021ee2215280d2ab92138220a28e1290c21fa21d327b629da20c3214d277e29ad20dc2169273629c2202e222d272e290421b5219726d028a2205d21ad26d4284720ae2009265728551f46207425bc27931e42202b2540278d1e0220ee24ed260e1eb81f8d246e26b91d281f2924d125341d4f1ea1234f257f1ced1d25230025241cab1dc522ac24c31b491d6d226824171bf61c0a222024831aaa1cac21be23201a8c1c6c215623d7195f1c3f210d237e19411c0b21b9223a19081cca206822d618a71b7820102297188a1b31209a216b18c11bf71f37216f186d1b841f0c212418411b3b1fbc200c18451ac51e9320fe16121a1b1e4a20ea153111561d271fd6088e21c32541273c2221226f261b28f7225e22fa2679285323fa226f27cf28ee236c23d72718292a24e8232e287429622434245b28b729992470249a28062abb248324bf283e2aae248f24e728772a9a24b1241129ba2aab24c1243129ef2a9924d7244c29172b8b24ed246b293f2b7c24e12470295d2b6024db247c29712b4924e2247d29782b2c24bf246c296c2bd723aa2457295d2b922382243b294c2b312351241729342be3221c24f2280c2b8e22d323cd28d22a3e228423ad28a62ae4214d239128842ab821092372286b2a8321ec225f283c2a6c21e9225c28182a6a2182223f28052a31219c224928f6295e216b222528da293621f5211028ae29d6202c2159273e293320e120a626d328c91fef2067269d28df1fa720c92527286c1f412056259d27ab1e0c200f253627571ee61fd224c526141e871f7f245426af1d0d1f3424f4253a1d4e1eb1237725951ccf1d3b232125241caa1ddf22d224eb1b4f1d7c229424451b101d05222e24ca1a7d1c7b219423e5193d1c2a21232372190e1ced20cc223619ea1bc9208322f918cb1bad204522c918b71b87200022bd18d11b6020c621b118e01b392089218118d31b12205c217918921bbb1f10211d18151b2f1fd920e6176a1a5e1e7420b4150000af1a711c00008e21c7254c270022e12241260928552348220926ec27f622c222b7265d287d2335237027d128fd238e230e284a292224eb236628c22947245424cd283e2a9d24aa241629a32af924b7243e29db2ae424bf2465291c2bca24e0248f295f2bb724ea24a4297c2b7a24ff24b129892b5624f924b029912b1b24f824b5299f2bc923e224b429aa2b6023da24ae29bc2b3123c524a029ba2bcd22b0248529a42baf227f246129792b2822542438294d2bce2117240c29232b7c21f623fb28112b3a21e323f528082b4a21a823e428002b22216223cb28e22a29213a23b128b82a4121e72282286b2a3721ac225b28292a222167222b28d92904212522b0276129e72096211f27fa2875200221a926a928fd1faf203c266f289b1f9120d3251a28491f602073259027db1e2e20142507276f1e0e20c9248f26201e961f73241e269f1dca1e1a24b425f01c101e8c234725681c721dfe22e3249c1b231d7d228924091beb1c02222f24991aa41c7d219e23181a561c1921152392192a1cc9207f221d19c41b6920f121a918671b2a20b12156180e1bf41f70210918d81abc1f5021d317941aa01f36215617791a951f202138178a1a9d1f21211c17bf1a981fff205517691a7d1f06212617911ab11e902007164e0ee81c221e9606ee203025832641219d21dc258a2739228721a92574272022e9210d2604288d222f22c9267128c422b9228d27ec285b235a2309284529f123f3236228ba293d243c24af282e2a742484244629ec2ab024a624c729902ba0240025282a062cb2241725442a232c59240f254a2a292ced231425382a252c3e230e252f2a1e2cc722e224022a092c4622d224ec29fd2bec21c224d129e12bd8219b24b629bd2ba821652487298b2b462134246129662b0b2111244b29502bc4200a2445294c2b9e20e4233829442b8320ac232629362b63207a230b29102b61203723ea28cb2a6e202123b828812ae220ee2290284a2a0a2182226c28282a192155224328de292421cf21cf276929cc207621302706298320ef209a26ad281320722005265628581f2e208925db27c91ed61f0e252427401e751fb0248f26bd1d1c1f4424df25451dc01ecf236625e81c6a1e38230625931c0e1ec222b1243b1ce91d59225e24ed1bbb1df6211824861b751da521af23031bef1c40211923331a8d1cd5208d229719231c7e20212215196a1b3920b3218e180a1b142074213918e31ae41f4a210918bd1aa11f2021b517e41a851fff20af17011b671fef20d017161b3f1fc520b417081b261fe620d8179f1ab21ebc20131600006518d81b0000ef207724ad25fb20fc201e25862650216a215425fd26ec217e21ab257f270222e2212326fd2770225f2292264a28f922c222f02685284c230c238927e9289c23f9236c28c829402498246829042bc424b124032adf2bab242025bf2a662cab249b252c2baf2c79248d25382bbd2cc22395253a2bbb2cb3227a25032ba02cf4214125c42a772c4421ff24842a542cde20bf24512a3a2ca020a9243c2a322c68209124352a2c2c522089242c2a282c29207724202a212c39208324152a1a2c44207024082a122c33204c24ed29072c4f202124da29fe2b5f201524c429e62b8d2006248c29942bf120ad234329212b0a215223d3288a2a3821ec224a28f0295321f021a2275229d220fc20ef26cd281e20b32050265c28c31f7c20b325c927681f272020250d27be1ebc1fa2245a260f1e231f3e24c025641d7e1ee1236025b81c221e51231a255f1ccd1db422aa240e1c681d26223424671b081dac21cb23bf1ad61c4c216123591aa81c0f210c23da19781cf120d8229d194b1cc920a0224619051c98205222f018d21b74201022b118911b4a20ca218a184b1b0c2077214618121bad1f2a210b18dd1a5b1fe820a817841a101fc4204417831af61e9d204317611a121fd3204b17281a711e6120ff15000044130c18000059204b247b25b220ef204025cc2666215a217f250e27db21cc219c254e272e22e021df258e274322fa210526d0275f221c2227260a286d2274227f264228b22203248427e7281b24b1247628f529ab245924b129622b542476258f2bc02c5c25bb26942ce12d77251a27f92c842e0f24f526cf2c502e35214b26862c032eff1fee25392c952d891f8b25e42b372d1b1e38257d2b092d561e2f25302bd12c001e0225f02ab12c841ded24d12a9d2c251d9c24a12aa02c4b1c9924be2aaa2c061cae24dd2abe2c191cc624072bd02cb81cbc24152bcb2cc01def24242bc32cf11fe724f32a9d2c9b218b24772a4d2c5922c2239629772b142205228528122a3a2106211f27e6286f208e200a264628e91fd3207d25b627f81f7520fc24d5263c1f8a1f4e24ea25e81d391f082484258f1de51e99233e251c1d981e3023fd24cb1c5d1ed422be24891c081e70228024211cd01d33225524cc1b771deb211d242d1b381d9e21bd23b41aca1c3b212b23041a571cc1207b225519cf1b5e20f721af180b1b02208a213a18be1abb1f4f21e617891a971f37217917561a611f29213f17fe19391ffe20af16f319001fbe207816061abd1e8a208c16041a601e45208a16da19561e4d205c164d19841dab1fb7144f16cd1d2f1fb6804020e823d6243b201021db243a261c212c21fd247b26382176211425a926ab2197212525be26cd21af213825da26fa2199213f25f026f72159210625ee26a02126211f252d277d21cf22c5252f27df226d21d324b726a121a722cc28cc292f236327742dac2e25272b2aa43001322f26eb29ee302832ae187a28352f9330529e6426b32c562edb9a9c249a2a8e2c2a88ec23d229bc2bd115202468294e2bd319e4236329792bae182d24a129bc2bf41876241a2a1c2c8b158624902a602c16885225d62b142d368f1c26bf2c472ed494f926672d552fba105127aa2d902fd11e61262d2dd62eef223c25252c782de823c123c429db2b9f225b228b27132985218420e2251228d71f101fad249f26081ea11f68246e26691ef41e5a242b26a51d041f2724c6257f1db91ea6235625141d3e1e45231a258a1c0f1ece22c224521cb81d60227024fe1b681d07223a24671b491db121f223171b111d64218223a71ad01c102114232f1a921ccf20ae22be196d1c9020472270192e1c4720ef210419c11b052095218b18751bc81f55215e18631b961f262139182a1b611ffd20fd17ff1a4d1fec209b17c91a211fc92060177f1ad31ea5201017291a641e72208616b919521e5a20e61549196f1d831fda14000098158f180000721f2f2385245c1e74204c24ca258f20ca208e24e525e720fb20a624082607212321bc2429262f212721cd244f2633212d21c9243f2627213c21d024432623215921a42427260521a72025247d252c20d41f59223d243e1e4f1c611f4c21ce182318961cbc1f31120218391d3c20c5117d1d1121dc22e2182b208023e924791d91206424c925c51eca20c82484263c1f2d211f250c27f71ffe218d25e227872093228b25ec270f21e5200e267c28411fc8219c27e3295e202722c428772b7920a324882bcb2c1622c627df2d732fcb23b6291c3050319c22682ac630d93129208529632f9c3099243124be2bf02c73226615ad251028c3147d1aee224b257319ef1ee4226625881d0c1dc921df24e91bb31d5d220a254e1cf81d8922e0246d1c481e6422ae24911c4b1e482293247d1c551e4b229124561c541e162271243e1c281ed42138240b1c7f1d9521ed23371bdf1c3a216923421aa41c08211c23d5199f1cd020d722ad19b01c9d208122a019af1c6f203d227d19781c1e20b9211c19e31b911f2e216618db1b401f0a216118d91b281fef206018d21b0d1fea205c186a1b131fdd202218171bf31ebd20e817aa1ace1e9c206f17421a831e7420fb16151a591e47209d16bb19261df51e9d140000d61401180000fc1f6223aa247f1f3e202f247a251a2094205824ab255d20b3206e24d3256920bf206924ca256420ba206a24d2254e20a7204e24b6252c20c020082466250f20e22036231325601f0420d4210b249d1d501d70204522461b4d1c802065223a1b271dac216223331db51e5b23b8240e1f6e209724e02599204d212225a526472162214f251127352164215b253b271021662154254327ea20532152255127c62043214c254a27a5202c213a2532277e2007211c250d274b20f520f324ca262a20ab20b3246826b61f3b204b24b9251b1f8c1ede22af24801d331bb5205b22d819d016391d1620c314cd15941a831ea7111619b31c6a203c14631c2e20812266188c1d66210224c11bba1dbc2132243f1caf1da5213b24361cc91dd9214b24201cb71dd3214524fd1b981dc1214224a91b911dae212f24771b701d8221f223241b1a1d292172238e1ad11cf1200c23301a861cb920b922af19841c94207522ac19791c6c2038227e195d1c4d20ff211d194c1c3120db210919311c0c20a821cb18051c00208c219918a31bcc1f6a2142187c1ba61f49212c18851b741f282131187d1b3a1ff42012186e1b0d1fc720de17391ba21e8120a617cd1a341e372033175e1a0a1e3020be16271bd81d891f5d160000ba145f1800003820ea230325351f9e208924de2534209e203a249725342080201c246725092075200b244625de1f4d20ba232225781f32206323fd242b1fac1fbd229c24721e811e0e2223248e1db81db921aa23e21c4a1e30220924a31d951ec4227124461e381fb5231125151fed1f5b24b925c71f6320a7242d264e20b020bb2469268820cf20d0247a268420ce20ca2483266020c220c3247f264420bf20b92484261f20a320ab24782607208a209d246d26c11f6a20812448268a1f48205a240a26311f16202c24bd25fb1eea1ffe237525c21e811f90232b25691ed61e0e23b724ef1dd81d1c221924131d821cee201b23931b6a1b2f208122ea192f1b0c2051223919691b12205722c318e81b31208122be18631c5b20ac222419b21c7a20cd228019f71ca020f522f519231db920ff222a1a0d1dbd200023341ae91ccb200223081acc1ccd20f722e419ad1cc620dd22be19911ca320a7229c19681c7f20642269192f1c4c2016220519211c1a20c521b918031cce1f7e217918c11b7e1f422153187a1b411f16211018371b111fee20d8170c1bed1ed3207617d01ad71ec12037174d1aa81e9a20ac162c1a881e71205c16241a331e38202816321ae31dec1f3616391ace1dd71f6a16b21a2c1d091f251646247d1c061c1e1f192a86231b2559289b2c3f259a25382bfe2ddb244b26dd2ced2e6625de269f2d4f2fce250b27ba2dda2fb726bf27272e26305b270528082e583055272e28562dab3015271f289a2d9230c4254a277c2d89318d2c202e7c2e0433ae32d234a02f5e31c329d42cbe2e4131f723642d582fc32ffe21ac2ea82c1b30ba201d30462dda2f3c21e430992d622d4a243031112cb6299b24703050287d2187237330be1e0000862044300000000029203e30000048131a2036302b066417091e3530180b9d19151b6e30060ed21ae01cbf30020d5e1c181cdb30690e581d0b1de23087101a191b23fe30340f191673237a31670f651f1b246d328819e91dd524d431ec18871e88269c30fd19e01fca27df2de51ba922c529ff2c0d1f2f201728a929051d611bef234d250d19f41c1e226823101b7a1caf213523421a311cb5215a23dc19091c8a213a238719d21b632100235b19ab1b4521ec222419831b2921c8220a196f1be0205a22e118ce1a8a20cd215f184a1a2b206221e717481a15203221b717001a00201c213317101ae31f0421461788199b1fd1207b165c19231f6f202116f218a01e1020a815da187f1eef1f6915fa18691eeb1f8d15e618231e9c1f53156918171e8e1fab140619be1def1e5215381d8112521999119e288a242f265e27f72be225fd26942a3b2de624dd25652c922e4826bd27852d8b2f53277c283b2e12308f2798289c2e4d30172810299e2e753059289b299b2eac303c284b29882ec6308f29ef2aac2e2e31c92c122ef22e4931322e1a30ca2e1d31562bcc2d6f2ff5301428e72c7d2fb230d125272e3a2f273088240c30822eb92e6c25d030442d642cac263031212bc628ef264e31252850234a254b313721941e6322093146142c1c11201e31990af11c1e203c31b206731d9c2052317602421d85216031f0091f1c8a217b31ea0f341c80208331460c3d1e6321b431b1124f1c5021da31fd14351c4822ed317c174f1c15241e321318701e8124a131451a7f1ea9251630101b621e1e26742cf01aea1e10265729521bc51f6325ad27711cb31ea4244c26661ca11dd3231725b51b461dfa229824131bc31de3228124e41b801d76223a24881b871cd2219e23331aef1b7c2130236f19081c5f21fd226819e81b3a21cc224d19af1b02217b220b19201bc1201e229418de1a8120c62150186f1a4d208e210b18421a22204321b0171e1a04200d218317eb19cd1fea201a17b319911fc920ae1692194c1f8b205f165719fa1e4c20f5153919961e0d20ad15ef18761ee81fa4151419db1d561f1715da19ee18bd195201c825cc244526db2442291e26282791280a2c1d266227212ba52da026e227d22c0e2f4f278628ed2d0a30a627cf28c92e65303d284329422fab30c128d129722fd7302d29672ab92fe830fa29c32bd42f0d31572bad2cea2f3031f32b192d11303031292bf22c233024316929f12c3f305630b827722d682f9f2f5e26962f822e9c2d80270931cb2c6f2acd27ae31962928277027bc311d26b9236e26c1312e21301d29245631c318fd1d3c249b315319b21e7324bc31c419781dba23c53105194e1e8d23f1316e197b1e03241232211abe1c802305323818b81b4b2219324d170b1c59233d32e017121bbf233e32e317651ee62582324a1c471fa2259c31fc1c981d79251f2f581bbc1e1126752b6c1c36201e262e29a61de61f6225e127681daa1eb224a426a81caa1d062481250a1c601ec9234e258c1c331e9b2327256b1c581dde22ab24781bc21c4f223624a61a091cd821d1238719d61b8c2156235e19531b2121b722e918081bdb2047229e18b01a9c20f2214c18da1a7a20b22167188e1a48207a211e186d1a29204721e4171a1af01f05215217f319ac1fcc2024177f19521f9a2071166719421f78202e1666193c1f7b2005168719351f82202a162c19401f8c20ea159519ea1e8c20c11500003119601900001323e3248c26f1222626f4255827c6252d29ea252127dc280a2c6926dc275b2bd92d18272e28292d722f83278b28772e423045283429652fa630d028122a0930fc305229b92a54300d31c529472b50303431fb29e22b723052313f2bd32cb2304431882a872cb8300d31ae298a2c873066300629e02ce32fe32ef628a02e2c2e9b2c8a288330102c23291829a7318828f125d82834322925f6246c2873323d247522ed26633284219b215526a432de20f221ed26cf322921c820fb25e232272061208b2510337b1f4c20b2252333381fc120ed250d33da1f7820f9250633411f711fec2510330a1ea6207426fb328c1fec1fe026ce326e1eee20ed268131dd1f8d20ba26602e011f5d201526362a971e5f20f525e6287b1e1c20ad253b28fa1d1d2049259a27fb1dea1e7e245626071d351e1f24bb256d1c5b1d89232825a31bee1cd0228e24071b111d7f225124151ba31c45222e24591a131cd721c7239419f11b872138235319751b2b21b822e518e01ae5206a228318221bcc2032229518191bb52007228f18031b9820d6216818ad1a71209d211a185d1a36205721d117dc19ea1ffb200817c419991fc2209816af197b1fb0208016ee19461f84209d165a191b1f7b20f815cb19a41e2820221600007b1a001b0000dc22ac253727ed22f4233526a7271224ae26e7264028a6263a294027802821292c2c3728ef28092cec2d71281c29a52d5c2f9f28a729b42e3430ef284d2ac62fba30ed28142a5f30f6301f29802a96304f316729422bfc308d31172a112c36313531bd298d2bf6309a305229f42b63307f2fc928012c0a2f282d0b29122dc52ca62ade28112f0e2ab9274829383108272025b7282732ab244525d828c432df24ae233a28ea321a238522cb273b3307225e2332285033d02217224e274f338c2150211d277833d6204e21f3268b33c1205b220e277433b321ee211a276b333b21f1200a277a334a209b211e276b33ca202121ab2722336120ad2085261e31b91f161f2726102dda1d772030269029401fb220b9256e285c1f4320632509288f1e2720f7245b27461eb41f86248326b61d0a1f4024fd251e1d7f1ee1236425a21cf81d4e2313252c1c8f1dfb22cb24c51b141d6b226024d01ab71cff210024531a621c9f219523c119401c6b2135237619f81b2621d7220219bd1bfa208d22dd18571bc520472282184d1b8f20ed2161180b1b462080213a18e21a19203d212118891adf1f022179175a1abe1fe9204317031a8e1fcf20b416be194e1f952067166e19271f7b200e16b819b71e2920bb15a1083a1bad1b54006222bf252f2771222123e8266828b3230225c427d8283225c326d527f728d326c7283f280b29d3285a2b58282929372b5d2db1288929302d052f1629462aca2e63306129ce2a3e30993080290c2b8330cd305129182bb630ce308e29572bb7306c303629362b5730862f98291b2c472f952d3f29ae2b522d112b06293a2cbc2ac2284f296b2d77287626e328d42f1126ef2438289731a2246b25ce28e23216257a24d72862333424e72381286e336b230024a028a1336623bc22e727be333a228a220528ef33f421b922d8270234072263230428e8338522ac22ed27e333cb212c216027e5336b20e6213527c2330a2128215a27133355201b21d12691303720bf1fc326462c4a1e102166263c290a201321de256e28f41f582090252028af1ea41f1f25ac27c51d911fc824f9269c1d0620b224ab26da1db91e1b24c625cb1c5c1d3723fd24a41be71cbb22a324da1a571c66227224f1197c1c41223d24041a621cf5210724c119371c972184236a19e51b3e21fd22f618881beb208122bb182a1b9f2018226618131b7a20d5215818dd1a5d20a7211e18a71a4d208d21fc176b1a3420682185175b1a1c203f214517311af91f13211417fe19a81fc720af1699194e1fa3206716461a0d1f6020771600001d1c741c000057222d269c279422a5237027c5282f2453241d282229ac248a24c627fd28c6240125042803293125f627442832291328642aa028ac295c2a7d2c32299f2a782cae2db729e92aa72d9d2eed281b2a952e742fef28042b6b2f802f7b295f2b922f302e54295f2b292ed12c3829812bba2ca32a3f29262c6b2ab5281c29922b8d285b279129582c022784255229b92d2e25912477285b304924a82458281b325f248024a62861333a240b243428b23397234c249928e233092443233928fc33b7223d238f282b349722122371283b347022ff22232828342c228c2326282734a922a32145273034d020b92296271e34be2183211e27f532a1207222ac25ff2e5321fe202326c42a0d2076216526f4285b201721f2258628fa1f542073251628a91e1a200325a927321e1220ad24fa26091e901f72247c26801de71e53241626ec1c9c1e2124b4259e1cfe1d8c234e25301c831d0523e1248c1b3f1d8d227724091bd91c2b2239245d1ab61cf72105240d1a4e1ca7218f2388191a1c702135232719021c3821eb220919e11bf5208b22d718371b9c200f226e18f31a5820a8212b18601a1b2053217817421ae91f18212817291abe1ffa200b17021a751fcb20df1694195e1fb3203916c2198c1e2a2072150000b01ab01b000048225926d6279b2298238f27cb2843246d2430283329e82480241f283e29dc24592435284329a2241c25a028e9294d25d226bc28322afb26af28b628312acb28ef291729222afd29282b0529622a532b472c8e29662b612c2a2c8929792b432c712bf928dc2a832bdf29f428092bed290c284b29892b072807264e29862bd42585250c29762b432599254e297d2c4125bd247b28f72d732475245a28ad301f24a524cb28e8324b2406246a280734712398246d283b342f24e52361284b34302393237e285b34ca225d23c42878349a2248232e2867346d22742295276e349a215c22c52772346f21ee21dd274334fb20d621b9272532d220672279262e2d3221fd2027264229f51f3e213326f7281b20e02011269b28801f152143250228d21f1320f5248e27281e781fcd240c27891d7e1fcd24f426721d091f91249526041d951e1e24e0259a1cd41d4a232725131c281db7229d24101bb91c34223e24551a441ce1211b249a19501cc121dd238a194d1c8d217f236719421c59211c233b19f21b1121b222e118a61bd4205b229718391b97200c223b18ce1a6020bc21c817551a232062211017331a02202b21ea16251ad31f0521da164c1a9c1fe22006170f1a931fe8201917cf19dd1e6420d2150000a71b941c00004222a8260e287e226323ce2708290a242824422861297d24722453289529bd24cc245d28a9291d252a256328a4295c257525d1281a2a962598253b29b42aba2549276729f12a75276c285a29c32a872888289429752ba3286f28af29bb2b8a280e289829c32b18280b276d29712b0327fc2614292d2bda26cc25e1292b2c9b25b2256029112c822549256129152c09250c25f0283e2cbd244e2581285d2efb248324a02858312c2480247f288333192452244f284534de2345236628753484224024792889348023b2235628a934ae226b244228a334ac23cb220d28a634cd217b220228a3347221b52135271f34cb2082221628e930602168214826252b6320a1205b265529841f05213f26c328012067200b269328e61e7620b6254528dd1e3a206e250428621e0b203525a227fe1d0e2008256527e51d781f9324ab26531dcc1e56244326c01c2f1e2924f6253c1cbc1dc9237d25b11b9a1d4e230425831b471db522a724ee1a371d45223f248d1adb1cc221bc23f7199b1c5e212e23a819471c1621bd224119021cd9206922cf185d1bab2033226b18fc1a7a20e5211818971a4d20a2218917a61a372082213a17c51a02203c212b17e31a801fe1204b17151c981fb3205218481a8d1eb120f1150000252068200000e520642597261d200b24e127fc285e24472427285229be24702441288029eb24ab248228c1291b25fc24c428292a50255825fb28992a8c2586250829ab2aa72553250029722a73258425ff28802aa5256b266b29142b7a269b26aa296d2bab2693268229512b8b26e226f828422bc126e8250529362bb625cb257d29952b852579259329032c2325bc259829102c62258625f1288d2b1c255e248d28db2b0a24b624d828992e4a240624f128da3137233f23662810347f2290239228a734ac2232239a28c13425226a239828e7343a229e237228073566221e2390280c35e1219b224728d8345d21a1221e283933622116221826012ef1209d20a126d1297d1f5b204b262729f31e92204626e1284a1fd5203c26a928921fe420e3256128aa1fb520cc2540281c1f5e20a7251628791e242054259e27231ea81f9e249e26751d541f2624f4251f1db21eea239825961c241e7e234c251e1ce41d3423fd24bc1b811ded22c5243a1b2c1d9f228124801acc1c49223c24e419b31cf121f123c619651c852167234619521c4421fc222f190c1cf0208b22be18f41bb72045228c18a61b7820e8214418c61b57209f213a18a11b312064212618231be71f0021c2175b1a9c1fdb201717411a3d1fe72072160000fa1bed1c000089228126b127e0227c23ba27f42826241d2405281b298f246d244e287429e82487247f28b8290425ca24ad28022a2c253225c628492a77257c2525298d2ab12598254129ea2aba25b12550290c2bbf25a6255029152bb42592254329282b8b2584253a29312b6925a7255429562b7725b22574298f2b6d2593255929892b3c255e2543296c2bf72451254f29b32beb24e7242029072c8924c1241729952b54246524ca28c82b00242c24a7280e2e7b237024ee28a931f5232124be294534492336242929003550234724722825354f23f822e8271535db2192228a2707356d21012236286e34f520e120ff260031ec1fc4206327bd2bbd1f17212026ee280f2049207b261b29d61ecc21cf2639298b20a9205826e9284e1f1b2113268d28db1f562088251e288d1ef11f5e25bb27001eba1f1a2548279e1d1c1f842461262b1d651e2624e4258f1c0e1e0b24af253b1cf21dcc237b25121ca51d68233125921b471ddf22b424ee1a051d4e224724731ad11c01221b240d1aca1cdb21e723e219b31cae21a823a419761c5e212a233a19071c0621aa229b184b1baf2043222b18ec1a5a20d621b817ce1a1c206b216617a11a03202e213517911ad91ff020f416891aeb1f0a217917db1ad11f6b2174170000cf1a441b00802b225426cc279322cc235827c828362420240f280f2992245f2427284829b924962452288c29f424cc249728e9291d250225dd28572a442529252229aa2a5b255b254529e92a7b2580253629e02a8d257f253329d22a78259d252e29fd2a8225ab253329202b672519268029a02bba2532269b29c62bbb25cc256e29922b5c2590254e29852b112564253d29982be92413254a29ba2b9f24d1243129d12b63243924fc28c32b922378241b29f22b0224d52314296c2de9229f231629d7309e223b242b298b333a23d4230229bf3493226923e228d6341f221223c1285e34d72129221c28c6310021b520d527382da41f78210927a62970202b225a279a29d5207a21e3263c29372003211a269b28921fd9207426c428531f4f212c269728df1f9820d1253428ae1e35209225fb271e1ed11f30258127931d031f96249d26001d551e3e2416266d1cde1df723b125041c711d60233b254c1b5b1de422d024081b471d7d228624c81a541d29224224b21a1d1de8210c24481aed1c9f21ae23e9199c1c5b214a238819681c2121f1222a19041ce5209b22b5187d1baa2040224818111b7920f7210a18101b5820b821e017dc1a3b207a217517b91a0f2022214f17831af31f16217217211baf1f1121f21600003f1b001c0080b321172678272822cd22e42670288923e823f627f72870242b2434284e299e246e245e289029d924c724ac28f3292925f924df284c2a4d252f250c29992a612569253f29e32a8a2567254e29092b742554255029182b4e254f255c29332b22253f2547292e2bed2445254a293e2bdf243f254b29442bda2457255429642bdd2432254a296a2bbb2410254629862b8a24f0244b29992b6d24c7244329b62b37246324ee28772b9e232524eb28442b3223e324db28262b2d247224e928152c78233e24b8285e2e02232c23da28d930d2215c22142820311321d6204f271b30941fbf207a27b42c921fbb216f27182a9220da219427ea29ab206b2231277729072164213d2731292620c52111274b295c207d214026ee2811204321bb252e28a71fba215625df2715208c20222552277c1ee91fea24ec26871d771fa9249026371d151f62243a26f31cb41e1424aa25971c641e79233425491c081e0623ef24eb1bf51dbf22b224a71bab1d792270241f1b221d0f222324731aac1cba21c023bd196f1c6b2147237219371c2621dd220f19e01bce206e229d185a1b862011223418e51a4920b621e2170a1b30208421da17291b24206e21c917101bfa1f2321ad173b1a941fe420f316941a121fbd20091600001a1a951a00807721c6252f27fb21e7226a27d1288d23cb23e527f72843240f240d282a2971243f2442287e29a5246a248828de29c4249524c228372ad224ce24fe28862aeb24fc242d29c72a08253b255529112b352566257229512b4c254f257e29742b0f25402584298a2bee2427258929932bc42427259229952bb12436258f299b2b99241e258229902b7124e3245529762b2d249f242b29532bc323812412293a2b70235f24f9282c2b19232d24dd28492ba9226d24ca28632b0f23ec239528ce2a522296236b28d62af221e923cd28152c16222223f228572c63213023b728f52b6e21ef2236281f2a3d21c9221228b72920212f2150276a29fa1f8f2120276b2933200523d32626294d21f921ae26ee286d203321d8260b29b51fe4208326c728401faf20f3255628cf1e88209225e627971e3c202b2549270a1e531fad2496261e1dbd1e68243126b51c371e2624ca25411cd01d9f234a25cc1b831d1123e4243d1b5f1da4229b24e61a5e1d51225a24be1a151de32112243e1ab31c7b219423a4193a1c1621fb22f418a01bc620742278186f1b93201f225b180d1b6420cf210818dc1a3d209321a617db1a1e206b217417da1a0c2038217317d41ac21ff4203b17c61aaf1ff3205d17891a2b1fc3205e1600000f1ae31a00802d22bb2521277f2246239427ef28db23e023092818294f24c02300281f292f24042430286729562436246f28bd297d247524a3280e2aa0249c24e2285c2ab824e0243229c62ada240d256829122be224032576293b2bb524f42476294c2b8324f62484296a2b732409259229862b5f2412259c299d2b552419259a29a02b482408258f29962b2824ea247029762bfa23b4244129402b8123922425292c2b4a23662415291f2be5224424ff28112baf222024df28f02a77222924de280a2b67220224af28cb2a2b22f52383287e2a0322672396280a2b9721442474284a2a5322862375283f2a94216922df277229c020ef2173276b29662053228d278e29b020b9221f276229e3202b22dc26f1287c20c82141271029342038217b26a628971fad20c3251528ab1e992060258b278e1e5d201a253627191e1e20bd24a326c11d8b1f5d240826451dd71e06249625af1c401e7e233825311cf11d1123e424f81b851db0229d243f1b351d4b225124b11ad61cde210424141aa91c94219023b919681c582131236919451c1821d4222019141cd5208322c718c11b8a2024228b187b1b3e20ab214718781b102048212a18411bac1f0e21e317ee1a441fc72056171c1ae71e93207816f719471e1d204e1500007f1c501e0000c1211426aa27e4215c22db267328f522e5225c27b728a4233b23c72701290224a62329285e29212426247d28d1297b248124ac28152abd24b624e728682ad224da241129b02ac324f3244229f62ab72400256529382ba02401258029622b7c24132597298b2b7a242025b429ae2b61242225b329b62b3d242a25b629b92b31242b25af29af2b1f240a259a299e2bc123db247a29812b5623a9246029742be82272244129692b97223d242329542b2a220d24f8280e2be421f723d528d72aca219623b428a92a69214e239828b32a1b2100236e28882acb2056236928592a0621cc225c28472ac02045224928222a782030221a28ee29802040222728be29a2204d217927632901204521d226fd28d01f8b21de26ee281c20192153268f286a1f9820b8251428ae1e652056257d27641e16200925fc26d31dae1fb3248a267a1d291f6d2436261b1d951e1624c4259a1cf91d98235b25171cb31d1d23fb24a51b5e1dae22b224331b211d38225424971a961ca821e123e419601c52215a237f19241c0c21ed223419181ce920aa2207190f1cce207422df18f31ba3202a22a818f71b7420e3218e18051c46209d215f18011c1e2064213d18dd1bce1f17210d18561b761fe5208f17721ab61e71205e1500006815921900006222482617288822d022a82651284323882295263f2825232b232f27b128a423b1230c2844290b242b246d28cf2953247924ca28452a9424c3243029bf2abd2406257a29252bee240525a8296a2bc9241d25e029c62ba8242c25fc29002c7e243925132a102c3d244725172a132c232446250b2a132cd1233825fd290c2c97231725eb29032c1d231525da29fd2b1a23f924bb29db2bab22df249829b62b6522a12466297b2bf221712436294a2b952149241529262b43211f24ff28132bf220ff23f128fc2acc20e123e728052bba209323d528f42a8b209b23ce28e92aac20fa228a287f2a6220d3226a28552a7b209f225328462a712086221728dc298f20cf21932760293920632130271429d51f0a21a026b628541fda2029265e28311fb620eb251a28da1e8f208a25b427a11e5f203d2549273c1e2120da24c026c51d491f6b243226171d781e0524ac256e1cc41d62233625bc1b711dd122c124251b2b1d3e225624a41a001dc321eb23481abf1c63216d23d4197a1c0521c0223f191f1c93201e22d418a71b5020d02160182f1b2220a5210218d61a0a208021a017a51af01f68213917af1adf1f48211417a41ad21f3721d816c01aad1f032126174d1a961ffb20ac167f1a0b1f9120c7150000f3185b1c000012217525c62631210b22452610289d22e8211426eb2776225a229f265d28c522dc228927ec2850236b2338288229cd23f8237e28e82922244924e428752a5324c0248529472ba9240a251b2a012ca92437256b2a392c74245025882a4c2c16243e25712a412c2e233825622a382cb4222925382a1f2c56221325172a0d2c1722f424f729f92bf221d824dd29e02bf321ca24c929c72b04229c24ab29a82ba92160247229682b6021372440293b2b0f211d242d292c2bb4201d242b29302b962012242729362b4f2001242729322b0320e1231229212bad1f8623fb28e92a541f6623e528b02a6a1f3c23ca28872a09201223b7287c2a8b200e239828482aee2065224b28ea29a620d721f627782954204a211427f428d71fd620482682282b1f9120e4252128c51e342068258c273b1ed91f06250027b51d851f9f246726781d321f3924dd25211dcd1ebc235f25c11c811e2a23f0245d1c621eac229324311c3f1e31224524d91bfe1dcb21f423311b6c1d58214e23821af91ce920c822d4198b1c9d205f225319121c71200b22c518b01b4d20cf2165185f1b3220ac211c18261b07206e21c517301be01f3c219c17331bbd1f21219f17281b881feb2060171f1b8f1f0321be17711afa1eb1208c150000ef149c1900004e21b324122681213e213925d1268321b221ba2568272722022268262c2852226e22ed268328c322e4227827e4283f23682303284c29ca23f8238d28f0292224bf249b29442bb92454259c2a4f2ced24c825602bc52cb124f625bb2b0c2d1524ee25b42b092dc822ae25792be22cb12182251d2bb32c36216425aa2a752cf2201125482a322ccb20aa24ea29f52b8b207924b829c72b5b207f24b229c62b82208224b429d22b64206b24aa29c62b6e205d249a29b32b4020492496299e2b2d2026248229892bd91f05247729802b261f092479298f2bf31e08248729a32bf11e32249a29ae2b761f2e249929b32b12201b2475297d2b7620ef232829112bfc20ec22a8285f2ad620a1210a289e292c204a210b27e9281220232150265d28e81fbb20c225d327481f4a201625e9267b1eb61f84241a269b1df21e1f249425db1c741ea32344256b1c1a1e0623e224171ca81d662260246d1b591dd921fb23df1a191d76219423681ae61c33213923041aac1c0c21fe229b19721cda20c2223519201cac208122d518e01b842039229d188e1b5b20ec216d18401b192092212518e41ac31f3f21af17a61a6d1ffe203a177d1a471fde20df167c1a2a1fb9200d17531a501fed200e17e019ca1e8520b91500003715e6170080df207a24b225d92047217a2530278d218b21c5256327d421ec21f325b22725222f22392608286b2269227e2643289022d022b4267528e022aa238a27f328a123d324f328572aaa243d25852a302ceb242126702cbe2d26251e27432dd12e452494274b2df42e1922ad26a92c222e0d201426cb2b1f2d34204925c42a842ce91fe024372a212c921fbb24b929ae2be11f5c2480296e2b821f40245a293e2b141f01243529262b721e87233829162bd81d0b243629f12ad21dc7233e29222b291dec235029372bcf1c092480297a2bfa1b3b24c829ed2bee1a8124422a3e2c601bbc24ac2a762c371dc524cc2a8e2cad1fad24c92a7a2c37214824452a272cdd216c234f291d2bb62132225228f929c42002220c27da289f205d21df250c2820202b20d124ad264c1ed61f5824e225cf1d661f05248325461dfd1e84233b25e21cc61e1a23e624a31c591eae22a3242b1c081e64227924c01ba01d212244243a1b511ddb211024ae1ad01c7d219723e919621c0321e4222319071c94203b22b8185c1b3020c2213518081b03207f210518d41acb1f5f219e17b91aa41f4c214f17641a6e1f2821c416341a2e1fe12065161b1ae81ea5204b160b1a831e65203a16b6197b1e532035160b19c61d941f7c14260f361d821e6a81b0204924372599202d2101257e26272165211b25b1263821b8213b25df26b121e3215f25fb26f121d72152251227fa21f321612553272c22bc213b256327df21b82282254127b022bf223e265827e8221f25812baf2c0625bd2a1d312132c126082b44318e32c414f727ee2d9b2f4c960f246d2a752cbb197d227928622a681d982134273329b61e04235b272429822008231d28a5296b205523052863299b20de22642713291f208f22f826a728511fb7224e2704294d1fb522d1274c29c71da5224228c029b11bad22da288c2a17190224f429142cfb14f724e52b472d0c956d26de2c812e4293c2274a2d0f2f5a1e6126f12c8b2eef221a25322bf42c6b23f8249b28622ac9232421442660283f203120e924ed26ce1e711f8b246726f01d921f6c24fe25d31d561f0e248025551d9f1e99235325b81c721e22230425811c071e9a229f24211cba1d28225424ae1b9c1dd7210c24351b6c1d8b21ae23d01a261d3e214d23531ac51cf620e722b919931cb62080225c19561c7420202215190f1c3420cb21a418d01b0c2086215b18a21bcf1f4e212618801ba61f29211418031b6a1f08216d17bf1a441fef20f416761a011fc220a9161e1aa31e9e204e16d5199e1e832003162019a81d5d1fb414000058163e1800003b2014240325b41ff220bb242226da201321c8242726fb202b21d824452612214121e524562615215221f124702612214621d524602606216621d8244726c32034211d248a254c20281f962194234b1c3c195a1d961f10145911de1b941e9b0c331b872089221e1871204524e225d61e2322bb25d427fb2048220f263c28032143223e266228e8203a2252266b28e12042224b265728142162222b2643282e214c22c125f62706217f2205264c2817213122b0256728da20fe2036252a28af1f7a1fd7242627c11d471c3b244d27761a221d5b262229521bde22f82a5a2c451f7628262edc2fcf1fb62a13314a32711e0d29ba2fcd307e25401fdd29712b311e911dae24df265d1cd81ee1224b25131d281e7b2205257a1c731ed8222b25991c6a1e8922ff247b1c7b1e7422b824701c651e7022a9244a1c511e322287240f1c2c1e0f226124c11bbc1dd4212d24341b2f1d7a21c323831ae41c3c215c23021ace1cfa200623a119ca1cb2209d227a19ae1c7c204b2238196c1c2720c321cf18141cb11f44216f180c1c571f162149180c1c351ff72049180f1c191ff0204c18ba1b0c1fdd2017185a1bf71ec3209417d11ad91ea32006176a1a9a1e7820cb163a1a8e1e672098168f19af1d741fa11400003f14b117000018209f23cb24921f9720462481251d20b4206924c6253720ca208424ef253a20d0207d24e6252e20bf206924d0250e20a720382495258e1fa12070231525dd1ecd1f7d210a24ca1cf41c0d20fb21c81ada1c1b21b922361c261fa123c824371f9a20d2243b26a5201f212c25e126e1208e2167253927fb20bc2177257127fb20c42180259727ed20cf219a25b527e120b6219c25bd27b72096219025bc279d207b218525ac27732072216e25922758204f2144256c2729205d213c255f27202028211a252d27a51fff20ed24f326441f9f20a6248b26b81e55204724f1254d1e521e5f225d24981c9419641ebb2002177914d419b21df50f5b15b41a991ece0e391bac1ea0213816431dff2083239c1aa41d92212924b91bdd1de5215124041caf1de1214f249f1b9e1dda214d24601bab1dd6214d24481ba01dae211724111b541d4a2186238b1afa1c022119231d1aa51cc920cc229319a71ca32087227419981c762045226219871c502002222d196d1c3b20dd21f0184e1c1520a921cd181f1c01208b217b18d41bdb1f6d214118971bb41f4b2120189f1b8a1f33210918871b3e1ffe20f817481b101fcc208117081bae1e87203f17ac1a571e4620b0163e1a291e32206f162d1ac71da01f7e150000f713f41700006e2003240425311f8e20d3243e260520c2206624cb2522209c2039248625e01f812011244925911f4420a3230b25ed1ed91f1823bc245f1ee11e26221924ae1dcd1d9b219923df1c521ea0225724941d0f1f9223ff246d1e1d204724c0259b1fc920e624a3265b200b2153254a2785203f217e25aa27b42046217b25bc27a72048216c259d2796204e2153256f27752043212e253b27452022210e25152718200121ec24f126b31fe120d224ce26821fbc20b0249826271f92208c246a26e71e6b206a243526ac1e4a20492404267b1e42202e24d8256f1e34200f24ae25591ef81fa72338253e1e071fa12283249b1d591d68219523571cc91b63208b22fd19441b06200c22fa189b1b28205c2290181b1c362074229418931c5c20a022f918ec1c8420ca227d192f1d9f20e922ed19fc1cae20f522b319d71cc5200023ac19d41ccd20fd22a819c11ccd20ef229219ab1cad20bc2257197e1c8d20822223193e1c5d203b22bb18241c2e20ee219e180b1c0020a9216518d31bba1f712124189c1b881f48210718881b551f1e21c3177d1b3c1f0921b8174c1b201ffd205017b91ae71ecb20bd16931ab31e982067166f1a571e55204416341ade1d1020de15181ad21dc41ff0151a1b161d6e1e84150526271e3a1f8c24562b28246d265529552dbb255326e72b7b2e1325ae26fc2c532f0026a8276e2df92f86272d28922d3c30c4274328ae2d6f305a270928522da630fe26a8272f2dc63089258726752dc730e424d725772d9731042bc62c142ea432ee310c34482e0931162cdf2e0c2d9230bc254c2ddf2b5e2c961e362d661fa12e4b20f92e5629ac30aa23fa30df2d6f2ff4244931322dff2b5325a22c9228ec22f51f7326b10cd01c751cd5275693e2227221c4283f990624d323cf29c5987424a5229929c798d5242e23272918981d252324de28e99896244223a3296798cd2522253b2ce19aa12510237f2c22983a226f22a830cd19bd201d2217325c1be41e6024e731851a1a204627bd303a1c971f39280b2e201c5d202e29a22cfd1c612063272029611d2f1df923c225f41af51c8d221f24ca1ad51bde214c234119751cf5215f23da19a01c96213723131a701c6c21f222d419c91b3d21d0220019c11b2f21c022fb184d1be62089229618f91aac201b2248189f1a6720b921f217a11a43207e21c417a11a332067219517a11a222046216517231afb1f1a21d816ce198f1fb9204f161c19c81e30208e15e7189a1e12203115ff18871e09202615ec18481ec51fef148e183d1ed11f4f14dc18e81d5b1f48158d206815201c4c1ab829c9245a266628cb2c0f263e27602b262e45256226e72c8c2fb327b928ea2d25303e282629612e4f300e280429442e6f30af27be28f22d91303c277128ff2daf30c6264a28c12dd7309028ea295b2e2a31fa2b242da22e5d31e52dc82f702e6631e02bff2d8c2f9d30e426502ccc2d3b30da21c52c142ddf300624f72f152f40303126f4304d2e862e63277b31052d792a4626b930e4283a20fd201330af8ec01ee32061304a960221a321ab30f3988023a9219f304b998d249a21c030f09a94248d21e2300b9db52429220b31b79d37243a21ff30679c99232d2230310b9def227b21ed307b91771fe3212e32461b801d362432329a1a771e1d25d131101c511fe6267230371dae1ee126d22c631c461f20268129b41b9d1f5825b1273f1c9c1eb42471260f1ca41df3234a253f1b061d01239e24741a761db1225c24dd1ade1d90223f248a1bfa1c0222c423651a3f1ca0215b237419341c76211f236619bb1b3721e622f718881b0d219e22bb18341be02056226c18111bb1200d223d18f71a8c20e8212e18e01a6420a2210718941a39205521b517381a0a2012211c17da19be1fe3208716ae19761fb1202d1676192a1f7420c8154d19d51e3f207715d818911e1a202115d518c01d421f4c14d31c081b9d1cc414492782258c271f26dc2aa326b8277929322dd6262328382cf02e73278828702d1c3036283829532e73304c287329d92ea63054285929272fc4304e285e29332fe0307928bc293a2fe730fc28772a682f2531a42a5b2cc52f39316b2b9b2ce42f2f31792a992cfa2f2831a628412ca52f0830a526f42b852dc8300227632f7e2faa2fb5272c31702e342d6328ef31392cee297428fc316528a1225b241531261d841c34230c315610701c6823513143103920a72395310e140a208322b43155149e20e221c431c71228216a22eb31f314db1f0c22f6313714631e8f22fb312212571d92221d328a13ea1cdd2373328218221e7c26b632071cb81fa126fb31651de71d5126c62f0b1c071f6326c52bd01c49202d266d29a01de71fa0254128301d961ed7241127821cc41d1724ba25071cca1d9c233725ed1bab1d89231925c31b3e1d0423c3242e1b211dae227324e11a5b1c1e221824d719251cc0219c237119641b4a21ff22da18191bfd2080227618931aac201c222118a91a7e20c52117188d1a4f208c21dc17861a35205b21a5174a1a14202f2131174a1a032010213117b719b01fda206016a6197c1fab202416b719751fa0200d16b319621f9420e015f918441fa22068157019e51e78207315ef117919cc18b5073a240d25a126262426286626b32716275b2bd526ec27482a962d9f278128892c7d2f0f28da282f2e773047285329402fd0307d287629f32f1031ce281a2a2e303f312229912a553053317e29102b66307f314b2a342c9e30af31b92a772cc630a231032a662ce430aa316f29a22cff307131fc28282da630a8302229012ff42fed2ec628c030b82d252c7129f331f62a6928402986326927e92580280833e2246522652746335f21f221e0264d332921b8225c275a33ee21a0216226a4330b211221d226173479206420bc261c34a01f39216926ac337620822159268a338c20c51f552680334f1e6920cd263333091f13205527f032801e55219727d9312e206b202e270c2fac1e1d205426b52a191e642041263429621e1620d8256628d31dfa1f6125d427931dbf1ea5249d269e1c121e3624ec25281c831da9234625641bc61cce229824671af01c95225b249f1ab71c6b224324311a671c18220f24c819221cae2181234f19dc1b4d21fb22f018201b0521ac226018561bec20652281186d1bdb2036227518431bb220f9215b18d81a7420a9210218821a38205521a017021af91f0f21df16de19b91fe1206116e619ab1fd3203f16001a781f96202f1647190b1f822070159219b71e5420be1500004f1ad11900005223eb259a27b323eb24b5261828c224ba28592774285f28ac2bbf27d528e12aee2d6a283529512de42f8c287929f62ea130a828da2916301b311e29a82a6f306a315529912ac7309331c729592beb30cc31f229e12b4731ed315e2a482c7b31f331eb294c2c8031ee3167292e2c7c3185313b29132c07312f3073297c2d802f822d4929a92fdc2c0a2ad1298b315429c7265a297932fb25f7252129113343254824cc289d338e23262353289a336922fd236f28ac330c237622bb279a33b321bc21a127cd330f2183216827f733dd2020237527c6333022c8228227a833cb2156216b27bb337b2093215a279b339b20432116287033452093219e27b2317220a11f8126c72dfa1d0b201e26ee291b1e8820e225c428b81e522095253f28291e4a200d258f27ff1de41f8e249f26671df41e4d240926aa1c9c1ef52372256f1c4a1e73232025211cd31d3923e824a61b501db7229424d31ae51c4c223a244a1a691cda21f6238b195c1caa218c235b191d1c612123230d19011c2b21ca22ce18da1bf42081229a18e31bc02029229f189e1b7120b6215b18591b2a2060213318e51aef1f1021b017811ac51ff6201217101a9a1fe9206b16be19641fc220eb1542193b1fa22045156719ad1e46206a150000681b4b1b00008c224226dd27e3223b23a927cc288123d52524281129b92593280d284d295c286e2b68284d29fa2aac2d762845293f2de82fd128c829332fdf303b29722a8130a2311029832a35319e319f29622b4631d43131290c2b8e310f328829612bc631e231ad29b32b9b31a931c029472c5031ba301a2a932c5f30912e7b298a2cfb2dd22bce29162e032b4028792950308027cc25392921321d250a2653294b335425af2421298b3322243124d728c43366236324f128fe33be233923272809345f221923522829342a222723342837341c221a2448282334e42272233b2815342622052210281c34e3200e220d281634ea2089214928c6336a2090210c286231702031200c27dd2c911e9e2062269d29fa1e05214026e028711f7d20d7255d28871e10205625e127cb1dae1ff22435275e1de91fbd24ce26871deb1e40240f26bd1cb71d8d235025aa1b4d1d1e23ee241c1b8a1ca622a424f6198c1c6a226224d719571c0e2220247419351cb321ab232b19031c62212623ed18de1b1721ad22b818781bc52043227b183e1b8f20f1213e18dc1a6220b2210518a21a4d208f219617711a36206a212f17581a21204221e5162c1a00201e2189160a1abc1fde206516b2198b1fbd200816031a0c1f6c20db1500002c1b3a1b00008c2256260128fa22e723f02700292824932463287429af243525222849294225e12747285329bb27152ba228ae29d92abf2d18292a2a652dcf2f7f29f12a712fd430d129672bab304031e129892b1431a331302a232c8831ea31612a372cce31a731af29ba2b7731e8309c291d2cbf30282f7229df2bb82e382c8d29322ccd2bfb289a29db2c89284226aa298e2e9c253a25e128de309d243225c528aa329624c524f628bc333524812490280034f323e624f2281f3452240e24672829340a23bc23e0285934b7227123bb286b347622ea237b285234c222172474285534c1228822182858344d21ec23d8272b3452220c22b927e033bd20aa21da269c305c209e20a026bf2bfa1ef12068268229771fb6205626f328da1e0920aa253628c11d1a204d25dc27bc1d0a20e5243327a51d721f8524a126191dce1e5a242726a91c8d1e1924b325651c791ebf235f25571ce51d49230225bd1bb51de522ad24551b331d66226624881a061d292223242c1a961cd421cd23a2196a1c9d2175234c19631c69212d234419421c2121cb22fd18c51bc52055228d18381b7520cb212118871a292061214817571afb1f2121e4164f1add1f0621ae16291ab71fe92086168519911fdb20b0156319b41e4720f1140000001a891a0000c2227e26182865230e2419281d294424cc24782888290c25cd2477289229ea24d224a928bf29de2480272d29792a7727912a7e29f02a712ace2c5429cf2ab72c382e7229a22a1a2ee32f1f298f2abd2f6530d429ce2b60307830102a162c7330283069294e2b2330962e7c29be2b762e4f2ca929ef2b2b2c1029122a482cc128e626c029182c48269726ef29c92ce8258e25d728902ee7246d2476285631cf23b9244129bf332b245624b5283734a7237e25ea285f34c524b924f828743409240e2400299734d0226224ff28ad345d23042474288e34a2222a2337288834eb21e2212228a134b120a021c72792347d208f212d28dc335b20e0216327832f85202c219526162ad01f6a227d261b29c1202f219126fb288a1fc820d3255628f41e75204625bc275b1e0a2000252627a51dca1f01253c27551d451fe5240827fa1cb51e72244c267f1c271e0124a625201c7f1d54230d25371bf51c9d2282245e1a611c282241248119491ce521042443193a1cab21ae2312192d1c6d2146230319d01b2321dc229418911be020762254183f1b9d201a222518e01a6720cc21ab17721a332086210217611a1a205c21c1164f1a07203b21ae16631aea1f1721c316e419c21f0e219216a5190f1fa120a8150000581be31b0000b522e32649282623972322285929e02357249228ba299124c724b028f629e4240325dc28302a21255225f528242a4c2547264129db2a292685289c290b2b6f283a2a1b2af52b322a092c2d2a0f2c042cef2ce129d72bfb2cec2c142a072cf82c592c9329b12b542ce32a6a29802bc22af3286029852bc9281e27372a822caf262126e4294d2c95253d26c229542c8125c6256129b92c0325d525b428362f102532253d2966327024a324f7283034ec23d4248b288f3420246e236f28a3343e224d249828b7341b23cb23a828de34532298255028c1347624d6221128d5345b2160225e28e034ff2073214a28c7344520bb22d12705334621f720da263d2da41f3921a326ae29e41f57217426d428082094207526cd28c91e5d20f5256c28581e372098251928031e18205425c227b91d32203525a027bf1d9e1fc424db261c1dc51e6c2457268a1c571e3d240926291cf11def238f25cd1bb11d71231c25501b5c1dcd22bc24bc1a421d51224d24751ad21cd621e123c919aa1c7f21562377195c1c2d21e0221c19121ce7207c22c518681bae2033223c18fa1a7d20e521c817bf1a5620b0215517cd1a3a2087213317b11a0f205021e516b21ad51f02218616f91aba1fdd203017631afd1ec0200b160000671c491d00008722ba26262838223924282873297124642474289c299e24c4249b28ef290325f524dc28332a252566251f29812a7325eb256129d42ace25a3269d29f92a83267a27a829e72a5627c1275129272bb82756285129522b51287828b229a22b73288928aa29ab2b8428ae27d629fc2b6d273826e729282ced25df25c629222c6e25ec25fb293c2c4f256126de293a2ca12534266d29082c63258d24ff28752c04240125072910305824b02457295c3312242524ae28a534142358248728ec344c2307238c28fb34b4210a23bc2832359d212e23d5282e35a0210923d42835358321c721782847355d20c1243b28e4342e232823e727a331682109217327732b771f082162266b29751f0b2178260529551fc6208a26dd28ce1e3e212f266c287a1ff420ee254828ec1e8a20db252f28371e52209325f827cb1d1320e52417273c1de41f58244526121d451f1524d225911c741eb4238225ed1b111e56232125731b8f1d0423e024ac1a471dc4229c24551af01c75225924c919f81c28221a24d219cf1cc821b5238019b11c73213c235d19531c1121bc22d318101cb82047226b187e1b7220e621ef177c1b5820b021b717521b44208c218b17e31a13203221e716de19d41f02210c16211a651fe42025160000a51b9d1c0000b022e52633283923f82323285a293f2469245b288729c324c424a228eb291425f024d628222a4325292508296b2a5b25be253729d12ab725132699291e2bf6253a26ae290f2b1c268c26b1290f2b6c26cd26c529282bac26b226cd29472b9226ae26b829532b7626d226b729af2b6726d826f129082c54267226a829fb2bc725f625b029092c4225d925ba292d2cff2425268e292b2c29254425a129012c6c247724e828692c80235924a5285e304e233124042902340b23e323592922358322f523d72847357622c4240b2968359a23ee22c2286a356e21bd22692867352f21f022db288a353d218721042875342d20cd218b27302f622042231227822961219c211327a929282074224f27b129b1201e21a726ec28711f72216526ca28eb1fa220ee2555289b1e4420a9250c28f61d1b206025ad279f1d801fc624d326231da21e4d241e26731c301e2724d025261cf51dde239125d21bd51d7d2345257e1b9c1d0e23ea240c1b671d96228624a31a381d37224424431a331d0e221224181a121dd321d223cc19c91c8a215a2379195e1c3b21ee22df18041c0a21b0227b18541bb9203f22c217d41a3e2095210917bc1a0c203921f1167e1ae31ff4205316491ae31f0e21a8167f1ab11f4921e11600004f1a731b00005722c7264828c2222e2416282e29472469244b286929b324ba247a28ba29e8241625b5281c2a3525372510298c2a442563254829eb2a5d257925a329572b7225d925b4296d2bbd25c92573290e2bad25c2257029d62a912528269329182bde2551269f293e2bee25d426dc29b52b50263827c429cb2b79269926cb29f42bba256526c929112c8d25e025b3291c2c05255c2595290c2c94244f258529012c8924d5244829b52b21249f242229882ce523b72207297630a42150233b292634f021a523742964351922a023d328c635de21ec22eb28c23553215923ae28cd358d21e824be287735462326227f28a2328f2086210828592c18209b216e27eb291320ba210a2762292a20e820a226f328ff1e2021a926e5284f1fc3217526a0281c20fc202e266428f71e6720c7252928071e32206c25ef27bf1d871fe32429270c1db91e76247526821c321e2524e725111cb71dac236825581b9a1d2a2300250a1b6f1db822b424851a741d62226a24641a441d1a2233242c1a231dcc21e823e019e91c88217f237a19ba1c3d21102323195a1cfe20af22bb180e1cb920552268187f1b8b201022f017451b6520cc217e17e61a49208f211c17b11a26204321b5166b1a0c204621cc16881abb1f3f21fe1500003b1a091c00002c2264260428d7225b23be27f92806245d2472289729b624bb24a828fc290b25f024d7283f2a312520251529922a51254f254129d32a5c2579256829102b5f25c82583294a2b9725f425a629812bac25ff25b929a62ba1250126ce29c72b7825f525bd29bc2b5725dd25b929c72b2c25b1259d29c12bf124a1258d29c42bcf247e258929ce2b9d2449258029e52b712431258e29e72b5c240f257529f52b2e24172545299a2b342442244829ae2b08233424ee281f2cd3220823e628b72f9c21cb228b286a333a21a22367283335a8215925a128bb35c7232123a12891352f21df22dd281934ff20591f73274b2e581d1221f12627295f1fbd214827a4292c207021af278c29c11f4723d52790291621e0239c26cc286421a221112687288e1ffa21ca254828d91ff1207825ad277d1e4c2013252c27a41deb1fca24c926161d761f89247726e61c3c1f3c24fc25a61cc71ecc237825421c4f1e4e231f25ed1b131ef522d824761bd41db6229a24fe1a701d57225724861af91c01221024d419bc1cb0219f238c197d1c5d21262322191e1cec209622b5189e1ba32037223f18261b6520e121c517281b4e20ac219417331b3f2095216b17051b112049213c17461ab71ff1204a161e1b0f1f8f20871500006d1b151c00800322722608287e227f23e4271029fd232f243f286c2976248f247a28ca29cb24b024b2280e2aee24dd24fb28712a0c2511253b29d42a1d2558257e29392b3e259925bd298a2b5625f025d529bb2b93251c26f129e62ba62519261e2a0d2c8d25fb251f2a152c4725ca25202a152c0725a125f429082cba248d25c429f92b96245225af29ef2b52241e258629bf2b1524ec246429882bb623cd244c297e2b862391242b297a2b072344240529b62b9022d924fe289c2b53239b244629c02bd4228523dc285b2d78211a227028bc30442066239128b93211212225a6285832e2224a216a280e2f181fb221c527632af61f692172277929b71ffa215c27952943204c220e273c297d201322f52611295520ae212a272c29f01f5f21dd26ff28821fed2050268d28e21e9a20e7252f284d1e3f206425a027b21d851fdd24dd260b1d0d1f99247126ba1c6b1e5d2419264e1c0b1e1624b225c31bae1d952348254c1b7c1d1223f024e41a711da4229e24881a411d32224824281a0b1dd021f423e9199b1c6921672344191c1c1221e822b318ce1bdc2092225a18611bac2048221d18341b78200822d5171b1b4f20bf218617321b332067216a17f81afe1f0f21fc16901ad71f1621c316a51a601ff42079160000ca19571c0000ab223226d227d3229f2316283929022433242a284d295b244524442877296e2458247928c32972249524cc282a2aa024ec2419299a2ac22430256e29142bf2246d25bb297d2b04258c25e829bf2b0d258a25f729e42be3249625fe29fc2bda249325fd29062caf248825f3290a2ca5247525e5290c2c82247725d729072c70246725d329042c4f245725ba29f22b2f24102579299f2bca23c1243429452b2e239e242829372bfa22752424294a2b9b229a242829552bb1222d24ff28472b12221724ba28ba2ad52150244029672b07223823db280a2cf120b7213e28592bd31fe7210a28592a0b20aa225328d2299020072475289c2a84213a244a28d229ab2142246527252997211d223627332903207d2185275629351f6d21c526cc28201ffc20fb2532288b1ee1208e25c927681eae203d256427251e4220e624d626971dd11f91245726221d221f3b24e825af1c8c1edd237e25351c421e6a231c25051cc31df022c5243d1b711d80227224af1af91c05221c24f819c01cb221b123b319821c6f2147234819541c2421da22f318111cd7207722a618b51b94201c224c18601b5120bd210218491b1e206b21b7171b1bd61f2a215317c61a6e1fdf20ca162b1a021fa0200216ee19581e27201b15bf19521faf204d130822692609288422f0227627c3284c238523db2717291d24f82349288e293f243e249528ee2976248c24d8284b2aa72404251d29af2afe2449256529122b1c256a2592295a2b02256c25bf29962bdc245e25db29c32ba9245c25f029e82b94245c25f629fe2b6d245a25fa29042c45245d25ef29022c34246725e129fc2b28245f25d629f12bf6234425bc29d12ba8231b259a29a72b4823e5247d299c2bfb22902460298e2b602243243629762bf52142241629462bd521292407292e2b94213b24bf28e62aac217e24c328df2ac521fd23ce28952a05211324ee28872a1e21d4231a29c02acf20a423ab28512ab12074225f28142a0e2008224828152ac01f752198278e292a1fd52147272a29d21ffc213127292919206421bc26d2283b1fd5201e2658287b1ea0209d25cc27131e2c2038253f277a1dbc1fe824e026141d491f97247826c81ccb1e45240526761c411ef4239725041cc61d552322256b1b741dd622c824011b481d62226c24a31ad61cd9211124f119aa1c7f218e239919571c2b2115231619461cfd20c3220219431cdb208522e0183b1cb4203e22b818311c8520f7218e18331c5320ab2154182a1c272068212d181d1c0020272102183b1ba51f06210b176d1af81eb22089150000e715ee180000f921cb257427482262227a262928882219232e27912877239323ed271b29c1231d246d28b22927249b24d6283f2a8524ec244a29cf2ab1242225bd296a2bd2245c250c2ada2be12472253f2a142cba248a255e2a302c93249625652a3f2c60249225622a412c21247b254e2a3d2cf82376253c2a382ca2236525272a2c2c8a2350250d2a1a2c46234725ee290a2c14231f25c429e42bb922f9249729b82b6322b92460297c2bef2181242f294f2b682160241029192b0121472404290b2bc52039240329f32a9720732419291d2bd620f723d8280c2b37206d24a828252bb020b9239828992a1720ac227828312a101f932260286e2a551f5e234b28342a512054221828c029c61f1322d2278c29ce1fa321512740298f1f4221c426d2280d1f00214a266528b51ed420f22523287a1e7f209625dd27081e492036255327a01da91fb524aa26071dd71e402404267d1c231ebc237525e21bcd1d2923fe244a1b651d91229324a01a4b1d1c2233245a1a181db821d923f819c91c5c2147237919811cfc20cd220619261ca220502282189c1b67201a222318331b4e20e1219f17101b2d20b6214717fd1a1a207f210117e61a07205e21ea16d61aec1f1f21a916371ab31f19213b165a1a521fe320d41500009b194d1c00807121a82511277e212822fe2676287a226722a1264c28bc220d234727bb283723b42337286929e2231e24ae28072a282470241229982a5b24db24bf29752ba1245c256f2a362cbb249725c12a6d2c7524a625cd2a782c1b249825bc2a6e2c81237025942a522cd5225b25652a352c942235251f2a102c65220725f529f42b5122ed24dc29d82b7822d924c429c22b5d22ce24b329b12b4f229c248f298f2bec216c2454294c2b8e214d241d291f2b292133240f29112bcd2033240e29132b912037240e29172b5820322411291c2b162040242029242bcd1f37241329e12a7f1f0224e728a92a211fe223ce28a22a3c1f6723d928ab2a361f7523be28862a4320e0229228572a6b205f226028052a4620aa21cf276929c21f1721b426bc28f81ee0202c264c28ad1e8920b225de27361e102048255927901db21fe424db26451d701f82245326fd1c051f1e24c5259c1ca71e90234425461c921eec22d224211c841e59226f24d21b701ef6211c248b1b131e8a219d23f21abc1d28210f23651a491de620b822bf19a81cb82079221019431c91203e22a218f71b6820fe2137188e1b3420a821c917781b15206b217c17841b03204a2189175a1bbc1f0d21f416361bb81f1c213a17631a041fb82052150000ce169f1a0000352221258726bd21542185253e274e211e2281262c284322cf224227c128f8223123cd271d295c23c5234e28a229d8232724c428332a2224ca24dd29872ba2248c250e2b932cf9243826c92b132db2246426052c3b2d1b242f26d42b1d2db922e225822bf12cbb21b525362bba2c66217225b52a772c75210725172a202c5321ab24b229b42b13217e247829672b032178245d294d2bfc20732444293d2bf620792443293c2bdd2067243c292f2b89204b242d29272b6d2026242a291f2b2820f2230f29022bbd1f9e23f428e22ac61eb4230329f22a6b1ec6232629242b091eee2345294c2bef1d0f246b29842b131e20247f299b2b1b1f1f248e29992b2120d4234c294f2b9620e722b528842a8820ea21f027812922206621d826c628b31f2821532657285a1fb920ba25d127bc1e4d200a25d926e41dbd1f77241526301dc91e0c249c25741c5c1e76233025161cee1ddb22b724731b911d3f224a24d61a3b1db021ef23471a0d1d5e217c23eb19ce1c27212d237f19a41cf020e8224f19421cb8209c22c0180e1c96205d228618bb1b722014225018711b3720b8210b18fa1aea1f59219517a41a8a1f1021d816771a661ff020aa16891a581fce208d16531a761ffc208516b919f81ebb20401500008f17a4180080fb20e7243726f520f121b3253227ff21c321d625af27e621dd2161263a28d6216722ca2676285f22f9223d27b628f122ac239f27eb2887234824ce282a2a242409262f2ba32c7f25df26df2c572e49253527962d5b2f69223e274c2d032f571e6226652ccc2dab1e4125f92a9e2cf91ed824de29be2b2c2062242f29f12a84202f24e2288a2aaa202024b9286b2a9a202424a1283e2a62200c248728392a4920862358280d2ac11f7d233428af29821f43232228ad29131f3a231928b629a21e77233628cd296e1e74234828ed29941da6238428522aa51c8423fc28ea2a011bfd23b129c32b171a1224332a342caa1a73249f2a722c671d9924dd2a872ceb1f5c246c2a452c1c21e4237a296d2b2e2185235528082a0b21bd222327f128b520fa20f5252128f51e1120e024c426af1db11f5624f825441d5a1f02249625d31c021f84232e25671c991eff22d324251c051e97229924901ba31d4f226524ec1a4d1dfd212d245c1af31ca521d723cd19a71c3e2143233019671cdc20b022e918091c7620312263188e1b3520d4211b18321b11209f219e171c1bea1f76218717ad1aa41f3c21b116731a5b1f00214816411a0e1fc1201816381ab91e8420e215df19a81e7320b8150c19e71de11f3414d10a551cd81d7201d5207f247725ac207d215625b2263b218f213725b5266021d4216125f926a321e5216f251627c9210c2258256627ef21d5213c256127e321e723e325dc27dd230b224726a7270422a225782c2f2d9324312cd3317e33dd228628e22e50302192b023382a512ce21c5d220128e629751f072386278629352108248c273129c0216b2348270429142147234a2701291621f3221b270c29f420fb22fe26f128fa20e122e626ec280021ca22de26b928bf208122aa26ba288c204522a526ae2807204122c126be28fa1e0522ea26d628861d01225c273429a91cfd214a28f729421aec22a329b12b4d1449259c2b0c2df891ef26ea2c772e0c177126fa2c922e75209a25d42b1c2d0a2393237a293f2b9d2197211c27db284d20122047253e27431e5120d7248e26471e65206f241726241e9a1f12249825341d081f99234825b71c3d1e0823ee24181cdc1d6c229324871bae1d0c224424fa1a821dc42106249c1a691d7921a423571a091d25212b23e619d91ce120c0228b198b1c9b206b221119391c5c2010229718081c2c20c5216218e31b01207e212d18bf1bda1f5821fc17461b9d1f2e214a17f11a6d1f1421c316a71a351fec207b16521af01edc20fa15f219ce1eb520cb151c19b21d961f661400001c156f180000762055244d2510204a2124259826f72051210d2587261121762119259626202195211a2586263e2187210b258c2608216321e3246e26862019214724ad25fb1e0a1f3a214e23761a6f165c1c631ed0107019481ed5205f16c51e57232425351dc721d125d82787207923d226ac28f6214023e726c5289421fe22d326ba287b21ef22ae26ab288821e922a826a72883217e22532673282e214f221e26572808215522ef253128f6207122d42515280c21b422c725182828214d229325f527c2200f224a2599277e207821dd243927f41fa42009244d267c1e391c98227625c819cb196823df261d171821862a852c9f1b25290c3011315c9cbb2ad730f9311624ce24332c892d87235e2082251b285a1ec31fcb227e25511d081e9d220a254d1c751e8a220b25541c851ec622ff24481c741ea622bf24251c931e79229c24211c2c1e4b227824951bc61d08224c24ee1a401d9c210224271afc1c5621a123d719f91c10213723b019bd1cb920be2227199c1c77205922e1187c1c3d20e1219f18401ce81f65216118291c881f31212c18191c501f0d211b18151c301ff7201718ca1b1f1fe2209617611bff1ecb203017e31aea1eb420b516961ac81e8f206a16341abe1e902065169a19001e1720aa14000082121a1600001b208b23cd24211f98207124bd25b81fd6209e24f1252120fc209f240b2630200221a0240d262320c4205e24c225781f0121be233125da1ed41fd7210f24b21cfc1c30201722431aa91dba217e23271d1520a724d9251020b421b02553275b21f821c525ad275a210d22d925d4272b212a22e525e5272e211b22dd25e1270b210422c425cb27e220ea21bb25cd27b820d321ab25d327a520ba219f25ca2768209f219325b9273f20a9217d25a4271e20a621532581270720a9212f255f27c01f782103252b27561f5221d3240d27fc1ef1209624b926591edf208e249a26421eef207b245b26571e5320bf2368258e1df61cf120ee22ac194c14c41a651dea0e72147619ce1d250ddd1a521e06218615d91c9c200c23ae19591d96212424b81a9b1de3214c240b1be51dff215c243d1bd91df2215d24041bd71dcf214124d81a9a1d7821d123901a2d1d20213d23eb19c01ce020e7224c19b61cb5209c224119931c852055221a198d1c5d200c22f218691c4320df21ab18501c2120af219118211c082088215f18f81be51f6b211b18b01bbd1f4c21ec17901b8a1f3621cb174f1b331f00215317f91afe1ed020cb16b31aab1e90208716701a691e5a201716411a5b1e4b20ea15d119e81dd51f0215000087147917000057200524fe240c1fbc200d258d26f41fbd208f24f825b11f9220452495254a1f9420132451250c1f3c205d23de24651ef31e5a222b24401d0e1e8a215a23be1c0b1f0e237924371ee71f6924b125321f8a200d25a6261220872187258c27cd200c22de250c281421ee21fe252628e620d721f7252b28d320be21ec252928a920a221c7250e287e208e219d25e2275a208321642592272a205e2132254f27f51f352105250d276d1f1b21d824d626231fe920b2249f26b91ebd208a2472265b1e8f2066243d261d1e5d2044240e26da1d4e202724eb25a71d5b200f24d525981d6620f823bb25c61d7720b9237425dd1d1b200723e2249f1df01dc4210a24511c221c7a206722021a561b0b201522d118cb1b15202a223c184c1c292051221018d91c50208522b918321d8220be225b19081db120f1225419ee1cd52014235c19df1cd6200e236f19cd1cd42002235b19d61cbf20de224219b21ca520ad221b197a1c79206722bd18591c4b201a229a18371c1c20d0215818131cf11f93213318ea1bbc1f6b21ef17d81b831f4121dd17ca1b5d1f252196179f1b3a1f0b216d17091b001fe220a816e41ad21eb0205316a31a681e692017165a1afc1d2e20a6156a1adc1d0820b415d31a531dcd1eea147828471e31205d25652ca4240027a529012e3b265c27072c022f76257c27e62ce92ff4267b28312d7c308b283729412dbc3000283528482db83023264227ff2c7930d1244925bc2c5630b9229324bc2a4930bf21e5262c2a24307b28842b4329a92d6d304c322820062b3a2cfd2d5d1c932a6c27ea29509e06278123ea27899b8c289324ea2e2a12c3302f24ca30c62c343043261131852d742e0b246a27a72ac0258025d02c8599e31d0000212d7d9400242f1cd42c32996b1748105a2d7e8e000000000f2d008000000000c32b0080000000001d2a0080000000002c2b008000000000c12e008000000000303000800000000078300000dc187c20213299146720b4253132c91c58202528fa30d81c3c20f5288e2ef61cc01f5e287a2aa61c6220c025f327821d7a1ef2232b26291c1e1ef4228924041ca11c2c229623f219e61cf9217d23281aff1cb6216523471a4c1da8213523a81a5e1c512102235d19011c3c21d422eb18351be8209e225318111bc3204a222418ea1a8620fa21e8171f1b6c20b721f117331b4e209221d317551b3a206a21f8176f1a17203b21d016e919b51fde2042163719e71e582060150c19bf1e3c200f150b19951e2820ea1406196c1e0920c014b9184c1efd1f7814ff18031ea11f6e15c4247c1aeb1ec91dfa2a4625d2262c296e2d352694276f2bd82e6926e827fa2c02309c28c9297d2d65301829352ae52d883061280e29d22db1305f26b727a12dc730d824cd25992dd930d325c9268b2d2731982796282f2ee2300e2a322ce52c5031fc2c2f2f7a2da430c32cea2df22aa127a627a62847a138272824bf266ca2b92f1f22072f4e2b04317f2643314b2ff12f4428c131c62d3b2dba26a62b6d2ad120f223ef2c1f9aaf1400003f2a028f271579137a2a959000000000cb2b008000000000a42b008000000000d52a008000000000712a008000000000462a008000000000bd2a0080000000005d2d00800000442020310000541f8525bb32f31d0320582610320f1e0d2004288030c71dff1fa427de2ce91ca91f672699290e1c5b1f59257e271a1c1f1fcd247d26461c931e27249c250a1cc81d4b23dc241a1bb11d91225c24fe1a301e92224d249a1b9e1d45221924e61a891cb92186239219421c882130233b199c1b3621f8229118841b1d21b9226718581bf22074224d18161bc22026220d18031b9b20f7210218031b7a20c821d217c91a552080219117651a1b202721f416e219c61fe6203b16ab19751fb620d7159419401f902097158719f81e5f208a150019931e3e20df14fa18db1d771f49145f20e01b181e91189928f925f42798273d2ca1278428482a302ed527d028962ce72f59286529bf2d7f30ab288a298a2eb6306d287129da2ec73027280329ad2ed2306e27a328bd2edd30c027c628cc2e133170289529ce2e6531eb29062c152fa8300e2a142c312da330ab29c92be92cf83091282a2b502a5f2ccc24202a681faf30d325602e392d9f3024294e313e2f182f002a4e328f2dc02ca129b5314f2b2526e0288b33e724892527288d33a624d5230326b8339422c22142250f349820391f87241634751d881a7b24d43390185d1bdf24ef330b190000bd227e3300000000321eb03300000000432020340000de10f1233e32370f1c1f8326f232781d22217c272232c11f921f3827de2f661dd91fcb26e72b431de2209226b429231e3d20d9259128531d351f18257227bb1c081f72242e26b71c301ee2236425101ca91d7e231f256e1b941d2b23ef24531b591dd822a524051b701c46223824b3193f1ce021c2235619ac1b66212e23d218641b1921a3226f18c11ac1203e220d18b91a8720e421e1179b1a5f20b5218e17991a43207e215c175a1a23206121e816471a0b203821d316b619c61f09210c169e19941fca20ca15cc198f1fb620cf15ef196d1f9e20f3152419341fa62027157919ab1e5120a415f0136c1850193e021625952538276a24332911276b285e289d2ceb27c828192bd72e5e282429f92c4f309b287f29a12ee2308d28a129842f1a3195288329ff2f5031c028ec292a30903109296c2a7030c1317629f52a9730b631132af02b8e3034327f2a532cf3308232182a562c193154327a29602cde302f32fb28c42c95309c317f29e82e5130cf30c729db30662ffe2dc2290032c82c202ab729c632f9288e26fc287b3399255e227728a7339e219a222328a1331b22eb231d28e2336f23a7222b27093427227d2199274d3413214b200a275d34d11f852045262934fa1faa2154260734d6204a1f6a26f533051e73208b277c33191fb92015283133671fb421112809326320a320aa27292fe01e5120bc26152b281e8620b1267329321e7e2014269228271e402096251c28b31d6c1fee242027df1c821e61244026461c021ee1237e25b81b2b1d0223cb247e1afa1ca1226e24411ac11c7c225024f919991c4e223024a619441cd821d8233d190e1c6c212f23de18411b2921e4224018461b0221952243184f1be32050222e181d1bb3200a22ef17c01a7220ad2187176c1a3c205a21fb16fe1904201c215816f219d41ff8202116f519c41ff220f9150b1a8f1fb2200f1670191d1f89202515d119b81e5b20aa1500002d191219000070232b2609284c233d266c278e28db25382ae427b6285029262d0d28e4282e2c782fb22898292b2ec830d128e029e62f5431fd282c2a6730ae314c29bd2ab130f331b3293f2bff301032dc29772b2e3116324b2a352c33316432892a4d2c8c31c032312a342cdc31e432272aba2cfc314a32f329cb2c5f318531f529852db7302c30152af82f022fb12c3b2a9331c02ba92894299832b3274d2786296d33ed258e258329173482241c249e28fe33ca22cd24d3280e34ee231c2353280034df21eb2258282034d021bf221e284134922108240f281a34a922df23fe27073464226b22f6270e3407219b22f527f733152187214928aa332d20da211b28fc3156205c208a274f2e571e8d209c26642a7d1ec2202c262929841eba20d9258828571e96204d25fb27051e4420e424ff267b1d5f1f7b244126bc1caa1ef8239225301c601e94233a25011cd51d5323f924541b7a1dda22b524ba1a051d6b225b242a1a6e1cfb211d245119561cc921ce2315191f1c88216a23d418071c4c2105239b18e21b1121b1228218ff1bd12054227618c31b8520e82154186d1b3c2084212418ed1a01202b215517711ad31f1021a316f719a71f03212616a6196f1ff120a91541193a1fe620f8149119df1e93206c15bf09221b9c1b158083225f2621287b223d2418280f29662412274f2853298a26482a4a2890297429712dc7286e29b92c0530f5289429fb2e21314629422a6130e731a729fe2a0b315632c729422b97315632052aba2bae317e325a293f2bd231bc32822a802c2232cc32982a732c3032bc32fc29712c0a325d327b2aa62c9d3123318e2ae22c7630af2e642a462e9d2d7f2a212a87305d2940272c2a5e32fd253527212ab033f4251225ad29e7331e24a32428292134a92326255d293a34412407247a283f34a7220b24bf2863349022e723972879346a2291248f285a34492337248b284634b922c2224d284a344c2106236b283d3467217022a6280934dd203f227b28e131a12021217827302d751ff2208c26d9290d1f4d21a1264329691f15214426c628f61e5f20a6253228dd1dd01f28259a273d1dab1fdb242427091d1e1f5f248826ac1ce71dd623b525951b891d6c2337251c1bdb1cf722d9241a1adc1ca8228c24f819ae1c4a224d249e197b1ce821f6234019341c93216a23ed18071c3a21e1229b18941be320712255183c1ba12010220918b81a6d20cf217e177f1a4a20a12110173b1a2e207a2199163e1a1f2058216f160b1a072038213a16011ace1f022130168019841fde205c15f0192a1f9d20f4150000ee19bd1a0000f5223c26fb2706231f2431282f2956240c259028b329f42422279428aa29b2268b2aea28e2290d2acf2d5529592a4a2d543079298f2ac32f6e31da29552bde303b32112a992bac3194325a2a0b2c1532ab327a2a572c4332e9328c2a3f2c7d32f9323f2a352c73328d32b52ae72c0f32e931552a7e2c4c310a30152aa72c212fa62c0e2af12cf12b9e28512ad72ec227aa268829043181255d268c290a332a25bd25a0291c349424ad25d02831349b24012636295834ca248024c92861342e234d2433298634fc222c24ee289b34a8228924d12884341b237124b5287e34f622e02370288234f32183231f286b34ac21b2223c282a34f620fd21442855315b2078208127532c5f1e6b21fb26ec29ba1f4c21d8266b29671f5220fb257a28eb1d142080251628781d162029258b275d1da51fb624db26051d151f792453268d1cb11e2524ce254c1c881ed62367251a1c011e712321258b1bc81d0f23d8241a1b691d9c2290247e1a361d562244241b1ade1cfe210b24b419901cb021a52338197c1c762156232119581c2f21f522d818061cd8209a227d189d1b8a20f9212318d01a36206a213717a61afc1f2821da16781ade1f0d217c166e1abd1ff32072169f19851fe1205115a719cf1e6620de140000cf18911a008076239b2626286d2356244f287a298f242825b528e12934259b25b628122a8025022738291f2aae261a2aae29da2aba29722deb29672b1d2d06300f2a9a2b712f5231c929232bff301f32e429842bd5319f323d2a302c6732c232b32a5c2c713296328e2a5d2c5e321432862a9a2ccb31c030d32aab2c76306f2d942abd2cf32cd429a32abe2c0f296527b12a312d362638268b29252f0c2595252329de318824b425cf292d34a1249b24222969347a230626bb29a834e4245e258229b534482480243f29d5342e23d2241729de348e236724b828c234e6222624b128cb346222f7228a28d7345c21b6221728aa34122191226d285234de20f8212e2894305720d1214c27022b26206422e92694297720992128278b29d31ff4205a26d228c81eaa20d5254b28631e1f2031257627871dfb1f0d254c273d1dc81f10252c27001d491faf249726ae1ccd1e44240426461c041eb7237525631b7b1df522cc24941ac21c6c2270249319771c0b222c241b19541cc421e323f318481c85216923c618fb1b3421fd227318a51be820912228182a1ba0203022ca17cc1a6a20e8213217811a3c20ae21b416761a24208521a916781a152064217c169c1a04203821a016211ad21f272125160c1a3e1fcb20e41500002d1a041c00001f231a277a28302331244a2893294a24a724e4283b2aa1243f250029822a262562258c29cc2a482533269929d02aff25772993291c2b3529722c002abe2b3c2cd92eca2aff2b872e78305e2ae22b52305631622a512c3c319f31842a672c84314131282a412c28316030252a512c3b309e2d002a352c462dfd298d2a922c74292327332a7a2c32268a26fa29862c6725a926f9293c2d50255026a229f62ff2246726472a193304258c256c296b3459242426e3289c34d02494249128d0342d2339251229e13405245124082924358522ce25cc28033562249523832817359f21d222b2280f350e21a42298280a35ec20ff22202839342f21a920b527ba2ec71e02224f270f2a4920dc21bc2606292d202921bb260429361faf203a2699286a1e8520c9254528301e3b2071250928ac1d34204e25d327851dbb1fe8241a27131df01e96249326751c651e56244026041cfd1d0e24bf25861b991d7e232f25e01a501de422cf24601a3c1d70226524221ac51cf021082474199f1c9b217f232719521c4021fb22d218171cf7208e227218731bb42035220d18001b7820d8216917ea1a4e20a0212017e31a2a206a21e716b21a0b203b21b616c41adf1f052166164f1a981fee205316451afe1eae20ee150000ba1aab1c0000572383279428e42293248328b629bf24d824c6281e2af5246925f528872a76253e254229ab2a3825e2256429bd2a9b258026af293d2b1a267a282a2aa32b34289a2a8d2ae92b4a2a902c472ae52b6a2cea2d0b2adf2bce2d622e1b2ac82b432eb02de229e92b952d6c2c082a332c372cb729892ada2c5d290027252a6e2c462629261e2a702c59258426002a422c7925ec26ea29672cb72533257a29182d4b248d2549298d30822476258d2918346f24ab240c29d73472238c25cd28f13459243f240129263589227b24fe286935c5229023272962359b211324ad285e35ed21952280285e35b12067246628563527221c25ad28f433242389215428f32cbc1ff7213e27c52916207021b72628294b1f2321c1261129e41e7a217226aa28311f222113266528981ec120fa254328f91d7f20b9251328a61d322024257a27271df21f96249d26c41c871f37240c26841cad1ef123b525d31b321e80234c25421ba71d23230225771a601de422ba24251a0a1d992278249f19f91c452235248c19e71ce621f6235419d61c91217f231f197b1c3021f922be180c1cbf206c222c186f1b7b20fe21a917601b6020c9212f17231b4d209921f416fa1a272051219916141ae41f1921ec154c1a4c1fbb20221600006b1ab71c0080602349276e28722377247028b429c224ba24a028f229e8243125f328662a5025522535299f2a722576256a29ee2a6f251726ad297a2bce258926292ae72b3a262f26142aed2bce25e327c029822b84271829d929a52bdb283c29d429112c1029fc28c429cb2bc0281e28e429022cbb2770273b2a402cc6266f26d729442c9625ed25122a382ce5242f26f829592cef24b426f7298a2c41253d26c329302ccd2451251029f82c17246f2502294a312e24192524299e34d823d82407295b357423f3231f2974351e225c247f29b4359622d9230c29ab35b521bd23d728b535a0217925e928b935ce23ed23fe289b358a21be22e0271632b6202222df27072b4920f5213b27d4291420fb22b927b529c8206721b926e7283f1ffb21aa26fa280320f7204a269928a91e7d20dc252f28e51d46208425e5277d1dd41f00253427071d091f8c246b26851c7f1e49240026151c181e0724be25a81bf01dab236a254b1bad1d37231525a71aa51dd822be24741a7c1d6e2273241e1a691d2c223524091a351de721f323a919e91c9c2182235619661c46210b23a818f71b0c21be223718271bbf2048225f17e11a40209b21e516b31a042045218716881ae01f06212e16461aba1f0f211c16311a781f2e21351600009219591c000014232a278e28f22262246b28af299c2497247e28c229c3240825cc28352a14254b251429972a4525a1257a290e2b7225ea25b0297a2ba325d125fd29c72b8b259925342a0c2c5625e9251a2ad92ba225e725082adf2ba0259326fb29cc2b2c263527442afc2baa260d27782a2c2c6c265427ee29112c77263e260c2a242c282546262a2a2a2c18253d26212a442ce324ea25dc292d2ca2249625bd29362c60248a257829102c572477241929162dff22362453293b3299229024c0294b3505236d248929c035af225b25be28d435ca237824662901365f22e524f428fe35d722cd23be281c3674212f236328573505211221c526472ff11ea4228227db298c208f225c279c297e200b2110274129e81e6121af26c928371f87218c26b3286a1f12218226a428a81ebe201a2661283a1e7620a0252228bb1d0d202725a327341d331fb824e026861c7e1e55242e26f91bee1de6239c251e1bb21d48232a25ac1a851ddb22d924501a801d85229724221a581d3d226424f619391ddc211e24ad19ec1c8e21c3233619b71c3c214e23dc185e1cf620db228018101cab2062223018851b7a2008228a172c1b4d20be21fc16f01a3b209121c216211b2c205821f216931a0b2056219716921a921f3c21071600006f189e1b0000ae2297262e28d6221d246028a6298024c724da282d2af5240a2501297c2a282538252e29b72a452577256729012b5d25a8259d29462b6425db25d0297d2b6a251326d929bb2b882596261d2a022ce725a1260f2a0a2cf12536260c2a112c7b253c26f5290c2c6a254a26f1290d2c5f254626ed290c2c2e252b26e529152ceb24cc25e6291f2c8b24a625d529232c5924a325dc29272c56248025b5292b2c3b2456255129db2b1b2452244d29082ca6227d24ea28742dc8223424a12916333b22bc240f2abe35e222b6231f292c3663212d2452294236b821de22d8285b369b201d244f2968368421f82321294e343b21c0225628992c8720cf219e27d929a01fdd211628ee29b31f272302280a2a9820d623b5262d2909218c215026ca28f81e28222f267c28bc1f5221df252028af1ea4205625a427b31d3020ef240a27251dd81fb424b626d11c8d1f6f245726a31c031f1524c925351c8a1e9c235525d91b161e2a230725221bd61dec22c424d71a7a1d96228124431a131d3e223824a919de1cdc21e3236e19bc1c892167232619571c0c21cb22b8180b1cc0205c2248188f1b7d200622ca17621b5a20c52166175d1b4720ae2161173b1b122058210b178a1aa11fff202f16c81b221fa520d21500007f19901b00006422ed266a288a222d245828a129552471249e28e2298c24c524d428542ad024ff241729a42af9243e257a29322b38257925c829972b4b25cc25f329ce2b71251226232a052c872565263b2a0f2cbc256726512a1f2ca6256026822a462c89252e267f2a4f2c312529267c2a552c162506265f2a482cce24d3252a2a3a2c90249425052a342c37247725d029102c21245625a229d12be92344259329c82bce2300256129c22b4523fd243229da2b41237e251e29952bd523af246629482d8c224e249729a132c6212b242b29a6357921cb248f29ac36062246266529e636b52369255b29a435a5224d23492736309620a022632766295920b522d427dd297f206122a827822947202a22062763292220472175275329ee1e9d211b271f295f1f3d219326ba28e11edf2036266b28651e6b20a9250628ad1dc51f0d252b27fe1c411fc624a1268f1cb51e82243f26371c4d1e3624df25bd1bf91ddd237825561bba1d51231a25df1aa81dda22c324781a7f1d64226924491a551d00221a24f219e81c96219d235519771c3f212923ba18161cff20d3225418a71bd2209b220d18581b9d207b2292172a1b6920112262175e1b41207c2162173a1b0d2020210a17dc1ad81f2721af165c1b921f0221f61600009918681c0000e422a2262928c3222d246f28ac29642464245f2898296f2497249228de297024a924c528282a822409253429b42acc246d259d29482bf124cf25ed29bd2b2025ed25272a032c1025ee25402a1f2cfb24f5254d2a352c012512265b2a452c0325ef254b2a432cd124cc25302a3d2ca0249f25142a2f2c6724a625012a262c5924a025fd291c2c40249f25ec291d2c2b248025c929072cff2325256e29a02b7b23ec244d29802b0523d6245a29ad2bc22242256c29c82b3323422449299c2bb6216c25a828e22a1e232124782996304e2191233e293234c1202c2304298834812033208527e030471d25239c289e2b7d205c255a28062abc22c4230328212ae120592304282c2a9e203a22c7279729d31f0122b6274b298b1fab21ea26e2281f1f1e2142266e28491e0621df2529282c1ee32061259727011e70200a250f27731dfb1fbb24a026e71c591f64242c26831cdd1e1b24be251e1c701eb3235725ba1be31d2423f624e61a871da922a3247a1a171d2b224f24d219d01ccc2108245e198a1c7e218a231019631c34211023c518211ce12099227d18c11ba02030221b18401b5c20cc21ad170c1b222077211017e71aea1f4021eb16c11a931ff72063160f1a0f1fac20bb15131a7d1e4e203b15d8109b1c311e4600ac22bd264a2844220e240b2844290924bc2323285c29eb234d24ac280d2a57248024e928642a6a24dc244329dc2ab3246e25ae29672b0525b125fb29cd2b0625b8252b2a082ce224c0254e2a1e2cc024c425662a362cae24d025702a452ca324c9255b2a402c8824bf25462a392c6c24b125272a292c4c24b2250b2a1e2c24249a25f029112cfd238725d529002cba235625ab29c02b4f2314258929b72bd022c5247729b92b662262244529b02be1216f242c299d2bd2216324f1284c2ba32136248028052b4a219b262829f72a0e249023c928302c6e204a1f9827922b2b1c7e221c291c2c3e1f0a249228ff299e20bf226b288e2a861f41225128322afa1e0a22bd279129e81e302299279f296d1f4e229a276029be1f6d210127f928aa1e17216c269528401ed720db252328f21d55206b259027521de31f1d252d27d81c641fcb24c4268a1cef1e79244f26421c721e2824e525eb1be21d912362250f1b911d0423fe24861a541d85229e243e1af81c01223b24af19b81c9321c82343195e1c30213a23bf187f1c0b21ed22e318931ced20ab22d8188b1cc4206422af18621c8b2018226518571c5920ca213a18301c29208821ec17181c062048218317181ba21f2d218216ae1a1d1fde20c1150000c4158a180000b1217f250e27bf214b22d3265b2843228423e327fe289623032436287d29df237824c928202a5224fb246129f22aad243c25e829a52bc42480254c2a192cc624ba258b2a4a2ccf24ca25a22a5f2c9e24da25a42a652c8124e7259b2a642c6024dd25882a592c2e24c725712a532c0a24a725502a472cbe238a25322a382c96237f25132a252c5f237925f929192c2f235f25d429032ce62230259f29d42b8522f3246629942b1422bc243829622b8c21a9241729292b33218524fb28172bea20b524ef28f62afc2000250229032b27215e24e428332b61200a26ca28892ae2216b257e28c2294721b323bf284a2a801f3823b328912a081f16247e28682a1820d2226e28512a391fa7222328f4296b1f5f22df278f29771fce216d273929f71e5a21c326ba28931e072151265d28511e9e20ef252128cd1d6d207e25b027901de91ff124fa26f81c291f6f244526661c871e0324b125d51b181e5f233325241bb71dd122c824b21a921d5b2263245f1a5c1d00221c24fa19011da421b8237119b91c572156230019611cfc20dc228318e51ba4206f2211185e1b732017226217311b4e20eb213517281b3620ae21f916121b25209321b016f11a08204a219116611ace1f3821db157d1a741f0f21f4154c17941dbb1fd40b8f21c3254427c5217022ae27fa28ae2208239927db283223a023132846297b2343249f28fd292e2493243b29ca2a5c24e924e329a12b8a247825af2a552cc024e525012ba02c8924ff25092ba82c0524e125ef2a912c8d23ce25d02a772c21238c259e2a592ca8226725632a342ca32247250d2a052ca1221625df29d72bad22fb24c929be2bae22e724b129ad2b7022d4249e299e2b5722a2247c297b2bf4217a243d293d2ba0216d240829102b50216024fa28042b01216124fc280c2bc3205d24ed28032b60205f240829fd2a422054240929f42af21f6d24ac28e52a9f1f6324ce28b52a8e1f7d24a028622a7a1f6c23c628fa2a2f1e6723d228b92acb1efd22ba28b22a011fe0228d28732add1f59224428ef29cc1fb221b2275529281f3521bc26bb288b1ee5200a2634284a1e5e209125ac279c1d042024252927291dac1fc524a926d21c481f62242426931cf11e0524a825431cc01e462325250d1c981e9022ad248a1b801e15224324111b7d1ebb21e523df1a281e63215623581ab01d25210b23dd190c1d0221d5223419971ccc209022bb18371ca02048225818bc1b5d20e821c117791b3b20ad214717761b16206e210f175d1be01f3221c216171baf1f242182166c1aff1eb120591503179f1cb31e890e5222aa253627ef21f9212326e027dc21e62213278528c5229c23cc2725295c23e02348289d299e233a24d9285e2a1624b724de29882b6d24a225622bbe2ce4246726252c6c2da824af262b2c7a2da5234426db2b1e2d7522e725542bcb2cc021c025f42a982cc3217a25912a4f2c1c22f624042a032cd021d424a029ab2bcb217f244c29402b86216c2423290a2b8e2165240229d92aa5218324e728b82aab215424e828ae2a51213924de28bf2af3202924df28d02ac2200a24db28cb2a81200024cd28c22a5920b623b928ab2abb1f6b23ae289b2a991e5823bd28ad2a1e1e4f23da28d32a781d8f231529172b3b1d1a245a29732bad1d242474299d2b321e292474299f2bee1e102439294d2bea1f2723a628642a3120f421ee275929a61f8521d726b5283f1f1d214b264828b71ea1208e259027f21d2320d2249c26331d211f4524f4257b1c831edf237625ff1bf91d3123fa242b1bac1d97228d24a51a751dfe212b243e1a281d8f21b423c019ec1c53216b237d19b91c0b21102322195c1cc920c222bd18211ca3208b225f18c11b79204b221b187a1b3b20e421eb17f11af11f7e212717a91aa31f3f217d16981a7e1f15216c169e1a641ff02072165e1a6e1f0e210616c419f41ed12021150000e2165a18008047214525dc262e2160222026f527fc21c421f9250828d2212f22d0268628fb21f1225b27db28b62278230f2854291e23c823f328682a4e235a257b2bbe2cb924a727682d022f3d252128d52d772fa522fc26082d972e821e2a26fc2b332d17202225392a252c4620b6246c293e2bb9208f241529bc2aba214324cd287b2ab7211724ad28532ab7212e24a028532af6211f249228352ac3210a247228232aa521e7234528f3293021eb233028c129dd2001241b28c12977200c240828a12966200a241228ac292a20ed231628b7297f1fa9232428db29991e0c2353280d2a131d2f23c828ac2a811b80235329622bb8190024da29e82b8d1a65246a2a482c971cc024c32a7c2cd71e8b24672a4c2c8e20f2236f29542ba8206a223228bf290820c121bf269228641f92207b25ae27001ed81fb7249826ed1ca61f3e24f225b21c641fe62379256f1cdc1e502316251e1c471ec322c424881bb81d71228624b31a571d202252241b1a011dc5210c249519ce1c6921892339199e1c0f21fc22e418471cb1207c228718051c64200c2224188e1b3120bd21c917751b0d2088217917ea1aca1f5221bc16a51a6f1f1e214916571a261fe720d115441acc1eaa20c015e719a71e8d2040154919011e03201b14f116851d5a1f7d050021832489255720e4219225f0264821f1216c25f3269421d7215e2518277c21002253253927a22110226125a527b12165237f25622727237a22942618285b228b256f2c852d4424312c8f31f6325623bd27492d5d2eeb2049210c28cc29af1f4b237327d1293b224b249a2770295d22a0237d273129c22138235b270d297421562372272729bf21712377272c29f021532340271a29bd214823262703299a210723ef26e7284f21d022dd26cc280d219922a026be28e42087228f26af2878206e229026b22821207c229726ba28991f7e229726be28821ea722cb26da288a1dea226c270629641c582363281d2ac518eb24062a4c2c72088825632cf22dff083b26f12c672e281e48251b2c732dbe216f249229c72bf2214321862737295b1f3e21002641282e1f0a21f424e726c21e702058240b26d41d7c1ff5238e25cf1c4d1e47233a25eb1bf91da522d6242b1bcf1d34227624ce1ab31df7213024841aae1da921df23561a4e1d56217223c419141d0621fe2260199f1cac209c22e5184d1c712039226f18201c4220e6212218061c0e209d21d717e11be51f6821ad177a1bab1f372112172f1b7f1f27219816c41a551f0c213516611a131f0521ac150b1ad51ed220b7155519c51dc31f4a14000018155218000054204b244925a31f7c215b25d426fe209a214425dc262e21a6214425d826252198212b25b22604217b21fa246f269b20292144249d25111ff51e4b212223301a1c16401b0a1ec711e01ae81fb521e7182521f0249f262d200523ba268c288021df23672708292b22ee233b27e0283722ac230e27cb2803228723ea26c028e6214b23c026ae28d1212223af26ac289721bc22752695284721992249267e281421a02227265a2819216e22ff253028db202822ab2506287a20ca218925e0272120972144259c27d01fa7215725c827be1f19227525b02717208521fd243727671f33212324f625631ee71e6423e225e51be9207b279f29171cf827cf2d1b2f139e532acd30f031c91ed025c32c4d2e64241d2029267628c01dc31fe223b125341db71e42232725681c3b1ef8220f25011c481ec522e424b71b9a1e9b22b224ec1b251e5a228324331bfb1d09225324d71a8c1db4211424301a3f1d7c21d523b419061d272162235219ab1cca20e922f118781c852075229b18711c582000227418401c0d207c2124181f1cb31f4421cc170f1c771f2121ae17f41b421f00218617b31b281fe7204817641b061fcb20c816fc1af31eb3206916be1adb1e93203016111ac11e8b20bd159c19261e2c20ac140000bf0f8f1600809320da23f5240a1fba209b240d26ac1fed20b62422261120f520b5241e2606202321a524092606202c2124247d25601f90203b223b24171d631d61201b22391b041e46220324231dc620fb2448267b200f22322613286e21ca2283265a28cc21de2287265728ac21a6227326502866217a225b26542842215e22452646282b21382214262a28df200f22ed251828a920ee21da250b287b20d821bb25fa275520b721ad25e8272820bf218125b5270420e62166259827e91fef21342578279f1ff52102253227511fe621c824ec26141fad21a424b126a71e58217d249726431e01216c247926b91db7205f247326861d7e201a24f525231dc21ee721fe23f71ac815791bcf1e5310511299183f1c8709df1a1a1eef205615ec1cbf2028237d19951dc92136248a1a081efd216624e61a2e1e10226324e41a501ee7214c24dd1a361eab210a24c01a811d45216123d419ce1cf320ef221619c31cc120b0220b199a1c97206d22df18991c6e202522bd187e1c5320fb218118601c2c20c0216318381c0e2094213b180b1cdd1f6a21e017bc1bb11f462189179a1b7d1f2b2168174a1b2c1ff7201a17e51af71ec72085169a1ab41e8f200f164c1a781e6720c715381a731e5120b5159719dc1dbf1fa81400009a145918000091203b242725281f18212425ad262320b4209c2403263d1faf205424af25f11e9520e9232d25aa1ead1f85224324261de21daa215523321ca11ec2225824621d6520d3241726c11f4221b8258d27a420e02122262e280521602242265628442177224126552828214a2238264d28ed202e2226264528d8200e220c263c28a920da21e52524286b20be21b42502282d20bd217e25b12703209f2143256c27b31f7e21fb240e270e1f6f21d924d726d41e43219e249526761e0921782468260b1eb2204c243126a21d74202a240c26581d65201224ef25461d5a200224da25391d6d20eb23cb25301d8120e323c425681d7420ab23a225781dd71f37234725261db81dfe212524d51ba91b782051225a19371b0520e7215418c11be11f0322e516991c1c202c226617071d66209e229d18e01ca7200823c018cb1cd5202523ce18eb1cd92022231219d41cd7201e23fa18e71cc720ff220d19bd1ca920cf22e218851c7b2089228818571c4e203a225a18281c1f20ee210c18031c0620b921d117c11bcc1f84215617b01b8a1f58214517b11b671f3b210f17791b3d1f1f21db16fb1a041ff2206816c51ad41ec2200516811a771e79209a15481a1c1e41203b15051afd1d19200415081a681d331faf145c27101e1921b7217f2cdc246c2765296e2ef52604280a2c6e2f04278428902c563016291b2af52cad3024291d2a8e2c5130b927e127f22a7d2fba240d25072a642ea52290225126942c8c215f220ba5c42bde20af245fa5342b4a26a725d0a66c2b9c2c1a2e09a80d2be2284b2c78a6ce2c54265d29f4a8c52c9825ff29ada791306c288730bca3723200289f31472eb3312e2a8232ae2e4d30d22ccd316f2c382ec227133b8829c52cb0293f3d5229df2b9f2a7d3d2b294a2c2d2b933d8329c12c562aad3d602a732c8329d83df829952b6a29df3dfa28452bf528753dc628eb28bc291c3d83247c28a828873b5e248223ec26f4344b20e120ee245333b81dec20b3255532c41d1220c628cf30a81cd122c428412dfd1f591ebb26d728fa1b0c1ef224bd26c51b3c1f6d248826a61c3e1eba231625d81b8a1c4022e123b419b61cd2216423c919bf1cad215823b219741dc82157238b1aac1c7621372379191b1c4721fb22d018a01b0921d4227818571bdf208d221818521ba5204722f517661b8220fc2105189e1b6920d7210818c81b4f20a9210218ba1a33206821be16ed19ba1fdf20f1155419f71e612031152a19d11e592008154019a01e5020f7146319a21e3a20ca146e19991e3820fc143f19211ec11f6815ac209403451c478d902b5e2501276e28282e15275328212c922fd027a428dd2c4d30ae28a229292d87307529c32a902da3306c28fe282c2da730f125cb26522d48306325d2260d2c6c304c2551276f2c692fbd25aa25b5282228c725382742a480258229632c39a3cf296c29542cd2a58a265426a128eca29b27962434288da2ee2dd0250e30b01c6931392ade31cc2e1b317b2cc832482fbd2e282cd130b52cae2cd22aab38f428692a0d2bd53855276227222a4e381e2494288d298438fa24c7285429643831255b28f8286b383a250528ef288238992433288a29c438b52347282b2ca5392b240829452cb9399c255a25d9284334e024b51f46283033b11e8821202862321a205c2080285c307a1d9120a727922cf71c02207026b1293e1ca41e45258327681b981eab244b26ba1b931e3c249e25b41bf81d6f230825fe1a911d8a2271245e1ae81d68225324ec1afc1d82224924031bfa1cf621f523d519451c962156230119cc1b492115237518d81b3221d8226018b71b0d219d2231185b1bdc205322ff171d1bb42017228817251b9620eb219117c21a61209b21f7164f1a2c2047218016d419ee1f0721d8158d198c1fd52068158719541fb5203a15cc19161f8d2052151419aa1e7320ce141119d51dd51f9513881c9d174c1c1e894a2944263828f226102d38283229132b0e2f8e288729ee2c5630c928dd29f02da430dc28fc29392eb2303b2801296e2eb23011272028082ebe3043276c285c2e5c3006274a28dd2c84302c273d29c72b38308527ad297b25ff2af8255029bba1032b5925412a28a00a318d262e26b02a6d320f28ad2a5a2d6d34d32816307030a0313e2ac131112fc030fb2be732a42eeb2dab2ab633f02b0729ab29bf395126d928cc29313af425b727a0299a39a124ad27c72988399b24bb2788299439bf249a277029be39ab2421272b29fc394724a9274e2a353aec249b27f32bf63aac2432282f2b983aea241221de271c34cd1fea2100298633cd20d322962852324021b12006288c2fb01e54200727f22b8f1dc720b326152a991d59201426e528181d741f2f259f27af1c391f8a245426a41cfa1def238425821b841d85233125ee1ab61d4d2328252d1b7a1dfd22d824e21aaf1c71226524c119751cff21fb2359190c1c91216e23db18cb1b4421dd227518261bdf20762216180e1ba6202122de17071b8520f721a417e91a6b20cc215117951a3b209521c916871a1e204821ba162a1af41f12212e16ec199c1fd720c515dc19861fc8208b15251a771fbd20d0158a19381fc6201515a019a81e59207b1500000000691200806824ec248f26a921422af527db28ba28a62d78287629e52be92fd128cc294e2da830e7281d2aa42e1e31d328092a712f5b31c928e229ca2fd531ed283f2a53302b3220299e2a923087329c290e2ba7308232fc29d42b5d3052334e2a0a2c7f30a8332c2aa22b6130f6324c29782b4630d0327429a12c483074329b2af92e6b302a320c2b3c317b3035304b2a05323c2eef2c812a1a33502b0f29de298a33ed2706265a2993330f256c25b228e033b5246a25b3284334db24c62343284d34142343230d2832349d22aa2237284534f921a022ff271334d821e7205a271a344220f820c22605341b2050224a28ef33f220a522a5289933ed2039227c2834325920cb200d28f82e901eca203127672b4a1e6720e826a429a81d79202b26a228bf1d2a20a2252c283b1d591f20259527831c7e1e7a248126f91b651e0324a125ac1bc81d50231425f01a101db8228e24131a9e1c65224f248a19c21c5c22422493197c1c01221a2441192f1ca8219d23c918cb1b582135235918a81b2a21d32245189d1b0521842223188a1bd3202e22fc17091b8820cd2173178d1a48206f21c0162e1a15202c213216011af91f1321d9150c1af71f1c21b8154e1ac71fe420c915e019701fbd203a15f819df1e7e207a150000000021100080302264254727ac207f271228f4286726d72b48286529252a4d2e7c28a829ac2c55302b298a2aab2e57315729b42a1c30c2316b29c42a83301932a029212bc7305932e529732bf9307f32db29a32b1731a9321b2a0a2c3831ef328d2a6f2c6f311533772a852c8d314833c02af22cb431ec32a92a2d2d53319a32e12a002e2c31dd31f12a21306e30712fdf2ad5319f2d662b4b2adf327c299029392a9b330b287028232a203474262326c6282e348c243f26f9285d34a1246f24e7285634d322782416297b3401239924ec2893343423bb24ab288034482348248d286f34782243237d28593462217b235a28333455217322a428dd3382205c226f28133272207c200028762e041ef4203427f12a811ec92087269229261eb120f825bd28071e90206c252228bc1d4f201b256e274b1d891f9a248e26851cf71e2524cd252e1cbf1efb2385250c1c491e9e2336258b1bdd1d1f23e624df1a571db0228a24421abe1c39224b246c198b1cfa210b2411195c1cbd21b423dd18321c75214d239018141c3221f1226f18131cf22087225018e81ba42013223018a41b5b20a7210c18171b142045211b178f1ae71f1d219316321ab81f1d2109161e1a8d1f2321c9159919611f4821fb14f019041fe02048150000ac0693140080c0212725ff2643203a255e286429fb246728b828e029a527152c8e28f029832a1a2f2029402ac42df6307329a72a0730e831f329472bcb307b32302a022c4331bf323d2a252c7a31e332332a0f2cb031f232522a462cd6311433b32a9a2cf2314833e62ad92c1e321833ca2a212df5313d33f22a452de0317e325d2ba12d45311531af2a642ef72f932dee2ac030362c7d29b62a653211282429bc2ad1339f27e026532a1d34002520266a2954348a24d325a1297d345124e424082986346323d5245729a7344d238c243a29c134de22f12404299e3477239124f2288434e6227323ab287a3485218123bf285a347521c222e4281634d120e922b7280f32d4205021a527552d461fe620dd26162a921e3d21ce267d29e11e3f218d262029bd1e8920f9257e28d41df11f5b25f827fd1c851ffa248627b91c191f87240d275c1c5b1e17243426ce1be81da7239325161b461d34231425541a391de722b5241f1a091d81227924c219e91c222223247a19a91ccf21bb2333196f1c78213423d218221c1e21c1226018c61bcf204f221e180a1b8d2001224117841a5320ba21b7163a1a32208c213e163c1a1e20682113162c1a0d20502103165a1afa1f23210216051acf1f26218615271a5a1fc8202b16000000005e0600805b21ca246c26ca1f5224902893296c244d26e828052ad425c028ee28712a0f28bc2c6129da2a0b2c0230d4291e2bd92e9431d329402b9b309032422a012c8331e232b92a5d2ce1312833782a202c37324633682a672c6b324933042b9e2c6e32b933db2a7e2cd0329a33322b3c2d9a32a533ac2ac72c88325332ce2ace2c393106307b2a242d6b2ed82bf92a622f092a6628022a063185262d283a2a223312269827f5293f346a25812723294f345a253e268b2983347324ed246a29a73406232a259929d1348223c1246b29e034ea22fe243b29bd344223c8240b29b234f4221d24c428b234dd21be235b288e346921f5237d2838347321e422a0289031b8201521be27aa2cd11e9f216927612a8a1f2421fd269429c01e8d203626b828d91d1720a2253028411d1f205c25cd272e1ddd1ff3244327d41c4f1f94249d267d1ce51e33240526231c9e1eff238825f11b371e91233f25481b141e3423f8241f1ba31dc022ac24721a6d1d772264240d1a141d20222d248519c41cd021eb232e198c1c92218b23d018781c53212c23bb18361cf920d8225718251cb22037222718821b4e2078218717371b05202621d316c31adc1f19216516e41ae01f13215316481ab51f16216915f819fa1e9420ce1400000000390f008044212725dc260d208124a228aa296b24b22515294a2a5925ef262529a12a3726d428ba29a42a5428942ce429282b0a2cfb2fb229142b0b2f9f31252ab12bf630a7324e2a222cdf314c33092b972ca5328a33252bb02cf932d533ca2a6c2c2233a233e32aa02cf332cb33ed2ad22c19336c33eb2ac62c8c324e31f12af12c8830ad2dec2a0e2d9b2c3f29382b802d092818285f2a5f2f1226ee27f0291332c4258b27012a33347c255c259e298234f2238e263f2ad734dc24b1259429e5343824f3247f29013556231b255e2911359123d0240529fa342223a224ff280435bd224f23cc280f355021eb224e28ca34ef20dc23dd2881347e21e422992810319f20ac21c6273c2c9b1f282283270d2a0b20c6215427b029951ff520ab260b295e1ead2020268f28021e42208725ee275a1dd91f12255b27d21c08201d254b27d61ccb1fdc24e026ad1c2d1f87246726341c7a1e1d24ea25971bf31d5d232a25ce1a2c1dc322af24c519b81c4e2262242119741cea211924d718701ca521ad23b3182a1c522139236918fc1b0721ce221d18751bbc2068227917181b7b2015221c17cf1a4c20e021a2169c1a2c20b0214016841a21209d212a16e11a1d206e215016741afe1f55211b16891a6e1fee20ff15000000009a1400809121d22594275d209f249b28bc29572404254f29e62ac82410267729292bb1250e261c2a612baf255328f7296b2be027852cfa29b22b0d2c0330472a9d2b312fc831902a0f2c4431bd32872a172c53328d33ca2a712c3233e533d02a822c8633c133662a562c48335433842ab12ce13212328b2a822c7131252f342bf12c342ebc2a772ab32c7729ee26702a132d3c25a127812aa82d8c25ec27ff291930a6255328792a40330b26d426de299734de24c6258429f4341e241925612921354523fb24d5293335f62218258d294a351f23bf25fb28403504247c24eb2855356522da23ff284f359921fb22a9283335e12023238b288234fd20af214328942fc81f42220228ed2a3220c7217f27c629c01f3b21f7265329041fea206d26d828971e9220f7257628001e3e207b252b28731d2b204a25ee273d1df51f0f255727001d1f1fb824cd26601c981e752470260d1c421e2b24eb25821bbd1da7235225e31a591d0223eb241d1a411d92228324dc19c71c11222a245419931cb821b623f918591c632138239a18381c1c21c6227818bb1bce206122f817191b7f20ea211d17ce1a3f209d21a116821a1120502128164a1af11f2921f3158c1adc1f0921d315471ab31f2121f015011ae01eac20571500000000f31600809d21e2258e2752206724e528ff29912442254729a92a3c25202650290d2bec25b525b629272b5c2505270a2a242b4b261828082a002c57277d2b8d2a572cb72aab2e0b2b632c122ec930bd2a4d2c7e303d32a52a712cf231b332182bc62c62328e32e52ac72c3f32cd31fa2ad62c7231c32fe62abd2c112f412b852aa02c4c2ab727752aa62c43265226292a712cdd24f727212acf2c04265b260f2a2f2db6248b269929ca30d9249226b6293b34df245f258b292135f623c72578295135332470245f2965355422862544297735b82375247f298a351a222825f4289435ea221823b7288c35a820cb2495288f354b22ac24f028a3340122f8210229442eab1ff8221328902a6120c321332751293d1f8f210c273c29d41ea921a626de28cb1e8e2143267e28aa1e02210c264f28de1da720c6251d28741d62205725b627031d2020dd240d27b81cdc1f86247c267e1cf61e2c240926c31b651ecc238c25221bd61d59233425581a8f1d0d23df240b1a351dbf2294248319231d6e2258247019051d0f221a242c19e61cb321ba23e9188e1c452133239118151cd0209122f417871b7b200b221f17521b5420ca21b816551b51209f2185167c1b45206c2172162e1b0e20642197163f1a5c1fe020bb1500000000211400803a21a925662705207424cd28e7299f2416250629512a35259b254b29dc2a8025d4259929182bb825fc25e829912bb4252826342afa2b9b252e27be2a3d2c8a260d29b12a362c99282b2c7a2a282cb52b8f2e322b8d2c282e952f232bd12c3a2f472f7c2a8e2cd52eb32d522a632c452d0c2b8b2aa02c512a1828c12ac82ce1266226782a9a2c0025e2262d2a8e2c1a254b27502acb2c33251b283f2a452cbd25a5266029352d8d246926592989317b24af265d29eb34ac24b42644298835c72451246529a3352822d9247329d435c622be240129d9355c224f24f628fa35a82116241129db3540218823a628e235d620d9238d2807340a21e5202628232c4a1ee4229c27122a6d20e0220228fa296b206221d5262629c31ec121d42637293b1f13218f26d028601ebc20fb254b28d11d7a209b250628801d1f2036258227101d7a1fc424c8267c1cf61e79244f26141c661e2b24fb257f1b2b1eeb239b250e1bdf1d782348258c1acc1d0823f7244d1a8b1d9c22a924de19731d51226524c519271d022218244f19f01cb721be2317195f1c57213f236218ec1b1821dd22f117ed1ab8206622bf16ba1a2e20a1215d16ae1aff1f52212116cf1af51f1f210e16931ab91f2c21d915d7190d1f15213215000000008d1500806d21cf25aa2705204024b328d7296924f924e028382af3246f253029bb2a4125a32579291a2b5f251526e0299a2ba02560261a2a092cb7254626762a102ca025ec259d2a1d2c64257127f82a742ce226c528a72a5c2c6928d729512a542c6629ad294e2a682c40297d28b12a962c16282c27ae2a992c3a26a1267a2a822c6225a126fb2aba2c02255927a32ab12c3d25e126272a6d2ccf244527422a4f2cfa247727eb291f2c372542258b29d32d7f230925aa2931335223eb24b7299b3527237224052a003657226224c0292e3600221e2579294636dd22682453294c36c92140232c294036c220b92308293c36f620462341281632ac206e243b28f62ab1217224f527f229b621e6219a27c229691f4d21fa260d29a91e7f21bf26cd28c01e5c21a326b428951e08214b2690280a1eab20e3255d289a1d522065251628101dda1ff72465279a1c1e1f872493262b1c751e2024f225621b091e94237725e71ab71d17231e25361a9d1dbc22dd241a1a451d5722a4249419191dfa215e244119d71c92210924da18ba1c3c218323bd18871cf820f22269182a1ca8206a220e18a01b6e200a2236174d1b3e20bf21b316461b39209d21ad16d31b48207721f5168e1b1f2089212517b11a861f2721241600000000d3130080fe201425a326d31f5524be28f4297f2433253f299c2a2d256b256029fb2a3d2595259129342b5225e825cc298f2b76250726f929ca2b67255126202aeb2b7c251c26452a0c2c3825b126af2a3c2ccf250127632a192c152611275f2a022c2326fd260c2ace2b1126ee265b2aec2beb258d26332a4b2c51253727122a352c8d256026592a482ca3245026142a442c80240826eb293b2c4d244c26eb29472c7d247926c2291f2c9d241e25c9293e2c4c236d2528291c2e9523ff2493296034d7225926e82968364224d9234b296c3627219d2477298e36cc21ce2338299e36cb20de256d29ad363523022547291b362722ab241628282fbc216123d027332a8820862241281c2a0220f4223828262a2c20b8243e270029aa21fb219026ed28021fbb216026a528b71e77211f265a28671ee920a8251928c11d6d202c257e27101d2b20e4240227e21cdf1fa124a326801c4b1f4a2420262b1c9e1ef5239d25911b1a1e6c234625ce1ad41d1f23f624801a861dca22b424291a3a1d75226c24ae19fa1c0b221f244519cf1cab21b923f5187f1c37211b2382182f1cda208f223218f71b9e203322c217c11b7820ed2156177c1b5420c521de169f1b2b207421fe160b1bbb1f3d211116141c4e1feb20691500000000d113008012218d253b27a91f6524d328e6293024bb24eb28442aa42401252929c02ac5246f259029432b2e25c325ff29eb2b6925f925412a252c70252a26672a3d2c87255826762a4f2c8225b0268a2a522cb625a626802a262c96252b27d72a3a2c05266c27e92a512c2126fa26fd2a602c9125b426b12a5c2c28255e268f2a6a2cb8241826602a602c6e24fa252c2a582c4324eb25e729342c2324b525d6292d2cfa239a25a829292cac23ca256b29042cc42398251329092c812370240f29d02ed4213925d4295135b622f024be29c2361022b524c829d6368421b225bf28e0365a221c235c291c37ee1f982556291e3566225d244c28ff2b1d21ef237328132bc320892359284a2a852028235127ab294b209521ad276e29b31e1422492746294b1f8821cd26d728a31e292173269228311eaf20ec2538289f1d2b2055259327001d9e1ff824f026761cef1ead248026101c6d1e55241626881b221e0a24a425031be71d81233a25951ae71d0d23e5246b1abb1d93228e243b1a991d2f224424ed19281dc021eb235019c11c73218523e618521c2a2126237418011cfa20df222018731bc420c72277173c1b862054220c17591b3e209221f316641b0d202d21c816351bd71f52219d16b21baa1f3b21d816000000001516008068216825022715201924af28dc291424a324a128e6297c24db24f2284f2a7d240e254729c82aad249825c829822b04250926252afd2b28253d264e2a1c2c272539266b2a2e2c0d255526742a412c0d255626812a582c0e259b269e2a782c2d257326982a692cf6247f268c2a5f2ce8246126782a512cba244026622a4f2c752417262d2a442c41241226292a4b2c3e24f2250e2a3d2c1224a125b429182c8d2340257b29df2b0b2338258d29092cda22e72596290a2c9523652448299a2b862158245d29ec2e562176249c2983355a218d2427291737342102242a295b377820db24042a04376a2136211328a631d01dcb2208276b29c51fb2232128172a662013247c28cc2ac62072220528032a8d1f9b21e027a029911e952133271d298a1e3821a826ae281d1e2a2147267b28e81d0d21ab250a28c71dae203c2568275a1d2720f4240127c01cb21f95248126661c181f41240526e91b9a1ef52394255d1b131e5a2327259a1ad11ddb22d124531a5e1d53227a24af19081ded2130245419c31c9421d023e818af1c4a215b23d418661cef20c7226918111cb02053221318691b6820e1213817ee1a262087218e16ce1af21f4f213f16f61abf1f0e213116a41a3f1fe820b815541ad21ea420ea1400004c039f180080a821ad2586271d2017242b282429902369247c28b7296424b12407295e2a6824da244f29d32a7c246225d6298b2bd324f325512a172c2a252626932a472c14252726b62a602ce8242a26ce2a762cd4244726d02a852cd4246f26c62a852cdc2462269e2a752cbb245126832a742c982417264f2a662c57240926322a522c3824eb25162a442cf023de25002a342cb423c125cf290e2c64237a25ac29fa2be22219258c29dc2b6822d4247c29f92b1122fd248f29272c2022d2243029ee2bc921e8258128762aec2291244329622d392102231a294534d11f4724be280736a6208d2228294834f01ef3215628652c4d1ef4209f2780293f1d68238728bf2aa21f45224728ff29761e69239327b829d91f812200288829121fce2151271929791e6421b426da282a1e0d2122267228c71da120b725fb276d1d30204e256027ca1cc91ffc240227901c3f1fa9249426251cd01e52242626ca1b481eea23ad252f1bd61d34233325821a6f1d9c22c324e819161d1a2256246319da1cac21fe2323199b1c48217123bf18c61c1e211723c918d31cf320c222b318c11cc22084227f18bb1c93203b2279187d1c5720d4211e18351c1f209e21b917221cfd1f60215a17391bb91f61216d16071b1e1fed20421500003e159018008056222e26e927f321ea22c5270429b02216244e287329e72365247b28d6291024f4242f29a62a83246f25e7299b2bcb24a325642a232cbc24de25b82a5b2cc3240426dd2a7c2cb7240626e12a8f2c8d240b26d82a902c65242226c42a892c5f242726b12a792c362417268c2a682c2b24f1255e2a542cf823d2253e2a432ca423c225122a2d2c6623a625ee291c2c42239825d029092c07236c25a829ec2ba92242257a29aa2b4f22ff245029762bdb21f1242c294f2b832102252229442b4d21fd24e5281a2b4821df24ee28ba2be2208d23e928222b5b1f322209276d2bdc1d40204627bf2bcd1bda216628b4295f1d73247b28e92a15201a236d28632a841ecf228b28742a711e7d2358281c2a4b1f25232e28ea295d1f6f220528b629d01edd21652737298a1e7021ba26ac28381ede2038264b28911d9920b125f627421d252029254d27db1c8d1fa0249426511cde1e2e24fb25da1b661ea3237225231b011e13230025b21ae81d9b2296246c1aaa1d38224924ff19691de321082493190f1d8f219c231219c61c38211c23c918451cd4209f222918d51b91203b22a1178f1b6d200c222617821b5520d221e4165a1b4120ba218a16901b32207e21ba16a01af41f6421b515b31a841f482194150000821a221c0080222206269b27ac21fd2205281c29db22da2345289029b4231f248528e429bd23a0240629842a47240425ee299d2b7f248f25e42a6a2cbf240d265e2bcb2cbe243d265a2bd92c2f243426312bbd2c9e231026012b9c2c4623ee25d32a7a2c1e23aa259c2a592cf52287255d2a362cf2225d250b2a022ce4222f25c929bd2bce221e25b229ab2bb82214259e298e2b8622ea247d29712b5022b1245929542be52195243029352ba121a52408291d2b7121aa24f328fe2a3421a724ec28f92a0f21af24d628ee2ad4204d24d428002b50205623b728eb2af01e96245f28312a14205623be28c92a1c1ec9239a28af2a441e69238d28712ac11d5023c628a72aae1dcc22c228b52a781de3229a289a2a521e992279283f2acd1e3c223f28e329c71eb92187273c29621e24216f268428e11da120c625f7276d1d2c203f254127e31cbc1fe624db26881c821f8d246126661c341f2924e9251e1ce91e8f236a25b51ba81ed822f5243c1b671e67229824991a6b1e0a2249246f1a311ea621ef23351ac11d57217c239b19391d3c2138231619ba1cfe20db229b18581ccc208d223b18e31b852033227617831b5820e921e5165e1b2720a021c316631bee1f5c2192161a1bae1f37215116a81af41eaf202b1500000219571b00806e220726d1279521b62224277f2835225d239a27e228ea221e242a286a2980234224b628152ac123dd24af29582b5c24d9254c2ba62ce92480263a2c732d8b24c9264b2ca02d91235e26042c412d3422ff25572bcf2cd7212b26042b912c5b22ac257f2a3e2ca5222525fd29ec2b5222f024c029992b3422db2471294a2b3d22812427290c2bea2177242029fc2afd21a824ff28e02a1d22e424d928c42a6c229c24d328ac2aec216424b128862a84216e24bf289f2a71214924b628a12a24214024b728ba2adc201324b028a02a6e20632374285e2a671fe6224b285b2a551e88224e28632a411dac228328932a9e1ca9230229232ba61c15244729772bf51c33246629902b561d2e245a29842b051ee9232129122b421f0c238928262a761f032281272b290b1f5821be269b28901ee12014262028db1d6c2030251e274e1dc91f8a244a26ac1cde1e2224ad25061c261e90233725081bdc1df622d324891ab01d622274242f1a5d1de2211a24ae19221d8321b7236f19eb1c3b214b2312197d1cef20f822a0183f1cc720c5224218d71b92208a22dc17751b50202d224417001b0320c421d216cd1ab51f5d213e16bb1a9a1f3121fc15ca1a811f12210a16a21a761f4321e615301a061ff820fb1400001915fa180080be21b42541276421c22300276228a022ec210926d3278f21b2220b27a12849225023ca275029dd228723ee286e2af62258250f2b9c2cb7240528892d292f47252b280d2edd2f00221627cb2c392e9a1e6425f12ab52c8b1ecc248629532bac20022522290e2b2921c2240329c12a3f226e24e228902a51226224cf28872a60223f24c628762a4b223c24be28722a0a223624b028642ae3212b248d28412ad3211f246c28142aa5211a244c28f029802104242b28da29292104241328c129d220f6230e28b1297020de231528bc292a20a6231828d329ab1f3b231c28e1296e1e51234228112a451d9b23a1288e2a301cf22320292d2b0f1a0924ab29bf2b9c1a5c24442a3c2c101ca4248d2a682c291e5a243d2a2b2c1e201f232b29e92af11fff21a3271c29321fdb2012265f28f71d14204b259527e51cc91f87246c26901cb81f3224dd256a1cfb1ed3238725fb1b5c1e21232d25461bb31d9b22cd245b1a6b1d3e226f24e419171de3212a246419151d9021ca233d19071d3c2136230a19c01ceb20b922c3187a1c9b2049225c18191c5520e921fc17c31b2220a42157170b1be31f6e217716b11a7d1f3021f4155d1a371f0221a9155d1ae31ed3207b15191ac61eca201415031a441e382054146a19e91e8f20f38be9209524ba253220f02195251327682152229d252027c121552284255b27c4212a224c256927b3211f241b263228bd23af2229265e2816227d26d62ce02d5a242c2c96314733d522d026782c612d7222c22151276a29d62028240f28ba29fc220424d727b729f421b523a7274729ee21de23b72738292a22e623c9273b291422b723aa273529f021c123a8273b29db21bf238f273629da21972353272229a02187232427072979214923d926ca283221e1229e26b728cf2066225e26aa2862200f2245269928f41f38226526b628a31f5a225026b528e81e9c226026b628a01e15234b268a28801dfc22f426eb28701cf4227a28512ae818f3231a2a1a2c2f873f254d2ca92d1c8fe225b72c322ed11cf525032c3e2dce211e243f29fb2af1208a230f27e828bc2051213f257f27ae1ed620a5244626f11d0e2044240526fb1cc71ee023bc25111c501e07232425381b311e75229e24e81ae41d23224f24671ad31dda210f242b1a8d1d9821c923b819501d412168235319c51ce0201823c818751ca22089225718391c62200d221d18011c2020b7215917cd1bf61f7b2129177d1bbf1f4821a916401b941f31213e16f51a6b1f1f213016b61a471f262197155e1aff1e02217c15cc19df1d1a202c140000131599180080902023241f25261fbc21962514270f21c5216d2508271721b1215d25fd26dc20b2214225c626a020a921b7240826e91f821fa221cc23bd1b6b16271c2e1e4012e01c8c204422d01ae021822544278520e4236227f628f6211a249c27172950223624a92715297b222c247a2707296b2200243e27f5282822ea231727e328fa219223d426cc28b8216f23a826c0289d2127237426ac286721df22372692283121d722172675281221af22f7255328dc206222b72526288d201b22932511282e20e7216125d327eb1f97213025b327571f902116258127ad1ec021ee244727e61eaa2232252627cf1ff622fe244627c31f0022cb234f26861e131fb025822818190926f32c462e1d999a29a0309d31611d2e257c2cf42d6323fb1d8c251328031c511f6c23d425991c8e1e09232125061cd71e09230825021cd81ee022d024d31b6b1e72228d24fa1a491e27225e24a81ac11de1212f24ee19831dab210c24ae19331d54219d233619c61cf4202a23a618a41cb220a6226418971c6f2034225718551c3220c521f317311ce91f7a217517121c9c1f43213e17df1b691f17210017b21b571f0221d816441b301fe1204216d31a051fc0201216c31af51ea420d3153a1ac21ea2205d159a190c1e2c20821400000a0fc81500005e2015244e25171fc820c2245426e61f0421db24532624203321e0245726262034217c24cd25b61f3420b12271242a1df21d96208122ce1bdb1d3d22e823eb1c1e212b25a62671209c22bc2667288d212123f9269928c9212823e3269228b5210e23e8269a288721f322e2269f288b21e322c7269f286521c722a5268d283721a8226c266928072176221a264928ca207522fd2537289a205022e5251d285220f921aa251c280120f5218a251328d21fee217825d127731f442229254627851f8a22d12410277a1f3722b724c826c21efe219624b526841ea72170248026fc1d252145245526721dc72031246026ec1cc72041245526ec1c912129243426bd1dad1fda22f924431b7110bb1bc21d640977119619121d7b066f1ac11e5121d014631d3c21d423b419181e1a225224741a591e1b226d248b1abc1efc214b248f1a031fbf211b24d51a281e78219d23ff19091d1c211b23e818da1cdb20d122ba18b41cbb209222b718a01c872042228118701c652018225318401c3620d7210518131c1220a521b517e81bdf1f7b214117a81bad1f55210717871b6b1f2f21e816441b1c1ffb207616e71ae21ecc20f215ad1aaa1e9520c015641a731e712053153a1a5d1e51203015b019c81da71f941400002913f41600804820532464253a1e3b214625aa260620c820ac241726161fc2204a24ab25a61e3a203923a024ca1daf1e8b215a231b1c701e8f222a24dd1c4220be241726271f6c21f225e3278e205822742664283d216d226d266c2820217c2269266828fd208f2264265d280c2187225a265b28ee20732247265328df2062222a264a28a4202322f0252e286020fa21af2508280220d9214e25a6272f1fe821fd244527ec1ee121ba24e226641ed2219b24b3262a1e832167247b26ae1d1f21442452266c1dc7202a2429260f1d8c2017241a26f11c692006240226eb1c4c20f723ec25cb1c5420e723d425d41c4c20d823c925cb1c2b20af23c625a61c1520c023f325ab1c2e1f592382254f1c441df22141249e1abf1b51203c22de18801b901fb9214a18631cfa1ffd219116a81c402098227e17a51c912018232218a91cc62037232518da1cca2034239718df1cd5202b23bf18021dd4201e23e118f31cc420fd22d218b61c9f20bc227518701c6d206f223318371c33201b22f9170c1c1220db216d17cf1bde1fa5212a17be1b9e1f7e21e316c11b6e1f5b21ad16891b3b1f32217d160a1bf61efd201016c81ac51eca20a615801a731e84206a15371a2c1e4f200015de19071e2e20b9149819801d7b1f2f14bb266e1c1120221d8f2c942470279228642e01275828f22a1a30f228292a1c2ccd30ba2a772c152dde2f3e29812a552a342d9f2611281d1cbc2b2924aa231d9ac22b7022381db29d712b0324d6200ba8672b00001b1a71a8c42e72252e26a2ac3434c92c162d18b02d3c6a2c7e2c9a2a463d4a2d8b301b36ef3d172c9130dc34393ede2a43339f21a835832bf93313308d32a82fab35e72c5331ef306c37772a2d30b62b72394e29e72ac7296339c624d3241829363928200e2303295639791eb6222c294439ba1ea42133290a39a71d36228129e4383a1e3a220c2a1939031d3525d92c8e399619112bf030143a301d4a2bda3044380b25c4273d2c433591238224ce29013344205e20b828b62f611c5f2056260f2b001dc71e2225b327291c251f94246f26631c701fa4248b26911c5e1e04246f25a41b331d98227424181ad91cff21e623ae199b1cc42197234419351df121ad23f419e51cac2181237519641c7a214823e618fe1b32211b2358189b1bf920cf2207186f1bb2208422a917871b87203b22c217a11b78201a22a617a91b5520de217617f41a3a208d21c616111ac91fe420e9155f191b1f722015153719e51e8020c9145f19d81e9120ee148419c61e7820c014a319c81e5a2003156419421ec81f1915e01e0000061a6093302cf22599278d289b2e58283f298e2b06306029a92a9a2c75308629802a192dd6301329912a1f2d223097258f27072cc02ebe2286237b2887286120271c4ea566240d18eb2085a28f26151937214ea42a28352395262ca6da2cb129922b23a9be362c2db62e3028d0386d2e283036302f39192dbc2f712aac3a2b2c053255b0e4341d2d00345a30b6311d2d53345f2e5530e72c7d35b52b862de62b93394a288d29ff2aab39182565278f2a30390524d526a129c1383c2313280b29a038f023fb23a228ea38ad2018240229d8383820c42342295339781e7425d12bc0398b1f3c271b2dea393020aa273e2db736462432243b2cd03464219a23a12acf3274204c21f328e02fc21dc8203a27082ced1c8a1f1726b429fc1ba61e292516283a1b551e96245926101b6d1e30249d252b1ba31d5e232625491a5f1d9f229724d719971d56225324141a371ea9225924c21a9b1d3b222724181aa31cab2187230a19211c5b212b237d18081c3121e5224518091c1321a7222918931be0205e22ce174c1bb92026225017561ba520f7215a17eb1a7120b321bd167a1a3a2063214f16db19f61f11218a15b719a31fe5203f15a8196e1fbd200815a119231fa92002152019b21e8f208f148719ad1d911fb612241b7c185f1c428bb4292527c9280127682da028ae29cb2a882f2d29382ad62c7e304629882a842deb30f928102ae72da130c327fe28e72c48304925d2269e2b1830d62403265125202ce52346252ca6dd2a821e44258fa3ef30a326c32699282a326928a527222d77327c275e2a1d2e6834d929612b6b30aa399b2bba2d702df83bb42ace3066255a342a2b5532c22eb231f92bee32df2dcc2f522bb434982be62b9b2a33393f27bb28ad2a28393524f126152ad238c322ca25ab29d038752284254b29d43827225f263a29ce38ed222d244629fd38c620b123a3291e392e20c2246d2a03395e2090228d2af238d61d5d242e2aec3540207a21b729c134ba1eff22ba29903233200c229a282c2f161f26216527ce2be31dc920c326382a561d71203a260b29f41c08204b25d927b91c691f96247c26721c411e1424c825811bad1dbd235825a71aac1d67233825ce1aae1d2723f724d11a0e1da8228524ec19ca1c35221d247a19391cb721b423b618ee1b5a2119234f18381bf220a222a5171b1bb92044225317191b992015225117231b8320ef212717ca1a5120bc219d16a31a3220602147164a1a13202621f315191acf1ffb209815091aa61fea205e15141a7b1fe0206815b819491ff020ed148d19a71e70201815f715d018791505021c2446243c25261e232b6e287b2962285a2e03293a2a422c44303b29862a3d2dec303729872a2f2e73312d29822a002fd93125299d2a592f76325d299f2a0f30d6329d29bd2ad12f5e33a329d22a8d2ee832a5290f2bba2e7533f329df2a442f38339f2a3c2cd92f99339c2ae62c3d308e33f42af62d1b302c33382ce02f34305c334f2c21316a307731f72b3532b62eb02eb12ad633032ca929eb29aa34f4265627df299d349c24dc263229dc3481240c267a2924355024b424e2281e35d7227b2436294635a4227c24242ac835c6220b24c229d335fe21dd235a29bd35b821a92375293b353f21b0237c29ad34f0204d243529163429216222db282d327b1f1f213b285a2edb1de3209527772b971d5b200127be291b1d81204226ab28471d5020bf252f280e1de11f5c250228811c1d1fbe24ea26111ca51e1024b925991b021e7c234025df1a451df922bd24e119be1c8f2266244a19bf1c6b2252244b19701c24223524d3185a1ce421f123bb18161c8c216e235418d91b4421f5220b18b71b15219f22f317ab1be1203c22b017271b9f20ec21f816b61a682098218a164c1a37205621f515391a1c203621b6154a1a0d2035219815801afc1f06219915461abb1ff8206715d919331fe8203315d51114195115fd8015230525eb25e61e4f28422846294426902cc728eb29c32a422f26296e2ade2cd030ae29362bba2eb831d6295d2bfe2f1032c429622b27306b32132aa32b4e309e32512aaf2b5830e332522afb2b6c301c336f2afc2b77305733202b682c9c308633212bb72c9f3000349a2ba52d07316933a62b552ea8306a33e62bba2ec3303833ec2bf22f89301b31702bfc316a2e5e2db12a6e33982a182acf2a513450270028762ac934ea24d9264e29d0344d2417277b29b834a7243f258829ce340923e825ef290f352124e124052a4535d2225224b82936350a227a2476290635212204243b29c03446215324e62877348e214323fe280b3490207623b228c0319520e7210c28132e151f65216e275b2b791e1b21d726352a201ebc20392623298c1d8420b02567284b1d49206425e727051d6a1fb524d2263d1cfe1e3e24fb25ff1b971e1224a325891b471ed82364252e1bea1d57231025991a6c1de422ae240c1ad31c68226b243f19ae1c2c222824f418881cee21ea23cc18521c9c2179237418281c4f211f232b18171c1421b4221918ce1bc02043229a17951b8720d3216317fa1a3f207c219916841a122047212a16571ac71f3821d115341a991f32218415bf19781f5d216f15871a2f1fbd20701500003317281500800122e6241a26301ec425b928e529ae2441293f29e32a4428f02c1829852a522b23306f29f12a222e8e31a8297a2b1e304932592a002c9230c132b32a472cd1300433aa2a532ce7305033922a282c1c315733072be52c21317a331a2bae2c5531a0335c2b4e2d7031cc33fc2b2f2e8f31eb33db2bf32d893184332b2c1a2e4131d532a72b702e95304230002c9b30972d002cf42a3b320729302ae02ae4339a276b28f72a6a344d257027c4298f34ac24ca26bf29b9345c24e7257e29bf34c0239a25d529e734ac231425d6290935192331259929e4344123e7247429c034b7221a240d29a7348021592433298434b521db233e2925340c218023ca28b831d120cb22f027ff2c452022214327572a4e1e67211327c429a31e2821ab265229301ead204626b9289c1d292094252528fe1c821f1725d827661c0c1fa9247927211c7f1e4024a4266e1b181ef123ee25f81aa91d7e234a25501a7f1d1123ce24f9194d1daf2297249d192a1d4f2244245219e81cf521f0230e19ad1ca9216d23d2183d1c4721f32240180e1c04218522e6175c1bb92032222b17ad1a7120e9218116451a4320b921ee153a1a23208b21b715331a12207921b015581afe1f3d21a415011ac21f34215715191a541fc620c51500000000000000800320272263238d191e250c29522a842438274429b12a2a26f7298929242b9728172ee229aa2bc62cd030022ae82b682f4f32162ad92bc43011338d2a302c56313433e92a6f2c71317b33172b732cc13168334c2bd82cce31b1339f2bcf2c0732cc33a62b402d1c32e033fa2ba62e2c320e34b92b7c2d2032cb33cc2b672dc73111327b2be92d53308d2e892b922f652c1d2a492ab930db27c4289a2a1b33fd252228742a7b3413255b27c82989349f2458261d2ab934f923ae25c429e4342323d425cb290b357d235e25d72921350c233425b729ff34d52232258329ef34f8221724ff28f7345f217a24d028c134c0215b24ca28423479213c23b9282d318b202d21d927c02c811ecd20b227f42a081e2d219527412a5b1e992073261b29841d3d20ca255128f71c28208e25ea27df1ce61f26258c27841c961fb324eb26561c071f4a243726051cb31e2224b425791b1b1ebc236125cf1a061e542312258c1a811dd722c524d419661d8d227e2490191b1d372249244319d21ce1210a24d518a71ca921b323aa18a31c78214d238418681c262108234b184d1cdc2075221118281c7a20a721a117021c24204321e716261b092041212816ff1a0020342106166b1ab91f21212a15341aea1e9220a41400000000bf1000804c2041224623f2190a2508292f2a60247926af290b2bcd258b2797296f2b3b26772a292a412b5729782ee329782b402d5b31392a022c4630f932cf2a302ca9317e33642ba72c1532a6339e2bf02c5132bd33872bea2c80321634712bc22cc0321734972b142dc1322c34952b3a2dc6321e34e62b642e91328733ea2b682ecb31f730ab2b6b2d382f312c3c2b062ebd295829502a5d2fdd26aa28592aec31fe254228862a19347825bb25202ab7348623b5269b2afe347f243826c3290b352c248025ec292e3560230825002a5c35bf2228257e293e351023402551292a350b238023d6284635ec20402390280b35c220882309297534d6209b239a28a030c72021230528992c61201622ae27bc2a4e1f3e228327fe297e1f5f21e7263f294b1ebd204326aa288d1d6520c3252928261d39204a25b627d41c1b2021257127941ce61fe8240727681c7f1fb024a026131ce01e53242c26791b3c1ecc237525c71a611d0c23f724b219ec1c7b229b2413197d1c0f224a24a0186d1cc321ff237018371c702180231b18191c26210e23fc17911bd320a1222817221b90204a22bf16ef1a602023225d16e81a4820ee215616d11a3720c9211016fe1a282088210616cc1a11207021da15b01aa11f212162150000160d7f14000067207722702358191325cf28542a1e247c25e529a32b12258626e329c02bd9252d27aa2ac92b5526442a502a022c4329df2e772a6a2cad2ddb31702adc2bd6306c33aa2a3e2c3c32dd33322b702cd4322934362bc32c57332e34982b592d60333d34652b122d7b334034732bfe2c80332d34772b192d04339732e22bdf2d42312b2f482b172d502d4f29f92a892d452767281d2bf02da8251c29392ada2f6b2699297f2ac532e026c3273f2aa934e024d625f4292a357f232026e9296f35de235c251c2a6835e3220326122a7a35b9234d2569298235f622e6245f2987359222d223362986353f21d822c02865357e20ae23d6287134ef20262296286c2fe61fbc2237284c2b3b20b721f927582a2e1f7e215427cc29e71e4821c8264729a31eb9205a26e628cd1d5920af258428571d242056251c28f81ce91f29258b27a21c291fdd24fa26321cb51e93249126ab1b5f1e42240f26491bd81dca237325841a6c1d21230e25e519481daf22aa249819e21c362253242c19ab1ce0210524d018621c882180236518461c412108234918d51bea208d22a117301b8b20fe21cc16ee1a4b20b2215c168c1a0e205621d3154a1ae61f24216a158f1ad71f072177156c1ad41f292188155b1aea1e93204b1504155f1520199180262006228122711af0242f29742a9124c425f029912b9325ab26b7298d2b12264b26292a782b8d25d827732ae82bb326f029442a6f2c1229c52efe2a862cc82dc5312e2b742c02315b33812a272c98323434ea2a8e2ca8337034bd2bfa2c0a347c34612bf22c15345e34912bb82dd533df33f52b912db932da30942b262de02f3f2cf92a022d6a2a37277a2abe2c0b25cb28942a052d6e26e526772a5a2d6e24a826ee29be3047248126192a233445245c26f8294d352d247627fe298335e624c725902989356c23a4258229ad353f23eb248229d8352e22d8253929d2352d232a230d29c93566203c24cc28c03515214c22b5289a348e1fbf21f128492ee51ef7220e28fc2a1520632158278c29291eb12156279529821efd21f3262629ae1ed5217926ab28811e4f2129267528c51dda20cd253428461d79206625e727dd1c0e20fc245027681cad1fb024cf262c1cef1e532449268a1b571e0424c325b61ad41d862361252c1a881d2f23ff24b319421ddb22af2445192e1d8e2275240c19fe1c2f223c24dd18db1cdc21072498188c1c74218d234d181d1cfd20d8228d17b91ba9204122de16da1b7820fc21c316ce1b6020ca218016f01b4b207c216316ba1b1e207f217016261a4e1f15211f15160c88117b171e8095202c23d723571ace242f294a2a602499256c29e22a7e251826be295a2bb9256326212ac32bff258f26852a1e2cf9257026b32a462c972583291b2b6b2cc928e32ddc2b952c322d1431972b7f2ca0303e33422be22cb23209346b2b612d76332734c42a152dae33ae33fa2a372de2327e31b72b482db130cc2c4a2a2c2cca2b86283f2b172db5267227512ade2c192501288f2aef2c2525f327372a932cfe24ac271f2a832d9a246426be296631ab23a026c829213512244d27ac29bc3596244d25a429ec35cf2291256b290136fe228724252920369021c4251129f035eb22e4252029ff35e72279242f290c363e214c23dd2805344620fd2063286d2cd81d08220428bf2a111f0d22b627022a171fb92145278d29b51e91213e279729861e3521d62624291a1edf2015267628921d9a209d251c28431d32204d25c527ae1c881fef241327331c161f9b248c26b41b881e472424261a1b471e0e24be25d31aee1da7236625471acd1d2a231b25fa19a01dc222d924a319721d732293247519291d1b2246240719f31cc6210324d2185f1c672180232218a91b0f21ff223f17331bac2071229b16ee1a2e20af212a16d81a122071211616e91a06204021f315791a9d1f23216415bd19c61ec6209e140714b90ec4167400a61fd4213222b919bc24f328432a722428256f290b2bfd24ab2597296d2b3e251626fc29cd2b8b25c526592a272cf925a926992a4f2cb025ab26d22a7c2cb225a127402b052da026182c9b2be82c572b522fcf2bc32caa2eb5302d2b422d49300b31f52acf2c98300f30fd2aaf2c2a2fd32cb52a9d2c1f2c6c28e42a932cee263028022b1b2df9251229812a612d842661286a2aec2c81254f27312ac72c7d241028352ac52cfd249f264d2ab82e2924cc250b2a093373235625002a973501238a25582a36361e231e25662a833693221c25d8298c366b22b225bd296d36ff22d1231c296536b120222441298b36f62031240b29f132e9207b241328b72b402156246f28b82af520d5211328c02aab1e9021ab27d5295c1ecb2138274529a01e6821a626c728081e232158269e28bb1dd72007267d28431d8b209c254e28111d11202525ee27891c401fb6241427e21bb01e40244426451b1b1ec523b325a31aac1d44235725011a8f1deb221825bb19351d8822e42438191d1d3122a724fb18ae1cd32161248f18aa1c74210c2469187a1c0c214e231c183e1cb220a5228c17dc1b6e202922c516a51b4a20de215e16d91b4a20c02189164a1c57209b21e7161f1c2c208e211917ab1a631f2521be153e11660f4f164c80f61fff216c22f5196824e428232a13247325b029282b3125ae25bc298b2b2c25f4250b2aea2b6c256226472a1f2ca2256f26482a472c5025fa26902a2d2cc325f725e42a582cd824f226822b9d2cbc252429e12a792c51289a2a752a7a2ca329132b382a572c0b2aba29d92aad2ccf280528ac2a9a2c87266b267f2a7f2cc2249326542acc2c80245827f429a52cd224ab26022a5f2c48247426ed29732c25248826132a912c4a2474253a2ab52c292360269029ad2e18242526b3297e34b823bf25cf298d360f239624c2298d368121c025b128a236bd22d1232629d73678205e24d529e136df20d0249729df365e214423642763300d2028243328752aa3208f235e282d2a3720d52213286c2a6d1f3b24bf279f299920ca21f3266729211e9b21b926e628181e8e216c2693280a1e3121ee255f28a51d9a2083251428011d262022259027821cb51fcd240427301c131f70246926b11b5b1e1424d125e91aec1d94237425701aa51d36231325fa196d1de022d824bf19391d8b22912462190f1d222245241219e91cb921fa23c818b01c55215d236f18561cf920bf221a181f1cae205d229017e31b84200a220417c91b5e20d521b416ee1b3a208f21d4168f1be11f5421de150e1c391ff620d715ce148f0b5e168b80031fa821162272197f243d296d2a182400255829c92ae824382582292f2bd324d625092aeb2b502543267c2a502c9d256b26b02a7a2c93258226bf2a982c77259c26f52a902c5e2516274d2b942cc1254826fe2a962c19257326c92aa62c3c25a427e12a9b2c1826d126382bb82c7025a026a22a892c0125ba265e2a9d2ccc24ea267d2a912cbc244326622a912c1c24b626452a8e2c502459260b2a882c14242f26f1297f2cc523ae2596290b2c2323a0265329412c292408260929d02f68230325132ad03504222225d729d03604227b25302a13371d22f3252129f73678228624b1292937ca2015264f298e3671221823ce27e92c831f3f238e283b2ce01f59237e28e42ac81fab221328f42a0f1f5b22fb279229bb1ed52287274d293c1fd9211427fa28311e6a21b426bc28bc1dd8202e266228441d51209a250328b11cb01f232543272e1cf41ed024b6268f1b951e75244326281b441e2324c925a21a111eb3235d256c1a031e32230425321adf1db022ae24e319cb1d4e226324ce195c1ddd2112243819071d9221be23e618841c40215c234518401c182112230518bb1bea20fa2250174f1b98206f22b5165e1b36209c218d16991b0c203c21c216361bc21f5a213616321c811f2d210b16dc1329169817ff03e4203c245f24981d2f24df28212adb23eb241e29882ad3240d257029002b99247f25e929aa2bed2430265d2a292c5f255d26992a4a2c2a259326b22a552c27259c26cd2a622c1625e026d52a5d2c3125ad26a42a672c0b253727d42ab32c5925f826ba2a932c2a25f3268f2a742c0d253527a82a792c09254127b92a9c2cf7249f26862a972c59247626642a932c3e245f26552a822c1824f825012a712c80237f25b729342cc02265258b290f2ca0226826a629a92bb02332242f292a2c09219425c829cf3089223d251c2ada36fd21e7249b29143778213725d9293f37ab21f024562aa9373a21e625be290a36142225248228302c45208b2383288a2afd1f06239b28412b701fca221028192a301f38220a28a929961ede2164272229611e5921df26cf28d01d2c218a26b3287a1dfe20ed255728491da2207425e827e81c26201c256b27641ca11fbe24e2260a1c321f61244b266a1bc71e1824c925fc1a511e95235325551a041efb22f224081aae1d702294248819521dfb214d242f19e61c9d21f723a218d51c52218a2392187f1cf820ee222018281cc2207722a117a01b7f200422ff16111b3d20a5214916fb1a0d206b210316f71ad91f2921cd15ce1a7a1f1521dc15231aea1ee52097146016bf162a17660968209223ff23aa1c1d24b128ec29e922cf242d299e2a9524c3247029f12a56242925d6297c2ba024df256f2a272c19255926c72a6d2c27258026ef2a8c2c00257e26072b9d2cd0248226142ba92cd324a026092ba92cd124c326d72a8f2ceb2497269f2a7b2cb3247326862a7c2c82242f265c2a752c3c245826622a7a2c2a2428263a2a6b2cbc2346262f2a702cb5232d261a2a5a2c6923f125f029412cf6229425c529202c89227425ab29302c64222125a429622cdd21b225c629122c8322d7259b28922b8322a024ec288b31072169263f2a4337ca22a6279529e537ab236a25c529a53746210c2494281c33e21f12236a275b2ae31ea22350281f2a6f1f0f229928a32ae71d03240728f329d11f2a221f28ed29011e2922a72781292d1eb02112273d29dd1d6c219826e428be1ddd2015266a28491d5e209b25f827bf1cfe1f33255a27581c851fd724dc26161c151f7d246c26801b9b1e1e24f625fe1a041e85238025331a9a1dde221225c619281d53229e242b19f21ccc213024d118c91c6221ad238718fc1c3a214c239318171d0d21e8228718fa1cd520aa226d18e21c9f2068223418791c5c200622b417381c2e20ea214417f51b0020b221a1164c1ba01f9021df15121b311f092117150000ef15a51900002c23a227e9286e220224b0280a2a69236f24e4285b2af323d0241129a72a0b248225b729772b8c24e525662a252cb424fc25c32a632cb0242c26002b8b2ca92431260e2b9f2c97243e26042ba42c8a242726f32aa22c4d243e26db2a992c30245626c22a882c29246026942a732c2f244926682a552c0a245126452a402cf0231e26132a2e2c83230326e629292c3723e925e629232c1823b725c929172cb2228125a229fb2b4b2249258029dd2be52128255929d02b762122255b29b92b4a212d251429a42b3021c7268e28c82b9a22e224b72a28329e2051275a2aaa36b72205291a2a2a367724d8254e299e2d3321c9257928232bfb20ea22b1280b2bf41d64227c28d32a811d272367287d2a291e44235e28512aab1e0a234328392aa81e6e220528c329431ef1213b271229201e4d21872680289d1dc920ef252628111d46205d25a827a51ccb1fd024e6263c1c2c1f5a243b26981bb91eef23b025ee1a331e55233225641a001ecb22c024041ab51d522265248f19781df5211e2454191d1d9a21b823d618dd1c44213f2376185e1ced20c9220218091cb02062222e17f21b8c202e221117001c6c20ec21e416c51b4d20ca217916861b2d2087214416861bfe1f90210e16551ab31faf2118150000491658190000a22203277428da21a2234928a6292a2360248028192a1b247c24dc28792aea23de24b0295b2b3a24b425ea2a7a2cb6241d26952bee2cb4245826aa2b072d582456268c2bf52cf6234f264b2bcd2c92232e26152ba92c3e231726cc2a792c4f23e0258a2a562c3723c4255c2a3e2c3f23c6251d2a172c41238c25e729dd2bf8229725c229b92b06238625ab29b12bc92262257e298d2b9d22672555297c2b7c22252559299b2b072211253929932bcb21172519295d2b882119250d29472b8b217c2511292a2bcf21cc239728522b05208f21c7266b2a921d77185c262f2c1914d51e3228642db119972271288d2a4e1d80237b28dd2ad31d2c239a28832a2a1d1523c128bb2a191d1823a228b92a4f1ddc228e28862ab71d8c226d284f2a311e15221f28ca29191e66211c270229901de120002641282a1d7a2064257e27bd1ceb1ffb24f5264e1c8f1fac2498261c1c4e1f4f242b26bc1b091fd5239e25731ba01e1b231d25a41a511e9622c824271a331e40228b24dd19f51dfd215124a219901dac210d241b19231d7821a823b718ac1c262126234a184c1ce520c522e317cf1b9f205d22f2166c1b722018226416421b3b20c72140163b1b052085213a16fa1abb1f4b21d015c11a151fb1204a14000037158b190080a5227226532895213123022832297222af231b284929e3226a24a428ee29aa2391243829cc2aee23bc25082b842cbc24eb26462c7c2da424e326672caf2d4b239e26312c702d722246267d2bd82c1c226b260b2b9c2c4022f725902a422ca7224c25ef29b92b5b225125d229af2bae220925aa29ae2b782214255729382bab2244255e29442bea224d259029a32bf622442583299c2bc422362549295f2bb2225525f528eb2ada22cb24d028ef2a0622b424c228e32aa521bd24cc28172bb021dc24d6280e2b8f21b324bf28172b1c21c7235b288f2a02206e2224289b2a431e14220628882a3c1d15222c28b32a611c05237d28de2a101cde23f1284b2b551c20243f29602bc61c192442296b2bfa1c2f244429502bca1de523f328e22acc1ea4225428e929a81e602142270629ff1d01217d267628b91dab20a425c827351d2320d924ba269d1c621f4e24f425031c8a1ed5236925ec1a251e39230425821ad11da122aa24ff19781d262253247b19371dc1210a243a19071d6c218f23e6189f1c172139235f18701cea2002233318211cb520d022d017c71b7a2087222317251b31204e225b16071b0820be210d16f81ace1f5e210016ef1a981f3121c615aa1a711f64215d15fd19fc1e07215014000000007d1500803f20a3242c264b1e07235a27b42801225022c0265428d62144239c270c29832288234528e629dc22fb24722a302c65246127492dc92e43256828802e2d30d8220527032d5c2ef01ec7254f2bb32c29203125a329aa2ba52128253a29152b302212252129ee2af121d824fd28cb2aa222a024f428b02a98228724de289f2a75226f24e228a22a52227924db289f2a4022be24e628aa2a7e22c224d0289d2a6222d424c7288b2a57229a249728742a0b2286247a28752ad02159245628632a762143243a28242afe200e242928ee296820ae231d28e429112039231528eb293d1f29231428ee29f71d60232d281a2ae51cb3237d28932a9c1ba823e728012bd6191d249129a92bbc1aa624472a3f2c121cc024712a5e2cc41d6b24fe290c2c9c1f3623ce28642a6e1f4c21062706290f1e6e20b7253728111d4520da24ce26c31c072065240f26611c351f1024ca25d61b881e80239a25ea1a031ee82239255e1aae1d7f22ab24da19691d132246246c195a1daf21f5233719421d59216023f918f01c0c21e022ac18b21cc32070224f18421c71200522d0170d1c3e20ba2135174a1b082086217c16ea1aa71f4a21c2159c1a611f25218115821a131f04213d151c1ae81e1021be142c1aa81e91209e141e17e81d4020ee9131208124af25441dfb21cb2537273121bc22d4258827f121bc22ef250728f1217122bf257227de214c212225ce27e620b825382c132dab235a2cb53122332522b726c22cbe2d4d23c521e5261529af20232517282e2a192454243228c229a9220424f42776294b224f2418289829a1223a24102884296222672420287d29a6225624122854296d221724e72769291022352408288d295b221724f0277129f2211324a1275729b221122406275829932105242b2738296421cd228726f4288f2051226526bd28262035224e26a328f91f43223d26ab28561f47225a26ac28a61e5d2265269928051e4b227a2695283e1ddf2114270b29211b38238d28272a18194924352a282cbe077b253c2cb02d6d0fdb25a32c182e1e1ea524682b1a2da8202023ed28c92af21f052260265d280e1feb20cc24bd26c31d2c207a246c26c51ce11e3c245f26ac1b6e1e8123a825fd1a3f1ead22cf249d1a011e5a226224301af31dff212b24f719c51dc1210b249f198b1d7321c7233e19f21c10218a238a18b41cca20dc225118661c6e203722d3171c1c2220d82114170c1c02209e21f816bf1bd01f61217416891bb21f4f211016571b991f3b21e815031b791f2a2172155b1ae21e0f217915ca19131e6b205514000000004f100080221ff6226924611c9521bc2512279c20da2186252d27d520be217f250c278020c3210e257d261c204520c7227b24e21c2d17c21cbc1f99135d1cab205a22da198022b7259f27d12006248027072914224b24d42744297c227724ce272e299e226824bd2724298822612493271c295e222e2462271129f62117243b270129b721e2231327fb286621d823da26fa28432183239d26ea280a213d234526be28db2028231c26a02899201323f9257328be209b22bf254a285620312284252328c81fe7214e25d0276b1fdc213a25b727321ff02125259527ca1ecf21e9245f27501ee821c4243e27161e0022e0243d27ad1d34229024cb26b11de72005230626311d601eb825f32897187627cd2d702ff49e1c2ab230aa3159212124572b1e2d4e21f11a37245b2743181d1e05238b25561b5d1f78233e251b1cec1e1223f224861b531e8722ab24851a621e3e227424661ac41dfa214c249e19831dbe2126245e193c1d7221db23f318bd1c14216a235918b51cd720d42230189d1c7e204d221a18571c3b2001227a17161c0720bc21cf16ce1bbb1f842180167e1b931f58213e16571b6c1f31211d160b1b491f0121ab15c81a1a1fd320a615b51af81eb0206615431aa41e9a20dd14b719181e2b20991400009613cc170080e8207524d4258d1f26213b2551272e2037212125db2629206621eb24702614209a20bd231025e91dc21d23214c23661b181dbf219c23d71bf3204125af26e51f3823ba268028a82196233527d328d6219a233a27cc28be2176232e27ce28a32151232127ca2887213c231d27cf2877211323fc26c0283e21e122bd26a9280021d3227b269228de20e3222c267a289e207e23ce252428b52060224f250128781fa821d62481274f1ec821b8241c27491e45218d244527941db7219b24de26e41df9219d24ef26281e22228224fa26f91d37227224c3260e1ec7215e24c326771d9d21502495264f1d49213e246e26001df7202d245226b21c092127244926c31c9c20642409273b1c231f07231625251a0514ff187d1bad093a18821bde1d0f0c7e1c1e207822bd172b1ed8212b24021a7e1e22226824531a281f0f2255245d1a9b1fcc212424c41ae81e9b21c023241a551d40214423be18051df420fc229b18cd1cd620c1226818a11ca12077223f18731c7c20442215183b1c4720f7218617031c1820be212317d91be31f8a21c216941ba31f5d2187167d1b621f31213d163d1b151f01210716f41aec1ed6209815c11ab11ea0206f159d1a8b1e77205215531a5a1e602017159119d21db91f021400002714b5170080c42075247625871e752176250327ef1fcc20b8242b26b41e782013244625fe1df11e1622c923751c361f0722e923881cd01f6424af251f1e5d21df25d3276e2074229e2677283d21d822a8268a285d21af22862678280c21a42277267228d420bc2286267f28e520d0228b269028db20a52283268f28a5208e225e2678287d206a2218263c281f2033227f25f527171f3c22e9246027401e4522a324f126941d1e227324b426451de3216d249e263c1d882159248e26131d122142247026cc1cb8202a245a26991c862011243e26891c6420fd231d26671c4a20f22301264d1c5420ea23f825571c4b20ce23e9254e1c2820b423da252b1cf91fad23fc25fe1b961f8f230526d11b9d1e1e239225301be81c7a210e247919421bea1fea215b18f41bb31fc621bf17101c2620702229157d1c71201423f816921c9f206e235b17db1cc62067232e18fc1cd12053236f18191dd8203f2389181e1dc82018238d18f41cab20de226818a61c7a20992222186a1c43204522da172f1c1b20fa213517fe1bea1fbb21e216c11ba61f93217516a61b761f71215f165c1b3c1f4621ec15ef1af21e13219415a11ac41edf205615691a841e9d20fa14141a3e1e6a20b814c7190a1e3c207c147b19961d8d1fe4135f269b1c18209620842cde24c927c828c32e2c281f29c72a7330ee29862baa2bcf30df290b2cbd2b332ff228c6298527872c5625d2261d99ee2c5d24352343a6e12f1a1d221801a925349828852852aa6d3b572ab428212f5e3d4d2a032d6d37573ed22ca52d9138613e9a2d5e30af30bf3ab0300f349224f8389f2eeb319da5873862302b335ead63361f31de35ef270834392d8e340f2b33319e2cf3342329582dde2974353026bc26c2299235a92048245329ab352a1e7b22bc281736371d3b227a280536311d24236128d635261e4f219d28d635df1c5e202128a235c51b2e202628bc35051a4124cd2ae135ed1bc327bb2d3b36b3191c2ae631c737a82091277b2f8f34052158229828b72d001e041fea24c528d31b681e8624e226531b941e22240226b51bdf1e2e240326071c4b1ed6236e25321bd81de022f224841a151d3d225024ab19701ccb21e823d318d51cf421e8234119051de821df235119ad1ca8218923f318411c5f2161236218e21b16211123e717631bc420c02232177e1b9b2081224c178a1b8b2059222217941b70201d22f416d71a3a20a8214716f119be1fe32074156c193a1f7d20fa142419041f932092147419051fb620b2149819ed1ea520a9146619d81e6e20a6146c19641ece1fab14211e0000dd1aec0a492cdc267b28a928f12eda28da29f52a49300b2a552b4c2cbc309b2ade2bbf2c4f30b029ee2ae82b692847246223b81f00253720711fdfa05c2700007d1cc4a58c2cc920c42333a97436652ae62b4a23f238ba2b0a2d4e2df038472dd22d52308139c92e6a30872e9139dd2fa73158adf338932f61312cb1a938282fe0322fb2eb34d42e2434b9287633aa2dac341c2c8d31a42c5235bd2a052e772bea364a26ed29302a85363122d927bd297f3651227b2847297736f22185251129083788211e241a29ee363e2076264629983662215724de290f371b202e245c2a4037ca1be224662b9337b018f125db2c04360a16a2272c2d1035d21dba24012c9932461e1e220529542e9d1da420cb26f82a851c4d20b7251129311c0920d62412280b1cc81e872468262e1ba61e2f24b7250a1bb11dae236325071a6d1ddf22d22497193d1d652253248c19b21da3224d24df19b71d6b223824e419f91ce121bc232019571c7c214b235a182c1c4521ff221018281c1e21c4220c18d41bf320832268178e1bca20442225179c1bb7201722fc16161b8420cf218116711a47208321e915ad190420302135159e19b61f0d21ff14a019951fe32001159f19381fd220d7142719bb1ebd207014c319991d6c1fac12ef1aa41aab1dd587fc293a28ba292e279c2d3929772a6a2ad42fb029b82a5e2cb930052a892bde2c26316629f02a4e2d64309a275428532a742d2a1d542328a4eb303d264526dc28b23163274525432cf2325728cd29602e98343c2a582b7a30eb38992c812e802f143a602d28307e9d5639e82d4d30e0b10039c72e773033b31938772e9f31a3af87345c2d3e32e1293833d12c7233962c77300e2c9b342d2a0d2df72b3036b4265d29432b63366c231528132a1b36cd228425b72963368721dc240e295736bc2060242929be36c220b2222c29da36781f70227f29a736d11e0e24972a7c36711ff124c22a0436f41f8324c92a5a35bc1d25240f2b9234341edc233a2a1332e11d9322ae28642ea91d46218727402b491d5320c726092a561c4c202526f0284f1c1f205425ce275d1cac1f9f2479262b1c851e3624d625451bf11dd7236725a01aae1d70233225561ab21d4123fb245a1a5d1dd022a524fb19f71c60223e246619581cdc21f02399181a1c8a2167231c183f1b1321e12243171b1bd3208322ec16f81aa4203e229716fa1a8420fe216716ad1a5a20cd212016811a32207421c915461a1320302194154f1aef1f0f216f151d1aa01f012144151c1a6e1f082143158b193f1f17219e14c619c31e7620cf140000991a2d1a0080ef250a27aa28c922d82b07294f2a7c28d02eb629022b162c7d30f329552b222d2b31d5292a2b792dba31cf29232be72d48329229aa2ac42da3329929d22af72cda32b129c02ae72de532b829e52a222e6f33ee29d72b082fb833422bb42c152fb633f82bd72d6c2eac340f2c0d2e772e8e34252ccb2eca2d4934b52c03302c2e1334c82c10318f2e4d329c2c68329b2dcc2f7a2bd8337f2abc2b6e2aa93439262a29d72a0f3598241528002a3135f4230027de2960356923d3252c2953357f22652575299c35a022ac25512ab03549233f256b2a913597225d242e2aba353c214525402a25350722e024072ab53429215224a12910345520652325296d31691f72215c28602d751db920cb27cc2ade1ce72012277729541da92028269428111d2d20c3252f288a1c0220872518283e1cc51f09254d271d1c241f35240226901b631ec2239025c31aaa1d4a231725ff190d1dc62299245919bc1c6d2261240319691c312241248c186e1cf821072471183d1cb321a52340180c1c65212023e217cf1b2b21b9226317c51bf52054225917471bb9200a22ae16b11a7e20bd212416541a66209321a1158d1a5a208021a415931a31205e217a15af1a1e20212191152d1ae81f1721f814be196c1f25219f140000341d7c1c00809f23b0265f280121be28e8282e2aa126fb2c9129db2a662af02f122a642bc32c3631632a062c412e09327f2a0c2c122f50326f2a012c0a2fa032a52a182c342fd132cd2a232c382f0833d82a8b2c3f2f93331f2bba2c982f9c33cd2b832d6a2f0334c82be12d972f82341b2c192e44302e340c2ce82eac2f4e34482ce22e3130ce33392ce52f9a2f3a32492c9a31e42d452f512bba32772acd2aee2a72340c261c29032b9934d524a728012af234cb2425270b2af8341624de250e2a0c350a23a726482a46352e245125e1295735ae225525f2292035da223925a1290e356a2256246929df34342173244a299934372165234f29c63320205024d428d830b0200622dc27592d8c1efa200b27792b691d3b21e926752ad51d1b218a263529b21da820fd259a28311d43208b252128a21cc01fe1241d27361c541f72244026f71bc11e2924ca25581b661e03248425c61afd1d85232f25571a831d0223c724d619e91c892283240f19c61c4b223e24c918921c052208249518481ca7219c232c18171c5c214623bd170f1c2921e422ae17af1bd9207d220d176a1b96200f22ce16c31a6320b02104169b1a2b206121e015681ac51f482184153a1aa41f3d215d15dd197a1f7621e2142e1a381fef20cc140000c41d951d0080d8226327d528fa2064266429cd2a02251d2adb29cc2b5c28b32dd829892ba52b8d30252ad02bfa2df831492a0a2cab2f9d32f32a492c103004333b2b902c363035333b2ba12c1f3094338e2bdb2c5530eb33cb2b812d8730da33c82b972d7d302234142cf02d9c307834572c4b2efc305b34322c4b2edc3025343f2c8d2e9f30d833352c3c2f27305a31522cc430ab2d222dcb2af6312529fc2afa2a683300273c290a2b93343f252328022ab63461245027082ad13414245226f729e33468236c26532a1135b5239625302a293505236825f2290535f2220025af29e434482234245929c5342a219724672993348221c7235929d4338e209d23df28b1307620df211428a42cb71e81206a27ad2a261d7a213327f329431e1d21b9266f29d91d99205526d328421d4e20c4254328cd1ca21f3825f227421c521fbe249b27151cc41e6224f8265b1b311e1b244226bb1af31db22391254d1ade1d4e23f7240c1a901de822b62493197e1d912271245a194d1d442229242a190b1df021ce23c5188e1c872152234f18521c3721cb22ee17c41be02064222017fc1a8f2011226916851a5420d021cc156f1a26209b21b915461a032080216715671ad51f4a215515fa19aa1f3d21fa141c1a341fbc204315000077126c0700807720e9236f242d1a9e258729162b7b240328cb29852b6626fc2a552a152cfb28e42e8a2a3b2cd12c5c31682a6d2c302fc632cf2a8e2c723051333a2ba92cb33069334b2ba12cc330a133b02bd92c0231f533162c772d39311934272c9c2d61311f34fa2bd72d4b317d34472cca2ec4316134682c782ea03152340e2cc62d6e319c331c2c232e91309130212c782f392dc82b132b82301f285f29832baf32b02541294c2b53346a251328e929b634502457273e2ad434fb23c626fb2910358e23d226ff293035cd230926db29433512233225ba292c3562222125c9291b354d229e2477291b358a21c724892906359921c42201291334ed1fab22cc281030d01fbf211b28b82bbc1eda20e127ba2aaf1d5421a327842a181ef620b1266c29881d4b20ed256628ca1c23209c25eb277f1c07205525ba27611cf11fed243e27341c381f71247826a51bb41e3b24dc25191b191ee7237e25491ae01d6a2321250e1a871d0123db248a197d1dab228e2459194d1d57225d242a19151df7211a24cf18dc1cc421e4239918c91c912174236418911c46212b2310185e1cfd20a22286177e1c8d20cd21bd173a1c38204b21cd16571b27205c21e815fa1a12205821d015731acb1f272102153a1ac41e6820e9130000a215561400807d204923e723f5194f257429e32a4f242f27542acf2bef252b282a2a092c6a26132c552a1b2c0a2af82f172a392c922d3a32d12a942c5a307333602bb72c3531e233cf2be52c82311334c52bdc2ccf312f34e32b342df7315434032c552d2c324e34cc2b8d2d23325e34fa2bf42d1b329b34402c462e4f327434022cc72dd931fa321a2cdd2d6230832ef82ac02ea12bed2aaf2adb2eb9279428ce2a31311b250a28db2a45339e24a826762aa834cd230628ac2a0835d4247427fa29363579241726212a4b357b2345252d2a7a3579228125c0295a35c322e725962931354023b62437295235a721a6240c2916359421fd23d528b133ae20d021f727e72ea61e3922dd27172c1e1fcc219c27b52a771e4d2283270a2a071f9e21fc267c291b1ecb207126db28361d6120da255628a31c3a206725fc277a1c0b201f259d272b1cc81fe5243627021ca51fb824cd26e11b261f6d2453262a1b841e0824b825881a941d3e23432597192d1da722e2240b19c21c3b228c24a218ad1cf2213d246c18831ca621e1232418651c5b215723d117da1bee20c822fc164a1b9d2065224716f31a6b203c22fc15ff1a56200f22d415f51a4b20f321cb15ee1a3020a521c615b31a182095216415921ae81f6221bb140000d015a51500805e20b4224e234d193c250b29962a2d242f266d2a1d2c8b25ef265e2a2b2c1e263728292b2a2cf6261c2c912a4c2c172a9f30952a942c972e0233e52a922c18311834f52a872c12324a349f2b012d7b325c34d02b722dd5328d340a2c852d223388341c2cb52d1a339734142c622d3133b534e42bcb2d1c335b348e2b2c2e36323a32822b632d1630c22c3a2bcc2dd829ef285f2b5f2e81252129f82af42e932520298a2aae3192258828682a58342e25b7276d2a34358524ac28802a6e357925f3262e2a8e3512244026fd299f355323dc24a129a335d5212725b82980352f2272248b29943576214a248e295a35262148234c29c8335e202922cf28852e381fb0210728192baa1e3421a227212af31dac215c27df29a51e4e21fa269129111ee720a22647299b1d98200a26ea28201d46209e255c28c41c10205225d6276b1c8f1f06253c271c1c1a1fb924d226851bc31e66244326291b421e0624ab25a01aad1d4e233e25d919691dd522da246c190f1d72228b24ed18de1c1d2239249b18a01cc321e2236018751c702151231718161c0e21bf228017641ba42022229316161b5920c4211a16c21a1c205b217015871a052036214115cc1a062029217815fb1a07205f21d015911a7d1fe92078150000011751180080d41fb222f822a3196d259229352b8f241a26552a1b2ca4252b27222a0b2c6d261f27bf2aa82b15267428cb2a5d2c1b276c2c2a2a662cee2a0931f82acf2ce42fd633022b8d2c403250347e2bba2c00338634102c542d9933c834152c702d0434d434fc2b4a2d0e34e134ad2b8b2d0834e934002c502db2332834f72bc52d29323b30782baf2dcb2da929c12a352d1d270b291c2b592dc4252827d62a312dfb23a527202aea2f43249b266a2a2733bd23bc26652a0f35e4237e276b2aa7357f24ea25062ac3351923af25d329f335d2228126b729e935ce230526bd29f8350e23c624ac29fc3598216e24bd28b235112152225728eb323a1f6b2120289a2c321e292236273f2adf1ee1217d27d429641ed0215827c129281e062239276f29351e0322b426d628321e9b214626a228c71d0921da254e28301d842076250828a71c1b201f258d273b1cbb1fd9241527c01bfb1e78248f26ff1a551e2224fd25591ad41db1238825ad199f1d572321255119681dfc22cc241d19471da2228e24d8181c1d4a225b24b018f21c032232246618a11c99210b24f9173a1c2c21792348174d1ce42078222a177a1ca7201b22f4165f1c7420f321ca16351c542096210f16f91b1a2084213116791a841f1321d814000041172f18008035206723ee2395190b254d29b32a2a24f325ab29792b6b25aa26342ae22bf9252327be2a562c4c264e27402b742c3d26e7273e2b802c6a26812c622bd02c502b53310e2c012d7930f633ee2bc62ce932be34bf2b282d2f34e734f12b162d65340235282bbc2c6b3426354a2bd32c6634cf34dd2b2a2dcf338e32bd2b4d2df330312d162b972d412bf827422b1c2d02255427f82a692d31245f28512add2cc0248e28822a9c2dd324c925f12965304a226627572a55342024c326bc2ab835bb2398262e2a0e36ea234e25c42944365e22d624b0293c36ab216b25d22937360b22042596296f369821bf25da280a363f221824f22827327320ce218428f22b4f1e082222288c2a8e1e4b22bd27c129d71edf216427a129621e89215c27c129041e4421ff265c29b91d0d2142269e28591db020b4253128f71c3e205e25f7277e1ca51f10255c270c1c361fc124cf266e1ba61e67245a26da1a501e2c24ef25811af21dd8239825f619d81d60235625b119ae1df422172588196a1dab22d7241f191d1d48229024d618db1cee21462475187e1c7b21c6231f18b61bf9201123dc16f31a84206a22fc15d71a2120da21b215001b20209b21d5152e1b15205621c715661a9b1f16212615dd19881e992039140000cb13541500807e1f372282229b19e9242929eb2a67248f25db29ef2b24253526222a142c9025d226942a3a2c052687270f2b892c53269e26242bb02c5f2535275a2be32cda25092c362c592dc72aab30432c322d0e30f2330c2c302d0333ab34fe2b322d2f34fd34132bbe2c6734eb34512b112d3334bc33612b0e2d4732d82e392be22c2b2dc128512b5c2d60264328a22ada2d1d25d228af2a532d83255b283e2a572ddc24bd28562a672d49254c27832aae2e12243b26e329a23120232b254f2a12350e229625a12a3d3663221d25d22ac636d921a1252e2ad23670227d26a7299a363d23ab245b299d3635214024cd280e36bd20dc22e7283631751f0d232628292c771f392393283d2ba61f45222728372ba31ed5211828752a2d1ebe2190279929141e7e21ca26f428d11d23217326b6284b1de6201e2690280c1dbd20cc256a28e21c5c205e2528287e1cdb1fe3249c270c1c451f7a24ad267e1ba81e0d24fe25ac1af81d7c239f25fc19bf1d272355259919591dbe221a250f19471d6b22da24d818ea1c0e229a248218e21cb421402458189c1c4221a423f0175a1ce220e8224017f01b8f204b226316de1b602003221c16031c6020f1213b164a1c4d20c7216b161d1c292095219f16fb1a7f1ffd206c150000e4158716008025201523d523f819852400298f2ad923e425112ac12b48252d26342a152c5d256926862a422c91250927d92a6a2ce9254f27cf2a962cba25f726532ba12c7525ce25e82bc42c8c24022a342c502dcb28292f3b2c032dd02d83319c2bc82ca1308132ac2a832c7731c831542bc02cdb30452f682be72ccc2dce29bd2ab32c2328c727642a252de324a228bd2a4a2d6e25a226662ad82c962337260f2abe2c48236426162adc2c7d23d6255a2acb2cd7225c268f29642e4623b726b3293f33ae23e924732a4c369d211f25652ac036db21d22475299b3660210225f028bf3672210f25cc2955375b21c424c2289136e92028226d28e52f581ed8226c28302a0e1f722231282d2aa41e7e222128672a821e66231f28172a6a1fa42263277329a81efe21ea260029021ebe21ae26c328981d7721382698287a1df720d7256528fa1c6a20752528286d1ceb1f14259127f01b451faa24b426491b7c1e3e24ff25af1aef1dcf239925f319b31d5a233325b619671dec22f1244319441d9022a924fb18191d22225e24ae18091dcb2117249f18d01c6c2187234818801c1121dd22c017111cb12060220117dd1b84201b228d16b31b6020f2213216b21b3720ca213116c51bf11f7d21d0159f1b051fc3207d150000df12e7160080e31e4522ce22f51898245a29f32ad9233825aa29712bd324aa25142aee2b14255c269c2a542c9c25e826062ba82ce6253927312bbc2cf7252427342be62cb2255e257e2bdf2c21243126162ca32cc424a627812bf32ce325192a682a9c2cdd28ce2bae2aac2c3a2a392a6b2a8c2cf728be28342a622c2a277428892aba2c39267a29a02acf2c3127a027f12af62cca24ea26702adb2c2624c826382ac02cf223aa26472ac22ccf23e5250d2ab62ce82216260e2a032df622a0260929742e64238724a529fe340d213624af29df36b220dd25222a52378a220c25ea2940377c21fb24cc29703722216b25282959366e214121b528e12c1e1d6723aa28e92b361f03248728f32ad11f92235d285f2b601f21231b28d729f21edb22b62785297c1e472276274929f01dd92108270029b21d232186269c28011d9320f4253e28961c0c206d25b2270e1c551f05250327591bca1e9d247326ce1a6b1e3e24ed256f1a251edc237b25fc19071e57231f25b319ec1dd422d1249a19e11d67227f246519821dfc213424e6181f1da621eb238e189e1c532189231b18411c1e212a239117d01bf5200723ba165f1b9f207b222416591b3520b3211f16921b0a204b2185162e1bd81f5e219315821cba1f0121f7140000f11a661c00006b2295278e28ab209f245529fe2a46243d25ab29532bc5247625122ad82bd224fb25722a2e2c31259f26c92a6a2c7825b126012b792c3e25e526fc2a832c1c25b826562b962ce324b3264b2b982cdf247826d72a742cb424ce273b2bdb2cad256328ed2a762c61264028592a2f2c0f26ea273f2a512c4f2548289f2ad22c9f25f526b12ad52c5f241927a62ad82c5c24a0268a2ab62cf3235326502ab22c6923db25fd297c2cb2228125cc29392c4b22cd258f290b2c7822b9245f29f82c4421fa256f2912307f229f24e6298b3606213a244a293b3798206325e52987378d21a724bd29f537aa205a25e628233610211f246128012ccc1fd9226a28852aac1e38227f28092b0f1e6f233928272a3e1f59221e28c3292f1ee8219f274f29c11d9021252705296b1d6621c926e728421dfb204126af28da1ca420ce254f28851c37205025e9271b1cb81fe8245c27851b4a1f8624b6261a1bf81e36240226971a8d1ed6237f25321a3e1e34231525ba19001ea122ad248219b81d29225e243f19471dc2210c24b2180e1d7221aa237f18b21c152114230b18471cdd20a3225e17ab1b93202a229a16131b4e20c421e415f61a15208421cc15091be51f3f217615991a8a1f1b211f157a1afb1eda204c140000de19291c0000ee21cc263d28252098248e293b2bd9233725a829802b9a243925162ac52b8924ae25772a232cda246f26fb2a7f2c5025c526202ba72c1d25cb261b2bb42cd8249226412bbb2c97248c264e2bc92c932417272d2be12cf4244a27fe2a9e2c1825a327e72a742c3b257227c22a7a2c19253c27be2a8c2cc024da268d2aae2c6724ae26832aa22c0224bd265c2a8b2cb523b326552a862c79238b262b2a6d2c1d232626eb29452caf221d26f729652ca522b625e429862c35228f25c3292d2c0b22a42444293e2dea200b252d29a531322142262f2a3d374622f725c029a637cf21e224982904389e202124cf289234941f39227a289c2bb61d82223c280a2af91ded2292289c2a5b1ea42222288e2a181e67222b284a2ae01d7b22ed27b729f21d05226b277329b21dc92118273b29a31d2b219726e328091da8200b267928ab1c3720882507283a1cd31f13255727d81b671fae24d226361be81e4a244c26ba1a531edf23d825291af81d36236525a519821da222f1240e19631d2b228f24f118201da2211a248f18381d4e2191235918441d16210c233d18241ddd20bd222318ee1ca9207c22ef176a1c62203122db16171c362019225a16b61b0a20e1213416131ba91fab217e15d51a301f3d21ba1400005e16fc190000e62375289e29152375242f29a12ade23be244a29f82a0d24f524d429ba2b0624d725822a402c93241126082b9b2cab244826342bbd2ca8246226412bc12c8d244a26322bb62c4e245c26222bb32c442442260e2bab2c1c245f26e92ab22c2f24b326dd2aa02c4e244e27ab2a8f2c97241927812a7f2c4224e326552a752c09247826452a702c94235526182a502c6b2332260e2a422c16231426fa293e2cc722d625d529342c58229825c6293d2cec214925aa29422c72215a25a629352c5d2169265729082c3f22e6257c28e52cbf214c25d5299e342921a9246c2a933768209426fb2925370922a622d7281430ea1dbb234328d92ba81e94239228972a191e0e239328be2aad1d25237228ad2a8c1d582382289d2ae91d43236628732a0c1eca223428052a0a1e6522a7276129de1dc421e326c1289e1d25213e265728281d8b20a62505288e1c0b20112540272b1c621f93249326661bd91e2224f325dd1a651eab2371253b1a281e0c23f024d319d81d842284245d19a91d13223a2409195c1dbb21ee23c4181d1d592168236718ab1c0921ed22c7174f1cca207b222d17341ca3203e220017481c7920fc21e416351c5520d02189161e1c37209a212916141bc51f8b217f151e19091f1422431400008616e11800003023fc27072972221f247b28472a6423da24df28812a4824ca248329352be9234b25a92a752c4c244d26bf2b222dd9248f26ed2b3c2d95249426da2b2c2d22247226a42b072dbc236026522bda2ca62346261d2bb32c87234326c42a7f2cb1232726852a662c8e232226782a652cb5234226412a582cdd23fa25262a602c57232d26172a4d2c69234e26112a392c63234326e129292c2923a8269e29442c6c23f825a7294c2c7d22a8258f292d2c2622af258029152c052294257629072cc021f5259a29fa2b242273237728692cad1f72222c28f22da41ea7242a2b7f33aa209c25412a0033d520db221228f52b841d332452282b2b851e86237e28c82a6b1d4e23b828a42ad91c3f239d28b92a031d0a239c28a52a441dce228c288c2aab1d6a227128502ab41dda210e28c9295f1d4421d726f028fb1cba20bc251b289b1c3a202f2558271e1ccf1fd724da269b1b8d1f7c246b265b1b3a1f1024d3250a1b961e562348253b1a201eb822e724cb19e61d5522a9246a199a1d122272242419711dd8213624d718191d9a21ed238918aa1c43214c230418501cf620d2226d17041cb0206f22eb16ae1b872027226616751b4d20d12100165e1b14209c21ee15ff1acb1f5c21a115ed1a391fb2209814000043169d19000027233827b328692216245a289629dd2217245d2893291a237c241929762a892333254c2a052c38247b26482c932d9f245227962c022ef52304275d2c9d2d70226726e12b202d3d226526162bad2c692220269a2a652c01239825242a112cdf228725f829ea2bf2228c25d529d12b202368259d29b92bf2222c267029a82bee235c26bf291c2c16242426e529392ce423b725f729392c2e237f25cc291d2cc0222e25a329072c3722052571290d2c0622f7246429042cd121fd245f290e2cd821f7243d29e12bad2153250529912bca2110246928762b3020a620fb27b22bca1c2720df27a92bdb1bd520c727362bc71bf2211628a32a8e1b5a238528eb2aae1be023e228f72a561bd623fc28142bbe1bea232b29382b951ccc231b29252b9d1df122ce28992afa1db0210d28af29611d13210b27e728161dbf2014264928e41c58204d2560277a1ce21f87244d26101cf91e0f249925fd1a731e7b232925771a0c1ed822ce24e419a71d592274245919571df7212f240d191e1da421e023b218c51c45217b233e18911c07213223dd17531cd720fa227317241ca020b622e616781b4f20942239165b1b22200622eb15291bfd1f90218f152c1bb41f5d219215a71a591f78215a15161ae11e13210a149212ce1499145f806d1fdc21432223191c24a0275229be213b2302281d297b226e2314282a29732230244029ef2a45239b26912cd82db624ce28c92e53306924d527af2d402f5020fe25aa2bda2ca7208f251e2a022c5b2242257229642be72261255f292d2b9b224c252f29ff2a812211251729e02aa722e0241b29e72ad022e4241a29002bf92264254f294c2b6223da257a29652b842324269529a02b8b230726ac29c12b3c2327269629d22b09237d258829e62b6e2254254729c32b6522d824f528512bf3217824a728cb2a5d2117245228482acb20c2231e28e329702084230528cb2931205d23f127ce29f71e4923e927e329d51ca1231b28192a8a1bc02352285a2a591aee23d528d02a0c1a5d24ab29c52ba71a9a243c2a3b2c891ba324282a342c1b1d2f249429812b7f1e6b224128f4296f1e0021a026b6284b1d632048256d27a51c132093244a26331c931f2f24dd25ce1bb51eca23c825b91a121e27237d25161af21dbe22fa24cb19931d37226c244619a81dd4210a243119921d74217d23f4183b1d222102238118ed1cd3208c223e18721c8320242268171e1c4b20d921dc165a1b1120a821ea15ff1ac81f72216f15ba1a861f51213915a51a4a1f28212915041a051f3b218014121ab61eb0208b14101aa71fd1202a8ae31f49247725e81bbe2111267127a920ad22e825e427cc216b22042600286421d0219a257127f720ca21432b062c3620152c5032e33339221f290e2ecd2e8e242521432782297b1f27253f28292aa3239a2456280d2af3225c242f28a529b5225f244c28d6299a229a246528072ad22296247428152acc22c7246a28fe29f222a72474281d2ac422102597284a2a13236325d828a52a3923da24f5282c2beb22e5243c29582bd7229d243c29762b7322fe2493283f2bd622822316289e2a09216e221c27112939204a2206268928e71fa9226426a228ce1f4d222c268c28d91e112246269128911d78228926a628631de0216f269a283b1cf7210e27d928941b01239928ad2a27188e25bf2a822c0589b325692ccd2d81148f255d2ce82d101f1224762a9a2cee1f0b221228222a3a1e3620a3250528751cf01fb124d026341c6b1f72249926a51bf31e03240226291b711e0f231225751a381e802278240f1a181e1c223624c419091edf2128248a19d51d9521fc2330193d1d4621dd238318fb1cf22027232618a41c89206622bb174e1c3720f921ee16381c1020c2218d160a1cdd1f83214616bf1bb51f7521cc15691b901f56215615221b721f3a212315291adb1e1121431493190c1e7120b613000038158c150080f51e10226223f91a66218d25e6261420c821ae256b277320ec219425252723203d216724c325951eaa1a311f6e21cf17d7182620012238160d22ee25dc2750204d24c327422922225624fb275b294e22732401284f2978228c24e4273e297c227424ee273f2939227224d427362916225b24bf274029d7213e2481272b297321d82335271329d120da23c826f328b620ba23a426e42833205b234426b82884209f22b9256c284120a72266252728db1e3e224025f227421e26224325f627081f19222925c627f91e0c221325ba27931eff21fd248a272e1ed421c5244b27ad1dc8218e2415274e1d9a2181240227fb1c88217f24c926eb1c1b22992405279a1d942070239026761ce11fe327a4295717ea28242f5e3094a0cd29603065310324f3208028ba29a91d371d70231f26ab199b1f7f235d25071cf21e29230d25f61a851eae22d6245a1a741e502291241b1a0a1e0c2260248b19d91dd1213d2433197f1d87210e24e3180e1d3a21c4235a18f21cf02028231f18b61c9a207822d9174b1c49202b22e916fe1b1f2006226e16641bd11fca21f315161bb01f9e21b415f91a831f5f219c15ce1a681f22214915b71a331ff1203715c01a0e1fc5203e155e1aba1ea720c414ec193e1e3920441400003e16ed180080fa20f724c526611f0f2181252928ed1f72215c2572271d205e21c9244826331f251f2722d823301c7b1c2b216f23231a2a20e2245c26681ed422e12693281021f7235527df28ae211a247c27f628d921052495270d29bb21b32385271d299921a323762716297221912361270629652148233527e328fc204223e726b428c42031234c269d283720fc22c6257328001f04229a2421272e1d6321ba23b925081c1d22b5226025671cb7201923bd25ca1a8020e822a6257b1a972019232f269c1aa22077231827ef1aae21cc233e27171c14221a24fa268c1ce6212324ae26941cca213e249c26d21c6b213b248226d21cf12030247226651c992017245d26eb1b8920122490268e1b912114243826a31cc71c0220d02157164208e214ee196c009518681c5b200310a71dd0207e23b518a31e28226924e7192a1f20226924f819bf1fd4213e243c1a4c1faf210024df19cc1d54217123d4183e1d16212c235e18d51ce120ef222918991cbd20b822eb17751c9c208722ad17491c6c202f226117091c3320e421b916f51b0d20b521a116991bb51f79211d16751b641f3d210016181b021f04218215d91ad81ed3202015cc1aaf1ea7201615b21a891e75200215331a531e632077148f19d21dd51f60130000461302170000f320d3243126c71ee22192253427e41fee20a024da259d1e39204b23ac244e1db61ed821bb23501cf81f9d23dd24cb1dec2069252d27b61f95229a267e2828211023fe26bd2856210c23f026be282021f222cd26ad28f4201d23d726bc28f9205923ff26e82808216f230027f228e1204a23cb26d628942000235c2690281a207422af252228a71e4e22f7248727c91da02292241f27851db7228a24f926981d4f22a724f9266f1dc221b6241227491d5621a5240e270c1df5208a24f326d41cbb206124ca26791cab203e2491266a1c882022245726491c68200e242c262b1c5f2004241a26221c3920d4230526fd1b1320bf23f925b51bd91faa23f2256c1bbc1fa523fc25511b651f85230c26341b6b1eda2238256f1a841ce4201123e918d11a7e1faa2138175e1a981f41226814071c3520ee2292158a1c9320a3238916d11cc2209423c017e91cbf2050231718ff1cc62034232918091dbb200c233218f11ca120ca221e18c61c73209422f4179b1c45204a226917651c1e2002221317301c0320cc218116011ccb1fab213816d01b991f8b2111167c1b601f5c21d015f01a081f2c213115971adb1ef720ee14681a951eb320cb14301a551e7b207414d319181e50205c14b819cb1dc71f97137d256f1c0720700fa42cf4256928f226682fb129ca2af629c530362a262c682b37317329c32bce2b2c30f92855296c2b822f7e238f26302c7133e525ab2626301d390a247a271d34413dea2ac32c6136bb3dd329932c1f2fc339b627262ccfa36738832ae22b7aa84638d52d432f46aabb375532c434cda82f369a30f333f0a91c363932da347ca80235262d9832c91ea933a82a9132f92808315c2a51331a27eb2c5529323423257b279d286634c120c5253329b0345120fb243629e93426201e251b29cf3468200826c428cf345d21762481280935182068242d28ed340b2045221e28ff34941d0d24bf28bd34351f6726be2833340d1f9125c12c34343e1c50227b2aab304f1b0a1a3f259c2ae215051c312489277c18fd1d41244326821a981f3f2400263c1c0a1ffc23bf25a71bce1ec6236f25661b0f1e002327256a1a5c1d7222a1248619961c0f223824ba18a31c07220d24c718001d182207240319a01cc1219b23a318711c7e2182235418231c35214023d317a91bdf20ed220817951bb220a922f516871b9a207c22b2168b1b7a203822b516d61a3620a12114160e1ace1fe4203715a119551f9920d9149519451fc920a6147b19331fcd209114c1191a1fc320a1145d19fb1e9c2051147819a31e13203f148a1f1016c11d73974c2c272865292827172fe2291d2b1b2b79305d2abe2bf52bff308b2a082c962c39304729f529fd2b6329fa1dce257328f92dc41d63246d2c763660292d29902ceb38d92b9c2cd52d2b396a2bf62c8c2d4939042cd52d13adbe38432dc12e7db12b38bc2e5c304cb168379430ce31b5b0f036b6307732a4af3c362a30b432c1ac8b348b2e0b339e247633dc2c6033d828e530872b4b349028f62c1b2a53359f244328e8292b35ef20562689291f3590204127fe289a35d02084236f28e635791ed224ba287a354a206023af28c035641f5e234329733551200f2574295735491dea24802a2835f71d6824602bdb343a191425f42bd7334d185524c92adb306215b9205a28b52c441af61f0026d429151bbf1f7325a9281c1b1d20f324e927021c341fb3249426381be61e4524dd25ea1abb1dd8239025be196d1d262308254919351d8a227d243819731da12260244f19ae1d6a22452488193d1df521e6231a198d1c8f2171234e186c1c4f211d230f18421c1721cb229317061cf1208c222817b41bcf204a22da16b91bbb202022a716481b8820d6214516a51a52208d21b915db190c203221e114bb19c31f0c21c614b919a11feb20c414d819621fdb208a14e818b01ed6205d14de19bf1d441f2013d21b541d1120a390262ae9285d2a5626972d7929052b142afb2f9129f12a002c22314d2aa22bdb2c9e31c229dc2a502df83080248025472c2b3266212c28182cbc34b3258128482ebb38b12a582b362f2c3ae72bad2d2fa462393a2c762d25b3db380e2d982e44b35638da2da72f88b0d137f02ea23086b00b376f2f5d31c4add635b82e47319aa99b34df2d9531cd273433442db732862b7f303a2c94337128842c7d2b9434b8245c288c2a1b358a215b26fb291e354b215926302a63350122f625b2295e35a321ad247a29b635f320b7233b2981354d2042242e2911358220b6257b292a356f20f824632a7035d720aa24262beb34fb1ea124232b4433671eb423d52990301c1db4217c28202d441c8d209127bc2a0c1c4720f026ba290c1ca9202d26c528471c58205e2507283b1c0120b324d426031cb21e4424ff25e61a0a1ef3237f25391ac41d8e234c25f119d61d55231925041a9c1df722cc24c819341d7d2263243719a01cfc2118248118611ca2219e232418cf1b362113232a17851beb20ae22e616451bb9205f2277164c1b9a201e224916ee1a7420dc21f815af1a49208f2191155e1a242047214e155e1a07201f212015111aac1f1d21e214181a7f1f1a21bb147e193d1f3621bb14031af71e8d20ab14b912021b681dbf889727da285d2a7224e92ba629022bdc28032f4e2aa82b9f2bab309d2a112cd02c57317e2a052c342de531852a092c692d5e32662aa32b202db632072a0e2cd52c5733c82a642c492daa33ca2b3e2d162d1a35e32b532d0b2deb34512c2d2e072cda34d52c9c2e662b05352e2d7e2f162bb634242d4630b72b5b34192d3d300f2c19343c2daa30832cea322e2dfb31642c16304f2cda323129182c492b5034bd240b29a62be73443235d28dc2adb348423ec27b02a2835d2220326e329233507221526402a3835f42234259d2a5e353e22a824532a12355321a824282a1d353121b724292ad43420216924282a79344c206b23f0292a33cf1ee12265293a30501e7d216428d82c311d9320a427162b541c1921072799291c1d0a213c269b280d1d6f20da254528721c3620a9252228391c02203d257127041c4e1f672439261e1b731ef423ba25481ac81d84235b25a2194f1d0623ce242c19dc1c87226f24bc185b1c39224e243e186e1c0b221d2431184a1cc421cf230f182d1c7e214b23aa17f91b3721d0221717081c0a2170222c17ac1bd32029229b161d1ba120e9212016c61a9720d621a415b61a8420bf216615bd1a54207c213b15fd1a37202e216d15191aff1f1e21bc14061a9f1f272182144a19ff1d3a1fad8d8624eb272629112226299e29c62a3227482d262a9f2b0a2a2e30c62a3a2c6d2c6931d32a662cba2d3a32fc2a652c112e83321b2b5c2c292ee2324e2b832c512e2033852bbf2c232e9f33c92b242d592e72346f2b272de72e9534212c8a2d992eae347a2c312e362e8334b62c1d2ffd2d5f34bb2c1b2fcd2d8e34ab2cd42e4d2e0c34ae2c2530992da432f52cd430c82c062f0f2cad31dc286a2b142b3a33eb244329572b8e34e02341284f2ad734cf23f826942a08352f2361266f2a1e35ef22ae26482a283573239a25e52923359022df242c2a0235b521f324c129f034a9219324aa29ce341a215424b129553495200a2361296732411fac21b328cd2faf1dec20ec274b2ccb1c6b21a827bc2a6e1d44211327542a6d1d1821a0264329651d98202126b528dd1c4420a7252e28651c991ff7244227d41b461f962483264a1bc01e3824fc25c41a7c1e1224a925801a2d1ea0234d25041ad31d1923de24ac193f1da1229624f618101d5f225024a518de1c1b2216247718801cbb21b2230118281c6e215d236517091c3b21fb22f3169d1be8209e228e16431ba4203b224116cf1a8820e121ac15b81a4a2073219915701ae51f48212e15751ac61f2e216115041a8f1f6921ac142b1a501f112123159716b41eb320248e4a247d28fa297b223227db29672bd725932a682a2e2c5128412eb62a082c542bc9309e2a372c562d2732e92a7a2cb02ee432922bb02c1a2f6533da2bf22c342f9e33052c282d342f1234312c7b2db32f6c34112cc22dde2f7a34622cef2df72fa434982c202efe2fa834ae2cb92e033063348e2c3e2f4f2f4f34842cf02e6c2f0d34bb2cac2ffa2eff31b82ca0302a2d042ea12b0e31d728ab291c2b4232b9244c29962b2e34b6245828dc2a83341c245427a82ad534582399263c2af334cd22e226672a18357b23d325532a23357f22f4241e2a0135ce210625db29f334bf21a724aa29d83430216d24a2296034d020dd223f296d32761fec22f928f52e861f9d215628252c1a1e02211528e82a721d69218a27f329e21d3321b6268929a71d9e204d26fc28051d6d20dd256b28b01cfe1f542504283b1c621fd1247e279c1b0a1f7a240c27411b951e41248926991a411ef223cf25181a231e83231c25fa19c21d1823cf2472199d1dc2228e242719891d802254241419391d25220f24a518b81cc321a6233218771c6d211b23b117071c0921a322f016261bb72039222816b11a6d20fd219315831a2b20bf216d15341a07209c21fe14581acf1f7421ed14081aa51f5f21da144f1a511fdb20e61400002b192e1c0000b821d8264528591f6826ff29a52b4a256328452a072c8126af2b212b612c0b294b2f182b702c7b2ca831332b9a2ca12e0633c62be12c04309333d52b012d1e30bf33eb2be72c36301034322c7a2d6b306b347c2cfb2dae309534782cfc2db93081344c2c2b2e8430b334712c672eb6307434852c632f77307e34512c582e81300f346e2ca72ee82f5e31992ccb2fed2c982cba2b0330a727d029dc2be031ad244f29a12b9033462480283c2a7134c0234527a92adf34ac2222274e2a2435f3223d27192a34354123ce252d2a533525225725152a1d35f521be24242a58356c21c024102a36354c2174247f29a034d720d922e8280832721f312155289e2da51d2220cd270e2b7e1cfb20fb27e62a6a1da021ea27902a1d1e802109277829d31d942014268428b81c4b20ad250a286d1c15205c25d227351c072004257327091c531f9724bf26571bc91e5a240e269c1a221e0a249e25f919c61d872336257619691d0f23f1241e19551daa229f24e5183a1d5d227124a6181a1d032229248a18dc1cd021fb232f18cb1c9b218c232118961c4e213323a417851c1821c22246178c1cc72031221017301c5e20ab218116491b4220a1217315d51a202084214e15781add1f3821a814651ab21e5320c41300006b196d1c0000a82233277228fd1ff525f729b92b2c259527a52a232cd525aa28be2a562ca726822cce2a802ceb297230e52a902c562da732382bcf2cfc2fc833df2b022d8f302034222c3c2df3305534312c522d13319034552cdd2d5931d434462cf02da831b834522c002e873192344b2c5d2e3a31bf346c2c722e6d3196344d2c142efc300e34752c402e2e30ac30ee2bfb2e8d2c792b732b222fdb265628bb2b71301a249227fa2a063297233d26c22a44346e22f626aa2af7345f233627532a4435d723b826452a41357e2371255a2a763539227324e0296c351621e624e6295f359a212a252b297535c22136244629a634b2205722ce287331121f392134280c2dad1d1d2138289b2b6a1d0d223a280d2b3c1e8122e927732ab41ef6212d27c129251e00218c260c29031d97200d268e289a1c272085251a282a1c03202e25b927d11ba91fed245227761b951fbe24e6262c1b3b1f76245e26d71a9f1e1524d525431ac61d652374254c196d1dd8220a25fb18101d6222b1248118e71c112259243918c31cc9210824ef17901c7f217f239a172d1c1521f822b816931bbc208d2218163e1b8d205e22d415391b702023229c15151b5c20fb218015321b4920a8219615961a21209e211d15a61af21f6c2199140000c6198e1b0000fe226d279a284b2072259229232bba24ca26ec2a472c16265827d92a802c4626b628a82b8c2c4027e02cbb2aa92c432a7331aa2aba2c8a2e9a333a2b142dab304334ad2bfd2c3c316b342e2cba2d8d31b134722cde2d0732ff34752cba2d6b32e7345a2cf82d4c32e334272c872d4732c5342f2c262e2132ca346b2c262ee2310b342d2c7a2da030f42ef72b182e5d2b832ad42b682e58268928b92ba92e4a249027722a88305e233c287e2ae7325d240628f32aa83443248227ea2a6f35f3238f26282a8d35f222c526352a8f352b231425062a793560217d24c729a435e1206f246f29a335d220ef231629a93450207c22f7281d310d1f68226f281c2cf71ef020d827792a5e1d9221d127252ae61d0d22a227f829681eb9212c27bb290f1e0a21b3266929561df720452617291e1d8d20e8258a28901c37208e2508283a1ced1f2c257327b81b721fd6241527411b331f84248526031bac1e1c24e525801a121e77237025be19b71df32203253f19411d9722ae24d218201d4e2260248f18d31cf22115242818a91c952194230318371c2a21f3220517ba1bbf2050223816351b76200122cd15d71a3f2094211e15d81a26205e211f15f21a2c2043210015e71a262085215c155e1af11f90214e1500006017be1a000077231e2816292a20fa25542a082c1b25b5269d2a2a2c1b269f27742a3c2c8226a427432b3c2c3426de28f52a9f2c1427cb2d802aa82c0c2c7832912b012d56305434d32b1a2ded31b034122c432d6b320535542ca02d28333135642c062e673321356b2c152e50333235612ce52d68333735852ce32d2433f1343f2cb52d5932ad322d2ccf2dd32ff42cf32aa62d3f29f528192ba02dd4249127252b512d282329289a2acb2e0d247427a42a6431ae23ed26f42a1e3455239926a52a40355c233b253d2ac235fb21a224d729f8354c21e424eb2901369821f224db292d36842198268d29ff355b232c243f29d03489203323a0282830d31f53222928852ce01e3021b327d22a7e1d3e22c1275b2a6f1ec621a427172ac91d1d228127bb29f41d0222fe261c29da1db5217426df288f1d1921f7258528f71c9d2094252c285d1c21202d25b327d01bb81fea243a274d1bf91e8724bb26981a7e1e39242f26f519e31dd623ab256719b31d7523402512197f1d1c23e824bc184e1db722a8249118141d602280246018cf1c1b225f240118801cbd215d247f17311c5f212324bf16751c1821fe22ec167c1ccb2050227516a91c7c2008227316201d6b208c218316561c1f2074213e16b61a9b1f21214314000091192a1c00006a222d276b28b21fd225c329592b23255426f129e72b68252d27b22a492ced25cb27312bd22c70263128ac2bd52c91260429052ce32c6f27ad2ecc2b0e2ddb2c5633fe2b592d7031d1343e2c502d47331e35752c2b2e02345f358d2c232e35346e35432caa2d41346835252c452d29346f35bf2b082de733ce340d2cef2db732fa30ab2bbb2d412e1b29922b362db225bb27052b972dc0238528922a482d4624a228e02a7c2d62241726622a042fef211e282a2aee313e24ea25112b02356e22b9256e2ad8358b22de24202a0d369121012697292436b2226426c7296f36f222be231f294836192086233f285f34c11f8a229427452e8e1e3e241e282c2b41205c235828dc2a601fb222f127192ab61e0122ab27eb29d91de6217c27c129ea1d7c2108275829581d1b216926b928f91cae20d6254d288f1c5a20802516283d1ceb1f2c259627b71b741fdd240827431bd91e852488267a1a5f1e42240f26071af91d0224b625a619bf1d8823702546199d1d172336252719671dc622f524ce18201d5f22bb246a18d11cee216e242618711c8221d723a617de1be7200b238e16e51a602076228c15a71a29201e225a15d41a2d20e0214d15251b20207c218c15731ab71f1321a514841a951e4c20241400002519db1b00808f23cd27c9285d1f9325c329e82bff244b264f2a382ca425ba26b42a672cd7257f27092b962c4c262028a02bf62cb2261827e92bef2ca9255129dc2b152d17283e2f5d2cb52d922ded330b2c1d2d52323635752b5b2d3b349535072c882d9c34a835682be52c9734db35c42bf32cac34aa35022c4e2d47345a34db2b352d3432b42d1b2b832d2a2b9228b22a232d3a259228b92a5e2dd7248328a52acd2d86243828bd2a152e3b24e526002bfc2de922d826512a1230dc227426982a3933a72221258d2aa43549216b251b2a5e36bd211f28d22989363f244425a829c6366d218e231d296c36c91ffd24c4287734242119224128912d1d1e9e22db27a12aa21ef1214528bb2af51de62235287f2aea1e842229286c2a881e2a22cb27c0292e1e9b21dd260c299e1d3a218426d028171dea202c26a428c91cc120e2257328a21c882084253628491c25200d25e427d71bbb1fa324f526501bff1e302430269e1a501ea823d025cb19151e54237f256919ab1dee2245250b197d1d9122fe24ba181e1d2e22ab246818f31cc82157241f18921c5521d2235b17581cfb202123fe16221cb5208b226b16091c812035220a16381c7f2032221316541c62200522fd15291c2820c421fe15481bae1f3a2173150000bb199e1b00006f21aa262f28371e4225aa296e2ba4245b265d2a1c2c8525c926b02a6e2cb325f926ff2a8c2cc225df27582bc12c2b26e627a12b212df725bb27142c1c2d9f25e0282f2c052d3a27f62e4f2c4e2d422d01344a2c5b2d633246350c2cad2d5b34e1353c2b052ddb34cf35862bef2cb734fa34682b512da833d130e82af32cbb2e742aec2abc2c9027da296e2ad02c3226eb27702a122d31243426512af32c91225726432af82ce422b2256d2a0b2d0822c2250b2abb2def21a725c4296d30d3218d25b32a0a350922c024752a91362a21f524ea29c536402175245b29083798200625e328bd3609210e250e293d34c820de226828962c7f1ed8216228db29871db9223528262a5c1eb22239284a2a551ed3222728242a741e9d229d278d29121e1e22192717299d1de321d426ee28671d87218026cc28121d24212e26a128b81c8a20c0256b284b1c20205125fd27ce1b5e1fd024fa26f81a8e1e5b242e26331a011ef923bd25ae19c81d6b234d254e19891df42204251419761d9822b324db18511d34226f249418361dda2128245718d71c75219e23ca177f1c1021f4223c17111cbd2078228b16db1b8d202622e115dd1b77200c22a915fa1b4120fe21f8150d1ce71fbb21eb140d1bee1e072147150000f918ab1b00002a221e276028871e4925dd29952b8424bf25122a092c12254226bb2a762c6f25f726252bbd2cda257c27882bfb2c13261028ac2b1a2d40261928da2b252df525c826182cc62cd6244828572c292d3a265d2d882c822d0d2cd8313b2b8b2c94307b34e02b4a2d05335e34202c9a2ed8328e314d2be62c1e30fc2b072bb52c5b290528c92b242df024cc26022b982df7233427b22a312d0424f926a32af22c94230927d42a1a2da6235426632a2e2db322b325102a592d09221f253f2a772d47212425d8293f324c213125ae29e7355a216626a029e036982210244a2940371220fd2167289e36d51d41253a29c733f82014238d28462bb21e2a238d28552b931e32248f284d2bb31f52244628452baf1fa4231c28e429cc1e0923f727b629421e8822c5279129cf1dff2153273d29551d6321c026c528ca1cc72036266528621c4620a42500289a1bc91f35254427251b1b1fca24a826851a9b1e61241d26101a391e0b24a9258919061e822345255b19e91df722f1241719ee1d91229d24f018ab1d22224e249018531dcd210b244918db1c7621aa23d0176f1c38213e232317101c0c210c238a165f1ba3207a22b915471b3d20c621a715b01b13205a21f815761bc41f6d212915a01cdd1f24215b150000ba1a3e1e0000a3240129682a87237325f829b22be3248225062ad32bb424ec258c2a4d2cf9246626e12a842c49250827382bbb2c82254027652bbf2c602587276b2bce2c5e25e726ec2bda2cd3240127012cd82ce5248e26242b042d9524502a522b432d8028662d592b222dda2b752dcf2a222def2b012b772ac02ce5280928432bcf2c4c257b26c02ac72cf62302286a2ad32cb224e726a92ace2cb32378268d2ada2c08232d26542ab42c8a22de251c2a882c3622e325c229412c1122c1253729192cee212525a329492e28210524d0294c3407200f245829c136e81f3526c529d137df21f323a629eb364b1fca2505294832262148231e28e42a7a1e03223028ff29591d4d238e28962a7e1e53235328512a841e87223a28fc29ce1d2d22dc278c297e1dcc2152274329281da8210b272229081d30218c26e8289d1ce7201c268928801c71208c251f28131c03201a25ac275d1b841fb2241127e61a2c1f5a243b26611aac1e0624a525ef196a1e6423402586194b1ecc22d4243e19161e4d2283241219891dcf2128247418411d8221df233a18e11c33214523da176c1cfa20d9221e17da1bb12060225116151b6720eb218015031b2f20a72172151a1b0e2067215015191bac1f61211c15741a6d1f3d211a1400009e18cf1c00008424b028e02934233c25702a262c79247325002afa2b8024af258e2a3f2cc6242d26082b8b2c1a25d726692bd32c5c25fb26752bec2cfa240627682bea2cb624e026902bf92c83240527bc2bff2c9c244a27742b042de324f7262a2bcd2cac2481282a2bd32c0a268228662aa62c0c267227ce2aeb2ce324ed263d2beb2c4124c326862acd2cbb2337277a2ad12cd8231527802aaf2c4c23cb265c2a902ccf2262260d2a632c66224c26102a7a2c5022d925122a812cdd219a25df294a2c9d21d725a6293e2db021da24d728132f9720bb23f2285135181fc42165297c364a1d7321c428c935d91ccd2193271b30291d07230828332b401e6d224528792ab71db1227b28892ac31db0224728892ac21df7223d283d2aff1d65220a28d929821d1522ae278c29691de32152274c293c1d6821e1260329cf1cff205a26b728961c8d20cc2549282d1c1d205025cc278d1ba31fe6244627021b011f7724a2266d1a801e14241426c8192f1e84239a258019d41de7221e250519c31d6822b924cd18671ddc21442459185b1d7621da232918461d31213d231818171ded20d9229e17bf1cb22081221a17301c612028224416b71b3020fb218e15831b0920cd219f15ce1ab41fbb211715a71a5d1f44213a140000221a3b1d00003224ae28782a6723cc244929cd2a1924f8246a29f02a1b2460255c2a1c2c4a240f262c2ba32ca92454268c2bf02cb1247c26952b002d9f249026682bdb2c67249b26472bbd2c2624b9264f2bbc2c21247226332bbc2ceb23c326f52aa02c3f246c27dd2ac22caa242f28d22ae12c05254927862a982c5f24c426832a862ced231027972aac2c0a2464264d2a872c21232d263f2a722cb72210262a2a6c2c6b22e225072a682c1022b125f529762cb4216625ef297f2c42216a25c9297a2c1f21a7258129592c59214f240329802c13204e2471286730122096202629e234561cba23c1289634171f8a210d28fa2ced1cc8222528ee2aa61d99222d285d2a1f1d7d238828992a641d3e237428b92a371d4e237b28b02a421d3a236928732a681de1223d28192a891d7922e3279129641dce211e2708292a1d372183269928c91c9e20dc2532285e1c142034258d27f21b781fbc24df26111bf71e4d243726971a7e1eef23a925f5193c1e412322258c19ec1da922ad241a19b91d2b225324c418901dd2210924a218591d6e2181234e18001d27210623c4179d1ce02090222a17761cb2204d22ad16701c7e2006226416511c5420c82137164c1c38208d21b415761bc01f8a212915d01a671f6721b614000036178f190000f5237228a029052353243329be2a442333257529082b3824dc243b2a3b2c7a231a269a2b422d9c24c6261e2c8e2da324e326132c682d5424e526f82b3f2d0a24ac26a72b132dd1239226512be52cb3239026262bc32ce0238526d12aa52c01244526b72a982cb3231f26ad2a8c2cb1236a268f2a8a2ce1232e265c2a8a2c6a23b9266c2a882cb0238326552a912c14235b264a2a772cbb224e26292a702c7f229c26162a542cd0224526fb29842c4922f025e429722cf421c425f929772c9e21e225092a642cbb215424d5288b2c372052216a27552e2f1d44201b28ed31471cd0211528d731a91dec1f79275c2c0c1b502198270d2b201c0d234a28e12a141d5923a528bc2ae01c40239528b92a9b1c17239528ad2ae81cd42286288c2a1c1d9a228228682a201d3c224628272a041da7219c279729b51c15215d26c228851c60207c250a28c81b052005252827261b951fa1249826f51a2b1f2e240c26941a5a1e78237125a619db1dc52200253519991d5a22b424d2185c1d13226e249e18431ddc21352462180b1d9b21fd233318aa1c4e215c238217591c0421d522ff16171cbc207c229516df1b8f2035221d16951b5a20df21e3156c1b2120a2218e15ee1ae11f6d212f15d11a591fc720e81400007a14e2180000d323d32718295a226224bf28052ade226524a628f0290323a024d829802b3f234226d62b102da3242627b82c532e3024bf27bb2c302e5423cf26312c612d71222626592bda2c56223626bf2a812c1a23f7256e2a512c5423d725492a312c5623e025282a222c8c23c725ff29092c4223d325ff290a2c51231726052a152c7b230d26542a542c4323e2256f2a702c0f23a825472a542c78226d25ec29372c0d225125d629352ca1212525c1293c2c72210d25b9293a2c35210b25ba29332c3221f2248329222c192107256c29082c5321b423ae28232cf01fa11f7c27d42ba61b46207027d92b861caa204427712b261c57219427722a631bcb2247288c2a7b1be6238b28672aea1a9a23a628aa2aa71a8b230329f52a741b982320291b2b9c1c42230529fa2a3a1d27227e285b2a201d4a21b12772298e1ce9208326aa28811c9020a625fe27511c2020b624ae26ce1b4f1f2324d525b51a901eac234e25061a131efe22eb2493199e1d75228e24ff18521d1622412495182b1dc32102247318d41c652197230618a61c21214f237b17711ce72017232617431cb020c9229e16ca1b6820a0220c16841b40202e22a0151b1b0920c3211e15421bc31f86210515b61a541f89217414421a0f1f2f2127140000a1184c19000012217525d5263b1fc3231d28782915228d233b285b29732240248828d32924236425112b782c1224a728a12e3030aa24a8288b2e2a30eb215a264b2c752d9320bb25452a272cbe217b25c229ab2bbb225a2579295e2b93229f255b29162b6e229f253b29ee2ae722a0253f290b2b112398258029552b58234226d029ef2b1c24c8260b2a262cf223cd26332a2a2c6523bc26392a442cc0224126512a802c18226e26682a842ce6210d266f2ab42c8d210226672a8b2c0622d625422a5e2c82225725e2291b2c1b227d244a298a2b6321c8238e28ba2aab20b1230d28062a2e209b23c627b429a01f9723d727ba29e51db123e627d129051ccd230828e429631abe2343281b2a7719de23fa28f62a8e197024eb290e2c441a9924222a362c881b8724ed29072c3e1d94231329dd2a501ecd21f42765297d1dee20fd252b28cd1c5c20dc24b6263f1ca11f4c2406266e1be31ef823e725841a5f1e5c23b025071a381eee224a25b5199d1d4c229e24fe18b11df4211a24e7187d1d8021912392182c1d31211e232918ee1cf220b122ef17851ca22052220517291c672005227616851b2d20da21d715fb1aed1f9a213915d41aa81f7921eb14db1a6c1f3321f0142c1a1c1f47217214f219ed1ec5204814471ad120fe21618aa02004256c26f11d35228f2604282021da227d263b28a921b323de26572824229020b6260c28681fb82a8331aa32a422812a3931c93251242c217728802a3a1fec2400283f2ae122c8246628042af42291244f28cb29c522cf2472281c2afe22df249028392acf225025bd28752a46233f25ec28c02a2f2347252529ed2a6023a125d529fc2b8d239f27462a502c5c246f26262bc12c0b243526512b182da023a126d12b692d12242d260d2ca12def234a26eb2b7d2d0a24be25432bfb2cb4239f246129cd2b3322b023c127bf299d20c5226226dc285c1f8a226d26cb28bd1e64225a268728af1d9c228626b428521d7a229f26b428aa1ca22147268c287a1b4621d026f2288219e7232429cb2ae914e824722be22ca68e83256e2c0e2eea1942250c2c862d921f4c243f29242b671f6b213327ee28471dea1f0f258a27ef1bb31fa124d226801bfc1e25241426ce1a5b1e5d234325d519571e9e229524d119441e1a223c2465192a1edb212a244f19e51d93210724e9186a1d592101245b181c1dfb206723ef17c61ca320ab226a17881c4d202b22c8166a1c1d20f7215b16391cfc1fc2211516091cc61fb2219515ab1ba91f802117153c1b611f42210115511ada1ef2203114cb194a1e6120021400002c186c1900802f1f9523d024021c26214f250b27321feb21da2583272320e8218825e826961f811e2e221624ce1b43152f1e14217612332151251427f91e67241528802907227e24222892294722a82423288c296022ab241128792964229e2406286829312296241328632905228524092856298d216f241028592952213324c3274229cd20d7239c275629272084234b272c29af1e7f23ef262629681bd5223726b9282c06dd216e25362878983221b2248b278c988a206c240227a4918d202e247f26b613d3202a2473265019622186241527551ca921b1244427321db0219a241d270f1d90217524fd26f31cba2194241c27c51c80218c240727951c8b21972428279e1c2c21f3235a26741cef1ccf226826f1174723f329d72b8514082a9430dd31d096cc26a32d342f9f224c1c9b2418286e18b71f4523f425841b0e207d235025ac1bc21ea1220025031aad1e6b22a124c0193f1e21226c243419121edc214a240e19a71d912116248c18481d4f21e6234018151d0a21682317189f1cbd20ad222d173a1c522047225316f41b1e202922f315611bfe1ff4218515121bdc1fc4214a15e91aaf1f7f212c15cc1a8d1f3d21e514c31a501f0a21de14df1a241fd820f2145f1ad31eae206814371a811e55207a140000db15ac180080992176253827d31f6121cc25602810203e2145259c27541f9b203a246a25661d9b1d3b21f122691ae11d78236d25311c32229d2676288120cd236a27fa2874212f24af2726299c214b24ca273b29a3214224d1274e29b6211924be2752297f210f24bd274d2954219b2383272d29c720ab2364270f299a20e223e326af282c204c239625e927491e90200223d225d41aff1ee0204f253c19d51e50220325e219dd1fb1221b25371b4f1f6223b125b51a581f3b237f25bd1add1e0123a425e919dd1ef6228325e919691f4523f425621ad21f99230926841aa020d3231c26b41b19211b2456261a1c3d21252473265d1cf8202c248d26241cc8202d24ad26f71b99200d249a26661bfc202d246f26751bbe207b236325d41af414891c131f0e0cc5115f18ab1c48021e1ce71ec6210015bb1ee22125246b19f11e262264249619611ff0215a24bb19e81eae210e245d19381e5e215523d4188b1d132156234e18f71cf5202523fe17ad1cd620f22286178c1cb820d1225117521c85207522f416101c512018224f16e61b1f20cd2122167c1bcd1f87219a15611b721f442185150f1b051f03211515ff1adb1ece20d714fd1ab31ea520a314051b8b1e7220a814661a571e64203f14db19ea1def1fc513000077174d190000c2215725ae26b91fea21de259e27c41fb4207b24c925e91d0f20d4228324191d451e77226724341c6520a6241226641e59225e2638289d205c231327c9285a216d233d27f22830216123472709290d217d2343270e29ea20ed2353272429fb202a2476274b291d211d245a274329b420a623dd26e4280d204023e9253b28101f43220f25d027bf1d5622d3246427751d1223d5246627171e1e2307258c27551e73223925b3271a1edf213a25d627b81d70211c25bb274c1d1421f3248b27f21cef20c2245b27ab1cd5208e241427921cb4206524ce26511c972044248826361c7c2020244b261d1c582001242626ba1b2320e32311265c1bef1fc123ff250e1bd71fb723f325321b7a1f9723ff25dc1a381f7d23b625a01ad61d4b2276248519ef1a1b201522f316ba193a1fbe219c149d1b09208a229f146d1c7620d023e015c01cb220dd231c17f71cc5206f23b617e71cc0205f239d170e1db32045231118fd1c9920f722bf17df1c6720c5229117b31c4b20802208178d1c26203a22cf164a1c0a2003222d16011ce91fe321c415a51bbd1fb62181155a1b821f81214b15cb1a1d1f4221e4147b1aec1e06217c145b1aaa1ec0206614541a6d1e7c206114eb19291e61201814c919f51d08205f12c9249e1dfc1fa1246e2cbb274c293128d22ff42b752c122ad3302c2a2f2cad2a3831bb29532b382b1a31fb289a297b2a30342a28362a9c2cbe389128fd2a292e6739bb2ba02a4528a9383e2a192c43a5e337342a182c02a889367f2a352c89a99435f429472cbaa8bf35652c912e84a96d36453272342baab7362034c03572aae634a52f6e31bfa37f341c2ca330181e1c33242bd931a127d830bf2940323225bb2c23294533682402289a28e633a4205225a0283734a91fd3234b286d34841e8b2334288134b51e812438289f340120df233527b034391fd62237279234461e1321d4279234a81c7e211a283e34811db0233b290733301eee253a2d0233321ef1211f28a92c9d1c831e62248528b61ae41e70242e274c1bd41e042400263b1b7f1f0424cb25ba1bbf1ec323b125f41ac11e99236c25f61a041e0d233325081a721da122d1244e19cb1c4a227124ab18711c0e2225245418b61c0f2211247518781ccd21af231a18641c9321ad2307182a1c4f217b236817701bee2020236816431bbe20cf224116201b9a20a522ef15301b7e203f22fd15b51a322093219615f919ba1fe020fa14d119701fba20ae14ed19661fe1209a14bb19591fdc207314031a5d1fcf20801497191b1fbc2006149619c81e4420ba13dd1d1a1b921f551efa2be9285f2aff27f62e3b2b702ccc298c302d2b5b2c512bfd309c2afa2b042ca231662a6b2b882cbc320f291c292e2e76385e2ab52b69307639052c032e3eadf438752cb32dbcb1be37182c862db3b0d336fe2be32ce6af7e363d2d492ec8ae2536ff2de22fc4aefa3585301332e5acc8354b314e33dbaa443550304e320ea94634f42dc831c222b5326b2c14327e29a030a72b2e330226382d622a1a34aa1fcb28132a7f343a1e452670298c34c81cab275929ed346a1dd825d828df346d1fc5241e29b7340d21c5230c2989348d20182345298334c2209523ea29d5347120be24d72aa6344a218825fb2aa733a71fa424122ba2315f1d54249729ce2e28180b219a271b2b681a5b20e525bc28411b0d2079256328fa1a41203025d027cf1bb31fe524d926481b481f73242926e31a2c1e0424c425d619bd1d642334256e19401dc022a124f7181f1d9c227224d8184a1d65224e24da181e1d0b220324b2188d1ca42190230c18551c542123237617301c1521d7223617011cee209022ac16cf1bd92054228116ab1bba20252263162e1b8820dc21c715a91a52208b215c15ed190b202621c514d419c41f01218614c219891fdf207914ec194b1fc0206e140d19b31eb6208f13b919fa1dae1ff3121f1c2c1fc220731cf429b329192b7b277a2d3a2ad72b5629ea2f152ad32b432b2231472b1c2c6c2cda31a129b82ae02ccc33b42855299d2d8d376b290c2c652aac38512c2d2d69b18c38c72c2d2d8cb27437772cf02dbcb07936b52ca92daaadef35582d842eb2a9dd35e92de32ff7a8f635c32eb030beabd135322f3031e6aa1535d52e27312aa55734fb2dd9305a272633662dc13173293f30402c7f32ea27892c332b4e33612198288b2a5e34cd206e26f92992345b211926572ad93498211426262a0035ec2175250e2a4535c7211b252d2a2e35d7212f25e12a2b35ed2125272d2af0345921fa24b22ac43421210b24e52a9f33bc1ea522462a2031f91c19222529292e0c1c36214d28f32bcc1bad205527022a861bb420e2263e292f1cd3200f2680284a1c7b206a251628f81b0a20d82440276a1bd11e5e244026731a401e0a249c25e919db1d96235a258a19d11d5a2322258019bc1d1123e1244319781da72284240519fd1c27223f247018c21cd021e42319184f1c67214f236c17191c0c21d322d416d01bd2207a228216ad1bad2030222d16381b8b20e721cf15e71a62209c218e15961a3d2056214d15721a09202f210115391ab41f3a21d514451a951f202184147319301f3f2114141c1afb1ecb206614a90cb51c981d190d1a28b2293e2b1426c12b802af02b5328172f292b4d2c1b2bcb30712ba42c432c9c31c32bd12cac2c2f32ce2bc42ccd2ccf32da2bc12c852c0e340d2cbb2c8e2bab345b2c622d102ac934d92ca22e22294a35c42c592e9226d134f52ccf2e12270735942d252f6227d834252e21301a28b734312e7e30202a6534b52d3430b32a1334842d8830222bdd325e2d6231c82aad2f7f2ce4310228f72bda2b4a33df230729a32b3834ac226728242b83341623de27d32aea3455229426832aef34392217273b2bec34e8233226002b0d35e9222126dd2ac434aa22a525db2ad13423225e24a12a653480200824622a1033661f8c231f2a1231801ea923c829492e991ed9216a28642c331d57218b27fd2ac01c4721d5267029fe1c062132268328c01c7220d3254828341c48209b251828db1b04203e2559275f1b9e1f9c246126fd1ad41e2424e925441a1b1eda238f259a19931d462306251d19fc1cb02286249318761c45225424ef17621c07222624cc174d1cc421f22368172e1c822175233317001c3b21f722aa16e41b062194229316b21be1204a223116521bbd200a22e415f41ab220f0216615e61a9c20d7212915eb1a682093212d15211b4c203d2122154c1a0a2028215b14411ab21f202126149d16301c171fad16bb230c279528f720fc28762ada2baf26482dd12a3d2c4b294b30762b952ca32b9131672bd92ccb2c7132c32bde2c2f2de032e72bf22cf32c7133272c2c2df02c15344d2c572df52c5e348e2cc32d0e2d9034a12c2f2ec42ca234da2c8d2e942ccb341a2dd62e322c8c34682dd42ff62b77347d2de22fd12b8534382d5f2f362c2a34162d2c301d2cce32322d54301c2be12e2f2ca93030277f2b012cce31d523da292f2b91336f237428df2a4c346b23fe26f02abf349d22a327ad2a023570237427ba2afe34e4233f26642ada34ca227425a02acc34ee214b25732abb349b21c424322a5f34e9207022c4290633451e5d227f295430d71d9722ed289b2ddc1d1a216c28742b8a1c05211d28852abf1c46214427622a231dfe20a8266529dd1cad203126c3288e1c4d20ab252a28311cbc1f0e255827891b6d1fab24ae26061be31e4b242126841a9b1e1824c025101a4e1ea92364259c19071e2a23ec245c198f1db622a024c918511d652253246e18271d24221e244b18af1cc121be238a17331c6f216923c216d71b2f2108234f16881bf120be22d9151d1baa206d228615e21a92200b225815e51a57208b2129159d1a11205721f314bd1afe1f31210b15281aac1f4f214214341a721f1221a4140000be1d411f0000f92270270d2916209927742adc2bd925d52a2a2b7a2c3228382e442ba32c3c2ad030232bd32c6b2c4732c22bfc2c3b2d4333262c352da32deb335d2c712ded2d2334852cb52df52d6134ae2c082e0f2e7334d12c442ee82d8c34fe2cb22e092ec134152dba2e0a2eb4341a2d482fb62d9634092d7f2f912d7b34cd2c392ff22d1934292da82f702d4932142d2930592c3b2e312c54302228de29962b17310f24e0295e2bb7326524e427002bcb335a229c26572b8234b121ea27a72ab7344323b927d82af33486238026a52afa34b32260257c2ad134b121b925642abd34e6213925eb2957343c217423c829e032431f0e2380296130df1e47221429322d1d1e39216a28452b3c1d8f213228bb2a921d65218b27082a681d1221ae268f29151d7820382613297b1c6620d8258728691c112062250428ec1b811fef2451274f1b331f9a24fa26cf1ad31e5b249726741a711e0b24f125e9191d1ea42337257019bc1d3323ec241a19b91de722a824ee18b81db7227924c318541d532234247018e71cf621ed23e417b01c972153238b173a1c2521c3229016721bc5204022c815c01a6b20ef213e156f1a2520b421d014711a0d209121d214981ae41f7a21bf143c1ab61f842150147a1a7a1f20214c1400004a18241d0000d221572651287e1e2827992a0c2cb525a728d52a442c3d26e42b922ba12c9f28932f942bc82cce2bb831b62bee2c692d1d333d2c4d2d542edf334e2c682dc72e0f34682c792dc32e6034be2c092e4a2fa734e62c712e3a2fbe34d52c7d2e5d2faf34c42c992e022fb534dd2cbb2e4f2f9734b32ca32f212f8e34be2c412f552f2734e02c502f732e0832a52c0730582c3b2de72bec2fa526d92a012cce3028243b2a562b7a319123eb28ac2a4a33ce22b827d22b533436227728292b0235f1233028102b1735af238726d22a34355c229725912afe34c3212e253b2ae2347c217524bf2955349820a2238529aa32a71f73247229472f76205923cc28492c931f52213428042b7c1d15224628cb2a451edf210a28742ae31d602129278a293c1da6203226a028871c6020bf251d28431c1e206e25ea27ca1be91f142593277b1b621fbc240227fc1adc1e712447264b1a201e1524bb259f19c41d9623462521195a1d1123f4249c18411dab22a62486182a1d622273244d181f1d18222c244418d11cd821f623c017b11c9c218e238d17721c55212f23e7166a1c2021c4229b16401cda205e225c16ee1b8d200322b615661b6820ec215415271b3b20bd2126157b1af91f52217c14ac1aeb1e66205913000086173d1c00006c22ca268f28701e7c266a2a0b2c72250728122b7a2cbe25e928822bef2c4f26bf2c712bf72c4b299c30c72b212d7d2c0e33012c242d792e25344b2c672d5f2f6d346f2cc82ddf2fa434942cf32d2130cd34cc2c5d2e4530f334f22c7f2e8b30eb34e32c902e8330d934b82c902e7330d434932cba2e6e30b834a12c952e32303434bb2cf92e002f6231782cd52e2e2c5e2c082c502f8926b3292b2ccb2f6d24c328242b9930ef2347274c2bc1327922a727cd2b3d340623fb26552be7349a225b26672b3b355f224726f42a58357822aa25c62a2e35ff215426b02a2935b322db24bd29a834242158239e296f32c71f0f235029232e461f0522ae28ac2b341e1c22ab28a42b201e65229f288e2b3b1ea6220228b12a7a1e35224727d329df1d3c21a0262e29f31cc9204b26c528871c2d20ab253028e61b08203525b027661b9f1ffc245527fe1a711fbf24f8269e1a211f76246c26571a941e2024e725aa19f81d902394252419b61d03232b25c218661d8e22d6245818321d292279242e18f51ce3212324b317c81ca321bd2328176f1c3e212a23a216081cda20b0220816b11ba5207222c1157a1b7f2032226215591b672002224a15681b5820a9212015771a1f209f214a14921ae31f56212d140000000081120080de221f27d528771fd925112a5c2bd4241a275f2b7b2cdd25ed276d2bc52c6f260e29172cfe2c5a27272d782b192de429d1316b2b2f2dd52dfe330e2c642dc92f7f345e2c652d6130cb34aa2cf82dab30f834c52c2f2ed7301e35dd2c532e21311335bf2c6e2e1631fd34a82c5b2e2431f434602c6b2e1b31f634952c0f2ef9304334722cfc2d08302830252c7a2e652b202c0b2cad2e1b27c1281c2cc52eeb2300284b2bfd2e1e238027be2af930e2228026ee2ac5322622c925c12a653479211426b42afc34c0218826362b6f352e22d726852a65357822e225352a713590211b251c2aa234f9207f24f929cc316120782323297f2d7c1fa6225228692aaa1ed0210228b32ad41da7222b286a2a7b1e4522ca27102a1b1ed7214e27df29b01d2721b5267b29e01c242152261429b81cc6200c26a028611c6e20be252628111c19205425a827851bdd1f00254727371b7f1f9c24af26ab1a041f362415263d1a6d1eb8239e2589190a1e382336253319851dd322df2499184d1d7f228b244418021d202239240818ce1cb821d22376176d1c3d211f23a016241cde2080223216941b962042227515421b6e20e4210515431b5720992106154f1b51206821d914c71a2f209321b014b41a1a20be21d4140000000063170080d523e0271a29a11f1826652a372c3425c626cc2a392ce22502283a2ba12c9f26f827b92bfb2c052653295c2b3d2dd726952e4d2b422d572b2233022c7d2d5a2fad34622cd52df330ef346e2c0d2e5d312735ac2c4d2ebf314035bc2c7e2e01323835b32c702e1d324535ad2c222e2d323735a12caa2ef7314335982c062eb8312f346a2c532e13308c2e362bce2dd3295f29762b212e7924df28d62ba32d0f247128742b2e2e66238e28e32a342f0d24d627912a5031a223b0257d2a9d33dd21b325ca2ae53432226b25912a9335e4216d250f2ac535e621b7240a2ac035fe20eb24e629ac3412213d249b29483140206e232629a82c721f1922b1282f2c1d1e13226e28f22aeb1d10220828922ae81de321df275b2a911d3d22a027cc29b91df2210e273429751dbf219d260c29461d3c212726c728ce1cc020c9255a283a1c43204e25d927951bdb1ff4244a27fd1a161f9724cd261a1a901e4a244626a719071efe23ce250519bf1d94235b25a0187f1d3123fe246c183f1dbf22b12413180a1d61228724d317fa1c262261247317ba1cb6216c241317591c622129244316281d3b21ec222217741c15210c23e915831cad20d222bc15f71c5520df2178156e1c1e206c21a115191b851f20214f1400000000ae1500803422e7269528be1e05264b2ad52b65259e264c2a512c2f25cb27482ba02ce3253928b72b242d4226d9282c2c2f2dc6262a2a432c7c2dbf272030ea2b7f2db82c5234f72ba92df13043354f2cc22d2a3273358d2c9c2e8a329f35a32c832ee7328a357a2c152ef6329e35702ca12d373398356d2c5a2d07335235372c0a2e623251335d2c542e14305f2b672b942d6327db28572b972d75249e281c2b6a2d1b242828922b192e29238127052bdd2dad22a828792a132f67242c26562aee31302260258d2a7b34b121ff25e22aa23559227125b12a01369c217624b629b23579203324f02828341720302525293730e820462392283f2ce11ee022e428b02b4f1eb323b2284a2b111f21233c28762a8b1e2e22e927252a7f1def217427c329471d8021f4264729e41c3c218426cc28a81cde200a267128541c8d20aa252d280c1c26204e25c527611bab1ff9243127d21a101f9e24a626481a971e5a242b26dc191b1e1424cf256e19dc1db0238c250c19931d36235225cd185a1dde220f257518061d7222d1240b18bd1cf2218424a017651c6f21fb23d316921bcd20f922e115651b692051228815cd1a28205422e614ea1a35201a22fa14451b1f2089210715c71ae81f1c21b014bf1af31e9120181400000000af15008032239e270129ce1e31265f2a0e2c0725d026d92a7f2ca0255427452bcd2cf3250a28732bfa2c7226a428242c352d2427a027522c332d7025dc2afb2b4b2d68282131de2b912d722eca34d62b372d27328a35f02b912d6e33ec35292cbe2d0e340936372c642d22342736622c782d3634f635622c402dff33aa353e2c852d1e336c31162cb62d332e4329082b782d92253a28312b692d3d243628252bb72d1a2447270d2b2d2ee2229a27672b5e2dfa220a28e22adb2d2f23cd273a2aae2f2923a925982adb325b219325c62aff346e21de25692ae235b7218324e129b435652074246e291d34562029255229922f072163236428622a321f99233628f229301fee2257285a2a8e1eee226f285b2a8e1e70223828522a171e3222c627b729af1d8121e2261b290d1d1d218f26da28b11cf0204826b328881ccf20f6257b28471ca520a4254228221c54203c250128b31b0520c8243227261b401f512470263e1a971ed523fc257d19541e75239d254519f91d14235c25ce18b31db02212259618371d5422be243218ea1cef216b24a217941c82210c24da165b1c302167238516361cd720d82210162d1ca7208422c715361c9c206c22d315381c822036229915cd1b3720fe212d15371bee1f9121951400000000aa14008097215a263428c31d9625392a062cda24a226af2a522c7a254627002ba32cb3259e27662bd62cf8253428fd2b322d59260b28302c852da725db28662c812d60261d2c442c2d2d67290c32292c072d24307b35112cc82df8330036762c592e88342b36572c1c2ebf343436432c4d2daf341936e12b4b2d593417352c2c882daf320d2e712b452d942ae328fd2a1c2dc3246a28db2a492d2d242e27ce2a382dfe226026aa2a452d36229526bc2a332d69224727622af32ce222e6241e2a522dc6202426182a7f30282244256e2ac5334721cd25392a9435a7219b24332abd355b20cc24f929833367202426ff288e2d76216c22d1279b2a881da5213428df2a051dfa2368283e2a181fef2247288e2a2b1ec1222928472ad11db822da27bb29c91d582255274c29771de021da260b290f1d8c219e26ed28c71c35215026be287c1c9c20ef259228f01b432080252628951b8b1ff7244727b51abe1e7c246a26ff19201e1824e3254619f71d92236d252319bf1d0f230e25c918c31db522b724a318821d46226b244718411ddf212024dd17d11c7621ad2335176c1c0e2105239e16f31bc1209222b915b71b92203f225615081c8420362294153b1c5b2056229d15971b14203d22d214001ce91e1c21fc1500000000af14008013228d264c28eb1d3725112aaf2b74242126872a412c2625df261c2bb92c9425be27a12b012df5251728fd2b392d10267728082c552d3e267d28552c862d05262a28892c1b2d7825472b302ca02de1287b326e2cec2d9f3096358f2b3d2d24348d36e52b482d0a358436472c7f2d03352436662c862d7734fe327d2cb72d9730a229752b032d9a264027012b162de2233928032b212d5a249c27f52a1a2da1231a27042b302deb223a269c2a142d1122fb25392a2d2dd3211425fe2a292df220af26c329d82d5222842667292731fb213e25592a5b34cf20e124722ad2347a202724cc29ec319f1fa8247c29d62c24200e23ae284a2a461ea123d0287b2b921e6a24c8284f2b9a1fe3236c28eb2a921efb2235281b2ad01dec221828dc29c41d8c22e427ab29741d292273275b29221d8921d826e8289c1cf1205f2690281e1c7720d9252f28701b0b2062259127bc1a8a1ffa24f126481af11e90245a26c819861e3724e6256f194d1ed0237c251219201e3d232825c218091ec422cd2484189f1d4a22782435183d1dee2128248b17c21c8d21cd231f17601c462142238c16061c1521fb220516661baf206f225415531b4b20e1214615b31b1e206c215315871bc31f6921c814781ccf1f2b21ec1472108f1d6a20d80f202470288329592283254b2aae2ba12400265e2a292cf5244826fc2a922c0325d826542bce2c5d258027a92b0b2d8f25dc27e22b1d2d9a25ee27f02b482d6e253f27482c162ddc248c276b2c202d102507298c2b522de2261931a52c962d452fe434392cae2d40339735362cf02d2534f533042c232d90310f2dfa2ad62ca42a8e252c2be12c82226c27cc2a142d09242a27ff2af82c62230e27ca2af02c1223bd26802aca2c90229d26612acd2c71226926432aae2c1022b725232aa42c68217b24bc29de2c1d205d24e728782dc31f61246229ae30ca1f5d257b2968329e20c421cc291730f71c4324d828752b191fb7239428082a6d1e6c22b628a12a591da623a128c92a281e1b238228772ab81dc1224e280c2a6f1d5e22fa27ab294e1d0a2271277029dc1ce2212a274429bc1c7321ad2601298a1c36214826b128571ca420bd254728bb1b34204c25e827001bcd1fdd244b277f1a5b1f86248126201acd1e3224e72579199e1ec523762553197e1e1e2300250a19511e8c22a224ba18d81d0b2246245f18771dab21ff231718241d5c216b2367179b1c1221fd22a216161cca209522e215611b78201f2250156d1b4320cc212315951b2a2085210815541bd21f8b21dd14661a771fdf2111140200321c931e020072232a283929d5218e25c22a3d2c82240326a92a5f2ccc2420261a2b932ce324ae267e2be32c3c252827b72b152d68254c27dd2b312dca248127de2b3d2d9c243e27012c4d2d7324d527092c2a2dcf240828e82bf92c11250928882bf52c2f25552ce92adc2cb029332e9e2b0a2d282c2b2cfb29732c5b29ba28762bcf2cac250f27462a302dac230828cf2a252d28249527d42af82c2c235227a82ae52ced22c7265c2ab42c38226e26402a962ce621e525342a802c69217f25dd295f2c0b21eb259229882c43219425ec29582cf620cb26bf299d2eda2133215c277d2e7a1c1a20f3268a2d101bfa2154281f2bfa1c3b224a28902a5e1d2a23aa28882af81d13238328722ab11dd6225b286f2a801d91223b28392a491d58221d28012a1b1d1f22e827b529ed1cea2179275f29c21c812105271229961c2b218f26ca284e1cc1200e267228eb1b392089251228461baf1f172595279e1a111fb124f426e319a21e46244e2686195a1eb923c2251c19251e23234c25c518391eab22e524d518f21d332279247318b71db5211b241d187a1d60218823e317f91cfd20e622e116821cb52081223d16df1b6120242272154d1b3020ec210d15681b1c20cc21ea14c81add1fc3218014971a761f3a210014a71611203d21d614d7245e29ee2a68242d251b2ab72b6c241c250e2ab72b2624d425ea2a632c7c246826962be02ca824ae26f52b292dab24b526db2b2b2d7f24d426a22b0b2d4a24db26862bea2c1d241527a32be52c40246b268a2bd62ce223b7268a2be42c2024fc27972bde2ce7248628b42a632d8e2538276b2a882c6f24fc257c2ab72c03236f27892ac42c25245d26952aa82ceb2225266a2a922c55220726512a852c0b22e4253a2a872ce821b8250e2a8e2c92217c25f929882c08212725c529842cba2049259929592cda20b8249729592c5520bc234d29032de11ee61ecb26bb2d231a80212f26c42cbd1cad203928172bca1bfc212728fc2aa61c52234d28c12a101db8237f28af2a1f1d62237428b52ab11c4c2376289f2ad71c1b2364286f2aea1cdc224228222af01c93220c28ab29eb1cee216b273c29c61c3f21c026d728851ca8200d265f28241c15206025d2277e1b811fe7242327ad1a0b1f78247126111abc1e1e24de25cd197f1e922355256919291ee322db24f518e11d4c2274249118b01de4211d244118811d8121a3231e18231d2b2118236617bf1cde208f22d616831ca62038223e166f1c7220f721e2155b1c4f20c221c815661c392093211815f21bde1f8e210c15291b5a1f3821251400001017761900004c24d128232a5723b5249b29172bc6233325ec29a82bdb238725182bf62c0524e026222cad2db5243e27492cbb2d8d245227332c872d15243727092c522d0624e3269e2b182dae23c926632bf42cc223fe26452bcc2ccc235f27eb2a9d2c3724de26be2a9f2c06246626ad2a832cae238226d52a8d2ccf238526242bc12c75230127782a882c6a23d826762aa12cdc228d26672a8e2c62228226592a802c28228426442a7a2c2a2262261e2a942c0a222626172a922cd121d5251d2a962c5a21ae250b2a5c2c0d211025ab29542c81203a22a4286b2c8a1d971d2f273a2d2119ed20cb26e32c851cbd200e28872b151c98214028252b801c19236e28fb2a1c1d4d238928bf2aa31c39238e28b02af41b0d239028a82a481cd7228228842a8a1cc8228128632ab11c94226228432a8d1c28221528f8299b1c732102273029631c8920dc2542288e1b1d202b254e27da1a5a1fb924a126551afd1e4d243426d2194e1ec923a1254019ca1dfa221f25a918721d7322c6246218431d23227e241618301de2213f240718011d9a210a24c517961c4e216223dd16471cec20b62267160b1cb3205d220d16f01b85201922b715b11b5920cc2152157e1b2a208a21f914fa1aef1f7021d314b71a761fe820a51400002610221900006324b1278829022274243529c72a9a22b5246d29df2afa225725012b9b2c772366278a2c042e8b24e727ec2cab2eec23d627bc2c2c2e3123a726fb2b1a2dab222c26062bac2ce2220526a02a702c3923f6258c2a6f2c522323267b2a662cb6233a26542a4d2cd3231a26332a432c7f234c26632a532c8e233d26532a542c4f23f025912a782c9f22d625a12a8c2c5822bf255c2a5f2cc221b225ec29292c8c216625b129122cf4201925b129152cae200425a929162c76200325a329182c5120dc2481290d2c2f202a258729e32b72206524ea28072cd11f2c20ba27912be41b2820b027872b0c1cc9208f27632b421c10216f274e2add1b7d222328412a1f1c5a236a283c2ada1a8a239b28902a2c1a9423ec28da2aa21a992313290f2b141b56230329082b741c8422af28a92ab11cb3212028e029441c3b21ff260e29101cbb2024266828e11b4720042543275e1ba21f3b241826931aba1ebe236025cb190e1e1323f2240b19b51d8f229f2498185a1d312251244e18341ddb2111243018e01c7e21b6239217a31c30215323f0167c1cf4200c23b6165d1cb720b32248161c1c7e208122eb15b11b4b20242252154f1b1420d321d9146b1bdc1f8b21ec14ef1a761f8e213614541a2d1f2a21051400002f1699180000d022cf2666282521c52310282d293322de238528d3296322f4248b293c2b58236d27402d8f2e75245129602fac305b23c9273f2de72ef2201c26ed2a7a2c43212d26f129012c5d228325b729a32bc522ba25a329862bdf2206269e296a2bb822462692297e2b5a23b126c129c52bd723be26622a442c24245a27b12a7c2cc9231d27ba2a8c2cba22c4268f2a5e2cd42149265e2a552cb420c525182a6a2ca81fb1252f2a6c2c3b1f0826242a792ca41e6426402a892c511e7726752a8d2c7c1f7f26a82aaf2cdc20b825852aba2c6921ae24d429692c1621e823cb28342b3020b623fb27e7294b1f0c24c2278d29d41db223bd278d293d1cb823c5279f29521ac623fb27b4297d19842377284a2ae1181f2469298d2b5a196a24fe29232cbc196c24122a212c5f1c00249c29732b4f1d8f229028252a471d9621e026c728cf1cc92071258827421cc11f83245026e51a201f1c24f425561a991eae23c725af194a1e212386256a19e21d8822eb24e618c31d1422422479188b1da621b3234e18401d4b213723db17f61c1221d32225178f1cbf20752290162d1c742023220316781b2e20de216115021bf11f9721d914de1ab21f7f21c014ed1a7e1f3c219814611a281f47213c14e119021fde2078134119202120220b0dec207525e626051f3522a52650284d214e22e6261528da20432249264428a4201127b72c422d7b236f2c37322034c22088244d2c4f2df3218c24ca2796293a22de248f280f2a87223a244228b029ca21ab247c28132a8622e4249b28412a8f227525d228712a8c22a925e328ca2af422b2255429082bd6229327df2a772c03243127262c612d69239c27492c772db2213126c22b1c2d2b1f3f26e82abb2cd21d97268a2ab62cd11beb25d92a9b2c2d1ccf253d2b052d6e1c89265f2ccc2d5a1d8a26912c242e57205a26c62b2e2dd421d123b428252bf41eb6201226c828311c1c20752530289d1acd2117267a28811c6623ad26b728e91c482283269f28581c7b211b265528461bf321d126e1288918082469296b2b778dca24fc2b862d7e0e8325652ce22dd31c7424762a4b2cea1ead225328d429f01d9a2092250e28391c2820d924e726651ba51f4a242426cd1ad01eaa236125de19a21ecb22ae248619481e2c2242240e19121ee7212924b718f71db221122477189a1d812103243118381d2021a0238417d51cc420ec22f516a81c6820532271167b1c34201522f2155b1c1620ef21c8151e1ce01fe0210015ce1b9e1f9921bd14491b4b1f4b216c14511ac01ee220f512f819801e6220931200001e17e21a00801b208124ac25ed1cc821d025b4270a20f52112268d27a71f5921d4242c26911e671ace1f98218117591efc22de24cc1b48247a2711298021c6242c28b5292222dd243e28b4293f22d6243e28b0295922df24222898294222dd2427288f291c22c724402897299921cd246728d5291521be249428342a7c205b249528652a801f1e2493286a2a771d24244728242acb1c37240828dd295b1d3924ba278929691cba231e272629411c6423b726f128bd1dca226126ac28e31c59213725b627ae18e320362421263e15a6208a23d725e013cb20e0232f264f1728214524a32618193c215524ed263e1b7a2182242827191c49215b240227e91bf0205b240e27ab1b88217e2416274b1ccc213a24a926801ce41c7f24082837166e26632de02ee69af4296e3086318c2101236829342ba01e8f1b69223526f016f91e1e238725341a131f03232725181ab71ea722cf2467193d1e3b227b24d818361ef7215424d318d11dba2121245a189c1d7b21f12332185d1d33219423b917ea1cef20fa221417681c742086225816211c2c204a22b615921b092001223d15271be81fc721f314e91acb1f8c21c814cf1aaf1f5021b614be1a721f1a21aa14d71a361fe820bb143d1af51ec520ed13471a9f1e63202a140000f716961900005a218e253827541fce21c625fa270e205d211a25c8260b1f4d204923be24cc1cc01d7f215323e61ae9203c256027961e71235f27062918212a24d32753295921612409287629612180241828882987218b2414287c29742171240228702954215d24e52766291d218f24f5276129f52043249427f8282720f8210825d426241d1a1e0122fb24e918db1f2f24d325fd1a2822c4250a28ff1dee22e926a428241f1b230227c6281f1f48230a27d128181f0123be268c28d31e4322ed2500281a1e04212925e426e31c352078248426191c042027243c26251b5420b023f125741b9a20b4232526681be420fd235c26981bca201c248826701b89201c24ac260b1b7c201e24bc26f71a6c20202470265e1a2b2170244a26261b7d1df7217b24f916440d6d18101c0a01fa17321cdb1f2e0d941e25218c235d186d1e61225724fd18bb1eff2163243a19a91eb4212c24fc18011e5a21b8237e18a21d222176233718421d08214123de17e01cec2019234c17951cc720ea22db16641c9f20a4229216191c6d204822e715ec1b3b20f421b4159a1bff1fa5214215791b941f5a212b15411b1f1f1021d014341be91ed5209314441bb61ea52069145f1b9b1e75204414b01a5e1e6d20be130b1a0e1e0c20561300003518ea190080a421d6253227ee1ed3213026c2277b1fe92053247c25c11da41fab225824b11c871e3b234f25611cb72194256527d31f6f2317279f28e120fe235d27fe282221b92373271929da20c62398274429e2202224cc277029f6206d24d3278d29f0209d24c4278829e22065246d2732296820592362267f28f31eec21322563276f1dd6210a255a275b1dcd229825de273e1e7923ee252f28a51e4823f62540287a1ed12202264d28411e7322de2543281a1e2522a8252128d01de1217825fb27901da2214325c527541d5f2101258a27ee1c1421d3245727a91cde20a4241327541c9e206f24bc261b1c71203c246b26a61b39201e243926461b0420fd231a26eb1acb1fda230226b61a821fb1230026ad1a381f9523de256c1ac91e13232225d819c91c0d2120234218af19251f7b21bc146c1a591f1f221414091c4d20bb23ac14c21c992001240c16f71cc9208623de16ee1ccf2070231917271dc52065236b17281dab2019236d170b1d7120c4224317de1c5f209f22bc16b31c37205c2280165f1c16202d22cd15211c01200e227b15bf1bd21fda2124155d1b901fa221e314c31a2e1f5e217d147a1af41e1a211d144d1aac1ed1200114561a861e87200614061a461e7c20a713ea19231e38208312fe20611abb1bb020992ceb28ea29eb27cd2fb02cca2d4c288a30a7296b2b002979311a29542a19293132f428c42858279334542af82baf25a536cb2a672b8120fa353e2b332cbaa46d35f729422cf7a78035742b2f2d0aa86635422b7a2c93a85835222b222da4a63a35792d092f6da80135863151335ea909369d336f3528abe6344a322f34bfa33034ac2e3b3134255f32052a4030d626693022282f317923382c2028053263239527a828ad327e1f562505295733151f04244928ae33761e3b2414281034491fb6246d282734532059232b281e34f31e59226928cc33011e7322a82870331a1ece23862aac339a1faf25882cf832892162228e2a302f3c1c0b1dac2587297c180f1cd523102711181f1f47249d26231b571f46244e26261b9c1f2d240e266a1be11ee823cf25821aec1ec123a1258c1a221e23235425a119aa1ddf2208253319f51c8922a02469187e1c38224624fe177d1c0a221c24fc177d1cd521c023bb17711c9421a823a617391c4c217a230917c21bf92040233e169a1bd220f122e715491ba520e422a815231b852053228b15c01a402077213e15051ab61fe320ad14e6198f1fd0206a14f319891fe0207414141a901fe7206014341a7a1fc6204b149219141fae20b513dc19dc1e51207213dd1ba11b811ea21c202bb629442b8b27952ed22bc42c5e287830e42bbf2cae295431142c0d2d2b2aae32ef2a452cd929df33752b2c2c00244c36272bbb2c00b05b36912bab2dc1b06d36282b5c2cfdb0d3352e2c362dbbaf3b35142c842d77ad86358e2df82ed6ac8635a92fec30d6ac9a35a9301e32e7acf3341e31c03244a7a6348d302132baa42334c82e553113268632012d13313d286e30232c9b318123b12c7e2b3a32d41dce29052b69339718f4261b2a1034b21d99270c2a4b342f20e125312a5c3490214925ab2a8f343122d925362b9a34da221525872b8534ac222225552c353473226a25aa2cc733a6220e256d2c98327f217e24532b3730fa1e9922ce28e22ca31b8020dc26ff297b1a65200426d328131b4c2088257d28281b902057250e28dc1bb21ff0241727d81afe1e8b245c26381a011e1024ce258219a11d792341250219671df722ba24ce18461d992270248b185d1d6a224f249e18391d13220a247f18b01cae219c23cf17751c62212f232c173c1c2421e522d1160f1cf9209a224e16f71be92062222f16bd1bc620342202163d1b9220ef216a15b71a5920972106150f1a0d2026218914c719b11feb202914ac196b1fc920d913e8192c1fa22041144a19b41e9f2051138719331e0c2006135a18091e11201119c929802a342cc227032d8d2b062d5128c32fab2bb72c3f2a6631292cfa2c2a2b57325a2bc42c572bb033de2aa72cfe289535852b0f2c19a81936072c042d0fafc0356a2c7f2d5cad4f35912cfe2d59ac9835022d7a2ee6ab3235fd2db02f67a8e7348d2e8830c0a320350e2faa3086a73835452fd63030aac5344d2ffd308ba33f348b2ed2303c26bd328f2d06313b27fd2f642c2631ab23612cc42bfd31ef15b928232b24337821ee26a22a9433c621ee26422b3634f8219726512ba134dc215326a82be034b222e725d32bac349522e625182c9634bf226725132c4134ce20cd24f92b5233f3207f24a52b8131fb1ef523b52a772fbb1d12236f29b02cb11cf7215728ce2a4b1c7d214427b329431c2821c526eb284b1c0e2127266e28361c632088252c284f1b0020fe248627aa1abc1e76246926cd194f1e1c24a0254119ef1db42362251c19ce1d5c2328250019cd1d1a23ea24ff188c1db62292249f18411d3e2256246018131df22112241518ac1c902198234117721c3e211723e7162f1cfc20a9224316ee1bc8204822ef15731ba320f2219315f41a6f20a2213415ae1a46205e21cf148e1a0f202f21b814511ac01f31215f14741aa11ffd20a51488190a1f162157135f1a1c1fda200c140000371c371d00004528532a042c7326502b272b7c2c2027ee2eb32b032d9429e730282c4e2dc82ae531522c8d2d7d2bb6325f2c7e2da22acd337b2c992d11297d34e82cfb2d9325c434f82c262e6221d934fd2c772e921ee3340e2d5f2e6a18a734762d322f4121ef34092eb72f92219f345f2e6830b22485348a2ebe30a3265434472e663028280a34092e92303f296a32892de130e428d82e642cd2303825f62a302c7831b3212e29222caf329522a927442b07342a22b826822b3e3499211d268b2b6f349c217026152c8234a2223726d92b81343b22ff25c32b4a3403227e25842b03348121e324062b84329f206a24052be1305a1f12249e2a622f521ee223f3293d2d1f1e42228f28a92b091d3822b0271e2a2e1d6e21cf263129ad1c1b2137268728661c8a20cb254d28d11b62208a2511288c1b092024253e27b91a681fad2470262b1abe1e43240226ce192f1e0724b2255319c11d77233225f518261deb22ad246f18a01c70226c24b4176e1c16223a246117581cd3210b24fe163a1c92219d239016041c452122233c16dc1b1321c3221a16b31bea206d22c3155a1bc92020228015f71aaa20f0210415021b9520d2210c15071b6f209e21dc14211b53204c21bb14751a0a2029217714501ab51f25214f13811eec1f7821c21f1a230825e925831cfb28092b612c6a25222d7e2b982cb6283530122cf92c0f2aa831fe2b932d302bb732342c982d652b7a334d2c992d8b2a1c34ae2cf32dcd296734cd2c222eb8298034fb2c7d2ed8298534552d172f5c29a7345c2d332ffe28c334692d2a2f09289f34a52dfb2fd427ac34c42d1530ea279934b32d15306a282f34b72d4f30f6287d327a2d433094286c2e5e2c3f304225582b5f2cd43099214729b42bba31d0215f28bb2bfb3209230027ae2bef3307222827be2b74342a228f26142cbe3405228926c62b8134ff21e125602b613465213125f22acb33c4204c24bf2a7832e31faf247f2a8b300920fb23e529f62da61ed9230029b72c511e6622bb28122c261d3e225228eb2a601daf218027512a371dfd20bc267829941cb8202a26c128551c50209a251628ac1bf31f16254227121b531faa24af26841ae21e57243726ed19881e1e24d325a019551ec12381254619221e55230c25ef18b51ddc22ba246e18761d7f2267243e18471d2a221e24e617e11cc821b6234d17601c762163234d16f51b34210b23bb15bd1bf220be229215481bac2079223e150f1b8c202222e214e51a5920a521c5149a1a272063219114ce1a0e202f218414251aab1f30211414581a951f02216314a821d22273243b210f232625b425491c3428f02a5d2c6625e32acb2bf92ce027362efa2bea2c2c29f730d72b282d262b7532112c8d2d1a2c95334b2ccf2dec2b2834a22ce02dbf2b5634c42c002e972b8034e42c442ee12b6f344a2dcc2ec32b9834612d0e2f862bbd34692d232f392bc734732d872fbf2aae34532dcd2f232b9034452dae2ffd2b2b349f2d2130c42bf531292d0a30e3297c2d342c8a2fbb25302a442c3b30d022be29902bf630f9225b283a2be0310722a327d22bf532b7213c28e62be233d122aa27012c6934d1220027b02b78349f227d25ca2a2a3459213b25882a7d33f3205225442a0b32e2203325762a2030a0207e24d1299c2dfe1f71230b29192cd41ee9218f28b02a6c1d30224e289b2aae1dad21bd27142a351d9321da2665291d1da22025261429401c4c20c625a328e31b0b205b2505286c1b9c1f00252b27c51a741fbd24e026a11a0b1f7a249226111ab31e28240426c519411ec9235e253619c91d53230b25d218bb1dfd22bd249d18b41dcd228e246e18651d74224b243018011d20220d24c517bc1cbe2181231617451c4721e7222616831bd92053229f15e11a7e200622f414771a3420c6217914771a18209d217914be1a06207f214914811ad61f9f21af14bd1ab51f4a211714872017221d24dd1fb422d8245125d41caf27142b6a2cb225ed28ad2be02c5426be2bfa2bf32cc327912f0d2c252d842ac531172c352d272c3d33592cb42d992c0e34802cca2db22c3934b22ce32da62c7f34122d672ef32ca8342d2db82edd2cb934352de02eef2cbf343b2d022ff52ccf34442d2a2f062dd7341a2d712f0e2dac340e2d682f252d2834132da72f582cc431d72cae2f062a2a2d272ce72fd0242f2b2f2c0730b2225e2aa32b632f4b221029ff2aef30dc21a727cc2b25328221e628a72b62339b233027c62b3334fd2156260a2b5834a3212d25252a0034e5204d24ef2909331120d524052a493192209f240c2a0c303e201d24012a252d8d1fef231529a12b481f6f229828812b161e702274280b2b171e472227285c2ac31d6e2154277b29fc1cad205326a528291c7020c6252c28121c2a2071250228681be71f2625b227071b7b1fd7242d27711af31e89247426fc19311e2f24e3255519ca1dd1236d25d218671d4623112559183d1dd322c22437182c1d85228c2404181b1d35224024ee17d81cef2106244017b31cac21a62308176e1c5e2137236116451c2221be2226160b1cdb206a229815621b86201a22e614111b5f20f621b014151b3b20cb21b314b41a092082217314be1a761fc820ce1310211f22d9234120b82158244224e91b9527f22a4c2c9f25b028a42bd72c6b26f828072c4a2df6250a2df82b102de9288a303e2c892d0d2b1e335f2cb32db92c43349c2cf42d2d2d9634b62c2c2e4f2dcb34cb2c522e8c2ddb34fb2ca02e592df6342c2de42ebe2df634202dee2ebe2df234102df32e012ef134cc2cd42e002ed134ec2c122f1f2e45342e2da02f2f2d2d31c42ce82efe29992c1a2cc02e1025d52a502cd32e2624a329062c232fcc236f28d62b4630a222aa27af2b3d312b228e27362b11324b226a26db2a1d33b4218127e52a1434e322da26ca2a07347b226f273f2ade3208232d25462af930e5207a24f0293c2e5c20212349292f2cbe1e89220529992b2e1ef822f628e92b651e0123c428a52b6d1ef9221128852a341e3f224027a2298e1d3c21c4263f29a81cd0206826ec28481c5520cd255128b51b16204525c0270a1bac1f0a255d279b1a781fcf24f926391a281f82247426f619a01e3024f52555191e1ebb23a125ec18e71d332337259518a71dc522e6243b185f1d56228e240518151d092236245117ea1cce21dd231417961c6e214e2358162c1c0721d522c615021cc72089228c15cf1b99203e222e15b71b7520f8211e15981b592096210a15891a14207f212714941ad01f2e219d13f91a1718cb1b9381fd2060232224571ac426812a032c0425d227122cda2c3d265d28d42b002db7263e29412c6e2d7a27192d272c5e2d6629de312a2c6c2d8e2c0e346d2cc42d9c2d9d34b62cfb2d1f2e0135dc2c372e5c2e0d35cd2c572eb42e1c35f62c952e122f1f35f42ca02e162f2a35f72cb92e702f2e35b82c792e752f1135a82c412e4c2f44348f2c7b2e242e16304f2c792ee2298e2b162c892e7025d628332ca52e3d23f127302cb62e64220628ad2b662fb4226726092b2e3083219f26a62ac83084213227e42ae931ca21ad26142b52335f210527082b8c33d9213a27e92aa032052215276a2a73301922ff24b429652d7220e6227f28dd2c551e8323a128b62be51e0b235d280a2b771ece223528702a0d1e4e22dd27242a9c1df1216127f629491d4c21d2268329901c3f2176260029851cf92030269e28481c9720d4253928a51b3e206e25cd27111b122019255827c81aa01fae24cc265a1a391f47244226041aa41edf23c4255819351e5f235d25d218a51df322fe246218591d9922aa2400180f1d34225b244917c91cc3210124e4167b1c3f2149233316441ce220ab22a915f61baa2064224815d01b90200822f714941b7720b421d014941b682076219a14f91a33207f216e14151b2520b5218014ef1a4b187c1bb38473205022a622a7194427a32a3f2c14257127582b832c0a26e627ca2b052d14269328112c342d8626462a1b2c282d2d27fa2e2f2c852d342a5e33392cd12d832dca34a22c5d2e2b2ffd34c12c7c2ebf2f2935f52c7c2e27304935f12ca22e67304935e32c9f2e8d306635ea2ca72ea6306335b12cc42e7d3073359a2c402e63308734b82cc12e082f982e1c2c212ebf288529ec2b192ea32384290c2cb52da2232f28a02b1a2eca215e28582ba12dc8227a27dc2ac42e70225226822aa92ffa218125df2a133184213c26482bee3140222526ae2a5b32292285252c2bfd3160219426032b7830392237269b290d2de121c623b328dc2b5a1fc823cf28c72b241fb9229028e72a2b1e3c220828a22a8c1d2822f327442a7a1d4522a827b229661dd52137274a29061daa21dd262c29e11c29216226fb28721cba20e9258528e01b38206225e827071bf21f02254c279e1a3d1fa324ce26d319c31e5b244d2640193c1e1224e925d718eb1db5237d256e188c1d4d231c252618551dd722ca24ae17171d7e229e245417051d2b227924f216c61c9b2157245616a11c3b210b242516d91c132105232916781cde20f3226d15ce1cac20a4229015151d6420b1214f153c1c03204d21e714041b601f1a214214181bfd185f1c9a011c21d5232724c81a5826cb2a3a2c0f25ad27f82a962c95253528a12bd92ca425a428222c812d392654297f2c962d8b26672b8c2ca92da1274330122ce22d572b75343e2c112e2c2f6c35922c452e5d30b235d32c672e9530bc35cf2c772ef0309f35aa2c392e0031ba359b2cdc2d4131a5357a2cf42d2e317135432c932efe302d34882ca82e6e2f802c902bfe2d7f272029bc2b8f2d20249428c52b772d1c23dc27b42b322e53220428582b7b2db1227127222b882d69224726cb2a6a2ec3217726eb2ac62f4c224d26ef2a1731f621d824b72a31319520b423572a3530121f0024b229ac2d1e1fb4243f29712c2f20d224af28632b27205823e728c22b531e9523b228362b511e2b234d288e2af81d5522fa27132a181d06228c27a129d91ca421082733298a1c6b219f26dc285c1c0c213e268f28101cbc20d9254128e31b47207025e927201bd71f15255627881a1f1fb524be26ee19bb1e6f243e269b19641e2924de2524192e1edc239225cc18d81d5c2355258a18921df82214252b183e1d8822d724d817c91cfb2184242917551c6e21f6233d16b41bc820e5228c153b1b5d2071220015ce1a322078228414e31a3d2052226014151b2b20d3214d14e01a0c2050215e14d51a921ffd20e913a41ba618ca1b2d858820a023d523861a0927c12a502ceb246827b52be82cce251b28cc2b1b2df8256128d92b472d5e26fe28482c852dd6266828972c922d4a25d72b1a2c7c2d0a28c131702b3e2d9b2d2e35332ca92de630f8353e2cbe2da5312b365d2ce12d02321636622cc52d1a3211367e2cfb2d15320336862ca72d0732fd357b2c582e013245336a2c2b2ee02e202acc2ade2dcb25fb27592bb42d8c230e28c82ba92d71232827412bac2d5d221527f22afc2ce6210428c72a092db1229627882ae82c52225726ba293f2d76218824c629632e2820fc23bc29522f541fec249129102f8420f5248029f12d6920882429293f2c082017234728712a4e1e1e237b28a42a551e7223b128d32a691e18239928992a1c1ec6224228442ad51d3b22b927a4295e1da32102272629b21c5421a726e628701c1e216426b428431c012110267928071cbe20c5254128a21b75206925f7272c1b1b20ed244827601a811f74249f26d419fd1e112420263b19a01ea923b125f518601e4e2368259718111ee5221a255e18921d8322c4240318401d1b226e244317fb1ca9211124e416c41c4e217d2353168b1cf520ee220716791cc320b022af15411cb52097226815431c8c2057222d15f11a3220132269146c1bf01f94214c1455157216541b9a8056200b246124001a4426c02a742cd22422276d2bad2cca25a627592bc62cab251b28e02b172d16268328332c832d4e2642286f2cb32d5a258929982cef2d04267c2c1d2c942dc0289633cc2b122d0430ee35012c442e9d324d36882c192e353358369e2cc82e9d337536992ced2dc0335e36712c7f2d48333836682c2f2e9632b530062ca32d742cca29812b9e2dfc24a4286f2b882dfe23b727542bae2ddd220d272a2b9c2d45227627d72a242da3229c27852aba2c8e226025512a0b2dc8206b24502ae42d0e20b0254b29c02c3821b6235429292ddc1ed8225529062d161e5a269229c22c7821bd265229222c9d215524ea28c32bf91e8724fb28ab2b491f2824b928722ab01e6e236a28832afb1dfc223e28552a9f1daf22f427de29611d3d2269276929051dc121ef261729781c7821a426f728671c40216426bf283a1cc32017269a28aa1b5820a1253b283c1bc91f222581277c1af61e9e249426cc19431e302401260a19191eb9238825bc18f01d262322259c18fd1dc522c9245018b71d50227b241d18711dee212e248717e71c7921c923c816551c0e211b23fe159f1bbd20b5224615e21b9e206c223b151a1c9a20712236154b1c77207c22f8145e1a1020a8220c140a1c4c1f3621e714041a9a16fb1a5c01c11f7222a42225197b25552a0b2c5f24f126432ba82ca3255b27712bdb2c74252f28022c342dd9257c282f2c652de325fd283b2c822d45268c28a82c0e2e9625c227d82cbd2da824b32c5b2bd92d8229f334c22bf92df0319636412c972d0b34a436722ce42d4434d036382c3a2d6034b736562cf82d20341a36902c1c2efa32932d3a2b6f2dbf299727e62af32c652308286f2b092d66231c28352b0c2d4f23b827102b182ddd22a426b42a072de821e925702af72c4221ff258c2af12c552113261e2a672c3b216926a729712c85210926ea29632d33219c24792a942df01f0b25cc29e12c582042243329922c181f402325286d2bd61d8a23bb28062bdb1dfe23a928cf2a351ec8237828912a0b1e192340282a2a501de0222428f129571d9322f527b429eb1c422292276e29af1caf21f6260b29411c1b217e26b228a41ba72004264f28f61a37208925ce278c1ae51f1f252a27e819461fb72488267119bd1e53240a260b19631e00249d2599181c1e652345256618f61de722e5244b188e1d67229424af173e1d0d223f244117d11cab21de23aa166a1c56213a231b16141c1921ea226915921bb420682206159f1b5d20f121d714301c2f208d211615f71bd31f8121d614a11cca1f46210d14f115411a301c880c9221ff243f25951d59255d2afe2bed237626a82a722c10259326622bb62cf7247327c22b0a2d6b250e280b2c4c2d8d254428212c5f2db9255628332caa2d92258327972c552dd3244528a12cb12d7c25cd2c802bd32d702a3e35742c942d2e33d836042ca22dc8342d376c2cfc2dea34ce36732cce2d78348134912cb72d88311929e72af92caf252527732b3c2d29237c275f2b3a2d14236127fc2a002dc5222827e22ae32c5d22d026ba2ad92c0f22ab268f2acf2cbe217b253e2a1c2db820dc25b329682ce120a4248d29ee2b781ff62550298c2ccc2086258c29542c4a2052241f29482cb61ea924cb28f52a3d1fbf246e28af2a5f1f5924e028d92a821e5b24bc28a82a851e7d238d288e2a9a1dde225128192a231d7122fa27bc29d21c3322a8279529a31c03225a276429801c9a21dd261729311c64217826c728091cdf20f72566284a1b7a208a250628f41a222011255d272f1a9a1fa724a826b019161f502415264d19d61e00249825ec18bc1e59232125a918a41ec222b62498182b1e3a225b241818b91dd1210c249817681d7e2189232d17ce1c2a21032360164f1ce720a622b815ef1b8f2039220a15001c5720ec21db141e1c4620a7210015961bff1fa0212d145c1bda1fc321db120318231a041bc20cea2048249024e91b2c26752a272c0d246526252bbb2ca6246f269a2bec2cdc240827d42b142d3625b027092c442d5f25d327192c582dce242728252c6c2dde244927282c942d45243128462c4f2de92459284b2c292d1825832c0c2c572d8b299b343c2c9e2deb31ac36992c052e4934e135572cd92d3833722ef12aec2c5f2b2126262b002d25229c27162b1e2dfc22ba270c2b042da7227827f22afe2c6f222627cb2ae02c28228e268a2aa82ca521e3253f2a682c12214f25d7294b2c9220dc259529242ce1201f26fc29aa2bed2003260c2a2d2cd620b524dd293d2d931fdf25fd29bf2cb9208a243729602b4e1f152350282b2ab31d0e24d328852a4c1e37238328712a661d10237128582a491dbe225128382a0b1d8a2233280a2ae51c1e220128c429941cee218f276a29701ca52126271f29391c6221b226d528071c0e2143268c28901b8620c2253728061b06204c25c627401a511fda242c27ae19cd1e712468264819821ef323cb25df183f1e542364257f18461edd22fd2484180c1e6a22a4242f18bc1def2145249c17521d8621c5230f17aa1c1b2110233116471cc4208622ad15a01b65200d22d814421b3e20da219c145b1b2920b121ac14b91af51fa22115149b1a861f1f21a6130000a01b3d1d0000c2248929202b30238525ae2a3f2c7b24b125c02a4f2c4c244f268b2bc62c9624fc260f2c382de1243227392c742dd3244427292c6d2dab247027122c6f2d76248427122c692d67247e270e2c532d9a24ad26052c212d3224ec27862bd92cfa24e828112b5e2d4e26562ef52a882c122ce12d202b8c2c632b0e284f2bc02ca32439275f2ae82ca62355268a2ab02c59222026892a9d2cf7212326822a942cce21fe25622a892c8021d0252c2a8d2c2b219825072a742cfa203625d8296f2c7d202b25b6293c2c7320f724a529252c472017259329162c3d2053243829fd2bf61ea9243d299a2b3d1f9524da28e12adb1e3324b428ae2acf1d3c24ae28bd2a611dfc237c28a52ad91cab236f289a2aa81c6c236f288a2a811c23236628582a551cd7224b281b2a8a1c83221728bc29811ce421ab275529681c4b210127fa28421cb3202f268928d41b23208c250c28e41ab41f152563276b1a3d1fa524a726d319fa1e3d2415266b19be1ecc238e250b193d1e12230d25ab18fa1d8722a1244e18a11dfc2143240e186a1d9b21e0237e171c1d3d213b231217a21cd420952226166b1c952028229d156d1c6520e3216015751c4620b82129157d1c29208521b014111cc51f6521b514651b331ff2204f1300008c167719008061241f29752a7e22fc24b7293e2bd023a425b72a652c1a245826f42b7a2d58243427592cd52d8624a3276b2cde2d4224fe27592c942d8f23ce27212c5b2d06246e27d72b272dde236b27a12bfd2c0824e4276c2bc02cb0232327342ba82cc223f9288a2ba52c68258928cc2a882c3025a3280c2a6b2c6f257626662bdf2c3523d527962a7f2cda232527932a922cc222c326702a882c3422a7266e2a832ceb217626492a7d2cbf216526262a7a2cb021f225012a762c4a216625e0296d2ca6204425dc29242c63202f25022a1a2c5120ec24c029f92bec1fa8245b29252cc21f38255329ed2b59209524e4282a2ba21fc9239728e52a0c1eee23b928fd2a7c1d6d238928ca2a821c4a237f28b32a031c06238328a32af11adc227f28862af11bd6227f28622a261cb3226628412a421c8f223e280c2a5a1ce72182276829401ccd201c265a282f1b2a202e254f27771a651fb924ac26f319091f6424532676197e1e0024c025dc18181e2e232d258f18af1d9822d1241818841d3b228a24f117631dec214c24c217211da62116241917bd1c5b216b238e165b1cd9209f2207160b1ca6204e229815ec1b7b2008220815a11b4a20c421d914961b24207321d214121bd71f5e214b14d11a7b1ff3201f1300006b145c19008063242b284f29e2218e2498292e2b44231a25462a0b2c46236826172c6a2d1d241728e32c6f2e19243028002db22ebd22d727902c092e8822a026a92bff2cd4227326ec2a962c60235026b52a7e2c93236a26c52a8f2cb223d826d32aa32c1b24d526ad2a762c0124a027882a742c5c24b827b22a952c4e2488278f2a8b2cf92311268c2a722c152293268e2a832c3822f025622a832c7321a925fc29372c0921ab25a629d62be2202f259c29092c5120f5249d290b2cfa1fe8248d29062ce51fd0247a29fa2b341f2125b129012c631f4f259c29042cf21fd523c128882b861e9c225c281c2b111e34235128e62a681e95222028522a4c1da4222828372a981c012349281f2a511b89239628742a2c1a7223cd28c32a191a9923fe28022bcb1974230929072b5e1bd522d728cc2a261cff2156281d2a261c932172275029b61b1a218a26bc28a21b802078250828fd1aee1f8124b126281a201f1324b825bc19561e48230925eb18e91db122a7246c18971d532263242f18681df4212424c917291d9f21dc236e17ea1c50217523cc16ac1c0f2121237716771ccd20bd222d162e1c912085228c15bb1b4f203022e914771b1e20ed21be14891beb1f9e219314ff1a6c1f8e21b4138c1a2e1f142136130000c617fb18000015230a276f2840214a241b285329b922652400297d2ae3227425422bb12c50238428d62e72304524d828ab2e5130c920b226292c5c2d022185265f2a2c2c5a221f26f129ec2b2c23b225dd29c52b2823df25dc29e22b36237326fe291b2c3123e426232a362caf23ed26ab2a642c0f242d27102bb02c0024a227132bbb2c24222827c92a992c5b2198264e2a472cbf201726e6291b2c362081259529e92bed1fff245c297e2b321f02253d29782bee1e47257929c52b681ea025b529112c3e1dd4250e2a742c1a1ddd25ba2af22cca1e8125e82a0d2d6e20a524242a652c862082237a28a72ae41ebb23c427b129011ece23a9277529bd1ca62390275b29201bb8239427592903198d231228ce29e718ac23e228ef2a8d183724b829002c00195724172a242c9e1a2b24e429ea2b971c58230d29dc2adf1c5722b5276c29ec1c1821fc2534283e1cdc1fc324be26531a2f1f36241626c819d61ef123ca254f19551e64239825eb18481ecc222625b318031e3d227d2454189a1ddc2103240818311d792177232f17e61c38211223c7167a1ce320ab22f115061c80203e2257155f1b2920ea21e414021bf81f99217414ec1abb1f842166140f1b8a1f3f2149147b1a381f2c21de133a1ae91eca2035130000e51e5820000005216b25ab26041fed223f273a289f219922cf263528cc200f1e2e274129261c552b1b314a320a1fce29682f96305425c4223a28982a0421f1242228fc29352263244628c629a321cd24a028252a4e220425ad28512a72224e25e0288d2aaa22d0253e29fd2ad0222726b529d62b362313276d2b052d4a231729862c162e51216e27192c6b2dc31fa125af2a6d2c271fdf249129f32bd71fae240a29e52a441f8124b028a22a401f96249e28312a611f4f246928292a791db323aa28d02a1c1d0124bd29ea2bdc1c4f26b02b442de11da126bd2b342d96203722e027682a001ddf1c9c24de2704174321d6255628941b09232c26b228de1c4c225726cc28891c66214d265d28781b78210f26672868199b238527442903121024512a542c818d5e25572cb22de117f224db2b332d011ea4234329642bef1daf20a8261f29091c32203225a627c11aff1f5c2430266f1a1e1fcf2374258719fe1ee222ca243b19891e33225824b518121edb212d245f18e21da82115241218a51d7f21f723cf17571d2221b3231617f51cde2026234c16cc1c7b207b2218169e1c41204b22de15781c182022226d152f1cf01f0122d814de1ba11fa4215514701b4c1f432118147e1aab1ee6202613891aaa1e98201712000060008a1600806a1f5e23dc24da1bd8212a26ce27ac1f2e226826d427971f0c207723dc24a11cb119c11f8521ab162522aa25bd27601ff1243928c529122205254b28e92906221c255e28db29222222256828ed294e2212254d28cd29f121f4244628d429aa21af246a280c2ad420ed24e528cb2a85206d257329c32b0f204a256529bd2b1f1eab2411293b2b321e8724bc28962a081f8a247e28482ad11f4b242f28e029a31f45243328da29981f5b242928d529fe1f42241628cd29931fa42387275f29941ecd225d269228db1da821c6243027d31b47203323aa2578183d206423df253018bf202824d526c319012160240627a41a02214c24fe26ee1ad7205624fe26b21aaa203d240227fb1ac721a3241927291c2420b4233627bb199c20d028c02acf130d2a12304131279a7b26572d2c2f3721cd17632445277f12c21e89230926d219e51fb7237b255a1ac81ed022ea244419041e52229c2480180a1e092265245918d01dcb212f240518bf1d93210624f317911d5421b723b417231d05213c23d116931c9520b72212163e1c47205522a115c21b152003222615501bfd1fcc21da14071bd71f9021aa14dc1aae1f5d218d14d41a7c1f33215614d41a361f0d215614471a001ff4209f13501a9e1e6d204f1300009617421a000060218a2522275c1fac218d253227491f7c212b25b226e41e16207e223924361c0520ea229a24991cdc228d2689283620fd23e4275f29052165241b289329262198242a289e294121bb243b28a7294721cc244128a7293721a32427288f29e92013252628762916217d250f286729092185228e256d279d1d311e082301252819df21f52530280e1d9523bc271f29f51ee423902733293e1f74235c273129a11ea62362274229cd1e0d2451274f29fa1e31244e274a29fb1e49240c271129231f52238b26c4284e1e5722f0255328761d49212025e5278d1cf92071240f27241c8821012429264b1c302103244f26c31bc02010247f261c1b73202724b426681a54202d24cb263c1a582023249d26021a56202a24622682194c209623e0257619fb17bf1d53202f0d4714c718101c6a026a1e142055224115871e6f227324b318441efa216624b0182c1ea72132247218bb1d4821eb232018931d26219323b6172a1d03214b232517e31cea202223c316a21ccc20ef226916701cb020b82224162e1c82206d22c815051c52201a225615a61b1620c0211315881bae1f6821ff144d1b341f1221a3145b1b011fd62042148b1bb51ea8202714b71baa1e7220a013de1a661e712090131d1afd1d0f200b1200008319951b0080bc21ef254b27b81ee321fa258127101fd62012242f25421d3b1fb4228a243c1c07204d24fd25f21cd022582648282f2005247f27e928b6202a249a272229c3200224a0273a2978202c24db276d29a7206e240b289129d12096240528a629ba207724cb2777297a203924de2697281d200e229a25a0278e1dce219e257127541db92244262a28fb1d76239f266e28a31eb023b72698289f1e9023a3269f28831e44237f2693280d1e132356268028181eca2221266428d91d6c22e7254328b61d1d22bd252a28701dcc2178250528281d67214725da27a71c20210d2599276a1cc020c8243627ea1b95208824c726a21b552055247526371b1a2023243926d51aee1f012414269b1aa61fd4230026281a451f8e23f625da19ee1e3f2390259419b91dfe213b247218811ae51f9a213c15ed19181fa721dd13791b1a208f23cf13cb1ca42008248c15d21cc720aa232016eb1cd620bd238716021dd2209c23a516381da9203823ed16331d8020e2229b160e1d5c20bb226c16f21c3f208b2201168e1c2020602288153d1c0b2042222515c21bee1f1122b6145b1b9f1fca217714d91a351f74212814831aed1e2f218a13551aa01ef020b0134a1a761ea1204813f7193b1e9e20e812e819401e64208112a91f731dbe1e1519b22b8b291a2b3d24992fde2cf52d1427d330bb2cde2dd0260a32622ca32df22878323a2ca22cee282f33082b4f2c4d237334552cd02c06a1a134292c342dcca6f5349c2c8a2d33a8e8341a2c4e2db6a80c35202c762dd8a8f5340d2d0c2f47a7d334f0303832e7a4b234513004310aa99334d42f3c31b7a6da34fa32b634939e3634de319b33a9229a31f32d02316125922ee1280c3091217a2ab2279130c42222279728413121206b2519290332311f80248d2865323e1faf2425289f32cd1f542333289c32ba1eb221d127b832b51d3125a42cc6337f21c6285b30d83430255b2c0c335536cc242c2b81327635e31e2125af2ab22c3a1e342292254028841df81e7a241f27651af71fbb24a1264f1b3d1f70247926701aa91f4f243c26d01a131f1a24ff25181a191fff23c6251d1a4f1e66236a256f19fb1d44232525fb18551dce22c9247118db1c67226a24d017a31c13222d247617a41cd421e2233517811c8221b223ff163d1c432188235816e71bfe205123ea15a91bd920fc2284152d1ba32000232b152c1b902074222a15eb1a51208121c914451ad21ffe2056141d1ac41ffa203b14491ace1ffe202c14681ac91ff5204014781a9f1fcd204b14b0191f1fa7203a13441a111f612041133e18f11c991d4509182a1f2b722cbe23042e282d4d2efc276c305c2d8d2e5f28ff31702db12e3c281f335f2d8c2e08260e33272d4b2e62247c341c2d052e51a98b34e72cfc2d6aaa5035602c5d2dc0aeee34772c7b2d26ada234232d6e2e10abcb34552ee42fafa97934c82fe33091a66234fe2f0b316fa670341e307c3185a74134ad303032baa2d0333030e1312d22e831782ee930ac254e2fee2cc3303022f12a242c0631731fd2282a2bbc31fd198e267a2a5132b820c225782a5f3272213f250f2b153326227525252b443303233725372c4933b3225526622dee33f5237b278f2efe33ec237927af2ee432032299269a2d1931261eb924bf2b082e671cf1227028b52aa51b3e2176263e295d1abc20e5250729d11abf20862574285f1b9c2039250a286b1b8c1fda243527131afb1e87248126d019471e2124e62568190b1ebd2362250919f31d4423e124f518981dc0227b248018631d6e22492456185e1d21220f242b18fa1ccb21b523ba17b31c862151230817641c3d21072353162f1c0921b8220616f01be7207122b7159f1bc5203f227d15221b9020fe21ef14a21a5620a1219714121a052023213314c419a51fda20a71393195e1fba201513d019261f8f2063135819dc1e87203012ca19991e2b2007131d1c2e209c20cf11ef28c42a6a2cab24912c4f2c5b2d59274b2f6a2c632d39284831722c882dec281532ec2c3f2efb28b532462cbb2d32272f34342d192e9da29534092d8b2e6fa9a934ef2c522e94aabd34092d492e27aa8434a72dff2ea6a74134292e9c2f53a44534842e5030c0a2a8343b2fba30e3a798341a2fcb30c8a75334352fd930d6a2df33262fc0307220e831322e97305623962eee2c7930d620362b832c2a311c1e1a28f12bb13136216e27992bf831fb2163270d2ce432f2210b282a2c6e334722ee26542cf3332423c225862cc23319227026d22c1e33a2224726b62c5d320d21d5259a2c3b31b120b524122c1d30b71d2824ae2a8f2d0c1d1e232329eb2b521cfc212828772a241cc2214b27cd29251c5221a226e128f61b0f2106265d28db1b6a208f253128db1a19201b25a6275d1a0f1f9124a7267b19a71e3524d3252a194f1ede237e25e618121e72233525b718fb1d2f23fb24a518be1dc622a1244c18791d4822682418184b1dfa212c249f17fb1cac21e7232c17b41c5b215223c6166d1c1f21e6222016071ce3206e2292157d1bb12007222e15da1a6d20a121bd14851a3420582153146e1af11f1f214414581aa51f18210814751a951fe0201a148e19ed1eeb206e127c1a301fd9202413a71a3f203720b2107228e52a862c95248b2aa62bd72c3026e02e482c2d2df527df30862c902d8a28fb31b32cfa2d8f28f432ec2c072ead26da33e72c022efb235a342e2d842ee61d8c346b2dbc2e2a9eaa34802ddb2e45a1a934cd2d4d2f43a1a234312e13303ba1b934852e3f3055a191348c2e7a3020986e34682eb030011e3d345f2e6230c920a9334f2e8730a0259f31ba2d6830c324042ecc2c2d301d1ee42ae92ca1307a20f728bf2c82319722b328332cee31c422fe26262c6432d3218e26482c9f32d421cf266f2ce132a2225027612cc332b6229225fe2b7c321d210825142c64317a208a25722b3c307520f2243f2bb52e1f1fa1247f2a612d671e722482296e2c261e82229128502bdf1c0722e327dd29831c7c21de262e29421c36214226a028311caa20d2255628821b692082250e28d91afa1f17253a27321a6f1fb4248826c619cc1e5524152647196a1e1624bf25fb180d1ea3235225b3186f1d1923d3243818fa1c8e2288247317ad1c2c224a24ff16921ce7211b2495166d1ca721c2236016211c59215423b615f11b2321eb227e158f1bf1207d223b15191bc3202022e914d91a9520d3218b14001b8120b621a514311b7920a92192142d1b542060215b145e1a14202d210c14841ac91f1d212d1304224e249d25a51bae23cf25f725fd18ca28532ba32cf024842c142c402dc727c12f612c5a2d7d288b31812cfe2d8a28d332bb2c2a2e6f28a133d52c172e53272834192d722e1a266234502dcb2e74247d34762d152f90248f34c02d822f3523ad34e22daf2f561eb834e92dcd2f4318ae34e92d19303a18b234ef2d25305d1e8234082e2d302123ee332e2e5230d2259f31a22d27300826d22db12c0730e7222f2bbd2c0330aa2020296a2c95305b216628632c7c3155220c287d2cab310e22f227572c3332f2219727792ca8321c2258287d2c6f32bf2250280e2c1b3274229d267f2b2131f32032255f2b2c3009202025d32a642eab1f6a239d29942d571dcc23c228d52c9d1df522bf284b2c021d57224328152b1a1d682198270e2a811c2921e02670294c1ce4204726c928131c8a209f251128901b2d201b252f27b81ac71fb924ae260a1a4a1f6b244226a919cd1e2b24dc2548196e1ed1238625d018221e5e2315256a18b61dec22c824e7177c1d882273249617451d2b222324fe16e21ccc21ad237b16661c6e214723d615e21b1721ed223b15981bd3209822d314441b9e206f229e14ec1a84201c226614d01a5a20b1212314a11a372071210614cd1a1e203b21df13231ad21f2e21c2126a1aa81fe820ca13991ff722e9224b137a24ce253d26d31afd28bb2bc92c0025162b062c632d4d26012e392c2d2df827a9306e2c882dde288332982cd72db329be33a52c0e2e07293834ce2c322e0d2868341a2d7d2e77278934602dd82eaf278a34a92d4f2faa26ab34e42da72fcd25b934dd2dca2fcd24cd34d42df82fe124c1349f2d0630e8259d34972d0c30d1270d34d22d433059285f31462dfd2ffa26df2ca02c4d2f6d23fa29d62c5f2f3b210129742c0b30f22007292e2c813089219728452cd93093216d27182c76312321d226292ce8317d21c426112cd031d4211525752b43316020b2241d2b39300b20f7245d2a992e23204824012a9f2de41e40235729ac2cd61dc722d428622b741dc2229028ac2a701dab2241289d2a8e1d6522eb27252a541dcb21d5266129d31cf120382619291e1c9720cf25bc28a51b372067250c28051bd91f0d251527511ab01fca24d026301a381f8a247f26cf19051f4a240d267319561ef1237e25eb18ea1d842330256d18c01d2423d5244d189f1de2229f240c184c1d83225d24a117f81c2a221b24e016c51cc921a82354166e1c65211b23e115b51bfa206b221d152c1b99201422c214e11a5b20d1215f14b61a3720ac21c513f81a24208b21ac13c71a0920a621d913f61ae81f5f21aa135d1c1a22c522291216243e25f425801ce827702b8f2c86257829192c132d6826fc2b4b2c292d8d270e2f882c912d7a2986318f2ccb2d652a3633ae2c042e502a1f34bc2cfa2dd1295234fb2c2d2e9c299134602dc02e6a29b134932d2c2f9029c434a52d5b2fa729cb34992d682f2429df34882d8e2f3a29f3346b2d8b2f4f29c034282d7e2fa22903340e2da92f3629f8301b2d822f9327992c712c8a2f0323662aa52c6f2f3d21cb28542cf72e77208828202c872ffd200d28382c283026216228302ca03010229926462bce30f020c925e32ad430a820ca25ff2a7030d220c225ab2ab52ff520e324182aa52e3520cc24152a902dfe1f8a23c729aa2c481ea92200298e2b8c1de222a828952bed1de9227528262bc11da92230285e2abc1dba2184278129c51ce0207a26ae28101cb620f6254528d91b4e2088250e28ee1a0b203925c527821aca1ff3244627451a3f1f9a248b26a019641e3924f725f618fc1def2387257a189a1d6d23262531186b1dfa22d824cd174b1da82299249f17321d4f224f243017e61c04220c24c716b21cba21b5237f165f1c6d215223cd15071c1a21d32258155d1bd0207622ae14eb1a80202e223314c91a61200722db13f41a4920e02106149c1a1e20b021a713c51ad71f3a217413311cfb21c921eb115a21bb24b9241a1b2328642bed2cc8251d29db2b072d9226f428632c982d39268b2c3e2c3c2d6d282d30852c9d2d8b29ed32cf2ce02dd82a5234042d8e2e132ba3341a2da92e8c2ad234022da02e432aed34452dfe2ed72900355b2d312fee290135622d382f802a0a356f2d632f8b2a0c354a2d482f202b0035522d952fa02b4d344a2dd42f0b2b8330db2cba2ee627b12b442c542ebb22052a762c6e2ef321dd285c2cbb2ee821f327582c122f4621cd271a2c6a2f9e21ba26482b8c2f08216a26a32a992f2921f826622aea2f9c213c253e2ac72f5c209424162aa82ee31f5924db29682d7d1f30239b29b22c311e73235129112c6a1e36232f29012c021e37230b29012c371e8023d428a42b3f1ea6233428742a5f1e7e2241278829391d7021f4265329601ce3207a260729dd1b7120d8256528261b22205425c927a71ad01f0f255327111aba1fdc24f026001a4f1f8a2474267819c51e37240226e0183f1ed323a7257f18221e512342253e18d41de022ef240818841d712292245217341d23223b24e816121dec21e523bb16c61c8721542311165c1c2521da228a15331cda2083221915261cac203d22cd140c1c7f20ef21af14a31b582092216c14a61a13206c21f212731ad61f1a211a13d018891d051efb896221f12332243b1ab0270b2b6d2c28255028402c4c2d652693281c2c6d2dc8262229562cdb2d0727d62c9b2cc72dd9283b31b32cc52da52a0a34b22cd52d872bae340c2d792eaa2b0635d82c872ea92b1135f12c9e2eba2b2735202dc52edb2b3535282dca2e432c4b353c2dec2e562c5935272dc92eae2c3935f12cdc2ede2c1a34cb2cba2e492ccc2e832c822ede27e7291e2c732e8023a028482c612e23223f284e2cc22ee021e727252cd02eb1212627c42ba72e5921bc27542b472e92210b28e52a7f2e9821bc26682aff2ed9201526db2a2a2f8d209326e32a9f2e1b21c226252a742d3f217e24c629cc2c3b1f8d23c328542c4a1e5c23e428682b211efd227d28b22ad21df8222928582ace1d6f22da27432a5c1d0e227527162adf1c7021e7268729601c61219126ea282d1c112141268d28de1bbf20e9253d285f1b67208225e527d61a34202b256327871acc1fc424e626d5195f1f652467268419cb1e1024ea25e418471e98237e258518c21d1723172525187c1dae22bf249617451d42226624fe16f31cc7210c244a16991c37215d23d715471cd520c2223115f61ba22073229c14091c9c202222ac14c71b8b20d9214814721b6e208c211914181b3e2094211b14c21a2e20b1211a143218f71c681d36898b20cd226c238419c627192b8b2c1a252e28c92bf02c50263d28282c442d0b265129532c9e2d2127f1298a2c012ea0262c2ea52cfe2dcb28a032aa2cb42dab2bc134112d2e2ef72c2a35ed2cb42e1a2d3435f52cb62e242d5c350b2dc92e4c2d6335082dc02ea12d8535132df62e742d8935d52ccd2e782d8935e72c902ec82d6234d42c102fd42ccd2d322c6b2e632643291b2c452e17226429352cf32d8b227a28fe2b232e6f212528e32bc92dbc211027c52b352e49217626ad2bff2d62218c26e72a062ed321ef25fe2aa22e4721a8248f2aa62e24206824f7294d2d971ff9249229762c48203824eb28a42b071fe1216728ef2be61cd3228c28712baf1d5a225b28e12a4a1dd0222528a92a7b1da0221f28362a551d5b22bf27a5291d1df32157276629ca1cb12101273a296b1c262179260329ff1be12008269728941b3e207925fd27961ae31f03253f27e719451fa824be263c19ed1e63244326fd186c1e1f24e82571180f1ec1237e253118a11d4923232578174c1de122de240717231d8022aa248716091d0f2266241d16361d942122245416571d3d21b9237c16ea1c0221f122b0154d1cd120c122bc14501c97207d2281149c1c5820b5214b14191c01203b214814961b871ff320ed13a519c31d181fc88ce1208224a924071ba126002b712cba246728b72b2c2dc825a728382c4a2dd8250e29662cbb2d3526d529b12cd02dab262a2bbc2cdd2dfb26872f812ccc2d0f2a3534a42cfa2d582d66359f2ced2ea42dad35fb2cd42e9c2dc135f52c9f2eb02dc335e22c6c2e052ee435d72c4c2e272ee735ba2c172e802ebd35b42c5e2ef82ee4336b2c0e2f3c2d0d2c7f2b2e2e9b25cf28082cab2ded229d28192cb42de722fa27b82b002ef82145275c2b952da52174260d2b932d31214b26e72aa02d3e21d425272b472e05215125b42a172e6e20d525502a302ddc201b251b2a272d1c20b5249a29802c931f1b242d291d2c601eb522dd28072c351d4924f928692ba81e1f24dc28f12a2b1e80234228992a9d1d7222e427022ad31c2d228a279929721cff21322737297d1cbb21d026ea284a1c4d216226a228ef1bf020ff255028641b5e208b25fc27891ae91f2a256127eb191c1fcb24c7265219c41e7b2449261019801e3324e625ae18521eed2392258d18f31d6a2350254918911df8220c25b4173f1d9022c8244217cf1c0f2272246216671c8621ea23d815e61bea20d1223e15541b6c207622a814ff1a382063223f14e81a4a206522ff13151b3d201e22cc13d21a2620bb21e513a91af61f9121b613c51a3a1df61fbc8dbe2044247624191b0e28292b7d2ca32421282f2c3e2de325b7282a2c652d532607293e2c8e2d9a267c29972ce62dbc26af28c42c3b2e39251d2b7d2c182eba2633316d2cfa2d092c2f35d12ceb2e962e0736d22cba2e512f2c36ae2c702e252f1436a02c092e612f3b36bb2c372e912f3736dc2c362ee62f2d360f2da82e4630f8326c2cd32e372db529ff2af92d98243228fc2baf2d3a232428112cb52d22231f27502b832dee21bc26e42a252d3b219e27082b382db321db26d02a462d2121b7258b2a472d70206e25362aaa2c5f209625002a932c7f20f424c029672c20207a243c29a82b751ffd237b29362c6e1eca219e28282ca91cc723f528752b421e9423e528432b191e2423b828fc2a8b1dd9223e28402a511d6d22b6279d29fd1cf8212d273a29771ca321ba26f528381c44217026b428951b23211e267128661bd420d8253428f41a98208225d8279d1a2e2002253527c819d11f8b24a6266819571f2c242626df18e11ec423ac259018ac1e57235c253d184d1eea220a250118c61d8e22b4245617891d402262240817241dc4210f243e16d81c59218123e215b01cf62001236d15701cc620b52223153b1cbc20a422a914121c8f2062227b14cb1a4620232219130e1c13203421021490125e1d1a1fd1844a218324eb249e1b5c272d2baf2ca0246c27db2b072db6250b28de2b002de1257a28322c542d4226bc28822cd22d37268c28b02cd92d3325fa29e02c272ed2255e2c582cec2dc5271d33402c852db92d0d368d2c372e5b307336d12c582ea5307c369c2cdb2eda308236932c202edf307f36ac2cbd2ddc306936de2c592ecc300131192c692d7d2b5d29632bcf2d2a243b28bd2bd62d92222c28972bea2d7b2250278c2bcd2dae2146273c2b6d2dda21c326e22a322da221c825772a0c2dfb200b267f2a292d342197261f2a492cad21b924cd298d2c9a1f8224f629172c411fcd24332a582c751f7a247e29602cb31e4f244029732b341e13253629272b4f1f02249528782aff1d7a237028762a981de5223c28582a291dd7220b28fb291e1d612281278329c61cf6211d272e294b1c8621be26fc28221c58218326c228ff1bf0203e269028641b8720c7254128c61a062046259e27051a281fb824a6265b196f1e48240a26a218311ee92394257518fe1d4d232d252518fb1ddc22d924f017a51d5b2287242c17581df3213524ca16001d8d21f0235a166f1c34215723a215171cfe204323f7142b1ccf20ed220f15201cbf20af228b143c1c79205422aa14521c1720ed219013d71b521f60215114aa15b31c6b1dc28586206e23c623011adf25b62a482c6f246c27992bd52c9b250928db2bfa2c87258928372c5b2dd425e528682c9d2de02558297f2cb12d43269e28d42c542e48256c28112ddc2dcf240f2dce2b972ded283c35d92beb2da830c836792ce62da631e636712c322ef131d9365a2c892de631f636082df52ecc31bc368e2c652e9c31062f792b242dda296428c22b972d50230528db2b592db2224228562b2b2d18233f28362b2e2d98222b27da2a302dc5211a26d72a272de9203c269d2af12c04211126782a2c2db6208b25322afd2c4e20f926492aa02c6a21f624e429a92cb41f67245729cd2bd61e13233229842c4b1d2e24f028322b051e6624e0289b2a551e0824a2289c2a941dd5237e28762a6b1d4a234f28442a0b1d06232e28052adc1ce4220c28cb29921c8a22b7278429571cfd212d272c29f21b7021ad26d028371be1202c266428791a7520aa25fe272b1a112034255827a019751fce24ae26f318dc1e65242b268d186c1e1124bc2543180f1e822365250518d21dfc220225b9175d1d7022ad24d1160f1d152252246d16c31cbc21ff230d16721c67214c23a615261c1921e0224515ba1bb6205d22b114e61b7020f9219214721c3920a321e514441c002087213714b21d0320d2202e100000041e691f00807323c528dc2978205426192ba12cb1244c27082bb42c4e251527d52bfb2c0d250028262c4d2d7a255e28552c992d9c25c928662cb22d0326e128922cf22dfe251e27cb2cad2d5f240129b82cc52d0126312e102ca22d142b4236992cd22dcd322f37342cce2d9b3370377d2cbc2de0335b37ec2cf42e5f334e365f2cf82d5232302be32ac72dcc263527412b462d692293276a2b1e2d86228427222b002d43226127252bf52cf0210e27132bf82ce021cc26cd2aec2c7821be25462a2c2d9f20b2250b2a022d6c204625c329562ce41fdf256b29702c3a20d224c929062cf11e2a23db284c2b281d3e23dd28202b371df424fa289f2b221f5224e828862bfa1de323c528f72a751d7b238928922a2d1d0a235d283b2aac1cb9222328fd29a71c83220228d129811c4622a1278c29571cd2211f273329b91b9d21ae26dc28731b282121267728221bbe20a2251028901a432022256627e519a91fbd24c8264d19291f69244726f418d01e1e24c0258518b71e952345254418a21e0823d3243718301e782270248317b71dfd211624f0164e1d932196237116ca1c36211023d115591ce920a8220815301c922044229c14371c6d20ff216714581c5820bf21c9143f1c2320b32132140c1c0e2099218b130000fe1a851d00002524b128b429632019262e2ba62c17241827982b1c2df524e626112c2f2dd22472271f2c402d19251728422c762d5f2539284c2c902d11257128622ca92d1425eb273e2cb92d6a243228942c962dcc240b29992c902da025b82f762b232d4e2cf9364d2c8d2ec7338f37bd2c2c2e1c34b337b52ce42def332a35962cf72d0831c229c62b192df5247427682bf12c3522c927292bfd2c0c226127f62af02cf021fe26e52ad62ca0219726ae2ab52c4e21f6254e2a7d2cf7206525fb296a2c57207025df29582c39206925f029832c0c204d25d529562ca21f96235829892cad1d6524af292d2c941e66247429a72b551e2524bb28d52a341e0e24d228cc2ad71d7523ab289f2a291d33238328632ac71cda225a28452a8c1c9e223a28102a641c59221128d629361c2322b9278d29121cc6214e272e29a91ba821dd26e028821b3d216f269e28f41abb20f42555288b1a15206925f227a619701ff02449272519fb1e86248826d418991e0b24cd256118681e6723642540186b1eef2200251418221e7822b524cb17c01d06225924fb16391d8c21f2235716891c2621322382152e1ccd20802213158b1b7320f7215e142c1b4920c8212714541b332096213e14a61a062089215213cf1abc1f1f211d13000088172c1b008011259929092ba722cc25ef2a952c6124f525602bb92c5524f8261f2c352dc624b227602c9e2d2925e527852ccf2d1225e427732cc62df52400285a2cd02d07251528632cd62d2125ea27542cb32d152560276e2c5a2dbd247a29462c622de226a2314d2c572ec22e62368b2cd62d7b339e36d62c702e6133e92e002c732d512b8328652b722d6524bf26b82a152d62224226b22abf2cbe213b26be2aac2c8b210126882a972c2c21d825492a8d2cde208e251a2a742ca0202d25ee29752c2a20fd24d4295c2c04200a25a6291a2c0e20a6254229ac2b63203b242e291b2c551e092438292c2cd01dbd241529882b8e1ee32402295c2b361e7a24b7280e2b6f1d03247d28a52aa51ca2237028862a341c46236b28722a011c07236328422abd1bd0225528172a231c89222928d029ef1bfb21d8277829f01b76212e271729dd1bcb205d26ab282c1b4220c92534285f1ada1f37259227e0196b1fb624cd268d191d1f52243e261f19e41eee23bd25c4184e1e332338252f180a1ea822c9240218891d1022612408173f1d9b210224aa16f41c3d2144234b167f1ccb208c2275154c1c88202522f914521c5920dd2183146d1c4620bb216014881c332085213914041cdd1f54213214ce1b571ff420d51200000117871a0000ce247429dd2a942242255d2a012ca523cd255d2bf22c0e240427502c9c2d8224b9278e2cf22d6a241228942cfb2d142417286f2cb12df823db272d2c692d0c24bf27fd2b372d1a24c227d42b1b2d3724d527d52b042d25245d280e2c132dbe24de29b92b4b2d36264a2e702c312ed62a9930872cc82d212d9f29322bd72ccb25ef26c42a862c8f229b26a62a802c10228126602a712c9a216526592a742c54213926382a722c2f2125261f2a712c1e217225ee29822c89201d25b229612c1d20f224a929202c671f0825a829172c3f1f9625dc292d2cba1fb1249129662c051f1d254b29252cf11f4d240c29102cae1e3424d028682b4a1e05249328ec2a561d88237b289c2a921c49236f28862a381cf62271287d2a7c1ad9227928722a271bce227a285b2a7e1bd0226e283f2a801bce225d28152ae11b6822ef279429121c35219c26a128e91a1c203b255a27af199c1fc424ba267b19141f762463261919b41e1324d425a3183b1e522349252218ae1daf22db248a17721d39229024eb16581dfc2154241717121db72118247116c31c60214f230d166a1ccd2075229c15041c8f203822e014f01b6a20f621d2149d1b3920b0216814a31b13205b216c14331bd01f4f212b140e1b871ff920f9120000aa122d1900004e24af28002a6222f324162ab62bc1236f25d52a632c98237827972cee2d2a246228182d9e2e8c235a28022da52ec621b527662cde2ddb220c27aa2b0d2d4323e4264e2bc92caf23f626352bbc2c2d244127352bc52c2624f827302bd82c72242328472bdc2c7f24ad28412bd52cf324f228a72a762cf5247929d82aad2c55256527ac2aac2cc9226527de2ae82c9422d625662ab42c07214f25072a642c6c2073259b29072c3b2042258529fa2b1520f7247e29dd2bb61fe8247b29cf2b581fe0246d29c42b051fe3248129bf2b7c1e6525ea291b2c291f15252c2a8c2c9b1ffb238b296c2ca61e8323a228612b421e6c234b284b2af91dd8222628252a1f1dda221f28072a5a1c55236728492a6b1a8c23bc28b82ac119ac23e828e52a6a19ad23ff28f32a491a2823e728d22a7a1b45228828542a421bbf21f3279029fa1a5321ea26e728c41af220dc254028d81a2b20da243b27001a371f31240c263219761e6b232625a718191ed222a4243818bc1d652265249c177a1dff2122244517461da721d223b316071d5f216e236316bd1c24211d230516751ce220c622aa153b1c9d207b222315e51b522022229214941b1720f6212c14941bd31fbc212c14f51a4d1fa2214513e21a4a1f25216a120000f0140418000064239827ef28f520d7243b28d929ac21b22497294b2bb222a926a02cc72d17240129862fd730ec22ee28b82d542f0920ef251f2bac2cc821f225222a082ca122b925022aed2bb522db251a2a052cdc22fa25362a1c2c5723a326802a502c97231f27b42a8f2cbe2313279b2bea2ce42360278d2b082dfa2200283f2bec2c152176279c2a862c87208c261c2a292c2920c825b829fd2b7d2055256f29a02b7120f32428293c2b1f20b724fa28082bdb1fa724f228042bf61ebf240129292b1a1fbe244329c12b7d1d0e25082a4e2cb61caf25152bda2c9e1d2126772b012d3d209024e929002cdc1fe4222d28fb29bd1d8b239f275f29381d862360273a29dc1b552337272829971939237c276829b11853236a28762a081719245829b72b66182624f029132ceb182124fb290a2cb21bc7235f293a2b801c2f233928cc29901c6c21ac26aa28cf1b142032256c27df19061f3d243b260f19ef1efa23b825fe18b21e99239125a218b21e14234d2571181a1e6222af240c189b1df6211e241f17251d96219e238916d51c54213523de156c1c0421ba225e15eb1b70202e22cf14491b0520e5213814131bed1fb1211814fd1aba1f9121b213391b941f5121f4132a1b4e1f4921e413491a221f0321db114815e51f9b201209a321e6242126891c42232d273c28f820a121c0256c2803204124512af72b8120c22ca9320434fc1e1127322c242d572467244128b12ac82129245c283c2ae0207224a128212a7621d324c928722aed213b25e228962a4722e7255a292d2beb228f25fc29fd2b83220527082c322d6f234c289f2c832ef2214628682b7e2df71fe925022a182c6c20ea244029362b5f20e124d528ff2a7a20b924a528882a5520a9247e28642a6820a9246928222a472065244428eb29d11ffb231228da29531ff3221a28ec29fc1d7d222f284d2a1f1c4c235329f32ba31c7522b528392bd71ba81cc4245728a71503215d252028ef1a5922da258a28921cf621e025ab28761c622104266828c01b7021fc255f28ae192f22c026c22804182523e528952ad70cbd24b32b162d6c0e87255e2cb12d371c51243f2a282cba1d07218b277e29cf1b242093251c28f6194d208b240b26f319f41fcb23692580194e1f0023d324d9187a1e3a2247241d18121ee1211a24b617c51dab21082455178d1d7e21e1230e17621d3821a6238916211df8203523f015f51c8d208522bd15bd1c482048223815851c25201f22fa14401c0220e9217114c71b961f9d2110145d1b581f432147133a1bec1e3e2124136b1a0b1f2a21fb110000d11453150000f11f40220d23831b1d2263262228561f57226726fb27401fd91d6d210c23311a7f1c9721d32324193c245827fa28d82000256528112ab82138256a28fd29d2215a258628fe29d1216925a528202aba215e25a728352a88215125bd28542a7b212425c6289b2ab820cc24f028022be81e7d25b129fd2baa1ea7259629ce2bd21fd024d828022b791f9024a328812a161fc024a428642a601fa42457280f2a351f75245828f4296d1f5d242928be29061f38240728b2298d1e2e24f427aa29411e2124aa2788292e1e8c23cb26f3286f1df0214a2585271b1c1b205823a32537191b2056230d26c118ad203b24b826ad19fb205a24f826541aed205124fe26891abc203c2401278d1a9a205924e8265e1ab0203b24e126381a131c0c251b2898134327772d0a2f559925292530653181207e2002287f29fa1a1e1e2a24582618191420dd23cb25551af11ee02205253219181e6d22b32437182d1e1a2274241918d01dc32137246317bc1d9021132449178a1d4b21bc230a17351d0d2161235216c81cad20e122ce156c1c70206b225e15f11b2e201222d214851b0920cf2191142f1bdc1f8c215c14031ba51f5f214214e21a6f1f33212e14c21a2f1f1821d313471afb1e1921ea127e1a651e76200d120000fc161b1a00008b2190253727f71e91210f26ba27271f572119255826f51d881ff6208d2236197b227c245026f21d17248d274e2972203f243028a229db2091244428b929f720cf244c28bd29f520fd246028cd290021f1245d28d029d020c7245528bf29a7203c2548289629a8207f2447264f28fb1e3620c72360258a1a07235a265428751d3624e0275529c71e2624c0275c29711e4a24b1276b29a91e63249d277429d01e79249b277d29b11e762474278429ad1e6124542773298e1e4924312752296a1eef23d7263529291e13236d26d928b11dfe21ca257228a71c7a210f251328411c03218524f026381bda2042249826b61a942028247526551a4d203324b126f3192b203d24c926c41965203b24d226141a29200f2495260d19bb2002246e263619311d2f21f923d6148d126218681b9702871cb41efc20dc10791e342274244b18551e002266246118431ed0213f245518b11d4f2107248e17811d2021a523fe16471d0a215b23b516fe1ced2023235816bd1cd620f8220516791cba20be22af153f1c91207b2228150b1c62202b22e914c21b2720bb21b6149f1bc01f5121a0146d1b321f03214c145c1b021fcc20b013951bc91ea7207e13c71baf1e7320cf12ec1a771e6d20d712501afe1d15202b1100009219ed1b00806221c5253727da1daa217e25ee267a1e992014245125211d791f3123b224461cc420e9248b26731d45230527a5280e202124b62720295f202b24bf2740296a202a24d8275c294b206f240d288b299220b2242828a829b520ab241528b4296a200b2472274c29a61fc1223a263c28331e2f22e525fa27801d5d23b9267a28571eb5231d27c3286b1ee9232d27e528971edf232b27f628551ec6231727f328411e8623e926e1280e1e5e23c226cd28ee1d0e238d26b528ad1db12255269928621d642232268428531d1e22ee255528ec1cd921b8252b28b51c8c217625f927771cff201c257d27051cb320c82400274c1b61208524a126cd1a1c2044246526621ada1f10242f26191a971fd9230a26ae195d1f992302268219511f6223d5254519de1ed222dd24c018521c8d20332239160819ad1e3221ad123f1bbb1faa229213c81c5f20fb23ba14931cc720b0230915f01cf520dd23ff15161d0721d9232d163e1dcf205f235d164a1da320f7221f16371d8420d922be151d1d6920aa22a115c81c47208f22ff14711c28206622e4140c1c09203f227514761bbe1fef211c14c31a391f8d2172136f1add1e392116133b1a8a1ef52082124d1a761eb8203a12d9193a1eca20c711f119321e98208b12a31f5022c4232d09322cf72dfa2e8020c630d5321934ee2179329d33d5341e213f334b33be341820583368322d34ce2146339130a431c0212d34d52e0230a91d1f34812db82e961d5c348b2d442f6aa58234bd2d122fa3a79b34632dc02e6ca87f34042f5a3096a5db343731e53208a60a341d2efe2fc1a72a33102c0a2eaaa19033162f8f3068a65834db326a34dea23d325b32153494247b2d972e2331a42004290e2af92f17224e26a928e12f5d207c25ad282e30471fc425bc2880307a20172439286e30951e5a24032c9931fd1f3c295b303b343e239b2b60331236a822c52b75337035e69ba4281330803153a08e25e02ed730649490210d299229011c741fb1245127351a0820d4242327b71a1420c724ef26cb1a611f9924ac26f019c51f6e247426081a221f31241e268a19061f0924d62574194c1e86237a25e418f01d422326259c18771de322d2241718041d85227a248117ca1c2f224224e516ba1ce4210324ce16a31c9721c8236a16671c4f21942317163d1c1e216023a0151b1cfb2009237315961bc820fa22d2146c1b9e208b22b714de1a552090215d148c1a0b200a212914531afa1f1a210514621af81f2021c013651ae71f1a21c4135a1aa41fef20b613b719311fbd20f012661a1a1f6720af12ce203625da2528959129be2c142e1323ac2dc52e673001242630012f533017226431602f8930ea235f326e2f9830321f5433482f963023a04034bb2e1d3014a8e233462ea72f74a054349f2de22ea5a84234882db62e0da96234c02d5c2fb4a86e34b82e5930c1a84334c92ff93042a63334e22eab302aa60734382e6a3001a5f43308303231bda6793383300b322ca71f3122308631f11a102eb72ee7307320272a432d9330b1202428352c8830432122270c2cad30bf229e26472cc3300223ea25aa2c20314423e926582ddd310c249727d02ede3220243d289d2fdd32a0210628322f253217180527412ed2308d959325b22c0d2fb998e7236d2a9b2cb0187c222f28f429241b5d21a7265c29e8191e2115260f29ca1a212190255b28191bae204525f627011ba21feb244827b6190e1f8c24a6264719221e3224fa25c3181b1ed0237c259118061e5b23fa248218d31dec228f245c18b11d8b225e241918971d2e221d24bc17331dd421ce233117cf1c92216f236216681c4b212723d915351c1921da229515f71bf52099224915a61bd320632213154b1b97201622a214a31a5320b7213714011afc1f3e21a113e519a71feb202813ee19831fc220dd12161a431f9620b412a219121f8e20e211fe19ba1e2e20f012ed2281260027a696b928612b922c11232a2cc82cbb2dc3236f2efe2c1a2e2e24cd306f2da32e9c24ed31bd2dea2e05257732962d072f04248733f12d702fcd161b34b72d3e2f2ca428340f2e982f0ba749341b2ed62f1da86034402e1f3069a73f34b72e4b3051a45f34f32e7b3071a484340f2f93305ba94f34b02e79309fa80a34c42e8230d8a61a33162fa23038a3db30b02e9f3063144b2dc52d7e30931ef22a792db0308320d128f72c94301f22dd28da2ccc30a121ea28d82c493194202828f02c9a313822a027322dcd31a52320275f2d9a31232204277c2d2831d8214e26412dda30a81fc225c82ce32fb11d9424ac2b6a2e7f1b6c23632af62c561b21231c29f82b201cf0212228662a8b1bd1216b279529b81b4a218926c628511be320fd255628c31a69209a2526281a1a23202e25ae27b919131f9c24d2261819831e34240d26b018591ef923aa259218191e92234b256418f21d43230b251d18c31dd822b024f917781d552275249117671d0c2237242b17321dbe210924e516dd1c6b217e2374168d1c2d211223c8150c1cef2088222415671bb8201322b414e31a7420ac212e14a31a3d2061210714c41a07202621d513b91ac01f0e216713891a951fd0203213ab19ff1ecb203e12781a1d1fc0206512d32257236b24ea9c2829b12bec2c43223a2a442c422d0325af2dd12c162e42262c30042d182ee425a7313e2d2a2eca24bf327e2d922e9e1f9933a12dc92edd1622349c2dff2e9a9d4d34c42d3b2fcda27234ee2d982f85a48034402e0c3093a48b34872e4a302fa38c34a42e60309fa47634a02e733089a45b34652e88306da41c34522e83307fa21033612e8430c99cc0300b2e50304b943c2d732d2930bb90fc2a832d53307e1f46292c2d6030cf21f328ff2c7b30d9224b28d02cb8306d22aa27d82cd93085214c27cf2c1731df210c27cc2ccf30792105266e2c9830812095255d2ca82fb91f5e25d92b8c2e841e21254e2bb32df01d9f245f2a0f2d9c1d35244429162c581d64227b28ef2a3e1cf2210628eb291d1cbc2115272d29ef1b59215826a028661bcb20e4255228e71a6c20802502285e1ae31f0f253c27ae195c1fb8248b261719bd1e60241426da18821e1f24bb25b018321ebc2358254918bc1d4123ea24ef17381daf229b243817e41c44225a247d16b81cfb2129244316831cb421db23fd15371c662179235b15041c28210b231a157d1bee208e22c214141bbc2028227f14e41a8120be212f14171b66208f214e144b1b6e20982139143a1b4b205c212f14571a072021215713961ab21fee20e112a1216b24f524339aa525af29032b622026290c2cf92c74250b2c6a2c9d2d82269b2ecf2cdc2d8726f830092d1b2e55257e32682d772ec4246c33842db62e8b230734a72dfc2e5e223834d02d512fc4206234cf2d8e2fec178234022ee52f1c9ea134372e1b303aa1b234382e30306da3a0341b2e373039a195340a2e3030369e5234f72d4430cf17fd32142e5230e51f5830d32d18306521a22c422de42fd91f4f2a592df92f74204c29212d1e308921e428d42c6530f0212e28d32c4030502184278d2c6f30fd208827712c8c30ff20e0275b2c203001213b281b2c782fe6201126da2b3d2f5e1f7925b02b512ef41e2b25132bb62d911e6a24002a122d9c1d7c244b29942cb31d8323d128e92bfc1c60222c28a72a971c9721cd27e029571c4721f9265e29e61bf3204526c428681b9d2098250528e71a3b200d252027181afe1fba24b026c1196b1f73244e262219de1e3924ee25c0187b1eea2391254d183a1e772324252218d21dfd22cf246517901d902278241117631d332225248a16ed1cc621a223fb156f1c65212b236215051c1121d622e114a11bd0207d226a14ae1bb42058227214f41a8d2022220614df1a5f20c321f413b31a432081216113ce1a23204a211c132f1af81f35211c12771aa81fd920c112732020220c23a79912277929e02afe1cae29422c612de424f22a3d2c962d9725432db92cc92d6326d22f242d382ed826f531392d432ebd2755332f2d7a2e0a2718341c2db82e292459345c2d082fe9208634ad2d672f1c219b34d12dd02f3421b834102e1630651ebf34142e1d304a98c034fb2d1b304b98c134d52d1d304c188334b62d2e3018213933af2d2c3057234630582d9f2f3d233c2c032d5c2f8b20082a3f2d712f42200629f42cd12fa91f3029992c12308a209028882c1730c4205027572ce92fa520cb26352cc72f15217b26282c8e2f0821ec25e42bfa2e99204325ae2b6b2e16206625482b9a2d0a207d25942a1e2d1b201424b1299e2c1a1e8a232629b52ba41df722a028f02a361dde225928b82a231db322ee271f2a031def21d4264929711c2e214826fc28c01ba120d925b628301b56207c251f287d1af91f25252727f719b31fd624d126c319571fa12481267e190e1f602413261419451e07249a258418c61d8a234625fd17a61d3423eb24d117851ded22aa2453173c1d91226824f216e31c322222243616a81cd721bb23eb15611c842138235115dd1b2121a222c614561bc62048223f14fe1a8c20f521b313ab1a5520ba21f712ea1a3c208e213913d31a2c20ac21be12df1a07205c21f4133e1eb12123241c9557262929492afb1eb028ff2b0c2d4926012a4c2c862dde26192bad2ced2d1d27972d072d102e2f28d4301b2d122ec528dc32222d612e742810341a2d7e2ee2265d34512da52e682691347c2df72eac25ae34942d632fc224d234c22db12fe624da34c92dbd2fac23e034bc2dd12f8221f834ae2dd52fdb23a334552db92fb724f732582d732fe625442f582d642f4f24ad2bc62c472f6b21e3290b2d4a2fd220e028ba2c3f2f44207728942c502f6a202528752c322fcc200b283a2c512fe9205426642bd62e0520b2251c2b552ee11fa725092b3c2ed21f63250f2b3c2ec21f0f25c32af42d921fe6249c2a052d551f7624f729a52cad1e272461291f2c371e7d23ac28602b9a1d42237c28df2a6e1db22243285e2a021dbf21892775294d1c15219b26b9289b1bd12023265a28351b752095251f28ab1a32203b25df27471af51ffd246127bb19741fa824b4265e19961e43241626be181f1efc239e253c18af1d7e233725dd176b1d1623e8243117461dbc22a72400171a1d63225f24c516e71c16221b243b16a71ccc21ca23e915601c7e2160235015091c1c21da22e6145b1bce2077224214e31a872034229513cf1a662015221d13fd1a4820f621b213641a2e20ca210a13c71ae11f3821151314194c2028214d8c76258029ba2a8c209229232c3c2d5f263c292b2c972d48263229e22c282e8726662b9d2cc52da027942ed42cc42d5d2892312f2d1d2ee02802345c2d9e2e4d2895349c2d0a2fc327c734652def2eef25e334742d2f2f122601358a2d6e2f372608358e2d6c2f40261635a32d972f52261d35952da32f8227db34862dd92fa9282a33262d452fb0273c2ecc2c8c2e0c246f2a8b2c8c2ee8204a29d92ca82eee208228982ce22ef7204628762ced2e30214728382cba2e6f214727a12b8e2ed4206e26362b3c2ea120a026332b1e2ec52085263a2bc22db220d7251f2b4b2d5f200f25772a162d921f8d24052af92ccf1e20249e29352c2c1e2f246129252c431ead230e290f2cbe1dd223dc28982bda1d762345285f2a951d6422a2278029c81ca721222752293b1c072179260b29861b8d20e5257a28cf1a33206a25d4270c1ae31f1d254927ae19c71fe524e7266119511f97246d261019e41e4c2401269218531e0224a2253218271e89234525d117e41d1e23f7247c178c1da6229524bc16471d54223e246816221d0722ed233b16c71c98215e238815691c2f21e3221b15301ce3207d229c14351caa203f226514171c8220e4210b149f1b51207b218813a81a0a2049219412681aa71f06215512e71a2c201f23688f3f25db287a2a39203728ca2bd32c8925de28582c7d2daa266029752cac2daa276a29932c052e4327232c192d482e4328c12f6e2d942eb5280533f62cee2d8f286f34772de62ec228e734532df42e272803354c2ded2e3f2829355a2dfe2e94273e35482df12eb2275b357c2d302fdd2780358d2d3d2fa92822353c2d7b2f82299f32c72ca22e0c29802c672c542e7224b329572c6b2e47222829732c922e43227428632cb12ea821f5274d2cc22e48210028122c7c2e4f214e28ba2b2a2e3a212628652b1b2e0921da26ec2af42d2920fc25d32ad12d9b1f7325bd2aa72d8a1f3425332a0a2d7e1f13248829a32c191ed12370290b2cd91de8231e29af2bea1dfe227728e92a3b1ded223828742a2f1d8c221328712ae61c1a229127282a911c9e21fe2677290b1c7621a326d2288e1b2321442684281b1bdd20ec253728ba1a83208c25e1273e1a462034256427ea19dc1fce24e32670196b1f7e246a262219cf1e2424f7258518491eb9238a252c18cc1d322321255e17891dc822c7240817611d582271248816091dd2211924d415a71c4a217b232015631ce220f022d514271cbb20a1225714311caa2043222414f41b9320f121dc13ab1b6f20a0219413301b5620a9211a13a41a0e20a221f0128a1c58218823ec92ab258f291b2b3e20a1281e2c2c2d3526ad282c2c172d8926cf28782cbe2d9626c529ae2cfb2d9327162ae22c1b2ef6266c2d202d002e0f281631122df72d07292e34512df42ee7291635432d5a2f75294935612d192fac2968354f2df52e312986353a2deb2e4d299b35582d162f6229c135312da92e2c2a5a354d2dd62e592a7c32192df42ef228e72b3d2c622eeb222429602c8b2e5f21a029712c542e32220229492c3c2e842147282c2c1e2e6f21a527172c742e4a21e726132c652e2a21aa26842b0d2e2d211b26062bfc2dbe20aa25052bc82d6620b725d12aef2c4720bf25e429a92c4d2044245e295c2ca01e4e231f292a2cac1d5323ef28fe2b7b1dd5227a28022b1d1d41235d28b22a6d1d252344284d2a251db122cc27b429d11c32226a277e29761cb721142746291d1c3121912609297a1be4201b26a228c41a472092250a28eb19eb1f122540277a19491faf24be26d518df1e69243a268f18761e2724e4251b180a1ec2237825ac17af1d5a232825e716631df822e7243c164a1da322ba241f161d1d2b227024a115661dae211e24f215731d5621a1230016961c1c210d230d15181ce420a7224714221ca0204f2216141f1c5d20a821ae13691b07203821e8121c1b8a1f03210713d41ec7210e243595c5248529cd2a5221de27ad2bce2c9c2507293f2c862d752645299d2cc92d9f267a29a12cfd2d9226342a032d4b2eeb268f2a232d7d2e9326cb2d2d2d2f2ea9288532c52c442ed02a0735b02c112f882aa835952ddd2e6e29d135542da32e9529e435422da82ea829f435382dc22e632a08363d2d8b2e272b95351c2d712e412cc231e62c202fb129b8290b2c3b2e9f22d228502c092e2022c628412cfa2d56224928102c082eee217827b42bc82d6121d926692bee2d2021ba26432be72d08211426162b392e60205925cb2a8c2db31fda25c62adc2c0c20ac256e2af62cd91fad250b2a9d2cda1fa8248a29722c711ef52316293f2c811d71242e299e2b251e7f23e028482b2f1d8c234828bc2a381d8f220228f6295a1c60229927a3293b1c282247275629161cf221fc26ff28e41b85219626bc28531b292134266c28d91a8820be251228031a182056257b27aa19401fef24e0260419e51e93245e2693189a1e4624f5256118661e08249c251118141e95235125b917cb1d202304255c17731db222ba249e16e51c2d226624f115681ca021d0231a15d91bf920b4228b14631b6e204f221114051b32202b22bb13c71a4b20332215134e1b59203b22a213691a5d202822b212421bf01f8321fe138620a1203d24eb9754256629ad2ae4206c28152c062d6e257c28952cb92d65263b29912cf62d92268229982c062eec26c129e22c3c2e3b270b29012d4b2ee925cc2a1e2d722e3d26602f5d2dab2e4f296534322df92eb12be435752dfe2e282c1d363c2dd22ef12b1d36212d842ef12b55361f2db52e1d2c8436882d152ff82cd935102dc72e732d96306a2c3b2e4f297928012cdb2d7122bb286d2c002e142334282e2cda2d87228127d42bcb2d9d212f27682b872d2c218c27452b6f2d38213926df2a7a2d4e206825d22ab32dc91ff1249a2a2d2d1e1f3825772a2d2d841f3525582a1b2d801f3525d5294c2c801f5f248b29522c4b1e4c23f528182c411d33243e29d92b0c1eb223eb28442b8a1d6a23c528ff2a211dda224d28472abd1cb422d427b729a31c4b22562751295a1cda21d426f928c41b65218026bb28291b32212d2674289a1ad920ed2533286f1aa3209725d627e4192d2014252a274e19f21fa624a026d3185f1f442421267a18fa1eea23b1253c18ba1e76235e25c917641e0a230d256617d81dad22b624c4168e1d552269246e16371dce211824be15e71c5921a0231f15d41c022119230b15921ccf20b9228414531cc7209c224614081c882055223614351b51202b221f13691b1420932153133f1790205c23c68b1324c628dd2950204028082c092d94250d28192c2c2d01266528492c762d4426c528832cb52d88262629c82c2a2e9d261229d32c232ecc252d2a2b2d3c2ed725ff2bda2c1f2e6f263b310e2d0a2ea52a8f35042de22e2e2d5b365f2d352fd82c6a36fd2ce32ee42c87362b2d542efa2cb736c02c1e2ee12dfa35a62c662e3e2e172f482c062e4e285c288a2bf12dc9218128312c272e3b229a28f42bf62da0220628fd2be62d91217a27bb2ba92d6221e9262c2b5c2d2c21e525b42a0e2d9420a125b32a142d5f204a258e2a132d1b20ea242c2a3a2d5b1f31251e2ab72cc51fa624de29972cb21e87249a29872c441eaf247e29292c371e98245029a82b191efa23a728b02a4b1d81238028842afb1c0d2358287f2aae1c002324282e2aa51c7b22af27a9294d1c12223e273829071cc021e9260029a11b8821a226c128571b1e2155268328ca1ab020df253628381a2f205d25a0278d195f1fc424af26e418ac1e542410266d187c1e092499251f18541e802339250518301efb22e4248317d01d79229724bb167c1d10224b245916011d9b211a24cb15711c4d21cc232415181c1d21e023bd14f91bf3206a236414121cc320bb2241140a1c762042223814b71b2320f0213013dc1a751f8a21f113321ab42010233f8daf240129062a09200f27e72bf52c6e251128122c172dea257928432c692d0026cd28722ca12d08263029a12cdd2d1426be29b32cec2d91262529ed2c732e9825b828202d2c2edd24052c922c3e2e26274b33152c042e0c2d5f36a02cef2d042fee36062d5f2ed92ed936db2cde2d612e7037192d6e2eee2e2336642c4b2ec22ecf2c962b6c2d6226e227cc2b6f2de6215d280d2cba2d88227228872b612d672273286b2b5d2d6822bd27482b582d9221c026102b3c2d0d212f26cb2af62c7420b225642a062d1a200925312a3b2d401f02253f2aec2c361f0225dc29c72c361fff24d2294b2c321fd3244929e92bad1e5d242229302bca1d5224ef280e2bbc1d2924b628d22a491de6238b28812acb1c73235e28452a861c2b233b280b2a5a1c04231628cf29421cbd22d3279029cd1b432258274229401bba21d926e528f41a1a2149267628321aa720c9250f28a6193920502570272019d21fea24cb26bf181b1f7c243d265018a91e2524cb25b6172d1ea1236e252617f41d1e231025e416851d9322bb2464162d1d22225b24fe15d01cc22104249215791c6b2150232e15261c1221d622cd14db1bbb20662253140f1c792007223d14bd1c4020ba21af14991c1b20a9214914c61da51fdb203d10e21cd12034223d919f25552a182c39235726882b462db3247727c22b422d3725bb27462c7a2d4b2552287c2ccb2dcb25ab28a42c112ebc251729ae2c132e1c262c29c52c332e0f260f28e02c012ea4241329b82c562e3b251c2d852c692e66282a353f2c142eda2ef6366c2ce02d07307137f32c042e4f30af37012d752eaa309c35bc2bb02d0a30702ab92a922d2e25f426292b132d9821d0278d2b2f2d4922bc27312b0a2d012260272b2bfd2c852122272e2b032d5621e426002bf72c28215826b42a102dbf20f725792a0f2d20201825f2297e2cc21e352577295f2ce91e52246a29572cbc1d69245a29382cda1d7e247129132cb51d7e243729ce2bb51d5e240429532b4d1d1524e9281f2bf51cb023ac28b72aab1c1d237528692a511cd6224d28332a261c92222428f129fa1b4a22da279c29a31bf1215d273d29371bac21db26e428e31a4c21502680286e1adb20c5251d282b1a3e20352572276419991fd024d426d418271f7e245d265818d21e3024dd252418b71eba236c25c617ab1e2e23fe24b817401e97229424e216d91d1a22312470165b1dac21c0239815d31c3d211f2350155c1ce0209d228e14371c95203e222a14371c76200922db13431c6020d5213614451c3920ba218c11c51b032079210f140000c01b411f000000278b2a292c1a24af26ed2b032d4b242828fd2b3e2d392597274c2c6c2de024e427612c952d12254428832cc82d5c255928872cd82d38259728852cd62d40255628572ccb2dd6244928b92cd42da9249229042d052ebe25ac2e432c5b2d1f2a5d36b62bdf2d1f319437e02cec2dac311b38fc2c2e2ee93159353a2cd42d662fc3290a2bb82df9235427702a262d472191274f2bf92c73215427122bec2c7c213c27fc2acb2c6a21ae26cf2abc2c30211226882a942cb720ad25522a822c3f209725372a7d2c062082250f2a902c9f1f4b25e3294e2c061f9e248a292f2c211e66248729132cd61d20245e29d62b791d0d241c29892b9b1df92311295b2b4a1d9d23d528e02ad61c6f23a028862a831c232372285b2a551ccf224c28242a221c8b222928e629931b3d22de27a629391b002280274829f21ad921fd26ed28c51a5e218826ad28371ace2011266728d5192820852509284819631f0b254f27b118221f922486268818b91e1624c62515188d1e84235525f417781efa22f1247d171f1e8922ad241617ac1d16225c249116e71c8d210024ad15631c1d2134231415051cc62079226d14771b7820f3211c14231b4c20bd217513581b34208121ac13bf1a08207d214912ec1ad71f31210f120000111ba51d0000cd25452af12b4a2304267a2bbe2c4a243e26012c5a2d46246e27642cb62dc6240b28aa2cf72d14252428be2c182e34251e28972cfa2d2c251328712ce62d3c251a285f2ccd2d63251728542cc82d4125ad278d2cb42dd2248c2a642c052e4d271c32b72b832d9b2de2367e2c092ebc31f637a52c6c2e6832f6321e2c5c2dcc2d5f28a52a8f2d87231227cf2a5c2d172275260d2be02c90215b26e52abb2c4b213626a82a9c2cff20ed25662a892c9a20a9253b2a6e2c3c206225152a6a2c07203825f329612c841f2e25dd29402c751f3925ab29172c3a1fe0247929392c781ea3247129482ce41dc8248429292cce1d8a244e29f92b411d5824f7285b2b071d0124ad28bc2a691c88238c28862ade1b4a238028702a9d1bfa226f28462a4a1bc02261281e2a6f1b78223328db29201b0622fc278c29501b93215b272c29151be9209626bf28841a6420f1255528d419fc1f6125bf274c19a21fc224ed261119301f59246f269118ee1e0724ef256718561e50236c25b117fb1dbf22f22443177e1d2a2284245c16071daa211424d215c31c44214b238315571ccd208922c714271c812022225714581c5b20e1210c146c1c4c20bd21be13861c2a2078216813d41bc11f35214b131d1c3a1fda20cf110000341c6c1d0000bf24ad29332bc422ff25972a122c05246c26b92b152d37246527922cf42d70242f28d02c462e6e245c28ce2c322e7e242028872cc72d5e24d827422c6f2d6024e1270b2c412d6524bb27d82b242d6c242828202c4e2da3244829382c9f2d9825f92c4b2c292d20296032512ceb2cc02e0634ad2c472e0830c22b412a602d8f274726872a522cc3214726a42a702c682155265b2a682c46212c26412a602cf7201026362a672cb520d2251b2a632c85206d25e2295f2c0f203125c2294c2c7a1f2d25b3291a2cde1e2d25a329272c941e5f25b3295a2cd31eac249e29862c331e02245329372cc51d0d2414299a2bd51dd323ba28f12a6a1d1f2487287d2a011d972374286d2a651c59236a28692a0c1c34236f28662ae61908237728622a8d1aed227e28542ad81ad62271283a2ac11ac72262280f2ab31aa8220928a329541bbc210627d628a31a5a207825a4274919b81fd424de26b018351f892475266018f71e1824d5250818761e612354257b17021ed222eb24f416bc1d5d229424a316891d15225d246816211dbd211524f015cd1c50212c238f15691ccc2064221b150d1c8e203522b014de1b6120ea2155147e1b2a20a421d413831b01204b2123142e1bb81f47214912e01a631feb2092130000c51ae11c00007e24f828d52a0a236a25782a1f2cdf232426772bbe2cb7231728f12c652e82237c28462dcc2e34224928f42c8b2ea822bc275a2cb62d18247127d92b352dd4224a27a12b0d2d11248e27aa2b112d6d24cb27ac2b102d59241328b02b092d502471285a2b152d7424be28582b012d9f24282a622bf62cd3251c29982a212d8b248f26822a062da6217e26a82a8d2c68213226362a462ccf20ed252e2a5d2c9a20ce25d0290c2c5820a9257e29a22b3c202e255b29872bc01fe3245329752b091fe8244e298f2bca1e03256029922b161e1825b129f62be61df9243c2a802c511e6c24e6294b2c5e1e1124e4284d2b161ee9237828872aeb1d03233628602a3f1d84221e28232a531cab233b28f729471a0324a328a72a3619c623ec28db2a7d19bc230529ee2a06195f23ff28dd2a091a7d22b228822a691aea212228d1292e1a8a2128271629191a302116265028011a862015255c277e19911f55242626cf18a51e8b2340253918431ee722ac24f517cf1d762265240d179c1d0e222d24cf165e1db921e92337160a1d77219123d515b61c34213e2374155f1cf420f3220f15311ca42082229e14e91b52201d2222148f1b0e20fc21e613981bae1fc4218113041b221fc22189121f1b411f54216e110000c91a7f1c00000a2402282429a521c724c3280e2a4622fe24762a222cb2223428f52d6a2f37241c29732fc130ea21b228d82c282e291fe825a02a4a2c1622c125222a0b2c41229f25352aff2b6e22f525442a132c262339267a2a412ca523ad26e72a952c72234327bc2b0a2db0234827182c5d2d4c235c279f2b342d4c21fd271b2be52c2c206d27502a692c4c204326e929132c2820b625a029f52b6f2046255329942b3e200d251e29342b1020d624f528062bc81fa624d428de2a381f9e24c928c52ae91e7d24c028bb2ab41d80240b29122bf51c2c25fb29342c3c1c6226602bfb2c3a1db2257f2bde2ce11f8e23b3289c2ade1dc1226e274729dd1c3f2354272729661cea222a271c29d51ac0222c272e2925193a2305280a2a4e1534240929632b1f172224e029fa2bef17f123002aff2b9b19c6237f295d2baf1b3c237828242af71bd62157271d29161be920ce251428f6197a1f8f24ae26c018051fc023af2576180a1f872385257918921e1c235025fa17011e7022cc244a177f1d0e223b245d16ef1cb521d823b615911c75216d234915311c0d21c1229e14dd1b5d201e225414191b0320cf216a132e1bdd1fbf218013261bbd1fa72110133c1ba21f622126134a1b7d1f6f213413021afa1e69219e1204142d205b21ab09b222bc257e27941dc2239527bc2818210422cc257b28ba1f3d27252c602c65205e2b303130325e203524cc295a2b2b218b249128592a94212f24ab28222ae720c624d928852a9821f324fa28be2aa921952550290c2b1122f525c929d92b4f22de26a02b222de2220b28d32c542e4722ab273b2cb82d17210726f2290d2c0521a5253929152bdc203525f028e82aa220ee24cd28b42a3f20e524af28842a1420c5249328612af21fa8247e283e2a7e1f8d245d281c2a111f77243828062aae1e4d242028192a311e37241328fd295b1ddd2238289d2a5c1c8b217328ba2aca19601cd5243328ac128420fc240528f9188521c6256d28f31b9d21da2590280b1c0021c8255d28eb1a2021ec255728ef1900229b26b62893186c243428c629fe107524a42a632c0708a625702cd22dc91802251d2bb12cf31c872114287f29561b9320d7250b28121a66209124552657193b20d6238c25e61802203823fe24a418a11e49225224ad17241eea211a24c316c51daf210624ae16961d8421dd237716521d43219723dc15041dec2024238615ed1c872092222515af1c4b203e22e514811c27200d227314351c0020c3212814af1b8b1f8a2198136e1b601f35215813271b0e1f46211113bd19d81e7e21521200000618fb1800807920a924ba25f51b74220727b428611f2322e925a927ac1e6a1bb91f4021a41732207a24ad25901ce6243a28cb2953210d2593284c2a59215d259b28342a87217a25b9283e2a56219225cd28532a6d218625ce286b2a39216725c728532a1c21e72484282a2a1520642475286c2a551d86242529252b011e1a2532292d2ba21feb24d628c82a151fb724af288e2aca1eda2498285d2ab61ec6246028122ae01ea7246c28112af61e7f243d28de29ba1e56241428bf293e1e3624e7279429101e2924ae277629c11d07245c275a29581d9623a026c128d21cc621c8241b27021b951f0323df25631807209e233d26aa189e202e24d5265819ac204124d026691994204624db268f1930205c24f1268f19cc207424ef26a31a7b1e63241a278117f6223e2a322cb80c92299c30fe314b16ab24f02a7b2c321e1f1e4b246b26681826209123e925bd191e1fe5220425b918391e8f22bc24e817421e2e2271249917da1dd8213524c616be1da1211924a6167b1d5d21d02358164d1d242182232316ec1cc420f3226b157e1c76206922f214ed1b2620fc215d14c11b0220bc2145143e1bc01f7c21fa13151b931f5821cc13f91a5b1f3121ae13f21a321f18214113691ad61e1b216c13ab1a3e1e6820761100003316701900809222d6257827c51eeb2181261b28701fcf20d324fe255d1d0e1eff20a92230184b24e0251228e91e41241128ae2962206b245628d029cd20c2246828d629e720f5247128e1298c2025257e28ed29de2002257928e5299820df247328ef297820a824fc276d29c21f9c21f924b126321c2b2331262a28291dbd2400286e29d31e9c24eb277a29611ead24df277229341e9924cc277d291a1e8c24ad277b29091e7a24a6277f29f11d682485277729d91d4d2467276929b51d282448275429c01dcd2313273a29651d3023be2608292d1d6a224626b4289e1cc821c6255f28001c3f214225c627f61ae720c52423273b1a91207324d526cd1952205824e9267d1935204724e52695193d202924d126a01943201a249c262d195d20ed236f2650184a1fa922042561164116cd1aaa1cc5075919a61c381f70090a1ebe211124a6168c1e0922472429186b1eb72124241418bf1d58210a24fa166d1d2321be234816481d0f2170231d160d1dea202323d915cc1cc920f9228e157d1cb120b722f1144c1c8e208722bb14121c5a2033227b14d61b1820a7215014a01ba41f3221f713651b2e1ff220ba13491bf21ec7203313821bc61ea420ff12871ba21e74202a12dc1a761e6d2064128e1a151e1820080f0000b918991b0000ba21b2251027e71d60214b25b326d81d382027246d25961cfc1f5c230c251d1ca321b5253127211e78237027f228b21f2424e0273f2926202a24f22750290e2050240a2879291420a724362899294520392552289529a520ce242a28a0294620b4232e27ef28121f32221d262728561d5923be2687281f1e33246a27f928c21e1e2488272129651e0f248a273e294e1e082480274229081ef82368273229bd1dcb23312714299c1daf230f270029881d7823de26e628611d1923ae26d0281c1dd0228f26be28191d852256268f28b21c402216265428801cf421cd251b28491c5c216125ab27b81bee20f7241b27191b8120a024b0267c1a34205f247d260d1ade1f25244d267119a31ff4231b2648197b1fb8231026f718581f7a23e225aa18561f29232d25a918451d4c211223b2165e19ad1ed4208412611a151f4c224e121b1d3920de23c913e11ccc20d1238c14111dfb20df234b15151df920da239915421dc9207b237e15471dad2013238315221d8020e4221315161d6220b3220715bd1c442093226a14701c2d2068226314171c16203f220b14981bd31ffc218113d71a4b1f9b21c212851aed1e4e2113123c1a981e1721cf113e1a7c1ee720d11182192f1e0721d210b5193d1ed220f6118c219926a927cb19862b702f6d306f23912cb22d622e6a21d42df52c642ef0202030ae2d782f97196f31c22e14304ca0cb323c30f6305fa1f3337431e332d6a5d3336b311633a1a6143438305b31d4a7f8333e2f62304da2af33e42dad2fa4a57034ce30ad3183a5433422302c314ba57933112d212fa4a439337e2c052e57a31332412cce2d76a459318c2e543014a84531173368348ca2fb2edf3258344f92f8298b2f9531e922d625832b492fdc20dd246529fe2dba1e17256f292d2e541fa528932d8b301d21222cab32ad34b423092c98336b35619a7229c82f923127a05b245a2bed2d69955b24be296e2cac18e9215e28372b02175322b0269c288e1c09201c2514280a1aec1f04254527271a1b20ed241427e919981fc624ee267819e61f86249226b019541f4724262612190f1f1824cc25e218631eae2381256b18051e572333252a18a91d0823e7248317431db6229c24fc16051d57226824a916f21c07222a244916d51cbf21fd232416931c6d21ad238e15611c2f2177235115361c09211a23e014011ceb20fb22a314a81bbc20ae226e142f1b7920e12128148a1a2c2036219213671a1020282169136c1a0820222112136b1afb1f27211113541aac1f0221f812af19291fc420f011871a211f602058112b240e28b2280f1d8e28b42c662e4f24902b812dd52f7923f22d892ddd2e0b1e6830212e932ff999ab31c72e3930c3a16832522fbf3011a11c33f82f033138a5ac3302302c31a2a5f333f82feb300aa42634702f963017a66334912fc23034a926341a302031f7a75234ce2ff630a3a82e348c2e4030f5a8eb33d32d962f24a942332d2ef02f88a9f631072f9c3038a904304f309b31c3a4112d28308931de16122a152f0531b6238528ce2d523046231528322d72303524c227602dce30a8246e28942e1e31b124a128e62fff317323d32811307b32e61f5628522f4f31d60b0a27e72d6830f393b725c62cf02e74920c25682ba62d46989d223e29f72b0b198f210e28312a6f1a4c211f27c329d519e6218d26ea28291bac21bf253a28ed1993202725b927121a451fd8242627d318ee1e84249926cb18491e412411265918631ef52396256b18771e8e231b254a183b1e2523a724eb17141eba226e24b917ea1d57222e242e17831d0022f523b116161dc0219c232d168f1c6721462389155f1c2f21fa224f15291c0421b522d114d81bdc207c228a147a1ba0202c225414b91a5220c421c813271a03207d21c612241acd1f2c216a12101aaf1feb205512351a631fb620c911c719281faa206211ec19d91e3f20301202241b28af28041bb028e22bda2cf521672bf52cfe2dcf204c2d642d712eaf21cc2fd82d142f671c9c31df2d4c2f9a9b9c325c2ec42f779f2833fc2e40300ba0d333c12e2c30f4a31b34252f763007a63a34192f75300fa840345f2f763014a85034472fa3304ea74d34f22e833021a83334a22e5e3081a81234602e22305ea85233512e313057a8d3319d2e503091a7092f902e5f30c1a2342c552e7230a59a752a372e6e30781d5529032e743092216629f02d8930031f9329fc2db6303d1fb028272e1731c0224128632e10319b2231281e2ebd30da203a27c52d7330241fd0264f2d0330941d3525832ce02ef01b98246a2bae2d7c1a8d23182af62c091b45230929aa2b981b9d222228222a481bfb2142275429ec1a25216426aa283f1aab20e5254528ee1949208d25142872192420332593274319661fb924e226b318f41e5a2436269d18a61e1b24d02539183e1ec62362252418e31d612315257b17c81df522b72458178b1d7f227c24bb168b1d35223b246b165f1de42110243816f91c84218323c2159a1c4b2117231115391c0a219a22e3149e1bc22031223214351b8020bd21f0134c1b4c207e21a013711b1e203a215b13371be71f0f21b912f01aa01fcd2077120c1a151fc020fa11e51a4a1fb62042114518091f0f20c0869728ec2b142dfd24d229c82cc12d85243e2c3b2da22e6425eb2d472d4a2e84257330ad2d3b2f88223b320d2e8a2fa1154a334d2eb72f9696f2333a2eec2f48a22834792e10302aa53d348c2e223044a54d34a82e3a3058a54f34b72e4a305aa546349f2e4d304fa53f34b52e50303ca646344e2e7b303da780334b2e72305aa6a2314e2e393023a4fc2e222e223021a1122cc72d3630701a5b2ad32d1130d21e5829bb2d1a30ad20f328912d3830d922dd28a02d6f30a121b128c82d6830e7206b289c2d5f305d21a927652d32306f20f826df2cfd2f481f19267b2ce62e071e6b25fd2b152e0c1dc524462bcb2db71c4824462a2f2db71ca3234e29162c6c1cc4229b28b82a1b1c6d220f28c729cd1beb2118270d292f1b492155268d28b71aaf20f0254428f31958208925f4278519d51f20254c27fa18781fc824ac26bf18e41e6f2430266118ab1e2f24c8253c18441eda236025f617021e712302254b17911dee22b824c2164a1d832277246c16111d31224424dd15b61cd621072474155b1c8221af230b15101c37213c23b414871bf120b8225b140c1bb8203e221414f61a8120c721aa13271b622085217913251b5020752177131f1b302036210a13251abf1ffe201212551a6b1ff6204212751bf6204b20798d1228a72bfa2c1d25fd28942c8f2d8d26612ac72cd22ddb25122d1c2d0f2e4c25cd2f8a2d8d2e2f24b131ed2d222fc9213e33372eb02fe81cec33572eed2f28972a34b02e2a30a59d4e348f2e2830cea26f34792e2b3082a58d349a2e3830aea68234532e2c309ea66a34492e27307ca53c340d2e1030b2a27333102e24300c9d4f312f2e5430cc14fd2d002e2230bc1caa2ab02dfb2fa51dac29c72d043001200229a62d0f30f3208a28572d1b30412177284d2d2b306c2120281e2d4c3002210328f32c05306b203228bd2c4e2f62201d28a62cf92e11204526492c3a2f8d1e7c25d82b142e0a1e3225d72a512d6d1d3924182a9c2ca61c56246729342cc61cd723c128812b8a1c94222928552a2e1ce021d027a029101c6e2118273429351bf9204826aa28991ac420a525f427531a63202225232793192a20cc24bc264a19aa1f85245c26de18f31e4824fb256a186a1e0524a125ca17201e992338257017da1d2023e424c616a31dc1228f248616621d51223624ed15f31cde21c62373158a1c74214123be14221c2521e9225114b21bdb20912205147a1bb0205422d013e61a83200c223513d01a6220cd21bb12861a442092217212ae1a2b206221d911111a022038214f117b1aba1fd220ac1185199b1ed51eec8df828882bce2cb7238c29ad2cd12de0250f2acc2ce52d6325dc2b462d6e2e3725ca2dc22de12e6525d430c32dd72ea3248d32142e562f2e21fb33ca2db52f36176334152e0530f29d7434272e0130099e8c34222e163023a1aa34492e223045a1a134272e153052a3a534322e0d30b9a49c34f02d04304aa30234a92d243087a03731992dfa2fb6146f2d6e2d852f861db92a252db42fb21d072a5e2d8a2f261f3c29142d9f2f641ffc28db2cc02f9a1ff628c72c7e2f9f20fd27cb2ce72fa020e5269c2c6a2f93208f26592c9f2e89200a262c2c882e2d207725d02b4c2e901f2025682bad2dcd1efc24b42a102d9d1e4e24e4298f2c781deb2335290a2c411df622a7285a2b9e1cd2225328d92a871ccd22d727fd29831c1c22ed2632290e1c72215926ee283a1be020f325ad28781a7e2088252e28f619182033254c276f19b91fe624df262019411fae248b26d018d41e6c2420265618401e1e24ba25f117da1db1235e256f17af1d4d23fc24e716761df322a824a116471d962264241c16f51c32221d24bd15cd1ceb21b8234915771c9d214c23eb14031c3621b8226b147e1bdc205322d413571b9920f0214113121b6620aa2196122f1b4c2073214a12021b2b2092218812ce1aff1f4021e1130000ab15481d0080c2251029ad2acc202529602c342d98253d2a8e2c982d9b26902a0e2df02df326352c8a2d8e2e3f275c2fcf2db82e4627d031c82d812f9425af33932dae2f13226534f52dd22ff7208134242ebd2f16219b341f2ef92f3e1ec1343f2e1d304c98c634122e1730789ece34572e1930839ece34bd2d053057981934852d0c30a120c030812d762fe7212f2c102d2f2f7d20c529e32c1f2f13206d29062d182f71202729e92c5f2f83209828bd2c862f8a205e28b62c8e2fcf202628952c5f2f9120f727482c8d2e63203627172c542e2d207b26cc2b3b2ede1fdd25962b092e731fec24f32ab42d411ec524ad2a1c2d541ea924ec29812c2f1e49241d29c72bb01dad23ac28082b181d80238528ba2afa1cdc225428562a8d1cf8218c275a29ec1b8021cd26be284c1b07215a267128ac1ab020bd253428381a6c205d250228de191a2017258f277119b81fbe24e2261f19f21e5c243d266a186b1e1324c2251418e31da82356257b17a21d4423fe24d716631de122b5248a16371d912275240916fc1c49222f24c515ca1cf721e9234615981ca72184230f15211c3321f1228c14601bd1207d22b413c81a8c203b22b412ae1a692014229a12cf1a52200322ba128a1a3520dc217612d31adc1f1121961100001314331b0080e026db29d42bba21dc285d2c8b2da8260329842cb82d9526f029fc2c272e2027da2a232d162e7327da2c5e2d452e0b28ab2fdf2d012f01289932e42d312f972583342b2ead2f2223dc34392ef52f7d21df34362e063080210335252eff2fcb1e0e35f32dd92fda1e28352d2ec42ffd1e0d35b32daa2fb4211f346f2d752f30246230352dd62e6d232a2c092dfc2e78203b2afd2cd72e66203529fe2cee2eda209628d12c022f0d219c28942ce42e56216a285b2ca52e1c219927282c962e9d209326092c832e2d207926fd2b582e4b209e26d22bd42d3420ce254e2b872db41f6725b92a3a2ddd1e58253a2ad82cca1ee724d329522c3b1e6c246e290c2c9e1d05242929d92b561ddc23d1284f2b371d25235b28402abe1c5f22e62785293a1cd92149275229c31b64219a260529271bdb2005268c28721a60209325e827ce1910202c2535272919ad1fdf24cf26e0180d1f91245e264818cf1e5224fb252218521e0f249e25ac17241ead2345251c17f11d4e23fb24e116981dd7229c2429165b1d89225324e615181d23220a249c15b21ca2218223e8146a1c2821eb229d143e1cde20822231143c1cad204422e413281c7820dd214713b41b43206c214f12871ae91f33215811531a7c1fe2209b1200008814d61e00807e26da28a12a841f20280c2c222d00265329762c722d4b276729c72c3c2e66274729f02cc62e14272a2b8d2de42e96277d2d072e4e2ff9264e31ea2d542f18252034442eea2f2025ed34f32d3f3090212235052e2930f51e4635042eff2f261f6235e62dc52f4c1f7435352eb92f641f7735922dde2f2c2257346f2dc22f5f26e72f242daf2e3d24f729ac2cc52ee2202429e42cdc2e15212029bb2ca52e5b2161287c2cab2ed2200528602cb82ea7201728412c942ebc201528022c4a2e7f20bc27da2b652e4220fb26882b0d2eb01fe1250d2bf82d231f0425ca2aa02d5f1eb9243d2aed2c441ed324282ac82c671e9724d929582c171e33240129cc2b931d6723a828ff2ae91cf9225928832aa01c99222428722a611c22229627202acb1bc22113276e29511b7a21b126c528f51a2b214f267c28461af520f5253628051a80208e25d427b81933202b2557275619d41fd424de26c118551f892462267318ba1e4024042615185a1ef1239b255a17e71d6a233225d516891de622d9241816561d692283249315111de0212c244b15e71c6d21a923d814641cf320fc225714501cd020ae2205144c1cc420592286131b1cad200022b912fb1b8120ae218912121b5f20b3213012311b1c2056211b130000b319161e0080c425a529642bcd20c228782c752db625ed28882ccd2d30268129d52cf72d1227cf29f92c472e7627042a732d0e2f3827b32bba2d4b2fd926be2dbd2d792fa626a932032e772f6526b5349a2d183071235935dc2d3f303a249035d22d133048229935ae2de62f5222a735162e962f7824a3355d2d112f01272934f12cfb2e0c272d2fec2ce02e4124c629942cbf2eba206029cf2ca92e02213d298c2c452e2d21c028552c2e2ef62051283a2c382eff2016282c2c542e312163271c2c8f2ee7200c27ca2b282ee020d8266e2b162ebc204826022bbf2d2b2066256f2ae12c2a1fff24ef29ae2ca11ebf248529432c911e4a248a29352cef1d17243729072c6d1d1923b628462bb61c2b239828ef2a8e1cb0236c28752ae21c0c230328d1297a1c66229d278529111cf221322745298e1b7621bc260229f01a0f213b269f28241a7a20a82511286f19f71f1f253a27d618561fb924b8267418e61e73244026fc17981e3924ee25a217311ed4237a25d116c81d69232a255e167c1d0123e024bb154f1d9f22a8248c15411d342264243115611dcf2128245115571d7f21bd234715871c262122233814031ce4209e227a138c1b97202c220813991b5c20a621a612131b0d203d219712bb1aa61f2921a7126910401d78203f01e9246829442b332149281f2c242d8125fb289d2ccb2d66269129ec2c172ed626f229f82c502ef726882a6a2dab2e4927782a792dfa2ed926282c892d742edd27eb2fcc2d012fcf28db332e2de22f8b277835e72d13302d22e235a92de52fa522ed35962dda2faf24f8350c2ea42f1126ec35792d3d2f59281934f52cda2edc28fa2de62c652fe52496286f2cbb2eca201e29b12c782e36228628662cfc2d7e211f28242c092e78217727ea2bed2df4202727ba2bff2df3205027992bcc2dda20b327342ba32de4207c26ec2a802d1f20fa25cc2a2a2d421f39266e2ada2c8e1ffe251d2a852c461faa259229432ce01ed12464291a2cd91d78245b29052c6d1d0624e7286b2be31c99235a28a12a9d1ca8220828e3290a1c9e22b527a229041c5e226d2773295f1b1f2225271a29161bba21d126d028a11a612166267f283a1aca20f3252828d11941207b259a272a198e1f1225fc269618251fb12478265618d51e5f240d2626188b1e1b24ab259317271eb82356251f17ca1d3e23fe246016751dc722ad240216d31c392253240a15641ca621af239614b81bf620a02208143c1b712022222613191b4120092204130d1b5f201c22f812b21b7e204422bc127e194d206022bd11bb1ba71f0021a4132b18451c8620f100e3258229152bd01f9328602c5c2d3b25d328cd2c072e9b267729ef2c652e2d27a429fb2c6d2e9127a3292e2d842e672721293c2d9c2e4d26a92a652dc62e1d261e2cba2d682f65264c31df2d392fa328fd34982de92e53272c367b2d9b2f46263d36b42d033057265e36a12dde2fe9275336a22d812f122a0834362dd32eb1295d2c432c242e8f243728322c3d2e5b21bb288a2c312e47223028352cf52d8f21ae27192c002e18219227fa2bdb2dcf207e27b12bb82dc22021264a2bbf2dca1ffb25152b9f2df01fef25da2a342d8a1f1326912ae52cb81ff125272a982c8d1f0025d129592c5a1efe24b229492c581ea1247b29162ce21dc5245229be2b0f1e2724ec283b2b471d8623b428cf2a911cf5225f28412a391cea220428d129321c982287276829a21b1722fb26fa280d1b8c219c26b7286c1a4a21452676281f1ad820fb2534289b198f20a325db2747191b20252533278518df1fbc24a32655187b1f64242f261e18f01e0424b025a417ba1e86235a250717561e0b2307259f16e81db522ba242c16ac1d612277249b15521dd7212124f514e61c53219d239014d21c022118237e14791cc620b122d4133a1cbc2090226613031c87203f229212071b4d20ff21f2120e1b0a20992193120000301d7e2000003624e028902af71f50286f2c9b2dc92536288e2cbc2d2026d028cc2c192eba263429002d642e202779292a2d8a2e57278e292f2d642e8226d6298a2ddf2e04269b29372de12e25252a2d7f2d0b2f2527ee32a62d622f4829bc35562de32ed4256c36a22d862f1425dc36772d572ff92642362c2dc42e022a3c33fa2cc82e84291c2c422c792e4b24fe28322cdb2d1022c328732c062e0d22e628142cee2d39224b28082cef2d7421c427d22bb62d27210627292b6b2ddc202f26092b1d2d7420f825e52a302d4c20eb25b52a062d1820f6255f2ae42c20207a25252a962c451f4d25ee297a2cbc1e4625de29732c671e3925c729482c571ea4244929762ba21df523b528a62ad51c662380289e2a7e1c37236b28912a611cfd2234283f2a3e1ca922ee27c029b61b452270274b29421bf52115270a29e51aac21c526c428911a292164267c28f919c920fb252c28cf19372070259f271e196b1fd724c4268118d81e61241f262818a11e1b24a025ad177b1ead2346258117421e1d23ee24e416dd1d9e22a82420168d1d39226624cd150b1dc821492445159d1c7f212024d2143b1c2f2119246b141b1c022193230f14051ccb20c7227e13f91b8320fe218712391b32209121ea113e1be61f4e21281300004d1d412000006824eb28582ad71f5727582c5e2d3c252a28722c8c2dd225b828a32cf02d32261429c82c232e61266a29f52c4a2e7f26d929012d3a2eb0266829222dba2ee025de28512daa2ee124022a192d522f5825cf2e802d092f85286c34572da52ebe2a7a363b2de22e7c291137402d9b2e30295b36ce2ced2dd22ae931872c082e2c2938298d2bfc2d5622f1274f2c162eb8214a28252ca12d2d222328b62b582db9211528952b462d6b217e276d2b5b2df920d826132b252dbc206426e12aee2c3e204326a62ad32c2820fd256b2abd2cf21fb6253a2a9e2c941f6825092a802c2d1f4125f229682cad1ed6248c291d2c251e83243b29ad2b7a1d4924f2285b2b341d3124b828f62ada1cf02388289f2a5f1c7d235e284c2a1f1c3a234128162af51b0d231c28db295e1bd322e4279d29211b5f2272275429a81abb21ee26f4284f1a1f2159268628a419ab20d92524282419412063258d27af18e91ffb24eb265b18421f93245426fe17c71e3624d9251517451ec4237e258d16ee1d372321253216751db122ce24b315041d32226d243d159f1cbd211024d4145a1c64215323cb14181c0721c5224714e91bb9205c22d1131d1c82200c22aa13aa1c4820bc211514fd1c112078211614c71d771f8620860a0000891da21d00001526b62a752c5624ab27132c562d24252b28662ca72df1253628ac2cfc2de3259b28d52c3e2e2d260129042d742e4a2676291b2d712e8e265529252d782e3f26da281d2d4f2e46250a29d92cb82ee924622bd72c952e8625c0304b2dbb2eb2289635d32cad2e412b0b371b2d9a2e932cf435c42c602e362d7a304a2ce52d6f299728682be02d9c2260281f2ca02dcb22c727c82b492d0a22b227632b1d2dc2215f27632b1c2d4f211d27402b0e2dec20c326fb2aef2cad207e26b72ade2c4f2030268c2acc2cdd1fb225272a8d2cea1e9f25d129522cd31e0625aa29512cd11d6625a629102c401eef248329142cb61dce246f29d72b901d732434297e2be61c2624fb28302b911cca23bd28c72a4a1c35238f28882af01be5226428462a981ba5223528f529511b4e22f127a229f11a052273274629a11acf21f326ed28651a8a2176268f28191a0521e3252b28871962204c258927d418b71fe224e8263f18241f93247726dd17b01e4524fa255d177f1ee82390252717521e4e2322259a16e61db622b0242a16a51d4222452494153c1dcb21eb232c15d31c5f213923c414721cf620a0222414541caa203c2208144f1c84200f228b134c1c6620dc2186132f1c4420c721da12781beb1f7721cd134c1e87248925d8025f263f2b862c182464272f2c2e2dbf24d3283f2c802d84257128b02cce2d95256628c72c112e87258928df2c392eb325a828e32c4e2eb825ed28f22c492ea225c728d52c4f2e54250429f12c252e2b25dc281d2db42e5224462cde2c3f2e6526f3329a2c6e2e382c3036582c202ed02eba35b32cf72d4e2e472e432c4f2d4427c228172cea2d0c22ea280b2c8a2d8522d427942b202d3221b6273e2bf42c56216827222bdf2c2021bd26e22ac92cda202826a12aa42c6f20ea25702a8f2c1720ce25532a7f2c601fd2252c2a752c111f8725ea293f2c661e2f25bf29282c001eef24a6291c2cfd1d8e248f29162c881d54246429d92b411d172423299d2bf71cd623ef28122b891c9f23b528a32a321c46238d286b2a011ced2263282f2a3c1b99223d28f229e51a43220328b4298b1a1122a5276729561ad1212d270d29141a6721b926cb28a519d020332680284d193a2096251328a7188b1f1125352727182b1fa0246b26e517bc1e1d24b5256a175e1e6e233925a7162c1edb22d9247316d71d6e229d241a167c1dfe215424bb15b91c7b21fb23ef143a1c0b211e236a14bc1bb3206c22a513661b792003225013161b4e20c7219a123e1b37208621bf12c51a12208b21ed11f01af31f4b214a11541ed8228a24dc021227982a282c7c237b26dd2b092d2a246427572c942dbf241328a22c012e01251a28e62c452e0a250e28ea2c4a2e18250f28c12c212e37252628962c002e54254e288b2cee2d88257828902ce02d7d258927be2c392e85240c297f2c822e3425c32c552cca2ddb2669348f2ce92edb2c3f35822c3e2e5f2e982c142b472c5b26b3271f2c4a2efa210728762b8d2d7b22ad26462bf12c2f219726f72abd2c1e217426c22a9d2cd42000267a2a8a2c5220b225492a6f2ce11f8025202a652c9c1f5a25062a622c671f4925fa295d2c041f2125ea294b2c841e1025d029412c251ef224c1292d2cba1dbc24ab29202c371d62246e29012cd41c362420297d2ba31cc023d428f92a0c1c6223b428b32a4c1b33239b28792a1d1be5227b283d2ad01acb226c28202ab71a91224328e7297d1a3b221228a229821abf2186273d29541a1421d926cd28e1198b2024266a28841932208b25e427db18f81fd824ff269d18841f762487262318481f2e240b269b17ac1e8c238f25f8161f1eef2211256516ac1d58229a24ed152c1dd22129246715c81c4f216623ba14581cd72092224b14271c87202722bd13471c6720df2101134a1c5320b82106135c1c1d206c212413ce1bb01f27216412471c311fbd20590c3120c8224d2406947d25012a982b1f222127312b942c8c2385260c2c9f2da4236227d82c662e03247b28192daa2e7e24b1281b2d942ed6246028cb2c162ec2241f287c2cb02db6241028442c862da5240928292c722dba245928582ca32dd9246e28772c0b2e9124512a4f2c802d55264f2d362c6c2c2c297a30292b502d342bd929442a722d092549269d2a252d6a21d425922a972cdb201926592a642cbc2009262a2a472c8420e525222a4d2c3e20b925ff29452c1f209525dd293e2cb91f7925bc29372c431f6925a029272c921e43259329302c631ef424a6293f2c041eba24c7293b2c461e7c24b3291f2cf31d43245129a32ba81d2a24ce28d92a4a1d24249a289c2a8f1cb0238a287f2a991b8f236f28582ae61b5b236f28452a9c1921237228402a3d1a1e238928482ad419042381283e2abf19f1226c281a2aaf19de221f28b829031a0b224827fb28a119a120c5250228d618e21fef2411271e184c1f84246e26a017fd1e0724c5254d17831e652356256f160c1ee522f124fa15cb1d77229924ba157c1d22225d246b15261dc1210e241615b91c52211f23ab145b1cdc206e228d141b1c982039224a14e51b5f20e321cd13701b23209421ee12741bfa1f3e215e130d1bb21f40219212c71a521fe3207713152176211b237495ce247629fd2a4f221825da2a562c43232227222c512dbf227528422dbc2e69216628682dfb2e16222f28f22c782e7123d427792cd72d5e249d27242c792da2237827062c512d6024bf27092c482d6e24f7270d2c4b2d542426281e2c3e2d282442289e2b2a2d07243228e02abc2c7623cd28222ba82c22244f28ab2ad82cef22d126e52aeb2c4b21b526782a5c2c052190260b2a162cba206526c6292e2c6c20dc25a429de2bc71f9d258029772bc41f39254a294e2b3a1fdf242f29322bbd1ec5242229422b0f1e1a252d29442b9e1d2c256029c52b671d1d25052a6c2c581dc324422a692cc81d96248129bb2b161e1a24b828d72aad1d27234628742af31c6b2212283c2a141c32230628dc29b41a17247a286e2a5019e823d928c02a22199b230329d82af01844230c29dc2a2119ba22da28b82a821902225328092a4219a121872740293f197521652665281619fd2046255127ee181f2067241c264e18da1eb62350258b17361eeb22bb24d716c91d80226f245f16a01d1d223f24e0156f1dd7210e24ad15311d9921c0236c15eb1c502167232315a31c13211d23d814521cb42083224514061c59200c22f413971b0420fc211213a81b9d1fc22145122b1b2a1fda21ae12171b2e1f662101118720a5209422ed9777257c289d29411f2f25ba28a62a0d216d25162bcb2cbf21e0281f2f99309223d728042f8430e0212727512c872d5a210426922a282cdc2126264e2a192c7821e9256f2a1c2cc2221c268c2a362c8123a926042ba52c1724b527a52b242d4a23e427502ca62d3e23be27332c8a2d3b22de27ab2bf52cc720ee27d32a912c5e203427202a2d2c5f203126c929082c1c20b4259c29e32b44206a255b29932b0d203d252c293c2bd71f0325ff28fc2a381fcc24d828ce2ae81eb224c328b72ac31e7724a028812aed1d5d249528812a4c1d90240029562bc41c62254d2a672cb61c22261d2c812d101ee724ae298d2b3b1e782215271d294b1c20231f272229201caa2206270929961a8b2209271829ba19f322b027a92975172124aa28e62a32141b24c529d42bf5160a241b2a0b2cca18b9239a29722be319e122ae28432acc1a0522d62755294a1a832155266828c2194c1ff724b1270418e01ed323cc2592174b1f6f2360250418771e11234725c116051e8722dc244a16681d0e2254245815eb1cbc210524dc14951c802198238714471cfd20d822f913f31b492025226813de1a0f20f62166126f1bff1fd9218212531bcd1fb8216912381b951f7821e911f61a651f7f211812081a071f592147112e11881ebf201e09052433276128ec1e02237127da28391f4b23d725b028de1d7b292c2e5a2e92998029652e3d2fec2372233f293c2b78201d24ce289b2a5b20a624fe28a22a2f211b251c29c72a682151254b29112b7b21e325b9297e2bbc214626b52ab72cef217428ec2c8d2eea2207289f2c2b2ee420c125c02aa02c7820e8246729462ba4203d252e29042b832021250929fa2a6b201325f328ca2a15201125cb28972ade1fe0249e28602a4c1fba248228372a131f94246628152ada1e6f245328082a621e3f243528f6291d1e2224fd27af29b81d93237e276329d01cac23f1279429021c7822d526012933181f21a2244427a7169b2172253e28ce1ab221db2582288f1b1121bd256328701a1b21dc254e289f19ba212026a12870171d247027d1291c151c241e2a1a2c7f12ca256b2cbe2de215e525b62b1c2da81b04226f28012aa01a91201e26262849197320be248826a61893200d24ad25c71828204e2312251b18c91e79227924b5162b1e10222d241816b71dc3210724f815841d8121c4237315571d462184234715191d022127230a15df1c9b20a2228a14831c572036223414421c3520f121ef13121c0420a0219613731b8d1f6d21f1123f1b521f25215812a41af11e2b219012bd19c11e3521b31000002818a01900801b22fa258d276e1d312391273629d11fbd216225e426131e19192f1e86201c15c621592603281d1ef8249428362a43210a25b6287a2a31215325c5286d2a56216725d128662a1c218e25ea287b2a19219525e728932af7206f25cd28422a87205524ec277c297c1e1024f627ac29291dd2249e286e2af11e6525fd28e32ac51f2325cb28b02a1b1fe2249b28842a7b1eea248428472a3e1ed0245b28122a1d1eb3245d280d2af91d98243d28e429d61d7a241e28d029b01d5c240328aa294b1d5524c4277d29421d462473275c29f21c3a241f272c29a71c5b2327266b280d1c572036249a26c718eb1e0f23e9259e175d20cf236f26ce1875202e249f26e81838203524b026e21861206724ce261219b2206d24eb263b1afa1f93243a2711191c201d287d29e413b028303075314b9584263b2de52e121ea21e09252a2737180620bf230f261d19031f162303254218031ea622b624f616401e44227524e216cd1de62134246316ba1db7211e24fc15821d6f21d723c1155e1d35218a234e15f01ccf200123e1148e1c822076228014051c2c200522f213bf1b0520ba21a813541bb31f79213e132b1b7d1f4c211513021b441f2c218812201b241f0621d611a31aa61e11218f12721a2c1e84203010000092172f1b00007623e3259a27951d40226b261328f81e6b20bd2401266d1da91d752244240919b724c6269f280e1f32245128ba2953207d247528dc29a020d7248828ef29b720fe249428f829712040259728082aab200a25ab28312a5720ba247628f829122010245827ca288a1ee72280269e28c61cc6241d289529561ed32411289b29db1dd22411288e29da1ddd240b2883295b1dc424ff2783293f1da724d5277d29201d8d24ce278129451d7a24b2277a292f1d54248f276729031d2a245c274d29d21cd92334272929c41c2e23d6260129901c86227526c528251c032217267928a31bb421a9250f28ed1a7c2121257327a91a0f21c0242427db197620852402272a1932205a24df26181933204224c4261919552032247026c51841200e245526ed178d1ff1223c259c164619a01cbf1d780c7617211b7c1d37046f1d12214f231015dc1ee92129248e17991ea22116244417cb1d5721082461167b1d2521c123ba157f1d14218623be15501dfc202e234015081dd020f022f914a81caf20a4229a145a1c892066224d14031c4e200a22ee13b11bea1f72219a137c1b6a1f0a21f912631b211fea20e212601bff1edb207512781bed1ec9201e12651bc71ea120a311081b951e7f20c211af1a321e16202c0f00008718471b00804422a8250927381dff20202579264a1ddd1f31246825461c9e200a2436251b1c3b221f26d927121eba239c2708294f1f182403285329bf1f332414287029781f672436289529951fd0245e28b92925201d257828b929672051241d28a3296f1f09230427ad28421eb722a3266b28981d29246c27f8283a1e7324be273a29281e4f24db276329b81d2e24d62778298c1d1624b52767296c1d042499274c29541df62371273529481ddc234d272029fe1c9d2324270829d61c4e23f726ed28d91c1223d426d828b11cd7229a26aa288a1c9622552670282f1c3d2204263328ed1b9a219525d5271e1b13211c253b27721a9520bb24c226d219422074248a266919ee1f38245a260a19bc1f09242b26b218a01fd42313266a187f1f9123f12521188d1f432364252818261ef1210e24c516261ac81ec720c512ce18461ec821c010051d532097238512fe1cba2096230c13541d1721cf23aa146c1d1121cb230d15581de6208423fb14371db320192391140e1d8d20ed226d140e1d6820af226d14bf1c5120a0222714751c36207022cd13221c1b2048223c139d1be01f0522aa12f01a671faf2113127e1afe1e572151114c1a9c1e2b212811581a761ef52032117a19201e23211a11b019fd1de220f111fa1c292411254082f428f12c522eb123322ac12bcc2c76244f2c5c2b222d04240f2e1a2c1d2dd1210430842c4b2de52150312b2df62d001e5132732ec92f6ca2f632de2fe43021a80634ec30703222aa5034bf3112334ea70d3432315d32f3a5973419333f34c7a7e333f22e4f30aea61c336d2c422e9fa12f322a2c8a2de3a0db30572b172d7c9d242e222bbe2c97a24f2c192ebb2f23a0a42dda316b33b0a2c92d3e33b5343f20562cba31a93305255128b22e053182207129722f373187236c2c603248347f1cfb2bd3327f3468951d261a2dac2ede19c821c628a02ab719a8201528a32aeb19a0246829fe2b231e2b2296279b29241b3621e326d528cc1bf020cc2545281c1b412042257127e3193c201f253d279f19e71fdd24f5260519ea1f8e2492260719581f51242526aa18311f1e24d0255e18891eb72388252718271e5c233b257817d91d2023ef241a17791dd722ab245616401d78227f2414162e1d2a223a24ff15161dde2102249a15c91c8721ae234515821c40217c23b614441c182132237514201c0b21fe224f14e61be320cd222014511ba72021223b13c01a4f2069210d13771a29204e2164126e1a16204e215b12651a0e20592152126b1aca1f1b2158128f191e1fcd20de10991a021f4e2008113714a621a021e18c36286a2c942d04238329d92c002ee724c82bb52cbb2d5f22732e372d4a2ed4919f30b62dd12eb2a08b317d2eff2fa2a14b32ea2e2c30faa00033b92fdb3024a55e3368306a313ea6cd33b030ae319ca64d34aa30d13112aa3e34ba30ee3178aafb3317302e31a2a9ba33672e0b30e4a95733462d982e6daaae31292d922ef9a83a2fba2d7d2f1aa5172d0b2fb630e4a5292c28308f31d1a47b2a5930f131c21c352a3630ca31622065290630983157240a292c30233256255f2986302532d3220d2960300a322320b028152f89316917ce27482dbd2f4a119425232cc82e5b19a324f62bb92dfa187b24832ad82ccf186e21d3288a2b0f19a4211c280c2ae5197421362797299f1a06229c26bf28f91a8521ba250e28c4197920262569276e199d1fea241a279f18f51e92249b2639186f1e51242c261618871e1124bb25ed179a1ea4233725a417a21e4423bf244e17831ed62279242c17441e64223b248c16c81d0b2208240a16431dd121be237f15a91c7f216023de147d1c4d210723b014411c1921ba227214ef1be5207b222514881b9b203222de13841a4d20cb21cf125a1a0d2091214712311adc1f5a21c511281ab51f162163116a1a8d1fd1204111c3192e1fb620b810c419d51e49205f11c91c45235d2368898228e82be52c38218a2a172d222eb921642b4a2d7e2e4e236f2d762d7c2e9a20602fdf2d3b2fff1862314c2ead2fb0a22432052f60303ea20333342f7030bba69633b62fb630eda8fa33d12fd430a1a921340b30f330d4a91734af2fe83050a9f333612fb230b7a8a933b22e4430f9a83133222e2f3014a98831192e06302fa7662f352e1530cea4902c672e4d30e5a09b2a912e7e303999e229da2ea630fc1ca829f92edf30a2206e29ed2ef330ac216829f72e03310a21d828e72e1c3155213828c32ef330e220d8274c2e823019201f27b22d0030a31ef425ea2cee2e361df224332c4a2e0d1c7524672b632d4b1ac223ed29832c5a1a4f23cb28f62acf1ac022fb27b729ac1ae42107270f29271a20215c268628a519bb20e62534283619592092250328081936203f257527e0189d1fc724d1266818351f64242e262c18b11e2424be25bf17251ede2351251d17d21d70230925bd16b11dfc22b7249716871d8f2278241616741d33222e24b2155b1de32105249815fd1c8b2174233615921c582109238414401c2121a5227114d21bdd205a22ba134a1ba6200e22cb12711b6720c321ef12861b1d2062219612811bf81f22212512541bb41fd5200012861a3a1fc620b611551b731fae200112dd0e4d1c261de8823f294e2c3d2d5f246d29f02c222e5c26bb2a5e2d882e8e26222c4c2d472e4025422e102e762f6b246230a12e04307420a431fc2e27301995bb322e2f4f30d7a27333782fa1304fa6bf33772f9e3070a70b34a12faa30d9a617345f2fa530eea604340c2f9630cea60934102fa930bfa76233c92e8c3016a756314d2e4e3085a4082f352e1130f5a1a82c3f2e2730bc9cbd2a402e5a30d91a582a5b2e4e300419a029352e66304e1f2f29122e6d301f211729312e8a3008218228232e723033202c28e82d4c30c61f6828b12d3430371fe627272de92f931d8f26882ca82e001d88250e2cfd2d871cf424462b992d9d1c21241e2ac92c151ca6233829c62bfe1b09239f28912abf1b7a2207289529221bf3210327d9288d1a4e2152267128d719a820ef253128641953208025d2270219e01f1f253f278f18541fc424b4263e18d11e6b243b26e417941e2d24cd259d17451ee4236125e7161c1e90230f25ba16c41d2123cf245916651db1228824a315311d562251246c15c81cf4211624ff14681c9f21cc239a142e1c512152232114b41b0421d2229d13081bb1204722f312bd1a7320b921a912be1a3e20532148129a1a1b202c21c711701aeb1fe720a211fc19701fcd203d11711a661fea20001263141d1e5d1d7186d428312c3a2d85251d29f32cec2d0127fd29532d732eae26e72b892d902e7725002dfc2d2e2fa9243d2f8c2ee62f22222331a92e0730f61acf32cc2e603062a1f733572f8f30d9a53b343f2f8c3010a85c34532fa730ada86734192fa430b9a83634ff2e773085a80e34a92e5730c9a73733742e4a304ca52d31412e2c3018a0672e022e08303b9be82bf62d1e305c15ee29ee2d30305e1bad29ff2d2e305f1f1629f12d43307420aa28b72d4d30df208c289e2d5d3002213b287a2d64306b20e027622d2330c81fcd27172d8d2f451f8227cc2c172f921e22263e2cd52eb71d3725c52bf62ddc1cea24e42a0d2ddb1c8224562a8c2c741c57249829322c4a1c0424c2285f2b321c8b222928122a341be621bd276729d41a77210e270429541a1f214d268a28ee19e6209b25d1276519852028251e27fa185020db24b626c018fb1f912456266518341f5224ff25ef17841e0e24aa252d17131eb3234c25b016b01d2e23f82443167b1dc722a024ba15451d61224a243515e21cef21ea23d3148c1c85215e233d14301c3621f722ce13e71bf12098225d13731bb8205222f112041b862006228912a11a6120ca21cd11931a4e209621c111bb1a3620672122114a1a1420532181118e1ae71ffa20ff10ef13821d1f1d9e875229622c5e2d7c259829122d0e2eb626512a472d352e82268b2bc52d932ea5259e2c042e182fd324902e392e562fc823a530f62ef92f581f37320d2f3630369c7a33112f6030a5a40b34ef2e4530f0a54434f42e74303aa76634f22e703039a86f34b92e7730c2a87734af2e8b30caa803346b2e4c30cca651314e2e55309ba2162e122e3d302098442b042e3330be19392a832d0430911c7a29552d7d2f421d7e29452da72f831e4f29372dc12f7f1fcb28322dad2f32202b28052de82f5b201d27c62c762f51208d267e2cce2ef41f0126342c902e4a1f5225f02b332e761e0725672b8a2d1b1ead24c62afc2c6a1d4224fc297f2cee1cdd232729002c8d1c39239d28612b2e1cc1226228c42ad21ba822d827dc29b51b2c2203272429251b80217026d3285e1a15210c268628e219ad20a42525286a19242043255d27cb18ab1ff024e22670183e1fb32498266518ce1e77242f26e117621e3224d5256417f91dd4237225ea16cd1d65230b2563169b1d0823ad24db15621da3226024a0150f1d40221d240015d51cf721b923c614701ca62144232214f51b3b21ba226a13851bdd204a229512741b9620e9211a123c1b6220a62184116a1b4c2064213c11161b13206d216711ed1af91f2e213c13781cd11d651c0e860d250d282d28ec204029912ca82d9926972a172d5a2eb927472a912d812e0027712bf52d3a2f7527312d8a2ead2f9926152f1c2f2530cd252631c72e59306522cc32cd2e35302416d333ec2e23304d9d2d34d22e7530b7a055349d2e683067a47434882e793087a48134c02e7f3094a4f833602e973080a0c630242e3030781ad72caa2d9f2f031ee0298f2da62f4e1ef1286f2d5e2ffa1e1229642d802f272034294b2dc92f8e20d4280e2dbd2f80208028f12caa2fb4200c28be2c482f3a2015287b2cc62e0920f227282c6f2eda1f75268d2bd12dbf1e5f254f2b7a2dea1d2225122b6c2da71dd224932afe2c951d9024d029562c481d3a241a298a2ba71cf123b928ee2a5f1cd8239d28bf2a8a1ce6225b28582afc1bef2180274229de1ac521e526bc28ae1a34216f267c28511ad320da25432896198b206d250928421925201c25a4270819cb1fca24f626bb18151f6724532619187e1e2024da258417061ed7237425f916c71d7a2319255d16851d1523ca24c415521dbf2285248f15ff1c6a2243243815d01c19220824c2149c1cbb2199238e14361c472104232914791bd7206e22f612da1a8a202222ff11ec1a6a20fe210f129b1a4820002269115a1a2320d721d8107f1ac81f03215211111cfd199e1983854324a826ff2608209b28c72cd02dd4269529062d462e2c27d02a3d2d4e2efc275e2ab92d2d2f7627c62af72d4b2f8e277a2c402eee2fb627b02f872ef42fdc25c831ed2e37309220c133a52e2e30419d4d34be2e3530d49d8534c22e54301ba1ab34b72e653046a19a345e2e43303d9e7533c72dc32fbd1655307d2d5e2fda1e892c762dc82fa91ea42ac92d0130201f93298e2d642f40208729072d4b2f2621c728022d202ffe205e28c62cd92ecf2021288a2cab2e8c20c027692caa2e7c20a4263c2ccb2eb01f5626152c932e561f4926c02be32d471f8b25022b4a2d6b1e5425bc2af72cde1d81255e2aa32c101e2b25e429422cb11d8f247c29e62b051d23243829872bca1cb023d128ec2a731cdf2244281e2af41b4c22b92794294a1be62142275b29d41a6f21b1260429991ae7200c269228f4196620a42508281819162044253727bb18b51fee24cb267618231fa2246726dc17dc1e632402268e17541e2024a625f816171ecb234e255d16ec1d7523062530169b1d0223aa248a154e1daf2262243e15f31c33221a24e4148b1cb321a0233c143d1c2d21f222e6131c1cdd2081223213131caf203a22ac12df1b7220cc210012601b35205e213511a01ad81f2f210d11221a691fdb2010120d1c4e1c271dd4816c2404271c279e1f4728662c6c2d76266929202d532e9027e129722dba2e1c28e2298b2d422f0728052cdb2df32e4228a12b652ef12f2426382e652eda2ff821d7302d2f113003221833662eca2f699633346a2ec42fbea0a234772efb2f53a3ae349b2e403066a38a34772e2b3020a11633c92dc52f67160330602d102f1420922b4b2d052f441fcb29732d972f6b205729502d292fad20bd28162de92e6a206b28b92ceb2e9e201c28902cd02e8620b927642c922e092056272b2c422e401fee26052c152ed91eb426da2bc32da01ebb26892b9a2d691f5125222bab2d281ee024a72a212deb1d0e254a2aba2c231ebf24b729332cc31d3a2421299e2be51c7823d728152b531c5c238b288c2a431ceb2231284b2a011c51229a27fb29f51aeb2123276929841ab021b726c428431a532160267228dd191321f7252d2896199f209325ba271719412032254027af18f31fdd24d5266018831f942465262318ce1e50240e261c177d1e0a24a925c716051e83233d25f315b11d0623dd24a015761d8622942417151c1df8213a24c314031d9221c8236314861c30213523eb13481cfb20fd2203133f1cc4207c227912221cac20fe214d12fe1b7b20a521a411201b3e20a6216f11d61aec1f40215f12c81c191ccd1c29023924eb2639271d20d628b82cda2d7c263f2a332d732ed9271a2a522d872e7f27a029692dbf2e63271b2a202ebd2fac27b92a542eb82fbd26d92b412ea42f6e25aa2ee62e9d2fb42407316e2ee02f1c2157336f2ed62ff91c7234692eed2f069eaa345a2e233037987d34612e3f300e98f0325b2d5e2fd61fa82e0a2dd82ee320e32b252dd32e3b20662a8b2d5e2fe120c029312dca2e08211f29c82c822ec620bb28942c6d2ead209c286c2c592e8e201c28402c462e4b204127092c3b2e33208826c42bd92d901f4a266b2bb42d481f29261e2b832d221f9325832ac72cc51e22250e2a972c3b1ec224c929732cc71d7a24b329622c6f1d47245d29da2b311d7a23e228472b8a1c7323b928182b501cb5237e28a12a761c33231f28e429ed1b6822bf2782290e1bf32144273d298d1a8921d226f628181a272149269128ac199920b0250a281019182030253c2747187b1fd724c526d117041f88244d265417ba1e4d24f7250717461ef22383253316ae1d6f2335259d15591dfa22ec24fc141e1d9122aa24c514141d372264247214fd1ce42138245e14c11c9f21d1232914491c3d2101238013d91bd82085226d12261b8c203322da113f1b6220be218611a31a172052216f117b1a921f38210a1261207622cb227b1f8224ea27ef27c620ce28642c752d09261829132d612e1f27c1294f2d932e1127572a6d2dcf2e6e27a32ac32d472f67272c2bef2da22f9827302afa2d642fba26772b832e17301027d32ede2e6f30be26de31ac2e62304a2301344c2eed2f3c177e344f2e25300f1855346a2e0230df1d1a32102df62e3422282dbc2c552ef3207429ec2cd02e28202929472d3c2f1921ea29d22cf62e8322c928af2c662e8a216328712c372e5321c727402cfd2db9208127142cc42d8e208827ae2ba12d5c206227462b822d11207726f02a4e2d1e1fe625c32af62c7f1ec025652ab02c021e9d25082a8b2cdd1dcb25c9294c2c0d1ef924a829332c321d33244f291d2ca01cad23ec285d2b3a1c66237d28852a131c23232a28f529751be922d627a429381b9a228b277829e61a4522312724298d1ae921eb26db282d1a852187268e28c419f0201b263b2829196520a225c1279718be1f302525274318361fc9249a268917e21e722424263117ac1e3124b925f816441ed6235f258c16ed1d4723f824db159f1dcf229f248e15e71c3622462491145e1c9d218f231214b71be42085223013381b74200b225212801b5c20f22191128d1b7d2011229c12a11b7a2015223f12731a1220bf21a511f71b8f1ff620f9124921d722952324204e252c2855286b20c028832cc42d91253629392d882e6e276029412db42e5c279e295b2dc92e01289f29902ded2edb279d29912dfd2e0e277f2bdb2d1f2fe126ee29d32d802f71252a2cd82dad2fc325b22f862ea42fde252132d72dcc2f3b22e033e62dd72f3a22df33402e043039226131692dd32eaf22fb2c0f2da82ee82115290a2de22e062112292b2dc02edf211029b62c812e25227f28712c3d2e75212b284c2c212e0f210328272cf42ddf203527f42bc42d6020b3268c2b8a2d11207a265f2b812ddd1f95260b2bfe2c9f1f6c269c2ab42c121f02264b2a7e2c9e1e3d250a2a6a2cc51df924d4294b2c7a1dd024a3292e2c4d1d96245029cc2b0d1d5b24ec281a2b8d1cea23bd28be2a221c5e237128542ab21b14231728e529ff1ac922ba277a29b51a38221a27fc28251aa921b226b02898196d21572672285d19ea2008262e28db18a420b225d92796182b20382538271e18f71fcd24a126df17811f72242c266a17f01e0f24b125db16b31e9d2359253e165b1e23230025ec15f41dbb22b4243615d61d682275241c158e1dde211d248c14fa1c642183239613ce1c152100235313701cd720ac22c4122b1cb82081225b12f31b822033229c11fc1a5220df21b811231b01205821a612fa1f6f22bb22401efc242428422893209b28792cd72dc925b228032d6f2eb2260e294e2db42eec266229662dd92e86279429952df62ea4277b29982d062fe326352afb2d362fec264d2a0d2eb82f7e264d2aa82d912fc825842c032e822fbd253330712d042f1d23c9316a2d482f93205c32212d0a2f7722922f162deb2d4423fb2a132df62e5221ea28f82cda2e22215d28f82c632e0d216128cc2c4c2e1221aa287c2c122e66216428292cc62dd6203b28112c9c2d2321f3268a2b7b2d6a2031263b2b632d1c200526ec2a472da61fda25cd2a252d6f1fac25892ae82ce31e7125442a962c9b1e3925012a682c0c1e0925bc29422c8b1df22485290a2c721d5f240e292c2bd01cc323ac28ac2a461c95239328ab2a2d1c71237328802ac61b232336282b2a751baf22ee27b7299b1a452281274a29321a0f222d270929fd19ca21de26bf280c1a432172266f283319e3200c261c281b195a2082258c278c18bd1ff124ca260b18231f742425267517d21e2824ad252017a71ece23592593165e1e402301254b16e81db822c02481157a1d3e2289241a15e91cc6216b249314831c732140243414291c2d213c244813141cf920b323ae12e21bcb20a7220212c31b8220e1217b11b41a292098217d11061bfa1f4321f112bd20b32305248f1f98238a277c27d31f2a286f2c9f2db4259528f52c3b2e8926cc28092d7f2e4c2638293a2dbb2e8f269229702d082fd726a6297a2df52e9e26cb29a22de52e7626f129ec2d6d2ff525942b982dac2fbd26d829c52d802fb424072cd22d222f1e25502e5a2ded2ed024842f0b2d4f2e0824b22dde2cd92d0524b82ad42ca12ea422d7285f2c622e6c226928792cba2d9a220d283f2c9f2dd521b527f22b4b2d5521a127c62b4a2d10214b27882b442da220f626442b242d6c208526f62af72c24204726b42ad82c9f1f1926912ac12c671fb625632aa62cef1e6e25362a8d2c981e2025f3296f2cef1db9249d29272c781d7f245129c52bf31c402401295a2b711c1c24c328012b101cf0239428a42ad81b86236628482a6f1b42234828112a2c1b0a232028d4298f1ad122ef2796295a1a572280274f29e819c8210227f628b719282173268c281819c520f3252f2872185f207525a727131816200a25fa269d17931fa52458260f17031f4324dc2589166d1ee0238325fd15f91d4d2326259115841dc222cd242415141d33226d24bb14a11cbe210a2450145c1c5c2141231014131c0721be229813e41bc5205b22e812071c882014220d13651c4f20ba21b113b81c1b207d219911901c6f1f002169110000561a621c00802727602bb12c4b245f28392c752d1f253c28d12c002e28266f28082d7b2e5226d928422db82ea3263929782dea2edb268c298b2ddd2ef8263029882de32e5f267d285f2dd82e22257e293a2d152f8125032a132dda2e02256b2a452d952e1424a82c7f2d882e9a241a2c1b2dd42d0e24e529d02cdc2d7e228228d42c672eba21c2286c2c172eda22cc27272c632dd5218c270c2c752da621b627de2b5a2d8d214527ad2b422d072113276c2b262db220c626172bf32c7f208e26cf2ad42cf51f3126892ab02c2b1fd425382a832c6b1e8a250c2a5b2c191e4425da29512c801d5c25e0292b2c991df324a6291d2c2c1df9248829e42b321d75244729b32b681c31241329382b241cbe23cb28c02aa71b53239d287f2a3d1bf82270283c2ae31ab1224228f6299d1a57220828ab29441a052292275529f319d4211627f9286e198e219c2695282d19192109263428c0187b206e2591276e18ef1ff324e326d7175b1f9b2471264517e21e4d24f625cd16b01e042498259c16681e6b233425f815fe1dcf22c0249515b01d60225924fa14381de02111249114c71c722157232e14761c0e21a322cf13461cc72048220013271c97202022cd122e1c7220dd215f12b01b4720c221dc11581bd41f6d216e1200009320ea2000808b26462b852c05244c28692c8b2dcb2438297c2ce72d3b25f228122d492eef25cb282c2d8b2ee325c3283a2db82efc25eb28442dcb2e2e261e29542dd22eff2501293f2dd92e95257229302d4b2e75255529002d612ebe24272a9b2ced2dc7242d2a352d612e1924572b442db52d7524142aa52c8f2d0923a727422cdb2d6e203a29582c4b2e5822af28bc2b262db0211428a52b242d2e210c28592b0c2d5f218c27412bfd2c0221e326ff2ae02c92205326b22aad2c32202826842a942c791ff625572a7d2ce71ee725352a692c801e9925022a452cd91d5225cf29312c8f1d0a25ae29212c441db8247c290f2cee1c69245929e22bdb1c43242529942b741c0324f9281a2b311ca023be28ab2a891b4c2396286f2a361b01237128372a871aa1224628fc292d1a50221428be29e2190122c1277f299819cf2167273b296a196921e726f3280a19d020422691287c183e20a0250e283118c01f16252527a917141f98245f26ff16c31e2424a1254d16411e6f231e25d415d41dd322c6246e158d1d6c228c242c151d1df6214b24c414891c7921f0233a14241c06211d23b713ac1bb320742226137b1b78200f228c123b1b5520cd2154125e1b39207f210812ee1a152088211112201bff1f58216f110000bc1e771f00802526b12a342cda22ee27fd2b8e2d4f242d28a32cfd2d03250e28e32c5f2ede2465281c2d8c2e46256d281d2d932e702578280f2d7e2e9d257928022d6e2e9f259028fc2c612ebc256c28042d4e2e6e2534280b2d502eed24cf28e32c9f2ef524ef29ec2c312e9b24512b832c472d10253d2a532c7d2d7e240a29622cf12d4223be274f2cd62dcb212827932bf22c8e21cb263f2b092de420dd26f02ad32cbf208626c22aa42c54201f26842a8f2c1020db25542a702c711fa1252a2a5e2c271f78250b2a592cf31e5e25f829532c841e2925e329482cf91d0425d029412c861deb24bd292b2c231dab249329102ce01c6f245c29d12ba21c26241429662b551cb323d428082b9c1b5f23b528c52ade1a34239e28802a4e1aed228628522a101ac3226c28262aeb198e224828f229bd1944221828ae29d719dc219e274c2976193621fb26d9282619952055267528c9185b20af25f4274e181f20f82408271318cf1f9324942647176b1f3e2414267e16ef1eb42395251216431e142324257b15b71d7b22a52401153b1de0212b249414b91c542166232214351ce52090225d130f1c94203022a612291c7820f12158122e1c5720c9215f12371c1c2076216d12f51bbb1f2d218412211c431fd220ed0f0000c21dd41e00805c266a2a1c2cd6212328db2b0d2d20239527452c7e2d04241028f92c902e1224cb28612d022fab242629732d112fdf24cc28282d992e14257428e32c392ef7244628c02c222e02253828af2c1b2e10254c28be2c3c2eea244728ef2c772e68247f287f2ce72d822489281e2c5e2d6b24d72a432c7f2db2251228d52bb92d0323f326b72b6b2dca21b126e52aa62c62216b26582a742ccd202326412a672c3f20e9252d2a552cd81fcc25032a432c5e1fb025dd29342c3a1f8125b429222c5f1e5d259729212c351e4b2596291e2cd41d0925a129232cd41ded24cc29252cfb1ddd24e929322ce81da324aa290c2c5e1d542400291e2bc41c2a24ae28b12a1d1cc9239828802ad01a92237c28612a0e1b792370283d2a461954237d28352a961931238a283c2a14192e238c283a2a1119ea226e281b2ae118d8223428c929d5182622692710290919ca2007262f283118012017253c2702179a1f8624712615171d1f1324c3253a16aa1e70235d25d515381ef322fc247115e51d7b22a2242915921d2a226324e014231dc02111247f14c61c622130232e145d1cf120882211140b1c9b2038228913b01b5920dd21bb124b1b1d2095216212491bee1f3b216012d11a931f352195118d1a481fdb205d110000141d6e1e0080b624b029162b0d2285251a2bad2ca0224328752cc52db1208728772dfb2e7f215228862dfa2e71232428fc2c742e4424d927922cec2db5249d27552cb12d91249627362c8d2da92405283a2c892d99241d283c2c832d3d2424283a2c7a2dd5231228212c912d3e230f28902b3d2d88224128022c252d5e22c727252bea2c9a215427282be22c1221e626cb2a962c942061263c2a332c0d204726d129ea2b9f1ff325a529b32b391f8b2584297a2b0b1f16254c29322b761ec9241e29022b141ea82404290d2b641df22409291b2be31c44253829992be81ce524c829522c491c0325682a932cf41c2c25f629252cb21d4c240c293a2b381d0a235628672a461c36231d28e4292d1c2f230028bd29191bfa2359282d2a2e19ee23cf28a22a411879230129d22ada1817231329da2a3418c222ea28c82ac5181b227328412a4f18a121bb2767294b18a5217a266f284e184e21662545270b18852078240926e917391fcb235725bb16561ef222d024e715001e892282249715ba1d332249245615931dec2114243215551db021db23ab14101d6d217d236e14b01c202118235e14581cb22066229b13f31b4c20ed21f512631bf01fd8210c12141cc71f8d21d610871b3d1fe32170130b1b181f7b215f11000dbc1a761dd681cc252329502ad420f2248a29fd2aef21be26182c322d9e219d29d02ff8308c21c2286a2e1f3082217826142c562dab22fa25982a532c7f220a26742a3d2ce2212226a62a512c30237126032b9e2ce9234227a82b1f2d41245d28162c812d882253288a2ce52db7221228452c892d67219c27862be82c682085279b2a5c2c5a20e9260e2a1a2c64201f26cf290a2c1020a4259b29d92bce1f7f2567298a2b9b1f502534293f2b0d1f1f250729022bcc1eec24e028c12a881eb924bd28a62a441e7c249828752ab31d7e249028652a331d51248028e12ac11c43243729332b361cf125ec2b682d331d9525b42b012dd51d852284275329d01a5a2307272929441bb9220a270c29441a8e220d2715291c1abe228c276829c218d52374285b2af613f223a129a72bd5152e242e2a152c0318ab23ad297f2bfb18b422c928642a1c19ee21e72751293119ae217a266928f9187b20532503282d18a01f372424261b17351f43235425b716a01ef52233252c16091e7a22d82448155a1d0a226224af14f31cb42119245514971c6921ae230414531ceb20f0221513061c67204b2297126d1b2a2008221512821b1020e421b9114a1be21fb7212511a91bc71f6321f910361b721f8321e811761a131f45214a110000201d2d1e00006c240828dd28ef205d249c270529451fb2245728732a6f1d672ca8324534f50fa828bb2cd32dee242525a029882b982195240e29f12a562022253829e82a6f2135252329f22a3821ad255929212b0c214026df29bd2b6221e7269c2b532dc0219128a72d6e2f9322b527232c922d1d216025b8290e2c7a2017255229552b872022253429132b462043252629132b162026250929d92a6a1f2b25de28a62a261ff824ae28672a981ebf248828342a4c1e8e246d280e2a0b1e65245b28fc29d51d3b244328f5299d1d25241b28d129081d1324f1277229b71c3424ec275329271c12245a272c295e18201d9e212925360db620d3247e2764189121cf256f28721af120b8255628b8197e21dd257928bd1913223b26842884169e226b275f299b156a23a529832b9b146825422cbc2d7f154f25102c9f2d1919c7221129972a2b19eb20a9266b2895188d20eb24cf26f717b0202d24d1251a183120542328255617d21e8a22ae24f815331e152243246d15af1dc721fd23fa14791d7721bf23ca14591d40217d2361143a1d05212e234814f71cbb20c4221114981c65203a220514321c3220d521df12e31bf81f7d2175124f1b8c1f4521fc11351b481f07217f11b21aea1e06211b11091aac1ee5209a100000d51a2e1c00003123b7262128fd1ddd23e4274229e21fbe21002563266e1dcb191d1f2b21a5158623fd271729c11ff024e628972a3a210025db28aa2a27213825ee28af2a3b214125f6289e2a1e215b250729b52a11216c250f29bf2a21210125b628292a2b206a232427df28571dbe247228e429901e2a25c3287a2ada1e1b25c528812ac61e1325b4287d2a721e1c25a528742aea1d10258d284e2a931de6246c282e2a1e1dcc245c28172a031dac243a28e829251d86242228d529fb1c5f240628ae29d01c5424d7278d29c41c58249f276c298a1c4924662752297a1cf323f5260629271cc8218f2525280a1aaa1f0224402601183920bd2336262c18442021247026371845203624b026381862206c24ca26551888208124ec2680195220b42440273f19d71fa52655288915e027f32e8d301e0b0428ce2e8730c31c32200526c2276218f51fd323d8256218481f2a2315250218f51da422b6243916281e53227e246e16a71df5213e249615831dc32122247215541d7621db23f714431d3b219423e714e31ccf2015234714841c7d208122e813161c2520ff212713f21bfe1fb621f412791b9e1f6e218a126f1b681f462116121c1b301f2921d211321b111ff3207c11d11ab41efe209511461a2b1e8920c810000007193f1c00809b222c26f027b01dfb2189262d28d71e1020a924f425fd1c511e58230525de1aa2243827dd28751f2d247028d229e61f8f249728022a7120cb24b328202a8920ec24ba28302a61203925c5284b2a7f20fd24d228982a2820d4247428fd29c51f55234d27c028b11d3824bb277d29d61dbc243928db29041ed0242c28b329921dd4242528a3290b1dd3241c289029c41cbf2413288b29f51ca92401288a299b1c8d2400289029c11c7124da278229a41c4b24b52771297c1c1b24772758294a1cb2233c2730293d1c3223ee2605292a1cb4229726c728621b4c2227268028ef1af921bb2514283d1ab42136257327f5194621d4241a27361998209324e426cd1834205a24b826a11829204024792695182b202d243d261e18252017242126b91729207a2382255816fa1ae31eae201f0d9a109819dd1c4d01ee1c8b20632284136a1fb8212124e816871e9b210e247316ab1d592105249a15731d3721d6231415711d12219d23c3144e1dfe203423a514091dca20d9226814a51c9720862211145f1c69202e22a713181c3c20e9212b13e31b04209121e712841b931f59219412481b5a1f4b21f611271b4b1f5c2174111e1b231f35216d11511bf31ee1202a11f41ab41e8d204d11961a481e1220471000006018751b0080eb23cf250f27091af3206425b8261a1d4e1f4324c725f11bba206824e225561cba22812644285d1ed823b9272c29fa1ef72315286c29161f3d24352892294d1f8e246528cb29961fe8248928f4291620c9247e28e129f91f0e2410287029fc1ed6223f27ce28e31d5a234d27db28b51d5424c2273e29fd1d8c24f2277329851d6c24fc278d291e1d4624f1278e29f21c2424cd277529071d1224b5275829b61c0e2496274429b21c05246b2729296d1cdd234f271129541c90232427fa28611c4023fc26e928321c0723c126c328111cc42281268e28731b63222d264a28081bc821b425ef275e1a362132254427bd19b420cc24c62672195720862486260619072046245426aa18db1f1b2429265318c11feb230a260d18bf1fad23fc25a817991f5f239c258217c51e70229024b116731a1d1fdb206012ef180b1edb209910ea1c40200e2346118c1db7207a23f4116d1d2121d42323144d1d1521c32357144f1dea2093235914361dc5203423f2130c1d9c200023b213051d7420b922a713d31c5b20a2225b138f1c3f206d2270124e1c2d205a229012071c01201c222412511b831fbc212a11af1a051f6221b810561aa01e3121d5103d1a6e1eff2067108f191a1e2821d90fda19f81dc120211045120f239324590f73271b2c162dc9244f29422c3e2d1226982b422c5b2daf25f32c832c4a2dfd222f2e832c702d8a20e92fc42cca2d5c19d4304a2d772e5d948531eb2d3a2f0da46232222f453025a87533f830e93144a92d3489338d3422a68034b834a13597a56c32ef2e6530b7a467310c2ca02db6a25a30d22be32cea9c0a2e5c2bc62c75110e2c612b7a2c691adb28072b8a2cdb1e8428d82c1e2e5b1d9729f52f2c31bc9ca32cf6326d3430908e2d9634d335e71e4b2dac34e8357c20572c9033e134e798a8287d2f52312121eb23b72bb22d5f1e8423802a932c011b8b23df28402b9a1a3122142a722cd11ae022da275f29681a7a20512696286f19cd20e02525281a1a56205d259f2744198e203225432788193720e824ea26e1181520972488267f18811f572421262218221f2224c525db179d1eca23852548174a1e6f233925ed16081e3923f3244d16a91deb22b124ea156f1d8c2285245f154e1d38224a243e15331df3211224d814db1ca021c92386149a1c622191234a143f1c39214a23ea13271c372115234513ba1b0421ec2233136b1bc72049227e12e61a632097210a128b1a36208121ba11a21a21208421ce116f1a0e2075214511751ac91f2d214a116219fb1ec620fe0e821ae61e4520f6100000351d6c1e0080ff275d2c6a2de924ae28c02cc52d2526d9299e2ca12d33251b2c082df72da723792d2b2d3a2edf21962f982d9c2f491cdb302f2e902fad9fc631f02e42303da46a32ca2fd030e2a6d6328e30aa3156a7383302315a32b0a8ee33103192327eaa543336303a3100aa4b32a02e2c3071a81c31842df82ecaa76e2e4f2dc02e2da4fb2bda2cc22ea99f172a1c2d832f299da8294b2e2c306396a029e82f4331158dff2ae030a1328899882a6e313733fb20312a733147337822f9294c31d53237207629a2300a32b61f2729562f4231db1f7b27d52d1830cf213126a92c5b2e75207325502c3c2e3b1f7724732a062daa1c2522bc28c32a6b1ad8211028be291b1a4f2118277129721ae4218d26ba28d21a4621b225d5278219772039254327eb18c61ff22408274818281f98249426e117811e58242a268717931e1b24c225de16a71ebb2343259316c01e5223d6244a16d11ef2228b245a16761e7d224a24a815f51d2b2222248d15631de321f123b714c91c90217f233014a01c56211c230c145d1c1c21bd22a313121ce4207d222013c81b90203522d012e81a4420d1210c127e1a17209521af111e1af01f63210211321abc1f2f21b9106b1a901fdb20e510a419241fab20f70fbd19b51e3b20740f0000b71d371e00804528272c2c2d20252b2a282d302e71244a2a352d5d2e1025302b7c2d862ef924fe2ce82d192f9d236b2f032e402fb4928f30912eff2f2e9a9731272f7230f2a27f32a82fd430f8a6393343308331b1a86f33a230e931d4a89f3370309f31cfa949331f30373124a96432852fc13026a8dc30992e213050a6852edb2d6b2fffa2fe2b8f2d7d2fac9fbb2a0e2e1130769e592a842e71307ba0f229162fbf305f0d0c2aa02f2b31831bb229c02f4731661f7d29ca2f5231d21a1b29a22f3731e71c8828222fe030e91e0828862e6d300f1f3327cc2dd42f1d1f2326fb2cf92e111e35254d2c212e8f1c82240d2bee2ce01ab12391290d2c6e198d2384289c2a2f1ab322d2278c29dd19d521e226e6281b1934214c266928d918cf20dc252128c11876208f25e8276918452036255e273818a91fc624c2269217421f602427262c17ba1e2424b025a6163c1ee6233f252916e61d7e23f624d415a11d0323a8249015751da0226a246515461d32222024ea14121dd521e623b914c81c8a2169237414741c53210223cc13471c3521c3227d130c1cfa2087221613ca1bb42047226112c81b7b20eb21ef11101c382068213212c31bf21f33217b11b01bc51fe9206d110d1b6a1fe6206011001c411f9f20be100000a11b811c00801e29ac2cb62d4625ac291e2d142e0126042a942db92eb626cf2a6e2d9b2e71265a2c492e173083260c2e882e08304b25742fa62e07305022f930232f5e307e947032e52f01312ea6483306302131bba82f333a305d31b5a70933033023318ca7f032fc2f083172a74032872fc53000a6af30ba2e4a307fa4392e582e253045a18a2c1b2e0e30aa9e1c2b692e393004981d2a8f2e7730371afa29a22e7a30bd1d9729a92e913043205f29a52e8e3018206729b72e9930041fd528852e8130bb1d4d282c2e4e30121e4a28db2d1830921dc4273c2d5d2f9b1cad268b2c552e561cfc25ed2b922d391c3325e02afa2c421c4324e8294d2c761b0d241b29742b8c1b31239b28782a1b1b8322fd277e296f1af321fe26c128e11952214f2656284219a420e825192896184b208025b7273e18d41f1e253827bc17671fc824c2265117f31e6c244c26de16b61e2f24da25a216641edf236c25f415461e90231925d815fa1d3a23d5249215b61dde228f2452156f1d7c2252241015fb1c132217245c14841cb821ca23e8134d1c69215a238713f51b1521da22f712131bab203b223112ba1a7020b32182117c1a27204221f210311af11f0721b810491ac51fcd207010fc194c1fb8209010981a611ff72066111e122c1d3e1ecd8309295c2c5f2d792574292b2d432eda26e4297e2dc12ee726742bda2de12e6b26132c472e812fde257a2dd52e34301a25102f122f4d3094237130652f9430061fa931ad2fc630659e8932d82ffc30cca4dc32ff2fff305ca700339d2fce3027a8c332812fbe3002a80e32382fa9307fa68230a92e5b3054a4cc2d062e0730349fd32bf52ddd2f309adc2a332e3a30a6142b2a2a2e5a30aa1bba29212e5130251e2c29022e5830e31fc028f02d4e306d208128f22d443073204828dd2d3330fa1f0c28a72d1030161f2a28412d772fd21ee227b22cf52e741e5e26462c702e371d2b25b52bab2d861ccf24e02af02c351c7824442a7d2c2a1c36249029212cd91bbf23bd28482ba81b8d222428072a791a0622a4274c29f4198a21fe26e7287919472148267028371902218d25c527ab189d20322532270a186d20e424bb26bf171d2098244a263317811f5124f125fe16a81e072498253416261ea5234225bb15b31d2c23f6244f156c1dc622a724bf14311d692258248b14e51c032204244914a61ca6218a239d135b1c592120232213221c1021b722c512881bc32059222b12f61a81200022b3118e1a5e20ca215e11931a52209a210311dc1a44206c21d810611a20206e218110981aec1f1d2148100000541dd71d0080e3289e2caf2db1260a2a4b2d3b2ee8269c2a872d802ebf274a2b312e702f1a27272c4d2ec32f8325eb2cc92e213095240c2e3e2f8b30db23dc2f5e2f9730e220fe307d2fda30c49a58325f2fbc30a8a4f532c72f20311ba5f8326f2fe1307aa7d432792fde3053a71c32f52eb9308ea67f30702e383051a4c52d082e18302b9fb72bd32d43303a95d92a142e2a306a198d2ade2d1230cf1cbf29eb2d2030841d8229cd2d0630881e09298b2dbf2f8a1e8228832da72f621f41284f2d852fed1f2a28fa2c082f5a208427a02cc92eda1f50262d2c2b2e981ea325b12bd62d351e2d253c2b522d681dd524a82ad02c0c1d6324e829562c561c1c242829c32b101c9523a7281f2b7e1bc9225828972ab51a7c22ea27c829c61a2a221d271b29711ab3219b26c128a2196821292666285819ea20b2250f28db184c203f2555273f18cf1ff324de26b717591fb3249b26ad17ea1e7d243c263917911e3c24eb25dc160d1eef238825fb15c91d7e23212564158d1d1523b3242c154c1da4226224a314fa1c392218245b14ab1ce421a723a513631c90212e232f13e21b2a21a82274128c1bd5203322c111731b8d20d8214211561b5e20a2212e11791b44205b216e105d1b032051213311c41ab91f1521b01200001e1f461e008070276e2b672c7423a329fc2c462ec426f02a7c2df52e2a282e2a3c2e822fc427922b402e7e2f5428732ba12e3d30e327432c112f4430d2279c2d1d2f7730cf26be2f202fa0309724fd30332f89308214e1317a2fbd30a49eb7326b2fc830d3a24a32592f9f3065a2a731f02e5d3078a03e2f3c2ed02f8b92012cef2dc62f551a652ac02dc22f6b1df129ba2dcc2f0c1f9329cc2dcd2fdf1f8429ca2d0c3034201729952dea2f7520ae28502dac2f5c2059282e2d7d2f4c20f327f92c572f681ff927a32ce82efa1e11283a2c312e1e1f3027c42bb42db21ee125462b462d7a1d8025032b382d6f1dff24812ae92cf01c7b24ad29412c6e1c27241729782b1a1c0a24cb28fe2afc1bee23a928d22ad61bfc226128542ae71a38229c274529251a09220527b928f71990218f267c287f191f210c2649281019dc20a1250b28cd1875203e25a72768182b20e224f8261e18671f7c2457265117c61e3124e225b2162c1eee2384251916d61d84232225c415871d1923cf242615561dcb228624f914081d762241246714cf1c2622fc233514981cc62191238613321c5021fa22df12961bdb2055223612d01a7c20f1213211ae1a5020cf21b710d41a3a20bb21d210561a1420ba217910371aa01fff2063100000d51d4d1e0080ba27172cf72c87242e29852d472f0f289d2a672dce2e40289b2aea2dff2e0e28dc2a392e9a2f4f28972ac82e42302428eb2ac52e253027288a2c322f6830d127502eaa2fc130e2252130fe2ec43010222331052f8e30cd1d6131582f9330139e8f311d2f743065a09b30a12e1c30349dd02e1e2ef52f2892282c002e0f30b218a42acf2d3130e01c582ac22db22f861f7729bf2da02f2b209129862d7b2f3021cb283c2d3c2fbd205728f72c012f89200328c12ccd2eee1fb527982cc82e9e1f4027622ce52e2a1f4b27422c742e9e1f7826b42bb22dc21ecc25e02af32cbb1da5259a2abc2c421d9625422a842c341d3a25da293f2cdf1c93248b29f52b431c2c244129742b1f1cbf23ca28d22a0c1cdc222d28072a2b1b33228b27af297a1ad821492772291b1a7921c5260529071add201a2696285b196c20b42522289f181c204f2557274b18bc1ff424c826a5173d1fa32462262717f61e6324fc25e1167e1e2824ae256a162f1ee1235d25c315001e8a2314254015ba1d1f23b9240315711dc2226c247514141d3e221f242814a01cb521a2239313361c2d21f922e512fa1bdc208a221512e21b96202b229011851b6720bf214f111e1b24204b219f102f1abf1f22215d10c119061fbe2009110000841d961e0080f326012bf72b6022e928372d582eb227ae29b22d1f2f3628582a182e6b2f9d28382a222eb62f8528432b8f2ee42faa289a2bd42e3f302228982c4a2f89301926cc2cdc2fbc30a326f52df32e5e30e1240330df2e6d30e4216e301d2f7930011a4830df2e4630cd997f2f372eca2f1499202de02d952fa110762b7d2d7e2fe6197929642deb2f411dab29a22d712f0020662a6c2d5e2f3d216e29562d332fc120a028002dee2e4f205228d22ccc2e4520dd27982c8e2ec51f5d27662c462edc1e10273f2c1c2e951e3127232ce72db31e9327c02b8c2d7c1f6126462b682daa1e3025a92a122db61d02250e2a912c3b1db924a229162cef1c5f245e299f2b911ced230829362bd51ba623a028952a8f1bf82234281d2ae31a5822ab27e329451a002242277429ee19bd21c426ca28ac193e215c2665282e19f920f3252228ea189c208125a0278e1839201c2520272c18cb1fd424b4264317681f85244826e716c11e4824f1254b168c1e05249425bb15191e8b232d255615dd1d0d23d424cd14a81d92228c245014571d102239241214201da921d2233c139d1c522149238312421c0a21fe2203121a1cbe207b22ca11cb1b8e20fc211011a01b5d2096218510df1a2120852176104c1a891f2121cd100000531cb31e00801627f42a1d2c1a2214294d2db62e6227392a7c2dd72ed227882ae52d302f0328e329e32d532fbb27be2a682ebf2f5528902b7a2e23301c280e2cbd2e3030fc26482c452f583068265f2cef2e83300f25e92dff2e72302c24952ef72e67309321d22e882e2f30ef1e8d2d272e972fa41d352cad2d8b2f3a1dca297b2d622fe71c502a5b2d6c2f7c1f43297c2dbf2f0320d8295d2d6a2f1d21b029e02c3e2ffa20de28c02cac2e4320a228912c6e2e0e2025285e2c412eb91f77272c2c0f2e611fba26062cc32da61e7126be2b932dbb1e8226792b772dcc1e0b26ec2aee2c501e71255f2ac12caf1dfd24052aa02c361d7924b4295d2ced1c32245929c62b621cc02302294f2b0c1c8923bf28262b721b94237c28aa2a7d1b2f232e28f729191b5122cf2787293e1ade2146273a29cc196d21d126ec280e194e215c268828f118da20c025082885183d203a254827e6178f1fdf24cb260b17251f97245826a816c91e5224022652165e1e05248c2593159e1d64232c25eb14641de022d8246a14261d7b229d243714041d34225e24a613d61cef213d246013971ca421c42300132f1c3f21eb226112aa1bd1206b22d8113d1b9a203a228511471b7120d9212311841a2620642199109c1a841f012169111f160b212822ab0cb526d42afe2bf7210b29fc2c642ec3262c29682dd02eab27152ae12d362ffc27ac2af52d662f1928a22a1a2ea82f9627a22b4f2ed32f26288b2ada2e5b307b275d2ade2e2d304727dc2ac22e3330e026ff2be62e3a30db24ad2cb32e18307d20862d8b2ee42f5e1c5c2c432e212f6e1c672b4f2dd62e6f1de429412d122ffc1e0b2a862d892ff320a629722d502f9521b729122d2d2f4b225129e12c812edb21a828a92c6f2e64211c28742c322ec220d8273f2cc72d5220f227df2b8e2d262050277d2b7f2d3a1f9626182b3b2d821e3b26e32ae12cce1dee259f2aaa2c861dc7252f2a8d2c621dd925b329682c731dd9249129312cca1c36243929ff2b291cb523dd28132b9e1b512393287a2a3b1b47233f280a2ac81a1723ed27b0299b1aa22293277629ce19412234272f29d419e121ee26e7287a198321982696282319f620362642289f188820c025d52739180d204a253a278c17871fdf24b22604170f1f892441269416bc1e4224d425e5153d1ef42373257615d11d5523092517158d1ddf22a924dc14f91c4522452412147b1c95219f235613111ced20cc223312e01ba12057220112241c9e203b225012e81ba32045220712951b73201722c811ae1aaf1f51217811e31a121fe220ce12c712fa204322c9082327ce2a342c22201b29132dc12efb254329892df42ecd276e29a82d182fbe27a729c02d2b2f1c28e329fb2d672f32285b2a232e882ffc27762ba92e1730b027f829742e06305226052a462e0a308625cf2bd32e04306725932b8c2e42309924df2bce2e1830e422a42a0b2e712f5020072b1c2ddb2e90202e29752d562f3e2097286e2d3c2fcc20bf28282ddc2e3a210c29072dc32e8f219a28b42c852e11216028742c2d2e92202a28462cf42d5a205527062ccf2d0920ab26af2b8d2d581f9c266f2b732de81e9126332b1c2d7d1e7826a62ab82c071e0426492a7b2c441d5f250a2a5c2cb41c1725dd29452cbe1cd524a029272c3b1c92244b29cd2b421c4e24ee28282b891be823b428bd2aec1a9e237928522aab1a50232f28022afd190e23e2279f29c7196f223b2719294519be21b426bc28b4187c2164267c287e181a21182639287718ca20bf25e22731183e203d252f27f2160420cf2494269416991f7e242626a616351f2c24ba25e715d31eb62356259615891e3123fa245a150f1eb722a8249e14dc1d64226c242314701de4211624ad13e31c74218823e612951c20210c237812451ce320b9220712ff1bb5207422a511921b72202c22eb10211b4f20e521d611021bfa1f5821ed12c408a920a921af01fc26752abd2bb11f6428d32c482e232643295a2de42e81277b29e22d3b2fa9279d29e52d502fd827c529042e732f1d28e729182e8e2feb27172a772e0f304f271c2bbf2e4d30ba272e2a862e3d30b826ae297e2e05308825872a122ee52fb324752a012e8a2f0422d829a92d142f1d218229522dfa2ed220de28492d082f16218f28ff2ce22e47217728ea2c972eeb20ae28f02ca92ee4207d28a52c412e6f207828402ca62d6b206128282c982d9320fe26ba2b862db31f9026652b722df81fa2263f2b3d2d07202526f42a342d1d1f9925932ae92c7b1e4725292a8f2cd01d0c25e129572c461df524aa29302c2e1dd2246929de2bc31c4b240329282b3e1ce223bc28dc2aca1b94239428b12a7d1b36236328652ab81afb2232281d2a811ab222f727b929dc1951229327502987191c223a2705295919d921e626b9281e194821762665289f18c92006260e283018452084256827f517cf1ff924b02647173b1f7d241526bd16ca1e2a24a2255316991edb235c25c615451e4d2309257d15b81dbb22c924af143f1d3c228b244c14d21cb7216624e513791c6d213b245313321c282137246612081ced20ae23b111d21bc6208c2214119a1b7b20d4218210691a172093218610a71ad41f412133120000f221432200007125cc2a112c60224c28c72c172ea425ef28592dbd2e09271629872d072fad269629c92d502f2d27df29052e9f2f6027e829112ea22f4127112a392e8f2f1c27332a502ee92fbd26c52a762e3d30fa26d528e22df62fb524a828b62de92f67244429a22da42f89248128912d562f402325288b2d0f2f70225d28522d142f06231c28ce2ce92ed9222d28c42c622eb8222c28802c0a2e3e22b0272f2ca92d89215827092c822ddf201027c72b562d7d20e726752b2a2d3120ae26322b062dbc1f6226eb2aeb2c071f1526b42acd2cb31eb225772aab2c461e5325352a8d2cdd1d0525eb29622c3e1da6249029242cdb1c6c244929d12b5f1c44240929792bf31b2024c828172b391bec239728aa2aef1a7d236628442a8e1a35234528092a4f1a05232028cf29bf19c422ef278d298a1950228e2745292b19d3211127ed2819193621832683284418c72001262828d3175f2081259d2729171a201125f126b816a31fae2458264116241f4c24e1257215831eeb2389255515f01d53232f25dd14751dc322cd2478140c1d372276242214a31cc8210f2498135f1c5921402329130b1c0621c0229f12e11bc52059227412da1b8f202222fc112e1c4d20bc215f12401c102058217b12201c321fe220c11200000d19c61c00806a27132c322d73245b28b92ce82dfb244d284f2daa2e2226ad288b2d182fab260d29cc2d592f34274929f32d8b2f3d274729ee2d662f14272c29df2d4e2f8026e628d12d6a2fbd259d29fc2df72ff225302a142e2330ae2573295e2d662f3b243b29ab2d842fa522e5281f2d052fab21c928232db02e8a217e28112de12eb521ac285e2ce22d7722fc27702c1c2ec0210628492cdc2dcb216927062c842d20213527d72b562dc8200927962b2e2d7820d2262c2bed2c24208d26de2ac42c951f2826952aa62cc71edb255c2a8a2c1e1e9c253c2a6f2c8b1d6e250d2a592c0f1d5c25fa29402cfe1c2025c029262c7c1cfc248b29ff2b5d1ca1244629a42b0d1c45240929182bfe1aef23ce28b92af21a7723a2287e2a891a09237428362a281abb224528f529e4195b220b28a42990192522a72758290819fb212f270329e6189b21a926a72897181921092643282d1872207425a027c817e81ff224da26ec163e1f982463265716dd1e5124ed250216891e04248d25b8152c1e722332250e15c21ddd22cd24b714701d732269247414e91ce821212405148b1c74216c2371136a1c2121b922bb12381cd42053226f12051ca0202c2221120e1c7620ed21b911a11b3c20cf21d111051bc31f71215a110000361af41c00805127012c162d64240f28d62c102e37250029ef2c632e9425e128742dc32eb825e828a82d112f07260a29c52d462f55263e29cb2d522f96265229c92d432f62263229b02d352ff1254329b22d222fb8256b29d82da22f2025752aa32da92f61254c29512d142f1d244828342d8f2e2a22d128982cfa2d6422b128292c982df6213029042c702d4c221828ff2ba22df8209127072c582dcf206427942b262db2204427662b072d6920ef26102be22c36208c26bc2ab22c941f5626952a952cfa1e26266a2a7f2c131e10263c2a602ca61d7c25f529492ccd1c4825c1292d2c9f1c0e25a3291a2c6d1ccb247e29042c321c8b245b29d72bf41b622429298d2b151c0f24f028112b1b1bbc23c228b62ac51a5d239928792a721a162375283b2acd19b4224b28022a7d1957221e28c62931190c22e6279129f418c8218e2754290f194d210527fb285718d4204c267e283a1836209e25f2275f17a01f0e251d27ad161f1f8f2460263c16cf1e1e2490259315581e652315253215d41dc522c424c614871d6022882487141a1df92151242d149a1c9221002489133d1c17213523f112091ccf208b229c12cf1b8b201f2265125c1b5b20db210712641b35208b21a211f41a1a209b21b211231bf31f64213b100000e518841b00801d26502b972c5623ef274d2cd02d89241b28e42c2d2e0b254e284a2d9b2e4a250e29752d1c2fec251029a12d462f3826ee28a32d3a2f5526dc28af2d372f3e26c0289f2d182ff825ae28772ddd2ebf25fc288f2dfe2ed725b428b82d6a2f1d254e28032d8c2ee6233628302d552e04235c28e32cf12e04235128a22cb12eb4224727622cca2d72212628ea2b2f2df92134273e2b0e2dfc200427ef2ae12ca820a426ca2aab2c382038268c2a8d2c8d1ffd255d2a712cef1ec725382a632cb01e9725172a5c2c281e6c25fd29512cf81d3c25e129452c2c1d0825c529392cf91cf624b529212ce71cc1248d29082c6e1c82245129c22b331c32240e295b2bd11bdb23d328022be01a9b23b328c02a3a1a54239628812a001a1a238128582a6a19fa226928232a5219bf224b28f329c3186e221d28b329e7180e22bd2754299e187a212a27e3287c18cd208e26762834187020dc25ec27c5171b200a25fe26b916e11f9e247e260216961f3624f225c815081fb72379255c15421e10230425c514a71d7d2290244f14251de0212024d813b01c542162232613371cf3209722f311171cb1203c22c611091c8920ff21b211f21b6820db219c11f81b312089212d116f1b002042213f11e81b761f14213e10000035169f1b00800c27d12ab22c79211e283c2c6d2d8e238227bd2c1d2e152476284e2de82e79241129b52d672f14256c29d02d952f21250a29ac2d282f9f25bd28852dee2e8d25a4287e2dff2e702590286b2def2e7a258128592d002f26250329582de62ee2247d28422d022f5f24c327962c662e57237428b92cf72dab233f28262ca72dd522a927ff2b752df321d3263e2bf32c1b219226a12ac72c8c205e26712aa42c0c201826492a6f2c661fd925142a4e2cc51ea425e529332c361e7125c2291d2caf1d4325a229112c7f1d3c259d29112c781d1d25aa29152c581d1225dc29242c4c1d0925002a372c431dea24db29142cdb1c8c2439293a2bf61b4324d028ca2afb1aca239f28832a611ac4238d28562acc1a95237d28322aed188c238528302ae71860238e28372a5f1838239428392a4818dd227928252a1218c0224528d92901182a2282271c290118cf203f264228ca160620422559272216a61f8f247326d515fc1e2024cc2553159b1ea823642509153d1e12230f25c114e21d8d22ab247c148b1d36225d243a14101dc1210a24b813b81c59213a233213711cf320a222c6121b1ca2203c224212b41b5a20d821df113c1b1b208f218411281be51f37210d11a91a881f2a2114115d1a311fd5208c0f00005619a01b008013250c2aad2b602293253e2bfa2cb0228328c52c332eb7205228c02d5f2f32236128bd2d4a2fa3242e282d2db62e3124e427d42c3d2ed924dd27c22c2e2e0d252728c92c362e1a256628cc2c342ee8248128cd2c332e43248328b52c1b2e24247628bb2c492e6e2371287e2c0f2ea522a728182c7f2d70227328a32b0a2de8211a28752bfd2cfb20a227062bcb2c6b20bb267b2a552c691fb126e329ed2b5e1f3026b129f52b771eba259429a22b4e1e28255a29382bf81ddb242229fa2a9f1dac240229f02ae11cd524f328e92a811c44252129392b041cb724c1293d2c301b4825892ab32c071ca025702a672c9b1c7a246c29882bd61b84235c284f2a271a11231928de29c919b722fc27b629e11960233728e1293519a523bd28892a881864230a29d92a621809231e29f52a8c17d522fd28e82a0d1848229a28742a7317d221e1278729e716da219b267928f01680218d2561278616cc208a240c26c616731fdf235e25ae15401e1023df24c414e01d8b228a24d014aa1d3c225124a314a21dff2114244b14791dba21ce232c14491d7b2170230714d91c232105236413571cae204d229e12db1b3c20ce218c11681bde1fc4213a11b41bb51f962191106a1b5e1fdd21d110e81ae91e73217c10000046104e190080d7250b298c2a171f7025a929612b371fa3276a2cc62dd21d72290a304c3175208328dc2d632f34209626f62b362d0b223f26c92a762c70226a26d52a832c27238126122b9e2cce23da26b42b082d04248b27242c732d50248928992c062e8e235f28e32c4a2e09230d283d2c852d60215727702bd42caa202327b72a622c8920b326482a2d2c72201726f3290b2c0a20b325a629d42b901f9a257d29872b1e1f67254f29442b8f1e41251f290d2b151e1925fc28ce2a301ef024d728a92ab71dbc24b4287f2a371db2249528612ae81c7b245e28622a6e1c84236a286b2a011b7024972ad82c441b5c275d2d092f071e6d221d28772943197923e5261f291e1a402337271129f0198d2235270929bc19b8229e275229801943236628112a2716b52370297f2ba8154c24422a232c4f16d423d429a92b8417db22f0287e2a1118dc21f3274a29231869218e266d28a317ad209225fd279a16102060244d2632164c1f452346259015b01ee1220f2519150e1e7022c2244614641dff215c249c13041dae2114241513df1c6021b023e012831cf8203a235f12181c9c20ab22c811b61b4620212271116c1b1a20dd21d210771bf21fb7216d10811bc91f76215b0e0c1b651f9221c511671aec1e1b212810db11e01d001e710b9124572847299c215524b9270229f31fcd246729f02aff1ff82dcc345d360b18d926152ccc2c0f238325b829272b372136255229272b31208b257129372bc6207c254e291f2bb920e0254829092b221f1e26d129ab2b68207027312c862dc6216b28d22d8f2fdd21da26642bf32cbd20272562299a2b25200f255429562b12203c255629442bd51f67254729332b791f45252629fa2ab21e3725f628c22a551e0c25c128802a211ed2249428412ada1d9d247928192a571d84246728062a3a1d64245728f329d61c4e243928d0297f1c1124fd277629051c4924f4274529801be8234327ed283e18041baf1fcf22c104f21fb2237c26b614a4219d2517289319f720a6253c2830196d21d8256c28c018ed21472697285c16d42140271229981507232e29e32a29156d25212c8f2d4a146f25472cc92dfa17712392291d2bfc173d2109279c286517bf201225e626b31688203724cf25e916092047232f252716c31ea222e2242815371e2c225d24bd14bf1dd421e9236114951d8321b6234114601d4b217c239713251d072131234313ce1cc320d922c8127f1c81204b22db121d1c3e20c721cf11aa1bfa1f6d216911121b901f2c21fe10f51a461ff2208510c31a101ffc20c6100a1aaf1ea9209b1000000e1c171d0000ed2233274d288d1ef223f6274029111fac21d62474265d1dec1a8220d021be16d6235e2888290a20c9242029cf2a112104251829ce2a502111251829c12a142113252129d32af12029253029002be22042254e29302bf920a724b128422a7d1f4a2240262f28371ad0246428de29d81d1e25cd287e2a361e3625db288e2a541e2625c428872af61d1f25b228742aa41d0f259728562a001df1247428312a9b1cd0245928162a7c1cb6243e28e929641c7d242428cd296f1c53240628a729071c4024da278229ec1b4c24a5275d29011c402480274e29711b2324312736293e1bf4225a26a8287b1a9f20b724c8264e183a20f423012666175820252447261d178b204d24a626711785207d24b02636187e208124df26b1187520c0242b27e8188e202326c527f2166926a42d852f58107528eb2f34318b1ae920282767280518231fdb23cd25a616841f672323250117d51db322b2246f151d1e4a227c24b2157b1dd7213f24cc14501da4212224a614311d5f21db2340141e1d372193233114d41cdb201f235d13871c87209722e712171c212017223c12d91bd91fc021fc11a11b821f73216311aa1b5d1f3c216911501b211f1f21c010331b021fe7201511041bd61ef020870f2e1a471e83200f11000077196e1c00807e22772615280a1d432293261b28741e1a2082249625ce1c591f2e24d725fd1b3424ba270c29f41f2f248328d729ea1f9224b728132a5320cb24df283b2a6620f524e428582a45202b25f028932a4e2058250229cb2a262025257028d429b31ff52286270229351d40241028b329e11d7b242e28da29711db7243728d029ed1cbf243028bc296c1cbc242428a229251cb1241d289c295f1c972411289a29041c7c240d2895292e1c5c24f1278129101c3d24c5277029e61b112482275029941bae2349272b29971b3e23fe260129281bc322a126c028af1a5f22362683284c1a0822cb251f289f19aa213d25762747193d21d924f926e11893209224ae264318412068247b2634182e203e243226ca1741203b2419267217552025240f26181782201b24f725db15531ec9213c24db0fa812ac192f1de101131c7e1fa921d5108d1f9a210724e714131e59210324f9149b1d5b210824e8147c1d4821e7237e145a1d1521a3231414511df72030230e14ff1cb420ad229e13a11c782055220f134e1c4d20fe211412181c2a20d421c811cd1b0220a62182117a1bb81f942147114a1b7a1f7b212511361b661f7d21af10441b391f3e214f10351bf61ee3204610ca1aa71e892069108e1a3f1e1420c60f090b4519411c7d814d24ed2502272118112198251827391d8d1f8b2439261b1cf120ef246826651c2523c7268428271efd230b284b29e11e122445288d29c81e6f247828c729631fc024a928082aa51feb24c8282b2aea1f81249a28e929811fa12315283f29921e1b23a1270029eb1dfc23d9273529c01d5f24052868290f1d8a24142887297c1c72240c289829651c5c24052895294f1c3824e92781292b1c1924d32768290d1c0c24b0275129001c002483272e29e81bcc2364271429b51b85233c27fe286e1b49231327ed28331b0f23d626c828fa1ad3229e269e285c1a83224b266128111af521d62506288d195a2149255427fd18c620d924c826b8185f208a24752652181520492441260918df1f19241b265617b71fe823f7253017bc1fbd23e625c516b31f7e23d025bd16f21ec92220251416791bb01f1c218a125118791d2a200610a01c0c206f2271103d1ee6207b23c00f921d3221d4239b125e1d2021c02394135b1d0021a52390131f1ddb203b23a712f01cac200b236a12db1c8d20c8224e12b81c6d20ad2221127d1c512072225311481c32204b229011111c0f2009224811301b911fab21ab108a1af41e4b21c10f281a8b1e16214d0f121a681ee420330fcb19261e06211710f319ed1d952089100000232270240000cb27182cba2cc7253e29792c712d0827b52a992c882dab270b2ccb2cba2dbc26f32cf92c182e0226052e3c2d602e4024df2e562d5c2e0b21b02f992d6b2ef29290301d2ee02eb3a2eb30a72e0930f1a6a831fc30853250a80133b934a735b9a688301b305f319ba0b42e682c242e2aa0ec2c142c452dac96ff2aea2b3e2d231deb29bf2b242dd920a8287b2bf02ceb21f026f12a702c68204826052cd22d141c9129f63065323b1f3f2d74349a35bd90262d7b348a35b0a29f2c143406354f9b5f2cb3330035711cc52c9f330e35a821c02bce327e3405261c2a3931d4326f25ea26e52f6131c22142233c28802a6e1d2721b1254228211b8a20da25032841196e206d25a527e118af204e254927e51861200825e92654182d20ac248426c817921f5c241d260e17181f1f24c5259c16aa1ec22381253616601e66233625f115161e2e23f0245415c51df522b1240d15701d9a228924c214431d522256244f142c1d142224243c14e11cc421e823fd13b61c8821a123b7136d1c5e215023bf12451c56210f238312e31b2421f6220312991be4206822cb11231b6f20bf217111c11a3f20c12126118f1a2320b8210011351af01f7c2162104a1aad1f292170105419fb1ecf20520e831afd1e5f2099100000651cce1e00807f28a62cbd2da6251e293b2d632e96274529dd2cf12d9f26d72a202d352e5025f82b6b2d8f2e1025812dd52d202f2623742e6a2ec82f7721f32fc72e37307d1c8130522f8a30169dff303630803135a26d312031743235a52431c13147335ba48230b130d83154a4b42fe22e5a3065a3b02ddb2db32fc89d482bcf2d522f940ef629ef2c362ebb962029d42c312ef2924629962d602f8d9a2429db2e93305b1c142a6930f0318d1b9a2a693125337914642a4a310f333ca1ee29ff30a132b2962d29873020326e1a2d293030b731b91e7828c12f49316d219228ad2e5430f81ea626972d802ff21ed224512bfe2c591b8d22be28782a791aaa2202289d29d519a3212627732992199e218026bd28de191321b725b62704197820422516272a18f51ffa24e4266a17701fa6247326ee16df1e682423266716ea1e2624bb250d16d41ec2234b25fa15d71e4f23e9249a15f11ee722a7244b158b1e80225824fd14101e45222f249f14681d012204241f14e71cbf21a6237a13b91c7d213423ab12841c3721c92260123b1cef207822f911f41b942027229d11d91a3720c521d5107e1a0a2089219510431adf1f59216c10211a9c1f3621f60f551a701fe6201d10b719111f9e20c70ebf19a61e1d20d00e0000a81c941e00003f285a2c582da726442a492d512e1a266c2a4a2d6a2e9e26a02acb2d192f3427802c6f2ec92fc027052def2e3230a9267a2e1d2f56309224512faf2fb0305f21523019302531db99d3306c309531fea1e830a530d831fda0ac309630b331dca224304430553114a2d82e7f2fbd3040a03a2d502efe2f7e9e622bfb2dd82f2b98352a0c2e1f3003173e2a582e2d303b14372a8b2e6530519ac6291b2fae309018a329a42f0b31c61c9b29e42f38311d1c9629e22f4c314f163829a22f2531e5958a28ff2eb8302712e927582e4230cf191627bd2db82f9a1c52262e2d322f761c6225752c202e1b1c3b24e02aa82cf919dc237b29942b1b19d2237128782a1419b922e8277829bf18c821e326ca28681855214d2650285e18e920d1250a284c1886209025c8273718532034253f270718e61fd224ba26ea164c1f71242a26cd16a91e2b24af25d4154a1eeb2345258115e91d7923f2242c159b1d0f23a724e814601da6226524b414311d3a2220244014071ddf21d9231e14b71c92216823b913841c60210223e3125a1c3c21d422a3121e1cf7208622d011081ca3202322b111f91b6320ce212d11cf1b2a207b21a1109f1bfa1f4a218510751bbd1f0e21d810e81aa11f092118105d1c681f5920ea050000371c9f1d0080152ad82cd92d69257f2a992dde2e54268c2a012e682f0528be2a0c2e512f2428b82bc22e2e3086287e2c3c2f5d304028382d782f9330ed26a62ee52fd330e2230d3010300c31939cc9303730503122a5ba3048305b318aa46c303b3049317ea30b3012301a3106a13f2e602f9b30599eef2ccc2e6530cd9b752baf2e64303698832ba82e69303e988b2ab42e6230e90dee29a72e76305a1cac29c22e8630ba1e8729df2ea330ce1f6d29d92ea8306f1e8029cd2ea0309719a829802e5830aa939a28182e4430ad18c527ac2dd82fb4190427242dfe2ebc1a9726a42c592e121baf25f92b6d2dbd1a2125d82a962c3e1b5a24e029102c201bd72315293e2bdd1afe228528532a1f1a4b22d3276a298219e721fd26bc282b1960214f264628b418c720e52503282e186d2081259227bf1705201b2521270917961fc824af263616341f6c243f26e615f11e3524ce25af158a1ef42364255b15751e9e231c25ec14231e4b23e0240615d21df0229e2470148f1d982263243d14261d32222524da13ba1cd521e12335137d1c7d216d23d812241c2b21e222d811521bb12043222b11c91a6d20b621ca10731a202046218d10261ae51f0821fc0f5b1ac61fcc202110ee194c1fbf203010971a5b1fe620a71000004c1d1b1e0080ec28b42cbe2d4c27342abd2dcf2e45278b2acb2d0d2fda270a2c362e492f0c28a62bd12e33300d28f02c3a2f62301d28d12cd42fc8304928682df52fdd30c927472e0e30073134262e2f19304531e422bd2f28302e313e19632f22301c31d79d5b2ffc2ff63092a0f82d6d2f9e306a9fbb2c112f7930cf9c292c992e7230b398ad2aab2e6b3086144f2a6e2e4e30d61bb529552e3d30d61c7029482e3830731e1229252e2c30281fbd280a2e1f30391f6c28f12d1230be1e3b28c72dff2ff91d0b28702dac2f401df0270f2d3f2fb51c5527bb2ce72e591c4626552c282e131c42259a2b722d6c1bef24d12add2c861b80242c2a6f2c5f1b1f2484290b2cc01a6c23be281d2b141a8d221f28fa295d192b229f2734290d19c321f526d928b8187921482666287b181a219125bd272d18a0203d2539270d176220ed24c526af162020a52458264a16b51f6124f925e015ef1e162498254915721ec02345254715f41d4a23fc248a14941dda22ac244114581d832266241314011d1f221624a113ba1cc621b823ac12681c6f214b2338121a1c2721da22ca11981bd62073225c11fe1a94200922f010ab1a6520c621b510a81a56209a215310051b4b206f212a10691a2c2076212a10d01aee1f1c216d100000cf1d541e0080f328c72cda2d32275b2ab72dd62e1528bd2a1b2e882f9d289c2bb02e0830c8285f2c032f45306228ea2cad2fa7305b275b2dd12fce30e625ad2dfa2ff1304a25f12df52f11318824d52e0f30f9303e20642e0c30ec30f01f452ec72fc7305f1ef02dbd2fba30091eb62c112f7130ca1ccc2bf62e6b30ed1bd12afb2e8a30ee1afa2a9c2e7430551c0a2a5b2e16306f1cd3294f2e0630ef1ca029162e0430661d5429e92dd42fb71df628a72d942f721e8128842d6e2fde1e2c283e2d212f4e1f1228ef2cc72e201f4627852c6a2e5e1e10261b2ce52da61d8025922b942d201d2b252a2b2e2dd11ce724962aac2c911c7924ca29172c2b1c36242b29642b5f1bd923cc28ea2a501bf52264286a2a171a5f22fa27c429f019f5212a27202937199f219b26ab28ec186a2128264428bd18d820b625ec27ef172e203d255a275117a11ff024e926ad16331faa249a264d16d91e78243a26fe15a11e3f24f125cd15281e02248f256315df1d92232f25cf149a1d2323c1249614451dae2269240414ee1c3e221b248413891cce219b236712301c6f210923e911ac1b0c2193226a116d1bb9203522d310501b8120dd21c010531b5120982158106f1b30204a21fa0f521bd91f27215710a61a951ff32012110000b81cc21f0080d128bf2c142e5326d029d82d9a2f4f28aa2a342ec42fd828b92adc2e2c30e328722bf42e453034291a2c442f82304529532c982fb03030292a2cea2f10311d29ee2c1b302731aa28042e13301c31ed24042e1630ff307422992ddb2fdd30be20002d7b2fa630571f552c022f7d302920162bf82e7e309a1f322ad82e9030591f6f2a522e1530a11f062a372eed2fd31f462a002e1a306e206329c12dda2f6920b228862d8d2f1c206f28502d582f22202428312d342fb71fef27042d1f2ff21e9027c52cdb2e311e1d27622c302ed31db826012c9c2d801d5626722b252d301db325f52a082dfd1cec245e2ab82c4f1c4a248e290f2c821b1e2411294e2b351bfe23d928032b8b1ad523b828e42a6a1a37236728632ae8198a22bb275f295b1930221127ba281119d3219b267328c5185c21272646286318e920b4250228051882204d259127e4173120e724f3265617721f86245a268416e71e4224de250b16431e022480257b15f31d9a232625df14ac1d2f23d924a5146c1dde228c242214151d7f224724c013d71c2b22022461139d1ccc2195238312311c5e21f922eb11c41bd12031220b110c1b7420ce219410a81a4c20b621e50fdd1a3f20aa2112104e1a1420a4217a0f301ab11ffa20560f00007d1aa91e00009f28102d2a2eb826a829102eac2f97289a2adc2d2c2f6d28b02a9a2ee52f7c28e52b1b2f533012292e2c8c2fa9302229152c752f943004295f2cb52fcb30c0284b2cf42fd9304e28292cbe2fe630ee267a2cb92fdc306f25492cd52fc5300d22b32c572fa630e61efd2b012f823083182f2bbf2ea430de14262b752e5b300918692a2c2e1230f71b272aff2de02f4c1faf29ed2dbc2fa7203129a52d652fd620b628562d472fa8207a28232d0d2f6d202528e32cc92eb91fd427b42ca12eda1e7927742c9e2ef61e98271b2c502e131f5726a82b862de81d9e251d2be52ceb1c9125a72aaa2c8f1c8425352a712c841c1525d729322c291c8a248929ef2b6f1b26243829642bcb1ac023b228ab2ac91a07231a28f829271a50229727bc29e219eb215c277d2984198821e52604292719e5204026952890188020d12530283118242061257c27b717d91f0425d226de165b1fae245d267016071f6d24f825c115931e3424a7256215331ef62359251315ee1d9d2319258514a51d3623c9244e14591dd4227d248d130d1d51222c242113a11cc421bb2389123e1c3e210b23fd11111cee20a0224811f01ba62058222811a71b6e20d2218a10f61a1c204d21780f081ab31f16214210091ae81e6620481100002313d01d00801a27e52a612c051fcf28822ddc2ef127ed29042e882fa528812a822eda2fea28d92ac42e28301329522b542f843053296f2b832f9f3032290d2caf2fdb3017295e2bbb2ff330a128972bde2ff2303c28fb2bcd2ff030df26132b732fb730e524132b2a2f7930fe22cd2ae02e7730cd20e62b8b2e41303d20f22a4a2e4230741f002acc2d2c30cb1fa729e52de12ffb1fbb29ad2d842f5e208c29712d2e2f3b20dd280c2dda2e42207728df2cb62e29202628af2c832ebb1fb3277a2c432ebd1e6827582c202e101e3f272f2cf02def1def26de2b8c2dad1dcf25162b3b2d161d3525732ad82cda1c1e25112a5b2cc51cb524b329f72b631c57246c298a2b991b08241d292e2b0f1bcd23ab28862ad41a3b233828fd29541a9922be27d0296719302264277b291119e621da26d1282a195c216a265d2863180121f725192819189620822592278317342015250b27e216c81fd424a5265f16841f88243d26bb15e51e4924e1254215a21e07248125af14371e872322256314091e0a23c924d713d51d9a228124eb12861d272234248d12381db821cd233012a11c532136237d11351cf620db22fd10a71b9a2047228a106b1b5820d42166103b1b2e207f214a10821afa1f6621b80f5f1a5a1fea201e0e00000c14011e0080a226b32a442ce621ff286e2da12efc26202adc2d4a2fb227082b812ef22f8428f52a842e2530aa28182b212f6430db28092b292f82309e286a2b8a2fa7308e281d2b9a2fb0302b289c2b622fa530a1270a2c892fc930f526a72b362f9f3082254f2ad62e5930a9234d2a7e2e5a303a22f52a722e3d30b221792a342e4030ef201c2a092ed22f50203829b42d1b30f51f2029a32d972fd01feb28312d1f2f0720dc28d22c782ef51f9428882c462e7f1f4628612c1f2e001fe6273a2ced2dea1e2f27142cb22d4a1eb026e62b902d3b1e5026802b5c2de21d1726f82ace2cad1d8c25752aa02cdb1c0925092a752cb11c9324ab29252c431c35245529802bd71bdc2306291c2b531bc623c528f02ace1a75237528962a871af1222b28ff29131a4322d7278b297b19e9215a273929d7187b21df26ed287d1847215e267c285218dd20cd250128f7174a204f2554278a16b41ff424d726df15301fa52468267b15f51e652416264e15a81e1a24a025b314d81d732328252014751de022c424b4132c1d6e228c24b812ed1c362253246612801ce1212e24d8115d1c90219b232912f51b2921cd222b11771bcc205922d9103a1ba3203122b110321b7520e8214410821a2f207821fc0eaf1a6b1fd520b81000005619741f00802b26ae2a502c7c214f29942dd72e85264129ba2d1f2fca27552a602ee72f5628f22a972e22308f28052bb42e39309c28362be92e4f30bc282f2b482f9630d128b12a512f8f306528472a302fbb30b627f32ba12fd730be27582c4f2fd1300725042cbd2e6f307c23512a8c2e69308721242b972e6230d9215b2a322e3e309021e529d12dd32fd3212329a12d5d2f5e21f728662d142f7821b8281c2dbd2e32217528d42cb82e29212b28922c812e9720df27462cfe2d1d200428f62b9c2d7c1ff626872b932d181e6226232b372d961d2526f12adb2c081dd125b52aad2cc31ca725702a9b2ca11c5f250a2a742cb41c5f249c29402ca71b0f242629cf2b1b1bce23df28d52ad51a6a23a028812a121a412352281c2af1193023fa27b229e319ab2298276a29761939223a2725291819cc21f026e528bf1869219b268d286e18f6203f263e2810189120d325ce277a1715204d253627af16ab1fe024be264716221f8d245b26d715da1e4b24ed253915571ef9239125d514d71d5b231b257414721dd922a5242714ee1c46223c24f612841c9321c1236012401c0f21372385117b1cbd20d122d211701cbf208a22c311251cb32076226211161c7e2020224f11671b911ff9206410e01ab61eb42068120000b01814200080c226912a522c0f1f3729832d112f68264829ae2d0b2f8827ec29132ea12f39283e2a5a2ef62f8a288b2a982e2330aa28d62acd2e33307d28442b392f88302728eb2a0e2f80308527272bdb2eaf30c4262d2bf22eb130fa25ea2baf2e7d30ec25a72aab2e89309a24bf29292e4a30f323a82a282e36303b24b429e42daa2fed222e29942d392fff21f6283b2dfb2e7621aa28192dbc2edf209728de2c752e89207b288d2c212e2d202c28462cdc2dc61f7a270d2cc42d631feb26d52b912dd61ede269c2b5b2d661ea926582b252d741d7226d92aaf2cea1cfd25592a5f2c911c88251d2a412c371c3e25e8292a2cfe1bed24a929092c831b87245229b42be71a4624fc28312b841a0c24c228c02a2c1ac02386284c2a781950234b28092a2919e3220f28c429dc1870227d273b298b18d921d226c92821186f2174268428ac171b211f264428c917c420bc25dd27ba163e203e252127fd150120d2248f26a715a41f87242a266515301f3624c2251315a61ec6235e25b1146b1e3e2300252b14051ec322b524d113d11d6a226e24e612611ded2115246112b71c7f217e2397116c1c282106233e11281cef20a9226611f81bb92055222d11b71b792016229310e61a4820c5214211fc1af91f3a211d1200001618062000801327542a032c651d61283a2d792e1f26a829a52d0e2f1b27cd29562ed12f0e28f229752e08303d28112a942e243053282b2abe2e2b304f28872ae92e66301a28c02b262f7d30fd27d02aef2e8530ca27d029fd2e7630a626dc29cc2e79300a26f8294b2e25304f25d229f52da32faf24b029e92da52f182401298f2d492fa42202295e2d362f14225729212dbe2e94216429e52cb92e0621f128ab2c722e53205528632cf72d092061283f2cb82d54203027cb2b802d821fcb26712b5c2d7b1fa7265c2b372df31e5226172b1c2d9a1ee625b42acb2cd41d5c25342a792c4c1d0325e9294a2cab1ce524b729292c491cc0246f29d42b281c4e240f293a2b891b0b24cc28e72a9f1ab523a128a82a501a59236828572a041a04233528052a5919c7220128af292b1960229e275129dc182422482703295618d221ed26b1287018462172265a287217cc20fe25012850174d207c254a278f160520f5249e262116851f7d240c26bc15fb1e2b2496255215ac1edc234d2516154d1e5423ff247314b91dc222bf240a14481d44228d247513c31cbf215f24b9125e1c5e2138242a122a1c1c212b246911f71bd520aa23b910d31bb32065223310c01b6620ac21710f871a12208721be0fee1ad01f302175120000101f722100004d27532c902dcb2477285b2de22e3e262429cb2d362f0a278a29102eb12f6e27012a572eed2fe2272d2a8d2e1a300e28172aa02e2b30ff27272adb2e45300a28e529db2e5e30bd273a2a002fb530d327e329a12e4f30bb26222a3c2e00307e267a29f72db82f5625d328a32d5e2f9024ea28ab2d652f8224df28772d522f55248e282c2d222fd82360281a2dd92e0b230028ae2c482efc2193275c2cde2d3d2150272b2ca42da5200427f32b6e2d4220d7269c2b3c2deb1f9b26532b102d461f60260f2bf02ca91e1626d62acd2c041ec325982aa12cb21d57254c2a782c471deb24fd294d2cdc1c8f249d29192c3f1c55245529c52b091c39241c29792b641b1324d528132bac1ad223a228a52af6196c236c283d2aa81912234428f8296419f6222328c6294f19aa22f227862915192f228a274329b718bd211627e628601834218e267b28ef17c52003261c28bc165f207e2577272c1627200225d326dd15d61fa9243f261715461f4b24d025b914b71ef7237f255c14141e58232e25e5138a1dcf22d0243213171d422283249c12a61cd12117249012571c532145232012111c0921ce22be11d21bc420622285118a1b8a202b225211af1b4a20b121fd105e1bf11f3821c9101e1b601f0b219f100000731c341f0080d8274d2c7c2d7c247f283f2d942ea6257f28a52d072fcb26c428012e972fee262e29442ef82f882772296a2e1a30c42793297d2e1730ca27cf298c2e1b30a027c929802e2830f126002a8a2e4e30b126482a8c2e43304c269c29102edc2ffd24a129f62ded2f36249c299b2d732f2123232a732d4d2f7323c7292f2dfe2e5723e228d92c6b2ec1224f28bb2c552ef621bf276f2ce82d5c217e273b2ca42df9204027092c652d9b20ef26a32b282d0320a826392beb2cb51f5d26ec2abf2ca61e1d26ae2aa52c0b1ee225832a8e2c7b1db825612a782c011d8a253a2a5f2c891c6a25122a3f2c211c3425d729192cef1bf2249429d62bfb1aaa2449297a2b961a3d24fe28032bfc190824d328b32ab1199b23a5286d2a5e1927237728232a0c19dd224928e029d8188f2217289c29a1184122bb2758296a180222482706293e189021b826b028da17ea200c264728f01650207725ab279316d01ff624db26f515561fa0245a269815f21e5224e225e714a21e04248125af14421e74232b256b14c51dea22cd2413147a1d77227024bb13f81ce321242404138a1c6a215c236812421c1421aa220312121cd0204c224911c01ba22029227811de1b7b20e6211c114b1b4620d4212611a01acc1fed212c120000191a691e00809a28402c5b2d39247b284d2dc32ea12597286f2de32ee625c528f62d6a2ffe256e294c2ede2fd226a4295d2e02303f278529482eea2f172780294d2efa2fe9264d29452e0130832648293d2e0d300a2662295b2e2f306525962a462e1730dc250729bc2dbb2f30249728462d0a2f63238f28092d852e9022ad280b2d7e2e7822cc28c32c2b2e18220028482ce12ddb200627222c762d43201427ee2b422d4c2019279a2b1c2d1c20e9262d2be22c9c1f9f26d02ab52c8b1e7126ad2a982c001e4226792a7d2c201d1526422a542cfb1cd0250b2a2d2c6e1c8c25db291b2c3b1c3525b029012c5a1bfb248929c82b081baf245c298d2b241b61242c295a2bad1a1024ec28f62a321ac123c828b02ae9197123a2287a2aac190a237828392a5e19b2224f28052aba185b222a28ca297c180c22fa2792299c18c0218b274d29621852210627e8288317dd204c2662286a174920a325e3278916c31f1b251f27eb153e1f9a2467268515b41e1f249e25bb143b1e7a2324256614d41ddb22cc241d14881d6b228924cf13441d0f224f246f13d11ca621ff23cd12741c392148234912381ce120aa22f511da1b8e2024228b11731b5820e3214211631b2d209d21cc10fe1a0b20b52155111e1be21f7b219f100000471a991d0080a7265a2b8b2c0b238e27be2c022ebf245028622dc52e4c25a6280d2e632fd7254629582ef72fa0263e297a2e2930bc263629662e1330d7263829632e1130b4262e29522e033082261929162ed52f43268629352ebd2f7926fd28282ef32f902583288d2d2f2f65248b284d2dbc2e0a24af28242ddb2e8a235c28102d982e86227a279e2cde2d62217727132c3d2d2a2115279a2b072d802014273d2be52c7f20a726e72ab12c0a2030269a2a8c2c2a1fe325612a712c7b1eb8253d2a5f2c4c1e8f251e2a532ccf1d6725052a482c571d4c25f6293c2cef1c1c25da292a2c791cf724c8290e2c581ccb24a229dc2bd91b7e245f298c2bdd1b38241629302be91ad523d128d32a6a1a9b23b228a52acc196d238e286d2a3e192e237728462aaa1820236628182a3a1804234d28ef292918b7222328bb29f7172422c7276329481778213827ed281a17e320a5267928e6166d20ea25e027401617201125f4265015c51fa62463269b14891f3524d1257814f21eaf235c251e14241e1423e82448139b1d85228024a612261df32121241b12b61c63217a239611361c0121a822fe10131cc3204022d510f21b97200322b610bf1b7520e0210811cf1b5120a321a110991b2a208c21ef10791bdf1f732102100000c519f41c00001827392b9b2c4f217227962cd42dac23f0274b2dbb2e6d247628c82d7a2ffa240a29462ee82f9f2566295a2e2130b7252e294f2e0330c7250029382edb2f0026e7281b2ed72fe225e028012ec12f9325c828f22dd22f9a25fa28e62da32f2125cf28b52d642faf244628262db82e0b240928b52c252ef32222284a2cb22d6b22dd27142c9c2da921fb269a2b522dd420ac26132b142d3d209426a82abf2c9d1f2f26612a712ccf1ee025242a4d2c231eaa25f429332c991d7725cf29192c671d4c25b129102cef1c4825b129102cec1c3e25b9290f2ce21c4925e3291a2ca01c5025ff29272ca61c1d25da29082ccc1b87244d293e2b641a1b24d528bb2acc199a239a287d2acc19a0238428542a3e1a8d237b28332a7a186c238028302af71764239328382aee1739239b283a2aef16d72286282f2a9116b0224d28e9296c160b2270271d297c16c92046264228ad152320692568275f15b11fa6247526ff14fd1e2d24d5258a14991ec0236b254914421e202306251014001e94229c241e13aa1d37224624b812451dc821f4234012dd1c5c213623c411911ceb20aa22ee11361ca02038227811c11b5f20d22199102f1b232092214210131bf21f3f213210a81a971f2d215310681a431fdc206d0d0000121a2a1d00801e25552a0d2c2422df25df2b1c2d62225728e62c7d2e991f4328e92d0730dc224028ee2d9c2ffb2448288e2d5b2f23254728852d262f9e2571289a2d3d2fb525b328b12d582fc625de28b12d4a2f0425d728aa2d372fda24ce28782d1e2f6924b828382dea2e98239e28e92c7f2ea6227528782cda2dea214828122c5e2d33210a28b12b1e2dad20f727392baf2c2920bc26a62a7f2ca81eae26fc290c2c9a1e6426b429022cf41de825a329b62bd61d27256129462b621de7242d29ff2a1f1dc1240a29eb2a6e1cd424f228dc2ae81b232513290e2bac1aed24b9293e2cd7198725852ab52c8e1ab725b02a852c6c1bcc249d29a02bb019ee235628f929b816ee222228e3296f17c0221428d4292519fd222f28d429ef188e23b028792a7b187b230729df2a031815231d29fa2acc16be220029f32a79164822a328752a0816c521b3275f298a15c621a2267b28e4145c21b1258a278a14bf20962420261815801fd62363257214521e2b23f4241b14d41da5229c249213a11d49225e245013771df421152419134b1dad21c323e012221d71216823ab12c71c1e21032334124b1caa2047229311cf1b3620bd211211831b0520a6217410e31bf71f82213b10761b891fb8216d10cb1aff1e48214a0f0000221ac51c0000b9240e29552aab214225062aa32b1f219827ce2c2c2e9c20712925306131612120284c2db72e391fa126002b632ccd1d77264e2a272c061e3727e72ad32c61207c274a2c822db4249a27e42c2a2ee224c727e52c632e72245228342de02e352446283a2dfe2e1e23e727402c9c2d3e2135278d2beb2cfc20fd26f52a872ca3208f268c2a522c5a202226182a152ccb1fc425bc29d72b001fa42593298a2b881e7d256929412b0b1e5c2537290b2b991d34251029cd2a701d0a25e628a52afb1ceb24c228822a4e1cf224a428672a0d1cbe245b282a2ac41b68231828fe29101a3f24d9293c2c791ad9283f2e3130d81ee8216e28c1292b18b723b126e8289318922320271729eb1878223627fd28ee187822a8272e294c19d8225e28e7290f18c9236429712bd6145624412a202c6315e223f129d22be614e3220e29ae2ad515b821f02738297d154f219b265b28b215c520b325e027a8154220782453260d155b1f71235a255d149a1eec2201254a14c21d6622a0247a13571ded2142245512f81c97210a24e411e71c5c21b423d011901c062163236911221cb520de22e710aa1b662022228b106f1b2b20d021fa0f821b0420aa21350f891bd11f5c21620e201b541f6021a50f6c1ad31ef720e40eb514991e711e0b0f9324b62893295c216a24262867299b1e8025052aab2b9c1ffd2d2a35ca36bc1c5c25672b3d2c86216a259329342b5b2056257d294b2b72206d256829202b821f58252629da2afb1c4e25da28582af11c2d251429d42a681d0f282d2cac2d1b1fa028f32da52f5b21a7257b2a762c801f162564295c2b091f35255a29402b801f58256029442b171f6e2558293c2b981e53253629082b2a1e34250829cc2abb1d0b25d628912a451dcf24a7284e2ac11ca7248628212a991c8c246e28ff293d1c6c245628e329be1b53243c28c229151b1a2400287b29b81acf23aa273129831931234f27d3281419541bc91fcb218d0c341f9b22e8254a113c215925c227fb17dd207325012842185e21d82567281718f0215f2690285f1606223527fb28c815ef221729b72ae015d724e22b7c2da7134d25512cdb2d6315da23e829902ba716a1217627b7280a16da200825c126c11563201424b025b3159c1f33232825f114831eb622f6243b14231e36227624f8139d1dcd21ee234a136c1d7821ac230b133e1d4b218123cf12021d122143238112a41cc720142307125a1c81207422a7110a1c4720cf213f11971b03206b2180100f1ba41f27212f10161b681fe9209a0fea1a3e1ffa206b0f2f1aba1e9d2004100000321c501d0080fe2274279a286b1e9824292879295b1ede2124255f26381d5d1bc5205c226117c1237928b729fe1fba245d291a2b2321fa246f29242b4521ea245a290f2b1021f8246729242bfb200b2570295b2bea2016257029772b8620a124da288b2ae21dd721022606284a1435255c289329c31a5625c4285d2af91c2725cc286c2aac1d2425c128702a5f1d1825aa28612a091d022590284c2a621cee247428312a511cba245a28142a231c99243c28e629061c69242728cb29b81b4c240b28a629861b3b24e4278029681b3e24a7275829781a252474273529521a25242c272929521a7623ad26c5281c1a422164254b274e184f203e24172692166220272431263016872049249426e1158c207b24a826ef165a206f24d6269e177b20a924fe266e18b320c425ba272a170026f72c8e2e1110a7284c308c315b17f4211828e228bb17791fb423a8254615751f10230225af15001eab22a924ea14321e4b2273241315941de8213b2491145d1db1211d241714331d6c21d2235713131d422187232a13bf1ce42013232a126c1c8d209722be11171c2b201d225011e51bec1fc621ae10df1b7f1f7521ab10fa1b5c1f28214710a81b1f1f09211b10761b021fd42001102b1bec1ed820b10f941a741e7b20a51000003c1a621c00801522d4263f28951d312298262228351e0420c4243626981c6520b724e926871c872308282f29551f50249828e92914209b24ed28482a3a20c8241f29a82a6320fb244b29dc2a4a2047256d29252b652096253629f92a562061257728c929bf1f2b23f7275d295d1d1a241f28d629711d57243e28e329c71c89243e28d8293a1c94243528c329021c92242f28b1297c1b88242d28ae296c1b73241e28a729491b592417289c299c1b422404288b29f91a2524d9277a29411b022492275629901aa5234f272d29b11a4a230a270129611adb22ac26c328001a8d224e267c285d192b22db251f28b418ae214e256d2754185721e324dd261218b02098248b26261756206a2455261a174520422422268316462047241b26081655202b240326a015bf202d241d26181504207a235b25fd10cb15191a101df601381b8a1e53211d0e4e1f6e210f245514001e862117243c146b1d65210824a613681d5d21e623a213451d3321b4237013321d08213e23bf12f91cc320ad227512961c7e204322f5114d1c4920ed211a11211c2220be21e510e51bff1f9921ae109e1bc91f92218410691b7f1f6b2165104d1b5b1f5b21d50f651b2a1f2b21ef0f4e1bec1ee820300e0c1ba61e93202e10b31a581e1d20300f440838198f1c8b800d24f325ef26dd161b21cf258927f91c2020ee2487267c1c91215f251e27a31c79233127d228391e05244728a329b21e29249128ea29ee1e8b24c8282e2a501fd524f628672ac71fe0240729812ad91f6324c828242a4f1fb72347288029a51ea623182849295f1e252417286829801d5f2424288729521c7f2422289029df1b6f2414289b29431b63240a2892292f1b432400288529fb1a2824e5276b29ce1a1124c1274f29a91a022493272c29901ac82372270f295f1a83234627f628271a4d231d27e628fa190d23e526c928c619ba22ad26a02882196a22622670284119ea21e9251028d818632161255f276918db20e824c926f417772099246f265017232058243626c616e71f252415267816c21fff23f8255a16d21fd123d425f6158a1f8c23d225bf15011fe7225d255715321c2d205821ec115618671dbe1f9c0e801ce91f2222a00f051edd207923c20c7f1d3421062447115f1d2721f2235f12421d0821c4233c12061de4205723f511cd1cbc201d23b111ca1c9e20c7222311ad1c7e20a7220411961c612071226710651c42203c2238103d1c1820f2211210641b9d1f8e21180fc91af81e2e21480f481a911ef720080e5a1a7d1eca20190e321a401ee420f30d2a1a1d1e7b2001101a1ddb24a1258e1a1928232cd12c13260d29902cb12da1273e2a122d272e7328f92a562d672e7b28e22b7f2d952e9e287b2cbc2dc42e5d28fa2cee2ddc2e2528552d052ee02e2c26842dfc2dae2e0d20bd2dee2db02ed59d3e2ebc2fe73095a0e930f834183629a4e42ebd326d343a92b32c3d2eeb2f5e16022b4e2cba2dc01481292c2c782d261fff28cc2b572d80217928032c562d6e21ce27562bd22c9f213327fe2c792eed1f792c2c33a034d423882ce7327a342a1b1d285f2ed52f1c19e924892c232e70089326552d302f629d7628482f8e306ea3db292e31a6328ca4ca2bf6328e3482a4bd2a5d3261345499c824f529dd2bc01a3e21b1250828e218d6209225ec273c1892205e25aa270018b82045254427ba1765200825e526b3162420b324732650168c1f5e240a26c115031f1c24b0255815a81ec1236e251315521e62232a25d114201e3023f524ab14dd1dfc22bf242414851da3229124cb134b1d5f2260247913261d23223424b012e51ce2210a245b12c11ca621c9232d12701c76217123c311501c682124231d11081c372100233c11971bef206c2280102c1b7320d421a810e21a4020d2217810741a2020b9213110251ae61f6821490f2a1ab21f0f214f0f4519091fc3200f0d6d1a151f6b209f0f00007221bf2100009028e82c132e0527102a552d5f2eca27e2296f2da52e9c28b72ac52d012f81280a2c392e8c2f0c28112daa2e0230dd25f82c022f47300826282d342f8330ae25ea2d732f90305720302e42303f314a1e6e2e2d315732891e3b2e19329633551e652d4d31a332441c212dfe2f0931f416352ba82e37304a1d272ad32d432fe81d2a29342d6f2e201ec428fa2c3b2ea71db028712d7a2f801cf128d32e7430dc1da32a7f30b6317f97e029c03019324f8d1429b92f0131989e3128762e8a3024a03428cb2e6b3094a1de28232fac30e9a15c28262fbb30289e1628d82e7e30629cf826ef2df62f4c0ac0242e2bcc2c0618dc215c288f2acc18ff21ab27892940197621f9265429171952216826b028a818de20a0259827431863203725ff262f170620fa24ce2622169f1fab245b26cf15f61e662401264f15021f21249e25f214f71ec0233c25eb14011f5e23ee248c14dc1ef122bb247414951e98227724ce13f31d5e2249240e135c1d0c221b245b12f21ccf21cb23dd11ba1c8c214f239b118a1c4621d422df105b1cf5207b222a11241ca12015227110101b4520ba21940f801a0b208521b50f3d1ae91f6621660f361a931f4021aa0e6e1a641fef20e60ed619f81e8c20430ed419881e0220f00c2d165b2284227d039a28b22cd12dbb27b029c92dfe2ef0287a2a1d2e7a2f4229762bd12e25308829532c382f4f30cd29192c4b2f71300829f82c672f7d30ff27dd2c0630ef30d427b72d3730343109242c2e843091312f98422ec330e231a791642db330e5317b1dee2ca130fa313d1f5b2c4d309431611f0d2c542fbf30f31d762ab52e5030341ef7297e2e3430131fe229882e3530fa1ed829b12e59309c1d9d291f2f9a30061e6829872fdc30311d6229842fe230dd0c23293c2fcc30f692b828de2e9c30769714284e2e323025986127df2dc52fd595e626852d4d2fad109926182dc52e1918cb25732cf72de8187124d82a842c4418be234a29622b6f17a0236728522a5217ba22c02765293817c921ea26be2884174e2132263b287d17e420b925f12775176a2078259e273b172a201d251c27d216991fc62496263916341f71241c267e159a1e2b24b0250815401eed235525c414c61d7823f8246714841d1a23a9243414431dab2261240314221d472222243f13101dec21d6232613d41ca22165234512ab1c6d2109231012691c2821d0223b111e1cd8207622e210e91b82200b223e10d41b4520ba21840f961b20208021480f601bf71f4e21140f4e1bb11f2e21030ffc1a9b1f3a217e0f1b1c431f75207e0a00000c1dc41d0080862a552d912e5b26932a632eb92fb028942a612eac2f2729d32bf52e1c3094294f2c892f8430252a5b2cd72fb430b8290e2d0230e7301129f02c38301c3141289c2d583051314724a02d7b3088314a242a2d7b3097314a23092d7d3095314420902c3b304631bb1f1a2cee2ff730061e5b2b4f2fa930921c1b2b082f7a306a1c3c2be52e73305b1b6b2aa52e5230f91bec29c72e6f305b1eb029d52e8630631f8829e72e97302f1f5029c92e98301a1d2c29832e6c30d7156929202e283047985928c02d2b30e411e0276d2d6f2f3a16ef27102db92eee18ba26972c382eb3195c25e12b502d2519bc24bc2a6d2c9d194924c329d22b0d1ab123f228fb2add19dd225b28252a9f190e22b5275a29f518c1210127b9286318482149263e280718be20e225ee273b175b2080257c27a416e01f0f2507278f157a1fbe2496264715171f692432260115e61e2f24cb257b148e1eef2371254214621e9c231f252514211e5123ec24f613d01df622b0248d138d1da22278243613211d3d223624a912d41ce621f823ba118e1c8e21842367112b1c3b21e322f110671bbc2028226410cf1a6c20b2210910631a28205421da0e451a04201f21ba0e551ad81fd820cb0ef019581fc220b60f871a551fd4203d100000f81c861c008010291d2d362e53287a2a572e912f7129a62a692ee22f9629842bfa2e2a30e429e92ba02fc330162aa82cf52fdf30fb29642c25300a318429a92c2b300031cd28b32c36302231fa28b92c78308a317828fa2c6f308c315326b52c52305e31a522322d0b301431a11f302cf12f0531261e3c2c9d2fc1302c1f082b262f95302b20082af92e6f304220ee299c2e443030209729772e2e30431f6f29562e23300f1f2b292f2e1630b61ece28022e0a303e1e7828e02df22f4d1d5a28ad2dcf2fab1c2d28542d6b2f021cc527fa2ce52e751bf226b62c8f2eab1a1326482cf72d341b41257b2b572dd31ad524a02abd2c471a7624fd29502c4c1a0e245e29c42b44195c23a828ca2ac718d5221f28ca2970187122a0271a292f18f421ff26c828bb17762139265b28181701219a25b227801696204c25332770154d20eb24c5261a150c20a1245426cd14a51f6124fc258814fb1e1724a02588148c1ec1234c254014021e5123fd24ce13981dec22b1244413631da1227124ff12141d422222240612d61cf521e023bc11831c9c217c235a11301c45211123f710731bde208e226b10de1a952010221210ae1a6220cf21ec0fb71a5920b721340f061b4e209721890f701a30207921e80ee01ae11f0321600f0000851c8d1e00808729192d312e9227692a6f2ec42f3429632baa2e12307a29102c6b2f6430062a572cf52fcf306f2a812c2c301031ea29b32c31300f311c29c12c45302131c428bd2c66306d31c028922c77308331b628502c7a309331ea27312c66308f31fb26e32b36304d31ae25672b073036317e247c2b9f2f34316523e72a332fd730a721a32ad12e8d304f20552aad2e4d30cb1e102a972e3430d21dd229462e12303f1e7429122eda2f771e0429ce2da02f841e8a28902d5b2fec1e47283c2df62e861e0b28e02c7d2e2a1e1f277b2c082ed51d5026292ca82d2b1dcf25bc2b5d2d161d5525332b062d5e1cdc24642a7b2cf51b6e24a529d02bc11a382435291e2b6f1aef23da28ae2a0c1a30236e28422a7b196722f927b2298518f8212c2712293718c021a92696280f18812136262f28c517d920b725c4274c162d20352542276c15901fea24de2657152c1fa52495267815e21e74243e26dc14b01e3e24ef25b814381efd2386256414ec1d8c232e252e149f1d1523be244d13411da5226624d312df1c2f221024c711981cb5217e237311431c5521f9220e11c91b04218d229e10941bad2033227e106f1b7520de21fa0f871b492089210a10931b1f203321450f441bb41f0921fa0ed21a6a1fce20510f1d1d66233124c6094c29ea2c352e5b26402a9c2e07301329f82ae92e3430c129642b842f8130002a012cac2fad30292a922c0d30e730842a7f2c1630ea30492a1b2c3d302c318229a02c76306b31ae29662c6d308131c8282a2c59307c31f026f92b1c3029311125112ce62ffe307a246f2b752fdf305923cd2b4c2faf304523f12a1a2f9430af21722bb22e5330ad21472a7c2e30306e20aa29032ee12fff1f3129cd2d932f541fbf28892d582f3d1f7e285e2d2f2f5b1f3b28332d0b2fee1e12280e2df42eaa1ea627d82cb62ed51df2267e2c262ee71c7026142c8e2d8b1c56268f2b1f2d791cc125e82ada2c631cec24342a742c811b3e247429c42b781af7231229282b121abf23e128fa2a78198b23b928d02a531903236328552af3188a22c72773293f1851222427cb281a18fd21aa266e28c71780213526382825170d21c125e5278f1691205a256d2772161f20ef24d926d1155c1f912455263215de1e4924da25d914501e05247d257514f41da2232a253414aa1d3023dd24ff13651ddc228d2402131b1d7f2246240e12cc1c2b220424b011a51cd321a62382113b1c5621f8220411a31bb52018221910061b5720b221890fb71a4120ac21340fc41a342092217f0e411a142088216b0f0c1a901fef207d0e641549222f23b206d8281f2d582ee8261c2a8e2ed92f4e29882a7e2ef32f06296b2b6f2f72307f29422cd22fbf30f329a92cc72fc230b9298b2cf82ff030b529462c3430343140293a2c33302831b728272c2b3010310b285c2c2d302d318626e82b3f305e31cd24eb2b07301f31ee22332c5f2fa3308120272c2a2f9a30291d572ce62e6f30691c0c2bb12e5a302c1dc8293a2e1b30db1eb329dc2dd62fab203929c42d8b2f9220d9287b2d562f8420af28432d0c2f19207628fd2cbc2e4e1f1b28b52c792e421ea927782c3d2ed71d3627222cf12d7f1d7826f22b802dee1cf025772b1e2d871ca825b52aab2cfc1b7825332a502cb81bde24cb29242cdf1a79248029d32bcf192a240c29292be119b1239928782a6e19de222728f8293c191522a927bb29a318d92173277529ca188a21f626fa288918f7205e268a2811188520e225262867171e206a2584274716e91f0925e0260816691faf246e26a615ee1e6824ff25e4148d1e3324ad25a014401e012463256914ed1da6232325b213ad1d4423d8245f136f1de7228e247212201d6b223c241412b61ce121d32396115a1c4c211623ab102f1cf820a2227d100c1cb72062225810b01b7520d7212010091b1f205421c10e2b1aac1f19219e0e281aa71e3e20b1106c235223df22088df4269f284729ad9abb29162e8e2f5428792aa42e1e30fb28c22a112f493064296e2b6d2f8b30b7291a2cc62fca30f729dd2b15300f31d429e92b3c3032318729e02b303022312b29f02b18301031e028782b173031312a28ab2bce2f03317827752ba52fd4306c26f62a4a2fad300325ca2a162f9a307a23cc2a8e2e9830f321712a5a2e5630e920d229212e17301c20a029d82db42ff11f53297b2d372f0f20dc281b2de72ef51f8628f12cb32e681f4a28c72c852e061f0e28972c4d2e2f1eb1276b2c112edd1d3327342cd12d151d9a26e52b722d081de7251d2bfd2c801c6925722a972c201c1025152a412cb81bb224c429e92b291b68247229702bb81a20241629072b4a1aa423a828622ad31922233c28de290919a822e127bd29b318762299277a29901814220127d2284a185721762650288a17f320fd250a28fd1690208a258327711622201f250427d615891fd7249d2652152c1f87242c26a814a71e4324c92552146f1e04246b25a113121e742310258312ff1df922b2246f12d51d94226b249911951d26221c245c112b1da7219e23f610741c3621ff2246101b1ce720a622e20fb31a7b205e22300fd51a3e20ec21550fe41a1e208a219d0e581ad21f8221ce0e5b1a571f2521e50b692142227f213215fe2424288c282820a629d72d452fbc27b22a742e0e309628302b132f5130d228012c892fb2307c29cb2b23301831aa29c32b21301531c129012c47305231d229192c43303f316129272c2f302831de287c2b083015312c28de2a992fd1301427af2a5d2f9f30f225f22a2b2f8e303225a52a012f6b30b123e22aba2e5c306a22ea2a6e2e09304521ba2ad82dbe2fc0207129de2dc02faf1fb628592d3f2f2f1fab28e12c922e1e1f9c289f2c462e071f6228742c062e301e0f284d2cd92d301e7427232ca42daf1dd526e42b792d981d66266d2b412d3d1dfe250a2bda2ce81ca225862a872c4b1c10250a2a372cb81b92249f29d52bf81a34244529342be21af023fa28e72a0d1aa223b728a82ad219402370285b2a8719d1222d28ed29d0185322e42782297718f2217227312932187921f326da28ba172f21602661285117aa20be25df270f16312048254c277215cc1ff324d72610155e1fa9246826c9142e1f71241f264214d91e2124a8255913181e692329258a12901dd522b824f8113e1d79227f24a011f41c2d223a24c110751cd4210224c8106f1c80215223c210051c1721b62250107a1bc4203c2203103f1b95200622c60f261b6820d021dd0e731a1c206d21760d8f1a3b1fb4204c0ee5217522d32153169e25aa282829d620df29262ea52fe0279c29652e07307928952afc2e5830b128552b592f8d302029832b8e2fb33076294a2bbb2fca308129032bd42fcc306529fe2af12fe6302f29162b07302731c0288b2bfc2fe8305028532a472fad305726162a012f84306a253c2af72e8b30d724d72ac82e74308a24522aaa2e5230ac237c2a262efd2f82233b29e72da02fc221c828842d2c2f4421b2283a2df82e2c217f28f12cd82eb2203b28b12c9e2e2e20df27652c372e561fe527122cd62d771e3d27aa2b8f2d851dab26512b3a2d151d39260f2bf92cbe1cd025e22acb2c6e1c6a25a42ab02c211c06253f2a882c1d1c5b249f292d2c221b26243329832bcb1aa923e728e92ad7196623aa28a22a391968235928272a3a1931230228a429141991228d27502944182222332716295418be21e626d5280e18492189267e287617e2203226332858168d20d025c327e915212049251c275d15c11fd524ac2609153c1f8d245426b314ec1e4924ea251b14361ef32388250914d01d57231625e5125c1dd522a1245b12121d5c223a240312d61cb121df23bc11a41c14214a23fb10ec1c8b20df224811891cbc207322de10361ca5205a2285102b1c662018227910541b6b1ffc20350e391b6f1e3320ea11dd2139221922f714fa25b428212979203829df2d632f4b27b1295b2ee32f3828852ac42e3e308e28ed2a252f6f30f0281a2b5f2f96302a29352b9d2fb23009295b2bca2fd530d4280e2bd32fe5306f28712bd92ff63041280e2bd92fff304527262b8e2fb130f7266a2a442f9230b425322a0a2f91305625e229e32e743067241d2a7b2e11303b24b329f92dd22f3e231a29922d4c2f9e21e928462dce2e9320d228fa2c7f2e382082289b2c202e621f3328502cdd2de01ea327202cbe2d411e2227ed2b8b2d3e1ecf26b42b662d311d8f26602b2b2da11c6226e02ab12c251cf4255f2a4f2cbb1ba725292a2f2c571b4025ed291b2cd21ae724a029e62b5e1a7a245829992b521a352409293f2b77190f24d028c62a4519dd239428482aaa18672360280d2a6418d2222328d4290b1865229c275d299517f221ef26cd280d177821862680287c160f21202647280016ac20b325d0278a15282034250527ee14e61fd3247b26af14991f8e242b2681143d1f4124c8254b14b41edb2362253113701e4c23f924e8121b1ecc22ab24dc11dd1d67225d24a111641df22106242d11a71c7c21652377104a1c282101239a10051ce620b2225010d31baf2061223310a41b7e201c2219109f1a3120b0214d10271beb1f142174114c21a0210d2230104926d52836292c20d3289c2d242fbe26dc29482ee82f1828f029d52e46305128582a222f71309d28af2a602fa430dc28dc2a812fab30e4281e2b862faf30ac286c2ba32faa308f28aa2a682fa0303028552a7b2fae306b27612a462f7f30ef26fb29cc2e3730d3258a29442ee42fc5245b29092ea72f02249129f62da22f6323c529b32d932f5a22e929612d352f82219729152dd32e94201d29d82c782e302038288b2c432e631f1c28622cfa2da81f3827022c842dba1e0527a52b502d8a1eaf267a2b352dda1d44261d2b092d7c1dca25af2abc2c111d5025332a6c2c5a1c1925f829472c2d1ce424c229222c751bad247829e22b211b4f243629792b921a0924e528112bb2199e23ad28a42a601947236628452aba18ea223128f2297d18b52200289f29f4175522ae274a2982171b224b27f9283e17a521e826a528b216112162264c280216ab20e725eb2710163620622536277815df1feb248d261d15651f72240126cd14e81e242493251814901ed8234225c8133a1e6123f42462139e1dce22ad240712441d3f227124a611d51cc9214024bb11681c74211724ba10361c2d2110248510041cd8208823b60f031c9f205722b40ff61b57209b21be0ebb1aff1f7521760e381b941f01211811d419f8215e233e0b81276d2c932ded24a528d92d742f262763295b2ee52f8727c529a02e3630bd27392aec2e57302c28872a342f843061287c2a582f9d308828682a792faa3091281e2a6c2faf305c280b2a332fb03023284a2a402f9c308c27392a092f65309726f029b42e3d309e25a729522ef02f07258829142eb82fc3240a29c02d712f3224a328602d162f76235a281d2db42ec2222428c82c482ef621ea27812cf52d40216e273c2cae2d83201f27092c782dd71fed26c22b472d3c1fb326812b1e2d9f1e71264c2bf92c001e1c26ff2aca2cb11da925b02a972c461d4125562a692c991cf824132a3e2c591cad24bc290f2ca81b74246c29bc2b4b1b50243929722b931a1124e628072bbe199e23a3289a2a601928236328332aa618c6223b28f0296618b1221a28b92958187522ef277e293118032286274129cf17a0211b27e6284e1716218d266f289b16b520f5250b2895155020772559271d151f20fd24c026e314c21fa4243c262914441f5024d525cc13bb1e00247f2539132c1e68232f25ed11921ddc22d5245911041d572289246211991ccf212424ef104b1c5b216e2317111c1c1221f122e010e71bc5208322b010671b81204c226410321b3e20ba214410ab1ac41f28215510911a5f1f34214410830c941f562162003128712c822d1524da28b82d222ff525d328032e702fe1261729972e1c306727a629fe2e5e303028092a302f88307928542a562f9a3083287f2a712fa53073284a2a442f94300a28252a0e2f7b303327012acb2e49308726c4298e2e1c30c725df29772e21300e25bd29422e1030f023ed29e52d962f322326296d2d362f4022ae28192db12e36228728d82c3f2ec1214f289e2c042e7921f6276a2ccb2dd5204b27192c742d3920f826b82b262dac1fa726572beb2cf31e6c260c2bc32cfc1d3c26db2aa92c751d0526aa2a932cee1cc5257f2a7b2c661c9d25492a622ced1b72251e2a412c131b2d25d529082c231ae4248329a42bcd1981243c294d2bda193424fa28eb2afc18ec23d128a62ab2189123a0285b2a7d1804236e280e2a2918b8223f28d129f817752213288f29a8174b22c227552976171822542705293a179921bd26a428a316fb2013264328e81571208b25af27441516200025d5264f15a61fa2245526f814081f5424de252b14861e05247825bc13131e792316253413a01dff22c324ac12381d73225b243012c81ccf210224ac11641c45211f233511211cfb208e22e510fd1bc3203c224910cb1b9d2025229f10d61b7620df213410991b3d20ea214b0f931af81ff921cc0f00008f1f3f210000cd276f2c682d7624f528c12d0b2fcf25d028d82d6e2f2f262429b32e2c30c026f729072f6b30d5271c2a0c2f74300328e629082f6930e927df290b2f7630b527d029112f7f307827002af92e6d300827ed29e72e7b30f1255d2abe2e4e304d254e29442e37306b24ff28fa2df02f0524a028a42d672fec22b228652df02e7f227728d92c912eac21d927762c1f2ec4209427632cb62d63208c272c2c692d28206327d12b2b2d4d1f0b27542be72c2a1eba26002bbe2c821d8b26cf2a9c2cfd1c4d268f2a752c731c0d26502a452cdc1bba25172a192ccb1a7325e229fa2b761a4f25ba29d72b4c1a0425a4299e2bf319ce246429632bb31961242d292f2b31191524f028e62a4d19c323c828a62a0a1960239f286d2a5f18f12274282f2a1e18b0224b28fc29ee174b222728c0297617e421f3278c29a71791217f2746293b172421fa26d0281916c62060264828a9154e20b125ce271b15d51f26251427a5143f1fa4245a264c14be1e2324a825ff13381e972341256013d01d0523e224e5127d1d8522952482125b1d2b225924bf11001db92104245d11a01c54214e23f6103f1ced20b8220911e21b8d203522ad10411b4a20e8214d10451b1c20a2214f10bd1aea1fc321fe0f0d1bbb1fa4212e1000004b1e5f200000a126d52bea2c2a244b286b2db12ea325c728102ed92f9925f128c72e3e307d2621290f2f7130e12637292a2f913024276a292a2f8a306a2784291e2f7b30662777290a2f6d30de266029c72e48309a263329a12e14303d26ea28752e0e309f25ab28fa2d9c2fd024f128b52d2c2f6524ee287c2def2ea82340284a2db42e5c229627a42cd02d3f216a27362c6e2deb206427132c382d7d20d9267c2bf12c28209326142bb62c9c1f3126c12a8e2c2b1fd325782a6e2c6a1ea1254e2a5b2ce11d7f25312a462c1f1d5425172a362caa1c3925092a2a2c921c0425e329172c1b1ce424cf29022c751bc224b229ba2b411b6e245e295d2bc11a0d240e29042bb819b623ce28b42a71197523aa28852a6c1854238328512add1723236e282c2ada162a235c28082a12161b234d28ea290516d6222728bc2905153f22d72778294a156f21332702299a14e52098267f28b3148120e025c927d5141b200725cc26e213a11f99242f267612651f2b24a2251913d11e90232e25c6112d1e0323c6243b11bf1d7c226724de10641d13221a242d11f41c84219323c1104f1c1921bd222310061ccb203722ba0fc51b9820fe212b108e1b7a20e1210e10991b6020b12113102a1b3820b621b00f8f1af81f0222421000004f1a9e1c00003b26822bcd2c12227227c02cf02de2232228b42d332fd824bb28982e2c30ad2570292b2f7e305f26ad292c2f9b30552689290a2f843054266529ec2e6730c7264929be2e57307e263b29942e4030b02520296e2e2b30b7252b29542e0b305325f828092eab2f6b249228962d142f322439280a2d6a2e09233628912cef2d4d2200284a2cbd2d89216427032c8c2de7200727692b3c2d1120b426d92abe2c011f32267d2a682c791ed425352a462cc21da225092a322c401d7325e729202c141d4825c829152c9f1c4325c629132c4f1c4a25d629152c551c7025ea29132cad1b9025152a272c991a6125e129022cc519c9246529392bad19ba23bf28782a05196e239128622aaa1959237728482a9a1950237728302a561828238028302adf1643239228332a271624239c283a2a0c16c7229228352afa14a3224e28ec299f15c1213d270429e014c3203d26372892144a208d2582279a14cf1fc62487263014d91e3e24e2255913681ed4237525e012101e262304258112ea1d91229a24ad119f1d1f223b24c310451da221b7230f11fe1c2c211a23cb109f1ce120aa2270104b1c95203a22460fe21b6520db21ad0e651b32209c21190f501b0c204d21050fd21ab61f3d21510f9a1a581ff620560e0000341c161d00000e25472afc2b112204261c2c4f2d63231c28082dd32e3921af28062eb62f8a23da281b2f6130f5253e29e62e8a30e2263829b22e5c3069263d299b2e42301a2540298e2e343069253629762e1d30842525296c2e143072250b29452e0330a124f328ed2dab2fb023d928602d022f41238e28cc2c4b2e0b222a28402ca62d0e219327d02b3b2d62204427472bd52c971f9726b02a9d2c241e80262d2a3c2cb01d4e26cf29092c2a1de525ac29bd2b291d41256c29572be51cf9243229032ba21cc2240e29e82acb1bc624fc28d42abd1a0a251929e22afa190e258f29212c6c19cb25972a9c2c371ae425092baa2c521a4925a1296f2b7a181d243c28da292e14d1222628ed29c615c2222928ed292719bb223628d52922194c23a728522a541859230229cb2a0e1726231a29f42a0e16dc220f29f92a09157022b128792aba14d321b22750293c13bb219f267528d3114d21bb258f2796129320a5243926b712501feb2367253212801e4123f6243d12e41dbc22a9245212991d4a224b240212741dd921ee23da113d1d8e2187239f11f81c52212e235511a11c0f21e422f7104a1c982041229a10131c3a20c021d30fc41b20209321740fce1b032078219c0e291b981f8321730cf11afb1e0621910100009819cd1b000082246829cd2ae620ff24782a0c2c96206a271d2da72eb62041292030503199203c289e2ce42dbd11d825bf291e2b9a12b425e428392b3098f5271d2bc52ca41bc528d12d7c2f88265929892e2e301d26f6286f2e27308825a328692e27308424ad28ff2ddf2f07249b27892c272eb1210d27cd2b3f2d1421eb26182bb52cc9207a26aa2a5f2c4c201326382a1b2cb81fc025d229cd2ba81e96259f297c2bd61d71257a293f2b611d45254129082be91c15251729ca2abc1cf624ee28992a101cce24c328662ac81ac42493283e2a311ac4245528022aa719ee231128d329b41843230c295c2bb7185628a42dad2f241d3c216d28572935163322d32559285a171f2314270529a0181a2231270a294f183a22a2272a29bf187c225028c4299418b2234a29502b85168824322a1d2c9b14ee23082ae52b45122d232829c52a4b13d121ed272829451414219c265d284d148b20a625a727b213142065241126d413581f8f235925e113631ee422ee24da12931d58227424fb11721dea211e243a113e1d9821f9230811271d6821a1238711d11c19215c232b115e1cc920db22b010fb1b83202e22a90fa81b4020be217c0e9e1b16209321740e981be71f4b216f0e061b581f4521f30d541aea1eed205c0ddb0d131e2f1e8a09a924f8280b2a332100247b28f22959209825cf2a252c4b21d32d4935f23647201026f22ba12c90215f25f9297c2b79208925052abf2bb4216425e129712bf22040257d29212b3a1a0425de282e2a3b96062416288b2945874b27da2a9d2c1e94d828ba2d732f631f20251c2a112c391ef1244429182b471e46256729402b1b1e63256c29502b3c1e762561294b2b031e59253f29182b961d42251729e12ae61c1325e828a42aba1cda24b928642a3f1ca6249328292a9d1b89246e28fb29ea1a71245228d329451a59243c28b229a61935241128852977190424a42734293719cb223f27b7286918971b6c207022490ffb1d3022b5251111b5202c2551271d16ee2042257127f6167321bd253a2814170722462675281b1504221b27c928c6150f231429c42ac716e424ce2b692d86114f25532cb22d321416241d2ade2b14155a219627e328db134f20d9249c264d131c20ed2384256914141f282313259813641eb622e724db12f91d3822702469127e1dbc21fc23e5113b1d5f21a9239d110c1d34217e23d810e11c07214623af10971ccd202b23ed10411c82208d229010f01b4c20de214210801b0b207a21330f0e1bcb1f3721c60e1b1b8f1ff520050eb31a741f06216e0e7f1af21eb120b40f00009e1b481d00807a23b127ac28ce1d50254228ad29da1d65214f25d7261a1df01aba2015222617ce239c28d3292220e124bf29722b94210425f4299c2be1212425102acf2b062219250b2ad92bd4211a25f929e82bb121e524c929b12b0b216024dc28862a0e1ee4203f255d27f9105b247627e528e312212597280c2a8817d9249728382a641bff24ac284c2a171c06259f28492aa91bfd249328432a0b1be02475282a2ae21ab0245f28092a261b8b244228e229ed1a59242d28bc29a11a3f240e289529791a2b24df276829e2192e2497273b296e191a2469272029dd1824242b271a29e9189b23c026c128f0188e21a6258c273717912082243a26ee15722044242f26461589204f248126de1496207a249526701584206a24c42660166d209824c6263f1738204125ab27f5155026be2c3a2e4710a1286730bc312f0cc6226428582981160120fa23e3254c14e31fef22ff24ad14031eb3229524cf13451e512273241214ba1dff21442470135e1db8211e245d12241d6c21c5231912121d342176237111e01ce72005233b11af1c9f209e227f10511c3f202c222510081c0620d221bd0ff41b861f8521a30f031c631f3021cc0ecf1b2c1f0e219d0eb61b131fd620a90da31be91edf20780e9a1a951ea620d40f0000dd19d61b000007220e276028b31da82283260b288b1d1920eb245826b01cc8213f250127fb1cbb2339286529e01e9524ec28552a3420ad246c29002b4a200825c5299a2b9e204225032ae72b87209b251b2a022c8320c125bd297c2b4e201b25e1284f2aa41f72233f28c229c81dc8231a28cf29f21c21243928d829151c56243c28d5291a1b76243728c729cd1a81243828bd29de1a76243528b829cd1a63242628af29b01a49241d28a329891a2f2409289029611a1324e2278029361af1239f2759299b19b5235c272b2971196d231327f7283e190323bd26ba28f318bc226d26742860184922f3251d287417b52166256e27c5165621f824d8265416d520aa24842647165f2071244926ad1556204b241e262415662050241f263715892041240626de14f2205224162630149b1f8d23a825b9108f161d1ac11cbe00111ac41e1a22890b741e52212324ed12011e962116241f13811d752101242613661d6a21db236712401d4621b2233a12391d1a214e239b11001dd120c0225d119c1c86202d22f2104d1c4620cb212110141c1920a321d40fcd1be91f7b217d0f771ba91f69212b0f5f1b661f4121140f6a1b481f2821480e641b1c1f0921430e741bf51ed720a10c611bac1e9920150fad1a511e2b20e70c0000a319331c0000a9221b2600273b1cf1201f26de273b1d97208a2526271e1d3b220626e727d61cc823e3273129431e16249c28062a0a1f4024f528772a521fa8243c29cf2ac21feb246029fe2aea1fe2246329072bdc1f67242a29b22a551ffa23be282c2adf1e02246f28be29391e35243d289029a21c412439289d297c1a62242c289729301a5a241c289729251a4b240e28882993192d2407287e29e5191a24f4276529ca190b24d8275129b519ff23a6272e293119c5237d270f290c1977234727ed28d91840231a27da281e19fd22e026bc28ef18a922b5269928b41857226e2672287a18e021f9251928a11764216e2565270017e820e524c4265f1693209b246f26f11544206024312606160520322417263815c11f0d24fa250915b61fe623e52502155e1f9523d725c9141a1ff2224c253614af1c412057218e115319a11d991f500e6d1c13203c22800ea01df920b823a007781d34211224a210781d3e210c244011421d1e21d7230c110b1dfc206623d710cf1ccc2025239e10c51ca920cc220a109f1c7d20a122d40f791c60206322940f5b1c41203a22610f251c0f20df21160e351b8e1f6d211b0ed51a0e1f1021ca0d7a1ab61ee5207c0dc21aaf1ebb20b90da61a761ec720a20d511a3d1e5f20c70e2021be278e28e01e8628b62c632d37272129fa2cf22d2a28182a902daa2ec628af2af32d1d2f2429492b472e772f6629cb2b922ecd2f7229202cce2efe2f8829512ce32e21304d29742cfd2e2d303628592ce42e0a308226242c1d304a3150222a2fa734d8357320182ee9332335da21d12bd13080318421312afd2cb52e3f1d0229352caa2d1a208528102c882dfa2065280e2c6a2d16216826b42b452d1220ef2ac9309331ad21ba2ca333f734f11e6727442e8d2f6f193a234e29552b531a0a247d28a82afc1bd0232429e12ab81ba4225729c92a2017d8209e287c2a05127f23092ab02cc606da24442d182f62883a22dd286e2afa157820302518284f16f220992504286c1674205a258b274815ca204e253527231567200b25c62638152120b5245426e5147e1f5b24f02571140e1f1e24a6252f14b91ecd236825f913671e7223292598132b1e3123f4245113e21dfa22c624fa127f1da7229524e611551d69226024b911441d2c223424a611fa1ce8210d24c710cb1cab21d4239a106e1c762183234110511c5e21372325100c1c2c210723c50f841be2206922370f281b6420d421df0eca1a2c20b121840e721a08208621300e471abf1f4221070e351aa61fed20f50d4b190e1fbf20c50b6c1a171f7520710d5325ad286829431d4229752dbf2e6b28932afd2d192fc828642a512eb62fa429552bc82e1430432a362c5a2f5e307b2a682c9a2f9830682a522cd22fd8308d29d42cf32ff4304b28b82c2b3028311028aa2c6b307e310428ce2c233148321b26fd2c2832a0337e256a2cc33149331d24572c993010322022242ae02e56306021d02afc2d812fcf203d29bf2d322f9620e028482db82ed120b329de2d962f791d4129fc2f17314d201b2a9230e031e5162129932fd530cb95eb28ab2d8f2f4ea0e626a82c822ead905926a82c042ee3975726f82c722e5f995026b12c5b2ec69ac9257c2c3c2e359a5625452c1f2e079273247e2a882c88165e223928ce29db18fa2186277629e5185c21c826232916183721612697285d17d22099257027ce165b202625d226a8150320e924ab263615be1fa72446269714261f6124f2253d14211f26249d25a613141fcc2342259813071f6223ee24bf12be1ef622bb247912681e9b2284242612cf1d682258249411451d202225240f11dc1cdf21e123aa10ab1c972166237b108e1c5421e122b70f7c1c07218522990f291ca62004220c0f011b4c20ab21ef0d731aff1f7f21760d421ac51f69214d0d361a8d1f5921430d821a4f1ff820830d141add1e7320260df919651ecc1f120a0a265b290d2a4f1e4429822db22edf284a2a662eaf2fe8292d2b182f4e30a32a252caa2f9d30f62a7d2cf92fb9308a2b7d2c0430dd30e82ae62c2e300231e1299c2c50304a310d2aed2c8a308131c629182dd130d9313e28e42ce030f8310b27de2c1b31703216252c2d29316932e3230b2c9a30cf318923f52bf92f3631f722dd2a4e2fa1306522ff29de2e5030ed21fa29c22e5f303b21ba29de2e7430701fb229272fa03005206c295a2fcb30341dd528d52e7230a41779283a2ef32f10926d28bc2d752f409c37273e2dc62e55979426f72c5d2eb0966026d02c512e529025267c2ccc2d2a10f825172c652dbe127b249a2a5c2c911565232129282b4316762361281c2a5216d422bb27562903150d22fe26c8287e164c2139262c284816db20be25c3274e16742073257027491632201525f626ec15b81fc7247a2603154a1f73240626bc14a31e2d24a1254f143f1ee6234a250e14c01d7423f3247813751d1523a52416133f1dad2261243912221d4722202416121b1def21c9237a11eb1ca22159234711cf1c672100239e10841c1921b92256102c1cc4205c220110fd1b6e20f121c40ec71b4520af21b60d891b26209321880d2e1b0e206721450d1f1bed1f72213a0d4b1ad91faa21550d961b861fec20ff090000981e561f00802b2a962dce2e7c285e2bc72e073090294c2b2c2f4f308b2a532cf42fc330442bdf2c3d302731a22bd02c5a3049318b2be92c62305631242bf02c953089319f2a182ddb30d931662af72cd930ff318a29d52cd73004320628072dd130f4314125ab2cd63005321624182d7b3099319e222b2c133018316a21162b522f8a309a20102bef2e7030941f532ae12e6230801fcf29e42e6f306e209829d82e763044205629d32e7430881f2d299c2e4b308e1dda282d2e1c30ee189228ce2dbf2f3a17fe274e2d642f1018b627fb2cba2e19168e27a12c242ef915ae261c2c652d261894256a2bec2c1818c624982a642c95183224a5299a2bfa188823da28b22a5119bd224428002a2319ee219f2760298518a121f226b828f2171b21422631283517a420d925d02707164d2076255f27961502201425f426c114bb1fc52489269514581f7d243126e113f81e3d24ce257a13961e03247a251113571eb2232a25cd122e1e6223f924a112f11d0823bd24b411ba1daf2288247f11571d4c22462420111e1df02104245610a31c9a217e237410331c3221bd221d0f6d1bbd200c22210fbe1a6320a621b60d7f1a30206121810d761a10203221790d901ae31fe820d10ce319591fc420510e701a341fc720a20f0000381e651e0080d729d92d262f1229792b322f4a30472a652b552f7a30272b032c0130d630c22b6f2c5c304d312a2cd32c90308431302cda2ca230a231bd2b1d2dbc30b231dc2aec2cc430e4319a2ad52ce3300f32ef29cd2cd430fe313829812caa30c53101285a2c62306e314426202c2b303d313e25702bd42fe7304e24af2a882fc330fb222f2a3c2f97301c22f429ac2e5f303621a6297c2e3c304e207f29492e1f30231f3e29192e0130371ee428e42dd02fcd1d8728ae2d9e2fdc1c4e28732d5b2f4b1b2328322d002f131a9a27d72c7f2e9519d3266a2cfb2d03195e260f2c7d2d6519c225612b0a2d2e1a0625802a7f2cf5197c24c729062cd0183c243d29462b11180a24a928682ac11770232828982924178e229a2701294b160d220527ae287e16732146264228d915d0209d25a3272a157b204c2524274d145a20f824bb262d142020b0244c26ec13cd1f7024f6257d13271f1d24a025de12a51ec8234e2561121a1e5b230425dc119f1dfd22b5246511731db2227a243b11271d5a222d24f210e61c0b22f323b410871cb6218d235910371c622128230c105c1be8209622110fdf1a80200f22990ee41a6020e221d60dfb1a6120d421ea0d171b4e20b121010e971a2b207721950de31ae11ffe20d50d000003100c1b00806b28562c5e2d4d25722a132f31308129052c5a2f7130872a4c2c2430e430382b9c2c73306331be2bcb2c9930a631c82b052dbf30d331b92b2a2dd430f131122b0a2dee301732c22aef2cf6302c32332acd2cef302a32a029982ccb30fe31dd284f2c8530b631e827ea2b6a308e312526982b193029319c24022b852fea30ed22dc2a242fac303b218c2af82e7b30c41f412aa62e4730b61ed829462e1330451e64290b2edc2fc91dea28c72d932fd41d7728702d2b2fcd1d4428172db02e8a1dd627ba2c372e171d25276a2cce2d0b1d9226232c6f2da31c0d26ba2b222d9d1c8125362bdd2c321cf024752a662cf81a7d24b929c32b561a50244329152b171adc23e528a02a1b192b237c28322aa8187422f6279f29a71709222e27fa282817b421a8267728c3166221392618286216b520bb25a327951526203a252e27eb148f1ff024ce267b14251fa62484263c14e41e73242f261614ae1e4124e725ec133e1e032479256713e91d8f231f255712991d1823b4240212381da0225d249911ea1c2f220824b810901cac2179236110221c4b21fa22ef0f931bf0209422450f561ba92036220b0f211b6820e021d80e381b342084211d0e451b0d202621280ecf1a951ff220890ee91a601fb520130dae2411286129361e3f299d2c982df6247d2a0e2f39308b296c2b912f9a308c2a1d2c22300331e92a8e2c55304d31652bf62c8e309331a22bdf2caf30bc315c2b142de730f831622b472def301832c82ae32cd6301b32dd29da2cb730f5310029ab2c8b30ae31c727c92c4130733114269d2c0c302b311425e62bdf2fde30ce23b82a722fbc304322772af82e5c304b21352a802e24306220b529212eeb2f6a1f3c29d12d992fcc1ecf288f2d582fca1e9728622d1b2f001f6128382de82ead1e3828112dbe2ef51dd427da2c7d2e151d1827852c082e351c9426202c892dcd1b3826862b0f2d601ba925ce2aa12c5a1bbd240b2a272cb01a46247d29872b081a12242229202bbf19c023f828f52a08197d23c528be2a711815236028432a33187622c3277529ef1627222427d128e815e521a8266a28a9156f212a26222837151021bc25bc27dc149d205a254127f3143b20f724b9268a149a1fa12446261414081f5624d6258b13911e112477250c132d1ec0232725a012c71d3e23d92433125e1de0228e242711161d83224a24e210b71c21220b2487108b1ccc219c235c10261c3f21d322f70fb01ba5201322830e121b6b20c521ca0efb1a5220ba21ea0df31a3b209221e30d6e1a1b207121720d2c1a9a1fd7203a0dc02463289829921e1529c22cae2dab25862a0d2f3c30aa294b2b382f5d30202a1a2c2030ec30c62a832c5f304731122b942c6e305531ea2aaf2c9d309731132bbf2ccd30f131c42ae72ccc30e7314c2af42cc430de313f29f02ca930c731ab271c2d81309d315625112d54306631ba23412c20301d310b21712cd02fdf30861f4f2c202f85305a1d862b922e49305f1eef29652e1e30302062290e2ed92f68203a29eb2dac2f9320f128ae2d6d2f5320cb28682d1c2fd91f96281c2dbd2e791e4928c82c5c2e911d0628792c102e3a1d6b27232cca2dd11c0327d72ba02d8e1c4326842b482d111cbc25c52abf2c731b46252d2a482c411ac524c529162ca81988246729a12bdd184524f328ed2a9518d8239f285e2aa718d9223428f0290f182422be27a429fa17e1217b275d29a3178421fe26eb28c917e4205c267828e8168920dd251d28e41531206b2592277215fc1f0f25f3262f15981fbc248426ee14011f6e240f2627149a1e3d24bd25d413471e08246b25bc12ef1dac232a255e12b31d4923e4247911661de72298242f11121d6e224724de10b11ce921e2238110701c65211e23850f6d1c0b21a9227f0f6b1cc6204a227c0f201c7920cc21fd0e341b242057211a0e4c1a981f0221c20e451a831e0d206f0f9325f827cb284c92a2270e2b4c2c631d5f2a292f5e302c29262b342f7230ce29572bd92fb730452a1d2c3a302631cb2a892c6d306931da2ae12ca230bd31ae2aef2cc530f331572ad82ca430c731d029c52c9930b6317429732c77309631d628302c46305c315128482b19304d31ae26212ba22ff330bd25f22a582fc9306a249e2afb2e9930ea22512abe2e5c308721f629482e25308b209629e12dc32fe31f1d297e2d332fcc1fca283c2de42e4d1f8c28092dab2eef1e5d28db2c7e2e291e2628a12c3f2e631dd027712c082e131d4127372cb82d4d1cd626e12b502d0e1c4c26232bc62c781bce258e2a6f2c8a1b2a25162a292cb51aca24cb29e02bc31a63246e295c2b311a17240e29e02a50198623a528442ae318f1224428ce2982188322fd27af29b9178722af276f29be172d220427d028531757216d2650285516ea20fd250928d4159a2098258b277515362032251727fe14af1fe724a7261f14431f92243226cb13c51e4624cc2580127b1e082468253912291e89230f253811f61dfe22ab240d11cf1d96225f2444108c1d17220f241210231d95217d238b0f691c2621e1227a0e061cd6207e22e80d6c1b7b202b22490e221b4820fd21d90ecd1a0e20a221870ef219b01fa321090d4e1a2f1f5021d50bd021fb263828671ad025e62a382ca9219b2ae82e2a305628502b0a2f5d3051298b2b0730d03097293e2c5a305031682a462c9730aa31932a7a2cb830cd31e32a882cb530db31b82a4a2cab30cb313d2a252c9830ad31cb29cf2b4d306c312029982b0f3026317328f12abd2fe3302727c82a6f2fb1300826ce2a322f8130e6249a2ae22e5530e622262a9d2e41300921582a3a2e13301f200a2af92dc62fd81f13296d2d3e2f2a1fa428192dc82e8d1e8c28c82c652e6b1e4f288a2c0d2e151e09285d2cd22db21d8a27292c9e2d521df126f32b652de61c8726812b2e2d3d1c4c261e2bec2c171cd925a42a8b2cef1a18250e2a1e2c0a1ac024a529aa2b2b1a3c244929232b801908240329dd2a3c19d123b5287b2aa218832374281a2a741805233928c5292a188a2202287729041705227927242975168021f226c728e71529215c264e288915ab20c325cb27021540204d2538278f14f21ff924ca26a113971fae2461264913591f692408263912f61e19249425e5113f1e5423212596109d1dbd22b7241f10391d6c227424ab0fda1c19222624200f681cbf21d123770f4b1c6c213d23460fe11b0e21b522ad0e441bb0203222280efe1a7d20ed21ec0d061b4e20b521280d521a0b205821ff08701a151fae208b0a01217326c32761189d25e32a482c4f21b529e42e303079282d2aea2e503030291e2bd62fc8306029c82b21301631c4290b2c42304b31392af12b50305f31562ae12b59307631492aff2b68307c310a2a162c6c308c314029b32b44305331ba280e2be62f23310928fd2a782fd7303427952a4f2fac300a26752a412f94303225d429c32e54303224b9295c2e0c3045235829062eaf2fe221f628992d432f2f21a9283f2df12e9b207828ff2cbe2e6b204a28bf2c772e821fe3276f2c352e751eac27252cdf2d6a1d6827cd2b862dcf1c2f27902b5a2d421cb9265c2b2b2df91b32262d2bf22c061cc725dd2aac2c141c4c255f2a682c7a1ba524c029162c8f1a2f244a29732be819d8230129082b1819ab23c628c82a8c187b237c284d2a6f1828231a28c029ae1789229627482903172222292701299516c421e026bd2830165d218b266c28c115f5202d262928c214a720bf25b8277714522043250d272614f01fd5249d269f13771f872451262b13271f4424e525de12761ef6238a253412de1d4e230f25a211611dc0229e242a110a1d44223724d610ba1ca521ef238a10991c14213823ca0fc91cb220ae229810581ca32053225c0f241c92203b22040f371c5720f9210c10861cb81fc1201c09b21a881ea52059107220ed253627c716c225dc2a462c1f213829aa2e2b300428342a262f6a30c6282f2bb22fc03005298a2bff2ffb306029a22b223030318d29d42b46305a31cd29ea2b5f307d31a429cf2b683080315929fd2b6a3082310529962b3d30623156288c2b25303631fe27ca2ac22fee306c26a92a5a2fad30bc25122af62e8d30b724fd29a12e373024248429342e093002234629d92d832fcf212a295b2d0c2fd020e828e62c732e7b1f7f289e2c232e591e2c28632ce52de41dc027342cbd2d781d51270a2c882d941d1727e62b6c2d9b1cee269b2b2c2d801c9626192bca2ccf1b6126982a6d2cd81ae325412a342c511a5a25f429192cbe19df249229c42bc719802458296f2b561915240f29242b6118fe23d428c72a4a18d423a528442a33183f236a28012ac617ac222228c62968165022942769290f16e321ed26cd28a71575217b2677283d15112114263d28dd14b4209d25b727f81343202325ee2638130020cd247126c712a71f8d2425267b12621f4524c1254112ed1eea235b251611aa1e5e23f024e410501ee022a324d80f091e6e2259246e106e1df021fc23f90fb11c6f214b23e30e431c1f21ec22420e071ce020a922bc0fc61bab207222760f8a1b7d201d223d0fe11a29208621610ffc1ab41f1e217e0f6b1d472439253411ec24062ad32b1a204229682e28303327072af02e48308d28232a792fa230a328e02ae92ff83018295b2b1d302f3174298a2b263037317b297f2b213039313d29932b26303431f928722b1e3027319328132b033012312528fa2aca2fe5303127b02a482f9a30f3251d2ada2e56301825fc29802e1e304f241b2a422e07306a23fd29f42de32f94218529842d582f85201529252dc52e2d1fb828d72c5f2ea91e22289f2c472e4d1e1b28752cf62db91e5027102c912dfd1df226b42b472d4b1de5269d2b3a2dde1cc4265e2b092d651c3926d72abd2c0b1ccf255b2a772ce31a7225122a5d2c751a2c25df29392c221a8d246429b72be9196a2436295d2bbc190924ed28f42ac918a923a928912a1c1856236828312a0b17d5223028e7298f169222f727992991155822a9273b29171603224027e7281815a021da269928661516215a263f28e214aa20df25d5277a144d20532530272114ff1fe4248a264a145c1f752400261113d31e202495258d12711ec8233f252f121e1e5723f224df11901dcd22a424b610321d3f2262246710b31cc5212a24f60f6e1c77210724810f491c2821db23420f071cd7204c23ea0de31b8a203f22ca0dc71b36209421d50cbb1af11f6921390fd31b361fcc20a10ea81cd42368259312b4260f2c102daa23c328432ec02f5427b229c02e313024280d2a3d2f93302528932aad2fe3309828f82a03301b31df28152b183038310d29152b213040310d29d22a0b303531dd28a52aeb2f22318d287a2abf2ff530f427662a832fc1309826432a222f93309225152ac72e45301125be29572ef52f75242029da2d852ff523a6287f2d192ff52269283c2dbf2e1a223628e72c652e5a21fb278e2c032e9f208d274b2cc02de31f2027182c882d0b1fe726eb2b5a2d6e1ead26a52b2a2dd81d8726792b012db71d6726392bc52c3e1d1026e72a992c9f1cb625c22a7e2c5b1c5525562a4e2c111c33250c2a2e2c571b71247129942bc519682438293b2bb9191924f428dd2adc18a423a928802a191839237028262ac017be223e28db293c17ac221e28a52968167822f8276a293616fe2187272e29c1159c210e27d728051610217d266128dc14c320ec2500289214762076255327481437200825bf262413de1fa5243c26c7115b1f5024d4256611cc1efc237a25fd103b1e66232e259310bf1de122d1243810461d632286247810bf1cd6211f240510561c49216b232a10291c0e21ec22fd0f041cc4208022b60f591b7e2056220e0f1e1b3720bc21d50e461ab41f0521bb0e631a531f2721930f0f1996211a2400086c269a2bcd2c41228f28472edb2f80263029b52e2a30b1278b29442f87300828352acb2fe5309a288b2a09301531d928ca2a1c302831f028d82a22303931c828a22a09301a3173287f2ac02fea301528322a482fa330e926f929f62e67302826e929d02e56306c25f5299e2e3b304a24062a392e053050234429c62d802f6522a7285d2de42ea6218928de2c5f2e82219a28932c3e2e54211428702ce02d7e204727212c7d2d0220ec26c42b262dd71e96267c2bf72c231e6f26382bd42ca21d3426052bb82c141d2026cb2a9c2c531cfa25b32a8f2cc31bf825912a872c671ad425442a582c9819b4250b2a282cd518f22483298b2bbf187f241a29ff2ad31866240129c42a39180024c728782aae1795239028352a6c16e5225828eb29d715c9223528bb29bf158b2214288c298b153f22c82751294a1516225427032928159121b8269628b714fd20192640283a1492208d25a72763143d200125ca261214ec1fa52450269b135a1f5a24e0250f13b81e04246f2573122c1e81230e253a119a1dfc22b224bf10141d572246244d10af1cb221c0237f10531c2f21f32227101b1cec207922e20f0d1cc1202d22dd0efc1ba6201d22aa0f141c8820ea21e90e9b1b4020d121710e441a9e1ff7216e0ffd1a6822bd241a8bf2256f2ba32c4c22ae284e2ec62f69264029a32e3b3056278729832f9e306a272c2ac72fee303a28442ac82ffe304a28362ad22f02315728332ac72f08313f283a2ab92ffc301628662a8e2fd530ae276f2a402fa8304426712a142f8b305e259c29982e6830ac247f296a2e353044244e29162ede2fa423b628792d102f40222828ec2c632e0c21f627b42c402e9c2000288a2cf12d2e200c28332c852d8b1fb427f52b422ddf1d0a27762bf52cf81cc026342bcd2c621c9826012baf2c481c4f26bb2a862c7b1b1f26762a522c911af0253c2a2e2cb319e725192a192c0019b925062a062cd9185f25d929af2b8d181e257d29742b56180f24e628b42acb173524ee28ca2a8418b323c228872a21184d239b285f2ad517b7226a28222a3417a2224828f9295e1649222628b8290916e221e8278429a615a5217f2738296b154721f326bb281115f3206e263b28c0147520bf25b827471410202a250327cd13601fae2451261413cb1e2e24b0258512431ea62342250312fb1d2123d824be11b81d8f228f24d810731d24224a249e102b1da721f1236110b41c42213323f80f341ce720ab221f0fcf1b832032227f0f151b3620ec21cc0e331b1520ba21190eeb1acd1fe221e210ce1ab21fd5214d0f551bbd22ea24cc895a25cc2a442cab218428af2d062f4b252729aa2e743079266929992fc03042277e29cb2fea305e279c29d32f0331d727c729d22ff930e927db29bb2fe330da27c6299a2fd1306b27bf29662faf3038278729182f7f30ca265229c02e493015261329502e073016251029fb2d9d2f37242129b22d472f632380284f2df02e3a220828be2c372e1f21e427572cd42dca2081273c2c812d5820ca26e62b1e2ddc1f8e264b2bd82c381f4326db2a982c8b1ed5258f2a6f2cc31d9825632a542c361d67253e2a3e2cbb1c5125252a292c5a1c3025112a212c3f1c2a25042a162ce01b0a25ef29082c1d1be224ca29cc2be51a91246429542bee199323cd28882a7e180724d128852ac71864239828492a1817702387283f2a4d1617236928132a34153a235e28002a7d1427234e28e4294513bc222a28b829d8122c22df277a294612572130270b29a212d3209026812815137220ba25a72787120c20ef24a826f1117d1f93242b26a7104c1f3d24b2258810cc1eab2338253910291e0a23cb24a70fdd1d77226424490f8a1d22221c24e20eff1ca021a423350e701c2d21cb22840e071ccf203322ea0db61b9520fd21880e931b7820e3216a0ebe1b6320b5218f0e021b3f20d121f00d151b1420d321330d00000e1bc11b0080d325a42bdf2cac213b28922c2d2e492371284f2e0a3014257129cf2ff0306026fb29043013310227ed29b92fff30c726c829892fdb301a27a029572fbb308b278229272f9f3013277029f52e7b30c2254e29b52e52309e253829852e2d3061251229542e0630a724c528f72d902f3e247128712de62e26234228d42c4a2e222207288e2c072e1e216f273a2cb32d83201827ad2b4e2dd01fc126072bc32cad1e4026a82a6a2cd31de325582a452c271db325282a322cab1c8d250a2a232c3b1c5925e729172c141c5d25e029122c921b6925ec29162ca31b7025062a112c731ae2252e2a122c52189c25122a132c1e1816241129b02aec167123a4288b2a6a1869238428552aa61907238528212af61841238528372a4d18fc2286282f2aeb152d239928382a45150b23a0283e2a6014cc2296283a2a39147d224628dc29081472211d27e028c412c42043262f28ff126e209d258d278113f81fdd249226c012ea1e5224e225db11741ed1236b25bd10111e2323f92474100c1e9b229b247010dd1d15223d24490f921d9021a323ec0e4b1d17210923930e861cc520b4229f0d3c1c90203d22430df01b6c20e721ee0c791b4120ae217c0d721b23205e21770dd21ad91f5121c70dc61a8c1f1121bd0d0000851d111e00004125582a152cf820d225cf2b572dd9205628972c6f2e5e1a5629b22fac30ba1df6299b30dd312727a829d62f3431d4258529202f9c30e9245f29ec2e6c30d3225329ce2e5c3022244429b72e493089243e29aa2e4530aa243629a42e3f307d240c29792e2f304423da28fb2daf2ffc226b28292dc82e1d220b28612ce82d5e215d27da2b4d2d7820ee26552be42ca11f7726ce2aa72c061e5726522a5f2c311d4826f9291d2cca1cd325b929cd2b711c4f258529852b591cf4244a29322b8d1bbc242029f62a381bb3240a29ce2a1a1af7241029e62a541982258429192c4a19cd25c12a9b2cea1874251f2bcc2c9e187225c929592bc41686241928ae29271312231928e129ca16a5223828e729b11893223f28da29a4181623a328382a9a174d230529c02a5c1524231a29e62a7014dc221329e82af9126d22b628682a1511dc21b9273e29a210ce21862660288e0e5321b3257e27030e9b20b2245726480fa41f05247b25c40fc71e4723ee243610071eb62295241b11a11d2e221c24c510661db8219a239310381d7d2165236c10fd1c512139233a10981c28212323c80f2d1cc820e722130ff41b65206222bd0eaf1b2b20d021820eb61bee1f7521880e2f1ba11f6c21460d171bf31ec6209a010000c119c21b00805924a8294a2b1d203525732a252c0b207128032d792e051234293c305031581f9927862dfe2e2f205f279b2d2c2f2e234a27352d002f832332287b2de82eae249428a82d2b2ffa244d29082ebc2f3d215329f92e7430ab234b29982fdf3069246d296d2fd03085249c28ab2d532fe6220627212c812ddc20db26402bd62c8c207626ce2a7b2cd81f0226722a2d2cf41eb625f529e92bf71d8425a929862b241d592582294a2bae1c33254f29172b421c0e252e29de2ab51b02250329aa2a811af424d6286d2a5019ad249f28332aec176d244b28012a7f17112443282a2ae41607215528142a4214db25b42b3a2d9f19ea1dbc273229ad111b21ed2568287a1512234027162996170c221b271029db1707228827262941186d224328b3292c18d9234b290f2ba61697241e2a042c4213c523082afc2b440d1b232429d12ad10cb121de272029801007219b2664281c116c20722567277e11801f3d24c8258211de1e8b2336250b11231ecf22cb2433116f1d482255249a10451de42111247710371da721f0236b10051d772197234010b71c2d214e23fd0f4e1cdc20dd224b0f031c91203e22cc0ebf1b5020c621b00daa1b23208b21a00d941bf61f3c21b50ce61a611f1a21030b7d1a061fd120980a0000f91cc71c0000ed24ee28222a1a201d24b728612a0d21ed25792b8d2c1c23c12d1a35bc36e02003262c2cf22c84210d26182b6c2cf22382267e2be32c462480267c2bc52cfc23c326bd2b022d29232526d22a6d2cc520f5237c28cc29841aa5249229c82b759818287b2de22e668b4f2462291e2b1c19d924cc28992a101d46253d29fc2aea1c67255c29362b091d68255929352b0a1d4d253f290d2ba41c2c251a29e02a3c1c0325f728b02aa41bdb24c928732adb1aa6249f28352a0a1a8e247628062a67196e245128d329c11851243228a329251825241528852972181224d52736295e188f222027d3280917641c93217423b610a71e1c234825a311ff2068259a27cc14d4207725b927ba155421e5252828b7154b2242262928d1130522ef26db281915b0221529ca2aaa15f824eb2b512d9d113f253e2c972d1c0f1c240d2ac42ba41019215327ad280810082095243c2602110e20ac2362250a110c1f2f230d252c11661ea322d9246b11de1d31226a24f810741dc82104249e102f1d6621a42364100a1d37217a23660fd31c00214123150f991cc9201523ca0f381c7c208e22260ff21b4a20df21bb0ea61b0b2076219d0d6e1be41f4321740d891bb21f0421ae0c121b741f1621fd0dc41a2e1fc920f70c0000891cec1d0000f82213281329651efc24c9286d2a4b206c214b26fe27e51d921c2521cd22d718e523d0281e2a67202125642a272c28222d25e62a552c81228e25262b912cfb229325292b912c01239425022b872c02232c25bd2a582c35224a248629412baa2023216e25e8263518ac22d4259027e69477240c2857290b11bf246b28fe29a119d1248528282a2b19e0248728282aae18e4248628282a3f19d52473281a2aa418a7245d28f729fe187f244528d029551947242b28a829131924240c288529e9181124d2275e29d3180724892730295218f3235f271929a217f22317270529a1175923a526a728e2178a21a1258827f1159820a0244626ee14852055243b265714a92064248426d812a1207d248526d813c4208024a5261d155e20a524a0262e15d11f2425e127a214ae26232d842e090ab6284e308a3152954e2210281329d513121fe523aa25fd11981fa422e6246f122e1e9922a024ef116c1e5c227424e412d01d162242243d12721dc6211f243a11321d7921c223fd101c1d382176235410d81ced2009231a109f1ca920a322c90e561c56202f225e0e1c1c1a20d221090e0a1cae1f7c21ee0d111c7b1f29210d0dd61b301f0821de0cab1b181fd720cb0b801be11ed2205a0e551a731ed02078100000861a061c00005d2253278028d71ded23c9265428421d75208e254627f91c7721e3258327531d1f245b28b729191fb7245d29fa2a5420d8240e2ad92b72204525742a2c2cd620a025a22a472c0121d925be2a552cdf20c8257b2a1e2ca720ff24b6293e2b0520e523ac28442a211e8c232828c729951cfd233628d1298a1a34244328d22976195f243d28c3292f1973243c28b92947196a243928b4293c1955242c28ae29a0192f242328a8296f191124102897294819ee23fc2788292619c623b72761299c189c2373272f2983186a232927f828f4170d23cf26b7289117c82276266a2883164c22fa250e285515c52170256527e3145c21f924d9268a14f520a6247526331487206f243e2659146b205e242e263e1473205f243026451472203d240f2688132521622441266412bf1e14235525db0ed713f918071c54014b1a831e4d221b07451e7d2142245011da1dbb2106249e11b11d9321f32377116f1d7621d82337112f1d5f21a923fa101b1d32215a235310f01cec20e9222f10a11ca1204e22d80f521c4f20cb21580e0d1c11209121f30dba1bd31f63218b0e611b9a1f5221400e391b651f30214d0d571b481f1621630d5a1b181fec20910c7f1bff1ebd20ed094c1bb91e96202e0eaa1a571e3a20a50d0000461ba11c0080ef215a264f271b1c3e215f2601288d1de320e9256627501db222c4265c28631de4233e287d29931e2124e328512a1d1f5e244d29e12a861fbe249b29442be61f0025bd296b2b06200325be29722bc81fb1249b293d2b8d1f52244629d22a321f3824d328422a131e3e247428c829e81b2e244d28aa29f518412439289b2990183924252893298818312412287c297f181b240a28712968180d24f7275b295918f123e0274e294318d523b42731293418a1238627102918185f234b27ea28e91729231e27d128af17de22e226b7285e178622b8269628bc173c2274267328b016cb21042620283716552171256027b915f420e224be26c114992095246826ef1446205e24272696140220322416264d14b21f1624f8252114711fec23ea25fc13371fad23dc25be13171fdc222e25ce12e81c19206521b6106419bb1d9f1f2d0d4f1c432060225a0d5c1d132103246c02591d3b211924a50e571d49210e24d70f351d2e21d423a50f041d0e216a235d0fce1ce2201d230e0fca1cb920cb22080fc31c96209d22ea0d9f1c74206422be0d871c4a202e22a00d401c0820c021480d6d1b6a1f3b219d0c0e1bfb1ee620620cb71ab61eca202c0c101bbd1eae20630c291b9d1ec120730c931a431e6420d40cd81c4726b5265c1a1b29332dd12ddb279a29b42dbe2e7828a52a472e7d2f4d29642bc42e0430e529e82b302f45304e2a222c7d2f84307a2a372ca62fa330b92a4c2cd52fcb30bc2a652cdb2fe230642a0d2c9e2fa230dc28542c873082317a262c2e13340f35c025682da432e3330a25bf2d7b334d34b424782ab52e30300722f5288d2ce62d2e216628492c972d98202528ee2b962d90209b28032e662fd020b22d52341935d320322bae30b231800ebb24b32a752c8b18d525cf29e22b181e23253629d32a5e1dac24e4287a2ae11c3f24ce285d2a6f1b84236e28d529bb19e123ad28642a1e19d924462a5d2ced1452234d28ed2933160e2193252428da1489209725ee27de145920642586272c1488203e251c275a143c20f824b0261114de1fab243626aa12491f5424d825fe12fa1e1f249d25b312c71eda236325be117f1e7c2320253c12311e2623e524f211e91de622bb240211691d942289249510351d5c225c246910281d2b223724920fdf1cdf210b24270fac1ca121cf23dc0e641c6a216f23720e3b1c46211723360e041c0521d722e50d4b1bb42040225b0df91a5120b8211e0db01a1d208221e90c571aee1f5221a70c291aaf1f1921a70b2b1a8e1fcf20450a4019071fa7205609791a151f7220940a431a9724e7241110b329ea2d0a2f8c28b32aca2ef32fb929712b3d2f5d30fc2a4a2c0a30c430ef2bb62c50301c314a2cc12c7b306631322cf32ca9309c313a2ce42cc7309831f12bb92cb530b431782ac32c903094310b29a32c1f3142322028242d123286336727992cf631b133d725b02c7e312e331a24e02a3b3040312f23ca29972e233007233929522eda2f572248294b2eeb2f8421662b7f2fb4302e186b2ab5300e32e31e93291e304f31ed1a3b28942d622f361a8627b92c8f2e5f1a48265e2c9a2dbd1aea25ab2bdd2c5718a925752bd12c131a8025332bbb2c9715fc24be2a8b2ce2136f24de2ad42c82153324ae29972b81186d2212282f29e61899211f273d2995183121ae26b428be16f9202f265228e61596207f254a27ec1446201725bc261a14f91fe6249826a713bf1fa82438269012261f5b24de250e12021f21248d25f011de1ece233b25d111b81e6223f024ef106a1eff22b624b510091e9a227b246e107e1d5522452408101d1d1d221e24820fcb1cd821dd230a0f8f1c8c217223aa0d891c5421f7229c0c8b1c002191229e0c3b1c9f2003224d0c521b5420a121710bbf1a09208c21db0a8a1adf1f9121100c621aa31f8a217d0acc1a551ff820390c5e1ad11e5020790a3b1a681eb01fed08331c4d25a92567120f2a322e6c2f1729e12b412f4130822a2c2c0330cb30d52bb32c67303e31692c4e2dad309f31c12c692de830cf31da2c712dff30f131922c252d0c311132402c322d23312b32d92b122d37315732a82aec2c4b318c325a29032d8331de320828572d6a31bc32e125272c08313b325724812b3a305631fe226f2b742f093182221c2a402f98306222bd29282f8630ff21b929532f9f30a821be29742fbb30b4208e29332f8b30b51cda282d2ee22f071a0428642dcd2ee5199d27df2c3d2ebd17f826692caa2d15173226ec2b232d4c16a5259a2b752d0317ac257e2be42c2a187c250a2b912cd016be24352af62bf616de230e290f2bc71511234b28e829fc15bf22a1274a29b7152622f926d428e715622137263028c715d920b5259d27341552206125472720150a200625d626ca149a1fbf246f268214271f6f24fe253e14991e28249d251413411ed6234125b612cb1d6523e8243712871d0a239b244e11411da6225c240b111b1d47221e245310011de721c8233d10d21c95215a23140fc11c4521fe22fb0e791cec209d228e0d321cae204722360dfd1b68200022f60cea1b5820b921eb0c6f1b2c20a1219e0cfc1a10208321570c321b14208f21500bb31902201822790df11abf1f7021b4040000e91e782000005b2b552ea42fba282a2ca22f8930ff2a372c40302031232cce2c9f308c31a52c5a2d1031fa312d2d892d45313a325a2d9a2d673170322e2da32d84318632d02c7a2d7a3196324b2c5b2d5a319032552b642d533183324029a52d193151324225ec2cfc3043329624cb2cc130e13132248b2b443052319a22a62acd2fd530d2210f2b662fa430c8214c2a362f83302821ba29022f7430b0209329ea2e683040204b29ab2e4030e01eea28472e0030b81c9e28d52d882fbc194128812d1d2f53187e27f42c862e9e17ed26462c022e0a179626242c852db2163826712bd52cba178625f52ab22c0e18d824722a5a2c1a182d248929672b7b187e23b3285d2ade18b7222c28dc295c18f921a6276629c2177a21d426b1281d17fc2031262328e9159720d525bc27ed14462074254c27961405201625e526b813be1fc3247c266f136e1f79241e264b122f1f3d24c4254611a71e02247625a3115e1ea8232e256511351e5823fc248f10fa1d0523c1246310c21db4228624270f711d49224024c30e401ded21e823860eb31c9e216223d70d521c3121a6225e0d991bba20f621b80ce31a6b209b21470c9d1a372064211c0c8f1a1d204221130cb71afa1ff820d30adf19681fcd204b0bae1a2f1f9720480900003f1fd11f0080962a972ee42fb829012cdd2fb2304b2b442c36300a313f2cd02cb830a431b92c392d2b313332332d8c2d6b3186325d2da92d7c31aa32ff2cba2d9831bf32a62c7c2d8a31c2324c2c542d7931ac32722b312d48317432152ae52c02313932e8285d2cc6300232c327242c9f30c7316e266b2b4a307d31b624072bfd2ff830bd23f02a722f9230db22352a0d2f77306f21b129ba2e533057208629662e2330cc1f67291d2ee52f681efd28d22d8d2f5a1da4287d2d4b2fdd1b53283a2df32e591a4628fd2c6e2e4f1977279b2cfc2da318cb262c2c782d3818c626862b002df918e525072ba22cfe185125602a2e2c1b19c124af29852b07188e241e29cc2aa915712497281a2a8515062433287c2900158a229e27f328cd14d621e2268a28f214512129261e288114ad209e258d27ec1366205025242774135320fa24b22659123420af2449262c12f91f6924ee25f410501f162493258b10cf1eb4233b253b10421e4623ef24c60fad1de822a4240d0f5a1d9a226924db0f121d48222524720fdf1c0022e4230d0e8a1cb8218523a40d331c6f2123232a0e8f1be92076228d0d161b7420f621670cff1a5d20f121590c421b75200622820c5d1b5a20c621930c8c1a25205e21ce0c021bda1fe920250db01ce41c511c1e02e02623294e29ec21f72a3f2f5430f329382c44301931ec2bc02cbd30a931532c1d2d1b312232cd2c6f2d5f318132062d9b2d8631c432062dca2db931fc32dd2cc52dbe31f732702c6f2d8131ae32982b002d1e315132482ab02cdd301032f7285f2cb530dc310328382c9c30b331ca26c12b2830073125254c2bc52fe130a023392b5b2fb130ea21b22a012f8430ba20092a992e3930281fc129482e07302c1e69290e2ed62fce1dcf28b12d722f291d56283d2dfe2ea71c1b28e92c7e2e681ca5279d2c0d2e1a1cec26512cb22d1b1c64260a2c5f2d941bf6258d2b162dbe1b79251a2bc12c1c1b0125792a602c801a7f24c629d32bd719362438290f2bfe18b923d9289c2a941842238728272aca17af22002886296b162b222b27dc283a15c8219e266728e6146a21322614283315a820b5259d27e31326203a2524270713bc1fef24bd266d13701fab2472264d12151f73241d260012c61e3c24cd25bd114f1ef3235f255811ec1d80230b250411811d0123aa24aa10131d87224f24730fd01c0d22f423110f811c9c2164239d0e2f1c3f21e922240eab1bdc207322a10d481b9d201022580df51a5e20c3211b0de51a26207321100dfd1af81f1b21570c801a7d1fec200a0cf61a5a1fa120dd071f1e9b226b2391120428e929a32a5f23f62a8f2f9f30a729532c66308631a22ba52cc330c531ef2b2e2d1b312e325a2c922d613184329a2c8b2d8131b432802c9d2da431d0327a2c962d9731bf32382c5e2d5c318b32332b222d1d314132b929d22ce330f9318f284f2c91308731ef26082c53304e319425502b0f300f310724f02a892fb2307722c72a512f99302b214a2ac72e4b301620042a542e0d30741e8b29f82db32ff31d0b29a72d542f691db2286f2d042f191e80283d2dc72e561d50280f2d972e1d1d1028d02c5a2ecd1bb627842cf92d671bc1261c2c7e2d7c1ad2254e2beb2c3f1a5c25992a6d2c5b1a7924d929e82b4e1940248a29712b851908242529102bc818b723fb28e92a24185523c828a12ade17dc224f281b2a961647229d2769299c141a222327cf287b14fa21ae265f286d13822131260e28d8122b21be2593276c129e2056251027bc114820f72492264912b81f9a242726ab11491f5324c5252c12bf1e08246925b711461ead2322255011cf1d2d23d624ec10471dcd228d247810fe1c75224e24540f9e1c06221724c70e831cc221b023a00e3a1c3921ce22350eef1bae203e22d30d3c1b8b200f22500d091b6c20f1212a0d121b4f20b121640c7d1a27207921c30c371a9e1fd220f70de51b6121e32120118e26e82880290422ce2a6c2f7c306e29cf2b1f300631002b502c9f308831bb2bb12cfb300032352c012d333153326a2c2d2d543183326c2c462d5d319a32482c552d55318332c12b312d37316732862a0f2d0f312e32ed28252de230f3318926042d9d30af31a6236b2c53306d313d21732cfc2ffa308a1f5f2b622fab303e1eca2a012f7a300720e729962e363080208c29522ef12f8b204e290e2eb62f58200329c92d732fa41fd028842d222f401ea228412dd32e7e1d6228f12c642eb41c36288e2c082e0b1c7f27312cad2d321b8f26cb2b7d2d4c1a3126682b4d2df219a125b22ab42c0a1aef24fa29252cbc18b524b329e32b85187b245229592b4d185d24eb28c62a6417f023a128582ab916e2224228ee299c161422cf278c29d615c121782749292c168321fc26dd28ea15fd20552661285a159920d12509286a143d205b257b271214122009250027d113c11fc72487267213391f75240526ef12b71e3c24b825b011571e082466255f11e91da12327250211a81d4023e1242710671de1229924ef0f1a1d6d224224570ecd1ceb21db23f70d901c6b211823ab0d871c1221af22a00d771cc62043228c0d1b1c7e20c421070e321b25205321780c661a991f0221f30b2d1a851e21203b0df01e97201a214f100c2706299b294720322b622f783021290a2c0930e130372a262c86306f31342b7b2ce930fb31e82bc02c17313b32202c202d4a317132172c5b2d5f319c32a32b472d3b317732c82a1e2d21314c32242adf2ce83006324c296b2c9330bf318e28ad2b353075314327882bfa2f0b310f268b2ba42fe530cb24de2a712fb3309023782a022f78300722fe29642e2c30e8208229e52db92f33201329832d312fbd1fc628502dea2e471f9828272dba2e7c1e8728f32c852ee11d6028c82c3f2e301d0a28802cfb2d551c3527302cc62deb1a8f26ab2b4b2d4c1a1226d02aab2cd419da258e2a602c9e196125292a2f2cc519f924c429c72b561966245f293f2b37191d240d29d42ae118a123a228402a1818f9224728d3297b177d221128ad29f6164f22ac2765290e1618220127d028da155921692650282215eb2001260c282a14a920a5259a27e5135c204925262763130820f024a526eb11791f94242b267c11031f4324bf255b10a11e01245d251e10271e83230225a50fd81df1229f24430fb61d8f225c24ce0d751d0b2216248c0d0e1d9e217e23230d621c2921c722740c061cd4206d22000d641b76202c22970ce81a51200622120d411b1f20ad21820c8c197f1fa521f40d431af81e5b216d0fdf1c5820e220fa133326af285529d020042b152f44303628ac2be52fe230cb29fb2b883071315e2a6a2cef3000324a2bc22c31316832b92bfc2c593199320c2cf02c5c31a132e02bbd2c3c3180326d2b822c08314332af2a372cbd30e031c629fe2b7b308c310529322b253028310328ca2a9b2fcc306c26902a392f8b30e924812a0c2f73308723772abe2e4f304b21562a652e2c307920f529fe2dc12fbd1f2a29862d262fb51e96283f2dec2ef51d7128f82c972ec51d2a28a52c242ef01cc527632cc12d9b1c5b27162c6e2d5d1caa26c22b242de71bd725fc2aeb2c441af125c72ad42cb419a5259c2aa32cc818a325622a442c6919fd24a329ad2b3a1855245229472b291826241129e02af7170824b828662ad416dc237628f329a81669234028a6297115d4220a2868290315142282270c2976148421e626a4280d141221492632284b149f20ae25a327c9124e204a25222752120f20f824b826f511bc1fa4245026ce107f1f5b24ec25a8103d1f12247f255c0faa1e6c231625c60ed71dcd22b424f00d481d72226b245e0dd41c1c222224000e691cb221b7237b0d461c57212623460ee51b0121a122cc0d331b97201722790cdb1a6020ce21420cff1a33208d21590c6e1ae71f4e211509711a361fb9205d04261ee620612135118225ae286d294720032a132f5d304928922ad72fca305529a22b6e305931172a242cbc30cd31b92a722cfc303132382b9d2c1c315b327d2bbf2c2f316a32922bc52c24315632122bb12c013131327f294c2caa30d2314729b42b453068316828502b0a3012318927e52ab32fd9308526922a662fa63079250c2aed2e70305b24d129962e2f3010236829122eb72fa6210029ad2d4c2fa920a328572df22e0f2066280c2dac2eb31f3728bd2c602e6d1ee9277c2c1b2e951d99272f2cde2d811c9e27032c892d741a3427932b3f2d1a1a3526392b032df5195125c32abe2cb419ff248a2a712ced196f25612a3e2c0f1b9d24c529f42bfe1982246d29792bdb1919241129182bdc18df23d128d52a39187c237d28612a2f17d3222a28d7298d166b22a7274929701515222a2703292715a321de26ba28c6145d2180265c288b14f720132611284a139c20a6258827ba115d202525e6266c110720c6247c260111981f86243a26b810131f3a24cd256510491edb236525cf0fbc1d2e23f024200f511d9e228a249b0e231d27222a24620ede1c9621d3230c0eb11c0c212b23d40da31cc9209022c30d571c7c202d22640dea1b6b201a22eb0cb01b2820ce21a50dfa1b891fef208108d81a981e9e20920e6e1ec2201321fd0f1b256b281c291c20bf29132f6b301928a82a0230e1303729af2b48304a3196291a2c9430b831142a4b2cd33016329b2a6e2cf3303f32b12a822c09314f326d2a762cf6302e321c2a6c2cd1300a328e29362c8b30b931d1280e2c5a306c312e28532b023003318426ed2a7b2fbc309325712a162f9530a324f529c32e5130e82377294b2e0a3054224129d72d6d2f31212129672d022f3320e928fc2c7f2eef1e7d28b22c342e531d2d287b2cfa2df41cbf27472cc52d981c57271e2c9f2d5a1c4c270c2c702dd41bfe26ad2b1a2d811be325f52a912ca7192d25272a302cf818b124ed290c2c81180c25092a0f2cd818b62480299b2b0e1988246a29632bdd180d242129032bc717ea23db28c72a9917bc23a1283c2a8d1611235d28ec2930158f221728ae298e15472299275c299c14c721ea26cb283e144e216f266928971209210c2622284112b32095257627d71141202025ca264911da1fc7245926fb0f6e1f89240f269d10381f3f24b425560fc41ee5234d25e10e851e5223e424270d3e1ed7229d24ef0cf11d60224b24b20c401dd921e923270ca41c58214623b80c341c1321f422460c0c1ce120ad22070dd71bb0207922df0c851b77200d22850d9a1a1e205c21d90cc21a7f1f0621de0a7c1f6121f4207f112f263929a1295321d1299f2e2b304f27732ac52fc430f628a72a2a302a311e296b2b7b30a031b5290f2cbc30f6313f2a232cc230fe315e2a272ccd300132282a362cc030e531a629392c9f30ca3111290c2c67309431a128c32b3c3051319027062bca2fe530da25702a1f2f88300025552ac12e4a3061241f2a682e1b301623b529fd2dcd2fff202329832d3c2fd51fdc28282d9d2e501e9228d52c4b2ef01d2b28992c2e2e6a1dfe27742cef2d311d6c27262c982dd21c3727012c572d471c4527ca2b382dfb1aef264d2be82ce019ec25a42a682c04190625e129112c6017f6248129202c2a168624e629362ca4165b244a29cd2b2e18332418295a2b81189923e328c92a131860239228742a3f163a236128212a4e15ed223328e7294d14d9220828942941149e22bf2736291c141f223c27d9289b139e21d1268628fb121f214e262c285d12ad20d125af27dd1253204925122759120120d7247426e111311f6b24e8254811ae1e15248325e710501ebb233025a210f31d4523eb245e10881dc0229d24df0e3a1d53225f247e0ee11ce4212724100e681c8121f023790d3c1c2a218e234e0c0a1cd120f022050dca1b7e201a22d70c921b1f208d21b40cbe1ae21f5621f30c5a1c321f6820ea88cf1dce203e21980c9126cf29662a3622d1289b2e3d30de26572aa12fc630b328a52a13301931bd28432b64308b314829d22ba630e0319329042cbd30fe31ba29072cc6300532be29b92bac30ef316629692b8930ca31f8282b2b50307b316728f42a16302831f826b92aa62fe13099256b2a112f8330cd24f629852e1f304b2486290c2eb92f54231229b12d4e2f7122ac28722df62e69216628212d9d2ed8203328af2c2b2e2620c427612cd12dcc1e3727282c952de81df4260b2c6c2d4d1da126c02b3a2d0e1d7826942b082dee1c16261a2bb02ca41cfc25e32a8c2c391c35257d2a2f2cc31aa224e729e42b041a0c248b29c82bcd18642453297a2bb6180724f428f02abc17e923f328a92a98175523a228562a36162d236d28152a1416de224628d6290b15b5221d289f29ec148a22f5276729cd141a22842727297b14a8210e27cc2827142921792652289413c120e325d627e811802075254727971132201225ba263611ce1fb2243f26ef0f4a1f5324d725690fc21ef6237a25580d3d1e65232825ef0cd41ddd22d4249c0c511d59227824670dd81cd1211524ec0c4a1c41215d23540d111cf820e3220d0df21bab209222ef0c4a1b6d205822870c441b2520b421830c651aad1f0221b20caf1a611f20216b0ef61cd71f2f20b906d72520298d29b3208d285c2e0730fa25052a7d2fad303528452a0a3006318f28942a55306f31e028212b9f30cd316229662bb430e8319729702bbf30f1318329492ba730cb31fd28412b753097318f28eb2a1b303431b727792a9e2fd830ac26472a3e2f98309525402aee2e6b305324092aa72e353054236729282ecc2f4122b628922d062f30219528092d772ec9209528c62c482e87202628a22cf42d1a2078273b2c922df61ef026e62b3d2d131e9126af2b172d601d68266c2bf82ce21c4626392bce2c6e1c6326082bba2c931bf225b72a7e2c611a79254f2a622c04180e25d029f12b4816e7246529902b331708243a293b2bd4166f2410292f2b42182e24e5289e2a15176223a328382a41169d238328262abb141f235828e7296c14f5223428b6295214b922152887292d143a22c1274029bc1317225527f32891139021b2268828a711fa2018262e280f11b82095259427dd1160200925c3266f110920a52442261a10731f5524d125a110cc1e0124622539102b1e73230025aa0f7c1de4229c24d00eee1c2b222e24200e861c88217f23a40e4b1c1921cc224e0e211cdd206a22210d161cbd202b22140d071ca6201422010dfe1b8720e221f70c351b5820cd21530b701bbe1f4021760dc01b341f3e2059922c25ae2850297420a628c42e51303c26ad29cf2fe8300c28f329253024312828542a4a3077318328872a5f309f31bf28b02a6530a731dd28cd2a6a30a531d928e12a543085318428dd2a303056311e28ac2aeb2f0d31b0269b2a8f2fd43081251f2a012f9330c124e129ad2e51303c24c029632e1730a1231a29bf2d532f32225828262d842e8a205628ed2c7c2e0a205c28b62c162e241f45284a2ca52d071ed927032c472d191d2127912bfc2c3a1cc226602bdc2c401b8726232bba2c441a4126e02a932c011a2226af2a7c2c321917265c2a4b2c2919fd25432a1e2c65186b25232af52bf417d0247c29112bfb153a23d628d52a7d142b24ec28eb2a00181824c828b22adc173e23a5285b2af4168123a228602a5b16f5227628292a1b15bc224e28f329f21452222828af29a414cf21e62775294414ae2189272b292b1454210b27b428d313f3207226372844137f20be259e279a1212202125dd260f115c1faa243f269210041f3624b7255c10871eb72345250e10451e2c23de24ca0ff51d7f2285240e0e841d07222f24da0e211d8c21bc235f0eab1c27211823cd0d291cd42094222b0dc91b80202622d60c131b3020f321650c311b0d20c1214f0ba71ac61fd821e20c831a811f1422840d8219961db51d9f935823bb26cd270b1cda280b2ed52f9724db29802fdc3007270f2a3430483110281e2a5330813146283d2a5730a23173284e2a47307d315128532a393057316b28412a22303e311b28282a02301731bc27ee29a62fd9301e27ad293d2f973055266229c52e5b303e2548295c2e19301a244729082eb62f0123e1288d2d2d2f33223728f62c852e1e21be278a2cfa2d7b207a27652ca62d1e20fd26222c502d4d1f8b26882bfa2c771e3e26032ba92cd11de925b42a742c2c1d9925792a532c951c6c25612a442c221c5a254b2a2d2c141c7b253f2a1d2c2e1ce724fc29e82b7a1b03250f2a212c821aa924b929962b0d1adb220829c52a5b174923a428952afe16c4239d28772a7417fb2282282f2aea15982394283e2a931532237928112a781433236b28fa2951131a235e28e2299d11c9223b28bb29aa0f3f22dd2775290e0f5e211727fd28100ed92075267328aa0f7b2099257727160f1620e0248b262710561f87242c26cd0d0b1f3e24bd25910da41ebd233825400d2e1e0e23c824e30cfc1d77226c24bb0ca21d20222224740c061dad21a723f10b681c3321d6227b0cec1bc4203822070c961b8f20f821b60b7e1b7020d721a70cb81b6120aa21cb0c291b4020c921420d561bfc1f7821630d0000c21a9d1c0080ee25d72bec2c4722be27ed2c2a2e35247629ef2ffb308e26892a7a30be314a274c2a67308c318e270d2a22305831c627f929f52f1f31d727d329bc2fef30fa27c0298a2fd030b6279d29562fad306b266c290b2f80306f254929c92e593026252c29a12e433074240a29602e1b308a23c228ef2d9a2f95226528432dbd2ed5210b28c82c312eae2083276a2cc52d23202f27082c562d191fc626562bdd2cee1d4f26e02a7f2c2a1df825842a4a2ce31cd725532a3c2c741cac25372a352c011c78251c2a2b2c1a1b85250f2a222c2b1b8b25122a1c2c331bc0253b2a082c2b1a88250d2a962b3f12da24332a3b2c0716cb26702afb2be8166c240729472a3f18d8239e28262a181903237228112a28183f2387282b2af5160b238e28312a2c152d23a0283f2a75140923a128462a2713d9229a28372a6a1174224228c3291a114f211627c2283210c02033262328830f632095257a277510df1fed249626e410be1e5d24d7253010521eb7234b256d0e201e0d23de243a0e3c1e9a228c24ee0c181ef3213524e20ac51d66217923840a441dfd20d222f209ba1cae20782257095c1c92203022ec080c1c7420f221660aa81b4e20bd210e0a981b34207021010adf1afc1f6821450ce81aa71f28214a0c00003520622000803c25692a342ccc1a6b26122bd22c291a3f27de2c392e52998a2bce314533ca24b52ad730ea3167282d2aec2f37317e259a29312fa53090265929ff2e6a30aa255529ec2e64303f264629db2e573049253329c22e4a30e6223d29be2e4b30d7233529c02e553080231429952e3f3007239d28e62dc02f6222fa27dc2c822e4b2136270f2c772d6120a626532bde2cf21e5a26eb2aa92c8f1d4c26832a702ccd1c2e261b2a262c031cbf25d129de2b771b5425a429a92bec1a05256c296a2b851add244f292a2b511ac6243e29f12a1f1907252d29112bd418cc25c8292a2ce918be25db2a7b2c3718a625312bc72c0417d624b8299c2ba6130d2516296d2afc139d237128f8294f17c7225428f9296718ac225a28ec2955182523a928372adc1658230429b32a901435232129e22ab311e2221729dc2ac60f6222c028652a530cbb21bb2738292d05ba215e263b282d854b2192255a27c884a320c0245f263104cf1f10247b25690cae1e3e23d924480d051e952273241e0ea51dfd21f723bd0d5b1d98216523720d361d76214723790ee81c44213423180e7f1c15212123960d171ccb200323150dbf1b7e20ac22d00c891b40202122ae0c7c1b0420a721a60c0f1bae1f6b212d0b2e1bfe1ea6200e080000591a331a00808324e629922ba620c524492a172c0d21f927e52c4d2efa1e9529df3059327e241c2930304b31d5248028bb2e3f3025257128242eb92ff4244928172ea82f05254128b82d292ffc245328952d002f17246228ef2d712f4524a028a22e4330b423a229ae2ffb303724bf29702fb7302324ad27e32c5f2e18219a26912bfe2c32206226e72a8e2c641f02267e2a3c2c471eb625112a012c001d9e25c0298e2b991c69259729512ba31b3f2561291a2bd01afa242f29e22ae719e6240329ab2ab418f324e5286b2a3118c724b928382aef150e245528e4291f14f9223f28eb291613f820fe277c292c12df229528232a45147b1fac26b6287e113c219e268028af136e22fa26f42872151e22f8260a299016ea216327012903177b224428b029f41605246429132be71555240d2a062ce510fc23112a092c378735231929ba2ae28caf21d62720292385f02078266428b10a3e2030250d27b50e7b1f3124a1259b0fbe1e95231c25da0e391edb22a524bb0f861d41223a24dd0e481dd2210224900e341da021cf23770eff1c77217923350ed21c3e213423fd0d771cf620d4228c0d261cac204822270df21b6420d821ef0cb21b29208f21d20b841beb1f3b21a40be41a6b1f0921010b9a1a161faf2075070000f51a2a1c00001425f728fa29051d16230429e92a74208f25f12bed2c7423b72dca346c365325ec25d62c0f2ec6223c26222c0d2d5b24fc267f2ceb2d9624fe27dc2c362ecc240c28272d892e66242728f02c692e63236526062c582d3e20e726532cd72d7c1c1a29782e22309c0c08245029922ad4965824ef278029611672250f29c32ab01b61255229092b1a1c4d2543290d2b7c1b42253529f82ad41a1a251629dd2aa01af724fa28b12ae319e424d3287b2a3f19b424ab283c2a0c19942486280d2a65186b245828d1297c174a243a28a729441712241e288629e5162c240a28582911178722f026b6284416541d67222824b7115a1f5c2422263a12ee20642501282d142421a825d127ef14a921fd251e28cb14f92144262d2812124c222127dc289f14062333290d2bf315ff24152c692de6136d25272c7c2de7888e239929512bd386512092264328da09341f41240526b20dd61f9b237725320e201f2c2309253e0f6b1e9f22b824860eb01d1d225a24c80d5b1db821f823a70e171d5e218823530eec1c26215923010da91ced201c23bd0c6f1cb720df22820d1c1c742076221b0df31b4020eb210a0cbf1b0c207921e00ba11bed1f4c21c10bb81bcf1f11211a0a481b7b1f1b21860cc21a1b1fd320330c00003c1c4f1d0000c6234f285729991d8f257129e62ab11f6322fb270429c31e9f1c16223a2306198623cd28122a32206a25272bac2c7f22bb250a2c112d0a234b26362c5a2d8d236326412c5a2d7c236526352c542dac23db25142c2e2ddc2239251b2b742c1f222222fa271929cd1d45214e258927bd134823de269828948680241d289d291511ca246a28fe290817e6247d280c2a1616e5247b280b2a1516d5247328022a0116a4245e28de29c41579244828bf2994173c24272895292c1717240a287529da17fc23cb274f29aa17d82386272829a516d4235a271229bf15bc231527f328ce1428239326852841154d2166253627c8138720ab245126ab13892073245426a211b52076248c26710fb1208a248426c510e1209d2490262a1392208e24ac26be132422ca2545283e12ec26fe2d9f2fb1106728ba2f04317a9829223c2777282d0c9e1fe8239125bb10a81f6b22c724c210221e83229e248110401e432268249710d21d0922372446106d1db7211124f70f261d6921a6238f0ffd1c22215423320eac1cd720e622ce0d641c92208922740d1d1c49201d221c0ded1b1620cf21ec0c071cc31f7d21180c061c841f2821170cc71b321ffd20260aa51b071fc92051088a1be21ecd20af0c801a711eb8209b0a0000421ad41b0000cc22a7278d28da1daf220028ff28e31eae203027a028e11d9721d6263b28141ee9249028cf29841e2125c029872b6b201d25a52a382cb12081250c2b742c3521d725322b8b2c5c21ec254f2ba22c4421e0252d2b842c0f215225952a1d2c6e204f245a29062bef1eb5236328082aae1cf1233a28c8299b191f244028bf29fb1655244128b6295c1670243c28ae29841670243728ad2984165a242f28a6295f1735242b28a7290a180f241c2896295b18df23082883298e17ae23cb275c295f177a237e272829551650233227f4285e150323cf26ad285b14cb226f266228e8124222ee2502285c12cb2161254827e3115a21f024c3267111df20962461260d127e2066243426981261205d24272671116b205c241e267d115e203d24fc257010dd2064243426f210e01c77218524b50b9d0f3d17221aa500011cd61f60226d05271ed9215c24410eed1dad210624060eba1d9621cf231d0f811d7b21b4230a105d1d6c218023aa0e481d4a215123900e231d0b210f23620ece1cb6208522f80d841c6920eb21970c391c2020a0214b0c071cdd1f6621180c9a1b891f3a21b90c3d1b3f1f03215c0b511b211fde20700b4c1bfe1ebb206b0b871bf51e9b204008641bc41e9120830bee1a6e1e53204e0c0000161cde1c00808721db2606284b1c1e210e277328b51d71211c276b28c31df322b627f628331d12248728d1298d1e50242e29972a6d1f9324ae293b2be11fe424022aab2b36203125202ad92b2d204525252ad62b17201125032a952bde1fbf24be29412b5f1f85244f29d82aff1d5f24d328472a291b32247e28e929801829244d28b2290c171a2430289429f31614241b287929fd1502240c286b29ca16e923f8275829b316be23e2274b298f16a223bc273429771677238e271129531641235327e928251605231e27c728f215be22dd26a728b6156c22ac26882871152122682665283115bb21f225192835145e2168255d27e113fb20e324b5263012b32097246426e612652069242426741203203a240b26cc12b21f1e24f12585125f1f0824ea2569115b1fca23d82566112e1fd02207254511421dec1f1521880e9519b91d971f190c321c29201322a20a391d0021e9231487241d2c211524100c1b1d44210524310d161d2e21ce232b0df61c132164230b0dd51ce8200923e90cd51cc120b922e90cb61c8e207b22730b911c6e204522380b801c492010221e0b471c0620ab21c30a961b6b1f2121ff09341bfd1edd20b209db1ace1ec6206b09271bc61eaa20a809351bba1ec220a101bc1a461e67202f0c7513c524242687118a29fe2d772e4328ed2ace2e0a309f29a12b4a2f6530162a2b2cc82fb130a62aa52c3a301831692bef2c80308a31df2bf02c84309831e02bce2c77307731aa2be32c68306e31622b962c3e303e31482a6e2cd430b7315128572e7133d434b327602caf3127339224c12d5933b6340925682a37304831b122cc28e42c8b2e48217c28672cda2df02081273c2c272e2220e32b8e3167327522032dd333e534cb1662270e2dd92d8117a727dd2a762cf81cf627e12a5b2c9f1d7c27652af22b2f1ba3255529fb2aaf1a7424df28902a4b1bcb23a628352a10195d23bd28222ae6179723f328722a8018052205284129d117a720c825092884157920c325f2274e1544206825612718146a203025f8263d141820e4248826ef12b21fa2241926a611311f4b24c1254811ec1e1b248f251511ad1ed82355252610761e872310250310361e3023db24b70ff01dec22b224600f681d912280247f0d171d542253242c0d071d1f2233241c0da81ccd210524bc0c7b1c8b21bd23160b551c5f215b23da0a361c3021f622a90afb1be92092224f0a3c1b88200622b809e31a36208a2172098e1a09204d212f09391ac11f192107070e1a9b1ff120d706231a861fbb2029043219f91e96201b089e1a2c1f7920ba0a0000101d7c210000902a032f1c30e229b12bef2fb830e52ae22c5e303131a72cf82cdf30c731e02c532d30312a32262ddd2d63316732962dbb2e72318d328f2dce2d79319132f52c3d2d4c317032412c1c2d14311c32ff2abe2c6c3194322829ed2c2d32a1333e28a72c06327f333a274b2ca331ff327425622cec30163294241e2a5f2f8f306d235929562eea2f7e227129ed2e4f30fe21a52a8230a2311121172ab430ee31891e3a29de2e4a30041d2d28bb2cd12de51d64272d2c252d781ed326b12bc62cbe1e2226f22a442c5e1dca25872a222c111da825912a302c591bd0243d2a172c401ac124922a632c1a1959243629532b2c18fb21e82748298f18ed212127f1282f185721b2269028bb15e8202c26332828149e207a254227c7123a200e25a92635120620e0247826e811da1fa7242626e1103a1f5c24cb257d10f71e1e2478255410bf1ec4232825db0e841e5123dc249f0e2b1ef422a224450ed81da1227024f10d6b1d5f223d24820d291d25221724140cf11cdf21c723d00bc41c97216523890bbc1c4b21ee2259097a1ceb2072220e09201c8820ee21a908371b4420a8211308c61a0a20b121a607b31aeb1fc22191076f1a861fa2214407ff1a461ffd20e707b41abf1e53208b04691a4e1eb21f3d070000841dd0210000682b532f5230be2a6f2c753050313a2c012ddc30d031312d8f2d60315232c52d2a2ed431e9324f2e342e19323433702e3e2e05322f334d2e102ee1311133b12df72dce310333ed2c8e2dbe31fc32ec2b5a2da931eb32f829572db031ff329928e22c9e31e7320827412c3731813268251d2c5f30a9318824ee2a183053310324172a9a2faf306523dd29a62fc0301e23042ab82fd0309b21bd29842fb430741f3429e42e5530951deb28c22d4a2fb91c91281a2d662ee61c1028b82ce12dd11c6c27592c862d671c53260f2c852d1b1cc7254a2b3a2d811b5225a72a642c831bce24792a3e2c3e1a7824e329882bcb189a242a29dd2ab7150a236028162af6156422d8277b296a151e222527e528df158321522637284b15cc20b5257d279b14572064251d272b141f200d25c126ea13ba1fc8245d266b133a1f7624ea25f0129b1e28248c2598113a1ece232f254611c41d5c23de243c107f1d022394240910301da02255249e0f121d4b221b244d0efc1ce721c623110dda1c91215923ee0cca1c4221fd22930b841cef209522240b4d1cb0205122cd0a0a1c752009229008fb1b3220d8218208761b3020a021e609011b0e2088218a09d21a11207b21b407aa19d81feb21700d101bd81f5f2198010000301dea200000cc2b952f6d308d2a8b2c99306b31332c5a2d22315e32402dff2d8d31aa320d2e4f2e04321a338c2e802e3f327e33bf2ec12e7e32dc33b92eb02e5f32c333472e2c2e3a3287335c2dd12df5313e337a2c932dd5310633d92a5e2d9931b0329f28c72c3e318b32e126b72c02313932b9250b2c6f307f317424e72a1e301f319a23272bd62fe63011234c2a732fac30de21b329182f7430fd206529c02e47301d201c29522efd2f0f1edf28c22d392f271bce285a2dcf2ee218e7282b2d9c2ec017db27cc2c672e36161527162c572d3317e126a92be12cfe16a825242bac2c0717bc25e92a7d2cdb1839256f2a1c2c0419532479293d2ba4186d23b2284c2a6718a0223128ca29db170522b927652975166221cc26ae28c71500212d261f28cd149b20db25b427cd1359207825442762121d202225da260a12eb1fd6247526eb10911f8c241b26b10f2f1f4524ba254d0fb01e0d246e25cc0e631eb62330257e0e361e5f23fc24500e151eff22bb24cf0cd31da1227d249b0c911d35223924670c4b1dda21c923fa098c1c7e213023300b2b1c19218a22970a851bb720f721f209fb1a6d209e218509b11a3f2060214a09a61a1c2039214209ca1af21ff720ab07281a7d1fd620420afc1a351f932094810000be1f69200000942bdd2fb330792aa32c9e307b317c2c1d2dfa30ef31172dd72d8d31ab32d02d572e1b324f33662ea12e7932c933b12eb22e9a320034922eaf2e8a320634162e672e6c32e9334a2d3c2e3a329a335b2cf02df0313333f52a6f2da731e5329a29a92c3931953268286b2ce6301c32dc26342c793098315725912b37303931e823812bcc2fdb30fe22682a732fba303f21cf29062f6e301a208129932e4430261f7c29152e0330e21df528cf2d742f331c86285a2de62ea41a4b28172d782e55193128b22c072ea116eb26502c7f2d7815b7269c2be82c4f15b425ce2a6f2ccc154225972a4e2c88160e25102ae52b6c17ea24a129332bff14c0241529932a831399249728082aac14f223332879290a146d229127eb288812d021d226712839135421222601289f12ba20a4256f27df115b2054250b2769114620ff249f2658102620b0243e263710eb1f6824e425430e611f1c248925d50de51eb8233125c90b541e4b23e224260bc21df022a2248d0c4c1d94226a24300cff1c4a222f24e60bd01c0e22ff239c0b6b1cb821a823fc0a261c6e213e238f0a911bd6206122b10b451b7120e421bf09641b81200422d8097f1b82201422ed096c1b5120b921de09b11a13203e218f07311bd21fdd204f0b2e105a22b922b580a72a862e8b2fdb266f2c78306931532be12cfd300f32c92c912d9931c332622d0c2e12324a33d92d5a2e6332ca33242eba2eaf321b34692eb32eb2321834012e7c2e8632ee335b2dfc2d28327633852c742dbc31f332502b012d57318c329529c12c163158325d287d2ccd300332f826052c4f3051311b25942b08300b317d231a2baf2fd730d121a42af92e6930b020f729a92e3630131f9d29532e0230061e4d29082ece2f171db028a42d682ff11b3e281d2dad2e301b4528ec2c5a2e451a4728ec2c312e481ac727a32ce52db619e126172c742dd419d6257e2bf92c9a190e25e22ab92c6c193125772a712c281aa524cf29bb2b82191a243529ec2a67187023dc28972a24173e238f282b2a2216db2204286d29081539223927cc289114b821b8266c283314542134261328d313b320b3259427e6122420392515271412ac1ff224bb26a211721fb1246526a010201f7b2414266d10e31e4624be25000f561efa235425710ee21d7d230025fb0d701df822a224870d081d82224e241d0dbe1c0e22f023d20c751ca1215f23880c111c3721e122220c921bd4206f22b20b1a1b91200c22380bbd1a5220bd21300c831a132060219e0aa11ada1f0a21bd0a511a761fe2206c0ae31a451f8e20720900005d22e2220080df29812e762f0c274e2ca530ad313b2b0f2dee301632892c482d8931ab32a92cfc2def313633322d7e2e5032b3338c2dc42e97320b34af2d6e2e8232f4334f2d292e5432af33ea2cdb2df43141332d2c902d9831db325c2a1e2d3d316632fc28792cdd30fd31b4270f2c7b30a5311326032c19303131a524a62bc72fdf30b222192b782fbc309c20472aea2e6630bc1e2c2a6f2e2f30ed1df629142ec42f0d1d7829ec2d802f401dfa28992d312fc71c8328492dc62ea51b4c28fb2c522e4f1a7e28dc2c152e911856298e2c012e6d195228502c6c2d64181526f02a752c8e170d25712a282c4718b324bd29de2b0b1972248e29772bc51822244a29082b6f18d9230629d82a89177623ca28942a5216d6224c28fc290515362287275729b71322222f27e1283c12f221bb266028b3107e213026062858103821c6258f27e50db3205b250a276e0f4420f3248026bf0ea11f93241126080e3c1f4624b0255b0fb81e00245225d40e461e99231025600ecb1d1c23cc24320f441db32286245a0d011d66224d24160d941cfe211e24a70c5e1ca921b523700c1b1c2c21d3222c0c011cbe205422120c6b1ba6202622dd090b1b7720fe21290bff1a5220b421e707481a26207421620a2e1a6e1fb820ad0b00009921282200009029582e6e2fad26372cac30c031b92a5d2cbb30d131192cc62c42315c327b2c4c2db931e432f92ccc2d1c3277335c2d182e5732cc33762df42d3f32af332b2dcb2d143266339f2c982de1311c33fa2b642d9c31cf32782a2d2d45317332e528f62ceb3016324e26c72c8f30b3317424452c253028318322f12a7b2fa6304b21b62a1c2f8c301e21012a912e4030eb20ab29512e0530a4205a29092eaa2f14201e29d02d6a2fa51ed228912d182fb71d6e28382dc42e811b4c28e22c512e57194228bc2cff2d5418c427742ca52de5178e27162c2b2dae179a273e2bb72cba172325682a662c8b17d924cf29df2b1e17e5248a29992b2518912458291f2bbc175424f428b32a5b160c24af28602af11514235528e22932153222e62773298c14d3217327332947148b210127cc2812142c215d2647289813cb20e025e7270a136c2065256c277e122e20192509273111e41fd8248926e710481f8424fd258610ba1e4024ae252e106f1e0c2459258a0eff1da0231a25180ead1d3e23dd24c50d5c1dd9229b243d0c0f1d5f224824000cce1ce721e523990b951c6d2119233f0b891c1621b2222c0b4b1ca0201e22ca0a021c51209c21560a241b09204221a509711a941f0e218c0a161aa71e4920780c0000732163220000542a622e7f2f0524e12b563061312c2a942cba30f131b12ba12c34317032162c112d9f31e2329d2c662d1c327633ea2cab2d5132c033152db72d3b32ac33cd2ca22d0d326533552c7d2dcc310c335c2b3f2d7731a832262ac52c10313c320d29452ca030cc310a280d2c433053314a26d92bff2f1531c424df2a8c2fc8302e23742a0a2f7d300322da29762e2830cb207429fd2dba2f77200d299b2d3c2fb31fc728622dff2ebf1e8b28332dac2ee71d2528de2c5a2eea1c9b27842cdf2d4d1ba727662ca42d9e19e027412c4e2de4182f28372c9f2d41184b284f2bc42cca16b8259a2a552cd015d924052a272c1e177825dc29ed2b041887246329382b5918ff230729bc2aad179623a528432a481702235228d029ba169c221b28a22999155922af276229a9141322ff26d4287614592157264128da13eb20072608281c12a420b825b127c41165205b25362778101b20eb24a5267e0eaf1f8e241e26130e2b1f4724bc25ab0da01e04245c253d0d171e8d230725d10cc61d0623a824900c951d9e2260244e0a5a1d21221e240b0a041db821a023aa09541c4e21d622e308f61be5206b224b0a5a1b85202322d009cb1a602007225f090e1b2720b721f807261a6f1f6d21f206ee1a141f13210b0b00001b212c220000b729d12de82e95234c2b1e302f314e294e2c8430cb31fd2a602c183133323a2bc32c7e31b832112c2c2de0314133582ca92d3732b433ad2c932d2b32b533722c762df5317033202c372daf311333702bc82c59319f326a2a692c033135324b290b2ca230cb314828702b2b3043319d26012b9e2fcf300b25ac2a2c2f99305923302ad52e71301121d629662e34301f20bd290b2ebb2fce1e1629902d162f081e8f28602dee2eec1d5d280b2d8e2eab1df827aa2c292eba1c5427612cc02d091bcc26062c752dfd185627ba2b372d8f182228232c492d331832280c2caf2da2161d26e72a972ce8124424e6294a2c56149025a529912b6614ac246929322bce1534241d29c52a39150724aa28482a0115f4237428e3290b14ab234728a7291012f0220e285e297c111b228a27f628d410a721d526882878101e2133261f2834119720a3258b27420f462041250d2758100320f0249d26580e8f1f9a243026fa0d4a1f4c24c7251e0c291f072463250b0c971e6923fc24710be11de122a624a40a361d74225b24e309d41c22221a24a20b7b1cb221a423160b451c54211323570cc71bf3208622e80b181b8c200322360bb91a4f20bc21d50acf1a26207521b1075b1ae41f46212e075a1a3e1fbf202c070000f521792200008328d82de12ee8241d2b293022311229a22b72308831692a402c04312332052bb32c8031bc32e52b072dd1313f33392c592d063286336b2c602df43164334a2c3b2dc53120339b2b262da531e432e329c32c3f317532b7293b2cc830f231b828d82b68308d31dd27712b213040316926c52ab92ff93042254a2a352fb4302c24f229b92e57308c226f291e2ed42fc2200f29b92d542f2420ad28462ddd2e9a1e7328092d942e481e3328c42c402e741d3e289c2c0c2e8d1ca0275f2cc52d521b5728002c712d6918bc273f2c8a2d1d161d281f2c062d2e182928192c1e2d2b19b026bc2a2a2ce91840248c298f2b33171e247b298b2bfa1683244129592b55183d241329082b2e17bc23c528982a8d16382380282c2a4d1587222928cd29cb143e22a3274e29c113fa211c27fc286d139821d026b228f31261217c2656287811022104260428eb0f832092257627220f44201b25df26bf0ef31fb9246b26490e621f75241c262b0ced1e2724ab25d20b171eab234125d10c931d1123d524680c331d892279241c0c0e1d0d221f24b509aa1c90219e23600b871c23210a23290b691cee2091227c0c381ca9203422ac0ac51b7f200522240a991b3720a221020a2d1b861fd220dd040c1ba01e6620920900009621db210080e027862da92e4824ee2a37306831d828532b77309d31272ad52bd430f2313f2a682c4a319232072bd32ca2312733b22b152dca315d33d22b0d2db2313433582be32c8131d732b12ab52c4e3185320c2a782cf7301e321c29432cac30c2312728b82b47305731a626102bdb2ff9307c258b2a532fb7308724f229db2e66308e238929642e173018223e29f92d972fe220f928902d1e2f951fc728242da52e341e7828d72c4d2ecb1c2028952cfc2d6d1c0528642cca2d501c3d27342c992df31a6b27fe2b742d9c18a826942be42cc416b8272e2c162dd9176d282e2c132d8019d1277c2b7f2cdb18c825bd2a372c3e185923f628d42a651592244c29202b631834243429052b1f178623d7289f2a5f1676239628282a7a15d7224128d629401452220f289f29da1315228f273b298e139521cd26c328ad11462163266e282b100c21f4250a28fb0fa72087254f275b0f25201e25bf26ae0c9b1fbd244f264b0c2d1f7a2401260d0c041f3724ae25ec0b921ed22349256c0b4c1e4823e0244408131eca229b241e08bf1d60224c24ca07191ddb21f123c2098a1c6021602320092d1c1621fe22b708191ce2209b22a108f01baf206322460aa41b6720ee210a0ac71a112041215c09231b671fcd20d6040000ce22d222008062274a2d612e9c23142af52f17316b28772b75309531f429732bd030f5310c2a182c30317732882a832c87310533332bb02c97311e33582ba22c8231f132002b882c57319b32552a6c2c1f314532ae29462cd130f231c4281f2c8930a1319027682b29303f31f625952a992fda30ed24342a162f8f301e241d2a8b2e2430bb228e29f72dab2fdd20fe28992d262f9d1fcc284e2db62e3b1ea228de2c4b2ef91c54289a2c122e281c1028782cd52de21aa1273f2c9d2d761ac227252c562db2194d27e32b212d6c172c260f2bb52ce114aa26772ba52c4515ba28362c682d450cd6291d2c4c2de993da27f82bb62c5211a7225d28692ac3120f24e628ec2ae0163024ca28c92a261650239228412a8b1470236528082ae11141233628c229bc111b230a2880290310c222c7272929a20f42224227cf28110fa921d0267e28650e0f213b261e28b70d9920bc259227450f45204325fa265710de1fcd246126380e1e1f6624d725a00db61e0e246e254e0d501eb0231b25fe0cf21d4323d924b30c851dbc2295245d0c161d58225324050cd51cfb211b24a40b6e1c8a21d123010b501c36214d23d20a021cc620a422560a871b6b20f721a70b531b13207821720bcb1ace1f4121380c071cde1e4f208c08000061224f23008083277b2da62ebe239029ee2f1b313428bd2a493062314829442bb030cf317d290d2c0c3151321e2a482c5831c332592a7a2c7231e932822a6f2c6c31cd32522a3f2c44319c32d129132c113158325929b32bba30e8319f28592b60307d312827062b103023317425932a832fbf305d24032aed2e5f304d23b829692e14309f227529092eb92f65210529c12d572fad2088285f2def2eef1f3b28e22c632e731ef727822cf02d9f1d69273e2ca12dd01cff261c2c7b2d8b1cae26e12b3c2d561ced255a2be42cb21b6a25cd2a832c6c1a80257a2a222ca918d328e72bc22ce7188929a02ca82da0199528262cfb2cb1194e243529122b52168023c428bd2a82153024db28ac2a26166023af28342a6a152e237528022a7614e4224928c6290113ac221d289429c8127c22f427602997120322852721291c128f210f27c728651017216c2641280610b420df25c027700f6d207b254427ff0e1c201425b926a40cb51fb4243a265a0c501f5924ce25f508cd1e00246f259c085a1e6e231c254e08e51de622c924fd07521d4a226624020ac41ca421ec2362093b1c2b213823c7081f1ce820c722840a1d1cac208622a508441b5d2050221a08341b1020a6211108801aa21f09212409e61a7b1f2c21100d000000229c220080ad263f2d552ee1224629822fd3303927f42a2f305831aa282d2b9e30cf313829482bee3032328029c22b4431b532f829172c6431e6324b2a122c5e31ba32262ad92b2f3172329829be2bf0302232dd28552b8930aa311728db2a23303031df266c2aa62fd6302b25492a342f9430fc230a2ae02e5d30a6228229692e0f30c121ea28c82d572fdb20a4282a2da12e53208928e52c542ef01f3528b62c0a2ee41ea827572c9e2d451e0f27082c492d621db626e02b322dbd1c7726a32b0d2d331c82268c2b032db81b7c25e62aa42ce219b325572a7f2ccb15e027a12bb02c1e0b5e292a2c0f2dd98c682a5e2c302dca8d07279d2ab72b8e153123a2285b2ae7165324f028882a5916bc239f28312add1379237328112ae81110234a28d029fa0ff6222d28a829dd0fc0220e287229a00f5a22ba2737292c0f11225d27eb28da0e9721b3267928500e012119261628a70db120912575274c0d4f200a25c126de0c0320a6243d2670096b1f4624c625300cb81ee6235425970b121e4723ee24db0a5a1da92282243b0ce51c12221f24bd0b8a1c7d2179232d0b521c2021cd22d50a2b1ce3207322970a261cc6203722af08181cb3201322790a071c8e20e8218c08b41b6b20c621d40b021cc21fe820130c00007121a2220080bb26032df12d2d224b290830273166273b2a52308b318828ce2abf30e831f328222be93048323029312bfe3085325529882b02318b329529842bf430513277295a2bc3300a32d3282c2b9230c0314e28cc2a4f3071310127aa2a0e301c318d25352a632fba30a524db29e72e6530c523b629a42e37309c225129062ea92f8e21b328572de82e1d209028102db42ef51e5c28d62c5a2ea91d2828722cdd2dee1cc1271c2c732d291c3527b12b1c2d1b1ae4267f2bed2cd6199326372bbf2cd4187026fc2a992cff171826b02a692c92177025122a2c2cc1162025462a4d2c0d1463280e2cd02cf016152c9c2da72e608f5229f42b072d351863227128792a69153424e628ca2a09188c2395286d2a8a155a23a1285f2a6615e2227928262a4714ba225828f2292e145b222f28ad297612e521f3276e29fe11a62188271a29be1152210427a7283510fc2066262f28e20f8320ba257427220f16201d25b626760e791fa4242e26380c421f3f24b325190cd91ec5233e25bc0b9b1e2823d524760b381e88226f243708c61d0b221524d3074b1d9c219c23fa09c31c2a21fd226109441cd7208822bf0aef1b85201b227b08321b2e20e921b0093a1b1120c721580b5a1bcb1ff521790b541aad1f282201090000d01f572000003826882c7a2db521962909301b312d27f929543092312d28812ab730f23174280f2be5303a32ef283c2bfb3076322829232bdb304f321729db2aa930fa31e328962a8630c6318228712a5d307a3123281a2a173020312627cf299f2fcc30262672291f2f9130ff245029b22e5230a62342294b2e0b30ae22e328c92d692fa8213c28352dcc2eaa20b527be2c372e072081277b2ccd2d6a1f3b27292c5c2d541ebf26b82b072d861d6026332bba2cdc1c0926ca2a7c2c431cb225922a582c051c8d257a2a4e2c361b6125602a302cfc1a05250e2af82b161bd8239829fd2b89193426a12a8d2c41197a2b302da22de999042a942c232dc2982d24fa28c82aa98d3324ba28ab2a3815482388284e2a86146923a1283d2a881316238828112a34130c237728f729f50fe4226f28e429ab0ca9224328c92905060f22e527732979051b21fc26d0289d04a5204a2657284b0a582085256627e309fc1fd9248c2669091e1f87243826d308bf1e3c24bd259208441e9c2328253f08ea1de622b7240208d41d6d226024e607991d2322192496070b1db1219023d6065f1c3621d722f008f51bc52041227e089c1b8e20f521040a6a1b6720c521dd097e1b50209221ec09ea1a2f20a8217709181bd61f2f21360b0000981aba1e0000d525662ba82c8421f4284d2fb630f225292ae83084326427ec2aee3057322728b22af0302b329628782aad300c329d286d2a6a30bf319528372a263056316e28f129f32f0b311128c529b82fdd30ec269429672fab306f2566290e2f7d30cd244b29cf2e6330ec2338299b2e44305622fd28472e1130c621a328b72d522f1b213228042d812e25209d27952ce92d181f2727392c712d431eba26982bf52c821d6c26222ba22ce51c1326d42a752c4a1cec25972a5d2cb11bc325642a4e2cd51a96254e2a442ca01a9a25432a3e2c031a9325452a262c9c1aa1252c2a052c6719b524b529712b5191e12c642e602f9d96cc318332c932bfa85b27c02a652c7a17af214e28d229bd16cf226228272a4e170a2389282b2af61500238e28322a241507239d28432a2513e222a0284a2a7111c9229528312a990c72223b28ae295e0c50212427b328330bc6202c261a28780a62208d257c27f30ce31fef249c26740ce81e5c24d525cd0b791eba233c256308631e0f23d624e3026c1e9f227e24e7824c1ef3212524d882c01d4f2147239982171df220af224d82d11cb02068222d02691ca4204422fe01211c90200d22de01c21b6820dc214205a41b50208f212d05f61a1b207d2181092d1bed1f3b21dd040000be1f2f2000000a25ee2a692cf91ead26122c452d088aca289c2f0331fa23f52a7f31f1325f28b62aed302e32b128622a5b30af317b27d529cf2f1631132891295b2fa9309f276c292e2f7f3046275229062f6c30a2253929e82e5c303a233c29d42e5630d5234129d22e5d30f9223729c52e61300922e528832e4630f12138289d2d4f2f1f212f277f2ce82d28208f268c2bfc2cda1e6a260a2bb42c411d4e26ac2a752c181c1426362a2e2c351bab25eb29032c151a5025c529df2b4d1a0c258e29a82bfc19ce246829722b2819d9245829602ba718cb2469293c2b0f183f25552a592c7218e325222ba22c501740258d2a252c2714a926ca2a372c4415ea23cb28562a06142a238428e9291216c9226c28de294817d4227328ec2954176123c328482a6b1596231d29c32aff1141233129e92a1910fa221929d22a4e066e22ba28522acf858f2199271e29898b902137262428488e2821792546271490ae20b4245526498dea1f0c246f259383aa1e3a23cc240303ed1d81224e240408801ddc21c1237407331d90216023df09021d6e212c23eb0bba1c34210723790b5b1cf320dc226d0c0d1ca720a022680ab11b69207422150a511b2e202722c909521b0020bc21ca09cb1aab1f5b21ac07781b0a1f942038080000881cd91b000091245c2a0d2c7b21e5241b2b8a2cb4220827a82d222f3824262a5431d2327825112a0431543241263329832fb930f225152aad2e4e3069251c298b2e243044257f280d2e8c2fc3248a28d92d3e2f6c248528ce2d3d2f052450280a2eb52ff1221c291d2f8e30c822b029f22f1831e822c228f72e873082217926592c8e2dc31eaa264e2bc12c361e42268e2a472c201dae25282af22b021c8a25d9298d2b321b69259f29552bce1944255f29152b0e190e253c29e42a4818e9240d29a32a3617e924f128722a1a16ef24e328562a041543248a280b2abd129d224428e4293a112f222928e42949129721c2275629af11d720ef26bf28eb1074217c2670288b112722d026af28a513e021c526c328fa1492211827d22859159b226628d22957160a24a829602bee152f240e2a0c2cba102524142a032cae9077230729772a9693be21a62714298a90ee204b265528ae8a1720e824bd26b203a11f2a2480252b09b81e8a23fb24970b261ece228b24f20a941d35223424690c391dc9210024210c121d9a21b723020cdc1c5e216c23af0bb81c33212723760b7c1cf920c1228f0c381cae2037224a0ce81b6220d121400a921b26208b21fc096d1bee1f45213208f71a821f1221de07b31a1b1fa020830100009814281c0000d7236128c929161e7624722a602c7d229924292c692daf22e82c7f331a359e27e825e22ce92dc121aa27012dd92d2425ea275b2dc02e32252628802dfc2ebe2428289e2d0c2f2b2410285f2dbc2e3a237b27f62c5d2e63212f27c12c5f2e191fbe27652de42e971c44247929432bb5075f21a425f8275f96eb246628e329aa0e4d254329ec2a17191b252529e62ae7183d253529e42a071910251a29cb2adc18e824f828a32a2818c524d2286d2a0a189c24aa28332acf177e248c280c2a9c1752246228dd2958163b244028b8294115152426288b2912150f24ea273f292014c6210d264e282c13011dd2228124590f6320c6248226731159218525c127a512f8209625b6273514ad212b2620282b14c92157264228e1116422a3270f29f0135a237f292a2b661526253d2cb52dd111f2240a2c7f2d96910f2320298f2a95918520fd25ec271584541f2024e925f708471f982388254a03d81f4323ef248b03bb1e90228a249008c01d15224224cb074d1db521e423310c001d5b217623e80bcd1c1e214223970b911ce720fa22380b621cae20bd22ee0a261c722063228f0a001c4020f2218508f41b0c2083217e08d31bf21f52216b08f71bdb1f1e216605851b781f0e21f209011b0b1fbe20bf040000351d561f0000b524cd28462afb1d6126dd29962b6a201e2412296f2a5c20601dff23f4248a19632367289c299d1fc125bb2beb2c6b226226772ca32d1e23f826ad2c102e9323ff26bb2c102e6823fd26ac2c062e0123b226962cf22db62222264c2c692df9216a24022a9b2b6d2091219c269728021c502263264a286b12e5236a270729e79499243428b5292788c4246328e629750ec2246928ef29730eb6246928ed29620e8f245e28d1292e0e64244728b229f510302426288b299f120c2409286b290715df23cd274629e414a0238c271c29bd148f2359271329af135e230b27d928d311c12250264128dd1206212525e026f10fa620bb246926c611a82099247626420dbc209b2496264704be20a1249d266d0a1521d924a8262a113d2058248026b40e3a23a8267228e60c2828682fb730a2119f27512e2030759a7f201e26a4271004911fc4239c25fb0d881fa622e324f40d281e9022ab24de0c2e1e4c226d24480ecd1d09223324e50d7b1db6210724920d2f1d65219023450dfc1c1e213e23e20ba61cd320df225a0b511c93209a22d30a081c4f203022600ad01b2520e8212d0add1bdc1f8b21370ae61ba21f35217608b21b4f1ff9205808861b131fbd2019055e1be81ec6207d0ba51a981e9c20810700001c1c441d00009e2354283929691cae23e428072a1120ad216728b229741f95218427ad28db1e1525a228142a2c1e7525122a082cdc1f53251f2b922c9620aa258e2be02c0a21f925b52bf32c50210726ca2bfc2c31210626a62bda2cd920b4252b2b7e2c6e20be24182adc2b191fec23e828a22acf1cc8234c28db290e191c243928a3291b15412438289929ce106d243a289a29000e6e2437289c29010e57243328a129dd122b243628a7292e150824272896290215ca2311287e29d7149023db275729b3145d238d2725297c132a233827ea28aa11e822c9269f287611a62257264f28820f1622cb25d827e00ebd214d2526277b0e5521e924ad26060edc209c245d267d0d8c2072243526300f7520692430260c0f7420682428260b0f9b2057242626480f812055243f26160d381caf1f9c21b80505135f18df1b6500671cdf20d722fd01bf1df9215b24ca07031ec1210a24ca0ad31dae21d3239b0c941d8c21ab23ac0d721d79217c234e0c4d1d5a215723310c2e1d25211d23180cea1ce820d622c50bae1c98204d224909661c4b20e721f808321c0c20a121bd08f21bba1f57217d086d1b521f0b2132084d1b2a1fdf201f08381b001fb5201408571bf61e94202508181bc11e9320cf04de1a871e6320c2070000a21c541d0080942182277128a51cb92120283529621e02222f283029b31ed72236286929151e3a24c328202a901eaf246b29ee2a8a1fcb24f629a02bb71f1425592a102ce31f6c25882a282c0f208825862a272c571f5a255d2a042c1a1f06250c2aa92bf31eb224a2294c2bb31d6a242d29c42abb1a3824c428472a0d1821247128e129101601243e28a229f914f3231f2878290a14d8230b286329f913cd23f0274f29ee13b223df274329d2139523bd272f29b5137a238d2710299a1344235227e928be11f4221627c4281113a422d426a328c0125a229c2684287512122255265a282c12a721e7251328bf1167216925652745100121f024bf26e90fc2209e245e26860f71206924172684100a20472406261b10c31f3224f325e40f791f2024ea25e80d5e1ff923b825d30d331fd522e124b10d6e1c281fe520010b5e19e91dff1f7509911c4f201b222809d51d2021e8239c8c7b1d4f210a247a02471d5521ed2327073a1d3e21b723e709141d19215f23bc09e01cea20f8228209e51cc720a0228709c01c982055227006a71c742022224e068b1c4320ec2128063d1cff1f8a21bf05e41b5c1f142159058c1b031fda201d052f1be81ecb20de047a1bdc1eb1203908951bce1edf20b601ca1a5f1e8a20380c7d1db8262c28fb1b502b073057308629162c0d30ee30852a6a2c553047312b2bb22c94308a319f2b2b2df730f0311f2c882d37315c32552cc02d51316f32812c8b2d33315f32442c802d16310f32ff2b152dc630b631d12a402cc330a9318028b52d9c322334e527e72c9f3209346625662cc331d93219247b2c0b3207332d24b729bf2d692fa621d9288a2cc52dca20a828a12def2ea01fee2da4348b3506219b2c34311e322910a429c52c922d76180f2bf22ccc2d2d1b052c5b2de62d5b1a172c552de62d9e18642a5c2cf52c7f1a5f28bc2a002c711888253629902aaf18aa239428012a1d189a22a428452ad417ee21192860295d164b212e262f2847168720dd25c2275e15162066253a27d81321200c25c826ff12c91fc6245b26b711601f8f2401269510031f4224b325210fd11e1a248025ee0e981ed3234225370d481e7923fd24f70c091e1623c624d10ac11dc5229924800a5c1d742265240e0a051d2b223624ce06d31cee2112248a06861ca021d5232106461c68218223cb05241c3b212b239d05e61bfd20bd225a05941bba204822b601001b6820cc21be04d51a25206e21a1047e1aff1f32217701511ab81f00216d01131a8d1fcf205f01071a731f9d205d814919eb1e89209503cf1a511f9820620900003c23e1240000c12b1a30de304b2ac12cc530b431322c0f2e853182329a2d332e0e322c332c2ef32ead32f933eb2e2c2ffc321d34f02e232ff5321b34b32ea02e8832b333202e2e2e2b3250335e2dcd2df1312133622ca32dba313a33492a6b2d0532ad338328bf2c2032ab33a3275f2ce43142338b26382c9431de32d625582a2a301e313624ad29ec2e6530e422262b36303b31a922c72b31316a327d215f2ba630ad31e91faf2b422f4b30a41d0e2ca92e8d2fde1e5e2c762e1d2f661f402c282e2a2f1420b42b782df12d861ecf29b52c652d3b1ee128712b762c221cbc25962a432ccd1a16256d2a932c081ac4259e29612bdc1594237528b9297e1807228627f228d4176f21d2267728d41502213b261828391279207e2538278c102b201225ad26970e0220e4246c26560ee21fab2416263b0e551f5b24b325240cec1e18245f25d10b8f1eaf230f25680b3e1e3a23cb240d0bd41ddc229224950a7c1d8e226324320a1e1d48223524ef06fb1c11220d24c006da1cd321b3239306a91c82214f235106a11c2421d6221702711cc82052220202f61b7520da21cc81081b3120a9219701be1a0b20bf218601c81aed1fc8218801b41a841fa1218481441b4f1f0521a481221bdb1e6720a489881a571ed81f7a010000a52310250000272c3e300231542b5f2d6f3180321e2d662e34324d33bb2e1d2fcc320d34c82fe12f84337a3441301230ee33b03465301430fc33b4344a308a2f7c336b34662fb22edd321f34d02d272e4b328633632ced2d02324233712a752df8312933db28d52ccb310833c727512c7931b6323726a12bc530e031d924552b62306531a824792a0a30ff30dc23772a143018311e23292b13301131a620ce2af62feb30c41d0d2b662f77302d1d162c0b2f4730141dae2c142ff72f661bd42cfd2ea62fe81c6b2c602eeb2e7d1ee12a4a2dd72d9b1ed928832c3f2d341d0826f32a472cd51bf424f9297d2bfe1ac124b729f82ab61a6b241129a42abd1874237128f729ff17b122192895296c161e22562703292e156421602639289114b520a6256127e9124c205725fa264f1217200725a52601128c1fbf244526b010fd1e6624d7255710561e19247c25df0ffc1db5231f256f0f8e1d4523d224a50d521de8228524680d0e1d88224424fe0bfd1c37220624a209f61cda219e239a09e61c86213523a406ca1c3c21e6222a029a1cef2089221402521cb4204822f4010e1c8f200c22d5017c1b5d20c321b101e41a2b208121ab048c1a02205e217004931a01205d216d07de19d01fad21f709bc1abd1f5c219b07000087241a250000722c80306631982bc92da731be32302d4f2f65328f33dd2e1b2fb93209342c2faa2f6c33703408301030ea33b734373043303434f6344d30fa2fd0339d34b72f3b2f363349347b2e982ed6321534422dfe2d6c32aa33de2b972d09324333eb29dc2c9031ea322f28a52c4a31a232b026162cc330d8313125082b4f305431be23f72a17301731e222c52a9e2fb9304f222a2a692fa330b320df29162f8230f61e772aa72e0330bf1cd52bdd2efe2f6c18f62c6e2f29307b10a62dd32f45301a91762d6c2ff62fef90722c0a2e9c2e0410012aa82c662d1214e6266a2b7d2c74154c25b52a4a2cc71702250e2a962b601959245129ef2aaa188b23bd28412a0c18e0224628a2299a165b22f12766291a167521d526ad289f140521332619285f13b120ea25b527d4117e2092254727911033202e25d426a40ef71fdb2471264c0e9b1f91241b264b0c271f4324ba250a0cad1e0d2471258a0b4b1ea22326251b0b161e4423e8242008f91dde22a0240c08ab1d86225f2490027b1d2d2224247a02381dd721a5235c029c1c83211d2315022d1c1a219622a905861bb32002221905fe1a6e20a021bd04a81a3f205a2183049c1a1c2032217b04c01af01fed2086011c1a6e1fce202404eb1a331f99204c8c0000c620ee2100007b2c8f308131872ba42db631c432602d262e0f324333082e0e2fdb321b34062ffc2f6e3370340830f62ff133bd34053012301134d2340d30f12ffc33ba34912f702f923381343f2e3f2f18334734f62c662e7b32d9337f2ba92d10325733272aef2c9131ef32ab28932c243157321a274a2ca830b931f724892b7a308d317223602b3c304a310a221a2b962fb0300321182a272f7030ea1fbf29ce2e52302a1e262aba2e3730841c472bf32e1130c119cc2c712f2e308016d52d16306c3045913f2e213078303c98c72da42f1b30d497de2cd12d922e99969328492c182d220c15257c2a1d2cbd113f25fa29882b5515d6246229f22aa6136224e528612af31079249d28ff291213c5234f28a829241245228d27f028f5109b21a8264c286e102e210726bb271810bb209f2544277b0f57204925e726e70c3420fb248726bf0c1720b1242f268b09c41f5f24cc254309351f0d2473254203c51e9a231e250f03571e3a23d524dd02cf1def229b24a002591d932266243f07f71c48222d24bb06c51c0c22fd2377064d1cb021b023d405091c4d2135237805851bcd204d2218054f1b7820d321f404671b7e20f32104052c1b6520e721dc042a1b34209d210c08af1af61f382182812a1be21fff20730c0000fb20c12200008c2ca1309531192adc2d73318b32822cd92dde311933682d752e7332cb33562e1c2f41334e34e02e782faf33a0341e2f4a3030340135073029301a34e734572f662f803381341c2ead2ee53229340b2d212e6832be331c2c9e2df7313833442a222d8a31cb329128b72c21316932ca262d2c9c30c431d624d02b453055314823622b16301031a1218c2a652f91304020042aea2e5330221f8e29872e2130551d62291c2ed42fe71b0e2a242e6b2fc918482c132f0f30cd150c2e37308b307711082f8f30e130c498ec2e543081304192662d422fd52fe190672a212df42d57144026f52a572c5a162125372af02b8817c1248a29602b901829241d29d02afd177123e0287c2a4e1669239e28282a9a14e622f627512903133c223727bd28ee10ae21b62668287e104a213a2616282e10ad2091256b27650f2b203125f826970eba1fef24af261c0e6e1fb6245c26e00dfb1e79241026e20bcb1e3824b325ac0b4b1ee6234b251b0be81d7023f124ac0a711de4229024250a001d67223824a609cd1c0022d4236c09801c982146231509181c2521c422a008741bbc204a223508d71a7820e621ba07881a3d2094216007701a0920452145079e1ace1ff9207c04421a6f1fd7201107c91a561f8b205d0900005c21a6220000152c7d305f310d2a132d9331ad32552c962dc931f132ee2cfe2d343290334a2dee2ece321f341d2e3d2f54336a34492e0c30ee33bd34ea2ea32fc733b334332e132f53336a34a52d9b2ed23222349e2c492e5832bb33032bcb2dda311d332729052d4e318f320a28642cd030043213260b2c60307a31ae24082c1f3016312522d52bb92fdb303420842a462f9830851d352abe2e4730421de7295b2e0230551c7529252ed32fc81acb29f72d8a2f94188f2bc32ed72f1f15c72d15306e30d497c82fd130f830279e43300c313631bd9e6f2fa130be30e09d9b2c9a2e372f3e96f1272d2c642d7c14cd24a629bd2be114bd24c729772bf5167c244e29142b9616f1230129b82ad4155d23c528832a9314bd224628db29d912f82170272b29b810ea211227d228ae0eb321aa266128700e5a2122260228410bf820b4257627bc0a95204825f726360a2320dc246e269b09511f7f24fc25f508081f35249c25c4087f1edc233d25560b081e6e23f924d00a911dfa22b524490a0f1d90227824b709d81c4022482478098e1cef2112242509421c86219423cf08fa1b0721c8228108c51bba2046224405581b94201222fa04021b6b20e821c004d51a4620a6218b012b1a122060212e043a1a481f902008070000e0207c220000f12b663052318d294a2d64318532b12be32c57317c32612c852de63131332f2d202eb6320834c02d742e35336134f82d242fc433a134812ee92e82338434002e802e11334334472d492eb6320d34922cea2d5232ab336e2b782dd73110337b29062d4f3175320b28d02ce030fb311d260d2c6f307e317624d72ac62fde30c222a82a3e2f9d30d421062ab62e4030ef209829532ee52f44205e29132e9f2f941fea28c42d662fd41db5286e2df02ee91af529e92d212fba16722d7e2f5230ec90203012314831869ef830e331fd310da1c93096319b31919fee2e63308c30d49bea29ba2c762d580d78247329002c11138b245d292c2ba515b62464290a2bda1575240d29aa2a8a151124c728602a2214e0224e28cd29fd123222d32756294c12c92166271e29e1118821e426c1285f1046214e2639282b10e620de25c127bf0f85206d255627250f36202625f626a90ed71fda248826330e2b1f7e2402260c0caa1e3624ac25870b4d1efa235b251e0bdc1d7e231a259e0a911d1823d9248b07481dbe2298242807071d4e224824d006c71cda21df237a067c1c67211a231109571c1c21cc22e205fd1bb8204b226a05c41b4e20a5214305341b03204b21a101471a7d1f202141040f1abd1e69201b040000512126230080072c62304a317e28652c3b315d32622bac2c563193320e2c0b2dc9313633aa2c122e793203349d2d432e433376349d2dc62ed033ae34122e812e64337b34bd2d102ee9322d34022ddc2d8032e733432c7f2d1b326c33c02a1c2db631e9326929982c2931543216282a2c9030a231ff25d22b29302d318724092bbb2fd930f422802a402f9030b021cf299b2e3730c22063291d2ec22f1b201929b92d412f321fce287d2d072f3e1e8c283e2db92ee11c96281b2d652eb319d92b7a2e882f5115872f9e30cf30409c6f31ea31c13186a1d53192327f323fa3e0309431b73128a30d2daf2e1e2ffc9bf6260c2b662c4a0a6b256e29502be508c8246e29122bf11529240b29a92a1c169f23aa28332a981503235328c5292615622219289629ee133522aa275d294f12eb21e726ce280412582147262e283a10ee200626fa27910dc720c025c527650d8320642544271d0a4420f024aa26db0308208c242126a403611f4724c3255503b91e0a2465250903291e98230d252d08c01d1e23b024cb077b1dac2263247a023b1d442223245d02e31cd621bc2335026d1c6f21fb220002171c062172228b05861b93201b221905f31a71200a229201071b3920bb21c304391a871f42213704691a4f1f252111090000672163230000672b1f30f2303b28312c13313132912a722c37317832782bdd2cde312f334b2ca32daf320f34f92c022efa324a34222db62e7d3383348b2d712e353368340c2df72db0321d346c2c7f2d3d32b033ae2b112dd9313033822abf2c8831bf326d29592c133149323c28eb2b8730b0315f26572b07301031df24e12a662faf303023272aee2e7b300a21b9296a2e21306f1f9529072eb82f9f1efd28a42d1c2f5a1d8a28662dd22e621d2828032d682e761ccb27a72cfd2db919c629382d862ed313762e3b307f304c9b9d313b322632f9a2d5326f333c3304a576320133da3279a54230f230fa3037a30229042cb22c399ab825bb28602a1b97b7242c29bf2a640e1324dd28a12a9a10e423a228462a7510d4236628e9294e0dc2234a28a8290207c42204284529960cf5217227f228090c8c21c7268128850b272127260e28d20da42099256c274a0a47204425fc26cc09e61fec2480265a095e1f8c24062654031c1f4024a2253603ea1e01244d2520037f1e7523f024ef02eb1dff22a724ac024a1d93225c246402eb1c3c221c243902931cbc21a9233306421c55210c23cf08c71be720782264080b1b8420ee21f407be1a4520a4219d07db1a20205d21a504491adb1f3a21f808571a3d1fb7204c0400005d21e7220080c82a2430ff305b281e2c10313a32912a312c32316c32292bfa2cb53114332e2ca12d7a32e933ba2c8e2dc3322634aa2c182e05334c34f22ced2dda324034a52cae2d82320334212c5d2d2c328733e42af82cca311833f629842c52318332c828152cc530ef317e278d2b603088311326da2a03302c31bd24712a732fd4307523012ae82e6430982170293d2ee62f25200e29c82d4e2f911ec928432dbb2ead1da028122d922ef61c3a28da2c3a2e0f1c1928a42c032ef11a4e278d2c162e6d174a2c742e572fd8982b31e431d83196a37933eb3376332ca713343e34e4335fa8b9322c33d932b2a5532c282eae2ee29858248329352cde1242240d29b52a40165324f128d22a5f159b23b228722abb1334237b280e2a521399223028be29b5126822c12731291111e9213527f828ad0e8321d926b9283a0e5d2178265b280f0ef920e025f727bd0a822079256627130437201225de26cf03f31fbf245b269703551f772405265003c21e1a2487250e03e01d84231925f607741dee22ad247702191d6b2260244e020b1d052213244702f31ca72192233c02d11c4a2100238706771c1c21a5220d06391cc2203922c508cd1b9320f2216808671b47208e212e08c41abe1ffc208781b51aae1e78204d0900000e2185220000242af52fd13008282e2c07314532d729f32b2e317732912a4d2c9b31ee32592bfc2c4e32ab33302c1e2d873210343a2c8a2db43232346b2c8b2d8a3225341c2c5a2d3832c633542b002de03133336c2aba2c8931c3324629782c283145323a28042ca230c1317626572b3c30543149259c2ab72fe1303324012aff2e6f30f322a329802e183092215c291b2ead2f1620f928b22d402fe61dc428342dc32e931c7128ee2c5d2e861b3428b72c0e2e1f1be327672cbe2dae1a19274b2ca72d9d156b299f2c7d2d8299f12fa930d830a0a3c9331534bf339ea8b934c534773422aa503471342e349aa978302b310f3190a2bb25b229972b2d091f242a291b2b0d1617241929dc2a0116a923da288f2ac21450239028132a6f13c3223b28c32959115b22142895292e0f032293273a29ca0e8421cb26c4287a0b492160266128c6040821e325da278c0493207625312722040d201425ba26a903731fb5244c265e03f61e7424f5252503b31e2b24992507036b1ec2233325e602391e3823d424d082f91db8228924b382a91d4e223c248f820f1dd221f32349827a1c69218f230602341c15210e23e601241cdb208822df01f41b9e20512264059d1b5a20e42129059f1af61f45217f011c1b601ff82004085117a720a6232284c529532f7a306f267c2b0d314032dd29842b0b313d321a2a0b2c7d31d032e82a882c163272339d2bd52c5532f133fb2b122d773211341e2cf42c4b32f933c32bcc2cf3317233fa2a992c9a31e132092a622c41317b32c428392ce63003324627ad2b6c308431be25bf2a0e302431ab24312a6d2fc7308423082ac72e5930f6216629382e05306c20de28da2d772fdf1eab28912d122f021dc728ff2c402e041bb528962cdf2d711755287b2cc82de51410285e2ca02d97146a27162c552d0611fd25562b332d6909002c0f2ec92e119cf4325333093384a8fe342835bf349dab1b351d35b334c2acff333834c333a5a9f028842bc92c949535231a29eb2a12104924cb28ac2ad710d723a828622a6d1094237c28202a230d51234b28db299c8621231c2897297186cc22cc2732299b8c35223b27c2289c859021c3267928078507212c261a288b049520ac258527360a35203a25ed26b409bd1fc1244a263e09111f5224be25ca08b61e02245d2508036d1e9f230a25e7020f1e3d23c624bd02971dc52288248602171d59224624e606c31cf121012474064d1c7c219223d4052a1c1e210323a505c71bb020542264084b1b6120d6211e08201b1420682106089a1ac01f16213809711bb51e4320340891101a202b23c680ac29392f77302a26ec2ad63002328529d72ae2300b328d29c32b5b31ab324d2a622cdf313c33fe2a6c2cfd318f33ae2abf2c2032cd33e72ada2c1e32c333c82ab32cdc3158334d2a782c9131f4329d290d2c22316432a228ad2bb730de314327392b5330693133259e2afd2ffe303424fd294f2f9b309822cd29ca2e53306821a929602e0f3051204229f62d972fd41ea928852d1d2f871d4228172d992e0d1d0728a72c132e521c8727562cb12d3a1b2227352c812da71bad26d72b1d2d691a1c26632bd82cdd198127172c0b2d16117f300c311a3155a5ea34f234833494acae35c7353a35efad1c353635e234a0adcb2c1b2e872e4fa39323ed28ae2a4710d223c428672af313cf23ad28432af0133f238128032abb11eb225428cc297811a022252896297b0f5f22f2275c29510cc92177271c29d70b6a210027cb28560b04214b263628cc0aae20cb25a927580a5c2075254827f0030a201a25c226a603851fb12445266683171f5624cd253483c21efe2363250e834b1e73230425d882da1de022ab24a582521d302247246782b31c7921a5231f823c1c01210b23ea01301cda20ba22e4010a1c8e206c22d381051c4e20fc21d181b21b10207e21bd81801a8f1f1e2168040d1b741f2e212b0b0000ac1fbc22008017290f2f65301c269c2aaf30e431e6280c2bdc30303220299c2b2d31b232bf29bd2b8c31ee32f429ff2bca315233272a6f2c0c32aa33d32a602ce53186339c2a362c9b311433e329202c5431af322f29b12beb3022322e284d2b7f3094317e26ba2a14301f3177244b2a892fc630ee22062a032f7e30f421ac299d2e373049212829152eba2f3920ba286f2d022f351f7a28112d872ed01d4328c92c272e0e1dbe27782cc62d971c1f272f2c732d391cd526122c532d0d1ca726ed2b242d231b4b269c2bf32c0b1a3225fc2ac22c6718f829da2cad2db8983b343a34f43368abd835dc353e35c1afd135cd3549355ab08532ef324e322eab0e26bd29742bd7123b238c28322ab7114924a7286b2abe878e237c28332ad38629235328f1297886ef222d28c4294486b522162880290f865b22b92742294f8ce3215327ea2852855c21a2266828d884f4200626fa277a849e2090255e272c044c200a25bc26e283b51f9c2429267b832d1f3724ad253e83821ec3234025f102e31d2523d824a9023b1d772271241707d11c06221a248706831c8b2190231d06521c45210623db053d1cfe209c22bf051b1cd3204622db011d1cbf201d229305081c8f20e821d201b61b5e20be213a05951bfa1f2821b68100008c1e432300003a294d2f44304626812aed304632bb28cf2ae5304732f3281b2b433193325e29b92b8c31f932d529be2ba7314933d929272cc1316233462a162c8a312b33f129bd2b3731a93230297a2be73030327c28fd2aa130d2313427bf2a5e3074319e254c2ae22ff7305b24de29382f91302023a229d92e5a30912169294c2e05306e201929992d182f321faa28342dcd2e881d4528012d7b2e951c0c28a62c1e2ec51bb927462cbe2d8b1a1b27d72b452d6a18e426a02b022d4818af265a2bca2ccb169226242b9a2c3215f825ca2a672cb8141e26a72a712cd6143e2da22e2e2f67a370357435ff3439b0b936a336cb358cb268356f35d03433b01427802aad2b650a1e23dc286a2a3a15d323ac28892af4135123b128692a7013ef2282282b2a7b11b9225c28e829980f5d222e28a529300ff421f4276a29b90ea52182271929a60b3d21f226a228bc04e92044262128700478209b2547270a040e200c259226aa838e1f992418266a836c1f3b249f250889231fc3233625d688ec1e2523ce24b188621e8f226f245388b01d0a2208249282201da42184235182901c3e21fb2210022b1cda208822e201de1b86201522c701711b3a20e8210b05621b2420bc210105711bd51fc9213408b5195f1f6422cd0900008f1d052000003729c82e27308223532a083189322728332a15317b328228b82a5531bb32e328122cd2314533eb29102ce1316d33e829012cbb314233d229582b5231d63257290b2b03317832ec28e72ac23012323d28752a7030903134271c2a14301731f425a0297d2fc63087245729f32e7d3016234b29822e2830212204290e2ec12f862161287a2d142f9320c327e32c712e3b1f82278c2ce62d261e8027332c4e2d4b1d0b27002c1c2d2d1ca726912bd82c231b5426072b882c131aee25c22a5f2cb119b525a22a562c201a91259e2a492c9a1a4425442a142cd71aeb25ba2acd2c051b8532eb327d3210ad3937fb362c36a4b4d435cf351935aab2c627912ae62b769b0723e028702a29157c23bc287d2aa6145d23b8284f2a7c130d2399281f2a9311ed228828ff29d20fd2227c28ec299f0c91225228c729ef05f221c32756295f852c21d126af28028ba92025263f28518a56206d256927e0890820d3249c267789fe1e7f2436262983741e2024a325ea82121e73230b25be82ee1dcf22a624ae82d91d6e225624a482b31d282211249382281db7217e235482691c2e21cd22fe81da1bb2203822c6019c1b8120f22128057b1b5f20c02112059e1b462086212905ff1a24208921be042e1bc31f0c210e080000211a7b1e00001c24082b2b2c741d402be331af33ad27d52a6a31bd329528f22a6431c23226294f2bd3311e33a029072b8531f83268290b2b3b31a4325229a92ac0303232f028262a51308c3136280e2a1a302a319c27c529d32fe530f2259429692fa330ce246429fa2e6b308b224229b62e4f307e210a29722e2d30fb20b628052ebe2f64204428582de12e781fcd27d12c242e631e4427632c9f2d8a1dc926eb2b1b2dca1c8d266a2bcc2c411c4b26212ba92cc11a0f26eb2a8a2c801adb25a52a6a2c481aa4257c2a4e2c0d1a8d25742a452cf5198a258a2a522cf119cc24122a242cf6159828092c202d3095c1333a342d34feaff1340235993459b22328722a072c8a163f227728f2294a150423a3282a2af115292397283b2a42152f239928472a4d131d23a928502a04100023a5285b2a5306d8229828402a2f866f223e28a6295c8c5e213627b528d984bd201e2618284884612085258327f5830620fd24b626a383431f6c24dc254883c71ec423362598888f1e1023d924688b791e8f2284241e8d4f1ede211624fd8c941d3a212423698c061def20b522ac89d11cc720772271896f1ca7204d220286301c99201922ad85f11b7a20e2216285b71b58209a21be81081b2c208921c4042b1b0b204321db041b14ef2005217610c0259f2bbf2c3a237027b02d122f6825602abd3024320128582a62310b334128ea2ab0311d3307298e2a1b317b327d28652aa830f8318f28c62929306131332893299e2fd6307a278229512f9630d5253429122f793055243129e92e6b3008242629d22e5b3040223629d32e5e3090201e29c62e6730c5208f282c2efe2fc3206f27f52c8f2e591f8526dd2b482db51d6826ff2ab72c861c4e26ae2a752c7a1bee25562a392cb1198e250c2a182c55196525eb29082c2e193625b429ea2b01192825ad29e32bf3186725ac29bc2b3019d4241e2a1a2ca31868257b2bdc2cf0179c25432bbf2c6f1463233729092b2c10c923d228752aea13a6233c28aa29c014be235c288e29cf14e1225a28bd29d41533238728022a1916c823ef28762ae913a0233729de2a4e1024233f29f72a7406fd221529cf2abc8c7a22a0282e2a1f918f215e27f728a6916f2119260d288691152167252a275092bb20af243726cf90f21f0f2456257d8cb41e3a23bf248b88ee1d76224a24ae82861df821d7237f82351da0217b235a02e81c68212b233702901c1f21d9222f06251cc62092229e05aa1b782049223205ac1b5a2033223305841b3b20142218055c1b0320cc21fd04fe1aa31f7d21bd043e1b491fc520e80400008e1cc8190000b9243a2b772c11221e26d92c312e04242428872e1d30f8248d2a7731f7326226172b1e32c8330e288f2968309d31d4262c2a9c2f1a31e2263a29552faa30fa25d128912e3230d424fc28562ee82f2d23db28202e942f2b226628fe2d992f1622d028862e3630d8214f29892fd3303f21a02907305d313e21a4279a2d302fb01ec125542bbd2c101c09265f2a2d2c281bac25202ae42b72198b25f829a62bb2186d25ad295e2bf71733256029192b4915f8244829ea2a0d15dc242529c02aaf13ad2405299c2a6513d724eb28642aa7132924ac28262ab31049224828e729190f33225628fc29000fdb21c12759299d0ea0228a27d4283d11d622ff26a1282d069122ec26ab286b0fda21c126a3284c1448224627f128ce133723c728352a1d161024da29ac2bf7153b24232a0e2cbc0d1424fb29d42b7392e022ce283c2a0c9599215427fd281c94ea20ff2527281b920220b7247226878cba1f212474257e83b31e5523f7240703051eb1228b24b802821d2b2230247d02421dbe21ed2360021f1d8d2199235002d61c54214b238e06b91c242111236706691ce820ab22fa053b1c9a202422c708e91b5320c2215c058a1b21207f211c05691bea1f3b210605cc1a871f03219b04c21a051f8c209484261af11d2d1c2b0426237c275a27101b8025022c1d2d392368258b2c8b2db5232b29cb2e0330ee265f26ba2d792f7d21f927fa2dab2f1f25dc27da2da62f29254928112ec52f05255028162eaf2f53245828e62d632f7b232628862ddd2ef9218427002d692e23202c27c42c0d2edf1d6525b8290b2b7c15a52056240b26de93ec2205263a28739a2f25e1285d2aaf8804252329c42aee1308251429c72a401602250729af2a1715d124e328842ae514ad24c328582ac1147f24a128272a96155f248528032a71143d246628db294f1427244628bb2991121b242c2889297e121a232427d1280310c520b8241e268b0f251e4c232c25dc0c06212225fd26f10f1621cf25082805104d21e325f7279612be2160262e28d6111d2290264e2898130f22f4276c2973144324892a4f2c3817c4258b2ce92dd00f9724a82b4d2db495cd21c728802a35930620a0258f275d8e901f2824e1252089021fb123e025ea8bcb1f08230b25678caa1e7f226a248488d31d18223224a282631dc021df236f021d1d67218023ee06e11c2521432334029d1cea20ed2216025f1ca720a322fa01101c642038228205e31b3020dc215805e51b0a208521c901d71bf31f5621c501031ce41f1d21d081b01b771f01215708251b1e1fb220d70400004a1d971e00001924bf29fa2a4a1f0825d32a662c0b212a259b2a152c7821a5204a277a28eb1c5a238127d928551e5426122c222dfc210127ee2c382e05236a27132da02e39236d27172d972ed0224a27e32c542e47223d27c82c462e9f210027a82c0d2e3d21dd25f42b032d63203c23e028542a011d1c22cc26b128ef17e222d426b5289c962724e7275729199677245928c4290d8e78245d28cc290e8e91246028d429308e6e245628ba29018e48243e289b29bd871f241e2874297207f72302285829660dbe23c82736295f10872385270f291a0d5c234d270829a6061a23d726b2286b061222ca25d9271d0cb620f324b026620a9620c8249226370ac920cb24a9265384e820e024c426a68af320e524ee2679843d210f25d926190b1521ae24bb2697845c237028a1292810d8288d30ec319192b325c02cf32d7999d91f2725a9266e8c262079239c259f09ec1ec822f224b108431e9e22bc243e083f1e532276243c08d91d05222e24ed078b1db121f6238307281d5c217e23fd06ef1c0f212b23b006a51ccb20d3224b065b1c96209b22e705151c622036229c08db1b3220f6217008c71be71f99214505af1ba81f46213505841b601fff201805731b201fb620af01101beb1eb620c904d11ac91e83209f040000911b811c00005d23ff28dd29221ec023c729642b6e2098223b29652b5420e12179289e29381f66242329862ad31f2925872a542c4c207c259e2bf42c9120e6250a2c3e2dbf202526192c482dc5202d261d2c422d9f203126092c202d75200a26a72bcd2c2d203825cb2a472ced1e3a2492294d2be51cc5239d283f2a7c191b243728a6292c14302426287e2991874d2430288529cd924f2432288b29de90432436289629b3871c2439289d29920dfb232a288b298210b0231028712957107523d9274a290e0d38238a271529e40cf0222527d228b40c9d229b268128fa054c2218262428b105c1218f257e2733056f212125eb26e9842521d4249726a684b42091245e2640049a2081244426280499207924422627049420762430262304a02081243a262e046e203f2442260104551a421dc01e6e019c16781a0f1dbf004c1d8a216a2365821f1e2b225f24c482031ed5211624b702ec1db821d3230308b31d9621aa23b9078e1d7f21792387076f1d632164235d075d1d3d2139234507261d14210f23fa06eb1cd420bb2239029c1c7e2057221502681c2b20f021fe012a1cce1f8121a505a11b581f0a212b05511b171fcd20f504101bf41eb2209801321bfb1e8f20e0040c1bdd1e9a20c684d41ab11e6f20a1040000851c291d00001c223628f728be1c8a22c628182a2f1e9522c828f229281f2423d028162a8d1e78243829b32a2c1d3025cc29692bb61d4025582a092c141e7125c62a502cfe1db225f62a6e2c461ec825f32a6f2c631d8b25c22a4a2cca1d2e25612a0c2cff1dc224e729a62bf81c7b247b29242b561b3e240529962a8d181f24a128172a1f15f6235c28ba294b12c8232f288129460dbc2311285e29fd06bb23ed274329fc069f23cd273029e3068823a4271d29ce0675237127fe28bd864d233927db289986fe22fb26b6285106b222bd2694280d0663227d267428c5051b22382645288405b721cf250c282a056f2161256e27e9040a21ed24c5268e04c6209424442650046f205d24fa25020a1a204b24ed258f0907204524f3257509b01f3924eb253609c91f1724c0258403381f9a22a8244303401b5a1e3b20ea040719f81d0d20ae05f41c91207b223d023a1e4621f023bc8fa01d67210024a0876a1d5621d1235687591d402197236a822b1d252155235682f21cf420fc223c02e71ccd20a6223782bf1ca62059222582a01c7c20192217828c1c4220d8210e82361cf21f7521e781f21b4f1f1521cb817c1bf81ed820b1811d1be91ec6209b81711be41ea620ae812f1bd01ecf209f81611a281e9720ed0b0228e52ce82d2625b02cb1312833e4294e2d393170326a2b0b2e52328633902cc02f1a34f534132e3f305b3439354b2ee12f0b34c734f32d362f0d333034582d7a2e3732a133b52c4b2eef313d33662c8f2d4b315d32fc2a8f2cc230a3319228602dda311733bd27732e0434fb34bd26932c813184324324162e6b3443355425bc2ac32e3b3084214429b52c122e6f1f522c8930263126201d302c3532366f13372ebc300631ea9c962eaf2f1730359ddb2f7a308830369e2b30b4308f30979e39309f308c304ba0b92f4b3056301b9e092e0c2f3a2fd19aad2be32c372def0e9927192aef2a4a149223f328a82ab414e224e2294e2b2b17e221c226af28a6155120a12587272514f91f63250827c1120720fb2496260111941fb1242a26b40f101f7424d225950dcb1e30248c25ac0bb71e102460258d086c1ec22324255a08241e6723e424c602df1d0023ae24a702901da62279248302361d502242245b82ef1c03220e243b82b41cc621d9232082651c7f218323f5852a1c45213723a585fb1b1421de226885841bc42078221885301b80200622df84ca1a4120a2219a84cc1a15205c218981901af91f29217284741ab31fec205f842e1a761fb9203084061a5f1f8720ce864719d81e7b203101f51a741fa720db072b2a3d2e4b2f50252b2d41312832c92a3f2e1f323333122d7f304a34fe34ef2fd13158357536b5316d32b935d03620321c31ee34dc35ba30c730a23470358d3040301734d334bd2f702f433350343f2e822ea032e533d32cd42d31327333d42a782d433299338e280b2d79321034b126a02c023277339e25242cae313e334325da2a593062312924b72afc2ffb300423252cf5300232da21442df0311f338b1e5e2e79311d32c111682f04315131db9d33302c31533145a06d303d313c3180a17e3039312f3191a04e30db30ce3060a01f2f19307630d3981a2d252e622e9c103e29272c9f2c5419e125252b6f2c4f1ae3245b2a062ce61ad623c728fd29f9192322db271329f8175521d32676281e150821372611281d11842079252e271f0a38200925a026b8090120df245b266d09d51fa32408268a032a1f52249c253d03ba1e072449250a03531e8823f824db02011e2023b424b682b41dc7227a249482621d802250246f82061d3f2221244582db1c0122eb239586b21cb52189235d86811c652125231b86751c0d21b8220a862e1cad203322aa858e1b6620d5211f85ef1a3120ac21b384b01a1c20b5218884f91afb1fa821ba842a1ba91f88210c88a81b781f0f210e8a891b0d1f8520f589ee1a6f1efa1fb284c12ac62eea2f8827b02d7b316b320e2c0f2faa32d133212e1e31b0346f35e0308832f5352d379832f33241365e370433f93198359936073265311735f8355f31d9309c346f358d305b303d340935322fb42f483354342a2d772ebc321234072bb42d8232ef333c29232d243276334728a32cc4311733ad26562c8531ef324425472cc730ea31b624382b813092312223912b87308931c521a02cbd30b931b41cbd2df930b5312f11ec2e26319a31b19819305f319d312aa08f3078317f31b1a2c3308e31d83109a4cb309b3197310aa35830dc30cf3065a1a82efa2f0930859ba92b872d1b2e3115dd26162b522c971a1025122aa12b261b5c2476294a2ba91982239b283f2a7418b7221b289a29721640227f2710294b15532158263428d11397208f253f27b41139204825d5264b10122005258e262310871fbc243126f30d061f6624ce258d0d691e15246e25110dff1da4230d25c60a871d3723c5243e0a3e1dd8227b241b07fe1c80223d24c406e31c3122fb233502d81cdf2196233082be1c8321232324829c1c3b21cb223f86821cf8207f221c862e1cbc203e22aa85d81b8d20fe215185641b5120aa210285b81afb1f40218581221ab51f23216381551ad91f21214a04171ac91f5a212004891aab1f25212b099c29232de52dfd24992da9317d32122c6d2f1b332c34072e1931c13483356d300f32b235e536f231a03229364b379832f631a735b336c4318c315a354c363531ec30c634a7358d30663058342a35c32fb52fe833bc340a2e9c2e0f333934272c032e7332c233322a442ded313d3363280a2d7831ae32b026592c0d315932ca247d2b9130a0316623082b5a307f312822f82a3a30403150218f2b2f3017310e20b32c583010316e1b182fe6304831cf9855308931b53162a1d630d031d73119a42331f231d431eea442310f32f631a4a52631c631c331f1a43830d6300d3126a35c2dfd2e792f739d72281d2c502d06122d25b5293a2bf8181c244829ff2a69184f23d228572ad717e6224b28a529d815492205286f299d148f21e726ae28a6111621462626280510c3200226b427610d9e209d254027420a45202a25c526dc030d20d8246026a903991f872407266f030c1f3624a3252f037d1ef9235725ee02071e82230a25b902da1d2723ce24a582d11dd2228724a182981d772246249587601d202207244987121dc7217c23df869c1c782103233f86391c2021a022b985911bc1202622b681071b6f20b1219681b61a3b205b2184819b1a182023217e81bd1af91fe9209184621a921fd5207181a71a431fb720428900004a1cb02000007b2d8c319732322b712f503354340a2ecc305f3413353c30c7317135a23658311132c335df36de31733171357c363131223119350536e430d530c834b23578307c3074344935892f28301534ec34b12dd22e4b336b34fe2bf82d8d32e4337d2a4d2deb313733b728d72c6131b432b2262e2cc73002325e24c22b9d309e315a220d2c6a307331b8218b2be52f0b310c209f2aa72fd6309c1d022c0130c030561a0d2eb730353178913b308831c1314da036310332fe3101a58831493229328fa6a3314b32373252a7a9312e32f4315aa73831ac319b3130a6a02f6d30753052a3562abe2c422d0299e925b32a322cad12b2258e29ea2a8114ba24f328402a57115b24ab28012aeb1092235928c629461051228a27e328220f7a217e2636286c0b03210a26b027cb0aa02096252927450a5b203f25ce26ef033520fd247226cd030920af241c26a583b61f5324bc257c831e1f02246125d388831e842310256a88191e1f23cc2422889e1dd82295249d87361d7c225d241087cd1c292223242b82ab1cf221eb231c824b1c9321a823f081f41b33211f23cc818d1bc6203022b581631b8f20cb21ab81521b7a20ce21a7811e1b5520ae219c81111b2c206d219981791ae11f36211e893c1bda1f1721b8090000b61c6f200080632d4c314b32772af72ef9322234432d36302034d734502f233127355d36c0308f318e35b3362431f83019351f3686300631163508366f30b130cb34bc35e22f333059343235952e742f9933a034352db62ef7323e34072cfc2d6d32c033002a5e2de5312c337828d12c5f31a332aa26372ccb30fb31a424f22b70308031f422f92b3c3035312d21d72aea2fe030571f592a672f9930601d622a452f83307d1ae82cec2f91306f90ab2f2b317731c3a038313732393203a5df31cc32ae32f6a61d32dc32bb3251a83f32c6328032c3a80d327a323b3245a8ec3080316a3165a6f22c582eaa2e439fd926c92ab02c300a612495294f2b6e16372413299d2a3016a323e128742abe145d23a6282d2ad2111e230b282e29051063224e27bb28540c8821a2265e287f0b4a2128260d282b0bc22089254327730a34202425d026b209d41fe92492268903851faf243e266603f01e7524fa252203c11e2e249f250d03281ecd233a25c882bf1d5023d52499824c1dc42277246502e31c4d2227243502b11ce021c6231f826c1c84214823ff811e1c1e21cd22dc01861bbd204f22b301ee1a7620e22191017b1a2f207f2177014a1aff1f33214304931ad51ff5207c01401a851fe6200f07de1a6b1fa9206e0900006b1eda200080e02c13310232202a482eb7320a34ec2c202f80338034fc2d3d307d3494355c2fe930ce34d93532306d30c234b9356f2f9c30dc34c035be2f5e309d348935f82e3b3050343235452e4b2fb333b934ca2ca62ef63241340a2b1b2e5d32b7334229662db031043331289d2c1d3164321f260f2c9430bb313d24e62b47304d319321c82b0330fe30781fad2a752faf30e71c292af02e4f30a71bdb29ba2e3830a118092bf32e2b305b0e5c2e8930ec30779efe3002321832cba41f32f132bc32f3a77d322633033350a9ae322c33dd32d9a9b6323033ef32e0a91f329632ca325ca90d3084309830b8a53029bf2bae2c9e9b9424e3296c2b2c11a5242e29f32a3f11fd23f128972a51126f23b728632a3310d7224928c029ba0f142283270a291e0cff211a27c4286b05a321a926632818854a2125260128c784e820b5256a27a68a92204c25ee2621842e20d2245a26aa898d1f7324df251e89491f2a2478251d8cc21ec3231d259488531e4923dc244988c61de0229c249c82181d72225d244d82bc1c23223b242482781cc721022405823c1c6a217223ea81db1bfd20ae22c6018c1bb7202922b4811c1b7c20f1219b81d11a5b20c4218a81ba1a3620902199870d1af01f45215e013c1a191f78203a040000531d26200080942cfe30e4317e294c2e5c32b233222ca42e213340347c2d003068348635492f7a30e234fa3514302530a834b735502f4130b334ae35442f423071346135082fb22f2b340f35ec2df82e61339234c62c4c2ec9321d34062bb02d393276330f292f2d9f31ce327727bf2c1c314b32c325e62b9530bf312024f52a093012317b22b22a812fba30dc21ff29eb2e5a309220a4296e2e0030f71f6929382ed62f6a1e5529092e812fa01a2f2c262f1e30ac954f308031993123a448320233d7326fa81c3389333d3339aa2d33bc33863317ab413395335e332bab34338b333d33b6aaa7311c32e5314fa8d62ab92c282d059ddb24b1294e2b950e84244e290d2b97145324fe289c2ad612eb23ce28772a7910e1223c28af29a90c6222ba272129530cef215227f328050cb221c826a928b80b68213b262828e304de20d025a327660471206925372703042d201e25d326c6039e1fd02469267103ff1e7824f32529038c1e2c249a25f582341ede234c25cd82cf1d69230c25a0828e1d0623cb248282471da42287246282f81c3f2239243f82c61ccd21d9232882731c6f2143230302641c2521e322fc014a1b9b208622a581db1a3320d4218c81b31aec1f54218381251a7c1f46212a84081a071fce20c5880000201d17200080b82c0731e8315528832d5632af33522c582e62337c34822dd12f9234b3351e2f7b300435343604303930b534e735182f26309b34b235f82e8a2f4f3447353a2ed52ee033cb345a2d402e1a335f34752cb62d8f320434b12a5e2d18326c331429e82c8731c5329e27552ccf30e5318125dd2b49304e31c523352bfe2ffb30e721882a8e2fb9309c20072ad62e4830d41fa129562ef72fad1e3629c32d672f011df3289e2d4d2f08190b2aeb2d3d2f18946d2e6930b5302ba2e831c632b932d6a87133d43371335babc1330834923345acc9331134c23382acf5332734dd339bac46339a33223301ac4b2eb42fdd2fcca400257f29f22bc78e29244b29e42a2b1547240329842a5015f423ad282d2a0b14c2225528db29581109220128ac29c5101b22a8275d29e50ebd21e726ac28c70b402140261f281e0bd6200326f0275f04c320b625bd274d848d20502540272b8a4b20dc24a226d98c19207c242726a18c8e1f4024d325448cd31e0b247825a088241e94231525c6829b1d1a23b4248882581d9d225e243e87261d40222524fa86e31cda21c1239f86bf1c752101236f861e1c06218622dc81311b88203e22a081d11a702033228a81c21a4420d2218781a71ac31f182183874a1ac11f462143040000bf1d4e200080192cc930b3319228392d37329533e42b052e5a336e34f92c732f8334b1355d2e4e30e2340f365a2f922f8c34a735412e6f2f79346b35092efe2e25341535612dcf2ea533af34f32cf92dd5323734012c472d3932a733552ae22cd23114332c29862c57318f320628152cc330e031e125572b293038314024ca2a9d2fc63053221e2a0c2f8230aa20a929872e2730b61e9129272eeb2f581d3529c62d3f2f691c7128622dad2e851a2b280d2d4d2e3d18542b602e562f739b1031b131b831b8a77e33f7336533d4ab28344634f1330cad303449340e3452ad4a3460340f3473ad3d345d340b3463ad7031f631bf314baa1127822a742c319c192420299c2a68074c24c028812ada90ee2398284b2a7a90fa237c28f9298190db235328d3297090bd22e0273129918cd6215527de28e98b6121a62671284a8b3321132600280c8bba2091255727688a5a203d25ee26e689ed1fe2246e265f894c1f8224f225f288081f3a249025c488c21ef9233a259488581e7023e3244c88c21dfd22a124ce87431d932257242287cb1c342219247f86841cbc21ab230a82281c50210f23e101a21bdf207422b901ea1a7b20e22190018b1a39209b216f049f1a122055217f01381ad71f402106074a1a391fc2206c010000be1dd82000802d2cb530aa3131270d2d4432c033342ba52d143358346c2c8b2f7334ad35042e1730cc340636862e102f8c34ab35a22d4a2f51344235b62d922e0434ec340e2d172e7a3396346d2c802d97321e34392b0d2d16328433c729a82ca831eb32ab283a2c0e3141324827b02b8930b4318925dd2a1d303b312b248a2aa62fda3076221d2a0b2f6930a9206f29572ee92f721e1029de2d5e2fdc1ccb28672de42e0f1ca7283a2db12ed51acf27f52c7f2eda185128e72c172eda11a32dc22f3230c6a0e2329b334c33cdaa67348d34403498ad7f348034363438ae8d348f3442348eaec334b534503420af1d342034b933ecadec28fa2baf2c819fb8242629dc2a43882a24d628ac2aa50ddb23b428642a530d3b237228fe298806e2222a28b729aa0c5c22e1274e29bf05d1214127f82841857921dd26b628f284532172265828cf84ec20cf25d627ac8a8b2070254827228d3a201725da26c68cfa1fc1245326818c431f7024e8251a8cba1e0f246d25998bd31d7023fc24e587641de02293244e87241d67224e24f886051d11220924ce860c1dc421a123d786d31c712119232e82781c3821cb2205020b1cc8203722d4016a1b8420d721ad01101b382071219801421ac01ff8206a814a1adc1eb220430400008d1d912000003d2b903095315828ca2c3c32c333192b412d07336d341e2cdc2e5c349135aa2da02faf34ea354c2e842e74349935622d6c2e30341135372dfc2da233b7349b2cb82d2f337634142c502d6c320b34d32a082d07326f332f29a62c8f31c332be27352cf73023320f26a22b7a309431d9249d2a01300231e922152a2f2f78305321bf29992e22300e2070292a2eb92fd61d0b29c42d4c2f671be428512dd82e131a9628102da02ea9182828c22c1a2e3a1826275d2cb32da715e1290e2d0b2efb9cda3088317d3112a959348b34573443aeee34e5349434efafeb34d534783419b011350535953482b0de34e034713431b0e32c3e2eae2eefa54e24b429762bc70769231229c42adc11e123da287b2a731051238a28fa29f50ccd223528a529250678220f287a29d805f12183272a295e856521cc26bc28508b4a2148264a282b8b2521d3259b27f98aa52072251d273f8d1b201525b626a38c771fad243a260f89d91e6524da25a488a11e222479257d8b4b1eb02312251b8b071e2223b524cf8ad51dae227324968a831d4f2237243a8af81cdc21fb239d897b1c6e2186231386391c15210323b9852b1cd6206f22a685e71b94203022c981771b4c20ca210f85a41af31f4c2180842e1b851f14210e0800000000471c008015296f2e982f08230d2cf731ff32a929222de6324534182c102e38346235182daa2e9334d435b12d3b2e57347935252d0f2e1734fe34eb2c8a2d6a33a334572c502de5325c34932beb2c2a32ce332e2a8a2ca5310a33ae28412c3b3166321627d92bb130d0316e25f92a373055313c24442ac32ff7308c22f729072f7930e2205229692e2130831fe628012eb92f411dbe28b82d5a2ff61ab628322d9d2e73179828bd2c282e270c61289a2cf12dea8b00285f2ca22d6c919927252c5e2db997e12a5b2d122e3fa18633e6336c336bad55353235cb3498b049353e35e034dab064353735d73419b176354535e434c8b115316431a9313cac7824d8294b2c0a885723b528d22aa2061524d028992a888db6238f28382a3a8d6d235e28f0293290322329289729b091cb22c62732295f9113223127c928cd906b21b22673281e8ef92012260d289e8d882099256627248a1f202625df269689911fb0242e262189171f4624a825018cc91efe234a25aa8b711e9923fa24468b0d1e2323ae24d58a8e1db42271248787f71c33222e24bb869e1cce21e02316823d1c66216c23ea811a1c0d21d522da819a1b94201722b801281b4f20a321d904eb1a11204e21b004a21ab61f02217f04e91ad21e5920af0400000000a31b0080c828312e992fce21772bc931e2323729cd2cb9323134862bcb2d2a345135b42c302e7834b8351c2d902d0d341e355c2c872dca33b8342d2c702d2c3383349a2b452db93246349f2ac82c1232bd339a29362c7331da327528d82b03313232c1266b2b9530b831ec24d62a2b3036318723fd297d2fb8309421ca29f22e6b301620ac298c2e2430161e5a29102ea32f881cc728982d262f0c1c5a282c2da82e5f1b1828bc2c172e031aa127662cb12dbd181627452c842d6718d426ea2b1c2df116e226d22b172daa10522e0b304230f6a60c3504359d34c6b0ba358e351a3510b2b7358c35393560b2ff35c235393589b328343a34d73385b05d250e2a2f2b0f921223bd28212a6306f423c128492a300751238628f0299c060d235428bd295f06bf222628822918865922ea274c29bc85bd2182271b292f856a21f926c828568b102138262428dc8aba20c3258927688a682072253627f98923201c25b226ac8c9d1faa242c264d8c2e1f4a24b2250e8cd51ef1234525b78b401e5423e4240f8baf1dbf2287246b8a4f1d1a222e24ff89d71c752189237789781c0f21ec220c89661cd0209a22f888141c85203e229b88ee1b4120c9217a88961b0c206321ff89b71aa81f26218d845e1b751f0921aa0100000000291b0080d427e82d542f2f23392b9631a5328a28702c77322234742a2a2db83305351e2c982d113433358a2c0e2dbd33df34c72b3d2d5c339134ea2bf82cb9324f343a2bb92c54320e34112a5e2cba3151333e29f92b2e317c32fe278c2bcb30e8313825022b5a3075315223702ae02f0431a221f529262f93308b20b129b62e473004203d29412eee2f361ecd289e2d3c2f9c1c7e28342db52e9c1b4928e62c4c2e4b1ad6279b2cf12dc1192b27502c972d121aef262d2c672de0199226082c332dd3187626a02b042d4c13b6267d2baf2c94935a31db31b2319cacc135a8353335e8b20936bc355535c1b355361a367c359bb48f358335f43424b339267f2a672c9f892c225428222a2f0c4424a828762ad1908e237c28282a44903b234e28f829159031233428b529af91e2221228772971916422b82740290d91d4214827e628ed914521862652285b910321f525d027ed8f9520832538272d8d482001259326c58eb71f8e2400265b8c291f26247e250b8c741e9b2318254a8be71d0623bc240088491d5e2263242a87e81c07221b243782931ca321b2231182671c5e213323fd815b1c1321bb22e785401ce1205622c385401cc6202222c3852e1c9820d621aa85611b5120a621ab01761b15206a213788000001214c24008095273d2efd2fac218d2a8131fd323528692c54320e342a2aba2c7433b634022b292ddb33fd34a62b9e2c7c33b634fa2ab12cff326134162b802c5f321f348b2a4f2c0032ba33a829ec2b6131e132a428492bf63032321927f82aa830c6319c257a2a2f3041311d241d2a852fbf300b22ae29f82e6a30542065296f2e1730021ffe28d22d542f5b1d9728582ddf2ec71b4328202d912e421a0528ca2c3b2ee719a227662cd82dc2173027fb2b502daf150827b32b142df113bd26732bd22c91106126282ba62c53109c25b62a7a2cb4154027dd2bcd2c8d8ad233d0335c3379b0a7365f36c9351eb5a9366036bf3598b599358d351b354fb49c26422a4f2cf989c022ca288f2a31141e24f928bd2aa6104523b928632a1b10ff2288282f2abe0cc3226728e6291c0664223028a129c605e421ed276029538592216c27152908853221d32698280b8be32021260e28858d6b2079252227fd8c0820f5248226608e921f8d240c26fc8d5e1f342492257d8f131fc32330256590e11e2823c524fe8e761e9f226424918ecf1d1b220024988c1c1da8217323c5898e1c4521f1222c86341cd8207622b285fc1b8220fe216985a61b4220ce21ba81a31b29209f212d85a71b0020b9213085da1ab51fe921a5840000b71ecf1f00801229a22fed30a724472bf431b533ad28252c9a321834e929c52cd3330e35572b472d39345f350f2c9d2c9133dd34f82a6a2cfe325e34cb2a1e2c473200341a2abf2bca3170334e29702b2c31bf325c28d52ab83002320a27542a573069317325d629de2f0131bf237029282f9d30fd212929a82e45301921fb28422e0930a420a828ba2d4f2fa01f2228232dc92ed61de627ba2c322eaf1c9e27682c9c2d501b2e272f2c622d4519e026e92b1d2d45188b26702bc02ca7163326262b912cb417f825172b8f2c6218e725012b892c55180f25cf2a792c4916b7252d2b762c2a890c342f34c333e2b12f37ea363d360cb72035f834863461b47c27ab294a2bf99ee623fe28912a7610cd23ed28912a2b124523c4284f2abf11f722a228332a8211cf229128122a9d0c97227828ec29f4056a224d28ad29598cbf21ad2728297d8eed2096267528ca8fb420ff251d28c89070206a25672783900f20d5249d2620900a1f6a242426918d561ef6237b25288b021e3b23ec24c98add1dbb228b249f8acf1d782241248f8a961d3222fd234f8a0c1db5216a23b389661c3121ce22f685f91bb7204e22cd81b81b8320fb21be818d1b5f20cb21b5019e1b3b207b21b801001b0b206c219581431bb31f0021a4010f214a22e924809ccb235d293f2ad794af2b633226340d27102cbc323034062ab52cee331635a42b0f2d3b3462352e2c7b2c7933d134052b532cf1324734c72abf2bfb319933da29f22a3431bc32c1288a2a8130df317a27242a26304131cf25bf29cc2fd930f32381293e2f8e30d1204d29cb2e5b3057200e29892e38302420b128322eff2faf1f4f28ad2d362f921e0e28102d6d2eb91d6927932cd52d651ce3261b2c462d151ca226a02bef2c5e1a64264b2bc82c6a1919261c2bab2c2a19e525f02a902cfe18a925ca2a712c6f198325af2a592c4b19c625ab2a6b2ce4180d259f2a4f2cb4112627992ba92c3d9c4d29342c732c499e02295a2b3b2ceb972822ef277b29851430240229352a9107fe22a928432a1b132a239e28472a48134d23a128572ac6113d23a6285b2a8a062e239c28582a0e90da2284282e2a6b91442238288f29f49054211d27a3283690b120ff250f286b8f482082258327c58eea1ff524c126428e261f6324d225448fd21eba232625ef8e901e0e23d7241490761e8a2287240390261edb210824a38f4f1d35211123988ed71cec20c422eb8ca41cd2209322568b5e1cb0205c22e88a241c9b2024228c8ae21b8420ed217488b91b6820aa215c88f71a3b209d21b8841c1b0d2040219b01e71a042405246e928226f72c0d2e4223eb2822305731bc26092c2932d4334628c92c0b344e35b02a9f2d6534b735db2baa2c4e33c834632a072c6f32e233db29bd2a3131a832e628202a8b30e0310528e229fa2f1431102682295e2fa53096243629092f773036231a29d72e5c3077202029c52e5230141e2e29d12e6330ba1edd288b2e3530f71f01285c2df72e8f1ed926362cae2dd51c7c264e2bed2cb11b4326db2a852c031aea25752a462cad1989252f2a2e2cb0186c25082a1a2c98184825e7290e2c7918a925c829a42b28185225f929fe2b821828269b2b5f2d85186926852cff2d11159924902a662c2788c0217c28192a3205b3237628e6291612b122cf275f29cd123c2204283c29bf13dd225328b2294314682390280d2a9a141c240a29a92a920dda235229fd2a18071c234329f82ad18cba22fd28ab2a51911f226928da299b933821f426a928aa932621fb25f9275c94f4206d2536273294ab20a8241626db92df1f12243e250090811e4223b924248dd51d85225624968a671d0f2206241a8a1b1db3219a23eb86c91c612135237c86711c1221c7220586f91baf205622cd819e1b5f200822b881831b3c20f521b2816d1b2b20ed21ad814b1b0b20c021f184ee1ab01f96219181101b661f1a2198010000701bd61800803825492c502dd22112285d2e43303b2548294d3082313026bd2bb9323f341928042d56348335052a3c2be5316f33da28042ade303d321e2888294e306a316b271b297b2fcb30fb250429c32e4f305224ef28682e023045227e28042e8c2f332184280e2eb92f76201529122f8f30071e6e290d3052310d1fb529113057316a1fa624422bf62c7618ec25632a492c5918c9254a2a022c30175f25f029af2b3f143725c429722b1f14042572291e2bcc0e94244f29e82a23089f243b29e02a2d886e242d29d12a01082924e028752a8507d122ae28042a9f0cbb212b28b129790e9c215428da299a0b0f222628b3291b0c532285270b29490cd1222f27df289f0cbe222227c628da1238220727c128ba136e23c6274829b7066a232d29f72a9b142b24142a042c3d144324452a0e2cb407c323ce29902bd29493228f28e5295096df210127c6284d962121b725d42758941620a1242a260092a11f0e245b25c18fa01e3a23fa247b8b0b1e8f228424d38a851d0c222b247b87311da221e5230987121d72218b23df86e01c512147239b86c71c27211a237a86841cdc20b4220a823a1c90201222e901dd1b4720ae21c781631b1b207121ab016d1bfe1f3221ad81ea1a991f09219001ea1a381fa620cf870000091f5b1f0080ee22ed29762bc01ed226ea2c592ecd238228f72d192f8524d5299a30ca318126242d6d34c3354828682968307e3156268f289f2e7b30ba25c6289c2e4c3098257e28782e143060246f28222eb22f23230f28a22d102f6321cb27342da42e4a206527c82c3e2ee41e5226012c162dc81a93227527de283391a72003241226a6997824c32732294d992c2507299d2a6d96eb24f428a02a8e91ef24fb28952a7508c824dc28752a7b0e9724c028462a2f116824a428182af81256248828f529e61032246328cb29b00d0c244928af2950071823a2270429690620218f255827a184df1eb523bc241b03e81f4f2448269203d92180258c2749858c210026eb270385b12116261f286e0eb9219126342886101d22da266b28d51005227628592a1915e024bf2b382d2118d325a52ced2d43899924032ba62cca97fa212b28732910954420432511274d91801f2e24e025ee8d161fe5230426348fa91f05230625c98f641e872251247f8ea61d10222524618a551db421c9233a87051d63216b234582c81c222126237b868a1ce120cb2227865f1c9c208322ed851b1c5f202122db81dd1b2e20ca21c781d91b062084215185de1bee1f5a21c781ed1bd01f25217a88921b661ff520b6012c1b111fa8209f010000db1b391d00002624a72a082c9d1f4e250d2c432d9e21a625362c342d4d229123772a002c3820782190264828051d8326c02b062dcb21a027662de62ec822b127902d202fa022b827722d062f36228527222d992e6a216927ed2c642e80204527ba2c282e01208a265b2c8c2d331fd824af2a342c9b1d12237528ee29961abf221027d22818069023882716290f9849243a289929429758245b28b7296a945f245828b42971944a244e28a129c8922d243b288329b7900b241d2862299190c623f9274d29458d7b23bd273129c286402375270e29ea8cf0221b27f628b38c5f225f266d28518c7b2175255f276d8bc6201025e6265084bd20ff24dd264884e120fa24df269d8ada20f224d426ac8fdb20fa2409277c8dee201025c42674843321dd2420270c0b9125282bf92b67146629ce3046327d995223432a822bc198611f5724ec259590362055239c25b589f61e27230c25b888551ebd22bb24dc826a1e67227724e682e01d0b222724a782a91dc321eb238f822d1d6d2174235782ee1c112119233a829f1cc920c22216824d1c92208522f1010e1c61202e22d501c01b2f20ed21c001a61bf01fa421ba017f1bb01f5c21b101681b7e1f1d21ac016c1b431fc920ad81121b0e1fbd209901db1af01e86208c010000fe1a611c00000624df292f2bcb1d5f24832a162cc020f6233c2af82bc720eb22df29662b27201524dc29832b1720da24d62a962c2e20a5250d2c432d8b201a264a2c942d91205026512c982d5e2056264e2c812d06204426322c512d411f3326f22b022dd41eac253f2b8b2ced1da3242f2ae32b521c09242b29cf2ab2190a246328d6291b141d241b286529a5901a2422286a292b9424242b2881293594212438289229aa9001243a2898296d8dd0232c2883294b8d882312286629ce864423c8273329ec8cee225c27f22843869022e6269c28728c2b224e2649282e8cd521c925d827e78b7021672535275f8b45211a25cf26248bf920cc248a269e8dae2098245e26498dbd20972448265a8dbc208b244d266b8a8a2087244426278ac42081243d26758ab41fac23bf253889d814081a6d1ca4817019111d231faf83dd1d162207249f8afa1d49224924c08a0f1efc2116241b88e81dc721cc230188b11daa21a3239282961d8c217c238682741d6b2163237782661d4a213e235187421d2c2124232087131df620f522e186e71cb120be22a586a91c6020532251863c1c0620ed21ea81b11b8a1f5921bd811e1b4c1fe2209c81e41a0c1fc3208e81011b151f9b209581e01a041fa6208e01b71ad81e782084010000951ca01d00004b22ad289729e31cf3229729f62a931e24236029cb2a5c1faa238029f42a081fba24e429822b231c8625742a1c2ccc1bae25eb2a6c2c021cc8252e2b9c2c821be525442ba62ca81bdd253a2ba02c241ca125032b762c4b1c3625982a332c901cbd241d2ae82bc21b7c24b529642bd61a3b243e29dc2a8a181924d0284f2a2a14df237e28e2291d07bb233d2890293d8daf231228612957909c23db27392904929223b6272229fc91882389270c29a89373235427ee28a19449231827c82868930923db26ac282793bd22a2268c2854916a2264266d281291262226263d28f28ec821c4250b28888e5d21482570270f8ed720db24a9268f8a972087242526388a56205c24f225e0891e205624f025948912205c24f7258489c51f4b24ec25448902201b24a925878ca21edd2116247f882619661d291f7d838619921e99203f019a1d11213d239787591e7821ea23a990d91d8621dc23f28da01d6e21ba23728c731d51218823288a431d2b214623f189ff1cf220e822a589cf1cbe2093226e89ac1c8c2046224789981c64200c2230898b1c3120c62122893b1cd41f6a21c7880b1c571f232191889d1bf31ee1204d882e1bdd1eca20de845b1bd11ea8202788db1ad21ec620a5842b1a3e1e8320650145295a2d5c2eb0243b2d9d31b732a728a32ead322434a72abe30a4343335282d8c31cb358436302e5f329f36a837072e8032b036ff376f2f8b31a9359d36f72e0a305c340c35302db02ec53205341b2cf72de6312f33d22a0a2d30312132e928652cd630ef319426a42dde32643493250b2d1a338d34b023b02e2b357d362d239f2a362f45309c1df22b842ec32f0a1c04303b34de3442931331e234b3354ea249309a31b5311da4c4303f317a31a7a5093170316e31f9a516317e31553108a61a31733142310da61b3166313c310ea6e7303e31f030d0a51030703045305ca4e12cad2dc42d22a0d428c12b6f2ca2976228072de82df191772315283d29e711c3207a251627d710c41f1f25ad26630c851fd124592618093e1f8324eb254603c21e4b2495250e835d1e0e245a25e082601ef6233925e182181e9f23fb242188e81d4123bf240188a71dcd228624628a741d7e224d24298a2d1d27221324188cdd1cd221bd23b18b881c8e217a232a8b321c4a212d23a28af21b1521e922488aaa1be0209a220f8a2e1ba0204222ad89041b6520da218c89aa1a2b2091214589861a0820672128898c1ae71f36212d896a1aa51fe6201289141a5e1fa920ce88f4194d1f79200d8a3719be1e6d208983021b5c1f99209501f22a332f4130c426f32d29320d33782a8f305d341e35362dc6327736a7375a30f733af375938ae316d346038ea3810325f343138ce381c328933af3766380332cd319a358d36a130af3083345335132fce2fca33a0343c2d6a2e9832dc33f92ad22d4232a4335b28bd2d81323e3406257d2da9321f342f24b92c5132d6332224d92bd530ec316d226b2cca30f9313d21682e56326833111d1930f532c73317a188305832b332dda4bf3013324a322aa6f030fa311132f8a61d31f131e23138a73531da31b3315aa73531a6316531c3a62e31a0317931baa69c30f430b13077a5852e8d2f8a2f42a2ea29fa2ca22d02949c253f2b7f2c051acd233429832a8219a0222c283529db178c21ef267a281214f8202e2610289d0d7b207c253e270c843d20fe249926be89f21fce244e266289b31f8e24f1253889f11e35247725d78b5d1ed4232525308bf61d5223de24bb8aaa1df4229f24668a621da2226724148a241d64223f24ce89e11c27220f248389ce1cee21c423998bb91ca3216023788b7e1c4621fa221a8b621cf8209122748c201c96201322868a691b5d20d421dc89bd1a2b20a3215489951a1e208c213489ef1a022076217b896f1bc81f5e218e8bc61b901f0e21d48cc61b281fa220d48ce41a871e1a20018bf52bff2fa8308727202fda32cc33242b3031c4348f35142e9d33d53608383631723411389338d732f234ae3830395533033584381d396e335f344138d038f9327e3234364d3745317f311635fc35133080303c340335872d7f2f34334b34842b112e9c32f53365295f2d4d32a2330528dc2ceb313d33e625a12ca631ec32d6241c2c093133323223312cf13006327221672d6b3157327e1d542f0532c432cb9d65306232ec3238a4c53062329b32a8a51a3155326c32c7a7353124321f3243a84731143256329fa8683135322932bba87a31eb31b231cba80f317d31443124a81a30a0308c30caa50a2ca32d0c2e639a4626da2a272c9b18a524cc295d2bfc18fd23a528062aab1772232b287b2977157d2291270f2908142a214026262840116e206c251527010f29202825c126b30ce51ff9247f265a09701fb42427260a09f71e5d24be2526035e1e07245b25e002fd1d8823f224b502881d1323a42480023d1dae225c245e82001d5e222524c786d71c1522d3237789cc1ccf2181236b89ad1c74211623658b8a1c3421c3222d8b641ced206e22f18a251cb1202722368c6f1b6e20d5218e8bdd1a24206b216d895f1aae1f0f210989f4197e1ff120b9863f1ab81fee203c84eb19a11f15210384701aaa1ff2207481ef0e692647278c02ec2eb2322234f02a1e31cd34b4356e2e11338036b9373d310c34a0374a38b6338f346838ea386934ac344738e438523436342b38bb38f5326c323836463765317f31593548363b30873086347735542e3c2f953386343d2c4a2ecd321f34f329862d3b329733f4271c2db631f232a025042d3f317b326424142ce13006323822dc2bb230d0311b21592cde30fb31621e032e3231ef316f911130e3314e32e4a20a316b3298328ba668316d3279321fa8743146324632c6a87e31363223321ea987312632063276a9a7312932ec3196a993310b32ca3182a90c319b316f31b4a8ee2d882fd62f08a37d27f92a272c3b147d241f29722a4f180f24fe28292acb1748235e2892295815e0221b285729fd128621de26a0283d0e142155263928e20abe200226c02749047a2093252427118a48201225a926d68c1520c12440269c8ca91f6d24e725538c111f22247e25fb8b681eca232d255788091e5c23e324d18ac81d0d23a724888a981db62261246c8c461d58221f242b8c151d0822ce23058ccc1caf215223e08c7f1c6a21f322928c291c13219422948a7c1bbc201122eb89101b7520ac21fa87c71a3a205f21a887981a232030217884b21a0820fc209087381aba1fdf2006873b1a241fbf20be8b00001614dd1f00801c2d2f3153328b28c730d1349b35312d9d3225365c3728305f333b370c38ac31233418389f38993246340e38aa381832ad3304389938e831253245367a37d03053315135443605307d309a347b35e52d4f2fdd33af34132c682e01333d340f2a972d23326633bc27342d8d31ed322425652cf7304532b322122cbf30c63149211c2c84309931e41f902b4e307b31b01bab2c8c30633138903f2f8131f73180a0ef3046327332daa58f31833295328da8ad317d3279324aa9c33172325a32b2a9d731763258326eaaee317232303288aae23164322b327aaac0313b32e43102aa2030c930d530c1a64b29602c532d6199fc24dc29552ba1117524f128582a09113e24ab28082ac00d95235928c329230d4c228827da28b105a3217a26202818050a210226ad278e849f2087251c272d8453203125b726dc892b20ec246c26b58c0320ab241026888cd21f4924a9256b8c381fea234625b58db81e7423f524508d341e1523b7244e8eb81dc3228124858c401d6a224a24278cde1c20221724b28b9f1cdf21d2234f8b371c7e217f23aa8aef1b26210e237b888a1bc720382242886d1b9220c8213288471b6d20aa211c88de1a38206f21c187d31a1e204121b587871aeb1f39215f87451bf81f2521a4810000f214d81f0080df2cbd30af3177264b307c343f358c2c0a32d135f136ee2fa632ac367e37d530c133cf376b38a331ca33cc377938e2315733c3377038a631193224363b37853049312a351e363d2f3c3061344335332d362f91339e346e2b432ecf32243492298d2d293284332728e12c8431c432ec253d2ce6300332e623dd2b73308b318d210f2c36302c31cb1fc72af52ffd30361c5a2be02fc23027187c2db6305b31939d9030f131303269a5a131b332d532eda80832d632c432f6a91332c532b732b0aa3432d532bd3288ab4e32d732b13201ac5232ce329c3232ac5332bc32963232ac7e31da31a231abaa772c962d592ed1a31d251b2aa22b9f080c24ff28872a0715dc23d628572a371276239d281d2a0e0dd422012827292b062d223a27be282f8cb021a9265928b58b3421f625f2270d8b8220662510271c8a12201525a7268489ba1fd62475263c89901f9c242526458c1e1f6124de25058cd71e20247c25ba8b511ea5232125228bdf1d2623c424a28a631da4226d24158aed1c432223249089a81cd521c12342895e1c71214823ef88221c2221d222ab88ae1bc82063223485321b8520de21e084c61a2e205b219784611afc1f1f2171816e1ad21fe8205b84051a861fe7205c81c41a8f1fbd20870100001b16c81f00804a2c9030983163271d2f1334d134ef2bea30e534cc35972ee8310f36d33661300a333d37173884312b33743758389e3196327737653811315d31f4351337cd2fd830f734e8357f2ec92f35342f35ac2cc72e64338634cb2a212ea43210341b296a2df5314e337e27ad2c483192326a25132cb530e6319823c12b623070310921bd2b22300131ae1d0b2b6b2f8c30291b712a182f7030d20da82b8c2f88300e9a0d2f1931ac312ea4803191329e32d0a84732ff32d732eaaa5e320a33dc32bbab82322133fe3251aca5323133f33299ac9e321c33db32c4acc6321433af3211adb332c932673234ade02eb82f3130f5a742269f2a1a2c98981a25ed28a82a52982e24e7286a2a8e87a623ae28412ae98606234128a02959863b227227e528398c1f2203279f28ea8ebd219026462889904b211726e3272f90b5209e254727718f5e203825c126e88e0920bd2433261a908c1f6424c925b090401f1a2466258190b51e97230725d18e3e1e0c23b624ef8cb91da7227d24778a1b1d4b224124c489a61c01221c244089321c8f21b723bd88f21b2d2115237d888c1bd02072224388541b9c2002222388e21a5e20c921c687bc1a44209a219b87b41a21206a214d89151ac31f2421de86291a141f6820f58600005b18af1f0080372ca030a3310527052f1c34e0343c2bd33016352336332e8d310c36dc366d3081320d37043830319532113719381031153210371a3898300131ae35bd366b2f5230dd34cf35292e482f1e340635792c5f2e0e334f34352aaf2d4932a9334128332dc63107335026a92c363167329b24f42ba330bf31f622132b233029316521a82ab72fc8305320142a132f6f30351fd629a02e28309a1dbe29912e2630d619842c9d2f56309c9daf30dc310c32aca76a323933fd326dabd0326333283354acf3326a33313301ad09338d33583344ad21338c334333bdad30337a330633c9ad4e336d33153316aee83075315a3183aaae27ed2b3f2da39942247329032bcf100d24e1284f2a7d0dd323c528552a12073a232728402988869a227727e828f785da213227b628ee8b552180265b283a8b452121260228f48dde20c12574277f8d7c2066251427118d28201325a926b28cb11fc2244826588c101f6e24de25fa8b8c1e1d2484252d8d3b1eb9233e25ed8cca1d4723f624948c671ddb22b424458c181d65227324078cdd1c13222e247e89a51cb221d1233f89431c57214823c785d91bdb2096225185fb1a5520f721bb84b31a1e20b4218a848f1af01f52212f89b1196c1f6c214981c119071f1e21268b00002718c41f0080d22b753071311226692e0b34d934832b953027354f36c22d2831ee35b736102ffd31cf36d4371a301132d336f83727308831d2360038bb2fc1307c358f36c72e0d3092347f356f2ddd2eee33d5341e2c0f2eeb324a34bb29762d3432af331628fc2ca93102330d26672cf73020321a24ca2b69307b3180216d2b20300b31f81f982aa92fc430541e052a032f6730191daa296f2e1330281c5a29e72d5c2f3b18962aff2d542fd69c602e8430ed3094a50c32de32c532afab4233c23365336ead5f33c7337233eead7f33ed3396333eae9b330234b0338daec23300348a33e6ae01341734ab3359afbb321a33b632fcadc728f22b9e2c74a021244329ae2a990df723c2283b2a7f100124ad28152a861045235628a329ed0c7a22ec276729da052222a42726298b053c21ae266c28bb84eb2032260328aa8ac320ff25c927618db7209b257927748f8b202825fd269e904f20c2247a265a9135206f2416263a91d91f4024d025e090fe1e092473251b8f341e7d23fc24e78c961dee2299246b8c551d6a224624378c1b1d19221b24318d291dca21bc233f8dfc1c7721f522e28b351c00217c22a78a421b7a202b2219881f1b7820372205880c1b5620e621f587611a0320282134873d1af81f8d213a8400002b188f1f0080502b6e307631ae25eb2dd433b134c42a3a3002351636ca2dcc30bb358a363f2fb831a136a1375230ae31a536cf370d301d31ad36e0376f2f2d304a355d36f42d732f86347735ff2c702ed133ce34e82b982dae322e34ec29022dff3174335028af2c8031cc32f3254f2cde3004320424b22b423053316f21be2ad82fe730ff1f122a3b2f9130831e9e29a92e3a30c21c8229562e0c30d81a6929fc2d7f2f4718bc287b2de42e470c4d2a012e132fa09c91308b31a93107a95133c9336733aeadd7331734bd33c0aef1331c34c7334aaf07342334df339eaf17342e34cc33f8af41344e34e43344b0263420349a3346b0d92b642dfc2d6ea5e4235729fd2a598d00249328692a6c8d01249728522a559297238528462ab79362235128ff298193e222cb271629719102223927dc281b927321aa2676288a912c210426d7271790c8208d253827dc9059203225d7266b90e11fd3245a260190481f7c24de25c28deb1e36248025788d901eeb232d25308d231e6623da24da8cb21dfc229d246f8a3d1d90225724248cc91c2a22162468898d1cbd21a7232489201c4421f8229785a61bd7204c222f85fe1a6620c121bd847e1a272083217781c41a0b2041218781ea19b81f1f21ae06861a1d1fbe206c840000b1159c1f0080802a01300f31ae24772d733382347a291130dd34d935e12c883067352236142e263139363837e82e3a316136a637dd2edc3060369637a82ebe2f20353736692dd92e61345e35982ce42d46339334bc2a182d5932df33f628a92cc231263303283e2c353174321c26b02ba030c831ab24e42a2f304e316c22992aca2fec30a820272a192f6f30e81d7e296b2efd2f081c2129fb2d962f3719d428922d212fa2177e285d2dd52e1a172328152d6b2e7a0b5a2cf72edc2fa7a159322333fe3292ac2b3451341e34a6af3c34633434343fb04d346b341e346fb055346734333496b087348a342a340db1af34a23445347db1802ed02f1130f7a988245829c92b1e918123d328912ac8061424d9285c2a878df8238628c329668d6d2338289a29088d6622f92764293a8fd4214927fa28958e8421da26b2285c903f21672651282690ce20c425b427e29072205f25262785901e201225c3262f90f91fc0244a260d90631f6f24e225828fc41e0e246525e18ec01d4b23ed248c8c381dbf228324208cf81c49223b24db8bf91c0222f823dd8b121dcf21a823028cda1c87213223ac8b6b1c3d21d422fd88de1bbf20322271882b1b7720cb21db84d11a35206d21b3873d1ad51f1021ef888c1a081fb0202d8900008514251f0000cf29b22fe8302b25d62c543391344229782fc334d235602cfd2f2e35f2353e2da030f7350d37342eca30283663374a2e67303b366d37272e272ff4340a36192d422e2c341035322c862d13337534792a142d5d32ef33a928b72cc03126338626422c27316532ee24b62b9230b0312f23b72a13301431bd202d2a542f9130a01ed729af2e30304a1c7c293c2ecc2f5618f628db2d8d2fb912b3286b2d2a2f3f0cc728382db82e518cbb28cf2c222e468c5228a52cdd2dd5964a2e3d307e30fea7fd33313404348eaf87349c344b34ecb099349e34463442b1ac34b234503458b1d634c334643414b2f134ba344734a1b2323187315e31f1ad92249629e72aa594e0232c29e72a1d878e23cc28682ad38670238c28eb29b8860f233a288e29c98cc92209285929aa8f2d226f271329e2905821b8269d286f91322133262f2848911021c1258a274a929f2067250f27be9116200f25a1261391771fae242a26968fd21e6124c525ef8e691e14246425848e061e8f23fc241f8ed11d0f23ac24ea8d991da2226a24b18d4b1d40223024618de71cdc21ee23fc8c7d1c70216a23198b4b1c26210d23ca8a201cde206b22868aed1b902016227a88781b5420c021e889d01af21f6421ed8ae81abb1f7621cd873a206f1b6e20d2838725812853288e1a7c2cdb323834fa27302fd734f435022c822fe734a0359c2c4930b135b736de2d8730f9354837332e263003364437cc2d942ecb34e235992cd82de933ea34822b4b2de4326434c129ac2c1b32a9334a28382c7131d0325026bf2bde301132ec24062b553071315623512af42f0c318721ec293a2f98302e2057297c2e2130bb1df028fd2dac2f2f1cc828c02d692fdc18a3286e2dfa2e49128828222d952e188c6f28da2c372e0295e027762cdb2d3a96ef27722cda2dd39969301831553159abba34d134813468b1f9340635a7341cb205351435b33473b223350935a134e4b24a353335be34b1b317334033c332dbb04125de294b2b87960724d928dd2a758dd423b9287d2a6c90cc239128352aed937e235c28da299e934323262885298394cd22b9272b293994f4212527d02865933d219a2671288292d620e725f92702927d2078254727909023201625c1263490c31fa2241426e48f451f41249125648ff51ef92339255290711e8423e62400900e1ef8229924868f891d83225d24a08dfb1c1e221f24e08ba91cc521c82343892b1c4d213823a685001ce820af226c857e1b7e20fa211485261b492099219d81e41a12204e21ab849c1ac21f08217e019d1afc1eb2207e81a71fb51a2d2030894a25642848281419312cc2322d347527c22eb434cb35eb2bf52edb349e35782c1130a335ad36572d4f30c53507372c2da82fd835fa36072d432eb234bc35062cbb2dbc33c8348e2a032dbe3250344e293e2ccf316733c927d02b32319032d8256e2bc230f9311724e92a493058310c22f929982fc1303720bc290a2f7130811d9729a52e2f30f21a5d291d2ea62f3d18f328a52d1f2f97158828392da32e24123228ce2c182ebd14cd27702caf2d49112a27402c782d790a0827062c1c2d5a0a1928882cb82d179928329c32dd3285ae3a352835bc3428b34d353d35c834b5b36e354d35d4342db4b1357735df349fb4063417348333f7b15d258a29cb2aaa968123b528402a168ddf23c628322a558d8e238b28ee29449012234f28be29fc8f9d22182878293a915f22dc274b290991c8217d271f29e0916921f126cb288091d92002260828ed908720a32559279a9052205925122764901f20032593261f919c1f94240c26ba90351f302492257a90c81ebc2327253690381e2423bf24ba8fb41d91226924168f531dff210d249d8ecc1c5f216723f68d8b1cf820dd22a58d771cb62085228c8d2c1c7a2026222f8dfb1b4720b4210e8c9b1b0e205321b98cd31ab11f2721b587681b6c1ffc20ac014c209f1c9c20d389ae244c2834288d19e12b5e32f3330227ee2d60346535482b472e973468351f2c09308c358636d82c15309d35da36212de22e6e3583369e2c7c2d55344d355b2bf92c0c3369341c2a912c40320934d628fa2b6c31df32df26912bed3023326124082b7e30a9312822882a16302b319c20e829562fa430011f9e29ce2e5030c21c42295d2e0630881ad528bf2d502fa4177d284e2dc72e19173628fb2c5e2ea916d327b12cfd2d30163b27612c9c2d5917e9262e2c582d06178726e62b252d6c107326822b162d1995c6271d2cfe2c769b44339a336a33fab0a3358e35fd347fb4cc35a035513508b5ff35b9350535e2b501331d33a13231b12a252c29a32b95970f24e428b52a9590f523b3285b2a4a929b2380281e2abb932b234128e6294993fb22222899295694c42200285f29f79459229e272829a994a5211a27c42825942421562637285b94db20d2259d2721937f205f2504279a923620e22466262f927d1f6c24d325a790da1e0624512542903a1e6823f024548eba1dd4229324d28d501d49224e24338ceb1cf0210f248e89a01ca521b9233989941c63213d233d8b811c1d21da221f8b5c1ce02064226e8c471cb9202022c38a2e1c9320c8219c8a5f1b44209721aa81631b1d206c21828bc928e72b8b2c4521ef263e2b0f2b499d2c2c6e323934c623f32d2b340f352029b42d4f342a35332af72e253534362e2c5d2f4e358436bb2c6a2e0d350a364d2c1d2d12340e35dc2a692cb3323a346b29242c0d32d3338028582b4a31b532bd26042bc930ff31da24942a4f306b312122472aca2fe3301420cd29252f8630921d6c29972e2d30bc1ae728fc2d942ffc188e287d2dfd2e34174a28332d9b2ec8161928e02c3b2ea114cd27802cdd2d49113f271a2c6d2d8c0af626db2b2c2d4a0a9e26922bdf2cfb893e26532bb92c3b105125f92aa42c011208281e2c0b2d60967831ec31953135b0e535e6353935c9b57f356f3503358cb5a72d162f132fe6ab842484297a2b97947e246729052b170ef923e628982a34077423c5285b2abc862b239228302adb8cda226128e129a58c76222d2893294c8ff521e1274b29b690992159270229b1913621a72688284c91b420e925d527d8913e204625eb264591c81fd8245c26d590771f7124ec257b913a1f192477251f92ef1e9b231a25e091bc1e0823b324b491531e8a225d245b91aa1d1422fe232890ea1ca42167231b8e571c3f21d522698c171ccf206022288ce31b7620ed21028ca31b4120b821c38bad1b2f209121a38d011c1520a1216d858e1bfd1f8f211f850000371d62200080f329563067313722972c9433d934bb28682d64346135082a012eb6349d35602b122f7a3582368b2c342f7935a636a02c492e60358936642c022d29343035242b4c2ccc323e34a429c22bca3180335328d42aef3055321326582a6d3096316324e4290230183127227d294d2fac301d212029c72e5530d01ff9286a2e1e30e61da428fc2db32f741c4a28682d332f4c1a3928f72c782e4b18de279d2ce32d71145427612cb22d2314f7262b2c772dde139b26e62b152d76135826962bd82c04152726732bca2cdd14fb25472bb12c67099826642b922c9699be24b42a462cd2945a279b2bbb2c76a09828f52bbd2c20a50c276d2a122cc59d9f22ae28612a7d8c82245329a32a1c0e6323cd28842a2c102523c528432ad70c0723ae28412ac30cd6229a28212a2d86af227d28ec29878c6a22422893291291b5217827ff281793d120642655281293b820ea250128fe939a2061255c27cc932f20d7249c261693251f4e24fb253f915e1ea6234725e98feb1dff22c724048ed01da7227924e98d921d69223324a98d531d1822e323698df41ca3216523098d6c1c2621d722fe8a1f1cbc207022a888f01b88201e227b88b51b5720db213985be1b30206e213f85fb1aca1f5021e287201b8c1ff1200688ea1ba2206d214d982624db279728cb9a372cdf328034d5252d2d67349a35eb29b72d9e348e35052bc02e633588363e2c472f60359636292c062e4d357436202cb12c17341135d22a222c7d32f9333129722b3c31e232d5265c2a6f30bb319424d52901300f31c0229129602fae303e205a29ed2e6e30591e1129a52e4530021eb5285d2e1a30951d6428f32d952f351d2728592dca2eed1c9f27e52c2e2e171c1427652c912dcc1abd26f82b1b2db5197026992beb2cba1825266c2bce2c8318ee25462bbc2c0619c9252e2baf2c3f189525f92a862cad159825d72a622c950f29254a2a292c69965924b229d42baa989b23f028a62adf061224b728932a840d9123d128892afb11c6229928272a970c6223b628612a81133623a728512ab3117e23ae285b2a140d5f23ab285a2ad4916523a0284c2a1997e82279280d2ada950d222d286b2920953621f42682286a94cd20f325fb2711945020792561274e930120e824ae26c892551f5e24cf256291f21ec32324251991a11e1b23d324de90621e932281246891f41de321e9235f90221d3321f422898fc01ce620ad22f98ea51ccd207522d28e7f1cb6204e22968d421c98201c224a8d101c8420e8210c8df11b6420b021098cea1a3a20a92177892b1b0a203b21ab8900009f2061200080d627752e11304e228c2abb3174331e27722d4d344b3575292d2ece34a135d729f82e74359436932bb62e46359f36372cda2d29354736172c562c7c33aa344e2a052bc1311b338228362a9530f13167268b29ac2fea304e243b290a2f7a3077210929cb2e5630d51ce7289f2e4030331b0f29b22e48306d1b2329b92e5130ee1c4b28dd2d782f931d5b27da2c4c2ec71ca0262e2c7b2ddb1bf425562bed2c631a9425a02a762c5b1959255b2a462c88184125362a3c2cb7173425402a2c2c7716c824442a402cf1159f25bd2b522db715e726c52c652ecc13bf257b2be72c8b9430244b29ec2a429431236628b9297f06fb221f28ab29bb0cff22132871298811bf22292880295511f8224d28b72915137a23a128192ae91122243829d12a9a0d03246d29172b40874b234d29f02ac491b122d8286f2a2894f1211e2877290895102194267028dc94cf20cc25dd272995bf204e252527189582209524ef255494d21f09243e25be91741e3823cf240290c91d8a226e24e18d5b1d14221f243c8c191dbf21b223088ccc1c65214123968b771c0f21ca220f8b141cb12032229b88ae1b5320cb2156886b1b2d20c52130885a1b1e20c5212788301bf71f97210f88a01a9a1f81217d84461b871f2821c0890000521a401a008063264b2dbb2e0f20aa29c32f0331eb21332c3f3380340c26de2e3a36d0370b218a3044386739e5250c2ff4357737aa2a532c5433a334ad29912a5c31c43297288b295e309231f7260329632fdd309924b528922e3e303f228a28062ea02f3b205b28b02d5a2f2a1dae28222ee92f3a0c1829722fe2302d19322be8303232781c7f25882c502e96157b24102a3a2c1613ee242a2ad02bae0e0525d729782b89081125d4296c2b9488e0248629262b9b8e87245029ee2a1d916f243329d12a02912a241629bc2a86870824c728592a4907b7227a28e5291106ef21fb2772295c0514221d286a297e858e220f287c29ec854c229b273b29b1054a227c270529430c99227b27df283711a822c5271829431157238f28fc29f90cdd23b229cf2bfe138024642a382c15113324442afe2bb18d45237829052b28961c222c2884293f979021832666283a9738215125db2630963c206724e1251194a51fea234f257a92d61e3323f9240591421e8b226724c68f8c1dfd210624a38d381d9b21aa234e8df51c5b215b230a8dd31c40212423e78ccd1c16210423978b751cc02090220c8b351c7820f021c088e11b39208e217388941b1a206d214888841b042027213e88191b981f1421cf84d31a551fe220a0840000301dd51e00805125f42b012d5b1f0f281e2eca2f11248b28e02ffa309123822a4f321e346c25462f26360e38d3282f2c5b338f343527bb29b1302732e825f128732fe63018250829dd2e5c309e24ad286b2eec2fbc221d28de2d3f2fc320b6274d2db92e9f1f4227db2c5c2e201db226b22c182e6d1a2025c82a652ca188da1fea24a826199529228425b5270b99a4243328d129139b1f25e328a72a3b9bc624e7289c2aee959924c228532a31918c24b2281b2a2a8e59248d28f829e48d45245728bf29d290082431286e2960920b237d27f22891911921d925d5270890381e21246825068b7f1f75241d263c8cfc218d25b027bb9006230a2602282895452231261028ca93fb2161262f2867851222cd265528db0e4622ad27092960126a239529812b1e1791256d2cc92d16188525762ccc2d9c955b23e629222ce497c720f526812896943f20f524da263293b01f4324fe25a5918b1ff823b8258a91a51f0f23de249d91461e7d224724cb8faf1d0f221d24c78d521daa21c023358ce01c562164238289a81c142114235d8b701cce20bd22048b471c85207422c38a241c4b201b22ad88f81b1f20c7218088be1b032085215f88ba1be31f57215d88b61bce1f21215b883e1b5f1ff220e884001b1d1fa92089890000b01bf71c0000f524df2bd92cb31f2d270f2d9e2ec3203427c52d502f3422e926a42df02e8922a521d828222a2e1d7b25b72a7f2c1a20fe27c12d562f352206283a2ec22fcb210b28e32d942f5e21cf27772dfb2e85208027102d812efd1e6727c12c2c2e101efd26722cbd2d541de725c72be82c2b1c6224fa29ae2b2d1b08234528ba29f515f4226e2706297697b22306284c29de990c244728882958982a24582898290e97282450288b291a960a243e286e290595f023222857290994ab2301283d29cb93a623c8272a290c9243234727fb28be919122cb26b428ad92b721de25052885902e214f25162718901b21372508270990112132250f27b98df7202125fb26da8ff1200f25f8260691e02033251327b58ffc20fb24da26a18d9920bc252828450f4528b12ef82f4e19bb2801305b31259ecd1ed82644289295b71f0624a725cb90751f01237925e58dfe1e1a231e25878d671ebd22bc24108d821e70227124258df81d09221924b88cc21db721bf238d8c3f1d54214a23ed89fa1cf420e922de8b961cb0209922408b411c81206622ce880e1c532028229488f01b2f20fc216185b81bfe1fb8213b857e1bb51f70211485441b741f3421ec84541b391fd8202388021bfd1eb920c084db1af91e8b208c010000b21a5b1c00806e25382ad92b5c0fce24472ba72ceb1e8f24a62bc32c50207d24c62be22c802099244d2ba72c59202a25622bd42c2820cf25412c712d2f2041267b2cd02d26207626802cd32d7b1f7226742cb52d5f1e5a26522c782dd81c4b260e2c222d161cea25762baf2c031b1625a62a242c081a5924cb29532b2c181624ec28582a76120a2453289d296392e82323286529e994cd2320286a29ba95d22324287129dc94c22324286f29d294912311285b29b1934023db2735295f93dc227827f428f9926422f6269f280d9113227f264928cd90b621fa25fc278490612190256727419018213d25f2260790fc200525bc261191d520c8248926e990df20b2247126b48ffb20b32462261091eb20a5246d260091a22094245e26b6904621b4248c265c91e21dc021c124fb8d0000431652190080661b061fa520858b821e88224c249d8e0f1e70225c24298efa1d18222724ba8cc31dd421dd238e8c971dad21a5236b8c8d1d91217c23458a771d70215f23528c711d54214b234d8c5f1d3a2135233f8c381d0c210c234e8d1e1dd320f922348de01ca020cf22b58b801c5d20c1221e8b151cfb1f19229c88721b7b1f38213488101b2f1fd920fa87091b1e1f9b20f287d51a0f1fa620b787ba1afb1e7820998700008c1c5b1d00801a232629332a6b1b7f234d2ad62bd21d5124302add2bf21e5924832a0f2c3e1f0925f42a5e2c1d1ead255b2ba52cf81cd725782bc92c961bd025812bce2c3d1ade257f2bc72ca219ca25622bb22c8f199825242b862c001a3125ba2a482c281ac324422a062ca6198124dd298a2bd51844246b290a2b3a171e2403298b2aa610e123a628162a578db2235928af29d2938e231b286929b1946923cb2730294796602390270e29149765235d27f428ef9760232d27d628ea973523eb26ac28eb960623b0268c28be96c02272266a28b8955f2227264028ad940d22dd250f28719491217625ad27ea920c21f924f62621918d209f245426a09058206324f625de8e4a205924f825c88e3c206f240226b28e32206f240726a28e10206724fb256c8ee41fef235d250390cc1ddb207922958c3d18091d2d1fb486231b0b2072210888c81d8321c823e08d2d1e9721e7238990ee1db121f1235a90aa1d8c21cd23098f641d602188237b8d3c1d29214223528df71ce720cb220c8dea1cb6207e22ff8cc31c8a203122d78ca41c5820f021b88c761c2d20b521898c331cca1f6321458ce21b631f24213b8a6b1b0c1fdd20dd890d1be21ed02093892d1bd51ead204b8b921acf1eba206c87081a4e1e60201684000085221c250000d52caf30aa31c624053033343a351b29c8313e360837002cf429032ca12c36215c20e5260d28cd983a29b42dfb2ec1a189318b3564360095f331d5360738202d2830893446352b2c712e60327233e929822d81317a3296285a2c7d305a31c625e82c53317f324b24042e6934a135c6211a30f23564377c1ec82c6030a4305290432eae301e31f39ccb310036063741a47d311634883421a79f308531eb3191a71631b831db31bda84131b031ad31e5a84e31b4318931f1a85c31ce319031fea87031ca317e3111a97131bd31553112a92a316b3118311aa9223064303530b4a7c62cca2dc92d47a32e28982c7f2d039c9c2104286b291105eb1f32253b279483f91ff7249426818c3f1fab242c26bb8dd81e5524b225698d681e21246625118d1e1ee9233a25388e2c1ec7231d25468ef21d8023d8240b8ed31d2c239e243c8f781dab226224cb8e451d5d2225248c8e001d0022d723368ea01ca4217923bf8d521c5a214223588e061c1f21fd22e88dae1bec20bd22a38d3c1bb5206b227e8ccc1a7d201822398ceb1a5e20c8214c8cd51a362092213e8c8f1a0c206621138c8f1ada1f2821138c621a911fcd20ee8bef193f1f9320088adb19331f6920468b0c19aa1e5f20b385d71a1b1f6f20ba8700007a241d260000202f04333034872881318e35a6364e2b2034ff37ad385c2999268c276928679d4a25c1248124879d6128a829f22a642404344b3732380c315b3492382f39d731c331a035bb36672f91305f342635392d2f2f0d333434982ac92d1e327433ad27482d4932ac339f24472df4323e34aa21502d043350341a21252d9c31b832641ec42e5d3258331d127e30e83378349ca30d3191331c34b3a7ff308d32de3260a8f5303b326c329ea80531c231b531ada81f31dd31c531c6a851310b32ec3141a94231e031ba31caa95d31ce31d831e8a943318a314831cba9c0301631e03080a9e32d322f4b2fd2a42d28c32b852c8c8b7024b829612bc318772356286c297b154d21ea2671283110e2201526002869047620672533270a8d2220e4248a263390f31fbe244326f090971f8224de25b790dd1e212454254390471eaa23fa24cc8fdf1d2923b6244b8f8c1dc5227a24e48e541d7d2248246a8d1f1d402223245d8ed91c0722e723ed8cbd1cc9218623e38d9b1c86212723b98d6d1c2e21c422808d431cf4207722428e041cae202f22fd8c361b6520f5217b8caf1a2e209621cb8a701a062063218b8a921ac61f3c21158c0e1ba81f1f21628c731b8c1ff820788dab1b2f1fa5201d90a51a891e4c20218caf0e0826ee26790521306c3375343a2758320e362c37582bb5344438e9380b2fe3275628042904230f26a82548258920c329cd2a302c73259d34c5377338ab31fa34f13893396532a6325c36813775301031f034d235ca2d28300134c734a12b572ed0321834be288e2d5732b6336e26ea2cfe3189334d24a82cb931fe321923892c6a318e326121a92dc331c7327a1ccc2f9f326d33d8a0a830f332983393a61331de324b33baa831317932ab32b7a932315c32763204aa3b310532eb315aaa58310632ee317daa5831f531c63117aba331f331c4317bab6631c53187312aab303186314631e2aaa42f6a305f308da79529632cf32c6a9893244129722ba61492236d28dd29b213122329286129fc0fa0229a27fd287d0c232138262528a4042b205e251227c4031a201f25c426b583c61ff1247d2645896c1fb0241b260889ff1e5924aa25e78b5e1e03244425098df11d7123da24b28c6e1dfc228e244b8c2d1d99225124188cec1c48221d24018dbe1cfd21c623d28c991cb4217123b68d7a1c60210923908d551c1c21b2225c8e191cdb205622178dbe1ba2200a22cf8c0b1b5b20b821608c951a15204621178c3e1aa71ff420588aff19831fdc20188a451ab31fd020f588d219771fee20eb89661a7c1fcc203a8700007f1c4a210000d02f8f33833415283c32fd352b37ec2b4534fc37a2385b2f252894285c29202863252f250a25bb26ec29172b742c252a32345c373a384531bf34d73879391932b13264368b3734303a3127351336202e12302234f534142cb72e193341346729b22d5632aa3398261d2de13130337a24b52c8331c1321d22482c293149321c20ac2c1b311732c01c242ebd31da32db9c4f306f32e03299a50c31ba320133b4a85531a132be3292a9713155326932fea9653129322b328daa733115320532ecaa84311a32f73152ab93311932ed3166ab90310832d231b2ab8c31fe31b331adabc430613141310eaad12b7e2d152ea2a00725e529692bf3139d230a29862abb1403236028a9292113ad220c285a298a0f1921b826b2289b0414218d2645289784ac200626bc27478d632080251027f08e5a20002587266c901a20a02410261891881f5124b525ae90ea1e082452254b90481ea1230225628ee71d3623b824008e9a1de9227e24f68e6a1d9e223f24ba8e271d4c220924678efe1cfb21b323548fbc1cab215023f38e861c6721fa22a48e251c10219122168e971ba2200622b78c1c1b5b209a213a8ba91a2d205d21c58a871a262045212989a41a10201c21c08a121ad81ff2202c8a6a1a231f8a20858ab91ead1bcf1b988b1229d12a362b4b1c8f315f356c361f2aae3384376338032c6428db28aa29532211247624b6247421032a752bb82c59258333e93600384c306434ad385b3965314f325d3686370d30013117350436b92d133039341135b52b072f523363340f29d62d4b328e33c425412dac31f8326b237d2c213149325321222cca30db31ef1f1b2cac30c6312c1cc52cf130d9317796582fcc314732e1a3ea309232e6324da878319832a632b7a99d3189329032d1aaa431773278327cabb63164324c32e7abc63162323c3228acdf315f322d3265ace1315332273291acf5314f32f431a0ac8d31e9319e314faca92d272f712feaa5df25522ac02ba494af240729822a3b88e9239a280b2a268723234d28af29d68c45228d27d928408c702172262628248ef9200826bf27dd8fba2071250327798f65203425ae2678902220e62466262291ea1f9c24f925eb90921f35247e25b490f91ec52325251e91851e5423db24c9900c1efd22a6247090a81dac2270242790271d56223a24918fbe1c05220824e48d741cc321be23888d261c75216c23278dd21b1d210623f38b6b1bc02043228a8b681b9b20cb21878b471b66208a21668bcd1a2d2049216089a71a16201a21c38a621ae61f3021ee8b101be51f3e219589271f7b1ce61c3b832429e82a3f2b8c1b29311a3524361929fe32203731383b2d0829af29772ac2245d22dc241025a91d1f2a3f2c5c2ddd27e33279369a37d03013347b3831397731fb316636b437842fb730e834bc35202dfc2f1734e434e02aae2e17334934cf28ab2d4332a5339026fc2c9d31e432a524442cfe3024320622f12b72307131ba1eb12b23301b31151a542b25300b319f8e602dae304c31e49f63301b3276322fa7ae31c032c73293aae731bc32b332d5abf731c232b9324bac0032b632ad32a9ac2232c132a732efac4032c832a53235ad5032ca32a23270ad5a32c5328632a6ad7c3290324732f3adf32f653050309faac826982abf2bbe9951240329762ada0dca23bf28362a0a07992391280c2add8633220b285529008f39223727aa28eb90fd21a026392816925a21e225e52771917d206725062790901120122595262290cb1fd6246426ec8f8e1f96241626ae8f311f5224c5257890d01e082457253b90401e7423fa24c48fc41df222a8242a8f371d7d2258244d8dcc1c27221124e08c921ccd21ad23ae8d551c71214823628d201c2821dd22318c871bc8208122a78b441b7e20f021be89bc1a29204b2153893e1ae81f14210d87671add1ff2203b87131a9f1f0821dc86c81ab41feb209884461fba1d201d4983c928eb2a0a2b071b713084348535452645329536c437422b2829312a102b4b24e020dd242d25da1dbc29562c792db1274e323f3669375130813351380f39ed3092312f365a37af2e48308e345c35a72c2f2fbf33ad34642a442ecf32273483285f2d0b325b333826af2c593199325d241b2cd030fb31cc21b52b78308131871e932b2d3014314718d72a982fa630a394002ca92f8d30c79e962efb307a3165a552318032ad3229aa1432f532e83234ac2632f032d932c6ac4332fb32dc320aad5d32fb32d0327bad80320833c832c8ad9a320e33cc320faeac320933a43250aec8320a3388329bae4931ae31753100ada328f22b892c0fa0cd2415298e2a9793d923cc283f2a178781238c28092aef91b12223285f294a9119224d27af2833923722e7267128b9930a2271263428819336210826bc27a7937c208d252e27969242202825b22640920420b5241b26ce928c1f6124b2256592191f03244825d092af1e5223e024a991491ed42292249d90bd1d78225f24218ffc1c13221c24118d971cd221dc23aa8c221c78216623338cd21b1b21cd22f38b6a1bbc204022898b291b8720e521478bc51a5020a321e28a9d1a32207021b98aac1a12204021c88a141aaa1f1521ce88201a181f7e203a8acb1e1c1d7b1c12034328422a7a2a421a2f30743478356f25d7318836c737072d34282829f4291d2660213a24df245c1f2429332ba42c5026ef3116362c371f2fdc322638d83836301531e63519373e2e05307f346535422cbd2e91339e346c29d12d7532e3331027222dca31093313258d2c323155327423f52bad30ba312b213c2b3e303a31f21eb92ad82fd330b21d332a162f6630b41b172ad52e39302014f82b762f5b30c09e0d305c319c3176a81e32da32bc3294ac88322e33fb3271ad9f323b331033e4adb5323d33073358aee7325f331f33b9ae0f3375332c3346af1733723309334faf47337533ef32e9af7832a3322e3208af3e2ac52c782deea3a6246429b22a5a93ca23b528242a478d53239b28152a239039231528ef28b691d5225d27c228679121222327a7283b92532172264628699111210c26f4272691ce20b6256127e29071205c25df2685911c20fd2471261b919f1fad241826bc90101f5c24b7256390a21e13246525df905d1ea8232025ac90e41d3723d52453908e1dd322942414902e1d5b225c249b8fe51cff211c24158e941c9721bb23a78c2e1c222103239c8a721b8d200a22e389611a132081210b892f1af41f7c21e388861ae31f38210d8ccc19621f53219588121a0a1ffd208b8bc61e0f1dc41c0f830628052a5b2ad11acc2f8c349b35442759316036a13749298427cc289d29e11c1021e223b724dc14b028bd2a642c171e8e31e735fd36c92c55320438b9386b2f9b30a335d236662da82f59342e35ad2bb52e81339b34d428b22d6c32f233f325202daa31ec32d0237d2c013137325321ea2b84309a31cf1d4d2b2d301f316c1b9e2aa22fbb303b19f329122f7630b418b6297a2e093084185d29152e8f2f0f961b2d7e2f34300ca534313632533230accf32763336333fae113392334c33e2ae2033a233563358af5433bf336c33c2af7f33e73391332eb0a133003493335db0c63312349b338eb0a933d9335833b4b0352c942de52d7ca7902457299e2aa3948a23a3280e2a42908a239328ef291c8d00233b286529e88f5922cd2733294d8c122271270529db8e51218f2652283490ca2030260628de90b820f425b527dd91a4206c252c27d0926e20f024be2681933020a0246b260594182066242526ef92a11f3d24e7257692b71eec236925b091f11d4923ce245d90681dad226e24f08f511d3c222924ce8f441dfc210d24bb8f7c1dba21bc23a590e01c4c21c922288f0e1cc42065220a8daa1a82206b22c68a341bae20ad22b289381b8b205f22568b201a142070213a8ad91a03204c21bc87061f5a1d071d2c83f7270d2a792abf1a462f733484353027e23028366237112c1427b8289229e523cc20d123d724141d7428a42a552cec231131a835ba36392dad3196377c387e2e3a3060358f36d52c132f51342d357e2b062e423380345b29362d3c32c4339f26cb2c8231c9323a227e2cdf30fa31951d0a2c5a305131631ac42af52ff8305919172a522f9e30d1189629ce2e48306b186a29742e0b301d166729222e9b2fe28cdf298c2db42ea39d072e46309e30a9a7663222332e33dfad7533ea338c33e5af9c33fc339f3323b0c9330b34ab3374b0f7331634c733c7b00c342534d43316b125343434d63353b125341b34b7338fb10b2e702fa92f0faad824a729012b0596f4238328552ad795f3239228372a0a9497237f28312ab79441234228fa298294b4229d27ff282a94ea212227c12857945d2190266728e0931b21e825b9277f93b4208a253027e89253203225d2265992e11fcc245926c991311f6f24d6254891ce1e2d247525ff90691edc232025b590ef1d5323cf245f8f951def229324ef8e1d1d81224c245a8eba1c1f220b24df8d791cba2195238c8c101c3621d622218c901bc4202022fb89ed1a55209f217a895d1a1a206f213087521afd1f2e2123876e1a991f22217481bd1a5d1f1721d98a7522461e0220d685cd28d32b2f2cf7196f2f8234aa35d4247530c435f5366929fd279629a32ae122cb1f38242825ee1a6228182ba52cd121b53058357236932b613166376c38d92d44305a358436652c122ffe33df34e4298f2dca3237342928bd2ce73154334a263e2c3c316e32ac24b12bad30d2314c22e02a40305e311420992adf2ff730191c4c2a242f70304414a3297a2e0a30180d4129192ebd2fbf0ccb28ad2d2b2f550c6f28562da42e020c2929542d732e5f9cb52fed302331c4a95d33f733a83301b002342834e633cfb018343634093407b12d34443403345db13d3450341734afb162347334273440b27e347e342434a9b2fb2f78309930e7ac76243d29ac2a8d9641240e299f2aba927324ec28572a8795d5236a28b529dd9445231e28702984945722c1272c29a794c3211527d4283b947121b5269828fd93282149263f2892939720ac258d27bd924e204d2517274b9320201a25d326fd92e71fca245726b292761f6c24ea255292c91e0a245e25bf91ce1d3023d8244390531da3227924d18f031d332232245c8f0a1df221f623668fec1ccf21b3233a8fa31c84213e23c38d3f1c2a21bc22518cd11bb5201e22f28b2d1b7a20cf21ac89c71a3a207721e48a3a1ae81f1b21ec88bc1a0b1fb520d88a8822b61e4e20608fa228c62b292cc119842e76349d35562511309935c636942777278b29b32af51e4b1e2c245125a4170428062b8b2ca6203a3022352b360a2b09312e375038792d842f35355936312ce92db433bf34ed29352daf3223343128b52cd7313a332f25302c29316432dc22a52b9530ad318820c22a1e301631f61c3a2a702fa530ec18d729c92e3e30ea138129472ed12ff98c0229d72d7e2fc992e828782df32ea692a3282d2db52e5597d627cb2c7d2e3296ef283d2ddc2eda9df13001322332f4ac2f347234393460b160347d343a34deb172347b34323437b2863494344334b5b2a134a2344a3420b3ca34b3345d34c6b39c30d430e63071aeb9246e29d12aef969f230229992a4e90a223c0284a2a4f9055238628e129cc9108233b2872292693f122f727182950942a225727dc2886945021aa266d28cd931d2126260c285594d720be256c271a9483206825ff26a59313200f259726e7926b1fa92416264992c81e5524b025fa90481e0b2452259c90dc1d7c23ef244d90a71d0123a32426907a1d9e225e24a490301d3a2227249e8ff31cd521e123448f851c68214f239d8d601c342101236f8d1f1cec2078221f8dd91b99202222fa8b861b5820b521a68b911ae11f4b21d28cdb1aba1fa321f88a3f1a2d12581e0e87c02449285d294b081e2e69349635aa24892f7635cf360527e227c929e52aca1ffc1d6a2438254f18fc277f2bea2c4c21f82ffa3405368a2b8f30e9363938d42c192ff7341a36512bcc2da333b3345229f12c8e321434ac27412c9531f4326825892be93014327223f72a6b307731b421602a0d300d318f1fe229592fa830fc1c58298c2e2630a41af928fa2da12fdd17d528c62d682f5e0ca828862d102f50928d28452da92e32976728e52c3a2e7899e527882cd62de798df28c82ce22d549edb314632243231afa034bf346b3498b2c034c73467344fb3d234d3347434b1b3f534ee3488342ab42e352d35cc34ddb41e30b330ac30a3adbc248e29f42a03982224ca28822a119677239528472aa3945f237328072a699538234328b7291d960b231a287929f795b922bb2733297496c6210e27cb288b95382186266d280395d120e725e127a094982073253b27c89333200d25ad261d939e1f9124fc2574922e1f362488251592df1ede232a25d2915f1e6823d7246691091ee5228a241d917d1d6f224a24a690f81c06220a244c8f9d1ca9219923bb8d3a1c312103234c8cf11bcf208a22098cba1b7520f321db8b5d1b4a20a121d289241b20206721a589bb1ae41f21219a87001b271fae208989131bfb148e1ecb849c243f2857293f0e992d4b347c353725092f5335a836de285a27bd29e02a4b21e61d6c2460257f157527312bad2c871e1e2fd434cd35882a2f30b8361b386e2c8c2ec034df35bf2a492d31337a34da28792c1f32c033f226e02b4931a432c824382bc630f631e921b92a55306031f91ff329ab2fc4300a1da729182f7230bf197729b52e3530f08c4429232eab2f2a98fb28a62d152f309aa428362d9d2ed09a6228d72c282e6f9aec277b2cb42dd1992c27442c772d4a977626e52b202d4c9355284e2c5b2d239d03326f32443233b00c35e934793450b43c3505359b34b1b488355635dc341db51d350835be3429b5522daa2e092f23ab1e24de284b2a6b98b3240729662a83987a239a28052aa5947b237828d0297e951e23402899293a95af220e286429a9954c22c42736295595c7215727fd28e5947421cb26a4289e94c720fc25eb270c9472209e254f27449457205c2503272b941520f3248026d6938b1f7b24f4253e93271f1c247b25de92aa1e9b2314256692161e0523b1242891911d7a225524b790461d0822fd237890d01c752153231490a21c0021d222d98f661cbb206e22748f2b1c79200a221f8ef11b4020aa21ef8c5b1b0a205621668d021bb21f40215a8c361b801f3b211288fb1a3219541dbb841e24092829297187692dfe33213532218d2e2b3572361b262e27d3290d2b491eee1dc1240b2606113727552bc52c471cb82eb0349d355b2a892f41369b376a2c9f2d593465351c2ab42cc53239347328202cc03140332c269a2bff3033328323f22a8230a231e720672a25302c31df1ed229682fa630461c7a29da2e5530911928296a2e0e30d315cd28d12d652f82126a285f2dd52efa0b1e28042d5f2e710ba627b22cf52d2f1120275c2c8f2dd410c1261a2c472d1a0a5d26d32b0b2d509003267c2beb2cc1946a27932b912c1e9b1730e030e130f2add534d13459349bb481357035ef34f2b5fa330a3450339ab3ce28bd2b502ca6a2e7225628072a4a94a3240f298a2acf968e239e285d2aae93352370280f2a4a9506234228ca292895e7221f287b29d995af22ed2743296b962d226b27f728ee956521e9269328ca95f320322625284f95c120aa258a271a9584204325e626d8942420c7245326e994661f5824c9251a93bf1ee82343257a92321e4d23d7243f91c91db42278243f904d1d30223024968eee1cd021f223208ea11c9b21a623c08d861c50212f239f8d851c1121ce22a38e6f1cc8205822828e681ca4200f22788e411c8520b7213f8eaa1b3e208b210f8a6e1b09206b219d8c00001e27c0270000be2976304c31221bf02c26346035bd20a92e1b351e36b4241d28a32a0c2ce11c8d1c2925f526e210d926cf2b2a2d381d5d2e5a343e359528c12ed035fb36882bea2c183416357b29342c84321a341828bc2b93311433ca25272bd4300932aa228e2a513069318d1d292ade2fec30f516bc292c2f89302e0d54299f2e2e30d08ce528132eac2fa2928228912d1e2f1c924128422db42ec4911528e02c322e8891d1278a2ccc2d4c914427332c6e2dec90dd26022c2d2da7906326a02bec2c5490f925612bc02c0c90bd25202ba22c7b92a525e22a692cbd95ce28c12b962c8ba4122b2d2dc02d8aa91b29182c952cafa483240b297d2ad798a3249529222b30887323df28592a9293af23c9286f2a13926a23b728432a89931a239028172a3893b5225d28d629d1925e2227288c29ad94eb21cc273e29589497213c27e228bc9435216e2661280095ae20b32588277e941d200c25a726e693801fab242f263393401f5924cb25f692fa1e002451257c93b11e8123fa242e93841ef6229624fe92111e762242248292881d0722da234f91e11c8e2145232290641c2221a222728e3a1cba202422358e0b1c6120bb21f08dbc1b33208521ae8dac1b262064215d8faa1b06207221ca8bae1bf11f5121128a000000002c1800800028ff2e3f30321da22c5034623594243c2e46358036cf25bc2456284f29381b9b1f8f232a258417b1254a29e72aa01d262ea13490357829c52e3c36a437282c212d4c346135282a372c7032ff335828142b3f31ac324c25752a74309431a721d529f42f0231931f5729622fab30bb1d1729e12e5730501ce728702e1e30fc18af28162ece2f3b0c9e289a2d292f429258280a2d7d2ee894dc27ab2cf62d70946b27712cc02d079106273c2c8b2dc2909e26052c2a2dfb895326ac2bdf2cb7891d26712bbf2ce8920f265d2bb22c879764264f2ba22cb1987f25982a522c969507247029682b01957423d028652aa194ab24f528732acd959b243f29bd2a34918d23c928412ad2864a23c428532a96861923ba283a2acf8c0a23ac28312ac58ce0228e281e2a6f91ae226a28d829ca921a22162850297b9467212727c4283095bb204d264a281395ac20e325ef278a9577205a253a274b951620b8247826d894f51e2524b9257793561e74231e251592e71def22bf240091b41daa22702430905f1d61222e24e38f371d1322e223a88fdd1c9d216923248f6a1c2021cf227c8d3e1ccc207522508c111c87201922228cc81b4c20d121278aa41b1f204a210a8ad11aa21f2d213c8c381b491fd920568b0000cd1a171d0080a3255b2d2c2e521bb62c2b345435ec24ca2d0635483611259e25f028122afb167f1d1f246725350a8426462a182c411af82d73346a35f928822e1c368c37fe2b122d53345e35a829112c0432ba33c626ac2ad13042326d24f72918302f313b227f29652fb230851e2629f32e6b308f1bf428ae2e4130461bb428702e1e30e81a7528172ec62f8a1945288c2d172f4e1907282c2d982e18189827cf2c1f2eb8170e27672ca62d2c17a726272c632dc3165926002c332d05152c26bf2b162de114fd25752bec2c6989af251d2ba92cc7957125af2a5a2cd799db24062af12bc2996824b129722b799526244629f62a7f0704240229982a42873a23dd28492ae60c4723cd28562aee0c6823c6285a2a050d4b23bd28662af10c8523bf286c2acb866e23b228612a22977a239c28412a4799fd226d28e3298a98d52112283d299397ea20b52659286296b320c625af279395442045250f270f95d61fbf246a2634943c1f4324aa25c393c51eb02313258092691e1523bc242792fe1d9a226f24c191871de821c6234e91fd1c3421e0223a90a81ce2209922e38fa81cc3205522e38f8d1c9f202c22b68f4a1c7f200122448f241c6f20d421048f0f1c5a20ac21e08e0a1b2d20af21f68d4d1bfd1f3b216c8b00002a1e9c1f0000af2801301a316c21142c4433d7347e24b42d05352836ab24bb2513291f2a1f17ad1c27247d254809b525d12a752cc51aea2d643453354329462ee7355137082c842cf633f5348c29d42a5b31d8327526b0292c306e318c235b29212f87301520ff28b72e43303b1ca9286e2e1b30bd18a828642e0f3050124229c32e5730c00cf028752e2c30cf178428cf2d722fa11aac27242d9e2e801ab426812cf62d6f1a7126f92b8b2d751943269d2b302d4e19df25a52bf52cf918af26032c272de8189126602ca62dad16c026d62c482e93901d26172c2d2d8f9a23251429cb2a179aed235d28e929079464233f28ad29028d7a233628f329c1863f234728c629e90cfb224128a629e20f32237228dc2910109523f9287c2a230d162468290d2b6287f9237d292a2b4e9239233929cd2a4d955f229728032a1e96a421ac2705290d96ed20522635286696ba20bf25ba2724969d203525f22683965d207724c2252d957d1ff32328253093341e2123d42441918f1d81227c241590361d10222824798e251dcb21c323648ee71c78214523178e931c2021cb22af8d391cb4202c223f8dec1b4b20c721078c871b2820c721a78b391b1220ae21578b651bea1f7921988ccb1a701f6a218981351b651f2721b38900008118031900806f274f2ee72fed1e272a09315d32fe1fe02d7e35d336f91dbb2e3136c037529d523008381b395ea17530333851390a1afd2e5436fa37b925cf2c1d342f35d2284a2bd03155332b28d229423067310325c128e62e97303c218328102ea72f551c35287d2df92ec0146e28222ddb2e8199e127272d502f73949f28f72e31304392a9274c2d0b2f3191ff24c72acf2ce6938e24382a192cb09629249d29512b0c97f924de298e2bc69885246f291b2ba89735243929e32a3a9514242f29bf2a9b90b5230529b12af7867f23b5281a2ac686a1226028ca29fd85032203285429ca8e3c220c284329ee907722cf2737294d8fa722e0273e29828c8722e4272d296c0c8c22f7271a292d11ec223a28692979112c242129ae2aa70da824242a342c35088624882a3f2c218e0c24122abd2bf195ae221a29842a5698c621cc271529ba981f210626f827cf97bd2002258226b096ce1f4924ca251295f61ebc23632521946a1efb22e92428922c1e42224524ed919a1dd621da23bf90591d942198238890311d5f21682366901d1d4121342355903f1d0d21e9227290b91cb4206522ef8e3e1c6520d221458d001c2d207921f88cbe1b12205821cf8cad1bfb1f1221a38d021b881f0c215a8ce61a381fe520038b00000000041600004f24d62a662c921a04282b2f79304f1c132a74311933a120942b2e33a83435226d2daf34de3523240a2f4236c837c4255d2ca133c9344c25e029dc30683265245329942ff630f823c228bb2e2a30c7211328fe2d682f072082275e2db42eb91d0027d52c372eb81a9d26862ce22d3a150226132c2c2d6e09e822eb280d2a76914c201925b7261196c3223d2626284d9a682405288e291a9de924ac28442a059c6d248628eb29409982247328d429d6985d2443288c2930983024cf270c290598a522d8268128a195ac203725fd26ea93af1f4d248525a491dd2005255c2724935f21f8256b28e393ee223e263528df95ea2272264528a3966c2264261d28719553229c263c28258f502204277e28210f97229a280e2a5416a5243a2ba72cfc181126d02c2e2e1c106425272c562d659a6b22e228902a8898bd2028260d289e953320d8248e26fb94f31f4424da25a293401fe1238625f692c71e1623d42482921d1e752259242e919e1dfd211e2420903e1d9f21bb23838ed81c4b215c23058e991c05210e23b68d721cbf20b822868d511c792068225d8d2f1c3c200c22418cf31b1420ba210a8ca71bfa1f8f21c78b801bd61f6921ee895e1bb61f3221d389c91a5c1f04215d89df1a211fb320fc8a00001f1c091d00005625292c282dac1c0227ba2d652fb81f1f28442f94303c2193281630203154222425e02c2b2e671f6e23052a252cee1c0528f62db42f1b217828ee2e75302c211f28622e24304e20e827cd2d782fec1ea227352da72e871c8027d02c272e821904277a2cc02d8c152d26082c222de2140525f02a682c3c16ff235229f12a1014e5221b28762973910f23db272329959851230d2848292a99772311285629b199882303284029e4988e23e92723290e989e23ba270d29509763238a27f528429628233927ba2841958e2299267228d094d921202619284b94392163252a27ab93382151251627aa933d2152252e2782924b215e253b2793920c213725162745920f21222534276d9301212925022737926e21de24e726bf92da2184295e2af514542a2a3180322617ac26fa2c3c2e0da0e31f662487269198ec1f9323a1259b93ca1e0f231525c091f11efe220025e1917e1ec922be24c490871e80227924cb90e31d06221f24508faa1dae21b623098f3e1d49213823838eff1ce920ca22358e9f1ca4207822be8d581c79204d22658d1d1c54201a222e8ce71b2b20f021048ca01b0920b621c08b701bc51f6e218f8b311b7e1f4021af89401b391fde20bb89ed1a0c1fc320168dd91ae61e84208c810000731a151b0000de24f22a432c251758255e2c882dfb1c9f25d82c182e241fb925012d482e48209b25be2c032ec11f0826472c742d4d1e7026832ccd2da21d9b26a92c092e691da226a72c022e0e1d8b26932cd32dc21b6926612c892d271a4b261c2c332dd1170926902bc42cc5146b25e32a4c2c4914b2243e2ac72b4e113e247b29eb2aaa07ff23c4281a2a1094be23342877296f9758230f284129e1971b23eb272e29d2960623bc271f29be96ec227727f928a596aa222a27cb28a5955922ce2685286095e5216c263e28fe9499210f26ed271c944d21b0256f27c8930921602503274192d8202725c2260592c720fe24a626ef91cb20de248e26f4910421da2496265d930c21c82488266993de20c32479262593e620b724732631933b2186247326ae93ea1b721e0921cf8d5a12b819f41caa84591d11216622da8f851e7c225a240d90c61d412242242c8fd61d21222424408fbd1de121f623218fae1db021af230e8fa81d95218623078f9d1d70216523f98e8a1d57215023e28e621d36213823b08e301d0c2118239e8f0d1ddb2002236a8fe21cbe20fa222b8f831c8020f4229b8df11b10204622ef8c201b821f4e213e8bca1a3e1fea20e78ad91a401fb220f68a971a371fc0207187731a061f7f2049870000b91c901d008037249f29e62aaa128624f22a742c5d194f25342bbb2c9816e724bf2be22c4a1c3825092c162d911c96250e2c1e2d421cb825e62b042dc81ac025be2bec2cdf18b625992bd32c1817a125662bb12cb9157225222b822c4e141e25bb2a462c0c14c524522a092cd9148824f229922b2a1343248429122bd01014241f29972a5f87c123bb28242ae2937a236228b0297d95342315285c29ea960423ae271729879701235e27f02827980e231827c22895981323df26a0289898fe22a3267d288a98b922632659285e985d221e2631288c97dc21b925e427499663214a253b272c95fc20f824ba26399482209e2448269e924120762407264991472071240d26509150207c2420265c914e2088242426599142207e2410264a9121207224ee2521910e1f0923b0242e915d1bf71ecc20938ced180a1e1c201f8a981cf5209222b58dd31dbe21052447901f1ea621e223e091091eb921e023cb91c91d9421be238e917d1d6c217c23a6905d1d26212d238b90201dda20ac22868f121da1206122728fe51c74201522308fc81c4c20ce210d90831c2b20a521a08e331ccb1f57212a8ec91b5a1f0e21d68c6e1b071fcd209d8cf31ac71eb320108bf01ac61e94204f8cae1ac71eaf20ca8ae419651e5d20a88800009922d2240000462dc9308c318d1e4230013518361624823253374938832512222425fe25d41500000000000000800000690c551900806a28c22c4d2d2da4ac31d535d836b01b84320c371938822cd82f0434b0346d294d2d8f318a327026ba2cb4309e3167242b2c1b30e230f120322d243243331b1c6e30fb354937019d9a2e2c32b832d9a03330fe31383281a42d32603685375ca80d31d5324f33b5a8c4308a31cb313fa90631be31ea3188a9c6308a317d31fda8a43059314a31d9a8df305d31033117a9f0307b31203170a96631a7316a31dcaa6a3169311d31ccabe830f130943011abc32e4b2f392f7da83929c22bc62c92a00323a228dd295b94d32059253f27738d481e87242126628efd1d86241b26718f841e3a249725c9905c1e0f245325ab90f41dd1232b255f90f61daf230b250d91ce1d6123c224eb90a41d0d238424c7903d1d882243247090031d33220424d090d11cda219223a090731c82213a234590241c3821ff22f38fae1bfc20c8225f8f5d1bc8208c22128ff61a96204822af8e741a63200022778d791a4720bd217c8d681a222085216d8d661aee1f46216b8d7d1ab31f12217f8d591a7b1fc620a98c161a2e1f8720788cf9191a1f5b200f8d0b19991e4b202089b61ac31e3320af8d00005e23dc2400006e2f2e333c349d202d323f366d3789242c342938d338b62011218d21a322ba9700000000000000800000000000000000cb28b42a242c0a1b7334ea378538692fb134db38bc395d311f310935f035472d8a2f80336234db29b72de43113339e26172dcf3104339c22672d4d32b033451cf22d283358345f11df2ef4322f346f9d6b30a6334e343ea412315234d33427a82431df3344345fa9ec308b32c7326ba907317332a632d2a90531e631fc31d0a9f53019325f32bda934313532313270a93431e431bd318ea87e313e320d324aab31316e3119317aab11313631e630deab2c30b4309530c6a9022b2d2d962d28a03025812a072c4615ed24652885297308db2100275f28f00b1121fb25bd27b98d6a2061251a277c914d20e724482649931120a6242326cf93611f6024bc251593681ef92320252692fa1d5f23cb24bd919d1d02239b246491581da7226c2487900e1d56223e244890c91c152215240e90941ce221d123c28f8b1ca4216b23b28f7f1c72211c239e8f5a1c2b21c7225f8f131cec208722d38fa81bab2051227c8ec91a6720fa21bf8d7c1a17207621c38c2f1ae91f42218a8c3c1a8c1f0a21948c5b1a5a1fda20aa8ca01a511fbc20dd8c911af91e9220908d1b1a701e4e202c8d0000ad15fe20000057300c34b9346920f532ac36df371b25d534743812395e2b77222b234e24641a000000000000008000000000000000008329a32b802cfe25df342138b2389c305d3545390c3ad531fb31c735bc362a2e2a302434d734b42a672eaa3203346927912d3a327a338f241c2d153284337b21ec2c043269331d1ea62d093224331a91cc2fd832d8339ba2b03091333534ada708316333133442a92d31e232213349aa1e314d32813236aa2d318e32be3249aa23314532523287aa393128321e32eeaa2931f631de318eaa74311c32e0318bac5931c131803174ac3f31b131733185acbc3041313431e3abc52c732ed72eb7a4a625232a4e2ba88f07258328ac29d08eba232f2834295d90e522b327dc28489478215a262c28539083207425fc26228f2f202025be264190012007259326f990611fb02418269590d81e53249e250691541e02243f25a590ca1d5b23d3244090531de7228824d18f121d87224524728fe61c392212242690b91ce921ad230090901c9b214f23bb8f691c4821e922798f471c092192221b90161cca203a22ec8ec41b9320ee21948e1d1b3d209121068e8c1af71f27218c8d321a8f1fe0208c8c091a711fcb206e8c2b1a961fbb20aa8b9719421fcf20f28a3c1a501fb120bf8b0000c61be821000059301634b4346721bb328736b837b3255a342538bf38e122c921ed221724b21a000000000000000000000000000000007029ab2b812c9a228e34eb378138b230ff34f838bd396e313632f535e836e02d4330493407359e2ad62e3e335d34ea27b32d4432933358242f2de03127339021b72c8e31e432dc1db42c5d3177324010f62daf319932689f1b309f326d3342a6e7301233653366a94431ee323533b1aa4a318332ab3251ab5231293230325cab64310b321032c3ab7131ff31eb3112ac7a310432da3168ac8031fe31cf3195ac8231f931c831beac8331f931b031e7ac5131bf317c31e1ac572ec32ff82f91a88a26272b4c2c2b9558243029782ae810602366289729ff0ca02214284829fc050322e0265f28138c6c21a6264e2849909120f825af27a49041206025f0263f924a20f7246d2644930f208c24e425e092481f382481252b92811eda231d258291ff1d6b23d1241491b71d12239424d790761dd8226424a0903a1d8c2227246d90ed1c3522ef232c90b21ce521902382907e1c982142235090481c4821de221c90f61be7207522a48f7b1b8620eb21568e041b45207c21268da41a21205321e08c7d1a20204121088c911a10202521148c261ad91f0621838c7b1a2e1f8d20078c0000e5202a220080b32eab3297338a182232523672378124c433b6376f3863200f21f922f7232411000000000000000000000000000000002c29c22b7f2c742411346b374038b12f8a34b1388039ae30c031cb35c836702d0e303b34f734d729002f4d336b34eb26af2d46329b330324212db731f73281217d2c2a314832971e2d2cdd30e931b7189f2cf230e5314f9b8f2eaf315a3242a49b308e32e33212a94c31d2322e3307ab6f31a532b932d3ab7d3182329c3243ac9f316c32583286acb0314f323632e6acbc314c3222321aadcc31483215327cadd0313e3206327fadd3314732f831acadd0314532f131d4ad173093307b3046ab1728352b3f2cc69d9525ff285f2aba9844249e28e229569419234928a32969947522a527d12803947921a52633280494f320032605284493c0205025132706944d202a25b32621941120ef246b26cf93e11f8d24e1259093541f202457250993cf1ea82305254e93691e4023c424e192041eed2295247492a11d98225d240a921c1d3f222824e890b91cf721f6230090551cb221b0235c8e091c66215123ed8dab1b1021fb22a18d6b1bbe205922728d531b8920bc218d8c071b46205f21298d9c1a18202c211b8ca21a11201421df8c2f1ad11f29218a8ce31add1f3121728900005920a0210080652e24320833809ecf31f13506378f1e2a335d374938a7282e212d248d24061c000000000000000000001618801500003129302cc42cf0255033ec36003863302134603836399b308531a335a636112dc32f1a34e034ee288a2e0933453418268f2d1f327433d923022d9e31da32f021562cff3028325e1edf2b7e3085317218f12b4c30393162959b2c93305931f1a0682f8b31033252a720318d32d13217ab9631a932e13256acbb31aa32a632c6acd531a532943230adf631a0328632a3ad0d32a6328632e5ad2432a6327b3228ae25329b326b3282ae3132a13258328eae5432903234320faf01315d31223171adf1280e2cdb2c9ba084242929942a1488d223af28112a4d8d9b238428e5294b901022022866292a923b223127a6289394db2190264228f6942e21f125eb27f99463205425f22636942c2007257f2611930b20db245126d992bf1f97240a269092141f3a24a325ff91901eb5232b258f91f21d1d23ce240991931db7228724b9901a1d5a2243245290c11c1022042407908e1cbe21a723b78f4a1c6c214223448f3c1c2321db22388ebb1bcf209522ad8d461b7e20ea21858cdf1a28204021458c5f1af81f2121ea8b7c1af31f0421978a001a941f2121748bc21abc1f112158890000ce20a6210080632dbc31b9324d17903016350a36a3207432f3361038ed264e21802400258b19000000000000000000004618e7130000e828492cb82c0e2590327e368837f32e76331d38e838b02feb3041353a36602cf22ecf33a9349c28372ec43227342426432de93131330324b22c57318d320a21242cd830fc31251dbb2b7c307d315e18672b1f30073104951c2bc32faf30389d502d76301531a6a486300b325e3242aac931da32ed32d2acfe31d732de3254ad0432d332c432b1ad2a32d932b3322eae4a32e532b3327bae6a32ed32ae32f9ae7c32eb329d323baf8a32ee328c327aafa132ec327c32f4afe7312832ca3140af492aca2c442de1a409254929a92af9999723b528092ab7931c237728d3293a93d0221128262900953a223327962846952e22d5266628ef95db21602620289f950921e225972767956d2080252227c0943a201b259f268994de1fa724fe2538946e1f502498256894e61eeb232b251794711e2123bd24a493051ea82269247592911d482230245891d41ce721eb231790641ca7218823728e0c1c61213423f18db11b02219322a58d4f1b9920fb215e8df81a6720bc211e8db61a3c208521ed8c9f1a212055211d8cad1a08202021268cde198f1fff204a8b2e1a0b1f8b20488a0000f920f52100803f2dd531cb32bd9051301a351a36e01ce831c236fe372b2811202d230424c61a0000000000000000000000000000000085288e2b5e2ce41e60327a368437ac2df1320638d638f52ea23026352236fb2b952eb03399342e28ba2d843201345625e82ca231e632ed22762c24314532c9200d2cb630bf31f31d662b4e304731d919bd2adb2fd43091143e2a212f62303b94072b1b2f4430bf9ec52d883008315aa621314732613246ac3932e432c5323dae5c320e33e7328eae6e320e33e132fdae95321d33e43287afc6323a33ea32f0afe9324633ea3225b0f0324c33f0325cb011334a33c732a4b0af32d83266327bb0da2b5b2dae2d34a7c0249f29e22a06988423ab28142aa49343237a28d3298394ee221e28352916958a227127dd28cd94f321022796280a954e21652645287e94e8200126e8272894ac20b0255227ea9372204825c02644941420de244926d493761f9824f9252a93ed1e4b249c25a692911e062451250c93491e92230f25be92da1d2923ca2447927b1db8228a24e1910f1d4a225624db90bf1ce1210c240590301c65218d23268e531baa2095228d8ce41a4220ae21488c601a02205821ec8b6f1ae21f4f21fe8b7a1acf1f1321068ce019571f2a21a5880c1a011fdb20258a0000522133220080f72cd731d0327c90313033354036a11e59317336ab372225771f55222b236d14000000000000000000000000000000004428382b302c3720ef3158366d37722d6232d337bb38662e4530f634f2355b2b582e91338e3458278f2d80320c34d923d02c8031d232111f6f2cf2302732031b0f2c9530a131560f292b31302931780e6a2a992fad30cc0dc029f62e6c30320da1297d2eeb2f168d4b2a9a2e0230c19ed32ec5302a311ba9d931da32e13207aeb03259331a3375afe1326733263308b0fd327f3333334bb02f339c33433383b04833b3334833adb05f33ba333e33f1b09033ae33223364b1a2337933ea32a8b1c02c1e2e6b2e2aa9a2243c29712af9980e24ac281a2af49564237a28bd299794e0223128442945949722e7272a29189412225527f52875944e2177264028ca93da20302608281c94be20e325b2278d94ab204e25f32602957320da2492264795362097244f26fe940d206b241e26ce94631f3624e02561946e1eb5233e25e692c21dfa22912487916a1d77224d243391821d2b221a24e9918e1df121ff23f691a01dad2198230992d41c1c219922a3901a1cb1202e22f38efe198d20b322668cce1abf20fb223a8c791b9b207c22a48c8d1a3720ce21cf8c151b092093210088000001211e220080cd2ca6319932e19c3b3034355236bc99f730403684370c218d1e14220023c51300000000000000000000000000000000eb27f12a082cd31f693103360637332ccd316b378338ff2c1230ed34f335c82ace2d4c33703460272d2d3e32e0333d24942c5d31b632b91e4a2cc830ea31d818d12b5d305f31100faa2af32ff530058e1a2a5f2f9430838da529dc2e5830a6935b298f2e1f3042932e292d2eba2f4499562a1e2e712f8ca13a3020316031ffabb03251331c3303b03a33bf3375338ab06333ca337433d9b0aa33f53387333fb1ca33083491338eb1db3309349b33b6b1153405346b3366b2f733fc3361335ab2222d652e052fb9a9c8243d291b2b0d9842249728422a8899ed2381280e2ab79642235e28012a269696220b28c229949544227327ed280496d5212327a3289995672190264428cc953d21d2258b279f95ce2070252e27289567202d25ca26b9940a20c2244f265594761f6824d5250194ed1e24246f25a692611ece231b252092d31d4023c724ef90751de02285249f90061d7c2241244190a71c16220724e28f5e1cb5218923668ffb1b2321bc22dc8d731baf200822a18cdc1a45208921438c6c1a15206321878a481af91f2f21628a1a1a9b1f2721348a001a8c1f1922158d000029206d2200002c2a0a30d130940d202ff834fb35d4989230f93530372114111f8a232424960d00000000000000000000000000000000d027122b192c9e1afd30b235b836282c8d3133376438402dab2fbf34e435f4295b2d063347348126b82cee316f332124212c29316f326e20a82bb030e431c21c072b51307431c314a12aee2f02317d97472a222f6e30cc9bbd29872e1130d59947293b2ecb2f5d99ce28c92d232f6d957428612dc72e0b97312aa42d972e6ba1ac309231a83114ad5b33bd335b33efb0dc331534b0339ab108342634db33ddb115343234e9332bb2293443340734a3b241345a34023426b344344f34db3387b3bc2cbc2de22df3a9d7247029a42a31997b24e528672a9797cb247e284b2a249912245928a7295e98e42208282729659725228827e3289896ad21f326af281796532190268028b6951921272622287895932095256727e89442204725fe260d952b201125c726f194f71fcc245826b9949e1f7224e5258494d91e042452255993c91d0323b8243592471d672259241191181d00222324e490091dd321e023d590bf1cbd21a3238e90741c712134238b8f321c1b21b522298edf1bc2201b22c78d491b8820d321598dc61a47208521f98c191aed1f17217a8c2b1bfb1e6720438d000024204f2200008229d82fb33077136b2ef4340836401b4d30e4352c37db1cea1eb3233f24cf0b000000000000000000000000000000004927192b002c241d71307c357b36e62a0531e0362a38bf2ce32e87349335bc29fb2cc73227340c26992cc13139330323042c03313332ce1e762b8d309c31e619d02a21301a31280e442a852fb4303f94c929e22e4c3093987a29512edd2f91990229d92d6b2f399ab7287b2de72edc9955282c2d8a2e67981728d72c122e1599072a552d402ef5a10c31e331d73133ae02342b34cf330eb242345a340d34acb261346b3426343cb3763485343834bfb38b3486341c3423b44b344f34e03327b4572b272d962d67a8362422298d2a2297cc23f328752ad8948c23c328362a8a9526237a28c5290e96c122242858297c969522cc27fd28109704223a27b52822976c21982646286e960a211d26ee27fa95b520c72573279595732072250627c7951b2010258e26de94641fa424ff256294bc1e492492253a93391efc233425ad92da1d6123d6244792bb1df9228d2426928e1d9a224f24f691611d35221024c591011dcb21a3235e91931c632121236490561c2f21d522588f091ce0207522ed8da61b9d203422c08c821b6420cf21838d331aa91f28218d8c141bb81f6b21ff8d0000cb1d18210000d028472f5e30590c292ed934d535431ef32fa835f7367d1cd91ec9235524bc0b00000000000000000000c003af120000c8262a2bec2b802008302e353736f12ad830aa3604382c2cc92e813497351429b12c9f3213346e25352c8231eb325d234b2bd030f231bc20ce2a70307331c41d682a15300a311119dd29632fa2304c0d5329922e203003960729022e9f2ff397d928cb2d702f1e9bbe288e2d1f2f049c8928362da02eaf9b3628d82c1e2e0b9c81278c2ce12d5b9ae928c62cb62d4ca0033166315d314aaf3b34603417341bb3843492342f341db4bb34c034613471b4de34c2346b34eab46e339c3318334ab39a28232c952c68a32f23fc288d2a4695ef23cc284a2a9e979d239b28322a4f9731236628e429b7970e233828b2292f98d622102875290e987d229b272829b2978e21f126b8283797442173265328d796de20e725ce2752969a2075253327fa9537200225a2260095a01f8b24fd258594311f33248d254494c31ec52324250294521e3d23c6247f93ea1dc32271240393721d4f223424d891d51ce021d923a490611c712147236b8f1f1c0121c6220d8e1b1cc1206222078e1b1c7a20f421078eb01b5320b321c68c561b2c2084218f8c041b0a2048218c890b1b331fd4202c8d0000bd1d24210000b7284a2f6530438c992dab34a035f41e732f8d35dc367821dd1ed4235b24971200000000000000000000340ccf16000031260c2bc22b7520852f1c352236b02a5f306236b837032c132e2d343a358c283d2c2932bc332525dd2b3931a0327022012bb330db31b91e812a5c3062310a1c032abf2fcb30ca16a329152f6b30188d5a29ad2e2a30a69a3929262eab2f329efa28a92d0e2f969fa628302d8d2e169f5f28cd2c292e2c9ed3277e2cae2d159d3f27562c7c2df59a2b271b2c2c2d43993127f42bda2c449c0c2eb72ff32f0eac69339f33243310b3d334b8345e3401b572345d340134cdb4303092307430a0af4d25c529cd2bbc9e052415299a2ae7956424ed28462a3599e223a228122a91975b236c28b7295d98f82236287b292298a72205284c2952985a22b52722292098f6214227df28be977c219a266b282097ba20ea25c4279b9585209d255127df9551205025f2261e951220e12464264995a71f5f24db25f8941e1f092460259f94891e7523fc24c093ee1de7229c240893721d6c224e247592121dea21e1230392c71c6a213a2320918e1cf320b822e390551cb4207022a690041c73200922b68fc11b4320b821918e8b1b122069213e8f831a931f59210b8c241b831fb9213e8d00009f1328190080f927972e2630340b372d78346c354d1d162f8435d9366720ac1ee223762425100000000000000000000072105e170000b625312bd22b941f2d2fdf34e635fa29eb2f0b363e377d2b6a2dff33fe345b28d62bda315c335024982bfa304832ee20c92a7e309031fb1c402a273029315a1ad1297b2fac3092166829ea2e5a30e30c05296d2e0630ce92b828df2d632f659257286c2dd42ee7940828042d512e8e948227af2ce52d3d9408275a2c7f2df193a026132c352d3d954c26ba2bfb2c679633269e2bda2cb4975b26382b4c2c909d09281f2ce52c44a29e2cd42d8f2e3cab4b2b042d9e2d9ca93e28b32a162cd4a2bb215028a52adb940524fc28be2ae7950024ce286d2adf95da23b528662aa79643237628102af9961e234e28cf29d596ce2225287b2909988b22d1272e294098ef212727bf28b5974421bc267728d796ce2021261f28c896b1207a256e27a09679201525cc2650960920ab244726b295051f4824be258f94771ec5233425ab93ec1d2323c4245b92a51d942263246b913e1d21221e247190da1cc721d8231c90851c88218f23a88f821c2e211e23a38f811cf420b92253908d1cb3204e225e909e1c952004226f90791c7f20aa21cd90e61b2e207421e88c6d1bfb1f4a219d8c00005e163a200000332946308c31df15862c56347935a41ed52e8935ea365523b61fa3247c2592140000000083100000000067189b1d00000c25832be12b6a193c2e8f348f357d28262f9635ae36f72ae02c7633b634d927822b8d312133ff225c2bd4302132921c8d2a53306631eb8d1a2af52ff630e496bd29462f9030d5994d29b62e3730969ae128202ea72f109a81289d2d222f98993d28482db92e44990e28d62c1e2e0a99bd27852cb22dae993a27392c5c2d4e99c126072c222df5983f26982be82c9698f2255b2bc12c5d989d25eb2a872cf9966325922a552c7a958e252c2a212cf699f724a929cb2bbf9d24242e29ed2af397702451291d2b83940a241829ba2a1b949923f728672a9495ed23e8285f2ad2957b23b0282b2a56963c238828f8292196c0225028b7297b96712214287429e996f7219d272129139787210827b1288e96fa202726252877968b2072252e27e7951120e8246d264895961f94241226ed94251f4624b125a494b31ecd232f255a944e1e4e23db241894201eda228224f593b21d5b222f24c1923b1df321bf239d91a01c72211b23f6904a1ceb206c221e90201c9220e521ec8f011c4a209221b08fa11b25206621538f951b20204321478f551bf31f4a21628da11b00203121c18be81b0000621db28e1d248f280729938de02c6634a5358219932eac352537331dd91c6e212823310200001809df170000290f000000009b009e25fc29d52ac218d22e00350d361a29342f233697376c2be72caf33c3345c28b32a5a31bd321124572a5d309331cd1ea029d12fe53072183029712fad30dc150c29fb2e65308f0ce428832e25308695af281b2ecc2fc3987e289e2d282f989a2728112d822e199ac227a62cf92d929a5b276c2cad2d3b9af426302c6b2de4998126f42b1a2d3e9a31268f2bd12ca59af425462bb32c0f9bd0251e2b8e2c3d9a4d25b92a452c17993a25522a092c6d9882249929342b9e965f245b29df2a719470244e29ac2a83952c2428298e2a99929b23f1283c2a4b905c23cc28382ad1910e23b028292a2c93fb22a5281a2a5694c4228628052af79493224428a0295096d921b6270929ef960d21d22686288f96ab203f2644289796ab20d225f3271e9767204f252327b6960a2092243f26b4950b1fee237f2593943a1e4b23fe246293f61de222c0246592bd1da02272242892701d5c223724d691351d0822d5230091e71c94214e23b5906e1c1721ba224190421ccb206d22378f201c7b200722fd8ef11b3e20c621d48da61b05203a219d8d991a6c1f0421558e5f1b241fb620c99000000000d0180000c225cc2d402f3a18a52c6b348f35581b3a2e6635cc36ec1c7d1ee8223824ee8200000000b11500006e0c0000d01120006f25462ae52a9a18092ec034bf35db28ed2efe355337232bcf2c8633d0340128482a1f317932fb23e8291930443181205529482fa0303718fd28f02e6b30828ce228b72e44308495bf28802e213081978a28312ed52f2d976228992d222f74983528412db52e3a99ea27f22c582ecf996527a32cfe2d84970a275f2cb92d5f98a826232c702dc4967526e82b2f2d78991626652bdb2ce89ba825dd2a7e2c509c0625452a1c2c189ba124b529812b039a47245a29082b509513242729c02a868df0230929962a2c87c623f0287a2a0687ad23ea28752aef867623d828622abe866623d128672a038d7d23c728642a9d936f23b728582a689868239728212a7c9adf225028a729a0999621ab27ee289398ae205c261f28aa97952085255227fc9621200225ab264c96ba1f9324222674953b1f2a248225b294a11e9d230525dc93361e1923ba24aa92c71da12271243392461df021cd231091b31c2c21c9228390611cc620642234905e1c9a201a22b090671c7920f121b9905d1c6120d121ae90601c5a20b621b290401c4b2096218f904b1b1320a821d38f2b1bcf1f3a21748c0000441c34200080002941304e3115196e2c02342435011bc02d2f3578368c1c281ed2218b23c882000000000000008000000000771200001125972afa2a7019c72d94349835a628c12ec2350a37f62a962c0d337a341f279b299130d731db215629422fb930ba1dda28892e2230ac177d282a2eec2f15924428f52da92f189cd1285a2e1d30b69df4286d2e36306f9ec428e12db42f099c49289e2d332fd7941f28872d112f961102285a2dc92e1318fe27592dd42e52166c27512de92eb50a1d270e2d862e39996326572c7e2d829c6a25bf2a4a2c6f9c68247529ef2a3a992324ad281f2a13968e236628132aae9389235128db29f59181235128012aa9948d237728082a1e8d4d2399280e2a99067f23f228852ac606f4236c29222b308716249329512b9d90e8237629192bb2960023fb28732a8c98ba2124286c290b982121f2268e28d297c6200d260728d197c820932579272f98a7201225a8261298442050249f258196771fca232f25d9943c1e1c23db24b092ab1d89228c247191391d162232246d902e1dc621dc23f990fc1c7c215a233990b41c2421d6228490321cc62046221b8fe01b5320d921ac8eb71b0e20bb21aa8ded1a0720b921168d1f1bc81f5121d68e8d1a3e1f3121a98ad71a071ff920f48a00009119b01800800628a52e1f301718ae2a9c312533090e7d2ee13557376698652ee8356337399bb32f0e377538169e853047386e391b9d1d308b37bb386f93d32e1d36aa370c24c92df73448367e28962a1b3162324d25e728492fc630d8204528052edb2f451a33287c2d002fb111f427182d762e4a963e264c2c972d58967525cc2bbb2c0298cb249a2a852caf99e024cf2aad2c6f9bf024822a732c529c3d248429512b6b9bfc24d229612b159c3e244e29032bfd991d243e29f52a6a9812242c29ce2a0f951323cf287b2afd8fd122ab28392a649129223a28d1294392592225288d297492ef224f289c290c932223202872294093d62216285c29b88fab221b285329850ce8225e288c2905136223d928352ad611ef24b429802b75882125602a552c0e9464246e2a332c72965b23bf295c2bc7980622ac28f42946994021fe2692283099de208a254a27cf986f20b7242126c3976e1f2b24a925aa95b51ea6236525bc946c1efd22dc242c94281e282226244d939c1dc621bd230592581d87217123bc91421d5a2159233c923e1d45211a233792a91dff20a422b692e31ca52024223e911e1c4920af21e88f121c21206121d18fbe1b042036218f8ec31bde1ffe20748f351b791ff620eb8e161b2c1fc120018e821c251d791d9e8e3a259d29792922145d28812fcd30e28b622b4232fc332b18902cc63301352719f72c9634b435da1bad2f0f378d38c520d82d6e35ea369c21e32b03336134e7227829b230f531062283280a2f713034202e28132e8e2fe71d83274f2da72e5d1ae326bc2c142ec7138226602ca92d6990e425fa2b0e2dfd95de246a2a012cb293f5210f2829290c956c2159263a28a897b220fa2490272c993222ed240927fc9c6b21bd25a227e29a5a21a2257f27e599cf2043252827e09729207624fd256795da1eec23e7245a9315207f24d825ea9252219d2540278294362369265e28ec96e1213f26ca28a5954c2294267628c2963d22ae26732849954e22d6266228a194bb2228278b289a8f97222a2851291814f7231e2a2d2cb918d225932cf72d46181426d62c492e359b2e24bc2a552c5e9cba209e27fd28ac98c12093258d2740972620ba244e26db95af1f37249725fd94e61e9a232c2517946f1ef022ac24e792e61d5f22512454926f1de42114243791291d8c21ab235f90c81c382148230d907c1cf320f422998f691caf20a322798f381c6f205222268f3c1c35200a22388e0e1c1320c321f48da01b02209421998d671bd01f6f21868b211ba21f3a216e8c811a4c1f1c210a8cd51afc1eb22067890000181cc41c0000d7253d2c652d9812e826212ebf2f4a18652813301631721b8029ea303d32251f25293f3050313620fb21d42a3b2c8f182e26102dbb2e031cd2289a2fd130b71d7028152f9130c31cf627152ed12fd819b7273d2dc02e5b148227b32c012e1691cf265d2c8e2d62952d26032c162de2947725442b932c688f9a241e2ac32b28887b23d428382a128dfb221028422956941b23ca2717299d980b2391271029f69ac7223827da28159b8a22d8269628769a162274264b28a498b82137261428c8966d21ff25b127d2956e21e225802736955b21d325622724956221a12525272b95c221be2576272e96b021a22578271a96672176255827cc950e21132530276c95a9201e2510277994f62134252d27b995192012252327a18c10289e2e0630e21a742986300032779e73201b28f928e899af20d82317261998a91f67237a251c94521f42232d255794e61ecb22e72417948e1eba22b9240893961e7b22702411930b1e11222024cd91c51db721b6238a91541d5121352383901e1df420bc22ea90b41ca72061228490671c732027223a90251c5320f921058fe91b2b20d021b38e911b0720a8218e8d5a1bc81f6721668d481b921f3d21868c551b3e1fe2208e8cdd1af01ec4200a8d171be41e732001880000cc19ca1a000072242d2b7f2c05115925972cd72dda174826942d022f731bd026132e9a2f321d8226c02d592ff61c5726f42c3e2ee0170627c02c072ec2901c27d22c2f2ed190cc26c42c132e248a7c26962cd02ddc094526542c7b2daa8920260d2c2f2dd894fe25952bda2cc199a225012b6a2cc5980e25672afa2b6c978b24bf29362bac96172409296d2ada97a3236528ae29f698ff22102831298b989c22aa27e9284b9852224727c4287f973e22f926952867970a22aa266b282997d5216a263528eb968c211126ef27f4956021da257a27299511218b251d27dd94e1206625e6262294da204925de261c94e5203325cf2625940f211d25c126499429211225b7265f942321fd24ad26ee94e520fb249626b39457211f25b6262095be1e6422ec24b691df0dff185e1bd182b5191b1e2420d68c071e2122f1231b914a1e902252245491ef1d47223e240791ca1d26222624e790a01de921f523c490a71dad21a2236d91af1d8e216c237591a61d6d2149236c91841d4b213c234c91471d2e2123231191161d0a210b23e290f21ce120fa22bf909b1cb920c422cd8f231c44206a22028f7c1ba71fc3217f8dc61a4b1f2d21f98ca71a2c1fef20e28cc71a351fb420fa8c6e1a1f1fbb20898a671a021f862010890000191d431e0080eb24df293c2bdc9c8f24402ba12c1e081c25012c0b2d321522255f2c7b2ded186025782ca12d291981255f2c882d0a1895252d2c422def16a025e72b062d5a1285259c2bd32cfd886b25502ba42c588f3925032b6e2ce691fd24a32a352ca291b5243d2aef2b51917c24dc29742b148e36247929f82ac29006241c29892a5d929323bd281a2ab4943c236228a8292196f022162857297297c122b32712296398cc225c27e828cc98c5220527b1282999c822bb2685282b99cf2273265a28319990222826272801992422e025ef27569898217b256727449725212225d0268595cd20eb246f269c947120bc24312644945c20af242f2663937a20bc24572695938420c1245726a6937a20b124572695936c20a2243b267e931e205424a725fa92fd1c6c21fe22ca901619df1d1b204f8cba1aad1f3321758e8f1d832193235691011ec22112247192511ec22106247e93001eb721dd237092b71d9421a9232292661d63215823cb91371d1521f9229891101dbc208322dc90071d862035226591da1c5c20f021a890ab1c3a20a7210291651c1e20852138900e1cbd1f4021de8e771b491ffa20538e141bf01ebb20ff8db91aab1e9b20ef8cce1aba1e7820ff8c6b1aa11e8b20868a7e19291e6c20b983522bb92ebc2fdb9f022de6307731f0a11d30ac3489356aa48b326537903848a6512114246821b4957f1800000000598ec51800000000b790551427151014818d3329be2c3e2e23a1a6317235d4362624f930813566369527902d0c3256333a238c2cbc309231b41f9e2c1f30f13037190c2d0231b531b3993031ee35403791a52331dc34c535d5a7e830083438344ba829328836fa3716aa9c301b32523299a9c22fca30d23026a9b32ed72f1f3000a7072b622d5c2e2ba00c28c32ba02cdb9aa7261929c429a3996d28812aa92ac09d3a2f762f052f63a82e31f1308b309baced30ae30343085acd42fac2f002f4daaaa2b952d0e2e01a45c27962d252e119b70213627ca28fc93501f3624da250593361d3a24af259791161e232478258892331ee0232a25a792f51db42313256492d81d9523f6244592a21d3823ad240b92831de82279248992081d65223624f791d91c0b22ec23c091ab1cb42167238991661c622118233791221c2121d522e7909a1be420992282904d1bb62067225490e71a8e2030221890991a6d20f421d38f781a4e20b621f18e941a292076210f8f951af31f2f21528e851a9d1ff720428e8a1a621fa920478e3c1a1e1f7720fc8dfd19fe1e5020c08d2719991e4420918bd41a961e0a20fa91c12c7a301c311aa1242f0d33f733d9a52132e035e23605a929340938c438efa80220661e3720ff1900005010870800000000c40e9116000000000000000000803b29f32a612ca7241234123743383e2f9a33c4377238662cd02fd533bb344827bc2df1311d332722192da231da32c2197b2d4b329c33559cd32e87337334c8a13430f733993469a6f2304c34ce349ca8513188341b35dba93f31cc333d345faa9c308932fc3299a9f32de9308931e3a6fa2a3b2f4d3080a25929da2e3730a59ae1231e29e22990176927d229812a111e16313e32643209ab12316631523182ac0b312931da30a1aca33034310731fcab3b2d222f872f0ea60e276e2c512d600a0f242729582a0b15342119279328b4048821d52592278f968c20622513275d940420e1245d26b693a81f9a2412268a94371f4624a5254794481ec8230f251494d61d3b23b52494937b1de42289248092421d922260243c92f81c41223224e491ba1cfa210a2412918c1ccc21bf23e190751c8e216023c8904f1c532111239f902a1c1f21c5227890d51be3208c223490511b9c205a22da8fa21a582001225e8e711a0e206d212f8ef519cc1f3721b88df6197b1fee20b98dc819371fb620e68cf8191c1f89200e8dca19bc1e78208f8df019911e4b205f8efc07f7255e269f806b300634b134bca6e73250365e370baaca344938033993a32821b7202022061d000000000000000000001a14de03000000000000000000003c2ab92bdf2c569a933488378038f92a37342738c0381e2d9e30863474354d28752ead32f233ee22922d30326033a91d2f2d19328233af10a02d48328d33fd9e302fc832dd3313a5883089334a34bca8fa30d73359340baa133197334234bcaad830e9324d336eaad22a5c2f503096a1e5292a2f5930fd934e28842dcd2e59196f243929422ac31bc027082afb2ae91d5030ad30a13036aa5831c031563182ad3531be318d3112ad11319e31693114ad6f2e0a301f302da99527da2b902c91993d243b299f2aa9872e232e2848290e90f6229c27cc285394d0219d26532844947c20b7259827999310202625ec26cd93e01f012594263a94551f9e240c26de93dc1e472490255c93641ef4232e25db92c21d4123be242e92541dcd227324b7910b1d692236246991cb1c1e2206242491a01ccf219f23f690621c81213b23b490391c3321dd228890141cfa208622d690d71bb82029223590701b7a20d421fb8fe81a2c208121698f561ad31f2d21158e0f1a881fe920d18d111a741fd320238d381a8d1fb520458d7719161fb320038c0a1a0c1f89201e8d9613a826c726b68452300c34c5349ca595323636453705a95234fe37b93819aa9f20ab1f1a21430a000000000000000000000000000000000000000000000000402aef2bf42cb8282b34153740382e30ea330338af38402db030a6349c352627cf2e2d3343348922bc2d28326233d41d3a2dde310c33b910dc2c8a31b332f09c582d9d319c32bca1592f51321e336ea691301133ba3349a9f5302a338733dcaa3b31df32253310ac37316732713232ac4231fe31eb3161ac5a31e131de31c2ac6131e531c531f0ac6931e831b8311ead6d31e931b13149ad6e31e831af3171ad7131f231ab319cad5c31dd319831faad892f813081308eab1b28da2b8f2ccc9d94244c29852a2c9173237428a7290c8d9e2211284f293b91292228278028a793a721b92672282694b720e6259a27fd9336204725b72685942f20e0244826f6940f207d24be25d0945d1f24244f255e948f1ebc23f624c793031e6123b7247392af1d02237f2419925b1dc6225324bf91141d73221f247391d61c2622e523bc919e1cd32189237a91601c80213a2330912d1c2b21da22f490fe1bcc207a22bd90d31b7b20f32133902c1b44207a21b28fa01a0f2043215c8e561a0a202d215e8d731aff1f0c21768dbb19901ff420db8c231a191fb020338d0000921ad72000804a302e34f6348aa60a3200361d37d8a7dd3379378038ffa92020f81e30210e1200000000ff0f000000000000000000000000000000000000282af32b102da625a933b53610382a2e313390378538c62c62308134713530269b2e0633313498218c2d1b326833a31d0c2da431e0328f106e2c2e314f320196512c003103325d9d842d5831433234a4fd2f3732de32d9a8e630c2320e3355ab4731d032293365ac5c319932b332c4ac753177328a3202ad84314b323d325fad95312f32133298adac313032023201aebb313432ff313baec0312d32e9316aaec8312f32df319caec1312e32df31e8ae7530ed30c13019add4282a2cb52cdda1f1246a29d42a6b9a3e24ab28092a8d9887234d288f2977987422b427d328ec967521c72654287996e220e3250b28ca9526216525f126b09637201725b2267995e81fe42461262295d21f7624c02514953e1f0b244025b494ad1e912300255694361e2c23c1240994cc1dce229524e092641d79225b246592f81c2b222024e491a81ce321d823ff904a1c9b2196239a901a1c502137236790ac1b0121ef225d8f571ba12042220c8f171b61207f21018ea91a20202f21a48d6d1afa1f1621718d911a0120ff20908d221ab31f1f21e38dec1ad51f41214d8c0000e81b23210080ad2fa933933449a68631ac35ba36cca729331a375138a9a17720c42096216c19bb0f0000c205790800000000000000000000000000000000e4292d2c5e2d682500335c36db37d52d88321e374238262c403063344c350a25472ed4320e349c206e2dea312833221a052d8a31ae328910652cf9301032f798f22b91309e31ef9c222c783066316fa0942def309d3183a54d300b32773270aa4b319932c8328fac8031a432c23234ada13190328d32a4adba3181326c32e7add7317432583259aee73179325432c0aefe317b324c3205af0c327e323e326daf273285322c32bbaf1d3266320e3203b04b3180313c31f3aed129a82c412d30a475242f297c2a8b96e123a828102a3b9281237728cc29a994972203282a29959538222d27a628f8959d21842641280696ca20ea25cd27ae953c204825e62605953b20f524682604951820cc243126db94e01f7f24da25ab942d1f1f246c2541949b1e922307251693e41d0623b3245292931db62272249c92281d5a2234241d92c21c0622ef231b91911cae218f23e690461c622131239690491c1c21ce229990f21bc72086224390531b7520d821088fdb1a23203e21cf8d721af71f2f21bb8ca11afe1f0f21de8cdd198c1f2e214e8cbd1a951f1521308c0000fc1c26210080e72e55336434dfa47030db34d53544a65e32a2361138e9a388209c21642180190c1500000000eb10ac0c000000006b08000000000000000091293b2c8e2d52243f32d8356537522ca13153368537332a3d2f19340b351c25e92d9d3201345720232dbb31f432cd19b12c4f3172323d90272cd430ea31b198a22b72307631c29b122b1130fe30319d922bfa2fbc30eba06c2e0531a43114a8e7305b329b325cacaa31c832dc32adadd831b532bf3230aee431b0329f3292ae0832b432893211af2532bf3284328caf4432c7328432dfaf5d32d0327c322db06632d4327b324ab06e32cf325e327eb0b5310032af31faafa82ab92ca32d1ca67b25bb28222a1b9de3239a28d729929760237228ba2914979c22fd271e29179709220b2790282897fe21bb265528c8978d214a260e283697ea20c625702762965d206125f626ab953b20042577267f95fc1fa024ea25a3957a1f4a248425b395111fcd230d256395891e03239e249d940a1e82225124d893881d252217248f92dd1cdb21d0233891681ca0217323ba900a1c5c212323c18f9e1bfd207d22508f571b8c20dd210c8fee1a6020a921a78ea91a30207121a48d771a0f204821bf8c8b1ae71f1721ce8cb219791ffa202e8c3f1afa1e8320968c0000011ca02000805e2e0b334234dba43d30e034e03581a5e5317d360038a8a7f51e021f7d2025030000000000000080000000000000000000000000000000004429c72bf82c8924ea31d8355337c22c6b318436e037942a152f1834fb340025722d6632ad339d20bd2c7831b9327e1b652c16314132f10f0d2cb130c1317d957a2b4c303a31e999b92aca2fc730d59a1d2a1e2f6530de9daf2b632f6b3098a3162f14317731e7a95b317d328b32acad1632d132b13222af3032e932c3329aaf4f32f332c3320db07032fe32bc323ab08f320a33b43266b0a7320933ab32a6b0ae321133be32dbb0ce322033a3323cb1423262320332d1b0cb2bcc2c342d04a8c3245329a72a1c9989239328f82962964a236528ab29d297e82227285029699756228c27de28cc969d21f0268128a8960f21542633280096be20f025d027a095872098253027e195572029259626a3950120c62423263395641f8524de253895e11e3e248425db949f1ef6233b25ac94651e8a23fc24e094e01d2823b92426947d1daf226f2421930a1d3c2239248b92a51cb821cb238291331c21211c238190131b76201c22cb8eaa1a27207021a58d781af21f39217b8d5b1ad81f1b21aa8c801ac71fee20c68cdc194f1fe720f589631a0d1fa720ef8b0000f71b97200080242e1d335634aea44d30e734f53587a76b313e36c637d0a59f1d631dc21f651100000000b10b000000000000000000000000000000000000f5286a2bbe2cfa238e31bc353337282c0f315436bf37db29d82ef933df340f243e2d50329a33541d7f2c5231813210103b2cda30f731c798de2b8a309331389a102b2b3023312e9b322a782f92304c9ab229da2e4230ca998629812e02300e9c412bfe2e1b302ba3cd2f1331513199abe831d032c33216af77322933063327b0ac323933033379b0d03254330433c3b0f33268330d330db105336b33103334b11c3377330b3378b14a3388330933ebb19632bd32523288b18e2ad02c442df1a66a240b293b2abc993224b7280f2a8098a8237c28a9291b98f8223328442922988722f1272429be97e7214f27d32800971d21742635281096d22017260228b795b520ac257e271d9695202825b62678965920d124602623961020932431263296b61f652409267195191f2d24c4250395341e8d2312250794921dd6227a249b92751d5f22432416939e1d302214244c93bf1dfe21fd2377937e1d9b21792322939f1cf12079227b911a1ca2201b226790db1a77205e22958e3a1ba52088221f8ebe1b932078226f8f6818f41f2622f886541b02207f21738b0000511ce0200080af2df632413462a3c42fe434f7357ba5ea30083695371ba2a51d971d921fb212290a00002c07860200000000000000000000000000000000aa28182b882caa211a316f35f8369e29ba30253693376728332eb433d2345a23e22c0e327f33f71c712c3c3176320390202cb230c531a9987c2b4e304a319c9b992ad52fd930b59af3293d2f7c30649bac29d52e42300c9b55297d2e1f30a09a0629072e9c2fd39cc92a382e442fdba349305531be31e6ac6a322333ed327bb0f4328d3348330eb12b33983348336ab15d33b5335433c5b17933cc335d3311b29933d9336a3362b2d53308348733e9b29c32cc325632d5b16e29382ca82c71a51b242b29af2a55993224b828482aec99b0236d28ed292098fa222f28ac2923983022c82762295697eb217127f128b097ae2126279b28609773218b263428b1972221be2585273f979e205e252827859657201025c12620960520af244526ad95811f5224d625e094f91e172470258794761eb32319253294e11d2a23bf24f9928a1dd52277249292221d782237241692a41c0a22f5238191571ca3216623a890f31b1a21a122a28f581ba8200d220d8fbf1a4620a621b78d701a10206a21ba8c461afb1f3b219b8cd9198d1f3c214b8c8c1ab71fef219f90bc289a2afb2b7c178e27812ab22af9952a2f883496353fa4a330e6357b37faa4301cbe1dda1c348d041500000000d582cc02000000000f8000000000000000008d28252bb82c4c22eb304735c436ce2a6c30fa3555379f28de2d8533aa34f522832cd3313633961c0e2c11315732548f8b2ba330d631f799fd2a4d306c31579c8d2ae12ffa304a9e2b2a1a2f6d309e9eac29802e0830169e2929292eaa2ff49ccc28b62d102f109c6028482ddb2e339c482ad42dc92ea0a35e305d317f31bcade2329e3361334cb18d3304349d3306b2c7330c34ae3388b2e2331f34c433f5b20d341634843361b32a342c34bc33f0b315325d3211328ab10c28362b232c6da346245b29de2a089a4624cf28442a8d9928249a28f829de99912353289029c5999422eb270729a59800227327bf2893989421ed26a12841981e2173266a28cd97e920fe25fd277d97922088254927f89638203c25f9266f9623200d25b4264f960620c2244a262296821f6a24d325b995bd1ee7232b25c294db1dd4228a242294441d41223224d792131dd9210a240492ff1cb621c623ed91a51ca1218a23fc90691c6a212f233c90241c1321c422f38ff11bcd202922a08f921b8e20ce216a8efb1a4a208421ea8d5c1ae91f1a21638d361b5b1fa0204b8d7a286c2acf2b931a22275e2a9a2aa495ad2e70347e3569a26830de357a373ba40c1ca51e9a1cd4010b1600000000cd09601000000000b80200000000000000002928412bc72c9520733014358736e8290830a835e4367028432d283388343d22502c9831fe32621cbc2bdc300732fd0e4f2b81308f312198c52a18301431349c3c2a7d2fb630fc9daa29e02e4f30149e6629522ed52fcb9de628db2d612fb49c8b28832de12e5c9c2928152d6b2e0c9bc027892cc12d719b1529e92cd42de2a1b52fbd30db3047adf7326c330733dab108343134cd333ab32e344e34ff33f7b34c344734ca3337b435343234bc336db47d30ca30ba30abaf2525f229d32bf59df52315298b2abd96fb23e2285d2a48986f23ad28152afa97112365289e299798862217283e299b982d22be27eb285c98e6211f2790282a98282164261f28dd97d5200d26cc275e978820c1256d27e9964e206925fe2690960e2001257b262f965d1f9a24f4259d95bc1e43248225c194481ef72320256f940e1e6523cd244694e71dfb2286242b94a31da1224b24f593901d36220d24da93211dbc219623a992a11c5821f7227d91451c14218e229590fa1bc4203f22a88f6a1b8f202222488e2a1b5c20d021128e4e1a6d1f0221a18c3c1bfb1f6c21c38f0428152a012bb61bb826492a632a5095222e61347135e3a1df2f92352d3739a4a21b7f1f4e1cb901161800000000d80b66150000000093080000000000000000e227132bc82cad1c3930d8344636f625be2f8f35c4367725ea2cf33267344621db2b5531ab32e11c2e2bae30cf31de14b32a62306b319197452a0e300231ca9bcf29582f9630ec9c47298e2e1830aa9d1929092e9b2f0c9ee828ce2d762f5f9eb5287d2d0f2f1d9e4d28132d662e969db327a02cd62d919c1927632c9e2dd09a0128502c292d029f2e2d6b2ee12e3dabc4315c32243240b1053413349f330fb44d343734d333b5b4e4314232e63107b23e2b392dab2da7a89f23f428bf2a61992c241d29882a7a986423a6281e2acd98a2238e28072a63994e236628d029289915234228b5290099d4220c287129359979227027ff28ef989521d826a22892984121622635280198e320e325b32700988f207725252777972820f7248c2656968b1f8224f825c095111f2e2487256395a31eae231b250f952d1e2023b924b594bd1da82260240d94491d30221624dd92c01cbe219323a291511c56210f23a290441cff20b8221890851ce62057225790361c7d20fe210b90f61b5720ce21be8e971b3820a521928d131b1f206e21fe8d651b571fcb20198f8327a8298a2a081c6a261e2a462acc899c2d31343e3563a1792f94353d372ca3821b8b1f3e1c3d888a1600000000b103321300000000e80600000000000000005f27032bb52ce91bf42fb93424361026342f5c358536e6257d2ca63241345321662b22317a326e1deb2a9730c131d017722a55306631d38de229b22fcb30a5967f29f92e5f30d49a3329912e1e30679c15291c2e9e2f079ee128a22dff2ee39e8728292d762ee79e2828cb2c122e569e9227812ca62d589d5927692c7d2dc69c35271f2c302d469c3026732bb22c569bbf27032cd72ccca19f2b872d442e53a9842c202e7c2e75aba629a92c392df0a68425292adc2b139e56241529542ba7983d243929ae2a8c982e24df28542ae7990324ad28042aaa9987236d28b829bd99242333287329d999da22f5273729ff9986228e270a29149a41221c27c528d499b221742643284f99ee20e3259b2751989e20912531270b9843203525c026fb96f81fc32443268696851f5024be25bc951e1f03244c256d957f1e6e23eb24f494fd1dd3228a243a946e1d53223924aa93121dce21b4232893ed1c5f2128236692931c0021c322f191521cbe2089222091e11b6e200f22ac90891b3920b7213c8f731b0d207621fe8f571a8a1f7e215f8d651b821f0022198f0f200c1d4e1d958c8b26e429782aa796252d19342c35f0a0ec2e79351c37a5a2971be81f021c008a9d1700000000dc806d1700000000d7800000000000000000fb26322bce2c7d1b372f8e34f0352127a62e1a3536367225342c49320c342c1e3d2bed303a328a8ebb2a6e3086319a97372a1d302431519abb29772faa301f9b5529dd2e5130d49bf528562eee2f479b9d28cb2d492fc69a3928582db42e339ada27eb2c2c2ec49957279c2cc62d6399e0264b2c6a2d0c997e26092c1c2d80993c26af2bec2cfc99d725372ba22c9b99d325de2a522ce89a5b25a32a432c5a9a3f266c2a232cf09f2e25de29a72bd49c9a2445290d2b6b98af2458292e2b06992e241929a12af5980624dd288c2ac598df23b7285a2aab989f238d28262a619936235628da297f99e7221d286629a7999c22cc271829c999cf211427b028c2982d2198266a288898e72008260b284a98b22064253b271c986220fd249e26ac97ec1f8c243026ef96cf1e2a249c259395551e88231225d494ee1df122a9243094c01d74224c247893531d072203245092db1cb221ab23c2918c1c65216e23e190891c14210923de90a61cdf20a4228391c61caa202b223392e11c8420db21c991b71c6f208f212092241c1e205c21048f871bc01f3421878da4221422632120943a28542b4f2b4099282d64346f35689e812e893532376898bc1c7321c21e7c0b2e1b00000000450dac1900000000c4090e133413e508ca026b26842bff2c291ab22e3c348c35dc25292eb434ae35b2240b2ced31b1339118362bcd301832b399942a48306231b09a022af02ff830779b8d29462f9030b49c2629aa2e3530f19cbd28172ea02f159d6128902d082fb39c1a28302d972edd9ccf27be2cfd2d129d8127712c972d4c9d1e272c2c492d6d9da326e92b0f2d0f9d2826762bd42cff9be9252b2ba82c579a9a25d32a742c61997e25922a492c089856253a2a102cd697e024d029a92bae9881249429402b9d9654247d29102b5b963c244829bd2a2c9712240f29862ad197f123ec28582a43988623ae28142a769837237928d829af98da2246289229d6988e2207285829a09811226627f428a0986d21c3267a282398dd200326e427f7976a203925f4263b97f31fc8244d260f968c1f7c24f2252e96e81e2e2485254495851ea4230c25f8940b1e2623c1244494c31dc1226f2411945e1d42221f24f992081dd421a5238992931c56210023f1915a1ccc2041222991231c6b20b821e890dc1b33206e21a9908a1b0d203e210b907f1b08201e210590031bad1f2c21f08de21bf31f2d21ad8e9021732453253e987222db2353257695a92db434db35cba0782e9c353737c0a0581acd1b161a738aa7081018000076804514f0150000698200000000000000006926e329942be31c7a2e6d34c335dd27b12dee341a364426172bd1316b339b20d729483070319e189729b22fdd3093932f29732fb0300693f428122f6f30d597d228912e2c30fd999628182eca2fc59b4f288f2d162f9f9c0428032d6f2e379d9a27932ce32d5e9d1227532c7d2dca9dbd26162c352d849d5226c32bf42c2d9d0326672bb62cec9cc925222b922c699c8225e52a702cc79b1625732a2e2c089ab324eb29ae2b0b9977249a292d2b499840246429e82a3d9636243d29bc2a2f960f240b29842a2094ba23eb284a2acd949623d128352a6d961823ab281a2acf960f239b28032a9397bd227d28012a609889223728b329fb98a7216027e928a1980b21ab2673286a98ba203f26432823988020ad25c627319834202125e8265c97bb1f7824f725c496f21ebb234925b095351e2c23ed24bb940a1eeb22bb24d893d31d992272249193931d562236243d93661d0922d1230393101d92213d2393928c1c1721af226491571cc92056222691501c7820fb211d913b1c3e20c1210491111c052041215d90331b3f1ffc201591861b3d1fc7207690f32297247d24ca9d0126572843291699c92c02341435ada1e82d3d35d63601a3521ac41e4a1c6d01401400000000330772144c0e000083020000000000000000fb25302a162c64183f2e5734b3352c26c72deb3417365d26e32ab3314a33dc206c290e30293183193129132f8230dd95ed28e52e61300299d928c32e4f301b9cbf288a2e29308e9c7e282b2ed52f549d4528752dfe2e079e1f28122d7e2ec09ecb27ba2c172e439f39276a2cb02dbb9ed1261c2c552d1f9f5c26a22bfc2c499eff25302bb12ced9da125c22a702c909d4d255a2a342ca49ccd24ed29d32b3c9a762484294c2bcf9b42244c29f92a40961e242829c12aa690fa2316299c2a688dcb230029852a488db423fc28872a388d7723ed28792a37905523e3286f2a74936623d828662a44963823c1284d2a189928239528f629ab9aaa222b286029969a71212027982861999420f625b427869868203a25e6265b98fd1fcb244f2671978b1f6a24da252d96021f10245d255895781e8923f4243394071e0e23af24d493981d8a226724a2922f1de121d3232692a41c2d21ca2281915f1cc4204f222f91541c9020042222915c1c7320dd21a991591c5520b421a6916b1c412099213d914e1c3c2074211492871bde1f8321878d321b7f1f2821e88e000045230a240080252946305b3181a0502cb833cd349aa19c2d0635753605a2d11c931e211b7189ba15000000003c03cf0e0000000080020000000000000000d725722a3c2cf2183a2e4134a13527269b2dd834f9358a25a52a5f31c432e11ff428562fb730b7129e28472ef62f42924528ec2d7a2f459a2828c82d572f1ba07028342ee02f439d3927642d0e2f199d3727c12c422e519e15279f2cd02d999ecd26802ca92d569e6426632c972d519e1126272c5a2dff9db8259f2bd82ca79dcd247c2a492c349c4d247629042b129a0924ee28502a54983924ee28512a27971f24c6281b2a0d96c3238828032ab395c2237d28f929b29597238d281c2ab794cb23c028522a6790e4231c29c92a759018248329452ba0901e24ac29942b83920924a629692bed95ad234929d12ada99ae228f28ee29399a85218127fd287499f82083265528e998a620e825da279898ae205b252527a0987e20df245a2670981d2036248a25aa97261f882324257395ec1dda22cb24b193751d5922792479921d1dfb2130247c91281dc221d9238891061d80215c23f591bc1c2521d0221491431cdc2063229390f21b8120272243905f1b22200022148f311bde1faa21e78e3d1ba41f2c21f38e511a191f01215a8d9b1ac91ebf20b78a0000c71c471c0080be278d2ef42f379f672a98311a33989f2f2eab3516378aa05c2eda354137079de52e5336e337739d3130b337e738bc9c893043386039259ab52ff3365c385a1cbc2eeb3570373a23682cc433df343723f628e12fee30c31c3c28102ede2fbd1102285a2de42e13985827e82c4a2e6499e225362c442da6990b24502826294099d8233a28e7294f9bc2239829672bab9b8c24422a122cc09cce24ab29972bc09c90247f290d2b409c4f244729012b8b9b18243829d82a3e9a3a243b29c82a03998523f628822a5f963123b0280c2a48958b2252289d29ce94b42246287d29ec942b236c28af2974943d2350289a295c9324234628982908905e236128a929a8067323cd282d2ae411d223a529382b2f12e724962a412c6e8809259b2a682c44986324472a0f2cb09a7b236f29db2a649bbc2114282e29a39ad0200226cf27d89993202225a8260999e91f7124f225d1979c1e0124a925c9955e1e78235e2537953c1ece22b124c194f61d1a2203248b94a11db921a723f2934d1d762170237c932d1d3f2165234f93331d3021182357938c1de8207922d593b81c8620f4212192fb1b3a209221bb90d01b08204421a290781bd91f16216e909d1bc01fef20f290611b7b1ff820eb8f251b241fb2203c900000d71e0e2000808124862b7e2cf69c3d28982fd4306b9ffa2a2632b333b39e6d2c03341235809cbb2c7434a83558994e2eb7354737b291292f7a3604387892c12c5e345535841bce2a1132b033eb1aab28912fe430bf183828072e982fc4145327332d882ef7906b26962cda2d86962026442c6d2d9c97ae25982bd72cd0982625712a152cf1987b243f29b62a50994e24c728142a149a16247b28b5294f999a23f527f3288298b722ca27ed28b0951f225d27a2287e948a22d62626284796fb21c0261828be951d22dd263c288f96b5221a2797283297e32207279c281598202326279728a198f322e5268e28e898e8221827a9287c985a220027a5286195bf224927b128f4940723fd27192959061a236029ed2a9f1734252d2c672d2c1ad326252da62e03994d252d2c602dbc9e5e22ea28342a689c492170264928e99b8f202725d0268198aa1f7824c92547964a1f082442258f95b51e6223f4241d95371eba2295246394c91d37224c248493581dcb2110245692181d8521ba230a92d71c37214c233191951cef20e522eb907d1ca4208722d190471c6d2033229790451c3b20f4211990151c1120b021d68f9b1bf91f89214d8f571bc31f6121388e1d1b881f3621068e3f1a281f27214a8dc21ac11ea320b98d0000a11b9b1c00807526482c5b2d49a02b274c2ee82f0f9d712818300b31869b9129063151324996f2292e316e3207148126202eab2f58132e23532b8b2c7d066528d92e3e30f5917e28722fc8301a97dc27472e0c30e2987e27432dbf2e319b5a27972cda2d5c9cc1263b2c592d639c1426dd2bf12ce59b8825322b822cef99df244d2af22bad9820244d29be2a0e9689236b28a12988956023162846296a953423f9272829ea961a23ae27fb289f97f8226027c8287a97e3223127a02815987d22f9266c28f6963422c8263d28a896f921862617286996a6213026e027b396e0212c26e827a1973c221826e4276798f421d925ac273498a021972581274a9868215b256727a29739212225ef26c996f52069249c26e1952923d52a2d2c7886b32a6731f932eb9c5c255b2c652db89f4320b5245a26ef989c1f7b2395253b96d31e3223ff249695fe1e1c23f8245595031fd422d32458959c1e9d22a324aa94971e692263244894001e03221f24cb93a01da621bb23ac92341d4c21312395910c1df020b422fc91a51ca220592282916e1c7d2019224191321c5f20de218090011c3720b4214c90a91b102093215b8f5b1bd21f5c21108f3e1b901f2521228e531b371fd220088fdd1acf1eae205d8f681bbc1e4520708d00006119691a00806d24382b862c409a5925bd2ce82dda976c26d02d3b2f879647277d2e0930938a2c27512efe2fdc109526992dfc2e76908826f42c382e459adc26df2c3f2ed89cbe26d02c282e249d43267a2ca82d6c9cee251f2c342d089bd725cc2bff2c969bbe25622bc62cb49c7625d12a612c799c0025432ad82ba09b8f24ac29112b709a11241929652a48996d239d28d429d398ed223d285e297f989d22ed2700294b9867228127cb288598652225278f2884985922d6266528d7983e229a263a28c2980922452607284398d2212926cd278f977c21fd25a02781962f21dc258e2790952521bc257e278595222192255927829522216b253327829520214e251127809504213925f226629520213625e02680956c204024b825bf94cb16ed1cfa1f4a8b2d15361b351d238a481d1a2154224392fe1d362225241b932d1e6b2247245393391e542240246193f31d242219240e93b41dea21de23c392a91dac219423b692b81d8e216e23c892af1d6c214f23bd928c1d4f213f239492441d2c212a233f92031d05210423f191be1ccf20d222a091481c93206c229890b01b1a20ed21618f0e1b811f7821c68e9e1a451f1c215a8e991a2a1fe220978db11a291fa8206c8e401afd1ea920978c471aeb1e71209c8c00003b1d221e00809024372a932b69997d24a72bb92c9796e4243a2c372df99414258c2cb82de28e7225b52cf22dec888f259a2cde2d47928b255e2c7e2da2958c25032c142d12985f25912bc62c289939252b2b892c9b990625bf2a472c6499cc24622a0b2cb0998e24072aa82be3985924af293a2b2c9820245b29d02aec97e1230a29682a90976d23b428042af89722236228a1293b98d5221f285a297098b222d3271c29ba98c2228b27f2282799b7223527c2288099bc22f7269f288499b822ac267128809963225f2645283b9904221d261b283f989421d325d527e0972a21a12588272096cc2066254327b095aa2053251f270195a8203225f62678949d202025dc266e948b20f6249e265c946820d02477263b947720a5242a26ca94f21e2723b82474935b1a991fe720d28e9018501e4220e58c941cd1207e226e917f1ebe210d243894ba1ecf211524c0948f1ecf210124a194181eb221ca234d94af1d8a2193236293551d4e213223ed921c1d0121d222a392181db32076229e920d1d842032228f92d21c6220f821b7919f1c3820b7217b91461c172088211191e71ba91f3a213d90341b341fee20bb8fce1ae11eac204d8f921a9a1e7e204f8eb61aa21e5b20718e381a721e6b20458ddc19191e23204d8c2c2a6a2e6b2f18a4d82cc83091316ea62d2f753373348fa894328b37973880aa9028932bd12b799f0000000000000080000000000000008000000000000000800000b71a21220080812c173049315ca229319d35453694a38d2ee832cd3312a0af2ca0308731e09e032d49302f3161a1242ec931bc3256a475306f34293568a81c30fa32aa33c2a86a312235b23544aaa4321f373338b0ab653086322033d7a8cc298d2dfc2de99c422470261b27b2870520c624bb267389e31f33257d26748c4b2000248125ca8efa1cdf22b523bf86dc253126aa26f18f1330a82fcb2edea9143102319730a9aca93049314b3125acde2d5531f53174a78a2bf930f53199a2b021422a402b5698161fea24d5266795341f4b2490257e95eb1d0724402583942e1eba230b255d94141e7323eb244a94071e6023da2441947a1dfd2293242d944e1dc22266240b94be1c43221f243b93a41cf321c9231393861c9c214e23e692421c4c21f3227e92121c1021a2223592951bd8205f22c891441bad2030228a91f61a8c200b22ea90a71a6b20d721b290521a42209b211b90651a152052212790611acc1f0e21918f6c1a701fd7209e8f961a291f8d20cf8f1c1a081f6f203f8ff819ee1e4920148f43198f1e4520a58dcc1a911e1c2091913c2c4c30f53061a5e72ed132f133c0a9963162354b36f8ac0c34ce379d38eaac13271529fd29e520871800000000541600000000000000000000000000000000c80cca180000270cc72c542ed32fec280a34c537683863a274308234483588a1f22d10321f335da03f2d9a31a63272a00d2e5f327f33dca3832f4e3337346ca79a30ff3398341baa08316534ed34f6aa4e31ba34513557abc930b5333a3414aa522a9c2f95307f9fd425132b492c9c946b2347284929f6170a236a288329c419ad221f28d728f91a1d25ab283229c41c67305730e92f95abd2301d31de30f8acf8308e316031d7acd730c031b131b7ac802ea630f23099a949285d2d742e999ca823eb29542beb06d7215d278628988e5421f625a4271d958d2072250c275e940820ec246426c894a01f9a2404266295d11e33249225d094141ea1230c25a294ad1d1523a9245494351dc5227324f093ff1c7b2252240e93ca1c2a222424c3928d1ce521ee23e991661cb9219f23b6914b1c762142239391261c3a21ef2263910f1c0a21ac224591d61be620782217917a1b99203a22db90b31a4620cf215a90461aeb1f4421718fd1199c1f0e21e68ecd19581fda20398e8f191a1f9d20f78d9e190d1f6820648d2b19961e5920f68caf19771e4620bd8e832cd62f61307aa5d12fdf336034bbaa6b32e135d13687adb2343338e2386fad5428d029ae2a8021820d00000000130b000000000000000000000000000000008018e41c53160114592df62e5130492581340a38883816a11d310935dd3582a3a52ed1320a34a1a1922d1b323a3359a1852d06322b338ca2412e4c32603379a502300a330334dea8b030a03343347caaf030c9333e3464ab033192331a3408acce30c0321c3376abbc25052b562c0c9c3423fa28772a861b3f245329972a5b1e0a24d628c729801e60242629bf294d1e6e275029062a7499a730e430a2300fad2f31e331b731c8ad0231d131b431baaddd2e8930ab3013ab26280f2cbe2cbb9fac24d6294d2bce95432339285b295595ca227827bd2807983722d52666286398a320c725f227069623204c2509275f95e71ff824972622953a1f8224ff251a95d71e3c247d25d494491ecd23f9247094bb1d0f238d240c94501da52248248093041d412214241593b11cfa21d223a092741cb121722349923a1c66211223f8910d1c1921be22b891d51bdf206d228791d21ba72014228591811b6b20c0214c911f1b20206c21a090a21ad21f28214f907a1a9f1ffe20ae8f421a7e1fe220b78e371a841fb320ab8e5319f81ea220838cfe19d31e6f20668c892c11308e3082a5d72f09347a34c0aa3c32d935c73631ad4134ef37a338a5ad5228b9298d2a3922000000000000000000000000000000000000000000000000ae18411c581369163c2d2c2f83300f26f333ae3745387da012312435ef354ba4e52e19334034d7a1902d01323433b6a0182db831dc320aa2f32c78318c32fda2032ed331cf32f1a5043098326a338ea9b6302d33d43351abf13033337d3341ac1c31ca321733b0ac0d313e327632c7ac2a31de31c8312dad4a31ba31a13173ad4c31bd319231c2ad5131c8318e31eead5731d13196311bae5d31d9319f3149ae5a31e431aa316cae4731d1319831a1aed22f86307a30b1ac9828132c952c51a187242b29612adc9888236e28a1296196ec2219284629a5964e225f27b528c4967821b7267d287c96b720cc256527979554203e25b5261c960720d7243626b095901f68249f255795f11e08241d25e694211e8823d22454949c1d25239724eb93531dcf225e248493281da02242244893fe1c4e2214240c93c41c0122d223ba929d1cb221752383927c1c66212723d692601c1721ca22ac92261cbe2079225392fa1b70200422a1914f1b34207221bf90801aef1f1621b58f121ac91fff20838e501acd1fdf20c68e5a19551fce20238d201adf1e8920928e0000cc1fd3200080a62f9633653482a9c831b435ae36d1ac91335e375e38cfac21289b296a2af2210000000000000000000000000000000000000000000000001d19a81bd613b716f72c1a2f84306e273133423710387f96cf300335ce35b4a5a92eea322a3425a38a2df9313933f1a1e42c7231ae32cda1612c1e313132b0a19e2c0e3115320ba45b2e9231763238a86130753211338babfb30d4320d33b6ac3b31d032113318ad48318d32a33271ad5b3160326c32acad6c312a3222320cae7a311332f3316bae95311332e131b3aea4311c32e33116afa7311832d03143afab311032c73171af9d31f731ae31b0af3130983073309fadef28272ca22ca9a339258729e62ade9c5d24b028072a259b862345287029299ad222c627ce283399c821c526492868980a21b125d127af97c5203e25ff26469712201025ba263596a91fc5244526d7955e1f4b2484259e95c71ecb230e252b95391e5523d8241895f51d0423a524e194a31daa227c244c94451d4d2243240494c51cf52105244693851cbd21a0236192361c78216a237891f91b25211d232d91671bd620da22cf90fa1a5c20fc212390981a0c201a21d28f301abe1fda20a48e301aaa1feb20a48e591ad01fe120d08ef819801f0921678eef1ab11f2821178d00001f20fd200080272f48333d34f3a829315935493627acdc3202372e382aac7528f229a52a4d1f000000000000000000000000000000000000000000000000f418b41c0c1c4414cb2c722fcc30bd246732c1368e37c9157930c1347f35cda43e2ea5320434b3a24c2dcc310533e1a2d32c5b31723244a25f2ce530e931aaa2092ca030a4319ca25d2c96308e3150a44a2e3331d8315aa87d3030329a321eac31319132c6325aad57319832ad32cead8131783274324bae9e3158324432beaeb1314b322d3227afc1314f3229328eafd53153321d32d2afdc3154320e3203b0f23158320b323db0e33153321e3248b0b03031310c31afae0429412cd52c2da490243929632a719a19249d281b2adc9892236528bb297d98bf2203282029009812223e27b0284998a92194264828fe97d820e325c827639728204025e42656962720e12452265596eb1fa124042609967d1f4c249f25b595d31ed4232a2534954d1e4623d2247394a81dcb228324fc934c1d82224c247a93e21c37221624e592a31ce421c5238c92671c95216b2337921f1c45210023d191251c03219c22da91b11bb1204922ff901d1b6020b3219f90bf1a1e203e210090921a032030210d8fb41aff1f0621f38fcf19641f1621448c811a501fe3203e8e00005d204b210080e02e19332c3425a945309c347835a1aa1f327336bb3710ac82285c2ac22a21970000000000000000000000000000000000000000000000003719a61dce1f58147d2cbb2f233173258631fe35c0365e20f12f7e343a3509a0e52d8732e633fea00e2dae31dc32daa0972c38315032eda0182cbe30c331dba07f2b59305131dea0192b0530f03069a11c2c2330e03086a4e12e3931d531bba9f130553293323bad8431b232c63277aeb43198329a3201afc531873278326aafe13188325f32e2affc31913257322fb01b329e3258325ab02b32a03255327cb04132ad326232b9b03f32a8324032e5b0db304031fa309cafc328cd2b692c5fa47f24d228112adf9bb8239928c52994986f235c288c29d4989222d6270129a398ed21062785282f98c921b226542869988321402604288398e320ae255227009847203a25cf260197ff1fe02450268c96881f8224e3252b96231f382471253f96c61e9c23ed24ee95441ee8228b242195c91d632244246994401d012205246993c01cbe21b9232b92651c89216223b591041c442117233791b41bf82076220191501b8420d1215690e61a5620a02117907e1a1d205c21f78e471af31f3721078e621acc1f0b21218eb4195e1f0621d58c641aef1e9a20238e00003220e52000800b2ed7320b345aa83530c734b035c5aab3315f36b2376dac63274a290c2ae29e0000000000000000000000000000000000000000000000008919141cc3185813312c132fa330eb212f310636d636db9d702f6134133524a3622d30328a332ba1a42c6b31aa32fba0462c05312f3211a1ed2b9b30ae3126a16a2b37302a313ca1a42aa52faf30b0a0242a1f2f663060a12d2cb62fa93003a67d2f38319831b8ab523171329732afaee831b532a932ecaf0c32c632a33224b02932d032a33264b04332d73294328db05f32da328932d0b06832cc327c321cb18132dc3291325fb19532fa328a329fb1f23071315a31e4af55289b2b6f2c76a30f243929982abb99df239828e5291d997a2367289b294799e82223284e29e09812227e27da28a1989721f326812843982e2170263228e697e4200426d62701988c20882522277297322014257626df96ba1fb124062654961f1f6924b8253c96b21e24246425dc95901edd232125be95561e7223e1248c95d11d13239b24c394781d9a224f247a94e41c1c220d240194771c7b216723cf92c81bd02098227e91ca1a5320e2210790c61a33207821448fbe1a07203e21798e701acb1ffc202e8e711ab41fc5202f8e221a411fc620818caf1a451fc920e88c0000cb1fa5200080a92da732e333d5a7ef2fa83495359caa3a3133368637c1a95026b52887290f1a000000000000000000000000000000000000000000000000d716c3170000600edc2ba02e5d30a81ee530e435cf36faa08a2f4734fe3406a72e2dfe315c33baa2492c2e31503291a1032cbc30c431c2a0852b70306e3175a0cf2a1230ff3009a0032a502f7830219fa329bf2e25300c9ea629812e0530f99fba2bf82e1b30c8a5862fe2302c3168aca83190329832bfaf56320233d8329bb080320733c93200b19a321933c83244b1bc322833d23277b1c9322d33e332b3b1f8325733f5320db2f2323533a93253b28830f330b830deafc426992aaa2b41a15e2400293f2a2a9a0024c428fc29199abd238328a829e6991e232e283d296d995f22d5270e29db98ad213627b7285498112175263628ba97d0200826e727569793207c2537277e975a200125882620972420b6243a264097db1f87241326e096791f6024ea258a96df1e20249225a095041e6a23e624ed948c1dbd226b243b94771d5c2237242b94951d2d220f249294951de521d82392942c1d67212d23e393661cc02031223692df1b8720e3211d91611b72200c2260900f1b85201f22938f6a1b892014226590661a072058216b8de91bf51e4320cf8d0000e51fc6200080742da932f0333da7612f9b348b3585a9da3008365e37e4a92126a52872293b96000000000000000000000000000000000000000000000000b715e2150000010d532b5d2e3930ca198630bd35a7369fa1972e1134ce34d1a3c42ccd31293331a2452c1c313e3207a2012ca030a7311ba2322b37302e317ca1642aab2fb93083a0ca29122f6230859f8f29b02e2f30389f5629562e0130889f1629e12d422f2aa0ab2a372e352fcda4c12fda301a31fbac203278324d32cdb0a5324c33113365b1e53266331733cbb10f336c3318333ab223338a33253380b25f33a7334333d1b20b335a33c93203b34c2f2930153021ae4c250a2a612b549f2a243b29b52ad29a1524cf284c2a9b9baa236e28db29b59adc22162868293b993122b1271b291299d6216a27db28c798852112278228859842216a2617289a981121bf257d276f98a2205b2511270e984b20f624992684971b209b242b263097b81f4424c625c296f51e03245f25b2955f1e812306253895c81d0523ae2468946d1da92265242394141d55222624be93ac1cf721d9239892561c8a2147231f92db1b0b2197221a91341ba52013224590d21a4f20cf210b90891a1f208f21038f6d1a0f204d21e58e251ab31f3c21988e0d1be61fa621fa9000009527032700809f2b1731113246a5d02ec134bb354aa97e30cc351737f6a95c2621298629d99c0000000000000080000000000000000000000000000000003c17481700009910042b532e36308e2027308035663629a16d2e0e34cd34fda5872ca4311b33e1a1e02bf73038321da1502b8c30b131c0a0d62a37304a31d3a0722ab52fdd30eaa0f729fe2e5a30e2a06629562ed32f1ea0db28ec2d5c2fdb9e8a28762dd92ee59d6328092d592eb09e9029432d382eb2a3ab2e17304830a9acd5318a326732d1b00d33a7334f3339b27233d4335e33fdb2b233fa3385338db3b433ce333b33e2b34032853226327cb2522cbf2d192e0aaa31245329e42a179d35242d29902a5d9b3c24b428342a6a9b13249628ec29229b722343287629849a7122d7270129009ae4215d27bb287d996421d3269028b898e9205e2655284c98b520e125c3271f987a206e2531272c9837202425e226db971420fc248a269a97de1fb32420265597431f4f24a825c4965e1e9b23022593959a1d8922612496942a1d022219243a94001dbf21e923a093dd1c9621a2236a93801c7b215e235a92651c47210323b591221c0721be22e790091cd1204422c990be1b9120d2219790081b47206f212b90b51af01f2021328ffb1ad41f21217d8f0000a1271a270080442b0131ef3107a5322e96348a35cfa82f30a935f63651a9f92511297e29bc990000000000000080000000000000008000000000000000002f15bb16eb104505982a612e4b307814ab2f46352236c3a0c52ddf33b53431a2452c7a31e23210a18e2bc830f2317ba00a2b62306e3192a09a2a0130f9304aa01c2a592fa03050a08229bb2e3730c79f3229352eb12f569fd128d42d532fcd9e74287b2de72ec99d1e280b2d532ee29c9e278e2c962d849c2d289b2ca82d99a0d72c3e2ef52e7eaac2302f31263133b07232f132a63253b201336233f53245b35032b0326032d1b2f22e0730393021aea027d82a0c2cffa2a1233f29032bd19984244e29a62a609af723e328542a129a6f239b28f529ab99e3224a287429a4995d2212282e293699ff21b327e1284099cc210827762813992821602614288398bf200826b82727987820af254c272a9850205a25e1260598fc1ff52462267197551f9124e1256b96c21e34246a25ea955d1ee0230c259295371e6823c6247195081efd2286244795ab1d97224a24f694861d28220824d694ec1c962174230894401c1321b2220092ca1bc72026220f916b1b9020f7216690281b82201a22ae8f201b5820dc21d78e031a5b1fe120188df51aa41f6521209000003d27bf260080a92acb30b1316ba4e42d8a348a3568a89d2f6835b936d6a884251b297429ac98000000000000000000000000000000000000000000000000bc14d1175d16af0a372a332e3a309e0d092f1735e7352aa1512da83397341ba1d62b45319c32869f0a2b9730bb318d9f7e2a46305231b39f1a2af82fec30ed9faf292e2f7f3055a03e297c2e0e304ba00629fb2d8a2f66a0d728b12d402f3ca07928492dc02ed49fef27d52c132e0c9e33276f2c9d2d159d0c27412c702d2e9c0627292c182d5b9d5d28402c3d2d84a3ba2a4b2d042eb3a8662cd72d2f2e83ab582b302d992ddca9de27532b4d2c38a3ce2311298f2a649a98244a29e82a7c9a2024ec285b2a399b9e23aa28262aab9a8f238128eb299e9a39235c28bf29529ae22234289c29069a6622d62738299a9912224327c628a8998a21bc267728299937214f261528dc98dd20d9258527889897206d25052789982820ef2460261b98b41f7a24df252d97191f27246b259d96981e972304252596081eff22a72447958f1d77224e24de94f81cf621f12312948b1c87215523ed92661c3a21f5223692881c0721b422e391e91ccf207a22d3914f1c8f2020221c91071c6720dc215290c41b4520b4212b90161b2b207d21cd8e8e1b6f1fb620418f0000e1266d260080052a8a306b31a6a3552d53344a35aea7512f7935d5363ca852251c298a294f9a00000000000000000000000000000000000000000000000063146918fc177d01fe292e2e3530179aa42e0135cf35a0a10e2d87338834ffa18b2b27317f3279a0cd2a8930af3108a0502a393044317c9fd1298a2fb630e69e6729c92e4930049f1429632e0a302b9fee28ff2d8b2f849fb628842de62e2f9f5428142d5a2e179fe027ce2cff2d739e5927802ca52d9a9dfa26492c4f2d529d8d26c92bf42c5d9d8e26742bca2c5e9d63264d2bc62c979d3926ea2a7b2cda9ee325442af42bd09fd724e529b42bc89c81249529602bde9a86244029e22ae69a1d241429752abc9a0524d728332a959acc239b28ee29d39a66236328b229e59a112330286c29fc9ace22d82719297e9b9d227227e828489b4222df2695283f9bcb214b261b28b59a1721d4256a279b99cb208025052747995320242599264698ea1fa7242126d297651f3c24ae25e496e71ed8233e256e96461e4323e1247e95e21daa227e242695651d27222424b994381da62192234694ea1c372100230694711ce820b122c6922a1ca9209222e191d21b6f202e2285918a1b3920cb21e590d81b1420932189910b19551faa21468cbb1a581f58229a870000da218e210080652953302f31dba2db2c2f34223572a6e82e6935c3369ba717253a299f29099a0000000000000080000000000000000000000000000000001b14841aa71c2c04a9294b2e47306596162eb334783578a0832cff324134d7a03b2bed3042324aa0822a573076313aa0062a0330073198a0a9295e2f9c3051a04e29be2e42300ba0ee282d2eba2f09a08f28ae2d192f709e1a283b2d822e549da327d32c092e879c3b27892cb02d4a9cd626422c5b2d0e9c8226012c142d3a9c3326a42bdc2c079cc525352b942cd89aa525e92a542c559b2725862a1d2c1c9a1a253c2ac72bc79bf824fe298f2b939bbb24a7292b2b369b52245f29f12a139b2f242429bc2ada9ad923db287a2a6d9ab923ab284d2ac29ab82388281a2a319b57235128c329419bf9220d284d29499b5d229027fd28a69aab21f526a3289a99262177265a281699e720ef25d9271f99a2205e251e2794985c20f22493264f98bc1f6d241726a597951e0324752522962b1e4123f3246695d51db32290241b95ac1d3c223f24a594451ddb21e1230494cc1c7f217b23c6927c1c352145235592551ce820e422a0916a1cad2085223b92951c84200c22fc92b91c6920c1213393a31c57207f219893311c0f2048217f907b1b9a1f19212e8f00005022172200804928ca2eff2ff6a0ca2c7034773501a5d22e94350a375ba65225122a242a1c990000000000000080000000000000000000000000000000002010e41b3b2090024d29462e4d30ca0c8c2d5e341b35e49e3f2cbc3222348ea0132bcf30123232a05f2a35304e318e9fce29cc2fe430e29e66293b2f8630039f0c29962e2b308e9e9d28fb2d822f839e4c28782de32e8d9e08280c2d622e0f9fa927a72cd92d239f5b27622c7d2d459f0327222c372d899e9326d62b002d209e4026672bc62cd39df3250c2b922cdf9ca925b02a582c519c8525612a282ccb9b4f25262aee2be59a0225dc29952bf099b724a7294b2b979976246529012bcb994e243f29c62a97990f241029872abb99dc23dd28412afe995e239b28ed29089a29236828b429449ae6222d2867296d9a9d22d1272a29899a0b222827be28f9993b21882641282b99b220c6258527a49840200f25b8263398c81fb9243d2640979a1f6824e2251597d21e162462255b966e1e8123e824a195f51d0323962437959d1d9e224f2499943d1d242205244a94d41cb52178235d93861c3e21e722e692351cae2015226a923c1c65207821fa91bf1b1e20522108914d1b01203321be905f1be21f1721c990d01a841f20218a8e1b1ce81f1f2168907d257b2b7c2c0b9e0221a52b122ccc995e2c0334df34cfa4dc2ece3544372ba7ca240b289b28ae99ba10000000004480000000000000000000000000000000008e1623141309080b3529922dae2fb40c702dab3478359ba0032c9a32e633cc9e0c2a5b309131ce9d8629a92fda300e9c3129602fa4309f9bf028122f6e302f9cc2288c2e2930919c7428fc2da92fc99d2628552dd72e539ec627ca2c282ece9e6a27722cad2de89ee126372c492dcc9e8826fd2b042d749e3926982bce2ccc9def25442b9a2c329db5250d2b792cac9c6525cb2a562c1d9c1b25552a142c359b9724c8297a2bf69966248929202b37994b246029ec2a1f9827243829ba2af99705240e297f2ab897af23e728492a1f988123cc282c2a73981a23a7280d2a039915239a28f129669997226a28f029249a2322eb278629119a4321e526a5287f99ef2080264a2827999c200b260e28d1985f206b25602791980a20e924a8263898531f4c24bd253d97941e9323262521960e1efe22eb244d95e11dce22b724d094ae1d72227524a794811d2e223c248294601de721c6236794121d792111232794861c03217b22e692621cb32029223092801c7e20ea215a92821c3c20aa21e092701c17203821c492c21b371fe420ca92af1b361fea206c913a24972b7e2c6a9c4126e02ef42fdba0312ccb33c73438a70a2e31357d36aca770248828ec288395000000000000000000000000000000000000000000000000961470167f138e014429ae2dd02f5a99ac2dac3480355ea3072c9632013452a092291a303931fa9d0b29f72e7130d79cdb28ca2e4f30a99cd628c12e4b30309dcb28972e3030af9d6f28082eaa2fc39e0b28242d9c2e899f8b27a32ce62de19fc926312c562d179f2e26c12bf22c759e17265b2bba2cb59ef625002b872c909ec725ba2a5d2c579f72255d2a262cff9d1425fe29d82bbb9cb124a929742b189a6c246729222bbe9947244429ec2a489631242629b62a359513241929952a2494f4230e298d2a0b94ec230c298e2a0794b82307298b2acb948c23fa28762a65966e23e328662ad3982023b6282f2a3d9acc226828b7291a9b3422b927ee28889b2f2177262b284b9a73209725322767992220f2247e26c998a21f90240226f9973e1f3d2496252897bd1edf233125e6953f1e6023e0241d95dc1deb22992478947b1d69225024bd930b1dc021b9231f93a61c2b21b9229092671cc62030223792521c8920ed211992571c6820b6219e92611c43209621ad924b1c242077211092311c18204f21dd92881ba31f48210a903b1b761f13211b91e424a52b762c639d2d280630b730b8a2dc2bd8323e3453a6b22dfa3439363da726241b28e2280797000000000000000000000000000000000000000000000000d514c11456128c00da28662d732fee982a2d903467356a9e492b2a327633869cef28802fd830219a7e283e2ee92f989a7028d42d632f439d2b28a82d292f1ea00028ae2d142fc79a7b255c2c8b2d1e9bbf256c2bd32c5b9d3d25f12a6e2c2d9d0a259d2a432cfb9ce5245b2a242cd69ca024e129a52b4f9c602483291e2b2a9b43243329dd2a049a49242b29a42a159948241b29822a98983824f2284e2a0d981f24d4282d2aea970f24bf282d2acb970524d228502acf960824f2288d2aeb951c243329d92a2d9440247c29472b52945b24bd29942b69952d24ba29a32b2296ca238129462b0f99f822d728552aac9b3622152861298a9b3d21d32695285c9ab5201826122873997f20a9258127349987202825dc263e993520a2241c26a298a41f1c246e25fb97b31e59230c253e96bd1da922bb2460943b1d372267246293021dde21292481921f1db921c7233b93ff1c892149230e93d21c3a21d022ce927d1ce7206c22d491fa1b9f204b222e91c41a3c2049226590271bef1f9621a590031b961f05218e90381a221fe820ac8e991ad01e8020978d00000e1e5e1e0000c026c32d112fdca05329d130043249a49d2d0d35503680a6682ef4357137839e872e08369737299d552faf363d38249c633022384b39f299443003381439c819442fbe362b389112882de3342c36afa0b22933304431aaa03228262edd2fdf9e0328442dad2eee9fa127cc2c2e2e1c9f3826322c4e2d719d9423f128222aa29ae2235628e129ca9b80241829a42ab49ce0249a294b2b5e9d1b259829622b9f9db7245929ef2aed9c8d242c29e02a7f9c57241e29c42a999b4b240929a32a8c9ac423e628852a0b996723d6285b2a64982b23b1281c2ae296f6228128c3291c956023a528ec2995946a239028dc298993a1239928fb29e5863124d5283b2a938716246329f72a9d108f246e2a1a2c2611db24e22a872cad93f824802a5b2ca19c6224a9298b2bd19ddc227b28d2298d9cde206d263228769a99206f250b271a9a4620d02446263099541f3624d3250998591ed423b22546964c1e4a235025de95191eaa2281245695be1d0222cc2307958f1daa2183238d943d1d6e215c234a94171d322156232b94151d0021fe222994151db52034222994811c5620a921de92f51b23206d219e91a01be51f2f216291541bcb1f0a212c91961bb41fe3205b91811b7d1ff3202592141b081fa520ff9000008a1c841f00808125362c5c2ded9f1c28432f973062a20c2a6c31ac3200a3342c8d33c634e2a2b42c59346a350ca1592d1135663688a0f32e3c36c537aca23d2dfe34463636a2a12bfd325c3463a1e3281030473100a01928972d572fb69e1227f02c442eca9d1426632c902dfa9cdb25052c1b2dcb9c6425232b862cb89c3325292ad02b239db9243a29d72a339d89240129762a059e5e24d428332acf9c4324b028fa29f19b20247128bb29c19afe2353287e29ff9a3824382862295c9d6a2318285429549b612302282a29e09a1d23b727f3283a9a08238327c428289a49238f27be28609a41237127a828c29af3226e27c1284c99cc228427d428fd941923dd27fe2837933a23dd283d2a7d14ae24432ba22c141a9b262b2da22e7a10e126cc2c292ef4a0e823142ab82b5d9e5c22bc27fc281e9ddc21bc257c27609d2920a9240d26d198391f3f247b252397f81eaa2316257e96541e0723bb248a95001e8e22762440958d1d21223c248c94231db7210624d593e81c7721a823ed92c11c2a2144232d92821cd720cf22db916e1c93206722c191551c62200922a091491c3220d2219191221c0a2097215e91b21bd81f77219090731ba01f4c216b903d1b6d1f26214b90371aee1e1321b98ba31a981e8520df8f0000891c8c1e0080a6250a2cff2cdc9ee4261b2e792f92a00c28612fa030eaa01629a230c431bda0eb292a3189325a9e15296530a6312a994522382b952c50952724372c3e2d559a5328ba2e483084a0cf273f2e02304da004272f2da82eba9fd026682c9e2de39f6726eb2bff2c699fc525692ba62c5a9e5525e42a502c459dec24332aca2b4f9c64246729e72a319b0024bf28002aa699ca23602896299e989a233d285a2914987c231e2827297098612305280a2960983f23e027f3284c98d322a627d7280c9898226a27bb28489892223f279e28a3987322e42662284899512295262f282c991e2241260328b3992b220226d527bf99e521a825d4277e99af2186258d27a7982c2173247b263c98b1210129b62977951f2a3f31b1327e9cd6288e2fca306ba23f2073266b28139b2f213f2440261f99761fcb2377258896861f4123fa249696e11e0323cf240596f21ed522b1241496a21ea02280246e958c1e6c2248245c95db1dfc2110247794851da021a823cb931c1d3f2116233793fe1cef2099220c939e1ca32041228592691c7e2001223a92321c6120ca21ec91101c4120a1214791d61b1d20852117916d1be01f4a216790491b941f14215290401b2c1fca20b590eb1ab51e96206c8f911b871e27207d900000741a541b00802324e82a4d2c069d4225a12cb42d169e2926802dd72ec99e1527562ed22f339e4c27642e0430bd9c9626e02d582f119bb125eb2c2f2e049c9925732c9f2dd99db925602c8d2df39e8b25182c3a2dbb9e5825882bcd2ce29d56252f2ba82c939d3725ec2a7d2c279df724702a2a2c309da024fb29812b929c4c247d29cc2a869be4230929462a769a6823b128e129a5990023602888295699cb22252839292e99b322df27fd287c99b2228927c828dc99b72238279828e1999c22fc266c28c9996622bf2646289a991a228c262528ff98d6216f26172873988c2133260028d59766210526cf279f975e21cd259a2794974d21a02564277c9721216c252e27a996192168250d279f96c820ed2452263696411cb52047228691a70c421a681c49832a1cdf1ff420e1919d1e2722f423ab94281e7d224424b194151e76224624a394ec1d352228242e94b41d0922032407949c1dd921c8234794a31db02191234c94ba1d932170235e94941d69214d234194691d402134232094211d14210f233e93d61cf220da22d492831cb12088225f92241c6720192261919b1b0c20a82182903c1b851f59214a90da1a471f0f211090ab1a1b1fdc20e88fb81a121f9c20f88f5b1ad51e9820d28e3b1ad41e5f20478d0000b21cca1d00802a24202a8d2b4a9d61249e2baa2c159cbd242c2c292d269c3925992cc12df79b9a25c22c002ee89b7f25a82cea2d319c5525602c852d5e9c5225e92bfe2c429d17254c2b9b2ce49dd724cf2a4e2ce09da824552a052c649d8224fd29982b389d5d24ba293f2bce9c3d247629ea2a309c0b243029972a149bb423e8283c2a4f9a3d23a028e3298599042357288f295999cd221f2854292f99aa22de2719291599ae22a027ef2878999f225727c228cc9989221d27a328b8997722e8268228a9993722aa265e287199da2169264528cb987d2127262b287e983721fb251528f3970921ca25f0271c97f520aa25bf270097f02081257b276a96ce204e252d273e9693200a25d726f1957b20dd249f26d29529203724b725e095601ceb20a722af911519521e15209a8ec71a21209621c990a71d8f21eb234f94131fc6211424cb951f1fd02103243c96921ec621e423c095f61da821a323e294891d7f21772338943c1d3f211f23fb93031dee20c822a493fd1ca9206f229b93ee1c732025228493bd1c4e20ed21b0927d1c2120b1215692321c04208321ec91c71b9d1f31210d910d1b2d1fe3202e90ac1ade1e9f20e98f5a1a8d1e6520d18e711a7b1e3a20a48f261a3c1e4720e78d061afa1ded1f1a8dc71a33267c260796612c2730ee3044a8dc2c79318c3299a8af3083358136b2ac17319f35b536f5acdf29382dd62d37a65026252bde2a38a30326792a3f2ab0a1902a812d9b2e65a6a6306f344c3501acc230b7346135edabca2dd731ee322ba8c32c853074310da6402db030613114a6363060341a351da94d301e33d733b5a9f92f36319731bea9c9304633aa339faab93229372038c8abd12e513457356da44d298330d1312f9375267f2c822d1b95e225d02bd62c52987424112a562b87947f24a928fd291491842355281029ca066e295e2cb22c4b18a4308f315231afaafc3152346e3453ad503212358f35f9ad332ea031f73164aae526ed2c9f2d5aa1e8222c2b6c2c379bb21e42260f28ff96251f59248b250f97141ebb230525aa95141ea2230825aa95401e6923e624d395331e4423c424c7959e1de62284243c95651da72259240795cd1c28220f247994a41cdd21ac2353946f1c7a21312322942b1c3921e4224c930c1c05219c221693a81bd1205922b492561ba62028226c92ef1a81200522ad91b01a6120cc217a91741a43209621eb90541a1c204d21d390411ac31ff9206a90731a3c1f9d208d90331bbc1e54201591401ad81e59206990e019da1e3d2026900c19751e3e20208fcf1abb1e4220ba9200008225b9250080c82da231d23273aa17301d34c3347cad66334c37343846b1a6326e368d374aae4c286329f2294725ae24bb255a26f02234231c257926a521022a202cb52cb326e0321f36063748af8133f336fb3781b08c2f9133813413aaee2deb310233dea76d2da731ad325da58d2ea132b93337a7e92fed32d33379a982303733f73341abe2300a34763411ac2d31963429352aacaf300f348c3437aa372bbe30cf311d9ec328fe2e4c30fe1a6227f22cff2d0c1e74266e2b6f2c491d9b25d82a172cdb1ded26132cd02c3c1f83305331453144ac0031403253324bad12317f32ab3283add3303932443284ad4f2e9430de3037ab4628952c7d2d5ca30d240b2aa52b2d9af8214f2846296796eb20ba26392863967d20b4254127d495ba1ffd246b267495971f9524e7253796b21e2f247a257b95fe1d9f230e253f95ad1d0023a524f894251dba225f248194f61c6d2240241094e21c2e221624ff93ac1ce721cd23a7938c1cb521812372936d1c72212f233f934e1c3921e0220d932b1c07219122d392fb1bdf205b228992781b8c200122b291b91a3b20a9212091311aed1f39215f90c319951ff4201190a7194b1fc420578f8319141f8b20298f8519031f4f208c8ed518701e3f20bb8dbb19661e2820718fbb08fb267e27df82c32e7132d8330facc53098344c3543ae523402389038cbb18733c136d93755af59296a2aeb2a3f1341255c27322886202224502656279c205e2bb82c7a2ddd22ba336736633738ae3a349b375f3898b047304f3416355eab892eb532f83356a8892ded311e33c8a5922df5311c3322a6712e1232fc3246a80f30b932873388aaa6305a33123401acc5307d331c343eacc9305f33fd3364ac8130bd323633c2ab9829a12ee02f009e29283f2d412ec11f87263b2c142ded1f3c25d82a2e2cf21eca26d22b792c7a1fa728752c302d348c953062314b31fbac0e31e231d2317eaeeb30c031e03175ae982e57307b3024ac2328cf2b942ca8a27a24aa29802b2c9cc3222c285d2928999b227c27c928c8992e22ef266d28ce9a2021e625ca27c69859206825ef269c97db1ff72488266f96211f832407263d96d71e3b247d25fd95331e9b23cb246d95c11dd7225c240995661d85222824ba94171d2f22fd237594b61ce821b3232094661ca2216323b393301c522105235593fc1b0c21b922fd92bf1bd9206c225892b21ba8201a224d92681b6b20b92110920d1b1b2067216091e51ace1f31214291b61a971f0621bd905a1a771fed2020903a1a6b1fa820628f0c19e41e8920d88ce8199d1e4220568c7518e92754286890f92eb2321b3416accc30ab346a352aaeea33913750386bb1df3250366337ebadab29ca2a4b2b3e240225ca274b285d1eac2378264a2710a0932bfc2ce22deba00233eb35f436a1aed63333372f3842b05b306d34433580abb72e0d333b3475a8482dda310d33d1a5ef2c8631a232b6a5202d6d31813239a6792edf31bb32a9a84230ba327e3355abd0303933d9338dace1301e338433e4acf830b432173343adf83032325f3267ad0831d331d531c1ad2e31ad319c3137ae2e31a6317b315dae3431b93180318aae3a31c7319631b7ae3931cd31a031dbae3a31d031a63128af1831a731803143af012f4d305230b2ac3228162cb72c84a2b5241b295a2aa79c7a2368288e29b399f222242839294b99d522b127ad2898995a21a0266f2862989e20bb254d2790975c2033259e26a297b61fcb241f26c0964a1f59248b256196b71ee8230025e1950d1e7623bf244c95971d20238924e5945a1dc4225424af941d1d862233247a94f31c2c220a249d94be1ce221c0236b94931c9121672301946b1c34211623bc93671cfc20ce22b593461cb82092227b93231c78203522c6924c1b2f2079219091751adb1ffc208f90211aac1fee20f68f551aaf1fc0201d9030191b1fa920278e861aad1e4220bc8f0000692073210080e82ed73208340cac8d309c346235d9ad15330f371038d9b03732ed3501375aadba291b2b812bfc21f6242b2869286a20e923ff26ab27eb1d4e2b142d022ec6195f329335993635ae6a331637283822b0483077345c35dbab7e2ee4322d344fa8522dea312333dca5c82c5c31843289a55d2cfb3006320da5f52c08312b3294a6b22ea931803294a974309032193397ac1731d032e33288ad2731b332f632e4ad2b317732a0320eae3c3141324c326eae4d3114320a32a9ae5731fc31de3103af7231f631cc314eaf7631fa31c831a2af7531ef31af31c8af7b31e7319e3110b05931ab3168311db00f2f1b304d30efacbf27212b1a2c3ca245252629542a1a9e08247228ab29369c7e2340285829d49bf522d827e328e09a9e21c32652288d99fa20bf259f27a39874205025352726982e201c25cb26ca97891fa724182605970b1f2b24492590969f1eac23f1242b96271e4823ca24bc95e21ded2297247b95941d9d226b2433952e1d342232248994d01ce621ee2336949f1cae21842391934a1c602139238a92cf1b0621e922f491151ba52061226691911a0c205f21a390201a551fa820f58fe419361f9520a78f131a7b1fc820e48f6b1ab21fd0202b900d1a791ffe20dc8f191b9f1f2a21038e00007c2099210080862eb432f73376ab1e3056341f352cad6932b236bd3735b0c131ad35cd36cbacd729da2b3b2c470d8425e928fd28ac1873240128432888164c2b612d432e1f98d6313d353536dcac8a326d368c378eaecb2f32340835b6aaed2d8432e33319a8052da231d232d0a58f2c1e31313205a52b2caf30b531d3a4062c91309531e3a49c2ca8308c3161a6b22e5b31f531f4a98a3030328f32efac13317932a33217ae35316e3276328bae5a314d32513207af75313532293279af86312d320f32e0af993132320f3212b0a4312e3201322eb0a5312832ec3158b0c0313432ef3196b0ab311532d3319ab0222f26301f3063ad5c27fb2a012c8ca238242a297d2ae29c0f2489280f2a039c7f2359289e29909ad7220b280f29fd990f225027ae284e99592178264728ae98ad20c625af271898fc1f2825ca267197ec1fc3243b26ef96eb1f8c24e725ee966f1f3a247c258296b41ed0230d25de95201e3223b2245c958f1dc5226b24de94421d752236249a94f41c312207245694b01ce121a3231a94791c8e214123d493361c3f21d8225f931f1cfb208122c092b61bb8202622e191071b5e20aa215b91951a20205121a5907a1a03203a213590991aec1f092149909b19401f0a21a68e601a161fbf20d78e000005211c2200802d2e7132b6338aaa152fe433ad3459ac1e3194357b366eae04311b352e3607adc3295f2cdb2cb2a1792590299c29a3980c25dd2806298f880e2b9c2d842e949901319634753535ab3a315c352b36ccac152ffa33cb3419aab02d6a32cb3318a8dc2c9631ca32a0a56d2c19312a3220a5ca2b873088314aa4072b1f300f3111a4652bff2fdd30b3a4562c3630f430bca6f62e3131bf312dabe7303732663205ae60318e32a5320faf8e317e328832c3af9f3166325c3216b0b73160323f323cb0cb316332323275b0e03169322b32b0b0f0316e322d32e7b009327632323228b1dd312432d6312cb1b02ea02f7f2f3dad84268e2aaa2b3ea18f24fa28282ac39cd0237928b529d79aff222d284429209a8122af27dd280f9ad221ff2678286c997f219d2643281f9939212026d327de98c32094251727b5984d202025a4260298bf1fce243f26a897481f7a24eb253297061f2b246925f1969d1e8623de242996101edf228224a6959a1d5c223a24e794241df821f7233694b11cb821a923af93671c7c214c2336930d1c3a210823a292c61bf5207222ed91581b9220dc219991ff1a6420a921f090951a27205f2146904e1a00203b217a8f661acc1f1221dd8eaa196b1f1b215b8fce1a091fb5206b9000009a2088210080b12d4f328f3330aabd2ed533ab3423ac0031c535c4366caec5303235423652adfe281e2b922b549baa244f28af288819f42303286728f114722a262dfa2d30a0c830a234863533ad32317f35783680ad9d2ea3339d34b2a92c2dfd315f3373a77c2c4a318e3272a5152cdd300232baa4ac2b6c30713171a42c2b0c30f9305ba46f2a682f8c30d0a3522a402f6f3004a41b2cc22fbe3012a7062f01315e311dac16313d3267321cafb731943291323cb0e3319d327f3288b0f331a4327e32a9b00d32a9327632e9b02532a832653240b13732aa326b3292b15132b1326432aab1dc312132bb3180b1a02ddd2e032f40ac4b25bb29f22a539f36243e29922ae59adb239728df296f9a4a2359288b29cb9ad522142837295e9afd217227cc2894995b21dc266f28fd98132165262a28ba98e120fd25cf27d2987b205e25fb266e980820ee245126f8978e1f9c24e9257797161f4c2490250197a41e082439259096801eb723fa246c963b1e5223b8242896ba1df7227524a995671d7c2225245795df1ced21b5238a94a11c5f2109230d94191cce205f22b692ec1a6b20ef214791d01a44209621cf90cb1a0e203b216990991ad21ff620d38f541ab71fbc20ca8e121a521fc320838eb41a691fed20318f000065205b210080432d1e325e3392a9622ec533a83403acc630cc35d53622ae64301535213627ac4f281e2a6f2a159e8823de26ca271a8d8622eb26c5276c0cd929ad2c8d2def9e70309334793593ac0e319335b5365aad962e963396346aaa012df23146337da72c2c1e31433211a5bf2ba130ab3144a4412b4d30443194a3852ada2fce3071a2e6292a2f5d307fa19029a52e1130dea08a297d2efc2fc9a18a2bc62ecb2f22a78b2e7830b93034ac1b311c321832b6aff931aa32b132efb03932dc32ac3251b15032d832913292b17032e6329c32ddb19032fd32a93229b2b3320e33953262b26b31bc31643164b1102ca42de72dcba989245529ae2a409d52240729322a909bbe23bc28e229a79baf238028a929039c38232c2834298b9b3f229e27e0282c9a5121f8268e284199132162263028ba98eb20e6259727dc988a205d25e7267c983c20f42474262f980320b2242e26ee97a01f8824082689973e1f5a24d5252897a21e14247d258e96f21d6c23e7248a95901dcf227924de946a1d752240240b956c1d332213240d95621ddd21c1230495fe1c4a21fb22a794311ca92006225693a41b8920d221d3918d1b7a20d5215491091b7420d5219290331b7e20f72145909c1a2320a521588e671b481f9f20f18f000017205f2100804f2d0f32533385aadd2d9133913434ab7a30b735cc3680ad0f30f934023611ac1528222a6e2ad79c0d23a526ae279311d42198269227950e7c297e2c5c2de29d163072345935f6abd8308135b13621ad0b2e4e3377340faa9b2caf31073327a7262c0131263281a5d42b8030893188a4fd2a1c300d314da3332a7f2f99307aa29d29e52e4030dda16429862e1330f0a144291f2edb2f19a2ef28a72d0b2fb6a1ad29d42deb2e68a45c2dcd2f5030e3aac5308f31d4319caf2a32e832b53270b1a8323c33f53228b2c2324b33fd3289b2163371330e3327b38632e2326b32dcb2083099307030ccafd728fe2bd72c43a538244b294f2b689c7d243a299e2ab09cfa23b2283a2a2b9c9c235c28c129f39bd3220d283f29be9a2a22a427ec28179adf215427bc28cd99ac21fc2675289b99192147260a285399b020b0256527e69886204a25e826ba985220e124792683981d208a2409264c98c21f3424a1250d98ec1ee3233b25d796541e5223e3244196c31de72297245e95661d8a224d240895111d38220d24b894c51cde21a6232d945b1c75211d232293f01b032196220d92591ba4202b229a91e31a5720df21dc90ab1a3020ab21b590a91a232061215390071ad11f4b21d48f131be81f5e21fe900000a51fd7210080872cc8315433eca85b2d8633b334bbaae42f5e357e36f5ac432fac34d035e5ab1228e52a752bd49cb722842724288d0ca321cf26e1275e0e4729922c662dc50ca32f60344035a8ab68305d358036aaac852d2e336634c1a8402c8a31f032a4a58a2bde3023325da4132b6a308b31caa3a42a1030133150a33b2a872fb730dca2a029cf2e373032a2ff281c2e7e2f38a19c28b32d092f8ea04d28482da02e02a04728fe2c2a2e78a05528072d382e3da23b2b1d2efd2e57a83e2fa230cc3015ae2631e7311032d5b0023286323d3210b2d4315132213221b25f30fa30df306ab0052c8f2dd92d2faa7425082a792b3ca092244629c02ac69c3524f1284b2aa29c3924b228392aa69c02247a28d6296a9c332330286829ed9b6c22d8270229b59af8214727aa283c9a7621b1267628b499e02045263b2818999020d325b927c498522063250927c29823200725a8268e98eb1fce244d265c988e1f8f24f525e497081f2c247e255897331e5723d6242096701d61223c246095151de521fe23bc94ff1cbc21bc23a894cd1c8d217a2334949c1c77214a2309947f1c3c21fd225d93641c2021cd22b292471ce3205f220a92fb1b9120c8212f91411b4c205221b690bd1a102032216090bd1a08208621fe8f00001e201a2200804b2cc6315f33aba8d42c2b33853411aa2e2f273547369dac942e79349b35f7aa9527cb2a652bc89d3f22592718280e8f70210d270a284d101329962c672d0398062f2b340a3572aa0f300f3522362fac1a2d0a335e341ba8fb2b6b31c53285a5342bb430de315fa4cf2a41304a31e2a36a2ac72fd53010a3de29232f783021a24029832e0f3030a1f328102e7f2fe4a0a828c02d362f57a05d28682dda2e11a01d28122d4d2e339f8427962ca52d949e3a27502c5b2d2fa066283f2c5d2d09a4772ae12cc72d10a8c62c6f2e1b2f9dab5d2c202e8e2e55ab9b299b2c352dada70926f729702bb0a0e4243929882af09d85245129a62a779c3e2404295f2a319c0b24de28422a399c97239028d229ee9bd22240285f29209b352201282329229adb218c27d428c9998221da265d287199fb20522609283499a020f325a127d5986e209e253627a1983a204625c8266a98db1fe12447261a98221f8224c72574978d1e222453257996451eb723fa243296221e5923ba241096f41df2227b24e295a91d8422422498956a1d1322f9235a95ce1c822155237a94231cec207c223e93ad1ba320ed21da91831b7b20d9214d913b1b7720ff21b290731b4e20da216b90f8196e1ffc20148f691b5d1fd920659000002120272200800b2c94311a3348a8be2c6033a434b1a9b22e10353b361dac292e5c347a352daa8b27112bd32b2d9ee621bb273c28ff91f720fa2616287c04d6288f2c5a2dea98812e1334e8349aa9862f013509361eabca2c00336134b5a7732b41319732f1a4cb2a8c30af317ba3632a33303e31aca2ee29c82fd030dca18229052f5e30c1a12029562ee92fa5a1d228d32d542fdaa19228762dde2e8da12128012d542e8ca08627a32cd42d6f9f2c27682c8b2daf9ef226372c4d2d149eb726e32bef2c429e7c265d2bb12c829f2d27742b9b2cc6a11026cd2a2e2cb49f54259a2a222c449d22250f2ac32bc89cb8247d29012b219c6c242529bd2a5f9c1a24e2285b2a0e9ccf23aa281d2ab79b92238428e129e99b33235828ab29859bb6221a286629039b3d22ad27fb28849ad32126279b28169a7521a8265228029a26213b26f927ab99ce20c62553274a9991205d25d72607992020e02444268b98981f6c24ca252e98161f0e245a25ce97821e6e23eb24cc96d81dd4228a241b964b1d3d2225243b95be1cc521a0236b946d1c70212f23bf93831c3721fd226393ac1c1b21c52220939f1cf12075220c935a1ca620262225922c1c7920e8216b91ca1b5320af210f91341b2b2094214590501bc61f0921c0900000cd1fcf210080522b4431b732c0a7482cfe326c34e5a86b2e1d35513657abe42d6334883592a92927ed2aab2b759dd521a12746284894cd20fc262228b1958b28682c3e2d3ca0f62dc533b534cfa9f22ec534c13528ab902cb5323a340fa8502b1d317b320fa5962a8a30b131ffa3282a23302931c7a2bc295d2f993051a24329a52e2f30cba1e128362ee02f5fa1a628d72d612fe8a166285c2db32e18a11b28f82c2e2e4aa0a127bd2ce62d1c9f2227702c8e2d3e9ecb26242c292df29d6a26972bcf2c579e61265a2bb62c4e9e2926082b912c709e9f25832a262c319e6025392ace2beb9d0a25f329932bfb9c87248f29022b389c3c245729c22ae49b332414296c2ad39b0924cf28262afa9bc923a328e929119c6b236528ab29169c30232a2856295d9cee22ba27f928679ca7224227b9286a9c4222aa265c28279ca0211326d527779b1221af253527719ad1205f25d2261f9a4820ff246426f598b21f9124f6253d98101f30249325c7978e1eb3232e25d996001e2323d5244596a01d882274248f95251dff210d241695011d7f216f23f294a31c1121e72252943e1cd82097226d93011c9e2082228f929d1b5a2035223c926f1b3720cb21ab91811b092076212592011a311f6e213d90181c4d1f782164900000661d7f200080932adc30073226a7cc2bc832463475a8ef2df73424369eaa992d52346f3523a9f926092bd82bb69dfc210b2883286f93e42044275428868d3b285b2c322df99d7b2d5e337a347ea9352e6b344b3539aa1e2c6632053429a6e52af53045322fa44f2a54307331f2a2f229ef2ffb30e2a29129422f8f30c2a23a298f2e2630a4a2e328fb2d7d2fc3a27528852ddf2e29a103281a2d582e31a08e27bc2cef2d779f2d27762c9d2d489ed826332c4a2dfe9d7b26ed2b012dac9d1f268c2bc82c039dd725372b942cc89c8d25dd2a552c8c9c4125842a212c4d9c2425352ad72b809ce324d829752b479cb4249b29332b629c9d246429f82a4c9c78243129c22a2a9c2c24ec28712a1f9cf823bb28472a2a9c8b238028fd29279c272336289729249cb722cf272529c69bfa214127d328959a8521c1268028149a22214a263528a799a920c6259727229961204325ef2612990f20c82462267898251f4524d025de97691eac233025b2960e1e1723cf245396d71dac2277241a96b91d2c223324a895591dc021c423fc94ea1c692155239494a01c2421102393934c1cda20a62209936e1c9a205b2241938d1c6720f021f793ad1c5720aa2118949e1c422067214d94401c06203b217b92c51b731f0c219b9000008b1e672100800129702f9f3073a44e2bad323434b4a60a2e6035b9368ba93f2d38345735daa7d026a72b6c2c1e9f0e227728c6287f963f21df2797287294f227562c412d0f9ef92cdb32363490a88e2d1b34ee3469a9dc2b4632f53353a6c62add3023327fa4282a35304c316ea2be29c92fe030ada15429322f823044a1e1287d2e1b30d2a06728d22d522f1aa01728502daa2e0ba0cf27e62c262e14a07d278f2cb42d1fa02c27542c662de69fdf26172c242d919f7b26b22be52c239f28263e2ba72cc79ed525e32a722c6c9e8f258d2a402c6f9e6425402a0f2cf09d28250b2acc2bae9de524d629842bd69ca424a929472b1c9d6f247029092b229c41244429cf2aed9b05241429902a7e9bc323da283a2aac9b35238e28d729879b17235d289f291b9ce8221f285a29639c7a22922708291d9cdd21ef2686281e9b202155260b28399a7f209e2533273499332006259226dc98e11fb2242b265798561f4e24b2250a98921edf233225dd96431e4923c7243096d51de3227c24c395801d87223a242095491d1522eb23ed94f71cb3216323a094ab1c2e21d8221694531c9520162292932d1c56208021d792b71b15204f215192701bed1f2e21ac91ba1bda1f1721e491f81a751f30212290771cb51f1f21d1930000cb2586260080d526542dfa2e4ea12828312fa830dda3cc2d34359136cfa9e42c6f348f3536a8f824112951294c9729223a25ac262d0cc11e4525032794884927532bab2c529c432d7333913492a9e72d7334733515aa832b1132aa33d5a5f1297630c03147a45129ba2fee30f4a03229622fa530ec9fec280e2f6c30819f9f287b2e1b30919f3c28bb2d512fe49fee27f92c702e24a06a27912ce22d15a00427542c792dba9fa6261d2c262d529f6726cf2be82cb09e1926752bb22c5f9ed4251f2b802cc29d9f25f12a5d2c3d9d4425a22a362c9c9cfe242f2ae92b5f9c9724c229672b849b65248c29202bb39a4c246229e82a959928243f29bd2aee9809241729862a3e99ba23f228522ae4999923d428322a399a4523b2280f2ac69a1b239528e5296c9b68224828b0296b9bd62174271d29c29a5f21d3268528859a042179262628179a9420c32588278f9960202825f32650991020b9245726b498111f2a248225c897721e85230325bc962c1efc22d9241996fe1dcc22a524ec95d01d65226424be95c01d22222c24af958b1dd121b9232a95281d6821fc22ce948f1c03216022fb93781cb6201322d393ad1c8d20e22118949f1c3f20ab210b949e1c172036210b945c1c221fd020cd940e1c241fcf2044910000dd2413260080ff27422fb8303ca4042ac9314c3309a8402dd4340c360babb12c14342135f8a8b725d9294a2ac79aec20c42503278f8d5f1e8f250d27098d8927c52bc62ce59c002d6133883403a9e22d7b347d35e6a9592bf1318e33bea648291730413169a2d028ef2e6d3036a0d128c42e4c30589ff428e02e57300ea0c228882e1f30cb9f05288e2d092f7e9f3b27ad2cea2d8e9fbb262d2c3e2d699f4526b62bdf2c8d9e0926612bac2c4e9eff25122b822c9a9ef225d12a632c8c9ec6258c2a3a2caf9e81252e2a012cc09d2625df29a02bcc9cc0249929462b3e9b92246f29132b6b996c245e29f52abf984b244529d32a1f982f243d29c42af69813243129bf2a5f98fe232529b52a4a98c32317299f2a9a988b230529822ac0996a23e7285e2a549bff229d28ee293f9cb5221e284f29739c472207277928859c53211126ad27ab9b76205725cf26ec990c20cb2440262499821f7324d4255898321f25247125ec97c41eb523152511976b1e3723ca245896f41dc92284243695821d442235248394141db321b4232894b41c3521d222b4935d1cdb2042222593421c9120ef21f9923e1c6620af21f292431c41208121fb92231c18205b214f92021c012033219092661b7e1f222163903b1b611ff820b29000009b241f2500801a28c82e5d30eca487293e318d321aa7e72c9634a13593aa7b2cfc33fe349ea84e257429d529b199e5206725a026878d281f4125b126468f33275a2b932cad9cf22c8e33a934ada8ad2d7d348e355ea95e2aa731343368a4a428c22ff4301ca137284c2e0530619f2428c92d6d2f409fd326ff2c6e2e349d8f24872a852bb1967c24242add2bd69a21256b2a182c129d1625532a202c079d0a25292a052cfb9cf824eb29c32ba19cc524b629772b2d9c98248129332b869b71245a29f82a459a58244b29d92aa4994a242e29b22a9a98582417298c2aa9985e241129942a2e99662409299d2ab8985d241c29d42aae9855245229262b29984c24a229a02b48976624cd29d02b75966724de29c02b3a982724b229862bdd995c232429df2a0d9c4a225328c5295a9ccc216327d828039ce8205e263628839a9020d725d127cc99762073253e27ab994520f12499262f99e41f7124eb259198351ff0235925f097641e3823ed24ad96b21d97229624fc94451d292241245194271de22116243894411db721bc234d94081d90214e231f94d91c3b21c722f093671cca205422b6921c1c7a202b224492881b3220ff21be917a1bff1f72214791f91a801feb205191371a171fd9200990c71abf1e6f20468f00003b1fe21f00800026102d582ed8a1d227772fa93006a5912bcb323d3454a8cc2d5e35d03613a5bc2e1036a337d89e9a2e1036a337f791d32f21378038f49f603039386b396fa1322fe6367138b8a37c2ce233fb3472a5692930304c31caa338284b2e283099a18b27272dae2ecba030279b2ce02d91a0e425032c052dd29e6924ea29572b9b9c5d243829b62ace9cbd2470290b2b7c9de0249229322ba59dfc2492292a2b0d9ed0247229fb2a929d86242f29c22afb9c43240f298d2a369c1124f3286c2a1e9bd523e4286b2af9997f23da28632a4b997623e0285a2a6d988923d028532a6296a623ce285a2ac693d623e228532a6d901424ef286d2a5f8767246629ee2af5075e24422a052ceb0dd624f72a7c2c8e8ed824f32a8a2cef9b0125152af92b07a01c24b428792a8b9fe0211c27c628ba9c7220af256327679a7d203b25b126369a0f208724102628992e1f1824bc255c98651ea92397250b97171e02231c255d96e71d87225a24d595911dfc21c6238095591d9f217a23fc94181d5c214c23bf94ed1c252135239794d51ce720d5228194a61c95200d221294461c3e2082217b93bc1b172053215592751bf11f2b21af91511bdc1f16219491731bc01fd920ae91231b5a1fde207191eb1ae11e98206c8f000079199b1a008017237d2a1e2cb59d4127722ec42f0ca4bc2863305f3126a5542a0f328933cfa5022c63339a34c5a5342c05340c351aa5872d1535493616a6ff2d9d35f1369aa65a2c1a340d35c6a5a2297630be31daa41228542d0f2f03a3d926a82cff2d51a111264e2c762d32a0d925f62bf42cc39f6325f82a552c269f1025f4298c2b019f8c244929c92a8c9eac2420298b2a419f8a24e228352acb9e4c24a228ee29f29d30247828ca29529dea235e28a129959cef234b287f29989c962321284e29649c9c2306282529689c7523d0270029519c4923a327d728389c44238d27ce28009c2e238327da28809bf222b927f8284b99c62202281c29e3920c23bb28df296114be24072b7c2cb21a76260b2d922e0318bf261e2db42ee89dcd240e2b792cada02e225928b129ac9dbc213d263728439d9b20e7244026ac9b13206924a425f298281fee233825e197db1e6323e7248d97721edb229b24bc96f11d62225a243596801d022228246f95301dab21f0238a94f91c732194231294d31c2c213223e693a01cc820ba2293937a1c9020552255936e1c6620f2214193561c3720c1219c92201c0a2089214a92a51bc51f692165914b1b7a1f41212691061b3e1f1621f590041ac01efa20748e491a5d1e7420098e0000e217471c00802e22a529122b529dbe257c2da22e14a21327692e0a307ea357280630f5303aa43029a730c9312da49a29e5303f32cda26127612ee82fb59f09202a290b2a219978245e2baf2cb29f5e27552dce2e2da3bb26fe2c6f2e5ea204263a2c732d03a1da25942bc92c8ba07425172b682c15a02925882a142c6e9fdb24002a7f2bb89e84245e29ce2a3f9e3324db28252acf9d07248628b929589dec234b286f29ed9dca2324283c29639daa2305281b29169d8f23e5270329979c4223b327ed28689ce7227427c228fe9bcb224427a328dd9ba82207277728549b3a2299263f28db9a5b223a262228a49a1a222f262c28609a2222a325ac27109a6521222589265599642065278228b2964a292f302431ad9dd92a023186328aa30d23e428232a459e3a2138243a26879b35202a24c0256598b51e78230225a196aa1f4d230b259397141f2223ca24ff961b1fee22ab2406979d1e9b2271248996671e65224124f795c41dfa210e240c956b1d9721a1237094fe1c30210e231694dd1ce2209222f793931c9f203d227e93671c7b20f9213693381c6120c621e992081c402099212592c11b20207521e991671be01f3421a591381b7f1ff5201891251b041fa2207291c41a851e67206590bd1b4c1e0220b3940000241b2d1c0080ec238c2a192c999efc245f2c712d93a09b25ff2c392e4da17826cc2d332ff0a1e026122e9d2f88a18c26c52d492fb7a04c25bc2cfe2da19f59248c2baf2c3e9f77241c2b812c39a024254d2bb12c02a11b25072b8c2c8aa0e624a22a5a2c9b9fbe24682a1c2c909e9824192ac32bd69d5b24bb292e2b0b9d2f246629b32a9b9c002410294f2a689cab23b128e529019c4f2361288729399b202328283f290b9bfa22f6270629e59af422a927d928449be1226127a828309bb9221f278028679b7322dd2658281a9b2f229f263128769af42178261d28e299a2213f26fe27409965211426d027b9985321de25a127a9983721bc25772791984421aa25542750980e212d25b6262498131e74225024f99454104a1b3b1d1787ca18241dd21ed88ffb1d7221af223c950f1f672234242e96a91e8e224524d4957d1e7e223824ae95281e3a221e246395bf1d1622fd230895a01de021c323ec94941daf218823e294991d92216323e694761d64214023c894381d332130239194e81c0b2111230494a01cd520bf220d935c1ca0206622a692231c5a2004224f92a11b0920a02163910e1b971f4d21fb90c01a361f0421c4908b1af81ecf2040909a1ae71e8920a990381ab41e81200a90261aa41e4620e78d0000d61a461c00809223d829602b189e1524412b762c579e7e24f42be92c7c9fff24642c7c2d05a05d259c2cc02d2aa026257b2ca82db49fe324232c422d509fd324692bb32cc49fb224ba2a3d2c2da074243e2ae42bec9f5424df29672bf29f3c249529142b0e9f1b245e29d02a259efa232b29872a859db823f5284c2ab09c7923c028032a1d9c16238428ba29019bdf2244287029679ab92216283d29449aa322dd270c292f9aa622a427e728929a9b226527bf28879a69222827a228569a3622f0268228239af321b62661288b99b6217f264928529976214226342817993a210c261b2893981f21d92503287c980121aa25cb276198fd20862594275e98da2047254c273f98ba200c25e92623984b20852426268497fe1cdd210b245f943d195a1ffe204a908d1a811f9f205d91df1c6721f7224394b21e12223b249e96981f05222c2481971a1fe721ff230597761eb721bb236396d61d942180237095751d67215023c794171d2321fd227594e81cde20b8224b94cd1ca6206b223494c01c7a202d2228948a1c592003226f93551c2420c7211893131c01208e213692b91bb41f3c21e391211b361fe4200891b21ad81e9520ba905a1a851e56207c90571a6b1e26207a90041a301e3020d08f0e1ae91dbf1fdd8f0000802087230080262cae2f7d30a0a89f2c9c306a3154aade2d5d32433359ac3331f735073700b045329a36db37d3b042329836ef37e7b08431ab35e2362ab02d315035613687af8e30a7349235fbad4f2f2533343463ac882d3b315532dba9c92c4f305b311fa8042eab314c32aca8b130bb34b23549ab1130f43120328baafd2fdc30fe30e1aa3f3010327a3213abed3147367d376fac0430a9325c33c8a9e52a1530e330c5a4c82baf318f3211a4d32c5c336a34fe9d782c143368340a10092d4f334634d396782e2a34cd34f1a26f313435c935d3abfb31a234e63402af0e3140322c327eae453030312c319bad392c2d2daa2d4ea93025a428fa2978a04e234a29192b6f9c4c214728b829229a5c1fe924a6260d98011fe2232625b697261e2a23a824c596671e4023d9240d97691e2f23ad240f97ad1dbb2264244096531d73223c24dd95b61c0c22f7233095841cc2218b23f9944c1c6e2119237d940a1c2b21d3223894cb1bf8209422b493681bcf20582252933e1bab202a22bf92e11a872002226992b81a6920c921e291801a46209421b0913e1a162044217791111a841fd820f890151ae81e6d20fb903f1aa11e2920c390ee19b51e3f20db90e819cd1e2a20d690f1185b1e29200c90ed1ac01e5520109200009b17841f00804e2d0e310232b7abc22eab32d03395adb03086343c3534b0663342374b38bdb25f343b38f538bab2623466380f39deb20f34f237ab387ab21034c737a73840b29a332b373d38b5b20131dd34a335fcafae2ec432fb3332aca02dbc31d43229a9be2df431fa32f2a7e82ec832e7335da9fb2f8c32333353ab50307032073333ac97303933fe3357acd9303834ba3473ace130d7334d34c1ac5e309a32263361acae2a2b30f73078a1e528242f5a306c8c97281b2e622fb4199828172e582fc81bcd29ee2e21308d16a4302b3254322dadf330613270327faee1301a325b328bae80305e3152316bae582de72e212f78ab70280e2b2e2c33a540249e29f62a669d3922c828f8291899a221c427f2284b988b2068262a287197eb1f2625d0267c96fa1e7324ed258096f71e2c2451257d96571e9f231425e895c11df422a8245c95491da6225f24ed940a1d62224124b294e01c232214248b94af1ce021ce235d948f1cab21822381946e1c6f212b232194491c3521cd22fc931c1c01217622a893bf1bd0203322c8925a1b8220d6216f92cf1a3b2085219391671a06203921e190ea19a01fe42082908d19381fa920d68f5119f01e7320818f7819e01e3b20b88fb7185e1e2720a88e1a1a521e16208c8e00001f17ed1f0080c22d9331bb3230acc62f9f337634a4ae84312535ea3506b14134cc379038fdb3f8347c382e3950b4f934a6385839a7b38e342d38da3823b386341338d83879b34d34ba378738d5b3b7317b354536a4b0c62fdb33943436ad362e57329b3394aa832dc631e832bfa8a22ddc31f632daa8952ef331b532dba90b3083323a33a6ab95301833c23398acaf304133ec33d4acab3013339933f1aca630a6321433ecac65302e329c3287ac05309231e4313eaacf28b72daf2e0f9b2929a32dac2e3f9912302031383103abad30e931e031beadfe300c320a32faaed030a4318c31ddae9b3065315831d4ae7c2d132f472faaabfd26c32ac82b6aa242245829a52a699d992232285429859a3e227a27cf28859ac821ea268c28b799f620f625f327e79841206a25f32672986c1fe9249126c1970b1f852413265c97d71e352473252597391e4923a124da96d11da1223d2414965f1d5d2214249c950a1d1322de234495a21ccd219523d7944e1c8e21552341940b1c4021fa22fe93b61b0221b7229f93731bd1206722f192611b93201d22e092551b5b20a9216b922c1b0d20592147920f1bb01f2321c891db1a861ff7209d91681a591fdb208690571a511f9b207a90ff18ce1e78205c8d3f1a8c1e2c20ff8d0000c318d41f00800c2ef231373391acc42fb233833486ae4931ff34c835bdb0e9337e37633834b376342738db389fb364343738ed38a0b30b34a43781387ab3163494378f38ddb202346437563813b39631773554364cb0f42f0634b63439ad402ea332fe339eaa222dac31d3326ca8dc2c4e3162322fa8422d42313732ada8b12eb731773224aa483096323a334bacb730f7327933feacca30eb323a3357add8309332fa32adadbe3027328532d3add430dd31013234ae0031c231bb3191ae0631ae319831e1ae0a31b63194310baf1031b9319c3138af0931b8319c3177af0b31af319131c3afbb30463115316aaf792d312f712fa6ab2f27092b252c64a2e324ff283f2a7c9e302356287a29829be92228284529389b9a22ba27da28869a772191265b286799a120ba25552750984d2038258f2640987d1fc52405266697271f55247b251197ab1ed123f52497960b1e6423b3245096861d04237a24c595451daa2240248195071d67221b244195e11c1122e4231995a21cc3219623d794871c7f214b23fc94741c1f210d236794691ce220c9225c94511cb920962206944f1c7b204b228b93721b35207b211992921acb1fe02061912e1a891fcf20b690211a771f982054902f19ef1e9320bc8ea51ade1e6f20218f0000711f2a200080332e2d324e33c5ac9b2fa033773463aef630dc34a23573b02e3315372638a4b21034c737a038f1b2f433e637b33875b2563328374e382ab283332e3756384fb24f33f5361a388db2443152353436f4afbf2f0634c734faac112e983205346caa222dc231f53291a8a32c24313d32fca7662ccd30ba3193a72e2ded30ca319ba8c32e77311632c7aa63306332da3204ade7309e32d23205aee4308832f53225aefe30573296328eae123121324332f1ae2131073201322baf2831e731d0317faf3c31d631b331c2af3d31cc31a33108b03431c1318b3126b03f31b931773155b0ca303231e83006b0782d7f2ec42ef4abe925042a252b17a16524c628e129959d752363288829519c7223412855294f9c1823fd27e728d09b8e21c0264f281e9a9620d125a027ca98042064256227329826201325b3269198aa1f9224ea2501980c1f2c2437255d97911ead23e124dc96121e4223b7245796ba1ddd227f24fc955d1d842249249a95ee1c152212242695981cbf21b9238a94631c7f2153231694271c3c21fd2245939e1beb20aa223d92e71a87200d22a791801a0b205221f590331a8c1f0c21ba90111a6e1f0f21a0903e1a7d1f05216890921ab01fde20a390e419611ff3207e904b1b801f102126910000da1f5f200080d12d04321b3365ac0b2f3f334534ebad9630b93478350cb07b32c536df37cfb1463333374a3836b234334b3767380db2933294360738b5b1a8329736e23797b1793260369e379fb1e9300b350036b2af442fb3339634dfacb92d3432923339aade2c6f318d3231a8612ce830ef310ca7ed2b80306d3127a6d52b5d30423115a6a02c82305131f7a7c22e5731e431f7aa79301e327a327eadf030543283329fae0e313f325a3211af363131322b3294af513127321a3204b062312032083224b06d311a32fd3154b074310f32e7316db075310a32d13195b08a310c32c731cfb0d4305c312a3154b07e2c192e632ea9aa8e257129c82ac9a02c24dd281f2ac69df8237628d929d69c43233c287b29ff9bc3220a280f29729b18224827ad285e9a3e2166263f287a9991209d257727c5980b201825a0263998e81fbb242b262198fc1f8924da252c98521f2e245925a697791ebd23f324c396d81d23239a241b96621dbe225624a095151d61221f244f95cd1c1622e4230495891cc2217e23bd94501c722115234394191c2521b5220d94db1bdb2054225293621b9a20ec217692e91a4e208521a891871a1a204b21fa905a1aea1f2d21d890901ad71ffb20a2906b192c1fee20098f491ad21e8b20098e0000ad20212100806c2dc031cb32e2ab932e1733333456adc02f3234e834bbae3d31cb35c5369fb0573275369e3781b17d329d36f93773b1d931f1354737d4b0b031c935f3369eb046316b3589365bb02e309834733514ae992e5a3369343dac422dfa31543391a9b32c6031893250a84a2ce730f83163a7662b55304b31f4a5d42afd2fe7307fa5502be92fdd3017a6332c1e30e630f2a7912eee30693182ab8b30ed311a3218ae3c315d326332c2af6f315a3266322eb07631513243325bb088314632283291b0913139320a32c1b09e313232f731f5b0ac313132eb312ab1ab311032b93152b18430f930bf303db0f92a062d512dc6a89e24c829a42be99e3424de283d2a1a9dc3236b288429469c3123242822292a9ca022a427ce28ab9bf12112277c28e19a63218d263428ef99fb20fc259927c499b2206525db266f99542000257d260399c61fc42430264898381f7124ee25f397b51e21245c256397411e7423d0248996b51dd6227724f695461d61222c243695ec1cfc21d6239694931ca5217d234394631c642129231694281c2d21e722bf93e01bef206d22e592631ba420f8217792291b6b20ad214492d51a29205221fb91731a032031214891c91ae81f0e212c91e1196d1f2721f98e3c1b0f1fd120269300005320b3200080212da731bb322bab122ed8321234c2ac342f1c34d53427ae1331ec35f9368db0ff317e36ae371fb103329236fa37f7b08931fa354d37bab06f31e035043790b005317a359e365cb00230823468350eae472e1e334a341facfd2caf311833b4a9632c16314d3226a8e82ba930c33108a7552b403040311ba6e02ac92fcd3088a5412a322f6430dba4202a272f5730c2a4862b852f6f30e7a6f42d7230c33050ab8230c031d931cfae6131553256325eb0a7316d325432bfb0bb3176325c32fab0c531743254322cb1de317f32453282b1f0317e323732beb1a7310e32f1318cb1a52f5f3050302dafca28072c892c9da5d32441298b2a679e652403295a2ad79cc1238528ce29459c252340286929239c982204281a29439b0a226527b928a69a6221cd265e28ed99002161261f288299cf20de259d2791995a202825af260a99d91fc82428268b983f1f7824c9253298c01e2d246625d097711ed6231a2575973a1e8823da243597f11d29239924e196771dc02258245496161d432205249a95941cac216b230b957d1c2d21d822b094331cce2053222694571b7d20f821d792051b5520b0212592af1a0d204d217991891ad11ffa20fb90901ac01fb8204390151a531fab20368ff81a5d1fe82087900000a31f58200080e62c9e31bf32b5aad12ddb321934b9ac202f3a34073530aedb30f13514376cb08c315a369637d1b095317936f037c5b03331fd3558374bb03531f23528374db0f430b835ec363bb0e02f963488350fae1f2e1533463431ace32cc7312c3350a9252c053127325fa7962b893095311ba6f82a29301d3137a5442a892f9e3056a4c829f82e4330aca38f29892e003010a368296b2eed2f7ba3872a7e2ec22f8ba6062db82f443074aa123039315e3161ae77311132fa31e6b0e23185324f3271b1ec3197326232a5b108329a324532ebb1fb3183327c3209b2f73098316a3115b1eb2c6f2e972e33ac13262c2a572b93a16c243329852a9f9c3d24f528152aab9c0824b528ef29e59c8b2378289e29cb9c252323282729569c46227127bd28439b5321c32671282a9a0f2140261b289299c520a825382785997d204025ab26f1983f20ed246526ad98f41f9e2416269a98861f7a24ec252498181f4c24b325d097941e0c246e253e97021e7523f4249e96a11de4228824e1956c1d7c224124aa95431d2b2214247f95211dc4219d235c95fd1c2721ba22ee941b1c9220ee21a7935c1b7e20c1210792671b6d20b821a591d61a5c20b8217090441b6520ac21b890bf1a3d2088216290f51aff1fc0217b920000101f41200080fb2c63318032aaab482d7d32ce334aac872e1a34e73493ad8230d635ff360bb027313536693754b01e313636a23715b0b930bc350937cdafd330cb35f936f8af9e309435cb36e3af8d2f7734703506aea72dc732243495ab962c8e31f1323fa9332ce3300e3291a8ab2b5c306a3178a7d02a0630f530dea5292a492f8030c8a46429942e1030c3a32b29442ecd2f26a30e29002e8f2ffea29d28802dd32e62a29e283d2d442e2ca3ae2ae72dbb2ea3a7cd2df62f353077ac403019310e31bdaf0931b3319d31f1b03431c0319b3141b19b302731f930c7b0c42d0f2f0c2f6aad8f28be2b542cdba5b4246929432b829ea4244a29f52aa29d3c24ef28542a249dd92393280a2a8b9c552343289729099caa2204282529579b2d22a227d328cd9ab42134279428489a7921be264d28079afa201f26e327c3999e20a125412758998e203e25d22688996020c924562650992e207c24dc251399d51f20247025c198c81eb12310251e981c1e2623be2413979a1dcc227e242b96431d6d223324cb95de1c1822f5231695a11cc02188239394481c602115233b94ce1bfe209d2246935b1b992039227092e71a4c20ee21a791b21a3220b6217b91d51a29206b213591421af51f5521c5906c1be21f2b2114920000cb1f5a2000801c2c3531483283a9f32c6f32c933e5ab1f2e0634cf343aad09308f35bc361fafb130e7351337c0afcb3000365a37a5af53307135b73644af63308035a1361faf34306535a1362eafd92e6634623513ad1d2da33214346daa202c6431cb3240a8552bb530e83185a6aa2a2d303a318da55e2ac72fd430c4a40f2a572f8b3031a45d299b2e11306ca3d228f52d502f66a28c28932dea2ec7a14428362d8d2e2ea123280c2d322e06a10528dc2c012e56a16028a82cf92d89a36d2a312d072e38a8172c012ef12e69aa642c472ee42e80ab412b722d052ee3a985280e2cdb2c6ca5ee24072abe2bd29ecc245729d22a8e9db92405298c2a009e4024cf28432a669de0238628f329019d762354289829bd9c01231e285529409c9e22de270229049c0b2215278828569b6521822653288d9aa62011262028a5997d20b925bb2773994d205725ef2677991720f3246e26f798a91fb0241926a698271f6924c2255898a61eff234b25b297f61d1a23af2490964f1d46222524d895fe1cdf21dc233795c61cae219c23fd949e1c7d215c2390948b1c622138233c947c1c2e21f9222e94971c3221c5220494691ce8206d223993101c8d20d9213292631b5f2060213791c61a34204d21c890051b002061212a900000112078200080c22b2731423234a98a2c333289333eaba72de533c034d4ac8b2f7735b236a8ae4a30a635cc3616af6b30c03510374caf09304f3591368dae0e305235763678aed82f34357a3697ae792e3f344e3512adca2c7832063404aa9f2b36318d3209a8fa2a8c30a53199a6892a10301331a1a5172a762fa330e7a49829e22e49302fa41a295a2ee62f59a3d028f52d672fa9a27d28a12d172ff5a13528432db52e58a10228f52c372edea084278e2caa2dc6a062273c2c3d2de6a062271f2c222d51a10427fd2bf12ca5a1d526912b9f2c4ea12b26122b462c71a04b25822a132cba9e63250f2ad62b3c9e2f25c6294a2be19e86246429ca2abf9d6e241529682a619d0a24c428032a229d6b2375289c29819cbe222e283d29189c3822e4270729339bbc213d27a428a39a5c21a0263d28349ae8203a26f627ae999f20db25822759995620822508270599172028259f26f7989c1fc72426266898f71e6924ae250898781e11243d257d973c1e9723ea243897281e4823af242097f71de92271249196a81d7a223e243b963a1df721ed23c195a51c6821352397941c1cdb204d22a893c81b8a20ce21d092821b5f20bf2126921a1b5d20e3216a914d1b3520c5212791d719831f23211f904a1b2b1fe520bc900000092046200080fd2ad330d73196a85e2c3b329933b8aa582dc933b0347dac172f61359f3628aeed2f8035a336a8ae14309135dc36bcae632f19355a361aae802f1e353d36e0ad2d2f14355436b9add92d2a34373516ac862c6a3201346ea93d2b13316d320da79d2a74308b3182a5222a0a301331c3a4a929662f9e303ca45b29b42e303002a4f928152ea52f71a39928a42d1e2f5ca25528402d9f2efea1f327d72c1b2e0da17b279c2cc92d8ba031276b2c812d2aa0e226252c2c2df89f7b26b32bd92c819f1b26432b992c119fed25f52a562c879f9425b62a2b2cc69e8b25752afc2b0b9f1b25ea29702b339eb3248129fc2af99d322411297f2a559d0724cb28382ae49ca6239c28f829a59c50237028b429709c022343287e29419c852206282f29ea9bfc217d27c628449b8221e9267128b09a35216f262828529afe200a26bd27109aae209e252c27af9978203725ad26ae990a20bc2421262299471f5124b1256b98d71eeb234d252798401e4423d8249797961d9c2264247796341d0d220124bb95ca1cad2183230195a81c802149239a949b1c4c2124234b949c1c1321d42209946a1ce02071223b93211c9e202422c392ff1b8620e3218c92df1b66209d210092e71a2c208721df90c41abe1f5521659000008c1ff91f0080562a8930833129a8df2be33134332baafa2ca833a1341cacac2e5a359c369bad932f8135a9360baea82f8135ce361baee02e0335413695adf52efa341a36a6ad952ed6340e3658ad6f2df833f834e7ab5d2c1c32b9339ba9112bdc3044327ba76d2a61308631b7a5e029e82ff830baa46a290f2f69300da41529652e053051a3b328f62d942f80a26b289a2d202fdda12928262d842e0da1c927d42c062ebaa05c279e2cc12d0da0eb26512c682d3a9f9126042c062ddc9e5626822bb72c569f2e262f2b972c819f0d26e12a6c2cb09fcb257f2a262c02a05e25152abe2b6d9f0825cf29722b659ea8248029fe2aa79d63243f29a52a149d3024ff28562ad99ccf23b828032abe9c82238b28bf298f9c382355288229969cea220d282929969c97227b27d3288f9c3e22f62683287f9ce32161261e283d9c6421ea258d27c39bf42094251327da9aa5203a25a6262a9a1920d82435263599881f7a24d225c998e61e222476253098681eab231a25c797d21dfe22c324bd967f1d5e225d240d96281dd021ff23ae95ed1c632168232595941cf920e62286942d1cb5207f22c893de1b8e2058225593ad1b59200f22b8929d1b4320cb213c929b1b1b206b213a92351a6d1f5c2115919b1b481f1c2182900000272065200080af290f30ee309fa7392b8531c93275a98d2c5e337f3422ab212e31357636e4ac112f5b357f3689ad252f5e35a9367fad532ed3341236deac532eae34c835deacee2d8334a735bbacfb2c9533b734f6aa0e2cff318e33a3a8812acd302732f8a5022a3e305531aaa4b829b02fdd301ea46029022f723006a419294d2e07301aa4bd28c72d452f37a44a285b2dab2ea9a2c227f82c352e5ea157279e2cd02ddfa00127562c7d2d73a0b2261c2c2c2d10a05f26d32bea2c609f23267a2bbb2c1b9fd725292b872c6e9e8c25d32a4d2c1c9e3a256d2a0f2cc19d0325182ab52b859de024d329612b5e9db12494291c2b2b9da4245929de2a1c9d7c2423299e2af09c2124db28462ac89cc823a2280c2ab99c2b236328b5298e9c9c220c285a29339c3d227927f428ed9bac210227aa28e39a562188265828c89a0721152608281b9a78208b254e27ae992e201925af261399b11f9b242626ab98f51e2d24a0253998501e8c2313254f97ee1df322b524dd96ac1d8f225b249196791d142221240796361da221b6237295cb1c49213d23bd947b1c0921df222d94311cc42081225693381c8d20342263935d1c5920d8215094781c48208f216b94881c3c2050217a94241cf21f362140930f1c821ff620309200005521992300804a283d2ea82faaa4402954304231bfa6672c9933b93407aaec2d5b35bd3639ac942e2e354636e0ac582eff342436cbac992d7634a63563acc42d5234693584ac672d2d34493528ac952c3c338b3446aaac2bd1316e337fa8842aae300e3288a6ea2923304931c2a47d29952fcb301ba41b29f32e6630c6a2a928372ee82feca135288a2dfa2e1ca1e327142d5f2e03a18227b62ce42dc5a03e276d2c882d9aa0ec26392c4a2d66a0a326fc2b072d07a03926842bc42ce89ff8251d2b872c959fb225c02a552c3d9f73256b2a262cec9e32251b2ae82b9a9e0225ed29a52bee9ed624cc296c2bdf9d9424a229322b4d9d7d247129fd2ab09c56244729c82ac69c0d2414298b2a769cb023ce282b2a739c36238528cd29959cea223e287329969ca722e12718299a9c01222827c428279c582180264828179bc620f6259527119a51206725e2267c992520f1246e264499bc1f8f24fc25ea98421f2b247b256898841ea62303258b972b1e2323ae242497c41dc42267245996791d6e222a24b895471d0e22dc238395091dae215623fa94b41c3221ca22a6945d1ca1200c221194191c54207d21a3938d1b1b20522109935c1b072048217192b51be41f2a215092dd1a961f3a210292ea1caf1fdb20a2970000bc1ff72100800128d42d7e2f77a45926b72d4a2f42a4cf2a763227340ca9db2d6135d73681acb92e8635c836e3ac582e5f35c436cbacd72df1341e36a8acef2dda34f435a6ac982d8f34a4358aacde2c68339634a1ab422b98311e330ca8d8296d30c83108a55d290130173183a222296f2fc130a7a1d128dc2e64304ea16728242ed22f19a1f227452db12ed3a08f27af2c092ecda02b27722cb52d5aa0db263d2c622d29a07926082c132d7e9f3a26a92bd62cdb9ee625512b9d2c7f9e9d25ff2a6a2c2e9e6825c42a432ca69d2025822a1c2c119de6241d2acc2bd79c9824c0295d2b8a9c652492291f2b189c56247129f22a0a9c3c244e29c92ae49b17242829962a9f9bd8230129602ac09b9a23dd28382a2f9c7923b528032abf9c0c237c28b929e09c2d2222285d29469cb9214b27de28eb9b40218d265b28439bca20ee25b427a09a65204025db26d5992620b824582681999b1f5b24d825d598bb1ef5233a2516984b1e6323dc24a497081eec22be24fb96d61da2228524c296cb1d49224d246196c51d082216245a96821dbb2192231196291d4d21db226495a31cf12053229594931cc020102243949e1c9120db219094931c2d209a218594861cc41f38217894ae1c2f1fc3207996d81bf31e0321a7900000741d202000807227092eb12f19a5d9283c30583112a84d2b85320b3471aa4e2df0343836aeac1f2e1f354b360ead032e0f355d36e1ac892db334eb357eacbb2dbb34cf3569ac572d9434c2352fac742c5e33a4345aaace2a6b31e232c8a730290d303c31c3a3db281d2f7730e5a1ec28dc2e60306ba1f428e22e573074a15928f12d6c2f8ba0bb26bc2cfd2d699f5f26382c492d049f3726f02bf12cd89e14268e2bc92cb19efa254a2ba32c959ee425fc2a742c7d9ec925b12a4a2cb29e9425652a1a2c249e61250c2ad82bec9d2925d5298c2b199de624aa29512b4a9cc02494292e2b3e9b9c248b29212b079b7e248029122bd99a69247229062bb99a51245c29f62a959a32244129cf2a589b14242529ad2a7e9cd223fb28832af89c7723cd28362a609df72251288929689d86225d27cf286f9d582266261128499d4521a7251d273e9c0620ed245226cb99711f8024e42526991a1f402496258398e31ef42340252e98851e7323e6248c972d1ef4229d24cd96921d7a225424d295311d002208242195f01ca02195239a94b31c3a21f3226194701ce6205a2222944a1c9220e921fe931e1c5c20a121ac930a1c34206d211293ac1b08203e21b7929b1bf71f1a21a892121b8f1f0e21ca912e1b571fe42079910000651ca71f00808327102e9f2f0aa58c2818302c3183a7822ae1314c33d6a9fa2ca834de35acacf72d01352b362eade42d04355336ddac6f2db034e33569acb72dce34f33551ac582db434ef3509ac462c3d338c347da91d2a34319332f4a5de28ee2f203102a34728832e1f30f4a0e327b42d3d2fcb9f8d26792ce72d419c6c24e629ba2bbf981f25552a2f2c7c9c6625682a1e2c409e4725572a0a2c839dfd24242ae42bee9ce224ee29b42b8d9cc024d029932b6d9cb424a629612b1e9ca5248c29352b119c82246929042b5d9a75245929f52aca9978245629f92ace9988245f290d2be399b9246a292d2b229ab7249629962b209a9124dc29fa2be6987324fb29172cc6984f24f129102c1c992f24cd29b72bda9aec236c29112b969cf222a528352a329ddb21cd273029b69c2f21b5265428069c9020f725db27929a652096257b27549a38202825e126d699cf1fa32438262e99001f27248f257298661e772309256897c51dd822ac245a96651d542268245595321d0122212422953d1dd221f523e194551db221a2234595231d8c214323c994dd1c2f21ac228894491cc22039228093121c6520112220939b1b2b20cf213a92891bfd1f56212c92241b901fcc204092341a081fc320bb90df1ac31e8420139000005e1fb820008075259d2cc32d03a3d9262a2ea42f76a5a72830302b311ba8872bb132243489aa832df7343a3664ab482eb935043745a7842efc355137cfa69f2ef1357f3792ab5a2dc134193645aa982b8e3249348aa65e296f30c131bba3c928bc2e3a309fa29a27402da42ed4a06526682cb52dc49f66258b2bbb2cf29d8124202ac22bb59ca724b5293b2b209db0249e292a2b6d9dcf24a729302bd79de72490291e2bf49dd4247329f82a229ead243e29b92aad9d72241d298c2ae59c4f2403296d2a429c2124f128582ac39aee23ed28512a9999e9230129682ab198ff230c29892adf95e3232229b32a3c92fd235129df2a6a8d4024b229492bae07a7246c2a0f2c3488c0240e2b892cd494e2241a2b982c469c7024772a342ca49ee8232729b32a419fab22d32747294f9e4e210f262428919c86205e253327069b5720eb247526409a8c1f4524d5250299a21ed12381253798111e5b233b250697cd1dcf22da246396961d59224224d6955c1dd621a5239995241d7e2152231595e61c3f211623d794cd1c1121f522bf94b21cc8209322a494541c7120e3210894041c2d2071217c93671b0f204b217b92511bfb1f2b2167923a1bda1f1421eb91631bb31fcd200c929a1a121fab200891d31a731e56209691171c1521a420288c8422af285129249c2926292d662e22a46127ad2e4830e3a5522831303c3104a7c7292b31763248a8b02abe31343394a8372ae7318b33fca73a2cb533d9347aa8532d53347e35bca8312bac316d3335a7a427e92dcc2f43a43526312c942d92a2a926092c252d4da2c025892bcf2cf4a00825902a262c31a0e324d229742b12a089244929ca2ad09faa241029822acfa08924d6283a2acda05824a428fe29f99f18247528c6295b9ed423512895296a9d992339287129d49c6a2315284529809c4c23f3271d29a39c4823c527ea28a09c2223b627dc28889c2723d827e428e09b7c2317282c298d9a0f2365287d292f958e23ed28302a8c15a524372b762c8f1a8626152d952e0d1873263b2d1b2f489db024aa2bf82c6fa0b922ef284c2aee9eac21da26a428349da5203e250227659cc31f8924c125079a921f22245525cf98b31e7e23f0241198701e1323b124d197361eb02272248a97d71d4c223e24c396911df8210d242196561daf21c3239395191d6a215b230a95ef1c2121fa22e094b91cbf208a2267947f1c86202b2230946d1c5d20d6212094411c27209b2172931e1cfa1f6f213593bf1bb11f4c2158926a1b671f27211292231b2d1ffa207191271ab01ed72058905a1a6a1e6320aa8ca81d111f7d1fcb901e223326e8260f9c04257a2c912d4da22626762df52e8fa4ea26752e033052a51428652f92300ca65428de2fed30cea5a027d42e4e3041a436249c2bbc2c1aa0131e7a2607286e9a1a249f294d2beca05c263b2c5f2da2a3fc251e2c442dada25625562bb22c59a11025ab2a322ca5a0e224302aba2b34a0a024ac29202bf79f4e242529892a6a9f3424cb28192a7a9f25248e28c529239f1c245a2881294f9ff1232e284a29d79ed22315282429bc9ebb23f7270d29a89e6f23c227f128fb9d3b238f27c6289d9dd72239279b28ed9cff22f6268228a49c42224b262e28f39be521ac25fc27289b6e221626ad27719b962132250f26d699e6222829392a6d9a8428172f4c30dd9d892b7c31283372a3dd23fd297d2b709f842127242326109d06213924fe25ab9aa91fa8235e256f98361f8b232d25f197601f4423f1244598f61e0723af240798041fda229024ba977d1e8822622425972e1e4d2234247596af1def2103249e95681d892181235895111d2a21fd22b894ef1ce1207e229994ab1c9d2029225994781c7220e7212a943b1c5120be216893031c3920962192929d1b142071213c923e1bc21f2b21ee91181b5a1fec20cf91121be71e9020ca91d61a641e58203691a31b441ee41f1e930000031b1f1c0080b923622a012c4ea09c24012cf92ca9a1eb24632c762d99a295250b2d452e7da3fd25592da32eb1a3e825302d892eeca20c257a2caa2da1a1f223f02a462c6ea0a7229829032bfc9fc023b929632bdea0a124712a1a2c6da185245a2a142c88a05324092ab32bb19f3e24c429472bd49e2c248329f02a7b9e13243a29992a199e0424f928442a029ef823a528e229f69ddf2360288529e49db1232d2844298a9d6123f6270a291b9d2623a527d828be9ce7225e27a728949ca62225277e28399c6422e4265e280f9c2922a7263a287b9bec2174261d28319bae214c260728939a69211b26db27a7995a21fb25be2797994421d6258a27809931216b25d5262199e31efb228e2432979614c01c5d1e888c3f18521cf41d3290a11cce20022293947c1e2f220424c6965d1f9c226024b197071f932249245797891e73223424d4961e1e302213246496cc1d1922f823bb95a61de921c02395958c1dbc2186237b95681d8a21642358954c1d5d2145233c95031d25212e23ab94bc1c002101232594551cba20a0229593341c88205122e292f91b492000228792841b0920a121bb91f51a961f53214e91931a341f08210391651ade1ece20e090701ab81e7620e890211a921e6620f68f2a1a8f1e28209d8e00006c1bd51c008000248c29e82a3ca0e023cb2a412c2ba02f244a2b812cc9a06424cf2be12c05a191240f2c032d18a16924d42be82ccba02a24412ba32c69a0ec236f2a212c32a0cc23bf29482b3da0db237429e42a45a0db235629ca2a29a0be232629922ac39fa123fd285c2ac99e7023d928242afc9d2e23ac28f3295f9df2227f28b329ce9ca822512876296b9cae22262842293e9cb12206281a29109cae22cf27f7280e9cb2229427d928109c99225827b728019c642222279f28c29b2522e4267e281d9be921b1266128d89abc217e264528519a842142263028139a54210b261828de993a21d1250128c1991521a125c6279999fa206925a5277b99d620242535275399a020a1242f265b99df1d8b227624779678194e20bd21b791c7191b202e210992a91c11212f22de94141e6d221a24b196231f672236242298a71f482222246e98131f0222f5231898571ebc21a0235797cd1d8f2166236396741d5b213523b295111d1421e3220295dc1cd220a522cd94bc1c99206022ae94a81c6d2025229a94811c4f20fd213294591c2720c3210d94171cfd1f80212993bd1ba51f2c215692221b341fd620d791c41ad81e92208a915e1a8a1e56203791561a6e1e20203091f619471e2b208b900d1a0b1ece1ff490621bd324cf261194892a4f2e382fa9a83e2c2d30c0307cab6d2c7930473118acb82d1c3266335eadd42f3e340b3559af8e30d934923515b06a30a5347935aaaf992f0734f03446aeb82ed53220342badd02dce31df3210ace02cca30d231daa9cf2cae309f31d2a8bb2ffc33783450ab3830e1336e34fbab9e2f283158316caba52fa130ce30aaab1830d231f631faab16320136fc363ead8a305232cd3209ac512ed92f49309ea9af29012ecf2e94a2b428dc2dfb2eb49fa72a872ea22f53a35d2ea330f7304da922305b318b31baac50305d31b6318aad5930dd30e330f4ad6f309930803012aeae2f2d302a3042add82b982cf52cd1a8b2244a284e29d29f20213428a429839a4424d1298e2b6b9d7c2019285d29b399601e2e24b9250d98da1f4b23b424fd989d1e3a23ae243498601e1723a0240d98a41db5225e242b97571d6f223324c996c31c0722ee230d96871cb1216f237f95501c652105233c95121c2221bd22b694da1be9207c228b947a1bbc2041221e943b1b982015228e93e31a7120ef213293bf1a5620ba21ab928a1a382088217692411a082030212e92e819371fa8208191b819b01e45200191a719861e1420f390b2198b1e2320fc90b819b21e0f2054919818211ef01f48901e1bbd1e49203b9289107e227b24ea86452c2630cf302cab842d623148327dad9c2eae32be3323af6d304634fe34e8b0bf31823590365eb27e323936163749b36c3223360d3735b3c231b435b83638b2b430a9347235bfb04b2f5e334c348aaec02de9311c3319ac602db631da32ffa9dd2d4232653361a9f52e73326033f9aadb2fee318c327eac2630d9314632a0ac5c30bd325c33bdac9f30e4336e34c3ac88303733db33edac7830353287323cad4c30a231eb3128ad0d308231bb31faac13307731983101ad31308d319b3162ad513099319a318cadb930c431c631bcae97306d315531ceae9f305a316631daae023090309c302bae342cb32d0e2efea9ba25b729bd2a10a26a23fb28402a579d8522c728f729d09a102233286829a69972201127c928249816206f2536279d97911e78242226dc96cf1e34247c251d97401ea12305258896c71dec2298240996431d93224d24cb950a1d55222e244495e41c1f2203246395b51ce221b8232f95921ca82171230895771c71212223eb94471c3421c3227894241cf72070225394c11bbf201e22aa93371b7420c221b992bb1a30206d214592461af01f25217e91b6197f1fca2000917f19261f8b2080904919db1e562054907519be1e1d2029909a18331ef31f898f8a1a341eef1f9e90de01b82283243980d12cb33070310cac582e3c3243337eae782f6533493423b01831c6348935cab17632ef35fe3686b36f33d536bf3762b45333ba36ad3744b480323536503734b33b311635f33580b10c300f34bf3499af992ebd3209342baddd2df6313c3304ac402d8c31a332dba99f2d84318832f4a9922eaf31633224abdc2f3532f93246ac7630bd3251331aad8f30fb329c3357ad8530cb3251336cad71306c32ba3295ad6c30fa3128328ead7d30c531de31c4ad3e306831863136ad55307b317e31cfadc330b231ab31edaeaa30a3319d312dafb430863173315fafa93049311f3191af0830ab309b306eaef32b5c2d9f2d8ea94d25c829d22a04a1de23e528f129e39d6c2211281f29439cf6216e27ca283d9b6b21ee267a28949ae7201226e827f49922206f25ff260599881fe82486269298271f8724fe255898b41e152449251298111e0b236c245e97b11d81222224e996411d4c2214246196e81c1422df23ae95941cd0219d234d95401c92215f23ae94081c46210c237094b21b0521c0220594771bd2207322cc936d1b90201b22c293511b41209e213b93051bf21f3e21f092141b971f03219892ce1a591fe320f591481a381fc62025912a1a2d1f8920b390e218b51e6620e58ed11a921e3020d09000000424c4240080462d3d312532a7acc42ea932c033edaeb32fa233693436b02631e0349b35dab14532df35ee3637b31e33cb36b23718b41233be36af37efb34a3235366d37e2b24731473535368db1343041341335e4afd62e08333c3474ada72d0b32543395abeb2c5e3174327ca9b22c01310b321ba91d2dfd30db318fa9772e8331343207ab11302b32b432a6ac81309332013368ad91308f32d532bdada3304332903216ae8f30ee313d323eaeab30b631d331a8aebe30a631a031e5aec8309c31873139afd1309931833169afdc30963181319dafdc3096318131e4afd130763145310cb0e42f7f306830a1ae262b2a2df32dffa86525ab29e72af3a07924c228f629b19e3b2358287f29989cd32224283d29259c60229b27d328bd9b7a2184262b28a69a9d20a92534275799482038257b2633998c1fb924ec255e98101f442463251798741ec023e1247897f71d4623a124e896721dee226a244e96311d982231240396ef1c4c220a24b695cb1cec21c5238c95941c9b217b234d956c1c582135231e95671c05210523d994591ccc20c422ca94461cba209b2277941e1c7a2040221294821b25207221ff92871aa31fdb20b791161a751fc120fc90151a681f8420fb90df18eb1e79206d8fb11ae71ea620ef8f00009f2082210080402d5a314c327cacc02ec232e0339fae862f8b33663402b0d430ae3464355ab1d531b835c036a1b290329436773775b37b32703661375db3c731f53529373db2fc30123504362cb1ee2f2434df3455afa82e0f333f344fad8e2d213272339babd92c58318c32d1a95f2cc130ce31e0a8232c823078317fa8a72ca73080310fa9542e3631cb313dab17300232773224ad9e305b328b3231aebd304f329932c2aec2301d325332ebaede30e531fc315aaff430d131d831c3aff430b831a831e7affd30a73190311fb001319e31823146b0fd309031663167b0e7305c31163165b06e2f5130303059ae1e2abb2c2e2d04a897245e29a52ae89f3024c728e129089e7b2377288c29f79c4b234a285d29d79cee22f527f128679c9a219f2632281e9b9020c12572278a9933205d25262719991f20042584260199521f8224bb257298d01e21242b25e3975b1e9723d4245b97cb1d1d23a324b5966e1db9226c244996131d58223424e095b31cf72102242d95751cae21a023a894511c6d2136238294131c2721d0220794961bda2069221193da1a8a20f52162926c1a3b208c219f91011adb1f6421eb90f819bb1f5a21e390291aa01f22210b91661ab51fe220e190cc19601fe720bf90641b721fee2038910000b620a2210080f82c34311b322cac612e8e32a5332bae102f3f333e3454af693072342d35d3b0403166356936e4b1e5312c3614379eb2d3311436183789b22c318035b636a9b19830ca34c535b4b0912f1034d034ffae742eea3226343dad722de3312433ebaba22c2a3136328fa9262cb530ad3164a87d2b51303631b8a7682b1530f7306ca7502c3430f33072a8192eff30953151ab1d30ce313432a2adad3010324132eeaee6300c3226328aaf03310c320932ffaf1331fb31ed311eb02131f231e1314fb02831ec31d6317ab03731e631ca31adb03731db31b231d2b0e6307b314531abb08a2ed12f1b30c5ad9628f52b952ce4a51825d328032ad1a04e24a428dd29af9efa237628ac29859d6d2336285d29239dc422fd2706297d9ce2212427a528cf9bfa203e262828539a5c2075252d278a991f200a257c263c99c71fbc242226b998891f8324cf259398fb1e292449253d98131e9723dd246097851d09238524b496361d9e2241245496fe1c4c220b241096bd1c0522b923c195761cac214c232a953f1c5b21e322ea94131c112183227d94b31bc72029220694201b8220c9210b93a01a38206e212c92581a042036218d91331ac91f16211391601ab31fe22038914b19131fd4205690901ab91e6e200b8f0000e820e5210080d42c1c311a32faab322ea632c533e7ad8e2ef2321b34b5aed22f2a34e6342bb0a030fc34e935ffb011317c35673679b1ed305035593640b17c30f3340c36b7b01d3082346e3509b0f12edb33b03439aed82da832063494ac032dae31eb32ddaa772c13312b325ca9082ca230a83162a8102b2930133114a7aa2ab32fbb307ea6cb2a8c2fb3309ea67a2b952fa030eba7692d5730dc30ccaad22f5c319e31b0add730fe310b32b9af1f3114321e324db0293118320a327bb045311432fd31b9b04f310e32e431e9b05f310932cf311eb15f31e531a53132b1993013310e3183b0f62ca32ed22e2baca8269e2ab72b3ca3c1242f29862aeb9f7724a728022a309fc1235c286e29959d21231a281829229d80229527c128ae9cc42100276d28fa9b2c2170261528dd9ade20e7255f27769a9a204f25b3265e9a3320ec2463269399981fad2417260a99221f5e24ca258898a41e102441253898151e6723bf246297ac1dcb2270249196301d53222824b695ca1cec21bc2301957c1c88215a23af943d1c4721fd226e941d1c1721b0224c94c61be1204e220f94821bae200e226b93341b7820b7211e93ca1a2c2054215392941a0b203a212192e91afa1f0f210c9292196e1f13213191af1b1f1fda2088950000f2200d220080802c0331f8312eab9d2d42326b3331adf12d9532dd33ffad392fe733c034cdaf4430d334cc35abb0a6305f35413627b18f30363534360db12030d834f43557b08a2f5734483581af712e83338634c6ad882d7132d33355acb82c7331b23254aa2c2cd730ee31e3a8902b743074311ca8ee2a1030fc3024a74e2a512f8d3024a6e729d32e25306ba5c329b62e183020a5722ae82e2a3047a6782ca22f42307da9f52ec030f93041ad85308731b231b8af1131f231fa319db0483113320332f5b067311632e63139b16d310f32d63166b10831a531853114b1052f39303430caae332ab72c2e2d82a87a25ba29232bb7a0cb243529942ae79e2e24c928222ac89dba237528a229909d312337284b29fa9c8422ef27fa28829cd02133278d28b79b4421b1264a28fd9afe205e261b28a09abf20b72563274c9a2020fb2462267999b91fb12406262099221f6924a925bc98961e162444255f98591eb823ff2436981e1e6b23bb240f98cd1d03237924b397591d9b223724cb96031d2122de231696981ca021452394958e1c3f21d0224695551ceb2069220495851b9220f9212494111b5320a221fc92ae1a16204b2139929a1ae81f0221c791ae1acf1fb6207891f619401f9e20e2903c1b4c1fe820be9200007e2061210080462cf430ec310fab472d1d32403307adbb2da832f733f2ad042f0034c434adaf1930ce34d1358bb083307235603600b174305d355836efb00630fa3421363bb0442f653466353baf242e743383346bad602d5d32c7334aacb42c7531c932b5aa132ccd30ee31c6a8432b5c3062317ca7822aee2fdc3057a6d929222f5d305ea57c29ad2e1830b9a45a29522ecb2f75a45d29222e8a2fc5a44a2a0a2e392f31a7d92a882ec52f35a8202da92f383099ab2c2fa630d83054ae7130173113314cb0873036312a3182b05f300631f1306ab0fd2e393045300eaf8a2b662dda2d55aa7f261c2a7c2b10a3b4244829aa2ac69e642429294d2a949d3424ec28182ad19d0624ab28d929919d912381289f293c9dde221a281229c09cff2105278728269c5c21882647286a9bf6201726e527959a94208625ff26139a4c202c258e26b4991b20db2444267399c91f9524f8252a997d1f6d24d225f898fe1e4024a025a498771e04245d251b98e01d7a2303257797831de0229724b196551d6e22422479960b1d12220524d795da1c882152239e95a21cf22097221a95e81b8a20eb2121943c1b6a20b021be92301b56209f214b92f21a4f20ac214b91181b47208d210291451a1c205b21c890fc1b17206b2165940000712049210080042cc830b73185aae62ce9310f3399ac5b2d8432d83368ad932ee533be341aafb32fbd34c03536b0343052354636a8b01e3035353d3690b08c2fe6341036f0afcf2e49344e35aeaec72d2f33613443adf72c16327c33ecab6c2c493183328eaa0c2cb230bd3150a95d2b3d3039316ba8802ac02fd630e2a6ef29eb2e49301da622292f2eae2fdba4e628f72d5e2f5ba4c128d32d422f18a48e28582da12e96a36628de2ce92d54a38328dd2cdb2d65a4ca29772d652e1ca7c02b022e9d2ebea94e2c522ee62e3bab072c042ea22ea7aa2a2af42c892d7ba81c27852b7a2c20a349251d2ad92be99fd02499291f2b639e65243929a92a149e3e24f128482adf9db8238c28d6291f9d0e23422877297b9c6b22f1270e29149c0d227e27b528b09b8221042769284f9b22217b260f28d09ad420f3258327689a79208b250627ef995b202b25a226c8993020af241a26cb99fc1f5c24a8258699631f02243b251c99791e8123e7244b98f11dfa229624e2977c1da7225724f896431d472210246396de1cef21b523e995a01ca0215f235b95411c4221fa22af94df1bdf2093221d943d1b882045222793d31a4e20f5215c92be1a3220bd21e791f31a34206a211592501afe1f55212b914f1bde1f292166920000ba20c02100806e2b9c30a73108aaa72cf23123334dac052d5d32b53311ad0a2ebf33b13470ae0d2fa1349a359dafe32f3435333651b0b82f1135263639b0f32eb534d73568af4f2e3134343531ae6e2d2b336434caac9c2c0e328433f6aafd2b2e3178323ea9f52a7030853113a8532ae52fea30b2a6102a722f9930e8a5a529eb2e45302ea51329442ebd2f83a4c028cd2d252f17a47a286b2db32e75a33428112d552e87a20228d72cfb2dffa19227862c972d73a10027372c592d0aa13127222cf62cc9a1b726642b8f2c98a12d26d32ab42cf8a0dd25802a222cb8a044252b2abe2be19fd124b4296e2bf09ea2245e29d32aac9e4e24f5286d2a339e2e24b8281e2a059eab236d28b829859d4723422879293d9d0023152841293d9dbc229e27d3280a9dfe21c62651287c9c53214d262328ab9bbf20f625fb27d69a732096258c27289a2f203425c426ca990820db242d269499921f8a24e0253d990e1f3e247f25ae989c1ebd231d256398e31dfd229b247b97591d37221f247e96fd1cd221c5230e96c31ca12176238395b31c7c2137232d95b01c5f211b23e694af1c3321e522e5940d1d12219b22b594791cc8204e222b94031c8420cd2192927b1b6320612120928f1a3520542100914d1bb01f162127910000e420d0210080022b8630973164a94a2cc331e33207acab2c45329733b6acb62dbe33b23402aea12e8d34823511af472f01350536c2af1f2fe334fc3597af682e8f34af35bdaee92d13341b35b7ad222df632563475ac462cd831453375aa512bf9302a32cea8b62a5b306331dda7442ac72fd630d0a6cf29282f7030a9a549299e2e1d30daa4e928262ea62f3aa4a228bd2d252fb8a34e28692dca2eeea20328152d742e75a2bc27c92c112e01a24027732c982da1a10a27212c1a2d44a1b226d22bd12c33a18226702b9d2c3da17c26252b6c2c96a17526eb2a3c2ceda1fe257e2a072c29a1aa252f2ac82b66a00225d629692bc79f8a246529d82a899e4a24fd28412a2d9ed5239d28cd29a49d27234f286429f39ca22210280b29979c23228e27cc283f9c5f21ed266b28219b162176261928c09acb201f26ce275c9a9320c3255827129a4d205e25d826b599f71f09256f264999441fa824f925d298bb1e4b2487254798521ef2231d250498151e7823cf24ba97021e262394244b97b71dba225924f0965f1d582224248596051dce21c823d095891c57212d23fe940f1cc62045223d94f21b7320b521da93711b3c209f21ef92211b3720bb213d92331b2620ab21e5910c1a791f1221a291e41ba61e3d205a930000d620bf210000482a2b303031d5a8102c9f31cd3266ab652c2e327f3360ac4f2da233a73482ad332e78346b3585aed52ee934f13530afb12ed034ec35f1ae152e8734a23524ae8e2d0d340c3537adbb2cd63242340aac0c2cc73139331daa282be6302132cda8802a443052319ea7f0299d2fd03074a68329ea2e5f30aea53529552ef22f12a5cc28e22d562f44a47228812de32e68a32128142d622ea5a2ac27bf2cf12df5a14c27882ca62d76a10a27482c562d11a19126e02bec2c8ba02d265f2b9e2c46a0e0251a2b7b2c10a0ca25de2a502c2ba085258e2a232cf39f40252c2adb2b3aa0e024c729662b929f94246129d32ada9e4524fe285f2a649e0b24c228242ad29da1238728d0297e9d40235e288e29389dd12230284a29e89c4722db27fa28859cb4214b279a28e49b5721bf264828639b142150260328079bcf20ea257927a79a79207125e526309a4b2006257026f099c31f9024f3255f99171f36248825e898a41ec423372598980c1e0323c4240398681d69224724de96111df421d8232796aa1c9e217d236695bb1c89215a233695a11c4f213323d694711c0b21c022a494451ccd2044223894101ca32018229293011c9420da217693fb1b73208821fc92b11a222053217b912b1bb21f0421a8900000bf2098210080b129ca2fd53061a8562b46316732aeaa022ce9313a33ddabfb2c7d33953407adcd2d61345435f0ad582ec934cd357eae362eac34c5355baea82d62347d35a1ad2c2dd333e834c8ac6a2c9e321f346aabde2b9d311033f1a90a2bc7301032eba8642a38305231aba7b9299f2fc830e6a52e29d32e3a309ba4c128152e982feba37028b72d332f24a33328602dcf2e49a2e127fd2c4f2ee5a16b27b32cd82d57a11227742c8a2d17a1b326312c3b2da2a06e26e92be82ca1a03326662b9b2c77a0e925022b6c2c6ca0c125ac2a3d2c78a094255c2a0a2c55a03c25042aa32b10a0d724b029422b849f7f245e29d32aba9e3f241729742a1d9e0d24da28252ad59d79239028cd29619d042353287e290d9dcb2226283e29e49c6a22c627f228cd9c24224127a928989ccf21a9265628839c81212a26e327469c2121b6254f27ad9ba9205d25d726f99a69200d2573265a9acf1fbb2412266799351f6924ae25fc98af1e1a2456256f982c1e9323f724d897b51de0229c24ee965d1d31223c248396171db621db23e495cb1c49214f238c956e1ce720bf22e194141c912041224394ca1b6e201822b393c61b5320eb21af93ac1b3e20be212693ac1b232048212693b81ab21f15214392471b411ff020ba9000000321a1220080cb28db2e44303da7472aaa30b031b7a9402b9331dc32ceaabe2c7033963496ac672d5034443539adc62d9b34973580ada32d7c348d355fad2f2d32344135cbacca2c8a33b53428ac282c69320534a1aa862b873106335da98f2ac8300b32dfa7e0292b3030310ea696296f2fb03049a55029bc2e4a3006a5fb281a2ec82fb6a49328aa2d142fe1a33228412d812e84a2a227d92c0c2eb6a124277a2ca02d58a1c826342c492d13a18826002c042de3a05026b02bd32cb9a01926602ba62cbca0be250a2b712c4ca06925b12a3a2c7c9f0d25482af32bfd9ed124f8298a2baa9eb724bd29412bca9e84247d29f52ac29e68243d29a72a589e3624f628572a109ecf23af280b2a9f9d53237228c5297b9dee2236286e292f9d6522ce272029c99cf3213a27cc28499c7521b6268228dc9b1a2140262228599bc820ca258b27e39a30204125dc26089af51fe5245e2681996d1f7f24e5252399cf1e192467258598521e6923e4240498031edb229424a397cd1d742245245f97711d032203249b963c1d912185230f96d91c3a210d235795791cfc209a22ac94411cb52042223494371c7b20ee212a94521c4b209d2183946e1c39206721a194861c33202f21fb94041cde1f1b217c93181c691fd8202b9300009a24942600806427ab2de52ef5a46d28c42e21304fa76f2985309e31a4a8eb2cb433ce3410ac8d2d9a34aa3596ac412d883491356aac1e2d57345b3584acd72c0a340c3534ac7d2c3d3387346aabaf2b4332de33cea9102b6a31ee32bca8862ab0300332a5a7d32921303b31aca563297d2fb730caa4f528b82e3a30faa36b28e62d6a2f9da20428462d942e02a2ac27e32c1e2ebea14a27952cb92d74a10f27532c682d48a1bd261d2c2d2ddaa06b26d22bea2c71a01126602bad2c32a0d225002b712c07a09325a82a3e2cb69f64255e2a142c759f1f25102ace2bcc9edb24db29882b729eba24c029592b019e70249629222ba39d56246d29f12a829d37243e29b52a5b9dd72304296c2a349d7023b328192a259de7225f28a229f89c5c22ef271329c29ce9214127a5286c9c8821c7266628249c042137261628819b9b20b6255427a29a39204025b126159a0a20d224372697996b1f6b24c2252299f41e04244725cf98671e6823e4244098291ef2229b24d497bf1da3225b24fa967f1d4c221a24ac96471df121b9231c96171d90213923e495ce1c2621b4224a95721ca120f621e594021c5320812130946e1b1f2059215893501b0f205021d092b21bfd1f2c212c93471bb11f5d21f591ab1cc11ffd20ee950000b222be2400802e27972dbc2eeaa40828432e722fe3a694287b2f78304ca87c2b3432f43358ab4c2d4a345f3546ad952db934be358ead062d91349b3500ad982c24343f3582ac232ce83263346babae2b0c32a0333caa5b2a26319432fca7102a9a30ee31e8a58f295030693151a44129b72ff83014a4bb28ab2e4a309da33028af2d422f44a28727e72c2e2e6ba132278c2cbb2dc6a0de265f2c882d8ea09b26282c3f2d32a04626e72bf92cf99f0526882bbd2c4f9fb1252d2b872ce99e7325dd2a562c9e9e4425a42a2e2c199e15256c2a0b2c999ddc24162ab22b5a9d9424c0294c2b4d9d6c2497291a2b1e9d4f247929f02afd9c30245e29c92ad99c02243129952ade9cb7230729622a1e9d7123db283a2a269d2923a328e6295c9dab22352859292d9dd021b927e728839c6421eb268b28309c002106262328c49b982066251c27e09a5b20e8246126859a0a208224da25d1995b1f2e246e254c99da1ed0230e25bd98671e4323bb2440982c1ed5228d241898d91d852259246e97c11d33222a2450978c1dec21e723bc965c1da22154238296f21c3321ac22ba957c1cdd203922f094621c9f20f9219494441c6520b5217594451c1b20722176943b1ccc1f20216b943b1c3a1fd520a994bf1bfe1e0221789100000f22032400806327882ddc2eafa54d282e2f693029a82b297b308b3182a9552b3532d233ebab5f2cbd33cf34c8acfe2c6734563564ad072d5b34633537ad922c12341d357cac162c22337f348eab262b0a3298339aa9432a19317f32b1a77a294330743107a5fd284a2f923077a38f28572e0530cba1e527982d002f04a19526b32cec2dfe9f4626552c662d9e9f54262b2c3a2d539f0426ec2b012df79ef2258e2bcf2ce29eca253a2b942cb49eaa25e62a622c8f9e8f25a02a332c6f9e6b25592a022c469e5525172ab62b2c9e3425e5297f2bbb9d0425cf29632b3d9dce24c2295f2b059da424b829592bd99c8024a5293f2b729c612489291a2b939c52246a29f32a3f9d34244529c52a0d9e26241629942ae99e0424c628302a259f5f2352289829c49e4d228527d728c89dd9219b265528889db0210726a927389dcd205025ae26ff9be41fb8240526e799721f6224a9255c99211f29245e25ee98bc1ebc230c257898861e4323bc242598231ec52273247397891d592229246896381de121c723bf95fd1c922158237e95c71c2f21dd2243956a1ccf203222dc942d1c7320b5215d94e21b42207f211e94881b1d2050217193161bf51f28219a92281be71f0521ab92ac1a9d1f0d213792481b731fdd20c99200006d211e230080a8262a2d622e37a51528c52e3030c8a79f280d300431eda8582a8131f63208abe12b0f336d346cac9f2c263408351fada72c2234123517ad402ccc33ee345aac972bd7325d3405abb72ac8313d3312a9bb29d6302932b7a6022904302a3198a438288a2e253013a23d274d2dd12ef89f1226242c602df89cfe25232bb12ce89cf625182b8a2c8e9d7a25c12a4a2cb99d4d256d2a172c8a9d1f253b2ae62b109df024042abc2be19ce424e5299f2b1c9ddd24cf29872bce9ce024bb296d2b189dc924b529692bd69bab24b3296d2b979aaf24c329842b9d9aae24d6299f2b239bcd24022ae12b529bd024222a192c569bb324352a2a2c2a9b93242a2a202c019c3424f329022ca19cf2239c29732b469d3d23ef28732a079e5a221d286d29a69d64211d279d28cb9cd52042260e28069c7720bf259127309b3e205d252027969afb1fde247e26f999421f6224d9250599af1ef32345256f984e1e4c23cd240198d41dc522782413977d1d44223c245a96521df1210224dc955b1dc121b823e695701d93218723fd958d1d6c2132231d96051d1821ab223e95231ca9202c225294ff1b5120e921e7938e1b2320a4210a935c1bbe1f30217192111b741fb420fc92d919d01e93201e91cf1aa51e7820f69100006d2127220080af24062c112d13a359262a2d8e2ec8a5ca26362eb72fc2a60928ae2fd4305ca82f299c30e231aca9fd295631c73262aa6e2ab031463366aa5f2ab731813340aab22ada31943301aab22abb31793304a8da29e83054328ba40c29cc2fd93021a29327d22d312f2ca03726822cb72dd89e3d258b2ba82c799db324792a1c2ca59ca524082aa52b1d9db224ce29442b6f9db124a6291f2bb29da3248429012ba19db5247229ea2afb9d9a244a29b82a969d7f242c298c2a349d5f241629702a529c4a241a29742a069b37242629892a79991f243f29a82ae3981a246d29f02a18953324d3297c2bbe909624682a142c378efe24192b8a2ca3913125872bcc2c66980e25692bc62c489d7124892a3e2c669f2b236829102bc89e6f2261288e29449e6921d0265a281e9df0208e25be27649c892006250c274d9b08207d241f26089a211f0d24922522998d1e872347255998f61d1c23f2249397b51dab22a424ee96681d2b222a2442961b1daf2184239f95e81c5e213b232095be1c2a210323f494a01cf220bc22d594721ca8204e22a594121c4320bb210694a01b0b205c218993371bfd1f3921b992231be81f1821a692061bb91f04212692191b771fb3203692431add1e88207b913f1b641e3420869100001f210121008013212729fb29609e9625882ca42dc5a41e26632dea2ed4a5b826312eb22fb0a64a27b72e393041a7fc27442f8230d6a738285f2fb33014a84928d82f0f31cea73b2a6531cd3271a8ae2c1b336a34b1a8312af630373208a65f269c2d232f1ba3b824482be12c65a12a25d22a702c78a1b725792aed2bbaa1f724cf29652bb2a037241c29bc2a1ba06924f428842a2ca05124c028472a15a035249e280e2ab99fd0236d28ca29829e7d234b28a1299a9d522333287c29109d4e2317284329d99c4b23f8271a29a29c2d23e127f8285b9c602316280d29df9a49236c2880298e999e23f8283c2a0692f923c829582b47188f25082c2d2d8d1cdf26902d1f2ffc161127772d102fc89f0425e32b112d98a1ed224829c32ab99fe7215827c928eb9d6a20652535270d9cf31fae242c26129b641f4024862588994c1fd32324250c99bc1e4423d0247898791ee92290244b98371e8c2250242098df1d3722212476979f1de421ec232497511d972188237496231d56212e23f295f51c0521d5227595ba1cb6206f2234957b1c86201022ae94591c5620b6218b942d1c27207c212094011cf51f5021ea93ad1bb61f2d2127934b1b741f13216292f81a281fe5201a92fc19bd1ed920e6907b1ab31e9720af8f0000ed1e7c1f0080b621f228bc29da9e5524f12bf72ce9a23a259e2cd22d9da4ca252a2d6c2e5aa55c26af2d142fe1a5a626d12d5f2ff6a56826b52d382f4aa5f425c92cf02d29a44f222129342a929fb21c91247c26a299912239288e2938a07225a12a3d2cffa22c25b22a532c0fa27e24132a012ce2a06824b229352b6ba072246729d22a55a037240d296b2af99f1e24ca281b2a03a00d248628be29e49f09245a287d29dd9fda2331284a29349fcf231d282f29f29ea123f1270629929e2e23ad27e328fb9d2b236427be28c59d9322f3268e28eb9c512294265f288c9c8922ec252628569cd42165251a27689b601da724522639962526252c7f2c6b9e3a2a25314932cda18d2a3331a13279a25d24402a142c069f22205823ee25249cbe2109246126c89ce81f6d237f25b199bf1f95233b25ec986a1f54230525b698841f5023e224c698fb1efe2298246f98e31ecc2279246098551e71224824b097f91d33221f24ea96871ddb21df231696371d74215c23be95e11c1421de225f95c61cc6206322fd948e1c85200922c294751c5a20c221a8943c1c3b2099212f94e51b19206e215b93751bf11f5121f392071b891f12212792dc1a2f1fda200192ca1ac41e812053924b1a3c1e472027913e1b3a1ef41fee910000e21ae11b00807d23082a852bcfa049245c2b972c3ba27124c82bc92cf6a2d624422c4c2ddaa33125832c962d24a438257b2c9a2de2a3c524272c312dcda21724f72a522c7ca127223e29892a20a0602146285c29839f7122b928062a80a007249f290f2b4aa14124aa29272bfca000244e29ca2a3ca0022432298f2acf9ff623ff28682a889fe023bb28142a739f01247928c4293da009243f286d2929a0fe2318283a291ea0a923e42706293f9f5d239627d5288d9efd224727a128d29da32207277928279d5e22d9265d28c49c2a22ae263c28709ced2182261c28199cc9215b260d28ad9b78212726e727f39a6921fd25ba27e09a0f213e25f5266d9a361e79223a248a977f15711c871eac8e7617961c141e5290b41caf20ca217295461d572222241b96ad1ea9227424ba97591fb22269244198161f812243241a987c1e582221248297141e212200240997cc1d0f22d923b696a91de721a4233c96871dbd2173231696561d88215823e095281d5a213c236395e11c18211a231995a61ceb20e4229894491ca9208922fc93221c79203e22b493cc1b3d20f521d3927e1b082098218f92221ba21f4a213e92bc1a361ffe20e5915f1adf1eb12038917a1aa71e5c20ab911f1a791e5120ab90401a661e0b200f900000031c901c0080b0223729712a159f31235f2ac92b6ba0d323ae2a152c3fa10424df2a472c80a12024fc2a562ca6a1f423c62a3d2c39a19b23722a162ce3a05723d329802bd2a0292325299e2acda01a23a228f529dda02b238628e029e8a051239528f329cea06723a628fe2971a021238b28d929599fe4227428b529539e9c224f287c29b19d622225284429239d82220a281d293d9d9b22e427fc28219da122b827de28269da9228227c8282c9d8c224c27ad28e69c4b2218279728889c0122e0267528279cce21ad266028b49ba12176264128ca9b72213e262a28899b402100260928f89a4921d125ef27049b2a219125c327259bd5203c257727af9ab820b4248926879af21eec229b249c98dc1aa2201b225c940d1a6520a3215993ef1b1d2171229894141e4b2204246197ef1e9a2260243698751f6f224924bd987d1f4c222724f898cb1ef021db2351982f1eb12182238297c41d7e214623ad96671d48210e23f395f81cfc20c8227995b11cc2209022e7948d1c91206022c1946f1c66202822a2945c1c482001228e94431c2520d0213694041cf71f8121f093b91b961f282132932e1b2c1fd220b192cc1ae01e91205592631a9a1e5b209791691a841e2320f991dd19591e34202291cc19101ed61f13915525772aa92b66a28a299f2dd02ebba8182b012f2830dcaa9a2b9d2f7e30e3ab492c6530633182ac172d5931693248ade42d14324933ddadbe2d10324c3364ad922dcc31f632eaac3f2d6231783242acf92c0f3110323bab732c51300331b7a9b82d383249338aaa2b308c34793588ac3c2fa931163209ac4e2faa30db3013ac672f9b30c93021ac9b2f4331713107acaf317f35743660ad8e30813304344facde2fcc30bb302aac202f3730593058ab4b2f20302130eeabb02f5a303b309dac013061305c3042ad32307b307630ddad3f3081308c30efad2f306b304a30f7ad453071303730f8add12e752f242fc3ac7529472bbc2b8ca620239627ba28239e6c20d22693281e9a0922c6283c2a2d9cbf24822a0c2c919e101fd8265d2816993a201b246125d999a11f6e2392247e99791e1c2378247a98b51db8224a241c98731d6b221f248a97de1c0d22d323bc96991cb52160235c964a1c6821fc22b195171c2321af223295e11bde2068220195b81bae202b22b094851b8620f4219194351b6020ce212c94221b4b20af21db93cd1a362088211b935c1ad91f2321a592c619041f9d20b5917819a71e522068916e19851e2a200f916f19781e172010917c199d1e00206b91b718171ed71fed904e1bee1e8620ce926227d92b7f2cf3a4242b482f44304fab4d2c4c301131b5ace62c0431e031d8ade62dd731da3249affa2e093330345cb0872f77336a3499b0b72fb13389348cb0882f683360343ab0bc2ead32f6332eafea2d0f323f33a3ad192d8131b732b3ab4d2dea311033a9aac32d1732303397aa882eb2317732d6ab3e2f823135328dac01308e31223208ad37304c32cd320fad8a306d331a3410adad300833b73337ad3e30db31283217ad2a305431743178ad2c3033314731d5ad3730e130d73003ae4a30ed30dc305cae64300231e230a2ae69300a31f030a9ae5330c730a630c7ae413092306330c9ae622e1e2fe42e17ad8729e42b3c2c92a70f2491288d29ae9f9e2246284e29539d3822522869294d9c452245286329429b37218b27e22873994c20bc257827bb98b21e77241726c097ee1e27247e250398281e8523df247997871dbf2275246696111d6e2236242796e61c35221224f395cd1c0822d823d495b41cd7219123b695951ca0214b239095731c652111236795441c2d21ba22f094151cf1206222ba94a61ba92007226d942c1b6d20b121e693d01a2f2059211e935f1aea1f1a214c92c419751fcd205f9170190b1f7f2011914019bf1e4220e4904519971e05209d90e818231ed31f2091a71a631e2b20d391ce27462ce12ce7a4fc2b1930d83024ace62cc930a4317fad9f2db431aa32ddaec62eb832de3347b0ba2f94337e34f0b045303234ef3474b156303a34f4347bb131301834d03400b14a2f7f336e3417b08c2ecd320a349caea32df6312733d0ac4d2d9c31c53201ac022d48313b3293aa902d1631fe3125ab292e3331e331bdab832fda318232b8ac61303e32be32a0ad713096321f33b5ad58306732e63295ad5230f6313b32acad4a309531b331e0ad45308d31ba3116ae51305831663166ae613042314031ddae6f301d310a3113af70301831fd3054af6b301531f9306caf4830cf30b03050af312e5b2f9c2f1dadf628602bf82ba7a691245829632a52a080239f2896293f9e4422cb27f128b09ce6217027c328159cf420ea269528939ad3201a26ea27679a4e2086251727b699d51f1725a7266b99451f8e24f5250799be1edf231125aa98261edb2252244198b31d7a22192490974c1d442213240797ea1c1022dd233e96951cd0219f23d2954b1c962169237495131c4d211123f294da1b0b21bb22c494851bca206f225a94521b8120fb213d94361b2b2075212d941a1be11f2821d293191b8e1ff0206a93c41a3d1fc1201193641a2d1fa420f491541a361f7920e5910819ac1e5c20ac8f3c1bc61e5a202693ed265c2b2b2cbfa2642c94304e316fac522d49313a32e5add02df831173319affd2ef1321a346ab0b62f9f338e34edb052303334fa3475b1623060342d357ab13b303b3400350cb1692fb6338e3429b0b52e00333434f6aee62d3f3282335fad492da231cb3224ac9d2cfb3000320faa662caf309d3147a9cd2cb3308231c3a9042e3c31ee3163ab8d2fb0312e32daac323013329a3282ad57302a327e32f1ad6c30ed3129324eae6630ad31f03185ae82308c319431cfae86306e316d3117af873059314a315aaf8a3046313031a0af933045312d31f1af9b305231363110b04630e430c1308baf6a2dc72ec72ea0ac4e28562b472ce5a59a2416293f2a5aa013248828c2298f9e442351287829709d9b2215282229c29cd9215727ab28369c31214426fb277a9bd320a3252a27f29a4c202a257a26309a7b1fad24de252d99f11e35245225ff98551eb023da246198e01d392395241098501ddd2261245a97001d7d222024a396b21c2422dd233b96991cc22191231a967b1c77215023f295641c36210c2394957e1c0321e322b595641cbc209d225595401ca3206022ec94031c632001226b94221b14205d217493651a881fdd20ae920a1a6b1fbd20a191ff19641f872096913319ee1e67208d902c1bec1e9c20df9100008c20ed2100803e2c78305a311aac6d2d8c318b3203aee62d2532573309afe02efd3228343fb08f2fbc339034b9b036303434e43452b138305534073536b106302f34fd34beb0202fa1338634ffaf702ee432163497aec82d4c3285332fad292db131dd320bac6f2cf130053212aa022c7330603109a9f52b3d300731e3a8552c44300a3152a9972dc63065312eab562f6231c03106ad4130db31123230ae7530e7313132dcae8b30ca3106323fafac30a131aa31b8afb5308e31933105b0bb3082317b311bb0b9306f315f312bb0c2307131553155b0ad304a31273164b00c30a0307a3099af8b2c2f2e7d2e81abad268e2a2e2cd3a34e24f428132aa89f1f24a228b429669e4e235d286e29429de92222282b29fa9c28229827b8286f9c3d216c2616283f9bb720cf259227869a722061251a27269ae11fdd2439267399ff1e72249125a498531e092417253298e21d6323cc24cf977d1df5229b24f9963d1da3226124a896e31c3c2228243696921cde21e2238d955b1c9d2183230b952a1c58211923d294ef1b1d21c0225e94601bd12051221094cc1a8b20f1211a93881a46209c217492241afb1f4d21b991171ab01f2d21ad913b1aa81f21217491711abc1fe620a391c819701fe1206391081b6b1f19215c9100006a200a2200802f2c6d306131dbab4d2d99319c32baadbd2d25325433afae712ec9321134deaf042f7433643455b0ba2f0e34b434c6b0bc2f1e34e034b9b06d2f0134cc3460b0bd2e66336c3478af372ec732083446aea52d2c3261330fad042d81319c3200ac4d2cdb30d33103aac62b72305f31fea8472b1d30fb3078a82b2bbe2fb43067a8a92b9e2f8b30b4a82b2d6930ec30a4aa1f2f2731723114ad41309731b731abae9730bd31d731b6afb930c331c3311ab0c430ab31a53146b0d2309931953164b0d2308b317c3187b0dd307d317931b4b0a2302c3102319cb0c32e0a30ff2f8aae3b2ab42c262dcba8c325102a492b6da2be24ef28232ac1a039249e28e429839fd4235f288529859e37231c282729029e5c22b927d3281e9da321f2268528609ccd2007260128759b41204c2503275e9a0f20fd247726139ab01fb7242a268999161f6f24c5251a99a61e17243c25c998f41d6c23cb241e986a1de32269247e97181d75222724c296e11c2122dd2379969c1cdd2184231e96531c8b2123237f951e1c4321c3223b95ef1bff206922d1945e1bb82014227994d21a7520bb218393881a37207221d392311a022034211e922a1ac31f0921be91611aa91fca20f2914c19001fb020a390d71aa91e77200e900000802026220080382c86308731cdab252db831c0327cad6d2d0b323e332baefe2d9a32f93310af722e24334434b0afeb2e9b33863420b0f82eb833a7341cb0e32eaf33a034d4af782e4a336234fcaeff2dbe321534f8ad592d17325d33b8acb82c57317b3265ab2d2cbb30c531d6a96f2b49303e31aca8952ad22fca30b6a7252a412f723007a7462a062f4b302da79a2ae82e2930bca72e2c4d2f1d305fa9f82d48308c306dacea2f00311e31a6ae643051317c31c0af913075317f3139b0b9308731833180b0cd3081316231b6b0af3047312731a9b0cb2f6d305230c2afb62c082e5c2e39ac0c282d2b242c8ba516254929b12a3ea18624da28182a27a02a248828cb29689fbb2343285629709ee22201280229bc9d32227027ad28299d9021d72651287a9c0b214026db27d59bdf20c4252827919b792031258d26f29a0820d2244026089a381f9424f1256799df1e4a24a325f2985c1eea2328256698e31d4723b624d097921dc02267241497201d462220243996b41cd821a7237295701c7421352323953c1c3821df22e7941c1c0a219422c294c01bda2046227c94a21bb12012223494571b8020b9210b94e21a33204c219493c61a132035211493ee1a05200521d992f519791f0521e391e11b631fe020019500001c2016220080cb2b6e306331fcaae92c90319b322aad232dee312933d6adad2d7232e033b1ae092eeb32253433af572e5833563490af512e6333793472af372e4c336e3410afd62de9322e3438ae882d6b32c7336dadf92cd031033351ac662c25314032e5aae92ba330a93187a9252b2f30213197a86c2a8e2f9e30e3a7c729dc2e3c30c5a67d29902e06301fa67629602ec92ff0a5ac29322e8d2f2aa6762a452e572ff0a7762c182fdd2f7daa0e2e2d306e3016ad502f8f30a830a9aebb2fc730d2307aafcd2fa9309d30c4af022f40304930faaeee2cb22e1c2f7dac5929702cef2cc7a79c254f2ac22b9fa1a6245329862a01a08924fb28412a4aa03724a828f4297f9f79234d2872296f9ee2220c281829bc9d1c228027b728eb9c8021cf2659286d9c26217c263728ff9bcd201d260028759b6b206425f326dc9ae91fd3242326eb99951f9d24ee25ac99121f50248c254a99671efc232125ca98191e8623e2246498cd1d3123a1242d988a1dd2225e24fa97251d6d221e241e97d71cfc21a823b2969c1c932129231e96911c4e21c7220f965c1cfa2073228a95b71b9a20fa21af941e1b4f2093211f94c61a10203a217593771ac51ff020c192781aaa1fa6200792e6192e1f8220d491491b3b1fe520ca920000502028210080372b4630303192aa742c2c312f32afacb32ca231de3257ad3c2d4732ad332caea72dcc321334beae0b2e4433463435af002e54336b3413afec2d46336e34bbae7e2dd7322c34dbad332d5332af3307adc92cbc31ef3228ac5c2c13313632f4aac02b8830963186a9cf2a1c300d3147a8012a6e2f883009a77529c32e1e3016a63529642ed62fa9a512290f2e7a2f5ea5f128b12d042f18a5f028712d942e5ea5fe284d2d6d2eb5a5012a682d522eb7a7d22a092e2f2f0ea9072c432eeb2ea7aaf52bf52d722eccaad62a4c2ded2d8da998282b2cda2c29a6b025362ab62b8aa1d5245d29c92a06a096243b29812aa49f0f24f628172ac39e0c24c128e929499e9e238828ae29ea9d2a234f286729909d6022c727d228f39cb121c0265128949c452155261c28649ceb20ee25a027ea9b98207825ec26659b522023258826b69a0520c82427263e9ab01f8b24e125f899591f5d24b3257f99da1e2e2480252099611eed233f259898dd1d6623ee2439986d1dcd228d243397301d40222a24e296f31cd421c7239196a01c5421f722e0954f1cd82060223b95c41b8620dd217f941d1b5c2096216e93f51a2f207521e092dc1a332092216492d61a2f208321fc91341a092047216e918f1b1320892130920000f71feb200080d82a24300d3123aa3d2c3c31453257ac8e2cc03104331dadf02c30329e33c0ad302d9232f4331dae942d09332f34a8ae8f2d22335a348dae852d18335d3432ae292da63219346dade52c16327633bcac852c8531b832d9ab1d2ce630f53190aa772b5f30533188a9c92af02fe130d6a8042a432f83308fa78629a62e163079a6ed28132e772f5ba5b528af2d002f1ea58828672db22eaba454280b2d422e76a41528ab2cbc2df4a3a3276c2c672d39a383274f2c452d1ba35d27282c072df7a2f826c32bb02c97a25e26472b602caaa1cb25ad2a0a2cfda06025502ac32ba1a00125f729842b2ba09d248929002b6d9f25242929852a709eea23d028182a259e47237928a629a79de12232284e29269d5322f7270729bb9ced216327ac289a9c6621d4264e28319cf7203526cd27b69bad20b7253227439b5d205825c226c79a3a2007256126539a19209d24e7255d9ac21f4c247a25069a201fd0230d2555993b1e4023b024a998b11dbf22632419984e1d71222d2457971e1d1822dc23ca96d01cc02184236396a51c7f214023e7953a1c2321ee222295e71bd920ac22cc94511b8a2058223c94ff1a5720ea21b493dd1a3120ae212c93f01a2d2059213f93061aff1f39214691261baf1f2521a99200007e2061210080552afc2fec30ada9052c353146321dac432c9a31d832b9acb02c2632923376addf2c8132dc33bead3d2de43225342dae492d0a33563428ae3a2dfc325034deade92c993218342aada62c133288336eac3a2c8331c532fbaa842bdc30f73192a9922a32302c3180a8092a8b2faa3095a7b729182f5f30dca64229862e053003a6da28092e6d2f69a59a28a02de72e01a53728232d562e58a4c627be2cef2d92a38327932cb32de5a230275e2c7d2d65a2db261b2c3d2de7a1ab26a22bbc2cbea11926f32a432c14a1aa25962a372cb8a06d25722a0a2c85a01625232aa22b61a0c924a929182b1fa0a9246129c02a03a0432400294c2a199fff23ae28f529a99e74236b28a729359e122339286f29179eb922ec270d29fb9d542218278428a19dbb216a261e28199d3921122601285a9cd120c725bf27c09b672065255827d69a12200b25a526529aeb1fbe240d265f9a8c1f6d24b025dc992c1f26244c259299991e7623e924f098be1dbd2275244c98311d04220b247a97e61cab21a823c796a41c84215d2329968c1c5e210a238595921c4321da228d95791c10219f222e957a1ce2204622ee94141c9720ec214394c31b71209d213b93371b4c205621b992761a2c204f210592ca1b821fb420f0910000b920a3210080fe29d12fe0304aa95c2bea30f831a3abb72b60319b3254ac652c163288330eada02c7732d63363ade42cc1321b34b2adeb2cda323f34a9adde2ccf323b3465ad932c6c32fd33bfac4b2cd531423308accc2b443179328daa052baf30bc314da9642a2830203149a8ce295b2f91304ba75929bc2e30301da6eb28492ed42f59a5a328e22d592fc7a46d287f2ddb2e70a42d28332d862e11a4e927ee2c472e7ba39127a82cf02df1a22127612c862d57a2c4261e2c212dd4a16d26be2bc82c89a14326432b842c64a11a26e72a4a2c41a1d9258f2a142c33a17225322ac42bd8a03425f929792ba1a0e124b2292d2b34a064245429be2a509fdd23ce28112a549e232366289029f29da92225282c298c9d3522a427c8282c9dad2109277d28ba9c20219a263928209cf1204f260228ac9bb720f925a027529b7d20a1252a27b79a34203925a5264a9ae51fe1243d26e8993c1f8724cb253599ae1e2d245d25cf98321eb523f4244998da1d3b23a2240c98ac1de12264248797771d792231244197331d2b220824e696f71cc321aa234f96991c4b212823d7952c1cc1204022d4940a1c5b2097217394581b232080210b94371b1c208d218a93491b13208c21ca92f71a761f3421ab93ea1bfb1e8e205b9400008a20802100805a29342f8d30e0a8bf2ab430bd31e8aa032b2e316132acab072ce031543394ac4c2c4832a633f2ac882c9332073426ad9d2cb3322c342dad9a2cb8322d34f8ac5c2c6132fb3367ac1b2cdb31583398ab852b5131993251aafc2aaa30cd3179a94e2a083009317fa8a3291d2f7d3067a74729832e1d307ba6eb28092e8d2fa0a57d28b22d142fe1a43c28542da92e5da4ef27ed2c322ebaa36627a92cd72d00a30727682c8a2da6a2b826152c252dfaa14626842bba2c67a1f425262b762cf5a0de25ef2a552cb9a0bb25b12a2c2c9da08e256d2a092ca0a04d25242ac72b6aa0e124bc29422b57a078243729a12ab29f2424da28322a229fe3239e28e829cb9e8d236e28a729819e2c23442868292d9ebd22192824299d9d2322ad27cf28f09c9b2112277528839c402189262428149c06211326b127cd9bc120b1253227629b7b204325af26f59a4720d6244326a49aa41f6d24c825b899e91e19245c252c99481e8f230925b398dd1dd1229e2439984d1d41223124a297031dd921c223ef96c11ca12195234f969c1c7e216023db95691c382126231b95361ced20a622e094181cc92033228294f51ba72004226294d81b8420c12119949c1b4f205c21f393681a082021215592981b8a1fd120ca91000094208e210080e728c62e463042a8202a723070312faa3f2ada300332d5aa652ba231123326acfd2b143273338aac452c6932e033cbac542c84321534bcac4c2c8732183494ac102c3032cd330bacae2bad312633e2aa1c2b30317132dfa98c2a9330b031f2a8f9290730033117a86429402f853078a6f128822e03303ba58828da2d492f6aa43428852def2ef4a3f027302d902e0fa36727d32c202e95a216278c2cb12d1aa2be264b2c5e2dcea18126162c1e2d9aa13b26c02bd62c31a1f6253f2b852cf7a0b325e12a512cbfa07e258f2a242c93a03c252f2adc2b5ca0ec24de29722b1aa09c248b29132b6b9f5b243f29b42a419f2224f6284a2aa79ea623a828df29289e12235f288229b19db42226283f29659d6a22f2270029299d00227327b828ff9cba21fb267228c59c6e216b262428869c2f21f4259d27519ce12090251f27da9b74203f25ad262b9b3e20e9244226969a961f9c24ec25e499061f512491254199741e00243225a598e81d5523c7244198661d9b2268247897161df7211524c096e81c9e21b0233c96921c35213523cf954d1cde20ae2239950f1c94202a22b394b91b6820f2214194b71b4f20ca213f94a41b3e20ab21fb93a61b26204021fe930b1bcd1ff120c193b41b871f032170910000eb20f322008032281c2e8b2feea65329c72fc8304da9672958306431c2a9db2a7231e43280abe52b34329b3343ac3f2c8f32143477ac3a2c98322d3453ac212c83321e340dacc82b2932ce3332ab702bab31313375aad52a2531743273a9412a9030b9318ca8c429f52ffc30bca76429092f7030c6a60f295e2e0f30c9a5bb28e52d842f02a54d28852df02e11a4e827162d572ecfa24627a72cd82ddaa1ca264f2c6c2d77a16e260f2c1d2d5ba13b26b62bdd2c31a1ff25562ba12c2aa1b425012b6e2cc0a06525ae2a3a2c57a02d25682a0e2c2aa0e824162ab82b16a0b524d029622bd79f86249529142b899f54245d29ce2a749f21241929752a1d9fe523d328252a069f70239028d429d39efb224a288129689e8722fb271f299f9d2b227127da28509dac21ee268c28e29c3e21552640285e9ccf20cc25ae27019c7a206d25fc26759b19200d257626989aca1fc42418260c9a3d1f6524a7259f99c81e082436251399511e5723c6248c98fe1dc02270242598c11d48222224f697501dd921cb23c096101d762152232596ad1c2021de226a95491cdc206e22f694141c9f2016227e94f91b6a20d2216494061c41208421a894201c2a2059218b94351c292026211c95b31bcf1f08219c93201c7a1fc62039932b21e629372b799db626782de02ebba52828202e9b2feca7da27432eda2fb4a758294530673118a9b42b1732a533e8aa982c23338834faab882c1a338234beab392ce5325b3418aba02b5d32033468aa3b2bd2316633aaa9b52a32319a32e0a8392a9630d13116a88a2903300e31a6a60829262f7c3078a593284c2edd2f75a42f28902df42e71a3ad27112d502e9ca26d27ba2cf42d9ba21d27772c9f2d20a2e0263e2c552dbaa18626092c1a2d6fa12126ac2bd72cefa0d025442b9c2c83a09925e82a642c59a06325982a322c2fa033254d2a072c09a0ed24002ab02b5f9fb124cc296d2b059f8b24ac293b2bcc9e4c248829092bac9e33246429da2a859e07242d29962a7b9e9323e2283d2a4f9e2a237f28d6292b9e8a2215284529a29dd1215627b6282c9d7c21ce266a28e19c372178262e287e9cb820f425ce27109c6a20742518275a9b15200d257a26cd9adb1fa624fa25529a531f48248725b099e51ece2319255a99601e4023c924c598101ec72287245d98a91d75224724d597771d2522062441973e1dd9219f23f596ff1c7e212c235996c81c1421a122ce955a1c9120ea210a95921b482091212b94231b1c206d21dc93301b192061218293791b0e203d211d94081be21f62215893281cd11f5f219494af20e028fc294c9c24261c2d792e3fa5cf27dd2d4e2f55a7d726cf2d632f32a79927952e373028a8082924301f3193a95b2a6b31df32c6aab82b1a32ba33cbabb12b2e32f23339ab952aa9313733cfa9c82a7731fe3238a9a52a6c31cd3215a8292abf30263286a685293d30643188a52d29772fca300ba57128462e093033a4d527372dbd2ef7a23827a52ce32d03a2e526712c952d29a19c26432c642dc2a06826152c262d6ea01926ca2bea2c38a0d5256d2bad2cbd9f8025112b772c4c9f4225c52a482cfa9e1925872a212c7a9eed244d2aff2b429ebe24082aa02b069e8924c229422b059e66249c290f2bd69d4b247e29e82af09d1c245d29ba2aeb9dcf232c29812ad89d7423f3284b2aff9d0323b028f729d79d7d2249286d29969d02228c27d028589d952100277828f79c22216c263e28919cb420b025d0270d9c2a200625af26f09aba1f9024ed25389a4e1f44248525e199ff1e0b2434256f99ac1e9b23e7242e995b1e16239924c1980e1e9c225b245c98bd1d52222e242298971d15220824bc97521dcb21af235c97321d84212c23e596c31c202196220d96601cd5203e2211952b1c8120e221d3940e1c4020972177940a1c04204f2173940b1cca1ff320ae94ac1b401fc520a894f61b131fe420f892c41c7f277228f0971926362d992e4ba57a27012e872f71a76b27bc2e3d3044a886280c302e3176a98629c830e431bfaa802a4f318b32f0abae2a84310133e0ab7e2a8831133303ab2a2a4131bd3239aa0c2aeb30513256a9a5296b30a9311ba82a29b62ff5309da57828662e15301aa41827cd2cfb2d1ca13f26622c812d25a07026612c762d74a07a26602c782d4ca02d26302c532dd99fd425e72b0c2d139fcb25902bd02c099f9425382b952cc69e6c25e62a672c479e4d25ab2a3e2c239e3d25722a1d2c5c9e32254c2a062c4f9e22251c2ad62b869ef624042ac02b959ec824f029ab2b589e9724d629802b5a9e6b24b5294b2b1d9e49249329102b6a9e37246b29df2a059f11242929962a779fee23d828352af39f56234a288c298f9f57226627d3285b9e9921a6264e289c9d652131260328419de7209f254a27a39c2d20f9245926319b521f7d24bb25af99091f2a246e254499dd1efc232525f198751e7d23d7247798331e082390244a98d81d85224224c197461d1422eb23b396ea1caa2168233e96c31c5f210c23c895ab1c0a21a922ab955a1ca22014224995151c4b209121f594a81b1e2061216e943f1b00203b21fb93d81ad91f20212693ee1adf1fff203d93751aa41f0c2162924e1b7d1fd720ce92da1d9b26c227619864257d2ca42daea4f726822ded2e08a71b27572ee92f0aa82b28762fc630f9a8d5283d303e31d5a99a29ba30d431c3aae329fc30553206abd1290631893287aa8629d0303e32a7a99b299730e13106a94e294f307e31dda7ca28a62fdd309da5e927482ef02f97a2da26232d952e29a0fa25432c952de89d3a26052c412d819ec825872bd82cb79d7925272b9e2cb89d4325ac2a592c7f9d3f25862a272c7b9d33255b2a092c6f9d3325402af32b059e4325412aea2b179e4125382aeb2bc99d2825372aff2bce9cfc243d2a052c5d9ce124562a132cfd9bc924672a212cd69bbc24722a2d2c259cb924632a2c2c679c9a24482a202c549d66240f2afc2b169ee023aa29852b569eef221029ca2a5d9e4b225528bb294f9e07227027c1280b9e132194263628f19c7f20ef25ac27209c4c2084253327679b0a201425a726bb9a741f8f240b26ca99bd1e1e246b250b994b1e8a23f4248898e71df32291241598721d79223e24eb963e1d0c220624a996491dc221c0236b967a1d97218023a6968f1d7e215723c096a91d40210f23df96171de62093222e961c1c81200f22c294df1b4820d5218e94081be11fca21be930b1b901f27215c93d61a591f8c202493d019bf1e72206a91cf1a841e58209391d11b64252b2612961e24982bb52ceba29625a92cc92d53a53b265f2db32ea4a606270d2e8e2fe2a702289a2e28308ea83f28182f7630d3a86b286b2fb83015a943287e2fd530b9a8ac28f22ffd30c8a82c2961307b317ea8c729c9301e3242a73a296530b131d2a32a28ee2e5f30c39fd626532db22e999d66254d2c6b2d1e9c5725602ba92c129c0325d62a4a2c1b9cda245e2af32b859cb424192a9b2ba69ca724df295b2b569ca024b029142b4f9c8a248d29ec2af29b7b246e29d42a569b6f246829ce2a429a72247b29e52a479a4f2490290f2b9f986e24f729972b41987824812a202c8b940d25302b992cfc934b25af2bec2c7c985825d02bff2c609c1125692bbd2cb99e4524652a212c0aa01d235129ec2a889f17228828d529739e99217627be289c9dfe201426ef27dd9ca82065255427679ca520c8245e26009cc81f0624d025439a8d1ebd23392516993c1e4823fb247d98d11ddf22b72406985d1d6e2270241e97f81cd52105245096c11c6f215b23c6959c1c3b2111235695921c0a21d3224a95901cd52080220695591c84200122ca940c1c2a2083217594b01bf51f422104942d1bd51f27211793071bbb1f1221f292e41a901ffd206c92f61a4c1fb120e1924d1abf1e6c202991d31b7d1e2820689200007b1fd12000804022c929ff2acfa03925352c482dc1a45a25aa2cd92d7aa5f5251b2d572e44a65d264e2daa2edfa6ae26842ded2e37a799268c2dfc2ef0a6a3265b2de22ee3a6fd257b2dfa2ee0a53d28832fbe3000a7c02bd731103355a7fe2bda3140334ea5bf28ba2e823091a2c7242e2c482d1da07924ae293f2b1ba042246e29ca2ad09fb0246b29c02a6fa0a6240e29662a44a0ef23b828192ad59e0724ad28062a419e01249a28e729fe9dac237728c0294f9d692354288b29b59c0a2336285929469c082333284829be9b7b237f288c29f89ad923da280f2a3698f1239d29332b2d07af24462bb02c9d1a4826f32c6b2e6f1c7327152edb2f9297aa26802d182f2da1cd245b2ba82cc3a13c230829672a71a003225327be28899e3e2086255727039cbe1fdb2449261b9be41f8024f025cc9a191f0e2454258399e81e8223f824f998631e0123a6249998331eb2226f247798081e632239242c98c61d23220d24fd979a1dd321bb236f975e1d842159231f97321d44210c239a96e91cfa20cc223d96ad1cac207a22ad95641c792017221595521c4320b92100952c1c102072219894141cc11f3e217e94d11b791f19211594641b481f0021b9930d1b1d1fdb20f892ed19c31ee720db91c41adb1ec420c79000004c1cf01d00807723ec293b2b37a146247f2ba92c4da3bb241e2c1d2d82a44625732c852d40a5b325b82cd52daca59925cb2cf62d7ea5a325d22c042e5fa59a25b32ccf2df1a4dd248c2b9e2c36a39a2007281229e99d9f1b43233425ae98e41f1025f126129d10247e28d02938a10a259d293e2b30a27e245529ce2a03a1e42318299d2a4aa0d823f1285f2a0ba00e24bd28092a10a009248828c029dd9f08245d288929db9fae232e284d29449f8b2321283d29b59e9c230b281b298e9eff22a127f828d49d57220527cb28ec9c572273267a28be9cee22512613282f9d7420b6250e28299aa81eaf285c293b983c28a82da32eaaa00d2cf931c0333ba4cd28ce2feb308fa12b1f3629fe2a29995a1c4423c1257f97f221782449264a9d68201524c625979b3c20e3234325939a2420a6235325329a951f4b2301257699d81f3623cc24a699281fea2281242799f11eb3225b24cd98381e5f2226242098db1d2222fc237197691dc1219523e0961d1d582115237f96ca1cfb20a322d195be1cb6203a22c2958d1c7520e82186955e1c3a2099210e95251c12206f219094bc1bdb1f3e210a94481b9a1f2d219b93e91a461ffa20d4929f1af51ec7208b92861ab21e7d207292e2191d1e59207b91e11a3e1efc1fa2910000381b201c0080fb22a029072be1a01124f42a402c7da24b243a2b712c55a36e248b2bb12cd1a3c324f12be42c34a4b724e72be62c07a48424ab2bc62c75a33a24f32a502c81a2a9228129dd2ac0a04e2128285029909f38209b2668285f9ef7200e278428809fae23a028eb297aa13824dd28622aa8a17223b5282a2a42a050239c28f429be9f4f237328ae29539f4f233f287029889f952318283f29d09fbe23f427182935a09323b327f32839a055237227c928c39fef221d279b28f39e8922d4267128ff9d38229f264d285b9d2322942638281d9ddf215a260f28b99cd1213a260228849c5921fd25ad27009c6620c1245926559a691c172105245a961112831c431e328c1619dc1da71fc092e31cd42067227c96c91d3c220d245a97371e05239a24e697301f05239324c598261fcd227524be98d01e762238248598631e542218240f980e1e2422f923b197c51d0722cf2355979d1de0219f23d196691db22167239296441d7d21492365960d1d47211a23d995ba1c0121e62234956d1cca20b422e0942f1c87206b225f94211c682024225094da1b3320e0211a94911bff1f8e217a934b1ba01f4c213593c51a2f1ff320b1926c1ad31ea520fc915f1a8e1e4c20f091db195a1e382020913a1a4f1eeb1f73910000331cbb1c00800f22d528fe29459fd322b629172bc5a05d23062a712b90a19223372ac12bd3a1bc23472acb2bf3a178231e2aa32b89a14c23f529752b4ea1562398291a2b55a13d230a29902a92a124235328b72998a193229c2708290fa1a422ae27012904a1f1220b284e29f3a0ec223428752959a0b52242288029ab9f672224284a29c79e4c2202281829229e7e22e827ff28249e9922be27e5283e9eb022a127d028539eb0226c27b528239e96222f279828dc9d3b22f4267a285e9de521c0265a28be9cae2195264828699c81215b262728469c5821282607284d9c2621ec25d827ff9b012192258127c59bc12034254027a79b1c2090246026629a321ed4229424a398281bad20fe212795a31a5720972197943a1cf8208b229c95811df021fd234e97df1e8c226d24c198781f8d227e242b99b81f772253248f99421f3c221b243a99571ed421b6236398f71da02162232098911d6f211a231397401d3c21f022ac96e51cf520af22f195a31cbc207d22a195811c8e204f223795631c672017221495481c4d20ee21f594341c2220bc21a194071cef1f64213594ad1b871f0d210294341b1b1fcb208693d31ad71e8f2021936e1a9e1e5f205b92651a851e2620ae92bb19451e3220aa91af19ff1dd41ffa908b267e2b642cf1a45f297e2d812e1ea92c2a3f2e5c2f67aadf2ac62e0030b6ab652b802f783041ac3e2c5d302a31e2acdb2c2331123250ad282d6e316b3247adf32c10311432a5ac9a2ca6309131dcab0a2c1c30e23037aadd2ca5318632ccaa812e413418352eace32db9316f3266ab2c2e6930bc30c1abcd2e8730bc302dac252f8130bb3049ac0c2fb130f63007acf83085342135fbace430db349835e7acc42fd730d13071acc12f5c305730dfacec2f5a302c3050ad05306d302f309ead1a3063303230d9ad163056301930f1ad0e304930133003ae2a3060301f302caee82f1e30a62fc0ad1c2dad2d6a2d49abe0261529982907a44522e7263528669db420472603280a9bf81e70261d2837990022c6289b29529cd82220293f2a1f9de5205126eb27539b9a1ead23de242099941e3f237a241c99d91dcc224b24b598931d782219245498061d1a22d423cd97c01cc32165231c976e1c72210323a196281c2721b922fc95081cdf2077229495dd1ba42030223895c21b7d20ef212695731b5220c521bc945f1b37209d217a94ed1a1c2062210294331aa91ff6202d93a319db1e7520e4914019a51e58207c911d19851e2d2058911f19671e0f2010912b19821edf1f6691a0182f1ea41f18915e1bed1e9b20b2933328892c642df0a6272a8a2e942f8faa062b292f3c3017ac1a2c1d30d1302fad912c9c306f31e6ad3b2d5f316732c2ae932db831c9320bafb42dfb310133f7ae8d2db231ad3277ae6b2d4c31603228ae092d5a316432baacdb2c9731c13279ab042de831203303ab402d6f316b3230abf22d0b319e3112ace42e3c31b0319fac8a2f5b31c831f3ac0930cf31303212ad5030db3283330ead72300333ae3315ad2e30be31013222ad22301b312e31a9ad1830fd300331d6ad1b30c030ab30f8ad1430aa30923029ae1730b33094304bae1f30a0306a3093ae1a306c303530c6ae412fcf2f682f32ae7b2c3d2d222d67abd42698293a2a7ca4d922ed27df287a9ed7218727b028079d8921b127d328749cb521db27f528459c63218e27d028d89a792051261f28af99861eb0245c2625988c1e242474255898231e7323b92412988b1db9224e245b97191d6b222324c496eb1c3b2204248796cb1c0622b7235c96c51cce2177235496b41c972134233e96921c5a21012311965a1c2221b0228795101cde205c222995a11b9b20fc21d9942c1b6020a9215b94cf1a1e204921e293531ac41ffe205293a919511fbf20ea916319e81e752053912819a91e2f20189124197b1ed61f8090be18191e8a1f39918e1a4d1e59207a92ad28172d062eb9a7102b962f693087abf02b0a30c830bcac9c2cc6309d31f4ad512d6031603205afd62de231ff32c9af2f2e51327c3315b0472e8232cf330eb0292e65328d33b2afce2d0b323433c3ae7a2dd831ff32afadec2c71318d327baca52c2a3136328aab832cd730ce3190aada2c9e308531a5aa8d2db8304d3172abd32e4a31cc31acac0530c931313264ad2f303232a9329cad353011327932a4ad2930aa31f531b2ad213056317831e3ad3330393147313aae2d300631fc306dae2730ed30e530a0ae3230d430b430eeae4130cb30a73063af2830b0308d3056aff82ee82fa42f0daecb2bf12c212d53aad2254b291b2a26a3c523a728a729ca9fde22322824294d9e10228f27c728e19caa215c27ad283d9cfb20e4267d282c9b98201326d4279d9a0a207a250727d199731f1f2597265d99091f8524cd2544995b1e9f23e824c198c21dca2257242598601d76222624bd97201d48221a246197de1c1622e323bc969c1cd32196236196671c94215b231796241c4d2109237f95f81b0421a7224a956e1bae203f22b8941d1b6320d3215194bf1a122058211894c31ad01f13211b94d81a951fe120ec93951a491fb9203f93531a2d1fa62040923b1a261f7120ce917c19ce1e5a201c91681beb1e8620b5940000752447250080242b452f68304fab4a2c7b3054312dadd32c0431f6313bae832da631c73247af072e26325433f5af682e8e32b43346b0832ebe32f13340b0632eb132e33309b0ef2d51328133ffae8c2dfa311d33fead0a2d87319532f2aca02c1331113204ac302c9730863153aa062c48302331a0a9532c3c30f330cda9572db430573150abca2e3731a331bface02fa13105329dad2330cb311b3204ae3630ac31ec315cae37307231ad317cae38304a315931bbae41302331243126af4d301031053178af52300631ea30bfaf5c300831ea30f0af1e30bf309f3080af102e472f602f85adfd292a2c692cdca8c4258d29812a15a32724b428bd290ba0772362288b296e9e042343285a29d89d86220b280b296f9d8321fa267228979cf9200726b227249ccd209c250d27ff9b52201e257426329b7f1fa724ca25089aeb1e2c24432591995b1e9e23d224ef98cf1d272385248398411dc9224d24dd97e91c5b220c241297971cfb21a9239c967e1ca32165237896621c5e212b2350964e1c1d21e622f595531cf320b722bd95181c9d2061226f959f1b5d20fd21d7942c1b232090215b948e1add1f1c2138931c1a6f1fc520ba92da195b1fb3201d92e119581f7b2024926519131f6120a391221b071ffe20a5920000461f53210080752bc22fb13087ab7f2cc530a7315dad042d4f31503268ae9b2dd9310c3352af362e6132963319b0792ea532da3346b07c2ec432ff333cb03c2e9232d633caafc22d34326133caae752ded310533f8ad012d8e319b32e9ac972c1d311932f8ab112c9330783125aa802b3b3011313ea94b2b0d30e830fea87f2b9f2f9e3022a9af2c3430cc308caa442ec9302c318eaca52f56319331e2ad2e307b31ab31abae3f306931953122af57306131743189af673049315631e5af7130403139310bb066302e31173121b06d300b31e83038b0902f6430983050afca2c582ea12e5cac5228602b252c48a6e0243429952a70a11724c928d929829f932381289029189e2e2341283629c79d9022f127e528489d85211d277828719c042149260528099ca420c1255d27789b4a203525aa26a99a9b1fb524e925e899011f612476257099661e04240f25ca98eb1d4823be246e98821dca228c24ee97111d702249240297bc1c102217248d96821cc021c323fb954c1c90216a237695331c5e2109235695f41b1e21b622d494751bd7204a228794081b9720f1211294a31a52209b214f93461a132056218e924f1ad41f28213c92611ac71f1d21f291a01ac61fdc208c92a0195b1fb3208f91c91b5c1ff220d0920000dd1fad210080552bc12fb4304cab762ccc30b83142ade62c523152321fae702ddb310c3306affd2d48328833bcaf332e8e32d13301b0432ea832f23300b01a2e8c32d633a0afa42d35326833a6ae552de3310333afade52c79318732aaac6f2cf630ea31b3abd82b7030503142aa2b2b1430f03050a9b12aa62fa930ada88f2a492f6d307ea8bb2afe2e2b309ca81b2c952f5830bda97c2d4d30b73024acfb2eb830e130abadeb2ff7301c31e0ae1c3019312e317caf31300c311831dfaf3d300831053119b03330e830e1301fb0f52f99307930ebafde2d752fa52fadad6c2aac2c082d4ea96d262c2a232be4a3dc244a29602a25a15b24c228e1297da040248928c02924a093233b2854292a9fed22fa27f7285b9e00227027a828569d4f21a1264c28929c9d20c1257b27f29b4c203c25cf26289be31feb246726599a531fa4241126e599da1e5224b22552993a1efc232f25d698b31d3823af244498371d9f224724ce97df1c3a2202240497b01cf621a023c096811cbd2156233b96431c75210023e5950a1c3021a5229795d11bf32049223095331ba920f7219394a31a6120a02107945c1a24205b215d931a1aed1f2421b892101aab1ffb20fe913c1a831fb72029924019e31e9220e4902b1bb91e7320779100002220f3210080442bf92fd73007ab752cff30f23131adb42c59315732cfad2f2dd231fe327aaeaf2d353271332eafe52d7a32c03373afef2d8e32d8336aafcc2d6832b033ffae682d1632523338ae172dc831f7326dadaa2c5e31793261ac342cd230cb314cab8c2b56303a3120aadb2aec2fd23015a9222a472f6e3049a8bd29c92e2730b2a7bd298a2efb2f89a7d029512eb72f78a7832a592e782f75a82c2c022fe62f2faa672dd32f353076ac3c2e2c30523080adb32e473059304aaee82e53306630aeaeb42e3430463094ae922d4d2fa72f63ad402b472dbe2d4baa8f274c2b8d2c12a5c825da29212b9ca2572532297d2af5a16324c128ed2966a0fa236f2891298b9f5d232c282729c29ea422e527dd28189edc2139278228609d322190261d289f9cd3201d269327289cae20a4250127089c592018256a267d9be21fbb240e26919a211f7824be25bd99d61e32246f254f994e1eb2230325e598ec1d132397246e98941da3224924b897041d2e220124f096a31cc2217f2327965f1c682117238e952a1c2c21cb224a95171c012186223295d11bd4204a22f794a71bb7201422a594601b8720be217a94c71a28203721d993b41a0a2016210193c71aec1fe1207793cf197f1fcc206592981b6e1ff8206594000057234b240080702aa82fba3051aa092cb530af3187ac7c2c483153326aaddb2caa31e532ffad542d0d325733a8ae712d3e328f33ccae692d42329733afae5b2d2f327d3377ae1c2df7313433cfadd22ca631cb3200ad682c2e313c3213ac112cc530c731f2aa732b66305d31f1a9b72acb2fc9302ba9f229ff2e3f3053a88429902efe2f8ea74c29622ec72fcea61429fb2d472f61a60429932dbc2e29a628296e2d852ea0a69f29772d6f2edba7ae2ac42d8b2e24a98a2bf82d942e55aabc2be22d622e9baa5b2ba22d352e48aab029e22c992d60a8fc27922b742c5ba59225fa29352be6a1ce243929782aaea09924ee282f2a9ca07624c928132afaa035247728b32956a0542328283929239f6322b727c9280b9eaa21fb266928339d742192264228019d15214f262228aa9cb520c3259527309c3d20372595268a9bbd1fcf240626aa9a7a1f9124cf253a9ae31e39246525bc99621ec923062523991b1e5823c224ea98d81d0c2386248a98941da82245245598181d3e2200249f97c61cdc217b2325978a1c83210d2389968f1c4c21bc229096521cf02056223996cf1b8720d52167951e1b302069218694771ad61f05217c932b1a8d1fcd20cb92581a761f9620a192d3193f1f71206a92491b1c1fe420039400003c20da2000807c2aa42fb3305daaa12b7b306d3148ac202cfd300a32ecac7f2c7431af327eadea2cce31123312ae062dfe31493335ae012d053255332eaef42cf0313d33e9adbb2cc43100334fad932c9031b8329eac3f2c29313532bcabd92ba1309731b4aa292b30301d31eaa9832ab22fb730d4a8b629f32e4030fba72229582ec22fe2a6e7280a2e5d2f29a69928a52de92ea6a55828322d642e17a51e28e62cf52dd3a4ef27962ca32d89a4d2276f2c5d2d79a49827412c322d73a4bc27242cfb2c50a42627db2bb52c92a35226232b592c28a28c25582adb2b3fa11d25b929212bd6a0c5246129ae2a83a06c242029662a2fa01b24df28162ac49fbc239e28c829519f2c2354286729959e8922ff270429ff9ddf2150278d288e9d6221b0262c28179d04213926e127bf9cb320c0255a27729c6c205725c6260f9c312008256026b19bcf1fb4240026f29a7d1f7a24bd25739a311f52249225fd99a51e1e2455255999111ead231125b698931d2723bc2454983f1d9a226924da97fa1c0e220c242b979e1c91216a23a696631c10219a221296101cb22016229f95341b5f20a5219394cd1a2120502121948d1ae01f30219593bb1a0d206d210893a71a06206721f392af19961f0921f0919d1bab1f0c21189300000c20a0200080fd293d2f7830b5a93c2b6b305f3102aceb2bf9300732abac3c2c5c3199322cad922ca331e932a5ada72cce311e33bfada82cda313433b0adb22cd3312b3389ad8b2cac31f73209ad5d2c6a319a3268ac172c09311c3273ab8a2b8b30813170aadb2a1130ee30c2a9352a602f8030dda89a29e32e3530fda74729822ef32f14a7e8280c2e5a2f2aa67728612d922e5ca53128ff2c2e2ee9a40228be2cdf2d95a49a277d2c802d22a414273f2c2f2d7fa3ab26052cec2cafa25126ad2bb42c27a2c125282b602c9ba16225ad2a152c3ea13325542ac22beba0f724fa296c2bb2a0d024ce294a2b8da0b3248329e72a50a0412416296b2a919fcd23c928fe29299f1323642880297e9ea22212282729169e2422d227eb28cf9dae214c279d28369d3c2192262528ce9cbe20ec256a27389c6d208625e8269f9b422037258e26559b1320e6242126ca9ada1f8324aa258a9a4e1f27243e25e199b21e8d23ce246399ed1d02237724c598761d932239243e98241d49220924b197e81cf621a9231197a31c9f215c23ad967f1c61211d237996281c0b21de22c095dd1bcb20b9223895461b7d2056229f94041b4920c7214294bf1a27208b216e93b61a19204521c593091ae11f2921f791861b871fed20e39000004f20d3200080b729132f5f3087a9ee2a7b306f3195ab662bdf30ea315cac012c46318532e4ac532c9231da3248ad7e2cce3122337cad8e2ce33144337fad872ccf31273346ad4e2c9631e432c5ac1b2c4c31863234acb02beb30023200ab042b71306c31cba9372aef2fd730c8a8b9293e2f6d3029a86429c92e273089a70329572ec52fb9a6ac28ee2d3f2f01a65928612d912e57a5f927d32cf02daca48e27882ca82d36a45c27622c7e2d1ba424273b2c502dc3a3ee26ed2bf42cbba37a26582b9b2cdca21526ee2a492c45a2b525a02a162c8fa14725492ada2bfea0ea24f229642bc9a0bf249729fc2a7da094244729a12a33a05824fd28362af99ff2239f28ca29849f372353287829d39eba2213282f298d9e3c228927bf28139ebf21be263e28999d67213426de27439d1021dc259f27ca9cc02092254e275c9c6e203b25f126119c1920dc245f264a9bbc1f8824cf25e19a551f3e247b25509a101ff2232425159a6a1e1f23b6245899841d67224b2498981a1dd521e9231b98e21c8621842395979d1c67213023e7968b1c4521d2228b964a1c12217d22ef950e1cc12017226195ba1b7920af21b1945a1b472078214194f91a2c2053214993d81a222031212693571a14202c21a0926e1b321f8020819200007220022100807329002f4e3031a9582a3f30273108aba62a9c309f31d6ab5b2b1531563270ac072c6a31b132ebac322caa31053320ad492cc53126331dad402cb1310e33f3ac082c7531be3269ac982b22314b328fab172bbd30c93175aa8b2a4c3040317fa9f129bf2fc2307da85b29e52e4730caa7f5285f2eeb2fcaa6a728002e7c2f1ca66a28a72d152f8ca538284b2d9a2e2ea50528f82c3e2eb6a4c327b52cfa2d54a434276a2ca22da0a3b626302c472deba24326e52beb2c47a2f725782b9d2ccfa1b225eb2a522c8ca17d25942a1a2c31a14e254d2ae82b2ba11525082a8c2bcfa0cc24ce29372baca092248129db2a53a022241329692ad19f7323a128d6290c9fe82257287129ba9e7622042808294b9ecf212c278a287f9d5821ab2647280e9d032162261528999cd2201c26d1276c9ca520d2256927229c76207425f626af9b312009256d26fb9ad21fa924f825849a1f1f54248c25bb998e1e0524202517990b1e7523be248698b21ded226f244398731d88223424d997331d382206243197dc1ce921ba23b996c21c94216c239596881c3421ff224596391c9e2025229b95f71b38207521d694451b052068216a94561bed1f78213f94c71bdc1f64211094ee1b621ffc200a95251ca31f5721cc940000922027210080db28652ee22f8fa8d1290930ee305daa1e2a73306c3120abc12ae4301e3207ac912b3f317e3291acd22b7a31d332b8acfd2b9531f232b5acf22b8631e33292acaa2b5e31b63216ac5c2b22315a3253abf42ac730e33155aa832a4d30513190a9d4299a2fb1307ca83629c62e3b306ea7e828402ed12f95a69828d22d412fe7a54628852ddc2e40a514282c2d732ec7a4bd27d52c0e2e51a45227942cbe2dc0a3de264a2c672d14a37b26f12bf92c7fa21026572b942c14a2d025042b5d2cd4a1b425be2a352cb7a1a025772a092ca3a18c252b2ac72be0a12b25ea29782b53a194247429de2ab8a0522409295f2a35a01324bb28fc2933a0c2237e28b429c79f682355287929379fe72222283829879e5922d427eb28d39dda2151279828349d7721c9264728dc9c21214a2601286b9ce220dc257227349c9d207a25f426f29b5b200a256726419b0d209c24f425c09a3e1f40249825d499911eda23392549990c1e4f23d824de98af1daa227a246a98291d21222224b997e01cc821da230597bc1c9c21a923d196841c642151233f96451c19210323aa950a1cce208a222295da1ba9201322c494de1b9120cb21c794e91b70209a2194947d1b3e204b2156947a1aaf1fdb202293d51b581f8420db9200006e20f82000807028042e662f0aa856299a2fa130c3a974291330073146aa172a8c30c03144abf42afe303a3232ac4b2b5031a3325aac892b7331cf3271ac742b6331bd323cac192b3131823277abcb2af2302332aaaa612a9b30ae31cfa9e32924301931dda865297e2f9830ffa7ff28db2e3730b3a6b1283a2eab2fa1a56628b32d1e2f08a51528612dc42e52a4a8270c2d602eada32427b52cf42df5a2d7266c2c8d2d78a28326302c402d29a26b26092c0d2d40a21d26a42bca2cf4a1c3252a2b762c9da17b25c12a3a2c2fa149256c2a0b2c00a112250b2aa82bcca0c024b9293e2b7ea080246e29e52a21a045242e298e2ad69f1124db28232a779f98238928ac29f89e20233d2855298a9eb52205281029589e32229e27d028af9db52125278a283d9d6621a7264328f49c12212526ed27a79ce420b92555275a9c9b205c25e026199c42201b257b26559b0b20cb241326bc9a501f8424be25179ad41e362464257f99401ebc23fb24da98ad1df9228a243f98241d42222a246797f11cc221d823d696c81c7c2176239d96881c2a21182303962c1cd0209a224d95df1b802014220095b91b6120ce21b094a81b4920b221a694961b31208f212d94661b0d201f214894771a6b1fa2201e93bf1b281fbf2078910000e624cc2500803327592da72e74a67b28952e1130c7a8c428302f7c307ca93c29143031313faa492abe30e7317fabfa2a3a318b321dac5d2b7331d9322fac582b7131e032eeab0b2b4331ac3235abb32afe3049327baa2a2aa130c03170a9b62926302a31a3a855295f2f94301aa80a29ab2e26302fa7a928132ea22fdba56028b12d342f01a50d28562dbf2e2da49727ec2c322e65a31627862cb32d81a29926372c4e2ddea13526e82bf92c85a1ff25762bb22c55a1aa25072b6b2c0aa16d25b22a3b2cd3a01f25612a0c2c8ea0f224262ad32b66a0b924e7297f2b55a08624aa29332b27a04d247229ec2ae59f16243b29a42abb9fd3230729582a9f9f9923c528112a679f2b237328ba292f9fa7221c284e29ab9e2b228d27e528029eca21fb269728a49d4c2174264028299df120ed25c927d09c83207b251127449c3d202a259826c79b0520ea244e26619bb01fac24fa25d69a251f53248425279aaa1ee12311258d992d1e19239b24f898fa1d94224c24a4989a1d192201243198281daf219c232297db1c5d212f237296861c1521bf22bf952c1cc52055221195f91b8f20f821d794e41b5d20a821ca94ce1b2e205921bd94ec1b162030219694f71b0f2000210f957a1bb91fe5205494e11b781ff6201e948523c12acd2bf0a0eb263f2d5c2e66a60a28f12d352f31a82828fc2d522f8ca8ff27312eda2f6ea8a7284e2f7e3017a9bd299130b03133aa572b9a31f83269abfa2bfe3188337dabab2bbf315533e0aa072b4d31d03201aa4e2ac2300a3235a9ad29263038315ea80629432f85302aa796288b2e1530e4a52828d52d3d2fc1a4d727532d9d2e0aa46527ed2c262e34a34d279d2cd92d1da311275d2c8f2dafa2c026282c432d32a26026e42b032daca100267f2bc22c2ba1b9252b2b8a2cc4a07c25d72a542c91a042258a2a222c61a01125432aec2b38a0c224f2298e2b19a09024bb29472bdc9f5f2491290a2b879f29246a29d32a669f05243a29942a9b9fa423fa28452a719f43239928d529479fd3222f285c29089f2c229c27dc285c9e942106277628979d3f21922641281c9de52029260228c59c8220b5257027649c32203d25c126f09be01fd5243226739b7e1f6c24af25e09a251f1f244d255b9ad21e9723fa24e099301e1c23b9242799d01d9d227124ad98841d382238244898431deb21e92316981f1da7217523aa97f81c61210b232897c71c02218b229c96551c8920f4218195cb1b42209621bb94361b182069212d941a1b16205f21d293731b1d204e211a94da1a092064218b930b1cda1f4b21fe931f23202af02a46a00326d12cfb2d64a513276e2dcd2e0aa7a127b82d322f2ca8df26902d092fcfa73826792dcc2e11a74825102d632eeda5e627f92da92f19a8c4297430bb31eda87b2a21317f32e5a87b2bb3313b3304a9be2b1b32eb33a5a80c2a553072310ea87528a72e24309aa52028082ea22fb8a4b5277d2de82e15a44327dd2c352e13a3e826832cb32dbaa2b7265b2c7d2df9a16f26342c4d2d8aa14226082c162d09a1ea25ad2bda2c98a0a3254f2b9d2c38a06225fb2a6a2c07a02c25b42a402cbd9f05257f2a1b2c839fe324462af72b509fb624fd29982b519f7c24b4292a2bf79e45248429e82aa19e21245829b82aa59ee7232c29812ace9e8023f1283a2a189f0923b128ef29da9e6922582875296d9e0022ca27e528049eef210f278428f39dbf2193263a28c29d11210a26d627ef9c41206f250b27cf9bb31fba242126119b141f55248c25189af61e20244325ff99cf1ee5230425ac999a1e6123b9245099551ee2227024eb98f51d69222c24a098a61d2d22ff233a98671dea21af230b98171dab215d235497f21c6021f522d8968d1cfe207b224c96441cb82020226b95101c6a20cc21ef94a51b28207b21a4948f1bf41f45219794aa1bca1fe620a794ab1a0f1fa520b893c41b151fba205c92d71a58261e2750951b26c62cf42d8fa5c5266a2db42eeea6f426d22d4d2f00a85327442ef22f79a81628cd2e44301ba97d28642fa530aca9df28e52f023116aaf928fc2f1531efa9cb28bc2ff43061a96928322fa23094a89f272c2eef2f0ca788263c2db62e4aa41826bb2cf72d48a280268c2c932df7a1b226922cc02d33a19d268f2cbf2d23a14f265e2c882db8a01826332c532d37a0cd25fb2b112db39fa625a22bdd2c2d9f6f254f2bab2ce79e4e25062b872c719e2d25d32a6b2c499e3025aa2a562c979e2d258f2a452cde9e1c25662a2d2cc89eee243d2a0f2cd29ebb24192ad62bd09e8024f2298d2bfd9e5224c129472bf49e2b248729f62aa69ffd233c299c2ac89f7b23d928192ab69fc0225b287629269f22229527d528ab9ebd21c0266428139e712152261128ea9d2221d02593276f9d63203a25e326669cd81fb6242326339b171f53248f25e899cb1e07243a2546998e1eb723f624e8983a1e4b23ad24a998f01ddd22602446989d1d5c220e240b981b1dda2185231097cf1c73210b23a796941c1f21a82255965d1cd220412209962c1c6c20d021c695d51b212069213295561bf91f3f21a9941c1bd31f27215194e11ac41f1721f793171bd41ff2201b947d1a8c1ff9208393611b6a1fc2204b930000d7229c2300802b25012cfa2c8fa40026d02c062e50a620264d2d982e22a7d426db2d6d2f1fa8b3275d2ef92fb3a80c28ca2e4a3000a93f28182f87303fa96f28412fae305aa97d28432fae301aa988282a2f9d30b4a86128f82e7b300da81e288a2e273038a66a27e82d5e2f3da42c27632dd62ef9a1df26ed2c4e2ec1a0bd269f2cf12d17a048264c2c822deb9efc25042c302dee9ebf258d2bea2c549ec7253a2ba12c5d9ea025f22a6a2c839e8025cc2a532cad9e7625ce2a512ca19e5925ca2a532c319e3925c62a512c579e1625c42a532c509df824c62a4e2ce99cdb24b72a472ccc9cba24932a312c799db224702a1b2cc39e6a24272ae92b9a9ff323a7294d2b859f05231029952a3c9f39227328f029c49ed621cf272829829e9421d9265a28109ec7202126c927ec9c5720952534273a9c2c203b25b726a89bd21fc9242b26bc9a3b1f5724a225069aa21ee323242556993f1e5523c624da98e31dd3226c243d98731d4d221224d9974b1df021b92353974f1da6217c2358977e1d5c213a239997901d43210b23b297651df920db222997c61c972056225696fe1b4520e9211495c61b3720bc21f094301b04209e215d942e1ba51f2621e893c61a3e1f8a207593a019b41e49203292d01a431e2a20f79100000021602100802024b82a452c0ca336252d2c152d30a5ac259f2cbc2d35a6f225f92c302ec2a674263b2d8b2e6da79d26872dee2ecca7b526af2d332fe8a7c626cb2d612fcba71127e32da62fbba74b27302ed32f77a71628e02e623071a79c28b02ff03093a6a2288b2fc0301fa40728b02e3f30819fff26aa2d372f269cec26d82c202e6d9b2f26642c912df099f325fd2b0e2db6998225852bbf2ce9994e252d2b882c4a9a2625e02a602c86991025aa2a402c6f99f824852a292c559909256f2a242c67994225812a3e2c6c9b0625f92a7a2c41985f25822bdc2ce3976b25122c472d9798a5252a2c582df89b7d25042c2f2df99efb24622bc42c92a04c241f2ae32bcba0452314297e2a42a0072248286b293c9f58219827cc281c9ef320762616281a9d762087252a27799c3020eb24a426ec9b8d1f6b24df25b79a461fd4235c25449a9f1e8e231a258499261e1823c624c698be1d9e2279244c983e1d2c2226248c97d71c9d21a123b296be1c4f2138234b96a51c3321fc222a967d1cfb20ae22b495631cb42053229395391c5720e1212095f71b01206a21d694881bab1f1f215c941c1b981f0721d493e11a8b1f02219393d11a751ff4201f930a1b241fb6205b93721ad01e7620bc926b1c701e2c209e940000841ea81f0080c1226b29732a32a1ed24b62bd12ca0a40425102c102d22a564256a2c702dd2a5bb259a2cbc2d45a6e225b72cee2d85a6af25b02cec2d4ca6be25a82ce52d34a68125552c8f2db6a59924ff2b482dc5a4d125cb2cf82d61a5f2289f2f8930a2a6c02b5832cb337ca4c5294331c3328a9d3f28b82d862f849d6d24f72a992cbf9b9924c6299e2b109d91249c29612b8b9d42244f29cc2a2b9d29241429b62ad19c022400295d2ade9c1824dc282a2abd9ce823e428542ad09b1b2406295b2a309b31246329dd2af898ea233f2af32b2707fc24c32bef2cc9188f26142d8d2e421cc927522e1130090bb827592e0c30b0a0ec25df2c4e2e9ba23624a32a4b2c69a17f227d28bf2915a09a21ad265528b99e87205125e926cb9c0120e1249226939b8f1faa243e26f09aa01f5624b125c89ad51eea233025b199841e5323d8240f99281ed3228a249b98f91d862255247898e51d472225246998a71d0522f0231298641db9217e23c3974d1d6921262355972a1d3221ec222597d91cf520b0226f96a31cab206b2227965f1c752016228e95401c3520b4216695241c062062210795171cb51f2f21bc94cf1b711f13218594671b4d1f05211394ff1a241fed204f93e619e01e0821d492ea1aeb1edb20a9910000791da81d008006237b29ac2a35a10f24bf2a312c64a34e245e2b8b2c39a4b324d92be52ccfa40d25152c102d3ea5f6241a2c152d26a50a252a2c242d28a505251b2c1a2dffa4ae24872bbb2c32a46824902a132cc8a21e210228f828029f241bea22d32496981317ec20492258945d1e53247625a39bc52259275b288d9f722381287c29e29fe823c828f62913a0f423b928f229f99fa9236228a929769fe923512880297b9f56231d283929bb9e512314284129829e8522ac27ee289d9d00226c27c428ff9cb820c2266728549b1e1e032747286898041f0e293229da9897288f2d9d2e93a1242aa530b3316aa2542ab43005329ca26225132cad2c899e9a19f924bc27c093a91cab23f6258097712151241926889c1f202e249625559b0120ed236425e59a2120b5235225e19a352090233e25029b891f2723e124da999c1ffa22ac24e999fe1ec52268243b99b31e932246240399111e412210245e98a91df821c123d597521d922155235c970f1d3121d9220097d31ce0206d226796b71c97200a2242968e1c5c20b9210b965e1c21206e218d95141cf11f3e212e95781ba51f18215394011b5a1ffd20b693c81a031fce207893a91ac71ea0205693aa1aa21e62205793e319121e54207b92e61a251e01200a920000801b3a1c00807d222a29712ab8a0a9235c2ad02b6fa20824a52a122c3aa32424eb2a532ca8a37624402b7d2c30a480244f2b832c29a45824342b7a2ccaa33424cb2a392c2ea35823da294a2ba6a18322e428352ad4a01d217f270129949f461f3c25ce267e9ddf1eae240126629df82087261f28819f5922fb27ce2870a05f222d281f2901a0372205282429ee9e3522f0271529bf9e9a22e727fe282d9fc122b527e428279fa4226127b028d89e76221b2780287a9e3522c3264f28399e5e2296264328629e612267263228659e8822382626288c9efa21df25bc27a79dda202a25af26749c521eae23e52471996e198f1f09215f944317251c781ea391b519c21e9f204594fd1c8621a22377975c1e5f226a24c298c11edd22b524dd98001f3323c9240a99341f1723a1243099e91ec6226f24fa98961e79223424be98271e492210244298eb1d1e22e5231898bd1dfd21b8239d97981dd62187236c976e1da5214d2335973e1d71212523a996091d3521f3226696be1cf420c322c295771cbe2090226c95431c7e204a22ef94311c5320fd2117950e1c2920b421b294d91bec1f6c2152946e1b971f2d211794d41a2e1fde208593621acd1e90204f926f1a7d1e3820b992ec193a1e2720da917d1a391ecc1fae9100004f1b451c0080c721a928ce296c9f5b226829912acda0d622a429f42a8da12d23d9293e2beda15d23e5294a2b15a21c23c1292b2bc5a10f23aa29102ba1a128237429d82a82a1e8221a29772a37a1a3227428ae2903a1b3214827b8284ea025216d261928c59f1b213d260428b69f42219a263d28a59fde215627b52804a01622a027d928a69f0b229227d828e99e40229827d328f89e85228e27c928169fa9227d27be283d9fa3224f27a128d79e7822132781287c9e0922c4265828b59dae2182263a28369d7b2144261528079d40210e26eb27d19c0221b8259427bd9ce82071253b27a49c7720e7249e26399c681f0d24a925019b0e1d0f22e2235a98531a53209a2117953c1a57205d21d794691c3e21b0229a96bc1df7211b244a980a1f9922962444997a1fb922c52498998e1f9e229e24de99631f68224824bc99bc1e2322f0233b991c1eca2198239298df1d992153233a98981d63210723bd97541d3921d4221297f51cf12098229496b31cb5207122f9958b1c862045228495521c5c2010223f952a1c3420e8210e95041c0d20ae21e094de1bb41f55218e94a31b6d1f07216c94251b0d1fcc20de93c21ac41e932071936c1a9c1e662012935a1a7b1e2b205a93ac19201e1b20ed91ac19cd1d911f9b91ef1f022852281b9e1128812c502d0ca82c298d2d942ea9a9a329da2dea2ea5aaf529312e512f46ab5e2aaf2eed2fdeab452be72fae3070ac302c98307431c2ac432c97307f314dacbe2b3e301231d5aa8e2c6d31773244abc92d0034d0345fac832d1d32ef32dcabb72cc32f8030b9aace2d04307730f3ab9e2e52309d3058acfd2e6b307d3064ace02e5130743020ac5930a83231339aac8f31e035e33692ad0b303831153182ac9f2f49303b301cad8c2f3030213046ada92f3c30043092adb52f2530e12fb6adc92f2830d42ffdadd72f2e30d72f08aea92f1330932fe5ad392ecb2e692eb3ac1b2aa42ba22b2ea8472477277f28a6a0002147269827729cbc202b26be279f9b3f20e725ce27989a0820e7265f28439abf20562892295f9bc820b1261b28b29b1c1f48247b25ec995b1e632394247999b81dd0224324c3987f1d732211249498241d1f22d0234898dc1ccb2167230c988c1c7a2111235197391c2e21c8228f96f61bd4207e22f5958f1b8e202f2271952d1b5920da21f794f71a2a20a0219f94f91a0d206e216e94ca1ae01f282150941d1a651fec206c939c190a1faf207e927219a91e7020ff914319881e2920cb913e196b1e06207a914e19761ecb1fd791f118491ea71fb891221baf1e60207493d017f9256d2621957e28da2c1f2edaa8002a792ea62f69ab002b192f363085ac662b982f8230e2ac032c1c30e3304cad2c2c68303d3182ad8b2cdf30c331cead832cfc30ed3141ad9a2cf630f331f8ac932c533168322aac6b2c7f31b6322cab4c2c15312032bcaa7c2c65304831e7aa2f2d4b30cb3064ab442e9d30fa3034ac192f00315e31c2ac952f5431a63116ad24306d32fc3216ad58303533f53317ad233009326c3215ad07303731553184adeb2fc830c130deade62f7630513014aef72f71304e305aaef72f79305a3094aef62f6b303c30cdae442f0030a32f4fae732d492e5f2ecfac2b291f2bb42b0da84f242b28e9284ba14f2285278f28259ef021632782281d9d45211f2783288a9c582134279a28c19c76215927c328659ce520cb267b28539bfb1e0725982639994a1e1f245625e298d51d5523aa248798881dcf224d244b981b1d81222924ee97fa1c4022fb237397bf1c0122af231a97a11cc0216723ed968e1c7f212323d1965c1c3f21df2286962d1cff2083220396c41bbc2029225f954e1b7520cd210e95c11a3c207b217b94921a00202a215c94231a971fe520cc939f192a1fb22082926719c91e6c20f39142199f1e29207e913f196e1ec11f2f91e0181c1e721f5e91d71a2f1e1020eb9399176f26d92686951429842dee2e7ca9a22aea2e133031acd12b0230bd3037ad472c68303b31c4ad9d2cc230af3149aee42c16310932aaaeea2c363138328eaee42c36312d3240aedf2c29313232d0adc82c343146322aad612cfd3008322cac332cb6309e314bab202c6130323177aa6f2c4b30053172aa0e2d6630e83011ab3c2ed7304b315bacbd2f6131d73168ad0230d7317a329aad0c30f4317232a8ad08309d31fe31c0ad1d3038315231fbad17300d3110314bae0730dc30ce306dae0f30bf30a830d2ae0f309f307a300caf02307730523030aff12edf2fad2f39ae8b2cb42dcb2d02ac1d289a2a4a2bfba5242475287429bca0f02226281e29589f9622f227ee28ca9e0f228e27b9288f9d78212b278b28b69cfc20b9265328279c7a20f625a527349b04206425d126769a6d1ffe246426fa99ca1e5d24832577991f1e6523bc2419999a1dc2225824aa983c1d7b2230243698fb1c3e221524bc97ab1cfb21bf2340977d1cbb217723b796641c7f2132239296141c2f21ce22df95ae1bdc20582250951c1b8220f121b894db1a4a209d218c94bf1a19204f217a94bd1aeb1f17214894c01aaf1fef201994a91a6f1fc3200b94841a551fb5202d93481a1e1f792090926819da1e5720a691f21a931e5120a69300007823bc2400805f29082e742ff4a90f2b802f7e3082ac2e2c4b30103194ad932cc030a7312baeea2c16310632b2ae1d2d5e315d320aaf472d86318d3231af272d7e318332a8aedb2c49314e32eeada22c1e31243233ad6a2cf330e83185ac362caf309731abab022c573038319faade2bfc2fc53063aad52bb12f8230cea9922c2130b230a5aaea2da330123162ac252f3b3189314cadb22f6a31aa31d0ade62f5b31983130ae04303e31603185ae1e301c312131ebae1d300131013125af2130e730ce3067af1930c230ac3094af932f663051301cafeb2d0d2ff42e79adc22aec2c4e2ddea97126db29b42a80a44524bf28ad29c3a09a237d286229d69f3d2358285b29d99e8c222c283829029ee621c227d3286a9dfa2086262128919ca320ca255c27639c89206925da26299c4e20f9244b26e69b6f1f7c24a3259d9a8e1e08241f25d499191e7e23c5244099ab1d08237e24b998381daf2241243398e01c3f22fb239297881cdc218523c8965e1c8721342389963a1c4c21f8225396231c0c21ba223196071cce206722cd95a51b6d20f7218195091b1d207e21de94981ac61f152160945e1a921fca200c94491a851fbd20a2931d1a801fbf201493e5195c1f8d20d392db19061f6320c792b01ad41ef4209c9200001e2492240080c3295c2ebe2f4eaa4f2bd52fa930abac412c7b304a31adad982ce030d03132aef22c29312132bdae162d5e316232eeae282d79318132f4aefc2c63316b3270aebe2c32313932cbad972c1231143227ad5b2ce830dd3165ac2c2ca1308931b7abdd2b41301d31f0aa332be32fc630d8a9d92a9b2fa13045a9af2a152f3130f4a8bb2b572f4230bba9002d1f30d630b2ab582e9230eb300fad002fb430ee30e1ad552fc630f7305eaeb82fd830f530ebaede2fcf30da302aafee2fba30ae3055af7d2f78308c3023af5e2ea72fbc2f11ae5c2ce92d352e18ac9f28152cab2c3ea75c258a29a72a95a25b24ce28dd29bca0de23b528ac29e39f612363286729fb9e8d220928f528039e19227a27a228989d3d21ad263b28cf9ccb2005269e27439c56206025c026b69bfa1fe6241f26189b611f8e24b425909abe1e3c245325ce99261ed223fd244b99b91d1423b824c498621da82282245598f91c4d223824b997a81cf721f923f8966c1ca62186235e963f1c80213d23e095301c5521ea22cb95db1b1821a32236956c1bcf204122ed94fb1a8b20e1216f94d31a58208e212594871a24204d218e93701ae11f13211793461aa51ff5208e925a1a851fb120a392be19111f882000920a1c3c1fcf209d920000ab244c2500809929762ed62f0caa4a2b0a30d6308eac252c853055316aad772ce630d731e5addb2c343130327aaef72c5d316832b2ae042d6e317e32b1aee62c5e31743254aebb2c38314932b6ad942c14311b3202ad5a2ce430d83135ac122c87306e31a5ab7d2b1a30f530d2aace2a932f9b30d0a9352a182f5330f3a80c2acb2e1f30a7a80d2a702ea02f92a8742a7e2e932fe0a8ee2bae2e882f37aac02c512ff52fd9ab952dd62f2b30d9ac092e12304a307fad402e06302130dead4b2edf2f0030ffadb42d4a2f8c2f84ad742cdc2d172e2eac4529692cf72c34a85026912aa02beea3d02445294e2a5ea17c24bd28d52900a12a247b289729a5a0e62341285a2968a0272305281629c69f64229a27c428c49e722108277128759dc02033260928a19c542076250827f29b2420182586265e9b961fcf244426889a021f8024f025099a8e1e27249825a599121eb7231c250e99b11d1a238c249498411d77221e243a98c31c0d22ca2365978c1cd1216923ce96601c9b2126238c96291c5f21e1223a96ee1b1c218a22b695941bdc202d227595fb1a8b20d6210795931a4d208b215d94781a1e2053211c943c1adf1f18213893211aa01fea20c092381a6b1fa020d9927619e51e7320b491171bb51e7f209b921606f624c5251b827029842efc2fcca9252b2a30fd306aac102ca63078313fad5c2cfa30ed31b1adb62c3b31363238aed42c6131693260aee22c70317d3260aeba2c51316732f9ad8b2c263139326bad5e2cfc300332a8ac1d2cc330be31b9abb92b6f305a3108ab1e2b1830f13048aa7a2a772f8b3071a9d929cc2e1e30aaa89329512ebd2f4aa865290f2e5b2fffa79c29cd2de82e14a86429a22dc82ed7a7cb29982d872e60a8792ab92d7f2e2aa9042bd52d842ee5a94e2bc32d6a2e58aa252b952d252e34aa7e2a0a2d952d5da9e028502cff2c5da7b526c22a112c37a42825ea295e2be5a1d7247129c32a89a19c240829522a45a14024b728e52980a091234f28612901a0e3220428f228199f212262279028259e5921b7262e285c9ddf203126bf27bf9cbc20e1255a277a9c6e206e25d326319c2920ef243526a39b991f9024ce25c29ad61e55248d25149a801e0a2446259999031e5323d6242d99c01dc7226b24ca98711d682222246198e71c0b22c2239d978f1caa216023d296491c592100232c96301c2721c7220896141cf8208222a495bb1bc720512259959d1b9e2011220d95481b6c20b721a094ef1a102028216894d31ae21ff120e693ff1ace1fba203f94ef19461f9920de92f71b581fa820d694a2249b29482ac8a3072a0c2f2b30c4aa262b1830ea3044acd02b9c307931f0ac232cec30dc3158ad782c28312832c6ad972c46315e32feada52c5a31773200ae992c4c316d32bfad7e2c30314d323bad462cfe3008326fac052cb530ad316faba52b76306e31daaa0b2b1f30113137aa3c2a282f6b303da991297a2eca2f71a836291b2e5b2f02a8fa28ed2d372f3da7bb28992dd52e7aa68628352d532e32a65928ee2c042ed5a51c28ba2cc92d83a55328852c582deca506285d2c382d82a5c8270b2cd22c1ca55827da2bbd2c9da4c1262f2b642c3ea43e27512acc2b10a54b25cc29142b5aa285243529642a0aa19324fa28252a3ba17124b128d72954a11f2447286929d4a0ff220328fb28cd9ff0215d279428749e6821c5264d28b99d372163263528609dc920e225cb27ee9c57205825e1263a9c0a2002254926de9b8d1fb524ea25249b431f7b24a925aa9ab01e24244e25239a651eb323fb24b0991b1e3e23af246e99c31de4227124f698601d772220247a98eb1c0722af23ea97a01cad213a2372977d1c6421d822f8967f1c21217f22fb96471cc1201222a4960d1c5e20a9211096531b132041211195911aaa1fe2205b94221a641fab201a93211a4a1f7f201893f419411f7020e492711b091f9620f0940000c41fd32000809029bc2e1c30c6a98b2af22fc630ceab322b5f30373172acd82bc530bf31f5ac362c0331013261ad452c1731253274ad482c1f312e3269ad3d2c0e3124323cad2c2cfc300c32cdac0c2cdf30e93124aca72ba7309c3113ab3f2b483031317faad12ada2fcd3035aa572a2f2f723098a98f297a2efc2f97a8f328e32d332fc1a79328852dbe2ee9a652282c2d522e29a61428d22cf12d96a5d3278e2c9e2d07a56b274e2c622da9a434272c2c352d52a4ab26f62b0c2d70a39426f02bec2cf7a21026972bc32c6ba20326cd2a262c5ea25825142a852ba8a1c8248329da2a33a178243a29762afca03424e8281f2acea0dc23a528d9297ea03f235a287b290aa08e22f227fc28209fd7215a279a282f9e6e21f3265728c09d1f2181260d28479dc920fc258527cc9c5f2082250327629c3620282597261a9c0b20db243626e09bb91fa324f0254e9b691f6c24b325029bfd1e322467256a9a471ec623fc249599b71d3723b124ec98551dca226f2471981e1d5e2233241e98e21cdf21cb23dc976c1c63210d23de962c1ce7204f227b96b91b8820d921c7950f1b452088214895c61a04204221b094721a941f182118948e1ab41f3c21f593941abd1f29219d939c19271fbe202d928d1b4b1fad2009930000c01fb82000800929642ece2f03a92a2ab22fae3044abdd2a453021313dac4a2b9c3092319bacc92bcd30cc31f9acf62bea30fb3116ad102c05311c3222ad132c05312232faac102cfd3019329eaced2bde30ef310eac8f2ba530a931fdaa1e2b5230423148aa962ac22fb730b8a9ed29f92e4030faa86229842ef52f5fa81a292f2e9a2fffa7c528b02df82e79a73028022d212ef9a59e279b2ca12d37a53a275a2c592da4a4e226262c1b2d3aa4ab26fd2beb2ca0a37326b22bc12c31a33b26602b9a2cc6a2e3250e2b5f2c3ca28f25932a142c0ba25125352aa42ba1a10925dc29392b55a1bc249529ec2a03a184243729822ac8a00c24c128ff2949a03c236e289629a99fb02223283b29459f4722d127fc28d39ee8219927db286c9e702109277d28c29d05212f26c9272c9d84209125f226669c48204b25a1260d9c1120ff244d26b19ba71fa924de25069b5a1f49246b258a9ab31ee623fc24f5993b1e2e238d245e998e1daa224324c9981a1d5b2210244098ce1c1922cf230198a71cdb2186237d97751c8a213e232c975a1c54210823c296151c0221c8225796a61bae208522b995fb1a68201e22d494d81a3420a2218b94bd1a202075211794bc1a0a203c211794ec19ca1f32218592a11b921f17213f9200000d20ef200080e428422ea42f01a9eb29972f9b30faaa392a0b30df30b0abbd2a6c30633142ac502ba730aa31acaca32bdb30f131e1acf22b02311f32f7ace32bf9301732d1acab2bd530ee315bac702baf30bf31edab3a2b73307b3131abbd2a1930143123aa252a802f9b3056a99329d02e28309ba81d29562eb72f02a8d328ff2d5c2f6ca77c28a72df12e85a63128212d542efaa5d627a52cbb2d7aa59c27592c6c2d88a53d27382c4e2dc0a40027112c1b2d66a4a226be2bcf2cf6a32f26422b8e2ce6a2c225c02a332c42a25d254e2ac62bd5a10225f3296c2b96a1b5249f29112b1ea187246729c32aeca067241d296f2ac9a019249e28d92974a056233e285e29f99fa722052819293b9f3622a027d628949eb9211d2771280f9e692190261528939d33211b26b2275c9de720b2255427ea9c8e205225f626919c4a20fd2492264d9ce31f9f241526af9b661f4f249225359b131f0a244025e49ace1e9a23eb24709a231ebb227024a299531d06220e24bc980e1db121a1235a98cc1c69214c232298981c4d210523a7976d1c2321ad225f97151cdb2040229296ea1b9120e721ec95691b452088212095221b28204b21bc94fe1a10202c213f94931a032010219c93f419c21ffb203a93de1a9a1e3120c992000072204f2100809c281a2e6d2f86a895295e2f793095aad429d22fba3033ab4f2a45304131e2abd92a86308c3153ac2d2bbc30d93189ac742be2300232a8ac5c2bd930ff3171ac1d2bb330d13118accd2a803089310fab7c2a42303c312eaa232aeb2fe23097a9b429412f7a30dfa81c29872e0a3013a8ad28032e752f10a77328ac2d122f78a63828582da72ee5a50528fe2c322e64a5a627ac2cd52d05a56527652c872ddba4db261b2c2d2d36a45426b82be12c6aa3d425402b8f2c56a2aa25f02a572c28a26a25882a142ce3a15225472adc2befa14725192aab2beea23325ea297e2b3da2ec24a129162b0ca269241e29692aeba08823a128d62918a0f92262287a29949f77222d283829d89efb219027c628559e7521de266328c79d36218a263528849df92043260a28209dbe20f925aa27e39c8220a9253627859c4a204625ab262e9c1820d4242226bf9bae1f6924a7250c9bd61e17243d25e399441e9723e0243899b71d112380249998561d8d222d244b98251d2f22f023fd97e61ceb219e239b97c01cac215d231c97b41c612123230a97971c1221b222de96431c8520e6212396f11b292062217e95651b04205621e894441bcb1f77219e94de1bce1f4d218e94871c491f78208b97ac1bdc1eb1201795000092207e2100801b288e2dcb2e16a82229022f4630faa97b29a22f9c309eaad1291c3011312fab5d2a5a305831f3abaf2a8d30a6312daceb2ab030cc3146acec2ab330d3312dace02aa030c431d0aba62a75308a31feaa412a2e302e3139aa0d2ad42fd43083a9a329332f6f30d0a81529842e0930f7a7a228f92d682fdea65c28892de82e18a626284e2d9d2e72a5e827ff2c422edba48c27b92cec2d51a431276c2c8c2d03a4b926242c2f2db0a35726b72bd82c12a3e625222b7f2cbfa2c725c32a402cc5a29825722a042cb6a284252e2ab12beea23525d629552b40a2bf247429de2a90a139240a29522ad4a0f323b928ee296fa09f238428ad295ca0462351286c29e89fe222272838297b9f6522d627f628c59ee2215127a428e69d9821dd265c289b9d50216f261e282d9df8200226b027b39cb72098252227769c5e203325a226219c3420ca241b26f49bd91f6724aa25349bdf1e152450251c9a111e7023f4243999921dd922a124a4984c1d70225d246998f81c0f221724ff97c41cb521ca23ab97a21c87217f2332975e1c2e210b23c896261ce720a6227196f11bae204222b8958b1b9420ed2138958c1b672090210295931b36205621d094f11af61f10216994961a871fcb202f94281b631fe720e1930000a520992100806d272e2d4b2ef9a6b228862ef72f67a9e228ea2e3930e5a938298c2faf3072aacb291b300b3128ab3f2a66306f31ceab962a9130a23111ac7c2a8a30a031bcab4d2a6a307c3129ab0d2a3630423173aab929ec2ff430b2a97a29652f9530e9a83829f92e4c3017a8f1288c2e0a3053a7aa28112e7e2f63a662289b2d012f00a60c28402d8f2edba48727e22c1a2e33a404278e2cbc2d6ea3c0264a2c632df5a26d26122c152d9fa23426cb2bd62c65a2b8254f2b8c2c0ea26e25f22a522cc0a127258a2a162c75a10825392ad02b9ca1cb24da296d2b58a18f248e29072b36a14d244129ac2acca01024fd28542a88a0e323ad28e82966a082235e28782930a0002311282429cf9f7d22b427d7280e9fc12139279028ee9d4d21ca265528509ded2046260d28cc9c8b20c22583276d9c79206925f6265b9c37201e259026f99be01fe4243726739b9b1f9c24d725fb9acc1e4c2476250c9a511efe231d257199af1d2f239d249398141d5e2229241698b41cd121c5234e97a61c86217e23f596ab1c5b212f23fc969e1c2121e222a6964e1cd120742233960b1c81200122d295d01b5d20c1216895741b332094212895421b112064219c94d71ae31ffd2058941e1a0b1f5c206d93491b581efb1f33930525a62aee2b97a20d27592d7e2eeba61f28d82d072f91a85b28272e942f32a97028792e0d306ba9cc280b2f5830eda94b29b42fc8308aaacb291c30173128abdd2932303b31ffaace292f303a3199aaa1290b30103100aa6929b92fd63062a94d294a2f8f30c1a8f328c02e2f3016a8b428522ec72fd7a66e28de2d472fb1a51f28752ddd2ed4a4c727282d8b2e1ea44827c42c072e4ca3ec26762c9b2d8ca26626212c2e2d0da20726b52bd42cb3a1b825482b882c3fa16825e72a4b2c1da13b25942a202c3ea1f124412aee2bf4a0d724032aa82bfda0a924c129532befa077248929142bbaa038245629d02a78a0012427298f2a3da08823f328412a18a02f23ae28f52902a0d62252289729a09f6d22e02720292b9fe7211327a628c09e65216d265028dd9ddb20f725ee27249d942085253e27b89c40203f25bb26619c02200a256526049cad1fd0241f267a9b431f8924c325de9aad1e26244725519a521e7e23cb24cd99de1dc72268243899d01d5022222401996f1ddf21cc235f98051d802170238397a91c33212623b696531cf420c722bd95091ca9206b225b95da1b792001223695d11b5920a9213095a01b25204d210f95a21b07201f21d994831bf81fe320c694171b961fd2204e949a1b8a1f07219d94d8186d2645277294e625822c5a2db4a5b427a72de72e53a8ec27b42d032f8fa8f027bf2d302f9fa8c027c12d1e2f91a85027e22d552f5da80c287a2e0630c5a8b9282c2f80305ea9e528682fb6305ba9d7284c2faf30f4a8ca281c2f8430a2a8a2289f2e273027a85c28212e9b2f14a73528d62d472f1ea6d627792dc22eeca48c271c2d5b2e1aa46427d42c0e2e68a33427892cbd2d6ca30627512c782d70a3c1261c2c2e2d94a24926c42be52cf2a1dc255e2ba42c8ba17e25042b672c32a13125a82a272ce9a0f1244d2ae52bada0ba24ff29922b79a06f24b229372b32a03a246f29eb2a3da004244529a12a06a0882309295d2ac39f4f23ca280a2abd9ff42275289b298f9fa3221b282d29679f2c228d27cc28e29ea62104277328249e4a2194263428c09df7202b26f527429da320ba258227e99c2c205425fe264d9cde1fea246a260e9c931f9c24ec25989b5f1f48247e252e9b0e1f00242725ac9aa31e6423d624479adf1dd52286243999831d51223b24e7984a1dec210b246898191da621a0233f98e31c68212b231298d31c2f21df22c497991ced20a52224974a1ca6206f226b96931b6b202b227495681b1a20bb212095591b26208521ab944d1b1e206721a394c11a1b2076211a94ba1ba21f0521b19400006a24e42400805d25492c3a2de2a4ad26262d4e2e4ea74e27702daf2e27a8c527972de32e78a8a9276f2dca2e68a8cf262c2d7a2ebda74426052d412edba60626f32c272effa5b825bb2c4c2e20a5ef25da2c612e11a54b27762deb2ed1a548272f2dac2eb4a5c926d32c362eefa45627022d5a2eeba44327e52c2b2e76a4eb269d2cd42db7a3b0266c2c942d45a38926482c642d8da24a26272c3b2d4ea21426fa2b052dc0a1bd25962bc82c6ea17525332b8d2c02a12d25df2a5a2c9aa00725992a322c79a0d3245a2a0b2c6da0a9241d2ad22b68a07724d029732b9aa031247529f52a34a0d8233229a12add9f8323fa285c2abe9f4b23c528112aee9ffa228628b729c89fa822432865299d9f6f2200280d295b9f1e226d27aa28d39eb221b52644285a9e1c210726b4278e9d7c206925f2269f9c7e1fe9244126839b131f7124b525e49ae71e3b246625879ad11e04242425419aa11ea823e024e599801e36239824c8992b1eba224b245099b71d2f22f523c398491de821952341981d1dab214a231d98cd1c6a21fd227597a11c27219822ed966c1cce2042229e962e1c9220f8210596111c4d20ac21a095c81b26206a2162955e1be31f3321e3943a1bab1fd020cc94651a0d1f82201094271bbe1e8620aa92000040205b210080e624002cec2caba42326b82ce12d8ba66b26032d3e2e7aa7a826482d992e10a8ec266e2dbc2e3aa800279a2dfa2e53a82e27b92d1f2f6fa81127a92d152f44a8b0266e2de02eb2a74826132d812ec9a61226c12c102e0ba64c26a02cca2d61a59726b52ce22de2a4c926c72cfb2d5ca4ab26b22cef2d40a369268d2cb52d3fa22226582c792d74a1f525302c4b2df6a0c425072c1c2da4a0aa25c52bf12c8fa07525772bc62c3da05925352ba12c27a03725f52a822c32a02d25c72a632c50a018259b2a472c63a0ee24652a272c1ba0bb24382afd2be19f8a24072aab2bd19f4824d229552b9e9f22248e29022b07a0c32333298e2a38a04023be28052a3fa0932243286829e49ff321a327d8284f9f9a21e7266d28e19e80214e262928e99e4121d725ae270c9fd62052250d27ab9d0c20db245e262c9c571f7224d225269bef1e282461252b9aaa1ed9230f25bd993d1e8023cb243299ea1d0e238724c298971d8d223e245798471d0922d0231998d51c8f212d233b97961c2721b722dd966b1cd52053229d963f1c9f2001225b96131c4b20b4211996921b012056217395431bd11f36210695071bb11f2421aa94d91aab1f1b215a94161bad1fed204d946d1a6a1fe7207093401b141f9f2067940000f41dfb1f00807224fe2a492cf8a37c25462c5e2deca5b025902cad2da0a6d925c92cf92d0fa74426fd2c332ea7a79126382d8a2e02a8ef266b2dcb2e48a80b27792de72e4da82e27832df52e3ba80927732df22ee5a7ef26692df52e19a7dd26562dd12e27a6d926422da12e5ea53127442daa2ed3a458272a2d892e68a42327fb2c542ef4a2d826ce2c112eb3a1a4268e2cc42df8a07e264c2c852dada08c26182c3f2d45a15b26de2b052d79a10626a52be02c82a0b0257e2bc62c8c9f5d25522ba82c839e21252c2b8d2c3a9e03250a2b772c5e9ed524e02a5c2caf9ebe24b42a3c2c199f9224732a112c32a06d24212ac72b90a00724ab29382b9ba024230f297d2a49a049228828d129b89fce2112286329219fa5213d27c928c69e35214f260028f49d6820be252a27ca9c24204825b426269ce31fe6244526769b691f7a24c325cd9ac01e18244525d099521e9b23ee244499e61d0d23a324ea98851d9022472471982f1d0622d7230698f51ca4216e23b397ff1c722140237a97251d31211223b397311dfe20df22c597081dc120ba223f97711c52200d226596c61b132091216195931b06206e213d953d1bfa1f5221ce94e71a971f04213194791a381f8d20dc93a119a41e34208492c61a271ed01f50920000d71b651d0080b8231d2aa92bb4a2ce247a2b952cfca40c25022c032d98a53e25412c4f2d08a68f25622c7b2d79a6b5258b2cb32dbaa6b325912cc72dcda6ac25972cd12db0a6b125902ce72d78a6b325982cd22d28a6c125ac2cd72de4a51626f72c362ecda51e27c62d462ffaa509285f2e11302fa52928882e2e30b2a21a28702e0d3084a07827132eb32fb29dab276e2ddb2efb9c6727142d5c2ef19bcf26e62c302e4e9b9b26ad2cfe2d169b2227832cb32d709d6826792c9c2d299c3226692c912da69a3b26752c882daf9af1257c2ca82d0c9bfe25622c932d439eb125382c742de09f4525f32b242d22a1ab24f92a942c78a1b823d529af2bf5a0ac22b4281c2a61a0d821f1270729829f122102277728849e05218a262d28e29d7620af253627b99cef1f0a257226ba9b641fa3240a26fe9abc1e4f24a4252e9ae41e07243925219a4f1e6e23e8249c99c91ddc228f24fb98531d36222f246f98e01cb921af23d997961c53213a231f977c1c21210d2375966f1c1121e52262964f1cd920a1223496421c9c204f22e4952f1c4220d621ca95d81be11f4f216d95401b641f1021d094ed1a5c1ff9206694b61a5b1ff7201394d61a621ff320ea932d1b2e1fd020e793fd1a1c1f9c203e94361ddf1ef11fd09900005e19e31b00808820f627e828b89e0c24bd2a1f2cd4a37724112b5c2cb2a48c24852b9d2cfaa4e524df2bdc2c6da52025192c0b2dc1a5f8240e2c112d94a5dc24ef2b0a2d63a51725cc2bf72c7fa51925662bc42c4aa55a25ce2a602c67a50c24762a112cd4a3ef24602c322d37a434295f305c3164a6142b2332f63319a4532ad0315d336e9aab296b3090317b187028ff2dd92f851bfa267c2cce2d8415ab250a2c122d67125525062ced2c0612c525022cf92c90148c25602ccf2db3188226ce2c0b2e5a1320278f2d042f081d11289e2e53305d1c4b284e2fa7305d984e28182f8530f5a16b27a32d2a2fa9a458250b2c382deca3d9234c29592b98a10c22ee272e29f09f512167262828ae9e74206825fc26189d3c20fe247b267c9c5e20dc245726619c951f832419262c9b291f2b2489255e9a631e92230b2580991f1e0023a824ed98d51d9a226c248798a91d4b223d2465988d1d0b220b244f986f1dd421ba231198561d8c215a23fc97421d54210d23de97181d1921cf225697b21ce0209f22c3967d1ca6206d223696381c6f202322d695181c2e20b421aa95231c03206121b995161cb91f27216c95f61b701f0c214895b01b511f04211a95541b4c1f0b21a894181aed1e1e21b692c21ac31ec62071930000a21c671d0080582215294d2af8a09523152a902b55a3c6236a2a032cd9a34324d92a532c6ca4af24332b802ceda4a724432b892cf5a47d242b2b7a2cc9a4a224302b6f2ccfa4a524e42a532c9fa4bd24ce2a452c51a462243e2abd2b1ea3f9229328aa2912a1901f48259226f79cc0181d20a5219195f215901ee4204c92311ac42012220896d11e6223c224a49ab7210a269127919dd4222a277028a79e5a236b278e28bf9e652210274928de9dfd204e26b3274c9c761fb1252c27379aab209a262f28fc9aba1d4e27ce28ec978725ed2be82cb69e7b28342f6a30aea0fc2a9f30bd31e7a28a27362dbe2d739fdc1c202880297396b61a6624062636950a20f7232d26f59aef20b5244f26639ce21f132471253c9b122016245c25789b21200a245e25949b0c20d3233825339b2520922317255f9b961f0d23c024bf9a6d1fc7227f24659ab71e98224e249899451e59222b240c99cf1d1022e4238398721dca2183231398281d6c211523b797e51c052190225397a41cb4202322af968a1c7920cd218996611c402088214e963d1c0e2046211a96e81bad1f12217895521b651fec20db94d71a121fde205894cd1ae21ebf205294c31ab01eaa201b94d11a991e69202394681a0c1e51201294f61a471e132007940000d0190b1b00801522cc28032a98a05623d3292f2b79a25623e6294c2be3a25a231c2aad2b01a31424842a102ce3a33b24b02a2d2c17a41424ad2a2c2cc6a3f523692afd2b3fa39923d829422b7da24b235829af2ab7a18022c8281b2ad1a014218c27bc28629f6a1ff0242a26649dbb1c2522f523e19a6a1ef2229024d89c751f57256a27bd9d682193262a28dc9fd82123279e28ac9fec213b279628469f5d225f277f28759f332223275d28ea9e0922c8264028909eac2179261c28539ea5212e26b5274c9e1c218b250a27fd9d16209824dc25ac9c6f1d10228023e8997e190f20592181954315b11d8f1ffa905a18841e2020fd93271c4a20a8216397eb1d27225c244399a31ef1221225b7993b1f38230a253a9a571f3423ed241d9a301f2823d124fd99df1e0223a424b999961ec12271244d99391e7c224124d598ec1d422215249998b91d1622e9234898901deb21ae2301985d1dbc216e23b997511d8b2132235b972c1d5d2102232897f51c2821d222dc96911ce220a1220f96421c9a206f22a6950f1c592025226395f51b1f20d1214895f81be91f95214a95af1ba31f4c21e294251b751f0d218a94bb1a191fc7201694531ab21e7d205293691a751e2e200f93f019211e1a20de91ac1a051e691ff8920000eb1a251c0080bc2172287f2902a04f221229382a36a19b223a29792aa4a1ad227b29cd2ab4a10e239f29f82a20a2d9228829eb2af2a1d5227d29d92ad6a1d6225629a82a8da196221e29522ae2a032229e28a9296ba05f21a427d628a99f93204f260b28869eee1f3025ae26c49d1b1fa9240826449db81ff5245c26b99d74208f252627ba9e3c214c260a289d9fcb21c7264928c59f0622ef266728bd9f582210277628cb9f4f22ec265d28929f4622ba264128879ff9217c2615282b9ffe2131260128319f1622c225af277a9f812180255227739edd20dc24d226b39d08202524bf25b99c4c1e43221c24069b3b1ca5203f223e98151a012035216995f01a9c20c021c795271de321402325983b1e882249243199ef1eb122ac24c699621fda22c7245c9a6f1fa622ce24679a0c1f81229224df99a11e38221f248699441eff21c2230b99fd1dc5217923d298c41d8d2133237a987d1d5321f5221b983f1d2521bf228e97d61cdd208322b1968e1c9b2056224d96681c6f202d2219963d1c4720fa21a095311c2320db2190951c1cfa1f972174950b1c9a1f49212395c41b541f0921ef94251bf91ed1208a94cb1abc1e9a2051948a1a9f1e75202794601a6b1e35203b94bd19121e0a204a93b2199d1d461fa1912b255d29312acfa34927192cbd2c75a78d28d82cbb2d3ca9ef282a2d1c2e06aa0e29452d3a2e63aa2f29582d5e2eb2aa4829a52dc32ee6aac029882ebb2f44ab462a712f573038ab242c46313932e4ab232d1633523451acb32c62311632c3ab2b2c482f6930a6aa092ca02e8e2f53aa172d672f19308cab732e2530643099acea2e61308230a3ac012f6230ae304dacd32f6f31df3141ac5131c135a3362ead33306732fa3272ac2b2f4d302a30e8ac572f1730e62f8bad782f1330d02fbfad792f02308e2fdbad7d2f0530992ff9ad5f2f02308b2fe1ad5e2ef62e932e14adc02ba02c912cf7a91926e128772901a4ea2191261228439ef12021267c27899c2b20e9253127f19aef1f1a260f28299a7d21f727fc286b9c2a2123284b294d9c441f94251627769a031e0d241025b099da1d3023732489998c1db02239243f99631d5b220524f198291d1822b823bc98fb1cd1216a239298be1c82211f235a98711c2e21ca22e797211cd0207c22e196af1b87201d222f96211b4020c8215695051b0e207e210e95c81ad41f4321b1947a1a9d1f01214c94f119521fea208d938819121fc320b7926519b11e7f203f924819751e22201d9231195c1efc1fb7912c19591ea81ffd91f218291e8e1f0192541ba31e44203e930527712a3a2b80a59828d42c932d07a906295a2d472e59aaad29ec2d002f7eab162a572e922f1aac792ab92ef32f5dacb72a362f4a3093ac162bd12fab30baac982b3a300a31b1ac302cb330ab31b3acfb2bfb301232d5ab5a2ba130a13101ab352bf02fbd30aaaa662b372f3d301caa7d2cb82f593087aa7f2d1230673087ab882e8130cd3079ac3d2f0b316131f5ac0330ef3166327ead4e302233de3369ad41307e32043358ad04303f316231baada92f9c30933001ae8e2f5b30473022ae802f4330253068ae6e2f2a30fa2f8eaef82e832f162f3fae702d1a2ee92de0ac5c2a422c682c85a97925b5287129cea394222a276228b59ffa2156276828299ec5214f278d28229d4121f3268c28869c4a210e2796288e9c35211027ad287c9c952063262828349cf91eb624f825669afb1dce23fc245299aa1d2c238d240a99651dda225824cc98111d912232248298f11c4f2200244198a61cfd21a6230198861cb5215723ca97531c6b2105233497211c1921b222e196e31bd1204d225996631b9220f521bc95161b4e20a2214d95bc1a21205a21d9949c1ada1f0e21c294321a7a1fd6204994b419201f9f203f938319c91e6420b19238198c1e2a20bf912e19611eb81fb4910119f71d6e1fcb91ee1a871e4d2067940827b52a7f2b69a51529622d422e8fa98229f62df72e1dab5a2ab72eef2f54acc62a202f4230b6ac342b902f7b3002adaf2b1230d63066adda2b3a300c3167adbd2b4c30233129add42b69304b31d6ace92b82306f317fac952b79306131deab402b2b300831b4aae62aba2fa3309aa9892b382f38307aa9532cb52f66300baa4a2d3d30a83064ab5f2ecd30343174ac412f4e31c0312cadc82fc7313632a8addb2f8a31dd31d3adf92f0231163122ae0a30cc30d330acaeb32fa4309c3093aea62f70305f30c0ae202f1b3009307dae552e462f192fdbad682ca42dc22d03aca828a02b362c8fa7d724e728c02915a268232828242907a0c1220828fb28589f7622e527e728d79ed72169279228db9d3021ca264728339dd42063261428d79c5020b4255027729cb01f25257326b59b351fb124e125059b701e1f243025179af91d4423ab24a6996b1db1224f242099061d6c221e249c98c91c2a22f4236498951ce52199231398671c9e213b239597581c5c21dd223c970a1c09217b228096771bb3200822cc95011b6220b2213e95d21a33206e21e994a51a13203721c9949a1afe1f19219194831ad01f0c2152946a1a941feb204294661a711fe520c593241a281fb02075936c19ce1e6b209592e21a411ec91fcd927627802b3b2c6da56b29db2db62e63aafa29642e812fceaba62a2a2f333093ac222ba42f9030f6acad2b1630d63056ad092c55302531abad342c87306031d8ad3c2c9e308331b5ad1d2c9230773132addb2b7a30663193acdd2b71305d3123ac4b2b41301a31a4aae52ad82fcb30cba9cc2a442f6f309da9ee2a422f4c306ea99b2b4d2f3630daa9b02cf32f743058abc92d943002319daca82ec8301d3197ad052fc230f930ffad252faa30c6304eae3e2f7e30863098ae4a2f5c305330beaeff2e34302c3078ae5b2e932f922fe0adf32c202e2c2e94ac272a4e2c8e2c57a97c260e2a002bfda475248b288429baa1912350284b296fa052234b283a292fa0eb2231282b29859f4f22f127fb28ae9e4d2125278128779daf203826d127d49c8320a5252627c79c54204625a526959c3a20da240926989c431f4f2477257c9b481ecf23fc244c9a1f1e6323bc24f699b91df62275246a993c1d8f223624ce98db1c1c22dd2375988a1cbb21622309985b1c6f2116238097311c3421dd2238970d1cef209722c096a71ba3203c222896471b5820db21a795081b25207e214395c71a0a204221e194c41afd1f1a21ae94951adb1f0a215e944e1aa61fdd20a8930e1a7d1f9b20b193021a141f7d20f4924e1ad71ebf21739044277d2b1b2c7da593293b2e2d2f7eaa472abb2eea2f25acdf2a782f6730bbac452bf42fc23001adcc2b343002316cad0f2c65303d31a5ad1e2c82306131baad172c8b30723184ad0d2c84306b312dadd82b7030603191acd22b6f305931e5ab432b31300b31d1aabf2a882fa73086aa292af22e4c309ca90a2ac32e233054a9c0295e2ea92fe9a85e2a572e832f70a98d2be32e003073aa882c532f093010ac132d692ff62fb1ac792d722fbe2f23adf92d522f692fdcadb82d562f942f9cad632dcb2e062f36ada82ce92d382e5fac9f2ae02c4b2df0a93928ca2b772cdba67c25e829c02b83a36424f3282a2a84a117248f28a62906a17a2370287a297ca0e0222a281e29dd9f4222ab27bb28fb9e8121ff265528239eb4205226e4271d9d7220bd252a27b59c382022256d26599cbc1fb524e825c19b1b1f73249d251f9b8c1e2a243d25909a201eb423e924f799c21df222a9249c996a1d8f2270244699051d1e222224bf98b61cce21b9233198791c87214a23b4973e1c5d210f2311972d1c3721c522b896d31bfe208522db95411bb02026226d95dd1a7320ca21f194c41a4a207921ae948d1a1d203f2129947a1ad71ffb20dd93301a731fc9202a93ff193d1f8020f192011ac31e6c20a193281cdc1f7021bf93ff265a2b192c2fa56029162e1c2f43aa492a162f25300facfa2ac92f9630c1ac442b0d30de30f3acbc2b4030193153ad012c6630493183ad0e2c7930613195ad102c843075316bad022c80307d3110ad072c8930793194acd82b8530713196ab812b48303531f0aabe2a992fb9309eaa3e2a0b2f6b3009aab829b02e353035a95929392e932fb8a823299f2db12e76a865296b2d5c2eafa8a929912d8d2eeaa82f2aa12d822e8ba9cf2ab72d672e33aa2c2ba92d702e88aa092b9f2d482e81aac42a582d022e29aa70299e2c462d7ea8dd27392b242cf0a5d525172a3f2bd2a3ef249229a82a33a24624e228f02940a142247a2895295aa10924492863294ca190231d282529f7a0cc22cf27e0285ea00e2246278728709f0d218a262828109e7420d4259927189d5a205025c426bb9c1820f4244126569c8c1fb8241326919bff1e5f24d025d19a631e042480250b9add1d78230c256199a21dea226f2403993e1d552200248498c51ced219c231b98931cb52148239f976c1c85210c231e97311c4c21c822bf96f31b042173222c96b21bc3201722fa95381b7920c5219b95fb1a452081210795cd1a11204521b494651ab81ffc20c493f8196f1fc6209392e919431f7820d8926119e41e4d209f91561bbc1e692040938e261f2bef2b0ba51429fa2d1b2ffca9482a242f353003acd82ad32f9d3091ac262b1630e830d2ac8e2b46301d3125add22b6b304d3154adea2b7e30623156adf12b893078313eadec2b8e308d31e5acf62b9730853169acc22b99308631f4aa732b5d305631aeaaa32ad22fd33083aa0a2a112f5d30c1a969294f2ec42f3ba91029bf2d1a2faea82129552da32ee3a8b128142d462e24a85028c72cda2d5ea75a287e2c482d50a70c285e2c362d75a61d282f2cf12c90a6ef27062cc42c37a69f278b2b812c6fa5ad26322b562c1aa42826ad2a0e2c90a356250b2a3f2b67a20b25a229cb2a0da2c2244829942ad8a15324ea283f2a50a1bd238a28b229a5a0f2222328212912a040225a279128269f6d218e2618280d9ec7203126a427549d9e20d6255727059db6208025f8261f9d772019256b26db9c1020b824e3256b9c5e1f65248d25989be61e3c246025ea9a771ece231c254c9a1c1e03239c24f499e31d84223524bc99741d3222f72301990f1df72199235b98ab1cae215123c797611c612102230c973c1c2821c822d1960e1ced207e224c96d41bc52051221496c31b9b201622cf956a1b5c20be215795f81a02201c21d294981a9b1fd0203094a11a831f95203694271afd1e7b209a94941b711fec2075950000cf24f32400802c29e62d462fcea9192a4b2f6230e0ab8b2ad52fa73052acdd2a1230e03094ac2f2b30300b31d8ac5a2b4b303131f5ac8c2b6630523116ada82b77306c3100adc72b88308b31b2acf82ba030943131acc92ba3309931c2aa572b563056317aaa6e2a9c2fc5304faac329b22e3130a7a933291c2e752ff4a8b9289f2de62e4da88e286b2da42e05a82728262d552e18a7ec27b02ccf2d6ea66127672c892dada50d272d2c0d2d3aa51a27e52bb52c2aa55826c02bcd2c58a44d265d2b882ceba3e425b92a2b2c67a2c125222a652b3ba38725b129ef2a6aa3d2248e29c12aeca195244329602aa1a17824f2280e2abea15e2489289f29dba1ef231b281d2935a190228427ab2808a08621f0265628a19e162198262328d19dc9201826d727569d72207e251927d59c2e201b256f268b9cd51fe0241b26259c621f9624cc259c9b051f57248125099b861e08242d258a9a591e8323da242f9a121e19239524ea99c81db92259247899661d4922fd23f498ef1cd6216a2363988c1c7321ec22d5975d1c28218e2284974d1cd8202a222a97481c8820c62122971f1c3d206721a296561be61f0a217d95681a6d1fb9206e94eb19421f91208593f419401f702090936e1a991fa420ce93741b351fd32050940000071ff41f0080b128ba2d072f33a9d929102f3d3064ab2c2a742f6f3008ac982afc2fd2305aac182b3a301631afac3b2b57303d31c6ac542b65305031d6ac632b6c305e31b8ac642b6d306b3169ac6e2b72305f31b6ab502b7d306c3159aaf22a38302e3108aa2c2a692f9d30e2a9bb29a72e323076a92429f82d6f2fe6a87d28672dba2e16a82428042d152e8aa7ed279c2c9f2dfea60f28662c662d0ca71f28422c422d64a71627222c272da7a5fd26f32bd62c47a55526b82baa2c84a47b268e2b9d2c70a4c925152b752cf1a26e254f2ac52b5da2e024c4291c2bdaa16a243929702a6ca12924f528182a1ca1cf23ab28c629cca0352358286c2987a0992204280a290da0172263279f287b9faa21f9266828cc9e3c21a0262f28229ed02016269f27819d80209725f926059d35203e259926939c0e20012556264b9cd11fbd241326079c821f8c24d425bd9b131f4a249525179b8e1e00242225929afb1d4923a524d399711dcb225f242699391d79223524cb98021d25220d247498b81cb4218b233298651c3f21e02292971b1cd7202622d796b71b7c20bd216d962e1b2f206c21c795d91af41f342151959d1a931f0c21c394921a941f2d215c946b1a8e1ff8204294fc19f21e98209792af1b0a205a2173940000021feb1f008091289d2de32ecea89a291a2f443000ab102a852f7930d5ab532ae22fc43021acac2a1930f6305bacd32a35301b3181ac062b5430403196ac132b6030553185ac1a2b6b306d3130ac4f2b7f307231b0ab152b79306e3126aac22a32302f31c6a9032a582f8f30bba96b29742e07303da91b29302eb02fcba8cb28cc2d472f4ca846283b2d812e6ca70b28d62ce22dcba68327842c762dfea5d3261c2cff2c59a57226ae2bcd2cb0a440265a2b962ca2a411263e2b8c2c3da42a26452b922c0ca4d825ca2a712c2da35e25702a022c98a2fb24d0291c2b1ea2a7246b29a62ab7a121240929332a12a1a2238b289d29b0a0dd221a281f291ea06522e327ef28ac9f25229c27cb28609fec216927b3281b9f78212d279528909e17218a262c28f79dc220bf253127719d6e204a259126f19c432015255d26a29cdf1fce240e262b9c4d1f7924ae25519bde1e1d244425e29a3e1e9123cc24159ad31df022642482994e1d7c2227240599fd1c3f2201249498cf1c0722bb236a98ad1cd8217f232998881c8d21382308985e1c4521f1228697181cef20a222d296cf1ba92054224996281b6120f6215b95d41a30208721b994c81a11204e214f94c41a04201b217d94e3197a1f09217c91151c731fcd2044940000c61f822000803c287b2dbd2e93a84b29db2e23308aaa6929f82e3030fdaaa4294b2f73305eab052aa32fa630dcab462afc2fdc3024ac942a2a300f314cacc92a4230323149acd12a3f303e3105acfd2a46303931a5abfb2a3d303131f3aa6b2ad42fe430c1a9a829e32e52308da96529412edb2f72a90529f02d652fb6a89e28a52d0e2f13a84f284f2d952e5ca71028f12c322ed3a69b27922cae2d11a61827402c4b2d5ca5a1261c2c192deaa45b26d42bdb2c9fa4f725712b9d2c00a4c325492b8b2c67a33725a62a2f2c1ca20925f6295f2b0ba2ab249429d92abca185244729972aaea155241d29662a91a12d24d3280c2ad6a1a12351286d29e7a0d9220428062935a05d22bc27e028a39f03225b27a0280b9f6421b72633282a9e18213826bf27ae9dda20cc254027699dab206825d826359d6e2013258226d19c1320b7241e26509c721f5e24bf25e29bf21e17245a25289b9c1eb1231325d09a6d1e3a23b024719ab31d572228248d991f1db321c223d898d71c85217c237198961c51213c2314986e1c3021fb22e197471c0821a2229c970b1cc8203522f796c61b8b20de2141966f1b3d207421c695141b062024214c95df1ad51ffb20c1948c1aaa1fd3208794071a6a1fc3200094fa1a5a1eff1f80920000422007210080e227442d7b2e09a8fc289c2e03303aaa2929cd2e183098aa5929192f5930e8aaaf29712f88306cabee29c72fc230beab232a0430eb30edab3a2a12300431deab312a0e300d3179ab302a0830fd30c5aa0f2a0030ea309aa91b2ac02fcc30a5a99729f62e5e3068a9ee28262eb92fa1a89d28c72d422f23a86128612dcc2ebaa703280a2d3a2edaa69e27b52cd02d4aa60627642c742d67a5a926192c212df0a42b26ab2bce2c7ca4b425372ba02ccfa38225e72a572c63a36925a72a272cf3a20f25362adf2b37a2f324ef299a2b38a2f724c529572b61a2e22495290e2b69a29f2436298f2ab8a20624a928d02948a1a3223b2843292ba0872227282a29d59f2e22eb27e5286a9fc0211f278128bd9e5c219e263b28489e142159260e28f39de1201726d027949da720c7256a27529d78207525f926fc9c452007256526a49c06208d24d225439ca11f21245025a69bde1eb023e624b09a451e3623a124ee99ac1db6224c243499491d45220024b398031df1219d235198b51cab214623d7978d1c6f21012395976c1c1e21b6225e974e1cbd2030222c970c1c4c209b2183969b1b11205821e895191bf01f53215095ce1a9a1f6a21b594f01a531f2a219a94071c381fa9200796e11b0c1f20218f9400001920ef2000800e27c32ce22d06a78e282d2e7d2f90a9d528962ee52f0aaa0929e42e3c305daa5f29372f6c30ddaa9829852fa4303aabc329bd2fc6305dabcc29d02fd8303eabe929db2fe13022abc429a32fc63079aabf29872fa930e2a9ac29442f7d3053a95129b92e3430d7a8cb281a2eb62f3ba88428b92d2f2fb7a73c28582db92ee0a60d28252d722e59a6aa27ee2c3b2eaea53a279f2cca2d0da5c226452c572db9a43726e32bee2c41a4ff257c2bb12c1ba4ca25072b6d2ceda39a25a02a312c83a348252b2abc2befa2fb24d829442b66a296247529cd2ac3a143241e29652a3ca1a723c028eb29b3a038237f2893296fa0162352285e2974a00623312833296aa08e22f127f92806a020226427af28869fad21d0265e28d09e82216b262628749e34211926d927f39dc720b1255227549d8c205225c926129d2d20ed245226a89ce11f8b24d225489c601f2c246625cf9b8e1ec4230a25929af51d2c23c124ce99821dad22812436993b1d48224a24cd98f71cfb210a246a98be1c9b21872338986e1c41212323e1974b1ce5209b226597081cb0203522f196db1b9420f0218b96a81b8220c321f2955b1b4c206f2181954a1bfa1f1e210b95b71a841fde20d694511a411fbe205f948e1b8e1ffc205f9400007d204d21008044267e2c942d26a61e28d02d0e2fe9a869282a2e6d2f73a993286f2ee52fb7a9d128b52e183016aa1229082f50307aaa4c29432f7530c4aa57294b2f8730acaa6f29482f85308faa61291b2f703030aa2d29ed2e5b3072a94429d82e3d30dfa82f29bf2e233048a81029622efb2f53a8b628f82d7a2ffca66c28942d072f0ea61928362d802e44a5a027db2c082eafa421278c2ca72d13a4bd26422c522d84a34926fc2bf22c30a3f025852baa2ccaa25c25f52a602cfaa11925932a2b2cd4a1ca24342acb2b7aa1ad24f129662b9ca15f248f29002b7ea133244629b32a65a10d24fc28562a34a1e023bb28032a2ba1d3237428a7293fa19e232d28442900a10023ba27e4287fa055222a278c28f59faa21b9264628cc9e1f2154260f28db9dbd20e3259627499d622075251327c49c51203525a026929c2720fa244d26489ca41fba24fa25a99b481f6d249b25189b801e10243525269af21d7323d12475995e1d912243249f98ee1ce621be233f98bd1c9f217623e597c11c70213a23eb97b51c4521e922d797b11c02219222d1978b1cb3202d229197341c7220d1210097cc1b3e2093214696121b092056214a95b71ad31f3921a594b21abf1ffa20a2945a1a581f90200994bc1aed1edb2009930819ca262827438c6026952cbe2d58a67d276a2d812e77a8f1278c2dc92ed9a81928ba2d0a2f10a92a28e62d2f2f34a94728222e852f58a979285c2ec92fa7a991287b2e0130b5a9bb28922e1430a5a9c828832e0f3080a9bd28672e033040a9bb28442ee42fa4a8aa282b2eb12ff8a78028032e742fcca67528cd2d312f9aa52228622dc72ebaa425283e2da32e81a4b527e22c2e2e15a41f27822cbf2df0a2a5263a2c4d2d79a23f26c62be22c16a29f25442b912c7aa13d25d62a462c66a136258e2a122c1ba20825332ac52b52a2da24eb29772b82a2a424a529282bd5a165246429dc2a86a131243629972a26a1fe230829572ae8a08b23c8280d2aa2a02b237b28b82981a0b4221d284c291ea02e225227d228979fb521aa266628b09e3d212a261328fd9dc520be258427749d6e205d25e626f19c25201b257f26819cea1fec243826319c8d1fac24ed25c89b1a1f5b2490251e9b8b1ee92312258f9a301e20239724079afd1d93223f24aa99ed1d2b2200249b99921dbd219223f498111d5c213e233898ad1c16210e234397551cd620c7227c96f21b8b206922f295d41b6320ed21db95b01b3e20902189953c1b072024213595251bcf1ffd20f194151bc51fc520e694d41a8a1fbe208894bb1bae1f2b2179940000b5210e2300801425ac2ba42c20a578272a2d5a2e59a884274d2d752e7ca8c7276b2da12eb2a8db27782db72ecca8b627762dbb2eb5a88d27692daa2e9ca89c27662dac2e98a8aa27662db12e77a8bf27692dbf2e59a80928872dda2e3ea80c28792dc72e07a8e7275b2da62e16a7fc27532da72e42a6d927392d7c2e27a5b027072d362e65a48727ca2c042ef8a34427912cd72d7da3ee26632c982d56a36a26082c252d9ca2e725732bbc2c40a299252e2b772c16a22a25aa2a3a2c9da1c1243f2ae62b2ba16d24db294f2bd0a03f248b29f42abca0fe234529a52a92a0bd230f29692a89a07823e128242a7ba02723a028e3294ba0d7225028852933a07322d327f928ec9ff9213f278d28569fa821eb265728ca9e57218e262928689e0c211c26e727ea9db2209f256127809d50203625ec26ee9cff1ff9249426929caf1fa7242a26499c631f6824ba25049c4f1f29245e25bd9bf21ecf230f25289b5b1e2423ba24319a8d1d7d22572440993a1df2210b24cc98fe1caa21c1234d98e81c6b2158233a98c21c4021fa221998d01c1b21c72225987a1cd420a122f7977f1cab207a22be973c1b58207b220796611b1e20cf21f095321b0b206d219695431b0d206a216f957c1a0b208021ab94961b5d1fc920ed930000641e732000805d25ab2bae2c30a58426932caa2d7fa7af26d32cec2dc9a7fb260b2d2e2e1da81127182d3c2e37a82627282d532e44a82027172d5a2e33a8ec26ef2c1f2edea7d626cb2c0f2e62a7c826a52cdb2d09a786268e2cb72d7ea6cb268a2cc12d61a6b1268b2ca42db7a5dc269a2cc32d60a5e226962cc22d01a5a426762c9f2d5ca48c26602c822d05a457263c2c532d6ea32a26172c202d0ca3f225d22be72ca1a28e25672ba42c32a24025fa2a662cdba1ed24a32a312c5ba1b5245b2a062c1ea18424162ab62be9a05b24d129682bdca024247b29012b9ea0bc232729972a6ca07323e6284e2a78a02623be28202a7ea0ef228328dc298da0e0222628502983a0a022a427df2859a03922152784282ca08a2176261e28f69edd20f1257e27d69d74207125e226389d1220f2245826a89c491f9c24e325109cf21e582493255b9be61e29244f251c9baa1ec923fc24ae9a811e6523b624569a5e1ef7227824349afe1d7c222424ab997e1deb2199230a990a1da4214f237b98e31c752111233598a71c3d21ca22c097831cf42068228497601ca72011224a97601c7020cf210b97461c42209521a396011c1320642138967b1bd61f34216395061b961fce200f953d1af41e61205194161b421e322067930000321d5a1f0080b224f32a352c9ba4b8252d2c272d6ba6f5256f2c6b2df0a63326a32cb42d7ca75526ba2ccb2dbca76326cf2ced2dcda74e26ce2cef2db3a73826be2ce32d82a72126992cc12d23a72d267d2ca92d05a774268d2cb32d0fa7c526aa2cc52da4a6e226af2cdd2d2ca6ac26912cb12d9ba57b26732c942de5a44b265c2c742d66a413263a2c542dfaa3db25192c302d07a3b525fd2b0a2d5da28c25b82bde2ce0a15d25722bb62c87a135252a2b8e2c5ea10b25e42a652c57a1f124a12a3c2c18a1be24582a0d2c05a19c24132ac62b03a16124d229672b02a137248f29182bf0a0e3234a29b92abba07823f128512acca0da229528d32998a056222c28522940a0de219627de28b49f9521f1268128549f4d2158262a28f69e2621cf25ba270d9fdf2053250527389f7220d2247426969dc01f7a24eb256e9c141f33248c257f9bb51e06243e25b99a741e9a23e624499a0a1e3823a424b6999f1dc62261242899461d45221d24b198071dba21a1235498cd1c4521f022ff97a21cea207322b897681caf201c221797471c8520d121e296051c492090217896631bf31f4421bc95191bb91f2e215095d91a8d1f0e212095ae1a791f02219f94d71a831fd5208a94311a4d1fd120de93661bd21e67207e940000761dfb1e00008724662aa72b40a41d25ec2bd92caba58025272c122d54a67d25352c322da0a681253d2c332da5a68425472c472dbca69425502c562dd0a6ae25592c662ddba6c7255d2c712dcfa6cd255c2c782d98a6de25672c8c2d41a602267b2ca42de5a52a268b2cb42db3a57926a92ce22d9fa5be26c42c002e48a5c726c82c0b2ed5a4be26c12cfe2d6da49f26982cce2df2a36b26682c9d2dfaa24226362c622dbea10626112c292d5ba1d425e32bff2c59a18625ae2bd82c12a14925712bad2c00a107252e2b802ce6a0e324ec2a542c09a1b124a02a262c3ba18924522aec2b92a13a24e829752b8da1a9236129da2a3fa1f022d7282e2af2a04d225a288f297ea0c921062822290ba07c217227d328839f26217b264028c29e9d209e253627ab9d4c204f25b026289d332000255326af9cd21f9f24e225249c411f3f247425459b9d1ed7231225719a571e5c23d224ff99e41dd2228f246899881d54222024eb982d1dc62189237598dd1c67213a233098da1c442111230b98d91c1421f022cd97b51cd920ae229397611c87206522cd96ad1b11209721f695031bb91f22213f95f51a9b1f08210295b01a7a1feb20a0947c1a491fcb204d94301aff1e87201b945119801e2b2074925f1a121e2620a89200004d1cb51d00804224f429472b84a37724152b3c2cc2a4b924422b6e2c3ca5cc24802ba02c85a5ed248c2bae2cbda5f924ac2bc32cdda5de249d2bbd2cbda5e5248f2bba2cb3a508257e2bbc2ccaa53d25652bac2ccea59e25592ba82c11a640255f2b902c3aa54125d42bdf2cefa4e925642c6b2d62a5f426072d452ef0a515287a2dda2ebea6e227c52d622f66a5b627db2da72f4da49427cf2d832ff4a22727b22d6b2fc1a128277e2d092f27a11927552da12e1ca1b0260e2d632e31a1bb26c92c132efca124268f2cc52da3a1c925382c5f2d20a27925e12b062db9a2e024122b842c8aa243242d2ac92b14a25f233729d32a5ca14b227028c12993a0d021b227042925a07d21eb268528ac9f1f2124261a28289f642069252327849d0220eb245d26959c6c1f9924ef25dc9b2b1f6224d125639be21e2d248c25b49abd1e9b23f924609a391ef6229224e399b11d80223e2439994d1d0a22d723dd98e61c7b212b235b988f1c3621e0220e98811c1321de2281976a1c0221d0221b974e1cc6209c22af963f1c85205a225b962e1c392002224196ec1be41f7e21ed956e1b581f2e218f950f1b4d1f1021e294d31a491ffc20b994d51a4b1fe6208994241b2c1fc5208994ba1a061f85204694501c381e8e1ff795ef1bcb1edb1e6493e920d4253826e49df9227229be2af1a209243a2a9c2b4da42024962afc2b83a46724c82a292ce1a47e24fe2a4b2c0ba57924182b692c05a56224fa2a652ceba47b24d52a592ce7a4a024ac2a352cdda47e244f2a002c89a45a24cc29782b35a4a3222a29332a23a28021d628562aeea065231f2a112c51a26027542d342efda52529333067310ca7952a4031183399a6c92a8d312f33b2a4502a8f31fc3286a1042a58319d32d09fb029da302d32639f62299b30df31b6a0072963307b3163a2a328e42ffa3041a4aa28502e2430eaa6a126dd2c5a2e62a5d124392ba32c0ca440233429da2ac8a1c122512887291aa11723fd269a2828a16b2101269a276b9f37206f25d4266a9d362007257326ef9c1e20b1241f26989cf11f7924e825349c1d1f2c24b025219bcd1ea6232b25a09a551e1b23bd24fd991c1eb52279246f99071e722245243199e41d2c221d24e898aa1df621ee238f98731dc1219b2363983a1d77213b233598131d45210323e197e31c1021d2229797811cd720aa22bd964f1c9f2074227396191c5e202a222296001c2020bd213696eb1bf41f6c21ed95f61bb21f3921f595ac1b661f1f21f5958f1b541f3121a895201b421f27215595dd19e41e0b213994c91a911ea020db930000d91c951d00806822d128d02933a13d23c4292d2b34a34e23d429412b7aa3ae23062a972b0aa418244d2ae52b5da437246b2a092c7ea42f24682a082c85a43a24542afc2b81a444242c2ab92b6da40824d029782b03a4d7239d29372b5ca33a2321298d2a2ca28623bf28b129caa1a022bb27872871a09c2029259726679d221c0622a9232498ac16b71f6221ef916e138b1e9020308ed2147e1e5620c28fc114751f7121a78ffe1502203022d29057183921dc23bd92c51c17249625de96bf1f8b264528ec9832225d287029d29a3524ad293c2ba29ced23372a272b429d5b1c8827d9284197c81882242e268694041a0323ea255f965d2154259d26ae9d2c206d24d4254d9c2e20542488254f9c2a204c2497254b9c092023245a250b9c30201b245d25339c0820ce232c25db9bbc1f6023e724899b771ff3228d24109b3c1fa5226024a39a651e68223424b099001e322212242b999f1dee21ae23af984d1da22147236a98fb1c3f21cc220298b91cdd205a229a97751c9520f8212c97641c6720b9211197381c3a2076218d96231c112040216d96cd1bb91f12210f96631b691fee20bc95231b231fd8205795f61add1eac200395e91aa91e9920c894091ba01e5920ab94c91a331e1c201495dd1a301e35205c9400004619731a00809e217028792967a0e7225829a72a49a20f237c29cd2abaa2e1228429fc2aa7a26223cf29472b3ea3a723022a832b82a394230b2a902b6fa37b23e729582b3ca34d238329df2ac0a2e1220e29502af9a16222ab28d9292ea1e5212d28352974a0e7211d274a2835a06920c9251727ea9d011e0524f624b79b221baf216523c8984a1b0621cb228199a71c5b21b2236c9b281d4f228b24309c581e0c23c524269df21c12236f25c09b931dc4228f24369c0c1dec21dc23579b201ce6203c22a699c419e71f46213f975218c31e6120f1949b184c1fb320bf94ee1a96209c21c096d21d5a229023d699391f8723f4243d9b971f9f2360259c9b951fc42364259a9b7e1f96233b25839ba41f7e231725a99b801f6323ee244e9b151f1d23c224b39ab51efd229f24289a561ebb227024a3990b1e852247243499d11d43221f240299ad1d0622ea23ba98891dd921a82374986a1db321772334984f1d812135231f98241d57210223fc97e51c2721ce229a97861ce0209222c596391c8b204a2252961c1c4520f7212696f61b0c20ac21f595021cbe1f6f213996af1b751f1f218895341b4f1fdc20fc94a61af91e9c206994511a961e58200394841a591e10202494ec19061e0c20db924d1bde1d581f05940000d21ad41b00806f213f28362907a0ec21c528d4290fa14322e628122a86a17f222a29722ad3a104236329b22a63a2f9226029b92a59a2ec225329a92a35a2cc222e29762ae7a1af22ff282c2a6da141229628ab29d0a07621072812290ca0e6200c277228fc9e7120e8256c27159ea51ff22437263c9d391e58248e25599c531dcf231f25be9bb21d8323e2248b9c861e0a244d25639d7b1f5a248b25139e1e20ab24fc25749e5f20fc246f269a9eb82005258026ff9e1520da249526f09d40209a241e264d9e392023246625429e0d2043239c24e49dde1f96211723d59df11ca0202122359a7c1b2c206e212c98a81bc020c721ad97d81ca32120239598d71d93223b248699731e08237424eb99c81efd2298246a9a311fe222aa24cd9a4e1fcd22a824e99a121f80229524b09a681e32224324e1992e1e0022fc237f990b1ee221bb236099d71dc22175230799a31d81211d23db98741d4321e22263983b1d0f21a3221098df1cd0206c229197961c96204622dd96571c622026227f961f1c38200022ef95ea1b0c20e621b395ba1bda1fac2190958f1b6a1f632171956a1b451f19215795f51afb1ed720d094b41ac81ea320a394751a9f1e892077943b1a681e51204f94c619181e0f200293eb198d1d1d1f2f92231d3326e326e49ad1260d2b0c2cfaa605284d2cf42cdaa82428632c2b2d3ba95528882c562da8a972289c2c7d2ddea98128b02c962d02aa9428e22cd82d2caa8e283b2d3d2ef3a9ac283b2eb32f71a98529672f9e302fa95e29442ea42fbca8f729462d6b2e2ea9c12ae62d792ec5a96b2c782ef62e4cab512de12e432f51ace12d8e2fa42f5bac3e2ef42ff42f02ac412e5030733045aaa0304034d83460ac023187353b3698acc02e653043303eacb12e8b2f482f56ad182f882f2b2fc2adec2e6f2ff82e85adc42e612ff02e96ad1d2ecf2e692ef6ac2b2ce62ccb2cc4aa78275029df2989a548233927632879a0bc2019262b27e19c492045269a27dd9ba21f5f2748285c9a35212e2853297c9c9822b428a0290d9e9e1f90264828da9bf71d5f24e4257c9a6c1d8b23cc24be99b71df62264240d9a5e1d80221d2488993a1d4222dc236399191d0822a7234199f71cd3216d231e99c81c8b213e23cb98961c3a21dd2278983a1cdb207a22ff97ad1b7d20ff21d496eb1a2f209721f595c61af11f45217395781aa41f0e21d794411a741fe4208194db19371fd5200d94c519061fa42055937419ac1e7b20ee9263196e1e2920d8926119591ef51f3a922519331e7b1f3f924b18ae1d121f74910c1ac61d711ffa91b2191e259725be94d326522b702cc1a77028be2c842deca9d1281c2d112e7eaa1d29702d802e0aab5f29b02dc62e65ab7729ec2d192f99abae293d2e7f2ffaabd529ca2e1030ddab562a7c2f79300cac3e2ad12fc7302fab1f2a412f6030b2aafb295a2e902f4aaa3d2a2d2e512fc5a9a72bfe2e0d30ffa9c22c602f123071a9ed2d4b30a73046aabf2ec630213125aba02f7a31d931dcab4630a632483349ac46309d32343349ac15307431a5318dac682faf30c730b3ad262f5630463082aec32ea72f732f10ae1c2ef22eba2ea6adf92cfd2df92d99ac6a2a352c562cc0a982268d29302aeaa488235b276728bba01e22d8264228ff9ec52172278928c89d80218b27b928bd9c33216a27aa28559c272108278928059daf2061264128179d0d202d25ab26a29c4c1efc231825069bcd1d6223ae24249ad91d2b238824319aa11dde225924cd993c1d98222b246599fe1c4e22ef230199b21cf42190239398681c99212f232b98231c4821cd229897f31bec20652212979b1ba320fb218d96441b6f20b6210d96e01a2e206821ba958f1af81f20211895571aa31fe220be94181a561fb3206394dc191e1f9720c793cf19e51e642061939019be1e3f20c1923d19631ebe1f10929b18c71d191f9791d719321e2320dd94e21b9c2558261098d1273a2c1e2d55a8dc28522d402e9faa15297b2d822e11ab6a29d92d032faeabb729222e512f18acf729742eb92f51ac372ac62e103074ac3c2a012f333056ac452a2b2f4f3023ac542a5f2f7430d1ab482a902f9c303aabe629f62e6e300aaa142aad2e013013a89c2af42e1f30d0a6902b1f2f5c30cba78f2ccd2f6d30d4a8772d5c30ce30c9a97d2ed1303f310eab6f2f5b31d0310aac932f5631a53139ac7e2ff830243164ac792fa930b73003add22e19301e30a2ad152e412f182fa0ad122d1c2e1f2eb0acab2b0c2d3c2dfbaa8228072bab2bb3a75e251f29ee29f5a3d4236928622907a1ee221e280c290fa05822fc27e528419ff3219427b128a39e4321f1264e28de9db1204126de277f9d7720dd256f277c9d11205725c426ff9c4d1fce24fe25479cd01e4a245325999b401ebb23da249e9ac91d14237a24f699431d852225244699f91c3622ec23fc989f1cec219423a298671c962125234a98401c5121cc220598241c0f2178229997d01bc4200f22ba96541b7120a5215096ff1a37206921a195dc1a1a2035215395b01afe1f1b210195be1afa1f1121db94bf1af81f2021db94ae1ad41f12219f947a1a991f07214c94fc191e1fd720f1939c19ba1e5e207293001afb1d831f9791bc1aac2553266a932f28952c972ddfa8fe28ad2d9f2ef1aa4a29e42d012f5babbf29572e9e2f1eac2d2ab12eff2f6dac6e2a052f3530a7aca72a4f2f5a30c4acba2a872f8130b9acd22abe2f983080accc2acb2fac304bacb02aaa2f9c3051abed29202f2930e5a8a7298b2ea42f30a85129eb2dec2eb1a85a29c22dd52ea5a8b029ce2dd92ec7a88b2a1f2e112f67a9182cd82eb42fc3aad32c702f1d301fac2c2d9e2f163058ac652d8b2ff62f9cac672d4c2f922f8aac2e2dbf2ef72e47aca22ce42d1a2ec8ab4a2b0c2d3c2d6eaa15290a2c6b2c57a8bd26ec29e22a48a5a9240229e929a5a203247e28702961a15d2360284829d5a0e2223528182985a08722f927e92831a0f3216327a8287a9f0721a02641282d9e6220f2258e27629d2e208925f326229d262033258126dc9c0720b324df257e9c061f32245925a39b171eb723eb249f9adc1d3723a4245f9aa21dd4226024f799381d6c221b248799c91cf121a523ee98691c852126236c98441c4021db224798151c02219022b997e71bbd2039220797241b6620e0212696d01a2f209021ad95c51a182062217395b11a1c2055210295b21a11203c21d294801aed1f15217f942d1ab11fe620d993d4197e1fa520bc938619191f82205493fb1a2c1f0d21b093b213cd245c25058c4d28d82c1d2e31a92c29082e182f57ab9a29542e7e2fcaab0f2abe2e08304cac782a1e2f3e30a2acc92a6b2f7230ddace72aa02f8c30e6acee2ac42fa630deac312b0530c530ccac312b0730d5308bac0a2be02fb4301babd329d02ee62f51a84129e52dd92e4ea9f0289c2da62e0ea9c0285a2d512e98a8a1283a2d1e2e59a8d128552d5a2e51a84b29662d552eaca8ca294b2dff2d31a92d2a402ddf2da0a9ae2a4e2ded2d15aad72a312daf2d22aad92a062d9d2df2a9eb298a2c162da3a8a928f02b8a2c2ca71a27f62a1b2c5da57725ea29da2b21a4ae240a29f22af0a20a24ab28c329c2a19c235c28542951a110233b283229d6a06622f127e4284aa0a3213f277528679ffa2086260c28659e4c20f8257727669d22208425e226139de61fdb242326a19cab1f8524b925629cfa1e5c247c25c89b5b1e14242625e99a161e9123d3249e9a901ddc2288240c9a321d612241248099ca1cda21e923f098701c8b21562373984c1c4721ea223098281c2b21bb22a1970e1c00217d223697781bc5202f223996011b7f20d621a395e21a5e209c215895db1a3d205e21f0948d1a0d2031218894521aa11fdc203294241a481fa6207593d019f81e54200f939419761e1b2016936f1ba71f8121fb956a1aa3254d26b3924f28db2c032e24a95e291e2e2b2f77abcc297e2ead2ffbab322aeb2e2a305aac762a292f4a307eac9a2a552f6f30a3acac2a812f8130b0acd02aa62f9830bdac112bef2fbd30aaac3d2be42fb1305eaca42ab02f8f30eca83c2a442f5230b5a85f29372e7e2f93a9f628c92ddc2e26a98928492d4a2e84a81128c12c8b2ddda7e527722c2f2d4da7c127612c272dd7a6e5274f2c1b2dbea6d7273c2c082d96a63328232cc32cd1a6d627272cfc2c07a60628ed2ba42cbda54427722b812c76a434269c2a122c18a38325c729db2a3da3fd2436295c2af9a28724fd28142a54a220249f28ab29c4a1e1235f285b299ea180233f2835293ea108230528f628eaa043229627ab284aa05921c0263c282c9f7920e0259c27009e40208c254b27949d48202e25a426809d0d20cb241526fa9c831f9224fc25679cc61e3624ab258e9b661ecf234f25c69aed1d5623dd24469a901dc822542493992f1d2d22b8233299cb1cc7215123ab98891c85210d236b98691c5c21d8220c98391c2c219922c097021ce0204322e796c31b9e20e92177968f1b6320a2214c96541b36206221b195081bfa1f282143958f1a901fdc208994e919411fa7202d93e6192d1f572029937b19bf1e3e205892251b0c1f98202394be1c6326f226b0946028f32c002e58a98029702ea92f92abea29c82e0a30f9ab412a212f48304eac792a562f623074ac962a7b2f843088acb02aa52f97309aacd92ad42fb330aaac2a2b1330e330adac992b2b30f0306dac282b2530db3099a8782a782f6330b4a876294d2e4f2f97a99b28952d8f2ed8a82d28022de62d28a8fc27b52c8c2d7fa7b427862c722d04a7a2276a2c542da1a6a4262f2c5b2d94a5f826ee2bab2c8fa5c526812b762c1da57b261f2b4f2c87a43f26e52a1d2c30a40026a62a152c86a2b625812a052c3ea1a7252b2a842b6ca32325e729262b53a3cd246429892ab6a24924f628262adea1cb23a728d3293aa1092359286c29b8a04622cb27d4281ea09621be263328569f1c212626a627909e9420e9254f27c19d8020a0251627879d9e2026257526ac9d6f20bb24eb25729ddd1f87249e25b89c0d1f42245e25089ca61e1f2433256a9b3f1e9123f024ca9a141eba227324709af31d4b221024229aa61d1122b423a9992a1dd1216823e298a81c912120234698661c4f21df22d3974d1c2221b922a6971f1cec207a221997da1bb62042228a96a51b8320fd2127961b1b342099218495c41abc1ffb20df946a1a511f9e2042945d1a381f57206794cf19be1e3b200195e91a061fec2090950000951fe821008063281c2d452e4ca995299e2ee42f9babc929c12e0130cdab062a082f41301aac412a382f563043ac4b2a4f2f703055ac6c2a832f85306bac972aac2fa2307dacc92ae12fc73062ac5d2b2030f33007ac7e2b5b301b319aa8b82ad02f9d30caa88a29552e672fd3a9c628882d8f2e17a93f281c2d122e3aa8eb27b92c952d8ca76927712c562dbfa6d8261c2ced2c0aa6c926ac2b812ccca56026802b872c5ba5ef256e2b872cbca4ea250e2b492c78a41026de2a242c3da43f26e62a2e2ccaa2aa25b42a1a2c0aa10b25002a5b2b56a2ec2467298d2a28a38f242c29412aa1a24a24fb28142a1ea22124a728bf2901a2ea2346284a29dea17b23d427da2870a12c22122769283aa02f2193261c28ce9ee0204b26dc27209e8d20da255b27769d42205425c226fd9c1c20fa244626b39cb61fae24e025699c181f5f248325e99bb61e242444254c9b671eb423f724c79a371e2823a624959af61dd0227024259aa51d7c223b24a899631d1922c5236699051daa212923bf98901c39219a225198501cd4202322ea972c1c7e20ab21a8973a1c3f205e218597131c0b201b210497471bbd1fe3201096661a4e1f9e20f894ce192f1f80202e94d019371f76200594d41a0620ef2088946f1ac01e472016940000081fde2000803d28e62cfb2dffa84229582e992ff1aa7b29942ed22f50abbe29f02e3430d3ab232a4e2f5f3023ac432a722f823039ac4e2a922f8d304bac792aae2fa3305dac922ac82fb93033ac4e2b0e30da3027ac182b2d30e43042a83e2a702f5d3046a80829fe2df72e26a94c280c2de22d85a8e527a62c8c2d19a8b7276b2c452dcaa71d28412c0b2d27a81c27102cf92cada6ac26c72bbb2ce3a57d26862b902c8ba515263a2b692cf0a45a26db2a2b2ce3a40b26b02a082c65a41327612aa62bf2a4e325522ad82bbba20125b529f92a6ea2a9246e299f2a83a259240529292a33a2ed23b128bf29a7a150235d28652937a1a92216281229a7a03922a027b72843a0e02129277528e19f7f21b6264028109feb202a26d627519e7c20a8250f27829d3b2049258e26149d102005255426c39cfa1fe2242926909cb61faa24f2254d9c2a1f6824ae25ca9b9e1e17245525319b341e7e23c524919ab31dd7225024099a3e1d72221d246799051d3222f9232c99d11cf021b423d498881c8d2142236a982f1c1621a222ea97cb1baf20f82127975b1b5f209221c096061b1d2056213f96d61af31f37211496c41abf1f1e21a395941a941f32211c95231a4f1fcd206b94f019bf1e48201b943e1b7220ec219a9400007c1e932000800628bd2cce2d84a8f5281b2e4f2f79aa3d296d2eac2feaaa8829d52e263075abd529172f4730c8abd9292a2f5f30cdabed29582f7230fdab152a732f8c300fac2c2a972fa630ccab8d2aae2f9b3043ab7f2ae42fa530cca7e329282f373008a8cb28e02df62ef9a85128402d502e8aa832281b2d0d2e1ea82428cc2cae2d1fa8fd263d2c1f2d76a69326062ceb2cfda55726c72bed2c81a54926782b932c75a5e125172b602cc6a4ad25d82a2c2c5ea4c225bc2a112c1ba4ac25ea2a4e2ccea26e25bc2a252c71a13a25162a5b2b02a37d246229b62a87a23624e4281f2a3ea29e239628b9296ea1eb2233283a29bda06022d427d5282fa006228127a428bd9fca2131277e28709f9121e9265728279f1f21a0263828949eee202f26d527329e8f207925d126999d7f2010255326869d4320df241f261d9dac1f9524c5257f9c1d1f47246825ef9b921ee2231125249b0b1e4d23a024929a8b1d9e223324b699161d4a2207241999ef1c2422d823f298ec1c0022a723cb98c21cd3216923a298921c85210c2353985f1c3221ac2203980d1cd22047223597691b8720f3216296d31a3e20a721af95cb1a1d2067214695b71a0a204221d694721ae21f1e217594111a5f1ff3200694341b711fb82093940000631f0e210080b227ab2cac2d5fa8e3283b2e722f50aae9282c2e622f69aa08296a2edc2fb6aa5629b52e0f301eab6a29d82e2f3039ab8d29102f483068abe0294a2f6c30c1ab3d2a952f9730e2ab7b2a702f7a30d3abf029392f5a30f7a73929712ea92fb6a66e28762d812e69a82f280a2d112e48a81028df2cc92df9a7aa27b22cb42d4ea75b27642c492de8a68e26172c012db1a537268e2b932c22a5c1251e2b542c82a4f325f02a2d2c7ea4ad25df2a3c2c0ca4a125ad2a132cb5a3ad25a12a192cd0a220255f2af32b92a1f024bd29132bc3a28f247c29ca2ac2a257241a295f2a50a22724e728212a0aa2b6239e28ba29b7a1262333283529ffa06e22c627cf2850a0fa217327ac28d99f9521e4265c282c9fd8201726b627169ebf20c6253727d49d83206425c5268b9d6d2011256626509d4a20d4242426079df01f8324cc258a9c2d1f2f247625009cbb1ee9232425829b3c1e6b23f1249a9a021ee1226d245c9a6a1d1222cc239499f91c9d217a23fc98cb1c76214b23ab98961c42211f2378987b1c1f21e5225d98531cfe2097221798181cc0202422bf97b91b7b20ba21de96321b1a204921fe95f11ac11ffc209695c51a891fcd2011953b1a3b1f9b20d6943b1a4c1f9820a9947a1a8e1e3a20c4920000e41ecd200080ee26882c812d4aa79d28012e382fe5a9ad28032e3a2f0aaacb283c2ea32f54aaf628632ebf2f8caa00297c2ef22f9aaa1829a72e0e30ccaa4929d32e2930faaa90291b2f503007abb5290e2f4130a6aa7129df2e203092a88e29c22e033046a8c828cb2dd92ed4a827281a2d272e31a80328de2cca2ddfa70128802c4e2d0ba8c726182cdf2c2ca63e26b12bb12c55a51426742b822cefa4d825382b6a2c7fa46025012b672cd1a39e25b62a1a2cb1a343255a2af92be9a2e324fb29ea2bdda18024ec29b52b46a1ce24b429322b94a2ad248c29ea2aaba2362409295b2ae3a1a6239a28d42974a1f92249286529c6a085222028282977a030220428ef2826a0be2164278c288a9f4721ae263828ee9efa2047260328659ecf200a26b0270b9eab20ce256b27dd9d702080250527739d35201c257f262b9d04209724dd25b59c901f29245a25539c591fa123f524339cde1e4623b724779b761e11238924d79adc1d8f222a240a9a691d1522bc236c99fd1cc2215523dc98951c6b21f7225698331c19219a22b597f11bb7202a2210976d1b5420ac219b96341b26206d213496461b192064210f962a1b05205921f895051bd31f64217395a91a7e1f2821fc94f31adb1e4d202e96011c7f1e6320ac9600009f1e8320008079262d2c0b2db7a63628932dbd2e43a94428af2dd72e73a97128f72d4e2fcda9a228232e7a2f0daabb28482ebe2f2daad1286a2ee02f4aaad8287c2e003042aaf9289d2e0f3048aa00299f2e0d3009aa2f297c2eee2f74a910290c2e232f1ca835285d2d4f2ec8a7d827f22cf62d7aa78227b92ca32df1a6f026612c392d1fa6d326302c062dbba50626042c0b2db8a40f267f2b8b2c7ea47e25f82a452cfca35c257e2ace2b7ea34225382a832b59a3c724ff298e2bada2ae24e329862b69a29624ad29372b48a276245129b82a3ca232241029532abfa1cf23c928f72975a12a238228a529e8a0d4224e286329ada086221a2821298fa07322e627f92882a020228227c22848a0d52111278628fd9f712195263b28749f4c2127260228f49e0221cf257027939e8d205c25e726d99d4e20ff245f26699df81fa024e825c89c7c1f45247325639cef1ed5231025bc9b2b1e4b23ba24b49ab81dc82277240e9a5e1d66224c246199f81c0f221e24fb98b31cb921b7239498711c38210d235498f81bd02081228a97bf1b7e20ef215497a51b6020b1213b97941b5e209121bd966b1b50207f2163960a1b1e204321aa95e81aa91ffe202b958d1a291fdb20e794421aee1eb220af94da1a0e1fa820299400008920e3210080fc25092ceb2cf5a5f3274f2d652ee9a801286a2d8c2e0fa91628a02deb2e38a92f28b42df52e67a93428c32d1d2f6ea95428e02d372f97a95a28eb2d522f8fa99028082e6e2fc4a98e28042e7a2f90a99428182e732f34a9b428e92d232f6aa86228a82de42ea1a55a286b2d802e58a516282a2d282ee7a4b227e72cf52d4ba42d27b22cd12d31a3d026692c742da3a25726212c1b2dd1a132269f2ba62cdca15725ea2a512c0da1fa243e2ac12bd9a08a24cc29522baea092248b29112bbea18a246d29e22a37a278244e29f22a1fa212242329962acea1d223e5284d2a93a19923b928fd296ba166237d28b22946a14b233c285a294da11623cc27ee2827a1642220278b288ea0f721aa2643282ba07221502618284e9fd320ef25ae27339e66207d250027679d1f2022258a26d49cd31fea242826799c871fb224e525339cff1e682494259b9b881e04242925bb9ac71d3623c624ca99411d892260241e99d91ccf21d9239698911c6d2150233198841c6621442304989b1c4e2101233a98951c0f219f223498901cd62039223098761c8a20de213898201c4620902192976c1b192059219a96e71add1f2421c0957d1ac01f1521ac949f1acb1f0421f494711aca1fe920a394fd1a072030210895000002228b2300809225d42bc42cf0a57a271c2d562e9ea87e271e2d4b2eaea8a3274e2d852ed3a8c727632d972eeaa8f727812dc52e08a91128972dda2e23a91c28a12df22e31a94f28b02dfa2e62a94a28932dec2e2da940288e2dec2e03a93d286d2dc72e94a83d28412d892ed7a77a28332d202e21a67c28682d942e5ea46028482da32ec8a381280d2d722e22a4a327a22cc72d25a2d827392c1f2d50a2c326d52bd12cdea0ca254a2bac2c2ba05425d22a402c97a0fd245e2adf2b90a1aa24022a942b63a29524af29282b67a260246629d32a3da2222429297b2ac7a1d123f228372a76a15f23ad28e42927a1f7226f289329dea088221e283b2990a05e229927e42873a0e4212327972809a051217b263a28219f09212b260128789ed120e3259d27ea9d76208d2512275a9d332028258726ec9ce31fe2242726829c6e1fa924e125259c051f6a249725a19b7c1e0f243625de9a011e5423bf24309ab51da9225524e299b21d49221624df99ad1df221bf23d999831d90216b2386990d1d35212923ec989d1cf520fc225d982c1cab20ad226c978f1b6a2035228296581b3c20ae211e96141b12205f21b295cb1acc1fff2077958a1a8c1fd42014957d1a841fa420db94f219521f9e20e493831ad71ea82052940000ac20d42100800225f72a1b2c56a5d126c02ce02d1da8dc26cf2ce62d17a8fa26f02c0a2e43a81427f72c162e52a840270a2d3c2e7aa85227082d382e85a83c27f72c252e78a87a27f12c142e91a86427e02c132e69a85327d52cfb2d29a84327cb2cf22dbda72327ca2cec2d1aa770279d2cb82daba6d1275c2c2a2d04a612275e2c552d4aa225276b2c792d8ca1e326582c6b2df5a081263b2c502ddea0f725f32b142d79a19c25522bad2c42a2ed24ca2a902c54a2d324662a202c9ba2a324db296f2b59a238247e29e52ac7a109244229902a87a1af231029512a5fa17123d9281f2a4ea12123a428da2915a11e236628912913a1bd221a283e29e6a01a225a27ae285aa06e21b02635286f9f2b216d260d28ee9ee8202926d427719ebb20af253f27149e85203825c426ae9d3c20e5247526339deb1fac243226c09c791f6a24dc25619c121f2e247b25e39bb21ee3232125789b4d1e5a23cf24ac9ad31db1226324019a2a1d0722fe232d99c91c89218723a998991c56213f235998851c2721ee222698751c1021ab221798831cec207d222498611cb32051220598851c7920112226981b1c3020e1214e97a91b0e2093219996c01ac31f49216f95f11ad71f73216495771afa1f83210595731be91e53201a940000171d9e1e00801d25d42a1c2c4ea5be25252c0d2d9ba61826622c582d2fa72926842c852d70a77326992ca12de0a7a126b22cc02d18a8c426bb2cd52d22a8d826bc2cd32d2ea8ae269e2cbe2de0a796267c2c9e2d7ca7af26702c842d68a79e264d2c532d26a78826432c4a2d98a67926452c4f2d2ba66126312c362da1a52226142c152dfaa40f26fb2b002da9a4c025c62be82c43a4a725792bb32c08a44725102b6d2c60a3ff24a92a1f2cd7a2c6245c2ae62b89a27c24122a982b24a24024e429762bd2a12524ae292d2bada105247229de2a81a1a52313297a2a58a16f23e728372a17a13923b2280a2a0ca11f239b28fb2914a1d8226328b729faa0ef22c127e1280ba12122cc264d285fa06e2159260828979fdf20ce256a27659e882080251c27d29d42203025c0265a9df61fbf242e26c79c411f7d24b425409cec1e3c2462250e9cb61ef1230525ad9b6a1e6b23bb24279b2b1e14238024889ae31da6224a243c9a6c1d1f22e12396990d1d8b212b231099ce1c5521f422ae989a1c2521c2225a983e1cec206c22c9972b1c9c2000226a97251c6e20cb215f97541c51209921b397571c352074217a97101c0e204721c596a31bdd1f1c212596011b971fdc20a395431a531f8c205594d11ad71d2b1f82930000711d411f00809e24382a742bcaa43e259a2b9f2cf5a58925fb2bdf2c72a68625162c0a2daba6a325282c252de2a6bc253b2c462d15a7d425462c562d33a7f7254b2c642d49a70f26442c5f2d3aa72626432c5f2d29a747263c2c572d22a74026352c422dd7a64a261e2c3f2d87a66c261a2c362d7ba67a260e2c312d43a65226022c1f2dd8a52d26f42b112d89a50326d72bf52cf7a4be25a72bcf2c80a453255c2b9a2ce4a30025062b672c21a3c624b82a362ccea28b24692a0c2c7aa26a241e2abf2b4ba24824d029672b3aa243247f290c2b51a212242429992a09a2c923c428352ac5a122237628ce2949a1ae2233287d29f3a0f521e52721296aa0a2216d27ce2804a04121ec267a28589ff22054262028c69eab20ce259227649e8c206a250727199e6920ff247d26ea9d1d209724f1250d9d791f3c248725619ce11e00243d25de9b5b1eaa23f624e99a0f1e3a23a9243e9ac01dd7227924c399771d6f223f247a99331df321f22311990b1d77217123c598f21cff20b622ad98ac1caf2033222898561c8a20fc21b6973c1c7620c5214b97ce1b41208621b9965c1bd01f34212196d11a721f10217c95bc1a411fe9203b958b1a2b1fe320e594bb1a2d1fbd20d9941d1a051fb7203b944c1ba21e672004940000e41c641e00003024f1292d2b2ba4e224352b672c7ba52d25892ba22cf5a52025ac2bbd2c1da62425b02bbe2c34a62b25af2bbe2c50a61625922bad2c36a6ff24752b9f2c1aa60b25722b9d2c04a60e25682b9b2cd1a52b257b2baa2cbaa546259a2bbd2cb2a56c25bb2bd12ca0a58625d32bed2c7fa59525fc2b092d52a59f250a2c1e2d1ea59925152c2b2ddca49c25032c252db6a48c25eb2b092d6da45e25a92be22c21a42125582bb42c9aa3e924092b7e2c00a3ad24c02a442caba292247d2a182c84a267243c2ae12b47a24e24052a952b42a21624b7293c2b0fa2c3236429d62adda11b23f4284b2a78a190228728bc290da12a2226283929a8a0ca21af27db284aa064212a278f28d79f02219c263628009f8320bc255c272e9e312018259426819d3d20ef245226729d0c209f24eb25db9c2a1f47247b25fd9b9d1ef6232525309b361e7423e024949aea1d0623aa24439aba1d9a226d24e7998d1d0422e7239099301d8b2147230e99e51c51211223a198c61c2b21eb223f98861c05219f22ca974f1cab201e226c97c11b4420a8217596371bd21f18210296021b7b1fd820a495f71a691fbf209b95a01a2e1fa7202595691a111f8d209e94061aba1e66208294f618551e1f20dd92371a161ef01fd8920000551c1e1d008078234e29992a39a34724892aeb2b9fa44424662ae22bcaa45024902a132c06a58624b62a282c55a58624c62a332c55a58b24c42a332c6ba59c24b82a292c5ea594249b2a212c34a56124722a092cdaa438244a2afa2b8ea464242a2aa92b8ea4c324182a882be0a43b25352abf2b5ba58425d42a562c91a5b625bd2bdc2c9aa5af25232c362d6ba5f725552c742d6ea504266d2cac2d39a50626742ca02dfaa4d525582c892da7a44a252e2c742d12a43e25022c1d2d09a442258d2be62c1fa40c251b2b962c19a4ed24822a402c59a44a24cf29c22b35a3a8232429b02a37a280228828be2918a1d821de2712297fa0ae214527a3284aa07321c6266d280aa01721112613288c9f8d204d250a277d9eb01fc2242926289d591f7b24d125839c3a1f5a24b625569c2b1f3a24af25199cf31ed7233b258e9b841ef8228024e69a1a1e8e223c244a9ab51d4e221424b8994e1df02190232b99e51c5a21e122a198951c2b21ba225698941c2421ce223398841c0521bc220498531cc6209022b197341c89205c223d97231c56202922e496dd1b1620d7215496491ba41f7e21a8950b1b4d1f26214595bd1a311ff8200b95c51a391fd220e094cd1a0e1fad20e694681ad71e5d204094591bf31d861fe0940000bb1fdd1f00807e206b274728cd9fa0222d29862af8a28723c229352b11a4e223fc295d2b5ea4eb23032a752b72a41b242b2a9e2b9ca43a24582adc2bcea45224662af32be9a439242b2ac52baea43624082a8f2b7da43724ce295f2b60a4432481291e2b3ea48d247d29fb2a77a44e243d29ac2a1aa4a4230229872a11a33f221729fd29dda109220f29a92aaaa10824d529ce2bafa3ba24d22a5e2c70a4b125d42be22c58a56126252c852d14a6b7253d2c872d49a55f25932be12c0ba5da24b92a2b2c7ca47624cc29a12b40a46c23ec28722aa7a2a7212c28e029bfa0c8218727cf289da079210427fc2836a07a21df266a2823a02921db257a275c9f51203725dc26ca9dea1fcf241526159d9a1f65249825ab9c0a1f1e244d25399cd01ee6233c25ca9b911ea0231f25539b5c1e2523ca24ea9a031eb8227b245e9ade1d702244240c9aff1d59221a24039ae11d2c22f92390996b1ddf21ab23f9982b1d9a2155239998ee1c60210c233f98b91c2921df2211988c1cf620bb229397361cbd2090220497141c89204d229096fa1b4f200b226b96e21b1620ac215896d81be71f5f215096e51ba91f40215a96861b711f3f210e96741b4d1f4821ca95f41a381f25213495e819d21ee4206b94921a7f1e5f20fa930000891c9e1d00809a229e288129a3a124239129072b35a31d23a329172b7ba31a23a929272b92a35723c129392beda38723ce294d2b11a4ab23d7295b2b24a49423b2293e2b0aa477238c29082bdaa358235829d12a84a3fe220929782adca2fc22dc28392a75a215239f28d82940a291226c287b2984a1fc2219281e2992a1fb2282277f282ca1042269269b271ea00b2170257026329e141f56241c25269c221e0424d224d79a9c1f49242625239cea1fdf2427266a9cf620ea250a27ac9de72047263028bf9d2e22e6263a28c49f1121c325b7275e9eb520672505272e9ec11dde23d0251a9c0721a9246b26be9e22205824ef254f9d6e20bb24ee25719d3120a624e325089dfb1f67249c25ca9c09203d248f25ba9c8f1f11245d25379cb41fdf232e25309c661f5523cf24059c331f002391249f9be21eb4224a24189ba51e6f223124a99afb1d32220924d399811df521bd233599321daf215123c498ff1c6721f1227298ac1c0a2187222898631cb2202022ce97281c7120c7212997111c4f208f210197d91b2d205f21c296c21b0f203421ae967c1bba1f0e213c96481b781ff1201196171b2a1fd920b595f41ae31ea0209895bb1aa41e92200995d71a891e3f20ed94fc1aef1d09209b96ba1a121ee81f46940000b81aa51b0080832123280e298da08a2218294b2a3ba205235729992ae3a2ee224d29c52ae6a23b237729f02a32a332237c29f62a43a32c237829e62a3da336236129cb2a2da3062333298b2acba2ed22e628252a81a298229728c229e9a167225228612961a14e220e28e22807a1ab2180278e2833a02821cd262028109f7b20cd253227a19deb1e72249725279c2d1ee22239243d9bf21cc2210f23a899ae1bdb20c62148988c1add1f94201e97561a101f6020e396b219771fc32008967b1c6b204621df98c21c7821cd220a995b1d4722c223ac99681e5e239424f79a261f04240025f99b5b1f212427251a9c1a1fe7232c25ec9bdf1e9d231d25aa9bf81e90230525c69be81e4a23d724b49b0b1f3923c824a89bff1e2823bb249b9bd11e0623a724389b7d1ee5228d24b09a3a1eb2226b243e9aea1d89225224c399b91d43222f246a99961d0e2209242099841dd021ba2310996b1d96216a23d2983d1d65211b2383980c1d4121e9225998c91c1621a5221f986b1cd02068225c970b1c66200f22f796d51b1520ac21bf96c21be01f70217696c91b921f46217c96551b351ffd20e695d51a0b1fba204e95611ab71e7020f4942b1a6e1e34209d94501a291ef01f5e94ab19041eae1fd893af1c611d2a1e049a0000501b211c0080c9212a280e2988a0dc217f2881292ca1f4219728bd296ca12422d5281c2aaea1802201294e2a1aa28c220829572a25a2882203294e2a22a28e22ec28342a10a26e22c028f82995a13d227f28a9293da1d8213e284c29a9a06721cc27d52815a0f920d22635283b9fa820e5252b27609e032034256526449dff1e8b24bb257e9c261ea123dd24e69b0a1e61221d240d9c691dac21af23b79b901c692163233f9a1e1d54211b23029bfb1c79211324d29aff1da7210c23319cad1f0021b022e89d9a1df520ba22ac9bf61cab204b22189a551cad20d421f4986f1c61217a22b298e41d5922c923679a5a1e4d23b224e89a731e8c231325d49acd1e4823be24339ba21e11238124069bad1edb227324129baf1eb4226924149b9d1e82226124d19a6d1e452241249f9a281e24221c242c9a251e19220624fc992c1efd21e023d699e91dc5216d239799a11d7a2102232a99661d3c21d522f498221dfc208e229198c11cbd204e2218986f1c7e2026226397231c47200522e496e41b1920de219396ba1bf21fc2213896621bb11f8621f1953b1b431f4121d295191b171ffb208395d81adf1ebc205095881abf1e922012955a1a961e7d20c194391a691e4f20d5948219141e0b209f93fd19981d111f249400003d2189220080be25f829d32a0aa65327aa2b962c93a85f27ca2ba62cc3a8ad270e2cc12c11a9f7271a2cd62c50a90a28282ce12c72a90228322cfb2c67a9fe273f2c092d63a98f274b2c4e2dfda88b28e92c032e8ca965283b2d952e9fa86a295b2d112e15a9202a962d262e94a9da29dd2c4e2d15a9f3261d2a142b22a6ce23542611278ea2e21e1c22f321539cb41bcd1c5620da96df252c2a212c8ea1552d1834f03471a8f22b842f833084a7642dda2d832db0ab6f2e9f2e692e7fadc02d002eca2dc0acf82c6e2d212d3eac952b672c3a2c5eaa94274f297329f0a57823f226372802a15c21c2260328ad9d34210a289f28ec9ca522bd28a829199e79213f29862a069da921c7281c2a279e4a20d3262828e89c621dab24e525769a591dcd2312251d9a181d01238c24ae99311da9223a24ca99f71c692202248a99171d3422c92388990c1dec2185235899fc1cb42152234799cb1c712124231399741c1f21c72297981b1cc4205e221d98681b6c20db210197c81a282070213996911afa1f2a21a895581aba1ff9201b951d1a871fd720bf94b0194a1fc32041949319081f9520b6934019bb1e7220439351197a1e2d200e9311194a1ee21f7092fc181e1e641f5592a518a91ded1ee7918419971d201f639200005a1e032000805826992ae92b91a7ee27472c102d4aa93928782c4f2dd0a96028b02c932d25aa8b28d92cce2d72aa9328fe2cf92d8eaa86281d2d382e8caaa028612d852e90aa1029b82dda2e1cabea28dc2d7f2fa0aad128d22d0f2f05aad728862d9b2e92a9e528802c692dfaa973259c29aa2a0aa59c1c48228823c50eb21adc20eb219e12791711202a21460d13192b22a7232a0f1c20ed270629cd15ca22a42be62c69188924a12bcc2caf17ca26782a7c2b81a06f2c532d2c2d53ab092df22dc32ddfaced2bd62cdd2caaab8a29b22b0f2c1fa9782661290b2a29a5ab237d287c29eda00a2284279528e89ee621c827be28699e7721fe27ea28a29d3b21ad27d228649dde2033278128d79d71204a260228d59d811f4325e926089d881e5924a925329cfb1dad23d024589be41d4d238e24bc9a991d07236e24679a541dae223424f199001d5d2200249499ae1c0b22a0231699611cbb2151238398171c6a21f3221998e61b2621a322b297ac1be12040220a97751ba620eb21d896361b6e20a1216a96d21a33205621e0959e1a052018218395651abd1fe2202595571a871fbd20be94181a521f9f206394021a1f1f7b202894b419eb1e5320929377197b1ef41ff292ba18d31dfd1e0192b419871e1b209293000033194c1c00800425a629102b10a50328a72c802d94a9b228f12cd32dbaaac6281f2d162ee8aad428362d3b2e0eabdc28522d612e1aabf528892db02e3eab1f29cc2def2e57ab1829e02d222f28abf328e12d252facaae428c42de12e86aa2f28d92cd52d0da9521fe624fa25d296881cc821d1226c13571a202191224412dd1931218722cb11a219a02117239111e91a5123a6240c12cf1d6c25da266e14cc1fb627c5281015f31f1e2832294414e120a6260a282a13e32377274b28589c5529152b2e2b67a87129a82b082cb9a8c027ae2a7f2b83a61e257129822a15a4e523b628b529daa1f62243282f29dda08722ea27d62861a0d62181279e28d49f5b21fa265d28089fa8206e26fc271d9e3220eb254d27a09dc31f5525a226349d291fdd241c26b39cac1e76248425319c411eeb23e324819be51d2f237a24939a6d1da9223124bf99011d4e22e9232899d41c08229e23fa98961cb1213d239998541c6321c72237981b1c19216c220098e51bcf2016227897981b8820bb21f896621b49207d219196321b2a20542132961a1b0d201f21b795af1ae71ffe206195871ad51f0021e2948f1a00201d21e8948e1aef1f1a21b894441a9d1f11215694de19341fe4200f94e918551e4f20cb92be18371dbc1e7d9100005917ad1c00809f250e2a9b2bd5a53728f32cd42dfba9d7282a2d342edeaa0029852da82e4eab5f29cf2d012fd9ab6229fb2d3c2ff1ab69290e2e5e2fe8ab7729312e812ffcab0329192e3a2f41ab2c29eb2d4b2f31ab1f284b2d472e7fa94222c827b528fb9e9c1da921cd236f0cad1a27203321260cd11813203621a00cfb1987213c23c50f021b5d221924f210481b27236a24f611be1cda23d724b212431d8f24bb25d6129e1dc124f7250712471d85248f251111b41d3c243d25710abf201325c825f598602411288e283da2ce24ea28bf29aaa35424b728c429e8a20824b628b629faa1c82380286329a8a11d23382812292ca13c22ec27cf2872a09c2138278528d79f2221a8263428079fb9203b26f427789e2520ca2558278f9dea1f9125f526329de01f36258e26f39cd71e52248525029c241ebe23f324069bb61d7123b124889aa11d0a237c24479a861db3224024299a3e1d4322fd23b399e81cd521722355997f1c7021fc22c3983e1c2721ab225f98081ceb205c22db97c91bad2007225d97201b5b20b1218a96cd1a2f207821db95d81a23206021b395de1a1d204a2155957b1af61f1821aa94531ac91ff12060943a1ac11fdf20e9930c1a871fc5200394ae190a1f772037938919f91e52200893000004198a1b00801d26b52a232c84a67228452d312e5faa0329672d732e2eab3d29c82de12ea7ab7d290b2e3f2f02ac9829342e772f20ac9f29502ea52f1bacc129782ed22f2aac67298d2ec22fbeab61294f2eca2f7bab9527ee2cde2dcaa801214b2552265993201b591f92216d0c7617d61ef820d8005818a21e432065096218702008216f0ae91646208b21da090b190e216422460c401b85222024c70f9d1b8e23d8246011131d6c23d3247211ed1b2b238e249c0fe51b2d22a723030c341d67236c24a48f9f207f25b926a29cdf229a279628e6a0ac237628a12903a22424872889295fa2a12362284e29c3a1ee221c28042923a1a9220528ee28d8a0dc217a27972818a00421aa261b28039f9f2016268a27549e1f20ae251d27a59d0b206125b4264f9da31fad24c325e89c991f4f247725e19cd51e45245925329c291eff230d25389bf91d7323b824d49a951de12268243a9a541d4e221424cb99141dc32190238599e71c8921112331998f1c4121ba229298231c0621802208988b1bc1202f222297f61a8b20d9213196c21a60209e21d295b91a4c2080219995cd1a32204f2148955b1a07202321c1942c1a901fd4204594201a301f8b20c893ef19ed1e4e20e0934c195d1eea1f07935e1a2e1fc920209500004019201c0080ee25c02a3e2c3da67028692d722e4caa3629982dce2e52ab6d29f92d292feeab4a291b2e572fceab9229302e932f1cac7429492e952ff8abb529632eaf2f2bac1829452e832f71ab2528512d8d2e5ba92c22a52788280e99281cf121ef23a205021a521ff62112042118c31f6121cc0205185e1e0f20e709f914b91f5e20360804152920202162097217db206622fd0b4b1766213523000b3919bd21cc23ab0b721915221b24ff0b531ab121cf2300098519db201d22be033818df208422f400de1a80216f239f9118212b26d827429e8e2349289a29d0a1f42369286f293ba2a4234d283f29e1a125232928122965a1f2221428f22826a16b22ac27b62893a0bc212727692817a0ca202e26d127b29e462075251e27da9d592065252127f49d3d201a258c26ce9d0820af24e625689da11f6e24d125cb9cee1e0e247925289c6e1eaa230d255a9bfc1d4b23af24039b951db62246243a9a3e1d2822b623b399d31cb12126231c99861c7121e122ca98501c3921a4227298111c07216a221398e91bc4201a22b597e61b9920d6213f97c21b5f209521e6968d1b2c2050214a96451bdd1f0a21da95a11a801fcb20c694021a331f9720f993cc19141f52205e93c519c81e4020ae92801b02204d218e940000e01b971d00808d25752a0b2c27a69528972db02e80aa5829ea2d2a2f5bab71292f2e6b2fe0ab4c29462e8e2faaab9f295e2ec82f11ac84296c2ec52fe7abc4297a2edc2f17ac0e29522ea72f50ab4628792d992e95a924229926b2279796cc1b0721f5222a0ad9197c1f3421528100197a1ffa20e887e516631fc3204808f214cb1f9820e9038114341fd5209805e9157b1fca2058074114681f1421490556160d2062210205de13272003221c03b0150120c921ed01f816de1f5b21c900b7160920af21d306e31ae9205922648f4220f3240826f39d4e22402771284ca1c222d327d72864a18c22f227eb2821a1fa2225281f295ea1e2222828272901a114229127b92855a03921b1261428989fcc20fb257127b49e6c20ab2513270e9e57207d25ea26b39d3920fd2437266d9d0b209624b625149d891f6b248425a19ceb1e3b245325279c861e12241e25a59b1f1e6f23d224009bde1da42261248b9ac21d33220624429aa51d0b229423fa991e1dc621402321999c1c7221ef227d98431c3221ac2227982d1c09218522e6970b1cd9204f226c979d1b9b201122fc96611b6520cc215b96b81a132075219995691a8c1ff620fa94421a381f96208194f519fc1e50204a94361ad01e3120ff94671ae51ec02099960000a51be91c00803b26532b5d2cd1a69f28ef2dfb2e7eaa2029d52d172ffbaa6029282e6b2fb4ab3a29472e962f90ab9329642edd2ffdab7a29812ede2fc5abc4298c2e023017acfa286d2ec82f22ab7228902d9b2ecea96f20fb24da258292c01ba620822228102b19361e352081039a17181e1e2093022917ef1e68207308e2160f1f1820ff06cc12b81d6d1f39049811261de31ed80234142b1e132039058a136e1f312121020a16181fdf2023069b169f1e6520bb0386151d1e13201e036115081e1b20e6075918bc1f2e215e8b1120bc24ed25579dee22d327cb28d2a16f23432857293fa29e235a28652966a2442331283c29e6a1d322c527dc2871a1612244278328e8a09021b126232834a0e4203b26bf27f99e7f20f6256627289e5620b6252527929d12203f25a3261d9da01fcb241526af9c3a1f65248a25569cb61e17242525dd9b471ede23f8242e9b1f1e5a23b324d49a001ee0226e24b19aed1db3224d249c9ac01d71222124409a721d1022b023c499fe1c8a210f232599851c182173228898481cb020ec212c98261c64208b21d997261c38204d21d997f91b072015215197fc1aaa1fe12004963f1a471f9c20349597191a1f70202f94f219521f83204894341b33203421fc945f19ce1d071f4f910000e519f31b0080cd251f2b4e2c05a658289d2d912eeba9da28a52dd42e8baa0e29072e402f2cabfc28282e712f24ab61294d2ec02fa2ab42295e2eb32f63ab7229552ec32fbaabb7283d2e922fc2aa4a28682d872e9aa98a201a25f725aa9289195b1f7121a0094b18bb1ddc1ff880f215181d061f04022117f81c9c1e6a020914931c4a1d47024814ca1c121e6b026614291df81e7a0302139b1d401f25051312421d481f6702ff140d1e132014055515911dcb1f3704fb136c1d0c1f2803a212b01c031edf01ca16dd1d161f078c031e5f2345248e9b7f214a26db278aa0e122db27e528c7a162231e280e294ea20723f127f128b4a19022ab27d0280da126227927ac288fa0c32123276b2830a0572196262328509fa820f22574273f9e7620a7251327db9d2e20322574265f9dd81fdc242026d19c7d1fba24ff257e9c321f8c24ca25379cb21e3f247b25a89b601ee3231a251c9b061e282389248c9a901d97221f240c9a361d4222f0238499fe1c0722b5232599c91ccf217923ee98771c7a211b239a982e1c11218e223198dc1bb120f821a897461b5e208f211697fc1a27205c219b96dc1a0b203b217d96f11adb1f27215f96cd1a9d1f1921db95751a441fbb2032958e19851ec21f00944d1a18202521b79400009519621b00806225a82a0d2c6fa5b2270a2dec2d22a98728612d892e0aaada28e92d242fd1aacd280e2e5e2fe1aa1929232e932f29abeb28252e7b2fd7aa1329142e852f21ab2f28cd2d182ff0a95827eb2cf52dd9a83420f124d2252c92db19ec1f6c21f60c72177c1e7920d780be18171fae20d208ea15681ec61f57084c16001e281f9f085b12821c041eaa042b14741c5b1d2e05af0f971c7c1e1f047614cb1c8b1e85021d14831dc81f40039515d51ca91ee4011c100e1c061d3b000d11bf1cf71dff0154185920de2061893c1e3b242e255b9c7f21772623289ea05b22bc27de2840a1c922232825296aa1c2221e28212933a1db22132805292ea12022b427be28a0a05d21f1265528f39f312180261928679fa2204d26eb27589eb5200a269327509e722042258e26d69d5f20ce240e269e9d0820b124e2252e9d4a1f6c248e257a9ce01e2b244725209c731ee22305258f9b0f1e47239b24c29a981d90222d24159a081d4d2206245499e01c2922dc230699da1cfc21ac23dd98a81ccb215b23ab98851c6a21db2267983b1c0e2168221f98dc1bb32003226f97521b6d20bc21b896da1a31207a211896e71a1c205921c095ba1a072041213995bd1ae61f1a210b95cf1a931f1f215394031ce21e6a20e99600007219ba1a00803c25812ae32b49a5e527732d722e36a977286b2da82ee5a99728be2dfc2e51aa8128e32d2a2f54aac728f52d592fa5aaab28f42d4a2f6daaf7280a2e5b2fd5aa7928f22d372f28aa7427222d562ec3a81d2077257c26e194831ae41f642179014318811e5920e3020f17251e06202d078f16d11dce1e1308a515d71dc81e03078b13e41bd61cd5030c0c071a1e1ccd0087108d1a711c47018810f41b7a1d4200d910cd1b531d4600ff0d5b1c3d1e2b004211991be71ce480d013741cc81d53017c16141e531fb18b061fca23c424e89cc82147278a28dba0fd2249286529aca1732384289229f1a1df22452859297ba18b220528fb28f1a0bc2144278c2840a0592109276828c79f1c216e262928249f7a20e1256c27019eb020a525ff26499e562022255d26b19d2b20d9240c265b9d1220b324e3253b9d8c1f5a249c25a29cda1e13245b25049c7e1ec62318253e9bfa1d4223e024aa9adc1dc8225e245f9a511d1422b523a199db1c9b21682324998f1c60212e23b3985f1c2b21f9228198581c0b21c5227a985c1ce5208e227e98311cb1201b223498e31b5b209d21af97201b0b202f218a960b1b901fe82011960f1b541fbe20e195131b5f1f8f2018965a1afa1ea820c194ce192b1ee8212e9400007119e91a00809524f2294c2b4da43827252d192e90a83128472d802e88a94d28792db72ecca934288f2dd22ed8a977289d2dfc2e15aa5328a12dee2ee4a9a728c82d0a2f57aa2328a22dd32eb2a98026c62cee2d4aa8c42045275a28a99eaf1c9b213523688bb418101e5b201081d218561ef11f4483e6163d1d101ec7005e15331d031e9b003412421c6e1dc0011b14f11c4b1e3f0367149e1c101e7b03a210861c7b1ec900f711e51b211e56009211221c1f1e9381b110e51cc61e6282f5144d1dc11ee189c319b321af22f694232033257e26409e9d21bb27e8288fa0d52246285e298ca1c0223128372962a1722212283629dea0b42224284029f8a0e221a327d12847a06b2118275328e19f09215726e4270a9f6620ca255e27e69d5820a3253127d39d34207625e526669d09202d258b262f9dd91fcb240d26ee9c891f4c248e25bc9c5d1f02243b25869c621faa23fd246e9cc41e5323d224ed9b761efc229524639b291e75221f24df9aa21d1422af23209a1b1db32149236899941c5f21e9229798341c04217d221898dd1b8f2014227097411b3a20ba21dd96f41a23209a216196041b222083217096dd1a052063214c96aa1af61f5521bd95531ac81f44214595371aaf1e2e202d95301aa01d471f83930000ad181a1a008051249229d62adca39d26d72cc52d2ea8d227002d332e0da9f8273a2d672e51a9d6274d2d802e56a91e285e2db02e9ca90d286c2db72e76a95828982dea2eeba9a9277c2db42e00a9bf27332d9a2e39a98925422c392dd6a6db201725e5254e96331a7f1f222133044114ba1d22205d83c515821d9e1e4283db15441e1f1fa9001e13871d451f020287137e1c501e2002ed0e161cff1c9600780ef11b911d8c808b12411c111ed9815312cb1cd91ea5842314671d5c1fe888fa1832209f217b91671d5924b825a39ad9204b262128df9f1e22ac27d628e1a0ed22282843299fa1e62232284b294fa1ff2222282e2962a18a22d727d428f0a03f227327ba28b8a09121f9267c280ca06a2199264728b89f162149260e28409fe120e625bc27d29ea32080252127599e3f2019259f26939d0720ca241c262d9db71f7524ab25bd9c541f25244025669cd21eb323e524cd9b071e26238b24b99a9b1d8e224b24ef99381d25221c246199d41ce421e223fa98801c7b215623a3983f1c0921ab226098e51ba5202222ea97b41b7120b221b997931b51207c2161978f1b472066212697301b202037219896ef1ae41ff820f995ba1a711fc7209a95be1aff1eba209e95ec18651dee20fa91611a781e44206a9400002e1a281b008027248b29e62a54a34726b42cab2dc1a76727d32c092ebba88d27032d292eeea85427092d342ef1a8af27122d572e2ea98a27192d512efaa8fa273d2d792e52a96227322d562edfa86427f82c3e2ec6a84226772c812d21a83924aa2aee2bfaa4c2201025f725a495ac1a4520e42185848a18241f62209d88cf186f1f3120e3889415a81e1a20e481da14321e0a208c00d4133f1dc01e5401a713eb1c6b1e06830a13881c991e94835d14971dda1f6487821822200222e08e261ded23892574993b2035263b28c09e2b2209284529eba0e52269289e294ea137238828cf2973a1d0226b28952925a1d7223928522912a17422fa27f328e0a04d228227b328c2a00522e8266b2860a05c2152260f287e9fed20f525bf27bf9e5e2091252627db9d2e203925a0265f9dfc1fe7242a26e79c7a1fa324d125979ce71e6b248c25249c521e17242f253a9bf61d5423c724a69a591da9227c24aa99f51c15222224f898bc1c88217c23bf98bc1c692143239d98b41c5821412373989d1c2021ca227e98951cdd203b227798741ca820eb215698521c7420a42135980f1c32206021ae97371b0d203221d396c71abd1ffb20d6955c1ab21feb20f094ee1afc1f08216195931a1f202121eb945f1b5020742184950000901cf01c0080ce2360299a2a8ca3f625872c792d88a7ec26b42cdb2d53a8df26ce2ce82d70a8d026d92cf62d73a83927eb2c222eb7a81b27eb2c192e97a87227fa2c302eeaa8e626dc2cfb2d8ea82827ab2cd32d9fa8ad266e2c742d68a87425ed2b112dd0a6e422cc29052b10a4391fae23842448944b1bb11ef5201e08521aff1ec02048842e17421dc41e45895e15411c4c1de1873514951cd21d2d86b314141cbc1de6861b15d41c8b1e7f876519941fda200791431d59248e2592999c20a6265e28399ff5210a282129eba0f0226b287a29bba122236c28782997a1222365287d29b1a16722212817291ba15f22b127dc28e7a0d62125278d287ea0eb21b4265828a3a0b0216b2611284ca0c220c3255b27309ff6209f255627379f46206425e126bb9d2f2022259426609df91ff3243b26e59c831fb524ea25679ced1e7724a225eb9b771e2f245125369bfd1d7823f024829a9a1de0228d24179a781d6c223b24199ab01d2f220c24589ab41de821a7235c9a8c1d84214c23589a071d2821052377998d1cde20c2229098261c8c206922d997ba1b5720f7211797411b2b208121a896ce1aef1f32210d96761a841fd320bf95381a541fa5202e95521a5d1f8a201695e419341f7f2013943a1a541e0f208f930000d6193e1c0080ee21a928ed29bca17a250a2cf02cd8a65826512c4f2dbfa72e265e2c642de5a7ec25582c592d91a75226652c792d0aa83d26642c732de2a7a126782c952d3ca81a26682c6c2dcca76e26412c5d2d10a82b26292c302d9fa7eb25f52b0c2d0fa70625592bac2cdaa50423e0296b2bf9a3902047269227059f871de5213023ee91dd189a1f1a21f2882616a11e532083889314ab1d731ff189bd18642001220592d41c12246a254099ed1f14260028fc9d2f224728782932a18323b528142a86a22a24d528302a77a30e24ec282e2ad0a2b723d228072a43a241239828d129afa1b922642881292ca1792216282d29e4a014229a27d12897a0b921252788283ea06221a9262d28d49f90200b269527819e7520ef2576273b9e4e206825d326e59d4c20ef245a26a49df71f9a2410261e9d631f6c24db25a49c281f42249d254b9ce21e13244325df9b6e1e9823e0245a9be61d05238624699a601d58221124b199d51cad216c23fb98721c46210f2375984b1c2821da222f98401c0421a1222498471ce1206c220c984d1cbc2030223198531c9320022236985c1c6120c0212098031c212079219797491bde1f3821af96ae1a761ffb20c195131b991f31211896a919f41e712183932b1afa1d9c1f9d940000931d2c1f00806024d5293f2bc9a45e255f2b782c40a6ba25ce2bc92cfea69e25f32bf12c05a7c825072c0b2d4ea7ef251d2c202d95a72d262d2c272de4a75e26312c282d1da834261a2c102deda7f625f62bfc2c5da7d125e32bf62cf0a6ae25c52bda2c9da67525952bbc2c47a6fd24202b7f2c87a56524422af92bbfa416236729cc2a74a32322bc28ed291ca262216228732921a155213f286c29c8a068217328be29d9a04d22a528f32978a16922e828652a91a121231029842afda138242a29532a35a316240f29602afba2da23d728372ab5a212239328fe29d7a1f0224928a229a2a1412220284c29fda06f221b284e290aa13722cf271c29b2a0df2115277d285aa01a213226c627909fd520f3257027e49e912098250f27419e6e205a25f426d19de31fd9247526f49c5a1f6c24c925849cd71e49245c251b9c821eff230225cf9b571e6b23ab246e9b1d1e17237f24fe9aee1ddb2259249d9a8e1d702221240a9a091dc92195235599b31c4e21f822d8988f1c1f21c622b398551ce42087225898271ca52027220b98171c6b20c421bd97171c48209921bd97501c402071211498471c272054210c981e1c0f203321ca97c01bd41f09211d97401b971ffc207396101ab31ffc20b5942319f41d141f1b930000d61d4f1f008016249729d12a6aa4ea24012b462ca7a54425462b732c48a63d256c2b912c66a64625782ba42c97a63f258a2bb92c8ea641259d2bcf2ca3a67825cd2bdc2cd5a68725af2bdf2cc0a67b25952bcd2c9ea67c25692bb62c8ba6ce25442b822c02a7a425fd2a772c92a6b525e02a692c91a66925c62a722ceba55e25b42a4f2ca5a53325832a2d2c78a5c624502a072cc0a472241d2ad22b3ca43924fd29942bcfa30024d029632b2ca3de23a5292d2bf1a2ac237129e62aa9a2792335299e2a62a24623f628582a36a24e23b6280a2a3da240236a28b6294ba20e232428762907a25422af271a293aa1f0214027df28bca06f210727ac2842a02e21d9267c28f89fe7207d262928689fc2200826a927c99e652083251b27449e3d203025b726ce9d3420ce244326a39dff1f6624ad25239d411f02243625749c9f1e9e23f624119c221e5723c224309bf71d0d238b24a79a931db0225e24e799501d412228247a99271dab21c1232a99311d49215d233499191dff20dd22af99d81cb1204622db988b1c9520ff214c985f1c6d20d0210398f81b3c206e215097961bb41f0921bf96061b661fe0200c96031b291fc220d795ca1a261fbb20a8952e1b0a1fa720c795231a981e92203f949c1bf91e972044950000e81d451f0080d3237229a12a0fa4a324832a012c23a5df24e32a352caca5d624fe2a492cc5a5de24022b562ce0a5e3240a2b5c2cf8a5d624f62a552ce8a5cd24e32a422cdda5c624c72a362cc3a5a324a42a262c77a5ac24972a242c71a58d248e2a262c3ca58a24812a202c18a58c247e2a1c2c0aa5a924732a0a2cf8a46624562a1a2c90a484244c2a182c9fa4c324782a212ccea41d255f2a2b2c29a5d824542a232cc1a4e824232a072ce2a47024f129b52b1aa40a24aa29402b3ea3e9236f29d22afba2642314296f2a6ba2c422cb282d2ac7a149228f28d92948a12c224b287a2903a1c1210628232982a0aa21aa27de2870a049212a277d28fc9f4a21c6263e28d79fd22064260e28029f5b20e3257d27169e0d201d25a1268c9d2f20d0245b26bb9d1620ae240f267b9d8e1f52247e25bf9c8c1e02241125ac9b0d1e7823d224c09ad21d10239b247e9ab01db6227024589a921d40223224369a7c1db7219423f699241d5b212a237199d11c3b210323f798931c0221cd2275982c1cc2204b22e497e71b7020b8214097681b252056219696401bc01ffc207396201b651fc3202396041b391f9d200b96921af91e862079950d1ac71e6c20b394fa19a71e6620a494f019b71e5b2071947f1a941e57200b9500001e1d181e00808122b128d72991a20d24eb29592b51a4fe23cc29302b8ba41924f2296f2bc6a439241a2a912bfaa44b24352ab52b1fa53c243a2ac72b0da53524332ab22be6a441242d2ab22bf4a4ef230d2a802b82a43e24cf297d2bc3a4da23b0298a2b4ca42724c029502b7ca4ed238c29192b48a4e52390292f2b35a445249829132b6ea49d239d29892bcba31c24c2293a2b17a43124c6296f2b2ca46823c029652b2aa3f023b7293f2b90a3c723b529222b4da3b5238529072b3ca326233829042b9ca2fe22f628ac2a5ea2692290285d2aa8a1e9212c28dc2922a1c021a127ef28e9a04f2112278b284fa0f9208f264628cb9ff9204d260c28839fda200326bb27319f6e2066250927719e1e20e9244e26c19d591f8724bb25ed9c351f5624ae25879c061f4224a625509c071f20248c25519caa1e4523f324cf9ba81ea22258249d9b781e96223024379b091e65221924909a5f1d0a22a3238999de1c6121d922e198ad1c3621b3228e98aa1c3121bb228b989f1c0921a1228098741ccf207d227798581c93205822f997341c5b202922b797bb1b0c20ec21e0963c1bb61f93210796f41a6a1f1f21cb958f1a251fe52047957d1a111fa82039953b1ad41e7c20d694071a9f1e38202b94621a4f1e0320f5940000a71e34200080e1212b2800291aa271223e29992a0ca3f5223c29922ab6a387236d29c02a39a4a7237c29d92a59a4af239729f42a5ea4d623a529002b74a40424ad29212b90a406249929132b84a4be239e29e92a2ea475235729c82af3a3ff220829832a10a3f123f528672a10a46e23d1280e2a4aa38c237a28f229f0a32b237928cb2922a317245e28562903a47124742876294ca475237c28a429e5a24e227d289b2990a1ac222a284e29e3a141220828f9286ea14822e4276e2974a14c2221285d298ea10322a1271c2938a19c211b2784288ea078218a2610285da0ff20e9253f27b09f6e207d256a27b19e302065252327359e23201b25a426e69d4e1f83247726009d651f43249a25db9c021fee231925809cbd1eaa23e924239c9e1e8823ff24109c601e5923e624789b401e1123bd24269b1f1ec6227524d49a3e1eae224f24c99a481e9f2230248a9bec1d4e220224709a601de02196238a990e1d80212e23c898c01c4b21e7225c98a21c2021b72240986b1ce6209022dc97211caf2059225897ef1b74200c22d596a71b3920cc219796b01b16208a219f96a51b00205a215e96801bbd1f36217596311b761f3021fd950e1b3a1f1b21ad95731aec1eee203195121ac31e9f20e394701a4a1e2a2045940000191d251e008027223c28fe28b0a18d223329842ae4a2d4223829ab2a47a334237229e22ac8a31f236629de2acba3f3226329da2a9aa3c5225b29ba2a68a3c4222b29a02a67a3c0221e297f2a4aa3a2220629572a12a3c322c128202a04a38122a328d72962a276225c288e2940a2422227285529f7a17d22d52721292fa257225927c828f4a16b22fb26852835a2a922eb265628f8a17c22cf263028a1a1e1216a26e527dba07f213726a4274ea062212d26a02724a0ad2186269d2735a0f720c62555275c9f0f218a251427809f032157251027929f912026258626a49e1c20ca243c26fa9d8a20ef244b26589e5620cd244026f09d4420ca241826b99d1620ac240626409de11f7424b825d79ccf1f37247d25cc9cda1ed0231a251c9cd01e6323c524fc9b7a1ecd226724399b531e95223324e09a081e64221b24639af31d42220a24229a9b1d0422d9239e99421dd02190231f991c1d8a212423d598e81c4321bc22a498901cf520582251983d1ca020fa21c7971b1c6520aa218997e81b462075214197bb1b31205321e0967a1b0e202c21a6963b1bc91ffe206e96191b861fe0201d96e11a3b1fc320ed95c11aec1e8c20d195a71aaf1e7a205a95aa1a891e2c202d95b21a3d1ec51f0295c01a401e37204a940000141c541c0080d3211028f2280fa12422d828ff29f0a17422ef28252a6ca27822e828452a88a2a7220b29792acfa290220129842acfa29922f528592ac1a2b222e328382adaa2be22d828272acea2bb22b428f629b3a25f227c28a62929a2242237284929aea1f921f927f0285ba1b921ab27b228f8a056213527682868a00221ee264528d99fb5203d26a027fa9e93208e25cc26869e43200525fd25b79d7f1fa824c925d19c761f65243525cb9c102041240425389d391f742477258a9c981f6e247725e19c541f70247d25b59ced1f22241725179d2e1f222427259d9c141f0c242a258c9ced1e02240b255a9c251fd923ec24639ce51e7023c5243c9c8c1e3d23b524db9b981e2c23b424ba9bb21e1f23a824d89bba1e1f23af24e29b9d1e00239c24909b4e1ed9228324089b1b1ea4225d24a39aef1d7e224924489ad21d3f223024009a8e1d01220e249199751dbf21cc235199801d702180235c994c1d592127232999171d3621f022d098ae1c0a2194224b983a1cb42032228597af1b3e20cd210d977d1bf61f7721df96741bc01f4821d796621b841f1c219196011b291fd92008966d1ad21e91208995ef197a1e4120f194ed194b1e1720c5941e1afd1dd51fc094601a351ef01f9794971b051ef51ec0960000671cc31c0080ad2123281329b0a0d9214c28392953a1b6215628622948a1e9217f28a8298ca130229a28ca29e5a1f6218b28c129aea1f6218a28bd2999a105227d28a429a7a1ff216828862976a10a224e28652954a10e223d2843292ca1b7210428fb28a4a055214b2785282ea0ec207826e2274c9fae200f264b27ac9e5720c9251927119e32206e258826a09dcf1f10251326209def1ea224dc258d9cd91e31243925669c921ea023a424219c4f1edf226a24ed9b721ed822e8230d9c7d1efb220124f89b7b1e6a236f24c79bad1ef423c224019c3c1f2c24f924579cd31e23241225ff9bd11ebe23e624fd9b7d1e7623ea246b9b411e3e23ca24279b951e1a239224879b6e1edb2257245a9b731eb1225424609b4b1e9f224c24059b441e75224024fd9a431e4e222c24fc9a561e2c221d24e39a931e2b221124269b6d1e0122ed239f9adb1db7216223df99911d6221e8226c993e1d2421b922f598ef1cde207122ab989c1ca0203d225c985d1c732019220198031c3320fb215d97981b0620d221c196751bcc1fa1216c96371ba21f66213796081b571f3021db95f51a331f0221cb95c31af61ec120a295671abb1e8c205595321a8e1e6c20fc940c1a4b1e3b20b2948219191ef91fee93561a9d1de61e2c960000912035220000572578293f2a9ea58b26172b502c2ea8bc26032b4d2c72a8ab26472b5d2c7fa82d27722b742cfda81a27772b762cfda81f276d2b6c2c1aa9b426362b4b2cc1a82b26f72a3a2c4aa869263c2b312c47a85426932b532c16a80c28382ce12ca8a83c28602dbe2e28a8b127402c4a2d1da79624562888295fa49e220027512836a2581bea235b24ed982a14a01e921dc3900000dd1a7820008097266d2f9c30faa21d2c8b335e34fea4c027212c2e2c8da3b42b1a2c782b5daabb2b052c7a2bb6aaa629492a482ae7a8ac26a028e02852a519246728ea28d8a1f021332809294b9f0123b4289129059f3b229f29322be59d2a234f29542a969f74207a27d928189d351c0a2558272b990a1cf4237c253099371dc323f724689a5f1d3c23ac244b9adc1cce2257244899d41c9a22252463999e1c4522f5230599bd1c1722c12327999b1cb9218223e098af1c85215223f698941c52210023d998431cf9209e226498c81b9a202522cd97f31a4620af21c596691a0b20462110964f1adb1f0b219c95231aac1fed201d95cc196e1fd120aa946319321fb8202f946c19041f9c20cf935919dd1e8220b3935819961e4720b293df18381ede1fbd920819fe1d741f3f93d017c11d601f2f910e191a1d5e1e23920000491de31f0080c8250b2a1c2b4ea7d526c12b982cc0a86027ba2b912c56a96727082cc12c4ea9d727362c072dd7a9b727302c0a2da3a9d2273b2c1c2de1a9a427482c0d2dbea9e627612c362dd4a9ae27622c5b2d81a955272d2c012d34a912272f2c0a2daba8a526a52bac2c27a868248029b82a83a4a21fc7251f277f995e1d452452254607671ccb223b24750f721cb124ef25070b48203a285329c58e1324442c6f2d4b998225532dbc2e0b98a3241d2b5a2cfa9821250529cd29b5a06d28cf29ec29efa739276b287328fca6c7242f28d22837a4d02237272928f4a01822f427e628d49f922137283a29d79eb82129281c292f9f0e21cf27d828c79e022135278028d99f82203926a627f09eab1f3825a326cb9d971e8224b625cb9c5a1e0a241b25429c081e7323a224949bde1d05235e240a9b7d1dbe224524969a2c1d662209240f9aad1c11227f235999731cb4213623f698351c7b210c237498d61b4521c722db97b51b032181228297681bc5201e2201972b1b8b20db21c896f61a6120972163967e1a2c205921c6955c1a0c2030217a95671af91f10215595531ace1ffb20e9941c1aa81fe5206694151a6d1fc7206194d119461f89205a944a19681e02209e930119221d971ecb916d193b1e0d20ab919d1c6a1c541cc68e7c2271244d2559a03a26952b8d2c49a857288a2c632d38aa3228862c5e2d12aa4628a12c812d6daa3928a92ca02d59aa7428d22cd52dc2aa6e28fb2ce62db9aa66280c2d1e2e9daa6428df2ce42d7aaad3279b2c902da9a93a27112cee2c13a91b24a7289929e6a4061d0d237e249a994f1ad6208a221990191b2e2211240208f71bf1223a240c0c911c752495253006511e2426bf27da82922061285f29ae913d213b29832ab19313226a286529e4974822452748282b9c64254728b92839a44a243128d328b9a26423e427bd28caa16222d827b428e9a07522f327e628c9a05a221128e2289ea01c22682791289da07e21ff26502826a00521ab262b2813a075203226c227bc9e2f20ad252727159e9b1f2f257026a39dec1e8324b125bd9c2c1e10242825ee9bc91d4a23a0241b9b761da0222824669a1d1d2f22c7238f99df1cfb219a232899ca1cd5216923f0988a1c8121fd228d98361c28217f223998b31bcf2027224897691b8920cb210297561b5d209021f0964f1b1a204f21b596bd1b25204721e2962f1b01200c21c895e11ac41f01218995441a9c1fec20b094441ad31f0b21b094831ae21f1821b094ed199e1f0f214494e219631fdd201294491a691e861f0f95a2185b1b341c1f94741e7a1fc12078972f2068235623439a0826aa2a172c5da85528a52c8a2d54aa3f28c02cb02d62aa6e28052d492ec9aab228322d472e0fabc528372d7e2e2cab62282f2d512ee6aa7428042dca2db2aa7c28102d1c2e9eaa2c28c22ccd2d28aa75247d29d32af2a5de1daf2252248b9a9a1c682100238c94551c30222e24628d771b2422fb2337889e1bd42103232985061c69238824d181fd1c9324cc25c386f81d2b2584260b887e1ead250227228d471fd5251c2758910a20d52530273f95cd20b2259526ff9b4121da2525277e9fe52007266427f29f9b2141268e27caa0ae216926dd27c5a066219c2601284ea05a21a4261c2858a0ab21bc261d2871a046219526252835a06720ed257f27a69e38208325fa26419e09209525fe26de9d18207c25f826b99d731f3a259c26c99c5e1eed23f524d29b891d12238c247c9a531d0e238a24179a5c1dcd226524219a511d75223124149a161d1322f023f699d51cb0215f236499621c5521e722a498201c0e2193224098bf1bcb2039228c975d1b8c20d321c296181b50208d214f96cf1a29205f21dd95811a082042219a95261ad21f2221f394c519861ff7202794c819701fd620ac93d819971fdd20c193a319651fcb207b93e819b21e19202c933f1adb1e29200795911aea148e14148c662017226622d39b7426632b652cb7a88228ed2cce2da6aa5328f32cdc2d80aaa228192d322e19aba928442d552e02abc0284c2d732e24ab77283b2d692ef7aa9228472d0b2edfaab428522d8a2ef0aaba261a2c192dd2a8c61e7224af25209fef1ba3203a22b695fd1b701f5a213091d51ab31f41218f8ef71993208521108a841a7620a9215c874f1b4f219b2221881d1b442210240488b01bec228324d08be61c5223c224318f881cc723e0249b8c501e5d2358245991591e2c24e424fd96331f75245225869cc91fb424a925529ed4207e25c12631a074210d268427a8a00c2202276028e9a080227127a9285ea15f228927a8282ca17921ca2644285ea0a7200126a227e59e5d208a251d27589efd1f5325b126cf9d0f20232570268f9d5f1f72249525d79c3a1f18244425be9cd81e1c243c25659c601ee4230a25d49bcb1d5a23b624ca9a711dea225e24129a5a1d3b22f523f899541db7216d23cb992b1d722100239e99bd1c2d21a0220499171cde204e221998791ba820ef214797cd1a6b209a213e96851a40206b21cc95861a2b2059219e95801a122036213b95351ade1f1521a594f2196d1fce204894e119131f89203c948819ac1e3020a793b11a481e731f85963f1a6e1fa120da94e61ac114cc148f81e720332361239d9b8f26ca2bac2cbfa8ec284a2d462e31ab4328fe2c232e68aa62282d2d3e2ea7aa3129b42dbb2ee1ab0329892db52e77abb628672d8e2e7babc028572d442e13ab2228e92c322e0aaa1e240d29672a43a579197920d72167949c1a2c1ece20c9916d1bf21d3f201592e61a601d2c1f108d86196a1f7520be839a1acd1fdc207e817a1abe20452277017d193a2111233d01c2191321b8228186f318b82045221e81b31961208e21dd83dc1acd200922438caa1cb421ee22a393281df32181237699561f29245a25da9dd220b0251c271ea0bf21ac261928fda00922f626552812a15a2249278e2856a189228a2797284ea14a22292770281ba17521b5262f281fa07c2099253027859e1c2019258226fa9d6b202925e1262d9e4420ff248026b99d9e1f7724d825009d951f5e24c325df9c1c20fe230125a19daa1e7523d624309c981df1227f24b69a561d67223724419a0c1d0222ab23c599bd1c9221fc224999641c4721b522c6982e1c0d217c226d98d91bda203c222898a31ba4200922a897b21b7b20d1217f97cd1b51208a216197ad1b20204a219c96351bbb1f04210196a41a681fc0202895211a321f93209694a419f71e592010945719401ee51f1693791a7b1fb420d894b81a1015ce155009a1204c232723309b6326622b722c93a8ec28662d7b2e1fab5228132d592e60aa4b282e2d362e84aa3d29cb2de52ee0ab1429cd2d122f7eabd128832dcd2eb8ab8f280f2df82debaa5827842cb12d6ba9a7213e261b2858a2a911201c881edf8a5919821d6120da8b381b231e4320bf8f801a411d4b1f57076b18661d5a1ffe0233182c1d7a1fd8029c18231e03200b013418da1e8320f3806518301ff420f38699189a1e45200a812a17f61eaa20cf801b1a0b204421e586641abd200a22238eae1cbe20f6212a98141dc62248241f9c401f52247e25e99e5e20ef2447260aa08b207825f82602a075214226f927bda0122202276c285ba1d22190262228f9a00a21d125322717a0da20cc251927319f44206425d826539e4c204e25bf26c39de31fe5242f26f49c7b1f8624ae25b39c501f512464257e9cf11e2c244425439c6d1eff231225b69b221e5823c024309beb1d9c225824ef9aba1d3a220e24639acf1dd0217523a49a391db02120238899841c5621c7228798221c0f2179220798f41be4205022bf97a91bb3201a223f972f1b6d20d321cb96cb1a2f2093210b96611ad61f4e217e95051a561ff220d894a119051f96205f94e319e91e702092940a1ac71e38205994741a441eba221b931a1cff177418180d8d20af2238230a9a1827272c002da2a8e128862d922e0fab3228132d4e2e30aa42282f2d322e76aa1829d72df32ea9ab0d29d52d172f74abda28b42d0f2fa3ab4f28232d2c2e5baadc26512c612d0fa9701f4f240d264c9fb50f581a951d2e8762187b1ad61d72894a197c1c931e928adc18221cfc1d19019118b61cfc1d08017716021d311f31029517eb1d0d20db00c017f11d1320e000d416691d1b1ff1862a178b1cf41dcf8065167b1d6d1fb9000319f01e5b202201fa184e1f7c202f8a161a3d202f213694f81ca02230245e9b201fc5241426639e7f205925cf2628a00f21df25802777a0ff21dd2662284aa10222c5266328a4a188215126df271da1602112267d2797a02b216726d227a99fa620c2252f27c29e3b207f25ea268e9d182032259826429d831fac24fb259d9cbd1e212448250b9c421e8b23d624559b1f1e7023b924009bf81dfc227224d39ade1d9e223d24b69aeb1d8c223824c49ae01d6e221e24b89a871d0322bb232a9ae01c78210a234d993b1cf12056225c98de1b8f20ca21e397c11b5d2077218e97a11b312053213797481b0a203121ae96ac1aa31fe720ef95211a2f1f93201b955619f21e66207294b319181f7d209694f21a18200d2100954f186b1c6c1d73926c1c52172518fe0a04202122a4221a99a726ed2bc12cd8a7b1283c2d252eb9aab027cf2cde2daca90028dc2ce62df5a9c828962dab2e0eabd8289f2dda2e02abb3289c2dee2e44ab4f28372d332e4caae026682c882d06a99d1f0f249e2501a07d0ec114bc190c8607187e185b1c01897718751b761d0201a9189e1ab91c0d017d162e1cdc1dbc800317e41b0e1ecb80dd15721c0f1e50837116991c121e2f82f515d21c921e0e867515381d391fd901c3144e1d271f8a000519831d9b1e67834918101e891f1d8cc519db1fb120a8932b1ccb210d23b599f21d3e23b524aa9da320042523265aa0e3212526a727b1a1be22dd2655280ba2d72182262928d3a05b2145268c276ca034218f2614284ca07c21dd264e28aa9fb7201726bf27b99e722092250d27f69d102015257126559da01fbd240726e69c171f8624c1255b9cc31e4b248a250f9c5c1e0b244425749b1d1e7b23e424fe9ab71dcf225724609a6c1d69220a24e599f11c0222ad233b99cb1cd0218023f1988f1c9a213523b398461c4d21ee2267980b1c002188222b98ad1baf20fb21b297661b642099216a97f41a29205a21c6969c1a0220352140966c1a931fff201396161a331fc720c29573199f1e6720b1949819cb1d101fa994921a181f3720eb94601be114a6162a08891f4222ac2200995a26dd2bb82c38a78128552d4f2e64aaed27fa2c0f2ecaa925280f2d2b2e1daac728b02dc52eeaaaa828922de42eacaa55285e2db42ea3aad527ad2c992db9a94726262c442d8ba8a51f8b242c2605a0de0adf16791a0982b51799163a1b18865119bc18921b3381b316fe18b61bc280c7178b18e019e18000167819121c08826d156a1abc1c84855315f71bfe1dce01fb15581b881d6e870c14901b451d5f014713041c6e1d3c811c186c1c931dc9821719132002219c8eb31aae21e6229495da1c5c23b124549bed1e31247725e59e232060259926899fe8201326a72754a00b2211278d283fa17823f127f128cda2cb21392788289fa0e9201726a327969e042120267a27b89fc8200a267927169f9520b4255427469e2a20eb244326789d19208924c525619df71f8624b0253b9d951f5a247d25df9cd31e17243725319c401ee9230a25539bf81d5d239d24d39a701d8f221f24109a301d57220724a499f11c2422dc2318999e1cf921b423a198711caa214d2374985d1c4221ad224098001cdd202b22cb976b1b8c20d8210497fc1a4d20a0216996a11a1a207121e595ba1afd1f6521cb95701a0e2042218b95211b06203821bd956a1b05200d218c955220091e5f1fa69eea1a6c14cc15cf07dc1f5122d42237993426f82bd22cf6a68b284c2d582e51aa7127e32c162e55a9ed27eb2cf12dbca992287d2d822e7caa5a28552d9b2e2daa1628172d5e2e33aae327bb2c952db5a996266e2ca32daca855216927dc285ca2090d8819701cb184d5178e150c1a6c843f1840187f1bf68038184b18441adc82ab150e196c1aec81f415db17111a0482931460193a1c8d81f615f619301c0582b715171af21bcf85ca155f1b0e1d94841b15411d381f7f87fe18891e42207c8ef41802202121e590c01930201e21a1941c1c50221124fa99351e3c245e25a79d3420f7244826a89fec209a26052834a09721cd265b28c6a09d21be264128b7a0e0202a26da275d9f0c2168260c287c9e3d2174261628c49f8820cd254f27769e92206f25bb26639e1420cb24f5255b9dcc1f9224b8251e9d8d1f6c249f25da9c191f34247425769c8e1edb233f25069c2b1e84230f250e9bc11d0d23d924949a871d94225524029af81c002295236799d41c7f212b231d998b1c4121f122cf98571c0521cd2298983f1cea20ac227f98431cb6205f2283986d1c9620f321b098d91b38208121a597421be01f31211297111b7e1fdb20af96e01a551fac204f96381c981e4e207898e61a501e2f202995b719541e4f209e92f9188d118c145f033e1f6c22be223799c325662b8d2c4ea62528082d1e2ed2a91527902cb92deda81d27b02cbd2dffa86828472d622e31aa4c28492d7a2e19aa61281a2d512e95aa1928ed2cd82dd0a927278d2cd62df9a87b223029cd2a76a4db16921fe32099949219a116381add8f2c19e317d81a2b017c17d218ee1bd880f7175919fe1ab3827e174018c3198a823f152c19701bf6829e14e119821c90815b14401a961c6d845813161b381dbb83bf15121c821d2387f217a61c511e438c61181b1ee51f5490f119d720ca2120961f1cb8226624cf9a411f9e24c925679e142147260628a0a0fe21c327e8285fa17722f6271b2957a1f9218127ce28c4a016211f266927659f022120268327939efc201e268827889f422058259a26129e3c2045259c26ae9d2c2041259a265c9d0920092563262f9dbc1f9424d525f89c981f2d245b25e19c5e1fe4234125d69c031fb6233325689cab1e6223fc24309ca21ee9229f24f69b961e47221c24e79bc41d0422bb23989a291dae216323c1998b1c6b21f922cf980a1c042180220c98501b7820232220972c1b1620d921c996dd1a1a20a3217e96b51a162080215896b51a0f2060215896381ae61f2b21b5955e1add1f3721d895fa195f1f96202695b6197c1ef51f1d9488183e11b6130601741fbd22e0225e991425b02a2d2c7ca59427ad2cc22d29a98e265c2c7a2d83a88126792c8d2d7aa8fe27f42c052e8fa9fe27f72c2e2e8fa9a027e42c1e2ea0a9d427e92cb72d9ca92628c12cf42d10aa3f25712bba2c39a7101db0240626af9db018631b721d7c92a11752148f19bd886b184c19641c7d8ad016531bcf1c3b88cc1604188b1afd88281453180e1afb878216cb199c1b988c3116951b4c1d1e8e4b18061da71ef890f317b21e8620d39083194c20a4215093d118da20a3227b93d71bdd21ff235f98511e6a236f254e9df81f20259826259f8420932561270ca094215f260a2873a007231e2765284da26d22b3261f284fa13a2261260028e1a0d7216c2625282aa0e7218826292860a0fd20fa25c2271d9fa8209f256827a49e5c204425db26d99d3420e7245e26a39ddc1f9024d925299d6b1f3c247725a99c4c1f02241a257b9cee1e7d23be240f9c041e06236e24b69a881d68222024039a171dec21d5236499b51cad21b823fc98541c4d21362376980e1cf12077222e98b51b9220e421f1976e1b58208421a8975f1b3f205e2163970c1b1b203321aa96b91adf1ff3205c964a1a271f87209895061ad51e6f205b95b619941e6e20c294b9199a1d471f7294eb19911dee1e4394ac18230c9a110e811e1f602296225399f924a22a222c3ba54e27892c962deda82526302c4b2d2fa824263b2c362d24a85227a12ca62d0aa94f27ae2cd32d08a9e2268c2cb62deea8fe26862c692d02a92327822c892d03a99c26362b8e2cd4a80122db283a2a2da4961ce322f124a19c10191e1d332013956619eb1c5b1f8e927118ce1c331e24919c18841a021d9991ea15211b811d98903b18cb1b4d1d0c93a417461dbc1fcc925918731eaa203e93d0171820bc212b93e1194c20a121659523195921562399966b1da823de24189c361f6925da260f9e962030260b28939ffd20ac2677281fa083213027b2283ea08422b627d8284aa128227f27af28e9a0f7214d279428d8a0272175262628c89f0c21c9252d270e9fe720be253f27b79e79204e25d926009e0620ee246626489d8b1fb424e525bd9c331f602488256c9ccb1e2b2452252c9c271eaf23ed24629bc21df2228e24bf9a541d66225124f1991a1dee2106246799871c5b215f238a984a1c33211d230f98541c342142231898281ce220b222dd97251ca9201522d797f51b7420ca21c097c71b57208f2193976a1b1c204f210397ba1a01202b212c96641aa61ff0208195ea19871fcf20ed94351aaf1fd820ff94de1a0620de202395381a7d1da51e3c964c17d90ed111c505f91d9a22b72278989d246c2a0e2c4fa562278e2c952dc5a83126312c552d0ba82226372c2f2d01a83027902c902dcba8d126782c932d98a82c26382c5a2d4ba851260d2cdd2c64a80e26012cdd2c20a8cd25552b8f2cbda7bb248b2a2a2c72a683219b28d6290ba3f01c4d24b6250e9ddf1aff20b5228398941a7e20ff21c896cb19ff1f9d212296711948209a219c956919bb1f66216c95a11917209e21a4956c196f2021222195a91804219a224794201ce5223324d598d91cd523ff24019c4e1f9524d125f69eb720c5255a278fa071217526232808a19422a926502874a2ec211f27af28f9a06f225b279d2896a10c221627762814a10222ec26642822a197213b26f527b2a0c7204f25d426c29fa62163253d27bfa0a5204025a226c19e4220e4245526d59df01fce241a26199d721f9324c225939cae1e4b246b25d49b191ee6230b25f99ac71df7229b24729a611d9d227424b2992b1d36222f24c499571d032205241b9a911dd2219c23869a661d7b212e232c9af01c1821de225e99601caf206d228298d01b6120ff219c97431b2520ab21de96c51ae91f4b216796631a8d1f0821dc95101a3c1fb9209095c919231f97204f95cd19eb1e7120ff94261a471f7b209a94711aa41e1620d294c71ad8190f1a5c09841f0823b6233399e824e52a292c21a65926202c1f2d25a88425b02bd92c48a7a025ce2bcf2c58a76126262c172d36a835261c2c1a2d19a8ce25ff2b0f2de8a717260c2ce52c10a8e025f52b142daca7a925452b822c79a7f424932a272c78a64f24ef29652b62a5d021c9280d2a43a3291e83252e272d9f4d1cb4230425199c691cc322a024c99a611ca8226a241f9a491b38222e24ae98051b63224f244d995b1a5e22432488988a1b40220f241f9adc1d8024ed25419d3e1fc1255b27b29ede203d26092880a02b21352782288fa020228527a62894a1a1219e27d228f7a0a1215f279a28a6a095213a277d2888a08021d526332863a0d821fe267528bea0e5205d262628cf9f40207425b1264d9eca2003266927f79e7c205c25b826659e1820c02404267e9d9a1f6d24c625fd9c361f3c249325889cd41e24248125199c711eca230a258c9b181e35238524cc9a9f1d862236241c9a321dfa219f23a699951c5921dc22da983d1c0b21a3225e98091ce92082220b98d21bc8204a229e97f81b9c201222c397ee1b7120df21f397271c6720bb212a98321c3f2081213598971bdd1f1d2165977d1a4d1fc120f495dc19fa1ea12060956119961e9a20c9943a19df1df41f0f94e8196e1df61ec19400001a1d941e00805b233c29712a49a4b424bd2a242ce0a51525052b5b2c7ea64e253b2b9a2cc7a666255e2b9d2c20a77225672ba12c30a78a25922bac2c50a79525952bbe2c5ea77125742bbd2c07a75c25682b9d2cd9a65f25342b702cc9a61325f82a4b2c45a6b5248d2a082cd1a52324e129492b2ba5b2238428b729dda4062116276428c8a1c81fee25642718a0281e92250227379e571d5625ee262a9dce1d30259e26b29ddb1d1a25b1267f9d7b1f64250627579f6420ee2558276fa0f8207126312816a1c121a727dd287ca1cb235227e428faa376229627252957a2be233627c5287da35a22da264f289ba144222727e32887a11a246827c2281fa32d22e5268a2830a14721ac25192749a09520d9252327929f4f2035259426829ec01fdf2437264e9d3b1f6f2498258b9cf51e21246b25469cbb1e16243f250a9c471e8a23c324889b251e07237124609bda1dd0225a24db9a841d8d2232244f9a351d16220d24cf99cc1c912169233799871c1a21d022cb98781ce8209d229b98971bad2095229c97aa1b6420fc21af97911b3c208e215f97d01b362077219c972d1c3620562111981c1c1c203e211e98ef1bf71f2221f497851bc01ff5208a97a51a4f1fd1207996ec1a7a1e2c20c495aa19681eb12084930000751d391f00802d23f728162a3ba46324952a0e2c7ba5f524ae2a272c43a631250f2b5d2c8fa62425122b682ca4a60b25182b6b2c4da64b251c2b822ce9a6fd243e2b972c72a63325242b792ca5a68325fa2a592cf7a60725c22a3d2c48a6b9255b2ae62b79a7a624202ab02bada54c2479290d2b30a5ed232429552abaa42b23bb28d7292da436225928942952a3f52116283429c5a23021bd270129ada14f216d27c328e2a1fd207d27c62851a179217727b828c2a15e217c27c9286ba18e218927c8285fa1d6218027be2890a1d7218027be287ca1c4215c27b72855a17f210d279b28eda04d21e2266e2861a0a021dd265428cea02521ab263d2852a02a2185261f2869a0ff205c26112820a0652093255927429f3f203925a826899e4d20f8246f26419e1b20a3241426829d162048248725989d521fc023fc24b49cd31e7d23d8244a9c0e1e2223a324709bda1dd7227424db9a721d8c224524139a681d13220d24e0993b1d6e217a233e99661d372162239099d51ce22025239298be1ca22066229f98a31c8320e821a6988a1c5620ca214b98621c24206a212598b41b781fe620da964e1b3f1fbe207f96381bea1e942037964b1b411fa020e696d71aca1e732047967b1ae41da21f6695241a261e3c20f1940000191d091f0080ab22c928df294ca30d24f429542be4a46324192a872b5ba58324542add2b82a58124542aec2ba1a565245e2aed2b5ea5c3246a2a032cf3a57a246e2ae92b98a58a24422ad02b8ba5a4243a2aa42b9aa55224ee296b2b27a53324b0291a2b02a52b247529d22aeaa403245729b62aaca4f822fe28d62ad2a3d222ef287d2ad9a36923ab28082a36a4dd22a8281a2ab4a338228c28462ae4a241229328f329d8a24c225d28ad29cda2512249285e298ea2822223281e29a9a2ea2129286029e3a13a211f2873290ea1d621de27f1287ba1a0219127b32834a130211c277728a7a02c21ce262b2845a00e2194262d283fa0c32079261028999f4d215b260e284ea0ac203126cf27309f81205e25b826ee9ee01fd3246026d69d2120962430268a9df21f7724bb251b9d641f15243225a59c421e8723d124829beb1d122390249a9ac51dbe2268246f9aa61d7a224c244d9a851d0a220c24289aa21d6f214d239a9a231d43212323bb99a41c1b210923c898331cd3208d223698ac1b7720f12142974d1b3b207721e8965b1b07203921f5964d1ba21fe620b3969b1b521fb320fb962c1b0c1f8e206196981ad11e7d20dd95ed198f1e64204595021a8e1e7d2058952519e91d8c21d492151a251e1520b99400006417381a00801e213e278328f3a0b823ab29ef2a71a4c4239829f12aa2a4ba2395290a2b9ca40e24c729392bd6a41824dd29392bc5a43f24de29412b3fa54024f5293b2b4fa59b23b429552bb3a4e4224e293f2b29a43c247929d42a0da5c7234429af2aa4a4c52304298d2a78a4e82202297a2a8ea3ce23c9283d2a53a4fc22df28fb298ba302249328912963a41023832891296ea3bf216328ca290ba2522238285c294aa2fd2230280d295aa3a321fc272529b1a1ea21a327d928f8a1ec217227ca28a5a1a5215e27b9284da1ba21362773280ea18921e3264628e2a001215f26062846a0b3202726a527e59feb20db254627fc9f9d20e12551275c9f78209f250b27019f4e2026258826a09ebb1f8c24cf25bb9dde1e30247425b49c561f38248925b69c201f41249825609c0c1f10249225549c851f39239d249e9ccc1faa224424e69c5d1fb5224b246b9c731e84222d24319b9b1d1922cb23189adf1c7121f4220599ab1c4121bb22ae98ae1c2c21b922b198a31c02219a22a6987f1cc9207622e3984e1c95205e2270982c1c612033221098d01b1f20f22164973d1bc71f8a217096c61a531f1e21a495491afe1ed1206a95431ae21e89206495c719991e4c20d0949419161eb51f0494ae19fd1d741fe59200008b1a2a1c00806f1fbd252d27159f77228328ac2941a3692313294a2a5ea41e233d298e2a25a4fd222229722a1ea4f1222429712a0ba4bc22f728302af0a347230129412a57a44223fd283a2a47a4ff22f9283e2adaa3d222de28652aa8a38c23fb28382a21a40524bd28102a74a407248f2899292ea4f222372852294ea34a23f427b72827a3292278279d284ea22c22722780280ea295211827652866a13c21d2263b28eaa08521e6265c2843a1492104272e28f6a09c21d12636281ca1aa207d2610281ea08e20eb258327c89f6a207125f3266a9f1a203525ac26c69e3220fe247926d09e4220ca243626cb9e3b20f1247226c09ee81fcc244826159ebf1f0e2413256a9daa1fb523b124249d4d1f1f241a25009df31ed4230325909cc41e8623f724289ccd1e6f23d624f89bb31e3223d6241d9c3d1edd228124229b641ec7226524f29a1f1e9f223824a79ad81d4a22fa23309a6e1dd3217a23c0990e1d68210323ed98971c1c21b42257986e1ce4207b221198371cae204022bc97e11b77200a2202979f1b4220cf21c7964e1b182098214a96571b002071215296711bef1f4c2169963d1bb01f21213c96b91a4a1f0b219995531a031fe6204595f719ba1ec020cd943b1a9a1e7e203f96511a7b1e2720ba940000a9198e1b00804b1fa7251827d99e02226128972993a268230a29512a28a437233629a42a0ca433232529b62a24a4d722f9287e2adfa37722da28262a41a3ec22e828202af7a3a322ad28fa2973a36e22ae28f32937a3b322b828ed296da35f226b28a129b3a2e92117284f290da2e121f2272329efa1f3217327d72817a23c222a27a92878a25222bf26732801a3c022972654284aa317237b26482807a4952242263728bda2ed21f725ec27a6a16c215925fb26f0a0f820212565263ea02021222560264ea0d020e8241326689faa20f2243526719f9720f8242b26319f6d20f0242a262f9f7e20f9244526ea9e6f20dd242f26929e5b20c4242226559ef01f6424d025a99dda1e06245625989cd81ea9230d25979c041e0a239124639b3b1ebd224b247a9bec1d8b2206249b9ac51d5222e6236f9a9a1d3922e623179a781d0c22de23a3994f1dd721b7235299101da8215f23ee98ee1c64210623cd98b61c2c21ab2275985b1cd8203e221f980a1c8220d9216a97d51b4720902130979b1b2e206321fb966f1b19204b219d96151be41f23214d96d61a9e1ff6204696d61a6f1fd0201496b81a2e1fae20fa957a1adf1e8620c395591abd1e7320a595111a7e1e24206595b519251e9a1f4594241ac21d4e1f4a950000991a3f1c0080d82089279428c1a0e2215528592930a2e4214a28512932a21d227d28a1296ea28922a928d8290fa3cf22d128fa2942a39722bc28112a06a37122b428eb29c6a2a0229128b129e0a2822285289c2992a2832250284229aaa208221228f22801a2b4219027ab2884a1822148277d282ca17d212627632813a16f21c5262d28dfa00c215f26da2762a0c620ae251f2725a0ac204b255426b89fb4206125c6265f9f7f20782523270c9f13200e254d27459e662011256a26a59e8520db241126d49ef81fb724fd25e89d1c208d24aa25179e881f5d247c25439d3e1f0d241825109d381fb123c724f19cf01ebb23de24c09c4d1f9223ae24009d051f13239824b59c991ef522cb24559c791e0123a924289ca11e02238d24429cb61ee42284241f9c451eb6226924fe9a1d1e8c224f24a59ae11d53223b243a9ab91d17223324e699951ddc211524c1999a1da621d823179a9a1d65218b23179a1e1d37215723d798e31c1121d522c398881cd52043224998d41b6f20e9212f971c1b14208e218696031bb61f50216f96e81a8b1f29215696ae1a4b1f0921f195471afe1ec6206895ec198e1e6f201a959919451e2620d294ad19381e0e20e394c919061edc1ffb94181a291ee41f63941f1afe1db11f68940000ca1a231c0080a0204e276f28e79f86210728f72857a19b2138284a296ca120228d28b52919a21c228a28ca2915a208227628932901a2ea215d286829cea1cd2146284229b1a13c223d28132907a21b222c281429bba109220e28132969a1e021132808291aa1cd218e279628dfa01c21fe264b2826a0c3209826f827769f65203a268a27c39e9320bc25d626c89e6120812580263e9ee81f7625bc26869db21f1c254426459d3020ab2476259e9dcc1e9924a725769cd11e51243a257a9cc51e32240325599cb61f0a24b924f49c481f38242425939c091f4d2482256b9c2e1f41245f25699c761f20241725959c121fb423d024589c8f1e3323a824df9b901e01237424e09b5f1ea8222c24a59b501e7d221c24939b201e702215242d9b5c1e64223224749b5c1e48222824469b961e30222624889bf61e2f222224469cab1eee21ed23409b061ea1215823619aad1d5321de22b0992e1d1721a822e698e51cce207c22a1988a1c9f2042224b98491c6f200c220e98d21b2520d02166977a1be21f9f21dc962a1b911f74215f960d1b801f452112961e1b631f1b2121963f1b3e1fe8203d96cb1ae91eae20da951a1a9b1e7a204195231a711e58204995b319281e1520bf94f4189a1d781fb1935d19ee1c391ed192bf0d0c1e2f20b484b82246275e288aa36625cd29ea2abfa63526d829582beea7ae25e329802b56a78e25022a6f2b69a70a26602a992b12a80026252a4e2b37a8a625002a252befa76325f629342b6aa7da24cf29e22a56a68e24b029d52a03a641256829992ab6a64c242129472a30a53f224a28e82874a335243629a829b9a41826152c102da8a3fc23a5290d2b2f9925204c2531263690e11a9c20fe2205922d213c280b2aa09d202ce432563479a582299030c73100a3f7272f2a8a2921a6e5261a28c42703a5a324a5272228a9a3c9243a29ab2956a1ab23a42a2f2cbd9d9422f729af2be59f1d2455282429aea285214b26fe2717a0441ea924f725789c701c47233625349a451d2023e0245d9b2c1df3228524f09a091d3e23ae240b9a281d0e238024559a8b1c5722172432996a1c262204244c99791c0222b0233e99d51ce9219c23a999c21ca0216d2371998e1c5f2157233599261c0321f0228298b51bb02064221598401b5b20c621ad97c41a20207121c8968f1a0c2041216496d81aff1f16217996721ab01fe020bc95171a6a1fa8206b95bb19301f99209d947d190d1f89204394b519e51e752045949919991e4920bf935e19521e18201f93c019b31e0720f5931119c91d8f1e9593c319c31e2c20a394e602381b311dcc80aa22fc27f328aba3e925462a632bf8a79d26f92a1f2ce1a83a26b12aea2b76a8cc25e62a332c5ca8ba26f12a192cd2a89526112b442c2ea922260d2b312c86a82f263e2b5f2c90a89626192b4d2cc4a8fb256f2abd2b28a87d251d2a662b7aa70a25b729e52adda6072406291c2afaa4a921fe27e128a2a15920b3261e283c9c161ffe254b273496141e2a26b5274a946c1ed9265928fd98f421c0293e2b509f9324cc2c192ef9a08b240e2c062d0e9fdf22d728e6291c9eb82496282c29ffa2a422b526ec2794a1a4209a260e29f69d402046260328389da120ce263d28dd9e9820d1263c28549f3b204326d7273a9f2f204c256a26079f041f4725da261a9d0e1f8b247c253b9d1a1e0124ff24b29cab1d8f23eb24ec9b801dc523eb24889ba21d05237524149b611d94222724109bd91dc5223024d89bb31d7f221924299bfb1c3d22e023fa99b01cd82154235c99371c4b21e2229598641bf520952268973c1be520562240977e1baf200122b997751b8420c1217997181b54208b21b696c51a332061213696731a1d205a218e95dd1a2e205821e995481b3b203621dc95e51a0720fc20c594cf1ada1ff02022945d1a7c1fbc200b94dd19b11e3b20c893b017841c741d67928f18bf1dec1e0e94e4036d1d521d04810c213a267327bda0b525512a672b9da70727c42b982c2fa90927c62ba52c57a97926ae2baa2ce9a8bf272c2cef2cc5a94727222c0d2dbaa9da26ed2bb62c0ea9e226c42b9b2c14a9b326d02bc82cd9a855266f2b852c89a8d925752ad72b11a8862447295c2a09a67220ee254327eda07b1d08236024109cdb1c61239e240b98f41c3a2434254b96321ddf241126e596671e9725ed26b299511fae27cc28149cae208828a4294b9c6f2171287829729d0a2159278228569df721fb2613286ca0f5202a26b2274ea0c41f27258727329e931fa824ea25419e911faa24af25e49e842070257c260ca06c1fcf256d27219eaf1f49257826ce9df91e7325de26449d301f0e25b226a29da51fc824fd25fd9da41fc9240926e19d361e7324c0256e9c521ee923e724269c7a1d04237024099b0a1d4e220324e899e51cf22149237599b11cc22129231a998c1c7f210b2354993d1c28217a229b98391cfb2005227998261cb120b9214698f61b7020a7211a982e1c7020b0213198aa1c8b208521f098701d3a203721389a6b1c0120e7202e98851a661fb2209d95191a491faa206494251a701fb82076936f1abf1ffe2073936f1ad11f1a21d093bb19061f8f209b93ec18ea1d641f16936919531ec81f3394ca238f25872734a394195e1d4717a594fd220e263e2767a50926932ba12cb5a8f526fe2bb42c2ea97227362c052da6a9a827432c0c2db4a91627f12be52c54a94125b82a1a2ca3a619257c278d27d4a12325382ab92bb5a643267b2b872c5ba8dd24e329202bc3a64521eb250f2782a2b41d5222e023789ce51be5219a23ea97641c162287239097981b3122c1231c966d1c0e236124a096211d34243f25f797fb1d03252b26d098891ead25f726a199b61fc525ea26dc9a2420ef254327229b6420a225d326459d1a20fc2426261f9f252082247825d99ea5208724b8257ea02b21b524222612a1a5202225672608a0472076250c278c9f5920d0253b272e9f1020c9257627989ec41f1d257826169ec61f9024f025a49eb61ee4244c262a9d441fcd243026149d9d1fe8240226e49ca11db723d7243b9b6f1d1e239224d49a671de7226d247c9a011d59222824dd99f91c3a2202248c99ae1cd821972338998d1c8f212e231399491c25218d22c798cc1bce20322221984d1b9220f821f097261b68209521f7969d1a18202c2112968e1ad61ffc20a595851a871fbe209d954f1a181f922041950a1a0c1fa9205593ef19291fb32089928f1aba1fe5205a948d1a02203121b7947419041f4d200195111c161f4620c49800000000171000800000000000000080731f7b22ab232ea1e225ea2a372c6ca89d27302cfa2c90a9c527462c332df3a9cf27872c672dc3a978274b2c342d82a99a25052b5e2c00a7d924a327a0275da2e825e22a352c8ca74926c32b9b2c53a85522b12777280ca4941ec323c4244a9f791ba61d231f8b9bcd190f1f6c20f696c61a712076217395081ac020152283946c19f5204c228093e0134320e221738f9a18bb1c1b1e2098231b0a1d7f1db59b9d1b99213123c898c11d2024f224f598571e6f245725c99b08203b241425009f4d1e7e24a8254b9d2c204c243c25b79f861e7924d625c29dfc1fb724e2259c9f1920b524d625b29f5a2049256626119f41202725aa26829f521f8524ce26269e601fa2240f264d9e351fdf241126099d451fd224fc25fa9ce61e20243825879c351e8023d424139c4e1ed823f924249c3a1ea023f124169cc41d4523b924159b6d1de8226824839a241d2722b923069ae01c6021de227099c71c4221ae220f999c1c1c216222c098f01bb7201622f597a41ba020cd217197e31a60207b215296b91a43206221fb95a41a23203321b895761a0120fe203395571aca1fd7206394351a881fa5203093a219181f7e208592a1198b1e422033921f1a7a1f9f20c1943a19791fcd20899500000000af0f000000000000000000801420ab222724c9a10c267b2ba62cada86a250a2b412c75a61f25d9276e28e1a38626982b712cf7a75427252c042d75a9a825162b552c26a73324f1263327cda0bb25642ae52ba5a7f124022a102bf1a6291f9a241625d69fa31a6b1f0121239a8319421c481dcf9ac518e41dbe1fdc95e916cd1e842096903819e21e342038934616a41e812057902615001dc91e259015142619b41ab98fa10ca713b617d684330dc9122615ca8247178e19311acf8b961b64217e22f6965b1d86237224469ced1d57238a24cf9cd51e95230c25209ea91f6224c125fa9ec51e8b248f268c9eb11f7024cd258c9f6d1f06251e26229e762025257326bf9f3020b9254727cc9e6b1fcb24bb26b59df21f9624e725e49d7d202b254a26669ea421a824da256ba016203f245a25d39d571f39246425ec9c111fcc23e524579c021edc225d240a9b431d67220f24509a141d1422c723aa99c81cd4216f233399851c5f21c022ea98131cf72059226e986f1bb82028220a98721ba820e2210c986e1b7120a021de97781b5c20af217c97181c58206a211a98f61b1b2003214e975c1bcc1fe5205696ff1a901fbb206f958f1a721f9a201895061aeb1e5320d994cc180f1e861fa3925419541eb41ff99300000000061100000000000000000080761fc4219e223da15e24d729492b32a607259e2ae22beda50f2511288b281ba4b226752b622c17a89b276f2c582d8ea9dc25592b8a2c7ca7952296252e26879fb925642acc2b8ea7242370282829aaa4cc1b5921cc211a9b5818121d291f7096ca175c1aae1b51982d15fe1ba21d5691f911211cca1d91897618f41b1c1c4e8fc50e711c631eb186800f4c1b181dd3898611ef16be18298eef10e512ea146f893a0a8d117f14ac81ba15bf18ff18d285aa1a65205b216c941d1dc0220a24269bbb1cb623d524039b591f76239324009f4d1f3c246d252a9f981fbe240c26fd9f1520d8243526e59f591fec241226a09f9818ce20b622329a631c2020ab214c9dad1e6524b825e49ded1f3825aa26c39d59205a259126d59d1120fa243826399d941fa124db25fa9c481f73249a25c89c1b1f39245525779cc31ef723fc243f9c3e1e8223c6247e9b7e1d72223724709a6b1d3622ee23329a771d0e228623189ad31c8221f2221c99071cf3205e224498921bcf202922cd979c1bb720fb21a197591b7a20af212897c91a28204c216b96791aef1f2421c295421a711fe1206495341a3b1fa6202b95d619111f9320dc94291ad01ede209c941319e51d542084958818d81d0f204592000000002211000000000000000000001c1f8221502252990a258b2a082c5ea66525ea2a302c48a65324ee26e2272aa25e269a2b812cc7a7a427822c6c2da3a9fd25892bb22ca7a7a6210e25ae25819de925dc2a122ce3a72c237a283029bca42c1ac41fc41f72999316f31ae81c98941f1572185219f795d8128f1aa31cdc8ec110a51a891c29884b16cd19261acc8cd1132e1a511cb98b0000d719e11c0080df1087158d17658e4010ac1284143388560dff0d141143826814d615ed1578863a18ac1efc1fd991161cc0209c215d99131d75239524ce9a661e69249e25609d642030245a259ea0ec1e8824e025fd9e0a1f75249625e89ec81e33242825a79e1914f71ace1c7795fc19f91c281f7a9b4f1f10259626a89e6e2005253927f19e3c20112586260a9e0f203025af26379d071f9a24ec25849c321ee023fb24f69bfe1d15236e245c9b291ed3224424bd9bc61d89223b24ee9ac61d46220524179b7d1d1722ca236e9a801d0522d3239a9a291dd22197230c9af21c7921f122cb994a1ce1205b228b98891b9020e821c497ab1b6f209021b097411b232049211197611b12203021fb96711a771fcd20bb95061aeb1e6a20d9946119ca1e59207b94611a4c1fa720c694141b341faa2018964f193f1ed11f929400000000851100800000000000000080381ef520e1215b993a26ca2bbf2c76a8ca25522b6e2ce8a6b523fa25da262ba13b267d2b792c85a78227962c862d6fa9cf25bc2bd22c57a71c21d2245825419c7c257e2ac92b65a7df225128ff2889a43119042025203798d116411cd61de8902415b0187a1984890314ba1a951c928af311d31a841c35892717b7190b1aa58c7a10da195c1c6d885c0762190f1c118354115d1509174c8f230fe21011133f86a009190f3011e0800b153216fc164486ff164b1e1320a490261b72201621e598b51bf72173236399131e5422c4231a9d3c1d19237724239d941d8d2231248d9d7d1e07240d252f9eef1d6d24a125f59bac12a81bc11ce08e53185d1ccc1dac98211fc2240826319ead20ad250f27109f08206425bb26179e572027255526309e0c20d224ef25a89ddd1e2a245225509c541ee7230b25989b801ec523d624fc9b3c1e2d23b0247b9b911d7a224c245e9a6c1d0b22fb235a9af61cfe2186238899db1cc02158236a99791c72211223dd98691c5521cc22ab98f91bf92077221c987e1ba720092283971a1b52207f211e97b91a11202c218c96971ad71f05213c96181a531fc820c495181a181f8c20f09541194e1e1320f894b317c61c151ed992db16d71c081e1992470c000004125d8000000000000000802b1eda20fd217c995325372b862c67a71d25682ac82bf5a57923df25c92639a11c26952b832c4aa77f27a22c9d2d6ca9c525e22be12c35a71f21cd244c25699c5d25752abc2b14a721223e28e92800a4591bb5217a227c9a73178b1c641e6a92061562184519868ac5123219451bed8998117319ed1a36899b16bb19ed194a8c8f10d91aea1c3f885c12f219e61b4c8d2e129714ab158a91020e061109123e845f0d62131e142780cc15251706183487ec15a71e67209990f419bf1f9a2029982b1c0e2124226a9a3e1def226024a09cd41e10245225e49e941e90235026749e5a1f5324be25519f171fcc24fb255b9d6414321c8f1d178cc0184d1b201df6905a1f4c24d425739d22201325c8277a9e36205725aa26209e9a1f70249f25349d141f49245e25d99ceb1e48246725a49c361f4e246425bc9c121f1224fc24719ce91eb923dd243e9cfd1d1f23c424d99a851d99224424509a751d37220a24659aff1c0c22d623b799cd1cd22182235b99431c6a212d236498c01be8207622c597951bbb20f9216397a31b77208f217097fd1a30204d21cf96eb1af91f4721ef96021ba21f4b21d4969119c51fd521cb942d1b3f20d621ca96801a6120b3216a9545195d1d911e649400000000d90f00800000000000000080ea1e73219922f499b5259d2bb72cdba73525182b5b2ceba54424d026e327b9a17226d52bb02c82a7d526712ccc2de5a863252f2b952c94a63f21f8245a25d09c1625472aa92bc9a6db2364296e2a2fa5a71c89232a24919c92188e1d841f199570148f18bc19c3890c140a1afd1b4289fe0f371a121ca4851b1687198019ee8bd213d21ac51c498bbf0f7b1b491d2489f511f4172e18218d7c10721303155887330ee012a014a0825d14321695177383ba164e1e18206a91081b92207121ea982b1c9c2224244c9a961d9723d024ee9cca1ec9231825919e6b1f3825b7262c9f631fb1240a26259f2d1e5a246c25519c9b12991b211d878a7a19151d841eb991f11ed22448268f9c2c20d3244b26f39d3720292575263f9eae1fcb24e825429dea1e4b244f25a39ccb1e17241e255d9cf91e06241025949c311e8a2301256e9b041e3223ee24e19a7e1dd122a624489a661d63222b24de99d51cb2214b23cc992b1cf020bf226a98201ce62098227c980c1cbf2047226698171c9020212290988d1c922007221399581d6120d221909a571c25205021b898b41a841ff320e896d31aa41ffa20d796de1a901fc820b096a71b891f8e200697011a311f9120a9943f1a0e1f4120ac94e30c000042106a800000000000000080f41ea421bf22f89afc24d82a462c94a6a6248e2af32b05a52824ff26032829a25225cf2a1c2c32a69626262c122d65a85025372b812c16a7112313268e26499ef524502ab22b67a65624082a462bd9a5cf1eec24b225d59f2b19a11e6020e995a215b718ec19918d3c12d8186c1b388b0c12e418281afa897c15c118f3186b8d5a0e8019c81b9388d711be18151a328dd9109e145415b98cd90c980f0314ca84ab0c5c113712fa81ef15cc178e18b2890618961fea209d93841b5e2152229299201c1c22a423b29a701dcd226524e09c721d4224b225449d0f2010252c2619a02e20de2573271aa04f1eb4240126699c7311041c661d008a50194b1c4b1e0d935b1e062425269f9c33200b257826fd9d562034255c26d19d1920f4243026449d561fb924fe25d19c6f1f76249f25c69c271f0a2469257e9cae1eba23a025029c941e922350250a9cdf1d1c232f25e19a251ecc22b024079bea1d4c221924ee9a8a1df621b423569af01c92213523a599771c5421e222ba982b1c0f2181224c987b1b912013228097c51a2520c421c996221b3020a3212697cc1aeb1f4f210197651abe1f35210c96261a7c1fef20d1954a1aac1f0221c5953a19f51e58203d957019001e671fd49372000000bb0802800000000000000080911f2c2274235f9bc724a62a192c3da65524282a372bbda40a24cc26bb27fda1b324fd292c2b46a54125f62a5e2c02a73d24312ace2bf0a41324fc267127b2a1b424fd29602bcfa5a324812adf2b30a61321352760287ca2e61ce0223d24999c9f18851b6a1c6592db144d1cef1d8a8f2f13251c3b1d948d6f17921a9d1a83908c12c71b291db78c2d0ec91b4e1dab89bd1290174918228f4c110c145015228ae9095b139815eb8143132b18a819f289440f101c381ea489e719961d001f9594811a3721c2225d98851c64222524729add1bf121b123d499901c4c21be225999e11ee3231c25009de71de5232c254b9c351cb52156231998521dc121282395982f1f7224ac259d9c4a204e25ab26e09db4207b25cc26b59e4f201b257926c79deb1fa52404266c9dac1f64249825419d062054247525659d3c2009243225cc9d0b1f6623c0246d9cc51dd2225824c39a2b1d2122fb239e99b31c96217523d898921c80212723d7983e1c1a21dc227e98531cf3206422b398231cc120eb214398831b5a206b2188977e1b1b201b218397061bb81f0021d796fe1a371faa20d0964c1a751e1320f595c919091ec61fa3953e19ed1d08208494cb18aa1d551fce949118721dc71e939239090000530e138000000000000000801b1fb921ec22ec9a66244b2ad02b8fa526241a2a442b5da41024f926cd2723a28424d129052b01a5b924902a252c2ba6c823c029412b7aa46c242b278b276ea26d24ba29382b28a54a24022a632bb9a5f8219b28b42906a49d1ec42403263c9f381bfb1d461e22933e180b1f9e209d9425163c1ef51f7791171ae21c071d6593c513a81c961e598f2f11b91b0d1d5e8e4213f818251a2d913f13dc144417c08ab00318126b167180ae12b515d618d989910f481a451d4d8a941b071e7b1ee295f91bd121a2247599611ea92364255c9dd81b052371255f992f1ec02176236c9b01208c24ad25ba9e36203f25a926d69e531f2025b926a39de71db124e325209ccc1d6922d723f59aa91e4224ae25fe9bf11fc524fa25709d0a20b924e2256b9d411f62249425dd9ce71e25243c256f9cc61ed223ff24419ceb1d5723b324459b581dc022a024439ac71c1c22ad2454994b1de8210424349a171d2e21c322ad99bf1cfe20e522e498a71cf920e4220f99151caf203c225298f01b6920c5215098db1b5e209a210c98611b3f207d213097901b40206f215e97d81af31f1c2179967e1ab61ff220c6951b1a381fa32042959219bb1e6120a4948b19b71e52203e95b01bd61fd6207d9794030000690f13000000000000000080f41ddd21fa222099dd21b828f12940a2fd223c29302a40a35024c427482884a29324cd29ef2af1a49f24892a1e2cd7a53923a829252b0ea41224c2266227eba149232329a92a17a46224aa29032b7aa556236b29c92abda4ba212a28152928a30120122694279ba0cb1d70246925189eb81cb4221424ed9b721bab2122238599791980209321f597b615341e152027947914401af91b02932d13831553187f8bfe0c9c105914d581bb175a19ad19058dc6192e21e422ee968f1d9823c724249d3a1f7224bd25669f4f1eeb24c526d59dbc1d7024c0250f9d191e7e21cc22a19a7b2066259626469fa720f7254c278e9f8c20cb253227209faa1ff0246e26249d361d19213822a298731fde24df25ae9c53204c255a264a9e6620db24ff25469ec21f8e24c4256c9d0d1f59248f25d49c691e1c2445251e9ce71d8623e224409b9b1de7229724919a491d53224024589a2a1dd721fe23e899731df8210b24639a331daa216b23f299e31c5521e7227399961ce5205f22fc98b41b4e20d321f097061b152067210a97e21ae61f3421b496f61ab41ff62096961e1a1b1f9220c995c219f91e81204995cf19ed1e622055954719601e32208b947e19201fdd209394fb19fb1e6d207a9400000000470f00005b18d01cf51ba88d7421ab27f2280ba219247b29002b1fa55922d828f72996a27a241b288228e3a217249029bc2a3ea40524e929872b06a53f2229298c2ad5a2602452270e285da288235029112b11a44224dc295f2b33a5c7236229c92af8a489229b28b52915a4ec203c277b2826a2b11fc625312743a0211d9024bb25529d491d7e22ea23e39c781a9a21012386995b166020cf2140958715c61c521eb994b2155618a6193d8ffb165c18b918b08f681830204c218995561cd4223f24689b9f1ef9233025679ea61ec9241c26569eac1f1725a5266b9f681f6a252627449fcb2019259026c5a0cc206925f42692a08920a02555277e9f712003262928969f341f1325b026bb9ca81ab61ea6201c96691f8e24bc25729c8f208725c926a19e2520e12429268f9d391f52249c25be9c131f322456258b9cca1edd231825449cde1d0f23aa240a9b861d42221f24519a211d0522aa23dd991f1d63210323db996a1cfc205822cc983e1cc62024227e98111c9b201c221398e91b7c20d621b597061c6b209c21d797d11b442089219d97731b2c206d214297391bc91f05210997791a141f98207d96191ae51e6320f195361ac31e57203a96d0196a1e56207f953818351dcf1e07931b1b7020992185967310681caf1d378d7e210628ec283ea24b24de29122b4ea59d24422a912be5a5ba24532aca2bf9a5b8247a2a182c2aa6be24572a062c42a6c024562a0b2c56a6b3244a2a2a2c23a6b924562afa2b1aa67d243b2ad42bbca53824c4292c2b55a5ff2331297d2affa40f23ae28e52982a4a421d327eb28f8a2a820e02665286ca11a1f1826b02716a03a1f27255926b49f1e1d6b248425629db819d8227224b1995819971fbf207d98e015041b6a1c6590091af71b931c58946f1afe21fc233998451dd2235b25df9c201f1e25f226319f541f0a250828809f152019257b26dc9e0e2096253927289f3b20c4256e27969fa9202d26b72771a0bd21b426522825a13024e0259f27bfa33624a124ca2503a4a32077250c27019f33200f258e26fd9d831fa724d1255b9d161f1f241d25c09ced1d6323de24729b4d1ea423d424eb9be21d0a2377240f9bed1db3223624479bef1da6222c241f9b6b1d49220224329ad31c9b21bc238499d31b162188232498f31be120b3223598e61b902024222e989a1b582009229f978e1b4920bf212597bd1b5420a82152976b1b372086210497d61b392057216997d31b0220fa209f97b91bdd1fe2208697391bc61f012172970c1bf11f2521dd964419d01d012047955e1bfb1e7623b895f8118e1cd01d808ffc203a27672886a16d234b294c2a89a438247329a52a45a54624e329602b57a527243a2af92b4ea50725802ae42b5aa67724442a042c46a6e624062a302b66a63b24c2292f2b77a58024a429042b9fa501245f29d52a0fa55625ec28fa290ba7e723ae28062ae2a4a52339289529d4a418249627b9281da50d21b826b828f4a1a8203626202818a1521fdb25b727cd9fd61e6f250d27189fce1e0c257826419f401fd9242926ba9fc81ec3243726539fd41ede247c26169fb41f18258c26e29f701f4325f826d39f1f206c25e826f89f0a20ab256227d09f2920a8254b27ee9fbe20bc250b2785a0b320fa259f278ba03620f8259527319fa5206e25dc26ce9f6a20ba253428eb9e65204e251d27649e142019256d26b39d2b2009256c262e9e3120b924f925819dde1f40247225f19cb61e6b23c224dd9b6a1e2d238724849b1f1ec8225424589b981d9c225f24df9a441d78225f24529a671de9212824df99a71d64214523259acf1d332121234c9b171de320d522d299d71caf20362243996b1c5e20b6218e98bd1c39205f2104997a1d9d1ffd20929a681c421fc0208b98401bf71e73204497cc1be11e3b2060979d1c761e2920519a821b711e312050974f19841d281f0595d919011f7420dd95e8137d1cd21d3090dd20e126322841a1e8220129fe2906a492230c291f2a9fa478232129652a82a4cd223229ba2a40a42a2442296e2a25a5dd235029be2a4da5cc236929a22afba4b2233d298f2adda406245929dc2aeaa4c3221229192b21a48c23e9283e2a80a4f8229e28eb291ca4cc225f2895290ea48a2217282f299ea306237d27b02870a42d21eb26702807a2da207126202895a18d201726bd272ca14220dc255727a9a05620c225542780a0821fd425a8270ea02f20e825832757a05d20ef259d2758a0b820e2258a2790a05220d7257927fd9f9720bc254e273fa01820b6258e27929f4a20b8253d2707a01c206125f826d59f5a20ce2405266f9ff61fee241427b09ec31f9b253327f99d3c1fa8241926289de31f5e248c25119d0b209024c225c49d6b1f32247425df9ca11ea323d324429ce01deb225b240d9b361d4d221924d099061d0922ef237699241df821c823bc997c1dc0217e23f699611d75210523009a151d2f21ea228699161cd320b2228f98d01b7820eb213f98a61b422083217397631b05202d2132977f1bdb1ffe204d97e41ba31fc420b0976c1c261fa220cf98b01bf71e7920b597f41ad31e6f20f8964a1a891e5f202096d819a51e68200696331a461fe020b0955d1a911e42201f95e9187a1422178c855c1d7e2026206a97f4209b27b628eea052230a291f2a1ca48523f928312a61a42f230129522a49a4b9234929832aa9a46f2317296c2ac0a45e22d428022ac7a32620f4271f293fa0a121b5241c25ea9e59216a27c028dfa0382250287f2928a34f23472836290da456233f28652938a4cd250b278d2893a7b7226727a828d2a3f0222b26e52723a4fe20be25512776a1731ec4243e260e9e122020222a23589d601fe0247726829ea11e6a251828699e86208e25272781a05a2078250c2735a033205225e32600a0562020256626c69fe91f3c258e26519f0320f3243526319feb1fe8242526c39e4520d3241026ef9e0820f5243a268b9e711f6b246825ba9d821f65247c25919d471e0c2471257a9c921e5523bc24809c1a1f4a245425c39c631f30245025a49cc91e982324252b9c7d1e85225d249a9b0d1f4e221024549c2d204c22dc23b89d9e1e4122ef23f19b8c1dd5218123589afc1c7721fe224799b21c4521d722d798cf1c3d21b822f598a61cf9207e22ca98771cbd2054229a987d1c96200c22a0984f1c5a20e8213298031c2420bf21d197291bd81f5c21c6966c1a3a1f052141963d1a081fa9204196f419ab1e5120cd95fa19811e2420269524199e1d041f929495185a1d611e60937c13c5114014f502df12b51a191c1388bc1cfe20be211697d0208d26dd2773a0e9215b283c2977a250228128912943a3b0229828b029faa31a225c285f2947a33d2118281b291aa2911d6f261c283a9d27205d22ac224799261f5e20f0200e92f81e632142220998901a9822c724b19765204623f523489c341cae23702585997220ee234124159d8a1e74240726209dfd1da42449265e9de31c5424be25cc9b0020d8229f23b09c141f19247125729d8c1fbd244526df9e0520fb249126189f572017258b26c89f892026258e26e09f1b202525b426219f3f20fa244c26419ff01fc62418268e9e242071248c259b9ec11e6c24b025019d6d1cf1227624309949188f1c171d72919d19e81bb81c80924c1d202219249c99461f2a242725ac9c521f12240525ce9cbe1e7823ff240c9ce11d0f230525e49a0e1e97222c24c19a251e96221f24ae9ad11d61221624299a7b1d2122d623f599281d982131239b99c51c1a219922ea986c1cd02052224f98031c8b201e229797ca1b6c20ef215e97af1b4720a2210d97571b0f206c21bc96441bf81f3e2142961d1bb11f13212096b91a961f0a21ca95841a641fce209c95631a2a1fac208095371aef1e832087950e1ab11e6d200b95a419a61e6f207f952719591eec1f6b9352115910ea1281812f13401ac41be2898c1cfd20e721d597512002264727bd9f0221b827cb2820a13c217a27b72894a17b20d926532825a0f421e7256e263fa052204926e5270ea0b51eff25e927bb9d1b22de256926279fbd2014276e281da080215527902865a178214827792885a1b92117275f28dba16121d2263c286ea1452184262d283fa134211e26e92708a10d21a4253727aca09420032597260c9fd820732479258a9db82082249125879fd82024243d2535a0eb20c123d724d3a09920172384241fa0032072221a24969c1a2050238e24809d5720292427256f9e24205b247b259b9e1e205f24a125749e192054248225319e8c1f0c242f25619d251eee227624339bb21dd721e0221199401db3216a236999291dfa21cd23319aa51d3b22b123699b021e5422ba23369bde1df521a423e09aa31dee2193239b9a7a1dcc2173231c9a0c1d742178233499f11c6a214d23f498d01c3621c622f698731cdb2078227698fd1b94201722c897891b5620a02121979a1b1b205f21fa967d1b04202f21df96631be81f1321c796011b991ff0203b968f1a431fcb20d595601a241fad20ac954d1af11e7d209b95751acf1e5f209095dc199c1e4d208b95f2199b1e2c20cb9559196e1ef71fe894381a741ebc1fa79487132b1bbb1ca28dc91fd6253227339f85210528e928e2a18521e227c728e2a164218127aa28bfa139217b27c028a4a19f21cd27e728fea1b82113281a2918a2d9213328372926a2852107280929cea130218f27c42862a12b21262782285da11121b42657281da16a201226762855a09020ce25d2277aa0c220a3256b279aa026207825dc27ca9f032181251427a2a06c20bd258c2717a0ba204a25a8263da0aa20ff2464261ea03120f6246726299f6820cd241b26479f1820b224f125889e1a204f247e25029fbd1f12242c252c9e731fd323fb24d69d831ea123e824d49ca01e43239624b99c6a1e7c222224649c631ee1227f24779cd81e98230c25e19cc61ef5228125d49c5b20df229224d39eae1eb0223f24939c841ef92276242f9c061f1f235d24509c521e93222b243a9bcb1d3622f823769a8e1dfe21bb23329a931dec21c0230f9a3d1d67217b23b2993f1d1f21a023f698171d1e2138236499e51ce920e022e8986d1c9f2025227098d81b462088216b97541b12205521ba96e21aac1f232183969a1a8b1f17216e96b81a6e1fed208b96af1a321fcf2052963f1ad01e8920bb95a119551e442002955619211e0c2098948519281ee41fe994f519531ef31f4c95321a881e0e2042975c19f11d6c1feb942210f91a831cc586841fac25f126509e19218a278e2800a16821a2279f284ea19321f927fc2878a1ce2125282929b2a1b72118281829b0a17b210b2810299ca19f21df27e428ada15721b927d52851a1ce204127f528c8a0a221dd265628b0a13721dc264328f8a02a21c5264128d9a0eb208726182857a0c2204426d92710a0cb200a266927eb9fa420d2252127899f8b20a725e0263f9f7b20cb251c27059f12207b25c126269e2820dc24e925479e801fae24e1258f9ddb1f67246125d39d591f7c24a125589de31e69248625029d911f1b242925659da61fcd23d924589d761fb623c9241c9d3f1ff823ee24dc9c8a1ea623dc24639c471ebe223a24369cfb1d51220e24039ca01d3e22f523639b6b1d65223424a89a6b1dcf227524809aa41ee7224d24149cd71e9c222b24029c001f80223024339c771f2f221524889dbf1ece21a923259cd11d7321fe22fb9ad11d0e21a022259b2e1df3206a22a199f21cb22057223c99261c6d2031222898ae1b4b20f5217b97ac1b1120a021e897e41bbf1f54211198cb1b661f3f219797011b581f27216d961c1b6a1f0f21ba961b1bff1ea320b996431bcd1e85201397941a781e412098969719041e3e20c3958519da1dd91fc194f618071d631e8d944018451c2e1d9a92000000001b0c008045182c1c8e1db196201cc1206921839bc817ee211324f797c61d5a217c21c59c561e5b212222259d851e532153221c9dd0187021df235098ce1c0320a11f4f9a401b701ee91ea8988515d81b001a789200006f187e1400800000b90e000000800000000000000080a71489174d15a68da0153e19a11bc88fb50c961b2e1e0f83a611111dc01f3c82090c5219b6197b8100000000000000806c181d1adf1e56996f1d0727eb28409fa70c1c266f28398d281ac820d420219a611c901c731d24988d17ec1f1e21589695199b208f214b98d416d51d361f5690d6144b1d4620828c6b14eb1a051e2d920000e414151c00808e134f176e1af690b414f817ba18a5911d15c2199d19fe91b109211b6c1cd4861a174c1d7f1dea919819aa1f09211596411bb1205a224098de1c4421c4221e9a451c62210d2320999a1c4121c7228699b31b0c21bb2283982a1cca202e221d99051c8c20a921b6983d1b18204f213e98481ad01f1e21d496d41ac11fe0209e970a1bd81fd8200698061bc71fe1200498641a591f8e204f976c19ad1e30200c966b195b1ee31f95956519191e701fcc942619881d211f6a931a18361dd31e8490ac18c51cb81d9e907418ca1d621fe99116181b1d6a1e18947d19f11d0c201f969c0600002a0c5a8116070416e8187382741df11f25207799131db024e325e89c9c1dbd209d2032986d18de1c081cbf8e981fd520d5207899ed1d872524273c9e821d6a2063204f97e619cb1a78192a910017dc15af15568d6b11010f000009870c0fe0080000fc8291090000000006816f0d1b0a0000ff81000000000000008000000000000000800000000000000080430a5e08a10b1700d004000042016581cc15981d2f1fbc97541e81261e28769f1c15e21dfa1f9092140fdc14f2163286161456177f18c509be1bc821ac227d9bea1ab9224b24659a501645194019988ea2178e199e19a2909619632049213f9930185120ac216798461526170f1778880e112a124212c80c2d159717b7156208e212cd1b451d01913a18081bb31b4089481ad21ff5200998451b02216f22e0983a1ce8203d228d997a1c92213f23e199cf1ce52178230b9a4c1d6021aa228d9b271c35217522de98321b9120a9210398131c1020eb206e98551b35203021b698bc1b0f206921dc98da1a3d2099211c98241b22204f211598e21aed1fdc20df97231b7d1f5a20c297021c7f1f5620b298471bd81fd6201797a71ab01fee202a95511ba01fd4207995d51a4c1f89209891d819a61e2b200b94ed19bc1e05201a954218ed1cb91d9d92ad1835127e18218f00004715df1b0080351e9a201821199bc21e1a26962714a00820cf24892578a0431b8b1f491f6f958e20d921e9214d9a361e432619282f9e931e55217321fb97e81b491c0d1a3e90eb143c153913ab81d008000000007a80af0c0000000074813e0c000000005181000000000000008000007803000000805607470d270c28800000000000000080000000000000008000000000000000800000c012e9150080b0043d0c031118811d103510a911f383000059095d120080ea1769181f1acf095319c41da422209a5f193620152259998216ec19ba19108e41176f19bd19c28e8417b11fac200e972318a11ff7201e984116be189d18b68a160e9b126111f60a72152218e017270cc5125f1c381e1d911218c11b4c1c208f6a19371f7d20b897c81c9421e422169bff1c8b222824fc9aa91dc9222824469b0b1d93222d24329a0d1d4822d223109a1e1de5214023029b901c452175223899291c0c216622e098461c19216b227d99d81cf82028225c9a551f8c203f21f49df11c49204f21359a891cd11fd920d4993c1ae91e7520c796101a251e4f1f14968619121e611fc2948919721e052058937e1a191f62206a92511a9a1fe0202c91a41a671fcb209894d914651acd1b878ff319681e551ff5945b1cb21fe0208d94ef197b1dac1dde92ac216d27be2806a42f231029062a49a4421e75201d2009994619fc1a7d1aa88d611438179b1734885f0f621509104a8242135d157519268669110000000095040b0b00009006180100000000000000008402a802000029806e148411081081857f135b110411a8840000de0c270e00800000dc0d2b0c008000006a0a850f00800000a809fe0400800000f80cf30c00800000930ee70f00800000890fb31200808c0461103b124a0098068012b615f5034e155c174118a40fdc113519181c809179138115fa15da88a0113e127b1366853d0fda126f13b38403160018f016fa8f0312511b0d1dcc909e1492181a18d38c8e1170149d1432824f15dc17871698860014a31a351d7a914918721b461c898e6719751fec2018971c1dff21cd23249b5c1de3227a24579be51d0b235e24689be21cca226a24239a701dbe213a23d59a8a1ca72113237299be1c5b218c226c99df1c3c216c226f99b21b00219522ba98231cd020ff216e99831cb120a8216f9aec1b7420a021dd987f1b2b202d219a98f21ab11fe020bf97e119171fca200f9663192a1ecf200894d119571e51200694eb1a981e04205f95531a351f9b20f7920e1aa41ecd1f30947e19b81e0f206b94e6190a1e561f9496741700001c14ff8b86105b0a4a14d583661a461d7f1c98964e1db9255427bb9d581c0c1f631e029668144a16e2163a89cf131a170f189d86a912be18cd132384e61678185a1b49886d12000000002b062c0d0000000011030000d30a00000000000000000000008003169315c6177887fe1100110c121b870000f20c200f0080ad08210d870c76800000cf09e30e00800000300ad30f00800000500bdf110080000000009203008000009001000000805b086d0e42121080f7099e13e4141e034d117116c217f0084a0c3e17c6197b8a74109d144716c9859c14e015bc14078baf0abe126615bd82fc1696187c180791b40ffc19451c098ebc12d9152015d98c3f1463140314328740117e1414166987c50efd18a51a668d5d197a1c711cd192251c88212a237199b61d6e23b424279cc81d5623b124349cf51d9923c7246a9c051e2e238924769cae1d3f22be234c9b491df0212e237e9a0f1db8211823379a651c5721c4222699df1c282137229299181c17219b22cc98681ce3200f22ca98b31ba820fb214b98891b6b208e211898391b33204021da97b81a09200021ed96851ada1fd9205a96f61a0e200c219a95c71a162030211d94741a841fb220be920a19f61dab1ff9926f1a721f7d2073967419331e861f77957a1700009d14558a0000000080100080851be11d791d5397411f8b26402805a04e1e8d2196210198ac1400000000c004000000000000008000003816971000805e11201669188c845a159e110000a606a21400007108c1850000f11000000080000066030000008005125a1197150f83ac0fcf110012d985690aec0ed411a2807608820be210b18000009807510b008000004200d10f008000000000d202008000000000000000800000000000000080000000000000008000000000000000809406ba0d9112ca80dc093614b01616898c093b0e0c109682fb0fb408040ebb840000610c6e070080a71562181518129053119d1b051e199065157c164717c58f6011a30c1e06bb82521319147f14c188e20ebc18ec1a4c8d661a691c9f1c3f94d01b0e22dd2376994e1e16239324da9cfb1d12239424039c2b1e21244125239c801e17241625fc9b171e3c2384247b9b3c1db4224a246e9a161d882237243f9a331d4222ef23889a731ca4214423d7992f1c1221592242998f1cc020a62199991d1c88209421b498101b4b20802123985c1c40200d211c991e1c43204f21b598421bff1f03214697501b6a1f7420b696d81ae41e25202894b51a101f52204394cd1a1a1f8820e694e619621f9420ea957d183c1d1e1e39933216470f39134c861c0f2a0cae0c9c020000000000000080dd0ced17771a0f828e14001b061ca9850000000000000000000000000000008000007514a71300800c0ff0169d189682e114be1000002a07d315a10f4e14a8000000fa0c160500000000000000000080d20e480f4814f680ca0f6c111311f085440cdb0dde1091810a0b110cb30fe5800000640cf802008000002c056e11008000004802b00a008000000000000000800000000000000080000000000000008000002e06000000000a030005fd0c1b8000001d0c6511008080006e0f82121880160e84112e11f4836e0c0912ce14a1860c17761a7c1bcf97ad15d51cef1d92953e1cd71e631e5996a615d61f4c2144943818821a521b9694d914551afe1bc294811a641d681e5194951ceb21f123469acf1ece232725249de91f29246225339e141f202429250c9dcf1e8a23a824a99c081e01236f24689bc51d27237124c39acd1d19229923f69a251db4213923079ae01cf4217f23fd99f01c7b21ba22589a2d1cc120d7212199f81b5b203621ab98381b3c2044213b98fb1a0a200a211798601aa21fbf201c97621a6f1fb020f096631a4e1fc3209596021a171fc520af95ad19e71e54216894f91a0c1f1321cf956b1b821f00233a97781b0220de207c972318280e0b15ef80b4125413b412618000000000000000803a062015f31992801a13f9193f1c6984000000000000000000000000000000800000db0eaa1100801b11a118691953840315e10e00005c07961600166218178800005810d71300800000000000000080ec104a0d341464810e0cdf0dd80bdd827208530ba10e918007087006d60b83800000ce08000000800000da06ca0b008000003003a809008000000000000000800000000000000080000000000000008000000000000000802c0444091f0e6281a001000000008c810000000000000080ca019b0c390e44806410ac0c930ad4898a158c19b71a4c961317031d581e5797bf158517e5174d8f0000000000000080cd0f00001a0cd689290c0718021b248c0c18341a381cd491111cf1202024af993b1e12243625719c241ff923f624179d9b1e9e23ce24869c3f1e1a23bd241a9c4b1e6022e3247d9c861ec4225724609c821d85226a24139b501de4215e23609a711c642118237599ae1ce12040229e99601cd1202423c298ea1be520db2286985a1ca620a12119999a1ae91ff7208d97771ae71e2a203697171adb1e52209f96421a861edd1f28970619bd1d271f09952219ba1de21edb94151ab41e1a209595531d46204b214b9b1a1c3b1f6a20bc9917170000ee13010434116a0b65130f828214b917c90eb68ccf1c06245c25bd9d23193d1ebd1ed192000000000000000000000000000000800000560e2e0e0080de12e319611ad1853515990a00006908e9154114f517ac040000de10d713008000000000000000805a112610f5141e822205350a280a09806204de09bc0e18806c0838091f0c50800000d50a00000080000054011d0d00800000a60290060080000000000000008000000000000000800000d005000000800000000000000080b2004e08a00f36805f081a06610af8880000e001831000808d16a5186d18d88eb6151c1e3b20bb96411ad91bbb1c7b9c4817dd1c251e0998c315f8174519b28d0000000000000080a30d000000007b876a0afd1289181c8b2519401b4e1c8992041d9f2231246f9b1b1f3d248b255e9de91e4a24ca26ed9cd11f7024e825e79d741e11246c256b9c7c1d56236f25959a931e9123dc24219c161e1f2396242b9c432009226923669f7e1dfe218d230e9bf41cc6216b23f299321dbf21f2223c9a281c6a21fa22df98321c082148220999da1b4d202621b6983d1a591f762022977119721ee61f1296f518631e0c2063957a19261e791fcc958819921e0e206395eb19b41e38209a965d17671c711df792991a0d1f1f20cd963d170000eb127402d90e00001b125a814318711bb719b1908b1ecd256727709f211b6a1f391fbb948611000000006e03000000000000008000001a10011100801914301a921af186a314d7080000cf066d1652144b1788860000650d3a11008000004e0500000080f413a412d7150b8414032708360911801e05d007100e1c80b201db0a740d0f800000e508fc0300000000d308a71000000000ee0b010e0080000000000000008000000000000000800000ec01000000800000000000000080ce043604a5103081480924010000018a0000000000000080000000004e0900003e0396066f0bc180da106014f516679272157c18611a44963715ce152017918c0000000000000000be1066064f08b0888e082415921878880b18bb1a441c5e91c41c9122f923ee9a311ee9230925979cbf1e19245725e89c321f1b243d25ed9cf91f35247525af9d831e0b246025759c281e292390254d9ce420c3225e2474a04e1e9e224c24519c7b1d29222624e39a2c1de721b8230f9a741c4721ed23d798431c0521a522e098d31b6e204c219698bd1a0720d820e5971e1af51f05218397ba1a681f7b200998091abf1e43203e97e119981e5820b897271a3d1f7e20dd96c91ab91fe32060975c19111ece1f5f959c1aa91e08207096a51600001212c103740a00001811a3801519191cb01a4f91a61efa25c227469f061c4a2071201d95551100000000500300000000000000800000e6119415008071147819791986879a117d0a0000bf0412159a0a1911020400007f12e31300800000000000000080bc11a511cf14908350043d08050c17802a020108af0d0c80d201270af40d0a8000007f0aaa0000800000960b6e1000800000c70ee511008000001e0713090080000000000000008000000000000000800000d801000000001e09d20a1a104083360808030000ba8800000000d0030080b800d802f60c04800000000000000080971649193a1a65987c16291e8120189767170d19031a7b8e000000000000000043100000d803f187de043e1470185d847a184c1ab91b6f91b81cce215123989a9c1e9023fb249e9c2b1f21249925029d8a1e0b2485257a9c801e53236625739cda1d3f23cf24029cc01ee2228424e89c741dd9228c24da9a0b1e3b221424989b751c50213d24ba99f51cbc202922cf99641ce120242265996f1ba72007229198b71b5a206e21f5986b1bb71fe420a9980a1cc61fd220f698521a4d1f9a2068978e1a771ed01fae97c41a191f2f208c97b21a8b1f98207897361b2d200f216e97731ad21ff420a69614191c1d081e3b949c1500007711e70100000000b0100080c818671b2b1ace911f1d1225fe26199d751c7020a5202b96c110000000004500000058044b1100807a1b7d1e1b1ec0946519f2211624489a7b193f1c8e197d908516661569180d8800009514ce1400000000f3108f120080c31127127a16ee82500e800ffb0f89808e062109f70e5380c005af0c4a0d49800000b2091205008000005808960e00801403890cc80c2780000000000000008000000000000000800000b405000000800000b202000000801309910af2125e830000d201dc05008000000000ba030080380300000000408000000000bd0d0080b416ad1602173c9890146f1dd61fcc942e188419a51a518f0000000000000000430f0000000096870000310a7c1500800f19341c971c49934e1dd22244241d9b141e102432253f9cff1e49238f24e49c001e8a23ee24319c0b1e2f239e24989bf21df8224f24229baa1d5c223424a39ac21d0d229323bf9a7a1d0322d3236b9a421dd5214223039afd1c98211723b499901c39218f225999521cc020ea211099591cce20de2118992f1b7420b6211b98491b1d201c215f980a1b0c2085213998131a811f1222c696731b5d1fe4207898d319bb1e5020a996a919621ed91fac953519eb1ddb1f56942118ed1c4e1e7d94601500007d12090300000000a3100080b4184c1b781ab691b31cc024f5269c9c121d7520b620bb96670f00000000770100000000be0400800000741438110080ef0e8b131116c381a612e70a0000e1018d0b0000000052800000f10c0000000000007211641300803c153e18ea1a2b934e11c60ecc0f4a866809920eea10b080f709090d1b0f18810000840cd108008000008c0b711100800000eb0d1f11008000000000f0010080000000000000008000000000000000800000450a88040080070c47100c13358400003f14bb1600801006fc10f7127f817711c715e717b78748182f1a251b9e9355154b1ccf1e67947e18161ed01f0798ff1c451ff91e6b9a310c3a1d9a1fbd89c817811a031cec924018561ce91d9495301bda1de21ec995f41c4a21d022349b701ec1226924ae9ce41e3c23b424039d381f7923d524269d3e1fe4232925f59cb01efd235225949c921e30238424509c3d1e62220224d79bdb1ccf214b23b199741ddb200b22649a081cf520a6229c98311cbe2048228e98961c8f20cb218199e61bb8203222bd98351c8420af210c99b91b2a203021a2984d1ca91fc2202999ec1dfa1e4a200e9c0b1bbd1d8e1f0798cb186a1d151f5895c7196a1d761e77952618d01c1e1e469472171e1c081dac93091500002112d80200000000c6100080b817491ae418e790751a182400266d9a701c09205620e495610a00000000a100000000008b0e008000003614731200804d103d12f615ac827f0f000000007b01ac0a000000113981000049090000000000006e10fa060080ac10bd1073146e83ba111b109e0ee90200006f10f9150080750fbf101e14e581040a9a10181016800000030b7813008000005f08e20c0080000000002e01008000000000000000800000000000000080000000000000000000000000730800800000700e9807008000000000110c00806602bd130f165b800000b20ffe1600808b13b1122616748b0000e416cd1a00803e0f2117f4169a88e31488174218e68aa718f61aac1bdc902011c41c851fbb8edb1b0f1e0d1fa895231d5821e822749af71d06239324419c6e2043238124119fa91e5123b024a79c5e1efd2297245c9cdf1ddf228124e09bad1dd2229124749b0b1e47222b24ef9b151d68219724ab99ac1d8b21ba23499b041e7d214323609c022015216a22bc9ee11c9a20a921689a0b1c05200b2114995b1aeb1f1821ce97931b731f68207098521bc81fb7201598631b2c1f83205498021bdd1e1520d197091a6b1e0e2038961019761dbe1eee948c192b1eb91f67952a16cb1bda1cd5917c120000b50ed501ac01970b2e0015000000790d00000080c205dc18101b5e800f146319b81a0b850000000000000000000000004f0900800000d0146514008015107c12cb159d811603c20700002700f80d200213162e0100006e0a000000000000c50b00000000420c5f12000015815600dd0c2e120480360c171163145b80e8015910e5121f800000a30c221200800000bb0cbb11008000006001380f0080000000007a04008000000000000000800000000000000080000000000000000000000000300e00800000000000000000ec05000000003680900d940c750ede047d18fb1a7a1bf1904619f21d1f201a9970185f1e5720ab98b8131a187e18408c01110b113a136a81c80fee1195158a01560d910c8d0e0e0113151f1ad51a4e86cd1b1d21df223b99741e9d23f524b19ce61edd232825a09cab1e9c23cc24619c7f1ef7226f24fb9bc31dfe229024679b071e7c224a24be9b981c8d218f24a499d81d3921ec22039b561d7c2177239c9b351d5e21e622d69a2f1d1a2145225e9afb1b9a20f821ca98df1b0220d1209d987e1a481fa5206d97e01a591f9e200798ca1a7c1fd420f597461a171f7e20ff96ae1aac1ed51fe2966b19971e302095957619bd1df81ec8952b19ca1dae1fbe94041aa21e0e20dc95771358088814448100002c138512000085146a1b5a1c9d855a0ff21aa31c3500280e2c177f199b0200007e012710000000000000111400000000f01319150000f208a9100416368000003c0900000000b0020000d11418000000b812000000000000bb11000000800000950d00000080380aa910c30c9d80da05611052124801120096081e11000000000c05400600000000dc08f90b00805308aa088e08cb80d20400002a01600000000000ec0c00000000000000000000a80200000000a8000000000000000000b10c000000003181bf09000000001500790e000000007983ad0ce00de40c6580fe15f516ad15c1893912311ab71c0d91b9126a15ef158189a20c0b101214ea80d11116144314fc002e0c0000000097000e18331a0c1cc98b371d61226c24b39a1e2062245525389e1e2001240825c19d0f1f0b241925899cad1fb023cf24ee9c841ec92261248e9c9c201e21932222a0971d7121b2227f9b761dcd208b22539b441cd9209f229a99031cac20aa22ed982e1cbf2069222299841b982067224c98631b7e2020221f98d11b5420bd215c988e1bec1fe92036983b1a5b1ee91f6c966e197f1d161f369681198b1dee1e23968119071efd1f7396471b891e08209298fb18141eea1f4a9444194a1ead1fd5940000000000000080a211fe0de11451000000081214160000ba0160106d10030000005f113c100080ad1025126f144480e7110f1453120003a5114613e90d520022113710c20cdf800f0f5a110000ff80d50ac00d00004a80aa07ed0f00002a807f0d050f000028807b0c00000000670200000000000000002e033e0000001a01000005080000000074040d0ff801c9000000000000000000b005c90800004800780eb90d480e0706d402c005d511f0009c060000000013016b0a0000740fa10200000000000000004f16281785165889ca11c61c311fed8fd316e617e416520b5211e70e1b13a8086911fc14ff140787a4141b19691aed931d0fb012c7126a835f1415120c11910c2314ad0c6908170c20044e10ee105c020119f61acf1b370aef1d802241247b9c1c222f245025a6a1eb1f3e23a224a59d301e3b23b624269c3d1eee228824029c061e8e2261243a9bc81da32266241a9b481d5f223224569a131dcb21a123f299741d45216c228b9a601cf12071222099261c9a20e621be98671b4b2092212198281cf71fd720a398ee1ac61f1621ed97601b901f8f2002982a1b911f7a20fd971e1a281f7920ff96ad19f61e5320a796bb19e81e3a203397ed1a1c1f5f20b9973c1a141f6620c7964e1b00201621b4960000000000000080c412e21444183404000008187919000000002b1219150080060f6d186f1a6381e514091c1c1da981151ee21f3320539500008c2197250080191c202064200d94ab1a3f1cba1cc78a2f1533171314ed82a202de0e8e0d0e00d00a971100000f0100000000000000004a030000000059000000d211000000000000190a69080080220b6511000084020000010b6c0000000000850d9e0c00000000140e301000000000a4109b0f00000000490dd30a00003c003f0c96050a000000570e8e010000a6056b0d9c0cc2005e03e30d0000f900780c3a102e0f23015110e21438143e802916a7181f18648d8a0b641bb01da78a4d15d018051917890f137014bc1393073e0d9b0ed4139704bb104714b113470d0119751bcc1b590b331c0f21a222a299581ead223a24b49c471eb52307254c9cfa1e40239324499c411e17238f24ae9bc01d8b225f243a9bd61d5b221924299c251e09228423099c831dc9219523ed9a511d4721e7223b9ac11c0921c4229299d71cba202a2266991a1c93202122b1988a1c582075215299081c112069219c98361c991ffb204a99f11c801f86200c9b7e1c231f3d20e6997a1be51e6d20eb97ce1ab21e2b20d296c51a501eb31f0596eb19321ed91f6e95531ae81d111f85960000000000000080ab12e015eb18a38200009b18281a008000002814bb1500807911fb18111aa384bc14c11b3c1cd0844c1d5e1ffe1e89950000b52181240080451b731f881f9893a619311c751c268c14124818d7162685ac09e60f261014009f0ac9121c0486821800bf0d76080180b806000000000c00000000000000000000006b0c000000800000770f510800800a0a3a0e5c02410012036c0cdc0653000000df0edb08000000000c107a0700000000c10a1f0c00801d09eb0fb20d3a017a0bdc0d350cf3005608910a0000cc00340dec0cf209bb05360d050f4f09cc02130c2210f00e1d8098147516c414488c980f36190d1c988ef714ca162c16738a88101b107f134e02420d2911c90ea2017a0c5214fe132602cd189a1b5a1c0c8b311c592131236299951eef227924c99c6c1e94230325949c421d1c23ad240d9b9a1d1122ac230a9b6d1da1212e23d19a7d1d9e210d230d9b541d9f214523b29a181d80211723f899bd1c4a21d2226b99901cdd200e223899491c552064210599831b32209f216798691b252068215798b81bc71fd8208698841aee1e6c20e6966f1a301eef1fd0967f1a2d1e6e1fe196661a2d1e9f1ff596931a771eec1fc6966e1a9d1e2020729657193c1ed01fe6946c1a5e1e901f1396000000004508008000000000000000006406c514eb197f000000f615a31800006f104219e6194001b613031bb01b4e811d1cae1e9c1e1194540dc4202d23e68b9e1aac1dc51d8a9241140819c31a5384e30ccf1100002c03641000005d16050d00000000000000009910fc000000e5030000000004030000261100000000b0060000960cb61000003d10c40c000012042c02000000000400ff0e6b1010142c8200000000000000003003020ba3101180000000001a070000e60e29125308b3032a031d0d3e0d4601340e490c990ea102b10b40040000c3004f09bc074c071380720d210a000027808410ee0fc10d4681ca0e5e0ab20058815e10fe0dc80a3c81d50e61090a013100a7102b0c5e0c43009a0e95100b13ad014b18c6199c1b9b8c901c0f2127233f9aa31db6226325b89bc41e5123bf24a29c1f1e74221d24059c2d1dd9217b23369a051d7f2129239999f71c5421bd22fa981a1d26219722b199791c2c21de223e990a1d382187220c9acc1c2a21a522079a681cf2205b222a99c31caf20d42194990e1c7620df21de98231c43208121f798951c1120f620e399691b801fa6203d98bd1b011f3820a5983f1ac41e5220ca968a1aad1e34208e96781ac11e56201e96001a071ff020829525190c1df41d6e940f0ab50ba50a9900000000008a0400800000000000000080000023107b1100800000521637150080f800171487130580000019146b12008000002014b90f00000805031574112d800000fc142a160080050e17110000310100000000b20d008071134814ae0cf10252020000770c1d80cf10af0f0000d1000000000014030080210afe0f0000168000000000000000800000000000000080000000000000008000001c0c00000000000000000209008082098d0b0000db80f00aad0c00001481da043a0c410960804e0c280cd00dda80050dda08330d47813310690d24082282f40c110f7a0f4281ee0e980d00005f816b08de03000050800000270c00000080000000000000008000000000000000800000d801cb0f00009517831abc1b7f8ca41be8207f229698d61d54221e24149c651e9e222924619cde1dff21e723b49b821db32191239c9aa61db6217023769ab11d9e211e23509bba1c2621d322ce992f1cac201b220599171c5a20aa212499271c34203421a298971c1e201021a399601b05203d210298021cc81feb203e98071b991fee200b979b1a531fc320cf96a71b591f6620ac97ac1a281f80201097371b071f4620a4975c1a051f71208e96691ab61e5020f896061a311e821fb3952c1b2e1f4320959662031208a909430000000000b601000000000000000000000000fe0e0b1200806e07af1575170d80b10c94144616318100000000821300800000000000000000000000008a0c0080000000008a0c0080000096020000000000000000990a0080000020050000008000000000000000800000f201000000801402710800002280dd0c2a0d460a3c81260f2f10a2086a81580a300dbe05fc801a04a5097d0b608000009e06d00b008018058f0f270f78805511e5131c15b6822910241605180e838c0701155917b18000009c100b160080270dda1408179a81a60e6d16bc185081380f2e1874190581bf10e2188c1957812a0b4018fe184e80000052153316008000001d11c71200800000aa12bf1100808a14d016531783805c1a321c6d1ced91c91dae1fb620c79ce21cd42042221a9bb11d67214923a29baa1dc021dd23479b561d83210c24f3991e1e7f214623049cd91e1a21c622c19db61cbc2068220d9a631c3920a9210499ec1b0c203f214e98e21ae21f2e214a97571be21f2d21fb97321bd91f2321d297e71a901ff2208197371afa1e9620c296751a8e1e2f200597ae1a811efe1fb296991a601ef01f9d96ed19391ee71ff195e519081e651fe9959219821d9b1e6d95c018951d041f7e947f18e41cb21ebe930000000000000080f70fcb0dbe13ec820000b911ef14008000007d10011000800000cb0fe90d0080060da30d0f0f8f81800c600c22096681de08830c0000e580fe05310f0000a280f60b81114a0cb0818f0ff2122011c6826d0e87117610ff81a30d88120610cc80a10c420b600fea80c30cb10f890d7b810000980ebc040080000000002405008000005c050000008000000000090c0080020df90e920b8e811408f3098d09c080b20000004c0413808c0744050000e880000000000000008000000a01e00200800000ea009207008000000000d40100800000000000000080f9098a0a220a4481bd0926086606378100000000000000809e074f0d9108b3807a02230d9b0e3180aa119810f3118583c80f7b148d148a813418991a2f1bd58f9a1b1a207121ab982f1d2e21be22199b1b1d642112238f9a331d562104233d9af81c5321ff22af999f1c2f21e4224999401d132118224d9aa51ccf2044229399d61c9520e62142992a1b3a20d821ca97661cf81f2621e898ad1a6e1f1621a297e41be51e79201299651bae1e40207098001b9e1e74201a98b11a9e1e6d20a797e819571e3e209696fc19fd1d961f5696931a0b1e831ff696f9192b1ecd1f2896fb193f1e2b20ff95ac19111fbd205d953019ea1cf51de89400000000a50d00800a12b1104a14c28f000011158b150080f0070c1425148a84070c3d1370134488251128157315728d38139a16d71607904b148517bd17ab900314a117fe175c904813af175d172a900812f615af17ba8e0d14b016f61685904e0fd0144915f18b1e11ee132014908d671080147b13e98ca710b9143a14528d9d107b148e14258dc610a2144715308d7f102313e712e38cca10cb111d107a8d761032135412d98c821101135512748e7911581321146a8edc100e1312121b8e600e1111b611188cb510e6129e12c88dc7103d12ae11de8d2d11f01239135b8ee110c712b912218ead1138128011d08ec71219137012f18f7412ac13cb12618ff3124c14e913c08f751274149c14d68e5b13bb161217f58e2e18b01b0f1c6d94471c342022216099671d7121e022f19a4b1ee1214323e89ba11dbd2199238d9b931d5d21bb22d99ae51c03216d224a9a1f1d0b2196224a9a621cf6207b222399461cbf2063222199921c9220be217c99e81c60206721b89a191c07205421eb98b81b851f3321a2985a1c371fc9209799581d151f56201d9c1a1e0d1f47200a9d481cca1ebf209f99451b381ea1207798a619e11dd020a995c61af11dc51ffb96611ad31dc81f6596e618b01d951f7f946718211c221d2a94 + image data: 19200 + _typelessdata: 8727b4259e25b427b1271324d52443286d2abf23be25362b582c9224d828722cb32b9326ee2b032bd5285c262b2f6628bc261028c431c02559286d29c13257258828a729eb32282448283b2a0c337121b728172a8f31ed203c29c52ad92d952085297d2ba12cec1d1d2a042cb72cd518f72a192cb92c4b8e252cb52c052dae98a42c1a2d4d2dc49d012d7b2d8a2d3da0682dcc2dbf2db79e402d892dc52d72a02a253b26f6269425ea2464254d27962596259424ae265926af27c7262a290a28a225e7263a2ab0258f2497255c2b7924b925ba268b2ea524000000005627000000000000442800004c2611293f31831dc029632b71305c212129ff2a4c2dd21f762a002c642dbe1c4329f22a512cc10cc92bb02c372d4795e12c9b2dff2d8399bb2d5c2e912e1f9f3f2eb72ed12e4aa1dd2e452f3c2fd0a1af2e042f602f2ca31e21d7209b21f21b0a257825cf27a924da24a025eb27c324f51ef21f2e210f1d3524e6255a29e6236225cd27ff2b0e25c1255227222c6d2400000000b425000000000000dc2600000d26bf29ca2e4c1d9f28b32a8f2d0b201c266b280e2a2d19782a2b2c962d1d197e2c732d6e2e1796232de82d8a2e109c4b2efa2e752fd19f212fc12f04300aa2eb2f3a30573024a57230ad30a33044a466309430c43037a5eb21bc216223c31cc424d425602857245423cd24a727fc22e0197e1a692045185f244f2672291b24c6266428832b432610271128a52b3c2500004514f12200000000ad1d4324000076289f2a272dcf1faf293a2b2c2da720f3269328d5291a190a2b712cae2d5c0e0b2dea2db42e209d2e2ece2e572f89a0b42f16305c3086a27b30ba30ee30cfa4283168317a31dda7f0312c321b320ba7e93125325a3281a89e232b24c024211e93252526952864252624fa259e287b248a251328112abf25002616286d2ae325a326f628a52bf325ec26c528982b0825c72023231626b918d12088247627b61594286d2ac22cfb1e0d2abe2b152d45202b281029da293d18732c1d2d092e091bc82d942e5c2f929c3a2fc22f27307da0a430ca301631c4a1b331e9311e3279a5c7320e331c332ba9fc3321340a34a3a9093421343c34faab1525cb266a28572496256a27f9286d26e624c12781293925bf255b28332ae225fa260929572ba626ec27d629302cc4266c286b2a9e2c4e26ce28bd2aa82c7f251629852a3e2c2e1f1b2a042c5b2db021e92be42c192e7a225a2c372d572eab20402d042ebe2e271c302ed72ea12fe49c24307730bd308c9e8f31af31fd3165a0083344338933c0a646347334743484aa3d35583536354aac71358d35b935d6af9e24f225c32756248e237a25c2274e23f5216f2459278221d2205b24fc25251f8923262759298b223f266629f02be524df27542a502cb9242d273e29782a481e5429bd2b132df923712a832cb62d7523e52bf42cef2d05225b2c4e2d2a2e2a214d2d302eb92e311cc22e422f0630a29b67309630c6307aa0fe3120325732c59e0a3424343b34d8a62f3561355a353fac9b36c1368736a6aff03618373f3711b43c245f2516270924cd239525a227a723ca22a724e82678222023b62407271622d823e824732742224a245725c927c1215425462651280a21c026ea275c297b204628f0283e2a081e3129d4291b2bfc1ce92a422b642cda1d542c932c422dd81a752ddf2d552eee10bd2e242fa32fd99e9030bd30e730379f5a325f329a322c9f4734543466343fa78835be35b43537ac3e377637203703b19d37bc37d03774b9b1286f23d1245728952c8325bd272c2c532f9827c327ab2e92307528c9294a2fa5303f29e62c7e2e402e5026f930752c50286d283a338a25cf25e6261833111e0b2846280a34c31bca28e32a8b34de183629492b2f344c19fb28ac2b6530e0177629432b9f2cef8c332a812ba52c4d9ad32aa72bbf2c8d9e332ca92c002d08a0d52c1f2d612d2fa1042d562d8a2da6a36e2da62dbe2d72a4872d882dcb2d37a4f5203123a8244921bd2591252228cb25a12bf526ff28b32bdf2dc128262c982db82c1d29252d5d2ce229a729472e4629fd27ed28b83142269e2792275c326c232b291d2aa533dc2291287e2a4e34fe1fee29042c5d33081f1c2a142c352f2d1d2d2a582b432d2f14ff25012838291090bd2b492c0b2dde9b502dd02d522ecd9fe82d592e9a2e01a3512ea42ee02e2ca5e12e242f562f69a6082f132f772fc2a54c0c551a311c6e066f242b26b128732372268d28652ade255f285d27c12a7827f9284a280c2c752891260f29a02c84252628352a3a2e44268c282929aa31d024be29812a0d344c24822bca2b55345824912a7e2c7b31a320cb28532ba12d9417682b222c172e05957a2c472d452e959f3a2de72dbc2e33a2512ef72e562f7ea3432fbd2f043089a5023032305a3030a87e309c30b730f2a88f309230cf3005a9000022150b1d000003269f27a02922258826a028042b2226ff266129ee2b13260d282c29182c61271928c129d72cc5269228292a562da5265828a929232d5b243729072bdc2f37237729512c7e3067214a2a492c862ebf1edc29032c642df1131d2cc52c7b2e819a152d052e912e74a16c2e292fb32f2ca4cc2f38306330f2a58530c730f13077a82b315f31793191aaed310a322f3219ac183225326b328facb0191b1f1020de130225382757297d24da2511282a2abe2597274329f52b72272028d429872cbf276028c52a672d7927db28d32a5d2dec265828032b542dba234829d22b7e2d1d22a82a822c092fd421002b802c952dee1d492b872c8b2d950eb92c7f2d952ecd9ce62dbb2e5f2fffa2682f0e3043303aa59b30e13005314ba8a431e6311132d9aaa332e732fc3287adbe33de33eb338baf1b3415343a34b2b0132162249225171e492504286d29e3247e258e28ad2a6425d326a929d42bb226bc27362a602cd3263928b52aba2c7f269028f72aff2cbc25b7281d2b1e2d54247229d82b682d1321972a592c232ea720ea2bf22c732ecf1da42c6c2dbd2e3110492d072ef12e5f9d7a2e232fed2f35a428308230d230bfa76131ad31d23188aacf32143347337bad18343a34413491b0e734f934f834fdb26a35563585358cb46c24ff254f2857240025f02604297b244325b2265229b8248325da28a32a52242527d82a7e2c7f256228342cb32da1258c285e2c292e4d244429bb2c212e8021922a0f2db62e1f22292b472d9e2eaf1ff42b862daa2ed71db02ccc2df52e3c10932d5b2e312fed9eff2e702f05308ba46530a630d73097a8e9311832353282abbb33f633133450afde3400350635f1b204361c361b36fdb5c136b336e1365db8d02474263428a72440243026462880232523ff24b2274e222b238624cf26eb212e238224f22686214d24dd250528a6211826e9270c299821c627bd28fb292821862860298d2aaa1b8829162a722b3f96fe2a1d2b5a2c1b9b6b2c5c2c1b2d7c9f9e2dc02d5c2e4ca3f12e5f2fdd2f13a68430d7300f31f9a8fc3152327c3224acfc33223431341db0133534353835f4b36f3682367c367eb754371e375b3707ba4b2cce269128e129732f7228052ae42cc330b128ff28722d55311f2a4d2a4a2c38338d2a482f672d1d34992a71329f2e8f2efc2aa033e828fb2848272833e017fb2819281d34808c8428242abd34148cb828f92a7334cc981729c02b2d31539ad829be2bfa2cee9e8a2aa22b8f2cfca0342b9c2ba92c7ea13d2cae2ce82c76a2c82c192d472d2fa4f62c432d792de7a45a2db22dc02d4aa56e2db02de22d98a67c28da26d528ea27582c2828152a4c2b8330dc28a92a742f0a32182a6a2ce7308e31d629742d8230a730142b08306c2f882c072c2233552aa62aba2a1f34da26c52a9a2a3b34e024af29ce2bae34a720212a7b2c86343b1a5f2a9f2c5a305114b92aba2b3f2d130e39266e2728283790252c8c2c5a2df59f5b2de92d4a2e90a3eb2d4b2e852e2ea5382e852ec22e7fa6a62eee2e172f09a8ce2e022f3d2fb5a81d2773289029ad258526b3287d2aa9251e2c472a672ccd2ae02fe029e12c812e5c30702a252d532f202dbf2a952e3c2c592a5e2c753059282c2c232c49346b28112c332cc7341626c32a6e2c40351023a32bb72c9b34781eb72a6e2c532f118e242c992c362e049fcb2c7d2d622e4fa3572dd62da22e47a53d2ec32e1c2f84a6332f8c2fe52f5fa8d12f17304030a1a93e3072308b30d4aa51306b308c30ecab9926b228462b73250e273329242b6d267927092a382c9826a129ee29c12ccf28562bdb29fa2c442a5829912bdc2d6a285c29c12ba72e3027242a102cc0308026a72cc92c1e35f6265c2c7f2d973524231a2c5b2dc9332b1cbf2b0b2d832f4095912c3d2d412fbc9f372d362e342f45a4652e102fd22f0ba7a42f1d305530dba871309730cc30e6aaf13017313531adac7831a231bc31f2ada231ba31db319aae1825992750293524a0266d298c2b38265628462a452cc627ea282e2b482d44288828bf2a592dbe27be281e2bca2d91276529d22b2a2ec726e829082c5b2e6b253f2a452cf02ff023da2acc2ceb31d620b62b022d59303a15a22c4c2deb2e3b99042de72d4e2f62a1002ee02ed22feea5422fe12f453005a968309930d43097ab5e317a31b031d6ad24324d32713208b0fb321833363346b13133493383330ab267242828ec29852339265d29902b94258d271f2a482c8e266928e62aec2c4927c5283c2b5e2d5727e1285f2b832dae262c29882bbc2d9f253a29ed2bed2d3b23222a732ca12e1022dc2ae02c2d2fcf1d352c4d2d542f9a0fc82cd52d662fdc9c552d532e7e2f53a27e2e692f2b306aa6f62f5430b5302eaa0f314931833137ad53326532a23210b06f338a33b63359b24e345b34613458b483348334983400b586249d278529db2398250e28ee299f240127172a202c6425ad270f2c812d5d253528322ce22d8625a728122ccb2d74250629162cd02d9c2482294b2c172e60221f2a902c412e911e572b212db02ea20e3f2cc12d412fb79a0b2d772ed32f46a0d52de72eec2f1ea4e72e922f2d30fea73a306f30c03085ab71319431c13112ae0c3324335b3339b143345b346c342eb409351335253526b65435543566357cb75e24a5264f2817230f24e4253d287a224323f7242b27b12184235625a327c821962479269428ed2220264628de29de23c927db28b42a7c2299286b293e2b06202529fd29f22b3b19212ae02a542cec961b2bab2ba52c04a1542c572c222d03a5542d952d302edea50d2f5e2f08307ba86d308f30e0309fab9331b931f53188ae3f3349338433adb17d3485349a34c9b4623560356b3555b7b135a935bd3566b8222d20267028db28c6303029082b612cc7303729042acd291f31b7272f2c56245837bf2c6a30c52caa38112bf433882dfd32eb2da036b9292b2dc12bab372122a22b792bed37f5202a2b162c6c37121e6d29482c1735849977289c2b9530cf9edd29d92bcb2ccda0652aad2b6f2c99a15d2be02bb22cdca24c2cbd2c002d3fa4ce2c202d3f2dc0a4f02c392d6c2d29a5432d992db62dcba5572d9c2dae2d16a7c62ad5283b2bbc28ca2fdc29222c1d2d0432562ba82cba2f0734052c9e2d2d310934de2b5a2ff5301834482c5731ae30a530202d4734862c7d2d972c20351b28d42c482cd23497257a2aa72c1e35ae1faf293b2ca634238dc829852c30303e9c682a1e2c8c2d269e2b2aa72b832c9e9e622c1c2dee2dafa2492dd72d352e39a5d72d422e882e6ea6212e742eba2e71a7622ec62ef52e6aa8702ebb2ee02e5da98a28fa29422b7926be29832ab82c56281231192c562d3b2ff633732c2a2ee7316134c92cfd2e7e3215334c2c5f30c030712d952c9631c329b22c272cc434c326ce2cd82c3b350525982cb42dec35f721552beb2c05352418782aa42ca42fc09c052cd52c952e38a1d32c9d2da42e7fa44a2dd32da12e6ca6102e822eeb2e32a8e82e512fad2f2ba98d2ff72f223013aa033038305930e9aaff2f1f3035303cac5b287f2acc2c12276e287c2a3b2c51278629682b1c2d5428d130532cbc2d692fe732ae2c6b2f68319230b22cd42f842ee32b432c22306628da2b902c01321926492d562dd935d2258a2c602d85366221fe2bf42c24358318a12b3b2d2130bd9cce2c9f2d6d2fc8a25e2d5d2e7c2f4ea51b2ee62eb72f39a84d2fd22f2a3015aa35305530843019ac9430b530df30faace63019314231e1adfa3028314831d1ae97266c29842b2a252328782a622cd5262d29812bf82c2128e728612bd32d8b272c2c222b012e8a2a072d022c8c2e072be7293e2cd72e4026d62a412c9a30bb24dc2b452d1a34c423a12cf12d9035cc1e172c472db5339e98792cbe2d5d304ba0482d282eeb2f53a4d12dd02eec2fbca6c32e9b2f303071a911305230953031acda300731393119ae77319731c631cbaffa311a323c32dab00e3237325b3283b17726d229112c28252128dd2ab72cd226ad28802b432d32277c29062ce02d11288b29b52bfd2de7273a29a42be62d6b26c129102c442e4825ed29562caa2edc22aa2ac72c5a2f1521012b2d2d17308a19502c8d2d0630df98d92c022ea72fa7a0672d862ed42fbba42f2e502f253082a7652f2a308f305eaa8630df3025314dad7731ac31e731f2af63328932b532a3b123334a33753368b34a337d33993331b400244e28472a2822b7268629722bfa241628262c7a2d7b258128302ced2d88256c28052cca2d4e25a128e72b9d2d4b25f628032cb62d46249529432c0b2e84211f2a912c3c2e7e1c642bfa2c6d2e2c986e2c882d072f819f262d9d2e0a301ba2042e762f4f309ba5c82ee62f603080a8d22f47309e309eabca300831393127aef6312c325032ecb01f3341336a3330b3043414343034e7b42a34453458348eb55a24142696281522f92363252d2892218a23d92523284521122548273b29f12260267e28672a46247027ed28172b0b242a28fd28132b0e21552827295c2b291cf228ac29072cd297a9297e2a592c5a9f322a032b772c1fa21a2bb52bb22c83a4542c9c2cfe2c03a5a72e1e2fb52f5aa924305c30a33044ace9301731493196ae01322a32523236b15a337a33a03306b4373444345b3481b549346a34733405b63a2eea28fb2a7c288931882a2e2db82a14317b29232e9826a735052a372e78241b38e32e3b316b1b1f3749306734d320f333d22e6f35d625162d0b2c253675211b2de02ce5360e22a52b4c2d5837c51b9229c12cb734ec9a1628212b392e4f9d9f29732b432c4d9f672aa82b7a2c85a05c2b132cbe2c71a25b2cce2c0e2d0fa4c82c1d2d3d2d74a4e22c332d632dd3a42d2d732d912d1da53b2d5a2d862da5a6eb2aa028e52b21278c30a42b3f2d2c2c4d33c52c2c2e7e2e21350d2dcc2e21306b35ea2d9430312f0735182e4832f82c0432e92d9e33ed28b52db02cd1345a24ec2cca2c7935f322002b462d9835241d102b212df633628e032aad2c882f189ddc2a862ca32d11a01d2cfe2cac2dcfa17b2c3d2d012ed8a3342dba2d132e24a5c52d1e2e632e5aa6032e532e9d2ef6a62e2e8e2ecb2e1aa8362e6c2e912ed3a89f283c294f2b8c257b2b052cc42db328ec32b42c422e0e30de34832dc12f6e316935442e6e30ba31cb34602d0f31fc2fb22f4c2dc631ac28ed2c662cf63250244a2de82c323578234e2c652d7435521ea82b692da4333015df2a032dbf2ffc9a172c462d0e2f63a0c82cb72dac2e4aa3302de72da82e6ba5f02d8c2eef2ee1a7a32e132f722fc7a82f2f9b2ff82f60a98b2ffd2f213048aa762fac2fd92fb0aba428cf2a9c2c0327f929f22b252d4228672df62c412e3f2b9c34c32d262f0d32f935f02e9d308133b834272d5230dd303b2d982c1a301028932bd02ca5306224582c822df4349b232a2cc22d7e3578207a2b392d2e321115f52b892da72ff19c9a2ce82d662ffaa16d2d562e812fc0a4e12dc22e962f23a7d52e702f03307fa9bd2f0d3046301aab2f305230833032ac65308e30b530e7ac75309330b430daad3f28d42a992c8926a228af2b292dde265e2b7c2c022e4129772dc52cf62da32b7034a12dde2e1432c1333c2e41306f30ad2c922c482fca27282a642c5830d2238c2b872c5331c121702b8c2d58349f1c442c782d4031c8957e2ceb2d393050a0fb2c3f2eff2f98a3c12db92e013003a6802e6a2f1c30dda8982f183064309dab5c308430c0301cadc330ea301b3140ae1b3147316a3191af3331513175314bb04627d62ab52cb325b028102c782d1527a129382cd42d0328952a472cea2d82281c2b1c2ce92d91281b2c1a2c152e5928ee2b212c572eef252d2bae2c332f7f23fe2aee2ca42f2520a12b4f2d00304f18692ccb2d1330f99ad92c242ec62f1ba0672d952eec2f1ea4272e3f2f2a301fa7202f08307830bca920308530db30b8acca3003314731b2ae8f31a531d8315bb0f731113237326eb10a322d32543203b24124e228012bf2213828692bd02c8a255a28572cfe2d3925db28442cf22d8d25bd28182ccc2d8d2517292a2cd42d64255c29382cf82d2924a5294a2c1a2e9f20442a932c662ec91b502b0c2da62ef5946a2c5a2dc12e7b9e032d602ee92f82a2f92d972f73303aa5d72e0d30913027a8922f3630973085aa5930a830ee3076ad173149318131faafe531033226325eb1693276329832beb2ae32c932f8327fb32c24f225a9283e214e2352251a287c2084247a275329ac21ca26b728be2af5238b270229692bc6234027e0282e2b3e220727ea28eb2adc203a27f528272bbc1ec127e628332b721bc12746287e2bb1197d261c289b2a831f6225a4265629681c5727fa27a728a20ae42d1b2ead2ed1a7c62f18305530cbab70309d30d330d4ad1b313d316d3100b0013223324032ceb18632a432c6323bb3c332d532ff32f9b3ba2d582c2a2ea126e231ee2c772fd1282034132d53302025a536192eaf30011a6c362930273241a32e3539305833ae984231052ffb322820b62ca82d4b33eb1eea2ace2d3034db1d0f29962e2d34b7156729482d80314598b128ba2b382de39a5529712b3f2c1e9d9f2abb2b892cda9f832b3a2cbd2ce1a05b2ccd2c012d26a2c12c172d3b2d40a3d32c2b2d622de6a3112d572d7c2d26a4322d502d6e2d22a568279d252f28101efe2fc02cb82ea4251934332e7a30b62a7d35da2ea630e3297d35872f71319425d134c92e383271217630512eee318920602ca82d3132691f3f2a7b2daf32681f9c28742d28326d1c382a4e2d79300617372aca2c972e0597c42ab22cc42d349c0d2ce92cb62ddd9e792c422de32dcfa1162dad2d042e2aa4902de92d322e2fa5d12d252e702ebfa5fd2d582e992e42a6fe2d472e732e9da78421a7255e26021b072c0d2d8d2e64276532942d7d2f822de234512e4b30c12e9a35442fe630da2d5b34012e5031222b2a2e622d34315a241c2c7a2dd930e020812a032d8d31b61f9c29682d9c31631d112bc22d9230641c712b732d782fb98e272c7e2d292f299db22cb22dac2e0aa1292d012ea72edea3df2d922eec2e22a6672eda2e2b2f69a7da2e472f9c2f5aa8212f9b2fed2fbba8002f552f862fd5a9f229892cbb2dce27602b292d9d2ed728df2e502e0130db2b5d34792d32306030a5359b2ec3308b309f34d22dc430222e622db82c7130ed25f52a502d3630e022672ae32c70303e21fc2a802d08317e1f742bdb2d5130e419592ce52dfb2fe998b22c032e852ff49f4c2d572e662f48a2c72db22e822f0fa5822e3c2fcf2f22a8442fc32f183070a9ca2f1e3049307daa1030403064303aab13302d304f3033ac4a298e2cd02d6427c229e52c2d2e3028362c4c2df62ea629ed2f852e0f30172dcf34112e94303a31f834292d41304730dd2c9d2bdc2f0127512a9d2c0b3003248629fc2c892fd620162cde2cbf30ec1e0a2c9a2d5f304d0f872cde2d1c309a9c2b2d512eff2f8ba1b32dc32e023058a4622e3d2f0930aba62b2fd42f393091a9013036307530cdab59308b30b630baac9830c730ea3062ada230b730d030f4ad3a28182ca12d25265729f42c632ec427052b402dd92eb528452c182de62e7c294c2d2b2dd72e352a5c2e8e2c892e042a542dfd2c0f2f5f271d2c2b2d542f1124e42b592dad2fae20382cb82df12f4a1cac2c162e17305596162d602ef02f2b9d932dbe2e0730fba1332e3f2f323013a5e52ecf2f5a30fba7af2f44309830d5aa5830a430df30d8acef30143149310fae503132315e3120af24313c315c31c4af5926c82a8a2c2b2451292b2d9c2eae26e828652c202e9c252b294b2c092e9e2538294b2c172e872577296b2c2a2e2b259f295e2c232ec723a4294c2c102e4d204c2a7b2c572efa18562b2c2d0b2ff994612c9d2d262fec9af52c3a2eb72f33a0dd2d812f6c309ea3c72e1230983051a6602f20308330afa80b306830ad30e0ab8f30c630043199ad1f314131783103af5f317b31ab3122b07e319631c13175b0ae249c262d291621ac239a25092847205026b428852add2208289129c72b0a24c4275829b62bb02299276629d42b1d2291279029ee2be021be279729132c932131274a29c82b2e218c254928092b4f20c4242b27e029671f3823d4250d29fe1c652459269228d71c922dbc2d432ed2a55b2fbd2f1730b6a9273051308a302aac9b30b930f130a8ad4031573183317caf82319931be3165b09131a731d531c1b0a22a922c302e4e235e2f372f9c2fc92427332a300831d91c1035d130253225a5d234e2305c32fda54b32542fc1311b9fd02ce02f13326f19982b4330c532931d542a1a309232131ed129352f2631451ce829d32cf72eac168d296c2b0a2d048db4299c2b742c7196a22ae92b832c3e99852b4c2caf2cac9c4c2cb82cf72c4f9eb72c0b2d3b2dfd9fd12c2a2d5c2d14a0fd2c482d6c2dcaa00f2d3f2d5f2d00a2db29932c052ec722492d562e0b3013215e3111306431752178346a30d8310a187d346830f23112a1af312630de31b49b822dc02fcb31381a332c052f98310820412a642e70311020db29f82dba30f21ed02a562d8b2f001d212bbe2c462e0718882bee2cd72dce8e162c072dc52d9d98782c3c2dd72d8d9dfd2c982dfe2d3aa0792dd42d222edfa1a72d052e532eb4a2e32d312e622efba2db2d232e4c2ecba41a29f02b912d6524c12b032f97301b28322eaa2f0e31fc28bb32163072318329ad33153078311e28c93003307b312225f72c062f6a3154218a2c7a2ec2306221322ac22da130a61e412aad2d3c30b61ea92ba32db62fa01dfb2b5a2d0e2f8218642ca52deb2ef395b42cbb2db62ec89c2c2dfd2db02e62a0d22d6d2edb2ee7a24b2eaa2e082f16a4992e042f5c2f08a5e92e432f942fe1a4d32e152f332fbea6722a622cf42da426302ca12e23307f29032d8a2ffd3073290a30492ff330802aa6314b2fda30382ac62f3f2fb430af274f2c4a2ec03004248b2b5e2ec6309a228f2ae52d2f30a120032bd52d4430bb1e482cf32d16305a1c832ce72d942f14100b2d4b2e8c2ff99b442d5f2e782f8b9ed12dbb2e8c2feda0802e372fcd2f39a4212f9a2f0830d6a5892f0230313005a7d12f23304930b9a7c32f05302230b6a88c298c2c312e8026922b8a2e0c3066291e2ced2e77306829082d5d2fea300a2a642f242f8130c82abc2d4b2eda2f2128fc2a712d3e30a224222b912d50308824122bfd2df02ffd22452cea2d0b3095207b2c1a2e2830161bbe2c032e04304990612d802e0130419cc12ddf2e0330e0a05a2e322ffb2fd1a2092fb42f2430c3a5b12f1830533005a821305830863003a957308530ab30c2a94b30733095302faa83289d2c592e4e264d2a262ec42f5028d22ba62e293022296a2c322e12306c29fe2cb62d942f6d292e2d622ddd2e7628812c612d682ffa252e2c922d972f21242e2cc12dbb2f6e217f2c102ee12f961de62c602e0f30a416452d852e04302497ae2dd82e11300e9f3a2e422f3130faa1d72eb52f4d3071a4792f22307c308aa61d306a30ae30c3a88d30c330ee300aaac330d430013165abbb30d530f1309dabb226102c402dd823552a082f8a30e226cb29752cf12df8251d2a8c2d3a2ff425ff290c2d442fac25ce29bf2cc22e8224bf296d2c432e4d23b929532c092eb020dd29372cf62d9f169d2aa32ca22e3a99622cee2d8d2feb8f002d592edb2fa699c32d752f6830289fb12e12309b306ca23e2f11307b30b4a4c12f3f3085303aa743308230c5306aa9af30d6302231bfaaf4300831363144acfb30153140316eac1925eb278929f7201324d12614298b209727f229e62bd2231b282d2a382c892352279329da2b8322a527b5290e2c27220628022a432ccb211028f5294e2c9f217a27a0291c2cf620c0259c28f12a4e1f6a241427ca291c1d32242a261d29621cd624c026e928601ba02da62d1a2e66a1232f832ff92f71a5e92f27305b3022a85b307f30b830c8a9d530f2302c313bab0e3128314b315aacfe301a313a3171aca0285d2d822f9e214b2ac62e54308221bc2c05304931e21d012ff130c43254920f2ebe31b5331b98a82c38306b325016b12b8a308a32d11b262d58311833f1208c2c8f30f93164211f2bb72f0f31392036298d2cf62d011da929a12bcf2ccb1cf529bf2b942c601ca72a102ca12cc31a8d2b5d2cbb2cf819492cbd2cfe2cc71ab02c0a2d3a2d691bc82c222d522d6619f62c3d2d5e2d9a19f82c292d422d7d906729482e04300b24892bc42f09315d24ed2de83040320521622e6c311f33351bc62df930c9323711852db7306732fd10ef2c65306632cd1b082c1330df31bd1f9c2bb62f3631f120322c3b2fb130fa20912a5f2dac2f0c1f2a2bd92c572ee11ece2bf42ce12dd91c1b2c0e2dbf2d7e1a752c362dcf2d0919ef2c892dfb2d92196e2dd62d282e221a952dfd2d502e9117d32d252e542ee517c42d102e3c2ed09700003c26ae270000522cf62f0e317428512d3931bd32ba28702e3e31db327427152ea3306032a324162d5e30dc319b22502cbf2f8a311d217b2c0a2fe8305021cc2bd62ec5302f20762c0b2f7e304820882b622d0e2f871d172c4c2d9f2e281c7d2c942dbb2e191bbc2cc52da42e6b162e2dfd2da12eae10cd2d5b2ece2edd17452ea42e032f4018822ee92e422f6918a52e0e2f912f811b9c2ef92e382f7b980000052601280000b22c363034312a2a832d15316632752adb2de53042323529632e5c30fc310827372d35307531dc246c2c013080311f24b62c522f0731b723842b382ec730e120aa2c192fd130e71f722c3c2e1730861d822ce32d542f211b0d2d332e762fd8164d2d672e632fca10d52db22e7a2fe7178b2e2d2fc92f641b1d2f8e2f0030041c662fdb2f20302e1cab2f0d30383032198f2fe62f0f301f990000ae26272800001a2ce82ffe309e29702d12314f32242b2d2dfa306932362aa42d7c30a7310429e62cb52f11310e27052cd02eb1309025d32b4e2e4230f824bc2a752dfe2f0923a12c7d2e0f30cc1ec32d472f7c30db1df92c492e0c30bd16542d872ef42f3917d62de52e0330e9176b2e3a2fff2f5918082fa82f1e30f11b942f0c304630231903303f3077307019413078309c30b0133b3060307a30bc99e128592deb2e4526572c0f300c31b329882c9630c931b2298d2c4e30c3317629542c942f25319528522ca22e6f3032270b2c0e2e243098252a2c042e02309624402cfc2dc32f7b22ab2c502e0230e81fe82c872ed82fa616a32dfb2e22301891c42d012f10303691292e352f20302d18c62ea22f3c3097186b2f15306b30071902304a3093303e1355309330c430d413a330cc30df303114d330bb30d6305c949325172c4f2d54201a2a30304f3160221428f1297f2c381ebc2b9130c63142246b2b9a2ff8305725d82a9b2d702f5924812ab62ca22e2923ed29832c342e30213229232ccc2d741ab129062c5a2d6e963d2c8a2dc72ea90f092d592eab2fd316d12d7b2f5e30e217ba2e123099308f18402f113081308d129d2f2a307a30291927306530ab30a1198530b830fa301514bd30ed3042314814d130f7305f315a9497258428072abc1f9d240d2864297e2018284c2beb2cfa2342289c2b0c2d26241327402a3d2c1822d4272c2a422ca32158287e2a7c2c852152287e2a732c7d2143283d2a5f2c6a2111275229872b2f1e6d25b027ac29c01c8a244c261729681ab524e72610299519992da12df42d0f111a2f6c2fd72f6b92c62f0d3045304519433065309e30c7199c30c63000312a14ec3007312b317214ec3005311e317294d5289c2fbf30af22742a3a3193324824842c813218343524052d3e321e348522592ca4326e34aa206c2c813190337e1eca2d5e32243440204b313a339533ae25a1318832bd32f227aa30ad3172329626bd2c512e782f27227f29bd2ba52c851e0b2a892b772ccd1d812af82b812c821d8f2b652cb42c421f532cc92c0c2da420b92c172d4d2d9a21cb2c292d5c2d2421fe2c422d652d5b21f32c212d432dc020472a333025316825012c8b316333e526612ed7325c346227492ec73261347024812d313230344921542d59314f336a1d632d1a31c832421c5c3037322533e51e64328533ef33f0239e325e338c33ba223f2d382f63307220712b132d0a2e6a20f52bf52cc12db820322c142db72d1b1f7d2c3b2dc52d4f20f52c8c2df92d7022732ddb2d332eb1239e2d062e632e4c23e32d332e6e2e7d24c82d122e492edb22a62b2e30e6303c27832d043280339d2afc2e64339534312c152ffc326e34802af32dfd31e8338f272a2d0431c332d024052c4730ca31ad21542d9b30b2311d21ed32cf3311340a23063479348834741d8a2e2530f030631b2c2ccc2d012f201e752c862d822e4720d52cc82d892e18203b2d0c2e972e9d21d02d682ece2e1a244e2ebd2e0b2f2a25802ef12e3d2f5325d82e202f552f6026c72e112f322f2b25682c9030a6318929532fc7322634d82db73040342f35db2e19303f338934922cc02ebd317d33dc28912d0e31d132d125db2c4b309f318624452bf62e85308b211e2fce309b3107229b34d734d6343e9e72312132863289a1d82c832ed92fec1cd32c032e1c2fa2205f2d562e3b2f2821df2db02e5f2fa0239c2e382fc42f69252c2f962f03301627672fde2f23305127bf2f133036307c28bb2f02301730a427262c773052315429782e6632f233582d2630c533c434622e242ffe328034e42c862d4831be328929ad2c6c30a83143270d2c812f2031d525ca2be82e6a302b25522c542e4a304524bf34d634b1348ea884358735183534ace52d2e2f3d305311542dce2eec2fd31ff82d012f03306722912e5b2f0c300225322fd72f2b30b426b92f1c304d304128073046307830e42847308030a430eb2954307e309730be295229382f60306226a22d0e32ba33652ba32ea9322b345b2c252eae312233602b712c7830ed3194283d2cab2f18310f27222cb62e8030f4251f2c592e28303c25502c4a2e083043243b2d172f50306e20942d352f2f300a91e92d462f3330ad1a092e4b2f26306e20392e432f17306123e82ec72f4330e0248c2f29307030082719305d309930fa285c309c30cd30472aa930db30f630802bcf30e030fb30bd2b1923682c482d501e512c1832d9336f27a32c7030b731fc27162c1f301831cf26bb2a912fe630d924e02a1d2fa83092234f2b502d9f2fcf22af29842c512ea7206b28822b0a2d3d1ea628182b972ce01b162c0b2d4b2e001eee2c362e6e2f2d20ea2d842f5830ad21d92e1730953072245c2f213083309c25b62f383084309f273c307b30bb3061298c30c830fc30102bda30ff302131512cfb30173139314a2ce92458292f2b3a2048259429342b56226c28852ce62d9e23a328d32c432efc232428122c402df6215528342bd42c4820a428282bd52c9620bd28392bbd2c3821d928182ba12ce32187287c2a4a2c7f21a9273429252b6f2024260128c729a1179f25ea277729b7157d2dad2d022e4521322f912fe52f7c25fb2f28305a302b286f309230c330e229b430e43014314e2b0e31243144317f2c193130314f31892c5b2aad312433a422e12e2736bc375729a72f8336183882292b2e8734be351826c32db033f4341124692fdc33cf344722902f913379346822252d4730803085214e2e19303d30182460312b3250322925d02fb7301a313124842a4d2ce92c3b200c2a872b492cdb1f672ad02b5f2c8520752b502c982caf21582cc12c052d9f22c72c1c2d502dd323d52c2c2d632d5e230a2d4b2d732d6924052d3e2d512d1c24dd2aee311a338f23142fe6356f377f2a28304836f437ec2a8f2e9634d7353927532e5d33a23477241d2d1432c833821fa72f7932ad33ea120632b4331d346ca4f632e8332e3421a8e133253425343aa8f630b131e031b99a1c2c6b2d6f2ee020cc2bf22cb62d8121442c192db62d0622902c4b2dc52d79230a2d972dff2db224812de22d372e7025af2d172e722e9e251d2e512e662e0b26f22d3c2e5b2e3626d92cea31f032b526d331e6362938552e33322a376738172f6b300c354136dc2bb72e30337b347528332d7b31f8328d24072d04315d326521b9315c331e34d1a11e348934b434beaaa334e334ca3495acd7327a33c0330ea8992c3c2e7d2fca1f712caf2d8c2ec521f22cd62d822e8a234b2d0f2e932eef24dd2d7b2ed92e7526612ed62e1c2f0d28972e0d2f562f3028ea2e602f9f2ffa28f82e482f712fd228ad2ee3321434c02903358b383e3970320e3583385b39c732d0318c35b236282e4f2f32336a34ad29772da63123330526fe2c9030c931a724132d59305b31042204349634cd3437a98d35be357a3577b06b34a1347e349eacf72cce2eb52f2b1eed2c412e482f66228c2d742e3a2f8b24f72dba2e562f3b26b82e592fcf2f7528602fca2f1430ba29af2f12303e30f729073048305b30642b10303b305130af2bbe2d85328733f228ea330438bb38f9300d34e437be385231023114353536ba2d952e8a321e34db29f72c2331bf326e27852c8e301632c3260a2c05301a31d125082d123043318a2558358f356735e7b0f5340335af34d4b0b12df12e0c302e20532dab2ead2f5c24092e122fe92ff725a02e7c2f0c3035286d2f0f304730fa290f3050307b30ae2b46308830ad30672c8730bd30d2304e2da030d030ea308d2d942ccc3107335526253222374e38b82fff31d43631381b30d72f5d346835432c5b2d6f31ef32c328582c9230f431bf26062cc42f53310526112c182f8c30a025482cb42e1430b724ab2ccf2e03300221de2c842ec82f251fcf2c4e2e732fb421db2d0f2ff02f77247c2e6e2f2230c6262c2f05305730c228e02f4f308830c82a5b309a30ca30bc2ca230de300431d22d053130314a314d2f1a3147315731902fe128a82fbc30a62198307836f4378a28b630ef356d37852aae2dae31043317286a2c1f3015315d24d92b41307a311921442be52d832fcc1fcc29b22c1b2ee01e2d29112c232d4f1ff429282cf92c8a20532c362d3b2e1b22072d6d2e862faa23f72d9a2f55303925cd2e0f3082307d276e2f2d307e3059290c306930a630a82b8830c430f6304f2dde3017313d31f12e3d316731843141306f318c319d317d301126ff2b172da71d7427ef2c052e0d23eb287e2dee2e6a21c928602dc72ed61f8228a42cdc2ddb1d8328072c402dd71cb628852bfe2c961de3287d2bca2c00203829782bad2c0b225e29472b812c04248929232b5e2cc4241629592ac62b7622d628c729f82a481ec92d162e762eb2268c2ff42f2030dc29403065309130242cc830e93010319a2d1c3145317031492f8231a531d1318c306f319f31b231b830822ac331f8326ea2562ec7354f37a7a0053016376c383825ba2ee235723738237c2e12342935c3208830c134e5351e1d743242354136d595343249348734029f8b32f4330f34cea438332d344d34eea67330a2311b32081ab02a932c302dee1f5829ef2ae72b1320682abd2b3e2c3f217c2b4e2c8e2c8d225e2cc42cfa2c2723ce2c1e2d482d7a24e22c352d622d4624342d642d762d24252a2d612d772dfa25712bbb31f532aca19c2eb63520371ba06830ed3661383a25143058360338d423ad2dad33d934b1179d2dc7324e34b59dd630ed339c3460a7af325d34a8340fac39334a34783433ad423315340a34a3ad8c307a31ae3164a5582cb82db22ea920af2be62caa2d4b22362c082d8e2dd9239d2c542dbc2d8f242e2dab2d082e1e25a82d022e492e3b26d72d3d2e8d2e6e263b2e8a2eb92e2228302ea02ec52ea1280000ed2886290080d3300d368137739db432ef37e6381c29f13113375a38b827552e8a33b234701e342dc8313b330d97dd2c0a3145321fa08c316d332d345cabd533a634f03486aee53349345c345aae4830363187311ca48a2ce12ddf2edf20862cb22d722e6823ed2ccb2d5b2ede245a2d182e8f2ee525fa2d942eeb2eeb26952e072f432f8e28ed2e622f9d2f2f29602fcf2ffc2f8f2a6e2f9f2fb52f3d2b371f772a712be4888d341738e53832a3ef354439423ade2e023586385d393b2dc22f0c34ea342924da2de83145334c20c92cb130d331f21de82c6b3070316f903a30f331f5320fa499327c33b1334fad4b2ef52f68304498292cae2da72e58224f2d7b2e602ff224932d772e2b2f23260f2ed42e5e2fb327f32e902ff52f0129bf2f16303e30ac2a23305e308130982b66309c30b930082d74309330a830782d5518912a432be584003343376b3859a4a63494388d39e82d0434c037b6387c2bda2f92339b343624912e10327433f927922d3b317b327c280b2d9830d0318c27432c9f2fad30b124bc2c4c2f6a307c1bbd2cb42ee92ff51e7c2c3b2e6a2fda23892dc72ebe2f7825fd2deb2eb22ff227b82e8a2f0c303829db2f45307a30352b6830b030d930ca2ccd300d313031c32d2d3152316c31872f30314d31623123309623d02d862e649c7d31c436243894a1d03212380039b62cd831a3361038c629bb2d4d32ae33b1245d2d8131d432d126172dd6300232c1268f2c0230f43047255f2cfb2e4630a7236e2cb32e02304121ac2c6e2ea42f8a21f52c772e622f0f24cb2df82ec12f0d268e2e8f2f203059286e2f24306d30302a2e308730bf308b2cbc30043130315a2e58318f31b3311d30e2310a322c325b31ed3115322d32bb310000b829832a008005300f367037cfa28132c0380b3a589fc93024368b37f221912b0430ce302195232a1e2e952f8b8d2e2a522dc32ee318e929012d5e2e021d632ae22c102eda1e1c2b072d472e9e207c2ca02d9f2ed6223f2de52ee22f9824182eb72f57300626cd2e08306c30b428982f41308e302f2b6230ba30f630622d0c3146317731a02fc031ee311232283154326f32903291329032a332c3322e330827bc2cc62dc29d1a28db2d0b2f069a9f28a02de62ebe9987281e2d5c2e599c7428772c8e2d489d92280e2c1a2d2995a7289a2be02c5b17f328812bb92cc01c53297e2b952c5c20d429a72b932c08245b2afd2ba62ca725d22afd2b8f2c4226052c702cd32c04267d2ed02e3a2f9629ea2f2d305430142c8c30b330dc30b72d3f31623182310930e931093227327731af328a32bc32ef329e32c232da32853355271530f230a4a56b2c2e343f35ccaa2f2ee5356d3726ac9b2d9f34c23525a99d2d9c33c934eaa43c30c334ac354ea08632ee35f53687a5d1325535ee351fab1433c53419357fad3132bf330b341cac722e5f30d73076a18d29312cf62ce51a9728542a172b711d3b2a692bf72b6620772b362c792c1d22512cae2ce82c8e23ce2c112d362d0525f42c3d2d5f2d9d24362d722d9c2d7225452d892d932d1a2600000329e6290080422cca33f53431aaff2ef4356c37fdace52dc434f9353eaafc2cf9324c3415a48f2cdd316533eca1182f9e32dc339ca6d63109345834bfabc43242348c34a3ada131b532d8325fac3c2d382f09306fa0e02ae02cb62d601f8e2bc72c622d3022242ceb2c5d2d4023aa2c422dad2d9c24422db02d0d2e3225c42d0f2e5b2e0027012e612ea02ef326562ea42e182f9028812ecb2ee92e0d290000ad24a92600808a2e3b342f3520ad3f31ac360f381cb0473055358236e4acb32da2320934a2a5972b5830763180a37f2bda2ff230d5a3c72c43302931bfa20b305d32483340a5252e7e30003183a0c22b8d2d522e221ae32b252dbc2d3b204f2c622df62d9222ee2cb52d3d2edf24812d1c2e8d2e10262c2eb62e0e2f7e27db2e3f2f862f2129562fd52f04307d29dd2f18302830fe2afa2f14301e30ff2b00008826892700801432c335cf3647b1ed349538583923b466324636723762b0fe2ee43229340ca82f2c8d30983161a2f02bef2fe9309f9fbd2c0330dc306c16352dc830b731c322db2c8e2f6430ad1bdc2bf22cdb2de21cc92cf12daf2e0e20062d1f2efe2ea923972d722e2e2f28264e2e002f832f2f28462fc92f1f303d291e3048307b30532b7b30b230d5303d2cd530f5300731872dfd30213134318d2e0000ea259d270080ae301135183610b06233d837ad3869b257319135b03650af192f4a335e34cf982b2f47334b34602a3e2ffd322334422bae2eb7311533cf282a2d1e3028313a24422c862ebc2f16204b2ce92dde2e9b209e2c092e2b2f0a23332d582e512fd8240a2ee22e982f0228142fc62f2230b2293f308c30bf308e2bde301c3149316e2d7b319d31bf31bb2e1b3202321a32703025323632493240312529762f7e3008a8e02fdb34e43565aefa31b2361a38dab0ac2fe6342c36eeac552db831fe32dfa5f42dc631f132b51ca42d37315132f024fb2c0930da307822232c862e1030021f322c122e3c2f1b1f612c012e092fb320132d732e5b2fbd23ce2df52ea92fbd259c2e9b2f19306328c22f43308230ae2a9630d5300331fc2c7431a131c2319f2f56327d3296320e31f13217333433e932353349336f33c933a727172d262ee3a5572cfc311c33a9ab67304f36bb3746af042e14342a3538abc32a322f9c30a2a56c292e2d592ea89fed29f82c292eaf98e529cb2c092ea918572af12c0f2ea71c4c2b6c2da02ed41f772c322e2b2f4e223b2dfe2ee32f4824f62d642f1f308e25c62ed32f3f30b02803305630a430d12bf43025317631152eea310b325032b83002331e334833ae32df33f0330334a4343034363443345a35ed25422c1e2d0fa44d27272d392e34a53827d22cf22df1a4b526d52bf52c7fa42827ec2a6d2c60a31328222b782c7da065280b2b7a2c369d0e29662b992c2399c329c12bae2c82965b2a032cc02c2120be2a162cb42c4924852b3f2cc12c0d261c2d762dd42def27ef2e402fa22ff9292c305d3074304d2c08312e314531522e1232273244320331303346336133273315341f342d340b35493450345c34d735cf25312d5b2eb3a5ac27702e1f30bea70e2a26318732f1a90c2afc30873214a92127512fe5307ba42e260c2c4b2db69c02280b2da92eb29b7f2c412ed72efba6792eec2f5d30daaaf22d232fdb2fc9a86d2bcc2c8f2d67a0b729f92b962c74163c29e32ad42b9e1d2f2a442bed2b5d202f2b0f2c542c4a223a2c922cce2ce023c32cfe2c262d3e25fa2c2b2d492d5b24572d932dc92d7c264c2d912d932d3c25f728402e832f85a82e2a8d30a231adaad12bf1316b3363ac482b10317132bcaaac20ef29292c179853206626fd28e803b821dc27a429c08b1726e428c729d9993629742b612c26a19a2be82c642df1a3de2ae72ca32d12a0912a702c242d3119272b6a2c132d3e20fb2ba72c182d15229e2c222d822d4d24322d9d2def2d2225bf2d0e2e532ea726252e712eac2e1d27aa2eee2e0f2f6c28ca2efd2e0e2f50280d2a542f5c3006aa812c4731523270ad5f2d8832e133b6ae942c49317732b0acdf207b28072a6d9777201b258b27098460229c264728330fc62494276828da1450275129322af5904d297c2b2e2c969ae72a852c052d7599652bb22c472d841b2d2c032dab2df420c62c702de02d2e247f2d0d2e682e6e253b2eae2e062fdc26032f5f2fb12fda28a92f09302430bb2924304e305f305e2b55308730a530762b962a212f14302faadc2dfd31083328af112f50335134aab00a2d5031643296ade8223a2823290c9ab8218a2569272b85c82319276228e9138e24dc27cc28b717fc2670298e2a21198829982b722cff0c302b972c2d2ddf14212c3a2dfd2d211dd02ccf2da72e40227c2d3b2ed72e1c255d2efd2e6e2f5e27882fff2f3130ff284f307b30ac302d2bd230033124318f2c413163317a31022e9131b031c031862ebd294a2e5b2f63a9192d2e3110325eae6f2e25334b3411b00a2d9b31e43215ae2728f62c152eeca515233128c02966864524a6270c29f51bbf2559282b29771b3b28102a172b4d18142a712c2a2d1e148e2bf72c9e2dae1b252c492d2e2ef51fec2ceb2db42e8123f42dab2e4b2f8e262e2fcf2f2030c4287330b430e230e92a43316f31a531462d43323f325332842fcb32de32f23209312f3354336933d53163265e2deb2e16a67029572ecd2f1aaa382b1e30b83027ac512e693452350bab612aee2f7d3045a926289d2cc12d9da31c278d2bbe2c069a7f28962bcf2c149595294b2cb52d9193a22adf2c092efe0d952b312d412eff19942ccb2db42e6520942d802e432f4124a32e722f0730ef260730543092305829f23022315231662c25323e326d328c2f74338e33af33f23136344e345c3412348b349834a234f834ce248a2ca82dc8a49c28712dc52e1ca94229232f72300daa6229c32e6930d0a9c829062f76305ea82c28652d162fc6a1c2287f2ca42d2aa04829862c8a2d909a172a122d362e2094ef2ab42df72e7b19282c292e372f0b1fcc2c502e2b2f2621962db92e632f9324af2e612ff62fbd273e308430c430962a53319031e231562dcf32fb322033c2303c3447345734f333fd340f351a3505366b3573357a358937dd254a2b5c2c17a567261d2ced2c03a66925952bc02c14a5aa24e029a92bf8a37b247d28b429c8a3ad250629692ad9a12c279329f72ae69f7028312a932b449e5229e22a202c1c9de5293e2b3f2cfe19782a6a2bfc2b4c211b2c6a2ce72c4a24862dd02d472e1526022f582fc62f742854308430ae30f72a75319731c431c72d0e332d334e333b3172347a3488345d3445354c355435cf36c435ca35d1356038b423402bb02c1ba44c252a2c532d05a694275c2def2e5ca894276f2e35300aa81b26e32c902e4da52925442a232cc1a10c24882a8e2cd49db825fd29d02b69a1ed274b29e02a0da3bc28322a172b7ba11329722a702b2a9f96294c2b232c6b98df293e2bf42bf8198d2a4f2ba12b4a1e5b2be62b122cc720202c682c8b2cd321972cd32ce32c0424062d182d2f2d66244a2d7d2d0b2ea124602d832dcc2d02256124ba2cfa2daba49c28162e9d2fc2a9bf28b52e5530ffa90e29192f803075aa09244d2bc42c53a273232129d22ae39f3c24fb28d62a249da2250b295a2ad79ec427052a012b27a12129872a472bf0a17d294b2b0c2c2fa0192a6c2b162cd298422b1a2c702c1918e82b5d2cb32cb21e8b2ce82c1e2d63210c2d782da22db223a72d022e272e44254d2e872ea62e3a263e2f182f422f4b24052f2c2f512f8a26f826a52ddf2ed2a76029ea2e59302cabe129742fba300cac5d29a72e143075ab8124ba2a2e2c0fa30d215027a228469b6223ac270429a199c524ac27ab28a89969271529172a3b9d3729ac2ad72b989dff29ae2b572c6f9ecc2a082c6a2cad97202ca82cf32c861a8f2c0b2d442de4206b2dbe2d042ea6232e2e8e2ee22ec225192f792fb92f6a27f92f26303a30d72857307030863006299630aa30fa309129000072252b2600800a29492e1a3082aa832aaa2fc430b6acbf297a2ecd2f28ac3825f02a132c75a40c2405293d2a0ea046241b28ff2811994825f727d828c1973b273f29562a7e9837299b2ac52b4d99312aad2b532cfe96232b352cac2c0818a22c502db12dc11d582dd72d262ebc21662eb42edf2ee124982f0630343081278230ad30cc307929393152316631852bce31f3310632582c253248325d32c52c00006a269327008069287e2d302fc2a9d829c62e433030acf3295d2ec92f63acd326092cec2c5fa7ff24a329442b8fa27625f828292ab49db22593286a292e981628d729b72a13996329082b2f2c1596a52a212ca62c018eaf2b8d2c042d131adc2c992d092eaa20f42d5d2ea42e34245a2fbf2ff72fda26ba30cd30ec30f0289631c031da31062cc332cf32e332652eb933df33ec33be2f2534363444349f300815ab264328c290d525282c682d34a7e327072d642e5fa96f28222eec2f6aa984262d2c7d2d68a7f925e32a792caca3cb25c4293f2b5c9fdf268029b42a5f9b6928c52a102c7a9a132a112c842c259df92a8c2c4d2d4d8e842c372da82d1410bd2dfe2d6b2e7b1ab92e332f9c2f5e242a306c309c30c32741316d318c31ad2abc32d732fa32cd2d3b343b3448341431033509350c352533813589358f358c343024c1299a2b0da4b925772ba22cfda66b272d2c252dcba82f26592b812c1da748263f2b842cdfa6f126862bbe2c89a5a328022cdf2cb2a59e284b2c342d63a27529a42c7b2db3a1bb2a9c2c1d2dc0a0202cdb2c402d0e9eda2c012d6a2dee9c782dea2d482e0420c32e0b2f602f89257630aa30d0302a29c031e3310d32242cb133c633db33b62ff734fb3407355c3334363c3639361636e236ec36eb36593882225929822a92a2a1240d2a692b00a5f824262ac62b5ea59d242029b82aeba460232d284f29eca26824a5276828179f3b252227b12723940a26a4274928d2123528c32842299a8b3829062a852ae515a02a862b182cdd1c392c992ce92c8820802ddb2d312e2523fd2e712fc12f1e269330b530dd300929033207322832542c0034053410341f303d35423552354134b936c236bc368c378d3793378b371a3af0242629142b08a62224ef29832b57a59e24142a4e2b18a633244e2a892b9aa55524ed29972b4aa52724fe299b2b40a43f254e2a122c7ba3c522302a922c989eed25be29082b45a10b27cb29ee2adfa0cc273129f729d39e9b2822292e2a769d5d29d4293a2ac19d0e2a752a992ad09dfc2a352b522b579cd62b232c3d2cf79b6b2c9c2cb02cfd980a2d172d172d8e105d2d722d802d0f1a502d6e2d682dcd90051f31230125d49bad23a829282bd9a409263c2c192d3da8b524f02a492cafa5ed1e8f239924559bd61fa9273e29eb9dff214c279f28599e9a221b247224459be6243a2827290e9ff727a6299b2a49a1e8274529f6295e9f1d218a214322a496b6292d2a842a7c9d9c2b2a2c5f2c729e5c2c972cd02c6a9df12c2e2d552dd09bb72de42d0e2ebf975e2e822ea42ec191e22e152f372faa18d92e1f2f3a2f3012fb197a224424ac962325102b7d2ceda65e27ea2cfc2da4a9cb249929c02abca6bd132a1d5e1f928dce19171d0c20368b1621a2261728769abc1f7d21a521a597b1255b280a29f29d9728d829892acca074288829222a4b9fc6203821e721a995b12a8e2b0a2cab9d8f2c1a2d5b2db19eb22d8c2dad2d1ca2252e692e9b2edc9c202f4f2f7a2f7012f62f143024307f1c743088308f30081d7e309330a030171a5c1e311ed0207a99df25702b982c15a8a826472c232d25a9cc22d9261128baa4181e44217822f89a14228028d12913a020238a276e28ef9d6821572260226d98f42503287d28349cc528172ae12a469fcf28112ac02a3f9e4a21f4218f22ad95892b192c512c629e3e2da02de32db29f432e852ea42e5d9e722fb02f06300c9984309830b23014944d315b316731fd1d093217322332c52016322f323c32e01e461f042057220f9a5425b62a212c69a70a27452cec2c64a986257b2aae2b37a7b320f4221624b69c042432284229d7a114245d281a29b79fbe2141238123b4986e26f028a8292d9c2029a62a982b3c9f4d29912a332bb09d4f20c2201c212394602ca72ce02c699f672e092e392e98a35d2f802fa42fd29d9a30a730c330329da031c731e531a01be232ee32fc32712122342b343634222536343f346734482417279629402b21a8b025052b772c1da86825fb2a772caca7a225c62a332c13a83825f929c72bd1a6f8246029682a50a4c725e428ac291ea2bf262029e1297aa03328ed29ce2ad39f4329c82afb2b03a0ec2a022c752caba1e22c6d2cae2ceea54a2d7e2dc52d14a14c2e862ebc2efa9c07302b304530759927314c317531a814ce32e4324133612177347d348e348a24973599359f355e29c335c935cc3588295a20aa2318259c9c6e2279289b29daa320237f28692926a4951f0d232e24839d31236027bc2890a3ec24952885294ca38b258f2869293ea1d726fc28c52927a06c281d2a222b5fa07d29a42a742bcea0b02a7d2b0d2cee9f222c4a2c952ce7a0452d8a2dd82dbd9fb22ef02e302fce9e5f308130a130ed99d231e8313932e31be533ff33123403245c356835723525291b3720372937382e623772376d377b3021247828c829dea41524dc28d929fca43624d528e42924a50d243d28b82901a5482426286429bfa40f261e28c62843a5c5251828b1289fa1f62659284e299ea018291229c72956a39729012a7b2a94a0e72a562be02b18a0242c572ca02c049f5b2d912de22d729dc32ef82e442fa39b6b3081309f30fc93fb31133231320d1c1834243432342924be35c135d435292ae037db37de373a312c3824381d381839 m_StreamData: serializedVersion: 2 offset: 0 diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - NoPointsVolume1.asset b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - NoPointsVolume1.asset index ddf88fb..e996a5c 100644 --- a/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - NoPointsVolume1.asset +++ b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - NoPointsVolume1.asset @@ -6,7 +6,7 @@ Texture3D: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: QuizScene_Bakery Volume - NoPointsVolume1 + m_Name: m_ImageContentsHash: serializedVersion: 2 Hash: 00000000000000000000000000000000 @@ -16,11 +16,11 @@ Texture3D: serializedVersion: 3 m_ColorSpace: 0 m_Format: 48 - m_Width: 59 - m_Height: 24 - m_Depth: 44 + m_Width: 20 + m_Height: 8 + m_Depth: 15 m_MipCount: 1 - m_DataSize: 498432 + m_DataSize: 19200 m_TextureSettings: serializedVersion: 2 m_FilterMode: 1 @@ -31,8 +31,8 @@ Texture3D: m_WrapW: 1 m_UsageMode: 0 m_IsReadable: 1 - image data: 498432 - _typelessdata: fd1268033109121a10196c16b8170e23c61976135f133522b6961b982193cc1b219aba974894ff1bf694cc97f2953621b519b9939594cb2005a1ff9c019c101fb8973595f392581d0d146902db089c1d0d1d2f03860fe91fe01c840de216601b351000001c100000008000804c030000008000809590000000800080b20e000000800080381c000000801ca0a9a1a98600801a956c8f000700800080c29f00000080b48eb309470b00801d884b1d2d0900806196981bd01db298949ed1277225e69ad59e581f46220080d99a9b9e841500800e9b5113ed1000801ba2f29159230080519cf7a4ea1d0080008046a4000000802d8d77a1840d00803f9ccda4251d1b93fd9ccca21620ca8d5e99149e511d2481bf8b7e04a21838050c100610cc1913911c98b99b101c3c95089cc69dc01d1b98b39d06a0291ea598709e81a0521eba98ac9e8ba0351e69981f9f98a0501ef898609faba0371e699904a004a1761e629924a01ea1781e759943a041a1781e579938a046a1501eeb9949a060a13d1ef99a72a07fa1441ed99a5da08aa12f1eb79a39a01ca1cb1d599acc9f98a0481d4b99729f5da0e31c2699fa9e1da07d1c8299749ecd9f3c1c5c99179f04a0ae1c6099629f49a0801d5399f79f17a1b41c3398d59dcd9e641a0402930244026c18b117fe19f31aeb236d149e14ce159f21018ca18eb78b5418d2949795609412199b8f5c94e394232279188f095e047d207298c995ef9465168d8a368c2989b916341996889689361f3a1c94157d18a522181aad0f05178521890308818e01e20900800080ec810000008000806b9b000000800080070b0000008000808516000000800080ee170000008000806219000000800080d71a008000800080031b0000008000804f1a000000807292a71ccd16b999e19d87280d24f49a269ca52454210080e8910c985a070080d28d841c5909008016995621351e81974b9c2a1978210080b388a19deb0a00800080069f00000080639de1a4db1dd2948c9ea9a357227f91689c68a0c11fd488b10aad04b2134912f619f71aae115e96c89cff9f671d7c990c9f37a138203c99989ebaa0af1f8d9a09a09aa11b20559bdea06fa23220539b3ba1f3a251205d9b41a1d5a22320149b5ea1f0a22a20d89a05a128a24e1f869abfa01ba2c81e459a8da0d5a14b1eac9a82a0c2a1271e749a60a089a1e41d5a9a48a058a1951d6a9a4aa064a1841d299a4ca07ba1751d3599fc9e65a04b1c4d99549f51a0821cfc99939fa7a0c01c7f9aa29f94a0fa1c209a9b9f92a0801de498b29fc8a02d1d9c97789d539e141a23097c07470c2218c817021a061c0b2240148518e51864211f0c010c430dbb1a76901c9210941a19c5829b04bf0502222c151814b3147e215b82708afe8bb019c801a5880b89191a1b0ec38ee28dec20c614400f6e153c24f114ba1115187b22cf058b83dc06ef1100800080b48a000000800080bd980000008000803d830000008000800f14000000800080f5160000dc821b81a9193d0000800080521a0000d48c7184e61a270100800080591a00000080c0946a1d0a15429a0c9d5b286720579c709c0f27362000809892180c47140080858e4e920f106d8d829b2e21aa1d8f977c9d47a137200080d09377a10f130080f08f959f90100080799e3da31220cd95529f77a34e22a2922e9daba03b20d78f2a96199a8c197c069011d90bf917f895a19c4ea0d51d5098f59db8a01e20579a26a009a26020dc9b26a13da310212a9c77a181a33321ef9bada1ada32821a99b94a172a3c120da9b98a196a38c20499b54a1d6a22320bd9ae0a02ca2541ff09985a0c2a17e1e139aaaa008a27c1eb39a9da008a28a1ef19aa7a025a2821e0f9b83a0ada13b1ea09a90a0b5a11a1e0a9a8da0cda1e51dad9a1aa011a1361d3c9adc9fcca0071d219a519f8da0bd1c7c99cd9e3ca0eb1c7098e89e54a0971c66983d9e6a9f471a2106d80b5c0d0019f014e6187f1a7521c109120829098913c0806e871b880c141d94fe95f798f0188882de047506bb223c143a162a184322930908087f09c0167f00168167013413e8006f011d06a41555104f0d66153b24ad0ec08d0c10e2243f804f804181300100800080508c0000008000801c99000000800080d589000000800080a30f000000800080be14000000800080f2160000fe8504897819ce0395880080ff19000000800080191a000000808b94961dc016299a129dc228b5204698559c752674201395c098c00eb31c0080fe9cc8203a21119c809ffb214a22f68b749cdb976c1f0080f68df0a19511008033959f9e0d180080c39d69a2c020ea98489f30a21a228f97499e03a1fd208a90e6935d97dc1665847f109a8f9f18629a6fa056a36f20a19c9fa142a46f22d59cdfa14aa4ae21e69c38a27ca4bc21109d4aa266a45b219c9c4fa257a438213b9cdca1dda3c7200a9cf7a1f1a3a620f09bd9a1a2a35b20bc9ba4a18da313203c9bffa05ea2fd1ee09ab8a0e8a1651ed79917a040a16f1d0f9a21a071a17d1d3d9a36a038a16b1d4f99ad9e80a0441c6d97f59d10a05c1bb998c49e38a0181c6698ac9d559f021b2b99fe9e32a0521cf599fe9fd7a0691d5f99a4a0dfa16b1ded969a9df19eb91a750bde0e8711701986141818a719b820620f55116212411a120a7603af0d461c8d97559a3f9c831ebc8bbd89fa8bf31f8906710b670d4f170080ea81c8868d095b8022847902ff100b01ba02f10cdb18660d020d1b164023e00a208c5213eb22da8015852c85820d12800d901394d9120080af943c9a2914008000802c900000008000800000000000800080bd0c000034947c8f551326102598e199151c601ddd965095141805160080008025180000728efd96d71ce418ed999e9e882714224597e39c742646210080f197da151019008064972890b517d987d596e71e181900802b92469ca21200800080469b000000802292829c80129889829e95a161205a9951a055a2f5220a93209db3a00e20da912998e49991164393b998059c3519569918a011a37620849b6ea144a4e821109cd4a175a47321a69c0ba291a47b219b9c38a295a435210e9c4ba2d2a41e216f9c24a248a4c9208f9c08a21fa48e208f9ca5a1aaa32120d69c48a10ba3631f529cfea07aa2e41e099ce4a073a28b1eb59bb9a024a23c1e9a9b79a0b1a1cc1dd99a3ea061a1641d1a9bff9f03a1141dfb9941a07aa13c1dfa9a68a097a16b1d519a0ba022a1231d2a9a349f91a0ba1ce799a09fd4a0321d4598819fc1a09d1ccc998d9f4aa0191cde06cb09f60d7d140a11b7149015c21c780cbb0e89107f170d037a825d0c1a18a3921897b698961866890b8d4d8f031400002b02a701270c00800080d88700000080518db2916e105e94e49c7e9f1d1c1e93dc99ac976c24c8822590a1880324fb809a89cd8cb61073855590c392b9139381bf973c9ad91600800080748f00000080008000800000008000800083000051949d919b05e5120598729a79180d1e0d952d954014a81500808d895c15420800800080be160000008009949d1952130080df99bf23aa1c00809295c01141160080b2931092c11200804199e41b1e1a0080db94599b86140080008014990000008098951c9ce915cd94b59f30a23f21c59ba7a0aba2e722d794ae9d18a12d203d921d97d2993f152394b798619c81185099ca9fe7a22820039cc5a14ea47f22bb9c1fa2ada41f22b59c2ca2a6a4e021119cf3a152a43c21db9bd0a144a4e120f89bc8a124a4a220fc9beaa10fa49c205f9baaa1b9a34720909b7ba18ba3e91f569b47a134a3621f859b5aa129a34b1f1c9c50a1f4a2271f089c26a1e4a2ed1e4f9bdca049a28a1ead9ac2a033a2351eaf9a43a0aea1741dc49a4ca067a1801dee9a69a088a1c11d5c9a3da078a1a21da899209fc6a01a1d1797ca9d629f1d1c01964e9d849ee119050b4d0efa118717ec11001710188d1db9115115dd15561c4a1424159217c61ff68eea91e992f21c81848b88c30465190801cd071808d312008071858c8a780cd082f88f1b93c7136d983a9d3aa08b1c6094ad981594fa233e87af055013e2228b83a38aab8bed13568b2e8f8593021378821798bd9b0e170080468c848de80c008000800080008000800080d781008000800080e687000043904587b003b40007907b90ed041f050080008048100000008000805810000000806b93f912b1120080e7981f1e2e1c00804295ea950e15008012903294c10e00807a9a0595081c00805094879900140080c887c7962b07008005943899ea12ad81819caf9f3c1c19956298319a7e170080f190439518100080088a15902b053f8cfe8f9591e712a899409f2da2131f999c9aa13ea40322ab9cf1a181a4bd219b9c12a2aba4c621849c1fa292a47521679c20a276a44c210b9cfda138a4f020ea9bd9a111a4b020fd9a94a1a8a34520c89b6fa192a308207b9b3ba101a3691f879b2aa107a3161ff69b17a1a5a2cf1ef29beda0a0a2971e359bc0a058a2451ea09ab1a04da2011e989b10a1f5a27a1e349cd3a012a22d1eab9b61a067a1b61d1a9bd39fe6a0231dcc99119f6aa0ef1cf1987a9f0ca16f1c9b952c9d459e2419a205cf08210e3514040efe124614101b000ab00dde0e0b157c004e01f2052914e88bf88fac915713f583a1856f8a1510000025013007010800800080d08000000080f3804506820c4a807f82e30e9a18cf88348ec0148e245e8c15945f0acc25388277861a8aa50e0080fd8ed6907e120080d0949999f61500805f847f8722050080008000800080008000800080008090880080de890080508d7f83a38c218000800080a38c000000800080b18c000000800080e58c0000468c1995e38f99140080e79b238b491fc38d2298c596a9180080ea947d966b13f78bf99c559d991efd926698a09b411700803e8af9967e0800807095499a3213458b899ccb9f891bdd955d99139b6d170080cf943998b1110080e78eac93c304708de5908f94a6117599309e78a1681f389de6a153a4e922f39daca2fca4ca22359db5a226a5b5223c9dafa2f3a42a22269d99a2f6a4ce21de9c11a279a41821f29cd7a131a4c320089da6a1eca36720369dc3a1f3a33c20b99c53a157a3961fd09c54a164a37f1feb9c51a145a33f1f349d3da126a3eb1ed09c1ba1cea2741e3d9c0aa1e3a23e1e759a8ba043a2741d839b6da0d1a1441d929a7fa0e4a1921d119b19a04ca13e1db699909fd8a0401d88982c9fbfa0721c93986b9ea79f481be506bb09960e5812d4105c14bf15661cd60bc50e750f1415df02840b960eb3143286748dad904d14cb8010816a82b20f00000000f907000000800080350000000000ad00990a11098b00400b0811dd165d0b9c14641a42245703d80d7116a824b180f1820102da0c00803a8d538f8a100080d7904997e61100800080918a0000008000800080008000800080008000800f817d82648d5b80298300806d8f000000800080e39000000080b689549589070080738c9099520c0895a69825995319018c089c819bec206a8fa5947e96df14148fba93cd965a1386925e9b3f9d241e0a96bc984a9b5d180080b2907f987a0f0080d495929b1c14d990359d73a0731c2395b598649bce1600801c94c99713110080e28cc8920502fc8cf5913495b60f549b31a02fa366206a9ea1a2d6a459232c9e53a346a5f822089eeca20da59722c99ccaa2e3a41022989cbea206a5ad219e9cbaa2eda43e21529c90a2f5a40b21659c31a271a48d207c9c50a26ea470208e9c2da23fa42820829c26a24ea41620dc9c19a239a4dc1f859ca8a130a4611f6a9c31a1ffa2901e939b3ea100a3a01e739a47a0f3a13c1d889a27a068a10b1dd49903a075a1f91cae9ab59fffa0071dc499299fb8a0271d1599039f92a0ce1c459a0aa0dfa03e1cfb064e0a05106e1342114015b7162a1c110d32109512da154e06840e91121415658221886b887014958051019102c7100000de01420a180700800080cf00000000004201bd0db80c00002f0cf811ec17b00a2713d61881243409460e0a18322553824c822182060c00809b891f90790d0080ed90f798cd11008000806b8800000080008000800080008000800080008000805281dc8a358000800080168d00000080008044900000008000806f900000008000804d9200000e920a959296f515088f0f9a869a201f1590ac925995461576909c932b9643161a955b9cc89dea1e67920d98359a6a1c0080b692cd9852180080cc965b9ae619a08e7e9c4e9fb61de3919d95c49967160080f6909695f6100080828a4a9077091b895090bb93c313c198c49d5fa15d1f959c97a13ba4b8228a9d86a2dda4a422ab9ddaa209a5bd22ee9cf3a2eda43522f19cd1a2f4a4bc21fe9cf7a2e5a47321079dfaa2f5a45121f09ca8a2b4a4eb20029d6fa2b9a49b20559d03a252a44020489de6a115a41e20e39c9aa1a5a3ba1fc69c7ca17ca36c1fc79c79a127a3521f5f9ca9a157a36e1f689b41a1dca2c51e149c14a16aa28b1e889be6a053a26f1e6b9b42a0a5a1a91dbb9ab69fd7a08d1d3099669fcba07e1cce95dc9c8c9e5f1aee0585092810471459129b15db175e1d440c5b0eaa1180158a07d0106712f0145103ee0caf101e1174010f0a370d650e00008e03ff080c0a008000006a02000000009b03b40d9c0a1100010c3e110117270d4b15031a6c24600d151112186f2500800a806001500000800080c280000000806491f8968c1100800080c8840000008000803280008000800080008000800080988023863a80008000806688008000800180bb8800800080918332885f0100804886788b4806e68c25936894a2160493f29b619cf120d48e5e92f794f114d789e2904a94011455920c9b329c6a1e00806697dd99141800801a896393370700805696de99b8142690529b119e0e1b4e93d5950d99f3140080748fcc94c00d0080ec89ef8d9c05d686ff8c5a90d411af98429dc5a00320e49c52a108a413239b9d51a2afa4aa22839de0a2f5a48a221f9d0fa318a51b22389dd9a20aa5ab21f09cffa2eda46121f39cf0a2eaa43121f69c6fa26ea49b208b9c3fa259a456205d9cf6a108a4ed1f6c9cfea108a4b81f849cd3a1e2a3811f979ce0a1c9a37a1fb19cd9a1a2a34d1fc89b95a17fa3f81e0a9b79a027a25f1dd59a6ca0c7a14e1dc69a5ea0dca1741d3a9b15a046a1431db299709fdfa0121df398a09e7da04b1cfc95a49c699e471915031e07010d84110511e5143c17391cfb097f0c570f99140000050ce6107f11000060095f0efe0d8d00e0038406d00900000000820400000080008062000000000046026f0c2c08f400f90d9f121018840d3116071b3e256704450e7e1ce925008000806d01000000800080008000000080f08e2f954b1000800080f888000000800080bf80008000800080908100800080068203888d8000804f804d8a058000800080af88000000802082178979010080f8802e8c1f018a8bab90a4928c14f08dca98ee995d1e148a2e907193e9115788f98fa692e711aa94d29a859c271d0080c7943498451500806c8c9892d20a00804995f5985914d792fe9ada9dfe1a1f935796639917160080f990d094880f00800d89da8c7b805a8867905692768e2599339e01a14f1f549c78a1caa38d220a9d6da27ea45122539db2a2baa47a22399dffa2efa42822a59d04a308a5e721679d1ba3dfa4bc212c9ddfa2c7a44d21fb9c64a260a4c820f09c3ba24ba48b20109de7a11aa42c20999df6a118a41620ac9de2a1f0a3f71f8d9dc2a1b5a38f1fbd9c86a13ea3081f559c5ea14fa3d51e389c11a1c2a2341e329cbda0fea1d81d289bb7a042a2d11df99a9ba058a2f91dd09bd4a042a29d1e6b9b85a162a3cc1e3c99529f7fa0b61bc6058b09960ebe119c1119159716a61b270c680f89114f15ce04d10f7e129c130000340c4611010ffb005009ee0dc40b0000f904080bc80600000000e802000000004004bc0dac0800005d0b7b10eb154f0b3d13ec18c024c60d2e08fe14d825cf8032817a819508008000809a830000008009921d966b120080ea81108cea01008000802e800080008000808781008000801180eb84058000800080d88600800080c68168895b000080ec868a88cb04008000805889000036840b902092a314d094c19cb99d9d20908b6d92609245153e8d2790699166150b997d9e3ea01220108f76947f955b160080128e2d900210e58da795849864154c93a89a349d611b47943095d897681500803a8e9a925e0d0080b885648a52818380bb86f68354910f9a079f6aa1971f329ef2a166a45523fa9d00a3efa4c522059e0ea310a5f122769d56a315a5ac22549d29a304a53b22769dd9a2bfa4b321359dcba2d0a46d216a9d9aa297a40d21159d7ba25ea4d420ab9c2da231a47820be9c14a21aa44420c59c09a20aa41c20e89cd7a1d3a3f41fc59ccaa18da3a51f7e9ca1a170a34d1fe29b3fa105a3ad1e9a9c0ca169a26c1e189ce8a02ba23e1e1e9c5aa0a9a1b71d2f9bd59f1aa1451df999a79e1ca0071c8398a29e10a0dd1bc707f10a6d0f3113bf112e16a117021d210ca10f75115114210948117a141112f405650eb512e60f0000fc08940c0d0e00007304bf08ad0a00800080d2800080000075007208600100008708430d1d0bbd02680e67120118b7033013e017bd21cc820c01e901100f008000804784000000808e8e5d94f210008058823a8a5802008000800882008000800080bb8400800080f985518b0e81008086819a8c3e8000800080e388008000803480508c0c000080698baf90c4070080f893489594158c91869b749c7320ae8c6d91a5920414f88bee8d559050130896c799fe9b961c0080c79197955812008000903e94680d198fa897609adf141196f79c989f261c48964e9af59cb51818888099e99cad1500806292ed94b002c68c6f9215980c931b9b22a0e9a25720359dfaa1fda44023d19d54a219a58d220d9eeda209a57e22999d39a31ea54622a29d38a313a5e8217f9d33a3eca48e216b9d19a300a55521419dd5a2d0a41221729daba291a4b720289d3ea236a45c20679dfaa129a40c20299edfa105a4b51f719d93a191a3511f8a9c44a11aa3c91e329cc1a06ea2021e0b9bcea06ca2f41d059cbea02fa2e01d329ba3a020a2dd1db29b3ba077a1741d119b09a02da1aa1d08998f9f08a1a01c5498ac9d239fb21aee095e0ece1061178f14c4181d1a9f1ec803780c110fb1130000d6064b09100e0000ca08af0d0e0dd003a707ad0c3a0b0000cd013d09010300000000bd010000000074065a0d12099600d30c0c1191168a0c4415851985251e0ba612f41885272882e8802002370d00800080f88400003a89f98fb694651200800080008a000000800080f7830080008077808c8a18800080d387898a7600008048831c8c2c0000800080fa8a00000080c480068e5e000080aa8b6791d40800803894d6969515f8908d9a3a9c861f048c6797ef986c18398c8c9573978c155a936d9b189d331d00800b948997be130080218edb94e60bf689fc956c99681490904a9a699de41976944f964c996415008003926195790f0080408ddb8fea80af80898206040592e199af9e4ba1d01f549d28a261a40f23b09de0a2e8a46d22f49de7a2e4a44522889dc4a2a4a4c721119da0a28aa46b21079d75a271a40d21439d79a260a4ee20a89c59a244a4a120ae9cfca12aa449207d9cd4a108a40c20c99cada1b8a3c91f869c9ca181a3751f879c70a15ea3241f039d79a184a30e1fbc9cb6a109a40b1fb79de1a1c2a31d1fa39ce0a049a2e61d1c9c44a0c7a1431d979b41a084a15a1dad9ae69f26a1481d349a62a0c1a1041dfa96e49d8d9f4a19730c6511e011f2180a19ab1ce01e4223c816d31bf71d3022250dea126a15eb17c3087810c6139314a502f90c821089100000d904ca0cd507000019004104190000003706a10ec6093001780f38130917130e6017911add234c0cb814bd18bc2590820a819e06030f0080f882e9886d03c2913e98fe99e21a1c8eab954b94b521298c6d85338d3b0d00809d889e8e0e070080ee87a08c6603008014888a8e310300801e8abb8f5c0600809f8e6f93cb0c0080ff95b998d0187092499cc29d55214098239d099ff922b792bc98829a6519bc8f88942d97a1151b95239bee9cb21d039422967b989c155985d293ae960e13ef823c9540980315c887a899af9c191b3792c2944d985b14008065906693f90e0080b3893a8de284d501e009a10eef939299c09e3aa11820449d15a231a44923b59d0da302a5b722bd9d1ca337a55d22a69dd4a2e4a4d5214d9dffa2dda4b921ed9cbaa2c4a45b21369d7fa28ca41a21239d5fa258a4b420c39c13a223a459205c9c8aa19ca3ef1f899c65a173a37d1f469c45a15fa33a1f569c17a11da3da1e459ce7a096a2651e0d9b6ca020a2c41d499aee9f47a1f91cca99709fd3a0aa1c999ace9f49a1fe1c7e9b1aa053a15a1db49b59a096a1361ef799d49f33a1241d87982e9e28a0ec193b0af50be00daa1aab1a9c1dc51f0e246218641ce91d2c249614061880190d2013156419061cd0212014cb1674183f207d103916971800210a012806ce0b8e18e803380f9813a91cb60e0216ac1990230212dc18e91b78264c106b144718c2247281bb0192081515c2824d8c368e2f15538f1698209ac61b00804e906b103c1f5389518102031b110080d889a4882b0e0080258c1b8cc80c0080d68acb8d6c080080268a2c8e71060080fa8d3392870b558a28956f9758173c95ce9c109ed62228990c9e9a9f9b240894c9961699591a3093ae977799961b2797d69e11a1b2218c9944a0faa14f23fa94eb97309a42199f901a98509b5a190d8ebd9ca29fa71db39482996a9cf61948960b9df49f081f2a94ed97879ad818478d1b916895a9171999e59e91a1de1f419c40a1d0a36d22d69c03a249a45022729d93a2aaa47822cd9d1da3e8a46322c99d46a3f8a42b22669dcca2afa49821259d25a263a4f920989c6aa1bba32e20429c9ca075a2de1e999b5ea037a24e1ed49b7ea04da2341e749c9aa05ba2461e649cc5a07aa24d1e859cfca070a2611e079ceba0c7a24b1e6d9ba2a041a2d11d7a9b7da0dba1741dd69a4aa0afa1501d4b9b4da090a1701d1c9b34a073a1f91dfa9918a073a1941de597949da39e96183a09310b110f7c196f18571c371ed722f916661bde1c3223f615321ade1b5b20e717b01bae1d5c24d516501cd11dca244016d21a731d0524fd118415fb17761e330d7314a7167e1fd90e7816371a2e24aa048317381b8a257d087312f21876244283a502eb09081a0080458c3e8d2c15468fe9969b99a3195d8b9894d8928e202c8df3884c8c131500802989518a8b0b008099891c8c3a0500801c88d48c6b020080c38ad98e82040080c18d3092b0083a884f95be9798164d98879dcb9f6f238d9a369fb7a01d25c695c6980b9b0c1aa1943799e49b891bd195f49d8da0cf214398d69d70a0f72114959a98a09bc51889921198c79abb18a897209d3aa0de1d41986e9b9a9d831a8f96769d41a0c71efc954f9ad69caa18059361992b9c5e16eb982da028a2821f409c48a11da38d21879c93a1afa33721e09c9ca1aea34021319d00a219a433216e9d71a271a449216c9d44a244a4fd20249d1da21fa4cd20e29ceea105a47520f89cdda1fea35a20f79cd5a1d2a33220d59cc4a1a6a306208c9ca3a17ea3a21f679c72a174a33d1f3e9c44a129a3001f459c1aa1eca2c81e369b88a048a2e91d2d9b02a045a13a1d459b9c9f06a1ee1cbb9b359feda0ab1cb19c159fc4a0e41cf99a1d9fd1a0ba1cb1980e9e829f3b1ade0aba0fa6102e19b1188c1c291efc228416111bbd1cb7224315c4190e1b102154179a1b331d64247516d71b631dcb245715de197b1c0524fa112914f7163320790db21205162620290fe51472185e24890fcb155719d4256e08861238185724688262861903fd180080268ace8baf13948d6897bc997819738a3e94f990b120a08b83894d8c79160080de89648c720ffa8b5f906b914d16a18d7197e49816202892f792c09483160080709002947010d88cf49488973c18c9959a9ca89e94223999cd9ea6a02624a69356972c99a719e69084957c986a196c9814a0c4a13f23e39aaea0aaa21e24b893a698ce9a2c1ae4923099499c381cb59844a049a2ba216a9b01a166a34023a99ba6a0caa23e22d59a9f9e64a0791e229c15a1f6a21622aa9cfba11fa41123339d67a276a48022529d96a28fa463227f9dbaa2bfa40d228c9dd9a2b4a4b721889dafa29ba45221379d5ba26ca4e820339de7a1eea37f208b9c85a15da31320699c22a10aa3731f719c11a10ea3201f839cf0a0e4a2d11e899cdea0b7a2821e359cc7a087a2651e5a9cc4a083a2601ed29b74a011a2c51dab99bb9e93a0311c2799109fbda0741c5499e09ed5a06c1c309a019fb9a0821c679af29e9ca0b41cbd98f39d0aa05e1b9497ca9d2b9f431971811c082a0be2182119431d1a1fb52390155019fc1bb02163128b17d418441ecf16021bfb1c002401171c1cab1dd224c814ec18aa1b6e23690f35126515d01c860b721054147f1cf907520fdc140520f50123092310a81c3e84f80489128b2030854b860b032218db860c8b598837185b91339615961323cc93d79554942f24518a778d078dd6150080f185da8a4a0bf789558d0f906914c58f18975598bb1ff98ea19126933a150080038f4992ad0d23908194539681176b980b9f6aa0bb24b39afa9f2ba125250f9418965498b118ac8fc0953f9884199b9820a0b2a10d23169c81a057a204253c999c9f99a1df23be95089a539c9a1c4499d89f52a1b022a79acba0eca20224239b58a06ba25c220a9aee9d18a0e91cdc9a67a037a23221199c04a1d0a2ad217c9c93a195a3aa21bb9ca5a1b8a38e212a9dcda1fda37221f49c01a222a44d217c9df2a11ea41a21179d2ea232a4eb20f99cfca11ba4b3201e9ddda10ea477207c9dcba1f5a334203e9d73a150a3aa1fbb9c11a1eba2fe1e079cb0a070a2451e799b6ea015a2ed1d929b51a0c3a1aa1d3f9b64a0dea1c31d029b65a0e8a1b11d239b2ea094a17c1dad9acb9f29a11d1dc09a759f02a1151d8d9bfa9f31a1ab1da59a6ea005a2951d019b5da03aa1de1c76168018921add1c7118271c751dc220911441187019f81de818f81bd51d8d236f198c1cce1e9f247c18981be71d1d24fb150319211c9c226710e8138316f11c190c111098143c1cb2085a0dd4149f1edc818703001066192687588b370dcb160288148d5483a8143f8d6a91c58e24196494b4986798e1215695be985397ae23f089b28f3b8e91171c8a218f288fb9176995c69a029c0823f796019cb99c2f24829247943a95fe1b0a98e39de39e2225349c4ea0d8a065273b9c57a02da10b26ee9bb4a007a2dd25489c42a0a9a13b241a968b984e99341b6097fd9e98a01b22169c87a0bea15724a499899f21a1eb22908f0b96539966180694639dc99f871e458c79921e950614a282d3907794d3100f8e3b96c69891116698199e42a0201f7c9b3ba00fa265217a9ca5a0d0a20921859ceca016a3ec20779cf5a000a3a720c79cfda00ba376203d9c17a14fa358202a9cd1a0d2a2b91f529cf9a0fda29d1f829cf8a0efa25f1f5b9cdaa0b4a2191f609caca07aa29f1e739c9ca058a2541e799c7ca01ea2f51d569c6aa014a2cb1d879c82a018a2ba1d739c7aa00ca2b11d309b1da090a1391d009b8a9fffa0ca1ce39a859f07a1c71ce69a5a9fdda0ac1c6c9b469fa8a0f51c6999429ffaa0ad1c1499a29e19a0971af3159619eb1ba91a2e18df1c461ed62021149b17e318b41d9d163b1a571d6f231418471b311d5d245a164a196a1c21249b144b18131c6d234812ce1482170d21991002139d185522dd0adb0e1117282381036a0502123421128e999142111f24c69184939c08fc24589544975514fe24b5961a985294fe242a98fb9900982d255e99b09ba39b3025059a979c8a9cfe24559a459d0b9ec824419a5f9dab9daf247e9a359ed59e8e248b9a2d9f13a05924389b3b9f68a00124399c839f62a02224839b389d169e332252986f9afb9bca1e0d9c40a010a1a3226e9d26a123a26124c19db6a1b6a29b24c69df8a1f6a27724a99df1a18da34f24db9c3ea197a23023419b69a0baa19f210e9b3c9f8fa0ce1e1e9c58a0e7a10921c59c20a1efa2f521b39cf3a0e8a25821f39c13a110a33c21119cc7a05ea3b4203b9cc6a0c8a27b20219ca9a072a23e20029ca5a07ca20720619b90a06ea2491fa89b74a044a2e21e819b7aa05da29c1ef79b84a050a25d1e099c73a01ca2121e069c6da023a20a1e479c76a015a2ee1d9b9c60a0d3a1d11d1e9c46a09fa17f1d4b9b25a0b1a1431d5d9a329f1da1921c6b9a319ffea0911c829a209fe4a09d1c6c9afd9ebaa0ac1c049aa19e84a0a91cd998e59d0ca00b1cd6967a9c189e4e1953146018b8199e18001a101ee91fbc225218871bbc1dd3229018f41c2c1fad242d18041c8d1f7b2413187e1b4c1e95241116da19ee1d9024e6141b19c31c85243412f416ab1c86249a0f6015f51978245809cc11cf187a244a89910620166324f78f0c909a134624a0912b9355083524d493059539880724059568963691c523e695c297ad948723c096a2984696fe22019767995898ab223698369a18996922ad98809ad6996122569a5b9c809c73227b9ad69c519d6f228b9ac99c709de321f899fe9c689dcd215b9a399db49db721209b129e719f0822ff9b4e9ee09ff421be9b8d9e2ba009226e9cc89f18a123224b9c879f15a17922609c0ba080a13f224f9d3ea0cfa1a521c29c9ca066a27e21af9c87a078a26d218e9ca1a078a23d21669ca0a082a2ef20729caaa095a2aa202d9cbfa0dea297207a9cd6a0e5a263207f9cdca017a33420909cd2a0dda2f41f859cdba0c5a2c91f749cc4a09aa2891f619cb7a077a2381f5f9caea069a2d91e889c8ba040a2871e459c73a02fa24f1e779c50a0d9a1ec1d2a9c1fa0a0a18c1dc99bd19f64a1321db79b799f35a1de1c7e9b749f13a1b31c8b9b6d9f05a1c71cf19a849f1ca1de1c159b939f31a1091df79a869f17a1591d999a8e9f37a1d91c6a987c9c0a9e0519ce167f1a311c0e19551a151e0d20f522d3181e1d4e1f542387187d1cf91dec230418c61be41d01247217ae1a801d20240a1677199d1c13248e1451182b1c03241212a015481aec239d0f26146b1adf2319097e0feb18ea235783d4058e16b223378fcc90a7123d23f5922095ae872223b494289750940723279521983b95a622c895b698fb9675221f97f698d8975d2239978999ca98352262978f9a739a32221698669b369a8c210699d89b859c3e213c99219ca09c3721ae999a9c4b9d0c212b9a199d0b9e2221559a569d709e1821269ac79d319f3e21729ac79d7d9f1e21b79a249ed59f1221e49a369e1ea0f320199b439e4aa0d020e59a559e5fa0bc20779bf69ef4a0b920df9b719f44a19c202c9c08a098a19520029ce29f85a16c20ca9bd59f6ca13020d59be69f91a1e61f959b01a096a19a1fca9b03a0a7a15c1fa99b26a0d3a13d1fef9b2aa0d9a1261faa9b46a0f9a1fb1e029c68a02da2c91e119c53a022a2701e339c3ca0eaa1221e189c01a07ba1b01d9b9b789f0ea13c1d2f9b2c9ffba0ed1c469bf89ecea0b91cdc9a099fcba0ac1cfe9a289fdba0a11ca49a5c9ff3a08c1cb49a3f9fd4a0831c539a129fc7a0951c4d9ac69e9fa08f1c959a959e6ba0bc1c2d99d09d9f9f861b3f99099e6c9fb91aeb19431756159a129a1ec41c1e1f83234520191bdc1c9724e9200718cd19c023fe214118211a88230924f7173b1a7d238424b61578170d22ee23f810e1135921f0242f14c718672122245d13c618b32148244e15761a34229c236a13ad1c451f231d55022e1afd1c5719fd93042092216f9908995124d924118f3d919127ec2371945c91022a3226009b2fa1ac29f61c0495e49c582bc2a28492829b2f26db9a2495cf9c71294e097797709e93281c1ecf956b9dc4273020e595a89c372a381dd191f09a91272a188196649e4e26a19c5d9a4ba0bc2574982f9c27a35e1f17263b9ceda18f1b9c255b9cb09f51a5b622c9996fa09ca6492202979d9eb6a6c2208b8da19bbea4071e7c94119cc3a1911e3c935e9a139d6b1d36860f99649c961c97903a9b909d271de6954b9d479fa11eac98c89e87a02d1f2c99979fdea0321f1699a69fdba0e31e2599d59fc8a0b81ed599fc9fc4a0a41ea7990da0e7a06c1eec992da0e9a0501e219a4ba02aa14e1e059a44a03ca1101e189a42a05da1f71d269a3da05ea1dd1dde991da062a19c1d289af69f2ba1411d6a9adc9fe2a01f1d3d99fb9ea2a08c1c6c99549eea9ffb1b8e99989e0ea0061c6499b39e24a02c1c2199049f3aa03a1c2c99869fb7a02e1c35983d9e1da05f1c00805b030b027b007c1a7e1c521e2624d31c511c391e8b24ca1cac1b161dcc245b1e3219b11a8b242821bc1a641d14256d22b31bf11d73242f22941a791dd3235c24081c511ebc235523561d09200625a4221a1d6b20a1252021141a221eff26031c95917919af2548182099091b6e25b2999f9c3920b32527938994f3262b248498a899c828c224ae98129c372a14238498069cbb2ae8204f96849c6b2a9a20b696ba9c292a52209996e09c2929641fd798579d992825203d9a6d9f572a3c21c391d09c72285d1e5495b19d17232d190898729d1026f21ee7985c9dc8229a21e394a09d6d212723ae96939eb1a3cd22de97279f9ba4ce21de989ba081a756232e9756a036a6a823fe950da019a4d721c294de9d8aa09f2052946d9d1fa09120ef964a9f50a1c720b698d09f66a10321359914a05ca1b320269ab4a025a28c20ab9a26a1a8a26320e69a60a1e4a24f20839b7fa1e0a258209e9b76a1eca21b20359b2aa13ba2841fff9ac0a0fba1ea1e9c9a85a0c7a15f1e569a55a09aa1061e369a3ba07ca1b21d409a39a06ea19d1d7e9a3fa07ba1771d099b5da0a9a18b1de199f79f28a1e61cce999c9fd8a0961c489abd9fd7a0b31c0a9a969fb9a0c21cac99a99f97a08f1cfb98299fa6a04c1c7098259ed39f401b08811488eb86d4053c19f11b621d4f233c1acc1cf61e2f24f719c71ca21eb324c71b1f1dd11ebb24f11d851d0b2042253c1fbe1cb21ec5247c1f691dd81fd7240420f71d07214d254f20de1d5c20d5251d1f2c1c01201726e11dec18441e1827cb18c5958c1636263f88d39a060c4c260a9c6a9f6b97dd250c98fe9cdb216825a1983a9d0e25b624ad96f2992928e421ca97039c6729ec22e9956d9cd72982227498059e0b2acb231498329e59292d23399af69ee328f123e99bc09f362a0223e595519e65298c219198699e2625be21539bf09e25223f22179c839f0224f1217d96b89da2944f212e989c9d4ca68d21bc99a69ed2a59d21b59aafa1bda7fc2368994ea112a61724d8977aa0caa34e22f7971e9f89a18e20e597579f96a1da206a999aa0dca24421749972a07aa219213a9affa0c7a215216b9b7da189a33921a19bdca1c8a33c216c9bc9a189a3ed20bd9ba8a178a3aa208b9bb3a162a37d20a79b66a1eca23120159b0fa13ca2801faa9abaa0f6a1c91e479a8ca0f0a1721e639a91a004a2441e999a93a014a2321e8b9a5aa0a7a1b61d919a45a08da1881d599a27a061a1471d449a08a009a1f61cdb99b99fefa0a71cd499519fbca0801c44990d9f86a0291c8b98189eb99f1b1b5297da9db79fc21a580079074a0979078e1a9a1d781f1a250e1b901d3420ae24bc1afd1c071f3d25fd194a1d841fc025921c161f56213327eb1c251eba205326891c301ed1209b25cf1c1d1d7d202d263a1ced1b721f2126101a7e1b941fe42716169614cd1c98267c079e89e60bb41828928098de1034247b9b9e9efc9afb2514990b9d301a0225419a8b9c0820c924ac99a09c6a24e324e698589d69268324ae985d9e55289e245a98779df028fc22a398589f24294f24369b1ba060290625059d5ca0242bba2472949e9f8d29b023119bf69da62225225a979398131e331c35988e9c27210e20819b6b9eeb198621e498a59f29a54f237a9953a085a54023309a3ca0e5a52323ae9979a034a44e238b9918a177a3702349986b9f97a1d4215b98de9f63a2b421789be6a18ea49822389c95a2b5a4cb22d89b79a280a414223d9c73a275a4c621979ca6a272a4ae213d9c4ba23aa435214b9ce8a1daa3ab20359cd0a1a8a378201a9cbfa185a34820f59b88a16ba3e11fe49a01a184a2001f069bffa073a2a41e1a9a4ca0a7a1b61d319a38a092a16e1dd39a8aa0cda1a71d7d9a95a005a2b51d059a84a0aea1551d5d9a56a07ba1021d1f99469f7ca01c1c0e9abd9fbaa06a1c269a27a010a1941cbf9928a07fa16c1c0397b79d2a9f101bc00951105f115110c119781cab1dd823131be01c1c1f1b24e11b611d221f5a258e1a111d7d1f6425e419ec1cc51fe5242e18c31a4f1d1a2321166018141b81206e18c11a7e1edd235319961ce11fbb2542188d1cae20c92696136115f81c31257b833390c706d31ef095199ab1933624319bb19ef39c2b25f498d89cf795a3236d9651965305501c43985a9c4b1c6b22b598aa9d73212e241c9a0b9f0825fc24e899d79e0e264224799a4da0cf274725719c0ea18f28ed25f99edea1592aea25799c18a1ba29e224e298439e1b247021ee9b419c8517431e5694d79c881dab1f479a579f7ea0e822d99a859e06a4b121389a3ea027a53a23559b27a162a5e323569b3fa1a8a3f623b897709faba10821e2977f9cd79d9c1cbc976b9f8ba15920e19bc5a1a8a4f921119c3ba291a407227e9b06a26aa48d21859c55a27ba48f21979c89a295a46421699c7ca2aca43221ca9c55a255a4ef20959cfca1fca38420059d82a181a30820509d30a1f8a2421fd99cfda0b2a2c21e519cf5a093a26d1eb39bd1a06ea23e1e139bdfa05da21c1e339bf2a07ca2011eea9b12a142a2481e0e9bb9a03aa2bd1d439b99a0f0a1791dca9a46a071a1261dd6995a9fbca0941c3a99379f96a0391c8198819e3ea08a1b4b9907a02ca1291da9059d0c560e740d90119e143916301ad118091a671cd721761a971ca61e0b257b1a5f1d511f3925be19091da11fe4240f18f51ab51d67234315be161b1aa9205e17dd195d1e04247e104a16351cd32539145517b21df52646069517db1cfd25498c658f9d087c20d1966a9b56987f24379a039eac9cba251d984a9b6a942724e19770967a8c421e7498729cb28bb0237b98499e62162d25239bd89f4a1fa2257d9a799f9a21ff249f9a939f9024e524939a26a0c825ea24ba9cd6a01e267825c29cd3a05728b6247c98c19eec210322da9ae89b7715801ed9957b9ed11a6621379b3ea012a1c9234f9b09a02fa3f122c89a23a102a52724e29b6ba284a5b1248c9c3aa239a463241699a4a0aca2d72182995c9d669e5c1d829948a062a2fa20cc9c46a2fda40923ad9ca8a2eaa41a23709c92a2b5a477228f9c6ba288a4d521239c0da252a42821019ce8a137a4e320389ccda120a481204c9cdea107a45f20339c9ea198a30e20389c95a188a3901f0c9c7da146a3581f7f9b62a13aa31c1f679b4ca10ba3c71efc9a23a104a3921e2c9bcfa094a2271e029b65a0e0a19f1d939a68a0bda1761de89a9ba0d3a1991d379b95a0dba1911ddf9a4fa0b8a1681d449a10a063a1cb1c8c98139e899ff91a9a97769d869f701a3a05b40f6311e1108d1150160b181f1cdc168319c01b46203f18ef1abe1c7421bc18151cdd1dd3229819a51cec1ef0230018881a021dc72216158717bc1afe212616d617751c1024b00b1c15c71bc925a9143d18621ea5260710760f7c197a25068f09900b0f1821069839996e0a6f24f89a2d9d749987256c98559a048b3c24239895950591fa1e31998b9b4b96ba231399469d8b9789251d9a109ebd926f25ac9a319f2b140826f5990e9eb91daa24229be49ea120d8249f9c87a00a224726529c55a0a3241b25ad96679d321da821ec9b6b9c8690841f9797669f879cdf22309cf89f56a1e8231c9da1a050a356247f9c3ca1b0a39324109df5a15fa4dd24079c2ba163a327243095739e50a11421e0979d9a759c261d9399bd9f95a1d920149d58a20ca5ab22049d98a2f3a4b422a79ca1a2dea41922b59c92a2caa4db21b59c8fa2d0a4a921829c78a292a45621389c11a240a4dc202f9cbea1fea36520be9b80a1b6a31420f69b7fa189a3ca1ffb9b6fa170a3751f6d9b42a123a31f1f639b14a1cda2cb1e949aa3a053a2201ed89a9fa037a2ea1dcc9a94a00da2db1dbc9b04a1d9a24b1e759b12a179a2291ee29a37a05da11e1d879a579fd4a0751cc598d59e55a0a11b089ab59f71a14b1c34986b9e6ea02f1c6905290d790f290dea10781440158b19261678185c1af21e341604195b1b312060190b1cc11dda22051adb1c2f1f3424af17a41a331dfe2218163f18e21a6721bd15b118cb1c3a246415fd17f51c4326d012b416371dae27c3852509bf19ab25358fda8f580cf01ebf98bf981e8ac824089aac9ba59993254f9622990191c3231e958a91e48c33169e95a093e28f33173499279c649a2e23439b519ed59c9f259f9b9c9ee49b4b25619be19f639bfd25c59c77a0bb987226059de8a0b094a526f79c29a17f8fd1250199b69f4b996223259cdf9c6498e81f779a7aa0a0a09623779d73a191a204255d9c8da073a24524189ce9a0b1a24e24179c57a1f1a36224949994a0f2a22e233395ca9ea3a11221ea96499b1f9dfd1cf099b89f51a1a4205a9cb4a18ea45022f49c67a204a5d722ec9cc1a223a5a522129de1a23fa55922949d11a320a53722d89de3a2fba4c821079e68a298a42321d09d04a23da4b0208d9dcaa104a473209b9d93a1e5a32720049d46a14aa39e1ff19c44a142a3451fcb9c2fa12fa3d81e4b9d50a10fa3b71e9b9c07a1b0a2281eb69c15a1bca2391e419bd4a081a2ad1d7f9bdba048a2971dd29aa5a03da23c1da09a52a0a6a10a1d81995f9fd6a0381cd9989b9e92a0781b8c98c89e8da0901c8605580a160d0908ee11eb143e16ff18571a0c1cfa1dca22401b671e64202d263a1bf91e82203a261d1bd61ef620af252518361c9a1eb823a6152b18c619762090155319f31ca824b814e2199b1d9f26b612e418751ef227df0bb614931cef25e58ed48cc014ad20d2955997430ab3245f99bc9b129a09250c96e3987e962823dc94dd914a8e661816951093a3914f184d996e9d9e9c4e240c9c379f0f9e56264f9c619f379e9026e89cd5a095a0e526dd9d26a151a13426819ccba0739f9f25889a059fc19c0724289217952794821558988198a696b2193a9a9d9f7aa09e228e9c3ca140a3ab240d9da8a154a41825d79ca4a18ba4ad24299d9fa162a48b249f9c38a1aea34324379907a03aa248220496a69b839d1f1d009b30a0f5a10921c09deba263a5c323d79d65a36ba514245a9d3aa334a57723589df3a2f2a4ba22bc9c8ca2b6a4d921c49cc6a2c5a48621e29cb9a2c4a42b21a89c72a2b8a4cd208a9c3ba268a45c20599c32a25ea43920819c31a24aa40a20609c02a23aa4981f3b9cb1a10da41b1f549c60a101a4cb1e9a9bdca0a0a2111ef89b2da121a3771e5a9be9a07da2031ea59ac2a047a2a41dc59a5fa0e4a1241dba9a27a073a1fc1ceb99959f04a1611c9f98fb9d22a0051b5098269e1ca06e1a7404960c4810960c53118c151b17881af518881bab1d8622cf1a7c1e61209925311bed1ec920df25191b5e1ed420c42504180a1c551f8024c1157b185b1beb212b16001ae21d09253615ae19d01dfa266112f518ee1d1428500b46142d1b89257e8fa18fce12b82007964498268adf245599579b879ab025a29594979590e5237a945490f48c5c17ea933d9222901c172c99979c4f9c08240f9c5c9f239f7626479c49a09ca0f9262d9c04a046a0bd26209ce79f4ba05d26589ca89f47a0eb251f99189e9c9e0124bf92a3941395b5187795ca966497111bfb99df9ec0a0c421dd99069ff9a0bd217e9a3b9c239d491f389a40a0c0a159226e9c21a117a40024019c62a0fda21323f098339fbca179213b97e39be69cf11d3d9a33a0daa13721d89c23a219a50e23649de7a22fa524234b9d4ca355a51023859d7aa356a5c822249d1da304a51322419df6a2e0a48521569dfea2dda46621439ddda2d1a41221439d96a2b3a4dd20439d47a2aca47f20659dfda16fa43c20089d8ba138a4b21fa79c4fa1c2a3481f579c2fa170a3e41e499c43a13ba3c81e6e9c70a15ca3021fcc9b10a1bba2521ea39bd7a06ca2cf1d479b94a035a27f1d0e9b4ea0aba12a1d749ade9fffa0961c0b99029fb3a04f1b4e96c89c769e721a1201a70b930edf086911db153d18f419b21a5e1d2f20a223691c3920c621da26881b831ff4202126a81a6b1e9f20d0252718801c111fa92411168318f71a27213f1683198b1d90242415331aaf1dcf267714f719e21e6628b20e5d17801ca62550892f8365102b165a90b48e200525199a97b698b694732210943797ba896b2209944c91c090a317f2927d9119913017af982c9cc69b1024909ce49ddd9db326939cde9f4ca00428349d47a0faa00b28aa9c40a06ba17727779c34a065a14e26b89bfe9e5aa0342486938f958596781990944697d898f61a399a059e1ba09b213399359d1da0f3202f979b9b879d791e3199a49e2da180214d9b4aa074a36d23e29ae79f3da2d8221899369ed7a03d2176974f9c5a9d7f1e209a46a0e1a19521389d3ca2f1a44e23c09d3da358a59c237d9d99a35aa51f23b49dd9a36ca5cd22759dc8a34fa58d22f69c9ca33fa50922249d2aa3f7a48821589ddda2c3a41221189d7da255a49720c19c32a24fa43f20ea9c01a224a4fa1f799caca1f4a3661f639cb2a1d3a3401f889cbaa1d1a3271f899cb2a1b9a31d1f0a9c50a167a3811e9b9be8a0aba2e31d709beaa071a2b51dc69bc6a043a26f1dd89a5fa0b7a1091d71997b9ffba0151c1499509e37a04b1bf5967a9c149eb2190000130300054d043e112d1453168a18521b881d2e200a241b1c38207822eb26bc1b7b1f8f215826741a911d1020ab258d17c81b301e8d2454153918b91901211616171a691d6724c215931bc11e59277014951b541f0c290c0e4b16a61d2a26a388d502f50f7c15b78f9a8e910bd6186b9547976692e72239934e95aa896a23c0930590668ec2160494bc93e992fc189b99629c1a9cc024669cb89ebe9f7b27bb9ccb9fcea08b27f39c9b9f23a17527539d2aa022a11e27909d18a0eaa02426269bde9d059f4e235392a995b8969119a9913f974f99ba1afd993c9e1ba03221c1999b9d1fa026215e99fa9c939e0a20389a26a0cfa188223b9d4ca1daa35e24a09c33a160a37924c59a2da039a2c3221998319c129db11d979be1a050a29d21049e8ca2f4a482230a9eeca2eba44723839ddfa2e2a4a622bd9d01a3f5a47622879d0ba3ffa41b22799d38a317a5e8216f9d32a3fda4a1211b9df4a2c9a43421159d88a278a4bd20279d37a240a45f204f9d0fa229a42720439deaa112a4dc1f649dc5a106a4941f4a9d9aa1c9a35a1fa79c4ea144a3c01e999c3ea153a3ac1e559c1aa1fda22c1ec49bd6a04aa2ab1d6a9ba1a04fa27d1d479b8ca042a2641dbd9a90a01aa2311d489a60a0f5a1161dfe974c9e0fa0681c00008a064c0a8a06b81121156b176519281b531d162055248c1c4320c521af26dc1b06207b210926d81acd1eca205e25ee17c71c5b1f42243316af188a1a5921c1147d190f1d8b242614c818231dd0261b122118a71d6328b20ddd15e01ad325ba8aae83700f9817958e0b8f5085e7188b954298d996562354923e952090af2342940d90218f2f17e4924994da91fa198199b09b799b03245d9cd89eed9ffb26df9c98a07da132285c9d36a10fa22c28d79d10a1cea1cc26e89c74a093a1ed257a9bd99f21a12a248390cd955397e919988d2b955698381a249a0d9f6da196211f99489e5da07c219199cf9cd99d09202c9b96a006a29022119d9da122a42824a49cd1a07ba38d23339a439f1aa2b8213c96179a6e9c711cd49a61a058a22f21679e0da35da5ca23a49e9ba35aa50f241f9ea5a386a5a523439ec8a354a53023ca9d9da33ca5d322749d5fa314a53922679d1aa3e0a4d421229dd8a2d4a44e212b9db2a2a3a4f820fe9c74a26ea4a520c09c49a23ca469209d9c1fa228a42b20689cf6a113a4e01f6c9ce6a1f2a3b31f849cd1a1e3a3741f759ca1a19ca3131f279c46a137a3811e299c08a174a2161e1c9c95a008a27f1d089c2ea096a1041d249c909f21a1391c219cde9e8ca0c31bf7987c9ea8a0cf1c01018e07770965052d100315e21618198f1a821cae1e39232c1c02205921a526411c03209921b326011b211ffc20552650199e1c021fd924e7158f18891a222231157419f11ca424bb131a1a311da02632112219ba1c3a27b909ab152d1cb525448ba504c511a919ee900190a20cb91a4e948a978997662217926095868fab22a9931193ac929818de948c951594781a8999639c119cc124b89bba9e029f6327509c8b9f22a03527b89cce9fc4a01727c79c21a008a1f6262d9c09a004a155262f9b659e1aa090245393a7968a980d19d3902c979f99a11afb9ba59f37a1d1216b9afe9eafa0d4218b99369dac9e0320959a46a0c6a138221b9d8ea107a4fc23969cdaa14ea4e923199c7ea1c4a38e22bf983f9df19d801d0f9c0da1c5a2b021679e26a35fa51424f29d67a3aaa5e623b29d4ca394a5f422cd9d57a353a59422a49d5ca34aa532229d9d57a313a5ec216d9d5ca3fba4b421379d24a3e9a44c21219dd1a2bea4e820339d89a276a490202f9d0ba24ca42420669da9a12fa4aa1fb49d77a1f1a3661fef9ceca064a38b1e899cf7a007a3661ef49bb2a078a2f01dda9bc1a075a2d21dce9be5a055a2ce1d9a9b8da034a25a1d479b48a0a6a1091d989a15a057a19a1c3999a59e89a0701a0c97d49c879e811a00096a0cdb0efd112a1ad51d861fac238018de1b101e2a22b816281a7f1b0b200119981c611e4c230e1a3f1d3d1faa2454171e1c791ebc233216b418ef1a81218514d2190b1d652444149619151d36265e12d718351d7228ed0db0159a1b0b267a85c201510db113e28e4b8e3904d518e795b09850980a242a9538983a95ad24a898bf96a195ab208498fe998f99ee24e499fb9b449b0726519a4e9d6b9da2262e9c099f989f2e27c39c40a013a139272b9dd9a0eba12d270f9deaa027a2e826e99cbfa042a2e925cd9a6d9fe4a0ea23d499239d539e9a20979a12a088a1ea22b5991a9fe2a0eb21b299a99d9f9ff61f109b77a030a24622b49c1ea1a1a3a623349ceda016a37b23319922a0ffa177223f99859c9b9de31e8f9ac1a055a2b121319e22a32da50024799ec8a398a52624069ee6a392a5a723db9dcfa368a50023939d50a3f9a44322489dd5a2b6a4b0210f9daba282a42521009d93a273a4db20bc9c5ca25aa4a320a19c23a234a457207d9ceaa113a421207e9cc7a1e4a3ad1f609c9fa1bba3621f949c92a19ca3391f0f9d79a1a6a3f71ea39d4ba1cfa3bc1ef29ebaa0f7a3e71d2f9dd6a0caa2ec1d389c68a0ffa1391dac9b3aa0b8a1021d9c9a1da04da1a41c5c9a3ea0d8a1841c3298a89deb9f101b0000350cc10dcc0e8c1b961f1d21fd24851c3c2075224826d61b1220ac213e263d1bb21f4b21e82551192f1e252014259c178f1c921ef42356158019411b2b215415241b751de323d314041cf71dc92595138a1ad61d20278710f317651ccd24aa81610a5511e7154f8cf589f10a56197c94b996b0971b24c394c8970691332565985a963d9614206c99269c219be8256c9b669d099d40279e9b819ead9ed027959cdf9f35a05b288e9c35a0d5a059282d9d58a026a1e527b99dc4a0dba13e27169ecba052a27726129d04a04aa1a924a79b009e639f4f208c9d16a109a31b24609eb0a1eaa30b254f9fdca136a46125db9d04a280a45325629e3aa2f3a4c9248d9dfaa169a44b248b9a6ca07aa25f22c099c59bc19c341df89a43a03fa1d020979d5ca2a6a4e7228d9d6aa2b8a48622669dd6a201a53522f29d20a343a51622b79dfda206a5c821619d18a313a5b9213b9d02a3e5a46921179dd1a2b2a43121da9c9aa287a4d020989c28a22ea45a206b9caaa1b4a3dd1f379c5ba155a31e1f109c2aa12da3bc1e0a9c06a1f9a2791e569cfda0b6a24e1ed69bf2a0fda2401e849c83a008a2971d089b04a02ea1d21c4e9b16a070a1ce1c419b14a06da1e41cdb9a26a07ca1c61cd099c49e8aa0ea1b6f98a09db49fe51a0000cc905391e114ad1bc91d461f71249e1c521edb201625291c7c1e7c20cf240a1caf1ed52030253c1ac41dbb1f1f252618581cbf1e6e2490146e18901905220716a01be61d8b25b016891b781e3f27c9151a1a101e0727c9118c184e1cb9250085dd10541781222b911909ee159d252094d48f128b3d2639923e8fbc172b25b0963f915f8f3b224498b798f494f02542997f9b289b4027819aae9da39df1270c9cca9e1ba03028779c39a05fa14f28569de3a0a3a13b284f9d3fa122a20a28ed9d5ea1c8a271279e9d6ba10ea39b26199fdca1a0a3be26709f4ba3bda4b126719eb1a383a588260c9f19a3aaa4ce25c59de0a2a9a4f2252c9e18a3e8a49025f19db4a243a4f1249a9d48a24ea473241e9d46a216a451248a9caea1aea397239e9d93a2a0a456237f9dc3a2b7a434238c9d24a3e8a4d122be9d54a316a59422b69d61a315a570229b9d29a3e7a4fa21369da4a28fa46021f79c40a279a4d320b19ce5a130a469203f9c77a17fa3ed1f119c15a1fca20f1f0d9ce3a0d3a2941e109cfca0bda26c1e849c01a1e6a2721ebb9c12a1a0a2681e809c8ea07ea2b71d609c46a01ba2411dcd9b0ea0bfa1e31c299b0ea0c4a1d31ced9a1ca0a6a1e41c869a28a07ca1be1c5b9a16a0b5a1d81c51997d9f0ba1da1c0100749252949814a819661d411e5824e11a261e8120f224081b0f1fb2207a25d61ad31edd20fd25a319161e4520de256419611d2420a9253218bf1cb01fa925f3167f1c4e1f6b266415031bc91ef926e2116c19951d23279910fe18821d48276585fe14c31b88275493020a7018272885969793f79126280c960b94aa126c284e99bf95c5970728a3996e990e994128059c3c9b4a9b63285a9b869c039d6428f29bf59dfe9e7f28259c7e9f7fa091289c9c9da036a15d28c49db0a19ea26f28b19d78a1dda236288b9d94a104a3bc27659d1ea2caa31228bf9eeea278a4a427ee9e83a274a4e726d19e49a237a4b125ca9e5ca23ea493257d9f0ca3c0a42125399f94a238a4a8249c9d32a243a42e244d9dfda1a6a3bb23a09cdca1a4a3cf22079d2aa25fa44322b79c05a220a41e22e79c0aa237a4c021309d1ea22ea47721609d57a252a43f21a09d8ca283a41f21799d65a25ba4ef20e79c1ea22ea4a820b19c03a20ea47120c69c0da20da44720bc9cf8a105a417207c9ccaa1cda3d71f439c9fa19ba3621f2b9c6ca16ca31e1f299c51a155a3da1e469c4ba111a3d21eaa9be2a0cba2401e519b5aa09ca1761d649bb99f22a1c01c139c3a9f2fa1681cf49c8a9f0da1691c749b909e0ba1be1b9f984a9e75a06c1b6580cc889a84f8104319451d901f1824fd19c21d7920cf24251a1c1e28203725121aa91d1a2066258618ad1c411f38252518061c8e1e1625d816781a6c1da9253b16ad1a581db7261816021aff1c8c27a613e718721ca427770ec4153c1b6827e6845d0f31170527c08f2b09d317b627af94cf926491df27ed946e90e9142128a9970594539519287f98a69815999f28e199989a659bb328c59a499d049ecc28fc9aab9d199f6528779b4f9faba0ec28069ca0a094a1c628249d36a1eda16328819dcea154a34d282f9ddaa19ba312288a9d62a2c8a30728ee9e16a41ea51028aa9e07a469a58827049edda269a4ef25b69dbfa24da48c25859e26a3cba44725d29d92a27da4cb24a19d47a24fa43224179d08a2c9a32f23169d22a23aa407234c9d6ba257a40923869dcea28ea4ce227b9df2a2a7a48b22929df4a2c8a41022a59df1a2d4a49f21799daea2a7a42821149d40a265a4ad20ce9cc1a1fba32d204f9c4ea172a38e1f6f9c26a13ba31c1f759c00a111a3e71e919cf5a0dea2a11e7f9cd8a0b7a27b1e659ccfa09da25a1e919ce8a0b7a2471e159cf9a014a30a1e619c25a01da1ef1cb19af89f22a1cd1cec9a4c9f28a15c1c559a059feca05f1c2f9a009fb2a0181cdb986c9eb9a0711b3999d39eaca0b11b94834b90ce8f4b10c918271dfb1f1924d419651d73203124cc191c1e042015253a1ab11d26208c25d418941c3d1f38257317461b101eb4247d156c19941cb024e0134e18541b2f25a7112d16a11a8e25800f9e14c918de25a90b7e11dd183726ca85eb0ed11661263e91d2887515f8269e9457948f8a3f27e29605968091d1270d970298d296e127a9973d98a7985b285e98e499c4994b28f29ad29d4e9e64286d9b729e03a03c289f9b12a041a18428619c2ca0fea032281b9d81a190a27a282c9daaa123a30228539df9a1a6a30027969c05a275a31427749da7a17aa35926719da7a136a4f725849d19a255a4a225749db5a133a3c7242a9dd6a1e5a398244a9d19a238a4be24c79d3ea253a46824729d67a220a4e7233e9d41a247a42f23259d49a217a4ca221a9d31a234a43122ec9c13a228a4b521049d2ea23aa48c21f49c37a240a456212a9d6aa244a431210b9d44a24ea4fd20049d26a232a4af20f39ceaa11aa45920e59cafa1d0a3ff1fdc9c48a13ea34b1f7e9ce3a0b9a2a91eb59b78a042a2fa1d5e9b41a00aa2b11d299b37a0cda1751d429b3da0d2a17e1d609b3ba0daa14f1de49af39f7da1f31c799a889f15a1b11c249a129fcba08c1c6c9a3d9fbea0531c0f996e9e9ca0741bef98dc9e8da0301cca0af70a2d0e9d18db17de1a9a1cc8216319021c191e59235e1a091d931fdb24d619111dd31f0a251d19341cb41ee12466176f1a621d98247b14df17231b8824791159157e199a24440e031011187d249683c0060b168224bb8c60905014e52497911c951a0924258a942898b48f782559965b996796b5252797b699d9967f255f97269a6599b7258e98989b269a3926b79a6c9d549d7c26909a2f9f509fb026e49ae59df09dee25729cf09f57a0f7268a9b029f0ea06026049c78a036a1f8252e9dd8a0dfa1f0252b9effa0caa25e26e29ec1a08ba24a25d79d0ca2bca338263a9e78a12ba33125159dd9a103a42025e79c3ea17aa35024759d65a195a37524c79caea03fa27f23aa9c1ca1e8a2ed229d9cf6a0c4a23622019d3da16aa3bf21e49c46a147a3cb21f79c94a1bfa39421d09c83a1baa35821cc9c8ca192a30c21bc9c6da176a3c920a99c35a146a36220659c20a105a31f205d9c01a115a3cd1f5e9c0fa10da3891f519cd5a0cfa2fb1e6c9cc9a081a2911e7a9c9ea050a2411e869c8da039a2f81d659c67a029a2c71d229c57a0ffa1841ddf9b3fa0dca1651d7b9b1aa0a3a1361d0e9bd29f0ea1cf1c269b8f9f0aa18e1cb79a509fe2a0681cbb9a0e9f7aa0cd1bc798ce9d4aa0aa1a6398df9d59a0631b4a01a50ce00f41116e18901c561e4d22f118801c2c1f36237219ba1c5e1f8224cd18701c9b1ec624e817341b0a1ea8247d166f19121d742462140a180f1b99241f138315791a9624f90e6610f118d024fa0947075a160825e28c6f9039141225ab915d926b0f24256194c3953e12f5240496c1963e92d0243f9828999d95ca24ee986c9a4199ae241e99829b569a96245a993e9c349c6d24b699e49c619c3824cc9aa99d859d32249d9b479eb49e08242d9c759eb09fd023c39c289f16a0f723589d58a039a12024189c43a0f0a097238d9dbba0b5a13d24e19d0ba183a23d24339e47a10da32d241b9e6aa1f4a2e623389ec4a193a30724b19da7a152a38e23fe9c64a14da3e422319c20a1a3a2e9212d9c06a1fda2f021989c10a104a3e621cf9c26a12ca39021319d59a147a36e21259d4ea192a324211f9d44a138a3f220b79c11a109a38820a09cdfa0dba20420519caea0b4a23d1f359ca5a076a2db1e099c8ea075a2821e399c8fa06da26d1e1b9c89a047a2301ef19b7fa048a2f01d209c75a025a2cf1d0a9c69a0dfa17d1d969b2ba0aea1301dcd9b30a0dea1371d419bee9f5ea1e01cf49af99f4da1ce1caf9ac89f20a1b01cff99519feba0801cad99fb9ebfa01e1cf598d09effa01b1cd698dc9c069f751a00003e0b300e280d4e18031c801d3e2239199e1b111e6222b4191c1d921fb824c918691c831fa4245f18ac1b671ea424cd16eb19e61d84248b152e19ce1c7b2477130c17601c6e24de106e15931a6a244b09db1165196b249583ae065a176924698e0f8d11157424a89155939b0e4124fd93fd942008eb237b9448960d8e702379955997da92de220e96389829958a22a496f398a29707223098a299f0989821ca98599a279a1d21b199529b0d9c01214c9aaf9b809ce320809acf9bc19cf720099a409c169d3921ab998a9ca99d4b21689a219d279e8a215f9b1f9ebe9fa121159c4e9f85a0da21959ce59f12a1f121eb9c049ff3a01122b49cf29f88a1f021a69c2ba0bca17e21739c38a0c9a13121a19c62a02fa2fc20ac9c96a06aa2e520b99ca0a090a2c820b89ca9a0bda29520949cbba0efa25b20b29cdca017a34420a99ce3a039a31720929cdfa0f4a2ec1f7e9cc9a0caa2891f649cafa09ca2241f5d9cb4a096a2d81e579ca7a079a2ae1e4a9c9aa05ca2851e299c78a038a2221e3e9c52a0f3a1d11dc89b17a0b2a1821dbd9bc19f53a10d1dd39b869f34a1e71cd99b759f24a1cc1cd39b8e9f1aa1cc1c749b819f25a1ac1cf89a4d9ffda0951c419a349fe2a0401c7499429e6da07a1b7d98089cb49d3e1a00002d125114940c5d1a5c1d031f98227019f31cc71f282305194a1c7e1e9f237e18d31b751ef7232318bb1acb1d04249616a2190d1d0e24c51411189a1cfc233313af16b51b0124820f5014b51afd23f908b80f1219f6230689d6856f168523818fdf90a7121623c892e595ad8de422c2940d973d94ac223a950a9817955822b4953e98a6972b22bf96b4981f98cd21ef961499ec987a2148989599f299552186988a9b759c5f212599589c649d4e2168999c9c759d2121ef99df9ce69d0b212f9ae79c2c9edf201d9af99c659ece20e899fe9ccc9ea320bb99089d0d9f8e20d599489d369f7d20419a6b9da09f5e20919acb9d0fa05420fb9a379e45a061205c9bb69ed2a05f20959b4a9f10a15320c59b929f6aa14320b19baf9f56a11d20cf9bac9f77a1f11ff69beb9fa1a1c81f019cfe9fbea1751f089c1aa0bfa1441f1c9c25a0eca1181f309c33a0e4a1f81e389c3ea017a2b31e589c67a04fa28e1e3a9c4ea029a2531e209c30a0f7a1f21dee9bea9f91a19f1d699b699f26a1171d159b259f00a1bf1c1d9b109fe1a0b11cbe9af99ed5a0931cc19a1e9fcfa08c1c989a109fe8a05d1c959a1c9fdca06d1c3c9a019fc6a0381ce599c49e9da0291c4b9abc9e80a0d91b00992d9e39a0981a8a9aab9eb0a0d81bba1c051969166f1a99218a1c3b1f94237224931d601e2a2514263c1c0f1d7524ad274b1b491c9c24a2286b1bd11c96241c29171b0f1d0c2438292a1bab1c7a24ec28601a261c6c246428ed197a1c1024b927f11b431daa24b126c919461f55232320109805201d294d1fc2972725b027e11ac598d72854233a8e5491822a38215397b0909e2c5323ce99499a672d8824f299af9ad12c492227952a99762c742200986e9c6c2c5b23319aa09d992bee22cb988e9c512a3b21d298309cfe296020d1958a9a37281b1f9095919baa289c1d00988c9c01273e1f1099db9c0325a71ed298c89d1b23611f7999ef9eb515c020009ccba105a54d24389dc2a1e3a65a249f97f99f4fa70322af97db9db4a4f2209996259c77a0911edb94a89b809d001e0c943d9c2b9ee41d0d98f79d36a0dd1e9a99399f12a1391f209afe9f75a1301f4d9a39a0a4a11e1f5b9a57a0b0a1181faf9a8fa0daa11f1f4a9a82a0d5a1cf1e8f9a7da0a6a1771e6f9a70a09ca14e1e559a53a06fa1f11d599a47a05aa1cc1d5e9a40a069a1b01d089a3aa077a1951d8e9a3ca051a1691db59a14a025a1361d359aaf9fe9a0d81c8d99299f74a05e1c5d99079f62a04a1c4b99dc9e46a0191c7c99f19e5fa03c1c8899419faba02d1c4d99159ea19f3f1c6d0b020c9e0c4c0e731d321ddf1e4f249a202c1ee31f5625e6226b1ee11fd825c6245a1dc11e6f25fd259d1da71fd5254e27491f6321fe25e827411f762161254a28d91e022123254b27d320a02252260d272820f021a02653254320d12264283d226f8cee1c70298c20729f8b1d4f287e0d53a052248e25ca9b36a037280a24559d1f9e072b5f23fb9cc09e352c3d22849c649e652c4521489cca9eb22c6a21079caf9e932cdf21649c949e272cac22109b6f9dfe2b0322b499969c3f2b3d207397e39bcf29871c7497119c132935091998529ca027c315c7982e9c1f24be1bbd98909c7720821d40978a9c4d9e26206e97389e08a5d221869924a13ca83224b89995a1bda85b24459a2ba21ca73023439994a02fa40022f299c2a03da388210b9a3fa08aa2b020509a90a0d3a2e220e69ad7a0f0a2ec206d9b54a181a3c0204b9b57a149a36820499b56a110a33320a39b5fa114a32b20ed9b78a141a31d20f29b50a1f5a2bc1fd09bfaa072a2031f3d9b9ea0f4a14d1eac9a6fa0d4a10d1eca9a65a0bba1ce1da39a6da0b1a1b21d769a54a09ba1761dbe9a63a0a1a1761d449a40a065a11f1d189a23a027a1ed1cef99e99fffa0c41cc999c39fdca0ad1cf799849fb4a09f1c4899e09e8da0f21b76980b9edf9f511aa30c840e6910840e771bab1d921f9924d81dd71f71201126f11fae1fc42026267421ba1f4b21452678231d1f11219126b224251f0c2157265725a21f9021d026972560207b223f27d82500210f239827e2241621ed2310280a24861e97217928d91f5b971f17f528a91aa3a01b9bab28349914a26d8e0028959cbea078233126309d96a0d4272625fa9c939e762a8e248b9c729e472c3924209e1ba09c2c85240e9ec8a0b62ced24329ebda0772c1725919d4da02c2c8a24029e33a0862ba1239d9cdc9fbe2af0224b9b499f34298f222e9a0e9ed926b4211e9c439fdb24c421e89b15a0f11ba522c89a459ea0a10f22219a0ba06ea61922079b81a191a877236b9bbda15aa8c5231d9a79a1eba55123e79a68a1cba49b22899be7a1d7a48a227a9cf7a1a3a42a22869cd8a182a4c1210f9ca7a13da463216a9cf5a168a45221369c13a25ba42d21c39bdda113a4c420059ca0a1b7a36e20089cbba1d1a35e20349c94a19fa331208c9b35a1d5a27a1f3b9bf4a066a2061fd19ac5a04ea28d1ea89abaa035a2481e5b9aa6a021a21a1e789a6ba0c5a1af1d869a3ba083a1601d0b9a29a05aa11e1deb990aa016a1dd1cd599d19f00a1b61c9599949fe0a0911ccf99b39fffa0a31cc599e49e38a0f61b4898bd9d3c9f971a0000160fb210138ad81cac1fe3205a25471dae20d2217a26b71d20204d213026d61e8120322223279220812083222d28f8202520fe21ad27da21f81e2d21b5267522142036229727be210720aa2233280721cd1d042120280e1f2619f01fa728591a529873161c28a2100d9e45944428929a57a19499c228e99c56a1ab140028a79d07a15e226e273b9d6aa04e27f2267a9da0a0282ad526539f33a13a2c0627229e8ba09d2c9125739eeba0da2cb525be9d9ea0812c2f25b69ee2a0372c0325f89db1a0e72a7d24f89c34a0c5283e240a9b659ff925cf220c9e68a02e245823f79e09a1b31b4624589caba008a42c24ba9c3ca1aca67824a89beba016a88a23bf99a8a068a6b9220c9cdaa1e8a40b24569c5ba204a5bd235d9d61a2d0a42f235e9d67a2ffa49d22ec9ce9a252a57c22439c74a2e0a4dd21649c79a2b9a49c21b59cb0a2bfa48921759c6ca27da42a214d9cdaa10aa48020469ccaa1f6a35020629ce7a106a44320129ca9a1c2a3eb1f0e9b21a1cea2f31eee9b28a1d2a2c41e5f9bc2a066a21f1e149b9ea03aa2dd1d149bd7a042a2f31de29a97a016a2881d129ade9f07a1a41c9299a29fe3a05b1c16992b9fa1a0011c8699819fd4a0311cbd9a18a035a1921cde9a21a07ea1671c9e988b9f0ea1731c0000380d180f4c83b319141d6e1e1523db1c70206c217426a01d65208c21a926111e2d209021c626811e861f46211a27651ee01e1d21c226ed1d5e1e1121bc26ad1e0d1f1f228c27271f0b1f53222628c71cbf1df221a0288f1b5c111c1d7028140f23999f1210271a96059e4c93a127a69b7fa0429c5a28a09c05a1ee9c0828fd9a209fe615ec25d39ca99fef215e26f59c9ca0c5268a26149f4ca1a1295227419f6ca13b2bc026a09e96a13e2cb626079e89a1322c3d2606a056a23c2c4a26d69f9ea2492b4626299df0a0c62822257e9f71a1cb25e624589f5ba16f239e249f9ffba1979e3f255d9d57a17fa36d249a9c6aa1c9a65324fc9cb1a1daa71e243f9cbaa194a5ea23e89b95a194a4ca23cc9a63a15da47a227f9d10a2bda4d722d39d93a275a5b022a59de2a266a58d22ca9c53a2f9a4bc21d39cada2e6a4af21009dcda213a58721049db7a2ffa44e213b9d81a2a4a4ea20cd9c2fa257a47720f49cbfa100a40520259d58a168a33d1fe79c23a1fba2be1e809c1ca1f4a27d1e409c21a1e6a26f1ebf9b2da1d7a24a1eab9b15a1c5a20d1eb59bf5a07fa2e61d439bafa035a2931d1e9ba6a0f8a16b1d789a49a074a1fe1cf199919ff0a0771cc999809fd4a07b1cb2996e9fdfa0891c7a9a62a0eaa1af1d00006d107d110a102218321a531ca520ab1cb61fe020b925391d18206521b726961d82202e22be27271e7a208f2251287a1d492085224328b01cce1f5e22c327af1cec1f83233e287b1ceb1e30227e2884198c1cc6204e28521663195a20ed289e073f91d01b1228dd97ae9d3b965828419bc89ed8999728139c289f209b26285f9ba69dcd97ca26f49cf69fcd8d9b275d9df1a0fb1d09288b9e99a1c224c327719f40a22f280728f49e28a2372ad427629ec6a13b2b3127459f68a2442b9d2739a084a2182b2b27819dc1a0c9282825a7a041a1b32537257c9f63a25e23bb2514a08da2379ecf257d9c9ca105a47824df9c10a29aa67f24439d24a2dca62b240b9de9a263a58124859c1ea351a59824c89b76a22da5ab23779d66a3d6a54a24349ecba330a61724c49dc3a3eca58423409d40a385a5b2221a9d02a338a513226e9c3fa2aba41421259ceba171a49820529c07a277a478203b9c00a257a455205b9cdea136a41b203b9cc2a10ba4cd1f2b9cb6a1cfa38c1f019c84a18ca3251feb9b69a158a3ca1e769b3ca143a3911ea19b18a1e7a2501ee09abea04fa2e01dcc9acda048a2f31d359bd6a02ca2e01d2a9ba6a008a2a51ddf9a78a0e0a17f1d9c9a6aa0cba16d1d429a759fc7a02d1cf0984c9ecd9f031a000031117f12be101717ae1a5e1cc11ffb1b141f6320d824a41cec1f422198255e1d90203522c326371ea02078227727251eb4207c220928341d1b2047222e283c1cda1eb1213c28691a001dd1203a2877186f196c1f4228b01579149d1d9d2810870391631a0c281b98f59b8713a7288b9bd29eda93cb28489ce69e1c9b4228d29b6e9e889b8d27639e37a0029d4b28869edfa03d996428339ffda028180f28449f23a22f212828c09eb2a159251927609fd0a125285627f69fcfa23e294c2879a02ea3b0293e286f9eb4a11e287826eea0bda131240f264d9ef7a1c51d022604a038a248a1ec25e49d57a2d5a494254a9d94a281a55525e59dd8a256a56125a99d41a35ca55925929ddfa3ffa55025309d94a20da517244f9e6da3f0a52824a69e82a323a6a223249ea4a3f3a52b23f49d78a3a1a5ac229d9d54a371a53e22c39d70a3a0a50c22209d25a369a5a5219b9c45a291a4d220429cdaa146a45c200e9cbca120a42320149caea109a4f11f479cc5a1f0a3b81ffe9bb0a1e6a35e1fe89b95a189a3241f839b02a1bfa2481ece9bfaa0bea22a1e999ac6a07ba2cc1d469bd1a067a2da1df49acfa03ea2a71d969a19a06fa1c71cf3998e9f2da1671c729a00a03ea19f1c219a43a0e9a1021d1c990b9e01a0711b0000580fbc10f20d6017c01ab81c8820ae1c8620da214c26fa1cc3209022d426761dd620a5224127971d9f2079228427291d6620b0220528191cf91f192234283c1b5f1e89216428321ac61c77206228e617641a8c1f7228ae106214fa1c93283593789338153c27979acd9b8f8c2f28069c0c9e4198bb28ce9c629eaa9b5a28539c8d9d919bf026b99b8b9e379c3f27db9e9da0ed9d132884a0d5a11ba028286b9ff3a1009e8427e09fc8a24d95e92752a013a34c1dff2704a061a23b22af27859f3fa233242827b09d99a1df212426a29ffca102191e26979ebea27da06d269c9f87a30ca417270b9e0aa247a47725f79d3fa26da47525989e40a3e9a4fd25a69de5a2dfa473258b9de8a234a50f25c39cfda1dba4bb23069e14a397a51a24e79deea2c9a56523cd9d04a3cfa5e7229f9d11a3b8a5a122929d27a38da566222f9e65a390a55022fe9e56a363a5e621c09fada2cda42221879e58a299a4ba20849d18a265a47b20329dc4a11ea40820d09c7da195a3941fd79c67a19aa33a1f309d64a170a3e51e749effa0cfa2321edd9c2ca10ea3351e0f9c09a1bca20b1e299bc3a07aa29a1d289bdaa04aa2681d179b74a0bfa1051da89a57a0c6a1e51cc79a3aa084a1ed1cdf990aa09aa1b61c5499629fefa0811c0000550d8b0f64081418051c941d39212e1eae20a9211727881da020612217277d1de320c2220d28041ed6201b235c282c1d22208022f8275e1b7c1e6921c127f819a51d872168286218cf1cbe20a028eb153e1a801f8028770d2518f71dec284290ea8ae91b3e28aa97da980c167f288a9aa49c18968e28ad9c0d9e239c91283d9c549eaa9c2c28099c499f9b9d08280b9e70a06d9f4028779f15a11ba00728fd9f29a29ba05528b39f98a2a7a015285b9fbfa1e79e3527e89fcca2da9b2e2878a06fa2e898ea279a9e6fa2ed9cac266e9e30a334a03d27749fa1a3fda11627e89e52a38ba44e26b59fd9a28ba48c25fd9f1ca47aa58326449f80a3cca41c264a9d7da2bca43e25ed9d07a35da54a251a9d9ea22da52524c89d44a3b0a52624c89e0ea444a654240a9f4ba458a66f244d9e1ca40ba6f5230c9ebfa39da5ee22719de8a214a5b721049dd9a2fba456210b9ddda2fca41d21d79cbca2eca4cc20f79cb6a2d0a4a220e29c91a2bea45620e99c6ca289a423208c9c0da255a4a51f629cc1a11ba42f1f089c57a19ca38a1edb9bf6a0f3a2121e3d9c46a144a3611efb9b0aa174a2f91df99bcea02ca2941db89b9fa020a25e1d1f9b6ca0d4a1171d739b4aa096a1ff1c309ab09f5fa1401c1b99f29ec2a0df1b000058117c13860fcb16811b231de420871c8520b921b426b31ca52040224727031dd020f1221728a61d4421b6237a28b11c772033238928771ba51ea0213f288419251d04219b28e217291c8120d928c015b319201fbe28060e9a143b1dfa289c904b91541962282497da9811168c28199a559ce78ce028b59b629dd399d428fe9b7e9dcf9a18280a9c959ee39cd427bf9d70a00da03428c99e42a1f1a03628349f01a299a14928549e57a1d5a09e27fd9e6ca179a0bc27489ffca1e5a0dc27919e98a107a0ed266d9d50a19fa05a256b9e71a24fa2f5259fa064a47aa4d026d1a02ea4baa43f26f39ff4a260a43225ff9ecaa32ea59225319fa8a33ba5ae25979d5ea3d2a55025209e63a3b4a51c252d9eeda204a55f24849d05a35da50f241b9e8ba3fea51824ac9e25a430a60424059e20a423a69f23119e0ba4f8a50223d59d95a388a534229c9d5ca35da5ae218f9d68a356a591213e9d37a34ba542216f9dffa212a5f220469db6a2efa49a20599d79a29fa462201f9df4a14fa4ea1fc09ca4a1faa3681f689c5fa190a3eb1e839c80a182a3de1e559c73a158a3ce1ec09b0aa1c8a22c1e019c08a1aca2f81dde9bc6a055a2a91d259c75a0e0a13d1dd39b11a050a1d71ca89a429fd4a0311c8a98699e5aa0ca1b0000870cca0fdc09cf16191c181eec20771d1a2186221d26171dff20e3220927cf1c27213023d127be1df120762367287f1c7420cd2286285d1a0a1fbd219927df18cb1d20212e285817141dab207128cb14731b1620e7282f0e9f191f1fa7294390b8111b1cbc28cb9552961916a8280e9ae89b058de928ae9b1c9ef29ad6284e9c559ec49c6528219ced9eac9d4728579da2a075a00a29449f41a108a1bc281d9f98a2a0a2f228529f27a2dba22128e09ee3a149a2bb27979fa7a128a22e27d09f60a266a39927219dcba15fa32f26fa9de1a1afa330263da007a396a4b326b19fa7a2eba41826a79d2ca27ca43825409ea8a2baa44925699ed0a212a55d258d9e16a327a54c25ef9d46a3aba5f524089f15a4e3a5c1247d9e2fa43da67724199f34a490a658247b9e2ba44da6d223559e1ba406a65a23379e19a4d7a5e622e99d0da4bfa58322cd9d05a4b5a54a22889dd6a375a5c921669d41a315a521218a9df6a2c8a4c620089dcca2c0a48420f49c99a2a2a45520b29c52a26aa40520989c2aa24ea4b21f889c1ca232a4641f6f9cbaa1d7a3ee1e0e9c2ba1f1a2201eed9b17a1cfa2e91da79b19a19fa2cd1d5c9bbca047a2631de49a70a0eca1f21c879b79a0f9a10b1d129b17a05ba1831c6899339fc3a0cc1b0000b206f8087b054a16d81a041d5c20be1e4921322302275d1d1c2103249627431d7f211b244f28461e31219e23a128c71da4202923ed28ed1bdc1ed1216f287a19561e6221a0283e17f21cad20612886144f1ac31fc228a30de516f21e8229ab8cfc0a891a492884955e9428188128da981f9a8213ea28679a3f9cf59616297f9b1d9d159a9928cd9cec9ea59da028509ec8a089a023296a9e1ba17ba1c328cb9e10a162a13128b99e3ca119a2f527889e85a2c0a31e28f89f14a368a42f2819a03fa367a42328eb9d51a207a47426b39e30a23ba43b2660a0a6a30da5ed2611a073a30da5d226039f48a3e7a42826f09e05a4a8a555263ea0dba3a6a500267e9ff1a323a6fa25e69e0ea480a68d25e59e86a3bfa57024bb9e0ba4eba5622407a032a46da6682413a01ca420a60b24c19e99a38ea52023009e46a34ea56922e39d64a35da52222b59d68a359a5df21aa9d55a360a5a921519d43a348a55d21499dd3a2e6a4e320419d84a297a477206d9d2ea24ea42f206f9d05a238a4e71f6d9de4a121a4801f019da0a1cda3051ffe9c81a17aa3ca1e989c61a177a3811e489c31a127a3471ede9bf9a08ea2b51d5c9bb5a074a2781d0c9b8fa04aa25c1d409b95a055a27f1d819a31a0c5a1b91c4099ae9e7aa0be1b00005508800a16074016d81bd51dd920851d4e211b231c27a71daa20b422ed26d31cf7203923b1272a1dea2046234428261c7120d5228f28711a9b1e642151285518861de820c828fd16251cba1ffd282514ec18ba1e3a29e2108a16ad1c5829468da80a371a15284f93539437184c281b990099cd0ca128679aea9b9796a028209cbd9c8d985e27239c989eb89c5928899deaa057a0f228d49d78a115a2a628f49e44a2d1a27728e99eb8a2c7a37328159fd0a242a41528529fe0a22ba4e12767a0c4a3cca40428669ebea24ea46926689e57a235a49426fea028a447a5e5262da022a4cea5b326a09ff2a381a511261e9f5ca4d1a53f264a9feda3bba5e225dd9e01a3b4a52125669f40a35fa5f0247d9ec0a241a50c24649efea315a66624479fc4a309a613246d9f3da42da62c244a9f27a417a6ed230f9f36a4f7a59023659ef5a3afa5d022e79db8a372a53b22b59d8fa357a5f021749d34a32da56a21719deea2ffa4fd204e9dc9a2afa4ad20069d7ba27aa45520b19c3ea256a42020989c16a229a4cd1f9f9cfca118a4871fba9cdfa1fea33e1f5a9cada1a3a3eb1e039c66a12ba3871ef99b14a172a2f31d239c83a005a2591d189c33a0cba1f01c269d31a087a1d41c7a9cba9f87a15b1c0b9a339fdda0931c00008908a10ac6053616991be31dd720d81eff20e122d826261de920f622ea26ef1c162162238c270c1ddf2005230a287a1c3a2055224b285f1abc1e72211e285319e21d45215828ff176f1dd1208128a1140a1ca01fd028b00d1518d61d2129d29114117f1b2728da952b9185197128c298ee99ee0cd228d29a469c5998b2284c9a209d019b2728279c6e9e399d3d28279d3ba0c49faf288b9db8a023a18228659d1ea15fa16028a89d12a1eda1ee27d59d37a17ba2ee276f9e7da199a2cd27bb9f29a290a30f288b9e3ea216a49d26e59e5ca204a49b262ea0b7a3d5a48626e29e4ba3f7a49026bf9e14a3eda4f6250b9fd3a34fa50526809ffda3b6a5d825fb9e80a380a58725399f0ba4d3a59d252d9f1ba4a0a5d524929ef6a39ca59a24b49f61a453a6ad24699f69a458a66924039f14a400a66c23159e46a379a55122da9d6ca37fa52922b49d7ba369a5f5219f9d67a326a59121659d07a3faa41f21649dc1a2cba4c620a49da0a296a49120bd9d69a26ba44920969d17a25aa4ff1f939deaa12aa4871fc69c56a1aca3cb1e629c17a11aa35b1ef69bd6a089a2ec1dd99bcaa083a2c01dcf9bf6a07fa2c31d9f9baea042a2531d5f9b5fa0c3a1091d959b62a0cea10c1da09afb9f61a14e1c1599a09e54a0ae1b0080f985b1819603fc18d91d7d1f6223aa1c002153223327021c0120b2211326701c4420e421ec26d81c7620ae22c927401c2a205a222428751b231fb2213028f518701e6521c028bf175b1df720af28a214411cd71ff4283e101719981e01292d8ca310271b3327f59432940c182b28a699a9987d8c44281e9a869b559866285e9a9e9cf99af927409bae9de69c3b28c19c959e1d9e3a28429d18a077a04c28f39d4ca1f4a15328f19d05a233a34728429e81a21ea43a28249fd9a207a426287c9ffaa25da425289b9f11a37ea40328859f05a398a42d27de9fe4a345a5502701a017a46fa533272e9fe5a37aa54526329f32a4c3a55e265f9f2ea4c4a563269b9f18a4d6a52a26ad9f66a416a61c2629a077a48aa66e25579f9fa493a61425979f65a47da69d24689f70a46aa67024da9e57a432a624249d9e51a427a6a1234f9e15a4d6a5cb22f89d71a338a5ec21a09d04a3e6a458216c9de8a2d6a40921369da8a2a6a4cb20dd9c71a274a47f20d69c25a23fa42920b69cf8a11da4d61fbd9cdea100a4781fbe9cb1a1e1a31b1fdd9c92a1d5a3df1efd9c77a190a39d1ef29c3aa141a3521e929c20a109a3011e589c82a03ba23d1d229c66a0fca11c1dde9b74a0d8a12c1d109b0ea08fa1921c5c99c59d439fd41a000058016c8d1f14311c7420e320d7253c1d96210c233c27fe1c382116235c27de1c142107239e27b11ceb2038234528641c9e20a32280283b1a2c20852264288619f91f1d225a285618491e25213728a715b51c4a20af281612bd1af71e062946061b183e1d6b28d191d80b3f1bcf28de9609950c141129c5999c9bd1986c29df9a979c159b8f28de9b3a9e089eb328ad9cc69f949fac28269d61a0eda0a928f39dcfa015a16928be9d2da1cba12e28d99d8ca151a20b28b79ef2a1f4a2df27449f7ea29ba30b28459f19a385a4f827eb9e1ea39da4d82682a00fa424a51d27a29f28a480a535271e9f45a4cca5e126db9e8ba4fda5b22661a03ca4e6a5b725bc9e0fa485a64625e29e0fa43ba641254b9e05a339a52524f59deea375a55a24df9eafa382a5ef23be9eada385a5ad23339e85a353a51023959ecaa37da58e22889ef3a384a55422129ea3a35da5e521b79d5fa333a59d21529d42a31fa54a212d9dd5a2e3a4fb20dd9c89a293a49020d59c03a217a41220639c58a183a31b1f289c38a14aa3b91e0a9c01a107a3521e749c14a1f3a2571ebf9c29a119a3511ee49d03a1e2a20f1e789cbca06ca29d1d0f9c8aa010a2611dd99b57a0dda11a1d069c71a0fea1551dc69a04a0a5a1e11c8699399f39a12c1c0080c18e4891e411a81dbe1eb220bd24641d7b20ad221226e81c64204d222e261b1d9020bc22eb26801c8e20ca2250273d1b4320a322a527d3193d1f5c21ba27f218f71e56211e286918ba1d7d206b280b167d1c4f1fc828da11c21a2d1efc2845062a18891cb7286491c011461c10292396d60b80180d29d2975a98700ded28e698359a9c9663281d9a159d8d9c7228569ccd9ed49e4028b19c16a05ba03b28459dc1a054a125286c9d3fa168a22b28ec9deba183a351285e9e6ea2baa35628509fcaa208a46128399f5ca3bfa43c282a9f95a3e1a4fa27549f20a4a0a5a42777a055a4c5a58b2758a096a454a68927a79fc8a470a65a2792a070a4c9a5972613a05ea4e8a5eb25c19f55a4dfa59425d49e6fa418a65825039f15a4aca58e24bc9eb0a351a50724ac9ec4a348a587236e9ec6a362a518235a9ecba363a5cc22189ea9a351a57c22c29d56a30aa50522909dc1a2bda46021469da9a2baa41321449d96a2afa4cd20f89c5aa27da47d20b89c06a227a41420a89ca3a1cca3431faa9c8fa1c6a3f11ece9c74a16aa3cf1efa9de6a090a2001e189daea089a29e1d7e9c83a03da24e1dd69b56a01aa2fe1c2c9b49a0fda1ef1c2b9b35a0f1a1e71c7f9b38a0d3a1eb1c159b0ea0e0a1791c179a0ba09fa1ac1c0080d1906190d011631b6c1fab20a724991c672015223626131c1c20b6212a26f61b1020fa215f26401b861f6821a326701a1b1f72213827d319f01e94217727d0186a1e4b218627ef16351da520af2797149a1b561f0d284811b31a7f1e68284506ba19671ed1286691a516cb1d22296e95db0bac183029529811976f8d5529e599aa99dd963f291c9a5c9cbf9b0929899b889d649d1a29249c159f7b9ff328349d42a0b5a0cf288c9db9a0e0a1a0281f9e63a18ea25b289f9e82a2e1a36f28d09e79a21ea47a28d19ee7a25da44528879ed8a278a4e0270ba08da3c0a49b27559fd4a305a5e2270da031a4b1a56d2727a098a404a643275ba0f8a45ba60d275ba0daa437a6ab266c9fa4a441a61026789fa9a43ca68525f69e36a4b4a5b324d99ec8a353a503245d9e8da316a55223ce9d0ea3cfa4a222f29d07a3c3a40522ec9df7a2b4a48621ea9dd7a2c0a44821a49d80a28ca40421319d58a25fa4b020fe9c31a238a46f20079d17a22ea44e20fb9c0da21da41920ba9cd5a1f6a3a91f839c93a1aca32e1f4e9c5da170a3c71e299c3fa123a38d1ed79bf3a0c4a2411e6e9bb5a06ca2d51d289b42a098a1121dec9a6e9f1ba1631c1e9b2d9f28a1331c399c649f27a16b1c9e9bf39e00a1301cd699989ec2a0b81a0080098f638f61139219431d751f5424ef1b391f07213225951b391f3421ed25b91aa81e0021bf25be19bc1d8620d425f918501d26204d267a181f1d2820c526ef17d81cfa1f2627d016641cee1e8527e5142d1b641ee7272412e819451d1028350c0519021d6b28aa8fbd17ab1dcf28c394a014061bf128b297e594400d4a29eb98d9983b978e29a4990e9b279c8729a89a5a9dbf9d8729299c3f9f21a0d529609c7fa055a17a29069d27a156a230294e9dcea164a3f6280b9e5ca27da3c528219e26a2aba3bd28529e07a38aa498280e9f27a467a56b288fa0e6a448a6692855a0f3a474a65d2817a0bba43ba60828c49fb8a415a63f272ea087a412a65a26659f3aa4bda5a625159f0ca47da53e25e99ef8a347a5db24b39e8da321a54424499e6da30fa5c623169e37a3e3a43723039e45a3f8a4bd22eb9d5ea31ba55622fd9d41a312a5e021d59d20a303a56d21619d84a2a0a4e020eb9cf4a119a45220cb9c9da1d0a3e41fbb9c68a183a3771fae9c40a14da3061f8f9c2aa12aa3b11ea29c02a103a37d1e8d9cefa0efa2301e919c10a1eda2261e159df0a0c0a2ec1dc39e52a0cca1141d919c74a05ba2211dd09b14a0b7a1c01cab9a509f15a1501c399ab79e91a02c1cf699409e7ca0f81bae99419f30a1761c0080358e218fec0f091a7a1d86204024611c741e18219724921b141f2521be25ec1ada1e1121ea255b19c61d62209f25cd18541d1b2002261118651c3e1f8e264015981ae31d7d262014d618e21c95267c1107182c1c3d272e0c3d16bf1b0228bb852515711a4c280591b810c41999289b94bd8a8b15d128cc979995358c93288a980698eb95e428ae987899ab98602985990e9c219cb729649c959e409ff929859eb8a015a1c229b59d99a15fa2b4292b9e3da24aa38329989e8da378a4aa297f9ebfa3bda47829389e17a461a51829219f75a4d8a5cb28a49f55a478a55c281da045a49fa5ce27b89f45a4bda50e277b9f15a473a5442634a016a423a5aa2552a001a474a57225b79fd4a372a52925499fd2a350a5c724049fdca32ea53e24d99e8ca30fa5aa236b9e1fa3eea40323199ef4a2dca47022fd9dbfa2c8a4f821d09d94a29ea49121c89d8ba27aa43521c59d6aa273a40921789d38a257a4a820539d09a234a461204b9dcfa108a416201e9d86a1a9a3631f7b9cf5a0d4a2a11eac9b8ba049a2e21d549b58a00ea2a01d4b9b44a0efa1871d439b3ca0e9a1611dd49a30a0b8a1261d579ad29f69a1c61cfa99629f0aa1811cd299f89ec4a0381c1f9ae69eb8a03a1c2c99179e86a0c41b2799ae9ebfa0691c268055858182e4158a176c1a5f1c0621f61b081e1720f624ca1ae81d46203e25441a241d33203a2530199b1c521f67253818791bed1d9325a3155419cf1cde251713ad16061bbf25e90f4513df19012638842308ba17ea25928d4b8e2f1500262492c6947a130026ac941797260a4e2633963098468a40263898939975946b2774985f990f962627c89703998c9798265e9892996f987c26299a719c209cdd27bf9b7b9ff79f7928aa9d3da1bfa1d228fb9c3ba146a2f8289f9c50a1cca2e4282a9d3da178a21228d79ce5a19ea3ef27789d3ba213a4da26bc9eb1a23ba4d1268b9ef7a289a475265d9fe2a297a4ed2555a00da3a7a4a5251a9fe8a2b0a43a254d9ef5a2b7a4cf24f29d23a3f4a444240d9ec8a29ca4c223dc9d71a267a4a522b89d53a245a45322759d09a237a4c221359de2a12da47121659deda143a45021689deea143a4fe205c9dcaa114a4a820439d8ba1a9a352200c9d51a179a30420b19c34a14ba39c1fa79cffa014a3151f839cf4a0d9a2b61e8b9cc0a0a1a2501e8e9c96a069a2e61d659c69a035a29a1d2d9c4ca0f4a1761d049c2da0d8a1331de59b11a098a1101dcf9bd19f44a1b61cad9b9e9f33a17f1ce69a689f01a1471cf39a0f9fb5a00a1cb199f49d58a0dc1a43995e9ee2a0091c0080f080c900f0003716ab1af21cdc20f2191d1e4020dd24e419651d3f20ee243719db1cb91f1c258e18171cea1e3a2541176d1ad91d442568152e199d1c8525ff125e17f71b4f25e6105d141a1a4e25950aef10ed1885258a8ab0872b1741253193a992771215251495fe950d09df244796d396898fb1243198b7985394932416995b99a49650244b99be993b96c52373994f9a399750235e995b9a74982023169a779b2b9af722f59b7c9c7a9c4c23e19c179d4a9e1423419d8d9de09e6b22379ec19f78a085231c9d22a09ea0e322289d44a0dba0c322329ea2a0c9a11c23f19ddda0b4a239238e9d1ea105a35123b09daba1d3a3b623f49dc9a11aa46623c59da6a10da41923189da9a1e2a3cd223e9d84a192a32422cc9c4aa185a3b621e49c4da174a37821439d83a1cfa36d21579d75a1c3a33421419d6da1b0a3db20169d4fa182a38620169d23a13aa31a20b99c08a120a3881f749ceea0eda2471f619ce8a0eca2ea1e629cdea0e1a2a41e779ccfa0aea27a1e7e9cb4a07ba2201e7c9c9ea05ba2d31d209c5da0fea1811d269c33a0cca13a1d1d9c33a0bea13a1df39b37a0a9a1141d599b31a0b3a10d1dab9acd9f36a1b31c8d9a529f03a1601cdf9a759f04a1751c1d992a9fa8a13a1c0a9abc9d07a0851a00009a06330ad709c7185c1cf31db6227519231d391f4a24ae196a1d3220d6241319f61c2420d32457180b1cb91ec824c016ae1ae21d9b24631566190a1d9024ef131c18881c84240f118c15511b74248c091012951977249489400d751883241d90fd8c32153c24c791d792190e8e23f493a194f387e6229d948a96eb9269224495bb97ef948721b49557983396cb20e995ab985e984220c2968999f699f31f0998409a579bc81f5598759ad49b7f1f7d98a09a0a9c541f9698709a239c5d1f8d98a29a069c971fb6983f9b0e9da61faa987d9beb9c2520d5999b9c219e9220cc9bcc9d01a00721f19c6d9f01a13e21bf9c3aa09fa16a21e09c65a00fa27121b99c26a081a141216e9c09a079a1d920979c6ca047a2cd20a89c95a07aa2d020bb9cbaa09fa2ba20c19ccda0d5a29120d09ce8a018a37120e09cf5a047a34620d39cf6a02aa32720ca9cefa01ba3e11fb69ceea0efa2841f879ccfa0c6a2191f829cc0a09ea2ea1e779cbba093a2941e689c99a06ba2651e779c80a045a2101e499c58a022a2bd1d129c3aa0eda1661dec9b07a0a5a1251d169c01a09ca10d1d219cdf9f77a1e61c409cd99f5ea1bb1c729cd89f5aa1a11cc29b809f28a17b1c539a309ff6a0341cdc997b9d869fe11a5a99519c139eb019000062115314e20dd31bea1db71f4623281abf1d15201c245e19d91c401f08249418361c821e0a243c185d1be41d0e24cf16c7192d1d0224f5148a18701cf2236b12f115591be0230a0e3c13d719fd236503d10c2b18fb231c89698c80154e23b88f1a92b41092229393b8959290852282946297f2944c2240958b98b3961222069612999798e021d896e199cb99b121cb976c9afe9aa3219898999b2c9ca0213e99ba9c919dbe21b4992f9d0d9e9621e299389d399e5321ef99509d769e2421d6994e9dae9edf20bf995b9de69ecb20a399669d4d9f95205b99709d629f72208e99769d389f3c20bb99629d599fed1fdc99899d959fba1f549aec9d1aa0f61fc59a509e7aa01120169ba59ecba0f61f6e9bf79e11a1e51f8f9b489f3ea1ae1fae9b709f68a1921f039ce19fb1a1791f1e9c13a0d5a1571f169c22a0dfa1311f2c9c3fa001a2061f3c9c47a01aa2f61e469c68a04ba2ba1e509c93a07aa2971e3a9c7da049a2611e179c53a01ca2071e089c19a0b7a1a11d849b839f43a10f1d1a9b409f26a1b91cf99a0e9feaa0981ccb9af79ed9a0621cae9af69ec9a0521c819afd9ed5a03a1c789a069fdca01c1c549ad79ebda0001c359ac99e9ea0d61b629aa59e78a0f11bf9996a9e75a0011bb19b489feda0eb1b5e1e92184619ac1c1424bc1bc11f5d228b264d1da21ea0249728ed1cae1ebe249b29dc1c4d1e9425992adc1ce41d6425732ada1b031daf24532a801c3f1d3e252b2a351c2f1d11255f29b71b081de324d628501f5020d7269c28e925cf27db299d2204a577a07b2cf421b5a1b0241d26c211019ad528e721c390928e312cb920699bcb92dc2c4721b89c6f95472dde21da9a62964e2d14223799bc9ac32c3f232f98e09c412c7423df996d9df92bf3226497d99b332bfd20149592992c2a4a207c94f3970a29b81e2f952f9885285e1d8094f898ed270f1d13944d9964256b1c309188999721941bf188ef981d15821b678e0f9b0ca2101d1297b59da9a5562077984ba05aa86b23b59905a0a8a633233798449f61a43d229f981e9ea2a0e720b196f49dd59fb81f02995d9ffca0a81fe79a63a0dda1e01f739b98a030a27b1f729bcfa05ea27b1f789be4a070a2801f8d9b04a192a2541f009bf1a076a21e1fd99aafa035a2861ea29a7ba0eca1281e999a5da0aaa1cc1d7d9a46a07da17d1d719a4ca07da1731d259a4ba078a1601d419a3ba059a11e1df399fa9f17a1d41ce099a39fcba0861c6299579f91a04b1c3f99229f7ca01f1c4a99049f69a0ee1b9199e89e4ca0a31b7d99ae9e6ca0381b8799359e1ca0151bc309d40e04114915751f6d1d6a20f523c723931fed20ae253026de1fff20d5262128dc1e59209d261129371efd1f1e26c3290a1fbe20be25442a1220812113257b2a932005221625ff299d226d242426a329fb24aa265e2868281e256e276c2a1225bea1f09f072afa1fcea415a15526329785a2d0224a24ee9d23a1fd287e22999f4d9b462c7a216ea06b9eee2c5622c29eb69e112dcb22069e5c9f292d7223bf9c259ec42cd222d29c7e9e932c9122c09afc9c4d2c0d218997789a362b111ff995da99572a441dbb97969bde29941c2b98ac9b6428671cf396a49ace24a41a6b96509a5e1ecf193d96a99a2a95211cf896849b36a30b1eed950c9c03a7381fd096509d89a83a21a89802a157a8cd225b999fa124a659227a9c1ea2baa45522289c24a106a43b21209c36a1b4a30821539cc8a11ea41021d49c0aa24ca4e520669ccfa105a47e20069c7ca167a32e20c39b4da112a3d31f0e9c68a143a3fa1f199c4ba131a3901fe99b06a1aea2f21e6a9bafa019a2441eb89a87a0f0a1fa1dd79a8ca0cba1bc1d909a69a0b1a1901d779a59a093a14e1d929a5aa083a13e1d549a42a062a1071d189a2aa04da1c01c029a09a01ba19a1ce699d29ff2a05e1cdd997f9fa5a02f1c47997f9e60a0c91a7a99d99d989ffe18fe0f8114741581142a1d131e89208124a62052208c217c26e9224a207c215e26fd24b51f25213026fc26d21f2921ad264028ce1f29217126e828ec1f792190261729ff20df225027fb289c21ea236f2776287b22d8241828c526c820fa230d29c223169bdf8ef428001d3aa316a13d28be9ccea238959f26e19ecba0e624612530a0e8a02b290e25f39f559f3c2c1b25829ea39e5c2d62242ba0fda0612df124089f01a1ea2c8524e99d6ea08c2c4d24219ed2a0652c3b24179d12a0132c1a23639bde9e832af5214d9b619fb429dc21a89a169f8a279121599acb9eec243321949a649ff51b6f21fb99519fb19e9a215d9aa19f89a58b21b89801a098a85c215f994aa09ea8c9216398f5a042a7db22cd9a0ca239a66023a29cd7a2dda558232e9df7a2aea5a222769de7a268a55e22ba9c7ba2dca49a21199d92a2c9a46b21cb9c80a2b1a43121759c26a24da4b0203e9cafa1eba332200d9cb3a1eba32620429ca5a1c9a3f51ff19b4ba12ba35c1f949b0fa1c2a2cf1e1c9bf1a08ba2701e289be4a06ca24b1ede9ac8a055a2f51daf9a94a014a2b31d7c9a5aa08fa13e1d519a3aa068a1fd1cfe991fa037a1ce1cc399f29f0da1891c9199c19ff6a0541c8699cb9f05a15a1c139a609fc0a0c91bc0994b9e1fa0401a0000fd127814df10d01cc01f4a211f257a1e792072210f2612206f20dd217226a7215420ab21a3260324982033225f27eb249c2063226b2701268e200f222d27552742219623e327d026352116246d2804269f1f03223e2865241c1c68201428d520cd9853144d2864149da0ca9d2f28789c3fa2ff9d4928469e98a1021a8f275a9fb4a1ba246427879f35a15f297b26c99e5aa05f2cf2250ca029a1592de4254c9f37a1752d5a25479f71a1352d3625509e58a1db2cf324449fc7a1502c4625f69dafa15b2bdb24019d07a1222a3724619cefa07228e1230e9d12a19324f223419e57a1331c2f24a39c5ca1eba03324c49cf4a1aea77c24639bd7a169a92a24d99a91a1aea84f238b9affa187a65123ea9cfba2faa58623ef9d66a3d7a56623c89d65a3e9a50723d79db4a322a6de222a9d33a366a5f021ff9cd1a2fca47621f09ceca2fba44c21099db5a2c8a41121bc9c08a236a45b20979cf7a11fa42c209e9c1ba230a42320739cf6a106a4d21fdd9b44a11ea3c61ee59b1ea1e5a2801ead9b15a1c5a2401e749b08a198a2fc1d879b11a1a2a2071e309bc7a054a2921d8e9a58a0b7a1f51c2a9a1da062a18a1cdf99f29f1ba1491ca099d09f10a11e1c8d9a14a032a14d1cd49a23a079a1361c9e9a23a07ca1361c490667120c126712bb19cd1ba41c931f121d4820e72126263f1fe2205f2291275d208b2019224b27c3201020ad2149274d21841f702114277922941f83215c27e6232b209b22fc27fe235c2032237228c821b31e13237f282b2011178a1e83285f1ca09a788d6d28b291bb9fd19b0328869b0ca16a9d3728a79dafa11e9cf327b29e3ba1c119d927899f0ba101253e277a9e02a1ea29b92603a1f3a19a2c4e279aa036a22d2d912616a023a2272d16262e9feda11a2d9b25a0a0aea2922c22260aa07ca2ca2bc725089ec6a11d2a25254e9e66a25e2845252d9f57a226241525fd9e79a2f0150d25769d40a26fa2c024d19c8fa2cba7db24119b65a24ca967244d9bf7a102a8f9236e9c84a20ea627245b9da8a38ba64424ad9e11a487a62324349effa397a69b23879e01a480a608239a9d66a3e5a51a227f9d61a381a5d4218a9d81a380a5aa216b9d4ca346a55e21529ddfa2e4a4e520149d6ea28ca470202c9d07a22fa408203e9dbaa1d9a36b1f059d79a17ca3de1e9b9c77a150a3a41e5b9c5ca13aa3601ed99b46a1f6a2331ecd9b28a1d5a2f01d619beca07ba2ab1d069bb9a03da2531dbc9a82a0eaa1f91c5e9a2aa066a1a61ceb99d39f1ea15e1cdb99ad9feda0571cf599969ff7a0701c479b4da0dfa1a21c940d34153f159c145a191a1b701cbd1ee71c6420122271268e1f9221902322286f204f216a2312283a202c211e2335285e1f8820b9220c28821f4a203b222a280320c61f8322872820209e1f6e22d3281a1eb11d0f21ac28071c2519371f6a2804178e91e91a3228a895039ebe984c28079ad49fea9b84286c9c399f969b1b28dd9eb79ffd981f28199f34a1c5191328609e88a151250928ff9f72a26a290b2838a019a3392c1a288da06ea30d2d192871a085a3202dcf27a9a093a3cb2ca227389f92a2042c3d26529d80a1af2a0f25c99e5ca2ef289925d49e05a32025c1258a9f36a29d1cf6249b9d71a29aa3c624e39c47a343a82525729ab1a248a97f24fa9bf5a28ba76424be9ddba340a6a924209e5ba4fca6be24779f68a4eaa67b24f39e51a4e5a61c24c59e4fa4c9a6b323319e12a442a6ef22219e09a410a67822449dd7a226a537218d9c3da2a2a47b20939c51a2ada47a207c9c39a296a44520949c35a26da427207a9c00a247a4df1f679ceba118a46d1f349cafa1c4a3fd1e2c9c8ba180a3bb1ede9b49a12ea36c1ebe9b30a1f4a2191e3a9bffa097a2e01d159bdea079a2cb1d2f9bd5a04ea2901d229ba5a00ea2691d049b87a0e1a12b1df09a66a0c2a1051dd99a13a077a1671ce999b39f77a1b51aed0a16151415401657186a1bc71c571f581d9c203a225526dc1ec321d52323286b1f9421af232f280f1f3421742318280b1fb12009231828871e34205a222228901ddb1e9a215628271d071d0d217428351bdb1a8d1f6e28e618e914201ec228f810799664185d289d96de9c9a936028ef9af49ec7987728c29d5aa03f9d5228c19e27a11d9e7e285f9f04a1f19c7f287e9e9ca0a71c302814a0d4a0c324c22726a0a8a20929422808a066a3362b4c2840a057a3542c3528a1a05fa3b92c2b288a9f01a3402c5f277f9efea24f2b0b272ba0f2a22629b126f59f3ba21b25bf25a99f98a2e515c2251b9e1da397a4e625e19c45a3a5a79a255b9c3aa36ca717258d9d64a3f1a5a624aa9e4aa4b2a6d424c49e8fa426a7b7244ea05ba4fba66d24809f4ca4eca60824159f31a49ea66423fb9e29a465a600237c9e18a41ca69522759e32a42aa67322e39dfaa3d7a5dd21fb9cb5a2f2a4de20a69c3fa29fa44f20759c2aa263a43420779c16a24ca405207c9c17a239a4a41f509c15a234a4891f4e9ce3a108a4271fee9b57a13da37c1ec09b0aa1e1a20d1e239bdea09aa2b91de29ab8a054a26f1dc99aa7a04aa22f1d839a57a0d4a1e41c179a11a08ea1631c709a21a099a1821c999ac99fcca1281c6c9a059e1ea0bf197f0b17153d15431425185a1ba81c231fbc1c32212c2312274d1e0c2224244228971e9221f0231628c41e7a21b1234028561e01217b233e28691d61209c224028fc1ce41ec1214128631ca01d3c2196283a1a121c3520c2288016a614221eae280c88719462186a28a999089d40965928319c9c9e2f9ace28cc9c28a0e89c3229b49e3ea0f49cda286e9eb8a0559d7228889f01a17b9e162802a082a1a099f127d99f20a2241f8727f89f84a30a26112868a044a33529f82741a005a3292b1828cd9fe1a25c2b91278fa0f7a2792a042773a000a46d287f276e9f3ca390227e267a9f38a33b9e2426a79d46a326a5f8255c9caca2b2a638251c9d75a30ea64125049e00a497a54c250d9ed6a34da6bd24189f54a4bfa6b624949f5fa4f2a68424459f09a489a6d023f99e02a454a66823449edfa32da6f022ea9dd1a3e4a59422499ea2a3bfa50822a29f4ea36ca5842101a0d5a2e8a40621d99e9aa2d9a4c420d89d78a2aca47820689d2aa26aa41f202c9de3a11ba4a11f4d9db6a115a42a1fb09dc6a1c8a3ee1e949d92a143a39b1ed69c5fa12ea33d1e2f9c33a1eda2ea1d749bfaa0aaa28b1d3f9bb9a06aa2261da89a69a0d9a1ce1c9e9a43a0bda1991ccf9a3ea096a1931cde9a33a0aba1881cae9a119fb1a0d81a160cb714e514e112ac18f81bea1c3d1e811d462150232e27d61eeb212c243628051f7f21f2232b283f1f5321c1235528611eda20882361282a1d7a204223b928471c551f7322ff28801a8a1da82117299d183d1c6d202429491125178b1e3329d190f591a51bff287f98a09a34141029849a769d21971b29819c4a9e269b9228e59cb59f299d7828549d89a07a9e3b289b9e44a107a04928e29fa4a1aba03b282ba051a23ca12f28059f21a2ee947c27f69fbda25d219f2771a0aaa3ce25462809a12aa30627a5273da083a3a5267527a99f6ea35922fc26a99ed8a20f1405267a9e87a2c2a27725da9d5fa224a50425209ee6a22ea51e250f9f31a4a8a51526559ee5a391a57f25419f1ba45aa633251a9ff0a367a68b24c49e07a488a63b24a69e59a4d1a65924909fb8a405a75b241d9fa0a4f4a6e623119f5ca49aa61c23a39eb4a3b5a5ec21f59d45a340a55821d49d6ca348a53821969d67a34ba5fb20999d52a349a5c6208f9d1ba31da57d20aa9dc7a2d8a426202a9d4fa27ea4ba1f169d00a233a41d1f799c95a1d6a39e1e389c76a173a3451e229c54a160a31d1eb19b24a1d5a2e61d479bd6a080a2531d6a9bcca06aa2471d959b91a007a2fa1c869b46a0a1a1821cf89b32a091a1391c0b9bcc9e9fa0ec1a3b1144168917a8154617051b721c601e4f1d0521db2236273e1e962192235328771e9621da235528a21e7c21fa238328961d0021a2239e28f21c3820c622ae28631b9d1e9221e0288819fa1cea201029ec164f1a521f11293111e911fd1c3329c090be94f519e4280e98d499330d9228e59a459c1e968528549c429dc89999282b9de79e779bac287d9d02a0649d25280e9f5aa17e9f8c2883a0b1a229a1c428ea9fc6a2a0a147285e9f48a1839ff626b2a03ea2879d9127d4a0cba3da9bd927afa0dda33e962a2744a0e2a39197b426e19f5aa43b9fdf2609a033a4f4a20b261aa0a9a429a58626599f6da4cba5f92540a03da459a595257a9fa4a4ffa5e7255a9f80a48fa67125e29f72a4a3a62e25749f94a409a7fb24569f91a4f5a6cd243c9f9aa407a78724949fb3a42ca76824989e79a4c6a6e3238f9e47a469a61923989e15a40ba663223f9e06a4eaa5f2211b9e09a4e2a5b421cd9dd2a3aca57621cd9d8ca36ba51c21b19d48a338a5c820a29de3a2eda462204f9d5da282a4f21fe19c02a233a46a1f849cbaa1e7a3ee1e519caca1b7a3c71e289c8aa182a37e1e039c58a122a3231e359c40a1f8a2e81d749c0ca1aaa2ac1d9f9c87a001a2ef1c2a9c16a061a1741c0c9b249ffba0ff1bed99b19edca0fc1a620505140714ff105a17771a751c011e021d01211d239c26e51de6210e241d28251ee721222460284f1ea7211024a628101d22217123b028481c6920f8227c28bb1a0b1fba219d28e318381de120da287a16141c2d20122904117418451e2b298f90b70b691bda28d99636983b0db628499a8c9c0094c2281a9c569ec69bf9281a9d39a0569ef528489d9fa015a0c728aa9e8aa165a1dd28b5a04ba22ca2a9280da079a257a2622858a0fea266a3362813a0e6a2e8a2b227ec9f94a378a3db2759a1f8a36fa3cd276ca111a4d0a3f22651a009a409a4e5264ba011a478a4842643a028a462a55a2667a02fa4bfa54026efa03fa493a5fb2508a02ba4d8a5a225ba9f55a43fa65825ad9f81a409a7fe2471a014a560a7402517a098a4fba698247c9f81a4faa64a24ff9e71a4dba6f223ad9e4da46ba65923739e32a438a6d8228d9e33a423a6a922879e4ba42ca66d22709e5ba437a63e22159e2ba4eea5b721eb9dada364a51a21869d51a305a5a8203b9d14a3d6a45d20249ddfa2bea43d20059dcda2afa41020c59c6da272a4871f959cd3a106a4b01e0a9c30a106a3d51d479be7a0a8a2651df59acca073a22a1dbf9a98a02ba2f31cc49a7da000a2bb1c4a9b8ba016a2c91c569b4ea0a6a12d1ce39a31a0cea1541b00001602c001b2802017ab1a4e1c541e221f3f21bd2362271c1fb92116241d28f41dd8213e247b282d1e9e2120249f28691de2207b23a628291c3120bb22b3289a1ae71e0b22c3287118441dec20e5283e152a1ab41f1229cc0dec14281e33293d90aa8b651be228b49686967816bf281a992f9a420dc928cf9a549cb09679287d9c999e939c9d28639d3aa001a07028e49ef9a090a06628b19fd4a1b8a1b2281da008a2c0a16728ad9f0ea253a20728cf9f0ba3e4a31228d1a073a341a4f7274da0e5a3caa49e2707a08ca398a4cb26fd9f08a3b1a42a26c89faba3fca44c2616a023a474a5a1268ca066a4c7a5b9269ba0afa493a6b2261aa059a4b7a6c12541a0a3a4f1a6b22544a0dca44ea79325b99f9da411a7f024ec9fa6a4d2a6ba24ca9f77a49ca66524f49f66a48ba62124379f3fa448a67d239d9e0da4fea5d222529ed4a3c5a54b22109ed9a3c8a5f421029eb3a3cca5a921af9d8aa386a54d21bf9d34a332a5f020cc9dd6a2e6a48b20ba9d95a293a43020b59d5fa26ba4dc1f9f9d1da244a48b1f329df2a110a41b1fd79cb3a1c9a3ad1e809c7ba172a36c1e289c31a106a3f61d7d9bf5a09aa2821d8b9bd0a077a2691d279baaa050a2221d029b80a019a2031d9b9af79fa2a1401c839b6d9fafa0041b0000a3028e02e100c515481a321cd51de91c21219d231027f71dd42131243d28471eef2131247328191ea7212624b328eb1cc2207323c928a91bb31f5022de2891191e1e4c21e6282717161c3420332931145319a11e2c296a0ddd14dd1c23297d90e18b191af4280895d596e016d9283699b69a7e8d1129829b599deb98de28559d7f9fd49cd1280f9e6da09c9ecb28e79e85a11ba1e228619f67a286a2bd2805a0fba251a38a2814a0eaa2fea347282ea0f8a215a41b282fa012a326a4f12728a03ca374a4bc2710a05ca3a6a44e271ea06ca3d8a4422775a036a456a5fb2668a0a0a42ba6f72674a005a5b5a61327c1a004a5d9a60527baa09ba49aa6512698a02ca440a654254fa04ca425a60625a79f45a461a6a5242e9f85a48da6ac244a9f3ca44ea62a2427a059a48da605241fa052a46ea6a223939f63a450a66723e59e58a420a602236e9e20a4cda55f225c9e01a4b0a5ea21039ec6a383a56d21f69d64a355a50121e79d34a30ea5ac20999de0a2bfa45320369d94a287a41720f29c4ca258a4ad1fbd9c0ba229a4391f8d9cf1a107a4051f4a9cbda1baa3a51e109c63a146a32f1ea69be0a08fa27b1dc59b8da029a21e1d039c69a0fea1db1c769c71a0cba1c81c509c23a098a1361c589be29f9aa1ef1b00007b028f02d4000816371a381ce61d821e4721c0232027221ed82121241428231e102246243828fb1d87210e246f28f21cbe204c239028511c6f2029238328ff1a03208222b0280a19a71eb221e72806169a1c99202d296f0d7518461e3c2972901412861c2929d3960d95e918f52820999b9a9a8dec28499bd69cc898ce28859b6a9ed79ca628299d58a02a9fc5280d9e49a1d1a0ea28b29e9ca171a1aa28e19ebaa1c1a17d28939f50a2caa27a28d29f6aa26ea34e2832a0b9a2daa310285aa0fea253a49f2718a0aaa3e7a42a273ba003a41ea5cb2650a037a488a59d262ba03aa4c0a57826f49f4ea401a66f2665a09ca460a64c264fa097a4a1a6fb258aa0cfa4b8a6e8256aa0b9a4afa667254ba09ba4bba60125ff9fa6a4a9a6e224db9fb7a4c0a6ca2406a085a498a6612408a045a43ea68723c09ef8a3c8a59d22239ecfa3b0a54d221a9ee6a3b0a504220e9ea0a35ca58f21f49d3fa331a52021ea9d10a3f2a4c820299ed1a2c0a47a20439e9fa297a43620f89d71a26ea4f21faa9d25a240a46e1fd29c9ea1cca3cc1e2c9c29a125a31f1eb79be2a0a7a2ac1d609bbda06ba2811d6c9bb7a062a25d1d5d9b8da025a2111d0a9b5ea0e2a1a71c179b56a0c0a19f1c369b27a0a7a1471c609aa29f4ba1661b0000dc00420394026a16ce1a6a1c021f061d8621ec23cb27f31d3b225f2487288d1d94210b245328b11d9f2103248328c11c1521ca23be286f1c5f20f222b828d1193b1f1c22d928d517851d2521c6286915471c0720d0280c10f618741eb5286f8c4511061c5d28c99535965b165a28bd983a992c8d8b28a299389be8968b28089b1e9d449a6b28699cea9e389e8428959d62a037a0ae28879e82a161a1ab280a9f4ea294a28728bd9f0ea3b6a35c28f29f7ba33ba43c2831a0a9a380a430283ca006a4e8a4fb271aa006a41da5bf2725a03aa48da5962755a068a4e0a54e277ea0a3a43ea635275ba0b7a46aa6fe2668a0b1a476a6a726ed9f85a46ca6242635a0a1a483a6082631a0aea487a6aa255e9feca440a78b25d59ffaa426a76625559faba4a5a6be24669f90a485a66c24239f85a474a61c241d9f8ca476a6ae23f79e73a455a616239d9e12a4cba53422359e7aa351a57321e69d58a32aa52021c89d15a3fda4cb20639dd5a2c8a47c20309d80a285a42320059d30a254a4ba1f049d21a232a4531ff09cfea11ba4141ff59cd8a114a4c41eb49c95a1cda3771e6d9c47a14ca3fc1da89ce3a0cea27f1d729c98a03fa22a1d209c59a0f5a1bd1cf79b51a0d3a1b41c419b9c9f76a1101c0e9a8a9e83a0aa1a00001511170ab5128b1c7e207121de25581d6521502342277c1d9b21bc23ad27a21d8321c3230c28671d6c2101245a28aa1ced207b2399280f1b65201c239328411a3d20d122cf28e5187f1f1d22f8284916621dbd201029fb11651a911f3229a286d714061dcf287c942592f51807295e98db98dd8d1829199a1e9c9b970b296a9bc79d3e9cd928b79c789fb09ebd287f9d92a079a0ad28079ef9a02ba17828a29e7da1d4a15128e19e29a289a218286d9fa9a299a30428ad9f1aa323a4f127af9f93a386a4a327ac9fafa3f7a46427ad9f01a465a5f02640a045a494a5002753a07ba4eaa5332789a0b6a44da635278aa0f5a4a1a61327d8a03ea52ba7dd2635a0dea415a7192611a0a2a464a66325a29fbfa4bfa655256e9fcea4f0a620255c9f68a44ea67a243f9f61a436a63f24159f57a422a6c823459f5ca422a62323779f48a41aa69c22f99e17a4d7a52622899ed2a397a5b421219e8ea37da55721ec9d51a34da504218b9d14a30da5a620699d64a27da41e20d99caba1efa3371f879c78a1ada3d41e5b9c4ca156a3681e839c28a131a33d1e7d9c46a119a32e1ebe9c39a1f7a21f1e849c1ea1cda2e01d569cd1a088a27b1d3d9ca0a042a2261d219c6da0f8a1fd1c5f9bfe9fa0a19e1cdc9a7f9f4da1d11a00807282f208cf112e1cdb1e4321eb24171dcb2091237f26f51cee204323bb26041dee20322329275a1ce6203c2384277c1bd6206623f527931a5020c8223e288319951f22227c281718711e1a21dc285e15081d3d202e290e12941a6a1e5829e48635178b1c3f290d94428c061939291c98a09565144f2969993d9bab970c29259be89d429ce328ae9c16a0529fc228ae9d00a1b5a09b281d9ebaa1cca15d289c9e37a2e9a22d28f99ec4a2b8a31c28359f20a304a4de273e9f97a369a4a827be9fcda3b9a4bc2721a022a41da5cf273aa062a473a5ea273aa069a4c2a5c32759a092a4dba589271fa084a446a6302758a0c2a488a6e626bca0c9a46aa63c2660a0cfa497a6e32509a0f2a481a6a225819fc1a494a627253f9f68a442a6b324cc9e08a4bca50824009fffa383a58223269f35a4bca557234a9f3aa4c2a50e23ea9e18a4a8a5a022929ed2a368a524221e9e51a310a58021b09d1ca306a50721869de8a2dea4bc20429db4a2c3a46620019d53a265a40620b89cdfa110a43e1f8b9c7ca1c1a3a21ee69c73a169a3751e049d26a1d9a2fb1d909caea094a2531d3d9c7ea048a2011dc19b61a032a2e11c409b5ea01ca2c21c169b46a00fa29c1c619b48a0e0a1841c449b32a0f2a1531c839b21a066a10e1c0080269026915117871bd81f4c2129256a1cef201d23b026531c8420a2226d26771ca820a222d626291c6c2091221a276f1b47204022c227f81a442041221c28e919f01f1e2248286d18bc1e7321842830161a1d7720da289d130f1cd51f2929ca0685195d1e3c29d2933d129a1c2a29cc969a9275175429c19839995f8e7a29bb9a849ca2994f293f9cc79d5a9d0e29dc9c959ff89ebd28719db2a0aaa09528249e47a1d3a169286f9e1fa220a34b28149f9fa2d0a328284d9f42a34aa40528b19fa2a3a8a424288e9f0ba405a51428929f15a40aa5d527b59f56a475a563272d9f17a47ea50027ad9f4ba4c1a5f126f29f90a41fa6ec26d89fe6a4aaa6c826e99f0aa5c6a69426e29f01a5d4a62d26ca9f1ca5eba6b625619fd1a4a6a62125479f73a42ca67324349f54a4cfa52224ee9e25a4b4a59023d89ef9a37ba5a222aa9e93a32fa5ed21779e43a301a58821459ee7a2c7a41921ca9da9a2aba4c5208f9d77a280a49220869d65a26da440206a9d3aa248a40320fa9cf6a117a4711fb19c9ea1b4a3e11e649c4ea15da37f1eeb9bfda0e6a2fc1d369baea073a2811d559b7ca034a22a1d109b31a0c0a1a01c449bdc9f6ea14b1c2d9b9e9f52a1111cb59b9b9f3ca1271c429b339f0da19a1bb49ab59e9aa0401900801c049f0f7211df1a1f1e0c21de24e71b33202022e925001c1c201b222b26681bcd1fe5213226c71adc1e73215526d819821e0a21d92642195a1ef9204a27a418601ecd20b6271518d21dc020e427fa154b1d3e2016282f15f41c6020d228b3110a1cea1f32299086a0198a1e67293094eb15471c072ac3987596ca0e562a529a659c389a202a149c919ef49dbf29cf9c59a06ba05929829d5ba1c6a10d29389e02a222a3c328cb9e05a3f4a37e28469f8fa39fa453289e9f14a4f5a45e28b59f2ca41fa57628ad9f37a440a57e281ea0cda413a6892874a05aa5fea6462871a06ea54ba707283aa044a5e5a6cf2729a025a5f7a660274ba02fa5f4a69d26f09feda4a4a60b26b39fbba462a6b325a69f8aa43ca64b252a9f3fa4dba5a724db9e31a4b5a54124ae9e01a47ba5c523529ecca376a51d23459ed9a36fa571225e9ea6a366a502223e9e5aa331a58121cc9dd0a2bfa4f120399d37a247a45f20fe9cd8a10aa4f71ff49c92a1daa3741fe19c6da19ca3081fe29c68a188a3c91edc9c4ea163a3931eab9c29a12fa3311eaa9c17a10aa3fc1db69cfba0d0a2bd1dcd9ce9a047a2a71d799c80a045a2131d5b9c33a08fa1bc1cff9a7d9f2da12e1c949a279fe9a0251cff99c89ee1a0b61b349a1a9f4fa1951b0080588ded90410ca41b191f40211925c91bd11fce21cd259f1ba81f97214c26cd1b951f6a217926c11a101f5a217326171a831e0a21da26a618ff1c4020da263516831b841eb92625156a1aae1dea266d136a1afc1db8277711c319c51d5828bb0c3c19241d81286c06ef18291df728c1910e17771c83295796988cae17112ad398e0985d8fa82a6f9a559c2f9bf22a0f9c2d9efb9da32a8a9de9a059a15a2aaf9fbea2a7a3092a6a9f67a350a41d2a19a050a4d0a4072a21a094a4a5a5cd29efa09ea47ba5a62942a0bea4d8a588295aa0f9a43ea65a297ca025a5b9a61b2989a074a5ffa6ae28ce9f64a51fa72528969f01a5d2a62f279b9f9fa40ea62626b89f68a4eba5c22507a04aa4bfa55525d99f43a4cba5e524199ff8a395a53c24049f94a351a59423df9e89a33aa51623cb9e7ba341a5ba228d9e49a31aa52a22519ef6a2e1a4b621069ebda2bea43321f39d8ea29ba4e720cd9d6aa27ba4a7209a9d29a247a44020929de8a117a4e61f399d8ea1d1a3321f969c08a105a3851ee79b94a05aa2d11d849b5ea02ba28d1d569b52a0fea1501d289b42a0f9a1221df49a29a0caa1e91c9f9afe9f85a19e1c429a739f30a1431cf6991c9ff6a0f61b059acd9eada0b61b91995a9e74a0641bb399769ea0a0661b9a81e684e786b709ba17631a3b1c741e2b1c811eb6202c25881b9d1ef520ce25fb1a261ebb20db25241a451d5a200c26f2180c1cc61e5026e516f519601d592658145117441c3a261110e513601a4f269704830eeb181226e68adc8e511853260d9199915b152026399349923914e026ca93609235110d27dd9381926811082741959a90520c25280c97bb92f00dec29289919987196392c169ca49cc99cff2c6a9df9a003a1602dc69e07a38aa33b2db39f3da42ea5dc2cb99fc1a4f8a5952c5aa01fa570a6242c6ea09fa5cea6832b7ca0e2a53ea7562a2aa071a513a74529a19f31a5c5a6952816a075a4bca540275d9f45a40ea63b26529f4ea4aaa5c625a69e05a451a50425709e79a306a54624759eada315a533243a9e62a302a580232d9e16a3e3a4fb22009ec0a2c1a45822029e8aa2a9a4c621229e96a2aaa48f211b9e76a2a1a42021009e47a27fa4d420da9d04a244a47b206e9db2a1fea31d201a9d7ca1a9a3ac1ffe9c44a17ba3221fe29c1ca135a3b41edf9cf4a0eea24b1eba9cb8a097a2ce1d5d9c6ca049a2701d1d9c48a005a2291d019c2ba0cca1eb1ce29b08a0a7a1a91c169cff9f7aa1901c919b969f3da14a1c2f9b669f28a1171cd79a0c9fc1a0701bb599ff9d37a01e1aa199439ea1a09e1a6b80bd00e600890991168519651ab21d1e1af61d5920c024601af01d8a205d252b1a391d492060255c19991cc11f70250b18461b281e7d252b16d0192f1d772534145d18451c8d256512a915291b9025a50dfe12a51956258484ed07e1183c252d91e790ca152d25d493f39309128e2459956e959f884e24d096ea9624912523e496c296c2931b2174961996cb92871efd951c96cb930e1c2b961d978295141ad095d197ea96d1179197279971982818629823994c9ad819399cf09d3d9e9620019edba005a1b024f19cc9a202a31026769661a15da1c924c998a49fdda12f22ca98439f67a25c21759e1ea1e2a2af22cb9e30a13fa39122469dfda13da43d23859d03a273a4ec22989dc3a12ba45322d89dc7a127a40e222f9d94a1c1a3ab21249d87a1cda35a21a79dc3a10ca46821e79dcaa118a44321b99db6a115a4dd20d69da9a10aa47020ae9d79a1aea31820229d58a175a3a21fb59c2ba15ea3491fb39c1aa147a3f51ed29c11a132a3b01ee79c03a113a3671e0d9de0a0e2a2061ef49cb4a07ca2bd1d559c5ea006a2541d299c27a0c4a1f71c2e9c14a0aca1df1c1b9c24a0a7a1e31c2d9b05a099a1a41cf59ac39f68a17c1cb59a7c9f2da13b1cc69a529ffba00c1c619ac99e28a16d1b979af29d02a0d5190000bf04030a7c0b9c19191d381f8e23f119da1d6320c624031aa71d7920e024bd193a1d4420e824e618761c891fd5248017001b381ea8241116a219401d9724b01447185a1c88245911df14861b6624e4097d10c11968249289f0069e1834243a8f688fe614fe22b491ed924007b52116949095419003217b94e3969c954e20d2943f98259837208995df9829993f200b96229ad09a6b203996d79ab69b882034963c9b349c5620e195d69a1e9cf11fad95bf9a289c491f6495799a0f9c9c1efd94219aed9bae1d2a95bc9aa19c311d6495f099139ccb1cc596e0991f9cc21cbb98409aa99c7b1d349ac09b959dcc1ec59a519dd29f2d20be9baa9e11a19b20869c4aa04ea2ff20cf9c85a04aa2d420ce9c88a069a2c320dd9cb0a08ea2c420d29cb8a0aea2a420de9cdba0f0a27620059d0da14ca36d20209d1da166a34420269d08a165a31020079d06a157a3a01fe29c02a122a3411fab9ce8a0faa2021fa39cd6a0d1a2af1e929cbea0bda2581e779caea09ca22d1e6d9c86a064a2da1d609c6fa04ca28c1d169c48a00aa2231df59b2ca0e6a1f21c1c9c2ca0daa1e21c269c12a0bda1c21c319cef9f8ca1951c7d9cf09f6aa16e1c1f9c829f3ea10e1c239b049ff3a0681b059ad59d2da0911a1c9b7b9d11a08419a6029413dc15da0e561b601e3820a4238a1adb1d24205724e5192d1d761f3324d5183d1c991e1c247018ae1be01d20242217fa195b1d0c2444154d18901cf023d8113b15e81acc230f0eaa114419bd234e033806ef166f23cf8bce8ea2126c221e90f192f806e021f292069608921022cf941098a2967522c9958499c098ba221b974d9a339adb2218987e9b9d9b0423b898669c9a9c39235d99029da19d3d23029ad89d909e2523639a5b9e469f0723929a989e9f9fd022829ab49eb19f7e22339a8b9ed29f1a22329a7c9ec99faf21fc994d9ee69f2d2190992b9efd9fb6208b99b59da39f3b209599679d5f9f421f5799489d9e9fdf1e7b99749df39f181f129ac29d2aa0361f8e9a309e74a02f1f149b839eb5a0281f729bfd9e1ca1fd1e9f9b349f50a1f01e0e9cd49fbda1e41e379c27a0eca1f41e499c3aa000a2f71e589c46a01fa2ee1e5c9c51a03da2c21e629c87a080a2ac1e849cafa0aaa2651e629c8aa05ea2321e379c65a023a2eb1d139c25a0caa1651da69bb89f7da1ec1c679b809f3da19e1c229b369f18a1711c019b249f06a1401cbd9a169feda0291c999a119fe3a0011c689a009fe5a0d71b309adf9ec7a0b11b2d9aba9ea6a0451b4c9a8c9e8ba02a1bd699309e67a0611a709bf99edba0da1acd212d1a561bc01db8259c1ca51fc1235a28ca1dbf1e3125162afb1d211fd325392b911d851e1326ac2bfc1c101ed325812b8a1c911d6a253c2bda1cb11dd825fd2abc1cf21d6225692ac61c291eed24402a4f23ca24a424e029332cbd2d50251d2337a96ba79329ce219aa26d242e245b1e899a69295e21f41b4b917f2c1821ab9d9193612dbe210fa0cd94932d11225f9e5797712db522e09c359cec2cb7234e99b19d6c2ca923a998069d1e2cfe214a959798cc2bc31ffa901e95bc2a9c1df58f31958c29c21cf4906396f8281e1c5e904d970e28c71bdd8e87978025131b1290e497d021c91a0b8c16971f15021a5c905a98b5a03c1cac926699f4a47f1cb1940f9c86a7021ed6987b9e0aa89e20cb9ab8a1e6a7e823749aeda1a2a4ff2320998d9fa7a04f20c99939a057a1fb1f059b2aa14fa23020119c22a191a2d51fb79b07a1bca28f1f8b9b1ba1a3a2501ff39b31a193a2561f629b1ba197a2f91e569be8a082a29b1e3a9bb0a007a21a1ee39a6ea085a1931d8e9a43a07fa14b1d779a3ba07ea1251d3c9a42a066a1001d4b9a36a053a1e21c089a15a021a1921cdb99c59fd3a0591c78997a9f9ca0221c6999389f79a0fb1b6e991b9f67a0ae1b9699e09e35a06f1bda98639e42a0c01a7e994f9e3da0f819c819b116101a591c7423bc1ff5203e25592657205d214d26b928192037214e27332a2d1f7f20d926632bee1e5a2078260c2cb71fdd200126082c1121e9223a26e52b95225f243d26452baf230e250626e22a89267228e426132a0d28da2933288325c2a618a67b2844216ca75ca5ad25c31257a45a2257246c9f35a1e0297d224ea1c59a222db82144a2a19d972d98233ca1e39fbd2d4024c79f5ba0622d67241f9e369f232def23819ca59ed72c6f22ad9a459c852c742046970a99fd2baf1e1f966a99d82a2c1e7c98d89aaa2a331f3198189a1d29f21e859403998e25b01c44957f988f20111bef9453993695c019ac95b599fea1581c0295619982a7851d0e94509ae0a8a91c0c965f9eb8a8211dda98cea034a7a720139ca5a2e3a5ec22f59cbca253a52b22a69c5ca2bca44b212f9c53a25ca40821b79c7ca26da4ec20659c13a234a49c20479cbea1aca33720209c5ba1f6a2c11fd09b6ea128a39d1f199c6aa13fa37d1f0d9c32a1d7a2f41e649bd6a038a2421ecc9aa3a009a2ce1de19a97a0e7a1ac1d9b9a79a0cba1591d8b9a68a09ba1331d879a58a08ca1201d899a44a06ea1ee1c6f9a2ba04ca1a81c369a0ba017a16a1cfc99b09fefa0281cd499429f88a0d81b44999f9e50a0bf1a6c99f09d01a0eb18f9175819351b531c1720e11f82219d256a236a2097216926082685209021c7264d289520a721f326a6295f2094213827bd2a27201621cd26422ba12025226a27552bc2219b23f527fd2a3623c5240828652a5c24262629280f297b23dd252f2944264a9ed59be028a020dda4d4a333283c9831a4b49a7426049fd9a2e0251126e9a1d3a0cb2a6425fca12ca0fc2c8c2541a183a0e82d6c2519a1c8a1cb2d8925c0a025a2512d2e25ca9c00a0ed2cc723c89d06a0ca2c7e23229cf59e272c5122d19ad09e112b6921af9bf19f9d2a8f21ce9acd9e9f284821d499149ecc25a920bc99d29ed71ecd208f99839e219cc7200e9ade9e30a5fa20ad986d9f12a950211d996a9f7ca93021039989a08fa8e3210c9c2fa253a70a23d89da2a3aca6a223c09d98a320a6a322e89d95a3cda55422159d24a330a5c921009de0a2f1a44b21f09ce3a2d9a42721ea9c79a26ba4b020889cdaa1e3a32e20dd9baba1caa3d71f109c96a1aaa39f1fe99b62a12aa31b1fa29b1fa1cba28a1e349bfaa092a2471e499bf1a069a2071ef29ad2a04ea2b11dcc9aa5a015a27b1d999a7ba0bca11d1d699a4fa076a1d01c249a23a049a19e1cdd9902a023a1611cc399d59f14a1541cdb99e79f15a15e1cf299a79ffaa00a1c259aab9e66a0e2195814f618271a2119811eb220562224265d20fd205022e32697220e21e8226c27e6240221412283275a27852122234928d528802136233b289f29ac2162233328532afc2100245d281c2a49229224b628792945212624b428f827c51d79214a2865259399908e4c28e01d43a146a07d27149956a3eea0cd274fa00ba2111d0c2726a18ea267269b27efa017a2a32a92269ea002a12c2d0a26c2a06aa1c52d0e26b1a00ca2db2d1926d09ff2a13b2d8525e19ee6a1e72c3825719f55a27e2c6f25689e2aa24a2bf524709d57a13a2a37244c9d54a1e1280424d79d8ea1b8241c24f99d92a1dd152824ce9cbca134a12924e89d3ca2baa766247e9d7fa25faa5824779dbea29eaa2a24639bc5a2ada8a523959d5aa322a7ca23979ee2a3d3a69a235c9e1fa4e2a66c23b59e5ca4f7a62623b69db7a3cba50d223c9d48a35ba55f21989c13a320a52621149df4a2c5a4d620429d84a262a46320a49c30a23da40820879c13a225a4ea1f849cf5a103a4aa1f1c9c83a158a3dd1eb59b46a107a37c1ef39b48a1e7a2491eac9b3ea1cfa2091eba9b1fa1a4a2e61d3f9befa06aa28f1df79aa8a008a2231d669a52a095a1a91c519a2da05da1671ce4990ea03aa1471c4f9a0aa018a1421c329a0ca05da1121cc19ae79f58a1341b1b116f170419b11a351c3c1fa920c624081e95202e22df2680201d21cb2202289d210821b7220a28a623ba20562231282b257d2006222228d12664203b221c281228aa20f62259282528ae20302396283a27e61fd922aa281a25b718b01e5a286b22a79b4e8ed2284615b1a09c9c6428419a52a1d09f7828319f17a2609b1228c1a047a2021f182883a01fa228270d2839a04ba2b52b7427eea007a26f2d24278ba1fda2032e4527bba0d0a2b92dc32630a065a23e2de22551a14ca3cd2c9c2688a0c2a20b2cdb25e19e32a2ab2a4725a99f05a38c28b925a49f0ea3552481254f9feea24f966725dd9dc8a256a41025ba9e2fa3b0a83b25cf9d2da313abf924ba9c1ca2d2a9e523c39ccaa2bda71c24259f1fa4fea68324499f41a40aa74124389f52a444a7f2237e9f4fa404a752237c9e06a460a673224b9efea3eea50922f99ddda39aa5ad21d89da8a381a57421989d2ea31ba5f520629db5a2a2a47c20509d43a24ca40e204e9df0a11ea48b1f0a9db0a1bca3fe1eb09c90a190a39f1e7e9c8ca154a3631e079c50a11ba3fe1da69b24a1cda2cc1d389bdba060a25b1dfb9aaba028a2261db99a6ca0dca1c51c639a38a073a1731c1c9a09a03ba14e1c369ae29f04a1431c489aa39f0ea1461cfd9a0aa0a5a1171b550f26183819ba1a6c1c991fd1209724121e162131234e27db20342234246828b121da210e244b28e9216b21a1234f28242211213623792822237d2080225b2834240e2067225c286b24b01f5422ae282623621e1922082942211d19251f1429e31dd392f21a03291a0c7f9ee49a9428769950a02c9c8b28e49c4ea0d99b56284ba078a0448e812802a001a23a209128a59f0da29f281528a3a099a2022cff27a0a1aea3772d4c289aa108a4da2d502890a00da48c2d1428c0a09da3412dab275b9fdca2742c8326219f8ca2792bf3252ba00ea3292923261da098a362252a266aa09ca3ac16ed25319eb8a388a4b8259b9eeba361a99925e39dc2a33aab22252e9d66a3a1a96e245a9e13a480a788243b9fa0a469a7df2407a0a1a42da77924369f6ca43ea70124189f75a415a79223209f54a4c3a604234e9f6ba489a6bb22de9d93a392a58421df9cb5a2e1a4aa20c69c9da2c8a47420899c7ba2aea44e20ab9c67a289a41e20939c35a25fa4bb1f7c9c03a220a43e1f339cc4a1d9a3dd1e2e9c96a182a3921ef59b4ea11fa31c1ecc9b22a1d4a2e91d7c9bfda097a29f1d4f9beda07da28e1d509bd4a058a2711d489bb7a02ba2331d419b98a0eca1121d279b68a091a1c11ca69a13a08ba1671c879b29a0b5a1301bbd097d17ba18931a351cd01fe2209924e21e4c2188234627fa1f4a224f246b280720e82133246128ec1f6e21b22345282e20ea207a234a282c209720022382282320691f4a22a22857204d1d6b2186285e1e181c0d218c28c81c2515aa1eca2842181497fa18b5283993fb9cfa935b28af9a799f3599ab28a39e0ea1339cb328669fb1a1029ecc2803a09aa19f9bb92802a08ea19b20792841a0aca13528dd2759a18aa3802c57283ea12ca49e2da7288ea0e4a3d52d3628f4a0bda3bd2de82727a010a3d72cd12630a0dfa3292c5f27d5a002a4f929832711a06da3a525aa260ca021a3e1962226759ea1a33ba63a26199f8ea4b2a9e9261f9e27a4f6a9ac256f9ebda332a8dd242ea037a413a7c2241ba0caa442a7f424f1a090a44ea77d24f89f62a43ba70b24c79f54a4cca68123c29f3ca497a6e8221f9f48a45ea69522f09e5fa471a68322909e39a42ba604225f9d39a350a5fc20199db0a2d4a47920d09c6aa28ba42820c89c49a273a4e31fc29c4ca259a4a61f9b9c38a242a4771f9b9c06a210a4151f349ca3a197a38c1ef99b3aa113a3f21d689b06a1c1a2981d5d9be6a07fa2751d239bb6a044a2221def9a8ea011a2db1c999a4da0c4a1a31ca89a25a088a16d1c419ad29fb5a12d1cc199a99ee5a0c8196602cc1717195519e51b3c203a21a224ef1df8214724f9278f1f8a229624a5280720562278249828d51f03223a249d282f1f3521cc239928ad1e7320d5228828531e631f16228f28c01d011e2b21d628651c811b6120f928c4196115ac1e47291e128395141c572943987c9d1d97ff28149ce99e7a9ae528179dd49f389c1929689f62a03d9cf228789ff3a0219daa2867a0c3a1709ca42846a08da1781e4828bda0cfa2ee272f2800a13da4032c8628dfa0e6a3342d3728a9a099a3a12d1f2830a07fa3512d712774a070a3532cf826eea059a4382aaf279da06ca4ed259b271aa05ba418970127a19fd9a46da76b27be9e1aa46aa9fc25b49e23a4c6a88825279f9aa455a79525c49f46a4a1a6d62432a081a4f1a6bf242aa075a45aa7752405a02ea4e7a6d6234c9f19a48aa651237b9e12a46aa6ef221c9e0da40ea69622879eeea3baa512228e9f78a36fa57721749f0ba3f2a4ed20a09ec6a2dda49720a89d98a2bda469204b9d50a28ca40320259d2da261a4981f2f9d18a24aa42a1f429d09a223a4031f0d9dcda1daa39a1e9c9c80a199a3201e259c42a129a3db1da49b12a1c4a2761d349bc6a057a2ea1ce49a8ea0ffa1b11cc49a5aa0cea1891ccb9a45a096a18d1c9d9a33a0ada17a1cc49ab69e3ea0ba1915119519831bb01b321c912014221025181ef5215424f527d41f8722bf247e280a2064229a24b0281b2027227f24c728d11f85212e24fc28331e9f20a7231029f91cf91fe1224e29091cfe1db4214f295e19811cb420552940156917b61e2129ce887392bd1c23295098ee9a681408291d9bc39db8972e29649db09fc09a0129069f39a0789c8e28909f0ea12e9e61280ca034a270a0b7289ea07da286a08f28d5a010a3548f502846a01ba357256d28e9a043a4ab2a8c288fa01ca4672c53287ba000a4c52c272838a096a3332c6c27b5a072a3032ac82680a024a4b8250c27a4a062a402a01627be9f50a44ca7a5261b9ef1a2e9a71c256a9f95a46ba75126419f65a457a69d252d9f90a462a76a251f9f54a414a7ca24539f4aa4baa65c24549f8fa41aa74624cd9fcea44aa73a24aa9fc3a435a7bd23999f9ea4fda612237f9f2fa447a61f22c59e0ea4c4a59a21469ef6a3b1a55321ef9de6a396a50d21049eb4a377a5de20de9d61a342a58420eb9d07a3e0a42a20769d6fa28fa4791f509d21a23fa4091fd59ccda1ffa3861e6c9c96a1b7a3481e329c68a18da3f31dde9b3ca10aa3c21d759bf9a0bca25b1da19be6a092a2291de09b93a00aa2c41c6a9b28a088a1221c739c26a055a1da1b149b1f9e29a0391944128e1bad1d831d71185c1d28202021bb1eda2100241e28301f0c22502489285c1f29225a24b9286f1f14224824f228821e9d210d2421298d1daf2053234129781c3e1f60224629b31a471d29213f290c18a31ad31f4429ba133a12341d4929e78e4295671a4b29d8989d9a990d0e29219cd19c1194f928319d2a9e3a9ac728b39e879f829ba528b79e8ea0669d4b280fa0eea13ca0d82846a119a338a1ec2888a073a3b7a16d2869a0b6a18f9ce427efa01aa4351e872801a155a41f264d2899a026a4ad28e42708a14ca43a29d327aba08fa4d2268e2789a04da4ee1b872699a03ca541a5432701a007a56ea8b02671a0cfa4ada7242601a08fa499a6832502a0afa4b6a6792513a07ea4cca61125c89fb6a469a7212532a0eca4b7a70125ec9fc6a480a79e2421a0eca488a78b247d9fbba42fa71a24479f75a4bca62b23099f44a451a69522c09e43a43aa61a22a09e30a41ea6eb215d9e1ba4dea58f214c9ef0a39ba536210a9e9ea363a5d920c09d42a315a56420739ddea2bfa41b201e9d64a263a47c1fd29c28a22ca4211f8a9ceba105a4b71e459cb8a1aaa35b1e449c92a16da30f1e5c9c4ca11fa3a31d959c1ea1c9a2531da79c99a01ea2d81c3a9c3ba071a1751c049b989ff9a0ec1bbb9acb9eb9a0401a410c82193a1b5019491c3820a821d124f71ddb215024d327b41e6b2271248428c51e48226a24d2287d1e0c224224eb286d1d7521dd23ed28cb1cad203623ef28b01bed1f4f222229011aca1d1d2151292b17e21b50206b29b80e8317001e77296c913f8cda1b46295c98ac983b140829db9aee9c4f94f628b59c829e979afa28979d0ba0869ded28bf9e16a121a0ca280ea042a2a2a1d3280ca174a20fa2a62860a093a2f6a156288da08ca317a36d287ca028a38ea2012841a19fa430a28628b4a225a5419e5a2876a1dba4789eaa2780a04ca41da0ad26ec9fe5a35aa2e625fc9e2ba4d7a4f2257d9defa2faa4f324559ea7a205a58b24fe9f5fa434a69b2508a095a47ca6742556a088a40fa70525aea006a5dfa732251da0f1a4bfa7f124829fa2a44da75724779f8ea4dda60224809f84a4b9a6b623f59e70a478a622238f9e4fa44da6a022839e61a449a65b227e9e6aa453a62122449e60a44da6d121f69d1ca4d1a54b21999d89a31fa5a520529dfda2d0a43a20299ddda2c5a41a20409ddaa2c0a4ef1f009d96a28ca4791f939c08a219a4b31e339c55a128a3ad1dac9bf3a09aa2451d209bc0a056a2f11c289ba1a032a2b61c029b90a016a2971c609b8ca001a2af1c089b69a0c5a13a1c939b3ea0c6a13e1b0000fc038806a608061bdf1f1e214824dc1fe22128240f2805203522702452281a1f75229724bc28831ef0215024d428c41d7c21e023f428b11c9120ce221129e91a991f29222d290619d71d20214d29e715c21aed1f5c295f083f15e51d582955933092501a202972989e98e916f828a09aca9bb58de728979cc59ded98ac28c49d749f019d5c28059fe7a012a07f281aa0aaa1fba094286ca08aa20aa2b428c2a0c1a2cfa2ab286da0f2a2faa2632863a078a31ea43128e5a0f4a3e0a41128a5a15fa405a5a9276aa1bea4e8a4992760a029a4bba4ba26c79fffa3c9a45e269c9f06a424a54126a89feea359a5e12536a01aa40aa6d1256a9f41a4a6a67625d5a08fa4f8a688258da0eea436a7932532a097a42ba7d52489a0e4a45aa7e4242ca0cca424a7902404a0b0a409a74124b59f99a4dea6d5231e9f72a4afa61f238b9e2da43aa66422449e11a41aa6f3211b9efea3eea5b121d19dbea3a2a54621ec9d57a354a5d920f59d08a304a57120019ec4a2bea42420e59da8a28ca4f41fb19d66a264a47f1f579d3ca245a4121fe39ce2a110a4ad1e829caaa1a6a34b1e249c54a11aa3cc1dbb9b07a1c6a2781dd49bf3a08aa2451d4b9bc5a063a2231d329b84a0f9a1ec1cd29a35a0d1a1701c8c9b4da010a2241b00009904e3075d09f319fe1e8220bc234c1daf211724c327c41eb222c7249228261fe722d924f528a91e3e2290242329c31d3721a5233029821c3220a4223f29cc1aac1e4f215829d2176b1c43208e294313c118aa1e832932086d15611d87295293608c8b1a5e29cf968e975f142929a49a0f9c62940b29049d3e9e979afc282e9e3ca09c9df328fe9ecca005a0e728d49ff3a142a1ce282fa0fea2dba2c42888a0bca304a4b728b0a0a7a315a47128b4a099a334a4342864a02aa351a4d02721a04da38fa4782774a0a4a3d3a4f12682a0e3a317a5dc2641a011a4aba589267ba04ca40ea67926b2a0d6a4a1a6a5265ba0eca429a79d266aa0e7a40da73126fba067a4a4a642254ba073a4b9a6082516a0b2a401a707254ca0daa44ca7ef2405a068a4b0a6212479a07ba49ba602245fa084a480a69a23bf9f88a48aa64923319f8aa48aa6fb22d59e5da448a66a22cb9e1fa4d2a5cc217f9ef3a39ca54921539eb3a37ba5f6205d9e7aa33ea5b4201e9e2ea3f2a460209d9db7a2aba40320379d73a276a4781f059d30a240a4051fcf9c0aa215a4c61e859ccba1cba35c1e2e9c60a148a3d91ddb9beda0b4a23f1dee9bc0a06ba20e1d149ca4a045a2e31c389ca3a006a2d41cc79b4ba0f7a1791c579b1ea029a23a1b0000eb0309098806d519f21ec320c623841e2a2257242228141fb622c6247328fb1ebb22bc24b0280c1ef4216124ba28fa1cda206a23d328711c95202823e428891b5f20fa22fe287619321f18222e294b16571c92204429cd0dad18971e3b29f092410cad1c3729469891972b191a292f9a119c0e8efb28c59bc19dba9ae628aa9cb29f9f9dad28d39da3a0d39f78285b9e6aa120a15328499f12a2f7a16b28f29f58a267a25b282ca0f7a23fa3562837a0fca2e6a31e285ca06ea359a4df2782a0aea3a5a444274ea0d7a3d4a4ae2696a006a42fa5ab26d1a05da49da5af26caa062a4f0a58d2653a092a449a65b2649a0b1a476a61a264ca0aea4cca6b925f1a001a51ba7c4254ca1dba430a74d25e4a0b6a421a70b2580a0efa43fa7042534a0eba450a7c2243ca0d5a4eca66424eca0a0a44da6c32315a075a458a62b23b89e2ea40da66d228c9e0ca4dfa5f2214e9ebba37ca57021079e65a327a5fa20139e2ba305a59e20519ef6a2e7a46e206e9ebfa2bfa41420119e89a28aa4cf1fa59d36a251a4471fdd9cbba1e9a3941e499c3aa13ea3e11d049cf9a0d2a2791dc49bdba095a2581d9a9bbda075a21b1da69b9fa02ba2de1c519b77a0fba1c31c689b5ba0c2a18a1c219b38a0a3a1311c7f9a829f7ba1761a00004f019207e1095f19471e92200c24141e2c2281244e289f1ed822dc24de283c1ebe22c724e628f01d17225b24d5283d1d8b210624dd28581cc220fa22d828401a611f0622d6284f18de1d1121f5280515221c51200429e210ac18741e2929f990560ce51b2f294298b4976e140e29b899549b218e0a29629bcb9c6b99e628d49c959e069de628969d74a0859fb4288b9e66a10ba1a228529f33a238a2812800a0fea25ea3632841a07aa339a456284fa0d5a364a4282856a017a4b8a4202865a02ba4f2a4e42755a02ca44aa5a8274ea052a465a5472771a07ba4c2a528278da09ea426a6042767a0b3a43ea6cd2678a0cfa48ca6a5265da0a9a49fa62a2676a0d1a4cda602265aa0eca4fba6ac2562a0d1a401a7572575a0f1a446a71d25ce9fc7a4f0a6b324c79fb1a4a0a65424ca9fbaa495a61924e89fc6a4b7a6ae23b39f94a498a60923589f42a403a65f22b09ef7a397a5a2217a9ea4a365a53d21219e6ca32da5df20b69d21a3f1a489205e9dcfa2b4a433203c9d84a280a4c91f4a9d61a25aa4631f299d3fa23ea4011ff49c03a222a4bd1ecd9cd5a107a4681eab9c7ea18ca3081e939cf5a0cba2641de09c86a01ba2df1c5e9c64a009a2a01c079c34a0b0a17b1cd69a929f67a1fe1b249aff9e3ca1581a6815141a751c471ad11deb211f240927ad1d18221424ce27481eac2290245928551e9e22a224a828051e35226b24c3283d1d97212c24f6283d1c09216b23f428121ba220f82223295d19bc1f632245291a16601de1204729eb10dd19551f4c29098e8d12ac1c26297b968e956d171a296b99449a9194f328839bf49c8c99eb28df9cd99e499df3289f9d55a0d19fbe285b9e3aa1baa09828299fb4a1e4a15a287b9f7ea2a9a23828d79fd8a248a3042809a03ea3f0a3ff2720a0b0a383a4c22748a0fca3c9a4872746a017a431a53c2742a02da490a5f52654a06ba4cba533277ba08da401a6272788a0bea444a61627a3a0f2a4a4a60a27a5a04ea562a7e6266ea053a580a7822629a011a50ba7d72538a002a549a78c250da0d8a42ba7172500a0ada4dca69a24b69f9da4afa65524b99fbaa4c6a60c24fd9fb1a4aaa69223ff9f8da475a6ef229f9f5ba42aa65a22eb9e18a4d6a5ca21569eeea3ada55e21369eb0a376a50c21e79d63a347a5cb20969dd9a2c3a43920089d13a243a47e1fbf9cd4a10da4f81e7f9c9da1e4a3b61e7b9c87a191a3661e739c77a159a3331e749c6da138a3281e7a9c30a1fda2c31d689ceca0afa26a1d659cb7a05aa2241d4e9c80a0eba1e71ccd9bde9f9ea1401c1f9b529f5fa1c419251448184b1bee168d1d2321c422d225dc1d6e2101244727871d5e21d1235527b81da521f123dc274a1d942112243b28c81ca22104249528101c2521d523ca28831a6320f7222129d618f21e8f217f296816361d7520a8290f113a1a071fb2292691dc12211c8a299796c495a6174c2994999c9ac0943829d19bbf9d3b9bf428139d25a0ec9ecc28c39d16a1b5a08228a69e07a209a25e28399f8aa2dfa21228a19f11a3b6a3be271ba092a33ca459274ca005a490a416274ca015a4c0a4f32669a059a428a5e92693a072a482a52127a8a0a6a4d1a5492794a0bca4fca544278ea0cda435a63c2775a0cca445a6fc269aa0cea470a6e426b0a00ba5ada68f26c2a019a5f6a61626ada02ba50ca7d1255aa009a503a7792512a0e3a411a722250ea0b4a494a6a02410a089a448a63124fd9f8da42aa6af23ce9f87a422a63523629f4fa4eea5a722e79e21a4baa51a225e9ee0a36fa59121d69d67a338a5fb209e9d2ba309a59e20719dd5a2cea444201d9d4ea26ba4a01fc69ce0a11da4e21e8a9c82a1b7a3531e659c24a123a3c71d6b9c00a1cfa2811d379cb4a08da2101d0b9c9ba080a2f61cba9b6da05ea2b81c7c9b66a02ca2961c5f9b63a01fa2921c789b59a0d2a16d1c199b42a0e8a1631c639be09f78a1961a71126f18ea1ac81b181d712115234026211da621b8230127e81c0a217823e226cc1c14215e2312278e1c2d217f23ae27761c372197233228181c322197237528031bea204623b928eb18ac1f3e22f828a0163e1e182146290b14a61c7c209329ed07931aac1ecb29cf94160d821bc329b998ae98120fa429629a5f9c79951629169cc79d209cb728159dae9fce9e3728f79dd1a045a0b9277c9e5da18ea11227009f43a2d0a2aa262c9fbca292a35826cf9f4fa35fa42526c49fcca387a40a26f09f04a4e8a42326d19f43a44ba55b2600a04ba49ca5a02643a0ada4f1a5c6265ba08fa4f6a5f026a4a0a7a41fa62227d3a0e6a4a2a62427baa04ca540a73c27b1a07ea579a7042795a072a57da78c2672a065a579a70d262aa03aa558a77d2502a008a51ca70825af9fc6a486a67d24929f93a45da60c24669f71a412a61223459f2aa49ea55822ec9ecaa35ba5c021ab9e7ea328a54c21559e2ca3f3a40221339ee4a2c8a4aa20169e9ea29ba44320ca9d66a269a4fc1f4b9d12a22ca4321fe49caaa1cca3b71e799c42a157a31c1e039cf0a0d9a29e1d8c9baea076a2361d689b79a011a2df1c449b4da0d9a1961c7f9b30a0bfa16a1c839b11a09ca1581cb99bf89f6da1411c9c9bb09f6aa1ed1b6f9b689f56a17a19c20f97149a1b4814081d4620b7227b25341c9e2069225b263a1c8a208c227326191c4f2088228926e11b3c206522e426161bcf1f04225a277c1a9a1fe521bc276e19941fb8210b28f818671fb22154288818f71f28222929fd167a1f0e22b62961129e1dee20e0294d885f1b811f3e2a6296dc0dc21a162a5b9a2e9c08998f29679c9b9eac9d00294f9ddaa0e2a03928609ef5a155a26627ce9ea7a249a38e266e9f4ca31fa4e425dd9ffea392a4ab2525a055a406a5a02550a078a438a5bf2553a08ca4a1a5f9255aa079a489a53a265ca083a4a9a5e62638a0a1a4e6a5632719a0dea450a690273aa003a5b9a69f275fa030a504a76f27caa08ba552a72427cda087a56ba78b2675a049a547a71d263ea025a515a7a825d09fd3a4b5a60f25889fa3a445a69124399f60a402a61d24e39e36a4dba57423d29e1ea4b6a5a522d29e10a48ea53022b59eb1a360a5ae21359e16a3eba41321b19d60a271a47c20649dfca12fa40020309dbea109a4711f119d97a1d3a3031fef9c8aa1b9a3ba1ed49c79a19ba36f1e979c4fa166a30a1e869c2fa131a3e61d6a9c00a1d2a2921d6b9cf7a08da2871d3c9c89a03fa2f11cbd9b37a0caa1981c079bd49f75a1391cfe9aa39f45a1391cd79aa59f65a1221c239b4a9f07a1731a0080e78e5893fb04b51b501f63213f253e1c5f201d225926601c2720182272262e1c1b20ee219c26101c2720072203272d1b901fc7213327a019ec1dae2029270d18b11cde1f29278017ba1c0120bf27dc17bb1d8d205228ba16f51dc820b82864155f1ed82062297814271f6c21c52a1709a31dad20f82ba897eb8f5f1a5d2bbb9bc39dcf9af529649d86a087a0db28fe9d07a2d5a1f2261a9fdba2bda33425c29fa7a35aa41324949f53a33ea453238a9f35a379a435231f9ffca26ca47023989fd4a249a44c24cf9f0ea37ba43d2526a009a46ea585264da0a6a4faa51a2897a067a5f4a6b72899a0c0a5a7a7b02834a0cea5e0a74e28bb9f23a5e6a6f8268b9f98a445a60e260fa084a41ca6a2253ba093a475a6442560a076a461a6ac2429a03aa4caa519243f9fe9a358a53823249fa3a345a5a922cb9e6da324a53222989e20a300a5ac21629ef0a2e3a43121439ebaa2c0a4e1200b9e94a298a48a20c49d50a262a43920a89d12a22da4de1f4d9dc8a1eaa3401fc09c40a14da3751e289cc2a0a3a2da1dbe9b72a03ca25b1d819b5da018a2161d2c9b48a0fca1e31c069b2ca0d2a1a81ca29ae89f86a15f1c7d9aad9f54a1261c3f9a4f9f15a1ff1b509ae49eb6a0a31be4998a9ea5a0441bba991a9e82a09b193f8909914190ed094919ee1c981e2f222a1cf71ed7209a25281c291f41210c26de1bd31e3e213c26881ab41d7c2028261019791c5c1f6226ff16bf1ae91d7e2668144418bc1c4a266f1139156b1b6b266f0b0812141a8526b3853a0fa2187026b38b57095e17e226e38d181027186027c393a00c6f19522a2798a1905218762d429c2b9c6694782de19e8da197a0b02ad59fa8a343a3a8233da085a498a4a99e15a033a4d6a4a4a42fa04ca40da5efa503a004a4b3a48ba5519fd4a3a4a4d4a3839f30a40da55e984ca0f5a4f6a5f524aca005a667a73f2932a109a760a8f72ad4a1cfa7e3a8132ba1a154a799a8f029f8a0a8a63fa8b02819a069a53ea744273ba0e0a48ba635261e9f6ba40ea611257f9e16a4c0a55824ad9ecaa38aa5e923739ea8a367a55023659e5da336a5b522359e06a3fca41e22349e0aa3f5a4ae211d9eb4a2b8a43f21fe9d71a298a4cd20d69d38a26ea47e207b9de7a12aa42120429daaa1f1a3ac1f169d6ea1a2a31f1ff39c45a16ba3b21ed69c12a100a33c1ea09cc8a0b5a2c31d4a9c70a04aa23d1d2f9c5da01fa2161d299c3ea0e2a1bd1c0c9c24a0b7a1a01c1f9c16a0aca1761ce09bda9f6aa1311c259b8c9f4ca1071ce09a0f9fe5a0741bf299269e4aa0311a8a99df9d7fa06119008071821581f00f3b18071c5a1d5521921a161e5f20cb24281b1e1eab206625ce1afa1d8f208025e819041d21207f258a18071cb51e8e25fb16901abc1d8c25ed149019181d77255c13a817471c332506108715d41bfe2434048f12e0197b240b8d9706441777235490718e5212ca200a90a38f780b4c1c8e9010913d8de514b891b992e0907111709271945c93dd15f793419664954819ee9502991c98821c1e996b9c649b2220b19cb29f049eaa2256a0e6a3b5a12d2656a441a880a7e62963a4d1a8aca80c28eea1baa6cfa7f5208f9e41a1ada1b01e359d8ea18da4e524039cfba5e9a660276890bda370a518251d9563a134a47022479bb9a04ba37621759dcba150a49622a49d1da2a9a46822d09d16a271a448229b9dd8a137a4aa21a19dd2a11aa47521ec9df3a12fa46721239efea148a41b21479effa150a4f2206d9ee4a13aa48e20179eb3a100a43420759d83a1aba3c51fe39c59a197a34b1fd09c40a16ea3ee1e049d2ba157a39a1e179d18a116a34c1e509dfaa0f5a2f21d0c9db9a095a2861d579c54a0f1a1101d509c2ba0d1a1b61c609c18a0a4a1a11c4d9c08a0b5a18f1cc39b08a09ca1801c849be49f7aa14f1cfa9a8b9f46a1131cee9a3c9f22a1eb1b509ad19efda04a1b4399769d1ea0dd180000260376082d09201a521db81f1724401a2c1e6520dd24b91af91d9720c6244e1aa61d9820e6246719e91cda1fd2242818d31b851eb7244e16d719731d9624d11444186e1c59249711dc14f11a3a24280d5510ae1909248683b50588166022d38db48f7c10a42079915494868f7d208d920e965f95a2201194c4989798b0217196b59a099bfe223498a69cc79c02248e99e99d469e6124819abc9e4a9f8a24319b5c9f17a07824e29bb59f57a04924db9bfa9f91a004246c9bb49f98a04123a89a4a9f5ca02222bf990a9fa5a030219498259ee89f0220aa95bd9c5f9e9b1dce913b9ac29c631b79948c98ae9bff19d996f9981f9c061c5f996b9b2e9e5a1e049c769f38a16c20d79ca6a061a2e420249dc5a095a2c520f69cbfa0a8a2ab20f69cdaa0e2a28820189d06a12ea37620269d34a169a35420459d43a197a32b20779d47a176a3f91f499d26a16ca36b1f079d09a135a3031fc09ce7a0faa2bc1ed59cd5a0cfa26c1eb99cb3a0b5a22a1ea29ca6a08fa2e51d949c8da05fa2941d789c64a03ea2441d3a9c5aa013a20c1d1b9c47a0f5a1e61c2f9c46a0e8a1d51c499c33a0d4a1bf1c429c1ca0aea17c1c5c9cff9f86a1451c179c759f39a1081c919bff9edba0631b759a5e9e93a0d21aae9c999e15a0ad190000dd11bd14400c1d1b101faf200c24b41aa21ead20a024531ac71d432072244a19f01c6d1f4124a118061c791e37245117911a821d0d24cd14b9184c1cda23d0112c153c1a8223210c970f6f182923e402988540159922078b438e3010e821ad8f2e94ee863a22f19256972c941f23209525994698f4239196bd9a2b9a362413982d9c1b9c5d24d798c49cce9c76249e998a9dd89d7024669a519edc9e73240e9bfa9e0fa051247d9bac9f85a04424fc9b06a0cca02b24119c49a009a10924309c34a01ca19c23169c22a008a11f23059c13a0e0a074224c9bc59fd6a0ce21b99a219f91a00921489a439e3ca014209999bc9d07a03d1f0c99729df99fae1e6999939d08a07e1e0f9acf9d43a0681e759a249e78a0641e349bad9eeda04b1e6a9bf39e43a16e1e1a9cc69fa1a1721e539c1da0eaa19f1e609c31a0fba1a41e5d9c42a023a2811e639c64a05ea2801e7e9c8aa08ba26e1ea99cc2a0d1a2271e8e9c9fa08ba2f91d559c77a04ca2b21d429c38a0ffa1441d139cfe9faca1e11cfc9bc29f7da1ad1c9c9b8f9f48a1661c599b609f30a14a1c379b509f16a11b1c0e9b499f07a10a1cbd9a339feba0b21b899a229fdda05b1b7d9adb9eb9a0111bb49a999e84a0e41a6d9a549e8ca0721a7e9b779ea5a0f9196d214d194c1a911a9727f91c0f200c24a229e01ee71e0026932b291ee51fee25382c6e1d001f2926502c1d1ddd1e3f26342c0b1d9f1e2726072c9c1db41ebc259f2b031d8a1ee423372b9b1c991d3e20ee296a228d23a41c942a1f2c4d2e6b2093243fa9b4a81528e72185a41b235f22f222b19adf2995204c20658ec92c7720f59d448db02d3920aaa15f8dcc2da52015a2f4949e2d652284a19f9ddf2c4d24919e709ee72bee230c998298182ca01f2e933c8c4f2bf01b18941091d12a0d1b4694ef94c429a51aca946f971029c71aba9406984028fd1a50942c98cc25291a2095b19836227b1a088baf9741150a1a8d8d11989aa08e1be793139933a5311db194669bc2a79e1d3297709ebfa86e1f0c9c0fa256a8cd22c19de7a421a835259b9a11a3a2a4e922069a06a1d4a22e20669c72a1c8a232205f9c58a1c0a2e21f9c9b4ba1e6a2b11f099c65a1efa2781f239c5da1ffa26d1ff09b47a1fca2101f9f9b31a1eca2b61e949be9a077a2431ef69aa0a0d3a1b31d679a52a0a2a1241d679a5ca09ba1021d2f9a5ea087a1d71c3f9a4aa07ba1c11c019a2aa03ba1731cad99da9feda0331c3b995f9f90a0e11b35994a9f76a0841b59992e9f72a0671b7e99f99e48a0311bc098939e3ca09e1a7099539e0da0d519eb94b408b6103d11ae24551ff12080259a28932076210327812a9f1ff220a7260c2cf21e4f208e26a72c671fea20f826c92c3720922167269f2cea2059220526562ca422802460251c2c2c231325b723ed2a66266028c9219f2ae028b22a80231c2680a7aaa7c1251522cfa806a8f5242e1d66a552217a238a9cfca1862a2a2299a13b9c8b2de02111a4459d112e96231ea416a0152ead241fa2c7a07e2d032541a01da06f2d9d24d29ce59df32cf721b49a149aa42c2f1e4c982b98192c751d4a96b6977a2b951d7095c0989e2a081db493d0981e29e91c778e60960227501bc791789704223a1c7e8eaf975115231b208f179860a3c61c269293980ea7951fdc94559933a9381e5b967f9c15a9ac1a60986a9fa4a7161f739b26a253a6fc21759db6a333a69a22a69dfea3d4a52022ad9ccda2c6a42321e09c9ca28ca4d420f69c87a261a4b320bf9c27a21ca45f202a9cb0a19ea3ed1fb49b81a178a3901f199ca9a187a36b1f2b9c89a146a3051ff99b42a1d6a2721e239bf6a075a2011e059bd6a038a2a81dc59a9ea0f6a1671da69a85a0bea11c1d939a73a097a1081d849a5ba082a1c21c699a3ea059a1871c279a14a01da1411cf499b49feca0111cda99439f8ca07d1b7599e89e63a0361b8d99429e0ba0bf1931109113c11491148d21ee1f722175258b25cf20d621d5268628b4200e22d326412a08212c227627f62b6820d4214d279b2c9b2071226227ae2c2221ca222c27812c39224324c5263e2c842332250726b62bcd24c726d925172a21244a26ab26f527b29db9995727ec23bca50fa54b27d8194ba5de9d7d2666a07ba3de25d325f6a2d19fe32b0f2508a4efa1b02d182676a33fa2432e85261aa2d6a2ec2d5d2696a1cca3482d0626c39cad9f422d9a23c89caf9e622d5822df9a2f9e4b2c9821119a4a9e0a2cf120669ab49ff02acc20149a729e5428f12084999f9ea826dc209799b49e5722db204d985b9d339cab20e197059d90a415218598ee9e72a964226599ef9f89aad821a099d5a0bea9ac21309cc5a277a89d22d39d26a4e5a73623799e48a4dfa68b224d9e19a43ba622226a9d7ca37da5a821cd9d6ca357a55821be9d56a339a536213d9dd0a2c7a4ae20a49c47a244a42c20cf9bfba129a4be1fe79bbda1e9a36d1ffd9b85a16da3e81eba9b4ca105a36a1e729b20a1b4a2201e9e9b11a180a2da1d349bd9a042a29a1de89ab5a013a2411d9f9a7fa0bfa1e91c7c9a52a091a1b81c0e9a20a042a1671cf69909a01ea1351cd49903a01fa1301c149a10a02ba13c1cf599f39f06a1331c549a4b9fd0a0471a3b03681306149c11901fb4209c220f262a223121d2223a273e252521dc226427a927d92073225b27d1293721e92201285d2b37215e239e27102c71219323d1275a2ce521fa239627312c08226e24a527812bc72182249327212af91edb228d278327419c1b907f287523a9a287a1e127f31248a422a29f270ea108a3751e5d27f3a3b8a3c12708286fa31ea3262cae27f5a2a2a2ea2dd327b9a1bca24d2e442774a1f1a2212ee326e79f71a26d2db825329f6da2182d732501a0c1a2752ca125609e33a26c2bef24449da3a1ff294924409d9ba1a7282f24529ef9a1df244324809de0a1f91539245b9ceda1d2a243247d9d8da2eba78024a59dd6a2edaa9324b39e70a3c8ab8224219d90a3d1a93224179eeca310a8ec23cc9e45a49fa7c523fe9e7fa47ca78823919fbda460a73b23b99e4da45da63222e09ddea3cda58321209d7ba360a51221229d24a3eca4b720509dcaa2b1a47b20b99c77a288a421205d9c2fa247a4cc1f6f9cffa112a4511f479cb9a1ada3c11ef79b8aa160a3741e279c7fa122a3321e069c59a103a3071ef99b46a1c9a2bf1d7c9b19a18ba28e1d209bc6a033a2261d959a7aa0c0a1b91c7c9a4aa06fa16c1c2f9a31a057a1511c919a26a049a12d1c329a1ea050a1241cd89a679fbea0171bcf025e124a145d145a1ebe2052222a2613204e21cb22e027fa219c216223352821246f219a235128a6265d214023a728ce28c520ed22a228f429dc20f1228928b42ae2205e237a28b92ac92080238c286d2a0c201923af283529b519fe1fcb28be26609cfd0e17292822ffa0f89da82832918da219a1c32803a2f5a2d79c5528aaa243a355207c2849a229a3f2287e2888a151a3e12c55286ba13ea2362ea92794a2a5a3b82e092843a176a3002e4b2793a01da3bb2da62664a1cfa3342d30279ea01aa36a2c41263e9fe8a2672bd225609f2ea32229cb2500a067a34825b8259a9f72a37d96a8251b9e51a34aa57725129f98a366a98725f29ee8a305ac7a25d39dcaa225ab4f24719c99a305a985247d9f71a4dba7b024509f60a45ba73a24b69f98a488a7062407a0a2a469a781235e9f61a4a7a69522eb9e33a448a62522749e15a4e2a5b521379ee6a3b7a55a21fa9d92a362a5f820c09d0aa3dca47920679d82a283a40d20219d2fa254a4741fe29cfda116a4fa1ea29ccca1e0a3ad1e749ca0a190a3571e0f9c67a14aa3f51dfc9b3fa1fea2971db79bf4a07da22a1d2f9baba034a2ec1cec9a77a0e1a19a1cc99a63a0b9a1851c949a38a07da1661c6d9a20a036a1331c109ae89f27a12d1c649aa69f24a1811a100d23135d1491154e1eff207c22f925f71fce21f0231628bf21c9229e249128e222842299248628102440221424be284b255b217d23d0280e27a0207b22d5284b28a5200f23cd2898286e20e9220a294b282c1ee221f528da260618261fda286d2452983b1b3529ff1c399f3a9be028c499b4a0919dcf28309ea3a0279d892864a1c2a1d38ee128fda0f5a2f022ef2837a1b4a2e7294c28caa0a0a20d2da82700a2c5a3782e6d28e3a12fa4ab2e8c2835a143a4fd2d4b283da123a4ad2d1b2832a04fa3df2cf02632a061a3e12bb4268ea0c1a3da29bf26c3a01ca46726ab2661a027a4d4169226e99e0ea48da5e925b29f1fa4fea9bb25e39e39a459ac6725239f26a477abe724229eb2a4bfa80c2560a0f1a4e9a7f12441a0d2a4b1a76d24b99fc0a4bca71624539fb2a480a79423a09f99a403a7fb2221a0a1a4f6a6b522b09e0ea4f8a5b6216e9d45a34aa5e520189d0ba315a59720bb9cdda2f4a46a20e29cc3a2c9a43620d19c8ba299a4e31f989c3ea259a4471f4d9cf1a10aa4d81e399ca4a19ba35c1e0d9c68a148a3051ef79b3ea1faa2b61dad9b1aa1bda28f1d659b08a1a1a27c1d419beca074a23f1d389bc1a036a2041d339b9ca0fea1dc1c349b79a09ba19c1c6f9a1aa07aa1551c649b10a073a17e1b330b4c146615f615f91d8a21372320260f204a22772448285520fd22ce24c228982069228a24a628a020d0210b249228912182210824c028b222e220bc23ea28f123292026230329b924fa1e242244294824981cb820e6289e228c15e81ef5281b204897431a952840161a9c449441282a99819f3d9be628449e2fa1479dde28a0a0eaa1589dd9282aa195a297983a293ba05fa20823d92864a0d4a2042a232877a1d0a3ca2d4c28f0a13aa4bc2ebb2816a109a4b32e2f28b2a142a4692e4a28bea0daa3852d7727a9a030a4952cd727eda054a4a92ac42773a0fda3ce260f27e1a009a43017a826769f9aa3dfa51c2653a08fa48aaab4263f9f2aa403aca0252ca0dfa3e0a9cb240ca088a467a8f3244aa0eca40fa80225cea0eea4fda79d2435a0bca4bca72824f69f8fa47ba7862318a068a4f5a6d622c29f63a4c0a68122329f7ea48fa67c22fa9e6aa45ba618221e9ee7a3cca54921df9d68a368a5bd20969d12a3fba461203b9ddca2cda41e201e9da6a2a7a4d11fd79c7ca26ca4881fbe9c56a246a4201f889c03a215a49e1e5c9ca3a1aca3351e0a9c4aa117a3b21dbe9b0da1bba2521d499bd4a05fa2f81c199bada015a2d01ce59a79a0eca18e1cd89a41a0a8a1621c2c9a02a074a13b1cea99a99eb2a0f3190000be126514ac13d91dbb2171239426881fe422b324852849203423ea24f5286120f122e624ee283c2055226e24ce282720ab211a24e328db1fdb203d23e3285120891f5722e4285220b31d3421ec285f1f631b1320c528c01d9615fe1e57292c1c0c93551c8b299794639d4f8e4829849ce99f7d9b6229ae9d74a07e9c4729999e7fa04d9c0129a79fdba0779cc228eca0e2a17c98f5287da1cea207236d2876a109a4942a2e2869a13ca4d82d872825a11ea4fa2e452873a10fa41d2f4728bda0e0a3fc2db527e1a0eda30d2d502716a179a4f92ae727dca07fa411286b27c59f16a4cd177726bd9fc1a430a70c27329fc8a405ab9c261e9f7ba40bab9725a4a08fa47ca85b258e9f87a422a7dc2429a0c7a472a7c72408a1e8a4a7a7aa2447a180a40fa703240ba066a4e2a67923359f6ba4d8a62923519f75a4b2a60423349f4ea465a66222439fe1a3dea59521d59e5ca345a5fc20309e01a312a59820689dc3a2dca461202c9d89a2bba405202a9d8da2a0a48b1f279d68a26fa44a1f159d50a246a4f31ec99cf8a10da4921e7e9cb2a1bca3221e369c69a15ea3b31dae9b19a1d1a2401d059bcfa064a2d61cd89aa2a01fa2a91ccb9a71a0e0a1851c0a9b5aa0b3a16e1ccc9a62a0d1a1ac1c919a159f8fa0681a000087154617e514f71d89224b24aa269e1f2423212580284c208e236325bc28492023233225f5287d208f220225fa286c20bf2182240329301fd420d8232b29151e3f20f8229529a31d701eda2190292d1c491cdb209b2970190118d21e6629c013d8922b1c50296196a29ba5147829449b029ec4975429e09ca59f559ce928cc9ee6a0299d372906a01ca20da00f29f8a039a3d3a04629ada135a3579ed128a5a106a4e9206a28eea09da3262a9d284aa240a47c2d79285ca199a39e2e0128ada0f5a34f2e0228e4a00aa4852dc82796a024a4ca2b6f27a0a074a43b2876273ba07aa4e6172127b7a000a5e8a77927b8a0efa4b5aaee2640a073a57aa92b2732a03ea464a62a25979fbda481a7422530a0cba4a4a7f52427a0f4a4cfa7b724f09fe0a4bda745240da007a5a7a7232428a00da591a7cf2337a0f0a476a730230ca097a4f2a68122859f7ca4a4a61322ad9e62a470a6ae21589e43a423a648216e9e15a4d6a5ff20299eb5a387a59220139e52a311a51d20b09db8a2b3a48e1f7c9d64a263a4f31e0d9d0fa222a4971ea59cc7a1dfa3261e449c8da193a3e81d029c5aa136a3921d6e9b25a1e6a23c1d719bfea0a5a2e71ca79bada026a2981c819b23a089a1ec1b569d4fa00aa12e1c8c9ab29edaa0121af01ac41d511f1421151b801ee71f5821d81f8222382461281f20d922bb24eb281f20de22dd240929d51f8122c4243b291a1fd92170247129361ed62008248629151da21fd6226d299b1b021d57215f29c218ca1ae61f4229761595126c1d62292d89ae95c11a8029d9982d9b73144729fd9ca69d66941329db9d419f6c990129dc9f86a0479c0a2905a05aa11c9ff928bca088a2e9a04329aaa12fa343a1d928e7a06ca3fea04a281aa1b4a2f71d2d2842a10ca5da28ab2848a00fa46e2cf227c5a004a4802dda2773a1aaa4902d3d28a7a19ca4ed2bcd2739a26ea44128d72630a1c9a4c09ddf2684a2d2a477a97a2618a03ea539aa9e2614a03ba4b9a70d25d99fbfa4d6a67425fb9fbea428a72c25cc9ff1a4c0a71d25aba02aa5ffa72a2588a004a5c1a7b22473a03aa5e0a797243da035a5c8a75f2421a0e3a45ea7b923ba9f83a4c1a6b922819f5fa46ca62522379f54a442a6ef21f29e3fa418a69321c79e23a4e2a54321609ef5a3aca5d020029ea0a350a577208e9d49a305a52220599ddfa2b3a4cb1f149d85a279a4291ff39c47a240a4c01e919cf2a1f7a3411e759ca7a1a2a3f21d5a9c56a129a37e1da09c30a1e0a2281da89ce3a07fa2db1c5b9c74a0d2a1601c699b26a071a1461cf49a739f45a1381b000051158717fc128a1eb22164237626aa1fda22b0247228dd1f1423e324ba28ec1ff022d3241729111f7b2295243629581ec12152245b29731d1a21f5234229541c20201b238e29291acc1db621b129d9175a1b5620b129200fda17671e9329c5917c8c2d1c8129399802998e145229c39b639da9945a296b9d2e9f399b5929ab9ea4a0c69e2b29d49fbda179a0132993a0aba28ba112297aa064a210a2dd28a7a08ba227a2862887a069a317a38528aba020a4e79d5928e7a09aa4b9238028b0a144a586296f2815a2f8a4942b6428d7a10ea5e7292b284ba199a46b25182709a186a4f8a0d026fc9fb3a44ea8c1267f9f48a441a7aa259aa0e5a48ca6352650a0d3a4c6a68f2545a0c0a4f3a61825e9a14fa502a86725b6a068a531a82425aba031a5fda7a02419a0e6a484a73d24e59fe0a43fa7ed23a79fb9a4efa655234c9f7aa482a6ac22f29e78a45fa64a22ca9e7ea46da60c22b49e78a468a6a5216b9e4ba416a65d21f59ddca385a5c120a09d35a318a52320669d11a3efa402207b9d03a3dda4b41f4f9dcca2b1a44f1ff39c74a265a4b61e589cc4a1bba3ef1dd39b20a1f4a2271da29bcda07aa2c61c979bc5a055a2a11c5a9bb5a040a2921c7f9bada017a26e1c6a9b9fa010a28a1c089c7da013a25b1c0000a908130c5501151eed21e723712628209122b5245b283d202523d924b8281d205123e624fb28881f8f229d240829581ee0215e2420295f1d2921a1234129f41b1f20b7227b295819551e92219c2960160e1aba1f8a29b7089612881d74291b9487953e195b29f098169a8d1439291e9cf09ccb9469290a9e409f699c5529f09ec8a0359fe32811a088a1c7a0c1289ca07da21fa2cc28c5a00ba3a4a2cc28fba05ca3aaa3c22896a0cda303a49f2873a012a451a44b2864a130a4ada4282832a297a448a00228fba12da570983a28c5a0cfa44793db277d9f2fa4309eba26399f46a413a5b426c39f4ca4b8a5522610a02aa4d2a5d9256aa075a452a6c625c4a100a5f2a6df255ba00da5b2a7862598a0c8a40ca7de24eda01ea59aa7f224e6a030a5afa7b02467a01ca586a7552426a012a564a71b24a49fdda41ea769232d9f77a49ca6a022ba9e51a45ba61e224f9e30a434a6c821079e03a4dca54c210a9ea7a389a5e5202c9e5ca340a58220549e15a30ca53320099eeea2d4a4dd1fce9da2a299a45f1f709d72a274a4141f0c9d29a241a49f1e949ce5a112a4341e389c91a183a3db1d079c52a129a3791d1a9c22a1d8a23a1de29bfba0a3a2111db69bb7a02da2be1cf99a7da0e5a1ae1c3b9c7fa030a2801b00007e07cd0a8001281d8a211a232f266b1e4022842425286d1f3923f724af28a41f59231c250f29fa1e7622bc2433296b1e89212c246129211d7c201d237b29ea1b391fc221a72960193f1d8a20c4291b15291a101fb4297508c512e41c8929b893c492551952292598249a160e2129869b4d9da4970f293a9d129f429c0e29bd9e6ba0ac9e0629c49f90a19ba0f5282ea025a2e7a1e5286ca0fca2c8a2cf28dda00da442a4ba28f3a023a4afa4712805a14da4cfa4242855a122a488a4f62718a134a4f6a41c286fa1c9a410a5fa2714a112a567a50d28f9a0cba496a5572783a0b6a40ea6de26f4a0d9a43ba69726d9a136a519a7d026bfa059a546a78f26c3a1caa41fa7a52595a0d9a43aa74d2573a02da5a4a75c2530a13da5fea711251ba1d3a454a75f2430a1b6a409a7132494a0bca4eaa6b22304a0b4a4c7a66f236c9fa8a4cea60923639f96a497a689223e9f53a428a6e421179f15a4dba55321f69efaa3b3a51321089fcba38ca5a820a49e83a347a55920099e24a3e8a401208a9dc6a2a9a4701f3f9d8aa279a4f31ef09c41a240a4a61e809ce1a1eba31d1e229c71a169a39a1dcc9b22a1fba22a1d079c06a1aca20d1d249ceaa08aa2001d2c9cc6a045a2be1c899b74a0fba1a41cc19b3ba009a2561b00009a05ef095d03fb1c72217c23d525151f312318257528c01f27230925a428a01f40230b25d828c81e6622b0240629731d4d210f242729ef1c1b2102245329361c9720642369290a1a471f35226d29db16211c8a2079296b0ee817661e78299693978c481c6a29a6983799f1175229cb9af09cd39431297a9cc69e749c1e29c99d8aa0de9ef128dd9ec2a111a1c3289f9f25a2c9a18a28bc9f8fa285a24a2827a0c7a2e8a22f2855a043a3afa313288ca0bfa371a40b28c3a0fba39ca4c82704a105a4c6a424277ca09aa395a4722616a13ba458a5d92622a191a4a8a50027dfa0afa4fda5d12677a11ba55fa6bf262ea12da57ea66626c6a0d6a4b7a69e2525a131a54da7af2528a232a58ba74a259ca130a582a71925e0a063a5d8a71e2564a054a5dca7d1245fa022a599a76d24c0a014a52ba70e244ba0d2a4efa65823699f95a498a6b422109f6aa44ba62c22d29e35a4faa5a121999eeaa37ea52a21749eaba349a5c920969e56a329a57020839e19a3fca42820269ebca2c8a4a41f939d6ea27ca4101f039dfda12ba4701e5f9c8ba1aaa3f61d1f9c50a129a3971dbf9b0fa1d8a2441d9e9beba096a21e1dbe9bd3a06da2e91caa9bada043a2b41cb59b81a0fda1881c729b6aa0baa1701c539b9b9f4ca1bb1a00005e03f2079d05131dbc2095222e264b1f492330259e28981f9a233225fc28fd1e2d230d25f1289e1eac22bb240129a71df1214e240a29001d6e21fb231929711b18209f221e29dc180c1e9f214b29e216281c84207029681108186d1e6f298093a68cf61a312996985299580e2329409a7d9cd7940c293a9cc09d619bf5284c9d1ba02d9ec128589efca0b7a09128469f1ba2e8a15b28c99f91a20ea3322824a043a3c4a3182865a07ba33fa4fa2785a0e7a396a4d5277aa01da4e0a4c227a1a042a431a567277ca03da450a52627aaa05fa485a5f426c2a078a4f4a5bb260aa18da43ca6a126b2a0bca464a6722699a0cea4b1a65a2699a0b1a4e7a6ed25eca013a5fda6042674a138a588a7ed2532a12aa58ba7712509a183a5faa7832587a03da589a7e62441a0f7a40ba76d246ba0eda403a71f2454a0faa4fea6dd2347a0b9a4c3a6222304a07ea45da66722429f3aa4f5a5c321e79e0fa4c1a54c219a9ee2a382a504213b9e93a342a5ac20eb9d34a3fba43820909dd9a2baa4ed1f7d9d9fa288a46d1f479d7ba268a4091f229d3ba233a49f1ede9ceaa101a4271e9e9c75a193a3be1d7f9c1ea1eba2441d929ccfa05ea2e41c539c7ca02aa29e1c2c9c43a0b7a1571cdc9ab29f43a1101c8e9a069fffa0771a4e0ae015241893155a1e972240241e277d1ed02276241c28901efe22dd246828cc1e0823f524c0282f1e8822d124f428b11d41228b243929de1c89211d244229c51bcf2050236d295a19c61f2b226529b116431dee205d295c0e2619751e42298493b18c0c1b3e29a5986299680e1f29669a979c18980329459c739e939ccc28599d2ea0259faf28349e1da16ea08828d69eaaa13da15328829f7ca272a21c2802a0f1a236a3e72715a00ba3efa38c273ca067a347a4782741a075a355a441274ca0caa3c9a410277ca031a40fa5c52685a055a487a597268ba081a4b9a57b26bba0bda41ca676268ca0bca460a68926cea024a5d1a6b726f0a035a530a79d26c0a090a59ea7982645a03da57aa7f7253ca01ea56ca77e257ea04aa59fa74a2580a01ba554a7c7244ba002a526a7682433a0f7a42da72e2444a0efa406a7d3232ca0cba4bfa62c2302a099a499a696222a9f51a436a60722af9e1ca4f9a57621999e00a4afa53121429ea5a387a5ce20f89d2ea30ca54b205b9d9ea2a1a4d11f0e9d3ca268a4381fd69cf2a133a4e21eb89cd8a106a48e1ea69cb6a1bfa3451e8c9c77a169a3121e9b9c48a122a3be1da49c19a1c2a24e1d8e9cdba08ba21d1d5b9c9ca02fa2a31cc09b15a0a5a1351c059b6a9f40a1061a00005710c6121811321e72227b242327491f45224624fe274c1ee1214e24a027641e5a227f243e28351e68228e24a528a71d8722b4240229081d162279244f29081c04219423a9298819c11f2f22ec29dc15081d7420e2294a087c19061ec029b593068dd4198829b898bc99c38e37290e9b779da99bdc28a29c639f699e7528799dffa085a03b287b9ef5a1d8a1f927439f93a2c5a29e27f29f26a309a43a274da0a3a335a4ef2641a006a489a49b2657a00da4a3a41d2655a010a4bca4ea2570a026a416a5d6259fa069a476a5cf25b4a07da4a2a50226bea0aba41fa62826bea0d6a45ba64b26baa0c6a46fa66d26c2a0fba4b2a69426d6a01fa504a78826fda044a537a73e26c5a047a53da7e2257da050a54ea7982544a026a553a73d255aa024a51fa7e4244ba00aa5fea6802465a00ea5ffa61f247ea008a5cea6c52342a0cea49ba61923b79f7da452a66d22e49e3ca4ffa5cf21449ef2a39fa52f21e99d8fa359a5b820ba9d15a3fea44920789d8ca299a4ac1f1c9d15a253a4fb1ee99cc7a1efa36b1e949c53a141a3aa1d5d9c07a108a3591d1c9ccda0b8a2ff1cf99baba090a2c01c929b8ca05da2931c739b86a042a28d1c6e9b8ba031a2761c929b7aa008a2731c039b5ca0eca1631c2f9bb39f50a1541a0783b690d98c6715381d332114234326781d3422fc237c27621d83210d242727971db9214024a527531d092254243128081d4a2284249c28ac1c0a226424d028db1b922120242b2980195d2027235329a617d91e0f22c5295a13e51c7c20ea29c78ef416001db129509814977a0f2d29009a9e9cb3989328be9bf89d269dfd27b69c04a0fa9e3f27609deba0c9a08826209e85a1a4a11a26da9e14a274a2ff25699f9ca236a3b925929f06a3e1a38a25b79f71a348a43d25ec9f9fa3a5a428252aa0e3a3d7a4fc242da00da43ba5ca2447a04aa465a5df2461a07ca4e2a5ea246ea082a40ba6342594a099a4f8a5ee25bfa0d5a47ba68126bba02ea537a7ce26f6a0b7a5b4a7eb26cca0ada5dea78f26bea0a2a5dfa724267ea08ca5dba7bb252ca065a5a7a73a251aa032a560a7ce2411a008a51ba7512407a0eea4e6a6be23e19f9ba457a6ed22939f46a4fca53a224a9f0da4a3a5a8210d9faea366a53321f89e4ea316a5cb20c19ef1a2d3a45520839ea7a2a3a4e41fe39d43a249a4301f6e9dc4a1e8a37b1ee09c5ca17ca3061e519c0aa1f6a28b1d0d9cdda095a23d1dec9ba7a062a2f51ca89b7fa030a2941cd59b6fa0f6a1831cdc9b50a0e3a1711cf49b38a0b1a1591cb19b10a0b5a14a1c6e9be59f95a1551a0000720bfb119412391d392002226425b71cd7208a226526d11cbd200123a826e31c0b2184231527bc1c1d218e2395273a1ceb2025230f28711b9a20c3223c28f71ac92012237f28871adf2058233629f7190a21ba23112ae3163e2072223d2af20ef41cb8203d2a6e94dc14c31c8529f5997c9c5a996f28929c49a002a03e27b99d58a17ca1d725619e4ea2cfa2df24a19ecfa294a35324d69e50a32da403243d9f92a362a4ec23dd9f1ea498a4e32309a045a40ca57e2339a03da43fa5c82365a061a436a5092453a058a467a52c244fa044a458a56f2423a037a487a50a2535a050a477a5742560a04fa4aca508269ba0d4a457a69c2653a161a54ba7e126b7a1c1a5cca7d82612a1dfa505a8852666a0baa5eea7052669a092a592a7922566a045a533a7072531a0f5a4b8a6732403a09ca452a6ea239b9f67a4f7a5e3221a9f33a4bba54922cc9e01a495a5a121839e6ea32ba51021259ee7a2b8a48f20b89d5ea26ea42020909d05a23fa48d1f6c9dd2a11ba4121f349dc1a109a4c41e009da4a1e7a36b1eae9c6aa1a1a3081e8e9c50a151a3d91d689c1ea1fda2831d329cc5a099a2331d119c86a029a2d21ccd9b49a0daa1841c509b1da0afa1561c209b01a070a12d1cfb9a1ea0b0a1581ce99a989f29a1d21a0080c58acd8c69805c1c1020a6215d25871cab209f22a2269c1c9420ac22ca26aa1c84207f22ee26651c652082224127ee1b2a2049227027621a1f1f9721832749196b1eee20ef27aa196d1fad218928a01aa9203c233229a6194e2111244f2a3e1930226d24bd2b5215c21ff9226f2b6998bd96e311fc284e9d3fa20fa2c124939e37a495a4e021dd9e2ca492a40e200b9fcca345a4e71ced9ed3a368a4a71c2c9f82a337a4771c369f3fa31ba40d1b189fbca20aa4b317619e2da293a37e145c9ee7a11ca39214799e9fa13ba3c0179b9ec1a156a35d1cd19ecda1d9a399201ca076a3f9a45624a3a09ca41fa6f72653a1efa5a6a76d286ca1b4a660a88928cda092a63ea80d284aa094a58aa7af2636a013a50fa7ab25aaa0ffa4cea6ff2480a0c0a46aa67824b79f39a4b8a59923999f12a47da5e322729fe2a35ea56222379fa9a33fa5d6210d9f60a31fa57221af9e0ba3eca4f420869edfa2cda4af20229ea4a29ea44d20ee9d62a274a40120719d05a220a44f1fef9c78a18ca3831e709c06a1f3a2db1d019c9da074a2431d919b73a02fa2f71c3e9b5ea026a2c51c069b3fa015a2a31c8e9a28a0d0a1701c6d9af59f86a1331c6c9aa89f49a1e51b699a289feaa0781bfd99ef9ec4a09a1b4799099e40a08719198c1894b593dd07521b961e4d207e24a51c2e208a21ff25bf1cbf1f95213b26651c501f5c2158261a1bf51daa205b264c19dd1c8b1f7226e717681b131e7b268814d318e41c35263c115d16b31b5326b10f9014161ae226e7047311ee18d325828c8012e419102ad795ed90891b812d3a9db8a0129c422c2da04aa537a503a12ca0e7a5f1a530a9669fe9a48ca5c4a6999de6a2f9a3a4a3089d69a2c5a270a0b59da6a165a2319dae9da1a1f6a22c9dc79de1a135a3679dab9dffa044a2a7a03d9da2a0afa1dba2dc9d17a106a289a4629e18a1bca2f5a4499fcca1dea330a1dba0a3a431a6b822aca1dea689a83029baa263a8a3a9612a2fa2e5a745a97f299ca1e9a5aaa767272da006a5d7a6c625889e31a4c0a57524459f13a4c4a51324d29e16a4b4a5cd23159f13a480a53623fa9eb8a350a56d22919e8ba339a50122759e28a301a56e212d9ecca2bba4ff20ea9d82a291a4a320db9d3aa259a438209d9df9a129a4d71f679dafa106a4381f329d77a1b0a3b91e089d2fa139a33f1ec09ceca0e9a2bd1d689ca0a080a2471d3d9c7aa036a2001d339c5da0ffa1c41c129c4ca0cfa1a31cda9b40a0cda17c1c9e9b1aa0a4a1471c339bda9f7aa1ff1bbd9a439f2da14f1bdb99bd9eb3a00d1b5699de9d1ca09a190000e5810801d80dd51a301e2620a8236b1bac1efc203025b51bd11e14216f25741b6e1eaf208c25871a7b1d43209525cd18341cf21ea925e4174c1b2c1e93259e15401a7b1d67258814fb180a1de124bb101616c01b20248903051112189a21de8855839512281d138a408b3e0956184d8cab8fbd8934182f940296f992141dc497b899299859214999179cdc9a2123169a449df89ce623bf9b829e919e4d24fe9cfe9f90a0aa24089e9ea042a1bc24e89c63a1b6a22c25f59dfca292a49b26579e82a402a6df27c7a020a7fca77a2922a339a9ffa98c2a4aa286a840a9742986a0a9a59da53326f3a37ca813a95c2a81a1a5a882a9652a9c949ba440a66925e89904a25fa46822509e14a289a42d22ab9c30a129a41b216e9de2a172a46f21b09d0ba24da46621139e17a243a43021719e13a26ca40321929e43a28ba4ee20bf9e3ba27ca49920909e0ca251a45220f09ddfa12ba40f20439da5a100a4741f149d81a1c7a3081f1f9d55a195a3741e439d2da14da30f1e539dfaa017a3d21d149daea096a24a1d7b9c4da0f6a1c11c779c1fa0cca18e1c769c11a0bfa1651c729c02a0b9a1541c379c12a0aaa1581cf59bff9f85a12b1c639bd49f5ea1151cef9a669f30a1a11b669a099fdca0701b5a9a8f9d519fb9180000ea04c80a480ae01af11d48203224d41abc1edf20b2245e1b801ee220d024081b211eb020e924c3195b1d2b20d32467181d1cbd1ec4249116141aa51d87241915bd176c1c2f2411125413971a2d23890ce60bd91679213387048a5f121a20588d9791c7859b201c92ba969694b0227e95069a10997e246198899c7b9c7a25239af19d319ee825259b0b9fc89ff525099c02a064a0c925589c4aa0d2a08725bc9c95a045a15f25fa9cdca0dea13225549d17a132a2fb24779d44a178a2cc24cf9d85a19da29424dd9da4a1f7a258248e9dc2a107a3f123ab9cfea06aa25a2256993e9fcda049207994989b7b9d051cd0916896cb99f7166194e9941c992e184499339bf89d8b1c6d9cb39f7da114200e9dd1a056a2a8202d9dfba01ba38120459d14a136a39520499d39a16aa36620409d52a1c1a34420769d7ea1f9a32120919d7ba1cca30120399d35a169a35c1fff9c0fa136a3e81ec29ce7a0faa2781ed09cd1a0e2a2451ed59cb7a0b7a2ee1dc69ca5a08fa2a61db49c96a07da2621da59c7ca059a2331d749c6fa03aa2071d3b9c60a027a2ca1c339c59a015a2b21c389c3ca0efa1941c419c1ba0b3a1701c2b9c0ea090a13b1c0e9ca29f3fa1f61b899b0d9fe9a0181bc99ab19ec2a0141b109cce9e63a0dc1900000111c0148a08fb1b7c1f06211b24f41b8e1f3821f624e91a161e80209124f919391dc81f7024e818741cb31e4f240218c31aa71d1e2473156118161cc523a211301477191623240dd70e1316742295022c85ca132e221a8be490780ddb221790f794058ec923bf9392984b967d240b96a49a7e9903251698569c039c4a252999369de39c3e251c9ad89d099e3325a69aa09e2c9f0925639b209fe39fe024169cde9f53a0b324639c49a0d7a084248d9c7ea05aa16524cc9cc5a0c4a14b24e59cdaa0e2a11624059de3a0eaa1d523159de8a016a28123239df7a034a21a23f89ceea00fa2b9227f9c87a09da1bc21109b729ff7a07d20cf99349e74a0441f8799e29d53a0921e9999ce9d40a0eb1df999dc9d5da09f1d009b559e91a0b81dc19bc39e23a1e11d3e9c619f73a1131e9b9c09a0e0a1331e879c1da0fba15b1e799c4ca02fa24b1e929c82a071a2701e969cafa0bca2671ebd9cd0a0e7a2161e929caaa0a2a2e71d669c85a067a2851d589c50a026a2271d479c29a0eea1e71c229cfc9faea19a1c0a9cd69f91a1741ccb9bbb9f77a13d1c9c9b949f59a1281c749b959f56a1021ce59a789f3ba1cd1bc19a6c9f1ca1491bb89a0c9fdba0ea1ac79ab19e9da0661aa29a999e83a0791a179c199e26a09f1937221e18d71742191f29d71daf209824f52a13205920a1265b2c2b1e2d202326be2cf21d901fab26b22cbd1df61eed269a2ce11dc81ec726642c9c1d951e9f243b2cc31c5f1e7320fc2a991be31c661d4a29a42074217d1b682a9e2acd2cb61ff12526a49fa3a825ab2243a6a3200b2187222c99512abc1d231ec58e792cd21c6b93680a672d341c8aa3bb04de2db11d68a45495a42dc1216fa4da9d6329d422ba9c5b9ce628d6200080aa93a92968170080948eac287714bb882b902928f312628c7f8fe4261d114a8f008e4125990f6e90ae908e242110ac9164902123dc0ff192fb91841dd710a08e37988314d119eb8b6b982f9e1a1ca395559971a5ae1d2d963b9c71a83b1fb398ee9f13a97121019b0ca23aa8ed226e9f9fa5dea87525709ed5a51ea87224ed9a1da3d4a45221dc9cd4a10fa33020959c94a12ca39f1f599caea16ca3d11f3e9c97a166a36e1f2b9c83a12aa3391f169c65a12fa3eb1e019c5ba122a3c61e119c32a1c5a2431e729be7a044a2b41df89a8fa0e4a11f1df69a86a0c2a1e61cbc9a6fa0aaa1cd1cce9a6da0a1a19f1c359a45a068a1751c049a01a00aa1151c8d99879f9ea0931b6099629f82a03f1b8499499f8ea0261b6e99f99e61a0ac1ac398d69e59a0471aa399da9e3ca0eb191d9a828535083e065326d11f1223cd253e2ae6209c22d9272c2ce21fe2206626f62c8620ca2103287c2ddc2034225e28762dcd205b2234270a2dbc202522e824b82c0821ce2286214a2c19224224751e252bd4267428561d2b2b56291d2b071f442613a567a4f3215a2270a9d4a840230a2129a6272069213e94d5a1dd2a101f39a0ef9b8b2d2820bfa40d9d0c2e6d23d4a5599fef2d522530a594a1512d1e2686a19e9fdb2cd723999c089be82c69157a991e97fc2cad833b99d095d52b94091498cf93762a2a844697ec95eb29fd043c95f1957d2851155c939b928926931076952c95cc21c81592921a95ee1bda19f0910896afa0961d9991ea9690a6f41f5d965c9a3fa92220dc988d9e1daa32210a9a94a056a8f521589c6ba2dca66421879e38a4aaa63f21c39e8ea472a69221c39de6a348a52321669df2a2c4a49420fb9df4a2aca49e20c99d9da272a45520d39c0aa20fa4ce1f499cc5a1c3a35b1f699ccda1a5a3341f629cb8a188a3dd1e509c8da12fa3931eff9b45a1dea21b1ece9b0ea190a2a91d509be3a050a2671d1d9bb2a00ea2131df49a9fa0d0a1ef1cba9a7da0b9a1ae1c7a9a5aa093a18a1c559a33a04ba12c1cfe9903a001a1fa1bca997c9fa9a0581b7899589f8ca0351b7c99929e1ea0091a458b200a5911200a6d2344202b23ca251f289d21f922a527542a4421c6227727582c55219122e727212d4321c5223428882d1321ed228127862d63214823a426352d94225a249225b72c7423f9247524162c792477262224b42a4024782675248a280a9c9b900d2565242ba672a55c25ce1d57a6bea04525db9ea6a29c264e2475a2939d722c8a24e9a409a20b2efb25d0a4d6a1d12ee2267fa468a2122e7526f1a115a2482d9624b19bd19c802dc220049ce79c4d2d20201d9ce69c9d2c3520199a419cfb2b171f089b399de12ab71e699b199d5029e91ee398309d23273f1edd962d9c9323991d0d96d99aa315f31e7e94c89a95a43620f798d49ef6a869234b9b88a0cfaa1423df9aa4a1bcaa9122fe9ccba300a91c23319fcba46da85723879ffaa4d8a79d22ba9eaca4fca60822cc9d10a4caa56521b49e0aa4a7a538219c9e00a491a53521c59d52a31ba59b20359dd0a2aba43b20799c65a263a4d61f589c12a21ea4481f1c9cafa1a2a3bc1efe9b73a139a33d1e9a9b3da1d7a2ec1dc99b16a1a2a2a01d739beda061a2611d4d9bc9a026a21c1def9a9fa0eba1c31cc39a78a0a8a19a1c2b9a43a06da14a1c109a2da034a1261cfc9929a038a1231c209a25a040a11f1cbb992ca04ca13f1c589a13a06da1bc1a0000730ae40bdd05a52009211e230926a524cd215c239b27d2274321be2264271a2a5721fd22d427562c4f21ba222228192d3221cc22cb27782d6d213323a827512dd82107244527ff2cdc214524d6265a2cb4216b249926e82a6b1e74228026a828809c73992528a62526a46aa30328b41de4a46fa3c72775a23ca321207227dca46da3c528072812a50da3c72cc1276ca4e9a3fc2d7f2821a34fa4be2e462837a39ea3772eae27e1a08da2ae2dea2528a02ba2282d52257ea0f1a2b62cb825399f2aa2f82bdb249d9edea1952a6c245f9e08a2a2287624ea9e71a22d258f245f9e53a259166d24189d1aa263a464245e9ed5a288a8c824a69d79a37eab0025729f28a446ac0925439f6aa4c0aacc24559f6ca46ea84024979fc0a452a81424d59f17a527a8c62336a030a5e3a71723469fa9a4d8a62722b49e56a45aa6a521c99d12a4caa52921659d74a31da592209d9d1ca3e8a45b20239df3a2cfa43420939c8ea279a4d51f839c48a234a4421f4a9cf2a1eca3c91ee99bb3a1a7a34a1e279ca8a164a3071e229c8ca146a3ea1d159c6aa10ba3c61dc69b3ca1c7a2751d529bf7a05fa22c1dbe9aaaa0f1a1c01c8d9a6da0ada1741c619a5ba087a1621ca89a3ca063a1291cee9916a048a1101c809abc9fd7a0081b0000070c240d52074f205d213b23ed26392185213d2302289324f221cd2369284e27d621c0239528d5291222a92326290e2c642112230c29a02c17212f23bb28ed2c2721a623b428df2c9720092359286a2c3b1f6c224d28582b7e19f81e6328dc28789c590ff228002559a10da0bd283d1ac3a29da18b2832a3e4a2129c392839a48ca37121982869a449a3e32992284ea366a4872d082926a297a3dd2e7e2884a34fa4f92e9e28e9a1ffa3262ef02704a197a3d22d3527c6a135a4442da427dca052a3a52c722650a055a3cd2b47263ba05ca353290926fba0aba35026072690a0b8a3b416f725779fa7a37da5d0253ca0f0a3a8a9c725e49f7ea454ac1e26549f19a443ac1c25da9d4da4efa9d224e19fd9a45ca8c32457a0e3a409a853244da0fba404a8fc236da0f1a4bca7382345a0b2a420a79422e69f88a4b9a60f22629f4fa420a69e21de9e0ca4d7a51b21799ed6a384a5e120ea9d34a318a565208f9dd0a2a9a405202b9d78a278a4611f039d4fa24ca41d1fc19cffa114a49d1e909cdea1d1a3411e549c9fa194a3fe1d4e9c60a127a3991d1a9c0aa1a4a2211deb9bd5a053a2eb1c859ba4a0f9a19d1c389b82a0dca16d1cbf9a66a0aba1521c5d9a34a067a12d1cf1991da038a1171c569ad29fe7a08b1a5f017d0c800e580ba91fc221cf23c626612088226b24502893225823db24be288924f722d624c8288b26982258241129ee2885216e230f29bd2ae72008233329032cbd20e8223529662c1a20ba222029eb2be71dc52116295f2a0116cf1eeb287a28a59925180f293f245b9f549bd228cc1236a1079e2c295ca12fa1c59ced2862a319a2ba15b728daa258a321242229d7a297a3f62aba28a4a144a3142e142844a323a47b2f942882a22ba4fc2e8b28bfa143a4662e2a28eea160a4242e47282ea1b3a35b2d322720a107a45e2c352744a10ba41c2aec26e4a140a4b226f92652a16ba42017a82620a052a4cca51726b4a06da4eaa9f42542a0d3a4b2acf8254aa0dca4b5ac7025d69e34a5bba94c259ca049a553a8ec24e8a02da509a86e2462a039a50ca81f2405a006a5daa7722308a0d4a46fa7d12267a0f0a44ca7b222739f60a466a6bd21049ee5a3aba50b21929d75a356a59c20ef9c2ea32da56220299d1ba3ffa432201b9ddba2bfa4d21fe99c83a27ca42e1fa79c1ba238a4bc1e709ccca1daa32e1e399c73a15ba3ce1d2b9c47a10aa3a01dfe9b25a1d3a25c1da79b12a1b3a2481d629bf4a087a20b1d399bd8a042a2d11c099ba5a00ea2ac1cba9a75a0a2a1611c349a34a067a1131c219b28a028a1771b0000f80e46101c0d401f8a223e2405277b200923ea249828d3208d234a2506291021b222b824cd28b92102225124d928aa24a921092407294f271821d9234229e128d720aa239c29b1295b20d422c529b229bb1ca820d52886289215871fc528242631967e1b4d293e21839ca98e14298796f59fef99f928df9f7ba1179e002973a134a28f9df128eba1c2a2d98f76295fa1a9a35525382939a1f1a3bf2b6128fba1baa3fb2e43284aa201a4652f9028fea1f4a3d82e11287ea27ba4ca2e622896a13ca4f92dcf2792a192a40f2d272871a194a4682bf7277ba161a4fb274d2705a282a4a11d3427a8a028a426a63626bea18da435ab7b26f1a0aca4d0acfa25f6a10ba49bab9b24c2a0b9a4eba8e5245ca15fa53ba8032523a154a53fa8a9247ea031a511a831245fa0fda4f3a76e2374a0daa489a7ee223ea0bda430a77722d89faca4eba62a229b9f93a490a6e321fb9e3ca42ea646217f9efaa3c0a5e8202f9e8aa354a57c20c89d2fa319a523209f9d08a3e9a4d51f329dbea29da46c1ff39c90a274a4fc1ed69c4da246a4b41eb39cfca10ba43a1e4e9c90a17ca3cb1d199c3ea1fda2561d6d9bf5a080a2ed1c4a9bb8a038a2a21c009b90a002a2891cd49a65a0b8a1431c439a4aa08aa11c1c4d9a889fe9a0311a0000270ca50d4909011f5d2242249327582094233625b928d020ec235c253b29c4205523412517295c20c522ae241429d5206622c224742942227b211c2473292a242020d1224a291c259c1e5e21922927255f1b81205a29b62446161a1fd829e1218093a41cbe29e219369c338e17294f9cfe9e279b1229a19ea2a0ae9c5829fa9e3ea1869d5b2949a08fa17a9d062916a2bda20e904829f4a1f8a38f2565281aa25da48e2c3528f8a121a41e2f9128bda10da4d92f3528f0a230a4862f2828f6a144a4ab2e0d28d4a181a4c82d1728c5a1e9a42a2c4628cfa18ba4b92842273da156a4011e7a2641a1a9a487a6872611a10da576ab9b2626a166a5c5ac6126eca1cca412aa4125c1a0d2a4a5a7e82425a135a51aa8db24fda05aa532a8ab2446a1dea4c0a7f32349a0b9a4a0a77d23f69fc7a450a71e230ca0eaa469a71e23cc9fcea434a7a422639f72a498a6df21a09e0aa4eea53221ef9d89a360a5b120809d0da300a53f20f89cc4a2e6a4e21f159dc8a2bfa48e1f129d9fa294a4221f149d61a257a4b81ebd9c1ea223a45e1e909cd4a1daa3ee1d429c8aa178a3821d039c48a115a3401d609bfea093a2d91c229bd6a050a2951cfc9aaba021a2961c119b7ca0d3a1751ccd9a77a0daa18b1c469acd9f1da1e11a00009e0d6510bb01281f6c23de24912739202224e525a828a3204524002624299520b123c1253829cf2045235b253529bd205122b3242c293d20d92139248b296c1fe020c323df293820041f7822e9291f20881cc620b429661e4d16291fde29821a6b96dc1be629548bbd9c030fce29c39a0c9fe2998e29b89d72a0759c33295e9f24a2109f042ae8a0d4a2d3a0802999a1bfa3d7a08129c5a1aba3509cfc28b7a301a4ee257c280da21da4c12c8a286ba261a4882f492867a2e8a3d62f0c2863a129a46d2f01288aa25ba4462e022823a259a4de2ca7272ca382a4062a84279ca185a44021092789a1eca4cfa6d926f4a0a1a413ac0e26d6a198a53aacc026eca091a463a8192559a0fba4e7a71225c9a03fa5dea7e52452a055a51aa8a62481a048a512a8502472a040a50ea806245ea042a504a892237ea04ba50ca851233ea0f1a47ca78622d29fcea434a72f22349fbaa407a7d021c39e89a48ca65521af9e4ea40ea600215f9e00a4aea57f205e9e7ba33fa51e20ee9df3a2c7a4661fa09d7aa26fa4be1e399d24a236a4641ed69ceba101a4171e649cb3a1bfa3bc1d2a9c67a15da35f1dc59b31a1f5a20a1dbe9b16a1cea2b31cca9bc8a064a2781cd49b6ca0e4a1141ca49c7aa09ba13c1c0d9bb99faaa1911a000090189a18f8197e1ccb203c22e924a020ad234725de28a6209f237c2530299320912383255129492041234825922903205322f524c129651f7c219024cd29151e67205823b829a91cee1da4219d298a1a561b39208929b6185813ff1dda297a107a988c1b0a2aaf96aa9cf514cb293f9de49deb9428292c9e1ca0b3992329b09f6ca1919d8a298fa074a24ea08c29bfa16ca3bca1912929a2aca3c2a1d9285da12da437a0562851a22ca4e5268c2882a13ba5b32d9228dca009a4af2f012864a132a47d2f19286fa19da4d82efe27cfa1dda41f2dd9274aa215a5882a982714a27aa5b321aa2704a29ea532a9302721a2a3a597aceb26b7a16ea430aa1e2544a002a5cda77a2517a0eea4c8a71c255ba02ea508a80125aca053a50ca8f924dea047a50da89d24e2a071a51ca87624a8a08ca520a8452488a074a50fa8e6235aa0eca455a7b72244a099a4c4a60822e59f7fa484a6a421539f4fa452a63c211c9f3fa405a60921a59e22a4d3a5be20519efea390a55920dc9dada34aa50a20bd9d41a3f6a4a21f5e9dbea2a0a4171f479d81a26aa49e1ee39c19a216a4101ecd9cd3a1d5a3ca1d909c75a161a35d1da39c4da106a3f61c7f9c1ea1a9a2cb1c289cc5a01ba2681c399b7ca0cba15a1c059b51a0eba1091c0000db0d4911cd014a1fe32266247c272c2087236225c62879209b234325062950206a2328256129cc1ffb22c3248e29e51e34227f24a529041e42212c24a1291c1d3620d822eb29441b3b1ea921e629d218cd1b2e20e32961120016001ed0298d8f2293461baf290d987e9ae0147f29fb9bb79d25988729f39d28a0b29c9529b69f49a13c9f662978a017a2d2a03d2907a10ba36fa13529eaa017a324a2f52870a154a335a2da2886a1faa37ea17f28f3a145a446244d2874a2aaa4322d7d28c5a1eba5d62f262920a207a506308e2895a295a4892eb8278fa169a4292cc12655a16ba4f32355260ba12ca541a913272ba07ea4ebaac72534a00fa519a8ff25a2a08aa479a6f92415a02ba5dba72b25b0a1b8a563a86e25b4a099a567a8f8243aa19ea546a8c2248fa045a50aa841243ba044a5cea70e242ca039a5a8a79023e19fd0a4fba69122449f8aa49da60822f79e98a48aa6c421ed9e7ca476a67321bc9e5ea444a62d215f9e19a4bea5b4200f9e9ca349a53a20e29d55a321a5e21fea9d3ca3fea4861fce9d04a3d6a44c1f739da1a294a4be1edc9c35a236a42c1e5a9cc9a1e9a39f1d089c50a14ba3191dd49bf6a0b1a2951ca19bd8a066a2791c8e9bbca008a2441c859bc7a027a2871ce39bc6a09ea2941c0000b107be099d84671f3d23e6245f2775205c233325a4289a20e8235b25122981209f234b25122914203223172547292e1f9c22c2247a29cc1da1216324aa29841c7e205723d529bf19401e0c22ea29d516791a601fc629730fb30c021d9d2970941898e51785297199a29b708e7829fe9ce79d079aa129d29e46a0b59da9292ca05ea17da06729caa071a2bca1342940a13fa3a6a2fe285fa1eaa333a30a295fa108a415a4e028f3a027a446a49c28bea1d4a460a4a62879a13ba4201aa0286fa1aba4b22a7d2827a279a5a52d7d28cda172a57f2d4728b4a172a5602b1a288aa170a5eb1dfd2700a1d1a4baa8e726c69feca433a87826c0a0b8a49ea6cf2588a158a5d4a7dd2524a14ca5e8a74c25d9a0dea459a7b224c2a06ca512a8e0245ca172a51da8a924b4a061a501a850246da063a5f1a721242aa03ca5c9a78b23939fc2a424a7ab22049f95a4bfa60d22969e5ba478a6ae21439e24a418a627213d9eeea3aca5b8204c9ea6a376a55a206e9e59a342a50b203f9e21a30ea5961f049edda2cca4391fa19d8aa29ba4bb1e529d56a263a4721ed99c0ca22ca4031e859cc3a1e6a3bb1d379c76a174a35e1d2a9c4ea125a3171d0b9c2ba1d8a2f51cd49bf5a057a2a41c7e9bcca036a2a81c349ccda067a27c1b0000e904530ae9845b1e9f2260244427651fb622b32467284c20c1236625f9280f20b72351254029a11fc822ca246529e11ef0214924a429c21dd0204a23d0298a1cb21f2622e129ce19091ddc20092a7e156419c11ef429d008cd0c681cbd2965953d98111890290999c09bde945429519c469e5d9b3129c79d56a0289e3129639f44a162a027292ea01fa23ca1f7285ca0b3a229a2e028cfa09fa314a3d22831a162a477a4b82824a1cda460a56b2871a159a5d9a5572885a324a5c1a5372816a2eca409a432280da243a5311bcb271da146a51b24e027fca06fa436218126949f2ea4f5a2d425709f97a482a6f725a7a0aca474a6ee25eaa030a599a70b26aaa13ba5a3a7a225fca078a5d8a7ac2594a1a3a54ca870258aa140a536a8cf2476a10ea59da769241ba202a580a70824faa009a549a7c12362a0f6a42fa7492330a0e7a4ffa6e82206a0bca4e7a66022cf9f94a470a6ee21a09f4da422a65421489f24a4f5a5e820469f06a4bca59e20ec9ee7a37ba55720459e66a32ba5f41fb59d13a3e5a45b1f6a9dc5a299a4f61e269d6fa256a4781ec19cefa110a4e71d639c96a1aaa36e1d1d9c4ba123a3241d269c1da1e4a2e81c2b9c0ea1b5a2da1c1d9cd0a058a2901c159b85a0f9a1551cc19b51a0eca1161b000061016f072284401e70228324f826811fda23822594283c20b1236625ef2811206f232d251029501fda22e32442291b1ec2218e2489290c1d3d2120249c29351ca7208d239a29791ab91eef21bc29ae17d41b3120c229510f6113331ece2932947293e4199f290a99da9ad00e7d29db9bf09dfd995a29179d3fa06c9e3b29549e2ea182a01029a89f60a2c4a1dc2835a0c6a288a28e283ea026a33da3572884a096a38da31e28c0a0b9a327a4ef27c6a00da4a1a4c22790a165a452a5a42733a198a47aa52e27fba08ea489a4cc266ba1f3a47fa4412716a119a506a578276ea120a5f4a51f276fa10ea5caa55c269ba13ba5b2a6432680a01ca51ca7a02510a148a5baa77b2597a240a5c7a72725b1a16ca500a80c251aa1c0a54fa82b25dea0bfa548a8eb24cba080a512a86924c4a077a5dca7212493a04aa58fa7a9230fa0eba405a7cd22909fd2a4dda66822279fa8a494a6ea21da9e62a43ca65321939e2aa4d6a5f0207c9eeca3a0a58c208e9ea0a360a53c20359e30a316a5bb1fbd9db1a2bca40a1f299d48a269a4891e9a9ce6a114a4ff1d6f9ca7a1a6a3bf1d289c5da142a3651d0b9c2da1e3a2161dfc9bf8a0b1a2d31cfb9be3a072a2be1cdb9bafa00ca2701ccb9ba3a00ba2801c569b47a0d1a1631b00005e81ab045e81101fbe2113243e270e200324a425ae282b200b248a250b298d1f91232225f128eb1efa22f5241d294d1e62229e244a29691da1215c245629091c8d2001237b293b19bf1eee219c294616f01b3120b029cb0e2b164f1d8329d5936793c5193429c398da9ab38e1a291c9b599df399fe28709c499fbb9cdf28e79d96a017a0b528f69ecfa15ba18328e99f9aa288a256282fa0f9a293a31e2874a068a327a4eb27a8a0e4a386a4ad27e1a029a4e3a48c27f3a055a4ffa45c271ca177a444a55a2726a16ea477a5f12639a165a468a590262ca1baa476a6ab2615a2d7a44ea67a26afa119a59da67b2606a1b9a43aa6d525d1a0c9a4a8a6852567a12ca573a7b42507a22da5d4a76125caa160a5bea72e2582a1fea52ea87b251fa1a0a509a8e524b8a03fa58da75a24d6a033a567a70f24c6a026a561a7b5239fa0fca413a7062357a0c6a4afa67822f79f84a459a6f7215e9f4fa414a67221169f2aa4d6a50a21969efaa392a5ac20499e99a345a54f20d69d2aa3f6a4de1fb19de4a2b9a4531f619d9aa28ba4041f379d5da250a48b1eec9cf8a11da4121eae9c9ba1aca3b41d769c2ea115a3361d679ce7a086a2c31c399c93a02ca27f1cf99b48a0c4a1271cc59af19f54a1e51b719a509fe8a01d1a000071144f175110181e702262242a27ea1e4223162548281b1f9623422599280b1f5b232825dc285f1e2a2314252429f91db722d8246b29371dac2135248229201c91206b239229c119271f3b228b292616741c85207529850818164d1d4b29169536962b182a2972991b9c1d950329d09b1e9ece9bdf28139d06a0889eb528fa9d00a194a08e28269f9ea16ca15f28d39f2ba23da227282ea0f5a2fea2f72747a070a3c9a3aa2755a091a34aa458275ea0b0a373a42e2767a0b7a37ba4f2268ea0c7a38aa4c1268da00da4fca47126b1a058a494a5292698a071a4cfa5b12506a1aba42fa68b25d9a0dda478a69a258fa005a5d7a6a025c3a027a51ea79e25fca074a58aa70a2661a039a587a78a2593a027a565a7272520a193a500a83025eea07ea506a8c724a3a05ea5a8a752249fa050a574a7082478a03aa53fa79b234fa002a510a7192312a0e8a4f9a6af22939fa5a4a2a62c22f59e5ea450a6a121b89e31a4f1a52c21679ef8a3aba5c3201e9e82a349a55920899dd4a2dea4e81f489d7fa28aa4491fff9c2aa254a4c51ef19c11a22aa4961ed79cdea108a44f1ebe9caaa1b4a3f51dc09c70a146a3981dbd9c29a1efa2211db89cf8a095a2f11c949cb6a037a2931c1e9c58a0d7a1291c3c9be99f4ca1591a0080cd89a9890e037b1f5c2341259527371fac22f02428285d1e69229e241d28c81ecb22d6247028d71e33232125f128791e1f232b253829af1d5b22b1248329701c2021cf23d22964191d1fda21ea291a15271cf41fca299f88f613d41c84296d96bb983a0f32299b99259d6c9ad828069c399ffb9d9a28369df3a05fa04f28569eeba1b7a11a280b9f84a206a3c527e49f1ba371a3842748a09ba31aa433279ca007a477a4b62682a00aa48ba4532694a00ca4a1a4d025a9a017a4f2a46225b6a029a418a52625cca065a43aa51825f3a080a4a6a53125f9a0b5a4fda51e251aa1d1a457a65c25c7a0aea425a63125dea0cca487a66c25e8a011a52da7ad251ca141a55da7b725e1a04ba55ca78225c1a088a5aca7542597a061a5a6a70125a0a059a595a7bd249fa064a596a78e24cba06fa5aba74324e8a082a5aaa7ea23c0a04fa563a7542331a0e5a4f4a68d22719f91a472a6f521b79e3fa412a643216a9e05a4aca5c3202a9e72a33ca54620f79df4a2d6a4ba1fbb9d81a289a4131f679d21a22ba4731eeb9c96a18ea3bf1d909c44a143a34c1d3c9c0ca1f9a2f61cf69befa0cba2bc1ca59bcaa0aea2a71cb19bc0a086a2641c8c9baaa05ea2791c939b94a00da2481cfc9a79a0f1a1561c1c9b27a062a1a91a00806195fe971e81831def21f02347263a1ed122a524d527c11dec214e249827021e73229f2417281a1eea22ef248c28c31d44230e25f928101dfa22eb241b293c1cf021a6246c292b1ad5200224ba2945183e1f1b22d129110f861a271f642966956d94d315c028a099bb9cba9a0c285e9bd99e329e1e27849c64a0ea9f96264d9dfda0cea01b26049e8fa1a1a12626b49e20a273a23526709fb2a23fa32026ae9f34a300a4d725c89f89a349a49d25f99f8fa364a443251fa0bfa3c2a40b255ba003a4f9a4be246da000a4fda4702494a025a462a525249ea039a489a5e0239fa06ea4c1a5bc23a6a05aa4c2a51424c0a088a4fda5aa24d7a0dca4afa6862554a183a55ca74a2631a1e1a5efa73e26fda003a621a80326bea0d8a517a872259ca08ba5f4a7d5248ba088a5c1a79e245da075a59ea750244ba05ba576a7df2338a00ea501a73e2317a0aea495a69e22d39f65a41ba6f321ab9f2ca4c0a569219d9fc5a364a5da208a9f4ca318a554203c9fe9a2cda4ef1f8b9e73a269a42b1f019eeda124a4721e6b9d92a1c8a30f1ecc9c5ca161a3b51d7a9c21a118a3671d4b9c01a1eda2091d1d9ccea08ea2b81c239ca4a051a2811c179c90a031a2891c049c70a0f0a14e1ce49b67a0fba1521c529b29a0aaa1671a0080b68d498f1611511d9420c522df25671d3c21692361263a1d18216c231327831de1214d24d3275b1df72165242e28c41ccd21362474287f1cc7211d24bb282a1cc82146243c29271c7d22d2240e2a521ac92180247c2a92143f1ea821fd29b694fc8eb319f7285d9aa89d1e9d4927a79cdaa03da1cd25c19d3aa2a2a2ec243e9e96a24da33c24b99eeba258a3fb23b79e2ea3dda3d923f29e44a310a497237d9f8fa348a48f2302a0e4a387a492232ea014a4b8a4d62340a008a4e4a4c0234ca02ea40ea5062428a01fa436a54f2324a017a430a5f22229a018a43ba5a52245a0f6a348a5062371a008a450a50824a9a030a4c3a5d22464a102a5dfa6c725e1a10ba60aa87b2685a182a65da8a426cfa072a667a85426e4a01da632a8b8250aa1d6a5f2a73725d7a091a575a7c12483a022a5e1a633242aa0b0a455a61423b29f73a406a63a223e9f3ba4d6a5a921ef9ee2a37ba51b21829e46a3f9a4a720279ebaa297a41620f09d49a26aa47a1fc69d0ea242a4f91e829df3a12ca4a01e3e9dcaa114a45f1edd9c93a1daa3011e969c63a199a3ac1d599c32a13ba3791d2c9ce3a0b9a2081dd59b93a055a2a81c769b60a0f5a15a1c319b3da0cea1431c189b1fa0a2a1331ceb9a42a0e0a1631cad9a0da064a1ff1a0080be8d058edc8c4c1d7d205a224725d81cdf200023c426c61cce20fd220c27c41cca20d8222e27cd1cd520f12283276f1cdc205723d627e31b7320ec22ff27241b9420d92264287f1c02226324a029961c8c238f25f32a451b4423ad25b52bd310591d01219229469b7ca052a03b25f99edea4b7a57920619fbba45aa57b1fb79ed5a376a46520789e32a315a46320d09ea0a297a30221869eada258a320219a9e7fa291a3fd20ac9e9ea2dfa3da20459ea2a2cea34620f79e9fa2a5a3f21fb39e12a274a3371e999e8da1b9a2801c449ed0a01fa29719189e68a098a18816bd9ec5a078a2f3189f9fd7a14ea3291f3ea07ca304a5512415a1a7a534a7fe26fca186a7dea84b2821a202a846a93c28d1a161a704a96127e5a151a648a81e267da198a599a72e2562a0cba48da62f243ba072a405a64c230ca03aa4cca5a422bf9f0fa493a5ff219a9fc5a35ca57721209f67a323a50c21db9e2ca305a5a520659ef7a2d9a45f201e9ebda2bba418208a9d64a26ca4841ffb9cd6a110a4951e949c55a158a3e21d2f9ce1a0caa2431dfe9baca07ba2ed1caa9b8aa055a2c91c739b73a03ea2961c159b46a014a25a1cc99a21a0afa11b1c829ad99f69a1e61b719a669f0ea1431bd899179fdaa0691b0599519e41a0a0193d84f293fc925b826f1c9f1f1421ee24c01c2b20f5211c26f31c1c20f4214f269a1c881f87216326261b381ea2208f267119f51cc91f7f263318981bd31e9226db140519371d6326d412d816c81b7e26920c0d1364197227f18ec80e681b0d2c309c33a18a95d62c2ba03fa6d0a4a6a5f99e31a5f0a433a7789c13a3cda31599e19b2ea1f3a12b20bd9bc8a06fa1d022739d17a1f3a1ff230e9e63a22ca37924ef9eb2a274a34224149fc8a2e1a3d323f29e65a23aa32f23ec9e4aa239a3e121589e68a1bba24e20599d73a05ca1401ace9cf29f9fa07b95a49cb79dd49f0f9fe89ce79c8e9e20a45a9e0c9e0aa0dfa206a278a395a47b20efa241a815a93b29ffa39fa85daaf129cea47aa717a92128f9a0b5a5b8a7b5250ea08aa44ea66724689f54a403a60224db9f77a4e1a58e23d29f35a48da5b322279ffea386a52b220d9f9aa359a59721ae9e21a3fea41421599ebca2bca490204c9e79a27ca43f20169e39a24fa4bf1fda9df5a126a42e1f7d9da3a1f1a3a71e439d6ca192a32f1efd9c30a122a3b91dab9ce5a0bfa2661d7f9cb7a083a2161d569c8ca041a2cc1c439c74a015a2971cdf9b51a0eea1581c929b3ba0d1a1271c299b08a09ca1011cb19aa39f71a1671b379a559f21a1611b3f99309e22a0ab1900809583f5008d0d001c7c1f06217624661c591f482171253a1c281f4c219225bc1bb41ede20a425ad1aab1d3420a2254219531c171f9e2505185e1ba91e5b2567164b1ad91d1825ff146a18891c9b23460f1a14ec187e1f2f010b0a92119c181d8271886e0b8018e98ea6926e8c951e459610994f978923b899b19c849b6125eb9aa59d809d9a25f59be09e2d9f99257c9c04a05ea0aa25099d88a006a1d225db9d23a1a8a1b425509e48a1f5a15225109f09a228a39125419f06a20aa42e25229ef5a10ea4ac24cd9caca15ea33424bd996fa12da41b23079b15a404a61225da9f61a73da8f8272ea3d0a754a8bb2503a3bda716a84e227ea54fab22ac872c809eeda80aaa6c29769d76a429a632249e9e2ba298a41222de9dfea180a472213d9e6da2b5a48e214b9e52a2b1a41f21e89e6ca290a4f720d19e80a2a3a4dd20bc9e6ea2a2a48120aa9e5fa28ba45220319e36a273a41320ac9deaa131a4801f6c9dcda114a4051f649d96a1e2a3891e719d45a184a3081e519d19a13ea3a21d069db8a0a1a21a1da29c5fa00fa29d1c999c39a0daa1671c999c25a0b6a1531c9d9c15a0c0a1291c649c0ea0aaa1211c209c02a08ca1f71b8e9be19f67a1d51b1c9b989f34a18d1bba9a5b9f11a1ae1b159a4c9e21a0371900005b03a509ea0c481b591e89205524e81be11e0d219e24921bd91e2321b324e51a3f1ec620c024d819731d3f20a824b1181c1c0f1f942418177b19841d4224f7144d16c01b1623d81057105518d820b706a9036e13611f7b8909908e0c84213f919a95669171247595439a93988c2531983c9c149cbb25ce99a59d829daf25f69a549eef9eac25a79b4c9fee9f8d25599c08a076a09325989c5ba0eba06d25f89ca2a092a14d252f9de9a0bea11b259d9d23a118a2de24ec9d47a19aa2a524709eb1a1f9a28b247b9eb1a1fda25b248f9ec6a129a32324549ed7a14ca3ae232d9edca1a2a31123af9cd0a039a22c21f497bd9c7a9e771cf28e329443988315e68d7d91e59662133b98bf99299d1f1a0c9c479e82a0fc1e239dc2a0c1a23520819d49a17fa35e20419d5aa19aa346205a9d7ea1f4a32c20a49da5a119a41420c29da7a103a4c71f879d57a198a33e1f3c9d20a144a3dc1ee39cf7a00ea36b1ef59ce0a0f5a2161e079dd1a0c5a2db1d049db8a093a28a1de89ca1a07fa2511dd59c86a05aa2041da09c7ea039a2eb1c659c69a02ba2b71c429c61a017a29f1c559c49a0fba1861c479c2ba0d0a13e1c169c10a096a10a1ccb9bb09f46a1a31b659b4b9ffaa0121bbe9a009fe3a0df1ac29abb9e7fa0a11900001b1053140c04511c971f0721fc23d81b2820ba2124251f1b551ea920a024db195e1df41f6224f6187a1cb71e2924f317af1a8e1dd12319153518c11b43230d11a31366188e22960c990b9415fa21db02fc85dd122823f98bfc91c50e24241c914896cb8fbe242295cf991f984a25b0970f9c2d9aad25e3981e9d8b9cc725cf99ba9de59db025699a959eaa9e7925579b119fc49f3925e09b759f2fa0f024469c11a080a0ad24989c3da0ffa06a24e49c8fa049a14124039db3a0aea112243a9dd0a0e3a1c4234d9d0ca139a28a23839d24a18aa25223d59d5fa1d9a206231d9eaca14ca3ef22229eaca126a3a522b49d1aa190a2d9216b9c50a09fa1c520529a009ff1a07e1fcc99319e65a0141eda99299e72a0931d6f9a019e6ba04a1d8e9b969ee9a07a1d349c149f39a1ac1d939ca29f9ca1ce1d789c21a00aa2e11d689c58a046a2fe1d9a9c82a076a22b1ebb9cb6a0cea22b1ed89cdaa0fda2e01dba9cb9a0c1a2b81d769c97a08ea25c1d6a9c74a052a2221d4f9c43a01da2cd1c3a9c2ca0f4a1a31c1c9c1fa0c7a16a1c1f9c03a0aca14c1c199c02a0a7a1231cfc9bff9faba1131c5b9bd89f72a1b31b319b9d9f49a1481b0a9b349ffca0b61ac99aab9ebba00c1aab9ab29e94a0001a7d9c119e4f9fd0184b24d2190a1b571df429381e89213125072c4a20bb202927ce2c721e6f204526042d451e00203e27022d961e4f1f1e28b92cec1d7f1ede25722cc61c3e1db521012c251cf91c1f1e562ad01b9c1c381cfe28981f89203f19282ace28582b5c1c2027b21e07255a24d5a4c0aaf4a7b1222194ef9fed27b21c3120b28eb22a6515bd1e9b147b2c7419dca2c3141d2ee61f16a65099b32c342335a649a0d99f4b23f69ddd974913f110a996ca91c0194991cd9ad8956215d895979a8397371bbe95c999a195f41aa1952f991596671a45957c99f1970c1af197799a4e987518ca976c9cab9abc15169a4b9c969810109591bf988b98429dff19af98019929a5931c9298929cd5a8891f109b3da1c1a9ad22d29b83a3dda81d24fa9d5da6b1a93125ba9f1aa64ea81f24169d7ca37da51f21019d56a20ba43520109cd7a15ea38a1fc09c03a28ba3a71fee9ca3a162a32d1fcb9c8da135a3f71e349c6fa12aa3bb1e309c74a132a3831e0c9c4aa10fa3041eba9b0ca1aea29b1d569bd1a058a2481d719bb9a016a2fe1c719bb7a010a2cd1c719ba3a0eba19c1ce39a89a0cca1731c849a4ca05ea11c1cbc99b59fd1a02e1b8199819fafa0fd1a9b99839fa5a0ba1a86993a9f78a04c1afc98179f8da0e7198699219f7ea0411ae995f0070e0ec90f2828b41f71232e26eb2b63210e23ff27fe2c8a207f21bc26ea2dc3215623a628072e64218b229528a82d0220f520e525322d4b1e27201921b52cbe1e23201b1d092c3722df23bd193e2b812678282715252bb0299f2b0e9c64285391651cfd179324d6a955a98f212b9446a6d8959d1aa513b19e74299e1527a3c598e72d6e1c85a5a59a5d2e41232fa747a0ce2dd52638a7efa1892acd25579f0e9a8f2aa20d7b9d369a4b2b8e98939eef98832b4c98ac9e7a90652acb94119ff6928029a596139eb49446287c99a79cdf908d26709ae79a7e925c25df98149b53977222809b49994395901df4846d945294e3a0911e25930b98a6a62c211b980e9d14aa2322219b29a128ab6e24029cb3a23da97a23649d05a414a81a21269fcaa470a7c120dc9ebfa4dea61d21da9d11a4a3a5c520499d2ba3dba44d20be9dd9a296a41c20569ecfa287a41f20609d52a232a48c1fb59c13a206a4111fa89ce6a1e4a3dd1e579cc7a1bea38d1e3a9c99a16da3341e189c79a133a3fd1d119c55a1e0a2a11d029c2ba1cca2751de99b0da190a2251d929bdca036a2f31c289ba6a0e8a19e1cbc9a82a0c3a1511c749a58a088a10e1c359a1fa030a1ca1bf399dc9ff2a00a1b5e99769fb8a0c41a2699749e20a04719f216aa149a154514d02585213524f6267929472285232528252c142298231428892dff218c234928352ed32184237d28382e38213b237627d72d4121cb22ed25512d78216d235124c02c30224a24f222392c752334250d221e2b382446267021de28b48eae1ca821fa2435a549a408221420d7a501a21e2119a009a3f622c9200da4859ba42c022469a52e9f5a2e0a269ca693a1c92ebe2772a66aa2002e3b2772a0cc9cf42d851e6b9979940e2e4e1ab3987095542d7c1afd9b7b96482d6719bb9afd96442c3b187f9cd099532bfc14069dfa992e292816359b579bbe27ce1552995a9c6e238e156397c099e81ea318b095ff9902a4701fef98df9f7fa913246a9c45a2f0ab42240b9c67a392abc223829d77a46ea97c23af9f30a5f1a83d23c19f5ca56aa86f22d59ef4a4a2a71522259e3ea444a65f21419e00a4c7a5ff20349e04a4a6a5f220cf9d94a358a59b20af9d4fa3fea46320e39cb1a2a7a4dc1fa79c5fa261a4631f339cf0a106a4a51e089caba17ba3201e909b4fa11ea3bd1daa9b2ba1cda2641d8a9b05a18aa22c1d819be6a064a2ee1c3c9bcfa02fa2aa1c3c9bbba00aa2961c7f9a88a0caa1491c6b9a5ca081a1111c6a9a58a074a10e1c669a4da066a1d11b83992ea065a1e61b2e9a10a055a1b71a5b04b5036b05ba0f25227e21652374269e266a22b8231628de2914227e232c28752c2222c2237028c32d9d21fc229d285e2e3121c42270282f2ef1205222ec27ca2d05211023da26422d13213b237326bc2ccf20612320269b2bc11ee222d726a728ef9c09907f270b264da334a30b27092387a40ea4d4264da0bea3921ff726ffa486a23e29e62774a625a3082d022834a661a4a32ecd280ba585a4172fa22877a401a40c2ff127eca034a3442e6c2693a0e4a2762ddf2544a196a3e12c492668a0c2a2352c5d25cd9f6aa3292ba225c29eb3a3e0285f25be9f26a3c4240625da9fe6a2d096cb246e9db4a25aa6b1242a9e33a315a90a25ed9d17a4a4ab55251aa0a9a4b5ac69254c9fd1a4a9ab0425079fc8a4f9a85524ff9f41a5bda81b2411a07ca580a8ac2340a06ea53aa8e922499fe3a454a7f821a49e8ca4a5a669211c9e31a4fea5ec204a9d72a338a55f208b9d4ba303a53a205c9d34a3f7a40820019deda2baa4a81fc19c89a26ca4231f949c2da22aa4831e269ceba107a42a1e539cdfa1b8a3e81d609ccba196a3d41d489c9aa14ba3801df99b50a1d5a2381d949b08a170a2f21cea9ab3a01ba28f1cab9a8da0d2a14e1c9f9a77a0c1a1471cbc9a59a068a1e81bb399e89f30a1751b189aba9f0aa1bb1a0000460492066d01ce20ef212224652703232822bf234928022754221624a428cb293c220624c9287b2c1b22cb234429a02d8521f4220a29f22ddd20c622a228fb2dc5205423bb28bc2d5e20dc22a1281d2d811f6e22c5282c2c0b1a901fa9288529799acd151429b62584a19ca0ce28b020dda26ea18a280da488a3249c9d28e8a58aa3e221f62860a604a3612ae3285fa55aa4072e7629f1a34ea4672f062956a46ba47b2fd128f3a28aa4c52e7028cea136a41e2ee0277ca272a4862df32756a1c0a39d2cd226bca0dda3132cbb2679a0d8a3122a6e26c9a129a476275f2669a130a4eb964e262ea023a46ca706264aa019a43aaadd251fa0caa484ac672686a0e5a4e8acc125849ebba4efaad2245d9ff7a4bba8732462a031a58ba81c247ca066a568a8a523c1a02ba515a8c6227ca0dba46ea71c2200a0b5a4dca6a621b39f69a444a63921539f2ea4f8a5e420de9e1ba4c9a5be20439ea2a366a56820c59d3fa30ba50b20439dd1a2c0a45a1f339dada28ea41e1fe89c57a24fa49b1ec79c2aa219a4591eaf9ce9a1f1a3f21db49caba186a3b31d7d9c4ca1e5a2341d479cf8a07da2e11c049cada01ca2891c7c9b94a0fda1551cce9a6da0dca13d1c5d9a4ea09ca1d31bae9929a076a1741be999ae9ffaa0511a0000db096a0bac011d20a0226324a427a5207623cf24c928fd23d52339250e29652635232a25d528672998226a2432290b2c6b214a2312294d2d082105234529d82d9420bc224829f72db81f1122c128282d081ea1211e29322cdd15c41ea728fd29df9a2b18f528fa2602a0169a1729651e08a1509d2829dfa108a2a69c8e29bfa5a7a21a10112930a5b4a34c245e2961a467a4ea2b2329a1a27fa4aa2ee72823a4bca4ee2fec2813a36ba4592fac2873a294a4b02e5728e0a2ada46e2e6e28a9a10ba4952d5427c3a155a4952c8127cea137a46d2a2e27a9a288a4132631270ba2b8a46097de26e3a0c3a4f6a67b26eaa0faa4b1aa5926a6a0bfa528ad9826d4a0e2a565ad1d26a29f85a586aa392566a05da5b7a8a424ffa0b1a594a87524a8a091a558a8ff2355a050a525a84f2334a022a5e3a7c62262a00da5a3a75b22c49f97a4e3a6b3217f9e21a41da61021199efda3bea5ac20399d8ea378a55d204c9d61a33aa51f201e9d0da3eca49c1ff69ca3a2a1a4001fbb9c58a250a49d1ea39c00a213a41c1e679cb1a1a6a3b91d459c70a141a3781dfd9b3aa1f4a2231dba9b21a1caa20a1d819b06a189a2d11c4d9bdea059a29b1c049bb7a01ba2591cc79a8fa0cea1181c509a57a096a1c61baa9a1ba036a1431b00000d08b7090d08db1fe32294248f27be2017246f25f5285c212624c6254c2940221e2300250c29f32467226f241a29a628a02117246529622b9c21d523b829af2cd020a523c829402d1b20e622ca29d12ca51dbf21af290f2cfd16f11fe529d8293497491cfd29b4262c9cfb0e4129a61aeb9fa598302910a2ffa1c79d1d29dda3bda2299e3629bca31ea395165729a0a214a497277a296ba257a4e12cb82843a360a4ff2f8c2812a36aa4f92fba280fa351a4572f3828ada3d1a4552f812878a26aa43a2ee5272ba2e3a4862d4d28f0a1bea4bc2b2d286da29ea42628a727c1a2b7a4df1d9b2794a1aea461a6c326fda2d1a44cab5e2697a12ea573ad292651a1fba4e1ac462577a031a586a90125d9a079a5b4a8a824c1a0dca5b7a884243ea07aa54fa8eb236ea05aa530a869237aa026a5e0a7b4223ba0e2a471a73022d49fc3a414a7d621a19f99a4a3a67f21a19f67a455a63221089f31a4f9a5c820e49e04a4a5a58720479e8ba34fa51c20229e59a30da5ea1f9a9d09a3d1a4531f649dc7a29ba4e51e5b9d9ba27ca4a51e339d43a23ea44d1eb09cd3a1e9a3b91d4e9c71a13da3591db29b15a1a5a2c21c799bd1a056a2731c429bb1a022a2631c009b8ca0eda1311c329a76a0cba1cc1be599b69f0ba1271a0000c70662075b01eb1fe02291240e28de2057248f251f297c215a24db2585295b21f123952574293d2180231c258f291424de22d824072af426bd2136243e2af4285d20ba22e8293c2a751e6e21e229cb2a851b42206329142a95169c1e0c2a2a281c94271c1f2afb23959c9a0e7629f391209f1f9a75299fa0f4a0ee9ca2294aa157a2499ef5295ba1fba2ef9e90295aa38aa35310a82973a371a499279d2870a279a4f32d402878a2aca43630ef288da252a43a305a284ea4a6a403307a2867a3fba42b2f742878a203a5172e69281ea34aa55b2c5628a2a2d7a4e3287b27eba1d2a4241ef626f1a013a5c0a59826e2a01ba57cab3426fca0f4a5e1ad8b2684a194a567acca2513a140a583a8102579a28ba55ca8cf2461a1e3a5ada8c62407a178a541a82724d0a02da5eba785235da00ca585a7fd2243a031a5d0a7da2214a038a5cba7b4229f9fdda428a7f621149f7ea494a65f21679e2aa4f4a5d020d89db4a361a54020299d2ca322a5bc1f1d9d08a3e7a43d1f0b9dd7a2bea4f61efb9c8da27ea4831ea99c33a249a42a1e839cf4a109a4b61d529ca2a1a0a3471d0d9c60a13ea3091d999b21a1e7a2af1c6e9bf3a09fa2931c429bdca063a27e1c429bb8a037a24d1cb29aa1a01aa2531c419a1ca086a1131b000026083c0aa9810620e023242503288e209c249126d028f620d724b62663290f216f242526872906210c24ae25ba2908212323f124c629682115228c24f9294623e9205c23372aa9243e1ff722982a2125891c45217f2a2725f813871f1a2af322dd96181c392a6b1cb99cf30ea0297299a59fee9977296e9eb4a0ac9c6d291fa07ea2a39f302a1ba1d1a31aa1c829f5a24fa428a09129c4a206a4679634297da4d6a3c9287b2868a3cfa4982eeb28e0a2d6a4ca3085286ea30aa492301328b7a132a42030b327dca27aa40e2fd92770a2aba4a22df427b3a491a4b62a3f27d7a189a4a423b72689a15da50ea6f826cfa083a52eacb92621a276a5a6ad202697a014a549aa4625faa04ba54aa803253da183a50ea8c8249fa0caa55fa8b22487a098a547a83f247ea07da532a8d1237ba074a522a87223b5a08da53aa8212354a037a5cba76422e29ff7a462a7ee21799fe0a433a79121169f9fa4b6a63521df9e70a43da6e3208b9e1ba4d9a55e207f9ea0a350a5f01ff49d20a3eca42b1fc39db6a295a4c01e539d52a24ba4361ef89cfda10da4e21d789cb7a1bfa37c1d299c7ba15da3221df49b3ca107a3d61c029c1aa1d4a2981ccb9be6a090a2691cb49baca01ea2091c039caaa0dfa1171c599b38a0bca1011b00003a101311770eba1e8d2264242b27f320492414262229e620562419266029c7203a24f325a0298c20d223b025de295820cc220d25092a43203a228824302a3720ea2049234d2a1e20b51ea721452ac91ece1b3e20be29a21d3513331eab29901a6f96c21be929198ccc9c3215cc291f9c949f6995e429cb9dd5a0929ae029769fb5a1119eaa29efa0eca205a1c92993a2c9a372a29729eba237a483a31829d9a1dea447a0b128daa29da4da29a6288da25aa55030dd28e9a12aa40d312128afa207a4a830dd2782a18fa40230c427b7a103a54f2ed22708a264a5e62bd8271ca2cba51e24d72743a1bea578a8212777a4cba563adc026eca2bfa555ad3126cca0a0a5e4a8bb25cba017a518a8d224e0a058a525a8cb24c0a0ada55ca8c1245ea1a1a527a8692436a1a7a533a83a24e7a0d4a548a81824d9a0c9a53fa8a223b0a049a5dba79022a7a0d0a420a7d32156a0a4a4c7a67a21ca9f7ca492a62a21689f60a443a6d120ca9e3ca406a66820859e22a4c2a54020199efaa37ea5ee1f239e9ba32fa5631ff19d39a3dea4f01ecc9dcfa29fa48a1e489d54a241a4f01df69cd4a1eea3651d869c7ea174a3f51c779c5ea130a3b91c519c36a1eea2a31c0f9cfaa06ba2331cc09ab9a01ea2091cf79a76a00ba2d41b00000b0a4b0b2e8503200a240a251028ab204324f8250d29eb203e24da256129a420fb239925a82941203d231c25d6296e1f1c229f24ee29a61e73212324ed29a91d95200923482a651cbc1efc204b2a8c192e1cc71e262a6015d213411d262a0d8add93c119052a2698339c9e0eda296e9cc79e5798c529269fdda0eb9dea2975a0e9a148a08d29f7a096a23ea16b29b2a199a3e5a16029aea200a4d3a223292ca20ea402a32029dda1a4a4799f662891a243a4c82a192837a207a5b2305b28bca15ca5253191283ca2fda4653011289aa37ba57b2f2a28b9a14ea50b2db927a9a12ba5ef27092706a21aa611a89c27e1a046a529ad2e2633a145a534abce25b6a257a563a757256da1bea56fa858256ca23ea6dca86b253da1f7a57ba8ee24a6a1eaa590a8a624f0a0bca540a83a249ba0a2a524a809247ea094a517a8832335a017a577a78922a29fc4a4f4a6e421359fb8a4c5a6b021069f95a4a4a64721f59e6aa46fa60621da9e42a412a6a220ac9e05a4a7a53b20729eada364a5cf1f7f9e7ba333a5701f569e47a3ffa4271fe99deca2b2a4a61e559d89a26da4211ed99c4ca246a4c31d529cd5a1e4a3441df49b2ea1f9a29d1cc09be3a074a2491c789bc3a01ea2101c3b9bd1a02ca22d1c629bb2a087a24a1c00004604350846849c1ff1236125fd27e6203624a1251b29eb202f24ba253e29df201c24bd255729ab20d7239b259d29ce1f01234525e5293c1e1d22c924012aca1cef2040243f2a461a681f15223d2a3017c51ac61ee32981125f133f1ccc29f4924c960218c9295a99209c8b8ec129359df39e189aea298b9fb9a09a9ea829c0a00da2b7a09a29b0a106a333a26e29e4a1e3a332a34529d3a12da400a4292912a271a42fa40729a9a18ca43ea4bc2833a2dba460a1872899a00aa5ec295d2851a1d5a5a0306528c6a1c6a5f2308128f9a11ca52830d52785a159a5572ed82711a238a5922955271fa48fa503a86e2740a1a6a537aceb26e0a085a5d9a817261ba167a523a8822575a16aa511a81e25bfa062a505a8d3241aa1b0a540a8d824d1a1caa536a89a242ca1cda52fa85224b1a0aba533a80a2488a08da52ca894232ca024a5bca7b1228c9fd1a428a71c220a9f98a4b5a68f21a89e5ca44ca609219a9e2ca4f7a59a208f9e02a4bea53920a99eb4a374a50320819e73a34ea57f1f589e29a3ffa4f51e119ed5a2caa47b1ed79d8ba283a4231e509d3da245a4b51df49ce7a100a4671d869c9da1a9a3321d569c6ea153a3e71c119c3ca1f2a2c71ce39b20a193a2821c7a9b00a184a2661cb39bd4a0b4a2181b0000390478050987e21ef222b524b7271a20c3236825f228de20752414267e29be2046240026b029412084236125d829611f7522bb24fe29251e312125240c2a7b1ca21ffb22112a341aab1c25211c2ab5147718341f1a2a6b892c8dc61bf0297597e6994515dc29649adc9c3e95a129229d6f9fe89b7429979eeaa0919e4529ca9fcda19ba022296ba0b8a2f3a1f628b3a0fda277a2ee2834a100a4cfa3e72880a18ca49ba4bd281ca222a5b0a5802897a198a566a68328fea115a5c5a4122884a07fa4a027f42776a0d3a36e2f3f27a8a10aa47a30c626cba4a4a4482ffe26b0a12aa5b728dd2694a11ca652a93627119ec9a46ba9852555a0c1a454a6252525a14ba5e2a74b251ba1cea531a8962524a33fa684a8b22508a48da519a8b624eda15aa51fa8532474a26fa514a821247aa15ea5a4a7a523d3a032a571a7182380a009a554a78f224ba0f6a42aa7362244a0c1a4e3a6cc2117a08aa472a65721b49f5ba42ea6e620819f33a4fca59120339f19a4c0a55020cb9ed5a37ca5f71f259e80a331a58b1fd99d1ba3dea4fc1e8b9db3a291a4961e079d26a235a4e81d999ccba1f1a36f1d509c6ea16ea3061d459c51a12ba3cd1c3e9c2fa1f9a2bc1c239cf7a09aa24e1c389b9aa01ba2f31b589c4fa081a17a1a0000ad01880508850b1f5f23d624df2749204a24ef25e028aa2060240c262f2992201c24cd25672909208f236325ab29741e5422d224df294b1d77215624df29601c7f20f423022a021a281e2c221e2a09169c186c1f222a85895e8de81c152a3396d6989318172a6b9a7e9c8895eb296a9c439f269caa29909de0a0bd9f56290e9fb3a12da1022922a0e7a27fa2c6288da0a4a3a8a39028cba009a4dea3602815a11da456a43a2818a14ea48aa40d281ea177a41ea5de27a3a201a557a6af2770a2e2a53da6f72741a102a50c9a11279ca093a49d255426cca194a4ef24832650a4caa473a2a1265ea00ca548a84b26c9a0e2a495a68a25c6a0fea408a76a2587a174a5f6a75a25e9a16ea5e8a70825e0a18da50ba8f62493a105a658a81c2559a10ea67ba8e5240ba1d6a546a88024d7a0cba52aa8202496a084a5e9a789232ba02fa56aa7cc2202a008a53ba76d22629ff5a404a7fa21209fc2a4b7a69821db9e86a460a61621b39e44a419a6a420b99e0ea4c5a55c207d9ea7a359a5f61f3b9e2ea306a54e1fb09dc2a2ada4a51e059d56a269a43a1eb69c12a227a4d51d679cc5a1f0a39b1d4c9c75a189a33c1d309c43a12ea3ed1c319c21a1aca2af1c0f9ce1a040a23b1ca59bbba036a2431ca59b73a01ea2641b0000ec83f681ec031820bc229524be275c208f241f260c2991202d24c3252529482009247a251729ba1f732320254629db1ee822f6248529b31de721612494293f1cc120cb23ca29d219cc1eb521de29a315561b2820e1290109640de71caf29ae95bd9869158a29fb99139d74955e29379c0e9f1b9c2a29659d7ea0db9e0929a39e71a1c7a0d3280ba0bea294a2a52899a099a367a37d28caa0e1a3f6a33628c4a0c9a335a4dc2726a126a495a4a52759a192a40ba59f27e9a1bba47ca57f277ca1baa4a7a5202741a156a49aa59b26c9a11da554a5302740a124a522a5a62628a09da4b5a5cf2575a09ea401a66b2551a130a554a6ec25a7a29aa5eea71a2675a3e0a5a4a7e025c1a360a556a71025bda1a6a513a8f0244fa136a668a8262566a1e1a52aa8bb241aa172a5c2a72e2433a15fa5a3a7c32330a15da591a75223d7a039a562a7d9228da010a507a7622234a0cfa4cca6ea21cf9f94a479a67f218e9f5fa42ba61421f49e30a4d3a5a720a59ef0a37ea54420139e70a322a5bc1fcd9d1ea3dca4511f819dcaa299a4d41e499d6ca260a4501ee99c0ca216a4cf1da79cb8a1b8a37e1d669c55a12ba30f1d4b9c07a1b1a2b51c239cada04ea27b1ccb9b6ea0e1a10a1cec9a08a063a16c1b7d9a4d9ff4a0a4194615b81ab21ca718681fe0232f25bd27bd1f292494258e28f61f2924d225da288a1f0e24b9252c29111fe4239c2577298c1efa221025a429861deb216f24bd29071c6b206323d329cf199b1e9b21b4298315d71912208f29468f4a8de41b6a29de97099a258f3d295b9ab99d529a1729629c38a0e59df0289a9d32a14da0bc28dd9ecfa12fa18628bc9f6da20ea253283da0f6a2d7a22b288aa06fa3ffa3d427a1a0e7a331a4842793a006a45fa45c2783a00ca487a4fd26c0a0e6a39fa4d226e0a0cfa3c4a4be2632a1e8a3f8a43b2606a281a4b9a5fc253ea1aea4dba5e72577a1f1a4fda5c72578a167a5c4a6d5258ea135a5dea65725f7a03fa51fa71f25d0a080a5a4a7422595a033a59ba7fc2410a14ba582a7fc2489a1a2a51ea807254aa1c0a51ea8b524f2a0bea514a84624eea096a5c3a7d82391a06aa59fa7262357a04ca586a7b82231a027a543a74922e99feaa403a7d9215f9fa2a497a68f21e39e60a432a60521819e20a4d7a5ae20609ecba376a54820e89d24a315a5ad1fb29dcaa2b8a4371f4d9d62a279a4a41e389d3ba246a4451e349dffa11ea41a1e1b9dcfa1e3a3c71d0f9d95a174a36c1d029d48a115a3f21ce99c12a1aea2c01cd99cd4a05da2591c299c8fa010a20c1c659b28a0aba1971a00806b90d2925507a91e4c2294243d27f01e0a23c224e927511f3223f7245528611f7f234325ba28511f10248c253829271f832361257f29fa1db822b624c9297e1c59211524f42925192c1f8b21ef292612f018fd1db02942925194bb185929bb98f29bc19503293c9bd99e499dbb28cc9ccea012a09528b49dcfa17ba15b28db9e6da2d5a23628a69f59a3a5a30f2865a089a3fca3c9278ea0faa358a43f27d8a02fa478a4de26dea02ca48ba44c26e5a02ca4d9a4c825e1a037a4e9a4382503a152a412a5e32430a175a465a5e224d7a1aea4eda5d22457a1b8a4dfa5952430a267a45ba6892466a17aa40ea67a24c2a09ba435a67b24dfa0c2a4fda6a224aba127a545a7ca2423a160a563a7072546a1b0a508a8062522a1f0a530a8e82403a1c7a51ea8a224e8a0a3a500a8652403a1c0a50fa83d24fca0cca514a8f723eea0b4a502a86e2368a048a57ba7b622f79fd4a4eca6f1213c9f81a46fa64c21ec9e45a407a6cd20839eeda396a55020779e76a330a5d91f389e10a3e7a42f1fd89d9fa28ca4951e809d28a240a4fb1d029db9a1faa36e1d8a9c70a1a0a3091d3e9c51a158a3ec1c1d9c19a123a3a81c129c02a1caa2751cf09bdca08ea2611cc59bc8a02ea2151cfa9a8aa015a2131c0a9b51a0e6a1ed1a00805a943196cc03c31d26223d249626851e9a23fa243828991ed522cb240c28ab1e172324255728da1ebc236c25e928651e082488254129a31d96234e257a29861c5422f324cd295b1a8b20d923f329af15f51cc0206329a88f258e0c19c1281b982f9c01993b28739a0f9f589e8627159c84a00aa0f426259d03a147a1a726d29de3a110a2a526899e74a26ca2de26fb9e00a33aa3c226bc9f3ea305a4ae261aa0b1a329a45b262fa0aca36ea4f12550a0f1a386a46a2572a0dba3b0a41225afa011a4e5a4c824f0a011a41ba55a2409a138a452a5de2338a16aa4bfa5ab236aa183a4bba54f2326a15ca4bca556232da146a4b6a53123f7a073a4eea52d2451a1e3a4b9a628254aa19da5c9a7be255aa15da660a8de2514a13aa651a85925c7a0d2a51ca8af24daa0cba509a86624d5a0d4a5f1a7242481a0b4a5efa7d4235fa06ca599a7402347a00fa519a7af2223a0bda4a3a6fd21f09f75a448a66421ee9f21a4d2a5d620f59fa9a36aa55920f49f32a314a5d41f819fb0a2b4a41e1f019f4ca25ca4a01e749efba126a4281e8e9dc3a1ffa3cc1d069d83a1b6a37b1da39c52a167a32a1d669c13a1e8a2ce1c4c9cdfa09ea2701c539cc9a062a25c1c2d9c9da019a2181c0c9c8da018a2161c599b3ca0a1a13d1a00804d8bbb8aab11bf1e492148233126a41dd8210a249626f51d27226b24da27711ea922e6245428311ef02220259928981d2c232b250429471d2223fd246a29011d73236b25402a3b1c5f234c25862a91182d202a23e12938937395ba10b628a29a33a0829ff626d19c26a26ba29e25a49db8a235a331254e9e02a350a36625639eb5a239a33f25759eeaa22da31125b99ef3a251a3dd24319f1ea305a4c524ea9f49a331a4af243ba094a364a488244aa0d5a390a45c246da0bfa3bfa42a2464a002a4eda4282435a0dba3d9a4922324a0b1a3f5a44b2230a0c8a300a5cd213aa0b4a324a561214fa0e3a341a5812187a00ea469a5f721b8a044a4e8a59b232ea141a530a7f124b1a15ba663a80f26b3a1b6a6bda8502663a18ea678a8e2254ca13ba647a8442547a11ea623a8de24f8a0c8a5c8a76824b5a04da534a7782358a0e3a4a8a67e22b69f8ba44ca6c521519f4ba4e5a53721e89efca37ea5b220909e46a30ea530202a9eb4a2ada4a11f069e54a277a4e51ebb9d25a255a49f1e899df6a138a4341e149db2a109a4cc1dc89c89a1c5a3a21d809c5ea16ca3561d489c16a1fca2f01c039cb8a074a2861c749b72a01ca2341c2a9b4fa0e4a1201c3e9b47a0bba1fc1bd59a4ba0e0a1291c819a35a0c7a1ca1a0080cd90d9908d89221dea20c222c725ca1d64213623e126f61c072145230b27b81c5021c2238527f91c772118240028051d9f2131243728e01cb4213c246228f51c312322256429a51e2c253327402bda1c4324a0265c2be2900c91fc1806281d9d56a48ea4951e079f95a562a6761d619e6ea458a52220e29dcba2a7a3cb22929d00a278a25124ca9deea176a27b242c9ebca158a25524aa9ee2a185a21e24f89e02a234a3cc231e9f41a2b0a37b23829f87a28ba3c422b09fa7a2daa36b22db9f98a2e7a3e7212aa04da203a45a210da0eca187a33b203c9fb8a03fa25b1d439e15a0a9a1e217349e57a0eba1b713179e60a069a24d1a299fcca124a40c219ca0f1a485a6f124d9a158a7e2a82a27daa24ba8b7a9f72761a3c4a752a9ca26e6a2cda692a8e5253ca103a61ca8d62464a021a505a7c72343a0afa45da6cb222da071a41da60e22f79f38a4bea577217f9ff3a36aa5fd20ed9e7da34aa5b3207c9e42a31ea56920199ef9a2eca40420c49da7a29fa4401f5a9d2ea255a4961e119dbaa1faa3f81da59c42a163a37b1d599cf6a0f4a20c1d179cbca0b5a2c41cfb9b9ca084a2a31c7e9b73a02ca2431c269b3ba0e5a1ff1bc19a02a089a1ab1ba19aa49f32a1ee1a029a489ffea0dc1a0699759e6ca06b1968820994ee925c0efb1c6120c9214d25091d7220f42184261a1d3220f7217126861c711f6a217e26281bfc1db4208f26a219ad1c132073269317cc1a751e5126b216fd181b1d0627c71061167b1a3927a28f0a90db19e32b279e47a43ba040265d9d78a44ea33fa54b9a71a19ba1be204a9a2fa07fa0ce24bd9b5ba086a000261f9d95a08ba0ea25579dd5a0f5a0b425db9d74a1cba16725609eeba1b3a27825ff9e6ba265a39425ac9feaa21aa44f252ba077a355a4492516a09fa379a4d82407a069a36da44524279f33a25da39422349efaa025a29620ae9d43a070a1711ed29c8a9e8ca04c1a029c019bc79cc69c399de08ed7963ba268a0c59b1c9d379fbba10ba65ca8c3254fa407a96baa24291ca3d5a830aa862890a1c6a68fa812261ca02ea501a782249aa0f4a49ea6ff23bfa0aaa452a6132329a057a4f6a56122cb9f28a4b4a5d921009fcba365a53621949e1ea312a59420749ec9a2caa43a20429e8da293a4bc1f3a9e4ca265a42f1fcb9deba12da4c11e949dafa1dda3451e4b9d5da191a3c91deb9c24a126a35b1db29ceba0cda2021d8a9cb8a079a2b11c679ca1a060a27d1c229c7da02ea23f1cca9b53a00fa2091c5f9b32a0cda1d61bea9afb9fbaa1581b6c9abc9f7ba1661b28993b9e42a063190080bb8100812f0c581c19207721bd24b41c2320dd21ea25941cd81f9f21d025161c0e1f1d21cb25181be81d5420cc257619b31c941f97251b18731bb81e00250c168e19f81c3023f61104152819201e16056e0cda123f183a81d602e910a81c34907693a588e42233963e9af9978b25b299339dea9b80262a9b6e9ea89d62260c9c849f359f68269a9c3ea059a02d262c9dcba020a14026689d17a167a1d925f89d71a140a2a825b49ec8a1bfa292258c9f2ca243a3642536a0c5a2faa3432523a0d9a236a4eb2426a0cba221a49824cc9f86a23ba40424039fa4a1bda38d22619a9ca004a342210c98c2a007a42d21f89d8aa626a81125439f1da001a0b7a53aa59aa940ab9a293da42cab92ac2c2bd7a067a5b5a7f024f29f79a200a58421eb9d65a2a9a44621859e6aa2e0a40821db9ed6a20ba50521ca9ecea2caa4d5201a9fcfa2c8a48620c19eb5a2c3a44f20519e84a2a4a40b20d19d23a263a45d1f989deaa148a4db1ea79dafa11aa45c1e639d5ea1c2a3cd1d3d9d23a14ea35c1d199de0a0c4a2f71ce49c8ca035a2851cc99c55a00ca24e1ca89c35a0e2a1141ca49c23a0c8a1021c6d9c19a0b0a1f11b319c06a095a19b1bbb9bf59f7aa1841b4c9bcd9f4fa12e1bc99aaa9f50a1541b0d9abc9ea6a08219000093027b089808891b7f1e8a202024161c661f4421ac24071c2c1f4921ca242d1b651edd20bb24141a9e1d5b20ab247118121cfe1e492410170719d61c452333144a14bb19fd20310ebb0c2915dd1fac072d859e1359229c8cbb9449096b253094d198ca953926c1977e9b809a1126f4981e9d159dfc25719a289e059ede256a9bca9e579fc125fc9ba79f12a093256d9c20a084a07625da9c67a0f8a05225189dafa063a11e257a9df5a0c7a1eb24d59d59a126a2c4244d9e7da1ada27924f49ec8a1f9a25b24079fbba12fa32424239fcaa144a3b223c49ea2a11ea30f23cf9eb9a15da3e1222d9f02a2fca3a422a79edaa167a3a221379b2f9fbfa0591eb48d7d9477977215488b2a90bd95a112a897fa99e59c9f19769ba99d54a0ec1d059deea0f5a2cf1f439d72a1b4a31d20b39da1a108a41b20d29dc0a138a4f91f0f9ec8a13ca4a01fd09d85a1e4a32e1f729d51a169a3961e109d21a142a3431e169d04a10ba3ea1d019de2a0d7a28d1d0b9dc6a0b4a25c1de39cb9a097a21d1dd79ca2a061a2f41ca29c86a049a2b91c879c7ca03ca2a01c509c66a018a26d1c4c9c56a0ffa1501c279c24a0d3a1041cd39b06a09ba19a1b859bac9f50a1401b229b609f11a19b1ad89a509f00a18d1a489ae19e9ea096190000ec102b149a045a1cd51f2521e323361c5a2003222b255c1bd21ef9208a24111a6d1d052040244d197d1cc11eff23e417721a161d3a238314d1165b1a52222111e212e317bf21910df80f9116b8239203f8878014c324208dfc9381107425de920f981d91d0257d96f59a1d9801268598919c079bf72571998f9df19cda25539a859ee09dba25d79a049f199f6d25af9b739fca9f3125209cc39f2ba0d524789c09a070a08324c79c53a0e1a025241e9d72a01da1dd23339d93a084a15c236b9dcea0bca1fc22789de8a014a2a5227b9d1ea169a27222c69d38a19aa22822369e71a12aa32222a59eaea186a322221f9fd5a1c7a30d22c89e9ba13da39b21fd9cc3a054a2ae20d49a659f04a1241ff499739e98a0e11d1b9a2b9e65a0041d199b679eaea0a41c359ca39e04a1cf1c839c529f61a1281d839c24a007a27f1d7d9c66a058a2a91da49c9ca0a0a2ce1dc79cbda0e0a2cb1d059ddca007a3b21df09cd2a0eda2931dc69cb4a0bca25e1da29c93a081a2081d8d9c61a047a2b31c669c58a019a28a1c549c3ba001a2501c4a9c2aa0e6a1301c439c22a0c6a11b1c399c1ba0bba1db1bcc9bf59f9ea1691ba39bc09f65a1071b5b9b489f23a19a1af39acd9edea0d4191c9ba99ec1a08b19069c479e0ea06f188026f019ee1bbe1c622b781f6c227825b42cd620ec218527322df01ef72070266b2d7b1e2d20ce27622d6a1e5d1f0228e12c321dfd1c7624322c471bca1b1b1f712a411a761b371cc6282019011c3717fc27231cf72038148f28ff2425291392f42460285b2c009a1da838ab70ac401d0e9f09a442a4b50a0a235b960721919a8c22091d8a2c121e879f7d18042e2321e2a6119c952b7025d4a8479e129e1b221da10e9e8696d51612990080f3960080369e2294749961925791b7880b9afa8700800080009c008000800080629800800080008025940080008000807b8e0080008000801a92008000800080ad990080008000808ba0000073926e9893a61d1c959b929f6ba9e1213b9caca20baa4524159d40a533aa1c25839eb8a6e4a8bf243da03ca55aa7bd228a9e92a30da6fe20599ed2a284a45e20ef9c3ba2c4a3c11f4a9d1da2c5a3811f659dd8a1aca32d1fcc9ddfa195a3f21ec79c84a15fa3881e709c94a160a3481efd9b4ca13da3c01dee9b36a1f8a2941ddc9b03a1b5a22c1d0c9ce7a06aa2ef1c249cd5a055a2ae1c2b9ccea027a2981c509ba6a005a2551cb79a6fa09aa1151ced99f19f0fa11d1bbc99c39fefa0c31abb99939fd7a0691ab6997b9fb3a0e5194d993f9fb5a0c719d299579fa8a05e1a87222a18271c0b12a62a2e2230249726ca2c66220324c127c02de2214123bd272b2ee62254240b29442e09216f219128912db31cda1ca3247f2d231c931c381dec2c3d1c681d4b1a732c58219c22ef18702cfc244826389ec12ad428ee2a5ca4f3281524b22615a43114fca998a992a092a24aa75ea6439e2ea0dda23da1de995c1ce015842cf31784a66710c22ed12426a875a0482d4e2864a9fca189a05126bb9e609cb016f49acf920080961c00807e93538c061c6190008000809f200080008000809c1d0080008000803e1c0080008000801819008000800080f618008000800080d91a008000800080741d0080008043920da0721ea897cb9bc0a87b245d9b91a006ac8624bf9c5fa301ac0c25b39d96a41eaaa923fa9e61a519a92721879f53a5fca7e820979ffba402a73821029f4fa4fba5de202a9e91a32ea54620269ed0a2a6a4e11fc59ee9a2a5a409203a9eafa27ca4b31f179d2ea22ba4071fc79c0da209a4a31e539cc6a1d2a3411e459cbda1a4a3fe1d3a9c9fa155a3cb1d149c68a113a3711d159c4da1f3a2441d159c37a1d1a2fe1ce79b0ca17ca2b61c739bc8a013a2761cda9a87a0c6a11e1c869a58a08ea1af1b579a39a061a1791b349a02a017a1ca1a8b99799ff1a0671a6099a89e4ba0e118fc1d8118cc1a73123028a922ff248c275c2b6e238724a8281c2df7226b2490286a2ec0223024c228cb2eee210a23a528962ee0204d222f27012e9320cd215625602d832027227223bd2c24219b222421832ca422a624441ec52b1824cb25590d9326281a111d289ac32115a4b2a37b98c52439a5a7a03897b1a0cfa0d898800e689f9719d42b04217ba5ef9c842e3f281ba8a0a3522e7729eaa75fa43d2d3529aea292a3122eea27a4a273a2b72ea026eca084a16e2ef724e99eada0d82da523079ccc9f802cd121a797b89f692aa1218698d79fb428d8210080609e312723200080a398c6249c1b008076978622e01c2f8a0e9a4aa5e3211f9a23a0ddaabc24bd9e11a497ac2025ee9dd7a42aaca324d09e3aa515aaf623b9a0fca5ada9542375a0e7a510a98622c99f49a52ea84222b19fada4f0a6b621db9e33a40da6f4205a9e0ca4bfa5d020439ed8a39ba58120149e7da347a54d200b9df4a2dba4e21fe39c98a277a4371f6a9c23a22ea4a11e409ccba1bba31e1ede9b78a15ca3921dd49b46a107a32d1db29b27a1cfa2001dc79b06a1a1a2c11c669befa07ea27f1c509bd3a04da2651c929a95a002a21e1c779a77a0b7a1cf1b979a67a09fa1ca1ba99a53a071a1711bb29925a07ba1381b389af49f36a17f1a0904ff8233017f088a231122d923bd265e281523ae246a289f2b0b2386248028a62dc8224824c728e02e97214b23f9283d2f7f20e1219828b32e032023211c28ed2dc71f2f217227932dad1f9f21e5261e2db61f17228e261d2cd51d0d22c6261429c59cdc953f27b8270ea39ca22427dd2319a4aca20927fc9e74a3ec1d1a27a7a6bea1f9284e287ba857a3de2cef2850a879a4862e152901a715a55d2f2029f3a4b7a4492f782814a17aa4602ee1272ca143a4b52d4d276da23da43b2d602766a1cba3372c392661a03da4872b7d269b9e20a42d29ea25d49e2ba32b2517250aa00fa34797f524189d9ca245a8d824589ec6a3b5a99725229f8da4ebabf025a1a01ca507adaf25ec9f5ba518ac2425bd9f5fa58da96c2460a018a645a93424baa0f7a5dfa8a323a6a0cca57fa8dc221da041a5ffa70e22369fbba41aa76121be9e4fa452a6ba20cd9dc4a384a53420a89d71a329a5f41f789d5fa315a5c81f5b9d41a3f0a4911ff89ccea2aea4d91ec89c64a256a45a1e549c28a235a4e71d579c0ba211a4ba1d5c9ce6a1cca3731d3e9caca176a33e1df59b5ea1eea2d51c929b1ca189a29a1cfb9acaa02ba25d1cd79aaba0ffa1251cc59a94a0e6a1001cde9a75a09aa1941bdf99fc9f38a1ee1a5d9abb9f22a15b1a00002b0170038283c7205b2280245c27a0243b234f24cb28df28cc223124e0281b2c1022df23e428f52d3b2207248929392f4e2122233429252fa6201922e528d12e5620e621d328782e06205822f328902d491eb121c228622c661a0a20d828512a2b99db1807293e27b8a02c9ef02873211fa39ba12b291a9fe5a3df9c2a29cba73ca38c226d2998a8baa3f629a0290aa8a9a40f2ec32954a5a5a42b2f28299ea5eaa4a72f0829d3a486a50b2ff12805a3a1a46e2e24281aa4d6a4d72d422812a256a4db2c8227e9a17aa44f2c8b27aba15ca4012a0827c6a269a4f326d22664a258a4759d7d2636a154a45aa83d265da18da4f9aa032691a024a5a7ac5a26eaa082a527addb25d19fb2a5edab452556a08da55ea96f24cda0b5a523a90d241ba1d2a5d4a8832336a180a56ca8a922f8a048a506a8252258a0f7a449a7a121db9f79a47da60221849f4ea429a6c320f59e37a4dda59a20899ee2a39da54e20fd9d7aa342a5e21f599d0da3f7a42d1f3c9de7a2c4a4c71ef99c99a287a47b1edc9c65a249a4351ec29c1ea216a4cb1dd39cd0a1baa3821da19c75a136a30a1d609c1ca1bca2b91c159cc7a03da25a1c699baba01ca2241cc79a83a0fba10d1c579a54a0e5a1731bc09928a0d8a1d61a039ae89f64a1801abb00d5044c080788a11f91229b24552791211a245b253b29f124e82356254329a828a12343250e29302c26235f247f29122e052267237e292b2f82213f239f296b2ff320e922a029112f811f5a2258292c2ec71de42165290a2d0b16f51eb928092b9d9a1e1ba6296a28d29f0699d129d82290a0849c482908a167a2ba9cb829d5a797a36990e0293fa83ea41324bb2983a6c2a4282c7f295aa4aaa5be2e88293da5a0a512307f290ba40ca57a2f022966a3e1a41d2f7a282ea439a5902ea828a7a25ca4a32da627cba2c2a4d52c0e28a3a2bba4502a9527aca3d4a46426672715a311a5b9973f27ada10aa544a7bd26e6a18da56babac2697a13ca695ade42699a1a4a6e5ad8426d1a0f5a540ab3825daa0afa514a97c246da121a617a95a246ba126a6e3a81d24c8a0c8a588a8422354a06ca536a8a0224ea03ea50fa83d220ba0c8a484a77e21cb9e58a4a6a6ec20729e2aa426a6aa20b99d02a4c8a54720ba9dc1a37da51620959d6aa331a58c1f689df6a2dca4ec1e139da6a287a4881ece9c3ca233a4fa1d859ce6a1dea3971d519c96a17da34b1dec9b58a118a3f01c919b1ea1e0a2c91c429bfca0b0a28b1c2f9beba087a25d1cde9abfa04da2441cbd9a9aa0f9a1d31b2c9a60a0bda1521b959a39a070a1621b000057019c0757811320402273244327d4207024a3254c290e220f248d258229af245e233325762993281423e624cb29392c79229224362a0d2eb821f723242afa2e1f21a923282a202fe11fa622f429682e611db5210d2a2d2d51172b20152a9c2b7094461d0e2aec28c39bc018b0292e215ba0a5961b2a02a2f9a29c9fc42929a662a3c89da0296ea604a4b2969929e4a4e8a48827ee2978a4c3a42b2d3129b7a4efa4393021297fa452a53c301f29b0a46ba4ee2f5028f5a413a5ba2f99286fa3cca48e2e28281ba336a57e2d7128e4a215a5082c24289ea31aa55628f52796a31ea5171ea427f3a213a5a3a7f426d7a210a5bcab572649a2cca5c3ad6526b5a153a6a5ad342652a017a64aaa3e2564a110a63aa9c8246ca16da651a997249ba0f4a5a5a8da2376a0b5a56aa8392396a080a53ca8a12266a028a5cba70d2220a0f5a447a7bf21e39fa7a4c3a65321cb9f82a45ea609213f9f55a41ea6c8200f9f29a4eaa56f209b9ee2a392a50f205d9ea6a345a5c81f039e51a30da5311fa39df2a2c7a4aa1e8a9dbfa2a2a4661e5e9d67a265a4ed1dea9cfca12ca48a1d989c9ba18ca3101d109c24a1c4a2941cd69be0a05fa23a1c899bc0a02ba22a1c4f9b9ea0f9a1c21b4f9a6fa0e4a11d1b449a03a03fa13f1a000016017304168144209f226424e1275321902443269129c02196240f26c029692231241626b02934240d247225272ad72737232025892ad82ad9214924a42ad42c9e201523a12a152edc1ed8212b2a232e531c75201d2a242d3a14261e632a712b9197e51aab2a47288d9de30f6e2ace203da032994f2ae7a196a1bf9c992ac2a4dfa2e39d452a32a437a48da03b2a20a440a4b190302a15a416a5232820290fa492a48b2ec0283aa42ba58a304a2938a3dba48c309a28e4a442a546300e295ba45ea5932fc8286fa342a56a2e7b280da464a5cf2c472885a343a51b29a92716a37fa57f1e7c270ca2b4a51ba71d27eca17ca515ac4b2612a250a6b6aeaf26c6a16fa67ead3226caa107a664a93425a2a219a600a9d424f7a19ea65ca9e62448a124a6dea842241aa1cea574a8d22391a050a507a8d1227aa050a50ba8a2226ca078a506a881223ea031a595a7042202a0d9a402a77b21179f70a483a6bd208a9e0da4caa54620ad9d92a36ba5b51f649d4ba327a5151f399d0aa3eda4c21e3a9dbea2a1a4501ed19c5ba25ea4ce1d9d9c10a226a4791d539cb7a1d1a3071d0e9c74a176a3cc1cc29b2ca119a37c1c9e9b0ea1e5a2441c899beda0a9a2521c9b9bd9a05fa2231cf79aaaa04ba2241cc99a52a0c9a1421b0000650189082f84f11f8523fe2409282621072501271e2930212e254d278f298e21bb24e426c1298c219f243d26762a64226e237b25712ac925d3218424562ab528ea20a723912add2a491f19223d2bf32be91b3b209b2afc2b5314561e712adf295c97f61a7c2aa325379db08f212aee19fb9fd39a072ac2a097a13a9dcd29eba137a363a03e2abea14aa44fa1d2294ba379a4a49e8729fea34da41817862997a4b1a482292129d6a4f0a5842fb72945a421a52d31dc28d0a435a4c0303e284ea331a44830cd2750a4f0a44d2f302860a30ba5f32d28280aa537a5132ba72795a229a50624122705a2c4a549a63a27f4a108a669acf02678a2e2a5ccae1d2660a0eea509ac9a25cfa1efa5a9a83625d5a1d9a55da8b52448a139a6b5a89c24eda0efa593a82d24e2a0c2a56ea8c223b0a0a5a55ca82523c7a0a7a564a8f72273a05ea516a84e220aa026a5c0a7e4218a9ffda475a77321259fc8a404a71821c29e78a467a6b5207d9e29a402a63b20779edca37ea5ba1fe49d56a318a5f51eb59deda2bca4911e569d7ca269a4011eff9c22a224a4ad1d8c9ccfa1d8a33f1d3a9c85a14da3dc1c209c42a107a38f1c0f9c16a1b0a24b1ccc9be1a076a22b1ce19bc0a021a2ab1b2b9b95a005a29d1b379b45a0c8a1021b00009907bf0c8501c61f5123b82401285c21e824b12682294421c924a626a1296c218c24ba26ea29aa203b241e26332a112175236c25472a6a219422ce24762a75230c21fa23d52a5025071f08222b2b9226cc1b3c20b12a84271814c71d452af3252394271a2a2ad120529c260fdb29fe98279fb195d5296c9fb8a1ee9c522a40a0c4a241a0db294ea1c6a3c3a1be2915a352a474a38c290ea4c2a45aa46329d4a27da57b9ffd28eaa326a5112bbd2820a440a5ea30e628eba2a2a48931502881a445a4d0300828e5a2e0a46f30222887a349a52e2f0d2891a2bfa5682c09284ea39ca5752532272ea2c8a5e1a7ed2632a406a693ada526f1a4cda64cafee2646a1a9a67faa2c26c5a1e1a570a8102569a1bca555a8992442a1f6a59da88724c3a1f6a572a852248ba1e0a560a8fa2345a108a66ca8ae231ca105a666a85a23e3a08da532a87622bda015a59ca7e4218ba0d9a421a74c2113a0aea4e4a6fd20a79f87a48ba69b20fb9e5ca442a64820a49e42a4f9a509203a9e1fa4b6a5bb1f379ed5a360a52b1f209e74a316a5bf1e0b9e09a3caa4351e899d8ea281a4c91df19cffa11aa4291d7d9c99a1a8a3be1c739c77a14fa3821c429c50a1fea2501c1d9c21a191a20b1c149bd1a04ca2e91b569b82a0e9a1851b000059045309408737201024312524283b21b32486267b29012181244c26a6290f2167240d26f9296e20cb238425362add1f9322cb244e2a651fee218a244a2a751e0b215d23bd2a6a1d351f98217b2a031ed8195c1e0c2a771d498d0b1a112aaf1b9c988315e229810ce29c0b8fa8290c9aa79f569ab229839ecea1339ff02973a06ea20fa17c291aa15fa37ba19d295fa2eca3a1a26f297aa34ba46fa35929a9a350a460a4152948a3caa44c9f652807a4bda4b42c4728d8a371a5ac315128baa30aa5ac31392874a247a501313b2833a3f9a544307628b4a2a1a59a2de927b8a2cfa5d6287327e8a44fa6d1a547271ba3b2a6dbad42273ca29da5eeadba25d8a10ea6b6a89d25d8a1f9a5a6a80e250ca3b5a6f4a84a259ba107a677a89a244aa242a6d0a878244ba115a693a83824e9a0eaa557a8dc23cca0b9a543a83e2373a066a5fca7912219a00aa54ba7f821a89feea413a781215b9fb1a4eea62d21409f93a49da6ed20039f68a459a66e200d9f3aa4fea51b20ee9e04a4afa5b71fd69eb6a36fa53b1f949e75a322a5eb1e239e16a3d9a46a1e6f9daaa28da4e21ddd9c4ea24fa4a11d449cdda103a4061d0e9c40a115a3611cb59bd9a082a2231c849bc1a035a2ac1b389bb8a02da2871bf39a82a066a20f1c00004201e9084b860c20fd237725f1272321ae2480268529fd20602442265c290b2167243926a829db203b240c26ea295f2094237a25392a831e4322f6244e2ac31c3e214824782aa31a6120a1229d2a58177b1c891f6b2aab12730d391a422a6d93ba980b0f092a1b9a4f9d69953c2afa9cac9f3e9c592a3e9f31a1e49ea72951a051a2e9a0972994a1d5a359a29d299ba26aa478a37f2999a28da420a42c29b4a29ea466a41029a6a28ea479a4ac281da2d2a4be994828e3a130a5122e6628a2a217a65a32ab28afa264a5173256286ca4e3a4b1306e2782a3dea54a2f27282ea486a51b2b7b27c6a2b1a5d4a4e5263da2a3a5e1ad41268ca0a3a4b5abbb2424a291a502a83f2558a2c4a551a82525f3a0bca544a8ef246ea1b5a539a89424a8a1f6a558a8642455a134a67da85d241fa113a66ca81724f2a0c2a559a88b238ca07ea52da8c42224a02aa5b7a73222909fdda41ca79121fd9e8ba49da6f620e09e4ba43ca67920be9e17a4fda51d20cb9ef6a3bca5a41f9a9eb5a38ca54f1f869e52a343a5b31e269ef1a2f5a4321ed39d8aa2b8a4d61d659d45a26ea4651df69cd5a114a4131d8a9c98a1b5a3bd1c549c60a141a38e1c239c3aa109a35c1c419c27a1ada22f1cd89b0da1aba22b1cbf9bbba0b0a2f21a0000000129050285131fcb22a924ad27962082244d2697290f21ba248a26db29e92098245126f8297f202b24f925082adf1fdd220b25242a3b1e3b213624392acb1c8d1f6623472ad5199d1d7521262a3515371aca1e422afd891b14051d082ab797c8988315d929b09a0c9d7c95ad29269db89f1e9c7e29e89e30a1c59f502944a07ea2d7a03329aaa029a3d1a11f2906a1bda34fa2fb28a6a162a4bda3ec2822a2c1a40fa5b7288ea207a56fa56428cba19da5cea54e28a7a210a58b9dd72785a12aa5b42f6928c0a20ca5ba3293289ba1d8a4033297278ba208a55430bd2749a121a57c2ce826cba285a683a66b27cea2bca6b6ad06270da20fa684a9f0255fa1a5a516a8372596a14aa67ba898251ea382a6e7a87d2511a4a2a57ea87f24eaa192a55ca83c24bca2cea556a82624e5a1c3a52aa8e02335a176a505a80123d1a042a59aa77a2291a025a588a72d2281a00aa54ba7d22148a0c1a4e7a63f21fc9f8aa483a6e3209b9f60a448a680204b9f46a406a64020d89e1da4c1a50b20579ee3a373a57e1f159e67a318a5de1eea9dfea2c8a47c1e5c9d60a257a4c51df09c00a210a46f1d909c9ca19ca3e11c679c60a14aa39c1c579c39a119a3871c439cf8a0ada2141c869b8da02ca26e1bce9c5ba0bda1581a00003e0120053586211f87230c2509280321d824ea266d29b420c22465267129a5206e245826a0294d201924e825db29411ff5226225392ab81db721d224532a6b1c3320b623422a2419331dad215e2a0e150917e01e4a2a5790b58d301c492aec972599b90f342aa19a819dde98022ab29c36a0629dd0294b9e38a198a08829bb9f71a27da12e297da0a6a35ca3f92804a12fa404a4b82859a160a44ea47e28b9a17ca481a45e28dca1a2a4eea4372869a2eaa46ea5ff2712a4daa5e3a5bb27f1a2b7a5c19fda2762a29aa5862df827a6a29ea581311427eba30ba69e30742789a5b6a5172c3c279fa420a66aa9082757a294a4c7aae324f0a1f4a4a1a60f251ba295a519a85c2514a2e4a515a82225f6a19aa54ca8b6242ea144a679a80025aba12ba685a8c4245da114a670a8692431a118a666a81424d5a0cba52da86e235ca062a5bea7a2221fa04aa571a74422d09f30a546a7eb21849ff7a401a76921369fbfa4aea60d21fe9e78a460a69920fd9e3ba404a63520de9efca393a5d91fa99e7fa33ea5331f219e0fa3dda4b41e849da1a293a4261efd9c3ea25ca4db1d9e9c06a238a4831d619cb3a118a4251d399c63a194a3cb1c589c32a1c6a2a01c429cf2a055a22d1c0b9ccaa05da20b1c569cada042a2601b0000b689f88a3185092096231c25ba27c6201225f7266a29a62062241526372979203224e22542292520f2237a256c29891f7e233425b129481e2e22a024d329c21cda200b24e629b0199a1e1e22f329b014f118fb1ede2909904594a71ad4298b97e59bb78fb329099bc19ebd9a7729bf9c5ea0399e49298e9d52a17da01b292d9f46a263a1e02887a045a332a3c72800a119a411a48e285ca154a435a45f2872a15fa46aa40628a1a191a4c4a4b52714a2e9a487a5c8270da348a5d2a5bb2797a1daa4b2a53d27bba303a406a21d268aa154a5ec242e2765a11ba5622cbc2651a198a51e214d26769e4da418a9b924b3a1a9a56ca7ec2580a478a50fa79725daa261a5e0a72725cba2baa566a84625efa1fca54da81b25e4a15ea65fa8f424a4a101a63da871244fa1c9a519a81c246da1ada515a8b5237ca181a5e0a710231ba15fa5a0a79e22b4a03ea570a7362262a00da530a7c42124a0d7a4daa64621dc9f98a472a6f220309f5ca421a67c20d49e1da4cba52f204a9eb5a372a5931ff29d3ea327a5f51e9b9df1a2d1a4971e6b9d93a283a4191e0b9d2aa237a4941dae9cc7a1e8a34a1d539c63a153a3dd1c279c0ca1d4a27e1c059cc7a069a24d1cc59b85a0fea1ce1be39a1ca071a1461ba59a8f9f42a168198308d01478163409711f842307255f27a32082245226ff28f91f4324fa25e02811206b243c264f29c01f3a240b268329b91e94238525c229ac1def217e24f929041c8f204523f429d8183a1d3c21e1297e121f170c1ebe2983923a97b5158e29ec98749dd2988029849b21a03d9e40295b9d23a10ea00129449ebca167a1d2288f9fa8a2d0a1902831a035a3a9a251289ba0bda374a32828e6a015a444a4ec2717a14ca477a494270da166a4b0a47c27c4a03ea4aba4112712a129a4d6a4f02663a11ea4a3a47d2687a101a441a5c825e5a450a536a5552680a1cca4d9a4be25189d9da398a45824a1a069a59da68e25fda119a52ea6d72431a14da57fa7ae2414a16ca59ca7922413a130a577a751245fa16ba502a88f24d4a1d9a523a8c72453a1e2a52da8802436a1f0a53da8202429a1d4a51ea88623cda0b3a5f4a7cf227ba098a5daa76d2240a061a5b0a728220aa025a559a7bf21999fe6a408a75721059f83a493a6dc20b89e49a42ba66820829e07a4c5a51920119e6ba358a5601fd49df7a2eaa4d91e659d7ba29ea43a1e8e9d4da26da4e91da79d28a242a4c61d8c9df4a10aa4731d5a9dada1b3a3111d3d9d5fa13ca3ba1cff9c15a1e9a2681ce29ceaa086a2261c229c9ba052a2a71be09b4ba003a2ee1a0080d68adf8cf401ab1e49226f24a226051fce2359251e28bf1f1024b5259828971f1a24d025d8281a20642424265f29bc1f2d24fb25cf290f1ed62213250c2a311c28210d24172ada188b1d1621c6293b09fe0d711c7a29f395c09af18f3429ab99579e779cfd28249c9ca05e9fc028629da3a121a19828399e3da20aa269285a9fd2a2e9a23e2844a0b8a3b9a31328b7a0eda30da4d72715a132a46ba4a72733a15da488a410273ea131a4d0a47a2648a133a4e6a4f82554a13da4f4a488256ca14aa44ea522252ea2aba49aa5f22469a305a5d7a505253aa2e7a4ffa5e724bba4aaa4a1a5aa242ba481a449a54024b5a106a54ea67d245aa1faa4f4a672244aa203a525a7602471a151a594a79124c7a18ca513a89d24e4a10ea647a8b92488a122a650a88f2440a1f7a53da8582425a105a638a826241ea128a649a8ca2308a102a635a85e238da08ca5eea7a12238a01aa54da7d221c99fbba4caa627215b9f73a459a6bc20fb9e29a4e8a54820e29edaa37ba5ce1fb29e7fa331a5331f409e0ca3e0a49c1ed59dbfa2b0a41b1e699d4ca262a48f1dd29ccca111a40b1d659c8fa1b2a3d61c3d9c51a165a38f1c2b9c24a119a3571c119c10a1e3a2451ce49bdea075a20a1c299ba8a04da2d31b489b80a02da20d1bb2126f19f81b3f139d1fba231425e0262e1f6424412687283f1f2124d4258828361ff023bc25b028951f5f242c2630291a1f81243b269329f61d1224ec25c7297a1c3a22c524fe29fe18b91e8822962910105b0ebc1cd128fa954f9c28995b283a9a4f9f8e9eca27d59baca0aaa06127bb9c3ba176a12027839da3a1ada143272d9e22a26ba26027e49eb2a237a36f279d9f3ba396a3502728a0c6a332a40f2740a0e6a354a4e4267da011a499a46f26b0a00ca4b0a4e52501a125a4daa4b12541a127a413a56b257ba13ea43fa5cc249ea17aa46da55524afa19fa498a5d223f0a14aa4bea5fe22e2a169a496a5312305a21da451a5a922faa061a402a6e02212a18fa42ba6c22315a123a547a779247ca11aa653a813259aa190a691a83d2559a177a68ea80d2542a13aa660a8842438a119a63ea82324e7a003a625a89f239fa0c5a5efa70a2378a06ca592a7882258a01ba527a700223da0cca4d4a681212ba064a448a6c6201fa002a4c7a5372010a083a353a5a41f0ea014a3efa40a1fb19fbba2a2a4771e079f6da273a42c1e2a9e42a251a4de1d8a9deda11aa47c1d079da6a1d9a3291d8f9c54a14ca3be1c5a9c1ba103a37b1c4b9cefa0a1a2361c3c9cb2a045a2e51b079c95a034a2b41b649b39a0aaa1391a9f136a191d1c9c1526204723f024c226a91ed822ba2426271c1f17230a251f28331f60234d257c28011fdb23a025de28901e2d2406265f29421e64244626172a911d46244b26b92adf1a62212224e9298790a695f3104c28b99a1aa17ea1c426809c6aa2c4a27c25089ddfa201a39825b99ddca20ea36526be9da0a206a38a26229e83a2b6a26f26799ebba2c1a25b26de9ed1a2f5a24f26529feea28aa34b2624a00fa3c7a3292637a058a30ea4e3255aa08fa349a46e2568a0d7a3b6a4052564a0d0a3b3a4de2476a0ffa3dea48a2469a0dea3fda4de233ea088a3f1a4792233a05ca3ffa4c12113a043a3eaa4122137a051a31ba5bc2093a0b5a35da54a21bca03ca420a6502276a128a5a4a715247ba244a661a83c2550a206a7bda8b625aca1e3a691a86e25a6a185a66ba8f92473a15aa643a8932421a1eca5f4a7ec23b4a058a553a7bd221aa0daa4c4a6d921969f95a45ca647210a9f3da4dea5b920b09edca36ea53c20839e26a308a5871f399eb6a2a6a4d41ef19d6da288a48a1eb39d29a250a40d1e339dd8a12da49b1ded9caaa10ba46f1d929c76a1c6a31d1d5b9c2ba147a3b81cfd9bcba0b5a2511c929b8ea055a20b1c679b6aa010a2ef1b559b5ba0e4a19e1bf79a46a0f5a1de1b649a32a0f3a1611a00809c8a648a5582e31d9421a6231026921e242253242227f71c5021db230a27fa1cde214724d727641d202298242e28611dc3220a258e28621d1f24e1256a291a1f3b263828572b441ea6250e28672b87963f9fe79d1527829ed3a583a6631fca9e4ca505a62f215d9d34a3b9a3e823ec9caaa1eea1ab24479d99a184a13e266a9d8fa1aca19326a99dada1e5a189267e9e9ea140a2ba26de9e11a2d6a2a5266a9f67a273a33726ec9fdfa2e5a39b254ea036a325a4252594a04ea34ea49424dba02ca35fa4452413a103a33ea4142417a10aa370a445237da0aaa262a4bb21439f7fa1b0a30720989ebaa098a20d1c099e5ca00ca20316369e21a095a1451bd39e41a17fa39b1fe5a0ada434a6d4237aa252a709a96b2603a369a8d8a9d42662a2c2a73ba9fb2522a2b7a68ca80025f0a0c4a5f8a7102467a029a51fa7db2259a0c3a497a6ee2140a07da424a66821fd9f35a4daa50221509fe0a38da58920a99e98a355a53b20389e4fa327a5de1fe69de2a2d4a4161faa9d74a28ca47e1e719d09a237a4ed1dfb9c99a1bca37f1dae9c3da14da3051d599c00a1d8a2ad1c4a9cc6a099a2851cdc9b97a059a23c1c759b54a01ba2a91bf09a1da0c7a15e1bae9ab99f6fa1d01a209a5f9f2ca17b1a5699a79e8fa00019379014966f96db0ebb1c2420b4210025921dcc202c22b926491d5d202e228b265f1c6d1f82215426491bdd1dcb204726a619b51c36204426cd18851a761e6726c114d418db1ca927830f0219db1e732bbc9865a04a96d9278e9a13a1e89fa024dd96429de99c0026f999199ee69e3427009c159f109fec26f79bd39f549fb726629c42a023a0b326489dbba017a1fd26fd9d60a1b2a10227849ed6a17ba2b4264c9f5ca238a36926a49fc1a29da31e2616a076a322a4dd2555a0f3a39fa4912578a01fa4d4a43b2567a0e0a3b5a4ae2442a0faa234a489232ca00ca2e6a30c2216a0a8a143a3e420209f16a03fa1671c539e349d51a0f494ce9e718dcb1a98a0d79ced8f079834a17ca0e2a4b0a6fa2288a346a9d9aad0286aa412a9f9aa352876a17da71ea90026a9a124a65ba8c92483a136a542a7c323fba0c1a487a6af2233a069a414a6e621299f15a4cba54b21ca9e8da36da58d20af9e0da312a512208f9edda2d1a4aa1f9d9e83a295a4461f2e9e37a263a4b41eea9deca11fa4071e739d82a1e2a3791d029d3ca16ca3341dce9c05a109a3de1cb09cc8a0b2a2861c889ca7a073a2671c4d9c85a039a22b1c159c6ba025a2f01b989b45a005a2c31b129b1fa0eba1171b9d9af59f9da10a1b7599509e69a022190080ba81fa800a0a181ce11f4c218424e11c76204422ef25d31c3d201a22e9253a1c491f5021d6251b1bfc1d7120a8256a19a31c731f2a25de17061a8c1d682320144716d719a71e7c08240ed813c218c407770cd614331ff98ab18e7a13fc242795f09823958126ab98cf9c639b2927f19a549e3b9dfe26029c5f9fc49ed326929c32a028a0b026409daba0a0a06f268a9d00a169a14626fd9d61a115a210269d9ec4a1b9a2d025349f57a240a39a25b79fb0a2afa376250ba0cda226a40025ed9f1ca348a4ba24f89feaa25aa46c2430a050a3aba45624b1a0c8a3d4a45a2467a041a3a2a4f52326a004a2d4a32222689d45a164a3f520dd9e62a4cba580234d96ec20a02365a640a2b1a5b6a79c244ba534ac78ad342c62a091a6a1a8162507a0f5a381a51122c79e39a3fca47b21779e09a31ba51121b29e06a301a5bb20399f0aa3f0a48620cf9edca2cfa42b20a19e9aa2aca4c11f3a9e52a285a42a1fe39d28a265a4bc1eb69ddba132a42f1e4e9d71a1f3a39d1d249d33a16ea32b1d1c9dffa0fda2d81ce49ca9a063a2671cbe9c7ca022a22f1cab9c59a0f9a1e71b859c2da0d3a1af1b609c2ba0b6a1941b339c17a095a13d1bd79bff9f79a1291b799be39f54a1111ba39ac59f4ba1c51a239a299feba07819000088011308f801331cfc1ed4200524121cac1f8d21d824ed1b511f7421d224231b831eec20c0243d1aa41d58208f24d218b71b5a1ec62371160c18681b7f212c116e12ee171c20790f160fcc16dd225004c08ef7149725ca904c965d8b9a26c095409a6c98aa2676989c9c2b9c7f26d299a59d9a9d5426c49aa49e999e3c26bb9b9d9f7b9f10264d9c08a01da0cb25899c44a082a09025f09c8ba0e9a054255d9dc6a04ba10e25919d0ca1b1a1d924169e5da1fca18c24bf9e90a1c1a26224759fcea111a32624d29fdea136a3b5231fa0bda122a339230ca0b3a146a3e122c59fa4a15aa36622479fcea1c4a30e221f9f1ca225a4dd216c9f6da255a463214c9d75a0b3a1eb1e53903996dd996f162c89f98d6f934910db979999ce9c4119349c709f82a1d41d3e9d45a16ea3981f019ecba121a4dd1f3d9edda13ea4ca1fa49ee0a147a46b1f9f9ecda114a4f61ef29d78a1a8a3791e309d35a14ba3141e369d22a121a3b41d099d06a108a3611d189de9a0cfa2311d0b9ddaa0b6a2f21ce99cafa089a2c51ccb9c9ca057a2861c989c86a03ba2631c659c6da011a22e1c529c4fa005a2121c249c20a0c8a1981bbd9b02a090a12e1b699bb69f4fa1b81afa9a719f21a14d1ae49a839f07a1481af599be9e83a0601900002211d914a303941c3e204f210824881c922051221e254e1be61e02217524f319801d182020240c195b1c941e6d232717b519741cf021a413b816971951219d11f614a91803237810731178183625c0042b89ad171826a38ed994aa117326ae944d99e0915126ab97109c67983926cb98189d499b0426c299139e109ddc25ab9aa99efa9dad256f9b289fc89e5e25f29b929f789ff424759ce99f05a09d24af9c16a04ca045240a9d26a0aea0aa23729d73a0eda03023b89d7fa04ca1b722c29dbba0b3a15f22c49dcba0dba12022b99de1a03ba2f021e59d1da19ea2ce21349e60a106a3d421af9e89a147a3c2210f9fbca1bca3bc213b9fe6a104a49321969ef5a10fa47321e29c1ea1d9a2b220a79a02a065a1e01e2a9afb9ecba0641d839a659ea0a02c1c409c539e93a0011c5d9c049f17a1881c3c9c0aa001a20f1d5d9c66a068a2411db09c9fa0b2a2681de09cd1a0fca2891d289df5a029a3771d0d9dd6a029a3541dd19cb6a0e0a2201da09c97a0a3a2cd1c7d9c73a067a2991c559c67a043a2601c3e9c52a01da2211c359c3ba0ffa1fc1b439c27a0dfa1a11b249c1da0d2a1761bbc9bf99fb1a1081b819bdb9f79a1a71a359b709f36a14c1af69a089ff4a09b19ac9ae49ec6a07f19c59a4c9e4ba05a18ef24e1183f1cef1a4d2b8c1f64229725f22c67213c222628672d10203a21f927d12d2a20a820eb28372d841d8f1e2f27ec2b8b1aad1a1724642912196b19671cad26b1180119810c7f233b18f01953957b215c19b01d1699b6226a21fc212ca064265c284a2a1aa847a5c2a4a3a708a360a683a449a633a07224e59cc21d369d932a1f204e2d9e2301a48514bf2ed526fda85da0df2c7429f3a9aba6e1a6252be2a93ea265ac372452a994a455addd259da884a533aa712826a92ea64caab628b4a9d0a57dac292837a9e7a49aaa3d2771a8d1a44ea14327e7a7faa365a73a2683a4efa3eda61a25f7a221a140a846249e9d3b9f46a7ea23579cb59d2ca90e225a9d44a09daaae22009d84a432ab0e2589a1eea632ab0c253a9e21a668a8b223309eb6a484a6ef21829f48a480a67021919eb1a335a5a320e79c4fa216a4801f289df5a1c6a3fc1e439de4a1b9a3d01e0b9e00a2d3a3c61e3e9dbea1cba3661e9c9cb3a1a3a3091e479c82a191a3c21d2c9c66a15aa36f1d369c36a122a30d1d429c0fa1cda2e61c629c03a1b8a2ab1c7a9ce6a098a2711cbd9bd5a04ca2361cd19a80a0aca1bf1b219a0ea01aa1c91af199f09f10a1731a0a9ab79f15a1441a339aba9ffba0e6193f9ac79ff9a00e1a1c9a7c9fbca0251a771afc00b4142000912a612101247a26852db32394241328772e642364242a28bd2e362228237628752e791e7e1e4728902dfe11830caf24302d5d18c1190819602b531dbd1eff9ade2a9020b7223c9d20293623992375a016207224c225efa248194f23932513a70da384a47aa636a4a2a10ca5d1a5f89ef29feda200a3378e1c2a5521c82da92132a5911c8a2f1b2ac2a853a2132db62c60aa65a737a8ce2be1a9d6a69db06a2734a944a7a4aca12834a67ea660a8882790a7f0a41fa2a92615a7f9a37429cb2598a5b7a37e288b2507a4fda1131c5d250ca2b19cff2a8d25f4a01f9eb22ee3278aa1c09a242e6628629ca79c38a76a286b9a30a11aab0f27539e56a3c7aca625f89d05a57eac052507a01ba68dabce2229a051a6fca98b212c9f78a52aa822211f9fd8a4e3a6f1201a9f65a425a6b920889ed2a381a540202b9ef8a2dca47a1fa19eeba2cba4821fcd9e07a3c0a4a01fa89d86a277a4fc1eda9c31a21ea4631e7c9cefa106a40b1e839cd5a1c7a3cb1d7e9cbda19ca37e1d499c97a15ea3481d249c7aa12ea3fb1c369c57a1faa2db1cdf9b1aa19ca2831c599bdca04ca24d1cca9aada0ffa1f31b639a65a0b2a15a1b489a44a08ca1231b979a20a05da1811aa199ab9f1fa11e1a8b99a19e73a0331809173110f91405064b28482296247927532cfb23ea242729072e9623c3242d290a2f5a220e242b29032fcd20ea21c5284c2e731ea11fde26e62d961eb01f57246c2d9d209e217522002cdc20ef215b1d862b92215d24b29b5c299120362334a1e7170b903318959ff09d669fd4a122991f21e7a0039c6222fca328a18614372580240a21402df924e0a9fe9d9b2d1129c4a912a5552e0b2beea88ea5fd2d6a299aa652a608b17127b0a81fa73fad492792a797a66ea8b4271fa6f4a55fa86c27bba553a64da6a326bea525a58aa8d52694a4bca3681d34267da4b8a49c1d912722a49aa4e52da828c1a2b2a2b42a1b28969b559f56a9d525189e06a4feac6927f6a081a5cdad692602a0f7a587ac2b2520a01aa603abd623f5a0aba6a8aae722b2a04fa6a2a9702214a074a555a8132201a0d7a431a79321b59e49a445a6df20459e1da4e6a59e207e9efda3efa57c204d9ebfa393a54b20649d3ba31ea5bb1f319dd0a2a6a4071fb79c53a261a4861e989c0fa20ca4df1d379caca1b5a36f1d289c7ba166a30e1d249c54a133a3c91c1f9c45a114a38e1cc29b0ca1d1a23e1cb29be9a073a2201c2e9bbea01fa2bf1be69a8aa0d8a1331bbe9a6fa0b4a11e1bfc9a66a0a7a1da1a239a34a0a1a1a01a659af19f30a14c1a000000805d800080092284203422c224862936240125dc28fc2cb223db240429a52ef022562411298f2f66211423f328bb2f5b1f4821aa282f2f371e27205b28812ed71d0e203528022e801d4c20e327702d631d9520d727512cbb18841f2e272b290d9e909824281b2873a2d2a17d28132322a26ea08628eda250a272200b29a7a709a1d328342acaaa91a2ce2c9e2a4caa5aa4342ea429c8a9c9a5852fa629c9a7b7a5222f182925a55da5e22db928a2a4d7a4732d3628dba4faa4a82d3628c0a2a2a47e2ca4271aa285a4df2a262739a1d2a410293327d1a01fa41025b726fd9e5ea3a2a0f825f29e64a250a8332597a04da4f2aa5c264da150a5d4ac7e263aa104a6b1ade3254ca01ea67aac172590a058a688aa512491a0c7a6efa90c24d5a050a622a93a239da0eda5afa89a2220a089a55da80122619fe6a493a71e215c9f72a48ea69620a79e1ba4eaa52e20e59da3a35fa5af1f719d5ca324a5501f9c9d68a314a5461f599d14a302a5b21e0d9dbfa2a6a44f1eb49c73a274a4cf1dad9c4ea243a49d1da69c21a212a4511d8d9ce4a1a2a3f91c3f9c89a12aa3ab1cd19b3aa1b6a26a1c499beda051a2171cfe9ad0a032a2c41bf59ac0a02ba2c21b2a9ba4a0e7a1231b6e9a47a074a1d31a9d9a00a05ca14e1a000000803c800080e71ecb2079224a25a925b32368242529962ae422a5243a29342d75223b244929282f91225724052a1c3094210123d829e32fa61f282164297d2f4e1f08213429e62efd1e42213329f62d9f1d6421d628cc2c351ac11ff528762a7094031b3a299927f09e1b9957291d204aa230a0dc29b19cb6a3189ce0294aa893a37022442acaaa37a43f29522a69aa56a5d92d422a70a899a5782fbb29aca810a6073094291aa827a6df2e8029ada5c9a47e2e362899a5fca4ca2d5128f3a3eaa4c62c1e28e3a33ea52d2c46280fa413a5f1291128f2a3d0a49725722712a3b1a402a12227ffa1c1a4aaa8c8262ea2faa45aab342682a1d5a538ad7c269ca132a6bfadf22536a062a684ac4025eea075a66baaa0241aa150a6dca91a2433a11ca640a9552340a1c7a5b2a8822214a196a554a820227fa02aa5a2a7642128a0b6a4d7a6db2006a097a496a6ad20969f62a437a67620149f26a4eaa52c20729ee2a38ba5d61fcb9d6ca33ea51e1f8c9d37a3ffa4aa1e539deda2c2a4661e209d96a282a4ef1dfb9c45a24aa4a61dfa9cf8a108a43c1dc69c9aa181a3ea1c8f9c42a1fba29d1c2e9ceca06fa2341ca49bb7a03fa2ec1b0a9b8da02ca2bd1bde9a73a033a2241b349a4ca060a2c51a6a9a16a0bfa1701a00000c809502b5809a1d9520d1229e24dd226124b525752987265524e425c329482a962348254e29aa2d6123da24d329c62f4f223a24f62936308b219a23572a2a30112178233f2ae82f0d204123db29b52e401d30228f29972d23179620aa29cb2b4c99b71de929bb289f9e6110162a362369a0cb99fe2916a079a2f499212a95a80ea4a1977f2a2caaa0a42322e62946a994a5a52b1d2a0da759a6692eec291aa8fda54030f129c6a5cea502307e2925a546a5742fa028f9a47ca5f82eba283fa40ba5bf2d282832a481a5992c6928e5a363a52d2a2b2838a450a5bc25dc27cda384a51f9e9c275da278a54ca8eb2684a2f7a50eace7260fa28fa6e2add62664a2fda66aae752636a135a6c1ab052504a127a6a1a9692495a17ca68aa92e24bda19da676a9062407a133a6faa82b2375a0b5a587a86d2246a060a562a8f92115a004a528a86f21509f97a466a7e820f69e59a4baa697204a9e32a421a638204e9e11a4c0a50b20149ec2a376a5701fff9d67a31ca5d71eb19d03a3c6a47a1e6a9d9aa273a4f21d0c9d40a238a4901db19cdfa1e2a3171d339c7ea16ba3d21cae9b38a113a3941c579b10a1daa2531c439bf8a09aa2201c1a9bd5a07da2e41b389bc2a033a28b1bc29a9aa024a22a1be89a63a0b4a15e1b000000800c800080381dfa1f88217f241021f6240f26b3290c245d24b225ec29a42661238c25be29052b71235225442a2b2ebf22b924ca2a0e30c1213224742a67302021ea23952a2130f91f2523992a2c2fc01c5c21132ada2d3c173a20042a382cc194bc1d7d2ae329f89a911c3e2ab924b89f18178d2a51a098a2ef9dfb2977a87ea3f89d1a2ae3a87ca4109ccf29dda79ca5a125592ae6a558a5782c6329a9a6b7a54830952998a6f9a59e3042299fa601a5323063286ba566a5842fa82847a46da5b32e65287ca4c5a5d92d8b280fa495a5fc2b3f2844a48aa50328062827a4a0a53e989e2760a396a582a8102729a379a580ac552695a346a650ae4626aaa21ea75cae5526fda081a62dab1525ada1a5a6e6a9c32468a1c2a6a1a96424eaa045a608a9a12388a0eda5a4a8eb22afa0caa56fa86e2286a06aa52da8f0214fa023a5b4a77e211da0c6a419a70a21fd9fa8a499a6cc20979f76a455a68a20829f4ca411a65220f79e13a4c5a5e91fb49ee5a37ca5651f589e91a347a5011ff49d2ea301a57c1eae9de2a2d2a4361e959da7a295a4ca1d349d37a25fa4681d1f9dcda1daa3f91c969c51a1e9a2701c5b9ce9a06fa2071cf99bbea04ca2a81bee9bb2a032a23a1b239b99a036a2a31ab39a1da076a1341a0000008034800080af1c2520b721fc24a92109255126db29ac22cf247b26102a29246e244526fe2957264924b825ab2a662a27232725b22ab12d4f21cb23642ab32faf202b23b92a2e307a1fc522b82aba2f2a1df621332b7e2ed714e21e362bfa2cab97fe1a912ad229d59d2e10902ad7247fa05b90812adea10ea26499662a7da740a3069d6b2a88a766a46ca14e2ab4a5caa4f890792a9ba5aba5de26b6291aa648a56e2e532920a657a5ec30362946a479a5e630cc286aa5bba571303f29b3a46fa5e12f9b283aa4aaa5a42e76286fa4d6a5b82c48283fa4bda5c728de2716a4ffa588188c278da22aa649a81c274da2e5a5bcac422661a336a740afef26c3a234a75cae6d26cea1a4a6ffaa362590a2d7a6aea9ee243ca2fca6a9a9b5246ca18ba629a930242fa12fa6dca8b223c7a0d0a557a8ca2276a07aa521a83a22a3a0aba532a8232298a074a501a8d52148a025a58ca76f21ba9fcaa423a7d2202e9f57a44ea636203e9e15a4c9a58b1fc39db3a37aa5081f709d4ea32da56e1e6b9df9a2d9a4231e169d92a290a4a21de09c36a259a42e1d8e9cd9a118a4e11c489c89a1c5a37e1c1c9c4fa182a34f1ce29b27a130a3101cae9b0ba103a3061c029c06a1c9a2c81b6d9bd3a083a2c91b6d9b89a005a2d11a0000008085000080f31cd92087228c25f021662534278f2998219f250b28e2293f2204256127222a6922be24c526f12af224e822c325b22aae293b21e424b52a442d6e208623de2a442f4d1ebb21e72a842f0e1cda1f972ab72e220e851dc22a3d2db297211b972ae9296b9dd60f192a732399a06b9b362a2ca219a29a9d0d2a41a6efa330a08f2a0aa579a493a1cc2988a3a3a44e9ec529afa4afa41c91d52935a6ffa435294a2963a74ea60b30b6298ba562a5a3311829b0a4c0a41b31a22836a4f0a49030712841a4d9a50930a7287fa4b8a51f2e592827a58ea5d22aaa27eaa3c3a537246e27eea247a698a6682742a240a6d8aca52699a29ba641af7a266ba18fa6a7acf52524a29fa686a96025d5a19da62da9ec246da18aa613a979243da137a6e4a8212400a105a6b1a8aa23c3a0b0a58fa8e322bda0b6a582a8a522a2a09ba546a8372232a05da502a8cc21de9f31a5c5a759218e9ff9a43aa70021029f9ea4a6a67c209b9e47a425a61b20909e0fa4b3a5831ff89d7ea343a5c41eb79d25a3eda4611e6f9dbba29da4db1d369d62a254a48e1db89c01a213a4161d499c8ea179a3a21c0f9c3fa103a3421cac9bf7a0a3a2ec1b539bd9a060a2bc1b889bbea026a2361b229ba6a043a2481bd39a33a0a4a1811a00000080c9000080fe1cbc2082227125292199253227e829912124256e27392af721ba2411271d2a3d2198245d26922a3e22ac238b25dd2afa23f6214f25af2a1228a02089242b2b702bc31e2f23822b112d301c9621fe2ab92d010e851eb52ad32c02988c1bf62a5e29109d5110922a962023a08e968d2a93a20aa2d19c612a94a32ea371a0f029a5a277a490a2e129dfa29ca4c6a38629e4a41ba57ba4682943a4e7a59c9f5929f1a49ca52b2bdc2855a590a56f31cc2849a43ea528329428c5a405a55431702874a362a5a5304928b8a4b9a5412f0d28dea349a6d92c2728b2a415a6ac253427a9a20fa612a8db2691a467a6cfad672695a452a741b0c326c6a1d9a734acb726d6a2bba624a95925d1a140a68aa8a024d9a151a6d7a86d241da23ea6b5a8152428a225a689a8b123b1a130a688a842236ba127a680a8ee222ba1d8a554a84222eca075a51ba8d621cda045a5bca76e214da0eba45fa7e320e69fb5a4eea691204b9f8aa493a63320f29e68a439a6dd1f819e37a4d9a5861f7e9e10a49ca5fd1e589ea8a34ca56a1e1f9e33a3fea4091eb19da9a2a6a46e1d0b9d15a23ea4f61ca69ca9a1b9a37e1c789c68a165a3371c6d9c65a11aa3151c779c56a1c6a2d61b3b9c02a1bca2ac1b469b99a017a2f61a0000008077800080cc1c5b213523272558215b25eb26dd296321e524b026102a4d218f247d263d2adb200824e925852a4f20d6223c25b62ad21f2122d824c92ac420c220e623302b8f236c1ef221f12a3d261f197620a12a8928e094a01c292b2d28419b9e1be72a23253a9e1d902e2a701a76a0f09aef292ea077a2d69f0d2a34a1d2a3aca1262a7fa11ca4faa1cd294aa346a4f2a273292ba4b9a4d9a37b2982a534a579a35629eda4efa4b4908428efa40fa5b42d7e2885a539a575326e28baa5fba47b32592821a38fa57e31612812a4eca55c3045281ea4b9a5c72d8f27baa3f4a51029372771a382a6f4a51527f7a23ca625ae5e265ea37da6d9af1a26aaa062a6aaa97225dca249a6d8a8ff2409a3f6a630a92625a9a139a6c3a8632422a269a60ba94a247ba16fa6dca81f243fa109a684a8842316a1e5a558a80b23bea0a1a537a8662268a059a5cda7da2127a025a570a77e21d09feaa438a700219f9fc7a4eda6c020569f8fa4aca66020539f58a458a60520019f21a405a68f1ff69efba3ada50b1f839e97a359a5881e3d9e4da30ea5361e769dbfa2aea4a71dd69c70a26fa4651d2e9ce5a116a4dd1cee9b2aa11da3121cb09be2a0a6a2ca1bbd9bcda053a24d1b799ba9a051a2161b649a41a035a2de1a00000080a0800080fb1c2b2108232025dc201c25d826bd294421c024c326ae2924219d24bf26f829032167248426382a8d20cc23e725832a611fb8222125972a7e1d4a213e24cc2ad91c4b203323dd2a6a1c541cc720222b941c038e6e1cb72a411b6c9ade15332a210d0d9efa98192a939958a0a99c602a789d39a2ca9f2d2a66a022a3dba1ce2915a2d4a4bea3102a19a427a51ba4ab2921a4f3a460a4412991a436a580a44229cca46ea54ea4e3287fa366a543118028e5a233a59d2f852827a3e4a50b336628b7a2b2a5b132a228fea2c3a5523158285fa4f3a5432f0e2887a317a6c22a97274ba280a6f1a41527d0a29ba6ddaebf26a0a2f2a546aeb52539a464a6dda88e255da43ca6a9a83925caa147a6c1a8e2245aa10fa675a86224b4a125a682a83d24b6a153a69da8132481a143a6aba8bb233da11ca6a7a83b23e9a0c0a587a8a02293a081a534a8192232a015a5a8a76f21b49fbfa418a7f3205f9f77a4aca671200f9f54a465a60e20039f29a437a6831f959eeca3ffa5121f719e8da3a4a57f1e0c9e0aa336a5e61de89d9da2e8a48b1da89d59a289a41f1d259de2a125a4cc1ca89c89a1b7a3711c759c4da157a3221c649c47a118a31d1cb99c59a1e8a20d1c829c26a1eaa2041ccb9bb3a083a2b11a00000080718000804d1c3b20e721d724f4202825a4260f2a81211c2500272f2a2021c824cd262f2acf207b246826532a16205e23a825582aa31e3a2182245e2a2c1d431fee225b2add19051e4221542acd16cb1a2c1f8f2abf10c50d171d2d2a2f9709996f15fb29b59ace9d68989729489d7ca0ec9cca29d89ec7a19ba07829fea0afa277a12f2921a108a40ba25529cba134a481a205298ea2c3a46ba4ce2861a36ea56fa5b82828a4c5a5b4a5982802a39ea61ca673287ba450a57c20ca278ca3f5a46031222855a596a51d34362826a274a5fb3266275ca353a5173154273aa261a5cb2dda262da583a686a0f8267da460a76aafc82662a4f1a531ac4025eda2e7a56ba8052537a2aba6b3a85825eca2d9a614a94d25e5a430a657a88d2460a2e2a57ca81f2445a2fca57ea8012422a202a664a8b12395a1caa54fa8f22228a183a519a85a22eaa06ca5f7a72522c0a043a5bba7d12174a00ea565a7452116a0cda4dba6e320a09f96a497a674205d9f73a457a62c20fb9e4aa413a6f51f9b9e20a4b6a5621f4a9eb9a362a5bd1e139e3ea30ba5521e9e9d97a297a4ab1d2b9d21a23ca4461ddd9cc5a1eca3e41cae9c95a17da37b1c779c59a135a3571c7e9c26a1d0a2e31b0d9caaa079a2181b279d90a0f0a1161a0080008071800080821c18210b230e258621a7253f27e4290221ee24d0269729bc20bc24c426b82987207a2475262a2aa51f9e23ed257a2ae71dd4214425942a5a1c981f30248e2aa818031c9f206e2a8810e90dd51a532a829368949f15322a4399f49aba95532a209bda9dd39a322a529d25a06c9e112a019f7ba12fa09f2968a0daa2bca16b2913a10da42aa32d29a7a172a44ba4ec2819a295a4a1a4a0285da2dca499a49328b9a2dfa40da55a28eda320a58ea5182811a4a9a5b9a68627d4a280a54f23372772a3d8a58832fb2775a314a6ba33612782a349a614324427dda406a5682ed425dfa1d3a53aa79526b3a48ea6caae8e26d3a3a4a5afa8662539a338a6d8a8972513a372a6a9a85725d2a2bca585a87e247aa157a67ca8b72423a253a694a87924bda131a67aa82d2480a13da67ca8ec2331a110a661a84623bda0c2a525a88d2262a094a5c9a71a2216a061a592a7be21c29f2ba559a752217d9fe0a4f8a6f6204b9fa3a488a68120609f68a42fa622203e9f27a4d2a5b41f139fd0a383a53f1f849e44a31da5931ef19df6a2dba43b1e569d86a29ea4c21de49c4aa270a48d1d7f9cf4a154a42e1d519c96a1ffa3ca1c559c2ea1f6a25f1c4e9cf2a065a2e41b329cbba092a26a1ba59ccaa089a2081b00800080a38c00806b1d44213923ec24cd207d25322774290a21c5246926532998208a2425267b295a2065240826c629072000249e25152aa51e1222d924342ac11c7320a823022af919701de721062a27135f143f1ef82902959c9ae315d52998995a9e0a90d729309cd29ff99aba29b09dfea06b9e8029aa9e07a2a2a0582926a007a315a22e2913a119a478a3d728bea16fa43ea4a728f6a1b4a46ea47d281ea297a482a4262827a2e0a400a5d127b4a240a50aa6c2270ba4c2a580a6a627c5a125a5d4a4152751a29ea47f24e426fca126a586310c277da22aa51b332f26f1a178a50d300d269ca3e1a622a70d273ba0e4a463acc624cda151a432a63824caa26ca5d3a7f4246ba365a6c0a862250da212a6a0a8d3246ca165a691a8ba248ea140a671a852246aa110a654a8fd2394a112a665a88823aba1cda531a8f62262a1a7a50da84822e5a08fa5f6a71522a5a056a5aba7a12155a013a544a71b2114a0cda4d0a6c620819f8aa470a64f20449f3ca416a60420b59efea3b8a53b1f499e7da369a5c71ef39d20a30ca5391eda9dc2a2c0a4c01d6f9d3ca261a45d1df79ceca10aa4f71c799c81a16ea3aa1c229c20a1e8a2281ced9bcca08fa2f71b019cada02ca28c1b8c9b45a0daa1db1aec9a05a09aa14c1900002a00b2084280ab1db021f7234025e820e224762608298c209f24892619294e20c12490266e290b206c2443269529251f0924a525f9298b1d3e228124332afc1bcc1f0123142a84182b1cb220042a2d10268e891ce82961963b9c1590b9292d9a449f989c9829819c0ba18d9f5f29e39d11a2c7a032290d9f97a2b6a1db282da02ca396a2ae28c3a00aa478a36d2838a152a427a447289ba183a477a40f28a5a1b9a4d8a4c4278ba19fa4fea4992785a1b9a411a55b27d8a1c9a483a54c2754a2e8a47ca5d0264ba463a4d6a4a92507a346a5149a7626ffa08aa4fe2afa2519a27ca4c9294a25aca050a50baa762553a0b7a492a778249f9f77a422a6a42303a2b0a50ca88a2444a19ea5b4a74a246fa24ba5fea7032404a20ba62da876249da1f0a523a8492471a102a659a8062462a104a65da85c2321a1eea524a8dc22c2a0cea509a85e2289a0aaa508a8fb2145a06da5c1a7982110a027a56ca74e21959fc7a4eea6c020209f73a47fa65220b69e15a404a6bf1f489ea0a38aa5fa1e109e2ba31ba57c1ec19daca2cea4e41df79d77a294a4b51d079e41a25da4611df19d03a22aa42c1dd89db7a1f6a3d81c7b9d6ca15da3791c059d17a105a33f1cee9ce1a0b7a2c81b359cb7a0b8a24e1b3e9c65a0f2a1881a0080a089ab89c781f61f97234e25f026b61f71240526942854208f243b26d52828205d245826e72868209c24aa269929d31f6b2456260b2ae41dad220625172a9f1b5d202223ee297917fa1a991fab291590c5972e1664297098cc9d27992b29469b65a0a29deb280a9d7ba14ba0dd28059e78a2b9a1ab28e19e03a399a2732807a03aa376a35d28a2a007a4c8a3282806a11aa410a4f42773a159a472a4cc2796a164a496a46d27b7a168a4dea4e22692a16da4f3a46026caa174a40ea5ea2527a291a470a5942565a3e8a4b7a552257fa35ca587a738257da133a554a43325c4a040a34ca44023a99eb4a304a64a2381a0a8a48ea52924b9a29ea4eda61d245da1b0a4c3a69f233da111a532a72b244aa236a581a73b24b5a2f6a54da86d2421a287a6a3a87c24c1a16ca69aa8552491a151a663a8092453a15da665a8a3233aa13aa65ba82723d4a0cba526a87c2273a063a5a9a7d02125a0fca438a72221d09faaa4baa695206b9f6ba43fa63f20619f20a4cba5bd1f289fdca37aa51c1fd69e85a327a5911e529e1aa3eaa40b1ef79daba298a4871d469d1aa23ba4fa1cba9cc5a1f6a3b51c829c88a1a4a3701c6d9c5aa146a3381c489c32a128a3251c5a9c20a1c9a2b31b879bcda082a24c1b859b89a086a2af1a00806904110e9d8a301f0f23e3249726991f9924fd25ae280c2085248526ea28cc1f6724672602291d20c024b7264929811fc624c526d1291f1efa23dc252d2adc1bc920d923c6295716d0191e1f092902934f9b48908528d29927a0c59e3428089bd1a0cea0ce27519c69a128a1bf27269deea1f2a1d127e89d50a21ca2ef27969eb2a2c6a2ec275e9feaa225a3cd2716a074a3e4a3892782a0e7a34fa45c2792a027a473a40527daa052a494a4aa262ea155a4b8a4522699a143a4d6a41426d8a13da405a50c2626a270a42fa58825e4a191a4a2a51d2520a198a491a5542469a262a4fba4482320a19fa476a5192355a15aa4c1a55e2213a12da4bba50a2202a161a41ba61122c0a0a2a489a6da221ba143a5bca7ed238ba120a65da89c24c4a1c6a6b2a8db24b2a1bfa6b1a884248da167a66ea8e72332a13ca63fa84123cda0d0a505a8bd228fa0a3a5e3a74b2288a05da585a7d92166a006a538a7582145a0aba4b0a6c02028a03aa432a634200ba000a4cea5af1f0ea08ca37aa5141fd39f23a311a5761e459fbfa2c8a41b1e869e9da29da4d61dd79d3da255a46d1d3e9dfea123a4141db49c95a1bfa3a81c6d9c4ea14da35b1c4a9c03a1f3a20b1c409cc9a08ba2801b099c95a05ea20c1bc19b32a0a7a1cb1900003e0cc4106503b71f67233e2598267c1f152465250228971fd62395254428ca1f0e24bc258e28931f7524452616298d1fe524bd26e6296e1f0c253827bf2a531dec226325e829aa13c28f5a1a4e28659937a10ba1eb263c9cd7a255a31d26b49cefa2f6a23d26499dc9a2f2a21027aa9d98a27da23027ff9d55a2a6a26327729e4da261a274277c9e8ca291a27e27ef9ecda2e7a2992703a0eaa292a368277da041a3d5a330279fa07ea30da40427a6a08da354a48f26f1a0e8a3c4a45e2605a10fa4f6a40d261aa132a439a5ca2501a12ba455a55c25a4a0eca320a556243da065a31da5ab22d69feea2f6a4782101a002a3eba475207da036a323a56220aba04da360a59f200aa10aa416a6a421f6a110a552a76723a5a272a68ba8da249ea23ca7e7a8502527a2f0a6b5a8d2249fa1b6a695a8852468a17ba657a8132406a1d2a5e3a7d02289a039a53ca7f6210ca0dfa4b1a64f21569f83a439a6c020fd9e33a4d3a54620dd9eb4a370a5a91f799e2fa311a5e51e459ebba2c4a44e1ef09d76a281a4fb1d6b9d18a25aa4811d119de7a13ba4311dad9ca5a116a4f81c659c44a1a1a3911c149ce6a01fa3221cd39ba7a08da2ba1b8e9b89a044a2681b9f9b6ca00ca2191b5a9b66a047a2451bdb9a3da035a2da1900805188de877c873e1e0a220c24672653206923e3240728441d5e219f23dc26631d11228224ce27e21ded22532543286b1d3f244326532926207a269f28d32aa72058275c296c2bb594279e719caa269a9e17a634a7df1ca29dcda473a51e20339cb5a269a2c224629c5da1fba04e26b49c3ca1c4a04a27e19c60a101a1ed27929d4ca158a1f127e09dcca1a8a10228939e06a25fa2d527049f7ca2ada27a27a69f8ea298a3222721a05ea308a4ce2693a0a5a371a47e26d2a0e3a38ba410260ca1f0a3a1a4942557a110a4e7a4182563a117a41aa5c82405a1faa304a51a2471a014a3bba426222fa022a25ea4ef1f07a05ca197a3f71c849fc6a0b0a236197f9e00a0e8a1291c829f21a16aa36e1f70a1b7a498a6372393a2d7a73da9b92596a26aa8cea9342664a263a7cca81f253ea14da679a8122494a0dea526a819237ba025a535a7f2217fa0d4a4bfa664211da08ea470a607217f9f34a41aa69420b89ee1a3baa50e20779e89a35aa57e1f129e1ba316a5e61e109ecba2c2a45c1eff9d64a267a4fc1dab9d01a21ba47c1d579d8fa1ada3021dd59c3ba138a3b61c859ceea0e3a2601c0d9cb4a08ea2101c9b9b6aa043a2821b0d9b34a0f9a13b1bf69a03a0c1a1841a6a9ab39f94a1371a3d9a089fdba0b0180b913897709619940f1d77203a22e224f41d1f21e422bd269f1d842056229e268f1c521f81216d26231bd51db5202b26ae1b001d9f200627ed179c1a271f00270818ea1ca421b72b8a0f0c95c121852963958b9cdc909b28e194069b81992e27ee98459d349c36281f9afa9d7c9db1272e9bb39eaa9d82271c9ca09fc79eae27cb9c49a048a0a327569ddea0daa08527059e83a1c2a16727e49e15a254a23427659f84a21aa3c626f89ff5a286a3812645a040a320a40b266ba0f1a376a4bf2562a017a4cfa4592568a01ea421a51725b2a033a441a5a624e3a0eea340a5c123e6a04aa3dba4922259a1f4a190a3882063a034a115a3e81ccb9dd39e75a00b0c829a22148f95a7a0399ac60f1d919da03ca0a9a479a69721c0a461a9bcaa5c2837a426a98eaa2f2749a46da717a93b25f8a197a5e2a7c7237fa126a5dda69f229ca0caa4c2a61522cc9f7aa484a66421439f0ba4eaa58420369f6ea350a50e20dc9e26a305a58a1fde9ee6a2c9a4301f8b9e98a2a5a48e1e439e45a26ba4021e9f9dd1a148a4701d419d87a1e3a3091dfa9c3aa14ea3c41caa9ceca0e6a25e1c8b9cc0a09ea21a1c4f9c9fa04da2fc1b2c9c77a031a2991bcf9b52a01ca26f1b709b3da012a2e21af79a13a0e7a19e1a049a829e8ca0e41800804e864587b801301c5c1ffd200f24431df820b2223126ce1c5e204122f025191c6c1f6d21b7253d1b161e7f2062259819201ca41e4b244d155117d31adf1fe30af90f5d14ce19280fa611b9162420f60b770f831867257590d6957b0c2427f3964e9b2c995c27f299d79de19c8427c69bf79e889e3b27689c31a08f9f0127079d81a08ea0db26aa9deba003a18226319e5ba180a14026909e8fa133a2f825159f0ea2d7a2d625a19f73a2ada38c251ba0d2a217a4432531a005a364a40b252ea029a389a4af2435a037a379a4712425a01ba39fa423245ca040a3b7a4af23aba04fa3c7a44f2381a1b4a3cba4b423d9a166a3fba4d6224ba1ffa17fa472218b9dd3a228a561217f97c020bb229da438a1caa264a5501ff0a426ac6cadc62a609efea53aa84524989f99a3cda56521cd9e33a32da50421639f80a34ba5b820969f6da321a583201d9f0da3eaa40d200e9fd1a2c7a48e1f8a9e99a2a3a40e1f449e5da28ba4a41ee99d0ea253a4f11d7e9db3a11fa4621d579d67a1bea3f91c489d2aa13aa3b21cfc9ce3a0b8a2531cd39c9ba075a2ee1baf9c6ea034a2a11b879c51a000a26d1b5f9c46a0e7a15b1b219c30a0c0a1001ba99b16a099a1d61a7e9b0da078a1951ad09adf9f65a1641a0d9a0b9fdca035190000fe00e0056103021c431f78215a241e1ced1ffc211225ca1b441f7221f8247d1bbf1eec20ec249c1a721d2d204624d5173c1a241de7213214f515b1195f2048129414b018bd225b121614a21995257b0c9090f616fd26a3915598278c0a27df96649ba598c226fb98449d6b9cae267a9acd9e019ea826329b779f919f75261d9c09a0f79f3d269b9c43a05ca0f025049d91a0b8a08e25619da6a0e1a04925cb9de9a03aa1f424d19d0aa1afa185244f9e3da119a25724c89e7ba14aa23524b29f9ca178a2cb234ba082a1aea2012358a0a8a1cca2b9225ba0a2a11aa3692230a093a140a31422c59f9ba199a39b215a9ffaa12fa462217d9f11a23fa43a2112a1dfa283a43a211f9e2da1cfa2a41f658a2195259821152b88a08eb994e30fe797589bee9da0190f9d8ba0cca2481e279efda10ea47f1f969e14a248a4541f2e9f0aa246a42e1f939ff6a134a4bc1ebc9ec0a1e6a3681e829d72a179a3fd1d609d3ea15da38d1d369d3ea130a3471d319d15a106a30d1dfb9cffa0eda2c71cd49cc9a0a3a2751ca19cafa07fa24f1c8c9c87a062a20e1c689c6aa036a2e91b559c52a00aa2a51b219c24a0cda1201bd89beb9f96a1b41a7e9bc39f56a14e1a2c9b839f2ca1eb19e79a699f07a1d719249abc9e75a0fb1800001810f31368006a1c56208e21e023811c8b201e222d25e31aba1ee72063240c1a351dd81fef23a7188c1be01d94223a16da18ae1bd0202e14c717d21a40223713f616391bec248311b712ae1a2b26bb05d58977189b26428f1595fe116526c3946e99f9914a26c797269c6f982e2658998f9d2e9c0d26609a349e9e9de525079b239f0e9e9d25cc9b8b9fd89e3d254e9cdd9f839fc6248a9cf09ffe9f2824eb9c04a035a08923659d12a091a0df22d69d3aa0d3a07022fe9d6aa037a12722009e84a09fa1d721de9dc3a0d4a1b421b79de8a01ea29a21ea9d0ea188a28221019e3ba1f0a274216a9e86a153a369219d9e98a16fa35f21a69eb2a1e8a32721be9e2fa269a43221089e11a251a42221a59c54a144a33d202a9b1da0ada1081ed49ac89ef8a0a51cdd9b7a9eb1a0df1ad39ba99e2ba1cd1b089ccd9f0fa2731c2d9c47a078a2c91ca09c90a0dda2f01ceb9ccfa022a3411d449d03a149a3401d469d03a15aa32e1d169deda02ea3061dcb9cb8a0f3a2b01c8d9c89a0aea2721c6e9c74a07da2321c549c5ca056a2e31b4a9c46a03ea2a31b4c9c2ba016a2721b3b9c1ca0faa13f1be69b01a0bda1c81a849bca9f83a1671a349b6c9f42a11a1ae39a1a9f05a17d196b9a059fdea031191f9a7c9e84a04518fd243118131c1118ca2ba01f09230225022d7021fe220828bc2d7221c922fe284e2ec0204e22cc282a2c081d821d0827c927dc18e41a84210a240c171d188487ea21a2175e135d9afc1fc21860178d9d1b1f0000a8100080c724271cce1effa04a2e142676261fa8a9a53ba250a0dc248daeb4a8eda6592a07319fa372269a2961336e19de2efe28a2ac5d9e8b2f912937abb4a667303e2b49acd3aaf72b8627a8ac4ba76123a91deca8caa5de9c7c244aa31ba510238a25d4a106a53828bb2542a12fa52a280f266ba011a5f827cc256ea05da5bc27ac25a69fb2a4e92286245ea129a687a37a9949a6b7a92eaab11a7ca612a943aafc2a00a4aba44fac5e2889a1aca440ac5425d89e32a631ac77243aa0aea507aa8822f09ed2a456a7b9216a9f5da450a65d21d39f8ea49ba67021c99efea3a3a5b520b09da8a2afa4ba1f5f9d39a236a4db1e2b9dfca10ca4981ed89d40a225a4a01e909d0ca21ba4531efd9cfea109a4f41d8b9cc2a1faa3801d609c95a1bda3441d479c45a17fa3d71c629c15a142a3aa1c719c24a11ba37b1c769cfca0eba2381c0d9ceca08ba21e1c119b97a0d6a1951b419a30a04ea1b91a139a10a05ea1541a419a09a073a1481a6d9afc9f55a1d519919a0ba031a1081a479a8e9fb2a09119571900009d110000642ba1228f2402271c2ed824da25f028df2ec824ec253329fc2ec5210e22b828142ebb156b170c28962b1b98af97c321dc28928cf31185999a182c17cd12649cf3073b102319349572106014a31c8594ff1bd61f5723efa0ac1b972298248ba5181a2222e0257327591c2ba283937e2cfa2c2da4ce20452b5e35888f5b2d102a5ab0e9a01f30832c6fac30a49430b72ad5acc7a85a2e152804aca1a88ea33e25faa800a867a6d126d6a6afa7b01c37289ba61ea6712213271da832a5d62b9f2624a240a4a9228f2560a1cca1eca8e124b09e5899692992238b9f2e9a2b2e4823d2a1319dae2678244da167a3e1ad412990a018a6a9ae512934a165a70eae952799a0e5a79dad8b2419a14ba72fac39222da068a67baa6b215e9f6da5a5a8e220049fd3a409a7ba201f9f67a439a68d20549ec0a3b5a501201b9e0fa316a5331f6e9ed8a2daa4111f279f31a3e1a46e1f739ed1a2a9a4c61e569d48a239a4291ecf9c03a213a4d21db29cd4a1efa37f1dc29cd7a1bfa33b1d779c9ca181a3061d4d9c80a13fa3bc1c539c7aa11ea3a81c149c3ca1cda2541ca29bfba06da21e1ce79ab1a00ba2881ba89a80a0d7a1021b829a54a096a1d11a7a9a28a07ea1591ac199cc9f60a1f4190c9a739e24a03617401211056e0d8f08df285d2356250f28c52c8124b12584296f2e2a240125cf294b2f672290239f294a2f951f9f201729142e931acb1c1526a72cdd1a0b1c1e1e1a2c531d9f1e30994f24041d001f049dd820e717191e1096b629ff89a39347224f27b99e889c89279222659fa7a2d126fa20c7a175a27d29282c3aa2879c6c29a031f39fd529c7287faf26a48f2cd1293aad11a58e2eaf2975ac4ea65130992885a95ea70ca38e274fa81aa83ea9a2276ba6c9a688a2a4271ca529a69c279a27f2a474a5172c192740a617a5f8290227f4a198a3a2257a2666a035a2ef224926b6a1b7a25c2b1426c39e37a3781ce72440a0daa3daad2625929e3fa5ebaf362695a185a7f3ae1026d9a19aa737adbe246aa127a7e1ab69233ca1eca628abc722eca076a6cda93e2286a0a4a584a8e72136a0f4a45fa76021329f76a4a7a6c720889e3ca426a689209b9e1aa401a656209d9e04a4c8a53120e39d78a344a59d1fa59d0ea3d9a4ec1efa9c93a28aa4361ead9c3ca23ca4ab1d4e9cd4a101a43c1d3d9c91a1a7a3de1c3c9c7ca16da39c1c4f9c72a154a3651c0d9c36a115a3151ceb9b10a1a4a2f01b819beba04aa27a1b309ba8a015a2f21a079b90a0eea1cd1afe9a69a0e2a1711a6b9a4ba0f6a1461a4f9af09f4ba11b1ab7049c879e8016018b1f6e1df21e4920b129e12307250929842d2d245d25c4292b2ff12254249329fe2f2721732231291e304f1f9820dc28ad2f851dd81fd428062f8b1c1b1fcf28462e1f1c781e66284e2dbb19c71d6b28312ca693610efb28af29b69dd29d172abf274da005a1272b022269a126a0232baea37ba28b24502b10a96fa2e526422ce2acbfa4ad2bd92b8dacbca5df2db12a4cac54a6a22f872998a8efa50430ce28fea6e3a51f2eaf2871a65ba5e62d3828ada5cca5f32d722837a42ca5c52cca27c8a3aaa5722b282848a354a68d29d028c4a1a2a4942244287fa175a489a47b2792a1dba434aa2a27cea158a55bace4263aa3f4a5e2ad1a26a2a1c9a68aae6a25e1a0fda6ccac7b2400a11ea753abd023c4a02ba748aa6a230ea195a63da9a022e7a035a6c1a83f2288a0dda5aba8d32118a041a507a82821bd9f8fa4bfa66b20ff9e33a430a61120369eeda396a5941fa89d8ca33fa5211fa99d7aa337a5cc1e5b9d53a323a5801e509d1ca3e8a4121efd9cc6a2a4a4b71dd99c6ea259a46d1dc49c47a223a4181daf9c07a2caa3c11c5e9cb5a166a3801c0d9c71a1fda24b1c839b35a197a2f91b569b05a170a28b1b539be4a05ca26f1b7b9bd2a022a2e01a0a9b8ea0eda1e01a909a4ba0eca1671af1847290b4892989801ef21e6e20e22163265523b1240529cb2bf5231925d529192e6a23d024ff29f32fe5229524742a7b30c4214723632a3d301220a121e729e22f341f64210c2a312fc71efd20ee29522e5b1da221aa29eb2c8a1a4920c429412b700e791d632a39273f9b53197e2a6c1d14a0609aec2adca1b2a2021ddb2a3ca959a4f020f82a96accfa46727e12aafac32a6532d902a5aabf4a5072fcf2934a9d3a63430d12983a77aa6b42f6d2987a62ba5342f62288ea657a5ff2d7328b4a463a5c02c692836a5f3a56e2ca6283ca409a6a729a22842a3bba51f243d2865a3a1a5f1a3c927bfa28aa5a2a92a2763a39aa56aac6e2668a246a6d2ad4626cba2d4a640aec425cba1cca6c2acbe24aca1dfa652ab5a2496a1cfa6cbaad22361a18ba6d6a91e2342a124a621a981221da10da6a8a803226ca059a505a8402138a0d2a422a79d20f49fafa4cea66d20aa9f91a482a64320399f54a42fa6fb1f9f9e1ca4c8a57e1fe49dbca375a5c81ec89d89a331a5891e999d3ea3f2a41c1e479ddaa2aba4c81d139d7ca273a4791dff9c34a230a4171dc49ccda1d3a3c31c939c77a132a38a1c299c20a1c6a2231cae9bdba072a2b31b4b9ba4a05fa25b1b0d9b7aa045a2f91a5e9a59a0a0a2db1a249b2fa096a1fc1900801184bf81b185051ee21f4121e121e5239a243e2680290b28d0241927552ae02b1924cc25ef29d52ed32364252d2a82308c22c024452a92308e212e24db2a6f30bb20f923db2a1c30e71f15238a2a542fd31c5622432ae82df017ce21992a1e2cd094ee1f772af428679dfe19992a2a22bca03198282b43a2e0a20898d22ae1a85ba4e49a3d2b26ac4ba5ff1f892a07ac70a6da29d52a5da961a68b2df02933a94fa61130df29aca764a60d30da29aba6c7a5562fc328fea5c2a5cd2e95284ba581a5c32d4e2806a503a6912c7d287ba42ea6f929682882a416a6f924262842a43ca65da1c7273da3eba5fea80f27aca388a676acf92627a32ea7acaebc2626a35fa7b3ae0426dba2aba6d4abc32466a19da622aa4124d6a1f1a610aa2524b7a1d3a6d2a9a0233fa199a64da92d23baa006a6d4a8612252a092a5a0a8d2211ba03ba575a85421a89fd4a402a8dc20459f92a43ea78a20d59e6aa489a62e20b69e37a4efa5ae1f8c9e09a4aba5441f619e9da345a5ae1e109e46a3f5a44f1ec79de9a2a4a4d51d3c9d72a257a4701df49c20a21ea4071d7e9cc4a1bea3bc1cf79b6ca162a3741c7b9b34a126a3271c579bfea0d9a2d31b229beaa0afa2b31b4d9bc4a066a21c1bd39aa1a035a2e61aee9a5fa0b2a1ee1a00800080008000801919c61a471c201d49223425df26aa290b25af2485265b2a6c28242426265e2ac62c1224f325c52aad2f9e227825d42ac43054218b24a92af030fe202324cc2a6c306a1f4323e12aec2f341dc721db2af62df2141a20f42aab2c2a950f1f282b622ac69b861ef72ac82547a0421d272b69a2c2a2329ad02a80a983a4b69ec52ab5ab63a5ad9a7f2a4eab47a658258b2a72a897a5112b752912a86ea6b92fa3294ba778a67e306c2998a6a2a52930b12899a5f4a59a2fe02817a5c7a5c42e702824a5cea5d72d6028bca405a6332c542884a40da65627132896a426a6b09eb42773a3ffa554a9d72634a452a6f7ac522636a4f7a618af272619a389a75baecd2527a1b4a6b6abb524fba01ea7a0aa822484a170a77daa712408a19aa684a96023c2a017a6c9a87522c8a000a67fa832229aa0b5a565a8be2179a046a514a83e213ea0efa46aa7c92017a0d0a4e2a69c208b9f8fa492a65020719f6ca443a61620e09e2da4f6a56f1fbf9e00a4ada51f1f739eada36aa5c21e179e58a329a53a1ee19d12a3f9a4d51ddc9dd5a2b7a4a31d819d81a28ba4291d609d12a220a4df1c229d98a124a35c1ce59c1da1a6a2991b449ceda090a2681b209cd4a06da21e1b4b9b9ba043a26f1a0d9b20a084a1901900000080ce8000807619e31a361c081d552254251227b829112489257527c82abd24a82408275a2a85289c243f26162be32cd1222b259b2a1f30cc216a24cf2a12313121ce235a2bd03062209e23ab2b4430981d6a22952baa2e1a15371f632b312de299861bfc2ab32a6e9ee216052b1127eda0b910e72aa6a0eaa25598152be3a85ba4839efc2a4faaa8a497a0a82a70a801a51518482aeca7f9a59d256429d6a7d3a56f2d6c2927a7cda57430632992a4f7a5fe30f928bba510a67130452950a5c6a5d52f8428c6a41aa6952e792870a486a6b12c72289fa448a60829fc27b5a461a6aa189527efa236a610a9c226b4a23fa645ad1e262da377a7eeaf9c2692a379a734aee92566a3fba60fac0d2593a21aa79caab724d4a244a70caa8224f4a1dfa685a90b2451a169a60aa92923ffa00fa69ca89722dca0b6a562a8e621d7a0afa548a8b821b6a093a524a8792186a065a5e7a7182126a019a589a7b3209d9fa7a4bea62120929e41a434a6761f149eeaa3d2a5dd1e8b9d7ca37ba53e1e789d33a31ca5f01d359dcba2d8a4731d109d6fa28ea4041dac9c07a248a4b31c5b9cb3a110a4511c3c9c77a1eda3231c2b9c59a193a3db1b119c44a164a3bc1b1f9c22a1fda2651beb9b06a1cba2771bca9bb6a07ba2241a0080018186814b8198197c1b841c4a1c85225d25f327542946223e267928882ab9223c258d27712a0024fc24b426632bb227f422ff25e82acd2c4b215c25fb2a42302e205323f42a3031661e8321ea2ab830501b4320432bdf2f848eea1d132bc82db89b3a1c3d2b6b2b199f9510f12a3d2642a1a399c82a9aa261a3559eb12a06a990a4f9a0f52a29a93ea59ca2522a79a538a510a00e2ac8a5b9a5b59a2d2a4ba85ca56e2667292da9b2a6672e8c2969a6bba598313f29e7a476a52d31d5283ba5c2a5ae30a128a7a420a60c309d284ea56da6082e8028c1a409a6272bde2764a472a67e1f822703a3b2a6aea8232723a281a655ad5f261aa32ba7a6af5926dca130a7c4ace425b4a233a7eca94c25eea126a7c7a9e524dba1fca6b0a98024b4a1a7a667a92a243ca180a639a99f23e1a0faa501a9d222c4a0c3a5aca841229ba0cba565a8e72145a098a529a890210ca064a5eda73b21c89f14a57ca7c020389fc2a4cfa65820c69e67a463a6c01fac9e21a4f6a5441f2b9ec3a386a5941ee69d6ca331a5381e8a9de9a2cba4b31d579da3a28ba46a1dd69c36a22fa4ed1c639cada1a8a36d1c2f9c4ea132a3101ccf9b02a1aba2711b539bd3a05aa2061ba49bc9a036a2c01a649bc8a04da2f61a399b2ca096a1261a91000883798376854519a21ae61b5b1ded21c825be27d1294422f4253828ea2a4f22ec245b277f2af421c824a526002bdd23772324263d2bf5262121a225f22a722c811f78248d2be72f151eca228d2bba309c1aed20a82a55303f0ea91dc92ae42e1e9ade1b442b2e2c409e7810d32a6926eaa0c097c82a00a4dda316a0222b3fa863a41ba2b02a13a705a512a30e2aa4a3d9a4c4a3a0294ba6aaa51ca49e29a0a41da6bea16e29efa4f2a53929e62819a549a6d930f32841a5d0a5e931ad285fa6d6a586319c28efa4bca59c301f28e6a4fda5362fda2769a44ca6c92cb32767a56aa6eb252727d4a2a2a6e6a8c62618a4d7a655ae4c262ea21ca77cb00c26a3a1e2a74eac1226efa2d0a6aba9de2497a17ba6e5a84d2411a2c9a63ea932248da2b8a620a9f2238ca271a6c7a867231ca264a6c0a8df22b8a144a6a8a8782256a1fca57ea80522e5a0aaa54fa88f21bea076a51ca83a2148a029a5c4a7d320ec9fe7a448a75d20489fa6a4dfa61720fd9e7da474a69b1fa59e55a40da6111f8b9e30a4d2a5c11e619ee7a388a5331e239e7ca342a5e01dbf9df8a2eea4501d329d60a278a4dc1cd39ce3a115a4681ce89ca5a1bba31a1cc49c77a165a3041cca9c5da1eea2a31b9c9c16a1dea28e1b299b90a059a2161a1e0090818982d0829019271c8a1c921da121a3253127e429162248257b27782a98219f24bf269b2a52216a2477260d2be8208c23b2253a2bd1209f223025242b37259d201e245f2b912ac51dfc22ef2bcf2d001a55218e2bab2f8f8e2b1f052bf32e8a9b781df72a932c7f9e9790422a5f2752a14d9d5a2a08a408a4aba1eb2a03a548a36ba18d2989a3cfa49ca24b2a0ca4baa46ca36529b1a418a50aa4822971a52da501a422295ca545a57897f828a5a46ea5cd2c952879a578a52832732871a6afa56532492887a4f9a59a312e28d5a40ba65330e127fda307a60e2e31272ba539a65c28f02672a596a673a7bb2623a4f4a651aea926f4a2efa607b01c26d3a0c0a630aa632517a2bfa662a9d22447a2cea64da9a02405a29fa636a95d24efa1e7a67ca93e24b2a1b5a630a9012478a13aa6b1a820233ba1e7a57fa89422e3a0cda55ca810227ea09ba512a8a42147a05da5cfa74421fa9f1aa580a7c520c19fe5a42da786207e9fbaa4d2a62920549f7aa498a6ca1f309f45a455a6591ff59e1fa4f9a5d41e989ecda3a4a54b1e539e60a34ca5f31d769de7a2f3a46a1dbb9c64a291a4121d589cd6a129a48d1c229c2aa143a3e81bf99bf8a0e0a2b31bf39beaa08fa2281b2c9b8ba033a28e1a339afc9fb2a1d519748054814b8254816d18171ad21a2f1d48211a252927c429762172250728402a3421d0247127322a3e21a624f026a22a112108247326db2a3b208522b825f02ab81f6e20f024fb2a4721241ead24372b5b26031ad121762b45296998ea1da92bfb29759cf019d72a6a28779f8496882a0b21efa0d29d762a16a0a1a26ea0032a1ea1faa375a2fc29afa30ca52ea4e32916a63ca568a45f29c0a558a596a44c29cca455a5fea40729cba5b2a52da4f328d0a423a68e98f028f0a3b7a50d2f9028c2a32fa6b5325d282fa45ca6ed32862802a498a6cb3179285da45aa6942f002806a5b9a6e52a8927e6a290a680a6902669a30ca734af9a26c0a355a75aaf562655a445a680a9e42441a413a744a95225cea1d8a6aca9c624b2a1a8a63aa9622403a2ada6f2a82124d7a16ea6c1a86a23b1a167a6caa8132380a157a6d9a8b9223aa10fa6c5a84222cba0b4a582a8e22153a05ba52ca8632109a0f3a490a7bd20759fa2a40aa75520169f70a4bfa6e61ff29e46a482a6531f949e20a463a6ea1e769ee9a313a6611eea9d71a3b8a5d71de59df8a258a5771da89d73a2d2a4eb1c4d9d00a257a4931cdb9c99a1f5a3311cb99c6ba194a3df1bcb9c5ca159a3a11b2d9d6ca115a37a1bf99c36a105a36c1bc49b90a06da25c1a4c8076812382e181d5189a1a6f1bff1c0a215125d826a129c521b325c7278b2a5f21f0245927462a2021b1240a279d2a6a209f232b26b12ab91e7f2131256e2ab61d0b1fc823882a661a481c2721c32a741b1615c61e432b191ec597121b752a561ebd9c0b90e129fd170aa0649d93291d9b9ba17da00b2a959ef8a275a1cb2942a0e3a359a275294aa133a4c6a23a295ca374a49ba3d52800a458a50fa5cb280ea4c6a5e8a5a5284aa443a6cda5962878a3c5a63fa69d28e8a493a5471d0b28e7a412a52331f7276ca47fa5ad33ca27eda2efa51f336627aba4d6a42631e52558a274a59a2d5326b5a354a770a52a2762a4d0a78fb0b526eca260a544ad5424eca358a6b2a8ec244fa3d8a6c0a8fe24e5a2bba64ea9a92464a49ea6f6a86e242ca23ba6ffa8c02322a250a6bda8b0233ca264a69ea85823e6a127a6a9a8c8225ca1f4a585a84e22e4a0c3a54ca80422a7a086a523a8a0215fa04ba5bda71321da9ffba42fa7aa20669faea4e4a65520229f8ea47ca60520db9e64a442a6791f999e3aa4f7a51d1f649eeca393a57e1e349e50a335a50f1eec9dd0a2cfa47f1d6b9d5aa25ba4201d179deaa111a4b11cd19ca4a1b7a3451ca59c75a15ea3211cbb9c48a106a3c21b679cd0a095a2021bd69c76a021a29c198b00bf802882f680b9173b1a0c1bdf1c4521fd25b627ce294b2182259127132aca20e624ff26f329dc20db240b27852a2820df237426d22a581edb21b025d82a3a1c7a1e8a24b72ab81680196921ba2acd10f3943d1bdb2a429087993716772a4993fb9c3390152ac4979b9e489bf9296d9c48a0dd9d102a8c9e6ea15ba06229a7a0a7a2fea12b29f4a11fa47aa32d2947a2c7a441a417294ca30ca5c2a4ea2842a309a5bca4a62898a31ea5f3a46728c7a371a55ea5102849a5caa5a5a597273da59ea51325e52625a317a6fa32fa27c1a305a69933562787a4baa618329a27ffa46ea5e22e032699a359a60ba4ab2632a5aca659b012265ca220a59da9762499a25ea6cba91425e6a2a9a61ba9032573a262a673a96e2453a27aa69aa85624e5a289a69aa8172426a272a69aa87f23c5a17ba6a5a849235ea153a68ca8e422e8a00da664a83f227aa0c4a520a8bb2119a09ba5e9a75e21f29f51a58fa7f920bd9f0da525a7bb20949fc1a4c7a64b20999f7fa468a60320809f3aa40ca6751f679f07a4aba5db1ed99e7ea351a5601e5a9e1ea30ea5e61da49db5a2cea48f1d409d82a29ea4651db89c36a282a4101d5c9cbda11ca47a1c589c24a102a31a1c6d9cf1a077a2a81b199cafa09ca2e61a3e9dbea0b0a2ad1a8c87bd8dee8c1602521b931e091f7121aa2092252e276629352146254927f629c720fd24d226df29bc20ec24d1264d2a482039243a266c2a4a1e2622f724612aa41cf11f1823492ada18391cb4204a2a360aa194e61a392a2698209cf58fdc29ed9a8e9e5e96ee29eb9cfa9fa69cbf297a9e00a18b9f82292ca094a24ea17f2939a1c8a307a35d29b4a183a404a41c294ba2c8a485a4d428bfa218a5b6a4b128a8a200a5a4a4482898a23fa51aa5fd2715a366a54ea6972763a4d2a52aa6932782a132a596a4ce260ea424a5d7294427e1a29ba573335527fda276a51833912603a431a66630b026e0a33fa753a41127caa4e4a62db0672614a389a5aca807258da2eca533a8e8244ca291a612a9022547a223a69ba86b24eda18fa698a86424c2a150a675a8042479a142a672a8782383a153a69ca81c239aa111a681a89c2255a1e4a553a81522f3a0cfa544a8b321a8a086a51ba84a2172a039a599a7e2203ca000a525a79120e49fafa4a7a63a209a9f5ca440a6971f2d9f11a4d9a5ff1eb99ea4a38ea5551e309e2ca333a5f21d1b9edfa2eca47c1d9e9d59a27aa4fb1c229d14a22da4c51ca89caea1b0a3611c379c4ca122a3021c1d9cf2a0b1a2aa1b0e9cbca04da2341bbc9b76a010a2dc1acd9a13a0d7a1fa18d78ac38cb08bb709d71b4e1e1d1f6f2096205d251b27de28f5207b259127bc295f202525f526a4292720dc24a826f929761f1624fb25502a8e1def21a024442af91ae01de8211e2a9916f017c61e012ae189fe975116f229dd98f69d4399cf29029c71a0b19ea629659d6ca14da06029bd9e72a251a13429829f01a34ba2fc2891a00ea455a3d22821a14fa4bca38728c2a1a0a4a3a469285da2e9a40aa5442875a21da52aa5112861a2f8a43ea5bd278ba20ba58fa5712797a256a550a668270fa447a68da66b277ea4bfa42ba4c9251ea3efa4ca29e82564a48ea5aa32252790a51fa5cb30e925dfa3c8a52ea1f22500a2faa452ad76248aa158a4e9a6392332a26ba558a7332417a109a643a85924f7a284a513a8d9239da11ca664a82124dfa11ba664a8e323a9a124a69fa8b023b4a149a6bba82b2352a13aa685a8c922f7a022a65ca86922a7a0e9a53ba8f2217ca0a3a50ba8892153a05ba5c0a7222114a007a55da7b520849fb3a4f3a63120009f4aa47aa6a91f719efea3f7a5e01e409e68a369a5231e0c9ee1a203a5b31d4c9eada2c4a4631d6e9e74a276a4101d4a9e2ca24ea4d81c1a9ed7a123a4801c869d72a1b2a3201c189d2aa179a3e81bbf9cf1a01ea3571b4d9ca8a0dfa2ff1a2b9c71a038a2fd190080878db28e03026820e724b926ec27b220c22597272129b2202e2572273629b02014253b273029be2015257b27b02914206d247026192a931deb21d524df299f1aee1de721c829fe12600eb21c87290d935c9c31904d29e8991fa0b69c0d29689c3aa1ca9ffc288c9d4ca2dda0ea28a99edfa2c7a1c828a29f6ba39ba2a8285fa09da3f6a2782818a108a4caa3552884a13fa41ca41f28eda194a452a40a280da2a8a4bca4c22723a2b1a412a53d2731a2bda438a5c12655a2c2a468a51d2673a2eaa4c7a5f925aca33ca5efa5aa25fba535a562a5f424f6a2c8a59b261c27e8a41ca5e72b8c2601a899a501acf225a9a42ba5aea8de2473a47ca4f4a6b42339a1d6a475a78d23d4a0e0a49ca73823b4a109a5c9a7952369a29ca53ca802249ca28fa6e0a8462438a2c1a6eca8422415a295a6b0a8dc23cda197a67ba8482370a169a67ba8c922faa018a65aa8492298a09ba511a8a42154a041a59ca7fa2027a0e6a41ba78920bf9f95a490a61720959f4ba412a6931f4b9f0aa4ada5b11efd9e9ca352a54f1e769e28a3fca4c61d259ecda2bba4471d759d4ba262a4f01cfc9cfda11fa4911ccc9cbfa1e5a34d1cd49c86a17ca30f1c949c50a13ca3e51b629c29a1d4a26e1b549ce1a0cba2e21a1b9bb3a01aa36a1a008097914d949d08061f0224782593275d2024251927ee28a220e42451270d293e20df2438271c2954206125952795291b205e25b627332ab21d11236e250c2a171aa01d65213f29ba091d95b816be28d697009fe19c7b28a19a00a179a04028e99b91a14ea12d28d09cb9a1a2a13328b39d49a2fda15b285c9e63a23ca272285c9fd5a2e2a24b282fa051a332a33028c2a015a405a4ec2717a144a45fa4852791a171a48ba4272798a19ba4d5a40527f0a1a5a407a5db2665a289a44da58d26b1a2a3a472a57d2683a3cba490a55e2673a19aa4e4a58225c59ffca2cda42d237e968ea28da50422f89c35a427a7fd22b3a054a445a5a5223ea13da41ba6332203a15aa4faa59621d9a07fa45ea6c6210fa1c6a41ea7262260a198a519a85523c7a190a6ada83024e2a10aa707a93f24aea1e0a6c6a8ba2368a150a679a8dc2237a1f9a534a85122aba0bba501a8d62190a093a5dea7792183a043a588a70c2165a0d6a405a797202fa070a476a61020fb9f29a41ca6291fd59fe6a3cea5cb1e879f91a384a5571e079f2ba33ca5011e6b9ee9a2e4a4a31dc59d81a291a44e1d3f9d2fa253a4e81cb69cc6a105a4801c609c7ea1b3a3341c3a9c2ba123a3001c369ce9a0d1a2611bee9baaa077a2a81af69b53a088a1e6190080ce8f1b929700091fd322ad25f6263720cf24ad2671281120942431266f284d20c8247226e1283120152532276a297420db252528802a0120f2244727372ad5197a1c2c2089281c98f8a09ba07527719b8ea2d7a2df262b9c90a207a3a9268c9c1da27ea28127ef9cdda1e3a19f278e9d15a24ba2f827d49d3da24aa21e28749e2fa252a21c28959fd2a2c5a2352844a0b2a38ca35c28afa0f0a331a43e2813a11ba47aa4fc277fa1faa397a47d2758a125a4cca4222783a13ba4f5a4eb26d2a167a481a5d72661a2b6a4e0a5c2266fa2c2a44ea65e266fa19da405a61b2567a044a4e0a5092413a09da371a57a22d09f2fa364a5112150a039a355a5db1f9ca01ea340a5891fb8a0f6a21aa54c2008a1dea3f8a5322170a247a589a7952314a3eba6cfa8ae2484a2a3a722a9b424a7a11fa7eea85b248ca1eaa6b1a813245fa155a65ea8ee22e0a0a5a5d6a7f42167a023a51aa72a21e59fbaa488a69720819f69a420a621201a9f18a4c3a5951fae9e98a367a5db1e5e9e30a30ca5411e249ec6a2b9a4e51da59d5ca290a4641d5b9d24a26da4101dfc9ce2a14ea4da1ca49c88a114a47d1c369c1ea1e1a3151c189cdea018a3661beb9ba8a08ea2291bc89b7aa031a2c11a639b70a095a29e1ace9a44a036a23a190080008045890080131bb91faa21282405203424c7251328cb1d622295247b27421efc2234250e28461ed62314269c284a2047268d286a2abb218d286b2aaf2bf911df118c135028259e5ea65da73f200f9dd9a42da5fc218b9cd8a224a35525dd9b76a100a17427709c12a11ca02a28c99ceea069a03128189d2da1b8a03b28c19d5ca10ca12828229ea7a16ea12c28f29e2ba22ba2262815a080a2f6a21d2880a0eea2a8a30b28faa06ba357a4e42743a115a4a5a495278ea17da432a54527d5a197a4aea50a2714a298a4a3a58126e5a1a4a4c7a5ef257aa196a4e8a50d25d8a035a499a5f423b3a07ca346a51a22d7a0b8a2e9a4202083a0b4a12da4d11c759fd8a0eca2171ada9edc9f46a2161c66a0d9a132a4bc1ef8a15ea586a7bb224ca330a8a8a9542547a360a8d2a9a125a5a130a712a96a24f9a055a6aca82e23eaa095a5bca71922bfa01ea50ea766214ca0d9a4d3a6e020cb9f87a4afa68020429f2ba44ea60c20db9eefa3b3a56e1f9b9e81a347a5c61e899e05a3eaa4571e6c9e9ba28ea4d01d089e3ca23fa4581dab9de2a1f4a3e81c149d6ca170a3741cc69c2ea113a3411c3f9cdea0bfa2db1bf59b90a075a23d1b6b9b59a036a2fb1a369b2ba00ea24b1a839af29ff8a1241aaa9ac19f62a18b19ec90d7977198eb98fb1a811f37219123d31d51210723bf26fd1db120b322b5260a1de01f0722be26d21b011ef120882656183f1bb61fc3257d19261f9722f82a6c1c83200b26932b110a4c908a1c622a848e0297980cf6268b97ee9afb962128a598809cda993c28ab999d9d029c04288b9bb49e5f9d13282d9c929f8a9e0b28199d4fa02fa00c28c19df1a0aaa0fd271f9e77a1a7a1dd273f9f43a26da2e927bd9fd6a239a3902733a037a3b0a34527a8a070a373a465262aa14da4caa45326a8a049a41ba5932598a04aa46ba54825c7a03aa46fa5da24e8a045a49aa52f24d4a02ba479a54323e5a0aca3dea43b227da0dca298a407210c9fe5a10fa4321e339d669dfe9f32170d9a4f1ab218a99e6a9dbd1524912c9f60a1e4a50ba89823cea3e8a9ffaba227b2a31ca90aab7826d7a2faa6b6a8742497a162a578a76f22dca027a54ca7e12102a0efa455a771217d9f6ca496a69c205d9fdfa3aba50120149f7da32ba5711f199f27a3f9a4db1ee29edda2d3a46b1e9d9e94a2b2a4ec1de69d1ca28da45c1d9c9dc8a130a4f01c2f9d59a197a3711cd89cfda023a3241cc59cc8a0dca2cf1b839ca9a07ea29c1b639c97a068a2471b2c9c7aa03da2f91adf9b68a029a26f1add9aeb9ff7a1511a029ae79e05a1b71800800080ad820080bd19681dd81f8d211f1d1a21b02231260a1d9a209622cf254c1cea1fac217825a51bda1d7d20bf247618ef19ef1c6821110da4115516301b3010e813201851200a148514751a9b25740dc78a1c194127ca92f597c28cae274998309c44998c27389a569e849d7c27159c7c9f379f5327d79c7ba026a009276d9dcca0aaa0ca26e69d4ba134a1a426899e83a1c3a16f26e59eb2a13ea21e26419feea190a2b525fb9f4ca22fa364253fa0a9a2aaa35b2556a0e5a22ea412253da016a37fa48e2435a0f7a278a43b246da04ea3a1a40524a7a056a3c3a45623cca047a3d7a4b92221a133a3dba4872236a15da3f5a4672279a105a3bfa4bc21aca0e5a1a2a48220789b71a0b0a39f1e011c5f27ba2803a866a42ca98faa192649a469ab05ad56297f9b6fa4a2a7e421589e49a398a5b520f49f08a483a5cc20ac9fbca357a55820199f3ca31ba5d51f419f02a3efa4231f8d9eb5a2d3a4aa1e449e87a2b7a43e1e069e44a285a4c41d749dd8a151a43c1d6a9da3a1f4a3da1c4f9d3ba16da3811c0e9deda014a31f1cb49cbfa0c3a29e1b7d9c80a080a2501b4f9c69a060a22a1b399c60a01fa2051b019c3ea0e6a1af1a9c9b23a0b0a1b81a6f9b0fa087a1651ada9aa49f5ca1e819419a199fdba0131900806e8067044901a41cee1f2c2290246f1c5b20212380250d1cad1fe7212d25781b871e0021c22496197b1c4a1fd422b115c9186e1cad20311377173b1ae2214f15b717ed1b74257c1499139b1ae326240de29073152c2702924e998092fd262a97429cf899f1262a99d69d239dcb26be9a089f3f9eae26649bb19fc79f75262d9c17a014a00a26b99c4da084a0a025279d72a0ada019253e9e82a0cba0a124ac9d6ca0dca00224839d2aa0c4a0e522f59d55a0eba0ba22e19d6fa070a15c22dc9ebfa0b8a17022ac9f25a12ba2732249a028a167a22c2285a076a1f8a2f62148a07da15aa3bc2152a0a9a1e6a38a2124a00da239a45521c89f12a23da4032129a082a264a4de2001a041a337a50521b19d4fa1f7a23e1fa78c38918c94a8102d902692209774102b9bdf9db4a0ca1b3a9e7ca1b5a3841ed49e31a253a4d71ea19f1ea240a4c21e37a004a23da44d1ea79fe5a105a4181ee99daca1bfa3b51d909d6ba18ba3621d529d5ca17ca31f1d329d32a141a3c51cfe9c19a11fa39f1ccf9ceca0dda24a1c8f9cb6a09ba21a1c849c98a074a2af1b5c9c73a03fa2391b4f9c4da00ca2fc1a1d9c20a0d4a1b31ae79b08a0a2a15a1a959bcb9f63a1f4196c9b9f9f33a1a219199b669f18a1a619039ac79e7fa0af180000a21068147800e91c7820a121fe23b31cb4206f224825e81a871eca205d24ae19f21c981f6b230518b41af21c7521b8164719221ca92113153519a71c6f248b144f18a41ced258f123b15901bae262f06048a9d18a0264991a2960e124f26e094359a06921226fc979b9c969920269499ba9d619c0d26919ace9eec9dd625389b5f9fd09e8725139cbe9f6a9ff224779cea9fdd9f3b24d79c599fb49f2423669d769f37a07b22c99dea9f73a01822119e50a0f4a0f0212b9e7ba076a1d521169ec0a0e8a19721ee9de1a030a27821d09dffa06fa25721e39d22a1d1a23e211e9e54a109a31b216a9e88a155a315219b9eada198a3e720839eb6a102a4bb20799e04a244a4b720449e23a28ca4a420a69d14a286a47920899c38a180a3e21e1f9bfd9fb8a1151d3e9be79edaa0131cb69a809ef4a0711aab9b969ff2a1e71b199c25a08ea21c1ca19c8ca00ea3841c089ddda04aa3d41c6f9d07a16ba3fe1c879d07a176a3ed1c599dfaa052a3d01c169dd6a020a39d1cd49caaa0dca2461c949c8da0a0a2001c6e9c63a06ea27c1b4c9c4ba056a23c1b4b9c30a02fa20f1b219c1ca011a2d81ac89bfe9fd7a1601a599bc99faca1041a1b9b7f9f60a1cc19bc9a459f24a16019529a099fefa00819ff99969e73a05618fe24bf18911c6619962b0e2095239a254c2d3e2260236328582e32226f232629502ea01f402184289f2bbf1c8b1dc6260226d6178c1aac1c84236816eb1630983a247e0f6f0c9e951626b519d91cee9c742d2917e81aec24e12f4514ed1b0c28e835fd1dc820022b53281da0e81e322b181e29a9e0a6182d7d1c0ca50527592c1da572a1f52ce32c65af7ca8202fcc2a08ae85a70b2e322211adb1a7bb2d632690aa8da5c62cb924fea4efa5fa29192612a37da5cd28a325e7a103a5782826257fa1bda47a27de2481a283a4492883243ca07ea4ef25a024bc9da5a2a21f9423c89c81a17aa2cd2081a052a44ea7fe1c1ca4f5a6afaad39da4a629ab3faf542665a5b6abdaaf642739a20ea87aac6523619fc1a47aa8c920bd9e60a4c1a6eb20039ffea3fba59c206c9f1aa427a6a920e39ecda3a2a55f207a9ef1a234a5ab1fa29d79a299a4c81efb9c18a245a44c1e7e9d58a253a44e1ec79d61a25da4411e619d30a23ba4d41de59cf4a131a4891d979cb5a111a4191d4d9c6aa1dda3a41c6a9c3ca1aba37c1c729c3aa193a34c1c779c2ba14ba3331c089cfba0bfa2c21b019b90a0e6a1531b649a42a06ba1a21a0f9a23a085a13d1a6e9a30a0b0a13e1a989a22a09ba1f7195d9a21a059a1e519519ab79fa8a08119d61a000054150000ce2b0524a1259a27522e232532262c29332fb1247c258129492faa208e218c29ce2c6c16430ec7287a9a1399a1996021c78e3012e20da498a60a00007716008023194519271d119dbd286b1d21212227bf2ccd1c6924662994259f24bd26142b0a2cf0255c298d2c8b23fe9fca24622d31ac7ea44120662d14b0dfa22f2b172c35b1e8a7072db0297aafb8a8852fff2372afeaa848309624b7ac0fa80d2e602590a9baa6ff2a8125b3a790a681299026f7a8e3a5ab2b55266aa582a5c02a392626a3f8a4b2a0b1259ca567a296296f25f6a024a0fb290d256f9fe79bea207d20dc9f999c7eac2e981ea1dba2f7ae219f1ea529a813b0981fcfa399a98bafea236fa2ffa8daad3a2357a156a7ebaba821e3a017a6d4a9ec2096a028a5a0a870209c9fd3a431a769208e9f76a46aa63220789e18a40ca6ea1f3e9e6ca369a5151f079effa2daa4971ea29e43a3e3a4071fa89e1da3cba49d1edd9d84a265a40f1e1e9d28a232a4a71dfa9cfda106a4481df59ce3a1e1a3fc1cab9cc4a1ada3d21c829ca5a179a3881c8a9c8fa15aa3761c3a9c53a103a3251caf9b0ba1a7a2da1bb19acaa043a25f1b8b9a8ba019a2dc1a799a78a0d4a1be1a789a34a0afa1371aee99d79f96a1cc190f9a209e1da01d17e510b0103e16600ec6283d240927af28df2c16254c26022ab02e6b243825242aab2fa1222624292ac72f9f1f81202529652db9185b1aa2253d2720120917d589602c49195f167c231a2c0191240f3426412bd88be5190328012bbf9bfa94c429721c27903e22af2a76acdb107624ff29baad569f5821162b36aabea18c21112c2caf64a6aa26f12b8ab003a8d129bc2a71af49a8922d3c295cade6a73a302e28eaabfca7d02e712843a90da8932b5b283ca876a78d2ace2742a5dca6822cd327c5a47fa48d2dc7265aa397a49d23ec264da092a26b2580260ba0aca2031a492670a100a420a56b26caa11aa4c6a97c2449a114a57faeb52271a146a753b01624b6a270a8a2af8f231aa343a8a4ad7922eba1b4a7efab7b22daa021a707ab3822e2a08da6aea9d021bea0aea57da87e216aa0fea473a70621989f9ba4b7a6b220019f58a437a65f20b29e1fa40da62620b79e12a4cda50c20539ebea37aa5681fec9d56a300a5c01e2f9dd3a2bca40a1ee59c88a278a48d1d609c0ea233a4f11c4a9cc1a106a4901c359c9aa1b6a3641c369c73a17da3251c079c41a12aa3be1bda9b10a1bca2761b7c9beba068a23f1b879bcaa040a2d51a1f9b8ca01ca2911a1e9b6ea025a2301a4d9a52a037a2d519909a08a052a1d31900008512741274073b24432269249c26cf2ac1242526db29b92d9824a425692aab2f39237324822a32301b214522222a5330e31ea220072a0930b81c261fdc29d72e1c1c8c1ef729e72dc919f51c262ac52c7516101d6b2ac42b0594150fe82a73298f0ec81c062ca925330ff220062c551ef59dc91c822b34a362a1cc24142b7aaca7a4c224602bdead58a64a29162bf6adf0a79d2cb42a3aad7fa7c12e70299baacfa63d2fad28fea80da7242ee028c8a72fa6032e4728c5a60ca6392e442878a554a5432d8527afa4a0a5a72a0b2886a4cca5d1286a2855a371a48b1f3728faa1a0a487a46a27d0a38fa51aaaf826a4a30ba6ebac362681a3eaa6ffae5325d6a2a0a7d1aeb92493a1d1a7abac00241aa1dea73fab5f2381a170a722aa16234ca190a634a92c22cea039a6d0a8c621aba00ca6c5a88a2194a095a54ea80c2135a0b9a415a738209e9f69a48fa6ff1fc29e31a412a6831f199ee4a38da5fb1eb79d93a359a5711e639d63a341a5351e699d34a308a5d01d3c9df6a2c7a48d1d009daaa280a41a1dd39c62a23fa4e31ccd9c32a2ffa38c1c7f9ce7a1a1a3551c169c9da140a31f1ca39b7fa1f7a2d31bd19b60a1dfa27f1bc09b1ea1a1a2381bc99b07a156a2dc1a1b9bc6a025a25d1a879a7ba036a22f1a00804394d692a48f40203121c7232f26b327eb243226b7292f2c7b24b6257c2aab2e5f248825fc2a6130c1231d252b2bd0300e223a241c2b69302e208f22dc2af32fe11fc821cd2a692f871ed721c52a742e061d6a229e2a072d6c1c9b21af2a172b6818ab20372b4e2846955120162b1318f59e22185c2b40a42ca21221ea2a89abb7a43812122bf5ac9ba52025db2ab7ad0ea81e2bb72a49ad21a76a2d8729cfa9f2a6682f5529dea83aa79f2e4c2980a805a61f2f9f28b5a60fa6082ea62858a512a6b42c9328f7a579a6052ca8288aa4e5a58628312854a4cba5f21e12283da4a4a523a5642749a3baa554aacc26baa333a610ad3326a1a2f8a67aaeec251ca46ea739ae40252aa20ca7b8ac0d2472a1d0a6f7ab4223f2a12ca757ab5123e0a1f8a611aaec227da18da66da9572215a139a6dea8b621ada08ba53ea807216ca01da58ba7952020a0d8a4fda64a20d09fbba4bca62220669f7ca467a6c01fcf9e3ba4e7a5061f239efba3a3a58d1ef79dafa34da5211ea59d70a318a5dd1d4a9dfba2cfa4821d0d9d8ba298a4121d039d4da25aa4e21cb19ceba119a4961c799c9aa192a3561c089c4ca107a3071cc99b08a1a5a26a1b5f9ba2a086a2211b149b8fa066a2941a7f9a68a0aba2a61ad99a34a0d1a1cf1900807d13d515dc8d791ef221412534268e248e259627f929b4286025d127a82aa02c8a247d26b92aa52f4024d825fc2aee3047232225252be73015227a249a2b9b30b22040249b2b3930c21f9523672bcf2f8c1d6723852b5f2e291a2623a52b532c088f5e216a2be728119db51a8b2b0c21a8a0b091c82b6da4dfa2b091492bdaa970a4669b222bfcac0fa65b1ff32a10adf4a62c28232b2dab6da64b2c9c29f7a999a6612ec329c4a8a8a65d2fb72989a706a6512fb528c3a637a6642ea428d8a526a6622d8128d9a5b2a6262cb02802a5baa6f4285328b2a4a1a6ab21122869a480a6bca3762789a36ba6a8a9df262ea4f1a609ada3264da3a0a7f6ae6b2678a3c5a729ae922518a232a7edab8c24dda011a7a5aa222412a244a76daad323bda112a706aa4f234aa1d7a68da9b42204a14fa606a91b2272a0c9a5bda8872151a064a597a8052109a00ba541a8a420799fc8a4bba75920449f89a4f4a613203f9f69a434a6871ff39e38a4e3a51e1ff19e02a48da5951eb39ebda333a5481e5f9e56a3eea4c91db19dd4a2a0a43a1d569d71a24ba4ef1ccc9c06a20aa49c1c379ca2a1aaa3501cc79b49a158a3f21b969b11a101a3611b4f9bd8a0cba2231b5e9baca075a2bf1acb9a92a053a2621adb9a4ca0a6a1341a00805d800d805d806c19221c221d241e0f2362258127e4299b2527255327bf2a4629eb24cd26322b662d86245526572b5a306b2320261a2b3631f6214625422b37311a219b24662ba830d31f95235d2b0a30c61cc021a72ba12e9d18a120e72bfa2ca1951e20cc2bc02af49c411f432b9b2797a0e71e8c2b73a437a36218872b9ca9b2a43da0d02a9faceba53d9ee72ab5ac1da7a420d22a70a97ea63328d82983a851a7912d342ab6a81ca7b12fec296ba7c2a50f30a128afa615a63a2fb72843a6ffa5b82e6f284fa62ea6b62d5c287fa533a66e2b1828a8a43aa66d26ae2799a4c7a6c4a1982745a4b6a6a2aa05278da494a719aecc26a3a28fa7b5af0126a3a2eca773ad9f25e2a15ca7b4aab2241aa19fa7b2aa6524d4a1b5a7f2aa272491a10aa7efa91623e1a051a6f0a81b22c2a023a68ea8c821bfa0e9a580a87f21bda099a545a814215ba01ca5b8a7b42024a0fda413a77b20889fb7a4b5a61220579f79a456a6a41ffc9e47a411a6381fef9e1ea4c1a5af1ec69eeca393a55b1e7e9e74a34ca5fb1d249e49a319a59e1d0c9e09a3d0a46c1dc59daaa2a1a4fd1c859d4ea249a4b81c9d9db0a169a32d1c399d45a1b0a2811b6e9c21a1b2a2631b299cf8a0ada2031b549bb4a04ba2451a2a9b09a022a1ae1800802e837881a3007319331b931cdd1d5f2277257c27d0298324fc250628482b792522256827eb2aed298f24d726042b5b2e0d23d825aa2af7305a220b25442b85319f216524c22b493130207623fe2ba930b41dc321a02b712f5815a41fa02b802d589a371c6b2b0d2b9b9e86171a2b69262ea161110a2b34a133a44098432b49aaa4a42d9fd92a0aacfba4f7a0e42a14ab04a51912db2922a9c1a5be1b85292da7a1a6032a9f298fa6aea6ac2e782967a57aa689301029dfa650a631300a2979a6fea50c306e2860a57da66d2e7528b9a4e3a67c2c512803a5bda68828e02775a5dca6b1987e276ca4d9a64faad9265da40ea7e3ad7c26d7a34da77eaf1226dea194a605adc7248ba2f0a673ab9b2443a225a7adaa3e24fca25fa72eaa15244ea20da7d8a9652372a1afa650a9d2220aa13da6dea80822eca0e9a598a89121d3a0bfa56fa84721a4a090a540a80b21aba07fa51ba8dd206aa038a5b9a7702006a0dea425a70a20f89e6ca4a6a6421f779e1ca43da6ab1ef29dc9a3e0a5121ee89d83a389a5a01db39d23a325a5581d8d9dc4a2cba4ea1ce89c3ba26ea4861c819cd4a12da43c1c4b9c95a107a4dc1b469c7ba1d4a3781b339c5da19aa3651b229c3ba136a3361be69b0fa10ea3d21abf9bf0a0baa2b11900804883ea8148838d19011b6f1cd41c6e225725e7274e2912239f26b428362b57237c25e3270e2bd224f424b426d62b8329dc22f225002bfb2ec3218f25d42a64317a2042240f2bf431e51de121062b6431061ace20962b3f304b95c41e8e2b8e2e1b9c5d1c782b392ce49f28115e2bc72738a2149a322b51a11fa4329fbd2a26aacda43aa1742a22ac68a51ba44e2ae7a868a538a2122ac2a659a666a1162a4fa8caa67f1dc129d0a84ba7dc2b6729dea7e1a55b30332997a6e6a5c63009290ea855a68630e9283ba65ea600307e28b1a582a6df2d2f286da499a6af2ab5279ea406a7f81882270ca447a7fca91f27d0a3c3a732aefb26d6a200a894af8126f5a1aca777acc525d2a1fea6f6a9b82479a10fa7c1a95d2420a21ea7d8a93524cea1f2a6c7a9fa2381a1caa6b3a9662338a15aa684a9bc22faa025a604a91b22caa0f9a59ea8a22182a0c8a551a8522156a091a52aa800212da04fa5bca7a820d29feaa429a743202c9f83a4b3a6871fea9e45a433a60a1f779e12a4dea5761e389eb9a374a5211ee99d48a317a59d1da29ddfa2baa4251d1b9d63a25ba4c81c919cdda1d6a3421c549c6fa15ea3bc1b149c22a1c4a2d91ab29bf7a083a2b21aeb9beaa072a27a1a049cfaa0a3a2f01a769b85a0ffa1731a00806082ed826082f9185f1b3b1c331d5c220e263928f029a22259267628492bc8224825a627f82abc220c25cf26922bd7241923c726872bae295a205725bf2a522fb11e35246e2bcf31f01de9212c2be8319e1b1221902beb30578f9f1ef92bb22f269c4d1caa2bc52caa9fc710452baf28daa18397c62a8ca12ea480a0f22aceaa0fa57ea3ce2a92aa97a503a4462afea50ea55aa394299fa6eca561a4df29cda477a654a38d2919a6a9a6b124e32845a5f9a6292e0729c0a53ba6ed30d42866a66fa68231ab2823a561a6a330362818a57fa68f2ffa2704a6dca6812caa27a7a55fa7be2289279ea4c4a7bfa9492749a4e4a63dafd22534a2aea653af352551a1b2a6b1aad5244ea243a63fa905242fa2d2a664a9122447a2e5a690a9fc23ada2fca67ca9a623eba2c4a605a9192387a299a601a97722f0a152a6c5a8082263a10da6a3a8a121f5a0e4a573a84721b8a0b7a546a8dc205ca065a50da87b2000a01ba591a724205d9fcea411a7b61f2f9fa3a4a0a6261fe89e76a444a69b1ebe9e49a4f3a5461e879e10a4c0a5f31d529ec4a399a5841dea9d3ba365a5231d669daea2fca4bf1c6f9d40a245a45a1ca89df2a1f9a3231c769da0a19aa3ec1b239d78a123a3741bd09c20a1e4a24c1b8a9ba4a045a2691900807582f2807582df18bc1b5e1c541dc42177257927ba2978225c25ea27862a4e22fe243c270d2bf221db243927912be121fc232926d42b402357227725842b68296120c224742b712ff41da123092c7331451aa921c82bb131008f921f622ba330099c051c582b142e3ea04790842a1b2af8a1fe9d6e2a9aa354a48aa1b72abda9b3a449a29c2ac5a7b4a4a1a2da2938a43aa52fa4e42966a49ca520a4a8293ca643a56aa30a29c0a69ba5f89e19290ba4f5a516297d281ca6ffa538309c28c6a521a7bb31cd28a2a5b8a68e3152289ba498a68330e52756a4d3a6cf2da12703a550a7b9277a27b5a456a7b9a8052765a5a5a6feaed225cda30da757aeef25b2a114a7aaa92a252ca2f1a651a99c2488a2d4a629a9512442a2d6a649a90424faa103a7a5a90024c3a1f7a67ca99b23aba168a6eca8cd2265a114a696a8332200a1f3a587a8af218fa0c1a549a85c215aa089a510a809211ba040a5c2a7a920e39f18a56aa74d20839fe6a426a70b20779fa9a4f8a69a1f569f71a4b8a6f81efe9e4fa475a6af1e9b9e0fa416a61e1e349ea9a3b4a5c71dad9d01a32fa52f1dd19c5aa2aaa4b41c3e9cb5a130a4251c149c29a18fa3581b209c18a129a3561b219cfca0aba2081be99a6ea011a28d1a2b9a6c9f3aa11219008033829a8052815618ca19cc1a5a1d332107258527b829e321b4256d28922adf2148251628b62aae21ec2485271b2b6b214924c926862b3420d921f525692bfc203a1ea8256c2b2928481c1424222c782db40f93211f2c6e30669a461dd42bae30de9d0b17812b9f2e32a05b998b2ad529fea1709f8f2adda310a4ffa1682a26a762a4e5a2112a3aa479a516a40b2a1da556a576a462299aa6c1a50fa46d2916a633a55fa4fb284ba7a3a530a1f728b8a558a6489deb28b5a43ca6cb2b3228cfa380a65e31522838a4d5a6f5325a2814a407a737326228e3a4e4a62430f027d1a5c8a6152b1a272fa4e1a6b9a6bb26dca393a65aafc32589a244a7d0ad9b25eba29ea60daaa0244aa36da7c6a9f92454a2faa60faa6624f8a139a7caa956240aa2fea656a90124eea191a6eea83023b1a183a6e3a8a62291a16fa6eda87a2285a158a6f4a8232224a106a6c8a8af21bea09fa57ca82d2170a047a507a8bd201ca0e4a47da74a208b9f9fa41aa7b71f439f78a4e3a65f1fd59e4fa4a9a6c21ebe9e1aa467a6401e479ed2a313a6ba1d3d9e5ea39ca5651de49dcba20ba5f91c809d4fa28fa47b1c049dd3a11ca40e1cea9c97a1daa3891bf59c87a1ada34a1b4c9d6fa162a3ec1a069d33a10ea3ee1a119c94a03ba2081a0080a8843682aa80cc18661b891cb31d0a214b25512766293d22e9251b28b92ad7215825f427c92a8521e2249327f42ade20ed239b26342ba31ff621d425df2aeb1c081f5024302b191c77181d21a52b4b23b295661de42bc329b09aed1bb42b6f2c969d5290b72ae62b55a09b9dcb298d256aa219a15d2a56a114a4d0a1392ab8a248a4a2a291297aa26ca4d8a33029e8a46ca5a1a4782913a40da69ba50329cfa3e7a57da593281ba446a6a0a58328fea3baa68ca58728fca4e3a5389b9d2773a58da5db2ea5276ba348a6d8322528e1a3c5a626330428d3a3c7a55131b42635a4a5a5862ded2589a473a774a7cb2668a4a6a68bb07125dea190a6bdacd02486a2cea680a8cf243ca2b0a6d7a8702476a2d2a64aa95f2493a328a760a93f24fca29fa60aa99d2379a27ea6d6a8202372a28ea6cea8e2224aa274a6e5a89622daa14fa6dfa82f2244a120a6c8a8c721c7a0eaa576a860217da090a518a8f0200da02ea57ea77e207f9fe1a413a72220489fa5a4b7a6941fe79e6ca474a6221fba9e3da427a6941e839eeca3c4a5261e6f9e7ca366a5ce1d269eeda2eaa4481db09d79a27ba4ef1c159deda11ea4701cdb9cb5a1cda3041ca69c77a199a3c81b979c44a165a37f1ba29cd9a0dba2d71a559c3da0e2a10e190080b78257826380f9178d1ae11bde1c4121f82512287a296121ad252628322a0a213c25b927902a1e212225b327f42a95201124f8264a2b521e7b213725422ba91b1a1e4a24f72a75153b18c721092bfe12769a551b8e2bc018829db516ba2adb1de09e359990299c1e56a0c09c9c293794e5a0ad9e4d293b9f21a235a00929e9a191a3aca23629b7a465a4e0a33129a5a332a558a47029b6a35da5cca4f428f2a35ba5f6a49c2848a495a53da59028e8a3b9a574a5502899a495a616a6252879a59ea54a1b9c26b6a2d1a5dd3040277ba2dca57833fb2602a5aba619325c272ba46ea62a2fc3262fa4a1a6e1a57726b4a47ba664b09b25b6a02ea671a9fc24d8a285a64ea9cf24a5a3b6a627a98a246ea3d6a6c7a9602432a3aaa6d3a81d2404a3b2a6cba883239aa2cba6e3a8452351a2cda6e8a8d922b1a1ada6c8a88a2233a16ea6a4a8f821b7a017a65fa8702160a0d9a522a82c2125a081a5e0a7c120ee9f2ea567a77e20c49fe9a4eda62920b39fa3a48ba6901f919f5da439a6091f989f17a4dfa56b1e1d9fbba37da5001e8b9e4ca33aa5a91de69de1a2f9a4301d519d8aa2ada4fc1cd39c55a297a4b01c739cd7a124a43e1c559c32a133a3b91b5b9cefa09da22f1b079caea08ea2501ae39df0a00aa2c8190080fa95559669149d1e9a23d3247a266a213f263228c2296621ae25f6271f2a03216625dd27622afb2030256f27992a652050245b26c12a9d1e2122ac24ad2a7a1cb41edc21752a2c182518b31dae2a91936a9b27908a2ac098919e0899092a7e9b4aa07c99472ab39d48a18b9dea29ec9f8ea1169f5529cea086a21ea1292968a205a459a3482930a2d1a481a43e2951a35aa50fa5062934a372a530a5c1283ba370a56fa5692831a3aaa5b3a51a2862a3cfa58fa6c627f2a3bba5bca64c279aa289a550a6e62643a424a52027ac2675a294a50132142744a29aa53f330c264ca493a65b306826afa3b9a64aa63d266ba4e1a56bb0302528a381a594a883240ba2cca530a86d247da149a6d1a88224c5a242a6a6a83c24f6a191a699a80324cca182a689a86d239da168a692a82923c1a190a6cfa8cd2285a167a6dca8452257a145a6b7a8d12107a10aa68da87a21b7a0c9a564a80e218ea076a519a8a9205aa034a582a7572023a0e5a4f2a60a20fa9f8da47ea6381faa9f3ca40aa6a51e4e9ff5a3b4a52d1ebe9e70a349a59c1d759e09a301a54e1def9d91a29fa4cf1c589d37a249a49a1caf9cc8a1f6a3331c459c70a15ea3a81b1a9c0ba1e4a2431b199cd2a07ba2cc1a979b8da02aa2481a459b11a0b8a13d1800800c9666978e14471ed0227d24ce25a421fb26a528af296021fd254a28ca29cb2096250128252a6920052520276f2ad01f0a243826a72a8b1d08211224632ac119391b0c21122a6c13ea94cf1c182a2d958a9c5390082ace9ab39ff69ced29bc9cf0a0d29fc629af9e0ba2c7a0b3294fa00fa34fa17c29cda0cea36ba2482920a129a4aaa3f328c1a1dfa451a4d42890a21ea5bfa4892848a374a53da56d287ba37ca5a0a5392861a36ea5aaa5f027dba3a4a514a6d527d2a312a648a7bc271fa46da6f5a6672724a305a62ea59e26c3a37ba594293626a3a453a53c32e62681a470a54a31172660a39ba5429b9b253da25da5d7ae8c24f7a05fa53ea81c2460a152a53fa7c523d1a1dfa527a81124c4a1a9a57da89623bda110a693a8a623fea136a67aa87f23e8a13ba6a7a83a2316a2a9a6e9a81c23baa1a7a600a9cb224ba19da6e5a83a22e9a049a6a2a8db21aba0fba561a85f2185a0a6a52aa8f42050a04ca5dea78b20fe9ff9a477a72b208b9f8ea4f8a66e1ff69e3da474a6a61ee29ef8a3f4a52f1e8c9e47a36aa57d1dbe9edaa2fea42b1dcd9e92a29aa4d01c919e37a266a49a1c299ee3a130a4471c749d7aa1e9a3cc1bf09c34a1b4a37e1b999cfda06ea3f51a2b9cada000a3991adc9b56a08ba2951900804b8ebf8d090513211a26012890287921a9265a2861292821c02515284429b020d82533288e2907219b252428052a06207824e426342a251d16216a24f329b018601b0720af29af0910986216552977960b9e5e963029029a95a0cd9d08297f9ca8a1f49f06293e9ec8a2f6a02f2906a0f7a2eca109294fa087a359a2ea28f5a0b0a3cca2c82863a156a4c5a3a628d0a18fa443a46e2836a2dfa4b0a43b2870a2faa427a50228aca206a557a57e27b6a223a5a0a51727a4a233a522a6a32607a358a589a64d26efa4cea543a6f5250aa541a538a6e0248da35aa5162d2d2683a288a507319e263fa5a8a509a4ff251ea1b7a406ab9424f3a164a40ba85723d5a1d7a45aa75b236ea1f9a4b6a7d82299a115a501a8e722f6a189a540a8412368a246a6b0a8d32378a2d3a6f9a8f423a3a2dca6d2a8ac234fa2dba6aaa81923c6a1bea6b0a89c224ba16ba691a82422d3a0f9a546a8822182a085a504a8f92047a02aa56fa77e200aa0d8a4f4a60f20de9f80a461a6431f779f35a4e6a5881e3b9fd9a385a5171ed99e67a32da5951d889ee8a2e3a40f1de69d81a286a4c31c629d1ea230a4881c319ddca108a4411c3a9da7a1a5a3f51b149d5aa143a3761bda9c35a100a3051b1f9cbea0c5a2411aac993fa0aea3a91900806f91c0928310b820782507274128b62060251f28e72846216f2516282029aa2086251f287c298f201d26b828112a2e202425f9274a2a001d26214924a729b0165215421d0b2948939c9dae99b1286699c1a0209f7f28719b6ca183a092286c9c8aa155a189280a9d13a237a1a628109e65a2b5a1cb283f9fe3a222a2b928ee9f77a32aa3bb28f8a00aa402a48328c9a18aa4a6a4692847a2bba4d1a41c280ca3d6a46ba5b127d3a207a5b4a59527f2a21aa5c7a54c2776a334a51ca61127a4a352a57ba604272aa49da56ba60a2750a1baa459a77c25b0a0a7a448a8a7244aa362a7dea82e273da49fa6bba9902515a14fa4daa68d221ba274a4fca639225da160a46aa6b5211ba177a448a6322110a17ea4bda657211ea103a599a7db219fa13aa67ca81023eea136a737a9a623fda180a759a9ac23d6a119a720a9db2281a15ba68da812220ba1f7a547a87d21b6a0c6a516a84321aaa08aa5eea7e02084a013a55ca74d2029a0a2a4bfa6c41fbd9f4ba455a6ed1e749f0ca405a6591e149fc1a3cea5161ee09e8ca380a5b11d5e9e28a31ea5751dd49db9a2b7a4fa1c449d45a25ba4b11cd99ceca11ca46f1c959ca8a1c6a3071c659c50a144a3a61b589cfba0eea2061b069cc2a09fa2b61a099c5ca09aa1041a0080f58fdd919a0f64206f240a260d28e72078252d27b328ad203c25012797287f20662563272529c52022264228172ad9206826cd28972afe1df521eb241d29578a689eb59d0128259ae5a23ca37427959b34a29aa24d27f59b68a136a10e28449c60a1d3a04b28d79c90a124a157287b9dc3a184a16828429edda1e3a16628d89f4ba245a2562894a04da332a39528f1a014a42ca49e2815a177a4e3a481285ba1aaa43aa54c287ca1dba492a51928bda1d7a4d5a5c227d1a1f2a402a6b02745a215a54ca6a927a9a240a590a65227e4a375a528a7042740a24ba57aa7ca25069fada447a7ad240a9e47a4d0a63923c19ecca336a69a21f99f80a3e7a54520b9a046a3c3a5e41ebaa07ba236a5581e7ba09da24ca5091f32a173a46ca61b211ca2fba530a8102352a2aaa743a92324d2a1b8a76ba90f24a0a182a728a9a82376a1e8a6cfa8c7222fa140a64ba81022c2a077a584a72d2142a0f5a4d6a68720f79f9fa460a62c20789f46a401a6711ffb9eeea3a0a5b91e999e89a349a5261e529e21a3faa4a71de49da9a2c7a4481da49d5aa299a4e61c489d0ca268a4941cff9cc7a13da4601c749c53a128a4aa1b499c0ca187a31e1b1f9cd2a0dfa2e11a139c98a079a26b1a479b55a0d5a21f1aeb9a40a032a2c21857831288ac84cc838218c81a401be11c3c20dc231526b2270b1f2124b4256328661eb72352254a28af1f69258a2760293f22b528842a492b3e1e06249e25d8296a9ee7a632a80324e89cdea458a53824389b64a204a32226d49ac4a0cda0eb27fc9a66a0e49e5c287a9b3fa0b79e6d286f9c2ba0609f6b28189dc2a018a08128f09d0ba18ca08028759fd8a190a19c28b5a0a6a2e4a2ad2876a168a3f7a3b028b3a1d9a345a49b2857a22ea487a47528f7a173a405a57d2865a2d8a497a549287fa240a54da606283fa252a59ea68e27f2a110a579a6a626c0a1f1a466a6df25c8a1f0a4caa62a25c5a1c4a4a3a634249ba1b5a3bca5402155a125a2e8a4421e6ea000a1b6a3261c479fea9ff7a1181c849f00a05da2cd1c01a183a2a9a4b01e9da22ca673a815222aa45fa8e1a9f624a9a21da8c2a9bf24afa170a728a9c3231ca114a638a83022dca075a56aa73b2192a00da514a7c92018a0c2a40fa758206a9f6ba4c8a6fa1f589f36a426a6541fe39ec4a386a5951e119f48a30ca5021ef69ed0a2aea4771d769e6aa261a4001d169e07a217a4b31c6e9d93a1aca3441ce99c3ea139a3101c559cf7a0fda2771b139cb2a0a6a2ec1aa59b7da07ea2b11a759b59a039a2121a7f9a16a03da2d919ba9a01a098a1c819d28d8a94a0949e91591a2c1e3e202421981dbd217523a326f01dc1200523b626cd1cfc1ffc219526671a891d8420f82516184e200b23342aea1ed8233b28032c5d1ac91cc321c72bcf0d908a9919ec26fc8eb7962d141b28b7955e9a1a9441282f98049c60962a282f999c9c9d984728049bb59d7d9b6028049cca9e279d5f28fe9cba9f1b9f5528a69d67a051a06f28019f0ea126a181282fa0e2a131a2af282ea0dca27ea3cb287ea010a475a4fd28e2a0cea45fa5ea2822a21aa509a61a2824a140a5a2a6fb26c4a0f8a4f0a5df25d7a036a492a5e42438a177a4b1a58e241da166a496a59523d7a035a45aa5a42212a11ba451a52e225ba05ba301a5d0207f9fe0a10aa4c51f3e9dac98a89d31155f9fdb1a211b00a0999ef99a359ff99ae3a101a8c1a90d25fda3cba931ac06270aa365a8a0aa0025d8a07ca683a8c4229fa077a5d7a7a1215fa03ea5afa7352125a0c9a415a77920af9f36a40ca6df1f6b9fd9a355a5111f5b9f60a315a5781e499f2ba313a50d1e0a9fd1a2e0a4c11d539e71a2cda4491d039e0aa25ea4d11c899d8aa1d0a34a1c239d16a14ba3f91bf99ce7a008a3af1bc39cbfa0bba2371b839c99a0aaa2a31a439c83a071a2831a019c63a03ca2341aa79ae39fe7a1b619c999df9efca0b21800806c88a385aa8767195d1cbc1d721f1b1d1821b8228625fb1cbb20cf22bc256e1c0420c0215125f41a581d2620c523f6124b16fb19f01dd50e731494188e1fcf155e17a91cd1255f146214741c9e27d60768913c18d5278694f998cc8cbe275d98ae9c839aa127ca9a7e9ea19dab27659c17a0f29f76270b9db4a098a04627a19dfba01ba10b27de9d64a14da190268a9e75a173a14526df9e88a163a10c265f9f65a132a15a25339f40a11ea1a5249b9f1ba147a1da237e9f69a1f2a1562309a0b8a115a3cd232da031a201a4a6237ba0cea26ba41823b3a01da3a1a4d522d0a0efa2afa4212205a1c0a2a6a4b9211aa1eea2e6a4c92109a1eba2bea486218fa156a301a5a6211ba024a20da541201e9a599ff0a0e71e461d56280e2922a820a7e1acb6ad0e2a8ea1eca844aa8725a29deda35aa6ac201ba01aa4b7a57f20cc9fefa387a51820699f7fa35ca5731f6d9f2da320a5dd1ef39ef5a2f9a4671eba9eb1a2e0a4ff1d679e70a2b9a48a1de39d16a286a4171dc39dc0a138a4ac1c7d9d6da1a0a3391c009d0da145a3dd1ba79cdca030a3551b409c9ba0e8a2f41a149c88a0b3a20e1b039c6da068a2ae1abc9b5ea00da2611a899b3ea0d3a1671a939b1ca09fa1131af79ad69f6ba16a19909a5c9feba0d91800801d8257039588b51c8e208d23f1245b1cbd202c24b6253a1cb81f69224225bb1b5a1ee1204a248a18781ba61de8206e141b19b91cda205916581a911dff2454170d196d1df226f3142414271b4c278f0d3a949a153d2716946c9ad8923a276497e29c829b2a276499889e759de6260d9bb59f189fb8269b9b2ca000a05c26689c31a01ea0cc25fa9c2ea08fa0c2243a9d28a0a6a0e823039d259fda9f8621ca9c709ef39e4f20c89df79d229f7b1fdc9cb79e22a0ea1fe49cec9e63a0b41f619d519ffaa0ea1fb19d0fa01ca24520f09f91a071a2912081a00aa131a3ec2074a051a173a3f72074a0b1a1eea3172152a0eaa12ea4142103a035a26aa4ca20b99f69a2a0a4ad20bf9f7ea2c5a44f20fda09fa29ca46f20ad9a7d9dcc9fad1abe81588a86911106349457971f9c1b14779d2ea09ca28d1c139f37a254a4851ebd9f45a264a47c1e59a021a267a4021e0ba00fa235a4dc1d829ec1a1efa37e1de29d91a1bfa3191d6c9d7aa1afa3c11c3a9d63a1a3a39e1c119d4ea183a37d1cee9c16a11da32f1ca59ce4a0dca2b51b949cb8a0a6a26f1b5f9c7da060a2db1a3d9c4ea02da2931a089c15a0d7a1091ac89bf99f9ea1b319b99bc99f6ba19119849b9d9f31a17219f59a5e9f1ca14519019ab29e90a05b1800000e10021457051a1dd62061226524111dcc209c222725191b661e8b2047245e196d1cba1ea422c5176f1a211d6721e017181b5b1d9423f3166a1ae01d8a255216d918541d92262e13e613031cc3265e06b390d2189c267e913998561262263995919a59953a265b98559d349b4626169a869e4e9d2d26349b7b9f489ecd250d9cb99f799f13251a9c8b9f3c9f36248a9c269f709f1423559d199fd79f6322f99d909f3ca05822259e45a0d3a05f22199eb9a07da174221a9e0da146a23b22179e52a1c5a2f621f29d41a1ffa28121219e55a1f4a25521359e6da140a33121489eaba168a3fb209a9ebaa1aba3d2207f9ecda1e7a3b220629edaa117a48a205f9e01a23da46220639e19a26fa45f20369e36a2bda44d20c19d24a275a4d61f7f9c01a1efa2de1dc99a909f7aa1641c59992a9e14a1af19e19af39eb9a1891a129c1aa0d9a29f1b869c77a01da33b1cf59ccaa047a37d1c539df4a079a3a61c829dfaa069a39c1c689defa03da3821c399dcea01ba3561c1b9daca0e2a20a1cdf9c90a0a8a28e1bb39c81a082a2231b7e9c6ea071a2ee1a629c51a061a2c21a339c3ea03ea28f1ac99b0ca006a20e1a4e9be39fc8a1e7191a9b939f79a1ab19db9a609f48a146195f9a199f06a1e718569abf9e96a080187524d2189b1c5218aa2b20214c245826982de02381248129ab2e2322bb2357288d2e141f0a2194286b2cc61c1e1d3f28c52880158e19ee22ac295317a6193325102e6312551a8f22b72faf14ea1d6b293530e5932b19ba283b2c19969f95ef25382d6a941f0fff27b91be797f9228728cda8dea34e98f92a3da96ba4d625252b50ac80aa1c28da2a5daeffa766296a2784ad8ba59a2bbb252fada8a5db2c182751aa58a59f2cf225c1a5c1a4362a4725c4a45ca50829f22553a4aaa5b728f52584a48da5f9258d257ea551a5e3240c253ea3a4a41e25a42448a2aaa3ad1e302407a029a214a58e23faa01aa303a8d62281a306a274a93b1f5ea294a6a1ac902064a1b6a821aef120709a13a51daa5f20499c1da465a73420789e2da43ba681201aa02ba40ea69e20b49fd6a3f6a557208b9fbda3b7a53a20cd9e11a37ea5691f049eb0a200a5a41e369d5fa29ea43e1e459d82a26fa40b1ec19daba285a4f01d639d60a252a49b1d2c9d2aa252a4321de09ceba139a4ed1c849c89a115a4781c789c67a1f2a34f1c7d9c5ca1d4a3181c809c47a182a3f71b149cf7a0cba2411b399ba8a0e7a1f11ab79a60a08da1501aa99a56a0c7a1431a8a9a4ba0dda1331add9a3ca0d1a1b719539a37a090a19e195f9a01a0eba05719f91e6814441c0e02372c562515274028752ebb252127302a842f39242325cb298c2f40203c21f529112d111d601ce1284298138e9794a01ee7a5838a7594e71dd6994913f81c23281c2a341a4b247c291628b30ee2219a29c61c71151e244629491c4f24d227b829a6211728862a3b2970a9b0213a261c2b4aad1ea64d9f532c23b03baa921f3b2a91af4cab2d28342745af6ba94a2bcd2426ae4ea8f02da225a2ab54a7c42ef325c3a7c1a6d12c41264ea62ca63b2ba426d6a76da5452c222629a352a4a92b9225a9a479a44229ce2592a17ba2d8255b2586a017a20028762612a315a1d3983c2434a153a11daa97200aa14aa3b8aeff14aba213a76aaf7e9840a4b3a956af5d996fa1b3a804ad0e20a3a091a6a0aaa92075a0e3a55da9b120ada046a57fa88b2018a002a57aa77220f09f8da495a62920989e3ca43ea6a41f529eb8a3a6a5f71e119e28a31aa55f1e6c9e59a3f9a4751eb29e1ca3eaa4401e2d9eb0a28ba4ce1d6e9d51a248a4421d569d1ca224a4051d249deea101a4ac1cdb9cd3a1cfa3891ca69caba197a3471ca99ca5a165a3351c659c68a120a3081ced9b27a1b3a2711be79ad4a045a2f81ac19aa1a018a2771a969a7fa0dea1921ab99a4da0b9a1f1198299ca9fc5a1c219019a359ef39ffa16751a991bea1d8310af299d25ff272a29ef2c55250927242ad12e2a246425ef293d30f0223424a02a5230b7203b21f929d22d9314a918ab24712c190ea7112521042e260916151326022c8f97fa146f29e1285b152b20a2294ca3401d7a22d528ada7ff21c525ec295eaa9e219027872a9faab4180426582b93ac68a43d20df2bbfafa6a8271bed2aacaf63a91924e32904af6da9422a9329a6adb7a8d02c5b2896ab12a8d12d7e28d1a7efa67d2e352825a680a60f2d182868a6baa61b2c5328efa5e8a4172ca32776a3b7a4d628582780a1f1a24929de2631a2e0a2de1e5d26b7a4a7a295a7f525aaa26ba410ab8025dca1f4a5ceaedf239aa2f6a77dafa62220a3a7a8c3ae1b2152a266a82cad31213ca1f5a78fabe021eca065a7abaaf9215da195a67da97e210fa1cca5a2a81421aaa024a5dba7b620e59fbaa4fca66520349f68a467a61920e19e3da42ba6c91ff69e2ba402a68e1fb19eeaa3a8a5fb1e359e77a33ca5811e959df8a2f1a4d41d599da4a299a4541dc59c37a25fa4c81c979cf0a120a4601c709cb3a1f6a3111c759c9fa1a5a3ed1b3b9c70a152a36b1b159c3ca1f2a2231bb09b0ea185a2e61ab09bdca053a27b1a279ba1a051a2641a2f9b86a04da2d2193e9a44a083a2d319d59a28a06ea1681907127e193c1c208bce26d225a327c328172b81253927bd2afd2de524f225fd2af92fa823b5243c2b6930af2109231a2b7430bb1f3e21222b00306b1d1920172b8a2e7d1b5a20da2ae82d361c3720842b162deb1b3722192c772c3c1a1c21842bd5295d1d5c247f2b2027e91caa24922b8918da998021882b86a8ada21a240a2b4aade7a5c91cb12aabad36a8d922df2aeeaee6a83f2af22a5dad52a8ef2ce629feaab7a7b92d1729bca80da8ad2d3d2938a8e0a6592de428c6a753a6f82df528bba567a5142d48281ca5e9a5302a8b28b6a3b2a58c289f28a4a232a4df1e102882a29ba45aa637271fa3a7a5d1aab22649a3b1a6efadff25a6a2f7a762af1d25c0a261a844ae7e24eda13fa8d2ac902333a1eea7daabcc22dea17ea75daaa622dea1bca64da9e6212aa167a6eaa85f21f7a046a6d0a83221c8a0e1a563a8cf205ba001a556a72a20c99f85a4c0a6861ffa9e53a464a61c1f7c9e24a4dea5a51eef9dc9a36aa52d1e619d83a351a5e31d799d61a324a58c1d4c9d1fa3efa44a1d389dc9a29ca4e31cfb9c84a25aa4a31c099d4ca21da4571ccb9c07a2dfa3281c659cc9a18da3f91b239cbca160a3a51b0d9ca4a143a3441b059c59a1daa2f71a1e9c35a166a28c1a1a9be2a040a2351ad89a99a04ba2eb1971185c1c271dca935823a424e3256f275328a125fb269f2a4a2c1f255926e72a062fe02453269a2b8b3025249725a92bf7301d229724be2b8d309d202423ad2b2130d61fe122af2b8b2f5f1e2a227c2bc72eb71dad22872b252d9e1cb122fb2a032caa185121672b05291196f221a62b1418fb9f3b1fa62be9a236a3031c482b3eacaba5f19e0d2b24ad01a71622f02a48aef8a8a324592b02ad2fa8ee29e7298baa18a7972c3f2904a9c6a7462d71290ea853a6e02dad2872a668a6d32de028b8a544a6c52cad28cda51ea6482b7a28b5a4bea58b270928e9a303a6c91e0d2816a4eea522a63b27d0a351a653aba326a3a3fea681ad30269ca2aba76bae8b2591a1c3a701ae94243fa170a736ac7e2315a29fa75eab3e230fa271a748abe422efa140a721aaa4226aa1cba68ca9252217a16ca6fca8822196a0b6a561a8d62064a057a5dca756201fa0f9a44fa7fb1f01a0dba4fea6b31fa19f8ca48ca6361f479f49a415a6b71ea19e0ca4bba5451e669edfa373a5d91d159e8ba32aa56e1d9f9d14a3dda4191d229db5a2a7a4d41cfc9c76a269a4811cb49c10a22ea43a1c6f9caba1dfa3fe1b1c9c89a158a3ce1b029c3da1cfa2251b7f9bc4a086a2931a579ba3a053a27a1aab9a75a09ba24c1aec9a4fa01ea2e2192a13db1bc61d3f96ff216325ae2737286f255e265628a82a0f29e12531281a2b142d3625f126882b053034244f26852b15319c23b025c12b34313322e624242cdb30a8205424212c9230b81fdd231d2c3230351d1e232c2c1e2f98182e22dd2bee2ceb8f07211d2cfb28b59deb1a2f2c42217ea01312212c75a475a3e818862b92aaf9a4d69b552bebacd0a633198c2bd7ad10a8f624872b4aac00a7b628fa29d7a8baa6992b9229e6a864a7502dd629e9a7e0a6bc2d2e29c7a6aca6982dd7281aa66da6e42c722844a6c7a6c42b792839a5e0a65a283e285fa4d3a6c81edc276fa4dca626a631273da4f5a6d7aacc2628a48ea7cead7126a3a2c7a7ceaeda25fda21ba828ad4425e7a1e6a78cab97247ba101a812ab352412a2d3a782aac523e9a127a74aaaeb2261a1cea6cea9512238a17fa645a9e121b6a0fba5d9a8572167a079a593a8d42040a037a55aa87d2005a004a515a84420ba9fbda442a7f71fab9f89a462a6511f469f62a402a6e91e2c9f2da4c1a5641e129f10a478a5f71dac9eada32fa5a31df69d33a3e3a4201d949dc7a28aa4d31c089d4aa23da47a1c5d9cd3a1f3a3321c0a9c78a191a39f1bc59b26a143a3f11a3a9beba002a3b61a4d9bb6a0bca2491adb9a8fa08fa2f019159b5da0dca1ae190000d605b8086c0aed1c5021df222b25352403260c288f2a222694259e27372bce2989250c270d2cb72de824a426c32b9730ed231b26c62b8131ce225f25172c663116216124022cde309a1fec22e12b4d30361d7f221e2c1c2f14161121462c902d0e966f1f222c602b4f9e451eb42bf627c4a0101db62b87a467a32c1c982bd9aaffa4e29f212bedac61a622a0312b61ad38a80b13562b8daa17a7b4232a2a0ca9a8a7cd2a452ae9a86ea73b2ddf2929a813a6a52eb528b9a67da6bd2ed82899a652a6882e6828cca649a6242d2d285ea58aa6ea2a0e28dda4c9a63325a42740a45ea76fa58b2764a4caa7f2ab46273ea4aea7a9ae7126d1a2b0a78eae792550a147a72aacb62459a01aa76daa212461a1d5a710ab1d243ca20da8ffaaef2340a266a710aa0d2344a190a622a9ec2100a136a6a6a88721dfa004a68ea83821dca0b3a571a8e32079a059a512a8792031a021a565a73d20aa9fe0a4f0a6de1f4b9f99a483a61f1fd69e5ca43ea6ad1ed09e2aa4e7a54e1ead9e05a4bda5051e859e99a360a5841d359e6da336a5551d209e29a3eda4fc1cdc9dc7a2b3a4b81cc69d82a26aa4631cbf9d09a2ffa31d1c3b9d85a13ea3461b739c52a11da3181b139c18a1e4a2a41a899bcda072a21b1a2d9be59f19a17118000039010002970cbb1dfb20a722a425512326264e28872ac32449262528452b41269e25f527602baf2ab5243e27592b172f98230e26592b6631522206257e2be1311d211a24072c8831ef1f64232c2cf430431cb5212c2c0f30d40f491f302c682ec29ab21ce72bba2b26a01118bf2bb62610a2c011742b5ca19fa4189d6e2b79aa39a526a11b2bb2aceaa54ba13c2bf2acefa5859d532aa5a9a0a6d598d629eba6c0a744250f2a5ca6fea6a72b452910a5f7a6dd2e1b290ba67ea6262fd8285da685a6492f8228eea5a3a6c92d4b28e1a415a7b62b2b281da40da7bc268c2788a469a711a26927eca4c9a6b4ab592612a485a76eae542638a287a714aea12558a110a707acb02473a190a724ab9624b5a207a81eab7a244da3c3a7b1aa1324c6a258a737aa3123c1a1e3a698a9612259a173a62da9e521e5a01ea6b8a86021c9a0d0a58da8e620a0a0aba55ea8a920a1a097a536a87c2084a052a5dea7382023a0fca449a7b91f379f91a4f8a6c91edb9e46a482a6481e669e08a431a6ad1d439ec0a3bda5651d159e64a352a5fb1cd49d06a3f3a4bc1c569d7ea28da43c1cc99c0da247a4141c869cc0a128a4951b769c9ba102a4241b539c82a1baa3431b659c6aa14ea3e61ac39b29a119a3691ad69bf7a0daa2461900004e811f058506061e59212523ec25d822e6252e28402a9223f026a628c52bc723172642287e2ba72583259327302cf42a69237326142b4530d5217925ba2af53149207224312b3232a31dea21a42b8d31b818da200b2cb4300599f71d2c2c7a2f8a9dc3170f2cd82caba06591ae2b2428cda23e9a182b63a19ba4a39f072bc3aa9da599a24c2b5ead40a6cba4c82a2aab69a6a5a45a2abca82fa729a43e2a1ba7bea7a4a1292a76a65fa760250d2998a753a6f82cff2837a7f7a6b42e2729bba620a7d32fee28e1a585a60e2f372812a6eca67e2d1328a0a40fa74129bd2716a419a7a59fef261aa422a752ab5e2673a340a773aef62545a2a4a78fadad2560a253a717aaf22420a1eca6b6a96024f0a157a7f1a923249fa27da706aa0a2458a223a707aa6423baa1f4a6eba9e722b6a1afa6b6a949224da176a639a9ec2107a150a6c1a86921c9a006a67fa80a2199a0c5a553a8b6207fa073a513a8662037a014a573a71e20c19faaa4f2a6461f629f64a479a6c51ec99e36a41ca63c1e9f9e07a4b7a5c91d3b9e99a355a5751df49d22a3f3a4f71c639d99a28aa4721cd49c10a21fa4161c819cb3a1c1a32e1b2d9c5da120a3981a159c2fa1c8a2711a189c27a193a23e1a059c20a1e5a2711a6a9bd9a0dfa29d1a0000d50086812a04381e2922e623c1255723e126b928d62a1a2341264b289c2b6d238f250128552b71233a254b27062c91254523a826832bef2b97206425d62ae330441f1924bf2b8a32be1d0d22e62b6b32701a0d210d2c9931de95fd1e3f2c5330749dce1a1f2ca62d3da17f91ec2b9329aaa3a99c9b2b119f3ba5a7a1982b89aba3a507a4032bceac40a61aa4c82a3fa933a556a38b29a6a650a69ba490292ea5c2a6a7a499291ba75da72312142928a638a79c271c29eaa52aa7292e2729baa539a71430a5288ba4f5a6f72f2f2816a4aea6932eab2774a41aa7cc2b9a27a5a486a795195b2760a6c2a7caabd12609a4c7a7eeae262610a33fa7dfac4a2562a2fda6f4aa862462a1cba605aa1324a7a22ca70eaafe2351a248a7faa9a923dca25da7dea98623eaa228a760a9d022baa2caa654a9492215a287a613a9cf2192a143a6cda847210ba1f5a598a8e520c4a0cba56aa8a6205ba087a534a828201aa037a5e7a7c01f859ff3a452a7311f5d9fc4a4dba6a21e1a9f98a468a6531eda9e56a425a6f91d8f9e2aa401a67d1d369ef9a3e5a5421dd09d7ea3e2a5f11c5b9df0a294a5a01cb29d94a2aaa4631cbb9d31a22ba4fc1be39dbba1e0a3781b679e95a12aa31c1b4c9d26a1e4a2de1ab99ba5a068a20c1900004201a505160cfb1cf720dc225225d2221a263328632ab3229f251228ab2aca2294250e286c2b7e222e250428c42bfb227124af26172c07259522a8251d2c622c2f206d24df2b7031f71c8d23f42bde32c015b3212a2c6e320999aa1f3f2c3b31ae9eee1a352c352f89a1669aa42b062bb9a377a0322b5d9f7ca4f7a1822a53ab26a5b5a3b12a2bab4ea571a3392a68a5e1a590a40a2abfa4d9a5e5a4802951a6a8a575a3262921a781a644a14a2983a466a65792bb28eba687a6dd2a6528f8a4e2a77e2fd728f8a45aa75f3050283aa42da7592fde2762a5dea6072d0627bba542a71625192729a394a608aa002610a3d1a5cdaddb2453a29ea52bab3a2439a491a651a95c24a3a36ca7c3a999240ba31fa777a9182466a217a7a4a9b0235fa23da7baa9812314a200a778a90c23bba1a7a609a96d2262a138a6c4a8da2121a118a6a5a88321c7a0f3a579a80a218da0bca53ea8bd203ba075a509a8672006a042a5a8a70720a29f10a561a7951f6c9fd0a41aa7201f409f94a4f4a6821e0e9f6ca4afa6371eb19e29a461a6d91d399ebea3f9a5461d9d9d1da349a5e61cea9c43a2b3a45c1c429c87a144a4891b049c33a1fda3ee1a139c38a197a3f51a369c18a1eea2a41ae09a70a0fba1351aab9a049fc3a0bd18000029017008cf054c1ed6216e2374253822c625a2288c2a7c22f825b528fe2a5d22c6256a28562b3e2244251428992bf1216a242527032c82207a22fd250c2c0725a81ebc24d32b8d2cee186a23482c6d317b95821fd22bd732e5990c1a1b2b3a32d39eff90732b13303aa1fa9cbe2a222c3ca3c0a0da2a66a2a4a47da3d92a9eab36a5f0a37d2ae9a884a583a4c5297ca594a5d5a3572963a6caa565a4442990a6e9a56ca41d297ea62fa687a2172999a569a790a41729f1a5c2a75b93532883a58aa7622c542805a4c0a604311e2879a4a3a62031542746a7fca6d42efc26b8a4f2a6812aa126e1a2b7a6faa7d925afa4a9a62dae5125e6a16da6d6aaa02496a260a61aa92924ffa12ca78fa96624f7a230a78ca93824aba257a7c2a92c247ca235a77ba9972322a2bca606a9b022cba1aba6fea85922a7a194a614a903229ba170a60ea9bb2168a131a6e8a85f2110a1e2a5b5a8ec20c6a088a53fa8a6205fa00ea5bba7332008a0c8a46da7751fc59fa1a42da7ee1e529f6da4f5a68e1e179f3ea4a9a6071e9c9e09a43aa67f1d659e8da3caa5241de79df7a237a5be1c8d9d81a2c1a44a1c489d15a252a4d71b199dd1a119a4401b559dbfa10ca43c1b689d9aa1dca3ce1a159d31a15ea3741a589cbea088a2f7190080e283b881350c111c2d21f822c0242922512675281e2a8d2205263c28f62a6b2292253128392bcf210a25d5275c2b7221402462279f2b5c1fd1218426b32b541efd1d2f24002c3222ba184020f92b5f2bd795fe19f82b25315c9c4217b12b2e32c59fb197072be6301ba15f9f2e2a162d6fa34ba1522a7f9849a44ea2032a7da895a4fda29b2960a52ea525a4852987a689a5c2a40a29f9a417a695a5dd28f8a355a673a5ae2829a474a608a677280fa49fa61fa67e2883a4bda6b1a40d2859a444a64026682731a4e7a68a2f352872a334a77831c0272aa4eea67e30ee26dea3bba62b2c202693a46aa678aa7325bfa411a7d2ae5a25a4a288a6c3a98b24a7a1bfa642a8842499a2b6a6d1a83824c2a218a748a91d24fca236a76ba90b24f5a2efa622a96b239ba2c3a6eca8ea229ba2cca6faa8a7225ca2bfa61da955220fa2c3a621a905226aa174a615a99a21fba031a6c4a82e218da0cfa543a8b02018a061a5b9a73e20969f09a555a7c41f639fbda4d9a63a1f269f7ea49fa6941e0e9f4ea434a63d1ede9e0da4eaa5de1dbb9ea4a38ca55f1d409e0da307a5db1cbf9d8aa28aa4811c159d0ea239a4151cda9cc0a1f1a3951bcd9ca4a1d0a3701bc29c51a1a8a3161b019de2a014a35c1a029c16a024a22f1900802081bb012e0a9d1c87210b23ac245822b4268d28162aec2116266328782abe21cc2558282d2b9b21592515286a2bf7202624e426b52b1d1f6a210b25be2bdc1cc41d4323982bbe19660f021fb02b901d649dfe16e72bb9275aa05b9cff2b332d4aa02f9b132ab42e8fa1c49f812a272bc1a298a1952aa5a1a1a3cfa1b8299fa477a42da38229b2a263a580a4fd29d0a2a4a536a564291ea4c4a5b7a50f2948a417a601a6d3289ea475a632a6de2855a467a695a65f2839a4efa619a7f627e1a325a7c9a4d9271aa403a7d2292d274aa42da6eb30d12677a5cca557316f26d3a2e6a5592ee6251da148a5dca8a92490a4b7a60aae63253fa2faa543a86f24a0a25ca605a96f240fa4e3a669a950243da4b2a6cca90b24b6a3caa6dda88b2333a3eaa60aa94f23dfa213a726a921237aa215a724a9b9220ca2e9a6f3a832227fa1b5a6cfa8b3210aa155a68ca82d21a5a011a648a8c72057a0c8a510a8882020a069a5a3a72420dd9f1ca53ba7e01fb29fcca4cfa61a1fa29f80a474a6971ebe9f3ea417a6361e679f01a4afa5a11df49e93a365a5531d469e22a31da5db1c9a9dbea2c8a4a41c139d85a2a7a47d1c809cdca12fa4fc1b579c3ca14ba34d1b6c9cfaa0b0a2ca1a3d9c94a0a0a2081ac79deaa06ca2a9190080829167935017c72095258227d7286322fe269e28722aad210a264128402a6f21d3253128b32a26215725c727f22a78202e244726152bc11ea3216c240c2b771c721db321f72a7515280fee1c532bbf90b09f91962e2b6793a3a0aa994d2afe18fea1ba9f412a451c43a359a02c2a8c9dbaa282a1a02921a27ca32ba23f290aa2d2a435a4cb2921a23ea5fea432295ba486a596a5c128e5a3eca5d5a5c028c3a303a62aa67c28efa32aa682a63e281aa44ca609a703281da442a616a766276da4d1a522a6682656a3f8a5cf9f9b269ea1a9a5382da6263fa2cfa50e31cf254da5c3a6d72ef225caa2c7a6dca9d225f2a42aa63bad08256da24aa522a8032464a19ea5dfa7ec238ca27fa69aa82e24c6a269a6aea8f02338a2a0a6c6a885230fa29aa6bda8fd22daa190a6cba8b82207a2b6a6f7a87722c0a1b3a617a90222a4a199a6f6a8c7214ca14ea6bea83f21e6a016a693a8f820b2a0bca55da8932088a070a5c9a73d2043a015a522a79d1f19a0b9a4c8a6fe1e11a064a44ea66e1ef39f12a4e4a5f61d3a9f96a37ca5551dc99e31a332a50e1d3c9eb7a2cca4a01c969d6ea279a46d1cd99cfea12aa40a1c539c90a1a5a3551b2f9c3aa124a3f81a309c02a1c0a2871a229ca1a092a2f5193e9b53a040a2b81800806e93329769158720d524632678286e220b287229972ac5215a26ac28e3290e21d42523286e2a9f2043255027cd2aeb1fbe232126da2a521d6c208123942a28192f182a20392a360afb999e195a2a23978d9ec5967f2a2d9a6ba0199d282a799b0fa111a0eb29de9eada2b9a1d129b6a00ca390a23229bba021a480a3552993a1cea44ea4782934a211a579a4be286fa365a508a59e280da4c8a56ca5732813a4d6a5cca5442803a4b9a5d2a50f2839a414a6b3a6f6272ba46da681a7a127fda337a625a7362769a44da65da6c72631a3aca532a4892546a23ca5812b602570a0b6a54f2d8f2545a00ca53fa8a4248ca055a4d7aaf322b4a1d6a41ea82c234fa15da5c4a75b239fa1e2a533a87723b6a1dca57aa8202325a22aa689a84d23eaa137a680a8f522e2a158a6a9a8d5221ca2aaa6e6a8b822fea1d9a6fda88222c0a1dca618a902225da197a6eea8a621f7a043a6a7a82d21b8a0fba571a8c6206da094a531a87a201ba027a5daa7f21fe79fcda451a7521f729f75a4c1a6871e719f2fa43ca6e11dfb9ea7a3b1a5601deb9e22a33da5db1cd09ec8a2c7a49e1c819e5da285a4621cff9d00a23fa40b1c2c9d88a1f4a34b1ba89c3ba1a4a3fa1a7b9c0ba154a37f1a039cc2a029a3331a8f9b7fa094a24d1900006381230cc11282214726fa28ca28e421a4267728562967210a262a283c29162132265a28e1290c21c5254128542aaf1f28244626572a941c1120a0230c2a1418b10e081e9829f889669b48104b29d596049f59995029ea9a15a1e29d5629c69c17a271a05a29ea9ec8a21ba179299ba020a3c9a171296ca08da37ca21c29dfa0e8a3e6a20329e2a1bfa417a4e2280ba2e4a479a4952831a234a525a55d2897a27ba55ea52228e5a288a5d9a5932727a3a2a52ca6262716a39da579a6c9261ca3a3a5f4a64a2659a423a63ea7d42544a297a57ba64e2542a2f4a4f91c94240f9f74a5ca29292599a270a570a9a224bba0faa445a9aa23b2a1f9a40fa8232373a103a5a3a77c2214a24fa5eba78622e1a138a521a82922eea181a54ca874222ca2eaa582a8d9225ca267a6c7a80f23b7a2f5a6e9a804235aa2fca6f0a8bb22daa1f1a6e7a8582250a1a9a6b5a8e021dda022a673a85d218fa0c8a532a8e1205aa060a5daa76f2026a011a53ba7f41ff79fafa4a1a6451fa69f59a41ba67d1e649f07a4b5a5d61d2f9f9aa354a5571dd59e17a3f4a4fc1c639ea8a296a4951cd49d4ca249a4561c939d00a212a40b1c7b9dada1b2a37c1b459d68a14ea3361b309d36a1efa28d1a669cbba0d8a2051aa59b6aa085a28a1900801f94429502121c21f625dd278d283021882655282d29cc21162651285b29bc203f26d628c32915218c266b29472ad71f4d245f27fd29151c101d31215929c9138098bd10e528c8961ba0289dcf284f9a2aa125a0b3280b9b73a192a0e5283c9cf7a1fca0f528229d42a273a112290d9e99a2e8a123296d9f39a3eca20c291aa00aa4f2a3ce28caa1a0a47aa4c22858a218a549a58428bba26aa56ca54e2808a37ba5a3a50b28eea3c2a5fda5fe2707a4d3a5c2a6af27f7a3bda5e7a66727e5a3fda570a7562732a438a650a712274ba21ea591a78725bd9f58a48fa80824909e94a407a73b2479a08da4c8a8f4236e9e97a45fa8a5222aa073a4dda7e5213aa16ca4e5a6ef213da165a48fa6a42111a177a4bda6c9200ea1b9a412a74e215aa18ea51da80122eba1cfa6eea8bf221ea26ca76ea9e1222fa293a7a4a9c522d9a1f6a635a9052238a163a6b4a85821e9a00fa652a8e420bda0b8a513a8a42087a048a5a4a7122003a0c5a4f4a6471f669f53a475a6671e139f1aa424a6021ec69ed9a3c9a5931da69e92a37ea5601d5f9e3ea337a5fc1cd49ddaa2c1a4b81c5f9d68a26aa4761cff9cfba124a4361cb29cb2a1d8a3da1b789c70a156a37f1b609c1aa10aa3a51af99bd0a0b4a2901ad89b6fa0c4a11f1a0080728e6091f10d232107251f270f2862211926e727b9282621b625cc279028c420842665287c29912131271329952a572032250528cc29d0184610e41c9c283b98eba1c5a1ee27999a6ea2d9a2c827aa9a86a157a13d28139be7a025a0c428749c25a17fa0d628249d63a16fa0d328b69deda13ea1c8286a9e44a2b4a1de28bd9ff8a2afa2cd2887a033a408a4de28e6a0a2a4a3a4c5285aa1e0a441a5632897a11aa598a5f127c7a131a50fa67f2707a248a556a6112710a240a553a6072732a26ba585a609277ea286a5e3a6ed264fa3e5a5a0a7f72625a2e1a543a80326169ecfa409a89924d19e91a434a7e023ea9ee6a340a7ab22779f99a376a63e21a7a09ca302a6f91f4ca1cca2caa4e71d74a06ea29ca4831d6ba038a367a5131ffca0d9a4eca65b21fea1e0a6e0a8f222f3a107a8b3a97c23b6a1fba7a6a90f23b8a166a73ca9582271a1a9a6a7a8d2210aa1b0a508a8db2084a01ca51fa743201aa0cba48ea6e81f979f6ba437a6021f059f14a4c1a54a1ea69ec7a36fa5ee1d759e5da31fa5731d089ee4a2d9a4f31cbe9d8ea2aba4b51c7d9d32a287a45c1c349deca156a42b1cb39c81a12fa4971b6e9c40a1cfa3d71a169ceda033a37f1a2d9cafa0bfa23f1a889b5fa0c2a27c191d9b4fa055a2af180080d88bfb855c11f01c78213c2333255420b42490263628c81fb824462664280520cc247f26a3288e210a283c293c2a2d229628082a352bff9c5ca559a6d6267c9cb2a502a67c24269a32a255a2a326a49810a05c9fb92723991c9f699d71286599f59e349da628089acb9e169d9d284a9c689ff79db428879d81a0de9fee283f9f6aa127a12129b1a0a8a2cba2fe28aaa1e0a31da4db282ea24ea475a47028eaa15fa4f5a40f2872a29da4f9a4822768a2d0a472a55b27b3a227a5c6a5dd2701a391a589a63228dca210a612a71c2866a259a6c5a7b12719a21ca609a8a0263ea28ca5bda7a92563a253a554a7c62445a2b4a463a63223eba179a380a5202074a108a268a4b11d35a074a009a2171cc69e079fb3a1371ca59f2da019a3581c21a172a310a6f71ffda347a7f2a832238ba38da827aaa82498a25aa8e7a93624bea1e4a6bda8ae2243a1cca5e9a74821a8a03fa545a7ac2041a0eca44ba73820df9f99a41ba7961fc59f61a4afa6241f039ff5a3d5a5501e319f9ba33ea5cd1ddb9e07a3d5a4341d769ea2a28ca4c41c179e40a23aa4661c859dcaa1fca31f1c069d70a185a3d51b7c9c29a150a3311b119cd7a0eba29a1adb9b9fa0afa2611ab29b6da059a2c319d79a31a05fa28519979a22a0c2a1c519078e129372931414b41bca1fb62149240c1e34220624e626181e682186231927c31dc0207f22522782187f1d0020c626f81fab245428b12a3e1eab2306287f2c6d120f17821d41288f113a0bc31bbd275288f894cb164128389361983c0d3a281398879a24945d283a99bb9b37947a28e69a159d1b998428009cd69ddc9ac2289f9c1a9e4d9cfa28e19d939fc39e7a29a0a0c8a0a1a0892945a042a22da2b4294ba0d1a231a36c29c6a015a46ea49329cca0b0a4eda4a92998a141a5bca5182a14a275a62ca7ff2975a2c2a63da8852891a2a3a562a72f264ea176a41ba6a42467a1daa44ba621248ca187a4f2a51523a5a177a4e9a58a2242a141a4a5a5b4216aa05ba312a5e020089e85a0d8a2f71db19d3a99fd9c1098929c0c156910269fb19ec1a14da5811dcba350a968ab492601a572a94fab8e2563a231a89aa9d3239ca0f7a564a8802198a086a511a808212aa001a540a76320ac9f7fa45aa6971fa79f0aa488a5a21ea79f73a32ca51e1e879f3ca316a5b41d339fe3a2faa4461d9d9e9ba2f2a4e81c3d9e27a292a4921cc39daaa11ea4201c789d41a19fa3a61b549df7a05ea3511b0a9dd2a01da3e01ac29cb1a0f4a2411a779c92a0b7a22a1a0f9c59a059a2bb19bc9ac99fb1a12019ee99f89eeaa087180080118bf68b118bfc191a1e25206821041d05210f23fc24ee1cb520ae22a9256b1ca71f5d211d255118811ba71d74217f0d6a1598198b1dc1161b19651d112575172618861ee52791149a11171c0e283588ac9444160028bf94e49a6b93dd27f4983a9df09bc827fe9a229f639ec427779c72a011a09427229d29a1aea08327939d5fa1e6a0bd26de9db2a1e0a112260c9edea1b2a14d25ab9e94a1aba1bc23459e00a1efa0ab1a8c9d37a0d99faa9bea9cc39e079f1c9c6c9c1e9e889efe90b19cc89dc99e5f1a619db49e47a0b41eea9e89a019a20c211ea0a1a17da3c32189a04da245a4c821aca07ba296a4592122a1eaa2f8a43c2116a120a31ca533210ca152a34ea51e21b6a0ada2e3a45220019ca9a0dea3ac1df599600d158f608d211a77262428b0a193a65fadc3aea629e29c2ba55da8662146a014a458a60e209ca034a4e3a51220c79f89a39da5051fc69f62a343a59d1e5d9f23a316a5251e129fd3a2ffa4b51daa9e90a2d1a4441d3a9e42a2a8a4df1cfe9df1a15ea47b1c739d96a1f7a3371cfb9c18a17da3711ba29ce9a059a3dc1a4c9cb6a01aa3a81a119ca2a0e1a2c51af39b87a08ea2661ad29b73a040a24a1aaf9b4fa003a2171ab69b35a0b6a1bf19109bf39f73a14c19e39aab9f1ba10d190000a9802a03a9009c1d5221d9230d257b1cd4208224c5258c1b4a1f5722df245f1a5f1d0d201a231f17a51a321d3f202416cd1b331f0323b918d81bcf1f65262f189b18e71d2b27331535118f1b5227c2076694e815502754949f9afe9557276698779dd09b2927309a369f499ef026169bd99f4f9f8626399c47a024a00026c99c60a05da002250c9dba9fd19f0523169b3e9d159e9e1fd499d99b259e701d459a709d5e9ec11fa99b249e5a9f4c20bd9b669f6ba0d920339ca89fbca0a520379c01a02da16620819c2da05ea146202e9daba04ea25d20b09dfda0bba28f20fd9e5ba129a3b220fd9fbda1c8a3d02041a007a23ca4db201ba04da294a4a72015a0a9a2dba48a20fc9f94a2fca42d2066a0a9a2ada411200da013a212a4131f44908e974b9a3a1460892c8e59947108749a059d47a0f818149ff0a111a4901d7f9f4ba25fa42a1e24a03fa284a4c91da79f0ea244a4881dfb9ecca1eba3141d399ea0a103a4a81ca49d90a102a48c1c509d7fa1e5a3701c3b9d7fa1d8a3321cf99c44a185a3051cad9c07a119a36f1b8b9cdca0d7a2191b4e9c8ba084a27f1a319c56a035a2341a039c16a0d6a1a619069cfc9f99a15319f19bcd9f7aa16419fa9b9f9f2da11519469b629f1da1ec18689ace9e90a0171800002a1410167b09ef1d5a21e222dd24181de320c6225825c61a331e7e2014246319561c7f1e38229d177c1b171e29225818551caf1ea0247b188d1b6f1e3f2611176518ad1dbe268c131614301cb126ab06ee901e19a026ec918398910c8326b796dc9bce9576266999b09dc59b5f26bc9a449f3d9e12268f9bf29fe89e7925329c829f689f7724289c009f489f3723909c389fb99fe122b19dc79f48a00723559e79a002a14f23489ef1a0c3a17223379e63a187a24e235f9ed8a118a3da223d9ef0a190a37f22579efaa1caa31d227b9efba1e5a3b921939e05a2f9a36621ce9e15a21aa41e21e79e1da222a4d520cf9e0ca236a49420999e11a253a46620719e2fa272a45320969e43a27ea44d20639e60a2b3a420205f9e9ba2b7a4ee1fa59d16a230a4d71e4b9b6fa066a2941c3799af9e11a1051a4a9aaa9e37a19519ef9b10a001a3ad1a769c68a062a3d21b039dbfa066a33e1c3a9deea08ba35c1c889d02a1a5a3721c759df7a06ca3591c669dc1a050a30a1c359dc2a034a3a31b1c9da8a0fda2251bd09c89a0bfa2f51a7e9c7fa0c6a2971a4a9c74a092a2721a209c52a069a2411aa09b24a020a2b919469b08a0daa192190b9bc39f99a15d19039b7c9f49a1fd187a9a2d9f29a19c18699af09ea3a075185d23441aae1c051f512be0224f253b28b02d4725aa253e2b9b2ec02153235c29692e0c20c2206129422dc81c611dad28082e2c19431df02727302815571c2828042ffc0ebc1a7e2a792c3b947b1ae428ae2ae798660fc628cc28c59cc098d12818280d9acc95d1273199f7981420922771a9409c0723052634abeca7cb1fd32990ac81a95c9b132975ad4fa77424012884ac8da673294928feac6fa53c2b622736aa4ba52f2b4f269fa6dfa49329862565a4e6a486284a2593a2aba47f27ca243ba273a49d26b024b2a396a4be25b524f2a2a2a3e226d6235ba13ba32118a423869fbea2a5a4a023ad9f10a330a7fe2365a0f1a2c1a9d423f4a389a96eae482415a2bda71dac0121209f4da46fa88c1f719f5ba425a75320609fe1a30ea640201aa0e1a3eea540207a9fbaa3e8a51c20959faba3b4a5d41fd69e37a39da5111f309ef9a234a5751e849db4a2eca4201e2c9da0a2a7a4ba1d7d9db7a29fa48f1d459d83a26ca4531d2d9d42a26aa4f51cf89c08a269a4b91c709caca133a43f1c559c86a110a4151c409c6da103a4aa1b4a9c4ca18aa33b1b009c01a1baa2c11a369b9ca0f4a1381af09a70a0c6a1fc19279b6aa0f5a1f419d69a62a0efa1ea192c9b72a0dfa1b819ab9a4aa0c8a11e19829a18a026a1b118021d2a19661d561c602be42518282a29f22d0626e527fe2aa42f27244a25f02ad12f0a211522ac2a2d30961ff61f002b3b2db7159e8cc029eab009995a9859297aae73951c1ea42a46ab07901d22fc2a3f218c152d23882a2a9a101c7323d02922a565233626bb2a8d194827e629ff286aaa5c25a929362815ac47a68aa4212afdae91ac4cabf729a3aefcab92a09f2896adada9e527dc278dad60a8802b742788ac7ba7842cd727a3a89aa6df2bce2754a69ba5ef2afc2608a883a5f42ab826d1a5b8a43a29a22613a468a4a82a96276ea1b3a25b2857275ba01aa22223aa2756a083a101a66e274aa1c2a20aaa6f272da407a5ddac6c2567a33ea871aefd221aa5a4a963aeff1d04a244a8faaba71e22a173a684a9d31fa9a0e9a5fca88f20e5a09aa570a878206ea038a5c8a77e2030a0cea400a715201a9f56a48da65f1faf9e0ba4eaa5c81e1d9e7ba353a5321e099e53a31da5111e4f9e2da3f4a4de1d2d9edea2aca4601d7e9d7da267a4041d4a9d35a235a4bd1c1d9dfea114a4601ce49cd0a1eca33f1cc59cc8a1baa30a1caf9cb5a181a3e01b629c78a128a38c1b059c37a1c5a2321b129be1a04aa2821adf9aa2a00aa2401aa09a71a0d0a1101abb9a3fa0aba1aa19ab99cd9f9fa13419059a8a9e41a09817ec1a6b1deb1e6e202b2932267628662aad2c8a253227ba2ac22e8d24db257c2a50309a238624dc2b96309c208021292a3d30d819a01af22844a45893508f1629399ccd0fd819022b23a57a16991fad2a35248c1db6237e2ad99985205124722a5c99bc21b425dd2a9fa20221e7266d2a68a71c128024342a8eab14a546a1662a4fad1da95da4762abdae55aa1ba4d329c3ae05aa3924532a37adfba85229fb28e0ab9fa7382bee281ea88fa6902caa28dba5a6a5842c422877a548a5f02b6e2831a5c6a4ee29202833a4dfa40f292528fea246a444250e288aa390a4019f6b2868a619a440a78a263da333a5ceab8626a7a185a6ebadc5244da11ea826ae432354a2afa886adcb20ffa176a859acfb2072a1eba7d4aa12217aa16fa708aabc219ea18ba62da90c2148a1eca5b4a8aa20c3a04da52ca8722011a0d7a448a72120759f89a489a6a41ffc9e50a44fa62d1f059f2da40da6f41eec9e11a4d2a57c1e9a9ebfa363a51b1e179e41a320a5791dcf9defa2d1a4011d539d85a284a4801c109d18a237a4341cd39ce3a10ca4041cbe9cb6a1bba3861b689c8ca160a3501b379c5aa102a30e1b059c2da1aba2951ac89beda07aa2441a6c9ba6a088a2fb19649b93a055a27619459a4aa08ea22d19f19a2aa0b8a107196f0bd81a111caf1de42683265828502a672af7258227052b282ec325ec26a22b293084245f25ef2bb630cb223724312cac30a120a721452c4730c41d1a215a2cac2ff31d1321602cb92e6d1cc721652ccf2ded1cde239f2ca12c891b8723232cb6290a1d0924a12b1c258f17dc22cc2b78a13f9e871eb82b20aab8a41a1f6e2bd7ac40a7a59eb02a68adc0a81e9d9e2a4cae3aa96226982ad2ac82a82829c729ceaa28a8cb2a7d29b8a827a8e92a3b2952a85ca7e62b17299ca743a6db2c2729fda5cba5512cbc28c1a56ea6d6290e2981a46fa56a27b2288ba4bfa4622150282fa484a514a8d727f8a2a5a658acd526e3a2d7a7afaddb2516a373a83aaeed24f3a31aa975ada724a5a285a8beac1b2338a205a8f1ab122239a261a72eaae221eca1c7a631a983214ea174a6fda804211ba136a6c5a8d420d9a0e2a555a8842099a03da585a7f01f2ba0c4a40da75e1f759f93a4b6a6fc1ee39e49a422a6781e289efaa396a5c21d939d91a368a5661d7a9d5ca33ea5311d609d1fa313a5f71c489de2a2c4a4961c0e9d89a273a45b1cfc9c47a234a40b1ccf9c2aa205a4da1b939cfda1b7a3a01b4b9cefa196a34b1b369cc2a161a3e61a2d9c81a10ba3981a419c5ea18ba2301a839bfda05fa2d1191b9ba5a055a21b19ff14351a411d581cf720aa2277249e268827bf256d27292b362cad250f27752b362f29259926152cad30492429261a2c3b31cb2216254d2cce3022210d24362c923075204d234f2c5230511eef22482c862fa91dd522682c482db51c5523372c0e2c93164a22252c2429c399ca21122c1c1831a1f51f022c8ca57ea41f93ac2b36ac56a669a1262b87ade6a78a93f72ad2aeeaa8e39c432bb6ac6ea8d822f72982aa03a88a27b6297ea967a7c52939292ea815a7012cff285ea6f4a66c2c0b29bda681a61a2caa285ea65da67c2a9b2829a50ba62027322881a474a6801e41285fa4d4a6e0a58f2723a442a7a7abbc26dda1bca774adc72527a23ba851ad3325d7a247a8deac622495a157a8bcabde23b4a136a83aab512324a2bfa758abab22e3a160a75caa4c2294a1f3a6aea9ae2131a171a607a90b21b9a0e3a56fa87f2096a081a514a8272041a01fa592a7651f20a0f1a41aa7481fe19fa0a4bca6d01e9e9f60a426a62b1e069f25a4d8a5c81db89ee6a377a5541d839eaca334a51d1deb9d30a3f2a4cb1c3f9dcaa2bca45f1cd89c7aa27ea42c1ca79c1ba24fa4f41b589cc3a10fa4821b349ca5a1a3a35b1b299c4da1eda2bd1acc9bf7a0aca2511ad99bd3a06aa2fb19e99a93a07ca286190d9b71a01fa25c19000022180519220fcb1e6822c724b9258625a72629280f2b732993265c28f12b232d7025b927f32b0b308924f226e92b2f310d245526302c7c31532225255d2c3331ae207524872cf730a81f0724902c8330c21c2723972c292f87164f21862cc02cc49629208c2c1a29509e8f18572c502179a19412242cb3a568a4c692e42b56abd4a5b69d412b35adb9a70e9ef12b1fae60a88493ac2b5baceea76121552a03a964a776259f296fa9cda7bd285b294ca769a7d22afe281da690a7332c07296ea7dba6b92b762824a73fa7df297e28d4a539a72f262d28bea43ba75a98c82721a57da703a84f27d4a49aa70bac9a261aa30aa8baad1f2606a34fa881adab2583a269a84aacf224a4a125a8edaa4d2429a23ca814ab162421a2efa7afaa5923d5a137a751aa512245a1cea6e9a9e2213fa18fa667a98721daa01ea6d9a8172187a0ada585a8ab2065a06da54fa8392037a032a51ea8fe1f12a0e1a482a76c1fd09faaa497a6031f689f7fa438a6671e649f50a4f3a5241e639f3ea4b7a5c81de29efea36ea5721d439e88a31ea5f71cfd9d10a3bba4a81c579d80a25ea4241c999cf6a1fca3ad1b1f9c85a195a31c1bc49b1fa149a3701a989b01a109a34a1aae9bd1a0d8a2e7192c9ba7a0d0a28d195c9b83a042a22c1900005c088c0f160d031dbe20f2229c2499249d262c28382ba2261426d427922bf629aa257327172cef2d0725e326f82ba430072443260e2c9331f1228a25572c9d311b216d24582c37313b20ba23532ca230d21c7a22852cc02f6d10bb20992c062e7599981e552cac2b09a0741b232cd92551a21512162caaa461a4e612a12bf2aac2a5609f912bcfacbfa68ba0a42b0cae43a88c9c262bc1ab40a75e19f82924aa93a728250c2ad9a95aa77c287029b0a8b0a6032cc2285ba708a8c32c772951a861a73b2dcd28fba77aa72b2c892809a66aa7ff28302817a582a7a321e127b7a4a7a72ba720272fa4b5a787ac69267da317a8edad00268ea46ca892acc425a0a32aa8f5aaf224bfa101a8c9aa3724bea250a825ab2a24aca231a8f8aaa4232fa2a2a723aa92226aa1c7a642a9af2128a15ea6caa84621f8a02ca6aaa8fc20d4a0d8a585a8a9208fa095a547a8362049a04ca5c1a7e71fa79ffca429a7431f499fafa4aaa6bf1ed69e6aa454a6161ec99e36a401a6be1dac9e08a4cfa57f1d9e9ec9a373a53f1d399e77a333a5de1c0f9e3fa3fca4ac1cae9de3a2bea44a1ca49d9fa26ba4201c5f9d44a228a4891bf49cd0a1daa3111b929c91a1a6a3d81a519c49a155a3551aa49bfba0a6a2be19659b07a03fa101180000f305440de30c591db2209022d7241324cb266528ed2a0f25b0267d28892b96260b266328e52b092b2625b627b92b5a2f48248426f62bba3102235f250b2c433217211e24552c1032821edb227a2c70312c190a217e2c68308096781ea42c912e259e561b932c072c3ea1ee91502c0626baa3699bed2ba2a309a5d69e6d2ba9aae2a552a2622b57ad8ba67ba36a2b8cadf1a68fa2e02a99aa66a705a3172adea80fa8679c4c2a56a8f5a6ca234b29e8a51ca74b2a342989a6d2a76e2c572929a6c3a7d82ceb28b3a506a8482cdc28b7a5f3a7bc29772851a510a8da21412808a64ca894a70328c4a403a89aacb92635a33ea88aad442606a350a807acc6253fa210a88daad32499a251a864abd0242da378a8a0ab80248ea3faa70aab952324a38da75faae22219a210a7d0a91422a4a1e3a66ca9c621fba05da6f0a83421dea0eba596a8a220a7a0cea56da86f2099a098a54ea8392074a062a503a8ef1f28a00aa575a71b1fa09fb9a435a7831e4c9f6ea4c0a60a1ef99e30a462a6761db69edfa3f8a5221d679e9ba385a5bd1c2d9e48a31ba5891cba9dc6a2baa4121c279d33a26aa4cf1bdc9cefa141a47a1bac9cbfa117a4fb1a8a9ca0a1d8a3d61a869c8da150a3801ab69b35a12fa3ef19d79beda0aba20319008000805e000080871d21213b23142559236c261b28a32aec232e279e28f62b4f2465268328ea2b1126e42528285c2c332b1d24c426db2b8f3013226a257d2b43325a201c24092caa326d1d6622492c283252160e21832c1f318b9be41c7a2cf22f249f49187f2c4d2da1a15b98302c3a2813a4069df42bd5a311a570a13a2b01ab15a6dea34f2ba8ade7a693a5f72a49ace8a6aba5612a1daa6ca777a51b2a2ea7c6a765a4352a62a684a71a9f68294da6f3a6c624e7288da524a74f2ad82830a527a7d72c872873a549a7a52c4e280aa61fa80f2b88286ca601a84424d32786a5f9a7fda71927dda42fa894acd02659a458a8feac7e266fa319a8e8aa9525cea261a706a9932447a24da71aaa212447a3f2a74baa2e24f3a2a4a735aa96238ea260a742aae922dba1f6a6ffa95822fda1bda6b3a9cd21a1a1b4a652a98d2159a187a6e4a8452101a135a69fa8e420eaa0f7a57fa89720bca0a1a52da83b207ba034a5c5a7ba1f26a0e0a442a7151fcd9f90a4cea66c1e219f5ca45ca6e01dec9e32a4ffa5691d789ee9a393a51a1d359e63a329a59a1cb89dc4a2b3a4371c4a9d4aa24aa48f1bca9ceda116a4dd1a899ca9a1b1a3611a6f9c7ca127a3401a699c74a1e8a2f919fd9b3aa1f7a2061ae79b11a141a3e81900000080d78500804d1eac21592364255023f426d228162b2c233d265a28702bcf2305263f28e82bfd238f2526282c2c3d260d243f27be2b822c91217e255f2b6331b21f2f24fa2b3233721deb224d2ce5320119cf21492ce4314799d41f852c8530f39e551b722c0b2ea2a25d98362ca7295ba43c9e0f2cb6989fa566a2c72b03ac5ba640a4752bcaaddba62ea5eb2aefaacda56da48c29e6a6a3a6b6a5be29cfa669a7e4a5072a56a728a854a3862926a87ca779a0022906a723a71a259728f0a46ba7182b4228dea4c3a7902c5c28c8a4e1a7df2b082804a5c9a7dd2571277ea40da825a71427d3a44aa8e1acbf2638a43ca8ffac402680a32ea860aa74253ea202a8e9aad62463a209a853aa712476a292a75baadb2371a29da753aa722300a397a704aaff22eda252a78ca97922c6a20da786a9122251a2d1a66ea97921cda193a611a9252144a12ea6aea8b820e8a0e9a573a844207aa09ba54ca8e81f3da05ca50da8631fc99f1ba595a7a81e819fe5a412a7501e2d9fb2a497a6c91dda9e68a442a66e1d959e36a41ba6221d809e0fa4e7a5f31c2c9e8aa3f6a5981cad9d08a39ca5551cbc9ed5a2aba4361cd19da3a2b3a4e41bd49d0aa280a4431b469e89a1aba33d1a799d25a1daa2291a159c8aa055a2c7180000008035030080d11cc620db2205250e23aa267a28f92a3123c7257328cd2a5f23dc253e28dd2b0923562548281d2c0a249824e126632c5a267f22bb255d2c6a2d991f3124c42b87324c1ab622b42ba733c90f87210c2c0033329bb81e352ca231db9f6a18392caa2fd3a22f9ee62bee2b63a40aa2b52b0e99a0a58ea36f2b83abd5a543a4d82a45ad88a6d3a4d62a02a8f5a583a5b2293da687a6d7a5a62995a653a65aa55f2965a6cda707a69c2933a66fa722a501290ba867a7319f57282fa56da7b125292897a4ada7d52a1e284aa521a8512b2128f4a44ca81a26d72720a480a7caa58826e2a3c3a61bac822504a556a77fab98253da308a774a9d72409a30aa8eaa9e7240da414a83aaa932499a398a7e2a90124ada26da7dba942237ea235a7bca9d72218a205a77aa96122f3a1c3a61da9fb21aba186a6eca88b216ea15ba6cea8332111a11aa694a8b820bca0efa557a86c2069a0a3a51ba81b202aa060a5cba7be1fe39f27a581a7411fa79ff7a452a79f1e479fb5a42ca7361efd9e88a4e4a6b81d8f9e41a490a65e1d309ed9a327a6f41c9d9d18a370a55f1cc89c34a2b3a4ba1b919ca2a137a4d91a279c40a12da4381a209c42a1f8a3891a499c17a112a3ef196a9b9ba018a2b119319bb49f20a19c180000008036030080ca1db321c5231c256e2391268628102b68237a26c328652bee220e26ad28c02bbb225d252528062caf228f24e9266a2c7d2119226f257c2c1227c31ee022072c062f7118b720b82bf7326d981f1c782b9633099c8b17742b9b3277a07c9a942b8430e7a2ea9f702bb12c94a47ca27d2b639992a501a43d2ba3ac1ca6d5a4c42a84ac93a600a5672a2aa60ea6c9a46929aba565a6bca46e2901a6c2a601a54c297fa511a7c1a5202947a606a8d2a62c293ea73aa81ca785281aa700a81fa4d327d6a4baa7cf25ea27c3a4bfa7602cbf2742a5b1a7502a26272ca48da7279964263ea4bea733abe72510a5e3a760aba2253fa301a776a8862490a3f5a6bea83924e6a24aa756a93a24ffa2b3a785a93224aea290a7c1a9be239aa24ca772a9222306a2c1a615a95122bda1b7a61aa90522aea1b2a624a9c421aba19ba618a978219ba169a6f6a82d2159a119a6c7a8ce2006a1b4a565a8632095a045a511a8ec1f36a0e5a4bba7301f16a0c4a455a7a21ecd9f92a426a74c1e719f5ea4d6a6c21dcf9e2da465a6451d6b9ed5a3f5a5f11cfa9d45a375a5961ca09dd9a2fda42d1c719d52a291a4841b659d13a259a43a1b619df4a13da4e61a559dd3a119a47e1ad19c53a1bea3d5195b9cf4a01da343190000008087000080571cef2000232b248c22f126d428a22ad62222265528202be122a22520285d2b58221e250728c82b942166247b27172c141f7021c4252b2c8620771d8722412c1627c8156e1e112cc52fb3988b90b22b1034e49ed697682be1334aa12b9bdf2b7c319ea27ca06a2b212e36a4b0a10a2b2220c8a479a3492a2bacc6a587a48a2a0aa9c7a5e9a4ba2997a505a656a547298ca57ca6d2a51529b7a4d2a60ba6da285da43fa7b2a6a828c9a452a731a78428e8a54da791a61a2866a3ffa6a8a4b027a3a4f8a6181a502746a45aa775275a2709a5a5a7ee26c42632a412a8d5a59026b5a42da88fac532633a668a732aa262564a2e7a586a8d6238aa178a631a9f423f0a327a7fba82b2400a330a782a9da23eaa257a7a1a9a32329a326a74da9fc22f1a2e2a61fa9ba2298a2d2a617a9182276a2dea640a9e32136a2e8a653a99d2190a1bea653a9472134a168a6f3a80c21b6a0fea57fa86a2042a09aa50da8fa1fd39f2ca59ba7481fb59fe4a416a7bc1e819f9ca4aca6141e869f6da44aa6c71d319f24a4f5a5671ddc9ec0a381a5e41c4a9e22a31fa58c1ca69d9aa2a2a4111c069d24a24aa4621bd29cd7a114a4191bfb9cc5a10ea4031b2b9d81a118a4851aa29c18a107a41a1a9a9c1fa03da22c1900800080960100808c1ce720ea2235244222f0269c28772a51225c268128c62a1c22ec257828612b3b2247250728eb2b6d21e5235726172c2920c8205e24032cd81e5c1eed21302ce11d1990311d422c3d25189fa097822b982fc1a0af9cb12b2d33c3a1829e592ac03205a2aba1692a24303aa485a2d32aef2218a536a4c52a84aa36a601a5e82adaa4caa5f4a4a229e2a308a6e3a54a2930a5a2a6cea63229ffa4f9a60fa7f628dda43ba778a7ce2870a42fa799a7572859a44ba72aa8d2271fa44ba8b9a74b28e6a5baa7c6a5c026a8a52ea6fc9a2e2667a4b9a66127e6262ba48da75b18a42654a349a730aacf250ba433a71fa958256da28aa621a86d242aa3ffa655a96b2445a45ca785a94124bda30ea785a9de230ca3f3a621a93f2316a31ca72ca90d23e3a22fa729a9cc22a7a234a72ea96a2236a201a717a9e521afa1e1a6fea87d2143a1a5a6d0a80921e1a058a683a8a320a8a002a63da8492056a0b3a503a8dc1f2ba053a589a7421f12a00ca529a7ba1e00a0baa4cea63c1ee29f6ba468a6a31d579f27a4f6a53d1dd79ed4a38ca5f01c259e54a334a5771c979de3a2d7a43e1c079da3a29ba4171c849cfca133a4461b5e9c5da183a3e91a7c9c16a1daa2651a559ca1a09ba29719759dd3a075a2f618670a6017db1ad31c9a20d32426260a28c52232279c28882a86226226a428842ac421d1255328f42a50211225bc274b2b8e2000241f26682b6f1e1f213024832b9d1b091c1221742bbb15d698051ceb2b4314bda0ca99cc2b1e20e7a0359c8d2a3f2c8fa21aa0ce2b7d3064a374a1fa2ad72d29a45fa2d62a649de0a440a3682ab7a638a5c7a4772991a12da6eca56b2924a43da674a6f12833a49ea698a6e42855a49da6d5a68d286ca484a62ba74428b7a4c1a6ffa71928a9a4cfa6cca7de2766a431a7fea75d2705a38fa676a68f2697a2bfa5c9a45425fca276a6499d8c25bba4bba611a17e2516a173a7bca8a625c3a37fa643a8952422a345a60ba83324d9a196a68aa83124f7a29aa6bea8f92392a2cfa6e2a8c42370a2bfa6d3a82c233fa296a6c3a8a52219a291a6e0a8332245a2baa605a92b220aa2a5a61fa9c021ffa1b2a611a9692189a185a6eca81b2131a152a6b7a8b620eea0f0a581a85320b3a0a7a51ca8062058a05ca58ba7761f46a005a50ea7e91e3da099a488a6551e2ba046a41ea6a31db79fe4a3a4a5341d239f7ba355a5e21ca49e00a3e5a4771ce29d9fa29da4391c1b9d30a24ca4b51b8f9cb6a1e8a3f11a899c53a168a3611a939c34a1f9a2ff19529cc6a0d9a230195d9b66a080a3be18010025143d17c21b0c206924ad25b327fb222628af29a12a89220d271f29712a4621ea255428c42acf202f255027092be11f30239925062b271da91ebe22b72aa9181c0f821e7f2a8b8af99cca10ba2a6c94bf9fd599c72a199822a10e9da42a4b8b2ba233a0382a5c1ed4a250a29c294d1e32a41da3132a6aa1f0a349a39a289ba395a57ba48829ada267a56ba5792862a40ea6f5a5c2288da444a650a6942899a44ca67fa6772873a432a6c6a62d2867a471a61fa7da2734a4bea601a89e27d6a360a6c7a7092763a436a68ca75f269ba41ba73ca79b269ca58ba752a9ec2571a085a469a62b238b9e5ca35aa79322c4a0f3a423a7b32325a145a5e0a7632305a2fea51aa882230ba20da63ba84323efa1f7a568a8c422e3a127a686a89222dea137a69fa86322d5a16ba6b7a85d22f8a1b3a6e4a8392206a2e3a60ca90c2205a215a72ca9a621aca1e2a61da9632119a19aa6dba81421bfa037a6afa8ac2077a0eda571a84e203da076a512a8d81f1aa0fda485a7161ff09fa9a4fea6591e10a05ba488a6be1dc49f17a4f8a5571d779f89a37aa5c11c279f18a306a57a1c6c9e84a28ea4041cb29d15a23fa4931bdd9c98a1efa3cd1a689c4ba191a3441a6b9c22a168a3eb19fe9beaa048a3a9197d9b8ea075a2f318b30f9417101aea1d2d230e286e29a5295b22ac271129fe298e2195268528af29832158266628332af920ad2510287b2afa1ef7226425922a321be11c8c21282a66154f98f91bdf29a590ac9c7190af29669819a0bd9be0299c9bbfa119a0032abd9c06a33fa11f2a8a9e2ea4c6a1292aeb9f42a49ba371298b9f14a4e9a2072924a04da4b9a3e62831a2e4a471a4c02805a24ca521a59a2855a2b4a58da54d28b9a2cca541a60f283ca311a6c6a6a62782a3e6a5d1a618275ba3fda509a77e260ea3c8a544a71c26d6a3eda5ffa6c52576a29aa5c0a69a254ca110a6a7a65025049d13a473a89e2263a0f2a3e9a8d921fd9f8ba574a8c02332a156a563a8eb2226a248a526a8ae227ca265a51ba8382219a278a537a8a82107a27ba541a8ab2112a2a4a550a8132226a231a68ca85f22a3a2eaa6d7a8492267a22ca710a96322d0a119a717a901225ca1b5a6e8a8b921dfa056a69ca8162195a0fda568a8c72073a0a5a512a83a204da052a594a7ca1f32a0f1a4f7a6f21e06a07fa469a6201ead9f28a4e1a59a1d6d9fc7a37da5131d1c9f44a318a5bd1ca39ec0a2afa44e1c109e4aa248a40e1cb39df0a104a47b1b8a9daea19fa3e71a529d62a146a3b11a4f9d37a1f7a2151abd9ccea0dda2aa19ef9b55a027a241180080a3946696fb0e472130261d28dd28c8215c27c1286c29f221c626cf287a2962211c27ac29292a57212f2635297a2abf1e0d225725fd29331a970f5f1c6529850aed9d029a2f29479884a07b9f1c29bf9937a132a04429819b8ba19ba07e295f9c0ea2f3a053293c9d48a201a26129f69df9a2dca153292b9f26a4f0a2422983a0bda46ea465293ba206a5fda4b428dca262a59fa56d281fa3b2a5caa5342871a301a63aa6fa2718a448a6b3a6df2731a44ea61ca7572736a447a69da7232713a44da6e6a7fe26f0a366a682a7922613a300a674a7002670a02da55ca7c824f89b1ba40fa8ff22719f45a459a86d220ca0c8a5bba87123b3a094a563a8d72290a1f1a464a761224fa16ba4c3a6c32126a170a4b4a6802007a193a4dca6402012a128a5a3a73821cba14ba68ea8fa212da21ea72ca95022a6a2c8a7b0a9572231a278a787a9092259a1bea6e6a8362106a13da669a8be2098a0d5a518a855206aa06fa5eda7a61f07a007a545a7ed1e659f82a4b0a6341ef59e36a43ca68e1db99e02a4eea5491da19eafa39ba5111d539e51a355a5aa1ccb9ddaa2d2a46b1c499d5ca256a41a1cf09c01a211a4d41bca9cb6a1caa3461b969c6fa153a3ff1a6a9c34a1eca23b1a109ce6a0b8a2291aba9b8ea0fea15f190080fa8c0095eb0483218224e327c4277821fc26a428d1288421d1268328dd28a721d0278729fb29f4210d275a299a2a781e482115255a29150bf39e469e9d28229815a20da23a283a99c0a103a16a2819990da143a0d128659afea0839f3929f89bf1a0749f4329bf9c8aa19da03a29af9dc7a10ea10829949eaca21ba21829ed9faea394a3de2871a08ba46ba4c62807a126a544a57228c2a17aa5cda5fe2731a26fa5fea51b272ca262a517a68226f9a162a557a6302605a25ba558a6d52528a255a597a67e251ba235a585a65d25eda2b2a504a7b225a3a2e6a527a87b25e49e66a554a86b241a9f7ba569a8492405a012a56fa8ca23ca9f5ba436a73122b8a043a49fa6ca20eea09aa35ea5bb1e86a0a2a2e9a4f11c71a0cfa2efa4651eaaa0e1a3e1a5282070a1bba538a8cd21d7a179a768a9bf22eaa10ca8c4a9a42205a2daa79aa9d421a5a13da722a9a32139a120a662a8bf20c5a03aa587a71f2034a0e4a4b7a68b1fa69f85a440a6b11e369f31a4e7a5051eb09effa393a5821d939e90a341a5351d179e18a3fba4bb1ccb9da1a2bba4521c9a9d54a28da4201c649df5a148a4db1bf69cada128a43b1b969c5da1c2a3ab1a4f9c0aa147a3551a449ccda0d9a2e119c89b73a0dda229191a9b55a04ea2c3180080c38d7e8ec30d2f202e24c62529278d20c3245b2646282a202b25fd26a0283f217f2671280c297123b529512b0b2b9b1aaa123914e528609e8ea7fea7c725979710a252a28d2647960c9fe19d1128d996229ebe9c8f2834980c9ea69bd0281a99079e899bf528bb9a9b9ea79cea28b99c799fb49d1429489edea018a0a22941a09da2d3a16f2986a146a47ea4b32835a2e8a44da507281fa24ea581a59026c8a113a59ca56b25dea127a59ea5a02463a21da5afa5132421a308a505a6262465a304a54ca604259da38ba5bfa64c262fa35aa6e0a7a427aca2fea6aba87d2788a21ba709a90626b2a2eaa520a8ad2499a388a54aa75723aea2c1a459a6922128a259a351a5ae1f1aa14ca192a3a21d899fd19f37a2491c199f079f2fa2951c0da0e8a017a4131deea1bea506a8f8202ca365a8d6a9c3235ca3cca860aa302496a2d0a75da9e422c7a17ea670a87421bca093a5b5a7862067a022a55ba71e201fa0daa438a77b1fdc9f8ea4fba6be1e6f9f2ca449a6fe1d489fdaa371a5681d019f4ca3f9a4dd1ca29ed6a2a9a48f1c339e7aa25ca4391ca29dffa120a4a31b0a9d90a1c1a32b1b749c2aa155a3ba1a159cd9a0e8a22b1ae79ba5a0b6a2fa19c69b78a051a26519129b38a05fa25b19849a2ea0cea13e19b78b57949c93a816611c02211c230c25661e7922722445276e1d8d2108234127821c2c2062225826631d20224e24532a42209024e4281729dd18491fe522dc2aad16eb175d1d88277f112e12871b6928a387c5917f182d2862938f981e1456282e97b999a70d74283d99149bd20d8728b69a249c9a948528059c839cf197ed28349e999e0f9bde291b9f63a12aa11829d6a0fca3b7a3e626cfa0b6a40da5452434a195a436a54421ada1b5a474a59e2019a1eea455a5cd1d01a1cea487a5221e13a1d0a413a5ad2143a149a56aa693262ba456a857a9aa2858a2f9a6cba84f26c89fc2a424a64923409f47a4f9a53e221ea19aa421a64722bda2dba475a6202230a15ea4f0a56d21d19ffba2d5a40d20f79dbc9ed2a0c619089e47989c9cb99ad89b69155e9c0f9ce7a054a667a8b3227fa428aa08ac9025f7a319a9b5aa36246da1a5a6c8a8952104a1eba52aa8b9209da03da569a72e201da0bca492a6401f0da032a4b7a56d1eac9fa0a333a5aa1d6a9f4ba324a5401d5e9f1ea307a5111deb9ee0a203a5bd1c729e67a2c3a46a1ce79de3a153a4f01bb09d71a1e7a3571b799d22a199a3001b429dfda06aa3931ae99cc1a042a3e4198c9c99a0d6a2b319249c5aa064a24019bc9aac9f9ea1ab181c9a1d9fdba086170080d58a478cd58a891b222086212f23cb1da921b9238a25f61cb72081229d25001cf41ef72054246e14bd18071cff1ea2161d1aa21d752290192d1bba1f20270b183e18201ef327b113aa0b161b1a288e8eb596b5130b280d96009b5196e0273899dd9d159cea27d39bec9fa19edc27049dd9a072a0e5277d9dd1a16ea16f27c89d57a252a22526ee9dd8a2b3a2f924aa9ee2a21ca30c24bc9ff1a273a3db233ca017a358a3bf23f79f88a21fa32223d39f29a28fa24d23ff9e7ea1f0a109225c9dce9f77a0091ec39cd39d719f5f1b729d6e9dc39e731be39d019fcda03a1d109fe2a0d7a2981f1aa00ea241a47720ada0afa2b3a4c620d0a0d3a2e6a49d2091a012a33ba5bc201da1aca3a7a5a12086a1fba238a5c21f259abe9f2ca3df1be61a0828902805a5cda5e1aa9aac412708a438aa0bac92254c9c60a3f7a69b1eed9f0ba420a6561f1fa015a4dba5d51eea9fbfa388a54b1e5b9f42a338a5b81d699f08a30aa5791df09ed5a2dea4181db19e8aa2aea4b81c539e34a285a4551ccb9de3a129a41c1c329d50a1c8a32b1bde9cfaa097a3b71a699cd0a03fa37f1a2a9cb7a0f9a25d1af39ba6a0b2a2451ad59b95a056a2f719aa9b71a016a2c819c69b40a0c9a19919009b1aa09fa10219f59ace9f2ca1f4180000c9004f06e609841db92121240f252a1df920ff236c25031cc51e7521b824b519a11c191f1f22a1174b1bb01dc6206819781de520d72441195f1c662006277818dc18b61d582771157811021c7627110879967f1375279e94d49b56986d27c4981c9e9b9c3027a79a5b9f039fdb26819c62a068a09226ef9c9aa059a08225959b659e5d9e77226598279c349d341f529a7f9ebe9e42214d9dcda022a1bc238e9e25a26ca2bb24539fd4a26aa3b3240fa074a326a4b8244da0e6a36ea4852433a09da359a4f323279f36a322a4c6223c9e80a200a4be212e9e0aa2d5a31a21c89eb3a1a2a39d20799fb6a1e5a383200aa009a244a4912006a071a2a8a478209e9f71a2daa43c20c99fafa216a52020ce9fb2a2c5a4ce1fb5a034a3c0a43320119c41a002a2771ce884bf8f9293800852937697e09b66121b9fe7a04ca3241c089f9ea261a4371e759f64a28da4ac1d629f14a263a43c1dbd9edba12ba4c21c679eb0a122a46c1cfa9db8a112a4551c9c9daaa115a41a1c469d90a107a4f51b0d9d62a1bca3701bb79c38a151a31f1b8f9cfda005a3921a609cb7a0a7a2351a4d9c77a04fa2e2192c9c32a0f8a18819259c06a0b2a12c19219cd19f7aa105193e9cc99f41a1c2189a9b819f38a168189d9a0d9fa8a05a170000b114c316c084a71dda213623e724041d2721ae227625121bfc1d1b20c12349196d1c801efa212618641ca51fca22f819331d12203d253f199b1b0c1fa826c5169318ec1db426da130c117c1b9326060725912a18b3268992d898ea0cc5267f97a49c6398af26839a5c9eaf9c6a26b19bc29fbf9eec25439bc09f5d9fd224db9ae59ee29e8e23bf9b429fae9f5423179d58a08ea01124399ef0a051a13a24ae9e78a1e1a12a24d59edaa1aea23324039f36a257a30424339f78a2d0a36d23389fb8a21da407233d9fc2a255a49c22349fb6a250a425223e9fbea282a4ca215a9fe1a2a5a470213c9fd3a29ca41221169fa3a27ca4b920db9e91a286a47a20a29e7ca29ca458208c9e98a29fa428206a9e92a2c9a41220449e95a2c3a4d01f469e8ba29aa4171f089d74a17ea3351dbd99509f74a18e1a65992c9ef8a04a19029b979fb6a2b519779c51a085a3e11a039dc3a07da3b41b419dfda0b8a3241ca39d15a1c7a33e1cb79d0ba1aaa3051ca99ddca067a3a61b769dd8a056a3481b579dbba023a3c91af89ca5a005a3931ab19c8da0f7a2381a679c80a0d1a2121a229c67a0a4a2df19979b2ea054a25f19459b0da004a20219fc9ac59fada1fe181c9b999f56a18318ad9a659f49a12a18a39a3c9ff9a03f18661fef166c18131c342b3c2498252c29742df52507278d2af62d44217e22fd28912ea01e1c20ca28612ec11c1d1d95289f2fdd1bc01ef12909309a14861b612a922d8b8ebe187e2a0c2b109ab20f1829862a799d0697282a9328269e149bca29d9276e9cf5964929151f549cc418552937a6aea470a3ed2528abf2a8c0a6bd234aac2cac24a6a32b16adb0aaba94012c3aacb7a614241f28abac60a4d4288b25a8a97ca445292f2543a631a55628da2568a499a5e027bd2585a2a9a45f27e624dea26fa4e226aa24a6a3f0a4292530252ca2a6a4941da62410a16ca467a0eb24b0a003a49fa41025e7a0b2a41ea847272ea245a6b5a96a28a2a123a906add922729d91a558a96720719cafa307a7bf1ecb9f32a4ada62b2004a031a474a6492037a028a448a63020b89ffba31ca6ed1fde9fd4a300a68e1ff89e68a3c1a5c01e709e3aa36fa54e1eb49d0fa320a5ff1d3b9dcea2cca4881d4a9db1a2aca4331d4a9d8ca275a4dc1c4c9d57a275a4a51c0a9d18a268a4691caf9cb9a153a4001c969c9da130a47c1b669c7aa135a4361b4f9c64a1b9a3c31a139c12a1aca25c1a449b99a0f8a1c5191f9b82a0e0a1a8192e9b8ca0f4a1a319569b90a0fda1a9197d9b83a0d4a16219a59a52a0b7a1e518d39a24a036a15c1846196e17411b4e1d632a0427ab28402a702d4b26f0271f2b412f1f24f524a12b19303822b3231e2c24311c201920322b6431e5193e1c072c5b30760e6916d12ad22a46980b1fad2a4223d994ec18e9294728b8186a206f2a5125111dc923b329fe183723e326fb2afe18b426b329d02a61a95e1fdf251b27c0a8eaa456a1a52662ad53ab67aa4529a8ae43acf8a8fd2a9eadfeaa28a14a2a71ad33a96225f72824ac7fa865282129f1a96fa73b29012905a7a3a6322a1828c7a710a6102a502845a528a52b29c4283da33ca4e428392959a3f1a3b725722962a12aa2201e942900a11ea247a42d2abca19ca4eea9632aeca2dfa7aeadb02838a4f2a95eae1125dfa330a958ad05215ea19aa7d0aaf11f3ea1aba69ea9292001a1f9a51aa9732050a1c4a5aaa873207ba055a507a8412012a0e8a43aa70a20fe9e72a499a63a1fa39e24a40ca66f1e729eb8a370a5ff1d4a9e68a31ba5af1d799e4aa305a5581d4e9efda2b4a40f1db99d89a27ca4bb1c819d45a249a47c1c3b9d0fa229a4231c039defa108a4001ceb9ceda1cba3a01bc89cc3a1aaa36a1b6b9c95a154a3191b0d9c4fa1e8a2c01a3a9be4a04aa2101acf9aa4a001a28a199b9a6da0c7a18d19b69a3aa087a12a19dd99cf9f83a1a318e499f59ea8a04a18d6150d1a6c1c3220dc286f272a297b2b362cee26c028d62bbd2e8525ca26082c753059247b25602cf83005222c24bb2b0c315e1f8421392b0530ac1c201c462bfe2c5e1a5d1f1b2bd825fc18a8208a2b7f2bac1d1b23ac2ba22a3e209224d92b67281321dc25042cc023122066261f2b0da4c898d9227a2930aab9a4eaa0d328b7aca3a87ba6e029d5aebeaa38a8302a90ae33aa41a4ac2a05ad05a9a7148429daab00a81325a5293ca8c2a7a927642904a6d6a6352abb2804a60ca6e52a122989a54da6d8273729c7a4bba528275a29c0a3c0a447213f2969a382a4379e602966a3b7a415a86e2870a2f7a53cabfe27aaa243a835ad81255ca35aa9a3ad1224d6a37ca9bbac1021f3a2b0a8a3abc72078a2f3a77aaad22014a268a797a94221f5a1bba619a9c7203ca121a6dca87320c6a088a562a8282004a002a577a7af1f9d9faca4a2a6141f2a9f61a458a6a21e179f3ca414a6561e009f16a4dda5ea1dc69ed1a384a5971d7d9e5ca33ca5331d459e18a3f8a4c91cc59db7a2b1a47a1c8e9d67a261a4121c3a9d16a229a4be1bf49ce8a1d9a3281b9a9cbaa16ea3f01a4b9c7aa10aa3a21a209c47a1b5a2271a019cf5a07aa2d819899bada06aa294199b9b9ba029a247195d9a33a048a2df183e9b3ea0eda184180000bc176019be1def266927ef28eb2a0a2ac4269f28052b042e32262d28e12b30300c257126502cde309023dc248b2cf9302f212223992ce730971f0222b62c3f30341f6b22172ddd2edb1b3521e02c9d2de31b7a218b2c472cb51966212d2cfe2867171822f12b04257491cb20ec2b38a1ada0f919492b5ca95ba549148e2a08acfaa774a3a62a5caddba8bea3902ab4ad3ca99d9a2c2a34ac86a8721d8429c0a9aca88f219e29a5a89ca82724e529dea67da752284829eea550a7782a3f2939a522a7c2292a290ba5cda6a3277a299ba4dfa51f230a2972a4cfa5d8a08c2826a4afa6c2a8162809a4a3a724aca526eaa3b5a807add925fda347a979adf42450a4aba924ad74244aa3cba83facd22255a327a8f4aac12167a273a7e6a97b2117a2e3a636a900216aa180a602a9a9204aa137a6bca87520dfa0d8a545a8232086a061a5aea7861f1ea0e7a42ba7dc1ea39fb1a4e0a67b1e1c9f66a458a6021e5c9e20a4c7a5911dc79dc5a386a52e1d999d6fa357a5e61c7d9d32a32aa5861c579df6a2dda4531c139d95a29ba4171cf79c69a25ea4981bdd9c36a226a45b1b989c0ca2d3a3291b5a9ce5a196a3b71a549ccaa170a3991a4a9c8aa119a3221a4d9c67a19ea2bd19b49bfda072a29719439bb5a05ba27618161c6b1c681e1e21b71d1c1e821f871f1a27422624289b2a182c3e26a727c62bf32ea2252927392cac3067241527342c4331e22287257b2c3a311a219524762cee307e20ba23ca2c8930f71d4623b62c3e2fe01b3b22ad2c3b2d061ace22b42c9e2bd89049216d2c9228809d481f162c2d980ea26819bb2beaa70ca5749e682b49ac3ea7d6a3292b8dad47a84da3052b81ae07a917a4092b66ac61a8b79edb2946aa22a85d141c2acea881a7d2217e29f6a7f8a7b426672960a6b3a742285e296aa68ba746281529b2a5b7a7e42520297da522a71f23c62805a52fa7ef9d522882a45ba79fa85b27d3a325a8dbab922666a4a2a8afacf62516a4dea881ace9243da48ea88fac2a242ea3c6a857ac9d232fa38ba8ababf422b3a21aa845ab3f22f3a177a75faacd21b2a101a7aca9222144a172a6efa8aa20e9a0eca56ea83c2093a080a521a8821f4da02da5ada7fc1e15a0f8a447a7a01e00a0aea4e0a63d1ed69f7aa44ea6e61d4b9f3da4f9a5851d0e9f0fa490a50b1dbe9eb4a343a59d1c2a9e39a3eda4531c779dd3a2b8a4161cf99c80a280a47e1bd69c2ea24fa41f1b7f9cc5a117a4fe1a5c9caea1c0a38c1a369c5fa122a3041ae09b21a1bba2fb19039cf4a07aa26119fc9a93a056a2df184d9b93a00ba23f19311d7d1d691f1d22491c611df51d1f1fe025f426be28b52a7e292727b428512c212df825e927402c0830fb246d273c2c27314024bd26642c9f318c226a25742c573173202624be2c1531ec1d1e23be2c833086190422a92ce32e2b973920d12ccd2c789df81b982c152995a073923d2c652114a31a990a2cd0a5f6a4689cbe2bfdab66a6c5a0842bc4ad35a8ffa2022ccead4ca8eea15c2b33abb7a7aa9fe02906a928a8bc99f62926a9cba77b142e29efa773a74d23d9282ba708a8e5252229f3a72ea8c925f62816a75aa8f922eb2860a649a80e9e6528eca4c3a72ca59227c3a4d6a749a9ea26ffa434a802ac752607a5b3a87cac4b2699a4cea828ac8025d4a385a83baba12477a269a890aa0e2408a368a80aaba8239ca220a8d2aae22292a266a735aa182287a1cfa6fca9772130a190a688a92321f0a029a6daa89d20a5a0d3a560a84e209aa096a53fa8152066a067a51ba8b61f3ba013a59aa7ec1efe9fcfa4c8a67c1e799f93a471a61a1e7c9f6aa41fa6a01d739f58a4e2a5791d0b9f1fa48ca5031d779ed3a34aa5c21c1e9e56a3e6a44c1c749dbea275a4e61bbf9c20a216a4411b409cada1c8a3781ae59b50a160a30d1ace9b1da12ca3e519069cf8a0f2a25719ab9bd7a01aa36c19c19ba7a075a2ae18851a0d1b751df220d41ce21dc11e2c20f0244b27ac28722b06270b277928332cbd29f825b027322cd22d26251e27432c8530462452264d2c9231a1225025732cc831d42016247b2c4e31e51efb228a2cc330ba196c21c32cc22f0497d41ea42c002e789ea918732c3d2b9da1c098522ce32450a4aa9d332c03a69ea5909fda2b20ab6ca670a1a32b0cad05a77ba2612bc7ad2ba8c5a0e72a82ab9fa704a0ec2971aaeaa78c9cf72928aadfa72c9c5629c1a89ba7cd1fca282fa721a883241e29cea829a86b25cf28f3a656a84524aa280aa606a8d917da27dca460a711a4ae260aa49fa7c3a94826bea44ba81bac3426aaa4bda883ac102645a421a97babd9253aa48ea8a0aacf240aa371a85dab37243aa38fa868abec2339a35ea8deaa632353a2eaa713aa502283a1eba647a972214ba17ba6dca8f92007a12fa6b9a88820d3a0ffa5a5a84a209fa0b5a562a8082057a079a5f9a78e1fd39f1ca570a7bc1e659fe2a4dba64a1efb9e98a479a6da1dc49e50a425a64c1dc19e2aa4f0a5101dab9e02a49ca5d21c429eaaa350a5711c129e54a30ca53e1cb99d02a3d0a4bb1b849da1a273a4641b2a9d57a23ca4fe1aaa9cd8a107a4421a6a9c96a1c9a30c1a539c68a17ca39d190c9c19a109a39519c29b81a0e8a11c184a1b6f1bfc1ce220e91b461db01c3c1fdf248d27ea28352b06267127fd28122c62267b268e281f2c2f2b4a259327142cfc2e6f24b826582c943129234f256a2c51326d203424962c2732ca1ced21b02c7b315510da1fa32c7530109d7b1bad2c952ef7a03a92a32c102c3ca37b9d612c2526b8a41aa11c2cd0a3d3a58ea2622bcdaa88a631a46f2b6dad06a862a5ae2ba0ad1ba80ca6ee2a13abfea74aa6f729efa933a85ca6452a36a926a83ba4a02973a70aa858a05e2970a62da8191bf028aaa61fa8cc208828eea504a80420362827a73ca85f170a28b9a675a8d3a6c32766a75da866aaf72627a5a6a8b9abd22664a4a7a821ab1e2632a371a852aa4c25e0a280a8b4aae42487a3a8a8a6abb124dca3ada8d3ab602403a41ba8f3aa3c2346a3a0a72aaa3e222ca24fa7e3a9d421bea102a7aaa984213ba183a617a9d520fda010a6ada86420bda0f1a57fa83220aaa0bda54fa8012085a081a508a8411f3ba02ca59ca7bd1ee79fe2a45aa7391ea09f99a4e2a6cb1d629f5fa489a6421d179f18a414a6eb1ca39ee2a39ea5841c6b9e95a33fa5581cfd9d17a3dfa4d21b649d7fa28fa4861b2d9d2ca250a4261bfd9cf0a11fa49f1ae09cc2a1cba36b1abe9c9ea14ba3041afb9b36a106a32e19d99bf0a09ea2be18e0079e84c38128880e1ab41b511cef1d282412275c28912a792414280029572c9f2485267228102cff2520265f28792cd62a572484264f2c6e3059220d25252c3d3240201224582cb532ca1cbe217d2c6e326410b91fa12c3531f79d4c18822c1d3053a17698842c5a2dfea2bc9e5f2c6028e8a4efa02c2c18a4bba5ada3872bbaabb4a61fa54c2be7ad56a7c5a6e32a36ac6ca766a6442a63a9bba775a6f1294ea717a831a6fd2956a651a81ea5da29dfa664a8f0a3262978a5d9a79c9e8528f0a56aa7661d2d28c1a6e1a7011c222875a63fa8f69c0c28fda684a83fa7d82731a7a2a88caa832726a7aaa869abcb260ba563a82baab72510a36da7efaa6124e7a316a85eaa8224b5a319a882aa21248ba312a851aab92313a3d4a749aafe22c1a28da75baa902218a22ca708aa11222fa2faa69da99021efa1dba650a954219ba1a0a6faa805213ea167a6b5a8862025a127a689a86420dfa0b7a54ba80820aaa058a5ffa75e1f56a0f9a473a78e1e0ea0b5a401a7241e5f9f7da497a6981dfc9e4fa439a61f1d9b9e0da4d0a5d11c519e86a357a5501cda9ddaa2dca48e1b839d60a273a4081b169d17a243a4741af09ce5a1f6a3501aae9cb4a15ea32d1aa19ca1a10ea3d919359c3fa1f2a2cf19399c3da14ba34419b3045d88b5915d88e819f41af21a421d76240727db28132b2624f2268628122cb2237d267728272c7524db253028472cff264a248d26432c942ce8212525392c7631271f1b24342c3c33531bd4227b2cd5324c10c320772ce7310a9d531ba72cb330bea0fe91802c1e2e00a4bb9e502c672a22a5a3a1322cde98f6a503a4c02b27aca0a61ea5572b85ae98a7e9a5432bccaa14a7b6a5352aefa645a75fa6df2903a8a8a79ba6e229ada609a808a67029b5a7c7a790a50729cfa6d8a7eca5812866a517a85ba31728b3a438a828a11f2897a593a85ea34428afa57ba821a8a32756a503a9efaa00288ca632a9f3ab6d2746a664a810aac725f5a3c3a7f0a9942409a42da8a5aa8c2412a328a862aa3024bca2afa76aaa2c23d3a2cda753aad82220a3baa7e9a99822cba27da7a3a93722ada251a7bba9b7213ba213a7a9a95121c6a1b7a654a9c22036a145a6c6a85520f7a0f9a582a80820a0a0baa54da8331f5ea081a512a8c41e12a033a5b8a7521eba9ffaa43fa7fc1d3e9fc4a4d1a6761d0a9f84a475a61e1db89e49a43aa6dc1ca09e12a418a69d1c4d9e66a3eaa5321c1c9ee7a282a5d41b669eb3a2c8a44f1bd69d6da2afa4bc1a469e2ba26ea4771a7e9ebca183a3d4193b9d03a1c6a28d19169c81a04da2af1802086183fa01e387c81a891c0b1d4d1e6f233127b728f42a4824ca26ba28872b192424267328032cbb23b8256e28682c7024b2241927bb2c6b27ef229825a72c7a2de51ea4230d2c9b32cb18d3210b2ce2332190ca1f292c5133fe9d3b1b532cbf3129a162983e2cc72fa3a345a10d2c0b2c55a523a4bd2b1a9932a6e0a4652bafab23a6c1a5cc2a40ae4ba734a61a2b05a9baa699a6b629e0a689a710a7bc29c9a6caa7f2a6a6290ca630a849a87e29a2a633a81aa807295ba62ea8a7a7952819a513a8faa52c286ea540a80ca50e2862a55ba809a6bc2746a450a8eaa74d2704a340a8dfa8b626bda324a80ba90826aea409a854a94225efa49ba75fa990249fa31ea84caaa324f9a314a843aa4f24a4a3d5a7f8a96823d7a27da7caa9a522ada24ca79aa9492255a219a765a9db213ca2f7a62ea98421f3a1bea60da93321b7a190a6e5a8df2039a155a6aaa88720d8a010a66da83c2080a0c0a536a8d71f4da08aa5e3a7631f21a051a594a7b21e14a022a55aa7531eb79fdba430a7b71d6e9f99a4eba6691deb9e5ba4a9a6121d519efba337a67a1c999d2ba36ca5101cec9c3ea2a6a4e31a849ca3a14ca4091a349c5ca145a49119349c6aa12ca4a019399c35a186a34c19d09bd4a07da25f19ab9b69a0f3a1061951082683c201ba88451aa11cc11c911e1f24f626b0284b2b2124822732291b2cc4237f26af280c2c4b236e253f282f2c30233b240327902c1922f6213125c32cdc27f31e8122242cb82f0a15b21f4c2b6333a49aac17002c01343b9ec897d82be1322da1fa9dd32bba3015a431a29c2bf82c33a58fa48c2b6f1942a6f3a4582be7acf5a645a6052bdaad9aa718a6cb2a01a70ca6cca50a295aa528a748a65829c8a502a831a78c2968a5e3a7d9a7f7288da5bfa703a8a828a2a6f1a732a84228cda6d6a79ea7d627afa532a7aaa68c26dea341a7f3a547260ca35ea7d2a612267ba44fa717a8bd2595a4b0a774a9ab2551a4a6a774a92c25dba2b4a6dda82b24fca267a764a91d2469a3e2a7d4a92c2429a3fca7d2a9eb2307a3c1a7b5a95523a4a25ca774a9a7223fa2e0a632a909220ea2cfa627a98a21f6a1d0a625a95321f8a1b8a615a90d21cba18fa6f4a8ce2081a161a6cfa8822030a1f2a57fa83e20cba080a52fa86b1f90a023a5e9a7c61e53a0f3a483a7611e35a0c5a436a7e11d01a08da4e1a68c1d5a9f4ca46da60e1dee9e13a409a6be1c939e8da37ca53c1c4a9e14a30ca5f01bef9d8ba2aca4231bd79d49a282a4db1a7f9d37a271a4c71a729df0a13ba44a1a569c6ba10da49119969c12a120a3981803032f82a8018d86c119231dd01d471e852387275829e92a8d230627b028cf2b0523b5251c28852bd72273251928082cfd21632450274c2cf91ec220ab246a2cd820431b0721712cfa276f8f8f17d72bdf30ed9bdf966e2b65344ca0149b4b2b233466a2339eff2ba4314da4bea1e32b622e10a5b2a3982b3123e5a5d0a4162bbeac98a61ca6c82a0eacb4a635a6142ac9a6e3a681a69029f6a53ea7b7a64d2911a58da7e5a61f2907a5fda7c3a7ce28bea502a848a8652812a6d3a712a8012823a439a733a867270ca366a713a83827f0a4a7a692a6e725eaa2ffa6b9a7cb2554a24da753a87f253ba6f1a74ea99525cda6e3a7a9a92f2550a46ca7c1a9822482a4cea7e6a96e2432a4aba73ba9332480a38aa790a99a233fa37ca7ada9112320a33ea76da9a022d3a210a73ba92c2275a2e7a636a9c6215fa2fca65da9882143a2fea654a95321bfa1eca65ca913215ea1a3a61ba9b020dda045a6b0a8462066a0c5a528a8b11f0ba05aa5c1a7fa1ef69ffda44da7371ec19faba4d9a6c11de89f78a474a6731d8b9f2ba40aa6e71c429fe9a3a3a59b1c799e4da340a5181ca89daca2caa4901bde9c30a279a4d31afb9c08a23da4a61a209df2a140a4a01a4e9db4a148a42d1ac79b13a17da4da19d29c75a05da2a3181404ba8394013885ed18d31b081c301d6c221027bd287b2a27234727ee28892b8b22fd255228832bf8225225c9271a2c3422cc23a325392c5e2010202723272ce81dbc1cd021812c0a1d919636208c2c90273b9e9b9ab32a38320aa1129ed82a9a34f7a2ffa1262b683348a3a7a3382b5430a5a4f8a39c2a9523c1a590a5ac2aafad16a762a6e42af5a839a699a6752957a486a6d9a61d294ba5a9a7d2a76829a1a5d6a710a8092981a5ada73ea8a328d4a4aaa730a8362861a48ba76aa8ba279da405a865a8ac2730a5b0a70aa8d326a8a51aa7a6a725263da519a708a843269da3c4a77da87d264fa49ca707a9a62584a31fa7dfa9eb24b4a207a630a95f232fa325a735a91324d7a32ca73da9c323bfa321a73da931232aa324a72ea9d72209a331a729a9aa22eaa23fa731a96722d9a252a740a9182261a220a73ca99a21f2a103a723a90a218da1d6a6f5a8ac2026a186a6a8a84c20efa041a66da8f41f98a0e4a520a8521f5aa086a5cda7b71e2ca02ba555a7361e08a0d4a408a7be1dde9f8ea488a65c1d559f3aa42ca6f91ceb9e09a4baa5871c4a9e90a34ea53e1cb49d1ea3dfa4fc1b369dbba29da4a11bad9c13a23aa4c61a999c93a1ada3481aff9c3aa118a3ca19959cc7a0cda2f818d99ddea0bda2ba180a06f208340dd4117c1cc21f392092211d22eb2692283e2ad722ac26d528b82ad921f12553283e2bc9212625d3279d2bec2089232226d22b811eed1f9523df2b5e1ab115091fe22bf015aa9cd1902e2c5718d89f2491162c452806a09b9c832abc3249a218a07b2b4d347ca30ba2852ac631dfa490a40e2b3a28e8a569a5d92a73ac9ba79ea6e62af7a455a651a61e29f8a30ca7f2a6352999a42ea73ba70c29d8a400a7c4a79628e6a44aa712a86c28dba481a750a83a28f1a480a76aa8df2737a47ea7b0a8232797a4d7a60ba8322689a3a9a60ea7e12502a5ada651a75325a4a4f8a6f2a7672542a394a66aa8d8242da490a691a8432464a431a6aca8a123eba3d0a6b0a81024efa3c0a6bfa89f23eda2bfa6f3a811238ba2c4a6c7a8b4223ba296a6bca8322242a2a6a6eda8f22153a2cca623a9b52121a2bca623a9862134a2e5a629a93521d0a1c7a600a9cd2088a19ca6cda8752039a142a68ca83820dba0e1a535a87d1f94a083a5dba7f11e77a02ba54ea7701e72a0cca4c5a6ea1d6ea076a438a6701d1da01ca4d0a5031d8e9fc3a366a5841c0f9f40a307a5441c359ed1a2ada4ba1b819d67a263a40f1b039df4a110a44f1aff9c8ba1a6a3011a259d76a14da3ac19949cffa007a3db187e9cd9a0f4a2c418e8002904220bae103b1ce41edc1f6a203b236227de28f929c5225d2747299b2a8a211e266128232b1021c1240727212b04202722e8241f2ba41c171d2121e22a39189e95491cd92a958a2a9d0a11fc2aae9196a0ff992e2be41110a23f9d362b7a25a1a255a2af2a5b302fa44ca3e02a2e31cea440a4342b4e2784a5caa4ae2a18a896a56ba52529cca15ca612a6ff283ea4b4a614a7da28bfa4dda639a7a028cca4c4a678a77628cba400a792a7452895a41ca703a8042832a425a72ba85227b8a3aea610a8ae266da462a609a81126f8a403a777a75626f7a442a76ca81026c6a334a7f4a88c25d9a404a7e4a87f255fa368a652a87e24d9a18aa5c0a7f122d0a255a630a87e232aa22ea652a8c02222a235a66fa865220ba247a685a83722f4a158a690a80c22bea163a6aea8fe21e7a1aba6dba8a82119a2eaa6f4a88d2158a223a726a9332108a21ea72ba90a2176a1dea607a9cc2007a18ba6dba86920ada021a695a80b2064a0bda52fa8661f34a031a5a6a79f1e14a0d6a41ea7e61d19a088a4a8a6861dfb9f47a442a6fb1c929feba3c2a59b1cf39e5ea32fa5221c069ebda2b6a4a41b689d39a24ea4221bb69c9da1e7a3541a619c6ca17aa3df19709c42a146a38519ed9b07a11ea34819829b8aa041a2fe180080a194c595520f1d22442714290a29c72232287429762a07222627ce28252aca21b52684288d2a3a2163258427d22a1c1ff6217724db2afa1ab318f71fa32a3314709a5d17612aca8afa9d55979c2a8099cfa0699db32aeb9bada1eca0c12ab29cdca3c0a1522afd987da494a3bc29021dd0a439a47329fa9deea4f6a39529b2a043a5b2a4852904a220a520a58b282ba2d1a56da57a287ca22ea662a64a2804a386a61ca7172887a394a68ea77b27cca35ca695a7e22681a336a66ba7622623a330a663a7dc255ea335a688a79025f0a223a69ba757258ca360a6f6a7462569a21da61ea8ca242ca36fa63da8a924b3a382a652a82e244ba34fa64aa8d6231da3e1a523a80123b5a282a515a8f32171a272a526a862213ca272a51ca82221ffa187a52aa85721f0a100a65aa8742164a2a4a6a8a8a92132a233a701a9bd21cba145a72aa9a32157a1daa607a92721e0a076a6c5a8ef20c2a047a690a8852093a0dea540a8222082a07aa5dba78a1f67a017a555a7b71e1ea0aba4aba6e41de49f4fa42da6701d5a9ffca3b0a5d11c129f66a341a55a1c9a9eeaa2d3a4111ceb9d4ea258a43a1b959deba105a4db1a989d9da19ba3541a819d66a14ea3271a7b9d33a1f9a2c119e99cbea0aaa26019199c31a0d4a11d1700800292df93a886df212827b22897281f228127db2872297322de278629ed290022bf271c2a912a302186258728722ad21d7c1f9f230d2af718e9980a91d5290d8bed9fa79ec5299d98a6a0919fd0297299f4a03aa0162a939ba8a18fa0212a3b9ce6a186a1f329759e73a38fa2702ae49ddea36ca38429129fafa31ea4a72878a054a5a4a57c2968a37ca575a59a2891a308a611a66928bba345a6c8a62328fca372a602a7e62726a4a8a67aa78b274aa4afa6b6a7082712a487a6efa7b2268ca363a6dfa738265ca35fa65ea7e0253fa35ca687a7da25e1a240a617a77025c5a246a6d7a7ea242aa4fea64fa8e324f5a31da7b4a85a24c2a26aa687a8a52370a2aba5fea711239ca1ada4ffa6052232a182a4e7a6b22002a186a4d7a6e11efda0e3a447a771208da1e7a531a834211aa2c5a6e6a89721b7a2baa782a9df21a0a2e5a7b0a9d421a9a108a7f2a8172116a141a669a850209fa0e7a51fa8112072a09ca50aa8501f26a02ba56da7aa1edf9fb0a4c2a6c71d589f4ea44aa64e1d209f1da4fea5041de29ed1a3aca5c41c8e9e60a365a5631cfd9dfea2e5a4291c719d43a253a4871bf09cf0a112a4f51ac89ca9a1b5a3741a8d9c5ca149a36b1a799c2ca1cfa2f6191e9cd8a0a1a26c19d89b9fa01da2541800802d91c4947e836321e224f8264428b921a927ea289129442208286c2972299a225528312a692aa921ef254528242a051c851029202729158b69a16ea093283d95d7a1cca0d0288e96e3a0c59f0829a298bca09c9f4129289ac7a0b99f9729729c34a1db9fbb29359dd8a1c9a09c29ad9e74a248a1652908a0c0a381a33f29c9a05aa43ca4dc28e2a015a5e5a47c2838a2a5a5bca51e2849a20aa67fa6a92779a200a6c9a6d826cda2d2a54ea6242638a29fa57fa6c82517a2a0a582a6782507a268a57aa61825e9a12ea56ba6b7244da239a572a6e7241fa39fa525a7262507a2f9a533a8c4248da157a677a87e2441a285a687a8732487a1a6a526a8ce2334a1dfa448a73822e5a00ea4f6a5fc1fd7a061a360a5701d5da05fa20fa53c1e8fa0e8a2a4a50c1f35a1c3a40ba7b120a4a1e7a6d9a8e021e2a102a8a7a9002256a213a8d0a9922128a2b5a784a943218fa1aea6dea88e20f4a0a1a522a8012080a026a53aa73f1f01a0a7a46fa67a1e789f52a4f2a5c31d109f16a4aba5451dd59ec6a359a5ca1c859e57a322a5861c369edda2dea4201ce79d89a2a8a4921b949d22a25aa4751b2a9dd6a136a4d51ab89c72a1e8a3341a749c25a17da3ee19639cd6a0f0a27a19da9b6da0b4a2ed18419b48a00fa2281800800992c491e70759208624d2251b27e820ed248a266028c72000261328d6286422a9284b2a962981221d29e72a772aa69c58a7c1a897262f9bc1a582a6ee266b9023a0119f5d28d794b49dec9cbd281397a19de69bed284f98a09d3b9a16297699c19d7e9a5f299d9a969ea99a80297f9ce89f749dca29179fc8a18fa1a22911a118a424a4d8285da276a51aa6f3279ca2f7a567a6db269fa214a6d7a6ea254ba2c1a597a64825b7a186a53ea6c424dea140a539a65d247ba255a5b1a6922311a366a58ba6ee22d4a2b4a4e9a5022360a2d8a401a6462473a224a6d8a7f32526a31ea866a9542685a2e3a6eea8fe240aa3c1a50fa80024e3a223a503a799226da238a4d2a5ce20f0a1bda2c2a4101f6da0b6a060a3d41c0a9f589e76a2231c429fc89e01a3331cb8a00aa4f6a5391f88a209a84fa97d22d4a307a9bbaad82379a353a816aa132326a224a7f4a87e21cda0e2a51ea83c2070a052a59ba77e1f45a013a551a7d71e00a0c6a426a75d1ef09f64a4a7a6a91dae9f07a4cca5321d289fa7a32fa5b71c8f9e26a3d2a4401c1f9ebea291a4cf1b889d3ea242a4501bea9cb0a1faa3bc1a669c33a164a33a1a159cdea0fea2bd19f79baaa0d0a29119039c8da068a20119469b4ea02ba2fe18e79a13a0b7a196180080669365911b1b2e1c8320af22ef24231f0f235b24d327de1d7b217c232927b3172820ad22be265920e724bf260c29e21e1c23f525572c0318291b4820f02741173318bf1de027f012cb112c1b222856884592dc187928ee93659748147528ca97f59870149428ec985499bc14c6289a9a179b150f1e29fe9c749dce96b72908a168a3d8a1a9288fa1e7a546a6fa242aa122a6a0a66f2428a1bda5d8a6f3245aa17aa554a67b2488a15ca576a66f24c3a148a535a65e246aa10ba500a62c24baa034a572a6c52320a0f1a4b3a55222b8a004a46fa3dc2195a3c2a7eca8e2266ea048a5dea72b24709c39a37fa5c020dea07ea4f0a5da2181a2c0a490a6aa214aa16ea44ca6762162a03aa47ba58920079fb4a016a34e1d59a0e29c04a03f143e9ca31c661c5a9d009d5a9f78a1e718c0a3b6a9b5abfe2481a4e8a90bac8824a7a1f1a7f7a91c2210a16ba69ea89f20e2a063a58ea7c11f58a0e1a4a9a6f21e45a04da4eaa5ed1d09a0bfa35ea5571d809f51a329a5e11c449f11a31aa5b61cf99edea2faa46c1c999e6aa2cfa4211c209e15a277a48f1bed9d89a10ca4f51aa39d41a1dda39b1a759d00a1aaa3201a0d9dd9a06ba3b719a39c9ba0f8a24719479c5aa06da2d718039b7c9fb5a13c18e09a639f38a1961600800d80108802802d1a231e52202621b11dd5210624c925261df920be22d525491a2a1d8c1f9622e013ed18f31bf31e6b1af51c7b203d256b1a271b6620ee274018ca16571e08280a14e48b461b1a28f58e7b985b0d33287297219c96980a28e099089ef09ce727ac9b5da02c9fca27259daba190a1cf27489e3ba3cba28a26059fc5a3a6a36825fc9edea3f6a382258b9f14a42fa4f3254ba040a486a4e6258ca050a4baa47e25c3a091a434a547253aa1c2a484a53a253ba1caa4d0a5ca24e8a069a489a54e2446a047a3b6a447231b9f75a134a3a620609d1ea084a1cb1d919d6fa00da2bd1dc49e75a1d0a3651ffc9f5da26aa4042059a09da2caa4302068a00aa315a539203fa000a364a54020c0a1eca376a56320319fb6a1a6a5541d8c97111b9314598c1a9441287d29e5a273a651ad09af992899984ca53ca80720ae9f56a4c6a6571f99a08ca44ea6141ffe9f04a4a7a50f1e179f73a35ea5711d349f33a32ea5071def9ee9a2fea4d31cdb9ea6a2cda47c1ca49e6ea29aa44a1c219e0fa25ea4cc1b759d88a10da41e1b009d2aa1a5a3671a939ceda042a31c1a429cd2a0ffa2fa19189cbba0b7a2de19fd9b95a079a28819db9b77a034a29a19c39b4da006a23119229b2da0e9a1d818e89acd9f28a194180000db803e04120cb11ddd211424e3240b1df02036232225e61bdc1e6321b524a7197e1c8f1e7421041afa1caa1f4c22f11bd81e4622f725a419ae1cb4204c2738181a19fb1d7a27ab14860bfb1a77274608b0961b0d9627e094909cbf998227fa98cd9e569d3627289c1aa0b69ff826bc9db3a0bba03f268c9bbe9eeb9e9b23de97789cf29c84203a9c4aa09ca0a7231a9e39a238a21425059fbaa231a3f724439ff6a2c5a3ba240da09ca361a4be24a2a014a4b9a4b32444a162a44da59724fda1a0a4a7a554246da1aaa4daa50524caa092a48ea54b2324a004a44ba54b221ba016a3d5a43421a5a046a238a494205ca049a269a45c20fb9f7ba2b9a430209a9fbea2f8a40b20659fe6a221a5e61faa9ff3a22fa5981fa79fffa200a5681f199f44a270a41b1ea692c998b79a6114868aaa8dbc918e07a89ef79e3ba1b918249f96a26ea4b91ddb9e74a2a0a4511dd79e1ba279a4de1c6e9ec7a155a4661c569ec7a132a4251cf19dc4a125a4081c9f9db9a11aa4a21b559d96a10aa4731b1b9d87a1d3a3041bcf9c50a193a3bf1aa09c18a131a3391a669cd1a0c7a2e219559c87a05fa28819339c3fa0faa130193b9c21a0b3a1d818579ce89f7da1a418709cdb9f3ea13c18ce9b8b9f2ca11118b09ae49eaba0451700004e1656189a89bf1df32184239124e71ccf2076224625f71aa21dc21f6a233519d41c0d1f02225819771d7b20d5231e1be91df520b025ad19051c7d1f9d26ff17b918161e9a2613142b11ad1b83268a0770944a1899268194f099088dcb266798389d049ba426cf9a439fdd9d5326de9b909f7b9e6125539acd9ead9e2724b89a749f5b9f0124a79c83a096a07824cb9d24a161a189249f9ec8a119a28124f19e17a2a8a25b24489f83a25da32c24b19fe3a201a41224f59f2ea367a4b32309a06ba383a4402303a089a3c3a4e322f09f7da3b6a46822db9fada3efa42f2204a0c6a334a5c721b69fa1a324a55521929f5ba306a5ed20289f28a3e1a49620e49ef3a2caa44320c69ed7a2c3a40320889eb0a2c9a4d91f6a9eaaa2d7a4251f369e99a2d4a4db1edb9d38a254a4ab1dd79a52a0f8a13f1b25995c9ee8a04f19629a3d9f90a23619809c4ba075a36c1ade9cc1a0a1a3261b509d16a104a4c81b7b9d35a10ea4c21bc99d19a1cca3801bd69dfda088a33e1bbf9dd5a075a3c51ab19dc4a058a3981a3e9db0a03fa32c1ae09ca7a033a3d219699c9ea011a3b619219c70a0d3a27d19af9b32a06ea2fc184f9b09a01ca29818049bb79fd2a16518f89a869f75a11b189c9a589f82a191178c9a759f4da12618e51d3b1a0c1c761bd0299e248426f8286b2de925e5265a2b332ebf23ce248c2b142f3321af22bc2bd92e291f7320942b302e261b5a1d4e2a282ed40f6f19a52b192db398b410572b572cba9d429ae02bed2af39e649de42ad828fd9e8d9db22a2926469ef59b0f2b5c984ca5eba01d2cd5a5c1a8aca812276da988a8fba7f8253fac4aab0ea91b2ae0ac0dadf0a8b72d08acceaa5aa3282c24abdba51d20d22658a866a462242925b1a51ea50b25c42566a4afa51825d4254ea334a56b251325bca381a4dc24bd24f3a154a4b8220a2562a065a31296e92460a229a6459dd5293fa4a0a7a9a3dc2c80a75fa9a6a85d2bc9a6deac03aefa262da55eaa36ac3a22e0a28ba53ba8a420a09f64a430a7751f5ba0a4a4b1a6352003a06ba4a0a633204ca04aa478a6132005a024a44ea6871f15a018a427a6561f429fc8a3d9a5951ef79ebfa3a1a5421e369e59a34ea5ab1db99d18a304a5551d779dd1a2cea4e31c899da0a297a4861c709d42a27ba4471c1e9d0ea270a4e01bc59cd0a15da4781ba09cb7a137a4fb1a559c88a146a4ad1a549c71a1e1a3501a399c36a1b9a2ba19a89bb8a019a26919779bb0a014a25f19ad9bb6a019a22e19bc9bb3a00ea26319cf9b99a0dda10f19dd9a59a0aea18618799b51a049a14a187e14d616bf17e21408292c283529fa28e22c262840298d2cee2e4c257926e12c8730102358242e2d2d318d208c217f2da230fc161b1b7e2d7f30ed9614984d2dc62dfc9c0e98f32c802b729c4597d82b4a290d96311a602bd927101cb820e82bdf24cb220426112c0d21d520b124b32a6fa6bda4d7a43125c3a8faa2f594831e01aa8ca5e4a08c252fadbdaa25a9362b41adf2abafa93f2ce6ace4aa2fa62b2bbca934a9cf9a232a87a8fba6db244f2910a67ea6c726fc2800a592a51e26fa28a1a3afa4cc26552916a20ba128269929c9a086a0c2217c2a18a18fa02a17ad2b05a2c7a3c5a6af2b7ea3bda796ab0029cca490aa8bad4723f8a49aabaaad282030a4eba887ab441f54a240a708aa7b1fa6a188a6c9a91420a9a10ba610a94a206fa1b7a5a6a80e2065a03da518a8cf1f11a0f4a464a7491f669f84a4b4a6e11e359f4aa432a63a1e2e9f14a49da5d91dc19eaca338a56f1d949e66a3fea4fe1ca19e0da3c9a4c21c269ebfa299a4801cdf9d83a26aa4221c7c9d40a24aa4d71b3a9d14a226a4401bf59cfda1f5a30f1bb59cd3a1b7a3de1a689ca3a167a3501a0d9c4ca1f4a2001a549be9a046a29019e19a9da0eda113197e9a65a0b5a1e318b09a44a081a18b18ff99fd9f67a12a18559a979fdba031185117ba1af01bba1abb278c274c29af298b2baa27ea28f82b202e5b267427052c4a30a524c7252c2c983081237825b12c7f301a20cc22412cc930771e7a20082da22ff61bce20a82cde2cb016da1f6c2c6a2cb0199d204d2ce82b781cb722822c8629f51a7222222c5724e3915c21882a5da320a245943529f7a96aa50aa31c2846acf0a7d8a69428e4adf4a93ba9c129c1ad09aa84a7162b23ac5ca9cda4792ac0a9c7a815a04e2a1fa718a824958d2959a69ea76a236b296aa685a6c81fe42940a73ba6091df0290aa580a57d202c2a3ca3fba40217f029e8a34fa56ca4c92936a440a636a9972828a439a888ab6827c6a393a92bad062450a42daa10ad392225a47aa947acc9200ea39ba859ab9420caa20ba898aaa22046a25aa78ba9972009a2ada605a9562044a13da6e2a82920f2a0bba574a8a41f43a020a5d8a7171f04a0c8a4dea6891e9d9f87a479a61c1e6a9f49a436a6c81d4e9f2fa403a6601d039ffca396a5111dc39e7ea361a5b31c9d9e21a327a5791c399ed9a2e2a43e1ce09d8aa293a4b61b989d41a24fa4601b089d09a210a4c31aae9ccca19ea37e1a3b9c78a11da3201a079c31a1ada29419da9be8a066a24519a89b9da04ba2db18b49b93a006a29a18649a15a001a23418769b56a0eba18217bb15e019d5196519b7267f276e29b22938290527da284a2bc62d22277528052c1730bf251127602cc530612492259c2c0e31d621d423e62cd230b5207222e12c3d306f1e4122282d102f491cf220162daa2d74174220da2c142c3e116c1fa12cf9283298711e6a2c78230da0ac13012c28a1c4a30e9dbf2ac1a89ba5699fb329e6abbca7b4a4d92915adb8a85ea5252a28ad18a9baa43a2ae6abcfa8f4a4e429b1a956a972a4962a3ea806a9d8a2c42a04a836a85c95a229ada5d9a7381f7229f3a422a73c21612924a5e3a6a91cb22986a5cda6a39f612921a4a8a63aa65828e2a316a8f0a9b727e3a478a8c5abfe25b6a45fa94fac3825dea4bba998ac4f240da58fa999ac4f23aca3efa81bac512231a351a8aaaa75219fa29ca7f6a9f2204aa206a752a9af20a1a188a60da95b2063a142a6c8a8ee1fdfa0c9a542a8541f8aa069a5cba7c61e33a00ca557a73d1eec9fd1a4f0a61d1e8f9f8ea47fa6b71dca9e49a4f6a51c1d4a9e01a4a9a5b81cf99da0a36ba5721cd79d60a33fa5401ca89d24a303a5d21b469dc2a2bca4661b139d90a284a41b1bc69c50a231a48f1a7c9c15a2e9a3521a479cdba171a3151a5f9cb1a14ca3b919719c97a127a3ef19629c68a1cba24119b09b18a177a22e197f9bc1a051a249188b2062223d243120bf1db91e941f161d6c2684266328912ad22a06278528002c2f2e0f2667275c2c6c30f62446277c2c4031bf231726c62c5531bb21a524cf2cfd305120a523002d8430661d8522102d392f67173321f92c472d3291aa20d42c212ba79c131e872cee26aca10c13212c3a9881a47b9e6d2b82a833a616a21f2b33acaaa7f4a4112b7cada0a819a6112bcbad03a9dda5c22a11ac4ea83ba5072a09aa59a8b4a35b2a86a80da8b1a14b2aa3a726a8329e022a07a71ea8679ec429e6a6f7a7009f352997a6f5a743a11d29caa73fa873a501292ca82ea83ea74b2865a67fa83aaa172706a5f1a8e4ab24261aa540a949ac4c25e7a3f4a8c4ac0b2460a477a8cfacda22e8a3eda8a3acd62262a39aa8d9ab23225fa235a8f7aae52128a2b7a755aa5721e7a139a7b5a9e0208ba178a6e9a8352029a1f2a563a8a41fdca0a2a520a8111f8ea045a5bba75d1e4ca008a552a7001e1ca0c6a4fba6a11dd69f8da46ca64e1d619f53a41ca6fc1c169f15a4afa5851ccf9eb5a349a5441c3d9e53a3e7a4031c8f9dc9a2a6a4351bfb9c6ea26da4c11acc9c07a236a4671a8a9cc5a11ca4631a539ca4a1cea3fe19359c70a146a38719009c44a1e0a25b190e9c16a19ca2c418f99ab8a066a24e184a9b9fa0eca1dd182f189f1c001ce21af11dbd1d391f641ef926c0271129b22b74299d273f292d2cca2c52262a28622c4e2f6125a727a92c03318a24c326e52ca1318f224d25e32c6b310e1f0624eb2c0a31091c7f21012d6b30db1040200c2dcb2e7a9cf418ff2c9d2cfda0ea92dd2c9a294aa2669c592c6c2171a44d9e132cfba6dfa500a1b32b4cac6ba7c5a3a82bd5ad31a80ea5ce2b62ad3ea8bda4132b42aa1da8bea4132a84a870a85fa4362a34a856a8c3a3b92982a831a898a140293fa866a8eda03e29c3a656a8c9a2cc281da686a8aca5a428f8a589a88da74e288ea45ea89ba8792747a478a89ba9ee26cda472a89daa052652a4b4a8dbab5725a0a3a3a8d9ab992452a377a8d4aa062496a38ba8bcaa5823aca36aa824abd9228aa347a8e5aa5f22e9a27aa730aab121f7a1fba602aa2e219ba19aa6a6a9ad2035a137a6e3a85920e7a0f4a553a8d81fcda0b7a535a8701f90a07ba50fa80d1f7ca03da5a5a7a91e18a0f6a404a72b1ea49fc0a4b3a6a01d829f90a43ea6581d579f72a409a6f51ceb9e35a4b3a5b01c7d9ef6a35ca5441c3a9e79a300a5011cb99df8a2a4a4291bec9c6ea231a49b1a889ce0a1f0a3d7194c9c91a183a38919199c53a154a35b19359c3ba115a3cb18179c19a137a321190e9cd4a0b6a2cd18ce14681b1c1cc11ba71d7a1de41e38201425aa27d4289d2b7d278527a8285e2cb1292f26b927842c212dc225b427c42c2c308124b526bb2c58319b22ed24b92cc33103201623942c6e31301e3b21ad2cd630db10dc1ee52cd12fab9d7b12d72cc92dc8a0279cbe2cc42ae7a3879f772cb42327a58ca1412c26a646a63ea3042cc7abd8a605a45a2b53adfea68ba4ec2a1fad1ca807a4d92aafaae7a7e5a4f52960a943a8aba53b2a4ca857a8b4a5af2910a85ea8bda54d2926a796a866a52e29fba7aca8f6a4e8281aa643a8b3a5e8276ea53ba8e8a7192784a57ea8a3a83627a6a5c1a834aa7f26efa4b0a839abc425e9a4f0a89eab9525eea319a971ab232549a3a0a8e1aa4e24baa3a2a88cabc223f3a3a0a885ab2c23c2a377a8e0aabd22c0a21da81aaad621d1a12da751a90721b0a1b1a6f9a8a12042a15da6d6a84b20ffa015a6b0a80e20dea0d6a571a8681f94a08ea516a8e31e0aa028a589a7521ebb9ff5a410a7b61d3c9fb1a4a7a6591d139f75a453a6061dfd9e4da412a69b1cdc9e1fa4b0a55d1c669edba358a5fc1b229e7aa324a5991bb59d29a3e2a4331b349da9a28da4c51ac19c5aa24fa41d1a6b9ce0a11fa47719499cb8a105a45119659c99a1c1a33419219c52a16da33b19229cf4a0c0a251189e14991bb21aec1a7f1a361d781dd01e6e25d327a229e12b6d26a7275329222c15260f27a9289d2c182aa1258a27582c122e77248026b12c223155232425db2c29325d1fc623fe2c1632c319e420ef2c6031c9963d1db42c8530bd9f5192b92ca32e5aa2af9da62c612cb6a41da2722c6627ada5eda3422cfba3b8a6bba4fd2ba0aba9a735a6bd2bf3ad68a84ba78b2b08ad75a868a7c92a98a947a8afa7d729e3a858a816a81c2a16a87ea8cba7b929ada67aa863a7952971a675a8e8a60a29efa50fa8c1a5442806a6f7a7a6a66727d6a631a822a8f02649a55da89aa99c268ea483a87caa1a2654a481a87daab42541a38da8d4aa2525bba39ea8b7aae124b0a3b8a84bab7724ffa3cea8dbab582443a4cea8d2abc52374a44da8e1aac422a7a3bba70daad6217da282a70daa9821e6a12da7dba907215ca1a4a63ea98a200ca135a6b3a82320d3a0f7a579a8921fe2a0dea549a8461faba08ba514a8cb1e5fa044a5c3a74f1e14a0f1a462a7db1d01a0ada4f1a6451db19f71a495a6f31c5c9f35a419a6a31cf19e0da4a5a53f1cc49ed1a344a5191c4d9e4ca3e3a4561bc19db8a292a41e1b8b9d67a258a4701a6b9d1aa229a4331a3a9ddfa1d5a3f719e19caca15aa38519279c43a115a3b718e09b01a1a9a28918b50d9012d113608c891ad91b9f1c2b1ed4244227d028e92a0e2543287529782cb7249d26d328522c942500268c28802c142a8d24b026c72c4f2fa222b924ad2ce031f41feb228a2cac32b3197c21bd2c50329196291d7b2c3931419ffb916e2c253014a25a9d732cbc2d39a4c0a1672c152978a51ba4532c3aa4d6a68ea5092c47ac65a7c7a6772be8adfca768a7f82a01ab03a82ba74e2aeba703a81aa78629baa62ca806a7be29a7a68fa8d3a78829a3a6bda823a8172969a68da80aa8a9287ba766a844a74b2806a83ca885a7e227cca606a83fa8f7263aa699a85ca91127d2a602a973aae72603a7baa88baafc25a9a4b0a8d7aa4c25f1a311a8e8aa3c24f3a374a889aa3624bfa347a861aabb23d2a324a850aaee2250a3eda77faa8a22f7a2bda77daa002255a25ba70caa8e216ba217a784a919211ea205a73ca9db20dda1cda6ffa8972080a17ea6c4a847205fa13da690a8032009a1e3a55ca8671fc3a07ea523a8d31e6fa031a5b9a74f1e25a0e8a440a7af1d9a9f94a4caa61b1d3d9f5da455a6cf1cf59e21a4eea5541c9a9ea0a375a5fe1b129ee2a2f7a4ec1aa59d61a28ea46a1a419d1ea259a4e319459d16a217a4db19f89cefa1b8a3c619b49cc9a13ea36119629c6ca120a36419209c57a16fa31319fa0c541131112b8ec619b91a811caa1dc624842732295d2ba92495271729342c2124ec2689285f2c0725fc255d288c2c20267c244a27c62c682b0822e824c12c8930cb1dc322a42cc732de163c21e62ced3290994d1da02c1932479f1092952cc4308da25d9d852c8a2eb0a4b8a15e2c8c2a96a521a4432c0099afa62fa5d82b88ac9da71da6af2b8fae06a861a74b2b24aa76a711a71a2ac2a6c4a742a7db2912a819a839a7e12945a73ba812a85c29f6a666a854a8112922a6a9a8ffa8c5289ca5eea8d3a87f28afa588a8d9a8e5273ca5b0a886a99a274ea47ea8eaa9f22633a441a877a92626f3a449a87ba9952551a4d8a773a9a72404a265a771aad52315a303a891aad523c5a207a85caa41235ca3e6a771aaac2258a31aa845aaa22239a3d2a7dba90422eea2b8a7d5a9b321caa290a7cba9702137a22ca7b2a9d820f5a1f1a669a983203ea160a6d2a81820fca00da67aa8381fa5a0c0a542a8b41e86a08ba50ba8511e3da053a5cca7b41dff9f10a554a75d1d6e9fcfa4daa60a1dfe9e8aa490a6c21cc89e56a45ba67f1cb89e0ba40ea6051cf49e71a3a1a5671b209ffda243a5f41a8e9eaea2baa4a51aad9d6da29aa41f1ab19d20a260a49319f49dbca1b2a30719109d0fa1c2a2a318949ca6a01da225184e1064146815db8d791a381da81d821ff4239c27f428de2a0925bc277a291d2c8824ca26b428702c3624d6257328a02c8724a324bb26ef2c5f262622cd24fb2c692c941c38229c2ce131311063209e2c8c3338997a1d572c4b3338a02b92772cee3170a21da04e2cf92f8da49ea32c2c282ce0a528a5ff2b5599cea6ada5ac2b60ac0aa74ba65f2b20ae9ca75fa7ac2abfa84da781a7732996a645a815a8c029d7a692a844a8ba2940a66aa8d4a82d2901a685a8f7a8ba2854a56ea8f5a83b2832a53da8afa8e527d0a47ea80da9fa2777a44ea813a9492710a525a8c3a8af26b9a45aa875a91f269ea43ba8a7a9752525a421a8fba9e524f6a216a86daa532472a451a839aa482465a44aa820aa0c240da4c1a702aa9d220da368a7baa92022d8a266a792a9a421d0a243a756a99621ada22aa73da9192153a2fca622a9c72008a2d0a6f6a8a82065a175a6c3a82620e3a029a674a8ba1f7ea0daa53ca82c1f52a099a5f1a7b41e3ea05da5b4a7491e37a02da56ea7ee1df09fe5a42aa7571d6d9fa6a4e0a6041d009f61a495a68a1c6a9e16a41ea6311cd09d5ea372a5541b289d8ea2a5a4851abc9cd6a167a49e19789c82a14ea41f19509c9aa150a43519609c89a115a4e8181e9c3ea167a3cd18059cf9a009a3d51829116113f816ac8f901af01c6b1d591fc0249527e128882bb92432288d29572c7624b426cc28612c302464252828762c962347242927d42c372231227425e12c8726971e8a22672c882eff8f6d1f382c1933fc9d4012862cea332ca1519d752ce23223a374a1432ce430d5a443a4152c742dbea571a5f22b9e19ffa623a6e42b0fad12a854a7ed2bceaddea7e6a7ae2ab0a6d1a697a7fd28a0a53aa818a89429e7a589a86ea8742961a52ea897a8cd2847a509a86ea854282fa61fa8a4a83828c2a52fa8fda89927e2a434a84aa9ee26a3a4fba7ada86726daa4b5a796a8042671a48da7c9a8c32524a477a7b4a8192580a324a801aa2f2599a13ca765aa1b24bea318a829aa4524a6a32ea834aa14244fa32aa82aaa982334a3d8a7c8a9d422f1a259a76ea934229da224a734a992217ca2e3a625a9392135a2dda625a9002133a2c7a60ca99420f7a1b9a6e5a85f20bda17ea6bca8472048a10ba674a8c71f0ca19da533a80e1fcba055a504a87b1e8aa004a57da7cf1d73a0d8a43aa77e1d34a090a4cba62c1db49f5fa468a6b81c629f37a4f9a5531cdc9ec6a387a5fa1b769e36a31da5661b419eb0a2c5a4951aec9d70a292a4561a969d62a292a4041a519d15a259a4cb194b9ca4a123a4b518029d26a1a6a27d18a2081714d115ab8e051b391df91d841f6a24cd277d29242bdc236e272e29132c31231c264e28072c3423ce2523284b2cc021742411278d2cef1e80202124aa2ce52082198420c92c4627d98f0318242c7830529c7b97fb2b66345ea0059b252c253458a3e29f402c22328ea495a2012ccc2e8ea5aba4d02b5623baa6aca5b82b40add5a759a7a12b73ac85a7e0a6312a70a6fda6b5a744298ea5faa7bfa74c29b7a520a817a8172951a56ca881a8d92899a557a8d3a871284ca53aa8c4a808289da4f1a70fa93627fea415a877a91027b9a505a8c7a87b262ba4c8a776a9fa251ba42aa824a9cf2593a498a812aadd2564a426a87caae3243aa40aa8a0a985240da528a89ba957240ca4b3a758a96023a7a3b5a79ca9242327a398a7b0a993224aa37aa79da94722fba227a755a9d421b1a214a73aa986215ba217a750a93c2160a220a757a90e2108a218a750a9d92098a1cfa622a97c2015a171a6c2a8e41f92a0e5a53fa8101f28a078a5e3a7681e0ba02aa55da7eb1de99fd2a4e8a6761dfb9f93a489a6f01c889f3da42ba6931c349f03a4bba51e1cac9e7ca368a5ae1bda9d04a300a5331b579da9a2f2a4a01a629d6aa2aba41c1a459d44a281a44c1a5a9dd7a139a4af19959d3aa1d2a33219d89c93a0dea23d185b0ba212a6135e86bf194d1cb81c661eb7224c27e528962aa6239e271e29c72bf32252264928ee2b4d235b256927412c7f2237238c25632cfb209e1fc0227a2cf41c74195c21ab2c3f1c019c9e1ac22c92279c9eaf9d382b6e3219a15a9f092bbd3453a3ffa2e52bb23323a4b9a4962b5a3049a5d8a4302b812587a7a9a7032c46ae55a7c4a7232bd7aa11a71da7a52925a5c7a757a8a42964a545a874a87d2912a617a873a8eb284ba61fa89ba888286aa504a89da83528b2a41ba8baa8d227e3a410a8ada83027d7a4f2a70aa9d92694a4c9a748a93626f5a50aa807a91f263da491a754a99225e5a377a703a9e62471a28ea750aa9f24d9a352a721a91d2441a480a7e5a8d923e9a343a716a93223e8a34ba727a9b92276a33da743a973224aa342a73aa941223fa35fa746a90e2228a35aa755a98e21cea258a75ea92b2169a24ea755a9ce20e4a104a70da9722081a1ada6c4a8142015a15ba689a87e1fc4a012a638a8eb1e7ba0ada5f8a7541e3da04fa592a7db1dff9ff5a432a7321daf9fa9a4c0a6d51c149f4ba45fa6741cad9e1aa4e3a5351c499ebba372a5ef1bce9d49a3f8a4791b5c9dcda2a2a4c41af09c38a24aa4401aef9ccba1f8a3e4197e9d74a171a35e19369dffa010a3db18c29f20a1e3a17a170080cb8a59831408d61ea5245f263427c6234228af29f72a12240c271d29002b4d2215266e28932bfc210925a227e82b0e211823d925212c4c1f751ec122212c101a2190b31c4a2c6e0a0a9f699a6f2ce91788a0909c4c2c352ad1a0c5a02b2b493406a4e7a2fc2bd13427a419a4102b683232a558a56a2b3b2a5ea7a8a7da2be0ad87a795a79a2a34a784a657a7022939a411a798a71229c2a4a4a7f2a7f92825a5c1a74ea8952843a516a88ca87d283ba53fa8b3a8582822a515a8cba8f82780a4b5a70aa9ff268ba46ca7e1a866266ea43da778a8f02504a5f6a6b3a847251ea445a77da84f2538a283a661a852247ea2cca6c7a80d2495a419a738a90124fda3ffa642a99e232ea3efa6f7a82323eba2daa6f6a888229ca2d6a6e2a8482280a2b7a6f2a8f52193a2d9a622a9c52199a2f2a635a97e215ea2e3a61aa9212161a207a72ea9cf2027a2e1a603a96a20dca1a4a6d9a8372063a145a692a8ae1fe5a0fda549a8171fa0a0b2a50ea89a1e73a060a582a7ee1d6fa001a5f5a6761d6da0b1a470a6101d21a051a4fca5a81ca09f09a482a5241c019f70a31da5b61b419ef4a2c3a4361bad9d8da27da4841a699d08a22ea4cf19639dc8a1eaa3a0198d9d9ca196a385195d9d49a148a38e180e9d11a113a37718008071942595220d4520d6245c263827a9238328f9298a2a50239d276929062bf12151267728852bf1208a246026812b9f1f0d212a24842b881ccb1a1520762b0617ee9aac177d2b5e913b9ec1973f2bbd946ea1f19ed22bb21588a3a79ddb2b362a60a3aca25f2a4834bca4a0a43a2b9433c1a519a6b12b912cc7a627a7602b65ade6a7eaa7cc2a49a522a7a1a76f2928a46ca7aca7f728c8a42da704a8b328d8a45fa71da87928caa4b0a74da83c28b3a4d4a774a8d42755a463a780a80827ffa302a76da855262fa4e1a65ba80d2651a4f5a686a8c92561a4d5a659a8842544a290a6cda8c12442a324a7c6a8e52464a329a7cfa86324f6a27aa67ca85923eda29aa68fa8372379a286a689a8b9225aa26fa677a83e2224a254a68fa8c6211ea244a694a89c21dfa15fa6a8a86521efa1b5a6e6a8202127a2f6a6f0a80e21bfa21fa70fa9bf2053a239a72fa9a220b6a11aa72ba974200ba1afa6f7a80c20c0a04fa6b5a8641f82a0d8a544a8c51e4fa048a5a8a70d1e3aa0e3a431a78a1d3ca0a0a4bea6fe1c17a051a459a6a81c979f05a4dda5561ce59e66a35ba5ad1bec9ddea2cda41f1b579d45a24aa4a41ab69cbfa1caa3e819619c7aa178a372196c9c5da123a31919ee9b15a1fea2a818bd9bb9a041a2ea180080d99127944104f02212283729dc28f5225b28e329692a24229a274429822a3322de26a2280a2b5321d124d2263a2b771ed920e322562bcb190590901c392b6c11689d4091302b889136a09d9c7e2bb49a9fa12fa0842b5f9c41a3bea1b12b919977a4fea22e2b4b2877a5d5a41b2b0e30c6a51ca53f2b5a2af7a65da6712b38a7fca500a6ee29c5a394a69ca62b29f4a28ba6bfa68128fba2e6a65fa735287aa324a706a80c28e2a349a736a8782700a403a72da8d526c3a3a2a616a81e263ca39da617a8c7251da3aaa63fa8592578a376a6fea706256da403a679a7ad2483a2eca51da8762470a269a689a87f240ca4aca6a0a83c243ea4b7a6baa8c723a6a30fa66fa80e23bda283a515a8f52169a273a519a823211ca26da50da8dd20e7a183a505a8d520d2a1efa541a804213aa2a3a6a3a80d2135a224a70fa93421e6a13fa736a92b2172a1f6a62ca9c32014a1bda6f4a87e20d9a071a6ada83220bda005a658a8951fa5a0a4a513a8f41e8ca03ca593a7621e29a0cda4f6a6971df99f71a474a6fb1c4e9f0ba4e7a5891cda9e7aa367a5091c669efda2d9a43f1bbf9d54a252a4a21a7d9deba103a4031a759d9ea193a38619889d76a152a36e19899d3fa1f9a21919ca9ccda095a2ff18619c46a0b3a141170080389370955a087222c7271629a82875222d284229e22978221b28132a4a2a7022ac27c829e12ae820c2243827a02a491d3d1b6420662a2818829d6e9a322a53917ba0f29f4f2ae097bda06ba07c2ab29987a1e7a0cc2a859bf9a162a1cd2aae9c19a397a2d02a4c9e09a479a3612a439863a5c5a5142b459fc6a60aa6d72ac7a3fea56ca62129f3a266a684a6a2285ea3daa63ea75d28cea3eea6e7a7012804a442a716a89e272ca449a734a8492735a42ca733a8d4269ca3f3a644a847264aa383a624a8b525e9a227a692a7322508a3fda546a7df24f7a30aa631a7e124d2a235a629a8a32427a419a7dba88f2497a37ba790a959246ba3ffa612a9bf23dea2e0a559a89622cba1dfa42fa7f2214ca172a4b9a62221f6a074a4dfa6451efba0bca402a7d41f55a180a5cea76d20eaa171a6a1a8e120c6a2b3a75ea94c2131a301a8b6a9442123a283a732a9c220f6a050a670a8d41fb3a0f4a534a8671f79a0b3a514a8ad1e48a043a587a7191e06a0c8a4e7a67a1d569f69a469a6001d099f1ba416a67b1ce79efca3c6a54f1c8d9e8ba376a51d1c159e18a3d3a4701b949d45a237a4a41af69ce3a104a44f1ad99ca4a19ea31b1a8b9c56a130a3d819809c17a1b1a268193e9cd3a08fa22f190f9ca6a025a25b1800805d8dfe911509a7216a263128772838222b286329a12985226328e229732947237928472a492ad420c423cb25ae296819399e01920529f78ab6a14fa04729c690faa047a0ca29c893bea0079fd4295398aea0f39e0e2a259a16a10aa0422aba9c7ba1a6a0242a4f9ec8a2c3a11d2a18a0fda3d2a2c929e3a06aa469a4062943a350a526a5c82894a2efa5f0a561289fa3e2a658a7502882a2c6a6d6a7ae275fa28da6cfa7b926b1a240a62aa7ef259ba228a618a7b02561a2f8a5fea65a2571a2cea5f2a6072543a270a578a6852424a20da53ca64624a0a218a59ba66d24d1a25ca64da851257aa2bfa74ea916256aa200a7f3a86224a7a25da67da81024a7a1aea51fa8e922e2a03fa462a6c52005a195a3c4a5361fa2a08da238a5261eb6a0caa25aa55f1e26a129a42ea6172082a105a630a8d820cca19da751a93f215ea22ea8daa90d215aa213a8b6a9c8201ca23da731a9622035a110a684a8891f8fa05ba5a4a7bf1e21a0cba494a6f81dca9f74a4ffa54c1d549f2da4bda5c91cff9ed5a366a57d1cbd9e62a31ba5121c6c9e04a3daa4bc1b0e9eb7a2a5a41d1ba29d4fa26ca4c11a3a9df6a130a4621ad29c75a1d6a3bc19939c1ca19ea36d19779cd5a02aa3f818cf9b4ea0e1a26f18a19b59a036a2cb1600803a915f934c09bf20e1247a263d27cf215125012845285f210627ca28da28ce23f129962b552a801e5f22a524fe28bc9c1ea847a9f1265f9770a35aa412285f09e39d029dce287792c49d079c0c29f495dc9d5b9a36296398f69d7f9a7b299f993d9edf98bc29a49b6f9e359bd229fe9cf0a02aa02d2a45a0e3a31fa42c2936a2a0a5faa559287aa3a0a606a7bf27efa2a4a62aa7fc269ca28aa655a78a263fa25ea636a7e82514a20ba60ca79b250fa2f9a50ca721253da213a63ba7ad2480a2dda52da74f2418a246a5ada6fc22a3a183a478a5f621dca14da412a5662387a3daa64fa86025cba38ca8eea9ed2546a2a9a66fa83024dea2a6a582a7c722a3a2d7a491a68521f4a1a4a350a52d20d8a09aa133a4481dc19f3b9f1da37a1bc09f569ec1a2871cd99f88a17da4081d6ca180a647a83c21daa3e4a87aaa212356a49fa858aa8f228ba2f6a76fa95e210aa17ea696a8092063a05ba5c9a7951e61a018a54ea7321e47a0e8a431a7e61d47a09fa4d9a64c1dcc9f2ba41ea6c71c299fc9a360a54b1c939e4ba3f9a4ba1b1b9ef5a2b5a45f1b769d7ba258a4a81ad69caba1e5a3e419669c06a173a356192b9ce5a01ca30919129cb8a0e0a22019289ca1a07ea29a18129c5ba061a2a418f79a34a00da221189086cc91b9910516db1c9b1f7321e920461fca223f242427021da120de232126af1ce3212924dc281b21a4254f28b428971c072042230c2bb918351bef1fbf271c166e18481d2728051146129d1b69285c887c9218198f282394b8977714962855973b98dd14e0281598bb9883183229889b199cb210fa2901a091a384a1a228e1a22ba6aba6f625c2a131a6d2a65c2634a1dba59ea64d2694a1a9a59ea63526cda1b4a58ca6f825fda1c5a5f2a6062640a2caa5d7a6ca2524a2d7a5efa61e25eaa1cea530a7002540a1bca546a7b124fea09ca535a7132461a0a3a54ba796241c9e0ea49ca5d7234c9bdaa116a53d205aa034a4e2a51321c8a1ffa479a65f2117a15ba443a63a215fa01ea4a9a5ac209a9fd4a142a4401e6c9fd09f0ca27b1abe9c301b6f1787958c98861e2b1d169aa2a280a8b4a9a922b9a492aa41ac7f2411a280a879aa7f221da1e3a605a9a52060a1bda577a7911ff8a0eca4afa6451e90a06ca407a6a21d0ca0dea358a5031d969f6ea320a5911c359f29a309a5671cef9ef1a2faa41c1cba9e98a2d5a4cf1b569e47a28ea4281b209eb0a11ea48e1ada9d59a1f0a32a1a859d1fa1a6a3bc19219de5a062a35219969c94a0efa209193c9c61a06da27518e89bde9f2ea20218069b1aa029a290160080fc856985a201641aad1c7a1d801ff41ddc212424ba25481df920df22a6258a18d01b791da22079161a1bdb1d03216c1c6e1ec32195267e1a721ba02010286c18fc14c01d15280b122192bd182f281c92c599898d3b288c98fe9c4f9a2c28e89ac29f139e1d28809c42a1aaa09d27489d46a222a25826aa9ee0a3e5a30726d29f2ea414a48c26349fcca341a43926dc9f20a480a41626a1a0a7a4f6a4f625eaa0b8a463a5552519a117a5cda536255ca11ca5eba5e0246ba12da55aa69b24b9a155a5a3a68c24e3a15ba5cba662247da1d8a438a6932367a08ba3b9a49a21f89d57a13ea3f21ef89d3ba19aa3511e329f27a251a4491f41a0d2a2c6a4be1f59a002a315a5ae1f3fa0ffa264a5c51f41a06da39ba5bc1f45a03aa3aea5551e6e98d89daea16a19b71c0429102a7ba277a6dbac2baeb9276ca1f3a88eaa73220a9fdaa436a7681fcfa0a2a4bfa6c61e17a01aa4d9a5ba1d459faaa38aa52c1d749f5da350a5bd1c049ff4a207a5791cec9eb7a2eba4521cb09e64a2aba4ec1b499e19a274a48f1bb49da5a127a4bc1a469d6ba1d6a3641aae9c0ca16aa3c8196f9cdfa018a395192f9cbea0b2a27019159c9da07ca24a19eb9b6fa047a22419ae9b49a014a2f8180c9b2aa015a2a2181a9b739f32a167170000ca80e5067e0bde1de4213a2411251c1d8f2187238425b01bc41eed205b24a319b41b451dc61f371d751e70210524bc1c761f0a23aa26ff197e1cee206427bc1756187e1d8727e314c40bd5199527828872983e8d992724962d9d399b9427aa99959fd09e6627959cb7a093a0f326b29c9f9f42a09024e098b99c029d1b21aa9c37a086a014244d9ee4a12ca20f25e99e75a21da3de24df9f0fa3cda3d52466a0a2a33ca4ad24dda022a4baa4ac243aa143a410a57924a0a180a476a54b24dea1d3a4efa53724c5a1c8a440a6022458a1daa417a68823b2a089a4d6a59f2286a02ea4b2a5a42148a077a3f2a4c92025a008a3cba46320d29fdda2e1a40c20599f0ea326a5f21f3d9f1fa338a58a1fc19f3aa371a5861f759f0ca358a5c31e1ba09fa221a5731eab9a839e8fa0001aa088b18da591ee06959aaf9c1b9ff313fe9e59a27fa4fe1c049f7ba2b0a4ff1cf19e5ca296a4ad1c639ee2a177a41f1c419ed3a14aa4ab1b129ecca12ea4421bd09dbda128a4181b859db3a10fa4f71a369d92a1f3a38a1af29c62a1a4a3511ab59c3aa145a3d119779ce5a0c1a28319629c91a044a22419469c3ea0e8a1c618499c21a0a8a174185d9c00a07ca11e18799ce19f3fa1bd17de9b9f9f28a11e17169be59eb2a0991600005f16881842818c1dc8216f235c24b81c6b20f821d924e11adf1d21205023cd19621d8f1f7222981a841eb6205524981b251e1d211826d419671bd01f96261017d018a21d822696125111de1b7a26018868964316b126d5950b9b6396bf260299399ed59c83269f9a5c9fe19ed525ad9a359fef9eb424769a289f6f9f5e24789c76a0ada0cb24559d53a183a1c524249ec6a138a29c24c79e2ca2dda281245a9fb5a268a35b24c19f1fa310a425241ca089a368a40e243ca0dca3daa4ad234ca011a421a53e2349a028a44ba5e92246a025a452a59d2256a03da479a5372259a047a4afa5c82120a038a48da54421e59f04a449a5cb205b9fb8a31aa56720059f49a303a52820b59e0ea3efa4af1f979ed0a2e7a46c1f7f9ed0a2f6a4f91e8f9eb9a210a5911eef9efba2d7a4e01daa9c1ca1dfa2d71ba798759ee1a0ff18fc99d29eb1a1b1186c9cd69f7ea34f199e9cc1a08ba3121a439d37a114a4231ba39d6ea12fa4861be29d43a1f6a3ed1a039e23a1b8a3ad1aed9d11a1afa3811ae29d03a193a31a1a809deca08ca3ad191c9dc8a074a38419a89cb3a05da321193d9c90a0ffa2eb18979b42a09fa29718399bfe9f28a22b18e89a9e9fd8a1f017fc9a869f90a11d177b9a579fa5a18116809a649f9ca1df17e01d0a1fc5207c171a2acd28672af828672ee92bbe2cba2c1130aa2a3b2c442d3f30bc28292a752dc72f6d2502283e2ead2ea4200223622e402e2c926f19a42d012d5a9c8e98032d4f2c12a0be9de42ce02a82a164a0d22c762990a031a0382c9a265ca0ea9c682c639827a9a5a9ec2a1ba418a987a97029e1a614a6fea6752731aa1aa8eca534264bac29ab3da83a2951ac66acd6a7312e57a9cbaaaca6832cdea670a7a7a3512807a598a501a0402688a47ba5aa99592599a426a511948c2586a21da4019d302534a2c7a5521e4429f3a42aa54d24fb2c9ea495a41da0b42b41a61baa73aaa2a4f6a515ac6daccaaa1ea439acf2adfd9e2aa23ea99fa990212fa0aba42ea78d1f78a0cea434a7c51f85a0c1a400a7f51f24a093a4d4a6eb1f6aa079a4b2a6a11f1aa04aa46fa6381f0aa030a438a6b91e569feaa3fea5441e009fd7a3b5a5a31d719e89a369a5591dfc9d3aa316a5e11cb79d07a3f6a4741ca39db2a2aca43e1c999d6ea296a4061c609d2fa285a4581b2d9d08a273a4141b039ddfa13fa49c1aa29cb4a143a4131a889c93a1fda3de19319c3ba1cba24219ff9be1a027a22319d09bdfa04da2d818e29bdea055a2d618cf9bd3a04da20519c29baaa018a2a318e69a64a0daa12a18a29b56a060a15018da2099243f25108fd5285c2a292c7c28862c1129952bc92a622eec268428382bd72f352561251d2c74302223c823902c9b30c21da9204b2d613090986f93c02de62d9ba0c1a0e42d862c65a147a01e2d7e2adf9ed29ee12c302a3211d11d962c8125d41e5e23df2bb3972da4c6a4f22845a45fa810a63f25d3a671a5fc9cac22b7a802a10b1b491389ac5fa624a25f26b3ace3aab5aa5a2b52acaeab0fab682ce8a82aaa8ea90c2cf5a6b1a85aa4982ab1a533a7569a1d2aa0a4ada54d14952a6ea2a3a3f21a2d2b2ca13a9cf621c52b9ca0ed9e6ea1162c1aa260a597a69f289da35ea8c4aa801250a4eaa96cac6aa413a5f6aa20adb0a37ea4f1aad8ac5b14d4a3c1a8c4aa6f1d79a277a717aa531f2da2d4a6d2a909201ea22aa6f3a8292095a1d7a594a8e31f80a061a530a85c1f28a0faa4a6a7ce1e3b9fa6a4e0a6471e499f62a44fa6d81d459f21a4cca5811d1d9fdea34fa52e1d089f87a326a5b61cfc9e33a3e8a4731c7f9edfa2b6a4321c139ea5a28aa4b51b919d64a26ba4531b519d3aa23ba4c41a089d0ea21fa4941ac79cf6a1fba3671a8e9caba19ba3d519199c57a124a37f19559be0a07aa213191d9baca013a2a518fd9a89a0cfa18f18179b55a089a13418679a2ba06fa1c917ba9aee9feda015186822482595259c162b28a328df290d29e12a41286c29f42a392d302765281e2b862fad254f27e72b4f30b3240d26562c3e30fe2190249d2c4e30621f4d22292dc42f851c5d1f0b2d382e7911011e592db82c8491321e212da92b0f9ba81ce62c8429d39ec213812ce9221fa48ea0292ba1a694a66da57b2999a95da7d2a6402812ab11a75da673271dad4da80ea88028bbacd1a80ca7f329cdaa4ba954a5ec2a58a9dea8f1a3572b8ca723a8e9a4142b16a851a89ba4542b0fa828a691a2e82a0ba629a5b2a17c2ae6a46da5e5a1d22a7aa438a603a6fe2982a447a718a9e12851a4aca80bacad2683a4bda982acc0222ba41faaefaca21d1da472aaf0ac262041a497a95cacc32015a395a82eab8d20f0a22aa858aa81204fa256a76da95620e6a1b9a6fda8f21f53a149a6d5a8c01ffea0d0a579a82b1f52a03da505a8611ef49fd6a422a7d11dc09f96a4c2a6841d729f69a450a63d1d439f3ba416a6061d1e9f09a4a8a5bc1cd59e8ea371a5611cc09e4da335a52f1c909eeea20ba5f21b259e9ea2aea4311bc09d65a277a4de1a1d9d2aa220a4451aa09ce5a1ada3ff194d9c90a12ba36819259c3ca1b8a225192e9cfaa06fa2aa180f9cbba03ea27c18e39b93a0f2a12d18869a20a0c9a1b417a09b58a0cda1a116372207214d222590d7282829bd2a232aca2809286b29492b892c03286a291d2c8a2ea8260b28492c45302e251726a02cb7302223a324ec2caa3067214823202d2430f81e2321072dec2ed017591f162de62d5c91011efb2c722c0f9b7c19cf2c6329cba0d89c902c9f2450a46ca2142c0aa12ca645a4d42aaca8aea65aa4822932abaca75aa54429b0ac98a8dda5db29e5acdda893a63a2a9dab00a958a6ec29c5a90fa998a69d2a6ea89aa8aca6f02a05a829a8d2a5472a9ba679a710a50c2a92a5faa61ba4d0294ea5a7a679a3802906a52ea7e0a7372976a411a894a9e12788a4fda8cfaa8826f7a47ca91dac35252da5eea963ac6f240ea5fba9c0ac6023e6a48aa95bac6522a0a3e7a8afabb1212da375a8a4aa1d21eca2f3a7f5a9b32088a21fa752a93620daa1b2a608a9d11f66a140a6b9a84c1fd1a0d2a544a8b71e8ca07fa5cea7431e29a018a556a7ce1d11a0dca4ffa6781dbe9f9da49aa6221d3f9f61a412a6d01cab9e15a4d2a56f1c409ebda38fa5281c189e79a360a5f01bd49d35a313a53f1b639de6a2e1a4dc1a219d96a299a48d1abb9c4ca23ca4fc19799c0da2f4a3c0195a9cc1a156a378196e9c8fa11aa35719819c89a111a361196a9c5da1c6a2ba18a79b08a168a26f18949ba5a0f3a105180c210c230624fd0dbb2305263a27762732276d27fc28b62be129da27fe28252ce52ced263828952c5e2fd425c227a82cb830bb246426272dfa30eb21bd24422db8302620b4223a2d3b30911a5f214b2d0e2f4091ae1f0b2d792dc99a751ccb2c0f2b90a06b93852cd52564a442a02c2c2e98b0a50ca4ac2b66a855a770a53f2b07ac20a881a6d22a08ad8ca813a7c72ab9ac04a92ba7a92a7aaa87a8e8a6292adba89ba887a6912a4da846a847a6bc2af1a706a834a6112ac9a628a87ba6a72950a60ca843a7f2288aa613a8f6a7942848a73ea88ba85e2817a876a861a9c427c8a5efa841ab8a264ba597a9f0ab89254aa5d8a97aacb224c4a461a98caca02329a51ea98eacba2260a411a937ac1f2284a391a85fab8921aba253a8c2aa9e215fa2eda740aa05210ba237a7afa95620b3a184a6daa8bd1f49a1f4a55aa8fd1e0da1a3a515a8461eb0a05fa5caa7e81d63a028a569a79b1d24a0d5a409a7401d06a09ca47fa6be1c9a9f5ea425a6711c449f25a4c6a52b1cf59ed5a35ba5e01b5d9e4ba3eea4561baa9dd1a2a1a48d1a239d67a26aa4271ae09c15a231a4d819da9cf1a10da4b619659cc0a1eca386194b9c86a171a30f19179c63a108a3ef181b9c2ba1afa25218349beca06fa2e017599b9fa0daa10018781ed51e07203a1271251b2648270e2836288228002a5c2c262902284929472ccd2b1127a828c42cb02d88264d281e2d55302925e526462d05312622f0243b2d0731591e7322162dd93043175e201b2d4730699a2e1c2b2da22e45a04b990d2daa2c81a2769eec2c18294aa41ca1812c5d2193a5f5a22e2c07a8c0a66aa4d22b34ace7a76ea5802b67ad41a85ca6762ba5ac4da83ea6b72acca951a8dba6282aa4a8d0a883a6262a26a8d3a866a6ce2981a89ca8aaa64229eca7cca89fa70e2959a6b8a894a87928cda5b1a829a9192872a5c1a8a7a9dd270fa5bca8d0a93e27b8a426a9ccaa9d2638a566a95bab11269ea56fa915ac1c2559a41aa924ac422420a4e8a858abb423eaa3aba81aabec2200a493a842ab8222fea348a8dfaaef212aa391a715aa1c2153a20da7e0a9b320b8a1a5a69fa960205ba163a6f9a8e61ffba011a65ea8681fdda0c5a536a8b11eb0a0a7a510a8671e8ea068a5ada70e1e0da017a528a7921d8a9fd1a4e3a6371d759fa7a46ca6c81c499f79a428a6981ce99e4aa4d1a52c1c629e0ca475a5df1b159ea0a31aa5171bb89d34a3c4a4b21a149db3a261a43a1ab09c2ba21aa487196b9ce0a1c7a344192a9c89a166a30419459c69a12da3aa18439c55a154a39818199c08a1c6a2aa18ab1b071e3321c911402477254d26ec268d263c287c29342c0728e3273929852cc22843279a28eb2c7f2b63260628252d9d2ec224af26272db230ab2239251c2d55317e1ff722ef2c3c31011a2120fe2cb530329ab818eb2c882fbaa02c9cd82c952d7aa3c7a0d62c4d2a10a56ea39d2c8221fea531a4552c4ca737a716a50d2c98ab61a774a54d2bd1acffa7aea5042b0dac73a878a6dd2a95a961a89aa7ff299da8a1a803a8322aeaa79ba832a8ac2980a7d9a870a85d2914a719a9c6a8f92840a712a945a97a28c3a58aa84fa9682744a577a846a986264ea59ea8e6a9752636a522a921ab472609a54ca9d1aba22504a575a995ab5225c1a459a9efaba2249aa420a9bdab062441a4b7a872abfe223aa4b7a83aab7522e5a39aa8e0aa2322dba21fa80caa6d2122a26aa75ea99220e2a1f9a611a93f2081a16ca6eba8b91f3ea12aa6c0a83d1f07a1f3a58fa8e71eb5a09fa530a8711e35a044a5b1a7a81de89ffda42da74c1d6c9fc9a4bda6f91c279f94a468a6801cf69e66a424a6471cbc9e2ca4d5a50f1c799ef3a37aa5641b249ea7a340a50a1bc69d40a3f9a45c1a459dd1a29ea4ea19cd9c69a25ca44a19739c0aa23aa4fc18669cdea125a4d818839cb6a10fa47918219c94a1e3a3d7186d9c41a11ca31e18cf158d1cc01dcb0e6622ab25ef263927c9277f28222a4b2c94260f28c329532c1626dc274d29232d8b2862262728b92c512c80245926e02c792fbc220125292d4331a91e1a232f2da1311111281f582d31317c9d4412fd2c3530daa1ae9de32c5c2e39a44ba2cf2c1f2ccea5d2a4962c5226d8a6c9a56b2c33a505a8afa6232cf4ab4aa819a8e02b90ad94a835a8322b4eab8aa858a8922a96a88ea887a8f72912a8dca89ba83a2a31a7bca8c3a8a4292ea7b9a8fda83a296da796a839a9b5286ca65da846a90a28c4a56ea88ca96e2720a6baa822aa032736a60da96caa0a27bba561a9f3aa89261ba528a965ab9125b9a40ea9efab042566a409a94eab852494a40da9aaab2d244fa4f6a8f7abda2380a4e8a8c6ab462366a47ea8caaa2622a0a311a818aa7f21d3a2cea70caa232124a244a7e0a9a9208fa1c8a657a93e2030a14ea6b9a87e1feda01aa673a8131feaa0faa550a8c61ebaa0aba50fa8171e80a06ea5c1a7b41d2da01fa55ba7521d10a0dea4f5a6001ddc9fa6a4a0a6b91c669f63a42da6391c0a9f39a4b8a5051cd99e05a458a5511b609e76a3f7a4cb1ae29deaa2a4a44b1aa59d97a26ba4ef19ac9d4aa236a46619759d14a203a43819159dd2a164a3c118599c72a120a3fc172f9c36a1eaa2ff17e5174d1c7920b68c722224256827c926892558288429a42bb4253b28a829822c63252c273429b02c6d2512268128d02c9d28c024eb264a2ddf2c70220425672db5302a1e0823cc2cd23168174920352de231369cb618ec2c063116a17a9dc02c02308ea3eca1a52c7a2d38a582a4702c8928a9a6e3a5742c97a5fea727a7452c7eac36a81ea8c22b24ad40a807a8ad2ae4a82aa805a8e8297ca75aa871a893297fa796a88ca89729faa6e4a802a9442992a60aa970a9eb282ca7e2a896a98a2839a8f7a8a8a9172821a8dba8f3a96927b9a6bda823aabe26dfa5dea87daa43266ca517a943abfe2553a5f2a82fab57253aa4a5a823ab9b241ca4cca8cbaa602445a4bba8ffaaf223c0a361a8afaaef22c6a333a884aa502271a32ca8afaa192205a3daa790aa73219fa274a7fba9092184a243a769a9c72046a208a732a9832014a2d0a6f8a81920b3a18aa6c1a8ad1f76a148a691a87e1f14a1efa55aa8a61ed8a0ada525a8371e7ea04aa5caa7bb1d26a0fda450a7581da79fb3a4d8a6c61c4e9f7aa471a64f1c2d9f3ba40da6081cca9ec4a395a5111b359e0ea318a56c1aea9d84a2baa4ee19999d61a290a47a19b69d5ba24fa466196b9d3ba217a44c192b9d0aa2bea3e218cb9cf8a1cba3c6187a9ca3a1fea33c18ce18351df91f21957b2292255327fc26f2257a28c529552c592510281a29632cd2247227f228b32c222536264e28db2c96258d24b926112dbe29802193242c2d3f2e021cba21fa2c5f31ce905220242d6432599dfb18042d0b322aa1029cf92ca8300ca41ba1c22c652e76a57ea48a2ca62acaa667a56a2ccc9f7aa735a6112c62ac6aa824a7142c38ad89a806a86a2b68a821a80ea8ec290aa7a2a8b6a8de2968a8d4a8eaa8d52935a805a95ea9622930a73ea99da9022988a641a949aaad28fea559a93baa5028e1a525a968aabf278fa502a9d8aa0a2751a534a91aabd62687a526a99eaa7326b8a59ea8a5aa3d255ea46fa8b5aa78247aa372a8e1aa1f24b4a36ca80daba92348a334a894aab322f0a338a87aaa882202a43fa85caa2422b3a3fba7eba965214ea3cca7eea92121d1a2a5a7d8a9e52044a25fa7b9a98b200ba206a776a90d2058a191a6e0a8641f01a11fa67aa8bb1eb5a0c9a542a8f31d89a0a2a506a89a1d4fa06ca5c7a7471d07a01fa54ca7ee1c959fdaa4f4a6761c309fa6a4aea63b1c0e9f79a470a6071ce59e28a41ca67d1b479fa8a3aba5e51a599f45a34ea57a1a2f9ef6a2e7a4ea19859daaa2a0a46319839d4da258a41819719de2a1c9a38f18bc9c51a1f6a23518989cfaa0b0a20617751a771de61f3e94c82060250227b727d5242c287f29f72bc0252328b129872c48256d272529eb2c9024e2255028ce2c772463249326452d182583219424552da529181c8a20392dd32f8b9bf41cae2c5132d39dca18672cca325ca1c09b012daa3110a49fa1a02c13307ea513a57e2c342ca2a6aea63d2c739911a834a71b2ce3ac1da875a7b82bf5ac7fa853a81f2bdda60da822a8a7299aa6b0a884a8e82913a7dda8cfa89629b7a6e0a85da91b292ba6d7a878a99f28c1a5c3a89ca93d28bfa5aaa895a9b02747a5a7a86aaa4d27cba4a7a830aacf2669a5d4a8d5a999267ca5c4a883aa1526bba5bca894aa6025c4a47fa8d7aac52421a446a8e5aa18249ca47fa866aa0624e2a35fa86daa4c2313a4eba722aa2a222da3a3a7aea98c2128a374a79ca9412115a373a789a9092102a359a753a9d520aaa235a750a98e204da20da716a94b2099a1b0a6cca8f21f1da15ea684a8621f95a018a64ba8d31e74a0b7a506a8541e5ba076a5c7a7ea1d45a044a57ca7941d19a00fa52ba7081dcf9fcea4d5a6ba1c599f83a482a6411c889e2aa40ea6d91bd19d95a360a5d41a2e9db4a29da40a1ad39ce9a158a42119959c99a13fa49f18619cbaa144a4ba18b89cdda14aa48b182f9cf2a13da4ce18ca9c68a196a39818471c3f1c7d207d957e214225b12665276e2570289a294b2c00257728e629c12cf32417274d29ce2c6f2451255628d52c50234624dd26232dd721ef21cc241f2d47255b1e3022f32ccf2b0f9a461d1c2d463167a04d92e12c123316a358a0f82c793295a40ba4c42ceb30f0a556a5872c8b2dcca6a1a64d2ce3994ba819a8692c73ad5ca81da8ca2b14ac4da822a86b2a5ea520a862a87c297aa6f0a8d4a8f029fea5c8a80aa9402990a596a8fda8cf28a1a572a8eba8572805a677a8fca80e2824a551a856a9462777a462a8e0a9d62638a455a8c6a96e26c1a46da85baaef25e3a49da8d9aad22509a568a820aa30253aa444a867aac62429a3e8a76aaa21242ea467a87baa1224e0a345a835aaa323b1a347a846aa232335a3f4a7cea9312256a376a787a9a32110a34da75ea94821bca2fda629a9eb206fa2eea61ca97f2058a2d8a610a94620fda1d1a6e4a81920dca1aba6bba8bc1f56a134a66da8071f30a1cfa52fa86e1edda073a500a8e71da7a02ba598a77a1d89a0eda43ca7f31c4fa0b2a4e2a6ac1ce19f80a46ba63e1c7d9f50a412a6061c089fe8a3a3a5601bae9e49a33fa5cb1a949ed3a2efa4141a3a9e9ea2ada49119e49d93a2a4a443196f9d3da267a4fd18c29ce1a14aa44418e49c80a1aca37e183d12dc1b2b1fb3927a1f3f248c25ac261a254528c229202c6724fc275429322c0824e626b428632c6823fd251c288e2cf6212f247126d42c281f16204723cd2c5c200117561eff2c14257b9988118e2c8a2d48a0d29a9a2c2433f3a1719d7f2ca03366a41ba2bd2c11327ea579a4672c302fdca6e5a56a2c952360a715a7d92b92ad22a83fa8492be8aa2ca856a8592a5ba5fca772a845292ba6ada8c7a8812990a6a9a8f7a8ff28f7a5cba83fa9e828dca5dba85ba9872883a59ba85fa90028dea467a87fa91927cfa47ea8f3a9e72698a47da817aa632656a43aa891aad625baa473a853aa9d255da46ea86aaa0d2561a464a8b6aaaa24a9a461a867aa4424a3a463a837aaf32315a4f3a79ea9f622c9a3f1a7a8a97b226aa3e9a7eaa9412276a3a8a7cda9bb2117a352a779a98821d0a235a745a90321b2a245a754a9c82099a242a756a9972040a232a741a96120caa1eca606a9102049a18da6b6a86c1fc3a006a645a8981e5ba097a5eba7fd1d48a045a564a75b1d39a0f3a40ba7fa1c2ca0a8a4aaa6a21cd69f5da441a64b1c799f21a4e9a5b41bbf9ea3a3a5a51f1bfd9d39a36ca5bc1a769d0aa37aa5351a519dbea228a5bb195f9d7da2aea48319469d04a24fa42a19fc9c76a10ba48e186e9ceca078a31b18dc15511c141f4084b220bc24de25da2623244c28ab29fa2b312414283f292b2cb4239e26a9284d2c2f23252578276d2c4c220f2322259b2c0721e61e06239c2cf01cad16bc20c32cfe1b5e9e9491d02ca724e7a0ef9c3a2cee2fc3a1799f522b01340ca409a3152cbb333fa538a55d2c8b3072a621a6262c33241aa816a8232c11aecfa72da8e12af5a89ba70fa89f29d7a421a887a87329daa585a818a96f2977a669a8f0a8d628b9a673a813a98e28f4a579a835a944284aa570a83fa9ad2705a55da81da90027b4a432a852a968264da411a8fba9db2559a430a8c4a9bb256ba403a8dea936257ba426a8a3a9032576a4d6a76ba9672419a4c1a720a9f9232ea4bba754a9622324a484a758a9c922f9a381a748a94922a0a376a744a9cc2170a377a755a99d217aa371a74aa96c215fa375a761a931211ea384a775a9df20c0a27ea76da98b203ba23ba722a92c20bfa1d2a6d7a8ad1f56a17da698a80d1f0da136a64ba83e1ea4a0cba513a8b31d65a079a5a6a7441d1fa017a552a7d91cf19fbfa4e6a6861c5d9f6fa472a62d1ce89e2da4ffa5cb1b6c9ed8a387a5fe1ae79d62a308a5e21a7a9de8a2b4a4281a2f9d72a267a4be195b9d18a226a46e19759edaa1e2a3ec18229e89a1b6a385189f9ff0a069a2d4157b18351b581d5a0416249b28122a7f29c9236a28ec2a642b2a24c727dd29812be022a326b728132c772231250228462c24218d22a7255b2c301fc21cd521652c4219639933187a2c568b21a01a9e822ce11232a3df9f4c2c122736a4e1a20d2c0d3270a44aa4602b46341ea524a58e2b333291a649a6162cc6282ba8d7a7102c2dae89a718a8f329a2a6eea62ba8cb282ca461a7e1a7e72821a536a89ca8f5284ca537a8c4a885285da54da800a94d2849a569a806a935284da566a81ea9cf270fa536a838a91927d8a411a85ba97d2647a4a3a7e2a8a02573a405a7e0a8dc2461a3f5a6d7a8aa24c8a32da72ea94e2417a4c2a777a93a2427a495a774a9ce230aa46fa739a939238da347a72da9cb221ca30fa712a93322c7a2fca61da9ea219ca2fca61fa9b5218aa213a729a97f2187a20aa730a9fd206ba204a711a9ae2072a21da725a95b2052a2ffa60da90320ffa1cda6d9a8a81f5ca15ca699a8e91edba015a650a8631eaca0cea528a8f61d80a087a5bda78f1d7ba027a53ca7201d73a0caa4bba6c41c37a071a42ca6301ccd9f1da4b6a5c11b259fa6a347a5351b5e9e10a3daa4a81ac19d93a275a4eb19909d2da235a44e19819df4a112a46b19819dc6a1c8a31119a39d93a166a3a618e99c2fa126a3311800800891f7925912662434287629f5291b24c128042a712b8524c8278d29802b89226e265d28d32b032154242626fa2b781f552082230b2c2c1c2316f11d0f2c4217989c4691fa2be0915f9e949ca92bc79622a2f0a02b2c088daca475a25b2c9e2874a4b0a4482b1933aea478a5962a623378a685a6182ce22b27a846a8f42b31aec2a786a8622a73a5dba69aa8eb28f7a3a2a64aa851288aa4bda748a8b228d0a40ba884a858280ea531a8cea81828dba42ea8e1a8c9276aa403a8b8a81a2749a4c3a7a5a883264da4a2a7a0a80e2665a445a7d5a88f255fa43ba7aea83c25a0a3f6a6aaa8c52464a342a7e4a87324eea25aa709a92b24cea224a7f2a85c23cfa215a7efa80223b8a2e4a6b5a86a22aaa2baa6a7a8e02180a297a6b6a866214ca27ea6a3a838210da285a6b4a8d120f2a19ca6e7a8c72050a20ba7f5a88e20faa227a70ba9712067a23da72fa92620cda127a740a9062031a1d1a60ba9531fb8a071a6b8a8b11e9ba0f8a542a8111e64a065a59fa76c1d53a003a51da7fd1c51a0a7a4aaa6a11c15a068a45fa6561c919f1aa4f0a50a1c799e7ca373a50e1bbb9dd2a2dba4c91a239d4da251a4111aaa9cd6a1daa36d19689c8da16aa338197c9c5fa11ca3a118129c27a103a33618f79bd8a07ca2511800807d953998961274231e28a92988296323e8283a2ab42a9c223d28f829f42a9c22d226c228412b5e219c243b26b42b501ef61eda21d52b1d1938960d18b62b5d0b859efe97b62ba294b1a0359fb72bda9b1ca28da1c32bfc9c3ea4c3a2042c6597d6a4d1a3602bb129afa483a45f2a913078a6f7a52b2ba42b7aa76fa7042b3aacdca6cfa6fd2922a449a601a88d28e3a304a703a87828c0a3aaa733a8542815a4e2a779a80a282aa4cda77da86c273aa4aea78ca8982609a44da771a81226d4a320a76da8c125bca324a783a84b25f8a3dfa661a80d2505a47ba619a8b92480a342a65aa8672487a3afa6a7a8612415a416a7fea84824e2a3f7a63ca9f0236ca385a6baa8de22baa2e0a53ba8f12154a2b7a519a802211fa2a7a50ba87220c3a192a508a86220c4a1ffa530a85420fba195a697a863202aa228a7f9a86520f1a152a726a9772095a135a743a95f203da1eca61ba91c20fda0a5a6c9a8bf1feea025a66da81f1fb1a0ada533a8431e93a05fa5eba7cd1d2fa0e1a44fa70f1dfb9f8ca4aba6ab1c409f28a417a6171c919ea3a380a5841b279e06a3eba4b11a9b9d56a25ca41a1a4e9de2a10ca478197d9da0a1ada30b19869d7da16aa3f918a79d43a1e9a296189d9cbca06fa27d18bc9c35a0a7a1bc160080a194bf94e21219229d273c29ee2889236b287629d12958236a283e2a612a5e225b27a229e72ad820e2233326dd2aad1c8316e61cda2a8616a69edf9db62a168b92a0fa9fac2a3b96cba073a0cb2aad9918a1efa0cf2a769c4aa2b1a12a2bdc9edda3f0a3162bc6a0f8a43aa4172bc395f9a5b1a5c42a8ba029a8faa7ee2a06a618a606a85f28a6a218a732a749285ba398a712a82c28f5a3a0a74ba8ce270da481a763a8542727a4a1a76aa8ed2611a480a766a87726e4a33aa781a8e6258da3e9a64fa8492561a35ba6c2a7e8243ca3f8a563a78924a9a3e0a57fa74424a9a2f3a527a85d2448a2fea6f0a8492409a387a750a9162404a302a7f3a8572364a354a642a844220ea238a559a768218da1aca4caa61c2157a192a4c6a6421e36a1baa4f0a6501f54a144a56aa73020bea135a65aa864208ea25da72da9942091a3eba788a9ac20aea2e2a74ba9762041a186a68fa8421fc4a008a64aa8681e9ba0cba520a8051e80a059a59ea76f1d38a0dfa408a7e51cd89f80a47ea6871c7d9f3fa41ca6391c3a9f0fa4d2a5091ca09ea8a372a54a1b229e03a3c9a4c01a939d44a238a4181a019de2a10ea4ca19ce9c98a1a4a39019869c43a121a34a196d9c01a19da2dc183b9cb7a05fa2e718e99b90a013a27c1800801c945f95e014a5213e262929e0281c238528e029b5295e23cc285c2a8829bd2341280c2aca29d61ebe1fc2214929c716c1a02c9d3f29fd8aa7a131a0342ab98aa7a0789e5f2a1e9486a0469e692ab198faa0709fa72a7b9b6aa1dca0a92ad59c4ba267a1912ac69e44a39aa2122a27a075a419a4a629bca1bca5bea54329a5a33da6cea66c2893a2e4a60ba846286da39da70ca82f286fa347a72aa8742772a36aa740a8e4269fa324a70ea85226c0a3bfa6dea7a92563a3bba6f8a73825f8a28aa6e5a7e324dba211a65da76b24b9a263a585a606248ba2e7a4f5a5e0231ca25ea5fda67d246ea294a708a9ea24d5a240a700a9362434a3e0a6eea8f32316a25ca6a3a80423eca0b5a431a77721cba11fa4cfa52e2061a1ada25aa58c1ee2a0cfa253a5f31e30a1cca394a5851e5ca16ea5a8a71720baa15ca719a960204ea22ca8caa98d209ca22ba8c8a958207ba285a744a90a20b7a16ca699a8081fd5a089a5c5a73d1e3fa0dfa4c8a66e1d00a082a409a6c61c819f44a4bda5781c3f9ffea383a5041cef9e8ea339a5981b829e37a3fea4f21a059edea2c8a49c1a869d78a28aa44b1a3d9dffa140a4e519e39c85a1e6a33f19909c11a190a3ec187a9cb0a01fa37218e09b27a008a32118e49b61a0a8a2f1150080378c1886e314132126250a27a32701221e260f28562846226d28c72910299224fb2a8e2c7a2ac5956ba41aa550286d9786a79ba8fa265609ada092a171283309329d069db8285992f59d109c37290e96049e249c87294599389eba9ace29699aa09e2d99fe294e9c26a01f9d472ac99e2ba392a3f42917a1b4a551a6ae281ba3eca653a7432809a40aa7d8a7932729a3eda67aa74227b1a2c0a687a7e9267aa28aa662a73d267da26ea66ca7ff257ca282a6d5a787257fa29da606a84025b7a28ea6efa7cc2466a21aa682a71724e9a132a54aa6b122eaa1f0a3dea4e92194a2b4a3a4a44a230fa47fa8faa9d22533a325a88da9502426a2d2a5d3a79c2299a254a50ea7e621cfa14ca4fda58d20e8a0c9a2e6a4471e70a033a02da4b81b92a0f99db8a3441c5a9f26a0e2a3501c6ea02ba51da71e1f14a362a8e0a90d2244a4d4a88caaee210ba361a807aa142111a241a70aa90420b9a0d3a538a84f1e6fa001a543a75c1d7fa0eaa421a7351d33a0a4a4f0a6eb1cac9f40a444a6451c069ffea396a5041c4e9e89a31fa5401bc59d20a3d9a4a01a3d9d86a25da4221acd9c93a1d1a34c19499c12a157a3a5183b9cdba02ea38d182a9cbaa0fba27b18299ca9a0a6a23418319c85a08fa25618a89a29a09ba20a181f8a6c9589944e19861e432149242b243720d023262570275a1daa20b823ef25851d62212d226328c920912505284c2a7719911dc6200829e018b41ad01e5a2824166217321d62286411610ca01a7c287988bf929d1788286a943398c614b028679793986e18f12844984e980f1cc2292a9eb9a1dd9f3f29f4a1cfa644a7c427b3a121a685a6222780a188a519a6272783a182a556a69f2680a1a0a588a67026e0a1e3a5b7a6262621a201a61da7e02560a227a650a784257da239a681a71d259ea222a6bda7d3247fa21da6d5a79a2433a30aa604a733242fa122a630a7be231f9f37a5bea6a8225d9ac79f0ca2241e559fafa20da5751f07a1eea4cfa6f920cba081a43fa6e02021a00aa4bba55320999ff0a2d7a4db1e1ca0b0a195a34a1ccfa0980bde99bf14c898b020b520809706a123a5bda6831d20a594aa57ac6e2384a2cfa867aa1a22a7a14ca7f0a889208fa1d6a5e9a7d51e58a101a5eea6dd1d10a19da44fa6671d30a004a466a5861cac9f8ea320a5421c359f43a315a5dd1bfb9e0ca3f8a4a21ba69ea6a2cca4481b449e38a283a4881a169eb8a127a4021ac99d5da1e3a3b219809d21a18fa34719149df1a033a3db18879c9ba0d8a29418549c73a05ca24518ed9b1ca04aa2c517719a21a0b5a2891700808b8460838b041b1c032041216222a71ea622d9241a261d1d6c2061220c25f715c7193a1c611e0b1af11d3f20c6231e1d661fb52275278f1ab71acd201a28e0173e12411d32286c0f55950d174d2867940c9b49943c284d99b39df99b2c28a09bd39fc99e0328919c3aa1b3a0b226d69ceaa1fca17925bf9d68a377a32c260f9f09a4e7a3ad26a39f2aa44fa4592632a06ea4b8a40426baa0bca44da5e72530a1e1a492a5602574a14ea515a64e2586a153a536a6f724b1a15ba569a6aa24e3a169a589a668240da27aa5b5a62d2415a274a5e0a6cb23f2a119a583a6d422b0a0c3a32ba5cb200c9e98a130a46f1e509edca145a48f1ec29f8da2aea4331f1fa0e8a2f4a4161f1ba02ea32ea51e1fbf9f92a3a3a5431f5ea0bca3baa5ea1ece9ce4a0eca3951c4a863a2318250d9790a06da4c1a5351d81a523ac28adcd24219f10a562a7e91ee4a083a4e2a6e01d3fa029a4eaa55a1d6c9feba395a5e81c8e9f76a34ca5731c109f23a314a5351cee9ee0a2f2a40e1c9e9e8da2b7a46c1b669e47a288a41d1bdf9dd2a13ea4981a5c9d73a1d4a3ec19ac9c11a14fa34519929cd6a001a31819459cada09fa2ec18209c92a073a2d018109c63a044a2ac18fe9b4ba026a25e18499b14a02aa258184c9b459f22a12b160000b380af03b407f51e04226024bd24991df8210024a625a71a671e7c20d5230b194d1c1d1efc1ee91e3b2003231a25ed1c052037231027bd19a71c6e208727fc16f816f21ca727d713038ca618b627f98e95990494cd275a97cf9d549ca427549a66a030a059279a9c13a15da14226dc99519e9d9ef322269c849fc39ff4238e9e89a1aca10725289f26a2f5a2dd2407a0c7a289a3b92459a060a31ba49124b0a0e9a391a47f24fea044a4e3a460244aa168a42ba54d2486a1a7a493a52124cfa1e2a418a60f24aca10ba546a6b1236ea118a552a6242307a1eaa44fa6a422c6a0c5a43ca6f3218ea07ea4c3a5452142a013a464a58320ee9f9aa35aa51520819f6ca36aa5ba1f4e9f6da380a55e1f7b9f39a389a5ee1ec39f5ba3a5a59a1ef29fa8a222a5ee1d819dd8a0baa20b1ce38e7d936695c30de894ca98719b5a0b709ee1a11ba49f1b599fb0a28fa4b01c349f55a279a4471c889effa17aa4b21b2b9ed6a158a41b1b149ed2a147a4001be29db9a128a4851a969da4a11ca45a1a3a9d88a1eaa3f619019d6fa1b2a3ca19be9c31a14fa38719909ce2a0aaa2f818719c8fa020a2a3184e9c48a0d4a15c183e9c18a0a2a10518529cfc9f78a17517559cd29f40a1ee16cc9b9e9f38a1c016739b159fb6a0b316000044153d185505e71db521472376247a1c422094219824501afb1d372036236d1ab71d34207e220f1c931f2e21f424cd1b831e72215a2661198f1b002081260e170a18b31d9026d2124d0bcd1a8f26348848980f0dd626ab97a39cad99e426c89a4a9f099e86262d9be89f869f8625799a6c9fbd9f88240c9c49a079a0cf24199d21a17aa11425ee9da3a13aa2d624889e48a2f5a286242c9faca292a34a248a9f01a309a4212404a09da360a4032449a009a4dfa4ac237ba038a430a577238fa04aa45ea5132392a066a4b1a5c2228ea06da4baa58822a2a099a4cea51a22c0a0a1a4f8a5a72180a085a4e6a53d2136a03ea491a5b220b29f04a456a53e204c9f97a32da5c71fd59e50a31da55f1fbd9e04a30ba5d91eb59eeba218a56e1e959eeaa21ca5041e339f20a3efa4c31dc49df2a1efa3431c4499ed9ef1a0ce1817990d9e4aa11918f09c929f2aa36918fe9cc6a0aba38e19669d4fa115a4541aa29d5fa12fa4991ae79d4ea118a45a1aff9d3fa1d7a3341ae89d1da1bca3f919da9dfba09da39219859de8a090a32e191b9ddda076a31219b59cd1a05da3bb18519c9da00ea38718c69b4ca09ca23918519b15a041a2a017e99aae9f00a2e316eb9aa59fd9a16816079a4a9fffa1c3152a9a5b9ff4a1931745202c232a241f210c292529df2a9d2a7b29f325ab261129d42a57249825d4289a2c6023da245f299a2db921e9223f293c2e4e202a222f28662eed94ab1c6429312d49a000a0aa2c7e2c32a272a1e52d862af4a26fa2e12dfd28fda0c5a05e2c84269da42ba45c2dc79df4a928abe32a99a3efa8f0a9392a1ea6faa6fda7842951a968a569a59127e4a91aa622a5fe241aaa01a978a6012039a991aba9a8912b80a790ab92a8452da8a467a88ea57629e5a304a6eca5c726b0a3fca453a34a27d6a590a4229db02af4a5c7a23a183c2c5ba5caa909abdc1626a73bac45ad49a865a409a99caa919c94a2baa6b1a8221bb7a249a8c6aaac1d5ea339a7c8a8402087a016a50fa8a51f72a0fea43ca7ca1f9ca0e7a425a75f1f51a0d2a418a76a1f8ba0a1a4e9a6061f44a070a48ea6a41e1ca04ea443a6201e709f18a406a6881d199feda3c3a5491dac9eb1a392a5dd1c479e88a34ea5a41c0f9e34a332a5351c0a9eefa2e9a4001ce79db1a2c4a44d1ba79d65a2a2a4e51a699d1ca281a44b1a349d02a256a41d1af29cf0a143a4b119bb9cc8a120a47b19709c76a143a32e190a9c18a170a2d418e99b05a171a27918ef9bfba06aa27018ee9beea070a29f18ba9bafa030a23918dc9a5fa0e3a11317e19b5aa058a173177923b326032827212327c729792cd9282e294e274d2a9d273d2cc825f2270827292e0525c6251827712f67247c251d28de2f0723a125db28872f0d205c23a32a642e6f99ac94952c0d2dc0a21ca2ae2d1a2c24a3b3a1ef2d2f2bfb9d4c949c2d07277c9ea114752cdb9dd7a995aa662923a6a3a9a4a9e6283fa812a711a7322820a9a0a209a0532393ab5da02a14f01b25ab1ca5c0a45a21ccaa0ca988a8b02a28a8b3a9f6a8a62c92a654a93fa9232cb5a52ea824a8b42b53a49ea50ea3f82b21a316a0a094812c67a2b1a2bea03f2b90a4b5a823ab482592a521abdfac8ca051a540ab2aad2ba451a4baa92aac1fa161a56eaa96ac879be4a3e2a96aacb21bb6a2aaa809abb91d78a2fea78caa701f1fa35aa796a92920d9a273a6cea8f31f85a1b6a571a8211f56a05ea51da8b41e22a001a597a73f1e7f9fc6a4fba6e31db69f77a482a6481de59f4ba4f2a5031db29f1ca46ba5be1c829fd6a339a5771c649f62a3fca4351cf79e13a3cda4f61b6d9ef1a2a5a44e1bc39d99a27ea4dd1a969d55a25ca44b1a519d32a231a4171af59c01a219a4a019ac9cc7a1cca35b19339c56a149a300199a9bf5a0dba2a518809bc3a064a24c183b9ba3a001a23b18519b75a0c1a14d17bb9a45a0a1a1ab16bb9a16a001a18a179f22db25cf26ae212328f428192a8229cd29fa2729293a2a132cc327d228c62aab2dc42619282d2bd72f2425cd26362b3f308b230b252d2cfb2f21213323fb2c672fa11b3e20012d602ed7980814992d222d9c9d0794902d712b94a00c9a772d1d29cfa3c3a1c72cd41d05a8e1a6bf2b2aa6c7a890a8162ad4a83ba816a8f328d2aa50a7dda6ab2707ac48a717a6a8270dabdba6ada55b28c1a934a846a5a2293ea97aa8c1a4482b2ea880a8cca7082c75a871a8eaa6112c4aa89ba72fa75a2b06a6c6a630a7092b58a50fa825a80b2abda5c0a805aa682827a59fa9eaabb42525a538aa96ac7f2360a44eaaceac9b1d82a470aadaacdd1958a469aa26adea1f63a4a7a93fac6820fca3a3a8e2aa512038a313a80eaafe1f36a22ca74da9c21fa2a19ea6eaa8281f2ca13ba6c0a80e1f0ea1e9a569a89b1e84a05ea50fa8001e4ba002a569a7871d1ba0c8a4efa6371db69f95a47fa6f01c5b9f59a422a6b01c399f26a4c2a56b1c019fc0a37aa5201c159f7ea33aa5891bdd9e32a313a5271b5a9ed0a2b1a4b21ae19d8aa27ba4211a569d4ca22ca4d519d09cf2a1d3a33d198e9c9fa140a3f5189c9c5ea1f1a2bb18a69c16a19ba24d18689cd3a052a221183c9ca8a0eea189170b9b39a0cda10017369c81a09fa1cb16f11028160318f20b5227fa28ab2a6e2a5028ed28ee29152c2b2a5b28162a522c4d2c4d2787285c2c382e9c25f6279b2c17304524bf25ff2c45300c222424342df72f541eec20242dec2ed911971c582da02d659b7813392d402ce3a0c69c072d9929bda41ea4b12c4f25eba612a6292ccca012a893a67b2b1aa82fa8d5a6242afdaa5aa8c7a6992937acb8a8eaa69c2931acc3a816a8cd2943aaa6a8e5a6772929a986a81ea7012a6aa84aa8b8a6e02a05a82aa8dda7d62a7ca7c8a7c3a7972a16a700a8b7a71f2aaca65ba891a84e29e5a5cca8cea97e288fa528a91bab772661a5e2a924acef243da525aa6cac2c2404a56baaf3ac3023dea455aa16ad332280a4a7a95bac8b2109a41ba972ab5521c2a38ea891aab3203aa3f6a7d0a91b2074a232a73ca9551fc9a1bfa6f8a8351f5ea15ea6b0a8b81ed6a0e6a55aa8391e9da092a5f6a7ce1d4ea03aa578a7621d2aa0efa40fa7141deb9fbda4a4a6c41cad9f8ba442a64f1c1d9f48a4f6a5351cd59e11a4b4a5e81b8b9ed3a383a52b1b169e60a342a5c21aa09d09a304a5601a319daaa2b9a4091acf9c50a263a47119809c07a208a43219669cc1a177a3f618789c9aa10da3d4186a9c73a1f9a28118599c4ba196a22318549bbba02ba2a817049b5fa0fda1c017f314be1936197b04b0256028f929a52ad52697280b2a2b2c5e28402857296b2c162b5c278928a72c572d6a262928f72ca22fda24a526652d7330f721fe24a92d4e30721ed221af2de12f0b12961ece2daf2e2f9d8313822d222dc0a0a6992a2de9294aa43ea1cd2c9524e5a5f3a43e2cfb9d47a755a6e62b11a804a81da76f2bf1aa5da8b7a7ef2a6caccda808a8b92a86abffa851a8862ac0a8bda82ba82f2a34a8a6a87ca7722ab5a78ca890a74d2a1da773a80fa8a7291fa7b7a897a85029b2a6d7a876a9b228bda6f6a8caa9672886a727a916aae527b9a772a930ab3827e3a5bfa98aacb0254ea5eda955ac8a2464a5f0a964ac88239fa4a3a932ac5e22fda460a920aca5219fa400a900ac3c21d9a38da804abd12017a362a865aaf720a1a208a80faa822025a251a780a9fb1f06a2a7a6cda82c1f8ba10da64fa83b1e52a1b9a51da8d31de5a075a5dba73b1d70a03aa58ea7f51c25a0f7a431a7a71ce99fbfa4aba6661ca49f80a451a6201c5c9f44a4e3a5d21bf49efba371a5501b659e7fa305a5761add9de4a2afa4011a489d93a277a4aa19ea9c34a23ea45919c79cfda116a429195c9cc4a1d0a3f8184e9c9aa17ea39418079c73a132a33718149c44a1e1a2c4173d9b02a198a20417469baaa0e3a1541603132816c016760bc9274e287f29f72a0828d228292aa72c3c2844289329c62c62291828fe282d2d9a2b51279028a62d572e0b256026a72d0630d6215a24e12d90308a1aca206f2d8530de9a73198a2dab2f84a06d996e2d092e46a313a1272d152c70a400a3ed2cd827bca561a48f2c3298d2a643a5542c6da8e1a71fa6cc2becab3ca8c8a6462b58ac81a86fa7092b85aaada86ea7842ae3a893a83ea8e229cfa8eda827a8fc2953a8cea832a8602942a8dea87ca801293da8eca8f9a8ca28d3a636a923aa4328cba545a963aaae279aa538a9a3aa3e2754a55ca949ab7b26faa492a90bacd82507a5cea949ac55253ea5d2a953aca324a6a472a937acd12372a41ca9edabe9220ea4d4a8a1ab2d2211a4aca865abbd2127a458a8b9aa34218ca3c6a7faa99820cea237a7d0a9362017a2d8a694a9e51fada171a60ca9571f2ca121a675a8e61eefa0eaa53ea8391ea2a0b7a522a8f21d69a086a5d3a79e1d15a034a566a73b1db99feaa402a7ab1c819fb7a494a66f1c359f8aa425a6061c0a9f4da4cca5a01b8b9e0ca46ea5d21a569ed0a326a5841ad59d69a3dea4dd193d9dcea26fa47219d79c59a22da41419be9c01a2d6a38b18849cafa166a359188a9c8da11ea301187a9c62a132a31e18289c0da1b5a267180000f60c84157b844222a524c025ef263127a228a8297a2c18282e284b29ba2ce027da27c7283f2dee280a275928ab2d6a2c16250527dd2dfa2e8d214c25c12d8030681c8122642dc73062916b1c982d4330a19f5f9c812de42ef3a3c1a2512df72c1da56aa4292da92957a650a5ac2c6d2157a7c9a59c2c0ea7f0a795a6dc2ba3ab21a816a73f2beaab96a8cba7ea2a05a9a5a828a8132a1da8c3a886a8ba2919a8e5a8b5a8bf291ca80fa9e4a85629b8a727a934a9042995a741a9a7a9b92870a75ea924aa34285da742a903aa9e27dfa641a9b3aa0b2744a673a97aab4626c1a5bba90cace425f8a4a4a926ac0125f3a4b4a926ac9e2419a57aa90aac1924cfa404a969abc9226aa4c8a819ab33226ca4c1a813abff2117a4ada8d8aa802134a32fa8eea9cb20b7a2a2a764a9212036a24fa73ca90920dba1afa604a9f81e96a153a6e5a8831e2fa112a6aba8781eeea0cba559a8061e7ca063a5f8a74b1d31a026a570a7f21cb09fe4a4f8a6a61c6f9fb1a497a6351c1c9f7ea448a6f71bf59e55a4f2a53b1ba69e26a4a4a5ec1a649ef5a355a53b1a219e8aa311a5e819739df0a2baa46f19de9c7ea26ba4c2187a9c21a24aa47e18759c02a23aa45c187e9ce3a12ea407185d9ccaa11ea42818bf9c93a130a3c4170000980b1d133983dd2360256827422884269f28572a972c04264528bb299f2c9f26032820293e2d73271b273628552d232900258d266b2d472ca3218c24d82d5c2fa71a48219d2dc730f79a3419ca2dbc3045a14a9ec12dd72f62a4baa3912d162ebaa5a5a5562db52b39a7dea6d42c3e2546a8ada7c02c22a56da838a8392caeabaea8bda8bf2bccabeda8bba8fc2a78a90ca93aa9782a88a800a91ea9452a02a825a961a9fe2972a73ca9a4a9822901a83ca9efa9fa28aaa7fba8e9a95e28b4a6fda83baa0c28cda512a9b6aa6827e5a55ba941abe1264ea6b0a97dabbc26c7a59fa9e2abe12588a575a905ac3825b2a568a900ac7c245da54ea9a0ab0724e7a42da999ab832391a423a9d0ab242394a4eea895ab642243a4a4a8a9aa89219aa344a81eaa052124a309a80caaa12095a281a7d9a93220ffa103a76da9a61f77a192a6c6a8151f22a13ea674a8471ee7a0f3a541a8ea1d8ea0b5a511a88b1d72a075a5baa73f1d2ca03ea56aa7ed1c19a003a508a7711ced9fd2a4a5a63a1c8b9f90a437a6eb1b389f68a4e4a5321bde9e23a481a5c21a559e98a31da5341af49df4a2b6a4ae19c89da1a27ba45c19d49d70a250a4e318b99d27a214a4ab183f9ddea177a336187e9c80a14ea35f177d9c78a122a365170000e90a24179b84f9232e24b525eb266a256628b929242c3d2658287529b12c6a256b278c29062dd8244626e028202d9326dc243327c22d8029c921be24002ec42dae1a6121ce2db830149b781cf92d37310aa1cc9c802d913040a40ca3652d4c2f9ba5a5a5232d042dd4a6cda6df2c01281ea809a8f32ccaa653a88ea8352c89acaea8eea8e72b07abdda8d0a8e52a28a7afa811a9df290aa70aa953a9de2974a724a959a98b29bda600a98ea9002987a640a9faa9a2281aa758a939aa44288da760a97baa952743a760a9f4aafc26a7a65fa917ab7c26afa53aa9ababac25fea452a9ddab4625d5a427a971abab2401a558a9c3ab6f24e4a453a98bab362498a4c5a836abec2227a492a8c4aa7122eda363a87baac52197a33da8b0aa7f2125a3fba787aa0921dea2a4a7f1a9b2209ca26aa75aa9402062a22ba729a9022032a2f0a6f7a8921fc0a1a0a6b9a80f1f6da150a689a8911e1ca108a657a8221ed7a0bba51fa8c31d71a07da5dba7291d3da02fa57aa7d21ce09fe5a4eea64b1c629f9aa49ba6fc1b329f47a426a60f1be79eeca3bea5781aae9e51a346a5fa190b9ebea2cfa47319f09da0a2a5a40719099ea1a275a4b618d39da2a242a49f18a99d74a212a432181e9d63a22aa452185b9d2ea203a4a8170000fd10ac151d8ef1212e25fe2640271d26dc28162a932cc6256a28d029c42c8425c727f828042d012551265828292dd724c524f926a82da126da202625c82d98292f11a420b62d3d2f1c9ebf12bb2d1e3161a1799e422d363178a432a3562d5230c0a54ba5232dd92d37a7eaa6c52c112a62a87fa7f12c5ea251a8c8a7202c1cac65a86fa8532bfdaaefa825a9052b95a7faa89ea9242ad1a780a9eca92d2a2ea875a9eea99629fba771a932aa132960a76ea969aab72818a798a9b3aa6b289fa6a1a921ab01286ba68ea90aab5e2754a667a94eab9c26fca54ba98bab09265fa50aa9d2aa5c250ba5d1a812abc624eda4b7a8ccaa212473a4e3a811abfa235ca4c0a839ab3723aaa37da8d4aa8522f2a382a8ceaa19225ea477a885aa9e211ba42aa809aa19218ba30fa8f6a99f202da3dfa7d7a95e20aba28fa7b1a9172040a22ba773a9911f98a1aba6e9a8de1e08a12ea677a8ee1dbda0e7a53fa8781d8ea0afa515a8e61c66a084a5d4a7a61c21a02ba562a74f1ccb9ff1a4f6a6141c659fb9a4a4a6b61b289f77a469a6eb1a289f3aa40ba67b1a549fffa3c8a5111a469f91a361a5be192b9e29a302a56119779dcda2a6a4d518249d73a256a489182d9d10a2efa31018de9cb1a16fa38c17df9ca4a19da320179a0adb176d19860eec20f624ab26402743257b28bc29652cb2257e28f829da2c9425ec2713291b2dc92408263028282d552421243726b22ddb23a3202324ae2dc02580178f1e962dd22a349f54129b2de02f8fa1749cb72c54312ba4fba1352d113198a520a5d62c322f19a751a79d2c142b5ba835a8d32cafa48fa865a8362c48ac69a85aa8592ba7a9c6a81ea9d92ac3a5b2a8d9a8f2294ca73ba935a9072ab5a627a927a9672975a616a98aa9da280fa615a9c6a9862802a612a92eaa172859a618a923aa9e27e7a6efa849aa0427ffa5d6a872aa5a26b2a5f1a87daa0c2632a6f2a8a5aa892522a6f6a8b3aaeb24e1a5aea8aeaa5324ffa49ba8c6aac323b3a4baa8deaab6234aa465a88caac8221aa406a821aac62160a3cca7b1a91f2185a3aca7b0a9e5206aa39aa7a8a9b8204da39da782a98a20fea28ea767a92320a5a246a72ca9c51ffca103a7e6a8391f60a19ea6a4a8a71ed3a043a65da8281e9da0eda522a8b21d82a0a5a5e7a74f1d69a06ba590a7fc1c31a026a532a7b01ce39fe2a4cda6311c5b9f9ea470a6d91b819e3da4f4a5da1adc9db2a34aa5381a189db0a28fa47619c69cfda139a4a418bc9ccca132a43418b49c04a24aa491183e9d4fa272a43018cb9b49a2bfa44018a69db3a172a3ff1779122616011a4e0d662236254d26ec269e25a228d3298a2c61258a280b2a0d2d2b25622782291f2d61247c2572283d2d862250231226602dc7206f2017235c2df522181ae31e722db225d29db1929e2d902c25a47da0832d943036a519a4042d513109a63aa6d62c513092a7eea7df2c7f2c36a88ea8922c00a5daa8c4a86a2ce5aceea8eaa8b92b60a864a8c5a8f5294ca590a832a982297aa631a955a9b429f9a5eea84ca90c29cda5eba856a9b028eea5e6a88aa9562815a6d5a8bba9ed2726a5afa8eca91a271ca5c0a845aa802652a5caa864aa1826caa5dea86daaa825d4a5bca88daa2025e8a48fa852aaae24e6a48ba879aa6c249ba473a885aa1a24d0a478a865aaa9234fa458a847aacf22eaa348a81baa82226aa31ba8c8a9cd21aaa3c4a7a0a954217ea37ea761a9c82018a325a72aa96f209ea223a718a9332075a209a702a9f71f0da2f7a6e5a8431fc3a1b9a6bea8d81e4ea15ba672a83f1e24a1fba53da8c01dfda0aca50aa8551dada04da596a7e01c89a005a537a75b1c51a0bfa4d9a6141c06a092a482a6c41bba9f58a435a6621b539ff5a3bea5c31abe9e54a34ba5dd19b49ef7a2fba48419389eb5a2bfa4b818f09db8a2b4a4ae18a39d6ca285a4ed17f09c39a261a402181b9de7a117a438180000e216b5191a0cba1f3324d6258a262d25b228402a8a2c94244f28e929992c6b2473271429d82cc92312266c280c2d0722e0231826362d371f9c1f23223b2d9a1d0191a8186f2dea1f7b9ec59bf82c452685a260a0152df82d43a516a3fc2c4331e0a5dca47b2cfd307aa796a6bb2c012e17a80ba8702c3ea09aa84ca8202ccdacd9a813a9842bb3a8a1a864a9122ab2a6aea835a9a029caa637a987a9972943a7e5a89ca902299ba611a9f3a9b92832a606a9e3a95c28cda5cda80baa952748a5d1a8d9a90d272fa5d1a83aaa85264ea5c8a850aaf72583a5a2a86caa7d2524a5a4a848aa1e250da590a862aac6242da5aea8b9aa642433a5c5a8b5aa2924c0a484a829aa502312a416a8aea98322ada309a8d7a9f921b1a306a812aa9d218ca3e4a7f4a9572149a38ea7a4a90a2109a367a758a9ba20f0a259a74da98020c4a268a748a91c204da243a729a9c21ffba10da7faa8431f53a1a4a6b5a89a1ecba01ea652a8e01d78a0a8a5fea7511d6ca06ba56da7fc1c5ea01fa51ca7a91c38a0cca4b7a61e1cfd9f82a469a6a91b909f48a41ea6341bdf9ef5a305a65e1a499ea5a3daa50d1ac39d48a3d0a5b519a79d09a36da53b197a9dbca2cfa402196e9d56a240a43418f99ce5a1e6a3d1173d9dc5a1d3a35c170000bc16a519c80f2b206024002675264d24b928fc29622c4b245528b7297d2c1024f026f2289d2c502389251228c22cf62100238125ef2c7520371efa21fb2c311da390511d092db217ce9f879b112d721e0ca2719fb72cb62881a48ca3da2cde2f2fa631a67c2c6531f1a694a73f2cfc2e14a862a8302c06a569a86fa8872bd8ab69a8afa8d72ad2a5ffa7d1a86229fda4cea86aa9e629ffa5f9a87ca9712922a6d8a882a9bc2848a6dfa86fa97128dfa5e0a8aca9242875a5a5a898a97e2747a59da880a9e52659a58da884a94a2633a565a8b0a9b5250aa55aa8aca93025d9a438a8c8a9db24c9a453a8e9a99e248aa431a8c0a926244da406a895a9882334a4e4a7a9a9d8222ca4a9a774a9432202a49da760a9c221aaa376a761a94d2180a382a75fa92a2184a37ca755a9c22077a385a76ea9ca203ea39fa787a98520c1a295a77da9352041a24ea734a9b51fc4a1e5a6f1a81a1f60a194a6aaa83c1e1ca14ba66ba8c41dcaa0f9a522a84c1d85a08fa5cda7e01c2fa02ea568a7471ce99fdda4fda6f21b5b9f8fa49da65e1bc39e38a418a6d21a2a9ee6a3a6a5521ace9d6ca318a53e1a769deca2b5a48919559d91a26ca433198c9d45a23fa4f7186c9e04a2f9a37918269fd4a1d6a37a186da082a19ca2b1150080309351938814fc2350285b2a4d2aed24e4288e2ae12ba6242928fc29412c7e23fe262729742c5f22522524289b2c3a21f3214925c82c181f091cbb20dd2c3718119cd891e72c628ce9a0d69fcd2cf8973ea473a27c2cec1fc8a405a5572ca52b6da645a6ac2ca73038a7baa70d2c5c2f1ca861a8252c0da6a4a8f3a89a2bf4aaaaa8e9a87b2a1ea507a80fa948297fa599a801a9872937a58fa826a9002961a589a845a989285ca5a4a869a954285fa5a8a85aa90b284ca595a85da9642745a568a84aa9bb261ca54ca85aa93126dda40aa813a9a525cda4a3a7f1a8d8245da470a70fa98f24c3a4bca71ba93a247ea402a896a9f02371a407a897a936231da4dca772a99c22aca386a754a9542250a34ba737a9c121dea246a736a98921aba221a72ea955219da230a72ca9df208ba21fa721a9992080a219a71aa950209aa21da71ca906209ca212a70da97b1f45a2f0a6eaa8d11e8aa178a6a7a8221eeea02ba65da8a71daaa0f9a539a84c1d6aa0a3a5f9a7f11c55a054a580a7941c43a0eda4fea63a1cf49f92a463a6c51b9c9f43a4e0a5e41a0f9fe4a365a5611a709e51a3eba4ea19ee9dc2a283a47619c69d5ba23fa4df18b09d17a221a4f9189c9ddea1e6a39818869dc0a1a0a37518c59c48a14aa323185b187f1d2420a616e7247929f62a992aa52405295d2abd2b84252328fb29f92ba623c0268228562c57217424ff256b2cea1e2020ad22812ce31b6a901f1b852c9015079d4298812c7a92a4a06a9e662c5d9b89a398a2802c1e9ca1a51ca5832c461ea2a52ca6282c012da0a6b8a6bb2bdd2ffea6c8a7ee2a78a250a8a2a83b2be0a846a846a8322ac5a472a818a9b7297ba582a8eda84f29cfa471a8d9a8c32848a573a81ba9582848a595a84ca91428ffa46ca834a97b27a6a442a80ba9d5268da423a816a945268ca410a804a9ce25baa4c1a719a9512591a46ea7dba8ed245ba48ba7fda8a02437a493a72aa96324c8a3c5a75da9012484a3b0a760a9752338a378a752a9d12206a350a70aa94522f1a2faa6d3a8b721baa2e0a6c2a8032168a2a0a6aca8d5201aa2a4a6bea86e20e1a1a0a6dfa8312036a2daa6eba83620dba23ea707a9e71f72a273a73ea9671fcfa14fa75ea92d1f48a1e6a608a9771edfa079a6a8a8dd1daea01ba63ca85b1d72a06ea59da7fe1c3fa0f5a40ba7831c1ea09fa489a6291ccb9f56a449a6ce1b519f0aa4e5a5461b3c9e64a370a5581a859dcda2cca4d719f19c45a249a47119ad9ce7a1efa3ed18609c9fa18ba3bd186c9c72a123a36718169c33a115a306180a9cf7a09da2f516ea181f1d901f0f1871252b29832aa229412446290a2bf02a1f249828392a6a2b0423ac26a928c82bfb204a24d7251d2c441dff1c9e20212c6b16849b8a91212c9f91c59fbe9c0c2c609863a15aa0232c4a9cf5a24ea2282cbf9db0a40ba42f2c6a9d75a5f6a48e2bea1d3da60ca6e92aba290ea832a8e32aeda144a851a86d2a9da6e5a667a6f228b8a35da810a98729b8a429a8c8a8b0284aa443a8d0a85d286ba447a8e2a8f72782a426a8c1a859275da412a8cea8ad2639a4e6a7b2a81f2627a4b2a7a7a89f251ea466a7a4a8302511a42ca7bea8fa24e4a3eea68ca89824efa3d0a681a88324e4a311a7a8a84e24d2a348a7f3a815247da348a742a9832331a3e0a6eaa883229fa257a694a8dd2134a20ba64ea8ea20f2a1c9a511a84b20b2a1a1a502a82d20b5a1eea532a81f20fba170a68ba8f11f4aa211a7f8a8062020a247a724a9dc1fc5a165a741a9ed1f6ba127a724a9751f3ea1d9a6e0a80b1f26a142a685a8281ef6a0e3a54fa8ab1ddba094a508a8131d73a016a57fa7951c15a0ada4e7a6361c919f52a445a6581bd49eeea3aba5bd1a3e9e28a3fda4d8199c9d75a262a454194e9dfaa110a4bb18689dc0a1aba399186b9d96a163a34618729d32a1eda211188c9ca4a05da299170b9d3da040a14b16701ccc1ecc2036146124e0282a2a2129ae24ed28872a722a7523a128102b752a2622402783290b2bae209f227525452b811c9d906e1bb62bf1140fa0309ea52b728bd0a02da0892b6c960fa1aea0682bed99e0a13aa1572b289d1da3afa26c2b419f6aa49ba4602bd1a079a56fa5e02a4ca204a71ea65c2a52a661a746a81b295ea5fda6b0a83428d5a2c0a7b9a85728fea209a879a82128d5a3faa786a89e270ca4eba768a839271fa407a88ea8ab2614a4b4a785a82e2623a4b3a79da8b62522a434a795a81a25dea397a62aa8af2481a30fa6eca7542410a3fba5cba73a249ba21ea6c4a75324c6a200a799a86d2466a3bba73ba9f52395a365a713a9eb228aa3d2a69ea81b223ea293a5cca7be20eca112a513a7a220a9a1b2a4d1a6c31e62a1b5a49ea6c71e7aa10fa52fa76d1f99a1c9a519a8e21f6ba20ea7f4a81f20b5a3f8a773a9132020a3f7a761a9022096a1e2a6c8a8ae1edea02aa66aa8b61da9a0d5a527a83a1d83a042a589a7aa1c40a0e1a40ba77d1ce69f99a498a62f1c919f50a422a6d91b299f17a4d2a51a1bb99eada369a5a91a1a9e19a3c0a4291a819d6aa23ea4a019219d00a210a45119d29ca5a19ba30f197d9c3aa10ca3ca18659ceda08da264181b9cb3a069a27418cc9b85a0f8a17218511b651c851e181787238328ac29aa28fa22e2288d2aa92948244f29fb2aa929ee23de276b299129b81c1b1ae21b6b299d164ea1939e132a138bcfa14aa0c22ae18a71a0cd9ef52ae895c5a09b9e1a2bb099b2a179a0022ba59b2da2aea1092b639d35a3cfa2eb2a749f32a4e0a3f82962a025a537a500295fa2bfa63ba7e228e8a340a72ca861289aa323a8caa86e2806a4f2a77ea8f2271fa498a754a8402733a46ba78ba89a2618a468a763a84a2629a488a760a8ab2505a48ba77ca84d257fa33fa76ba8c22434a3bda60ca846246ba3eba548a7bf2315a316a541a62223fea1ada4dea54f231ea246a62ca881240ca400a867a96e2496a3a9a75ca9982350a2b2a6f7a8a3221fa158a52ea8a221a3a17da45fa6a820d5a1f4a25ba5d31e4da1b5a26fa5d81ec7a0c8a382a5821edfa00fa512a7201fa6a10ea7fba8661f10a21fa8c0a9921fa3a247a8e4a9701fe5a2e6a75ea90b1f4ea2aaa692a8671e44a1b0a5cea7981d6da009a5dda6e61c03a084a42da6651c799f4aa4daa5e41b589f14a49ba56c1b189fcba369a5171bb59e78a32ba57b1a5a9e16a3f0a4261aed9db3a2b2a4e019759d24a240a47219f89c8ea1d0a30819959c04a190a36c18839ca6a01da3f417f29b2ca065a32618079c6fa0bfa279154e1d2e1d22208f164824c62600282628ce22ac25bd28702895235a29a52bda285624552a592c222abd9dbaa7f9a8102871983ea5c6a53428cb120d9ffb9ff6288e090d9e049e4c29ad922d9e2d9c96299797499e489cde29a499bc9e589b172a229c1aa0109c352a049e17a2c9a0652ab3a093a56aa6832955a241a7faa7b628f3a39ca731a84a2804a45aa711a8de2741a31ba7dba74527d8a20ca7e8a70c27cda2e1a603a89426e1a2f0a609a80f26dda2d7a618a8b725faa20ba72ea8442518a30fa750a8e824dfa2baa62ea83e2458a204a69fa760231ea203a551a61222b3a14ba35aa43a2226a23aa54ea7fe24bea4daa83caa6924e4a1c0a5dea7e62197a2c8a59ca78821c9a183a478a6a92009a1a6a38aa5bf1fa9a089a1b7a46d1d4ea1969e99a3d91a4e9f7e9fdaa22b1b0ca065a4d2a5dc1d45a2d4a734a99620b8a3eca896aa27215aa3bba849aa8920e3a2e9a771a9551f9ca058a6dca8071e64a00ea568a7c01ca9a0dba4f1a6831c2da09da4e4a64a1cc79f4fa459a6ed1bfc9efea3b7a5021b499e92a34ea5511aca9d43a3f5a40e1a589d84a278a43619db9c7aa1f0a37a18259c21a188a33d186f9cffa04ea3e717519cd1a010a31318349ca1a0c1a27e170e9c84a0b6a21218c59a3ea074a25717b489d39627987119d3209f23022574260220e123692568277d1e892009247c25061cab1f61215223312095231c251c2cd618091db320a1286a18f819161f7128c615a315df1c7a28c4119e0ce41a7028ce882c9396198528a79486983b18ba28f6949397741b41298a9ac89b661b0c2ae4a0dfa518a65f281ea1c4a6b4a78727a4a091a544a63f271aa1a1a53da6f2266ea1c2a599a6c126cda114a6ffa67f2639a228a62aa7282667a253a678a7ac259ba24da6a2a74825a8a265a6a4a7082592a269a6eba7b32489a279a615a8742498a225a676a70124b9a18ea5c5a616235ca137a5daa66422c39fd9a2e0a4861f919d1fa076a2511c1ba131a44aa63a20f2a081a44da68c202fa003a4a3a5f01fdb9f5da32aa5741e53a0cba1e7a4f51bb4a09f988e9f9f18e098411f67202514af9f3ea0cfa2fd1589a5efa9ddab712117a32aa9feaa6221a4a1bba720a90f209fa10fa615a8901ed8a13ca52ca7601d4fa1b8a468a6d91c49a02ea4a7a54b1ccb9fbfa347a5061c249f5da317a5521be49e08a3e8a4fe1aac9ebda2c0a4671a5e9e66a285a4141a049ed2a131a49719939d7ca1d9a34519339d42a16ca3df18ea9cf6a007a36c18649c9ca0b4a22818389c6ba048a23c175c9b17a050a2dc16719a14a036a20e1700801a8ab889f000a31e29221b249924691f9623d0257626c81c0720bd2186241a14cd18891b051dfd1b362001226c25e91c7f1fd7220a28fa19da19922028289d164f0c711d4728520f9e9756144028a595b89c20994428fd99ec9e509e1e28249c79a06ba0cb27879c08a11ca18925b49c82a1eda1e424669e2ca371a3ef25c59f04a4f9a3692622a043a470a428267ba07ca4e0a4c92510a1e9a468a58c255ea11ba5bea51b25a4a15ca53ca6fd24c6a172a567a69b2401a286a5a6a65c2418a29ba5cca622244da2a5a5e5a6c92375a2a0a509a74223bea294a53aa7f0222ea22ba5aca6a5216a9f6ea344a57e1fd09deea177a4e11d749f57a296a4491ebd9fe7a2e8a47e1e909f11a325a5891e0da0c5a39fa5971e57a0efa3e9a5a01eb39e86a20da5121e44961c1994191c19f11b2328c72842a021a7a6ad59af2b25ea9f14a62ca8401fcda09fa424a75c1d22a047a4e8a5e71c2c9f0fa49fa5691c8b9fa7a351a5f61b009f34a313a57f1bea9efba2f8a4431ba69ea3a2bba4e71a7a9e5ca29aa49e1af69ddfa147a41c1a6f9d81a1e4a37919cc9c18a15aa3d418919ce9a0fea2a718529ca6a09ba275182d9c85a065a25618159c63a03ea23518199c42a010a2dd17a39bee9f1ea20918259b309f53a10e150000db80de04440b0e2011227424c724e91db521b523c1255d1a4a1e53201d2432191c1e4720b220521fb020f623b1259f1c4420f4226027d4198d1b9c1f9d271b171e155f1bde27a31134920b14f327ee91c79bd096d7274598979e3f9dd827359b2aa139a13e273e9c15a146a1a625369b21a090a05c24879d3aa133a12b25f29edba12ca2ff24c29f8ba25fa3c42453a031a3f0a3a024a4a0caa36fa47624eda025a4baa45e2434a176a40da53e2480a19ea47da51324afa1dba4dfa50024d2a10aa510a69623b5a123a556a638236ca12aa56ea6a9221ca10fa566a64a220da11ea581a6c321f4a0eaa43fa63221d7a087a4f1a5902077a031a4b2a5ea1fdf9ffaa397a5461f679faea394a5c21e699f84a396a59d1ec49f86a380a5471ebf9f45a352a59c1d069e57a19da3371c3e94a996239871108790ee941b98d504689dc3a0a8a24c19b39f8da26fa4411c7f9f52a287a40e1caa9e12a278a4161b4e9eeba15aa4891a679eeaa154a4741a309ee0a12ea40d1adc9daca117a4d8197d9d96a1d4a36c19219d69a18ba34019ac9c23a134a3bd187b9cb8a07fa25b185c9c6ca003a215184d9c41a0cba1da174b9c20a0b9a14f174c9c15a0a4a1d816419cfd9f75a1ef150c9cc29f4da18116999b4e9fc2a0791600000d150f181183751ed42140234624291c202093217324e219091e5a204723b11b801e7d20c9227c1c1020df212425091ca91e8a2149265119b41b841fa0262a167316381d9f26f6129c8bad19b826868e6d99c193f8265598ce9dd99c0127129b4ca04ca03726f49a42a05ba04d25049b07a05ea0d324d19ceda031a11525a79d93a10da2f924349e52a2d8a2b724f69ec0a291a35f24459f13a30ba43024d39f9ea343a4062437a00ba4c7a4ab237ea047a423a55123ada07ca478a52823cca092a4a2a5c922d7a0ada4f3a57522e0a0b5a4fea53f22f9a0c8a434a6d02110a1e2a43aa65a21b5a0c5a423a6cf2055a070a4c4a56620f59f2da47ca5e11f659fdca34fa52b1fff9e90a33fa5ca1ed39e3ca318a5441ed69e21a304a5141ed39ee4a213a5a91d179feca2e9a46f1dba9e6ba252a4471c4b9a849f3aa1b1188797729ddba04317a49cc19f05a392171c9db4a071a36718ae9d6da10da4e419029e8ba135a4dd19ff9d6ea12aa4ac19ed9d46a1f7a37119d19d2ca1dfa34519e39d12a1b1a3da18879d07a1b7a3c118219de8a097a36618c19cd7a068a34a18619ca4a02ea31d18e29b5da0b3a25117499b1fa04ba28416119bb39f18a22916089b9e9feaa1a815129a389f33a25c15fb99e49e4fa2ef16f919661fa620e019aa25712532283b29162745248e25db29ce28462313258f296a2aca2138238b2ad32ba61f1521142bba2c161c0f1e5e2be82cd49109138f2b6c2cff9fbc9fe3296e2c3aa3ffa30828102b84a531a5992dce2867a4e8a3f12daa2403a909a9502ee6a42daaefaa8d2b06a690a8bea9102a55a7e1a79da8b429cca852a654a7ec283fa88aa506a6c127b1a667a734a756258aa8cba849a647a625a957aa85a8b428f5a872ac92abbd2d8ca533a9d0a9d82beaa5f0a698a5422c8fa88fa749a64d2a3aa8b9acf7ad65a123a590ab79acc31905a113a759a82e208f9fe6a467a7ba20c4a0f4a167a45821d6a28da76ca99b20ffa157a7f2a8c4209ca1daa540a82c20c6a04fa568a7921fd0a02ba54ea7161f8ca0faa438a7ba1e9ca0a9a4e9a64d1e47a07ba48da6f91d3da055a447a6b21db49f2aa421a61e1d579f07a4dfa5ad1cfa9ee5a39ba5871c9b9eada35fa5271c569e5aa34da5db1b539e18a30ba57c1b489ed5a2c8a4cb1afb9d84a2a3a4661aa29d43a292a4c819459d14a265a49c19189d16a252a44519e19cf8a133a41b19929caea1a8a3dc18379c53a1c2a280180a9c24a1a1a25918049c0ca1a1a20a18e69b02a1aea23c18ee9bd0a061a2b317ca9a58a0eea13b16f79b47a042a12216980d4319d41a4e9869254d2897290c291527fb26a928f4291c29732548278429252c27253726f729ad2dad245a260c2a572e94240027f4297c2ea3226b25c2293a2eda1f0822ff29192df693e494d72b4c2cc4a06a9e5c2d872bd9a2eaa1bb2d452535a7b4a7df2c3617f8abc1ac0b2bcda46baaa6ab6b2a6daa23a9aea949294ba9f9a5c0a56e2734a970a3a7a0cb221aa9c3a2529dc618e0a876a4891b921e0ba723a60aa2ca28f9a766a811a9572c04a66ea8e5a80e2d57a46ba533a5202dc7a463a6e6a5472ca2a50bab59acaf259ca759acccaecd18a8a788ab30ad5e1d9ba48ca974ac9b1566a300a983abf21cc7a4eea946acc81c7aa27ca92dac441ee3a2baa8dfaabb1ea9a219a85aaa891f5ba36ba765a90320bea26da69ca8471f76a1c7a536a88b1e98a072a516a8f71d33a011a59aa7cf1dc49fd8a41aa77c1df99f90a4ada6f01c14a057a413a6a31c25a02ea487a59e1c1da0f6a346a5261ceb9f89a30ca5c21b639f35a3dea4561bb99e05a3c8a4bc1af49db6a29ba40d1abc9d8ca264a4d6196f9d5ea240a45319039d1ea218a41d19c29cc1a1d4a3d018129c60a152a3bc18d99b01a109a33b18a69bdba0b0a2c4176e9bb5a048a29e17be9b8fa0e2a12f16cb9a55a0b0a1e1158d9a07a00da1231714162f1bb11bfb16af264c2875296a29d9283d28a129af2a4529ea270a29f22a4a2ba1261f282b2ba22c78252527602b4f2e17246b250b2c542ef221b224822c3c2eb21d8320862c762df892621af42c9e2c2e9e5d94052d3a2bf0a1d39f322dda27baa6d1a5b82c2f97bba9f7a9532ca0a5c4a9e7a9172b44a8c3a89ba8a12967aa0ca8f4a7bc28f4a9d6a6afa68927d5a8f7a59da4b026eda7bfa550a47d268fa7c5a6e0a320296da749a7c7a5302bd2a63ca7dfa5552b7da6e2a6f1a5972aada5fea72fa88e294da540a94aaa7d287ba522aa23acef2661a583aa76ac4f25d5a450aa74acf0225da43aaac0ac812090a4d8aae8ac451e93a466aacfac2f2076a461a9b7abd91f1fa47aa86aaa701f32a3e3a7c0a9f21e42a223a724a9a51ec7a1b4a6d6a87f1e4fa155a6aca8731e24a1f6a558a8c71db4a07fa505a8881d74a01da55fa7151d22a0d3a4daa6cb1cad9fa3a46ba68e1c469f70a426a6181c1c9f2aa4c2a5b11bfc9eeba385a5391bf89e92a32aa5d41ad89e30a306a57b1a609ed9a2a8a4ca19d79dada272a495196e9d68a233a41219f19c14a20fa4ce189b9ccfa1a6a39818b49c80a148a35a18b39c15a1cda2aa17a39ceca06aa26d17879cb4a00aa2be16c89b5da0e6a1bc166d9c8ca0a6a1f1168502f181d109db081c280b29492a7a2b6e27f328ab2a492c6b287828fe29962c31290727b2284d2cb02b55265228c02c032dae249426322df92deb21f923792d5e2ead1d6120a02dc92dc092461abf2db42c969f429a882d892b18a4d9a28c2dda28dea68fa6f12c15247aa888a86d2c8fa016a9dea8232ccba876a944a9602bc8aa40a9fca8232a0cabffa87aa8b2293faaaca857a88e29e6a8ada80ea80829f8a893a889a7792968a8a5a8b3a7392afaa78ba860a8162a8ca7a2a8bea88229afa6f0a866a9c4284da641a96eaa162827a7dea9b7abe926f8a62faa69ac172511a676aa77ac6c23a9a595aac7aca4226ba5d4aa19ad5e22c0a46faad5ac5b2190a4a3a933ac28213fa41fa947abd420e9a385a858aa352044a3f8a794a9b91f8ea22fa71ca99a1ec0a1d4a6e2a8331e57a154a69ca80e1edda0e4a552a8a41d94a08da50ca83f1d42a035a59ca7dd1c28a0fba415a7991c01a0c3a4a5a6581cce9f9ea452a6e71b739f67a413a6731b0b9f2ea4caa5fe1ac89e01a493a59f1a3e9e9ba356a5381ab19d2fa317a5df19669ddea2d5a44119fa9c7ba274a4f5187e9c0fa219a4a318429cafa164a36618369c6ca1e1a2e817149c30a19ca2a717dc9bf2a032a2ee16f89a7da0dda1ee16239b5ca0eea15017b508980fe00fc3826e272629912ac02bb7261a299b2a942cb127bc281a2aec2cf728f8271829f62c242a442790285d2d3e2cfe24ea26de2d952d6522c724e02da22e601d6c22e72d162ff998261d2a2e182e80a02a9ac82d4f2c58a4c8a1a32db92836a6fba4292da9220da850a7b12c94a09ba84aa8472cbea703a9f7a8ed2bfea908a9d4a8542bc7aa01a9e5a85c2a86a9f7a800a9fa293aa8c6a89ca8c72935a8a8a85ea8ac298aa7f3a874a89f290ca7eca8fba81529dea628a98ba9ae28a1a656a953aa412865a68ca920abc027e2a6f7a9ffabc1260ca72aaa5bacd325d8a50daac6ac6f241ea533aa96ac3d232ba52daa50ac6c22efa40aaa34ace721fea4baa92dace520caa412a9dbab6f20e6a39ca8a4aa592034a366a824aa7b20c0a20fa8d7a9152078a257a75aa94b1f42a29ca6aaa82c1ec6a114a64ca8ae1d92a1cba519a8131d28a183a5d4a7c51ca7a056a594a7831c35a011a53da73c1cd99fdda4d8a6061c6d9f89a46ba6801b289f54a40aa6151be29e13a48aa5aa1a609e95a31da5dd19f09d0da3c2a47419699da8a28ca426191b9d62a24ea4e218d09c18a220a4aa187b9cd8a1dea378183c9ca8a18fa315181b9c90a137a38917289c61a1fba2e516979b27a1cda23816739bc5a014a2941542085b0c5d0e7d8218284229712a2d2cd1275e29c12afa2c2628b228df29412da2287b281b29a92d8a29a5278228e72d812b18256c261b2eeb2ce521a723892e0e2e5f12a91e6c2e702e2f9fe8933c2e0d2ea8a2c09eec2df02ce8a48ba3a52db52a79a643a5582d8225c8a7cfa6e32c0ba16fa8f4a7942caaa9fca83fa8372c0eab40a987a8ec2b72aa66a9e8a8492bdfa85aa919a9b62ab3a80fa91aa9d6294ba8e5a8f8a8582975a8fca814a9fc2862a83aa995a9c92807a880a9f6a9792801a799a9cfaacc2713a698a945abe026c8a5a5a997ab372662a5a3a908ac9425ffa4e2a93facd22401a51daa57ac4924eba412aa54acd723a9a4b4a939ac972278a433a9f6abac2135a4daa8a8ab572107a4bca84fab132110a459a894aa8a20a0a3dfa7eaa94220dfa251a79ea9d11f6ca20ba765a9571fe8a1a6a601a9881e4aa147a67fa8171ee6a0f6a540a8b71dada0cea52aa8711d71a094a5e7a7eb1c2ba05ca589a79f1ce29f0ea51ca74f1cbd9fd4a4a8a6121c7a9f97a42ca6581b2e9f61a4d6a58f1ac09e20a47da52d1a729ee0a327a58f19dc9d75a3d9a44319329de7a27da4e018e99c6ba227a44218de9cfda1cda30418ac9cb9a175a3ac17bc9c9ca10aa30917949c52a116a32217479c18a1b1a22a18110be207f30ae2875a20d5217c223425e526d628262aad2c2428ac28302a6d2dd3262a283c29b32d40279227cc28032ec428b9259627822e802a0622ea24fa2eb92c20126721752e0c2e609d9a934a2e132e6da324a11c2e4e2d96a5c8a4d32d952b89a6b9a55e2dc728eea750a6062d1b1e7ba85da7e82c46a821a9cca8462c11aa76a916a9b72b20a95ca946a9cc2ab7a792a982a95b2a0ca79aa94ea9e82984a78ea99da98e2914a8c1a9d3a94e29faa7a3a902aac828d0a7caa962aa652841a7d3a9aeaaa227aaa7e2a9fbaaf526cca7cfa98aab38266da699a9a3ab39256ca5baa9f7abd92441a5d7a92cac7e2412a5cda932acfb230ea58aa902acbb22dda414a966abe821a0a4e7a818ab7821aea4eba818ab57212aa4c4a8f1aa0b213fa328a8e7a9212021a3d6a761a9981f6da267a739a9161f07a2d1a615a9721ebda165a6dfa8fa1d4ca12ba6b8a8a01d09a1d9a566a8461d93a080a50aa8d91c3da045a5a4a78b1cf39f10a533a7181cb59fe2a4cda6d01b5d9fada464a6661b199f80a418a6ab1aaa9e47a4bfa5571a6c9e11a47ea5ae19269ebaa32da557199e9d1da3c7a4eb18fc9c98a26da43c189e9c2fa244a4f217ab9c13a22ba4ba17749ce5a137a487165f9cd0a125a4c616b39cafa153a3d016220cc3067108c386d21f2b21d4212f24c9253129522ab02cb326c0284a2a5b2d372711281329822dd8254527c328f02d73253925cc26302eb326972041247c2e302ae6914a1e502ea72c4da09e93682ecd2d21a331a10d2eb52de7a584a4db2d772c71a717a7ad2d8929a5a897a85b2d3d1ef2a8efa8cf2c6ca8faa8eea81e2cfea909a919a9842b0fa979a9d2a9042bbca8f6a972aa1b2b36a8e2a928aa822a55a89ba948aa9b29c2a7dea98aaa4d2956a7baa97aaaa6280ea772a97faa2a28bba66ba9aeaa9927dca571a931abd126dca597a9e4ab1c2614a6bea9e5ab942584a597a9b1abd92487a5a8a9c8ab7824f2a59ea9caab0c24baa572a984ab27231ea54ea987aba922c2a445a97eab56227aa411a92fab932119a48ca885aaf0209aa33aa82faa782034a306a816aa3320b6a29ba7d7a9bf1f20a20ba774a9001f8fa1bba6dea8361e38a15ba675a8cc1dfaa017a63ea86e1da9a0dba517a8d71c87a09ba5c3a7951c39a063a575a74f1c1ba025a514a7121cfc9ff9a4c6a65f1b8f9fb9a45ba6ed1a279f8da4f9a53a1aac9e39a4a5a5c719209ec4a33fa54f19c69d0da3c8a4d318a89db2a286a488189c9d83a254a45d18799d2ea212a4c817219ddaa18aa3e416bf9cada180a3de169c9c9fa170a37c169308f201130cf2819e1f402185214f242225c828e529902c5726fe28572a762d902513289a29ba2dbc246b260529d42dca2577247a26132e47256b2143248c2e7a285518351e2f2e842b75a08399bd2e4f2d96a3b8a1bc2d932d9da59ba4922dd72c1ea789a66e2d9b2a62a833a8452d2021d6a8d3a8f92c34a8fba828a94a2c01aa16a916a9aa2b1da84ea9a6a9cd2a9ba79ea91caa8a2a9da7c6a9f7a9132a06a7aca9f3a98729cca689a927aade28aca69ba972aa72287da6a4a9c5aa07285fa697a9cdaaf12636a681a920ab78264ba699a93dabe02582a6b1a983ab6d254ba5b1a91facef24fda4afa905ac6a2451a58da9f1abfe2320a549a969ab4323afa4e3a80bab3a2231a4d1a8d9aae0212fa4a6a884aa4221f6a359a888aada2072a30da860aa662025a3cfa7eba92220f2a271a759a9c61fa7a23fa71da9611f69a2f3a6eca8911ee7a1a6a6aaa8231e7fa158a67aa8b91d3fa114a651a85b1df5a0c9a521a80b1d8aa092a5e8a7c01c54a046a58da7381c04a0f5a410a7d91bac9fafa4a0a6561b719f66a44da6721af69e11a4e1a5e619e69e97a369a581194a9e24a303a52019049eeda2e9a4a418069ec3a29aa47118ec9db2a256a45a18c89d8ca220a45617419d52a235a46d173c9d20a205a47d16f10d2a0ce10cda81831f5f210422592414262129872ab22c25271129772a9d2d1e2648287029852d872492267a28b12dc223ab2436275b2e6723a52024247a2ec424a711c41f672e9c2849a04d9cac2e3d2b2da4aca2f22ddf2c5ca617a5c42da52cc8a77da67a2d962a93a817a8282d902422a9ada8002d72a7c3a8e3a8f02b2ba931a950a92f2bf4a8bda912aa0c2b90a87faaf8aa1f2b58a83baa9daa602a16a802aab5aa9a29f2a7e2a9ceaa1b29e0a7cea9e6aaaf2823a7d2a9ffaa242881a6a4a94dab2e27f3a5a5a92fabb026e8a57fa954ab2e26f5a57aa98cab87258ca532a9f2aadf2441a516a910ab5c24f0a406a939ab0124b5a41ca97dab3e238fa4f6a80aabd12217a4b9a8d5aa34222ea4b3a8f6aabc216fa499a8c9aa332131a447a832aac520a4a321a8f3a944202ea3f3a7cea90020c2a2a8a7a3a9831f70a23ba752a9911ecfa1b4a6d2a8f11d3ba143a66ba86b1dd5a00ca647a8c81ca1a0daa51da87a1c7da0ada5f5a7021c3ba04da56ea7671ba89ff5a418a7ed1a369fb4a4c6a6801af99e79a46ca61e1aeb9e47a41ba6ca19de9e19a4eda57d198b9ed1a37da53d19e69d5ca3f8a4e118759ddfa2a0a43d18f89c74a271a4f617179d48a228a42d17d99c09a2d9a3b316f79ce8a112a40e179019491cf2196d2144200a230e23dc24c425c6283e2a9e2cd325f128932a562d9b251f284a29822d1a2548265328a12d07247c23f5250f2eaf225f1f5423532e112166912c1c342e89220ba06493932e842712a482a05a2ecb2ad7a5b4a4cb2dea2b4aa77da64a2d582a8ba890a8362ddf1d29a918a9072da7a8a5a803a9a62b01a89da8bda8c02aeea513a94aa99a2ac6a6bda9d2a9c82a4da883a9ffa9ec295da7c1a90daa7d2900a7b5a93baaf4286ca6b3a957aa802869a696a944aa1628a5a65ea970aa7b27b9a615a974aaad2612a60ba984aaf925b4a51ba9a7aa7125cea51aa9afaaf724bfa5fba8ddaa582403a6f1a8dbaa012429a5e9a8d1aa30236ba4afa8e9aabf2217a47ba87faafa210ca437a807aa322101a416a8c3a9d220f3a3e9a7b2a98920c8a3d4a7ada95e2091a3aaa78da92a2038a3aba773a99e1fd1a26ba73ea9301f2ba233a7fda8b91e8da1cda6bca8341ef2a068a677a86b1da8a00ca638a8451d8ba0bea502a8e51c7fa088a5a2a79e1c45a048a551a7181c09a0f5a4c5a69a1ba89fa3a45ca6ba1aae9e46a4e2a5231ae39da6a334a58c19259daaa27da4d518d19c21a234a426181c9d10a22da41018409d5ea259a42f18699d7aa272a4d617c29c1fa25ca42017289ee5a1bda3e617041b8a1c7e1b752151216c2319240225b325c728982a8e2cd025f1288c2aa42dc824dd276529742dc62398251e28a22d8e2199224825c62da81e671c5720c72d321ff0976f92e92d5d1eefa0a09fe12d692174a41ea4bc2dbc262fa742a6082e5d296ca7b5a7122dab286aa88aa8ca2c551d35a954a9cf2c1aa81ea91ba9032c26a812a95ba9122baba57aa9eda99e2a5fa6e9a901aa7e2aefa685a927aaa7298aa675a9e7a914294ca666a925aaac2849a656a923aa4828daa51ca91baabf27a1a5f4a805aaed26a0a50ca973aa5926fea51fa96aaade2536a6fea871aa2225e5a5eea888aab52437a5d1a88baa5924f3a4bba89baa0824dca4a8a8abaa7b23b2a48aa88daac02295a458a82aaa412238a451a80baac121f5a32ba8daa96421d8a3e9a7b3a9bc20b6a3b1a773a979203ea35ea72ca91c20c1a23ba710a95f1fa0a21ea7fda8fb1e24a206a7dea84d1edda1e0a6bca8f31d62a172a675a8741d33a111a63ca8041d01a1cea508a8a51cada05ba598a73d1c90a022a549a7f41b54a0dda4e2a6751b0ea096a479a6a71a04a069a433a6551ab99f0aa4b8a5cc19ec9e7fa347a55419c09e24a3f7a4bc183c9edea2c8a43c18ea9dd4a2b5a42118b29d96a293a4e0161a9d6fa25fa413176a9d22a20ea4ea17fb168b1822190a21b7202223932316258725dd28ae2a742c1b25be28732a212da3241e286529482dc02340265a28732d8321e123b325a22de11db01d2821a52de818c19a8492f42d451471a0d99ff02d1e17fca344a3782da11e48a6b9a58f2dfb2439a7efa6a62c842734a837a8792c2f1f6ba8aca8172c33a619a998a8d42bcda6a9a931aa3c2b2da6d2a9adaace2afaa5f6a939aa862a5ea6e4a950aae4290ca7a2a942aa4129e1a676a91daaa428dea674a942aa4e28d6a545a944aa8f274aa50ea950aaa32650a508a97baa282654a50aa99caaaa253fa5f0a895aa42252fa5d2a869aadd240da5caa868aa532403a5a8a88daaef23fea4a3a88faa532379a463a806aa6c2207a41fa8cba9f021f9a32aa8faa98e21efa31da803aa2721b5a3e8a7e1a9e02068a3aba79ba9972009a378a757a958200ea372a74ca9e71fe8a283a731a9901f6da253a70aa9191f1ba221a7e7a8a91e8fa1cea6a9a8111e0da150a656a8711db6a0d1a503a8e71c8da07ca592a7941c7ca043a536a74c1c56a0e3a4d1a6fc1b11a094a49ba6051b8a9f4ca45fa6851ac29e04a445a6b519369ea8a317a66319ba9d58a321a6d318ac9d20a392a55a18899ddea2d0a43218749d76a241a4e016c19c14a220a4d016619d1ca208a46f176a182d1b6d1c0822661feb22de22a124e124d2281c2a7a2cb924b0283f2a132d222440270b29032d3823c1254728472d81211023c225692d561f541c1b21732d321b749c3b92872d5e8d04a18c9fa52d2395e6a380a22c2d488db4a5b8a52c2d5e1a07a821a80e2d6b1e4ea8caa8582c18997ca8e6a8c32bf3a5e1a8dfa8372b2aa640a9e5a9e22acfa500a9ada9fc29eaa57ea9bda9df29e4a593a945aa5629d2a554a90daac428faa553a90caa5628d1a528a905aaf927c0a514a906aa48277aa5dda8f5a996265da5afa8d0a9f6254ba597a8d7a978250aa58ea8f9a92425dea484a8faa9a624bda47ea812aa49246fa452a8eca9c42359a43ea8dea90e232ca410a8a8a9132217a4dea796a9c82102a4b1a77ca94d21cfa383a75da9d820a2a38ea75aa9792081a383a74fa94f2075a38fa753a9252034a3ada76fa92120d1a2aba77fa9b81f4ca26ca73ba91a1ff6a103a7fea8371e96a1aaa6baa8b31d56a15ea675a8441d00a111a624a8971cada0b0a5d1a7361c55a04fa582a7c81b07a0f9a416a7371b709f9aa49ca6ae1ad99e44a428a6201a3e9ee7a39ea5ad19e19d74a30ba599197e9dfea2bca4f818609db3a277a4b7188b9d6ea250a47a180d9e0da210a44218079f00a2dda34a181e9fbfa1bba31616008056931594df0b00252729f42aec2abd25d4288c2a342c7c248e282f2aa82c63233f276629cb2c6f227e251428162d922040217d244a2df41d83176d1d5c2d08139f9dc79b452d1997c3a106a10b2de59d48a499a3d52cc59d04a59ca58d2c1399b2a63fa7932cd69ebca855a88a2cf39ed4a8b1a8132c14a43ba960a9682ba5a485a9e0a9282bb6a54ea9c3a92e2a1ea51aa966a9742946a533a9efa9f8287fa52aa9f8a99c2863a50aa9dda9482871a5faa8bea9dc2767a5c1a8a9a91b276aa591a885a9712633a562a87ea9d025faa42ca849a95b25cfa40ea83aa9b224a5a402a84da96124cea41ba879a9102494a430a8c0a97f2399a42da8a0a9b7222fa4f9a7b5a91c22dfa3cfa75aa9e02145a383a732a94721fba25ca72ea91421bda254a726a9e320a9a246a717a973207da23aa715a936206ba237a715a97b1fa0a241a717a9011fb4a23ba714a9881e4ca207a7f4a8f71da9a1a1a6aca8ac1d20a153a666a82c1ddba004a640a8d01c97a0bda5f4a77e1c82a06aa58ba7321c52a00ea517a7c01b0aa0a3a48aa6ba1aab9f63a4fca54d1a099f0ba499a5ce19719e7fa30da56219f49df5a291a4ff18b49d82a253a4b9187b9d41a22ca48918849dfea1fda3c817139dd4a1c3a37d17b19c39a151a317180080d89a859aaf917b24e128512a512a47256b29a72a242cac251d28eb29462c1f2404278628b02c8c2187241926c82cb91ead1f7322e82c1c1a23979a18f22cef129f9e649ded2ce99739a2cda1da2c3a9d8aa471a4b92c879f5aa6f2a5692cb1a097a531a6de2b539fcba73ca83a2c98a1d5a898a80d2c34a4c9a8f2a8042baca3c0a835a9122a89a517a9c6a9f3299fa5a4a829a9f82878a5e9a897a9b228c5a5d3a8c5a94e2898a5dda8b4a9e32734a5b1a893a93627dea496a87ba98626e9a476a87ea9fb25d7a457a863a9a425f5a42aa86ba92c25c8a407a85da9aa249fa4f4a762a9592472a40da88aa917242aa4faa78fa94723c8a3c7a782a9cb22a4a3a0a767a93f224ea383a72aa9c2210da32aa7f1a83921bfa2eda6dca8882093a2d6a6b2a8232021a2b2a6b0a8f71f04a2bca6d3a89a1f25a2f3a601a9aa1f9aa279a748a9511f74a28da77ca9d21ecfa14aa762a92f1e4da1f3a602a98f1d01a192a690a8071daca010a634a8cd1c76a086a582a7531c2ca003a5e6a6c41bdc9f9aa481a6211b689f60a432a6b51ad29e0fa4e9a53a1afd9d61a368a5b819689dc6a2d8a43f19f59c45a25aa4e918c79ce6a10ba46b18849ca8a1a8a348188d9c74a12da3de173b9c46a111a39b17339c0da1d4a21916008060940194538d1f247d28fe299f29fb242229732b632b6c24a628572aec2b87227c2696281b2cd72037235c255d2c401dc619af1e712c0c15249d6698892c0d95cfa0b8a08f2cab9909a3d8a28a2c3e9d64a473a47f2ce29e45a5d0a4732ce09fefa5cca51b2cb29d16a784a7da2bc0a044a819a8d12aeda394a8baa82a2aa0a4e3a81ea9202a35a40ca985a9c7297fa4a7a819a9c22876a48da879a95928b3a475a83fa9ef27a7a470a80ba9282789a447a8f5a8882681a427a8f3a8fc2569a4eba7dfa87b2549a498a7d9a8092535a455a7b3a8ce240ba410a7a7a86824dca3faa681a82f24b5a30ca7a6a8f02394a329a7fda8662393a37ea75aa9cf2234a33ea72ca92a2293a29da6d0a8512131a22ea672a8a7200da2efa52da80b20d1a1d0a50fa8eb1faea1eea536a83e1ff8a178a693a8031f53a21ca7eea82b1f3fa25ea71fa9191feca18aa74ea9e61e77a160a731a99d1e71a105a7eaa8421e53a16ba68ba8791d27a11aa657a8091df3a0b8a519a86f1cada03fa59ba7061c39a0d2a401a7651ba09f6aa454a6c51ae79e00a4aea5ce192b9e2fa3fda444196f9d88a261a4d6182f9d0ba215a44418519dd6a1d8a32a18489daba18ea30b18449d40a1faa2a817b19caaa052a23417b19c3ba09da15b160080ce073e108791b724aa288e2a4c298c256129eb2a0b2b3a24a428702ab12a4f22992618295f2bbd20c521f224102cf11c289aca186c2c80125ea019a0672c068c3ea145a1502cc2962ba2e3a1312c0d9c24a33ea3222c119e27a40ca40d2cf99f6fa5a9a5132cf3a079a6d5a60c2bc3a1caa72ba8382a1ea5a2a833a9f52932a4b3a893a95d29f2a3bda86ea9f5284ca46ea8caa83c284ea441a8d7a86f2734a448a8e9a8272737a43ba8d5a88a264ca41ea8e0a807264ca404a8cea88c253ca4a6a7baa8e9240da4dea65fa88024b2a363a620a82e242ea31ea6d3a70e24e2a223a6d7a72c2436a3eda671a81724caa3eba76da9d62310a4d6a77aa9a322b3a377a70ea9af218aa208a62da84820eea141a579a7da1fdba1f3a4f5a6c41ebea1e1a492a6561ea2a110a5f4a6ec1ea0a196a500a8ef1e4ca2d1a6c9a8411f7da3e4a759a95c1f3fa30ea878a9e81ec8a131a7efa8f51df2a04aa678a8511ddba0d8a529a8ba1c98a061a586a7421c5aa0e9a414a7c51b1ba0a3a4a6a6431bc89f5ea43fa6c51a5a9f28a4eaa5711ab59ec1a37ca5021a2b9e2ea3cba45219939d98a25ba42a191c9d04a21ba48d18c09c9ea193a34c18679c32a10ea34c184b9cf4a089a2d617bf9b92a049a27c175a9b65a0cba1601600802a967197bc892f22a1274029892867234329102b5d29e0245929402bda298b23f226d428a229581a7c974e92012aad1459a18f9e1b2b178be7a05b9f4a2b4d9423a1129f862bb69778a1b4a08d2bcf9a72a2f0a1752b6a9c6aa329a35a2b509e2da42da4dd2a41a03fa580a55b2a9da1baa68ba7642954a35ba8dea87d2902a449a810a9b12831a499a84fa9992824a476a81da92c2819a42ea8cda87b274ca4f7a7a3a8a72653a41ba8d6a84c2644a42aa8e8a8af250fa426a8eda82925a2a3e0a7cca8b2244ca34ba76ea82d249ca378a6eda78923f4a387a5c2a6ed2203a2d1a439a6b12204a228a51aa71224a3a4ffa735a9202409a450a812aa44234fa2eba604a9002229a2dda51ea87521efa124a50ca7a120e9a1ffa27ea51f1fa7a1eda2f7a4ca1ecda007a44ca5ef1da7a0f1a4ada6041e7ca1dea6bda8621efea11da8c8a9481e7aa257a8fda9541e22a300a86aa9091edaa2d2a698a8a41dd7a1c6a5b6a7ec1caaa017a5e6a64a1c23a095a449a6a61bd69f5ca4f3a5321b7a9f23a4b8a5d41a479fe7a371a5851af79e96a33da5431a8a9e3da3ffa4ab19fd9dc4a2afa4a5197d9d22a22ea4e818e99c7da1a8a37d18759cf5a062a3d817dd9cc0a0dba2cf162c9c37a070a39017279c7ba0c5a2cf15a9843a8f02902f0c492374263c289b285a226e27e228bb28cf244d2a252c0729c423be28082a2f291b9d13a83ca97028939608a488a3c728ba14969d5f9d13297509329e449d8329ed92629e639cf629bb98bb9eb19c492af89a1ba0359d8a2aab9dd8a0d69e4a2a46a0bea47ea4372a17a298a79ca87c29c5a217a8c7a8ba28f6a3eda77ea83e28e7a39ca73aa8f3272ca376a747a87627eea25ca744a80b2710a366a750a8a32646a36ba759a83e264da374a767a8c0256fa380a76fa84d2589a36da78da8c02448a354a783a837240aa3e4a633a8dc2366a22aa6dea73a221da17ea42fa5be2172a025a169a2d42388a47ea9feaae5241fa286a666a8692101a3e7a51ea8dc20efa1eba40ea7792023a13ba4f4a51520ffa0b6a26ba59b1e24a126a000a38b1b119ff29fd5a1fe1a12a0daa36ba5891cafa122a7b6a8bb1e25a3d5a873aad61f3ea3c5a844aa5d1f19a30ca873a9661ea9a1cda612a9901ddfa072a5d8a7671ca8a0bea4e2a6ff1b47a097a4caa6451bcc9f46a465a6c41aea9ef9a3c9a54f1a539e87a369a5a319dd9d24a312a50a19679d6ca288a49518f89cb0a111a41a187b9c43a1b5a34a177a9c13a171a31d174c9cdea00fa3e616769cc0a0a7a2ee15409c8ca0bba25c17299b45a049a2971600803c93a09217176e21b924f9253a27fd20072475255c277120bd22bc254a27f9180496c91de324a01f25221c24d02b431b661d7720ce28eb18481aaa1e88286016e515121d6228e211a48c0f1b512821893f93a31957280f93f5931e1a9a287595e08e691d3629ee9d57a39da0fc2934a208a853a84328c8a037a6fca60627d0a0a2a550a6fc2625a1cea57ea6d526b8a12ea617a79d2608a278a672a754267ea287a6caa7d725aaa28aa6dda77c25a2a297a6f8a70e25a0a290a6f3a7d024a3a294a603a87d24a1a28fa614a846249da28da611a8c4239da256a69ca74a23f1a218a697a76022e2a034a47aa50c20f2869d8bb49aa916629fa7a1efa3db1d12a1e1a4f2a5052027a028a4d1a5f11e89a0dda3bfa5201e30a199a2a7a4661cd29ef69b959f491a6598c81c361f7618f49d549c36a0c51516a438a98aabcd1fe5a3c2a965ab6f2025a229a875a9561fd0a15aa64da8f91dfda165a559a7121d5ba1bca484a6731c5ba039a4eaa5f01bd59fdba363a50a1b2e9f77a31aa5b01aea9e0fa3f3a4541ac29eb5a2c9a4c819889e6aa296a48719349e0ba252a43619ad9d8da1dea3d718209d4da15ea36218c39cfaa0dba2e0174f9c9ca06fa27517329c72a024a26016849b20a010a2a9159a9add9fc5a19816008070907c90701037207d23b9247325462011249125a126f21c331f24213324fd14ed19731cc61d341d4d219e23b626e11c032042234128ee19081a542049284e15748ce81c5a28bf880b99fb0d6128a796659dd19a4b28d19924a03d9f4028199ca8a059a04027809c24a15da1b024069ea7a2d2a27625259faaa3dda3d925a49ff2a322a4dc253aa051a47da4c725d5a0a8a431a593255ca113a5c9a555259aa14ea532a6ef24e4a17aa573a6bd2401a28da596a63d2432a2a9a5d5a607243ca2bda5faa69d236aa2d0a522a76a23afa2dda546a7fe22f5a2e7a570a7ca22caa2d8a597a7fe2144a110a5f6a6c920df9e4da340a5731e559f80a2c7a4ca1d689fd2a2dda4f21da89f31a33da5d31d1da0eea39ba5de1d51a03aa41ca6fa1dbf9fa3a3aea53e1ede99219b299c511c1d202e2a532bd99b8aa74bae30b0092410a15aa7a1a8a61fcda0c7a4f9a6f81c58a06da410a6591c319f1aa4b0a5081c6e9fd0a36ca5521bd39e5ca31fa5e51aa79e09a30ca5ac1a6e9eaba2cca4521a5a9e76a2a1a40e1ae69df1a153a44c19639d8ba1f1a3f118e09c10a153a35418af9ce1a0f9a22d18689ca7a08ea2f517629c78a05ea2bd17249c56a03ba28217319c37a0f9a16217d89bff9f07a2a016f49a459f59a10d1500006883cc0868032e1f8922e024ec247d1dd021e62395259f192f1e74203e24271a271f51214622ef1efe200d2410265d1c2220bd2295276819bd1a201ff827f4155e123a1a1428ac0e5795970d09282194949cfa980228ca98e59f139ff627809ce9a198a21b27a99b42a1c4a18425689ce9a01da1f724c09d9ba175a11125ee9e3ea299a2e324c59fe8a2cca39f244aa08ba329a47824a0a015a49ea45024efa05aa415a5202434a193a46ba5022475a1d2a4ada5a623a3a1f3a412a682239fa11ca543a6102398a143a585a6a3226fa13ca597a62a2241a142a58ba6ad214aa12ba5cca64c2145a10ea581a6c62031a1aca40ca63120baa054a4dda57f1f0ea01aa4b1a5d81e6b9faea38da5441e759f9fa358a5e11d979f7da354a5c71dc89f73a352a5321d1b9f2da251a41e1cfe96199b6d9c1514188c9b9503995106c49c13a0baa1711737a042a267a4e91b839f5fa27ea41f1b869e27a283a47e1a459e00a274a4551a569ee8a161a4df192e9ee3a132a47f19f09db7a109a446197a9d7aa1b1a3cc18279d43a149a39b18c59c0da10da36c18989ccaa0a4a23218609c85a061a2ea173e9c63a050a244172a9c5aa065a2cc16189c42a036a2a616369c19a0d2a1b115009ce79f5da13f167c9b689fbea0da150000e1142918eb863120d221462324241f1c5620c921ae24ac19611ed0206623e01b171f3b214723d81c222062227725191cc21eb2216126b918ea1a0b1fa1264415c014171cd5262511f5918b1603278b91a99ab5981b2722995b9ff99eea268e9bb4a011a12326249b9aa005a15f250c9cd8a059a11a25419d96a112a21825099e2ba29ea2c4249e9ea7a25ea374241e9f10a300a41824999f61a33da4d22314a0f1a39aa4822368a03ba4fba42d23b6a073a451a5cf22f1a0b2a4a7a58022f7a0caa4d5a55a22f7a0e1a408a604221ca1e9a440a6d12135a101a55ea66b212fa103a57ba6f820f0a0dfa454a6972086a096a4e6a5092015a03ca498a52e1fa99f0ea463a5c51e1b9fa9a33aa5271eee9e5ca316a5e91df39e36a313a57a1d2a9ffda232a5181d079feca21ca5e41c509faea28ba4451ce09a0ba085a18518bb97559d26a0a816569c9f9f53a20016d69da0a03ba33017c99d65a110a41219e09d8fa131a44f19089e84a132a42219ff9d6ca10ba4fc18cf9d4ea1f5a38e18d99d30a1bca367189e9d13a1baa30f184f9d01a193a3ea17049deca094a3c817a29cb8a04aa37617289c6da0d7a29316999b23a06ca2bf151c9bb79f31a26d15009b7d9ff6a1e714299a319f39a24f143d9af49ecea1e6150c0dc61b8e1da220ad2385247626f82979252b255d26842b212873249825a22bf628e12208241c2cad2955203821f62b972a891b941c572cf42a2b97d791ab2cb42a049e589f8e2cf3290ba245a2142caf2955a5aca5e92802283ca7b6a7262c152121ac9cac872eb7a48faa92ab292c68a683a8a3a98b294da85ca8e6a8772959a81ba8a6a82529aca71da85ca86d28f7a571a74ba80b270ea6dba8c0a8e2258da60ea9b2a9d721ada621a8c0a94a967da5c5a797a9c52721a603a9aca90329b8a8dfadc0ae209d4ca7b4acd6aec22836a3d4a924acdd26f3a273a8bfa999253ba2fca53fa80423db9d52a1c8a30824e9a3d1a732a9a72137a1bca6b2a8312063a1eea520a81020eda06aa596a71e1f3ea151a56fa79a1ed9a006a52da73c1ec1a0c3a4dfa6d51d6ca091a488a6451d34a068a43ba6051dcc9f35a41ea6821c819f11a4dda54e1c329f0ea4a0a5f41bd59edda366a59e1ba39e88a354a5361b8e9e3ea31ea57f1a7f9e03a3dba4371a119ea2a2b3a48f19c09d6ca29fa452194e9d4ea273a42919309d4ba260a4dc18d49c20a253a4ac18a29ce7a1daa374184f9c6ba110a31618229c43a1f4a2d917319c29a1f8a23a17059c11a1e5a28e17fa9bcfa08aa26016939a50a0f7a15215c39b36a046a1421500802d927191da941f24c7268228da297c2560277b28fb2bda269b2578277f2b942842253b269a2bf3293b24cd25a92bd12ba2223b26112c982c3d21e924f22ba52c4f2037238b2b422c281ee4207d2aea2b251dc221552be929a89dbd95982c4522dca9ddaaca2ccba1efacaead1a2cc1a664ab4dac642b34aa4faa97aa4f2ad0a8b9a8aba82c2900a8fca689a5b626a7a7caa3aba02f24fda555a1999e661e52a5e9a0f19d259303a728a37e9cae2412a599a47ba45e29a2a476a6fca6b129fda56eaa86ab0a2804a762acb6ad04262fa8f9ab91ad7428c1a5abaa73acdc28c4a476a945ab802794a4c9a95bacf725f3a46baadcac602254a361a97eabc11f23a3ada887aa921f7ca208a81baa691f32a372a75fa9951f71a279a673a8981e74a1dda520a80c1eb1a07ba5fea7ba1d52a017a57aa7511dda9fe0a418a7c91c04a0aaa4a0a6851c1ca065a421a6421c44a036a4b3a5081c5ba018a46ba5a61b21a0a6a32da5251b9c9f5ca30ca5721af59e30a3e8a4261a2e9edfa2afa47f19f99daba27ea44619a39d62a242a4c318339d1ca225a48f18f99cb3a1eea340185d9c54a16ea3f3170e9c1ca10ea32917a59bf5a0cea2f316919bb9a067a25516bf9b9ea0eea15715a69a4fa0a2a10a15859ad09fdea0df150000cf0db90fbf073526a228ea29642a7c289628da29552c0a280b281f293a2c1c28a926ec27602c6d2981250427762c6f2bcf2387258a2c2f2c90214a24ae2c2f2ca81d8621002d202ceb92741deb2cf42bd09cfb141d2d162ad9a302a28f2d7526a3a8eca8332d1da019abceabb62c94a753abebab312c87a89daaa5aafc2a6ea90ba957a98a2901a8c0a68ea629280aa8fca55da40227cca756a5c4a41226cca667a58ea40127eaa6ada68ba5a1285aa60ca873a7ec2847a682a8a8a8b32720a648a909aad225d2a525aa92ab0925a2a5b9aa50ac57258aa5f5aa7aac132511a5aeaa94ac1424bea4bdaab7ac9621bea4d2aaa1ac2e2096a417aa60ac3b1faaa411a953abe31e23a472a83aaad81e34a3d2a791a96a1e5ba228a703a9de1df1a1a9a6c0a8ca1d83a151a69ba8cf1d46a1ffa54aa8261dc9a07ea5f7a7fd1c89a018a557a7531c34a0e2a4c9a6181ce19fb6a455a6ce1b749f78a40fa6671b1d9f3ba4c0a5ee1af99e0ca474a58c1ad09ea7a327a51f1a8d9e34a3fda4c3191c9eeca2aea42919b19da7a26da4a918779d94a252a48f182c9d38a22ba45b18fa9ce0a103a41e18f99c99a17aa35617229d45a1d5a2e916d99ce8a07fa28116cd9cbea023a2ec15359c87a00da2a715e29c54a083a1881500004f880902b9012728012a562bfb2bed276b29702a712c8f27ce285c2a142d36273527c228de2c3d2891268128752d6129bf2325267c2d352a2120d3227e2db92bd618e81ecb2d742c5a998594f62d022ce8a10ea0bd2d1229f8a5c1a5e82d2a25a5a8c9a8442d4516c0a91caa042d97a445aa99aa692ce5a82caa6baa812bb6a9d2a970aa5c2ad5a9eaa827a99a29f8a89ea8a6a8852946a8b9a86aa818292da897a82ca82629d0a79ba841a82c2982a7c9a8c2a8c928b4a737a995a944282aa79da97caa2e277fa630aa6aabc025d8a688aa1aaccb24bea694aa50ac642344a67aaa6dace72161a6a8aa86ac2621d6a5bfaabeacda20f7a44caa67ac8120e4a496a9f2ab782057a42ba92bab4b20f4a38aa82aaa711f59a3f2a767a9841e92a242a7fda8e11dbca1cca6c6a8811d5da154a68ca8201de4a0f6a54ea8c51ca0a092a514a8ba1c64a036a5b1a75f1c3da0fea425a7221c15a0c0a4b3a6c71b0da0aca45ea60c1bce9f84a41ba6bc1a759f57a4d3a5661a2c9f24a495a50b1a819ed9a357a55119e69d63a316a501199e9dfda2daa4bc18249d91a279a47318929c08a211a416184c9cbba171a34417199c4ea1cba2cd16bc9b04a16ca28116ad9bdba000a2ec15e39a5aa0b2a1fa15679b67a022a2e0161c0356820d0bd7891628b929342bf02b50277929fc2ada2c3c27e328942a3c2d43280c2857297e2d3328ea268e28fb2d072970246926512ee22931212124702ea52a2d1ca720512e832b129e5094732ed42a88a311a1422ed8288ca65ca50a2e2425f4a753a7892d1c96fba8f4a8082dd0a59ba9eca9a32c74a8bca946aa172cd4a887a9cda9e32acea877a9a9a9f929cba883a99ca9b0294fa8f6a80aa94f2915a8efa8c1a81b2960a701a907a9aa28c6a648a978a946288da6a0a962aa8e2759a60baa3cabca2657a64eaaeaab39263ba774aa45ac3125a0a74caa5fac1c2411a675aa97ac002325a579aa85ac712120a55baa6dacda20f4a426aa47acc720d8a4c6a92bac3e20ada42fa9c3abc21f00a4a6a8aeaa401f71a365a805aa8d1feca212a8b6a9e91eaba268a73ba9351e66a28ba6a2a87c1df6a133a658a8d71cc8a1e7a51ca88f1c5fa19ca5c5a7051ce6a055a56ca7061c59a008a526a7811b04a0d4a4cba6b11a869f95a47aa6af1a289f54a413a6501ada9e24a4aca59c19649ec4a33ea54319129e4ca3eca4f218b09de8a2a7a4ae18669d8aa262a46e18eb9c38a231a42b187f9ce2a1eca3e217309cb4a1a4a32717279ca4a151a31317499c83a115a30616ca9b45a104a35c15969bd6a03fa2b21400006802980a058aa827312ac82b772c6428e729f32a6b2d3f281229552ad02d1128a228c629562e48284b27b628452e832868244c26d92eb2285d1fac22352f7029fe98381a052f102a7fa17b9dd22ea12ac9a4f3a2812eb229cfa614a6502e1e254ea870a79d2db69f2ba9cfa8542defa799a978a9aa2cf7a9baa999a9e82b9fa989a9aaa9112bf5a882a9e5a97f2ae2a8eca9ffa9442af3a8b7a917aae2296ca8efa968aa6e2965a8faa97aaaff2816a807aaacaa762872a726aaceaaf02726a738aa53abbf261da71daa72ab0b26a2a613aac2ab1825c0a5d6a9c0ab5d245fa5eba914ac9a2339a52eaa3eacbe2226a528aa50ac3422dda4cca922ac8121baa45aa9d6abce2078a4f5a87dab992018a4c1a836ab4b20eba371a87daad21fb4a30ba8cda9081f33a39aa789a9871ed5a22da72fa9161e47a2b7a6d7a8a11d7da142a66da82f1dfda0f9a53ea8e41cbfa0cea52ca8e91c84a0aca507a86f1c55a069a5baa72f1c09a020a54da7d71bb89fe4a4c5a6fb1a7c9fada445a6331a119f62a4d9a5d019a49e1ba476a518193a9ec7a31ba5d318ca9d6ca3caa48e18349dd1a271a43a18fb9c61a223a45e17dd9c02a2cca3f016ca9cc4a16fa32717d49ca1a112a30616c19c4ca105a31e163a9cfda091a232170000a00d600e3c0f5c24a827c928d229b8276b292d2b1a2d43280829f92ad82d3226aa280b2a782e4e263c27c228662e27250e256b27c92eef2464201824ef2e2d26d2980b1dc72e432809a2b3a0b02eee287da5dea48e2e262863a7b0a6632eb0254ba82fa8eb2daf1515a9d4a8722d11a695a94ca9d92c9aa8e6a9a0a9012ccda7f3a941aa4a2b04a8eda976aa932a27a8e7a97faa3a2a0ea823aa7faaf92917a84baa83aa7a29d5a73aaa98aaf72877a713aa9baa6d282ea737aadfaa0628e7a663aa5bab29275fa759aab4ab2726dda744aac8ab5f2527a7faa9f9ab7f24efa5e8a9f7ab0124b5a516aa3dac532353a504aa43accb2207a592a9fdab9c21c7a436a96fab0821c3a40ba928abbd20bba408a945ab9b2037a4cba8ecaa542098a345a8eaa9851f75a3faa75ea98a1ef3a28ca739a97b1e78a20ba71da9fa1d35a2a3a6e1a8901dc2a154a6baa82e1d71a1f6a567a8d31cd5a09aa50da86e1c78a05ba5afa7d01b13a01fa548a7631bc99fe8a4d9a6011b749fafa46aa69d1a329f88a419a6f219c99e4fa4bca54a197c9e25a470a50919329ec9a327a5ba18a89d3da3c1a45a181d9d9da25ca46717989c2ca222a4d6168d9cf0a114a41716a79ce1a111a40315739cd8a125a44c15a19cbba171a3d0150000ee0dd40f960a8724552866294b2acd26502a432c6a2df027f528a12ad62d9f266d286f29382e852534279d288b2e0024c924f926222f722235201622062ff2238092f613292f2b25a0a1849f4e2fc326f0a493a4772eac2655a7f2a6182ee623dfa809a9f62d069586a9a8a9792df1a4b5a9afa9d22c85a8c9a92eaa302c2ba804aa4eaae12b5ca826aabfaa222b9da819aaa1aa962a21a869aac8aa3f2a48a851aaddaab129a5a748aa0cabf3280ca719aa05ab4728a0a6d7a9d1aaa72795a6c6a92eab222766a6c1a9b0ab5026bea612aaedaba62541a6eda9cdabe524daa595a956ab2c24f0a5a3a98daba4231da6b3a9b7ab8a22dea594a9bcab1d2233a584a9b2abca21cda461a986ab7d2191a41ba92cabbc2017a483a882aa20207ca32ea84caa741f23a317a830aa331fc3a2caa7d9a9b11e14a21ba779a9081e96a1cea6fda8a31d40a168a689a8f21cffa01ea63ca89d1cc7a0dca514a8521ca5a09ba5d1a7ae1b55a06da57fa7471b2ba033a528a7e51a16a007a5d9a6991acd9fdaa46fa6d5196a9f9aa416a68919eb9e4ca4aca51c194d9edba34fa5ac18cc9d20a3d9a43d187d9dc2a298a4f5177b9d71a255a4fe16489d3fa214a4b6160d9defa1a9a3d815859cb7a193a35816689c6ea144a3c01500005c0cb20e5c0c2b249d27712831294f26f7296f2b7c2d56268c29232b272ed2258f28f8297f2ea7246826ae28892eff2342240426ce2ea7223e203c222e2f01239692261af22e3b22c5a1d0a0612f10234ca52ea56d2e4e2491a7bfa7de2d8120b8a8eda8c62dbd9356a9aca9312d05a45aa99ca99b2ccda6b9a91aaa302ce6a7d0a93eaa5c2be0a6dca9d2aa9f2aeca748aa69aa712abea833aac3aae5292da867aacfaa802961a724aa24abbb2823a731aa32ab27289ba608aa4fab652765a606aa5aab952655a60eaa81abe025c0a622aac0ab42256fa713aac1abb42470a602aa15ac362462a5c8a91eacb62356a583a9cdabab222ba54aa953ab3422d8a431a928ab9b2181a402a913ab422166a4bca8a5aad5200fa46ca858aa642091a316a846aa01203ea3f1a7f7a9951f17a398a760a9111f8da251a70ea9491e48a2eea6dfa8e11de4a191a69aa8701d84a13da667a80d1d25a108a63ca8801cf1a0c6a50fa8361c81a088a5c2a7fa1b6aa04ea571a77e1b1ca008a5faa69a1afd9fc1a494a62c1ac99f7aa442a6c0195a9f21a4dfa5f718209fcba370a5a2187b9e66a31ea5a818fb9d14a3f6a42018d29dcca2a5a43b17a39d97a25fa4f216929d60a21fa429161e9d26a21ca44c16de9cd3a1eea3e5140000650c2910e2084d239426c82727298626102aad2b6d2d1e273029aa2ad82d5d266928c929332e6824d126a728312e0b2329245826bd2e572106200223d02e5a2017929113cd2e411f28a265a13c2f6b1eada5dca5b52e581f0da824a8782e6f1bd1a8d9a80c2eb49b41a951a94d2d95a2a5a977a9bc2cd2a5d9a948aa202c4ba644aac6aaa92b52a86daa70ab2f2ba7a7bcaac4abbc2a6aa8bdaa6eab492a89a843aaabab4d2905a85faa71ab0829eaa741aa5aab732832a71baa54abc527b1a6f3a971abf32620a6f7a967ab40260ca6d9a97aabcb2563a6f6a9a3ab2b251aa6b7a972ab9824a5a588a995ab0c243fa565a9c5ab4f23c4a446a9b3ab9a2288a419a930abe4214ba4eaa8f7aa84213ba4b9a81dabf5205ca497a8d2aa6e203ca465a846aa212089a329a8f8a9471f15a3f5a7b8a9c71ea0a2a7a798a95a1ea1a251a747a9ed1d21a2c7a6cfa8081d6aa14fa672a8931cefa016a64ba8431cb7a0eea524a8841b93a0b4a502a8131b4ba05da57aa7951a939ffba40ca7a219589fafa4aba63e19169f76a46aa6f118e79e50a422a6bb18ba9e20a4f4a5dc18629eeca382a59e18d19d71a3e8a44c18629de7a299a4e317239da9a28da48917519d9da25ba44516e69c4ca217a4db15289deaa1e0a32716030d2118de90431bea224426a826c6280d268f294f2b502d9f254429d42a9c2d9525662899292f2efe248f267e28442e4e233c23d6256b2e6321fd1cbe21a32e101c6b9ddf13032f50140ba13fa0d62e330e63a408a4712e398fd1a672a6482e4899a2a882a8e92ddd9e73a975a9502d24a3eca989a9d12cbfa579a9b2a9df2b12a690a917aa322b6ca729aa7daa192bbca761aa81aab02a3ca83aaafdaacc293ea845aae3aa4e298fa740aa2dabcd28e7a639aa16ab7728cfa60eaac5aa04283ca7b9a9aaaa3927c3a68da9e8aa3d2647a65ca9deaa82251da665a9d2aa2725fca560a9eaaa9524eaa532a901abdb23fca5dea807ab9922f6a4d5a8ecaa21225fa49ca8d4aac0211ba46ea83eaa5b2101a45ca815aac72023a43aa8eda9702021a40ea8bea92420eaa3f7a7bea9ea1f8da3c8a799a91e1f43a3c7a781a9d91ee3a296a747a9251e33a252a705a9ca1dbaa1f1a6c8a85c1d3ca19ca684a8ee1ceaa039a647a88a1cb5a0eca515a83a1c96a0aea5dca7ef1b4ba06ba56ca7691b01a0ffa4eea66b1aa49fbba46aa6041ad89e51a4f0a57d191b9eafa34da5e3188a9ddaa2c6a450186b9d81a27fa40d18d19d9ea282a40b18b89dc6a2a0a40f18989da0a289a44917069dd5a112a4dc155f9d91a1b0a31818ef0913183e8c731bf6233f267a2778284526a929ea2b1f2d92253c29f82ad22d862413288229df2d2f23af25e5270c2ed220be2164244a2e621d8b111b19742e3718c59e779eb92e0b94eca2d1a26c2ec2987ea53fa5112e2c9ae6a708a7812e8f9db7a873a80e2eaba0dca96fa9d02df0a2b7a991a9bc2ca8a569a9e7a9932b7ca516aabbaa522b82a536aad8aad22a3ba630aae0aa552a0ea72daaf8aae429b1a6e9a9e7aa1d29bba6b9a98aaa9728a5a69ca979aa2a280ea665a97aaa6227b2a543a959aa9e26d5a532a9b1aafb2512a63ca9b5aa972559a61ea998aac924fda503a9a4aa59246ca5e7a896aaac2323a5eda8b1aa1e23f2a4cea8beaad422bea498a88daa212287a46ba837aa6e2145a448a80aaa2e212ba433a8d8a9ed201ba40ca8cfa95f200fa4f5a798a9ca1f96a381a74aa9251feea23da71da9a01ec6a22ca708a9f41d60a219a7eba8ae1d1ea2f0a6c2a85b1d7ba179a670a8e11c4da113a634a87b1c1fa1dea50fa8dd1be9a091a5b9a74e1bb2a033a545a7c01a7fa0e6a4daa64b1a2ba09fa47aa6e11913a072a436a69819909f19a4bda52819dd9ea9a34aa5c618709e45a30da532180f9e01a3dda47317bb9de1a2b7a42d17889d8fa299a447164f9d8aa279a492166b9d39a221a46f173480d8922894f91a0023be251a275428652584295c2bcd2cb8251029e82a8e2de02467289d29db2dc4237e267028f32d0d21d023ae25282e001de21af91d3d2e810d929e6b9e872e6b9c3da349a3b72ea19eb6a5fca54f2ebc9e26a7f2a7182ebe9f33a8cba8712d8fa02ca96ea90b2d6fa283a9e5a96f2cbea4efa999aa052c91a558aa0cab892bdba547aa18abb32a1da62daacbaa2d2acea658aa0dabc929e8a619aafaaa2e2901a7b3a94daa80281ca7b1a966aa2b28e0a582a9a1aa1727b3a560a9b0aa5e26daa55fa9bbaa092698a540a9faaa662541a527a9ddaaeb2407a5eaa8a1aa4324e1a4c6a88eaacd23efa4c2a890aa3223efa4b3a87faa922274a46ca81daacd2125a450a80daa3721f8a33ca818aac820b0a31ea8eaa995208aa3ffa7d3a925206ca3b4a79da9df1f2ea38aa75da97c1f1ea380a748a9241ffaa28ca72ba96d1e73a258a7ffa8051efba11aa7c8a89d1d74a1d0a693a8241d19a15aa646a8a21cd3a0dca5f1a72f1c94a08ea584a7c31b7fa04ca54da7521b51a0f9a4eea6cd1adf9fa2a4a7a6451a399f56a462a67519a39e04a43ea60119289e9fa310a6c018d59d51a319a63918aa9d0fa38ea583177e9de8a2c8a44717659d7ca242a4d215989c09a227a43c16249d29a219a44b170080b390128fc91cea21632789280a2947257729232bd32c39250f29c12a792d3c24f6277529942d6a230b267028d72d782175226125142eac1d1c18091e202e1c1491a0af9f1b2e4d9a19a4b3a2042e04a063a681a5f92d3ba07aa76ba7462d21a146a8cda8f52c19a203a9b8a9bb2c3ba26ca951aa712c9ba307aa7aaa302cdea43caae5aa962b2aa509aaedaa942ad6a564aa4dab1f2a2fa64aaa3fab8729cea5d9a9cbaac928c1a5c1a9c4aa4628bca58ba98eaa9327b3a551a958aad8269ca521a92caa322674a5efa82eaac3255ea5e0a82baa34251ba5cba821aaa824d9a4b0a83baa4b24a4a4a3a840aa85236ea470a823aac12247a44aa804aa1e222fa429a8dba98b212aa404a8c1a9ff200ea4d7a799a9cc20c5a3a3a771a9592095a3a8a769a9f51f7ba383a75fa9b01f67a38fa74aa9641f2da3a0a765a9771fdea2bba764a9961e5da27ea731a9111ef8a12aa7f5a8981d96a1cda6b4a8211d5ba179a66fa86f1c18a12da630a8191cd0a0bca5eda7861b64a056a58aa7ee1a01a0fda423a7691a5b9fa7a4ada68919e09e47a434a67119519e05a4b3a50f19f49d70a318a5ae18829d0ea3bea466186c9dc4a281a42d18679d78a265a4fb17d09d1aa21ca40b17179ee1a1bca30418529e90a17ba3e4150080a295a69824812e2594298e2b6b2bb825ab29ec2aa22c6f242c29ae2afc2c8623ab278229482d2222bb250c289b2d07200a210c24c12dc01b5c910319bc2dac8c4fa08aa0982d319b8ea3f4a3762d4a9feaa59fa5892d6aa108a817a8732d9ea22ba8e9a8a92cf1a20ba969a99a2c53a322a9d9a9032ccca4e0a953aac22b23a5f0a9b3aa392bdfa57da93baadb2978a5d4a9d0aa9329bda5bfa9deaa052963a582a977aa7d2872a55ea941aa272883a54da937aa9b2789a503a9e9a9c92669a5cda8b8a91c262ca59aa8b6a97c2500a572a893a9f024dfa45ba872a97d24caa43aa896a90424e1a458a8b3a99823bda458a8cca9a822aea444a8d0a91b2269a422a8c5a9822112a4e4a775a94321aca3aaa744a9c02053a386a745a99420e7a27ba738a92620cba26aa72ca9f51f81a240a70fa9891f8da24ba718a9b31ee2a274a721a94a1ec4a249a728a9d41d4ca207a7f7a8481d9ea1a9a6a8a8151d1ba152a660a89c1cc8a010a637a8481c94a0d2a5fda7061c68a078a590a77c1b29a012a514a7841ad89fb9a49ca6021a689f70a422a6a5199f9e11a4bea52b19209e82a329a5c618f49d0fa3a0a47d18b09da5a25aa4e8175d9d5ea23fa40c185a9d14a214a4cd16099dd4a1ffa375166f9c2da16aa33b1700802a98ce993504ce245f291c2b112bfc24f129462b9c2c4b258728392ab42cda233d27ad280b2dae21a2242f263b2d8b1e2b1f29226b2d25188b9a9d92852dcf8ce6a083a06e2d749a04a4bca3572dd69ef3a5d7a5302d0ca16da78ba7282dd7a30fa838a8d02ca1a36ea84ca9512c9ea337a9d5a9142cf7a420a9fea9cf2a3ba5e0a89ba9ef2914a60ca9c2a9632942a540a948aa06294aa584a943aab82860a54ca92eaa3a287da52ca92daaa02756a509a9ffa9e12639a5cda8e6a95f2625a5b1a8c2a9db252aa593a8c7a958252ea55ba89fa9d724afa414a881a97524bca41aa87ca9252488a419a89ea97b234ca412a89da9fa2223a4f0a797a93322fba3cba77da9f92182a375a73da9702127a352a712a9b420eaa213a7fba84920a7a2dca6cba8cd1f33a2baa6b5a8081f0ba2afa6c5a8351f30a215a7fda8ea1e7da2a0a761a99d1e53a2c7a785a9251ed4a156a74ca9831d43a1dca6daa8eb1ceda075a68ba86d1cb3a004a635a8fb1b8ba07ea56ca7351b47a0fca4daa6791adc9f9ca47ea64f1a749f58a43da6f119e19e12a4f1a59119249e97a382a53119989ddda2e9a4be18459d7ca269a47b18fd9c10a215a43c18a69cc0a1bba30f189e9c7ea151a35d173f9c4ca152a32e17429c14a1d0a22a1500803892da93bd87192437298b2a3f2afc246729a22b0a2c3b24c4285d2a3f2c7122b8266228842cff2016230525bd2cdc1ca117c01df72c740c019fb79d0e2daf9719a2eda22d2d069c49a49ba40a2d149e18a59fa5e62c5da01fa61fa6d32ceaa097a7bfa7ce2cfca0c8a787a8db2b8aa233a9a2a9d62b20a497a991aaf82a92a48fa985aa582a5ea4a1a975aac12972a54fa913aadc28efa4f5a811aa3e2800a5d8a8dba98a2704a5bfa89aa93027c9a4aba876a99026b1a472a875a9d72587a42ca824a95b254da4d3a7fca8e72440a45ba7d0a87b2440a438a7a4a8112403a416a797a8a82307a455a7d7a84023fda3c2a768a9bd22d4a3e1a788a9282267a37ea759a99121d2a2e1a6e6a8c42063a24da687a81d2028a2e4a52ea8831ff7a1c9a513a8601ff5a1eaa534a8b91e3da27ca67ea88c1e7da225a7f3a8461e5ea260a714a9e61d39a2bda747a9de1dcba1a2a732a9bd1d9ba152a7f3a8211d4ea195a684a8b21c41a129a655a84d1c1da1ada502a85f1bbda041a575a7301b38a0d0a4d5a6951a9f9f6ba437a6ae19dd9e00a49fa5d018309e42a307a55d18819daca271a40d18489d42a229a4af17289dfda1eaa36d17059dd1a1a6a3b717fa9c6aa126a3dd16629ce2a06ca20117629c4ba0fca188160080158d1790b38020253f299f2ba1298625ae296e2b3c2b15240429d12a4b2bad22bd26f928022c6f207b216424792c981c989cda12e22cd41272a141a1ed2c5a958ca2a7a2df2cc499c1a326a4d92ce59cbea481a4c82c609f49a556a57e2c3ca1caa6d1a6432c36a261a8d9a80c2c77a2baa8b1a9cc2a56a467a926aa9a2abca418a9fca99029b4a440a9efa9232994a410a9a9a9732880a4d2a899a9c4278aa4afa870a92f2784a492a852a97a266ba46ba84aa9ec2557a434a828a93e2543a406a8f0a8cc240ca465a7a6a86024c2a3bca64ea833246fa351a617a814243ba35fa609a80e2452a3dca658a8f623faa3daa720a9712355a418a85ba957221fa4f3a76aa90721a7a297a675a8911f32a297a59aa7741f0ca201a5e9a6561e05a2eaa4baa6611ee2a114a5eea66e1ea8a19fa5d2a7771e0ea2c2a6a4a8501e32a3c7a768a9071e5aa30ea872a9b91dcea15da7f6a81d1df8a092a68aa89a1ce3a0e3a52aa8fb1b8fa072a5a7a7391b5ca01ba531a7221b1ea0c4a4c0a6301ac49f6aa44ba6bc19519f30a4e2a57019af9ec2a372a509192a9e22a3d2a4ae18bd9d9aa26da45518309d1ea21da40e18c29c9fa18ca39e175e9c3fa11aa33017389cefa084a27716629b70a029a29816f69a3da0c4a1ac140080e091ad920786f3229128042ae9287a234429842bad29492597299d2b212abc2155267a28ed2971197b9af0985f2baa118ea12ba00e2c59912ea1c09f202c3796a4a13ca1442c2999c1a2aaa25b2c399cdba307a44d2cda9dbfa413a5082ce69f73a509a6602baba159a72ca8032b66a381a863a9682a67a4cca8aaa99b29f6a4e8a8c3a90329cea400a9d8a9af28b0a4cfa89ea9502883a49fa852a9c727c5a45da8fba8bb26aca461a856a930267da473a856a9c02530a445a826a9102503a418a8f9a8912496a3b5a7c0a80824b5a3eba657a82023f4a303a6a6a78422caa148a595a6a9220aa285a43ca6322391a4baa709a9d12354a4dca88aaa9522f3a214a7f1a8cd20f0a1f5a504a84820bca194a5a9a72c20c7a17fa365a5611f05a1d3a272a5271e8aa0d3a383a5681d9ea0d7a4c7a67e1d73a1d5a6d4a85a1d13a220a8e0a9751d88a24fa8f8a91e1d65a314a876a9091d1ba318a7a9a88c1c32a2dda5d0a7f21bdda032a502a7561b15a0b6a46ea6951aac9f5da40ea6191a7a9f34a4c2a5cf196f9f0ba471a59619269fb9a335a55619e79e50a3f6a41b19329edaa2a2a4c9187c9d1ca21da45c18da9c69a180a36a17789ceaa049a3e3168a9cb5a0e6a2e015379c65a069a39e15129c5ea0e3a20c16008030898b9123032c23e826ab283c287223e927432984288d25ab2a862ccc2862212926a328ad28a59b8da887a9b72877906ba3c5a2c728f014379c0a993829cc09ca9d229b392a2495ca9eb19c572a089922a0409ecc2a0c9ce9a000a0f52aea9e03a376a2f22a4fa17ca648a78e2ac0a27da860a972295ba391a840a9c728f6a350a8e3a85028daa320a8a8a809284fa3fba7a0a87a2729a3bca796a8f02683a3d3a79fa896268da3dfa7aba81226a4a3e1a7baa8b625fda3f4a7c1a8232514a4dca7d8a8b724d2a3c5a7b9a82f24c1a370a78ca8a22305a399a61aa84a2277a18ca5faa61c21649fc5a13da48322a0a487a940ab9a2537a27ea7bfa8c32070a3fca516a82f209aa23fa55ea72d203aa16da40ba6f01f13a1a3a3a2a5871f41a098a05ea3391cdb9e109fb7a1c11a30a03fa306a5c61b5ca180a661a8f01c04a3c6a847aadb1dfda2bea83caa9c1dd6a224a888a9ff1cf9a11ea71aa9e01c3fa1b7a512a8141cb7a0bfa4d0a6c61a52a08aa49ba6691ad29f40a448a6001af79e00a4c1a540197b9e94a362a5f918399e18a313a56718b39d7da2b8a412180f9df4a14fa48c17b59c76a1d5a384167b9c20a169a34116749ce8a024a39c156c9ccfa0bfa29e141b9c84a0cda27916309b21a017a20f169f85a49168900f19de217425ee26e727d5203324ba25082768205924902676280b186ba150a00b27381dd7203b22dc2ac81bd81c3e20f728971968190f1e9f28e316eb0c7b1c57286f0fcb8ca11928284f09c68c271bae27e992418dcb1b26288f97938f5e1c4429dda011a70ba7d62983a1d3a7f7a71f2895a0b3a555a69d26eda0cba586a6b22665a11aa614a7b42606a2a1a69fa77b2653a2c2a6faa70826b3a2efa60ea8ac25c5a2eaa615a82b25bda2c9a61ba8d924b5a2c2a617a87c24d2a2c6a620a84a24e1a2cda628a8f723fda2bda63aa88323d5a2d3a634a8e12271a3e8a634a82d22c0a1c4a40da6ff1f870f8212b10fc610549db79f51a24d1a94a0b0a306a5801e3ea030a4eba5e71da2a02ba42ea6721dcfa02ea340a56e1cad9db59c289fc71b5b99631c0e1d6f1ac09c768f479aaa18fba2a6a89eaa501d3aa42caae2ab9b1e79a272a8a1a9c31d10a28da65ca8031dcaa172a557a7671c28a1b3a48da69a1b52a049a42ba6ee1ada9ff9a383a5191a439f87a30ea5c2190e9f1fa3eda47219cb9ed6a2c8a43b196d9e6ca298a4f818019e15a260a470188e9dc1a1f4a33218069d5ca138a3e817929cfca0b4a2fb162b9c9ea051a29f16019c71a00aa28c15af9b43a004a262155a9ab19f7ea1da15008019933093b911412052246725f22535203724db255a26b91cb11e312121242816c41b2b1d521f331d8d21f7235627bb1c32201d237328f319541a6b207f280114e792dd1a7f289688889b2a8e74286996279e1e9b6e280c990ba0179e752884991ba0b79ed226cb98d39d619e1722639e53a220a30525149f75a320a47d250ca02ea489a4b1256fa082a4e2a47325fda0d7a460a53d255ba140a5fea51e25caa178a561a6b7240ca296a59ea65c242fa2b1a5c2a6222425a2caa5f6a699232aa2daa543a728236ca20ba663a7c322bca2fda57fa79522e6a217a6b7a73f2211a324a6dfa7c92155a2c9a5d3a7ef2057a0a0a42da60e1f759f04a3f5a4801daa9ff6a2eba4441d23a078a34ea5771d3ea016a49ea5731d48a03aa410a6781d1fa031a405a6c41dd39c1b9f7fa0551c41204a2a532ba5973ca7fbaddcafd021ffa178a850a97a1f5ca0daa400a7531c89a0a0a433a6131c0a9f23a4aba5001b779fc5a37aa5921ab19e37a32fa51a1a7d9ef8a20ca5e519579ea3a2cca49c19409e71a2aea42719d49dffa166a4cc18779d98a112a47918e19c0ba170a31518ae9ccba006a350178d9c96a0a8a2ff16849c72a051a272164f9c4da02ea2a4163e9c2ea0eba18816169c14a0f6a15f16d99a509f41a17f150080038c018952883e1f3623e624e224bf1dd9214e23cd25ad19fb1dba1f1b245d1b122059227e234a1e902110247e26221c34206e22b527e718dc19d51d0728df14678c091729287b08f9984c942d284195db9d159c2628569a3ba12ea12328609de4a2bca31427459ba1a114a29425719c64a1a2a11b25b19d05a2c8a1c8240e9fc9a20fa3b324e89f73a321a46f2458a009a460a42624b4a03da4d5a40224fda089a44ca5b12321a1bfa4c1a56f237aa1fda4fca54a2391a11aa538a6e922afa13fa586a6772295a166a5a4a6112278a161a5b6a6a0214ca14aa5a4a656215aa14ea5d1a6d32068a131a5cfa680203da1d8a45fa6d71fc5a06aa4dba5fb1e1aa019a49ca5531ea19fe6a372a5d91d7e9f9ba334a5641dbf9fb4a335a5231d11a0aaa359a5cc1cf49f03a3eda44a1c109cc79e5da0dc16e58701902692d8036b9b4b9ec1a0de1458a021a24ba4cd1a139f27a281a4e419739e3da295a4e619639e14a27ea484193c9efea165a40619449edaa130a4e818e49d9ca1dfa3a618759d55a18ea32a18139d31a126a30218d39c07a1f4a2c317999cd6a0bda27817689ca9a0a8a231174c9c76a08aa28b16409c6aa08ca20f163b9c4fa041a28215329c1aa0d4a1ea14d09bf09f59a1d3155b9b5d9fc0a01d1552080716bf189203ad20f12139233a24381c80201c22db24dd19cc1e2f21e4231e1cf11fb3210124251d7f20c2229925e51b141f882190265e18451a951eef2682140a0cdf192127700e5e97738d4e270095ac9d879c5c27de9acfa02ca1f326339ca6a15fa20d26d39b7ea112a28c259f9ca6a19ea243258e9d3ea2dea2f024489ecba256a38c24e79e33a3bda32c24829f9ba32da4d523fb9feea36ea47b2339a024a4cfa4f52283a065a454a59f22cda09da4a1a54222e6a0bfa4cfa5f321f0a0f4a4fea59e2117a10ba530a67e2122a111a56aa64f2140a12fa595a6f42049a132a59da6882017a111a56ba63420a5a0aaa40da6501f36a059a4b2a5b51eb79f12a46da5061e529fcea341a5721d0e9f76a321a5351deb9e33a318a5cd1c0b9f28a31fa5b31c3a9f24a34ba5561c4e9f0aa31aa5db1b179c7aa0e1a17318e396fc9c3b9fb815049c5f9fc4a14215909ecea03ca34115049e77a110a48c18f39daea13da4c618169eafa14aa46018e49d96a11ca44018c09d60a10da41718a89d4da1e6a374177f9d38a1c6a33f173a9d17a199a39516fd9c01a16ba3df16bc9cd7a033a3a616239c83a0c3a2c5156e9b19a050a2e814e99ab79f11a29e14d09a8d9fd6a199136c9a3f9f10a25714829afc9e88a13015000096168416cf202723822479256a2a41257126d627e52bb9269525b726302c3127d92303256f2cf727c6208a22992c2a28e9190a1dc42cf427079a4f98b52c2a271ca0f99fc82ced258fa2d3a1232d2a24e4a354a4cc2b7920e9a5ffa60d2a8aa1abac44ad782ddda489aba0acb22cdea52aa954aa092acfa602a994a9b32968a7f9a8d9a94f29c5a732a9e1a9a6282aa704a9c9a9112870a55ca8b3a88c2720a4b2a65ba8782613a334a480a29f284ca488a554a2099e6aa76eac89acd8ab2da743acaeacfda58ba64eaaa0ab1622ada761a96ca9ac2a75a692a958aaa12e17a529a9faa9ad2dfaa077a6b5a8782b20a456a861aad12200a2fca54ca8192029a1e8a5fca7c41f19a18ea59ca7961e64a16ea575a7241e1aa138a52ca7d31ddda0eaa4daa6251d76a0a6a484a6cd1c2ea065a43ba64e1cf39f3ea41aa60d1c9b9f19a4d9a5bb1b599f07a49ca5181b0c9fe8a377a57b1aa49e98a359a5271a809e5ca32ca5e419769e2aa3f1a4aa192a9ee1a2c6a40c19f49d99a2a8a4d718989d7aa277a46518659d84a25ca45f18fc9c5aa259a4d717cd9c0ba20ca40118829c8aa143a34317449c4ea145a3f416259c2ba13aa34f16c19bf5a0eea28016c59bbea085a26b15829a50a002a22414ad9b44a066a125140000f38a1303f788652522281b29492b2426362852299d2c94252e26e2276e2c782611257c26982cdd2621245f25ef2c6e289921a1247a2dd428851e97227a2d0d29a81b49204f2d7328f6182d1f992ca828c21cd522392c0c27f21a8f226a2ca594b0a931ab1e2d5da67fadafaeb42c75a89eac78adad2b8aa907abb8abb22aeaa726aab8aa262afca687a8d3a8ce28bba622a678a67f2754a6e4a4caa4d6256da46b9d2294742434a4f813b2207a22f1a495a43fa5e394dda587a92eaa78a71ca6a1aa06ac56a37ba502aac8ab1d1deba5cba995ab62269da575aa41acb52808a781aaf2ab0d28c6a5f8ab59ad28269da5e7ab40ad672200a486a943ab27201ea49da861aa041fe2a210a81eaa421edca263a751a96c1e32a27fa654a8a61d75a1e7a5f4a77e1ddca096a5bca7eb1c8ba038a554a7981c32a0f2a410a75b1c45a0b7a498a61a1c44a069a42aa6ab1b52a034a4caa5391b6fa011a48da5d21a3aa0c1a33ea56c1abf9f91a31ca5d719fc9e55a304a54119559e19a3c7a408191a9edba28da4ce18d59d97a249a44518779d3ca222a40a18159dc9a1dca37f17609c44a15fa3e7161a9c0ca1fea22916d39beba0c2a20016929bb3a083a2cd15a59b8ba00da2d414bd9a37a093a13114739aa69fbca0511400001a826e0b1b024b265829902aae2b78284c29552a092db527422829290a2da42609278228852d0128ff25b2270a2e83271c247325692e4c286b205e22602ea527f112691f3d2e9027a19ca6149d2dd0267fa00b956e2db62475a443a3932d3914caa84fa93f2d61a5d4ab71ace12c28a82eace2ac2e2c5aa8c1ab1eacdd2a6ea880aa33ab2a2aa0a709a98aa88d2902a8b4a7d7a6bf28a2a75ca536a593279aa6d1a505a5062749a61fa71fa7d32591a6caa874a99323dca6ada96eaae620b4a624aa68abe592f6a539aadcabbe986ba55caa07ac041d40a590aa16acdc2021a5f2aa85acf9200ea55dabb6ac472092a4f1aa92ac9a1ebea413aa25ac431de3a4fca82bab441d27a47ea823aa951d24a3d4a760a9401d96a229a7e7a8291d11a2b1a6a6a8171d96a166a688a8de1c67a10fa638a88e1cefa09da5eea7381c8fa03ca55aa7c61b35a0f9a4c8a64c1bf29fb9a45ca6ee1a8d9f83a40aa68a1a299f4fa4bfa52e1af19e0fa47ea5d219b59eb1a327a573197f9e41a3f5a4cf18179ef6a2aea49018d59db7a26da419188f9d9da25da4fb17439d46a22ba40217279ddca1d7a31217189d8ba16ba33116ef9c34a1eda2e115c39cfca0afa2a115a99cc8a051a206152b9ca8a04aa28614749d78a0f1a070110000498c9e87b6051c297f2ad82b8c2cd1283e2ada2b6a2ddb275729012bb92d612603287929ef2d8f254c262128892e3325f2222d25b12ebf25971faf217c2e922622938a1adb2e172721a0b39d982ead2586a4cda3212e571dfaa790a7be2d7fa060a985a98e2d40a58daa0fab1d2d86a6faaa69ab6d2c40a8d0aad1abc62b5ea8b3aa90abe32a5ba9eca95aaa1c2aaaa834a992a965290fa8caa8a9a8fa289ba7ada8baa8ad2892a7f2a81ba92c2895a751a9eba9c42627a8dba9ecaacd2497a826aa7bab822157a7a0aa28ac921f33a6a5aa27ac2a20fea576aa19ac5b2000a65baa2bacdd1fe6a5b2aa7baca71fc2a5d0aa6fac0f2021a558aa46aca11fbba4a2a9ecabc01f45a413a902ab671fc6a372a814aa681e4ba305a861a91e1ea4a242a7eba82a1df8a1c8a6aca8d41c88a169a676a8821c06a1f2a534a82e1ccba0a3a5f9a7d41b8da046a58aa7be1b6fa014a517a7e41a39a0dba4a9a6831a2ca0b4a462a63d1a02a08ea429a6f919af9f62a4f7a54a19569f42a4bba50719cc9e00a46aa5b9183d9e9ea333a57218ed9d2ba3e7a42f18689dc0a28ba4e117ba9c0fa217a42717569cb8a175a34016139c45a1d0a2d315af9b0ba16ea29315c39be9a010a20c15d39a5aa0bba19015959b70a0c6a106160000308cc2822e87b627712add2b592c5628662ac92ba12dda275129de2aaf2d0c281f287329452e96261f27a028e12e8d2649243026662fc224dd20f121762f1f2430936514222fbc22dea21ca10a2f7620c9a5a7a5c52efe121ba8e6a7652e829f05a956a9022e9ca533aa95aa782d95a79baa2cabe02c13a8e2aa73ab572c86a89daa68ab8b2b32a87faadcaa7f2a3ba815aa33aa8929faa7a2a9a0a91829c1a769a9d6a9b3283ba777a902aacf27e4a6b6a9a2aa4f268ea6f5a903ab332583a61eaa90ab682490a638aae8abad23c8a637aa25ac0022c8a69daa56ac1321faa5caaa7aaca62062a5b5aa93ac142054a598aa91ac0b201da53baa5aac0220cda4cda923ac2a1f7ba441a9c8abb21e0ca4afa8b5aa491eb5a370a8fda93e1e48a30da8a5a9b21dfea268a72fa9251d97a2a4a69ea88f1cf9a140a65ca84a1cb9a1f2a522a8091c72a1aca5d6a7151b16a179a58ca7ad1a94a02aa526a73b1a41a0f3a4cfa6e919dc9fa8a470a68f19719f6da41aa639190e9f35a4bea5f7189b9ee8a356a5ab183d9e75a318a56718d19d18a3d0a424186a9dbaa286a4db17f59c51a242a46017919c0ba207a477164f9ccda1b4a33416419caaa165a31f166f9c8ca118a31715eb9b64a10ea3f314d79bd7a03da241140000df87dc02a0827a27682a172c8d2c9f28892a012cd92d23289a29562b982ed8270129432a212fc727b927f128472f85268d249126db2fb0242e1ee220e42fbb224e9e7794b72f0821a4a326a1952f671d30a656a52a2fc69175a808a8922e05a261a943a9e02ddea53aaa8aaa682d0da77caae6aaa42cd1a7c8aa1cab462c30a8ffaa4eab172ce0a8d0aa2bab2f2b64a88daacfaa5f2a51a880aaeeaaca2940a846aaebaa122919a842aa2fab6c28eaa725aa2bab802750a74faa3dab632602a74aaa8cab7a2511a733aa8fabe02485a630aab2abe9239ba5f8a9bdabb92252a50aaa0eacc52137a538aa34ac76213aa52faa30ac0521f5a4c3a9e9ab6a20e8a45da976abe11fa0a42ea946abdb1f33a4dea805ab311fdfa37aa879aa881e71a312a8d3a9de1d1aa39aa770a9691dd7a22ca707a90a1d30a2bba6baa8ad1c57a140a67da84a1ceda008a645a8521cb3a0c3a52ca8151c85a0a5a506a8d31b6ca07ca5c2a76f1b1ba03ca556a7901aea9ff1a4eaa6331a8d9fb6a458a671191b9f69a4e2a51819a59e2aa47aa568180d9ebea321a51918969d40a3bea4ac17109dbca26fa42017e79c4da224a42216d49cf2a1d3a35c16c89cb3a176a31816db9c87a10ea37015c89c2ea1cda28a15279ce6a065a25a1500006506e30f5409bb26d429292c642cf627af2ac72c102e9f27de29c92b9d2e2b26f0287b2a372f9225a8272f29372f4924b8245d26a42f2121b81fd321aa2f3c1c429e9394c42f9119dea45da4d32f6f9198a7caa7892f1d9ebba8a8a8182fa3a26fa9a1a9602e39a53baa6eaaa62df9a6a1aa7aabe62c81a72fab1fac932c9ca73fab30ac1b2c68a8dfaab9ab0d2b4ba8eeaa7fab682a90a8dcaa87abad2912a894aa34ab1e293aa751aa24ab7228f3a660aa27aba627b9a686aa6cabe426e3a6baaaf1ab1726e3a6cdaa36ac4125c7a69faa26ac942498a663aa14ac762365a641aa08ac8422eaa523aa28ac172251a5faa93bac3721d0a487a9bcab8c20bda430a945ab2620b6a419a92dabf01faca419a958abba1f68a4e1a8fdaa361f0aa457a807aa541ebba304a85fa9c91d5ca39aa72fa9c81dd9a22aa70aa9631d58a2cea6d6a8fe1ce3a166a6aca8a41c79a10ea664a8041ceaa0b7a50fa8681b8ea071a5a9a7f91a2da03ca543a7901a03a004a5dea6391aa69fcba489a67a194f9f95a421a63c19ec9e61a4d4a59618989e28a476a55b18499ee6a32aa51818b69d50a3cda494174a9da1a243a44116cd9c21a209a4c915959cfaa103a41815b99cf7a105a48e14799ce7a11fa460149c9cd6a17ba3901400002109e410770154265c2a222c8a2c96271b2bb62c1f2e8d278b29c92a3f2e2326c128af29092fe825d327c328792f5e247a2494260630d720e51da720d82f6e1d5a9c7f9aff2fd115bda21ea3ea2f949a57a65da60d2f4ca0b0a814a9d02e04a3dca954aa782e2da552aa38aba62dfaa5a0aa82abfe2c67a7f4aafeab862c4aa8d6aabfab0e2c7ba8e2aa78ab0f2b79a8dbaa73ab852a36a8f2aa89abf129fda7c6aa69ab572962a78eaa80ab982845a774aa77abfa27f6a647aa2fab0927cca64faa65ab3e26b3a639aaf1ab682521a716aa0eacc12422a600aab8ab372497a5e0a965ab6e23dba5c7a992ab332209a6bda9b6abc921c7a5a6a9c2ab1d2139a596a9acabd820d5a46aa976ab912091a401a903ab1c203ea47da872aa2e1fb5a335a85baaa51e4fa32fa83daa711ee9a2efa7d7a9091e1ea25ea777a9781db0a1f0a60ea9c31c59a192a69fa8681c20a144a64fa81b1cdba0eaa511a8231bb0a0b8a5cba7bf1a6fa08ca576a7691a2ea04fa536a79f190aa022a5dfa66019b19fe9a485a61719499fa7a42ea6d218f49e59a4cda575185f9ef0a360a51218d79d4aa3e6a46717a89ddba2a7a4f616939d98a280a490166e9d59a236a44116099d01a2bfa3e0147e9ccaa1a6a36f15949c4aa1bda20c1600000402390f04825d25d1287e2a3c2850269c2a4f2cb72d7126dc298d2b692e9a25b028e029f02ebd2411279428362f3c2358246026d02ffa1f3e1cb2201c30681a139e959af92f29986ca331a47a2f6e9e71a68aa70d2f2fa184a829a9e22e97a25da9fea9272e4ba42baab1aa9d2d79a5b2aa70ab002d2ea81dab91ab932c44a831ab93ab212ce1a7cbaa6cabf52a08a813ab74ab682a54a8f9aa89abd92959a8d6aa9aab2629e5a77caaa4ab7d2860a765aaadabd72716a76aaad0abbf26cba662aab1abf125bea670aa05ac4625e8a670aa11ac9b24cea646aa08ac1c24dda5f4a919ac01237aa5c8a912ac602287a59ca9b0abff2126a56ea941ab4f21dfa452a914ab0d2195a429a90bab7a207da4c7a896aa162043a470a837aadd1fdfa32ea832aa371f8ea318a8ffa9781e49a3c9a779a9ff1dc6a261a715a99d1d65a208a7d5a8391deda1a6a692a8831c7da135a65aa8291c23a108a633a8e81b03a1caa507a86c1ba6a089a5ada7041b79a051a558a7241a3ca005a5eca6bd1927a0bfa485a65e190ea07fa433a6a918c29f3ca4d8a55818559ff4a37ba50918819e7ba311a50f18f89d0aa3e9a401177c9d98a28ba47f165e9d59a242a42216489d2ba218a4f514e49c0ea20fa4bb14ed9cbca199a33a1200004902750f4982a622562628287e288f26842a122c8f2dd526b5291a2b3f2ea726de282b2aef2e02252d27cc28f22e36223a2433267f2ff61d0b1c9520882fb30eaa9f419db72f6b9c82a48fa5912f15a04ca754a8242fb4a1c9a88aa9132f90a399a922aa5d2e30a414aac0aa8d2d40a582aa7fabe72c5ea75fab02ac982c11a872ab43ac292c45a895ab24acc12b97a72aab59acd82abea767ab20ac212ab5a7f6aaf1ab5a2903a89aaa94abb228b1a755aa87ab08286ca73eaa85ab4b27f8a625aa9dab90268ba629aaa3abdf2547a630aac6ab3e2532a617aaf2ab8e2426a6f4a987ab0924ada5b3a982ab1c234ca57fa99dab4e22e0a452a96eab9a218ba415a9efaa45215ba4eea8e0aaae206ba4d0a8e8aa72204aa4a0a8beaacd1f17a462a84eaa4c1f78a33ca8fda96b1e22a306a8b7a9051eb1a2b6a799a9a01d98a253a739a9db1c25a2eca6c7a86c1c8aa17ca679a80c1c08a130a652a8fe1acba000a62fa88f1ab1a0cda50fa8341a89a088a595a75419f69f06a506a7d6186f9fafa48fa677181e9f6da453a62d18da9e52a413a60918429e21a4eea5a317119ee4a365a5da17979d52a3dfa449174c9df1a298a4c6163b9dd7a291a48c165c9db4a27ba44915fc9c78a23aa47d14379dd7a19ba3d1140000d60ba11035010222f12553287b28ac26b22a332cb62d90259429232bdc2d7425c528232acc2e00254227c928062ff0223123f625252fec1eaf1861202c2f7e8e58a1409f742f6c9ec0a460a42e2f24a1b2a6bfa7a52edba3a2a854a9d72e07a5ada964aa732e8ea52faa23ab782d71a590aa99abf22cc3a72aab06acb32ccea716ab03ac3e2ce8a7fbaa9fab4f2b53a713ab97ab992aa4a73eabe5abde29a9a7ffaae5ab44295da7bfaadfabb42801a784aa9fab3228f2a637aa5cab5c2750a7e7a90caba22670a6afa952aba22515a698a924abf024f1a589a90fab9b24b5a58aa910ab1224a0a568a916ab17236ca513a91babf8216aa4dfa805ab3a2136a48ba8abaacc2029a481a820aa8a201ca479a81baa4f201fa44da8ffa9072030a415a8d4a96f1ff4a3fda7b2a9131f83a3e8a78ea9531e14a3c9a77ea9ae1dc2a29aa73ca9691d45a25da700a91d1dd6a11da7c4a8711c46a19fa681a80b1c10a13ba64fa8fc1bc2a0f1a532a8741baba0caa5fda7081b5da06ea5a9a7141a05a010a507a79c197f9fb6a475a63819c99e5da4e3a5c818489ec0a372a54018e99d1ba31ea5b6175b9ecaa2efa439176c9eefa2d3a43d171d9e00a3d0a4b217259ed1a2a6a458169e9dcca19ea3ea145d9d48a156a3c5170000e20afd1169075923072674280828d9269d2a702c902d98255f29dc2ad02dc4243428b529632e942347262928ae2e9e20d720f123ef2e3f1c9c989793402f918e1ea2a1a14a2f149dfba4d4a4062fa5a029a7aca7882e48a29ca8e7a83a2ecea461a9b4a9b52dfaa41eaac9aa522d46a559aa25ab912c3ca7deaabaab642cd8a6e7aaafabe62ba8a6b2aa72ab022bcba692aa97ab212aa7a6b1aab3abaf29cea664aa62ab042905a71aaa2eab6f28c6a6daa9deaad82748a6a9a9ebaafa26e9a595a9d6aa152628a688a9e1aab22529a68ca90cab15253ca65ea9cfaa8b24f6a527a99aaab52395a50da9abaa14234ba50ba9a5aa81220ba5eaa8aaaaea21b3a4b2a894aa8f218ea478a83eaaed205fa466a80daa6f204ba450a8e9a937201ba436a8d6a9841feca319a8d2a9a61e7fa3c5a76da9221efaa25ea72ba9961db6a255a722a9491d61a237a707a9031d17a2eca6bfa85f1c8aa17aa674a8fe1b49a129a631a8591b27a1eaa511a8e71ae5a09ea5c3a76c1a93a03da550a7ed196ba0fca4e2a685192fa0b4a48ca6c61816a081a439a687188e9f29a4bca584189f9ecca351a53118469e63a308a54817f59d24a3d2a4f716d29df8a2aca4ab16b19da9a293a4cf153c9d8fa26ba40b16739d46a214a4871600002788a30327087e23fc250528c627a0256b2a112c212d26265729122bc72dd5249028d929652ee423bf26ab289c2ef8200f236125bc2eaa1b1812a619e72e5f97daa175a2fa2e719f73a5d4a51d2f94a1a3a736a89b2e67a271a82aa9442ec7a347a930aace2da2a4f4a923ab1c2d57a57aaa70abab2c58a618ab28ac612c4aa6fcaaebabc52bb7a60cab05ac0c2b9da7e1aa85ab4d2a12a890aae1ab99299ba764aa8dabf128e9a622aa28ab46283ca70eaaddaacb270aa6aaa9c1aab626e6a584a9e3aafd25f7a58fa9d9aa8225c1a58ea9ffaa1b258aa559a9d6aa73241ba509a9a1aae223d9a4e2a89aaa2d23dfa4e2a8a3aa4b22cba4b8a877aafc2177a489a82caa492141a45ea817aabe201ba448a810aa5020efa323a8f4a91b20ada312a8bca95d1f83a3dba794a9021f3fa395a75ea93d1e27a38ea745a9f61df1a294a722a9ac1d84a253a7f2a8471dfea110a7b8a8e81c8ea1daa681a87e1c4ea167a646a80f1c12a1eda5fba75a1bc1a09fa588a7d31a98a05ba539a76f1a56a00ba5e1a69619f59fb3a4aba62719589f67a475a6c7189f9e09a443a66118139e9da30ca61718ca9d52a308a63717989deda299a547168d9dcda2aca41a168d9d6da225a43715b99c10a21ea4bf15689d34a215a448170080fb91ff939614962450294e2b632b9c256d2a3a2c412d4c257b29062bc42d752406288a291f2ea12344265d28662e0f218d21dd249d2e911b7d988813b02ef3965ba33ca3ba2e539e9da5aca5882e73a10da8b5a7602e26a3f6a8fda8d92dc3a45ea9c3a93d2db7a4a4a9a6aaac2c90a4cfa9f8aa422c58a57baa69ab0a2cfca5deaac0ab542b1ca6f0aa14aca52a3da621ab35ac442aeea5acaae4ab5a29d4a557aa8aab9e28bba510aa3fab0f28b2a5c8a9faaa4b27a6a588a9baaa57268ca553a9a6aae52589a53ba97caa48255fa52aa970aaec242aa5fba878aa3024dda4d8a85faaa5238ca4c7a860aaef2258a48fa831aa2e2230a467a816aa922125a44ba8f6a90d210ea421a8d8a9812001a4eaa795a90e20b4a3cea76ba9be1f70a3a6a75aa9fc1e6ba3a7a742a9c61e4ba392a743a9811e07a39ca750a92c1ec4a2c1a75ca9cd1d5ba28ba728a95e1df6a12ca7e7a8ec1c96a1c9a69ca8301c7ba166a65ca8a31b3aa127a61fa8941ae7a0caa5d6a7101a93a06da57da79f1924a00ea521a72f198c9fb0a4b1a6ce18ef9e5aa446a66b18559e16a4bfa51b18ea9d7ba31ba50f18999d25a3d4a4ad17629dc3a287a444173e9d81a26ba46f17589d25a214a40e163a9dcda1a0a38116739db3a1cca39f15008057996c9b090b5f25a629aa2bb62b2826e32a512c132d822480290b2b612d2223f8277729ce2db421d725e0270f2e131fb520f322342e681866988b995e2e8f9649a2f5a2552e8e9d53a566a5322eeaa092a703a80c2eeba2e6a82da9de2d0aa439a9e1a9442d88a478a927aad72c26a5efa9a0aa3c2c7fa663aa1dabec2befa683aa9aabf42a8ca65daa57ab172a25a67aaa99abad29a2a532aa41abf2288ea508aaeeaa7b2894a5c1a9c7aa0b2888a572a97baa39277fa540a951aa6d2658a508a919aac42539a5c3a8f8a9302506a5a4a8daa9b024f7a48ca8bea93c24f7a487a8dda98f23eea480a8d1a90723e3a47ea8f5a91a22b6a45fa8eba9832183a437a8c1a9392119a4f7a77ea9a720e9a3d5a758a9392076a3aca74fa911201ea3a1a728a9501feea271a71aa9041fb7a255a707a9b31ec1a25ea718a9e51deaa28ea736a98d1db7a25aa721a91f1d12a20ba7fba89c1c73a1aca6afa82b1c1aa169a661a8101ce5a02ca631a8931bafa0d3a5eea7961a85a078a580a7941a43a021a51da71a1adc9fc2a49ca64519769f7fa42ca6ee18c59e18a4c2a57d181f9e87a31ea52118be9d10a3a2a4be177d9db1a261a456172b9d60a248a410173f9d2ba21aa45316dd9ce2a103a408163b9c33a114a4d3160080f9966d9a2a0d9026d2297c2b9f2bc225cf2a582cfa2cbb242429e72a1a2d23239327eb28992dfb21cd247126e92db01e081dfb20102e7b13629e789cfc2d599879a3a8a3012e179d7da5a7a5e32d53a039a78ca7ae2deda166a8d8a89c2d8ea43aa96da9452d54a46da939aa932c79a46fa976aaf72bf5a4e6a9b8aa522b9ca556aa3eabe82a07a663aa3aab1e2a7aa5fca90eab232902a5e5a9ddaa9c2825a5c4a9c1aa332876a5a2a9b5aa9f276aa552a969aaca2660a50da92eaa0f2652a5dba808aa8f2542a5b5a8e5a9072532a576a8afa9af240ca539a87ca92e24e5a442a882a9c523aba423a87ca9e82289a41aa870a9682244a40ca862a9e7210da4f5a773a96721a1a393a742a9dd2048a35ca70da92f20fca243a7fca8961f9ca201a7caa8d01e49a2c0a6b7a8921e0ea2c3a6c8a8591e30a227a7fea8151e5fa29da76da9c01d46a2c9a770a95b1df0a16ca72ba9cd1c5ba1e2a6d1a84c1c03a198a68da8c91bc8a024a63aa8041b79a08ea593a7491a33a018a501a7b319dc9faba489a63a19759f6ba43ea6e518199f2ba4eea59e186d9eb2a381a5a018e19d1da3f6a44718829d94a28aa4fd17129d14a224a47517b59cbca1dba31d179d9c74a169a35e16459c39a174a314173f9c09a114a3ad140080349244944104d624a8291e2b622ada243a2a072c1e2c91243e29fa2a992c6e225927b128412d9e208623b924992db21bda11b31cce2db58cb2a024a0bc2d7c9a26a4d3a4d12d8f9d88a51ea6aa2dc69fb4a64ca75f2dc5a1e3a743a84d2d9fa29ba846a9ff2cc0a2f0a8c8a9452c2ba4c3a98faadc2bf6a42baa42ab2f2b3ba5a6aabaabca2ae8a453aa5fabcd291ca5cfa9e1aac6280da5a2a9beaa3d2859a578a990aaaa2736a550a96daaeb2606a514a93aaa3f26c7a4d1a8f5a9ac2590a473a87ea932255ba404a811a9c0243ca4bca7e5a856243aa47da7d8a8e92313a430a7c3a86f231aa497a7dea8b12218a4dfa745a93422eda30fa87da99c2190a3d4a754a9072105a324a7f6a87d209aa26ea68da8b01f3da2fba538a8751f08a2bca508a8cf1e16a2e6a516a8361e96a260a67ba8121ec7a211a7e5a85f1d8ca269a722a90d1d37a2cca752a9b01ce6a1bda736a9511c98a179a7eba82d1c48a19ea67ea8271b2fa134a643a8901a14a1bba5d8a7f019afa03ca54da7dc1924a0dfa4afa6ff188f9f7da432a69a18de9e18a4a0a5ba17389e57a318a59b17809dbfa27da41017439d5aa22ba4b916139d0fa2efa37b16e59ce2a1c1a3cc16e19ca3a15ca31816969c34a1eea25916249ca4a080a20016008060910e94d80e4225a9297a2bdd291925692a132c512b50249b29822b132c6c22b126f628732caf1f9b209723012ded1b759e9999562dae0cc5a2cca27a2d159964a4a8a47d2db59c58a589a5632d559eefa559a6362d74a0e2a649a7fe2c0ba26aa8a3a88a2cbda366a928aa4f2c0ba499a9bcaa572b63a4a6a9daaa722af6a4e0a9d6aaa22929a5d1a9e4aa2029c8a4a2a989aa9028c2a458a93daa0b28e0a407a9f7a90c27c2a4e8a8d5a965269aa4a3a8a6a9a32570a46aa883a920255ca439a844a9ad2426a4cba7e0a8422410a427a788a81924c5a3b5a64ca8eb23afa391a61ca8d023e0a3b0a648a89e2314a484a7f4a81b230fa427a878a98a2107a40fa85ea93b20d1a2f3a6b8a8891f31a2aca5f3a7e31e21a2ffa4eaa6531e21a205a5baa6d81de5a13ba51ca76d1da9a1a8a5d3a7761df0a194a6aca85d1d09a3b6a74ca99d1cf4a204a886a9691cc7a17ca7f6a8131c2ba1c2a693a8a31beaa012a62ca8901a90a092a5b3a7e5195ba02ba53aa7e9192da0cea4c6a66f1901a07ba437a604198e9f31a4c3a56318f59ecba35da568185a9e3aa3dca41618e69d90a272a48017619d1ba21ba48816d89ca5a19aa32c16639c49a11ea3d715389c05a1a1a29c15609b79a02da25c15eb9a3ba0baa1cb130080a8914a935f8196230d29942adf280524d529b82bf2295525bd29c92b9a29b1208225e428c2295218b29a4c9c252cbd8bf6a166a1aa2cd5948ca23fa1f32c8498e8a3f3a21a2de69aa9a4c5a42f2dc69d4ea58fa5f12ced9f3da6b9a6c22c4aa191a71fa8352ccca2a4a85ea9bc2b1ba456a954aadd2ab8a49da987aafe2904a593a971aa3b29d9a460a949aab9281ea526a9e3a93b289ca4eda8c7a99a27dba49ba850a9ad26eba48da89aa90a26b6a4a8a89ba97e252fa471a864a9f0240ca446a82fa95024fda317a808a9d323faa378a7b2a8d82206a485a609a8292230a26aa596a64d2252a2eaa3b7a5d0223ca475a7a8a8fd22b5a408a9baaa3b218ea349a7d9a89c1ed2a1e5a5e5a74d1eaca196a5d1a79a1f60a113a4d8a5531fdaa004a335a58f1db3a0cfa387a5d41ca6a0b1a4cca6551c48a1b5a6dba83c1c13a228a8e1a9db1b7aa236a8cda9641b4ba325a879a91e1b00a35aa7d1a8641b33a2fda5e9a7791ae6a02ca509a7f91920a0c8a48aa67719b19f7ba426a671196e9f3da4d4a52519379f03a472a5e018e99ea7a32da5a618b49e42a3f1a475182c9ed4a2ada431186d9d28a219a4a317d39c71a16aa36c16899c14a123a32116a69cdda0e2a29f15309c7fa025a3e514e99b52a0aca28b140080ef940f96c11278225a279b28bf280d2336288d29e4284f25422bd62cd12826207224fc269028d39d43a837a9ed27fd0956a131a201280418fc98818f9528850ad99d73999a29a6989aa0d89ed02b4c9b5aa2eba1622c0d9d76a393a31d2c07a024a53ea5912beaa15aa809a9dd2a7aa338a942aa7629d6a3f5a8e7a9da28fea3aaa86fa97828dfa393a84ea90528b5a358a821a97c2792a32ba809a9b826b9a336a80ea96026d3a33da8f7a8e2250ca429a805a9602514a41ca8f2a8ee2429a40ca8eda87f2422a4fea7d3a8ed2339a4aaa7bfa83523f8a312a77ba846221ea26aa61aa8f820dba0dfa456a6c721ffa4daa809aa2c26a1a119a814a9a120aea3e7a50da8fe1e37a37ba567a7721f40a188a420a6201fe3a00ea47ca5221fa29f90a0d5a22a1e259f1ca083a2b21a78a03da3c6a45b1a2da175a640a80a1af4a2d1a85eaa481cd2a2aea814aa421cb5a22ca871a9d51b29a25da708a9061c80a1d6a516a8d01acda0e9a4fda6ac194fa092a489a64719859f45a41ba6e118e69ee8a39fa584186b9e75a355a54318439e26a316a59117c49da2a2d3a418172a9d26a27ca4a516ae9c9fa1d6a336167d9c44a158a36a157a9c04a114a33715719cd4a09fa2a214199c6ca090a258144c9b1ea0daa16f14f98797910090cd1a01222f26a22728280c2182242e2670270c21ad240927f9280f18009f9aa08a29161c642081211d2a081bb91cbb1f28291f1957182d1eec2884155493a2197728d408d195a514e826308f939204198c25d891e2123e1c60250b99a9957c1c1128eca2caa813a9a1298ca07fa66ea70b2786a0b5a556a6512612a1f8a5a7a66c26a8a173a648a74c2636a2dda6dda71c268aa223a71fa8d025afa22da72da85425c3a208a738a8fc24dba207a73aa88824e5a2f6a632a82724ffa2f1a646a8a123eea2eba632a8392305a3e0a644a8d1221fa3f2a64ba836228fa270a6fda7852155a150a555a63b203e930e9517987913869ce09d96a1d51753a0a0a36ca5ae1c27a00aa47ca5141dbca040a447a61d1dbca049a338a57f1cb39dae9c089f461c769a791b2c1c791bd59a3b1af59057155ca254a809aad31a76a48caa23ac011df4a2b7a8d3a96d1c21a26ea644a8ac1b8ba136a530a7ae1adca0a6a484a64d1a29a056a445a6e019c19f03a4a3a57019189f7ea311a5c018da9e10a3e7a47a18a09ed6a2cba45618549e8da2a4a42718cc9d2ca286a4d317609dc1a114a46017ef9c68a157a38616879c03a1c5a21e16299cb8a04ba2d315149c86a0ffa1cf14f59b5fa002a28515819abd9f60a121150080d1930d94440c32209424e925282620216824f32539270d1d1d1ff2207724c2163e1cd61de11fed1caf21e823c427671c17209e22a82857198619db1ecb288d113b98610ea5289d91309da599b1286797ad9f669d9128089ac2a001a02f28d897669f489eaf259e9069985d964b1f259dcda032a12024159f22a3baa30c2525a022a4a0a4372592a05da4d1a40925f6a0cfa450a5f02472a138a5f5a5b424c7a178a58ea65624f0a1b7a5c7a61e242ba2cca514a788232aa2eca547a7272340a21ba66ba7bc2264a22fa688a75a22a6a21ba69fa7f121d9a228a6b8a7ca2114a320a6f1a75e21b0a214a602a8ce2016a184a5f3a6751f9a9fbaa334a5641dbc9f18a3f0a4cf1c1fa090a33fa5b81c55a014a497a5ae1c35a02aa408a6e21c35a03ea412a6651d829d27a0c8a1651cf21ed129922a7c10c4a6a4ad48afcb1e5ba32ca908aa2b1f9ea0d0a4e8a62d1b8ea069a41ea6951a549f2aa4b1a5371a919fc6a36fa5dd19d09e4ca32ba581198d9e08a306a5fb18599eb3a2d5a4bf18329e7fa2a6a49a18bb9d0ba25fa44818569d9fa112a4f717e19c26a177a34c17b59cd6a00da37d16b29c94a0aaa22316c29c7ea039a29c15839c4ca014a2d515669c3ba0d4a158153a9c2da0d9a1ab154a9b6d9f38a1a6150080b08e728dbf0b9d1ecf2318254125ae1d0d229623d12554190e1ea6204624681cba2083232924a21dce210624c626431c05202d22d9276c180219521d35286611c995040e4d28c08e7c9c6c997228c097a99fdc9e7b28429c54a249a34e28ec9db1a354a41f27e59b69a21ea3ca25c09c2ba26da2f224849d96a226a29d24c99e11a36da35f24a09fb9a350a4192432a013a494a4ae238ba06ca436a56e23d6a0b5a482a5172318a106a5f0a5d0225aa129a52fa6762271a160a56ba618229aa166a5b4a6e1218fa185a5cca678219ca184a5daa6112178a16aa5caa6ce2081a163a5e7a65d2088a155a5eca60d2055a1fba473a60a1ff0a085a4f5a5361e45a02fa47fa5941dc69feaa352a51c1da89fc1a33da5b01ce79fe9a34da5781c11a0d3a34ea55b1c64a040a323a5c81bf49d3aa108a3db186b8c4e9093922204449a4f9d66a0c11327a004a262a4ac19fd9e6fa297a475194f9e48a295a455194c9e3fa27da4ff18239e21a27ca48d18209e01a245a46718dd9daea1dfa3cc17689d6ca178a35b17129d2ca112a30417de9cfda0daa2c516a79cd3a0ada28c167d9cb3a0a5a260165e9c79a077a2b7154e9c63a064a231154e9c46a02aa20f15419c21a0daa17f141b9cee9f64a11215859b639fcaa01f141e05ac151619030d6720f72157236924411cad20b422e124681aa81f70212424a31c2c2021227024611dc6203723d6257e1b011f9221f226fd17ac19581e49279e14528cfb167e275e082a9a1099a2272897199fb69f9827ae9b13a2c3a21627779ca4a29ca338266d9c5ba250a3b925089d95a27ba34125cd9d22a3f6a3da24799e5aa301a44224239f7ca332a4b723ce9fdea37ca42f2308a01fa4c1a4e42249a04aa420a55a2289a08ba479a50522cfa0c2a4c5a5ab2100a1e3a4eda55c210aa1fba418a608211aa12ca56ea6ec203aa135a58ea6c52045a153a5baa66e204ca15da5d4a63c200da122a57ba6821fc1a0d2a416a6d61e5aa078a4b3a5f51d01a030a467a5531d6b9fe9a338a5c91c169f8ca31ca5901cf49e48a319a52d1c1f9f3aa324a5151c2f9f31a362a5e21b459f42a36aa5361ba69cdda026a25d182997ff9cd59e0915d09b179f7fa1b1143f9ec6a03aa32413039e8ca13ba45817079eb6a159a4db17fa9db8a15ca4ac17c89da1a12ca47517979d84a118a43817949d71a1e5a38516729d4ca1d8a3d615579d39a198a3b0151e9d14a170a38815f09ce2a018a3c815409c8ba0a0a2f214cf9b1ca01ba28714239bbe9fdaa1c913389ba69fb7a1f612f49a5e9fe7a16913eb9a4b9f68a1a914a2172b1ed61e0f23fc237d253527992a352516279428072ce82504274228b02c6a25f9245426022d3b254721ce23652dae242e11a41ba02d07235e9ff99e912d842023a39aa2652d5c1c90a456a41d2d2f91dba4b8a4902cc19fc5a67aa7892bd3a531adaead312d08a63bada0aece2d3ca64fabf0ab182c06a7e5a98caac629b1a7b7a990aa3e29b0a773a942aa912863a79ba967aa79283aa667a8d5a81728d3a337a592a4b928d4a30da0451ee62b6aa8f8acf1adad9c54a601ac97ac519847a3eea853aa9c9c80a498a8fda9c6a65aa56ca880a881abe1a450a7b1a831ad2ba578a7e3a89eac6ca3d4a6b3a8aca46fa544aa7eab8b202ea2fca520a8a01d7fa1b4a5ffa7221e42a17ea5bca79b1d7fa178a570a7811d1ea138a527a7b01ce2a0f1a4e0a6611c80a0a8a486a6121c2fa070a439a6a81bf19f3ea404a6c91aa19f17a4cca5761a659f09a4b4a54b1a299f05a487a5b819d19ea3a362a56f199d9e6ca338a538196f9e3ca313a5ae182f9e05a3efa47c18029ed1a2c1a4f9179b9daba299a4b617739daea269a40617189d71a25fa4c616cc9c18a20fa46816889c8fa15da34816599c5fa170a38515149c36a150a35c15ad9befa0e8a22115b49bcfa064a290146f9a65a004a2f611aa9b60a085a1cc1200001317541a9d1459258128432ab02b722798287d294f2de625d327c928552d6725b4255127a92d97250b245425052e9425e420b223722e59245512c31ec72e1d22b29d1414a92e031e929f2f9a272efd1acf9cbd94782dcf11ad94291fe52c0ca4a6a8eda8982d09a850ad77ae772dffa8b3adc1ae752c09a9d7aca7adcd2ba6a8faabaaac552a5da7cea973aa5d2987a673a7eba7b528a0a575a403a41228f4a3b59b091a8728e7a596a1bd9b55258da6d7aa38ac06a486a6deaa4fac09a8e9a4d6a889aa33a973a451a85da90baad7a589a869a957a93ba526a947aa23a898a579aafeabc3a6c1a526ac73ad07a199a5f5ab2ead0e1828a324a974aba91d68a377a84aaa6a1daba2eda7fba9511d7fa248a743a9e21cf2a165a643a89b1c5ba1daa5daa7451ceaa096a5a3a7131ca7a03da539a7a51b40a000a5d3a6341b54a0b1a477a6c31a66a075a419a6c91a6da04aa4d0a5731a62a017a4a5a5af1940a0dea364a566199a9fb0a33ca5db18d99e78a321a59c18639e2da3eca46e181b9eeea29ea4d517dd9daaa250a47217a09d43a224a47016599dd9a1c5a30316839c65a151a307161b9c0da10da34015cb9bf1a0d2a22315ac9baea0a2a2eb14da9b83a018a2ee13cc9a1ca06da17a13759a6c9f80a088115c0cd216ba17aa146e26c4294f2b252ca127202a672bad2d68274429a62a582ea32655288029e12efc2552260428492fa3232d224424422f04230419191f292f1f208b9c7594fd2e851c3ca1e09d9b2e2f18a6a3a8a12f2e5c9e2fa6a6a5b72d6aa471a9d3a9602d61a761acfaac6d2d5ea8ccac97ad0a2dbfa84bac06ad312c84a8dcab91ac1a2b00a824aa87aaf5298fa755a8a2a8712903a79da61fa7d12843a6a3a67fa670272fa65ba887a80a2438a7a0a97baa3e1c09a76faafeab5b9f54a64daa1aac5ea35ba5c9a93aabcea4d8a48ea9e9aa7aa4eba4d8a951ab0da073a5b0aa28ace7969aa559abacac0816eca401ab7facf51abaa4f0a90aac921ac3a4f1a801ab751b34a467a80eaa981c3aa3dca764a9e11ca1a221a7dea8b91c1ca296a692a85d1c84a15fa670a87a1c34a1f5a531a8301ccda0a1a5dba7471b8da03ca54aa7c61a38a0f9a4dda65b1afc9fc9a483a60b1a609f82a411a6b219209f56a4c2a56a19cc9e1ea479a51519b49ec1a32aa5c9189c9e66a3f3a42e184e9e1ea3aca45117199edba27fa40c17b29d84a25aa4b216439d1fa221a4be150e9db2a1b9a35915009d65a151a31015cb9c27a107a3e414a99cfaa0b4a24614909cc0a08ba22014509cb3a088a24d13e69c48a061a183100000218dd087480263299a2bae2c152d9828aa2ba22c2d2e5627db29792b872ebd26d028eb29382fbf242c26e827d22fa422a4228424ea2fff21871cc01fc02f221ec49c9e94722f9a175ca39ba2aa2fb89dd5a68fa6052f4aa3efa835a9432ed4a536aa18ab052ed4a649ab3eac6f2dfea716acb2acdf2c84a813accdac482cc4a872ab3cac722b5da9e9aaaaab852aaba819aab6aa89290ea874a9e2a9b028a1a74ea9bfa9262893a78ea95aaad22693a709aae0aa0624d0a787aa9eab261d9fa8a9aaddab89912ea7bdaa4caccb9781a6aaaa25ac5a9739a781aa09acdc1620a66aaa15ac421b56a5bbaa50ac011c3fa5ccaa48acf21c1da54eaa1dac2f1eb2a48da9a3ab6c1e3da4f3a8cfaa261e7ba36fa802aa711d30a308a85ea9571d99a23ba7e2a8701ceda1daa69ea8271c81a168a669a8c41bfaa0e4a531a8241bb9a097a5dba7b21a87a043a591a73a1a75a00da513a7e8193ca0d8a4b9a69a192ba0c1a478a65f190ca09fa44aa62a19ac9f72a40ea68518689f49a4d6a54f18d89e13a48fa50d18609eb4a342a5ff16039e41a3f6a49616719dd5a28ca43416c89c2fa210a42616599cb6a170a33e15099c4fa1e2a2ee14d59b21a19ea2c314bc9bf5a01fa23514ea9a61a0bea1c5146b9b60a0b1a1971500000d8d2186bc86ef274a2b842cdf2c6f286e2b6f2c662e6a27102ae72bbe2e7926a128ff29562f40258927f92810301324a423c7252130701f9e19b11d203036902ea115a10830d79d78a582a5ca2f9aa1d3a739a8822f5ba422a9cba9f32e73a577aa1fab482e09a831ab16ac6c2d14a8f6ab9bacfd2cd8a808ac7fac912c51a8c5ab34acf92beba7fdaaa3abfd2a0fa870aaddaab129f8a71daabaaa0529bfa7fea9a8aa342884a706aa0aabcf26fda631aa6aabeb24c0a663aabdaba123b2a655aa06ac7321c8a665aadbabd31f87a641aae2ab2f1e21a696aa1facda1db4a5b5aa56ac491e61a5b5aaa3ac7e1d5ba580aa84ac9d1d22a537aa4bacc01dc8a4b9a907acc21d7ea43aa986ab861d45a4cda894aa5a1d12a471a8dfa9621d9ba320a8a3a9f01c0ea36ca722a90b1c77a2afa697a8e81bfda165a658a87a1bada101a622a8f11a66a1b8a5d1a7031a19a179a590a7b019a8a02ba530a750195ea0f4a4d8a6091902a0ada472a6c018769f79a420a67f18309f48a4cda54e18c69e16a475a51018749ec7a333a51017059e53a3fea4a716879df5a2b7a44016eb9c6da25fa45216889c0ca20ba46f155d9cc9a1c0a33315569cbda1a0a328157d9c9fa161a32214069c69a126a37e14e99bc1a00da2ad1200001b89f60220862d28202b542cb72c9228e72be12cad2e54284e2aee2b4b2faf275729922a01307f26282806293e30322401246f256330d71d9313db1a4a304c904ea10ea04030e39d37a535a5313074a26aa883a8e12fc0a4f1a9c5aa652f46a614ab29aca52e3da7baab6aac012e06a809aca2ac4a2d7ea8dbaba1ac932c88a89fab4eacd32bbba869ab0cacd52ab1a842abe5ab202a7ea82aabb7ab7d2965a8d2aab3abb22832a8c5aadfab072800a8cdaa09acb8265fa7d5aa1aac7f2530a7baaa14ac492405a78aaac9abe22262a663aaebabd221d6a567aa08acef209ea563aa20ac962062a55aaa26ac45202ea517aa14ac941ff9a4b3a98eab551feaa47aa92fabc31eada43da907ab4d1e56a4e9a8c2aac11de9a388a864aa2d1d75a320a8c3a9a81c44a3c2a757a9531c08a352a7efa8621c32a2d1a6a2a86c1b65a149a661a85a1be2a000a63ea8f01aafa0cea529a88f1a8ba0b1a508a8491a76a07ba5c0a7fd1931a037a54aa7a419fc9ffba4e9a6e718949fada454a69918159f6fa4dea5e117919e20a46ba55517219e9da30da5c516b09d1da3b3a45316319db1a26aa4f3150e9d3da22ea40415f59cf2a1e9a34915f89cb8a162a31515f29c71a1f0a2e314be9c16a1a5a29114439cbca024a2f4133014ce1872191a176727092a132c7a2c4828ee2b0f2dac2e9327892a372c5e2f28263329bd2a01308a259527262917300024c723d0256030921c62138d1d4c302c9c2ea36da24730f6a04ea7a6a7403034a3e0a870a9083096a4c5a9a9aa6d2ff7a59daa6eab712eeca7b2ab71acdb2d40a8e5ab9cac362de7a812acb2acb02ca8a80fac97ac432c4fa9d8ab75ac472b90a8c8ab51ac512a33a837ab0fac5929d8a7f6aaceabab284ea7a4aac7abf8272ba7beaacfabd226fda6d4aa07acba25f4a611ab5eacff24dba62eab80ac3d246ca60aab62ac5b233aa6bcaa32ac382265a690aa28ac56210da64aaa25ace02051a5e9a90eac0720c3a46da983ab151f95a443a91fab961e91a422a93dabe31e80a41aa943ab221e48a4dda8eeaa311e0aa46ba81eaa7d1de4a31ca872a90a1da7a3c3a729a9b41c1ba351a7f9a8621c99a2dda6b5a8101cf7a189a696a88e1b71a118a653a8f71adba0c5a517a8721a95a089a5a4a70d1a36a040a552a7ad1903a017a5f6a6f518b79fcba48fa6ab18599fa0a433a67418f59e61a4d2a5b4179a9e34a487a55117659eefa344a5e816d39d58a3cca45416419d7ba23da40d15d59c09a2eba3a814ab9cfaa1f8a39014b49cf7a1fba31f13709cf5a10ba4d413819cbda17da368126a0c70187a1909165c266f2a2a2c972c1928de2b0a2dcd2e1a27f529be2b032f2e262429672a0430a625ba27f5283930a22396221b252530ac1e3313b11a3130cb9539a14aa13e3089a074a5b2a6003045a397a801a9792f4ba503aadeaa042feaa513ab2bacc62e0ba79eab8eac332e72a899ab63ac272d1aa9fdab7cacb42cb3a90bac72ac242c06a904ac5dac462b49a8a6ab3bac3e2a4ea85dab26ac602918a868ab1aaccd28bca70aab17ac1a28bca7e9aa07ac4827bfa7d5aa0aac57265ca7b6aaf3ab732515a7a0aa02acab24dfa65caa11ac162459a673aaffabf422fea545aae0ab8922dfa503aab6ab7e21fca5d2a99cabba2088a5c4a9c6ab172036a5a1a9caabc41fe9a461a954ab201f96a4f7a8ceaa7e1e25a49aa872aadd1d6da34ca85aaad71d39a33ca834aaae1deca20ea8cca94f1d46a281a76aa97f1cc6a11aa711a9271c52a1b0a6a4a8a51b39a14aa658a81c1bf1a0fca527a8151aaca0b1a5d5a7b9196aa08ba57ea7741942a057a543a7c01809a028a5ffa68918d09ff3a4aba6cc177b9fc0a445a66817209f76a4e3a5e3168d9e16a471a5f9160d9e5ea3faa44816e09dfba2b5a4e415be9db1a293a49715909d73a244a44915319d14a2f0a36c14a39cc4a1bda38d14ac9c18a170a27215a8192b19da1833165a251c273628911fd927d22b112de32dda26782a202c142f7025e3286a2a882fee245727bf28ea2fb822762323252530e21c6093db1a5a3078982ca374a265303aa062a63fa72b3065a382a84aa9922fbfa4a9a9e4aa382f2ca680aa80ab722e44a772ab4bacfd2dc3a711ac6cac4d2d2ba840ac7caca72c76a806ac7aac062c69a8fbab39ac432b50a806ac37ac512a54a8d6ab4cac87293fa85aab20ace028e4a7feaa24ac1c2899a7e8aa1dac652773a7d0aa30ac572628a7ceaa23ac502501a7acaa27ac9e24c2a696aa26ac27247aa685aa1dace9220ba62daa0dac3a22b1a5dea9d7ab472178a5b6a9a1abfb2034a5a8a96dabb92002a56ba931ab2720bfa435a9ffaac11f73a4e6a888aa191f41a483a82caa751e04a44fa833aa021efba336a812aacb1d98a3f6a77aa9571dbfa286a706a9ed1c53a225a7d2a83a1ce5a1b0a696a8d21b66a153a655a83b1bf9a01ea62ea8491ac9a0c9a5f9a7641a7ca091a58ea7891962a04da53aa737192ea006a5d3a6d7182ba0c0a466a6871819a087a415a6cd17d79f46a4b7a54b17429fdca35aa5b416519e52a3f7a42e16d39df5a2c3a44315cd9c7ca29ba4cf14f19c33a25ea40815159d22a22aa4e813c59cefa138a48213f59cbaa103a4760fbc186b18c217b71628203222512362246b27022b772ce52d7827492a102ce12e65261829762a8a2f8a25df272c290430f121f1230a265a30231a7693e31a5830129c1ba4d0a3703052a176a700a83e301aa414a9aea9f92ff7a408aa08ab1d2f87a5c2aac0ab622e52a661ab3eacc52dbfa7ffab91ac362d15a84daccdacb22c85a852acddac3a2cd5a839ac9dac892bfca8d6ab6dac5a2a30a804ac8aac0c2a84a779ab59ac0f29b6a7f5aa09ac5728bea7b8aae2ab70279ca77aaae9abaa262aa760aad8abf325c9a65eaae2ab06256aa64baaf5ab912447a63daa0bacc2230ca61daabdabf522c4a5c2a97aab142253a580a952ab4921f0a447a922abec2099a419a9c3aa512074a406a9c6aa132064a4d3a8b8aa301f39a4aba898aac41e05a473a851aae51d8ba343a8f3a9921d2da320a8c1a9411dc3a2e6a783a9831c7aa26da71aa9241cf6a1daa6b2a8751b6aa173a675a8dc1a25a141a652a8df19eaa005a62fa88719e4a0dda515a84419aaa091a5a0a76e1832a0ffa408a7f317a89fa7a47fa68f16379f74a441a63716e39e4ba4f0a5ee15339e18a4b0a541163a9ecea33fa58616b49d4ba3cfa476155b9de5a283a41d154b9dd3a27ca46f15609db0a274a43b14fc9c69a23ba4f6121e9db1a167a3f112281a4a197118a8172821c5234b24f0246027612b962c4b2ef025692a092ca32e7c250729802a592fdd24ad274529d52f27224123932514301e183d9954141130269da4a410a41030baa166a703a8e72f4da41ea9aca9ad2fa5a533aa83aa0c2f45a579aa43ab1d2ec2a505ab04ac7d2dc7a6c5ab4cac102d33a812ac97aca52c54a848acb2ac482c9fa809ac91ac612bc1a70bac93ac952a5ca7b5ab68ac87297ea774ab2eacf2286da70cab34ac65281ba7d2aa10acd127f2a6a3aacfabd3264da743aaaaabdc25cca601aa74ab16255ba6d6a94eab7124eea5bba95fab16249fa596a93dabcd223ca57ca937abd021eea43fa93bab1d2165a4e1a8e6aa9a203fa4a9a86aaaed1f15a49aa84baa042019a494a852aa1c1f43a463a820aa1f1f30a429a8c6a91c1ed5a306a896a92f1e67a3e0a791a97d1d18a3bea76ca9df1c9aa285a72ba99d1c2ba24ea7f3a8061cd0a119a7bda88d1b64a19aa671a8dd1a1ea12ca643a8471ae0a002a62da8e919c4a0c7a507a8911946a079a59da72a190ba00da513a7c418749fc0a470a60d180d9f6ca4f0a58b17cb9effa395a56417969e34a339a598161f9f72a2f9a4e715a09edaa2c2a4af16369eeba2bba48f16449eada2a0a4b615aa9daea1a3a36614959d10a18da25c16201a1819fe180b187c21922346241d25b426e12a6f2cd82dde25312ae82b982e3f25ae28592a1e2f0224a826a2289d2f36209420c523db2f1218059e4e9d0f307a9b9ea42fa5f92f2fa04aa702a8ca2f5ba3fca82fa97a2faea418aaa1aaed2ec1a5efaa49ab592e11a67dab11ac972dbca6daab73ac052d0fa722acb7ac852cdba712ac6cac122ccea7d7ab79ac2b2b46a779ab61ac362a47a739ab2eac95296ba7f5aa15acd92852a791aadeab3a280ea745aa88ab6d2786a61daa8aab68264ba6fca96fabb52533a6eda965ab1c2528a6c7a95eabaf242ca695a9f4aaf523d7a543a9a1aa0423b5a543a9adaa162260a525a9c8aa852116a5f7a8bfaa3e21b5a4caa899aaad207ca496a87faa1f2071a485a82baae21f5ba46da8fca9fb1e35a44ba8f0a92d1ed9a32da8e2a9d71d73a3e5a791a95f1d2da396a741a9811cc1a26aa71da93d1c64a238a70ba9f51bf8a1e1a6c5a8671b6da180a663a82c1a37a12aa624a8b9191fa103a612a86719eea0bca5cba70b19a9a05aa569a7a8187aa006a5eaa654184aa0baa48fa608181ea07fa421a6df16929f38a4b5a50d179a9ec8a33fa58116169e63a311a58815c29d28a3e4a4cf15b79dfaa2c0a48e15b19dc1a2a3a4d214069d7ba265a47215a19d4aa2fea309160a18ac16dc176615c421c7237d2441253326e42a632caa2d5f261e2aed2b6e2ec724ba28272ae52e08240d27a4284d2fb8203f22fb248c2fbf173d9c549aae2f6c9ce3a406a5982f3da18ca759a87e2ff6a2b5a85ba92a2f61a499a979aab52e50a5adaa7dab362ed3a563ab3aac6c2d2da685ab66ac8e2c94a6c1ab60ac382c4fa7ffab94acd42b08a8f7ab8bac002b4ca885ab6dac272a39a81aab31ac622902a8e8aaf2abb828d9a67aaadeab0a28caa660aaaeab4d272aa6f1a916ab392618a6c6a9faaab825fea5c1a921ab2c25b5a5ada92eabb8246fa555a9e2aa3f2410a508a9aeaa2d23eea4eea8b4aa9322dea4eba8b6aab121b8a4d3a89faa182179a4aca87daadb203ea487a856aa49200fa464a80caaa81ff6a331a8e3a9341f91a30ea8aaa9641e87a3d9a784a9191e32a3c1a757a96c1d33a3aca73ba9bc1cd0a28ea715a97c1c42a241a7e2a8251ce6a10ba7b9a8ab1b71a1baa681a8fe1a40a16ca63ba8631a09a1eea5eda7c619c1a095a584a7611990a066a53da7181954a021a5e3a6cb18d09fc7a491a60918539f63a44da66817b89e1ba417a6dc16219ebda3dca57716ea9d6ba3e1a58e15b39d02a381a53215c09dc1a2a2a4f514b49d57a218a4a814eb9c03a21aa4be14bc9d05a2f3a335163e0b6214691514179c249029522b8f2bd6252f2baf2cbd2d8d25032ab12b6a2e7b246528d329b02e8e2373264a28162f9c207920a623452f6514779f4b9f6a2f6d9d46a50fa6552faaa056a7aca72d2f50a2c7a8e6a8a82e5aa40aaa61aa662e2fa5daaa92abb62d9ea519ab02ac282dfca53aab17ac822ca3a677ab4eac292c9ea6b6ab5cac632b7ba6aaab74ac9a2a54a66fab67acd92941a616ab36ac102933a6ceaafdab6328eda565aa9eab8827c8a518aa56abb926b8a5dca914ab0626b9a5aba902ab672598a583a9cfaad72464a562a9b2aa722413a53da98baabe23c9a40ea98aaafa22aaa4eea887aa592286a4d1a85caaab215fa4a2a847aa0d214ba476a826aa92201ba441a8e7a90320cca307a8a3a9121f6da3bea762a9b01e20a3b4a753a9f91d22a396a74ba9ca1d11a38fa73ca99a1dbfa298a74ea9501da2a2c6a75ca9041d36a28aa71aa9411ce2a11ba7d3a8bd1b92a1c0a68aa8191b71a160a650a8ea193ba120a61da88119f3a0d0a5dda7a11896a073a57da74b1834a019a523a7f217979fc5a4b8a65c17e79e68a44ea6cd16549e14a4d1a5e316e99d99a345a5f516a89d32a3eda403167f9dd6a2aaa43216269d74a283a4da15019d14a225a40815c79caca189a37b15079dc0a106a4341526016c03070e6b12fa25f529632b562bc826592baf2c882dd624b0293f2bbb2d0b23302874295f2ee721ba25a527dc2e7a1e4e1fa1210d2f4a14759f479f332f9a9a6aa4fca4322f759f2ea702a8ec2ebaa1aea830a96d2ea1a377a92caafe2d7aa404aa9daa822d39a5aaaa94ab112deaa555ab12ac8d2cc7a693ab3bac092c78a647ab3aacf82a69a6fbaa1cac1e2a95a6e8aa03ac8a2982a6b7aabaab052920a68baa9bab6d28d1a513aa50abc027a8a5d4a9e8aaa6267ea571a999aae82565a539a963aa462553a5fca81eaabe243aa5f0a823aa6c2402a5d1a802aae32308a5bfa800aa472309a5b5a811aa6422efa492a817aac321bba479a8fda923216ba440a8b8a995202fa41ca885a91320e2a3f5a766a9e31f88a3c5a740a90d1f15a391a72ca9411ee0a260a70da9ff1db3a24ea7fca84b1dcca281a715a90a1d19a39ba735a9c21cc2a25fa714a9601c27a213a7f7a8e41bada1d9a6bfa8331b56a175a66aa80f1b1aa12ea639a88a1acaa0e5a5e9a79f1972a088a573a7ad1923a025a500a7da18aa9fdda49fa68b181c9f7ca40fa6a617849e0aa493a58b17fb9d54a3f4a4d816919deda28fa4e815639d9fa256a4a615419d6aa246a4fe153a9d24a215a44a151f9dd5a11da481153f9c5fa112a4a01500006a831c0b67123b25f229672b932bca268e2ba02c902df62487293d2b672d672311284d294a2e3b22f624bc26992edd1dc6180b1fb72e548df5a17ba1b32e4f9c5fa5cba5b62e8d9f62a730a8a22eeea1a0a820a9402e87a38ea9f2a9e52dc3a461aaafaa792ddea4a2aa42abbb2c26a5aaaa82ab432c4aa5eeaa06acb92be6a515ab2aacee2afda5eaaa20acd12998a59daa05acfa2882a5a0aaa9aba528b3a54daa69ab2f28caa504aa14ab65279ea589a9b7aa852676a549a97eaad52567a50ca92faa49254ba5dca8faa9b9242ba597a8baa93024f9a46da87fa9bd23cfa447a859a9cf22c2a43fa87ba94e2291a42ea86ea9e52171a426a87aa954211ca40ea86da9d320c8a3bda74fa9522065a37ea71ea94a1feca23ea7f2a8861e84a2faa6c2a8c91d47a2baa6b0a8931dffa1bea6aba8651d07a220a70da9b71c2ba291a766a9721c0fa2bba755a9881ce6a184a70ca9241c70a108a7d2a8641b0fa1a7a692a8b01ad5a031a63da8071a8ca094a5a0a7e81831a02ca528a78018eb9fd5a4b9a62a18669f7da44fa6bb17389f3fa4fca50118ac9ee1a387a56f171b9e42a307a5ec168b9db6a294a46616179d23a22fa4e915a29ca9a1e1a30e168b9c5ea16fa356151d9c1da19ba39615419cf0a049a3951400009f1032141b0bba24ce29902bb12aa325442b7d2cdb2c0f25e8290b2c442d8f2277272729e22dd21f9323c4243a2e4d19799220146c2e1d96e1a2aaa26c2eac9cd4a5d5a6612eb79fc0a760a84f2e50a14ea8f5a8fb2d9ba2c6a869a9912d5ba390a987aa0f2d49a429aa6aab6e2c18a5d9aa00ac122ca3a50cab29ac5b2b76a53eab4eaca52a16a5bfaaccab92292ea53eaa6fabb2287aa545aa71ab502845a5dda90cab81273ea5a5a9daaab22607a563a97faa0226baa412a951aa922592a4aca8d7a9e52462a43da840a975242da4d3a7efa80a2418a4c1a7e1a8542312a490a7cba8d1221ca4a0a7eca8112222a4cda72ea9a12109a421a890a900217ea308a87fa96d203da387a728a9de1fe5a2a7a68ea81c1f42a20da63ca85f1effa1d1a50da8c11d38a2d9a50ba8a91ddfa260a662a81a1de6a218a7e6a8751ca8a279a74aa9351c2da2aca769a9e91ae8a1aea73da9541ac1a16ca7eba84e1a5ca191a670a8651917a133a620a8ef18fca0aea5ada7f11898a034a50ea77c1835a0d3a492a62818bf9f76a40fa6f516459f2ea4a5a584169c9e84a329a5eb15b09df2a28ba47815419d76a225a42415f79c21a2ffa37315c69ce9a1c3a3d015bf9cb7a16fa33015609c73a14ca30115459bc1a06ca32d150080c58ec78e6a0acb24182a082c91293425e82a512c2d2b6024e129d32b4f2c03224327d4282b2d101f74209822d22dc51974a0489f062e809392a4d8a41d2e929c0fa6b6a61c2edd9e0ba799a7db2d48a0fda733a89e2da5a173a8d3a8382d71a3a1a947aade2c6ba464aa78ab632c95a463aab2aba62bf3a49eaae1ab9e2a69a5c5aaf5abbd297aa57baa89ab26292aa50faa48ab96281ca5cea905abd92710a55ea97eaadd26dba42da929aa2326a6a4dda8f9a985257ea4a5a8dda9072559a460a888a9952436a40aa804a92a241fa495a7a9a8fd2312a42ba78da809241ba4eea650a8842334a49da62aa8622385a463a7cfa8792228a427a875a9072141a3d7a740a93d1fa9a207a7bba87a1f2ca2fda536a8cf1ef0a11ba513a74e1ee9a105a5e7a6561de5a15ba517a7e71cb2a1a9a5d3a76d1ce2a1a5a69aa8631ce3a2b8a74fa94b1b9fa2d1a76ba9f31ad1a171a7e9a8fd195ca1efa6b1a8f5190ba13ca637a8a91979a0a9a5d9a7081946a047a55ba7a4180ba0dfa4c3a6a418e49f79a434a64418809f2ba4b4a54217f59e98a333a55117859ef9a2caa42216f89d82a272a4c9157c9d0ca21ca46f15fb9cbda1a6a3b714919c6ba13fa380145d9c1da1b3a25814a89b99a040a22314519b54a0eba10d130080e29208924a165a230229982abe283424352a292c532aee24e529622c2f29e520ef242f270a2aac17039cef99112d1b9367a3b1a3e42d209859a42fa4a02d829a09a588a58c2d729c1ca669a6822d5b9fc0a6aaa7562d16a114a8b9a81f2d68a2dea88da9a62cb0a39ba963aa3a2c96a425aa39ab5c2b35a56faabbab4c2a1da50faa42ab5729c2a492a9b8aab028c5a465a935aa29289ba425a930aa7527d1a4eda8eba98a26f1a4cca8dea9d225c9a4c4a8d8a9342557a48ea88ba9ab242da45da84ca9092410a43fa837a9472302a4d0a7f7a8552205a4fba63aa8e7217ea242a5e1a6cf21caa2a1a3d1a4832209a4a6a7f0a88e2230a50ca974aa4b20f5a379a715a9051deba162a624a8631dada176a5c8a7481ffda057a403a6e51eb0a07da316a5841d9ea0c7a377a53e1cb1a0aea494a6571a60a1a4a6ada8491a51a235a8cda9d41989a236a8bda9c8183ea323a871a9dc18eca267a7d4a8db18f9a111a605a8fc18d4a03aa50ea7b2184aa0d7a48ca6b618c79f8aa438a6c118649f3da4caa57018339fe2a358a59817ea9e7da305a5d8177d9e2ca3caa48317fb9dc0a299a424176b9d10a215a4f715089d76a16da37d15b09c36a10ba3e414a89c03a1d5a24e14059c95a0cfa24a13249c43a0daa120110080159605981b132c22dc273c2929284423fa28572a3f282e25de2b362dfb286b1fec231a254f286a9f1ba83da916254809d09ea39f0122cc15bc9714180b236491d49e8b9b2b28949c6fa470a4762df29eb8a55fa6232e909fffa5cda6f32cd8a06ca71aa84c2c86a3aca9c7aa892b07a415aa8eabb32922a490a9e3aae72840a40fa92eaa5b2829a4f0a8dda9cf27faa3b2a89fa91c27e0a37aa874a97e26f7a367a856a9f425eaa35ea845a97d250ea444a836a9f8240ea434a808a9872419a412a8fca8ef2309a400a8d5a8202323a4afa7b7a8542223a447a79fa88121e3a29aa651a8b520dfa0c5a5cba7fd20f5a310a887a94125c4a0cfa77ca8202015a239a54ea76d1d96a259a54da7981edea085a430a64b1e87a0dea32da5ae1e0d9fc0a0ada2101f109f08a0d0a2141deda079a288a44c1a18a137a611a8c51824a3d7a85baa3e19dba2aca801aad21958a22da874a99919dea14ca7f1a80f1a45a1bda5d6a73619bea0fda4fca6e91820a08ca470a67a18479f3ba4e1a51f18099fe4a36fa5ae17c69e76a343a54417959e36a309a56916169ebba2cea40c16759d40a27aa43716ee9cd4a1e5a35a159f9c5fa141a38f148b9c1ba1f7a262147a9ce2a08aa23d140a9c6fa05ca20d131a9b20a0e0a11a14798384923d91a21b4022f2264f2862289320402522271428fa207b255f27b82943112a9fb5a0ac299f1cb6207d21032b5f1a6c1b571ec729e016700d201aa729df084e9b0b958529ee91a69ca39925283b960c9a309449231794628b621845208898318eb01c8b2309a441a96aaa722845a0f4a5c6a6202665a093a582a6b92549a12ea610a7b825dba1a9a6bea7be2566a210a711a88b25b8a255a742a84225e7a267a752a8f524f3a246a75ca8a424eba244a749a83324e4a22ba74ea89f23fba211a759a8212316a323a751a877222ea3ffa662a8192230a3f2a653a86521dca26ba601a8db2084a116a686a7fb1f4e996e9f51a13e17589be79e02a35617829f85a302a54d1b24a07fa3fda44e1cbba017a4e8a5b31ccfa05aa339a56e1c089e049dc19e9d1cfa9a4f1ae11ae01c3f99bb1d55174a1538a236a88ca9e21896a4c6aa4eac371a9ca2bda809aa6d1a72a132a62da8341931a110a5f8a6261979a09fa469a60d190aa056a432a6bd188c9f04a4aba56418f19e68a31aa50c189c9ef0a2e5a4fa16609eb9a2c9a4c2162a9e7fa2a5a48816bc9d34a294a43c16419dc2a12fa4db15d99c6ea16aa39515879c0da1d8a2cb14289cd0a071a21015239caba00ea20e14cd9b9aa010a24315ed9a0ba088a1ab12008084901291980dcd20f124442676263a2263242b26e027571c0b1fed20af249016561cc11df11f661d1e225c2401288c1c6120842227295d170914041a5629ce91d29dda9c6f29e598f3a0a7a055292d9c94a2eca230291d9d01a474a4b2282a9ba0a1b6a11b26868d5595a78a001c269ab09dce9d5f21f09dd5a151a2e823419f63a320a457244da04aa4b6a46b24e5a0c3a43ca53e246ca13ba51aa63324daa19aa5b3a6ee2306a2dda512a7482318a2f3a53aa7da2214a212a65ea77c222da220a6a5a711224ca247a6b5a7ab21aba229a6c1a77721e4a239a6e3a7202131a339a6ffa7c220d1a23ea6fda74a2087a1f1a583a7dc1e07a02ba47ea5f71cd89f68a305a5371c32a0baa35fa5041c5fa024a487a52c1c6ea035a4f8a55d1c48a050a412a68a1cd39c919fbda16b1b861d8f296b2ad21c35a668ad0baff5133ba49ca9adaab41df2a00aa546a7881ad1a061a41aa6ad19579f2fa498a57c19a89fe4a36fa52c19fe9e7ea336a5e9188e9e10a307a55c18479ec6a2cda42218319e80a29ca4ef17f49d20a256a47a17b89dc6a116a48616369d3fa1a0a3ff15de9cf8a031a3ae15be9c98a0bea25015c99c83a056a2cc14a89c54a02ca210158b9c45a0d6a19814809c2ca0d0a1e114519b939f8ca105150080a18df78b4a0e3c1f55247f25a1254c1efa213123ee25ab19401e91206924cb1d42216a237b24011e522257241827871c4f2042222228ec174918241d8e288c08dd992795d9282894219fcd9df728049ab0a1a8a1f5285c9d22a4c1a4a8287d9e9da46fa5c927bb9ccba34fa42d26f29cd5a20da3ce24b69d09a318a33c247d9e88a3bda301246e9ff9a37ca47f2322a03ba4c8a4442379a093a469a50223c5a0dca4b2a5ad2224a12ba521a6282242a14ca55ca6d02177a182a59aa674218da18aa5dfa64621b6a18fa5eea6e220b7a18ba5f0a6b22098a178a502a77920a8a194a51ba71520b9a180a525a78f1f5ca125a5c4a68e1e02a1bca423a6c11d66a050a491a5df1cd69f0ba448a5641ce69ff1a33aa5001c21a00ca467a5051c52a00ea466a5ed1beca0bfa307a5131b359df5a0caa2e7187b8e019140932504d798669df4a07f126d9ff9a178a45b18149f96a2a5a4e418559e5ba28da4c7184a9e4ea285a4bd18309e37a27ba40518289e16a24ea4c717e59dd0a107a4cd16809d76a15ea36316219d29a1e9a28d15dd9cf2a0b9a25215999cc6a08aa22315669ca0a088a2f914589c77a045a2ce145f9c58a039a251145b9c3ea002a23714579c26a0c6a177134c9cdd9f6ba15514669b5b9fcca07e130000f8159118f50f0d1f77226923b324411c45213823f824631b4d20f421a724311d82209522e424621d03217a236726271b071ff421392733170a19351ec5274211e995270e0728aa8e299d589c0f28b09805a15ba1fc27999c70a371a48227119d15a4cba4c326189da3a375a4f225959d8aa352a43525e39dc0a35ca497248f9ee4a380a4e423019f01a4a8a41423a39f2ea4c3a4872211a044a40aa5412258a08ca468a5ba21a0a0b5a4c7a56d21e9a0eaa4eca51321fea006a512a6c22001a116a530a6a0202ba143a582a650202ea14aa59ea62c2038a172a5d1a6c41f3ca167a5d7a6711f05a145a5a7a6ea1ec2a0f2a436a6fb1d66a087a4c7a51d1d1aa042a47fa5d01ca69f0ca44aa5531c359fc2a334a5d11bf39e61a31ba58c1b069f4ea333a5ea1a059f3aa366a5a31a5e9f67a36ca5141a429df4a025a272178c98359db49e9c148f9b4e9f97a15f14c29de1a077a30e11fc9d9fa157a42c16239ee2a17ca4cf160d9ee3a174a4a516cd9dcea142a479169a9d96a129a4b0158e9d7ea1eba38715629d4aa1d0a3d114469d38a19ea3b214139d13a16ea39014d49cd7a001a3d014259c82a079a20e14dc9b35a00aa292135c9be99fd7a13313ae9bf99fa5a16b12a69bb59fc4a179112e9b719f37a10d148f1c3b2296236925a9249527ca28a62bff242528c928522c98250128cc28252da024e1256e27ab2d032407226d24292e9f2074980c135b2e97154da3c5a2952e639ca4a5d4a55e2e46a04da7c8a7112ea1a296a7fca7662d18a488a887a9792c26a820ad1bae202d0ba879ad87ae942c65a73cad83ad1a2d27a81dab1eacd829d9a700aaf5aad02856a7cba9a3aa6b2842a7aba958aa6828c0a4b9a764a8302830a5dda08e1b292b9ba734ac30ad5527bea6ffaccfadc91ffda275a8bfa93e215ba3c8a6a7a86f201da39fa79da8d71f0ca2c4a78da8201d12a010a6f7a73795b6a033a52ba8cb9d859cf2199c1d5a9de7a2d7a8aca9c41d55a187a53fa83f1cb1a1cfa50ea8951c30a18ea5b8a7621ca5a194a57aa7581c31a14ea520a7b01bdea004a5bfa62d1b78a0b4a46aa6a41a35a072a42ea6471a0fa053a4fea5f219ba9f2ea4dda5ad19889f16a4b3a57b19449f03a48fa5ed18ca9ebfa367a55218a99e8ea338a52a18a79e5da313a502184a9e21a3f2a401170e9ed7a2c8a4b916999daba2a4a47a16749da1a282a4c2151d9d76a271a48d15c09c1aa20da43d15859c7ca172a3b614569c45a146a37a141e9c18a10fa35314ee9bd7a0b8a22814c19bc7a039a258138a9a68a0eea12e11a99b61a092a1671071239c25cb264a24f127db2a0c2cd12c3928aa29ea2ae02d3a2643296c2a602e4725da27b928092f6624c6242a26bb2fba20021ebf22c82fe1182f9e911aac2fa29ba2a309a1772fa9a2f1a45ea4012fa3a33ea4a7a44d2edea339a1f7a04b2d57a658a885a84d2d2da8cdac73ad202db8a84cae1bafff2ca3a818ad0faeab2bb9a95aac23ad812aeaa7e5aa03acc229f4a61aa845a8712900a79fa36da23829dda30fa006a04c29cfa695aaccaba5203ca84bad7bae6aa245a871aba4ac5da368a596a913aba0a39da4eea8dca9dda46ea4b3a88da950a697a492a803aac1a65fa4e0a86daa34a655a4baa931acfea23fa51aabc4acde0ddea3faa899aa881c62a354a821aa761c8ba2cda7c4a9671c5ea240a727a9241ce3a15da62ca8e71b52a1c7a5a8a7451be6a083a57ca7ef1ac8a039a50aa70b1a6aa0faa4c2a6b01974a0b7a475a6631979a07ca420a610197da04da4d0a5cb185ba027a4a5a5851823a0e1a384a54a186c9fd3a35ea59917bc9e91a32ea54317479e56a3faa4f616089efca2baa4a116e29dbba265a4b715cb9d5aa22aa46515609de0a1b0a3fd14799c6ea13ea39c14139c0da106a34a14d29bdba0eaa27513c39bb8a0c2a24013db9b76a023a23112149b0ca04fa1d011899a2d9f52a0f20f6424bb26c6279d247f28292cde2c542d3828512b802c472ecd27822a122c762fe82616291f2ad82ff1248726bc273130532115200b223930bf1bb89c86943830af9c4ea392a21c30d7a1dfa4aaa4a02f31a341a69da5242f63a544a837a8432e8fa77daabaaad72d7aa9bcac57adc12df7a822adfcad222d39a91fadaaad722c16a997ac08adf12b31a8e2aaacabb02ad9a73fa98ea9032a32a75da8e7a82329aca68ba818a91127a9a6eaa917aa0f239ea60aab75ac2c9281a61fab52ac46a1afa68faa29ac73a325a5b3a9fbaae2a499a41ea933aae8a4d1a45ea9b0aae2a36ca544aac6ab51a1f1a5dfaa4eac779af7a4aaaa47acf70d84a4c2a9d4ab0e189ca4faa8c5aa711944a465a8fda96c1b8fa306a86fa9251c9ea229a7cda8611b11a2b0a677a8751ba0a159a655a8141b4da1fea51aa82d1be0a0b3a5baa7341aa8a04fa530a7c7193da00aa5cba66c19fb9fc4a475a621196d9f8da40ba6d7180d9f60a4bda59918da9e20a479a55618b49ed8a327a51418ab9e6aa3eba409176c9e1ea3a4a40b16489ed3a279a4cc15d59d71a24ba47815649d06a210a493141a9d99a197a34114f89c65a143a31914d09c3ea11fa3f713899c11a1e7a2de12739cf4a0f5a2b712c69be7a028a3a6126b9c7da003a2a60f0080378df98878884529382c3c2d532d5b29422cf22c212fef27c92a322cbf2ff6268029db2a5a30d02476263828a3309f206821c323b330a816f199d2148c30409fc3a3e0a27f302ca467a798a7373007a610a996a9bc2f81a76caaf7aae72e79a8c0ab1eac762ed0a893ac2fad142e42aa20adedad402df1a9e4acd3ada92cf4a82facaeacc02b23a9bcab53ac8f2a82a8e5aaccab8929caa721aaa2aa922881a7e5a96caaec274fa774aa6babf92561a700ab2fac58229aa796ab3cacfa1a6ca775ab8aacde977da6d1aa54ac329cb2a6aeaa3aac109d85a7bbaa34ac3a99a6a671aaffab6d8fb6a570aa22ac06154aa590aa2fac3719f2a42daaffabc81c99a472a953ab351d29a4d9a8bcaa8a1d53a362a808aaf31c08a3fea75da9831c61a233a7d3a86c1bcca1d0a68da8ef1a6fa15ca658a87a1a10a1fca519a8061af0a09fa5cca7a819b1a05ba579a7531980a02da517a707194da0f5a4d8a6c21824a0cfa486a6211814a0b7a45aa6ec17ed9f8ba41fa68b17a49f51a4eba56b16209f1da4a4a50c16d49ec1a34da5b315309e51a3f2a461158b9dc9a273a4fd14cc9c30a2fba38c145b9caba160a36e13269c69a1f3a21813159c31a1b6a2cd130e9cfca033a2ca11069b7da0d2a1e2133a9b3fa0c4a17e150000528e0e8deb8ce828802c9a2dbd2d5429852c452dc52f2028242b7d2c10303b265029b12a5330a22410283d29d5302d21ab214c25ed306290539fa29bdf30e9a09da578a5b63096a42ca87ea879306aa662a954aa1b30ffa7aeaaf4abb42f22a804aca5acea2e9ca865acfcac002ed5a888ac40ad3d2daca85eac0dad7a2c7ba84eace8acf92b52a8ddab79acd82a29a810ab03ac8f2907a8deaac5abab28fea7a8aaccaba227eba7cdaa03acae2563a7e7aa23ac282418a7faaa5bac7421dea6d9aa35acc51ef3a6f8aa33ac1b1c9aa6c4aa15ac771937a68baa18acfc183fa697aa39ac6b1a0ea6b8aa72ac801b91a578aa59acc61c29a5ffa910ace51c0da5a8a98cab071dfda44ca91aab001db3a4d7a870aaee1c30a47ba8d4a9821cbba323a884a92a1c0aa37ca714a9bb1a49a2c7a68ea8a81adaa165a64fa8af19bea111a61ca8551981a1caa5c7a7081934a18ba588a7c318d2a032a530a76a187ba0f9a4daa62d1812a0c0a47ba6e417809f83a426a67f17459f53a4d9a52f17e09e26a483a51916899ee4a33fa5cd150a9e8aa309a57c15a09d1ba3c6a42b15e99c8ca271a4b614899c01a216a452148c9cd6a1eea333148f9cc8a1c7a33414879c9fa183a34b132a9c62a123a31013ec9bc1a007a2e51000806683f587f282ad255329982aac2ab028be2c9f2d242fb6285e2b942c06306727f6290b2b8830992525285329de302421b621c924f730ce96819fe59bfe30f5a0baa508a5e03069a451a8fda8b3308ca64eaa7eab733022a8f1abc9ac25309ba866ac29ad602fcea8a8ac3ead512ec0a8acac41adac2de1a892ace2acb02ce6a84dacc9acf62b16a92facafacf52adaa815ac7eac332ab9a89aab4aac2a296aa85aab33ac572839a86cab62acff26d7a796ab70ac622580a772ab81ac252468a71dab4cac9c22eaa6bdaa2bac122168a68baa0eac3d202ba67caa07ac021fdaa57eaa18ac8b1e8ea577aa16acec1e43a527aae3ab331e0aa5c7a982ab241e06a589a926aba51db0a449a9f8aa401d60a4f8a8c7aad01c08a486a84faa451ca0a321a8a8a9b41b49a3c1a733a9241be1a256a7d3a8ad1a15a2d6a68ea8261a5ca14fa662a89c19efa019a634a84c19aaa0cfa51ea8fd1899a0afa5fda7c61875a08ea5b5a7901835a03da539a74e18f89ffda4d5a60e188c9fbba446a6cf16099f6ba4d2a55c16a09e20a46fa5f015279e91a30aa57215839d23a3b4a415150d9da8a26fa4bd14e59c48a230a47914c19ce1a1eca33b14c49c9ca170a38214bf9c59a1dea2c713729c01a187a21114459ca9a0f3a13f12ac22e1249b26c622ed27302a302bf82ab828882cc82d382f09285f2bdf2c08309f26b829802b7730882509283d29bd300123a921b924eb306790689f7a9eed3006a2eca614a71631eba46fa9aea9b43036a6b1aac2ab5630cfa7dbab75acec2f8ca86dac0dad1e2f56a9a0ac4fad112eaba9a1ac79ad502d2fa9b9ac4aadd52ccaa893ac48ad422cb3a861acddacfc2a9aa815ac9eacf7294fa887ab6aacef28e8a74fab3dac302889a724ab33ac102752a738ab43aced255ba74bab57acdd2453a75eab85ac262405a777aba0acd9228fa636ab78acdf215da6d0aa42ace42047a6a3aa2eac0920e0a54baa05ac4d1f1ea5d8a9aeab7c1ebca48aa948abe31da0a453a917ab821d83a44ca938ab551d77a438a930ab1e1d53a4d9a8f1aab21cfba369a820aa2a1cc6a31ca879a9a91b88a3c1a724a9241b05a344a7dfa89d1a9ca2d7a69da8271a17a289a66ea8be1996a134a633a8541912a1eaa502a8f718bda09aa59fa7a7186da05ea54aa75d1835a02ba5f2a62818df9fe2a49ba6f416639fa2a435a69a16009f70a4e7a540167d9e2da491a5e215419ee6a33da59115b69d39a3b2a40915589d65a239a4de13ea9c25a20da47c13da9c12a210a45213e19c01a2fba336129b9c00a2f3a3f512999cc5a158a34c135f2244250727d0221a27622a752b752b8f286e2cae2d6a2fee27d42a602ce62f5f267929cf2a83303925a727eb28c830f2218121d423c93059164b9f939bda3005a03ca660a6d9304aa403a980a9a43004a6ddaa74ab5730aba703aca6acf62f8ba863acfeac2f2f14a9b4ac69ad6a2efca8b8ac6aadc42df5a9b0ac4cad052d25aa60aceaac132c94a921acc7acc52a7ba81cacb5acde2938a80fac99ac0b293ea80dacb6ac982815a8f0abaaacdc2707a88eab91ac9026f7a749ab6caca025afa7f4aa44acba2471a7c2aa27acd42312a799aa36acc622e1a67aaa40ac892152a686aa23ac4e21f3a512aaf9ab6520b2a5e3a9ccab531f6ca5d3a9caabd81e47a59ba998ab681e18a546a917abdf1dbca40ea9b2aa7b1d2ea4a8a86aaafc1c96a366a840aa971c58a34ea818aa6f1ce4a21fa8baa98a1c2ea296a755a98b1bdca114a706a9f41a79a1b1a6ada86d1a45a164a664a86d1911a10da635a81419b9a0c9a5e9a7c1187fa098a593a7121847a061a54ea7bd1715a02ca509a78016d89ff6a4bba62c166e9fc0a463a6d9150d9f78a4f3a57215869e1ca489a5ac153c9e80a300a52e15489e15a3baa4d714559ed7a282a49514079e89a23ca44b145d9d2ba2f4a30413bc9cb5a188a34a13b79cf1a026a2b91336241e256e26a322df253b29202a4527b928e72c3a2e3a2ff9276c2bb52cc82fb3256e29ca2a3d30c324e02716299130612180219524b83083193b9dc79bdf303e9f32a662a6e23063a31ca962a99e30caa5e1aa94ab5130e9a6b1ab7face12feca749acc4ac0f2f0fa892ac2aad132e7ba894ac1aad562da8a8b8ac11ad9d2ca0a895acffac172c98a89eacddac242b81a864acdbac1e2a60a81caca8ac3b2914a8adab6cac6b28e9a79dab6dacd527c4a777ab79acf72694a733ab5bace52570a7feaa5dacd6241da7d6aa37ac2324cfa69baa14ac61239ca665aa03ac02225ba632aac0ab71211ba6f8a9d3aba020a6a5cda9b2ab4c204fa5afa981ab1720fca47ba939ab0d1fb5a43fa9f1aa911e6fa4e3a880aa081e24a49ba81baa8a1df4a35fa823aa301d08a450a806aafd1ccea309a878a98e1cd3a293a706a92c1c59a225a7d0a81a1bf2a1d5a69ba8a21a80a16ba66ea8291a12a132a634a84319d8a0e7a500a8e71890a095a592a796186aa061a536a7bd173da014a5d2a63c1725a0c3a45ca6b61614a088a404a65316cb9f3ca4a5a529154a9fd7a342a5ba14429e4ea3e1a4f114b59deea2a7a41914519d7ca282a49713369d51a26ba41c14049d0aa23ca4de12789ce3a151a4a511f69ca7a125a44d0ffe1dcd223b24d42028224e2759285528cd28702c962df92e2e280e2b9f2c9a2f7f269229342b4b3064250e284029a3301121bd22cc24e4300b10769f8d9ee5305aa0a5a6f2a6d130fea324a9baa9953080a5e0aa88ab503081a6a6ab84ac972f2fa711acb9ac972ebea76dac09add82d43a8acac5dad322d90a8d3ac68ad9f2c85a8b6ac52ad212c62a887ac3aad302bcba85aac01ad3e2ad1a842ace2aca6291ea8e4abc1acac28aaa78eab8cac1a28c4a739ab4aace3267ba7dbaa25ac06261fa7b7aa11ac4c25dda6a3aa01ac59249da674aaffabdb2350a64eaa0fac912244a614aadaabd421e7a5dca981ab102149a583a926ab9e2021a561a9fbaaf81fb1a443a9cdaa761f95a421a9d5aa821e7fa4e2a88baa1d1e60a4afa855aac91d23a480a811aa021dcda354a8e7a9c11c44a324a8b2a96e1ccba2e5a76ea9741b72a268a704a9d31af7a1e0a6a6a888197da179a668a8b0193ea148a64aa8c6181ea11ca62aa87e1801a1e2a506a83c18caa086a585a7f1164ca0fea4fda63516ba9fa3a47da6b515439f77a431a6b714bf9e48a4d4a57a14319e14a48ca5de14179ec5a330a53415979d3ea3daa44814429dd9a287a4f113289dafa26aa44f14549d98a25fa45212e39c4fa221a40611fa9c93a14da3990de01ceb219023d51fc92119276a2822287e27542c7f2df52eb726202b912c2d2fba25a429282b1f30b92415285029673056204a217c248a3062955ca13fa08930aca01fa7b6a78330e7a35aa90aaa63306ca5deaaadab37306aa696ab22ac682fdfa6ebab92ac692e99a72aacdaaca42d0ba87dac14ad362d6ca8c3ac5dada92c28a8a1ac51ad0f2c3ea872ac16adea2a09a84bacf0ac0a2ac6a7fbabaaac232991a7a1ab75ac5f2862a768ab55acc22754a709ab27ac1a27d9a6b3aa13ac2226e1a661aae0ab4425d9a61daa90ab8424bea6eda9a1abe72368a6dfa9a9abdb22e7a5d3a978abe02196a5c4a952ab3b2146a588a947ab7f20b0a413a9ddaa0f2057a4e4a893aadf1e3ca4d7a880aa801e4ea4c0a8a7aa331e4ea497a85caad31d38a450a8e3a9541dcca319a88ea9ed1c7da3efa77aa9a61c1fa3d0a751a9141cb3a29fa716a9051b55a25ea7e7a8a01a02a204a7b7a82a1aa4a193a668a80d194ba12ca63aa82f1916a1faa52ba8dc18eca0d0a504a894187ea07ba5a0a7a41714a014a509a7d6177b9fb1a47ca67b16029f67a4eca50416a49eeea3a1a56b15869e34a32ca57315ed9ebaa2d5a40a15499eb6a29fa480151c9ecfa2a4a46b15669e96a288a426150e9ff7a148a324142d9d24a13fa39c14951cc6216e23871fef21122767281e282627302c972da22ebe262a2b8d2c6b2f94255329d72a0c3027247327ec284330541f891e722268304e9546a2a6a27f303fa029a72fa87930d6a21aa9bfa95330d9a49baa4fab25301ba6c7ab7cac5c2f23a745aceeacbb2e61a770ac15addc2dcea784ac37ad232da1a792ac55ad792c04a88aac0fadf42bdda76cac2fadeb2ad1a740aceeac312af2a7f0abbaac3829f7a766ab6aac5b288ea71bab4aacb12720a7e0aa1fac9126d7a696aa17acd1258fa654aae3ab5c2575a630aae2ab92244fa6f6a985ab30242fa6c3a93cab6a232ba672a9efaa2522f1a557a9d3aa79217aa541a9e2aae0200ea512a9daaa9020bca4f1a8aaaa132069a4c0a881aa241f5fa49aa844aad11e56a47ea8f9a9081e11a465a8e4a93c1dada32ca8d4a96f1c5aa3f8a7b1a9111c1ba394a741a96e1bbea25da713a9391a67a22aa7ffa8d61902a2dba6a8a8641991a16ba654a8ee1848a122a61da89c1829a102a60ea85e1815a1c2a5c2a73c17d1a064a55fa79917aea012a5dea613176fa0c8a483a6d31548a084a42ba67215b49f36a4aaa50815a89ec9a33aa537151b9e69a302a55614d49d20a3eaa4ae14bc9df4a2d8a40215ab9dd0a2afa49b13459d6ea245a4fd13739d1ea207a42214f9189c1ff1207d1bef200a26d827e3263327062c932da62e8d26f42a6a2c1a2ff0242b29ac2aa62f2c245f27e9280c305d201c219c234530d08e27a14da13f3005a03aa747a82b30a1a245a906aa123085a465aa21abd92fb1a55dab39ac142fcca63cace8ac6f2e45a75eac22ad9a2d56a767ac34ade22cb0a773ac0fad5c2c2ea860ac0faddd2b45a854ac11adcf2a17a817acb8acd729d2a7a0ab72ac032987a750ab2fac7128b6a6fbaa36acb327e6a6bcaaffabec263fa640aa9fabda2508a609aa60ab1c252ea6f7a94eabd62429a6e0a952ab4424c1a575a9e4aa882374a512a99eaaa42230a5eda8b7aaa82113a5efa8bdaa2421a8a4c2a897aa6a2095a4bfa865aaf21f4da4a0a83caa831f23a471a812aa0d1e03a433a8d0a9b91d92a30da8a0a9f71c60a3d1a77ea9b91c36a3bba748a91c1c16a3baa728a9c71bcaa298a708a95a1b36a238a7d3a8d11ad4a101a7aca84d1a8ea1a7a67da8b61955a163a639a83f1903a1f2a5eca7c818b2a09fa587a76d187ba05ba539a72d1841a028a5f2a60c17d09fc7a485a68716399f6ea438a6ff15899e18a4f8a5e314299ec1a3c5a5a114059e63a3afa55e14b79d01a355a51a14a79da2a290a45c14a19d36a21da42213f79c07a21ba4a013379ebaa19ea31715ee18681f92214b1b36241929812ae7296326de2b322d252e0826932a522ce92eb3249928542a342f9c23b8268e28bf2f2220581e31210d30cd94efa2aaa3223033a03aa74ca81c30bda2e9a825a9b52f69a426aa86aa362f36a58cab21ac9e2edfa515aca2acfe2d47a62eacb7ac492df4a642ace2aca42c37a740ace3ac132c05a72cacf0ac302ba1a613acdcac492a8aa6e8ab9eac8b297ba68bab78acc7285ea602ab33ac0d2821a69baa05ace926e2a54daabbab2026cca518aa7bab7a25b4a5e2a938abdb24aba5c0a923ab8924a6a58fa9cdaa2e246fa568a9afaa362333a54ca9a9aaae2201a525a9a0aae72107a514a9abaa4b216ca4a6a842aa752073a488a813aaf51f32a45fa8dda9fe1eeea31da88da90d1e7fa3f5a76da9c31d17a3baa740a9081d1da39da738a9e21c14a398a729a9461ccfa299a73aa90a1c9da2b8a73aa9921b2fa277a70aa9f61af3a126a7c6a8af19c3a1d3a686a83e1990a16ea64fa8d4184ea121a61da8de1703a1d0a5dca75516aea070a576a7dd154aa018a521a76e15e99fc8a4b3a60d15429f7ca45ba66915889e19a4caa5f214f89d80a343a51315c99d3ea3e9a4da14969dd4a2a8a493141c9d70a296a4d214009d19a226a40c14739ca1a156a39114f09cc4a105a45814a4162d1fbc21a0167d241929702a6b295f261f2c612de52d5925892a2d2c642eab236928c129072f2222f1250228a52fce1c8f1c0520eb2f9a94f6a292a30830cc9dc5a6f7a7fe2f6ea1aca89ea9942f85a305aaccaaf32ea3a4aeaab9ab522e50a52dab2aaca72d42a6fcabb7ac0d2dfba640acf5aca02c66a743acf0acff2b10a709acd1acee2aa2a6cdab9fac222ab9a637ab5dac4a2915a70aab5dac962881a6f4aa1bac3328e8a578aad3ab1d27b7a5faa957ab402670a5c2a9f0aa9a2567a574a99daafe2436a54da976aa76243ba521a950aa202430a5f7a81daa61235aa5f6a833aadc228ea5e9a851aa312299a5e8a865aa4a21daa48da804aa83207aa449a8aea92d2061a434a896a9a11f0aa403a858a9bf1ea7a3cba737a9ed1d0fa38ba70ea9271d0aa36da7faa8fd1ccaa26da7f9a8601cd5a286a711a92d1c17a39ba733a9dd1bb8a272a704a9351b29a21aa7f3a88b1ad7a1efa6baa8f51998a189a663a8ef1957a132a636a8821902a1eea5eca7ab18a0a087a57ba74f183fa038a5f5a60718b69fdba487a6b416fd9e68a4f1a51616619e00a463a57815e49d35a3d5a49015989dd8a280a4ba14859d9ca24ba49014629d77a240a4fd14809d4da21da45a14219de9a10ba48f14019c23a105a4841499179a1e6b21ca85f9231729382a82294726242c362deb2d6925772a3e2c3b2e562359289b290d2fc0210d256726692fc91b0893c41a862fe99832a43ea4902f5a9fb0a767a8692f73a1e8a87da9242fc5a3dea9afaac62ed0a4a7aa3bab172e5ea54bab0aac722d77a58aab4bacb32cf9a5b2ab74ac4d2c5ea6feabb8acd22b2fa6ceaba3ac912acfa54cab5faca129caa53dab5eacfb280ba61dab3cac8d283aa695aadfabf22709a63caa7fab14279da5bea911ab01267ba58ba9d8aa642572a54aa98caad8244da5fda832aa772424a5caa8eba9d82312a588a89ba9dd2220a56fa89da9b72221a577a8a0a9f421f7a46ba87aa97321cea44da8a1a97e20daa3f4a759a9032012a400a86aa9841f56a397a71da9b81edba238a7e7a8761d66a2eba6b8a8bc1c3aa2b5a6aea8981c14a2daa6b9a8731c1ba233a706a9971b56a2c7a76aa9321b39a2cda73ea9ac1a2fa2aca7fda82c1aa2a119a7c4a884193fa1aca687a8f518eba03ea637a87e1894a0a3a5aba7031839a036a52aa7581713a0e8a4aba6d816ca9f84a446a64c16599f45a4e7a5e515f89ec8a377a56d15469e3da3f4a4a4158c9daea28ba443150b9d15a22da4d714869c9ea1e7a385148c9c63a1a4a3d613399c0aa1eea311150f9ceaa09ea38512d01823209722918cef236c29532a22295026f22b022d6b2d75257e2ab72cf92de0222f283b29b42e221f9a22b824fc2e56166b9c8794042fdf99a3a4c6a41f2ff29e0aa88ea8ee2e0ea1d4a8d9a9d12ea7a289a97baa6c2ef6a31caa3cabc22dbba4c4aa0eac192d3ba566ab61ac802ca5a584ab91ac182c4da6cdabadac512be9a592aba7ac5f2a85a52aab58ac4a29a0a5aeaa28ac9828aba5c1aa14ac3f2839a54daa96ab792723a5d1a92eabb126ffa478a9aeaab625bca424a952aa18258aa4d3a80daa99244fa45da873a924242aa41fa81ca9762311a4f7a7f4a806230ca4baa7e7a8a02217a4caa711a9dd2161a436a88fa9112139a44da8a3a96a201ca308a836a9dd1f90a3afa704a9581fbba2aea692a87c1e5aa212a630a8e11df5a1caa5faa73b1d46a2dba506a8b01cd1a262a65ea8221ce5a21da7cea80e1bc1a29da738a9c71925a2c3a772a97718d3a1bca74fa91418aea13ca7d6a81d1749a183a659a83e17ffa02ba61da8b716eba0c6a5c2a72e1795a047a51ca77f1632a0d8a499a6f615e89f73a40ba67a15789f39a4a8a53215aa9ebea334a5c414dc9d0da3a1a46214429d7ca22ea41314ed9c1da2fda36614c99ce6a1c5a3cb14c89cbba174a33614479c7ca183a31414f39bfba01da3d41300802e8d6188f88790244f2a172caa29cb25c62aaa2c292b7424532a472cdb2c4d224727e1281e2e6b1e15202821852e04148ba256a3992e2f9b2ca6dba6a62e4e9f0ba868a8942ed2a08ba817a9362eaea102a971a9d82d0aa396a977aa412d59a45aaaaaabd52ccca4e1aa26ac552c0da5fdaa53acd52b75a574ab87acd62ab6a54bab65accb29a1a502ab36ac35294da5a0aaf7ab7a2842a51faa90abb22732a5b4a9edaa7326fca467a96baabb25c7a426a954aa1b25a0a4e9a81aaac82482a4a6a8c8a9592444a435a824a9152447a4e1a7e2a8cc233da49ca7caa8dc231ba40fa76ca850239ca4e4a64fa8ce22f3a4a1a7a9a8002236a3a7a7dda8951ee2a2aaa720a98d1ea5a2f3a6b1a8e81f01a230a632a8e41eafa12ba51ba7df1dc5a12ca5e6a6da1cd3a163a51ca7ca1bb8a1d0a5d8a7ca1affa1cca6b4a8bc1abca2c8a756a94f1958a2c8a744a96b18d2a178a7efa8991899a118a7b8a81f1826a15aa64aa81f1890a0d3a5d9a726184ea045a54ea781170ca0dda4b4a6a81709a080a446a61617d39f25a4b7a587166e9f94a326a5f815fd9edda2bea4e314e89d5da279a49414699d06a21ea4bb13049dc6a1b5a37e139e9c7fa16ba335137e9c49a1dba21312d99bcba07ea289139a9b8ea01ea20c140080ec9174900d101e246b29f92a86283b24022a422caf28342582290b2ca527f920de252027a12ab618349d9f9e4f2e639617a5ffa45e2d9c996fa5fda5ad2ce39b73a6bea6bd2c509e7ea74fa8c12c9ca044a8f6a8992c12a2fca8e8a9902ceaa2b8a998aa5c2c10a44eaa71ab402cbaa402ab2dacda2b4da536ab43aca12a32a57eaac1ab6129d5a4d2a9f6aa7d28bfa4a4a9b3aaf8279ca46ea981aa0327b3a438a95baa2826eca41aa937aa7b25baa4f8a801aaee2476a4b7a8c9a9712429a484a889a99e230ba461a85ba9cd22e5a305a80ba91e22c8a3caa655a893218ba35fa54aa77321d0a10ea38da4e9219fa346a87ca9d52144a559a996aadc1e50a400a79ca8661c70a26ca65ba8521dada1c7a5c0a7e91eb0a060a408a6f41e74a033a301a5801d7ca0cca36fa55f1bb0a0aea486a6301979a1cea6a2a8031865a24aa8d5a95215a9a247a8bca95c1456a313a868a92815f4a271a7d7a8cb1504a233a618a8e5160ba15da528a7cf1679a0dba482a6fc16f59f86a41da633176e9f2aa47ba5a116209fb6a312a52316d19e66a3efa4e315849e18a3d1a4b415ef9de1a2c3a48815479d50a28ea42115ea9cada11fa4b714a39c53a16da30014999cf4a0e5a29d13159c9ba0b3a27612149c19a06da15110008063900a91e603d022c0281f2a96274723f6287f2ab0287526b62b122d75284320802580272f282fa0c2a8d3a9c2282a94a6a2b2a3692af01069a0899d212b299a2ea418a4102c779ee9a5aea65a2c57a0fba6a5a7372ca9a0aea767a8942bd4a19ca85da93c2c37a4d0aa25ac5a2c24a59aab9aaccd2a50a41faa8aabd72867a494a9e5aa252855a455a963aa97271da424a912aad326fba3c0a8c0a9f92503a498a894a98325eda379a867a90e2500a462a85ba96c2408a447a830a9062411a436a809a9ef2229a421a8f2a825220fa4e5a7f2a89c21efa393a7e0a8f8204aa385a7a8a87420989f0ea6a3a70920b4a133a687a74f22639db7a625a8551e02a13ba587a7da1c70a27aa565a7f01dbda05da413a66b1d36a08da304a52b1efc9eefa099a2fb1e6c9f56a094a2471e61a1bca2f0a3381a36a18ea674a8161446a3f9a87faaa50ccaa2b1a8f8a9711448a238a87ca9b716a6a11ca7bba8ff17d8a089a578a72e176fa0faa4cea63e17ed9f8ba442a68916189f31a4b8a5bd16e29edca35ea55216bd9e8aa33da511167c9e4aa302a53f15069ed5a2c5a48e15709d59a27ba43715f59ce6a108a46214bb9c83a160a32414a09c3aa101a3f113779ceba077a2be12d79b74a028a26b11319b24a0ada1f3110080c690048f3b1b06232b278c285a28f020ca250228a0281a210326d727b32a3311ea9e90a0c72b3e1c7a204e21d52bcf199c197f1c432b5a133b986a90242b249570a00aa0d12a7e9a56a212a3b82a569c5ba23fa3dd289e99559ee09e5e24b9944b966518a91997a291a8f5a8e121f69dc0a3b9a4d7222da0cfa4dea58a246fa123a633a7f42406a2e3a605a812257da22ca739a80f25a9a255a754a8aa24caa26ba752a86524dda280a764a82324eca25da76aa86e2306a35fa76da8ea2223a33ea777a82c2231a340a77ba8ba2121a30ca76ba8552114a317a77ba8ba2011a3cda63ba850206ba116a6b2a70b1f419b3ca1aea2e1182e9c77a0a3a2a117d49fb5a319a5cd19fa9f7ca312a5b71b67a0e8a375a57e1c05a128a3a4a46b1c8b9ee59c86a0e51cdb99761b381ce11ce499061c35175e1572a25fa8c3a9aa0faca4b5aa4eac1a144ca2a1a8c7a9721709a1dba5caa7ba1620a1e7a4cda65d1774a097a462a6b5170ba049a420a61f176a9fffa394a5a516e49e78a321a534168d9ef9a2e2a42f155e9ebda2c7a40215079e75a2afa4cd14bf9d2ea286a42215369dbba130a4d014da9c6ba16ba31e149e9c0da1d3a2c3136e9ce0a080a29313719cc1a020a285122b9c9aa036a26b144f9b3ba0a4a176100080de900491ea127a2077253c27bb26b3211125b6276d280f1c2d20c121a4253218931c3e1e6520af1da92294243f287d1c8320cd22bb2943153c8ed40f482ae7963da0e6a0822a3d9b13a341a46b2a249e0ca502a62f2a04a0c1a6f9a7c129a19f29a645a740281796c19c7c9c86206896929b689ac21d299c00a05fa0af20d69e9da246a31c2349a026a49ba48723c0a0aaa421a5492351a12ca52ca60623cca197a5cea6a822faa1faa528a7482208a216a678a7e821faa12ea696a7882105a23aa6b7a7242142a23da6cea7f8206da239a6d6a7c920ada24ca6fda77a2003a341a613a81b20b1a23da60aa8511f97a100a6b5a7e11d0ea058a489a5921cfa9fc4a325a5951b4fa00fa479a5311b7aa037a492a55a1bada06aa40da6e11b49a06da4f0a59b1b5c9c3e9e73a1421b6a1a2629e62a391ddaa6c6ad96afdd9cf7a331a957aae21a5ea0fda4eba69319a3a026a4fba550188c9f1fa4a6a54918d89ff2a370a52118199f9ba333a5e817a69e37a317a58017589ed6a2cba41c173d9e85a29ca43016ea9d28a258a4d715a59dd3a119a487153c9d5ba1a3a32415f69c11a131a3dd14e09cbea0b3a21f14da9c91a04da20314ad9c56a025a24314859c48a0d8a1cf126c9c27a0c0a11414049b6c9ff2a18d140080ca8c5d8a2f13ff1fb424e9255c26b81f6b2218245f26ea190f1f7121fb24531d9121be231c25661e462299245127a91c6420e5226e281d17c918e01c0029c388bd9c999a3d2921980ea113a16229219ccea348a44829b19e66a565a6142905a00ca642a76528939e14a51aa688266f9ddda37ca4a324c09d7ea306a4ba234a9ed2a331a45723489f21a4a3a4d22215a05da4eea493228da0b6a48ea55222d5a002a504a6022205a151a54fa67d2139a190a5b5a6292151a1b1a5f3a6d9208ba1b8a510a7af20a4a1bba53fa75020cfa1b6a53aa72520b9a1a0a51fa7e21fcba1b3a54aa71d1fbca19ca528a7951e6ba142a5d6a6ae1d08a1bda424a6ea1c95a04ca49ba5551c1fa00aa455a5c31b16a01aa45ea5271b2da02aa48ca5291b4da019a484a5f11a31a12da46ea5301a0c9c59a019a298178787368cea8d9e050599499d62a19e0e4d9f3da2a9a48216e69ec1a293a45e18a19e7ea284a4df17549e70a283a4b6171c9e68a276a4fa16059e33a255a42916e49df1a11fa4d615869d96a185a37d15279d43a1fea29f14d59cf7a0b8a25d149c9cb9a081a2a414599c96a06ca28214429c76a043a2ef13549c65a024a2d013489c3ba0dfa19c135e9c2ca0a7a1ed11339ced9f68a1f9137b9b629fdda01e140000e81708191b08481ee8221324b524aa1cab2193234325dd1b97202a22cc24631d102104236625751d27219823c4263a1b731fe3218527691663190d1d14286d0e6e98918e3c28a691ce9e499e2c28f19953a25ca318286e9d83a46aa5d627fa9dfda411a61327d69db3a491a51026df9d36a4fba41825059e31a4e1a450249b9e3ca4d4a48323099f45a4f5a47022b19f4fa408a5dc2100a081a426a597214aa0aba485a50f218aa0d6a4eba5c820cfa00fa515a67520e7a027a538a65b20f1a033a550a604201ba160a598a66f1f17a165a5b9a6311f1ca174a5cca6a41e26a183a5f9a6611ef3a04fa5d0a6f21dc8a0f4a44da6121d71a084a4dba5461c30a03da490a5031ca99f0aa457a5271b309fc2a333a5df1ae69e8ea32fa53b1ac79e70a338a50a1ac69e6ca36ba5da19759f68a360a53b19939dd5a048a23f1674984d9db99e0c145c9ba49fa0a117147c9dfba0c2a3bb0ded9db9a15ea40515fe9defa17ea4ac15fe9df6a173a48f15c59de3a144a46c15999dc2a124a4b014949d91a1e9a389148c9d79a1cca3c513739d50a1a0a34614569d1ea15fa31e14f39ccfa0dca2bd13539c6ca03da248120f9c1da0c6a1ea11a29be99fa5a1af11039cf19f95a1b5112b9ce49faca19a11909b789f3da1b812cc172a20a420362443257a282c29132c9d251329ce29df2ce925b228d0298a2db224b0263228422e792247211924d92eab189d9f249f082f249f66a580a52e2f86a317a8bda8222f95a536a934aab62e10a67ca969aaf82df7a644aa00ab0d2dcba82daddbad682dcfa8f8ac75adb02b6fa971aeaeae992de3a8e0ac43ad582a18a89eaa94abb12844a73baadeaa4c28d9a66ea98caa162802a54da750a78429bea819aae5a8902b0baa55af4db0661fc6a432aadeab3e228fa50ba966aa61230aa573a859a9bd2174a42da813a9d5203aa41ba8e5a8c02029a331a77da8411f2ca2e0a57da7041dcd9f4094e28ff618e8a3f4a750a9511a08a219a65ba83d1b48a1e1a50fa8a11a10a1aba5cfa7001b57a183a561a7671bfea03aa509a7741aa3a0faa49fa6101a58a0ada450a69f1929a082a424a65a1917a05aa4f8a51919d79f33a4c1a57018909f10a490a53d184d9ff0a382a51718af9ea9a359a50f17819e7fa333a5d316719e5ca316a5ec15289e16a3f0a4a315e79dcba2c5a467158c9d9da297a49614589d84a26ea4be13219d45a252a45f139c9ce0a1e6a3f813689c65a13aa350133a9c32a1f6a20a12019cf4a0b9a2d211b29bcda071a2a411b59bb8a013a2b110699a64a0d0a1250fb99b60a07ea1000c5d0a2688fc140e1d39286e2b392ca22c0528ff2af82b782e40273c2a842b832fb125ad2884294030a722a1240f26993071160c94191ea630449fe5a36fa0c53001a449a744a79f3044a6a7a8fea8163052a6c4a8e2a8a22e6aa6a7a6b7a6912d48a850a950a93a2ddea8ccac1aadcc2c3aa920aecbaee32c31a927ae56af5c2cc8a812ad04aefa2a98a73aab28ac562aa3a65aa8cfa8c62920a805a4d8a1662912a6a7a84da92d2736a868adacae71931ba75fac5ead4d9a37a600ab95ac5599eca41baa83ab709ccda424a93faac39cada400a90daaa29cb3a4baa8cfa9799c1ea424a832a9b69d33a350a857aa6e99d5a4e5a9a9abc619f0a3cca8d1a9d41ceaa219a8e1a9a01c6aa2b0a747a92b1b25a207a7d9a8a21aaaa13fa617a8851a47a1c9a58fa7091aeda091a567a7cf19c9a04ba5fba6ff186aa0f3a4aba6ac1861a0c0a463a66e1857a07da418a67e174ba05aa4d2a5161719a02ca49fa5b716b69ff8a379a55616049fbca346a514169b9e8da325a52e15319e4da3f8a49c15e39deea2b4a4b314ec9dbba273a48314de9d51a232a43c14779dd7a1aea3d413ad9c78a131a35513439c19a116a3ed11229ceba01da3c711fa9bc5a000a39b11269c7aa023a28e10819b05a025a13c10d19a1a9f43a0110da40a3114cb18d61d0129982c802d4b2d9e298f2c1b2d522f6b28972b892c473008279829a92ad130a5241326f0272f31b91ea61a8f1e5e31889d3ba462a32f3181a422a848a806319aa614a9bfa988304da7bea944aa29303da821aad7aa192fe2a8a0ab5dac262e42aaf8accdad942d56a99cad99ae0b2d3ea96ead1aae1e2cd3a9e5ac79ad432b45a879ab58aca72ae3a68ea942aa2a2ab5a611a9dfa911290ea735aad0aaf22632a804acafac192277a70eac10ad95114ba689ab8fac7b9d4aa6cfaa45ac279fdba54aaac2ab3ca007a550a974aa25a1a9a4fda8dbaaf0a03fa5a9a9f9aa599e89a503aa6aabf39741a52eaa96ab9c0dcea49aa9a0abfe175da4e1a88caa4e1a37a464a8f0a9761ac5a303a87da97b1bcda23da7d1a8ab1a20a2a6a66fa8201a75a157a64aa8c5191aa1fea514a8f519dba0a9a5ada7181992a05aa53ca7c21843a004a5c7a676180aa0c9a46aa634187c9f84a410a6ef17249f59a4b0a58d17dc9e27a472a52217ab9ed8a334a50716899e75a3eaa4ab154b9e0ea3a5a4ba14359ea9a277a47714d79d4aa23aa42b146b9deaa103a4df12299d91a1aaa378121d9d7da150a36112c09c45a131a320126a9c22a10ba3f7117f9c18a11aa31111f69a02a1dfa3e2110b9cbba0cba28083008019948b906a137d2a3b2d342ec42d2c2a032dd42d11309528432c482da6303127222aad2b1f31142401263828af31401a241bec20ea311da0efa317a1d631efa434a83da8a53194a757aae1aa1031c3a867ab2bac7f3040a922ac81ac972f80a964ac15ad682e7da947ad1aaeb32d6eaad7adb9ae2b2d97a95cad62ae652ceda8caac87ad612b55a956aceaac5f2a7da8a3ab65ac9929aea7d4aaabab7428a2a7bcaa97ab39278ca7a0ab61ac7625b3a736ac40ad5121e3a768ac7aad961a44a728ac12adf99066a658ab8fac98994ea6b2aa74acc29a76a6d7aa3facad985da625aab5ab0b95bba523aa03ac490e5ea56aaa26ac5e14eca4faa9c9aba01986a446a9f6aaf61b1aa4bea87eaa7a1c61a366a80faa1a1cd8a2f4a755a9541b3aa236a7c2a8f219cda1cba681a8991966a16ea64da83c1923a1ffa510a8e218f2a0aea5bca79218cca066a562a74b18b1a02da50aa7121858a0f3a4d3a6ca1634a0d6a48ba67c1624a0b1a45ea63816f99f89a424a62715c39f60a4e8a5ec14569f1ba49ca59d14019fbda338a55d13459e6aa3dfa4fb12b49ddaa263a47312f69c2ca2dea3df11739cc5a152a37d113a9c72a10aa33d11259c41a1cba21c11269c0aa159a20e10169b86a0eea19a107f9b2fa059a1e5120080b5943194e9088829712d842e182ed229622d4c2e2330a328572c312d9b30a926ff297c2b3b314724e1271329cd31631c1e1ea222013228a0a5a424a4d83103a595a8c3a8913147a76aaaaeaa473197a8e1ab3dacad305aa98cac31ad233099a9e1acb6ad242f7ba930ad06aeff2d70a96aad1eae6a2d14a926ad1fae8b2c03a9e8ac8badc82bf2a878acf8acd52a6da808ac9aacac2923a8b1ab75aca72818a87fab43ac0c2776a8aeaba0ac012531a826ac10ade72207a811ac19ad072044a79aabdbac221c6ca765ab7eacc316b1a616ab44ac291092a6e4aa35ac8a0f38a788aa21ac191573a699aa38acf0170ba66faa1aac7b1a89a5e6a997ab101b7fa574a90eab561c9da537a9c3aa681c24a5f3a84faa081c39a48ba8c4a9501b8aa31ba85aa99c1adea259a7e9a838191ba2c8a681a86419bea16aa64fa88018b5a114a617a8c7189ca1c9a5c4a7ef1760a193a57ea77917eea02aa51fa7ec1697a0eca4afa6861638a0a5a45fa62916929f76a4ffa5da15249f44a4c2a59815c49e1aa479a59c14809eeca335a574130e9e8ca304a51b139a9d40a3d0a4fa130b9d8da25ba43613ba9cf1a105a48a129e9cd2a101a46812bd9cf2a10fa48b12c19cafa19fa36811239c5ba1efa22611089cafa0eda1350e4b892590d38a8689e422b724de242625ac28dc2c8f2de82eb528652c662dab3060278e2a132c1e31c424c9275e29a8314c1c481b2421e031c0a04da534a4f73111a502a9eea8db31a8a74cababab8e31aea896acffac033127a9fcac9ead3a307ea926ade8ad362f7ea962ad0aae722ea8a988ad32aecb2d87a939ad9badc12c83a9feac94ad012c8fa9baac5dadc02a27a966ac2aadd529a5a825acb6acc0286da8e4ab9baca02751a8f3abb4acfc25cfa7f4abadac572449a79eabb0ac36223fa724ab72acb720bfa619ab50acc61e4ea6c4aa39ac5d1d17a68faa22ac051dd9a573aa21acb11c9aa577aa21ac371d67a542aa0cacc01c0ca5d4a9adabe41ce8a47da920ab6c1c9ba43ca9f4aa1b1c6ea404a9bbaaab1b2da48ca833aac71acba32da897a9121a63a3cda721a99b19fea264a7cfa83f1904a2e4a68ba831185ca162a65ca8ad170da118a629a83e17e9a0e6a512a8e817b9a0bfa5e6a78a1791a088a593a72c1741a03fa517a7bc16fc9ff3a4baa68215809faca439a62415d79e5ba4cfa5cb147d9e09a45da58413139e90a3fba4f812a49d13a3b5a4b4131d9d8da265a42213e99c38a216a4c612a49ce3a1d9a369128d9c98a159a307139d9c42a1d0a2da11339cf1a091a27f114d9c98a0b8a1790f2f11b71272150919b122c224572542267928c02cad2d192fb328692cd92da030f326522a272c253169252e2869298431b820131e2721cf31e39e49a5eca4de31eaa441a9f7a9c631baa7bcab49ac683178a89eac15adf53025a9fbacbdad393060a950adfdad622f6aa95aad02ae412e68a950ad11ae6f2d1ca937adedad872c0ba9f2aca2adc42b06a9ceac84adb72ac0a873ac27ada5298ba811acbfac8e2830a8abab83ac9527e7a795ab66ac39269fa798ab82ac1025d0a7c4abbcac4a24bba7a4abcbac242383a7d0abe3acb52159a775abaeacd820a0a605ab61ace41fe0a572aa10ac301ea3a532aacfab971de5a4bda96cab4b1cc5a497a94dabb11c95a457a907ab5c1c7ea43da92cab381c60a43ba911ab0d1c30a4d6a8aeaa4d1bc1a353a812aa731ab6a31ba877a90c1aa3a3c8a717a9a8191da34ca7c8a88c18c0a2eea685a8371818a284a650a8d617b6a134a61ba84a1734a1e1a5dca7c216f6a0a6a589a7591698a052a538a7eb1551a02da5eca6a315ff9fd6a497a64515449fa2a444a6fe14df9e72a4eda503146c9e25a4a1a57c13469eeda358a53a14e19d30a3bba4ab13849d82a257a4d011159d62a241a4a511f19c46a237a47e12f79c2da214a46110a69c11a2ffa31912ac9cc8a13fa37412940f8e1451161a1804225d24bd2432255f28aa2c822d132f2228212c092d73303626222a572b0e315f249827ea286131591fdf1d00219d31189c83a40ba4ae3105a4b2a868a9913179a661ab23ac283108a87eac27adc030a4a812add8ad403028a972ad22ae842f98a989ad57ae512eada96fad5caead2d78aa3eadf9adae2c77a9d9ac9aad032c39a9b2ac80ada02aa0a882ac2cadac296da882ac37ade82862a867ac2cad5c2836a85fac35ad06271ca82aacfcacc32516a8f0abc5ac9924fba79bab8eac892303a865ab78acea2140a7ecaa5eacf8206fa6a8aa4dac2e2056a66eaa3aacf21fd7a501aac5ab6d1e54a5c8a98cabbd1d59a5c1a9bdab791d38a599a96bab1c1d35a53ea907ab2a1ccaa411a9c3aad81b34a4c7a87daa161c82a37ea83aaa7f1b30a359a815aa2c1bf7a21ea8aaa9b41a60a2a5a739a9141af0a11aa7eda8951998a1b1a6aca824196ea15da66ca844183aa12ca637a80c18dea0d2a5dca78b1693a097a5a1a738165da06fa547a7021511a032a505a7bd14c99ffda4b7a68114839fbca465a64614189f78a4eca5fc13be9e1da484a55a13699e9ca3fba4f4136c9e32a3bea47213769ed7a27da40213009e90a236a498125c9d2ca2eea31612cf9cb6a188a39411b09cfea044a2c9101811bd1279150418aa229c24fc240b24d328d92cbe2d092f6428292c2a2d3e30f925012a842be3302d2405283c294e31e71d062055227f310d9cc4a300a4a331f5a201a969a97f311ca688ab4aac2231a8a7b5ac3fadbe3078a80eadb3ad4330aea83badc2ad4c2fb7a82badefad1e2e28a93dadc4ad592d61a920ade0ad962c17a933adc6ad0b2cfaa8ffacbeadd42ab2a8a5ac5cadaf2965a849ac12adbe2831a816acd3ac202802a803acd5ac0d27faa7eeabccac4126fda79eaba6ac2c25d8a75cab8bac74245ba72eab59ac5f23c4a6ccaa47ace9216fa68daa26acfb2078a61baaf9ab6d2052a627aad8abc61ff6a522aaf9ab4e1fa7a5d2a9a2abd61e10a57fa950ab5f1ecaa450a9fdaa6b1d7fa401a97caaf91c35a4aea835aa971ceca382a836aa5d1ce2a35ca80eaa1e1cb3a314a88aa9841bd5a2a6a715a9271a5aa23fa7e3a8161916a2f9a6a4a8c818c1a19aa677a87a1861a14fa63fa840170aa1eaa5f8a7b916c7a0a0a596a7421690a057a528a7e11547a01ea5d3a6ab141ba0c7a45ca619150da08fa410a61314be9f3fa4bda582132c9fe4a343a5fb12389e52a3cfa49413b59deba29ba400124c9d75a282a48b110c9d5ea27ca456125a9d23a244a430102c9cb0a15da48111ee9c89a137a454100d0ede0ef7100c1857218a234a242a24ce288d2c7b2dc02e4728112c2c2d35306c26452ad62bd4309d240a2840294231fc1edd1d11218931119d22a5d8a48d3187a34ca9cda9693105a63eab21ac103182a77aac0aada7303aa8e2acb9ad1d3075a820ade0ad262f85a853ad0bae072ea6a81aad07ae1a2d96a80cadd6ad702cbba806adb7addc2be2a8e7aca8adc22ae0a8a6ac7aadde29c0a871ac33adfe2831a82cace5ac4a28b4a709acd6ac422776a7a5ab9bac50261da726ab4bac6025dba6c0aa2fac5624cda6a2aa06ac9d2372a6bcaa1aacca22d0a55caa22ac532115a613aa20acc920dba505aacaab4b2002a6fea9a6ab252087a588a951ab0c1edda45fa924ab4f1ec6a430a9f1aa701db2a4e5a875aa101da2a4b1a82caa481c6ca497a8f1a9331b1fa46ba8d7a9c11b6ca329a898a95c1ad0a2d7a746a9d81956a269a7e3a89d18e7a1dba68ea82b1890a189a65ba8c4175ba159a63fa84c1745a10fa61fa8d01629a1d0a5e7a7651608a17da569a70f15a2a00ea5eea68b130fa0aea479a6ea12589f7ba425a68d12c89e4aa4cea53612329e0aa479a51313109ea7a31fa5d713a89d3ea3cca43712359db5a273a4b4110f9d84a253a46c124f9d6fa240a43811f89c2aa21aa43f0efb9cada15ea3e308fc135d1661162614e6200824ac2408248e27582c7b2d8b2ef526272cf02c0330ed25612ab32b99305324c12714290c31861dc11afe1e5031b09ce8a462a560313da31fa99da94e31caa5b1ab34ac0b3105a773acfbaca13010a8cfac57add62f4ca8e2ac92adb12e98a830adccade02db9a82aad17ae2a2dc7a82cadf9ad702c7ba8f0acd4ad872b7aa8caac7ead6a2a3ca86aac2cad6629faa735ace5ac912887a708aca8acb02744a7a0ab91acfc2615a728ab5dac0526c2a6c6aa2eac3125b4a670aa1aac5f240ba766aae4abee2311a75daaedaba12217a65faa11acea2111a5f7a9d5abc6201da5f4a9b6ab3f20cba5fda97cab911feba47fa93eabd81edea43fa904ab6f1e8ba40ba9dcaa701d79a4eea8cdaa2b1d4ea4a8a870aad11cf3a361a80faa781ca8a322a8a2a91b1c57a3f1a77ca9b01bf7a2cea74ea9981ac7a292a704a9821958a23fa7daa8251905a2e6a699a82618c2a16da64fa88e176ea12ba630a802173aa109a627a8a416dea0c2a5e7a735165fa068a56da7c415f99ffea4dea64515659fa6a460a6dc14379f52a4e8a58414e89eeda38da51a14a89e3ba323a54614a59edba2c0a40e14489e8da283a49913d69d95a28ba43e14d59d4fa268a40b132a9ed3a18fa36212579d3ca134a396118a14b8162a17fc128a201c234124dc238b27582c8d2da42e0c27042c072d0c30f725ae299e2b7130492402285429d1305d1c8a1ad0201331819d4fa54aa523315da2faa8e1a90331eaa4ddaa1aaccc305ea649acdcac7430baa7f0ac93adc32f4ba839ad0caed22e4ba826ad04aed42d5aa81fadd1ade92c52a80dade3ad402c55a803adcaad8b2b21a8c1aca5ad7c2a1ea87eac4bad86292aa83cac18ada7280ea8f4abb9ac0328aba79fab99acc32640a746ab6eacf225d6a6f2aa5cac312594a6afaa2bacc424bfa6afaa1bac3a2490a673aadaab9623b1a50aaa6aab1722efa457a909ab0a21efa47ba941ab2f204fa595a92aabd71ff4a43ea9edaac41fd4a415a9baaa081f60a4e3a87caa151e54a4b2a85daa361d49a48ba8f1a9721ceea358a8cfa9301c8ca330a8bca9ee1a66a30da8a3a99419f9a2aaa73ea913198ea267a703a9b9185da237a7dfa8701812a2d1a68ea8ef168ea167a63ea85e163da12ca60ea8ef1502a1fda5ffa7a215f8a0baa5b0a74615b4a06fa54ca7e71494a017a5cda68c146ea0cea47ba6f41237a086a417a67b12739f26a49da54413969ea8a336a5a412069e58a308a54e12db9d33a3eda41012d79d0ca3dea4e212a79dd7a2a2a48c110e9d5da224a41d11459df4a1e8a39f0fdc141a186f16e613ad217f24d924f124a327292c5b2d4f2ed426ca2be92cd82ffa248729252b4330c0235627ec289630f51d591db620d930349c1ba5c1a5df3055a204a9efa9c730a3a4d7aa14ac983015a63eacd2ac46306da7e9ac97ada52f1ca833ad14aee02e1da81dad03aec62d23a8e0acd2adc62c3fa8d1aca2ad3e2c5da8c0ac82ad822b3ba886ac57ad2c2ae8a73eac0ead3729c1a71daccfac71288da7b5ab93ac0628e2a656ab7eac2427d4a61bab50ac6a2672a69eaa11ac812544a663aac4aba32484a637aabcab4a2469a6eda946ab3723a5a594a9c8aa9022c9a4f0a87daa2521cca4a0a895aac51f81a40aa9f5aaff1e75a4d1a8c6aadf1e6ba4b6a897aa9e1e1aa4a8a846aa591e09a45ba8f8a9e71ce8a33ca8c1a9341cada31fa8a0a9081cafa3e9a779a9bd1b9da3eea743a9901a37a3b6a719a9211ac8a28ea7f3a8011953a241a7bea8a118d8a105a795a8451896a1aea66ba8c31766a152a637a81a18e6a0e5a5cca77c1799a090a56ea7fe1564a060a524a7ad1523a01ba5e9a65615c59fcaa48ca63114579f7da434a6db13c99e2ea4f3a55113319ee3a3b0a50a14f39d79a377a56a12bb9d0aa312a51213959da1a280a49812889d23a222a40d12129d0aa20da4c911f99eb7a1e0a2b8136e145317fe17e2109522a9253c26262630263e2c722d1c2eb6266e2beb2cb32ff924f2287a2a0e309623b2263a286f30be1d3314f61bb130599a15a5c1a5b730b0a1fda89ca99e3078a477aa8aab6330c1a509aca9ac0030c8a6b0ac57ad202f2aa7e7ac9bad2c2e7fa7eaacb8ad582de2a7d7acabad8a2cd4a7bdac87add32bb8a77bac66adea2a5fa761ac35ad072a0fa744ac10ad2729e5a617accfac6b28d1a679ab7cac8a276aa6fcaa3bac4e260fa6a1aa0fac8425f0a573aae2abe924c1a52faa9aab442486a5f0a951abeb235fa590a9d1aa6b2373a57ea9bdaace22d1a444a970aa0c2238a4e0a82faa2b21f1a3d0a889aa3a207ea4b3a848aa841f1fa471a8eda96f1e1ba470a8c8a96e1eb6a327a897a97e1d8ca3efa75ea9c01c52a3c8a73ba91a1c3ea3b9a733a9e61b3fa3b2a726a9bd1aefa2b1a733a95e1abfa2b8a72ea92e1960a28aa7f9a8c01802a21ba7bba85017d0a1d1a68ca8c8168aa18da64ca84d1643a133a61fa8c614f7a0d4a5e0a76514a7a07ba576a70c144ba024a519a784130da0c6a4b7a6fa12659f75a447a67412bc9e20a4bca5ea11f79d74a339a5b713a89d0da3efa44c13869db0a2b5a4cd111f9d58a297a480121a9dffa120a41612899c9ca151a35e132b9dcfa109a4eb137212891561166d0cdd2020247724d9249725fe2bd52c6f2d34264b2bb02c232f5624ad28192ad02fc221a0250f2740303f1b2d943e158930859b94a556a69d3040a1b1a889a997309ca3b3aab0ab4d3005a5eeab80acde2fc3a53bacecace62eaca676ac44adf82d5ba7a7aca4ad2a2dada7bfacadad8d2ceca7beaca4adfc2b8da790ac73adde2afca649ac02ade6290da704acb3ac0c294fa7c0aba8ac8428bca686ab7facfb272ba6deaa21accf26bba54daac4abe92584a505aa67ab192562a5b6a916ab812445a58fa9b7aa2e2474a550a99baa582354a52ba947aaa32210a51fa960aae121d1a4b8a81caa1621e1a4afa83faa6b202fa4afa82daaf81f7aa465a8d5a9b81f47a440a88fa95b1e8ea307a839a9801dcba3b5a72aa9d71c64a38ba70ba92c1c38a36ba7f5a8091c12a36fa7f5a8ea1ae7a280a714a9911a2ea3b6a723a9361ab7a284a706a9ea1838a22fa7eda8791818a20ea7bca81918d6a1a5a66aa865177fa143a62da8d21613a1e7a5eda75c16aea083a569a7c8163fa02ea5f4a678158d9fcaa469a60f15c99e55a4d0a587142a9ec5a336a51014d99d29a3baa47c13a09dd5a276a42413919da8a24aa4f5127d9d77a23aa4d312729d4ca217a4a612e99c1aa209a45c13c09c1ca101a36f1339937e95fd95ae944f20cc236d24b124d725712c6c2dc72db0259b2bc72c712f8f239028f329c82fd3201e24dd2516305f17f09c9e9b3a30e99c34a611a640302fa11ca9e6a9353030a37aaa53ab0130f1a4afab4bac452fbfa531aca3ac512e3fa652acd7ac7f2d7ba64dacf9acb22cb9a662ac2ead322c3aa78eac5fadaa2bd8a657ac1ead692a32a6ecaba5ac4e296da6b8abb7accc2896a684ab6dac5328b1a6d8aa1bac632742a666aaadab7526c9a5eea93faba9257ca5c7a911abe52464a57ea9bdaa552441a531a965aaf52327a5f4a844aafb2234a5b7a8e1a9a52249a5bba8a3a9302203a5cfa8e6a9b8211ca4faa70aa97e20fda2daa773a9d41e35a434a8b7a9811f04a404a86fa9c01e01a369a7fba8821d0ba343a7e8a8f91c88a2fea6bda8481c6ba2bfa6a9a84b1b1da2fca6c6a80b1b07a26aa70ca9cc1974a2eda75da988195ba201a847a92c192fa2c8a707a9bb18bfa12da7b4a8221751a1a0a66fa85f16e9a04aa62ba8cb15bba0bda5b4a73b1572a041a52ea7cb1445a0f0a4b3a674140fa079a439a60914709f26a4c2a56d14ea9ea3a353a512143a9e18a3e2a45d147e9d94a27ba41713159d11a225a49b12859c96a103a426128b9c59a1ada3f311289c13a1cca3b511969bbea00ea4a9100e95cf98c1987796751c1620bc2016201926982bec2c132d3326182bbc2c9e2e0423272838296b2fdf1d5f21d622c12fa30d69a074a0e72f579d86a621a7ca2f2ea120a9e1a9b12f3da36baa8cab692f6fa45bab3dacd92e46a5e2abb9acfe2db0a523acfdac432d01a641ac3aada32c30a644ac26ad162ca1a663ac2cad3d2b8ba631ac1ead592a03a6c6abbdac4129d9a55fab84ac6c28c1a522ab44ac08287aa5b6aa03ac1e2720a51daa61ab4626fba498a9c7aa7225b7a441a95aaad42477a4e4a80baa4b2440a48ca89aa9bf231ea44fa83fa9492337a430a82ba9e122d2a3dba7f8a84022dba310a812a94e2191a33ea84da9b020f4a103a84ea9891e0ca3aaa758a9131f12a33ba7cba8fe1d42a26da669a8591d98a245a646a8e91c25a200a611a8cd1c5aa20da618a83e1cc4a299a65ca8661bf2a259a7faa84119bfa2b7a75ba937162da2a8a763a90114eba1b4a73fa94b13caa113a7b7a8521265a16fa646a8b513e5a01ba61ea82913bfa0c8a5d1a7501486a053a51ca7de1336a0dba495a6621409a07fa416a60414989f42a4b0a59c13b49ed0a344a50d13d19d15a3a8a476122c9d6da231a4ec11e69c25a2f7a3aa11bc9cdca1b5a38412c49cb8a166a36e125f9c8da179a33d121e9ce0a0aea2aa1300800290bb8dde8aa5247a2a222c5e293125062b7b2cb82b2a250e2b922c372ed422d3266128042f9f1cf91c851b462fd596e7a4bca54b2fbc9ddda7c6a85c2f19a1eaa8b6a90b2fa8a26ea9a9aa8c2e22a31caaffaaf42d0fa477aac0ab6b2d8da4feaa3cacd62ce4a435ab64ac422c56a5a6abb2acd42bfaa526ac19adf42a05a60cacceacde29c4a5a1ab80ac102991a52bab5cac4d2887a5a9aa08ac66274fa52aaa7cab512608a5c6a9ebaa8825d8a462a99aaae024bea422a965aa8e249ba4c8a8e1a9202470a471a85ba9c32367a43ca831a9b3236ca4f8a7d1a85f236da44da745a83623a5a417a78da8522248a4afa8a1aa13216ba580a85aa9ba1c07a403a8eba8881eeca2d8a678a8901fe4a116a611a8c61dada14ea53aa75e1d9ea156a541a75f1cd3a18da552a7ca1ab6a1f2a508a8c01924a215a7c8a84717caa2ffa769a9bb162fa2daa735a99a15cda17ca7efa8e7148ba10ea7aca8ad1515a181a64da81f1673a0e2a5cba76c1537a033a523a7aa1516a0cea490a6f91529a07fa432a6981511a00da4aca55e14b29f5ba30aa59314f39ebaa299a453132c9e3ea251a4df12a29d08a215a4ae111d9de1a1d9a38710c89c9fa17ea35911a39c6ea106a3a50e0d9cfda0c1a2f610069cbaa05fa27b120080fd946f92a78e2d24a829c62b642893248a298e2bb125ac234a294b2bf39cbf218a27b928ac2c9317a79fae9edc2fe29898a52fa6c42e1d9cb3a611a8582e579eb4a79da8132eaba0caa8d4a9d02dcfa153a940aa152d9ba2d2a9e7aa882c8ba330aa27ab0c2c56a493aab5ab0d2cf2a457ab60ace62baba51facdeace92a76a5c1aba4ac8f2924a597aaf2ab4c28d5a4f2a937ab5727b5a4b7a9e8aa8b26c2a490a9b4aacb25eea44da980aa1625bfa422a92aaa84247aa4e6a801aa102437a4b5a8b4a9322327a49ca883a9722202a441a825a9122298a3cca63da8682173a3fba4f0a6b7216ea18da3aea49d2196a455a9adaa4420bfa473a99baad81c2ca48aa7aca8e21c9ca295a66da8451ee2a12ca62da8991eaaa03da4c5a5a31e63a0f9a2d3a4871d83a0caa334a53b1abba0daa4b4a6cb15afa11da7cba8e6125aa264a8d3a94b0c98a257a8b6a9fc0a3ca3f5a73aa9c109e9a246a7c0a88d0f0ea245a629a8831327a16ba53ca7211469a0e2a466a68014f29f70a4f0a5d514739f09a450a56514129f8ba3fca41b14e19e5da3dba40214689e19a3cea4bb13cf9dc8a2c1a44e142b9d54a2a1a40a13c99ccea15ba498128c9c6ea1d5a33313779c04a124a3e511109ca3a0b1a2a311db9b06a06aa158100080d08e408d188e53230a29ae2a8a28cd22ed28862a3129af25882bd92c992976225d29a22a322c79a08fa953ab062d9b9a83a579a6152d0697faa394a4fc2c919db5a691a7f22c72a01ea8f4a8b92c02a105a8d8a8372c13a11ba8f0a8102c5ba137a8efa8662b7aa3bfa99caa112cc2a541acfeac262ceea4a8ab8bac73296da424aa8bab01285fa49aa9e1aa1d2733a445a965aa242612a403a929aa91252aa4c0a8d0a9f42416a49ea8a1a9572409a485a877a9bf23f0a35ba84ca9e1220ca448a839a916223aa440a81fa9642137a42ba80ca9ef2080a3e4a7f3a8092059a29da7a3a86f1f09a009a6aaa78b1e159fe4a3c4a4781e9a9e6aa540a7b61cfda0a7a56fa7ac1cc4a15ea558a7ed1cb5a0f8a3c3a5eb1c0da0c7a273a4371d3a9f2ea1e8a2811ed59f1ca0cba1651e96a0aaa2e3a4841b94a11ca7baa87b0dafa313a9b2aa9b8cdca2bba80baa148b3da222a88ca962106ca1c6a681a81a14d5a079a545a735155ba001a5aca6b61405a093a411a60815379f2ca494a59714e69ec4a34aa54614b99e81a327a52114749e4aa3efa40314299eeba2c1a4b213a49d7aa275a43414209d09a20fa4ea13da9c9ca177a37212a59c42a106a31c127c9ce4a076a2eb10d59b7aa014a29c10399b20a053a1340f008020902c8d5a19d023a427af282c28a720ba26a2281029f220d7266228582b2a9169a15aa0462d2e1c3021d121332c9418ab18b4190e2c4f8a969d049e282cc59a69a362a44a2cb79df7a532a7412c1aa01ca741a8522b0b9f40a665a72b299a9f7fa56ea634270fa37aa8c9a833240f9be69ecb9f0016859dd1a00ea244214ea180a5f8a6372427a2fca61fa86e245ca235a722a83c249ba26da761a80b24b3a28aa769a89c23f0a2a8a795a8e3221da38fa787a867221ba394a788a8ee212da379a792a87e212ca34ca77aa8072116a338a782a8a720f4a244a77ca84d203fa33ea76aa8fc1f93a138a6c8a7131e539c8fa1bfa2e118099dd9a1b5a32f18ba9f62a342a5c9191aa0bfa305a5591b84a0b1a30fa53a1caea0fda28aa46c1c619f3d9e41a0081df598671c2d1d941d0e9b600f55979c186ea3dea86daaa1954ba448aa1bac969355a127a844a9741080a06fa585a75314f3a0dca4d4a6b91480a0a2a45da613160ea047a4f6a5dc14309fe6a38fa57d14c49e63a317a533146e9eefa2d0a4e113389ea7a2b2a46512d39d5da28ba43b138a9d06a264a4ec12149db1a121a48a12db9c5fa17aa33d12ad9c0ea1d6a2f1118d9cf4a08ba2d2118d9cd3a042a2da104b9c9fa03ca25612659b30a0c1a13711008005911991aa146f21632608283d27d42260263d280829c71c1221a822442770178e1cd11d4921a11dba230e252b286f1c0c212023502a881479959410212b9f98f2a1f3a2502bde9cafa497a5442b679f89a6f9a7f32ab6a016a80ca99f2a88a177a878a9ab29d79e93a5b1a69325e9980a9f26a00a1ff699c99e019f9f1db89db1a1dda1882020a00da450a41b22c6a0c1a435a5362252a140a50fa6f221a9a197a5b3a6a721f6a1fba535a74d2100a23aa68ba7f520eba146a6a5a7932010a254a6c8a7732025a253a6dfa7122042a237a6efa7dc1f93a262a60ba8441fefa273a628a8001fb8a25ca60da8201e5aa1c1a57ba7ba1cdd9f51a493a5a51b00a0faa351a5c91a6ba020a498a5cb1989a053a4a8a5681ac9a097a412a6831a5ba015a4b3a5ea195e9fb99df1a0bd1c7f1c5429902a171e65a746ae12b0cda0c9a392a894a9b815a7a0ffa4b8a63e18bba00ea4d5a59c177d9f11a4a3a5b917a29fd3a361a56d171c9f8aa335a57a16a09e24a306a522164a9ec2a2b9a4ce15179e6aa287a4ed14b59d0ca243a4a5145d9db6a109a46314f79c4ba18da31d14c99c0ca12da3d813dc9ccba0b4a27413cd9c97a04ca25e12969c58a005a2e812819c3ea0c7a12911649c27a0baa19c12349b989fb2a1e9120080c68b4e853f13a72059257d265226b31e1f2426252c27361ac520ec228b264a1d14220024ef251720d42283248927121db520042396285a1681174a1c4d293792f89d889d9f29449a4ca2eda2a329859dd9a4e3a58529cc9f96a604a85229e2a0b6a7b4a8c92871a0e0a637a82d27a39e04a5b4a5c5242b9e3da4a7a44823669e24a4a0a49a22379f44a4c2a4202212a07ca436a5dc2193a0d2a4b0a55b21faa023a524a614212ba197a5a0a6d32037a1bea505a7862064a1dda53da736207aa1ffa557a7b41fa6a1faa55aa7671fbba1d7a558a7b41eb1a1b8a532a7581ee6a1c4a55da7ff1db3a1a7a530a7311d70a147a5bca6b51c06a1b5a410a60b1c70a03ea473a5fe1a07a001a44ca5361a0da019a457a5ab1926a027a47ca5a91929a019a473a58119d7a03fa490a5b6180699c99d88a003148404b30cf70fb905f49a959e89a16d0c149fa5a2c5a4f414e79e9ca293a4bb16ab9e82a270a4a016699e76a26ea48016539e78a26ca4d1154d9e62a25da41415219e29a236a4d714bb9dc1a1dfa38614639d63a125a379130a9d0aa1caa2fd12ce9ccda084a28c137b9c8ca04fa23c13449c60a00da22312509c4da0cea10a124d9c2ca0a5a1ec11629c26a07ea152104e9cfa9f62a1bb11f99b949f19a12d140000ac189119278c2a1e0424b724e3248d1c79225624d425881cb9215c23ac25981d8d21b423ef25a21d7f21b823f7268d1b501fc521d327b7167e187e1c36286b081b9a32955e284795f59f36a05e28d89a76a350a43528709e2da551a608281a9fc1a5dda63727059f9fa5aba638268b9e1ca5f0a51c25479ec2a497a5fe23b29e8ea463a5ae22109f8da447a5cb217c9f94a455a5372104a0a1a495a5af2030a0c8a4cfa563206da010a50da61e20b0a030a53ea6a51fcca048a55ea60a1ff7a053a572a6d31e01a160a5ada63b1e18a161a5c4a69f1d08a183a5d8a6771d10a179a503a7e21cfaa054a5e2a6de1cd0a000a565a66d1c89a096a4eba5731b47a04fa4a4a57b1ae19f14a455a5ba19319fd1a329a57d19e69e9da329a55919b69e92a338a5c818e89e88a367a59e18a79f8da34aa50a18e79d9da0d9a1b2149c98369dce9ec912499b949f5ca11c126b9dfaa0c3a38504b29da9a169a46d12bb9dfca174a4bb13da9df6a16fa49b13b59de9a140a47313a19dc9a119a43413b29daca1eda3fb128e9d6fa1a4a3b012629d49a17ba381124e9d1da13ba34b120b9dcda0c3a2e8116b9c6da01ea27211259c2ba0bca12111e39b03a0b2a1ff101d9c0aa090a135104c9c0fa0ada12e10c09b939f50a10612ca0d0f1e132012232d2680291d2a9c2cb927032b0c2cb72d0027122a522b542e0f25b127e728fa2e7520af1e2d21d12fcd9b52a411a4193087a3e8a795a81d301ba6aca9a3aa013012a817ab37ac872f56a88cab5eacc42e31a8c5ab47accb2dd1a95cad68ae5c2d63a893ac26ad8b2bc4a9eaad85ae152dc0a83fae62af052b08a887ab93aca028a9a7a6aad9ab2a28aba5f6a884aa01281fa464a0c9155f2b99a86aad0cafdc2434a663acffac6c211ba6c4a91eabf22393a6c7a9f3aaf72322a748a93aaa0b235fa57ba878a992214ea429a8aea8a421a5a31aa80aa91220cfa2c2a61da8271e3ca00da0eaa04f1d96a2c6a702a9381d9ea168a65ca8bc1c46a124a61fa8111c07a1c3a5a8a7061b34a187a554a7bd1ad3a036a5dfa6cd1989a0f0a480a6f9184aa0a3a437a69b1821a07ea415a6681807a059a4e9a58817cc9f39a4afa53a17969f16a485a51716569ff7a378a5dd15ae9ea6a34ea5d2144a9e76a329a5a514489e4da302a57e14d19deca2daa43513999db1a2baa4e312799d8fa28ba4ac12529d68a259a446110b9d23a227a4fe10929ca9a19ca39b105a9c43a100a33b11249c19a1b3a21a10dd9bd8a071a2e20fa69bc0a03ea2bb0fab9bb3a0faa1f30d6b9a5ba0bba1830dfd9b6ea097a13d030080389a469e381b7e284e2c2a2d492e4429352dee2dac2f0829022cc42c883008265d295d2a203183209e2386248731f29742a03b9fbe3139a3b0a707a793310ca756aadcaa4b31cfa8edab74acc030faa899ab3aacd02f5aa8aaa921aa5a2ea9a826ab1cab7e2d52a904ad9cad042d46a9a6ad39aeb22c40aa05af41b03d2ce1a877ad5faec42a2ca788aa7cab7529eaa534a8bfa8f72949a6e0a651a7ba2923a773ac9cad84243ea893add8aea7188ba6aeabb9accf1c0fa54faac5ab301d94a444a989aac71ccea4a8a89aa90f1bf2a4bfa8c7a9a31a4fa5c6a8daa9731450a473a841a93a140fa438a8a3a9f00de1a41da915aba71b63a39ba801aab01c52a31aa88ca93a1c99a2b4a71fa96d1a10a204a7b7a8ed19b4a139a613a8421939a1bfa57aa74818f8a08aa543a72118d9a04aa5e7a6e21777a0f4a495a663175aa0bda44ba60c1643a086a401a6b3151ea050a4baa55f15e19f26a487a51b15779f00a46ba51e14ec9ec8a33ca5ea13aa9e97a31ca5a213629e56a3eaa44b13399e10a3aca4f2122f9eb0a26da46111c89d37a21ea40011549dbaa193a3a1119c9c64a13aa34d11479c1aa146a31b103b9c01a15ba30610119cb3a01ea3a60f469c71a03ba2c00d0c9c06a029a1db0e039b139f52a0d90200803e9c789fdd1bce296e2d482ee02e922a5b2e6d2f90304c29bc2ca92d5131b127d42a042cf5314f23f024a22675323498d2a011a0c2321ca597a87aa96b3206a823abc8ab0432cda804ac74ac5e3141a94caca2ac953084a93cac97ac462fa7a994ac0aad2f2effa979ad24ae792db5a9d1ade3aec92cfba99ead79aec72b6ea97ead3dae482b41a806ac90ac8c2ab4a6b9a992aa282ae1a68fa9eeaae7280ca7bfab95ac4e25b6a79fac91ad48206ea744ac4dad8d1ca4a66baba7acc319aea554aae2ab43109ba5f4a940abdb8f50a522aadfab809504a5b6a974ab1e98ffa44ea9a2aa038eb7a458a9c4aa6314d4a4c7a912aba616afa5b9a951ab401959a4f9a8a9aa6c1afca383a827aaa51abba329a890a9dc1af7a25ca7d9a8111a21a2baa65ca87b198ba16ea631a8911844a106a607a8d918f0a0c5a5aea70d18aba062a523a78f1744a013a5c6a60b1706a0c4a455a69c16739f8ca403a63c162d9f61a4b8a5f015c69e24a46aa5dd149f9edda330a59f14829e75a3e9a45514569e09a3b2a4ea12419eb8a277a48812e69d4ea234a404118e9dfda114a4c410389db2a1cca38810289d5ca177a3a20ec49c5aa144a342106d9c2ea125a31f10439c23a114a36e0eff9af5a0a5a3df102a9cd8a0c9a251890080ef99a69c5f1ac52a432e2f2f1e2fdd2ad12eba2fb530f8294a2d1a2f8b3126280e2b3c2c3b32582118250426c032249df0a03ba0ec32c4a437a8a9a803330fa860abacab6e3251a9a9ac35add831ffa9f6aca0ad013138aa5aaddaad3d304aaa9cad53aee02e46aaffadeeaed92db9aa27ae4bafe12c1baad2adc0ae322c37a94aad25ae532b4da9d0ac9aad872a67a827acd1ac9329a5a783ab77ac4e283ca787ab87acac2649a70face8ac7624a2a730ac5aad3a2042a70bac24ad4117fda684abb6ac0197efa5faaa91ac6b9926a685aa1cac9d9875a601aa3bab53988da5e6a952ab748edfa519aaabab3e0eb7a550aad5ab441709a5d5a983ab90197ba445a9cdaae51a0ca4c3a855aa1a1b85a371a80eaa8b1abaa2eba751a9c21951a231a7bea88918d2a1e7a67ca84c188ea172a63ba8041841a10da60aa860161da1c5a5b4a70216f1a07da55fa7a615b1a046a513a74e156aa010a5c9a6081537a0dfa4a1a6ca1425a0b5a470a694141aa085a42da61d13da9f54a4dca5bd12819f0ea493a54f12239fb9a323a5a010119e40a3cba45810809dbba25da40810e99c39a2e0a3740f829cc8a156a3ff0e469c7ca105a3cc0c339c40a1bfa27f0e3e9c05a158a262096e9ba0a00ba23b0c059c3fa075a1530f0080cb991a9a5716e72ab72e1430452fe02ad82ef82fca30d929692d732e7231c0270e2b6d2c27328523dc255528c4327d9b4f9f479d2c33baa4a9a8bea821330fa892ab7fabb13255a9ceac06ad1f326daa8aad1eae5131caaa1eaecfae9230d4aa4eaee9aebe2f62aa1faef8ae442e2daa04aed0ae532dfea99fad8eae7c2c80a96aad44aebc2b75a9e6acb1ad7f2aa8a8aeac8aad93294ea850ac11ad762828a821ac00ad7f26afa840acedaca3242aa878ac86ad942137a71eac4fada61e3ea667abb4acc01918a6d4aa62ac3e109ea565aad6abcb8f66a680aaf7abe08eeba563aaf3ab260ec1a55faa0bac7117aca51faaa2abcb18b9a5eca944abfe1acda56ba9d2aa761bcfa537a9afaabd1a22a5f3a84caa2a1a26a483a8cca98e1982a311a83ca90219e2a267a7c7a881182ca2cfa66fa82418b0a182a640a89f16a4a12ca60ba8351689a1dba5b6a7d31556a191a571a7791507a140a512a71b15a6a0eea4a2a6cb1444a0a9a44fa66a13c39f7ba4fca50d13119f4ca4c4a5b012aa9e1ba486a565126c9efea347a5c910e59da1a31ba58510989d3ea3e2a485110c9d85a24da4ea10d99cfda1f1a3060fe19c02a20ea41f0ff39c04a219a49510cb9cb3a18ea3d30e3a9c35a1c6a2710e309cb8a0dfa12f0eb5804e8c13862c0fee288f2c452d482cd32aa02e03306230b829902dc22e63310228bf2bad2c2032db238326bc288e322c9b379f0a97e632c0a4b8a868a82033c1a7c0ab0cacc23267a940adefad373256aaffadd9ae6f31b3aa3cae29af933092aa42ae1eaf9d2fa5aa3fae41af892e87aa2bae37afa02df5a9a8ad88ae902cb9a968ad32aea02b90a927adf2ad9e2a1ca994ac6bad3829aca85fac2cad6b2866a83eac09adf7264ea84dac3cad47259ca72eac12adb02268a66fabaaac552054a628ab70ac1d1e19a64cab6aacc81bfca5e0aa34ac3d192ba6c1aa1eac8b15baa59caa1bac3b1851a576aa2bac7119aea558aa1bac041c36a5f2a996ab371bb8a47aa916aba51b70a451a9eeaa221b79a41ea9c0aaaa1955a49fa82baafd18f3a335a885a97d184ea3eca726a92c18e2a266a7cea84e1612a2e1a685a8cb1559a161a653a84f1502a11ca628a80715eaa0eda50aa8c514cea0caa5daa78e14a4a095a580a7581451a044a508a70e1402a0f1a4aca69d13689fa6a42ea61513db9e57a4cea59d12659e15a45aa5c910029e97a3f8a473107c9d08a3b0a44d111a9d82a262a4e810ca9c28a214a4a4107f9cd3a1d1a364104c9c7ea13fa31011549c3da1b9a2fb0f149ceda072a2a210349c8ba0a0a1bf0d00809299069ada1830285d2c1c2d5d2c622ae32e20304b30c9295c2dca2e2f319b27a82bcd2cfa31e624b52717295332221db495f516ba327fa248a8cba8ee3271a7e7ab9aac92324ea918adf7ad1f32dfa9cdada8ae563134aa3dae11af8a3049aa49ae51af9e2f20aa3fae30af3f2ec9a902aeefae402df2a99dad86ae572cc7a96fad42ae5b2b5ca938ad15ae392ad4a8d5aca7adfa28d6a868ac42ad1628aca83facfdacb12670a839ac08ad852540a84fac21ad4424f6a74aac4faddd2257a71dac38ad58212ba7e4abdaac1e20dca802ab89aca91d2ea8c2aa2cac621cf8a506aa7dab0d1b50a53baab0ab001c24a5b6a99cab211beda49ba938abe71ab2a47da900ab921a92a45ba91aab3e1a73a43da91babf3192da4d3a88caa5719c3a347a8fea9ad18c0a32fa88ba9761899a3efa718a9d7162ca362a7bea84a16e4a2f8a690a8de1545a29ea64ca87215b1a12fa610a8081525a1d8a5c0a7a614eea095a56da7581494a056a519a7111451a01fa5d3a6b913f99fd8a489a63a133f9f90a43aa64c11f59e67a4eba50f115e9e20a4baa5bd10139edfa35ca57a10b69d31a3bfa44211919da9a272a4800f369d88a252a45a0ff29c56a240a40f0ff79c31a216a4e10c809c01a2f8a337109a9ca3a107a3e00d00801c9442924517ee276f2c672d582c5e2aed2e2e306330de28242d532efa30e026fa2a662cae31e122c9267a282e32db178595bf969932daa11ea82fa8ab328ea695ab3bac6532a9a810adf4ade1319ba9e5adedae453103aa6aae67af8e3036aa79ae8fafd02f83aa75aea6af752ed0aa3eae52af782d73aacbadc5ae632c57a955ad1aae492b42a912adf8ad1f2acaa8c6acb3ad19299aa8aeac81ad8c2858a88fac77adab274ca879ac64ad13262fa848ac28addf24b1a73dac1cad5e2338a760ab98ac3d216fa6e2aa5cac032051a5baaae4ab8a1ed0a5f1a984ab001e3ea792a9fdaa801c2fa5d5a964abf51b3ca589a947ab441c90a5aba974ab111c41a58ca930ab871c2aa559a9f4aa461be3a431a9ccaae01a5fa4eca885aa6219bea39aa831aae8185ca364a8fba9781915a32da8a8a92419aea2aea71aa9ac1842a242a7d3a85018d6a1bda6a3a8ec1794a183a67fa8551652a142a639a8ec14f6a0e6a5d2a7971495a0aca57fa7b8126ea075a536a7661220a032a5f3a60712e59ffca4b2a6ba11749fc3a468a66a111b9f6ea4f4a50911c09e25a48ba5ab10809e9fa309a58411809e37a3cca42b11369eb1a26da4b410db9d4fa219a46310449df4a1d5a3610ed89cb2a19aa3fe0d9e9c18a190a2e2100080d995699514176c285f2c3d2d1a2cf3296d2ef92f31303c29462da02e0a31aa26e82aa32c9f312723aa26dc281232e1108595be16993215a21aa898a8a5324ba691ab71ac613260a836ad29aeda3131a9f9adddae4731b4a967ae3caf8330fea95cae4eafa62ff8a934ae49af552e01aaf5adfeae5b2deda9d0add1ae762c62a998adafae912b26a951ad46ae432ac0a8e1accfad332981a89cac82ad7b282ca850ac43ad702703a838ac16ad8926c3a713acf2ac6f2550a7c4abb5ac43249aa675ab9aace3221ba6a5aa1aac372148a530aa44ab9020f7a53faa02ac0c2027a8d4a955ab311eefa533aaa5ab981d94a514aa13acc71d37a6eaa9c7aba01d36a597a949ab2c1da8a45ca9fdaa421c79a404a996aade1b3ba4baa832aa521b09a49ca82aaa071aeea35ea80baaa419ada313a88ea92319d5a290a704a9a7185aa25ca7dea87d170fa210a7c0a81b17cda1c4a681a8a71689a149a63fa800152ea1f3a5e7a7a114e2a0a5a592a759148fa06aa53aa759123ca025a5d9a6f8110ea0d5a469a68d11d79f9aa415a63b11989f4ea4c9a5d8101e9f04a45ba58510249e87a3d9a43210b49d03a399a4bd0f449d8aa27ca4250ff69c74a272a47210419d2fa24ca4b10caa9ca4a128a4e00d749d9fa1fda3320f00805599739a9f19aa27a32ba22cf72bb829562efa2f0a300b29e92c762eb0308c260c2b4a2c5c31432322275d28db310217f69bea9c2e326fa163a801a95c3282a57dab3eac243216a821adc6adad3114a905aee4ae18319aa96bae62af6b30caa970ae73af922fa7a958ae71af582e4da9f1ade9ae3d2d31a98aad73ae5b2c0aa951ad4cae642bd9a829ad15ae452aa8a8d5ace0ad5429a8a8a6ac83ad862821a848ac0dadb22788a736ac0aad872674a7e7abdcac8e25eba671ab7bac9c2492a65bab96ac2c23e7a5c2aa47acae2120a5d6a9feaa952031a522aa89abf11fb1a61daaf2abdb1ea7a5b3a952abd91d8ca4b4a9d0abff1c7ba6b3a951abc81c4fa58aa929ab951cd6a44ea9d5aa551cb1a4e8a86eaae71bb0a4bfa81caa8a1a93a49fa806aa481a30a470a8cca90a1975a33ba87fa9af1810a3dca726a93e1877a24fa7cda84d16dda1cea680a8bb1595a17da64ea857155aa14fa62ea8051526a113a60aa8ad1404a1bca5b5a7cb12faa07da543a75e1295a00ca5caa62f1016a0bca466a6c50f3f9f7da41ea64a0fc89e4fa4d2a5ed0e5b9e15a479a581101e9ea3a31ea56a11929d29a3b8a4d30f229da5a264a49f10f59c6ba245a461102b9d4ca224a48f0eea9c19a213a43d0ef49cb3a167a346830000b6104f0f0e12cc25ac2b9d2cac2b2c290d2e9c2fee2f4228d52c032e9d305c26f02a3f2c59312a2386266028dd318b10929ee99c333288a040a8e3a8403250a53aab47ac023288a7f8acbcad9431b9a8d1adb6aefb3050a94cae34af42306fa947ae22af162f7ba929ae22af092e69a901ae0baf122d1da9b9adabae4e2cd7a857ad71ae392ba9a814ad11aefb2956a8b5ac95adec281ba867ac39ad1f28b9a70face5acb3267aa7e4abc8acd4252ca778ab8bacfb247ca75aab7bac8e24d6a619ab5caca72313a8d5aa6bac192247a6a7aa2fac092196a487a974aa6c20e0a4baa902ab6620ffa590a9c3aa771e69a471a919abb31c9fa488a94baba41c00a54ea900ab0b1dc2a41fa9e6aadf1c73a4f3a8a8aa0a1c27a4bca851aaa01b9aa36fa805aa1c1a72a32da8a7a99b1937a3e1a774a93819e9a2bea745a93b18cca28da70da9971666a243a7caa81d16e4a1e2a68ea86714a1a173a64ba809145ca11aa625a8781315a1f2a513a80c13d1a0a8a5b9a791123ca047a53ba71012c09feaa4b8a696113b9f97a448a62b111a9f4ba4caa5c9109e9ee4a367a5a7117d9e5ca30ba56212529e22a3c0a420122a9ee0a293a4ca11bb9db2a27ca49a12c49d66a246a449108c9dd1a162a3a60f8c9d37a1dda23d0d00004f0e4a05920b4825682b772c402b3c29212e02301330f627ba2c1a2e9230dc25ae2a1d2c14313723df26a32890315c105d9e7696ed3174a116a85ea8ed31fea43dabefab9731c3a696ac81ad3f3152a89ead89aec130dca819ae2baf2c301da922ae3caf0f2f11a9faad29afdc2defa8b6adf3aed32cd9a8a3adb9ae162c93a85fad85ae112b6aa819ad2eae0b2a41a8d9acd7ad25292da898ac7aad522803a83fac1dad1d27a2a7ffabd9ac26262aa792ab9bac4e2518a741ab74acd62497a610ab3aac2724f7a6f0aa46ac8b22c7a527aa87ab5921a2a4b9a9adaaf52070a45fa960aaf52091a6c2a9aaaa2f1fc1a50aaa52ab781e20a402a9b3aac31cdfa41fa97daa481e7ba408a97eaaff1c1ea4c0a84faa1a1c22a490a8f4a9bc1aada34ba8baa9491946a336a8ada90b192ba315a880a9af17d1a2a2a747a9ea1697a270a719a90d1560a21aa7d2a8b51402a2c0a676a85f146aa177a637a80c1413a11fa613a87e13d6a0e9a5eda70e11d4a0afa5a8a7c31091a062a546a76b106ca010a5c7a61d1044a0c5a478a6ab0f14a086a419a6330f3c9f27a4a2a59d0e719eb4a349a54010fc9d5ca30fa50510fd9d34a3dfa4b80fe99d0ba3cda4680fcc9dbea28ba4f60e319d49a210a46e0e9e9de1a18fa32e0c0000ff14ef12af0f89247f2a192ccb2a8128ac2d8c2f782f0f28982ce92d80305d25a92a1f2ced30b422bd2690284f311d163e9e5896a83108a143a806a9a43194a44fab37ac673186a6c0acb0ad17312fa8b6ada3ae9730a5a830ae22af0c30d4a815ae3baffb2ea7a8d0ade3aed02d6aa886ada5aec62c6ca85aad5fae0d2c88a820ad05aeee2a46a8c2accbada429f7a79fac80add228caa762ac42ad1e28a7a705acd8ac492745a79aabacac5e26f1a641ab7dac6d25a0a603ab52acad24f4a6d9aa1bac1924a6a6a0aabfabe7229fa507aa82ab622190a452a93baa45219ba3d1a892a98520afa55ba8e8a90a1e43a692a951aaf31cffa228a8bfa9641b53a4aba835aa411d77a47fa82eaa231d00a46ba8dfa9be1b12a440a8aaa9741a05a422a87da92f1a0aa405a865a90519dfa3f6a735a9e81777a3bca70fa96117d5a2a5a7faa8ed1640a242a7bda85516bfa1eca684a8d41593a1a6a65ca859154ea156a61fa8e114d9a0dea5b5a779149ea086a552a71f1464a058a507a7141222a01aa5cfa6be11c19fc7a470a65311259f80a423a60411ca9e49a4e2a5ba10399ef0a39aa5a1110f9e8aa348a54c11b09dfaa2daa4da10659d85a266a47d115a9d20a213a42410289dfaa106a4bb11489e74a1b9a20b1100007c126e13340f8224e32a5d2c322bee278b2d6d2f552f22274c2c8c2d53303b25f529612bbb3017236a257e270631d6183aa0a39f5231959f27a87da8583122a4e4aadfab2b311da689ac52addf307aa739ad5cae66302fa8acadc1ae8a2f4ea8beadbeae5d2e6aa8aeade4ae552d51a876ada2ae822c33a83bad5baeb92b28a806ad0cae9b2a0ba8d0acb9adb529b9a797ac8badf5283ba75cac3dad2c28fda608acd3acc126b1a672ab7cacba2539a602ab40ace924faa5acaa10ac4b24b5a565aae8ab572350a5f8a940abda22dba485a9b0aaf421b3a4fca820aa4e21eda585a871a99421f8a3e6a826aa7c2167a672a966aa73201aa485a8f0a9001de3a357a8f2a91d1d58a45aa8cba9a91cc2a344a890a9ef1b8da30fa863a98d1b58a3eda72da94b1a35a3b9a728a91c1930a3cea733a9f118eba2cda740a9ac18a2a2d3a73aa92d174aa27ba7e5a88716f1a12ba7ada8a414b8a1eda68aa855147ba1a2a658a8bc1132a146a61ca8501108a1eca5d3a7e40dbba082a57ba785106ba02aa51ba7321019a0d8a4a7a6cb0f669f6ba42ea61a0fa19eeca390a55f0ee29d55a31fa51610bb9df6a2cfa4c20fb89db2a2ada4630f1a9d41a286a46f100f9de1a116a46c0ea89ca1a16ea3be10619de3a112a456120000110c3a11110c3224e32a562c722a5f273f2d9b2ebb2e5d27322c822d0c30f7249b29612b7730bb202d243f25d630020f5aa14da12b31da9f6aa8dfa8373106a4d2aa15ac1d316ea577ac5eadb83073a617adf9ad493059a750ad51ae3c2fd7a751ad5fae042ee3a73dad59ae052d0aa823ad45ae6c2c0da818ad39aeab2b01a8eface7ad9b2a6ca79dac8bada22946a744ac1aadbd285da71dacf5ac1428d5a6eaaba6ac512753a62bab52ac4026d4a58baafcab5a25a3a548aab4ab8f246ea517aa7dab342460a5cfa925ab7523afa44fa97caad12231a53ca9aaaa3121f3a502a9e4a98620f99ed2a4b7a6ff1f9da407a7c3a8312001a646a90baa591e5ca316a885a9041e6da449a87ca94c1d03a403a84aa9701ca6a3baa719a9881a54a373a7f7a8541952a35ea7e9a8301932a362a7e2a81f1821a395a70ba9db1727a3d9a72ca97c17bfa29da705a9cf1640a246a7e0a8d21420a209a7b6a86714cfa1a7a669a8f81377a144a629a85a131ba1d2a5dea7c212a0a070a556a704142ea00fa5dba666135e9faea445a6c512bd9e43a4caa5cd102f9eb6a340a59411e39d33a3c7a43611ae9ddda27ca4ba0fa79db5a252a48c0f949d9aa239a4c7107d9d55a21ba4340f3f9d35a204a47d11109d1fa17aa2e30f00809b9aae9b8811e323042a772b702a6627dd2d592f1d2f3f26352c662d0e3021243a29812a7530a71f1a229c249c30e09434a2a0a2c2300aa062a89ea8c63001a393aaababa630aca43cacdcac5630f9a5d7ac9aadcf2f9fa60cadeaad822e0ea718adfdad8d2d19a7f4acf0ada42c31a7ecac05ae0b2ca9a704ad03ae382b48a7b8acadad352ad5a642ac1ead0d29c3a61cacf8ac8128b5a6daabb5ac072883a638ab59ace7262fa6acaa0aaceb25daa523aa93ab1a2598a5e0a92aab8d246ea58da9e7aaf22351a546a98eaa4c231ea50da96aaa3b22b9a496a8d5a90022e3a362a8c5a92321a5a486a8a4a9cf209c18eba3f3a6f81e05a855a975aaa31fa1a2f7a787a9c51d20a40ca86aa9cf1d16a32ea7f2a8eb1ce7a241a7d0a8d81b76a202a7bba8911a69a2eea6a9a865193ca226a7d9a8331948a293a72da90a1880a204a85ea9f4156ca209a84aa98c153aa2b9a7fea80f15c4a128a79aa8871456a1ada656a8c611fca042a61fa83e11e5a0c9a5afa7cc10aaa059a524a7241280a0eda4a7a6a8113ca07fa41aa62a11de9f34a49ea5c710239fb9a33da56f105a9e1ca3cfa44011a19d98a273a4eb102e9d18a21ea4250f999c94a1f8a34010849c5ea1b5a32210989c25a1f3a3ec0f489bcca005a4cd0f0080d59b1b9cb8174224b82a232c552a5627872dd92e022fd125182c6d2da32fcb2265288a293a302f1d871dec2075301698c8a4bea489303ba0cca886a96c3029a3b6aaeeab4f30eea447ac23adfc2fe9a5beaca5ad552f4aa6e8acdcad4b2ea4a6e5ace4ad532d89a6c6acdead932c86a6aeaccbad042ce7a6aaaca7ad052bb1a673ac63ad202a28a627ac22ad1229eea5d5abc8ac5a28e1a567ab77acb827aaa5dfaa20acb22649a544aa98abc725ffa4bea902ab2f25d0a452a985aa81248ba4f6a832aafa2359a4b5a8c6a9222323a474a87fa90523b9a33ba83ba9532297a211a85ba9d8219ea365a7d2a81d1ff722729e9da4081703a57ea999aa231046a42ea89aa94f1be2a368a7d9a88a1c6da276a668a85a1c6fa278a645a8721c0da235a611a8ad1b51a25ea62ba88e1a91a2d3a673a88218d1a285a706a9bd168ba2bfa745a95a11e0a1a4a733a9500aaca181a72da9af899ca1f9a6ada8fd0845a166a646a86108bfa02ba626a817088ca0c5a5d1a7bd0d39a03da506a74c1007a0cca47da6cb0fdc9f78a406a6420f8c9f44a4a4a5ee0eba9ed6a334a56e0ec59d2ca3a9a41f10329d7fa237a48b0fea9c24a2f3a3340faf9ce0a19ea37a10a19ca2a146a36210399c77a14ea34110f69bbba02fa28613008043935e9448109224372af42bc1281526b12c2f2e692d22259e2b0f2d8d2fd722f6267a28dd2fce1a761493955b30059c13a6dba753302ca01ca901aa25307ea235aa62abac2f1ca412ab33ac202f7ba485ab76ac602ecea4d6abaeac972df4a4ababc1acbb2c28a5c9abc5ac162caca526ac00ad5e2b45a663ac57add32a59a666ac53ade42938a624ac01adbf28dca5b3aba1ac13289ba537ab57ac09275ea57caae8abe52537a518aa43ab2325eea4bca9fcaab924cfa471a997aa3024ada402a923aac22389a4daa8d7a94c238ca48da892a9402336a407a8dca8e72203a4e2a624a8732205a4a7a792a86a1f68aa7dab52ac0d1d18a8fda684a6b9a72ea6d0a886a97b1eefa004a6f8a70d1fa0a1e1a50aa8b11d84a150a53aa7de1c7ca156a542a7b71bb4a189a584a7bb19c8a113a621a850175fa24fa7f0a83612dfa217a87ea9a50b43a202a835a9740ae6a189a7e5a894099aa118a7baa8860f26a183a651a892118fa0e1a5c8a7e51251a043a50fa7db134ea0cfa485a62d1354a083a41fa61d1433a00da496a50c12ac9f3ba3e8a46511b89eaba281a407114a9e41a246a4c410b29d31a22ea4560f389d06a2fda3270dd99cc1a1a7a3fa0cb89c92a12ea3d8091a9c30a1efa27e0e3b9c02a189a207100080eb98619697142924682a142ced27aa249c2a472ca828aa246a2be22c072c7b2231284b2927308c14ca9fe3a03530b09ca0a7a7a807301ea0f6a82daa8d2fd1a1b6a93dabcd2e32a397aaffab8a2ef6a3d7aa2fac9a2d0ea4ecaa20acbb2c10a4a7aaf5ab002c86a4a5aa01ac072befa45cab44acc92a99a546ac02adb62ae5a5a3aca0adc9296da5cfabb6ac61280ca58daaf4abed26efa41daa5fab1026daa4cba9fcaa5e25efa47ba9abaaa624aea439a966aa182476a417a92baa55233da4d3a8e4a9be222ca4c5a8d5a9f42112a46aa842a9952160a342a78ba85921daa18fa404a6e62166a2f1a575a7a220eea469a9f6aacf1c50a5f0a8e4a9381cc2a260a79ba89a1c38a270a621a8dd1d51a16ea5e0a63e1e94a015a46fa5c91ea3a065a3e1a4a61da9a0f1a340a55a1adda034a5eda60913dca16aa7dda89b8c7da281a8d8a968928da251a8bea94a941ba3daa72ca90593bca226a7b3a86b8f1ca235a622a8400839a166a52ca7921066a0dfa466a6b711d29f62a4bea52411439ffca32ca59e0edd9e80a3f9a4480e8a9e52a3c9a44b101b9e04a3b0a44a11919d9aa293a408111e9d24a25fa4bb10ce9cc2a137a47c10789c57a1f3a331115e9cffa03fa31110d19bafa09ea2cb0f169c0da055a1280f0080dd90c38dc816cd23e1299b2b58298823de297f2b5f2a0325312c492de82b4124122bb82c0a2d48a03da99caa962e949d6ca7aba8fe2d279d99a689a7832d2fa087a843a9972d75a162a980aa152d48a288a971aaaa2c41a22aa93caa232cf7a1b0a88da9e82a7ea2b8a888a9ba2a94a4d8aae9ab842bb6a5deacb0adc92a86a44eab5aac1d28a8a423aa73ab7f2676a482a9b4aa762521a42ca93aaac8241ba4e9a8eba9362416a4b9a8bfa9762320a496a88da9852208a479a866a9c4210ea463a84ba9fe2020a45ca83ba99b2049a461a83ca94720c3a333a829a9ec1e1ea2a6a7f3a8061eaca0efa591a7e01d7f9f8ca4cda50a1d45a06fa509a7811c1fa144a514a7361c84a13ea5cfa66d1c85a0bea350a5651c509f1ca204a4021d2e9f18a169a2361ea49fa2a00aa2121e50a05aa3eaa4281a7fa2fba744a91e9423a44aa99eaaae9503a3aca80faa0c963ba211a879a944903aa168a64ea8a60eeda070a51ba7b41057a0faa481a6f611f19f8aa4efa5eb12499f24a48ca54f12d29eb8a348a5e1118d9e79a318a5b211479e29a3e6a47511079edda2b8a44911ab9d90a269a40e11459d0ca204a4d011d49c9aa16ea37410929c3ea101a327116e9cf4a095a20810029c96a031a2f00d3c9b16a042a136030080488c669162110921ff250b287e265c22c7289c2a6a2a7b200d286c29752ba616c6969c18e12eac1bca2157221a2bca17c81649118e2c4296bfa17ba2cd2c639d6fa582a69f2cbf9fc6a77aa88f2cefa0a0a89ca9f62b99a1f9a805aa832ac8a17fa87da9e628cba109a8c4a83f26789b419df99ecd1a95972498f3985f12a39f14a33da4d820c3a176a686a7942345a20ca73da81e2395a26da754a8e922caa290a776a83222dba2a5a78ba8c121efa28ea795a84f21f6a292a798a8df200aa383a791a87e2004a37da798a81520fda261a790a8711ff9a252a794a8cb1e2aa351a77ba87b1e2da1aea599a7451c8f9b89a1cea20b18819ecea25da4021744a0b7a317a5ad1809a0a6a3f4a4a01a87a0c0a311a5011c5fa0b6a263a47a1cc49e419e24a0641d5c98e61d121ee61d829cc99831a0c918c0a3a5a9aeab1b9c1ca4f8a974ab369995a191a7e5a8698994a045a562a7a9108ca0daa4e9a60112f5a0a4a43ca6621341a03da4bca5ac12449fdba371a52f12b39e5fa30aa5cd11519eeba2c4a47211009e9ca2a3a40c10b59d55a275a4c00f6a9dfba14ea4c210209daea114a48510e29c5fa183a35210cd9c1da1e3a21d10ab9cf7a092a20a10b29cdaa052a2360e619c8fa01aa2a410c39b33a097a12c110080969163919e16fa22cb275c29cb270224dd2716296c29ee1dbb22a2249e2887162d1cbc1dd422f21d9523d5246527b61c752107247e2a53100b99a497602be799a8a39fa4972bbb9d03a605a76a2b71a006a8d9a8ed2a33a199a8a0a98a2af9a128a930aae2290ba2e0a8f6a907280d9e9ea4a3a50023f49a52a17ba0081f929c21a1f8a0121e669f3da3e5a36420a4a0a5a43fa514212ca12ba548a6db2085a1aaa5c7a6db20dba1fba54fa75120e3a138a6a3a7f91ff9a144a6bfa7431f00a253a6e1a7101f0ea255a6f7a7d41e15a257a6dda72e1e59a261a60ca8041eb5a29da635a85f1d88a248a6fda7751ceea044a5bfa6431bf19f4fa491a5251a2da030a485a5ef1894a053a4d0a56c18a7a07aa4eea572180fa1f6a458a61b18b89f2da318a5a918a4a0739d479ed41d761cb528422a871f96a71caefaaf10a29ea1bba7b8a887899fa0daa4c5a6b315a7a027a4f8a5a215859f1aa4b3a58f158c9fdea368a55515159f8aa330a51d15b19e23a3faa4d614559ebda2aca4ec13169e65a279a48313ad9d07a23ea41513459db7a114a4b712de9c62a1a5a35312b79c2ea14ca31612bf9cdba0c5a2c511b69cb7a05ca2be10899c76a013a25e116f9c52a0b8a1310f4a9c2ba0c3a11211759bde9f80a1191000801b8df289af156e218a26e427e8262d20bb25b9262d28881b17226c24e527cf1cd621862386266020ac22b8246427651df820f82380289d16d314a51c47297a940ea021a09929c29b07a49da49a29a39ed4a52da7712956a073a797a83d293ca133a844a9b5286ca142a80ca950274ea0b8a6c6a70e25ec9e09a5dfa52823149fb6a47ea5d821549f96a44ba51f2130a0b7a49da5e52091a0f0a4f0a56720f6a065a570a626203da1c4a5f1a6d91f4ba1eca52da7451f55a107a685a7a91e80a128a69da76f1eaaa121a6a0a72f1e9da1f6a56ca7811db4a1e4a55fa72c1ddea1dda57ba7d51ca1a185a524a7171c63a120a582a67c1beea09ca4e4a5611a6da032a46fa5771924a01ca44da5c5181fa024a476a5bb182ea033a485a5ba1853a032a483a52b186ba040a4b0a5571750962f9a5b9cc6102a08ad0dab10f004429c93a053a29a0a889edfa2d4a4b910009fb4a297a43914c99e9da272a4d0147f9e8aa269a4b3146b9e9ba269a40414539e89a261a4db13419e48a24ba48e13ee9d10a220a43413a69dada19ba3b5114f9d4ea135a34e12109df1a0cba2f111bd9cb8a072a2ac116e9c6ba016a28c104e9c53a0e1a17310419c3aa09da12411469c33a076a1130f229c07a064a13210009ce19f3ca1441200006e193e1a4706891eb72475252425401d052438257726d61c7f2252248e26501dd3210c245c265f1d3e21c8233127ac1b091f4821ba27f415bb16c01b2a289788749a97984228bc96fba066a16128379c25a447a53128cd9ea9a525a7d1272fa067a6e5a716270ba09aa6efa720265a9f36a62aa70b25079fb8a578a6ab231d9f34a50fa625221f9ff9a4cea52721859fd4a4caa58a20dd9fdaa4dba5fe1f3da0fda4eca5651f66a02ba52aa6e41ea8a04ca55ea6561ee8a047a581a6c21dfaa06da596a6951df5a074a5a9a6001d04a172a5bea66f1c11a18da5f3a64b1c03a17fa5f1a61d1ce8a060a5d8a6ab1beba014a586a6071ba1a0b5a40ca6db1955a056a4b5a5f418f79f14a44aa5bb18219fcaa325a51b18f59ec2a32aa50718ce9ebfa338a5fd16059fefa35ea5a717e09fc4a357a58f16e99c1ea090a1df124898379df19e0211079cd99f79a1d00e379e2ca1fba3a184279ee2a15da43210ec9d0fa273a46b11039e1ba270a45411ea9d02a24ba42e11ae9dcba10fa4ff10c59db3a1cfa3db10999d7ba177a3ab107c9d50a151a387105b9d15a110a35510ff9cc5a09ca21010989c64a00fa27b0f659c2fa0caa1210f2f9c1fa0b8a1050f5b9c17a099a16c0d869c28a0e1a1eb0ee89bc89f8ba1ad101f1a2a222f24fb24cd28442cb82cf82d0529bf2ca32db12e2d28192cb22c862fe824c82879291b30d6197c945d158530efa15da78ba7ad30afa5dba95caab13026a8c8ab96ac713083a9d0ac8fad2130aba930ade3ad362f9fa881ac32adb72d0baa52ad6dae222d0da984ad0aae652c69a8a3aceeaca52ba4aa65b0d0b05a2ce2a8aaac63adc92812a8dbaabdabd12775a5d9a830a9362886a507aa33ab132ba2a619aedcaf1d2093a183a8bea91e212d9b01a656a86c22fe9c33a615a89023c6a179a63fa8ed2266a304a721a82822c0a4e4a776a8842169a428a824a944204ea32da75da8771e2ca1a7a4c1a5071ebda232a86da9661c8aa2f0a6a3a8541b67a155a614a89e1be0a0d5a59aa7671aeda061a522a76a1997a017a5c6a6951859a0eca466a6b9172fa099a428a6371711a07da405a60616f69f56a4d4a5be15959f32a499a5a4145f9f07a46da567141c9fcaa34aa5e2129f9e84a31ea58f12459e45a3f7a4e010079e13a3dba4b010a79db6a2baa47210579d87a296a41b0e3b9d63a26da4e80dfd9c29a236a4a20dca9ce8a1d9a3570d6c9c81a153a3fa0c519c2ea1dca2ae0c1a9c0da190a2840cfb9be0a051a23b09ad9bb8a013a2440c889ba7a0d4a10c09879a52a0aba1b008289c92a0bda14e0300004a18561a751fbb2a502e5a2f6d2e512bcd2e11306930712b282e422f92312d27ab2ae62b7432b6180816671d0533e3a2b4a6f8a63f3375a7a9ab4aac0633b5a941adfaad5132b8aad6ad81ae8831f6aa9fad24ae923072aa72ac97acdf2ebda9fdab02ac2f2dd4a946adbdadc22cdda9bdada9ae932c5faaccafb4b07d2c0fa9f0ad02aff02a4ba78caa52abc4295ea7a3a8e0a84d2ab3a699aacaabd6288ea6b6ad4bafe02351a58face1ad5421f49dbca9c8abe420e81a7ba7b9a9be20cd1879a790a93721869ee0a71ea9a22083a462a979aa852008a869a97daa251f39a5f9a851aa531e7da421a801aab81c8da632a983aa641daea421a958aa491d88a362a89fa9e31ccaa2d9a713a9511b30a22ba798a8931886a152a61aa8d31635a1d5a57ea74d16f3a08fa535a71316dea04ea5d5a6bf1495a003a57aa66d1453a0b6a42ea6291425a079a4e4a5cf13e39f42a4a6a55813729f17a474a56c11029fe9a34ca52f118a9eaca323a5f7106f9e7ea310a5da0e449e47a3dda49b10169ef6a29ea45b100b9e7fa25ea4ce0dcd9d0ba20aa4660d249da2a17aa3090d7e9c4ca13ba3bc0c4f9c1ca157a37b09499c02a163a35f093c9cb2a01da33e0c7d9c84a045a2f408759c23a050a1be0b3d9b349f83a04c880080c6a181a33c21be2aa62e11307c2f832c90302f314131dc2b182f2d309d328528202ceb2c8833731c3e2014231d3449a5b4a808a957342ea99fac72ad41347eaa06aedcae8e3317ab4cae55af72328eab4fae1eaf1c3172abafada9ae8c2fdbaaa5ad2baed02d7baaf8ada7aefd2c08aa42ae1baf8f2ca8a921ae0daff22ba4a900aeeeae4d2b86a881ac4aad802af1a77cab19acdf29cda815accbac422866a7aaace7ada42347a556ac7cad851fd89f11aa5eab911dc21c65a7bca9cc1817201ea6dca8bc18fc1aa9a6c9a8521878a042a886a92b1722a5eca9e3aa181927a5bda9d3aa7e1900a530a980aa6c1b34a59ba9a4aa321c65a59da914ab701ba8a40ca99caa441c3aa4b7a844aaf11ad1a346a8b2a9371ad0a284a7dca8ae1804a2a9a64ca826187da15fa61da8d7173aa111a6eda76217e0a0bba591a7e51583a05fa50da7771518a010a5b3a61715d19fc3a453a6ca14419f7da4f4a58414f39e50a4a6a505139a9e20a454a5a412849edaa315a551128c9e65a3d0a4a010669efba29ba45e10419eb0a268a42310029e4ea239a4920da49d02a20fa4500d3d9dd3a1d0a3260dd69c93a171a3ea09679c53a11ca3b50c239c1fa1efa2870c1b9c0fa1eea2860c3f9bfea055a3690cf09bd6a0c6a27f030080aaa01da1b021f82b8f2fd730f12f062dab3079317731b22c7e2f6e30a3328428c82be62c7333ed12081d03211d34d1a43fa887a84634efa8a1ac2fad6c34dfaa11aee7aee33308ac06afddafc5320dac0caff4afbe31deabfbaee6af7d30d0abe7aee5af122f11abadaeb6afe42d04abcbaec6af012d4aaa40ae58af3c2c69a9a8adb2ae2d2bf7a8e8acd2ad1f2aa3a876ac44ad0e2922a872ac2cad142860a78dac89ad67251da616ac0aad2323f9a14caa3bac6d1dd81bc3a7fea9b6920f2286a52fa96b9c3e21a8a59ca8de9d04904fa663a8d29af3a224a81ba94299b9a464a966aa069546a5eba973ab8c14c3a548aa8dab281a10a5aba932ab9b1a8da440a9aaaaf51a3fa4dba82aaa461af1a392a80faaef18d1a2f5a750a93e1858a238a7b7a84d16eda1f9a67da80316bda191a63da867146da12ea606a8181425a1dca5afa7ad13f7a094a575a73813b8a044a513a7bd1268a01ea5e0a6681227a0e0a494a609120fa0a4a456a61a1007a06fa40aa6c20fa49f42a4c5a55e0f649f13a477a52f0c099fb5a30ca5ea0b379e47a3bfa4fb04929dbca265a49c04ea9c34a2eea35e0a919cc9a16da301044d9c7ca1fda2d6032d9c40a1b6a29209379c04a14ba29683769ba4a001a25b03149c4ba06ba1410300801f955e93da10452c37302b31672fbd2cb7309631af318d2b452f5b307532ae288c2c732d6733501e322004231134a4a343a803a84a3441a840ac38ac563464aaf9ad46ae083474ab29afc2af1b333facb6af4ab0dc311cac98af44b09f30e9ab46af18b0ca2f50abfeae10b0352ee9aa9bae9caf272d7baa1dae07af242cb1a9e1adf9ae752b77a98fada5ae562a43a9fbace4ad092984a8ccac93ade02742a8daaccbad9225e6a7b3acc6ad3823d4a4c0abc4ac5120561084a841aa0b191b25d8a31fa862932c2621a1d0a6aa9ce52088a4a7a70a9e5ca55aa8d8a9929a7da5fda91fabcf95d8a4b9a925ab6514f6a5f3a948abba18b3a596a903ab79194aa538a99eaa151aa7a52da98faabb19f7a414a982aa5a190da48fa8d2a9b11852a304a811a9c416c4a246a79ca820162da2c9a655a8b715bba174a62aa82e148ca127a6f9a7e01375a1dda5a3a76b133ca186a553a7e912e9a02da5f6a668129ca0dba48aa6021246a0aba43ea61510d59f7aa4f3a5d50f369f4ba4bea56d0fb29e25a483a5180f6e9efba354a5190ccc9d96a32fa5b50b719d26a3dca42f0b049d79a23fa46c0de09c06a2daa30e0ae39cfea103a4170abc9cdda1e0a3f70c949c7da169a3b2092d9c16a1aba27f0c469cd0a01aa2740c00008004940c8084342c26301531202f162d94307f3159312f2b0a2f293001324928d52bf32cf7329f1dbc216024bb332ca360a7d6a70a34fea723ac61ac58343aaae8adc8ae0634a0ab4eaf43b0ef321aace2af86b0e43132acdeaf89b0d73016acaaaf6fb000309cab46af2cb0a62e1fabe1ae07b06e2d6daa2fae68af3b2c03aad9addaae1d2baea998ada6ae1d2af2a810adffade828a1a8bcacadad9d276ea8d7aca7adb725d4a75bac40adef230ba5d9aa59ac8220bd8f7fa888aa981d4b2524a371a79e1378281e943ca5269d9f27d29353a4e39c451cc3a6faa8199cf9a44daaa6abf3966da50aaa89ab490ec2a55caacaab051778a5bfa972aba119c9a473a9f9aa5a1a70a455a9e9aaf51894a43fa9d3aa4d1768a4a3a80baa4b1607a441a874a9b41556a301a822a94e15d5a26ea7d1a8ec140aa2b8a66da8491271a157a641a8dd1119a12aa62da89211f5a005a610a85211b5a0d7a5eba70d11a1a092a586a7c41049a037a5fda6761006a0f6a498a633106a9f99a416a6c80fd09e51a4b0a53b0f8a9e0ba447a5110c119e8ba3e7a4950b859df0a290a4cf0d069d62a23da4590d909c06a2f4a30c0d5b9cb7a185a3c90c409c71a11ba3610e529c35a1a2a2680c0b9ce8a063a2e00d259c95a0ada1250c0000a992429173118d2b26300b31e82e432c9b3083313c31b42af12e1130d73150284b2c722d86321c24ff24ea271033e89873a37da49b332ca663ab26ac0f3480a9d2adc4aea23317abeeae0db0e0328eab9baf60b0d331b8ab13b087b0e2309babd9af5eb0d92f28ab6aaf37b05e2ea2aaddaee6af182d39aa3dae58af232c34aafeadd2aede2a23aa9dada6ae8f291ba964ad4aae9f280aa918adfaad6d270ba912adf1adec25a9a813ad3eaeaf249ba781ac96ad662230a234aa0aac33200f25eaa221a89c1c0b2afc21db9f5a14a82945221fa0d79a8226b5a0a0a5469aae9c61a89aa9f79153a54faad7aba9151ea58ba944ab771851a5d5a953abdf1919a581a90bab6419a0a455a9f9aa161964a438a9f1aa8b171da4cca868aac21675a347a8cda9331479a31ea88ca997155da3dba71aa98713fda251a7b9a8ed127da2f7a681a8bb0f0ca286a641a8280f85a124a604a8960eefa0cfa5a5a7180ecaa07ea553a7b40d79a03ea5fda6530d27a002a5b4a6090dbe9fc1a46aa6ba0c099f84a427a6720cbc9e4da4e5a5a605559e15a4a9a55c05ec9daea345a57c0b8c9dfea2b7a4d00a679d93a268a445041b9d6ea243a42304ec9c35a231a4fd09d99c10a20ca4dc036b9ce4a1c7a3990ca39c79a1cca24a030000828ddc85820d582b1130ff30e52e712c60304b311031ba29682e992f6431f327152c2e2d49327f20ed24d42627338f9e53a3eca2953340a63cab95abf3332ca9d4ad81ae5e3384aa15af27b0a2328babddafa2b0d431c4ab0fb0d1b0dd30a5abd5afa3b0ff2f72ab92af6cb0852e68ab17af2eb04d2d59aa92aeadaf522c75a9c3adcdaeb22a67a978ad73aea029faa82aad2eaea4288aa8f5acdaad052882a8d8acc2adb02644a8d8acccad0c2582a77cac89ad0d23f6a497aa13ac57204e1cdea445a83b1cb529272190a29514ff2bfd24c39e52955a2a6b201da4929b1621b3a5c0a8f2996da48aa93faa681642a4cfa8b8aa4f185ba5b7a971abaa1a6ca598a91babb21a51a574a9eaaa2219f7a44ba9ccaadb183fa4e4a86eaace16bea38ea810aa30164fa35ca8e3a9851711a329a89ba90117d0a2b3a70aa9691677a23fa7bca8f71508a2dba695a84a14ada194a672a8121449a156a638a87b11e2a0eea5d8a713118aa09ea591a7b50d56a061a538a7680d08a01aa5f3a6140dbe9fe2a4aca6cf0c589fb0a463a6920c109f62a4f4a5460cb69e1ca487a59c0e5d9eaaa30aa51a0e289e52a3dfa4c50db99dd4a28ea4540d9e9d3ba220a4dd0c509deba1cfa3a003ad9ca1a1a2a36203999c35a1c1a29c0b00803490d88c010e732bfb2fd1309f2e422b52302a31fc309b29672ee42f8931b126ad2bfd2c2b3275209422e425cf32c79f55a58ba58933eea5b8ab19acff33dea8bdadb4ae5b33e8a9edae11b07d32deaa6faf68b0a53137abd8afaab0c93049abd2af89b0fb2ff0aa81af6cb07c2e86aac3ae04b0172d3daa67aeacaf2c2cb6a9f3ad30afe02a47a994adc3aea129cca82dad3faec22873a8e0acdcad0e2836a891ac7bada02609a875ac68adbc25c4a741ac2cad972427a691aba6ac0e22c39daaa846aac120d829d2239a9f421a4b2dd829e024029c302d6129c5246c9f1829ac2185a04d9e8fa231a9eea90a923ea651aaa3ab92194fa68fa947ab851980a5a2a909abbf1ad8a460a9e9aa441a8ca40aa985aacb193ba4cba826aa6518cba399a81daa2a18c1a369a805aaca177aa305a887a90417e7a27da7eda8f61470a25ba7d0a8c3144ea22fa7cda88c1405a2d0a68aa81712c0a161a642a894117ea1f0a500a82a0e14a1b5a59ba7cc0dada072a546a7790d48a03aa5e2a6250d0aa0f3a474a6d30cb39fa4a41aa607066c9f67a4d0a5a905ef9e24a46fa54605489eb6a3f4a45d0bce9d33a39ea48a04649d9fa276a4330a149d8da274a4050a3c9d4aa24fa4d103b99cb6a107a41a09009dcea10da4210c0080b69282933015882a462f6f30572e0b2b31303331d6307629422ec32f44310127c92bf82c2c32c6202724f525ef32779fe9a54ca63d337fa566ab34ac8f3346a899ad58aef83279a9b4aec8af2f3249aa7caf65b05431ccaad8af84b09530c4aabbaf6eb0bb2f52aa61af4eb0602efba9d7aef3af2d2dc0a933ae38af272c7da9ccadcfaeca2affa887ad84ae9429a5a807ad01aecd2888a8b9acb9ad00280da86bac45ad88267fa74eac27ada4251aa711acd7ac632453a68eab86ac0b227ca461a9b9aaaa1fd827a51351a4c71cf22deb2b5728a1956d2f4e2c8429e0a1332d212a94261fa3922425a2e7a5d29fbaa546a94caa71956ba6a4a813aa69126da55ea9b7aa4219a1a40ca999aa0b1a98a4dfa855aab6189da4a0a80daaf416a1a4a2a8f3a9c81622a473a8b1a959165ca32ea87ba9e315eea2e5a71ea95c1583a257a7c8a8f312ffa1c2a66da8960f96a181a644a8230f45a14aa627a8ac0e05a100a6dea72a0ef1a0bba584a7c30dcfa074a526a73c0790a022a5cca6bd0628a0dda467a652066e9f9ea420a6f105e99e6ca4d5a5a2057d9e1ca47da5c60b1a9eb7a319a53a0b929d18a3aea4a50a199d99a255a41a0ded9c4ca229a4d20c349d43a212a49709dc9c12a20aa4360ef29cb2a15ba3458300003d107511d9849a29f52e44305f2eaf2a1c300e31d33008293c2e862f3f31ba27e52be52c0132c5209522ea24d032a59dbaa517a604334da4f0aa01ac1633dda752ad1faeb93236a986aed1af0532fba968af4eb02f3186aaedaf8fb0893070aabdaf75b0702f0daa34af26b0dc2db4a99caebbafe12c46a92cae3aaf052c0ca9d6ade2aea02acaa882ad82ae5d296aa8faacf7ad51282da8b1ac84ad052705a845ac15adcb25c5a71eacf6ac032557a702accaac3f2459a7ccaba0ac9a236aa501ab99ac6621541d03a675a81a1de92dd12b2028fc9be8300b2ff32c06a433301c2e1f2c45a5442a7424a49c4aa346a4d3a9e2aa909114a4b5a8f3aad91ac7a407a97caa6a1beaa40fa9b1aa411b60a4dfa882aad51932a4b6a832aa8e18c7a386a80aaa4218a4a33ea889a9211638a30ba870a9b315cfa2e1a74da96a15c7a2a0a713a94e136ca217a7c0a8f60fe3a1c3a684a86b0fa0a168a64aa895085ca133a61ba84a080ca105a604a80908b3a096a574a7690716a02ca5f2a6ca06959fd1a470a6b20c179f82a415a6590c159f3aa4b9a5140c069f0da45fa5a90be79ea7a311a5f90d769e77a3dba4c50d2c9e05a397a4600dc19dd0a26da43c0f919d7ea22da4d50c3b9dfca1a3a35f0c479d4ea109a38b0b008048948695fe0f3f29052f51303c2ec92a27302e31b830a828122e932f2831f325702b992ce5315921d5237f268b325b9e87a5f7a5ae3289a401abd1abc4325ba714adf8ad5332c2a83cae92afc03194a90daf38b01a31f0a96caf70b06a30dea95aaf62b0352f9da900af2fb0d22d71a984aee6afb92c2ea927ae82afbc2be0a8aeadf3ae6c2aa8a876ad88ae6a2980a821ad1fae91282da8c9acc8ad8f2712a85fac4cad062696a724acfcac6e252ea7ecabbeaca924d9a665ab80acb5235da655ab6eac1022bda527a91faac91e0c297924609436941c31f42f942d12a5ab316030ae2e01a7b22ee42c5f2a86a70a148ba5b6a716a038a506a960aaca1982a4d9a892aa601c5ca4dca858aa7c1b31a4c3a840aa071a1ba48ba8f6a9a318afa354a8bca9b01667a34aa8b7a99b142ca325a892a94714bca2b8a759a99a109aa26da70aa9c3096ea21ba7afa85209e9a1bfa664a8ef084aa16ba640a89708f8a026a611a84108b1a0f1a5dda706089ca0aea58ca7888776a057a528a702075fa005a5b7a6860632a0b8a45fa6128604a079a402a6b2852d9f21a4a4a542056a9ec1a36aa5e304159e6da327a598040d9e2aa3d1a4950aec9df1a2c0a4370dc79d9ba283a4e609129d27a213a46509989de9a1d2a32a0c70075b0fc01434847028bd2d242f6e2d492a1a302931ac306728e92d222f05319825982bb62c9e31ad1f902377253b32019e14a6baa6643270a4c1aa05ac6f32daa610ad31ae163267a822aeacaf803142a90aaf39b0dd3062a932af59b01e306da9fcae1eb0fc2e26a98eaeddaf8e2dcfa83dae7aafa32cada8ecad15afa72bbaa899adb1ae382a62a839ad6aae2e2905a8ffacf4ad6128b6a7c1aca4adb42703a844acfcac5926e8a7b4abafac4f2547a787ab88acae24f1a656ab68ac1224a6a6c0aa1aacb12286a4bfa9dbab5a208518a5a579a71b1877304f2e782c8da4b2325031a32f1daa6831f12f712d38ab8c2a3226232201a9e7a6e4a9b0aaca0eafa3dda866aac315a1a491a82baaf4194aa481a8fea9c91933a456a8c0a98f181ba436a8aaa9ca160da417a87ca97f16eba3fba73fa9671468a3cfa712a91514b7a297a7f5a8951036a230a7b8a82f10caa1d9a67ca8b00f7ea19ba654a8150f37a135a610a8710ed0a0c4a594a7e1109ea076a53ba76f0d78a04da5f0a62a0d41a015a5b5a6e80cda9fcda45da6960c269f81a410a64d0cb09e42a4bda5070c0b9edca36da5320ee89d68a313a5c80d849dd9a2a0a44b0d3a9d76a243a4ed0e419d22a207a4730e029dfea1caa3e10fc09d47a1a6a24d0dce01a20c4913b58334288f2d1f2f5a2d9e29b72fcb308a30d227722dbd2eca309725ce2a3c2c68313520a420b821ed31fe9ac0a542a7e0313da366aab6abec312aa6ecac07aebe31d4a70aae5caf4131bba8aeae13b0ad30faa807af32b0c12f0aa9dbae1ab0752ef2a8a7ae03b0302db8a842ae8baf582c70a8d4ad16af532b62a883ada7ae3b2a5ba82dad3fae4f291fa8ecacf2ad76286fa7a3ac93ad532708a747ac2bad2e26c4a6d1abc2ac20256ea629ab61ac4924fea5f3aa3cacd723b4a596aa02acdd224ea51aaa51ab772281a424a97baaee1e3c2b6b285224b39d493337328630fbaa23337731872f62ad342e5b2bb028dbacbda4bea89fa9969f6fa347a89ca91f1a1da457a8a6a9ff1a1ba442a89da9cf199fa32aa864a9981960a301a847a9661828a3e6a73fa98e1627a3e8a72fa94816a8a2daa74da9371475a2c2a73ea9e81332a26ba7e8a84410fba128a7ada8da0fb1a1e5a69aa8ee0863a1a9a65da89c081fa142a62fa83d88e1a0e8a5e7a7d687b3a08fa56aa7398760a02ea5faa6bb0612a0d4a47ea63606669f59a402a69705899eb0a35fa5f204e39d07a3f2a4c80ad39de2a2c6a4930aac9d76a29aa41e04a59d2ba24aa4d609769dd2a1dfa3ac03b49c93a18da3450c8d9deba11da4a1100000770353117783fa27d42d622f222d2e29572f9e304430dc27252de72e90300d25492a712c0131cf1c851bb21c5d31f89c36a6dba7993143a3a9aa01acc331cea5e9ac0eae893141a7c7ad4baf063140a865aed5af7a3082a899ae07b06e2f7ca849ae7baf282e52a8eead28af022d22a8b1adceae182c36a87eada9ae072b34a85ead5eae122a0aa806ad0eae3d298aa790ac97ad5f2845a741ac35ad95270aa705acd2ac9f2665a682ab86acae25e2a5e9aa31ac9b24bda59caa05ac062497a552aac4ab632349a52daa7aaba92283a492a90eabb82177a474a8b0a9ee1cd6301e30ba2d89a87f34dc338d31c8aeaa315730d22d5faf5d9f17a573a812aac5a5e7a828aad5199ba303a861a9ad1a72a41ba864a9bb18bca3c9a735a917176ea382a713a9e21432a35ea702a9a91126a371a7eea88a1139a3b0a729a9fa0a06a3e9a73da9f71078a28aa702a9fe0930a245a7c2a8710908a21ba7a8a80709cba1a7a666a88e0840a137a61ca82a08f0a0cda5bba79e077ba058a53aa703070da0f8a4bca6d70c339f8aa42da6620ca19e3ba4c3a5150c269ec9a350a5830be39d67a3efa4240bc69d03a398a4c40a989dc7a25da48a0a8c9d9aa240a46f0a6f9d57a21ba42e0a419d22a208a4e80ed89c52a1e1a29a830080ce901a902d0d1828d32ded2e692d0129b82fea30593036272f2d782e63301d24cb29de2af130da1b0315ba1c3531cf9cb4a6d1a74e31cda256aa4cab6731f6a475ac5dad1f3172a660ad7dae9a30b5a7e2ad13aff62ffea714ae50af9a2e0ca81bae50af9c2d0ba8d8ad14af822cdea78eadc5aea52bdfa75ead93aeac2ab7a706ad2fae9a298ea78bac75adaa280ca74cac3cad0a28b1a622acfcac352775a6aeabb5ac2b2645a60fab56ac3025c5a55daad0ab8a2498a515aa6cab332485a5a8a9f7aa442355a565a990aaa72219a521a947aa5322f7a4eea835aa12215d26fe91e4a27e9b1b3464329630eeaee3349733a531b7b13129c026861e36afa5a647a91faa0a1cfca203a835a9371d3ca352a7f0a8ea1bdea25aa7d7a8d41982a210a7bfa8951868a214a7b6a8e5166ca260a7e7a8b8146ea2cea73ca9641193a20ea86fa9c90a53a2fea744a9460a23a290a7eda8a989b6a101a77fa811895aa197a63ea88f880aa133a611a827880ea1c3a594a7a507dda058a519a70307c4a0eba49da6750659a08fa41aa6ed05c09f33a49ba5180ce99ed8a33aa51905169e37a3cea41b0b809d9ca273a4930a239d19a21aa4210ac19ca4a1f7a3c60caa9c77a1a6a39d09a69c2ba1b8a36c0ca69aa8a038a42a0c0080b590fe90b510e528a72e2230a52c5528082f7a3016303726f32c502e5730a422ab288329db309918939eed9c4d31f79d26a8d3a8703102a3f5aa33ac4d3115a595acb2add83077a673add9ae6c304fa7d8ad1dafdc2f91a7f4ad25af942e81a7b3adafae5b2de9a657ad67ae632cdca60dad25ae5c2b19a7eaacedad862a27a7beacbfadba297ea672ac59addf28f9a51bacf5ac1228e2a5a4ab9fac1027e0a5f0aa28accf2585a57eaaddab4f2536a509aa2eabcf240ca582a997aa1124bba433a93caa71238da4eba82faaee225da4b8a8dea98a2220a44aa85ba9e6224da483a8a0a9c0204b317230b02e65ac7a362c35c133fbb3c22d1a2ce52850b284a79ca9bfaa311966a2a4a7f4a8c81d80a2c0a689a8031c65a298a652a8fe1b1fa26da631a8c01a35a297a646a89b1880a227a7a4a81115b9a2bfa719a9db1181a2d6a750a9038b06a28ea731a99e90c2a16ba711a9f1929aa1efa6aea8219252a15ea651a87391aaa020a630a8188e5aa0aea5aea7748718a020a5dfa6bb860aa0bca466a62706f79f78a4f8a5cf05af9f48a499a59005f49ef2a328a52a05e29d21a3a2a4050b209d66a231a45d0aea9c13a202a4160dba9cd5a1aca3f00cb49c95a123a3d40c469c59a126a38c0ef59ba1a0f3a1e40f0080938ec290d80883211d292e2aa7261027e72d452f902f7626f82c2f2e3e30dd220629ea29ae30f414949e05a06331bf9e85a8b5a92f3190a2f1aa38ace9306ba43aac29ad64304ba5b1acb7adbd2f12a6ecac0dae8b2e1ca6eaace0ad942de8a5a8ac90adc32cb5a562ac4dadc82bdda568ac6aadba2a55a698ac9aad192a74a6a2aca1ad862953a66aac7dad732801a61dacfcacc027cca57eab90ac91266aa5c3aa25ac7a2551a555aaa7abeb2432a517aa4eab872401a5d0a9fcaa0124d6a465a98baa512394a4fda804aa242331a454a85da9be2296a34ba793a8762207a26da609a8f820c6a580a8b7a91a1c411dba1d8c1748af2426eb234523bab17ca66aa80fa9bb1c3fa1fda5a3a7501fb2a1f5a5bfa7801d82a161a54da7681ca1a184a55ba7ca1bc6a1b9a5c1a7bd1814a27ea65aa8320c9ea2b8a740a9278cf3a248a89fa9c09167a219a848a9e390daa178a7f1a8259098a10da7bfa8fd8841a196a662a88288cba0f6a5d1a7fe0785a04aa507a7430d6ca0d0a489a6c90c5da084a427a6720c35a0fea382a5f40b719f1fa3d0a4150ba29ea7a285a4b00a4a9e60a250a47a0aba9d35a229a434044b9d12a206a42704f69cd9a1afa30b04c49caca13ca3ed833e9c55a112a3a709479c2aa1b9a2650e1d901c9c0a9c571e2825282bb92cf929e1266b2d8a2e9e2c78276b2d062f6d2fa122a0295c2b3830af9411a36ba4f030a0a0e9a923ab94300ba37eaba2ac5f3052a42cac3dadb22fcda45bac65add42e36a564ac60add62d12a53eac3eadd72cc4a483abaeac0c2c6fa4d6aa3eac742aa2a408ab41acaf2946a541acc9ac062a5fa6ecacecadaa29d3a560ac82ad45281ca529ab5dac54261ca55faacaab3c2507a515aa3cabcf24d0a4aea9dbaa342496a46ca988aa572388a44ea951aada224ea4dfa8faa99a2255a4c5a8bca940228aa486a8a0a9ed21bfa22ba7b1a80c221da18ba45aa520225da30da829a9271e75a3d2a84faa1f1833a32fa855a9fd196da265a61ea8111c9da218a673a72b1d00a1bba4eaa5251ed4a007a42ca5641e1ca1f1a333a5da1dcaa058a4b8a57b1afda0daa592a7bd8c2ba2f7a73da90598b8a28aa8faa9b398b6a24aa8c8a99498f1a2b4a710a99397a3a20ea7a1a845943fa22fa60fa84a913ea16aa50ba756076da0dfa455a68806d49f5ba4b9a5d6054a9f11a449a56505e09eaaa30ba51505689e4aa3c8a4e304e59de8a291a4f10a4c9d5ea262a4640dd89ce6a126a40c0dcb9cafa10ca4ea0c979c68a1daa3c70c719c12a153a3880c129cb8a0dba22d09109c58a0b1a1c20d0080f993db8e3e148024662b922c462a0d25472c8d2d242ce725d72c372eee2c4525662c9b2d672e9b9f02a95faa5c308da05aa980aa472fb5a00da9e8a9642ec1a11baa3eab5e2eaaa295aa16ac6c2d03a411ab30acb22c0ba4d5aa03ac052c14a3d6a9f9aa842aeea211a9d3a99e291fa410aaf2aada2952a527acecac7b2a57a5a0acbcad822805a428aa8fab7c2563a471a9a9aa962434a43ba94baac8231ca419a91aaa3f232da4d9a8e0a9402213a497a8a9a9502109a496a89da9ec2003a48aa87ba93620dba380a875a9a71f22a469a85ea9f11e57a341a840a9111e5ea131a7a0a8901d55a092a503a7241d6ca04fa5b8a6991cd8a103a64ba7781c3aa295a5fea6821bcba153a5caa61b1c6ba088a30aa5631c20a0a6a165a38c1d079fb9a06fa1341e3a9fcba048a2471eb8a097a411a6da1832a39aa822aac196e9a342a9d2aae298eaa287a805aa8d9847a2bfa73fa918962da128a61ea8648efea073a50ba7768754a0d7a47ca6a006c79f77a4efa5890c319f1da487a52e0cde9ea9a33ba5c80b9e9e68a304a5860b3f9e1ca3d0a4390b099ec9a2aaa4ce0d939d7aa25ba48b0d499d02a2efa3470fe39c96a15ba3d60e8d9c38a1f2a2870e5e9cf2a089a2420eeb9ba6a01fa2f30d4c9b0aa02ba12c83dc88b491308d620f5e1f81232923f720d8230e2a6f2b9f2ae0211129572a442c41195f1d1420cd2d8e1b25222c23322b67110d98559c302d8c9bcba4d5a52a2dfc9f32a8f0a8192d7ba13ea966aac52cfea214aa9dab352c9da379aad9abf12ae6a2b8a9f8aa272961a282a88da99826b99cc89e93a0d019fc94db927689d6870f9a409c0f9cc2149ca07aa41fa5d22005a2e4a60fa85e2152a23ea75aa89821b7a274a77ba8f820bba285a78ea84720cda299a79da82b20cba284a78fa8951fdaa277a7a0a8e41ec3a283a797a8361edca26ca7a7a8081e03a37ba792a86b1d44a29aa61da83c1c35a07fa492a51019a49cd2a1aba32e16df9f9ca3c9a4601621a024a485a5441861a032a457a5511a95a001a422a58f1b72a006a2e6a3a21c0c9dbd9a989c101e8999891d5a1dc01fa79f6aa281a428161da453aa61ac7c9eeca2b3a992ab0c9cf8a01ba7aba87294b9a04fa543a7838761a0eaa457a7f306eca07ea44da6c40c36a032a494a5670c5c9fdfa34da5210cce9e6da307a5cb0b769efba2cba4520b2a9eb8a2a4a4f90ac49d59a26da4a90a669d02a23da44e0a059d9ca1f2a3f50cd19c4ba167a3ad09c49c1aa1e5a2900cad9cf7a097a27d0cbb9ceea051a25909889c9ca01ca2e70deb9b3fa09aa13c0f0080ad91d6901b18c5221229412a422808230f29652ad4294d2021259226a4291517bc1c521e1f26ea1dad225024fc25411e96231325612abf90209eeb9cba2b659c04a5cca5aa2bc29f9ea78fa8672b40a1c3a8cfa9b12ad3a133a91caa242a6ca296a9c0aa962934a31faa92aba92843a14da895a92925d09ed9a407a647215f9c13a2c7a2fa1d379ecea263a3941d59a0baa44aa51f1fdca03ca54da6a71e7ba19fa5d4a62a1fb1a10fa65ba71f1edda14aa6ada7fd1de0a156a6c7a7591de7a165a6eca7351df5a16da602a89d1c01a251a6eda7751c2fa271a616a8541c91a29da636a8571bdfa1c3a55ea78f196ca0dba447a6c018d59f6ca4b4a50d186da080a4e0a50a17d0a0b7a429a60e16dba0bca44fa6301737a12da587a62415c5a012a315a50519569e0412a1932220600c5e24af252b1a7aa666adc3ae19a1d9a095a61da8139411a1aba4c5a699133aa03ca40aa63614bc9f22a4d9a51c14b79fe7a383a5db13399f85a32aa51e12d99e1ca3eba4c9115f9eb2a2a1a47311189e52a26da42411ac9d0ea237a4df10529dcba114a4a910fc9c7aa1aca37410be9c3ea15da34410b29cf0a0eaa20410959cbba071a20e0e7c9c8ea01aa27f0f649c5aa0b0a1a20d1d9c39a0b0a1080fbf9b18a072a1aa0b0080b38c168932129021f827ad284427a62042278a28b128601c3d235e267828781b2e21d2228427951e87225424c227191db7218624bf28d0164d18091d3729ff95caa008a16b29089dbea4d1a56129809fdaa63ba82b29a2a029a823a9d8285fa197a8a0a97c281da2f0a8faa962278da15da84fa9452555a0b5a6d9a72a2300a06aa59ea65b21ec9f18a520a6912011a006a500a6ce1f71a027a52fa6df1efea087a5b4a66c1e2aa1e7a536a7f61d3da10ea66fa7691d5fa123a69ba7471d87a142a6d7a7191d8ea13aa6d2a7781c89a100a68ea73c1c8ea1d4a570a7d51ba5a1a3a54fa73a1b3da14ca5b7a6f719f3a0d1a434a681199da077a4b9a5a31848a028a470a5bc1731a02aa471a5a11740a033a46fa591164ca030a48ca58d1658a04ba495a5981529a01ba486a5511434944697ab98f009178b368e6d916204929d97a161a30105f59e19a3d8a49305009fcba2a5a49c10e69ea9a272a4d011b89eaaa277a4ae11a09ea2a268a496117b9e94a269a47a11799e79a25ca45311379e46a24fa42911f09df7a11ca4a20f909d8da1bea31a0f529d26a140a33d10f89cc4a0a5a2ef0f8d9c7ca015a2770f509c47a0cba1350f2a9c32a0aba1110f319c37a070a1850d279c18a06da1fa0ef49b0aa06aa1281000004c190c1adf11ad1fa625a92669255f1ec924742613271c1d6d23c9243927581d63226224ff26ae1d7421c1237127e91b381ed020c62786164d14611a1328eb88f99c629c2928d398b3a1c1a22d28bc9c9ca4e2a5f2270b9f34a6dfa7592776a01da783a89326c5a095a797a895259ea081a763a8b8245fa0bba60ba83a2321a014a64fa7e221c19f7aa58ca68e20cd9f42a54ba6531ff99f1ca523a6331e50a017a52aa60b1e77a01fa53aa6821dbba03ba548a6f61ce5a04ea56aa66a1c00a15aa583a6c01b15a15fa596a6b41a0fa160a5c9a6781a18a173a5daa63b1a21a17da5efa6f819f6a05fa5eaa69419f3a020a5a9a62a19a9a0c3a42aa62c1859a05da49ea5c217d39ff2a330a568163d9fd1a310a54e16399fe5a32aa54e15009feea34ea53f15a39f21a490a5151527a0f8a36ca51a146c9bf39e92a0e40fe197449deb9e6a0f719c39a0e7a1280dd09e79a110a4c484509efda160a4520b279e10a263a43b0b279e1da25ea4ee0d059e11a245a4cf0dc39de9a11ea4980dc79dbaa1d6a36c0d989d9ca193a3400d749d6aa146a3110d5c9d24a1f9a2cf0cf79ccca083a27d0ca19c69a010a2210c5c9c28a0c7a1df0b249c1fa0b2a1770d639c29a09ca1c80b499c35a0cea19e086e9b859f9ba1de0c9f261e2b8b2c262a582ba22f0031272f442b012f0b30722fe329df2e1e2f0b317825492c702ae432cc9c69a54fa57133aca414abbfaacb3289a77bac60acec3136a92dadecad0c31d7aa48ae76af9130fcaa80ae75af662fbaa993ad49ae712d73aab3ad82aeb52c31abb1ae74afe02c5ca9bdac0fadaf2a2bac6db1b8b19d2d16a91bad08ae7d2852a6c8a975abfb2526a061a5f1a43a28a51c62a860ac6d26092403a41da86b1a2f28cf1f9e9c571cfe288d209ba00e1d0f29c820359f501d6928b2209fa0431a5326d11963a1d91c1d2161a082a5921d1ea036a60da82d1fd4a3f9a610a87a1c66a1a9a5aca6c01cb0a51baa7aab501e44a3aea731a9021c26a129a603a80a1ac1a0d1a57fa72c19bfa061a5eda6381877a011a592a6e3162aa0cfa434a6881501a086a4fea5421401a072a4cea52114a99f4ca4a0a52212699f27a47da5da112b9ff5a351a5e80fcb9ea6a325a5820f709e5aa3f6a4470c189e00a3c8a4130ccf9dcea2aea437057e9d8ea289a4f704349d5ca268a4c384fc9c34a231a49784b29ce3a1fea34e848a9c8fa187a311844a9c51a11ea3d8834b9c1aa1c6a2b003259c09a185a29a03149ccfa038a27a03cf9ba9a0f8a15f03879b9ba0b8a15483989a46a0a9a118033f9cb5a0e1a10d09c02abd2ee02fb929f22d9a317a32c02e832d0e31f2310e31aa2e1e32fa32ef33102b302ed72f8c35fca3d9a800a9f035eaa96ead1faee834b0abefaed4af8c3461acf8af90b0ae3391ac0db0b0b034328cacf3af67b0e93028ace8aeadaf142fdfaa37ad78ad0a2d56aa64addaad4b2cf1a983ad6eaef92b5faa75af58b0dc2b90a952ae86af432a4da71aab02ac4c2990a40fa842a92e298b9e8aaabaacb325791e43ab70ad6b1b522762a528aa8814cf29021bb6a5ac94602a822252a1bc94372a7d2219a0149bfc2808226d9d6394d52568138da26813c39956a4aba62a18d8a3dba7a2a8391c31a4f8a7d2a83f1d35a585a9c2aa891fd7a45da98daabf1ec1a393a8c4a9a81ca9a2daa712a98d1a49a227a79fa8b917a4a14ca614a8901545a1cba587a7f61301a19ba539a7b413d6a056a5dba655137aa0f9a460a6e11034a0b1a415a68c10e79f63a4caa51b0d969f33a48ba5d40c359f0ba457a5980ce19ed9a335a5680c6b9ea1a30ba53c0c349e6ba3e4a46d05119e21a3b5a42805d19dbda283a4e004c29d62a24ba49004669de8a1eca33a04e19c9fa174a3f9036e9c5ba13fa3ca03469c31a14ba3b683689c0ba13aa39b83879cc9a0fda27603c89c9da052a26083a79c4ea085a12f03c79b679fa5a0168dea2a5c2e6e2f8e2bdd2e3a321d331030ba2e2a320233c931e02fd132e7338834262c3c2f8f30193610a35ba67da77d3640ab7aaea3afa5357eace7af77b0233522ad9fb04bb1753479adf7b09eb15c337ead93b012b18031cbac23b0a8b00a3026ac42af33b0f92d9dabadaeb0aff12ce0aac2aeb5af502cacaa17af10b0f32bb4aa46ae44afe12af1a8e5acbeadfa295fa707acecacbb28d5a4a0ab6aad9e257b1a51aa6eac0e219f2786a52baaa7145d2a111ec1a4119e982b042458a08fa1652be7229fa0e7a2a22ab321f2a2b3a18a28af1f9a9ff0a02423dba127a6819cb4a24ba86ea9ff1016a540a948aa341d9ca5dfa90eab331f53a5e6a990abdc1db1a43ca9d5aa6c1c3ea4c8a849aaf51afca36ba8d3a98119cda27aa7d6a8e217dda1a2a638a8e81665a160a607a85e1542a10fa6d2a71a15dda0c8a579a77c1389a05fa517a7f4122fa00ba5a1a67412d59fb8a43da60a12389f82a4e4a51310d89e46a499a5bb0f859e1ba44ca5570f629ed3a30ba5320c539e6ba3cba4f50b319e0ba38fa4780b059eafa257a4ba04e39d59a232a47d04669d0da208a44704119dd0a1bea31d04c69c84a151a3e6834b9c19a1c8a29b83c09beca0a3a27b03e99b03a1a0a28c03869bf9a0d6a28403cc9bcaa080a2550ca2289d2b742c9228272f1233bd3346302e2fac32b733f8318e2fc732b4336534052ce12f9330e9359da538a95ba94e36e7aae8ad9faea0354facb5af2eb02d3513ad84b030b17b34c6ad17b1e8b1aa339aadf8b0aeb13232feac89b030b18930a0ac25b0c4b0312f0dac9daf58b0c62d9dab2eaf1ab0b62c91aac6aeccaf102ca8a9ffad11af932a03a958ad49ae872993a8f4acdbad6a285da7c9acf7ad612683a0feaaa5ac5c239b245da61daa881dba2a0015c5a6809b4d2cec249ea039a3472cb525e69b5da4152c2225bb9e22a5402a3d24829ee4a463275f146ba519a4439783a6bfa857a015a52ba986aa6f8faaa5c3a9fdaa171be7a48ea942abc11b69a446a9c2aa141b43a4e1a82daa5519daa3a0a819aa161806a305a851a975156da265a7c6a8161315a215a77ca8c912e6a1b2a639a89c0f84a129a6fba7000f4aa1d9a5b2a7910ef6a098a55ca7230ea7a043a5f7a6b50d48a009a5bfa6670df59fcca470a6160dcf9f9fa435a67606d89f74a4eaa52a068b9f39a4a4a5d7853f9f0ba451a58985d69ea0a3f1a4d48b379e38a3ada4698ba29dc4a26ba4f28afe9c46a20fa44c84979ccaa183a30184569c86a1fea2d383389c4aa1a3a2b383369c18a146a26789e29bbba01ba22189a79b55a0c2a11a8c0000c88a5a0ad085d72d49313032482f832f473301343f32922efc31aa321b34fe2bd62fc7306a3523a5e1a8d2a9d13500aafead68ae6a351aabc4aef8ae0035d8ac86b011b18e34a2ad38b1e5b1dc33b1ad21b1e8b12b3227ade4b0adb1af30c3ac7cb02eb1ad2f4eac23b0bdb0192eb9ab5eaf4eb0c92c8daa8bae8caf6b2bf8a951ae37afa52a3caaecad00af9c29b2a94bad32ae592859a806ad14ae4426c5a53dac6fadb023cf21a9a834ab741fcf2a7f1b2ca6ff94c82c21276a151ca23b2d7028df209da4032d7128ea200ba6652c0328b91ea1a6bf290c236ea016a6752280a2cca67fa334a49fa8b7a95b9922a693aa0fac911709a7c4a9fbaaa519b5a546a966aa261a81a53da992aabf18d6a410a990aa6b1814a48da8c3a9f61527a3d6a7f7a8551379a24aa796a8d2120aa2bea645a8920fb0a168a61ba81c0f8ea129a6dfa7c30e62a1daa58ca7590e33a177a53fa7dc0dcca02da5dfa66f0d64a0cda478a6ca061ca099a432a66f067e9f6ca4eba52f86f49e3ca4b3a5dc85799e11a476a591054b9eefa348a55f85ca9d70a329a509855d9d03a3cda4b384099d70a22ca45084ed9c25a2cfa31e84d59cf9a1d3a30b84a69cb8a194a3ea03849c64a116a3c5830b9c09a1a8a28f83519cd9a05ca28c0300005289020a62865d2d323143321b2fbc2ea532c333f531c42d6a315b32bf333d2af72d0b30213565a064a491a38735a1a876ac5cad003562aac0ae53afd9344eac66b01ab15d340aadf9b0cbb18d3335adfdb0aeb10f32f9acc5b092b1de30b0ac7eb032b1e42f5bac34b0e9b03e2ed2aba9af8bb0ee2cd8aad6ae18b0b72b56aa54ae88af642a22aa0aae21af612943a9a4adadae2228e2a862ad6dae7b26a9a7c6acecad4f2444a1eda931ac0720f429ab94b7a7ab94612d09289f9551a20d2e91292624c2a5f42d9e2952215ca78e2dc828242166a8872c3528091f35a8dd28741bf3a386a6bfa008a85da9e29f0ba6fda9e0ab210e0aa5b7a961ab6a18e9a47ba9ddaa03188ea457a9e1aab7179aa448a9d8aa40158ca4c4a8e3a97b1120a44ea871a9f31025a3eaa716a97f10d5a258a7c6a82c1037a2aea655a8800f7da15aa629a8a5082ba134a61ba8700804a10da6faa73b88ada0d2a5cea707889aa084a56ba78e8732a026a5e6a60c87d49fe1a472a69b86379f83a4f5a51d06a89e3fa499a5b105649eeca33da54f85f69d70a3e9a4fc848d9de6a296a4a004059d63a241a448049f9c04a2eea30804539ca4a169a3c803279c64a103a36b094b9c39a19da28a03099cf7a077a23f0c3e9cb0a0e3a1dd0d0000408b930ae682c92cfb30e531f32ecf2d36323e338c31ad2c23310932d4321a2ab72e2c3057348c1d6da19ba2a534bfa641ab0aac9a34dba9b9aefbaea13421ac3cb014b13334d6accfb0a6b15e33caacf2b0cdb10832bdacddb096b1c43086aca0b02cb1a32f3bac4cb0e7b0062e7dabb9af8eb0d62cb4aaeaae16b05e2b4daa76ae8faf292a35aaf2ad1eaf19293ba9a2adcfae1b2800a956ad63ae772681a82dad41ae2125dea4c0ab1fade3210127afa324a9261a912d4229e21ec0a02c2f052c3a27e1a56b2f232c28283da8e22e7e2b5d2710a9972de3294f2413a93c2c53262296a6a87d19a6a37ca656a4d0a616a947aa209a13a5f1a948aba71858a560a9ebaa1818b5a444a9d7aa95157da43aa9cfaa64122da4cfa84baacf1198a352a8a8a9ca0a94a323a87ca96b0a34a3daa71ca9050ad5a26ba7b8a88d8968a2f8a679a8288908a28ba63ba8c98894a117a6f0a7888e25a1bfa580a7088e04a170a524a78687a7a02da5c0a603875aa0e9a48da6958604a0afa448a63686159f70a402a6d385959e39a4d3a5298c379e04a493a5d48be39d87a32da5568b689df0a2a5a48284329d8ea248a4648af19c3ca22ca4148abd9c1ea20da4e789b99cf9a1e4a3c28c569cbea1a0a39683a59c56a198a2028c0000368c9f0937875d2cd430c831d62ea52dca31e63258315c2cc830b3317e32c329582e223063340e9df7a4baa4ee34b9a757ac53ad923468a9c4ae8aaf7a34d0ab54b0f0b01b3482ace2b0c9b13d33c6acf3b0dfb1c831abacefb0c0b1be3060ac9db06db1a52f22ac53b00bb1f42db5abddafaab0b02c86aa0daf42b0a22bbfa936ae84afd02988a9e1ad02affb28f4a86cad93ae3328a9a838ad28ae15279fa823ad07ae71254da7bbacfcad28238f8f26a98eaba71d902c25270f9559a0b72fa62c0e28f0a55e30002d8529e5a81a30b22ce328e5a9112fec2b132735aa982dc0295c23c0a9a1288595fea4efa7eaa378a89ba9de9d50a5fca960ab6e1642a5a7a937ab641919a564a9dcaae517c7a453a9e4aa6d1540a4d0a84caabd11faa380a8d4a93c1195a351a8b2a9221447a318a87ea9a913fca29ca7f5a839106da243a7aaa8e10feda1d6a682a8550fa1a19ca65ca8a00823a149a624a85988c4a0e6a5c5a70a8876a091a565a78a8745a04ea524a71c870aa00ca5e0a6b286b99fd5a499a65986579f9ea44ca60086fb9e58a4eea5a585b59e13a483a53e85409eb6a327a5e9043b9e4da3efa4a6042c9d99a2ada42984e99c04a238a4cb83d99ccaa1c9a35e89939c93a1dba31289949c62a14ba3f08b00000d8cb2035102902cca30b631be2e192ddc311b3352312a2cf3300432d4323029d72e1a307c34169feea3e7a4fe3464a7ebac2bad8d3445a95fae3daf6434b5aae8afb2b0f83301ac81b07bb1d63231aca9b09eb190313cacadb080b1953021ac84b04bb1a82fd4ab55b01db1022e28abcfaf89b0af2c7faaf5ae28b0612bf4a97daeaaaffb2965a922ae44af032910a98dadb5aeea27a6a825ad5aae9f2661a8d7accdad5e253aa8ccacd3ad482492a60dacf5ac58207027fb9c2da7fb9cc12fb02cbf2881a6fd30852ec62b87a9df30432e7b2b0fab3b302b2d5a2a94ab4d2f572c8c27bdabd32c7026d51ca7aa9fa075a8e2a922a4c4a429a93cabf70cc9a491a90eab2f180ba56aa9c3aaed17bea41ea995aa651714a4cda853aae5145fa37ea835aa8614a1a368a805aa531440a305a860a9ad10c8a28ba7dca83c1051a26da7caa8131049a223a7c8a8290912a2caa695a8cd08d9a159a649a86408a4a1eba504a80d8833a1aca5c5a7ae87bfa082a560a74e8745a037a5eca6d986e09ff0a48aa66b86829fa5a413a67b8c4e9f64a4d2a53c8cef9e1ca472a5ee8bbc9ebea3f8a4ee84d79d33a3ada4cf8a279d8fa284a41884ef9c8ca293a40284fc9c5aa260a4c8890c9df2a1bba34289f39c28a227a4818300808b8ce4039902cf2b8f3083316b2ed42cd631e7322231092cee30f131cc32f128fd2de02f6d34c79384a1d8a2ca340ea77eac96ad6634efa871ae7faf333438aad7afaab06e3398ab7bb05bb18832d7ab95b06ab15a31adab86b059b1593060ab65b025b1262f17ab2fb0dcb0ce2da1aa99af70b0a32c10aac1ae04b02a2bb4a94aae58afe92923a9d2adf0aead28ada864ad64ae8e2799a8ffac18ae6d263aa89bac93ad612596a772ac23ad682488a61aac07adfd218d9cc5a8bbaa5218ca2de92ac826d2a48e31c22fb32c12aa9331d82f0c2df7ab4331e62eb22c7aac6c30ce2d902b92ac952e252bd9268facfc23b6a02aa68ea9a3a577a91bab9d9aa8a43fa994aa0d18f2a4eea879aa4b0c9ea4d5a85aaa270cb4a4c8a833aa0d0cb0a4bba835aad00b1da45da89ba91e0b36a32ba865a9a00acca2bea70ca9020aa5a23fa7b7a87d891ba2cca661a80889afa18ba648a8bc8849a14fa61ca86988f8a004a6d9a71388e4a0b3a56ca7ba8db3a07da51fa7678d75a01ea5baa60a8d0ba0dca470a6bc8c649f9ea419a6748cbc9e67a4d0a5348c689e1ca47ea52e85f59db0a31ba5cd84789d0ca3aba46784f49c8ca242a40c04bc9c3ba223a4b909fa9c2da202a4ad03cf9c1da20fa4330ee89cafa16ca3430300009802a90fc887402b38303d312e2e752cb531d7321631922bbf30b4318c32122aa82e3f305e34649396a3cea2b534c8a53dacf6ac663403a8baadaeae1d34a8a95faf84b05033cbaa61b03fb17e3239ab83b068b12a3158ab83b05cb141302aab5ab021b11b2fa0aa08b0b9b0a32d22aa3caf4fb06b2caba9cbae06b0162b67a96dae9aafb92923a9ebad09af792890a853ad4faefb2641a8eeace0adcc2507a876ac7fadbb24d1a751ac3eadf823e4a62aacd1ac7022caa544ab6dac27207b274299eca5629c6531322f392c5ea9a632b1305c2ec1ac69326230102e77ad7631982f692dcbad1a302f2d9a293fae5829a9205ca0c6ac84a490a89fa9db9d19a5fba871aa651acba405a9bcaaa61793a4f2a88aaa701736a4bda822aa05150fa47fa803aaa51196a34fa8bba957111aa312a870a98e0ad6a2e6a74aa9340abaa299a70fa9d3895ca218a7ada8df8fefa1cba672a85f8fa4a181a654a8c0916fa146a621a85e91ffa0fca5e1a70391a1a087a551a7959002a01ea5caa633907f9fc8a44ca6a98c269f74a4fca5578c0d9f43a4aba51c8c299f22a469a5d08bfb9ee0a323a5eb04889eb3a3f6a4b704e89d0ea396a452046b9dbaa259a41404429d58a217a4d083cb9cfea19ca38083f39c72a164a3a6880080c898d59adc14972a17300131602e282cda31f532f930c02a9d30b0314d325c28082e632f37342b1968a3ada4983412a6a7ac37ad4e3443a844ae02affb3353a938af76b0f33261aa35b01ab13d32adaa4eb04fb11f31e4aa62b04db14c30a1aa47b003b1fc2e3caaecafb9b08a2dfba945af5fb05c2c5ea9baae11b0e52a06a923ae41af9429d4a8a3add4ae612891a844ad45ae7c274fa8edacecad06262da88aac75adf424d5a753ac49ad252438a722acdeac412335a674ab8cacab21baa511aac3abb519232db72a82268fa68d33b531f72f01adba337531e32f7fae9932b530312ff5ae39313a2fc92cccaf2f2e552a85264caf47a4d9a821aac2a458a408a995aa7116e6a3d5a842aaba155ea4d4a844aa7b1528a4a5a8f3a92712d3a35ea8b3a99a0b89a353a8afa9560b16a31ca894a9c98aaaa2d2a750a99b90afa268a7ffa8429093a208a789a8e58f00a2baa658a826926ba17ea63da8bd91fba01ba606a848919ea0dda5b9a7f79090a0a1a561a7ab9060a04aa5fba657903ca0f6a48ca6079019a0b1a440a68b8fd29f7aa4fba5208f0d9f33a4a9a59e8e6c9ec8a364a55c8b1c9e6da31fa5e38a179e22a3bfa45f84e39de2a29ca423049d9d85a265a4e283169d25a218a49783a79d06a2fea3180900800080ef810080ac26962c4f2dfe2a432b84312c32d830982a87305d314832b427d62dd72e05340592339ee69f7d34c0a40baccaac3234b3a7e4ade8aecb33eda839af63b0c032c6a90ab01cb1fc312eaa38b03cb1eb3037aa2fb01eb1e42f11aa06b0beb06d2eb5a99eaf79b01a2d5da9f6ae2eb01b2c16a9a1aeecafaf2ad8a801ae23af422965a87aadb4ae6f280ca836ad45ae4a27f8a7f7acf8ad4c26eaa770ac46ad6d25b8a70cace9ac6a245ba7bbabbdac0724d5a658ab7eacaa2262a6f6aa5bacf51f701998a58ba8729d1b3212308e2d59ac8e348732ce307bafaf33b331563038b05132a3306c2e7eb065301a2ee82ad6b04ea4b8a83caa75ab73a428a955abec9304a47ca84faa711777a4a7a832aa861246a469a8eda92e122ba449a8bea9e40b17a433a87ca9850be9a308a83fa9068b55a3dea71aa97f8a9ea2b4a7fea80d8a37a228a7b8a87c89baa1c2a66aa80f8962a181a64ba8a7881aa130a6fca73c88d4a0b4a577a7b987aba072a522a739877ba048a5daa6268d35a003a582a67386cd9fc1a43da60e86f99e66a4eea59a857c9e29a4a4a53f85f49dbca351a5e104c39d4fa3f1a49084659db0a268a42304219d4ca21ea4d7091a9d1da2e7a38309089df6a1aca35b0c579d5ea1c8a2150300800080ba8100802426542c4f2dbb2a962a3031fa31b2304e2a5130623107320228872d5b2ff033fd9a8da585a45234dea4b0ac59adb83306a79cadccae343387a8fcae65b0543222a909b002b1a631bda912b014b1ac30c4a91eb0fbb0762f7ba9dbafaeb0282e7fa970af7bb0da2c2aa9e2ae28b0e32b9ca82fae87af732a74a8bcad0caf652972a880ad9bae872845a82ead17ae5c27c2a7c7acb4ad292630a758ac4fad1c25e1a6f4abdcac252469a664ab8aacb5220da62cab52ac8322eea5c2aa13ac962133a504aa8caba32044295624b213cba48634de320431caafa634fb32673169b1aa33e0317f308fb1ac31f72f752d6cb22a25afa2a4a685afe2a4eaa8a1a9788d70a351a87fa9d11820a454a8a2a95e15b2a32fa853a91c1584a310a83aa9e31462a303a82ca97f0b20a3fda732a9270b9aa200a84ca9c90a75a2d3a74ca94d8a53a26ba7d3a837900aa21ea79aa8cf8fc1a1f5a68ea8618f85a1aca653a8c59130a14aa61ea84591f1a0d8a5c2a7d890c0a086a541a77c9058a026a5cda62390e79fbda44ca69e8f629f49a4dfa5228cbb9eaaa34ba5658b379e1ba3dda4db8a1e9ed4a2a3a4868abb9d6aa26ea4208a929d18a225a4c489629dcda1b8a37c89dc9ca6a186a37583cc9df9a1ffa3e50d008000800b8800805c254b2c542dc12a2b2ada30ad319d30d42910306d319d31ba271f2df22e3f336c9ce4a6a2a7c03324a40bacd0ac443310a64cad51aece3224a8bdae32b0073200a9c6afc0b051313ea9d8afe8b068303ca9aeaf9fb0182ff4a83daf4bb0e32db3a8d2ae0bb09c2c80a848ae94af732b6aa8e7ad2baf282a61a8a3add3ae36292ea857ad70ae8128cba7ccacdfad74274ba772ac72ad9c2614a72fac06ad652579a6bdabbdac8d2405a620ab61ac8d23d3a5e6aa28acd72285a58baa00acb12185a54caab8abf420f9a472a98caa9d1ba12f352d3d2b71ab90355a34d432fdb179340b33cc31b8b26b33c53191302eb48d2cab28982126b2aba546a9c6aa561767a2c3a73da966185ea40ba86da9350cbca3eaa742a90d0c81a399a719a9c78b76a389a7f4a8988b6fa3a5a7faa884915aa3e6a74da93b91f4a2f7a75ca91d946fa281a7e9a85e9355a246a7b7a8b6940ca21fa79da83a92c6a1ada657a8a79141a124a601a82591eea0b6a57ba7af9071a03ca503a74b9010a0e2a495a6c28c469f79a41aa6518cc19e3ca4c4a5168c4c9eeba368a51885ff9d8aa30ea5d984ef9d21a3aea4e18aca9ddaa268a49d8abb9da3a244a45084a39d63a20fa42784ec9c01a2dba3da09c49c81a139a326900000a70d5715a70dc3242f2c952de72951298c30c6313c302b296a2fa330513134251b2cec2c9432d499c4a532a60b330ba41facecacd1326ea50aad0fae78323ea735aeccafb63171a808af87b02031c1a837af84b01030aea837af6bb0832eaca809af47b0532d87a88eae0bb0502c5ca8ffad70afe62a21a8a8adebaece29ffa750ad86aed0288ba7cfacd8adb92710a77dac7bad7d26aea64eac25adef256aa606ace2ac462532a644ab7fac9824d6a57aaa03ace323cfa524aa87ab2d2391a5bba902ab192217a54ea97faa0d218ea4f9a862aa1e21dda4d4a8c3a9e21c1f3321311b309caf5736fe340b3474b42f34ee326f3116b5372d952a582672b3d5a5a3a825aa111787a2c6a724a90e1c9da3a7a717a92e1ad3a267a7d3a8cd1891a23ba7c2a82a178aa246a7caa8f7118aa2a0a70ca9910b87a200a85aa9298b7da20fa87da9089145a2f3a738a9b5931ba266a7d6a8ec92a5a1eaa675a8549452a18ba640a8d7930da123a609a8329305a1baa583a7a592d2a058a511a76290bca0faa491a60b9067a09ba40ba67a8fea9f3fa482a5e58ee39edea320a5638e149e41a3c7a4248b8c9d99a267a4918a379d14a20aa41c8ae39caea1bea3d903d39c7ea180a3c283d69c48a1a2a39d03169cdea08da33909008072922c8eee90fa28d02f2e31b02cfc28293047313f30f928bc2fcc307431fc24162cff2c04335d9d88a828a9cf338fa498ace8adff32dca5a0adc8ae773253a778ae02b0a13136a81caf76b0f2305ca815af6eb0f52f4ba8ddae33b0762e11a86faeb7af162d7fa7f1ad23afe32b4ba768ad94ae912a36a71fad35ae8b293ea7feac18ae092909a7bbac85ad49285ca651ac38ad1b2714a6f1abdbac0126f8a567ab65ac5a25a0a5cbaa24ac9b2463a54faab9ab222420a5d4a90bab5a23f2a480a9a4aa4222c3a45ba9a1aa3522a0a4fea836aa2122eda3a9a8dfa99321fda39ca83aa9ac19af324231003023b1bb358a349b3201b6ec28e429aa27a5b373a7c3a8b6a9af9387a3f7a70da9541bc6a206a797a83b1b50a2cca652a8ec190ca29ba655a8b6181ba2c5a66aa8281548a262a7cfa80a0ca8a2f4a72ba9d4915ea2dba734a95694cea164a701a9b296cfa153a7f7a87397bba1eba6ada8ba965ba172a651a8e994b2a003a619a8fb9245a07ba564a77f9018a0faa4b5a61590fd9faea441a6908cea9f7fa4dba5628c889f4fa47fa5338cce9ef0a31aa5bc8bde9d25a3a3a4b184359d6ca240a44384fc9c15a208a41404d39cd5a1baa3ed09c29c86a128a3d303469c2aa1eda2a703069c8aa0e5a17a83c91d311f0822879caa212028a1285c1e4928202f8230202fe0280a30063177316324242cbd2c1c33009c2ba7e7a7f1332da4bfac93ade932fca5faad20af8432e4a680aed4af88318da7afae23b08430d9a74bae05b0ee2e8ba708ae7eaf902de5a6abadc6ae912c9ba610ad1cae0e2b36a6bfacb8adda295aa691aca8ad13294ba698ac96ada32844a687ac8cad162820a641ac20ad0127cea5d0abbcac12267ea503ab48ac372562a583aadfaba12430a520aa7eab0424f3a4c5a90dab6d239ea424a960aa3f2309a45ca854a9182364a3d5a7baa89b22bea370a7cda87621a1a341a86aa95b1e01a6d9a9e8aa261514a83baad9aa1f9f91a7eea8cba9a48ef4a1c7a687a8421c27a3b7a62aa8f01d7ba1dba5b1a7001d69a169a55ba7d21b9ea16da56ea7cc1afaa1d7a5fca75a178aa2d5a69da83f92eba2f8a774a92497f2a270a8b0a94a986ea224a856a93b97dda168a7e6a8739788a11da7bfa8999539a19da669a8d793c5a0eaa5c4a7f49099a043a5f1a65d906da0dba486a6c88c5ba080a42ba66e8c25a0faa36fa5f08b159f18a3c3a40f8b639ea3a290a4ac8a0f9e80a263a4888a949d41a232a45a8a3b9d14a20ea43e8aed9ce6a1bda31f8ac59cc1a166a3fa8c419c77a12ca3bc893e9c3ca1c8a2a90381179820f0204207c327582e792f382bb0280e303d317a2ea4294e309531ea30cf25232d242ecb32b79db7a822aae13323a5acade3ae723207a616ae75aff3312fa6caad6cafba3050a6d6ad8cafc32fbaa693ad19af062e9ca65bad9faed62c1ba6ebac1dae732b42a533ac1cadb229d9a45cab74ac7e280ca59aaba5ac862863a6aaacc3adb62846a6a7aca7ad03288fa5caab73ac1026fda48caa11acd924ffa425aa77ab5b24e2a4e1a90fabd72392a4a1a9c9aa29238ea468a98baaa42270a420a95baa2b2298a488a8aaa90a2296a381a7afa83d2258a2e8a505a816233fa2c3a651a85720fca36ba904ab7214f7a166a8d0a9171756a330a84aa98d1ae7a13aa622a87f1b26a163a5dfa6c31ce5a075a4b5a59e1df7a0dca336a5ed1dbea132a42ca5681d28a1e2a437a6681945a150a62ea8f19538a21fa86aa9329ab2a2a3a812aa7a9a5fa226a87ea9e49994a2a4a7fba8119978a216a7a8a8f79729a236a6f3a7bc9432a16ea5eba699904ba0e5a44da6eb8cb39f65a4c9a56b8c229f21a46da51b8cbd9ec4a320a5b98b409e41a3cfa44a8bbd9dd6a285a4df8a189d40a22fa43b84d09cc5a1f6a3f383a49c78a1c7a3d3837b9c53a1a8a3c4035a9c1ca144a3a783169ccda00fa37903109c84a03ba2d90d00806896b1925b955725912cbd2d8129a527552e4d30e52cae27602e1530412eca25082d5b2e0930d1a024a929ab2f3299a4e9ac31aef43055a477ac5fad3a3073a451ac46add72fafa447ac7bad492ee3a43fac4badd22c16a54cac26adde2ba1a48fab87acdc29c7a3e6a916abb42808a34aa94faa4b2886a4aaab48ac2629b0a674adb6ae65295ea267aaeaab682423a474a9d6aa65234aa45fa965aa92220fa412a921aade2103a402a9f0a90c21dca3baa8c7a927206fa39ca89ba97f1fa2a39da895a9341e71a391a8a1a9f81cdfa23ca83ea9ae1cd2a121a8f8a87e1c7da088a638a8001c00a0afa530a7281ca9a0cca552a7f71b7ea1e4a57aa7381b1ca2bba55ca7e51adba163a5aca6a21c9ca03ea3c4a4f61c90a0b8a01da27d1dce9e3da0b4a1231e6a9f02a232a4261d5ba11ba6e6a740149ea334a9c8aae699c0a33fa99eaab99b56a360a8d4a9ef998ea262a7f2a8329847a10ba6e0a7b594eda05aa5eba6949047a0c5a480a6e68cce9f60a4e6a5728c219f09a480a57785c89e84a336a517858d9e44a3faa4ec844c9e18a3cea4ce841b9ee0a2b0a4a804b59d6aa260a4960a489df5a1d7a32f0adb9c86a142a3cc09759c3fa1e0a2a30c6e9cfea07ea26a09079cb1a026a26f03789b27a06aa143830080908d53832e833c21a5280e2a1c277125442c552db32b4825542b762ced2c931f7525dd26f32ece190021cf1f7030b79a77a346a5a82e779faaa7aea8902d11a2b1a9eaaa462d3ba3abaa16ace32c12a45cab9eac332c2fa465ab89ac9a2a20a4faaa2cac122920a424aa7eab6d27faa1cda7aba88f2245987999b2973614e293708ddb125892ae9d7ea08ca0e4177aa1c0a571a6f61d0aa2c8a612a88d1f9ea23ea76aa8981fafa27aa783a8dc1eada272a790a82b1ea8a289a784a8811daca27ca795a8dd1cb1a27ea79fa8361cafa271a79da81d1cf5a1d8a637a8771a61a010a546a615187b9d95a28da3a815159ec0a291a46114bfa027a446a5971595a072a489a57417dca083a4c3a5d819a5a038a42aa50c1bae9f29a05da1d61ca19a0c122b97cd1e3b99d01c1317982058a12aa6dda73290a4a4c8aa7fac869f4ca326a994aa799c54a1b9a66aa88996afa057a557a7b8907aa00ba584a75a8dd7a07ca459a6c28c0aa037a474a5e685239fd5a33da57a85bd9e5ea3f9a42785589e09a3bda4de840b9eb4a291a4a384ac9d4da257a46884669df4a129a42a84039d96a1bea3f303cd9c48a13ca3c703bc9c15a1e4a2a303b19cf4a09ca26009ac9cd3a05ba28803699c92a00ea20309069c44a09fa1fb0b00808b8f4f8dc4167023572acc2b8e281524942a322c1e2aa9211a281229b82ab314041cf81c1129a41a2b207121dd24ce1e44248825be292b917d9d749db32bdd9d70a60ba79e2bb0a0b0a8a7a9262b43a2b9a9cdaa4e2a97a20daa21aba229aca235aa37ab01297aa375aae9ab3e2874a3fea989ab2226d7a160a891a92c23629ebca4c9a5fb1e729d20a318a4771cdd9fb7a44ba50f1cb9a03aa560a6611b3fa1b4a5d8a62c1c83a104a664a74b1bb8a145a68ca72b1bc4a154a6ada7f81adfa15ca6dca7c11ac1a164a6d8a78e1ac8a144a6c7a77919eda15fa619a83719e4a140a608a8ad1839a182a521a7c81636a0c1a416a625150ca09fa4f5a5141595a0d0a442a6de13d4a0c8a450a6d213d5a0e2a481a6de13d6a01ca572a6b81184a0efa2fba43819809d44229d24442278a3c0a833aa6d9d85a4e9abb1ac6d9f74a07ca53ba7dd9224a195a4c5a6f80c40a078a42aa60a10bc9f36a4c7a59c0fec9f00a484a53b0f429fa3a321a5d30efe9e48a3e4a4cf0b659edba29aa45b0b179e67a262a4de0aa59d0ca239a47c0a419dc6a113a4320af49c79a1b9a3f20cad9c3aa152a3ba0c9e9cf5a0f8a27b0c869cc0a09fa2570c6b9ca1a03fa23b0c609c7ca0d8a1ec081e9c4fa0b8a1f80bcb9b3ca086a1b4080080588cf2888a106b22ef28232a37269e215e287b298d28681e0425dd26e3280e1a7a200f229a287f1c212100232d28cb1c99214624ae2825189318591d1729959792a15ba12629869d7ca5cba6f02834a0a8a7e5a8ae28dda090a8a1a9532883a1fea84baaf7277ca245a99baadb2659a205a94aaa2725a4a16aa887a97123d9a000a753a814215ba0dba53ca70f203aa08ba5a6a64d1e80a05ba59ba6f11cd7a0a8a5d7a6871c25a107a658a70f1c21a12fa68ca7111b43a143a6b3a7e51a63a135a6dba7971a55a114a6c0a73c1a3ca1e4a55aa7d8192ea1a7a533a7a11825a159a5eca63f18e0a012a55ca6ef17a6a0b8a4e9a57e1763a05ea4ada5f61532a02fa487a5b51551a03fa48ba5aa1461a044a48fa59e1443a050a49ea5291379a04ba498a51611209f50a312a5330d9b8daa9360955d01fd948298259a4a827f9e93a23ca4208ce09e3ba3cfa4428cf99ef8a2a5a46885e19ecfa27ca43805b69ec2a273a4ad0baa9eb2a277a4850b959eb1a275a4580b989e89a26ca42b0b6c9e76a25ca4d70d329e33a24ca4b90afd9ddda12aa45c0aa09d68a1b9a3f10c0d9df8a03da38b0c969c9aa074a21c09329c75a0e5a1f208109c41a0bfa1f50b149c46a08fa1cd080d9c49a08ca1ec0bd29b2ea075a1a30800003d19461a03142220ab26f82737255c1f3c26f62706278b1d2c24a8255c274d1dad226b246027791d2821ff229127cc1b771de41f9027c615400efe15b7278892159ec59e9a27539ac5a212a44827229d34a566a60a27789fa2a638a86f26a2a0baa7cda8ae2504a103a8f8a8eb2441a112a8f5a81c24f5a09fa7b2a85d22b0a0ffa652a8072147a027a6b9a7dd1f18a091a5d5a6fc1d11a03ba574a6d41c3ea028a544a6371c6fa02ca54ea6881abba044a557a6621ae4a039a579a66119fda042a56aa668181da146a588a6421817a162a5bda61f181ea15ea5cfa6f0172aa16da5e2a6a31705a155a5cba62a17cfa008a590a6901668a0a1a4f8a5ef141da030a456a59a14879fd1a314a5e512449fe6a312a5db124c9f08a443a5ec102f9f27a47aa5d91029a06fa4f4a57e12ea9f53a3fda4a310b0985f9d069f450c7c98e49dfc9f6c0b2e9de6a0cca29404db9ec0a10da4698b7b9e1fa23ea47c8b509e2ca256a4e884459e31a255a4ce04219e18a23ca4ab04d29de6a112a47804ab9da8a1c0a34904829d7da17ca31c046a9d4da137a3f8035b9d0fa1f8a2ca03fd9cb9a075a24e09b59c6ea021a251037d9c32a0d2a1b6082e9c24a0b7a1a708569c1da09fa11403179c36a0d4a19f08029b899f72a13b080629b92ce12d3729b02ca330d431272d1b2d0b310532b12e9f2c4f31eb300b31e4a2df2a41aaca32ada4dca89fa9293439a83bae31ad9434caa983afe9ae093480aa82af10b03732a6abbeaf7cb08a3016ace9af9db0692f54ab40af1cb07e2d44aa14ae1fafc82bc5aa7fae90afc92a56aab8aed7af372ae4aa99b039b1862c43a654ac9bade8250a9c2da75fa99924a6284d24991e2b274d299e9ec2aa6918b0296e2083a0549e222b0925f31426a0d22b10274b2087a19c2b2227372095a10f2b76262820c5a2332a2f25e91db5a21f29b223b19a83a24725029445a283a0f69c54a406a6b1977fa356a732a861184da8bcabb6ac3f1eb7a4b2a8cea9611cd1a112a6a7a7a41894a088a505a735156fa034a5ada6711138a0cfa439a61811df9fa3a4f3a5d10d809f61a4b4a57f0d849f5ba4a4a5650d459f39a473a5e3060c9f05a443a58e86d39ebba314a52586a99e78a3e3a4668c529e14a3b0a42b8cf09dc7a282a4e38b999d8ca268a4468e2f9d4fa248a4f98df79c10a22ca40590ca9ce2a108a4b58f7c9ca6a1bba3508f6f9c6ea150a3f78c369c35a109a3b58c1f9c09a1d3a27789239cf0a096a25b890d9cc7a030a22e89ae9b9aa0e3a1fe88709b9da0a7a11f8c849a42a098a19288479ca6a0cfa15303032b102f7930032b442f593341342d2e79301934bb341d313631f934ac353e34632c0330ca309635ffa26caa1baa9c36caae46b231b3553618b011b4a8b43d36f6ae68b27eb38c34aeae4eb224b3f1323aaeaab177b239314cad9cb045b1fb2e50ac73ae3aaf812c89ab6bad64adcb2a96aaecaddeae952abcaa94af5fb0992a43a97baef1af0c29bca346a93daa7628e02271a2f2a7cc264828aea6b0ab4996452ae2a31ba9e2a3162ccd209ea476a4412c6324da9e10a51d2cb42551955da4cb2b9e2526154ca4e92ac924e014c9a4b4292124f294c4a48c27b71ad4a1c1a4e49140a32ca68ba1d9a373a760a89f99cba445a949aa231eb5a49fa9d9aaef1f2fa4dca8d8a9f31ceea2faa716a9e01935a21ca79ea8ad1799a14fa610a832124ca1bea568a7c40ee8a076a513a75708c1a02da5aba61e0856a0d7a436a69a07f39f8fa4eba51387739f51a4aba59d86289f19a473a54886cd9eeaa340a5fe857f9eb7a320a5558c3c9e83a3f5a42b8c249e53a3cca4058c1a9e0ba39ba4a48bce9d97a268a4268bb99d47a232a49d8d549ddca1c3a32e8dc99c93a187a3ee8c4e9c53a148a3a689349c43a116a3a68c619c10a1faa2878cb29cdca0c8a24689db9caca051a2458cdb9c6ca0b9a10b8cd59b9a9fb8a0cb90e92af12e7030902ba7306034fb34d62f4f319c346035b8312e3242355136c6344629482d6d2d7d36fbaa9bae53af343775b0c7b367b4d236c0b044b4d3b4e836caaf18b32db42035aeaff7b203b4f833ccae0ab2ddb2cc31fbad3db1e1b1d52fedac3fb0e3b0b12d35ac35af26b05c2c57abc4aeaaaf852bddaa19af27b08a2adca92fae70af8b29b1a7adac87ad9b2893a046aa91ac6d266a2675a6b0aacc1e942a7da2e3a8539c1b2c531c57a6eea38a2ca62414a114a6a22c3425ea9e97a63f2cd625ba95e5a7c92b4225919508a8f52a032525152da8002994212aa0c0a7f322b3a0e8a5f6a487a338a809a95e9a72a5c1a9beaace1d8aa519aa6fab381efea426a96caa751cb4a4cca827aa001c25a476a8c0a98e1999a25ea7c6a8c417b9a18ba62da8491460a139a607a8d31119a113a6d7a7bd0edba0cfa583a740088ca064a503a7e30728a0faa48aa64707d29fb4a41ca6ce06399f6ba4bca56406d79e2ca472a50986889e06a42ea5c185529eafa3f1a41f8c449e57a3bea4df8b1b9ee4a27aa4648bed9da6a252a40d8bbc9d4ba21ca4908d5b9dfea1f3a34c8dc09ca9a189a3018d629c4aa1eca2ad8c069cdaa077a2568c709bbca050a21489ce9be0a04ca25c8c4f9be0a07ea24f8cae9bcaa02ea276834905f91d9a1ff7173a309c33ee34862e62310d35c2352b3270311835f135ba34be2e9132253344371e98f921a922533841afe2b298b3133857b00fb479b4013786af1cb30eb4393513b053b34db431347aaf94b2cbb3523248aebab194b271305fadf2b0c3b1a02ea4ac44b0e0b0042d01ac80af5db01d2c94abe3aef6afaa2a47aa68ae66af5f2945a9c4adfaae6028c0a6beac2aae5226c11cb9a971ac7422512aa69e18a85295c42cf92319a4f9a3442de5264f9f2ba6282d1328401c71a7e32c0928ee1e62a8732cfc27c320b0a8d22b4e27af20b2a8232a7024d99bf3a88e26119537a546a8b09c04a789a861a272a5a9a9beaae0174aa575a9b0aa851be6a464a97baa541b7fa4e7a804aa70184ba4b9a8eba9a314fba200a831a9a7106ba277a7dca8b9090fa215a783a86e89b8a1a6a635a8098988a11fa6f2a7df8e55a1cea58ba7718e0ea178a535a7008eaaa02aa5dda69a8d3aa0eca48aa6478d07a0b4a43ea6fd8cb69f8ea402a6c78c8b9f62a4b8a5948f1c9f30a471a52a8fda9ef6a327a5c590789e81a3d5a47e90109e26a396a448908d9db3a257a40390f19c40a201a4598d9d9cd2a168a3098d619c85a104a3c68c369c58a1b3a29b892f9c27a15ea2608eaf9be2a028a21c8efe9a35a0bba1428f00803b8ae2907680a72cd52f82309c2cf53022350e363032ff30d034c4353534192da332243161365fa951ad70ac5737d8af87b282b39536b2afebb217b44b3660af2bb310b4173597af21b334b4173449afb1b2d1b30b323eaed4b1cfb27f3090ad4ab12ab2052fc6aca3b046b1492d39ac09b0a5b0fe2b03ab14af1eb0072a9caae7aebeaf3a298eaa70ae59af3528f7a8c6ade3ae14269da46eac02aead22fb27e8a5e5a9f914162d9b248ea260a2e32d3b28f21540a6b02df2281e2137a84a2dea287522eaa8072ded287322a8a99b2c3028e42001aa7a2b6a259315f4a95c29091ffda174a9312022a581a837a628a59fa924abf19898a5eaa932abf51971a544a995aa06195ca54ea999aa6217d8a410a98caae91411a48ca8b8a91b115ca3d1a7dda8da0995a240a794a86e0909a2c0a63ea8fe88a6a157a60da8b18880a114a6d8a772885aa1d5a57da7548e46a16aa512a7cf8ddea00ea5aaa65d8d87a0c3a455a60d8d2ea093a406a6cd8cb69f6aa4d1a5a38f149f30a49aa53e8f909e0ba466a5eb8e3b9ed5a337a5a490af9d54a30ea558904b9ddea2c1a4d18d079d60a231a4658df49c19a2b6a3298dce9ce8a18ea3008d6f9c92a12ca3b889509c52a1dca2a68c149c0fa1aca2798c709c09a180a2808c0080bf88338ead815e2c51301831372c7430b7345f358231903050340c351134322ad72d8f2e0a35e2a3daa8fca6023612acb5af2bb038367ead07b2a4b269361dae28b20bb3fc34f0aea2b283b3f23384ae3eb235b31f32dbad9cb1b7b28a3043ad24b105b2042fd2acbdb092b14e2d3cac3eb004b1212c3dab8aaf5fb0392a62aab9ae08b027293faa3eae85af29284fa9e6adf9ae1126c9a72bad62ae8f23561c40aa9dac521d722c62238ba40aa2992e7c29b71f6ea6ba2efc29e122d3a8432e4f2aee248ba9de2dfb29f224c0aa6e2d3729cd2225ab8d2c09283a217eabf72a2f24709f6aab4625a0a051a7c8a92da6f8a82faafea13ca5bba90fab2314d4a477a9ddaaa515bea45ca9c2aa7615a9a43ea9c6aa2b0c5da4b8a8dba93c8bfaa342a875a9888a59a3f2a710a9048ab9a232a7afa80a90e3a198a636a8518f51a147a610a8e38e27a11ca614a88e8e19a1f4a5daa73f8ecca0b8a5a9a7f290a9a072a53da7a9904da00ca5c5a6519000a0c5a45ca60990579f6ea4e8a5808fb69e39a494a5128f589edda33aa5968ee39d56a3e9a4258e929deca299a4cc8d2d9d72a24ea47b8acd9c18a2e9a3208a859ca3a138a3aa89369c62a1e8a29b83339c37a18ca24d89b19bf7a08aa266833a9ce2a00ea2450c0080dc89278e1282732b0730db300f2c2e2f1d34cb340131b32fac338b344133eb2c13321b311735f31fe82077262f368eac1bb0c9b05e36dcad6eb252b32a36fbada4b2b1b3c0347fae85b296b35c33fdad3cb264b3c33199adcab1b5b2543026ad4cb123b2d82ea0acc0b084b14c2d0fac36b0f6b01a2cf6aa60af5fb0fb2967aabfae08b0d42848aa5cae8faf1628b8a9b5addeae1326f5a875adb4ae9b24dda46cacd2adb0207a2908a053a8c29de92ebf293b210ca7b62f0d2c912655a9762f132c11288faa132fda2b252873ab792e1b2b75272aac832dd229cf2551ac7f2c98278c1f7fac5a285d2182a250ac77a408a8cda9c2a6e0a537aa78abfb8d04a61ca9b8aa730ceda44ba9a8aa6e8c9ea430a9aaaa3a8c57a4c6a828aab08bdfa349a87ea90c91d2a322a851a9c0906aa3d4a7faa86993e9a25aa7a6a8e19226a2dca664a87194c4a185a620a8209462a1fda5bfa77e9324a1aca564a7f192fda06aa50da77c929ea010a5a3a649904ca0c0a449a6f58ff59f88a40da6838f199f55a4cca51b8f669e22a4a8a5bf90c69da7a34fa56590789d33a3eda41890329db1a27ba49c8f0b9d69a22da44a8fbd9c13a206a4e88ea39cefa1caa3bf8ea99ccda1aea33290519c90a15ea3238e969c45a180a2328f00802e8c138eeb84332b0430e5301d2cca2e1734b734ee306c2ff833b9341c33c82c6131b731fe34581f2b278924ec359fab62affab0bc353dad48b210b3bc3571ad7fb284b37334acad63b276b359339aad1ab24eb3863143adbab1c0b22230dbac31b138b27a2e71acc5b09bb1f92cf6ab4eb004b1cc2bcbaa87af81b0e4290baab7aef1afca2897a943ae5caf082805a9beadf3ae9726d2a879ad83ae6d252da83dad62ae0c231a190da9b6ab29199f2d23287715f7a47b30ff2cef28eaa960301c2d75294dab2b30eb2ce32915ac732f5f2cc528ccacbe2e752b4e2802ad612db32928252cada22b7425cd9c59ada61ab4a7e5a951aa20a6e2aa7bac079cf6a4bba947ab2816c6a433a98caa690caba438a9c0aa4f0c77a4b8a8d1a9818b20a459a893a9bf8a7aa33ea86ca9808ae3a2d9a722a9df89e2a27ca7c8a88a896da230a78da8cc8ffca1d2a66ca8518f9ba17ca635a8bb912fa125a60fa86091d0a0d9a5a9a7019376a07da548a781924aa035a511a71b9206a0f5a4c2a6c191839fb8a479a66b91159f72a430a60e91c39e39a4d0a5cd90869e00a47da56f8efd9d80a31da53d8b839de4a2aca47c8de79c25a23ba4e58cb59cd7a116a49489b39cbea1b3a3468e339c7aa113a408895e9c62a1d7a3f4910080f98b248ed082ae2ade2fb930ee2b782e2334d33414310d2f0934db3433336d2b7131a530a53471a3279af5a73d3532ac56b04ab14035ebac42b21eb3583509adf6b1f2b238346fad21b237b3c6322fade1b107b35131ebac85b19ab2273096ac20b121b2652e54acd6b0cab1322da5ab50b00fb1b62ba7aa89af73b0da293daaeeae18b0c6288aa96faebdaf92270ea9e4ad26af2326c2a87fadbbaee824a5a820ad14aeab230ba89dacbead731f0d289ca183a79ca17b30232d8b2903aa1231762eba2b7eacd730422e192c29ad6430b52d112bb5add72fde2cdc29ffad762e742b3d2736aedc2c6328552095ae3927d09c71a650ad0fa537a953aa81a2c0a489a9eeaac10cb2a423a98eaa6015c7a41ea97caa561263a4cea816aad60be9a380a8fda9280baaa365a8c7a9e78a9da2e0a716a9098a49a27aa7bba8339038a268a7b3a810904aa215a79ea8559220a296a66aa8d391dfa137a62fa86091caa1eaa5f3a7029175a1bba5c1a7cd90dda07fa559a78f9050a027a5caa63b90d99fd1a454a67b917d9f76a4f1a512912c9f48a4b6a5d290409f11a46fa59490129fc1a3efa42c8ef89d2aa3a5a4e88f269d7aa276a4148f279d88a28aa40c8d339d75a265a4db8ed79c17a2d3a3588ee99c46a25ea49a830080008cfa8dd3823f2ad12fbe30a12bf92d0234bc34cf30442e913383346c33e82a4a308630bc34c01b7e20e51a623593aaf1ae85b04d3567acf0b101b353358aacc0b1ebb22534c9acf0b12db3b532c5ace7b1fdb23e318aac6cb16fb2d42f35acf4b0f2b12e2edeab9fb084b1e42c3dab17b0e2b08f2b77aa27af52b0a629c2a997aed2af52282fa913ae28af2527b8a880ada0ae7425a0a83cad75aed5248ba807adfbadc623f4a79bac98ade12195a287aa72ac1218ff2d1b2a282433a7bc31952fe92cbaac7b31462feb2ce4ad3731142fb92c26aeb8306d2e1d2ca8aebd2f132d622af6ae202e0d2baf266aaf532a31244ba092afa6a52aaab0ab06a551a451a9c2aa3d139aa4bfa861aa228caaa4d4a861aa2f9579a4d1a86caa1b9575a4b9a864aae09434a460a891a967946ca328a874a91494e3a2dba722a987939ca243a79fa8cb922da2c7a65ba86394bda190a646a81b9450a14da61aa8a19303a10ca6d4a71793cfa0bda56aa7a99290a073a50da7069444a025a5aea6d99100a0dba46aa686915c9f9ca419a6ac92b99e5fa4cca5e090759e1ca46ea58990da9d8ca3fea4f28d6d9defa283a4778df69c5da22aa4f689a79c11a207a4c0830a9d14a2e6a37b89889cf7a1d8a33b09229d99a177a3d2080000ee814c0cee812f29802e0930ac2a352d4f335c349330252e7c336b34cc32082cf5301c313c34d19d9f99e4a0e034a4aa62afdcb0d134d2ab7db188b2ff3419ac92b1c2b2043466acc0b1e5b2bd3248ac7eb1c8b2fb3010ac27b147b29e2fb3abc1b0ceb1192e20ab60b03db1c72c91aae7afc6b02f2bfca944af62b08d29a3a9c3ae11b0822841a92aae53af04279da87bad99ae41254fa81cad28ae39240ea8c2acc9ad9b22aca781ac73adc1217ca632ac1fad761f641e3aa88caa149f1031252ee92a75aba6329230a02e76ae0a3266304a2e4fafc5310e30772ddcafb630972e632c0ab08b2f002d69296cb05d2cd927c91dc6b039a468a901ab2fa9a3a418a933ab3a185fa413a9a1aa7315c0a42ba982aa610ca4a4d2a8fba9160c60a48ea8e4a9a08bb9a36ba8d2a967911ea317a872a91d94e4a2e2a756a9bd93a1a2a3a707a9109535a20aa7a6a8dc95dea1b6a66aa876957ea17aa646a84d966ea145a61ba8e79515a1faa5d9a78295a8a086a546a70a95ea9f05a5b6a66a932f9fa5a436a6db92e99e5fa4e2a56392fc9e38a499a5c090329f29a46ea59890f49e00a435a53e8e659ea7a3fda4eb8db19defa287a45c8d309d96a246a40d8afb9c44a20aa4a78ebc9c00a2afa3318e339d95a172a3268f0080778ca494980463283f2ef72f102bbf2c66337b3466306e2ded3226344032a028c02f362eae332e94bd225f9a97345baad2af1cb1a634d5abe5b1d0b2e234c6ab86b1bcb2c33305ac98b1a6b24d32e0ab58b19bb2d830acab2ab137b2a32f63abd4b0ceb1ed2deaaa67b05fb1ba2c5eaaf0afc7b0192ba4a931af56b0682930a977aeacaf7328fda8e6ad09affb269ba86aad70ae75253da815ad3cae772404a8b4acd1ad092315a888ac74ad99212da850ac11ad9e20a6a608acc2acb91cfe27b49e58a681a5f0320831b12e82ae5a336731e12f3bb0d132e4301e2f7fb0df314f30f72dd7b0b630db2e962c2db1472e232c1b28acb1b2948ea69ba912ad7ca4eea8fea96b9832a4eea849aaac8c30a4c6a832aa568c3aa4a7a8f9a91c8c10a472a8afa9a38b00a45ca8a0a9789174a31ea88da93394ada2bba73ea9509590a24fa7dfa84d968aa207a78da8d99509a2c0a65ca8b69665a189a630a84996fba02da606a8d095a5a0e7a5b2a7719569a08ea545a7119530a041a5dca6b2940ba0e8a47fa66294dd9fa9a433a61f94839f6fa4f1a5c493f59e33a4a0a5f5916e9edea350a54c90369e86a31aa51290079e2ea3bca47f8dd99dcca288a42f8a9d9d82a253a4e38c389d16a221a47d8c709d16a24ca41d8eba894c8e018f0a85c320c223f622571d262c8832cd33df2e062d0a3329345b322228562f8f2d6833d79c24998da07634bba891ad32af983435aad6b0a4b1b63498aa36b13bb2833303ab4eb150b2f93166ab34b162b2b8300fabf5b01cb2272fbbaaa6b0a0b1742d66aa4bb02eb1542ce6a9a5afa6b0ba2a65a904af3db04729f9a846ae96af63287ca8a1add2aec62626a833ad56ae942504a8feac04ae6224caa7b7acaaad0d237ca762ac40ad162273a713acf5ac35219da69fab97acc9206fa5b7aa41ac0616ca2dc22a8727e6a94e347632e530d4b08333bf31673052b1bb323c314c2f85b1bb315630252e0bb21b30ba2db22af9b2012053a5c6a83fb0efa4eea806aa4a9b68a4b0a872aa92123aa491a817aa448c44a46aa8d4a9309234a447a8a9a9e99120a430a86aa9af94eca302a84aa95c9430a3eba733a9099479a2b0a70ca938950ba20ba7a5a8ab94bca1aea664a8539467a17fa644a805943ba11ea6f0a75393f4a0bca56da7ba92caa07da50ba74e927ba03aa5bea6f19141a0e5a465a68291c69f93a421a62691ff9e57a4d9a5e98e8c9e22a485a5848edb9d99a32ca52f8b9e9d1aa3caa4a68a439d80a253a4178a129d43a20da4df83099d10a2e7a38489f89cf1a1a3a38183299d7fa153a3bc887503ec8c13938c848e205023a622b61ca22b27329b33c62e022df93260344f32d028fe2e0b305633e4a223a8e7a8423479a951b0a8b15c3407abb1b1ccb27f3474aa5fb18fb23a33b7aa30b16ab2a031ddaa18b165b2853068aab7b0cdb1ce2e03aa4ab054b15b2dd2a9feafd9b0192c6aa952af6ab0a82ac4a87caedaaf0a2993a803ae56af132875a8adade9aef12647a839ad35aeb225e5a7d2acc8ad9f245ba776ac63ad6023eea609acdcac3e228da674ab89ac43211ea643ab5dac8f2001a6dfaa13ac5120cda455aafeab1e1958318f2f542d81adaf345a33d13155b2dc334932cb30e1b2d232773106308fb33931902f172d48b45d2228a474a824b1f6a47fa853a96198e4a349a884a9511524a46aa88ea9500cf2a333a866a91b0c89a30ca84fa9c98b3ca3eba736a9a09427a306a845a97094bca20ba863a9ec9588a2caa750a97d950fa22ba7c1a81b96c9a1f7a67da8bb95a4a1d5a677a870957fa18ba63fa818952fa12ca609a8a794f6a0c4a597a74294b7a061a518a7dd9353a004a59aa64293ee9f9da422a6ad92549f36a4a2a518929a9e8ba326a57691419efba2d2a40d91359e9ea294a4ca90cd9d5aa25da48d909b9d12a20ca4c38e579dcfa18ea31f90f09c9fa175a3158ec79dd7a1d9a3310ce283b28c358d3889361e38211a21201c102bcc312033902e902cbb322734de316829e82fa8308b321aa0f4a900abe933a6a95cb020b1d833bca9fcb0fab12d347fa9d5b0c3b1ca321caaedb0eab1533162aae6b018b24830cda967b07bb1822e80a923b0fbb0f02c50a9acafadb0fe2b06a918af45b0582aa1a85faeaaaf13297ba8e8ad20af212832a886ada5ae0227d8a7fdacf0adae2549a79bac80adf124f5a641ac2bad142476a6e2abc7aca02213a65bab65acb021cea5e7aa30acf5207ca586aa08ac951f6ba518aa8aab351faaa449a98eaa9315b832fd30032f59b0f934ec33fc310ab40d346f32073154b45932c430f22e36b5bf9c39a5dca792b0fea47ea817aaac8c27a43fa88aa9a11204a414a857a93f8cc9a3f1a73aa9199256a382a71fa9c49158a387a7f0a8ab9467a3bda70ba9539665a301a85aa9be97bca2dfa737a9389747a261a7d9a8df9723a21ca798a84698efa1f0a67ba8e3979ea184a62ea82b971aa1f6a5c5a77e95aba07ba52ba7009549a019a5cca69a94e29fbfa44ca6f192509f6aa4fca5f890c59e2ca4b3a5b2905e9eeea35fa576903d9e91a308a54290239e2fa3c4a40b90f09dd9a272a4b58fc49da2a242a4558da39d5ca205a42b8deb9cefa1c6a3db03c59c9ba14fa30a920528152add2a2124682028232e22b4a08a2a21317f32fe2ca52b9731803200319a26f62d1a2da831e6a18ea78ea80c3343a80aaf24b0dd33cda87eb033b10734fba88ab0a3b17e326ba996b0cab10f31caa9a8b0e9b1f22f57a94bb041b10c2e33a9e7afdeb0cc2ce0a83daf66b06c2ba7a88bae09b0d4294da800ae79afbe2818a889adc8aea1278ba707ad27ae402623a79cacacad6c25d8a65eac45add82489a618acf8ac442439a68fab98ac5f23e2a5c6aa2dac4122a7a560aad0ab8c2177a5eea938ab7d2011a588a9bcaadc1f51a444a97caab21e85a52ca9e9a9718f2e2f6f2d682bf0aef434e933883134b55b31362f3c2dcbb4a1a481a97eaa4dab4ea4caa82daa7a1338a44fa867a9b61a5fa3ada7fba8bf17ffa29ca7e4a87712d5a26ca7d9a8210cb9a27ba7dba8ea8bb4a2d7a728a9a991b0a208a858a9739485a205a869a978975da2bfa726a9c396e0a138a7baa858976ca1aaa652a8be9723a165a627a81d9708a1fda5e7a78596eca095a55ea70496b9a03ca5f3a6b99496a0e4a478a65e944fa08ca402a61094b79f3aa480a58d93a09ed8a326a50293ca9d39a3b4a45591579d8da258a4e390189d04a2fda38990e19cada1a1a3ba8ed99c95a16da341900f9d63a16ea39c8c8f9c1aa11aa39c830080559615983797ab2960309b31bc2a312bf03176333a30192be33110336531ef25fc2dea2c9632639291a525a50f345fa892af99b0f53397a963b18db24a344da9e0b014b2a33285a9d9b0eeb13b316ca989b0e0b1ed2fc6a801b00db1ec2d6fa82faf60b0702c1ea865aed7afad2aaca7b8ad0faf76294fa74fad8bae7f283ba71ead38aeca2703a7f1acd1adee269aa68bac8aadf4257fa62cac12ad30250ea69fab9dac4c24bea51cab62acaa2375a588aa0dacd3222da514aa89ab05220fa5d6a90bab5b21ffa4a0a9f7aa4221c5a44ba98faafc1e42a52aa921aad8190da459a9b2aa0e8ebfa2c7a836aacca105a036a8b0a948a59fa595a8cea9159967a2fea75ca96617f4a305a8d3a869196aa2d8a68ea8f71934a2cda64aa8d91833a2aca65fa849153aa215a7a1a8280c8fa2aba7f9a81592d6a20fa83ca9bb967ca2f6a72fa9a498bfa15aa7eca8b198e5a139a7d5a80299f2a1f3a6a6a88e9886a175a651a81b97c4a0cea5fba752964ba036a51da7c693fb9fd1a482a61c93eb9fa0a428a6c392979f75a4c8a584922e9f3da46ea53292ae9ed7a317a5bb91e69d16a3a9a41290719d73a263a4598d209d1ca220a4248aec9ccaa1d0a3ec83d69c78a117a3ad89379ceca0b6a24789e59b73a0e5a169835d85b610be12a59c5421d324e6258b9be429cd300932562df12a073283338831ae24582d8c2c743231a0b1a645aaae3302a8d4ae5fb0f83304a92ab149b24e341aa9e8b014b2df3231a9b8b0afb12d31fea853b065b1512f5ba873afa7b0722dfda79dae09b0202c4fa7c7adf0ae252ab9a622ad31aeca285ea6bdac9bad09282ea689ac80adba2743a67eac83ad392746a657ac52ad3126dda51daceeacab258ca562ab71acd72448a595aa13ac2a24f4a40faa6eabf023a4a480a9b7aa56233aa4e1a8f3a93023eca369a85ba94922cda348a84da9512125a47da882a9051d56a4d7a80daaaf8deba31ba9b0aa8198d1a226a84ea9b1122fa386a7f7a8ec1a92a224a77aa8121b80a1c7a562a76a1caea1c9a5a8a7861c58a174a567a7d51ac4a17ca5a0a7d0194ca221a642a854120ca33fa7efa8b39844a333a8aea9949be0a283a8c6a9139b4aa219a840a9ad9a00a26fa7dfa8b69992a112a7b7a8a39849a18ca65da83497e4a0e3a5c0a76d95afa049a5eea6d29478a0d7a481a639934ea086a423a6af92f19f03a455a5fc91d99e15a3b0a44991459e9ba280a4fb90119e68a24fa4978fcf9d49a229a4738f719d10a208a4438f139de6a1b6a31a8de89cbca16da3f18e399c85a150a3c68c479c38a1c2a2908c008001966b93ea9ac928e32f2331ed299c2a0732bc330a2f1d2c7f3213340a31c125a62e3f2d2c3254a0daa992a97833a4a8e4af24b1d13389a977b178b24334b7a899b0bbb1493282a82fb02bb1973041a870afbdb0672ee7a78dae0fb07f2c04a7d0ad04afdb2ae6a521ad2faee42878a541ac38ad8b265ba5a8abc6acdc25e0a539ac0fad06275da6adacdaad1e27c3a536ac33ad2a2619a524ab5fac1325aaa444aa94ab742473a4c1a91eabab2357a485a9d1aa002344a44ea984aa7d2201a4cfa82faa8822dfa1d0a643a83122cba102a65ca7c6221da3f2a7f7a81e2181a470a9fdaac20e1ca41ea967aa2c93f4a211a80da9f41674a246a7aea80d1afaa128a6c2a7d31b18a1fea44aa6ef1cc6a031a468a51a1de8a0b6a314a57d1d8ba17fa4ada56c1c7ea170a51ba72116eca142a7c0a8639991a258a8c4a91a9cd6a290a8fba9e89b41a204a84ba90f9b25a27da7f8a8389a33a201a79da81899f3a11da6c0a7ba9629a171a5eba61a9442a0dea46aa6b591a39f74a4e9a52b91129f24a47fa5ce90bb9ed4a330a58b90559e46a3e4a44490d59dd2a287a40090369d42a217a44c8dda9cb5a1a6a3e28c959c74a189a3b78c7d9c43a174a394894a9c08a110a37f8ccf9bc0a0f4a26f83499cb4a05fa21a0900803294e292bb941427042ebe2f42287a2931305831702caf283f304631a62e9f25192dd72e9228209dbfa61aa68a2d7aa874b060b14e32b1a723afa6b0a331c4a695aeedaf80307fa6dbad50afd82e04a65fadefaef42cc8a50ead4aae242b93a5a2aca7ad5b29fba40eaceeac8c272aa4abaaeeab5e25c2a292a934aa1926c6a411abdfab922898a2b8aac1ab392443a218a944aa4e2172a370a974aab320b9a312a92baa1f20cca30fa921aae91ea4a3cca8e7a9ae1c5aa39da8b9a99a1a33a384a889a9761aa5a258a847a92b1934a2c2a7b4a8ef19e2a0c3a61fa8931a10a077a5ffa6dc1997a0c0a51ca71c1923a18fa5e4a60b1961a1bfa54fa795198da1dda595a7571a73a155a588a66f1c5fa0e9a23ea47c1dc69f3fa093a1701e379faaa065a2661f83a03ea499a5f01b3aa2dfa705a93f94a5a371a9e3aaa29c4aa3dca859aaf39c07a311a85fa9b99baba2dea655a8b49969a1b0a583a77597f0a02ba5dca6eb946aa0c0a47ea651930ba05da4c0a52c912a9ffda350a5c38ed19e7aa30fa5558e799e25a3dba40c8e3b9e01a3b6a4ee8d349ec9a2a1a4e58aa29d45a249a44b84429dd6a1aba30a84de9c74a119a3d183939c3ea1dba2b5837c9c13a170a271892f9cb1a046a26e83909b60a0d3a150830080728e16834c96eb24b12b0d2da0266427ea2d502f572bb525f32c412e812cb2218629352b532e659f40a61fa8c63004a05da868a9ff2f57a1b2a91fab4b2e65a30cab7fac502d7aa41eac1cadcc2cb0a47cac50ade22bb4a459ac2bad362aa0a401accbac91285ba433ab5bacb82635a418ab2caca424dca143a806a9831edf967e9be59b71885998eb99a8995c94bb9f3ca306a4b111dba101a6dba6121a44a2daa627a8331b4ca230a755a8081c9da25ca770a8f41b91a263a76da8ae1a92a22ba76ca869186ea229a755a8a116b8a180a604a8ec1548a029a578a6a0140c9d0ea350a48712c59dfca272a40911dca059a497a54512e6a1bba4f1a5d2125ba1c4a406a6b11731a1e8a415a6671980a096a3b6a4871a1c9efc9cf99dda1dd198ef1aa91ce3203e9cff8fd797402067a3faa877aa899c21a489aa86aca99fe7a165a890a9209c4ea143a63ba8c298cda072a567a74b95b6a017a525a70d94d4a082a415a62d93ed9f31a468a521912e9fd4a332a5d88eb99e51a3f3a4668e299ee5a2b9a4078ed19da2a286a4bc8d8b9d35a24ea46d8d499dc6a114a41b8d0e9d7ca1b7a3d189de9c35a138a39689ac9c12a1e5a270899c9ceda099a290838b9ce0a056a28783389c8ea00aa25403db9b58a0a0a137030080618f2b8e9f16cb24f22bf62c4728ed25772cd72ded291e24992a2e2c6a2bce13a517b418912b608eec98d9985c266a1dc6233425502883143391f9183b2b979e35a70da8792b98a191a9bdaabb2a2aa3b6aa17acc9294ea3caaa16acee2836a3a5aaeeab3a2899a377aa03ac2827eba3a5aa31acd2259ca31eaac1ab222482a140a837a97620949ee1a4e3a5d31ca19e9aa44fa5001949a060a553a6c316ffa0b4a5dfa6de1657a107a647a7d2166ba12ba66fa7b516a9a15ca69da78916cba163a6c4a75516e3a16da6f2a72716e5a137a6cea7c115b4a148a6e7a7ac1334a1d7a5a9a7a012a5a00fa55aa6320f5ca0ada4cfa5110f78a0cea43aa60b0fcda008a58ea6f40eeba0f7a4a4a6db0eeca040a5d7a60c0f08a12ba5b9a6a0112b9e12a285a4cd1a451a0229f629b92448a7b6ada3af33a54ca06ca864a90f9ca8a007a5e7a617948ea060a49ba6e98f45a070a440a66b86d29f36a4c8a5178605a006a47da5d185609fa0a310a574851d9f39a3c9a42a857b9ebba281a4d084269e42a245a47a84aa9deca11fa43c84329db1a1ffa31284f49c77a1b1a3e803ca9c3aa164a3c803a99cfea010a39c03869cd1a0b8a27b03559c9aa06da20d09529c76a0eaa14303219c51a0b3a12803e39b4fa0ada1ba0800809087f8811b117c24aa29252bb525b7226529e52a802750203c27a328b228d4192c2058221a2974195c1de21f96283a1c36215d236e289419531cfd1fbf285b9650a194a19e28059ef9a512a76228a4a056a866a9162878a12fa968aa7127c6a170a9bdaa87266ea26da9cfaa9525ada24ea97daa692452a21da941aab5227ba134a83da99620d9a0e6a63da81b1e85a022a6b1a7701c76a0c4a543a7fd1a95a0caa525a72519fca005a64aa7351813a125a67ca76e1611a128a692a7361616a110a67ba7e815eba0d9a53ea78115d8a0a4a5f5a62315cca05ca5d2a6ba14aca025a588a666146ca0d8a421a6eb1154a092a4d9a5ab1143a05ba4ada566115ea057a498a54e1189a069a4a2a54f119ea06da4c3a54b0e59a06da4b5a523082da17ba4dea540085b9d66a1daa332850080308ef5901f824699cf9c5c9eef8b4e9f3da394a42a91e39e7fa3e5a41791e09e19a3b8a4e28eb69edfa286a4958e979edaa274a4b18b9f9ecca277a48b8b999eb8a273a4ea84a59ea8a274a4d0848f9e88a274a4b9845f9e4ea25aa48f84409e07a24fa45c84f49dc7a135a42e845e9d64a120a4f183df9cdfa05ca39b83639c91a04da261832a9c63a0daa13f03199c58a08fa13783079c4fa09ca13003d69b5ca085a1bb8800003319201a2a06f620c727af28252449209027d0285126f21efb248d264027471d2c237824a127681c84202a228f27171a7a1bc51d5f279e1410955390a526989407a012a04026f59ad5a374a4d225659d86a5c3a651256c9ff5a647a8bd24c4a009a804a946242da132a82ba9992368a143a80ea975223da118a8eba85b210fa192a7aaa81b20baa006a757a80a1e66a033a69fa72c1c36a09fa5cca6071a3da056a585a6ec176da049a55aa6fb15a5a040a55da62814d7a038a57ca60d1409a13aa566a6d0131ba13da57ca6881019a13ba58ba65e10fea02ba58aa62b10e9a017a57aa6f20fada0e5a457a62b1250a075a4d9a59e11c69f14a451a5430e6c9fbea302a5f20d739fcca319a5e40d799f0aa437a50208c29f3aa47da50208a19f52a49da5f50743a074a4dea52b07d59effa1d0a363041f97ba9ca39e4602189a7a9fe2a0a783ac9d7ca1a3a3788b959ef5a11aa46b90929e4fa258a46e8e709e62a261a4448e349e56a255a4498b199e28a23aa4fe8ac89dd9a101a46e84cb9db0a1bfa342849d9d7ba163a3278a789d3ea115a3e389429d0aa1cfa2a989f39cb3a06da28583a59c75a022a201895f9c41a0cda12f831b9c27a0cfa11c833b9c2ca0b6a1a188d79b41a0d7a11383c59a9c9f38a1d9820000a9219524831cac2c553066316c29352f2c337734a02cfb2c9c320e322b2e25a7fc9cd1a97015a696d799a29e109948a059a4eda4719ac8a90baf0aafca2d9face2b141b26d33a3ac50b195b10f3198ac74b0feb0922e51ac3cb0b5b0e52c11abc8aec8aff529ffaa64ae6eaf5c2808aa1aaecaafbb28fba838afb2b00929dc9ccea921ac6c228b26499deaa4c2205c2bbe24efa36c19aa2a9d20a7a676a2652a0d24039c0da4e62bc8269d1e7da53a2c04280d2376a5452c5928b0241ea6b82b8a27a721e2a6e92a3626341e85a7fe2982253a1b0da88528bb22e79a21a8ef23f59c21a333a6ee9ddda264a58fa1aca394a5aca6439bc5a282a8b3a9e519c7a0c2a5e9a74815a5a04ba5eba67c0838a00ba57ea6548ef99f9ea4fda5df8d769f76a4aea5aa90209f45a492a57890479f41a486a56490029f1aa44da5ee91f39ef3a31ea5ac919a9e7ca3eba446915c9e3ba3b6a47892099ee7a283a41992a69d92a25aa4bc91479d3ca247a47191f89c09a22ba45d92be9cdfa111a41d92789cafa1d6a3d9913f9c7ba187a39391529c65a124a36d91459c43a1f6a24890199c0ea1bfa21d90259ce8a084a2358e089cbaa011a2fb8d6a9b87a0c8a1bb8d519b7fa093a1518f4e9a36a086a1878b3a9c7da09aa136830000d0195a1d6f1d33301634f034102c1a32003646370f2fc43196352436192e3795f7953c9cb0989a21c91b2220d594d02197210025fd25b1ae48b2c1b27b34fbb0f8b4edb521365ab003b4b4b43a33acaff9b21bb41f31a5ae06b2f1b2ab2e1bad73b0ffb0c62baeabf2ad64aecb28a1aa34ad1cae1f2886aa6eaf53b08e281ea7c8ad4eaf49270324aca4c5a81c26f629251792a75c1dfd2ab1a344aab3a4c22b709c76a84aa6452cbe2387a2fba5772c8725289587a5692c4a263715a1a5212c7c265a157ca6fa2afa242d15a1a79a294324ec9b19a89b28e222f79d89a88f2498140ea2bda8509f14a535a7aca46ca4c8a7a8a862180ba59ca908ab6d1fc5a4eda816aa241d9fa207a80ca913192ba215a78ca8cf1493a137a617a8e2082aa1a1a557a7a18ee9a075a507a76d8eb0a030a596a617914aa0c0a40ea6aa90d89f77a4baa50f92569f38a47da5a991029f0aa447a55a91bb9ed5a31ba52191789e8ba3fea4f190329e5ca3d3a4c4900e9e25a3a6a4e191f39de7a278a49d91b89d8ba246a44491819d42a221a40991309dfba1e7a3c290a89c9da1b2a37890459c57a137a34090119c24a1e2a21790279ce9a0b0a2e78f689cc8a078a20e8e9a9ca9a035a2f78dbc9c70a0aca14d8f5d9b859f01a146926189aa9fa19f471db1301d343135812c6333e23606385a2f1c3315362437a03291a049a086a13924479cfc9b539c5a21f9a3e6a452a56f26abb1c5b437b5e2341db2eeb5b0b67d3606b1a0b43eb5443465b0e0b37ab4c93174af9db29fb3932fafadf4b0b9b1e82caaacc9af69b0a02a90abdaae8eaf3f29a4aab5aeccaf5d28eea8bcadf1aea527cba0acaab0ac2f26b5279ca5ebaa7a1fc22b479613a810a3832cc21f2da6d1a59e2c942224a4ada7c42c1b26619c7da8a72cc725039c97a89a2c76265c9546a9652bb82537958da9862a0a253695e1a9a429e324ff1407aae9275e20f59dc5a92d193da4a7a73ba61fa504a914aaed0f01a528a9fdaa731cbba4c8a840aa401c84a4d8a809aa1c1a3ba47ba8bda9b918a3a26ba7c5a8eb1462a17aa62ba8460f4ca12ea6faa7a10805a109a6bda7b28ecba0b9a55fa74b9185a05fa5eba6e99028a0f5a46ea65892c29fa6a4fea5e291179f5da4a0a58691c29e1fa465a537916d9ef0a324a5f790319e91a3e9a41692019e35a3b4a4cc91d99dcba272a47791a89d87a247a432914b9d34a20ca4ef90009deba1b7a3b690809c91a14ea36d90349c37a1bda22690e39bd6a054a2c78f7e9bbfa035a2a38fd59bdda026a2c890319bc5a03ba2a3908b9bada0eda1eb8d0000088260110802b73082347235292cd2328d36be37f22fd0327b366437e03223230326502423292f207720d31f8d26b19f9ba08b9fc22b45b1cbb331b5253590b189b5f3b57e36ddb077b40fb51b3477b009b4acb42f32a5aff1b206b4073066aec3b1abb2832d1bad9bb05bb1b12b27acb8af84b0cf293eab3daf26b0832859aac6aee6af4927c8a743ad47aee7243e1eaca9efabd521ef2a449f77a8449f0f2dd62224a5b3a5582d5d2655a14ea8742d8227cb95d4a81a2d00282e1c64a9b12c4b28cc1e03aa482ced27b72060aa662b8b26b11e5faa202a1c25e31ba4aa3b28c51e709e99aaff22e6a301a851a9f7a45aa9f4aa08a037a5c9a9f5aa531b98a471a9dcaa431a55a4e9a831aaeb1638a4a8a802aa7c1171a2d3a756a9128a7da2b9a7eaa87090f8a130a781a8ce92aba190a62aa85994afa109a6c9a7e8935ba1a6a551a7b394f8a065a50da7d39290a018a5a6a6609225a0d2a454a60892cb9f9ba407a65493799f77a4cea50693399f52a47ca51c94f29e1da445a5d393bb9ee5a315a56e93629e7ba3d4a42994099e22a39ba4b692879dafa255a44a92029d1ea2f3a3b690a49cb0a151a36d904d9c74a101a33f902b9c5ca1cfa28f8e269c31a187a22190809bf5a02ea2f98f4a9b35a07ba10c92e215c58c698834851525bca289a3501f7431f7346535852eab320e377e373331d2229c271424a6265d18ab1d1e1a30246a9c6c20fe9f292a69ad96b0fcb1893465b19cb5f9b5453696b072b442b52d3458b00fb4b7b4d2316bafdbb2f0b3fd2f80aef1b1e0b2af2d3badeeb099b1ff2b6aac34b0dfb09b2949ab50af4eb03328b6aad4ae02b0c326dba944ae6baf032541a5d0ac5bae0621ac2787a744abdb9b102dae2210a591a5f22d1327819c48a8f22d9d28ee15b8a9a72d9028621c64aa3e2d83281d1f0aabcf2c8128ee20c0ab3a2c8e27fa1e0cac232b12268f1505ac8d296a22b99e02acf525aca0a9a62dab5aa3f3a89eaa74a543a57da99faa4814b8a54aa9a9aaf317f1a43ba99daa3d1282a402a976aac60b0da48fa8b7a9d28a06a3c8a7e4a85e907ea248a79fa8d0922ca2a5a62fa82592bda15ba608a81d9475a10da6d0a7bf9347a1d3a561a74a931aa151a5dda6a792b3a0f7a480a6e69365a0bca434a6739314a083a4f0a51a93a09f5ba4bba5c892f29e2fa485a57192659e04a452a51e92f19db0a32aa52893899d48a301a5c892379dd2a2bca43391f39c56a22da4d490e39c25a2baa3ae90c09ccea150a37990649c74a1e7a29a8e349c47a197a21391e29b0ca1a1a2e890509c0ba1b3a20390d9088e8c888913860a2770288d28da1d2331263506369e2de0319535ce368831f71d751d33208925e893099625955220f39f84a1f6a29329c4aca9b042b1b534f0af7eb4e9b4433618b033b4f3b43334a8af69b340b4c031d2ae86b2aab3f82ffdaddbb1d6b2b52d3ead15b1fdb1282c78ac8fb04db12e2a68abd3afa3b0a728acaaf7ae08b048273eaa7caeb6af5f2566a8cbad0caf0523db10bdaa03ad581a462c841532a87ba4a82e2529981cc4a8952e84294c2146aa7c2eea29d52271ab042e7f29c92213aca12d8829c3227bac082dc9284121b1ac302c49277e1fe3ac472a35246c9ce0acb127ee159ca4e9acf0a0b1a77ba9d5a969a58aa982aab49a26a56aa9e3aacb12c2a454a9b5aa4a0cbfa441a9b4aa208ceca3c4a80faa7b9105a44ea85ea91394bca3e7a7eba87b93eaa21aa7a7a8a794dca199a630a845945ea156a605a8029433a12ea60aa8a59318a1fda5dda74093e6a0a4a589a76494a4a052a5f9a6199442a0eba492a69393db9fa2a425a60f931b9f54a4cca59892899e26a46da541923a9ed2a32da5e591d79d56a3e9a48891909df4a2a0a43e91139d72a262a48f8fd99c0ea201a41a8f729c9ca123a3948e1f9c54a1d9a2778c2e9c3fa199a2378ed99b15a1b6a24e8c3c9c08a15aa27b0349031d8fca89c387e1250e280628141d4c305e345635f92c7231cf35da364c312b25ad28ae26f427181953201d1d7c237a16a7202e1a8d2a9cad61b197b2ce344ab0d0b4a4b52836f1af52b409b5f23312af44b320b435318bae82b2b9b38c2fcbadd1b1fab27b2df7ac13b1f9b1022c33ac57b02bb1e42921abadaf9ab0362895aa01af3cb0d02641aa8baed0af6c258da9f3ad06af6f223ca823ad9eae0e1e822698a745ab10a1892e9728861c97a8772fe02a1225e0aa612fa42b932636ac292f4b2b9626a2acbd2ee62a8a2607ad262e8d2abe2543ad202d6129e9227aad0d2cc126801ca9ad8d29f31f2aa110aef81d18a6c7a892ac16a63aaa3cabbb9e97a546a9b5aa980caea42ea97baa6b9595a40aa985aa309722a4b4a8e0a98a96b4a340a853a9c695f1a311a81ca97595cda3afa7e5a88c96cea248a79da87e97dba1c7a655a8e5969fa171a623a892975ba1f3a5a1a7e99624a1a8a547a76e96e3a04ca5e6a6fc949aa0e2a46fa6719353a09aa419a6f192fb9f68a4e5a59392dc9e2ea499a52d92519e01a469a53b93b09d87a318a5cb92629d07a3aea458920d9d84a24da4e291e19c3ba20fa4a0919c9cf0a1c2a35c91819cd5a17ca34490989cb8a160a30f91459c7ea136a3ca8f909c48a1a1a268909a08328d1386ed86d62505282928981c0c305f344a35e72ce83094358836cf3137243026f825ef27221b5b20771e4422ef1cb522dd1fba288aab64af8eb0fe3375af64b421b572351aafe9b3a9b4943387ae0cb327b42431f2ad76b2c2b3282f4cad9bb1bcb2042d9aacf2b0e9b15b2b14ac5db024b16d2905abdbaf91b0182848aa02af2bb07826a6a95eae8faf892535a9daade5ae9a24dca8a4addbae8f22e0a30eac59adbe12852cc025b4a15ba630308c2cc12828ab4a30c42c522990ac2930cc2c622935addc2f652cf6289fad1d2f0f2c392824ae472ef32ae3266cae1b2dd6285f249fae9a2b792544160eaf7b253fa1a1a647ae15a666aaf4ab2da438a584a9c2aa179697a404a95faa51955ea40aa966aa349576a4a4a866a99c9451a44aa868a9d295d5a335a85aa9a495e1a2c8a70aa918959ea262a7bea8c89458a223a781a8ce95eda1c6a64ba873958aa172a612a8329623a10aa6c9a7cf95d0a0c1a577a7679691a06fa51fa7109561a029a5d6a69f9519a0eaa495a64c95b99fb2a44da60395349f6ba400a6aa94ce9e2ba4b7a573935e9edaa360a5f292d09d36a3eda438912d9d64a23ea4a090649cb9a1bba3718e4d9c96a1b4a34a8ea19ca7a17aa30290479c72a1eea3818fa69c64a1a4a3f6910f03498e898b498248259027fc276b1ca62f87348035442d7e3044356936c53033219f25c4238a24dc8ae61d74932c20089df21cb6a0e52700acd5af3bb1c032e2ae5db400b5293570aeb8b393b43e331baef0b20fb4f930bbad69b29bb3192f06adabb1c9b2fd2c98ac14b1e9b1322b06ac7cb04fb13a29fcaad7afb5b0e8273caa22af3bb0e525a7a985aed0aff52415a90aae5eaf3124e1a8a0adaaaef32247a832ad23ae8e1feb16f9a8b7ab9e9f912f8a2bc9267daaf330012e202b5fadd730182e362b18ae7a307f2dd62a93ae4b30242d142a1caf842f932cea287aafec2d8d2a6a26cbafb82c5e28032232b08b28511d77a328b01ca597a9beaab8a70ea564a97eaa6e997fa413a95eaa49927fa401a953aa33923aa4b0a8d3a9bc91c0a36fa8c3a9499196a348a8a2a93494b8a2bba7f9a82f9530a278a7bea8e4942aa25ba7a7a80d9631a2daa66ea8bc96f9a161a642a80595b4a10aa625a8b394a3a1dea503a879944ea1b7a5e0a74f94aba065a54ba7ec9422a004a58ca68694859f98a419a62694789f56a4c9a59494669f29a4a2a56f93b49f06a461a51d93d99e71a3c4a49592b29dc3a289a4ec91ba9c76a299a49a91299dd6a2e1a4c290539dc4a2bfa4ac929b9c30a220a4fd91649d5fa22ba4888cc208718dd08641873b259a27f327201d3d2f7e346935e62cca2fff34e435d331e520322414231026b015861c311922218899201c629d4428b9aadeaea7b01b332bae20b4e0b4df34caad5cb37eb4c132beade3b20eb4f0303bad4db28fb3122f99ac80b1a2b2042d3bacdcb0ccb1002bcdab4cb01bb15d2904ab8eaf77b09e27e0a9e9ae1bb0112634a941ae7faf5724c5a8b7adf3ae88228ca86cad73ae77219da83dad2dae8120b5a759ac28ad441a002846a24da811a51b31582ee82befac8731432f952cd1ae5131e02e692c54af0031822e392ce0af7130e22d3f2b36b0332f902c872981b0802d692aa326ceb0412b0726f816d0b09ba4fca9aeab91a92aa58ca97aaa789893a4bfa836aa2297a1a4dfa85caaa59879a4dba86daa929861a4b8a85faa549818a453a877a9bd9764a327a856a96e98daa2d4a721a9149898a221a79ba8569724a2d8a663a8e296c5a1a3a64fa874965ea155a625a8f695f3a0faa5c9a78295bba0bfa56fa7309575a077a50ea7c59520a018a59ea66095c39fd2a45ca617952f9f91a409a6c694a49e58a4aea57e94489e10a461a51d93b59d65a3d9a44c91509dc3a258a4d890dd9c35a207a46790849cefa1dda37c8e939ce4a1a4a3518ed59cc4a1caa32689429dbea1f1a3288c9012168b9f034088b6262329bb29be1d4b2f7d34a335f72c3c2fc334a635503055238c26e72599257b13681cf318b520b49ccf1475a0e927fba930ae75b043328bad05b4efb4db345cad2db376b4e03224ad7db27fb39230abace5b115b39d2e1dac4bb142b2c02c7cabb1b07eb13e2bc9aa31b0f9b06a2911aa80af82b0ec27baa9f2ae2cb0722661a933ae54afa324d0a8a0adacaef3226aa835ad64aedb2107a8d9acebadcf2093a78fac7cada11e51a599abdfacd090d82cf426a494dea82f321b30f22ddcae2b322b30e92d2bb0d6311a30952d75b05d31592fdf2cc2b04030f72d9f2b0eb10e2fa62c652997b1702c5028ad2006b2a9a3aea966ab3aaca1a4fea82baaeb95f4a451a9c7aa918c2fa53fa97daaac9290a4b4a8eca9fc9449a472a8b8a98396a7a34ca896a9e29709a3f3a75aa96698cca2d0a738a9ec9896a27fa701a99d98eea102a78fa8ce98afa1b3a661a87d9881a197a650a8e69862a152a624a8999823a1f6a5e4a73f98aba081a53ca7d896fd9ff2a499a61796549f91a428a6df94f89e4fa4d5a58d94149f2da497a55d94fc9e29a476a53793a59efba330a5da92169e79a3dfa46a929a9de1a26da4d991249d8ba23ea49091e79c3ca208a43592ae9c00a2ada3b292599d98a169a360902a112b90d689948b3726c6283a29b51d7c2e61348235ea2c422e63341e35bf2f1d1e3e25bb203e25dd15021ea71ce41ffd985d1ca59d3d27d9a9d0ae71b0b93155ad01b4b0b49d34efac21b342b4b132a1ac41b292b3833060ace6b111b3b32e05ac3cb160b2dd2c27abb3b0a4b1242b88aa2cb002b14e29c6a962af6ab0ac2751a990aeefafac25fda8fdad3faf6824a0a88aad91aebc2247a812ad30ae9b211fa8c0acbdad0420eca791ac8aad6e1eeaa65dac73addf1c87a452abe4ac1997772ff82bf82753ac07333531092fd5b0db32e1300a2f42b137327e30472e60b12c31a02f2d2d03b26130692e3d2c9bb25b2eb22bae28f7b26da4c5a839aa85add5a405a94eaabf9a1ea4d8a832aaa8953ba4cba82caa5d952ba4b2a8efa927970ca482a8a6a9b09617a44da86ea90c9887a31ea851a98f98a3a2c3a708a9e49876a256a7c5a8839840a203a77ba8dd98e4a1d5a652a8949861a189a636a8db9800a127a6f3a779989fa0d7a596a7299853a082a52ca7c39713a034a5caa62f97dc9feba473a6b996b19fa6a422a65a96499f6ba4e4a54695069f2ea497a548946a9ed3a33da5b792459e9aa311a57792f79d31a3baa40191bc9dc8a27ba4458f8d9d78a240a46a90fc9c09a204a40190599d15a25ba46b936901be81de0259801720e6229e24cf112d2e54347b351c2c962d34340c35f02e021efb24de20fb24bb0cbc1920144d20dd99c68e379ff0272aa833ada1aef93171ac51b33cb470348facf0b217b4613261ac33b25db35e3015acb1b1f7b2632e63ab15b123b27e2c8baa79b073b1842a0caa06b0d2b01d2972a926af50b00128f1a87caed3af6e267da8c7adf8aefe242da846ad4daec3230fa803ad1eae8b21d3a7ccacbcadae20a5a780ac68ad8c1e85a740ac24adbd1ba2a6deabbdac2a1b04a3bda964abdc9cac301c2ecd2bc2ad043419326e30f7b10b333131552f8bb25432b330ea2e04b340311b30802d72b3752f882cb0296cb46ba42da977aafaaca5a40fa909aab59c77a4a2a81caa699508a46ea8e5a93f9708a45ea8bea986980da43ea887a9559801a424a872a91899eda31fa865a9cd98f8a2eba73ea9629885a2b1a718a90d9816a220a7a5a85598efa1bba66aa800988ba186a638a86a9723a118a6e6a7b496f1a0ada561a72f96bba06aa509a7c7956ea026a5a9a6709532a0d8a450a61095b69f85a406a6fe93fb9e46a4aca57c936a9e04a464a5c191e19d70a3f9a44791949de4a2afa49a8f6d9d63a243a40c8f399d35a213a4d88c2b9d16a2f8a3868e039dfda1c9a3758c769d94a13ca30a8c658cec8cff94d002a31e5b224c24c1116a2d36344e353e2c832d2c341f3522308021c82425256e25aa821f1cdb880f20bd0ae3215696012720a922ae57b0cb318cacafb3d0b4513405aca4b205b4f831d6abd6b124b31d3043ab51b183b2232e81aaaab0acb1672cdca925b017b19b2a75a986af84b00429d4a8a8ae01b0252797a829ae78af682570a8d3ad11afbc2433a854ad55ae47230ba8d3acd9ad0f2289a773ac5ead01213da722acffac1b1fa8a6a7aba1ac8e1c20a62bab5cacbf1a9ca514ab61ac031cb6a404aa7cabdd98f730a12e562cd0ae50347232dd306bb39d33e2313a3001b4a3320c31ff2e7bb4f12ff92c292a95b429a6fca875aa7eaa37a480a877a97f95f1a494a8bca98b8cdda341a87ba93d92f9a332a84ba91197b0a30da82da9b89668a309a837a90a9928a307a843a9d398cfa2eda751a9639995a2b8a725a9c199f8a124a7aba81299aea1f0a684a8c298aba1d9a66ea88a9872a188a63ea8319823a10aa6f1a79797eca0a8a577a7f696a2a04aa5fda695953ba0eea486a62795a99f8da406a67c95429f3ca48ea51c95a09eaaa318a59f94609e06a3bea457930e9ea5a284a40294cc9d48a23ea49192869d08a2f5a348911d9dbba192a3ee91f99c91a199a3d28fa09de7a114a41589568cfd8c1d912c81ee1d5b216e237811282dbb33e334e62b3a2d32342435fc2dfe220126de266d210508d51476899018be9b369ea8a12d21d6a8c0ae0bb0d530faab27b359b4323410ab33b2b1b396311bab97b1fab2ef2f95aa13b14bb2c32d2caa8db078b1052ca3a90bb0f8b03d2a32a96eaf7eb0cc28a4a889aef1af52275ea80cae47af9c251da892adb3ae8724cba70dad1bae8e232ba7aaaca4ad5f22cda649ac2cad622151a603acd6ac8220e2a553ab6fac631faca5e4aa23ac061e58a576aae7abf41b0da513aa91abeb19f9a466a983aad88ead2cd1282a2306ad2a338231bc2f1db412332531622f56b5882ac127c8218fb272a630a9c9a9a6a3f8a2e6a726a9d68b9da440a867a9920ca0a302a858a9429246a3d5a72da9039530a3a2a707a9bb9642a39fa7eaa81f9968a3e3a717a9d29931a3e8a739a9499a6fa2c1a712a9da991da24ea7d4a8f39913a2ffa69aa8149af6a1cca668a8a59986a160a621a820990aa1dba5b8a72c9898a063a518a7979738a014a598a62f96f79fa9a427a6ec944c9f59a4d3a58b94c99e15a486a539935f9ee0a351a5f7922a9e76a3ffa49a92289e1ea3bba44b920a9ea6a269a4f191f19d74a236a4b890ad9d49a2f2a398901d9de6a1b5a3c089cc9c7fa14ea3d69200009f1ce91d6d1d18285c2e00308b21492c34339734532a8f2c48333034552dc32057253a24af230e829417b7903a1c599bbb9d20a2b72339a883ae12b01e3027abd0b2fbb3cc3374aaf4b140b3603159aa79b1a9b2732ff3a9ebb00cb26e2d9ba943b028b1062c0ba99eaf9fb0f929a7a8f1ae22b0c72855a83aae7eaf7e2706a8a8ade7ae2b2688a71aad3aaef92410a7adacc7ad3e24aba66bac59ad6c2383a618acf1ac55223ca6a0ab8bacdf20cca5f0aa41ac082092a582aaf7abca1e46a515aa6fab991d04a5e3a92dab951cd2a495a9deaa0618e7a496a9e9aa380ef4a4fba827aae9a1ca9ebfa7a1a89aa843a560a925aa2ba30ba461a8d1a9f9978da4d9a8fea96a18e3a2c5a7f9a8801537a3a2a7f3a8530cf6a2a8a7e8a86492c4a268a7dca82795ada294a7fca8e696c9a204a835a93998baa21aa871a9d89897a202a858a950995ca294a70aa97299eaa10aa78ca8799950a173a634a8d898f3a029a60aa80299e3a0dda5baa7aa98c1a073a52ba74b988fa02aa5c8a6349770a0d7a450a6af9622a07ea4dca53496899f31a467a5c995949eb9a301a5b594dc9d11a391a48993859d70a22fa4f192399de7a1baa36e92f19c9aa15da33891d99c7aa11ea31792d89c50a130a31790a39c13a1cba27c8c00800080118b0080d927292f2b30bb25162c9c339934fe2c452c853373341b2e261a3923b21d44211514c319f518971cc995f995119d1f2241a830af52b0e7305cab4eb37ab47234e1aa5fb2d2b3e2317caa97b1d4b2e82f8ca9b4b0e3b1682df8a8dcafd8b06b2b53a8e8ae35b04729eaa734ae94af112867a796adaeae692621a723ad56aea225f1a6f1ac01aefc24d8a68cac9cad452490a617acfeac1d23f0a572ab96ac1022b5a5f6aa58ac442167a584aa1cac8b202fa52faa82abb81f0ba5e7a915ab801ef6a4baa909ab9f1c17a5c5a918aba70e75a5efa900ab2198eda4a2a923ab37991ba391a803aa24965ea2d0a731a9590c62a418a80ea90a19ffa3eda7ffa8ed158ea218a775a8681554a2eea66ba862152aa2bda65aa8681236a2cba66aa8390c74a244a7cba82c92bea2eaa728a9fb9697a211a836a913994ba2d3a714a90f9ac7a16da7efa8c39ad6a146a7d8a8519ad5a1eaa69ea8be9965a14ca639a81099a4a096a5a2a7f59745a014a5e6a65096f59fc6a477a61795b09fa2a41ca6e4943e9f6fa4c1a5af94089f39a46da576947d9ecea31aa51f94e49d0ea3a3a45e928a9d89a266a4e090419d1ba21ca49a90f99cbca1c3a3cb8ec69c62a1e8a23090059cb7a065a2be901a9c58a0c8a14b830080fe8ce686878ed925b52d7e2e15244a2cd333c734d32c212c2a337a34882d64198d22d41d7021358a1f151a928a1c419acb9bdc9f572495a728aeccafd63013ab29b36cb47134a8aa69b2ceb30b3207aa39b17eb2632f52a986b0b3b11a2d97a875af93b00d2bfea751ae9fafb328e8a659ad6dae43275da6dbacb5ad39260ba680ac68ad45255ba69aaca7adfd2454a659ac5bad8b2415a620ac13ad3c24bca589aba0ace0233ba5c6aa30ac3623d6a428aaaeabcd2287a497a9d4aa192250a416a93faa78215ba4e5a80caa291f74a4f9a840aa041857a40ca934aa279c03a4b8a8e3a91a9da7a3b3a8f0a96e9634a335a842a9f515dca26ca7cba8eb17f8a1a9a637a80b1ae8a12ba6f6a70c1bb3a1baa571a7021b68a16ba551a7d118e4a1d4a5e3a75c158ea290a675a84e9571a3bea72aa96d9ca5a368a8c7a9c09db6a283a8bba9499d00a200a820a95b9cf0a14ba7bfa8809b83a1e2a682a8409a2ca155a630a81899d3a0bfa58ea7179890a03da5d7a6839652a0e0a462a600960aa08ba4faa5d994609f06a43da55694969e17a3a2a4a493259e95a267a42b93049e5aa22ea4ea91e19d1aa213a4be917b9defa1d7a396913b9dcaa19ca38290129dafa168a368914c9c65a158a33f905b9c29a1c2a2dd910080bf9b3e9c3911c9290f31a9321629762c14344c359e2c632cde33bd343e2ddb1805237e1c2820488939143392f917d698290e8d9f23246da853ae49b0c630ffaa40b37eb44b340eaae7b135b3ca3110a9a6b0a7b1bb2e75a8d5afcab06b2c0ca8b1aeddaff029fca6d4ad0aaf65271ea6dbacdbade72496a549ac37ad9423f9a4c7aa1bac64247ca683acb7ad4a252fa639ac34adbe2541a57aab88ac5f25afa48daaffabb52480a4afa947ab2a2433a4ffa83aaaf42336a37ba887a9fc2374a35da770a8ee2307a24da62da72d2287a3b6a8c4a9ea1ccaa4f2a961ab159de5a4b2a817aa299938a3b3a7f7a8e30ba0a241a787a8b71663a25ca6fba7221bc8a1bda541a7481a13a1bfa4d2a5901cb9a0e8a30ca5c51cfaa048a467a5c61c5da1f6a412a6b71acca147a619a870935fa218a854a96d9cb3a281a8e6a9719da6a26aa8b4a9fb9c28a2cfa714a9769c0aa26ca7e2a80e9c06a2e0a67ca82d9ab3a1f5a585a7ca98f1a05ca5cea6d69518a0cea471a63c95569f6ea4fca50a94e19e21a49ba58893ca9ee4a33ba54194799e73a3e7a4cb92f99de9a288a45e92749d46a213a4c890019daba1a0a35d90a69c6da18ba33a90699c33a142a3708e699c00a1eaa2eb90019ca5a0c4a25c833f9caca070a2578300809d8aed8704816f28cb2fe2309726202a5e31b13243292425cf2cf92d0828f120b127b029e5a45e210229582a19a88da308ac81acb12183a69caee2af412e01a8c8afe7b0d23094a825b03ab110307aa7eaae28b01c2d3ea6b3ad31af862aaba52ead52ae5d2849a588ac90ad0b2651a5c1abcaac1622e6a32faaf3abf22065a236a990a9e62184a1a1a747a8c71f4aa129a8a2a9e41ab9a159a89da9061749a2b7a8f0a99c13efa32da959aa4d0d36a3a4a8c5a9e98cb6a289a87ea9b80c81a25ba831a9db15d2a1dea7c5a8f01722a172a6aba771175aa0dea546a7eb16a0a02ca6bfa7581610a13aa6a7a792143fa1caa54aa72c16c7a148a6eba70118aba12fa6d2a7af1af2a0e4a4d5a52c1d869f9ca192a2f81d2fa033a078a13e1feea012a264a4481f6ea1cfa550a76017eaa2aca8d8a9759c4fa35ea9daaa349ff8a2a7a8fea9629e78a29ca7eca8989c0ea266a611a8129bfca089a551a715997fa00da5e2a66d9725a09ba458a62095f99f2da493a598943c9fc9a320a54093fc9e71a303a5ac91c89e2aa3e3a476919b9e02a3c1a45791c79ebda283a42291f89d35a22da4708f4d9dbda185a3f38ef19c65a1fea29a8eac9c33a1c1a2708e949c0ba156a20e90219ca7a02aa2f48dd79b68a0faa1148c00800080798700001e23212ae32b26246d27222f74308e28ce27da2e8f30b2291023492a572c492af79fe0a64aa7ac2bc2a202aa78ab8a2ea7a28aab30ac5b2e3ba452ac84ad252d30a5deac60ae552cb6a546ad68aef02a3ca5ddace8ad5429eea46fac41adbb2798a4d8abc8ac0c2540a437ab71ace62249a4d8aa33acd31f05a110a8bea8c717f299eb9fa5a02e957d9c05a181a1ef940ba07ca4c9a48a94e4a122a6d0a6390cd0a152a670a71c954da2b9a6fba7058c78a2cca61ca8b38b53a257a6c4a70e8b35a1c0a52fa72f8a969f74a4aca5b6883d9e59a37ba4c687c29f25a4aaa5898849a0c3a48da66589d2a1fba43ca6a409e8a124a554a648137ca102a519a6f01767a1fea40aa69919939fd8a13ba3871bbf9c4797d7960720fc984e1dc81d532232a0e2a30fa56f19d5a4dcaa7bacdda191a3d3a9a5ab729fdaa1c7a701a9ff9b3fa11fa60ca8be99f7a073a53aa7189887a009a5e7a6ad9648a087a408a63495b99f2ca47ea50394199fbca334a57193a09e43a3f0a4b7911f9ee9a2b4a46191bf9d8ea282a41a918e9d21a24ba4d390559dc7a10ca48c901c9d69a1a4a3b28edb9c27a128a3738e9e9c0aa1f2a2818c799ce5a0afa24f89589cd1a06ba25b8ce79b8ca020a2288cb69b5aa0bda138830080fb8e1e8d37135025602c6c2d0d252f26602dd62eec272e25912c9f2dd9296d1dd8248025452b889e78a618a89c286818231f62218625501cb921222478294f9ed9a627a85c2a66a266aad5abad2913a49eabccacd5280aa492aba6ac8027f1a322ab63ac1d266ea3e3aa19acee24c2a3a9aa18acf82301a483aa13ac77222ba399a99daa5b201ca1b5a7aaa8681cac9f9aa5bfa67014f49f6fa57da67d9160a074a58ea66e96d6a0b8a5e5a6408b2ca1dda509a7268b6ea1f2a534a7fb0a94a103a67da7d08a9ba1f7a546a7878a52a1a3a517a7f609e9a07ea5e2a6898963a0d4a41ea6de8862a0c4a4f4a5ce8879a0c5a4eea5cf88d2a01da595a6d988f4a031a5a7a6b688f7a01ca5dda6f58e0da148a5e0a6aa888fa192a449a6990e729a9b9951948420019995238225402165a772add2aec3a5c3a08fa5f9a73799baa0aea4cba68f9519a05ca422a6629430a05ea41ba68791ee9f3da4cba55d9108a010a486a5578f469f9ca317a5ce8eff9e2da3c3a47e907a9eaea275a4f88d2c9e34a23ea48c8db59ddda10ba43e8d5e9da7a1dfa30d8d069d78a1a0a3e38cd39c44a16ba3a6899a9c0ba10ea378897d9cdba0b5a244894a9caea07ca26283539c83a003a24383229c5aa0d1a1c688fa9b43a0a4a1ad0800804987cd04eb0e5d249e2a1f2c37241d24f82a692c0b26f4212129742a0928c91a5e217323bc281189809bca9a7c28ca19501dc61e9c272e1a961c351fc527399500a11da18027ce9de9a5f4a6f62615a1b7a8aca9542610a281a9ccaa902521a2a1a9f9aa862464a280a9ccaa7923a8a265a9bcaaa421b2a26ba9a5aa6820eea1c2a8d0a91e1f40a101a8f4a8931cdda0f1a648a8391983a05ca6caa76b1677a0fba563a75e119ca0d7a54da7fd0aa4a0bea517a7bf8aa8a09da5f8a6798a9da086a5d4a6268a89a065a5c4a6cd0977a043a58ca6790961a019a559a624893ba0e5a416a6db8823a0b1a4dea5a88826a08ca4c6a583883ba080a4b1a566887fa07ca4b8a5628898a08ea4c3a5528892a09ba4e5a54d8899a0a0a4f7a5648ea6a1a1a4f7a51c91f998b09c0a9f188db68b9f920496d089f29c78a0a5a12691519f47a3c3a40794909e49a3c7a4c593a29e23a3b5a49d93af9eeea294a4fa91b29edda287a47f90bf9ed1a27da46a90c79eb8a284a44c90c49eaca277a4088ea69e96a275a4e38d569e4ea262a4fb8f2b9e11a254a4ad8ff69deda14fa45b8d729d8fa13fa41e8fbd9c05a1a9a36c8e339c96a067a23d8c009c6ca0eea1e888fa9b6da0aba1bb8dc59b75a0cda14283839b63a08ea18d8d0000ab19851a228221227c2881298e218e217628d9296a246c20342635286425d81c3823d3243c269919ed1d4f207f26ae15548fa01011262b093f9aee9b3e25259797a048a1b3246b9b2fa40aa52f24909dbfa505a75023899f26a764a8a522b2a00aa821a983210da13da82fa9d1204fa153a814a932203ca12aa8f1a88a1e02a103a8cba87f1dc3a06aa78da8f21a97a0bfa623a8741852a02ba67ea79c144fa0b1a5f8a634114da076a59fa6a80a88a042a562a6690abea018a555a6358ae3a01ba546a6ff89e3a001a533a6c589cea0f7a437a6878982a0baa412a6c18f38a071a4aaa5c788f49f3ea45ea57d88529fe3a319a52c88e89e9fa3e5a408884f9fd6a315a5058e9c9f15a43ba5148ed79f51a481a5248e0fa079a4b1a5178e0da08da4d1a5068e0fa032a487a5f28fd99bea9f62a1de8b1198c19d7c9f18882f9ccba013a2998df69df5a10fa48a909c9e1aa225a4be91b09e58a24fa4d1917e9e6ba258a4ac91519e64a24ea483913f9e24a22ea412900b9edba1dda37b8dfa9d96a19ca33a8dc59d60a141a30b8fa39d30a1eda2cb8e529d08a1d0a2b58cf39cb4a072a2678c979c70a008a2278c619c3ea0baa1f08b0c9c17a0aca19888179c23a097a15b8df89b30a0b8a1a88b879aa19f35a10e8d00001a227524a8181a2d7e305d3198243d308e34e53559276c2d3034233360292fa1ef9875a5f80e00800080008000000080dc83df91de81dca13da5bca6869b15ac33b0bcb0692fb7aedcb31bb4df31edadf4b1d1b23c2e61ac83b037b1b12b1bacc5af8fb0a62888aaf8add3aede2479a86cac3aada12341a493ad33af0d204a2452a743aa94155629101c52a2109c192c0a253fa40aa56b2a67216ea3caa50e2aa1218b9e32a7f32add2458150ea88729b124f51432a79628a5222b1b57a6fa277421cb9a92a787279221a194cca80829ca244820e8a96f289524c61de0aa4425d01f349a00aaa31b9792579f9ea747a0eaa1bda229a0fba26aa857a95317b0a1daa5b9a73a143a9fd3a45ca6238ef99ee3a46ca61c91979f91a4e1a5af92689f62a4ada52094ef9e47a482a5db94079f34a472a5c694d89e17a435a59594a69ed0a3f1a42d95409e55a3b9a4cb940d9e0ca382a48d94d09dbca24da4f5945f9d56a228a4aa940e9d14a213a46c94b09ce0a1fea339947f9ca3a1cfa39794409c79a195a36794f99b4ca154a36e93ff9b39a117a33f93019c1ba1e5a21192ff9be6a097a2d2910e9ccfa056a2a791ee9baca0f7a1a6909b9b7ca0a8a17690769b70a081a137913b9a1fa05da11990259c39a03fa1598d0000e31cb91e9e196e304834fe344c231b33ec3610389628f3312b365536b324cb9da09c379fb494000000000000000000000000000000009497ec9c7c0f1c2169afd1b205b47c336db2a6b634b78d3516b0e4b37cb4553166afb9b2bcb3d32d87adf3b0beb1d229faab7aae3baf9425b8a901ac73acd42348a85bad80ae4623c39b06ac51ad7f215d29e91660a42f1d4d2bcf1716a8d5a21d2be4a4fcaaaba61a2ce91546a705a7cf2b1921e1a4eba60a2c55246815ffa66b2b3b277a228ba69c2a42259815a9a64328531521a3fda46d294a251a1cc2a8212936250820aca995264c216d1454aab61c709fbaa262a8b8a3fea5c8a60497f2a477a96daa392039a6cfa8e2a9361d66a314a8f8a8591867a2f7a666a8ba1484a144a609a8dc8860a1b6a523a7c09315a16aa5f9a6ba948fa009a584a66f9501a0a5a4e6a5da95789f4ba484a56995039f21a45da52595ad9ef0a336a5e294639ea6a310a5a7940c9e57a3eda48e93c99d2fa3c6a45294ce9df8a295a42494bf9dcea271a49d949f9d75a248a46194439d38a220a42b94f29cf7a109a4e893569ca0a1a3a37593249c3aa1faa20192d09bffa0b8a2cf91ca9bb7a05ea28a91da9b8aa010a29190ff9b85a0d9a15f91d59b42a095a11e91c49a7f9f04a1e8920080028c3b94ec018b310e35d53507250134ad376b38e6289233da36a937492e639d5d9dee9e261c0080008000800000008000800080000016a8c5a96baa2728b5b19bb480b5413458b3c5b6c5b7ba3506b19cb42eb5ca3116b04fb334b46e2e5fae99b183b2572be9ac2db0cdb06528ddabf4aef5afd725e8a933ae6daf7923e7a5b0ac26ae2222812558a76caa2f16c02afba16aaafba1552c019dd5a817a7c02cc61fa6a778a85e2b1e1f0aa479a72a2c8d25929c08a7b02b9a24239f6da8572a4222d6a00aa91929bb1ea3a038a9502a2d25f61b6bab962986255920a3ab00281223ec143babf4221f9ba4a315aa2da4d3a8e4a9bca039a53ea908aaa01b5aa6bfa8e3a9a01afea4dfa8d7a99d1674a498a897a9591410a394a7dca8bd09d4a195a61ea8648f67a142a606a80d942ca124a6efa73f96c4a0caa55ba7e2966ca057a5dca6599622a0f3a468a6e2958f9f98a4f6a56695f49e50a499a5d9959f9e14a456a58795669edda316a545952b9e78a3d9a40295f59d15a39ea4c094c29daca25ea47994869d6fa227a44494479d1ea2f5a30e94f69cd8a193a3c0938b9c6aa11da33992239c17a195a2d991d49bc6a03ba28d918a9bb4a00ea276919f9bcba0faa19291d49a96a013a22692439b84a0cca132920000e78b010cd40c8e312a35f1351425a63324374738cb28f132d9369237052b6918b821c619a520000000000000000000800000008000001ba978a95bac782756b187b488b58734d7b262b689b7af3521b1c0b450b524321fb090b34bb4a82ee6ae30b235b3912b5aadd2b082b16c286dac06b0b2b04e2686ab73af3bb0142461a949ae65af7421b69ce7aaf0ac231573291da415aabba2a32cfc1f19a796a7212d0b234aa5e4a84d2d842546a111aa2f2d0028971570aaf22c4428d91e56abb02c3c28ae209eab412c3f28a020fcab4c2b1b279820f4abc1296224391522ac3428b9206c9e22ac8124d7a1e2a523ac85a3b6a830aaaca767a5e8a919abd9141fa575a99faa721a9ba4f0a81eaaf4162fa4b1a8eda95f0b99a301a8f8a8a990eda2d6a7f4a88293e6a11fa779a811967fa17da617a8ad969aa110a6c2a74a975ba19ea532a7ad96cea045a5cda632964ba0f6a463a6c495ea9fbda416a67295a09f84a4d9a53195499f6ca4aca5cc95f99e46a45da58c95929e0ea42ea5f595449eb3a3f0a4a995fe9d4ea3caa45f95b69de6a288a41295419d79a243a42794f09ce8a1d0a3a492959c93a129a345924a9c64a1f4a21092199c54a1c9a220910e9c31a193a2f791829be7a059a2c391759b55a07ea1459100003013eb15a28a1a2ed930a031851ca032bd36d537da279f3359372a383a2164206f230723a01c00000000000000000000000000000000221e7a21d3207028a6b03eb49fb4083416b207b6c1b63b35e9b0b4b450b57b319daf3ab31ab4552eacae3cb24cb3a12b56ad18b1f6b1c82887ac51b010b1c7268aab82af64b0f5246daaa9aec2af0b221ca884ad13afb41a4c22f0a9c1ac7ea07c2c671f64a708a79c2dc725ada196a9e82de1278e9c91aaa82d3a28f99589ab7a2d2c284d1c43ac0f2d1928041f5dac9d2c7228ed1eb6ac032c7327de1ee1ac672a4a25711506ad1929f620be9e0dad3d26409c08a50cad779e01a871a954aad5a572a989aa7a9cd1a641a96eaa848c64a550a970aa42927ca4fea854aad7942ca48fa89ca90b9612a303a8f3a8c19677a242a7cca8789734a27da645a89a96ada161a60ba895975ea12aa6d6a73e9741a1c0a543a7ae96e3a036a5aca60e9697a0e4a458a67c9652a0afa417a624960ea079a4dba5de95979f4ea4a3a59695e39e1fa46da54a955e9ef5a341a50d95c89d99a321a5d394629d34a3e1a493941d9dc1a2a8a46f93f39c54a23ca4f692d69c0da2a6a3a992979ca4a117a346922d9c4aa1aea21691259c32a17da2f8918d9bf0a098a29f92349c06a1b5a2fe8f0000e4097210ee83182eae31b332ef1e073240364a375d2852327f367137332d761cf51ed71fb81e00800080008000000080628ce789f61303a2d9a43fa5ca284caef6b1aab227348ab19fb58cb6e134a3b07fb436b55531f5ae02b307b4232e24ae1cb22cb3bf2b38ad24b10db203297dac8fb05eb1ee2787abf8afbdb05c25b9aa0aaf2bb09c23e3a97eaee4af5e2012a5b7ac1dae2294f629a2a19aa9b2a4012ec5279e9cbca9632e1429a91c56ab642e7529821f3cac2d2e7129332199accf2d6d29a222f5ac622d1229a2225aadc52cb12820218aadcf2b1627591cb0adc5291e244c9ce5ad1c28ee958ea406ae85145ca6c8a8ecac35a620aa9cabcfa042a56da9d3aaaa0cd5a442a977aa3b8cc0a432a988aa1a95a9a3aba80faa569606a43da859a94f9790a3d4a7f6a81498c4a22ca7aba86297bba195a631a89f9682a148a603a8629773a134a6fba7089639a1fea5cda7b495d2a094a55ca7359678a016a5c0a6a8950da0b2a458a63995989f6fa4faa5ee94f39e3da4b0a56195699e0ba45ba52395249ebea31ba5dd94c89d4fa3e5a49894b59deda29fa48b93289d7ca270a40f93da9c0ea2f9a39591899c9ba114a32a91349c51a1eaa20d903c9c4da1b1a2f090c09b0ea1d8a2b48f399c0da18ba25e8c0000830a771057840f2d4d3168327a1ebc3047352e364f28c9316d362b374c2d441f3a24b5223e1f000000000000000000007710cd05211520a104a3aaa48129d6adc6b17cb2ca3352b1a2b5b8b6963422b044b4f7b4d2306caec8b2f6b39f2decad11b236b3732bf1ac22b10ab22c2947ac69b03ab1ef264fabbaaf9bb032259aaa27af39b0992338aa93aebcaf3020f8a8ddadf1ae42191aa1efab3dad8ba1a92cc7201da69ba81b2fff290a23efab5c2fc22a0b25bbac0d2f212bbb254cade02e272bad25b4ad7b2ed02aad25f0ade32d102aa8255baeda2ce228b9228bae332bdf25ea15c0ae0e29d11f539f22af552385a485a7b1ae1fa64aaaa8ab01a5cba569a9b9aa5f9995a437a96faac99857a403a94aaa8c9935a49fa8b5a90d99dea331a836a97998e5a307a810a9049990a39ba7dda8669993a22fa787a8a699c8a1cba64ea8489994a161a617a8e7983fa1f2a57da7fe9802a192a526a72498b3a03aa5c0a69a976fa0c1a441a60a9625a07da4e2a5a395a99f47a4a5a59c94a59e05a465a555940b9ec8a321a5ca94839d67a3f5a48e943d9de5a27aa43e94ed9c43a213a4ca93b39cffa1d0a37593869cd4a185a32c93779cafa157a310928c9c9ba120a3eb911f9c5da117a3b2908f9c32a1a3a22c910000bd0ab6107e84c72c3a31483245158a304b35553609243631de35f036892d311cd0200620991f00000000000000000000000000000000d99c449831a05c277dad65b179b26833c1b048b559b69a34c8af2eb4e4b4b93016aec8b2fcb3512d60add7b1f4b2702a89ace4b0cbb14b2800ac64b02eb1ad2626abeaafaab086246caa3baf49b04b23c1a97daeb4afc42128a9c9addeae6e2005a844ad90aed1180d2539a887abdda42b2fea2aaf249fab2c30922cc72828ad16307b2cdf28e0ade62f7b2c782846ae872f1e2c7a28baaeca2ef52b1a283eaff32dc72aa3267faf9a2cbd280d23baaf962a872420162bb02c27bb9f6ba502b051a620aa9eabcea644a5c1a9daaafc9a6ea40ba939aabf9855a4e6a820aa8d9848a4aea8b2a91d9922a455a887a976999aa321a847a92599daa2b8a708a9b29868a26ba7c6a816992ba21ba778a8d198eea1bfa637a8129980a14aa6f1a7ac9808a1efa5a2a76998b8a0aba53fa79b9879a05ea505a7ba9753a01aa5c0a6449707a0e1a486a6af979f9fa0a43fa67396099f54a4f8a50a96889e16a4a1a5a595c49d80a340a59294fd9c6ca288a4d992b29cdca1d1a34a91589c93a16ea3fb906e9c7ba162a302908d9c8aa145a3da904b9c77a1c4a3ce8db79c77a1a5a3e98b0000360be710cf84972c66316532ea1b78308b35a936a22791308235a836482d6e1a3f20601eb01b000000000000000000000000008000003a9be494269e6c2646ac63b023b1b83231b007b514b641340daf07b4d4b4b130c7ade4b205b4732d24adebb124b3ca2a62ac02b1ecb131280aac6fb057b1dd252aabf5afbab0c32337aa47af56b0352192a97daeb9afb91fe9a80bae6eaf131fbaa88bada7ae211d4fa6b5acd4ad759b432a4f144aa772a85630bd2c3f2952adac30b52d9e2abeae84308a2d422a36af64302f2d4d2abaaf1b300d2df22907b0182f752cbb284bb0b92d542a51256bb02a2c1f28a421d3b08728c01607a3e8b080a5f5a957ab45a912a536a93baa6f9cd6a40ca955aac09869a4e6a81eaa8d9826a4a5a8b0a9439812a47ea8b9a9e99896a345a890a98e98b4a29fa7e4a8bf9844a278a7cfa83e9931a246a7b3a8fd983aa2b4a657a8189900a244a627a8a898bda10fa613a8689893a1e5a50aa87c9715a1ada5d7a722976da040a511a7879601a0cda439a6e995879f73a4eba53596a99f4aa4a5a5ec95cd9f22a48fa5b495e79fe5a348a57395c89e2da3a2a45494c39da8a257a4f393359c85a2cda4b693e09cdea21aa50594769dcba2d4a4cd93ed9c66a268a43092939d77a26da4618e0000c80ad6108504702c39313232a81b73307935a6364a251a30133535360f2cf417181e401c341c000000000000000000000000000000003f9c509c53a0c32633acd6b074b15e324aafdfb4ccb5db33b9ae11b4d4b4a93049ada5b2d5b3762db7acc6b10fb3e02a1bace2b0ecb16428b1ab5bb038b1ac25e6aad3afaab06423c9a904af3cb0f0204ca966aeb1af7e1fd2a8f5ad2daf6c1d93a89aadb1ae681b34a830ad0eae951162a4b0abfdac9a9ff42c1426499b39aa0d31822ed42bb7ae4131e42e512c1ab0f4307d2e1b2c58b0b5302e2edd2ba9b02030942d9f2af4b08b2e372c82282fb1302dad299c2464b1862a0f24009d94b113a5b0a93cab54a907a511a95faa829ae6a4b3a824aabd9aaca4cda832aa9d9a54a4c7a83baa699a05a48aa838aaf099bda349a875a94f9a5ea335a845a90c9ae7a2eca707a98f99d7a21ca78da8969958a2dfa66fa83899efa1c2a656a862988fa16aa62aa8919830a101a6dda73b98d1a0b3a567a7f3976fa05fa5f5a67e970da00aa593a6f696979fc8a439a69a96fc9e8ea4eaa5f596789e46a4a8a5d895139e02a44ba57b958c9d37a3bba45a94209d94a23ca4ef93c59c0fa2c6a34592779ccba1a5a31291699cc5a180a3da91759c9ca19aa39591989cc8a1aca40c94000058164319a3095028c22d242f901c7e2f3a3560362c26cf2f043524360f29161af320321e2c1a00000000000000000000000000000000319c630edca0172504ac43b0c9b10832d1ae86b484b5043402aeb5b3b3b47d30baac4cb26db3412d4cac7cb18fb2882a67abb3b096b1de27ddaa34b008b18f2533aabdafa8b05023c1a9ffae35b0ed2073a94bae71af401fe7a8abadd5ae291d6fa869ad70ae091b1ba806adffad891a7ba7bfac99addc10c5a14aaa3cac6aa1cb2e732a6e2553acf931fa2f4c2d51b0d331f42f1a2de6b08531d92f362d36b10431c12e942c82b10d306a2d982af5b19b2e4d2cc12893b2372c5a25531dc0b237a59da8bba996a917a52ea90caafc9b28a526a976aabd9795a5caa871aa9198bea4b2a8f2a967991ca469a87ea9eb996ba32ca847a9619aeea2e6a731a9ac9aa7a2bca72da90b9b83a26da7dfa89a9ae9a1e5a685a89f9a9fa1aba652a8429a90a18ba654a8959a6da155a624a83b9a3ea1fea5dda7c699b6a078a52ca7c398f79fd3a46ea68697449f68a4fca5df96159f2ca4c1a5c395009f17a488a59795bc9e12a46ba58295519ecca31ca59c94f49d51a3cea45394959de3a26ba408942b9d8fa237a4ad93da9c40a208a41b948a9cf5a1a7a39c93a49d8ba1eea2ea9100006115cf189d0913275f2db32e341e1d2f483599363228fc2ec834b835522aa312ef1f1418061c000000000000000000000000000000002c9acf94ae9f1c25a5aa1bb008b1a7314fae83b478b5ab3397ad9bb39bb4693065ac44b290b3432d1fac67b194b2a92a16aba2b08fb163287aaa25b0f3b0e925d2a967af6eb06e245aa9beae15b05f22f1a813ae57af4720ada893ad9bae6c1e35a829ad3baea01ceca7c2acb3ad311a66a77eac4fadd719a4a634acedac8f16f5a13faa1aac84a0e92f682cc82867ad9f32c430812e5bb16f329c304a2ef6b1df312e30812d6db2fa30052fa52c15b34c30012ea82b79b33e2c532672205cb31da62aa98caae0a86ea41ca93eaa609a36a4eda827aa08992fa4cea818aaea9910a4a5a8d3a9939adea36aa88ca9049bdaa344a863a99b9a59a31ba837a9f09ac6a2aea7eba8139b5ea24ba7ada8409b15a223a77fa8da9acfa1e1a663a8139b7aa19ca63ca8939afba031a6d5a7079a96a0c7a56ea7919948a070a504a72f9912a021a5a8a66098f89fe6a454a62298cd9fa3a40da6d4978e9f67a4b5a5a996079f1ca46ba590957d9eb8a30fa59094279e80a3e5a46494ba9d0ea3a0a428937b9dbea27da4bb916f9d6aa23ea472929e9cc2a1c1a3a091799df7a126a4699300006b142c18da075e255e2c7d2dee18bd2e083562361b283a2e6f3475356e295913951fa618d01a00000000000000000000810061004c01be99739c9b9f5f26cea92bb0a6b07c31d0ad48b4efb43f3351ad91b39eb4433013ac07b26bb3242d8bab2cb166b2b02a6faa73b06ab17c28e8a90ab0e3b0442679a952af60b0d724eda885aeeaaf172379a8ccadeeae912139a84dad67ae771f12a81dad24aee31df8a7d3ace2ad461a9ea786ac61ad101731a735acf7ac609033a6e5abdbac1c103da2baa9a9ab029f702e782b5c2690adde320131462f3db27032d730bc2e4ab3f2317e304e2efbb3e130da2e9e2c66b4152a4c2002a080b286a56ea967aacaa474a3c0a8f7a911993aa492a8d1a9f6991ca474a8bba9b999dea351a89da9759aeba333a882a9269bdea337a86ea9cd9bbda329a86ca94d9bc9a2fda73ba9aa9aa7a2b2a709a9eb9a38a235a7b6a8559a02a2d1a672a8db99a0a18aa63da8609924a110a6e8a7e098f3a0b9a57ca78198a7a059a501a72b9865a008a592a6c4971da0c0a42da67e96929f6ea4d8a50e96b89e2ba483a5fa94179eb8a31ca59c94bb9d1aa3cea45993b69dbfa287a4e891c49d6aa244a49091669d32a215a46590429d19a2fba32f912d9d04a2f1a30591729d9ea188a349910080c099bc9d0615ba24b82bc72c691fbb2d0b352836cd250c2e6d347935f529f118681f461e87190000000000000000000087065310a1044b16f81dd21c1226d7a91db0c3b0443100ad1ab4d9b4f03281ace6b23eb411303dabb2b1efb2f52cf0aae7b008b2572afba958b040b161288ea9f0afc0b028260da9f2ae29b02824a8a859aeacafcc2258a8e4ad1dafa8213da857ad71aea31f0aa8eaacedadc11d8ca76eac69ad1a1c38a71aac00ad821693a6acabb1ac0f1030a649ab74acd68f53a65cab6bac6b0f07a575aa02ac4a9a6129aa21d6a14cabb431a42f582d14b29b3255300b2e5db41430ce2ca72919b405a47ca7e7a884ae87a4afa855aa13a03aa4d8a803aabd958ea47ca8a0a9029925a459a887a9b698d7a337a849a97e9a87a312a825a9229b77a30fa832a9b89b4fa30ea853a9229c1ca3f1a743a9ca9bb3a281a7f5a8d49be8a10ea794a8039bc6a1efa678a8a89aa3a1caa663a84d9a6ea171a62ca8c99936a1e5a5d0a7b198e6a08ea553a754988ba02fa5dca629971fa0cda458a6a0967f9f77a4eda5e496fb9e1da47aa55896939e87a306a5cf95359ee2a2aca44f95e79d9ba27aa40c95789d40a232a44594569dfda104a43893319db8a19aa3d193879c6da196a38f91789dcea162a4ab900080698c63916e80c9246b2cae2d361d7c2db334b4359026c12d52348f35eb298f191020af1fad1800000000000000000080c504d580a508bd8f7f8e118fc925f7a891af94b02831f9ac0db4dbb4e9322aac9bb20db4ca2f79aa54b199b2612c61aa9ab0b8b1c3299ba917b0fdb0302813a972af8eb0dd25b9a89aaefbaf6f2463a81aae6fafdb2113a894adc2aeb820a9a719ad34ae4b1f0ca7b5aca4ad831da9a649ac37adee1b33a600acc9ac681bcfa550ab62acea1891a5d8aa27ac861561a57eaaf2abfb0e35a54aaae0abe20e57a5f6a9faaab59995a13fa852a9aea342161aa5f7a7d8a92d9e17a634a8e3a84aa6dfa8d3a97ca18ba1dba7ada9d891e3a366a8aaa9a195d9a31ba866a96d95d1a316a860a9719754a300a82ea98b9949a3d7a720a9529a59a302a825a9f59b70a30ea83aa9319cffa2d3a70fa9ad9b5ba2a7a7f3a8fc9b01a250a7dca8f69bfea1d8a689a8bb9be7a191a658a82d9b62a129a619a8979abba0c6a5a9a7909967a04ba504a79b9809a0e9a47ea6a897c59f93a40aa65196379f4ea4baa531959c9e0fa474a5e594289ec5a341a5af94249e47a3f3a46394239ef5a2ada43294239e89a257a4e6923a9e5fa224a4b191f89d30a2cca39a92379dc1a182a3b88cb19c61a10ea3a99300806292cd9a98036a27b22e81305820db2b873399342a28c62cbc33bc34d02b1e19fc1ff81e0f1c00000000cd0200000000b60e6e0cb80dd898ab9c909fba21d7a8daafa1b00e3098accfb393b4633280ab5fb2eab3452ffda90eb164b2772cdfa977b095b1dd2922a9e0afc3b09227b2a822af4fb011266aa851aeaaafb92414a8bbadf6ae332382a73bad36ae30210fa7b7accaad1f20a4a670ac75ad901e5ba610acf7acea1c2ca698ab8bac251bc4a5faaa46acc5187ca58aaa06ac751529a52aaa8dabdc0efea4f9a92eaba50eb7a49ea9d7aab094ada455a9abaaf08dbfa419a9b4aa948d1aa498a853aa089b6da37fa8d1a944992ba477a8c6a9349895a323a845a99a8c22a308a81ba9bb9271a3f7a7fea88b9521a39ca7eba8c498ffa29da7d8a8a199d0a2bba7f6a8559a0ca30fa85aa9e99adda21ca865a94f9b98a2fea744a98b9b26a26da7e3a84c9bbda1cea662a8139b41a156a61ba85f9a02a11ca6eda7779ad1a0c3a598a7089a84a050a5fda611994ba007a59da6be982ca0b7a434a67398c29f6ba4c2a589970d9f23a455a562963c9e7fa3e4a4d895b99dc5a260a4b994639d3aa2f2a363942c9dc8a16ea34493d29c79a120a31692bd9c72a1dfa2fd92959c31a1e8a2f0909b9c1ca1b5a2df912496008073970080d2207825e42535173c2ca333be347725df2c34341835ce28060e5f1c4115361500006002ab0a39016a010000000000006499129d8f9eee221aa92ab0deb00331a0ac4ab432b53133d2abc8b222b4eb2fa1a906b153b2752c3ca938b050b10d2954a83aaf63b06626d6a776aeb9afd5247ba7abade3ae7d231da732ad61ae4022cfa6dfac00ae7b2088a67bac82adfb1e28a60baceaac261dc0a549ab6dac5a1b8ea5ceaa35acfe185aa572aa04acad1519a51faa90ab300f07a5eca947abd48eeba4cda919ab1b98e2a4c7a902ab3c9b9aa48da9b1aa2d9c9da44fa970aa6d9a0ba4b4a8bfa96d9897a332a818a94293b5a315a8daa8cb8c3fa3a5a7c4a8fd129aa22fa772a8b21264a2d7a659a8568c20a2d1a64ea85a9242a204a786a858978ba299a7f9a89f99d2a201a834a93a9b90a20ea827a9239cf4a1c0a703a96e9cb3a174a7f8a8699ce6a146a7e9a81c9cc0a1efa68fa87f9b55a119a614a8f099b3a058a541a7b49833a0f8a4a9a6d39705a0bda467a66397bd9f9ba40ea65c96559f6ca4cda51b96059f32a464a5ca958a9ec2a307a55b95e99d02a395a450949f9d88a255a40f94639d0aa210a49492139da9a19fa33b92b99c31a1c0a2cf92af9b88a020a2f7934b9c4fa08ea1428f008000807c9000007626c02e1f304120d22ca634c5357d259d2c00340a35ed27980e2b1d3e15a11600800000ee81000060800000fc800000d4999b9c9e9ee822b0a8a5afc9b0a13073ac1ab404b5313366ab88b20bb4c12f74a919b15ab28e2c0ba905b018b1fa282ea8a1aee7af8d25f9a6a2adacae722346a6e2acb9adee20f7a58bac6cadc62079a6adacb2adb11f7fa663ac63adb11d1ea6f0abe0ac271ca4a555ab86ac071d46a5beaa1aacb71ceba41caa83ab711ca7a4aaa9d5aaac189aa46aa983aa258f99a460a9a6aa989c83a42fa968aa5d9f26a400a917aaba9ee8a3a2a8aba9cd996da345a850a9d68cf6a209a801a91318c8a277a7caa8f61788a2e7a658a805191fa22da6eea7ff18a3a1ada54da7ec187ca1a5a552a77115f9a123a61ba8518cc5a21fa7cba8ec9aafa32ea87fa9f69db6a389a8dda9939e96a269a89aa9479ec8a1c4a7f9a8359ddba1f9a693a8859c64a18aa64fa8a39b19a11aa60ca8f199d3a09da559a7f09878a030a5c4a6169830a0d6a45fa69e97b59f90a4fda55d96099f0ba442a5b395349e0ca393a4f794c89d70a243a40b94a49d24a207a4cc93a09de7a1d8a39493939dc8a198a36e92879dafa175a364924f9d9ba14ba34e92819c43a14ea32490479c0ba1ada29d92008028980d9ac805882adb3101333523e92c9d34c535fb24c02c353458354525de0c7018ab139a1000800000008000000000000018010000b9913619e19724227ca85eafa9b0333057ace3b3d2b41233ccaa39b2c6b3772fcaa88bb0a6b1102c68a839af91b09c289aa752ae69af5a2546a62ead52aeeb215ca595acadad671f6ba4d4a916ab051d39a6acacc4ad5b1896a563ab68aca41ac7a46caa9fab2020b6a402aa15abee215ba484a99caaf3221ea4e8a813aa572270a3baa8c1a9ce1f88a37fa89ea9da9603a416a920aaa8a03ea431a97baa62a0e6a3a9a8a1a9c89a4da3dba7f8a83a8c59a2e5a681a8f81454a285a62da8d316fca1aba534a7561a7da1fba463a68e1a00a17ba4baa5ca1bd1a042a46ea5301c1ca1aba4f1a5bc1a7ba196a521a78e134ea253a7c2a8029cc5a265a899a9789e59a26aa8b4a9509e31a225a85fa9b09df7a18fa7eba84c9d1ca233a7b9a8e19c02a2b1a64da8bb9b92a1c1a557a79a99eda040a5d8a62e981da0cba469a6d3967b9f74a411a68995e59e25a499a52895d69ec9a33ea5e494829e65a3e7a4a594249eeea28fa48c936b9d5ea22fa40293fa9cb5a1a3a35992c49c4ca167a3f4912e9c25a150a3ea913f9ceaa0b8a29792a19b79a07ca25d8ff79b64a037a2f08b00803b8fe28ac683f82833304431a1211f2b4c32eb33b421211dfa25762750990e1dab248227aca2a7212e298d2b94a51514bb1be81cd5a42ea0afa8cfa8d11ad1a401ad69ad512ccca98ab101b38e3011a981b074b1432d8ba7bdae14b0dd2916a67badd2ae4a26c0a5d7ace1adbe2355a547ac27ad7b1f19a4dbaa39ac5e1c78a175a824a94915479de6a2e9a37994329e7fa326a53b9cff9d89a366a4c79c4d9f38a54da60d9c8ba226a8bda8469c2ba215a8b4a8979aa2a1c5a791a8259858a13aa746a8ac8cbea096a612a88412dca0caa62ca85412eaa0bea650a8ba116ca1f6a66da89e1105a21ea765a8d71118a2b2a61da8a914efa1a2a60ca8271852a1bda5fea6e21b70a021a4efa42a1efc9ecaa0c9a1d81e39a150a191a2681f4da269a4fea5ae1c43a25aa7cda8159902a327a999aa0ea0d8a23ea999aa9ea069a245a874a9b39f15a200a773a8799d9aa106a6a8a7209cbfa062a527a75b9a49a0fea4e4a6669926a09da447a67f97f49f1ba46ba5e9953f9fb4a30da5e494e79e60a3dca4af94de9e24a3d9a48894c69e08a3a3a477943b9f98a256a456932d9e21a202a4d292259d99a158a35391079d55a1dfa21092ba9c21a196a2fd90af9cf8a03da2c7914c9caba021a2998f149c6ea0dfa17490958c1a920490118c0223872708275716b327272f70303d1cbe28dd2f2131f320c4240f2c832d2522bb96379e2799a924a3a12fa9aeaa2f2945a270aa6bab0d2b1fa474ac90ad422c2ca55fadd0ae072bcca5b7adf6ae1129d7a530ad59aeb82740a59cac97ad3f259ea4f4abefac26225da45aab98ac6c1e33a4edaa51ac4e1a7da3eea94bab12196aa02aa77ba8560bf79ef9a425a60595b59c1da2cba337988f9ee9a140a3d799599e5fa379a4609ce09edfa3eca4519bb99e0ca434a575982b9e3ea39ca48b95469da8a2afa37990839e8ea3a9a4188e52a0b7a4c8a59c8fdba14ba5d8a65890dba012a53ca73c9061a13fa5bda675906ba154a5b9a6871063a15ba57fa6f3165ea1e6a4b5a5101a0c9ec39ff4a0591e6c9be9168c0f0c226c9d2b99bd9a6d2177a31fa97aaa30a165a4e5aa6fac17a492a199a8e1a932a0cea1f7a69ca8909c20a1e8a5b3a7359bbfa053a5e8a679994fa0cda464a6829805a06fa4d6a57297749f1da474a51e96ca9e9ca327a5fd94729e2aa3d8a41294f99dbea2a7a4aa939a9d65a271a44493839d0da23da4e092369daaa1fca382912c9d60a1a1a33a91f49c26a133a310919a9c10a1f8a213906a9ce1a0b6a22d8e349cc5a075a2c28f939b82a050a2c58dab9b44a0aba1bc880080038e6289b412fa25942ce72d12204a26ed2d7e2f8020a525592dad2e5f246f21db282a2a06283fa265a90dabea27f09bb9a4daa55d225d1cb823e425b824159c14a4a0a48327e4a280aa10ac662737a42aac05ad5b264da41bac01ade12430a47fab9fac2a23c9a3d6aa1eac2d2196a366aad4abb41f0da483aa09ac281e57a317aa82ab7e1cf7a1cea8eda9001afaa083a7b7a89714aaa0a7a6faa7479153a0d2a5caa68e9942a05aa582a61d9a4ba013a548a6cc992ba0f7a41fa68f96fe9fc8a4eea5ea94959f72a498a5c692e59f9ca4aaa5a5921fa0cfa4e4a5949238a0baa4b3a55b92d6a026a544a68a9419a14aa597a6749439a16fa5e5a6519408a11fa5d9a6039493a02aa5bba60c9404a241a5d7a61d944e9ecca18ea327155c1c6428cb294c24b3a60cad08af5da54fa103a901aafca085a1d8a42ea7359892a085a475a61b976ba07ca43fa6f8962aa03ea4eba5c19501a034a4c4a5f09405a00ca46ba5c294779faaa318a58993219f39a3c3a41a93959eb8a274a46791529e42a229a40991cf9de1a1e1a3bb90609d9fa19aa38690109d77a176a36590d49c35a143a3978e919c17a1fda25e8e709cdca0aca2278e659cbba079a2468c609c86a008a2ba8d189c49a0e3a17c8d219c4ea07fa11d030080ee839a046b101c24242b7a2ce41e5724b62bd32ced202f23612a022c4124321da124cc2501263f9ad2a25ba4af25039532a04aa15624be1a70161618c72304942ca13da1e5232e9dc9a508a74423daa0baa8a9a9fe22eea18fa90aab9f21f7a18ca919ab592002a283a9c8aa6c1e9aa27da9abaa241deca278a9b3aab31c7aa212a929aa241b9aa15fa866a9f61703a162a79ca8f5117ea098a611a8578b57a01da66ba754943da0b4a510a7c19546a077a5cba6839538a051a5aca645953da035a579a6129545a019a554a6cc944aa015a52da69c922fa0f8a413a6439219a0eaa4fda5199225a0d0a4f6a5f89140a0bca4e9a5df9177a0baa4dda5c691a0a0c3a4eda50294d3a0d3a414a6e393aaa0f5a417a6e09317a12ba565a60c94b69e8aa29fa47f92658872945896358a8796779a809c7b90419e5ca210a48094269f75a3caa48f95be9e50a3c3a45195949e29a3b7a435958d9ef8a294a45794aa9edaa280a42b94c89ec9a26da4e792d19eb4a266a4be92bc9e9da26ba49392729e79a268a46f92369e4ca25aa443920a9e19a24fa41092a09de7a12ea4de91fe9c45a1eca34d91779cbaa009a3c190fc9b74a03fa28890bf9b61a0f5a14a8ffd9b74a0bea17a907d9b66a0c7a1a18d759b61a096a1ea8b0000f919291b7c0f2723d928142aa31ddb21f728572ac71f8b205927c528a721c81ca7231b252923ad16111b731cd323f988719c5f9c29234e92139fb89fd722219894a186a20622359c68a450a5f120a99de2a535a7d91f859f3aa751a8bb1e70a0f7a70ca9df1cdaa02fa819a9c01b21a12da81aa9481b2ca122a8f8a890190ea101a8f0a80a18dea08fa79ca86c12a6a0fea646a8ec0b5ca085a6eaa78a913ea008a65fa738915ea0c4a5ffa6289472a067a5b0a6ee938ca02ea572a69a93c2a00ea554a61995c5a0e9a428a6de948da0c5a4fea5a5943aa087a4b2a5559408a050a456a50f94869f22a422a5c793369f0ba407a57c93539f22a41ba56893c69f50a46aa57c930ca077a498a5849324a089a4c6a56b9327a09ca4f0a5b69463a0cca406a66694bd9d9fa238a48391c698029e34a0f88dbf99519fcfa0cd8f609d7ca138a3d992519e0ea239a42793d29e4da24aa43a94a69e6aa24da432946a9e6ba24ca41894369e5aa23aa4e993139e10a210a45092f89db7a1ada3d090ed9d76a168a39990b89d43a115a36e90819d1aa1bea24c902e9df8a0aaa22f90c89caca056a2de8f599c66a0f0a1688f2c9c30a0a5a10d8fd49b06a08fa1c78eed9b1ba065a12e907a9b18a07ca1bd8e169a599f36a1df8c142b802e5f2fefa0ea2cab307031b4a4093085346e35eaa7732d0534923284a79ea0699deca0878dff93008000800080f293008000800080f98e628dc58e3d85e6a2c2a524a8f61e2fad9db144b2b02da7af28b4beb4102ec0acfeb02ab2f428e5abf4af9ab0142595aafead0caf30206ba484a99baa8614081b30acc1aeb0a47f28f0a47eab09a63c2a6022c4a0d4a6432ca42681a402ab1329231c6da24fa80a25dea02ca531a82920a4a25aa5a6a411a4eda5a5a6799d66a457a71da862985ea41ea6eba67c9b30a49aa5bca539a0b71d371c5812cba78928dc255c24f4ab6626ee23392144abdd20551cbe18e0a8c39c5ca172a040a35aa5cfab09ac0c1155a2caa7f8a8840a42a07da412a6a992ff9d81a4e6a54c94019f69a4ada51396229f41a46ea5ac96f09e29a469a58696e49e26a45ca54797a49e00a40da5ee967f9ea7a3e5a4a196019e2da3aba4dc96c89ddea272a47c96a29d7ba235a41e964f9d32a215a4c795fd9cf9a1f5a38195969cb2a1c7a3cd95689c8ea1a3a39695379c6fa162a36795079c58a130a3c094fe9b42a1f9a29e94109c15a1bfa2fd931d9ce9a067a2bc92139cb4a034a24f93169c8fa0d3a14192ca9b65a094a107927b9b52a063a1b6925d9a1fa054a19791389c11a0efa09491892d0631aa314ca4ea30c134503560a93a33c236ba377bac2b32fb35a93654acb79d1c9cc69d111800008d078a040e0d00003180310541090000000000000000e0201f2093249326c5b024b4a2b4b0329ab2beb698b7cf310eb077b371b44c2bcaad29b1fab1b42511acc2ae73af5d1e91a849ab31ac449cc8a170ab27adf3a1e226bfa67eaad9a51f2bcb226da14fa65b2b18987fa75aa8f62ab9a56bab2fa89929a5a2eea803a7b89af6a9a8abb7a43ca498a8b5a9599f49a15aa379a53112579ed7a4e6a5ea1c7c9e65a380a4c021e329d1298328c2a8df296c288327dcaab027f4240722d9aacf22e01d8b1470a934a2a2a450a56ea06ea511aa21ab4121c9a459a995aab11e93a222a833a93619fda2e0a65ba8e70faea145a605a84194f6a09da524a71096bba04ba5e6a6cc9775a0eba46aa61a98c29f88a4d2a52d984b9f36a46aa5c297d99e10a459a51698929ed7a328a50d97359e8da301a5b696f99d37a3e0a4bd95bf9d14a3bba49195a29ddda281a4f695729da7a25da4b695529d66a23ba47f95019d2da223a4cc95ad9cd3a10fa4f2943d9c8da1aca3a994129c20a1efa2c993719beda097a22f945d9baca029a22e93fa9a75a0d2a11d921f9b57a08aa1d392d39a10a065a17792959abe9f10a1c9932f01bf1b7f1c69978531ea34dd35c5a8d83316371538d0acc633d636db3753a9b79b979b1a9d761c008000800080000000809e91de82ce100080008000800000eca358a5eaa5fa0e01b2a0b466b5712f04b454b731b88331fdb060b41fb5eb2b9caee4b1c9b22a27eaac3db0d7b04a22afabcdaebdaf8215afa869ad81ae189fdf9852aa8dac36a4c22941a044a73ca7ba2b509d2ca8a6a83a2c49a092a85ca9b42ace9f27a9e1a842a660ab33ac7b9fd3a359a847a93f2433a2f1a748a93424239f7fa4bea52921b099d59f52a19f217b29a82703269fa8302a0f281f254dac43283724451ef2ab4b24139580a1c6ab2da238a83ca912a79fa5b5a9c3aa6f182da580a9dfaa801aa3a4eda801aa9c167fa47ca874a9281182a3cca7faa87b90cba1d1a66ca81a973fa137a614a88f9716a11ca6f1a7ce98bca0b4a54da76f986ea049a5cba6979821a0f8a453a64498709f88a4dca5c897e29e40a47fa50898849e01a434a59a97429ebba307a590960a9e57a3c3a43b96a99df4a291a48796749d92a256a49495459d4aa21fa4e795109d07a2dfa31095c09ca8a172a3ce945d9c45a108a30194019cf1a09da28393929bc2a034a23b937e9bb5a018a25092af9bc5a0f3a14093ac9a7aa0f0a10192f39a5aa09aa1c492ed08e51bc91c43956631f1340736cda89333cc361438bcac2333b736ef374aac4e18e01e77189a1a0000000000000000000000000000000000800080008000009ea650a83fa9e12997b159b457b54c33fcb2a0b6bcb7c731ddb06eb430b59d2bf8ae55b248b3b32777ade9b094b1a6238aac1ab0bab0f41beeaa1eaf1db0829b7da6d6ac11ae70a00426c7a6a2aa5aa59b2b629695a897a8b02c0c2060a645aaf32cfc223fa52eab142db32418a1c6abf92cc827591525acc22c2628a32066ac7b2c2928dd2194ac0c2c2b28d021c1ace52a02278020c2ac5e290125b41bebac2628b320679ef4ac8a24a3a05fa537adaea032a8b9a9bdaa64a5b5a9e3aafb9b44a559a97daafb159aa4ffa81baa09122ea4aea8f5a9598bc9a32ba81da90b9439a3eda72da9d59617a209a77ba8559871a15fa601a8789877a1f4a595a7ae984da18ba503a7d198dca02ca58fa6719854a0e3a433a62698ef9fa9a4e4a5eb97819f7aa4aea58597259f60a486a54497c69e2aa453a5a697749e04a428a54b97299e9ba3eca4e896d69d2fa3b8a48696839dc0a279a42196469d44a23ba426951c9ddaa1c5a34d94af9c92a127a318943b9c3ea1dfa2cb93019c38a1b0a2d892f79b1ca173a2ad93eb9aaca030a24393269b55a0b9a1369100006c87770d7484d0307434b5355faa9c323a36af373cac2933ce36f137daacc41d721ed01ed21800000000960d0000000000000000000000000000000000007aa8c8a95dab4b27c9b1c8b4e8b5c73158b25ab636b797304db01ab4cdb4602b93ae4cb247b3be2649ad21b1e8b1962398ac57b018b15f1e71ab63af52b0ae148ca948ae8eafa69d8aa226acbfadd9a34d2944a5c9aa09a8e92cde222ea54caa702d002547a3e3ab862d5526919f61aca02dab276e9ca8ac382d7627a315e3accf2c04281e1c27ad672c0528c91e81adee2b5b27c61eb1ad552a3b255715abadbc28e420a29eadad2c26309c4fa405ae0794f4a6b3a885aca8a5b4a9b6aa59a2c1a59ea9b3aa48984da54ea985aacd99c1a402a93daa519a2ba48aa89ea9a8990da30ba80aa9be9960a21ba7d3a8fd98b9a296a630a82e9981a14aa617a8e39838a11ca6e1a73f9937a1a3a52fa7c998d5a01ca58fa6cb9874a0d5a451a67d9825a0a2a413a64198bc9f65a4dba50998319f3aa4a0a5ad97a19e12a463a59e96369ec5a32da55196b99d7aa302a50496799d16a3d0a4b3951e9dada2a0a4ce94d89c2da22da47294a19cc8a141a334944d9c63a1c5a2ec93049c18a192a2c2921a9c1ea162a2b093939beba08ba22194469c0fa1b6a2c09100005c85f60a77885d305a344335f9a8f7312036443701ac0432c43521379da5f11b1b1cf81c3f197505000004010000008000800080000000800080008000003ea403a66da76e277fb0feb3d3b44c31acb1e1b508b7b9300db0ddb3acb4ae2b12ae1fb20ab3542719ad0db1e9b1572480ac93b054b16120c1abefafaab0bd1ac9aa28af16b02094baa8fead65af119fee1efda984ac4ba58e2cc72035a64aa9e72dd327989c01ac222eb0281b16c8ac1e2e0129701c18ade72df52814216bad862deb280421bdad402def286f221faea72c9328672250ae572bf7263b1c82ae6329a022f89eb8ae4027c89572a4c6ae2c1be7a595a8d3ad7da682aaf0ab57a421a561a98caa1998d0a43aa976aa4295b0a423a96daa0f972aa4aca8cca9fc9804a448a859a9459940a3dda7f4a8859941a223a799a8029988a186a62aa8129996a143a6eaa7c29876a132a6d3a79b984fa1dfa58fa75198d6a071a515a7ea9774a0ffa491a64497f19fa3a434a68997849f6ea4dea53397f49e3da48ca588976a9e05a44ba52597289e94a30ba51896c39d42a3cca4c795c79de3a28aa4e8944d9d71a25aa49694e39c02a2cca34794869c85a1fea20293419c50a1eaa2d991549c55a1c0a2c592939b09a1d6a28a91299cf3a091a2b69000004082d10da189a62f1034fd34c3a8bb302d3537364eaa7031f235f2361fa8761e5821b01fc31b8e0a0000000000003001000000000000008000000080000030a12ea42da5c42703b082b38bb4b430e3b039b51bb60530ccae3bb34fb42c2ba2adeeb1f4b21827d3acfab0d7b11f2346ac76b024b1322054abd7afa2b08b1a85aa17af34b00494d7a95faeafaf989c29a73dad9eaedba19f2565a838aca7a7bf2d1a26b7a2b7abf52ef0296c2144ad032fa12a3124c7ade72e9c2adc2453ae8e2ea02a8925b8ae292eab2a8525f4ae932def29c9242daf952c6d28202199afaf2a0325db95cfafe7289d1c09a116b0172368a403a833afaca633aa05ac00a68aa60ba947aa139dd1a41aa94faacc9b81a4fda844aa889b15a48aa8aca9c49aa0a31aa82fa9c39aa8a3efa70ca9769a2ca397a7c8a8bf9a6ba20da770a8d99ab3a1a5a640a8fc9a96a156a6fca7849a53a1e9a579a7029a18a19aa50ca79299d0a026a599a6a0987fa0ada418a6869728a063a4c2a53f969d9f2fa484a5e695b29efaa352a59f95119ebea313a50996819d61a3dda4c095239dcca26ba45a95f39c32a2fda3e1949f9cf6a1b6a3b294719cb4a16aa30594509c87a132a3e092699c70a102a3b292d79b4da1fea2a490859c0ca177a2b3920000cf81390d8688c92e9b33b83493a894302135433655aa33317335f2367fa95e1b641de11c851300000000000000000000000000000000008000000080000004a07da112a40228c3ae84b216b45d31b4b079b581b6e92fa6ae75b365b43e2a30adbcb1c6b26b2562acd3b0beb18f21e1ab58b02ab1be1d26ab02b0acb05c1a7eaa38af3eb0c413bea98bae9faf0a93caa8adadc3ae059ce2a454acadad42a21a2a4fa218a94ea9552fc72a8b2539adfe2f552c582841aec62f322c6428edae642f382c02285caf2e2f0c2cfc27ccaf642e5b2b312706b08a2d282aa62539b03e2c31289d1f70b0572a6d24ff95c7b098247da221a731b004a8e4a920aba3a669a573a99faa839c71a4e0a81caac09b59a4cfa8f6a9729b44a4b8a8d0a9f99beba365a888a90c9c2ca323a83fa9729b89a2a3a7f3a8819b31a256a7b7a80b9bfaa1fda670a8449bcaa198a61da8b49a66a119a6c1a7339afba0d7a57fa7619ab0a09aa520a7fd9983a04fa5e7a69f9967a015a5a6a652990ba0e0a46fa6a6988e9f9aa40aa65798f09e4aa4d0a50c98659edfa35da5c896b99d0fa3e5a48195c59c14a229a44894729ca8a168a3f993519c6aa11da3bb92499c58a107a3c2916d9c5aa1c9a2b6911e9c3da118a36e8fc29c4da1eea2f78b0000cd812f0d7f88b82ec833de349fa8b5304b358536d0a9663028356c3695a85d18ec1a061a691400000000fa00000000000000000000000000000000000000299a489ee49d63260aae65b29fb39d3040b03ab566b605306dae7cb370b4872aecacedb1ecb20f2628acd8b0bdb16821b4ab59b02eb17b1df1aae2afc3b01a1422aa3daf51b0889361a961aeaeaf1099f2a8f3ad27afa59868a877ad9fae589bc2a2ffab46ad25a45a2c4e2281a405ab3630b62c642872ae6d30282dc02961af4930ff2cbe2907b01630dd2c59294bb08e2f7f2cfa288cb0712ec02b3028c4b01e2db129602401b1382c0a28f21f7ab1532654a111a6e6b0d4a50caa5cabbfa7e4a429a933aad79cf2a418a949aadc999fa4f8a81daa999b41a4b7a8c3a9089c08a483a8b2a9a09b60a342a87ca9d79b76a2b3a7e6a8ec9a3aa270a7c8a8399b26a216a793a8ba9a1da296a631a81d9adda139a607a8b69989a10aa6ffa76d994fa1dda5e2a73699e3a0a1a5b1a7f49845a025a5d6a67a98ab9fa8a409a60e98979f63a4cea58e97d09f42a49da50598fe9f2ba47fa51b97a39fcba332a5a6966d9edfa280a44d95b49d82a24aa4f994c49c46a279a44994139da8a2aea4de937e9d9fa2aea4e894509acfa189a4f190909d24a22ca413900000f3819b0ae0884c2ed033d63421a8233048355c363fa90f30e534433673997e179a193d19d7157a010000dc000000000000000000000000800080008000009ca04ea47aa41c2667ad5eb261b3d32fcfaf29b526b6cf2fd2ad57b375b4be2a96acc5b1d3b27f260bacd7b0cbb1812265ab57b02cb14e1db6aab8afabb0c713d2a905af24b014932aa963ae89afe898d8a8efad27afb79b8ea8a2adb1ae549bdfa710adf6ad209e849e3caa5cac64a4812d872730154aacaa30592e3c2bf6aff5304a2e022ca3b0b530e52d9b2be1b05030c42dd42a47b17e2ff42c9d298fb11d2ec12bf427d1b1322db129ad2434b2d727ad9fa7a43bb171a56ba960aa13a651a425a946aaf69cb5a4d4a813aa109d88a4b8a811aa409c29a494a8f7a97d9c8ea35ea8d0a92d9c4fa348a88ca9fc9b2da337a84da93d9c0aa3fda704a9c29bb4a218a797a8cf9a29a2c8a678a85d9aeaa1afa65da8019a88a151a623a88e9938a1e3a5dea72099d9a0a1a568a7da987ea04da5f2a6009916a0fba488a6a798b49fc0a425a67098239f7fa4dca53398749e3ea488a5d897f99deba325a5af96799d2ba39ca47995019d7aa235a4ff94989cf1a1dba39694639cb5a187a3cd93519c9ba159a3a9931b9c5ba15aa30d94c89cb1a156a4e2951c285c29412a3819da24ce27d8279c9a6f2f9334b835ada7ec2f0a356436ffa5fa16b41bcf177c0aa60b0000000000002300000000000000008000000080000045a177a376a5f32535ade3b15bb365302eaff0b4f4b5eb2e58ad0fb33fb4282a2cac78b191b2ef2462abafb098b10120deaa39b011b1491a2baab6afa2b0c693b0a9f4ae40b057995ba944ae6faf039cd8a8a5adc6ae579b56a843ad70aedf9c19a8f5acefad849c3aa7a9ac78ad5e9dcaa02caa2bacc6a4bc2d4d29582013ad65316c2fb02cc9b06231252fd62c80b11b31f82e722ce2b19e302b2ead2b57b2e42f312d272aa2b23b2ec62b6d2702b3d72578a2d3a5e5b016a5d6a804aafda4ada455a98baa249deba40fa953aa0f9bd7a4e8a832aacc9b76a4aca8daa9a49cd9a355a85ca9b29c3ea32ea831a9d69ce4a2f8a732a97f9c77a2b2a714a98d9c46a251a7c4a8919cf8a1e9a673a8379c92a19da65ba8fb9b85a186a648a8239c7ba148a61ba8cb9b2ba1f4a5c5a7bb9aa3a062a5f8a6069a08a0b3a42fa6d2983f9f4ea4c6a51098fc9e11a48fa59897f39e03a468a5c696869efda34ca5ad96329ec2a319a5cf95d19d45a3cda47295949de1a26aa42795519d87a229a4e394e79c25a2e7a316959a9cd6a174a33e94799d95a105a3e4938528d929ab2ab71c6124ec26fd260999052f7b34b33584a6472fee342d364aa7cd10691bf0106112440c000000000000b5030000000000000080000000800000679d1fa134a2052596ac85b1e9b2992fe3aed5b4e3b5302fdeacd2b241b4ab2adbab55b177b20026d3aa7eb07db1092273aa1ab0fcb01f1fe1a957af69b08c1953a9b7ae17b0c412d6a811ae5caf36929ca894adb1aeb6911da815ad33aef097a2a7c9acc7ad78971ba76aac4dadbd994ba6e0abc1ac1f9908a32baa13acd3a1842cc2277c1d7bac5c31702fdc2c30b1a231ee2f2d2d73b25f312c2fa12c1cb3ea30672e122c6db3c52e582b6d27e1b393a14da7f0a8b2ae52a4e9a876aa8aa15aa434a96baa769b5ea4dca827aa239c1ea4c9a80eaa7d9c04a49fa8c0a9b79c99a36ba883a9da9c5ea34aa850a9079d34a319a81fa9a09c71a289a7bea8839c1ba24ea7a7a8459cdaa130a789a8639cafa1eaa66ba8209c69a189a630a8199cf7a024a6dca7899b96a0bfa559a77f9a53a07ba5e9a6129a36a024a59ca6a39925a0e7a44aa6ed98eb9fa8a4f8a5ae98d09f68a4b1a50998349f11a454a5cd96819e95a3f1a4bc95f09d34a3a6a473958c9dc3a26ea49394289d78a25aa46094fb9c2fa220a42f94579c45a109a34a92499df1a100a4a9936d2748297d29d71d0824d526952619975d2e4c3492356ba7642e9a34d33517a86311ba1b97118111d80b0000000000000c03000000000000008000800080000057a07fa489a5182479ac8ab1d2b2552d2daeabb496b5cf2d56ac86b212b4b1290bab15b12ab2532656aa54b04ab1df22d1a9fbafdbb0ee1e5ba945af59b07f19e1a87baed5afa3126fa8c9adfeaeec9148a853ad63ae17981fa81fad44aede97e8a7c4acd4ad339a3aa768ac49adbb9993a604acd2ac509bf6a59eab8facf498cea426aa81ab5c9d8924139d05a659a9682f662c072989b047318f2e322c13b3cc30d52dd92a04b47d2ac623fe9b6fb16ba562a952aaa5a828a371a8f4a9469b54a4cda8dba9829be1a36ea8a8a9769c1fa468a8a9a9e39cfea351a88aa9b89cf3a34ca899a90d9df4a342a892a9429dd0a31fa865a9d49ce5a209a844a9729ca3a2b4a7f6a8819c3ea246a7b3a87d9cf4a1e8a677a82b9c8ca17ca63aa8929b23a114a6e1a7e09adda0b2a574a7e79991a049a5f5a66c994ba0f4a480a60899fb9fada406a65398599f59a4afa505989b9e13a452a5cf96019e92a3f5a4ba95ef9d17a3b8a4cc94499ef3a274a4b494db9d5ea240a49b93899d28a21ea45f92479d0ca20ba432921e9d14a2efa3fb928f9d9fa135a338920d2708287a28a2205623ff26d2262594fb2d593483351aa72c2e8734e03518a85814591b6f146883b103000000000000e40900000000000000000000000000003e9a8ea00da1be21f9abcdb1adb2332dbfad94b47ab5e72d06ac56b2fdb3322abdaaf7b015b2ab261baa4fb03db1c72381a901b0d7b06720f1a802af3bb0581c9ea840ae97afba184ba8cbad08afef1120a84ead82ae8591eca7e4ace0ada2975aa768ac56add499dda618ac03ad949b5ca6b2abaaac949c2ca689ab75ac7c9c42a60aab5cac849a5fa5aeaa25ac929baca227a97eaa7aa3061ac6a5f6a73aa9971caba40ba6d5aa11a4efa8d3a9f9a6a2a4d4a845aa4e9f41a48ea842aa2a9957a4c1a8e5a9ab9b56a481a8c3a9209c38a464a890a9ec9b03a448a85ea9409cd0a32ea845a9fb9cc9a312a844a92b9d99a307a83ba9559d76a3e1a727a96b9df4a26da7d8a8499d3ba21ba789a8d29cf7a1f4a671a88f9ca0a1baa644a8f09b5fa149a617a8439b1fa1e0a5a9a7179ae6a086a537a7369979a02aa5c5a6d3981fa0bfa43fa66f98799f66a4d0a57798fb9e09a44da51998b69e78a3eda495973b9ef4a2a7a47e96e39d98a27fa42996509d29a22ba44195149dd0a1dea30295f89c93a184a3ce943b9c30a18fa37894749da5a178a407945b940e9a849a458e302268259225fd99d42ced33ee34f1a66c2d0e34923590a52e14411b6a145c09dc00000000000000d70000000000000000000000000000005698e89e12a04c22a4ab77b19fb2462d4ead5bb438b5e82d2eabe7b15fb380292faaa0b0c2b149258fa909b0f4b081220ca960af77b02e2092a896aef8af371c41a80eae60afa718e8a780ada9aeba117da708ad1fae3c91dba690aca1ad3e9760a633ac19adaa9610a6beabb0ac3f96aea536ab65acd19574a5c7aa26ac8f9853a590aafeab5798fda42aaaa7ab139824a50faa61abfb9a80a47ba929ab3f996ca54ea92fab719db7a42da9a5aa4f9c63a4b9a806aaf49588a4a4a8eea96f991aa46da891a97c9be5a339a868a9249bb9a318a856a9fd9bb1a314a857a9e29c96a312a854a9249d8da318a838a9589d9ba328a837a9819dd9a2d8a710a9659d52a2aea704a9079d32a25da7d3a8f09c11a2d0a677a86a9cc9a172a63aa85e9c49a111a60aa8f69b97a09da57ca7d29a50a021a5d6a6be990aa0c7a459a6e698d59f7da4eaa5a797419f31a486a578969d9e00a455a51c96329e94a32aa5ca952e9e10a3d8a4e094559ec6a292a4ad94709e7ca23fa47a94829e37a208a4a693399e0aa293a38393779d9ca14da32f90b49c2ba1dea2919214a0a39f9e9edd8ef42431281328739b672c8033903477a4bb2c06342135801f8d16d91cad189e14e40e0000000000002a0c0000000000006600d9021200ea06e39a4ea1eda1942217abf6b030b29f2deaac26b4eeb4fa2d90aaa6b139b3db29dba982b0a3b13c263fa9ccafd3b04123b5a81eaf50b0092045a851aecbaf1b1c09a8c9ad11af84186da734ad4cae8191fca6c0accfad07918ba66eac71ad08973aa6f8abdcac6d96fca576ab8aac0499ada5e4aa37ac999a63a588aa09ac059c16a529aa91aba29cf7a4d2a92aab499bc9a48aa9daaaf09ac5a455a979aa6c97b5a40ea940aa38945fa4b8a8e5a991960aa45fa860a94d96e2a361a86fa93396d5a336a848a9f795a5a31ba81ca9249975a3fea7f8a81d9a2ba3bba7efa8ee9b14a3c4a7e9a84b9c35a303a812a9969c5ba31fa852a9c79c11a319a859a9639c8da2e0a716a9649c14a257a7b5a83e9ca4a199a64ba8f79b22a12da606a8d49bfba0fca5c4a7589ba8a0a3a55da7d89a65a034a5cea6429a1ea0eba47aa67399d99fa6a40aa62699509f5aa4aca56b98c99e03a443a592972b9e58a3d1a4ee96be9d89a243a4b095679df5a1b6a3bd94059d9aa13ea38194c39c59a1d8a2c793af9c44a1afa25394489ce7a0aea2c590d09c22a19da2bc925c9eb6a0a3a1c99ad31bc51c111fe1946f2c3d335734d8a5b42c283459356fa4e20b0f16900bc301db00a70e0000c1024506310c0000030200800000008000002a9cd2a059a17c210aab30b16db2202eb3ac5ab462b58b2e5baadfb162b36b2927a952b069b198248aa839af7fb0c820d5a75daee0af921f34a7bdadf3aefc1b02a73dad6bae7318cca6f2acfead819163a683ac74ad479af4a5ffabdcaced9ba2a52bab5daca69c57a5c7aa11ac599e2fa567aadeabec9e0ba531aa9fab749ff7a41daa62ab1b9fdca4e4a929ab0b9eb4a4b2a9f4aad79d58a43ca98daa769d14a4cea8e9a9589cc1a378a86ba9b29943a326a81ea94e9331a3eaa7e5a81993efa255a78ea88e0c99a227a765a8aa927ba2dea656a8e59829a2eba65aa8db9a87a238a7b6a8cd9bb5a2eca736a9539df7a213a86ea9f39d6ca2f7a73ca90a9e04a2aca70ea9d69dd7a18aa706a9789dc0a140a7dba8f89c7da1b3a676a8339c1aa1f6a5caa7519ba2a036a5faa6e5992fa0e3a492a6109912a0c3a461a67e98da9f96a40ea64998849f68a4cca51d98479f32a461a5d797d39ebfa3fba49b96119e02a38da47695bb9d85a245a42295a29d06a208a4cb94689d9aa198a31394f79c23a1b6a250943e9c6da016a2b594549c6ba0c4a150910da149a246a2639f05223a246c255f9a8f2cc033c4344da8a12c2e34743536aa6d0a7219540d590d7101000000000000818050020080bc030080000000800000189b05a04fa111219daa35b15bb2842d9cac57b44ab5872e5eaaeab190b3f429f0a844b048b144255ca80aaf3bb065204da7e4adfcae731d5da603ad06ae9518f7a592ac76ade91188a6d5ac07aef79a54a647ac48adc89ee0a5a9abb8ac4ba08ea524ab57ac8aa026a5abaaf3abbca0f5a417aa74abe0a0b7a4a8a9d3aa87a087a454a98faaaba055a433a974aac5a061a4faa81daa889f08a4cfa8e9a95a9c7fa366a869a95c9827a313a812a9c98ccda2a5a7d1a814187aa21ca76fa82b191ba26ca619a81519d1a1fba577a7e21788a1c6a538a7ad128aa101a68aa79f921ca2a2a662a8ec98e1a2b8a71da91a9da1a36ea8aea9fc9eaba380a8bba9c49f7ea233a849a9729fa8a15da7b4a83a9e91a19ba64fa8769d37a142a613a8bd9cfaa0e4a5b9a7ba9bada07aa528a7329a51a022a5aea6529905a0cea451a69598769f74a4efa5c197d89e01a446a5f996209e0da394a48e95b59d6da235a41d95979d16a2f1a36194929ddfa1a8a345947e9da8a173a32994859d7fa13ba33593519d78a10ba31194999c07a10ba3ff8f4b9ccaa084a2de9400807e9f0ca0989b232a2931d83284a6e72c7134863594a8a22c4a348435d3a887062d18d5047488a680000000800000f6000000000000000000000000000000f29830a011a030201fab77b1eab2ed2ccaac69b486b56e2e3daabab14fb3ea2917a8b7aff5b02e25a0a756aeb3af072254a63aad7eae5b1f67a4b1acc0ad921ca3a1e2a7c8a8e71c0ca526ac21ad7b9dd7a40cab05ac1aa159a4cea9d0aa7ba12da487a9a2aad8a1d9a363a98daa2fa3cba338a96caacda2fea338a95caaaca286a315a95aaaf2a0fca26fa899a9dc9d8da200a8f2a8cb9737a324a80aa9740ccfa2c0a7b3a8781285a21aa78aa82a1714a225a6d7a7901885a155a5a4a6a71956a1e5a428a6f91a2ea1b0a409a6591a42a1e7a443a69a194aa134a5bda6b013dea176a63da87798c6a224a83fa9769fd6a269a8a7a981a06ea236a887a96a9f11a2dca71ba9ce9ee0a18ca7d9a8d69dfba1fea690a84b9dcea16ea61aa8439c5fa19ea53ca7e59aaba006a5b7a65199d19f9ea454a61098349f47a4f8a58797c09e13a496a56b96ce9ed8a33ca52e968f9e7ea3e9a4e7952f9ef0a28ba48595819d7ca243a4aa94059df2a110a453948e9c66a1c0a3ef93579c07a128a38d93449cc6a076a256935b9b62a01ca236919a9b25a0a9a1e68e008088957d93b994ac2818300631fea4182b3332df3300a61025522c672d29a84f189c221924a0a44820db27ca2900a5bc1c1626c02759a41f9dd0a449a3c7a187a2acaa63abd92346a6d9ad5aafb02b67abf6b25eb40e2c2ba8bbafc4b05727a3a6c7ad63af3023b7a5ccace3ada61e07a543ac1bada61647a46eab7fac9c8f56a2dba79ea8df946d9dcda26ba4359a53a08ea63ba8bd9c75a132a8e2a8029e09a2eca7fca8719d81a24ea820a9479d82a249a831a9789c6aa24fa844a9aa9bdda265a850a9519951a22ba831a99a95d6a19ca7a7a85a9267a104a766a8db91a1a10fa739a8b90b1fa22ea75fa8fe1115a2c2a627a8df14cca137a6a9a74f1990a122a579a6311d27a02fa346a4c71e2d9f42a152a2551f31a1a0a3eda4531e78a210a6d7a7f88d7ea3bea804aa6ea0f9a390a904abada1aea2c0a8f6a92ea1e0a156a7b6a8f99fb7a17ca610a83b9effa0ada56ea7a49c2da02ca527a7769b11a0e0a4dba68a9a07a07ea40fa6ce98b39f12a43da5ed97459fa2a3ffa4c996d99e49a3dba4dc95b09e00a3d4a4a195b79eeca2a2a49195169f7aa23aa4b694f69df9a1c6a35894fc9c85a132a30f94d39c35a1baa2bd938f9c03a16da2a692989ce5a02aa27193749cbaa023a256921c9c76a0dea1a39400805793de92e4992f23522acd2b29a2d7278f2fce3013a47b28e62f0e3183a420256b2c282e58a27b1b8724c025099ed59f1aa785a82a9911a238aaceaada19b6a227ab5eac6d25aba5e9ad45af822621a609aeaaaf7d2404a667adb3aec92139a5a9acacada21f7ca4f7abeaac2e1948a468ab8facb50ff0a3b3aa22ac259557a3c6a917ab5d9443a2b4a8bba92698e5a103a8efa8db98d3a187a7a2a891996ba176a69ea74a96caa053a694a728965da0faa521a72894d9a08da580a6b89384a093a56aa6dc96b4a0c4a5c1a66d955aa1f7a552a79d9597a1e7a55aa78e95e2a1e7a531a7a795d6a199a502a77395cda1a9a5e8a6cf9056a163a5e3a6be10f4a1b5a516a768179da001a4d2a4491cd29b4098b1945021ef9ba915e210c82312a2aaa5b2a7a6909aa4e6aa5dac4ea50ea372a9c9aae9a34ea2c5a70da9a3a081a15da61da8629daea095a511a7d39b81a018a57fa69a9a25a0aaa41ea6a199c49f4ca4baa5c0983a9ff1a35ea55f97ad9e7ca322a537965d9e21a3e2a4ec950c9ebda29ca40295ba9d5fa268a4bc949c9dffa12ba47494499da8a1d5a34094379d68a186a32b93fc9c23a11ba3e492979c09a1eaa2da91619cd9a0a5a2d290319ca7a070a28791469b6ca05da27290969b14a077a132900080bd8c34894f085626812cc92d419fa126172ea52fc2a2f525602dc32e29a0c222622a032ccf9ab79618a015a1da1de3a201ab2bacd81c7d0623981b10f714f316a418cb1ca41874a192a9e3aa0c1962a44cac33adf61c2ea40cac00adf11934a452ab81ac3816eaa3a1aa1daca50fa3a346aabeab1b8fbba359aad4abe0945ca3d4a93cab45943ba2faa83caaca8c96a136a835a9fc8b5da171a7a7a8628b3da126a767a867915da1e2a641a8569443a182a604a8d5954ca158a6e7a74f97fea027a68ea71697dca0e3a53da7e596d9a0c2a51aa7a296d3a0b9a50fa7b0971aa1b5a516a7ab97ada1cfa52fa7799897a1a8a518a74b9885a190a50ba71b984ea155a5f3a6dd9720a11ca59ba66096a7a0c8a38da5f9925c9d98a17ba03e1c5aa07ea1e09f1a9edda5b4ace7ad89a525a1d1a57da7eb9c7ca091a495a6dc9806a065a4f6a5ac9838a064a4ffa537983ba044a4d3a5539709a022a4aaa5599606a001a45ba52796699f99a317a5c595f39e23a3c6a4c9946d9eb1a271a47d943c9e3da224a42f94bd9ddba1d7a3d993699daca19ea39b93209d86a155a36b92e49c53a120a33c91ad9c22a1f7a20c91709cf1a0b2a2dc905f9cb9a05ba2b08f5e9c82a0f4a17b900c9c35a0c8a13b90509c29a037a1538d0080138673018e8c38242f2b912cee9e6b240c2c0b2de39db523242b712c989c0220c7263728661844995aa1c5a2fe1c819e2aa6e7a66d1c6093469fba9f7a106c953aa1ffa16790619c92a5c7a6869655a05ca831a90b909ca12ea964aa728f05a257a96baa4995eba143a967aa2b983fa23fa97eaab39748a22ca97aaa12973ea2d8a8f0a96896afa15ba85fa90898fba09fa7bba8b0988ca0e2a648a844996fa06fa6d6a7d2994ba017a660a7829978a0cda504a73f9987a08da5c3a63f988aa074a5a0a61a98a5a05ba58aa6ca97a4a059a58da6a79774a05ea583a671975ba056a58fa6489765a039a59ca6209775a012a561a6ec9687a003a55aa6bb96aba0fba43ca69796c8a020a56ca6ab97f5a043a58da6a79767a078a4daa53d968e94dc9b069e2c9050909e96a2981c8ea99c5ba051a1e694639eb5a26ba4f695ee9e4ba3bea42996129f5fa3c5a4ca96c39e3da3a8a49796a49e0ea387a4ad95ac9ed9a277a47295d29ec9a26ea45595dc9eb3a269a49894c69ea2a26da47f94819e89a26da462941f9e58a255a4d294cb9d13a236a49e943a9db7a1efa3c093a49c20a152a3f392359ca3a0aea25b92cd9b70a02ba22892af9b60a0e5a14291cb9b5fa0b0a11192489b51a0b1a1eb91509b52a06ca1788d0000d519ab1a1707052338295d2a519a05227529bc2ac79bc4201e283a29ba954e1dc024f9252a168915711bb31c5119a695cc9f4fa0321912982ea1e5a1ef18f49992a2bea37015669c98a487a5d60ec09df8a50ba77a8ef39ec3a62ba89e9722a07ba7a0a80c9970a0bea7cfa8c498baa0f2a7f3a86b96d5a0f0a7dba80c96d7a0c1a7c0a8b195aaa05fa775a850957ba0dea62ca8ee964ba075a6efa730984da021a693a7dc9870a004a655a7af9899a0c0a50ea77a98b5a0a7a5fba65498caa06aa5b6a62598a5a043a592a6ea978ba023a551a698974ba0e4a423a647981ea0cfa402a62298ca9f9ca4e5a5ed97d69fb3a4e2a5d197f49fbba4f2a5a19712a0d0a40da6869723a0cca407a62a9623a0b9a4faa5fb9592a004a54fa6d296cc9f44a46ea54095989a43a081a17092ec971b9e1ea059912b9ca8a018a214948f9ee1a108a4dd942b9f31a23ca494952d9f5ba245a49495c19e64a243a47895769e60a24ea45195239e41a224a41895f39df8a105a43d94ef9daca19ea3f693f49d73a164a3a192af9d4aa11fa36f92739d27a1e6a232920a9dffa0ada20192a89ca0a04fa2a091329c59a0e1a14a91ed9b27a093a10d91a79bf89f5ca1d990d19b01a042a1df90289bc89f55a1bb90949a469fe0a0338e512a4b2e472f13a8f52cd430c73158aa0a2f51338e3487acc82e50345734c0adaaa7f3a6adaa459f0080008000800080008000800080008000800080008000800080a392189bee8c40a70bab67ac8b99cbaf52b4bcb457a298ade6b18db2cd9fbcaba4af69b0b3a006a943ad83ae4ba28c9135a6c1a88ea5c824c2a8cfacc2a9c2284e967ea652a9cc2b89272519d3ab382c3d27b1a107ad762187a508a93da867a11da644a78697b09cba9e6c9f8b16479d75a120a36411679e6aa35aa4b308b29f9ba23ca48590409c94a126a2a88c239c5f9c159d9889ac26f924852237a82b27cf24bd22a5aa79249122fa1d6baa4d913a9b099c87a7dba5b9ab75ac36a480a19ca94baac69b20a03da517a7379732a0a3a4daa54697e59e59a486a5bc97339f2ca460a52598149f13a43ea5fe97059f09a43da55f98759ebfa3f1a42598419e7da3d0a46398979d07a391a41198899dada250a4ba97659d60a219a44997149d18a2e6a37a97ea9ce5a1a2a32697939ca4a16ca3d796639c83a14ba39a96339c6da135a36b96109c45a10da33d96b89b24a1c4a28895cf9bfca07fa24d95e19bc3a02ca2a094ef9b98a0fba16994119c6ca09fa13f948c9b58a07aa18b93759b48a05ba18094809a19a046a10993339c0ea005a10c93d02cd330a23176a9a73080343e357cadf43196359e36cab00032ad35d736bdb058a5f7a708a999215496008000800000008000800080000000000000000000005806bc100000c6175190b8911293582aacb233b607b763a4bfb06cb41bb59ea6c0ad18b1c8b188a37bab68ae6aaf1da452a6a8aa21ac1ea63e1c65aa67acfba911296b9daba4e7ab872b7426731818acf02b681ecea7beabd62771a922ad22a882a888adecaee09236a63eab63accb948ea060a57ea60a1edb9e8da4aea51d202f9d90a394a48a205a96899d569f6721972a8429942801aada29c4284328c9aa1228f6258e241eaaa5248c20b71bafa93da283a5fba616a762a522aa61abd99015a4a4a9c7aa5a1b4ca34aa824a92814bba207a765a80a90b0a158a601a8899509a1aaa543a72b98b6a05ca5d6a6f09836a0e4a455a6fb98829f71a4cfa5f498179f2da46da50099819e0aa43fa5c7983e9ebba318a593980d9e71a3f1a45a98c09d33a3c9a4a8978f9dfda2a7a46f976d9dbfa26ea4b6973e9d88a248a461972f9d4ca22ba41d97019d30a216a4ea96c79ccfa1dea37e963b9c66a16ca38d95ed9b01a1baa2b294449bcfa063a2f194159b89a010a25b94a29a56a0b3a136949f9a41a061a12e94059af39f3fa111934c9a9f9ffaa09094332bb22dbd2ec2a845312435b7358eae34338436a73710b1c133b336ed37dcb047a013a2bca3be21968800800080000000800080008000000080008000800000bc127d16171113180a9add9bcd13462750b372b63bb74d1b73b1dfb481b541a6e5ae04b2e6b201a5feac44b0d9b02ca5c7aa61ae97afc8a579a589acbaad17a8c1248da71eaac4a9c02a2b1dbda21babab2b471d3ba641abc82b219ddda87babd529b8a56dabacaaf3a549ab60acbd9e689e91a491a5c3216f9b2aa200a46f24b499dfa157a3c823f190869d779fff23ee20f32098203313a6297527732452ab3f285224bf1bbdaccf244195cca1aeac0aa1f0a724a946aa36a554a93aaaf59d71a5f9a944ab460db1a4faa816aab99163a467a874a9e89504a413a81fa90499fda1f9a6afa8339a58a178a632a8af991ba111a6f4a7e499aba092a53da7db996ba03ba5b4a680990fa0e0a413a68299679f69a49fa5fc98dd9e27a44aa5b1987b9ed0a30aa56a98209e8da3e3a43898c19d31a3a7a40498769dd2a277a41e983c9d71a242a432970f9d28a20fa4e096ff9ce1a1aea39196cb9c95a144a3bd95809c36a1daa25c95319cf1a084a2a394179cd1a04fa28594bb9baea02ba20594979bb2a0f0a17594809a5aa0dba1b192cf9a1ea05aa1c891bf2b422e442f7aa849316235c835b9aeff329036833709b126330037ca370ab1f422de26a4251725000000000000000000000000000000000080008000800000c2883f8ee7827719e1a4dfa563a77e2791b220b6b1b634a155b1e6b47db58ca727af5db261b336a539adcab08bb168a45aacd5af81b0d8a4a9a941ae7dafdea56aa066ab18ad1ca8e028b4a23ca9c5a90f2cdd1ca2a67fab892c112058a62bacb02c5e2134a581acc72cc12391a27facbd2cf5263915b9acb42c0b287320eeac432c0d28a92144adf52b8227a52178ad7c2a3e266b2080ad4d294b24141588ad8e27a71e7aa092ad7824929ebda4d5ad2f9eeba72fa947aca4a5b2a9aaaa4ba125a54aa942aad695a7a4e9a800aa01975fa4b7a8eba92a98f7a34ba859a9699910a301a83aa9b09917a2ffa65ca8919997a167a600a8379a42a1fba57fa7bd99fea081a5dda6b99995a009a551a63c990ca0c2a406a6e498689f90a4cda50b99079f59a485a5ce98ce9e47a471a5ad98a99e12a445a5ce984a9ed7a30da59498179e70a3dea45898fc9d0da3aca41e98c69da6a26fa430977a9d31a23aa42996359dcba1dba34395b89c6ea11ca3fc94279c20a192a2b494969bf9a062a22d94cc9beea039a2a094629a87a0efa15994229b26a079a1139400802f94e790b99190305d342e3576ad533214360737c0b0c832d036b53779b0a725a1284d28ab24000000000000000000000000000000000000000000000000a7938395a48deb188aa9ecab09ad502924b2feb57bb68f1ab8b090b41fb55ca7a1ae33b23bb3dba547ad04b1ddb162a462ac31b0c3b09da4ddaa02af11b0eaa47fa8c8adc9ae91a6761ed2a978ac90a8cd2a4b9f97a8bfaafe2c3e2461a456ac3e2d00252fa3e8ac4b2d8d253fa116ad5e2dd7265a9c7dadfa2c9d268b95a8ad902c3427081cebad2d2c3427a41e17ae7c2b3f27a61e4caee8292925401548ae5228d91e91a06bae642564952ba4a7ae93937ca666a8feac81a556a958aa93a4efa594a9acaaee9d64a543a96daa089dc1a4eaa81aaa109d5ba495a887a92c9c78a316a8fea8049c95a2dfa6aaa8c09a3aa267a639a8379a51a141a61ba8939a0ea1f6a5bfa7bc9adda06da5d0a6109a79a0eca451a6809927a0afa41fa69799f39f7ba4dea55999859f4ea4bba51599089f1da481a573985d9edda340a53498089e93a308a50d989e9d38a3e5a4b897519ddda2b2a4af96e39c74a286a448969b9cc1a1e6a32b95429c49a1a9a2cd94d19bf2a033a29794bb9bd8a049a21d94d79bf0a02aa2a294609bbda05da272943c9ceaa0a9a2629300806c9432921f911d301634e034d5ac9331c7359c364eb00d32fc35423741b0b82421263927b91f000000000000000000800080008000000080008000800000da92829699959217e3a993acc2adf0268fb1acb53db6942053b054b4d9b4e8a509aef5b116b3e1a40cad08b1e5b141a465ac6cb024b1dda397abcfaf8cb025a453aadbaee2aff6a406a73fad82ae79a6812542a8c1ab23a9a02c4a2298a5ddabca2d0c27a69f19adce2d48280896aeadd42d9128d5151eaea12d7a28141f5cae392dcc28e220aaaef52ccf28df2009af5d2c7728d5200eaf1d2bca261a1c3daf34290421c7a06faffb26b7952ea5c5af3c1454a7fda83bae05a630aa4dab68a540a558a95baa329e01a52da96caad19bbba40ea95aaa729b43a4aca8c1a9b49bd7a352a865a9c59b50a3f1a7fda80f9b53a230a796a8fb9a7ca17ca629a83a9a8aa12aa6cfa7569a56a1fba5b0a7039a0ca19ca543a718999aa02ba5aca6a4983fa0cda44ba6b998a09f7ca4e4a56998249f4ca4aca59898959e25a465a56398409edca32fa57e98ef9d72a3f3a4e1978e9d1ba3aba47097879db0a269a48296219d42a231a49095bf9cd6a19aa33095749c7ea1fea2e2944a9c4ca1eca24e94549c47a1a2a24a946c9be1a0b7a21893f19bb9a03ea2d99300806f90fa8de68ed02ff733be34b6ac9c30d934c03528af3a315435623676b028252a298927779a000000000000000000000000000000000080008000800000f38f4e9482953a1822a950ac70adb128b8b0ddb462b5662875afedb38ab413a19eaddab1dcb20ea4adaceeb0c3b12ba41dac62b020b16ca41cabb3af84b004a44caad0ae04b02ca45ca912ae52af50a4c2a49dac20ae4fa65f2832a615ab57aaca2d142633a118ad9e2e7b29a61f55aeaf2e252ab6229cae6f2e152a052418af3a2e162aad2449afd42d1e2aa724b2af422d6b29a824f1af442cdb27271f29b0892a2624359f4ab06928831c5aa277b0ad1f3aa6a3a8e5aeb7a5c8a909abf5a45da546a961aab79db7a418a93baa749d8aa4e5a812aa2b9d1ba482a88ca9a59c7da317a823a92a9c64a3fda70aa9599c1fa38ba7bca8699c62a2f0a65ea8029c96a188a628a8f89b47a129a6cca76f9b06a1c2a570a7e09ad0a082a507a76f9a9da006a56fa65f9950a09ba4ffa5e098f79f4ea4b1a526983a9f0ca46ba51f97799ed3a335a5cf96fd9d8aa307a53097789d2ca3d4a4d796319dc5a267a40497e19c27a2d8a3dd959a9cd9a195a3a295499c8ca13aa3e194199c5ca108a3a293369c42a1dfa27c935e9beaa0b4a23e92439cada034a2709300808094fa9029929d2e63337b34bbac6d30f534e735b0aff3307135933696b089243828c527eea0000000000000000000000000000000000000000000000000400187053a03691590a57fa8e4a9652548b0fab474b5c3a4fcaedab38db46ba70ead8cb18cb23ea54bacb4b099b197a4a9ab4ab005b140a4feaabdaf9cb0cda355aa15af31b024a3aca950ae79af57a3a3a894ada5ae39a44fa315ac54ad2fa7df2ae59d44a884abd62e5e2a182446ae962f122c25274aaf6d2fd72b1f27bfaf0b2f802b1f2716b0cf2e882b0f274cb0072ec52a462667b0282d91290724a7b0e62b5c27731ce4b0222a5524639f2cb1961d74a64aa94caf0ea6daa913ab9ea49da46ba9a8aa329e95a4e5a809aa739d76a4d1a8e5a9b89d44a4b4a8e1a95f9daca35da883a94a9d24a325a83fa9e89cb1a2c5a7f2a8e89c63a26ea7bba8969c00a2fda668a8879c99a17da609a8289c27a1fea59ca7af9bcda0b2a54ea7b89b90a077a5f7a6409b78a03fa5c5a6e29a5ca005a582a6849a01a0d2a436a6cb99879f7fa4dfa56899bb9e34a485a5a898159e8ba318a5bd973f9d8ea27ea44096879ce4a102a42195789ca9a160a38194739c6ea111a35294349c33a1a6a29a92359c23a15da28692aa9bafa02ba2608f459cd9a062a284900000298e588fd7905a2e5f335f349aac4930f734f335c2af7730353552367aae702184251225951d000000000000000000000000000000000000000000000000dd83e4870080cb0e53a655a988aa9d210bb0c8b487b5fda5f9ae04b49eb43fa7ddaca0b1b4b2c1a5edabb7b0a9b163a431ab2db002b18ca4a3aab5af90b043a4e9a9f4ae20b0d1a322a93fae62af32a2d0a8c3add9aef4a059a85fad6aae82a174a161ab0bad7ea6172cf72062a458ace82f2b2cd22752af2930a62cd5284eb01530aa2cca2884b0bc2f822cc928c2b0f12e242c6e28e6b0d82db02a9c2638b1d22c2e291223a6b1a62beb26831cdab11814fda6eea80faf35a58ba9c3aaa3a3f7a442a94eaa5d9db7a426a936aa1d9daca400a91caa5a9d4ca4b1a8bba96e9ddfa373a89aa9169d17a333a85ca9179d67a2b4a7e8a88f9c37a25da7b7a8999c0aa2daa675a82e9ccea165a615a8a19b95a116a6dea72f9b5aa1faa5d9a7e79a17a1d6a5b9a7ac9abba090a55aa74a9a24a00da589a6a799a39f97a4f5a52399869f55a4bea5d998c39f40a487a5b598c39f0fa466a57e98319f83a3f0a4a0970e9e8aa243a42b965d9d4ca20da4e195079d2ea234a44695cf9c49a242a4d994ff9c4ea23aa461952e9c5fa134a3ea91d49c3fa025a1128f0080e996339694931f2e7a3391343bacdd2fe934e835e4ae1330fb34163653af96205025d7235897000000000000000000000000000000000080008000800000538d258e0080260db9a6bdaa83ab301b58afd2b44eb5d5a530aec0b371b4e4a668ac72b185b2eaa4c7abbab099b154a42eab36b011b1d6a359aa8faf92b024a38ca9c4ae09b07fa207a93dae5dafcaa2bfa8cead07af6ca27ba869ad80ae15a2afa7dbaccaad4fa255a095aa6dac24a6372c1c2430a174ac1b30062d8429f2af7530aa2d962affb06e30892d352a61b10930222dcf29b6b1272f5d2ca42803b2ee2d212bf92652b2142c0f27211647b288a01ca830a9b2adaca454a983aa4fa28ea435a97caacb9e95a4eca82eaaca9e77a4b9a8fea9419e17a478a8b0a9c59d90a35fa896a96e9d4ba351a873a93c9d0da338a840a9649dcba2d5a7e1a8e49cb0a22ea792a8619c2ea2d8a677a8159cd9a18ca643a8909ba7a136a612a8069b5ea1d0a5c9a7819ad6a086a53ea7aa996ea02aa5d8a6b89905a0d5a460a65a998c9fa1a40da67499fd9e67a4b6a52f996e9e26a475a58c98f89db4a30fa539985a9d03a395a41f97db9c75a22ea40896999ceea1ffa399955c9c9da193a35a95499c87a139a345950e9c3fa10fa36f959b9c70a1b2a3059600007621a720ff95672a343044310babc82eaa34b43562af8c2f1d350e365eaf6022e126d9253e9f000000000000008000000000000000000080000000800000be8ec98e0080a0100ba6a0a941ab7724a0ae63b41bb597a5daad9db35fb4dea630ac4cb178b2c7a42caba9b07db135a4a9aa34b0f1b0b4a321aa8faf84b00ca499a9cdae27b066a32ea912ae50afb6a289a880ad93ae15a214a80fad2faeafa1a0a7aaaca8ad3ea100a74dac27ad67a162a39caa42ace7a4ee29282098a4bdabfd2fe52c9b294bb0ba30282ea32bacb19330142e482b5bb24b304b2d282ad0b2122f142cc227ffb23c2b0d242b9ca9b145a476a8c5a916aa0ea4eca85faa0fa0aaa44ca970aa239ed0a4f2a843aa949db0a4e3a825aaf59d63a49aa8bea9049eafa358a867a9fa9d1ca322a82da9079ea9a2f3a72fa9969d34a298a70ca9939d04a22ea7a1a8259dd9a1c9a664a80f9d90a17fa64da8159d71a170a62da8ed9c4ea134a600a8a59cffa0cfa58ca7049c62a02ea5c0a6169bb69f7fa4f7a5b8991c9f23a4a4a5eb98e29efea380a56198c39ed9a34fa54298429ec7a32da5bd971c9e7da3eda47397bf9d22a3bca419978e9dc4a267a44196469d6aa217a4ee95bd9cf3a18ea30a966d9c76a10ea3b594a89c55a1eaa2a4940000f81f371ec197352a463052315caa6e2ea134ab351faf072fad34c03531afe71df0256d214b9a0000000000000080000000000000000000000000008000006488768a9c83390b60a43ca874a9341b1eae48b4fab45ca556ad80b36bb4c7a5c7ab38b15db2cea2c6aa6cb054b105a336aafbafcab072a1a3a92eaf51b0e1a138a97caee7af65a1b4a8f0ad33afb3a15da87aad92ae42a10ca80fad27aef0a07ba7c2acccad06a0eba661ac39ad449e2fa6e9ab9dacb09e03a5f5aa5aac80a2031ec2a49ea833a92c2db5298625ceaebc2fcd2c7229a3b101307b2c85289eb29d2d7a29ec2317b2d81b3ba569a8f8ad39a52ba957aa59a4b3a313a995aaa19dd0a448a96eaab19d5ba4efa836aa599e1ea4b7a8eea9809ed4a383a895a98a9e69a365a873a9359e27a352a857a94e9e29a318a812a9c29d71a29ba7c0a8949d10a25da79ba8479dc6a11aa782a84c9db1a1eaa659a8fd9c53a18ba61fa89e9cf1a018a6c3a7419c9aa0aba539a7d59b61a06ba5e0a6569b52a026a592a67c9a32a0dca44aa61e9ae29fa1a4f7a56599ae9f53a49ba50a99d89ed9a32fa54298da9d0ea3a8a42a974e9da5a246a43496009d58a226a4ed95c69c34a233a4d694b49cfba1fca32795999bdba071a21093979c34a146a319940000271f251db99598290730f1305caadd2d85349735cbae652e8b34a63590ae131e68255022589a000000000000000000000000000000000080008000800000378dbf90028ff50de1a590aaffabe71c83ad34b4b5b42ca5c4ac14b33fb49fa506abf2b01db2bda336aa3fb038b1b4a18ca9a9afb2b046a220a908af46b0daa1c6a856aeaeaf15a254a8b9adedae7ea126a831ad55ae11a1ffa7f1ac17aed2a063a797ac93ad7aa08da621ac04ad18a026a6b3aba3ac839f05a663ab91ac3f9ecda539ab5aac0c9f7fa40faac4ab33a4519942a85aa942a8b323eda2c3a52caba30e01a630a8c9a92aa4b4a8e4a972a438a38ba8e1a9dd9ca3a4f7a831aa149d48a49fa8caa9659e01a472a8afa9969e15a46ba88ea95c9ee7a357a88fa9a69ebaa34da895a9699e74a32da86aa96b9e6aa320a84aa9f29deca204a823a9849daaa2b4a7dfa8869d48a24ea7a5a81e9d0fa2efa66fa80e9d8ca183a61ea8999c3fa1f9a5c0a72c9cd6a0a8a53aa7bd9b8aa039a5c3a6a59a27a0dda457a6209aa79f7fa4eda54b99d79e30a486a5e298419ec4a319a537980e9e57a3e3a461973d9e22a3b5a4f695c29ec1a28da4b495ee9d67a24da4e4947d9d2fa21ea43a943c9df0a101a49594e09cf9a1c9a30094fc9c1ea16ba223930000931f131fc5935029e22fef3083a9882d5d345735fcad252e71348c3507ae761e1f251922e89c0000000000000000000000000000000000000000000000007f80f986e780fd029da352a995a9489e34ad22b4b7b459a788ac2cb341b487a5a8aae9b002b291a3e8a932b02db1a2a164a9cfafb8b04ba0e3a8ddae28b0aa9f8aa815ae71afe69e32a8a3ade6aeef9f12a84aad71ae739fa6a7caaccbad0da026a756ac3fad759f81a61bacf4ac12a02ca6b0aba9aca09ff5a552ab62ac429f98a5a6aa17ac799fc9a579aa06ac509e74a557aa14acd59f24a5cfa987abe1a01ca543a975aa6ca045a409a95daafd9e4ba4d9a817aafd9d70a4a2a8e1a9a29d27a4b2a8caa9069e2ca48ba8a5a9bd9d1aa464a87ca9769dfea34ea86da9319ed5a33aa852a9dc9ed4a320a838a9de9ecca313a83ba9f09e8ea3cfa714a9679e28a354a7b9a8389e6ea21ea76ca8c29d31a2f3a656a86f9db5a1a4a637a8ca9c56a135a600a8569c09a1c5a5a8a76a9bc0a066a524a76c9a51a00da5b7a6f2990ca0a2a42fa675996d9f47a4b3a50a991c9fdba336a5a098b29e2ea3c5a44598fd9dc1a28fa47b978e9d6aa27aa41b97299d0aa236a44296ec9cb1a1cfa3f6951f9d80a184a3c295719ae4a0b7a3de93719c0ea15ea4649100801b9bce99f594af28ff2fde307fa9e72c393409358dad822d3d344c35a7ad9b1d8024df219c9d0000000000000080008000000080000000800080008000002c84c98c5b8bc90cd5a33ea9ada9b091c5acc3b370b4d7a5b5ab91b2bfb359a42daaa0b0b3b11fa260a9e7afe5b069a0e4a831af5db014a084a880aee0af7d9f3ba8f3ad46af30a0dda75dad7eae89a046a7eeacf6ad2ba0a9a678ac60adae9f33a61facfcac159fdfa59eab9eaca29da5a527ab59ac409e77a5baaa1face19d4ba56baae4abbf9ceea40eaa6fab7a9cfba400aa26ab139d9ea4aaa9cbaaca9ccaa480a988aa489dbca44aa975aac19d82a4fda81faaca9c2ea4aaa8d5a9289d0ca477a890a9849d97a337a871a9c29d94a31ea84ba9899de6a320a862a9e39deda32da869a9959ed3a334a847a9a29e69a323a83fa99f9ed7a2e8a723a97b9e5ca2b6a711a9649e32a254a7bca8dd9dfca1dba672a84e9dc1a175a63fa8e39c29a1e8a5f4a7609c70a069a534a77a9b28a0f1a4aca6c29af29f9ca437a67c99ba9f56a4d8a567982e9f12a46ca52298899ea5a326a523971c9e3ea301a5c396d79dd3a2bea45f96f49d70a271a48c951d9e37a21ea45b953c9e02a2d7a3bb940e9edaa169a3a8946a9d79a11fa3cb939f9cf7a0a8a2149400803d9aad997c97d6269b2df12e7aa7062c74339734a3acc42c7b33d23491aca91f92253f24249d0000000000000000000000000000000000800000008000001982e78c4191af0ea2a3b2a831aa401859ac37b337b4e8a222ab6bb2c3b353a1bea995b0b3b19a9f15a9a9afc1b0a79e8ca8e1ae3fb02a9e3ba847aebaaf599fe9a7b8ad1fafb29e5ca731ad6aae64a0dba6c0acc9ad04a06ea650ac5dad699f1ca6f3abd4ace29fdea55dab75ac6d9f98a5f1aa3cacef9f56a579aafaab869f29a51daa7bab1b9fffa4d2a908abf89dd6a486a9afaaaa9db7a42ea947aaed9b9ca4fea8fda9409a59a4aca89fa9f59929a46ea868a9bf9900a43aa84aa9b49ad7a32fa836a9559982a31ca81da96f9b7da304a8fda8ab9c20a3dea7e5a8769d3aa303a808a9b99d73a319a839a9e59d9ca32aa85ca9f59d35a311a841a9dc9d63a2cba7f4a8b79defa122a78aa80e9d6ea177a632a8b79c15a12ba607a8ab9c04a1e1a5afa75b9c99a091a52ea70a9c56a01da59da6fe9a0fa0d3a43fa6899aa69f9aa4dfa5cb99109f45a488a50799829edba324a55a98099e37a3b4a4fe978e9d60a21aa49b96889deda14ca33496f39c6fa106a35995909c3ba1caa2c0948e9c17a193a2ad941d9cc0a08ca23793039d1ba19ea2b2925c23e928042a1ea41120882af42a36a4f82a49327f336baccb2c2334fa34bdad4d1bbc22061f569c010400000000000000000000000000000080000000800000c68bd7898181700831a4a4a8f7a908116aacd8b398b4dba631ab92b2c0b31aa440a956b062b16da07ca815af6bb00e9ed8a732aeaaaf2a9c2ea7a4add1aefc9b0ea751ad85ae2d9dbaa6f1ac01ae6f9f62a667ac5cadd49ffba5e9abd3ac99a0b4a538ab5eacc5a064a5d8aa11ac00a136a57caadcab30a10da52aaa87abeea0e7a400aa57ab4fa0cba4d3a923ab919f88a484a9cbaa859e4aa40da929aa5d9dd7a388a88ba9e69c64a342a82ea9e09a36a30fa8efa84098faa2bca7cca82098c1a25aa78aa8fe9790a221a764a8179a84a2faa650a8109c5ea229a77ca8fe9cc0a2bba7e8a87f9ebfa215a868a9ba9fb7a20da87fa9d39f34a2bda715a9349ff5a1aaa7efa8ca9ec2a177a7e5a8a89ea5a1eca69ba8a99d46a17ba64da8da9cd6a0bca57ea7019c63a01ba5cca60f9b15a0c3a490a61f9aed9fafa45ba69299a89f70a412a6ea986c9f4ca4c5a5b6983f9f1ba45aa58098c49e88a3d0a4ba97099ee6a26aa48296c99d67a227a41a96e09d0ea2f9a3d695c29d97a17aa305956b9d2ba198a2da94a19c68a0e7a11895509c5aa000a2bd93e821fc28272a65a41b27e92f7730baa9592c0b34f534b6aed12c24342d354eaec41a2824f31e2a97000000000000000000000000000000000080000000800000a0831785f782ba00fda269a82fa96a9a34acd9b39fb4cea51babbeb20bb4b2a2fea842b058b12ba061a821af6cb0829d79a7fead7baf9a9859a6e9ac1fae94984ba6cbacdaad719bd3a611ad54ae1ca156a664ac75ad19a2cea5caabcaac06a238a5ecaa55ac72a1d8a483aa04ac09a1dca413aa8aabc7a0d7a4c8a939ab27a0c5a48ea9d6aafa9f93a441a980aad49e56a409a925aa139d02a498a8d7a9c1996ea33ca863a91a9611a3cea7efa82313b0a232a780a8d11562a2b1a623a8081802a235a6ada7b515dfa1eaa57fa78f0cd4a108a6aba7d092eaa165a60fa82f9a73a23ea7a7a83e9d17a339a875a92f9f70a383a8c5a95ba03aa355a877a978a042a2b6a7eaa8d99f8fa1e8a665a8c99e48a152a61aa8ba9dfca006a6c3a7069dc8a0b7a560a7309c7fa05da5eda6e49a2ba006a593a60a9ad19fb6a433a6e298509f5ea4d0a52a98a89ed5a335a57897239e0aa388a4b696c09d70a221a4a995959d0da2d2a361958b9dd1a175a33a95889d91a14ba30e955d9d59a10fa371942d9d4aa1dca26494999ce1a0bfa27892509cb7a057a2d89440233c293c2a6da4cf29c4318e327aaa852cc733f13482adb42c403424350baeeb181d243d1de29b000000000000000000000000000000000000000000000000a381af825c80898058a18ea61aa8b59e31accbb38ab4aba5f1aa92b2beb3f69e5aa8e3aff5b015996ca736aec3afa49194a63aad85aee6976aa46fac9cad1c91329da7a4ffa4c61d5aa376aa6fab6e9c2ea43caab2ab67a007a30ca951aa82a00ba3ffa8f5a9aba0fba2cda8aca97ca0baa271a873a9a39fdba265a860a9ea9daea226a816a9679c98a2f4a7d4a84199d4a200a8d3a8eb9216a304a8f1a8b412cfa2b4a7aaa8a2175ca2a2a63ba8d318d8a1c9a538a7e618a2a160a5c0a6071983a136a549a6491994a130a579a65618b8a16ea5bda62f0dd6a110a6dfa7789653a2b1a7fba8879e8ba234a852a954a1b5a23ca86ea930a12da2f3a735a925a0d1a187a7eaa8669faea13ba7b0a88d9ec9a1bca655a8ae9d6fa11ea6e4a7d79cfda07ba517a7109c60a0e7a497a66e9a7e9f7da43fa61499e79e31a4e0a563989c9efea38da59f97c39ecca330a56f97989e8aa3dca430974b9e0ca38ba4ca96cc9d9ca249a4d095189d1aa227a47b953a9c88a10fa48095519c03a10fa3b494229cbda045a2ed943e9b68a0fea1a793509b10a04ea18a92008053963795bc02ac27cb2e3730a5a7e7296831c032c0abe52a3432ee3390ad5718b92234240da6a31ec524002621a6741fcb264f288ca3ed13789bc81c9aa156a0fca829a9401b4fa461ac6aad181a7dac2db42fb5f8a4c9a84cb03eb145a0b1a608ae7eafa39fb8a5cbace4ad8b9e1ea519ac1badf69d6fa449ab75ac299ecba20fa931aa419b2ca0b1a563a72a9c46a1faa644a8e49cada24fa819a9039efea262a85ea9009edba244a83da9229de0a245a84aa9f79caea23aa84da9ea9cf8a23ba81ba9449c4ea21da81ca9169a02a2fda7e4a8ea98eba1c0a7c9a84c95d9a150a76fa8128cfda104a739a84b1264a1dda532a7a31855a121a555a66a1cdca14ca431a5471ef69f3ca247a39b1f2fa0b8a20ea4a01f47a1f5a485a6aa14a5a315a859a939a06da450a9deaadfa2b3a3f7a849aa33a2bda193a7e3a8a0a09da1a3a633a8d39f47a103a6a9a7639e94a061a547a71d9d03a00ea532a74f9c06a0c2a4caa6349bca9f66a4d1a5d5996b9feea309a594982e9f8ea3e8a4ff97c49e3ea3cea4aa97939eeea2caa45697919e9aa291a47e967e9e37a20da41d96b19daaa150a32495f99c58a1efa2e894b69c0ba19fa2ae94799ceca04ca22e94949cdea01ba22294879cbba01da23093129c58a0bda18b930080b18fa48fc4950325122c422dd3a5f327542f91306fa93a286d2faa30f8a90d26392de02ec2a90c2128296c2aaaa8d590de9ec89970a7e3a148a995aafca99fa1eca971abcba847a5a0adc5aeb5a601a640ae0fb0e2a2baa503ad7aae5ea10aa56dac87ad2fa03fa4beabc0ac6e9f18a4fbaa5cacb89f89a34caabaabda9e44a36fa9acaaea9d78a28aa8a6a99c9df4a122a810a95e9ddba1faa7f2a8ba9df5a1e0a7c4a88f9de2a176a792a8c49cd0a125a761a8219d41a2f8a64ba8879c9aa1c3a62da8649cada1bca61ea8b29bada17ba605a8899acfa16aa6bda7849904a23ea66ea7b298fea10aa609a79f98bda1d2a5eaa63294b6a1ffa528a71811c3a129a546a68c1b059e6a9f0da04220aa9b1a18531b962332a021a24fa4961f32a507aa91ab03a51aa423aaafab10a53aa373a898a9e1a2e8a2eca669a84aa0f6a0b1a538a7659d5ca03fa59ea6329c41a0caa436a6249bd19f71a4d8a5279a699f24a483a55e99ef9ed5a34aa5ac986b9e62a315a50998219e0fa3d6a41997f19daca2a4a42096a29d40a259a4bd95899de9a117a46d955a9d9aa1a0a333953c9d5ca15ba380940c9d1aa1fca25594a59ce6a0d4a28893719cb6a08ba25293449c96a04aa2f8933d9b48a032a216912b9bc69f33a154920080af8f2d8d2c8b4e25142c1d2d38a47826fe2d3a2fc2a7e225432dba2e45a8e623322bcd2c51a8051f2026c027f5a451a3d3aa8cac78a0599f89a880a94d9d9112c318ec19f3a1279cc0a40ba6e3a563a37fab95ac1da5a0a3d5abd7ac51a3caa3e8aa52acb9a1afa334aab0abb2a040a304aa49abf39f4da3fca95eab659fe1a262a9a7aaa79e23a2b1a8e5a9309d97a130a836a9059c8ea1b8a7daa86c9a6ba15ca7a5a8399a8ca144a779a80c9a93a135a760a8e799ada10fa75ea8c8998aa1f7a645a89d9972a1dba63ea8489a9da1b3a624a8239ab1a191a60ea89d9ac0a15da6dba7529a92a10ca688a7b69ae1a1e5a55aa7729ab3a1a1a559a7129a6ba16ba517a7ae9838a16ea416a64598a29fb9a5e3a5c892d7988422cd22bd9421a8b5ad81afe4a72fa107a855a947a00aa220a531a76f9b58a0b4a45da6f1996fa06ea4dea588991aa055a4bda58e9831a038a4aaa5709801a024a47fa54d98ff9f03a43aa52c98279f90a305a51997be9e1ba3bba4ac963d9ea1a260a43996199e3ca213a4da95a39ddca1baa38095639dada180a3d294209d88a13ca3b394f69c60a108a31594c99c32a1e5a2f8927b9cfaa09ca2ac92669cbca046a29091609c7ba0fca1e392149c25a09aa1ae91689ce19f12a10e900080028cf7844a87e223e02a572cffa35824e82bdf2c5ca5ea23112b7d2c0ea61921622869298ca5f210c611421394a3419fcda640a84ea2f29df9a529a763a2a39a49a39aa449a30a9cd1a4cda514a40b9f0da75aa82ba39aa06aa838a9bea159a1d1a8b8a912a186a1d6a8c4a91ba0ada1dda80eaa2ea0aea1c5a8fca9c49f85a188a884a9829e4ba129a82ea9f99ddda09ea7b0a8099d98a01aa769a8b29c8ea0bba62aa8729c96a064a6d1a7399caea01ea6a1a70b9ccaa0f6a533a7ee9acea0c5a50ea77e9bd5a0c3a5f0a63d9bc8a0afa5f6a6499abda0ada5fda6e79aa9a08fa5f2a6a79a9ca07ba5c8a6759aa9a048a59aa6399aada048a585a66699aca02ba570a6349900a161a5b8a6cd99d4a02ea54aa64999bf9be2a06da29595aa88059869996c8fb499809dc89eab94ad9e20a294a34c977a9eeaa27da4b297d49e58a3bca43298a59e24a3aaa40898909e1da38fa4d797899efaa288a4ef96a59edda276a4bf96ea9ee3a270a49c96bc9ec2a268a46a969b9e8fa266a43a96439e6ba25ca40696e89d40a23ba4dd95829deda109a49095ff9c80a188a33895979c0ea1fda25894519ca5a088a209940a9c72a01ba2cf93c49b57a0dea1d292d39b51a0a1a13194679b2ca09ca155932b9b38a047a1039100003d194b1a0a9168222529732a5ca1ff216e29ea2aaba2e2204d287729d5a2571e5325fc267ea21d18e91d741f2ea2099878a002a186a1539a2aa335a430a1e99ad1a3a7a495a12b9ca3a497a590a1549daca5eea693a12e9e2ba69ba72fa1419faea621a891a001a009a759a80ba040a02ba78aa8189f65a040a783a8919d68a022a772a8b69c3ea0dba648a8d69b36a08ea60ba85a9b2da03aa6bfa7fb9a30a00ea66aa78d9b63a0f9a550a7529b71a0dba530a70c9b91a0e0a523a7d49ab3a0cda510a7a19a9ba099a5f8a6269b6ba07aa5d0a6279a4da041a5a6a69a9a29a031a5a1a66b9a29a01ca58ea6369a3ca028a582a6149a5ba017a57fa649994fa00ea56fa618993ba0e0a43aa6d69865a0faa467a6ab988da0e9a42ca68698d99cdea1a7a34795b398619e1fa0c892fb99df9f53a1e594639d88a1a8a39896719ffea11ea4d996b19f47a238a4e596309f51a243a480979b9e59a23ba459974a9e67a23ea48596069e2fa226a43996d69de1a1fea3d995e19da0a196a30095d09d5fa154a3c694969d32a112a39e944a9d0ba1dfa26e94f29ce7a0a7a2b693969c98a044a24f93289c55a0d4a1e492dd9b25a083a19892669be89f3ea18d91819bd39f1aa1f492139b869f1aa1fc91c39a0c9f9ea06390751abc25162683a15c2c1330e8300bacc52c4b3155322dade32ddc33ce335eb106a0aa2a93a300b1cfa04e9d1fa415a9b409701c340ec4a7959c7c9d0ea064a501a126a34aa44ea7b2aae3aea1af22aec9aeb9b2abb30eaff2acfdb0b9b16cab0fab15af32b0faa814a609ac64ad5ea82f226ca679a914ac1226a3a74eab09ab1129101bafa1bda96e2bfc26542030ab152ca92597a175adc6a118aa8aab5da536a603ac2cad181d3ea528aa8bab10905ba53baab7abda9c1ea403a90faacc9859a41da849a951920aa171a581a6e5145c13e89ac69c661f9a27f725d023d9a7c6275826012345aca224df1e47a2bbae40a14ea78ca8d8acf0a11aa8afa8b4a51ea168a88ea941a0539f3aa6f7a76c9b29a0b2a4c0a52899149f3ba45aa59598149f1fa44ba5f598489f0ea439a53b99389ff3a326a521998b9e8ca3e0a4df985c9e5fa3c2a41299a99de9a27fa4b198899d95a240a478984a9d39a209a47c98f99c02a2d5a34798d49cc7a19ba31c98919c9ca165a3e397609c7ba142a39d972f9c4fa119a36097099c39a1eaa2ad96e19b25a1bea27f96ba9b05a179a24496a39bbda013a27b95e09b6ba0a2a11b95659c1da049a1c194a29b2ea05fa17294429b2fa03ca1d6943c9afa9f3ea18f94289c28a033a1c0940000831ca01e119ed12e9032f23348ae3e305434023584b1a2328b366b37e5b45a2dfe30133243b2189dff9e0d9f8d25369e489f09a0b023301dea1d7a20da22f9a379a5fba5222881ae72b172b24fb217b2d6b5d1b68eb3b9af51b34bb4a9ad66adceb097b12faae6a959ad20ae4fa807a38daa41ac6ea9b322aca94fac02acba29e41c4ca2feacdc2bb4298f2722ad742ba924fe9e0dada1285ba8f6ab30aa3aa8b1ada4ae499456a8c6ad19af252419a6c0abb3ac9c24e0a467a952aa8122d4a050a595a6ec23428a719a119fa325c02a90299d28f6a8ca29c4288027f1abbb27c5244621adac15239f15f4a02fad7ba386a85ca976ac9ca53da947aa1ea7d6a3e8a8c6a9d99f34a3c6a8b2a9539a37a2eea7dca8b3999ca1a4a61fa87a99c6a0bda534a7ea99b0a056a5b5a6789a23a0dfa44da6619a679f7ea4d1a53e9a179f20a469a5bb996d9e03a427a58299339ec2a312a543992b9e76a3e0a40f99e79d35a3b5a4d598bf9d0da395a4ac98989dbaa263a47598709d86a23fa44798539d48a21aa41e98199d28a204a4fa97c59cbfa196a3ef963f9c58a127a37396bc9b02a199a298951e9bbda030a2c895e79a81a0e3a18f957f9a46a08ca1ff946e9a3ba033a1f394a199ae9f11a12e945a9a8b9fe6a028942301881c231ea2a02d309833bc345eaf3831f634a53508b28133d936cb3743b57b2ea031893294b2d50c6f9d7ea0cc8da3193c1a1b1bb7218912211325142622a80e43106c17ba2370aecab0bcb1cab075b348b638b7d7b370b00cb4a2b473ae6aaebbb195b263aba6ac24b0acb030a995a9cead20afe3a900a05fab07adafaa3d2851a177a845ac382b792399a0acacad2bec212da4c2ac6e2ba99649a8afacb92930a450aa17acd1a7a2ac9dad1ea04aa468a9ccaae32470a10ca73ba8a924fb9b26a39aa48b245e15dc9c919e872412208b1edc190c1b87282b252f202eacb527a7204295e6ad39238ca0a4a5edad96a189a8b1a979ac51a520a9e2a985a406a57aa9d4aa149e46a4bea8f2a9019c44a469a881a9049cfca323a818a9e59c9fa21fa789a82a9c9ea19aa623a8a29b13a110a6e2a7029b9ba093a546a7e19a6ba03aa5b4a6739a01a0c0a4daa53a9a6f9f46a463a59a99f99e13a422a55799939ebaa3efa41099169e76a3cfa42b99af9d1ea39da4ee98699db9a263a4a898289d60a23fa46b98f39c20a20fa4f097ea9ce2a1b6a3a097bb9c95a13ba33c97749c30a1d3a242965b9ceea08fa282953d9cbea059a25c95d99baaa028a2d9949b9ba2a0d1a13c95189a4ea0aba165938c9ae49f14a159920985260b6618d19f4230cc33e634a8af40311b35c535ddb1df32ad365e37f8b4462fee331f34cbb10b25ff26b1268124f31c12203e20ba201e181d155a19c1a1c6a115a47ca479a2d6ad6eb066b199b195b2beb58eb69fb375b028b4cbb41fafafae1fb21bb37baccfac81b03ab11daabbab68af43b075a945a870adb4aeaba94f1bcda947acccaaa6298f9c05a846ac252c1420c3a5ffac572c052084a520ad8f2c4d2101a634ad8f2c4c22eaa329ad7a2c9725e79b2ead762c5f27561e87ad2b2c56275520a9ad332bc92659200fae582a8c25921b1eaede283523159524ae6127e11bbea152ae7b2378a048a5a0ae5aa0bca8bca9adacbfa52caa1fab45a48ca54ca952aa0e9e91a4d2a8d8a93b9c57a4a6a8b7a9f39b51a47ba850a9209cd6a2e7a72aa9db9bf7a1eba64ea8719ba2a159a6e5a7579b09a1eca563a74f9bc2a06fa5c5a61f9b6fa0f0a42da6799afd9fb7a4eea51c9a619f80a4aba53d9a109f52a478a5ec99c09e37a45da5149a889ef9a329a5c099429e99a301a57b990a9e45a3c8a43099d59db9a294a48e98d09d70a271a41598a49d2aa23ea43297679dc6a102a44f96b79c67a112a3e895149c05a15ea28c95929bd9a03ba2fb94bc9bdba000a26c950b9a57a0b1a10495819bf79f05a169920080599b9e9ada99f22f9533953402b0c930d9349635cbb126323a360e37bcb441306434b23470b149245226d4253822951e8821da216a23b316ed197f1a0a21309e4da0779f291dd9ad1db1deb146b120b274b547b6b4b324b0c1b394b470af5fae14b204b32facebaccdb07eb12eaa04accbaf76b04ca939aa8aaebdaf34a923a70bad2fae8aa9592451a8e4abdfaa6b2bee9535a88aacf52c3b2447a44aad052deb2453a4c5ad092dbf24bca2efadf32c01261d9f18aeb72cd625189c44ae4c2c6c264d1556aed72b65263d15a6aef02abd25d61bd6ae65295b242395f4ae2e28ab1e71a040af2225af9bf0a371af2d9f30a739a9b2ac32a5fba8f7a987a4eaa520a91faada9feca4dda80baa479ebca4d4a8ffa97b9e72a4a0a89fa9899d42a308a808a9c69c6ea2f0a68ca80e9cd1a17da65aa80d9c75a150a626a8ca9beca0d0a587a79e9ba6a044a587a64c9b5fa0d9a42da6b79a1ba0a7a40da6609ad99f6da4cda5109a719f45a4a5a5ca99e99e0da46ba56e996c9eb4a32da52a992a9e7fa3e8a4a798a99d18a3c4a46798279da2a290a4a997ad9c21a236a415974a9c58a117a3b795d39bbca004a22d955c9b9ba0dba1af94819bbaa00ba2dc94ee9bdda015a26f95799bb9a04fa2da94499cdea099a217940080b69a6e9bf3996a2f3d336a34aaaf463080343e3553b17a31a0359c364db4be2e5532f8330cb1072551260c276f983b12a812a2151a1a47994c9c939c5516d7a4d6a6f5a7419cd7aefdb119b311b07eb120b505b642b251af67b35eb4c1aea6add7b1d9b224acb6acd0b0bbb191a916ac3ab0f0b0c5a81fab57af4fb05da8bda962ae7daf83a856a5ccac30ae21a99e2690a73cab69ab8d2c4a22d1a427ad842df2267f9ff1ada92da027d69572ae842d1828b515d9ae512d08282d1c19afea2c5c28d81e69afaa2c6028ca209caf102c0328bf20c4af892a37255a150bb0b528e72008a229b0b9261f9c97a540b0409f55a878a936ad8fa5c4a9baaa07a5dba45ca975aab0a1e6a407a95faaea9eafa4f1a825aaa69d52a4b5a8ada9b59dbea34fa862a9299de8a2cfa7fba8919c0aa20da795a8679c37a171a619a8dd9b3aa104a6b2a7439b48a1e0a58ba7ef9a03a185a516a7729a85a028a586a6f59921a0c0a422a6e4997f9f78a4c5a58b99179f43a480a5a799ae9e21a451a56b99529ed8a30aa52599089e69a3caa4dd989e9d00a391a498987f9da5a24ba41498179d4ca20fa43297a39cd4a17aa3a9964c9c72a105a3d3952f9c3da1e6a236952b9c2ca193a29895159bbca095a2b5949b9b7aa0eea1349400806598ef976395ee2e3b336234a3ae402f1834c934d9b04c309b345a352bb3982d2333e432b2b164206228db22caa690152f21f81a7fa14596658c1b996a9fc7a198a4f8a4a7a228ad99b078b1ddae2bb020b4a9b49eb08caeedb218b46bae57ad92b1a8b213ac6dacb1b09bb1d6a9cfab36b0ebb00aa9a7aa39af41b0eda7e7a975aea4af37a746a9d0ad12af73a797a339acceada3a86c2892a554aac5ab782df7250fa1e1ad4c2eff28811cf1ae322e51292a216daff42d3d297722aeafe42d9429c32301b07b2d9729b22331b0ba2ce328452264b0e12be626fa1e96b0f7290324ff9ecab024288c1540a3a3b0cc9e33a8f9a8e6ac62a599a98caa2aa44fa572a97aaa13a0b7a4f5a815aa509e46a4b0a8c3a95e9e10a46ca864a9dc9d5ba313a814a9bb9d06a3e4a7f7a86a9dbfa265a79da85c9d38a2d0a63ba8e29c9ea167a60ea87c9c1da112a6b7a7359cdba0c8a57aa72c9cbca071a5fda6c49b81a0f7a45ba6969a21a095a4f3a5a099a29f49a494a5d998019f06a450a58d98649ecaa32aa55c98ff9d79a3eba42e98859d1fa3bda448983d9dc1a258a40f98e69c29a2e6a37c979e9cdca18da3b2964c9c7ba117a3dd95079c39a1d5a232950b9c09a19fa2a094eb9aa2a086a26694409c7fa015a2929400808c9837980497fc2d8c320734dcaeb52ee833b634b3b04530ee34af356ab3fe2dd93305343cb21620f027a02209a3e7178b1fe01a6118648d5816f58bc29c769d8f9f6d9f6aa76dabefae22b009b125b03bb4e3b4f9b106aebdb201b494aeb6ac33b14cb29cab05ac84b06ab187a917ab04b0cbb0cea88daa4eaf43b01fa806aa92aecbaf8ba767a903ae41afe7a6afa8aeadd3ae2aa730a31bac6cadeea83f2a16a165a84fac3f2e1c293b1ff5ae052f3e2b90250ab0102f482b3c2640b0a32ef02a3c2674b03c2e952a7925a7b0a32d342ab224d7b0d32c1529862221b1ab2b2e27551c56b12129ec1e88a0fab04ea3bfa80aaa05ac0ba561a96caafda1c9a471a9a2aafe9f93a4e4a802aa009f59a4c2a8d4a91f9f38a4a2a8c7a9249f7ba356a874a9849ed8a217a82aa9019e8ea2cfa7f8a8f59d5fa266a7b6a8949deaa1c8a650a8009d61a13ba6e4a7df9c0aa1e4a578a78e9cc7a08da51ba73f9c7aa044a5bfa6f89b6da025a592a6a09b4aa0efa44ca63c9be29fbfa402a6e29a709f6ba496a50b9aa39e09a440a585993e9e51a3cba4b498869d8ca257a4de97929cf5a100a4bc96739cb1a174a30696639c5aa1e7a244952b9c1ba17aa2a394e89bfca00da22494289b78a0bfa16091ff9ba1a028a2d09400007293bf95b794af2d9b3208344eae712e0834c434e2b01430df34d6359cb3862cab3151323db19f1c45252d1e6da3f411031e6614129ce5057815050b4c98f49c04a1b4a06aa5a5abe1af8fb096b0ecaf5eb429b5e7b1e7ade8b21cb488aea1ac6ab185b21dac99ab96b070b1a3a9d6aa05b0c3b093a84caa59af59b002a892a998aef0afdfa6f4a805ae35afdea5aca895adb7ae11a52fa844ad42aef2a427a4f0ab3aadd7a7a229119f33a73aacb42e622a7924adaf812f0c2cef2790b0782f2a2c5528fdb00a2fec2bc9272bb1452e352b172768b1772d1e2ae424acb1a22c9528b122edb170282e15b2a2d1b029a57fa9ebaa22aab5a44fa9a6aa5ea0e9a44aa957aa199f90a41da930aa389f95a4fda81daa5f9f5ba4afa8b1a9d59eb7a362a867a93d9ea4a20fa82da91a9e69a29da7e1a8969d5aa249a795a87f9dfea1c7a643a8ff9ca6a154a608a89d9c69a111a6e5a7609c32a1fba5caa7399cefa0cea59ea70e9c85a080a53fa79a9b0da001a58aa6ea9aa89fa3a408a6589a749f66a4bba5049a779f44a48da5c799699f09a448a52299df9e48a3cea4a198b69d6aa225a4a297349d3ea201a4ea96179d29a204a45296a59c11a2f2a3c995c09c1fa210a454952d9c76a15fa3f193509c58a073a1d0930080d09a059c1f9a822d5f32b433c2ae002ef533ad348ab0852fcd349d352eb3382bd431833144b14d1dc3248a20ada09117d11d5f1b8110958ef5892191f509cda070a4b1a430a40aab34b09bb055b02eaf3cb40eb584b16badc1b201b44aae32ac41b166b28bab52ab8eb083b13aa9ccaa09b0ceb072a8f8a940af50b032a74ba982aeb9af90a6cba8fcad24af09a687a892add8aeb6a559a824ad60aeb4a598a7abac9ead44a568a47dabd6ac13a76a272fa4c0a861abb92d7e293e2324af662f312c322705b1cd2f642c2028c5b1592f392c252806b2b42eef2afa2576b2b22c7828401f5db2bd236aa4c5a713afcfa55ca9e7aaa8a670a445a9f7aaa2a0f9a447a966aa48a07aa4dfa832aa1ca06ea4a6a8e4a9a29f12a47da897a9179f87a357a863a9b09e56a344a861a96a9e3fa32aa831a9829e96a2aaa7e0a8d99d30a21ba791a84d9d09a2d5a65da8ee9ce3a171a63aa8459ca9a11fa6f7a73b9c57a1baa582a75c9bc4a05fa50da7e79a5ba00aa5a8a6d29aee9fc0a441a66e9a6e9f80a4eba5189af99e53a493a5cb99919e14a444a57899ef9d97a3e5a4c7985a9de6a288a41b98e79c63a234a49a978c9ceaa100a41b975b9ca5a1a4a362964d9c85a12da34f969e9b29a1fda26696529c2aa102a3ec9600009d11f011c58f712cac3166331fae1a2d2b337a349fb0682e82345d35beb2272c2232d03236b12c21852687246da27216011ff31bca0a7590278a3b96270a37a142a408a5219094aa4aaf5fb043b0a8ae20b4e9b487b1f3aca4b2e3b393adbdab1fb138b2baaac2aa6fb06ab1cfa83eaaeaafd0b01da8c4a92baf43b01da752a989aeecaf97a6cea8e9ad15aff6a532a838ad4bae59a59da7deaccfadaba41ba783ac79ad53a4f2a632ac17ad5fa433a598abb2ac41a5e61467a837aa44a9712a531ff6a1d2adbe2d2b2ad225a0b0882e2f2bfd25aab1d82d87299d23c0b19128bf1a20a42eb07ea3c9a831aa5baabca452a9b3aa4da2f0a453a96faa05a09aa4fda816aa899fbda4dfa832aab09f9da4c6a80eaad69f3ea495a8b0a9559fa9a359a869a94f9f4aa323a82ba9c89ebfa2cba712a99d9e29a291a7fda8329ee5a132a7a9a8169ea4a1bba64ca8a19d76a16ca628a8899d48a135a606a84a9d18a104a6b2a7059dcaa0a0a540a7989c39a000a585a6ab9b689f58a4c5a54e9aec9e0fa472a57e99e19ef9a353a558999c9eb8a333a5dc98589eada311a57a98309e5aa3dca449980b9e33a3bba43298d49dcca26ea47397539d49a2e0a37296bd9ccba12ca38d964e9c6ba1dca2bc95369c61a15ea3259600008998089a3b99462c953171339aaeab2c22336f3467b0ba2d41340235c4b24b293e31ab30fdb0ed1c462562207ba368174120641c9098ea84f7134d0b5f0a2a9ffea2a0a3409b74a979aed3af2eaf04aeedb3a2b4c9b093ac82b2f4b344ad27ab03b12ab294aa5baa48b042b1a6a8d1a9a1af98b0eda763a9ddae21b05ea6eea832aea2afd8a569a8a7add2aef7a428a844ad4cae9fa4d3a7feac0fae62a435a79eacc1ada2a3cba667ac34ad96a21aa6b4aba9ac79a2aaa520ab59ac10a3e8a42daa0dac65a590a057a8caa934a8da1ca2a51da8feaa6f1c5ca5f5a75aab39a13aa85ea9bfa879a4d8a80aaae8a2bba4faa80aaaf79fb1a424a93eaa819f86a4fea840aaa69f6ca4eaa824aa43a035a4bca8e0a940a0c0a378a893a9ec9f51a361a87aa9769f11a34aa85aa9759fcea20aa805a9c59e39a28aa7c2a83f9ee9a144a79ba8379eb9a105a774a8de9d94a1d0a649a8cf9d3da171a60ea85f9dcfa004a6a0a7f79c76a0a1a51aa7519c51a04fa5b6a6089c44a01ca582a6ad9b24a0d4a42ba6dd9adf9f88a4eca5129a749f39a48ba5a9999d9ea9a30ca5d298949dc6a276a408981f9d62a209a41297f59c1ba2f7a3d596b99c05a20ba44e96d09ccea1e4a39096609bcca070a26894869cb4a00fa25e9400800399149ac898ef2b6531113361ae742c57337d346db0572d1c34f8345cb22229dd30b7307eb0531de324a4207da4ff11751db216549e0c914e8a27987c9b0da147a5e5a5e4a0c9a9f0af81b0caae94adb3b38fb498b028ac46b2bab36fad93aadcb000b261aae6a924b018b17ea85da969af8db05aa7fba8deae1cb05fa68ca818ae76afbfa53ca880ada5aed5a4d3a70fad28ae71a48da7beacacad2aa4d2a646ac3aada1a337a6ecabd0ac8ca2eca587ab94ac38a2d6a552ab74ac79a1bca5f5aa49ac1fa1a1a59aaa35ac07a207a679aa10ac86a218a5cfa942ab92a1b4a4bba92daba9a0bfa46ea9bdaa47a0b2a4ffa82eaac09f77a4c2a8f2a9d89f42a4a7a8e0a9ff9f1ba483a8bda915a017a47fa89aa9e89ffaa362a890a90ca0a0a350a873a9a59f5ba333a84fa9279f1da32aa83ca9109fd1a2f1a718a9949e94a29ca7d0a8289e46a24ba786a8089e07a2eea652a89a9d90a16fa60ca8189d1ea1e6a5a4a79f9cd4a077a524a73c9c6fa010a5a1a6c39b06a0b3a42fa6229b499f56a4b4a52a9a879e03a43fa56099189ea3a3ffa4c298369e53a3dca445986e9e2ca3b5a4c9974c9ef1a27da4fa96de9d77a246a49096919d28a211a4cf95329df4a1d3a39e95b49caea199a36a95849c13a193a29c940080d8908f8e8295df2a2b31103393ad242cc3324734ffaf1f2d1434f334feb1e828a5309b3046b0111aac217f1ee4a09c109a195818bd98f71157182219899cac9a779fb29f1aa5a1a8b1ae93af59af3fad79b382b4a5b0cbab34b294b366ad59aabab0e7b135aaa0a922b01ab17ca82ca96baf8eb03ea7d1a89aaefcaf07a658a8ddad26af11a508a87badbaae62a4aea712ad33ae1fa444a7a7aca1adf6a2c8a63eac1bade4a14da60cacdfac9ea1fea595ab96ac43a1b5a513ab43ac71a092a57caaf1ab80a0a1a547aac8ab5ca09ca51baa6aab2ba033a590a9bcaa99a00ca551a956aa18a1bba415a941aa89a061a4e8a8fca9d99f37a4c9a8dea98a9f3da4b2a8c2a9be9f30a484a8afa9e09f18a47ca88ca90fa00fa460a87ba918a009a443a850a91da0f9a31ea829a909a0f0a306a81aa9959fa4a3aba7e5a8579ff3a23fa790a8b09e7aa205a75aa8949e4aa2c9a643a8389ea7a186a615a8809d30a118a6dea7079dd0a0b4a584a7609c83a04da50ea79c9b21a0f6a495a60e9bbe9f8ba411a6169a029f20a485a5ed99bf9e91a310a56e99409ee7a2b4a40299a99d99a271a48398499d3aa263a40b98f99cdea124a42097cd9ca0a1baa36d96cb9c54a135a327966b9ba5a004a37b950f9db7a0e9a202930080a698f7998e96022b4031983248adc32bf1323134c1afa62cc833ba34adb130281630383055b0e8197824df1c45a40e0cf0191d12c39bbc8f1a94d896fa9a8a9c2aa193a14ea41aa823aef4ae2daf9aacecb213b44eb0ebaad4b135b36dace4a995b09fb1e6a836a9c3afbbb017a7bea800af41b09aa55da84daecaafb7a418a8b2adf8ae42a4a8a71cad4aaec4a31ca7b7acc6ad2ba366a65bac3dada0a207a6f4abe7ac9da1d3a57fab8fac4aa18ea50eab4bacfba05aa5a8aa10ac40a024a557aac3ab0ca0fda40faa6fabbe9fd2a4c4a908ab5d9fa3a491a9d2aafe9eaea464a996aaa99e85a413a944aa459e6aa4dea80caa489f65a4aea8dba9009f42a482a8ada9549f09a446a869a9819feea33ea85da9bf9fd4a33aa874a95f9fd3a340a868a9d99fa2a31ba844a9b79f0ca305a836a9949faaa2dea70da9709f57a297a7f6a8ed9ef4a137a7a2a85c9eb8a1b9a661a8cb9d5ba150a61fa8899dc4a0b2a597a7f19c52a02ca5d9a6399c15a0d4a46aa6689be09f98a405a6379acc9f3fa4b9a56799369fffa358a5b598a09e86a30ca520983c9e26a3dca4d797bc9daea287a46697e99d55a254a47f96129effa101a437962c9edaa18ea3a395f79daea135a388956e9d50a1e7a23a95be9cd0a073a2ae950080059393941996b328312fbb30d3aa3d2ae4314c3320ae0d2c0f33513416b11328fb2f25308dae591e8225be2337a47214cf1eee194e9eed8d1d0b2f95399c439ca7a0a3a188a471a753ad8aae7cae1eac51b272b3c4af7eaacdb13fb3b2ac80a97fb097b115a9e9a88bafacb06aa66ba8c2ae2ab00ea519a825ae93af44a482a78badc8aeb2a3e6a6f9ac26aee7a286a68aac81ade6a23aa61dac14ad5da2f9a5a9abb6aceca1b8a545ab62ac9fa17ba5c1aa2cac50a143a55baacfab90a016a5fba94aab4ba0e6a497a9d7aa15a0bfa469a98aaac59f9ba413a93faa699f7aa4e8a800aacd9d40a4a8a8ada99a9d18a46fa87fa9139ef3a343a850a9389da1a333a83da9a69d6fa31fa824a9069e49a313a80ea9d99e12a305a812a9759f5ba328a847a9a39fa7a329a854a9ae9f8ba317a84ba97b9fffa2faa724a93e9f42a2a5a7d3a89d9eaea105a765a82f9e6da16ba627a8889d25a133a6f8a76f9dd7a0bea585a7bd9c62a05da5eea6559c39a0f6a471a69c9bdd9fbda41ca6329b6a9f7ea4c2a5159a209f30a465a5ab99b29ed8a308a5fd983a9e21a3a9a48998b59d3ea21aa48197659dd9a156a31a97e09c63a1efa23996989c1ea1b1a20b96b89c04a193a2fc951c9ca9a08ea24495849deca08ba292940000661d721e869bd625c72c8d2e23a8dd263e2eb12fcdaa222c913397345db10b2712300130e3afe4196f20b41d709b8614331ae618e7119488c388c090c388249d69a21ea358a03ca86aaeddaf0db04bacf9b245b476b06aaadeb132b332acfea840b051b128a83ea8edae48b005a5b4a719ae8aaf16a328a7a1adceaec6a2daa643ad6fae39a284a6d0acd6ad26a21aa62dac23ade6a1cfa5acabb1aceea17fa526ab4aac9fa136a5cbaa09ac58a11ba557aab0ab12a1dda4f3a95cabd8a0bba4aea9edaaa0a090a470a997aa1ea046a41aa93eaa1e9f0da4aca8c0a9f09d95a359a847a9e19c42a31ca814a9129c19a3fba7d4a8b09afca2a1a7b5a8849ac7a267a78fa8799b7ea231a76ba8bf9c99a228a76ba8ba9db9a29fa7bfa8299f12a31ca833a987a0a6a224a86ba9f5a08da2f2a74ea986a055a2daa702a925a00ea2b9a7d5a8dc9fc9a133a7a7a8ff9ea7a1a9a664a8439e4ea13ca618a8789daaa08ea531a7969c4da012a59ea6249c1ea0c2a478a64c9b0aa0aea443a6b89ad69f67a4fba5f599c19f39a4afa5b799799f0ba443a51799e19e71a3c2a46d98049ed4a258a41b98d69d5aa218a42f971b9e12a2d9a3f096e79d8ba167a3ff95a39d2ba196a2c695439d5ba0cfa1d7958d9c4fa0bda13c940000421c591e1f982628a22f3b310cac3e2a3f329233ecaf562cfa33d3347ab24927f22f213051b07c19981f541d21a0ac0a3c18c0103c98328b0609f79356993c9b959e95a03da333a7f0ad09af65af32ac26b361b45db011aad4b133b38dab83a812b028b19fa71ca8ceae58b01ca401a7c7ad38af34a015a6ceac11aefd9e62a6efac1caecba02fa6bface9ad96a290a5fdabf8ac13a246a522ab54ac6ca1eaa47aaa06ac92a0d0a433aa96ab60a0c8a4d7a931ab31a0bea489a9e0aa509fb0a451a981aa499e78a4eea829aa899c2ea4afa8c2a94f9c94a34fa864a96d984aa307a8f2a85d93eea280a7aaa8d90cbaa211a762a8c30c8ea2bba628a8bc8c28a23ba6e8a70993eca12ca6aba7119815a265a611a8799b56a228a775a8859ef6a21ea842a94aa042a387a8bca914a187a363a895a93ba166a30ba815a9dca080a253a794a85ea093a1aca628a8639f2ca131a6e6a75c9ee7a0dfa59ca7679dc0a087a52fa7909c83a032a5c8a6079c48a0eaa475a6b99af19f9fa417a68e99599f45a4aca5c798b49ec4a331a55898249e05a38da45a97b39d7aa22da4db96809d18a2d5a372966c9dcea16ca33696639d8ea11ca301961c9d3ba1d8a25195e59c1ea1a5a23395779cc9a07ca27194439ca9a035a2609400008b1bc61c979df3281830743112acf829cf312b33e2ae302cd533cf3405b2b8273a3071303ab0a51c01221b21779ebd0fcc193d157e953c83ef110c8a7398199ae39f64a0aea3d8a6deadf9ae25af5eac6ab382b4fcafe3a9c9b12bb32fab07a8b9afdcb0caa69ba6d3ad35af78a323a6f1ac3dae35a23aa3b3aa39ac149db1963da0e2a0291921a11ea8f1a83e9a75a34da96aaa299ef7a2c7a8c4a9c99e2fa3bda8bba99c9e81a3cea8f9a9ae9d79a3b7a8bea97c9d12a364a856a90a9c95a20ba8dfa8a69a90a2d9a7b0a8fa95b9a2d3a7c6a8ae8c0da3d5a7daa8e612b8a215a751a8011846a2e6a560a71e1919a2b3a509a73219efa1a2a5f7a63518a4a1a5a5ffa65d16c6a1a7a52ba73e0d27a236a6fda7a39864a251a7baa8c19e7ea21aa862a9a9a142a21fa856a93aa282a20aa82aa952a1daa198a7e8a868a0a3a161a7c6a8c09fa3a1f6a686a8ec9e74a162a62ba8479e19a1cda5a5a7249da8a03da5e8a65f9c2ca0d1a46fa6229b709f71a40ea6249ae29e27a49da50b99cd9e02a473a57c98ef9ec9a329a55b98a49e94a3eda43e98559e0da385a4fa97b09d75a239a4c396409df9a112a45296b49c7ba1bfa3ec95839c0da1e1a2a5951c9cafa013a24b95279b54a0eba19b946a9bf49f2aa17a920080f19202907e909126c12d4d2f38a91d2808301931ccac402ab5313d33f6af6b24172c322db3ac2f208827c327cba4b61e2a26c327d9a21213711a111c3fa76fa133aaf4ab4ba8e4a56daec6afd8a9a6aa66b2f2b357ac78a82bb00cb160a8bba62daeceaf27a561a5b1ace5addba3eca4ffab05ad80a273a431ab5cac36a129a3a3a9ffaa039f5ca1bca7f9a8c79eb0a19aa7a0a8739e67a221a807a99b9ed3a249a81ca99b9edda244a82ca9d89db5a222a81ba9909d8fa21ba80aa9db9c7da216a8f1a8c09c3fa20aa8f0a82e9b16a2e0a7eaa8079af4a1c7a7cca8b597e7a122a76ba8598c74a109a671a7e21825a12ca557a6231cc7a0f1a3cfa4da1da9a0dca203a4031f02a08aa27ea36c1fd9a09fa4b3a582195ca25ca7aea81fa0e9a432a9b2aa09a47fa4e1a889aa92a3c2a217a85ca985a14ea1c8a64da841a06ba163a6fca7889f03a1b8a567a7449e7ca03ba515a76f9d0aa0f3a4fca6a69cb29f93a487a6b89b8b9f4fa48fa5739a1d9fe6a305a59399d59e6ba3d4a4ec98829e13a3b7a463984b9ecaa2a8a436982c9e79a26aa47a97f09d0ca2d1a3fc96669d8aa11da3fd95d59c48a1cda2c6959b9c13a188a29b956a9cf7a05ba21b95719cd7a0fda10895429c98a003a2c694dd9b40a09ca1149400801c8f988d7b90a8217329082b39a5b526242e4a2f5fabe226612ef62fe4ac4525e02c7d2e8fad90220c2a042b52adbf188a20b321a7acde9e76a79da84fad1ca3a8aa1eacddad49a5e8adfdaefbac20a65cae2db0eca93ba5a0ac07ae12a7b0a42dac4aadeba53da499abbeacbda416a406ab3bac29a487a326aa66abe3a213a341a972aa8ca13aa284a89ba9eda001a229a820a911a1d5a1caa7c7a88da0c3a186a790a851a0bca121a774a8519fa4a117a755a82a9ec5a1f8a63ba8109e9fa1b4a615a8d49ddba1a5a61ba83a9df3a190a60fa8a29c04a26aa6dca7199c00a23ca687a7409bd4a1fea554a78499bca10da65ea71b9636a17da5b5a65616dd9ebea177a26820279c590e111977247b9f46a091a11f23e8a3fca888aa31a4a5a486aa13acdfa6c3a2c2a811aa7ba499a244a7caa814a26ea1d9a548a70f9fdca063a5bba65b9d52a0e6a44da65e9c23a09da4fda5b89bdf9f48a4a0a5299b579f08a460a5f399cb9eada331a542997b9e3ea3f5a4a498379e0aa3caa42798079eaea28ca44d97c79d2da240a4c096889de5a100a47196799d9fa183a336964c9d53a130a379950a9d1aa1eaa23f959d9cdba0afa29b944c9c9ea07da26f94179c6ca036a24b94ec9a1fa014a201949c9a3b9f10a1d4920080908d1b90e68ed820d2280a2ab4a42625262d3a2ecfa92525c02cfd2df8aa1b24282b8c2c08ac3f209e2710297dabbf9c25a496a4aba9d0a379ab69acaaa6dd9b9da592a690a211933e9eef9f23a679a0bea87aa9bea8bfa2d6aa22ac28a88aa262aaecab16a606a3f0a93aab9aa4daa2a8a907ab1ba4eca27ca9daaad3a260a20aa931aaeea1eea16fa86ea94ea183a103a8e7a8cca067a199a7a5a837a050a136a769a8849f71a1f5a653a8409f92a1c1a637a8099f9aa1bea611a8779e96a1afa611a84e9e81a194a6fea71a9e9ca19ea607a88a9dc7a199a601a8f69c7ea14aa6daa7a89ccaa105a6c3a7659ca4a111a6d5a75d9cc2a188a534a7529b5fa141a53aa6ab9ae19e7ba58ea6199bf99541203a21ac990fa7bdac8aae12a71ba4b2a9f9aac4a203a208a5fda6e29ce6a0f8a49ea61d9cd09f82a4d5a5f69a77a068a4e0a5649a2ca05ba4b7a5d7993da048a492a54899fc9f20a45ca50999d29ffda332a5e0980a9f78a3f4a438989e9e10a3b6a4e497199e8ea25ba45397f09d2ba20fa4e596969dd7a1b5a38696609da9a161a35396279d88a137a3b095ec9c5fa1fea20a95bc9c36a1d1a2e494789cfaa080a2ab944e9cafa020a20594369c55a0b9a18e94c99bdf9f50a1bb93ba9cb19f9da0179400803e8db7883e8d5323552aed2b45a50c24582b922c03a834238f2a2c2cdea86321d428ff297ca99a1ad4214f23e3a8fe9cb9a4f7a527a8ed9fe3a7d2a816a7479da6a5bfa649a6d19b84a4b9a553a6f39d15a68da77ea6a49f71a78fa875a5a2a02ba8faa867a405a163a82aa96ba341a16fa86da95fa23aa169a86ca9aaa142a13ba840a908a124a10aa8f1a8b8a0eda07ca79ea81ba0cca0fca655a82c9fada0a1a61ca8ce9eaea076a6dfa7129edca038a6bca7d79de7a018a66ea7359de3a0fba54ea7079ddfa0dda50da7d89cd8a0c0a5eca6ac9cd5a0b5a5e9a6919cbba099a5d4a6699c9ca089a5c8a64a9c9fa06da5a0a6249c9aa062a596a60c9cdfa08fa5c7a6ff9b2ca184a5dea64f9b0c9ecaa25aa4eb98af8d9c99c19b8f919d95c09a7a9cd7935c9df5a0e6a1b0973a9f8ea220a4e198319f2ca38da4ff98319f61a3ada4f398e99e41a3aea4bf989d9e2da398a4a4988d9e02a385a47b98939edca270a45598ad9ee2a268a4dd97979ea9a260a49c975f9e7fa263a45797fe9d4da251a41f97a69d1ba22ba4d296539dc7a1e7a38896fe9c70a16ea325968d9cfca0dea2b295289cb0a079a25c95f59b67a00ea2af949f9b41a0cea18794b09b37a079a1df94289b18a070a1f393139b0ea019a160920000d117c4187090d321d428172a5fa4b5212c299d2a0ba6e22053285629a0a6a11e9425472711a72619cf1f852128a78f974da0cba0b4a6009c17a4e6a4f5a5399c80a42da556a5609ca7a4a0a5d8a4e79c33a55aa67fa4809d8ea5cba610a4569ee9a54ba718a3129f4aa6fca737a2c59f7ea61aa866a1f49fa6a622a8e6a010a0a4a61ea828a00da070a600a8659f07a034a6c1a7819e09a00fa678a7c59d13a0f0a532a78d9d45a0e1a521a7659d6ea0cba52ba7389d7ba0cfa521a70d9d84a0bba510a7e69c69a0a3a5fca6bd9c65a08ca5d6a6969c5ba06fa5b5a66b9c3ea056a5aaa6459c4da03ea5a0a6219c58a03da5a8a6ff9b67a02fa594a6cc9b6ba007a58ba6069c70a006a57da6209b74a002a561a6619a889dffa298a478982499d69f2ea19b95df99429f67a0b895819c4da1bca21e98929e21a227a4f898fd9f55a245a49798c59f60a243a48098299f55a23ba45b988d9e57a228a44198349e4ba228a4a097db9d0ea212a44097b79dcea1d3a3df96979d9ca191a30a96999d67a15ea3d0955a9d3fa12ca3a6951b9d0ea1f9a26195ce9ce4a0b4a2c0948d9cb4a051a29194349c5aa0e7a14794cc9b21a077a10f94669bdf9f2ca1ff92629bbf9f02a19c93ec9a789fffa00594e29a0d9f83a0579000000920f622f999032c6d2f783080ac352c433002312fae1a2ca0301331b7b0c52c4e3140326cb46f279829372ce5b4111f72232b1b13b59ba1c3a571a51fb488a85aacddac46b3d1aa3aaf03b0d8b1e7acb1b048b116b01aace7af9bb0f3ac11a96aade1ae34aa6ba0eca900ace2aa90258ba858acbead94275fa404a9e6ab8729af1fe59fb9aa982a81269522b4abdd2b9c28c41aeaaeb62365a671aa56ab29a56ba9a8a992aa24a7ddab98ab94aa28a8e2ac1cad11a7f1a64cacdaaccc9cfaa4fca97babc7a1d811b4a0e1a40ea72428a4279324bbad3928c125a41ea5b0ff255a229415f8ae4522089b98a33aae7ca1b3a532a7eba95fa270a501a7afa2cca0c0a551a755a01fa14fa7a4a80a9e49a03ca5cea6ef9a14a050a47da59099299fd7a3f7a47699759fefa33ca5f099779fdca30da5e2999c9e75a3cea4e499479e26a3a2a4a5998e9dc9a26aa44b99539d76a22ea45d99119d2ca2f7a30f99d29ce0a1c1a3d198a69cb8a192a3a1986b9c9aa163a37b98529c81a144a35998279c56a115a338980e9c43a1e7a2b897f09b29a1bca27b979f9befa06ea2b196689b97a0eaa1bb956d9b38a068a14495a19b0ca015a10e953e9b18a02fa11d95369b27a025a19295099ada9f15a190952e9c2ba04aa1e99500801f92fd986790812d3f317d3235af342f1b331c3482b1123099337934bab3f630c434a33567b60f2de630bd31c0b6f11df621db22e5b656977da4389c3ab69fad61b12db218b63db097b37db439b6fcaf7cb342b459b32daee0b1d1b2edaf68ac02b0c6b04aacc8a89fac9dad38aa4aa078ab05ad1eaca2259fa885abe6ac362a8b22c39c5dade82bbb2abd289cadfb2a2627681ed6adc02a6da096a9dead2e2556a642aac1ace2a6a6abb2ac1ea82fa5c1aa1eac3ea136a442a991aa841151a10da70ba8e11a8d96dfa1eda3d49b9628ec25dd2350ad9d286725451fefaec925221c2e9f52af1e1faba24fa60cafada4c6a889a988acd4a66fa822a9aba7dca3b1a7aba8d2a2b8a26ca86fa9369e0aa386a89fa99b9c9da176a7cba8299cd6a0eca5a5a7459b4fa02fa5bca6c99a4da0dca41ea6d59ad59f7ea4d8a5ac9a309f26a46ca5169a9a9eeea327a5329a4c9eb4a313a5f399179e68a3dda4b899eb9d2da3b6a47999c39d00a396a44899999db6a26da410996a9d81a233a4da98409d40a209a46198f39c15a2d5a33698a59cb2a160a3e4974d9c58a1f9a2ee96009c15a199a29796399bc3a01ca23e96b39a68a0b1a1e995449a30a05fa14a955f9a1aa00ca1a1956d99989ff4a07f94ad9a5c9fc2a01b940080ee915d98708f622e19328e33f3af33301e34b1344bb2b6304034f8349db45831ca34bc3536b7502e7231ff31a9b75629762c212d27b7a1a43fa8eea86db6fbac7db0c9b09db6adb0f7b3aab4b5b6a4b024b4a6b424b430af7db24eb3b7b07bade1b088b1a4ad02ac95af57b028ac88a88badc8ae38acf29137aaa4ac74ace928e2954ea50ead602b35250297b5ad8a2b602379a0d6ad402b64164ba7b1ad7b2b029699a85aad942a951558a6f9acf22767a0fca622aa6aa4baa9e3aa22a284a0d8a66da869a1aa26ca1de59dcdaa5b2858234f1597ad1628c820189c42af40261915e4a2eeaeae20eca38ba7eeae2ea4e5a8dba958ac47a503a9a8a9a2a599a4dea8c5a995a1c7a34ba84ea9669eb6a332a843a9b39d63a313a83ba9459d57a232a7a1a8e29c6fa189a619a8bd9cbea0ffa5d5a74c9c80a095a555a7e99b6ba032a5a8a6d79b05a080a4a7a5ca9a839f24a43ca52d9af09ef3a30aa5ee99829e97a3dca4019afc9d54a3bda4bc99909d05a395a47d99399da2a25ca43099ed9c54a23ea4f398c29c16a20ba47d98b79cc8a1b9a34398af9c81a127a3a097889c1ea1c2a2a296769cdba07ea24b96489cc1a046a22996ea9b97a011a23095be9b92a0c1a19495f69934a095a16b94d59aa09fdca0069300800b954d9a7090f52ec232ff3368b015301a34ae343fb284303234db3469b4a2307f342435b7b6af2f63330b3436b7b429792df42e15b791202d211f27beb6bbac63b0c3b042b65bb068b359b450b689b021b49ab4f2b377afdfb2eab3d4b0c8ad4bb143b247ae62ac20b0c5b067aceeaaf7ae03b0f0abfaa6d3ac0eaedeabab215ba81eab70acec29f3151fa64daddb2b8221a4a4cdad202c78214ea5f5ad4f2c33211fa508ae382c41220da4d2ad282c4e24c89eb6ad2a2c2e262d1519ae842b1826951b2daeb02a7c250a1588ae932933241195b5ae682885206fa0ddae8d26231516a44dafe0218da29aa639af1ca3faa8fda937ac09a6cfa9d9aaaba4c3a5f9a821aaf0a056a48fa89ba91a9f45a49ba8b1a9569e2ca472a872a9e49dfba2bea713a9029dfba1eaa652a85e9c8ea15fa6eba7469cd6a0e4a544a72d9caca05aa5b1a6099c5ba0e2a420a6489bfa9f9ea4cea5e39a4a9f6fa498a5ef9af59e42a45fa5f69aa39e17a43fa5b09a719ed6a30aa5569a1e9e71a3e6a4589afa9d1aa3b6a4be99e19d9ea28ea41099d29d4fa262a48d98a39d1aa241a42298a09dcaa111a45697c29c6fa101a3e4961b9cfaa03ba2f1958c9bb5a002a2bf95509baaa0bda11d96e49923a085a14995bd9b31a05aa1d1910080929ca59c9e9a422e26327a33aab0c92fe93382344cb24f302734bb344ab4b730a63472358cb6142e0a32ec32a5b6612c59302d314db6f91cd920d62103b64da911ada2ad08b653af95b287b3f1b520b0bdb36cb4bdb30eafa5b29fb3b7b09cad5ab14db26cae87ac6eb028b1a2ac87ab54af45b0b1abc6a908ae32af2fab69a53eac7aad5fab28257ba604aa66ac0f2bc51594a680ad802cba223da442aea02c0f2452a48caeb92ca724b2a289aea72c3125f3a07dae6b2c1b25c89eb9ae012cab25e19bebae3e2bf22426952baf5c2ae924189549af2429d921439eb8af0028c21b8ea114b00e2448a1d1a58eaf18a5dca8d4a96eab22a50ea91aaa29a4efa4d2a8c5a973a080a4bda8bda9ae9fa7a4c6a8d5a9ed9f88a4b5a8a4a9fe9e2da307a805a9e99deda105a78ca8179d3ea195a675a8b89c6ba145a617a8ba9c01a1b6a54ea7849ca7a045a584a61f9c55a0d9a419a6969b02a0a3a4f5a5959b8f9f62a4aea52c9b289f35a47aa5cf9a949edba342a5039a219e81a30ba5ae99da9d41a3c8a41f997b9de9a290a4e198079d7ea266a44e98829cfaa1e7a36a97339c48a1f3a22a96d59be0a085a2c195949bb2a064a2aa959f9baea058a24995039ccda026a26d95329ba9a041a23595679cbda066a2b89500807d9ca19c8a9aca2dfd312c3375b0032f6b334034fcb1932fcd3384342bb4f62f1034b93412b6782eff3163330cb6792488287829ecb550a651aabcab9eb50aaca1af90b089b5daae92b2dab372b56baf55b347b47ab369ae5cb272b3bab036ad4cb141b238ae5dac7db051b187acbaabd4afa6b058ab8caaccae05b07baa41a9faade7ae48aa92a444aca1adbfaa0f2755a67daa73ac5b2c38227ca5f5ad3a2d132626a1e1ae5a2db4264e9c25af392d582793956eaf072d4c278315bbafa32c4327161cdeaf372c3c270f1c17b03d2bd125551526b0022a8123e29b4eb08928d41e2da391b0a32473a1b5a620b030a4e8a80baa7dab37a5f4a814aa87a3cda40ca918aae8a1cfa4e1a811aaa9a07ca4c1a8eba9e49f46a4b4a8ada9129fc9a34ba861a9609ec6a2b9a7f2a89a9df7a1dba674a8ea9c56a15da6ffa7759c46a1faa59fa7689c53a1dca57aa73a9cefa075a5e8a6ca9b5da00da565a6a69be19fb6a402a60e9b2e9f73a4aaa50b9bc89e36a462a5aa9a689e04a427a55c9a0d9e9aa3f2a4049ac19d44a3ada4b099779ddda26da416992f9d69a22da48698d29c13a2d1a30798839cafa135a38997379c5ba1e9a22e97039c1da1b0a209960e9c02a15da26b969e9a95a04ca2df95529b36a08ca10b940080869b639bad99a02dce31f43219b05c2e0e331f34a8b14b2e0c33f73367b3232ec533ef3331b5a02aed3132309bb57f25ca2dc12aa6b5f2a15e99c1a5feb4faa8bdacb1adc7b423ad20b1ffb166b414ae6cb276b38db2baadf8b129b384b0b7ac05b1f3b1fead25ac5db036b17aac54abd2af98b09dab37aacaaeffaffea98ba925ae44af87a9e7a887ad63ae40a95aa303ac53adeea93b2767a692aa62accf2c5d2395a346aefc2d7e28c51575afe82dd8283a1ffbafa12d7528121f26b0632dc828de204cb0f32cbe28c62086b05d2c0628b720aeb0352bf2255915dab09a292a22779eecb0d8242ea22aa6efafd3a42da93baa76a9baa497a911ab58a3e5a430a979aa16a1a1a4d5a8e1a95ea064a4a6a88ba918a024a457a853a98d9f82a31ea819a9fd9ee2a2d1a7e5a8799e6fa239a77aa8409e22a2aaa623a8a39da7a13fa6eca7399d21a106a6bba7fb9cd1a0bda57ea7a49c85a064a5eca6509c43a0f9a449a6c99bc69f8fa4e5a5c19a2f9f4da491a5f299b59e09a43aa593993b9e9ca30ca5f198ea9d45a3d4a4b8989b9dfaa2a7a4d398419da7a249a49998e09c31a2f7a35398ad9cd5a17ea31e985d9c60a1dfa2c197079c20a1a2a292963d9cffa075a27996199b96a083a2a995789c82a039a2fa96008092971a961597402db531fc32beafdf2db732df3344b1f32de732fb3305b3602e2334613464b5f12ac631a9308cb57326612da82b55b5809b0d20999a30b524a826acf4ac1ab5bfac07b1e3b19ab4d4ad8eb2b5b38eb246ade1b1f7b245b043acc6b0c2b1b2ad7eab33b007b161acc1aa91af84b03dab29aae6ae0ab01faa95a936ae63af63a914a9bdadc2aec6a8a0a89badaeaef3a8c8a431ac72add7a9e62744a43ea955ac072d2b26ed9b10af4e2ee629712256b0772e5a2aa52495b0112e052aab24cab09f2d032aa524f7b00d2d5229ca232eb1462c3728051f5db1392a8623b69e16b1c0202fa505a8baaebfa5f8a91bab2aa747a561a983aa31a1ffa433a952aaf4a076a4c1a8f1a9b9a043a4a6a8b1a971a013a490a8a7a932a08ca34ea85ea9ba9fe1a20ea816a91b9f75a2b3a7eba8069f48a23fa798a8769ebea171a615a8ae9d2ea10ba69ba7449dd5a0b6a53aa7ec9c81a065a5e6a6999c58a01ea597a6899c3ea006a567a65c9c0ca0d4a422a6259c869f99a4dba56f9bee9e44a46ba58b9a2c9ebaa300a5ed990d9e0da39da41d999a9d7aa243a47a98cb9cfda1f7a3db97899cb8a182a39597399c4aa1eca2a296159c0ca16ea284950e9cf3a007a20895579b93a0b3a158941c9c9aa0fea1479700008c97c499d295272de831cf32b1af8b2dec32053478b1e22dfb32273457b38d2d4c33e53369b5db28ef30112f84b5ef22ef2c092887b50c9b0f20faa0dcb4f0a788ac0dade9b4afac3fb128b2b9b49dad8ab2e3b3ccb20eadf3b10fb359b03eacefb006b2caad14ab37b0ffb00aac5faa7eaf74b0c9aadba9dfae14b085a92da91eae5eafc9a8c6a8a8adccae3ba883a84ead62ae91a715a81fad19ae6ea7fda55baca4ad4fa8862240a8ddaa15ab4f2c04253ea06aae182ea7296d2353b0902ed02a58251cb1452e832a682571b1b42d272a9a248cb1d02c3b28531fbfb17829511ebaa2dbb0399fd0a74ea950acd8a45ca97aaa18a4e7a478a995aa8da0c2a437a93aaa9ea0b2a415a93eaaa7a080a4f4a811aaaba050a4a5a8a3a952a0c0a348a851a95b9fa7a2f9a71ca9af9e77a28ba7d7a8889e29a2fda65ba8e99ddca18fa61ea87c9daaa14ba6fda7259d4ea1f7a5b1a7169d12a1e9a5a6a7ee9cd5a0bca571a7bb9c7ba075a52ba7759c18a007a59ca61b9cab9fb2a40ca6969b779f6ba4bca5c69a3e9f34a48ea5729a0f9ff0a330a5b399cc9e18a395a41799899d3aa20aa40098e99c1fa2d7a3dd97e39c08a2caa33f97779ce1a1b6a32896be9ceda1a6a334964f9ca8a161a381954c9c1ca159a30097008062959094fc94f52c8331d63260af422da432e1332db1642de4320c341fb3c62c0133cd3350b5cd284b30532f20b57e25bc2c542bdeb4679a2e99c4a0a8b439a866adb6addeb41bac47b1dab19bb42cad5eb29ab37eb297acb1b1f5b242b0b4abd3b0eeb191adf0aa2db016b112ac55aa53af79b0c5aaa0a9c2ae18b091a916a91fae6fafd5a874a887ad98ae2ea845a843ad71ae9ba71aa80aad23ae49a73ba777ac71adada6aca59eaba5acf4a6269c40a951ab6ba92d280ca05da7c7ac242c7825b59d6aaf302d06289c1bb5b0ec2c78271115feb05f2a3d212ea279b02a1f62a5c3a755ad50a4dda80daa53a78ca428a9d1aa43a214a56aa9baaad3a1b1a40da94caa27a167a4d0a819aa85a045a49aa8cda936a0f3a373a88ea9f09f8ba364a859a98b9f20a33fa834a9869ffea212a812a90b9f6ea290a7c3a8659e18a21da77ba8e19d14a2c6a64fa87a9df6a151a618a8009db2a1fca5bca7af9c64a190a541a74f9caba03da5c1a6059c34a0dfa465a6789bb69faea41fa61a9b3e9f6ca4b9a5b79ab39e32a47aa55e9a4e9eeaa32fa5af99c69d66a3e0a45099439ddfa28da4a798db9c43a232a44998759cbca1e9a30198479c8aa18aa35897519c7ea127a34897d29b32a1f7a2f796889c26a1ada2ca9700807b932d94b991082c2f31573247af942c2132333322b1f82c8832cf33fdb2d82cfc322334fcb47e2aeb30e530cbb4af25ea2c5c2cc9b4d69e609f95a3a6b456a820ad2dae63b4b7abccb0b5b188b4c9ac46b2adb365b24cacabb1dab2f7af2aabc2b0cdb140ad43aa16b0f6b0d7ab99a922af51b040aa59a9a5aefaaf29a917a945ae81afaaa881a8a4adb7ae03a8f6a701ad0aaee5a683a7afacb6ad23a6eda661ac69ad72a599a62bac07ad8fa5d8a59dab9fac5aa563a43faa01ac2ea643a10fa962aac4a8281cf3a69ba809ab372034a661a808ac609b3aa8b2a961aa88a470a9c9aa87a68fa4a9a929ab4ca20ca564a980aafaa0f8a4dba80eaaf6a097a4c9a8f8a9c1a05da4a1a8d6a978a03da49da8baa986a014a481a89ca94da0e5a35ca869a91ca061a306a816a9cc9fbda2aca7faa82b9fe0a153a7dda8069fcca112a7aaa8a09e9ea1bfa648a87c9e66a153a604a8029e1ca10ea6caa7f59dd2a0d2a570a75b9d7ba055a5fda6db9c0fa0caa440a61c9c3b9f46a496a5439bcd9e00a45ba5779a819ed1a32fa5ef994a9e8ea311a56c99309e7ca3f8a452991c9e34a3cda4d498419e39a3a9a48c98e29dc1a26ca44b984e9d23a2e2a37497c59cd5a12ca32997479c8ca1ffa2e296499c48a106a3199600809497d096cf939d2b46319532e9ae532c15326533f2b06e2c8532b633dbb2c62bb6321733e6b482276330552ebfb43d255c2d942bc0b44b93321fef994fb48ea7f5aca8ad2bb4faaac6b0f1b14cb457ac4bb2b7b30eb2c6ab6fb1c2b2c3af67aa86b098b113adc3a9c4afbeb093ab36a9d3ae31b014aadca844aea9afbda876a8c8ad14aff8a724a856ad86aeffa6d0a701ad1dae39a66aa7baacdbad33a6f3a66bac72adcba59fa63cac22ad2ea535a6a7abaeacc2a419a63cab54acaaa434a628ab75acc5a4fea529ab6eac66a4efa5adaa25ac2aa471a557aac8ab96a2f8a41caaa6ab10a25da5c6a923ab4ea14ea56ca9a3aab5a1c2a44aa978aa54a1b9a40fa932aa06a16ba4e1a8fca9fba01ca4a0a8aaa9e8a0aaa374a882a99aa055a35fa86ea958a0eca22aa835a9f89f9fa2cfa7e0a8ab9f33a284a7b1a8359fe7a13ca788a8c79e9aa1f6a658a8b09e66a1a9a62fa8439e13a14ea6f1a7cd9dbfa0e2a57fa75b9d68a08aa5fda6f09c4aa039a5b2a6659c3da010a561a6379c26a0cea41da69c9bc99f81a4d7a5c49a329f26a474a5e599549e71a3f6a40a997b9d9da24ba44098239d2fa2d3a3f297e79ce5a1bfa3a797969cd2a1dba32597aa9c8ea19ea35d970d9bbfa07ea2ba95319c60a0d7a10f9500807298009754940e2b243139329bae292c1d323d33cbb0432c52327a33a6b24f2b4e32d332bfb4f0269c2fcf2db3b425203b2b6c2599b4829fe99e75a636b4d6a759ad84ae15b496aaf2b0a1b1f5b316ac0eb24ab3d2b137ab63b19db284af15aa7ab07db1cdac8ea9bcafbcb02babfaa8e6ae43b0d1a998a852aea0afe9a846a8baadebae12a8efa732ad50ae0aa756a7d1ace1ade5a508a77cac78ad7ca574a622ac0badc8a413a6beabc7ac8ea4f0a58cab8cac1ea4afa514ab45acb9a372a593aa01ac2da34da534aab9abc4a250a523aa49abe0a23da504aa1fab41a248a5caa9d2aa62a2f0a463a990aad8a19ca42ba943aa70a13ca4c2a8eaa94ba11fa491a8c0a902a106a475a89ba9d1a0e6a36ba884a9e3a0c4a35da877a9b1a080a34aa861a96ea024a334a839a956a0cea206a81ca900a094a2c4a7e6a8739f61a276a7baa8fe9e1ca219a77ba8d29ee6a1bda644a8559e63a140a6eba7c09de8a0c2a56fa73e9da9a056a5ffa6cf9c42a0f3a476a6699c9c9f81a4eba5a79b179f2aa474a5aa9a869ee5a32ba5409a589ea6a304a5bf99469e71a3f7a4ef98489e0ea3bfa47198f49dc7a26fa4fc97829d5ba22fa49097479d2aa203a4e696249deea191a33497699c91a160a35c962e9c1ca1f7a207950080f78d678965924e2a9430b83136ae642b9c31dd329db0f02b373284338ab2102b1f32003392b4a126702d742d64b4c81fd626612550b4a918cb1e3d20ffb34ea596aba7ac0ab43aaab6b0bab1b7b3bfabe8b15eb392b197aa22b161b2fcae89a938b043b176ac09a97bafa4b0cdaab0a8c1ae2cb078a952a807ae69af49a80ea876adc1ae67a7a1a717ad5eae90a62ca7c9ace2addaa5c1a666ac62adcca46ea620acfaac3aa414a6e3abc1ac0ba4d0a560ab77ac12a39ca5dcaa26ac94a280a585aacaab26a274a523aa95abe2a16da5e0a94eaba2a146a58ca9bcaa52a1f7a432a965aa53a1b9a40ba941aa16a170a4daa8f9a9d0a04ea4b4a8c5a9e3a02ba49fa8aea9f0a00da46ea88fa9eea0e5a365a865a901a1e6a350a854a904a1c3a334a835a9eba0ada30aa813a98ba072a3d0a7f0a83aa046a36ea7bda8bf9fd0a223a781a82e9f66a2f8a652a8169f11a2ada627a8a49e77a153a602a8289e14a1f9a5afa7b09db3a0a1a55da7059d5da047a5f3a6709c01a0d0a47da6b39b7d9f62a4f2a5039b069f00a472a5679aa49e57a3fea4ef991c9ec6a2a6a43299839d59a255a4a798239d24a23ba43e98f59ccda10ba49c97dd9ca0a1a6a3fb96ce9c6ba127a3b996949bb1a0c6a2a9956e9c7fa050a2fd920080c09c689c93985629f72ffa308fadc82a6a3177323fb0222bab31eb32fbb1f8297f314b3237b4c925ce2e522d1fb4a61de12786230eb46e9ea1a32ca68fb32ea519acbcac55b346a944b030b133b38aaa68b1b9b24cb103aadeb022b285ae19a908b015b122ac9fa820af67b0dfa966a875aee5afaba823a8e3ad58afb8a7d8a762ada7ae3aa64ba7efac01aeb6a5b9a680ac82ad4ba514a62cac20ada1a4c0a5a0abb8ac4da496a529ab75ac97a36fa5caaa20ac32a343a576aafaab68a228a548aaaeab1fa2fda404aa5aabdda1d1a4bba9fcaa34a19da466a9b4aae6a090a434a979aaa5a082a4f9a833aa71a068a4d8a8f9a991a05ba4a5a8c5a9aea046a476a88fa9c9a0fca349a85ca9cca0bfa338a856a9d7a08aa33ea847a9d5a053a324a840a9afa02da309a824a953a0b0a2dea71aa941a084a2b3a7ffa8ee9f48a26da7cfa8629fb6a101a783a80b9f75a196a639a87a9e14a114a6f1a7da9da4a092a558a74e9d36a016a5b3a6959cff9fbca448a6069ca69f78a4dfa5399b619f2fa4a0a5029a079fc1a341a54099769e46a3eea4a0980a9eeea2aea46898989d8fa26ea4ce97929d33a22ea47497c29ddda1cca3a196d69db6a156a38796da9d97a103a3fa954a9d30a1cea29c95f59ccca045a24d9500802c9aa69aab9816281f2ed62f22ab6928a32fa4308fada829e130ef3134b1ef28ea306c31a3b3df26e02e332eaeb3a820ed2982288cb3529a089877a4feb265a413ab6eacc5b2a7a8aaafb3b08bb225aa28b139b2dab0b0a9e3b008b253aebda8ddaf00b188ab4da8d5ae37b006a9fba743aea5afeca791a7a4ad04af7aa6e8a60cad4eaecaa55ba693ac91add9a411a632ac15ad72a4c7a5c8abb3ac20a4ada54fab69ac3fa36ca5faaa38ac70a24ba57baa03ac16a2f7a41aaa78abbba1d8a4c6a918ab05a1b4a47ba9abaac4a094a436a962aae5a070a4f5a815aa4fa059a4baa8e2a984a033a4a0a8b6a96ba00aa47ea889a99da006a457a860a975a0e6a336a850a99fa09ba332a838a9bba06fa32ca82ea905a147a32ea833a9faa05fa32aa845a9e9a077a316a837a9c8a014a3eea726a958a073a2aaa7eda8e49ff7a148a793a8939f84a1d3a640a8dd9e5ba162a61ca8479e1ba104a6d1a7cb9dd7a090a53ca74c9d59a036a5b0a6a59c28a0dda44fa6229cc69fa8a4ffa5739b759f6da4aca5b89a1d9f2ba45ba5539aca9ed1a3ffa49d99469e14a3a0a4d798c29d3ea214a450984b9dc6a13fa30898c59c6ba1f3a2a7978c9c34a1d2a20d97b59c0aa199a2e8960c9cbda09ba2a496369ee9a0dca1ba9600005e8c101276956827a32d752ffeaa3e25f62c3a2efdabc2289b30ce31e1b08a296431783237b44426152e522e04b4a8202829f7280fb4ea97b29ee9a203b4dca485ace0ac9ab3faa850b056b188b364aa98b1edb263b196a9dbb02eb215ae7fa8afaff0b0a0aacda79dae0fb02fa852a7d3ad51af16a6bba660ada2ae3ba567a6fcac21aeaea400a65aac56ad70a3b5a5bcabbbac24a384a558ab79ac47a246a5e2aa38acfca1fba46eaacfabb1a1e1a401aa71ab68a19fa4a1a9f8aa2aa166a449a98baaf0a03ca404a932aa65a004a4d3a8dca9b89fd0a388a88fa9409f75a32ea825a92b9e22a30da8faa8fa9d29a3eaa7dba8d79dffa2b7a7bea8b19ddfa27fa79aa81d9eb3a26ba78ca8109feca29fa7c9a842a055a316a822a9eba036a336a84ba972a195a22ca843a9b8a196a2fba730a90ca143a2a1a7e3a888a0d9a13ea798a81aa09da1b5a648a8439f6ba12aa60da8439ef7a0c0a58ca7c89d71a04fa5d3a60e9d33a0fba46aa67c9c06a0b7a454a6029cc99f85a418a64e9bcf9f53a4cca5919ac79f27a491a5f6996d9fe3a328a5aa99e29e4ca3aba4f0981f9ebba24fa453980a9e79a216a42898f79d18a2d0a37a97c89d65a13ca3d796869ddaa085a2ec95b79d56a0aea14a96759c32a00da21f9400808b8da90c77946927592e273063acd328563065315aafed2962319032f0b1c4295e31c3327fb4b425102ddd2d4db41c1e6d2708251bb4609c3f98aea4a1b35ea436ab6eac48b3c0a855b049b14eb319aa90b103b341b124a9c8b0e1b195adfca743af9eb09ba979a747aec1af3aa6e1a691adfbae74a439a6e8ac30ae63a3d5a567ac80ad60a2cca48dab9cac26a2a2a4bbaa11acf5a19ba455aa9bab28a181a4eba93aab7ba084a4b6a9e0aad29f73a479a99aaa7e9f73a426a93daa6c9e4ba4eca8f7a9249e23a491a898a91f9df1a353a846a9489c8aa30aa802a9c2994fa3a4a7b7a84d9618a36fa794a84396eaa211a771a83696c9a2ffa650a8899985a295a614a8a99a75a29aa62ea80b9ddaa231a792a8439f3ba30ba81aa9a4a089a393a8bea9d4a186a37ba8aaa937a26aa315a843a9b8a191a374a7aea826a16fa2d3a63ea864a015a139a6cfa75f9fcea0d0a587a73a9ea3a09ca54ba7a49d8ca04ea5eea6d49c59a006a589a6509c1fa0bca428a6449b6e9f69a4d6a5669ada9e16a461a54099849eaaa30fa5ec98239e0ca3a3a44898bb9d89a231a403987b9d08a2cda37c97349db1a15aa324970c9d6ea102a3e296af9c27a1a0a22596979c08a172a21296389cc6a051a256952e9c96a00ba2989500803890528c768d0e28fa2e70303dacc8286c308331e1ae8f29f0303b3285b1b1295331e03281b4ea27a42ed62f6ab453206229db2737b45d973c18a6a2beb309a4deab89ac87b39aa82fb047b13db3daa95db19db2a6b0e0a897b0b5b1c6ac7da71caf86b00aa976a6bfad0aaf11a69fa5b6acc6ad07a462a2bfa940ab8e9ddf9c3fa4b1a4540db6a199a7aaa8de9b16a3d7a81aaa269eeea29ca888a9169ed5a28da884a9e59df6a27ba87ea9069de8a24fa830a9ec9cb5a21ba80da9049bc1a208a8efa8a399afa2dea7cea85593bca2c7a7c3a8d58ca0a275a794a8d20c55a24ba6dda7111655a2bca531a71d1653a2c2a564a74f1620a20aa68ba79e16d7a12aa6bda7678de6a175a630a80a9a70a274a7bda8899fc4a218a83da947a29ea219a864a936a33ea2fca73ca97fa2f7a19fa7dca866a182a149a7a1a8a2a07ea10fa791a82ea055a196a64ca86d9ffda0fda5dca76a9e85a06ca51aa7839d22a0eda481a6889c899f91a41aa6899b0b9f44a4d1a59c9ac99e0ca473a59899ea9eeea34fa518990a9fc2a317a5aa98c89e8fa3e5a48b985a9efda273a43f98899d6aa227a4cb97339dcda1eca33297b39c62a16ca3d3967f9cfea0aba21796299caca0eda131960d9b3ea0bfa15c95859b08a053a1029400806991658a3395f8251d2d772e30aad1264f2ed22f01add127092f6a30a0af5527542e093000b2c225e82c272ecdb2ce1f1c272227f3aee39168999c1a97ae5ba260aa32abcbb297a581adb7ae70b1aaa865b062b146adf5a793afacb022a9f5a60aae57af46a650a5a2acacad98a48fa4a7abf4acb7a314a4deaa4facc0a12ba20fa968aa53a0b7a126a842a907a0e4a116a802a94c9f50a230a820a9579fb7a234a813a9999ebfa231a811a9769ecda21ba8fca8379eb7a214a8f2a87c9da1a2ffa7daa8d09c78a2e2a7cba8419b37a2b8a7aea81f9a16a28fa77aa8a79596a157a6a8a7fb17d8a025a556a6591c3ba0f5a3f2a4b41dcd9feaa203a4c11e45a06fa378a4e41ea1a0aea4c3a5f817ffa11ea758a803a1b5a328a978aaa8a437a421a993aa70a47ca348a8a0a9f5a22ea20ea7b5a838a165a167a631a82ba03da113a6b4a75c9fa9a065a51fa7269e25a0fea4e0a6689daa9fc0a49ca6ac9c549f72a433a6e29b239f25a471a5fd9ad99eb4a3f0a4199a919e40a3baa46d99429eeda294a4e398229eb0a28ba4b898009e50a24ba42f98789ddda19ba34697049d74a107a3d796a09c3ea1c3a2a696859c19a19aa289965d9cf6a058a2fc95689ccfa0eea1df95b09b51a0b3a16495a99bb29f2ca13192158de194d09276935f200426d426f3a14325a02ca52d5cab5d250b2d782e83ad3524152c3f2d0baf09226629632af4afcc1a8a20b22118b0b99b55a38aa5c0af7da171a9d8aa15b077a6fcad4aafb1afcda6ceae75b034ad5ea4a1ace4adc2a913a429abb0aceea78fa402ab65ac7fa6e0a38baa1bac6da5e4a2b3a9f8aa8aa48ea2f9a828aab9a3f4a15da86aa904a3dca10aa802a9b8a2b3a194a7b4a825a2b4a146a771a85fa19ba1fca647a8a8a078a1c4a623a806a06ba19ea608a8649f7fa183a6d0a7399e83a174a6dea70f9eb4a14fa6b3a70c9db1a142a69da7929cb4a125a663a7889bc2a1f2a53aa71599efa046a56ea6f714939f89a283a35020549cb4990a996124d19e769fd5a0292403a3a7a885aa62a312a470aa1bac0fa82aa330a989aaa4a55ea2b1a725a9dea258a11ba6f7a7cfa085a069a5b4a6889e84a00ca55ca6409d0ba0a1a4f6a5569cc59f6ba4bba5189c969f3aa47ea5be9b379ff5a33ea5ef9ae09ea0a310a53c9aab9e43a3d9a49e995e9efea2a6a40b992a9ea0a275a47d98e79d21a22da4c6978e9dd8a1e1a36897789d93a160a3a796329d3fa115a3dd95079d0aa1caa2a195ad9ccea08ba26e956c9c92a05da2cf94289c62a014a2a994fe9a09a0d8a1ee93c59a619f0ca12892aa8730919d8f9593571f4423e6231da01224a62bad2ce1a978240c2c282d34ac5223d62a222c27ad7e20ba27c628b0ade3141c13ad1a63adf79f25a83aa9cfab2ca136a95aaad8a7599607a1cda1ada2ca9976a33aa46ea666a07ba815a9b8a800a2a3a9c4aa20a841a2a5a9f6aa51a638a252a993aa2da546a21ca946aa48a4f1a19ba895a987a369a11ba807a989a248a1a5a7b1a8d2a153a144a770a846a165a1f1a63ca80aa153a1c9a625a8d7a077a1a1a607a8baa09fa194a6eaa729a09da184a6e2a70da0aaa175a6c0a7e69f75a15fa6bda7239fe0a157a6d4a77c9e58a1d2a57ea7dd9d33a153a545a7499dc4a1b7a5e2a6549d2aa106a59aa5419c68a1efa759a8489f5b9d9b9d5ea001a247a696ab5badbea731a48daafbabf2a345a2d6a4b7a6479da3a1dca48ea6699c68a083a41aa6009c33a080a4f5a5749b59a063a4d3a5c59a27a04aa496a58c9a2fa03ba482a5ff99d59f15a44aa5b7998c9fdfa322a58499f19e7fa3f5a432999a9efea2a3a4d898429e86a251a43a98069e2aa20ea4fd97c49dd4a1b2a38e97759d9ea160a348972b9d74a12da39596e69c56a1fba2f695a69c27a1cca2c2956c9ce7a075a27a953b9c98a014a2c6942b9c37a092a1df94ac9b719f1fa12694739c799fa7a06c940080268da8888992d022e729682b4da75a23802a092c08a95122a3292b2b22aaf7207c2894290cabe71c61240f252cab0196729e0fa05faab39eb3a614a81ea9119ff4a60ba811a89a9cfaa40aa6b6a6b49ceea427a607a7aa9e46a6c2a75ea7c99f43a76fa830a656a0c1a7baa807a59da007a8e1a850a4e3a002a8f2a8a0a3e4a0e5a7e4a8f0a2efa083a7a5a851a202a126a771a860a1f2a0bba62ba8d1a0f1a08ba60da899a0f3a05aa6e6a729a0e5a035a6baa78e9feca016a66ca7489feda000a64ba70f9fd4a0e3a537a7cf9ed4a0c7a51aa7939ecfa0b2a507a7039eb1a0a5a5e1a6de9d9fa08fa5d2a6b09da5a088a5d5a63c9db8a0a5a5dda61c9d05a1b3a5b4a6be9cdb9ea3a3dba4819a8a92729be59c6d949e941099cf9a9093629baa9f9fa035988c9e3ea2c4a36a99bf9ff4a27aa4c999b09f49a3a1a4c1993e9f54a3a8a4a599de9e35a3a1a46a99ab9e30a396a45699949e22a391a42c998a9e01a37da40599739ed8a276a48998659eb3a270a464981f9e6da262a43698c89d51a253a418984a9df9a118a4be97229dbaa1cda36c97d09c5ba169a389967c9c0ba1f4a227961a9cafa080a2c895c09b66a013a27e95739b31a0cda13c957f9b0ea062a180950d9b03a04fa14494019b01a0f5a0d1900000591887196790ee216d288229efa46421d828302a62a78c20ec27062960a8131e2e25c026afa8ee19d020f121c1a87c94bf9d189e5ea84a9b94a352a4e3a7239c73a43fa5fea6139c76a473a516a6539cb2a48ca577a5fe9c0ca50aa659a5cb9d4ea596a694a45b9eb4a518a704a4099ff4a55ea7fba2329f01a67aa733a25b9f08a67ca7b6a13c9fe9a553a7ffa0739fcca533a791a0a79fbda521a7f49f02a0ada514a7479f35a0b9a50da7109f55a0a6a51fa7d89e77a0b1a51ca7a59e78a0b1a50aa76c9e61a09fa5fca63c9e69a08ca5d0a66a9e66a06fa5cca6d59d67a06ba5c3a6a19d77a04ca5baa66b9d6aa035a5a4a63f9d76a028a5bfa60a9d79a01ea5aaa6159d8aa0dea428a6509c579e87a3e1a4199a8599b6a009a203984399f19f02a1a7974f9ce6a0e5a1b898cb9d65a2efa3fd991a9f8ea231a4f79914a0b2a24aa4da99bd9f93a24ca49999079f70a22ca45899839e51a227a4de98339e3da218a4b098d49dfca1eca37298a99dc0a1bda3e597959d8da184a303977d9d58a154a3bf964f9d43a125a39296309d12a1f4a2dd95d29ce1a0a4a2a495909caba03ea2f794349c59a0d6a1ae94fa9b21a084a172946a9be59f3ca13f94619bc39ffba0e794dc9a949f08a1c994f69a619fa8a07c929e1a53240226db9df329a82d932e7fac3f2b402f313022af702ac22ed32f13b00e2a782ea02f90b1bc27312cfc2cbab3341f7a21672435b47da0c5a590a5ceb3a6a60dab52ac6db207a94eadf1ad10b1a6aacdaeaaaf9fafb6a9e2adfcae12ada7a62aac00adccabfc9216aa2aacf9ad6f263aa861ac1eae32283ea18ba74bacf029cc22839ab6ab972a8f2768235bac622c1629e323f3ae0029239fcda804aca32036a40da618aa60a505aa04abf8a7a5a55faa30ac1da7caa4b3a85caab3a8642130942ba2fcab16288924431ed2ad8d27aa22291596aea6257e1d859d3faec22427141e9fe8adc5203fa0f0a43fad6ca219a66ba7dda85ca37ba602a8efa186a03ba62ea827a034a2d1a652a817a1d8a0eda709a92c9f849f93a42ea6d89aa1a018a425a5629acc9f01a41fa5bc9a849fdba30fa5029ba69e6fa3c7a4a19a4b9e39a3a7a4b99a9d9dc4a265a44c9a679d63a21ea4f299259d21a2e1a3a399db9ce8a1a8a3a799af9ca6a176a36899769c84a149a3f298509c6aa115a3cd981c9c3ca1ffa2a498129c2ca1d5a24998e59b18a1ada22b98a39bdea043a28397219b5ba09fa15196fc9a09a027a17a95d39ae09feca0b695e09ae69f0da15c95e79a17a0f5a03d967b997c9fd9a00f964c9c29a03ca1e695bd08af192d1cf3985f2c3030db30bcae552d3531133235b1752d6c31653207b3702d2131fe318eb4f32b9f2f5b30f3b5082491286728cfb62aa681a8f9a9a1b6a4ab3faf45b000b6d9ac68b0ffb071b419adbbb085b130b26dac21b0deb098af73aa0cae41afc2ac73a781ac88ad54acdb9bd5ab4fad8eade02608a778aa9cadf9294423ab9588adc12b472a5d28ceadea2a9327012120aec229b4a18ca9ceadee29039f58a9b2ad012817155aa6ceadb028381ed3a1fdadf2288e216ca040ae9e28a421559ed1ae0628521e979b31af2228831ed39be5af7b265b1b6ba195af7024419b93a4a1af6f1969a509a8a2aedea4e8a8e6a9ceabf9a451a817a9e4a5dba2d2a631a8e4a24ea215a756a874a0cea22ea827a9ee9d5ea1d5a73ca9639dfda040a60ca8739c02a034a5f8a6d39b35a0f4a44fa6d59bb89f7fa4d9a58a9b389f21a46aa5d79a939ed8a312a57f9a4c9ea5a3fca49d9a1c9e7aa3d8a4659af39d2fa3a9a4259ac69dfda28ba4e999a49db9a268a4af99689d80a22da424994a9d34a206a4e898f49cffa1a5a36c989c9ca0a146a32698419c4ba1dba2ce97d79b04a16da2f396f99aa1a0eaa190968e9a5da08ca14296289a17a03ca19d95479af39fe8a0e7954b994f9fafa06d95289b0d9f90a00794f0808b9e65a03597742c58301b31a1af7e2e783254331eb2612e1b321433e2b3662eba31cc324ab5a72c46300931a9b623278f2a282cc4b734a6f0a8a3a98db7e4ab89af3cb087b664adf4b0a1b122b5c5ad54b119b22ab314ad9db069b19db019acd4afa6b050ae99aaa8aec7af17adc7a738ad8caec0ac6c1b9ea93dac0eadfe289c1516a385ad2e2b7826f51c2fae562b5624289d9aaec32a9a1c33a66daea52a5a9cfaa770ae1e2bc01e37a554ae7a2b2b23f7a146ae27291b1e0ea4e0ad42299221349e6caec829ca21af9b51af9c287520579e8fafb4277c1b8aa1e0af87252a9beba4afaf771910a68da8caae0da512a9cba9bcaac1a4dba8a2a94ea540a463a829a9c6a235a3a3a797a87aa0dca280a7a2a8589fc5a2f9a7f6a8759e43a254a79ba8009e48a1a3a620a85f9ddda0fea5e0a7209d9fa098a53ca7bb9c54a00ba574a6449cd69f5aa466a55c9b5a9f10a41ba5cb9ac99edea30aa5ef9a569e98a3dda4b19aea9d58a3c2a4679a7d9d0aa39ba4229a279daaa267a4cf99ea9c58a237a43e99c59c17a213a40999be9cc4a1b7a382989f9c60a119a334986f9cf7a0a0a26797799cbea043a2a596409c97a01ba26e96c29b82a0f7a1e995719b6fa09aa1e095c29918a06fa11d958e9ba79fe1a0cb9300805f9f1ba04f98062deb30073279b0bc2ea1327f3371b25c2e4e32493311b4082eda31ba3255b50c2de430943197b63828692cff2ca0b7fc9f9da335a160b748ab30afc2af87b670add8b085b141b5fead77b117b263b38dad1db1ebb103b1abac65b01fb115afd8aba7af6bb061ad2aaa6eaec3afbcaceba570ac8aad94ac3522c8a77baa0fada0299315eca402ae812baf221fa367aedd2b2f2104a593aefc2bf320d1a4a1aeda2b0722c0a39daec72b1823eca1b1ae5d2b26245a9ec7aee32a1e247e9b0caf1f2af4223a9e31af14296b205aa07eaff5270c150aa4cfafb625679b0fa5f1af3d1ed3a4b7a7aaae8ba4bda822aa0daa4ba529a930aa3ea425a5bca8aea90ca243a482a878a98aa02ba479a882a918a007a460a859a9849fffa2aea7cca8129ef6a1d5a63fa8989d88a15fa6d3a7289de0a0d5a526a7ab9c9da045a594a6759c37a0d7a407a60c9cca9f8ba4b8a5019c1c9f61a484a5a19bc89e2aa44ca5a29b719e06a429a54a9b549ea6a3f7a4db9afa9d3ea3c7a47d9ac69de7a2a8a4309ac09d7ca289a48799ad9d32a25fa40399959d1ba244a4ac98529dc8a1fca32c98be9c4ca1f5a24197089cd3a023a2af96599b9ba0dfa11b96159b86a084a1e796789914a056a17296cb9b37a0ada1189400807b95aa940b98602d403144326bb09f2ea1329e3371b2522e3b324433d4b3ee2de1319f320eb55d2c71300d3156b6be29c22d892e62b7db95d119ab1a22b7bba88bac0ead2eb6b7ac82b02eb10cb58bad52b11fb24fb367ad22b1efb13bb196ac8bb034b1e0afdfabecaf7cb0cfadbaaaa5aec9afa2ac33a989ad90ae44ac99a4c0abe4ac88acd32497a566a939ad952a6e1535a65cae3d2c762210a417af592cd62319a464af5e2c98236ea256af542c5424bba068af202c45249fa079af6a2b3324639eabaf9f2a2624489ee6afcb29b621389e16b0ee28662045a034b07a27d81452a233b0321c18a623a866aec9a5ada9cdaa24a9a2a40aa90daa04a4c2a4d3a8c5a988a176a4c2a8c1a9aaa081a4c1a8b7a97ba06da4a2a89ea928a03ca3e6a7e3a8eb9ee5a107a771a8039e6da18da650a89a9d62a132a6f5a7869dc8a0a2a5ffa6f79c73a029a562a68c9c26a0cca408a62e9ca69f8ba4dca51e9c2b9f4ba496a5c89bb39e19a45fa5589b349eb5a32da5919ae29d6ba3eda4419ab39d16a3b5a4ab99619dcda273a46299f49c67a22fa4cb986d9ceda1c7a33b981a9c77a12aa36897809b05a1e3a2e096609be2a0c3a25496869bc3a06aa2d095b99bd1a01aa25096149ba9a020a20a96699cb4a03ba284960080db9c549d9695042df530a53126b0e62d8632653327b2bc2de231e3326bb38b2d96318132cdb4852ca6308531e8b5fd269f2a322cd7b63ca38da736a7bcb6b2a9bfada2aeddb558ac42b0f8b0c4b413ad1bb1e9b12bb30ead20b108b239b17fac88b065b1bbafa7ab0cb0b1b0c2addaaa3eaf35b096acdea947ae6eafecabc2a85cad3dae43ab81a4f4ab1aad7aab56257da6d5a9deac162b8e1ef4a579aeb02c2325f2a072afe92cce252b9cc5afbe2c7d2674950eb0832c6b265b9518b0462cb52550953db0b72baf2546954eb0a02a5524d99b8ab07329f4216f9eacb07827f494bda373b06e18f5a5c1a804ae3fa539a967aa36a86ea5bca8a5a97ea3e4a4c0a8c1a929a2b4a4c1a8cea96ba189a4aba8b7a9e0a046a498a8a3a9a0a084a335a847a922a05ca272a7d7a8e09ea2a1aaa63ba8029e62a14ca6d4a78d9d22a1fba593a77b9d07a1d4a557a7399da8a06fa5c1a6d19c0da0f5a448a6659c5d9fa5a4d7a5459cf49e5ea48ea5049ca99e28a448a5a59b529ef2a30ba54f9bf49d7da3c4a4e39a9b9d12a37fa4339a619db0a240a4dd99079d3da206a443999a9ce3a18ea3b6983b9c82a104a32b98029c30a1bba2f097a89beba06da2d096b29bcfa01aa22d97509a5fa008a29796759b0fa059a15e940080d19554947b97bd2c0331133226b0e72d6e32673326b2232da3316f3203b3952c3b31bd3152b4232a2730d82f3eb5dd247e2cdf2ac5b502a1cd9805a583b52ea855ac4bad11b551ab82af5fb04cb45cacb7b07eb1eeb294acefb0bdb1efb036ac73b03ab175af80abf4afa9b0cdada9aa21af31b0a5aca2a949ae61afdfab21a999adbfaed9aa76a810ade8adb6aac0a404ac29adf5aa6a224aa8b9aa5aacf52a431b07a648ae202d6e26189cdeaf472de52787153fb0072d3a2775156eb0d62c35270f1c97b06c2c2e27fc1bbeb0bc2bcb254015e6b0382a5323a69bf4b00327e19adaa443b0499f37a87da98bac1fa58fa9b3aab3a545a54ea967aa77a333a5e5a826aa70a2a0a4b5a8b6a94ba14da48ca880a936a104a44fa845a99aa049a314a808a940a09ca2aea7c1a8d19f4aa220a758a82b9ff2a17ca60ba8bf9e7ca126a6cda7fa9d03a1e8a586a7f19dc2a094a551a74d9d7aa04ea5c9a6ef9c1aa0e3a433a6499cba9f88a4dca57b9b119f43a47ca5f79a869efca329a5309a0c9e75a3e7a47799b79d1da3a9a483998c9ddda276a451992f9d82a235a41999e79c2da2fea3a098a79cd6a177a36b984a9c55a1e2a21f981c9c1ca1ada28997459c0aa164a26f97b99aa4a057a25897bf9c80a0fea170970080fb967e966c965a2cc730db31ffaf312de031dc32b3b1a82c403146328db2552c1331d63136b4a9297e2f033036b58325182c6b2be0b52e9ab5189b99b4b5c1a663ab34ac07b57eaa3baf40b042b423acb8b08eb186b241acc6b0b0b1c6b0cbab59b027b100afe4aab9afa5b066ad3faa1baf32b077aca0a95eae88afafab07a9bcade0aeb7aaa0a840ad43aeafa95aa82aad2fae97a947a670ac96adf3a98b1cd9a893abdeab99294b94e6a5f8ada82cee252595e2af142d3228c01e93b0252d4a28c120d8b0f52c4c28aa2007b15e2c2f27e91b2db11c2a76209ca1d2b0f22102a5a1a8bdaed0a420a982aaa8a973a5c8a91aabeca361a567a98caa52a2b1a4f7a831aa14a272a4c0a8c4a9eaa13da49da8a4a95ba1f5a382a884a90aa143a331a82ca993a0a7a2fca7ffa840a061a2b0a7e6a80ca033a20fa775a8439f63a139a6cba7549e19a1eda571a7f69db5a0a2a512a79a9d65a047a5a7a6319d47a00aa574a6e79c2ba0f3a42da6b69ce79fbaa4f8a5749c499f80a4afa5329cd49e2da44ea5719b329eaaa3e7a4839a149e13a398a4139ab89d90a247a46a99e99c08a2e2a3c698849ca6a15ba384982c9c47a1d6a20a98149c0da166a2ec96149cefa0f4a16596329b7aa0b4a18795519c8fa0fea1369700805896c99c5495222cdc308f3105b0f42cd3311d33bdb17d2c4f317732d0b21c2ccd30963152b4fa28312f642f42b55524b02b1f2af5b5089dd9984ca0deb597a613ac05ad2ab542aa92af58b050b48bab94b08bb194b2d1aba0b08bb1b7b081ab47b020b1dbae9daaa9af7bb05bade5a9f4ae24b05fac48a953ae7aaf80abbfa8b1adb7ae58aa60a853ad6aae5fa931a80bad1baee8a820a8ceaccdadc3a80aa890ac8faddca8c4a249abc5acfea9c62468a55ca961acc5295a1f1da37fae662b5024bb9d0fb08b2b0125009b61b04b2a1b2124a24ab0542533a279a7faaee5a058a889a9efaa44a49da8dda943a5bfa42fa95aaa1da2dea448a945aaf9a1b8a42da93daab3a1a1a40ba926aaaba183a4fea812aa78a125a49aa88ca9fba053a30aa815a943a0b2a2b3a7eca8ee9f45a25aa7a7a8659feaa1d3a639a8b59e9ca176a60ca8479e6ba134a6d4a72b9e31a1eba58ba7d29d0ca1d8a585a7a09db7a09ca558a7669d67a06aa514a71a9d00a00aa5b0a6c09c829fafa420a62c9c449f61a4bea5719bdf9e23a46ba5079b9c9e89a3efa4179a3f9ebda271a47299469d1fa2fba37c98c69cf4a196a35d98a49cc9a180a39797709cb0a191a30e97889ca5a154a30197d59b5ea1fea244961a9d66a100a3b3960080c4947a948693c42ba0309b31c3af992cb731a0328cb1322c3231253294b2852bbd306c3135b4ad28d32e4e2f2fb5fc24832b712be5b59499b498a399b2b59ba64aacf7ac15b5aca961af45b034b4efaa83b061b157b238ab99b08cb199b0ceaa37b01ab1caae3aaa7eaf7fb05fadaaa9c3ae18b05eac2fa94baeb7af55abbca89eadd6ae27aa2ba81bad20ae27a9f4a7edace0adcda895a7cface4ad86a823a76aac4aadffa746a6c4aba1ac49a7e8a4efaa6cac30a80ca2f1a97eab53a9018f53a8b2a9dfaa521ef6a6c6a80fac478f29a856a963ab23a362a9a4aa3fa9dea4e4a945ab0da6f6a4bda942ab0ea410a592a9e3aa1da3bfa458a989aaa3a2a4a40fa940aa47a263a4c8a8f9a985a11ca499a8bfa9eea0bfa375a876a9d2a064a34fa848a98ca0e2a223a813a942a08fa2d3a7c9a81ea03da259a796a88f9fe7a101a763a8bb9ed0a1ada63da8469ea5a12fa6e2a7b09d70a1d1a563a74b9d08a167a5e7a6de9c69a00fa58aa68e9c0ca0c1a42fa60a9c799f88a4daa5b39b2b9f52a489a5449ba19e15a440a5de9a4d9ebea305a5329abc9d2aa3c1a4ca99409da3a27aa41799ba9c1ca22fa4bc985c9cafa1dda34198429c7ba193a32598579c7da112a32798e39b38a1f7a27297769c23a1bda2c6970080569cf49cf192652b543026317caf0a2c953180327fb1b92bfc300a326cb2142bde30c33121b41429302f313000b51f25ef2b602cb1b55c9cde9ef2a279b57aa663ac1dadf3b441a9fbae30b00eb484aa67b045b139b2d5aa93b077b17db05faa34b0fab0a8ae8da934af53b0f3ac0ba969aeb3afeaabeca826ae56afd5aa95a8b7adefaec3a91ea82dad48ae0ba9b6a7caaccdad81a845a779ac70ad0ea8d3a62fac24ad02a765a6ffabdbac6ca6eea558ab75acbfa563a5d8aa44ac1ea5bca5d4aa2bac7ca573a535aacaab1da530a505aa04acb9a417a5eba969abaea405a5e1a929abd6a3dda46fa9c4aa3fa3ada40aa91eaad2a268a4cba8f1a94ca274a4a1a8bea9bba132a488a89ca9a0a123a48aa89aa969a114a477a89aa930a104a446a847a9d7a051a3cba7d8a84ea0a7a26da7c2a801a0ffa132a7c3a8e99fbfa1e6a68ea86a9f77a193a62ea8e89e52a134a6b7a7b89e0da1dda582a7489eb5a09aa51aa7df9d75a029a5ada6229df09fa9a414a6a39c369f31a47fa5e69bba9ed9a33da5119b6b9eaba308a5d69a569e79a3eaa4599a529e65a3d7a4ea99519e28a3b2a46f99bd9efba280a40399e79d84a240a474982f9d06a2bda3e897c79cdaa11aa31698259c8ea1f5a2d797689cf7a07fa2bb960000379abb9a6b84132b60305431f6aeb12b92315e3269b10d2bea30d7316bb25f2aa5303d3112b40628cf2e002fdab45124612cd12b55b5d3986a18689935b5f8a53facfaacbbb4eca804af41b0e1b304aa60b053b1f2b137aa55b063b155b0a1a9cbafbeb03fae2aa9f3ae38b0bcacd2a834ae94af93ab8da8cfad14af5daa24a85fad90ae53a9d5a714ad1aae9aa864a7bdacb3ad22a8fda678ac6aadcaa783a645ac3dad51a763a605acedac9fa6fda57aab8aac28a6d0a5f0aa37ac7ba5b8a5aeaaf5abf8a4bea590aae1abefa4ffa581aaceabbea427a64daa98ab97a4e1a501aa56ab20a4a3a5cea932ab82a332a5a5a910ab6aa3c6a44ba99eaadba292a409a923aa57a249a4b9a8dba91fa204a488a884a9b8a1a2a363a84ea964a13ca330a82ea903a18fa2f8a7f5a898a05ba2b5a7c6a849a00ea263a79aa810a0d8a11ea76fa8a59f8ea1c8a63aa86d9f42a181a611a8af9ed9a025a6b7a72e9e8aa0baa54ca7b29d4ea06aa5e5a6469d30a024a58da6bf9c23a0f8a43da6579cde9fada4fca5159c659f69a4b3a5589bd79e09a44da5649a1d9e5aa3e3a494996a9d81a23aa4b898309d00a29da36698ce9ca6a180a32f988e9c90a190a3db977f9c5ca152a3bb97379b9ea043a28a967c9cee9fffa032960080259af39b5f04402a17301731a6ae832b5b31313247b1a32ad830c5313db2ec297930303104b42d276f2e462ec3b4ca21612a08292ab54a9d869eafa4feb4aba579ac91ad92b4a0a835af34b0b8b3cfa94bb03bb1d7b1c5a95db05ab148b068a9f4afcdb04bae00a9edae2bb084ac7ca82eae8baf34ab3ea89daddaaef4a902a83bad56ae18a984a7dcacf4ad67a8f7a68cac97ad9da796a644ac2eadbda63aa6f9abd3ac08a6eca59dabaaac80a5d0a550ab68acf5a484a5baaa11ac8fa446a54caaa0ab0fa405a511aa87ab1ca41ca5f6a93fab2ba407a5c9a911abf5a3eea488a9d2aad8a3b7a443a987aa57a37ea4f9a81eaad6a24fa4b0a8cda958a223a489a8aea90ca211a471a88aa902a2efa369a873a9cca1a7a358a857a98fa139a33ea83ca936a1cea225a81aa9d7a099a2f4a7fda87aa06ba2b5a7c9a830a036a264a790a817a0d7a1f4a64fa8879faba17da61da8f39e2da1f5a5afa7509ebba08fa539a7d39d7aa02ea5e2a6279d14a0baa45ca6a79c4a9f5ea4b5a5419cd59e19a44aa5909b5b9ebba31aa5d29a729eb2a30fa5689a3e9e62a3f4a4d899fd9df1a2a5a4fc98b29d9ca245a479985d9d51a21ca452982c9d2ca2e4a30298199df0a161a325982e9c66a1f4a23c97479c06a18da26f9500006f8a950b5c8d9629c12ff23053ae942af330ec31f3b02b2aa1308f31e2b1b22948303d31aab3b726512d2b2e8bb4a8200e284228f7b43598559ed29fc8b4f3a415acceac5db474a82eaf3ab03cb34ca940b02eb18fb12aa929b023b100b0d2a85aaf94b0bcad77a89cae05b059ac29a814ae7eaffeaad3a78aadbeae7ea951a706ad0fae8da8f4a6cdacd8ad1da8b3a684ac87ad70a749a631ac1fad57a606a6e5abbeacb5a5d7a57bab93ac68a588a529ab52acdaa47ea5c2aa1fac94a462a552aabdab48a422a5fca94eab0ea414a5b3a900ab59a300a56fa9acaa5da3d7a439a96aaaa0a28ba4f0a819aa96a249a4bca8d4a937a22ba4a2a8b2a92ea208a47ca882a9e4a1a6a359a85da9cca161a32fa83ca9bda16fa330a825a981a133a308a810a961a127a3f0a7f8a8d0a0eea292a7cea89ba0cda244a78aa817a07ba2f9a65ca8949f05a2b3a63aa86c9fc2a186a613a8fd9e35a13fa6d7a78b9edca0f2a57fa71a9e8da096a532a7719d34a036a5c4a6079dc69fbba448a65e9c4f9f43a4c5a5849bdd9edca34ca5ef9a769e33a3eda41e9ae99d9ca280a46699539d28a22ca4c598169de9a111a46198059dc5a1d0a30798e79c9aa194a36d97d99c67a1e6a23e97269ceaa07ea24d96579c95a03da24d9400808599cd995c935d28882e20305fada1297230423150b07a294a30473164b105290b30db3031b341267b2d192e2cb43d206c28f22664b4bb9d8fa4e5a646b4d4a425ace5acc2b3faa7b5aed7af8cb285a8e0aff0b0efb0baa8e2afe8b042af95a85caf90b055ad45a888aefcafe3ab10a8eead37af31aae0a777adb9ae0aa986a70aad35ae0ca8e9a6aeacbfad32a756a657ac48ad61a6dfa501ace9ac9da598a545ab7dac2fa550a5d3aa37aca1a436a57eaa00ac2ea420a53eaab2ab04a409a517aa6aab10a4d3a4d0a916abc0a3b3a49fa9ddaafea275a447a974aa90a251a419a93aaa93a24ba4e7a8fea952a22da4b0a8d8a90ba223a479a897a910a203a44fa853a9bea1a9a322a829a9b0a165a31ca82ca9e6a163a322a819a997a116a30da82ca966a1d8a2e8a71da9cca083a2b9a7ffa8a4a03ba275a7d0a853a00ba227a78da801a05aa1a3a63da8919f32a153a606a80c9fe7a0efa59da7799e7ea077a50ea7ab9d37a0ffa475a6eb9c03a09fa41ca65b9cd29f65a4c2a5d69b569f18a469a59f9a0f9fa9a31fa5d199789e32a3cea42a99f89dcaa27fa4a5989d9d6aa238a46398909d0aa2e9a3d897a49dbaa169a38497b99d93a10ea3ea96b79d7ca1b2a25a97139d23a198a2ff95f19caea01fa23b950080fa99469c4a9c5026152d472e0aac4f27f82d0e2fc7ad2227ef2d372fd9af6028da2e01305db21d26542deb2d9ab30b21dd28b7289db3c899e29d3ca4a9b3eda312ab6bac04b339a73cae8baf15b249a8b1af9cb0a4b070a8dfafbfb0cdae48a815af5fb0d5acd0a73daec1afa5aa87a7c3ad1faf64a911a744ad81ae45a84da6b4acb4ad29a7d7a535ac27ad1ba6b0a5ccabcbac62a581a54fab7cacc9a455a5e6aa3cac46a42fa5aeaa0eac11a407a53daab3ab49a3c1a4e2a932abdfa2baa495a9d6aa21a286a44fa987aad4a174a414a947aa93a14da4d6a801aa4ea126a4aca8cba9c9a11ba496a8a7a9afa1d5a389a897a9d6a1c6a368a870a9aba1cca354a85aa9c6a179a349a84ea917a267a336a861a9f9a12aa32aa84aa9cda1dea201a80da97da1a2a2bba7d2a839a185a29ba7d0a8e1a020a254a7c2a87aa0c1a10ea76ca81da065a1a2a62ea88f9f46a14ba6f1a7ab9ee5a0d5a585a71d9ea3a05ba5f7a68e9d45a0fea486a6ea9c27a0bba436a66a9cbf9f91a4dfa5079c699f55a496a54a9b1d9f17a443a58b9add9ea8a3eba4209a589e04a385a4ab99ce9d3ea2f4a3d6981f9dc5a144a38498a49c62a1fca24e98779c3ea1dda20398a59c1aa19ca2e597579ccea0daa2bb96b39de6a03ba20d980000ce12f6166d962226172d222e10aca926862d5c2e86ad6626552d3f2e57afb727652e193043b26e26732d852e64b4fd2111298329d5b4cf9628a155a29cb405a4b7abe3ac10b4a8a656aeceaf7cb248a8c5afe6b0feb02ca87dafb1b09dae11a8d2ae3ab039ac74a765aeb7aff7a90ca7b8ad3aafafa87aa621ad5caeb8a7daa574ac7bad42a679a5d2abc1acd8a43ba541ab69acf6a317a5f9aa41ac29a3fda483aa09ac56a2bda415aa83ab06a28ca4cba906abbea14ca46ba995aae0a131a416a92faa3ba10da4d4a8f6a9b0a0d2a3aba8a7a988a09da36da861a94ca04ea319a819a90fa00ea3f8a7f6a8e49fffa2f5a7d9a82ca0eba2cea7d6a817a0d9a2d8a7c9a88ba0eba2e1a7e9a841a1fca214a824a9e5a13aa34aa85fa96aa203a330a82ca90fa271a210a805a9c7a147a2c4a7f8a85fa109a21aa7b4a8ada0ada1aba64aa831a091a145a6f8a7589f38a1e3a57aa77e9ecda084a504a7059e86a036a59aa6689d3aa0d8a43fa6d29c1ea09ba412a6579ccd9f71a4cda5ea9bad9f39a49da5879b669f13a462a5859a269fc1a3fea4349a999e28a38ba46f99eb9da0a23da4ce98b99d3ba207a44e98739dcda189a31898569d3fa1f5a230971b9ddfa067a2d396fd9c5da0d5a1bc96759c45a00ba2259400009e18061bf6980a27952d052f69ac0a28252f44303faf1f28462f8030e7b04c28462f9530f7b28e25222d1c2e58b43b20b9288528d1b4f39beba07aa5a4b400a496abc4ac0db493a658aeffafccb216a897afe1b0e7b0dea745af8ab043ae09a732aec7af57ab45a632ad63ae6da899a56eac81ad44a6d9a4d1abcbac95a43aa4b3aa23ac2aa31ea44daa8cab9ba23ea410aa28abe2a11ea4c2a9daaa25a112a47ea996aa7ba00ca441a945aa49a00aa4eba8e1a9679feda3b9a8a2a91c9fe1a370a860a9189ec1a32ba810a9299db6a3e8a7d1a8549c6fa3caa7a4a8379b1fa38fa7a1a8279b03a359a783a81b9bcca240a773a8259c9da2f4a65ca8509da6a2f5a65ea8a59fd3a237a78aa8e9a070a3f8a710a9e3a10ea459a876a99ba2dba35ca87da9b6a2e5a202a817a97aa2baa26aa7cda8e0a1dda21ba776a85ca1eea17da6f8a76da0fca007a685a7549fcfa0b9a53ba7509ea8a07ea502a7c19d66a029a5a9a6229d4ea0e5a451a6699c0da09ca4f0a5d69b4e9f53a48da5fd9ae49e01a430a5249a849e83a3e6a481993d9eeaa288a41f99b49d6aa217a4c198569ddfa174a36698ed9c8fa11aa33598a79c50a1caa21198479c07a184a26a97459cfea045a25d97dd9bcfa04fa2aa96309ca7a002a285960000be120716a99770265c2db72e56acc827bd2e1c30bdae5f27942e12307db09d27732e2d3055b2e525482da02e1cb4f520eb286629c6b441999a9d02a4a3b47ba262aa09ac0cb477a581adc7ae6cb2eca69cae09b073b0e0a69fae22b065ad6fa6f4ad82af76aac7a508ad07ae92a7f5a427ac0dad57a46da252a99aaa149efea0f4a60aa8a499d1a242a831a9359d31a3e9a8e0a9b99dcfa27ea87ca9719db9a25ba82fa9479d9fa21ea814a9189db3a209a8e5a8549ccca2f4a7f1a8379bf4a2d9a7e0a8d399d3a2d1a7c3a8bc93a8a2a5a7aaa8268d6aa214a74ca8358d03a22ea6a4a7468d4ea231a6ada76e8d52a226a6fca78b8d2ba266a60ea8359444a287a622a8399d3ba27aa7cfa8dfa0ada251a885a9cfa2cca249a86ba91ca469a2f5a72ca98da3f9a1c8a7fba887a2a1a14aa7aaa891a174a104a783a8f3a04da1c7a65aa878a00ba138a603a88f9fa3a0a9a564a78f9e45a031a5bca6b99d12a0d1a434a6d79c879f84a4d6a51c9c2b9f2ea497a5419bf39e01a44aa5359afe9ec2a326a5b0992d9f98a305a53299409f63a3cda40d998e9edea273a4bf98499d38a213a414980d9da3a1a2a38e979d9c49a121a33e97569cd6a068a2c796119c8da0bea1f2967b9a10a075a1f7958c9bed9f34a15194000084118414ab996624e52b1d2d88aac825ec2c272eecac5225de2c0b2e88ae80242d2c632d4fb02c231e2a122c4eb1c01d8524be25d7b1cf8d24959296fbb11e9e22a634a7d9b1dca1c8a910ab69b1d2a4c6accdadb7ae08a6e3ad3daf83aa57a6abadeaaed3a630a5baaca2ad70a46ea493abcdace0a252a33baab1ab53a1c6a1cca817aa92a093a14da858a942a0e6a123a814a919a007a21ba814a9f99f38a217a8fea82a9f72a209a8eea8759e90a2d7a7caa8ad9d69a2aba7aba8f79c5ba28aa797a8529a5ca290a782a8099821a232a762a8fa9287a14ca69da71c13b1a0fba42ca6f71b17a007a4f7a4401e35a0c7a3b9a4e01edda0b6a483a5031e7fa1a2a5e8a61a955aa2a3a7c9a8e8a236a3d8a82baa42a522a327a9a1aa44a5f3a29ba8c4a944a426a2a5a7c3a8a3a2c0a178a658a8f1a069a110a61ba80ba0dea08ba54da7f89e5aa01ea5cda6109e0ca0cfa485a6359d739f98a42ea6b89c369f5ba4dda53c9cd59e07a452a5249b739e81a3cda4429a459e16a3aca49b990f9ed1a287a46599e99d87a25aa4e3989e9d25a212a49a98259d91a167a3f197c39c48a1eca28997759c29a1aca2fe965c9c0da182a2ec963d9ce1a044a2c2962f9c9ca0cea1f596349b24a068a13b95049c899fe5a0239200801396ce941396f31e33275928e9a6b124de2bd12c10ac5c24fc2b202d5dad1d238e2a132c6daea12014282029f8aeaa1b55219e228aafac967e9fc7a071af919dfba524a77aaf36a377ab52acffaf88a7b9ae2db0ecaedba5d0ad1baf8dac77a328ac17ad77a932a21eaaecab4ca7c8a2bba954ab74a681a370a96faa93a561a2b7a8cba983a44ca101a816a9a5a38ba19fa7bda8daa26ca14fa77aa84ea286a11ba751a8dea13da1efa621a820a121a1baa603a87ca01ea195a6faa7d39f35a14ba6a7a7299f4da122a66ba7869e38a1f3a516a71e9d77a1f1a5eba6ec9a4ca1eea539a77f98e5a067a59aa62c1ade9eb1a2aca3b1227e9d029d189cce25ca9e57a1d6a29922aea304a948aa67a55ba467aa1dac9fa817a368a9bbaaa3a68ba212a82ba9fca304a121a6fda741a184a073a504a72aa04ea012a56fa61f9e4da0c7a40fa6319d04a07da4cfa5699cd09f51a492a5329c979f17a444a5f39b2b9fdaa31aa5329bf29e71a3e5a47d9a919e24a3b4a4289a6b9ee5a289a49399329e7ca25da4f698e89d16a21ca46498899dd8a1bfa337985f9d8aa137a39797199d3fa1daa2cd96e49c07a1a3a28496a29cd1a065a250964c9c9aa032a2af950f9c5fa0faa17595b79a05a0c8a1c294179be69f69a15a940080b1886203a097801fc62617285aa6e9228f2a082cacaa4e23952a262c45acf7217829cd2afeac382039277f287fade118991c942076ad269a07a4b0a4e0acf5a0a9a89ea918ab539e4da672a74da62993cd9d829f7ba1609915a2bea230a513a005a702a8f4a77aa1aea8ada978a744a1aca829aa17a669a18ba8a6a9e8a456a13ca827a980a40fa1c6a7d9a8d8a3f1a05fa79da82ba317a117a756a884a22fa1d2a639a805a244a1b0a612a8cda175a1aea610a8b1a170a172a6dfa745a152a157a6cca718a184a150a6b3a7b2a03ea109a686a738a037a1e6a578a79d9f66a164a534a7859efaa0fda444a6f19de59c5ea4c1a5999c4ba407aa49aacaa281a281a870a8d8a7e7a4e6aa36ac8da858a438aa8babf1a3a3a047a47da6159d5da296a4e4a6e69c7ea046a417a64c9c67a06aa4dfa5639c44a05fa4c7a5099c60a06aa4b0a5a49b1da045a47ba54e9b1ca033a466a5b89aa59f06a43aa55e9a369fbfa308a5209ac09e51a3dda4c9995e9ee4a28ca46499f59d6ba23ea40599d49d08a2fba37398909db6a18aa33698719d80a132a30e982c9d58a1fea26897d29c2da1c9a2b6968e9c04a1a4a281963e9cb5a056a2bf95179c70a0fea17a95e89b22a070a18a95e39a169fdca06794039c2a9fa2a0bf940080478c578591944a225229be2a37a89822df29312b8fa99521e328262a6daa4d209327b62846ab211d75243425b5ab20141316101126ab469bbda3d6a446aa959e64a6eea7f7a8799db3a5eba654a72c9c86a45fa518a6d29cbca4dea5bca67b9ef4a546a761a7919fa3a617a87aa602a0d1a644a82ba55ba01da766a89fa48da020a77aa829a49da0e1a655a89da3cea0a1a631a8b1a2f5a06aa605a81da205a14da6bfa7aaa107a12fa6bba73ca10ba128a692a7d2a0e2a003a662a76ba0d3a0e7a543a744a0cfa0d9a535a728a0bea0cda5ffa60ea0baa0bea505a7899fc7a0b3a5eba6009faca09aa5f9a6c69ec6a09fa509a7989ec0a05ea5a1a67a9d029e15a363a4c39afe93b69b7c9da4944494059acf9bca94b59acf9e21a0e598f39cf4a187a3a09aed9ee9a27fa4959aef9f3ba3a3a49e9ac19f35a39aa46d9a309f36a393a4459ad29e23a38ca40f9aab9e24a384a4549a989e20a381a4d599849e02a371a4ac995e9ed5a26fa47799399eb0a25ea4fd98f59d5da256a4bf98ad9d37a235a495983c9de3a109a458980c9da7a1b6a32b98b59c4ca15ca36b97789cfba0d5a20f97349cb7a075a2ae96f09b67a007a250966c9b32a0aaa1a095749b04a033a1d3950b9be79f36a1ef941a9bb99fc4a0dd920000b3183819aa91dd200328f528d1a5d3205d2871292fa8242013278d28c3a8c81dc124eb25ffa84a1aee201f2214a93087a697c998bca85e99a4a1b1a252a80b9c07a48ea4d0a7259c6ea423a59ca6509c40a421a5f4a58e9c68a464a5d0a5459db9a4cca5a1a5f59d2fa558a60ea5579e53a586a64ca4859e78a5d9a6aba3a09e89a5e4a6efa2c29e71a5c4a634a2139f6ba5b7a6d1a15e9f67a5d3a603a1c49f81a5cda6e7a017a091a5d1a68fa04ca09da5eea639a04fa0a9a5efa64ea05da095a5fca62ca062a09ca5fba60da069a09ca5e8a6d89f6ca082a5e1a6949f56a077a5c7a6499f84a061a5e3a6109fa1a04ea5f5a6c29e89a049a502a70f9ea1a0f2a481a6b69d1c9f93a3e9a4029cbb9af0a06ca21a99839950a073a1d798399bf2a023a25899b59d16a28aa3939ab59e92a23ba4e69aa29fada253a4b99afb9fcda25ea4949a6f9f95a23ea4349ada9e63a229a4f299799e52a215a46d99249e27a202a43899b89de0a1cda3a598669dada1a5a36f984d9d83a184a3fe973a9d4fa158a3b397249d2ba12aa30397159d10a104a3ca96bc9cdda0a5a212968d9ca2a039a2c8953b9c61a0d2a17895029c33a083a13e95879b08a042a10895779bf59ffea05695d49ac09f22a13395ab9a679fbba04894ee24e329152b93a7e328e12c032ecdacc229af2ddd2e93ae3429362d472ecbaf6b28a72cb42d8fb07826192b412c79b1fd202625d127e1b18a9cd99ef29c6fb13fa46ba8eaa8f4b08ea7c0ab4bac38b0fca812ade8adedae15a834ace2acf0ac54a5e7abd5ac0faeb51c6baacaac2cb0842513a6aca95bada42837941da48bacf5296c2453147cac562a0328fd2388ac182ce6298f26fcae3e28a1a337a9c4acc728569402a4feab3d269e13aaa4f9ab26257413ffa25eac99276c20c79c19ad69286e22e11361ad252891210814c2adf42694202a9aeaade825fd19c89ecdad952403943ca1d5adb31b29a372a5afac51a244a651a780a749a25fa6cfa776a187a01da6d0a7839ffca089a62ea8b8a00ea4bba8e2a96ea203a01aa787a8c39e0ba19ca4f6a50f9c7fa01ea400a5c39ba19fe1a3e4a4d49bba9e8aa3c1a4c79b6c9e34a391a4cb9bbd9dcba264a4599b6b9d7ca224a4ee9a0e9d25a2f0a3909ad29ce9a199a33d9ab39c9aa15fa3e9999b9c73a12fa3af997c9c55a105a33d994c9c38a1d8a211994e9c1fa1c8a2ba981b9c15a1ada26698ad9bbca033a21998f89a3ca092a1ef969a9a04a037a133967a9adf9f07a113967b9ab89ff0a007968b9afc9fd4a0e9968f995a9fbba00d975b9c3ba086a13d972427972b392cd2a8692b3f2f3f303faf972b762f783085b08a2b942f8530c5b1e92aae2ed62fe2b23829762d812e32b477246d283c2959b4cba0c7a49ca443b426a8bdab92ace5b3cda95fadf5ad75b2c3aa13aedbae17b18ba996ac06adc3aeb7a898ac49ad98ad05a68eacfdadefad6d1898aa05ad31ae28274aa515a9fdadc429b524281ce2ad7f2b392a6b2822ae0d2b67281825faad6a298fa193a876addf29a1a0ffa760ad8729d0143ca5f1adc629df1dc0a363ae122af620a79f68ae73291f22af9fbfaed628eb1fb89f24afb827b11d05a154af9e255194d3a215af35233a9f34a5e7aec49106a5cfa660ad73a411a8b9a8d9a827a418a8e6a852a426a34da74ea8a3a2d7a1cba5cca63fa13da2b1a612a8799fc7a14ba796a8c09d30a184a623a8059d17a033a5eca6299c48a0e5a452a61a9c9b9f7ca4aca5db9be89e06a441a50c9b549ec3a306a5159b1f9e7ea3dba4d69a119e5da3bca4a49af19d37a39fa46e9aca9df3a274a4329a9f9dbda25da43f9a649d77a228a4b399379d3ea2faa37199e39ce3a188a3de98889c98a131a3a0984e9c49a1aea22298df9bf2a04da2d297f69a9ba0dda15f97699a40a06da1f6960a9a06a014a14996fd99c59fbda024969399269f8ea0b895479b429fbda09795ff26f02a082c02a9412c1430d23023b0992c7e304c312bb17c2c8d305131b9b2f02bdf2f9c300eb49029ac2db92e93b41025fa28682a20b568a0afa298a1fbb49ea80cac7cac89b4b0aa08aea1aec7b3dbabd1aea4af19b267aba6ae93af6bb0a9aa93ae8daf0cafbaa90aae20afe4adc1a6abacd6ad63ad431ed8a87bab81adc628ee1b25a108aecd2afe25921c6faee62ad6246f96caaebf2a571c10a599ae772a6395fba550ae2d2a0b1579a53aae262a861bdaa4a9ae762a3a20eda3ddaed029282056a133af22290b20f89f4aaf2228e71a32a2b2afbc26979436a4d2af1c24e3a017a689af3298dba6d6a859adf9a487a83ba96da8ada4dea8a3a9e7a40da425a8daa82da3c4a2e0a638a8f3a05fa2c6a634a84ea0e9a15fa7c1a89d9f18a231a78ea8b89e80a1aba62ea8659e01a137a6f0a7e49da5a0a0a531a7469d4fa0dda41ea68e9cf19f3ca447a5f09b5d9f0ca410a57f9bc49ed4a308a5419b599e93a3eaa45c9beb9d58a3c3a40f9b8c9d0fa3a1a4c89a359db3a26aa4709a049d5fa234a4d799ce9c0da211a48b99ad9cb1a18ea337998e9c44a1d1a297987d9ceca071a21e987c9cb8a02ba277973a9c86a0f1a12797ce9b6fa0bca14896a39b74a086a1b896dc9907a053a1d7950f9cfc9f11a12a956d250a29f12956a6fd2c0231a7317eb0ff2cf630d831a2b1a32cad30a83109b3fe2bf02fce3030b4fd29222e552fa7b49c25672a962b12b5ee9ee897ad1828b52ea868ab60acc0b497aac5ad8fae0eb406ac69af37b0acb20aacacaf66b012b1afab8eaf5db0b7afb5aaaeaee1afd6ad87a9e3ade5ae17ad49a50cac0ead1cadc621cca6dca9b1ad3929b51bada358aefd2a2d2238a1c6ae3b2be02008a40caf5e2baf20a7a31caf542b7d2060a3f9ae412b6320eea220afc52a852184a148af442a702160a179af83292b2046a1abafc728241b6ea2f6af8b27cf946aa418b09624f9a02da6aaaf1d9a15a77fa81ead4aa5eba819aa17a8e8a4d9a8c7a918a4a1a472a87da986a23ba45ba84aa97ca1e1a34ba841a9f5a04ea32ca81ba975a08fa24ca789a89b9f2aa2cea639a8d89e8da14ea6baa7459ed5a0c7a515a7ad9d7ca032a57fa6589d17a0cda4fea5e29cac9f83a4a9a5979cf09e56a479a55c9c889e19a427a51f9c229ed8a3f8a4139c019e5ba3d5a4519bda9dfba2aca4419bac9da8a280a49f9ace9d67a266a4169aac9d0da22ea47b996e9deda107a41b99209d8ba196a39598759c27a1b3a20898cf9bb4a002a271971e9b88a0c9a1e996fc9a76a087a1b997d69916a040a13d97209c3aa0a1a1479500001c04af10f6971a2c32302d3132b0ca2cf930ae31eab19f2cba30a63128b3ab2b1830c1302bb4a829012e162fabb46c26e22a012c13b5a093df1d8b181bb597a6e8a90babb2b423aaecadc5ae11b4baab7eaf54b0aab2ebab8eaf68b04ab15cab50af37b023b072aaa1ae90af59aed4a9f8ade8ae37adc6a816ad08aebaac48a41baba0acc2ac4323a9a5b9a875ad7d29dd9485a54fae912ba12075a431afee2b0022b1a395afd32be2217ca3c4afc82bfe22c2a1deaf4f2be722aba1ecafd02a992192a115b0002a862176a11bb03d294d206ba143b05b282b1b67a24bb05824bfa1d0a582af63a1faa823aa3cac23a56aa9e7aa92a6a6a4dca8b4a920a4afa4bea899a969a24ea487a87ba94ca12ca486a86fa905a1dea36ca85da99ca0b1a2a9a7c2a8cc9f17a203a776a80d9fbea192a63ca8889e17a102a699a7e89d85a08ea5cca6a69d21a019a54aa6219daf9faba4fea5b19c2b9f72a4c1a56b9cd79e3da488a5079c739e07a44fa5ec9b089e94a309a5209bc09d55a3daa4d19a7f9dfaa296a4309a2e9dada268a4eb99d19c4aa220a44e99649cefa1ada30199209c85a13fa37798ac9b19a1b3a2e397709bdba08aa29997859bc8a068a2b496c69bd5a01fa23597fa9aa5a019a2ee96259ca2a04ca2139600803c956f94bc95db2b28300d3118b0d42c1931ed31e3b17f2cd030be31fcb28c2b1230e13000b4a529352e502f72b40525b929a42ad6b45e9c949d9b9edab4eba68faadbab8db46ca989ad5eaee3b31bab2daf28b08eb2bbabeeaf88b02fb16fabb1af6fb014b07faaecaefaaf60aedfa957ae82af35ad4ba9a2adaeae79ac67a8ddacc7ad19ac15a5a3abcfac08acf6201ca888aaebac8829fc9a13a72faecf2bf2221aa357af572cdc24ea9b17b0552c8825cf9b45b01b2c7125a69b5cb0c22bbe24919b77b0372bb2246f9b94b0742a07242e9e9cb0d728d71d39a26bb07e22c1a300a78fae22a4fba82eaa0baa3fa585a988aae8a541a5e9a8d9a940a4cda4baa8c8a92ca38fa4a9a8a6a98ba25ba48ea87ea926a2f2a371a86aa98fa11fa318a823a900a122a231a7aaa82ba07fa178a622a8549f4da13ba6cea7e79e13a1f5a59da7869ebaa0baa54aa7229e6fa057a5b0a6a99df19fd9a431a6ed9c399f7fa4b2a5c49ccc9e43a45da5499c829e0ca422a5119c169ebda3e8a4c89bb59d51a3a9a45b9b609df2a26aa4fc9a2e9d86a22fa4599ac29c2aa2daa3ff995b9cc2a167a36999159c63a1f5a2e198909b10a193a26a98719bcba04aa20e98859bada0d9a100982b9a46a0b9a15097ad9bf29f54a1749500001184f20edc96052c2f3044311eb08a2c0c31dc3104b2192c90307831c8b2da2abc2f8f3098b3a4288b2d622e1cb41a24cc29e02960b4df9bf916349863b407a64baa0dab34b435a974ad50ae90b3b0aaf3ae17b085b253aba7af86b01eb121ab9daf70b008b08baae1ae1db07aaed3a93bae54af43adf9a893adb2ae5cac78a82cad16aee3ab35a8b6aca3ad70abdfa50cac1cad50abaa9542a916ab12acec2752a1f6a761ad432b15215ba2fdae472c1b256f9be1af312c3d25739b47b0112c4e25789b7db0752baa244c9ba0b0f3295d2113a082b04327009da3a46faf6296a4a6f0a863acdba41ea941aa99a735a530a960aa41a414a5f7a8fba9cfa3cba4c4a8eea909a38ea49aa889a923a227a470a869a9fea1a7a347a83fa95ba107a308a8f7a8eda071a275a793a880a04ba2f6a645a827a0c7a16aa6e8a77a9f44a106a6a2a7f19ec4a0c9a56ca7559e95a08aa51fa7ef9d49a02ba5a9a6409df09fcea427a6d49c979f81a4d0a5199cfb9e3ba472a59e9b579ee1a31ba5c49afc9d5aa3cfa4509ab59d09a395a40b9a7b9dcba263a4d5991d9d67a224a49e99ee9c20a2eda32b99b09cd0a164a3f598599c5da1c4a2a0982f9c26a194a24298489c06a158a2f2971b9b9ea045a2cf97c19c9da0e2a1119800009289200ca8976d2b29303631f1af552cfd30d431b2b19d2b7b306831a8b2552a8d2f81306ab32d282d2df82d07b41e242f291f2a47b4b591ad160b1840b4bda427a941aa0bb488a8faac05ae45b32baaccae1eb01eb2cfaaa2af81b0e2b0a5aaa0af75b0c5af33aa23af32b038ae99a970ae9aaf23ad08a9d0add8ae6dac72a82ead47ae75ab25a8f5acf7adc3aa0ca8baacc5ad64aa20a754ac62ad36aa1da3a3aa82aca3aa4820d0a71baa5bac04289a9e41a6d6adae29351fd6a2e3ae392adb20e6a09fafd629bd20bba1d4afb827c39915a505afcb1bffa652a9f6ac27a473a9c2aa33a9cba4a8a9f4aa9ca505a586a97eaa22a407a52ba939aabca3caa4e6a818aa3ba34da4a5a8a6a9aea21ba47ca86ea949a276a343a83aa9d3a1dfa2eea7f1a818a181a2bca7e9a8aba022a261a7c6a867a0b5a1a9a632a8c39f2aa107a67ea7f29e01a1d4a553a7a59eaba083a5eea6369e45a028a57ba6c09d1ca0eaa43da66b9dd29fcca40ba6fa9c8c9f99a4c4a5b89c029f55a47ea5729c869e09a41ba5f19b269e84a3c7a4669b079e27a385a4bd9ab19d92a242a4539aee9c02a2cea396997f9c91a133a3fd982f9c31a1ada27998e59be9a03da20f98e69bcaa0cfa19397099b6fa092a1b196589c77a00ca2bd9600005c9192931d95e02ac82ff230c8afdc2ba3308b3171b1192b4130303152b2fc295b2f643050b31228162dde2d02b42b2321298d2948b411989f96fd9d44b4d9a48ca9c1aa15b41ca81ead02ae32b381a985aeebaf07b248aa34af42b0d1b037aa18af2ab0aaafbea997aecfaf14ae3da935ae58af2aad9fa89dadb8ae5aac47a834ad38ae5aab14a8ebacebad96aacda7bfacc1ade7a977a776ac7fad62a92ea730ac27ad26a9daa5b5abdaac2aa99da22faac3abe0a96499b0a8fca93eab181c40a7fba81cacf11c3ca701a9fdab909eb6a81baa81aa37a4b5a90eab4ca889a44ea9b2aaffa489a4f6a82eaa2aa4d3a422a933aa10a471a414a910aab4a37ca4efa8f7a9d8a262a4e5a8e5a986a239a4c6a8d6a934a2b2a35da858a99aa1f3a2c4a7d8a8dca095a277a7baa88fa037a228a77fa870a0efa1c1a62da8e09fa4a16ba609a8669f4ea11ca6b0a7289f21a1dea56ea7cc9ef4a0b3a55da7489e9ea084a52fa7059e4da049a5eda6b59dfd9ffda494a6549d649fa2a412a6839c119f42a48ea5f19bac9edca330a5689b3c9e2fa3a5a4c59ac09d88a241a4e299209d09a2bda33d99989cc1a160a3cd98659c77a120a35f98499c7ca146a3d397459c67a133a32298939b28a1d1a2fa97ab9c61a14ea3ac960080f3908e8d4694542aa82fd0308aaf992bc4309f316eb1c02a433033315fb28229132f3f3035b32d27eb2cba2dbfb33f23f728e82926b406917216dd1727b435a468a929aaddb3b9a7f9ace7ade6b22fa972aeb0afe3b1cea93faf51b0a3b0c0a9fcae2ab066af6da97baee4affcad20a91bae5faffdaca1a8b1adf1ae27ac54a836ad4aae3aabb8a7d8acbead43aa60a789ac7cadb2a91aa763ac57ad1ca9c8a618acfeaca1a848a6b6aba8ac27a8e0a54eab8aac9ea7aca51eab80ac2da775a5bfaa39acb0a611a531aabeab3fa6e6a4e8a95aaba7a5f3a4cca921ab2fa50ca5c0a9f5aa14a50da5afa9d8aacda4daa482a9c5aa4ca47aa435a97daab9a354a4fea811aa34a315a4b4a8c8a9b1a202a488a894a947a28ba378a880a9bca13da340a83ea987a1bfa213a8f4a81ca158a27ea7a7a8a5a00aa20fa765a81da0b3a1c1a639a8b29fa4a17fa608a8f59e77a106a6a0a7629e3ba1aca527a7f29dcea036a5aba6689d33a0e3a430a6d09cac9f8ca4daa57a9c279f63a4a1a5469ce69e27a44ca5be9b7d9ed5a311a54e9b439e7da3e3a4fc9aa49dffa2aca43d9a299d89a273a4e399ba9c0ea230a44199789cbba1cea306994a9c79a16ba39e98499c65a1fca2d698719b39a1d2a2e7975d9c04a1b8a26c950080d6958e94d2949629622f8d3045af182bab30893154b1512a4f302b3135b25c29342f6f3029b30427de2ce12dabb3ce22dd28da2910b42a97c59ce09d19b493a4b8a910abbeb359a7f0ace5adf0b2caa86eae8dafe0b16ea915af28b08db05ca911af2bb011afdfa856ae85af82ad8fa8ceadeaae87ac66a88fadbaae0eac1fa834ad4daee8aa9aa7d0acd1ad38aa36a77dac68ad7ba9b9a62bac0eaddca833a6b3abbcac38a8fea56dab8cac9fa7d6a537ab61ac07a7c2a503ab54ac60a6caa5a1aaf4abb6a561a53baa66ab33a53da517aa70abeea42ca5f6a921ab01a5d9a4ada9d8aaf0a4a1a43ca95caa65a4a3a40da925aa2da45da4c4a8d3a9c4a334a497a898a944a314a486a88ca91ca305a480a8a3a9cca2d4a355a862a927a28da3f6a701a982a1ffa278a7aea8fba086a23ea7aaa88ba016a20ea79fa853a0b0a1aaa67ca809a051a15fa61ba88c9f2ca10fa68fa7199ffba0b8a530a7df9ec9a06ba5c4a6719e67a0eda458a6959da99f73a4d2a50b9ded9e03a456a5809c899e90a30ea5d89b319e70a3e9a4529b119e3ca3bfa4d29a199e18a39ea4639ae79de6a277a4dc99e99d95a22fa46099539d20a2e7a3cc98f59cdda169a364988f9c9ca1f8a27d98099c73a1dca25c98a59ccca0f1a1269600008994bb91ef925f293a2fa53002af7e2a683044312bb19c29f82fcd3008b2e728f62e333001b36626d62ca42d88b3e8222629cc29deb372903116ac97e2b3f9a393a9eeaa8cb3d8a6fdacfaadaab28ca857aeafaf8fb1e6a8eaae28b059b0e8a8aeae02b0f1aea5a847ae74af75ad4da8a9adc5ae6aac0aa847ad53ae52ab91a703ad06ae4daa44a7b1acc2ad90a9efa676ac5fad0ba9a9a638ac1cada0a84fa600acebac3fa809a68faba7acc2a7b0a51cab68ac4ba77ea5cdaa17ac65a64fa565aac3abcba559a534aa75ab6fa562a5fea954ab2aa568a5e1a932ab18a544a5bba912abcfa42ea59ba9e9aaa3a4fea482a9d7aa6ca49ea43aa985aa23a431a4daa8f4a976a3cfa390a89da914a37aa35ca85ea9aca224a32ea819a95da2b1a2e5a7e9a8dca142a298a7cda850a11ba287a7aba814a1f5a136a77fa8a3a0bca1f4a653a85fa06ea199a61ba80ea036a14da6f8a74d9fd3a0faa591a7c69e81a0a1a514a7039e38a040a59ca68d9d07a0faa43fa6009dcf9fbca4fba5909c869f80a4b6a54b9c159f3fa47ea5d69bb29eeea338a5ff9a229e36a3d3a46d9a829d69a237a48199389dd0a175a3cc98b19c76a143a352988f9c5ea140a31098809c35a116a34298349c9ca080a2cb979c9c43a07fa1b09700807c982099ec96cc28a92e5630c3aedb2959302531f2b03229ae2fba30d0b17e28b82e3130c2b2f225862c4a2d3ab360214528c72890b336998a9cb6a09db389a380a9d7aa42b347a6f4acf9ad87b23ba833ae92af7fb19ea8d4ae0db064b0afa8a7aef2afeaae68a8faad2eaf2eade1a75fad87ae11acada703ad37aee5aa4aa7bbaccfade1a9c8a68bac8cad63a965a640ac38ad97a81ba6ffabdbac1aa8cca591aba8ac80a79ba547ab6bacd8a674a5beaa2dac1ca62ea550aacfab69a500a51baa7fab26a518a5eca947abcca423a5e7a920aba1a40fa5c3a902aba0a4faa497a9ddaa6ca4a6a44da982aa4aa462a4e5a809aacea31fa4a0a8bba943a309a477a88ca92ca306a469a877a9e1a2d9a34ea84ea9a0a2a8a34fa843a95da226a333a831a9f6a1c4a211a801a94aa17ca2cca7e2a8e4a059a26ba7a4a88ca024a21ca772a842a0daa1b9a62da8e09f96a13fa6e9a7839f0ba1c8a563a7a09e9ca069a5eca6229e31a00ba593a6a89dd39f98a418a6e89c269f37a498a5819cc29ef7a33ba50c9c699ebfa31ca5789b379e8fa306a54a9be29d2fa3dfa4569a9e9db6a27ba4b499679d85a22ea44599329d46a20ea4dc98119d06a298a3b898cf9cb0a113a3bf98ea9b27a1a0a23698889cd1a027a2529500002384460ee99489285c2e133012ae3b29f82fb9309db08b28542f753060b13a28712e243067b28725342c272dfeb29520e1263a2849b3de956a9c889d50b309a358a9b4aaf5b2daa5ceacd6ad29b2eaa72baec5af2bb144a8aaae0cb036b035a865aecaaf86ae01a8bead01af2dad62a760ad92ae25ac0ca702ad0fae57aab8a696ac9bad5fa959a667ac56adc1a81ba636ac24ad52a8cda5d5abcdac7ea7a7a583ab8aaccea679a517ab5bac2fa648a5ddaa3aace2a53ca583aafdab94a517a530aa98ab38a5f3a4e0a940abf4a4eca4b2a9f5aab9a4c4a45ea99aaa74a48da418a941aa64a454a4e4a80baafba336a4b4a8d2a98ea30ea484a88da925a3b8a34ea859a9b4a256a32aa818a98ba225a312a800a935a205a311a8faa82ba2d2a2f1a7e5a8c9a1aba2bca7cda86ca18ea262a7a6a8fca067a21aa76fa89fa02aa2dfa64ca852a0c1a1a1a620a813a08aa158a6e8a7a09f0fa116a6bca7289fbca0d2a559a7769e5aa073a501a7fc9df79f0ca571a6479d479f8ca4f1a5929cdb9e1ba481a5ea9b8c9ea7a32fa5749b199e18a3dca49e9aad9d90a275a4e9994d9d2ca21da44d99fd9ce1a1d9a3da98fc9cb0a1a4a38098e29c9aa17ba33198d59c6ba1dba21a984d9ceea03ea245978a9cc1a055a2e3940000aa8ab60c07988627902dfa2e4ead7928c12e2730f6af0128902e1230d0b07427eb2d7e2f1db276254b2c432de0b28e200927d42715b3c69837a19aa2d8b2c3a2b3a935ab64b2d2a5f5ac0faec9b13fa700ae69afecb09fa752aeedaf08b0dca73faed6af60ae92a7c9ad1bafe3ac62a750ad74ae73ab12a7e6ac04ae06aabfa689acadad14a941a653ac3dad49a8dca50face1ac53a77ea56cab94ac70a621a5e0aa40acb8a5f2a47aaa02ac28a5e2a427aa9fabe6a4c8a4daa941aba9a4b6a4afa9f1aa73a488a46ca9beaa6fa47ea44aa995aa6ea454a41da944aa62a438a4f7a819aa2fa41ea4c5a8d8a905a401a4a8a8b7a9b9a3c1a36da86da957a3a2a342a840a938a34ca317a824a916a325a307a803a925a30da3f1a7f4a86ca2eca2efa7f7a8fda19ba2c7a7e9a894a141a260a7c5a818a1f1a1eaa687a8aaa0a8a1b4a637a85ea03ca162a6fba710a008a128a6b3a7ab9fc7a0bda54da7d39e7aa052a5cea6089e2ba0e5a43ca6499dff9f8da4dca5ab9cad9f3ca483a5fb9b169ff7a341a51a9bc19e71a3efa4529a3d9efba2a1a45b99a89d9fa256a41499539d3ba21aa4d498359de4a1afa39d98339d9da148a33498459d70a1fca2c397519d60a1a7a21c98cf9c0ba16ea2d696fb9cb9a008a2b3951f20b428c129bfa61c26e72c432efbaca126252d482e19ae28251c2c442d7faee724d62bce2c30b075240d2b362ca2b173213b28dd284cb218906b961c9e11b2f6a142a922abe4b146a5c3ac01ae58b10ba72aaea0af8fb07ba762aeecaf43af78a727aea3afc3adf6a69badecae5cac9ba633ad65ae2aab23a6abacb8ad9aa9bba534ac27ad52a841a5a7abaeac4ca730a546ab7fac46a612a5dfaa3fac6ca500a587aa07ac27a5d6a436aab5abaca4a1a403aa50ab71a479a4b1a9f6aa00a477a469a9a2aa9ba35fa42ba956aaa2a34ba4f0a833aaf0a223a4c9a8eaa9f2a202a4a0a8b7a90aa3e4a39ba8aaa9e3a2b4a391a89da907a3a6a374a877a927a373a36ca870a974a353a34fa854a94fa33ba339a850a9fba2e1a201a819a992a25da29da7c1a81ca228a259a7a4a8dca126a243a7a2a892a1c3a105a78ca820a174a1a9a648a88ba028a162a60ca835a013a112a6b8a77b9fc8a0a7a538a7a69e8da035a5a8a6d79d41a0e3a451a6389d0ba09ea40aa6e19c8d9f66a4c4a5779c4a9f2fa46da5149cfe9ef7a323a56e9baa9e7ba3d6a4ab9a509ed9a26ca42a9a9f9d18a2e4a34999d69ca7a145a3f598759c5ea116a3c298639c4ba1dfa28398839c2ea1b1a2b298329cfba0e1a2ca97e69cf0a0c9a215989b1fea27dc28e3a4ae25a72cfc2da7ac5726ed2c232ec1adc824392c442d5bae0624f82a762c7bafad22bb29162bc4b021200927762801b2f98e229c3c9d3fb2dda10fa981aae4b18ea465ac66ad13b139a67aadd0ae5cb009a70cae65afd0ae0ba7b2ad34afc2aca0a691adc6aec7ab81a637ad6cae6eaab5a590aca4addfa824a5bbabceac82a7f1a404ab48ace7a5b9a4b6aa23ace4a49ea470aad7ab36a491a40daa7dab9ba36fa4c6a925ab42a33da481a9abaaeba214a423a95eaa96a2cba3eca8fca9eda1b3a3bfa8c5a9b7a194a37ea896a984a14ca34da854a947a11ba31ba812a90aa104a300a8efa83aa1f8a2fca7d4a8bda1caa2f3a7cca8e8a1c8a20da8eaa847a2e4a228a832a920a3c8a234a82ea98ba3a4a225a818a923a37da2b9a7dca880a258a28fa7b3a807a20da24ca7b4a888a1bea1c9a67fa8e6a034a147a615a82fa0e2a0d4a567a7589fb8a083a5f9a6dd9e91a056a5b9a6479e5ba005a555a6b19d32a0baa401a61a9dfe9f75a4c0a5929c939f43a494a5329c759f25a461a5099c199fe4a32ea55c9bee9e98a3d6a4b29a499efba271a4ef99b79d95a235a45299629d02a2c4a3b598119d8da139a37198ef9c13a1b5a2f097d39cdea01da21298789c60a0c2a1fc97949c52a0e7a1fe94791c25272c2875a2e6250a2d612ebfac48264c2da42e66ae7f252e2d862e04b06e25be2c372e0eb12224282b682c0bb239204c26c227b5b287943b9ee99fa8b295a087a8cba935b217a4ddabdaac74b18da5eeac27ae69b080a5cdacd5ad4daee2a415acf8acbbab3aa4c6aa17ac6da8e9a238a92aaa49a59da203a923aa15a45da361a966aa15a497a37fa990aaa9a396a361a98aaa62a253a313a933aa94a171a3f7a8e9a9e9a053a3bda8c2a9b0a01ea387a888a917a01ca361a855a9e89f2ca324a80da9ea9e43a30ba8f1a8c29e52a3ada7d0a88e9e37a3baa7c2a8229ff4a2a1a7b6a80b9fcea27fa79ba81fa08da255a77ba8aca079a229a770a882a1b9a26ba79ca8e2a2f2a2f1a7f9a8b9a38ea335a84da909a49da326a835a9a1a3d9a2ada7dfa8caa234a22ea787a84aa235a209a781a8dba1eba1a0a63fa851a119a113a6a9a76ca0a0a0bca529a7399f8ba070a5f0a6779e6fa045a5b8a6c09d37a0ffa452a62e9d0ca0bda406a6aa9cb79f65a49fa5249ce39e19a448a5619b6b9ea3a3e3a4e09a279e2aa3a7a4389a089ea7a259a4d5998f9d1ea2f0a35d991a9d8ca11da3f898bb9c52a1dfa289986d9c1ca19ca26898159cf5a067a25298169ceba02ca25598859bc6a03ca23598279ca0a0e9a1d397021c6e24502551a15e25a82cda2d37ac0c26f02c352ef3ad2b25b32cdd2d90afc424442c982da9b08123952a382c5bb1e81f24269227f9b1528d81944a9c28b28e9f18a73ea8c8b115a21daa3aab21b132a4a5abbbac2eb0b8a432ac5aad44aef0a444ac6dad28ac86a4e4abc3acb3a804a4bfaa0bacc9a454a23ca962aa93a011a27ca86aa9cf9e73a29fa88aa9609eb9a2cca8cda9409d76a261a857a9e69c97a231a81aa9879d88a215a8f5a8629daea2daa7e2a8979cc2a2dca7c0a8c59be6a2a3a7a4a8eb98c5a275a792a836948ba24fa77ca80c9721a2e3a633a8289703a299a606a81099f3a1a4a611a88d9a33a295a610a8699d2ca2d4a640a86fa085a271a7caa804a39da247a893a966a469a265a8b4a9a5a42da211a838a958a457a29da7cca8aaa3c4a17aa7baa898a24da1ffa66aa8c8a13fa1d0a64ba810a10ca16ba610a860a0a8a0d3a58da7989f42a052a5d9a6659e05a0eca454a6a49d8b9f96a4e6a5019d099f46a47ba51d9cc69e09a441a5579bd49eaea30fa5aa9a279f89a3f3a4289a429f68a3d8a4bd99649f14a3a9a47c99939e89a257a41e99319df2a1e9a3b598eb9c88a174a379983e9cfaa051a31e981a9caca05da27997c59b7da07da1ad97479adb9f3ea10c97429b979fffa0f89405199f22c023a4a0bb23582b8d2ceaaab1240c2c062dc5ac8824f62bf72c07aed523942a362c22afff21f128382ae0af841d9c234a2548b0fc0bb49243947ab0179c05a4a4a44fb0209f81a69ba73cb0d2a093a86aa9daaf57a35aaa0fac03aea6a428ac62ad95a9a5a441ac3fad6fa333a471ab96ac83a07aa2e4a96bab519e1ba2d7a8fda9959cdfa17da883a9ca9dafa12ea81ba9659dc7a117a8fea82a9dd8a1e0a7d4a84f9cf1a1a1a7a6a8c899f6a172a78ba86398e2a121a763a85c93d2a1cba62ea85413b6a144a6b0a73116eda093a5ada6661891a0cda4e5a5691b3aa080a479a5821d7ea091a495a5171e28a151a588a657181ca2baa629a89e9ea7a222a804a980a4b1a28fa8c5a90ca694a2b1a81caac7a552a293a8cea90ea520a207a80ea9e6a3aca1e8a665a818a26ca15ca62aa81aa18aa1c5a56aa71ea0b2a0f8a4efa6b49e00a0d6a44ea6029eb49fa7a427a6739d2f9f64a4e4a5f29cb39e27a48ba5739c359e89a314a5699bf19d18a3a6a4999ac29dd5a284a40e9ab69d95a25ca48d99b39d4fa227a452996f9de6a1aca3b8980e9d70a10ba35a98c09c24a1b8a2dd976f9c0fa195a2bd974a9cf0a068a2a4971c9cc7a03ba20c971a9c82a0bba13697299bf49f36a18695569c8f9fc8a0b2930080dc942b95cf998b204a286229dca81824d52a4a2c12ac7b23852a2b2cf9ac4f228d29e42aa8ad3920bd266c2807ae2b1b4c21a62245ae7990639ce39b3aaedf9b15a478a4dcad989e46a73ca8b0ad1aa278aae6ab34aecca55cad48ae32ade2a608ae44afc6aa4ba56aaccbad15a801a250aad4ab41a6bfa188a893a992a478a12da808a986a4e4a12ba8d0a85ca4f9a1a3a779a847a319a1ffa62da8ffa14aa110a736a86aa15fa1f3a620a8cfa041a1bfa619a829a02ea18aa6e7a7179f05a15ca6a0a7f29d1da13aa662a7fb9c70a149a670a79a9a98a182a6f4a77b15c4a0a0a5cfa6ed1f029fc7a2ada30825909e4fa170a10226f1a0aba5e0a67f11cfa3aba91cab45a82ba413aa8fabd4a833a3f0a81aaabfa668a2cfa7eca84ba4b4a033a604a8b1a158a096a5f7a698a07ca03ea5bfa601a015a0d6a421a64c9e12a088a4dba5329d9e9f53a48ca5a69c659f23a45aa5719c489ffba328a53d9c0d9faba3f2a4cc9bd79e5ca3c6a4129ba19ef8a297a4b29a6b9ebaa274a4199a239e6ea24ba47b99c79d09a217a4e1986c9dc7a1b2a3ac98569d72a13ba33698189d22a1cea29297fb9cd8a07aa23a97b89caba04ca28a965b9c72a01ba260961b9c58a0dca13a96a79a08a0d9a18995989b23a0c1a13a950080578db58a3f9452217928aa298ea87522e0292c2befaa36228629dc2a28ac49217628b0299eac901fff256927f7aca31a0f20b9210bad759415a0799fdeac899df9a50da758ac53a01aa8e4a8eaa9ed9b61a483a567a51a93069d9c9e90a0e896019f05a05ca29f9d81a455a564a5a0a05fa78da86ba6e2a0e7a7daa87fa583a08da7cfa8f6a498a077a7a2a889a4dea028a763a815a412a1d8a643a88ca32ea1b7a61aa806a326a18da601a87ea245a1b4a61ba82ea26da190a613a8d2a12fa169a609a87ea1e1a0ffa5eba7dba0f8a082a565a747a087a193a5d8a631a0bc9f48a5eda6429f979d44a85aa86ca1f6a41babc7ab45a5eba4eaaa7cac91a9d0a462aba7ac14a8ef9e1da9aaaa9fa2b39c21a437a6079d6ca204a5b3a6ee9de2a0a4a43ca66b9dc1a07ba4c2a5039da6a074a4e7a5dc9c5da04ca4b0a56d9c91a04da496a5619c38a039a45fa5329c24a017a442a5c19b6b9fdfa302a5609b119f93a3e0a41a9b889e30a3a1a4569a3f9eada260a4e299d99d4ba219a47c99cb9df4a1b1a330998f9da2a14ca3e898559d57a1eaa26a98109d16a1b6a20698ab9ce8a07aa2c397659cc0a065a215971f9c7ea026a25e96ce9b4ca0d5a11796819b0aa05ba13d965a9adc9ee1a05a953c9b189f89a01c9500807c8c97853395ab21ba28012a40a8ea215a296c2af0a9082156285429afaaa11f48260a2830abf91cd9231c2575abfd17e91c161e4fab9c951da095a0c4aaa79c9ca4b9a5a4a98c9daca5e1a63ca8b89cc1a4c6a547a6079b5ea38ba415a5239cdea3c8a454a59d9e6ba59aa677a6fb9ff9a57ba71ca6769f0ca6bfa7fca4be9f2fa6a6a77da413a038a69ea715a448a00ea672a7cba38da0f4a57ba70da3c1a002a668a7d9a2dea0eda57aa732a2eba0f0a55da7c8a1d8a0e0a559a753a1c0a0bca536a7eba0b2a0a8a51ba795a0b9a0b6a516a78da0afa09ba5efa637a0cea0aba513a7e99fa5a0b5a519a79c9f11a0aaa4f6a50a9ee89b11a16fa3789a5390b59b159d7a951a96439c599d1d971b9b919fd6a0dd991b9d97a109a3389b309e2fa373a4109ca99f7ba3bfa4109cb89f71a3b0a4df9b5c9f29a38ea47b9b149f31a389a4539bcc9e27a388a41c9b8f9e1ba37ea4fa9a8a9e17a37ea4cd9a619ef4a26aa4469a489ec8a266a40b9a199e98a249a48399b59d40a22aa43a99589dfca118a401990d9da8a1d6a3bb98fc9c81a196a39a98bd9c3fa142a32698839cf0a0c9a2e7974c9cb6a078a28997fb9b70a00ba219977b9b2ba09ba15c96559be99f30a17a96a89ac29f18a18f95149b9d9faba07b930000cd18691963943c2007275b2858a662208027a72850a8cc1f6126e127e4a83d1d4d245d2522a9551ac92062222fa9e81125142d15e1a82e96bd9f00a095a86c9a1ba3d2a325a8f89b7ba418a50ba7569c17a415a50ba65d9ca1a39ea451a5c89ceaa3bca45ea5649d48a451a56ca5c49db0a4c7a50ba5f79dfda44aa6a1a43d9e16a559a626a47d9e26a566a65ba3e09e31a56ba6cfa22c9f31a590a63ba2d69f55a597a6eca11ba065a5b6a68ea153a06da5cfa62ca144a073a5c3a602a149a07ba5b2a6dca04aa087a5d4a6eda064a085a5dca693a06aa09ba5e1a66fa066a08fa5eca644a06aa063a5d5a603a065a02ea5cea67e9fd59fbca441a6509efe9d2ea39fa4b99cb89ac9a022a2f199f39932a068a14599949bbca025a2089a179dbea180a3e09a8c9e6ca228a4949b6f9f9da258a4959b01a0cda25da4d99bbc9fbca260a4929bf09e75a238a4139b9c9e50a217a4839a3f9e40a2f8a34a9af79d19a2fba3c499a29dd8a1b1a37599569da6a18fa3f2983f9d6fa159a380981c9d50a12ea35a980c9d31a1fda20298f49cfda0d7a2b497bf9cd8a06ea2f296869c8ba019a297963f9c57a0c9a13896069c2da081a1fd95949b0aa056a1cb958a9bf69f11a11396c19abf9f20a1d7958a9a539fb9a04095de25812ac02b72a983289d2c8e2d14ada928ce2caa2d4eae6a285a2c242d69af34274e2b5a2c28b0a125ca29252bd6b0c221ac2649287ab1fd96e814591c40b1fda201a685a678b0d9a5a5a921aa49afbba69daadcabbead74a610ace2acc6ae39a4afac2faebfb0fc1d5da85caa62aec0257ba1c1a7ebacb428291fd0a0ecacc029d524691ae5acdf292727492392acff2b612a582882ae8f28ada300aa2baeb7285f9414a408ac5d296a21dd9ebdacb4292d248a1339ad562940248f1390adfb283624b019a3ad0a2863216893b1ada426c71e9a9cbfade125e81330a0dead9723a69c58a368adc599f8a493a622ab4fa2d0a5dfa618a53da230a68ba7f8a0f2a0b7a514a79f9fd69e80a5aea6179f36a136a7fea742a11aa3bda8b0a9a5a1d7a117a755a8509fc89f4fa465a5a99cc19f11a4f6a49a9ce59ea1a3c2a4839c929e43a399a44b9cec9defa265a4399cab9d8ca226a4f99b399d30a2f8a3899be69ceea1a4a3219bcf9caca170a3779ab19c68a135a3299aa19c4aa1ffa2b499719c27a1cda23f99739c07a1b2a21e992e9cf6a07fa2c2987c9ba0a0fda16f98b99a23a061a12997439a03a03ea1f1961a9adf9f0aa1d096099aa39fe6a0b096189adb9fc0a02b977499609f9da08297729c47a0a0a1a0974b279e2bae2c1babb029dd2d022fe1ae9a29b62dc12e05b0d929dd2dde2ef7b0f728242de82db2b1d4272c2cf92ca3b2df235c282c29e7b2719ac19e5496ccb23ba405a856a827b294a622aa05ab32b132a8cdaac2ab1eb08aa7c9aa70ab8dae09a8c1acbcadc1ae7ca55face4add4aeb71ad7a90bac7bae332781a204a86eaea4298924d61b46ae682b112a5e2826ae6d2b9d293627e7ad2529eb9f1fa872add728d6a194a81bad40299d948fa5b2ad3429c31a5ca3fcad3729831fcda11aaeb928601fa5a063ae0b284f1db0a1b3aec0262e147ba2dbae5425fe9921a3ceae5321daa0cfa43aae979f10a61aa7c4ab4aa4a9a75aa83da697a3aaa793a80da3e2a27ea799a8d8a146a160a578a68aa15ca161a582a653a097a174a6f3a70a9f56a1e9a656a8e39df79f76a551a7e69c0ba0e2a45aa68f9cab9f71a491a5869ced9e03a413a5159c5e9ebfa3efa4cb9b259e9ca3d9a4919b0e9e5ba3a8a4509b079e2ca38fa40c9bf19de8a266a4c99ac69db0a253a47f9a809d6aa221a43b9a229d15a2f2a3e999d29cd2a17aa39799889c87a127a31199419c34a19aa2c498d09bdaa02ba24798c19a78a0cca107985a9a2ba061a13797ef99da9fefa09596d8998c9f9ea0679653991a9f64a007962c9b409ff1a0f0969727592c512dfaaba12acd2e1430fbaf552a722e7e2fa6b0b42af12e2930e6b1ee29ff2d1c2fcbb23428672c6f2d6fb30424d128b529fbb3179be1154b1df2b30ba527a87aa85cb304a8ffaa86ab5bb22ea95fac0aad52b17da926add4ad43b071a99dad67ae5dafe8a866ada3ae5bae58a51bac11adcdada41dbaa723aaaaad2528f91d95a033ae3e2a3526fe1e9eae7f2a3f250516e9ae892ada1e05a498ae3a2a1e15b8a551aef229d21440a541aecf29141b78a490ae8b29ac1d51a3bdaecf28ad1a30a3e2ae62288b1ae8a228af72275514e2a360afde255a9ae2a47aaf151f97a3b0a64eaef1a1f4a7daa8e8aabaa44ca80ba9c1a524a43da8e8a888a439a32ba751a8fda260a275a6e4a73ba1f5a17ea6fda7ada0cda10ea778a82fa0ada1fda665a8609f1aa19ca624a8a69ec2a041a6dca7389e7fa085a500a7be9d0fa0b5a4eca5d79c5b9f31a44da5819cde9e09a420a5499c8c9ed9a311a52b9c389e9ba3dfa40a9ce49d5ca3bda4bb9ba09d0ca398a4679b4a9db3a265a4bc9a179d56a228a45f9ab29ceaa1e4a3f2997e9c8ba15ca35399439c25a1ada2f198399ce1a057a28698469cbda019a22d981d9c8da0e7a19c97b99b6fa0bea11797859b5da07da11097639a1ba050a1ba96359c2da055a172960000e81c681eaa9de82ad32e43303caf542ba72f7a3038b1042b4b2f553032b2fe29242e5e2f23b38328c62cb12dc5b32924ff284f2a24b46a981816621d36b4dea4efa73ba8e3b371a8abab22acd2b267a9faacb9adddb1c3a9b2ad69aee1b0f1a917aef0aef4afbca9e6adc9ae6aaeb7a823ad4fae80adc3a488abaeac33add71fa4a647a9c7ad8128111bbba168ae8f2ab921c2a0eaaee42a942096a347afc72a7c2059a449afc92a4e202ba426af8d2a2e20daa33eaf202a102063a278af7729b81d3ca2a6af0029cf1a37a3dfaf4f288c142aa403b047265c9df5a4b5afd91a8ca510a8ceadf2a369a82ba9f0a96aa50ea9eca9b8a59aa47ba84ea90da423a42da820a90ea3f9a32ea806a961a2b1a332a817a9d2a1cfa2bba7cda806a137a2efa65fa82ba022a2b1a628a80aa095a140a6caa75e9fd7a0bfa5fda6b39e78a027a56da6029e1ba0c2a4e3a57c9d819f78a495a5269dc99e49a460a5e39c589e04a40ea5939cee9d8ea3d7a44e9cce9d34a3aca4cc9ba99ddba287a46d9b909d88a25ca4139b869d41a23ea4919a2c9dd4a1f8a3dd99c39c74a17ba34c997b9c2ba1dfa2ca980c9ceaa050a25498609b97a0d3a11898e69a7ea0aca1af97d99a6fa068a10b980e9a38a039a118981a9c3ea0f5a18c9600001b0c9d129997e52a2c2f6830b9af8e2b1330bf308eb14b2bb82f80308fb2ef295b2e762f64b37928c62cad2d08b4922471296e2a33b4dc11a41f84202eb4c1a4cba734a8bfb325a8e2ab7bace0b278a945add9adfbb1b9a9b9ad9faefbb0e6a9feadcdae14b092a9bfadb8ae86ae3ea98ead5eae8ead7ba8faac07ae17adc3a435ab5eacaeacd21de2a603a948adf627919fb8a626ae5e2a071eb9a428af332b92210ba381af132b8021ada1deaf3b2baf228ba1f9af972a5f216ca111b0252a27207da21db05729da1d79a334b0a0288e1434a32ab0c425f19e73a560af939bfca6c6a8e2ac74a4bda8cba987a8b7a4d0a8e7a912a57aa4a1a87da91fa44ea48ca875a9bda221a45ba81da920a2d4a33ba814a97ea1f9a218a804a9eca068a27fa7aea859a0eea1f2a657a8f69f7ba15ca6f3a7349feaa0d1a522a7c79e86a079a5aba64e9e22a004a540a6c89da59f9aa4eda5099d319f4aa4aea5b29c9e9e1da46aa5459c2f9ed5a32ba5069ce39d6da3f5a4a19bac9d44a3caa4629b8b9d02a38ba4d29a319dafa256a4809ad19c52a210a4269a7e9ceea1ada39399319c85a129a30099d79b35a1bea27d98b49bf2a084a21798b39bdca063a2b097ff9bdba012a20f98b69a98a0dfa1af97979c99a01ca271960000710c0d13e296fd2a102f483080af7f2b1930ce3085b1432be32f98307fb2e929882edc2f51b37b28e12cd92dd9b3ba245e29d72a18b4a891831c621d1cb4a7a440a8a5a8b8b3cea789ab49ace1b258a93cad0aaef1b1e0a91baee9aee8b0f2a93cae44af07b07ba9d4add3aeb4ae02a978ad7cae96adada83dad40ae05ad1fa8aeac90ad94acfca5ccabc4ac4bac2c9c3fa97babc3acbb2521a4a9a8a6ad6c2943143ca598ae982a0c2159a25cafd92a552244a1fdafbf2a45222da119b0582a4022f09f3ab0cf29c21ff6a043b09b283b1a91a20fb0a2216ca4fca744aeb5a26ba8c1a944aa37a546a94caa89a60ba51da9fca901a5c4a4aba89aa95ea4d4a4a4a8b9a9d0a369a473a874a90ca32ea45da84ba9a5a269a33aa829a9fca1b5a2b9a7e2a856a1e5a1dda65ba878a08da164a603a810a026a125a6baa75c9fd6a0dda57ea7359f86a095a532a7779e1ca037a59fa6f99d9a9fb7a40da6679df59e53a486a5f49c6e9e1ca42da57c9c309edea3eda44b9cf29d7ea3bda4229ca09d20a385a4dc9b469dc6a24ba4789b0c9d77a20fa4d99a999c05a29fa3739a259c98a11ba3d099c49b3ba1b1a243995d9bf4a05aa2d098269bbca027a23998439b89a0c2a123980a9a28a084a19597139c03a04fa1e2950000bc030c12b4979e2a262f6830b6af7d2b4430fe30aeb1b52aa02f853074b27d29542e9a2f1cb3dd27a52c912dabb3fd229228782900b40598ec151617e9b36ba429a8fea876b37ba7bcab72acbfb2d0a8fbaccdadd6b177a9afadacaed0b0a3a90eae1daff6af7da9f0adddaeacae15a989ad9aaea6ad75a816ad11aee1ac17a8beac92ad5cac03a87aac5aad04acd0a626ac2cad94ab2ca35daa0facccab2f1d0ea822aa9aacf325a1a2d7a794ad50288a13a3a44daed328cc195ea3d3aec728dc1974a325af1228b29911a5f1ae9b2254a4ffa708aef69e65a8c1a9d3ab6ea469a9e0aa12a86da57ea998aa5fa5b1a52ca92faa79a4dda4dea8e6a918a488a49aa89ea963a34aa472a859a9b7a2eca352a82fa95aa23da31ba80fa9d0a190a2bca7bca848a12aa261a777a8eba00ca2e3a62da88aa09ea14ba6bea719a026a1e9a565a7599fa8a0a5a518a7f19e83a05ca5dea6479e35a006a567a6c29dfc9faba4fea5189d859f6da4a8a5979cc39e2aa449a5469c409ec3a300a5519be59d4aa3bba4de9a8e9df9a288a4929a669dada24ea45c9a1b9d60a21ba4229af19c28a2f0a3b999b69cd9a16ba33e99489c4fa1aaa29498249c1aa16da23898239cf3a019a25d98ee9a94a0dca121987a9c97a011a24d9800006d1a841be89d97298a2e1b3067af8d2ae82f9d3037b1442a882f82303ab22429282e7f2febb25f27872c7e2d79b3742268285629b6b3e310a715251da4b3f5a255a771a84ab3c8a63eab2bac9cb28fa806addaad9fb14aa9ecadc7ae92b0afa943ae42afe1af85a946ae58afc5ae12a9aaadd3ae8ead7ea82fad0eaecaac2aa8ddacd0ad4facdaa7bbaca8add7ab87a76fac4bad2dab03a7f3abe5ac88aa76a521ab8eac5daa82a218aab8abb6aa4899a4a830aa92abaa1b3fa71ca92cacce1c7aa6f5a832aca50e37a8b2a9b7ab4da12ca98faadca9aea4b8a9faaacda7fea49ca9c4aa7ca5daa420a941aaa5a4e7a4faa828aa62a4f2a4f7a822aa64a4b9a4b2a8d5a9f1a337a46ea86ba929a387a338a81aa9a5a2eba2efa7e3a803a2d0a2a7a7d7a879a16ca287a7d0a841a104a209a786a8cda07aa171a6f2a758a00da102a671a701a0e2a0c5a542a7599f8ca065a5bda6cc9e42a007a559a60c9e13a0cca414a6b49de19fb3a4e8a5469d999f7da4a3a5fb9cde9e35a456a5ac9c709ee6a3fda4389c0e9e5aa3b4a4f09b049e11a372a4549b959d84a223a4d59afd9cd9a189a3029a729c69a1eaa25299fc9b01a158a2c298729bb8a000a22898a89ba9a0aaa11c98f39a7aa06ca1fb974b9c64a0f9a11d980000d38362040595d029d92e25307faf4d2a872f5430f7b0e2291d2f4e30e1b1e328ee2d442f95b21427582c4a2d17b386223b28242951b385907015a01644b3fea2b6a74ba8eab247a653ab40ac4fb233a8f3acc9ad89b1dba8c1adbfae8eb027a914ae06afa5af01a9daad01af53aebca898ad97ae7cad50a827ad2eaea9acc1a7cbacc0ad13ac68a790ac75ad6babf2a643ac38adc6aa90a6ffabd4acf1a91aa68aab95ac77a9e1a530ab6bacfca83fa5b3aa20acd2a8aaa411aab4ab81a888a4caa962ab26a8b1a428aa82ab6ea70ba54caaacab8da6f9a4dea927aba4a5dfa44ba97eaa6aa5aea40da915aaf0a497a407a919aab4a46fa4eba8f9a978a449a4caa8d6a91ba420a49da8afa974a3b4a36ea86ba9e3a216a31ba80ba94ca293a2b2a7afa8f3a144a256a788a889a1f0a1f1a655a81da1b6a199a617a899a079a149a6e0a755a019a102a67fa7d69ff1a0c8a540a7759fcca0a4a51ea7329f6fa06fa5e3a6a09e17a01fa59ea6f69d849fd2a440a68e9d139f73a4e2a5f19cb69e15a466a55c9c299e81a3f2a4b49bda9dc1a25ba4019b4e9d33a204a43b9aa79cb5a15fa38e994c9c55a1dda20399189c08a1a1a28f98289c2da1efa2b098109c24a1e7a2a898dc9acba06fa22d98b49c02a173a2b69600007c892e8458944929632e023000afdf296c2f7030e5b08929f32e3630ddb15d28ad2dfc2e8bb253260f2cfa2cf7b2912219286d292cb33510ee1be21c25b319a2e8a640a8c9b2c6a535ab3aac35b201a8f8acdfad63b1ada8c2add0ae71b0d8a8f7ad12af60afcaa8ccade4ae42ae83a85dad6bae5dad27a834ad1eae9eacf9a7eaace4ad17ac69a7a7ac8dad42abbfa623acf6ac27aa73a6d4abc1ac92a92ba691ab9aac05a9f5a529ab4faca0a8a5a5e5aa22ac42a86aa5a4aafeab9ba737a573aac5ab0ba7eaa41daa5aab91a6c0a4b4a9dcaa20a6bca495a9bcaacfa5bba471a9a7aa7ca5caa488a9beaa54a5e0a468a9adaae7a489a422a94caa61a444a4e6a80caa42a4f1a39ea8a1a907a4a2a365a86ba978a353a363a850a9f5a2f0a233a82da97da28aa2bfa7c5a8a8a1fea126a75fa81aa1a8a1d3a62ba89aa08fa197a618a858a061a154a6bea7e29f3da1e4a551a7439fdfa07ba5c6a6739e77a009a546a6dd9de89fada4e5a53e9d5d9f6fa4a2a5eb9cee9e3da462a5869c8c9e05a41ca54b9c309e94a3e9a4c79b009e41a3bfa4719b7c9dbaa295a4fa9a149d65a270a4a29aa59ceda123a4f5996f9c99a18ba37299379c6ca129a30b99259c4ba1cfa23599759b25a1aaa21e988a9ceaa06fa277940000e5838a0a1c950b29242e972ff1ae8729672f5630e7b04629f22e3730beb15a28e22d452f71b23a262b2c202de2b2d621192809292cb31d90529591961bb364a21aa8a5a8c4b278a519ab2fac31b24ea7dcac9ead6cb149a8a0ad88ae57b082a8d5adf7ae36af58a88bada1aee1ad29a844ad50ae10adfea720ad28ae74ac92a7e1acdeadf7ab30a790ac79ad1eabb1a637ac0dad27aa22a68fab92ac3fa9eba53bab5aacaba8dfa51eab4eac45a8cca5fdaa3dac00a8b9a5a8aa05ac7fa788a546aabdab88a65ea51daa71abf8a532a5f0a918abb5a5e1a4b9a9eeaa6aa5afa47fa9a0aa75a5a8a43fa95caaf9a49fa407a921aab2a472a4d3a8d5a94ca42ea499a884a9f6a3e5a36da871a9b1a3a5a358a861a97aa343a32da820a9eaa2f0a2aaa7b4a830a299a23aa778a884a153a2fda670a80ca100a2cda65ba8cca0a9a176a630a881a04ba124a6dfa70ca0ffa0baa542a78c9fcaa07ba5eda6119fa9a022a591a69e9e3ca0a6a405a6bb9d489f3aa48ca5279dbc9eb3a31ca5b19c729e4aa3e8a44a9c179e35a3b1a4329cff9d08a380a4979b9a9dc4a248a4049b4c9d58a205a44f9afe9cf8a181a36e99b29ca5a138a3f498689c73a1f4a298983a9c57a1b5a2c998be9b45a19ca2f498549c8ca09fa14c960000048486048893cf28142e7a2facae0f29032f1c30c4b0a528712edb2f80b1ca27862db52e35b2cd25cc2bd12c9db266225128bf29ebb2be0f3715d81cf7b200a204a8fba8a1b21fa53eab49ac0cb2f8a6dbacc6ad2eb1e8a76bad9eae3fb034a8a4adbfae19af27a886ad84aebeada3a703ad19aed1ac59a7d0acc2ad2fac07a79eac8cad8aababa66eac59ada0aa7ea626acfcace7a92fa6c9abb7ac43a9f9a560ab84acb8a8a5a50bab55ac4da842a5aeaa0faceca715a569aab5ab3fa7eda446aa7dabdba6dda4e9a942ab59a6d8a4b6a902ab09a6d5a4a6a9ddaac8a5d8a47ea9c4aa89a5a4a45ea992aa54a58ca43fa957aae5a43ba4fba81caa83a4d6a39ba8baa91ea475a371a87ea9f7a329a339a838a999a3afa2bfa7d7a8c9a24da27ca7aea84fa20da258a795a80aa2f4a14aa78da89ba1cea107a75ea82da1a3a1bca633a8b2a06aa15da6f0a756a029a105a6a0a7c39fc0a0b7a53ea7f79e6ba06ba5c4a63e9e1ea014a565a6ca9dc29fc4a4faa52f9d6c9f7fa4baa5b49c159f48a47ba57a9c8d9e11a443a5179c6a9eaea301a5679b0c9e17a3b7a4e89a849d3aa219a4de99259da1a134a31f99a59c4ea10fa3a798959c1ea110a35d98ce9cf7a0e3a21b98d79c9da03aa21198f29cb8a085a2da9800809d9b259c089937285f2d832e5dae8f28e52e123079b04628582ebb2f3fb12727512da62ee7b173258e2bad2c68b21421bb27d128b0b2388f0b954696bdb229a1cca779a85bb2dea41fab43acccb18ca6b6aca6ad1cb15da754ad66ae48b0d0a767ad88aefcae7da719ad29ae87add7a6bcaccbad8bacb8a68bac76addaab6ca650ac46add2aa37a62bac16ad00aaeea5f5abdfac54a9d8a592ab93ac92a887a52dab56ac33a849a5b9aa28aca1a714a556aacbab10a7eca410aa4eab87a6cda4e5a935ab0ba6dfa4c2a911abcea50ba5b4a902ab91a50da588a9ddaa50a5daa463a9b2aa18a55da40ba928aab2a43da4baa8cda956a40ea482a889a913a4f1a358a85ba97ca3e5a350a84ba976a38da33ba845a91ea337a32ca82ca9bea2d1a20ea807a94da299a2e7a7dca8a7a168a297a7b8a83da12ba23da77ea8e1a0f6a1eba64ba890a0a0a170a600a832a04aa1e4a570a76b9fbba08da526a7d79e55a020a5bfa6519efb9fd3a442a6e29d959f72a4e9a52d9de29e22a475a5969c819ee0a33da5539c519ea4a32aa50a9c069e58a3efa4c39bb29df2a2baa40e9b559d8ca268a41b9a209d48a20da4a899159d18a2baa349990e9ddca151a3e398ae9c8aa1d6a2e998e99bdba034a27398ba9cb1a0b5a103960000010abc0a4195d5274f2da22ebcad4228632ea52f36b09f27cf2d2b2fdcb09f26122d402e8db10225302ba92c2bb2bc20e6264f287db2cf8eec94279680b2d7a09ba7c2a833b24fa499aae7ab89b1daa58aac75addab0c1a623ad2dae32b010a734ad43aed7aec7a606ad08ae72ad8fa6caacc6ad80ac6da687ac78ad1fab46a639ac2dad09aaf0a523ac04ad64a9ada5c4abd1acc6a865a560ab7fac30a843a5eeaa45ac9ea71aa5aeaa1dac36a71fa58daa07acf3a6f6a44faac6ab94a6d7a405aa5eab2ba6aea4aca9fbaad1a5aaa47ca9cbaa88a58ca43fa96eaa34a564a4f8a830aaeea43aa4caa8e4a9ada412a4a5a8b1a976a4fba36ca86aa92ea4aaa342a82aa98ea365a319a815a94da33ea30fa8f8a8eca2dea2e7a7eda8c6a27ca2b7a7c6a85ba24aa277a7aaa8eba11fa212a781a877a10ba2e8a652a8eea0d2a19fa633a89ea071a173a601a866a048a131a6ada721a0d4a0f6a580a7869f8ea0ada51ea7c79e37a045a5a5a6019ea79fc0a41fa66a9ddc9e43a49da5af9c989ed8a34aa5259c619e79a3faa4e69b0c9e09a3bba4259b829d7da267a4639a249d11a203a4b899fd9cd8a1aaa35199e49ca8a185a3f698cb9c79a142a361989f9c3ca19ea27698ce9ba2a0caa15597839c6ca0cca175950000901c671dc79ef225912cc72d05ade526582d7d2e34af8726202d652e3db08b25512c7f2dfbb08624d42a402ccbb18820ca2640284fb2a78eec94309659b2c5a0afa7daa808b2aca448ab6dac76b1c5a5b9acc4add4b05aa608ad40ae26b088a618ad32aebcae66a6d7ace2ad5cad55a691ac90ad48ac1ea655ac56adf2aadea523ac09addea98ca5e9abcface6a869a54cab81ac1aa80da5d5aa25ac06a7cca45eaaddab8ca69aa415aa5fabeaa59da4bea918ab95a570a482a9ccaa42a568a457a983aa33a53ba42ea957aaf4a439a414a93eaac6a41aa4f5a816aaeba40ea4c2a8d8a9b8a4d5a3a7a8b7a989a48ea38ba894a981a458a370a86ba979a459a347a844a960a422a30da822a935a4cfa2d5a7fba8c6a3c0a2baa7dfa824a394a28aa7d4a89aa22ba255a7a6a81ba2f7a1e7a66ca89ba193a19ea62aa807a14ca161a607a8bda023a136a6caa782a0f7a009a68da728a0aaa0a6a50ca7739f66a033a58ba6909e13a0bca404a6b69de49f6fa4aca51c9d799f1ca457a5649ce19ebea313a58b9b699e4fa3cba4d19af99deca28ca4e299739d6ea239a48599269d25a2f7a34799199dd2a177a3ce98fc9c84a1fca29a98019d47a1b3a24598fa9c3ea175a278989e9cefa041a20998b39cc5a045a21d9883206f287429b8a88525552c582d39ada525672c232d6bae3925b02bce2ccdae5623ae29342b20af63213a28332927b00d20ee25042820b1f914981bb91cd0b147a01ba7e4a8b6b170a44dab73ac27b1a8a5b7acdead87b052a62cad65aeb9af55a6faac1dae44aee3a5aaacaead13ada2a54cac5cad05ac39a5fdabdbac57aa09a571ab87ace3a8dba406ab4cac1aa8cba4b5aa16ac2aa7bda458aaedab48a6b8a429aa81abc0a5a3a4f6a94aab75a572a4a9a9ebaaf9a453a46aa9baaac2a44ca443a96aaa8aa432a408a93eaa86a41da4e8a8fca955a4fea3a9a8d0a91da4cba392a899a920a497a385a884a92aa475a379a871a95ba452a377a86fa95aa42ca364a85ba96da420a340a83aa938a4fca20ca808a9eaa394a2aea7d6a833a31aa27ca7a1a8d7a2f6a148a798a866a2c5a116a780a800a281a1cfa655a88fa12fa179a614a8f4a0faa02ca6d4a76fa0d7a0c6a558a7de9faaa071a5d9a6559f74a010a580a6899e15a0cba43ca6ec9dc19f75a4dda5529d5c9f3ca4a1a5d49c059f08a447a5989cd59eb3a3f9a43b9c8f9e41a3b3a4719b3d9ec0a25da4ee9a999d0da2dca3c399fa9c9fa14ba32b99749c59a1fda2f898569c38a1dda2bb987f9c41a1c7a2fe98239c28a1e3a2e698c49c04a1b0a21a98c62074283d29dea722252f2c472da8ac25252d2c232db6ad0225d52bed2c94aee322bc29402b8fae7a20e127e52887ae071cb823de24e5ad5a110c1831195eaee29cc7a4dba49baf0aa212a9b0a99aafc1a490ab98ac7caf03a6eaacedad27af61a519acd8accfad78a43bab44acfcab9aa43dab5dac8eaa84a40dab3eac31a976a486aaf9ab0da857a42eaaa5ab02a750a416aa5cabc8a550a4e0a942ab57a549a4a2a9f7aae5a422a45da9a5aa71a405a41ba951aa06a4ada3e1a80baab0a385a3c7a8d2a962a371a3a2a89fa927a362a379a874a9e8a240a345a833a998a2e7a211a802a9eda2b1a2dda7d4a802a3b4a2eca7caa865a3c0a20da8eaa8bda3b9a227a80ea91ea4b4a224a827a92ca461a214a8f8a81ca450a2dda7dfa85ea37ea26da7b0a8e0a288a231a791a867a2f9a1f3a666a8e2a122a17ba61aa824a1c1a0e8a57ca756a06ca079a5eea6b59f72a054a5a6a61b9f66a028a568a65a9e4fa0dfa41aa6bb9d22a097a4cba5269ddd9f47a482a5cc9c759f2aa447a5729c229ff9a320a5179cb89eb9a3e9a4d89b879e53a3b1a4229b029ecda25ea4589a839d5da216a4bb99319dd4a192a31c99b99c5ea101a3d098909c06a195a29a98849cd0a0fba1ba98949b36a08aa149985c9c46a0a3a1009543193d251426a4a14d25472c6c2dafac04252a2c282d00aec324262c342d1caf16242a2b8b2c01b058224829a02a71b0d81e38251527e1b09a122213861419b1c69cbca474a5eeb0bda042a82da981b01aa262a9acaa91afb4a124a962aacbade3a05ca866a905abe7a013a8f8a857a899a12ca8f5a8cea655a295a89aa98da5d1a2d4a8eca947a5dca2dfa803aa90a4f8a2eca817aad3a3cca2caa8cba9fca2f0a2b0a8b3a9d2a1d4a297a89aa929a1d1a26aa86fa990a0cca24aa84da96fa01ba330a834a954a016a31fa820a9a1a024a305a803a984a007a3d7a7fca81ca1bfa2a9a7d0a8aea18ba2a3a7bea8e2a287a28ea7ada8a3a388a292a7aba823a4b6a2e8a7e6a882a4d0a224a81fa996a49fa217a8f9a87da45da28ca7aca804a41ea201a76fa826a308a2eaa656a8b1a2e8a1b0a640a8fea13ca129a6eca763a1caa0d2a552a775a07ba086a506a7349f57a042a5c0a67b9e3ca018a569a6fe9d06a0dda41ba6409dc19f94a4c6a5bf9c559f3ea45aa5669c989ecfa3f7a4c49b369e45a399a43b9bd99dc3a259a4cc9a839d4ba20aa4669a369db6a16da3de99d69c46a1d6a27b997b9c18a1a1a211994a9cf1a070a2f8980e9cdaa05ca2b7982e9ce4a01ca2c1988f9bb7a025a29598319c94a0cfa1bf9700000e185f198a9c4524f42a762ca2ab9e24d02bce2c67ad0524422b842c79ae0923332add2b66afc321c328f7291cb02c1ecb248a2663b0c111cf18231a95b0839bc8a37ea488b05a9f2da719a848b03fa1c1a89aa9a3af0fa237a9b4aa8bae65a2a2a9ebaaf0ac63a296a9c3aa96aa95a266a9a9aac2a780a214a924aa97a42fa2a2a8caa986a24ca28da8ada99ca0ada298a8c9a9b69f69a26da87ba98b9d9ba23ca82aa94e9d97a212a8eca8199d72a2c6a7d3a8fd9c66a297a7b1a83a9c6ba292a794a8389c44a25da792a8359c1aa25ba775a8349cf6a1fba651a8f99cf7a1eca64aa8729e12a2f6a652a8a4a06ea25da794a817a38ba20aa8f8a89aa491a245a869a930a564a265a89fa938a505a22da868a9f6a4e4a1a9a7eaa877a406a24ca794a8a3a36ea1f7a65ea87da21ea195a632a898a118a176a60da8f3a0d5a0fba588a764a084a07ca5f5a67a9f25a018a56ca6599ee49fbca408a6b19d709f75a4a6a51b9df69e29a442a55c9cc39ed6a3fda4e19bdc9e89a3e3a42d9b189f26a3b8a4829a2f9f05a399a4179af89ea2a27aa4c299199e0fa218a49399fe9c93a18da3f198cd9c63a13fa3e198569c13a105a3a6982e9cb9a05ca23698b39b6ca07ba1fa97ff99cf9ffea06297f99a1e9f9da07b9500007e169717069c59225c290d2b4faab923a92ad22b73ac7223542ab12b62ad4c2244298d2a01aed4208827b62863aeab1c8e228024d4ae8c102391811205afbd9990a140a2feaefd9cd2a4d5a5c6aecc9e1da6bba782ae0aa02fa794a874ae13a173a8b7a97badaca2a5a91cabdba9f0a253aacbabeea3d1a2ffa96fab669af0a244a97caa60108ca2e6a80daaf51878a291a8a3a9831825a24da84ba93f1811a21aa80ea9ac19e3a1dda7c2a8451ccaa16fa780a8e41cafa1b8a62ca8861d55a1e7a599a7731d91a13ca596a6821dc0a038a572a6e81deea0fba473a65c1ed2a067a501a7701a80a177a6ffa73c9c96a206a8e7a87ca3f6a289a8b8a926a6faa2a0a8bca9d4a69fa27ba88ca93da6d4a114a816a961a59fa1e1a7e9a88ea46aa129a76aa806a312a15ca6f1a78aa1e1a0cca58ca7a7a073a055a5d7a6dc9f64a0c8a465a6be9e0ba0b8a428a64b9e829f7ba4d4a5b59d189f3aa486a5239d7a9ee3a32fa59e9cfb9d2ca3c4a4c49bed9ddca290a40b9bbd9db7a26aa49b9a9c9d6fa238a4549a7b9d13a2fea3b699479d9ba16ea34599eb9c2ca1d7a2a398a79cf4a078a27098579cdaa05aa22e98279cd2a054a22798119ca9a030a2ca97269c69a0c1a17697539b10a052a15996e59c7f9fcda04595008041929f910f99d1200428df28a1a82a23ef29472bc9ab72225529a62a72ac8e218d289b2914adee1f1b269c275cada41b0f2108238fadb40f3c905a1187ad83990ca253a25cad709d81a51fa6bdac5c9ee3a640a843ac30a043a824a95dacd8a222aa0babe5ac94a51bad0dae45aaf8a420ad65ae59a160a48aaa32ac33a0f0a092a8a6a986a084a109a800a90ea19ca1d7a7d8a83aa15aa145a776a8f2a03aa1f4a650a8be9f09a1b5a6ffa70f9f07a161a6bfa7c39ddba002a66aa7259cb2a09aa5bba6f19770a0f1a4e9a57a19b69fdaa4f3a51d21be9f46a427a59725da9e06a207a3072749a01ba4d3a45b21a6a292a8d4a9fda6f1a342aaecabb5a98da3f3a974ab8ba877a278a8a3a905a6bca1eda66fa832a4e4a0d1a55ea7eea161a07aa519a7e4a03ea05ea5eba669a055a00da563a6b69fdc9fb8a4f8a55e9e979f6ca4a4a57b9d429f2ba46aa5ea9c209f07a43ba5b29c1d9fc1a301a5589ce79e85a3d9a42a9c959e26a3a1a4989b8c9ed6a277a42e9b619ea3a253a49a9afd9d67a23aa4059aba9d08a20ea46799669dc2a1b1a32999409d60a120a3a2980e9d15a1baa26e98ff9cdea067a20798a89ca6a045a25b97509c75a021a2cd96069c5ca0f2a10e97b49a26a013a2cb96dc9b46a0eea10e9600800490c08d7b9435212428222987a8ac21e828182a86aa4a21a128b529c0ab72206c27a1283dac6b1ef5246f2677ac011b672007227dac8e88969ace997fac859a30a32da451acf29d0fa69da72cabd79f22a750a854a9439c5ba443a5b7a52294909d7e9f71a0fe8e169b2c9c0c9eba97f09fb4a011a1a39d19a4dca4fda3769fa9a5bca6a4a44ca06aa6d4a7cba4a9a0bca6cea79aa4b4a060a697a725a4f8a066a688a76fa3d1a054a698a7daa21da164a6f0a755a2bda01fa6baa7bea172a021a69aa758a1ff9e95a526a7dea0cb9c49a66da7a7a0cb9d88a870a86ca207a6edab57ac6fa66ca436abe3ab97a89ca2a6a8f3a9a6a838a394a945aab7a4a7994da5eba7519ee79c5ba470a64e9db9a1c9a496a6f99d65a0a2a4f4a5059e53a073a4bfa5b59d84a061a4d2a58d9db9a05aa4cfa53b9d48a037a48ba5f39c61a029a460a5a19c1fa016a432a57e9ce69f04a419a52d9c3d9fbaa3e7a4f29bc19e60a3aea4959b6c9ee2a27aa4c39a1b9e7ca22ea44e9ad39d17a2d9a3a599b19dbca176a39399909d72a112a34b99559d29a1b5a2c898ec9cf6a07aa29998829cc7a04ba236982d9c8aa017a2ae97fe9b55a0dea1ee96c29b23a095a1b3967b9bea9f2ba1ee96719afc9eeba00096419b129f9ba0af940080a98cc6886695fe201e283b291ea83f2189287629caa97f203927a82885aaaa1e5f25f626e3aaa91c2a236f2451ab5218311ea51f46abe38d529b8d9cf7aa7699f2a164a330aadf9ce0a412a6d5a89c9d51a566a6aaa78c9c64a44ca5c5a5789a22a266a307a41c9a9ea1dea234a38f9cd5a3b6a406a5019ee7a4a1a594a5639e5da54aa63fa5c29e64a59ba67ca4ec9e6fa5aca634a4bc9fa2a5d6a62fa426a09aa5d6a6baa344a093a5f3a6fba255a0aba5cca685a256a096a5c0a604a2a1a088a5eba6aca1d1a08fa5eea655a11ea193a516a701a1daa06ea5efa6b9a025a011a546a628a0aa9ddca3dfa42e9e7c98349fa8a0a8992d95d99a129d34967e97339db89ede98419b90a017a2a49b859dcda1aaa33a9c709ea3a25aa48e9c119f78a3c3a4939c939fa8a3cea4b49c5e9f69a3baa44e9c1d9f2ca38aa41d9cbb9e25a381a4fc9b8f9e0aa36ea4c69b859e0fa371a49c9b709ef6a262a46a9b679ee5a25ba4da9a419eb9a250a44d9a149e6fa232a4079ab99d30a221a4bc99649deda102a47d99259d9da1aea3f2980f9d67a150a30299d69c33a1f7a2d198ae9ce5a09fa25d98619cb0a052a22e98f49b6fa0f2a1e897589b27a082a11b97679bd59f18a1c796bb9a849f03a12796609b839f98a0cc950000481801190694961f6226f327c7a6a01fcb26202877a8da1ed0252a27faa8f71c0c24032529a9721ad420f82149a938158d18491b14a9f98f099b639cd6a83e98c6a09ba15aa86f9a59a379a4b5a7079c16a4e4a49aa6e39b4ca355a466a5689b71a2c0a3c3a4a49b9ba2d3a3b6a43b9c2da35ea4cda40d9d32a41ea506a5969d93a48ba5caa4e39dc2a4d0a539a4719ee1a410a605a4e79ef6a426a65ca39e9f21a55ca615a3f79f36a578a6b5a228a03ea56ca64ba222a035a570a604a221a048a581a69ba137a05aa5a1a665a143a06ea5a7a637a135a05ea5b0a6eda054a043a595a6b0a001a0e1a41ea639a0be9e08a465a5fa9e9a9c08a2a0a3b49c95993ea057a13a9a6a9913a009a1409aa89beca02fa2419b249dafa198a3ea9b829e61a23ea4619c209f99a27aa4459c859faea277a4649caa9fbda252a4409c159fa1a22da4129c999e6aa21aa45b9b6c9e48a20fa41d9b479e33a2e3a38a9a0e9e15a2dba3579aa29dd3a196a3b899689d9da181a373993a9d65a14da3fb98089d33a126a3cd98da9c13a1f6a26498bc9ce4a0c7a23b98a39ca6a05ca29d97809c7ba011a25797369c4ea0caa19296f79b22a085a1b096929b09a05fa188967d9b01a017a1c596b09a919f03a10e96729a159f91a0bc95e31ed92681270ea67d26502b502c3aac6027092cb12cd7ad9b26db2a262ca6ae21258229822a4caf5f230f28d02809b04f2022251426a8b0918f3a1a502007b193a0bda296a14fb00ba4f2a6bba787ae0ba648aa7cab6eaf5fa6dbac1dae5db189a214ab9aacdbafdc1deba5b4a8fcac6426899c4ba5efac942864204b9f2fada029bd24151a0dadba2918268a2273ac7d2b342aac285bad1f2af61f00a777af3928e59d74a50dacd7285b20b09ea9accb282622769343ada6282c234213aead3e2816221e13adad41273a204e99cfadfa25aa19f89fd7adf9245d938fa1b2ad531ec1a1e3a4a7ac00a1b8a593a6b1a8bda152a5aaa610a330a1b7a5cfa685a0d9a071a59da6d69f49a04ba58ea62b9f929fb3a59aa6fe9f75a0eba649a805a16fa10aa734a840a031a0cea413a6ec9d7e9f25a413a5529dbe9ebea3c8a4199d8e9e54a390a4d39c229ef5a262a4c19ccc9daaa235a4809c6d9d4da204a4419c0a9df6a1cda3069cc09ca0a178a3f49a829c5fa134a34d9a489c20a1e6a2c599289cf8a0a2a28799299cd5a07aa22699199cc1a027a201994b9b76a0dfa17d98b19a40a096a113987f9a05a05ba15697349ae29f06a131972e9abf9fdba01197419acc9fb4a07b97d399969f9ea0fc974e9c2da068a19b96e8145623b62301a44b27e02bf82c1aad8828fb2cc72da1af9828a92c872d6fb06a27d32b852cccb08d25eb29502b40b1e4213727962891b11b90801d8e20beb15aa151a35da31ab14aa472a662a64fb0d0a5a9a83fa94bafdca64bab43ac37afaca660ac73adf6ae6ea452abd9ac64aedb19baa8a2aae1ad8c26b0a007a7ccad50293c24d91424aef52a9129f92718aed52b702bb82914aec429e21c0ba4cdad8e286ea442a933ad1e29e49d87a786ad08297b1a90a4dfadcb280e1f5da1fcad6328061f60a055ae6c27101a64a2a1ae8526fc132ca3ccaeb824859c19a462aeec10cba4a8a603addca2f0a64ca8faa8f8a379a767a86aa442a3b2a779a87aa254a29fa6d4a787a12ca161a5b0a621a17da01ea422a5c8a048a172a5caa641a0b3a125a796a820a043a0eda596a7ac9ec59feba44aa6ef9d499f60a480a5479de99e1ca412a5e79c619edaa3f6a4af9c389ea2a3c3a4809cee9d55a3a3a4539cc99d06a378a4f59bc19dcaa25ca49b9b829d7ba232a4429b479d3ea206a4ea9ae89ceaa19ca3489a9d9c92a13fa3ea99389c5aa1d9a261991b9cffa074a24f997e9bb0a00ca2d298b59a6da0bca159985e9a18a056a1db970d9ae69fe7a04a97f6997d9f84a015976799089f56a0ba96959b1d9f9ea0db97c614e7231c24ada41f287a2ca02dcdad1a296b2d452e2cb05a297d2d5b2e1fb18728aa2c8a2db1b16226da2a412c37b2e8222a28482992b271101f20522283b2cda16aa4aca312b217a53aa860a85bb16da751aa43abbdb024a828acafac1fb054a897ac50ad40af05a8a3aca6ad7eaea2a465ab77ace1adfe1b34a720a9a7ad38278f1a2fa015ae022a61269e2074aead2a4426511fd8ae492a0d2218a1cfae082a9c1bc1a56baeb129b714b5a543ae6d299014dca4a2ae1e2964149da4cbaeb3286f1ae3a3e7ae3d282d1495a31caf0427099426a41faf7323c7a1daa547ae9e9cf5a502a878ac79a426a8fea826a810a4fea7bca878a433a334a74ca828a4eda2e6a624a811a333a259a689a7dea199a105a660a729a198a1b1a61fa8a7a077a1b1a62fa820a013a182a605a8759fbea019a6a0a7e89e56a054a5a7a6489ed29f91a4b7a5889d289f2da44ea53f9db09e0ca41da5089d5d9ecda30ba5ac9cf79d79a3c9a47a9cbc9d29a39ca4209c9c9df2a27fa4ea9b369d8da240a42c9be89c24a2eda3b99a7e9cb2a16ca3fb99559c6ba103a3b199439c2da1a2a27099369cf2a05ca20899379ccda02aa2aa981d9ca5a0f3a14e98f59b87a0d1a109987e9b58a076a1d6974c9a23a03da12897e59bef9f17a1de960000a414e215bf9c4928fb2c432e84aed429322e4b2fa2b0b929e12def2e7cb19628e52cd32d23b2cc26532b562ca4b2a4226528362902b3c5105e20a9220fb387a108a49ea2a1b2e5a5eda885a9dbb175a7caaacdab2ab14da843acebac94b0d1a8d4ac9aaddeafcfa816add2adcdae47a891ac74adebadfaa4d7aa44ac44ad2110b2a7b3a96cad2e26499adea416ae8c292320a0a1deae312a482009a31caf222a0c1e1ba42faf3c2aec1d8ea454af292ac51d58a449af7529c81a3da48faf0329a51a12a4d2af83284c947ca4dcafa126f49e9ba544af582094a4a8a7d3adeaa161a89ea96fabafa497a871a931a75fa475a82ba9a0a41ba437a8e7a81ea4eba324a8e0a87ba341a309a8d3a8b7a2dfa2f1a7cda83ea202a223a767a840a1cba1a9a621a8a9a0bba174a60aa882a080a113a682a700a0c0a08aa5cea6389f3ca0fba441a67d9ee09faea4d3a5079e529f71a48da5769dbe9e39a451a5319d4c9ee4a3fca4ac9cda9d7ca3b3a4629ca49d10a38da4239c769db1a267a4ed9b499d60a234a4449b179d01a200a4eb9ac79c88a15ea3209a589c15a1c9a27599079ccda035a2f098c79bada0d9a19898969ba5a0c9a19198359b94a0cca15798de9a71a07ea17898a89a30a03ca1a9989a9b13a0fba185970000351b001cee9d01296f2db92edeaed4293f2e4e2fd6b0b529022e182fcab17a28e32ca92d4cb29026242b3d2cbdb22e2365283a2902b3fd1690219c22feb2e9a1e9a3f9a394b2c2a522a9cca9e8b1a5a704ab08ac43b13ea83aace2ac9bb0c5a8e7acb4adc7aff1a81badfead07afa0a8d8acddadd8ad35a8acacafad6cad61a5e6aa34acd9accd9c40a8a6a9ecaca0236ca4eba7a5ad3628219447a563ae3d29601a2da4f9aeb129641d4aa336affe29a91f47a374af71296e1d20a389af4329571ddfa2acaf1f280a14b4a362afdb24c79f76a56eaee9952da6a5a8ccacb3a38da878a997a96da47fa866a905a685a483a86ca9d1a44ea48da868a952a424a45ea839a98ea372a313a8dda8b9a21aa3dda7bea83aa279a296a7a1a85fa10ea219a762a8d8a08aa17da6f5a753a018a1fba54da7e29fb7a0a0a5e2a6559f4fa03ba580a6d19ef19fe3a417a64b9e649f79a4d4a57f9df49e35a492a52b9d6c9ef6a345a5b79c049e9fa3fba4779cb69d4ca3c1a4119c8b9d1ba3a0a4ec9b789df7a26ba4ae9b139da7a249a40c9bcb9c48a20aa4a79a769cdea198a3499a509c8da119a3c499089c4aa1b3a24399dc9bfaa069a28f987c9bc7a032a23698949ba5a0cca12498b09a5da099a1c897c39c85a0dfa184950000a51b0a1c329eb4286d2db12eccaed0298f2eb72fefb0ad29302e4d2fb6b17a280c2d052e42b2b8267e2b742cb9b2022364289b29eeb2cc164b209922f0b2cfa18ca4bda48eb27aa528a9dba9eeb1e3a799ab65ac33b1bba8c4ac87ad62b01da94ead36aeddafcfa80aadf3ade4ae90a8deaca8ad0bae40a8a8ac8ead5cadf0a75dac2ead09adc0a6baabafac97acd6a353aa1eac89ac2a8f6fa80faaabac3e232aa562a852add525c1a1d3a607aefd2623a00ea67eae3c275d9ed4a5a5ae932600a0a6a59daeab242da208a73aae061074a68ea8d7acb2a2eba819aa0aaa80a40da915aaf4a696a4cca8a7a948a5a7a473a850a9c0a48ea476a868a97ea46fa45ba854a925a42aa43aa835a9d5a3a0a329a814a931a3a6a2fea7dca874a2efa138a787a883a178a184a618a8b4a04aa138a6b1a73ea0e6a002a690a701a093a0b0a556a77f9f48a04ea5fda6eb9e02a0fca475a6359e839fa3a4cfa5b79def9e39a452a5059d499ee7a308a5b39c009e98a3c9a45a9cb79d52a39ea4329c6f9d04a371a4059c1f9d9aa22da4a59bd79c47a2e4a3469b5c9ccea160a3cc9a109c6fa1eda2319acf9b25a194a2b299599bdda04ba20099239ba8a000a2a198289b7aa095a18198359a29a04fa19897079c00a04da102971301721a7e1b959e7e28622db52edaaeb329c32ed12f07b173295e2e562fcfb15f28fd2cf12d4ab24026882b4c2cafb2452298278628dfb269905f1b661cdfb224a2b4a525a67eb242a561a926aaecb146a72dab54ac1ab13da881ac45ad45b0bea812ad1faed3afe0a842ad59ae1caf9ea81cadf7adf4ad2ba8a7ac86ad3badf3a753ac30ad98ac8aa726acefac3cac86a70eacd4acc8abb5a53dab74ac65ab5ca33daad5aba9abf29e40a9e1aa14acc114bda73ea953ac6d1b58a69ea85aac431bc7a6c5a823ac999a0ea848a92fab92a36ba9b3aaa9a9b0a47ca9b7aabaa7c5a463a980aa18a6d1a41ca941aa74a5c8a4f0a806aa0ba5a6a4c2a8c9a976a43fa479a86ea932a4eca339a810a95fa33aa30aa8dda8c6a288a2a2a7a2a829a216a24ca775a882a10da219a755a83ba1b9a1a1a61ea8d4a060a118a67ea740a0e8a0b3a517a7dc9f77a079a5dba6769f4aa029a597a6bb9e03a0c8a42ea61a9eac9f79a4b5a5a59d429f46a466a5f99c9c9e08a41fa5869c259ea3a3eba4149cb89d36a3aba4b39b969df2a279a4219b629da1a24ca4e09a0c9d4ea220a49c9aeb9c08a2d6a3219a9a9cb6a162a39e99559c31a196a2ef98379cfba02da29098399ce0a0d7a18498ff9a64a08da16a98959c6fa08ea1aa98b12169262f2750a83c29eb2d1f2fb6af80296a2eb32fc5b021292f2e2f2fc2b12528132de02d38b2ee25222b422c96b2f6217227db28bdb24b160b1e4d1fc3b2efa016a52ba678b2f2a420a93aaae5b1e1a678ab58ac0ab124a896ac5ead27b0cda83aad0eaebfafeca869ad5eaeecae88a800adedadcfad20a89eac71adfcacb9a770ac24ad86ac61a74fac25ad24ac03a726acdfac82ab94a6b8ab99acb1aaf4a507ab75ac32aa2aa59baa35accea9b3a410aa78ab8da926a4faa971ab3ca91fa4a7a902abbda8b8a427aa8fab44a863a53daa80ab9ba764a6eea91aabb0a631a586a98caacfa5a0a41ca917aa38a5d0a406a91eaad9a4dca4dea8e5a9b4a4a0a480a88aa94aa406a447a82ba905a400a307a8e1a861a387a2b2a7c4a898a271a270a7c8a839a20ca205a78aa890a18ba187a61aa8e7a038a130a696a798a0eea0f3a54ea752a0bea0a9a5fea6f89f5ea04aa5a1a65e9f38a0f9a44ba6a19e13a0bba4fca5089ec59f8ca4cda5bd9d3f9f50a472a5639d909e05a412a5da9c2c9e92a3c5a4919ced9d31a384a4309cdf9dc5a23ea4f79b869d35a2d7a31d9b1e9da4a13ba34a9a939c35a1a3a2a399029cd8a02ba21699519b9ea0d5a17d98509b81a08ea16d981a9b7ba07ba16798559c58a089a14598000082038a0a94929828902dca2efdae2029562e7b2fafb0d328dd2dfe2e56b1dd27ea2cec2df6b1d325382b532c55b28c21302756286eb2bd0ff11a301c66b28ca0daa4e5a51ab298a435a951aaaab183a691ab97acd9b0e3a7aaac77ad2cb073a823ad3bae6faf92a860ad70ae98ae85a81fad16aebbad0ba8b5acb1ad13ad56a75dac22ad72acc8a62bace7ac03ac67a6d0abafac15ab0ca648ab67ac54aab0a5e1aa2aacb9a97fa5a0aa11ac4aa971a5a8aa14ace3a821a55aaae9ab54a83fa58eaafeab34a818a57caa00ac05a864a519aa34ab33a704a59fa9beaa70a68ea42da93daad6a562a4e8a8f9a9aea54da4bfa8bfa979a530a4b0a8bda92ea504a484a888a99ca473a33ca83ea918a4e2a213a8f8a894a37aa2cda7c0a8f7a241a27ca78ca885a2e9a10ea753a8d4a186a1a6a622a85ea161a15fa6f4a7e1a039a111a696a798a00ba1eda56ba741a0d7a0a6a533a70fa09da07ba5e7a6769f30a013a570a6ea9ea09fc3a420a6379e1d9f87a4daa5a89dd49e3fa48ba5209d849ed5a325a58f9cd69d30a3a7a4089c739d79a21fa4569bfd9ceba18ea3c89a769c84a111a3649a3b9c21a1b8a28e99f69bd7a070a20799019cdea09da2e598049ce4a085a2eb98b19a78a0fea1e097819ca9a00aa2cc9600004089658ab0913b285e2dab2e73aebe28232e552f89b069289b2dbc2e46b11a279f2c952dc2b12a25a42a032c11b29f217e278f2847b28215ab1de61e58b25fa0d2a432a50fb23ea436a907aaabb127a649ab71aceab094a7a8ac83ad2ab05fa84ead4fae42af6ba834ad31ae84ae3aa8f9acf1ada9add4a7bdacacad03ad6ba77fac6bad95ac12a737ac11adf3ab35a691ab8bacb7aaa5a5f5aa2cacc9a95ba5b2aaedab78a933a562aab6abfaa809a542aa6eab74a8f6a408aa51ab13a8f8a4e2a936ab9aa7f2a4d4a919ab45a7d3a49da9daaac6a6d7a490a9a2aa39a6cca46ba994aae0a5b6a452a980aa98a59fa41ea94baa60a550a4cca8e2a9e6a4eaa389a88fa991a481a35aa85ba961a439a339a83ea923a4f6a236a83ea9d4a390a20ca8f9a80da333a24aa77ba806a2a4a1b8a618a844a169a18aa600a802a141a150a6c9a796a0ffa0f4a56aa725a0daa099a5eca69f9f6ca028a570a6cd9e1da0bda4e1a52f9e559f66a491a5bd9dbc9e3da45da54b9d699e11a427a5149d249ee5a3f7a4e19ce29d78a3c8a4759cbe9d1ca3a4a44a9c559daea27aa4089cf19c2da24ea4449b769cd1a1fda3989a539c7da15ba3d199299c54a10da37999299c38a1c3a25c99519b16a1b6a282988d9ce4a081a27b970000a903b00add92cd27142d4f2e7eae8e280e2e162f79b016286c2d882effb0c1268f2c8d2d96b10f25702ad62bf2b1f620db26322834b22e0f8614261c54b2ada056a589a601b201a40ca932aa8fb191a546ab4dacedb0d6a676ac57ad1db00ba808ad18ae1eaf09a808ad0cae4daecaa7c3acb1ad6fad4aa79bac64adc9ac04a772ac3fad5caca6a645ac25adbeab55a6e4abb1ace1aaeba526ab54acf8a9bfa5d0aa18ac57a992a59caa15acf2a87ca57daa00ac6ca84aa52daa89ab19a805a5fea965ab7ba7eba4c4a90eabc4a6cfa490a9c0aa7fa6a1a46ba98caa22a67ca433a956aacba561a412a928aa91a562a4dfa8f3a945a532a477a87da9a1a4d2a339a831a95fa45fa32ca825a907a40fa31ea816a9a5a3aaa2e2a7cca8eea274a28da795a865a259a233a76da8c6a120a2cba644a863a1b1a17fa627a8e2a06ba129a6eea794a00aa1c6a56da73ea0c7a072a5e2a613a092a029a58fa6a49f71a0e9a437a6fa9e02a059a49ba5fc9df49edea32ea55b9d9a9e6fa3e0a4e79c449e11a3b7a4a99c009eeca289a4919cb89dc8a250a4479c469d69a215a4d09b1d9d07a2b5a3d59abc9ca3a139a3269a829c7ca1e9a2c0995e9c3fa1aea22999109c2fa18aa21999309bf5a05da22699ce9b14a01ea127960000068a328b86917c27f42c222e29ae3728c62de22e65b07d27222d352ee3b05326662c442d65b1bd24842aad2bc8b17821382775280db20d159e1ac91e1ab2e59fc0a56fa6ebb16ea32da914aa68b117a5fdaa24acabb051a645ac19ade0af5da7ddacdcade0ae7da7ddace1adfeadffa690ac6bad06ad89a649ac1bad5fac58a634acf1acedab22a6ecabbeac04abd8a566ab6bac6aaaaba50fab28ac9ba97ba5a3aae2ab06a92ea551aa87ab94a8dea4f0a93babf4a791a4c8a904ab79a799a4a2a9ecaa26a78ca47ca9bcaabba69fa473a99aaaa6a6bba461a9a8aa75a6e2a463a99caa6ea6b1a435a95aaacda554a4cea8eda946a5b5a37aa890a9c5a455a35da84ca965a4fba246a845a930a4a1a2f4a7e3a8cba334a26ba79da814a312a257a78ba8eca2efa134a789a874a2cba10aa769a828a292a1d5a640a883a16ba184a606a8fda04aa11aa693a791a004a1b2a539a7d89f8fa066a5c4a60b9f2ea010a56fa6529eb49fc3a401a6e39d329f76a492a5459df09e36a45aa5cd9c9b9e08a423a5989c679ebaa3f7a43e9c469e54a3d0a4069c0f9ed6a277a4969b919d08a2c9a3829a139d8da11ba3c199ac9c4da1f8a21a998a9c09a10fa38398ce9cfca0c6a24c98989d8da085a13898939c3da0cca18d98008000982297f8966f26962cb52dafad0628b02dd12e2eb05a273a2d502eb7b0d5253c2c392d22b16724442ab22b80b1b820f0264e28d0b1b0145a1adb1becb16d9f93a540a6bdb12fa318a959aa52b1f9a4ecaa25acb0b0bda512ac0cad0bb0c0a696ac85ade8ae9ba686ac72add8ad63a647ac2fadd4acf4a517acddac2dacd9a5bcaba2ac44abaea56aab87ac84aa86a520ab60acb7a961a5deaa39ac00a93ba58eaae9ab8fa8fca423aa8aab44a8caa4d4a92eabbca78aa47da9cbaa26a79ca465a9a9aac7a69fa453a985aaa4a6caa447a976aa5ea6aba426a95eaa2ea675a4f7a80faa77a506a4a9a8c1a931a5cda36fa87ca9bca4b1a34ea854a987a48ca33ca82ba954a456a331a81fa90ba4ffa211a802a9a2a3b0a2e7a7e1a8b7a284a2b4a7c5a84ca256a27ea7aea8e7a111a22ba788a858a1e4a1d5a641a8faa085a17fa60da8a0a05fa10da68ba742a012a1a0a514a7d59f70a046a5b6a6439fec9fdba454a6689e469f85a4fba5e69dfe9e4ba4b3a55d9d8f9e16a457a5e09c4a9eb2a324a5c19c1e9e74a3f3a4739cc49dfca2a6a42b9c6b9d9ca263a49d9b2f9d4fa22da4019bdf9c1ca2d2a3559ad29ce0a158a3d899c99c80a1f8a25a994a9c24a18aa20f99059cc1a020a292985f9cd3a067a24d970000c591968bfc9458267f2c8d2d15ad18274c2d5a2eb1af4626a32caa2d45b03b25c72bd42cc5b02c24e929432b3fb1c3203626ac279fb17714301aa21bb5b1f59e62a509a68bb13aa29da8bba914b130a44daa92ab7db017a5b8abafacc6aff4a555ac3dada1ae1da661ac47ad77ad12a64cac4ead93acdca511ac06adcbabe1a5feabe5acbaaa6da57cab95acdba943a51aab5aac08a900a5c0aa17ac91a8e8a45caad5ab2ea8c3a426aa89abeea7afa4ffa92bab5fa77ba4baa9ffaa1fa755a48aa9c5aaf6a641a44fa985aa5fa64ca43aa958aa3da63ba4ffa83daadea527a4d3a8e7a969a50aa4a3a8b3a91ea5bea379a87fa900a5bda342a84ba9b0a494a31aa80fa961a45da3fba7f9a813a402a3c7a7d1a8b9a360a299a7bca83da306a26ea79ea8cea2bda10aa77da81ca27ca1b5a645a89ca186a188a61aa845a153a152a602a8d7a008a12ea6ada7a0a0eaa0f4a561a75ca07ca0aca50ea7e39f2ba055a5ada61c9f959fd8a417a6fc9dc69e4ba48da54e9d469eeda32fa5ae9c349e86a3ffa44a9c299e4ca3cba4029c189eeaa297a4ad9b9f9d7ea242a4359b489d02a2eda33b9a0c9dd2a198a3099ac39c8ba149a39399899c4fa1f7a2f0983a9c18a172a2ca98369b5aa063a11498179c919fb4a08d952a226a27a5282da806267e2ca32d8dadfe257f2c682da4ae9825202c152d9aaf7324ac2a0f2c17b0a3221229412a80b0092070254a27ecb08b16a41cc01d31b1a19d07a405a52fb164a2d8a8c1a9dfb036a482aa13ac5eb0d0a486ab93acb0af2aa5ecabd4ac89ae3ea5e9abc9ac7bad61a5f1ababac82ac51a58aab92ac5fab2ea552ab69ac16aaffa4eaaa4cac2ba9c8a4a9aa0bac60a8a4a43caa85abafa762a4e3a918ab1da74ca49aa9e2aaa3a628a466a976aa45a615a437a93eaa24a619a410a91daa09a603a4fda81aaa90a511a4e1a800aa59a50ca4c1a8d8a948a5e1a3a6a8bfa93ca5afa38fa8a0a90ca568a379a882a92aa512a35ea857a91aa5f2a243a842a916a5cea20ea817a9b2a4aba2baa7e2a82ba48ba257a7b1a87ea335a21fa799a8cea2b9a1dda665a826a287a182a62ba8b0a140a155a604a868a102a13aa6cfa70da1d9a015a690a7d3a0b1a0dca548a76ba050a06ba5bea6d99f20a0e4a431a6e09ea99f79a4b1a5d69d979f36a466a5709d2c9fd5a325a58f9ca09e6aa3e9a4ec9b169e03a3b8a4319ba69daea285a4939a369d48a248a42f9a129df8a1eda3af990c9dcda179a38699d19c79a1eca24499c59c34a18ba2e498a49c17a13ea2d698479cd9a017a26498899cd1a05aa227981d0b88168418cea21f24af2ac82b9dac7e25452c1e2d81aec124012b4e2ce2ae0f234629982a04afb420fc2652281caf931d7c24972544af1d181f1d5d1ee9afef9a13a29ba23ab049a0e7a620a828b026a241a937aaadaffaa386aac7abfaae83a4d3aa2aacf0ad7ea4d6aa22acfaacb1a4d7aa43ac29ac7ba4b9aa0eacb9aa6ca46baaceab44a96fa434aa9cab6ea886a415aa89abd0a783a4e9a92eab31a787a4bea918ab62a664a4a5a9d7aa08a643a45ba99eaaeea512a433a947aaa5a5d8a3efa80aaa8ba5bea3c2a8daa940a58aa39da89ca9ffa453a376a873a9e8a41aa356a853a9d5a4dca247a832a9d6a4a5a23ba82aa9c3a4a8a228a813a9aaa4a0a20fa8f2a878a49ba2d3a7c9a859a451a284a7a4a81ba405a248a78ea86ea3dda11ba77ba8f7a2b6a1eca65aa888a277a1aba644a8e7a109a15ba606a87ea1dca012a6a7a7eda0c9a0e4a566a77da0b5a097a504a70da08ea048a5a8a6579f49a0e1a43fa6c89eab9f8fa4e8a5149e339f37a486a59e9dfb9efca356a51a9dbb9e9ea308a5dd9c739e4aa3bba4819c4d9efda289a42c9c019e92a263a4ed9b8a9d23a23fa4f59ac99cd5a107a45d9a939c5ba167a3e8997d9c5ca10da3bd99689c43a1e7a2ee99149c3fa1faa273999c9ce0a058a28b9700007c1513169c9df323b72a2b2c25acc224c72bac2cdaad6224d52a332c7dae59237229b52abfae4d21d327e3288fae931d3c244e253eae5e16f01b5b1ed9adc394089df39a23ad7d9913a155a14facdc9cf2a3dda413ac39a0a1a601a85bac3ea106a8cea810acd8a16da859a9e1aa25a329a930aa6faab0a375a988aa99a9b7a389a9aaaac1a8d6a38ea9b2aa2fa803a480a99faa22a7e7a356a992aaafa6cfa33da94faaf8a5b2a3fba824aaada579a3d4a8d9a92fa53ca3b4a8b7a9f2a42ba384a8a0a9c0a404a370a86ca993a4e8a246a83fa9bfa4bfa210a81aa983a473a2c8a7c3a864a425a28ea7baa879a434a2a8a7cea891a46fa2e1a7d7a8a5a474a2fca7e2a8caa470a2e2a7eaa8c1a496a2d9a7d0a876a49ba2b5a7c6a824a450a23ea78ca87ba3e1a1c4a637a88da249a14da6e5a7baa186a0eda55fa70fa152a07da5e4a674a050a058a5aba600a05ba030a57fa65f9f48a000a53ba6cf9e33a0b5a4efa5369ef89f71a48ca59a9d629f15a432a5fa9ce79ee1a3f3a4969cad9e90a3d0a4679c459e4da39da40d9c0b9ef2a266a46b9bc69d7aa22da4eb9a669d19a2e1a3539a239dada168a3b599ce9c4da1eba2bd99729cfca07fa23c99429cbca0e0a14e992d9b28a061a1ae98049c06a065a185950080ae984b99e1996e22b429e12a0aac6024432b712c6eade223952a022c31aedc229829fc2abfae2e2110280a2904af211e9624b62551af4c17771aa11d79af2f9728a066a03bafb89c72a43ea5a1ae359ee0a529a7c4ad079f4fa6b4a7efac2ea0a9a601a804aceea093a791a8b6aa76a11da8fba899a9eea171a872a993a83fa290a88fa995a752a299a8a4a941a67aa2aca89ba98fa598a29ba88ea9e4a4a3a28da883a97fa4b4a27ba875a91ca4b8a253a84ba987a3b3a246a848a945a3cca229a824a977a3d5a20ea822a9a6a3c0a204a8fca8c4a39da2d0a7e8a820a479a2bea7d1a883a459a2cea7d0a8afa47aa2eca7e6a819a569a200a8dca836a580a2f8a7f9a828a55ca2e2a7eca8fea4eca163a78ca8b1a4bca1dfa648a856a4c9a18ba624a8eca3c0a179a618a82ca37fa11fa6eaa715a2c5a0b9a53ca747a16ea06ea5dca6b5a055a04fa5b8a6dd9f36a020a577a6fb9ef89fe6a431a6759e8e9fa8a4d9a5ad9d399f53a48aa5169dd19ef7a31aa5b09c2c9e56a3afa4299cdc9dcda256a4b69b959d4fa216a43b9b4e9df8a1aca3ea9a089d7ca149a36d9a9f9c1ea1bea2c499629cf0a083a26899319cdca06ca25299099ccaa061a217992d9cbea016a2e098659ba2a00ea2b6981f9c52a094a1b298008036952f95e09457224829982adcaad223752ace2bfaacd322bc29222ba3ad8821a928d1290cae5620e7264a2872ae021df523fc24d1ae7b151e1aac1b13af6098a3a011a112afaa9c83a44ea5cfae8e9e4fa6a6a745ae03a02ea79ea8b1ad5ca062a7b7a802ad8ba092a796a832ac2ea117a8fca89eaab4a14da842a9e2a8f2a16ea873a92ca716a269a839a905a548a24fa84aa975a353a24fa839a995a1bfa21aa81ca9dba0bba20ea808a938a08ca20ca8e3a81aa058a2efa7eba805a022a2c0a7cca857a003a298a7b1a810a104a274a79aa85ea1efa179a79ea8cba23aa2aaa7b9a812a463a20da8ffa831a5cfa248a853a9f8a5a7a271a874a97ba667a252a873a937a6e7a120a837a9d2a5c7a1dfa70fa93ba5dba169a7b2a88ca4b2a1e7a643a864a3f2a087a6f1a767a2d3a03aa6b6a798a1c3a00da691a7e9a086a098a509a73ca02ba02ca582a6489fcf9fdca429a68d9e5f9f8ea4dca5df9de59e3da468a5489d8d9edea302a5ad9c439e5ea3bfa4389c509e1ca3a2a4d79b939edaa291a42f9ba29e97a270a4e89a5b9e46a258a44f9a8d9da4a1bba3fa99cd9c43a11da36899a09c24a1dca25799519c0aa1a6a24b99059cbea032a29c985b9b68a08fa19698009abc9fe5a0b097be9ad19e46a0bc9500803590ec8fc29449217228ad29bda994227029892a25acea21ec28042ab9accf200628052932adb11fd12546276aad071ce7216723adad70122010d417c5ad0c9768a0eda0abad049c79a380a471ad4f9d0fa515a638adb09d69a5c3a6fbac049e78a57da6f1ac099f08a630a7eeac37a004a77aa801ac0da1eea713a9b4a8ada174a860a9e8a497a18ca88ba976a02ca237a821a9e89060a23ba81ea9041c3fa238a827a9fb1c3fa2caa7d2a8c11cbfa243a76da89b1d0fa2f2a632a88c1cafa19aa602a87c1ce5a1aba6f7a70a169fa1b6a613a81199d6a1cea62ca8b4a007a281a7b2a8e2a4c5a28ca8bca912a7eba2c6a803aa16a898a2a7a805aaa8a72ba237a84ea993a692a158a794a870a5faa0c7a631a8cca448a1f8a655a81ca4f2a061a6e4a72ea274a0cca53ca70da140a077a5dda684a0d89f24a57da613a01ca0eba428a6649f9d9f97a4daa5d19efc9e49a481a51a9e809ed9a31ca5599df49d3ba3bfa4c49caa9dcda277a4229c8a9d8ea268a4639b6a9d79a24fa44c9b539d32a224a4b59a429de4a1e2a3619a2b9d71a14ba3a699ca9c09a1b5a273996d9cb9a053a2e7983b9cb4a048a2ad980d9cb3a046a27798149caaa02fa246983b9c6fa0f2a12898059c57a090a1d497d99d00a075a091970080e18be68c04944f1de424072693a66d21b528c329e6aa5c2157285b29eeab4d201d275d2861ac381ec7242d26a4ac3c1bdc20fb21e3acdb13540fde16d6ac229742a045a0adac759c4ba4e8a46eac7a9ef4a522a70cac28a0a1a604a828ab499e1ca677a76eaafd9d4da630a799abd9a0d0a899a95eadffa269aadeabb8a9f7a20fab43ac9820d8a35daab2abbc2624a32aa989aa442634a21da82aa96e2434a16aa7a7a83824e5a028a762a83424f8a073a600a8182577a0cea561a70e2680a005a5a1a5bc27d99f3da459a529287aa00ba51ba6ea26baa0fba59ea79a1271a282a87da982a859a421aa96ab15ab43a439aae2ab1baa42a3f9a896aab4a7d9a1aba7f0a851a54ba176a623a81da49fa0c3a53fa756a283a076a5e8a66da1c7a074a5f0a602a134a021a5aca644a005a0dba436a6a69f429f76a4bba5859e0b9f2da46ca5d59dcb9e08a436a5209dac9ec6a30ea5b59c9f9e77a3e1a4869c8f9e48a3b8a45c9c849eeea27da4fd9b6c9ebba25ba4ac9b389e83a241a40e9bcd9d3ba223a4789a8b9df0a104a4e899279daaa1aba3a299009d57a120a350990d9d12a1b8a21999fd9ce1a05da2b098c09ca5a03ca284987a9c85a020a23c98379c75a016a23998ed9a2ea02da2a0977d9b21a0c3a11b980080cd8e7e8d049286206427ac2857a8fa202a282e293aaa72208427b328edaa571fe625b12797abb01d2b2436250aac911a4e20612120ac12117a8e0b9006accd9643a042a1f7ab549c61a440a53fab4a9e0da61da77caa8c9fc9a6faa755a99c9dd8a4d6a5c8a605998ca0a8a1efa23e8fc398379af09c618a1d960198f39a588fb6985099a49cf795b19cc79dc69e1d9c33a14da28ba1759e96a393a493a2949f73a435a599a2229f89a443a515a2b49d24a4d6a440a15f9ca2a3b5a46ba0bc9d6da460a5c1a0329b00a572a6d9a0daa188a879a9d0a433a2c8a89ca986a7eea07ba574a74ea837a181a722a826a5c19beea677a83ea1ae9aa0a42aa6959e14a03fa452a62f9ee9a0f3a475a6939f17a075a4b9a58f9e48a078a4b6a5cf9e67a07aa4b9a5bb9e5fa064a4a3a54c9e98a04da492a5e19d42a01ba455a57a9d38a0fda32ca5129dd29ff6a304a5ef9c649fc0a3eaa4929cd99e67a3b5a45d9c7f9e27a389a4019c279eb3a246a4809bd79d33a202a4f29a899dcfa17ea33e9a6a9d97a115a3ef99499d4fa1c1a2a4991e9d11a171a26199b79cbea031a218995e9c91a003a2b398089c5ea0f2a11898ec9b34a0cca1f897c89b15a0a1a15d97bf9bf79f53a14497319b219f07a1a996529b229fa1a0ea960080398bc6842f946c203f27a028eca79c20d027b7288da9c41f3f26ef270aaa801d9224f62557aa081c70223e24c3aa04196c1e7b20f0aa870d8694a795d5aabd962aa0bda04aaa149b6da39ca452a90c9dc1a491a57da86a9d10a51fa6a1a7849c51a448a5cfa5ce9ac9a10ca375a35798609f8da0a4a0e3992ba017a171a10e9b68a222a442a46b9d0aa4e1a4c8a4069eafa48aa596a49b9ef3a4e4a557a4759f41a508a66ca4ca9f4aa519a615a4ec9f50a52ea690a3c49f41a553a638a306a031a542a6b8a2939fd0a4eaa52fa24a9e2fa416a5fea0569cc7a1efa2149e8998f79f19a1ae9b1f946c9dfd9e39995496919dd09ecc99ec99f79e6fa0639b8e9c2ba114a3209dab9d39a255a4969de49efba297a4cf9d349f2ba3a0a4989d419f6da3cba45b9d219f78a3d1a43e9ded9e4ba3aca40e9da29e30a389a4ab9c7b9e1da377a4819c589e01a370a4629c3e9ee5a25da4189c2c9ed7a254a4ef9b319eb1a23ea45b9b199e8da22ea41e9bea9d5fa21ea48d9a739d08a200a4ee99149dafa1c4a3d999d79c5fa16ba34799bf9c17a11aa30199c19cf1a0d1a20699879cb8a078a2a398369c9ba02ba28798d79b62a0d5a11c98479b17a06ba1c097609bcb9f0ca11c97bf9a669f02a10f96659b199f5ea0ee9400002718db189e93341fb6251027f7a6371ff12549278ca86f1e3d257d26e8a89e1c4623b42425a92d1a9a201a2247a9cd15df1a141d31a92c063396a49413a90595ba9d249fb5a805990fa13fa215a8d29ae9a23ca41ba76e9b3aa34da4c5a5969a25a26ca3ada4ef9933a151a2b1a3b899efa00ca20aa3a69a87a1bca27da3ec9b5ba2f9a347a4f39c8ea39ea494a4a59d29a424a55aa4359e74a488a529a4139fbca4dba50aa4929fefa4faa5b8a308a0fca411a681a317a0fda40da60da35ba01da529a6e8a2c5a000a53da619a278a002a541a6d3a116a090a405a602a1e39e02a43ba563a0619d0ea27ca31a9e1b9b6da0c7a1229c0699689fbea0729abb9932a028a1289b549c5ca180a2929c699d22a2cea3129d509e60a252a4029dee9eb9a26ba4209d309f9ea283a4c99c049f91a26ba4af9cc99e74a229a47a9c979e7aa206a4519c629e50a2f7a3279c4f9e3ba2e0a3ae9b159e20a2cfa3119bf69dfea1c3a3d49a7f9dbca17ea32e9a2d9d6ea161a3da99129d4aa131a36299e09c1aa1f6a23199e29cfea0e7a2ca98c99cd0a097a29e98c49c96a04ea26698949c79a002a23e98369c42a0d0a10998019c1da08ea1cc97b59b17a071a1aa97849bee9f23a1cb97c49a969ffda0af96799adb9e64a0ea9457245b2833290da8b5254e2a4b2b05ac1a26a22ad92b4dad39259d29a42a29aeda233e2803296fae6a219525a726adae121d0e2202240daf328d601b1d1efaaf509de29de79c05b040a341a6f9a55bb0f2a501ab45acf4b0e9a489aabcabadaff1a0a0a81aaa31aded1dada477a7b9ac2e26b09266a412add3283620f19e53adf4293125211f41ad082aaf26d021c4ac672bad29252887acc12a2c2a3f25a3afe026b3a452a96eac5a28d4191da28eac142901225a997cad5328fb210f93cfadcf27e221d392b7adfa265b1e4a9cd8ad34253e138aa1d4ad1d22139f45a410adb09dd5a451a655aac5a194a58fa694a523a13da561a6d7a1fda068a564a696a0d39fb7a4a2a517a0569f0aa55ca6c19f13a177a688a70fa1b4a099a6ffa7b9a107a0b6a50da755a0169f8ca49ca5c09ee69e09a4eea4319e8a9e9aa3bda4c29d6d9e39a383a4799d289e03a363a43f9df19db1a237a4029da89d6aa219a4be9c4c9d08a2d0a3769ced9c9ba176a3bf9b959c56a11fa3089b419c12a1d1a25c9a309cd6a079a2d7990b9caba047a26a99ba9b98a0f8a14499169b6ba0dda1db98999a44a0aea17e986f9a0aa06da110983a9acb9ffda0d7971f9aad9fd2a05d97199aa99f9fa0b597d499869f8fa0d497529c19a036a12f96642698292c2adda87527b42b722c37ad2a27a12b7a2c62aed026462b4c2c91af9625ff29292b18b01d24a728802958b0bd20e8258227b5b0cd14db20db22e2b0b89ca313d41a91b070a1c7a07ba036b0d8a45ca850a9ceafb5a5aaaa0eacc7af99a549ab59acc8aee5a202aa8aabdbad151608a8c5a965adbe25709e38a53badb4289d225614a9ad702ab328612656ae972b8a2baf2ac9aeb6293d25551d8cae7228f7a6efaac6ad322872a452a9b4ad6f283f9af1a5ecad9628e71948a236aed627b41316a270ae81268613c2a286ae50251799cda2feadfc1f8ca2d7a4f4acd9a0daa62ba86faacea31ca743a8c8a54aa33ba73da862a3a0a218a723a851a27fa1a0a5bfa643a1a3a0a9a496a59ca084a06fa481a5aea02fa1bca554a716a177a1fda66ea8aea14fa09fa5f4a653a0799fa8a4e0a5299f149f54a45da5619ebd9e23a42fa5e79d549eeda301a5a89d2d9e9da3c6a4419dcf9d50a39ea4289da79df8a26ea4c19c679db1a249a45c9c299d4ca217a41a9ced9cf3a1c9a37b9bab9cb6a15ca3d79a6d9c61a1f5a2339a359c29a19ca2f299159ce8a03ea2a7997a9b91a0e8a12c99ce9a5aa094a1ba987f9a18a04da15098019acf9ff8a09497e399859f8da062977a99dd9e46a0e896ae9b839fd4a026988026eb29822a11a945285f2c142dbdad0128552c102d5daffb27382cfc2c62b09926582b452cb4b0c8247229742a0bb16c21aa263c286eb16f184021692376b18e9ecb9ef69a30b1daa23ba515a5d3b079a5f7a8ada96cb088a6b1aabfab13b0dca66aab55ac01af23a687aba6acf2addfa303aabeab26add08f2ea718a90fad3a25a993e3a372ad68281124b4142baea229b1257e1eaaae9a299120e9a019afa8290115f7a4ceae8429869408a66fae22295694b9a5b4aead283114f2a4e1ae36280294b1a4d4ae3d26909954a4aaae822357a1d0a5e8adf60f93a5a4a780acf8a2a5a794a839a922a40ca8c0a80da57aa338a751a829a3eaa2e3a61da866a39da2bea6f6a706a3e5a139a64aa72ca24fa1cca511a746a15aa144a6a8a724a125a152a6e6a713a1c0a011a683a7b9a08ea0bba503a74ea01da008a543a6909fa29f7da4a2a5df9eec9e22a443a5549e6b9e03a407a5e59d0c9eb4a3dba4a89dca9d5da3b1a43e9da09d05a377a4d69c7d9db2a23da4509c1a9d5da20ca4d29bb79cf0a189a34c9b6d9c8aa11ea38f9a4f9c4ea1c9a20c9a279c26a184a2de99209c0da15ea28799119ce1a04ea22f99ec9bbca025a20799d09b99a00ca28498539b5fa0b9a15898519a1ba055a12198a19b5f9f97a01f954424bb275c2808a9c828152dd42da8ae9928eb2ce12dfcaf2d289a2c472dbab08c26712b512c0bb11825a729b12a73b13e219b263628d7b1b2159a20ad22eab12c9f4d9f789bc5b111a474a6b7a753b16fa5eea8a4a9c6b08da665aa6cab3bb01ba791ab8aac44af4da727acf1ac5eae32a7e6abb2acccad94a5ddaa30ac7bad82a0a3a84daa4fadf11fb7a4cca7c8ad0b26349acfa4a8ae3b285294e9a416af0e294c9456a530af25293714a9a52daf37290f14daa42bafd628e193a4a414afb427b299f3a4d3ae34258fa133a626ae261e04a5d8a7e3ac58a06aa7b2a862aac8a33ba817a90fa81fa4c3a7b6a832a5bfa3dba7bfa853a4cda308a8c2a84ea492a3dfa7b5a815a4fea2aea79ba84aa319a236a76ba88ea296a1b7a61ca8b5a182a16aa6eca72ea178a14aa6d5a7fda066a1fea549a797a0a4a053a599a613a003a0d3a404a6639fd29f9da4c8a5c79e509f66a481a5639eb09e25a434a5d59d349eb8a3dba46f9ddd9d3ea39da4ef9c919ddea26da4ae9c5b9d93a24aa4559c2d9d3ca21ea41c9cd69ccba1b4a3769b8c9c6da13ca3bf9a4b9c1fa1b5a2349a239cefa06ca2d199159cefa03ba28799f29bdaa03aa23699859bb9a0f0a1dc98239b92a0a0a1f898ff9a46a07ba17f98fd9a08a06ca39a955c241228762821a9d728522d212e2bafa728fd2cfa2d41b05128cc2c882deeb0ac26862b5e2c40b1f4249429a52a9cb1bb2132274a28ddb1a6189a21af22f3b1ee9e9ea04ea0ceb13ba465a721a863b1a6a523a939aacbb084a6a2aab3ab1ab07ca715aca1ac66af0ca84eac30adf7aebda712aceaac21ae6ba7ecabbbacdfadc3a5beaa0eac59ad5fa348a978aa3cadb19c60a8fca9b0addd202ca572a80dae4d2571a1f8a61fae0726919fe7a541aeea26ca9d3ba541aef925cd9d59a55faeb724fda0c0a5cdade31f2ca47fa6e2ac9c9d05a7b5a8c7abc0a301a9dda971a960a4e1a8f7a916a73fa482a85aa9a9a54da458a839a9f5a40aa45ba838a9b3a49ea316a8e0a84ba406a3a2a793a8b0a355a229a75fa803a3ada101a743a856a28ea1afa612a8c0a145a120a67ca725a1e3a0afa5f6a6b8a08aa06fa5c7a656a02fa025a553a60ea0d39fd0a4ffa5819f5b9f57a4c2a5929eeb9e19a47ba5059e7c9ebba31ba59d9d169e56a3d3a42a9db79d10a38ea4c39c7b9ddaa276a4789c659dbda253a4589c0e9d73a22aa4049ca29c0ea2dba3489b569cbfa165a3e99a3a9c7ba1eaa22d9a0c9c41a1a1a2b199d19bf4a039a23499629b9aa0e9a18698119b79a08fa16598e89a08a056a17297e69cdba0b8a253970024c9273928eea8ab281d2d122eebaebf285a2d432e60b07b28002de42d15b1df26e42b9b2c59b1ea24e1290e2b9cb1a72134275428deb194188c20af22e7b1cd9f9ca18ca1c5b178a3dca6c0a75eb192a582a956aac5b06ba7c9abb0ac1eb065a8c6ac83adadaf55a8aaac89ad07af19a86dac4dad83ae82a74cac0cadffaddfa6d2ab8bac51ad74a639ab34accdacb6a5a8aafeab79ac13a435aaadab99acb7a02aa986aaa6ac3b9c70a8e0a9b8acdc9413a88ba9adacc49435a8c4a9a4ac599926a8afa956acc2a07fa8e2a9b7aa70a38aa870a9d8a828a4b0a893a94fa75aa4aea867a936a622a472a83da94fa56ba444a829a9fea46aa444a836a9e6a43ea436a831a9b4a4d2a329a80fa977a423a3f5a7d3a829a419a257a78ca87aa380a1b5a643a880a270a143a6c9a7a0a12ca1fba55fa71ba1d2a0d4a555a799a085a086a519a722a02ca021a5dfa65f9fa89fd3a460a6a59e5b9f84a4aaa5f49deb9e22a41ca5749d3a9ebda3dca4f09cf99d74a3b4a4c19cc69d35a380a4999c6a9deba255a4699c149d7ba21fa4099cdd9c15a2b2a3aa9b829ca7a135a3339b439c56a1e0a2a19a0e9c15a182a2db998a9bc4a016a21f99de9a8aa0c3a18398b79a62a065a19d98099a1ca021a196972b9c04a023a1a8967f2357271728faa84428da2cde2de0aea828652d792e69b06528072ded2d1cb1c326f62ba42c56b1cd24ea29132ba4b11421bc260b28d5b1270f131d4120deb1b5a0afa3a2a4bbb162a375a73ba86fb148a550a964aad4b0e6a666ab9aacfcaf42a89fac80adb3af43a8b1aca7ad74af23a88aac7bad89ae90a73bacfdacbfadefa6b5aba9ac12ad06a774ab5bac8eac6da619ab35ac44acc9a5d0aa02acc2ab58a568aa88ab0aabbea43aaa6eabd8aa5ba4bba9e8aa70aaf4a365a964aaf7a909a461a96caa0fa94aa46fa9acaa03a8e9a483a995aa72a7dca455a94baa92a6cea421a9fea971a6bca4f5a8fda90aa67da4d2a8f4a99fa52ea495a897a910a5b2a33ca81ba99da41aa3bba7ada8fea352a214a74ea8f1a2c4a109a73ca88ea2c5a1f6a646a804a2f4a1a4a61ca8aba1b4a14ca6bfa71ca131a1d4a51ba7bba0c2a07ea5c7a648a075a05aa5a4a601a039a0fca462a6629f08a087a4d3a5a29ec59f41a46fa5fb9d469f17a433a5839dc09ef5a304a5239d3a9ea8a3d4a4bb9cd89d41a3ada4549ca69df4a27aa4019c5a9d92a249a4a69b0e9d4ca220a4239bf59c04a2dda3e49aaf9ca2a156a3479a4e9c1fa175a25299f69bc0a003a29e98e89b96a0a9a18f982a9b2ba058a17198419c63a0dfa1c7990000a71ed91ec19cab275f2c642d74ae59284d2d402e9cb00528ec2cb72d0fb14c26ee2b9c2c51b1c4248f29fa2a78b1c6201026ea27abb11d15f81c3520beb15a9f8ea2f6a3b4b1cfa2e9a6d3a757b110a55ba924aaabb0eda6b9ab81aca9af32a8b7ac80ad87af21a8acacb9ad40afe4a765ac44ad61ae6aa745ac00ada6addea602acd2acf6acc0a6e1aba4acb4ac28a6a2ab6dac53acdfa515ab39ac7aab93a5e6aa1aaca6aa53a58baaa1ab12aa5da54caa60aba1a9e2a42faa86ab6aa9d9a4faa93babd5a89ea475a9c4aa1ea7c1a43da951aaaba6e1a41aa91eaaaba6a9a437a93faa32a6a0a417a913aadea5b3a4eca8f1a960a5b7a4a4a898a9eea465a443a83ca994a475a301a8d8a84ca46fa297a79fa8bda311a267a787a85ba3d8a119a774a8a0a27ea18da622a8d1a148a13ca696a768a101a106a65fa706a1c5a0bba514a7baa089a07ca5cda65aa042a027a577a6db9f31a0daa421a6519f02a0a2a4dba5b79eb69f70a49ea52b9e349f31a437a5979d959ec9a3d7a4319d009e45a385a4b19cb39dcea248a44b9c9e9d53a2f6a3099c789ddaa160a38c9b359d6aa1e7a2959a889cfda05ea2e999bc9bb1a0e7a159990f9b89a0a4a1d198059b7aa07ba10499ac9bbfa0bca1d4983c9c5aa0d3a1879700008e0d0b105d903827682c822d44ae5628562d672e5db0c127af2c922dc3b03d26c72bb22c28b1b524d929092b76b1b22020266527abb1f714f71c001eadb1429e7ea2e1a396b10da2bfa621a828b1eea466a9d3aa7db081a6fcababac8aaf12a896ac7cad53afeea7a8ac89adf5aed9a776ac64ad27ae54a72cac17ad85ad87a6dbabb3acd8ac05a64bab56ac5bace0a5f6aa16ace0abe7a5a5aadaab24abfea58daaa5ab8daa27a53eaa7eab3eaa2ea51eaa4eabc8a9dfa428aa2dab49a914a507aa3babf6a8c7a40daa5dab26a8caa4a8a9bfaa64a770a42ba946aac2a625a4d4a8c5a91fa615a4a7a88da9f3a5fea384a86ca99aa595a353a852a936a538a32ba816a9b5a4eca2e0a7dca839a499a2baa7c2a8f9a33fa270a794a893a3cfa101a747a8caa28fa197a603a814a242a154a6c7a78da120a12ea68fa74ca1fea0eca56ba7e2a0d9a0bfa533a78fa092a07ba5f9a64da048a039a58fa602a0e59fc2a4efa5199f2f9f7ca4a5a56d9ee59e46a47ea51f9e9c9e0ea44aa5a39d3b9e87a3eda4139dbd9deda27da4859c4e9d52a2f1a3089cee9ccba16aa3789b899c58a1eda2f89a479c15a193a22d9a169cc9a060a2ab99039ccaa08aa23e99d69bc6a047a23a99f89a3ea0ada10598bf9c38a1eaa2e7980000208f798cea8b2827522c4c2de7ad1328772d722e70b046279e2c7e2dceb0ce25752b822c17b13d247029952a4bb1d120f025c9277eb1ef17d81e2720a7b1fe9d6ca2d4a387b1d1a1bca623a825b1a5a434a99caa9ab019a6b4ab86acc4af89a7aeac7dad2bafb9a79dac99ade5ae6ba754ac4aad0fae48a753ac44ada2add6a622ac16ad1dad56a69baba3ac8bacfea52bab47ac10acaca5d2aa0cac14ab27a553aa68ab17aadea4e9a91eab95a9a2a4a8a9edaa23a97fa478a9bdaadba8a8a498a9e7aa91a8bea483a9f6aac3a7a9a480a9bcaa8ba79ba436a946aa7ca66fa416a90eaa0ba61ca4dfa8d2a9e6a5d0a386a86ea974a551a324a819a9cea4ffa218a8fba882a4cfa200a8e8a85aa4bba200a8f1a83da45fa2f4a7f3a81aa412a26ea7a0a84ba3cfa1b1a616a83fa279a14fa6a6a79aa153a135a697a73da107a101a665a7f4a0b7a0a7a519a77ca06fa050a5a7a61fa013a0e3a421a65f9f9b9f88a4aca5c29e019f48a45da5229e969e2ba43ba5e89d599e05a40ca5b39d2c9ecca3f3a4879dfb9d68a3c4a4189db49d08a388a4d69c4a9d83a255a4879cfd9c27a222a4039c859cb8a1c9a34b9b509c78a124a3449a309c41a1daa2a0992e9c30a198a28e99469bd4a081a21e98df9cc2a022a2c89700008303170d258e4726242c172debadb227152d222e3cb0a526612c252d80b056251b2b562cc3b0fd2311292b2a0ab16e20a325dc2645b17514a519b71d70b1849e37a367a461b1f7a16fa74ba811b13ea46ea9a3aa7fb0d0a58aab79ac99affaa65eac51ad05aff2a654ac4ead77ae3ca748ac28adb2ad04a726ac10ad53ad95a606aceeacd2ac44a6b8abb1ac62ace8a553ab6bace2aba3a508ab21ace7aa5ca5a9aad9ab4daa1aa571aab3abfaa9e4a422aa79ab78a9aca4f0a919abe3a899a4d0a91eab94a84fa496a9e9aa9aa771a42da94caafca640a400a9f2a989a64fa4e1a8e8a92fa640a4cda8d4a9fea537a499a8ada9a7a5eba33ca82ca9d0a44ca30ea8eea87ba4f6a211a8fda850a4d5a2f2a7dda81aa447a271a798a84da314a228a759a8c3a2dba1d5a62ca823a2b3a173a6f9a7b9a179a120a6aca75fa117a1d3a54ca7dca0b4a075a5f0a680a070a02ba589a637a039a0eaa457a6ed9f26a09ea4dba53e9f5d9f18a440a52d9e9e9e5da3e7a4649d409e21a3baa4399ded9df1a29fa4e19cb99dc6a276a4c39c779d92a23da49e9c2a9d3ea202a4419cf79cefa194a3919bc09c89a10ba3959a799c41a1a4a2059a3e9c0fa15da2a499ff9be5a02aa28599319bafa004a22199d59bc29fe2a0339500004a911c91cf8c1126f42bce2c77adf726e62cf22d21b031262d2c072d64b0e824ea2a1d2ca2b08b232629032adcb08520ee25cb2722b1ee16891c8e1d3eb1fa9de5a240a433b16ba119a76ca8f4b083a3e5a80eaa69b0e0a4aaaa18ac49af77a652ac14adf3aeb5a660ac5dad70ae55a609acf6ac83ad51a60aacdeac19adffa585aba7ac98ac9ba554ab43ac29ac53a5d8aaf6ab60ab02a582aa9fab82aad8a431aa50abf5a992a4cba9fdaa5ca94fa4a7a9dbaabda851a468a98eaa6fa864a466a982aa2ea852a44ea980aa47a74ca411a963aac9a673a417a945aac3a684a415a93aaa8aa667a4bfa8e1a941a6e5a360a84ba998a5b3a217a8f1a8f5a4c6a222a8fea8dea496a20da8dfa887a44ba27da79ca82ca404a226a773a8c1a3d8a109a761a870a3c0a1eca654a8f7a28da1bba637a872a275a183a610a8efa156a136a6b8a753a124a1c0a531a7b1a0fba055a5b6a623a088a013a554a6459f23a0cfa40ba69e9e919f86a4aca5f89d0d9f3aa456a5949db09e01a414a51e9d489ea4a3daa4e29c029e53a3aca4879cd69de6a26ea4439c9f9d52a215a4e59b3a9dbca152a3ea9adc9c5ea1faa2169a6f9c2fa1e1a2b799409ce9a0fea20b99499caea099a2a798ce9c82a0d3a19698b39c67a055a214980080f1923e9304925425312b712cf1ac7f26aa2c722da1afef253b2c122d35b0c324b62a012c73b02123fe281e2ab6b04420bc259a27e9b082165f1c8c1f0db1e99c9ea21da3feb02ca152a745a8ccb053a311a911aa57b0a0a47baa03ac7eafd8a5e6abc1ac9eae14a621ac0bad1faec0a5d7abd8ac4cadcda5adabb7accfac8fa551ab6aac43ac6fa531ab52acebab3fa5e4aa2eac2bab0da597aaedab54aaeaa454aa9dabbaa985a4f5a92bab11a987a4c2a9f4aacfa889a482a9afaa51a88ca461a991aac3a75da418a92baa0ea741a4e9a800aaafa60ca4bda8cfa93ea6e2a396a88da9b5a52fa364a84ea96fa5fba239a813a924a50da31ea80aa910a530a31da8f4a8e9a4e5a202a8e1a88aa4b4a2aba7baa81fa45fa25ca798a868a356a234a78aa8faa222a204a767a8a1a2c4a1b6a636a807a28da16ca600a8a2a129a104a68aa737a1eca09da507a7cfa0a9a045a5aba64da030a0f6a44ca600a0b29fafa402a6309f319f68a4c1a5519ed59e31a48aa5f19d7c9efba346a57d9d319e7aa3eaa4259db99defa29ca4ac9c7c9d76a244a45a9c359d30a202a42b9c139d0ba2c1a3e39bf29c04a286a3419bb39caca118a36e9a9b9c35a1afa28599269cdba038a23399cd9b95a0fea167989d9cefa070a27797000056960b989b93e924c92aa42b89ac8625642c3b2d19af4b25bf2baa2ccaaf5424442ab12b1cb0aa22a428aa2955b0bb1f5c25102797b03018be1d0c1fbeb0869c2da2aba3a9b073a060a6e9a772b0eca184a863a916b029a393a985aa30afd5a4abaa21ac3bae58a5b7ab7fac7aada5a5d7abadacd2ac85a580ab97ac41ac6ea553ab84ac7bab44a5fdaa44ac66aa01a5a6aa0bac8da9c8a45baabeabf1a8b5a431aa70aba1a892a4eba931ab74a867a4aea9eaaa16a820a473a99caa90a7fda33ea96aaa26a7e9a309a937aabea6dba3e8a801aaa0a6b7a3bfa8c8a95ba6a6a394a8a1a92ea69ba366a880a9d7a581a34fa84ea98ba5ada31ea826a958a5cca30aa8f2a803a55da3b1a7cca887a4d7a26fa797a833a447a22aa76fa8b0a3d2a103a762a80fa385a1b1a634a891a23aa16fa612a8efa155a15ca6e7a7a9a130a126a69ba745a1d4a0e8a54ca7dfa0a7a0a8a501a790a033a04ea5a7a6ea9fc49feba439a60c9f029f61a491a5d79d829ef4a31ca5149d419e94a3eda4d79c469e55a3d2a4879c379e1ba39ca4649c319ec0a256a42c9cef9d45a213a4d49b6e9deea198a3289bfb9c9aa147a3d49a6b9c45a1e5a20a9a269c1ca1bfa26a99239c01a15ca25c99949b96a0b3a1df98c09b3ba0dca1a097c1152b243124079c8c24cb2a422cd2acea24b82b742cb0aec424f82a2b2c16afc0239429a82a51af87211528f8289faf861ead242826ecaf8c18771ed6201bb0a498969e12a024b0bf9f61a5aea60fb0cea181a828a996af5ca383a9afaa01af13a4eda93eab0fae69a42faa7eab45ada3a489aae4ab5facd8a4ccaa03ac4aabbaa49daaf1ab01aaf9a496aa13ac67a9bca469aac4ab9ea879a40caa62ab02a85da4caa91cabc2a75da48ba9b0aa5aa702a448a962aadfa6eaa311a937aadaa602a4f3a809aa20a703a4dba8dea9bda602a4cea8d9a96fa6eda3a9a8b5a94ca6c1a387a891a903a6a2a373a889a9d0a564a370a86aa9c1a530a349a841a99aa508a325a820a940a5c4a2d7a7e6a8d2a480a249a7bba82fa453a21aa780a89fa307a2eba666a80ca39fa1b0a638a891a259a166a604a8fba110a13ca6c0a7b2a1f2a026a698a75aa1c5a0e7a552a7f2a089a091a507a79da02ea01ca568a613a0fe9fa7a4dda5f19ebc9f57a47ca5389ebd9f12a42ba5a99d469fa8a3f1a4f19c9e9e26a3bba4779c1b9ec9a29ba4e69b999d74a279a43d9b229d10a23ba4cc9a009ddaa1d2a3519ae99c9aa144a31c9a859c42a1a4a2cd995d9cfda04ea26799469ce9a007a260991f9cd1a0fea1ca98809cdaa075a272980000a4195f1b409b19237829bf2a09ace724382b702c3cae3124362a912b8caeb322d228e529c5aefe20f3261428e9ae501e79248325faaeb118b91e2420d6ae0496459c469dbfae8b9c03a358a484aea89f43a60ca73aae95a123a8efa8f8adbea2dea8a5a986ad07a311a91aaae0ac8da37da9abaa2cacdea388a9afaa90aa12a4c0a9c0aa53a917a49da9b6aacda827a49ca9d8aa52a841a4a3a9b6aa26a81fa468a977aa2ca70ba435a937aad6a6d3a304a9fda9fea6a8a3d8a8e8a9aea62ea38ba8a2a943a6cfa257a850a9dfa5a7a230a827a9b6a57da221a805a994a580a209a8efa880a57ca2eca7e6a871a550a2c5a7c7a84aa553a29ca7b7a80ea525a23ca775a896a4f2a102a746a83fa4dfa1fca642a827a4c4a1fda651a8aea3aaa1c5a644a829a367a163a617a86ea215a112a6dea7d0a1c5a0efa592a78ca1b1a0aea55aa70fa19da091a513a7aaa0aba060a5c8a668a070a019a577a606a00fa0aaa40aa6f59e2c9f48a48ba5239ec09ed9a339a5a09d739e8ea310a50a9d689e3aa3cca4d29c379e01a38ea4859c499ed0a279a4669cc89d71a254a4289cbf9d29a23ba4059c929cbca13ba43c9b8f9c60a181a3a09a659c2aa1efa2829a629c2da1eba2859ad49b2aa107a3479a799ca7a0fba1dc9600806697a6989493cd23cb29342bd9ab5f24652aeb2b75ad44238429c62af6ad3522a128ac294daee3200c2750285daeda1d39242e2584ae6d182c1d751e4aaeb190cd9bea9ae3adca999aa073a061adc99c15a322a4e3acd19e04a5f8a599ac82a089a6f6a743ac32a150a761a8c3abe8a118a8f6a815ab83a278a849a969aaa8a299a87aa99ba9efa2c2a8ada901a940a3d8a8f0a97ca839a3e8a8dca937a84da3b1a8bfa99ea723a3a7a892a936a7e5a27ba887a9cca6bfa273a862a947a6b6a25aa848a931a691a241a82ca9c2a575a211a8f7a8aaa541a2d1a7cca8a6a50fa2a3a7b3a875a50ca28aa7aca877a51ba2b3a7cda88fa550a2d6a7eca8aba58da28ea7c3a854a598a264a793a8e8a475a226a77fa873a40fa2e3a655a80fa475a196a619a84ca320a12fa6baa788a2bea0c3a54da7cba158a090a5f0a645a131a04ea5baa6b9a043a033a57ca668a02aa0f9a43aa603a028a0c7a4f4a5349f11a08ca4b6a5979ea89f48a459a5f39d189fd0a3e8a4439d829e72a3c6a4dc9c509e48a39da48c9c029efda26fa45d9cd49d9ca23aa4f99ba79d35a201a47d9b979deca196a3e49a669d9fa14aa35f9af29c43a1e3a2199a849cf3a080a2a499249cafa0dea1ad99179b19a029a19d98da9b4a9fd4a020950080c498559a2295c4219028a4294fabab23d629332becacd0227229802a7aadb02184286529edad61208a2602281bae971de023da2448aea118e21c5f1f46ae3790809ba69a0faee29974a12ca2bfad0f9d2fa4f4a44aadbe9e86a599a6fbac1ca074a6a8a7a4acf5a046a763a833ac2ea19ba76ba86aab95a1eaa7cea878aac6a120a801a9b9a9eba13da80aa9f4a809a239a80ea939a834a23ba80da98ea730a232a804a9dda649a227a8fda869a640a219a8f4a82ba632a209a8e7a8efa559a2f4a7d8a8b5a53aa2cba7bfa800a62fa2a2a7aaa8eba51fa27aa78ca8d6a53fa29da7a8a8e3a52ea2b1a7cba80ca62ba29ba7c5a812a6f3a192a7baa8e3a5f3a17ba7b2a87aa5eca171a7a3a816a5b7a102a76ba8a8a480a17ea616a841a46aa11ca6cda7caa354a1e7a595a724a30da19da53ea7eca175a047a5baa61ea139a012a576a6afa025a015a57aa643a014a0e9a442a69f9fa19fb7a4eea5089f2f9f6ca4a8a5689ebd9e23a450a5949d6c9e8fa3eda4ee9c119ee2a27ba4649cdb9d6ba21fa4189c819d0da2cea3cd9b499dc6a159a3469be99c7aa107a3e69a839c06a194a2669a499ce1a079a2ff99169cc5a051a2dd99e09baba042a26199089cb1a0f8a13299369b82a0f3a1a398429c2aa050a1f89500803f97b0978d8d5422a728902975aadc22a629c62aabac4a22de28162a21ade2207c279f2860adfe1e63259b267aad341c0a22732386adac15df18071aa2ad7e94679db59e9ead339a29a2afa374adc09c8ea4b7a533ad769e98a50ca7f1aca29f33a67ca7b6acd59f07a692a754ac4ba073a6cfa70cacdba022a752a855ab43a16da786a88caa9ea1a7a7a7a892a9b4a1a7a7aca87aa8b5a197a7ada817a7bea141a77ca8d3a5b3a13ca772a8a0a5ada13da772a875a5d9a17ba772a888a5e5a175a78ea8c7a5c0a166a783a8fba5baa154a776a85aa607a293a7a0a8d4a677a226a817a968a7a0a261a86ca996a76fa24aa85ea985a706a211a81ba90aa7bda1aea7d3a854a683a171a7ada8daa589a169a7aaa84fa56aa1b9a64aa870a4eba0fda57ba737a3c3a0f5a551a785a2e4a0f7a55ea7b8a1aaa0b5a51aa7e5a061a04ea5a9a660a00aa0e6a431a6dc9fd59fa6a4f4a5f69e479f5ba4b2a5429ee99e0ba427a5a19d779e75a3b5a4f99c149efba291a4809c109ecda277a43d9c209ea2a26fa4e39bf39d55a244a4879b799deaa116a4c69acc9c41a124a3169a559cfda07ca28f993f9cdca05ba27a99fa9bb9a025a22c998d9b80a0eca1d598089b46a087a1d798be99929fdba05098859ad09e99a0a89500808f926a93029478211328fc28aca9dd21d928cc2906ac22212628f12854acfe1f7526f72794ac421e9524af25b7ac051b8d202f22cbacb21329156c16cfacfa948d9df19eb9acf799b6a138a393ac969c12a425a54eacde9de0a4eba512ac149ee4a4cca5a6abc99d88a4a4a5cbab2d9ed6a4a9a51fac449f41a532a64bac7fa0b9a528a7f7ab90a05aa6b6a716abaea0c7a637a8b4a93ea10da759a859a85aa18fa7b6a8eaa6c2a199a7aba80ca61da2fba7c6a8dfa523a2daa7c7a823a65ea2f9a7e3a85aa6fba1daa7cea814a7cca1bea7a0a8fba76aa248a82da9baa8f4a2bea8eea9bea8cca2aaa8c5a967a866a261a88aa9bba7e8a10aa814a9b4a675a11ea77fa8b4a53ba17fa60da821a5f4a0f0a5b4a777a49ea0d8a582a742a371a097a50da7c3a11da04aa593a6ffa013a01ba59ca684a002a0fba462a630a0f19f97a4dda5699f6c9f4da474a5969eca9e04a41fa5269e669e8ca3c9a4b69dea9deda260a4079d919d96a23fa4a29c809d69a23ea45f9c649d54a235a4089c429d19a221a4259b2f9dc6a1f0a3c39a1b9d65a182a3159ad69c0aa1dda2e799899cb1a079a24a994f9caaa053a20d991e9c9aa03aa2d598139c9ca01fa2a298359c7ba0e4a15b98d69b57a085a11198999c119f3da07f966005128319837b97a51c8321e22153a36120ff265528cea980201f275a2814ab1b1fdc25e026c3ab581dda23d1240bac581a2520172138ac1213cf14fa1548acee921f9d769d29ac539a5ea21fa3f5ab189dcea495a57dabb99ef8a557a7b9aabe9f77a6e8a7efa9b79d78a564a611a9959c93a4d0a59ca81e9dc1a416a67da9b49fdea57ba67aac36a067a6a0a7dead05a1d2a635a81dad2ca136a7aaa8bdaa86a13da8eea8d9a7f2a1ada86aa987a49fa13fa8b5a820a3a0a108a824a9fba51ba2d5a8baa9d5a833a33ca99baa3eabada442a9aaaa3cac95a326a98caa04ac98a2d8a8f5a945aae3a139a82da94ca80ea2dca7f5a885a6c2a2dba652a815a53da1faa55aa71ca432a0a3a5e4a6fba24fa05ca5b1a6e4a155a022a570a63ba14aa005a561a6bca0c89fbea439a62fa0899f66a4baa5739f1b9f23a451a5b99ef19ee8a325a5289eef9ec8a3f9a48d9df29e89a3e8a4249dc29e5da3bba4cc9c949e30a397a4a19c4f9ed4a26aa43e9c329ea9a255a4179cf89d78a243a4939b909d2fa22aa4f89a439de7a108a4a89a109d94a1b4a34a9ae29c45a12ba3f199d69c15a1b3a2ba99ce9cdda074a28a99939cada053a25499759c94a057a21299269c7ca04ba2d198aa9a35a029a2c4986c9bd59f84a12c980080ed8c6a8c649335209826f62751a88c209227b62825aabc1f5626e32775aa661e04255226c3aabd1cf022592429abf3199c1fc92062ab4114571477155fabc6905c9ddd9d31ab069a19a2c2a2d7aaab9c83a42ba51daaa59d4fa537a682a9d19d49a591a699a80e9ee4a4dea592a7259d88a38aa467a5619a72a0ada10ca25194fe9b4d9d0a9ee98b51966898dd9a9d840593e5947399e684f7922a943999fb862993d795009a13894d945697739aa88c3296a9980e9c1e91da98419ba99d2894059b079ef29f0698ab9d109f50a077995f9f84a1eea1f29fb4a5c4a6e6a3d39ae7a553a7d9a17d986ca4e4a523a0fd9947a3f8a5079f30a174a57da657a118a088a4cda570a038a08da4a9a537a043a0a4a4cda530a030a087a4a1a508a067a07ea4b7a5c49f4ca053a496a5299f3ba031a45da58f9e23a0ffa30ba5fc9d1ca0d5a3f9a4899d5c9fa4a3d6a4569dfd9e7aa3bea4fc9c8c9e3ea395a4c69c409ee1a257a4889cdf9d68a21aa4139ca29d02a2aba38d9b519da9a134a3db9a3d9d70a1fda2979a089d39a1aba2539aef9c15a169a2169aa79cc5a031a2c7995b9c94a005a25699359c68a0eaa1f0981a9c3da0b5a18e98069c11a09da10b98ff9bff9f3fa1ab97cf9b659fe7a02d97389b089fb9a01b9800805c895f849893b11f5426ce2795a72420dd262e283ea9131f7f250227c5a9f41c21243a25cda9b61bbe219a2331aa8a18721e742067aa4810760dd50e71aaea91009d389e20aabe9823a167a27ca9cc9afea230a4ada86a9c27a433a50ea8be9c4ea45ea5c8a6159defa3aaa45fa5d89b9ea2e8a30ba4579999a065a181a15896809ed49f0da0b096e39d629f979f88986d9e4ba032a050990da053a108a1139beda0fea185a1ef9924a122a357a1019b4da180a2eba0a09ab9a0f0a123a088990ca0e3a06e9e0798a39e48a0da9c2996ae9d3c9fbb9bd496569e04a0859b2399d59fcba0999c509c56a13fa25e9ea99d6ea217a48c9f299e9ea270a46d9f7a9ef6a29ba4919fd39e1fa39da42d9f489f3fa3a2a4e09e419f5aa3a1a4c79e0c9f62a3aba4549edd9e73a3bba4059e939e45a39ba4cc9d719e3aa38fa46e9d489e1ea382a4379d4a9eeea271a4d99c369ed0a25aa48a9c279ecda24ba4449c2f9ea5a23fa41e9c0f9e85a22ea4fe9bd79d5da21ba46b9b659d06a2eea3059b0a9d9da197a38b9ae79c46a133a3269ab19c00a1d9a29999c89cc8a0a3a29399879c9ba041a229993f9c84a0efa1d998be9b4fa0a1a1a098459b05a03ea12f987f9ba99fe7a00898a59a5b9ff1a0f996199c969e2ca0ce940000fe1796188393851e56258c26e5a6701e5225aa267aa8ec1da224be25bda84f1cda22472411a9241ab720dc215da9b2168e1cb21d5aa9d10fd00c050e39a9ad8f9b9bbe9cdda86b969e9f5ba056a879994fa190a293a7a19ab6a2e0a36da6c79aaaa2e8a353a5a59ac1a1d0a261a4279a3ca13ba231a35c99b9a0b9a170a2bc985ba06ca1e6a13a994ca04fa1e3a12c9abca0e9a172a2809b58a17fa293a25c9c21a25aa3caa2009dd3a222a4f7a2ee9d4da373a4bba27a9d77a3b1a482a22e9e9aa3b5a40ba2619e2fa362a46ea13c9e68a2bea3aaa02a9e16a128a2b49ebe9b36a052a1079dc2997b9fb7a02f9ce49931a0efa07e9cba9bf9a030a22c9dbe9ccda159a3089e6b9d4ea2bca3419ee39d76a21ea4379e8c9e8fa23fa4ed9ddc9eaca24ea4db9dbd9e78a24da46a9d499e41a21fa4299d3d9e3aa2f2a3d49c459e45a203a4bc9c249e38a2f3a3799c169e1aa2c8a3469c0b9efba1baa3e09bdf9de4a18ba3499b899daca164a3ee9a479d79a14fa3589afe9c3aa129a3109abe9c08a1fda299999c9ce3a0f4a25f99809cbda0b0a23699759c87a06da2eb985f9c70a015a207991a9c43a0d8a1a298e79b30a0aaa180989d9b17a08aa16598589bea9f55a14098e39a9d9f03a10e97a49a9f9e3ea02c95631c1f25e2256ba43f256d293a2a05ab2a258629392af3ac092466282e295bad3d22c826fc27baad24208e241d25e4ada11b80205d210eae34929e16ec174fae5f9c519def9c76aea79fafa264a38eae14a2e6a64da8e8ad4ea19ba7dba8d2ac36a0b3a69fa80faca1172aa521a78aac9e241d9d21a4e3ac7426371227a200ad7827ae1fbfa011ad5128a32364196facbd293c292528b2aae62ccd2f402fe1adf0250fa863ab66ae872572a3fba6d1ab7128ab1fc29d2aad1b28ae20db98b0ad7326e01ddf9b68ad8a2500190d9f93ad8f22629de1a2f3ac888f03a48ca51fabf5a006a537a6faa631a15aa5c0a672a33fa0f3a4b8a540a1909fa6a487a5dea04e9e0ca5dda519a160a014a671a741a2d1a13da740a8d6a3279f6ba5f3a606a25c9e5aa4b2a562a03d9e20a42ea5599fbd9ed0a3dea4c89e679e63a39ea4559e3c9e33a377a4199e159ef1a259a4b49dfe9db4a238a4829dc59d75a22ba4169d899d16a2e6a3cc9c1a9db9a18ba3529ca29c4aa1fca2bb9b209cfea097a2f89a0a9cbda049a2649ab89b8fa008a2ef99769b80a0d6a19499fc9a5ba0c4a13299cd9a3da089a1a9986e9a07a058a16d985a9ac39ff6a01698449a939fbfa0b597fe99659f76a0e0970099db9e44a0e596f59af89e8ba00896a01827248a24b2a05925bc29f42a0eacb325182a162bfead5f25b329c42aacae4224af2899292daf38223a274e2896af191fd9243626e7af6a1694205a221eb0ee999a18971c3eb0839f9c9f0d9d5cb0e0a266a649a700b0c1a4a2a9cbaa1eafd0a4d4a9f1aaf7adeda37ea9b7aa73adc19c3fa89ba915ad1b216aa149a59aab3126ca1e419d2facab28bd26882361ac362be32bc52ab7ac5c2bb22b602a2aad39281ca416a9f3acc32528a87eab8bac5227e0a2b9a87dad5728d6133da3acaeaf26ea9227a31bae50240f9f5ea4a3addd1b91a494a6c7ac2aa089a6b6a779aa13a39aa769a8a9a6f7a248a665a7f5a243a2f1a5eaa616a256a1a0a5b9a6c8a19fa0bda4cda5cba038a058a412a5b6a09ea01da577a676a120a159a60ea865a2e4a0f5a57ca7eba1c79fc3a401a657a03f9f75a495a59c9f4e9f53a468a52f9f089f25a430a5e29e8a9ef6a3f9a49c9e2b9e9ca3bba4529ecd9d30a383a4a29d819dd6a256a44b9d2b9d73a21ba4d99cf79c14a2cfa3619cc09cbaa14ea3fc9b8a9c8aa10ea3639b4b9c39a1aea2ba9a199cfaa055a2309abe9bb8a0f6a1ee99459b6da0aca14899fd9a58a08aa12099d99a29a04da1c5988f9a12a011a149981a9a9e9faca00f98f998679ef79fb096649ade9e96a08399111b0725b02519a27526fb2a4c2ca0ac8426232b312cdfaeab25442a712b64afd12488296f2af7af43231228db2839b0bf1f4925532671b00517f920e22291b0bf9b5492971386b0c8a012a253a253b0afa349a726a830b00ea572a961aaf4af3fa5ffa921ab89ae8ca45fa972aa32ac88a29da8b4a92aabb39ca3a64fa823abe420ee9f40a499ab6725e51e579420ace127a02426208eac832889244015eaac2c28d2946ba50cadfb262ca242a7fbac1e26d8a220a854adbd267b9ed0a5d8ad5325bc9d02a5c9ad4b203fa365a6f6acc39cfca6a8a807ac3da205a8d1a803a90ea403a8bba825a659a369a772a86ca4cda2eba619a88ea367a2b5a6f2a754a317a279a69ea7f4a250a1d5a5fda65fa2bca057a57fa645a2f3a0c1a515a760a2cba0eba54fa71ba275a099a5cfa67fa14ea02da55aa6aaa0e69fb8a4dba5f89f649f5fa467a5189fb99e07a410a55a9e5a9ec3a3d6a40d9ed79d66a3a1a4c59d909dfba26aa4499d5f9da4a233a4e19c3b9d52a2fea3809cf09c06a292a31b9ca19c9da10da3a69b6b9c53a1c2a2c99a499c20a16fa25f9a2d9c0da161a2359a369cfca042a2f899379cfaa067a2bd99209ce4a043a2a399e99bb1a036a24199249b58a0fba1b998899a0fa055a17798919ae29e52a03c95a8129b1d401e3f9e3426cb2a252c35ad1e270c2cb82c92afe625bc2a012cf1aff324a429c62a52b0802371284e299bb02d20bf25e426d5b083175e216422edb02e9c1a991214f8b0f8a197a4eea4c8b051a4b4a75aa898b001a516a9dba9a1aff0a455a93aaa62ad30a5a2a9ccaac2ac54a599a9beaa0eade9a49ca9a8aad6acfaa060a7bda8b6ace98daba496a6e2acef1e58a3dfa575ad44224da2cfa5efad3c2450a3b1a6f8ad1d243ea36ba7cead1e2454a47ba79dadba2200a447a700ad732028a410a733ac968e21a636a87bab75a29ea8ada9e0a93ca48ea84ca9f1a74fa48fa84ca927a60da427a8e0a844a5a4a31ba8cfa820a556a3e6a7a3a8d0a40da399a779a88fa4ada23fa75fa839a4b7a1b0a62da864a32ba156a6d7a7cca20ca136a6b4a754a22fa134a693a7cca117a1bda501a71ca170a02fa561a671a0b29fc4a4f0a516a07c9f82a4aba5a49f329f50a468a5099fab9e0fa412a59e9e1d9e82a3c7a4f59da29df9a277a4609d739da2a248a41d9d379d54a21aa4bd9cfe9cfda1c6a3599c769c7fa142a3d39b359c3aa1dfa2f89a229c0fa193a2979a0a9c05a170a2629a0a9c06a164a2db99d99bf4a059a27c99749bcea01fa21a99f49aa1a0aca1f998839a49a071a1b698119c54a04fa27e97050cbf1c4c1dbf9c60260b2b882ca4ad3a27212cf52c1cb03f263d2b492c44b03825ff292c2b98b0db2386286429e6b06820a82548271bb1cc179921ad2232b14e9c639c4d9a2eb14ba2ada532a614b1c6a46fa80ca9bfb0dfa4c8a872a965afdaa419a922aaf4ac90a5e9a9acaab3ada5a542aa3aab6dad6fa5d1a9b0aa1aad6da5faa9d3aad5ac8ea458a95eaac8ac06a31ba959aab0ac16a042a881a985ace29843a7b9a869ac8794bda69aa862ac6899e4a693a824ac079d3ca7fea872ab059f90a7f4a8f6a9a8a150a872a919a929a4f6a8f8a992a85ca4cda899a9c4a765a484a858a955a605a440a815a9bca500a427a8eda85ba587a308a8e1a832a5e9a2aea797a8e1a42ba21ca73fa873a496a196a6f1a7d4a301a172a6daa72aa3fda059a6baa777a2e1a0b9a510a78da1caa075a5bfa60aa168a053a58ba6dda00fa00aa537a66fa0c79fbaa4e4a51da01b9f49a499a5439fa39ef8a341a5939e1e9e65a3e3a4089eab9d01a388a48e9d6e9daba252a44a9d4f9d9aa234a4099d2e9d63a219a4bb9cb89c18a2d0a33e9c6d9ccfa175a3be9b599c94a116a3469b489c6aa1c8a2959a0c9c1ea18fa2109aa19bc4a001a27e993d9b72a0bea1a098c59a41a049a1a098579a9e9fd7a01d97629caca0b9a2dd98b312e41d3a1e419d6326332b8a2c96ad8027462c022d15b077266d2b642c55b05625592a682baab0d823c028b129d4b0a92097254327f1b08917a92098211db1009d0c9e309d1ab1fda042a48ca4f5b0bfa204a618a67cb0b0a304a8fba75fad31a570a9faa948adb0a5e1a974aa19ae88a5f6a9afaad7ad92a531aa04ab30ad1ca51baacfaa77ac4ba5f6a9f4aaf8abfba4ffa90eab7baba0a4c7a9d9aa3dab0aa48fa9e4aae0aa17a46ea9a8aa5eaa69a374a9f7aacea9d7a351a9bfaa34a9b1a34fa9ceaa0ca83fa446a97eaad0a6dda42ea93eaaefa6d3a41da926aa8ca671a49da8b5a945a62aa467a852a9cea525a44aa81aa97ea51aa449a81ca937a5fea32ca802a9f0a44ba30ba8d8a8c4a44ea263a783a83ea466a198a62aa862a331a162a618a8f8a24aa11ba6a4a75da210a1c9a515a7c0a1bfa0a5a524a73aa154a043a5eca6b2a022a0efa48fa622a0a89fb0a414a68f9f449f61a478a5cc9ec59efaa3e0a4319e319e77a3ada4a19ddc9d21a381a4609db29deca253a4129d659d9ca22ba4bf9c109d3ba2d3a3569cd99cd5a162a3f49bab9c7ba10aa34f9b799c43a1a6a2c79a329ceda04ca2f899a49b9ea0dea17299cd9a61a08da19c98b49a48a03da18f98279af49f10a1cf971c9c41a08ca11498f414ac1e411f509e3d260f2b722cf9adb027972c762d40b0c326f22bbc2c7ab090258b2adb2bc1b01d24de28d129e5b0472020266527fdb08814c51faa2027b1939ebfa1d7a11cb145a236a6e6a617b1a6a2d3a6f8a68fb0e1a354a813a935ad4da6a5aaceab53ad66a635ab13ac2faea8a58aaa51aba2ad21a502aabfaad8ace7a484a980aa5aacbba46ea961aa0eaccca46ca93eaa8aab5ca49ca994aacbaaf8a4c4a9a8aa37aaeca4c6a9bdaa75a9cea494a9c0aac6a8a1a467a972aa6ea872a44ea9a1aadaa67aa477a987aa6ba5aba402a935aa3aa79ba40ba935aa95a793a4e9a8dca9c6a644a4baa8c6a93ca60ba4a1a8a2a9b7a599a373a852a957a5f4a2faa7cea8c9a459a2ffa64ca824a4e1a1a4a606a861a387a1b7a60da818a38fa1b6a620a897a2d5a137a69da7e3a1aaa1c7a50fa747a106a198a5c8a60da181a052a58ea682a04ba035a56ca63fa009a0d5a42ba6cc9ff09f58a49fa5be9ec59f1ca431a54f9e759f01a4faa4bd9de49ec3a3d6a4569d369e6da3b4a4f39cde9d28a389a4b99cad9dd9a264a46c9c629d91a23ba43d9c129d38a20ba4d99bd49cd4a1a7a3439b709c5fa113a3879a229cd5a039a29299a79b85a0a3a1db98809b68a04da1ca98d99af39fdea07998a89b0aa0bca10a9b0000111401176c922226492b8f2c06aecd27882c842d5eb04a26882b772c75b03025742a912bbdb0f223ca28c129d1b071209225c426e0b04117a31f9d2110b1959dc4a0b6a01eb12ca11ea5aaa5fab072a2c1a6fda657b056a40ba99fa93aad2aa6baaaafab59ad05a6b4aaa1ab4dae53a52baa21aba9ad37a522aa1dab03adf9a4efa9b3aa6facdda4d5a9dbaa0bac97a483a978aa40ab8da441a90aaa8daa5da43ea954aa32aa3ba482a975aad2a94da43ba93baa54a97ea430a941aacda88ba44fa950aa4ea70aa4f8a814aa95a518a4dfa813aa08a78da4d8a8c8a93fa78aa400a9f6a9f0a654a4e3a8e1a966a649a4a1a8a3a9d8a546a460a844a95fa525a410a8e6a807a504a389a794a88ba4f7a11aa761a80aa4bfa110a74da88da37ea1d1a62ea8dba242a15ba6dfa718a222a102a665a7b1a1dfa0c8a502a75aa188a076a5bba6e0a049a03ba581a680a023a0eca434a614a00fa09fa4e0a5609fde9f66a4aba5d49e739f3ca468a5519e1c9f06a405a5c59da09e7aa3ada45c9d069ee5a24fa4cb9ca29d4ea2eda34b9c649ddea152a3fe9b669d7ca1dba28e9b179d2aa173a2f79a7f9ce4a01ba2729ab99b90a0c5a1e199d89a70a08fa16099da9a75a083a16699139c07a12aa291990a9bf59f0ba1199800008f0df310268f4826432b842cb5ada5279d2c862d0db04426b52b952c57b01b25902ab72ba1b0cc23d928cd29dfb011204125e026eab01f17fc1d321f0db17c9dc5a0c3a11fb102a10ea59aa5dcb092a1b9a54da644b0d0a35da81ca9c6acbaa568aa84ab33ad54a584aa2eabe1adeaa4c5a965aa2aadf6a4d7a9d0aaa0ac11a5eda9c5aa56aca2a511aae8aadeabf8a4cba9f3aa49abc2a4a8a9bfaaa5aab8a494a9c3aa37aa6ca475a98aaaaaa99ea42ea92eaae3a865a40da9faa964a825a5d1a8aba9efa632a4afa8d0a956a622a4a2a8c2a902a74fa4f2a8f0a921a744a4b6a8c9a997a6c7a378a865a94ba662a338a824a9faa519a320a8faa85da5cfa2e9a7c2a8e6a4ada2a2a7b0a880a467a270a797a81fa4cca101a758a892a36aa182a6eca7caa22ba13ba68ba758a205a10fa676a7e2a1fca0f6a559a795a1dfa0d4a543a734a194a091a504a7caa046a03aa5a9a672a00da0d7a407a6ef9f719f77a483a53e9fd89e35a450a5a49e8e9e17a426a5639e4a9ed6a3faa41e9eeb9d54a3bda4909d679da4a249a4f49cfa9c1ea2b6a36e9ca69ca5a11ea3039c639c41a1bea28d9b459c14a197a2129b2e9ce5a065a2ac9a049ccaa07ea2199a7e9b9ea000a27899959ac39ffda07a98939ccea1bca3269a000065882204538bda25062b622c51ad1127702c502de3afb2252b2b472c3eb0c324142a612b8fb0152381286f29bbb0981f7625aa26bab0b116771f8520e6b0779ca1a09fa0ebb0b5a0eea40aa6beb0fea0dba506a726b0c9a21fa8daa89fac3ca5f6a9c9aae6ac36a538aa2dab03aef0a427aa38ab4dad27a56aaa43abf0ac34a54caa23ab70ac7da4afa96faab8ab69a4a0a975aa1aab85a4a8a99baaa5aaa9a4bfa9a7aa2baa5ba474a97caaa8a949a444a94daa2ba944a416a9eaa9cda820a4eea842aa26a8e5a3fea807aa8fa63ea4f1a8dea9a6a706a4c0a8d4a95fa703a486a893a9b3a679a35fa85fa927a615a31fa80ea965a5cca202a8cfa8eba497a2c9a7afa8b7a46aa290a7a9a86ba453a277a791a857a4f7a170a78ea829a4e1a107a757a898a381a160a6bfa7b9a27ea1f8a547a713a244a1e1a537a7b5a1cba098a5e2a63da17ea058a59aa6c5a033a0fba454a665a0b99faaa4d8a5f09f299f46a45da5029fa49e1ba434a57b9e719e0ea41fa5549e6d9eeca3ffa42f9e379ec5a3d7a4019ef89d49a39aa4889db59ddca25ba4109d3c9d5da219a48f9cbc9cfaa1c5a3289c5c9c8aa14da38c9b4b9c5fa1fba2da9a329c38a1cba20b9af69b17a19ca2ad997e9bc3a065a27a98599cb4a0f6a1199800000109b50dd78d7c25a82a202c4eadd4265b2c4f2df6af5625e22a392c13b05524e329fd2a47b07a224328282979b0081fd524612691b04516951dc51ec3b0fa9c5aa17ea1d0b067a05aa5f6a5cab093a083a6d6a72cb08aa22ea80aa9a4aca5a4e9a999aa52ac91a4c8a9b4aa6fadaaa4c3a9c4aa04ad1ba542aa1babb6ac24a56eaa7dab68ac09a543aa3dabdfab95a4f2a923abdfaa9ba499a9a7aa07aa44a460a96aaa60a953a424a931aa0ba920a4ffa847aab4a803a4dba8cfa962a80ca4d2a8d8a995a799a3d0a801aa91a614a4bda8bea989a737a4eba8fea9aaa723a4b8a8b6a9fca613a4aca8c1a993a6c9a377a860a953a66ba32ea809a965a5daa2f5a7c9a8e2a48aa2d6a7c8a893a444a271a796a83ba4a4a1d6a638a84fa398a1a5a60ca8eea262a147a6caa778a258a1f9a574a7f0a13da1d4a53da7a8a1e7a082a5eaa649a17ca02ba597a6c9a041a0f1a447a686a0f79fb0a41ba623a0ad9f65a488a57a9feb9ed7a3eda4429e6c9e40a3b9a4c99d319e22a3a9a4799ded9ddea28da4459db99db0a268a4229d869d85a236a4dd9c3b9d34a2efa37e9ce19ccaa166a3f89b8c9c5ba1d4a2d59a569c02a15ea23d9a2e9cd0a022a2da99859b9ea0e2a19d996f9b9ca0cea141992d9be99f29a138970000c88b5604c88bf124972a142ce5ac7326482c262dacaf1525b42a082cefaf2124b929cb2a29b04e223d28242943b0a01ff224812653b00718421d691e7cb0c39b03a12ba18db08ea06ba517a68ab049a25fa734a80fb04da2f4a7c6a8adad28a43fa975aaa1ac86a427a917aac4ad2aa41da92baaefac3fa44aa921aaa3ac94a425a911aa29ac42a425a91faa57ab02a4f1a807aa76aacfa3caa8cba9d7a9aca3bda8cca95aa935a3b2a8e8a9e5a8b1a398a880a968a835a370a859a9cda73ea36fa8a4a9d7a60da3a4a8eea9c6a609a4b6a8d7a97da720a4d1a8cfa970a7caa384a885a99ca62ea341a83aa92ca6d7a215a8fda8a0a595a20ca8eaa86aa56ca2fea7d7a829a51fa291a787a8bfa4c6a107a751a84aa496a1c8a638a8e3a377a1b1a627a897a370a199a61ca821a33ba168a6faa7c1a223a118a691a722a204a1aba514a740a1c7a042a59ca6a4a0bfa0eda432a626a07ca0c0a406a6b49f44a0aaa4dca5489fbc9f60a470a5939e249f0fa41ba5ed9d969eaea3d7a49c9dfc9d3aa399a4209d6d9dbba24fa4ae9c219d39a206a4549cbe9cb7a154a3f29b8d9c6ba102a3619b989c5aa1f7a20f9b7a9c31a1e8a2b29a569c0ea1e3a2139a119cc9a096a2d199199c30a050a1f098c79cef9f2ca1859700807a8b1d8abb8e8624f4297a2b83ac01260e2ce62c0bafc224a92a022c6cafa6234e297f2ae0afe3211228f62818b0361f2525572631b09e17851ee4203cb0059a07a011a03cb0959f0ba5bba53ab0caa14aa73ba817b096a21fa8d0a8a3ae01a35ba823a965ac3fa378a86fa9f6ac6ba3ada8a3a993acbda3dea8cfa94dacefa302a9f9a99bab4aa443a92caaebaabda329a97baa4baaf4a307a9f7a98ea985a3c6a8d9a9f8a8a4a3a1a874a972a8a5a36fa876a915a837a387a899a9dfa755a3b2a8e5a990a772a39ba8c1a974a77fa377a874a9fba667a365a867a981a600a339a82ea926a6baa21ba80fa9cba59aa2f6a7e8a888a57ea2efa7d1a863a59aa2c0a7cfa82fa571a294a7aba8eea44ca26fa791a8a4a408a234a773a83aa405a2e8a654a8bba3d5a1afa62ca84ca35da13ea6d8a795a232a1f6a56ca723a2dea095a5f6a68da19fa037a580a601a155a0e5a42fa67aa0cb9f9ca4d7a511a04e9f61a4a4a55f9fef9e2ea47da5989e6b9effa352a53e9e129e8ea3fca4bc9dad9dd1a281a43b9d099d37a228a4b09ce59ccea195a3409cd49cb7a146a3239cca9cb4a131a3029cb09cb1a11aa36d9b729c60a1cca2a09a509cf3a073a2bb990c9c93a023a228998e9b48a0efa167980a9c82a004a248980000f41de51f6195b024702a6e2b3eac71256b2b8f2ca2ae5a24312a7d2b12af0a230129272a6daf512192279e2887af691eb8243a269baf66184d1f7b20d7af6899049e719fbaaf719e99a43fa5b5af80a049a663a759af13a237a827a9edae0aa3c2a88ba98cadcea28da88ca944abbea3d2a8f7a959aa45a3bda87aa9c2a947a3c7a8a2a954a931a3f9a8ffa9b5a899a3eba8eea92ca86ea3f4a8fba994a79ca3aea8b6a9fea6dca271a88ca958a6d1a25da84fa9baa59aa24ca86da9cfa508a358a870a97fa67fa37ba87da9aaa6a2a362a88aa9d1a611a351a859a9e4a61fa340a862a990a63da33ca849a933a642a326a830a9e5a542a309a8f3a88fa55aa3c3a7c4a81ea5d0a24ba775a87aa471a202a75da830a409a2d1a64ea8eea37ca1a9a626a84aa31fa151a6dba796a2eba00da686a729a2c7a000a642a7c2a1a6a0cda51da780a152a071a5bca60aa115a013a560a65da04d9f9ba4f7a5a39fc99e44a497a58d9e439ec0a312a5a99df79d3da3c6a4fb9ce69d47a3cca4f49c049e27a39fa4b89cfc9dd2a25fa4809cf59d74a21ba44d9cc39d0ea2a9a32a9c459da4a144a39a9bb09c5aa1e8a24a9b439c22a1a4a28d9aec9b01a191a2cc990b9c09a17ba2d599af9beca034a2d4991e9c08a168a2419a000022217122729649245b2a9a2b65ace824da2a572c62ae1224da29322b9caecb22de28fc29edaef12026275f2809af121e82248b2530af0d191b2008214dafa494a197b5985aaf1c9dbfa223a444af3da023a63ba7cfaee1a150a8fca88caed2a2aca8a5a9c9add2a260a842a9a3ac32a209a895a8a7a975a20ca8eca8cfa84da240a8f7a840a8bda25aa830a9fda65ca240a823a9e3a56ba35aa8fda820a5f8a242a83ca989a49fa260a879a9d6a4d8a27aa894a9e0a51da38aa880a9eca60ca38aa89ea9b8a74fa374a868a94da73aa34ea840a916a70fa343a82ba9c6a6e6a227a80ca97ea6b6a20fa8f3a824a68aa2f3a7d7a8d2a539a280a79da886a53fa23da774a818a5f2a101a74fa8c9a497a1a2a626a841a482a1a9a636a8eda379a1b1a62aa866a342a177a605a8d1a202a127a69aa730a2d1a0f6a557a7b9a197a0c2a52ea754a163a094a5e8a60ca119a02fa583a687a0969fbca4ffa5f79f4b9f59a489a50d9f479f1ba438a57a9e559fd9a301a5219e1f9f58a3cba46b9d869ef2a2a0a4ed9cf69d9da283a48c9c559d3aa25ca4279cd49cd4a10ea49a9ba49c97a16ba30e9b6c9c51a1f0a28d9a269cfba050a2469acd9bc5a01aa2dc99bd9bc0a0dda1d699029ba0a0c5a1db984f9b2da0b0a1bb980000791dd41e20976c234329512ab8ab61245f2a062cdead12233a29942a13aed0211d2833294fae4c200726642758aef01d20241b2570ae6019631f91206eaee790bb968d9158ae2d9b4da1d6a12dae0d9e8ba451a5bfad72a06aa643a77ead6fa171a773a82dad8ba1b5a799a8d6acfca1afa79aa812aca1a1c5a670a7b9a917a1c8a6fba746a759a1dca618a89da68ba13ca75ca841a6c9a186a7baa855a6fba1f8a7f2a8d8a693a24aa837a9c0a778a275a89ba913a8e1a290a8a6a905a8e0a242a832a95ba77ea212a803a9e7a653a2f1a7dda8c1a659a2efa7dca8a6a640a2bca7cca880a631a2aaa7aba85ba661a2a3a799a806a63ba25ba78da89ea5e7a1e7a643a8eea47ba190a602a864a45da194a608a838a44ca1a7a61ea8eaa34fa161a6eea724a323a101a67fa78fa2efa0b3a557a703a2aba082a50aa79ba183a054a5e8a62ca15ea048a5c5a6c8a02fa00aa568a682a0f69fc0a413a619a05c9f52a48ba5469f869edfa30da5369e0c9e3aa3cfa48c9de09d0ba3aea4339dd79dcda27aa4e09cc29dafa25ba4a59cd49d7fa23da4849ca89d34a220a4509cc69dd7a1d6a3f59b309d78a198a3739bbb9c3da11fa3fc9a139cf5a0c1a2779a309c02a1f6a2889ab69b18a10ba3329a3c9c2ca038a1d4960080f799f19b538eb722ad28652960ab6123ad29c62a10ad1c22a428cf297aad2221c727c128c5ad47201a267827e0ad6e1db023b52411aef718e01d3f1f0baea3905999e597fbada8996fa0dda0a3ada69c58a3eea349adfb9ee3a413a6fbac94a031a65ea796ac12a1dca61ba83eac93a15ba76ca8e5abaca175a77da847abcda1b7a785a881aae7a1c6a797a8eaa9eda101a8c7a86fa925a210a8faa803a92fa223a810a9a3a847a217a8f2a82fa844a216a8f6a8d0a724a2f8a7e1a8a1a70fa209a801a967a707a2f0a7eaa84ca712a2eba7cda826a7e2a186a79ea8aaa609a28ba79ba893a611a27ea7a6a84ca649a2dea7dba84fa66da2fda70ba922a6cea264a795a84fa546a2c4a638a8a7a4caa196a620a859a454a15aa6e7a79fa316a12ca6c7a711a3e6a0f8a593a785a2a3a098a51ca7d4a147a05ba5b9a663a121a02ca56ca6f6a019a0e8a421a68aa0ec9fb0a4d8a523a0b59f86a4b0a5b29f709f4ba47ba50a9fda9efea309a54f9e629e3da394a48e9d129ef7a27ea4329de19dcaa25da4de9c6c9d7fa226a4849c539d16a2d6a31a9c4c9dd9a191a3a19b889db3a14fa36f9b7c9d8ea10ba3029b139d3da1bea2c19aaa9c06a175a2549a2d9cbea001a21c9a349b5ea07da14699c99a399ea49f719500807492c8931193102215281a29ceaae2223429542a96ac042273289229fcac7220cf26572838ad291f482589265eadb21cee22512486ad4718461ed61fa4ad6489d1954e978cad229918a08da054adb09cfba218a425ad349e24a5e1a5efacf19fd2a5faa6aaac5aa065a68ea746acfda0d5a60ca806ac65a136a72da862ab9fa15ba769a8d9aa04a286a782a875aa07a2a3a7b0a808aa14a2e3a7afa890a9f0a1cba7bea825a9dca1a3a7a9a8cfa8baa1afa794a881a894a183a7a1a84ca8aca157a76ea81aa89fa124a756a8cca7d6a110a754a85fa709a22fa76da80aa736a233a783a8a9a618a23ea78ca85ca6e5a12ca775a81ba66da1f7a64fa8daa55ea1f9a660a866a54ea1fda664a8efa422a191a62aa86ca4d8a006a6a4a70ea4d9a0c5a531a76aa3d3a09ba502a7b3a2ada048a5aba6c4a13fa0fea448a615a10ea0d4a41aa6b0a0c39fcaa40fa646a0929faba4e3a5a79f449f77a4b7a50d9fe89e33a47ca5739e929ec5a313a5cc9d5f9e23a3c1a42b9d409e86a249a44d9cd69d0da2eca3099c5b9ddda190a3d19b3b9db3a14aa3af9bc49c6fa1fba2549b719cf0a080a2829a1d9cb4a053a2349a049c88a023a2d699b79b7aa009a25d99ef9b6fa0daa15f991f9b56a0d3a17399409c01a060a1ce950080a9950a9736027f211128ea2855aa4622ef28e8293faca02118282b299aac20206426e527d9ac3e1eab24c225f7ac4c1b6c21b22204ad051446184819f1aca591949bb29cd1ac46986aa079a1b4acb59be7a24ba486acb19dc1a4eda569ac009f79a58ea652ac329f91a5aaa61faca49fdba5d1a601ac2da0f9a540a7b9ab5da046a6a8a778abd2a0cda603a817ab26a1e9a624a883aa3fa10ba732a818aa3aa108a734a892a924a1f2a62fa822a90fa1daa61fa8b8a815a1c4a628a89fa85ba1dfa638a871a848a1f4a648a85ba869a10ea756a835a8b6a158a78ba828a815a2fea7f8a812a812a217a81ca99fa7caa1dda7d1a818a79da170a79ca862a684a11ba76ca8e9a55ea1eea669a84fa520a1aca631a8cea4aea0f3a56ea702a459a05ca5bca6d5a2b2a08aa5eaa657a2a8a083a5cfa6ada139a039a58aa6e4a0e49feba436a654a07f9fa8a4e2a50da0399f63a4a1a5a39ffe9e20a468a5fd9edb9e9aa3e2a4339e689e15a37fa4669d0c9ecba26ba4079de69d9aa25fa4be9c969d7ca22fa4779c539d08a2bba3059cca9c83a126a31b9b759cffa070a2849a479cc7a01fa2059a419caea0eea1f799e79b89a0d0a19399779b5da09fa14a99d89a1ba04fa108996e99609fbea08f98739aeb9e83a05c960080578f838f578fb120f7266d286ea960213328332985ab472098262c28b9abb21e482554260eac3d1dc523d0243dace0190420742147ac2f139614b11552ac4a932c9c2b9d32ac65984aa05da1f9ab2c9bbca2faa399aba59c2ca411a53cab949d9da44da5bfaa529e8fa436a553aa3d9f78a45ca544aa529fb9a482a5b3aa949feba4e6a5b4ab8b9f42a554a6e2ab20a0c0a59fa601ac80a020a687a7afab04a1eaa60da87bab30a1fea64ca8eeaa27a16fa7b2a850aa8da195a7b1a80eaab7a192a7c6a8cfa9a1a153a799a8aba9e9a1a0a79fa848a91ea20fa818a9cca837a22ca83da92ca8bca1dea7e8a83ba77ca146a79ea82aa66aa1eda64aa898a531a174a608a81ea5daa0b2a56ba795a467a033a59ca6b5a3fa9f23a564a684a205a007a55da6c2a1e89ff2a454a658a106a0dda461a6f4a0ff9f9fa405a643a0979f35a44ea5619f319f01a40da5c19ecf9ecaa3eca4529e549e56a390a4f49de89db0a233a4379d889d75a21ba4099d879d7fa234a4dd9c849d58a229a49b9c489d08a20ea43f9c229dbba1dba38e9b0d9d7ba19ca3fa9acd9c38a14ca3589a739cd4a0dda2b8994d9caaa06fa24299119c8ba035a26299fb9b83a0f4a13399029c68a0c7a1e198769b3aa054a12798a09bad9e46a0e59700807e838d03189b601c6f236824a6a6f31f36260228cfa98c1fef256d27b5aa1f1ed124ed2524ab5c1c9f221b2442ab5519511f842088ab4c144d147018a8abe190f39bf09cb9ab02990da1eca12fabd99baaa397a4c5aa989d00a524a645aadc9eaca522a7b6a9d79f1fa664a78aa9e69ffda541a737a9719fbaa518a7d8a8439eada557a6fea8e19d5ba5ada6f7a8a09faea562a7b9a934a0e0a546a7b1aae7a04da6dca7aeabdba1aca649a8e6ab91a18aa7c3a819acd7a198a7c1a838abafa1b0a7a6a880aabba173a7afa886a94ba1e1a652a8b1a86ea0a8a670a820a7f0a089a60aa81ca6d4a063a642a87fa524a18ca615a831a5eba0d4a520a72da43ca044a5bba6fea2e09ffda424a62da2ac9f9fa4baa566a14e9f81a493a5d3a0439f60a4a7a584a0179f47a488a541a0f59e1ca43da5919faa9ed3a307a5ed9e969e97a3e8a4a29ee69e93a3c7a45d9ed99e73a3b3a4d69d639e2ba393a4639d2a9eeba26da4fb9cf39db7a24ea4a19cc49d85a23ea4729c8d9d57a234a4229c349d1fa21aa4e59b0a9dcba1dfa34d9bed9c81a18da3b19ade9c38a116a3589aca9c0ca1b6a2239ad29cd7a08fa2f3998a9cb4a08ea2c799659c90a086a276990d9c82a05ba23399b69a2aa0f9a1e998309ba89f27a1279700809c8cb68d67920e20ef253a2734a84920d6266a2803aaee1ea6254f2768aa501d65248e2583aa0b1c0322f423b4aae318e21e5420c3aacb1398162718b8aa238dca995d9b79aa01988ba0f7a03aaa429b17a323a4d9a9719c32a406a53aa93a9dbca4e3a5c5a8b39da2a4dca546a8789d8fa47ea5aea7049e57a446a5a7a6689e15a4e3a491a5dc9df8a222a464a4c59ce9a1d1a2aea2b29a97a069a115a1269a5da060a17ba0239ce6a0bea1a9a0869cfca18ea36fa1609ec4a39fa499a2b79e63a4daa500a37ea04fa507a6e3a3a79fc2a45fa697a2e89fc4a4e5a57ca2299d7fa360a5f1a094a082a4efa5dba1c39f43a4a8a536a149a0d7a4bca5ada11da0c2a4c7a594a1f19f91a495a509a113a075a49ca5baa0bd9f64a491a56ca0fe9f4ea473a52ba0c89f10a420a58e9fc69fdba3ffa4d29e889fb6a3c1a4889e5d9f7ea3b4a4169ecc9e4ea3a5a4af9d559e1ba382a4779d0d9edca250a4379dd29d99a224a4ce9c829d27a2c9a37b9c2c9dcda165a32d9ce69c7da1f9a2a69bda9c53a1caa26c9bae9c29a18fa2f59aa19c12a15ba2c39a779cd4a02ca2389a589caaa01ba2cd993b9c7aa0fda19099199c4da0b7a12799ef9b1aa0a5a19898f79bfb9f3fa156981e9c2a9fb3a03497fb9a8e9e37a00096008050892e854594151f6e25a3264da77a1f1d268d2737a9a41e34259d26b1a9cb1ca223e024a6a9251b6721a423fba94418e21d852000aa4a136913cb17fca9e38caf9a389ccfa9be96ed9ffda065a94899aca11da3cea8439b21a379a44fa86e9ceea3f0a4a0a7e59c10a408a5d0a6e29cf1a3d3a4e0a5719c65a35ea4d9a4f89b4ea29ea39ea3279ad5a0eba196a1ab99ad9f79a021a08a98969e799fbf9e0c97b19d479e8d9d02969b9c5d9d639cfe95569c409de09bdf95cc9cfc9d0f9c20990d9e139fed9cd899cc9fd9a0f29d089b90a0c0a1d39e919caba10ca301a0669d68a2d6a37ba0c39db4a21ca47da0dd9dc0a245a44ca0f79defa25ea408a03f9e1aa36ea401a0639ef2a268a4b89fb69e16a36ca4729fdd9e39a382a4609fc99e30a391a40a9f8d9e40a398a4b79e609e3ba396a4869e389e3ea39ba42e9e2e9e1ea394a4bf9d319ef7a279a4639d319ec5a264a42b9d289e96a244a4cf9c079e6fa223a47e9ce19d6aa21fa4609ca49d48a203a43c9c359df2a1bca3029cc49c5fa150a3549b9e9cfca0d9a2cd9a939cdda090a2569a979cada071a2189a529c74a017a26499079c5aa0c6a145996e9b26a06ba10699199bda9f13a1a1982d9b709fcaa06f985d9a599fb0a0a597859de39d399e519500004918b9180794c71e1d2535261da70a1ee324fc2559a84b1d3624442591a8cd1b6a220e24e1a8b0196120e0211fa90617431c161e26a92a11cb12461421a9ec85c897e798e6a8fd93199d679e76a86697df9f46a1efa7c699dfa154a320a72b9bb7a229a454a6299b42a2b9a33fa53b9be9a1fca249a4af9a82a169a246a3069acfa0e8a118a2789926a003a102a15f991d9f5ba047a01e997c9e2da0c49f72987e9e39a01a9f6b99b29e43a0ff9eb299579f1ea1089f5d9b1ca0d3a01a9f0a9db29fdda0489eac9be89f2da1cf9dcb9a949feea0359d0e9a979fbba0f39c529a5ea042a1b29d5e9c3ea152a2b99ee39c22a2c1a3bb9f259d72a231a4c79f9e9d52a2d5a3819f7a9d3ca291a3489fcc9d3ea2daa3df9e169e63a204a4b89e359e63a21ca4579e209e3da2fda3ee9df49d33a2d5a3cf9d1e9e3ea2e5a36c9d519e4ca208a4289d379e3ba2cfa3f89c149e12a292a3b79ce89de0a17aa35c9cc39dbca15ba3279c679d85a12aa3a09b0a9d4ca129a3fa9ac29c1aa103a3a49a8a9ce3a0eba25d9a729ccca0caa22b9a4d9ca4a083a2f999439c6fa045a2a3992f9c54a003a28199099c3ea0c8a12499cb9b37a0a5a10c99949b1da08ba1ee98569beb9f62a19e98929a989f0da13498a39aac9e44a007980000071f9120bb9e42245728de281caa7f249928a22984acc42296278728ecac1821d725d8262eadf91e2e233c244cadee190b1f22207cad6f91950f80107bad4a9c3c9e659f8bad0b9f10a27da35dad42a121a5f1a5a6ad97a00ea62ea8fcacbda081a606a86cace19dd6a5d0a775acf39974a61ea87cab12a403a8bfa8b4a81da2f5a489a583a4e69a929ce59bf49de5142f17bc1a1a9643255c290e2bcba42c26c829db2982ac481a23a87faa5aa8b824459fc8a35caab926bb1e589830ad0825be1c8a9a9eac7422e8105f9e41acb51b759feca2a6aaa29e1fa400a56ba760a0a8a4c6a512a446a0eaa4f2a5d2a126a06ba511a680a21da1f4a5f2a6a0a322a072a6d4a739a4c1a0d0a645a8caa4ef9fa3a5bfa66ba35c9d40a433a535a1c79de0a30ca53da0ca9d90a3d9a46a9f0c9e62a3a0a40d9fda9d32a380a4ca9e129e0da36ca4659e189ed0a246a4f09d049e90a236a4b79dc99d56a21ca44d9d609df7a1e5a3fd9cf59c9ea16aa3829c789c46a1e7a20f9c189cf5a069a2a19bed9bc2a029a2df9a919b9ca0efa1709a4b9b7da0c6a10f9ac99a66a0aea1a999929a32a077a11099309a10a04ea1a898449aba9ffba04c98f999819fb4a0fe97ce994c9f76a0c6976999d59e3ba0df96599aab9e4da0d7950000b617df18a396f9232528dc28afabfb2460295c2a77ad5a24bb289f29f6adcb228b27542863aebf205725b826acae6d1d9d23e424dfae2112821f91200aafca9a4a97e41154af269f33a042a0b6af22a178a472a467af35a3b9a77ca8c7ae2ba4eaa8e0a97fade8a405a909aa6aaceca1f0a53fa73da88c939c940a987f193d9237950597731a1e0eb518b0191e1755187121c12266199a1f38276f28f01e461d6c2465251f23619910a5e8a6ad22c0994da62ca8059c2224369c4da3d7aab1245f9188a1e9acb71ea4a0f7a3fdab929e53a588a6eca94da24ea66ca7e9a6cba166a6faa71ea496a1c8a5cba6d6a14aa1a8a57ea60ba2d2a079a574a66ea2d6a0b0a5e0a665a2b5a0d8a50fa703a3bca0fea569a78ca35fa0c2a545a7c2a209a020a598a676a1639fa2a4aca57fa05c9f68a46fa5f09ffe9e3ea449a5719f959e08a404a5139f2d9e97a3b7a4bd9ec89d35a38ca4669e699deba25da4e89d0d9d89a225a46d9de19c4aa201a4049dbd9cf5a18ba39d9ca99cbea13aa3449c819c89a1f4a2e19b439c3fa197a23c9b169cf7a038a2ec9acf9bbaa0e5a1729aa79b8ba0a7a1d899459b78a094a17a992b9b4ca068a12199b99a2da038a1c9985d9abb9fbea04d981b99749ebf9f6697909a9a9fd7a0e29800000914ac16c893e1219e263d28b4a90a25fa29392b24aef92483297f2acdaef4238e286a291faf97219f26eb2752af501e5b24392579afd717b020aa21c6af0c983d11b318fbaf9e9e50a03ca1c1af73a125a5daa56eaf98a3faa75fa849af71a32da8b1a882ad1099809e429f5d9a60918d958b965e1a6f810d10ad12cd1a4e0c9215be17031a37140d1ce81cd41ae717bf1fca20071c221bbe21de225c1dd5193f20b720c01e6309fa9afd9cbe1e3c95f9a080a2b11c208752a02fa22b9bb91d999f18a326a860936ea408a607a95ca143a77fa87ba8b8a2eaa7d3a8fea6f7a2a6a779a885a570a2cca610a8a2a468a289a6b7a74da4e4a14ea65ea72fa455a1c3a5f6a6c8a3b3a067a55ea689a34ba039a522a670a34da04fa56aa600a345a064a5afa63fa207a022a531a69ba1d09fb9a4c3a5a4a05d9f56a457a502a0db9e11a40fa50d9f539ecaa3c6a4529e1a9e73a3a7a40c9ebb9d08a36ba48b9d789da7a223a43f9d219d4ca2d8a3d29cef9c02a26fa38c9cbe9ca9a114a3289c9d9c5ba1c8a2dd9b7f9c34a195a22c9b639c01a141a2c09a219cf0a019a25c9a089ce5a02da2159a0d9cffa051a2fc99019cf5a04da2b699a79bb4a042a24499159b66a01ca2fc98a6998e9f33a18f980e99a29d779f559600007d8256065b8c6e229c27902848aac625c72a132cbeae4325c229182b09af2a24c128bb29c1af85226127a62814b0fe1ee62455263eb0471821213e2236b08e999891c81243b0139f8ba2f0a248b0fda1d9a5cca6e5afa2a2eca785a88aae199e7ba293a394a34794b696a09808138a87c003b3047514128b9a8c108bd514ec12561bcd1c87186e16331ec01fee197a16c11d5a1f791b5a18a71d6c1e511bfc16fb1b0c1cfb1b6411718ebd92c91b5d8d369ccf9d611a1e92619d8b9f8b18e591729e53a028953099c6a24fa4eca35ca174a6b5a774a6c8a21fa746a875a603a45ba81fa92fa6bfa309a8c1a8e9a562a3cda78ca88aa5a5a28da761a833a50fa2e1a62ea889a4c3a188a6e4a747a46fa161a6cea701a4d4a02ca66aa79aa3d5a053a6b6a74fa3cfa025a673a78ca246a037a596a62fa1ac9fbaa4e7a589a0239f8ba499a526a01d9f59a46aa5da9f0f9f2fa431a5489fb39ee9a3efa4a19e459e5ea399a4039ebf9ddfa250a4739d6c9d83a21ea42a9d279d37a2f2a3ca9ceb9ce8a188a36c9c809c81a108a3fe9b409c49a1c1a2719b3a9c2ba190a2209b199cf7a04fa29f9a8c9bcea014a2f599759bc1a009a263996e9bcaa004a22599379ba6a0e4a135999d9a40a074a179984a9a35a047a16e980000660342085d8bd1220628d92826abd625eb2a272c41af7325062a602b83af3724d128bb291ab00b22562766283fb0441fbb241d265bb0b71959217a2258b08d98d891119368b01ea007a329a46ab0d6a297a6b3a72ab0d1a06ea521a6e1ad850493166d162f94d611ab18c31a6511f40e5818081ab80b4611f718231adf10d410e419651ac3141f13e31c571e9614c415c81d211f6c153e16101d2c1ef818aa124117a618771bbb099c941698ea1aec8c469a3e9cdf199391469c829d5317ef93549d1e9f2e100b98fc9ed7a0ac9eb19ec3a214a474a41fa29da618a81ca6e4a330a80aa912a6b3a31da8e8a8c1a54aa3f3a7c8a865a519a3c6a7a1a847a53fa220a73fa8cda46ba15aa698a760a41fa10fa64aa7fea3bea022a662a775a3e1a030a686a7c2a29ca072a58ca6bea1a4a014a55da64ba138a027a54ea601a1b29fe2a406a692a08c9f9aa4c3a527a00e9f4ca461a57a9fbb9ee1a3fba4ad9e6b9e33a3aca41a9e329eeaa25da4dc9dc39d90a228a46a9d3a9d59a210a4099db69c02a2baa3a29c599cbda14ea34c9c399c87a105a3049c279c6ea1dfa2a59b279c4da1a2a2fd9ac39b08a158a27b9a5d9b9ea0e5a1a999229b56a07ca1c598e99a2ea042a19898189a809fc7a03998259b48a0d8a1fb9900008f03970556899d222528172901ab1426692b6a2c4bafaa253d2ac82b9faf852425292b2a32b01f22c227aa2855b0dd1f1125342664b05018cf1f91216ab0179b0d9d579c65b09e9e05a25da267b0da9db4a107a3b8aee110571b5a1c659dbf13371bd11c0a12eb103d18901a220c8c1097192d1cd210e1102019881a1d12990e5819cc199414390f3a1aab1be0152711b81a3f1cdb16391008194f1a0317c90edc14d814ce164e08de8e7e92d7156e8a649712991213cb8f5999bb9aad0fdd8fea99e99b800df3935c9d739f8696f69cd6a1c1a25ba259a2d6a683a7dea5b1a334a81aa94aa6d2a338a813a9e4a5b7a333a8faa894a5b2a33ba8eca85ba562a317a8d2a8d2a4aea2b9a794a898a4b7a1d9a639a8f0a329a134a6b0a703a34fa135a600a815a32da104a671a78ea2fba096a5dfa6e3a1b6a059a5dba651a154a0f4a487a6a3a010a0caa419a662a0a59f9ca4c9a511a0229f3da447a54c9fb39edea3d1a4859e2a9e46a377a4079ec89df4a259a4c39d739d99a226a4629d239d5aa202a42e9df19c06a2a0a3a49cef9ccfa136a3389ccb9c76a1e5a2c79b9c9c27a17da2f39a569cdba027a2549ab99b87a0c9a19d99ea9a58a08aa1c798ab9a46a037a1b2987a9ae69f03a1da97879c02a1b3a2189900007208500ae48c09229127a02828ab2526a82b942c89aff625c32a332ce4af88248029992a4db06e222a28032968b049209325d02679b09b19b720b4216bb03c9c959e379e5eb0b6a076a467a55ab0f79f1ca349a4eaaeae189020c221d898d515e41df51f4214c313061a0a1c120982118a180b1a6103fb0fb118521a9710d80e9c199d1aec0fff0ecc19c71b1a1241106319a01a56122a0d141805191c131d0cce148f14f3113902b18cca8e2911c885a7951598550eeb8c55989899710c428e2199399b1a10f993a09bc09c1a92939baea0e0a1f0a13aa0dda4f5a57aa5f6a193a6ffa7b0a584a2afa79ea8aaa53da311a8e1a8e9a56fa341a821a993a5bca2daa7c4a813a5efa10aa72da895a485a175a6b9a703a456a186a6d7a771a36ca18ca607a8e5a247a105a63da720a20da19aa5d0a681a1b5a065a594a62da15fa03aa56da6d6a01fa016a540a68aa0d29fa5a4f4a50aa0949f3ea479a5089f709feca315a5649e4b9fcea3d7a40f9eaf9e8aa3afa4c99d059e30a387a44e9d919deea25ba4ea9c659da5a236a4c39c399d55a208a4739ccf9cf3a1c0a33a9c9c9c9da153a3d19b1a9c26a1d1a2ca9aa69ba9a00fa2dc99609b68a09aa1fe98069b44a044a1d5980f9b04a0e2a0e898a59a8b9f66a1239c00005108c40b7a8e202365281d29cfabf025ca2b952c00b06d25812ae82bddaf7a244d29632a53b05822fa27d22869b040203c25e22672b09119c620c7217ab02a9b2d9d879c76b0079f9fa32da478b0489f99a24aa42fafc214141c741d3096cc15441c281e90160314d3184c1ae90c79111319531b920fc311f919d71be0112611e1195b1a6210b40c1e182319d8107a0af61595178f0fd50b0d15c015ec113d0774119f134b126903cf889a8a3511bb835b9236953c0d8d8a5a952297370e518d009873996d108b90ea98959ace90db995a9fc5a0aea174a007a54ba6cda574a248a769a88fa679a316a8fda893a670a31da8eaa837a646a3d8a7d6a88aa512a38aa78ea814a552a222a74ba8ada4a1a1d1a613a82ea43da1b1a6fea7d4a33ca1a7a602a82da3eaa02fa68ba772a2a8a0b8a515a7c0a177a04ea588a626a131a0ffa423a6ada0ee9fdca4ffa563a0d29f98a4cea519a0c09f58a489a5799fa89f48a46fa5189f829f29a438a5a39e1c9feba3e9a43f9e859e3ca38fa48d9de79da7a22aa4f69c889d0ea2a6a36f9c4d9daca115a3279c3e9d64a1b3a2fb9bfb9c17a16ca2649b509cd8a019a2d19a8a9b8ca0c2a1449a979a63a07ba1b799189b85a0a3a1e499599c4ea180a2cf99ba99849efd9f109600005581cc01a988a22246282a294aabd325b02b972c69af6925742a002c88af5a245c29732a31b00d221628ba2853b0981f2925592662b05819e91fc82056b08999029d239e5cb0b99f66a37da46db08a9e69a201a3e8ae4e1b67217c2257960416741dea1f66112f148e1a9b1c790a4a11f618a51a070c89114718e119db0b210dd816ea173306330d16165f17930b590c641548173f0d220a461487156211d505741086107410d2021a889a8c2011a0869a92109516102f895c959196bc0e2e8ab1954d97d30df18d7596ce97f7904d97e49caa9d6ca0e89eb9a30ca5c0a444a2b6a640a80ba68ea328a808a938a664a302a8eba800a62ea308a8fea878a5d0a2f7a7d9a839a58ca2b5a7b6a8fda425a24ca778a853a47da1c2a621a8a3a362a195a605a843a30ca10da655a787a2d8a0cca522a7f8a1a0a0c6a527a7aca18ca09ea5fda654a13ba04ea5b1a6dba013a0fca44da666a0c89f92a4bba5c79f2f9f42a435a52a9fbb9e16a412a5a09e739edfa3eca4629e2e9e96a3d4a4269ec49d3ba397a4cc9d669d9ea23ca4399d059d0fa2a0a3b49c989ca4a11aa3419c5d9c4ea1d9a20b9c499c2aa19ca2e09b4a9cf6a070a26e9b1b9cc2a05ea2c59ab49b7da0c7a10d9a149a519f5aa03f99df9b4aa1b8a2d29a0000c883ab816a884f221628dc28a0aa0d25e72a0e2c82aecb24002a4a2b2dafcf23ec28f3291cb08f21b127792841b0321fae24342644b00019a21fa6203bb02899ce9cf29d24b0e89d89a39ba409b02f9dd5a110a37eaede18651f5b2030988a15881c5a1e251534129619b41b530be6134e1a2a1c0112c2108419b21a2612e410ff18c219c311380c7e16551854104c0da81581168b0f0308cc140b16f611cb092411ce10df0c2e04780746095c0c2783018e23902f020483c98f64919408b5838e900d91810b9f8d2396df9667912398da9de09e8ea1c09ef1a3f7a411a585a12ba6c4a7f3a590a2a7a7afa85ea6d2a2f7a7e3a8fda567a32ca811a9cfa5b4a20da8dba89aa505a266a78ea80ca5e6a11da76da8a2a465a112a755a83aa49da1f3a640a8eea34ea10da644a7c1a247a199a5f7a609a2eca099a5daa6e5a181a056a5a0a66ea14ba026a572a600a113a0eda433a69ea0a89f99a4c1a529a0269f31a447a5529f6e9e12a424a5079f4c9e06a414a5b29e569ee6a3f5a4569e159ea6a3cda4229ee79d26a37aa4949d869daca22fa4119d149d34a2daa3b69cad9cd8a17da3309c609c79a127a3b19b5c9c5ea1fca2149b349c42a1c9a27b9a369c1aa197a2e999359ce4a0b0a23d99e69c34a074a1bc9900003b8185014e88b1219f279f2891aa2f254f2b522cf6aeba240b2a6c2b27af6323f228042ae7af78217b27592818b0491fe124042624b0bf18651f5a210eb02b9ac69cd19d1db0cf9d0da347a417b01a9e16a21da4a1ae5815c91c0b1e199b8716661c2a1e59092714411bf91c9c0e4712551a431ce611771156190d1a3e127e0f5f18b1189b11e10b1f140d15cb0da102d40fd0117d0b5904cf0c850da90ad102640579024a0a46002b8a038a2b0add812e904991e705a4855d915e92b781668a269463950809828f0898a79885923f9a269f60a039a11fa016a558a699a52ba233a788a898a64fa32da827a9f3a6f0a212a8f2a892a6e2a200a8d1a8d8a51da270a787a82ea5daa166a783a8eba4cfa120a76fa867a437a1aea60fa88da398a193a6daa769a32ca1faa53ba773a2f9a0b7a50ba717a2eaa09ba5dba6e8a19ca041a59da658a13ba0faa464a6e4a00ea0dba438a68ea08d9f96a406a626a0679f49a465a5909fb89ec4a3d1a49b9e349e3ea3aea4189ed39df1a289a4b19d969dc0a274a4799d8d9d96a253a4329d929d64a230a40b9d5b9d20a2e3a3d69cfc9ca0a140a33e9c8d9c39a1b2a2319b739ce2a045a2839a5c9caea00fa2e699529cb5a0d3a1ee99949b4fa0d1a1d398999a729f4ca3cb960000b083908188893d2122274628aaa9a324e62a172c80ae7024e329402b0aafec22b728c82975af572160275528cfafcf1e9924b825ceaf5f19fe1e4e20abafbb98929c289fcbaf4f9ef4a3d1a4d5af869ffda432a64dae2c988b9d259efaa40611ea177f191185c6123919411bd90af1121919101b4b0894103f175d1819879b0d05164d170c0714097e127214bb0a55094d117613240e3a08c70e2311c70e5b022106520b990c5600758827885a05d582008f7e909a85f983ce910494fa8c0f8cf0944b96e3925293449cd09cbf9c089c5ca153a28fa300a02fa595a6f3a5a4a1b2a60ea893a60da229a74fa873a624a26aa799a8eba5c4a201a8eea8e7a51ba29aa7a8a872a5b3a143a74ea80fa570a1aba60aa86ea4f0a055a6daa7c4a3ffa054a6c4a767a3d6a035a68ba704a3c2a007a670a781a2bca0b8a50ca7e3a19aa03fa5a0a628a19aa0f3a450a6cfa0aaa0d8a429a662a052a0aea406a616a02ca08fa4dba5989f06a043a453a5d69e5b9f03a404a5709eab9e86a3c2a4e09dea9d17a383a4899d5f9d9fa231a4079df89cf4a1c4a3719c889c76a151a31e9c589c58a128a3d39b629c57a11fa3d19b3d9c31a1e2a2619b1e9c16a1d0a2159bd09bf9a0baa2b39a109bf99f1ba16199f29a799e3da0d49600802b836181cf89b12087261a283ba95724a12ae72b1eae4024b829172b9aae6a225a2855291fafc220bc2621285fafbe1eb324db2577af0819f61fee2063afde96519acf9b8baff99c81a231a33dafa89fd8a4c7a5f0ae289d74a392a433ada914301b291ce398d4126619641bed0daf0c99177c19c3875a0eb01664187787750d31167017140b9f088e1222155f0c6006980e5911910c5e018a05a509760a8c80098c678ccb815383358f7490ba8a5b85af9193920f9070880493c79404931390d197ec9862982b97049ee99ff9a0229daaa241a4aaa489a05ca5c2a6b0a5d1a1bfa61fa847a648a249a772a81aa691a269a792a802a682a279a777a897a565a24fa792a835a5dba123a777a8dfa4c5a1f0a651a884a4b5a1e0a644a84ea48ba19fa62da8e9a356a140a6e7a739a3f2a0f0a56ea7b1a2cea0a5a508a727a2a8a051a59aa69aa179a001a543a617a136a0c1a4e8a583a0889f84a49da516a0159f30a46da5209fab9e03a440a5829e3d9eb1a317a53d9ec09d28a3b0a4a69d5d9d81a242a4309def9c00a2c0a3a89cd09cada132a3749cbb9c84a1eea2549cb99c86a1e6a22b9c7d9c54a1aaa2929b489c19a159a2cc9a289ccea02ca2fd991e9c78a00aa26f995199359e3ba2db96579bb89f36a17a98000027132414a18e84205726e32720a9b623e9291f2be0add6233f29bb2a5eae13222d284e29c2ae73206626e227eeae4b1e70248d25fbae891951205a21dfae819419974f9bfdaecb9c29a283a301af4e9fa1a477a559ae81a0efa646a8b4adc09f5da59ba606ac4117011d3b1edc981f16e21c921edc03d113c11a651c7090ed12671ab11b9e90c60e6b18e81902833f0c1f1638183308a408a1110114ed09e4038e09130daa8666001e89fb829b8c6f841b90c491ff91598d4d963e98c596f695099db89eb89f3e9c39a21fa46da44fa04ca5c5a618a680a1c9a616a86aa65ea29da7cca876a665a2cca7d9a84da6b6a2eea7eba8e7a584a2b7a7a5a893a5a0a294a79ca83fa56ba22ba766a8a2a4dda1bda627a826a487a19aa621a8d2a3f7a053a6d2a74fa3cfa002a658a7b6a2b5a0c7a501a729a276a088a5c6a6d3a11ea045a58aa66da1a19ff0a41ca6e8a0489f79a4c4a531a09b9e29a47aa56e9f329ec5a31ba5459e0d9e39a3baa4b39d1e9e38a3b1a46c9d139e21a3bda4359d069ee9a27ba4d99cfc9d7da211a49a9cc19d36a2baa3679c859de1a15ea3569c219d7ba1f1a2f09b829c4aa1b6a26f9b309cffa06fa2aa9ac49bf8a05aa2319a3b9c28a180a26d9ad89b44a18ea2a29a669c63a1e4a2f19a00008a157015e59022204c268d275aa95223d129082bc9ad54233f29b22a02aeb9212328162958ae23202926932789ae821d07245e25a1ae3719391f2a217eae0c917f909791a4ae9f9a37a1bea18dae449e59a419a508ae3ea061a63da799adb2a0d3a638a8e5ac219efea4d9a5c0aae588f0861488a3958f117b150f18ea102d11f0146d18be88790dd4122815588d5d0a1510af11498d2d063f0b3b0fb18d9801d8019702258ce282008e2c8d008eca8d5995d99610971796869dbe9e3ca07d9c4aa241a4eda4fd9f30a597a654a63da16da6cfa7eca6e4a10ea735a88ea64ba262a788a8a3a6d4a149a759a83da6fba101a74aa8b3a590a19ba614a832a5e4a17ba604a8c7a4d2a163a6c0a7aba401a1e6a552a71ca46ea126a6b7a7dba3dba020a6a0a73ba3dfa00da662a798a2b3a0e7a542a738a27ba0afa5f9a6c8a13ba084a5cda65ca1e59f2ba57ea6e7a0669fb8a419a645a0009f64a4b0a5ab9fe99e1aa458a52a9f309ffda31da5b99e499fb6a3e3a46c9e169f34a3a9a4d79d6c9ecea289a4509dd09d6da25da4be9c4d9d00a224a44d9cf09cbba1b5a31b9c959c71a11ca3a69b349c20a1a3a2489bcc9bc0a018a2af9a6b9b94a0cea1509a8a9b9aa0bca1229af29a80a09ea1c898d09a5f9fc9a0339800007011e813438e1c1e11259c26c5a892221329582a29ad5c229228c52984adcc2007277d28c4ad311f46257e26ccad2d1d32237b24ddad9418701f9e20bcadfd890a100b11d6ad2b99779ff69fc1ade79c72a317a460ad7d9f85a501a615ad6ea02ea6fca6a2ac0ba0b5a541a73aac739d3ba457a583aaed95729b109cbea47e8753057f06549419016f839c044b8cb2807e88e8839d918d81af875e835d93e389729275939499d192359a089b6da0429908a0dba06ba45f9e2ba42ca5b4a69da0a6a5f3a63ea7f0a1c1a626a892a703a205a752a8b6a743a248a778a86ba718a254a78fa8cfa6d6a160a778a882a6e5a136a76ca80fa6b5a107a740a8a2a59da1cfa631a818a56fa1b9a60aa8c0a4bca02fa6a7a74fa4c0a069a6d9a726a4c5a011a677a767a3d3a09ba5f3a67aa287a04ba5cea6e9a140a026a5a8a68ea145a014a58aa61ca134a017a55aa6c6a0f19fcca406a673a0499f6fa4a7a5d49fa49e0da415a5e59ef89d40a3a3a42b9e8e9dbda276a46f9d5d9da9a260a4509d5f9d8da23ca4e39c689d5fa21aa4c19c7f9d2fa2fea37a9c869df9a1c3a3549c829db8a16da3249c129d64a112a3949b809c15a1aba2ff9a089cc4a04ba2a39a389ccda07ca2c29ac19a58a091a202997d9ab59e61a0cf980080d39516972396de21fd271029b6aae522d7281f2a80acbd21222834290aad85209f261e283fad051fe424682651ad861c462232246ead3b19221e911f83adc109ae95a99079ad8e98e09f4aa03ead359c12a209a3f9ac689e91a476a5c3ac17a0d0a5fca686ac8ca088a6e3a74fac94a0bda6ffa7ccab48a0eba551a7acaae79e1ca53da688a9a29d58a41aa594a8f19ccca3b1a4fba7e59ccba3aba460a7929d76a498a59aa7079f0da54da6aca7b19fc0a550a7f7a794a05ca6d2a7efa7c7a1c8a6f2a70ca8d3a112a746a809a8eea1e7a641a8b9a78aa1e9a646a82ba7d4a1d6a655a898a685a1eea64da859a6dca13fa79ba834a619a28da7baa8caa502a20ca757a80da55ea157a6bda781a426a142a6b8a753a4ffa01fa686a7d1a309a115a6b5a72da37ba0a5a528a75da23ba036a5a8a68ea1f79f1da53ea643a1ac9fd3a4f9a5cca0909f88a4a2a573a0619f6ea47ea527a03e9f55a46fa5d79fdd9e1da429a52e9f389e64a3bda4209edf9ddaa267a49e9db29d9ea247a4479d6a9d51a22ba4e79c309d11a2dca3869c2b9dc5a173a32e9c2b9d97a13ba3db9b739d8da107a3cd9b689d6ca1e2a29f9b259d3ea1b7a2739bc99c00a15da2f69a609cbea028a2899a269bb3a028a2fa9942996e9ef29f3a970080f2905e91c29640215727ab285aaae62166287d2947ac47217f27b628a5acd71fc3251727d9ac1b1e53245f25eeac001cbf213323faac7318971d132014adf1080c8f641026adaf98829e279fe9ac1e9bc8a1c7a2bdac6b9d4aa4eca486acb89e07a5fba555ac10a06da5aea605ac98a0eca519a79eabd0a037a668a720abeda027a66ca7c4aa11a129a66ea764aac9a026a664a704aab5a021a666a77ba9b6a057a699a75ea993a07ca6d2a70ca9b8a074a600a8d2a8d2a088a6e3a792a8e8a08ba610a84da815a1a7a62aa807a86aa1daa623a8a6a7aea1aba627a82ba7eda17da620a8d7a67fa190a612a821a67ea180a606a8aea51aa180a6d9a782a515a187a626a845a505a18da615a8e7a401a16ea6f3a763a49fa0e0a55fa7dca394a0ada510a740a38aa053a5ada672a28ba01fa55fa6a7a12ca0b9a4eca509a1b69f8ba4c7a5aea0519f7ba4ada567a0499f68a48ca508a0e39e46a475a5159fa39efea340a5459e709e3ea3e6a4859d7c9ed4a2a7a4269d5e9e74a256a4ba9c0d9e0fa2eda34e9c9d9deba194a3139c669da8a158a3df9bde9c5aa1c9a2889b949cdea04aa2a29a3d9cada017a22a9a2f9c79a0e1a1c3990d9c77a0d8a1c1993b9c66a0bfa144993c9b13a0a5a160988a9c35a07aa13c980080018e648f5692232175278a281daab2212f284229adab05217c27932841ac831f6e25e6266baca21db823c62487ac591a9220a9218cacea148119da1a7fac828e7299bb9a7fac0b98469f85a048ac8c9a70a1cba21aace19c00a4cba406ac0a9eb8a4bda5d2abcb9e0da52ca67cab109f39a526a649ab809f5fa546a6f7aa939f47a55fa693aa04a09aa597a644aa81a0c1a5a5a659aafba0d9a52ea7fba9dba0fca520a7daa90ea127a69ea76aa913a175a615a83ea913a1a3a625a8d6a831a1d4a618a8b8a8f5a061a6e7a769a8d3a090a624a818a8d6a0c2a640a8a9a719a1d9a65ea817a7ffa0dfa651a888a628a1dfa64ba81da609a1baa626a89da544a1a5a61aa81ea512a1b9a626a8bda4a4a046a6c5a732a434a061a5c9a626a357a010a581a697a26aa041a58ba625a23da008a53ea64ea1a09fd6a4f9a5b2a0229f8fa4c0a52aa0f19e50a47ea5e09fc99e19a44ba57c9fb99ea2a301a5f89e9f9e0fa385a4369e479eb1a253a4ac9de29d89a248a43e9d969d54a233a4e19c279d14a2dda3809cd39caba125a3129c869c4ca1aba25f9b6d9cf3a04ca2e59a5a9caca0f3a15e9a3c9c90a0c4a1389ad79b5ba096a1cf990c9b30a066a17499cb9a04a03fa15a996a9aea9f22a167991c9ba99f0ea1da9900800c8c21885995ce1fe525562733a9dc2045279e28cfaac91ff925682714ab221e732490256eaba61cb8222a24b6ab93195c1f0121d8ab4e1408176418f5abb48de798d29bd5ab3597539f21a0a1ab0c9aa3a191a24eab279d05a48ca4eeaa369d41a4caa477aa839d4da40fa574aa279e9fa483a512aa219e7aa460a502aa1d9fa9a44ba5e2a98e9eada4daa5d3a9149fcca49ca5e5a9ee9f4ca567a6e9a96c9f70a594a6b9a934a0baa50fa79ba956a00ba626a770a9a0a050a6a4a743a97ea043a603a8d3a865a018a6a1a784a864a01ea6a3a728a88ca08aa618a85da7e9a084a613a8a0a6d5a070a613a8f0a5aba040a6e7a724a5cfa018a699a7d9a4c3a0fca55ea775a459a04ca5b4a6daa319a0f5a430a6dda2859fd3a4f2a512a2c99fdea422a692a1af9fc7a41aa678a1ca9fbfa43aa611a1939f3ca4a0a528a0a99feaa30fa5369f899ff3a3ffa4f99e1d9fe6a3f2a4c59e689e76a39ca4399ece9db8a22ea4649da59d83a217a4399da19d7ca228a4349da59d5da218a4e89c709d13a20ea48c9c4e9dc8a1eda3339c319d91a1b2a3bf9bb89c2ca166a3be9a6b9ceda0f7a2349a3f9cbca066a2f799eb9b83a01ea2c099bd9b6aa0d1a17d99589b44a09aa11c99ef9a0ba027a16598ce9a2b9f8fa0b89800808288cc033b9b0f1e6a246f258fa82f1fff25bb2708aa951e1925962651aa6b1d0f240d258daa371cbb212723b3aafd18a11e8420d4aade1476188919e5aa718dc599a399daaad196459f32a099aae799dea1d4a277aa519cfea313a5eba90a9d9ea4cba54ba99d9e1ca56ba637a9309e3ca512a6cba8239f3fa5cca685a8fc9e5ea5a0a643a872a07da58ea629a8f4a098a5b5a6fca794a0c3a516a715a8919fa4a5e3a606a819a03ba584a677a7dc9f11a5f8a53aa74da084a5faa6f6a694a03da6a6a767a7b6a031a6b8a7bba6a2a0f8a555a7f8a5aca0c5a5d3a637a569a062a54ba6a1a409a027a5a6a639a4fb9f4ba5b3a6ffa30fa027a56ca648a3459fbfa46fa62ea2779f8ba4d0a598a1139f48a45da5fba0e69e23a418a5b5a00e9f3aa465a585a0cc9e20a44aa54ea0c09e04a42fa5e29fb29ecba301a55d9f029fc8a3e6a4139f239fcea3d1a4339fd09e85a3aba47f9e439e17a379a4b99de39db7a248a4349dab9d9da22aa4db9c989d7aa226a4b49c659d42a21aa45b9c1a9dfca1eea32a9cd89cb1a18ea3ab9bac9c65a13ea3469bc09c38a1eca20a9bab9c1ca1b0a2aa9a949cf2a083a2729a579cb7a07ba2019a359c84a061a29c999a9b53a017a26099fc9a21a0a5a171990b9b539fe9a02c980080088c2a885395361f3325222656a84e1f1826d227d6a9751e1525af2601aa301d132458256baad71ba42190234aaa8318631e73205aaa35143c18511950aa1d06d6957b9705aa31947e9df89ed1a90e9988a144a2a3a9729b1da33da422a9809cfca3b3a4bfa8049d00a419a567a8649d2aa432a513a8689d25a4daa45aa7d19d33a4a8a4b1a6129e17a40aa510a6dd9e40a434a5d0a56a9f78a443a587a5389f64a412a5efa4e89e58a420a5b2a4119f94a454a57da420a01ca536a5a7a4809f9ba48aa51ea4c99fa7a48ca5e6a3db9f7ca4d5a577a3289f66a463a5e8a2059f7fa4ada56ca212a0b4a4bba557a202a0b6a4dea52ba211a0c4a4cfa504a202a0c8a4e9a5dfa1bb9f8fa49ca578a1a99f60a476a50fa1eb9e1ca439a578a0f99efaa3f3a41fa0b89e71a3a1a4659fa79e4ba389a4c99e849e2ca37ea4689e829e33a37aa4199e369e02a376a4dc9de79ddaa25aa47f9de19d9ca229a43d9db79d5aa2f0a3fa9c509dfca191a3b09cff9ca6a137a33e9cd79c6ea1d6a2089cb79c47a1aaa2d89b8e9c2da180a2759b769c02a151a2369b509cdda02ba2b49a3c9cb3a006a2449a1a9c91a0f3a1069a079c53a0aea19299d89b2da088a10099c39b09a027a1b598cc9b889fa2a0ed977b9b319fd9a0f19700808785f5012e95a91ee024ef25bea7d91ead25072718a9ec1dce24fc2554a94b1c8322562470a9931ab320212397a94318ef1d99209ea91914d717741a7ea90d06ba97eb9859a930944b9e4c9f2aa95f98a6a0e4a1d0a8f099f3a17fa377a8cd9b05a367a404a84d9c51a388a45fa7c49ce7a3d7a4e0a6bf9ca2a3aaa428a6989c88a385a4a0a5749cf5a225a4cda4759c32a295a30aa4469cbda1d9a2e0a2ba9b96a1c7a23fa2e69b46a165a2a5a1889c58a172a277a13b9cb9a105a3b9a1aa9cd1a12da3d1a19b9cf4a15ca3b3a1519dc7a11da34fa1389d3ea2a3a331a18c9d92a20ca416a1869d9fa206a4cfa0cd9db4a2fea399a0e49d90a202a441a0c79db1a227a409a0019ebca237a400a0319ee3a23da4be9f819e16a377a4be9f7d9e2aa386a49c9f469e34a38ea4409f409e2ca387a4089f539e32a391a4b19e499e19a395a4439e149ee8a27ea4d99d0c9e9da260a46f9d2c9e55a243a4259d059e4ea21da4e89cdb9d4aa217a4a29c739d27a2d9a37b9cec9cbea164a32f9c799c2ea100a38c9b6a9cdca099a2159b659cc9a060a2e59a5a9ca4a02ba2799a219c6ca0eba1f799939b36a094a17d99e99ae99f32a13699d19a999ff0a0e398f49a3a9fbaa07b986d9b7e9fe7a01e985e9cc29e01a0ad9800004819b719d8957e1ef724172689a7dd1d8d24882537a8c21c7823ca2460a8821bb62182239aa86a1907206521c6a812175c1cd31eb7a868132d178918a5a8140c12955f9688a8be90779bae9c53a8cc95909e1da0f6a79e98aba0cba199a79e9a02a274a3dca6139b13a287a306a65e9bf0a13ca312a5449be7a11ba393a47a9bf6a151a335a4769bc0a1bba297a32a9ba5a16ea2caa28f9a2ba15fa215a2ac9acba0d3a162a1c59a93a070a1caa0ae9a38a06ca138a0309b7ea014a11ba0c99bc8a07ca130a02a9c64a172a23da0929c02a230a3a9a0439d8aa2cba3c5a00f9d99a2f2a3bba0269d2da2ada351a0159d0ea2b3a329a0fd9c15a2a4a30aa0709d11a26ca3b89f389ddba12ba3749f6b9de7a165a3469f8d9d1fa2b4a3339fcb9d56a2fba3d69ef89d46a2f3a37f9e219e25a2d7a35c9e739e3aa2fba3029e7c9e3ba200a4ae9d139e17a2a9a33f9def9de4a15ca3f19ca99db2a143a3929c669d76a10ca3549c0b9d42a1eaa2f79be69c1fa1d8a2aa9b8f9cf3a0e2a23c9b5e9ccda0c7a2b49a4a9cb5a0a3a27f9a349c9ba05da25c9a259c7ba030a21d9a1a9c65a00ba2ff99f99b4da0cea1cc99a39b34a09ea16b99649b18a086a14699379bdd9f49a1e3987e9a9e9feda038981c9b8a9e04a0d19600008b19301be6948121ca25432699a91d234f27b02854acfd213c26112887ac9d2009254826ceac781d19224b2312ad37197b1d8f1f23ada195b68efe951cad319bec9e469fe9ac249f7da2e0a3b2ac41a099a453a5b9acbca03da53aa6aeacd4a1d6a5c0a670ac93a287a6cea7abac82a4bda89aa96caa30a30fa61ba7cba68fa1fea4e9a530a5e59ac1a116a27c9fa48f8c96e094859900002f19211f7e960c24e02ccb2d2faa811a8aa531a853a9d01850a441a63fa506247c1ae89980a9c4225b1a399812aa0f1eae8d529da9a8078a029e8ba034a6709dd5a3eda488a53ca0dea50aa736a47da10ba6d6a6d6a3b5a010a737a886a4b7a145a727a852a59b9f70a5c6a610a4a99b05a4a6a50ca2149c3ea3eba4ffa08f9dbaa3bba4a8a0e09d68a3b7a423a0749d41a391a4669fa09d51a389a42d9f829d20a377a4a39ea79d02a368a4479e8f9d96a252a4bc9db89d6ea236a4889d879d32a207a4559d259dcba1b5a3d89cb29c6da128a37c9c329c0aa1b3a20b9cbd9bd3a04aa2a69b9d9bb0a004a2359b529b93a0e0a19b9ad59a6ea0ada1309a5a9a4ba090a1ca99649a2fa06fa140994e9a18a050a123994d9adb9f1aa1be98be996b9fb1a04d98ee99269f80a0f4979b98dd9e81a05097e399f19db09f9e9500001311ad1439959c22e926ee2761ab01248b2883292cad2f23872794286dade9205a259426aaaddd1ed923af2409ae241c70218b22f1ad110bb01a0a1c10ae799a5a9cb49941aeea9eb0a12ea246ae3aa0afa2f5a218ae7ca14ea5cba5b0ad7da27fa6d3a72bad39a33ba706a821aca9a122a61da714a8b09ccaa123a3df958496839a5b9c791bb513e41c181e2e19b71a3823a624f3176f1ffb266628a38ba9206528c129439e5b940fa4c1a4361c6a9e12a973aa38207d9c06a69ea7859e7f1b949d85a14ca7b6153e9c489e4da6439d06a2c2a323a52fa006a4a4a43ba3b0a0a9a49aa5d9a2d6a089a5b7a642a3e2a094a56ba6dfa376a059a57fa693a4fca0f4a54ea723a5dea01ba62ea770a45ba06aa5cba697a3c59fffa440a68ea2c29fb4a4e0a56ba15d9f71a465a593a03f9f3da426a503a0c89e12a418a5859f649eb9a3d0a4f59ec79d53a379a4989e6f9dcea240a40a9e239d9ea234a4ce9dc99c5ca20ba46e9db59c1fa2daa32a9d939cd3a162a3a59c7a9c9da127a36d9c599c79a1e8a2059c0e9c36a19ba2a89bdb9b00a156a2339bd29bdea01ca2de9aa29bb6a0f1a1489a609b9fa0d7a1f299419b89a0c4a1c499f09a64a079a17199299aa49fb9a09d983199799d659f3b963e9a589fd5a0dc96c60efb0ad80a7a8f241be41c8a1d95a1e4219a276f2801ad1b246c283f2950ae8422482752285bae77209f251026b3ae7c1da2234a24adae0b17141f4820faae81988090549147af369ed8a02ea160af15a1faa328a5fbae13a25fa662a768aea7a313a8cda85eadb2a088a44ba517a93c977b9c339d129e6d8160175b195f849a01ef15e4163c152f162c1e481f1915bd19da212c230c13531c0824fa24ef12951c8b237924ea8b3616ba8c6a94ba8cd595daa341a5fb91089615a3a7a45699df8831a111a30ca41699cda138a3b1a3939e77a39ea411a45fa0b5a483a560a49ba1e4a5d9a66fa4e0a142a660a7a6a4ffa1e8a5e6a68ca48ba1faa500a798a423a1caa51fa7d9a4a0a0a4a5d8a654a494a07da5eba6efa36ea074a5c5a664a32da041a563a62ea2309f9ea4a4a555a1fc9e3fa452a57aa0bf9ee7a3e6a4939f519e77a3a4a4b99e169e4ea396a42a9e0d9e34a379a4039ebc9dcda244a45d9d439d5fa2efa32b9db39cdfa16da3af9c799c79a1e9a26b9c609c35a1a3a2409c699cf3a055a2879bba9c10a15fa29b9b639ce4a018a2ac9a339ccca01ca2789a909ba5a0f1a1209a909bc7a016a24c9adc9bdea04ba2589a129ba7a02da2b3991a9b90a014a287997f9ba69f6fa0c897be98e89ae49bdb920210390c5e0d63977d141c1737168b9de021ae26192896ac9624eb28dd2997aed522ea27bd28e0aee1201826fc2756af191e41247f2585af8b176b2080219faf7299af90b591deafc99dd1a0e7a030afb3a101a5b1a52faf2fa3a8a781a8afae79a1f7a508a7c8aacc95da99969ae39e3d86540b89111f98da0aa4167c18e4901c14131c851d8c85c616831d6f1e44852618a31fcc20b206241954207c212208f918dc1ee91fab08f314b10f550a2109ee88c09e51a04509ee915da095a196929c94ea9e8ea0c19a4d980ca0f1a034a1379c5ca193a267a3919e45a225a375a4daa035a4f1a47ba438a1a5a5baa69ea47aa10ca640a7d4a40ba253a67ea7cda4c5a15da6e6a7e1a401a111a676a724a4dba0cca556a702a4a5a0f3a55ba7f6a3e2a028a6d2a7d2a364a003a66ba7dda2c79fbaa4c6a5dea0d69e44a45ca53ea0949e42a45aa509a09f9e27a43ea5969fa49efaa31ea5349f6d9e97a3e7a49a9e2c9e30a38ea4069e9a9dbda243a47f9d369d63a210a4119de59c0ea2c6a3ce9ca79cbfa147a34d9c629c63a1dba2149c289c33a18fa2a39bda9bfba059a22c9b299baaa00da2849aa39a6fa0c8a1d799a79a70a0a2a19199ce9a95a0dfa14099a59a84a0daa15399cc9ae59ff2a041988a9b17a006a153997304c6828b81ff8434174c182818e79cec213227282830ada5241429fb29fdae7922b0278d283bafd720e725d22698af871d04247824b2af8317c71fbc20aaaf8a98ba905898f0aff89eaaa17ca290afc6a276a692a779af8da210a73fa8a5adfb9a289f41a05da4b88e498a380ce4990f8c9f907191d494550f9114a3158692e511c718141aa6908816b91c271e0a8d1318ec1d2e1fff8dba160b1d8a1e148fe2140f1ae61bd18fcf119d06738eca919b0c9d98e29a450dda82729a0c9cfd8ce38fc69b639d2f95e992e89c769e6b9e82982e9dea9de9a16e9c93a06fa1fca39f9f25a425a550a4ada1fca53aa7cca4bfa232a760a833a5f9a2b6a792a896a5fda1daa62fa808a528a1faa546a71ca4f5a097a548a7bea3b5a0d3a552a771a3e6a0fca568a7bfa23ea0fda41ba696a142a0b6a4e9a525a121a0d8a419a60ca1e09fc3a403a6bca03d9f8aa4c1a534a0e09e52a455a5b69fc39ec9a3dca4c69ebb9e24a389a4369e889ecea253a4eb9dfd9d8aa218a47b9d1c9d15a2caa3279dab9cd1a154a3cc9c339c85a1eba26e9c079c4fa1b1a2249ce09b26a188a2a69bc19b07a15da23e9b689bcea022a28e9aed9a7ba0cda1fa99d99a38a079a14b995d9af69f0ea1ce98fc9b689f57a02b98ec9a46a075a18f998f01af82b582890004187d193519fb9c93220328d1285cad36259a29a42a94af9e22c127f02839af9420fe25e02690af281e0724c0243fb0a915a01dd11e0bb0eb9a459c2f9d23b028a08aa312a494afb8a1f6a5d2a6e6ae009d47a154a274aa54888e114a14309a580eb51453176795eb123616ad188a956214bd1792198e909a14031b571c308c0f16611bbc1c86836515e61b391d490498130d1a621bb9040a11721573169684df0d4304408c4304150b7390e792f5038d0127954398828a52067a95a7963094688e62965b96749cc494e099f39afea07c9b8c9f51a023a4bc9eb0a2fca322a528a110a50ea610a552a288a6e9a781a5f7a24aa74fa896a50fa3a2a7bba84fa534a20ea757a898a46aa148a616a8aaa3f6a0cba51fa7d6a275a115a6eaa7c6a217a1d2a54ca747a2a7a043a5b9a67ca1afa045a5cba65da114a1e1a4f8a5e8a02aa09ba4d6a55ea0119f56a47ea5f09fbe9e00a435a5249f609e97a3bca4b39efd9d0aa35da40e9e8c9daba231a4969d489d62a20da47e9de79c21a2caa3469dc59cdda175a3c89ccf9c99a12fa33d9cd19c65a1c4a2ec9ba29c18a175a21b9b4c9cb8a00ea2709ad49b78a0bca1f6990d9b4ba085a162997d9a34a03fa13699129a489f99a08896d09b9fa0cfa1059a8581dc82478301040f172719a518d79c0b22312755282fad3625b729dd2abcaf32233a28772958afba204a268a2792af651fbe24422546b0bc15e51d642032b0149cd99e39a04db081a0b7a439a564af53a203a76ba858ae599d8da112a302a75280fd0e02138b94ae10b016d0190b908b13cc17e51947937f141418131a1f075d120a1880197002cf119216f6185682561169163118c602d50f1014dc15a588340e471146130f8cef0c7908dc03fb82aa051c91d992b8086101c393a695a783728103947b967e8f5886f6926893909a298de3925295d4a09397459c6d9d42a3809c87a068a113a4609ff4a3dfa449a40ca158a579a6fea437a2aea617a8e3a55ea2b8a63ba86ba5dea172a6aba77aa4b8a158a6aaa737a407a1f9a54ba7d7a34fa154a6dba71da3c3a0c5a507a726a291a065a59da68ea184a036a55ba62ea14aa018a548a6e3a004a0f0a41fa692a0c09f89a4cda518a07a9f2da45ea52f9f3c9fdea311a5989e6c9f6da3b6a4289eac9e44a380a4dd9dc59de5a248a4599d399d89a223a4129d069d51a2faa3c49cc99c01a2b6a3949c709c98a147a3509c269c3aa1e3a2ea9bb39be5a07aa2f89a2e9b7ba00aa21c9aa39a49a09aa17399f09a2ca05ba15e99c79afd9f08a112999b9a369f34a44197da0184840583f808f71779198119bd9bb6220b28bb2830ad0725b129c52aeaafc1223a2840296aafb0204b262c27cbaf311fc824b1254fb0fc173f1f342138b0209b829c959d5eb08b9fd5a35ba44aaf53a1f9a523a720ae84980e9bf49cd9a32204a112c7168d911012f2158519c28cea131d18971a8f8c2f145a172719de8117135117a6182182a8105d16c6184302761185172619ac02ec108b164218af82220fbc14d1151c8ade0de01063122886dc0a550cdf0d6d073a0ab388eb8cd60b20018a909291208c908b8c942696e8983590ad98709912a02098ca9d619f34a3c39c5ca171a244a409a045a474a59aa476a1f5a53da792a5fba18ca6fda7f9a5e5a177a6b9a77ca5f5a162a68fa7c2a418a201a747a8a8a46aa176a6c2a706a42ba17ba6f5a737a3d3a0faa567a787a289a071a5cca6bda11da0eda427a6f4a0bb9f8da4b3a56ba0a69f8ba4b3a541a08b9f5da46ea5ca9f7f9f2ea43ca5619fa59f2fa445a51e9f979f27a434a5fd9e389fdaa3f0a45e9e5e9e24a38ca4a39d869d86a218a4189d159df4a17aa3929c029da3a1fba2409cd29c5ba1baa2159c7f9c1aa17ca2a49b139cd3a020a2399b669b7da0a7a1649a5e9a4aa06fa12d9acd9a6ea09ca11c9a319c0fa13da2979a5998669c799d9c97ff01ca85ae848c089416ac18b018c09aab22f227e628acac1a25b129ae2a80af30220128e328f5ae2e20a0257f262baf361ee323b5241fb07815b71df71e11b0e69a6f9c7b9d2db004a045a4baa453af4fa297a7c3a840aec59a139ec69f27a48d009008cd0e6e8ccd113b1341171a8770130e17a119af016814d21644197c0423124f185f1ae3013c123e178e19c881b810e716e018078b4610531507173189e30d3814c0157289290c0311c0135c02fe0665823b836582f0073a8a768b7887f8002a8eae9023918486fc8fd4915398e2018b8ef78fca9e8894f496859815a2209c399f3fa024a4b2a009a406a513a524a240a686a761a50fa2a9a633a8eaa403a2dca621a8eaa40fa28ca794a824a58ba2cda7d5a881a4a0a1eca659a841a45ea191a61ba879a3caa0d9a552a787a29aa096a505a7f4a154a076a5c8a6afa139a04ea5b0a627a105a00da56ea6bda0b99fbaa40ba647a04d9f59a47ca5989f019f24a41aa5269f629ec3a3d9a45c9e319e97a3cba4529ee39d51a39ba4ee9d859deca27aa49d9d2a9d88a238a44b9de79c1ea2a4a3d49cad9caca127a3679c589c51a1c3a22c9c219c1fa194a2049cd89bc9a03ea2619b439b72a0e7a1cf9a6c9a0ba050a1e499f699579ed49f8098d79b48a007a11c99aa01db83c183f6042c166b1855183f9b0222e227bb2894aca4247f29802aa4afee21ba27b42846af19209225cb2677af341e0424c72428b04215a91d011ffbaf5c9a759dd09e13b0db9ea8a344a491ae95a171a63da8e3ad4a99429dcc9ed8a4650356119315998adb125c1322183c82ba14e1143918598564117114dc1662839a110712cc1322859b0e681106142d860e0d87102612f88b0f0ca50f6e1266056e072608800226880705b58161822005b30371855c87d081a404fe858e87ff81530a9a0ca80d4b954c09c611cb0fbb9cac0b28104c113fa17f941a97a198fda3209b2ca01fa197a4699f55a490a504a581a13ca6c6a7d6a5c0a3aea7a4a8aca618a24aa783a88fa53ca13ca6b5a715a4d7a1b4a60aa8a0a46fa186a6c1a74ea477a190a61da8cfa3cba085a5daa675a2e3a038a58fa6f4a1cfa055a5a0a6d0a1a1a041a578a678a143a00da54ba606a1cf9ff1a43aa6bfa08b9fa7a4c4a56ba0f29e31a435a5809fa19e18a425a5409f629e02a414a5ad9e089ee2a3faa47e9ecd9d7aa3c4a4289eb39d04a35ca4919d399d6ba207a4e09ccb9c00a2a2a38f9c769cada158a3119c3c9c6aa11ba3879b4c9c46a10ba31b9b119c4ca1dea2fc9a749c41a1d1a2ee9aa29c31a186a29099a4a1499f58a0fd9690017f8346837f046f16d118d218509bde21c327b22887ac8e2475298a2a84af91219727ba2812af2420b1258b2630af741e7e24f624f1af6c18a01e1a207daf009a2c9d799eb9afe79ebfa341a4a5ae1da161a60fa819aefb9beba073a279a8d70317126315d7904d1241111016238398121413e116e182d6112f12b014e9823e0e91111213b585380e520fff117084430c6710ec12a483e20cbe0ff710bb866c0b890e4310d188850b3e0e48107e8b7a09870e7c10b78f540ba50ebb0e3e94460b13103711ec97e603ad09a004bd9adb81218f98903ca0c995ef9a659cffa27a9b47a03ba12ca44c9f85a49ea55ca5daa0e8a532a785a582a16da6dea761a50fa123a6b4a765a461a18fa616a81da466a26da7b4a882a457a1c2a634a8c8a384a17ba6efa771a3c0a084a5b0a64ba298a053a580a6dfa181a036a58ca6aea149a004a56ea666a101a0cca442a6efa0b59fa4a41ba682a0309f74a4eba522a0fc9e28a45aa5869f479eaaa3bda4b19e1a9e06a387a4219ece9dc9a26fa4b69d8b9d8ea258a4519d6d9d6ba243a4349d729d27a212a4fd9ca89dfda1afa3db9cf59c73a108a3599c969c16a1a2a2ac9b6a9cc9a034a2e09a3f9cafa0f8a1859a369d36a070a17e991d9cb59f49a13098939a8d9f62a14196200132829182d202ee158818c218439c4a2100274e2827ac27240b294e2a11af4d21582772288aaed51fb125a52696ae381e5224de246aaf5719911ec12093afec96099cfe9c87af3f9ef4a220a4daaef3a0c8a5bfa733ae959d07a448a524ab008ec595e6964a9d3c0fcd0dcb11ae8c731392127916e4800612271447174483491100143b150a86561029115213cd842f0d1c115a13d7850b0c2511e413a486a40a691079125a8ac5089a0f9911678c84090f0dd80efa8d0a084d06db028391f80223885a896196b28803924094b79c0d8ef89739988da133989b9d069f7fa3ce9cf0a128a35da571a018a595a685a66ea176a613a83da6b1a1f0a64fa8c6a535a118a645a75da444a12fa695a705a4aaa19ba611a873a4c7a0c5a509a751a3fea010a683a711a3afa0e6a539a7c0a2b3a0dda542a754a29da076a5cba6c1a1a3a019a550a63fa18da0e0a457a6f5a061a0d1a447a6bca036a0aaa428a653a049a077a4d7a5e79f41a019a440a5009f879ff1a3fea48a9ebd9e7fa3d3a42d9ede9d27a38ea4bd9d299d9fa233a4509d9f9cd6a1eda37b9c7b9c47a179a3189c3d9c3ea134a3fe9b259c47a107a3189c189c2fa1dea2119c989b0ca19aa2b29bc79b06a1aaa2a99bf69a73a09aa1f99a7e9aa59fbfa0da98060112822d821202af15c218da18799cce20b426112881ab0324f328422a81ae1721c526412820ae291f6e256d2638aea41d8d23972407af52160c1dad1f0bafbd98bc9bd69c49af879defa26ca309af91a0c6a53aa7bfaeaaa033a6e0a72dadb896f59d509f76a5c408820bc40e8795ad0ec20c101358869d115413d216168db610b0157817608d83100212b614b68bc00dfc113014218de70f09139f14be90780eec13d515ec937c103f15931662960f0eba1463161098ab0c48132414f2999e07ac0f7f0f439bc581f28b84908c9dc7921e97729aeaa14a99619f90a04ea4a79ce7a19ba39ba422a08ba4c2a5d0a433a214a662a7c7a54ea262a6bda70fa58da259a618a875a439a2aaa63ea866a4e0a23da78da890a4bda1b5a630a818a46ca163a628a8dba3e5a0e9a567a710a3e5a0a4a525a770a2a2a050a5baa6dda16da0fea45da671a175a0d6a416a6eca048a0a0a4b9a563a0849f70a479a5d59ffd9e18a436a5f79e819ebca301a5709e049e7ea3fca4029e889deca29ba4779d209d74a221a43b9dd19ce7a187a3b69ca49c8da1f8a27a9c8e9c6da1c8a2609c4e9c3fa192a2009c1b9c07a141a2ab9b979b85a0b8a15d9a459b51a0aaa1e299e59a28a0a9a11c99439a499e23a0c0974f9a3f9ec79f13972a035a8051809600d5121f165316699c4820e62596275aab1e236b2899293eae992081261c28f1ad6a1ee6240826d3ad2b1d0f234e2491ae8a18df1e472093ae71952a96739a84aef09c5da107a37bae759ff7a478a565ae03a036a696a711adb29edea46ba6c1aa0d95329b9b9c0ca3930e31145a17219978135c17eb194096a51276172a19609628136d15501853949810bd1596182496da11d515ef172797a3104c175a19d798081177176619bc99480fa1170519839bf90e9c140a16109c39093a10cd11b89e828d7c962597ada12d98929eef9f3da4fc9ce7a265a4c3a4659f0aa59ea63aa5c9a024a6e3a754a565a275a78ca8efa537a25ba777a8c5a571a293a79fa8d3a5b6a1cba63fa8b2a4bca12ba6c0a7eca35da15da6b9a7dda325a11aa697a744a3a1a0aca517a779a257a058a59ea62da224a009a549a69fa1e99fdba41fa65ba1419f95a4bda5d4a0de9e31a45fa544a06e9ed0a326a57f9f4d9e69a3eaa49d9ea89dd8a28ea4ac9d7b9ddda28ba4369d979df1a2bda4379d5e9d84a26ba4c29c5b9d38a2f1a38a9c159df1a1a4a3569cea9cbba142a33a9ca29c5ea1dca2c69b289c3ba1ada2939bce9bf1a061a2cd9a239bdda036a27b9a7e9bf6a042a29e9a259c24a138a2059a3e9b649e8d9f98977902948054805a01691215177216619cf21fe525712792ab31239128982924aea22082262428a7ad681ea424b525afad131df5223e2448aeee168d1ded1e37aef892b89541970caec79a59a0aba0b1ada49d76a342a483ad2da047a50da6ffacbea060a6e1a781ac759ee0a404a6d2a9d596399def9e86a40b0ded15f417d79e5d14f619261cc29cb0131419731b599c9b123319cd1ac69c591134175619f89b500fc615a916199c340d82128014329c2803cc8af785769c318cd7952a96b09f4c9287990e9b3fa26f98d29d109fb3a3549c9fa1f4a202a5fe9e26a415a59ba5e0a038a5a3a680a5f9a0c8a5dea794a521a202a733a813a6efa1c1a620a8a7a53ca2fda64fa8b7a5e1a177a604a8f8a4f5a049a5cca629a4dca1d1a54ea712a458a10aa672a77ca3c7a0a1a504a7b3a291a087a5efa64fa256a064a5b5a6e0a1e09f1fa563a646a1469fd3a404a6bda0f99e41a47ea515a0929e22a470a5609f629ed9a32ba51a9fac9eaea314a5b49e099f85a3dca4549ee69e28a396a41d9e4f9eb9a26fa4659d979d2fa21ba4d49cfe9cc8a1bfa3449c969c6aa152a30a9c2e9c1ca1c3a27b9bcd9bd3a05ba2249b3b9b85a0e7a1d89ad29a75a0bca1c09ad79a52a08da1599a3f9b7fa089a1db990c9b8c9fc2a0f898980452811b849f082716c219e119789ceb201b272c2868ac2f22052822299fadf11fc12541273dade01d4c244c2535ad811c53223023b6adb6171b1d7e1fa8adde8f398f92908fadd999db9e309f83ad799df7a22ba36cadd59fd3a4baa5e7ac68a008a663a74bacafa0f3a569a73fabd09e34a594a6fba94e99bfa0c7a17fa67e942d9bf59caba37a8ef794ca9634a1f2884391fb92bfa0f084068fb890fd9f9681548cd78dbca07001518cb387a1a0af8cc493209413a12195319c309df1a3ce98509f77a0eaa4be9cc8a246a454a5599ebba4aaa50ea68aa093a5a1a66ca6baa02fa6b1a782a60ca14ca6bba7e1a552a1afa616a8c4a552a1b4a600a873a5e6a1dca64fa8ada526a19aa63fa813a578a095a5d9a61ea409a13da660a75fa4f8a004a65aa77ea37ba044a569a681a236a0e8a43ca6d0a119a0dfa42da671a106a0f1a455a616a1c69fd0a403a6aca05b9f81a485a553a0dd9e1fa434a5479f589e8da3b5a4aa9ea99dd5a249a4d09d3c9d71a231a4579dfc9c58a21da40f9de39c2da2f2a3cb9cfa9cf4a1aca37d9c029dcda180a3549c3f9dc0a167a34a9c3e9d7ca108a3239cbe9c22a19ba2a99bd59baaa013a2e89afd9a68a0d9a1679a309a11a09fa10b9a7f99ac9ea2a08f98f699ca9d859f37980080549563951b98d420ba263b2851aa61210b28f8284eacf32009277d28a2acf01f69252527d3acf21d4424572512adb01ba52189220bad11188f1ddc1e28ad0b8923956d962aadd799ff9f8ca0f9ac169c10a209a3e3ac859e93a463a5a7ac3aa069a56da65aac74a003a6f1a60cac43a00fa64da743abb79fc8a40da663a9529d81a3a6a407a8029c1ca233a327a67a99cca0d6a18ba5fe97fc9ffda029a52e982d9f64a004a50d98599f71a0caa4719aa4a0daa123a5479cc7a1bda2bca5679dd2a252a4f5a5119f7ca46da5c1a68ea1b4a4dea590a6caa069a5e6a61fa765a2a6a512a743a69ba1daa53da7a9a5e2a169a61ba802a615a40fa744a803a669a20fa785a867a5a0a1e3a52aa772a4e2a026a64ea7bfa4a7a08da5eba602a44ba089a5e3a6cfa2cf9f0aa533a6f2a1cf9fcfa428a630a1be9fd1a41ca622a1509f8da49da5a1a03e9f4aa45ca551a0fb9e35a450a516a0a89e18a42fa57e9f5c9eb1a301a5f69eed9d1da3a1a4359e989d97a241a48c9d959d56a222a40e9dbe9c0aa229a4d29cca9caca190a3679cba9c88a119a3209ce19c71a1fba21a9c389d71a1d1a21a9c229d4fa1b3a2019cf59c25a18fa2c29ba59cf3a043a28d9b1b9caba016a21f9bc59b5c9fcda03699479a769f88a16b9700800296bb968c983420f5257a27fea90421b627c02840acb02082260b2875ac2f1f15250926b5ac5f1dc9239a24d1ac1f1b0221bd21afacc517381da31fd8ac82088b8e3816e2aca2973e9d8e9daaac299beda0a6a182acf89c0fa36ea45dac559d93a477a5f1abf59ec2a489a5a7abe39fdea4dfa59baab89fdda4d0a50faafc9e9ca45ca571a9679e5ca447a5e1a8249e36a4eca496a87e9dfaa304a520a89f9da7a3c6a4b5a7489deea3c9a4c5a71b9e0fa421a5a4a74a9e7ea479a573a7239fbca402a62ea714a059a57ea60ba793a0e0a54ca70ba7d8a064a6caa799a6b2a0b9a538a739a6c1a0faa571a796a534a172a6e2a7c4a5d4a02aa67ba7b2a5fea036a6bda792a51da16ba6fba741a59fa0b5a56ba79ba468a07ea5d0a618a4c4a082a5f3a63aa36fa023a565a659a2a5a0fda448a69fa129a091a4aaa5dea0f39f77a4a4a5b4a0239f41a467a57ba0e69e21a440a51ba0939e0ba427a54d9f9a9e97a3f2a46e9e769edca29ea44a9dbf9ebda2aaa43a9d0a9e4fa283a49e9ced9dfca10ba4409ccb9dd4a176a3249c9b9d8aa151a3b69b5a9d3ba1c4a25e9ba69cb8a01fa2a59a699c94a0dca13d9a4e9c52a0a8a1c2995a9c88a0c7a13f9a2d9c4aa09fa177992f9bb29e64a01399e49a299f1ca11f990080558ef28b539530202626602793a96720cf2631289bab2620f1258c27e0abc01e8e24e22516acb51c9c22d4232dacb519232026211dacd714851a141c3cac118e4397789833ac5c986c9f31a0ffab8d9a19a142a2deab839c88a2c0a369abcf9d18a450a507abb59edba4aea596aa5d9f0da5f8a55faafc9e01a580a5d0a9d69ef2a4c5a5ada9a39ff1a489a53da9449faba499a53aa9c39eb0a4efa50aa9729e96a476a501a9d89e7fa487a597a8399fc7a4afa582a817a0f7a4ffa52da8ef9f94a5e8a633a84e9f87a54fa70ba868a0f1a577a77fa791a040a67fa71ba781a02ca6a1a760a6a3a01aa679a79fa5ada0fda55ea79ea59ba014a666a770a580a1afa618a840a52da1f3a637a8f0a4fea01aa672a721a432a059a5cca627a349a0d3a4e5a548a22ea0e3a430a6dda1fb9f95a4c2a53fa1069f70a49ca584a0e59e44a461a50ba0b89e12a432a5b69fa99ed1a311a5399f969e60a3c5a4bc9ecd9ea3a25ba40f9e339e80a24fa4b89dab9d61a24ca4439d219d18a20ca4d69cbd9cb4a16ca3599c759c68a1d4a2009c7e9c25a186a29e9b759cd2a01fa2019ba59ca0a0dfa1b89a549c74a0b1a1449ade9b42a08ba1109afc9a0da05da1d599ea9ae99f5ba1049ad999229f76a24198929a129fb2a04b9900806d89eb881d91fc1cab23a6246aa74e2052261028ecaa911f7325f526fdaa901d0524df240eab3c1c0922232362abdb18f41e482069ab5114a3181918a9abb8920e9a599bddab1598c39ede9f49aba4993ea158a28eaae79c43a356a4eaaa299de1a300a581aad09d2da429a4fca9569ee1a4c3a5c3a906a079a5c8a65fa9fd9fb5a5d7a678a978a07da586a601a90aa06aa50da6dfa80f9f24a575a69da8c39f2ea548a642a864a043a510a677a8b89f21a577a616a80da056a580a6d1a74ea085a5f7a633a76ca016a6aba7d0a6cfa043a69aa791a6e2a02ca6a9a72ca6a1a0e4a51aa771a569a0c7a5daa62ba57aa094a5d4a6c1a465a0c5a5dea6b0a483a0e9a51ca753a487a0a2a5f6a6c7a31fa0e9a431a69da2209f77a4a9a5bca1ec9fada4e6a5a8a17e9fa7a40ba658a19c9f8fa42ca6fda038a035a43ea53ba06ea0f3a3e8a49f9f4aa00ca410a57b9f9a9ff5a30aa5159fb09e88a3c2a4759ed09dcca23fa49c9da29d90a21ca46a9da69d76a21ba42f9d999d54a214a4059d7e9d0ca209a4cc9c429ddba1f5a3569c279d98a1bfa3059cc59c44a16ea3909b6b9cf8a0eca2b39a239caea065a21a9a7f9b6ba005a2069a629b4da09aa1bc99cf9a1fa05ea11f99579a439fa7a062980e9ab99e57a09c9700802c89e281d295d21a4421ca22e0a54c1e8624d82541a9cd1e8324c5257caab91c3f2389248baae81a13215f227caa1e18191ea41f6caad8120c19e41834aaee8ce9975b9a53aaf896ea9d0ba029aa5599a2a0d1a1b9a9839b76a23ea4aba9029d26a401a5bba9b29e7ba4bca551a9f09ed4a49ca5cba8f69ef0a4efa56fa8839fffa4caa5cea7919f38a530a66fa7c19f6aa56ba618a7a59f5ca584a6c3a6519f58a545a64fa6df9f36a518a693a6639f1aa5d7a57da614a03fa55ca64ea62d9f2da540a6d1a5449fcea4fea523a52b9f7ea472a592a4c69e60a422a54da4499f8ca4b6a50da4659f5ca47ba5a4a3d39fc7a40da6e2a3de9fe9a440a662a37e9f09a4fba48da1f49f29a400a50fa1fd9fdca4dfa587a1689f65a47ca5eba04f9f54a481a59fa0279f1ea439a55ba0249f0aa44ba537a0d39ee6a3fea4a89f159fe5a3ffa42d9fdf9ecea3dba4339fa49e81a3a5a4a99e3f9e08a368a4019ee39d9aa22fa4449d699d50a20ca4d59c499d2ea201a47d9c169dfba1cfa36d9cd09cb4a18ca3199cb59c71a142a3d09b839c3ba1fda2489b899c1ca1cca21e9b8b9c11a19ea2d59a6b9ce9a068a29f9a0f9c9ba04da2479a8b9b61a01fa2d799089b28a0dea19a99589b08a06ca1f198e99a8c9fe5a0d9980080288c44880995b11a8221e922a0a5da1d64249a25eaa8611e57249e2515aafe1c3623f82437aa1d1b162164235baa7118e61db31f01aa1c117b152b14caa941868b95d89821aa1f947d9c6a9e94a9a09719a0dfa084a9009bbba1dca2a1a9bc9b9da278a3f5a8979c82a3a5a36ba8e69cf7a3dca41fa84b9d27a420a5a0a7e69d4ca498a53ba7fa9d55a437a56ea6269f53a4b4a430a6e89e41a442a5cfa5579f32a44ca56fa5479f2ba417a543a5f79ea0a395a444a4ce9ebfa3bda417a44f9f18a4e8a4c1a38b9f1fa404a522a3b49f93a47aa555a3f89f86a445a53aa3ef9fa3a49da50aa327a0cfa4e3a517a33aa0e9a411a6cca236a0cfa4eea5a9a2ca9f7ea4c9a503a2b99e1ea43ca548a1e89ef3a307a507a1289e4ea3ada439a04a9e2fa374a4e59fcf9de2a21ea41d9ffd9deaa236a4b19ef89dfca252a46a9ee89ddfa25ca4e49dcf9db8a254a4db9d9c9d96a230a4ab9d9a9d6ea217a4409d6c9d3ea2dca30a9d139deaa172a3959cc39c81a10fa3449c9e9c49a1b7a20c9c899c2aa194a2e89b6f9c1fa177a2859b399ceea046a23e9b149cc2a021a2fd9a149ca5a0f2a19d9a029c89a0d9a1639aba9b57a0a7a1eb99939b36a08fa19d99279b0ea02ca16899689a3e9f7ba09998b89a629e0ca01f9900007e01460df094441d34241b2504a8101e7724d025dda8131d6323ba24e0a86c1b7321d6222aa9b819142072216da90918b61dc31f8ba91814d018891b61a9d2855095af9647a9dd94e69c1b9effa8b897e99fe9a0e2a8b399fea016a289a8539bdca167a339a81b9c83a2c7a3a2a7969c4ca380a43fa7e29c92a385a4d0a6249dbea38aa42aa60f9d49a37da49fa50e9dd1a22ca4eea4369d80a298a34ca4619dc2a210a423a4459ddfa248a435a41e9da3a247a4a3a3a79dcca21fa4a7a3109ec9a211a433a3ae9dfda245a4dba2359e22a347a49ea2029e35a360a4faa1fb9d09a335a46fa1f69daea2e4a30da1d49dd2a217a413a13c9ec9a210a4dda0189e71a2d9a372a0029e88a23ba446a0149ec6a24fa44da0699efaa277a434a0969e0ea36ea4e19f279ef7a284a44c9f429efaa279a41e9f449e19a382a4b29e439eeca298a4479e309ebea286a4e09d359e80a259a4a99d5e9e48a23ca4419dd19d26a22ca4ef9c9f9d0ba2f5a3a69c479dd5a162a36f9c8f9c6aa10da3129c319c0aa1b4a27c9b229cc3a06aa2dc9a129ca9a03ba2ec9ae09b81a014a27d9a669b52a0c3a1069ae69a0ca05aa17699719aa89f02a13999889a829fe5a02e99a89a459fbea0d998199b709fd1a01698df9aba9e7ba0509800002b1833198194291d62241225dca6611dd9231e252ea8831cca2268247fa8171b4521ee22eaa801196f1fbd20f7a87916c91cfb1dd1a85913e6164618a7a83e05d494f0958ea856922e9b4c9c66a82c956b9d2b9f18a8439802a0baa09da7789a68a1ada26ba75f9bdea11fa38fa6a59bd3a165a3e0a5659b0da250a372a5529be4a158a3f7a4129ce9a10ca369a4249cd4a1e2a214a4b49b17a283a3f1a3ee9bd8a12aa349a38d9c9aa18ea286a2c69bc7a11aa32ba2179caba1dda2aba1419cbfa101a364a1109dc2a1dea213a1179d5fa2c4a34da1379dbda229a448a16c9dc9a222a43aa1a39d95a2faa3f3a0719d5da2ada383a03b9d0ca28fa338a06b9d2ea29ba31aa0439dc7a102a3cd9f7b9de8a15ea39a9f689d0ba26fa35d9fe19d45a2ffa3219f0f9e40a205a4d49e479e29a2e8a3ba9ed49e54a20ea45f9ebb9e27a200a4f29d409e00a29fa37c9df89dc0a152a3e39c859da4a130a3879c499d53a101a3469cf79c30a1d9a21c9cb09c0aa1b4a2e39b639cd4a09ba25f9b4d9ca5a08ca2ca9a1f9c83a06ea2849a1b9c87a049a2759a329c83a02aa25c9a459c79a0eca1719a0d9c51a0b7a1f399479b20a088a1b099529b06a06da18c99e19ac79f37a1f498c599d79e9da0aa98a499779dfc9ed2966f09101a131cf4945b1e4a232124f5a790212426522700ab2c210825532623ab411ed122302570ab371b94203f2197ab6f181f1e701e2aac1996dc98f39424acb39acb9f3ca00bacef9de4a11ea3f4abfc9eb5a32ea496ab0da094a44ea56dab44a1cfa4afa59aaa09a193a5a6a6f9a947a0a2a52aa6d0a838a09fa28ca27ba9b69e61a04aa035a8c79f39a47aa5a613239b549f48a07d18d40df2148a18cf93c01cc5233425c5a3ec1f6527632533abe99d71a662a969a5461ce398e29a80a5de1c7c162496fea3db172e11ab945ea291937e9a719d93a0a89c90a25fa450a03aa0d2a649a826a6b9a36ca67aa7aba656a132a5b7a693a4269ef6a303a540a26b9c1da273a4c7a0659d63a25fa4e1a05e9d86a24fa477a0279d1ba376a43ea0a49d52a38ba43ca0199dd9a24da4409f249de7a265a4089f569dd4a250a4b39ed59dcda253a46d9ebe9d8da238a4f59d909d55a239a4899d119de8a1fba32a9da79c76a15aa3b39c609c22a1b9a25e9c159ceca06aa2ce9b019ce3a032a2a89b2e9cd3a011a2569bc89ba4a0d1a1d69a2e9b6ca07da1639ac19a4aa06ba1fd99649a28a048a1ac99a69a10a031a18c99859ac79f0da1c098409a739fe2a03298f19a17a0eba07298309a3a9f25a001981e9b39a064a14099cc002e149916ba92cf1f9124a92541a86d22ff26042802ac412298260428f2ace91f40244025b3ac131d6d22d323feacb319aa1ede1fe0ac6f93ca94c89569ade399619c439c1aadc39d85a1ada116adff9f1ca4bca4fcaca5a073a422a556ac47a24da6a0a709acc3a1baa5b7a677ab7ea00ba4bea491a9a29efba107a3b7a64799cf96839672a00192c592f190c19968197b211323eb994e1c6624b52528a0501f932624286aa6f91a26212a218aa8c69d10a852a9a4a2c19c15a6bfa7bd9d5491839fd2a058a24091709a9b9b35a15f99869eff9d02a0d79a7e9daa9ddfa0c59c84a063a103a3f09e17a4b9a4aba41b9f60a45ea5e8a4db9f26a4d8a44da4619fcea424a686a302a0c7a4c5a59ba28a9f9ba49ba50ca2489ebda3f7a448a17c9e4ea450a56ea1529e95a3a0a469a0449e4aa37ca422a0fa9ecaa3c2a428a0e19ea8a3c6a46e9f039e5ba3a4a4f59eb99df9a252a4309e359d64a21ba4749d919cfca1daa3f89c6b9cd7a18fa30b9d939ca7a12aa3d49c9b9c84a1f2a2879c6e9c59a1c5a2189c3b9c30a192a2b59bf79b06a176a2519b249c1ba173a26f9b659c1ba137a20c9b299cdca0f2a19299109cbda0e4a1fd98979b84a0b7a1c198e99afc9f0ca132991998c09ce49d8697cb985e9ec59f9999b0007114a8140e95c61c3e220c2351a587220b27062820ac0b230028dd28baad11217a260028d8ad081e97239c24aaad981c6b216822ebad930a891a221d46aece99449a739bbcada39d0ba176a182ad42a0b8a374a48bad18a124a5ffa52bad31a279a632a74facafa170a560a6abaa359d70a006a1d1a55896f18fee8d38a0c2114b1b901ce59c6a17851f7b206a9c801928219822a49ddd1b6422eb232fa0b71af7212e230ca3aa172a175f16c8a28691e4a0a4a2e5a1209889a285a40ca03b9a03a27aa335a275999da053a192a3089ad69edd9f75a14f9a219dd89ddaa11d9cb79edd9fa7a2d29e5fa299a343a4a79e63a466a50fa4529f84a46fa5d6a3239fe3a40fa628a3419f9aa449a67ea38fa02aa58da65ca365a008a56fa6d3a2969f5fa59ea698a2739f7fa481a54ea19c9e23a42ba582a0159e85a3aca4639ffa9d02a33ea4779ecc9df3a245a4ef9d9e9db6a24da45b9d2d9d39a2d1a3509d289d15a25aa3229d119daaa1e8a2d69cce9c4ba1bea2939c1b9d5ba1dda2739cb29d7ca196a2af9cb89e1aa139a23d9c659dd5a0d9a11f9bc79b6aa089a12a9aee9a3ea05ea17399cf9a47a06ea1ef98399b91a0d0a1ec98509baaa016a23099ad9a3da081a17698cd990e9f91a09898749a759fc0a0bb980320e3211724bfa4c883108a1c84bb97b21b021ffa1f82a8db20bd263f28cdadd020c1254e27baadc71fe024872536ae1b1c0e216a212baecd107c18a216cdad57955099a2980eac7c977f998b992ca4879e7fa2a2a3afab92a1cfa508a70bad1ca291a68ba7c5ab2d9e6ea147a2e5a648965b9501943da0c9815313ba13699d3710e817e318e69c65141c1ced1c759c5018ac1e2420149d6e1918201c21d19d5219381f1820ef9ed416bb1a791b889f5b0cb99cd59e559f719446a0a3a1339eb694349ee69fcb9f0e989d9ed09f43a2bc993d9e429f89a1a89c499f47a0b6a2cf9fc8a188a372a28a9f9ca3a8a42da3e99f96a4b8a520a454a036a52da664a472a0ada501a74aa432a029a570a66fa34fa0cca4fea5e4a2589fcca42ea61da348a075a5afa6fba261a070a57da671a2cb9e9aa4c6a5f5a0a39e3fa463a55fa0999e1ea438a524a0409ed7a304a5149f5a9edea302a5f29efb9d62a3cca45a9ed09d06a37ca40b9e6a9d5ba200a4989dd19cdea17aa3169d829c95a134a3d79c5d9c61a1bda26b9ce49bf1a02ba2bf9b8b9b9ea0e0a1f89a519b55a064a17b9afe9af69f11a14f999c9acf9f19a1c397699aef9f24a125988c9b8ea0b3a1e998e89bf3a06aa2ad9a5a9a49a050a1a39a5e9d6da057a1819a00800000b10000800000000000000080f116671ab61a81a4e620c225c9261aad0d218f25e3260faeae1f77246f255dae7f1be12168227dae10115d1c1d1c27ae6e94c294eb9523ac1e979b999999e8a4819e94a365a41bac97a13fa669a711adf59f12a47aa4b2a8699c1ca0e9a007a41f9b259d809e9f9d68912e963e97df9b8c11a4186619659a00144e1aba1b929a3614231b891c949a1d0cfb16d118d29b758d1391ee932d9cf2955798e3983b9d16906e9bfa9cc59d268fb09b2b9d029da790c39b479d239fbd936b9c2a9e6fa19596b19ce99d88a23e9abb9c789d9da2fc99719e09a081a2e79c54a066a11fa3f59d40a12ea282a38e9f89a362a4d6a34ba09ea499a5c8a30ea0c1a495a615a34ba033a58ba6dea20ba0fca436a6aca28ba006a664a754a22aa0eca427a611a1519f6ca48ea5b6a09c9fa0a4cba5eda09b9fa8a4e5a5afa0349f8ba4c4a55da0c79e44a452a50ca06c9e9aa3a9a4099f179eb7a23ea4d89d099e92a220a4b79dd39d75a2faa3449df59cf5a19ba3ba9cc69cc7a12aa3a39c349c68a1b1a2439c0f9c44a193a2089cd49bfea034a2d39b6f9bb8a0d0a1e59a1e9b89a092a1d499f79a63a058a1c998529a22a03ba14e98519a9f9f05a1f2977a9baca0a5a1049a7f9924a086a17c9c00800000a700000000000000000000802417371a451bafa409213b26be27a0adf61d4624682519ac7f19a71cc11c26a6a216931d851d6cac9f8a7d0f8810f0ad0797349bda9a60ac1d97aa9a199a8ca39b9fc2a3cba415ac18a183a5aea60dacfa9ad99d2d9e84a49794a895a197569e839088917593249d1481a80c5f0c129ba80db91635188398a212c318d119c398df102819ff1a68988b0eca15b5167b974e023c0992076f9421806f80df80b38a71806280bf81bf85c1854686e588148cb781ea933c96279b4287a6938695baa0059176939d9407a189982d9c469d9fa1d09ace9e4ea0bfa25c9b4ca034a281a3b39d34a29ea374a3589edfa39fa4bba381a0d4a4c8a5c5a377a09da53ea753a47aa050a52da7d6a275a0b2a40ba648a28ba150a681a7eea269a26ca5a6a6daa1efa001a53ca693a189a00aa55ba64ea15da0b5a4c5a5caa06c9f24a425a51ea0809ebaa3d7a4529f469e6ca3b2a4c79ee89d33a38aa4aa9e959da3a21fa4d79d089d22a2c0a3669d979cd4a185a3219d8c9cc0a12fa3319d899c6ca1caa2949c8f9c53a1dca25f9cf19c4ea175a21c9cce9c03a10da2129b719cc3a0d7a10e9a209c90a0a5a17299bb9b7ea08ea1c899049b20a038a1c3996299249f7da05d98c1995f9f98a0459900800000da00008000800080008000807a11e2141c1402a40b1e0a243f251aac631e64243b25cdab6d19481de01c7da6ce16791d6f1e65acdf8a02163e174aae4897cf99209997ac9395bb983c9912a2f39e66a34ba4e5abc39f53a42ba59ba9b796199b0a9b91a09b8f96920e95f19af08d2190db91f59aec02f70cff0e0198c207c3126a14b2934c0e9d11561183928b05c5118214239406042e0e7b0f0c95ae844f88048cbc93828248841b866d8acb803282928473833488e589358a5c858484b59563983297338df594c1970da0f28e67972f99f4a04397b099f99ad9a1e099619d969e79a38e9ce3a03ba240a43f9d8aa1eca246a4c29d53a275a3c2a454974f9e1fa0aea27d9c599eec9f0aa1ae9f60a4b1a582a381a045a5baa671a35fa162a68ea707a3f7a038a698a71da2bca0a7a511a7f2a18ca05fa5afa6b7a170a019a55ca630a146a0dda404a6aba0e39fb1a4e6a566a0f19e07a435a5029fc59ec3a3f4a4ed9ed49ea6a3b3a4ec9e079ef6a257a4d59dfa9c2fa2dea31a9dad9c02a29ca3f59ca59ce4a163a3ba9c6f9c88a105a37d9c0c9c13a178a20c9ca19bcaa022a2489b4a9b7ea0d2a1d49a3a9b50a07ba13a9acc9a37a085a1e399439b29a003a2ad99579a1d9f1aa11498f598ce9ed7a06f96008000004a000000000000000000000037142717c6161f9c421f872408260bac8d1e64245225f5ab2119801cad1c23a5ad184c1fa11f7bace78a1c16591776ae7197a99bc69cb5ac6c956c99189ac8a041a08da467a562ac4ea09da4a4a5b8a9aa95789a409aa29ec18db1910494a998cf8b478e5b901d9963007b01188293967d03210fe4117191760be10e4b0f6c90f50903101812c2910000440e221034947a821f83f885f292b880a3829283378ac1802f819582dd817b849d8459834087dd02468df69098969d88d490c0946f9dbb897995ba9629a03d953a9a4c9b4aa2119bd99ce59dcca2549b6aa0e4a1dea3539c78a020a1dea3d69c28a130a269a36c92ac98c499809c1d993f9ce99d019ee59fc1a447a653a499a0dba4aea628a3fea0d4a53ba7f0a2c9a0e5a568a785a231a06da5d0a6c8a1649f96a4bba5f3a0269f20a419a540a0709f12a407a5ff9f0d9fe3a30ca5799f379fc0a3daa42d9fef9e9ca3c2a4cb9ef39e9ba3d5a4e29e859e5ba3bea47e9e409efea263a41b9e6b9d4da204a4079dd09cd4a161a3b49ce69caaa107a3729c889c49a1aea2089c8f9c25a17ba2b39bde9bb7a000a2da9a5b9b52a084a1c3997e9a3ea06fa1a899b39b8fa0e1a1df99869ca7a0f6a16499e299309f9ba0349900800000ef000000008000800080008060137016f916219c7c20d4255f2787ad071f7224612551ac2218161b5a1b43a4be17581e941f6aacc98a37167c1771aee7953e958896c7ac809315988798c29f969f4fa4f2a43dac51a0f0a4dba5a3a9c5938e99bc99a29ec500c405e907e3958409080d420d088d1e0ae3110314c0903509f911e312f9913e0c6c0f7c0e09904f054c0c630fc89142003701d5817c94b78526892c8c5893d081088364848d888e806781a3823482b5811982ca804c86880544888689ee96d88485905292b69d188a69934f96aa9f4a942e99ec993ea0a7961c9ceb9c10a29799759dbf9ec8a1b09a09a0a3a01ba31f9b10a11ea210a1718f29982b992996c796b79ab59c979c999f89a4d5a5b9a31ea1cfa520a70ca4cfa05ba6bea712a4fea0b6a5eea633a3d4a08ca593a69aa231a0f8a432a63ba1d19fe2a404a6bea010a0dba4e8a58da0ca9f89a4caa51aa0099f17a45ea5689fed9eb9a3fca4e99e579ebea3c1a4af9e469e82a3bea46a9eb79d1ca391a4c49da29df7a264a4a59d189d6ca221a4209dbc9c02a2b6a3aa9c709c95a106a3559c279c32a189a2b19b129cf4a058a2a39b719ba1a0f9a1ee9a459b6ea09ea1e99a1f9a9c9feba0249a3a97179dbe9e3f980d96c09c019eda981f80000005010080008000800080008051134d161a172e9c22209a254827f7ac351ec723b92476ab6e18f61a481b5aa42d19471fa51f86ac14113b19701c93ae90941f8f6890d0ac85930c97c797ff9fb99f49a422a52cac5b9f9da47aa58aa9b5959b9a229bcba078899e8cf08f91971b0572092b08b18d0408560f2211419095081411d8121491690d0411da100c90fb07381106146192ab045d0c040cc9940388ed885d8b609487811f83638266881081168253826b80a880cf80e9807088af048208f709ca9858018083328d4e9de28191848c857e9f3792709733986fa12598799c8f9d83a3569b5e9fe7a0aca2199cd3a0eba1ffa3419ce4a102a3faa2928e8496299862943a944a96d9983793379fb4a364a520a22ca0c4a416a786a3d8a025a64ba7eaa360a0fba412a614a212a0dfa4f3a5dea107a0dea424a6bea14da013a547a6a7a151a0f8a404a600a145a0c5a402a6a2a07b9f73a4e3a546a0e59e1fa445a5eb9fd19edaa30ca5a29f509ea4a3f3a4169f119e85a3d9a47e9e819d12a3a2a4bc9d019d7aa22ca40e9de69c3fa2cda39c9ce19ce5a142a3599c779c87a1ffa2ec9b6b9c35a1e4a2c49b6d9cfca0d6a2389b099b13a189a3b19a899c7ca19fa3239c109cc8a19aa3059cd799189e8e9f1e9700800000aa00008000800000008000801a141417d317b19c4520e92597273dad071e4e248925f6ab0f196d1cad1cdba401183420802073ac2c8a0516e41d2dae7a950e982d9963ac7294359888986ba0769e9fa36fa40eac61a067a572a61eabf696369d879d49a36b8df6914e955a9a82023507e303ec8d4209431030111e8da4051711aa1263903e0b8e0e860ece8fa006020ded0d5b92a80012056302c19460840b8831896692478277855c87ad8993810c85ca8645846c85b287ff854c86c2001f8b798e01988f89328a8891639ee2017b8c8c92cea05d916e96149845a21f98419bbf9cc2a26f9ba4a0f9a1aea49d9bf8a00ea235a4e39afaa0e5a1b7a1f18ce695ad97f093df9485982a9a0695029f75a4e6a50ea236a0aaa4e8a555a2f8a015a63fa7a6a387a0a6a5e1a690a213a000a51ca6c2a101a0d2a4f6a55fa135a0bea4f8a52ba1909f9aa4f8a5bca0849f7fa4f3a537a0f19e4ea4bea5cb9fbf9e09a435a5209ff89d1ea38ea45a9e269d3da237a45e9d279d30a21fa4539d0e9d10a2eea34b9d1c9dd4a1bea3f69cb09de7a19ea3f89cad9e98a170a3c39c6c9d4ca1caa2639c3c9ccda053a2899b439ce2a05ca2a99b3e9cc7a01ca2cb9bc89cd0a0d2a1ea9a3f9b98a0d6a12e995d9b35a022a1ad9923800000b900008000800000000000801f1454170018a79d751f5025e12684ac1e1df5230d2544abee188b1cc21c62a59c16891ef61e03acf309af18ba1998ad6695b4991699d0acfc95d5994b9a67a1dc9e03a4aca4faab78a05da5ada611aca29a3da095a0cda516887d8beb8e959bf40b300f2e106590cf090f114c14e291a209631120131c91cd0c6e109d10b3902004860e9d101e944f02d208cf0838940383a6836a85c2903b815c82fc84138730815483dc83ef8303822a8634877c8be98024898d8d889a3e883e906d92f59f868a97939c95c9a0ad932f99b39a00a2eb96ee9c989e65a3e89b37a024a1c1a4319cb7a10ca3ada5ae9afba030a24fa2638cb19658986c94e0941098219a7495299d2ba18ca3daa110a061a46fa5e8a22ca135a63aa7faa2e3a0d7a51fa739a26da0b3a510a7efa18aa073a5b5a67ba15ea0efa461a6d9a020a0c6a48da6a3a004a09fa443a6c2a0419f64a42fa611a0c49f4ba4caa5f79f8e9f11a42da5069f289fc9a3eca4a69e619e46a3a8a40e9ec49df5a272a4cb9d539d9ba233a45b9dba9cf7a1d9a3b59c2e9c4ca15ea3459c5b9c4ba11fa3519c269c0fa1b5a2159cb89be4a094a28b9b6c9bbaa03ca24a9b979bcba054a2799bde9926a03ea1139c1a9a139f78a0f697010000005500008000800080008000800f145217ff17309ee11ec924e7256facc51cc722f223e9aa55184b1b6c1b6ca5d715651c741cb9aa1f0fb814eb1598acbe8d32940d8f4cab109557989f98c8a4a69c94a1dfa225ab20a03ca51da657ac5f9d9da204a49ba84a94da98f19aa6a222031805fb05349536091a1130147096aa08521262137096d40c0211ab10fa93c407770f891161953801280a30075d9760880f8c918dcb93168558881a89af8c408166851b885d88b1833d88c089d38e07816c8a528e8a96558c1a90ee912e98fa8e2f966398d19d3694f499419b04a08d94e19a3c9ccd9fd496ed9b0b9d0f9e829a3d9fd5a04aa1409a4aa054a12fa119980b9e5a9fea9c899a119f7fa0a19cbe9e78a301a5f5a073a06ea5a3a6d1a27aa113a688a7d1a3f5a0e0a55ba7d9a29ca058a5d6a65ca286a00da570a6e3a1cda00aa547a6cea12ca1d0a40da62fa14da084a4aba570a0219f36a44ea5cd9f759ebea30ba5aa9ef09d37a3c4a4c29dd79d43a39fa4ab9d6c9dbca26ea4429d869d77a221a41a9d3a9d35a290a3c49cb19c9fa1eca23d9c939c30a173a2009c309cc4a03fa2859b129c75a0c3a1079b3f9bcb9feba0ed99a89a499fb1a0b599089a129fdea0c5980b99479e2ba05c999c98e29d529f899813000000e50000800080008000800080a013c9166d17939d551eb5241126f4abcd1c10233524adaa5c18221c2f1c90a5a116451c271d87aa4408ee0d7d0f3dace9938c9819989eaa7e95129a649a36a5e09ca9a1baa282aa6b9ed6a4f2a502acfc9d3aa413a525aaf398989e29a037a5e4840d88168b3f96fd0d5f150a17a89baf0c1b158416e699e90fe512881234969b08ff10cf13899877015c08d806f698ca874c8be68dce96528522875589148d49801983f987298565838384ea88ac8c1181f7885b8d6995b58c208e07905798da8d3a93f998f79ff295b49ab89ce5a15096d99d399fcea0a098779ccb9d6a9eeb9c96a1d0a29da25c9e55a38fa4eda3419e3ca45da54fa38b9cf4a25da46da2239aca9e0aa0f89ef89d84a303a51ca158a027a55fa666a26ba06fa585a655a22ca00ba557a6c1a105a0e3a419a671a1fc9faaa4d2a5eaa0fa9e61a479a582a0609e13a474a525a0c49d76a372a5fc9e649e36a3bca4ec9e129e53a208a4a19dcc9d2ba236a46d9dd09d6ca25aa4209d1a9d0da2f7a3f69ce79cb2a14aa38c9ce89ca4a128a3619c9c9c7ca103a3049cb99c8da105a3249c469c31a1aca24b9b039c09a163a2a49a759baaa0fda1379aa59a59a0a8a16b99759a32a056a15a9aa49cada0d6a1319b068000000c0100000080008000800080b7114a16b316e29cc81b87221c2408a9b21b0f22832381a924182b1c1c1c4ea6af15421c4f1c44aa430e6e14941521ac14906396d79482aa0f9533988197eaa4609ad59f53a09fa98f9ed6a3a7a414abf99f6ea5cda613abdf9ea5a486a534a95a9c16a299a3fca60298249eca9fdba465060e06870deaa1910b29146e1448a03c8111040985ac9e218a61943996dc9caf8d97938495cf98a988c88b1b8e128e1d82628362865882ad89a68a0d8b1490e48c63949d96129e98924a97209946a22497c79a069d98a30298239dd69f69a4f098e59f1da174a31499e39cda9dd19d239ea1a2b8a314a41ba018a5eca581a487a0c4a5f5a675a4549e14a421a510a28499419d699e899c5d9ee7a3efa4d7a1cba0f2a5f3a68da3a0a050a564a6c9a230a0eba425a65ea29d9fc2a401a6f4a1329f9da4d7a565a1cb9e62a49ea5d5a09c9e1ea469a53da04e9eb9a321a5c59f3c9e37a3d3a4ae9ebb9e8ba3ffa42a9f7f9e3da3a2a4a39e1b9ed0a25ca4f29dbb9d53a212a40b9dc29c90a15ca3519c579c37a1d3a2f49b349cfda080a2799b339cdea033a2499b629b7da0b6a1859ade9a68a0a1a1669aee9a54a07aa1299a129ac99f20a1ac99669a67a014a2569ab69a11a048a1399900800080d9810000610b9f10a40fcb928b1cd22266245ba8851f5725042701ab591b282294234da9d019cc1ddb1d6fa6ee16b61cb41ddaa9730d01141a1578ab0e8f14986597dda96f958c980a9953a5049b5aa063a1aaa9e49dc7a3afa413ab239fcaa409a6e1aaa89f02a50ba604aac49d23a420a585a87e9bf9a031a27ba68496cc9d489fdda4a0946a9ad29b47a2ee90e798bc99f1a0488e9298659a1a9f2390e096e898e29ba18d889095913e92b78d248f67908e90d991089a1d9c439d4495eb9ce09da4a15499f79d789feca2ba991fa017a15ba4e89b1aa179a27ea48c9c7fa230a402a5f89e45a37ea4a4a4ec9f51a473a5eda49e9fcea40ea6cea42ba08fa539a70da5a59dcfa30da5cea20c971b9bca9cf8996f9ee9a324a577a1eca020a63ba705a47aa07aa5d4a6aea20ea0e9a44ca6cba105a0f2a437a664a1e89fb1a401a6d4a0009f4fa4a1a523a0979ebba308a5289f319e70a3bca4b79e419ebba255a4029e649d4ca2d6a36b9d2e9d08a2aca3eb9cf79ce2a1a2a35b9cd49cbba160a33e9cea9ca5a102a32e9cc69c64a1eaa2099c8c9c45a1c7a2e49b4f9cdda033a25d9bb99b5fa0ada1b29a1a9b42a05ba1859a3c9b2da05ca1969ab09abe9f2ca1e3997297099dc79e5e99309c8ba1fea2339c358c6b9889990a99e31c9d23cb24bea827215f2758286aab3c20462696272dac461e8e249c252dacee1c66220c245eac8d18161eba1f46ac5d1128177b155cacd795d09bb49849acab9a1da0bba02fac6f9ccea14ba31dacd69d53a38ea473aba99e79a468a58faa139f16a513a6d9a9c59eb2a4e7a5d5a8b89ddda306a501a8439cf8a281a419a73c9c54a29ea3a3a5fc986ea087a1a6a43f95489ee89fd0a20e952e9b7d9c459e228f75949c95a595a59229940995bc954594509c869d5c9f6498bc9e4fa0caa2f19a46a1f6a2f3a4809c9ea228a4cda4c89cd6a212a46da4209e4ca440a5c5a4649e5ba49da502a5919f94a4d4a5b6a5a8a059a587a6d2a50da41aa582a6daa412a437a445a5fea29da035a584a67ca32ea009a56ea65ba30ea039a548a607a3a79fa0a4aba587a1a79e4da488a5bfa0579f81a4a0a5e8a0c59e33a443a553a0e79efea3f7a405a0149f03a4faa4fa9f8a9ec4a3d6a4309fd39d01a3b9a4409eb99c5ba299a4879ddb9c2aa223a42a9dd39cc4a196a3d59ca49c8da18aa33b9c9d9c89a143a30e9cc89c97a126a3379c959c72a1fba2f99bc99c65a1bfa2fd9bd59c1fa14aa2959bc59c06a12ba2709b699ce9a053a2cb9b4e9c13a193a2f69b9d99719e7ea0fe99229c2aa081a4d099248d5597839856994b1ca2222a2428a83f205a266127c3aafb1f4f25792631ab301dd023e524b0ab571c27226e2327acf6193920ae2033ac8a145e1afd1c89aca48ec3984e9b0fac10982e9e469d85abe19b41a189a249ab169dd3a257a4ddaae09d3da4faa426aace9e6da487a5c8a9049f79a4c1a5faa8fa9f04a49aa479a8109e20a410a4a3a7319d94a205a4b5a6c09b33a284a329a60c9b72a1aba2a3a5709ac6a0f0a14fa5799bdca000a2f6a4fd9a0ba13ba2f1a4a79ae1a022a2d8a4819b1ba161a212a5749b46a1caa217a57b9c33a2e6a317a5309d9aa3d9a467a5ef9d08a419a578a5089f02a4d3a477a504a030a582a69ca58d9f6fa595a644a56da02da53fa690a405a00ea52ea7a6a440a00ea5aea6dda3c69fc9a4f1a58ea3bda0dda51ea777a378a03ca589a69aa295a021a57fa657a1d19f88a49ca573a0789f55a467a534a00b9f18a42aa5f29f849efaa327a527a0489ee6a327a5c39f859e62a3f5a4429ee79ebca263a4679d429f92a267a4119d4a9e2da245a4509dfb9dfca1c3a3b29c659d85a10ea3419cc99d56a1a3a21d9cb09ec2a029a2fc9a529d89a0dea1129b609c5aa07fa1649ab59c40a02ba1ed99a29dfb9f24a1bf997a9cf59f1ea1189abc99099ed49f5f990f9b47a070a1389bcd8c6f9418951e98761c82221624b8a7821f9525af260aaaf21ec624f62560aaf51c19236c248eaa561a8c20e321b6aaf0180c1d2c1edeaa540d001692148aabed938099be9a5fab9098ce9e099fd7aa0b9baea03ba1aeaa729b71a269a17aaadc9da0a324a4ffa9659ea1a4efa593a9959f1fa511a617a9aa9fe8a413a6e1a8d59f21a528a626a8cc9ebda4d4a5dda7199e3ba44da552a7d99dd3a3c1a4c0a63b9d08a34da42aa6159de9a231a40ea64b9cd4a261a4f7a5e79c16a3b8a4cca53c9d9fa3ada4d2a5329e8fa3f3a486a5eb9dd5a3e8a466a5289e02a4cca462a54d9e7aa4b5a55da5f79e90a4c6a573a59a9f20a572a6e6a4119f2ca424a53da4069f6ba4bfa524a42d9f57a5a8a63ca4ff9e81a48da582a2a09f69a45da57da15ea01fa538a6a2a2cd9fb5a4d0a582a1299f20a424a5e8a0839ef6a3f3a427a0ec9d84a3d5a4d99ec89d49a3ada4649efd9d34a396a47d9e779ef1a26aa4409e579e96a230a4169e109e55a220a4c89dd19cd3a1e5a33f9d9b9c75a10fa39b9c9e9c52a1bba2269c689c06a152a29b9b869ce8a02ba2359bc39cc5a0e3a1029b669d77a0b9a18f9aa49c5aa086a1c99a329c43a08aa1439a819b09a066a12e9ace9a03a052a1399b929bb3a04ca2789aae9b32a071a14999fe089005a4058782c011d2147314379a8c1ca0239724c9a7ed1e31254f26baa9c71c99221c2437aa811bf2203f2240aa2518441efd1ec1aa3310e612cd0dddaa7992009a1b9a4eaa0793a39b859b12a80a96f997e898c8a1ae984ba0c4a146a7019d2fa344a406a9ad9d4aa4eea4eca85a9fbca4dda5f2a881a0a0a4b8a501a84d9f71a496a527a88b9f0da4d9a4c0a6919db4a3e8a41fa6a69a73a1f6a257a46799699cf59c1ba0ef9979a0c0a1eaa3359bbca10da315a5eb9c82a293a39ba5b79d7da3a0a436a5959e8ba4c9a5eba40a9f73a48ea586a4169e53a452a5d7a40f9ee5a3dda482a46d9e1fa4fda431a4a89f87a485a5d5a33a9fb9a4c2a5a1a3fc9e56a413a58da2439f60a462a544a2299e16a443a5a8a1b49de2a250a4eba0ab9fefa4fba51ea2fa9fe1a4f6a543a1549f27a48da5aaa0199f80a3d6a4d39fd09f58a39ea4919fbfa06ca394a4069f9d9f76a3bba4279f8a9e1fa387a42d9ef29dc0a245a4c99dab9d95a22da46e9dce9d9ea226a4669dad9d48a20ea4fc9c749d0ea2ffa3c09c7b9ddca1a4a3569c539d9fa18ca3fd9bf59c59a143a3d59b6c9c03a1c6a26b9bd89b9ea058a23e9b889b71a0c2a10c9b1a9b1ea055a10f9bf69af19f1da10d99d8999f9e23a0ae98c198db9d409f9c98a604e3044805480245042b0c040e328f14110c177517789b631a882071216da62d1bc821a72203a93d1a3220df2080a9b8187c1e0420bda995136a19ac1a82a9bc84668b9d8c0fa9678c16952d9867a6b18c089146910b9c448f7090059169927a93c8956c97ef991d92a29b129eba9fb197019c629c7f9fde949d9eafa0b7a0e699b69d209ec2a0ec9ad7a036a2daa2309bd5a1e6a3eda3099932a191a2c8a2709ab39d229e1ba07f9bcda088a213a2be9c7da24ba4b1a3649d3ea37fa42fa4d29d8ca3c2a447a4b99e09a40ba553a46f9e52a489a552a44b9ef0a3d8a41ca4729e36a44aa59da39b9eb6a3a9a4f6a24b9d4ea3b2a46ea2b099c1a01ca211a02c92569719984f9673937895cc9694948d9b8aa013a2249e6b9e95a38ca4c3a0b39fafa47ea53ba1309f23a465a545a0449eeca35aa509a0a09e7da3a0a45a9fe59ec3a3bea49a9eb19e9ca3d1a4c19e4e9e50a39ea47d9eef9daca23da4c49d7d9d16a2c7a3d39c169dcfa18aa36b9c9e9c8ca162a32b9ca59c86a154a3de9ba39c77a10aa3da9b6e9c2fa1c6a2fe9a709c17a18da2a39a589ceaa057a2689a1b9ccba04ca2889af59bb9a012a25d9acd9b94a0e7a12b9a979b6ea0b3a1f999239b22a088a16299a69a27a08aa17a9a6b997c9fbaa0c09882042c04db05bd8007023c04240a69905d10ea155516709c3e19a21fd420baa5cc19b020d22139a895188b1e301f4da84d14cd19591ad1a661855589cf8975a4e18cf89403982ba6ec901499989b60a5dc95f59ae19a5fa3f39819a0e1a058a64c9bb1a116a39ca73f9caea23ba4c3a7ee9c82a362a45ba7649d9ba37ca4e2a6949dd2a303a594a6a89d2ba34da4eaa57e9d16a36ea437a5979c97a12aa3dba32c9cea9f8fa016a1dd9c69a186a26da28a9df8a0fda15fa2e79ddfa0f2a113a2389c74a0eea1c1a0239b769ec29f769eec9c98a0b9a12ea0309e49a27ea3d0a1419e51a35fa494a2919e78a355a49aa2899e45a365a46aa2cf9d92a210a4a8a1359c0aa15ca20fa0d69a819f52a0329d569b39a09aa1649d569c46a1c6a2549e619d8ea28ca301a08e9d63a2cda3989fd79d2ea2d2a3fb9ed99d67a209a4729ec39d6da213a4239e869d33a231a4289d689d3ba219a4469d559d12a2cba3399dfe9cb9a171a3bb9c8a9c76a118a3559c569c1ca18da21a9c609ce6a055a2899b4f9cd9a02fa25f9b4d9cd4a00ea2419b149ca4a0f6a1c29aa49b6fa0daa1759a6d9b69a0c7a1269a849b63a09ca1c899b49b4da076a1ac99fd9a2da06fa1b199ed9a20a027a19f9a149ac39fcfa0159a829be19fd5a01a9877080f112512c5955d1baf219e23cfa5881d24240f2574a8c11c032340247ba8d91afb20312244a82919641f6d204ea8f017a01cd01d7da87d15e71a7e1b93a8ed0b970bb68cb7a8db92d39a659b68a82796569dba9e23a88698df9ff7a0d2a7279ad4a0c2a125a71b9ae3a02aa14da6589b54a184a2c7a5199cf8a16fa388a5469c68a2fda222a5e29c4ba2b2a303a5af9c90a235a425a5239dcba22fa4aba4559d6ba2d9a344a4089d60a206a407a44a9d4ea218a486a3079d2aa277a318a3459dc7a136a3a1a24c9dcea13aa361a21a9de9a186a305a2bc9cc3a146a3a8a1d19ccba130a3dfa07b9ce6a0e5a142a0d39c7da1cba284a0759db3a22ba418a1b19d0aa228a491a0519f73a219a451a0cd9d47a2bca31ba01e9ed7a261a42fa0639f0ca4c6a460a04a9e1aa353a4559fd99d9fa222a4c09ec49da4a21fa4849ef19d90a22fa41a9e959d10a2f9a36a9dbd9de4a103a48e9c929dd1a1e6a3469d7e9da6a1b7a3ec9cf89c51a1e5a2809c599cfaa049a2d89b1d9ccca036a23e9bd29b93a00ea20a9b989b8da012a2229bd39b89a0f2a1079be19b72a0cea19a9a5d9b29a079a1409aa39abc9f36a17499379a7c9ff1a0ef98829a9b9fe0a07a99f09ad09fe9a04599919b09a002a15d9a5699969e38a0209a200e12196f1ae4921c1baf21272316a5641c22230d24b7a7c91bed217023d0a7231a9d200d2223a8c118ca1ede1f5ca87c15641c771d6ca855106516b8156ca89e8b7294bc9740a8a292ab99e9981ea83e96599e339ca1a75197c89e979f06a727992aa06aa1eda6459a11a15ea273a65c9b70a197a2f2a5ed9bc0a1fba271a5669c65a207a413a5859c00a259a3baa48e9c4ea279a382a49e9c76a2eea375a48a9c6ca2b9a324a4c19cf8a142a334a3809c25a2b8a3cea2b79ce8a137a347a29e9c24a2b5a344a26c9c0aa268a32aa2f89c9fa1eca282a1219daca10da33ba1379dd3a118a3f4a05f9d3ea296a33ba1f09c1aa29da3eaa0be9c61a1a0a255a0849c21a178a2f09f689c3ea192a2ab9fa19cd3a189a37e9f8d9c02a2bda3fa9f549edfa219a4e59fe79ec4a244a45f9fc59ebfa23aa46f9f389f54a21fa4b99e9e9edca1a0a3799edf9d94a10fa3ec9d339e3fa1b0a25a9d739d6aa1bfa21a9d459d23a1d9a2719c6c9ce8a0b0a2509c269cc2a085a24e9c409c9fa03ca2ec9b6e9c83a00ea2549b6e9c5ca01ca2959a089c6fa013a2889a249c87a009a2ce9a309c46a099a16c9a559c40a095a13e9ad99b0ba051a1c199ab9a849f4da12e996e9a259fd9a0e0987f996e9dfd9e0c98dc97409c4d9da19600000000ab020080e502e2018202f399ec0fa315201821a00e0d3018ac1a91a1900c7111d0126ba04b083c103c12ca9fff121c15c9162ca04383ea041d8791a012904e9453937e9d6794d1973298ba9b1e035105be08989800006210700c5294000078020000d78800000000000000808409780c490a9390d81084145b16a9920f03ed105413ed90f5004a024009de8658800286df839c8a0080008000800080be8f5a916796619bfc9544a0f9a1c9a8528978a2f2a460a7e997029e349e07a1bd9a7298319caa9bb7920c9b219d709f9895ef9b429df59e7c94ab9ad79bc3958891349a029d0994cd912197b299a49800800b8f6b951c943a8d069015933695728d639034910295138fa4930b943c97108589959e9747980f947599f9999098db98ca9d04a0af9bbb9bcda03ba27f9d769dc3a11ea3529ef99c1ea2d0a3c39e7d9d0ca2b4a39a9e989ce1a1bea3339ef89ca5a149a3bf9dda9c6da1c1a2759d5e9cf1a068a2919cc29bc5a02da25b9c389ccaa0f4a1539c599cd8a0fca1609c579ccea0f5a18e9cb79b7da07fa1699c649af79fffa0019c4f9a679fa6a0e99a0e9aee9e2ca098998f99f99dcd9f24984298689d469fea96ea98e29c049efc94ef98949e5aa02b98b4983c9e02a08d99ef9ac29f49a14a9a240000800f01008073001d065303a08e500cef102611bc9b71145e1cd11d45a4b40d7e0fbb115c9b8009f30c020dac90ee144716bb15f59aaf0c3e12081494a55b8c7d9073915b9ad4902e917a90079024094d08d008788c310bd8080000c283ca019f0000009f8014800080008000802700168000009a8000800080008000800000000000000080008000800080008017802f801c8010802b8000800b8000803487f38e7690629f4a086890718b64a7ca8b7c94a195b99bb28a99909292418c53937996ef976c0ecb95059b599bb1a0a9912d945d942ca1fe84f4858f833591408ed88fee8f7d917e97859c269dbe9faf93769ad99b5ba03e9026911591a48c92820b815a80010e18046e0a3208ee0cbc8db69381953b99290b8b0f91105e8c5d99219ec59fd79b089bc6a0f3a1939e729ce2a008a2959ef69c18a29fa3a19f9a9dc8a23ea4bd9f2b9e56a2aba3259ed69c23a26ea31a9e319c52a183a2189dbf9cbba0baa16b9c6d9c05a11da2d09cb99cd7a03aa2c19c489c2da1c2a2539d839c2aa17ca2139d669c02a112a2a59c829cbba080a1129c1f9dafa03ca1ba9b729ccaa0c5a1a49bbf9b96a0d0a19f9a509c71a0a0a16a98f59b75a079a1fa95779b57a071a19998fd9b96a07aa16b9952995d9e8e9fa697dd8a5c879589a9860080db8a7292738b3508320de70a019dde189120882231a72c1b8c208c2131a5b7100c14bb14129aa9119b0eac10c39bce82a889688bf8a5338d6b91c592c69a22911591dc8fc78a008523840a829780f801000000000080ed000000000000801f80008000800080008000800080008000802c800080138042800b81d28026800080008000800080008000800080008000800080008000800080ab82ac8419912a805c80d980ab8417829d823d821783008066830b8cae8088950a961b983b0d9694f79870994f9e01917895d795319f3f8aaf8d7f8d2f912b8fad91ff91728ef5937e9b6b9c929e6d92d9984f9af29e4c89e4891491a08d34015706bc02ed0f3a09d60dac0ab40fe08c1394cb957b9ae50a2910951159929197549c639d0b9dc29c3da15fa2f49f9b9d29a37da4aaa0ac9ee7a3b9a474a0299ed8a3eca40aa04f9ed9a3d5a45c9f659e88a395a4939ea39d95a2faa3079e249d4ea2d0a3579e769d83a20ea4439e659e7da2f4a3629ef1a000a2b4a2f19c749ea8a1efa2439dcb9df0a00fa2e99c9d9b45a071a10c9c269b549f5ca0299a1f9afc9e3fa066990e9a3c9f74a07598039b08a0eba00497179b6da0bfa12f980e9cada00ea28a99b094d19a539cb095449b18a0caa0b399e30ac810ae14e49805847a02b0876a95d91b8e2119231ca9c41c6f222b24e5a998100784b703e89893039481770186897902d10094024d89a0009c003a8041843b8107832a863d8487810080008000007c8200802881000000000000000000000e000e0000000e8080828f8123812e826c804d804980b98200806a8085803d8100807f805a80288100801780a38046800000148009806680008024802480b48000808f803980ee800000a300230110817b8034844785b802ef82998deb90fc0f1d93ba94d3952112fe802d81790a9898c0117814da14268bac066808dc0878826e81ef8119829486188911880d8768909a8957906b910299c786a5882b88c69092018507c60681810c0c5410d20efd87898d6f914394f797800fc713b514ad911598369d9a9e799c609d23a26fa3b49f519eeca3f6a4b7a0de9e27a406a5b9a0d39d00a414a575a0559ec5a228a4379f8b9dbea21fa4f19ecb9d77a2cfa36d9e049e64a2a9a36e9eb39c09a2daa36c9eef9cbea127a3e99d939daaa1bfa2c39de59c80a1dea2589da19c35a165a2c49c4a9ccea006a22e9c199b54a0b7a14f9b1f9a2e9f9aa1c998339a079fb9a03598609bc09efe9f6695d59ac99ff9a094984f9b1aa0d1a0f898049b87a079a16899499b609f88a0e2993584008077800080410017806c82a1800f098d0e920c23995814b01cd41edba5de0a920d7e0e13997f00b680c7009e8871806882c08237896080378352818087e5830c8527880c851781008000800000318200800080000000804a800080a3010080008000800080ae00a100a2026884c1853c84ce855d8500006b809b80428133806f806280048100801580328069800080438039809d8000001a80ff001a8000000000130000800080198000803080ec8072830286e800f583458dc48e450d2a8d4692c793d20f8383578eba9073944382b084cc876e889a82fa880388aa00a9806d834584ff87eb89bc8a998bca90df85909007922e972f841e8d118d4d8351047305fc0478037c09740d610f5489af88ee90919289979a112f15a5157296439a6b9fb4a0a39eed9d4aa37ba482a13e9e9da3aba4a5a1b09e0da406a5bda1d79ef5a3e6a452a1b29e46a366a447a0619e40a355a4209f529e25a362a4069f9d9dd3a246a4689e289e96a2c4a3309e3b9d81a220a41c9e919d3ea292a3ba9ddd9cf3a1a4a3539dc39ca5a105a32d9d839c5da1a2a2cd9c0e9cfca01ba2809c989bafa0c8a1289c019cc8a0cfa1719b839bc2a0f8a1a7993e9b53a056a190988399f19e85a0a1981c9ccfa0cca1429c6e9abf9fc1a0379ae98500809081008000800080c7810080f2094e0f900d65995916191e7120caa6690ea4111a145e9b878000800000000000800080008000800080b4804280b480e9807583fd829c870603f400000038027308000011010080000012030000478000000680000037805780e880a280838115814c825f828b874680fa80a581c28110805180d4802a81008029804f80608000800280a9800480000000000f0000800080008000800080008000800080008000800080008000800080008000800000bd82ee88788dc0823685c78e31918d93cd810c84cd842886078277803081998000809e805e80d8827884fd809c849291ea86b8011408ff980c83bb80238d4d90bb02c002a6002e81fe09480c710c3f8a91886990ab9105976b0d7c0cd40fda953d99ec9e9ba0f39fd49d27a2d0a3daa0609e89a3c0a43ea12f9fcfa4f9a5e3a1f09fffa424a65fa1869f85a494a571a09d9e3ca44ca536a07f9e20a444a532a0a59ee8a3e6a449a0af9d21a37da4919f2b9d68a2eea3849eb29defa1faa2b39d159dcaa1f8a2919d769c6da1cba2469d639d6ea14fa2389d079d53a17ca2fe9c479ce2a0fba13c9c359c6ca040a1639ac79b1ca0e3a06198d09b43a037a16197279c7da0baa18499099b8fa0a8a16e9cf9982c9e369fa898808343826880158333801e80ed800002008000800080008023807a847681ec88848095817405898900800080008000000080008000800080008083814c8181809980eb83368518898d004500008069024a038201670337000000fc002e0044010000000000000080310035807c0007811a81888101826e865c802a00d3002a0019001d00380009810080208005805f800080418088812f8000000400490015800080008000800080008000800080008000800080008000800080b481008091005a819183418be20000804989158f198a21804d882b8b15869c838a8624860d84e184a58a4a8d588c079463974898cc9a5e91f5968a97439c1197bb989998ed98a991c09a699c419d99918094a7944297dc90189535964d9a9c8a4e87e58275974f9b4da0a9a1f09f119fc5a3e9a490a170a07ea482a52ba21fa0a1a4a5a53ba203a064a44ba529a1329f2da43aa599a04a9f85a47da57ea0699fcaa3bfa4259f809e49a383a4869e3b9e86a3afa47b9f2b9eeda228a4e39e299df1a122a3f99dec9c61a15da2799d689c4aa194a2339d5c9c29a14ca2f69ce09be0a0eea1949c9d9bb2a0eca1409c879b83a0d1a12d9cd49a54a0e4a1b59bc59a43a082a2b99a4f9c8da07ca2dd9ae59c10a19fa4bd9bc59c4aa17ea2cf9bce82e9819280908161006a0023813e8100800080008000800b80bd8158810d8467805981c105b9880080008000800000008000800080008000809580f6803200dd803a851c86c0899180958000802302be80ad80fd00198600803f8054813a810080008000800080d50026807a007380cd80d480c680d08330808480f08023812c802380558080800080348000801180008057808d80258000000680140006800080008000800080008000800080008000800080008000800080008000800000bc80f183ed881d81d08000800080008000800080008000805180838318852c015589f0852d8425857e92a8960798ea99b191c8973698909c778bdb8f7691950e0080008000800080b687008049840080df877b923e95ca97588cf48d328e1e94ea99a19e9aa0599e1d9e87a3aca409a2b69f40a438a5e9a19a9f46a442a537a15d9f30a463a5c3a0c69fe0a39fa54a9f07a046a45ca528a0f69e1ea464a519a07d9e71a38da4e79e4c9da9a255a4ed9e959df5a18ba3219e689d05a24fa4ea9df29c41a23ca4039e609df0a11da3949d149c1ca158a2bf9cfc9b5ca052a1b39b869b55a075a1a59bd29b1fa0eaa0179b229a409f92a0139a459a3c9f66a09499999b60a06aa1279a2e9fb4a110a3c49c119d77a084a1719c9b850080588100800f8286809884bc808c82df80318009900f0f00158a18bea4cd053a08540d2498008000800080000000800080008000800080898086802e00f081a7883487508bf18277800080360157885384b28267020080d3805481460000800080008000804d80b4808f80a48109804380438043800800158031004080100013001e00848000804a8000801980008011806f80078000800e800c800e0000800080008000800080008000800080008074800080208000800080008000801f80a4810f899d8245833282c684058700807780758877801b8e9b8f20909b8f948fba96a998089f36956c979c982e9dd590e8951296919c8889e08fb29210110080008000800000ef84008000800080b485d28d4692f5928e8b818c608c6794949b59a09fa1e8a02c9f0aa40ca586a28f9fb1a4daa67ba27fa00ba576a6d4a2849fbca429a6eaa1779e53a42da6b6a0ef9f83a4a9a513a1599f59a489a5c6a044a18aa3a1a46a9fc99ea8a3d3a4b39f549e9fa3d8a4ee9eb69e96a389a40f9f5e9d26a39ba4cd9e5c9d92a20fa4529ef69c9ea1a7a2489dcb9bbfa0b3a1839ca59a1ea00ca15f9bfc9914a03aa1209bc49adb9fc6a0569aad9a4aa04ca1969a259b30a036a1db9bbf97c19cf49d0a98979b35a0eba0dd9b16840080648000803100000009810080f6003408df03199405139219641c83a6a309300c570feb98f08000800080000000800080008000800080b280d9803b006381fd866c87b08b868011800080c000ba007d80d30064840080c3807a81278000800a800080438073802081fb81608311802d8038802d801c804780db802a8003804a802780ad8000805880248012000080e380e482118000805a828f833f830080008000800080008000800080008000802d80008003800080008000800000fc80ec8011880a8140846d80008048810080008000800080008000802c820000fc800082b9844181008d82905e9377953a8faf909591c898f38b3a8a3a8cc18c008000800080000027887e8102826681f4847191b694c194d98a768e3a8f4794ee9a50a075a167a0409edfa3f1a4c0a17a9f8ba4c4a5f5a124a0b9a4e1a5bda1c1a005a534a6e1a1dc9ff0a456a6c4a19b9f79a47ba6e7a0e7a146a475a527a0e19f3aa46ea540a0d99ef5a33ea5bd9f899eb5a3e0a4409fd19de4a2e5a42f9e539d8ea23fa42a9ee39cb9a1c4a2919d299c34a142a20f9d8e9b15a16aa21c9d289caea0a9a1c29c759b4fa063a13d9c439b2aa07da1549c9a9b93a0cea1729c319c0ba162a2a29c8b9aaa9feea0159ab39bda9fcfa0dd9ac18300805880008017000000dd80008026017b0a8e0748945114161b7a1d8aa6170cc80e8511b1994d80008000800000008000800080008000800081e481550081812d86b583cb8a51001700000031010204a7009702770000005e0056015e8000000080000000809e819881b782828327804d8091804d800c804880cd802b80038016802b806f80008046800480178000808980408152800080938055803100008040805c80a7800080008000800080008000800080000000806e80008046008481e085878b5504a083598100800f8300800080288100803080be802f850f000080008000800080dc9100953e96879a248f1696de967b9ecf8c6b8d218f239000800080008000007488008001810080ec821791d394c492958b788f8b8e9492989a4b9fb3a0c99fc49e87a3d1a464a106a093a4cfa51fa29e9fb5a40aa6e1a1929f5ea4e8a5cfa0e69e45a477a545a1f59f40a473a53aa0959e47a49ea54da0779ff6a30aa57a9f929ddda21ea5139e209e0da2b2a36a9d6c9d2aa2aca3db9da59ce1a172a3819ec49c80a1b5a2f69da29ce0a01ca2119d0c9de9a017a21a9dfc9baaa0e1a17c9c309c39a00ca1369b529cafa086a1849b539c08a110a21a9ca89ca1a1c0a2a89c079c29a19ca2249cd899e19d069fef972b8300804f80008000000000440000806605860be0087e94cf13bb1b1f1efaa4880c040fc511649ace80008000800000008018807f819580a58cc3907b907d98668e32984f99d7a25588b78a64883294bd00d401fd0245840000c3070e07b1050080d7805f80f58153800b81bb806f828980a3803a8036800c8038803280a7801f80668073803181008067801b80150000804e808f806e80068021806880a480008000800080008000800080008000800080718000801f8000807a80008022005d823f83418ba6800080a1800782ea8100800080d1800080d780008000800000008000809d870000959181929e93bd968a8d5f95dc96a39de78d8a8e5190d4900080008000800000ff870080008000800080288542907789248f6992f691d195029caba015a27aa00d9ebea3e1a4cba15c9fc4a3aaa466a1bc9e2da453a57ba1c89e15a42fa5eba0ed9e0fa4f5a47aa0999e96a3e5a4d09ff39e64a392a46f9fc49e99a3c7a4629f929e89a396a4009f609e4ea387a4b69ed49de5a23ca41f9e959d56a2cea3b39d8e9d7aa2d4a3a19da49c01a28aa3589da79c7da1bfa22b9d7f9c49a135a3169dad9bf4a0d7a3b79cb59ccfa051a2bb9c1d9b59a0a2a1b29be99a1fa012a1c29afe993a9fdaa099991c98649dfd9ec699098300805e80008000000000c98000803003c5091d096e941a122b1a4e1dbaa4020c090dda112b9a3680008000800000008000801a80008000808281e2808180968021820e82fb826000190000004b00520000000000008000006b00000018020000c402970475862c0d3110d512cf95e5031b026c02668462008e00f1014c811680248033802282008062801180268100805280ec80528000002b0172018000008000002000000000800080008000800080000000800080008017800880f9801d803e8066803a8800807b80c38037914d80f8818a835d883f858c893d8cf581038f10917291fc062c8eba94e2974699f691ac95d796499da1966a983c98919c758735981e9a919a249356965d976b955795f598189bb79831963499bc993798109b7f9e92a0189f0b9e26a2a8a301a1269f9ca3bfa477a100a017a426a5a5a11ea07ca4b8a5d9a1ca9fb5a41fa6b2a1bf9f56a463a5b8a0719fcba3e5a4a99fcb9d2da374a4ce9ea99effa135a36a9dfb9c55a233a4879d4c9d20a2d9a36c9dcb9df4a17ca3789dfd9c2aa200a4329e6f9df6a16ca38c9dfd9c7fa1d9a2e19c8e9d0ea137a2619cbc9f82a06ba1c89b669c6a9fc6a0669ac999d79e6da0319ae49a9d9eb59f6d993098339dc79ea499c8960a9c029d5c98fb8300800a81008000800080e3810080df0019075003a2933110db183c1c04a4040b8f0c681095994580008000800000008000808e80008000807a805d807a8037810f8105820f81a300000000000000798000005d0500000000130000002a020080c0800d804000e782f1828684df81da8404836e82160200804182b9844182368045807780e0814180c880b280438000807f804481b18000002f00b0001080008000000200008000800080008000800080008000800080008000800080000000800080718000800080468145802f000080008058800000048070006c03a60b008085812209a7006d80610015023c8a0080568289011b959d80ce80c980ee903e09be0d880d0a8c021431166416e192078275066683b8998c145b177b183198789b789fd4a0cf9d309e30a38da4e8a0d9a089a38ca413a1319f01a410a537a1259ff1a316a5e2a0979ecfa3fea4cda0889e05a431a5dda0209f94a3eaa41fa0229ee8a27aa5089e029f3da3d4a47f9e849f03a389a4e59ef3a091a20da4f49d079ed0a112a30b9ee19c06a129a2479dda9bf2a038a2339dae9cc2a091a1429ca09c07a117a2579cb89cbca0d4a1989b7a9c7ba046a1769b8a9b25a02ea19d9a0a9ae69e4fa0a199769a889fc5a0889a5a95a59bd49cc998d5810080308000800f805280038052000080c680008028800a804b8398017d857580a683850142880080008000800000008000806080008000808b807d818b80b180d581f681908206000e00008046002b000c000f02230000008b010000730200008c0000008c009a80cd810080148104803c817182b080d58096827385dd800300bd8064003a81008022805900eb80008067005380348100001100d6010700008000007900000000800080008000000080008000800000008000800080000000000080ab83000000800080008000007680008000800000ba812a81a4818f05f1907d8f558e4b133e94f498669ad49ce390f0951b97b39eab852b88988a84905e05b007b10849001f0cc80e111204031507170759086b01e00d1014891426843b99019fb4a0b79e559e78a3cba4c0a15a9f4da47fa59ba1649f45a440a551a1629f0ea41aa592a0a19e2ca450a5b0a0319feba30ea52aa08c9ddba24fa5a99ef99e74a221a4f99d719ec6a281a4bc9e499eb5a236a4339f559e60a2bfa38e9edf9cd0a175a3649dce9c10a1f3a1cf9cee9b9aa0cea1799c339cb2a0d5a1839c319cc8a01aa2999cd79b87a0ada1e89b209c4fa001a1719b9e9a2aa069a1fa9a359a179f4ea00c9bf299129fbea0f799959a0da0f4a0769a2b87b984cc90010300807889b5895e0d8d02dd096c0c0685c6041e1012137e09e9014a07d40a130a000003003c002800000000006101000000007300930009041280ca80ae80ca800000130000005f0018000000b80200000000e6010000be080000538000009e0100805d820080bc01700022899786800b0b80be80c9815109018095800682740000809b80a980400000809e80ca80c1002f00540052003a031a0000000200000000800080b280000000800080008000003e800080008000000080008000800000fd8100000000000015800000000000008c0000000000000082027c032d03d202ec0d9e10360f1b897602f20dec0ef098e601d6015a03bd8c88031407aa0aaf80530eac10a2103b035005000000000000ec108713ea144d8a3c9c17a18ea2d69f37a08ca462a520a263a045a44ba5b6a1ec9fc4a4f0a56ca16aa096a49aa5f0a0979f0ca41aa58da04ea140a2d8a3da9d979ea5a20aa4889e849eeea1e6a3c39d179deba1cea3c69ec99cb5a1f3a3889e1b9deea1d4a33b9eb29cefa100a4a49d9d9cdea1d3a3239de29ca7a155a3f39c9d9c10a134a2329c589bf19ff1a08d9a539ab69e54a0aa99559ac59e3ba0079a7d9a889fefa03c9b8c9c44a035a12e9acd99989ff2a010995b9a10a0e7a06a990080008000800080f4002b00c182860100004709020e1c0580005009200abe0000008d040505e9004480bc8180800a015586d088c986f505de828584d6810e029c829e8236813d803182538300804d8041011c0200002a8061007602000039806681c98100803300ef8400800080000000800080008000006280078000801b000080bd8000808801d98094845280940400800080008000004880568000809c00a581c781a982fa056b801981728850028a81008000800000e7810080d78400000080008000800000a288df8aff8adf8a168833921495ba993d88958bd689950be906a705d1099a07570e4312b711c9887408c21086104a98d103580867082d8762104c0f0e0eb30a2212970bc9066a053e02880dea0d0b0d0714ff1581162110109c73a0b5a1e9a041a22aa423a58ea2e19f9ea3ada444a1989eb5a3e3a442a1d39ec7a3e5a4d8a0049fa2a3eaa465a0d19e25a44fa55ba0869e12a43ea518a0329e67a3c4a41d9fa99e95a2efa3eb9e489d3ea206a4129e119de1a15fa3869d929c7ca1f6a2e99c229d25a10ca2549c489c05a16da23a9c8e9cf0a0e3a11c9c6d9cf1a0b8a1019c789b9fa0c7a1179cc59a66a086a1469cc19a50a048a1d49c479c98a0a5a1ba9b869b86a08fa1b29bab9c48a1b7a2cb9b00800080008000804207b0084d0923080000f80fb81160060000230dd210be81630100058a0a0081ce89b291a392d381369390957495ca97008012940d0949a1a1883190f58c4f988584cc882382eb8171067908240470820e80f8001901bf01d48143870080bc040080008000800000dc8000800080000000809e830080c0090080cf814f817d071d8266860080290b0080168107804901008028002100670100003b0213034a0400804f8181815f0900809c87b98454040e8032843981c2020080af822a80d5047080c480e980d3038c80288300807b07ae8589847283e0072504e50a7b09c20291135f168715188ff500180f110f6b9a998016012201408e7b0de40e390e4309e20ab60c5c118706790c8710b60f0311c51300160e16d8106599809ef69fa49e6b9db4a1fba253a1839e1ba437a5d2a1709f1fa401a5f7a0329f2ea43fa5a7a09e9ecea317a54ca0cc9e7ea3b7a471a0129f1da360a40ca07f9ee7a286a4ec9f589e85a237a4a19ebd9d5da23aa4c29dd89df9a1b4a38a9d119de9a1bea31a9dac9d9ca1e5a2d89c099d32a1d6a2c49c349dbfa04ba2e19c3e9eafa086a19b9cad9d82a04ca17c9cb99c5ba0a8a1b09b349c53a071a1b69a2e9c14a0f9a0549a259bea9ff5a0dc99b99b769f84a041980080008000800080a30251031c81aa000000060f631134850000380ec6101a866909a410ae12308a89804185bd0561882e87298cbd880e980080bc8b1b8ee0a0848c7891ae905098b38ef890c890ae857684d684f486f8003d0002020c03cb0356821e0cc501a70d03807d80308068033b82008000800000008000800080000000809e8300802d0900801c88608201047381b18351803b01488020817080df010080950035800406008025817a80ea080080c4028a04f6061200cd0317025c088700270205027b026e00640100009301e98187811781b3057180c9818680f4043002e70481043c00e90f1c12e910a78d1201010d680a7398af81c480b58ccb8c3f09250a750e7a03f00c5b11900e5f04370d7515e114200908165019d6194b88dc99539f9fa0059f469e00a343a43da17b9edda30fa5b9a1629dc7a3fca42ba1e49db9a225a427a0f09d66a2f5a3139f299e8ba20ea4379f219eb5a249a4619fef9da4a22ea4c19e969d89a22aa4339e619ddfa123a3b39dee9c2ba15ba2339d7b9c2fa1c9a2099d799c3da1aea2f99cb79ceaa00da28e9cdd9b61a086a1bb9bad9bbb9f03a18d9ad79bce9fb2a08a9aff9be49fd1a0e39a339c39a01ea1aa9a109c5da063a1a19a389ae19ff0a0b999ef9b11a0e2a0069a00000000eb03008000000000000000003602680f98140a08000025126f153d0fc204d40ed410b80b2d02eb07d00b9501810a480d3a0dbc970e81ff9275949a9fac904995b99435973f86b0904d9223012300f4020000110ad40900007b110000008000000000000095894c80008042000080008088800000f18400800080000000800d8530891f072589dd860080a20372800080008000008586bd85328a3f0100800000000000002880b180d5817f00008000800d810000df044e0767015908d4007f06a906200947821781ad818203a086c5810080450053820582b3810e009c06600300004200810af30b180aac009380590115001700bd002b804a002b00140a3d05a0006100d10fb50bf40bd3001b0e8f10e912d902ab149a163e18e48cdd99809e4ba0129fc59d58a3e8a498a0a39eb2a3caa46ca15a9ef8a245a49aa05f9d90a218a4ad9f6c9d3fa205a4219e6f9d21a278a3a49dcc9d12a295a3749d369d51a219a40f9e039e85a2f9a31d9eb99d86a227a40d9e529d40a2f1a3cb9dae9deba148a39f9df49ca3a156a39b9d1c9d72a1f4a25b9da99d32a157a2a69c949ccba0f0a12f9cd69c79a055a16a9bb79b5fa095a12a9bfc9b50a06ea1729bfe9b69a09aa1639a959ba3a02ba2d89ad999cf9dd99e7d983e06ba0715081c8000000000f401008000000000000000800000e8042e082b8100006d065d0bb7001a001505770876800000a30b110b768000004f0ca20777009b003a060104b3810080f1837b83d1822c80dd800080dd0000800080298000806c806b826580620360800080a8830080ca864b86008038000080008053800080160008820080ad800000008000800080008000800080008000800080008000800000be8100801e0000000080c78000807a01880000008880e20065800000ed80b800d600ab00d6804f02c301c6039680fa02c100520158805609d2031c01c480e50463056f04ff80240b9b09000079808d059802000007800000380900001e000000000000000000000000000000000000000e01750c1700ac113d155a15fd8e2099469fa2a0079ea59d7aa219a455a02f9ef6a242a4b8a02c9ea5a236a41ba0079ea3a23fa4009f579ebba247a4889e639eb3a225a4959e4e9d24a2daa39d9ea39c82a11ca39b9da69c21a184a2da9cb89c13a122a2739c699d16a12fa23e9c739c23a18ba2429cf39c07a137a2cd9b579ce8a04ca29e9b149cc8a027a2229bba9ccca0afa15d9b2b9cb9a0e0a1609b829ca3a095a1719b059ca2a0eda16f9beb9b62a0a2a14c9b719be99fbea0359a889cb0a091a1cb9a1402c50409082c0000000000a4000080000000000000008000005505ff0afd803501550cca0fa480c8026e096e0c9f8300000000740800800000000000000000000000002e020080000000806200008000000e8000000e0000800080a78000800080538000801c80008000800080008000802080008012801a00700000007080f6805081f980058107837d843e812e81ce80e7818780bb8034808f808780b880000054808d800c8065009e86e08711818181cc8554883b82b40078838a843e865f8091807d8237860000d201c704c880ee03c109c00abd825104430d380f2d82f3079a10b211f280d60a4f13fd134f835f0605142814f6800000ef1137129a000000b40d380e4a000000fc0cf30b60004b1072122213c500ed111815bf1373911b9b809c639d489c4f9c77a086a1e29e6c9d60a1d7a28d9fa39df7a1d4a3639f899df4a107a4c59e599e17a2c1a3e89e1b9fcca182a3b19d169d73a131a3159ebd9ceba06fa2f39c399cb7a009a2839c889bb4a02ea2659c549cd0a03fa2659c3e9ce7a046a2609c119caca00aa2389c549b43a079a1959b859b01a00da1209bf89bf19fc4a0e39ac79bf79fe7a0649afc9ac69ff0a06a9ade9a739f91a0379a2c9aa69e14a0fd996699d19e55a0c199aa98b29dfd9f7d9800000000000000804f0b7b09730e79810000b0080a0ce9820000d80676074c830000d20682068a816604ef046007cc806a021d01cc00dd807b002180000026812080048100803c820381cc82d980cc821181bf82728188832e002f824080908112820f8480825e8070815581e0811a80bf8142830882858100804e813c80ad81008000800900008000001d0000806b8000000000920000806d00fc8052806181670041008c00c28006000000460000800e801d8000807c80000000800080008000000900050011800000120096000c80000000002400008000000000000000809700d500420033810e011d01dc00a580000000000000008034020b0784025981e4006c0892084e818f0ca70b1e0cd181380d0212d9118b83c4127f15601567916b99329eea9fce9c939ca5a0c2a13d9fdd9c84a1f0a2149f2d9dd7a148a3b49e169dfaa18ea3649edc9cbfa158a35e9e869dc4a1d7a2179e159d88a108a3c59d4b9d56a1b4a2fb9cf19beca0a4a2b79ce09ca4a0daa1729c969b61a0eca10a9c8a9c1da036a11b9b419c08a003a1739b209c0aa060a1919bfc9b16a068a1319b0c9bbe9f2ea1e49a249b669fa2a0ae9aef9b779f89a0e399209bcb9fe0a02f9a229bce9f35a1529b3f9bd0a063a2159b6299849dc59eed9800000000580c0080a1095f088a0a7f8d00007007e306a7910e0075005702669057803a814301418f4a00bf01140306910a02ba03dd03ce9265038c025f048a932c83c1875286a693e1825784288411945700ac009a0250921e04c703ee0315934582b882fc82f690068222836681f38f3e818b826c80c49043809a817a80449158829185b787ff90f782d987118909914982da86a08615905a81a381b280ca8ec180088212811d90cd825a8438831a9004843886ff868390ec81ca82b781a29043816e81f880a78edc81f3811f816e905981c3819b81a98f0c82f581db825c9061812681e6814290f6805a80ef80a38fea813481178142908d824d8162809a9064807c007200099118018503af04d790bd03b309ca0a8e92b88457886b8aec97fa99789e779f2a9d399da5a1f1a2d69e169e04a23aa38d9f869df4a1aba3899f789d91a1b3a2e49ecd9c45a1aba2049e3e9d60a1d5a27b9e8c9c7fa100a3609ead9c65a12ba3b29d119d53a187a27c9d829d38a14ba2c29cb79cdca05ba29b9c7f9c97a047a2689c319d75a0c7a13a9c879e6da04ca1269c739f74a058a1dd9b3a9d4aa0ffa1c39b7d9cf29fd9a1c39ae69a6e9f03a29099239c6c9fdba0ca99ca9b869f07a1d7990d9a6d9ff3a00f998298849cb09d1d97 + image data: 19200 + _typelessdata: 332444202821a4266624de1d29205225ce26b41c9f2083248525f81ab422f024a71daf169724fd255e8c2f139129e524160a9714a72b90254c2023207b2c3426ab2412243a2b3025dd253125f9285e256327ef2556258e241a28fa2621244d2467282d289f258e22ca28982852274f2043299228de272a1c7129da28532851194f29f828a2279c10bc289128ba26f4909026bf2484213d91ee9950a12b9fe09e0d22b82191236f27c221cb20862331277121131ec121d925981fc91cfa2117287414ad102722bf27b19650927122f525339851951926202600000000df1b0000000000000f1d0000332327227224de2319285c268521f2253c280327af21d724b328cb2700230123de256525a2201e20e129f7280d28c41c452ac7292a29551a332bea2a78294f18f72abb2a1a298d98f12835281b25bf9d0a925ca0d59dbca2cd17a51497182b1c3220a41eb922c0252a1e3e1d7a212826ae12431450173c1f2d165417972149264c0f49118c22362833099d8a111eaa2600000000c31a000000000000111c00001122f3234923232433269425f72103256f215d21dd1f3d1e9e293d292e286a21892c6c2c2c2bc51ec02c612c7a2b0118602df92c432c4e927c2d4f2d5d2c4199332d122d1b2c4ca0682b782a9528c1a0f81c2c9d4e946ea52e197317e11a431d3d205c204324f7253e1c041d82214125500c3c0eba15e91968175819c420b9263518721aba21be2895156e169d1d4a27000060030e13a10e0000171238179216b924c424462324254b280a273c243425f72296221b21751e022b952a88294420bb2da32daf2cae1a962e1a2e562d9c988f2f182f572e9d9c14300930e42ecea030302930092f31a5492ed62d912c88a4ac208d154e1cafa83d1af118281ca61ff520992056241227811d981fb1238d27391cac1e06230829701ad81ba021d1281f1b2a1a88204a29a51aed19b81b352820154113e012891c7d18e3197a19391cc125b7256f2472246d29f928e42723256a245c241b236f1d5e2c4c2c952b7c214e2f1b2f642eb01e6a302230902f029357310931c630699d283237327c3158a37532a032c53192a75b31303147306ea8ed2587223826b2ab1720e4200d24c3267121632268252829391e25219624ae28b41ca01f2d234229231c671d6d22a729ef1ef21c7e20f9299f202b20d21fc1293123e6218621ce2850219a20301f7122c9284028692776260c2caa2b1d2a5227022dc02c292cbe25692e7f2eaa2d74222c3014307c2fba1bb33174311e310d1a6a330533ce32b49b97348a343b3463a319352f35af3445a89f3490340234f1aafd27e5267e290eaf7f201f2138248126141e41205723c426e81b221d1f22fa243818221bea1db023981a3d1cae20ea26d21dcb1db5201129c7201c204e1fc8287f1fcf1e361e5d22b2263a2604251928c629ab2998288628522c292c4a2bda26812d5b2da82c2426122f082f372e0524e430bd3075308f129e32613208322e9d813463344634899504360d36c33535a46e37b537103761aa3838383883370eaf772e362e292fb6b34b1f52201a232e260f1e562001230e27dc1b201df9207c256f192f1b271e3925de1aed1a851e4c25df1f4c20f220b6241924622454245a233e26a626bc260a23cc283129b728b721da2a332bc52ac6206a2cbd2c4f2cb720c62dd82d752d6420f92f0a30772fa41c423144312631089c2f330f33bf3248940035e134bb34c295bc36a1366d3666a446387038163875aba639d2391b39f3b08935a035e73599b97c27311e6b208a24c229a01fca21bb26222bef1f26217327cf29471cb222dc26de23bd0c1e2555273c982193e12a0e24df94ff8b682d10256e1ca61de92dfc1fe0232722ad2c8d1de2258b25632979209427e426242652203e279b2678208d205b2847270b24551d082914286d263d1840290d28a3275298c02947282a28bd9c6429f427bf275d9e2d287a2619261fa10f25b3228321b3a2fe90efa1949c87a4a11f691f96218b2489237b2007241d2741280720052433286528a31d09255629fe1fee9216257329fa9eca9cd925b529fe9e3b9b1e2c232806962111662ca6241b21401f1f2b4d265a254f242228dc24f4273c26282054259d284127e2187e24c2271525c190c5201010b09b38a3e119dd28e6261f26be0f6d2ba9294429989c6c2b012a8029a9a0272a2829c228e0a3f727a7262e250aa55a12fea1e79d97a638058b11da145916e31fd61f0a2493265e21c12025250b290f21331d1a24d927561d5419af24c128149824997c216429179a0397ae22d4291c8caa8c3d2a5c2761203e1eb02c9f270b269c251e2ab52608283b27311e78261b274f2650236922be2a8b296228001f442cad2b492ac590d52c352c832b009e932dc52c4c2c1da1962ddd2c7b2c97a4b22c352cbe2b58a7f629132920288ea82e1abea36e9d8da90000130db1164a115921b4217b2502288520d520d8252029bb1dfc1e5e24bc29c71b621c4724a929688bcc13bd21e429218c910dd61f8629e311ac138b1f6e2791209020fe25d627c925f9255b276f2765286127bc23b025d7282228a2251e22452c572bf229d91ca22d3a2d382c1498f02e1e2e462d73a0df2fd92e412e0da4fa2f5a2fe82e49a75e2fe62e912e38aa1a2d852cdb2b55abe21e83a4cc95f2ace8120617ef18851a2c203321e6240d28c41f40202225cb28a51e6e1f0e25342aec1b471c3824a02a6f1996143021062b211ba0143d1ced29a41deb17361c4e28e723852122239e272f28c4275a278227142a66296827f5246e2ad1294e285e211a2d9e2c232cd41e092f9b2ec72d529d6b301830482fc9a36e31ed30923070a703329f315a312aaac3319a3146318ead51300e30b72f38af2c249ca0c620e6b0bc1a921d0320002267207622222582284a1f8821c0251d29341dfe1f8824462a6d1b8f1c2d22452a021d2b1c0120eb29fd1f791f561f2a29ca223a2212222b287525c023a223de252a295c281228c525fc2aa22a5f292b25f22ca22ce52b0b234e2eea2d572dc41c3b30e92f382f419f9b313031de3059a54133b1325e329ca959341f34f6334cad5d3463342d3498b08b333b33f232f3b2f327d218db267bb40e21ac210c25fc264e2095210725fb27fc1ec01f95245327d31cf21fef22a028a41c581fd6210a2a301e2c1ed4201d2a7e20661fa71fa028fd229c219322362509280027e025b726042abd29c4286826122ce02bae2a1526982df42c5f2c6b241f2f982ef02de51fd1308b302c3076a16c322332c6319da75c342734ee3366ab8a356c35613515af383651361036b5b228361536d135ffb5012ccf26612b3bb881214922ce249b27d71e7420d8234b27771b171c1b21ae25a818aa17311de324aa18a317e71cde24311ecb1d33209625d423d022fc228725a426b025d325e2241429be287c28d422612b432b182b301a9d2cbf2c842cd294652de12d962d6a9d932f6d2fde2e39a006310531b1305fa4ba32cc326432eda78b348734533404acf235dd35c53524b0fc360437d136dcb37e376537303794b73e2f9f2c702ecdb9f82adc2110242827e42ce62156243c281a2c5f20c9216d26f828e01d3a2245254d25eb0dc92603266f977994182c6d264ca2bc94ec2d6926501b241d2a2e241d92247021112c041ae92413247e23341d9826382509a31e1df826b42443a1d01c40287326c7203f15d9283827c324099a23296a277326969d53294b281127ee9fed28a127b5260ca225277f2519256ea314241c22251f05a4859dbfa2a4a3f1a5e726ad221e250a28512a38229525c828492d1421fc245129082dea1f1c25532a3727460d1525e429fea4989f3628bf2a45a63ba1562dc42ae29f5199de2ecc28a5171a1ce62c8d276025f321df26d7258727ef241ca1ae242f282226e19e91231e27b124bd9005215316e095de9d4b1a9f288c2697252399082b9729b528aca19a2a3e29832876a3012924287127f8a49226ad25342411a6af9bf0a122a2a6a8bc2329234325ce2875234c23232657295c28442355270c2bc82a7b20c026582aa6268b1a60250b2b14a23d9f9321e82a46a2699e4d27d52b3e9c7a0f612f222a48210820e12eec2840252125a229e1279528ca262918b925fa28612708234122b92aff28d726451b182c0d2b2329d29eb62c142cd62a94a33d2da12c872b28a5082d6c2cb12b75a79d2b952ae129f7a8ac28c8276325e6a9da997da2a6a1dcabcd222d2429280129782355245c27e9296f22fd220727dc2a272385200a267d2ac420f4195b243e2a09964698a021882bc09d219ac31e9f2a29948215c727e829e21fad215e2fbe2920286e25862d94289e292928ea233326822a0e292726b023492cbb2a3929531d312d9a2c382b509e742ea22db12c96a4112f542e332daaa7f62e492ec22d17aaca2d642d382d62ac912b282bab2954ada29b1da3f4a18cae4021f9227a25fe27d422ac249127522a3e224323df26212b94201121b626db2ba71a9e176124492b6d12d3944020fc2a1816118f2d18592a561e8e18061d4b2925248c219a25c328a4275e26842a2e270b2a4d29ca286224862b5b2a9728af21ec2c4b2cbc2b00187b2edf2d222d9aa22030662f922ec9a7c2305130b42f9faa0a31ad30603056ad61303a302330bdaf352e1c2e652d0fb17f161da03ea0eab16a20a1231a265f283d22ec240128cb293921c7232227862ab91edf20b325de2a8b17e714c221cb2ab717a98e9a1d162a221ef419891c43293b230b22072316285226a624dc236927b228d9272728a5255b2ae929472949228e2c282c352b3f1fc22d392dd02cb711782ff52e4c2e1da3eb307e30273003a92d32b53141318dac0233a3325232acaf7432553227321fb2ae30bc30643046b4222314183a1ef0b40c216b2350262a2822218722c7254428a6206523a426ce296b1d452170250c2b4718bd185220932ad51a8415e31d76291d20141d391fac289f238c2289226527d4260e261f2506257129da280f28ec20412b112bd629261f292db32c082c0420b62e172e6d2d3d123730c02f222fc5a594313a31ee30a2aa2f33d0326032c0ad4e3429341334fdb03e344634273436b4c132aa32523245b6d327052219227cb7bf207922af244527381f932002245d26ff1b581c8e205d2508188518411e9d25b3154f13651ccf26041d3d1bf51e032825239f21de21a62609262025ce24aa241b285b279e264222c1291829b428601f232c6a2b042bcb9be52d7c2d2e2d0ba4562ff92e6c2e92a4ce308d306930b2a7f831b2316731d2aa84335033db320faea13480346e3481b1d934d134b634b1b4ad33aa336b3353b72e286522d52556b83d2c73213324ec25892ee222dd245c286b2b5d1f9b2186253b27aa192224e72077274a90ba271628d9aa309d282c16263bad2da4ec2e43292ea945a48c2c2525eda5f6a27a24bf24b09f62a0b59a802485249021e3a81421fb245f2181a74c18dd27fc246a19178f4a28f625c322cd9bbb288f26e8248f9f09295c2782259ea18b28cd267b253ca38d26de24712447a40324be20ce1de6a486a0eba354a47ea61e29d82408287e29e22d8d249627942a632f40232e269d2b2a2fc4202f26002cb2291c0f6f267f2bc8a914a1e1296f2b65ac11a5ad2de32b92a8f6a1ab2f072a22a6499e092da728dd23c81d3425b3262e267322fda8ee22c6266723e9a5572082278924a39d1d1db426ff23221bea0e6229ef27862554a07e2a072989271fa4052aaf28312720a596281b27442661a6f3256624ae2275a78b9e76a214a409a972257c257b27a02ae4263d2599284f2ba82d8324fc276d2c1a3048221728be2c932c531054251a2d99a711a26e21282c12a8fca24127922be8a4399c3d3092299da0609036302129431b711aaf29e9287c25f122d2a86a251028a2250a9edd1ff529292810235e90b22b432a3828c1a05e2c7b2be52919a5aa2cfe2b272a2ba7572c552b2d2aa6a8812a49298d2883a9ee2701255e2350aa529efba20aa421acfb245426c229912bd12496257b285f2bea24bd23a5270d2c032c9e2151269c2c312c3a101326db2cbea382a0bf21682ccaa489a1ab1ceb2afca1b39e9428dd2913a13b97b530802906268e20b52d062892287425f89e2d257029102810229d21cd2ba229eb261411a92ca32b9a2964a1792da02c842b6da6222e3f2d2d2c30a9c32d332d872c76abb82c302c0f2cb8ac392ac02802288bad9f9d92a312a5a0aeb92396256728022a6124c1258428142bde226a232827002c9120151f1626a82b0120a499c4214d2b1c9db29f70184d2b009d309f689d4a2af39ace98b7211b298c1f8c1efb2c222930278824d02d37277c296528a825db22e22ac1292527d61dbc2c902bed29de9ca02ddb2c152c0aa4d32e112e432d9ea8c02f042f042eafabe02f4f2fb62ec0adb62e3c2e1d2e7fafa42cc12b922bc8b0789551a2aaa465b1c2237e261c29492a5f24e1264229062bf121692394275c2b201fe81d24258e2b8313d59b161e052b2298799e5491182a338d219ca99155298420db1a84185928cc243422662126270527fe254628d3248a2940296e28b420352c612bf12912184d2da72c092ca29e6b2ebb2df92cc0a4fc2f3b2f3e2e87a9c2305e30a02fe2ac0e31af3060309baf5f3033301e307db1f22da92d5e2d5cb396963ba002a234b476208f24b62777285a22ea24e2276b298020cb22f526162ba11b9f1a0723902afe118a988a1a122a2f8c049c9c17a2292a1a70952911ed288421421ed31a952745257a234821492504289b264325c720f129032a0f29ff10b02c6f2ca42b3a9d122e6d2daf2c7aa13a2f862ebe2d78a6723023305e2fe2aa603114319c30e5adef31b5316431d6b07b3146312e3104b3d32f412ffa2eddb48617c99ddea293b59c20ec2160254f26511fa42030249725e01b1e1d4221fc254b188618fa1f5a2752101395821a68289f18ad929b192328d2207b1ecb1efc2596242524462321235527f7264126ba1ec128b828fb276694a42919295928f09dab2b3c2b902a50a20a2d0b2d7a2c4ba41c30c92f742f86a8e230b5305a3020aca6316d31093165ae66323932063217b12d32f731f931f8b33a3028301f3083b5cf1dfa17059823b63b2d3b2432274428442fee232b271e29072b1e1fae24e326572b7a1b632434266b1bab983426522aa3ae0da6b9289f2bbeaf83a7fa27e029d1a998a53f26822666a85ea5ac207826519848a238aaef248121e89d86ae0720cf22a319e8a707189626f122d098bb0eaf276e24ce205398352868253b23fb9d7d2860266d2428a1f727a1254a24a4a2ee2542249b23eda34f23c51e671c76a46ea0f3a286a4e5a5d6281d24ea274728202f5d261c29202c613072247e27ae2c6b306b21b826d02c3429ae9af225232d1eaca5a4bd26b02ce1ae2da7f2280c2cfaab1aa41f2ec22936a931a41c2bcd28530e78a0b0a500274a24cb999cacd2238425c11c92a8dd1e1e283724bb9d1c19492958260c1fc49660293f273d2470a0ce294928a9250ba42229c627972502a5fa27e5250b25e5a569254b22e81ed9a6509ee4a244a4a0a86a253624ea26ea289828ec269e29832c862fa6245428f22c0431ab203a27a42dbc2c5e9e8123262e24a967a40020be2c13ac6ea6859e262ca2a959a44f2987291ba87ba3bf2aeb284b9f92a029a209283724801d42aa5925e326f12108a5d02041291b26c8982617af2ac328b624cf9d662bc0290a28aba3cc2b612a9a2878a6072bb129852818a86029f2278626d5a89a26c422871e87a9e69d5da336a442abf62571266729a42b5326d8264d29752cce289f2426284a2d3b30e120da250f2e942e18a1bb21e82e99a962a5db999e2c36a851a567a4f02a99a4c2a4d2a2e92927a127a30e2c8529d222349195252528a626c922ada3de24c6281826ea92b020902a9628f02301982d2c2c2a2228a7a09b2c892bad2989a5102d5c2caf2aefa8892c0f2ce12ac0aa352b392abc29eeab97286e260d25b2ac099dc0a30ca59ead5625d8266329162ba524d5265129182c44245823a227972c1825d91cbe23d02c442a0aa23492862d91a683a649a1802d18a484a4d0a3a52ab1a0b2a25ca34529ac1b9a9ccf9428288424a31da9286c268428a4265621de21472aee280225af1a0b2c702a6728f09cea2ce12b382a37a38d2dc32cc62bbfa72a2e7e2d862cd2aad92d6b2dc32ce9ace82c822c412c09ae7d2aeb286f2860afb39467a102a42ab0e1240128722ae62ad524ea27f2290b2ce121f5216b26052c101fcc155822e92bd114e49f01985e2b68a041a227a1a92a26a13aa3cda24e297c0e05a1e9a2b1285521ae160a9e612792260c24df21a6240b2956284b259021762b282a8028ef1ab12cb62b272a349d9a2da82c682b4ca47d2e852d7b2caba8482f722e472d46acf72e702ebd2d70aee32d802d5d2d43b0ea2b062b242a5ab1759547a2a5a4f9b1fc2008254d2884288123cd261829a52aa31e2b203f25ec2a211bb58f631faf2a6c92039e3d916a2a509c69a1ed9d4a2aa99a7ba1bba16b297618549ddca1df278c22af1d3a9b8e252027fd2421208e226c29102970270b1a5a2c182c422b7b9e862de02c352c92a16c2e522d942c43a56e2f5c2ea32d97a925308f2fc02e10ad0f30892f122fafaf132fb42e832e38b1292d492c012c9db20996e6a254a454b3e3202122db25aa25e91ee2203a244c25351cb31ddd215627c019cb1861206d28d18a5a9b06156b288d8aae9c0e9880278a1ba992408e09262f20d717a819b0240522b41cb1195523919ab90bdea0f2206ba395a45ea7012411a45ca4b4a6e8216399a89b0b9e0e18c82d4d2df32cb9a60830b02f082f48ab4b3023308f2f89ad5c301b30e42f08b0e22f5d2f262fadb1402dc82c4e2c2cb31c96b79f1ca3dcb3f92c7a280c2bee2ab92f8b26f4284f2b3e2d72219e25852a212b8211ef23252bb7a877a48f150d2c95ae64a7fa9c462bd3ac55a7e29fa62953a897a5f11c3b289da38aa391176426db9247a46ca96525cc1d84a5abad7920c1225d980da8db1ba5251822b79a0b1592274224af1f3d9530285f25b0224c9c3e281a26192411a062270825622376a196254c236222b6a202226e1d561cefa2a19fb3a170a25aa4c224ad20ea238723d02da5272a2a532c923013252f29782de72f42209026c12d94253aa3251ecb2d4eadb5a6379ca52c5aad31a807a20f2c9fa9d3a79895a12aaca4baa5eda72f29cf9b64a542ac9f26182158a4b4abe4222d257e965fa8081f8c272923dc9d6d1bbf282125181f70101d29fa26a523589d8729da27ed2417a2ca282d27b9242ca4102708252e2408a59124a820371d8da5bd9c07a2eba2eaa6871d3b204e21e6237e281028032af52c692ee22456288d2d9e30221b9325332ea52a21a56d94832e4eacf3a6cda3e02c92abc0a7c2a6ad2bb3a8f5a64ca6922a22a485a536a79928118d06a33aa92d274a24819ac6a8b1259e268a1d8aa67622c0287f2442a1341a082a8f27e620b8977c2aa928722568a0e12a4a293b27a3a40e2abd28152762a68c28c8265f259aa7082595215f19f2a7e89b0aa309a447a9ce27cd28b72af62c64277228412ab82d5629d0242f28ba2e062f6b1707249a2d552b28a6879f4b2e0bacb9a7a7a5cf2c17a910a746a7762a35a5c0a65fa73a2a989f1ba544a6c328b41ee7a167a89c275e25f41d9ba520259a287e240ea05420082aa327a51f6f118d2b4829a425039d0a2c552a22286da2462c0c2b2e2926a7b12b3f2a342926a90c2ac4283c2829aa1d278f247222d7aa9a9c22a223a411accb263529242ba92c72253728d729262dd92348227c26462db324279d20207d2ef925aea665a4c82d93ab6ea786a5562c2ea67ba553a752293ea2dda5fea768297c939aa3bfa593283b2266105c9d2f266a273825ed99a522f22939280922a31c842b7129a5254898632c962a6a28f7a0d22caa2b95291ca51c2d7a2c092bf9a8ce2c392c6d2b41abfb2bcc2a402a6daccd284927d4250fad479adca111a3edad072660292c2c042c34258c28392adc2cbf21b51fd524ee2c4e1d079ccb1bb62cc9101ba50ea48f2c49a64da617a6232b78a677a716a8692ae1a01ba53ea75329e71ca59e80a20028992533202d93a7254a280c27ee223823f72a7d296527ec1f4a2c912aaa289298f22cac2b912923a2672d5b2c832ad6a6e92d1e2de92b62aa752dea2c322ca7acab2c162c9c2bcfad4029d728b328f8aece9d52a1a9a277afcc239027d5292d2aba249928702a452c5f1ef31af523c32a16185d9cc51c9b2a6c9c10a278a09b2a2ba09ea45aa46d2a4d9fcfa4b8a57d29bc998da2f7a41028781f0c10729e30255126d2246020b82261295c287325f91e062c1f2bc629a011022d652c1e2ba19fb12d6d2c222be5a2322ef32c242c39a7ae2ec92d152d57ab3e2eba2d2b2d75ad472dd22c8e2ce6ae212b092a4829f8af729b6ba026a34cb0bf218f2316270526b11f9d2163244225861da41e712259281918080db61de928949a13a0889e6a28819c08a115a1da270f9c7fa10ca276270ba0bca32da5062765a273a524a7592620a3bfa506a82425eea2b8a51ba8cb23f6a1e5a407a8562206a114a4dfa54a21d62c7e2c4a2cb2a4022f802ef22d22a9fa2ea42e162eecab912e112ea72d89adb52d342d0f2d29af4f2b7b2a002a4fb08b9b78a0eea1bfb07a2919296d2bc62a862c66297b293f2d582c0e2366251d2d6f279e9f2a1c3c2db7a946a863a59e2cffab09a8d3a61b2a25a88fa834a71d2a2fa7b1a8bca56a2905a4a5a702a9a5273a9bf0a71fab1625561bada62eab2d210e239c9c8aa7201fe125f1200899ba1c36272224a51f5c15f62738259d22c48f102876259223769bca26b324cb22209d4e25b52225216a9eea215e1d201a5e9d499ea1a195a372a081281a29392b2b2b892b7529a62b972d142dd3245429b72e6b2cfa934323eb2e90a41ba809a5292eddabf9a99fa7362d9caacca9bea8a62cdea941a995a83c2b90a5f6a8e9aaf628cba0f9a879ac90258a1e2da622ab54225625809b57a80420c3274a214aa0201e8f286724901cf31bfc28a7269623bb9024296c2791246c9c67286b26f723f0a0dd269724c922c7a1a5238c200c1df2a1f49d96a278a3f8a3d52549276c29ff296f286f2a792cfb2efc286925ff28692f472c27a089218e2fef967fa87ca6be2ee4aa3baa1ba9b82dd1a9daa944aa6a2c37aa65a950aa0a2bdfa3f7a767aaa228a78d9ca59fa9e426382469a13fa84125df264117c7a5be21a628552314a1bd1d83294f262b20c4170f2a24281925c39a2a2aa0286326fc9f6b290c28282626a331282426c72429a47d245521481cb7a4f09e99a345a433a66a280329252b2d2c8d28452a082c412f16260b241628d32ffc2786a0b51a402fbea10ca9f2a78a2e99a909aa72a9792d71a8f3a9d7aae72b22a7d8a96aab1a2b1ca2d3a7caa96929261d1ea4f0a8bd27ae25b81ad8a4df2465280023b5a00021e9299326431cfa1cc42a68286e24c2114f2b6b299b269a9b9e2bce29b6271da2be2a4229f827f0a46d29ec27dd261ca66626f12353213ea7239ecfa2e7a46da8202754296e2b032c9727002aa82be12ed0214d204b25cc2ed21612a3c59f1f2f38a558a9b5a8812eefa7c6a9fda8ee2cd1a526a91caa252befa4f3a874aa5e2a649c98a698a8aa298322029856a48427b4263c23b29ca724b129f626fd206a20372bae28c024df111a2ceb290627c39b702cce2a9f2878a09e2c812bbb2991a44a2c0d2bfc292ba7e12ac4293d29c9a80b28df257b247da9d99c88a266a4e8a91227f82a102d652c5126a429e82af22d322002122b213e2efb95f3a1709ea42d9da346a863a8e12c2ba865a923a9fb2b40a716a9f6a9c22a21a4b5a7d2a89529401c2ca2e5a5252875252a1e01a0fe2515284d260b2124249f2a10299426c9200d2c162a05282f129d2cdd2ada28199cf92cba2bb529a8a1392d422cb62ad6a5b42cda2bbd2a5da8d72bdb2a432ac8a9b528e8278026f4aa7b9f01a230a43bab6524fd280b2bd32afd25412a092cd02c371e0a9608217b2ae896f4a1b79dc12be9a0d8a5f3a5322b64a2d6a671a75e2a01a21fa728a870295da0bda554a756284c0df3a138a51e25e92231109ea1fa2084283024d312b121212bd3291a28741e6f2caf2bd929bd923e2dee2b1d2a999c922d312cb42af8a1a32dbc2c052c79a63c2da52c1b2cf7a86e2c072c642bb1aabc29f928f2270caca09d50a272a460acb122c024442719273320d52285253526a51e3220ce233f296b8bac9ba00f4629fe9d74a2dfa24a288e9f93a33ca4d127a8a053a42da56127c5a221a571a6fb26eba346a601a8f5253aa350a611a85c248ba2a5a5c4a74c2275a217a502a8222136a29fa400a77b20e22c962cb22cc9a0802ee32d752d74a4162eb02d1b2d45a7792d042d992c75a9b52c422c042cd8aa232a6329ef2826aca39d57a2aca365aca427e42a242da62bd72642293c2abc2cc1235b1e2e20d32c5412bea4e1a2f42c4ea553aae0a9f22c64a5e2a89ea9502a1aa541a9b9a9c4291fa795a9cfa948293da477a791a970263d9ba0a724aa9324e315c8a54da966218d229a9dd7a58620242698202c9928200b2704247220e21ec827ce24ae226c1ddd27f3247c22d11c7c2620249c211f1dba24ab2282200f1c5321821e101a241c4c9f89a16ca3aa909d28642cd72d5d2dd728582be82cda2e3126c21fb5261f30531834a53aa5e22fb5a599aa79ab632e49a8dbab40aca82d16a908ac3facc72c45a804ab3aac8f2a44a5fda931ac072866a2d2a92cac832573142ca8b1abfa22e423a7a091a8c021f126271e51a050213b2824248b1c4820d82854268b23791ef228b8263924a01d3728c4254d239d1c76263a2459210f1891238320261bdc1c2a9f30a367a47a91000013224423d52393284e2ba32c5d2fa724ab233b27d4305d18fea795a66730b3a676ab69ace02e86a821ac8dac7d2deea8fcab9dac6e2c02aaa7ab3aaca82ad3a258a899aabb280e1bc4a533a9f62698222ba15fa71b245a262e174da4af218028fc21d79e1820262960252020dd1dc7299c27ae24bc1cd02938289225061dde2850275825801be727a8254e24af187125fa212119941d1ba087a481a54d920000b72294243524b528ba2bc62c4f3089220520b2242131a19c90a86ba898303da820aca6ac142f14a974ac02adc32dcfa877ac34adce2cdba8f5abc1acc02b5aa4d4a826ab2e29962269a0cda66a276726bf1f01a20c244428fb22239ca7217e29c725371c8d20832ac6271723821e2a2bd228b325ce1e4c2b2b29d0264b1f542acd288d26f91de928c327d325701c472659244a20681eb2a03da4bba55a99000043238424d423c227082b4d2ca52f871d9594201ffa304fa333a99ca99a308aa83eacdeac892fa2a84caccbac7f2d61a768ab70ac482cdba552aad0ab362bb49defa64ea929291925981e6b9ec72679285124179f2325d429ec260721cf1fb22a55284424a31ed42b5a299226021f4e2c392a6728b71d6b2ccf2a0029c81f032c492a3029661e752a6529aa28cc1ced27ce256d240e1a4da033a44fa5e89308286b2ce92ddf2c1b28fe2a102cda2f1810bca2e1a14e3074a3bda85ea9b82ff7a662ab93ac422e16a896ab52acbb2cf7a669aa09ac702bd2a4d7a839aa082ac31590a43ba77a2824256b1e569e3d2681281526c2214422ec2a0729d6255620e52bd52904288a1d642c9d2ac628b31dbc2c382b9f29091ef92cb92b1d2a9c1c782c632b542ad81c372b542a8429331a9528db27e026801a16a4f2a21aa34614f3239a29df2b9a29e924812af22b362b9b14b49d1090f32496a041a880a7b52c81a4e7a998aaab2cbca4fca891a9ba2a51a453a856a9852985a1c0a61ea86528bf9eb9a503a80625b793a8a4b5a751208a27b1205c9db1202e2ba52901286021502c492b8d29a620fc2cb32b1a2a701e602d132c7c2a981c522d692cf42aa519de2c282cfc2af519262c542b9b2a43147c29de28d426ad1a9e9f4aa35fa6bb9a7f23ac250b287527a020e4238e25eb263e1e54200724072abb9683a0459e2d2afe9eada463a55e2888a0f7a4e4a5682707a139a534a6e026c2a039a528a68226a8a18ca5caa6142615a33ca617a8952447a306a634a8c121fca233a58ca700202ea205a5efa6d21ec82c7d2cc02c5b1a112e9b2d092db512a72d342da42c7d19c12c682cb12bf5191a2c6a2ba32a5014b329f82886288b14c89f3ca283a3ce9afb27882de72eff2ca726a62c1b2d022f9c1de0958c9d9f2f63a177a947aa152e9ca3b0aba1ac882dbea2c0a90cab9d2b8fa1dba8c8aa5f2bfa9d49a85aa9eb29b921a4a23ba79c28cb2173a58da802286c9650a703aa1a241f2127a060a506210f260b2009907820b426e023d520a61fca27d7242c233820172800252023222189262b24492209220225b422de1ff4205b21581d441ca421269e81a1d6a25820a129d12e4030952e9428b62d672fa8307c1ea39ce99d8d3125a51dacd2aca4304ea7fbac44ae412ff9a7c2acadad832d26a7ecabb1ac402cad2490a472a9242a532d4f29462209282a2a7d23f7a13e26ed99caa88eab482441212aa32da897226726d71b39a0002335282824cf1d0622e1285a267e239d21f828bc26372434233b28c9255a23222481269824b0202523a5238d20431bba242f9f83a215a48322ea28c82cbd2df62dae29dc2de22e65315012d8a1369e6b32cca73aade1ad79314ba901ae7aaf043052a998ad96ae982d5fa8e4accdad0c2cc5a6efab11ad1d2a5b2ed62af825652acb2dcd2818189427fc2416a252a8052302263d118ca491217828ed216998ed214129b72589213422fb29af2765257d22282a40285726862413296c27c4252325212813261c25e624d524d7228e20a426faa031a4aca4c925c929bc2d192f052f222b692e612fd732cba03da671a61c34e7a93daec9ae303256abe3ae2db02c305eaa11aecbaf112eb1a946ad45ae8c2c15a7c3ab0aadff293c1f3ea639a94a29ac2fed2b02261b273a2c93266c9c271c9528b923179384213f299a253a1f7322992a06284a248423602bd12874265824bf2b6729ad275226952a09297a27112754291c284f26c627c826d5242223b728cda04da4daa4302872299c2dd62ebf2ef029df2d9e2e473207a32ba893a8a03358a938aefdae2b32d9a930ae54affa2ff3a86ead4faeae2daaa74aac6dad4a2c0ca650ab4dac502b5e9d53a735a9182929313d2f2b2d5f987030c62d0a2aafa8932ae8272e23ad1db22ab5282525c421012ca329062727247f2c562aaf2831259f2cf92a4c29dd26332c9d2a39294b28b62aac29ab2830293a28dc26fb243a2a66a09ca3eda4b5299f28792ed82f102e0329372d002e83311fa314a95baa11326da836adbdadc53074a83cad71aec02e40a89aac8aaded2c5aa77caba3acad2b8aa477a929ab2f2acb0f37a61fa9e2280e26ce185ca135266f29f027f624531f6d2b7129e0265721382c482a91280023862cde2a6d294e24ec2c932b232a7d25462d0d2ca42a4827cd2cc32be12ace28c12be62a1a2aa32a2229862890270b2ce3a0f5a030a24c2b0f21682afa2b092af9250b2c352dcc2e559bc3a5d7a4732d0aa42baa2faaf22c09a55fab38ac8a2c88a588ab67acef2be2a5c6a935ab7a29bca409a927aa04288da575a955aa3225bea3b6a779a89c225428452555211f23962b3a2aee286224782c892b412ae1242c2d372cdb2a50258f2d5f2c432bd4259b2d962cc72bdd27332d5d2ce12b30294d2cf72b2d2b6d2b9e29802933284d2c10a12ca1aba3192cdd222b270529c527d920f6249c268728bf1ca81f5422d42a749c7fa4c6a4be2acba003a73aa88a28c5a034a606a89c269a9f8ea5f5a6c2258c9c62a4c1a50426aa9769a319a51c26170cc6a2b1a538257d9a7ea38ca5c92334a499a596a72f2039a317a6a3a7961d612cef2b332c1722252eb72df62c3226cd2d392dbb2c5828322db62c3c2ccf29512cdf2b072b522bda295f293429922c08a046a198a2782cca29ee303332912c7a2b2b321933b0323099c8a803aa143366a5c1ada6ae0730b8a4abac74ad892d9aa0fea9e0ab542c451c0fa850aa7a2b8e1f3fa35aa6f9277a23a19c12a4b626c425e0a059a501280f9320a87baa202656211aa168a51222b825601ecf955021f62615242f211321e527fe2401239a211c28f72416232d22262779244d22372352254d239020b822fa21c51f281a56241a9d08a14ea29724722a91317732462d0c2c3f32733394331aa26fac9dad36342ba8e6af89b01d318ea8c2aeb8afc22e7fa6e4ac0bae342cea12aaa93aac662a5b2dc92481a2a825312eb028b8202597572b16267d97aea07b14c0a6cea96e1ecd2109a345a86d22b726071d189f6c228428c02431203223f6286d26132409243129c9269224e524bd287a2663247b253927552530225525de215a21f31f99265da048a189a383265d2ac42f5c30982d2b2e1c33df33a0345aa776adb6ae1c350eac34b1eab133324dab1cb0beb0682fa7a994ae93af912c54a850adebae5f2aa02aa696e8a71127d330402d94299ca4272e592a69213ea957279aa308a99aa31a26a29149a548219428622370181922cb29c2263a241f245a2a3128c125f624b42aaa28c4266726092a5828a0268727bf285e279825c4270d265f24bc20e528159f2ba26aa43e29aa2cd0305b31842e06318e34cf347a366dac34b0fdb012377cae80b247b34833b2acedb0acb11d30b6aa93af7cb02f2ddaa9ddadf1ae582be0a57dab9dac0829992f832b0c272ea1e1319f2f7c2c00ae9d2e7228171e0fabb2280924f712ff20c629e326fd226b23202ba5285326eb24d52b6a290a28a626202c542af62876289a2b0c2af42863292f2af1283128172a81270b262e24db2b21a02ba31ea5002c032ca6300c315a2eb62fd333133480358cab58b0b0b0f63529ad18b292b2ab32e6ab4bb0f1b04b2f8aa974aeb7af4b2d46a835ad72ae4f2c0ba65facf8ac612b639fa2a9afaaf1284332a130412e01b08c30852d9d2ac8afab2a05284225e121fe2afd28b8261525382c172a5b283026b92cde2a5f295528162dae2b292a132adf2cac2b742a6d2bd82bc82af1296a2cbb282628ce26b02db3a011a346a5a42d3c2cb031b232282dfc2dbf326a33e23440a9e8af61b05a35a3abfdb092b1bb31d2a9d4aeeeaf372e3ba85bad79ae952c7aa61cac56ad912b7aa4b6aa0bac822ac59a73a8dfa90429e02400a136a53125be281226972241222d2ab828f1267324422c7a2a0b296225e62ca82b2f2a58276b2d5f2c3b2be128f32daf2cce2bef2ab82ddf2c422c9d2ca52c312c812bfa2d8729b629a1288b2fc39d2ca0a2a2ad2f5f27002e6b2f612ad6291c30d430202f86a4dcac3ead1d328aa788ad0bae2d2e5aa799ac3dad552bfba6ddacccad202adfa613ab15acd3274da66eaaacab3b26e5a439a905aa2b251e241a1e7e105824cd297d282826db24e12b422afe28a025c22c062cba2aa726852d872c822b3d28232ee52c402c4e29752e4b2da92c992b552e732df92c512d4a2df52c832c1d2fa82a8f2a24296330239e449eb5a16d30ab24ed29d52b3526d72263285b2981291c1a72177b1d5a29d69f70a74ea8532838a164a836a9e525b7a064a7aba8aa24869c6aa578a7db23ba178ea201a556244620a49c8ca12b259f24fc1e1b16db25cc26bc24a92259265021601d6498ee2453a153a4d2a40f21882cfe2bf02b6427a92e3b2ea62d2d2ac82e442ebd2d282c6a2e082e812d9d2d442d222d872c842f002bda2a6b29a9305d9b599ecaa1b930342a6931bd3264a83f2b4832bd33dfa5e7a134ac3fac012f07a73cb0f1b0cf2e36a4b6ac64ad202b1e1d90a853aa402ba72728a401aa3c2a1429d7a0aba71d28ba2930970ba57e204828b7a051a6b7a00514f4a7b0a9742058207ea397a6f1211723440e969fe52025277b24782276214828f525c22490224128c92513244423bc27592575233124a7254324c7214324952191200220a2256a9ee69fdda188265b2a2331233280a58f2b8832f233cea5baa410aeadae3c2fdfa9a4b1afb2e92d3fa80baf0ab01e288ca5e1acf5ad3624d426b7a607ab2997832e6427509e64a79c2d4c260e9e8aaa88296017eea59bab1c94cba8e5aacea2222209a410a8d8204527311f669aea22b2288a259622ac234729122705255d247c2986274725f6243129a2278025f0250a288426a02484260c240423d51e2728e49c9da104a4f5280000a924c224ad12842dc0322f347899f3a70cae5daed130f5adb1b37cb4642f6baba1b03db17828f3a944af3cb03e24baa6e9ac49aed49a5c2b32203fa4d3a8bf2e8329942155ac202cc7226aa5fcab982497a5c6a94ca10626509176a4a521eb28fc24bb2066230d2ab0273425be24b92abb283927ae25572b4b293328df26f82a4229342877289329b12886271b29df2683254924812a8d9fbf9fa8a16d2bce19c02533266214d23055342f358ba187ade8b07ab1493302b28eb549b6013218adc5b174b2a12aafab36b0c6b0812856a907aefdae18264ba4dcaa60ac7c23a728089caea660951f2d572658a065ab2d286419baa430932c28602382186023d22a4d2835259324f32b912926280626522ca72a83298527c22c952b2e2a0529a62c802b592a582a982bc82ab929c52bd82809282226242d0b9fafa1d6a29e2dba120726d825ef0d9c2fb033ae3462a798ac4db1cdb15e337bb0c2b463b5cc319aacddb066b1622cf4aa1baf43b00d2dcca88aadaeaecd2cfaa6bcaca9ad162c7fa26dabd2aca028252490a5dca8c51da027921bb3a2ae21c329dc261e2366242e2ca5290b288d25c72c212b8a299e275c2d502c332b37290b2ee22c1c2c5b2b092ef72c502cb32cf32ca32c072ceb2dfe29dc29bf28bd2f089bfd9d79a127302822212d7b2d6ea4802d9732d53359a559aaf1b039b1173206ae97b388b4673011aabdaf80b0952ac5a8d4add8aeed2b0ba7b6acafad832bc3a45bab8cacff296e9dd4a8a3aa4b27e124ada1c1a45a245829fe2556232d24ee2a91291128ee24b42c2f2b052a1a26822d892c922b2928592e522db02c322a062ff22d292d8a2c492f722ec92d4d2e6a2e0b2e8d2d1f30122cac2b732a8031049cde9ee2a0b63100008227d0272b8da728042f4e3073a83ea6b5aed9af5d25e4aafbb1ecb2ae2c4da6b5ac39ad4f24f0a4d3aa04acdf21daa355a996aa832381a0c5a7f2a86124da1ee5a2a6a54624ee27aa23611e672482295e288b26ec242f2cb72aad290926342d312c3b2bc126312e112d4f2cab28062ff22d562d162bfb2fdf2e182e462d3d30852fde2e852f8d2f482fc52e3b31ea2cd02c2b2cc432ee95ff95a39f2b3382258d2bc52c26a24c230b29112a4ca02d0cb89d749d159179a0f2a7c2a8a090e7a059a819a90b9942a0aca7aea89418bb980ba5bfa6701efd1e73a0bca373205e23c50ea89c8f225327ff23f922a524cd286e261e253426ca2a7829b328e1262c2c5b2c422c6426192fe02e7a2ead290d309b2f072f302c553014309d2fe82d68302430da2f1130c22f952f092faa31d02c142da92c28337c9c949cbd9f96333227013010310daeae288b308e31c9b2499efea88ca7e8b38aa5dfadaaae70af06a2f3ab00ad72a6b21e92a816aa0928142a5c1952a85e271f2b062207a6d4a7cb2b771e08a485ad1229409df0a5ecacbb20b1a461a7b1a4a41961a4dda6431c42178aa14ea4131eb8251122f31cf31f60288a26ac24f221922879264b249b222328272690246f2404262d259523e1245b237522f81eff255b9de09e5aa1582700000426bf26c8a3fd28c9303a32e2b159a00ba99ca83fb414a8f0afa3b0e9b0e5a601aeacaeeca8eca1caaa7dac49a382287c9cc5a59ba5da2dbf27e31db2a9722d37272a9eb0ace1298c9c92a612ac6f2052a672a8bfa392230e9eada4f51c1b284923411caa213429ce266424f122bb29152840260224032a6b28aa26a824c7295d28002754267e280d28cc250627e725b024361f98289c9ec1a16aa346290000861f8c21789e7a2bf530383283b209a568aae0aaf2b40cac7fb1f9b17fb1e0a9c6af46b02eaaf7a6f8acc8ad22a6819de0a91fabfca57424bd9e1fa638a3ae28c015fda6c095ba2554a539a9179a7e2454a12da504110427641e7a9a641e6a2989268b24c721e42ac12839275a24d92bc729e728b1253a2c8a2a472903271d2c722aa1299a28862aa429a628a4291b282b276625482b819c739e1da1342c0000b420a321e3a09b2e6d32c933adb4f4aaf4ad56ae70b723af5ab3e2b387b365acd1b058b1cfaa50a897ad8eaeb6a3d8a381ab5eaceea07e9b6ba873aa1420a51fc0a69eaad42740247ba457a8ae1ffe247810f2a2071dee2888248c1b621fe12a94281f269122612c762af728a4251e2d1a2cae2ab527992d902c902bf228a32dc62c1d2ce42abe2c712c812b4f2cde29bd29f828cf2dc39a0ea077a2972e000017204421849f382dcb3124332fb4a1a96cae9aaeb3b681ad35b215b34fb384ab45b0bfb0961615a73dad2faee22e22a2b2abcaac342f6aa2f0aa80acec2cd5993ba96dabac2735243da442a8281d2f28021e0ba1ac1cb72a01280f256e20842c8a2a45291f24802d6c2c662b31278c2e8b2dd82c28297e2f5b2e902d512bc42fb52e0b2e442dbb2e6b2e992de52e0d2c532c682b8a30f19e049ff8a04e3165285f2ecd2fa3adac2bde301232bfb38ea87badcaad88b5d3aa0cb1d6b1e1b158a9b3aeccaf5ca89fa8a0ad91ae802741a532ac43ad092ac8a00aaacfab85278a1a14a6efa80023ce257c117ea07520ff29a127f7241621432cd42a8129eb22732d782cae2be924ac2eda2d442df227d52f0a2f8e2e232a80300f306e2fb52c0b31a63059303b2fb2308930233015312c2eb52dfc2cdb328396f09ce0a1de335925672ba52c67ab40267a2cb92d48b13aa4c5aaada936b555a87caf72b051b040a503ace1ac84a795a20ca92faa63a0059de0a69ca8bc16a91d4fa3a0a50f206324b29673a04d21b0280d259d216e22df2a56297d275923d62ccc2b922a8a24ef2df52c5d2ccd24692f5a2eb22d16286430e62f462f392b5931c2305b30bd2d0e32813137319030ca3194313131af320e30bb2f5d2f9f3491979c97c79d61351025462b842c97a94a2270285c297eab1494a1a05da0bdaadf9d15a6dca624a9ab9e5aa65fa78ca6369ef1a531a721a4f3165ca32fa593a02322859befa0859b2025721f3a90411515286b24a2214e20852ab629d9288024c02c592c432c1d26e32e5c2ecd2d8e276e302c300430a129fa30b6307f30212cca3185315231372e78323632f931d2302432023293313d33353021306e2f1735be97cb97e99dd03520256f2c9c2d50adb123d12a7b2cddaec918a794292120b145a035a9b7a9d0af0c9f10a938aa14acad97a1a2efa458a0781fd61604928e90b6254c21f41e2ea64b289b23ee1c7eab48280c221913bea92325f61d061150a395238118a99c679510240e1d6c98001b98273b252424281ed12873277a26452112299d27a626f822e82878278b265f245326fc25ed248624fa244024e620c526c79f58a1fba1212680271a2c5b2df5ad3e27762d142f2cb14c15079cdd21ecb29ba3b8aa75ab8ab0339a9ba4fea5dca0e28cdd9a0b9f3a13591f6f1e241c37164124a921da1ebc9741261b243121afa1c326d1217b1d20a55525c01b5e9a04a465264321a510049bcc281b2671247d1ccd29232856277720952a00299628ab22d22a4f2971289924922a3729bb28a4254b2975285927bb269626ad259323cb28fca0eba192a3a3282528c22b3b2d31af2629092e682f4cb2119aa4a21e1709b48fa59cabd9abf6b04398efa04ca2539e901353982d9eeb0eba20471f971c3a157b24cf235822b51859267b25562535936927d0251325a69ca128be25ad24a89fc0283b2606244e994f2abe28d8273a1ee22b382a8f29d621b22c9a2bf72a9d24e22c022c3d2b3926cd2cce2b462b4428ae2bf32abb2995294329fc28a7276a2b67a059a482a5cc2b5827f029b72b4aaede2aae2e1f30f9b264a08ba4da9d9fb48aa793ac24ad5db19b9b53a2b0a3729e0119828f659c01096d2250219420cf10782462242224e218da268626c1268719cd28d327a8274a98f029152894262f991f2a5a2842261597f32bfc29fa28371ffe2c012c0d2b0c24102e2e2dc62c8326c02eb32d442da128e02ee22d9b2d742aec2d972db82c512c142c082ca62a022e499ec8a125a3aa2e1326e2288b2a76ad1e2aec2d1b2f41b2fe9f3fa5d19d5db4a0a89ead85ae4bb274a518aa20ab60aacc1bae91df9c938b4f2444243424b21ee22557252e25281d54281b2782261c149f2994280228849cfc2a1e2934289b99aa2b312a2629c6100a2d382cdb2b5820582e6a2d332d1525db2f002fb22e14287e30e72f842f822ade3056304330fc2c77304730c52f522f6d2e4d2e652dfe30de9cf79c88a3f331a524332bbd2c0aad4c25ff29d22b34afb5991da1439490b031a89aaec3ae59af93a66cacc1ac8bad45a1f2a71ea9f2a76b1d0da027a4659e0425ed209a1b24950f283625c522ca9a4a2991274e26b49b032b3429812809977e2c712b882a8b1af22d182dc42c8221a32fe22ec42e4125b1306e305b3003299f3141311231462ca3322032f131232fae328f322132eb319430703000300b3422213a1e3018f634da22162a082cb6ac28236128a3292fae28986fa0049442b0a0a1ada85ba966af53a4d7aa18ac83ac4e9f30a881a99ea3e919dba241a5929c9b231610619c1c99cb269622b71f951024293f27b425711ab02bd4299528df1c0c2d3c2c972bfe1caa2eef2dca2db2213930dd2fb32fe0268a3132311431fe29ba3266323032432d1c34bc337e339530653442341334ca33d532a4324432093682254f245424943759243229372a89aa27219f26ed2709ac558f6c9e839b70ab969a10a4dea405a96e9c1ea46ea46aa72b98f3a29ea4e3a55b2068981d9d03a43325b8208f1d12a14927ed254f24d59d482a782937298b0e222c0e2cb92bd1207a2d242d4b2d1d24722f042ff52ebe25c630963079304028f531b5319531c22a3433fc32e132c32d7534483441340431dd34c634a334643484338d332533d836dc259424992465387822fd29be2b1fac43202c27bc2807adfe15731da82251ae7e9c2ea484a4adae39a0dda7e9a81bac849c8ca2b5a3d0a6001c881dea2126a406231a1f69183ea1f2236d2205221ca4d12586239b2286a3f3265e255b25eaa024281c276d265b9daf28422766268b8e222913280a2821188e2984286d28cc1d88298b286d283a218229d6289f285b230b28e927e12675247823a620d39a2f24409c0ca087a383247e22572a2d2c3dad7d24ee296b2bc7af6f120f12e51c55b048a104a7e1a76fb0f39eaba522a74fa9199aa6a15ba2daa41521381cb81734a12d24d721d11e6aa0de25562451234fa35027b324362426a425281326af2435a385287027e225209f192ace285328a298a42a5c29d828ea151e2be3296b29181e572b412aa529de21952b882a2b2a9424232a4129c928b72522229c235421cf25ee9b74a05fa147261125182b9c2c56ae1625bc2a1d2c84b0f893359c459414b1d1a23aa8f4a888b0409f39a541a6e4a89004d09e969f79a1ae21951f621db79e9d242b2440238d9c7b27d025c32529a0c028a1276a2716a1a1298028b8274aa2ff292e296d28bd9fbf2b602acd295096692c552bea2af91b032d2d2cba2b83215e2d952c082ca024a92dcd2c6a2c8a26c92c282c852b1a2806296328eb27a3282594609fc7a423290000271cb41cd79f8a23b428232ac4afe20d32994e1454b123a47ba8f5a869b059a095a58fa656a95087ada0d0a175a50f233721a8204aa08e251e25fe242c9d292855276d27399eb529cd28a928169fc62ab02930295e9f682b982adf29479c122d502cf42bcd90c52dfd2cd12cf01dbb2eba2d7b2d31238f2f882efe2d0b271b30762f1c2f2629722ffc2e7a2ec32a2e2c8f2bf92a1e2c8d95189f08a1582c0000871c591d13a09a221c286129f1ae480d1f92c719b6b0e5a3f1a8d3a98fb0ffa329a836a904ac14957ba3d2a42ea8f123931f861cffa38225d82434247e9fa528ab277d271fa00c2a1d2923292ba0bd2b962a3c2aed9f502c042c6f2ba79d012e412dfc2c9617302f552e242e64216330d22f972f08251b31b6309f30bf28f43190316931a12bf731a0316531dd2dbe2f392fd22e722f9e1d9c97c89d94300c10fd206122dfa2691f8425c92713ad7414ae19f01fb5aea2a068a6efa667af88a2aaa7e2a8a1acbc9960a430a6e9a8f4222a1be91474a5be265c250425ada2f3282828af27b1a2792a072a6b29a9a2352ca42bcf2ae1a0842de52c6f2c4d9dd82e0c2eef2d10183f30922f932f492161311631ea303e27ef3279323a32482a5a3421340334812da13473346234d6300133e532c5320a33d626a025a6257e34da218e273429cfa97220cc2575278fac0711a995a61065adb79c6ea260a347acfb9f6ca581a638ac468a6fa3b0a4daaa6a2287189a9660a931267c242c226da89528fe27a72678a7822acb29fb2856a5742cbf2b0b2b67a3602de92cee2c379efd2e632e402eae1a83304d30243093245432f631e0319c281434b0338f33122c91354c352f35922f8e365d3648361a33e935da35d8351e369c2aa52aa42a5338d32079278c28a0a9251eb023eb24cbaa7d08409a4595e7aa7999a5a166a389a90a9a7ca246a4f5a7191ec5973b9c28a4f22549250d25099d3e2812282528bf98e929ae299b29d798a02b5b2b512bc398cb2c982c7b2c19150d2e9d2d952db61de22f662f362f9f210e31ce30a030d524af3248323732a728643431342634572c0436d135b53524308237503740370c345b374c372e379637e72ceb2ce62c1f3acf2029257f276faa401d1b242324ebab37912e1af31419ac639c73a03c9f40acf99e44a49ca43dabcf9c46a330a475a97218b20d991891a7fa1efd16299974a43a249f23c2219fa304262725672456a436273b267925e4a242282d2732267ea0e2285228002871a04229c9286d28a89f9229232903294a9db2291529f728139e8d29e128f728ba9da0283d283d289990ff2475243124261a009a4b9cb79ee8908d0daf11591737a0711cde22e12311ab22162c1f551ec5ad1d9a729f4b9e23ace494569974991ca0dc96f99ca09dada5261c980a389546a4861a5519c518859c6623e520b11e90a2ce26b4244623dda4f925b0249323fea2201ded1c371d39988e28c227a32703a09b2a2c2a7e29f0a0722bce2a972ac79f152c182b002b6f9e132c3c2b442ba89c342aca2988296998312733261825cd18bc9b6ca01fa2d398140a1f114316689f141d61232f2490aca80a8d1968112eafd29d7ba2d0a3c9ab9788b592e893ba97430ce606a803e3909c1bfe89019a86a1a517c0170e166c99c824bf23b022c8a14f2803275e26c1a3dc277b26a12517a2dd1df81d401e5e97cf292c29bc287ba0372cda2be12a0da2a02c812c722cb3a06c2def2cb62cf79fe22d6b2d552d219c3a2de52cbc2c87196a2a032acb291e1d0f14339a509f331a2f8b4b8e5984cf98cd1d18240524e9acc496bb0f399d40ae169d20a1dba1aaa8ae95cc99079a2c9e7e05e19f6ba1aca6bd1ef615019734a4331c571b4d1ae8992b255c241e24a5a0d0282b287a2765a3b82827285627ffa18b1ffc1f1f20bb97802ba72a852ade9f832d342dc72c66a1962e1f2ef42d86a19f2f1c2fc22e149e4e30fa2f03303a9a2730f02fdb2f421bb52d972d752de11ee01e311ca215fc1ec08de591298f029a911d0323c3226eac5c0a571c72102eae269d4ea16ca10cac2a97b299c5992a9f151462a062a249a7691dee940d9e7ba59f1b2b1b251a599af2255e253125ffa18929bd28732809a48029c6286c281ea2441eeb1eff1ea495aa2c4d2c182ce29fd32edc2e752e229e573035301230a9a04b31173102315b9f6532ff31f3313895f332b432a832d41ff6300031d1303d24a922b722f5975124b5212e243e261daade1f7325ac25eeac548fe2170990c1ac289f75a326a4a9aca4a025a542a6a2abdb1367a055a246a9c0230120ce1c1da7002723253c2492a512297a28f927c5a4802a2d2a9429e2a46c2c1a2cde2b18a58d2d482d412dbfa2482fdd2e8f2e22a34a30423029300da08b3153314631979e3d33eb32e5322e9bc73499348834c81fa4357b356f351923c634dc34b9346029db2530279524352ae10e0f122d1546a0e718531fa61e46a970069218e38cfca85a95fa98f59807a11b9b1aa148a2a7a7f31a45a014a21ca86f23b91be38c1da69d26b724a82347a526295c28c127bfa4db2a242aa129b0a3a62c262cf32bfaa2dd2d3d2d462d8aa2d92f502f382ff1a1e430c630973018a1733233322d321f9f60343134273456952836e635f335522238381a381838f02797389a3893383d2e762e192ea92d4f30581ff323a22555a97f1ca0211e21efa9b58d5e8cfc93e7a9179baba001a13ca93b9c81a18ba28aa8471c0c9aa99dcda68524e5215f20cca4ee2676250525ffa25c29d528b128b9a0102b922a732a98a1c02c882c5d2cc4a0fe2dab2d952da8a01030be2f842fb7a02e310b31e630159fc43284329f321b9ab534863491347d15bc369436aa368c22d838c638c038e028963a923a863a3631e436f536e9361d39 m_StreamData: serializedVersion: 2 offset: 0 diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - NoPointsVolume2.asset b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - NoPointsVolume2.asset index 1e0d63e..49e0667 100644 --- a/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - NoPointsVolume2.asset +++ b/Assets/Quiz/Textures/Lightmaps/QuizScene_Bakery Volume - NoPointsVolume2.asset @@ -6,7 +6,7 @@ Texture3D: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: QuizScene_Bakery Volume - NoPointsVolume2 + m_Name: m_ImageContentsHash: serializedVersion: 2 Hash: 00000000000000000000000000000000 @@ -16,11 +16,11 @@ Texture3D: serializedVersion: 3 m_ColorSpace: 0 m_Format: 48 - m_Width: 59 - m_Height: 24 - m_Depth: 44 + m_Width: 20 + m_Height: 8 + m_Depth: 15 m_MipCount: 1 - m_DataSize: 498432 + m_DataSize: 19200 m_TextureSettings: serializedVersion: 2 m_FilterMode: 1 @@ -31,8 +31,8 @@ Texture3D: m_WrapW: 1 m_UsageMode: 0 m_IsReadable: 1 - image data: 498432 - _typelessdata: a89fb89fb59ceb1703176514dd182c23071a74152915412177998c96ae918f16c794bf92c88ff317d31bf9184c1828206222141b261a6e20a41d3316d712721dad2001174c18711d2622cc19191c6f1f6a266d1c931d23212b259e18701db72073180000e415d219000000806a010f100080008060947c1500800080e29c6918008000808ca3381f008023a44da7f2930080589a07a1ce16008000801ba1b2200080b48ecf9ca21800809385d6a034a10080f8954299452864871894842b2a2eca16b619f32ca42c0080e498179cb81c00800e9b6ca00a2400001593572b3a2c00009b16692dea2c00800080f620cd240080af80921f512300004b19912943290e14001e59291a284210af1b6524f72351083818b41cb41cdf11151baf1e621c2115d41c3b1ff81d0117891d1e200b2031180c1e2d202d204718f71d192057201c17831d421f2a200116271dcd1e1320f715f01c4b1ebe1f2016031d6a1e1d20a915e51cf71de11f6b15a71ce31df91fda146d1c9a1dc81f4e155f1ca11dae1f2a165b1c9b1da51ffa15381c6e1d9a1fc815d61be01c251f6515241b271c071e4d148b1acb1ba71d0e14221a241b3a1d5614d719b01afd1c7f14821a7b1b3d1d7414fe1b271ca01df6119d1aca1ad71c720d6715fd16a81b6c95fc94ac94ca173116051b451ca424938edd0c0a04c6211897c29839958e1492963e9782955d176f14d8176618e222621dad19de193821669da69aba99ef14e1124c01f8033814a321401c7b1c73203c23ba19701a6a2429219f193a1b2824030d35007089891500000080e680890600800080c3946b1b00800080269626160080008033a22e1c008000804f98dc15008000802f15fa0f008000803f148c07008000804513ac14008000809096ce190080729c68a71a24309884a0af2bf32dad982b9e972ccf2d00808c9993a67f140080559611a765200080739b5d2c1b2e8790ac99a62dd52e0080388f59a753240080008013a4ba1e00005f1291288b298015e01f5a28e9283512871c62215f24fa03509d34a04f1749121218a71aa4140f16081d191f2d20b518351e4e20ec214318301ecd1f2f216318531ef21f6921b917041ea41f5e214517e21d801fa621ad16701dfa1e4e21ed152e1d9a1e37216215931c9d1d7b20e114331c6b1d3f20a114f21bf41c0020af14861be51cc11fb414351ba41c5b1f6714f61a7b1cf61e9c14e21a691cda1e3614cf1a5f1ca81e4c134b19ec1a451dcd12bc19e31a5a1dae13ed196c1bc41d5514291a141bc91d27139a1a111be41d020f69181f18711dc40a6c13c6144d1b7293ae90478cca1705168b1c651d7e23cb0c011899183222ce03e50c4e0cc11a949319948295011ae3119d19b91b6823bb19921c271d30230c18a2156c16111bc814bc124e127e1ac7190117f017eb217b1b2b18681786255b18ba11c40dd624640a60866f8fee18008000806a8dd5120080008003962619008000804391461600800080940f9a14008000804f14a31016816f804a16df1100800080f5178e126b89c883f814f814008000809f8e3e190080dc9c41a6fe1f8994949c682ccc2bd88e9b97de2cde2c008016993ba78c2300802f8b2da22d22e08113843b2da22c630d3896b82c202d00805b96d3a48e2300808894c2a4442200002d9430243928de11d2191622dd27160e9718571c3d244a0d76155018d51c49109a176519071b6c14071c181d9520b016051d751e02228517751db51e09223918361ec21fe4220018611ecc1fec226317271ed91fa722b216b41d2e1f29228816641daf1eff21af15b21c211e2421ff143c1c0d1d6e205714671b711ce71f2814891bcf1c3820c414741b971c2a20b0146c1bc61c3020b514df1a691cbc1f6a14a01a3c1c8a1fa313871a331c551f2b14e219161b471ee313c219a01adf1da7136e195e1ac01d7311b418d3184a1dd50cc8161016f01c610e34168a17f51b5890d80b9808b01855922890068fe4227b98439a089c4a153690e990f5910f163d95d2951a99241b4793e913dd1677246b88c819c019242498013d0d7f099b187c8143033584ff1455860489228bc517559031923394d0253392509462989e26bc804f80148cd80f008000808391e914008000804a98fe180080008020921a1500800080c702e7110080008006112412008000809f15f41162810a810819d014d5810080ea1b3c1600800000f71d291b0000670da62331227c070917ae2d392c610a36166d2c432d07100e15e8994628008025142f2c812ce40eec16082e562d9f021711372c4c2c00005e0755929b250000810b441fd52300000f186922d2266915721c6b203d268014711c541f86240e152c1b0b1df618ab141e1b161c691b9c15921c731dc7226017f71c941da3248b16ad1c301dea23bb16eb1cb71dc623c016c01cb31d4823f915d01cf31dfc226615921c881d21220315861c701deb21b514291c5c1d822177141c1c3b1d48215f142f1b311c50201914b21af91bbf1f4613cd19a81ab81e2113dd19871b0d1fc413af19f51aa11e9c129118ff199a1d7c10bd171619d61c4f1191185919fb1c1411a817c418461c1412e618bc19291dd8110e1a741ab11dde0e79190f19c61d400c4c15a816191ccd89de0e87110f1a4b859a16d3176621bd8183106b10fb1b5f8f548cd28a9c1da09b149dd09e3520cd912c13fb1687218986e90eb70b1d19008062001284eb10c3862284908d1915f28cd18a6f910b1bbf962c901b96c1245c96208cb594ef244d86828df99334148780ac9a51a0b21800803695b19bb81a00800080bd929e15000000000000000000800080ca0307149b8d0c847b148a1b11907513f11ca123408baa05371c351f008000003e1df91dfc01d50e7e23cd22190c7f1aaf2c122cfb0aa118ef2cd72c00008a1231259b240000ec0e3e201220bb80cc087729e4280080a80467202b2300800000461b661f0080a9039c18511f0f0112137718c424dc0db817b509d725800a7c1604139523d40821123a0e8f18d20e8a1622155b1b6d12121a5219ee22a8147e1b4a1b4424bc14c51be51bd3234115071c221c8923f914ed1b7c1c1d239e14131c371c17234814a01b7b1c43225814631b331cdf214914d21a1c1c5c216d14371a741bdd205c138a19011b4720ca129c19fa1a2e20df1258197a1ac21fc7121119141a241f2f12cd18f119ab1e9c1287180b19361e44118c18b619931e3912b5188f19b61eb51193186b195c1e741221180b19a91d0711f4180819ad1d150c86160116d61c560740133b15e51c778cf4069f0a77157f895513bd14d21d8d8a58074c037619d88d318a3c89381a43950f96f997e21a308d6b8a3f83b21600809c03a781d70f00800080198619060080d68e0c948c1525945f9caf9e8c1e86992a9b939cde252097cd91579864256b8117852d8e59164888688ec3924c19a6812a916597721a00800080748fee15008000000000000000800080808be010d38ed9839b05211ac3918b0b4a19a0236c8bc7850318c81d00804a01fa19371b000000009c1c851a0000a20dc6208d1e0080d413a32867280000ea0d59221c220000150c701c391c00807b101527e8260000ed09c61dfc200000000017166c1c0000ad09a714d11d5b0892151210ca2400104b188b897f25fd091415098e7b23f4076e10bc080c18840dd214f3111b1b92116d191a18a1226714471b831ab124ff14031c5d1b4f248614b41bfe1a05249513fa1a511b21231d13f61a661bbe227613b91a711b5e225f13041ba11b0c229f12a01a791b8121b3123e1a341b35210612ef19b41ac2201812dd19061bba200013c019bc1a8920dd129119ef1a70209a124119521a0c20f41116192a1abe1f9f1157185e19f41eb0116118d8189d1e7911b6188019c61ebe11bd18c619ea1e9610df180919cc1d700c30172116221c3d0c45152916301bda8d008b30037b186e8e330fa40cfa1dc98fb303b48a661c1195e0897491e2206c99aa98629bd51e1191928bc3843e1c3b87ae04bb824a150080e383358c71107486738eda9305184a979299c09ca61f3b99b997f598a625659765927198bc241a8aa38ac0917a17d08e7f8e4394a3195b822791dd97fe1b0080f786848d0e150080000000800080008000008685d70100800080958a950a3d8a3c80b0039c0c168a1f85290e290e008000003315ba1200800080c117081400003c07391bb81b0000628dcf20c12500802b9bcda3641f00808188c114561800001710e62195240000140cf919dc1d0000ae015c138d1800806303d389f2194f80ea91d29c5d208298e49b719f311a00801589698da91400005206c68771091809b910f60446150d10051870138321b8128d199b162a243813e4199e1711245e131f1a57181724011381199b1884232613141ae81920235f121e1a5f1a8d221012231a0f1a3a2247116319601a80214b117919221a32216c11d9189b19bf20fc10ff187b198d20b2118a181e1940209c1165180a1930201611e217c418eb1f46103a1760189f1f73104b172b183520711079164517321f8f0edf156f15891eca0ecd1477151e1e400972145e13261df28017126a09e81c3b08591256133c1a3a8ccf883b8227155b8c9809d70a511cd88b11823e8ac615028c3e8c3690d215d69423959798d816a18be2876f8afc140080e8017081d40e00800000d0004e070080bf04170202122f887f02e789411b1c9823881290e5257998159461988427ce88e787309157150080538e05952f18008061948b9adf1b00807882af903714008000000080008000800000008000806a8400000b8759824f886300f487a00a00800000f287a30c00800080c003291100800000da0e5c12f880f60ab4161d1a0080ac16af1c68242c81550ef218611e0080d0043512171817811011441400240d846807f20c411d0080a8007087aa160080af08a883ea188300a41251948e1f4901f10df78c56190000510c088dda1400003d094a891e022609e510dd84b012610eed152e8e9921ce1045181409a4241d11e0189712bd2400118b1978149724b9102e19741625241c115b193918d023b2102319b118da229310231955183722881085185a18a52192106d18b818972125100918c117f0202c10fa173918d220c310db171a18ae206510a517551876208b10c41667181e200010ad1613180920d30ef215bd161b1f170fdd1555168a1eb10d6616f816c31ea80f5016d916471e460ee617d917c41dab026513d410c61cfe8567823308541c638bbb892f87a414e68f3707c208cc1d7c8d8388048c7416978b6e8dc88f55174990c393f0953a189e88d7896f8d1314008000006e84880b008000807581a000008007823e8cf3107784408b0891f01853981f910e968225b398df90df977c26d9837886c29022140080c78dd4947e160080a893109b211900800080098fcd1200800000008000800080008000800080ac805b805f8ef681b48100806f8eee0a00800080b08ea90d00803781c790541500807286a798261b1e8db48219863e1d4880e01701156c240783e40d1511f118aa81260c0e0f2818c7005614cf0e07228b0992113c11c41c00002d0d980dca1700008a184d1da519d8069519920e5020390ca912040fa31900008c0ca38cce1400006807ad88df01a506b60f208e83113b0c36165494b9223d0c2b171c900225c60b26170d90f0243d0da516030981241a0d0c17da0e0824bc0d5f17c213b0239b0dcb17b2143e231d0e1b181213e2220d0e8b17e2150e22190e7e17d714c7211b0d87166b1579210d0d6a165c154f21610d491612163521fd0d77161915f320c70d5a155e165020f50c6715f8142f20460ce1133a14f91e3b0bbe13ad13551e880a2214c013651e5f0c05149a141e1ed70b4a155914c71d1287590e41894f1d0388ec024909571d7a8b81882f8a6a15f78d660d5f0d531df78014113211c3186009d81511189017058b050fc91053186088ee092c10a71400801f016481370d00800000cf800b0400804281768c6b1100802f8cf891db196e98279331989a25bf99c095f99aee26238bfa859691641400809b896c932f1600809d8ec097761a00800080be8d67120080000000800080008000800080008000801200dc8a868100800080758bc80600800000858d040900800000338c330c00800000008a8010ec891c0a0185d918e6869610f193bf219b88b9011c8a38191e88f7015d8d921aa689d40e27940122f8875303b593562000801108f294541e008038026f94d61d5c83e084a49a61216885ba8479946a1b0080f880df90e01500808500258d250d9a80e606b3927116d501f8101297c821b08253123a97b924fb821515fc95b224e702fc1458928f245f02ab14d6911f24bb0650145f8896232502ed143a0e33236406ce1418081a2332068614cb10872220065114a20d47228606be124b10be216106b71302105c21eb0820123011f520ce0815138812da20540cfc122b129520280a391354129d203709ac11eb113b201b087b128811ea1f94073713aa12a61f360c5a120813f71e090785144012121e9e8a430bfb8fd21ca480aa0d3f0f281ca28df88c4a8ddb155992a488c38c9b1e488fd88acc8e4018668c8f8c6a8f3f1776882c8c9e8d2615db86b688378dec1000808e836d8a5b0d008000806d88ce00008035881e90c0109580258ddb92bd18839855941d98bc251f9b198e2f95a22700800380798cea0f0080008009819f00008010884a8f661700800080c68ec60e0080000074803280008000800080008000800c80c08a238600800080158c420100800080188fe401008046004b8e3208008073010090de0d6c8a1508689440194b8c131037980e234b88260a9f8e6018e583780910906718b0868112f495ab200000ef10448ca41b00003806990164110000b8141814c6187305b9177f8dc11e20059a0e978346190080ab07658eda1300809c055f883f068780ff0c5a901c14ff81a512fa942622ed823514fc95c72499882c142b979a241a8843125f9469242e87f2112a9420245e828511c893b62326825511438e3e2319822511178eea220c82a6102187f621e0817510ea86ac21c781261054063121c8811e102e86f920d18101100b06dd20d901f90ff805cd20e301f00f640c9e2091016a0dae0564206b81570c9b04201f6081490c6004a21e1784ee0da80add1e6b04370f0d0d401e2d017112b20e8f1d3c8c00088791bb1cf986f181a5873f1b188ba08c3a8f4f1490911b900793a21d958e508d578fc0150080f88a6290cd150080338a5a8f0b1417843387e38c310e00800080c38ac30a00800080b98525010080d3863090640f4b884c8f3194f718d3981195cf98fb26779a3991109c692800800080c88e1b100080008000800000008069819081551700800080748f740f008000803e834080008000807083708300808d80738b258100801a80408d330400800080af8db00600807e802e8e8b0a00801380e68f0a0e6c8af781aa9368179b88aa0fee995a213685c405cb8fd815a483be098c90c615f48a5b141a95c41f00805a0fe190d41900804b08188cb011008077109b12b4183d885c136296b41ebc8af60a8391e41900803501e691c21300807b80588c1183a1855982a2945093748dec85129946211f8fef86bf9959247b90278750996a245c90f88624995924ef8fbc8662982124da8e75863998d023788e4686e5965c23078ee78591950523ce8d6b85f8942722a08e2585c693c721b48ecf8456935a213b8fcd84a0914621208ead8464910d21fe8d8584638fd9202f8c4984db8e6a20a88b3f8ac9905120758be689b191d31f7a8c738905903f1f678a9d8319903f1f0487920339912e1f5e892611af04641f348ffd8cb496be1fe28c33911293d51c278dbb8e7d90a41421931f92e893211d0b903290899153176f89fe8e5d9112160080c38cb890941479835089d88ec10f00801284288c280c008000808e8795000080a687d28fc70e00805d8bdc916a17a9982c914498f3251d9c2e88fe94b7273f893201cd8c3f10008000007e82f0010080d5038f0c26170080a380df8dad0f00800000c7802e8000800000948494840080058091881b8200800080558bef0200809780908eb80700809981b88f160c008000800c8d880ae083e78120924e176a8e750ffd97ed21c3882b06089189153f8ca5063e924917dd8f1f1051988a213f892a02109423190080f9002d905f1244885086f0954a19688bdf83de9a331fa28e6a88749432190080948221939a12008033821a8ecf85a6863e82339530962e90ff8536998d21bd926487239ab924a6916887339ab1246e91398756999724c9904b8d1e9954247890f28c459817247590998c64984c233190608c8d971c233e91e88e0798b1226790f2912d9819227790d692fe96b5210f90a592a7977d2107908492a8965621508f4e925f9603211b8f2c921396b120b28e019248958820188d9891fc944720ad8f6790fc93c11f1b8ea98e6d92601f518d2189e190d81e5b8dba086690ce1dc790c491b695161c448e4e93b294d61c638e728e10913b1510939e9164944d1e14870408be092d168a099914351658154185250f0f0b1e1500806d81d987e71000803b862c8e2c0e008000805589d28000803683c88d010c0080d289f89062109d8dd48f2f944b19f792979176984923048eb6880491f91100800080778947040080a0840d8e36170080b8818f8f8f0f008000801886688000800080c885bb8400805a00518bfe8300801500ca8b6b0100800000c486c00000800c002c89c00500808803108ef60c0080600a01910818918c2411f1950222228a36051d90e714968abe04559080151f8e580e9e94d61e0080e5070d8d651700801c0cd18593113004f612ff0e60188283b615fd91f31ed183060fb48aae1be0802b0c079345190080b002cb8d8c8185877402019596961691058dc49b4a224492a490ef9d2b2512936790cf9cc424a593db93279c6c246a93a494f39b292426934095759bcd23ca92cc95859a3c232d939195749a2923c4914a958a9a9a226292c695219a12227c92f89595996d21b692a49584995d210b9379953399f52038923295e598ab20cb90e99440984b206e90e7949c97b01f898f7b949997861fa790e394d096551f2a90bd93bf96431f1e90109309958f1e8f8f388fc594571ea09037948a98101d848d138d41913f1c428e5e8ea88eb7185d9434938e949d1fbb8cb790d190fa140080aa882d8ebc1100800e8d6d9175128e8c0a8c7591f010008001831c8e910b008000808089e5020080ea8a99914d0f3586a191a1959018789a8f99f89cf226db9ba799a19ddf286890b68b2d93951100800080198a100457881d89cd908e1700800080ab8d550e008000005d87b381008008008c8a7401008076005989300100808500f48a5206008000002f88a60400801a00b5891f0c0080f903948a0c0f00801510140a6e186f82321a171785219108c918ef18a01a0901d9133f0f0c1789863616348dea1f0080d1084090ec1700808b001b8f6612f983538ad8948018e989308f9698c71df38d0c8dbc94131900808086d992801300801c88db8f7d84828af88ec99548959b92e5943d9b9021d694c796949c9e24d6949a977e9d5b241d952b97db9c28249e948297689c6a231c940b97629cf322d4930b98de9b9e227b943497a79b6f228d9318989c9bed21f993b897559b9a21a5936c97039b422106942497549a09212593f896149ad6209c92ac968999992039932e96849995204692d7967999c4207b930b9743997e209a925f954398211f72914b94ef97c51eb79048948896981e9890d0919596e91dba9149966899781d948ef0942e96fa1a26949395ad953019de99f69ae99cb8246a98de9aaa9c2624019259942a97601a248f9892409624185188508fb093b013008016874f906d0d00805480e58c41040080a98add915610808808929596fd187c996c99ff9c2c25579a079aec9cb4276190ac88ca91e51200800e82b28ae9080d94ad864083d31cd693ab95709acf2348906d85e990301400808b809a8d5911008022818d89c90a00801081ed8a000d00807881b2891a0e0080ea805a8d3f120080e8822b93a81b8b8e6106d99616245094b60676984725158f86034795221c1d8c9706a89106184b90020d7495ab20218e168244937319fe818701b991ae16d580c8018a92b018ac821d8c6598c91eed8cac89a294861800803e884d924d120080f885b08f89896d8c778edd96569797936695699c7b21be959396fd9c9224c0958c97d69d892487957e98079e7124b19596987d9df4233095e4983b9d7223b194f2983f9d1a232d950f99b29caf220995d498989c1b229b94dc98529ca32137946e98da9b072182944398389bdc20b7931c98539b9a201694f097769a7f2007948d973b9a1d204a92d096b999431fed918096ee98421e299119968f98ac1d24920396af98241e3892e9954298841eb3928a942698c21e0092ce94b098781d2990d4946997b21b5794f8919d90071b549c679dc89ed724239b2c9d299e20259299179a7b9c2621299a3d9bac9de423309a639a309c08210298c7997d9ca22266937d943897251a4190d1951c99a51e2e9a039b899d1925ab9d939d0da007286e9d8b9c129f2026cb948b9025957a18648aa68e3794521ab7930d8f7f93f01d00801194499b0422808f9686a491d41500804c81f68e9b1500804681dd89fc100080ce005286e70f0080c201f084590d00806d0464890b105985400a278a411961906f1469900225869430165894e526478ff50af390041d4e8eff026e948a1dc59057864c993f2486929d8d409a7825738e318920944a1ce68a1d8e3595a61ce687f09117997a20928f21919796d01cfe906393f29aa8213d90fd918097a31b3e9020944499b2184f946198c09db0215c96159a289f6b241497449a2d9f6e2499973f9b609f4d24a097af9b989f312480971d9c449fe223e896379b6a9e1b234c96309ac69d8a226095ab99059d9521ea94d498239c6f20549483980a9c14209b948598739b1520e1949398bd9bfa1fd094ae98789b0320e494d5981b9bfa1f2794c498a19b0520a9937e98bd9a441f56934c98509aaa1ecb92c99795999a1e8192f796ee98981ec9924995e498691ed092d4959a99ea1d45908494d09593192992d592ad92cb19359a579c9b9d34245999129bde9ca02493967e9335982b21e49a1c9aee9d6525389ab79cd19d0d26699bc69c4f9f4825c194f80a529122201397b793ad99bf20e59ba39c419f9625369fa29d8ea05927129cf49c09a0382601949a93a597a01c0080458cf39096188492f0014303bd1ca390d195999a26230591748cbc8f0d190080f883ce8130110080bf80d4811c0c00807c807c81b00a0080a500d504400b0080da00f185720dc683ca8d7f905f18a096e192b6984d25b2977996759b672778913e8c4294811cd98f7e8e4395591d3091af8c3f995c241a922e8cf2989e247b8ab2138c0da01be0100f1a381c551b9092ee094396f52048910990c092fc1ca9919496199c6921d19092943098131b77905e96229add179794429b569e522149973e9c4e9f5f23f997719c9f9f0f234f98939cfd9ff1226898b69ca69fdc225c98889cb89fec223598859c4f9f7122c4972f9cc09e24224697e99b339ed5212597b89b029e8c210d97949bce9d4321c596669b9b9dfd20e895259b3d9dd420b895a29af89ca7202695269ac69c78201c95f599729c3c205f944b99f99b991f4c94ae98c59a731e1d941e98369a071e6f946f97ae99fc1d5095089607998e1d6d948a96ae99111d90929897f3988d1b6390ba8f5d911819eb9ab49dc49e3724969abc9df59e2924429b659df79ebe21bf9ce99f64a14c25689c4aa098a1e725be9cca9fc5a15425fa917b10ea8c2c21d7962d959f9a4421d39ce69f1da1ac259a9ff0a008a38527919c929feca10b26e99096913b95751b0080bb8456880c17e5901d0e710d851c3892579b979e2623dc8e108e98917c190080e700f4010714058925892b8c7b18dc90cc96fb9b8022f790748d8091e01900806c817e8c5414f688088fb691d719ce944697629cd424f397c6908f9c2726238f8913bb04d51bbf8b0e1de21e451b499362149c98192509963695ee9c2926d58ec0912496bd1c3e8fbb93b0983a1e5394089ac09e23242b96cc99019e4f25439613980d9e782477116219ad171720b296f298a59e1b24c997b59b589f78249d98dd9c7fa05224bd980d9d75a026249a98f09c60a0e1238398029d37a075239898009d05a0dd224598b19cd99f622225984d9ceb9ecd213f97ef9b419e2621cd96629be79dc520c396309bc49d9220a496029ba39d6120e896d29a429d37204596b29a2c9d26202e96ae9aef9c2b208d95f099569c471fc09351989f9a551d23939698f19a971d33934b98c29ac01dee935f98b09a931d619408984c9a531d26949d98879bee1b9391b7971199c91ad88e7490738eed18fd9bd99f74a0a6249d9aca9d8b9f3b2361983c9be59c811fac9c06a0a6a1f324e59c95a026a2fa25699cc09f81a1ea24e198509a799c9a1e0097c0985c9b6b1e6f98b69be49dd8219598e3995c9cfc1d60985c9d7ea00f23d69108926094cd19ec890c8b408be419d29a2fa0e0a1df249f9ca9a0baa29b25a789f48a778e661800808a0092042411bf86ec84f48232177f94ab9af59e3722038e059026934f18008056016582b0117e8c568f9191ae186b98489ca69f8526509a9e9c27a03e2757903f8f588f6d1a768c8792981b47192c96b39c569fe1242a99ed9c80a007272396769aba9fb825c510d5178217491e1a95179ab39e91243997be9cbea08f25fc978c9b87a08f241992d894129a2a1eeb96749b2aa03e233298b99c53a049232899f99d1ea176234699229e20a13a2395991c9e10a104233499399e02a1f022bf99d19dbba0b7220e99ce9d82a07322bd98629d5aa01d22d098349d15a0c721f298139db49f7e219898929ccd9ecc20ca971e9c5a9e6520a296499bbf9d0220f595e39a479d931fd6957e9adb9c2d1f66959a9ae29c381f3995859ab69c521f5295129a509cc61edd947699099c581ebd940999579b481e7b95ea98849b6f1ecc94a299759c511eee94e199339be21de0114a18f6183d1e9198489baa9cd021689a489d0d9e1a1ff59d37a0e4a1ca24999e00a1dfa2b525349eeaa0e3a258254d9d31a0f6a156248a9a0f9de79e701e11991f9c0c9e961d5799049d569f99207998299ba49c491b73958098e99a1619a59038954498731690936697b798a61a0c9d30a048a21c24af9d96a041a30925888c63915494ef18ca85e781cf87f618969be0a01ea3bc24249c5da0cda28c251395fa966299271dfa9a09a1dca3aa26219f47a34fa58228609e14a2f1a4f4273d9d5da1d5a4cc27a49a509c81a1b4251015fb1a971a6b1c0095c19c98a07d244b9bec9e5fa2dc253f98de9c72a0d224d48d22941f99ef1b829032996c9d1321288a94901e95991748819a89df91671371801f821892b00dde944a9a459e1a216a980b9d3fa0312384998b9d18a1d0228a99c09d0ca1a2222b999d9dd4a03e2297997a9d8aa0e521b298929d93a0d6217c98209d35a02d219798259d19a01021b998129dba9fe3204498e29c8c9f93203b98a49c079f46203098669ccb9e0d2026981b9c509e8f1fd397c39b0a9e6a1f0898999bae9d581fb1978c9ba29d491f0796ba9afc9c9f1eb1952a9a5b9cd31d9995f599349ce91d6e95d4991e9cab1d25967799e29b331d2d95ae9ae49c591dca94469ada9b1f1c1199a29cba9d0d1cdb99799e3a9f99217b9a179d269e4c1e0b9d51a031a2a124a59dcea057a24925d29db3a062a22925289d6ca057a2af247f9d8f9fdfa0db21869d43a051a24224479daca0a8a2a024d79eb2a047a247221a9fa5a1f4a329257e9f36a280a44d26f59f5ba225a5622661a0a3a20ea5c02673a0cfa231a5e32667a0c1a214a5fd261aa091a2dea49f269c9f5ba29aa44a26ec9e21a287a40c26729e28a2a3a4c025b79df2a1d3a4c125e59d44a170a46325699ea9a1b8a49c25c09d7ea03aa46e24e59c819f99a13c20a69cbaa0a0a31224f59dc9a171a473252d9e46a2afa49125c69d14a28ea458255e9dbaa199a47f25869cc7a007a48f24a09a01a068a25023a59ace9e0aa12d209a9a269fcba1a522199bc09f73a2e523089b5d9f1ba222232d9b469f07a2f2228799979e35a2ac22aa997c9e4fa10b2271993d9ef8a08f211799209ec1a03c219498d79d95a0f32082989f9d40a083205b98609d1da05f206498279db59f47206398c69c339f01201a98a29ce49eae1f4e986f9c969e841f85981f9c289e321fc197f29bba9ddc1ede969c9b969db71ed5956d9af59cf61db7956c9ac79cbf1dcc952f9a9f9cb31da095249a5a9ca11d6d958f99529c541dd1947899509c381c0892de977599f41a5a98779c1e9d0319f39cb0a03aa10724129d05a0afa14d24329ed0a113a4b425c59ed4a15ca4cd256f9f20a230a4cc252b9f4ea284a4b025679f7ca275a4af25159f7ea2d8a4b125719fc5a2c9a4c825f69fe2a2fca49f25fd9f08a3faa4882511a0eea2dba45425f39f1ea3f9a45025e19f31a31da51d25949fd4a2eba4fb24479fb2a2e8a4e824619ff7a17fa48e24479e47a107a44224519e9da13ca41224819e96a1b2a42c24759fcba178a42024b59edca194a43924279e5ba130a4d323039ea5a171a4ab23c59da4a1eba4f823a59da3a170a40924ae9d68a14fa406246c9d54a132a406249c9d6ba14ea42124609d8aa160a45124da9c1ba133a44324ac9c2ba01aa41a24189c18a04ea38823059c14a045a36223cd9b18a0cea2eb223f9b28a0d9a282222f9b0ca095a25b227c9acb9f6ca216227e9a6d9f07a2cf21109af19ebaa19f21f9998b9e43a15c21d599689ef2a00a218b99119ea9a0d9204199eb9d6aa0ae202c99979d42a06e201a994e9ddd9f2e20b198039dae9f1520d898ae9cf59e911f5c98789c9b9e0a1f0598169cf99dcc1ec4979e9bb39d391e8b97819b7c9dfd1d6697799b4d9d0d1ee596179b549d151ec4960e9b199d5b1eec96e89a1f9d1c1e0696609ae69c971d2c941e98c899a91a56901e954e994e190a9d8ba096a10624b79d6ca1e9a26924689e73a18ea3c6246a9ea4a1d5a31b25979eada1dea34725ec9e9ba1eaa30425969e96a102a40525ba9eaca10da4de243e9fcca134a4fa24479fc2a14da4f324419f99a131a4e324f79e44a1c8a38b241c9f2ba1dca388248a9e7fa10ba47624439e69a131a45f24709ebaa156a43824629e67a13da42f24019e57a122a41424b09d8fa182a43624069d0aa11fa511241a9e19a146a45523e69db9a002a42823a49da2a086a3e722c09d93a052a3cf222e9d67a04ea3cc22989c75a024a3ee22799c5aa007a3d222659c3ea0f7a2a922439c33a0dda2a922529c13a0d0a26922219c30a026a36e22139c2ca0efa26a22019c10a0cda23022aa9b08a081a21922389bbf9f37a2d121e09a6c9fe9a16c21cc9a399fc3a147215a9a559faea103216b9a189f77a1d020189a1b9f74a1cd20ff99e39e4ca1a7209799b89e10a19b205d99479ec1a066204099d39d6ba03f201c99519d1ea0e91f0699ea9c629f3b1f90986c9cac9e881e2798259c5a9e5a1e1b98f39b0c9e0c1e8f97039cd49df41d8097c39ba19dc11d0897c89b799dd71d0197629b459da01d7396079b0a9d9e1d4296bb9aef9cba1db496499ab79c7a1dad95b3993e9c931b2695db991f9b131c6b9f3d9e2d9c590f5c1d0c1ce41e8c240121c81de51e1e25c123581d4d1e3a249125b91e1a203a24e027d71ee3206124df28641e4620b7235c29241e32212124322a7c1ea1214b24e72a271fd922de246b2b552067229424ea2abb1cb2215924e0289c193c203a22c9284d1de72406269c26f51e5d28bb2824238c1a392a392a291b78a1022a262c219fcaa83d216b2b7396c2a2f5293c2a4a0a9294242c052c2c124f18c52ef82b2614ef1a782eaa2af0113e1aa12e3a2e53143b180e30d62d670fff147e2f6e2e718c9c9a832ed02bba9a91a1822d822d16989ba1172f7730a5100d92cc2ff42f6c168a1b482f242eb315e61c212e472dd1166f1ef32e212d9b0eec1c142c132ad315511d77270e262415151d1922582111096b1c4720aa1f2412271d0220961fc116631e8f2064204e18a71e87209d200e18451e1b208720ec16801d301f3a2081163e1d8d1e0720ae160f1d541ec81f1c16dc1c161ea91fe115de1cb91d6b1fff15bf1cb51d961f9015881cb41d941f6315581c8b1d8e1f5e15451c791d521fe514f31b471d3f1f1215631bde1cde1e4815331b6b1c681e4214371a231c011e69146719111b071d51148f19271b301d4614d019b81b811d9d13031a281b3d1dee11401a151bd91c81127419fd19fe1c00803f95899276818710c91a5e1d4725af19511c771ea425251b0b1c161d69252620de1d451f4725c523ee1f99214126532502202f21a225d424481d281f70256527581d4f1ffc248828611fcb20952646285b1c061d95273128e01ef41fdb28d725b20ebc0a21280924049791164f28bf1e0e9abe1d5c29f718fe9d3724c129639ac0a1f926562c85955da0a52ba32c6b953e9f2a2c882dfb8e859d792dda2d078eb59d392e392eba8e819d152f492ec89711a1572ec22eb5950ba1833006300e91e3a02d302d300097ada3052f342e88990aa3fe2d012f80981da1bd30333062918e9f02315530f39534a03e2f5f2fd88e1996862e322e2715f61b5c2efe2d2414d21c0e2a002b9b14391e45254a27d611fe18b91657233c128d1ba41c4d2203152a1d081e5e2208182e1f5f2053220418111f2e20da219f179c1ef71fc121d116061e911f8221a716b81d3b1f72219e169d1ded1e44218016591de01e2221de15fd1c051e89206d15551c8a1d37200f15101c0f1ded1f9e14751be81c8b1f7714311b991c4a1f4614dd1a7f1c1f1f8d14d11a7b1cf61ede14221b831c031f11143c1a101c301ebd13c419f71b011e3014cb19f51b1e1e6314201a001c341e4713ec192f1b881d03111f19c3192a1d2e115a18e818071c5e9131967f95fd80198bea19631b91241213fe1cf61e48257f146a1de41ea0255b151f1dca1da025291db21e1c21ac26ba1f821e8a203626f8205f1e3e205d266121df1b481ddc26f3227a19921b1e275522750e78100728ca21df8f9291d828df1ebb9a619d5b281a1a2c9ac79c8f28d8972599d499bc280c9865932e1f562973971e98d224e12a01942f98ba28b02b3291eb981c2b2b2d698c9597cb2c1d2e7b89a198bc2dd82e868dbe99fb2e3e2f4793769c372e552f9103ed9ad1302e305481c698d130c82ff18f439a842ffa2ef4883e99552f0d2f9603489a20314730238c4d9a0831bf2fd888a49a5b2e1f2e5d8fcb947e2d7e2d56155d19362cf82c89149f1c1226c329d112e41b841fd225b813951a791933234014bc1b8b1af0221016641da61d17234e16a11d4f1eb2227c16b31d661e73227a17691e7a1fd8229217b51ef41fbe22ed16421e971f5322aa16b21d4f1ffc2130166b1deb1ebb21e315e81c341e34215f15791c451d7a20ce14fe1bc11c17207714591bbc1c13205014481b861c06206614f61a911c11205d14521a321c771f5214201a111c3d1f2d14f519ca1bcd1ed213b6194a1b3d1e1a131619d11a281efa12d1189f1a191ef610e217b718521d210d3c151b16351cbf0f8b163417051cd482dc0c71148301bb10a91efe1f522642945018201b3c26ba8c511b451c7126dc950f1c241cca2685052f1e2c20a2286c86251e9a1fed27f312171d451d3a27b414f818f7180828f115df111c0a97275d146c96e39439297d07399acd9c5f287f0236902594d01ad095e296159a7026829cc499419f6628639ae48810996528889a2198bd1348298496f891a424f62a8892c61125295d2cfb8ed416172ca12dd28c5f14522d6b2e1782cb17952e562f1d0f561b842fed2fa013401af6309030630ce318b8306730b5139919b52cd12d48105310872b632b5d10de15bc2e802e9813a114762ff82e3f0f8f18e72cba2de51052112d2b9d2c20147f12ad27f42abe134e180c212c281613cb1a3c1df6256f14841b801c51244e13e51a2f1a45243915431c3a1ca024e615bd1ce41c8f242715a51cef1cef23a715f21c421d81230816f31c981d26237d15cd1c7b1db4226815611c2a1df4212715591c2c1da1210615171c031d5b21be14601be21c1f211b14ef1a3c1c5b20e613d51a231c2e202d13e119291b171f3113b2190f1bfd1eed130d1a431b311f8913e119881b4f1ffd128019051bad1e10134719db1a631ec2116d18c4192a1d0813a718621abe1db911bb18f019841dfc0ff917a618571d2e10b717a817ec1b62837c0ff30e1b10058f6f1991199d243989911abc1b45256494a41a0e1c42262698e4192a1a6c26c394191b8b1c3126a695d518bc169024fe903f1591108921259886123f8f19255399190f5493bc264d9a0b107b917b28119b2f947b9a2e2786929a925a96d1208c9d199a589e1b26ac9d049c11a1d527a79af387799c20265491d48aa88e09207b97ce95df92f227ed96528ea123b42a1394b2193f29592c7390f916b22b3b2d0d8ee216862d162f83033f1ad72e01300d130a1caf30af30940f021987309b302e0d7817e42dad2d17117f16fd274728f00b7814132eae2dd20e7816912d142e4f0c3a06252c312d1a1041159d287c2bb40ff412fb218329860e6e15e68ad926e00c40151f942924500dd4123b8e4f1e560ff9179a0d20228e13391ae0176e247014e71b231a34244c14c71b2c1ba3230715281c7a1b4923e4141a1c3b1c1d23a114241c641cf6229014dd1b791c40228d14a71b121cb0219814f41af11b2e21bd14601a481ba9204514cb19d21a48209a135d19061b35202b137419c91af81f3b127219a31aa31fb3127619ad1ab01f47139919721a6b1f3612fc18691a621fc212a0181d1a0a1f0e125a18ac19a91ef31195177519191efe10161811191f1d4a106418d5185f1c4a108617e417cc1df28a3f91508fda05388c8b11fe117e1be89206147b11952318964217d217f725d398291776172226bf9773187d1805263d97c216c7149c241797f8106d8d9921249a818735923d25369d019a939c1727f69bab94ed999628ce9c3496519db027c895a892e798fe22939cf294b49a74262e9dd39a8da00728f9997b8e849d75267595b909768fb620ed961108169c0827729522121b0de8288996ac14a622cf2a3191ef172f279c2bfc026e1c002b4f2d0b0d181d3b2d872e8a10421df22d4e2f940e6f1a6e2f4e30200db919e32c612d4b102a168925c426fe0ae417bb2c3d2d6a10d61a2f2c322d8a0d521785281e2c270e98165e23182abc0e3516e315d22897108d18d6958426230dfd15e8965b24d10e30145190b51e1110f617208849232d13541a9e1412257c14d41b6f19c1248b14c71b9c1a34248614401b9e1a9c230b14a31a9e1aec229b13a11abe1a7422ca13541ade1a0a22d313751a5f1bbd21e5131a1adc1a3e216013e819a21af920fb12bc19c51ab62062128e19011ba0209a126519be1a73203a123b19f91a4b206612e6188a1a072040127918d719311f87116f18b419061fce1169188219211fa1112918d2194f1f35122d183d1a471fa1107817c618211e9e0dcd15e115ae1b5c106117dc17c31bd1822a069a071e10ce8e7b104f0fc31c8b91e90f0c1145215f95c30e3710b1228498c80cfc87262499980c12a7110d25759820132a0e34241798ec0ffd8d0c238d9a60874e9444250b9df699a19c45274a9d329aa09c6028589ee899469d0327259a4393299a4323099e0c96a39baf26ea9ca595b49d2f28409a9b0e749b6a2623984184aa9487204598d012a49b0627d6963814949c9d28b196eb119e95e1281b961d89a51b202aad9133184a24b92aca8d6c1814284b2c3f0a7e1a1e2a9a2d6309c21a972c432e640414105c27132c0412a6145f219224060c77183628bc2b170fd2198b27402b650c7a198c24052a2a830715db186b28b0903d8fa29ff0273c8e3088b69df525fa80a705b09914241888120ed094701e040b56155b9307234b101f184089cd2419128a196f148e242712271a891632249c12511a4218e12313139c1aa41894237c129c1a5e19f7227612061a52194e223b12dc195d19d921b0113d19d9196521c5111819a4191b21b511f918cc19d1203e11c0189119a020371187182c1937209510b417d018d61f1f119417ac189c1fad100d174118681fed103b176e182420e10fb8163018d51f950e2c15e9157d1e3e0e2414da15071e520a5f122413ac1cec05041379114a1de70e211670150f1d6d849681fe81fb08a58ff1070a09d31a4992cc09f68489204c9596840691e420a09abc8cdb92222438995212b1883e25b8983e1344886f244498630f548d0d22269af0109c92a925679c608f28996327349d1998749b0029f39cca95849b59274e990c91e19664205d9d2596659c73264c9d6699999f0b28319a5597769e34265c96478956931b18b4944202729395195198b20d0c9c2026e3981d14d59c7c283f97db14e09c4428db956b0f1d9926296995be12651c202a3d91a318d622e32a878af3190925032c5789c015c0233f295b83c011e71b19237e82b5154b1eb129258d6c14101a2e29b588fb1261980c28e18297145f9af526c282cd15229c2027a3051214239a7525c804c313839805240007ee101994b31e790b83148195b122180c40158395a224f90e71176b92c624f00f2c181909a9249310e81821126824d010bd1965161b248f113c1a1f18a1238011a219b018d8222b117a19a8180b22df1083195a188b21db10f018a118622159105518b417d1203a10e2172618bc200d100a170e188a20f0100a173a1845204c1018164817fe1f64102916f817e41fd90eda15ff16601f140f6a15d716361f850e2d1562172a1f160f4d15d917d61ed40c02156916661d01078d13a0117d1cfb0b9b148b124a1d8584538c7a899081c890710c2a09901a9b97518cd592aa24ab993a91c0954e27349c1f957c975b27889a77080d9515273599e986749619254f995685d894cc20c19a1291ca98dd252b9c5694939aaf27f19cc596c09b54292f9cbb92429a1028479aa29103994422ac9c37961c9c9b26fc9c89987c9f3b270a99a890939b2f25cd953c023e918119cb94430280920b1bc697f7081b9d62265999eb09a39e9528d298dd12ad9de628ad975316479d1a295599c012d19ece28878f5b1cf6158228ae88e21a811a3127c2803c0eb2109b1813026b106a113f1cc30707172a14c72583038e185492d827378e8718c09b2a28bf13001df60b0328f50dd419029957274810051996952326c105951570989024a8031f1269940a1f4b0ae514ee9431239b0b4216f8979225790b931604958225a40a3616a992f424910cac16d5885724fa0ccc166708c523cd0c4d1743114e23d90df4168c14e222800e451754146f22400e3116e114d221ea0da116b81485210c0d761668155b21d80c321644151d21a00c3e15fd14d820980d8a159e15a320e90c7a145515ec1ff00dc51401153620cf0c86142915831f440bbf13fe14441f7e0b5c12bd14e71e720b0b12f514b81e6e09a7113513961df700ca0ede084f1cc50bf0136210461b15833c840c860e0bf5904b08ab03e81ba395020f68877c24f995571758159226509a840e5f090227349918155f103e277999d687c694ab252a9ad3869896a9224d9c0094b299b126f39c5a97859c2c28689db999e69c62297e9cb796039c56275c9bdd921b990422859cf6934d9bad26c49c7696719dff2782990d91029c96256795ed869a90b018ea93fd8564928b1996974b0e4f9c00260d99d912149ea82814994b136f9f51291b986d16ca9dee28ae95ac1a349bbf286b947a1b129a5028ac9040180399182605880f0d2e8ef41a3f8a570b0692ff1cb78c31140b996924b5870314df9a4b24ed8a1b125996b720198c3114b99aa524f78b78119a9d72260a8d7c07679c8125c388bc0c6f9b3e248387b50c8f95f21e9586630f78982a23b2826c1251994625da82401488980325ab0246140c96d424a8021a156d9477245e029214b19105244902fe14498e44234302e1141288ee228009aa14db07b12284069313ad0d72225a0636146d0735226f069314390db621ed053c14d90c4e217b05f2126f0fe1202d05b312200f9620f709af11cb107e202a0adf11e01092206c096711bc111a2050092a117911d41f5307e2108b12821f790a97101314fe1ef2033f105c10a21d3585d10c9a83721c6d0bc812880f461bc981df88148b068287924a8d9f90d51bd198949376967825069b5595c4981a283d9bab91859858273f9bb491b6983427d19934932c991426779a7e9115981122179c5a93cb9a4d26b79c91946c9c1428959d2997ae9cbf29459cb1924498c22772952f035f9146183397b48e0c93e31a559a0a946098c024e496ca06cd9ae124b4957b877b924a19d79317827393641934989a884c9cad25e39a150a6c9eb6280b9a1b11f59fc529d299d8158a9f9e29fe971f17bd9e4f2985961c188a9dc6282b948c160e9b4a260b8be40fc7926e1b458c92100295c31de58e311579992624ad877e1431985623df878a140b959c200d028817bc954324b0823f174d9a3f269702ad16bb970d250986d21456987123c684051248942a1f9b866d14319766236f883a15d5974c256a887414c6972b2505884f144c97c524fe872f14b39579248a8745123794412438828e13fe93ec233d82ed1242912a233c827612d38d9d221a82f4113c8db921f0815d10c5868e21f4812d106d862c21c781e50f1886cf20b981bc0fed05ad20c801c70feb05ac20ce01bc0fd90586209b01370f8b0549208301c20cfe04b81f7a01a609d204751f9081a9031e0b561f61011609690db21e54836808d203501d9f8987875c8f3e1c5e02030b828c861a0080888580890081ef92578ef0926d1ad599829693999c25239b0899949c3528039ca197559cf627e39b0f97f59be026ef998897b19bba25fa9ac694e0987521f99bd395039ce425a89cef975c9d66288c9dcc99fc9c7c2ab69bb197aa9c3428ae95f48c3394bc17f996b78cba94761aeb98ff9109971425cb97c98d059a1725f9964e8bc5933a18ad95e2880d95831a9b99cb8f1a9c5026019b848a069efc28b69a650a1d9e4729359acd13d59d1a29bc996c15629ed228009948131c9e48288095fe10039d5d251d8d4d0b1b95a81b3a8b740f3a96221e6c8fb01579993e24018e1d16d9988323728fe514d897982164908b10db94d024f390f414659c70263c928c11df9a1d26028fb4105c9bb024428d01042d96651e1290b706d49925234291b0075e9b382506919307f29ad6240d912707f0997e245b90f30612994a240590ad86e49810248d8e7686b698b0236c8eb38c04986e23f38d6c8c8196d122c98c7785eb951722c68db38bb494b821ce8de1847e945d21b78eb3841b932f21cc8e8884f192f720938d66842991bf20f68c1d84d1905720038c198a2b925320a88bde89e2910c20dc8a698e2b90851fa28a708c2290741f3b875b8cca8d741f078a3f89da8ac71e4e8d8c8f3c95211e9c82e7875091da1c0080028b8c8c33847094b99207954d1b679a4e98189b0d26669c129af29c0e28119c3c98599c4327f69b0098ba9b6d26ae995f96859b84256a9b1d960e9a1e22619b7298b59c2626b49c25988c9df627d69ce198a79df429d59b3c98f5990a28e897718e8494a61854970b8f4e93ce1a709946925c9405250198b88d889a332500985e8b549438193b959c830e950d1bc6995d8ec39a3425a99b7090e19d92289e9b21916b9f9a29fa9ace8a649f8129169a44102d9e6b28cc97b912349d0e2844958211269c4626328d4c0c6a95101c718aa80be595cf1dea905710fe9a8e24c590f711429aa823cc91850e4f98fa20fd91930d3e9c9f24a0937e0eec9d13266d939c879e9c6725d8905e06b89c4524818d3283d196a81d379171064a9b38231493d987b39b8c25e49217886e9b43259c91d487329b032538929a872f9ac224ff90388733996524ef8fb18643980324a58fb38c749866231490418f3d980b238990399204988e22a18fec912f98002210909f911197aa21cb8f6891a8976421728f5b92a3963921608f37926596f020a78e21924696c020918eee91579595205e8d8c9010955820208e4e91f293de1f218eff8f48925a1f248d4c8f7e8fe41ed38e338d5f90671deb917090b094a21c2d870488c593c51d7182ef894b8caf84e8911d8fa992c61a6899fe964b99f3249b99109518999927bc9c2699819d1b28209c8d987f9cde27539cea97469c1d26739bc694039a2023849bb695d79b4326179c2d989c9d1328ef9b7398a09d87288f9ab9989e9cc027d09863920298921a37997093d398891c3a985d948299ad2488972390f599be246296c5832895ea1920963a045695011c4199cc0f469b2726599ab515c49ccd28439af716009cc428cb99f318169cf0285899fe18149cba283f982118119c5f280d975e14179a9e268e90e60e7295ce1b6a8d580c7195881daa9234122199512400913712fc968a235591f511b0953221b18fc913f6964f245e919914d399df25ac8ea1142197b12539909d123c999524438e110a3f95671e7791ce066a995723ea930c88d99ba7253b93f98d0e9d7a2532937092539cf9240293d493329c7824a192a093fd9b2e2407937494e89aaa239c921295839a3b234592cb94569a092317923695729a81228a92ef94fc99ed2171928f94a0997821a09238947a9953218f9313942399e6200e925793c8987820a29125948b9840209a90d693a897bb1f26906194a597911f84907594e5966b1f0490a2942a96441fc98fe3932495d61ea18f85936095d21d478fd9923996d61bd0805b0bd38a6c1be88986829208b711389921984c997a243d99b898179b17248e98bb977f997420eb9a1b998e9c7524949c969ab29da925ce9a029a929dee243e9cb498d49b1822ba9b539a059e92259f9c5a9b589f7c27939da89c17a0bc29399c5f99099e2a288793b68d629377154f96f2901196ac19cb99e892f89a84258099c08e179bed250f9b7f10ad972e21299aae158f99ca26869aa2174c9a0728bb99c218b69a7c28509af218cf9abf28d999e918ba99b8281699b319c999b3288d97901955979d288b968f1a53956d287890011b630a5725ea910a153a93df219190c217c4933125f19150124e981924e891e10b75989221d2926d8d419d892495958d94fd9da625b9946194b59d4b25c19231943c9d6f2464935591f698fe1f3593d991af9b5423a1947894dc9c7225379434938c9c69259c93db92519c0d25dd930496539c9b2447937995269c0b24de9380963b9c1d23e0938597e29ba1229593e897ae9b75222d931a98c29bee2168933998669ba82117930498169b51210293c097649a1621d29273972f9ad320f892c096f2998c201d931a96e7998420d493639599998f20d3944595b6998f20499365958d98c51f989146951298f21ec4900f95c496f81ee290fd945d97c71d2691f794ad988b1d308aaf8e0b95301c00805e90858ec10dda9ca79e14a04326549d099feba02b283f9d7c9e73a0e527119d449de69f5b27329c2a9cba9efb25119b029ab29d0025149bf797b99b25224c9bd698269d5725209cd199549e0127089dc99b0c9f7428ec9b09998b9dd526e394be8dcb93ff17259578908593381aa999b095b0978c25029ac897d19cdb26f29aee9133978020f99a54100a9c0228489ccd10f39b9a289e9b0911849d3029ab9b7f148c9ea6295d9a5e164c9da629b99aa217a79b1d29fb990017499af7288199f517ea998a283198e11765992c261596db1388976e21ba97e214249b3f269097ac163c9cbe26949887162a9dce2730973815729e8027e0975b918fa049270f967f916e9e1126f0939890c29c63246094608f3598d81dec939992299b1c223095c894ed9cba24ae953697109d56244795ee97f59d51243d963399359e4724ea95d599219ee9236a95ad99db9d6c23ea947599519d1223fd94f599089db1227f944899bb9c4a2272942d994f9ca02138947998d99b0621f2936498049ba220a993f497229b642084931298989a452009940a98589a1c204b930198889a2520da934e979199111f1d926d96d798241e6e928996d298731e069286964a98b11e4d92a3968b98091e8d919894b497911c968c84919e96d81b00801d133c15de14f39cbc9c379e85255b9e8d9e8ca0bf26579e449e9fa0c325a39e379ed5a0b6262a9e419e78a0f3258a9c039d589fe225259cbd9ac99c6622ea9cf19cb09fa9267b9f639ee7a0692863a0f19d0da1a228d49eb39c959f6e279c9c4b979d9b4223869c6a994b9d4127789ce598339c0128589a3a94f19cee262b9b58939b984b231b9b5a90b59c1e289e9abc10ae9cb7282c9ae415b79b3b294c9ab219b19a70296d99c31b2a9bbd29ce99ba1b44985f298d98471bfb957f294b98b21bc59503297d97fb1b53956d288298111b7e9795283b98cd18f19a8128b4976913719db028b3980290c29d8b2715988894109ece270a986095429e9b279d97fa946e9d3a2610977b94809d142693967795399d8525f496b998ef9dd424bb976f99009fdc247297f099539fb7246597a89a749f86246f977d9b929f6b249d97bf9b5a9f372445974f9be59ec623ab96af9a549e0323ff95359a0b9e93226b95c7995d9df72110954999bd9c2d21c8940d997b9c8620a594cc981a9c50209994c598019c20200d95ca98dc9b39204a95da988c9b0e20cf946a984f9bb31fad942498959a181ff2937597329aad1e06935d97de999e1e2d9277974799b31e7b928c97a699d81d1b93a197339a011e16901695d498a11d02807f10de126d15ea9a029d079d7d25309dd29e36a07626c89c589e19a07226e89d139f06a18927539d149f45a03627a49ee19f7fa150278a9f22a0e5a1f626c89f92a0d6a2ea27d89fcda018a37228c49f3aa04ea25e28799f14a048a28c28009ff49e0da2b528949e929e0ea12629f39e809d99a02129229e3f9c95a0ba29f99e5699629e4f29bb9d6e99959f9529b0a01b91c49c9329ce9c4f146c9cc929289cda184198f729439acf1a7293022add98471cf5158c29cb98af1c2816f6293f98131c5213af2957986b1c950c0c29c4976419a79717297f98d516cd981a296b98401685999c28a3980117d198802797967d181794352757990695cd9dd9269999d197829de825a899fb9a38a0f725df98359bba9fee2496988a9c5ba06424fd983a9dc3a03b246198629d91a0d72344980a9d51a0a3235198c49c26a036235f98a79cd59fe62265988b9c7d9fd0224698609c5e9f5f226697229cc19e0922fe962a9c789eac21c796169c4c9e8621a396f59b179e3e21fb959f9ba69d0721af95099b719dc0205995c99a209da2202195659a019d85200d951b9ab69c69209694b499509c1c2053941599359bde1e6d945198589a291e9d947497e899381e4796c797c199731d3f94b595169a121d7d8f8894cd98521ccf040e153017490fde9ad89dd29e2d25559d66a0caa16a26de9dc8a069a205267c9ee8a0a3a2bf26ca9dd9a025a26726d09e3ba116a384265d9eb9a054a2dc267e9f02a148a3e1276ca167a226a46c2816a14ba24aa4a22867a086a134a4b5281e9f11a0e4a26b28059e47a06aa2dd28459e519f81a1f928a79ed49e04a23f29149ed79ffea14b29949ddc9c60a0092aec9e0e9db1a0cb29f29d499d2ca2732a369c8994dd9dd329cc9bb7941e9e7b2ad699978b259c192a3f9b1b91ea9cbe29dc9a39947a9fb829f69b629ac09f46299c990d94029a1629b59aab9b11a06f29709b5c9ccba01a29f79a019daea0ad27389a359c8ba00127769a119cbfa0ef26c599769c72a06726ad99559c97a0ad25e5963f99319d7424a798169d7aa0cb24d8983d9d60a08e242899a09dbba06924e298609d8ca03c24d2983a9d69a0f0238898029d45a06c237b98ef9c2fa0ce2228988d9ccc9f3a22c497239cfe9e9521f796e79b709e0b21c0964f9b2c9ed620ca965b9bc79d9420a296339b9d9d5c20c396489b6c9d21204d96e69a1c9d19207896b49a319d1420a795b69a2c9d1c200f969899509be31db0947299579be91dcc94dd981f9b101e4794ae98a49afa1d4994d898cd9a041d6e93a998cf9b951cd790ca955b99891cba0891160118ce0fbf9b779e3ca03025c79d76a080a2c825719df1a09aa2d2256f9f84a178a3e726589e31a104a389263a9ed5a0d6a21926fc9d64a050a2b925329e79a060a26a26639f0ca157a3e826919f53a193a3bd26e8a0f9a189a42f2862a168a14fa40028ca9f33a1e5a33728bba05ca361a596288ca0efa011a403295d9e1aa0b2a22529839ee9a033a49729e09e39a0f2a278295f9f1ea175a4ee29879d339d65a17f29889c389d41a1ff29dc9c5f9b6d9f2729a29c019a8a9f0a2a279c4c9b2da05a295b9cc79a40a0a5289f9a949c3ea063283b9bc19abea16a28d79bb89d87a35a282d9c089f99a3dd27969a019da9a0cd253c9ae59d3ca14626b699ad9d4fa14f26179be39e22a2ec25f299939e2aa1d224209aed9eeca1ca249799569e28a13b24af996f9e72a111248d994d9e5aa1ac235999689e32a133232199439e13a1082334995e9ed5a0be22df980e9ea0a08022c8989f9d73a02422a898679d21a0bc216a98ea9c909f4b213398919ceb9ec02089970c9c2c9e452044962c9b969dca1fcd959d9a539d6d1fa295779af99c231f86954b9ac99c121f6d95349a9c9c051f2295199a609cab1eb7949799f59b611e5f9422991d9b351ead9431992f9b5c1d78935798d29ac01c6e916c97119acc1c2915b41a051d6819019a669d2a9e1323d89d3ba0b2a1b024fb9e80a13ea30426729fa9a1c1a32726509fa9a1c6a32b26e59e73a185a3c3253e9e20a1f0a28425289e17a1dea2a8258c9e11a163a3ba25729e1da159a37525099f6aa146a46e26d09fdda195a493262ca08aa2b2a48a2685a014a3a5a56c2735a085a223a65f27b89e5aa2b8a45327b79e42a27aa47627ada037a42ba62b28579f03a401a64f28599e8da1a5a49e27f89feda258a59428679ee4a1f0a42f28689ddea01fa40128ae9efaa055a4c82732a043a252a53b282d9f3fa040a47927149ee8a1f9a44b28809d1ea086a3dc266b9c97a003a4e526249c3ba0fea30f26759c43a0c0a33526da9b259ff8a1f324bc9af99edba18224df99fd9d2ea17f233a9a639e74a1c823de99309e33a16623fe997c9e8da14223b799699e73a102239e99429e25a188227599319ecfa0222217999f9da8a0b421bc98609d45a04021a2982e9d40a0212193983a9d06a0e0205998cd9caa9f8e206498b19c0f9f36204598599cc39e082042983b9c579e971ff497f79b0c9e6d1f4497c19bbd9d3a1fb8965f9b769d101f7796ea9a0c9db51ed895839a689c051ebc951b9a449c1f1e4995b999039cee1d93958599ac9bba1c3d94b898af9b5e1c1692ee97269b6e1c0504861032145c13d89af49d8b9fe523759d5da062a2b6246c9e29a14ea3a825909e86a17ba3d425929e9ca173a3ce251b9f7ca1e0a3b825719fe6a1c7a33225c69ffda130a4ce2514a053a266a4da2524a0a7a271a4d0253ea098a2dda45f268ba0fda210a54c269ba0d0a244a54826bea026a358a54826aaa03aa36ba51f2695a041a35fa5112650a007a352a5ff25cf9fc8a21ca59e25529f8aa2fba46725649f68a2eba44525589f3aa2f5a47425529ff1a1c9a458252c9f0fa2e9a46a25259fe8a190a47825799da2a102a486246e9efba196a462258d9efba1f1a4a125889ee4a1d1a4a625379eb7a1a0a43325029ec4a1c3a45d254f9d5aa15fa4f1246d9ceca00fa49b24229b6ca0e1a27d23c09a07a0dea2f623219b0fa0a6a2bf233b9bd49f76a24b23879b16a073a20b23329ba69f7fa2db220f9b7a9fe0a16f22439aee9e72a1df21ed99789e0ea15b215399e99db5a0e5200099939d79a09120bb98659d43a05920b598349d19a045206898fc9c919f09202798c39c379fdd1f1998a99ccf9e6f1fb897619c359e411f0e97099cdb9db31e4197e79bd49dfb1e9096639b349d411e5f966e9b239d4f1ef4950f9bd79c191e1895749a869c181e0e95289a7c9c4d1dbb942e9a069d061d57937097409ab41b0000cb0f9c13310fe79be39e64a0ac23e99d12a0d0a13e24f19e1aa226a49c25139f35a244a4b325759f60a242a4c125839f60a27ea49725989f79a27fa49825a29f94a2c3a49b25b09fbda2d3a4af25c79fd9a2efa49225e39ff1a2eaa48d2509a002a3e4a47425909faca2b7a444259f9f62a28ba4ce24de9e3ca292a4a224bf9efea16fa45f24a69ec8a140a42224179e78a120a4b023479e4aa1ffa32323579ef9a00fa4f322869ef0a007a4ce22f19ec0a0e7a3db225f9ed4a0f9a3d022ea9d01a116a41623449d14a130a445233d9d05a1efa32d23599d2da12ea49323929d39a125a49b237d9d4ea13aa4c123b39d68a16ea41024339d1ea149a4f623a69c8fa00da48223279c25a01ba3e322099c29a052a3de22239c47a018a3a422ef9b3da005a37322a89b1fa0bda24922079bcd9fb5a20822d99a589f36a2e121779ae19ef0a19e211d9a859e6ea15521cc99509e0ea1f5207899189eaba0c3203c99d29d87a08720f398ae9d4da06320d4986c9d16a02b209398159db99f06209a98cd9c3b9f8b1f1298709cd69e211ffd97279c1e9eaa1efa97ab9bd39d381eb397829b8e9d321ec797b29b639d251e5097759b5e9d401ea9962b9bf59c2f1e4c96129b089d441d5a95e799749caa1c0b94a397fb99421b0000c9103912040d4e9dea9f04a1ee23ed9d89a15ca39424599e86a19da3c024d79eada1c9a30825f29ed2a106a42e25109fe0a11ca42625e59edba12da418250b9ff2a149a404250a9feea153a41025fe9ed7a15fa40a252b9f84a10ea4ac243e9f6fa1c8a36d24ee9e81a1bfa358249e9e3fa1b5a344242c9ef8a076a32324189ed5a042a3ee23a39d83a01ba38a23489d63a039a354237d9d30a0e2a26f23ef9c29a05fa37c231b9d18a019a35123b49cc79fe7a20223f89ce49f16a3c722f49cb99fbba2a122c89c03a0d9a28b22589cfa9ff3a28b22109cf69fcea24f220b9cf49fdda22c22189cd79fc9a2fe21259c01a0f8a2f7212b9c2da075a30422299c2ba019a31022da9b0da0e8a2e221a39b0fa0a1a2b8214c9bd29f56a28921069b899f28a24521e89a609feca12421b49a529fd7a1f820a59a229fa6a1cc206f9a189f8ba1b120759ad79e6da19720309a929e2da18920da992e9ecaa06e2061999a9d70a02e201199249d28a0fb1fde98db9c7f9f311f6398639cb49e901e18982c9c609e3e1eec97209c249e031e8397059cdf9ddf1d3f97ce9bb39db31dcf96779b8c9dab1db6966d9b4e9daa1d5b96399b189dae1ddb95cf9acf9cb71d6996b19adb9c121d2995239a8c9ce51b37956b992d9cb71ce89f429e4f9bc7174621bd1d98202d253d2615211022b825ef2849205b216225662a6d2073217b250f2c9c200d229025b52cbe20ae227b252f2d97214823c325872dc5215e239d25942d5d2194238625cb2df5214b239a25e92de21e8422f7259b2d14218024fc29cf2c189ae9242b2a932aa0a1ea26392a6629e21ea82ce92aea275f21132ff82cc5236822a52faf2db61edb203530d32d7e1802206d30722efa18001f4f301f2fb919461fd930bf2ecb18861ed1302a2f411afa1ee130882ee518c81f08317a2e30195f208231832ea31bcd20e1306c2ed31b031ff930c42ee317fb19a4308a2ef2109f18ae30de2e0e9206974c30a12f0c18261d2730a92ee1176420532e8b2c5a195e20932a3b29f9182f1e0e251d2440171d1e0d2150205715c71d7d201a2023189b1e0221a720a9188c1ecb20fa202b181d1e3220d420c317c91dc91f98204817a21d8e1f8f201f17861d431f7c206d16411dde1e58205416f51c671e1220f215b71cf51df81f99156a1cb21d9e1f5e154e1c881d421f50151c1c4d1d241f0915091c261d201f6615c31b021dcb1e7315791ba71c7c1e0b15c11a631c1d1e5014091adc1b7b1d2b141a1abb1b631d1d14f419c01b411d67145f1ad41b4f1d0e143e1a151c6d1dcc136e19c219b51c53975299ea98d50e6318d71b851d19258020421f97202c262d246c202f21ab263e26661fc220842682282e20b3213927f129d6206922a6273d2b022020211927242c191f3d2034267b2cd01f0b210828952cb5186e181a28512c729e97a0bd290c2beba4f9a5282b5c2995a39ca2582ac726cba08a1ac829eb23e5a04926d22ab91b379d3a2b682c8f8d239aa02d272d1e942590e32ed62d5904df0915306e2ef2090f157630fa2ec116531ce630c22f2e171e1cd230722f9b15651ad2302b2fed13f718ab309d2ff78d88998631492f498b159a1931362f0090819aa330e52e9c92329d2531932fed973ea114312230cc962fa1a0301b3044920a9fc32f602f298cd99a722c072dac124d18f72770291b154a1bc91f6d25c715591aaf1afb230c18641db11e8a228618061f7e209a227618081fae2099220618b11e752060220817291e0920ec21ed16d31d681f7b21bb16a21d521f5221e316821d351f61219816221dd11eff2030169c1ce41d7b207715191c371d0220dc14a31b0a1d991fe114781bbf1c601fb6141b1ba71c3b1f9614f31a871ce51eb914f41a7d1cd61e2d14a71a4d1c8d1e1014651a1c1c211ee913311af91b121e0d14441afd1b051e5514121abb1bb61dc513111a9c1b211db910c2186119f11a77883605db81e40fc512df1c161d8d255619571f4d209726f41ce61e50201327d31fa41e7420c52749231d1f70212028e32522201c22ed27e727c020c1213828a828a91de31c62282b29bb18c7186d28bf286398cc9b1a298f28869e4aa1db291527e9a12fa48b2aeb246ea14ea3902ace1fb19fa29ffa296610669c8122342aa79ae490f328c12b849b8210012cdf2cd996f792342e342e62936210df2f4e2f8d8b06179830213064100c1a28314330351135185c3161302c157518293133302616061ba2315130fc12db1841329330e20f5317aa315c30e413d60ec93154303c0ec495d53182300c0c9291823156302588669bed309e2fbe8cfa9ca12e682e00085c9852290b2cb90fdf07b3217e2882140619361a9e259f16de1b7c1bec24d817071d521d5a243418b51dea1e08242c179c1d031f96230d18461e0d206523bf17921e33201423d016fe1ddd1f5322bb16821d221fcd216d165e1d201fcb216016001da61e792171158b1cb41dd7202515221c1a1d6420c9149c1bf61c30207014321baa1c13202f14fd1a8c1cf11f4214a41a3b1c3e1f3d14111ab51bd41e8b13e419c01b811e6313b8191e1b2e1e48135719e91a001eaf12fd18d21aec1da912e0186b1aff1d25115c177318d01c7c0f5f164b16481b0080c498f999b7892c93191ba61b56262b04761f592096278404d81c1f1f5227d013a61d7b205c2868192f1ef7202929541db01d1c1fa62848207c1dfe1d0428d821981ad9179b289b22490a529764296e2233996e9e1d29fd2090a024a3fe29231e29a142a33329ca19b8a04ba3ea293a96349d95a0532ae99cb191c897142a6c9d78947b20222b2e9b08169628a02c4598bf17a52c002ed2964f11ea2eda2f0a946a1636303630768b501a21319330dd100e1d8731b530ca12481c9431973037151b1d0432ac305016931e6c3159300c14051c0331c02fb515e019813161308a175a1b93319c30c5136e1a3c3189308f13d5184e30cf2f99113f11ad2c4f2d73110f159e25dd2902148619b61da327ef144d1bf6191c268716961bf018fa244216d51b9c1ac324c615651c921c9c2441156f1cfb1c17248315b31c3a1db5231816e81ca11d66239c15951c6b1daf224415381c3e1df02129151e1c4f1dac213a15251c4b1d8d219314d81b0a1d3021ee13041b5d1c68206614f61a521c472017142f1ab21bee1fc113ec197c1b901fc113221a861b9a1f8a1397193b1b281fa612ca18e719b91dd2119718ce19821d62114f186f190c1dc5115418f819711d9d12ec185d1acd1d90110e184519b81d630f37183d18261d00800b0a140a5a811f8ecf18311951242e8d0d1d2c1db8278094c11ccf1df7272d973f1ca71d2c28059a731a901d63281499071b5e1e2c28d195e6188d1829287498f4970a9de4286799099a749e11299f98d49c6ca0e829809c959da9a0ad29929cea9e62a1ba28cb9eda9ed7a248292da0619cbca1b129a79ed58a8f9f8c29499b4d094f99af28d39cfd94b61dfa2a669be4986627d72c5798101bd52c6d2e3f95b41a6e2ff42f4490aa1abf30ab303d04511c4f312431a30e7c1cd5313a31d111f01c1632a431c611dc1ccd314f316a17861d4c31b030bb17311c203248316d18071df9312631be14e61b4c3181301013c818482fd72e74125b11fe292b2c9e0c1e086c1eb328fc0f6a14bd98a0263e10ca147b96162504143a185e89e824f414f819d014f1245815b61b441aa8240b15a61bd71b1a243615401c081cb6233f15351c8f1c87231e153a1ca21c15233215f71bbb1c7e22a5145f1b501cea216b14c31a201c49218714341a8b1bbd200514e4191c1b6120d413c819561b39206313bc19311b2320bc12b819211b0520ab129d19f91add1f16137919b11a641f51122c19651a101f3012e718251aca1ec41185189e19341e5e110a182519ce1de6113f189119a01de21195182c1abf1d9c10c8183d19de1e00804d9a319b2c105e96118adf918121e3951a1bb319ca2664987519b91a01285499e21aa91caf280c9af11a4b1d4329689a331a811c4e297b9cfd17c411f428569d800a5f8c9029889e3f967c9b94291d9ecb97ec9c8929539f63997b9d152ad59dcf984f9e4c29bb9f5d964c9da529a2a0719cafa1e3297f9e3491b2a0b529639abd180499b4283c9ce610719d072a5d9ad518d31f6b2b8099a6186028f42c29972b1ca52c952e0892d51d792f5530cf04ad1de3301e319310831e9e319e311611d11ded31ed313511891ca731bc3101162d1d2331ea300314b91ce73191311f18771e7a312b313a114419a02fbf2f490b76882a2b312dd30e340ef422e02974113018ed0bbe2728103017ed98ff26fb0f3f176b95da253f12fa18df9058267e14711aeb13e425c114081c6c193225e514181c6a1ba224ea140d1c671b1b243514031bf51a0523a713ca1a641b6122c313b91ab41b3e227f13841ad71be1218313991a6a1b90213413171a091b2d210313e419171bd620a512b019da1aad2093128319961a682032125519c91a4e2055122019731a1820b511c518e5197b1fa411d418de19721f9f11a118c419511f96117318a319271f6d118e181f1a0c1fa1117f18c219f31e6b105117cf18381d391069172c174c1a0080840832097511b9918c119d10fc20f5951b150714dc2500998f11d414da26a59ac31585151d282e9cfc12631494286c9c6013b714ec28fe9ca413e9113329309e448a169748292f9fcd9a779d4e290da0cf9c6c9f652997a0989d94a0b929659f1a9b36a05629b9a0169ad89fd8293aa01d9a12a12d2ab29e869702a1052af49c1199c7a02d29639e3011589e0e2a629c58165c9e802a689c1811d2191f2bc49b5b910c25ac2cbc98911afc2ae82d9f94231cff2dad2ffe05c51d1330ed30d38c3e1df5307f31c90a561efe3087311212eb1c4c30c930ad10ce1ca7300331d7119a1c612f2c30680e621b602ca02dd608dd17b6251d2b31890592f897cd28020c9516119bf327a708560f929dd027ba0c6d14aa99ce25440f9a16af953e2633112718a390c025021273190d13fb249b12291aeb15a4245413bb1aa21835240714a31a34192c241213981a041aaa234412a1197d1962222c127f198419ca215e110319ac1984215511e6187b193a2185112519b819fb20171102199f19e5200911da184c198520c9101b18be180c20f9100718af18d51f3410bb178018871f3510551717185a1f0610c3160a181b1ff50e6f1582162f1eb00da3143316031efc0e5e155a16091ea00cc014e015811edc0c5214a713141c00806681a6012d0eb5924b0db305bf215397911197898e277f997e0fb4103028759b8e1217146c28749cb81218119728939cbf09830b1329199d72957b984229b09e1c94059ba3293a9f6599af9d7229c89f0c9cfd9ea029d79f739b519fbf29829edb98869edc286aa0289ab29f862917a0b89a68a0f62901a0539c74a1c929889d5f9983a02129b99bbb9613a0e228cd9d1a9475a1a7293b9e0b8be4a1342a219ba6155a9af529ce9ae40aa420ad2b7e99ca180c281d2dcd941c1b9a2b752ec28e4d1b242d103067905a1aee2d2730b78b491b7a2d5b2f43847f1c402d4a2fec041b1ce02ac92dbf0933197c243f2b8f09d41710181e2905849014569c6e2851032714419cc827fd0b2416939a6527830a1d15e798e425930d83150e991426960e0e16aa968225190ea217fd920625390f2a185809cd24be10f218691473241e11d419c01642244c125c1a5618e1238c12a219d518ee2295119f19fc185922b8105419b418e1218010ad185a1856212c106418e917da202410fc174a18b6205410c4171918692051111d176a17fa1f0f10c616ae170d20920f98165517921fad0e3c16f916331fc20ed015c516d71e100e6515cd16531eb10d4315d5167e1e900e99159b16471e8c0cf51419162a1e3e0b04151e14071d0080a0940e968f09ae946294ad998122489b0894129914288a9b1192da966728729cdc920296f628679d4d93319854292c9db9941b9829291f9de894fd99ec28129e02970b9ce629f39d8697e39c002a7d9e7d97b99cba29b79e7396569d792a129ec797639ebe29e09ebc99909fef29df9fbe996ba0d32935a09f9b41a1022ac29d5d94269fa229ba9ba90a9b9d46298f9c32116d9fda292b9deb8ac3a0a0297c9c941144a0ee29cd995314ffa0132a259a070ae79e7f2a7a96191c7421e82b4e96b31cc425822cef8d871ab526b02c6d84e31a9526022dd104bd1aac24392c4b04681bde1e052b57928e0fc595de282e906f10229eee286e8dbe128f9e2928a988fc13229c902738098216df9982272f08ae163a991526a50bb0165a98fc25340c1717569710262c0c30189995f225780bc31762936625e00cfd163f89a124670dc2168c08e223d90c2e1759112723e00dbe17a114e122910d651775146122910d461743152822680df0160f15ce215e0d9f16c8147c21e90c3c1655151421bb0c4d15fe14a8205a0c7015a11451203e0c9214e114e31f940ccd1419151f205d0c96148814531f4e0cd3135514dc1e380c87134c14ce1e730a4913b114b11ebf0a28138c145b1e7908bb11b012b91d3f039a10ad098d1c00808b89a58ce7101494e38dfb920f226f991c8f169511286b9a8e8ff0937128559c00936894fc28739d5c9563999a29b19dd696949bc729b89eef98409c782904a02d9ab19dee29c49f929aaf9e232a82a0749bfc9df32934a0fb99769e6c2a7e9fda98679fa9299d9eda98959ff429aa9e1b980c9f172a6d9e9e91cc9e302a4a9d088b809e7429369c628a9c9e3629bd9c9b0a0da01e2ab39c27114ea0b3295d9c3e11ff9fb829989ac413bd9e6229869a56187a9eab29be9776189fa1932aa79556137a9c56293e9458129a958428f291f11428961e299a93441748961129f390a319e6977b2829905019339869271c84091ba79aff274d046817ca9c0128ec883412609d102888832e14789c952752834013609adc25df82d6129899bc251403a4142699e5252a03bf1538986b25d0028b158c962325c1023b16be94b3248a02ab1406922e2461025914bb8ea423e30643145a8869236906d714350809238f06a214f607a82219026414bd0d47221a022e14610dc5210302b113f40c5021990517128e0fc5203005db12290f85206e08ef12fa107d204e08df12de1064209b075b12b611da1fdd074e119e11921fb80708116511451ff204c1101f12e21eba0430119a112c1e64810d0da20e451d14050711220e8c1c0080dc89828c820ce6942c91319524228e9a269638995927c09bc496d2994b28569c6f979499db288b9d1a981b9b6b29749d2b986b9ba829139d7798f79b0229819ddc98c09c7829169e179a9a9d9129dd9eb299ea9d052a0fa09f99c49d2a2b809ec4945e9df529939e5296cb9de829a19f2f98969e502aa29e5696e49f462a129edd974aa0ff29179d8e9707a0a229579d82982ca1d22ad69dd89608a14a2a6f9c34927da1c42a399b2e11bfa0492abe9996150d9f8f299298d118de9c3129d396ab1a629a4229d6933019d3987528d592b917029b8c284a921f18cc9cb1285a907e18449d8928658eed17119cb627da8cb3182e9b9927dc891218559be227c589ed17e4994e270a897716de9a4527948997167b9a6e26e888301674993d2634891d16b2983e267a88b0152b985a25ea826f155596f8242c883f14a3949924d3871414709452247e82e0130c921f2450826013c38e89233382a812238ed7223b824e1283872922008214125f87ee21f88189101a879a21d8814a10b0864721ce812f107206fc20c78119104706c220be01af0fdf0573209701ee0e3205e01f9381e00c1905911f8581e20cf504331f77817109b304d41e29841b09a60a951e8981560cb50a7f1e34872c030e84a41d2789ef02778e371c008091884b8c11086895e8943298b321fe9c6f9a889c5c28bd9c779ba79d01296e9dd39bf39d7229289f1d9c3e9ea629aa9f559cc19e402af69e739bf29da829989ef39acc9d092a329ef0999c9d94297a9e7899769d122a2a9f6a99489e272bef9d1d96a59d9c29d59d1d96a49d9b295a9eb594519d4c2a0c9efe0b389da72acb9dd891199f0a2af99dc6944f9e1a2ad19d3492e59ed92ae49cf88b6d9f522a7e9c330b819fc029639bd60a329f8329479a4e11969fd0297e9a6411a59fc729fa99ec0a53a0ba29b7976510489e8a28b99505151b9d772887954318459cbb2874940819669b97285d936519729c3728d091ce18259a8128d9927d186a9c3028d591af14e89c4b2830914d12cb9c1228bc915608599c43266d9159083f9c1e264c928308769c372619923508389b7625fb908a075a9ace245d90e60631993c242a90b68607991b24be8e8986e298d423848e4d863798a823098e1386ff963323ed8da38568967822d08dde8bdb95cd21ec8e5f8b97946021d98e178b46933421c28edb8a4d94ef20468d8b8aa6929220438d548a4c925420e78c2f8a37923020798bf98cf4910220328cb58c85916f1f958a828c5f913d1f618a4e891f90231f1c898e831c8b551f638b508f1a93141e378d6d90ac94481c0080878ccb8e51097c96fe97589a1622769cb09b429d68287c9d009c7a9d4628229d7d9ba79dca284b9e1c9c3c9e57292e9e589cb59ebe29bc9e579cc69e7d29b09eb59c11a0582a22a0949cba9f422ab79fb69aba9e8b2a17a0029bec9de52a949f9498ef9d5529999ec897539e752980a05d96809cd029c29e728bf29c232a5b9ec5957a9f68294a9d5e963c9fb429c39d0e9757a0772a039dce9658a04d2a079dbb947da0f129619ca991aba0442aff9aec8a57a0bf29d29914113c9f8b2958994114ca9d4b299e96d616a59c572855964d153e9d96283a97d213599dae2868955215959daa28d894fc12709d3e285c945110039e4828639401104c9e20287694cb0e699dd22729946b081d9dce26f392c9075a9cd225bd924d08b39c49268e931c081f9cbd252a933488cd9b6f2508930f08949b47259e92df87859aef24eb9154870a9a7d241f90d18672981c24c38fdf8cbf98c0233990888f7c983023a790f2903898c3227b90b890d19709223190ba914a97a121d48f7391cd9749213b906a927b9712219e8f4f928396d620cb8f30925b96b820688ee99113966c20e88da79008952620df8d4a91d793771f178ec78f3292d51e078e548f0892c91e7e8f118cb690371e2d901f90f994d21d008eb590d395f31c0080548cee8e38083696be97679a2522c79d7d9cb09d3e28019daf9c4b9e5128b19d549d489fc228779ef59c5a9f19297c9edb9c249f5329f19d309c049f4b29279ef99bf09eb029619ea69b6f9fd129d79e0a9c0f9f092ab39fb69b109f902a8d9e80990e9e7129a49ebd980d9fca29af9e0599799e202ab19e7f94e79d052afa9c5a910c9e8829c39c188b399d9229ef9cbd0bbe9d352a809ccf11bb9e282a7f9bc314e49d052aa59ac417729da529179aaa17609d92296999bf179a9c412991990818d49c6e2924989f17759c6b2877970b173a9c792818975515159c642808950017469b4d28a394e317d59a2c280694bc17a79a20280e940e16889b0c2869939115069ab4278a936614d89b8e27cf93d111e49a702626936e086a9b19266794b608649c1e261d947288879cc1252d94e890179c1d2525933f90e09b7324b092e591959b3524f39254932a9bf423ac924294a59a3e235292b794589aea223e927994f5995f220293f094139ae8210b93b894c8998421c6921595a1994321c192e0945299e120db916694e7987e2060913294349829208c90f993bb97801f7c906a949e97631f76908494b0974e1f5b904294d096091f44903593cc958e1e01903993c695871edd8f5a93db95691da48cc08a8892311c000005139c153c08ee96bd965e979324869c549c6a9e4928859cc19c4a9e8527d79d3d9d4a9f2f28099f3a9e7ea0f528249f8e9ebca02b29c29f0a9ebaa06d29e29e069e1ea10d2a719fc89df7a0ec290e9f269d36a0222aaf9ef19a989e8d2a229df596c79dd9286f9d8c977e9d3d29c09e3d94c59c5e29019e4f91439dc429089d47111f9c59299b9c8b14309bec29c19c5b16159bac29069c3518469bd429779b2e197c9bff29669a3119ba9b042aa0993419b69b012aad991b19479c8d29409908193f9ba4293798bb1aad9966296e9773194099c6281b97a11880990129679663193899ad288395b016089b5c284f954815279d5f28e695e1090a9d47284d958409a79d0628b5957889079e02283a96b98fe49d5d276795558ff79de7266a95f98ecb9d62260c95b58ef99ceb250095c594089d73257195ca98d79d1725a294c397fe9c78245494b2979f9cc6234394ce973a9cfb2248941998119cb7221e94ce97b79b4122ae930d98bf9bd0218b931f984c9b5e21b993e997fb9a0921ac931d97539ad7203793e696289a9e204f93ac960c9a7120ee9206966b993d20f492c29533991120599211960b99ba1f1b92f8943a98ec1ecf91d9948f97ca1e4791e89461977e1edb907993fb95c91dc78d15905e941e1b0080608c640f4517899c959efc9e0627aa9d329fdda07e28559ea29f17a19e28c89e949ffea0b628869f06a09da14d293ca0ba9f6ea19529db9e679ebba09829819ea49d4ba0b029b19e629c489f3e29809eb59c899f9f29489f449c929f792afa9d1b98dc9dab29819de794f19c0d2a4c9e0a920f9d732a1d9e0f8c799ced2a6e9dcc11d49cc129ff9c7c18f7986e2ae59c8418f09b5c2a849c8118be9c572a469d6d19e898012a989b4b19ba9bd7297f9a151b259a8229a599ed1b879837293b997c1c79964d297c98e31c93964d29ab97291ca1999328bf98011c2c98bb283d97ff1b6c99b528ec95d41aa29ba928e5954d18ae9c70286b98438904a0d9279096129219a00128c995278fc19ea1273395138e159de125c4942891099dec253f95ff92d69c5425cb955295f79c0225b195f8955d9dad2413969f97d89d62242396f998db9d2a24a1958999d39dbe2388954599929d682325956e99599dfb22f1941d990b9d942295941999a89cf7217f94a1981d9c2b2115941e981a9b9920a593f097cf9a52206c939c97909a2a201894a2977e9a09204f94c1978d9a1320109571975a9ae71f0f947c97dc99231f0e932d974f99d11ed392f196ea98cf1e1593ad96f798e11ec5911c96bc986c1e7a903495f098001d00007a105c150b15969e769d669eaf25429feb9fc9a1e1270a9f1fa070a18d2703a069a0faa13228ef9f8ea02ea27c28da9e6ea06aa2ec28e89e26a097a1c328149fb89fd5a13e2913a0b39fc6a17c292ea07a9f8ca1da2906a0889e25a1492af49edc9c63a0ef29e09d309b1ca09d2aba9e6898779d4f2a0b9dcd117a9b802a9a9cc614459bbe292b9cc716b49b2c2a569cf91b340da629969ae71cbf138729529a681c2b0d8829b299e51c418da029eb98131d978de5299d98181d7f8dcc29e0987b1d440da3291a984f1e540d9f2967961c1e4a0d94291e96801d378d572926987e1c28960a2937987b19509d46292698ef10a89ee228aa994e90939e2c28cb988892329ebe276a989e955d9e6827d697e1971f9f2c2706982199709f0e2602982a99bf9e512599977499b79edf24bc97219ac29ead24e397da9a2f9f79247697129bfd9e46240e97159bcf9eda23b896cc9a7c9e0f234a96889a0e9ebb22eb954a9ad99d6222c6954f9ac29ded216995d699329d3f2145956599a29cc62037954299909c9c205f9528995a9c4e209a96a298639b9f1f60956d98459b581fcd944498f19ade1efb9319987f9a921e0a93af97189a731e0893a497c4998a1e11934097a799461ead92aa97e999fa1da691a2968599741d0000cf131c16af12229cb39db49e5c25769e24a0e9a1aa27259ef69f61a17e270d9f57a0faa1fc27529f9da023a2192801a038a13aa37b2822a068a1aea3b528fe9f04a13da3ba282ba0caa0e9a2f5281ba06fa082a200291aa03ca0a0a27d2911a04ca078a35d2a099fe29ea5a2f22a009f629a2ca0cd2a739d0a0c1d9ad62a919d3517ce98a62ab09bac1aa20da52ab89a881d3017c82aa5981120581d752ade9a0020ed1d3b2a7d9a77207a1f302a9a99a320bb1efa294798b920c31c002aea96f320a91eea294c977b20d11dc6299e952c1fab1a3129e8962c1dcf12ee286a97ef1bfc923329a798a8152f9af4288098be10089bc428ea9892938d9e8e28969ab898f79f31288599af9953a0c6277199949aa9a01a279799519ce3a016264099899cb0a03d25ed98f59ca7a0b124a998c69c55a04b2493988d9c1aa0dc238898539cc39f2c236898519cc79ff3223498469c599f9022bd973b9cf89e1d2258973c9ca59ed4214d971d9c699e85212497f89b299e332176964d9bb29de020f095fa9a6c9d8c20be95b69a149d692056953b9adf9c3b20d594b599759c032095946d99149c761f3b94e9981a9b3b1e25942798509ac11d1494c497209ad01d0f95a097cd99bd1d2c94bb967499651d08922495bb98f61b00005f1401183115689c699eee9f0f25fe9ed5a07ca27226e09e83a1f6a229270a9f57a14ba32c27369f8ba151a33227de9f10a21aa4cf2727a083a27ea446284ca0a4a2a7a47928bfa096a276a4982848a0b9a106a4d2284fa0f3a038a3122913a08aa083a3c42943a09fa09ba3602a24a1b49e39a2952a5ba06299e39eaf2a4f9e8b97259e182bf49d83124999802ba89a3a1c210e542be8983f1f1d1d9f2b1b96c9208a20282b55952721cd20f62a3e9489211e21ae2a5c94ce20511f242ae794a5207a1e182ac496271f231d202af996da1d501b062ad19a611c7418c4295a9a56914a9dcb29ff992994049e4429d899dc986d9fb5289b9a509a82a022283c9a0b9cbda06c27559a5d9c0ba1f926fc99b09cdda049263d9ac59d82a18d253d9a559e7fa10f2599999e9deda0a9243399699dc9a061240d99769da4a01b24f8983b9d7ca0a823b798319d73a03d235998bf9c0da07822d8976f9c2d9f9f218b97219cab9e3a213497f49b699ed5200997a09bf89da320da96689bf79d6820e1962e9b989d2c20ac96fc9a769d13207896d59a4a9df91f3397959aee9cae1f82988d993c9c751e2a96f099979cff1e35954d990a9c5d1e8f94d098069bbb1d51947a98a29a4b1d5c947298d49a611d7892ab96e999781d000026188c1ace10129ca19eeba04725ae9feaa02fa3e525229f06a2d6a30127c59f45a21ca44427159ff6a1e4a3f926b89f2ca226a46b273ea0bba299a41c282ea0d0a2cca41b28f6a0c2a291a4ea27c3a00ca3eba4592845a1b6a369a5fc283da142a383a57b29b5a02ea34fa5cc2979a079a355a5102a69a019a103a4c029b0a023a0a8a2532a059fb89d81a1f62a029d540c219c8d2b9e9c2619a297ae2bc69e951ee51c642b8a9b2d1f901e932bd89905209c1d272bb6972220261b982be897401e310e4e2b7b98c01ad68df92a3399d616c796652a159a441164999429279c1b99db9f0c291d9c7f9ccda1bd28af9b569d4fa22828e09c269e69a21227219dc89e60a33927a19c9e9f4ba3d826129c9f9fdda24126d19bec9fe0a287259c9b9b9f65a2fb24f19a119f0aa2a024689ae79eeba146241d9ab29e92a1e923da99599e3ba14c23aa99249e01a1db229499f19db8a083222499af9d8aa02622f1984a9d2da0b221b698059db59f4b216c98b79c3a9fde2083971b9c719e40206f96339bb39d931ff595e29a579d4c1fbd958c9a069d101f8795809a019d091f3395239ab39caa1ee494009a739c2d1e83947b99129cf21d4c941099509bb21d5b94b898009b851d7b930198579a3f1df792db97a69a421d640a9d186f1b4e186599949c669d0b2225a06da147a3ff25af9f50a229a48f26ed9f00a22aa49b2604a052a252a4bc260fa092a286a4022743a00aa3c4a4562754a020a3e4a42627a1a077a323a5782762a06fa366a58227a2a08aa3b2a5bb27b5a09fa3d8a5e62792a0b4a3d0a5ed27afa09ca3d6a5182846a14da4a2a6a728b9a011a439a68428389ff8a1c5a46e28d19e0fa115a43528a99f3ea14fa40129b89e28a162a5ef295ea03da159a4272a8d9e89a043a48e2a3a9d769f6ea3852a2a9d0c9f37a21b29199da0a0dea32629979c3ca077a36428729edea191a45f28099eb6a1c1a42e28039ee6a063a4b727ea9edca05ca46527ab9d01a16aa4df26d79ce6a01ea43e26669cb3a00aa4b425159c65a03ca311259a9b1ba0a8a26724239bbf9f38a211248c9a189ff2a1a523289ad09ecda155234a9ac39e9fa10223209a669e75a1af22d699129e13a11a22a899bc9d99a08c2137996d9d5da04421d9983c9d1ba0fa209f98f79cde9fac206c98cb9c829f60206698989c029f18203c98439cb19ea91ff3970d9c3f9e531f8f97ae9bd89de11e0f97409b859dd01ebd960f9b269d861eaa96829aa89cef1d5b96279a7a9cdd1dc995cc993c9cb51da6959899f89b061de194a798319bb41c07941498e39bcb1c0000ca0ef2147c05bb99bf9d789f5b22a69ed5a112a40426559f1da249a45f265c9f28a247a47926d19f7ca26ba4912609a0b9a2b4a4ad2637a017a3d0a4b82679a02ea3e6a47d26a9a036a305a58b26c4a076a361a5c626cda082a36ba58f26f2a06ea35fa55826d9a052a368a51e2604a156a360a5012609a194a371a5c025fda056a378a57825c5a0e1a246a5fe247ea0bda250a5b024d89f4fa2e1a49e24d99f54a221a5762460a058a24ea5042598a027a223a5112542a06da1c4a492248ca01ea2b2a4d324029fa4a1d0a314247c9e62a111a43e24429f8ca17da49f24619e6ea1dca43c25a79d67a1b1a423257f9daba1d8a43b25769d7ca1cea432251d9d12a16ca4f224479ce6a015a48024409c87a092a31e24849b30a024a3c623829b1da0d6a25523cb9b36a0cfa22f23a19b05a0a9a2e822229b979f29a28322ce9a509fd7a1f321799aba9e5ba15b21e199439e08a1082158990d9ebaa0ba201099dc9d82a09a20e2989c9d54a06b20d898589d0fa03c20b298099d9c9ff11f8398c49c1e9f701f0b98649c689e031f0498119cfa9db31ea797ec9bda9d8e1e6497da9ba09d751ea5969b9b999d6d1e1c96139b0d9df21dd5958a9abc9cb81d3396799abd9c9a1d6794529a6c9d8f1d45959298669b321b00007a146e17330ad29c67a0ada12324a49e93a1aba34a254c9fcca272a4de25809fc8a28aa4fe25ea9fd4a28ba4d425f89fbca2b3a4b42503a0dba2b7a4b9250ea0dea2efa4aa25fd9fe1a2f1a4ac2513a017a308a59f2519a02aa317a59c2516a0e9a203a56025f19f52a26aa4ab24619feba161a46124999eb9a16ba42b24289e24a1e8a33c23979d84a07ea35b22c79c02a0e3a2bf214e9cc69e19a27721569cf79dafa16a212a9c4e9d6fa14321649c609d34a11e213b9cd69ddaa12621229cce9e4ea23c213d9ca69f33a37c21439c25a061a3bd21a19c5fa0a3a34922519df4a025a4d322459df0a00ea4d8223e9d19a10ea42923349d33a160a44923b99cc8a063a41423489c41a05aa37822249c32a06da38122209c46a047a37a220d9c42a015a36422b59b41a0f2a225226b9b0ea0c1a2f521279bcb9f64a2d521b19a479ffba18d21529abe9e78a14421ff998c9e17a1e520ae992b9ed0a0b8207599e29d8ca075203799b39d4fa04f20f6986b9d11a01120f6981f9df39fc91fa698d49c859f851f5098a39c059f051f3298509c8b9eb01e2a98229c349e7c1e2798d29bd69d3d1e2b98e69bbb9d201e6a98b39b839d081ecf97749b409de21d4996249bfd9c5a1dd1958599ac9b3c1c7a953798bb9a351a00000e1404176110b79e5da05ba12d24f09e4da22fa43025e49e16a20aa4fe24159feda1d9a30225399f05a228a41325699f07a236a41325469f12a245a41325399ffea164a40025489f14a27ca41c25299f12a27ba41b25669fa6a118a488248f9f36a1b3a32524539f2ca17ca316245b9eb2a023a30524b79d6da017a3c3236a9d30a0d5a27d230e9dc49f7da25923219d8b9ffca14223ca9cd39f5ea25423a89c959f62a25e23a69c859f51a22a23519c139f2ba203236e9cb19ecca1d222c29ba69ed5a18822559b8c9e0da27322009bf59e41a25a22bc9a7c9f59a20e22139b989f7fa2d221449b719fa1a27c21479b7b9faba25321f59b0ba02aa37c21ee9b11a017a39521bd9b0ca0e9a26521b19b14a0c5a244216e9bf29f8ba22521279bb59f4da21c21f69a799f16a20021ca9a579feea1da20bb9a549fc6a1b520899a289f9fa1a9204e9a189f88a196202d9adb9e5da18620bb99559ef0a04e206199c29d77a01e2005996e9d32a0e51fe298f69c989f221f73988c9cda9e6e1e1b983c9c9e9e351ef4971e9c509ecb1d9197039c059ea41d5897bc9bbe9d601de396919b889d691dc396559b6d9d301d7496f89a2c9d2c1d5396d39aed9c441d6d96c69ac59c1a1d0396609ac09c891c1b97639ae69c8d1c279f329c8c9c291d16239c1a821f63255a2827205221ca25172baa2057223d268d2c8c212523e0269f2dcc2105239b26062e5421cd220c26872e5e22de237a26b72eb2221f241626ea2e74220424b825bb2f95221d236727722f729e079e312b472d8eadfbada92ded2e2c1b6b245a28882d1a21e42a8428802cb920462d042a052a3020162e302ca52643200f2fc52cf7219a20dc2fe72c681d58215f30302d261a392182308e2d441bb320bf30042ebe193420d030192e02192d2001313f2efd18e81eec302f2e6b19751e1b31782e2719b71e0831432e4218c61e3231952ec615dd1e3e31fb2d660d8b1e5031fe2d6310fc1dea30222e5d11581a4930e92d9d11af186e2fc72df9199520fe2c982bf7196a21c0280228681b19212f241f23e117211fdc20dc206718ed1ee3201521c818d31ec320432144180e1e2d200a2123180e1e1b20f420f517ed1dfd1fef209b17c31dec1fcd20c116991d811fa82085161a1def1e52200b16b11c471e0320ae15641cc61d6d1f96153e1c991d321f4e15361c861df61eff140b1c4b1dd91e1515de1b1c1d781ec614371bad1c151eb714e81a661cba1d2e142f1ad51b471d14141d1ad11b1e1d1c14d619af1bec1c4614ec197c1bcc1c8c14ba19121c281d2f133018141ad51ccd99a09afa9b85163b1e9c1d0a2060251e24a1203821e0260328cb202e220b287e292120b621f927842b09204c217527bc2cd61f3e210827b32d5e1f85204926702e3d1f27202526c22e8e171f169927bc2e4ea168a34f29332e01aaa2ab162c532da3abb2ac022c1f2d91a572a543293c2c2d9ed0221c29a529338ace294c2a4f26c3182e2dbf2b6e203e17e12eee2ce617621e05309b2d1a165c1f66302e2e7c16bf1e82303b2e1317191fd630d32e1718ad1f2b31b72eb616111f5531ac2ef2169b1f6031922e6d17321fd4316c2eba18d01fe531122fa117fa1d9131f72e7617ac1cc531ec2ee414211a8731052f61103a893431f72eb19623a0c330a12e1b9892a1df2d682d3990889d24299d2ad0085295da1fe7263f12ee863c944624de188d1db41d09237a19921fac20bc2215199e1ff120c522ef18251fd020a4224e18821e542020228b17e81ddc1f7621f5167c1d371f2521f416981d691f3021b616421d3d1f11212f16ca1c751e8e208615481c801d06200215ee1b491dbd1fda14871bf21c4e1f99144d1bcc1c161f87141d1b811cb81e8c14071b651c8f1e6014e11a4b1c471e3714701a2d1cfa1d28143c1a061cc11ddd130c1acb1b741dd113cc19681b4c1df212d218fb1aac1c03110117ef187b1ab1866010aa0f2815b9150c1d1e1f3e266a1d461fdd20fa274621f21ecf20ce27fd24a01ea320a2272f280f20582102281b2a5820b9210f28bf2b4c1f14201b28722c731986168328df2c16978a9b8e28f82c4da162a41d29d42c8ea68da8642a272c86a690a8632abc2aa5a486a6072acc28af9ec89c46292925799ca624b729901ece1a082bb52b6695551fc62d012d5698411c8e2fe02dfb94b51c7530b42ef204cb1de030082fe812781f0c312a2ffd1775208e31972f3118d21fb631e82fc016261fd63103300417831e26321d30a7155a1d06322330f8147d1b07320f3088153f1b42323030d214461a11323a30f302559610321c3061861298a130072fe1862c99db2cc22cb18113985d25a0299b09d995ee94d626ae1386156d959225781593196817c124d717761dd71d75246d178e1dda1ec32354186d1e012089234918a41e662027239a171b1ed71f4322e816691d1f1f94214916321d071f82214916ed1c9d1e5721c9158e1cd41dc32040152a1c6c1d6f20ed14041c151d3520b5149a1bee1c00207614571ba41cc91f5814cb1a661c3b1f3714611a061c9e1e1a14331abb1b391e7b13c419751b011e31138f19391bb11dab123b19da1a971d55121119b11aa81d1d12e1177b19121d07118a15fd17261c0080ee891c89e011c08c831c831d8526268b931d361f05278316c61c2a20f227541daf1c261ffa273121491e2b207f286f24de1dd81d93281127381ba8174828a528590aa198eb283f29669c2aa09729812946a0e4a21829e72822a377a52e29412833a465a65c29f125c7a314a6a5290023eba019a4a529a019aa962615d929399c720b8925392b0f9d4f19c82a892ce09acd19e32de32d7c989e1a1a300f2f2b94f41aa7309c2f838b591d54310c30c910221ecd313d30b115271f21327030a715d21e5f327e30bf14581eb432b030be13731de432c230aa14fe1cd132cb30c6159f1cb132db30bf13ff1bb732df307211b3194e328d30d80e9b157430302f26108313d42a2e2c3c117b18f6216428d815dd1b601617261917981b11175a256016081c8019ff247f16a91c7a1ce1241716851cae1c1d2418168b1c051d65232116de1cc01d49232a16d61ce01daf22a5153c1c531dd02166154a1c5b1d83216e152d1c5f1d6d21f014061c291d1c214e141c1b821c60205314d21a501c30202714711a051cf61f08144b1a131cc01f1214571a0d1c8b1fc613fb19bb1b331f17137019fb1a5d1e5c12e318511ade1d2212b818fe19711d85114318b219461d6d127318c819591df011ba179119c31dd4108a165618b71dc681990e2e0d5b11c48ea617381802200e94561bc11c8827e797011ce61c7c284f98551b661d792892940d1a2e1975288e177019fa1a6328041e4a190c187828412079981f9d0529d3216b9d71a07929c821b19fb1a1d2292e222ca1bea3a3293e203ea288a48329a516f9a1e3a4a429289ca69e0aa37529f59d099aaea091297b9fa6941c98ce29d79e2791bf243f2b339d5298762a0d2d869ab51e402fdf2ed898471cc33016300e95671b5b317530b08d8f1cec31b6302f0fc81d7f32f9308a11d41dbf3235311712db1dff325431a714ab1e43338d3189166d1e66336b317e160b1e483355311315081d1a333a313f137b1c1e327b305012ec1a302f372e75094a081627902a8d0c64080399dd27d810d511bc9ccb2620143e18d498fa250a147619e89092253815951bef182c25a515361c7a1b6e244f153b1cfb1b07244715641cbf1cb2234f155a1c091d252325150b1cdc1c8b22c914cc1bb01ce421d114371b781c40218f147b1ae51bc42050141f1a701b7e20ea13091a9f1b4c207c13eb19711b32202013021a811bec1f1613e019471b851fb3129c19e71a221f75126119a51ade1edb11b318051a5e1e9b1165188f19e21dfa10df170619741d4a111a1823196f1d28124b180b1afb1df7112d18411a761e7c8a2a8c32075914ab926012b010731fcb977819181be427159a6d1bbe1c1c29439c8e1bf11c2629619be61b961c3829d8994a1a281c2a29159c96151b921e29909cc799ec9c9b29b49b5f9b3ca0d829b59cb19d63a1d629549e18a00fa37329dc9e48a0b2a3392952a0f99e45a28c2985a0cd9c04a3b629a0a00e9a61a263291f9f2519a29c6329669e2918980e3b2a939b4a1c22260e2ce59be119162cdb2de199fb1a092fd72f1c98f41c0231d830bb923f1e283259319d0c761fd0329731d50d491ede328f31e60d421d3533c631e9118d1da533f831d511cd1dbc33f63108164b1ea433b8317311801c20333a31df02b112c83017301b0c5516cc2bfd2c1b0e3718cb204829e411a2174b9c6327c61202186b9bfc260e13b417f1997526f1133f194694ee25f114141c5c1866258615761c751bd7245015b21c201c6a24cb14d91b761b41230814331b821b3d220014321bdd1b2222bd13ff1a0a1cf121cc13cd1ab31b8e218713931ac51b3321de12071a571be920e512121a581b9120d7129319021b5b2073125119b51a2b20591268196b1ad11fed113519151a681fe1112319481a471fe411cd18d219171f7f11ac18a819e41e1e1155187e198d1e0f1136186019691e0f1115176e19071ea00f7b150f18c71cbf86650e4f0c63151d94651241126320cd984515e6160c28899b1f158c162c297e9ccf16d51647291a9d4d15d8161a29a99d981024124729879e428a38924829e49f9298a59c6f2987a0979c2fa0972956a0b79dfca08d29d3a0a19ef6a1d72949a03e9e6ea27329e5a0429e21a36d29d0a0849daea3ac29e3a0f09c86a3bb29b4a0479d3aa4b5291f9fd48bc0a0092acc9c7f94319fb72a569dee10c324272ca49b5216822b092e4199d41a472f2a30cc964b1c303130315891c31c8732f931508bcf1cd93218322c8a381d5c335f324885081de033a4326b0bbd1c9c335532d60dbf1c3b33d931650edd1cda31db30290b2f1b252e752e4687f9882325e82a3a0d4515ca9aa427440c5414dd9d3427b30d9c153a9ce6260b0f7c17cf9a4d26ae10fe177e97c72514113719178a48257512fc190e13ce244f13a41a44186324de13141b7b194f24cc13f91aba19e9238312ca194a199d2200125119be19ea21c0112f19e2198121b0110d19b2195321a411fe18881912215b113919d619fb205911c5189a19af20ed10961860193420d0100818b918bc1f6f10ca1788186c1fdd0f17175818f71ec10f77160518ec1ecc0eae15e616471ed20ded140c16da1d940d1115a016e51dbb0fc7145016f81d1c0efb11f412df1b35888009aa09a6133894c40d100c052087986512d21564287d9b7113cd145f29a09c1d15a2162029b19deb1665182929569eb690338c6a29f29f479c349e6e298fa0199b939f8229fca0ba9c56a0b82936a1fc9d74a1e229b0a1599d53a1172abea0389c2aa1d429eba0719b78a1aa2962a02a9c03a2242a1fa08f9cfba2a72ac7a05e9caba26e2ae29e5b9883a1e929a89e0198f8a196294f9d5214399d7a2a3b9b66196d228f2b009a0a18c729902d4599811ac12d07305e97cb199c301131ba94051c9b31b13105960e1a6d32263239920f18e0326532a98df219853210328e84201b91311a3162031b1ac62e722f670a381b9428682c5708c61585180c29f0087812489e9a27000c5f15599d52275d0984159e9cde268f0c7716cf9b7d26f10db71645999f258a0d5817c0964c258f10e5189b89dc24d4109f198d146d24aa11311aca1621249c12291ae2188a23c412f9196319bc22dc11c619af197c22ef10831969190e22a010de180c198a215e104c18a218fd206c1066187f18be20a2100f183d1877208b10be173f180920e00f75173318fb1fe50e39170d18891ff30e70162b17171f0c0e1c16d3169a1e9f0d48154b16161ea90dc0143f16e81dd30d24151516e31df30daf14ca162d1e9a0cc212e5145f1ce489dc91ef8f15128b95378bdd933d1f2d9b8b941f9433281a9d499394964229999d7493a49621293f9f42986a9943290d9f8b9566979529ec9edd97849a1c2ab39f4298179c552a3aa056987e9d6c2a8ba07c99e29e5a2a6da09d994ea0962ad49f769958a0792a90a0a09a14a1702a49a0cd9be2a1482a72a0ec9bb0a1ba29a09f249955a1fb29ee9d4f919aa0d629cb9d60916da1ff29c89df7970da2d529869c3516db9e172ad699d51a1b18d42a2c9ba30a6024c42cad989a16822bc22eae98101c5c2e26306393711c2730053116908e1c70300331e38c061dac2f58302291fa19382db52e5a94b088e7273b2c8192da08471c6329ff8ec489289f8c28498936099b9e8627c109e216c79c9b278b0c4b16d89bc026320c0a177a9a3526000c5a179599f5255a0c52189a97dc25d90b0d18e3937925500d34185090e5243f0ef717d7080c24890d51176b111c23730e0618c914d8222f0ed217ad1490221f0ea41792156522e90c53175315fd21f20ce716e4157e21820d6d16761518216d0d09161b15aa20c50c9d1570154e20800c6e152b151720680c4b151e15ee1f270c9f14bd14581fdb0bc9138314d71e010cb8137314c01ec80a90125413461e3c093812ee12cc1d380b4a110014cd1d8301bc8271895d1c588f1d8a4f8e7c16e594bb8de290961f229b769438949d28f09c209586964529ac9d4d9559985829da9e6398969a8a298f9f209a8d9ccb2949a07e9a7a9d052aa6a0d89ab99d232acfa01b9b069e612adca0489baf9e3f2adea0639b28a09b2a93a0089c78a0692a97a0439c09a1222a94a0a49bbea09f290aa01d9804a0e729559fb6913ea0102a1c9e349148a09629629eb59187a1332a0c9f0b8ceda1732ae99c590b9aa0aa29c39a39180ea0ff28899ced152e9e5329459b5316da1b082b379908169725322c19978118a628152d5694221b8129622d4d93031bcc288e2c35941017ef24662b8a931c159c1b7e29db8ab5192f9217280504211a029b2528e4832c16239d06281a04df154c9c6527c183d515bb9c0927a4839f150b9cb8267b836315d9993e267d836916bf98fd25fe02e51604976825e5024f161293d124cc02c715af8f5c24940279153b8f08247d025815ad88ac2301071e1574084f23eb06e0143408e522b406a514000e70222f025714990de3212e06031445106421ad057c13dd0fdd20310522132d1193202f08fb120d1160200808d21240123620c7079412f011d51f14087712cd117e1f2f0541118c112a1fd001ce0fdd0f3f1ea8010b0f9510cb1d6c04080d61118f1d84080f0e4b10d41cd484d18ba88d92103396c09037940e1f9f9bc49711991128049d9498db9a3a29c49d0899689b6629bd9e5899bc9ba429b89e73990f9cc929ca9e5599a59cb529469f8d99bf9cc32904a0cf9a369ef4296ca0149c1d9f392a74a06d9b20a07a2a0ba03c9b36a0712ae09f059b16a02c2a04a02e9bd5a0352a0ba09b9b7aa1682a2ba0a79ac7a1aa2acb9e7e9adba1412aaa9eab9924a2772a599f7198d2a1f429709db594a8a1c929809c560b3ca1002a8f9af215639f57298d98781bfb9c7029f499a21b2694a929cc992d1af2169929409650190519e029d094e119351490291194bb19d59657291c93a3194a98dd28e390f11afc9a3328838d2919779cf3271c8d6817cb9c6227d68cd815ff9c8f276d8d4016e09c3f27eb8c7815d89b85263e893e16b6991926c388e0157898a325fd828715a7962025d9823d15cd94ac24d082181597927e24bb8201155f924324a082f314828f1b2473829d14a888a3235a82dd122f88bb222b826212b28712220e821a125487ab21fe819c101a077e21f2818110ee064021d9817a119306e120c781f710f40553209181e00e32058d1f6e817f0eec04001f5e817309c684a31e578138099084591e098467037184091e5984710381841f1e7f814d0347048c1dfa889f8df390041d00808588f5889580db9615942c96111f2f9ec79ae09c8828b69e0c9cc29d4529819e8e9c559e8a296e9fb39c8c9eaa29889f5d9c419ed029ca9f159c969efa290aa0929b309e142a26a0c99bdc9e012a3ba02a9a799e202a2ba06a99ce9e852a509f45990f9f832a7c9f3198cb9e1b2a359fa996e79e1f2aeb9e8f94069fe529ad9ee3940ca01d2a7d9ecc914f9ff6296d9ed391c69fb429169e258c3ea0232aae9de18b5ba0b529d09c500b61a04f290c9c640b88a07f29399c801181a04b29d89a1e0b66a171294199710aaca0c928eb969316729e73289f94ec18ea9c7128ab94fb19f19c6628029542196b9d6328e4943d19599ea5282b935316f09d352826941013529e0528fc922213bc9dda272292d60f419df1263292800fe59c7826ea91f90e169cdc25de918d0e979b8b252d910a0e3c9a1725ec8f990db3999224778f0207b5984724118fbe0688980b24d38e8706ae97c123378d3a063a974c235d8ecd05ae95a522438e6f853a950022398f1b85d2946c21038ee28487932d21eb8eb0843093d720698d8184d7929c201a8d7a8a7b925d20be8c3a8a339217206f8ce689d8918d1ffd8ba38c7f91191f128c8f8c6191f31ed18b2f8e4191a41ec18b508cfc8fa21e388a098fde91ef1d468fa793d4944f1c0080798b0b8cda00ff956295eb97931ea09c439c379d5b28249ed89c339e41290d9fdd9cc19e892903a0239d1c9fd429da9fdd9c969f142a36a00f9ded9f342a49a0369d16a0512a97a00d9d34a0572a5ea01d9c439f6e2a3ba04b9b759f872a35a0679acb9f912a2da0589ae89f672a87a0ae99e59f4f2a2ea095980aa0312a27a0a79845a05c2aca9f8397dca08f2a689f8b97bba04a2a719e529708a1332a019e14952da1d829319dda9481a1ba29889cac9163a18429499b901192a04a29ca993b16739f0f297798b118fd9d01292a98be17099ef7281098f815e09dad280d97f415ef9da528bd965214439fc6282e963914149fa72866959913659e222814959c12cf9d63279d946e12629dd926f193410f499d7e2658934a0f279d54263d9356083c9c9925cb932f08149c7c25a0930a08c69b3a25d292f607b69ae6247b91aa070099a0245f901707fd971c243690b3865998c1238990d28f1c983123f990588f6598a822dd90e3901e981e228f90ee91a497ac213f909b9133973e2107905d91d596f920b88f26918a96aa208a8e0191549684203d8ed5905c953e20e88d97900c95fd1f908d27908d940d1fa78dc18f67939f1ed58d848f4a933d1e5b8f918ff7912b1e6d8e27910594d41dc28f04941996801d0080db8be88cda007d96d6957898081ffc9de29cfe9d78287a9ec29d789f2d290e9fc89df19f532901a09f9dbc9f7529c59f729db29fac29ba9fbe9c959fef29f39f8e9c3b9ff729ff9f5c9cb39f332a1ca01e9c4a9f4d2acf9f719a989f7b2a729f92994e9fa72a649f8c985e9f722a3e9f1e975a9f422aaa9f17957d9eef29209e2892139f492a149e368c2a9f752ad29d560c529f812a569d2d0c219f252aea9c1715509e142a809ca3183d9eeb29ee9b8819299ec129319b6119ef9d5e29599a0b19c49d2129db98e318a79d07295d98b518869dd528db977f174c9d8f2808965517999c68280e9575188f9c86284b955d18669c5c285894ad16309c152804959816869cc827ba94c414409c4f27fb9468120d9cd9269294800f539c8b265c94e8082c9c332656947c883a9cc925ab94138e319c0e259c938690709b7d24d49208921e9b37245693dc91d79af42319931593489a4e23e4921094ee99c522c292b9939599402278935a94c299d1218093d0947f9971212693a1943f993121c8920195f898d220c6919394909855200f9134942d98f01f4d90f39329973d1f2a90b893e896fb1e30904b947897cb1e359024949c968a1e0690f2935596201e1a90e49343960e1efc8ea6939e95b01d118ddf90b293f01c0000150c0f0b42032c96ac9655989f1f539d1d9d2a9fcd280d9f189f8ea0a2295f9fff9eb5a066290ba0e79ef8a0a32907a0429f0ea1fb297da09c9ef6a00f2aed9f7b9d9fa0392abb9f149df09ffe29639fa79bdd9e022a949ef698d79d082ad29d2596439dc429e19d6f94c59cd729149eb491339cdb29f29db40b7d9c002adc9dda11a89be0297d9d2c17959a152a5b9d7017999a182a279dd618ae9afc29959cd418c49ae029609ccb18239cc8299f9bba18e49cb029309bac18c79c8f29ec997219a49c4f2917993f1aa19b3f293098f31a259a2a298097b11af5990129c396991b8a98d328a5955f1b6f98cb287f95301a41988628db94f31815993328fa941e18fb9ada27b6946c169b9b6a2713936216fb9ba62769927c17779a2627d291ad16b69934269d913a16119ad025b2935908049c6725b19563980d9e1625b8951699089eb22404951998ff9c202496940d98789c3f234d94c2974a9cd22274940c980a9c6d2226943198a79bf821e493e197949b7821a3938097c39a1221039440977b9ac32055930297449a9a204793d596c8996e20e692029687993c202792ad952b99c11fd692c995d298131f2c9270953098921e339235950a98331e9a912c95e697101e4e90d893f994b11d038f6a92d4946d1c0080198eb20e09188b9c099edd9e6927199e259fb5a08828499ff69f31a1d928f59f1da04aa1172950a048a08ba174296aa01fa0a5a1be290ea0289f29a1f629f89fde9d7fa0212afa9fc59c07a0142aa59ff59b6c9e3b2a5f9f659ae89e9e2a879ed794069d522acf9d198cca9b812a8d9e510c089c8d2a709e96122f9c9c2abb9db417f29a6a2a2d9d311bde97712a079d281cc7972c2aaa9c921ca897e229df9b171d85979729359b811d78977629ad9a7c1d72946b29ae99f11d6a944929dd98b61d42941a292798701d2e9418293f97311dda96ed28cc963c1da996df281096371da996df281b96381ddb93df28e195ae1caa93c028d5957c1ac99a83280a969013029e41288e9502107f9dfd269e956009149e1c2762952b89ee9df0268995c48e209de525b6955991339da225d495a194459d232521965896519dac245c96d197559d532438967e98939d0824d4950c998e9d9e23b4953299979d282383955799559db22219956399059d4e22ea94dd98699c6e21a4944398699bb42055941c98169b6820d093dd97c59a36200c94a9978f9afd1f0794be97799ae21f4194aa975a9abd1f0d94fe97349a651fe0939d97f5991a1fb293c097b599a91e979383973a996e1ee6918d96c598571ea2915d96b298a21c00000312bd155414079d829d5a9fe025629f1aa0ffa159287a9f7da01aa24928cb9fc6a063a27c288e9fe6a096a2ac28429fd6a0eea21529ab9fb2a0c8a26829bc9f33a022a2c229e39fc69ffaa1162af29f6d9fcfa1792aad9fd29de5a0cb2a369fb99b05a0c52ade9e7397aa9cc62a689ee01765948c2a879dbc1cab17912af59ce81d6b19572aae9c9d1f031d1e2afa9b6e20671eb229b19a54209c1d60297f9a0120db1c5e29fa990120c71a3929f398cc1f3a192f294998b91f81171d293998ac1f68170c29c496122070172929f7950e2064175029d494192016172e29c2945c1f9816fd285494771e370dee282b96eb1c2596a6286f9907196695152831985110ad9bbe27e1978189039d382737977a94a29eeb26dd9794975d9f422690976398e79e5d2521982199aa9ee924fa977d996f9ebe2427984c9a9a9e8d241f98e79aec9e4524ba97ed9ad29ee9231a97b29a7c9e15238696579a329ea322fa956d9aec9d3a229e95169aa99dd5219895fb99299d3621fb947c99b69ca92005952099509c5c20589517991f9c14207895cf98879b721ffa945f983b9b001f79943298e89a8a1e17941798869a4e1e0693bd97259a381ef4920a98189a061e3d93ae97b499c61d9092f0977d99fb1dc9926897e7985d1d00005a15b917c518939ce19e39a05526fe9ecba0bca24b28129fa8a074a211288a9ff3a0d3a23528f09f33a12ca36c2827a074a1c9a3cc2876a0b8a1e8a31b2986a084a19ea346297aa097a0c7a29d297ca053a07ba2042a2da0669f1ca2622a529fc49cdba0922a319e32954f9d972a539d0d1a7994c22a6a9c831df717eb2a9d9c5e20091eca2a8d9a522152206e2a3b9a3822b720192a1499d122e221d529189816233a22ad29f8949e23b822a6297e90cc23032375293b8dd32396225629338da22389226629a0863c23b62177294b869022f3202e29408c7f21b91fd428ce91d71f231cbc28c094e01c2c1398285b96271ac3959328f19621174c9b74284d976015069c5328ec963713d99c0d281d977f89049e85270198e496419fc2264498e399959fb025bc988c9bfb9f3025d198fc9bd49fdf24ef98209cd29f4124cb983a9c7a9fb023c298549c8f9f18238d983e9c5e9fae223498369c419f3e22f997339ce79ef121d297359ca19e982193970c9c559e2321b7965e9bc79dd9205596f29a729d7a20b5958f9a249d242037952a9aa79cc11f919490995a9c191f77941c99099c881e5a94c7987c9bec1d4b945798e49aa81d4c9435987f9a6a1d9d943398259a751dae9356975599051ded928096db981e1b0000921453190b156a9de79f7ca11b26369f9ea1a2a357278a9fffa11ea4bf27799ff4a120a4d827f49f3aa234a4e6274fa095a27fa43a28a9a040a3eca4862885a0faa2bea4c62835a0bba11ca4f328a19fd6a065a32f2970a06aa0eaa2f62905a06a9edba1872ade9e2997da9ded2ab49d821a7219892b229c6d1f5d1ee72b4c984022ff219c2b5e9368247724622b3211a725ee25cd2a190871255a26692a14116825a3250a2a270e64259125da29ef1020254c259429d610be2484247429711280247824b92973103724ee23d729b31331249e23ec29d40f1623f0219b29a1859e21611f67295d93a31f381c2729e995751c3093e8282f98d916219d6c284a998b9706a0fc270d99259ae89f66271999b49916a0dd264899e29baaa00b26ca99c29d65a18725dd99249e70a110257899ce9d06a1aa243499859df1a04b242599719db6a0e623fb98299d78a05c239f98e69c28a084221c98699c669fb021c2973e9ce59e32219a970c9c9e9ee4203e97c89b559e96202897a89b029e642020976b9bd29d4120c396219b989d0020c196ca9a509dd71f9796a49a149d561fb7964f9a889cc21e4296019a869c9a1ee1956599db9bed1db994df98689b761d9e94d498329b2f1d0e94b298d69a681d11937e97fa99471d00007214d319fe11a59d73a049a266267c9f44a236a428270ba007a392a4c4274aa015a3a2a4f0272ca0fea2bea4102892a058a3fda44628afa031a3fea447289ea023a3e3a43828bba0cca2a7a4302830a12ca30ba5bd28cea1c7a375a54c2991a125a358a5a629f7a0f2a17aa4562a0fa0489c4ba0ff2af79c2b19258ebb2bd398ca22ac223a2c9811d0258b26652c8318ec278d283f2c491a6e28ff280c2c8a12bb28bd29952bf61a8b284729ce2b7f1a97282d29822b001b19288f28992b401413289d288d2b52186a26d626262b3f154f251b25fb2a5290d4230824762abb952d202e1ef4295d96e21b3d8d86298298ee13089eeb28c19977971da0f027289b9b9c86a19c27529c699e6fa2e826139c2f9ff4a28026009c689ffda2ac25ae9b4a9f83a2fd244f9b089f35a29924f09aff9e0fa26924819aa09eb7a11724309a6f9e51a17823d3990f9e07a1cf228599fd9dd2a0672262999e9da0a008222299539d40a093210a990a9dd09f43219798ae9c499fcf20d3971d9c8a9e3b208b967c9bc39d7f1f3996ed9a869d301fe495c39a389dd61e9095759aff9cbc1e79954e9ad79c621e0a950e9a7b9cf41da9948799239c891d80944799ea9b2d1d7294c498169bf01ca2933c983e9a0d1d7f934f98669af21c020e3c18421a540e7199029c9d9db01f56a0f9a100a4052665a033a3d5a4302750a021a3dca45b27ada080a31ca59927d5a0bea344a5eb27e9a002a46ca5ed27d1a00ca484a5d527e7a01fa4aca5d427e9a009a4d1a5cd27eca02ea422a6ff27cea018a4faa5cb2760a148a42da63228c1a006a405a66c28ed9f3ca376a58828a69fa8a1a8a492297e9d2b9acb9f8f2b6d912b234023452d9e18dd27df285e2e891ea129d82acc2e8c20f32a372c802efa20a62af62b172eb91fc529252bed2dbb1c3b286b29392d7f180726ce26c52c168721224522072c3598101a8714ee2a679b009bf79fda29b99c959d0ba2a828459ccd9d8ea368283a9c369ff7a28927089c0ea01ea36c26e39b20a02da38825fd9b88a07aa35525f69b86a093a3ee24989b46a000a38024459b03a0c0a22c24e79a5a9f48a2aa23da9a319ff9a15123ba9add9ec3a1ed225c9a689e71a16c221f9a0e9efba0e5218a99a89d9ba059212299609d42a0f520d598189d0da09f20aa98e19cb59f4e209898ac9c259f17207598489ccb9e9c1f0198029c3f9e041f8e97c49bd59db81e26975a9b7a9d551ed796ea9a469d191ee396c59afb9cc71d4496519a829c861df295fa99709c301dbc95b099249cba1cb594fa98419b301c6d94b498929b9a1ca10f7913e114ba0a61990d9cc39cad1d2d9f21a22aa4db2518a0f8a2bda4bb260fa0dca2bba4c02648a026a3e9a4ce2656a056a309a5de2687a085a324a5e626cca0c4a36da5f6260da105a480a5dd26f9a0eea385a59926e7a0dda369a54e26ffa0c8a36da53b26bba01fa352a59f25dea00ca34ea56125baa099a2eaa4982429a053a149a4a122489f6ca0b1a39420e19d379f38a31c1e0a9da19faba3af1c4c9ce19f0ba44e1ab69cb2a079a4501a019dd4a0a9a5f21cd5a05aa596a89d21f6a1f2a6aaa9b42551a010a7baa86a26049994a4f7a5ed24f3993da1e9a4a524a39964a0c0a4d224ca9e94a1b2a48e24ae9e5fa1c5a4a124049de3a108a5f424e69c68a1daa4ee24b69ceba051a46324ab9cc3a003a427240f9c70a05fa35f23c59b4fa02ba32b231f9c55a030a30f23289c33a0eba2cb22b69b05a091a272227d9b939f1aa2df21089b1e9f88a15121379a9d9e32a117218099509efea0cc204b99039ec6a094205c99e59d90a078204099a19d48a031203699479de19fe11f0c99e99c429f6c1f4e98739c839ecf1e0898219c179e601ee297e69bc79d321ebf97b79bc29d2d1e97967c9b7f9d091e4b96099b2d9db31d2596ca9af59c561d1c96759ab49c321d7e95e499909c501dad95ec98c29a911b00002a13a617e50e2b9d50a0faa1a5244b9f92a25aa4ef25f59f36a3e4a41b26e89f42a3eda42b2617a026a3f5a41d2634a02ba3f7a4e02537a027a3fda4bd2559a026a310a5962549a024a327a5872554a05aa330a57d2526a01aa36ca56c252d9f28a2cca4a924fd9eeba0c2a36b23879ea6a080a3a622059d559f37a2a821e19b209e5da1b921b899d09cf0a0d4218198639cc69fe521db96059cc59ef52171953c9b059ebb212d94349a849d6621b0922f99089dfe207791d797e29c93209391af97be9c0f201793d698ac9d7f1fca95e49a8c9f251fa198ac9cb7a00f1fd99b399fbca206202b9dcca030a4d220f49cdea036a4c821989ce8a043a47f22ac9ceba02da4ab22809cada0e7a36722589c74a090a34b22529c87a07ca33522349c7ba060a31922069c62a02ba30122c79b45a0f4a2ce218f9b09a09ba2b421159b889f30a26c21ae9ae99eada12721439a909e43a1c620c899579efca09a208b99099eb6a059204599b79d73a02f201399919d38a0ee1feb98439dff9f811fb098fa9c9f9f241f6098ce9c4f9fb11e2998859ce69e741e3d985c9c9d9e531e2098259c459e201e3898fb9bd99dd91d6898e39bb69db61d18988e9b879d461d2f970f9b1a9ddc1ca495cb99429cb11c6996f198c79b601ba904b2166e1928111d9e81a02da27f24a19f71a23ea44325b09f9ba260a430255c9f41a235a41525929f47a257a41725c49f3ca25ca40c25ba9f4ca264a40425969f16a274a4f0244e9f1ea278a4e224f99efaa14da49124b09e25a1a4a30f24519e9da0cea25923e59d52a069a29823919d44a05ba21024379d4da063a23624fb9c4da05fa24724d69c66a04aa24c24f19c9fa06fa26524dd9c99a087a26724cc9c8aa062a25324b99c6ea07fa24324839c5aa046a231243e9c49a042a2fb238b9b00a001a28b23079b8d9fd0a133235f9a2b9fcca1b822ea99d89eaba12a22e299759e9ca1b521429a549ec7a1f620149a889e1aa2d120919afa9e80a2e920929bf19ff1a2ee20c89b08a0e6a2f120b79b18a0caa2e820939b15a0b2a2b6205c9bbb9f68a2b8202b9b8f9f3da2a420159b7e9f1fa2a120f49a5f9fe6a19c20b39a559fd4a18e207e9a289fa9a17f20559a129f75a15120ea99869e03a12f208099f29d86a0ff1f1b998f9d37a0991fde98109dd99fea1e9298b79c329f531e5398859cde9e091e2a98409c759ea81de297289c499e821d6897f49bf69d561dfc96a69bb89d1b1db2967c9b779dfc1c4f962c9b389dde1c4c96ef9a139d9e1c8196d59ae79c921cdf953a9aa59c6e1cf496889ad49c9b1c12876997e995d71e5926731d7320ab250a2ab6202821c225d42c8921e6220427e52dc52114233227c42edc2175232c27472fe7218e23a426912f8b228123f126532f57224b232b261a30762073206b25ae2ecda79da84225aa2e43ad8caec0269c2cb5b1fcb22c2b5230b9213c28b326a92fae214b2c8b286a2e7e21f22d7a2aff2cbe21452f142c762a67211930862ce1256f213c30c12c41210022aa305d2db91b7921c2309f2da01a1721d530c42d7f1989202931bc2d771715204931b72d9b165b1f8231f22d3f17cf1e6931872df215961ea231142e8e143f1e8b313b2e8b158d1e73310e2e11128c1e6731d72d1b178620ac31f82d79186f207d31b22dd217a11f8d30e42cd813ae1a7b2dbb2bfe10de149128cf290e1a1e220e2633262019bb1f302130211e18be1e6120dc20ba17c01e1f2004215518501e222003210d183d1e3720e5207e17031e0020c120c917e21da11fa420ee16b41d8b1f8020b016461d2d1f4c206a16d81c641ed91fee15671ca11df21e92152e1c881dd41e6c15261c751d971e1215021c5d1d7a1e1d15d61b161d2c1ed7147f1bd71cdf1db314221b8d1c851d6314681a2e1c361d58145e1a0e1cf21c5b14451afd1bde1ca0143c1a071ca71c6f14f0193c1ce01cc612b517c919511c0e0c7690c18de81de82251200622fb2631272a21b121a227482a072150225328342c522061211f285f2d50200921a327ce2e26200b213627872f621ff020bc2707301217ec1492270e30daa18ca35527ab2ff7a724a955280c2f45addbaea829e42e8aad17affd295c2f80a55ca55428d12ede91a925a028302d4d1dce2b0d2a432be51f5f2e1e2c2727b120be2f0d2d34202c215230bd2dec1811219630242e2d18ba20ca305d2eaa1750201c31602e4f1874206631342ec5175420d631302ebd176220c531722eca19a9200e32bf2e551ab1202432ae2e0018f41f1632c72ee418f61e2532982ede17121e10326e2e2218541e1e32932efa15131bd631732e348cb6996c30392d3290c09ded2b802a8191f39d8f20d626b58c0e9c679d2225d516041b2e1a4424c118171f28204a2375187a1fa3209d22c018731fe3207f223e18ce1e76201622e817581e132073214b17b01d4a1fe020b216b11d661ff320ee16741d321fd9208c16061db41e6d20b3157d1cb21df21f2c15211c4e1d751fff14d51b1f1d0d1fcc148b1bd21cd61eb1141e1bab1c9e1e8414041b6c1c541eb014e41a771c321e6514721a2c1cd71d4c14401a031c9e1d2414041ac51b521d1514ae19731bf31cbf129418521a8d1cf61034168918271bcc816313e815421d5f1a3b1e1d2041277821fc1fbb20c827e925da1fdb20fe27ff28ec1fe9201a28ab2b5f209a203c284c2dfb1f5120d227412edb1db91e6f28302f3a0bbf97ab28cc2f11a056a1a628922f4fa528a7fd283d2f81a9a7ab822a052f81a99fab152a922e74a65ba85e29b12d969da98f1629372bb08b7a26672ab827291a292c292c8420871fd52e5b2d2594551e4e30302eb896781ead30e02e0486271f3331392f3e1127205b311e2f1a184921e331632f77180a212532922f3018be204932a42f28198c209232e22fa0182020a232f62f2418291f9c32ee2f3218d21ecc32f32f0518831ec1320030e516a01cca320530e41068162d32712f568dbd9abd2f8c2dee8a3a9a6729862aac8c8a9a67935327b10dd893849dae25c712c8107096b1248717221dc61c52242b17861d881e9f238417091e7f1f0523c417741e2820cb22e317291eb51ffd21ef16561dca1e4621f015191d9e1e2421ec15cf1c3b1efe20b0156f1cc01d9c2038152a1c621d3a20ed14fe1b351d0220bc14951bdc1c911f74144e1bb81c5a1f5c14cf1a671cf01e3c147d1a1a1c761e1d143e1acf1b061ee113fd19901bd51d9e13ce19591baa1d31138c19431b7a1d50139819841b9b1d9912d918b71a6f1deb10cc1536180c1c188ebd131c15271a2792c21cee1ee627820fcf1d671e2428a91e941ea320b7284424bc1ef31e7128ad278e1f401f0e29cf296f1ed51ef7283c2c901b5e15de28612d599a579e2c29f92d9ca0a2a2c829312eaea3e2a5a429132e64a535a86c29712df6a55ba84829882c62a4f8a6b128aa2aefa0d2a469290727b011fd1dd129a81fea0bf727bb2b1a9a691a8b2cf32c4b9dae1a442f382e9898e41ee330762f5994951f6631ff2f0d855c1fc6310730a21444203d324230f517a22090325c30b7176120b63267301b17e41fce32673011170e1f00339030f3170b1f203396304b174c1e4833b8300f15021d6333c930b9147e1a5033bd30cc1263183f3235303713fb16c92e8d2d3f1192174627b7292016391c111bba26fb1566196a91b225cf15d01ae3154f253e17da1c8b1cfd24ff158d1c921c0f24eb15b81c3f1d4e238d15e81cc31dc4220e16e21c8a1d37222f16831c781d86217615641c701d2c2142154f1c511d0e212d152c1c161dd6207214591b981c5f205d14f21a581c0c203f149c1a441cf31f19147b1a291cc01f1414551a0e1c651f6113191ad61b251f7113c2195e1b931e841222198d1af31d8412f5184c1ab81d14129f18221a721d31126818fa194e1dd711a7178619971db80f0d153f17f01c938af012eb14151ca2935a1b2d1de1256d98831b4c1d57285f97061dd21def2869116a1c101ded28731ec81b7214eb280c243418ac11fe2882277e18120cee283029ea99689f5f29b22a569fe9a17829e52ad09e18a1aa29a72b27a204a56a295b2acca302a6dc298f2808a28da5202af324ea9f37a4cf29721a1aa0d0a4af293d9d679a7a8f402af49eae0b0e28412c989e4d11f82cdd2d329b671f62309c2f2c9aa91c603172309f95d31cf1319f30628e601d6532ec30f30ffb1ed33209315214aa1e193320315f14751e3133313171151e1faa3364313b16f61ebb335e318816191ed6335f31c8141c1def335f31d613a41ba4331c318613921ac2310730db0c970ed22c8f2c110e9308791fac28531365147d9ddd266e14b117fb9a1c2661132518de97bc256415001b921553258c15391c301b7e248015751c301c122477157b1c7c1c72234715811cd81c212346152b1cf21c68220315041cb91cd121e314671b891c3821d114051b4b1cd7204714a41a081c742034146b1a131c4d200814971ae61b14209e13501ae81ba71f52131b1a901b521fe812c419171bb71e56128c19d91a7c1e2e12d2183d1a081ea0119a189c19ad1d721142186319731d8a1136187819691dbf11e117e819b71d6211ff166a19151db88984188d1a461ca9961416311b80251299c81a341cc928b99b881c471e8e29e59dcc1cbc1f7529e19bed1c411d59293e09341a58177a29071aae0ae69a5729f41d9b9caf9f7129fa22b09f54a2cd290d2406a0d6a2542a7f241fa056a3412a0b228ba1baa4512aaa1a11a1e1a4132a90970f9f75a4ee29949ea89daba37c299ea01c15e09dec29bf9f2112f61a462b229df0199f28d52c9c9d7914af2de22ef69ccd0ba23079303c9a741ae6313f31a4920b1ec432803105060b1f4933b331b70d901e7833b0319a0f161eb933e831b711fe1d0d340932c4121d1e1d34f4319c15be1e3f34fe315114231e5a3407323012ea1aa73355316b11571a80308e2f5f0e72166128b62b6812ec173e9821280e133417fc9c04277e1182156f9c3e2669122e18cb98b825b214b31a14145a256215ad1c571acd242916111d091c6e2433156f1c391c5a233414a41bb51b27221114c81b361cf5211914861b121ca3212914571b1e1c66219813b71ad81b09215b136c1a671bc020e212161a541b7720c5128e19ee1a222071128819931ad61f51125a194d1a831f0f123319651a191ffe1123194b1a241fff11cc18281ad41e9b11af18b219a51e961158188819741e8211e8173319111efa10ae16f8181d1e480e2214c116111dd885fe0d3b11bf1b0998401660186e25289b0e164b16c028c99c3017a1189029f79c6718af197529a09d5818901a45295d9e031458176929149e1f91f3988829ae9dbd9a249eab295b9dd79c2ea0c529e99c819eb4a1d329079ef99f8aa3182a8d9f2ca0ffa3162af7a0d39f12a49c2955a140a01da5172a18a204a0dea4272abba1ad9f82a55c2a47a0bb9990a2822a519f6e99d195552bfd9dd98a3329e92cf29c4f18662e6a2ffd9ab41b3a310e313b98201ac632c9315094a11bc6333532738e941ce0333b32a88b8b1d22347432e405191e6534cd32330e7f1d5f34ae320c0e221d61349c32a80cd41c4934633287115c1db03239311d0c5c199b2d032e06094a14ec1f6c2926049215339e7b2772103417b79cc326f60fb717e79a452603101117b698bb25a8105c18b69328252a120b19bd09b52413134a1a53175e248513ce1aec183a240613d81ae619fe234c12c7198c19ab22e711a0197319dd210e125319821974217711271954192c215f111919a019f320a711fa18d819c92095111c19931991201811ba1881192120e41062182119b11f8b10f1179518301f8410bf176818ea1e0710ff164018861e3c0f5416aa17511ef90ea115d216ef1d200fe7152717e51dc70ecc14ed17151eed0bb2119014621ca4812310c613041a6f98db074d157c25579a6a16bf162629ca9c79177117e229ca9d7a177817c4296e9e38145e15ac296d9f1a919192b6290aa1619b4c9d9c29f9a1b39cd49ed429ada1019e8ba0fe29d6a1c19e00a20a2ab2a2439fd9a2742a0ba2e39e3aa3b82a78a17c9d94a2442a46a1ad9ba8a2292a05a10d9c19a3792ac1a1d89921a3682a1da01c9782a25c2a07a0a299a7a24d2a1a9eac11f995a72bfe9c27187c29302db29b941ae72e0b30e39a9a1656316c315598141a033366325094ff1cde33c8326994d21c3e34ee324291871c85345033238ce51d87343c333a0b841d8434ee326684021bde333532d2832a1b753020306889aa17c628412cc9030115319cb728df096512fb9f252719047714259eb226d60964158b9c8426900ccb15539abe25070c811633983425de0f1019be89cd24ec104c1aad146224cd11581aff17eb237612371ac41838234c12131a4a195c222e121e1aa0192d2257118b19e219d321ff103e1922196a21cd10c218d318fb20c61094181419d320c9103118d718802099104f18971845203210a3176418ff1fa30f4e1724185e1f090ff616d217f61e030e1916be16601ec00d64156116e41db70d36153f16c51dcf0d1d159d16c11d670e3a142e161d1ee30b21114313951b808de68d540af11cb6985a8e7c92e125429c4490a496e4281d9e04947c97d929f19ede95cd98c4295aa07a9acf9dd8298da04f96749a332a5da0bd94df9a5d2aa3a0a198089dab2a38a1bb99919eb22a71a1f39b01a0932ac2a1e29a6aa07d2aeea1fc9a49a1842a64a1dd99b1a1622a56a1099a5fa29c2a9ca1829cf0a26c2a02a23d9bb5a2ce29b6a02c9917a30b2aa19f969ae9a3512a999f5e9aaba3582a649d8f111f9c622b899b4d192028382d089c1f17592d0f30b699d90b31315b311598361af63260323a96991a03340d339394c01b42344b339b8e3e1e6d343433938e8b1cf7337732c49047194a31b5302d8c4d19d52bec2cfc8c2c0a3d1ced2951902d9099a02528ad038117989e32288803be16439d1427490958168f9b2c26230978179c9a01263c098317af98b2251d0c1c18a5954b25f20ba5178190d524590da3172f091724210ef417cd115323db0e42180715e922680e1f18e014b4226a0ef117b11546220f0d84176915d7210b0d1217ee156b21b00d79167b15e720880d17161b159120080dc4158c153520a90c8e155a150f206c0c60152e15db1f320c341589153f1ff40b7914ac14c61ea90ae2138e149b1ef50a73133d14011eb70ac612c3133d1d0a0a2b1158142c1d8a813d8a958d131b4c8f7590ed917d1f8d96449147910f23b49c0a957e963f29f09d8d953597d329ec9e8497e499dc29e89fdd984d9b132a5ca0f599039d4d2ab6a0359bec9d822a37a17e9b369ea92a29a1889a539e9e2a54a1a89bd39f972a73a1c89baea0b82ad3a1e39b28a1b62aeaa1d59cc6a16e2a32a2d19c45a20e2a64a1b09c66a2192aa1a1219ca8a2d82994a0029b61a3fc294fa0cd9922a49a2abaa0e49947a4bb2a399ed6964ba35b2a5c9ced1898a1ae2a609c2b0ced218d2c399b8518cc2b5e2e489935186a2f7130e398971630319b313297001af731f7314197121abe3154311c9781141d306430fe952614822ba72d339130189323662a2b04351927987c281b848e189c9c08281c04f218c59b7227dc835617759c69270a844817569c1427c183d416249a8e26c083f01714982c264e033518ca95872520037a175493cf24e802f415ed8f5624b802b81503890824a2028c15ce08bb237f074d15d40e2f2354071015710ec7220607cd141f0e50229d068514c210c42130063a1464105321d005dd13ae11d12079057e13671195205a083313251146201708f5124e1212201608c6121c12b91f2e087112dc113f1f450544119511bf1e6a05ca101711271ea901360f9510891d4a04380d64104e1ded08000efb105b1c008a06913691c11ab09a8b9507989e25d29c3f99169bfe28ed9dec99609cd329c59e649a9e9cf129969f989abf9c0a2aa49fca99dc9c1c2a26a0ee99019d252a86a0359bd99d452ae5a08d9bee9e8f2a2ca1e29bef9fc52a40a1069c69a0c02af3a0f69bd1a0a62aafa0ca9b1ca1642aa2a0c89b90a1532a84a0cf9b0ba25d2a49a0d49b13a24e2a44a0c79a48a20e2a0ea0dc9969a25c2a1ba08e986da2042a899eb29653a2eb29769deb8bf0a1462a059c8b140f9f6c294c9bc51a0b1d642b4e9c9b1a1d26a82c1b99721c052acb2d8395c31cf22b072eda94cd1bef2a4e2d34945e1afb27162c9c920d18e42045292b8edd184d970228608d97186b9d3e283a8f89189d9dd227d7902f178a9d7427e28f2f16a79d9a27ba8ee115c99cfe26528c4115ca9a2b26038907164a998b25f788cd1532981a257b8876156d96c624c8822915ad926124b0820a15b08f34249d82f3148b8f0c247d02c814e388b723570270147508e5222c827f12c287e1211082071234875921fa81d9110e073d21fd81c511f3060d21e5818c11a706d520c1811411ff0543209c81fc0e3c05471f7d817c0ed404901e6681710ca284281e688132098884051e658130098104fb1d66842b097204e71d6a0157037b0a9a1dc68a8e8d798f011d0080a58d8d8de009609a7f976a9a01253f9f0a9c639d11299c9f659c409ea829b89fde9ca79ec1291ca0f79cd89eda295aa0b39c289f1f2aa2a0739cf59e502aeda02b9c449f5b2a17a1519c9b9f7d2a2aa1cc9b3c9fad2a20a1c599489fa22ae9a0ac9909a0722ae7a0a59951a02d2af8a0ac9875a0332ac9a08498c0a0f0295ba0549881a08c2967a00b97c8a0cc293ba04595fba0dc29599f6892a6a12f2afa9e5c92a4a12d2af09d0b8cd9a1152a2e9dd68baca1cf29f39c988b50a2122a479c430b4ba1cc29199a500b099fe1292b981b146c97cc29a1951b17010ec52959944418d6930529c7949016729a6e286594b018899e4c285f923116b89f41284295f514e69eef2735922915c49dc22790928d14549d0a27fc929412b29cdb263d923d12c59b3a26d791d111319ba925ae907311ee99302534900b118899d724a08f9b1004994e24e58d5e101898f423ad8d2e10db97a123568dbc0c299611234c8d6e0caf9565225a8e85054995d321548e40850a945521248e0a85a9930e21ed8dd9844f93d320908daa8406938920178d6884b0925120b28c5c8a4b92f41f5d8cfb89d891631f138cb48c9391e41e2d8ca28c7291bb1e868a528e5191921e848a538cd38f381e568a578ff590201ec78f3a94e3951e1d008006902490860992995b98f09a8b24269d3e9c399eed28c49eff9c129fed2900a00a9d969f382a59a0389dd29f432aa5a0559d7f9f7c2ad0a0099db89f862a19a1309d06a0a32a48a1759d43a0dd2afea07d9c09a0f92aeba0129c20a0f32a08a11d9b2ea0ae2a0aa1049b8da0832a1da1f49991a0592a15a1e29894a0452a03a1ea98aca04f2abba0ad972ba1442a50a0bf97a6a1482a9e9fad97aea1382a229f999713a2382a5d9e309544a2ef29a49dfa912aa2bf29a69ca31154a18f29de9a4a161da06929d099bc18df9ede282099c717c99ecf283798c315599fac282c97cd15dd9f9a28c897f415cc9f90285d969f17679fb528f6948c155f9e5c2882952816a29d94279994a814479d19273e94a612359de126c4948612279dcf265594a90e6d9cbe259f94780e1c9c552567943d0e1c9b0125e392150e239ad424d490f11091989c2486908c0d37982d247190cf069e976623c89052862198f4229990898ce0977f222f912a8f72970522ec90c290de979d21859073905797202132906f91ef96d8200a9036919b968420d48e079199953f205c8fd29058950d20018e8790fe94681fa58d2690f793d11ec48dff8fa193871eef8de98f89934e1e228ecf8f21920f1e068d59914193121e24900c947b96481d00806890db900909059a8399479c9624579e8a9d5f9f2429149f089e33a0c229fd9f029e67a0d5290ca0a49d2ea0d4292fa0649d0ea00c2a48a0b29ce39f192a65a07d9cc19f3e2a92a0389c1ea0772a8aa0a89bca9f8f2a6aa0c29afa9f8c2a66a0d99923a0842a56a09197c09f812a24a09797f29f622a12a07b95d99f1e2a889f5e92df9f0b2a049f5c92d39fd229979e3a8cf99fbe29929e510c6da0b929cf9d7b1213a0c629499da617729fbb299c9ccd19529f8a29f69b8d1a079f3a29179b241af59df3289e99be19919d8b287c99bc19f09c91282699dc18e19c84289098c318c09c6528aa969f18a89c4e28c39570180d9d1f2866952918dd9cf0270396dc16b19c85273e966b16919c52274696ab144a9ce0269a95a212a19ca3261595ad0f729c61269094b908049cdd2517957b8e9e9bda248a94fb8d5a9baf2461938c90d39a4424199349905d9ace23a9929691cc99f822e492b39261997722c692be931c990622f69263945699a1219c9333948d9946219b92a494e2980b21259269949798a4204c91129435982920b9906d93b4979e1fcf9000944197051f5590d1930097c61e4a90439478977f1e51902894a396471ea28f11946f96151e4990ee933296dc1dd18eae9312958a1dc68d7691c8937a1c008089869287d00a819a639aa49cd124f59ed19e91a06629cf9f5f9f10a1432a02a0119f20a1212a2da09f9e1ea1fb2943a04e9ef1a01b2a4ba0fa9d6aa0042a26a0b29cef9f0f2a40a0fb9bad9f1a2a2aa0529ab69e312a36a0ac98749e692a0aa06c95629d6a2ae39f9a92899d6a2a959f830cfa9c5e2a829fc412089d572a709fb915409c232a259f05185a9c162a8b9e16183f9d002a149e0918379dde29c99dfe172d9db929279de617e59da629b69cb217a29e83290f9cd4188c9e71293d9b9e18589e46290a9a7b19609d272900991a1b749cd728b297ea1b029ab728d996551c9898a2280895a51c5296772803958a1c65935a28a294d01a2b9834289394f6192799f227e494e018f7998627b29484188d990127159465187899e6260b930a18f6984226d291911766979925aa910b154a98502575947b93529c062508957a96229da6246d95c4968f9c2024e194e6965c9c3e239c944e97279cc422aa94a697249c57224a94f397d09bdc2109941498599b6621c693b697f29aff20c39376973d9ac8209293a496039a8220cd926596ca9940200b933496a5992520d992d7950199d91fb692cc95d098e91e3e935a951898241e2492c8948997121ebb9109952f97a71d1c90e6938095b21d7c8fff93e995b11cda93c7927c8d981c3f9e13a0c0a031281e9fd99f8ca1d028df9f6ba0f6a1722956a061a022a2c629a4a050a0d8a1e029c2a00ea0cca11e2a9fa0f09e17a1382a9ea0779d7ea0632a7da03e9c899f832a49a0a79a649e852a3ea076973d9d812aec9f8c92e89b6c2a9a9faa1233995c2a9d9fb2159c973b2a619f1418ec97632afb9e5c1911985a2a679ec41b1d981f2a199ec41b1c98e829679d8f1de094a3298a9c371f758e6629b99bfb1e4c0e43290d9bd51e328e2e29619a341e9c9423294999061e81940529a1984b1e5f94e0280598911d1097b92813970d1e2794b6284896e91d0f94b1287e95631d598db828af94d11d400da2285e933f1d318d81280294501b54984b28c1940519059a972721957f16769c6a2747959f12269dec2674952f0f0c9d33268c9582881a9dc425c1957191439d50252396a894f79ceb24b9964596f69c7e244096a597409d2d2404966298239d8f23d395ed986f9d0923a49518996d9daf224b9532992f9d42220395c298659c772176943898c79bd62035940098659b8120f793b5971d9b5520f1937f97d29a1120e293ed97499ae61ffc93df972d9ac21ff09301984d9a5a1fe893b097079ae01efb9374977f999c1eeb938b972f993c1e3d927396c498101e849247977899431cd88ccb12ff144c19f49d699f60a0a5260da02ca057a27f280ca0baa091a28f2850a020a10ca3d62870a064a16aa332298ca0a2a1c5a3a1299ba05da18ca3f22991a0a0a0a7a2622a8ca0f29e8fa1dd2a7fa0369d75a0172b3da03a9a079f132bda9f930c4299e62af89e7f1b9714a52a829e831f5b1c7c2a569eb020a21f472ae59dc220bd1f0f2a3a9dc720f61eae29d39cca203e1e91292f9cb7203f1e4229419bf6206b1d0e29209ae6205f1dce289199d320761c9d28d098ba20471b99283e98b420a91999287e97a9200218c2289195db208619c8286e94ab205219cc2838947b200919b9289e9240202f1a9828dd93a51f9018862864944a1e33183d28cc94281c9e12ed27e396d718a798902767970213b79c42273697e28f6a9ed5263498d3977d9f0b267f984499199f6b2565986d99eb9eec246398299af09e9c244998b69ad89e4224e997b29abc9edc2335979f9a819e21239b96849a5b9e6c220096829afc9d0b220396219aa39d9421a695e499209df72035956d99859c7920f39416993e9c1b20cb94bf98d99b6e1fd294da987c9bee1e99945798339b831e44944198119b641e14942398a09a421e4193cc97359afe1d3b93c697289af11d5493b597a699b81d0c9239973c99041e9692af969698851c178ab312f5146a1dff9dbca0d4a1ab27719f07a11ea349288b9f0aa112a34f28ff9f3ca15ea37d281ea084a1b8a3c92898a0f9a12ba4422900a137a254a48f29f5a05aa18fa3e229a7a012a0f0a1342a40a0be9dc4a09d2a149fec98629d0b2b129e6119470e4f2b7a9d0a1e971c3f2b239dd9203320202b4d9c38223f218f2a5f9cf822bb21042ade9a1724942263294d9c12246b230029179a252455239c2854981824402357286094262423230e28c48d1f240923ff276b870d248822e6272707042479220528240da1239b21342828106d23ea2155289d116723a6216e28d50fbd22f4208a28b18c95213e1f9d28df942120e519a128e595271e1a0da9283396911c3f939128c195981bd7973c288b962118ef9b00287e9788892c9e5827f597f996f19e8d2699987599c59fd425c4981b9bdf9f4425de98039b899f9024c998b89b639f0824da982d9c6b9f7d23c8984c9c7d9fe5227c983e9c599f6a2256985d9c299fed213598249ccf9e8621ff971c9c729e20210e976a9bd49db1208596eb9a729d4a20f7956c9a119dd01f3895089a909c491fb9947e994e9c931eb1943f99e69b1a1e6c940c999d9bbf1d9094c598359ba51d71947e98959a931da09434985e9a861d3994d597b799841d43940a98309af51b870061121f175518bb9ee4a08ca2ec26179fe5a104a4b827f79f45a251a40f2810a05aa270a42b2846a0b3a29fa44a28bda00fa3dea49f28f3a029a3cca4d32899a031a252a414295fa04da18da377297aa077a0c9a26e2ace9f279c38a04a2b959d5219500e8b2bf99c87218421e42bac9a1f247724a92bde973a25a8251b2bdb881e26d526412a480f8126cf265529ee117026f726c028cb115e26e92635282b1674269e269e2712160a268c264a271117fe257f263b27e616ee2530266727be17f9251c268c274a180d26c625102828190c26e42555282d19c3257425bb283f182b25dd24ea289c1653246323e0280d11a0225f21cf28d5903a20181c9b28f097161aa7954628b5986a90699dec2722997c97e79e52270d997c9af19f9a269c99ac9c92a0e225a399939d26a14925af99b29d4fa1d8249699919df6a05f2471997d9dd9a0fa234799549d91a06123e298079d41a08a226c98869c959fb7212398319c0e9f3621f6971e9cb89ec320ad97ea9b6f9e77202597bf9b159e5a20fd96909bec9d25209196409bb19dcb1f4096d59a5c9d931f1a96969aed9c2f1ff7954d9abb9ce71eb895c1995c9c6e1e189559990b9cf51d8294d798739b8e1d7a94d698489b6e1d4294d898049bc21d54942798f999731c00009d14681a190de99e56a143a3992603a0dea2b3a49f2769a05ca3d4a40228aca08ba302a52828b7a0c2a328a55e28fca0cea34ea57e281aa19aa325a5642825a15da3f2a47e287ea170a317a5c62841a236a344a55d2918a1d9a146a4e829c79f559c2da0b92a169d7e1b131a342c749450253026eb2c011c0329f929a92c2e1f7b2aea2b932b5e20b82a232c2f2a16209e2afa2b60281220492a7c2b8f260d20fc29d92aff24e71fd929d52a8e24e51ec129042b79240420b129a32abb244320c829942a7825cf1f8129492a1427221f0529c7296228b11d9928fb286129c61c99273528292ab5199725ed25172a6b1457237c229b29b08a1f1f8e1b9d287296cf145c99fa274e9a6f99d99f5827009cb09ddaa10327bb9ce39ea3a247265e9cfd9e1aa24325329b959ec8a1a224189b9b9ed7a15c24d69a749eaea1fb23609a4d9e60a14823179a289e1da1ab22e699e49de8a046228999b09dafa0de213799639d4da087210d991e9d0ba018219a98d09c609fac2000985f9cb89e2a20cc96af9bf29d6a1f55962d9b959df61ef395be9a3e9d921e93959e9a269d4f1e7595739ade9cff1d3995fe999f9c8f1d0195d199549c5c1db7946d990e9c2d1da9940199239bdb1c09948898829a081da393d497299af41b5414c71ba81dcd11e09bac9dfc9f942355a085a278a4c42688a080a308a59d27afa0bba34aa5dd27d3a0dca343a5bb271aa113a485a5f9270fa138a4aca5072808a129a4d3a5e8273ea163a41aa607284ea17ca43ba6142831a27ba494a62228a7a1cca44ba6ee27e4a023a40fa6a52803a136a287a59d2b8790a525f1259d2e5424782dcd2e372f9e2732303431822cf8264f306731f32411268d2fa23049a07725e72e1730faa563254b2ea42fb5a72a25f92d7b2f2ca72825032e632f21a53425f62d652fc599fa24042e372f70263a241e2d562ed82ae021652b6c2c9e2cc11d782830298c2c7f12ea23c1235e2b1f98b91a3394e8292e9b699bd4a0cb28ce9c809fd5a2ef27239c3da0c3a3c826d59b71a0f2a3d8251a9c68a008a45d25ef9b6fa09fa3e724a39b4fa022a36d24349bc99f9fa2ee23d69a7a9f2ba26b23a69a069fcba1d5226e9a7c9e5da13a22069a2e9e1ba1cf21a999f19dbca063215c997b9d5ba0f820fd98309d22a09e20ab98f99cd59f49209098b99c389fea1f5d98749cd49e531fc897069c409ede1e9697d19b029e741e5797649ba29d101e0697379b559de31d2797eb9a189da41da396749abc9c621dea95059aa19c231d9795b399379cb01cfa942c995a9b421c6b949f982c9bd61b00005715a2171412449b9b9daf9f46228d9f5fa269a4192643a02ea3dfa4d72670a070a304a5c12691a0a7a32fa5de26b6a0dca376a5ec26c8a009a484a5e8261ca135a4c1a5cf260fa12ea4c6a5752636a11da4d4a54126c3a0caa34ca5732503a142a358a5942402a0eba17ca4ec21219c4f9e2da1ae1d4f98019b7b9e8c1627943497b89b0b135c8744885c93ab18b809be101285731b548626911695f81d5198ee9bc49d1921399d99a0b5a1be2256a0e6a32da50626a51a3725e4245c2a8325432e852e2a291125392ddb2d6e22372073269f26911b229f37a6a5a848257f9c9aa65fa9a028e49068a48aa7f5265d95dda197a5f024299bcea077a40e24d89c4da1dea4b524ae9c23a194a4a924a99c04a138a43824589c93a0e2a39c23469c8ea06aa32723589c7fa051a3eb22489c4ea004a3a1221d9c28a0bda25c220b9cf09f6aa2ef219a9b4f9fcba15a21949ae29e60a1f520c399729e14a1ad2079993e9ee7a08420a299ef9d98a04f208399c79d4aa004208c99729d12a09d1f45990c9d719f1d1f6c98699c919e6b1e3b98179c359e111e2f98059ce29de21d0298b69bbd9de11d52976c9b829dc81de696129b619d831d5096d79a0d9d4e1d2b96769aca9c2a1d5695bf99599c151d649471980f9b0f1b000087145518e10d4a9ef8a0c5a2f7248e9feea26fa4c62520a052a3f1a408262ca0a2a332a52a264da09ba340a5212661a0a6a34aa5ed2572a089a32ea5b92588a020a328a576258ba004a32ba55225bda0e1a21ea51e250ca093a15ea40d24769de99faea3ac226e9c2c9e08a1f8215f9ac99c29a04f22f098d69c709f1e23379aa09e6da04a24769b51a093a1ef24009d6da1c3a26725ca9d39a221a48b25739e99a25ca48425759e62a275a44b25f99df4a12ba4f724de9c27a11fa37e24309a769f4aa1bb23a896929cb19e8b223b924499829b2721d78d6e964f9aa91f1e8d11971a9ca21d4495ca9adc9ff01c559a769e71a3241ea59ccfa088a47320d39c31a146a4cb21c39cf9a025a46122909cb0a0c4a31b22679c97a0b7a3f321429c9ca097a3f1213a9c8ba06ba3c121119c68a02da3a921ec9b3fa0cba289219d9bf99f5ba24021fa9a469fd8a1e5207f9ae09e6ba1a020039a789e14a15120d499299ecca028207e99ca9d6ea0ce1f3399889d31a0891f23993a9dfa9f271fe7980a9db79fc21e8698d39c5a9f6c1e3d98939cf89e381e4398839cad9e161e5d98549c5e9ef01d49982f9cfd9db61d4798f29bd39d8f1d1d98819b629d211d84970a9b009da61cf895009a609cb71c0b98ad99809b801b0000a715a41849109b9e98a1cfa3db24d29feca2b7a4b625f09f14a3c0a49225d29fc0a29fa45a25e49fb0a291a43725f79f83a27ba40c25b69f36a267a4e3248c9f04a24ea4b624f79ebda124a48824019e1da175a32624ab9d6ca056a24723749d61a055a2bd23869dc3a0aaa26024a69d31a15ba3df24d29d76a1b6a33225029ed5a112a46b254b9e26a242a47f25719e63a276a48225919e7da289a487258d9e94a2a2a46625a79eb3a2b6a45325829ea2a2afa424252e9e83a29fa40025ce9d1fa25ba4c9244f9dbaa10fa47624b69cfda038a30b24bf9b63a06ea23a23319a219f98a16a227299029e2aa159216399149e91a1d7207099029ec7a186203b9af49e4ca265206b9b2aa012a35b20a99b30a0f8a24720b59b1aa0e1a23e206a9bfe9fbda22e20639ba49f6da23c20279b6d9f1da25320fd9a729ffba14c20ba9a4f9fd7a15e20889a2b9fb0a13b20669a189f7ea12820279aab9e3ea10920c499199ec3a0be1f5d99b29d5ba0301f3399619d17a0c01efa98fd9c969f3c1eb598c79c1a9ff41d63987f9cd69e981d2398639c7e9e6c1d0298339c289e401d78970a9ce29dff1c0b97b29b8f9dd41ca9965b9b509db71c9d96119b299d941cec96e49aef9c441c62969b9acb9c931c2f976d9ab99c311c6ea30e9eff9d291bdc27281d9320a3250d2ca4212521f625e32d4f21f9229a27f82ea32172230428b42feb21e22303280730e321a9239d271b305b213222c126c82f8c20d920ae241130931d6c1cbf212f308d12b616081df72f86a96cab2f21312d76b22fb4b428a9302f213a28c724a4304f21592c1728942f8721182ef229c12e5520662fb52bf42c4f200830552cec296f215f30c32c0b266322c230522d1021e421a9304b2ddf1c90207d30f42c701bac1fc430832c3e1c06201c319e2c701b39205631112d2b1cdd209831252d1d1cb620e9315b2d291b6c20d7318b2d271cf920d231c72d581212208b31802d21154f20a131812d8f1a4121ef31a22dc219af215131bc2c8f185e21d92f6c2b72191520e72b2f292c9b65a32ea141288a15e01d952054243115a81d561f7a21c218e61e55200c218618ca1e6320e120c517a01e4120d820cc17431e1f20b420a917131e0120ae202317e51de31f8320c316951da11f79207016131dc41ef71fea15981cdd1dee1e5f153c1c991d9d1e2315381c801d5b1ef6140f1c481d201e0315fa1b2c1dff1dd214a51bef1c981d8e14361b971c341d3214951a231cd21c2e146e1a0c1cb61c4a14551a241c951c8c14531a181c6a1c6914481a511c6c1cca120318ba19ab1bd090db80fb06da132a250720b9212d275c29ba201a211828262c192077210328832dcc1fa2207027c52e7d204c2137280a306f1f2720bf273430f016c0113f274e308e9d43a0b5269530b7a33fa5bb24593039a628a85023f52f10ad8dae7724a32f69ae27b0bc2687307ba7bfa7d6269030099cbd25fa270f30411e272c7329342e9f20d42e962b8a2bdf202030d72c5e26b921b230a22d981f8721fe301d2e2b1a1f223d31c02d7518472172318f2db818aa20aa318d2d92189d2012327d2db018b8205232a52d36186a207f320d2ea3166220a532072eef132c20a232422e5d174620a432c42d08143a1f9a323b2eb313b81e95329f2e0b16191f98324d2e8614db1a9c31922d520da488472e892a5e0a409797258026e19305a0b3a1ef242d108f917098b0246e16b41bba1c1e245018f21e4820a722b418681fd4203522b918361fa620fa217518b41e6b2089219717331e0a201021b916c41d9e1fcc20d716c51d931fc620c7166d1d0a1f75203216d11c5b1e23205e155c1c9b1d8e1f3615321c551d2f1fda14c81bf61cbd1eb5144c1bb91c6a1ea814301b991c3e1e9d14f21a791cf21d61148e1a361ca31d41144e1a071c451d1e14381ac21b121d0d14dd197a1ba21ce7122019a71a861c801023164718041c4589b20c570e5415101f391e79204627cd2433206620db27dc283f1f61201328b62b551f5a205328972d6f1fd81f5f28202ff51e032097280f303c1d971d6d285c30db9170933928b730aea0bfa234279b3033a60ea800278030c5a9e5abf7275b30a0aa78ac3828533022a88aa972287a3007a0789bde28f22e2c1c5d281b2abb2c9c1cc32c0c2c7f28881c6d2f8d2d581f3b1fca30432e83931a20f030df2eec8c8e206731e82e8c116b20b031ac2eeb1741214f32ab2e67189821af32b92e9a187521cd32d82e73197921fb32052fbf19842125335c2fae196c215033722fef19212171337c2f72184c2064339c2f1418781f1033a22f9814151d5633a52f610ced8e1f31072e82060b95602c282bf587ea99391c9627e412f688839ca4252714db14d19077248218311e731e2424d617ec1d051f3e231518201e991ff4224c18941e1520b5220218361ede1f0e220217a51d3f1f4c219d153d1de41e09219c15e01c8d1ec92064157c1ce31d70202615411c7e1d0e20f714101c3f1dbf1fe314ee1bdd1c421f9f14591baf1cfc1e6e140b1b581c8d1e3f14831a1c1c0f1e2914421ade1bcd1dc513f819861b8c1da613d719921b461d9213d019931b471de613e119a51b731d8913a119461b5d1d411140170519421ca981f00c9908aa12a60e2b1d24200828b91a301fb51f5f285e23061f9b208728f8276c1df01d6d28c62a1e1d631dc628df2cf41a651cb028a52e7c16b8159c280c30449c329f7f28773059a00ea3a8288c3057a34fa57528983090a542a897286f30dda611a953291230f5a409a8b228542fa9a11da5f128192d5e12b8208729d729e0189929ab2b1e23be1dac2d522d739b421d2030802e949a2220df30732f2c92e520d331db2f4c10e7202932d72fdf151f21a93228300919c621f6323b307e185321033335305018b620213339306218af2065336b306219b3208b335b30a618442083336f304916a81ea0338030a8155e1c96337a30c1130a1a26332130d914f419bf30362e2813fd18b92ae02ab815d81b5e1d2e27a41328124a9dbb250f149b17e19828252f17a21c301acc247d16b11c451c0f247716081d9c1d34231c16531d3e1e97220a16f31ce51df5212b16e11cc81d9b217c15971cbe1d3c210115551c6b1df120cc14ff1b191da6209214891bbf1c53204114341b811c05206214cc1a5b1cc61f3f149c1a3c1c8d1fec13711a181c251f87133a1ae61be41e8413e7197b1b871eb5128919f11aec1d9b121919611a881d6012c618451a701d7212ba18211a311d74114b18fb19691d401090159617a81ce2800210820e5c16bc92911e0f2009286f99e21c511fc828730e561d0b1f15292d20c41c081e57297b256b1cda1d8029212937169a178829322c970b17936d295b2d429d13a18629ac2e28a246a473295a2f25a282a49c29ed2f0ba46aa6d6299d2fa0a451a7f3294f2e03a477a65329d42cf1a16ea5d1297829a49cd2a2aa2904247b95a01e6f2a2a9a7c92aa298a2ca39fad1a2f2e712e7c9d951ed630c92f1f9c9c1cf5316f30d196911d3b3292301a8ccd1ea732cf30201330201e33f530fe14ce1f6833f4307014621fa7330d319515781ff4332f3148161d1f093421311516611e14341e31fb14221d253423311f14891a06340d31c012311830336b30b20f520f0330cc2d161066127f26d9296f12a6147a9d232760146215799cf125a7136717d7988e251d15c31a16142925a8153a1cb31a7324e515a01c521c0a246d15971c971c54232915621cf81ce2223215571c271d692238152a1ce31caa21e814b11bb41c32219914391b751cd2206114e81a361c74201b14e31a321c3e20e413ae1a071cf71f48136a1a0e1cad1f2913281ab01b1d1fec12d119221b731e85128c19d21a2b1e491217198b1aea1de611c918181a9f1dca117318a719751dbb1126186e195e1ddd1107186f19a01db910c716cd189e1cef881119c41bda179897121ddb1fa027b89a771cac1e2629099da31d8b1fa0297c9cc21ca91eb22905189b1cf41a95299a210319a715c2297225978b099895296928c59c8d9ff329b62a6ea048a3352a2d2cbba1a6a4062aca2cbea0b7a3c929a12c7aa01ea42d2abb2a0fa151a4122aee278fa13fa55e2a2821a3a073a5cc29bc9dc69c77a3222afda0f3972a20b32beda0569a4a2a462d089ec718fd2e682f6e9d22174631a730e59ae81a52323a315d95da1d0e3355318386a91f95338531460e6a1fd433a631290e471f1334ce310412031f4f34e8317614781f4c34d1315e155c1f6734d131bb14731e7534d23129147f1d5d34873113148b1cc7327a3058125c18862d202d4511f719e420f128221428193a9df226a111a415929dff25ab12a817df999625b714661ab70a16259a15911cb919a12458163d1d8d1c6a24c515ae1c781c52239f14471c641c51224914171c6c1c0022db13de1b7f1ca7213f14a71b4b1c6521ce13fe1a4c1c03217113961a031c9420e212321a141b412059129b19a91a012016124f19a41a941ffd1125195e1a1a1fc5114119261adb1efd112f195c1abf1ee011d618311a911e8f11ba18bc19651e8c115b188819071e31110318f718b41dd010ba16a618c71db70c16148616271d6b87fe0c2e08d617d0984e190019a5276c9c4218871860294a9dbb18df18da29d99d90179617b929899eeb15e51a8929099d7f14cb12c429a990c4141196f4294b1d8a98519e312a9022be9c48a08f2a7424229d11a1e52933257d9f5da20b2a34248b9fc9a29c29782139a02da4a429830b08a01fa4492a25a0e7a095a53e2a7ca4fa9f11a6382a32a39b9ba7a2d32ab49f568c58210b2c9d9ea1943d2ba92de39dcf1419301930889ce8191a32523170993a1b4833cb318697321c0c3408328192a51c24341e32f78ee51d63345032e485671e90349a32d70be91d9f348532080f3e1d93347532480d6d1cb734623252115d1d5a34f6315010f41a9031333034040d18dc28e82bf403fd15b49d7d2893106817479e2a27a20f1a186e9b61262d108517df99d025b20ffd176e9736259111ae18fa89b724ce12721a45164f24b313e71a581823245f13101b001aa923fe123d1afa19e722a012121af51927223b12ba19f819ab21d6117d19ae194821a3115119e019f320551120199619b5203a11f318bb197f20fe10fb1879193320cd1067182519e41f74102218c118211f5110e4178318c51e101016174618431e510f6b16af170c1e320fc9157b17e31d3b0f92153b17b11d540fc6151918c11de00d3014d615241c00800015ed184e159f99d015bf1a1828a19b6518a218b229999d34168915202a529f0d0bd012242a7d9f5591c092df2927a0a1940898de29a4a04498ae9bdf2951a09e9c2da0fe29e19eb39de4a0e029ff9ea69e07a2e829f2a00da012a27c2a82a28da0e5a2d82a3aa3ada03da4a82a5da3e99f79a4eb2a69a2759d2fa4b02acaa1159b02a44e2a7fa0ba9891a4582a85a0059a26a4e52a75a0f394c7202e2c8d9e9d115e2c332e299cd11bdf30c930b09bea14d1322c3265997e1a0d34d2324196401d5034dd32be94221d8d34fd32b892a31dc7342733028f5f1dd0341d337b04c21cf73440336284cb1bf1342033e7094f1bf833dd317b0e481a1a2f862e040b051a38239f29b183a714d19d4627f203a512fe9ecc269104d715249d4e26d30d2416389b7825660cef175c981a2519116b190b8ac5249712d31a1a159a246712cb1a591823243612781a151940237312441a91196e22c511e419b9190922a4119d19e4199821d310081936194421c210ec18f918ec20b110c218c5189d20a1105618f11866204e106118af182b2017102e187818c71faa0f6d173618281f130f0017e117b31e8c0e25166417221eb60d7c158216df1dbd0d52155216b41df30d3615bf16bc1d210d68145516201edf086a11cd13121c00808702fd8846177e9a1390ca950f280c9dd49031957c295c9e61940a99ea29a19f1498719a2f2ae1a0d39b479e2a2a68a1199acf9d3b2ab5a16d9b5d9f5d2adca1a89c40a0962a86a2339c14a0b22a99a26d9ddba09b2ab4a3029e34a1532a69a48f9e41a2962ab6a32a9e29a3a12a8ea24b9c2fa38d2afba1db9aaea38c2ab6a1479b11a4802a41a1139c95a4e02ad5a0d19c4da4c42a1ea1dd9b8da29b2a199fb08bee16712c169d3292952c052fb89d95192e314531da9b2519c233ac32e798211b6f34523335982619b134aa336596e719be34fa334194de1bd234c7331f90331ce834b733ce911f1a9f342633588ea71aee31de30878d9714a429c82c848f0890c19f0f28c403de143aa0f1270c0a55171d9e1c27d1093118409c9026810c8818fb9afe25780c7818d8987425670c4c18d8952a255a0c9118be90e424b30d9e18a9094a24ba0edc189a120024350f13199e156a23c40ecf187816fc22c60e8d181a175922400dc117a616d1211d0d471717163621da0dae169615c820a50d471637157620330df415ab151c20ea0bad156615d31f440b74153215881f390c4215f214011f7c0a9314bb14b41e7f0a04149c14391ec30a871365139e1dcc0ad112bc12fc1c120b3112a514321d5f01a902b8833e1caa97648c4e92e921e79868900693b5218b9d9b95da961b29aa9e1696ef98ff298d9f0d988c9b342a6aa0269a8a9c782ad8a03b9c229ebd2a50a1d89b849efd2abca1ca99f59de12a90a1cd998c9ead2a87a1b3984ba07c2a72a2c29d54a2a52a85a3659d31a2b52a31a3cc9ddca2892a16a4929c84a3472a88a22e9ef1a3892a1ba34e9e5fa45d2ab7a1c39db5a4be2a4ca18c9bcda4c72a5fa1e1981ba4792abb9f619831a2242a099ed316e11c1a2cfe9ca412c92bd42e079b101be43024315c9a4619d133d932b799bb18ab34da33c6986c18d3340f346a99d018e934d133a096281695345e3336997617ec32cb31a490061c8a2d472e8d909914121f7129d78962167c9e0d28f683d0198c9c8f27cf837818959c7b276d848418cd9b16272c04d0184a996f26fb83ca1833982026b1838f186a94cb257503a518bf9018252603441794896624fb02c4162c891424cd028816ea089a23a9024016010f3923b30704168211ad223e07f5143f113b22bf06b114ea10b7213d066e149710382101062e140312e320c0088614a9119920a2085b146011462053081f147b12d41f3808d8133612811ff1046b12e411f51e41054f12a811861e5b0507115811291eb101960fd810961d7904a10db1108a1d760ac0107c130d1d0080788d4a91e7159a9cc795ea991128129e2a99b49b8d29009f579a8d9ced29ec9fd39a799d3b2a41a0019c4f9e6c2a8ba0589bf89d8f2a1ea1789a2b9e9e2a60a1fb9b969ee32acba1249cbc9f232bcfa13e9c56a0362bb7a1359c15a1032b8ea1359c20a1e12a6ba12c9c81a1c92a88a1409c05a2bf2a7ea14f9c9fa2c52a2da1509b93a2a02ae0a0299acea25e2ab6a03e9a2fa39f2a19a0e598bca3882a6c9f2f97f2a2332a009e489748a2552ab89c1892438f182b5e9c78178128bf2d959bcd18272f7f30069ae618e13144327699c619f1320d336398fe18d4329e327c97cc18a2318c31b994c717c32d0a2fa49187192e25da2a3190a7158798a6286f8d83198f9e0728b1907318759d36274e921515a89d5727978f5416199d2d27398dcb15269c6726868c7c16b599a72528892c1676983825de88df16cb96c42403834a15c4944c24d5821415cb8f0524b382e115928fcf23a282d314e98871237d0295149c08d822498224141588ef212182241274074d210582f411380722210d82d6110907e420fd81a811ca069d20da814f1149064620a581780f97056d1f8081bd0c0805861e71846409bd84ff1d79845b09a184dc1d628449099284c91d798440097404801d7e8140097c04d11d9c895c837e84d41d0080fe8cb28f130cb29cbe987d9cda27789fff9bc69d7e2921a0e89ca49ecf2976a02d9d199f112ab9a04b9de99f302aeaa0099da99f522a2da1499d0fa0892a6aa10d9d4ea0c22a8ea1ae9c7ea0df2ab9a1219c3ba0f22ad2a1229b3ea0c72af0a1309bafa0b22ae2a1319b1ea1af2a55a28e9b30a2d62a6da25a9c37a2ab2a98a11a9c43a2362a4fa1049b4ea2112ae3a0139a84a22b2a61a0f9980ba3302ae49f8e95d6a25f2aaf9e7a95cba23a2ac39d3c9719a3cd29569dff962ba21e2afb9ce0118d1edf2bfa9b4a12e628c72d6099cb8b442c392f6b95a918242ce72e2195a5188329622de0950c14f322c82a5993de187798bf28969342151a9e2d2803976f15749ec9270593cc16779dd7271592be143d9dac265492d114c69c98261d92a6141d9c3b2658915f14ca9ab725f890251487995f25638f9e131b99dc24c18ece12b4975524408e68123797f423c98d0e12de969223328c09102d95fa22568d9b0fc6946e22818e480c7a94e821838e6e0533944f21368e3005f2930521f98df7849093ad20988dc5843f937b20318d8e843b942f20c58c8b8a0094e91f658c2e8a1c92621f3e8ceb8cd391e01e528cce8ca191a61e348ca98c7691721e2a8c3f8e0090121e668abe8f0691121ee48e2a923e94291d00805e8e2190cd0a329c2999fb9c8427119e889c069e45296d9fa79dad9fca2943a0a79d2da04c2aaca0679d0fa06d2a19a1a89d41a0a82a75a1629d78a0d32aa9a1159d5da0062bbaa13f9d8aa0202b9aa1339ca5a01c2b5da13b9cb4a0ea2a4fa1549bc2a0b62a51a1419b22a1832a5da1249a28a15a2a71a15a9b9ca1562a60a1459ab1a1542a27a1469a35a2412abaa04a9a4fa2422a4aa0459a31a3372af59f419a45a32e2a099fe29860a3d4296e9e239544a3be29da9de60bbfa2a429919c361208a2b129659b25172ba10c2a21995212e59eb92a7e99d311229a682a379873118f99b5291b9819161f9b9228ea96f419e59c9c281196da18b69e6f281f97ef18779dd727e8948616229d3a278c942115ae9d3c27ac95d914059df026ea951412c59cf7254b95ab11ec9b5e251294a113ab9a0d2538925e13dc98b82437901913ee978d241790cc107c973624ad90490dbb96932328917e866297e2229a91a48c0c988b229791608fb29718224891eb901a989c21cd90a090a0971a216890a3912997af202c906191cc967220da8f2591759622203f8fd6905e959a1fa68e889006951e1f9a8d4690bb94b41eca8d2e90ef93551e068e2390c593341e128ee9907393f21d9d8db1904693151ee58fa792b1942d1d0080e28d7390a10b519c129b769d2d27b79eb69d7a9fa429c09f039e51a0b92959a0d89d49a0fa2981a09c9d2fa02b2a94a06b9d71a0792ac1a0bb9c6ba0952aeaa0759c4ca0bf2a0ea1959c14a0c92a13a1289b2da0da2a03a1369a54a0d22a14a14f9a7aa0dc2afea0379991a0cd2ad3a03b99a0a0af2aaea01f98a8a0882a82a01998a5a0502a60a0e89511a1072a12a0b895fda0bc293e9fb29255a17b299e9e6d8cefa06029d19d7b1588a045292e9de4188aa04829989cc11954a00929149c3d1a4b9fa52897997e1bab9d8b285b99321af49daf2899995c199d9ea828bb983819699e6d2836982a197c9d5028d996ad1a139dfc27e6954d18609d6c2728961f17639d7127e597bd16b59c21276a960d15719cba26699512157b9cca26ce941810c79c7a26a6940409589ce225d894ad88bb9b2325b794788e449bd4240494e78da49a69248e939d90d29a05241e934a903c9a33235b938291a99989221c93b19251990422b493bb938d999c219e935e94c3993f218a92ba940799f9208592769420999020dd912794b69819202c915c945498881ff0902d948797f51e529006943297a61e3f905f940297791e51904a94d6962a1e53903594a996031e67907a945e96bf1d078ff0932795a01d6d8e0f907192851c0080db872a8d5f0c139d199cf39db627e09f639f20a1bf2936a0b69f20a1212a6fa0499ffba03a2a80a08f9ecea0392a7da0d39d62a04f2a98a0119d3aa0612abda0389c09a0562acba0e39b279f842ad5a0189add9ebb2acca008986d9eaa2a7ca0f992cd9d872a62a0bb8c279d7e2a48a02e13709c682a28a04313829c332a01a01516889cec29b29f0a16829cb029469f26134b9d8c29c39e01130c9e4a294e9ed612f99d3a29a99dc712b69e1529489d8c156b9f0729899c8e17449fed28e09bb8182c9fdc28a69a941a209ea328d199631b8f9c83286c98871cd59888286f97d71c1a947c28ac96ca1cf8935b286394151dbd933c28e194541c34961228a0951d1b4c99b927ef95e41a4499d3277b959519e49845278b94691ae8982827df921d1969986f263d930118dd97bc2537936c165f9745254d94ae0ede99092503952b8ee69a962475953b948e9b2624cf949a950c9c6b23da940d96a09bd922a4944397a79b6622a0949f97b79be9215894d897b09b6a2115945e97379bf9203d94a897d69ab62013946897929a6e2072931f97449a39200f93c3969b99de1fb392ce954e99721f9992eb959698b91ec9929f9545981c1e1592e194b297c51df1911b9538976a1d6d9004946d957d1d4990ee930e966c1c54873b0740115818329ef99fd0a06128b39fd09fe9a1032900a06fa0efa1862962a083a01ca2df29aaa018a0e6a1262adba0ca9fb2a1812aeda0269eaea0a82a13a1f09cd39fc32ae8a0f89ab39ebe2ab3a0fc987a9db52a92a0de922e9c9a2a5da0b10c0c9b9b2a2ba0fb159b995b2a1aa049181898302ada9fc11afd94152a8a9fd01a3498f0294f9fd21a3898bf291a9fbc1ade998029749e861c28982529ba9d051df294ff28ff9c761d1198d5284b9c4e1df597d3284a9b9c1c6499ab28949a7d1cc29a8d28fa99e61c9f9a5f289298c61df99b4e28a5962c1e3a942e28da95281e818d2c28c794ff1d708d35281b940d1e630d40288692621d498d41286793d11cb39336289893e21bec95c5272294a219e7982727bc94b318bb99f8268495e115099b282601963b0f169cc0252c96db8eaf9c722578967291c79c042597969294d39c9a242c962c96e09c5424e0958496c99ccb23be954a98129d2b239995da98099d9a228c95f2980b9d45224a95ee989a9c7d21b0947d982c9cfa206e943a98dc9baf203c9409987c9b5e202294d6972c9b2f20129418988d9ae11f0894ed97459a8a1f1594a997089a411f1d94de97c899a41e1694969799996e1ee993a4974a99131e9992b29610998b1d1093bb97a899361c00003f146516c6135a9e579fd7a04d2800a1aea0f3a2ed287aa007a145a3e528d1a098a1c3a3442923a1fca126a4bf2948a111a242a43c2a33a157a1a4a3a02a12a1dd9fd1a1022b12a1e29cdf9f5b2b98a02598089d4f2be89f18166c8e2d2b4c9fb51cd419ec2acc9e541f7f1d802aa19e5720621e032a999e5620441f9c29089eac20511f5329349e0720c31c08292a9ebc1e5e18dc280f9e661dfb8ea328b19d4c1d2d957a28f39cc51dc00e2b28949b5e1ff314f027c6992220d6148e27b8985c20fb177b273b989e20f117a5277c968f20e817cf279694bd20c61708285893a320501920280493b620861a372846918d20431a382810915b20441b40283f92991faf1af927ae913c1e0f1984273992141d51120a27ef93fc190397d326ee95e50f679c5026a9978a95319eb6259a98e0988c9e4f25ec98379a399fdc24d298c99a159f73245098b89aed9e1124b497089b019f6023eb96e99ac39eb1228796c79a469e152240969e9aca9d7e21e5950b9a459de52082959d99e69c73204a9545994f9cfb1fef94db981c9c211fb494d298e09bab1e7b946198379b5f1e289442980d9b131efd9333989f9af51d2193ec97399ab71dd592f497f099b81d6e93ef97c999921df99166973f99bf1d1e92db954098301c96068316ef18cb17c79d07a06da1ad273da0b5a1fca38d28e29f32a178a380284ca08da1d3a3ca287fa03aa233a43c29e3a04aa261a4bc2923a10aa23ea4fd29e2a094a0f4a26d2a5da0069d5da0ad2a869fc48c099b482be89de51cfb196c2b399db1205120372b759cd721d721992a6e9c92225822d029be9b3323ca22f928b59b292347227a28729b4b239c222928599b85221722c827b89a68221e217427809aa52127205227369976213e1fec2609989f211a1fca26f8958821321e81261b94cd21011f492675900b22fa1e4226ef068b22bd1f362639104323fc207b26b411a2239021cf2607105423b1219f27b20c9222cb202128e105de21ff1f6428278f74204f1c6e28e791651e47183d283e95b61bac95df27da953815ec9b542748971490a29deb265e981098e09e442689986c99769f9825bd989e9a989ff424eb98789b769f6f240d99149c789f0024fb982e9ccd9f4e23df984b9c8d9fb022c298649c469f1b22c6984b9c0d9f7e216498399c9e9e0b21f197db9b1d9e8f201197f59a759d1e206d96789a1b9d871f8c95159abf9cd71e4495df99639c641ef5947599429c331eda944799f59bdc1dc494fd987a9bb71da694b498d39aa41db4949a98549a971d12942398f399771d35944198489a581c000006150a1934157a9e39a0b0a1b12642a024a248a4b12779a0b2a296a42b2889a0f6a2d1a46b28f1a08aa322a5b52843a1b3a345a5ff2833a1c2a2a8a44429d3a0daa117a49529e5a0dfa005a37d2a16a0b79abc9e942be79c3e208e1ff22bec987a241825e32bb395c525bf26f12a868f37265c27b0294e923926142779285494d72523262f273b9adf24eb24ed25ed99e923942380251899f522f821222579982922fa201825629822227a20d424af971922fb1fd0248c95bf22e520c8242293ba234122362502885824962367255e14c5246f24cd25ff163425da246e266118742505253f27ba173f25d024cf278016d4248724472822102824332363284d94732187205128b395631d68192b2879967b15e198cb271d9821932b9d14273199d498d09e52268399329c48a0b925ca991a9defa0fa24f299a19df4a058249799ac9dc8a0d1237499799daea046232999349d69a08522a898c69cf49fc1215598679c5f9f3a212a98439cfb9ed8200398129caa9e8720b297f49b489e4d206597b49b149e1220b296659bcd9dc31f8496ea9a649d461f1796a99a269df21eaa950e9ab59c8f1e7d95be994d9c0d1e23954c99e59bc01db1941699679b731d819403992a9b471d3c94e498389ba71d429475980f9a641c0000551400191d08f09ea3a1a9a39e2649a07ca30aa50228b9a0fea33ba535281da100a46aa54e282fa11aa47ea574285ca11fa492a59b2890a10aa488a5b428c9a1fba397a5f628f7a216a4bfa5a4295aa3ada2a0a49a2ac09eb793d699df2ba098cd243b25ba2c2e18fa28e529b02c1c20f32a472c2a2a451ffe2a252c8625711c2c29db2921235a1846277e281920838fe72555264d1de5918c241f24651f719629244122e51c1795042427236b1b9091e42383224b1b3f0ec62402223919ca17ce2566255216231b44279026801bfd1c05284828fb1dc01d7328ce283a228c1eb0282d298325f41d902825297e28011df1275028a6295a1aea250226a3297a138222002219294194391c881552284699c6948d9d8b27c49bce9ce6a096266d9bed9ceba0bd25b59a789deda0cd24099b439e5fa166244d9b8b9e8da10924fb9a659e6ca16523bd9a449e28a1e522639a179e05a14a22fe99dd9db6a0ef217a99999d79a084213b99509d35a03021aa98f39c979fb5201b985d9cdd9e12206397029c519e541f77965b9bdd9da61e3096189b799d5f1ed095c09a3a9d1c1e7595909a2c9de71d2995389add9cb51df594079a7c9c4a1dd9949d992a9cef1cd7944f99989bc31c0c94eb98ec9aeb1c099352978599781b7a15721d401f4611769d13a088a17f25c1a033a3e1a4842700a1f5a35aa5bb2734a10da480a5f22754a12da4aaa5f3276ba14fa4daa50a2856a155a4eda50a282ca138a404a609280da160a46fa62128c7a2eea48ba6f627a1a11fa41da6892706a1aca423a6ea2a429ab323e923a42eb426672f9f302c2d9a274830423142a23222532c1a2d96aa0d15b5259f2690a8079b561e251946a5cf9c428ddd9be5a1569f4698309ed69f3c9d7a99daa0549ed69ca193ce9c26a04a99dc1da41844a216083a232a2392a4e91af8265027e1a53a20d429d32aeaa630234f2c3a2ddea36424eb2c242e432337220e2ce02ca92aa71e3529f229212c0207502452230b2b5b9bab17739b9f28459c259edca16a277a9b439f73a2c025419c2ba05aa367258f9b5da067a30225039c66a041a38624e19b0da0b4a21b24509be79f69a29023ee9a669ffaa1eb228a9ac09e73a154222f9a629e31a1e821e599079ee1a07121a799b59d9ca0ee203b995c9d3fa08c20f898179d02a03220b098d59c889fb61f6d98879cf49e4a1f1b98429c8a9eb31eaf97029c199e661e9d97d19be39d081e2e97659b909dd81dd196519b369da11d6b96f29a119d561df695749ac99c0d1d7b950b9a959cd51c9b947199be9b9c1c1b945f98429a881b000055158a1847116a9d1ba0aea1d1242ea0dba2c8a494267fa0a7a31ea5b326bfa0cfa352a5c526e5a00ba46fa5ea260ea12ba4a8a5fe2614a139a4b0a5bf2649a162a4f8a596268da16ca420a60926f5a011a4daa5272581a068a2c2a4c3229a9b289d3aa0351e42912e899694011a5606c0152c13561a7087de0af9924b1eb59a669d17a02b22bd9da6a01ba34a24f79edfa1bda4ec2421a028a385a56c25f3a0eaa32da6112656a1e7a318a618260ba07da448a7272773a06da59da872284da042a6a3a93729e9a0f9a7c0a9282a7d9d7aa419a6422bf7211028e626da296e249b2ac7294626ad1c61244a1fe62ab19f93a5aca82e2b629449a4d3a60e27a29987a1d2a44c24249d03a175a44e247b9b4aa0e9a3a2234e9cb7a029a49d23579ca9a0c7a33a237a9c77a077a3ac22669c4da02ba36522569c38a007a34122559c15a0b6a2f521219ca79f41a28a21379b549fc3a13421429add9e63a1c320d599779e12a17720ad992f9ec8a03320a099cc9d74a0ce1f9f99729d2fa07c1f3c99f19c839fb51e82986f9c829e121e6198259c309ec31d6098fb9bec9da41d4098aa9be69d9f1dda97b19bb39d901d4f975c9b6b9d491dae96039b249d241d1996b69af79cf71c6995d3992b9ce41c6c959498309a951a0000e8150f191b0e989e0ea12da30a250ba044a3d5a4c3257ea0e9a33ea5f6258ba009a463a50b26a8a004a46fa5ed25b4a015a48ca5e025b2a0d7a371a59a25dda057a338a5112546a191a2fba47a2473a0e5a05da3cb22ea9c549eeaa02e217f9a469d4aa00122c49ace9e6ea017244f9cbaa032a26e25d19ecea270a49826e7a03da4ada52d270ea189a46fa6552710a1a6a4caa64c2711a1b4a4d1a6062700a1c5a4f9a6de26dea0d3a4f2a6a326dba0c2a4f5a65926a6a0a7a4b8a61f2695a094a491a6cc2540a047a432a662251b9f36a321a5e324939ce5a057a30024ff95749c319e57214f823292b196b61d398a3e93d09bcb196597a19b85a05b1a6e9c74a0c2a3c91d219d4ca137a42621bb9cfba0ffa3bf21749cbea0d3a3cb21889ce9a0f1a3c221669ccfa0a8a39b213a9c97a084a39721209c73a026a36021e89b3da0ada21b21219b819f0ba2ad20989a0c9f85a16d20f099789e2ca12120cd99249ec9a0ee1f9f99ce9d85a0761f7b99869d46a0321f4799449d18a0dc1e0899169dbf9f781eb698ea9c999f581e7998ca9c439f311e4898979cf09e0b1e4d985e9ca09ee51d48983c9c399eaa1d2598089cde9d541dda97669b689d061d6597189b0f9d951c0696399a8d9cca1c2b97dc99fa9b8e1b0000c514a918ad0d169fdea124a4eb2466a0e0a32da5012677a094a317a5b9253aa023a3d8a474253fa005a3baa4402519a0b5a29aa41c25e19f4fa267a4e524349fa9a111a48624049e00a12fa30f24209d91a070a2a123769dd9a0aaa221249f9d35a136a3bc242a9e0aa22fa47925c59ef3a2cfa42e26be9fafa35da5952634a0f2a3bfa5a72661a01ca4e6a58a2660a017a4eea54c2655a011a4eaa5192641a009a406a6ef2528a00ea4fba5b52522a001a408a69425ea9ff3a3e6a57425ad9faea3aba52825539f7ba378a5fb24fc9e0da333a5bd249f9e91a2c7a47d24a59deda13aa41824409c9da0a7a20023eb999d9e78a1c521a8987e9da6a1d2201f99e29d7ca13c201f9a2f9f22a2c91f169b2ca0efa2701ffd9b46a004a3711f039c24a0dda2961fc89bc59f6fa2f51fe89b899f2ca200207d9b6d9ffba11a20249b839ffca11b20d79a639fdaa11520ab9a589faba10520419ae09e4ea1cc1fe999699eeba07d1f7e99019e99a0f61e6c999e9d47a0991e27993c9dfc9f201efb98eb9c7f9fdd1db298c39c409f871d6e988a9ce49e5c1d3a985a9c9b9e3f1dfc97339c609e2b1d6297169c0b9edf1c0f97d69bb59d941cd996449b4d9d591ce996109bfa9cf11bf196cd9ad19c271cd8970f9a529c401b38a55e9e509d9a181f29e71e8d2117260a2d972268222827a42e6a21d7220528c62fb72177233e280d30fb21752327283d30c821e4229a276c3017211b21f0246230a8205e209a207330e62001215a1d8c3050204722d21bce30f7a3aba47f20732d76b252b414275831881d06283a2415314f1f392c27274d2eda1e832d6d285c2f681d252f282ad12ed61d3f30132cac2ce8206e30c32cb7282321b52f532cac1f3320392fa82a0000111e0c2f242a0000941d3f2f6429e2109e1d312f5a29da14c11b302f9529e5165918712f61293018fd19f92f082a1e1925193730722a431a561a4f307b2ad51590205630302b2513ae201031412c701c46214e32fd2c181bef21cd31db2cba1a49238630ae2bc8182b21302ce428830c3c9c3b204d28439a46a38ea4d52585150e1f9120cf22aa191a20c220dd207d18d21e6d20bb203418d91e8420ee20dd17a61e5620be209e17501e332098204117071e0e208b201b17c11dc11f5b20d2164d1d151f14203f16ef1c781e4a1fc5156a1cda1d9d1e9615521ca61d3c1e56153c1c8e1dfd1d64152d1c741de11d1315071c3c1d821deb148e1bd21c121d6614d41a4d1ca51c7414b21a331c6d1c91149b1a311c6a1c7f14531a231c3e1c6c14731a1b1c1b1cf3124c189419571b38970d8d8f91d00b3c274b203322e727b42b11216d2190286d2d551fb8209327e92eb320ca21e4281330a720312149296530421bab183f285730639cb89fa5259030a69d489f7023b730119cae9d09209e308da012a2e01d7f3028ac87ad2c1e11300aaf9ab01821ba3006a9cfa967253731609c6625ad254531171d202c15287c304b1f072f492a682e0f203f30482c212bbf21f230332d9825cc2034312b2d2919b4204531b52c0415c31e5e31d22b9814891cf631f22b41180f1d2c32d52b9e192f1e4632f62b291a8f1f43327a2c1019be1f8a321a2c66194a1ebb32482c021cd51fe232e92c2c19d31ee632342d3818d41ed1329b2d6c17431f0a33c92d4518fa1d29322a2d6b16f41cca2f452b81142e1956286b271a94b49f47a12524d4104294a399d422c117961c281d0623d9189f1f87204022fd18951fdd20a4219d19e01f0621c9213419351fb7206e2148187e1e3f20002148171e1e02209e202c17d71d991f7d200817891d631f5e209e16291dae1e2a20ef15c41c221eb01fb815631cc91d411f2d15111c691dd31e0915d11bfa1c761eec14991bc71c341ec314611ba61ce61d9614f11a871c9b1d5314b21a4c1c321d2514671a101cea1c34140b1aaa1b851c1b139019411b851cbb1073163f18c41bb19686949d93210b4e21a31eb1207b27f127ec20f3206c28212b6c1f7b2082288a2dec1eca1f9728522f391f681f03294e30431eca1e9528bf30071d0d1d0c28e9304c8c418da7263a3188a054a22725e2307ca51fa7ee24073171a954ab2625f230e7aab7ac53251731cda8c6aa0126a031a7a130a0f427ce30031dff28ff282b304b1ebb2d642bcb2c241ee42f552d5b27f21d2c312d2edc1d25217731122e5c108921cf31ee2d65100d20d731592d9c1733219c32252df41918222a33962d541966213533752ddb1a47216c33202e981b9b21ac33be2db1195921c733342ebd184f209e331d2ee017c81fb5339b2ee4145c1d8933c92ec417291fdb33132f9a17401d0f32f02df30ef288942d232bd88e329bd82079270b14d614da95572593158f18571148246c183b1e301ec8231418401efe1ec3229718b41ef01faa22a318c41e25209f2226184d1e0520dd216317ca1d7e1f4a2144165d1df41e05211616171d861eb6207b15901cf91d38204315521c951de31f01151a1c4a1d4d1fef14f71b111dff1eb814601bb71cba1ea0142a1b8b1c551e65149d1a2e1c061e4914641afe1b9f1dea13191aaa1b641dc8130c1ab21b1c1dc6133b1ab81b201df613351a021c281d73133e1a0b1c751d84113218c7198f1c0080c5938792400831151b1d2920ff274120e61faa209628f126831e54206728e62a2a1c8c1bb028532dcf1a231ab1284e2fab18ac1a86288a30c911b38c7228e430119b249d6a282c310ea0e2a12128503101a309a5b527663126a5aea7e7275f31dba63fa9d628513171a569a8cb28503193a2c4a5ef287130cf923b217029db2e2a1aa42a932b702a2d17ec2d292d14219e1eab30a02eb499c9204c31452f9a91de21f7318f2f1b112f214432aa2fa616eb209c32f82f8a1929222933163044197d213d330830901916216e332330b4193a21b5332e304f1a4521b7332230ae19fa20c93337304f181920ed333d301617a61def331730b612d319d433f92fbc14a61aca31732eb6132e18742c4a2bae142719f61d47276e11628903a0bd25e4137d14369af524bc16541cb91890247116b11c1d1cc8233017b41d4f1e3323ce16a31d8d1e7b2243164a1d0b1eb921b9160b1df91d8c2127160c1d051e40212d15891cd21de3200c154b1c331d89208714031cd61c39202c14531b9e1ce11f54142e1b761c9c1f4f140b1b571c671f4214e01a341c2b1f0d14a51a331cbc1eba134d1afe1b681e1d13b319741bfa1dad124119da1a931d94122d197c1a5c1d8812d3183f1a2a1d32128418b119201d6611f0165818a31c0080070cbe041e0b9696871f662175284a92bb1c211fd6289a1e431df61e4f29fa25b51c561d8f294d2a241b4b1de329242d05129e0c9729392f439278988c293e30219a569da6290a3150a05aa205294a3138a2aea400296f31c8a3a9a647295e3136a43ca7cc295431f8a2dda56229e8305ba09aa48f29ef2e079b33a19929552c20192724f12a8a259992e22abd2c049d2813da2eda2e839e971d1531e72f9d9cbe1d113259308e98f81d653271305d8f431fe4328b307d13db206233b23029156f20ca33b230b3151e200834cc30b115a71f2034bd3089175f1f2f34af305d169e1e3734a930be14f81c4d34cd301d14071a4434a930371132110e349530650f6b101831932e340fdd145c29812a8a10fd12b69c2527f4137712419eb1259314e91703992f25ed14731afc10ba24df15371c401a2f242916ec1c911cb1230e16c81c061ded229015a41c4d1d85227e15a21c471d28224e15421c111d9f21ed14261cdb1c24219414761bd11cc32071147f1b941c6d202a141f1b581c33200b14e31a591c0620ab13de1a2a1c881f0514901a191c1c1fc113271a9c1b721e9413ab193f1b231ed4123919a51ade1d4712eb183d1a9d1df1119618d719801d5a113a1890193d1d5e11e017ef18201d6d0fe115c1170d1cd9802f142713c50cde98b41c7a1d4928da9be01cb81e61291a9c9b1cbe1dc729a313c019351cda29b023321b2019cd2909296519d415b829472c4c158093e629e52d05989b9c282add2f619e30a11a2a6230bfa1ada4eb29ea305ba3b5a5dc29da30bea249a5102a473044a0f1a3db29bf2ee69fa7a38d2a7d2b00a0e1a4042ae32588a15fa5622a73926599d021e12beea1ba97d92b952d63a0261b3930a82f319fe218c8319e302c9c1b1b9e32f3303d98531c4a33e1308590931fcf331e311606cf1f12343131630ff21f493452315111c01f713460316c1532208c344d31a715d51fa6344a31f714df1ea7344b31ff14e71da13434318815301d2b34be30e71401193930ff2db0117e1aac259c294a146b19069dba2673134a17c19db1255c13b6180e9a4d251914a71aef8aee24ea14741c55187b2497166f1d551c48244416371d0e1d6b23fe14951ca61c69229114471cd81cd3210b14111ca51c96212e14f21bab1c532115143c1b6f1cf220db13c91a231c82205b135d1ab21b31200413f919291bce1fad129c19b61a501f97126f19c01a001f65124c198b1aa01e93127719bd1a811efb111a19421a561e9011c218131a001e6b1164189619cd1de81000184319771d4410381795180a1d9b0c91133015a21c0080810a08098a0e449aee194e1b4528139d8f17d918b129fc9d2e183819202a489e6414e317e129199c428b878cd629a41bc811b28ce8298125ca1a208d202a63290b13bb9ac72a362c1a9b6a9f962a5e2df49e61a28f29282e99a010a4312a172e1ba144a4662ad92c2ba2e4a44c2a982abfa131a54e2a97245fa225a7da2a2d9fa39e3da5252a56a249965c9fcf2a10a1cf8cb024532c73a08e9abc2c552e7e9fd90b21315a30779dc619b8322831149b091ca93361319599ca1b25349f312796881c5034b1315c93681d9e34f131fc8fc51dcf3408325286d71dd734ed31d206eb1ce534ec311805cd1bff34f931980f7f1ce934df313a0ed51ae833dd301891ce18162dca2ca38dda141d8ea2282b0ef2176f9ec8262c115d18589c112666100018009a7b252b103f18c9970725fa110419ba907b244313471a20152a246813151b7818d223d7133a1b1e1a2a23c813081b4a1ad12229138a1ae31a4522d0121b1acf1abc214c12bf19701a4e211e128f19951af02097114419301aa42054116019e7196d2035112819aa1940201e11e618ba19da1f18118e184e19451f83100c18a218a11e241030175c183d1e6c0f7a16c417d31d4e0f57169617b11d200faf154f177b1d3f0f08161d18601dd40efe14d2160e1c0080fd12dc11d00ba09b05156d14bb28419d45146a15c929a09e910bb38c472a01a030985499412abc9fa796899a212a1da02e8c0194a22a6e9c6b923f9dc72ad219da99a59e992ae023539a469f5d2af625d29c25a0712ada27f69d39a1282ba427509d1ea21f2b1924e69d9ea1582a4e0de09d8ea2682aa19ee09e5da4c12a88a1b19d34a5882a28a2469cbda45f2a16a2329856a2492b9ea013928c24972c17a0649a242eee2e6d9e550ce6310531e39cfa0b9033db31059c801a453427322099b31c93345d321098541dc43494323d961d1d0435c03267937c1c2135a6324a8f111c2935b132bf85751b3e35b7325c058c1b06355132970e251cb9327830c985f21ac729632bc38a4116889a5927bd04e714929fcd2668042b16769d4f26e30a8916b29b60259a0c33188c991125a410b119c690a0243113521b7f1591248c13fe1bd51852241013ac1ba4198c234112cb1a1c1a9f228811421afe19ed219a11c819fd1955210f11251955192921a11009191b19d4209d10dc184b197f20921061180519442043106f18ba1804201a103a187c18721fc00f04184518ea1e4d0f2a170c188f1ecb0e4f169917281ef40da815b616c41de60d86158516991d0c0ef1145816951d220d1014b614e31d8f06fa0e7411861c0080bb0134862c09549c839094947e28879d6894af95b829ec9ebb967899302a34a05f99199c802a14a16c99089b832a0da27598bc99552a03a32b9d3c9fad2aeca1629f1ca1252ba8a1939ce6a0342b5ea1db9b419fd32a5a9c5b9d44a1362b429d629fc4a25e2beca095a00ea4492b0fa371a0baa4e22a96a4be9f8fa4892af5a24f9e0fa5792b83a28e9c65a52d2b99a1c59da6a5f92a58a1409bfda1022bc4a11695da242a2d029f3995512f30303a9e1415d732e331c29cd0167e34b132c69af416c034fc32719b1217f6343c33de9963192a356f33bd99371b453566333894591c6a356a33c294e21988354433728e4a19eb3457325a8f001a8a30472fcd951893dc1e3229b590be0911a09a278904f014b99ea826fa038217e89c44260c0a3118199cba25c60c9918e5994625910c6918c2970325940cd4180391db24e80de818060a4824e90e241912130624af0f67190f16a823200f0e19d216e522f60ebe185d174d228e0ef417d516b7214d0d6f173c161821080ed416ae15a420b90d5d1615164f20500d0816b515e51ffb0cc0156e15831f930c8915f415441f570c4f15a915be1e180c9d146815711ec20a0c14aa14fd1de20ab2136f14b11d000b5a122a13071d260c6f12f6131c1d4204660b4c0dd61c0080ae8c7b90d9197f9a1792369518260d9e7394e297f2295e9f399868997f2a33a049990a9c902aaea09e9a869dc82a6ba11d9d4e9f162b1ca2c89c149f502b51a21d99a69d342b17a2369aa59fc72a77a2569bb59fa72a28a36d9effa00b2b5ea3a3a04ca42e2b0aa422a1a6a4f92a1aa5e49d33a4b62ac1a3f49d2da4912af4a2e39d9aa4cc2a42a23d9f19a5f72a3ca21b9cefa4f12a29a2069976a33c2a41a0a7991aa1602a31a091923128432dcb9db29217309630669cf416db337b32799b321206358e33e49947174535b8333c99ab186f350c34f2988518a4351534a397a318bc35193416975918a435ba33de94e21ccd33a931a498e212342b9f2c368dbd16ed9c6528ef83c11a879da3272184cb17af9c18275e849418e59ba5266b04fd1871991f264184e9185298d225f283ca189d949825be031d1929911c257503d217fb895824500307176109d1230603b4160e095823c60259162e0fce22fc071a16a21169227607de156311fe2102079c151f1388216b095315b21233214f0908150914c420f708ad1486137120e108761419133120660a2f141014ab1f7e08fd13ca13591f520890125613c11e45056411b711451e2b0535117b11031e9d010410e80f941d7001040ead0f6a1df20850113313781d00800e8c1f8ead06429d0a98849a5f28de9e8b9a329ce929c89fcf9ae79c2a2a50a04b9bda9d812aaaa0519c239ed22a12a1ec9b729eff2af1a10b9c099e0e2b1ea28e9b079f2b2b8ea2879a1aa05f2baba2cd9b94a0502b76a2669999a0402b87a2ba9b75a11f2b77a2ac9be3a1f42aa0a2d39bd6a2e32a5aa29e9c78a3fd2a0fa2da9b72a3c12aafa1ba9bc1a38c2a7ba1989a06a4af2aeaa03699aaa4c42a7fa02c99eca3432ad19f0e9c7ea16d2af39e5b975326002da59f748c0930ad30b29b8a1821342c33f29914181e353334869a86197c356534b59905187d354534a398aa17a435273471963b19d93431332294ed190f30d62fff92ad0a9720f4292c91301998a072275b9007180e9e91273493b113329e72275e8f0415d39d002709902d16e29c5c26e68cdf160c9aa3256289ab16dc972f253c897e176797e2243683a11634933024e4822715fc8fbc23bc82f01523897623b082d814f4880a238d829a14b108ab22628245144008e92145826912bb0741212d821a126b070b212a82f4112407be205e86c611eb0698200c86751179063320d281f10f05069f1fa681680fa805291f9081ea0c4605821e9c849209e584e41d7e847009ae84a11d7384510976043a1d7a815e098e047a1dbe878803e504591e0080008d558da401509d5c99a09c7c2805a05b9cac9db4295ea0459d249f1b2ae0a0659d759f4d2a3fa1209dd59f762a7ca1719d2ca0b72abaa1c49d7aa0072be7a1829db4a0322b20a2a79de1a0452b4aa2019ddaa0222b98a2679c33a1e22ae5a2639c54a1db2a1fa3679cd6a1e42aa9a3a99c1ba3292b9ca3629dafa3302bf5a2369de9a3c92a85a2b19d24a4872a03a2079d2ea47c2a3ba17b9c41a47e2ab1a0739a15a4752ac09f119946a4692a729f319960a4902a4d9e4d9cbc1e8e2cd79c980ccf2d2230a99c1698de327132bc9beb97b9341f34a699111af3342134fe98d5185934563364991b19ee30c530e992851b7f282a2c8f912717049b59289e96271445a0132805947215359e77275c93d314f19c702606928f16939c872665914616689c4926ab90ea152c9aa3254790a915f5985a252e8e4615a998ed248b8da914b9965724028d50143096d223a38c0c14c99550234d8cd5112394b8223c8c73119c932f225d8d540f2793af216a8d2d0cbb923b21338d010c6692db201f8e1405ce938020af8cd70469934520798da2840e93f01f158c6c84b7928e1fa78c528a5a92261f648c0d8d1092d21e638ce88cd0918a1e438cc78c9191431e2d8c6b8e0f90df1d9e8a498e2b91ac1d0a8ecf8f2691ef1c0080f58eae8fcf81e89cd999469d6728d19edd9c449e7b2913a0129e11a0102aa6a0ef9d0ba0672a11a1ac9d3ea0a32a99a18a9d33a0ee2ad4a1c79d72a0282b13a26a9d49a0502b57a2099d79a0702b2ea27e9cf7a0662bf1a1809c02a1292bc5a1de9b7da1dc2ab4a1c09b79a1a42abaa1c49beea17e2adaa17c9c5ca2692acea1d39b78a26b2aa6a17b9ce8a2552a5ca1789c6fa3372af3a07c9c2fa42b2a85a0759c3fa4272a07a0209a1ca4d929239f009997a3b12912a0638c0ca19a29e69d700c9c98832a649d6512bb27142daf9a071a682ddf2f019bfd19052f2930eb976e17292daa2e2a96a518c626812bdb944c1a321ab028f594b518ad9d62282996171add9df2272d955c17929d672731969615ae9d66278296f1144a9de4263d9688147c9cb92525966d158e9b47255d9438156099e924cf91ff144d98a424a390bd14ac9667246690ee1254961624ec90870d099770232392c006a497d522ca9159863e975722b891928ce596e62171914f8f85979321ed90d88e029715217c9087909196a620429049902a965e200c901290d09505208f8f998f7295891f3a8e278f7494f01ed78d5b903194881ef68d42900d94271e118e3590f9930e1efb8df4908b93bb1d938cb5902e93741d0f8f3191f592c01c00808c8e108f7d01049d809b4a9e2f281d9fa79d589fbf293ca0059e58a0fe2987a0b89d3aa0292adba0889d7fa08d2a0ca1e39d79a0c02a1ca11b9d63a0e32a5ca1cb9c3da0f42a8fa1f89c67a0082bd5a1d49b97a03c2bdea1ff9bc0a02e2bc5a1d39ad7a01a2b8fa1da9a52a1f92a4fa1e09a59a1ca2a4fa1ec9a5aa17a2a5fa1e89acca1482a21a1d89a31a2082ac3a0a09a1ca2be293ea0419969a2882901a0029853a24129099fbd92dfa11d29409e650c60a23229a09e540c77a24429cf9c2d1530a1da28c899bd1c909ee028089ae118269cf0290d9b780cd88f502ab29a430c310fe6294999b511ea9673286898fa19d79c132826965e196c9eb82798966d18349d93272a983d188f9b0d271597ca163d9bc026fe946915469ce8263f955b130c9c8b26069508102a9cd1255a940809959b4c258b94ab88d19be324dc93568e539a6b243b93f98da59a1124ab92af90369a9a23e5920692ad99cb22899296913f994822fa92c0927699c921f992d993a79958219a925294d49800211a920694ec988c207d91789388981720f4900b943198901fd490c09342972c1f94903794e396ce1e749012943d97601e74906b940997321e73905894c796d21d6f909a946f96861d66901f94df95851d468e12920994e81c0080ca8872898e015d9e0c9ca49e672843a0eb9fe0a0d1299da0859f09a1262aa6a08d9e7ca01c2ab5a0e99d6ca05e2ad1a0429d0da0852a19a1fa9cdd9fa02a24a1b09c8b9fc72a4da1679c04a0ef2a59a1b79a969ff02a06a15198f19eca2ad3a02b962e9e8b2ab1a0fc8c719d552a9fa0088d869d372aa7a0110d979d132a89a0100d759ede297aa0068d489f9f293ba05f9301a06d29d69f1f934ca011295b9ff992a8a00329d59ee39207a1e028629ec59263a1d728f19d9a924aa1c028499d660cf8a0d228a49c5912cca0a7286a9b96183c9e7228109abc1a2b9dd228819a8a1ad09b4e28e398471cf09847282796ab1c26967527b2956b1c1e966b2780970d1ca5999b27f997d61a79995f27ec95cf19d097c426e694f71a0198ef266c94391a5a975e26ec93e11874969725ca93ad16ab972a25ae9409147b98f024e29448089f997324e694ea8d799a0b24d4941794419b7e23c494a7945e9b0023dd94fc95759b6c2285942d978e9bed218f9476978e9b8c213c949f97089b0c2114943f979f9aa520b793f1964b9a6b2079933197fa99192024934796b399a11fc992e5950799321f8c92fd95a498a41e1e92bc955398e41df191fb94b597a31dad91b8944997311da8907c9475961a1d3690c994bc96021c008014096b0ec612ee9db19e38a06928fe9f5ba0e8a14f2955a0ada042a2b1298ba080a013a2f829cea01ca0e9a1402afaa0d89e17a1b12a26a1039de69fd42a41a1339be09eeb2a46a12699aa9dd82a1aa1f0951c9dbb2abba0e08c569b932a73a07413d699842a5fa050164298562a6aa082185698202a6ca08118199aef2972a084181b9ab92973a06b16c69c7a290ea06e18be9b37298a9f2f16829ded28b69e1216799dca28e69def15479ea828639dcd15dd9f9b28b09c9d15929f6f289c9c7515919e33282d9c5015259f1728389bb519309f05288397411ee78dd6270b973a1ebc0d9e27c295a91dac0d8827ca930d1e8b0d88274a92ca1d5c0d9e275a92dd1d308d8a279692da1cde8c6027bd930b1cc392d526b2945e1b9195c026e594a518a2983e2673958514fd9996253496d208049c3c25c595d38e249cc824db956e939e9c7a24dd958095bc9c4124c3950096b99ce5233a954a97fd9c2f234f953898ec9c8a224e95b798e89c2a221295be98c49c8f21ca94a298579c102192945b980c9c9e2053946b98a09b5a2047944c98579b18203d943598be9aed1f27940f98719a661f2994cc97269a101f3394f797dd996b1e2f94ac97a2992a1e549446970899d21d4093609764992f1d19934398259a131c0000420e2212a909a99ffb9f6da1c328dba02ba131a3072990a01ca113a311291ca194a1d1a388297ca10ea23da4222a97a1a0a1b5a3852abfa1d89fd7a1dc2a72a1fb9c00a0312b52a15498709c502b53a07918b38e2b2b5d9fa41de71bf82add9e191fdf1d7e2a3a9fe41ff71d062a4d9f391f101db229989f7c1e241c5929cf9fc01d9218162919a05a1b7095d028e49fa0180f9cae28b99fc413a79e6128919f0e0d679f3128ed9ee10c6fa0ec27259ee315d29f4e27f69c501a3f9dc326379b5c1d319bb126a599fa1ebc949b26ac987a1fc294a42645978120b614c62671967a20af14ed261793be209a1ae1266591dc20de1b10277a8f02219b1c87275e8f81204d1c5d278f8eea1fe41b0f27158eb21e4f1ad026b18d6d1d52157426ee904e1beb911b2686945a171899bc25fb974292919c62254f999f99ca9e17253f99d99a6f9f9f246c98bc9a2c9f3e24db97099b359f9b2353974c9bea9ed722ea961f9b949e1b229196e09a009e73215a96589a419ddd200896ef99ed9c7520b09587997b9ce91f3c954c993b9cff1edd94fe98059ca61e5c94c9987e9b4c1eea9373984c9bfb1db1935f98de9ae01dbd935598699a981d50931698099a861d6f930298cd994e1d3a927f977c998e1d0e9290968398521c00008b143e18eb08849e02a199a29a27bca0d1a2a5a4d9284ba068a17da3b9289ea0e4a121a41529fda0b4a284a4aa292fa18da296a42f2a02a133a1d7a3762a6ba03f9deca0cb2aea9ffd0c1c98242bb09e8d1ef91c4b2b739d41217c21bd2af39c74228d22e229979cbb22f722fc28dd9cf321f5215928649d18216c200428e09d4c20dd1eaa274b9e0d1d81188b276e9ea3187298ac27a09ed713e89b9327619e1f0d9f9d3e27ce9dec0c469e01275b9d1e13209ea326889c1818449d6126339b6c1a4e9bfd25bf99f21ce39499254c98461f800e62253b924c213c1d22254010e422a821fa2499141424fd2231255b13b523d222ce259711522368220d2760061922ca20e427558cba20031fef27f091121e8f19a5277b94cc1a7a8cec26bc95f7149e9a4d267a97a7925d9de3256498f0972e9e7d258b986499eb9efe24c7980c9b699f9124fa98de9bc89f2e241799429cbc9f82230d998d9cf29fc32223999e9c9f9f23223499759c5b9f7c21fe982c9cd99eff205d98b29b169e7c200098129ba69d2a205097e79a4f9da51f5296659a099d151fc195319aad9ca41e4f95ce99909c531e26959299379c0e1ef9943a99d59bb11dc794eb98199b931dc094c998ce9a7c1d53946098a79a4e1d18943c983a9a2c1c00009e122818c81515a03ea149a328277aa0b6a292a4d827c9a032a3c2a45e280ca1dea35ca5dc2867a128a4aba5312966a1e8a374a58f292da13ba269a4f229c8a07fa034a27f2aa0a06e98559d8a2b919d292215221b2ce698ba25de26792bbb92e0261028332ab292a226d2277a28c6950326c1260827279b85246124b525549d152147202925279e521db0151825ed9d031a6495d524ef9dc013e89bb924389e250db59db8243d9e278da09ebf241d9ead93769ff024ca9d108d649fe424349d9213989dd724bb9b0b1c1b959324b8977a20a91c57248f905622e920292460122324af226c242916d3243a24182515172325ad24fa257e122925c2244b27081471244a240a2879113b234c224628a18bfc1f641d16287b948f1ba8126b277f982113689ab7267a992797f79d0526ef99c19b32a03825fd993a9dbda05a24fb99789dcea0cc23bd99809dafa036236d99419d7ba08c220899f89c04a0be219b988a9c539f202164983e9cf49ec3203898099ca19e70200698d69b6b9e32206897899b349eeb1fdf96419bf89d9f1f5696039b899d1e1f1496c49a1a9dc61ea195229acc9c5f1e2895cf995f9c001ef9945999049c911dac943d998f9b4a1d7c94f598569b221d32940f995f9ba21d3b94e398c39a881c000069155218ea8ee99f21a2f6a38e2695a00fa454a52328f8a047a494a54d284fa153a4d0a56d288ba159a4dda5a328bfa15ba414a6e7281ba24ea4faa51129a7a250a4f0a58e29d5a3d9a2bea4f02a37a06b14bb983a2c80183328f228e82cd61f0f2b302c062b6320662bc32cdf26691acd28cd293221359b83245a255620b79ef71c1410d820d99f519ae5a05d21e0a0d99c6ca14a2200a0489d15a2ec22cd9f599e57a2bf22729e2d9e10a34222d89d999d34a2cd21d29d6a9cafa1e620809cec95a79f3b20ef9a3318b4991d1ebf9781207d1d9a1bbc0d532424247a18d51819265926cb18251ca1273828c920ca1d5e2814298825f11d7428fe283c28f51c86272a28562967186c24852446298c94191e121ac428f99b5e8aa89ce027039ca399169f9226799a379c0da05325f89a469d91a08724a09b789e5ea12a24669b799e8aa19b232c9b849e53a1d922b99a219e0aa15922379a0b9edda00022cc99cc9da3a09a2154998a9d6ba03821b098319d05a0c5202598be9c4c9f22209e97559c999e4d1ff696ec9b199e961e74965d9baa9d491e1396279b899dfe1dca95cc9a4f9dc21d81959c9a069d9b1d2b952f9a9d9c2a1dea94c199439ceb1cdd946d99d19ba71c1d940899739b941c6892a9977599f41ab60e1d1dd81ef1028d9e05a1b3a2da25c9a08fa3ffa4902738a125a487a5b32788a152a4dea5e827b1a170a4f6a50428bba178a424a61128c1a185a476a637288ca178a49fa63328e0a2dca4b5a6f027cfa211a511a63a28b6a18ea437a6ed2c6c25012f3230f82d6b285930523108a77f14de279e28d5a8739ffda168a48a9d71a0b4a30aa63a2125a0a0a318a6552466a135a49ba6022536a1d2a469a7a8256fa1b6a413a73f2517a18aa4f3a61625dca061a45fa6452481a087a34da63923ab9f12a229a53c21e99def9fa1a3251b0d9c209bfea06597ca96b71d9b18d6a0111cb1273f2837a55a21372b452c97a41e23ab2cee2dc7220922032cc22cbe2a2d1c9f28af289f2b319d97213a214529b19b4f992a9f5a27b19bcb9ef7a1b825e19b0aa0f6a23225549c6fa031a3b2244c9c2ea09aa22724c29b06a08aa2be238d9b8d9f29a22723e49afd9eada154228c9a859e51a1ce216a9a599ef8a050210c9ade9db7a0ef2099998d9d61a096202f99419d24a03d20d898fd9ccd9fcd1f9798b79c2d9f2d1f4c98739cca9eca1e0798499c519e511ede97069c119eeb1d8597ab9b9c9dc11dd5966e9b549d781d6296149b399d391dee95a09ae79c0a1d9d95479aa19cc21cdc94b399039cc71cab933b98ed99f71a0000501676186d0f459e20a1dda25825a5a0d0a327a5cc26d6a027a46ea5e826ffa035a49fa5dc2628a152a4aea5ef264ca16ea4f4a5f42653a166a4fca5b4269aa19ea43fa61226eaa136a4e7a5cf24879f16a16fa3a720b1950198f69aad195706ff114614f71aa001290fe8056220549d66a0e5a2b12497a1a7a4cca6cc26cfa143a598a7ff26e1a155a5dca71e27d8a166a506a82c27e0a18da513a82b27e7a171a500a80a27e9a1ffa479a7932602a23aa5f2a7192760a1b2a4e5a7262756a03ba459a7a526999effa39ca68025ab9b59a3dba66925189ccda450a82d27779f97a658a93d284c9e83a01ba88c256625cd2df32d9e24211f7928bf28382d749c61a526a85b2a489c25a231a57b25449db6a039a426247a9c87a001a47123999cc8a00da45e23aa9ca9a0f8a3d722879c6ba065a35422619c68a02ca31e22539c28a0f7a2d121249cf49f7ea28121879ba79f31a23f21a99a319fa5a1c420259aba9e3fa16a20e799659ee8a01d20e299e69d87a0901f9e99829d38a0321f2e99fc9c919f6d1eaa98829cc49eb91d8398329c649e871d8398059c199e661d6998b79bed9d5e1d1798a99bb39d491d9497609b729d0b1dd5960f9b2c9de91c6e96ce9adc9cdc1c8a95339a899ce91c42953799439ba11a00000115b2183c10fe9e6fa160a33e2560a06ca3dba48e259da004a46ca5e925c4a01da492a5e825caa026a49fa5b425caa014a48aa59f25d4a0cda366a52925efa0fca20fa557241aa0b0a022a4a5215f9c8c9d6fa0db205f9a209e09a0c922e59c1ea18ca24c25799f8ea3f8a4d126bca07ea444a623275fa1d8a4e2a61627a0a1bfa4e2a61727bda1daa405a705279ea1f1a43ca7052771a1f3a444a7d4263fa1e8a45fa79b2611a1f3a450a7722609a1dea437a72526e9a0b8a42da7ec2509a1b1a421a7c725c5a093a4f0a66b25b1a07ca4eba6272535a02ba483a6c224a59f8ca3a9a56724989ce7a015a358229d8e9895f198cf1d500a3e0bb887951811917f98ba9d85167a9ad49e65a2351c2a9d1da12aa44c20a99cd6a0eea33a21989cf4a0fca36c21749cf0a0f8a34b21529cc0a097a34821489ca8a078a329212b9c73a0fda2e820999bfd9f37a28420d19a489fa9a142203b9ab09e3ba114201c9a599eeea0a61fe799fc9d8fa0591fb099a99d49a0df1e70996f9d19a08a1e4a99219dc09f501ef298089d6f9f071e9698d39c479fe61d72989f9cf39ec11d5c986b9cae9ea71d4e983e9c469e6d1d0f980a9ce49d141da597739b6f9dcb1c4197129b219d671c1596599a909c711c0496f499099c361b0000d1132018f108b19f2ca224a4ec2447a042a482a536269aa001a45ba5c42564a074a308a557254ba02da3d0a41c2511a0a1a285a4ce245e9f0fa22da483245c9e14a11ea30524339d8da062a2ab23949d49a14aa37124219e0aa220a42f25259fd3a2d4a4e3254aa00ca4c3a5b326bca0b3a4bea6272700a1eca469a7692706a1eaa47ba7432708a1dca45da7ef26fba0c6a415a78f26f1a0a5a4e4a62d26bfa088a4c0a6d925a1a06aa4b6a6892583a052a495a6552561a034a460a613253aa024a44ba6d82406a005a417a6b024d09fcea3e7a58b24c19f9da3bca56a24a89f64a393a54a24259fc1a2f9a41724b49d7aa1f6a35323539bb59f0ca20c22e498e29df1a0f120ab98a09dfea0c51ff6991a9f0fa2461fe69aab9f55a2d51e099c27a0c8a2041f119c0ca091a2301f359ca29f19a2831fac9b999f0aa2901f2d9b9c9f14a2cf1f059b869ff8a1cb1fc79a639fd3a1bc1f869aee9e77a1831f279a9e9e19a1421fb199399ecba0c61e7099d79d7ba0721e4f997a9d32a0fe1d07992e9dea9fc31dc8980d9d889f981dbb98d09c279f6b1d9998a69ce59e301d61987a9cb19e241de1973d9c4b9ef11c8597059ce79d9b1c5b979c9b919d381ceb960a9b389dea1bf896fc9afd9c911b43981a9a0a9ce61935a4419d129ef81d5f2a291fce22aa27c22d0a236923e727462f5f2113232c280230d82175239f285d30e722aa2373288330082261227026aa304b215b210a22b130a0218321d61daf30ec209f213d1cc130981fdd209b191731c1945010ee1d2027d1b17cb31d242e2f139dda24a0254a2f9d20672b562421289a1a022cf223d22c4e1c0e2e6e28962f2a201c30ba2baa2ece213730b32c0e2bf021212b32278b20561d3c24309c451b3c1b09244f111a210920b82584a1f721cd214c2759a49a22a520e02623a54d23ea20e425e0a44a238c216e25e1a4ab22f82072262ca5f223e222ac29cfa66423a320282a9a9ed31f39201c305728d21d0320ce31bd2b091c9f21cb31152c101be1225130d32a49134b183a2add28069b0ca5e3a5fb27ad160c1e5b214825ed1959218f23e92240191e202e212e210918351f7b2096205718261f6c20a1208118b41e5420882053185a1e2b205d205d17fd1dfc1f48205617ed1de91f2520e816771d791f03206616141dcf1e541f1316c91c621eb51ee515a21cf81d701ee515721cdf1d2e1ee515601cbc1de21da2153a1c8c1d8c1d5415001c221d221d8b14fd1a6f1c8d1c5c149e1a4f1c4f1c9614ba1a461c291c61144c1a1d1cca1b4f14411a231cd61b73126b18b619ca1bd99dc594a19b3e157b28b41fa6210f28c52ce7210822a0288e2ee31fc7200828063075207821a2297a30081d5c1c6a2979300a99f39d27277a30609b299e3921ef30e7900697c51dcb301f0ac08b4c1af430719e2da10294ec3040aa51ac639e95309eae7ab04699ae3165aadfab6f22c9308ca19a219a219230f311662ad023be31f41bea2e0f29a6307520a630b12b7e2e1c213931072df3277e1def2f9a2c7d95771b4e2f4228f510091dab30d2287e1b671f4e3167294e1f46208331df297621a020bc3180299f210920b031a729c82138200432682a4c214e1fd231c929e12067207b32b6297420d11fce31fb29a41a111e4933a02c1e18101eb132292dc116581d4832022d2a15171cd82fe82b87080d99f1260428309773a14ea39d23f2146f155814f92163183e1e751f4622dc18be1fda20e6219c189d1fe42048212a19a71fdd201c216219521f9e2018219118b31e3920c520cb17461eff1f84207a17f01dbe1f6020e016ab1d801f3d207c16591d021ff11f0016061d881e9a1fe315b41c111e171fcd156e1cec1dec1e8815471c7d1d9a1e4b151d1c321d191e0115de1bf01ccc1db514531bc31c731d9214d91a701c1a1d6514c71a361cb71c1e14451a041c7f1c4013a8194c1b581c0c11fb166818dd1a369d199bda9cd214af22111e3821a928c329e721c721b728f32c871f5220e0281a2f851e6c1f16295230e51ec71e6a29ce30111e761ea72816319f1d221ddf264831ce1610163a2579314b9ccd9eef236f31e5a234a56422b43174a8d7a9a422583171aaffabfb21bf316fa8e8a9f921dc31b2a2eda38621af2f41952824dc23a331581daf2d8729f42f9e1f7e30bf2c5f2cb31d7d319d2d9c25a821f5317e2dcd197d20c731082b651309211832d82964164821a432db29c01bac213633182b471c1a2173339a2a8a1dc7209c33a72bc51e4c21fb332f2b611d14210f34932b771c3b210834992b8119e21f1434672c3e16ff1cf7335f2d1016681ed133f82de2150e1d8b327d2d55126c166c2e222b8e8d939b0c2121274b12fa128499222594156619ce1425242f186c1e2f1eae23fa175a1e471fb6222b18571e821f1c223e18ea1e1a201e221218701e1a20b721f717511eea1f7721c416c91d481f07217016471dc51eac20bd15da1c391e4c205015701cc81dcd1feb14281c6f1d291fcc14fe1bf81cc31eb714aa1bc71c801eb2143f1b9d1c201e8714061b771cc81d8714af1a371ca51d1d14671a0b1c691dd1133c1ac71b131de813361ab41be61c1a14261ae31bd91c2913421a1f1c2b1dae116118ae195a1cd4928699fa98c60e2917211b2d1e2428dc24ca203d20cf28c329981d7d1ec828162d511ba11b1e29592fcb1b1c1c4f29a2303f1b831c4d29333193192b16962865316d95959b2e2897313f9f02a18227c0310ca27da41427dc31e3a43da7f4270f32caa559a839283e3280a4d3a7292832325fa1d7a46228cd31e2975e202b293a313819a02a052b9a2e8c175f2ee52c17294d18ea304d2e3c1c691f6331e82ead9277218231722f80121e2102327f2f0d172521c032862fe219ec2101335e2fe0197f216433a92f281a1122033419309419fd2126340130a31ab421f633792f001b77211234582f471834202834852fba152f1d1734372f10118e18fb33262fd413b7173c32072efd0c7d8aed2c762ba50c26932b1c1a27f10e10938ea0a825621443177998c8241516681cdd185e244916da1cab1c60235f17101e851ec6225017f31db31e082256167a1d191e62218d164c1d461e1b2142162a1d231efe20d815e71c131ec1207c15691c9d1d6520fe141e1c391d17208714cc1bfe1cd11fa914a51bc91c501f8214441ba61c1a1f6914071b781cd41e5914ea1a3c1c791e22148d1a241c191e4b13f719921bc91d20138f19071b711dd4124e19f21a3f1d9b12f518581adb1cd0114718ba19c61c8111c6170319371c00802007928650016095da1e0b21b2280015bc1cb41e2c291224c61cc91d70299429081dd21ed529512d7d18781a112abe2f2a122e16d529de30350cee9394297131c895c49ac729d9311e9d44a055290532bba0ada38d294332e2a2aca59e2951320ca42aa6fc29423284a2b4a5012a3d326ca0d7a4b9297e31cb9e4ba194294830ec8cbe23332bb42cf815ae2bec2cf821e293bf2fcf2e1da041135831c42f919eec1ca3310a3090993b1ec0315a30a791151fd1323d3051122221a3332b307915e920e333223081156a2028343d304b15521f5b34373009165f1f4f341e30be15921e5a342930d613d11c73343430ed123a1a6e342230f10d620b3a3426308e0be20ad431832e4f0c6810ef2a9b2a910c8789069d9d26a111f90fce9f5125a3145c194699db249a14fd19d40a522492153e1c9c19c2231616fb1c9a1c122329160e1d131d6122dc15bc1c111d0122c115cb1c671de3218d15a51c8f1d7e211d155b1c5f1d12219b140c1c0f1daa208e14d61bcb1c6c208814bf1bbc1c2e206914711b811cf51f5314221b801c9f1f5814d71a431c0b1f3214651ae71b881e0c14c319701bff1d34134419b81aa51d6d12f0184e1a651dfe119d18af19331d5a11471882190a1de610f617d718c61c680e17158416d81b0080f20f880cf1041a9a7a1dc51fbf28549af91cdb1fed29489835184b1af9298520520bfd15192aab287b18fd15062a2a2d0e172413c429c22f71158816002aeb30e895019c242a1532dc9c99a0bf291132089ea1a1192a3632be9e2ba2b8298b3237a0b5a3e329703254a006a4082a3132d29e01a3952aa3307b9cf9a2e92a842dcf9a62a19a2ad7273f0d4c242b2c149c2e96912c8a2dfea0b80c7530872f2da0361806324630f39da20cfa325030dd9aeb189f3371306e976b1ef43375301490451f213480306a0607206f34a4307606d51fac34b3307c123b20c2349d309113e21fc1348d306b14a71ee734b3307214b81def34ac30b014911db13472301514db1a5c31282ebc0c2a173028b3294d0f0c15069e6b263c12c417559e93259b139b19689afd245c14ee1a1e0b8124fd14541c531739247a167c1d6b1cf9237216661df61c19235315cc1cf31c3a22f014b91cdf1cc7213b14691cd91c70213d14421cd41c23210b14b11b8b1cb820d7133e1b391c62207a13891adf1b162055132e1a5a1ba21ff6120f1a401b291fbf12cb19e11acb1e64129219ea1a5a1e8e127719c01a331e00121d19931a0a1e8d11c818161ab71d67116818a3196b1df2100a1816194a1d58107417f318e21c180d9013bf14af1c00804a0be6041508d79a151ac81ab828ea9d7b14a615f7291a9ff211ed0c5a2a259d9a912a93282a5711cc913793202a8026300c228d602a6c2c541af616922ac82ef70c7d99e92a77303a9b1b9ff32a603126a072a3a62aee31c4a106a5112be33139a167a4152ba031faa020a5622a7830059eaaa3ae2ae92d759e55a4472af228d69f47a6752a800c039e40a4332beba1289cc623952caea1c99d4a2d642e79a0d998b1314830999e9a154333dc30b59ce51cf633ea304a9c301c473410314499771a6f341c316d97211cc23457319f94131d05356d317890501d08354e318b8d461c2b355231608f031a3e3556315e8dc219173500317785cc18a434ba30ad8bf716e02f882db1907d109820a628b20a8316c79f9c26730f7116df9dcd251a1009172f9aef242b107d18fd979b24ee114019e19038242613611a7d13c4234d13201b84183623c513a31b1d1ad7223414a81bfa1a7222a813331b121b02226a13d01a211b9c21c112531a341b47218612161ac61af720f511c219631a9220bc118c191b1a5e20b3115919481a342088111219f219c51f7c1172188b193e1fb0102718be18a01e3d1048176818001e850f89163318931d7b0f7016a917521d9c0e72157d17331d8c0ec515f417011d630e1c1501179c1b00801e0fcc0c6e04ad9c2215a0140029879e8e919f0c3f2afe9f0c953f96992a68a08a98a9997d2a4aa0bd98389c9d2ab89d1898949a2c2bc91f7293d6977e2b01289f9a899e292b852c3a9d6ea1ca2a832e3b9fdaa26f2ae12f1da014a4702b0230e09f45a48e2b1a2f6a9ecea28c2ab22c2ea07ba4d52a522851a05ea4e32a01188b9b3ba4312bb8a2789f34a5a52a24a45b9cada13a2b82a2a59c3a27962cd0a0cb9d752f012f569f27988232fa303e9e519504346a315c9eff185a349e31679c2c1aaf34b9312f9a3c1c0635e6313399561b50350232ce968b1b5f35da317394301a6835d231a790111a8635f2315a8eb6198435be310685221a8534f0304f85171b5b2db82c42916f13e096a627598c5413359f4526af04ad16789e1e267b0aec15a79c3425090dbe17ae99a4240511ee19d8904a249912a11bb8155724cd13491c291938243213241c0c1a8e234c13761bb31ac7228512d41a8f1a1022e111291a5d1a48213111bc198619dd2099102919371998208910f618fd1864207b1071182219292031107f18d818a61f0f1044189018351fc60f8e174f18a21e600f361718184d1eea0e6716cc17011e200eca15f616ad1d0e0eb0153416b01d690d24150916641d510b7313da14a31dd303950d520fa41c0080a9015885c881d49cab905b98df28529e33987099ed29b89fae99349c6d2aa7a0f19b129fb12a4ea1229b3e9df22aefa199952994ce2a95a1879acf9d4f2b2597499f90a24f2b7321dc9d11a2042c9525ee9d30a2f72b1629f99e89a1792b5a29359f24a2732bbc2790a02ba3012b79205aa18ea4b92ae4a09ea134a5a32a22a3caa182a7d42bb3a37ea0eca63a2b4fa32e9efda5e82a47a2af9a11a1222b2aa3f89b6128242d54a02498d5306230769f9b95dd339e31ae9e2812bb341d324d9c020c133538327e9c30155c355332439bbc189a35aa32e59c551abd3583325697cf1be7359e3266956d19f4358a324f905419d53568325291311c0a349c30c494a5908328e12a7d927f1054a04c27d3844a135d9f112623040318b19de625ea0960183f9c6e25b6091b18049aeb248c098318d298a824bd0c69184e949324060e1d19320a1d24e20e3e1903156e23e00f811922161223620f2719e8168322120fd5188017fd21a90e6b18f4168c21880e1a184917eb20fd0d9417ad168120cb0d2317371632206a0db916d315dd1f0f0d5e163a163b1f9a0c1416f415ea1e550cd415a915681e310c241576152f1eea0a0f14af14da1dcd0acb1380147a1d4b09c0115a13051d8309ac112413031d5404e50b5d0d7e1c0080f7852e8cc30fb39c519527996c28099f3a98c59a592a27a08a9a1e9c742ac7a0cd9bb29de92a40a11e9ca79e222b7aa2139e97a04d2b9aa38e9c0ca0602b07a370981e9d552b2ba4079b049b2a2b95a10ea0e0a3382ba29de89e3ca3142b909a669f1da32a2b3aa099a1a8a4fb2a11a419a286a5282bd0a3d5a2b0a6382b8ba367a0f4a50f2b1ba3189f9fa51d2b79a3a29d5fa5dd2aeba2f79baba4512a90a0cc9c49a1bc2abca03f9a3a2be82d489f3998df315a31bc9d4995c1349f32469d170c74350533f29a2315a9353e33299a7c170d368e33e199e9181b368833f798e8183636923314980e124c36ad33409b2b1bd635d632a698e918f930b82ff68f9217781dff28d28a921b979c1d278e84c018639d73265084cd181f9c1c26bd043d197e998e257a8406195a9842251a84f618ba942325e7035a196691c824ae03b318688a412491032c18aa0986234903d617e30ffc225f08651738129c22da0a0b170e140322470abc16b5139321f6097f164a13452194093316e012d9209d0937152b14b1206e09e614d51368204c099e145b130920e2084b142f14831f9708fe13cc13d31e3b0887125413691e12056511c811dd1df6044d116310b71d8e01710e1b10351d53016c0ca80d291dec069810f9100a1d00802e854b8b1682629d02971d9bd5288a9f029b239d3c2a6ca0619b4e9d842ae9a0739cae9de52a3aa1a49c959e252be7a1d49c9c9f4b2b0ea3989d6da05d2b4aa31c9c9fa07c2b00a46a96fb9d532b7ca4779d2fa0202b2da4e39cae9f062b78a3929d8ca1ef2ad4a3c89ea7a3c62a30a4c79e3ba4e32a34a4b49daba41d2b8da3cb9c9fa4ee2ad1a2769d72a4c72a86a2349c99a4c82aaea2149c4ca5a62a47a1229c69a4292a7aa0449d3ca0a92afb9f5897862b992e389f3b9a69330e32589c3f139e35c1336a9ba717ec350f34b69c441a38362934759ae91962362a3423997b19853615344a99ef18b0361b342e97fd1831357b32e196ab17842c202db7986418e99d8b271e9498155a9f97277795f410649f79275b928210659e532689910e15ae9d27263b8d0716579b7125c8890817079916259089ad16cd97b7241589ee1565953124ff825815e9928323cc82191640892423b102c7150889d622a2027f15c3085322898262147108e6217182171416084d215c82b913b507e12059828613840da8204a82ec11110779202982a111a4061920f98151114306881fd081f80f0b06451fa881550da5059d1e8b81c0090b85c11d90847c09b8843c1d668490037a84d31c428490039104361d67847a03c604e51d0080d68b788d0c85769dbe99149dde284fa0d89cba9e2e2aaba0939da39f612a68a1d09d5ea0972af6a11d9ea8a0f12a42a2939e9fa0412b77a2439ee2a0602bb9a2af9e2ea19e2b04a3c39e15a29a2bc7a23b9dc7a11f2be9a29b9c5fa2b52ae9a35a9d03a3c32a0fa4659d91a3b22a94a4a09d3ea4052ba3a4899d83a4fc2a25a4379e9aa4e82adba3dc9eb5a4d52ae2a2c29ec2a4ac2afaa1fd9deaa4752ac5a14c9ddca4632ad8a0129daea40a2a5fa0599cad9f1a2bf99d889e182cfe2eda9ce895ca339e328e9b6493e6354d34339c5c0ca5369b340f9a391bca369834049ac2182a378c344b9c8d1ce83634344092db1e6a3202310e94eb199c23142a0496321484a1f02734949115999f11271892be16df9d5c2636912318b39c4a26db919016d69bd0251191ad17729a6525f68e2d172b991c25a28ebc160898df24408c1216a9956624988b8b151b95c023ff8a2615ab921523748acc131b927d226e8c4813a691dc214c8c5011509161218b8d350ffc900c212a8ce40ebe90af20398ddb0b40926920fe8c7f0bed911320ce8cbc049591ad1f6c8c83044991141f1f8c44840291e21e9f8b288acb90971e648bf5899590231e038bcf896590e31d288c8f8e2990921df98b668e5c91951da48a5e8ced8dd01c0080938ced8d7885249d239aab9dad28959fe79d959f132abea0c79e94a0ab2a69a1939ee6a0f82aa5a1499ec3a0302b01a29a9ea3a0602b5fa23b9ed1a0772bb9a2cd9d96a0872b1aa34b9d52a0902b25a3c99c73a0932b32a3339c66a1662bdea2439c5ea2312bd0a2369cc5a2ef2adfa2339c3fa3c12aaba2649daaa3832a99a2549d3ca34e2a48a2f09db6a33a2a0ba2869e92a4302aa5a1f69dcca4152a5ba1db9dd5a4032a1aa1779c9da4be29559fc19b72a4b129009fcb97ea9f1c2a769db49cfe29f02d469dac9a3a32b431d99cf58b9d352634669f2f0cad3692343d9a3a153f365d34da980b1a05344e32e2939217d72a932c7195d7135d9c332782958618f79f9127d695cf17349f48275198f617999e2527ab98b816269d2a26ae962b16599cd1251697e2151c9c61253094cb16c598d22457914e164a976824eb90f3155d952b24a2909c141c95f1235091c81015965a23be91490dcb96b82258919a065d964a22259149861d97d02198918c8cc29664213891298f5f961621c690bf90e296a5208c907f9075965c204f903d900e96f91fe88fc88f9495581f748e558f9094c21e0e8e78905194641e108e60902a94011e198e51901994e91dbd8ef8917a94721d508dcb904193f41cd58e2d8f358f2f1c00804a8eea8e8885599da59b9a9ecf28f09f049eb89fe5298ca0799e71a0512a36a1529e6aa0a92a5ca1199e9ea0f72a90a1e89de9a0232bcba19d9dd2a02e2b1ca2469db1a0652b67a2829de5a0812bf5a2f19c95a0962b29a35d9c21a1872bf9a22e9db8a1612bd7a2e09dafa2342b75a2e19dafa2dc2a47a2b79d0fa38b2a31a2899d6ea33f2ac9a1199ed7a3fe296ba14d9da8a3be2913a12d9ddea35f29d0a07d9cd4a33c2952a06c9ad0a31f29969f1a9977a44829b9a0349a68a436295f9e269308a14e29249c1e1c33267c2bb89a841ad12de22eb39ca418cb301431ae9fba182a30cb30ee987c19132a3b2daa98b4190d1977280797e315ba9f5727c39792189f9e5427c296fa195299ba26d59552184b9a82262b947318989ba5268d94fa163b9c6b262c94fe14b69bb825cc93ab12169b422514944e0f759aca2438936508d0995024c59227882f9a0c24e392ea8ddb99a9237c929d907899ff221892489012997d22819297914c99ed217492c092f49869213b924c9298980421fb91399344988c20fb91b99264983b20569172931898e61fa19022930d97541f6090ea937397011fae904a942797ba1e37902394d0963f1eac9081940497b81deb90bd949296371d4390359408963e1de18f14935095af1c00804f01e205f6010f9f069c679eb82893a00aa029a1152aeca0d29ea4a0402a01a1819e7aa04a2a17a1cf9d11a08c2a3da1269d01a0bf2aa1a1e59cd49fda2aefa1999c32a0252b0da2db9c71a03e2b30a2569c28a02a2bdda1699b3ca0f62ac2a1179abca0b52abfa1169ac5a0a52adba10c9acaa0722ac7a1539b42a13a2ac9a1419bb0a1152ab8a13c9b1fa2d72981a11d9b81a28d29eea0cd9aaca23829a2a0779ac6a2e0283da0689a21a3bd28ee9f8c9b9da3c92818a0929b09a4b628b89e569b02a4ad281f9e689207a35228819c1e13999cdc28f39b630cee1d88295399c011651d08292b981b18bc0d42286696591a93967a27249a471cda9c3f28f8991e1c3b9b50277e9a431a649a52268f961c1a49996326a694381b38988e26f793801a969707263994be19a296452522941418ea97e424059553158397a5240d95881105994b24139520885f991324a294c790569a6c239f94fe93839ae722c5947195379b6b22b894a996469bdc21c394f996489b56215a942397bb9aee202894c1964c9a8220e4930f975f9a43209493ad96ff99d61f1e9349964b99361f5092f2950199d01e0a929b95b3983d1ef79159957098e41dd1911795e097781dee913f956d97051d0d91f2940d97e61c8590d6944597eb1a23940793ef93b019ba9e13a0e6a0a5288ea0f3a020a39d299ea0c5a078a2002ae5a0f6a0bea2642a17a145a0dca1a82a33a1be9d71a0f92a98a1829b2c9f202be5a1b49afd9d3d2bbca14b96919c1c2b6fa1ca93b69be82a14a14a0d239aa12aeba00614409a882aeba0630d109c432a10a1668de59d112a60a1b496b29fd42991a1a698bca09429b0a1ef9928a1532947a1209b84a10529f9a01d9c44a2cf287ea0079ca9a2ac28dc9fe49b0aa38828dc9ea79bf4a27a289d9e0598c7a243283a9ed09279a13528189e5c95d1a20b28789ed7983da107288a9ab31df28d8727c099d91de60d77278497a01e198e87277996a51f4894de260294aa1e7e0d9b2621920b1e7f0dc9268c91ca1d050d82263f93ba1caa8c58266f93ac1caa8c7c2691943a1b88920e262f959a176a987525029657129b9aca24e495b788c69b7324e5958b91149c3924f795aa94919cf22390954596979c65237995bd96e59cde220e95de97c89c4e2215957098ba9cdf213895de989f9c4e210d95ca987a9ce120df948098299c8820c7948698cc9b262077945e98729bec1f74944098d09a751f6b941e98859a231f6194e9973b9aa71e63949297ec99291e5a94bd97a699b91d889474971799751d8e93fc978899091d13933b987f9a2d1c00006b10a8133d0b2b9f099f86a06528a4a065a12aa3c9280fa193a159a352294ba1eea1eea3cd2984a1a0a1e1a3642ac9a13ca0d2a1bf2a0ca2149d09a0112b6fa189989b9c612bc4a0770d188f432b13a0961c731a152bfa9f1d1e341d902a2ea0241e511c2d2aa4a0b01cce18d32991a0d51ba90f9129dba00b17ac9a6b291aa18f8d209e202906a1c998caa1ec28d8a0079ab4a1bc28b3a0dc9904a2832890a0af99e2a1322833a0779921a2b727c29f199892a11f27cb9edc9269a15026eb9dcc1293a0de25a69c1819759fca25e69c511c399ded25f99abe1dc6941226209da01f758e272674998a20b51ade25e6942a20e51882256d8f1121b81c1526d39136218e1c3826268f8220df1c4026dc8e1620121c80265e8ed11e56197326f08d8a1d9f17ec25e88f701cf5118625a39463178a96512530986b94389c0d25f6989799d39eb4246f98a59a579f48242798f69a4e9f8f237397359bef9eb4225f97139ba09efe21db96dc9a129e7d210697ba9a939dec20c2964c9a359d7d201496e799d49c0f20b995c599b49c651f45955d995e9cdd1ed6941999399c761e5f94fc98cd9b0f1e4a949998949be31d0c948498fc9a821d99936f98849a611dea935d98389a221d7e920698e7991c1deb913c971b99591c0000ef15cc18db08d69e08a17ca20428a6a09aa3d9a41229bfa015a230a4012920a179a279a44f297ea105a3a9a4ff294aa1afa100a4822ad3a0bb9f66a1d82a0ba0318de599362b1d9fa11f221f502b799e8821c021af2ae79db922d022de29879d4622412231294b9e0421a3209328699f241e471c192856a026149798ea27c1a00e9a44a0192814a1499edea2272822a165a045a41b2816a1aba0aba41228c0a08da060a4ca274fa0869f04a4502711a0109ed7a3bc26789fdb9c62a34926ff9e6c9bfea2e4254f9efe97cea14e25919d940c9ea0eb24ec9c0d18a99fbd24619b721d378e902413943b22b4206b24570d3123ce2197242e10cd2397222d250e0d1923b6215b26a90ccf21d5204027c285d120231f6527668e651eb91acc2679936f1a478c15265596f812489ba425f09781941c9d2a253e987998049eed24ac985a9a299f8024ef98629bae9f3e240e99129cfb9f93232a99979c17a0c4224a99989cc29f0e226d99649ca39f72215d99769c149fee200f99259c8e9e9120c798b79be19d23204198559b999daf1f3b97109b649d671f6196939a069df61ebc95589ad29c841e7095d199649cfd1d2b95a6990e9c951dfd941999519b731d16952299fd9a351d6194b098c89afa1c0f941098bb99101c0000da144819f414dda06ea1e9a2b22767a0c7a2a7a4ec273aa12ea498a5be28d1a175a41ba66729f0a176a423a6bd29a6a1a8a354a53e2ac0a071a07aa2b22afa9f9f96a79bb42b7b9d9322f9221a2cac9a7c269827612bf09726275b28d529f099db25c9264228279c22249b24d626409fec1ece1c46269da10f8e8c9d6e260aa1d99d4aa2a426d0a0c19e9da33326a1a0b89f13a4f525bba0b2a0a3a4e025f6a0e8a002a5d325dda0e7a001a56a25c9a049a05ca42c252fa0e49f58a42625619fb59e1fa4ed24f29ddb9c88a27424699c989578a0f823be9a18190f9bdd222c98451fd714a7224592cd21011fcd22800dcd2327226d230e169424f223d5246c18f1249d245426bf15b624702488274a14d723cf22002858050b2132208a272f95381dda18ce26ce980015dd96502678993498f59d9325f399209c28a098243a9a6c9db9a0fc23a7995f9dd5a035237a995f9d9da0aa221b99219d32a0ed21cb98ac9cdf9f452181986b9c489fc3205a982b9cde9e63200198009c969e1a20bb97ab9b249ee61f1897549be19d5f1f87961f9ba99d191f3996e79a689d9b1ec7954f9aed9c371e6b95ec99749caa1df894a499379c381da8945499f29b171db5944a99bc9bd11c32942999759b6b1d1f943799149b791c0000ab163a18c4891da0b7a241a4102754a139a455a5242854a153a4e9a55e2842a18ca444a6af28bda1bfa47da6f22840a2c0a496a639298da293a40aa66129bea11ba244a4922a58a0e51ecf1e7c2c5f1b9229b62a9c2cfc20102c242d1729bf1e352a9f2b211f0c951625bb25951cf99eba1442966f20fea09f9f57a2a723c1a14ba2ffa432257ea1c1a2a2a57225c4a156a312a65925aca130a3e8a5d92400a28ba3e3a5d52427a17ba368a6872406a100a305a61824aaa0a7a2d9a5da233ca035a1eba442230fa0d99f03a46322d79e989c31a2da20a59c1f12a49c111e37975d20131d771951126b240e244215aa1a90260027a51a671d11289528c621241f9a284e294426081e0928852885289317b7248224e0285a9c181f791e4d289d9d738a06997727739bbd9b15a01f268b9a5e9ddfa0d3247e9bbc9ea5a12c24949be79ec2a17e236c9be69e7ca1a822cd9a9e9e3fa11022349a3c9effa0c721a699f89dc7a086215099aa9d8aa00321d298579d27a098208898f59cb09f27202a98769ce49e751fa297389c619ee81eef96b99b029e561e6696779ba29d1c1e53960a9b529dc81dc095949af39c651d5f95569abb9c031d0895e0995d9cc41c0195ca99259c661c65945b99aa9b561cb3921598e599021b350a6f1c501e4a10709f65a12da336263ba12ea43fa59c2774a13ca48aa59f27b8a171a4f5a5d327c9a1a4a427a6f427efa190a487a62728cea19ea4b8a624281aa45ca561a75b2804a219a56ea63e282ba1cea126a26d2ccb28a530df310528aa1bf528c02810a765a0e7a376a6252083a225a535a8bf2680a278a57ca8b827afa37da524a84127f7a280a537a89626a0a281a534a8922622a22ba519a8e92610a215a5e2a7e826e0a1eba4b6a7bd26cca1cda467a778265fa190a468a7ce25eaa045a412a716255fa088a3a1a6a223bc9fbca2f1a52522de9e21a282a54320fd9cfe9f20a4101add95af1ed11b629f761b2328a22822a46221442cf92c7aa12f239a2c3e2dfa276f1f7829b52a6b2a4710f5222923ad29289a0494369dbf27039b1c9e6ba1ad25b19c71a020a3f324069d52a0f7a26d24599c14a08ea2fa231f9cd49f56a23b23229b729feaa17922b39acd9e9ea1bf217f9a939e3da13d21259a1b9ef1a0d420e299cb9d96a096207999729d4da0332045992a9d0da0b81fcf98e09c859f281f79989e9c1b9fc31e28984d9c999e461ee897209c209ef81dc497df9bcf9da81d1697a29ba19d571d91963c9b609d171d1b96d19a139def1ccd95c29a029dbc1c1f950d9a749cda1c5c9343981b9abf1a00007215fa18c30efe9e91a169a393251da164a4baa5072724a175a4daa50d276fa17fa4ffa505278ea193a408a6f426a8a198a425a6cb26aaa1a8a44fa62126f0a180a436a65e24699e2ba03da2bc1fff8d6a8d2292ae19730e7f1518149e1e5c9b5b9f97a1642443a1a4a497a6ec2655a305a663a8fb271da3e5a558a8e127aaa2d4a54ea8cf279ba2e5a551a8b6277da2c7a54da8d12701a27ea51da85927bfa13aa5e7a72b27c4a111a5a2a7ec26c6a1e5a46fa7a126eaa1c5a457a788268fa19ba422a71f2659a171a4eba6bd25c0a004a494a64025ed9faaa2bda55024559ba2a15ca55323de981ea25ba6aa23f69cfca5c9a8ff254924832cef2c95a62027732fd72f972ba69e67a228a56a2c569f36a1eda46f26699e8ea03aa4fc23789c9fa0e6a30b23b29c92a006a49f22a69ca3a0d4a36b22829c8da04ea3f721809c57a018a3a921249c38a0c0a25d21959b0ba05fa20921bf9a5d9fd4a1b220439adb9e70a15d201c9a819e0ba10620d299ef9d9ea0541f88997c9d42a0e61e4199169db89f3a1edc98be9cee9e8f1dc2986a9c869e5a1d92982e9c349e351d7098029cf59dfa1c3c98be9bb99de51cd0979b9b7b9dce1ce796209b3f9db71c9a962e9b169d921cde95c29ad59c931c2495ad99199cd01a0000db138a174f0c219f61a163a30d2582a0f7a325a5a125bfa045a494a5d425f6a035a4aca5c2250ea147a4c4a5ae25e1a00aa4a6a53e2567a161a33ea56f243aa03ca1bca33f228a9c7f9d41a03421469b639e64a0fc23f09de5a26ba47b2646a1dca476a69a27dba12ca535a7a42706a253a576a776270ca249a569a73027e8a12ca566a72d27bca116a535a7e0268da1faa41aa7c62663a1eca43ca793264ca1f6a450a76f2633a1ffa45ca70d2650a1ffa464a7e1254ea1d9a45da7902565a1b8a43ba75c2522a190a4efa61c25eba053a4d2a6d42492a01ca499a66a2481a026a4aaa63e2490a035a498a61524449fd6a227a5cb22b198189d889fed1fb40dec11ca1109188887b4944b9b69159299ef9dc8a1f31ab09cb8a001a4761f579c16a110a4da20799c1ca118a40921899cf4a0f0a31c21809ce9a0d3a3fd20699ca2a063a3bf20139c35a091a278203c9b999fc6a12320819af49e68a1b31f2f9a729efea05f1fe099109e9ba0e21eb899bb9d50a0931e6b997a9d1aa0621e4c99309dc89f051ef498119d6b9fdb1dc898d99c1d9fbd1d8198c19cf49e751d5398869cb29e5f1d2e98389c489e271dc797ff9be99dd31c4897709b7a9d721cff96269b399d1e1c7296bb9aab9c4e1caa95169a429cbf1a00008214a61799076a9f2fa232a4c22483a087a4f7a5562695a016a46fa59b255ba089a315a515255da031a3d7a4d72409a065a25da46f24869e6da15ba39723999d93a047a23723509ebaa184a39424169f49a3dca4d32522a03ea4c6a5b62630a1cda4dfa64c2705a242a5b6a77c27e7a175a512a88e27bba184a517a85b278ea17aa515a81b275ea143a5f5a7d0264ba11da5a0a7662641a1e9a46ea7ee250aa1bba42ca78525e3a0a4a4eba62025dda07ba4cea6e024aea068a4afa6a12473a043a482a6522437a011a435a61824f29fe4a307a6f323d79faea3e4a59a23ef9f64a3b9a5a82311a042a39fa5b02331a008a332a59f233f9f01a272a41a23519c70a08fa2fd21f698e19d91a091209c98899ddaa0781f1b9af99ee0a15a1e769b949f33a29e1d479c1ca0aca2fc1d259c729f24a2611ee29bc09f39a2f51e4f9bd89f25a2181f389bb79f07a2451ffb9a919fe3a1391fe59a2b9faca1141f909ae39e53a1e11e219a619e04a1991ed5991f9eb2a04a1e8999be9d64a0fe1d3c99709d22a0961d1599309de19f6e1ded98ee9c7e9f441dc998bb9c319f281dae988a9cc39eea1c1f984c9c699ec21c0998309c069e6f1c9797b09baa9d0c1c43972e9b5f9dac1b5697329b4b9df11ace97649a469c7919cb1ccc8fae89551e702cc8203324f527bd2ed42350247128de2f2a214a2384284630fd21b823f728a730502332249a28b630fc210f22b124a130c4203a21951f133003204120071ceb2e991d5d1faf15792ea01c5a210217342dd21d0820ca0ea2aa08b04ab1b11526a290a6eba56520fb23ed209824ad982a1cbc1ff924b3a10b2412206b2da322852eae1fa42f162a6b2fa1225e2fa62cb22d0d20a824da23bd22722202286f99101b0000a6255c25ee21261b6e280ba520166f0fe92875a8000000008028a4a800000000af2690a7000000004425f4a5000000009526c9a600000000582b63aa000000006f2c55a700000000c02e4d25b215621d5231182bd51b0a22a331de2b0c18411f3d2fe32a24994ca28d211729e915a51f07259425231d05248e253524dc1afe20c0230e234e1a5e2071215021c518951fa9208d20e9182b1f7e207e20de18da1e702070202919a11e532053202118141e1b2034209317fc1d00200020d116791d911fc11f7c162d1d041f311f5816eb1caa1eaa1e8916cf1c601e601e67168f1c0e1e0e1e85167a1ce31dbc1db915551cb01d8a1d4215151c4a1d041da3141d1b991c7a1c7d14c31a7c1c3f1c7c14c91a491c0c1c7814411a291ca21b5514221a011c8e1bea125418ec190a1c9621da142d19aa153d2b2e2230244328b62db221502293284b2f41200621b7284630fd1d8e1d2b2aaf30e792e8987a2962306b9bff9d11250031ad18cb18721da231831cc01c6c1c5f31711c681c5d1538324a9bf59d46a0dc3093a81aaa55a55030bcadc2af7aa57c2ee0ace2ac03a333a097a40ea51ea1bf9b2a95f4986e9f402f9b13352df624c531f81ab830162ce72f0f1dc1309b2d6d2a9913581f2129710d261c92191ca8a50200000e9752a73d05cf0b92a040a8000000007b9f3aa9000000002d957aa8000000006719d0a7000000005d140ca800000000ab0d87a700000000fe1f2fa600000000b22451a800000616d030832a2c158c1ab3329b2db41360194a32e12c930cfd980d2ffd2ac692fb9fcf240227c290e19c609dcc22ac18e41db61d9b215419ba1f7d202322a9190b20fd20f0214e19ee1f022148216219531fbd20dd20ae19541fad20eb202819fe1e7420cd200918621e172068209317031ed01f3620c516aa1d931ff81f79166a1d1e1fb01f1e16191da71e321fe715e71c561edb1ed7159e1cfb1da71ea4155c1ccb1d491e7615381c5c1dfb1d2515001c051d9a1dbc145a1bc61c301d90140e1b971cdb1c7d14dc1a721cb41c7314651a421c621c7b13a9198c1b221cc3110d182a19021a2c165605c102a5143427a320a022db287b2bb521fe216329292edb1e362078291a30a61d661ed329cb30971e921e5b293931bf1e741e57285d31551e821e04267a31681cfa1c2024aa312116500ccc210e3222a0c7a2401f3532c4a6d4a87495b12f58a96dabe99ef1301fa8e4a8b79d9431dda314a3e19e719c039de19dd8985331121f8c2cf125943115219b30de2cf62e11141e31242ef829671d3231b82dc5203222fa32122e081f27239f33dd2ddc1d59214734362ea21cb7217f344e2e381a0d21c234932efe1560218f34a32df716d8219f34b62d0000b51f5d349b2d0000421b8834512d0000461cce342c2e8908261ccd33ac2c9e14401afe33c92d8913eb15b6321c2db410e4902a2e8e2afa8f699c22219526f7107490309cc0247616ef1a2815102494180c1ff01e7623dd18281fda1fb8227418ca1e092003223c18e01e1f20db215518c81e4020a4212718791e22207121e416ef1d811ff22098168f1de61e8c20f515f41c631e35208815891ce71d971f0e153a1c8d1df61ed714071c131d921ec214c71bea1c341e9014571bbb1cd11d6514e41a7b1cb21d8514bc1a591c611de7137a1a321c301dc613191afa1bcd1c03144c1ad91bb91c1b14fa19f41ba11c6713001a011cca1cb8113c187c19151cd28c5e910d93cd0b761e841df31f4128d4264a201e203529e12b091e4a1f4c29852eb01c5b1c7b297930f11c471dc8294631e21c671d8629a731f41d4b1db528e331f91aaf184e282a32b095879ae3274c327a9eb2a15e271632b0a244a5822759324fa4b7a6b1279232b6a23ea6b62791327f9ea9a32328543210192c24c72860329619f329ec2aec3091988d2dbb2c342dce939e30d82d692485186731992e67133521dc31a72edb186e22ff31972ec719f521a0325b2eee1a28222e33582ef31a91217633442e0b1a1d22f433ae2ef81877211934882e7d190c2115343a2e8f1aea201f34412ecb16101f3e34672e87118a192634722e44049c941634652ebb0b6e9659328a2d3084a099992c922ae683b499cd14b3261c0d4a9576a04f255415d6193a9795247b16e41c1b191e245617b51d6f1d5823e7174e1ee21e9e22f9171e1efa1ed121dc16a41da21e36219b16561d611ed1204f16381d361ecf201a16131d441eac206b158a1cde1d43202715361c601dcf1f9c14021c281d7e1f9f14c71bed1c281f7014501bb91cdd1e5114081b851c651e1914a71a3f1c021e1414561a011cab1d4613021aa51b691d3813a319701b1f1de51297191f1bf51cff120419c31ab51cfd11511882198c1c141214184a191f1c00802b0102887003e191661d851fc228c11cf71b671db1299626ae1c861cb029412c591c5a1ed629542f4e155116702af6305a0ca3162e2aae31a215948dcb29f931c90c9c97da294232b9935e9bfc296032489b6da0a3297d3216a0d7a3002aa2325aa1bca4e429b83212a11aa5c1297832369d23a4792acb320a9dafa16e2a4632679bdb1e3f2b1830d79d4a29e52c5d290ca0012f602e5e97189c42312b2f0da17c93b731712fdd9c9a191032bd2f1b95851ed432562f5688c4209d33362f3a13c320f633e42e14158a2048341b2fdb1212207934542f60121b1f6e34102f3912311d7734f02e400fa41b8d34362f7a0c4a168734162f7e8bcf915b34082f4a056b8b3632a92de909d08a922bf8291d84b896239e0b26860f94893aa007258a14461aa1998b2467147c1b68111d240616d51cb71a36237416711dc51c9f223616101d311d0e22f115071d2a1dd421c315dc1c7a1d8c21b915bd1c731d40213e15711c4a1ddc20a114231c3a1d96208814011cf51c3e204e14f71beb1c22206f14a11ba81ca11f57144c1ba11c461f2d14f01a611ce11e4614821a161c6c1e1714dc19a21bd71d3c135019dc1a791d5e12f8186f1a381de511a518161a2a1d43114e18b819181d31112f1865197f1cdc0fa015f916121c6181a4092885b801119a7f1c4c1eb128769adb1c24202d2a3017d7113713332a1e26c08b070d522a572c7a12e80c042ae32f7b0c8f13f2294031c48ca78d512af5317898589c902a9332e59cb7a04d2aaa32199d05a1622ad432889c86a1c8291533fc9ee1a3ed2a3f3348a066a4b92a77336c9ec6a3952adf32399e16a3c22a8c31089fffa3d32a852db19cf61c1e2c6b2205a1492b6f2da1a1529f45301a2f30a1d81806321230049f218df932ec2f529c3e19853306301b9a261d0734ff2fea95d01d2b34cb2f9190b31e7d3407305b8d7b1ed5341b302008f31ed334fd2fb60d6a1eeb340b30940c9d1cff340f30c20c7d1a0e352130450fd31ad034dd2ff0108e18ef31ba2da204c08a9d2833297884ea89989fdd256311bd16d69e46257613b91aee99eb243214561bb01153241315831cb918062447169f1d3c1c9023a2168e1dfb1cea228015fa1cff1c34222815ed1c271dab2186146d1c101d452187143b1c021df1205c14fe1bbc1cad202d14811b621c5420d513151b151c08208113a41a931b7a1f1013361a751bd21ebe12e219051b6b1e4312a0190d1b261e6b127319d61af61dce111319a61acc1dd111c518301a821d4a11aa18bf19611deb1014183b19291d8110da175c19be1c5f0eb013f314c11c0080b00891049104079c4819dc199728669e938b0613552a8d9f1f0c260d8f2a0b9aa798c299842a3423c597a798b02af42b37980599092be22f6b936897e62a6731a098369e4c2b7732239d39a2072beb3220a089a3052b1b334ea1c7a44a2b7733bba128a5032b883378a158a5b62a2b337ea1f4a5af2b773242a2b9a6ea2a143003a202a8e52a6628dd9f9ba4e82a909fd1a0cb21652ccfa387a0502d052e33a2129cea31da2fc8a0158d5e335a3016a0fb191d3452309d9ea71b62347a305f9bdd188b34643096994919d234893001983d1b2b359e30a295121b423587308494d9195c3581300194041771358530f091301875358e304b91b216f8344b30c38eb50bb4307f2d8b90169115237528e5844f0a84a01a262e0b691521a09525e10c1416959b9d2425100a1813993624001289191d91fd2357132f1b6b1574233314d41b5b19e022ef13b91be21a7922bf13be1b041b2e22cc135b1bd21bdd218213fa1aef1b8a210713881a791b1721c512431afc1ac2205212ec19141b8220ed119f19b11a4320d31166196c1af91fa411d418171a901f3a118318c7192d1ff2103b18e418531e0a105f176f18bc1de20f8a163918501dac0f7116b317101da00fe6158c17f61c4d0f2816fd179d1cb40e3115b516d31b0080e3087c017304f39c39157f0b0229f59fd0965498b02ae1a07197f893d92a76a152951d94fc2a529faa9b2f9ddf2aff202b9c949e7f2bd82aae981b9fe42bdf2e809ea7a2e32b383115a00ea3342b2e327ea0c6a4452bf7321ca1d9a4dd2b1c337ca1cda4d12b0533bda10da5942b4f32f9a011a5dc2b8730bea232a6b62bbf2ba5a04aa68f2b440dcfa190a64c2b20a41aa18ba4672b76a33aa0da25972cc1a1409f1a30e02e13a198982233a830699f609a3434cb30fe9f2d0da234ee30379e3816e234fc30729c261849351e31e59b061888352731389976179c350a3107976b17b83513315494a419d8352031d2922818b235f0306b8f80180835b2300b8c31192d2ffa2c9595f290c0949e270d913e0a91a010260f85a8153aa007267a0475162c9d3d25450d48184e9aca241f11281a0e912924c312b31bc515122478136e1c131a0024d1135d1c541a5a234c13f31b221bb6222213301b161b162280127b1a3b1a3721a411fc19c319d320ca104a196b196b20a5100c1991192d209810d5183b19d91f48108e18ef18661f1a104b18a318c41eb00f93175e18601e4b0f3b172b18ec1dfa0e75160218b11d340ed8152b17881d360ec3156516671d990dc31430163b1d9d0b8213f2144f1dd406ba0d940fce1c0080fa06d081d001219dd0908d98f628759f4c9a189c2d2a23a0139abe9bbb2a68a1369ac79c1f2bdaa1e49a9b94882bd0a06d98b297742b2c968e939f99942be827be9827a0042c2c2d499f8ca2f52b12304ba23ba5832b29313aa182a4fc2b98313ba01aa4e52bef3058a0eda3822bf82ffb9f82a47f2b892b97a158a5112b131dd8a219a76c2bc0a2d4a21ca8042b63a48ea006a8b52adda26c9b35a22b2b38a3f49f82291d2de0a11797a93142303fa1839956340d311da19f92c8342431139e289544355e31579e958c7a357131c19c8c0cea35e131699d6b150d36bb31ed989b195c36d23151976d175236c931c092ab183a36c3311c930e1a1935d430e5935a943a2c812b72969a8a2f9fc2269e8e90101da09a25aa042e18f39d98253b04bc17ef9cff24200a3f183c9ba424c70c9c1803996324bf0c18196b9441241d0ed1196b0ab8234f10f51933152623f20fa219c417f822710f441938186922f40ede189c17c8219a0e7a180f173a21810e2e187217c720ed0db617d4166220be0d48175a1613205e0dd216b416641f150de3154b16f11ea10c1c16f515921e590c4d159c15061e4b0c9e146615cc1d000bff1333156d1dce0ac3136e14181de10aab124014e41cfd0893113d13cd1c1507870d490d8f1c00808f041c824609149df095b099d12854a0a59b7c9da72afea01f9d909ede2ae2a1c29cbe9f532bd9a10c9d289f642b1ca4659e23a15f2b5ca42c9c5c9b9d2b6fa1f696be9cd12bf70d2e99989ffc2bd4267fa192a4bf2bc42b4aa155a4802bbb2cee9fd0a2162bca2b509e7aa2fb2a5e2799a0a0a42c2bbf93d4a2cfa7132c07a212a221a7312beaa3aaa024a7142b5fa440a1daa68d2a27a42da057a6672a81a11d9f2ca41f2b90a1c39b6f2cfa2db4a04596fe322531409f21991735f23126a0568c8c351232289dc812ff355332ef9cc4127436cc32799bd21593369d32229b48158e369832c399118c8e369832369b7918713667322f9c48153d34a930b094e314bb25cd29bd8ec51b2b9b9926ea84ee18f39cc025a484f5184b9ca725f3847619cb993425a3842519f396e7244c841019d094c12410847e1986916e24ca03ef18c18a102497036718fa0960231a090c181910be228608a01772125d22ff0a33173014e821620ada16eb137221120a9d16ce140121b10955168b14bb209e090516471474208909aa150c1437207609b7149f13ba1f0f09fb141613301f92080514fa13701e330897137213021e2a086f11e111a31dd60458116d10741d9301910e3410071d5f01750cc20df71c1d076b0fcf10be1c00807301538921824f9d1d94819af92839a0859bd59cb92abda0d69b099ded2a7fa1c09cdd9e5d2befa1969d1b9f862b66a26c9e80a0ae2b2ba4179e47a1dd2b7aa4389d94a10b2c6ca3ce98d29de32baea1789fffa25e2b0a9ec7a1dba42d2b18936ea1b5a4682b519b5fa1bba4e02a3ba17da118a5f62a26a474a1e1a5242b22a41fa024a60c2b47a3e29f99a5bb2a98a3679ec5a5b12aaaa3ba9d48a6ba2a4fa3889d16a5f929a1a1939ec5a0ce2a72a15a9b732df22eaea05b9c56341032409ff3970336e1320d9df1925a3629334b9d7313e2367d338b9cb31515377133a69b77152137a733b89da812503783339899a31515373433ff97c819f931a62f54981d0b299d37280c95e61071a0d426ea953c1107a0b026ef93138a04a09b256e938713e79db1259b8dd017c09a4225158a48174198c924cb890d183e9684244e89571711941e242e83ad1659905723ef8242176c09dc22c102d31630099122af027f16560f312290024c15e30eab218d8206156d0e28217a82fd13080ed6207282ab13b40d74205a820012630d3520a886b411160df31ffd815c115d06421fcd81fb0f1806f31e9e815c0dad054c1e8e81cd0c1105761d8381890cc304fc1c6d8456098a04c01c40847e039284c91c66811009ae04571d0080a989678df781b29d4299679deb28a4a0bd9d629fb32afda0d69d10a0762ae5a13b9e62a0f72a5aa2989ea7a0362beaa27f9efba09e2b44a3bf9e6fa0dd2b25a3c79f7da1da2b09a3a89ea1a2072c42a3dc9d8aa1972b95a2ca9d00a2802b26a3c49f44a3362b05a412a02ca4282bd4a491a04da55d2b39a530a065a5f22a46a445a07fa5d72a1ea4b3a087a5a52ad7a354a06ba5902a19a39c9f8ba54f2a8ca2ce9e97a53e2a2da2de9d29a5cb2959a09f9e98901c2b419f849f17305b30929ed8996b354033209d000db2360534699f6d12093713342c9d7d1955374834649dd5177d373034639a041ce4372f34e596341dbf3603339696f818c72cad2cb098a21777a031278e957b1747a0bb2644922e173b9e4e267891cb16989c9b255f901118f69b82250290c718c4994f25808f7b18739802250a8d21188996ba24938c91170a965e24118cee16c493dd23558b5c16fb92e422b28ae814569242226f8a6713008f9d215d8cf8127a914521598c27112f91dc203a8c0c0ff59086204f8df10b83923e20018d870b2392c81fcb8cbb04c691521f708c7b046b91ae1e218c38040c91661ea58b0b84d08e0c1e4a8be3837c8ec11d0d8bbc8967906c1d3f8bb68c3a905b1daf8a918c078e591d32892189188b821c00800387068ab801309d95996e9dc0285ba02a9fa0a0e62a54a1f29f68a11b2be8a1109f4fa15f2b1da2ba9e1ea1892b8fa2049f57a1902bcaa2a89eb9a0a62b5ba33d9edda0aa2ba2a3f49c6c9fb22b3ba47d9c35a1a32b72a4229d12a3782bfba3ce9d05a42d2ba8a30c9d3aa4ea2ae7a3b49d76a4b12ab5a3b09d75a4752ac0a3fd9ef5a4482a1fa3a99f01a51c2af0a272a07da5222a9ba223a083a50a2a22a2c59e4ca5f129f3a14e9e36a57d29af9fb09d94a585293fa0d49d299a782b3d9ff29fc030f430e39f2f9fcc3518341e9d569c5d377d344e9d3693bb378d34669a600cf1378834119ccc8c0c387a34a099cb153934c631e999d68b7421e8293b96bb18989f2f27a19576165d9e4827a59813187b9e3f271799d1168e9d1126f495d817999c9d25e995af17969a2125d0934f183198b824c491a116c4975e243491211691950624df90c8144e95ad23b1900313729640232691880d30979e228a91e006a0961922289179863f96c021f290b18cff965121a490778c9d9606214c900d8f32969620ac909e8eae962d208c9060904596d61f2b90fb8fc195311fd98e838fab948e1e678e90906c94351e418e6c903c94c81d3d8e59902b94b11df18e0f91d993351dcd8cc18f5693961c788f408fb990bd1b00809689b08bb581539da69abb9e04298aa09f9e4ba07a2af4a00a9fd1a09a2a74a1459ed3a0032bdba19c9e10a1442bffa17f9e14a1ab2b6aa2349e5ca1a92bcba2629e82a1a82b1da3e49d38a1c62baca3fb9dd0a09f2bdda3a39c5aa19f2ba6a3839d84a28b2b3ea3f89e8ba33d2b0ba3b19f48a4082b0fa38e9f79a4b52ad3a201a06aa4622a89a240a0dea41d2a67a21aa029a5cb291aa2f49f30a55a29dfa13d9f2aa538294ba1619e26a518296ca1299ea7a5282948a27e9d08a5df28cd9fb59a2817ef2a339ef29aea307230c49dab8c43360734e79e8913c537da34c2a17c19043804350ca03c1818360534429d8618692da62dec9ad715ed9bc8265b98301624a0342767955a1b77939c269d96f319159650268e92511a36983d26f99237190c980026b1931518ce988a252793e9147d992d257c936512e899b7249592d80e129a1924f79250089d99c423709213884a9952230c92b58df998e122bc9171904099412225922290e698d52112926b919298502185927f92bb98eb2053921992679875205f92f19216982320cd918492af97c91fd890569352973a1f8a901493d597fe1e5b90d193af97dd1e3f903c943297411ec990159420977f1db190ce94a896231d749035941c96051d5d9010946095981c0080ef0c790dfe81859e0e9d1ca09c28c6a022a049a1722a25a1299fe5a0472a82a1749e79a0812a76a1a89dff9fbc2ae6a1959d5aa0f52a5ca2649d51a0252bcea2b09d97a0602bf2a2369d4ea04e2bf3a24b9d6ca0462bd0a2a09c77a1302bc5a2629d83a2ef2a9ea20b9efba2cc2aa1a2a49e6ba3862a6ea2359fcca3522a76a2719e1aa4082a6fa21a9f4ba4be2945a2069f88a4a229fba1dc9eaaa44a2998a1709ea1a4e62813a1b09d8ea4b628d9a0239de0a4b72845a16e9ef2a4c728559f7a9cf3a3ac286fa1358c388e3a28b69d6913782ce42dcf9cbd8cee32a031e69baa15de3314325a978519202e672ea498ba193d22ae28829e641a1f9a3a270b99361d319d2e273099b61b3a9d0f274695b6196b9864266894671bfa950d262994a31a849595255694021a019511254194f9189496e024b194af16b7977224c394f81362982324bb94690edd98c323c694ef87ed993b23d8947e92299aba22e894c894ef9a4222d2940c96019bac2187942597989b2c212b949e960e9bce203694e0969a9a6220f2932297999a1920ae93c2962f9a7a1f3a9356966799fc1e5992029611998d1ef091a9956b98f91dc5915e952b98a21da79124950198431d889159959297d61cf690fc9420976b1c4a9094948997f5194b069715de174b0e509e6c9f3da0832853a1e9a049a3fc29c0a0caa082a2042a48a1e1a0aaa2892a46a105a098a1d02a6ba10d9d11a0052b0ea22b9c459e5e2b59a2149aba9d6f2b0ea22e94199c1d2beda146942f9ceb2a9ea15694489cd62aa9a14597459eb12af6a1769a14a06c2a16a2cb9b7ca1242a30a2369dd0a2d0295aa27c9e35a3862990a2b69f40a439297aa2939f68a4072941a252a0b4a4c228aaa188a01ea5a128eaa02ba020a5862845a0d89e1aa5652812a0f79cd6a45a2807a0419b39a412281aa0529c0ea503280ea4f39c19a2f7273b9ddd18ad15e8283497dc8a10206f28f398ed121b1db3289d9a631c189a5926b795bd1d2f996326f290181e990ddc25c690e61d8b136c25b0935d1d140df425a1945e1d4913ff25f793271c7e8cb02550942a1a2d953d253195f41524999d24a095e508439b38249195c691419c0024a295df94c79cbd23ad958e95cf9c092347951a96d49cbe2226954497b69c012230952998ef9c912144959a98d39c052131959498a99c9920ee949098499c3b2090948a98f59bdb1ff3946a98a09b551fc7945098f79a0f1fbf942c98ad9ac41e9494f4975e9a741e89940d980c9af71d6094c197c7998b1d47947f973899251d03938b976899e51c5b93d597e999541c0000a70f83112005d49e9b9fe1a00f287da0afa180a3d4285ca1e7a1c1a39a297ea197a198a3012abea100a1bfa29d2ad6a1619ee7a0352bd6a1569b9d9d802be4a04414688f942b49a0101cc81a352b2ba0df1ce91ada2ab5a0c01af718642a95a17617f395032ae1a16d94679dd529f4a18c9aa4a0ad2925a20f9e86a27f292da206a02ba44d2949a2a1a090a4f9281ba28ea083a4cd28d7a11da0a5a49628a4a14d9f4fa441283ea1cb9deba30328bfa06c9c4ca3662768a0799baca29226c99f109935a24e2652a03e9be1a2ff256fa15a9b89a20a26079ff998e5a167266ba3548c3ea0d02547a11315879df5249c9b81179e9c3d254d9561206b177825ec963321261e562564912121c71ecc2542910621631ecd25328f1d20b51ce3258e8eeb1eab1bd3250b8eeb1dce186825f38f751cea111d25f494b1148796d7242098d3966d9d81242298dc994a9f16242598c39a429f5923ed97929ae99e8222be97de9ae69ecc2143971f9b589e55216497a49ad29dc5201d979b9a749d7820a496369a1f9d162044962f9a139d8f1fd095c599bf9ce01e04955f99739c731e799427990a9cef1d5e94fc98da9bc41d2494e098379b5f1dc9939098159b461d0594ab986c9a011daa921498bf99f01cae91f296b798801c6b873315c4160515c59ff0a148a32e28c5a011a445a5842950a1f9a2bba47329a7a104a3b1a4c529f5a1eaa2a6a4622a5ca194a053a2da2a81a0fc99bd9c452b429f6b1e621d662bd39e21220222fd2af19e8e221923fb29789f1222ee2139292ea04f1f8c1dba289fa03b19db8f7b281ca10d991f9f552896a17e9e21a24228aca17aa018a45f28faa1b8a123a56d2805a297a2f6a5642811a223a321a65b288fa1a9a205a62c283fa1c5a19fa5aa2710a1b0a016a54727e1a013a0daa4d626e2a09a9fe0a47726bea0669ea7a4a42562a0669d0ca40825f29f659b44a3cf2430a0479517a09324939de21893974324569a0d1f3517c0233190562288203c242e10f1228121a7241a13ce22dc21c4256f11c821eb207726bc05b220091fc9266f8ebc1ea01a66260095b4195895ad2576977509099c2a25129867946a9db6246c98ef98ac9e6624e098bc9a569f17240999159ccd9f8b2332996d9c13a0ca226f999f9c24a007227e998a9cca9f7b216a99619c579fe02068994a9ccc9e67202199089c519ef91f9498b39bde9da81f10987e9bb19d3c1f2197e89a489dc31e1296a99a0e9d791e9295099a969cec1d2b95da993f9c871df3946c99d29b4a1de3943a997b9bea1c4e94e298d29ab81ccc930d98b299d11bf08991140017611738a1a3a21fa4fe27d9a08aa3f3a44f2816a28ba4efa5022980a291a42ca6a1292ca26aa4f2a5242a50a1e3a13aa4c92adb9fa398ae9c9a2b409d0c22b2222f2cb398ac260f286d2ba999b52641285629c79cc524a325f2272b9fc2209a20a226a1a0b61430999d267da10c9f92a2aa27d0a144a1dfa4d127a8a1e0a117a5b02786a16ea2a1a579278ea1d1a210a67427c5a1eea249a6a327eca10fa32aa64e278fa111a351a6132730a1bca231a69226e0a077a240a60f2664a0e5a1daa5da2502a049a1a1a57025dc9ebc9f6da4cd248d9d7e9c87a20324759c5a9556a0f922669aee18039df9216796071ece1468218f0d3222d620192204178b24312486230c172825a0240f25211416250d257e2645132224c22321276185d0206120b826ad940e1cc91850263098b009499a9f259f99969a9f9edc24f599c39c63a02724bd992f9dcaa050236d99729db4a08e2225992e9d6da0d521e298ee9c0ca03421b3987c9c6a9fc4207198519cda9e4c201a98229c999e0820de97d59b489e7a1f43976e9b039e281fe196339bd29dbe1e3d96f29a999d7c1ece95929a3d9de81d64952b9abb9c811dfc94b7995f9c1c1dbf946599179ccf1cc4948899f29bac1c68942499da9b111da79302997b9b261c00001f127f13f3825ca084a316a58127b7a18aa4e6a55a286aa198a46ea67828a1a1dba4b5a6d22839a2efa40fa72d2961a2fca4ffa69b2954a1b0a356a5a62a329e561ee41d852c9e19e0296c2b9a2c8c203d2c6d2d1c2819177a281e29b31e179ef61c1c1cc12294a1bea019a490242fa232a3a0a5d425c2a285a4c0a652278fa2f3a43aa7f62769a215a597a710288da207a5c5a7272857a2f8a4a0a7132837a2f5a4b6a7b627f8a1a4a4a5a7f92618a26fa43ba7412663a23ba4e8a69b251da266a370a62a251aa203a301a6e2246da158a2baa5702446a007a1b6a41c23ac9d1b9e59a39d20199b520ce99f251cee91f620961c01154b180a250625051c561db2274b289820921e70282129af24421d06284f28e327a117d52409244b28e296fa1c381c8b27509bdb966b9d2126199b6a9d18a10b256b9b0e9f0da22424e29b4e9ff6a14d23d39b069fcba19122439bb69e87a11a22789a349e2ea19621e599189eeba04d215a99cb9db2a0d220e098759d66a06620ae981e9dfa9f18205e98a49c339f651f0c98709caf9ede1e9b97079c3b9e3b1eef96b19bc09dea1da296359b639d8b1df495ed9a089d551d8995679ab29cd71c1a95f499809ca31c0b95da99489c481c6b945a99d79b0c1c50937e98759a011a3916921d1320270cb29f6aa1cca2fa259da15da489a5e227d4a18ea4efa5e627d0a196a429a6dd27f9a18ca45fa6012809a2aca4daa62f2892a3eda409a70a28b8a2fda557a76c283ea162a425a5672c82265b2e143078275aa176a392a5da24d0a000a6a0a8c627d9a2d6a5cea8e32836a410a691a8a52829a3c3a55ca81128fba2dea550a81a2818a3f0a579a85428fca2f4a57ea85828c6a2aea55ba82428a1a266a536a8db2733a20ba50ca86827eaa1fda4eca71c278ba1b9a4b3a7c32664a17ea479a748260aa14fa43aa7a225cea0e8a3dfa6bd2489a02aa37ea6192376a000a382a65821b69f58a1e5a4411c159d7598f19fe89639978224f9248da27320412af92b61a2a7234a2c612d8524d920162a282bec29028e5324b0236f297f991991a89b9527419da09f16a33026c39d8ca04fa3d324f39c3ba0e9a22324639c1aa0aaa24b23359b809f46a29122d49a099fcea1ce21a49abe9e7ba13a215b9a519e06a1ca20569afe9db9a08020eb99a69d78a027208599529d32a09a1f0699f29cbf9f001f8e98b49c4b9f6a1e5e98639cbf9eea1d26982e9c439ea01de697ea9be09d6b1d4897b09b869d141dff964d9b759d051d3596ef9a349dc61c0996e49a089dbf1c3495459ad59c6c1cfb937b98af9a3f1a0000801508199c0da99ea3a189a3562575a1baa41fa62e2793a1cba458a63727b4a1cba454a61a27a5a1c7a449a6da26b0a19aa439a63926dda14ea4e7a58f24239ed99fb1a1f51f73035f0b6f10971ba904e9102885f420569f34a2e8a437262fa369a687a8e527f2a3a3a6a7a85e28e4a361a682a83c2887a320a66fa8182863a301a664a82028f3a2c4a543a8fe27cca2cea552a8fb276ba2b3a54da8b32732a275a538a86c2738a257a506a81127f2a11fa5bfa7ae269ba1c3a454a7312645a1a6a42ca7d62503a16ca409a78825e8a069a4faa654254ba182a400a70c25cba01fa4c6a6d72471a0d5a299a55223179e50a29ba56522479f04a5b3a70025861e0d276c271da8c72808301231b32540892b247923072d0d9da7a1d9a4bd26a59d49a138a4cb23b19cdea0c8a39f225b9caca0c9a33722649ca3a087a3de21859c6ea03aa380211f9c42a0d1a22921039c0ca069a2d320489b7d9feea16f20bd9a339fb2a12520509a9f9e43a19c1fbc99279ed4a01f1f5d99ae9d6ca0791e3499569de19fd81ddc98dc9c0c9f581db698839c9e9efb1c8798459c729eda1c5398269c249ebb1c2f98fb9bbf9da31cd397a39b7b9d891c00975c9b3e9d721cc296429b1a9d751cbd95f69af09c4c1cd594a4994d9cb71a0000c9103118ab061aa0d2a1a1a3cb24a3a010a46da5c425e7a05ba4c2a5ee2501a15aa4bea5be2542a14ba4d6a57f2538a1a8a34fa5c4242fa1aca1b4a3de22ad9c1f9e5aa06321e69b5a9f96a02a247b9f86a3d5a4b226f2a18ea589a71d2824a305a626a83528efa2f2a532a80328b6a2f7a52ca8db275ba2caa520a8c32728a29fa503a88b2704a273a5d2a71d27c6a13ba5cda7c32691a13fa5b5a773267ca123a59aa740265da12ba5a5a7dc257aa117a590a77f259fa1fea48fa74f25bda1d0a46fa70225c3a18fa443a7b9249fa15ba4fda6592454a14ba4a9a61c2404a126a4a7a6e8236aa0cea35aa667233aa0f6a383a66023ed9f78a3c3a5a522579cc09feca10120580fda100011b6187e070a0165958e10de99139e8aa18c1a6a9ca8a0a1a3601f9c9c30a103a49420ba9c08a111a4c820ee9c18a1fda3c520f29cb5a076a38d20b19c71a0c9a24720009cf69ffda1d01fb79a0f9f6fa1571f639aa59e0da1e41ee999289eaca09f1ec799d19d61a0551e84998e9d2ea0ff1d60993e9de09fc31d1099189d7b9f971dda98d49c439f461d8898b99cec9e231d74987e9ca49e091d2b98349c3d9ed61cb097159cde9d621c2d977a9b789d2f1cab96669b489dd51b6996039bd09cae1b2195e0991a9c741a0000b614a2186709cd9fa1a241a4c424eda0aea414a644269da032a48fa5792588a0c3a341a504256ea0fba2b7a47e24519fa9a1a4a36623869dd6a078a27822219eada18ba3432410a00da460a52626f0a0f7a4e0a68427aea169a5d9a70b2858a29ca531a8022887a2b2a530a8c42742a2aaa538a8782710a2afa530a84b27dba197a528a8ff26a9a173a510a89b268ea146a5dda72b268da128a5a8a7982584a1f1a47ea7302564a1bfa41fa7bb2455a19fa400a7652417a166a4d4a62324cca032a48fa6b02357a0f2a340a66e230ea0b3a305a6422300a06aa3e8a51f23ed9f4da3bea5062308a036a3afa51d231aa012a3a8a51523fc9fc4a272a51423969e2aa2e1a41423fe9b87a0bba2ad21e5975d9d26a053206e98bb9da0a0c01e679af49ed0a12d1d519cb79f51a29e1c399cc39f66a2831da49bf39f80a2411e3d9bfb9f68a28e1e4a9bbc9f31a2bf1e059b969f14a2ef1e219b5a9fe0a1d11e9f9ae89e87a1a21e309a849e36a15e1ed299239ecaa0111e7599c39d7ba09c1d4499829d3ea06a1dfb98579d03a0101dd4980e9d9f9fe71cd598dc9c4f9fcd1c9798a69c039fb31c3098689c7e9e8a1cef97319c3f9e3b1c7097f19bbf9db41b2f97819b779d541b0e975b9b619d981a8e962f9a869cfb1849a6599d5ba0f91d8e2b8c1f70231d28372f46245d24ca28d02f7321032322296030c022c223e829423088226c235c28e32ec7213a2174233c2d9b1f461f211b4f2bb91d771d690f1228ef1c4f1d8e970826541ccd1fb09def23fe1fdd1e12a074a80daa26abf2a908a834a410a827a76d99e51df71e2aa46319ec2185267da407294f24122ee1253b304f213f30352cb530ce22cf2fca2d1b2f09250b2bcc2ec92cee2031adca332f2941244cb442377225e425bcb5e7376b262e2674b62c380a2675259cb59138a725e724c6b58a380825aa2422b68f389e24452465b58d3740229d242fb47e36581fdd20cd9e25348f1c66205833bc2d9d1c62209a33a72c9618a21dc431062cfa910b9cd22c1c2a8b16311edc29dd278b1a6b240a277124931a5a223c24f222a91b902103241a239c1adb203f22ac21ae18ad1fd7208120b918fc1e6f203a20a018d01e682033205019c61e672032208d18661e3a202020c417091e1720c91f36179e1dcf1f6c1ff1166f1d4e1ff01eb8160d1d001fa61eca16e61c811e2b1ec616cb1c591edb1dec16901c271eac1dfc15721ce01d441d4515171c281dbf1cbd142e1ba31c241c9814d51a9a1c1d1cab14d41a721cea1ba414761a5b1c851bd4146d1a591cbe1bf6126a18051ac61b0395af80458ed2086c2bed2005233a28bc2ee621bd21cb281730d71e1020d12848304995ff9a4a2982308c99339c1b2923313e1fec1d2525023274217721ac130c31741fae21d09c6631a31cd11e3ca00030c78fc2955ca1c9a042a3bda4a3a414a4dfa99dac83a94ca752a920ac74a7bda2e1a26da525a2a0a3839b699e699eb1a1ec98ac2b19276430919cb42fe32c6f30d5a29b2e5f2f6c2cd0a4cda6242faf25d0a0bf28bf28f71bf91d2f2d182c9618461f222c9e2cf21dd61fa62b562c341eaa20722ab62c2a1d12207c2bbd2ccf1ada1d9a29a32bb1914296ec29092cf99f4ca50e2e252c65a20aa8a831d12928a050a4cc32a82da891089e3e32c52c5f90ec9b15323c2c2f9472a07a2d4b29a490679d842408251c162e1c04209722c818e31f59209f214e192720e3209921a9195d202821a1217a190a202f212f211c194b1fd420b4204119251fb320b3207e19421fa920c7206d187b1e532070209817121ef91f1720ef16bf1d801fb31ffa16801d3f1f3f1fa516591dd11e011f2016021d851eb21eed15b71c1b1e471ec015781cef1d191ea115441c761d9e1d4115101c4a1d4a1db114b91be61c0a1d7714231bb51cb51c7314ee1a961c741c8014811a6f1c4e1c99138d19aa1bea1bdd118718861a6b197a94d690bb945e0cb127e61ea520f9289c2ce2208c20332a382f6e1e2e1f342a9f30221da11d402af230501e6c1eb4293431731eef1d10285631961ed31db824b9319d209f209e22b530561f0e1e1e1ce0307b8a829ace9eaf2fb0a235a568a4b4a3ada48aa8a6a3a7a479a304a86b9f2831e720522173204e328724a227f025e8357e232c2e582a3c32b39ebe2ef52cba3015a26f30872e1a2bd6a1f430562d429c52a0c235382cf09f879f1437b12b249ca0933237a52e569491181b374f2dfc0adf1a2b37fc2d4b148719b437292e718ad6150338192fc2987a9f133808303a9e46a51438ea3055a164a60d38a830039971a17c33392d57940f9f2b33a12d529788a0d831bb2cd4910b9fbe2c6f29d88e2b9cd51d7f25961491138e9b35240d18fa1c151a9a23f2180620f61ffe223319d11f612086227918481f4820af2148181d1f53207f216f181d1f71209b214118cf1e4f2067214617461e0820e720ec16ac1d531f732049161c1d9c1e0a20d515d51c1b1e441f5915781cbf1dd71e1415221c731d511e0f15051c231dfb1dfa149c1bfe1ccf1d8e14491ba61c701d8414dc1a661c251d4414a01a391cf01c1914201a081c941c0e14441af71b631c4014021ae51b591cfa13031a1c1c611ce0110a18c5191d1c00800080b5841681d91d081c7b1e28261c28f71ec21ddc29252d4f1e181f0d2adf2f2b1d911def29e630d01dde1d162a8731441ecb1daa29c9314c1f27201c2922329720c320e52850323c1f1a1fa0286832b419f8173c2805326f9b33a0252853310d9e9da247282231948d099acc283e320a20da2038291233c620e225782a8433d91c6a29612c7c322a9ba82cb12d12300b9e0930862dab28fa9e5d31b72d920cf7190332372dce1297215d32072dbc16e820ba32012dba16b52166332d2d9c186a215933bc2c4e18eb2086339f2cb418e120c733f12c0d196720c433b72cd0156f1e2434fb2c2c127d1a2c341b2d478cd8941e347d2de1948f9ee233782dbb93559ed331a42c0a93a29e2f2b3729de90149d2e98bf25f60eae90539fb324cf15011c308c1f244a17911d111ba8230c18831ea31e2c23e217b31e291f272210183b1e271f7c21ac17e21d071f1721b816681d8f1eb2202116251d731e712050161e1d5f1e6320f315d51c231e3a205115641cb21dd91ff314261c301d6d1fdd14021cea1cd71e9f14831bb11c881e9414381ba01c321e4514c81a571cd01df413681a111c721d81131c1abd1b2f1d4a13be19981bf11c5713bc195c1bd51c4c1329190b1b7d1c7812ba184a1a591c3c12f4173319fe1b008000002a81a281fd8ec919511c0a275720e51a321c1e2a9828411bb41a6f2a782d4e1c6e1d962a6f30411963176e2bb131081692170d2bf93182199614722a3e327218710e642a7f32fd130c95422aa632f093c39be029b932969b55a0fd290033cf9c42a2722af332bf9ce4a2722ad6329394079d0d2bc533a49db9a2162b9833dba0c3a1b52bd631afa15d25b92c842d2ea35a2dd92da421769fb4304e2e29a4bb9b6c31562ea4a22914e2312c2e699e1f1d8d32052e699c751e9433ca2d82947a1fe633822d0a882a203534b12d4593651e6c34d02d698e7b1c5a34b82dcd8da0186a34e22d62930e0c8334042ea6946c986b34cf2dbc94749c4d34e22d4f8c82983832b72c0d8411981c2a0429988dbb9b4ba1c825680de689e0a0cc248114141bd1983724e514221cab1496239216551df91b07239816961dff1c63227d16441d681da721ab164c1dc41d882136160e1dbd1d5f212016ed1cac1d0c219415a01c831dae20f4144e1c741d6d20bf14221c231d2b20cd14221c1c1df01f9f14dc1bd81c861f7e147b1b9b1cf51e42141f1b841c8b1e2114af1a341c171efb13071a801baa1d68136919fe1a481d7b1205197f1afb1c1f12b018eb19d61c0c125f18f219dc1c371145181d1a8c1c3110bf158b18791c008024008480a684af999117821bfa25619b2e1d1c20822ab61e438c4f0dd82a212925955d0daa2a5e2ea18ca68dd72a2631ec8c8214ff2ae131608d1c98592b5c32fd96e29d862bcf32949ceaa0322b0c33f49d30a2b42a1c33119e00a3d12a3f335aa08ca4362ba833a6a1e3a5762bc33353a284a69a2beb3314a2b2a6aa2b6133dca278a78d2b0f3157a0b1a0d92b882a75a26d284c2dc09fc5a3f42e692e4ca5b49d7631f42e25a1b70de932da2ec89f1d166533b92ebe9e5b16cb33b72e8f9cf5170e34842e2f99a21a6f34b32ead967e1acc34942e24961919ca34a62eac959615f134c22e7895388c0635b32ea994d398f234c22e5891bc97b434932eaf8c6492c631e02c008e5194ae277128888d6d95fca03e25eb0daf132fa0ba248412c51b36998f24de14371c17121f249b15b01cf31850239516c31d761c1e239d16c11d601dab22ec15321d141d0b228115141d321d9621ea14931c4e1d17212915631c2f1dda20fa14221ced1c7c209314cb1b8e1c25205814611b421cc01f2214f31a2b1c381fb413801ad21bc51e3e131c1a4e1b531e8f12c8194a1bd91d12127f19f41a941dcd1118196c1a671dcf11c418421a441d6711b018da19061d8f116418a819dc1cee104d18401adf1c4c0fc614c016cb1c0080000023805180819a6911fa17d925af9fa39868987e2ab7a0c297708dd72a70123d9bbb9c3b2b5828e69bf79ab12b9f2e3e9b0598c92b65319496bb99862bb832f398129cdb2b0b33ef9caba1092c8733ac9fc1a22a2bdb33e2a05aa4852bde3324a29ba5a02b1e34c6a2f6a54b2b1b3484a336a81a2c2f34f8a2e1a6152beb32baa231a7da2afd2e93a0a9a5c02a4f23eca0ac126e2cc8a494a02f2c522da8a4ae9e1631f32e3ca40c9de532502f14a4cd950c34ef2e51a0020d5d34022f259de40c91343a2f859c9613ee347b2fb69a58134435922fec99171351355c2f97988e0c78354b2fe6974e0c89354b2f8f96df8b7f35552fd79515120835072f01933995c030a22c7693cf987a200428598e889706a3ac25a584500a33a11e252b0a3510999d5524770eff16269aec23fb125b1a0c8b612338140d1c831813235514441c591aa1221714261c231b34224c14e71bcf1bdb210914e81b001c8e21e513861b121c432152130d1ba71bf2200c13641ab01b862098120e1ad71a4e203112be197c1a1520e81181192d1a901fce11f618df19301f7811a2189b19dc1eea10601817193b1e741089177a187b1d471009173718041d0210e1162d18d21c161073162818a81c1410bf16bd18611c670e52150218121c008000009d806d81199afc0e330a582622a03b956696c22ab5a105981a973c2bc6a11198fd8d712ba297da9c209c5c2bb828fd9c109ebb2bee2eca99ff9d8b2b9831839c90a0fb2b47330d9ed6a11d2cc7338c9f7ba2602c203472a1a2a4562c6534f1a15ea5ce2b49346ba266a6e72b603474a266a6f62b2a34d6a225a77b2ba73178a2f4a7772bd02ad7a2daa7112b98a052a220a5112b07a57fa07e1f372cc2a40b9fc62e172e1aa4bf980e33b52f9ea0209c2b34c42f17a1599a9d3408308e9f8f93f134e12fbb9df70c433507300c9dd90c8b351430569b890ca83525307e99840cea352d30d7978012f7355b30dc95c70bc8352030fd93b1175f35013073914517ef2f812c169664942c9fc5273795a39701a3b9259090f7104da18a257b044615fb9dea24650f7f18b19a92244a118e1a2a8bf323a612bb1b7a175f23bd137a1c2d1a84232e14871c601b1623b313381c981b9922ae13aa1bae1b18220e13dc1a4a1b2d2122124d1a151ab2209911e019301a452048112d19c9191b204311f1186b197a1f7810a8181919091f49106718ce18701e0010c11729180f1e9c0f5617e617951d890e8d16a117641d580ee415bf16381d850d5d15a816271dd40de1147016fc1cbd0c4a14b915e51c2b098d0f2012861c008000008f81a383139b9392fe95e7265fa0cd9b279e5b2a76a0989a499c5a2b97a28e99479b882be6a17c9cd599f82b539b0d9d499ee82b0527139a21a0fc2bd52d619af2a0cb2bd631c89f90a30a2ce6329ca00ba4cb2b2f348fa1e4a40b2c8b34cfa074a4d42b76343da1c6a4492b443456a17ea6c02bd03277a2fba5312be72d86a3d6a6772b2f1c7ca30ca8b32a28a474a384a9ce2aafa497a03ba61b2b50a592a00d28b02c11a5059c9431792f3ba34a9b8134793023a1ac9cdc346830eb9fe69b653590302c9f9c98c335a030799e45960336b430549e808c3036ab30589baa128336be30a898a515a236df30209543159236c53041932f17923544307595d094302d2b2b6c9787947fa0bf26868ec60ab5a1a025ba045418ea9e30257104fc17329ddb24320a61188f9b7924cb0c43193d982e24970ead196091f3230b10001af9105b236c10211aea160223d7104b1aff17a2229810e21958181922361067198218a221da0f8d182a181221870e4418a517a620ef0de1170e174b20af0d6d178816bb1f670dff161d163c1f3e0d0f16bd15ca1ecd0cb3152016371e690c5515ad15c31d3a0c8e146415781d9d0acf138014061d650aa0135f14bc1ca80aa81244149f1ccc0ba7115f12901cc8066f0d630f6b1c008000005b827e85229ba794ae97c6262aa0b39c6f9ed02ab7a1119d659e622bd5a2809c919f9d2bd9a27c9dde9eb92b80a5299fa99f832b20a26d9cdf9d182c1f2470945f9e612cf12c299b34a14e2c6d30c2a0bca4292c4c3231a264a51b2c243336a29ba6362c143309a257a6032cdb31b6a125a6fd2b312e6da205a68f2bc22213a272a71e2bdda2a7a17ba7062b98a416a4b4a8552a91a55da18ca8732aa0a3f6a051a3832a4ca3be9c202c7a2d66a2ce9977335c3079a0b29c4035ff30d0a08f99e4350731a49e119635364131549ff29571365331699df78cc4366531ae9d7a8ce4366f31699b5395ee363f31bd9c248cde364231989a760c13356330bb95868c56281a2a549410190b9f6526cf8b51174e9e2e25898bf8196f9c1925ac8ba2190c9abe240585031a1a9781248684ce19de94522434048b1993911f24f6032019f88abb2397093819c71011235309da186510af22dd0b7a18d1123822390b2f186314b721970ae2171d143721470a9117f414e220e2097a16a7149720cd092c166a143b20ab09d1152b14fe1f88097915db134f1f250977145113cf1e9c081414ad12361e4008941282138c1df6046111e211501df80463107210281db181c00e4910d31c9f017f094e0bf21c3c04d10db50f9c1c0080000066014483a49a6592d9956c2656a0119cab9db52a63a1419c5a9d2e2b69a2159d11a0b32bd4a2a39e9ba0dd2b5aa3019feaa0162ca6a4a89ea89f152c35a4ff9f81a1382c6a9bea9c78a1122cb526389e56a2ec2b662c14a13ea4252c9f2d3fa24ea52f2c652d0ba288a5c82b092a3fa214a53f2b611c34a366a6822b5ba2ada258a67e2b31a4a9a1eda7f32ab6a4b5a055a7a02aafa419a02ca7b32abda578a12fa59b292da419a0789e652a83a3889c7c2e542e44a374999e34593127a28b9a2136db31b49eb49a7c36cf31419f8a99f4360232909ea79539370732799db9928d375432319db99590373332719b338c843710321999a018773427304998079bac9843286597e00aa1a042260c956f1138a029268f94a190cca029252693b613c69e6025bb8d1318119bf6246b8a64185d986d24118a1d185d962624b983a7171691bd2361830918218a2e2325039417b309ae22e40210170d105522c902b516990fc721a7025416f71171219e022915bb0efa208102da14510eac207682d913f50d682054821b128c0dfa1f3b82cf113f0d8b1fed856e118c060f1fca8107103406b01e9081540dc8050d1e8581b80c16052a1d8281840ccf04bb1c9d846409a104691c7c817d03ac049a1c5201f70be30a181d00800080e586a485d09b44988b9c702661a0939d1fa08e2ab0a1559e64a0ce2a5ea2bd9ec0a0452beca21c9f9da0922ba4a3a19f5ea1e32b2fa4ed9f3ea1042c35a4a99f32a2db2bc6a3189fbca2d72b40a37a9f48a12e2cd09f52a010a4f02b419bd1a086a4c32b7d9873a0b8a2a72bb0a03ca2caa4d52b64a30ea45ca6982bd2a422a3c4a7102beaa40aa4e0a7022b08a5cfa105a7b02a84a40aa1a0a6302aaba46ba034a6c729b1a4b09f01a54b291fa1339f4311272b0da0709d07313730a39f1a9be5354032269ecc9613378632509ecb938c37e432809e6b13d737ff32da9c36181d380633599a981b2b38f8320499431c2938c732b99853183331722ee19cbc11b3a12d2746997e1488a021265493ba177a9fef25639117176b9d3525969131189c9cf3243d901f18e89ad924f58f9f18a398b424468d5218e6967f24e18c92189d9418246f8c4a172d949f23058ca6166d93c6224b8b0e160790f621d18ab514688f7a21858c3513c8912121708c53117e91bd202b8c290f56936420088cc00ee8922120eb8c8d0b6192681fce8c180bf091e51e9a8c7d047e91601e3c8c35041291e31dc08b0104d28e8b1d6c8bd5837d8e461d658bd183578e271ddc8ccd892c8edc1cf98996890085141d8f876683a8844b1c008000803682fa83e89a4d984f9cf325b6a0c49f36a1052bf2a14ca069a16b2b80a219a0b7a18a2bb3a23b9f7ea1ad2b41a3879fc3a1d82b67a3159f0fa1c12b3ca4929e24a1a82b2fa4059e42a1992bada4a99dfaa1b62bfea426a00da43b2bf0a4f0a1a4a4d92a7da44ba184a4722a5aa490a142a56e2a4da460a0b2a59b2af1a4f8a04ca61e2a5da4eaa1a6a61b2a52a402a2dda6d729eba32ea192a6ac29e9a383a029a69e29c4a364a066a64b29fca015a0a1a536290da283a0e61a552bbaa09c9e3a33203101a2569e02378233a69d159dd837b533a59e68930c38de33849cb70c3a38f133209fe78c80380134629c2c18b737fb32759e9d94172cfb2b6098f117409dbd268795ba168e9ea4261f984a18e79d8326329b5d17579b4b256b9614183b9b37258095ec17d29aeb2403947e186c989c241a9227187b96572480909817ec95ef233d9013168a956c23e4905213bf9607235b91d8109c977c22dc90640df9961a227b90b5068d969521f0906f8649971d21ae909a8ce896d9206d904b8f7e968f20c790d38efb9621209e907b908b96be1f51901f900596ec1e168fac8fd194641ebf8e4d8f8d940a1e918e118f5d939b1d578ed88e2b934b1d758e3d90c692011d608c1d8e8292a91cd48fc68daa8a191c0080008035821783969bb498b29c6126c7a05b9fd4a0c92a47a1f19ec7a0db2ab9a1b49e25a1322b5ea2999e20a1a32bc0a21c9f97a10d2c00a36b9fdaa1112c66a3989ffca1f52bcba3ef9e1ca1f82b34a4479e20a1bf2b45a43d9ecba2522bb5a471a0e5a41a2bc4a4e1a0baa5022b49a4efa0cea5db2a06a4b9a08aa5762aa4a300a1dca56b2aa8a394a10ea61d2ad9a319a2bfa6f329c5a3d5a100a785292ca3c4a131a75d290aa397a166a73a291ca370a05fa7d22866a2979e95a5d82853a0009ef725fc2bd19f479cfe346132d59e8a98f7372634b79d881652384b34bea0d318a23852341d9c0e16cb385e34299ed61b7435ff31ca9dcb16be20762842980917cba17e2788952c1c1a97a92675998b186796d725ba945e1b229699258d93fe1af5956f25df92c3197795fd246992bc183a97b624e09205164a9878241f923714b397032474929d114f985823e0913a08c698e2222b92d48728999e229592798d6a99222255923d900499892100939391b3982f21269233915f98d320a392499218986520b29225933f9815202d92c5920998c01f209195933d982a1fc0904f931398e31e6b9009940598cb1e4a90aa9381972a1e5b9013949b96451dcd9059942396e51cbc8f87931c95bb1c21905c936e945b1c008000003510d7891d9d1f9c289c2f26cda05da0caa17e2a90a10da02aa1742ad4a1fb9ecfa0b92aeca1429ec9a0222bb6a2349ee0a0792b3ea3989ebda0802b7ca3c49ee0a05e2bd2a3299e7ca0422bf5a3ec9e0ba1442b9aa3fa9e9fa22d2b8ea35a9e2aa4212b60a3d29f5ca4c92a9da340a0d0a47b2a79a3eea03ea5472aada33aa179a5252a7ba3b5a06ba5d72975a3b2a0b2a5a32922a39ea0dda5532999a259a0e5a5072901a2bd9faba5b928d2a1369f0aa6ba2895a2e39fd1a59e28529fc19b15a359287aa0e09b34280e2c6c9ef89a19359d32039dfc9261385b34049bd515cd388434679b791b3c384f34f297e71a0730762edd9bf519979ce425ff98101ad99d7326ac9a4e1cc29d01273096e719ca963226f7928f1b5a96cc25ef92b91bee924525aa93241b5892d3249593071a0f959e2447942918639647247e9481168797d8237594981124996a23909424088299e3229b94c48dc7996022a9940b949d9ae821a1946695469b7521c3949596589bf7206594c996559b9d201f940797dc9a33202b943f97d79ad51f1994df96709a2a1fb39368968d999a1ea9928f952e99291e1192b9957b98ba1dad91639537983a1d309129950c98df1cb3917895b597a31c10911d957b97811c7890d0949a97af1a0000d100910f4f87ab9d9c9d039fa32624a197a0f3a1b2298ba1f0a09ea2412aa1a1afa04ba2842a8ca1e59e34a1cb2a01a2f29c3e9f4b2ba3a2d99bee9e902bafa23399489e8c2bb0a28c94729c3a2b87a2af97899c1e2bd3a23b9c57a0152b8aa3819ee4a2d42aa9a3d99f68a49b2a67a399a0a7a45a2a4fa32aa118a5062a6aa36ca13fa5ac2970a3aca1a9a55c298aa397a10da62a2964a3bea111a6de28e2a2eda132a6ac281ea27ba153a67e2863a11ca1a4a6722824a13da0afa68428f8a0bd9eefa54f2821a45c9ed6a40627b5a0d69eb01e012a749c30197332e230e29e490cd435e4321b9aa98cdd31c6308d9ad68b781c68287499e30a869e0c2587935e1d188ecf25f5907d1fc6162a254796c61d2b0d16259c92191e3f163b2536932a1d9b0cf724ea93f31b939200254794811885989524f7947412c39a1d24f794308fea9b9a237f95e2938d9c6c238695bd94a59cf72294955896b09c83227f95b496f89c022270954598239d5c215f95aa98f99cc6205095ff98c69c59201295a598679c012012959f98199c401f42957b98cf9be81e50955598719b951e3c952a982d9b591e36954398829a121eb0940b98179a831d65943797de99281d519471979e99c81c239332975199c91cbd936f97de98851c0000410f92120801f69fcca05ea23728d5a008a22da46b29d3a133a23ba4e329e5a130a116a3232a39a28aa032a2ce2a37a2ab9d15a05b2b55a1c68dac986b2bb9a0d41aeb18512b80a0431c171b072bd9a0a9141e90a12ae3a1bb97ab9d602a30a3349c61a1152a8ea32e9fd4a3df29a7a3bba1daa4a929a2a3a7a2bea58f297aa3e0a2e5a55b2966a3afa203a6212942a332a2eba5ee2830a3bea1d0a5ba28d0a245a1b4a56b2829a27ca04da50f2892a1809f29a57a275fa1b89ed9a4ea2629a1829d69a4ab26b4a102a01da584266fa151a0dfa64f27dd9d369ba2a0f32628a08c9b32187127439c5799008f8c27379cf4961e9ec024c99a561faf942c250496202037179924b18f0121bd1c0325a79446218e1e1725a691d720581e6d25448f3320d61c90259f8e4f1fa81b60254c90e31dce19f2242593ac1ad111ab247e96b70fd899542419989497fa9df023e3977c99df9e27239097e799969e5522c597419a9c9ec421a197fe9a5a9e4b21d797e79ad49dba208497d99ab09d4c202e97d19a5a9ddb1fb7966f9a449d331f56960b9aeb9cba1e6d959799959c131ec1944999229cb81d97942099039c8d1d58940499659b2d1d4194ed98479b181d6194db98fa9ae31cec926198f0997d1c7c9127969f98661c00001919b61a898a889fd9a08da21b287aa15fa48ea585290ba2d6a36ba5022afea146a313a51d2a34a219a253a47c2ae3a05a9c4f9f262bb19f481cfb1a8a2b019f332124213d2bdf9e6f22d822172a77a0ac2015216b2939a1241d351903299ca12a8e149bbd28d6a1da9caaa0ba282aa2daa0d9a3d12870a2a1a1dea4cf28a9a2b2a2caa5c12802a33da363a6b628d0a223a34ba6882874a2f9a269a65c2807a2cba250a63128e3a14ca269a60528d6a18aa120a6bc27dca1e4a0a0a56727d8a196a09ca53027c1a182a094a58e26eba0e89f0aa507268f9fb99fc9a45f25baa0b19cb8a048247d9d5b95379c8124f29c3d122c9fbd23a6995e1c189918236f937320e21cf3229b0cc7215b201224c70fd921a920f124740faf216920bb253a0cea20a51f112686902a1e52198b258495fe172497e92495973789469c71241f988496889d0c247a984199639ed723c598f09a069f1d23fc981c9cd89f97225e99979c34a0e3218b998b9c21a0402155999c9ce99fbc205999599c619f6b20fb98119c9c9e1720a198b09b3c9e811f0e988a9b039e081f1397309bb69dae1e4196e89a459d321eae95419ad09cdd1d3295029a6c9c6c1de39483990d9c011de7944399b89bc41c5094a998ec9a7e1c3b943998f399021b0000a118341b2508dba062a240a40e28eca1b0a408a6bb2865a2aba423a63429cda24ba4e3a59e2912a295a3e5a4502a26a1d09ce19f4f2bc59ebd200a221a2c3d9a16263b274f2b37986d260d285229db9c6c247d25dd277da00c1ff91ded2602a2229bbc9f59277ca252a16fa403289ca245a3b4a54e289fa224a48ba67428c9a261a4e5a67a288da270a476a78728bfa28fa498a7962809a372a479a7832863a32da42aa77128b4a205a4e0a6492823a28da3b9a60228f1a15fa3d3a6c22781a10da3a5a6652738a186a2bea6ef268ba0b1a114a64426329f67a096a420258d9d109e5ba33824b49c4b9b97a1ac22599b1d9245a06221f998cf1c0898a2206007b522d92045212a16cd242a24312231151025fd245a24cf15ff24e424e4252a138e2377238326138c5820e11f0e26bc95791a3e12a825d298ce94e49cf3249e99539bd69f2b249b99be9c5aa031235599059d68a05522f3983b9d58a0d121e198039d28a03f21e698c79cec9fb7209e98919c4c9f3a206c98209cdd9ef31f1998109c7d9e4f1f7a97a99b339eca1e13976b9b059e671e4f96199bd19d2f1e0096b29a7e9dab1d6f953b9af79c4a1d1795c4999e9cc51c0995b099539c9e1ce3949d99159c5e1c97945f99169c881cdd930f99b79bb71b0000a10fba13de8795a0a6a3f7a4bb27b9a363a5bfa6cc28baa1bba43ea63a2819a2eca4dda6ce2859a21da56da77029cba1f1a4cfa67d2ab29f610e3f96432ce7192c2afc2bb32c1e20502c7f2dc527670ab727a828eb1c09a0d79785a085202aa265a211a57b25fda3f9a3aca6452797a3e2a458a7872831a395a508a8c5281ea3a2a531a8d72803a3baa53ea8e128c1a28fa53ba8c7287ba23aa51ba88e286aa213a504a85f283aa2cfa4cfa7132832a2cba4cca7cc272ea26aa45aa75a27f4a1f0a311a7be26e7a1e6a3aba607269ca17ea3b8a6bf25cea0d2a22ba6da24a89f74a165a52323219f73a039a5a020e89df79cf5a3d01cb698ec1c7c8edd14d6169024b424e01b4f1c852720282c1f1c1d7c280a295b240a1da927e3272e27d61603240024b5273c98871c591a47269f9975982c9e3f25559a219ee3a15624959b089f13a22a23bd9bfd9ee1a18a22329bf59edaa12a228e9a8b9ea0a1a021b699109e38a115216e99ba9dd2a09220f598919d87a04b20f398439d20a00320e698ce9c6e9f3a1f7e98a79cee9ebd1e3c983a9c7a9e1f1e8597f39bed9dc21de7965a9b7f9d561d1196cb9a239d231d9395739ac39cc31c1f95029a989c741c1f95ee996d9c281c9094a499429cfa1b29940b99449bd6191519451ffd20b993249f80a185a3c825d3a19ca4bea5d7274aa2cba416a6cc2764a2caa498a6f22739a2aca4a5a6002838a44da5a4a7792820a3c9a529a88828cfa414aab8aa452ce421562c722dc82a60a45aa8d9a9a228d0a10ba6b3a8ee28eca33fa6bba87529c4a341a6e2a80b2990a336a695a8a828b8a343a675a89b28a3a336a678a89d2876a31da673a8982864a300a68ba88b282aa3d1a561a86128cea26ea53da82b2889a217a515a8e12739a2c9a4c6a73c27c7a1a0a486a7db2660a15ca471a7852601a14ba477a709260ca14aa484a7a725faa00ea43ea7b824fea0a6a3fca6952340a105a3f6a5832131a066a1caa4471d9d9c959be3a12297491210234122b8a2f620c5291d2b13a2ba22182cdb2ca622e81f0f2a2e2b41297107f6221c2263287e9e6298d19d9526c79dda9f08a20725659d43a0d2a20824869c28a00ea365238f9be59fe2a2b8220a9b719f2ba29721149bd69eaca10521929a7f9e2ca1af207f9a329edfa04c20319aec9daca00320c699909d57a06c1f2f99299d28a0e91eb898e89ca89f2e1e7998a49c179f8d1d2098409c899e3f1dd2971a9c1d9e071d8297c49b989dd91c1097999b7f9d9e1c95963a9b479d8e1c5996179b299d941caa959e9a299d2c1caa94e498109b5f1a0000b2156b194507269f6ea14da3e124caa116a572a63f27e8a118a59aa63227e8a109a5c2a6f526fda129a5bea674265aa2c2a458a611255e9f93a0fda21e21b688910afb0a0f1c9b861c84c993712105a165a400a69e2635a43ea7f0a8612815a4b7a6a2a87e2831a4c2a6b3a86a2845a4b4a6b8a85d28f6a34aa6a7a84e28e0a328a696a83e286ea3d5a570a8192830a3c7a576a8fb27eba2b2a574a8b827a5a265a55ba88d2785a24aa52fa81c2746a218a50fa8c726fea1e2a4caa76226a5a1c3a4a3a7ea2560a185a458a7782517a15ca43aa72a25fda046a40ba79c2413a124a4efa67824e1a170a4d0a6642424a21fa4eea6e8238ca1e0a21aa60923589da1a38ea602247f178c23132433a613283630b730b521050faf248a243f2c589be0a1e4a477251d9dc4a03da42923959c9ea0bfa30322af9cb8a0bea3c121b09c9ca045a33b214e9c52a0bfa2d220379c20a079a280208e9be29f15a250203d9b719fe2a10e20889aff9e6ea16b1fdd995d9e02a1c71e9299e69d8da01a1e6199729d29a0b11df498099d939f221dcb98a29c099fdf1c8a985a9c9c9eae1c47983d9c409e871c2f98189cde9d741cb197029c949d571c08976f9b6f9d3a1cf896909b2d9d211ce495f79a099dfb1bd3948d99109cb71a000066104e17340ab59f2ba24ea43425b1a044a4aca5082610a18fa407a6f02540a182a40ba6dd2553a126a487a51e256ca018a22ba41623549ded9eeaa0ec21029c4f9fdba00c245fa00da44ea5b626aca23aa642a8422866a38ca672a8512853a35ea65ba819281fa363a673a82028eba25da678a81428dba22ca678a80328a6a20da656a8a52770a2d9a544a8492740a28ea525a8d62656a28aa532a85e261ba289a527a8dd25c7a166a535a8a125c3a147a52ca85925bca136a500a805250fa2d8a458a7922482a286a421a7562419a25ca4f1a6f223cba13ea4dda6ab2363a11aa4a7a64023c2a0c7a364a6b42237a066a341a6922226a0a1a320a62b224ea1b2a32da60b220a9d7fa05fa36c20e60a7914641404166503e38f82984b109699029f31a20e1bc19c10a11ea4a01ff29c62a10ea45520109d21a108a47020779ddca093a34e20659d95a003a31d20909c21a02ea2a21f2e9b6e9f91a11f1fa59aec9e3fa1a41e2d9a7a9edfa0661ed099129e76a0eb1d7399c59d42a0c41d3899699dff9f861de4981d9dbb9f2e1dbe98f29c5a9fe01c7c98b79c009fbe1c6998739ca99e9c1c27982a9c429e6e1cb397089ce49d221c42979f9b809da21bf296609b349d661b3e96eb9ad09c311b38957899ac9bf11900006e1382175b02509fc7a287a4c22422a1e0a42aa62a26b1a052a4a2a57625aba0b1a33ea5d72416a05fa236a4e723779ee4a097a2dd21229e9aa159a39523ff9f0da460a5fa253ea13fa54ba7a02739a2e0a52fa81f2865a2daa547a8072874a2d6a543a8a72787a2d2a548a8742768a2e0a546a8512754a2b7a52fa8252743a29da535a8d82605a27ea529a86f26dda156a512a8dd25d2a10ea5d4a72125f6a1c1a471a7772404a292a40ba70824f5a185a4f4a6a92368a132a4b9a63a23f4a001a478a6df226ba0b3a338a6b22224a090a313a6a222e89f54a3fba5b322b49f24a3cfa59b22a39f16a3b8a58022959f08a3ada574223d9fc8a2aaa57022f99ed7a2eca5a322089e61a254a57422109b53a08ca23a21fc97d09ca89f7b1f6598f79c7ca0e61d7e9b0a9ff6a1f21b1c9cfb9fc0a2601c699bcd9fa9a24f1d0a9b02a092a29a1d319bc69f5ba2001e389b929f1fa2601e489b919ffaa1881e0f9b339fc6a16a1e969ada9e5fa12e1e149a709e0aa1e71da799fd9db3a06e1d5099b09d6ca0351d0499639d2fa0dc1cdd981c9dfc9fbb1cdf98e19ca39f761ca198a59c1d9f791c3998609cb19e4c1cf297289c4a9efa1b6f97ec9bcd9d861b4897959b899def1ab696679b5f9d7e1aec95229a7d9c9919b3a6499d82a0011b882b5e1f09238227432f1a249924ff283330902216240b2a7030072329245e2a462ef52287235d28f3295421db213c231927a31f9a1e0f92ce25a21ef0189194f0249620931c6b9abc230000c61542958a253a207320d8a100afbba4e3a5aba88ab8bca050a05b231bb62b176a266d2c08aebc24d62c9b2b37a85e1f7c2f3a2d8d30849d842d2a2c322ecfaa152a002c092d62ab8b2731a45d2d3a15ff31b0af4f27b0223f35c8ad671e1924843579aaad1d2d24a6356ca9051d7424df355aa9381c552456351fa91f1c46240a35b2ac271a0023d23432af1e941ba05f333cb024a87cae762c35af83a7c8ae062e56286394449d35334f2c9594369b8030212a6613ee1a2c2d9f27031c11236e29e224cb1a4e22d62411235d1bc1210b244422aa1bd5211c24be22901a0c21ac22c12136190d207821b720b918321fbd202e207c18eb1e8e2005201219f61e9b201020c518a51e6520f21f2718431e2a20811f8f17f11ded1f1f1ffb168c1d981fa21ed2163d1d441f591ee816ec1cc61e121ec916dc1ca21ec51dd016961c361e621d2f167a1ce11d181d6515031c0a1d7d1ca0141f1b951c141c7e14e91aa31c011ca014dc1ab51c101cc014ca1a9b1cb21bdb149b1a7c1cfd1bd91254180b1a241b33a00080879b1504f929e01d9d206d283a2f41225f22d0292d301216231c592a3f30dd9ac69c5e291631731b4e1ef6283b30281e97202623dc2de7195019249c1d952c1745134898d69d6886aa8a519e89a04e8c9895609d87a4a29f57a3b1a4c8aadca877aa29a7179a29a897a90529cb2e70a758a8572d642cc6a31d1e6c2ce62cd3a44028b22dde318ca8db2c702e3c3023aa022d842c912d80a8212b701f722805a2d331a5b4e51a231d3e32e2b29818a1204c3201b20d1ced209432b3b05f1c6a20663292b0c316101f143369b116153e1c2832c9b02492b89b223443b1c69c30a5af314eb3d2a191ab582e43b546a47aab06314f25fd9ed6a81831c22c0b9d45a660301d2b0a98bba1732be526f111e61036240f23ca18bd1fa32148222a194c2031216c21461978204a211c21b7196f204f21fe2003191c204e21df20c718621fdc207920f918111f9420562087196e1fba207b20fc18c61e842048202018291e1720c21f5817d21d971f631ff1167f1d4d1fe91ef3165f1ddb1eab1e4f16061d901e341e1416bc1c2a1efd1de715861cfb1da41d9115541cb61d641d65151e1c661d181db614c11bef1ccb1c9914391bc51c7e1c8d14071b9e1c371c5f148d1a8a1c471c17139419981b981b161268184d1acf18359cab99279d6b0e8e254317221d3c29132d1821f9209d2a9a2f991b451de42aba30781ccb1cdf2a2c31751ed21d092ade30cb1e7c1eaf274330d21d6e1c961d392feb1b211b3e9c02252287260f3ea07520c7903f9a809ddf2f0f1d7e1a3422eb309a21421e882657311f204b22fa29d2343325fb26682ac237cca1b0a48c2a3b3901a32825f42c9731c4a5e629462d76306aa62f2d992c592c7aa5822ef827b11e28a26f3150b224a0a89d01346db31e9ccf18373395b13197cd1c4834d8b19b95151db43497b1c2896d1c8b3490b18c07be1b70349fb2f386180d433480b21b9989a03833efb28a9cd4a549321fb4889e5ea6ef30b0a2b99947a4d7312d2a859aeca3673060291f9507a0612aaf26a704849768184c24ad15f718eb988d23a418db1ed71cfa22941969208b20892256191420ab202222ae187c1f7d20a2216818521f73205b216718361fa42061216918f81e8e204221da177c1e2620a8207017df1d8d1f3d208f16681dda1eb91fef15e91c501e1d1f67158a1ce61d761e1e15331c651ded1d1c15171c3d1dc11df014c51b1c1d721db2146f1bf01c1a1d97143a1b7a1cc81c5a14ca1a4a1c941c0c14491a261c6e1c0114281ae91b3b1c0814cf19d91b331ce913111a1d1c1d1c1d126a18241a121c4b90bf93f48e1703441a58146f18f320c928c11c061cd729e02d3a1a921cfd2a3f306e1cca1cc52a2d312f1e871d682acf31b91e3f1e052abd318120d81fee296d31ff206c21902974313b21c220e62876314c206e20dd28ff31f81f2f1da1295f32df203d21a52a63334a23e423372c1a34c9215d22882cbc33da976391d72cf032a5a401a0642df9313ba581256e2d973029a42c2dd22c31299da2312f892ccb9c2da0662da32baa9ff5131f2efe29d89c741a8c2fc329ce99e01d92308429f897b01cfc30ea289195791afd3010291793ef164e318d290695ce935831ef288c97be9d6e318229d79916a1d5319d29bb9a59a289329a2a879b80a3a2323b2a3a992ba23b306829a7966ba009284726f890ed9c539e52246d10540a839d9f23da156b1c5412fc220518011e041cbc228f186a1f041fad2251185d1f9d1ff42139188a1e451f1721a217061e431ff720fe16cf1dd31e7b204b16771d951e29204c16591d771e1620a315f11c4c1ef51f8715931cf11d831f31154f1c8f1d071ffc14171c351d951eaf14e41bf41c431ea8144d1baa1cb91d5814ea1a6e1c6f1d1314981a2f1c221da5134f1afc1be61c8e13eb19cc1ba21ca313d519801ba21ce4138619841b531c43132119281b471c1c125f183c1a5d1c1b89e08c8188cd8166865f1703199a223b214a19be1bc529bc29ef19041a0f2b822e8f1bfd1b4f2bdc300e1bb3190c2c0432ef19d219d92b1f322a1b2b18592b6332cd182d152b2b96322217f18eac2adb32b60d4f9a972a13334497dd9d7b2a69333e9b3ba0272b7d333f9b97a1632b833382a09fa42f2c603313a546a93f2c2b3377a508a9222c4432eda5d5a1182cd92e5ba5bf25fc2cf9221aa1c52d242de7a4cea054303e2de4a2349e292f002d83a132982530362c81a0f48cee31ba2b989c3f169432532b019bb4165b33b62baf98708d5d33702ba398d09994335b2b4f99a09cdf33a92b3799349e3134c72b2199789f2134292c4e98a7a00634fe2b2a97299fc030552a00952c9e342308279294aa9de1a4ac24eb0a2e0ac9a14b241415641c629ab0235b15a81cf61616230417f01db01c95227d16b71d331de0218416641d931d52218316671d921d2c213416341df01d19212e16141ddc1dca20aa15f61caf1d6d2050159d1c9d1d2e202715721c481ddd1ffd14451c401d7c1fc2140a1cf51c111f9414a51bba1c891e8114501b731c271e1414d71a551cbf1dec13441abb1b581de512a319471b081d70122c19681ad81c4412f1180b1aa41cc8116618041a9f1c541289184d19031c58114a162618151c0080d080bf81bf81cc97a40e8389a2227d9bcd18fd1e482a7d21ed95c797ec2bc32ac1956b94512bc42fe98cb494ca2bc4311c8d1195172c4132bc8d119c272ca0329197509d232ce232249ca4a0e02b6233919ddea1382b69332ba049a41d2c8c33d1a127a5992b9733b0a357a7282cc333d9a4cda8952ce133fea4caa8282c0f3488a599a9d72b833290a3baa62e2bb62d2ea43e1a7c2c6c9539a4222c042d6da7a1a16630ae2d2ea486a04c315c2d09a33c9cfc31052d77a1ca93bc32ef2cd59fd39a4e336c2cda9dee990c34912c729cf29c5f34b12c409c609d74348f2c049cda9da9346d2cb89afd9dc334992c239a579fe034f92c8b97a09d7a34cc2c8295089b7b30f12ac195d4997d2259268993279ab3a36324528b648ab3a127243e11a619829c222404156e1c440c9a23e015331d2619e8229216e41da71c89229116a81d461d6f220e16661d701de821ae150c1d861d46214615c21c3a1dda201f157d1c4a1d8b20f0143f1c0e1d5720d014021cf01c09209214921b981c821f5b14311b4c1c061fe613b51a061c601e8e135f1a8c1bfc1ddb12441a861baf1d3812a519d81a6c1dd7112d19a01a401d7311ca181b1aee1c6d11b618071ade1c8d116718c519a91ceb104518061aa11c3b0f9615d117611c0080000000800080e4918f05ad06521d1ea0469cda9bbd2a62a00e9dcd9a9b2b3620b09c709cea2b232b529cc39c3f2c62301b9ae99c372c5e32e096e09c042c3c332e99349d0d2c93334b9c42a11a2cf9339b9f49a3fa2be53327a1c9a4462c3534aca2d7a50a2c4434a5a414a8302c3234d8a4eaa9062d613441a46aa8d22b513413a459a83f2b203220a297a8422b322a2ca2c5a51d2c70a5dba1ab26782cfda527a2b92eb82dbaa4eba0c231332e1aa4349e3c33c32d49a17d9c2b34782ddc9f2a9b62341c2dbf9ee399ce34452d9b9df0992d35122d8e9c85984135f02cec9b9a996635e02cc699359a8135302d4f99e49878353c2d2e986995d7342b2d2196009c872f942a6294369c8fa09226f791219ccfa40225d88dff953da3db2427845f90c99f1c24c90ce215509b31231a12961a270bd1229513371c8a19b6227f14611c6c1b27222b143d1c091cb4215a14511c071c6521ee130a1c1a1c16214014a81b271cf0202613251bd01ba5209f13d81add1b4020a2127e1a041b0e204312cf199d1aa41f0b1298194e1a111f06126819fa19e81e3a111619c219741e1a1187184a19ed1dee10d617f318301dc11040179b18ae1c3d1085174d18861c261001174318a11c2b1032171219211ca80ee114f816191b00800000ce80e0811895a7059206711d32a0d292fc96ae2adaa27e98f497012ccba0f29a3398112c7a1dea9dbc99f02b3f2cfd9c549ef62b1a31459d35a1292c3c33899ee9a13a2c3434ee9f18a3802c3d34f2a052a4912c4a34bda1dba4682c7834efa20ca6102c7a34eea399a71f2caf342da435a8182cae3459a453a9bd2c623422a4e1a97a2ccd3001a4f9a8f62ada24eca156a80f2bdda675a09da5612b63a61fa0db2aef2cfda4439e1332e72dc6a0309dec33fe2d96a1579e6834102ea7a0e19cce34d72dfd9eaf986035b42d8a9dc796ca35e72dce9c5898cf35c62d4c9c0196de35fa2db899769524361b2e4c983797f2351f2e6196d3923135aa2d4d973d92772e662a0899169849a49f264c981f9c9ca53b259594c98a99a2d224da84cc13d09e5f245a0d9918d99a04247611d51a848b2a232713551cd717dc22e2137d1c4e1a9e223d14921c8a1b73220514a21cdb1b14221414461c021caa216513b51bb41b02216112f71a731a8e20d6110a1a801a19205311a5190e1aa11fc0100b19a5191d1f8610c2184b19ac1e66108218fb18131e0f103918ae18b51dd90e791716186a1da80eac16f817491da10e0b160817f01cc60df315dc16fb1cec0dee148f16c31cc20dd314d615af1ce90c76125814461c0080250082808e835a984d8fe191841ccda09e9cca9e362a30a1fe99c39b042c17a3529c919e052cc6a1e79fb79d182c6e1f19a035a1292c6a2c359e1da4752c5531749d6fa2d32bce33269f78a21a2c4d34aca0c4a21a2cd834e8a1c8a5222cfc3413a366a77e2c1e354fa34da71e2c2135c8a378a7d32bfb3452a43fa8b32b7d331ea40ea9302ce82c32a33da8d42af2a049a37caaf42a27a66ea31da9ca2a26a8bea052190c2c26a838a02830052e54a4ff9d1d343d2f85a134a0d934252f73a1029f6835362f29a02d9dd735de2e54a0759c2636f52e709e47986a36002f4a9c4893ac36062f8599b50ce736542fcc955d15f836772fc5948e124c35652ee795a998092cc32960983c99cda2df2532946791b4a34925f684731718a0fe24c6843618aa9d8b24550d6119269c3824e00e191a979804248c0e541a92914f230510b41a1d11b5227310de1a17176722ec10751ad2183622ad10031a2219bb214a1080199e184f21f60f08194818c820c10fb818e7176920110e091853171720cd0da117b8179b1f720d2f173317e21e4f0dd316c016741edd0c62164a16031e770ce715c115541d0b0b9b147815111da80a5a148514981c650a95135b14481c2f09a4124214301c870abf119413721c0609070f3c0fe11b19859b0079830d881a98c3900a940d1dcfa0fa9cec9eb22a44a2089d699e242ca0a3329c659e062c22a4389d7c9df62bb5a430a0b0a01a2cb31d149742a17a2cbb2cbd94aa9f812ca931ad99c7a04e2c063439a0cfa4cc2be53471a20ba6152c3b3536a353a6402c5935e0a249a6042c36350da347a87b2c87349ba452a8342ca030d0a46fa87d2b14206ea498a8002bbda4aaa418aa5c2a29a8fda399a92a2a55a4a9a1cda6f8293ca35d9ea025c12c85a2db9d7c32202fd6a1bb9d20351e30d9a2c19de035a02ffaa0579d2236582f61a00b9c8836882fce9e5b98f936c12f189f14933137652f269cb4954f37ad2f2f9c6b952f37a12f789761920935a02e8495b2923626b428e6957f11b1a36c25158ece15349f77242485371a199ca6240f8ce319659a6f24e78b7c19bf980524cc84ea190995ee2362849219988b7a230b04cb19240b07237f095919f510b622560c0819b1133f22d50b21191913c421030dc3188e144a21950a09187815f0203f0ab51714157220f0099516c3144c20da094b168a15ee1fa309f0154e14881f7c09a0151814f01e23093c15ad13811ea5083a14f512e51d3c05d8125b12361dc6018d111512fc1cc30172109410fc1ccb81ca0e5610b91cbf81a60c350ee31c6401200c0510171c940070039b07ea85f4957b06508d6c1d8ba09c9b549db42a67a2349d9c9ed22b24a3299e5ca0062c03a4459f2aa0312c4ea4bb9f47a2552ce8a35aa011a1412c4b9d04a1bca3462c112aa89e81a35e2c693012a05da3282c9e334ea08da44f2ca534a8a171a7852ce5344ea251a7322c4f340aa432a8292c1431afa49ba7102cb827a3a3b7a62f2a27a492a387a8422b0ba699a2bea8aa2a29a61ca240a8572ae4a532a333a89e2925a503a189a24e2af2a20ea01b2d692d34a3e09961346b30e8a2729d1d364a30b7a00d9e90361930a3a0349dfe362730089f649a7b373d3027a02699963746303ea03699d5375130ac9c0693fb37b230549897124934782e16986e9b809d5f27ca95428be8a1cf25cf953a9142a158257e95ed907ca1f024a8911714e49ff924e28d05198c9bb8249a8a2719899818243d8ac118a4948b23ca837d184491212367832e18648ab12234036c18701031226d081b182910cf21d602c9177c126e21ae027b1619121b219f021216c411af208b02b915920e73207602bc14330e332055829613cb0d9a1f3c822c13700d231ffa817e11c706ac1ebb8124115206391ea081630fd205bb1d91819c0e2305e51c8c81990ceb04b01caf847409be045f1c76012909f60a471ce303a60b8c0ff41bbc875481e1865985a598f094f395fc1c03a16e9ec6a0962ae5a10f9ff9a0822ba4a2439f3ea19a2b4ea3c69f82a1fc2b59a47ba055a2222cd8a4a8a099a12b2cc1a46ea02ea4362c5ba24ca0ada4922c642082a04ba4662c032da1a070a4342c163011a162a6912c98304ea1c1a40a2c972e83a228a59b2bad26a1a262a63b2b9ea12fa4e1a7c82a27a7a6a4b2a9232b55a829a33da9372bbda657a261a8532a36a56ba1f5a7bc2990a562a099a67429d3a2c39e2ca01d2baaa0829b9e30a82e25a0689ccd35a830fa9fe29b3c37ff30a89f819af4370e31129fec9323384531989e7b163e38fd30b99b591a673825315e99b71b75384431dd9ad692bc31962d309d869177a43526a2990212e2a199253f932418c4a0d025a791cb17429e0625e3917c180f9db0244690e118ef99402410906019b1981b24778d1b191997fc23288ac018dd94a823988c5c187a944723188cfb17fe937f228e8b3d163f90c021e58ab415b98f3b21688a83140892c020658c0813c19188201e8c2a11bc935a200b8cfe0e5b930220c28c940eec924b1fcb8d640b6692be1e908dd70ac691161e508c5d0a818fb91dfd8b0104f58e221dc58be003a08ee31cfa8be0837e8eca1c548de289558eab1c848ac5030585c91c88875683a604491c7b81a000b6006a86299873937195fd1ccaa0759f06a1a12a8aa256a0dca1d42bd1a25fa02da2d42b50a344a009a20d2cd7a314a049a21a2c22a4739f8ea1132c2ca5c89f6ca1b92b41a47aa04ba4e92bf1a34da18ea3122c23a414a0d2a2a42b159f62a2b3a6652b640ee7a3bda6ec2a709f51a529a8322b26a3cea4eda7d22a65a4e3a320a8492a27a553a3aca8922ac1a58ea265a8192ad9a447a203a87e296ba431a235a8572932a459a252a83929eea173a1c7a61e29c0a28ea0c99eb12aaea2799d2b3340301ca13b9efb36d431dd9e2e9e0c38a431caa0c5983d38b631309dd1958438e4310e9d450d97381e32369c50164b381c320d9e189bc22dce2b479b970b789dbe257b98ef14539fab250d989a142ca0b6257f996014aa9e00258f955118939cf524c0942d18169a7f24e79271193c97332447910619e9960324ad900c189b94b72337906016fb952723d58fe1148c95d62265900413f7973f22aa909b103a97aa215990230dc6965021259084064e96cd20f78f36861d9795206d906f8cb49652204990ed8e3c97d61fb790778ec296521f809037903d968d1e588f9e8df494311efb8e668fe893a91dae8e248f81935f1db78de88e3f93061db88e4c90e892c91cb28c3b8e6a91701cf48d148c9a8d251be2841b00b80079860f98079328958e1ce3a0fd9fe6a0942ab8a18b9f2ca13b2bf8a1279f7aa1402bd7a2d79f97a1fe2b56a336a017a23b2cb4a3ee9fd0a1342cfea362a001a32f2c3fa4779feda1172cc0a42f9ee9a0f32b09a4819f83a3b42b25a417a36ea68c2be8a45fa427a7162b48a462a432a8ff2a71a4aea3d0a7772ae4a4bba3afa7512abca4c7a293a6202a77a4c0a310a8ff29e1a49da391a8b92959a4ffa26aa870290fa48ba282a824294ca3d6a10da8822812a45ca0e3a58128e6a2f99da224d52b809f259d7535a931649f419b10387232469f978d9238b13249a0a20cbf389732fb9c6e16d438c632629f6519e9373332b59d6894da245e284c98a919e6a486270e979c1b659fef2528971019e8a0fd25aa94a91bec9acc2404953a1b319891244493ff199f954924ba92ae195995362405928918f39406245d91f61688949723a5913915be95de221b916f112b988a225292070899981a2204929b8de698a321829259908b98392121931090d198e3204d9249917e988f20df926992369826205b92f691d197b31f8892ec922798531fdd918692e597c11e0a91549296977d1e959037937c97671e5590c893e796b91d5e902293a796fd1cef90c5933596a81cec8e92922395751cfa90829199932a1c5501220f65104a04989b80992f990021e7a043a00fa25c2ae7a131a0b7a1252beba1ad9f56a1432b71a2ad9f69a1bc2b6da38c9fe0a1062cd1a3d39f16a1d02b0aa42f9fa0a1a52b6fa408a0b4a07d2bb5a470a029a2352b62a4b0a05aa4062bbda435a1c4a63b2baca4a6a2d8a6e92a0da5f7a3eaa67a2a23a5f4a2b1a6612a46a506a328a7502a71a414a221a7072a55a451a25da7bf292fa442a241a76929aba398a166a7342998a2aea000a7b02879a2daa0c3a66928b0a3f2a0bba52a28fd9efa9c4aa3692810a268a0bd2bf52c3f9f8e9ed2361033669d110d5f384b33279d9b16ae387833529c4b140e39ae337f9ddd1c4436e231bc9da31bf7a0af2753991815fca00026be966c1c4da074268496e21a339a6c25ba93c11b65960925f791ee1bf5929124a592131c84926a246d92041b5e92502454930519e794f723d993011805984123f79332157299cf2218946d0e0e9983224494ea870b9af42167947992dc9a7921d1949195ea9a0921ed94ea958a9bad20a7942e96fb9a5520a8946b960b9be51f4a94a896869a4f1f3b944f96999ab51edf93e495ad992a1e4793a4954b99ef1d3e92d79596985a1dc99181954e98dc1cb79143952198aa1c19928a95de97721c30914795c0973c1cae90459549987f1a7b06860d760d42090b9c339a679c592067a1b2a131a3ba29e8a11da149a3f62a94a1c2a078a2e92ae7a1ec9e48a13d2b8ca2b99cf99fae2b14a3369c7f9faf2b40a37b99ad9e832b6da38e99bb9d5c2b13a3669ce59f2c2bc3a3c19e0da20a2b70a40ea077a3c22a6ba44da071a5842a53a414a234a6442a3ca401a3eca6fa2958a464a3b6a7c02964a4e9a30ea86d29a6a4dba333a853297da4c1a31ea819293ca48ba306a8dd287ba301a3cea79a2801a390a233a88d284da288a245a8a428d6a2b5a18da63228d5a355a1e1a5cd27f79f4fa08e2db62d6c9f0e172d387c335fa24e165239ea33bd9cdd199d387233af9c34924430532e179e7199899f4b25d299cb8bf39fed242992031fff0d27254e98b01d608d9f244492c01e0414c524df90441ef90c9624c891641dbc8ca924f693d21b86957d241f948e177c990d2431941109a69b8a2331950c8f5c9cf4224f95a793d89caf2266959395889c412269950c96e29ccf219b950998209d3421899576984c9da7206395d298169d3d202b95bf989c9caf1f4595b6983a9cd41e7d959398049c7d1e9b956c989b9b241e7b953b98579bed1d60954e980e9bb31dac9410984b9a301d68945197839aed1cdd937497469a951c36933e962f99a21c96921b978b99891b00006614a918d30334a07fa1a0a3c0289aa148a308a52e2a12a27da293a46a2a52a294a10aa46f2aeca209a01da2022b13a20f99269d502b27a15919ed0f1f2bcba0591c2219fe2a28a1c8142d90b82ae8a18c99d09e7c2a84a2519c7ea1372aaba35b9f8ba4e82912a489a180a5d22974a49da368a6b729a9a412a437a79129dca429a452a757299fa434a46fa72229a0a4d4a366a7fe2861a429a35ca7bb2828a4b2a20ba7722862a3e2a1a6a63a287ea220a18da6e22730a2fca082a62b27b9a115a037a6de26eba128a026a6cc26d5a4759f7ba624274f9fd39a902fff2d4da2bd0d4b37ae322ca5341abe34d53130a2e49e589aae2854a01217a2a0f0244599901d919979240d912e20a0948724a8919920c31c7d24be910e21101ee824f38fb120451d2f25438ff21fe11c2025b290bd1e4b1ccc249692fa1c97196224989407197f8b0b247b970f928a9c752343971498d19eea227e972999829e1222c8970c9a439e8a2187976b9a049e1021a097b79a099e7e2093979a9a959d282042978f9a779d8e1fc9967c9a1f9ddd1e7496199a039d721e8d95b499819cd81d21956d993c9c7f1dd3944499da9b521ddb941e99869bef1c7f94bc985b9bd21c5b94d698b69a9b1c24946798209a7a1c2f91bd96f099dd1b0000e7150419210d8ba0d5a256a49f28dfa18aa424a6f1299ca27fa3c5a5542a65a2ffa207a55a2a91a156a0dba2cd2a6ea0cf170b90852b6c9f7f20bc20722bfc9efa20f621752a06a00c203320ab296fa1c41956905b2932a20098d89e1129cba2869ecfa1fd2837a3b9a188a4152907a466a496a6552971a493a4bda7412945a495a470a70d2925a425a4dea6da28e0a386a3d7a6b92886a34aa3b7a66d2866a3c6a2dea64828e6a2cba2fba62228cca257a22aa70328d4a2e7a1c2a6cc27d6a290a179a6802733a394a193a62e27caa00ea183a6ed265b9ed99f2aa5872559948b9b339dbc261d9936997b1dc3277d9d449cc59f2924fa9c139275a08f23df99cc1b269911226694b3202e1ca7226906a021371f06236c110b229b2054242d11e021742014251f0c8a20361e262545906b1da815bd245696191649994424d6974e8f719c8323239850974e9df92260988a99849e9c22d9980e9b249f2f221199179c0ba079215599849c1da0d62043998e9cf79f63202a99809cd39f2b20cb98509c6f9fec1f7a98159cc09e6f1ffa97e09b619ecf1efe966a9bc19d5c1e3096c69a429d051e9f95659af19ca91d2295e6998f9c3f1dd1946099299cfa1c98945699f39b991c3c94b198ba9a691c7b948098f6998d1b0000da15611a41817da1eba38ea51f283ea226a5d2a6642959a294a431a66929eba221a49ca5fc297ba191a0b8a2ab2ac7a0291d9c1df82baa9dac25a926832b9c9a9726dd278929ac9c9e24ae25602867a19d1b78190928b4a32da082a2f027d5a3f8a3a6a545288da3c6a4dea66a2804a42da5b4a7b828c0a333a5eaa70b290da4e6a4d9a7f12846a414a5e6a714293aa41ba527a83b2920a4bfa407a81a29dfa341a499a7d72807a46ba3bda67228d6a234a3f3a65b2893a2daa2e7a622289fa2e8a282a7272834a3b1a2dfa6de274da2d6a21ba782278ea089a134a60526439e53a092a4f124689d0b9feea3ee23e59c019c11a4dd21419d909803a276208e994d1df1945320a9108e230a22ca20f116f9244b241322161747250f253c24cc15ae24c3248a25c012b922d8229725498b2c1ff51d5225809608180a95d924ab9902977e9d3b24b999649bc99f1f2351997f9c1ea04e221499fa9c5ba093211e99ff9c2da00721d898c69c04a0ad20b6989a9cb19f172058984e9cf59ea41f30980f9cb99e261fb397e79b6d9e6d1e6497a29b6e9e3c1ea5964f9b409ede1d4296f49ace9d701d8c95829a9c9d401d7595089a1b9d751c0495d799789c521cfe94af992d9c531c9c945c99a49c091cf2930799869bf51a000000006114ce8cd19d4da168a32f25ffa2a8a5a3a7ae281ba24aa507a77e289ea236a557a7062938a201a53fa7df29b2a101a223a4bf2bd515b328092abe2c1a218b2cb82d1229c29038276628ab2077a155a02aa3a222f6a260a49aa69a261da4f2a44ca77328b0a493a541a8d82846a4d8a55da8092904a439a67ca80d297aa3faa589a8182933a3b9a55ba81a2923a347a529a8182991a330a5ffa7092997a3f6a4f0a7e7280ea4caa4aba7aa2815a357a490a78228b5a23ca40ea86c28b1a278a41aa84828aea27aa408a88b273da268a40fa8c8267aa15ba491a7122670a008a39aa6ee24fc9fdfa11ca6dd221da04ea11ea6ed1fd99ed89ebca4d41c8a98331b548ee917e6177b24de24c91b981c88274228321f801d5228802812245e1c052733278326121031230a23c4261695be1a8a0c9a25e1987c995ba195241d9be49daba13423099c139fbba13e22399bc59ef7a1cd218c9aac9eeea19d21079a569eada116218899f69d13a18c204599bf9da5a00b203799609d36a0871f1f990f9d9a9ffa1eac98c69c169f4f1e71985f9ca29ee81dd097139c099e5b1d35978c9b949d181d4796f19a399dea1cc295979ada9c681c5295259ab99c241c3d95189a9a9cca1b9294c199819c131c72945b999b9b171b2d15611ddc1fd79a9f9d26a180a28924dea1f3a40fa6cb27e5a20fa5a5a61128e5a23ca539a73c2898a23ba5e2a6d527dfa11ca5a8a70d2873a5d9aaf4abcf2be19ac5260b260d2b50a419a814aae42abea1fca5a1a8b328f8a4a4a631a9a1293fa4eea600a929290ea4cba6d2a8e5284aa4c3a6dba8f02835a498a6caa8de2852a495a69ca8d82831a443a653a8b428aea3dba578a8c628a9a3c0a559a8d22873a38ca51ca892284ea31ea51ca85628a5a39ca430a809286fa3e8a43da87127e8a178a44da8c8264ea18fa41da839264da195a4eca7b22543a189a4f9a7132502a159a496a74a24e5a01ca4d1a666234fa068a325a64e21b79e4ca257a58d1eca9ce99d63a12b141d18e3234723eea09120472a252b76a1b222172c082da524361ff7286729d3286d94f41e371cc227d89c389d4ca15c25ee9cb89f60a2e523899c1ca058a32a237a9b20a077a3bf222c9bbc9fcaa2ab21f79a129fc5a1d220b29aba9e42a16520a39a599e00a10f206f9a189edaa0a61f079ac59daba0231f60995c9d86a0b51efb98129d05a0e81da898b19c489f5a1d3c98429caf9ede1c2c98049c449eae1cc497d59bd99da21c5797b79b9f9d6c1cf196679b649d361cd5967e9b529d281c7995839aa49d001ba9943b990e9c5d1a000000003a10ad82fc9c2da0aaa1c922b7a162a58aa6f02628a243a5f0a624270aa23da5eaa684264ea208a5a4a6a2258da044a255a4a422c3906f943597681d648f548a75926d2103a2a4a430a6d52675a492a725a9702855a405a7cba8a52892a4e3a6caa87f2892a4f0a6d3a877288ba4caa6cca85d2847a484a6d4a8412821a447a6b3a82228f5a324a6ada80b28cfa30ca6bea80a285fa3bea5afa8d72700a372a574a84c2706a364a579a8fd26d7a245a55ea8782663a212a526a8ff25fda1dea400a8aa25a0a19ba48ea721256ba177a476a7bd2468a165a455a756244aa132a43ba7ce2361a134a41ba7df2361a13ca41aa7412363a1aaa392a66d2242a0e5a1d3a56122d49b8aa238a69d2029212929322a91a9e0289b303d31b8261096761b349d6e2a5c98b3a024a54f24309c9ca030a40722f09ce7a0c5a38d21a49ca4a055a31921559c61a00da3ae20489c30a09aa25620929b02a05fa210203d9bb49f08a29d1f949a269f9aa1fd1ed299869e2ea1631ea699159eada0b01d6899849d3aa0401df698149de29fd51cac98d59c5e9f9d1c5a98879c169f701c1298559c909e4d1cfb973e9c3b9e531c7597109cdd9d2b1cfd96b89b849d051cea96939b5c9dcf1b4796d89adf9c681bec9498990f9c3d1a0000af14fb182a0666a0fca2bba479250da1b0a4c4a6c42669a1e3a488a6572673a18ca40ba6c525b6a028a3d3a41c24539d3ea03ba22122689b8b9f1aa1772316a0f0a324a58f2698a338a63aa85a28fba3c4a6aaa86528e3a3c9a6b5a83c28a3a3bea6b7a82c2863a3b1a6b3a8172833a3aea6b8a80a280aa375a6a9a8d927c0a23ba693a86f27cba22da68ca80827f4a2e2a5a5a842260ca4b2a54ca87025b4a249a545a8eb24dfa1bfa40da86524c1a1a1a494a7ee233fa177a4c0a7e723b0a174a46ba7772307a265a464a78a231ba23ba456a731235ca21ca4eca6f822aba10aa404a7c7226ea1faa3d4a63a22d0a09ba37da615223ea040a31da69f214da036a314a6972164a02fa4b3a70f22489c37a089a23c205f104d14f814dd10e08f8797449cf70d389c63a071a37a1c459d67a117a42e1f2e9d3da103a40b20cf9d01a1a5a31920119eb5a031a3991f509d64a067a21d1fc19bc89fcca1ab1e049b109f60a1691e4e9a9f9e01a1021ef299359eb3a0911d9799e39d78a0651d32997f9d2ba0231ded98259ddd9fc81cb598f49c6e9f9d1c7198b19c0b9f511c63986e9cd19e2d1c2398269c4a9e071cc197ea9bf19d831b5897769b8d9d2f1b30977b9b3b9def1a8596e89ae19c0b1bf3948199869bc71900005e1429189d0212a0fca26fa4be2482a120a595a64926c6a05da4b4a5712562a04ea3e0a48124b69e75a117a38a22f99e51a117a31723729fa0a304a57f251ca12ea520a7582755a207a631a82128d0a228a664a81228a7a208a662a8a2279ca2faa55da85827b4a208a669a84d27c8a20da67aa847279da21da68aa8252786a211a683a8c02679a2e5a565a8eb2558a265a52fa80025a5a2d1a4dca73724c5a29da466a7be239ba26ea40da7492306a248a4dea6022359a105a4cda6c122e7a0e0a380a674224ca095a369a65e220ea068a336a64222c09f29a300a62122929f1fa3e4a50522a39ffca2dba5fc21939fe3a2cda5c221389fcca2bea5b321cf9ec6a2f5a5a9215f9eaba214a6b221769d2ea263a59521079a319faba14b2012974d9c449f6e1e5599b59dc5a0f91c669b12a0dda2ba1a6a9bd69fd8a27f1c299be59f2fa3b81c569bc09fa3a2541d639baf9f5ca2b01d8e9b979f30a2d51d719b5c9fdca1e91dec9aeb9e93a1b81d5e9a829e2ba17f1dec99149ed3a00c1d7e99bd9d84a0cf1c22996b9d3fa09d1cfb98219d0ea0541cce98e69cc29f3a1c8598a69c5f9f181c29985d9cf39e151cc497409c889e911b5597009ced9d2a1bf396ab9bac9ddb1a72966b9b719d561ace953b9a519c701974a47a9b2f9e601dd72b021fed2242284d2fa8238e249a295e3033239124522a50302222fe23c429a42dd822a9231e28ec284b204c210b1cef2721209d1ee7998f281d1996135190542cbc24c923619ea9315b26d6230a235d326d258027b92ab3b7a120031f182bc6b898172e25fe2c9224b1a928ad4e2e98325ba22d286e2c0734b1a57729e52b0b3216ab4c2af828113132a28f2e1d98f92e7a21cd314fa92b2b3924323415adc022a423493490ac2a1ef8233334a4acd91c9f23b034fdaceb1bf422b73497ac891c8e22933473ac721ae722a83473accc19a522d0349dac50197122e634abad011a92215b34cfad429135a07a331aad03a835b0b629d5a85fa311acec29a224361ce022662cae24a01b2d22ef2699226c1a8e215324ed21981a31218c238321e31a22216223b0214f1aec20ab224a21dc1939201322d120f318a91f2d2133205318f41ebe20b41fb518251fbe20ed1fbf18ec1e9d20e41f6c18a11e4f20571f0618241e3820fb1e3c17ac1de21f7c1ec716511d871f321ee016231d121fc91db516f01ce61e771dbd16b31c791e441d15167a1cfd1d081d1e15fb1b091d351cab143e1ba01cbb1b6d14081bb71ce11bb214091bdb1c0f1cd114f11ac91cbd1bcd14dc1a711ca11b32136c18d719b91a509f00803d9c9f11bf296c15d21df728342fd91ef01e282a3430768df814782ab63039195515462a1b30a8206f1feb29fb949718d6116e20129ecf83348c849882a100000782669a09a637169b1800a0d519992105224b28fb2e052168219e2a4c2dc09f96a1502bc52f14a99baa6c2d133346acaaad4e2e7331e2a951a9002eec312cab14a8f32ca03163acad20d8296d31d6a9172c63a39a2f13a36e305bacb2290f1526328ab2051db8206e3110b134160621f631dcb09119eb204c324ab04c190221d932a8b16b180b21f23261b1341a05209c321fb169144a1be03214b29c92779a7332dcb2ee9d95a64f32ceb34aa283aa2e314eaf5da4a3acb82e4aa6dfa0d2a9612c741ff297f6a033285c218d16071cb521eb20f3194720942102217f1a702017222c21d719aa20b321cb20ea198c2091219920101948208d21a420d318aa1f1b214a20a918221f9420f01fe818671f8e201120ec18fa1e96201c204818641e3420891f7a17f61db91fe61e2f17941d681f9e1eec166b1d2a1f351e85161a1db61efa1d4b16f01c481e931d2016ba1c1b1e6b1db415661ca91d2b1d5e152b1c861de71c9114d31b0e1d9d1c5d144b1bc71c5a1c87142c1b9f1c351c5d14a01a8f1c271c6b139b195c1b5c1bac12081858198118b59a3e9c159fa414ad26ba1187182f2a1c2d321e7a1d412b1030c8192c1c292bf8306b1cae1c652b5831cb1da91e832a3f30391e9f1d6a26c72b8514d41a8d942230931f421f2b238b30e21e511c802408328421b7228729c43431255326e52a91373b16249d2e2c313950a558a82b2cf335eba870aaad2c1232fcaa39ac7a2c833065abd3aa5d2c0d3186a93b9cee2b5a31c0a7192a6a287c2deca45f2ec3a6212346a0483083afb2a0279e3d30c1af399e1e146a2fb9ae4c99cf19243165af22976c1b4831fbaeee8d941b6d31ceaf898c171852315ab05d8cf78c2a31b3afcf98a7a0da3082afd69e34a6033149aec59f60a71031bea9709e79a71931a5a4fe9ce4a50f2d7d950e97e4a026247f1e5c11cd8a8d8e87211b16051c1714f72138191420f81eb721b4199720f5209f2186193e2007216421e118f71fb22031217218a31fa720f52069183f1f9f20ea206c18451f9220da202a18a31e43208620b617361ec91f0320bf168b1d0f1f821f2316151d951ecb1e6c15a81c1e1e1e1e1e154a1c9c1d9c1d0415211c601d331dd314c71b291dfe1c9e147f1bd51cd51c80143a1b8b1c8b1c2a14ca1a521c521c3014621a121c121c0e14231a071c071cc313c519d01b0c1cfb13091ae71b541b5c127d182c1a6e1b0080d99aab9aee0d301c289760973f28d029881e0e1e2b2b342e7316201bc42b67300c1acc19eb2b5d31f11c421d3b2bf131e31e0c1e012bb8313f205420ba2aab31e6203321142b5632f2218721012b92324c226d228b2be03230208921742c9333611b701bf22c213313a21da5512df02d73a78da9be2c0b2ebda82cac5d2cc73052a8afaa052cb231f7a701a64a2b3431dba58628f829212c63a3de2d882706a1fea1222d511e25a3f49adb2db7a109a06c8d2f2fdda1219ef413063012a2719cac0c493003a2029b5098ac306fa47299d99b0f317fa4399a299e443167a4ae98b6a0943178a2049c2da22c32a6988b9c00a472325121839c88a4733121244f9b1ea3d32c992475968ea0771dfb22678a9a9a4b9ff32117129715039c54229416b11c2c15d1212018ac1ef61cca21de18f61f0c20e521b7180d206f20ab218918021ff91fd6203d18761e0120ca208417121e9e1f6220b416d51de11e172048165a1d8e1eca1fda15281d5e1e911fa115ce1c071e2a1f6315961cb81dcd1e2415301c551d561ebe14031c081dca1db714b31bbc1c731d6b14561b851c331d1014fa1a4b1cf11caf13951a2c1ccd1cf413441aec1b951cfb13091abb1b781c0f14b219631b461c80137819541b191c0012b7181e1b241c0080ef93d69214860692cc16681bf627c221181a481ad92a662aa819f81acb2b1e2f8b1bd819262c4331ef1b5d1a752c2d329a1a92185f2c48328a1a6d15192c80328117660f042cb0329c149b95a72be6322f8e2f9b132c1c33a19901a0092cee322fa034a48d2cda325fa2cea6862c483160a6e8a8592c3232bea6baaa572ca032dba74aabad2b1b3346a73da9062b9d30b0a5f6a2cd2a8b25fea1682be329e6a43da3e62dc629d5a489a29f2e6a2802a4c49d1f3043278aa0249ad2312c26219ec99857324526d39dce9ba0322b245a9c4f9eb63208225e9cb99f05330d24479c9ca0a3332325979b0aa106342727499b87a1db33ca27a39972a2a4322c288d9b97a1fe2c4b264098c49f61a414244f938f9b03a6f62251117715a7a11c23e7143f1ce2959e220c163e1db7195e22fb161b1e5d1d2e223917ec1dd31d8621d416a61dd31d0821ad16851d0c1ed2205316531d131ec0204216341d4b1e7720c2150c1d121e1d206815b51cbc1dc51f4215881ca11d4e1f0815561c5a1df11eb714121c0d1d8e1e8114b81bd31c0f1e78146e1b921cbd1d0314fb1a4e1c681dbf139b1a051c0c1d1013121a8c1be61c87124c19881a7b1c5512f018691a401c2712a318101a371ccb118a18a11a8c1cb610ba1627191c1c00808f0c5c119187ec9b011175157027949b4e13ea1a272b6c234a8d0b8f362c392cec931b952d2c67308d8d6998542c32324294639a7a2c7d32b694539d822cc9321598ab9d7a2c1233b799d89f592c6f33669e4ea25a2c8c3310a121a5c72c7b3340a379a69e2ca53343a4e1a7a72ce33345a5e3a8932cb03347a699a9222c203413a71fab7e2b7a3358a507aa0c2b0b30bca52ca8ab2b0f1c82a46024932b18a8e5a2612ebd2b8ba58fa2e12f7e2b98a3779b8531a72a17a2c5984733412a5fa0ba9da8333e296f9f809f0b34dd28279e5ea043345f28a69ddea05c344028f19ca7a09734b228279c61a0bf341e29049cbba0af34f1295e9a49a10533f8293c9a43a04e2c1b28f994d69c8da296249891489acea4ba232f8e1194e3a28f23c60dd5160f9f3623ca13821b8a92ad2297155f1d4b192322ae160b1eb61cf2216816c21d5e1de8214e16921db51d6921c515731dd51d09218b151b1d801da3202315d91c301d47202f15631c301d0f20cf142c1c241da61ff014f61bd11c661fb3148b1b841cb91e3e14061b3d1c4e1e0714a01add1ba81d3c13321ac21b531d8212cb19061b0e1d13124119bb1ad71ca211cd182c1aab1c7e11a518bf196d1c9b115018d319421c3b1101187919371cef0fe615c117e31b0080ee88ff800d8090935c0d0393a21e85a04e9d679c272b7a9fe89c859d382cb123709a129d772cb82ca69a4d9c922c2f313c97809e882cd632b197b79f782c7d33589be59f712ccb332d9e03a2482c11348fa0f0a36a2c3e344fa17aa4bf2c6d34dda1dca58e2c653464a489a87e2c67346fa50aaaf02c8b3499a592a9562c9b3427a54ca9172b003486a4faa9d82a622ec8a42ba9472befa14ba4219f412b24a600a3bd2b6f2c02a690a1d330c32c8ba4d7a0b832202cbca2679f0e345d2b73a1189f6534932ab8a06f9eb934272aab9f489e0435a529b99d259e13358d29129ddc9e27357a290b9c7b9e3a350e2a499bf09d2435182bc798ef9d6b33ac2a1599db9fff2a04287797cc9d40a44024a8941e9d39a51524398b50942da353247b0489106e9e80235d105a18f49655220213eb1b7914ed21c714f81c8b1a00222815de1c4b1cd421b014a41c331c63215a146b1c781c0c21eb13211c301ce320a113bf1b331c9020ce13511b401c5220c013f71af91bd81f7c13a01aa31bc31f2d133b1a2e1b4c1f5012061ae81acc1e37128019861a6b1eee113619461a2c1e2e11ee18ce19b61d54113e181419ff1c0311dd17a218691c5a10bd17b118501c88109617fb18731c301043171719001c460d03143816191a0080408d24897d00d49595865b8dea1d92a08b99009bf42acfa36f9a6998462c5ba0a89b1a9c4d2c2223149ef59e512c052e899e7ca1522c4932509f77a29f2cd633ea9fa8a2a02c423430a0e9a2aa2c66347ca187a46d2c8534e7a2bba5842cad347aa3c6a6672cb63413a427a8592cd7349ea4f5a8542c1b3529a594a94c2c203552a577a96c2b893371a535aadf2a432b3ba4e9ab262b8ca83fa4f0a8192aa8a6e1a3b1147a2bf6a4c6a291306a2caca2eda0b1339a2c08a455a070341f2c6ba2169ff734f22b36a0319d5835e02a669e899cc3357f2a5f9e399cc835592ad59dbb9cd435be2aa89ca89b0c36832b129c6a9dc8352a2cfe9a2f9d54332b2b8d97bf9af82836270b98e298a9a5bc246b98839c28a64324a09417914fa202249d8be313209f96236a0d0018089afe227111f01ad60b7d220f146c1cf6183322c3137c1c731ae9212d14901cbd1bcd211a14aa1c081caa213d14601c1b1c4521ba13f81b6d1bc320fc11281bd61a62202312931a581adc1fa411ce196b1a511f04118a19fc19d21ed71043199019571eb710b0182e19e81d8a0f5118c918751dff0e8e172718251dac0ebc166517d71ced0d1f162f17b41ce50d101662169f1cdf0df7140e168b1c6e0e51159f16561c910db014fe16731b0080a800a38030835198928f6d93a41cf3a0699d119f5e2a06a2fc9b2e9c622c57a3659d79a0622cd5a10ea1f0a0522c3925a3a011a2472cfb2e05a186a45d2ce032dea000a45b2c6c3485a0e7a2402cef34cfa1f2a47c2c043566a24ea6a72c3c3587a3a3a77b2c57354ba445a8792c7a357ea455a8fb2baf3591a427a90c2c71355fa4aaa9242c053222a4a4a8c52a1b218da3cfa9cb2a09a7e4a449abbf2a4fa83ba47ba6942a99a727a4e52a692c55a69ba17032462d31a4a0a1bd34702dafa4f5a07b350f2dfca103a0ec358c2c08a16d9e26369a2cb99ec59c68364c2cac9dd0999036312c489b4396f836912c9a988793c336fd2c519830988633492cea950f9bff22ea271a96ea991ca5b6249595c2976aa43d24688e2814cfa03a24cb845518f99d0224890d5e1ac09be623430f7b1aff985b235810a91ae991c5220c11831b6d1416228d11a91b7e18d2213711331b0219ae21f710b51a4e1964219810221acd18e2202b10281971188420b90ed3181c182e20490e8d185c18d31f0c0e51180e18461fbf0d7c179117ca1e8a0d10170617181e140d91167a169e1d830b0716e3151c1d340b28158915a41cde0a69148914291ca30ab813a7130c1c6009d1129413021c180bd312e313521cad0aa710fe10e71b0080cb80fa00e084bc97ce925494041d22a1599deb9e122b76a2a69cf59e7e2c33a49e9bd99e5e2cfaa4b79d7c9e072c2ba32ea1a7a2682cde26a89b37a1512c4d307a9f55a3a62c2d3428a0e9a1562ce73423a2f0a45f2c76353ea4c5a6b42cd7359ba3e9a6912ce53571a3b8a6252cf53527a3aba71c2cff3568a420a8932be6349ca44ba9e72b642e1da460a9762b83a37ba440aa652a98a8b9a56baaf729e6a4eaa32da85a2973a5bfa2cfa10a2b5ea341a1fa2f262df1a227a06434242e16a32ba0c935962d43a1259f39360b2dbca0409ec336df2c0da1d79cf836812c2aa0d5994a37e32ccc9dc4997a373d2d219ce3991e37a12d88995a9b34329e2b0c99e49c479b9625169a4b99aca4f023fb94c40ac2a1bc2398909018d39e2524ce8e7d189a9cd323138cae19ea983d231185061a479232238d04471ac78baf221f0a7a1a490b7d22a30c131a441413225e0cc0199915b321e20b4d192f157721020de7181616fd209c0c90189f159b20590ae017371521201b0a7e17f615b81f2c0c1e17a915551f0a0cbf166915c41e9609c5154414841e3a0960151c14471ec608f7149913971dd40525149312061d0602c811d410be1cfa8188110c12ca1ce78166106b107f1ccd012b109b11701c4f07a40f2811721a00004d0cf60cd682f0952e9008947c1d0ea17d9c6e9ec32af9a2159e02a0172c18a4a89e3ba0332c62a4ff9fa2a18f2c97a44ca049a28f2c5ca24ba056a15a2cb524a1a1c2a4962c9f30b9a1cba5a12c213499a173a4472ca83558a2aea57a2c203666a3c0a6332c543612a348a68d2b6f3603a438a76c2bbd3538a598a8a82b273222a52aa9692bfc201aa44aa97f2b1ea568a444a96b2a6ea509a4baa97e2a58a703a46da96d2986a789a3cfa6c8291ba38ba25828d12bc1a45f9d6c32fe2d96a23a9fb135f92d3da2549fa0364d2d91a0309e6337212dc89fd19cb4371b2d35a0469c0438712d819fae993f38ff2d549eac97f937a62ea19b259a8431782bbd99569c81a246254298788bbba1b724c196fe8a09a14e24a395ad8a3fa13624e092281410a07824f28d5918de9b5024d88a4d19b1986e235a8ad518bc94bf22c0898c186691a2227483dc18a68a2122420390189d10dd218108b9182c13782147080118b4121c21070888175112d120a4023f16071272209102e415e60e3d207202e5148f0eca1f4f82ce132f0e581f32825e13b907a31e0882cf120607091ebe810e116306b01d92819710cc05291d8c81870e4a058b1c9581860e11055a1cde848809d2044b1c56044b0ce50ae61bf903a40e310d9f1a0080528102833684569890943f963d1d56a1499f46a1fc2a5ba29b9f0ca20f2c46a3f79fc2a10f2c18a4cd9f72a2352cd6a495a0eaa2732cb8a4a99f9ea2672c1fa430a18ea4732c3e2178a131a6cb2cb62f89a14fa6962c67342ca201a6812c3d35e6a3e5a65d2cf33518a490a6d52b97353ca44ca7f02beb3345a490a7a32b3f2b33a558a8f62ae6a482a66eaa302b00a8f7a441ac5a2b2fa8fba2a3a93d2a71a785a2cea9ce29b1a743a21ca96a29caa4b3a1bca7212a99a27da0da2c882c99a0c59ed534bb2e2ea05d9e0037df2ef19f029d2338b22e5fa0489a5b385b2e4ea01b8d6738272e9d9c7219bd38e92e7b9a6c15fe37022ff19b439d662e9f2a489cf79b76a68525ea992b95f8a336255095911621a36625ee912918a89fd5248a90b318be9c59245890fc18279ab123cd8d7619ca985123888ddf19379758236c8a9119fc941b23e9892719b294b022708c24184c945722ed88951786905f218388f3151090d220be8aa6149e8faf208b8c451306924a203a8c5511c3911b202c8c400fac93891fff8cd70e4793251ff78cbb0bb8929a1eba8d200b0a92ef1d6c8c9e0a76915d1d098c1e041b8fe31ce38cf403ca8e801c148cf403b68e721c548de383868e531ca588a3090b05051ce28714098204bf1b0000a8040e083682cc989997a598dc1d0aa118a0bea19f2a12a3a0a059a2142c69a361a039a21f2ce0a39ba07ea23d2c85a472a0bba2352c36a56ca0fea23e2c43a595a193a4372c4ba395a171a4342c179defa1f3a49d2c2b2a369ea4a3242c79303ba289a5a12b623298a275a4f12a053109a480a50b2b432a20a59da7fd2a10a2daa472a84d2af9a60fa452aac12a38a879a4c0a9a52aeba468a3dba8d02941a4b3a328a94a2932a40ca348a9252901a3a3a2b7a7ab28a2a37ea151a6af2938a406a08d30a02da5a0eba0893600301fa0959f3738d02f27a03d9d5038462f08a0409b98386e2f6d9edb930c397330b69c7312a6375b30d29b7f9baf297629fe99fe91f19da1244799938bb5a0cc243798760be1a0f9246398a814399fbb24a0959718009c632466941319159906242293a8198797aa238e914519309565230c91f218f7941323fb8e0218b294ec2206904f16fb958422648fbe14d096c6210790cb10189655215b904b0db195d2202f90a40676967a20ef8f418624961e207690ee85ca95c31f5190288c6996461f44908b8e0196d01e1490208e8795451ea08fb98d0a95b71de48e4c8dec934f1da98e1a8d9693ea1ca78df18c63939e1c858eaa8e3193a91cd48c478e94911b1c068a2c83618d521a0080b70204075782609805960998e61c20a162a015a29f2af8a1ff9faca19e2b7aa2e59f0ca2e42b74a34ba01ca23f2c25a490a019a3702c70a444a0afa2502cb0a47ea14aa4522c80a305a0d0a43b2c6aa4d8a098a3ca2bcda2e0a08ca3052c7a9cf8a1a3a6392b9c1e0ea441a7ed2a079771a451a77c2a15a4d1a406a8002a2ea842a501a9572a60a9eca224a8502af9a569a4f9a83c2a20a517a401a9d429bda433a3c3a86f2978a4eaa2e7a82c2993a301a3fda8b9284ea302a399a8992829a4b1a0d591602907a0559faf33c12f4d9e2c9c0d38c13063a02894ba38a730b39e588d18399b30349d8c163939ef305b9d14187c376430ad9ae99aaf200727e69a45155ba4b2251e9a9a184ca13325eb986f189fa18425d896f51a419b5f240895671b5d982124cc932a1bf895e9234493f519c792c4236292871935956b23a6905f18cb94d4221d90be16589469228e901a158b950a22c09136118e96bc217091aa875d974521e6917090a498e0207892ce9156988e2006936691a0984920f99282925198be1f27936f9382983d1fa79204933f98d21eff919d920b98471e0b915b92b097f81da29047938a97da1d5f90c992f496371de28f2d921d96961c7d90d892ae95421ce48ec2912795041cdb91cd90a78dc51b000096150918d615e49dc89d679dc827ada145a14ea3412bfda152a069a27f2b3fa249a0fba1cf2b2da330a05fa20b2c11a468a03ba2252c34a427a0cfa1022c6ea424a0dca1d62bb2a42ea1fea2b42bc7a4f9a1cda4752bb4a4c2a229a6fa2a3aa6f6a3fea6562ba0a661a56ea77d2a61a74aa550a8f72918a7daa473a8082aeba7c4a4f8a8772a8da571a492a8352a5ca5b2a395a8f329a1a492a353a885293ea4f4a271a83d2986a342a23ea8e028c3a2bba183a75a28f6a2cfa1f7a60d28dea0b4a0e0a6b32801a35fa19627032b2d9fff990d3615319c9df99591386931d89e538df8386b31999c7b167a39f4317f9e161ae3369730cc9fec961ba23826c49afb9171a2102545959e1b8c9f7625d498331add98c724a994e81bcf9379240192851ccc8c1f24a7913c1c898ccc237d91061ca592e4233092011a4a958a23d092eb186198ef2224936615cf995e2269938b1167992122d2931608af99c8218794c290729a2c21a094f793859abc20c2941a962d9b6020ea945d969a9a0720af949c96a99a861f9f94d496a19abe1e6d947596479a621e1c940796cc99e51d0193c4956f99871d4792f195b398221dcb919795b998a41cb3914d958498481c289293950098391c67915295c997ee1b4e91b79585981219000076120d15b2161c9ef39df19e1f2708a2bea298a4fe2a42a245a169a3412b1fa2fca0cda2672b56a2ab9f5fa1c42b2da3209d51a0ef2bbea36d9ce29faf2b13a46a9c84a05f2be2a3539d9ca1482bdba3bea04ca33a2b8ea478a18ca43b2bafa41fa221a6b72ac5a5fea336a87a2a0ba67ca4bda8422a43a518a44da8f829e2a4f4a3b1a8e129f3a481a4c6a88f292fa594a4cfa8322928a58fa4a9a80c29f1a444a470a8d02878a4daa348a8852846a4eaa387a88728d2a3d1a3a9a88928fca2aca231a7112870a1fda2aaa8f5287ba168a1622c2e2d55a38a9c69373c3277a08c1836395f32e59abd1c4d393c32159c580c2934d72e7b9c90993ba27b252b9b4e984fa25924de95e71cb89a922420945e1dd09cb82410915b1eaf0d8724528f7d1e2a0d4724c290131e63133b24e191021dba8c36249693541aba971224e393c714949bb4238694ff88529cf0221595bb91c49c5222a595c294d09ce021a8955495cd9c6c2189958e97729d082190954798a39d7e207195af982a9d1e20a1950d99059d981fa595ee98849c9a1ebf95a5982a9c171ecc9574985d9bac1da99542986c9b6c1d6e951498249b091d9d94ac97d19acf1c46945f97b79a901c9f931297799a661c3192d795f698671c9891e395c599c51900001116611ac206daa0aba234a46f293ba22ca486a5812a3aa2b8a2a0a48b2a5ea2c2a141a4ed2aaea23f9e0aa1432b91a15a0e3e967a2b3ba1b2196c164b2b7fa1bc194c10c72af3a1e094739b512a18a3d99e1aa22b2ab0a361a1e0a4ff2946a438a307a7082aaea4f2a372a7132a08a63ca450a8db292aa6dea4c3a8a6295ea618a598a879296fa594a5f3a8732952a513a50ea90e29c4a488a482a8de2897a422a45fa89d2814a415a318a8552830a308a202a8022858a299a107a89327f8a1f2a07ca7022755a3ada0f1a6b7264aa42ea053a7142869a01ea03132f42ff99e4197ae38863227a3678dd137f3310a9fc8a0b928552a709e179c6da235257d9b218c48a00024fa956d1dda9ace23a69124204719ba232690f720db1c3424ec8c1821761da524ab8fa120191dad248092901f8e1c7b242a93a41dfb1a18246492671be211b823e0946112e79926232a960194879da722e196e8987f9e08228a975e99379e7621c497479afe9dfe20d297919ab79d64206d97709a7c9d04203197599a5f9d481fcf964f9a439d9b1e7f96e499ea9cf61dee958b99989c931d799546991e9c371d57951b99ee9b061d33952e999b9ba61cdf94c5980f9b831c0095a4987c9a821ccb9347986b9a261c31908e96349c021a000096162219c012eca054a39da425291ca25da41da6292a31a3d7a3c9a5622a4aa261a2c8a4902a02a1c59ac8a05d2b5ca0b01d0f1c9c2bf79fb3200621df2afd9f362062200f2ad3a00a1a8b109b2964a2719ba8a046295aa39fa01da4602933a4b0a275a5652979a4b2a493a78729b8a492a568a8a5296fa590a599a89529afa4c6a4a2a89f29aaa436a4e5a76729aca406a4c0a730298da4cda3dfa7c228a7a423a309a8c2282ca42fa330a88d28bfa3c0a211a84e28c8a35ea2f4a717287ba352a29ea70928a7a32ba28ba7c527aea02ba12ca82c28309f02a24aa94a29aaa0739c842f082ec8a15b9a01303d2d199ebf9d84a20e250c9e269cc2a4e5235b9c17928da1b422d697101d809770218c86d220ef1ce22191111e225120f122eb1209229f2029241211a52119208c24ee0b3c20e61c7e248b920e1cb1921d24ac967a12e29b1223e09745952f9d882214981a98ff9d18229598d399b49eb521cc98929b669f2e21ee98749c1aa08c20ee98a69c15a01520bf988f9c03a0c31f82985f9ca89f681f6198359c419f041feb97089c9a9e611e3e97949bdf9d141e7496dd9a4c9dae1dc8957c9ad09c5c1d5095029a9a9cf31cf3947799309cae1cae9469990a9c5b1c3f94bb981d9b291c989497983b9a4b1b000078172c1b8012cea189a40aa6cf2836a378a505a7a32986a260a4bfa5a02944a2c4a2d6a4402aeba0fa98169c522b679e7f2340240e2cc19c9b26f927312a249ece24dd25ad2883a17318a1906a2861a49aa29fa48e28a0a420a552a7e72862a4cfa531a81c297da4fca56aa815296da4aea540a83e2963a44fa533a866299fa525a50ea85a2958a5f3a43ca8a129e6a469a43ca8aa2913a4eaa3fda76d2937a35ea38da70d295da235a29ea7b82806a2afa1aaa7bf28d1a1a2a106a87b2820a238a22ea8862885a2f4a22ca848284ba3f2a238a8cc2790a11aa2b0a70f27ca9cd8a047a731260b9c1da015a5de24299cee9d31a520231f9dc59d97a4af20e19c9d990ea26c1f8f97721fde17e61dde144b243222981f9917be249624e9217c17d424f12423247317462431241f25c8119b21a720e5242891f91cc0178024c6977e09999c0e2407991799df9e2f233b996a9ba69f23226a99ed9c30a074215f99f79c27a0e2203599ed9c23a06920de98c09cab9fec1f7398779c359f711f4398619c019fc81ef297179ca79e3b1e9b97cf9b669eca1d3497849b679e9d1daa962f9bf89d361d0396b19ada9dec1cb6952f9a5b9d561c5c95fa99ca9c011c5e95c499789c031c6a944a992c9d551a3694f4984f9b291a790df410bd109982099c369dec9ddd1c52a431a665a8b228fea265a614a861298ea23da5eda6242917a2d1a4f3a69b2aaa9c41241b267f2c0521a52ccd2df62af617bc280a2ab52480a18ba0d9a21225c5a39da55ba795271fa4eba51fa8da28e6a499a6d0a81e291fa583a6e4a849299da465a6b5a84a294da46aa6d3a868290aa4d5a5b2a87c2974a42ca546a89d29ffa4dfa49fa7962912a52da436a78b2978a487a3e5a66b29d2a427a269a577295ca377a1e9a54c29ffa237a11fa718290ba394a255a7ce2880a2c0a3c5a75d28f2a193a420a8e427a4a1b5a408a8102725a124a447a72226bba010a3f7a6d624aea0eba1e6a67c2178a085a0f1a5db1d059e589a47a2751ad295d21eed1aed1aae180b252825e61b071cd5275c28361ed81cbc275528e2222416e82540260a261391af20bb1fcd2560987d10fb9bb924519a539c4ca07123b59b549e6aa12022989bbc9eb6a18c21899ab59e1fa24e21169a5d9ef7a1e220cb99309e69a16d206e99b49dcfa0de1f8399599d47a02f1f6d99019db89f731e1899b69c399f091ea9986d9c909e741d3498249c289e1d1d8e97a39bb29ddf1c8a96019b839d8d1c06967b9a279d3a1c9a95449ae19cf51b8995129abb9c6d1bac94d999cd9cd41b5f940599489b8b1b6b16751d981efc91d89c8aa018a27a21b7a15aa55ba66827eda236a52fa72628c0a27aa583a7272871a27fa583a78327c3a134aa37aba52a600f19281f29cb2bb6a530a848a9332b7ca183a654a9a028d6a403a72da9592994a468a757a9572967a444a70fa9fb286aa438a73ba92629a5a442a73ca9512990a45ba748a948299fa4eba609a934296fa47aa6b4a86529c1a4c4a57ca87629c1a421a569a7dd290ea321a464a7062a90a210a45ca7f62973a282a40ea8d9291fa433a410a95f294ea2e7a48fa9a02867a145a566a8cc2676a1a2a411a8b32580a1d4a449a84c254ba1c0a413a84d24d7a04ca46aa71723e3a04aa4e4a6b22206a05ba30ba611217c9e46a2ffa4f01f519bc09af9a2088e46920c25f724dba1e8206a2a232c969c8322352b362c2c26b61c4b2611255a28a89a8411ada07e267e9bd89ecaa12424179c0aa037a3a322a59b34a08ba33e228e9b05a00aa3af212f9b469ff1a1a720f09ae29e5da11a20cc9a789eefa07e1fbb9a629efda0291f819ae99dcaa0a71eb299959db8a0541e6a993c9d4ba08e1dea98cd9c7f9ff81c8f98589cd49ea31c5998129c6c9e791c0c98e29bfe9d481c8c97ba9bc79d151c38975e9ba69daf1bf396769b639d871ba7957c9a399d951ba5946199139c651a0000bc131c141288aa9cef9e6ea00320aea15ea593a648263ea27ea562a7122750a265a536a74e26bba152a4bca5ad246f97319a869c412077859f09128c0b21e9a090a40ca60c27d4a4d6a73ca9a42870a40ba7f4a8ba288ea42ea7fca8af28b8a413a7eca88d289fa4ffa600a98e289da4e8a6e4a8732885a4f2a614a9562876a4baa6ffa8322820a490a6fba8aa272fa42da6eda87a2710a40ca601a98727a2a3b5a5e5a876267fa20da597a84f246fa2b0a431a8c02420a2b5a403a86e24f2a1cba413a8e424d0a1a0a4bda7c624c3a18da4b1a74f24a1a167a481a7fc234fa135a428a71b2359a115a40ca7b3222ea10aa413a76e2209a108a4c1a6d82179a10fa416a73e22b19f3fa259a67721e69bcba2d0a5b01eed24b02c7d2d4da974270c30d630292bd99a5a9efca163264a9baca0a0a423221a9dd1a0f3a31321a89ccda07da3c720779c7ba04ea34d20549c3ca0c5a210200d9c24a07ca2891fad9bcd9f48a20f1f109b6a9fe5a1871e5a9add9e89a1081e139a589e00a18e1da799c89d6ea0d71c0899439d23a0711c9298f29ce99f561c1f98949c709f2b1cb497659c0f9f0b1c9497309c729e051c3497219c049eae1bec96d39ba79dac1bf596ab9b749d681b3496ef9a0f9db31a1a95e8991d9c151a0000b6174b1a1d8164a0eca3e1a5972509a117a5eea7df26a6a11ba533a777267ea17ea4fca53025039f84a124a3d021469b849fb8a15922869e3da3e5a4f825cca244a63ba84b284da4e2a6b6a870285fa407a7cca861282ca41ea7f5a86328e1a30fa704a95e28b5a301a7fda8332888a3eda6eea802283fa3c4a6dda8a82753a394a6bfa8d7265ca32ea6daa8cc2572a3d4a5fea8b6247fa2a5a400a88b2283a15da31aa69b209aa21ba25aa55320a0a090a2cba575204aa07ca2f1a53a2060a0aaa2c4a674207ba01da308a84f21bca16ea310a86b214fa2d1a3d5a79d21dfa10fa41fa79021c3a10ba4c4a6b12103a196a37aa6ca215ca064a353a65e21db9f1aa327a61f21e09f2fa3a0a61821dba100a431a6012196901c966e98051c63049e10de1305040496879b85a06512269da7a00ca4f91c7b9d85a114a4591fd19d25a1c8a3991f4a9ed0a05ea3111fb89d89a0b8a2aa1e4c9c06a0f0a1331e7a9b659f9fa1f91d7b9ad29e3da1941de8997d9efba0681d9a992f9ea7a0411d4399ce9d52a0cd1cf598659d09a0681cc698179dd19f451c7498bc9c579fe11b5e986f9ce19e8b1b0e981b9c4d9e391ba397029ced9dad1a6397749b959d701a4797799b399d6b1a6496e09ae49c911af2948199da9b32190000a6139217f0094ca0b2a333a54a2505a24fa5dda64126faa058a47ea5152525a0a4a252a4d923969e3da126a39a22d29fd3a26ea49124d4a0daa489a6d72675a203a638a8072807a377a695a81d2804a383a6a7a8f827eaa262a696a8972714a36ca6b6a88d2750a391a6e2a8b02766a3aca6fea878275ca392a605a9e52643a354a6cca81e26b2a2a8a568a81325b8a2f1a403a8332470a35ba497a78a2341a343a43ca762235ea24da4f1a662237da15ba409a77c23efa03ba41fa7452384a022a404a7f7222da0daa3c2a69d220ea07ca371a63622de9f4ba338a6ff21a79f28a3f8a5d621979f16a3e7a59921559fe8a2d2a55b21139fd6a2dca52521b49ec3a2d5a51f217f9ea3a2f5a52721369ea3a205a63521079dc1a1f9a4a4202a99489ea4a0151f0697499cf59e841d1499069f7da2891aa79a8b9fffa2d91a5f9b09a0d1a3341c249bdc9f02a39a1c6b9b929f74a20f1d8c9b9d9f27a2641d779b6a9feba1791d0c9bfe9e83a1771dac9a789e27a11c1d4f9a169ed7a0b51ce599c19d8aa07f1c7f997e9d4ca02c1c25993a9d1fa0151ce898fd9ce79fab1b9998bd9c7e9fb81b2a98849c159f731bb9974f9ca99ede1a53970b9c2b9ec41a1397c79bc29d741a7f96509b8a9df71937964c9a8e9cf1187e9c010224169e1baa2b49202b2564282a2fe0238124782a583031239124262aad309e227e244d2aa82e29236123db28302cd11d1821f925262d14212d21fa250e31bb1e98217e26a331c8240d26a82a792a32245d272b2bac328d21cb22262a95338124022282285c333f1fbe1d6928e930b4aef0afce2b0f3418acb7a89a2c5533a8ac1ca8c129d933121cbf2cb4226f3254232030731cbe2f94246c31c9a12e2a24247532eca9ec23e722c532b5aace202f2415339eaa741f31248e337dabca1e1c24893355abaa1f6723893355ab2a1dbd22e433adab5a1d7c22ff3383ab9d1b29220e3417acb01c1a238f33c2ab0d1f7d210e3374a9df9cb3a4f42f82a81918f41eca2e549ae21526222e29692142184421d72400212c1a5821de23dd20d31b56218a23ff200e1b04210f23f320d21ae220ac22ae20131a6620542270205f19eb1f8e211e207818711f1021811f84183c1fdc206f1fdf18241fb820641f6018be1e5920fb1e3318481e4b20771e9817f41d0b200a1e08176f1db91fc51df5163d1d3d1f8c1db216011d0d1f381db516bd1c961e011d1416751cf61d881c3715061c0a1ddf1bd914591bbd1c661bcf14491bcc1cb41bb8146b1bf31cba1b1e15521be81c651bc514321be11c281b9113f718ca1a8f1a52956c83391099829d2a551e8d227229c22ea61d6b1c482b233030175f18f12af930051feb1d1d2bb12f9f2034209829e91b3b15bd1dae26b99c5317141d9d24342a67208820f727632e19248c2367293b307d227222602a54304f209921572a0632591d9418942a0f315faac1ab8a2920310caf77b00c2bc731b8ae10b0792c9a3296ad95adf327dd32d2a9c69c5d160e3287a47a2c3fa6882fcd8ee93084abb1283e1f6432abaf381b2b21c43191aedf1778212532a4ad53195f20b932c0af8415c31f1433eab01417be1fe23245af3f16241f6333f5af3e163d1e28333bafdb8e641350337cae37973d9e3533f8ad3a99b4a3833286ac3ba06fa8322f6baa7c9efea65929f4a744846c98b5236196de17ee1d7120981d94198a20a8211420da1af62097229420681a1c2139225d20231ac320e121392019196020bc215220d318f91f54210c20a2184b1fc1207a1fb118651fa220891fe418f91e8520981f83187a1e2e20061fd7170b1ee11f9e1e5e179f1d881f201e1817641d001fda1db416181dbf1e741d3316d21c4e1e3d1d3716be1c241eee1cdc156a1cda1ddc1c5915351c681da01cb614a81b101d541c7314571bc61c101c9b14371ba71cea1b5f14911a981c0b1c9e13f319f71a251a21124d17d2186918d797189a139cf8112a26700c641d552ada2c9019ee17c72bb82f8b13d7174d2b4131681a091aec2bc031871d961e1e2bce30e11b811cdd2571315619c61ff327a534e31fbd22bd280a3858200322c129ec38cd1d691ac62b3837a30fef90172ae531b6a4c5a55b2b493089a93dabac2bd72e8eac58ae1f2cdf3017ad31af2a2c883051acbdad682a9132e3a9e3a833290d3265a6f7274f21a62df8a1502eb4a36022ec99333077aaad9cea8d4130c9abd29a141a4330cdaba9988b1c3f311bac0f962e1c613165ac568ece1ae33152ad5b90e815233270adbb92ae8c39326facc69a439da23285ace99c6ba4103211adaa9d28a6a031d5a99f9d59a6e62f28a69d9b5da4c428aba11693d39da190a110e2148e19168e3a1ff917771e341c0321ec199f207220b720021ac6205821e420c41972204d21eb2002192820d320a8208518be1fbc206c207a18931fb62090208818591fae2089205b18fb1e672022200a18521e07208e1f2f17a91d831f0d1f8e16541dc61e581ed815c81c4b1eb11d6a15601cc11d601d3c15331c7d1df21c0c15181c451dc01ccb14ab1b0c1d8d1ca014611bc91c511c3a14e61a651c191c3a147b1a1f1caa1b06142c1af11ba71bbe139c19ec1b591b1c14d319361b081a9f126d188e1a531b8c8ea4952d97b78ea51e7b950819272adc287718c014152ce42db20d3015302c733078178315642c6431991a161c492c0932421eed1d4d2c3f32961f87202e2c653298202f22612ce432c9203322be2c5432eb1b251c252d0f2fe69cd19fd92c872e82a426a7ed2c892fb5a82fabce2ccc2f5daaebacb52cb9302baa7dadd82bd73141a9baac952a4e32cea8b7aaaa299d31ffa50d9cc527ca2c9fa08c2cf722169dd19f2f2fdfa0b3a052980f2f33a750a0f99a2e3021a7d49fcc9a063168a6439dfc9926318ba74b9c5a9af8316ca82c9a9a9d9832e1a7199b809fa83272a7939ab1a0013333a5309b70a2283374a1b89b16a461320b98559b71a42e2fdb1c059a29a3f8254c20a694319fbea1a6202284c49700a100215114f419b19988211d171b1dae18122162181b1f071e2f21e0183c2051204021de183720ba20f020a418551f4e207b204718d91e20207220ac17791e022029200b170c1e761fbc1f73169f1de31e231fc8152f1daf1eee1ee115091d631e9f1e7315a41c101e491e4e156b1c751dde1d1115321c4a1d7b1de514d31bd11c2e1da8147e1b9c1cf51c5114301b6c1cc21c1d14211b881cb21c1314811a4d1c761c17147a1a1b1c421c3e14121ac01b061c0f1388195e1ba81b501346196b1bb61bd391b58244031a951c9179143c19b02861217118e31ab32b302af216061a2b2c242f9714a30faf2c3b312a0ef38fd02c3232bc14f10fbf2c4c326c0ee18f862c8f329a8e14907e2cb03218955c99752cb932d69c5ba0ae2c5732aba1cda4672cc2313fa525a86b2cbf3134a7aea9802c2e3231a888abab2cba3235a853ab2a2c2333aea819ac092b993308a89babac2a94314ca6d1a69729da2990a35f27a628eba498a2682df02688a441a34d2e342316a32aa1ca2f5f186da0b09a0a328c18069fb99cb832a098fa9e739f1033d3a1899d29a07833cda1d09c0ea1b533c99e9d9cb0a102347698859c8fa209345718949b97a24733e5205e99eca14b308222729561a02f24ba21ba94ef9eb2a51f20bb925a9ba9a460208b12311978a08a21e4144d1cc18c7f217c16b61df91bb72178178b1e6e1d50211417071ef11dd120c716d41d111e8120ac16991d401e4f20c616a21d3c1e3c2074167d1d701e1e2016161c1d2f1ed51fc715c61c161e611f9315961cb91db21e5c15911ca71d581ef5144a1c531dfa1d9414101c181db81d7214d41bd41c6c1d3114581b941c231d9613af1a221cd61c1d13451acd1b911ca4127319ec1a3b1c5d120419691a1a1cbf12b818ff19751bf2116018431a331c6611a4174b19de1ba18fde1561181a96fe9b9319631c5c29149d4a8db00eff2b7f225794aa95562c482c108e609a5b2c7e307c943c9d8d2c4c3277998d9cd62c91322195d39ddd2cd6326f98259eda2c0b33169c5ea0d72c6a33f8a0bda3ea2c8e33a9a204a6eb2c853394a4e0a7d12caa3351a595a8b62cd33336a6caa99a2cfd3313a70eab582c5934c7a78bab582b5134d0a6b1ab0a2bde3087a62fabec2a182147a548a4da2934a56da32f2a7a294fa52da4052ee7297ba3969eab31d728b1a1a39db5331827c0a0fc9d053408252ea0989f2334c121be9e77a05134cd212d9d02a16a34c81ef79c75a1a5349721999c99a1af34ec24209ce2a1f8336c26f29b5fa2e42fe526ab9932a1801d85241f942a9c44a5ca221791269863a4d322e384d08a8ba137221c10d216f09d68226f14791b818c0d22c015771d7d1a9d218b162b1ec31c54217616d91d4a1d2f212916b01dc51d13212216681d171ee420d4150c1dbe1d8320b815fc1c561d1d205d15821c4c1dbd1fea147c1c461d551f2815501c031df71ede14141cb31c881e6614a51b6d1cf01d2914e51a1d1c841d0d13af1a071c271da912fe19341bd51c3c126019ef1aa61cb311d318541a4d1c6e11aa18dc19321c8d114d18b219da1b99108e174f19bc1b741067164018fe1a0080c7989d9b0310699d729c109d9226cba01094e88e2f2c95a05f9a5e9a682c29233f9b739cda2cfe2c369b859fab2c4f31519b6ba0a52ce432e79b22a0c92ca533dd9c3da0b32cee339a9f5ea2772c1a3473a1cba4d52c4634d6a23fa6062d6e342aa444a7b02c6b34b4a550a9922c8b34e5a50eaa622c9f34ffa5c7aaa42cda3437a62eaa412b8e3421a63babdb2a82301aa65fabee2a439be9a4eea78d29f6a754a4f9a1232a1fa733a4972c9f2a66a583a29531452ae0a274a106343a29f1a12aa164345b289fa1a6a097344a2504a0b5a0d93436247c9ea3a0cd34c621399d07a12b353a24b29c9fa00a354c25cc9b80a04734d627619a4ba0942f2727be96189f581a48246f94a09ce1a42d22c894489c29a5d122a08b5d917ca23a23360e9015a29ca422b011d619148cbd211f14541c1b185c21d714fe1c821b69213b15f51c6b1c5d21c214cc1c621c0c216814cb1c9e1cb4205414731c991c85201314251c441c3120a313c61b531cf41f8713f61a0b1c2d1f6113a61ac61be61e3413481a481bb21e5012131afc1a321e3a128a199b1adc1df5113e194d1a971d5c110919ea193f1de81174186b19cf1cf7101218f618671cbb1035183f19361c7010b0172419481c3310e216dd18841b240ef1132115401900809f99a89cc010dc9eb59ee5a0172721a1bd96ab9d102c04a4e19c139e4b2c23a1799e2aa08f2c7424889ed8a19b2cd72e669ff5a29b2cb73248a055a3b82c09348e9ff0a1c62c4834ef9f64a3ea2c6f34eba142a5c52cab3495a3caa6022d0335f7a38ba7d22c193583a47da8882c1135f8a47ba9722c54359ea5bca9242c5735f3a5eca94b2b8d346ba6cbaacb2a442e43a517accd2a39a693a5c1abbd29f0a521a564a9a5298ba4a1a49d29f42941a2eaa17b31812a5fa375a1c833732ad2a289a1a5340e2938a16da01535b727879f20a09735c926a79df89eb435bc26ac9dff9ee035ac26b09d219e0c369f28299c729fc2348329a09a539f282fb1276097fc9cb3996b247c953e99d5a48423dc97359a7aa55e23c6945c91bda21a230a8c0d14d39efc22a60dce18459a6a22bd12dc1b1e0cca21f913d51c18197121b413d41c8b1a58211c14971cdb1b45211114b01c7b1cf820c213691c231cc420da13091c1e1c5d20d9124f1bb31bda1f6f12c31a8b1a421f0112f319181ac11e4311a719231a431e1c116419b119ce1d6110d0184b19661d02107318eb18041d450fc1174118b71cf40ef0168d17961c1e0e441647176b1c000e281618174e1c180e151512163b1c110fd4154c17c61b220f81167118321b00804e011f854408719c3294ad98792727a1599d3ba0822bffa2159d489e8f2cc7a3cd9dd4a0cc2cb8a168a16ba2a72c10285fa0a2a3822c6c3075a1aca45f2c0d3482a14ea5b22caa3449a2a6a48b2c0535d8a2f4a6f92c3335c8a3cba6d82c8935cda399a7912cb6358ca477a8982cd435cfa4c3a8e22bc23551a5a4a9202cfc359da5fda9e62b5e34d6a4b7a8922a2a2b9ca4c4a9cc2a75a814a653ab6c2a1ba720a54daabc2912a501a5dda4452a0aa64fa4872e362bf1a4a7a36e33a02b15a471a241350f2b34a20aa1c235f529d4a108a001365629999f769e2436a328329de59ca636c728629cfa9bf73669290c9a789b19350d2a9498c49c8f2d30283f99c29ce0a04b248797359c07a57e23fa95db9814a41d23c9904f14e3a03f232c857418cc9ef522b10d6e1a959c9222da0f6f1b2c997822a010ac1b1a8c06224910d81b60169421ec10e31ba1185d217711601b331919214911e31a8619e120e610441afe1894207510b1199b1839201a0f4c19d018c81f870ea7187e18441f5e0e73183318cb1efe0d3218d617571eca0d40174617ac1d3d0db516ac16331ddb0b2a160f16b91c530b4a15c415531cf40a8e14ba14b81bf50af7138c146d1b7e091113ba13941b4a0cf713ad14211ce90bba12b614521c0080d58092049204889c1d99789b1c277ca1139ebd9f202ceaa29a9d0e9f8e2caea4029c2c9f932c57a5cb9f05a1652ca2a117a291a3892cf829b59f0ca2812ce43132a2f2a4b32c9d3468a277a4a52c653541a417a6b82cfd35c4a4c8a7e22c1f3617a456a8e42c43361ea461a8ae2c6b3654a494a8342c7136b9a492a8082c3e36ada413a9552b66334ea5a9a9222b279e6aa4d2a9762a4ea8b6a5c0aaf529b7a523a4baa82e2967a632a415a9da29caa408a46526272beba344a368314d2c2ca3d1a1ee344c2cf3a076a1f9357a2b1fa074a08836672a989fb09fe836c429d89e489e8b37a02a01a0549d68371c2b1f9c729c4435562bed9b889ea12b4727f79a489f46a877246b994e9ed6a62023b396219666a45b232c932d1155a165233792a117269e4823c98eec19599a7e222885321a809577229b04661a158c4122410a9d1a8a0bc621aa0cb91a591453211a0e621ab7153421830de1195215d920220d7c1949167420a70ca5180b171520810c6c1886168f1f580ca1171816111f320c3417c915b41e040cd71697153a1e9a0b8d1671140c1e150982156f14091ebc0828158a12b91d0a0651148711d61c0782f411fe108c1c1b829211c510831cf2867e106310261ce0050d12c612151cd20a71128813841a0000d61678191d0e109bdd90fd916d2600a2e19c0e9fba2b6aa3609eb0a0282c82a4f19f91a1822ce5a444a059a3ef2c62a5d9a15ea3cf2ccea1ada1b1a0a82ce12ad3a2ffa4bf2c18332da419a7df2c68356da38da59d2c523668a4d6a7182dc9367fa43fa8e52cf03636a4d6a75c2cfc3619a497a7d02b183744a4d0a72d2b463676a49da9f52bf02fa8a4e8a9332b33a23da5eea81b2a0fa6dba48daa642a0da82da47daa9829eaa790a4e1a858292ba43ca48ea4d82938a671a2462dde2b18a2c9a1fd33622c6aa18aa01036972b77a053a0cb367e2a2ca1a19e5337972af6a08c9d1138e72a239d35993c38142c249c51981735a72b579cc79d39293226599e599d92a52724b09b6a98f1a32a2459986291aea1bf23c495ee0a2ea1852354933a14799fa323328e5e18d99b6523eb8a6e1978978922588af218cd963122e689a9188a91e2219483f718db8aad210d093819c4104321a408d9182a15e32051089218ca14b4200c08b21784144620ca073b172412122089020116100fcc1f7102f914b80e231f5102ad14690ed01e2d825e130108611e0282d81215076c1dc781fc105d06df1c8f817210d605a71c8181940e87053b1c8b819a0e4f053b1c9d81a90cf5041b1c5f04190ee10a4f1b7901340dda0c761900802981708870083b9dd898989cf526e7a111a007a2de2b32a319a0f5a1422c09a45aa037a2722c9aa4f7a0fea2902c6aa5f4a090a3cc2cc2a43ea068a2a22c0ea353a373a4a12c3e2c25a39ba6092d393414a3eba5712c4a36f3a281a6932ce5366fa4a7a7912c263749a40ca7cf2b7b3747a4d9a67a2b283752a5b8a8b72be2346fa57ca8212b922751a5aea9ed2acfa794a509ab052a08a8d7a4e5aad629d6a799a438acd0297ea6daa42aacc129eaa4a5a4fca8fc2865a48ca4709edc2904a384a2be30f42b21a0079fda359e2caaa03e9f53377f2c19a3969d0938c02b499fc0999d38662c5f9cc6958338882ce79e099c6134d12b5f9a019e1620d125049ca89c26a5ad2389995798cba347247b989a0b52a14f24c9949416e49e4324a893d718df9cf5236e900a19459afc22e78d8519e498a9228d8ded193e95af22718aa61906952822248a4c19c2941022ae8cd9185991ae213d89db17b7900221be88181731907420218b9f15e18f5920cf8c73133592ea1f7b8c0b13f491971f578c3111a391301f348dfb0e6293751e088dd60bdd92011eae8d3a0b2f92691d6a8cc00aa391ee1c338c4104648f871c038d1204038f4b1c3e8d1004ff8e491c618df683cc8e561cb388b20c3605531b1d883409150b3b1b0000ee132116980d849b669a049cd925b7a151a081a2b62b72a3daa044a2442c2ba4b8a0c1a2892c7ba4f0a0efa2662c47a52fa1c9a3772ca2a53fa27da4ac2c9fa59aa334a6952c9ca4daa23ea56e2c312a04a4bda6882c703482a31ba7592cbd368ba33fa8722c98378fa3a9a6952b813724a4d3a62d2b383649a447a86e2b472f63a4d2a87f2a3ca828a648a9f32952aafea481a9c6298aa645a483a9a8296ca48ca4cda91a2940a455a4f6a9b328a3a315a40ea9582812a356a319a99d28c8a200a3c025e029f0a01ba11734442d17a0a89fbe37bf2d45a0039f47388b2dec9edd9bbd38c22d0ba0ba979738472e479f489c7b336e2cf39b779bc59f4f25c6997299c9a17123e299b49113a21424ba98b99126a15a240c98a111fa9f3f245996bd17b49cae237e94031a2c995423fc918e1a919519239e913d1a6b95e82210903c193a95aa222d8fdf18fd945d22868ece178394c0217d8fe414849506211290e312e394a020758f8110d5954b203e90070d6395ef1f109048063b96811fa090f585d795081f8190348c8296a21e6a90ee8b1a96381e1a90658b9895b31d9e8fdc8a1b95341df88d6c8a0594d71cc48d248da3936d1cc68d0d8a83935b1cdb8dce8c17927c1cdd8e3f8ed391731c93892183ae8df51a00000a128515a10d709ca39b699bde25bfa124a035a28c2b69a249a027a2042c28a3c0a0cda2712c47a4a4a039a3952cb4a4e4a098a3ad2cfda4fba0c7a3a52c7fa5fca1cba48a2c81a5c8a173a4142c42a51ba3dea3432c9a25e9a29fa7652cbe3083a149a6fe2aa634c8a3b8a6b12ba83439a320a99d2c0a3037a3f3a5922a0f9cdca452a82e2a35a7b4a606aa9b2a3ba571a5eca9df2a57a571a434a9152af9a437a4f5a88429b8a425a442a9422927a4c1a3a1a9e628d7a25ca3aaa9742800a225a4a3a6172806a218a3522c252c34a1bc9ecb35802e98a272986438682e649df9952539592e989af58b6a382a2ead9e2298a532102cb29cb69b859c3624e49b1d8c73a4a824d19b351737a3a324909bc216f4a1d32419981b19fd9cd123f695d919ce999423cb94951a4996b4237393341a19933f23b192b8197792de22ef914319f59154224f9124186c91fc21d69078161a9470213791931343952b21d990ef0d3796eb20f9917b8dcb988e2076923d9077983e2057928291be98f41f0893ad926e982a1f5d939e932298af1eea9235935698471e4e9202941d98f31d42917c92c597a01dd19069939097461d5f90cf92f396d91ccf8f39923296521c8f90e792be95011c2a8fb3913595331b7190fe8f1090d21a0000fc15151a421afc9f109fe2a0322ad9a23ca23da4fc2b4ca298a068a2ad2bf0a29fa08fa2292caea3dba0e3a23d2c6ba4b0a0aea24f2ca8a462a0b3a2302cf1a43ca1c8a22c2c1ea57da23fa4132c64a52fa4b4a6dd2b95a422a42da8b82b26a645a594a7cd2be190aba491a8772b9fa049a529aa2d2b6da61da6d6a95f2a36a675a680a9502a43a56fa531a9012a9fa642a4b3a8a72937a59ba4aea85c299da4b7a423a923293ba461a41da9d9288aa3c3a38ba86a283ba3fea225a8cf278ea373a10fa7d4264da1d8a247a78628269f1aa04731382d739f219d6437702f85a190981b391530f39d779839389e2fd2a0ab95d530a02b7a9ee29cf6a49224f199bb94eda12624d597b01a539e8e2458985f19a39c5f240e940f1c0e9424244792a91c030dad23e491c11cc18c4823c091931ca38c1a237292061ba692112317922d192c9788228592e4161f99ef21cc920914a299be2108943e08fc997d214194e68daf9ad62055941794b29a6220e4946d95d29a14202795c295d19a7f1ffc940c96e19a021fd8943b96ce9a741e99948896729a1d1e45942a96f499a51dbe93e7959b99201ddf921896dc98c51ccd91b895d998431cbe916f95a198121cd191b9956c98c81bd0916a951a98bf1b499180967999e11800002112ed16801945a01aa079a18429baa2d1a345a5032c63a240a1e2a37d2b80a2ffa06fa3da2be3a22ba0e7a1232cd2a3479ea2a0302c17a4799dbaa0da2b50a4709d46a1902b52a4689e05a3832bb5a4e5a138a58c2b9ca5bca481a76f2b75a590a5ffa7fb2a70a793a64aa8e12a52a7b1a52fa95e2a6aa5aba57ca9752a54a53ca659a92e2a65a5b2a415a9a029c1a507a53ca982298da5aea4f6a8172921a594a4b4a8d528bba430a485a885287da406a4bda85c282ba433a4a4a8432832a321a3dfa7a12756a32da341a98428baa0e0a1fea6b12918a0dd9dfb32f52f4a9d929cd4377c303b9cff9a0136ad2f039cb4981d2c7329aa9c199833a69324cd9bb78baaa11d2458981617899d27246c96481a039f27241493fc1da38ded230e91291e490dc323de8e4a1e8513ad23a68efe1d2e135423b792141c878c38233b94aa18ec9a0e235e948c12999c6a22e194cd88a09c0e2264958891b99ca621bc958c950e9d2621b095e996529db820c3950898899d3120c295df98599da81f0596e298339d111ff395cc98b29c241ee695c898539ca71dcf958b98909b6a1d9b9550988a9b201d3a951c98299baf1c6094aa976e9a421c089455973f9a231c009310970f9ab31b92917095b198201cb290c8940498651a00006919e91c7715aea0f2a1a8a4fb296fa2e9a317a5622a62a293a29aa46a2a4ca235a132a3232b3ea24a9bcf9ea92ba1a11d157690bd2b38a1ff198510692b06a2b10ead9ba62a0ea4589d9ea1392a9aa466a237a5152a98a45fa4d1a6152aa1a49ea472a7132a21a686a5e7a8622a48a84ca54ea9682a04a640a5fea8e72935a53da52ca98e29a2a5ada558a99b2947a56da5eca84e29aaa4daa495a8f52852a470a48fa88f281ca42ba48ba84b2879a33ca379a8ef27a1a289a261a87d2758a2b8a15ca8f42625a221a15ca88226cea0aba0bca6bc266a9f64a0b626972a149c5c9ca734082ff79f8497b433582edd9deba013a49b26089eda9d67a46724619c139beea102238e9a1e1549a0e5222296491ed59aa5226d936e208e17fd22e68c1b21761dd5233786e820db1d0c240594cb1f581d02243693d41d631b87234d91b91b3b122423c79248174498c12260940d0f7a9c1322b295e295049eb92147971a99249e2d2184970c9aea9db7209297599af19d21208697959aad9d861f4597729a7f9df61e6297699a219d441ecb96fb99c49c9d1d5a96ac99769c411ddd955e992b9ce91cab952c99a69bb71ca395f298509b561c3e95c498059b2a1c3895a5986d9a271c1c940c98199aaa1bbb925197419a411a0000f9168819a11473a114a429a5ae292aa27aa4ffa5542a8fa3dca3a8a5672a8fa1c0a02ea4fd2ae9a02715889ea52b4ea0e220e71e4b2b60a0d52031217d2a29a14d1aed19002a80a27b9e72a1a92909a4d1a264a5bc29aea457a452a6d9291ca51aa5bda7f829d3a498a5bca8082ab6a420a6d0a8192aefa4a6a510a9f629aba494a4aea8f62975a5a0a46aa8b229eba48fa452a87b29b6a45aa439a8fb2895a416a453a8b328b6a4bca357a8572862a499a3a7a84528f7a327a375a814283fa394a219a819280fa34ea207a8cf2770a198a10aa8d327559deba018a94629479c429e702d192ca99d4d9d2f2ec02b329c1da00ca5c925069da69e47a5c423149d449b93a36922d99a4b123a9f8421bb91811f9817bf20ce0c4e21691ed821f11201224020d7221a14fb2186206b23ee106e214c1fd123628e171f6b18bc23e1941c1ad6981f23ac96f588559c46227e973c960d9dc221ec977298c59d4e215a98e799009fde2093981d9c12a03a208c987e9c06a07b1f8198659c0da00a1f2998609ca19fa11e1698389c029f4c1ed597099ca79efa1dfb96579bec9d821d4396f09a4e9d1d1de495489ada9c091d72950d9aa59ca51c08958799109c651cb7943f99cb9b0e1c3594c898339b0f1c55947698cd99261b00005715f6197b1276a207a5d5a6ed28bca33ba6e7a7a729a3a201a473a593298da172a169a3b92a54a0c11d251def2ba49cbb2540263b2b389f7a25d0268129b6a0271e781da228dba230a185a4ba2884a40ca581a72629d8a443a6b1a88c29d3a47aa6cba89f29efa458a69ca8c729b1a4d7a546a8a429baa481a52aa8c229dca404a535a8b52966a48ea4b3a7ce2907a445a4e5a7b3291ba39fa336a71229aaa2dba205a79528eea1c4a13fa7382898a1b6a056a60128eca00aa090a6c227a1a0709f49a6b527f5a034a06ba69627c0a1bfa066a7662783a06ba1f7a89827419cc1a04da685267d9d5ba119a1c424cf9c2e9f4fa48424c09c359ea4a40122da9d019f87a4c41f059d2295989f6c1dde861e21261fa51d3e172d24a923771f8118d924ea243822b718bf24a1240a244c177c23a42238242e103c209d1c132445959e16cb993e23c498be958b9ea8223e992f9bbc9fc121ad998e9c33a006214899e09c1ea091200f99d69c19a01920d698a69cd89f551f6e988e9c549fd91e4e98799ce79e391e0698309cc09eae1dbe97f79b809e781d66979d9b829e1b1ddc96489b099ee31c4596d89ae49d951cd6955c9a7f9d1a1c51950a9af69ca51b6e95cf999a9c541b05957c999c9cb81a2794e2982c9b4b1a000043198b1abb12169f16a219a45126f2a3cba698a82229fba245a60ca8552980a32ea5fda6a22940a1c99ecba0412b181fc42b062d332cd61aee2a4b2c4a27efa0ca9a8c9d16257da4c1a50ba8db2773a4bfa67ea8d128e0a42fa7f1a85b29e9a555a740a9742998a592a6bfa86e295ca54ca686a89e29c7a4fba54ca8bf292ba5d7a433a8372ab2a556a3f9a5082a0aa5baa096a4b4296ca4459dfca23d29faa2d99be1a3e428fda2839a65a34528b9a1d08d2ca37328daa1829a71a3af2885a1f398a9a2df28e6a0a69da7a3d028a0a0d3a148a6862838a14fa409a8e2273ea2bfa4e9a7e3266ca1cba32aa7b72532a132a332a79923d5a077a129a61b20caa0839f93a4fd1c239dd094dc9d351a7190eb20781f8119221c6f2611261f1c951d072875280b20e71a9d270928f623b5148324bf245425e196b71c7c19cc24fc991399e29de323c19b5a9dd5a02922379b6e9e87a15b21849aa39e15a21521359a8c9e2fa2bd200f9a2a9e9aa168207899c79de4a06e1f8b99769d58a09a1e59990c9dcc9f171ee498c49c569f871daa988a9cb59e021d46981f9c569ebb1c6697959bdd9d811cb096319bb39d611c03969a9a4c9dc01bb095619a069d921bb695649ac59ce61acb94ec99d89c4d1be493fd98239bad1bbe18af1f4a21c115f19d50a1fba24e252ea2f9a516a7fe271ca3baa5b4a7542828a45aa623a852282fa196a607a8f1278e944b25e727f62a3920572a522a142d26a180a703aa47291ba50fa7b0a93f29b1a483a739a939299ca47ba731a90829dba498a764a94e290ea5aaa794a9512983a5d4a7b3a984294ca5b6a7aca9c429cea42ca6d7a8ea2918a4b1a454a7b52ac2a5069ea1a07d2b169fab1f4c10a52aa99a3c2431238b2ade986825ce21572afa92b0249c24ea2a0a9a9524c0235c2bad9d831c80101a2bc3a0eca147a6742991a2dfa442a88b27e1a1bba4a1a86b25dda17da5b4a8662447a1cca4bca78b2316a177a45fa70a23cda0f2a3b5a6fa21df9fd3a2b7a54421499d4aa1d1a46c1e5d9bce15e89a389c041c9f26dc27b0a07522312bc72bc91cad20e229512a542718995f22d9215a260e9c159d26a162240a9b499feba27e22809bb69f39a3e021659bd79ff3a21021e99a619f04a26220129b029f5ea1a21ffd9a769ef6a0d11ee09a339effa0771e939ae79dd5a0071ee399aa9dcea0c41d8e99469d71a01f1d0e99e99c00a09d1ccc986f9c3a9f441c8d981f9ca79e201c3c98009c429ef71b0b98cb9b319e8f1b7897769bd39dfd1a0c97659b919dae1a9e957b9a3c9d491a80946a99059c511900005d176519348deb9c71a0c6a1ba2258a10fa5b6a6372664a2a9a5b0a7bc2661a281a5f9a6e625339eeea0dda2a222ba87498e978432203d9eeea126a42526c1a41fa8b5a9c628baa4c3a74fa9d628e6a489a749a9bd28e9a468a723a9c028dba437a713a9b228d3a44ea70fa99a28d1a43ca702a97b28caa466a73fa9572889a42da729a9cb274aa440a776a9db262aa40da75ea9ea25fda369a66aa96a23fea27ca5f8a8440caca17ca45fa8859ce1a09fa382a70c9c43a06ea313a7f09946a060a3a6a69a1699a077a3b1a61a1f35a13fa473a7802165a146a48aa7422257a120a448a7ed2125a1fea327a7d22137a11ba42da7852116a124a431a742210ca11da453a75b2190a004a369a66520bb9b6ea190a51220029c35a151a4339ad0285d3096314ea4de1f7e299c2a9c2acb9819a060a583232c9d77a054a420218d9d06a1e0a36d20a19c72a08ea32a20929c65a0fea2731f309c32a08ea2de1e129cdc9f5ca26b1e439b779ff1a11d1ea39af89ea2a1b01d3e9a799e2da1201d8c99f49d92a09e1cf4984e9d36a02a1c8c98f19c0ba0161c1d98af9ca69fe61bb0977e9c3f9fa71b5197659cc09e9b1b3297369c239e3f1bf896f39bc39d421b1597f79b8a9dfa1a35963a9b169d361a5a95279a199cfe1900003c17091ace092da196a444a62a265ba15ca52ba8fb2671a106a55ca72d26c7a0d1a315a52a24439d52a0eea12521c69c89a168a45424a4a1bea500a8df271aa4dba6d0a8642876a437a70da9782884a46ca735a965286ba457a734a9752832a445a738a9522819a444a733a93a28ada329a714a9f727d9a30ba71ba9372717a4dba6fea8c12525a4a3a545a8b5237aa048a2f5a5af20629df49e49a54620299d3ca011a499209b9d65a013a41e21019df3a061a4de21229d0ea176a48221e59c18a1bda45621169d5ba1f1a4e720e99de7a181a52021ae9eb4a202a6332125a0e7a215a61721dca07aa34ea64721eba06ea36ba65f2174a05da36da6162138a05ea3a5a6ff20989fcea262a691208aa07da321a67320919ff7a173a40820930efe14fe1698143c04fd80979246899d9bf89e51a20e19f09d86a102a4f81dbc9d57a1ffa3111ffd9dfda0aea3c21e699d9ca0eda24c1e9c9c21a0f4a17c1de79b869fbfa17d1da99a119f7fa1251d249a9f9e26a1001db799549ef5a0e81c6e99ef9d9aa0a61cfd988c9d42a0371cbd982e9df29f031c7e98ca9c6a9f561b5398939cea9efd1a0998369c709ea71acd97049ce79d1b1a9997799b939d2a1ad4977b9b359de6199896e49ae69cd4196095ee99179c98180000bf17a6197d0c29a169a49ca5e5250ea297a542a76626bfa035a459a5f124f79f38a22ca4b523279ecca112a4a52350a02ba487a59d2551a2cca5eca7af2753a3a4a6a1a828287fa3e6a6eca8162858a3efa603a9042874a3eca608a9c72700a415a730a9c42743a437a76ba9b22754a451a789a95b2706a4eea636a96c26efa3f7a564a814257fa2e4a41ca85b2465a276a4c6a70424efa355a478a72024b0a370a4b9a7352454a2d4a4c6a74b2483a1d5a4e9a74224f4a095a4b2a718247ba070a467a7902349a033a438a72a2332a0e9a3f2a67f2215a0a2a395a63f22f89f68a351a6cf21c99f2aa3ffa599218b9ff4a2f2a54b212f9fd9a2dea50e21c79ed7a2cca5d3207a9eb3a2c1a5ca202d9e7ca2b7a5d320f69d80a271a59820539c05a13ea3af1ff396769cf49e951dae97759dd3a09f1b659a599f82a2fc184f9b00a00ea4d71a2d9bc19f7ea31b1c5c9bbe9f8fa2831c689bb69f4ca2191d7e9b5d9f1ba2071d419bf29ea7a1041dcf9a679e66a1af1c6f9a1f9e18a1501c1a9acc9dcaa0221ca299a59d8aa0fa1b25996b9d5da07b1bcd98309d27a0421b8498ee9cd99ffe1a1398929c339fae1a9897599cbd9e621a4597189c3d9e091a3d97e49bc39df3199a96649b819d901974967a9a9c9c9419451d8518a71ab520392ca8225b265929032f6923cd23fe2b7630d8231425072bc130ee23dc24ab2a2430742308241a294331b422d3249129e633dd23d225c629a7343926552531294734ac249826d829e83377249726b9291b340b254c26002a0e34742420277f292e34b720442419292b33d1ae55b086255a323bb2e0b32b2a52341aa45c1baa2759341024632cfa2412325825ad2f44232e2f4d245e303c9ccf29b0234931fba60424e322db3121a948202f235e32f3a96a1d6d22af32bfaacb1c4a22ee32e2ab781d50225f3391ab551c30217a33adabea1b66218d33f8aae019a321ae33f8aa5c1a23227c3383a94b1a482068318aa7de9f5aa8222af0a5721c1923e82a3690871a82211026671fe81a932135242820091b0c218a235220ba1b292147238020c31ae020fe226b20c51ac620a9223620081a6e206322092075191220c821c01fab18b91f5421261f5418441ff920e81e9718451fc420c61e3a18cc1e8020661e2718881e64202d1ee117121e2c20cf1dd316a31df21f551daa164a1d671f181d8a16011d391fc91c6516c21c9d1e7f1cf715711ce71d2c1c2515f71b061d4c1b0215aa1bdf1c131b1a156a1b071d4d1bef14931b021d461b2d15611bf51ced1a2115531b031d8d1a2e14d719961b241ac8178415181a5b20ed2a7d1f0c246e2a0b2e888e04964b2c1330dd14e715272cc130d71fa81fd42b9b31af22c023e82b2e31b61fa31ef3294e2fa7222e23b12ac83009234325cc2ce5306824fd24f72b9331a123cc23682ba632c51e2d1f6a2ab1321917ae918b2b0733f5a7ada97429013315af81b04a2849325fb008b2382bc4320ead52aee029f03238a6889e3e244c327d9eb12a2ea2612f9e1d013042a87f283a21633141aa0f1ca1208631dfab9a187420d7313daca11914209b32b4ad4317d71e88325daded15a51eb93220ac95166a1d9832eaaa6814bd1bb032dca9238dae962a335eab0498d4a01a3290aaaf986fa4ea307ba6109c4aa5602c51a7a59835a13025f5a5b20dde0a371d9e994e187e1ec11fe219d519de20d221b31d541b7e21f322481fd91a7521dd228a1fae1af620592216207d197b20f12127201b191f208221c91fab18871fe720ed1e8e185f1fb520e71eb418f41e8f20ee1e6818921e3f20751ed717221e0120161e3717a41d5b1fbe1dfa163d1d0d1f501d7216151d941e181d4916dc1c581eea1c2c169b1cfc1d991cc7156a1cb51d8d1c5c15351c661d4e1cc514a61b041dff1b8614201bbc1c7d1b7914211b781c4a1b6e14b11a5c1c601b8f13c519d91bc91aa81195163a181819dd01dc88738a9c2179268118d01e912b232c0897f89b3c2c182fde964d951d2cf730ee146d8f522ca931fe1ad41a292b1a33841c1e1daf2999356d1e5820992b663695224f230e2cd03496208e21f12a43330b190618a12b9331719b089f462b713060a470a6d22b373117a93dab042b7831a1ac8dae8b2b0231a3ad36b0782bf43163ac79aef729ec32d3a9fbaa1029823208a5cc1b86250e2e339fdc2c679c6121e194872f5da5c89be98d4130b0a8b898121ad730e7a83396e01bd1314caa2e96dc18243218ac5094d716c532e9ac09942f94cd32d4ac45950d9dee323bac0b9d68a1e732f8aaeb9c71a4fd3144ab399c29a5403017a8d19957a4f52b86a3db9536a08620a79fe38d499bbc9e2f0f8c150a1b6e0d171dea18f81fcf1efe1f671ab420f520e11f741af820e22145200b1ab820d62167201a19412035212620ad180c20d520c31f8c189b1fc220012084185e1fb620f91f7418151f9d204d1f3f18ab1e4520031fbf17fe1dcb1f5b1e1f177f1d3e1fe71d7316f51c801e781de715a21c121eea1ca0154a1c941daa1c8715291c541d741cfe14d31b151d401cc6148c1bac1c321c5f140f1b721caf1b47147f1a061c771be813331ad21bf01af713e319ab1b831a3b139519131cf61a1313d418e71ae71aec8061068702701ea51f250d1718b82bc6275797ee9c492c412d479bcd9a962c3b300b953e99e12c583142155a10222d11322c1a6219142db8316f187116222d4b3093186916e92c322ee795149a352d1f30ed9c5ea2aa2d9e2f31a28ea5272d8e302ea553a8c22c9d30a5a85baa7d2cad3107ab4ead7d2cdb3241aba5ad3b2b423334aa66ad9429133338a949acfd28dd3184a6b6a862260a2d59a2fc26a8204c9aa8a0d62cf09c89a1559f132e4aa499a0a99f4430a5a71ca0c89d583137a7639d849dec313ea7689d209e9a323aa7609c27a0eb3247a8ac9c3ba1103309a84e9c63a24733fca5279bada34432f3a2f89b98a4e02fc99ce29b68a403299594f998b7a1cf9f191b44933c9d57a4741dd3041d91b9a17f1f11158f1a5f937420a917131da01a34206518661f031f7920f518322082208220e0183820ab207620d718ae1f6a200d205618221f4120d81f0d18c31e292001206617441ecd1f3c1fe516c21d061f841eec15661df71e3c1ed115051d711ef91d7715cd1c2b1eb81d50156f1cca1d5e1d1515361c681d041d0315cd1bec1cbc1ce414941bb51c871ca7145c1bb01c591c39144b1b9c1c461c3014e61a5f1c341c3314981a2c1c031c2014301ad71b8b1bef125c19221bd81a3d131b19cd1a831a3e82f710ce120e1f1d925e0a36120b289a1f6194fb9b4c2c4b29b397b49a752cd92e959bba9ed22ce9306f9d1ba0192dde31e49b0c9e1e2ddf31e99c439ffe2c2532299d989f002d0d32519e20a1f02c3a32eaa164a4152d3f320da4cfa6052d15322aa616a9f32c4b3265a877aaae2cff32cfa809acb22cc13309a92cac2c2cb833f0a81cacc42a953361a82fac7b2ad0317ba7bea98029822a14a5439d582857a476a3692993255fa5b2a2612c4620eaa2a0a14f30d39d09a1e09dd4314a98daa02a9fdc32a8a11ba082a11e3313a5869e98a15433eea4b29d8ca2a733e0a4889d77a348337ba3b69c1ca45b32f0a05d9afaa33730c29cee994ba30329d213a79825a139a5551a79951fa0caa5a11cce8a1c992ea3421ebe135519929fde205b15b31ce00cb9202117781e921cb5208717901ee11d96203517231e031e4020eb16ee1d391e0e20ce16b21d671eca1fe716aa1d551ea11f9616841d8b1e751f4c16281d411e161fcf15d51c231ea91edb15c91cbd1d3a1eac15981cb21db21d2815251c5b1d5b1da014d31beb1c201d5114771baa1cdd1c26141e1b791caa1c6e13b71a441c721c3113531a021c2e1cd01284190b1bab1b89122b197c1a631b0a13da18031ae41a15123918251a581b1411c7179519bb1a00802912821082107f9ab80ad81258272fa0bd9ca89e3e2c0d20489b939ea52c1c2b639b74a0bf2c1c303d9da2a0f02c1232b29d519f082d6832379c00a11c2dc3326c9d39a12f2db73257a06aa3472d5b339ba247a5522d7a3337a4e6a6432da43337a5a2a8572dda332ca66aa9e42c15340fa745aaad2c2d340da817ab2e2c763422a807ac3d2b5e3427a861accf2a5e3150a7a3abfe29c02446a603a9c4280da5eda3e69a2b2864a548a35c28f72793a2eba20430b92563a0c4a0eb312123eca1e49f86335321e8a038a116347918869f71a140347f98399e0ba22f345a984d9e0aa31d3448980c9edaa2ae32e21d1b9c58a3ab2f6f212d9a5ea234246e229c94069e22a593217d927b9a35a42221478ebd9445a28321e004d10a99a0472127112618b59c7e214a140a1c960c4d213616c61da61afc20a9163b1ec31ca6209116fd1d941d71204d16d91d1b1e6f20f915891d831e8f20a3155e1d351e1c20b215121dbe1d821f5815c71cb31d161f5515941c641df81e5415751c2e1d711ef714321cde1c0d1e9114e91bd01c7c1d5e141a1b721c111de013d41a1b1cde1cf0120f1a3c1b531c4a125d19de1a1b1ca211cc18481ae41ba311b018d119631b66111f186a19451bc1102f173418b21a35101f16d017831a00801e8c84911912bd9a039563988526f6a13799669a6e2c20a1f29a4d9d7d2c20216a9e7da1ef2ca72c469f36a2f62c0c31a99dd9a1fa2ce132399e17a1472db933529e31a1272d0a343ba0baa3fc2c1b343ba3f7a53d2d0a34d7a418a8522d513424a639a9fe2c983422a70eaab42cd13401a7fca96b2cd434c4a602ab952c0c355da745abe32ba9344ca714aceb2afb306da644ac7b2a17973ea50cab082945a950a560aac02888a813a52f1e7c2875a6fea4de2d522885a349a3cd315926b1a3aca2d933eb2381a295a22234e61ee2a020a37234b398bc9fdca2563483984a9e28a261346918e89c01a2e932df1d6b9c14a29f2fc622a69c62a18c252a223099c69eb8a415214f96769d40a5f42027951a9cb3a49021a28e7991a6a10322120e4717e29ac921c611a61a2e0c5b213314611c1c19c320e2140f1d991bce2023154e1d7e1cd020cb14371df21ca620d814e41cc91c2a2053147f1cb11cee1f12142d1c9e1c981f8e13c81b561c221f6b13f71a121c6e1eb512ab1aca1b281ea7125e1a4e1b021e41121b1af81a821d18128b199d1a3a1dc61145194a1af81cbc111119ec19ae1c8511cb189319681c26113e184319291cce105b182f19191ca510e2170619f01bf40e14160e185c1ba70d6c133914d8180080e38c81910711439cc099609cc226f3a1b59cd99e412c09a4fd9d959f752c3da25c9edaa1fb2cb3224e9ee3a1f12cd52e779f15a2082dec3233a136a4e62c2f3417a1a0a3ff2c4834c2a00fa5442d7d3477a237a6402db63433a402a76f2dff349ca420a8172d2c3562a518a9dd2c5f35ffa5d6a9672c8e3554a62caa222ca13567a669aa872bd6348ba662ab302b11302fa63cab452a8da5b7a67eacae2910a879a620ac2c2985a65aa610a9ce280fa4a3a4e929c42829a4d4a253318c289aa201a2d23333271da1e6a2b0342324e0a07ba218350922d69feea11535da21af9f7aa1fd34d4219f9d59a1d333bc24759c8da12d2f7325c8990da0e4214723c795df9ab7a2d9212d95bf98fba34222b294389503a50a23e1946f91fea29d22358cc115409e1622e90d9d191898b4210713161c771241211313a41c4218d920bd138f1c831aab201714a51cde1ba820fc13b11c221c6d20a613691c2c1c4320cd134f1c2b1c801f1413791be01b161fc612ee1a4c1b461e67127a1ad41a251e9311bd19501aaf1d52117c19d719421d9710ef187619221d421097180f19c11cbd0ff2175818701c620f15173018471c550e591659171c1c390e37167216281c700d27151316d51b350e5a154d17761b0d0f03165f182d1a008000804e8392828e9ca195e9980727b2a1d39de59fbe2b1ea3699d979fa62c32a44a9e94a0e22cdaa150a10ca30a2d4b286ea02da4ee2ce3307ea2d4a4de2c51342fa206a5e92cdb34a5a3a3a5d62c2d359ca495a72f2d4c3572a482a7322d8735cea460a8f52ce9357fa5fea8c42c0536eba5a7a9712c0c36cea5e4a9372c333615a6e7a99d2b0635a6a57ea9032bcf2d08a520aadc2a6aa9f7a6d3ab202a73a7eba5beab73297aa50ca5d2a9712865a449a47e945a2884a23da32b2f65284fa126a1a23338283ca17da1f6345127a0a17fa1a335862550a13ca0c0354424cf9fa99eb9354d24e99d3f9f6a34c125349d159ff52e9125f69a409f969dc223929a199e9ea440216a991c9ef5a53e22e497109b13a45722ca934711f7a0fe2147858a18f69ecd21d20d321b069cba2110107f1b04984e21da10db1b2e0c5b218111611c8f1609211711101c9f19dd20c611181c2a1ad42081118c1b6b1a6f202611e51ad7190920b810e2196419c61f6f1081190119ea1e0d1034193a19771e960e9618e018071e390e531888189b1df80d6d178217301d800dce16d616ba1c350c52163d16501cb50c70150216271c610bc114fd147c1b620ba814be141d1bc7095013f013de1a360c04145a15661b2a0c671429164c1b00800080d7056c89329dc89930992127c4a1249e249f132c2ca3c29d279f622ceca44e9d72a0de2c3ba504a114a4f52c11a39ca12da5112df82a27a16ca3dd2c7f321ca2cea4ec2ceb34afa26fa5102dd135a1a404a8152d253625a5b7a81d2d4336aea4dca8ff2c7236a5a4d1a8c52c9536e3a4efa8492c97365ca58da9602ccc3651a587a9662bc1345ca585aa692bc423c9a47ea94f2a22a8cba502ab252ac5a750a42ca92c2916a7f2a45eaa2629e1a68ba586a7c82809a5baa44d264029dda1c7a21b318428bfa053a26334252883a01ea2a035182837a0f6a011363c28869e9ba0e3353928159fd4a00e34ea27dd9dea9fb22c4326159a869da0a39322ae99909d13a8da22f998c19dc9a51422819619982da41f2252941d8b90a14822c0930716389e6222b78e2e19779abb21ca8b591ab395d821bb049a1a518c8821700adc1add0b0a21d00ce41a6e14c420360e6f1ac3156d209a0df619ea165220300d9219cb17f91fc40c31193617601f8b0c7e18a716ce1e580c44183416a01e260c3d17d415f61df80bd816a015c11d9f0999167314511d57097c157f149e1de4058f149412491d5402ae137911981c038250129211ad1c0a82cf11ef12b81c9b89da0ea410101c00020c12bc12e41a370b5f128613391a00000000f90ced81d59a7595240c892609a2559d859f1e2cf1a3c29e1ea15b2c01a551a088a2ab2caaa503a136a41e2dc6a64ea31fa5032dcaa27fa2cda4122d112d7ba21fa5ed2c5c34dfa33ca6d62cd5350ea30aa5ad2c94363ea463a8162d063795a4dfa8eb2c1437ada48da8822c4237e3a4b0a8032c763720a575a8542b5337e1a4b6a9c22b2834cea486aa982b2a9854a547a9392ae2a7dfa4c3a9142a02a8b8a4e3a9942947a63da5cdaa982990a573a561a9b828e7a607a5319f7f28b6a29fa2c62c8528efa05da1e5324d28ffa0dca04a35232812a0ef9f3b3668286c9e219e27362e28499edb9d05347628789f859d762cf325c79abe9b32a46f23f59b3f9d9fa699239c9be59ad6a49d230899b2961da31d23ef95260b08a1c4225f93e415d59eac22368e1b198e9a1c22188b85199697d321998a1e190495a5211d8470198c8b4e21c003b119050b28213209e6191014c620fa0bf41842156920710bab18e0144420230860189814b51ff107611763145c1f8e07ec1602120f1f6b02d115db0e6d1e4502bb14870e1f1e248263131f0ebd1dfc81c0123607d81cb681f7114d063c1cac817c10b505ab1b89813a10b805af1b900147108305681ba481840e0005081b8801400eed0a7e1a8681b60820048b19008000007e843683fa9cbe97599bfe26bba27fa02fa2352cfca372a059a28a2c66a4b9a0c7a2b62cf6a442a196a3f42c7ca661a1f0a31c2d70a5a3a042a4f42c2aa4d8a43ba5e52c502fc7a421a6e92c603518a409a6742c003725a463a7992ca63795a422a8952ccc37e1a409a8262c0438d4a418a80e2cf43752a53aa87c2b7a3727a5c1a83f2b7a3080a414a9da2a04a6a8a5b8aaf229a0a665a6ccaa932999a6c0a5aaab68294ba5dfa50eac7e2950a58aa588a95228c2a526a58ca83728e7a422a4121e722809a1a8a0a52f3a2954a0bd9d7b345c2939a02aa0db35a629c09ea39feb357a2936a00fa15432e12872a0a8a03326c5251c9db49daba2f321789d789d48a43622759a5f9a5aa3ff228098018cd8a05b23ba94ac16c89e5123b293e717d79cf02298910e19589a33220b908e19ee98e421948d081a4f95f9216e8db9190f95b1213f8d6a19c5916921e38c06196d91502173899718808ac620188c50175d904520718bc0150e90f11f018da2145792221fb98c32130e92cf1e818c4911ba91711e4d8d260f8093061eff8c050cfc929d1db08d770b6692241d6d8c080bda91b41c488c5f04bb8f591c308d34042791241c488c2a04418f141c3e8d1384048f1f1cee8bcf03c58eec19b48995038b8b721a00000000960a87806b9b61992c9aa325eaa164a022a2e52bc6a3b8a096a25c2c77a456a198a39d2ce5a439a160a3ad2ca3a517a241a4e12ca7a555a385a4f32c79a7d8a4afa6db2c63a6f3a368a5912c2430c1a31ba64b2cd936f0a42aa8b12c21382aa5c0a8e22c3f3884a5bea8872c45382da51ea88f2b5e383aa54ea9402b5c3689a513a9432ba325fda5d6a8792a73a8a0a590aad8296aa721a558aa72291ea549a543aa152974a4fca479aab0286aa4a9a4cca92f28e1a43ca41aa96827bda1c0a46ea8762628a266a39e2330283da0e69ec231ec2903a0bb9b28353f2b5f9e8d9ccb35742baca0159f9131ba29a3a10e9f55212d25fd9c9f9ac2a4e7222c9b2c9a8fa4f423e29bf991d1a13a234999bb8bbda1f5236398850b14a09f237396e118359cf522a894361a30986e224c93941ab2956822a3915a1a909542221e900f1a5b9506224a8f07192995cf21bd8e0a188f964521f78d2b16c195d420da8e1713129542209c8fa010fc95d01f698f210d8495331f3890c90c2395b51e3b900f86cb94421e0b90ab857d95dd1d7390f58b2095791d1490678ba395181d7e8eda8a5c94a81cd68d718aae925c1caa8d328a5992f01beb8d1f8ab793e41b368eeb8c7192061c6e8e738eb196841a118c778d32917e1a000000008e099681089c4a9a4f9a852560a1329f6ca1a62bd6a29ca07ca20e2c07a405a1bca3802cdda463a1a1a3c52c41a5a4a1f7a3e72cdda5b1a1aba4ee2c46a6a0a1d6a4f42c59a767a2c9a35c2ca0a423a44aa4a52cfc3041a399a8b92ce63678a3cfa8ea2b473804a5b6a6ae2b643878a41da8ae2b023898a422a8402bf931b7a668a9582bf7a5d8a64ea94c2a94a5d5a5aca91a2a9ea6daa424a9dd296da59ea4f8a86729dda4a8a459a90e2916a463a485a9842858a321a4c6a9052861a209a5e2a8d92633a4f9a318a7c426a3a3bba08328cd2841a11fa0b432a42a4d9f309ecc34ce2a279f919d0e308428eb9da59c5f908224489cdf9afea39222d99cfb99f7a41e249d9c528ca3a33b24e79afe1446a10124249847182c9d1123dd95031af599c822ce94af1a6796e222a7934f1a4293ce22e092cc19a6923c22249266192f92cc218a90f418ac918d211c90e71721910521af902f16b490cd20199137130595652087919e0754973f20c3924b8d0798961f9292b9915e98221f2893e1929c98a41eaa92d093cb98ee1d36925e937698841d2e92e5922f982d1d30918d92ca97051dc59050927d97d41c6390e092e796451cdc8f4e924f96cd1b9190fa926e96e41a0a9093923295921a4a90698cd68db1194404c0169c19aa1f689ec39d4b9ddd289da2dda103a4a52b08a3dba0d0a2ee2b5ca3eea0f8a23a2c1ba42ca153a3712c9ba4f9a01fa3982cf0a4ada0cca3832c51a59aa153a4832c16a67fa3bda4462c72a69da517a7172c1ba2e2a322a8182c642c1da57fa8242c133520a537a7212c5a365aa5c7a8262c223376a647a8092bdb2067a665a9362ac3a361a6dba9fe2980a5e5a460a9cf294fa56fa567a967296ea5a8a5c9a91729ffa46aa59da9aa28b7a4f4a4a0a968284ca455a438a908282ea3cca3a7a8f226ffa051a2bea82f26849f66a140a1b72583a0b6a0442b1928fba1809ea8309b29c79d18a0192c9f27619e329d0e95ca238e9de99c00a4fb22b59a6292aea0ad23d599b518bf9d1e249d981715bf9cd923b995521a19945723e993bb1c1f0de2228193d51cea8c9a224f93a71cc28c6522c592eb1bc8925c22a793081a6b97f621d092361859986f211f936215e9983f217d937e115b990c215d9416883e9a80206b94a292559a1520ac94d494189b8e1f519507960f9b331f2c954996109b691ec9947c96849aea1dc994b9968c9a881d80945b96a899221d8b930396b999d61cb192389605998e1c0b92ce950399101c15928995bf985e1ba392e1953598031b6a92f6953a986b1a3d918996219bf6160000df1203152c1e699ed29e609f9c28fba271a3e8a4f52b37a3d4a113a4d62b01a36aa1f9a21a2c73a371a059a2502c17a4689f74a1572c7ba4a99efca0112ceda438a0cea2c42bf5a4a7a13da5dc2b94a637a425a7a82b03a8b1a524a85f2bd8a4b3a6b3a7352be5182ca50ca8ee2a6024eaa532a80b2b4ca352a5eaa7d72902a7b0a780a9e82987a684a45faa142a8ba6b6a498a9982943a61ca58ba94329bca5fba452a9e8281ea594a41da9b728ada480a4dba856281fa44ba4a3a8012810a373a342a84827efa273a228a80927b2a286a33ca7022662a3a0a389a634288f9fb09fb2238327c29b7e95421a1926eb9ad8963a9dd723919b1e9c8aa43a23149b5212459e312398982217769d1923d398e7112ea01623d2948a1c0797da227392cf1d6d8df322ea8e791ebc13ee22ae8e1e1e1116852298915a1dba1571226194c71b548c5b2207948617869926220e94800fd19ba2218e94e68e7f9c3f216395c5944d9dcf20ce953d97859d5d20eb952598b19df71f12960a99899d541f80961599649d7f1e8c966d99ed9cef1d4b96ff98859c731d0896b498de9bff1c7a955e98999b941cf7946398cb9a511c1d9415986a9acd1b37935597309a861be79232970e9a0a1bf091ff95b898521b48906d943396581ac00040187919ea1f38a2bba3fda4cd2aa6a2c2a31ea53e2b47a2aba277a4eb2a2ca21aa0b3a15f2b3ea2ff990e9ec72bf1a1308ffe96f12bf7a1198fd699842b6ca3be9c69a1e82a46a5bca1dba4972a8da534a438a6b42aaba437a5f7a6c22ae2a437a552a7b32af2a7f7a6e1a8aa2a17a757a6dba9132b55a4b5a56aa8b229c6a4f3a586a9ca29fba6ffa5b8a99629a0a41ca5aba831294ba4cda495a8d7284ca4baa4c9a8882833a4a9a4eca84828d5a388a414a9d827e4a297a3cca809270aa25aa287a88126bfa188a15ca80426bba035a1c0a6c525719e8aa1a7a65e26c6982e9d1f9f48274c9b49967596c925439bea9e81a44e24a69cdd9dd5a4b123459d219cd2a30e23579d108c79a13a22a1998b1b329fdf21d4974c1e7a97cc219e915720fe1b5c223386ee20951e1a236d8f3a20151ee222b090131e6f1cf2222690011c8f12b222bc902019e9964b22ea924014829ba1214c958991719d572190964a98a39dd2206a97d099789d8e208597339adf9dfb1f7b976b9a9f9dfe1e7897399a689d6a1e8c97279a3a9db11d4e97109ada9c481d8796b199829ce81c08965c99f79b891cbc951e998d9b4d1ca295e5983e9bea1b4a958098fe9aa41b9795a698749a661b60941c986e9a6e1a7b934198569add180000a1165c190312a4a126a475a5052a94a2aba4e8a5752a1fa386a383a58a2a8aa1029e72a2a22bc2a0221db1979d2b9aa0152135200a2b4ea21d1f9e1d522ad8a3039d82a03c2a54a4aba252a51d2aa5a47ca422a7392ae0a5daa567a84c2a81a627a6a0a8512a93a561a66aa9752a1ba520a608a92e2a8ca47fa54ea81a2a8ea48ba55da81b2a7aa6f0a50ea99129f1a562a52aa94b293aa5f9a4d3a8d32802a592a4a3a86228d4a483a4bda81c288da43ba4faa8122820a4bda3d7a89d272aa3bba256a86127a8a250a2c1a7c526a5a1eca1f7a6b926e49d10a05da59d262f98e29d509d3b27189b549e3ea17c26379c02a0c8a4c8244b9d33a0c0a5de23839d419dd4a481220d9d2c9786a18621c097671d499958205f864020221c5320ba0f7921ba1f5621e512fa2182205022b012102211208b229005ba200e1de9228a91f21cb00ce22261959e12409a2222bc961694559c4221da96ef96ae9cc620b2971a997b9e77202f98b29bca9fca1f55986f9c1fa0cc1e3a98769cf49f561e16983f9c7c9ff61d0798129c139fa31dc597089c809e5c1ddd96579bbc9d1b1d2996cf9a369da41cd2953c9ac39c951c7e95ff99649c381c1a958699039c031cf9944a99aa9baa1b3c940a99379b371b14945298f599f51900009910fa19160e7ea39da4a3a6b9289ba3d6a673a8ca29d8a20fa4f2a4de295aa1ef9d6ca0592b48a06f232223e62b949d4126f726af2ac2a09d219f227d291ba2c39e52a01d290da4dca441a75829cda4a4a6b3a8b32902a5bfa612a9122a11a5dda608a9462a3ba586a6cca8412af4a40aa683a8322ad8a4aea536a82a2a89a4e9a4f2a7ed2911a4baa472a79d29d4a396a42ca83329b5a366a403a88128cda319a466a7df27a1a28ea33ea73e278ba144a2cda69226e3a0a2a01da61d2651a00c9e34a5aa250ca00a9cb0a49b254da09e9991a4ae2566a1629eb6a67b26c59cb1a03ca54d26df9c30a235a5a225349d97a01ca55225139d18a013a5a823f49d17a008a5c520809d3c9ddda2fc1d0b98cd1bee0d141cb5145e23ff21ce1d1318a82449242f20c418e2247824282299184c24b6235623d414f12126202223ae93b71ab5956c22f1982990b99d19226f99849aff9f6f21b6992e9c37a0bb206a997b9c06a02c200b99b29cf69fae1fea98b99cf69fea1e9c98a29c6f9f371e7b988c9c3c9fdb1d1098449cdc9e561db997079c849edc1c7897b19b449ead1c0697529bf59d721c9d96fa9a9a9d511cf9956d9a4a9dcd1b78951a9a049d121b8d95e1999e9c6b1afe94cb99c99c6e1a0594f798029cfa1900002b18651a49101ba2dba446a6712883a35ea60ea8272946a351a627a8b729c3a39ea43ba67c2a679c7c253927372cdb210d2d442eac29419f3922751da72587a429a61ca87527f9a5f6a694a82529f1a458a71fa97229b3a505a894a9af29c3a616a8b4a9cf296ca6afa6d0a8fa2991a6c4a501a84f2a61a5c7a459a7af2a12a6dba131a5852aaba4389f72a3962928a4d19c2ea1a0285da3659d09a4762746a2da9d9da41b26dea1f09ddfa49f2437a23e9aaca42b24d9a3f1983aa4f02365a34b17b69f452598a1e31cc39cbf26979fa01a35a31228bd9e419ed8a74c2814a166a4bba80427b7a103a520a8952500a237a44aa7272461a152a3a9a6cd2111a1d0a196a6aa1e929ffc9e3fa3301c949a0b15659af918fb16ca230923f8195c1d5c270828341c1e1dcc275f28d421011b6a26a0268624ab92062108219924d6996f95969cf523b49baf9b719f4622e59afd9d14a114218a9a9d9ef8a19f203e9a9d9e1ea25320209a579ed9a12220bb99fe9d35a1151f9d99949d82a0221e66992f9def9f8b1d1d99db9c6f9ffe1cb198a79c089fb91c50985b9c799e771caa97ec9bfa9d121ca596339bb79dc91b0996d79a4a9d1a1bb895699a0b9dfc1ac5953e9ace9c0f1a2295f699b29cb51acd93d998029b761aa318f520192253184c9f03a387a42f262ea2f5a5bba77a28b8a261a6c8a71028daa258a63fa82028a3a553aa0dabc12ac323a62cb52dec2735a2cca885aa922bd9a450a767a9da28fba406a884a9172953a484a719a9f028b6a4c9a772a9462901a5bda785a94129d1a50da898a9522908a6cca7cca9832930a5cba538a8b5290ba65f9f50a3df2a5ea0071f411c002a68a09121a1201728129d29200a1c7924bba14a9c13a113213ca4109c2fa3fb1feea0419c76a1ae1c119e5c1b40a0f01be8894f2567254120fc1c9428c5287527d89c761f181c3129ada22fa4f8a7c4277da02fa52aa941247c9fd1a41ca88122f4a0b0a4c6a772221ca24aa4fda6422264a072a354a65921bb9e54a391a50920f59cbc9e07a3b7173c99f21b07151f9f42205b29012a0ea0c522622b712ca423261cd72610286d26f99adc91f09c8624aa9b229e11a24c22dd9b879fb9a25c21e19ba19fada2c520689baf9f27a22d20669b009f5aa1011f019b899efda05f1ec59a6b9efea0fe1da79a319ee2a0a21d3f9afc9dd0a0531dac99929d93a0d81c1e990c9d27a0661cee988b9c699fae1b9e98559cf49e621b7d98189c9e9e341b2098e59b639ecd1a9a976c9bed9d7b1a19974f9b9b9dd4199e95629a089d6019f994c899069c151800009617a11b638f519e6ca25da45d24eba18aa557a7e82659a20ba6baa78e26c7a1aba43ba62f256b960f9a589c9f204696b899899c1724afa405a71da9542817a5b7a770a9e0281da5baa76fa9df2828a5d8a76ba9dc2831a587a755a9b3282fa590a74ca9ab2829a5bda754a99e2852a522a8b9a9bc2841a54ca816aa5628b4a43da82faaf42637a4f1a7eea9582501a411a797a93f24eaa36ea62ca90e2406a42aa61ea9c42441a3c7a5e8a89424bba273a5b5a88f22fea12ea563a8252191a029a406a7c01e2da0d6a295a5e2191aa055a291a5f2183ba0baa211a65d1c9fa0a8a3b3a6af1fd7a0e4a330a7ca20fda01ba453a7f320bda0efa32ca774206da0cfa31fa77b20e1a017a427a78020dfa057a341a69b20b39ae7a1dda5531cfe1d7d282529cba66a2869306b31cc27bc99469845a03426db98f89e83a4d220ad9caca019a42320a59c9aa07ea3b61f999c8ea044a3ed1e459c44a0a4a2331e2a9c16a06aa2fd1da39bae9f01a27b1d359b329fa9a1451dbd9aae9e4ca1d01c099a339ec7a06f1c2a99789d60a0ec1bb998209d21a0a31b5498d89cb79f4a1bfa97a29c429f041b8397759cd09e0c1b3697659c609ec01af3960c9cfa9dc51a3e97059c9c9d831a14965e9b529dca196895e499079cd21900004d18371bf10af3a0d3a479a61026dca16ca59aa7b32691a1caa476a69a2548a06ea240a42a233c9d62a0f2a1bd2155a053a467a6fd2568a306a7dca84a2861a458a726a97928aba4b1a75ca98328cca4cda781a97d28c7a4c6a762a960289ca4a3a756a9432887a486a75fa92728aaa495a75ba9ab278ba48ba728a93e26b0a195a482a66c234c9d89a0f2a3da20d39d34a2a5a4d72116a1d8a45ba764241da219a65ba82d2545a262a6c0a830256da24fa697a83c252ea2f3a545a8f12415a1e5a4f2a65924949ff1a3b1a51a231e9ea0a262a559222e9e64a280a5b921e89e06a254a51e2120a094a2c5a5f22074a0d3a299a6f0203aa05ea398a6b42011a07ca3d4a69e20a99f44a3b4a67820ae9f48a33aa6d11fc7a03ba42ca62c208099cf9ddfa0ef1cb9097014ff1681859094b19a449f360e159e31a106a45e1c669db8a103a4401e469d09a1bea3511e389d8da020a3c61d899c31a060a21f1d049cc19ff4a1bd1c339b519fafa19c1c8a9ae19e5ca1821ce399689e07a1641c8499119ebca0381c0899b09d64a0a01bc1986f9d13a03a1b9098069d929fda1a6198a79c079f7f1a2698469c819e251a04980c9cef9dde190d98ad9b939da4191c988e9b399d691945971a9b109d2019b795699a839c8b1700004e184e1a0284faa0e7a43fa6bd25f6a1e5a565a78426f5a0ffa312a59b247f9f12a204a44c23689e95a2e9a47624b0a114a5d6a66c2681a38ea667a8e52709a4eaa6d4a80d28e8a319a713a9d827d9a33da73ea9ce273ba48aa791a9e827a8a4ada7c2a9c2271da59fa7bda99327bfa464a764a9f826a0a35aa6aaa8a625cfa1e1a425a76f247ba197a41ca74f247ba22ca5b8a79c24dca3bca566a8c924dda3c4a55aa8bd24e1a2cfa567a8ad243da297a54da88324c5a13ba51ca823245aa1fba4d5a7c6230da1b8a4a0a75923bda06aa44aa7eb2269a042a419a787223aa007a4d7a61822e39fb3a36ba69c21b69f5aa31ea65921559f44a3eea50221dc9e0ca3d0a5bd208c9eeea2baa57f20339eaea2a2a57d20dc9d7aa282a56420829d24a29aa4ae1fe199a29eada0bc1d57967d9c5a9fe41b0899619ebfa10319c79ad59f11a40519759bdb9fdba38f1a809be79fdaa2dc1b729bcf9f5aa2841cc89b9c9f51a27d1c7f9b2f9fc3a1821c319b959e66a11b1ccd9a5b9e30a1aa1b6f9ae49de5a05d1bbd99989daaa0cd1a4e997c9d7da0ab1ade983f9d41a0721a8698f79c04a0341a0f989d9c809f371a97975e9cd89e9e193597199c539e4e193f97029cd19dfc18e396879bc39daf189996049bf29c1f19101a81100a14c61c722c19244326232aaa2e4b1940205f2c01303922e9228c2ac03059238e24f1290731b123672346280a33a125a326082bd5340b262a26532a6e347126ff26f02a2d34232593278d2a3b34ff252c28af2b4e340c267527a32a3034bc246427072be533549c279f0f2a4c3129ae14b05f255e31c0b1bfb34c24e930b9af32b0532ba0330712fa279428fb312a24382d8f242a2e2f22f42eaf94b5282c2235307aa3f522f822c230eba7fc1f832356312ea9541d2c22b131dba9e61cdf210632a7aa301d6022643255aa431b88217432beaaa21a1a228d3262aa601aa7212432d4a83018431ed2301ea8199adda0d22c1ea5d916d01c982a17a2c518a5226a275f182f18ec207024fc1c231b6021f023e91ec61b7d21ec23a81fd81b5d2170230420e51a14212223b51ff01adf20ea22ca1f261a7c208b225f1f841938200a22f61ed41803208d21a91e6018761f2121651e5f183f1fd120261e3f18d51e8a20cc1d3318891e6120831dfd170f1e2b202c1d1e17b01d0b20d01cfa16601d8c1f9b1caf160d1d7e1f611c5916c91cb21e051c0116801cc91d411b2f15f21b091dc31a1415ca1bf61ca91a20158e1b061dbf1a3c15cb1b0d1dc81a5815b51b0e1d9b1af4144b1bf41c361a8d144b1a541c3e19c60dd191fa927a20ad28298d918ebf2bc92c32a031a2462ca22f3d9ad39c862cb4309b189010072db531e01d19204f2cd53100207a20812c50324322bf233e2cbb32ea20b922332cce324422a622d52afd325f222e22942bde32c2218a229e2a683305114c12482ca1322aaa1aac1a2c1732a5ae46b0f227383215b07bb1b8257f321aae06b00529d53275a979aa45294f323da028212a27b12e341c5a2c999b7e26b6211f2fbca3431c8f205730f3a711178d1efd301dab0216ce1da33108abfa153f1df831a6aa5f15e51c803268a9a014e31490326ba89788f399723257a8d39bc5a468312da67e9fcfa8d22d26a27fa0b0a9192454a6f29ce5a5aa9e79a597159917b81b72a35f17d81cc21dc696d718a51f7f20a1176e1a3b2136224f1c0f1cf5217123b91dd81aa5211b239b1e381a11216022011f57198820fb21601f02192b209021f91ece18c51f01218a1e8b185c1fb320641e9e18f91e9020341e7f189a1e4720d11d09182d1e07207b1d6d17b31d671f2c1d0e174c1d1b1ff71c8816201d9e1ec11c6916ec1c661e6a1c3a16c91c0b1e4b1cd315951cc81d1b1c67153c1c721d061ce014e41b041d6a1ba614461ba71cce1a9014041b871c9f1ac114951a401c691a4214271a1c1cdf19c6118717af185f195f8b4e961e979921d224df8db295a82c042a0da018a3ee2c4d2e7f9efd9fc22cb0303b9c4f9f062d6a31fb94d89cbe2cea31340e4199a12c3a32cb0e8095642bf131181c8810492c4731fb1af7109e2c79313016179ec82cec31399e38a2cd2c3c3294a599a7b92cda32a4a908ac4b2b053322ac77ad312a69322fad2baf0d2934337cacb1ae36292233eeaa1bad4f29f231b1a7aea86628222d35a11b26f124ef156398242c0f9c339f6f9cbf2ddba61c9cdf9c992fb5a41699bd99b2300ba895998b9c4b310daca598c29cda318bac0099a4a09b31a7ab2a9dbda4a231feaadd9e7aa7bf307caaea9e1ca8af2dc1a8759d04a73228aaa4f79ad4a4379ca3a0319524a09ea2c49c1012d80b3a9c260ec017211dcb19151bf8197e200720d51db51af3206121c11e511a13213e224e1ffc19dd200e226f1f0a19582057210f1fe6181e200121831e9b18b91ff120d71e8218961fe120d81eab18521fa620851e4f18ba1e5320111e1418421e1a20c11d9817cb1d781f671dfe16431df81e0a1d6716cf1c4e1eb41c0616931cec1d6b1cb615411c691d2b1c2715201c1f1d1d1ccf14a31bda1ccb1b6f141e1b781c6d1b2a14881a2c1ce11a0314051a081c991a1a14b5192f1bc619571377199c1b2d1a0c145219431be41900006d122f12081f191cb78d420f562c4425de9e4ea0562c882b00a182a2fd2c442f0b9f18a15b2dde305e9d13a0ae2d5a316e9d46a19f2dae30919d60a1bb2d1e30349f6ba2f42d672f4c9f35a1c62d22313aa0f0a2862d243224a4a8a6e72cc43203a65ea8b92c7a32b0a86daa852c3e3335aaaaac2b2cb833bdaa05ad902ac333a6aa87add62995338aa9d7ac8d29a931a8a707abfd27022c96a414a3a124e59ddca240258f21e0a2c5a27929879c929f21a1922dc7a8e29d07a0223013a8019d0ca0123182a6459dc3a1eb319ea6bd9cdea24b32a1a7e99c46a4ff314ca61e9dc6a42731fca4a89d74a52a2e9fa29d9c41a5e326b79f499949a3eca32b9cc995ba9f2da5bc10f390b99b92a3c91b060ff20a419f2e1dd315091cb10cbe1ec917ca1d591ce71e7c18b01f0220871f13194d20f020941fe6182320ce20281fb518ca1fa320171f7918571f7f20f41e1a182a1f6c20ea1ef617a41e2e209a1e1f17271e861ff11d23168b1d1e1fde1de1153e1dcd1e5f1dc415da1c471e231d5f15a41ce91d0d1d1a153e1c8a1d881cfe14151c0f1d4c1ce414e91bfd1c441cac14b41bc21c101c3a143e1b9c1ce11b0e14db1a5b1cb91b1114a21a341c741b20143a1aed1b071b1c135c198e1a441a9812ae18891af519588b790c690bfd229e9a679c819c9720c092f69d719dba2b1a2705a0f7a1922c862dd4a075a2f32c4630ac9f9ca28c2d73312c9e00a27d2d7031499f02a2562dfa31df9e62a2802dc8319ca046a37f2d8b3278a2aea58b2df4325ea468a78e2d4a3382a62fa9222d76335ba893aa802cc333dca800ac562c303421a935acb92b403412a935accd2af933c3a871ac342a5c3141a8d2ab2d29a028cca5ada870287fa50fa517a3452696a51ca52d9587204ba2a4a30a2cbb9c72a0fda0482f609d24a0e7a118310ba3399f08a4f531e4a5329f80a4ea319da6789f4fa5a0316ea6999e97a57530b9a5f29dcfa5d72c05a4b09d0ba5b2232f9ffc9ad3a38ea50a98fc99f1a00ea74390dd96369f17a699183b0cdb910ea24c1c2c145a1aa39c7e1fea15221d2d162b203217711e1a1d29208d177c1ec51d9d1f6817761e5a1e2c1fd316311e9b1efb1ecd16011e7e1ed81ed316ee1dbe1ebe1e9d16cd1daf1e5f1ec1167c1db31e6a1e4916221d461e011e0316dc1c171e981dd0159d1cb21d3b1d5f15531c561de61cd114161c1c1d7c1c6214c91bdf1c471c43141f1baa1c181c9b13ba1a4b1c1d1c60134a1a121ccb1bd012c5192c1b2c1b86124719d81ad81aba12ec184b1a4b1a12127018011a011a3211ec17cc19a51a1c85c7158715fa23fb95fa0e2789481edea0a99e649f282cab949a9ee6a1172dd32847a0f0a2e42cf02e17a11da2342d9b315da054a19a2d2832469fe3a2b32da13273a0a1a3992dcb32a7a193a4772d8f33e8a27ca5712d0a34a1a47ca79d2d3f343aa6e1a86e2d3f34e0a68ba9c92c5a348aa77baa692c873449a861ab052cab348aa811ac7b2b623486a8b9ace12a57316ea70cacd129cd240da611aa9428aea5b2a46ba8e22767a605a590a7e2251fa468a57b28f9215ca216a4672d80214ba359a49e30571d16a1eaa3ca31fa9d40a004a45f320ca1f99e1fa4d231b4a0a59e55a499303ba00f9f56a4862c76159b9ea7a43120a91c309cbca2cfa6f81e6a981f9f70a5f11e0295609cbea3ee1f318cdd94c8a1aa2021053e11e59fa22068104218ec9b1d207314561c970c72201116081edb1b52209f16331e381df21f3b16121e771de51f8616051e681ef51f2a16b01d7e1efa1fdd15841d491ea51fd4152a1de91dd21e6415dc1cd71db11e5715a31cc11d4a1e5015831c881d0b1e0715481c361db21daa14c81beb1c261d69144c1b8e1cc41cf513b51a311c631c0013291aae1b051c6912b519501ba71ba911de185c1a561ba911bd18dd19d11a85116e18be19ac1a5311be17f0173d193b0fe015a1186c1a298fd9150a1690226f96608801925b1f66a2669c7d9c752c18a35e9f3ba1212d3f15a89f6ea2ff2c282bcea043a3312daf30daa096a12f2db1322ca07aa1842dd83352a0dda26f2d253491a17da45c2d593427a4b0a68f2d703468a514a8742db3349ea625a9312dfe343da7d6a9e62c203549a75faa9a2c3a3559a7d4aa412c4f3590a737aba22bb93498a70dacce2ad830b2a62dacbf296a9e73a685accc281fa906a609ac6f282ea811a5b8a7e226caa53fa4921dda25cea2f2a1cf2ba22338a421a39c2f2b2095a180a4ec309717bea079a4b431e8a0bf9f76a35d3185a0319e8aa36b30c49c3b9f2aa4502bc614599d00a307a1661eaa9b46a2f5a58e1f7f9a29a0eca5531f2e98019f0aa673207495c79cdfa4f920418ca19135a1d9204b1061195598cc20dd121b1c3f155420c314ba1c201a1f20f014611d4d1c30202215611d901c3d204815541d111de71fe814401deb1c781f5f14d81cd21c261f16144e1cc01c961ea013011cb81c701e6513841b2a1cc71d4d132e1bf61b851da2127c1a711b661d4b12331a0b1be31c1a129b19b21aa51cc1114e19511a611c8c111319e719181c401186189d19ca1bcb103718ff18681b97101318e2183d1b99106817be18b51aae0d3e152717001bb60d2a130d14ba189396ea0e510d262254996a9454949d1ef5a2e29d9ca0472cf7a4799e1b9fd12c28a3ea9d14a11d2dd496baa06fa1f82c522dfda1d0a36e2d7b3229a3aba46e2d2e3482a28aa4972d80341ea219a69f2db4344fa39aa67d2dd5345ca44ca7792d263567a592a84d2d5c3539a661a9f12c8d35b8a6fca9772cc135a3a644aa002cd035cfa6b0aa7c2b0835e0a66daba52b0e30c9a5baaa562ae1a610a7b8abd0295aa9b2a69cab4c2905a87aa6c2ab892872a5a4a57ba7842646a451a570249f2536a4fda45e2c892311a28ca4882f042040a22fa478315f1783a1dca367314717c6a13ba3a92fa71cbf9ff9a3c229dd1f6f9d35a3bf9f9420739b85a106a67d205a991ca0afa581202298539d06a595212495d898dba4d4215594598b13a25721a5855f17c59cee2023107f1aed95e3201113861cac1296205713c01c63184420d8139d1c911a0c201e14b21ce61b0e200214c11c871c0920ae13741c8e1c781fdb13231c341ce51e4113a41bf21b841e00131d1b5d1bbe1d1112b11aea1aac1dc311e7196e1a461d7411a0196c1a1d1db81015198d19c61c6710c11828196f1c01101e18d318571cb20f49173e18271c9d0e7e166717ee1b890e4b161417951b930da615a016191b460e4c1585165d1a0f0f8415ba16ff191e8dec806788298a3699d5913394b81d66a2b69f4ea0a52bd7a3d19f1ca0e62cbea4849f5da1d62cf5a286a1aaa3672de72565a194a3442dae301da4bfa42b2d523420a459a66a2dfb34a8a496a6472d433514a58ca7652d7435bfa407a8532dbc3576a5bda8282d09364ba655a9d12c3c3697a6fba99a2c663687a61faa282c673671a6bda9812b45350da621aa3a2b2c2e34a64eaa7d2a36a8bba74aaba129e5a60ca669abc92870a544a6adab13280ea52da605ac0f2699a276a5d8a66e25a3a299a4ff2897249aa22fa4c22d5823c0a1ffa2ce30ca210ca228a2f430432005a245a1342f7b1f80a187a0e8298620119e689fec9f92206d9a559dbda8c4216c9b0f9f13a77121909aa79e43a65e216b98219b17a44521d5931b0b07a1ae205e856b19129fe220fb0d0b1cd99ad320ed0d321cc792a920dd0f5e1c3715d320aa10711c3f19a6204511721c9c1a8420fa112d1c0d1b75209911aa1b861a20204d11011b021a991fe010721a8919001f8f10091a2619831e25104c19cb18101ea50e08197a18661d490e61182e180b1df20d1118b017a31c910dd016fe16381c560c58166716b81b0c0c88152316661bf10be5141c15fb1ab40bca14d514ed1afe093b14a014a11a160b08144715fc1a660c72142016491aa88ed984d213489127996b92818cf91c14a39f9d8ea02b2ce1a30d9f55a0cf2ca1a47a9fd2a0112d44a633a28ea42e2d77a6b9a2dda3fd2c3829daa285a41b2d4b32eaa2bfa5222df8348aa24aa66f2df335f7a41fa85b2d4d3675a5aba82c2d87362aa5f7a8eb2cae361ba5f4a8d02ce63669a55aa98e2cf5366ea5a3a9592c313754a562a9802b8735bba563aa882b90289da625aa7d2a17a845a775aaf1298ea8eaa48fa9132934a646a5faaae92879a6e9a5cda97827e8a41aa697aab0263aa3f9a57da2f92435a124a571284c245ea1a0a4f22d5e23a3a1bca3e92e762299a07ea3a62c71231ca153a30a1492237aa0dba1b4a66b21b89cb29f0da8a920119c559f5ba70d212099bb9b2aa5df206597609607a40e2137952f8bc7a021215f920e16789d4f21968e4c19929aee201e85971a17981c21aa04d91a808cec20680a021b150c7720c40cfe1a77142120480e811a6b170420b90d061a3a187e1f590da819d4174b1fee0c49195718d81eae0c921807185a1e630c54188017ea1d370c0e18f3158b1d060cf716bc15161dab099e168c14ed1c78066215dd12c71c46066e146512741c310273138d11101c05820c127e11061c2c82ce114011081ce3867710c911e91abd05fc103110d619ec0795103011e8199a813a0c6b0ef088c398f6932995fb1de5a269a072a2162cd2a487a0f5a1902c86a563a164a3b02c5ba6d6a182a4662d06a859a293a4672d36a76ba25aa33c2dd22bbfa1d0a5312d4f34e8a306a7032def3500a432a6ea2cf4367fa440a8d62c3f3706a5d6a8cb2c573766a5a8a8862c8f3755a5e1a8032c88376fa5f5a8d12b7d37efa4d9a90a2c29353fa57caa9d2b1e1ba9a5aba9842abea7caa56aa9bb296fa708a618aa2b297ea5fba5c9ab832963a54aa5a6a94128ada423a59ba80727d3a246a570a84125d8a2fba4d4a07623c8a1a3a32b287923cc9fa3a2082c73226b9ea0a24c2a3a21709e46a2b01772214e9fc7a125a6c521379f5da09da7a221aa9c7a9faea65a227e9bf49bc9a450227799cd96d9a21c22cb96350b4aa0a9216c94f7150a9e902176902919769a23211e8edc18af971421b38d4a19269505216b8af418c491af20dd033819260b94205009071a25143f20050c9519da1618209a0b42195816941f55087718f715201f30088c176714c31ea402111706122c1e8402e715bc11e11d5e02cb148f0e9a1d298264141f0ef91cf581bf12650d621cbd81f1113b06981ba2816f105d0cbb1a89814410d805c21a8e014f10b6053f1a9a01970e4305161a8e01660e330bda19b7876c0382040e1a9c8d2603c281288abc98c093dd944d1ed9a3c4a093a23b2c72a471a1eda2f42c29a581a135a3dd2c81a5fca106a4412d8ba70ba285a46a2dc8a6eda081a54f2da5a584a4bba5122d2f304ea45da6a02c733526a48da6d62c343731a49fa7a92ce137cea466a89b2cdd3713a57ba85c2c013833a5d0a8442c18387ea58ca8952b093830a577a9f92b57335ca550a90e2b1aa5a9a5e0aa362aeaa554a601ab8e2920a643a6f4aa32291aa50ba6f7aae228f3a465a5b3a9be27d7a512a555a9402769a512a5a4a8f5259ca372a442a798246aa0fda37e9e262400a0efa38c20db235aa1c2a262929423fa9f0ea237a7b823099f19a198a67922e89c019f5ea5a321869cd59e28a53022c79b099d87a4be220299319567a1e5228196c511b99e8c22be93da17c79ce521bb915a18659a61213690e218bf9765210c906a1950952e21a78dd2191092ed205b8d8a19b08bed20098d3219328b9c20a38c2c18948a6c203d8c8b17fb89aa1f868df8152790171f3d8dc214b78f971e7b8e6d13548f421e2b8e7311c391e81da98d5b0f89933f1d868e230c0193e11c308eac0b6e92b51cec8dcb04ec91561ca58d7b04d48f031c8e8d4d044991be1b498d41043691a11b4b8d1c84298fb31bd787ca038c934a188b8b7b8c4d8e241a9a80ea0a610d23884499c39734980f1e58a3e9a126a49b2b2ea4a9a19aa2a72ccea49aa1d1a39e2c64a501a22ba4da2c2ea6e0a2d3a42d2d50a643a34fa5312d92a88aa4dea6522d31a511a483a5002dbb31b5a395a5672c283716a5dda82d2d4b38c2a5bca89b2c5e3821a6d7a9ee2c7d3895a5f0a8242c8438a5a50ba95f2b5e385aa580a9f22bc62f91a503a9c42a21a80aa6f3a91b2aeda731a6a3aa63299ca5b1a5faaa3629eda490a5e4aaac281ca51ea5e1a9fc271aa5e1a423a9ce26c1a2e8a4e9a9d7250da142a592aad225aaa253a3c4a528244b9ff7a049a33a24169ef8a0d3a0a923a6a131a1f8a4cb239da15ba0a7a6b4237c9e629e3fa6ac23449e389c17a50124589ccd985fa2bc22159afb91f7a0ce22ee98c011829f9d222c970b184f9c21229494471a4798a721d991a81ac0959b215390601abb9278212790231a6f923a21618d29193d921121de8e2218c794e620288e60163d945820138fb11433959d1f5d8e9f12bf944a1f938f5c109f95671e608fd80c3895f11d65901e06dd94cf1d3290b4859195711dfd8f058c3195131d27906b8bd694821c5c8eda8a6a941d1c988d6c8ad192c41bc98d428a87926f1b068e3d8a0094181b468f0b8d0794821bad8c978c5398b318ee8d5b914c919f1ac2889809180be287ed983096a095c81c1da22fa114a3b52b11a489a119a3812c84a4aca1f4a38f2c7ea51ca2efa3f52c24a661a21da4242d1da7eea283a4182d7ca693a2fca56e2d30a60fa559a5d22c93a14ca570a6bf2c5e347ea4cea8c42c05382aa580a8392cc238a6a513a8482cee382ba4f0a6282bdc3849a44fa9d62b8a3792a64caad92b689c6da69aa9d42a4ea5f1a585a9f02917a6c6a555a99e29faa530a558a90f2981a516a58aa9ad2874a4d4a49ba9302898a3d1a4d1a9262732a3b7a43ba947264aa30fa46aa8d924b1a38ba2e6a6232464a2d8a126a76924289f34a091a44124b19ee09ed2a47023e49d2a9e9da70024389d529e65a65723019d139d0fa5f122a09cbd981da31d23409b0a0ca3a0dc229c98b816399d7122d395141ab2983522d494bd1a7196f521c6936a1a5c93fb211093e519d6928e21589280195d922c21c8911819d791fd203c9110184a918420e7908517db9059205791cb146093ee1fb591dc0dc694551fda926c8df996d11e8e922d907798661e65927591b398f11d9692829265988f1d379284938e98281db6910b933898c71c3c91a192f096971cd6905592a396321c7d90e8922696c71b179068926096371bf790169395966d1a4690a192e8955f1af790668c2b908219620798139c145513039ccc98399a8e21b8a2a6a267a4f02a92a313a148a31c2cb4a336a12fa3392c93a47aa1afa3842c18a540a17aa3c02c7ba55da118a4bd2c2fa667a2f5a4eb2ca1a689a492a57b2c16a6aaa68ea79f2c792421a486a8a52c383528a5a5a84b2c913802a637a8182c0a395ea5fca82f2cc738e6a400a99f2b7c34cda591a92e2bd4a54fa71caad4294ca593a58ba9b129a7a584a5d4a96329c8a536a6b8a9df2868a51fa6baa99f28f4a4cba5d1a92d28a9a447a5c5a9bd27e3a2aca422aa1227b3a2eba2eaa81a250ba17ca10ea7d6237ba240a1d5a73d24b1a1cba141a59423329fc6a0f5a4fa23809fd99f35a5e022a39f419d00a5fb22c59d829527a32723cc9c470c53a0f42249992b128d9dd922d195561ad298b722bb94471c2e8dfe21b493f91c0b8dd5211c92301ddf8ca221f692751c998c9b21b292f11a7a92432127930d19f89418219392e2161798e3200093b9119398782014943408e3980a203494df90d799621fd3941194a29acb1e84956595a99a841e70957d96a79afc1d6695ae96a49a891d0295e6962c9a241dbb948396bf99c91c3594b5965899741c8b935e961299091cf292ec951899341b0193a395d998db1a359308964f988b1aa49219964a98321a71926e965e995e1958065510f4105911a29b9099ed9972200da41ca3cfa4a02a7ea3daa1bfa31b2c5ba35ea1f3a2462cd8a315a198a2562c65a454a03fa2592c07a566a056a2302ceca552a271a4052c32a5bfa367a7372c84a76ea592a8022c05a86da627a8a62b5520d4a599a8c42b64349fa585a8012c073853a581a81f2c44360ba460a8832b5e29cda43da80c2a06a459a594a9b8292da6b4a56ba990297ea612a6e1a92b29daa5c9a5b5a9dd2866a577a570a99c28c4a4e5a4eea8242808a47fa4aaa85727d2a20aa44ea8ab26dea2c7a2d5a7f6252ca344a3d1a616250ba300a3e6a7d62440a173a366a9c5250da2e7a0e8a7f5240d9f5d9fafa4b423b39c179e24a31822199b5c8c429e7122af989618bb9c5e22c899038c7aa045223c97561a529a25221094741d758df821258c8f1ed0130622058c301e1d16a821bd91da1d0c18a421b092ba1ca41798216c93031a2a928521aa93da15309a1e21ba93c908769bb8202a95ac93a89c8e20f49586973f9d122010964498669d091f2c96c298549d8b1e8e963b99369d0e1ea99641991c9da21d51963299b49cf11cdc95d698479cb71c23957898619b4a1c78942c98d19aec1bf793b197529a011b2c93f296c899c61adb924897f299441a20911196ee98851ad58f0994a796ee19000039192c1b07112ca1b8a2baa4162a17a36fa4e0a59d2b82a2e9a104a45c2b53a23e9f1fa1c02bcea2209c4e9d172ccea2c598509c1e2c7da31c9e99a0e42bfda420a3ada5bf2be4a5b6a4caa7b72bc4a59ca522a8be2baaa490a5cea69a2b37a744a6cda70d2bc0a57ca6fca95a2b19299ea486a6142acf2555a50ba8d729aca3ada508a9d6294aa7aba571aa9c29b1a443a5d5a8182948a413a5a0a8a02860a46ca5faa855285ba47fa530a909283aa451a576a9532781a3aea438a96a2641a2c1a3d2a8e2259ea1efa27ca86125d6a037a223a70825d0a082a10aa7bb24739f46a0d9a4a024f99e9f9df1a36624609f85a026a59323789fa49e30a5fa22d19eee9b79a447224c9d1797d1a17121b69a0317d49f0821a899421c6397fc206f94341f731a8d212e06ba208d1eb021e2858120cd1efe21fc8bb61e841cdf212c8bf21cde17c3216e8f551b2592822124911218c59b242191949788cc9cb1205696de97729d6a204a970799ab9d3520ce97f2991e9e5f1f9397309ad99db41e9897739a9f9de21d2797ea996a9d6a1de196db99019dc81c7e967999989c641ce3950b99fe9b2e1c9d950c99799bd21ba095d798269b261b699577989f9af11ab4955998649ab41a7a940f983f9af11912945f98909a8a1700003d1698195288c0a144a461a59b29d3a270a4a0a5642a16a304a316a5422bd2a10b9c42a10f2cc8a05e1f961a7e2b80a13e204a1f352b22a5e4954d9ada2a90a54ca2b0a4bb2a82a518a421a7c42a20a6b5a5b8a8d52adaa705a77ea80b2bffa59ca6cca8e72a05a922a70da9c12ae0a701a70ea9552a20a4dea49ca7cd2984a489a578a8fc2977a79aa604a9242981a608a63aa9d728c6a5e8a570a98b287ea5b8a549a9442810a597a542a9bb27bda44ba55fa9342728a47ea43aa9ad26c8a277a390a86026dfa174a25ea7bb257da147a25fa6712561a00fa09da44a253b9f909fb9a34425849f849fd5a3d024db9ee89e26a42624ed9e47a0bea534239b9eab9e3ba51e22599daf9bdca38f218f9996196e9e5a208d91631f3f199f1da60cf320001f3d206811f72181203a21cf1216226a20d421720ca1212c1ffa21ab8e6b1fb71a422211942d19ea948721e195ae88049ba5207996de95559c6d205a97b698e59d05202098019ba19f4e1f8f985c9c05a0491e6a98609c03a0d91d48984f9c909f831d2f98199cea9e381dad97d19b939ef61c17971b9bc39d811c46966f9af49c351c98952b9a8a9c011c7b95f299589caa1b10957399fa9b001bd29443998a9bec1a4b94c298d29a841ae4935498029ae4180000c514041a73895fa3e2a438a60f2965a307a79da8a42a8ea29ea3e9a4ae2a84a18b951d9adf2b46a01b25ff255b2b16a13925ba24f429f9a22f1674118a2912a400a480a5b72925a5bea6dba8e42964a57ba764a9472a92a55ca778a9a12af1a53aa790a9e02abda512a71aa99d2af9a55da697a85a2a0ca6f4a534a8462a7aa589a42ba8b52969a4e6a4e8a7f5280fa517a586a8a62851a47fa508a9442846a4a9a5f0a87f275ca42fa57ba8872619a3aca463a80a26cfa173a3e0a79825eba0dca07aa61d2502a0429d64a4d824ad9fb7938fa2dc2452a16f98aba15425f79ea39d04a36c25a09e0ca152a51e2504a0f9a123a6f824579f79a1faa53224789e94a05aa52422a39d809f3ca4421f269c4097ec9ebd1c0c8d0421ba1df71c701671245223f01d6b18c324aa24f620d31894248324f3213c1839230b2263224c8e191e9a1ada21c7976e10269ec02177997c9aaba05a217c99e29b71a0a12088997d9c1ea0e91feb986c9cd29ff71eec98a19cc09f701ea898bb9c8e9fd21da898749c229f431d4c985d9cfd9efe1c1898209ca29e871cc897db9b579e541c3097759bce9d171cba96179b9d9dea1b0196739a549d2a1b9695299a1a9d861aa395ed99ae9cde193c95c399a09c1e1a87945f99e39b05190000db18811a100973a251a5b3a63a2826a416a605a83929c1a391a65aa8002a15a2f1a15fa4f42a3520012cf52ce82b600c4f2aec2b1227d8a358a263a403284ea6d3a73ea95c29a9a577a733a9c22930a5dda78aa9c229ada52da8d8a92d2a26a75ba834aa8d2a26a7aca62ca9b82a6da5cda490a7e12a9ca42fa2e6a4af2adfa5fea036a3ad29b3a4f0a1cea4bd28cba45da4e2a6da27c6a4eaa41da8d72628a4f7a430a8eb2544a312a52ea8f924dca283a42aa8892460a367a459a70f24dda3a4a1dba5a922aaa2289acca3c921209e381fbfa08a23e899e020b4992226e79d3e9a34a21327eea0bda48ea8bb25f3a11ca427a7942401a246a4b4a63e2321a183a2f9a5b02011a107a1c2a4571e4a9ee59a10a2361bc494e51e7b19b314e71abb25fc258518841da7274428041f0f1d9127312860230d173524f1235c243199871a8399cf23799a1299e29e4a221a9a3e9daaa0db20649a4d9e6aa13620469a649ecda1af1ffd995d9eeca11b1f1e9a0c9e74a18b1edb99b99dc1a0b41d7599609d22a0191de998069db19f881ca298f09c499f4b1c1c987c9caf9e0c1c2897019c159e941b8e962a9b989dd91a0996dd9a4b9d7b1ac495709a109d131ae1957e9ad09cc7193795039a9a9cfd192294c898709bbc180000b21d0d1f7a1ce09ea8a230a40925fea27fa694a7532850a396a63fa80228509fc1a7c0a9dc2809a453a40aa6cb28cda661aa14acdb2c05a316a860aa722944a5a5a773a91d299da4a9a742a90329eaa415a898a96c2922a5fda793a9652994a518a8c8a9692932a654a8f8a9ac29f3a502a725a9402a0ba44a9e16a3e02aafa6e021d8216a2966a2688f829da925eaa2a0a4dfa6e0245ca35ea655a98025fea3c2a603a95a25d2a38da64aa926250ca4d8a607a9cf247ba34aa6d4a8222524a263a656a9bb2294a01ba5efa77b22e19d36155a9d0e213e950621ff20e8267ca10fa633a9f924439db8a44ea8712117a111a551a882214fa2d6a414a8b321c2a040a484a78e213e9fbda319a61120f29db4a0e9a4751b07a0289e34a1c20c47199e257a2622a1be224a2b622cb817d120ef291f2bba25bf943321181f1d25f399539ccca26023769b309fcda24a211f9c049f07a27420bd9b639feea18b1f9a9b189f7aa1a01e4a9b909ef8a0021ec59a5e9ee5a04e1d909a269ee6a0301d4c9af99dc7a0d61cce99949d9fa0751c40994a9d4aa0231c14999e9c989f231bc298629c329fee1a9b981a9cd79ec11a3298f59b879e461a71976e9bf99de51909971c9b929d7f19c6954f9a309d4a18a1951e9a7a9c7c1600005d006a16bd807f9d0ba1cba2a822fba1f6a570a7ab26c3a277a610a8932607a045a25ba40324c989d1903c8e8f20baa070a330a58026d3a515a894a9d9287ea5b2a78ca9f72897a51aa8aaa9eb2879a513a8a6a9fa2868a5f4a787a9df2859a5e7a78ea9bb280fa515a8d9a9a72864a598a892aa7628a1a5cfa82dab002844a588a8f0aaca2595a441a861aa062661a4f4a7ffa99a2664a4aca7b8a94c2627a426a76fa9382602a44ba794a9de2507a457a78fa9ae25c1a336a787a95325d9a26ea60ba9ee24e8a141a529a83224aca09da358a69521f29ea4a1ffa43d1e1f9f35a283a5781d41a074a3fea6c01e7ca0f8a34aa7561f6ba0b4a328a7b31f45a0c6a30fa7b31f2ea0b8a313a70e20efa028a4dda68220419e09a2c5a6af1c1e9a36a019a4dc9a9a27a52f02310ba54d200d29fc2a2a297694ce9f0ea4d320579c6aa00ca42d202f9d11a1f8a3461fa59caaa049a3851e1e9c54a0d5a2db1d0d9c22a084a2561da29bc59f15a2141d629b529fbda1e31cfe9ad89e64a1771c4f9a4f9ef4a0301c7d99a19d81a0651bf998419d28a0f91a7098e69cb99f9f1a1498ae9c499f621aa4977c9cd59e701a4397649c709e351a09972c9c189e501a3b97059cc79d221a1d96699b869d2d194295b399df9be01800009418e81b020ef8a0e3a47fa6fe25a5a136a5c1a60b26b1a1daa461a6a02502a074a118a3bd22529f6ba157a39a23a2a2dfa532a83c2717a485a745a949289fa4d3a778a97228e5a4f0a783a97b280ba517a88ca982280ca50ea88ca96e28f1a404a874a933288da503a86fa90c2851a627a8afa93f27aca237a52ea75a24079d69a1fca3712119a117a582a76f241ea343a7f4a89125a1a36ca72da9812535a31ea73ea95a259da33ea775a9452517a42ea782a92c254aa42ba790a9012572a4b7a630a9a62414a3f5a5ada8602481a1fda40fa8b1234aa004a44da7cc22cb9fb6a26da6ae21f5a063a286a59c20f2a0a0a2eca55d2042a049a348a64f20ba9f72a3c4a61220849f7da3dba6dd1f4c9f4da37da6481f499f3ba315a6ab1e389f5fa244a5231ea20d0e14211553136a02ef89cd8f9788919e59a0d7a28b197c9df3a12da4281ee99c05a1c3a3971dc09c97a02ba3181d549c23a0a7a2cf1c0e9cc79f26a2621c129b4a9fb7a1391c8e9ade9e63a1211cf499929e0ba1031c9399499ecaa0661b2299eb9d7ea0131bd3988d9d2ea0b81a9798229db69f551a6a98b79c199ff4192d98529c849e951935981a9cf19d53193598ab9b969d21194d989f9b359de5187797239b349d6418f495829aa49c3d1800009019181cb68c0fa13ca5a4a64d2506a2b2a527a76926d0a06aa3b8a48024fe9e02a222a4a023e79fd5a38aa5f224c8a2dea505a812270fa40aa7c0a8f92743a43ea709a9e6271aa460a734a99a2736a499a77aa9bd2789a4efa7b3a9c827b2a4c6a7c8a9e527a2a489a798a9542762a48ba691a80726f1a142a544a7e62473a132a5fca6922499a2e2a516a8ff2407a497a689a81125faa3afa6c4a82025d9a39ba6bba8e52456a360a6bfa8b7240aa321a69ba86224a9a2eda57ea827241fa28ba54da8d223a7a14ea534a8682332a1fba400a8ec22c4a0a8a4b4a78a2273a075a459a7542220a027a4dfa6cd21f59fdea35da64321669fa5a327a6d520029f2fa3eea57b20a99ef4a2b5a534206d9ecca2a2a52720e79d74a2aea5e91fa09d30a225a5621f149c87a083a2181eb496a09ce19e311cf397759daba09619479a5b9ff3a34217c89b07a012a4c8186b9be49f16a3b51a6e9bfd9fb8a20b1c919bd39f9ba2311cbc9b2c9f10a2f31b6a9b8b9e7da1311b119b579e46a1081bc69a0e9e09a1771a1c9ac49de8a0f1199199899dbaa0d519e098519d7fa04f198498019d21a065191c98a19c9f9f6419a1975a9c199fd4183e97129c7c9e9a183197f09bf29d5018a7967a9b109e90174196539b849dd6187d9cec9b189de71cba28b21c6a215e2a342d1f200e1e3f2c272f0220f71d842ce730ac235223bc2c9e31e524d724272cbe327625ef269a2bda337c2648283f2c2033c1257b28722cc5332827c5287f2cb033d5266b28282c19341b27b4280c2ca133b524c525a02c10321dac88ade72b5c3350a3d1a48426f133dda0e99d3526ba30aeb02fb2fb279430e0ae07b0f22b2e310c1ef328f3286d2d0723332d7c19ad26fa21ff2d289d8a21de22322f73a4cd1fa123493095a8b81d4c228f303ca96c1dbc21e8306ca9091ccf21163169a9ea1aa121a531bea89f17d01ee2309ca856a241ab3229919e36aaebb187b24aa09ba8a3b052b13ea9a61d5c238f276d9b651ed72238253d1aca1a80212c24a01cfc1b14221224cd1d411bb3211124661eae1ba821d523dd1e171b45218923f11e1d1b23214123021f531aa620a622931ed31991202c22891e32192e20be21141ebb18dd1f4c21dc1d84184a1fe5208b1d8518fe1e9e203b1d4318741e6620e41c02182a1e4e20921c4017b51d1420711c0817681d981f3d1c96162c1d9c1f0d1c9516f61cd51e781b2716921cd41daf1a6615241c491d581a4415001c451d531a6a15d31b251d581a8415031c1c1d4c1a9215db1b151d1a1a0f15571bcb1ca619dd147c1a241c90191a988c9d489e88158a1ebca626a6f629dc2922a7b7a8622dee2d82a6f4a7df2d723074a43ca6482e47318da049a2842ea131d299fa9c882e65320a1ccc1a142e5932171e6f1f892dd332b2202621a82c3232ca204321732c5832621e151d962cd6322fa5e8a6f52ca13273acbaad092b9f321eac57ad4624b432caab30ad329e8c3267ae26b0b0233b32daadb8afcf292131d7a8f6a9122b972cd9a1d720cc2713228c1a192a3e225b8c421df02c20a371101f19822e7ea781124e171b2f7aa2ed11f9170d3033a35094709cab3083a42f9aa4a4eb2ff09cbda0daa95e2c7aa062a4f4ac52a283a0a5a55eae8cad01a3e4a442adf9ad9fa6229c5ca553a7caa18218851b4d19ae9d2e191d1f671f2598041a94201b22d0121a1b3921aa228a1a1a1cd321a423ca1ced1a8c216d237f1d351a2d21b4220f1e95199b2014227f1e60195120b3213b1e4b190d202a21ec1dd118561fbe20f21da418fd1e8a20b01d9f18aa1e4c20281d25184c1e1520e51cd417d91d8a1fa61c1117661d3e1f771cbc16301dbc1e451c6316ea1c751e181c2216c81c161ef01bbd15931c021e9d1b5615591ca41d271be314d51b011dd11a7a143b1b971c2a1a7c14f81a791c011aad148f1a501ccb1926144b1a481c3e19b91101180f190f19099ccfa03da16b1b92957da4dca52b2b59270ea3e6a5cd2c952c5da4a1a5c12c882f48a327a5092d8230f3a2c3a4b02df93011a10ca4762d60312ca28ba2a32da13144a08ba1ae2d98313e9fda9f382d1632419e639e1a2d7032b4a2f0a4162dab3270a631a8912cef326da96dab2f2b2a333fabdfacf028753352abf1acc426633305acd1ad4c26b93216ac91adf628b630afa9e8abd5293b2ab5a5d2a6d4277b9c5aa1aa1440212e9f9ba12e2480a0aa9d39a290290b9ccc9c43a1922c9da6b59de1a1c52d74a5489d47a49f2e2aa9579e06a75e2d0aa95da1a6a93b2aa3a71da21eabc09564a581a215ab0eaa6ea474a058a916abe1a4c09db2a642a9b5a0a397c9a0cfa4069c12153a184d97d70d0a19621eea1ce519291a97208c20af1cb71a04218b21ab1d9b1a1a214622eb1d221af9202822431e481994208a21d31d2a1938202e21c11de6180e200a21bd1db718ac1fed20071ed018671fb620c41d7518ca1e61209f1d40184c1e2b205a1dec17d21de41fd41c74175d1d401f931c0a17ea1c831e721c6016b31c231e301ccd157c1cb81dce1b64152c1c311d511bbd149f1bd91cd61a5314001b731c7d1a16142b1af41bee190814f0199f1be6191a14ac19051b1819be122f19a31b6a191f149519cd1b84188284b78e4990e118879a109d58a0172b481e66a1d5a2682c2c2803a33da4b72c6f2de6a23ea4252d2e30a2a238a4b22d0e3165a241a4d42d60315ea23ea4cf2db73124a299a4362eb731d0a1fca3222e2032e7a195a2c22de83268a5a1a7692d64332ba72da93c2d8933e1a8d5aa7f2c073445a9f7ab342b3934e1a9b3ac2929193463aae3acd42868339ca9aaacbb28e13049a817ab9a2855288ea599a8c82796a33da650a87d2507a26ca4e9a5771ba5a0d3a35e23b29e1f9e53a23c297fa21c9e79a4652c7a9f7f9fa2a5262d70a1daa00ca74c2c33a453a075a8ad29c3a49ea002a97b21b2a2c5a0ada8efa64ea01f9f78a766a9d19e939cada42da8139a4699d2a061a50190698ca49893a1c8196d140218a3984e1c8116d91c18188f1d44188a1e7c1d021edf18072088201f1e1b1947202721a41ed8183d200021eb1db9180d20b420161e8318b51f8d20031e4218451f7620011e3018cb1e4820dc1d8417501ec41f961de316d41d4b1f3f1d3416511de71ef71c1116151d601ec11ca015b51c061e7e1c3f15741cb11d091c0c15221c5f1d9e1bcd14f41b0a1d831b8214aa1bc21c701b28141e1bb01c121b0d14bd1a461cef1a2a14711a3c1cdf1ae713fd19061c871a4b122e19941afe1912128218eb1958198a9ea89ffea05c201aa320a559a5391d8ba1ffa1d8a4ca2b6022e99ed2a2012de52a2ca3afa41a2d1f2fd5a0c8a38a2d403102a09da2c92dc331a4a089a2a22d473251a0eaa2de2d00324da207a4fe2dc832b6a3cda5d92d46335ca522a8912ddb337aa788a90b2d19346ca8b8aa762c3234c2a885ab1b2c6834f1a80aac232b6c3406a911acb82ae433f9a855acfa29a43060a80bac0b291c24b2a57baa6f2833a78ea601aa0627fea41ba71eabeb2414a3d0a6cda86f1b99a132a5c3211f1546a184a5ba28339c40a1b1a6342a859f80a239a7a22916a174a271a7dc2535a252a184a7a29437a17b9ff9a64ea72fa1839eafa553a97f9ebf9b73a31ea9699cf299cb9f3ba775991b958e9cf8a4c20f0311c71199a099193115131cc998d01db416051e4d18101f75178f1e221dc11e6f17821ebe1d331e4f177d1e4a1ee21d3f17441e9a1e391e34171d1ee41e2f1e1b17001ec81eca1db816d91d051fc51dc116831dbf1e991d4a162e1d581e441d0a16e31c281ee61ccd159d1cb91d8e1c6015561c4f1d3a1cd814101c091d021c57149e1bca1ca01b2e14f21a901c431b9713a61a451c731b3b133f1a0e1c131bbb1287193b1b441a8d125b199b1afe19b91200195a1ac2191112bf18ff191e199d1100186719f519949154940693d41a9597de0f3a90841e04a48c9ef29d5b2c01a351a063a2492d16217ca13da4142dcd2c41a237a4812d1a31f7a19ba1e52d4932fca02ea3f12dd93228a160a4d12d073334a3aea5ba2de03319a460a6c02d433446a53ba8d42d8434d2a64ba9902d913473a70caac92cb63408a8a3aa382cde3435a828ab9d2bda3480a80eac332b4334afa8a2ac9e2a493064a83bac87299a162fa7e8aaa328fea5dfa54fa9b32728a5e9a531abb525e6a4baa6b9a99d2236a426a61ba4062265a25ba6671b2b1e1aa1c1a50127569510a1a0a5c228e19be49f36a60d25c194d29f20a6a113a193269f4da585a67918339d7ea45da8591a2a9b7ca206a8c01c6798e89fe6a46b1df694619c59a3681e888fc491aba0181f550c0618839c491fe311ca194198fc1ebe14be1ce912321f7b16111e031c381f6d16411e421d161f6d16221ecd1d991e4b16161e591e1e1f5216061ec91e271f2516b11daa1eaa1ee7157e1d5c1e0c1e8315fd1c011e011e5c15bd1cde1d981d3d15911c9c1d591def14521c4c1d0d1da114171cfc1c851c72145a1ba61c371cc113db1a501cd31bbf12531acb1b6e1baf12d719611b091b05120b19bc1abc1a7f111e193f1a3f1ab511cb181b1aca19c910fa174319e7192110ec16b418851a688e83851e06121bc599549565971e2096a2769da29c8a2cb6a4dca004a2322d71a31fa0f4a0352df926e3a13ba38a2de02feca1dfa2af2d913205a118a1bc2df8339da1c3a3712d5c3478a20fa5732d9c34b4a40da7ac2dcd3482a527a8b82d143589a617a9742d3e351da7c0a9f72c543557a782aaa42c8e357fa7b5aa1a2c77356da716ab4c2bac34fea676ab992aed2fc6a687ab682906a4a6a719acca284aa836a773ab4e289ea5fda5c9aa7d262ea5a4a67baae3240fa4d6a558a81a2225a408a6bfa1501f0ea2daa55794831afba0eea5741d5d9426a1d4a50214049af5a05ea5a8a1f7927c9e63a4c9a80112189e09a443a9661c5d9caba348a8cb1dd499a9a014a68c1d7898199faca5471fda95479c57a43d200486ad118d9f232087105e1a769332200e12351c6617aa1f8614381d451a791f1b15771d5a1c191f4015751d0c1d3d1f8015731d221dc71e1d15541d5c1d771e8314e31c391d3b1e3914981cd71cc61de813171ccc1cab1da613af1b831c0f1de012541b061cce1cbf12971a8b1bbf1c5d12491a8b1b3a1c1912fc19bf1a071cad115d19681aa61b3b110b19f919211bc8107c18a819c01a7e10e1170f191b1a0610aa179818f5198410801726187919da0ce2146317e81abc0d871304152a19dd921195e1910b1a9799e095cd94001e20a36d9d2ca0a02c6aa5a79e629f012df9a336a0a2a27d2d6aa2fda1cca2232d7c2a67a399a4822db83155a326a4992d2e34a6a3ffa4102eae34c7a395a6f82dde341aa44ca7a92d1c35e9a40ca8942d7835e6a5faa8552db035d7a667a9f12cde3536a727aa892c053605a77aaa0f2c1b365ca7f5aad02b31356ca62fabd92b6f2e59a5fca92c2aa0a61ba786aaa129a2a82ea7fdaafe2886a686a6e3ab16288ca480a616ab30265aa49aa62daad12450a37aa638a965229ca2b7a539a6b91f2fa323a5eba0421ea8a0aca49da4261e5e9fbaa4f4a6431dff9eb6a4a8a8b71e2d9d5aa41ba9e51ebc9c0ea313a8e41eb89ad4a072a64c204798699d50a5c0205a96e89835a4f620c693b21131a03120668c8218df9acf1f240ead1a37930f201212351cd0121e208613c91c7818321fef13f71c981ad01e3114b71cdc1bd31e2514cd1c811cdb1e5514be1c8e1cbe1e0414671c3e1c471e6813bb1b4f1ce81d46133b1b021c7e1d4112cb1af71a271deb11001af81a081dff10b819731aa91cde102f19051a591c9510d7189619091c2f103618d618ef1b1d0ff21799188a1b070f20170d18391bdb0edb16b517de1a9b0d2216dd17731aa20d4b150b17aa19310e17150d165419568fb0907a8f7a8fa099ef944494551d45a32da0c0a0182c33a4339f16a1462d3ba569a06fa2532d21a4a2a19ba3bf2d021e76a18ca1962d042f1da4b9a46b2d143460a41ba5502d4135fda4c3a69f2d91350fa5eda74c2db0352aa564a82f2d1336efa511a9042d49368da677a9d72c8a36f2a6f6a9a42cae3621a73aaa432cbf368fa64baa052c4c35a2a62caa502b5e2cc0a6e4aa282a95a6caa7ecab312934a668a6efaa6a28b2a5eea60eacd32713a523a748acf72564a420a76bab1225c0a4eea668a9722382a48ca54fa83c228fa29da485a659203da18ca47ca7aa1d7aa12ea405a83c1d3fa11da363a88b1df69d08a28aa810205f9c2ba057a82820469b01a02ba6f21f1e9a569e33a5f11f22981c9a58a3861ffe93180b7ba16d1f78857919389fe81f240e681b9e99ce1f130e441c718c062001106a1c3217f71fd310811c441930207811831cb01acd1f2c123b1c171bb81fb9112c1c9f1a351f6911b11b251ab01efd10a71a581a2e1e9c10381ae519bd1d3a10ce197619511d071018191819f51c8c0ec518b818981c260e1418c517001cb60dc6161217471b590c47167d160f1b0c0c7e153116bd1a1a0cf2143215681a260ae014f414701ae3094114b3141c1a9c0913145b15751ade0a2312d214441aec8dbb86460c94904299ea929c948e1d5aa3039eb29f862c6da4799fbda0202dd9a476a03fa23e2d48a715a3eba4972d4aa6eca298a5fa2d02249ba399a6b62d49319ca4f5a5462d1135baa30fa55e2d29366da5c3a7892d6d3675a5d5a8422dc6368ea514a9072de2368aa53ea9d02c3537e0a59aa9ab2c4e3798a5aaa92d2c763766a577a9812b6a35dda57baaad2bc024fda6faaa6f2a5ba700a8e1abee2939a80fa622aaf528a3a6fba504abc428cba5cba6c7aa5a2789a4e9a6cdab222663a30ba759aa922461a22aa55ba925231ca1d6a456a95e223b9f89a48aa9a221579feaa3efa77d2000a0c3a238a84820139e6aa1a9a7561f239b1aa0baa74220219b729fd4a6fc1fd898ac9c57a514200a983698b6a353205c96728b62a06220e5932016259c4e20b88e63197d991e202485b91ae7954820fa0aad1b878c1b20830dd51b3812841fcb0c1c1b8314fe1e3c0e131b5e17c01ebf0d931a3018481e7a0d311a9918301e140d5a195618d61dca0c091908186d1d730c52188b17141d300c14182517cf1c100cb517cb159c1cb00980167715191c10075b153314161c6a0270141b12a21b38023912d70f401bf181e510a10f0e1bf301b4112111c71a15826a10cd11f619da011210e80de018b781400cd30fe418f88f9a82cf889c8d45989594d8963d1fd5a28ca044a12b2ca8a503a1b8a2132d5fa66fa255a4312d35a7b5a25ea49f2d7da818a28da3b42dfda726a2cda4ac2dc828dea20ea6712de63353a442a75c2d233659a566a8b82dee367ca5eba85a2d5a37bda524a9002d8637eea5fda8ab2cdc37e0a53fa9502c1038bda5e7a8d32b1c38eaa44ea9a42be034dda479aade2b93989ca505aa5e2afea6f1a600aa852919a7d4a65caa132976a536a608abff28aba4b7a53aaa0528bea3aca538aa742660a38ea597aaec2402a2c1a55bab1424baa073a4c3a939235aa1aaa3c3a791218aa00da470a88721d79f6fa3c4a856219b9e49a25ba85821d49c15a109a83b21349d959ff7a53b21ae9baa9c9ba4e620b899bb9685a20821ea96210b3ea09420ac93f615609d9520be9078187b9a91208890c5198d959420fd8d681947925120b18ac219cb0b4320f203f3198214e41f780c201ad515b51f040caf19e416151fa40b50196416911e6808fb18ff157f1e48084018a915221e08081e1733148d1d8402b116b311461d5f028f156611ba1c2c0273140511651cfd810e145d0d601bc9811b129f0c5a1aa8817f10610c051a95814a10c50597198f815c10c70599199a81b40e87055b198a818f0e2d055719868799838b8bd1192991e789f290f290f4983a978f976e1fdea40ea1d4a1572c30a561a2fea34b2d53a659a26ba4242dbea6f2a2dda4732d60a884a3d4a4ca2df1a631a282a6d92d86a5dba35ea68d2dae2ea0a442a71b2dbf357da465a89e2d9e37c3a415a85e2df93727a500a9f42c03389ea5dba8792c33387aa500a9582c5d385aa5a6a8fb2b623849a52ba9fd2b3b331ea543aa9c2b1ca4d4a5d1a9282afba5e0a6a9aa602923a601a702ab132914a54ca6c5aa6f28b5a4bda507aa682737a5dba51daaed2667a4ada52eaacf25b2a273a555aaeb240ea259a534a91c23eaa12ba5f9a87522f7a04da489a83722f79fa7a229a86821349e58a21aa86c22af9b90a0a1a7ce22f19c57a036a68722639c5b9e06a55b227299cc981da282229396c011b59ed321b89419161f9c3b216a9375185099df20bb91b31999959e202a902e1a6092a6201090df19038c6420748d9c19980b6420308d4a19160b1920b88ccf18830a871f6a8cb217020af21ece8d20168e896c1e708dd314b08fed1dc88e7613438f991d688e7711d48e441dde8d670f5091a61ca08d3c0cf390551c638e36056b92031c058ed504ef916a1bd38d7b04e98f511b838d5004938f021b418d47044091901a0f8d1e84538c071be88adc83da90ae181f8c718e1d90d9184388100ad08869901f9a9b952a98ea1f50a4e0a1aca3112c59a4fda119a3012df7a4ffa1a0a3d62cc0a566a210a4142d5aa6e0a2c4a48c2dbda626a31ea57d2df0a8d1a414a69a2d4da54ba486a73a2d9331aea4b4a6a32c8f3786a58ca7f52c6538d9a5bfa8cb2c7638dba5e7a9fc2caa388ea5eea8482cbf3825a5c8a8b22bba3816a5eea8fa2b8e3098a6f7a8572a96a692a67fa9262ac0a672a6d7aa85292fa6e5a544ab18291ca513a6f6aaab28fba4d2a534aa0f2889a48aa5f1a9e5261aa334a5eaa9d82515a30ba531aa64252aa3eda4c7a83c24dea02da434a93e2464a020a419a89f2368a0e0a35ba89b23b69f0ca223a8a923b19e98a0ffa58522059f979d58a44322309cb19907a2a9218b9a03954aa10522de98bd11869f8d2191960619649c3c21ed93341b5c98d3200f92d41ada95d4205e903c1bc192a5203a90401a4c8cb420cf8f4a192f928220298fe518c49172205d8e8d164d94f51f468fcc148293f21e8a8ec512d2924f1eb18f78104d92d41d728f1f101894681d6e8f3306ed94101d2590be059a94bb1cd98f60853a95651c578f0485ee94d81b828eb3848f94411b018ec48a62932d1b2e8d848a0a93d81a0e8e6f8a27943a1a388e108a01919c1aa390778e5a94db19a48e3392e493eb19518c5e86498c1e8a7e997495b595091e62a27fa103a3eb2b74a439a2eaa3ac2c12a56fa213a4ac2cf4a56da215a41a2dd7a6b8a248a4452deca75da3fba4432d95a6e8a353a7952daea6dda574a6ec2c24a40fa6c9a68a2cc4346ea56ea9b82c3c3871a694a88a2cd838a5a5cfa8812cf438cba424a8bc2b3c39f9a430aa912c963888a5dea9042c90246fa6dda82b2ae3a5e6a6eba9642a12a68ba683a9aa296fa61ca6c4a909296aa602a6eca9762802a583a5efa9072817a450a50aaa2127d5a3f3a45fa900261ca37aa47aa9b22507a21ca490a9a62430a347a34aa90c24b1a027a2efa81424959fe1a105a863227e9dd7a025a8e823419e879fcaa54c22169ec89d62a4c8211f9dcd9ae8a2c921bd9b1792eda0a821bc98d0164f9d7c21be963119c2984521d695db1a8b966621cd94891a7a9324217193e41aac8cd220c192691a598c7c2010923a19ef8b17208a91cc18398be61f0d91a417a38aac1fa290f8158790fa1ecf91f312f792721e2a925907d495fe1dd191168dec97a31d3f9286913e983b1dc1918b927d98e31c00922f922698831ca6912093ad972d1c4691b6920197041ceb9055929a96921b9590eb921c96021baf9084926996941a46912793af96e4198a91ae93ee95c6195894fc90728dc3180000ac182c1a880f939d019b4d9c582898a39da2d6a4262c2ca4c2a1b4a3372c26a487a198a3772ceaa4dba10ba4ad2c7da51ea2e7a3f02c48a636a258a4062d18a77ca334a5292d94a5bda4eea5d92c01a6cca601a7c42cfb2829a560a87e2c4a371aa62da98f2c19390da600a9622c6f3973a5c7a8172cbd394fa4fda9912c2938cda57aa9802b2da57ca7c0abc52af4a574a654aa95290ba698a6ffa92129e4a5bfa600aabb2893a58ea6f3a98c283ba57ea6f6a92428d9a40ca6e8a95e27b4a33aa55aaadd2628a3b1a4dea9cc252ea2a5a378a88824b7a2f7a193a86324f8a05fa262a77f235f9e13a149a6cd223d9e88a0efa5a42244a013a022a61a23399eb69c6ba50323919cd998b4a17d22209a190c919d1f22c2966c19559ace21ef94701c0f9494210b94351d410d6b216092631d030d2b21eb91a01cb30c2321f992ec1b648ccd209293e2190d926a20f692ff1697943e2038930f148597bb1f1c946c0e3698161f3f94fa8d079a8f1ecf942f942b9a021e1e959195d89acd1d6e95c096d09a501d1195f196449ae31cae941a973b9a801ca5949c96c8992d1c3194c5966299c71b9c9361961399541bdc92f095c7988c1a6193c095e998441a1d932296b498ae19ea93d79558984f19a1922f96449888190000b313b416ad10d79f189e689f3a2801a480a31ea5cf2b28a4caa1caa35d2ce3a348a1bca26d2c42a45aa1d2a2692ccba40da118a3832c6da595a1daa3702c75a6aca398a56f2cfba5aca41fa87c2cd0a698a6f8a8602c0da69fa67aa8482c862c95a501a9c22b4238aea603aadb2c783905a624a9502cbc392da3bda8bc2b04364fa5cfa97f2bf5a47aa6d2a8f929aea696a63ba93b29c2a65ea6d8a90029ada563a6c9a9ac2848a522a688a97028cba4c1a540a90e282aa413a5e1a8f82615a34ea48da85b2686a2cba33ba8c42557a28ba303a87a25c3a118a239a70525d19f95a129a8fe2428a0f0a140a62024549f15a182a52123f89d24a0baa45e22b29c159c55a25522af99380c5b9ecc214d9a1d9226a09721629ae6119a9c7d215a960f1c1c944e214d8c331ee9131c218b85531e45162c219090651e4419d42007939f1d0e1ad12082922e1c4212d320e0915f1867988720ea921c12bb9a26206994b18ed19b9c1f1c965898599d311f2696cb98149d631e5596cf98549df01db4964999399d821dc1964c992f9deb1c55964699ca9c8b1cc095db98609c261cfe948298849bec1b5e947998ca9a281b749325983b9a3b1aaf928097b7990a1ad4925a978599d619729197968898c819ce9026947f95ee1900003816d2190d085ea21da345a4b62973a368a415a6f52b7aa29fa1bca3cd2bfca2fb9e00a1142c7fa36f9dfb9e522cb1a39d9d44a0632c66a4c7a167a45c2cb4a50aa5b7a7642c0da612a688a87e2cdea5f7a6bfa8772c0da5a1a675a81e2ccfa7e1a6f1a8112cf72daea689aa852c583742a509a8fe2b6a3899a52ea9232ca22c68a4b1a88a2a12a7ffa6ffaa132a62a55ba63eaa6229baa486a690a9a0289ea491a679a94a2873a48ca682a9e82755a44da6b8a91127c3a3c5a578a929265ba2c6a419a9aa2590a108a47ea84b2531a18aa210a7c0244da27ea186a571241fa03ea037a58524f39ec79ec6a55c2437a0c09fd9a571239fa0819e17a5db223ca00f9d48a4c721019e939991a211218b9b020cf9a09b208c997d1948978d20f495b31df3186b2028864820891efd20e80595201a2016216785c01fde1d1821ef84e11d2c1908216a8d221c388ce0204a91e6181f9ba1203694110f109c2b207e96da952f9ddf1f6e972099d19d3a1ffa970c9a529ea51e4c974d9a0b9ebf1d5597349acf9d451d0897fe99909dd21caa96db99189d301c4b96c5999e9c971bb6954799299c361b7695fd98769bc41a7d95ca981e9b201a60957798a29afd1980956398649ac4196c94c5979199911984944098049a0e180000ad16501a0e0c72a28ba486a5ab2933a395a48aa5f42acca272a2e3a4e42b0ba2d895b49d002c37a2b01eb71aa32b14a423106791842b9aa5c2a0c0a2502b7da55da4f5a5422b66a6c0a532a8952b65a7f6a6f9a8db2b3ea709a898a9002c15a710a83ba9cf2b97a916a79ba9b22bbf22e4a514ab3d2c422d7fa553a86d2b39a7cea6fda8cf29a1a535a60ca9eb2875a57aa6e4a8a3288ea5eea695a9542831a5b9a6b9a91628f7a496a6b6a96827baa44fa6d5a9e626c4a371a5eba93d26b7a295a422a99025cba183a305a8c62454a1e9a15aa6812420a178a04ea55d24d19f3b9f18a59824f19f479ecca45424ae9e8e9e29a53e243d9fe29f8ba55223ec9e7e9f60a5ab21d99dd29dc2a40a21039c029557a19b201c95c51ddd0dc31c3086ac20ea1eea1e6111b021d8202120ed122122c320c320af0f0922fb2053213c8f98209d1e8321a593d71b3a151921e094170f91980c203b968993fa9bc91f65974898f39d651f4298229b689f6b1e7c98729c1ba0851d40986f9c0ba0131d3a98219c9a9fc41cff97f19bf79e861c9697959b5b9e821c2097229b789d061c5b965f9ad59c7a1b8e950d9a7a9c331b7e95dc994b9ce71a0d955e99de9b431a11952d99699be619c794be98bf9ad8194894c898519a3219000012143f1ab90ea0a2f6a4b1a64b29c1a3caa64da8ea2a5ea2c0a216a4c02a97a1aa1c5e1ff42b92a15225ea26d22a9ca43e206122b929f3a437a179a4362ab8a59aa6eca8a22a14a613a89ba9b02a3ea61fa8f3a9052b67a605a8b9a9342b5ea79ca7ada9512bd5a6e2a648a9342bcda6a8a6d8a8c12a31a71ba6b9a89b294aa8b3a537a95929cba550a658a9d1286ca614a707aac728d2a47fa771aa512876a43ca723aa902794a4baa6dba97b2645a4efa6cda9f825a4a348a67fa9712595a22fa5afa82e2593a182a3e8a6b72435a0269f0ca44424299f599b68a08524999d2f945da044254c9df39d9ea69e251b9fa0a165a7e52459a0aba24fa62d240e9fbda1fca5c422b59dae9faea44120b19db99c36a2531d0c98261e128eef1c11125823de20101d5e17de249c24751f7519ea241a25d020c818282405248a21d7119a20da1f2f21b6954b18fc981f21499aa099aea0ec204c99669b98a0642032999e9c5ba0af1f0499819cb49f401ee898b89c789fa21dc7989b9c529f161d90987d9c1e9fc91c6498649cbc9e4e1c30982c9c669e171ce597fc9b209ed51b6d97959bd59d751bcf962a9b959d231b2196b69a489d681ae2951f9a229de419e295db99c79c58193595ab99039dee18c394a9996e9caf160000e415bc18b60ba0a285a550a76c2829a583a680a82929e3a3b5a660a8062a569fb41c2d1fc02ba4225d2dc42e262a86a45c24c22409283ba4bba5c8a7f2287fa549a8c0a9dd295fa549a8c3a9192a94a55aa8d8a92f2a87a557a8dca9712a6ba65ca826aae12a62a6c6a571a8042b3fa416a3b0a5022b1da42fa2f9a42e2ab8a69aa416a7cb2801a770a62ca927283da681a794a9a32744a5d5a742aaa726dba4e7a715aa232670a4a5a7dfa99e2518a43da7cfa94325d1a3e9a67fa9a82470a325a682a91323e5a2b8a533a9e921c8a0f6a16aa79e20039c332062104d22d8941c2419248325509eac9d8da2702603a1e5a403a8d02497a193a434a76e2342a102a491a67621eba037a276a5dd1fd59e8d9e2da3f01b3d9cfa0bef9ed60d17154d2451223a15451d2027f027711a2e1e0328bc28b4215e1a892539268d23b29a2c20381e5e23e49a25980f9eed21df99d79ceda04c20da99a09d5ea1361f5d9a6b9e92a14c1e559a8b9ebda1211e869a4c9e9da1d61df299db9df6a0281d7699789d5ca0891c0399499dda9ff51b92980a9d6d9f871b2f989a9cbe9e071b4497e59b329e751a7b96269bbe9dd3191896d39a629da019d295709a1c9d80193896879ae19c4119c495169ab39cd2195994ef98089c1b182511121deb1d80168f9fbda15ba31b21d7a3a3a6d5a7d52751a2b9a567a83728b7a41caab4ab212a7316f52af02b372956a675aae9abc42b91a41da860aa87296fa408a8daa95329bda437a8c1a93c2901a539a8dea999296da52ca8d0a9882960a6a5a86faab92938a52fa809aa252ad4a33ca141a4f82a6ea29123c8203d29d1a664a0aba60c2622a536a725a9d226afa443a80faad226b8a421a878aad12691a408a80aaa8c2693a407a82eaa682682a4c8a7c2a9262630a487a779a9ef257ea32fa794a95f256da23da77aa91a25d1a107a7bda9892461a07da5c5a8d3241c9b1d9e23a32e24a29cada481a8c720c7a0e2a448a88b20b1a115a564a80021aca070a451a89d20ad9f1ea4e8a61b205f9ed4a15ea52f1d339e7ba0eda3d6187094d620a520179c0421ed29402b2b9dca22952b8a2c6423181a8e253826d024aa971d91c19f4a23229bc59e14a33921509c0e9f8ca1ae1f6f9cee9e6ca1e01e139cd29e3fa1211e399b6b9ee4a0311dc59a649ecea0c01c6f9a299ed6a0ab1c319af89dbaa0571cda99ac9d97a0fe1b6e99679d53a0871b4099d29ca49fd01ae2986a9c2f9f901aa898279cd49e651a4398049c6d9ed7199397649bf29d3b19f796279b6c9d3319a2968c9a679d4b188795779a789df5140000bb1224139a80709dad9f54a0771fb0a289a62ca898261ea3bca641a897262b9c349e21a0852114891b9483975a22c1a4e5a6e2a80a288ba540a8dea9ed28dba525a8cba9dc28eea53fa8b6a9dd28eba55ca8eca9f928f3a56fa817aadd28e4a584a81faac828b2a58ca87baa6e28faa46da87baa062763a5b3a8f0aaa726a0a5daa838abf12610a58ca8e0aad426dda46ba879aab426ffa46ca85caa3a26afa413a8f2a9bb253fa4e9a7c2a9a22528a494a7a2a94525eca356a797a9e824bba321a77aa9b824a3a3c3a645a99b24dfa2fea5b7a81f24fda04ba487a60d22349e8ca193a47b1f519ebfa16da5a31db99f59a3f9a6801d53a0cda322a71a1e47a0bda341a71f1e2da0d5a32ba7ec1efe9feba3aea69b1f379f1ba3a7a6a21d1e99eaa1dba590116920c929db2af8a42d28aa2fea301d28379aec9f44a4fc22839b69a0cba30820789d46a14ba4091fc19cb5a071a3d01d2c9c66a0f7a2711d249c2ea09aa2e71ca29bba9f21a2a41c5e9b4e9fcfa1421cf69acd9e68a10a1c659a599e0da1b51bbd99e09d9da0cc1a2e99739d37a0581a8a98049dcc9f001a3198ba9c4c9fbe19cf977e9cd09ecb196d975f9c729e9c191897259c189eba19f796029cd39de6191d96649bd49d761897958299189c281800005018cd1bdc0d48a1e8a478a6f5259ea1c6a541a7b52677a1b7a4f5a53d25129fea9f22a10a21fea127a320a5092512a417a721a9152868a40da89ba95528cea411a89da9672820a518a8a1a97f2851a52ba8b1a98c2856a538a8c9a9792829a530a8b8a95728f3a543a8a3a9f727cba4e5a51ba86a25509f18a236a4ff21b2a2b2a5c3a7b4246ea4d7a775a9a5255da4d3a790a95f2583a4c4a7b3a96e259da494a7d0a92825c4a476a7daa90925c1a450a7f5a9c0248ba416a7cfa9b12463a4daa699a96e24e5a36ca667a93124a4a2c3a5e5a887234aa1dda45da8e72286a01ba4c4a7de2111a036a39ca6cd2013a008a319a63020d29f1aa327a6d71f599f69a391a65e1f1f9f7ba3d9a6b51ea29f96a3e2a65b1edf9eefa275a6221e2da04da3aca6fe1d9e989c9c8b9fa119750d8f128b15ac81bc9bac9e08a111119f9dbca13ea4281d249d36a101a4181dd19cb8a041a3ad1c389c29a0c4a2351cd99bbe9f35a2fc1b609b549fc3a1451bb29ae29e64a10e1b399a9f9e11a1e31abf99579ecfa0aa1a3799ff9d87a0671af798a19d39a0181aa898389db09faa197798c29cfb9e41193f98519c4c9e3c193598349ce49dbe183a98f39b959d99185698d59b379d66185497659b509dbf178196849ac89c25170000c819561c5f85d3a02ca5aca62525a3a128a581a6d22593a06da3d7a477243a9f72a247a4c123ada079a40da650253ca37ea65ca869272ba459a7f5a8e32744a47ea727a9c82743a496a756a9a4277aa4d6a798a9bf27dfa414a8caa9e827c7a4e5a7c2a9cf2706a418a76ca91b27a0a2efa528a88f2511a289a59aa7202554a368a664a88025c8a3fba6cea8722537a43ea7f1a82f25f2a322a726a9f924d9a30ea723a9d22498a3c8a610a99d2455a3a1a6fba86824eca256a6d1a8302479a220a6b5a8eb2317a2e7a59fa88623a8a191a55fa8f92253a135a526a8b522e5a0e5a4b6a7312256a082a423a79a2114a038a492a60a217b9ffaa339a6c620059f68a301a63e20989e0ea3cea5db1f609ed0a2aba5551f159e7da2baa54b1f0b9e34a27aa5c01e7a9da2a127a4e81df198b89dca9f4a1cc195629c439fb919fc99ee9ed2a2a515049cb79f24a4dc152b9b03a000a3fe18bd9b2aa0f0a2e21a8a9b15a009a3501b9f9b899f31a2de1ab19be09ea7a17d1a4a9b919e5ea1fe19269b4a9e21a1d5196a9afa9d0ca15f19d599b19dd5a0e1183399699da1a0c3189598159d3ba086180f98a49cc29f3b188a97509c279ff7172097049ca69e8f173597f09b329e3217b096a69b4a9e4d174a96429bc69d0518c51d301c271de5133528e2a452a506292e286daf74b0352ddc2bc8b064b1f52ecf2c95b028b15d2fe92d25af8ab030300e30d5aa7cab0530d6313ea0569e822eb1323224e225d52d53330b2707291a2e72332228e429bd2d59332627dc28012deb325712e699392d1a3258ac85aefb2b04335a25bd24352a553364252d28dc28913267922e9ae4243c2fcab0acb17d24242c9fb0e6b09b2b322bd62014295e2974255c248f2c472401207322652c5799591ebc22042d03a4591e0422462d56a5811c9b21b12d81a3201baa213e2eb1a149a046aaa597a597bfa967b275b3dba26ea90eb2d5b274ac6ca23fab5eaa83ad41a107ac94aceda7111bfd222b24a919431ba1214924061b0a1c34224824a21c161c46224224e51c651b09221924d71dca1bd121ed23031e261b622183230c1e0a1b2f212b23191e501aba20ba22b91dc9198f202e22ab1d53193b20c9214f1de31801205f212f1daa186c1ffd20ee1c9b18121fb320a51c63188d1e7320491c2a18381e55202c1cc717da1d1d20101c89178e1dd91fbf1bf616551d951f4a1bd016051d1d1fd61a1c16b61ce41dd019d315481c561d8d1972151c1c671de8197f151b1c481def198215121c421de8194a15a91b161db6191515351be21c3819f814b81a4a1c1919830a819f8ba09c92df20e6a7e4a894299b252bab89acd52b9d2bd0abb3ac362c512e1daceeac8c2c2f30deabddac202d0531aeaa35ac482ef131d9a828aa252f1132c8a4d5a5f82ea932b79d47a0442eac32ff901012bb2dbf3239a067a15a2df13268a97dabd92ceb3274acb0adc2294b332ea824a9621f903318a5bba6fb990433f1aa9fac1ba08a31b0ae4fb082234a2e02aeb8af652ab42706a93baa9d2b2b1475a02b9d962a8c96b4955a249b200794669a2127dd223b95509d70282f26599788a13228802500a09aa8a320492320a4dbac2dab341667a626afa8af6da1bda58daeb8af12aa69a414ad77ae20aa46a12aaa22ac47a93f922ca006a3fba14f19f61c0b1d659b9a193a20b120a99a141b3d210023db12631b6b2102236919081cba218823a41bca1aa0218123bb1c461a1221da22121d7419ae202922921d6e195b20cf216b1d30191a204521331d0419861fd420471de7181d1fa0200e1da818b81e5b20c31c5518561e2220841c0118e61da91f4e1c1717741d5f1f241cc516411dde1e8b1b2f16f81c9d1e441b2816d61c391e081baa15791cee1db41a5715361c911d9e1aa9148d1b1b1d121a94143d1ba71c6a199b141b1b801c3d19ba14aa1a561c0d1960144a1a0d1c8018951168175e189a188d9e16a433a48915cd98b0a4cfa5002aff1f13a6eea7162cd028e8a639a8442c5b2de7a667a8a32c0f30ffa501a8202de23085a5f2a6b42daf3133a583a65a2ef8315ba4eea5302ecf319ea4caa5462e1c32a8a488a5242e7c322da64ea8e02d033375a8f0a9272d783301a9b4aaf82b963348a9d8aad029f833d1a8b1aa2b28783397aaa5acdb252a32e7ab2bad1027a62e03ac49ad4e2879239fa9feabdd27a6a340a838aa262793a197a60ba9fb2615a1e4a59ba4b02594a00fa52ea05f211ba046a66ea0981b46a110a992a53e95f1a20dab7caa6ea036a438ace1acd39d63a31eac69ad07a219a2f4aad8ac3ba412a0eea827abfaa5169c80a58da853a13f93a39e6da30d9c5f166f1c3a17c88d1719c01f401f6a18d3198520fd20021b7c1afd20c1212a1c9a1a4c217122eb1c311a0c216622fd1c7e199f20e021331d0e1955206221f41cee181c203321f51ce818cd1f0221ef1cc9187c1fc520fc1ca3180e1f6f20e61c3f18591e3720a81c3218101ef91f671cc617981d681f371c4717201de01ed41b8e16e51c7d1e631bd415871ccf1dd31a5415321c671db01ac414ab1be21c3f1a67140f1ba21cec194c147b1a251c61194514051ada1bff18ef13ac19341bc21834130a19e71abd18db138619601b3e17569c409cdd9dfc9263a190a081a3bd2aec9806a202a4452c622358a354a5072df32a64a4aea5082df12e97a40ca5442de83030a402a5b42dbd31f2a32ca5fd2d5c32eba355a5132e60327da3eca5132e773285a45ca50f2e6f3388a624a9e22de43326a8b1a9832d133468a84daac22c303495a8a8aa292b463425a908acfd2808349fa965ac7528bb32aca966acf9285f2e60a933ac3c29181763a82aab1c28d1a597a873ab84283ea4bda7c8ab142820a3c2a7b1a9d225f0a1eea6aaa8ee22f3a14fa810a9ed207da25da92eaa062010a3e4a978ab5894dda111aa7aacaba01fa19ba9e4abc89f9fa0eea87daba89e199f52a7e0a9cb9d0c9b04a3b7a6009ca792bb9bc5a1628f0d110f154f9c7b19b515ba1b03145a1b7317661d991b621cae18581f0d1ff61c47193e20c2209c1d1e1945201821a81dca18372035211b1dad181020e520fd1c7918c81fb820521d8018901f9d20571d4918191f4d20fb1cef17a81e1820db1c3817f21dac1f8d1c7d16931d011f4d1c4316261db21e1c1cbc15c01c521e1a1c5b157f1ccd1d621b1a154b1c781df61ac214ef1b171dd91a7f149f1bc81c6e1a2f14ff1a751c531a1b14951a291c1f1a0414611a071c291a8d13f019b81be71944121e19841a5c198212ac18b5199818f69d5d9dbd9db88e80a194a20fa4b428d5a258a0e6a1752c40a1bca0a8a2082d4a24caa278a4562dfb2cf9a13ea3792da130cda1aba3e32db631eba1f5a31c2e8a326da124a4432ef8328da367a65a2e7d336ea40aa7222ed433f0a592a8a12d1634e6a7e9a90b2d57344da881aa8d2c793491a842ab1b2c8f34b0a873ab732b6c34cda8d4aba02a0e33e4a8eeabfa29f32ddaa8faab3429c19d92a705ab912880a64ea851ab2a2875a5b5a898acbe26c4a4b4a887ac722333a390a88fab4821afa2b1a863ab031f7ca2d4a851ab2a1ac8a2fba8dfaa7413c4a3d0a87cabc09239a161a876abe898e19f45a755aa6c9eb19d18a53ea9ce9dbb9aeea14da7029cd098479e0ba53d9bf091fc995fa3268f0a119916a39d83175e15111df613fa1cdb161a1ee11bc21d0d188d1e311e311e8e17cb1e211e381d68176b1ea41e081d72178a1efd1e191d5517681e4c1f2a1d2d17521e331fdb1cc516ec1d131fdf1cdb16cc1dd21eca1c69163b1d621e7b1c2016e91c2f1e2a1cef15a31cbc1d191c6d15521c481d8b1be214091cf51c151b6d14951bbb1cc11af813ee1a7d1c691a0314c61a361ca11adf124c1a121c681aca12cd19521bb2199f126a19fe1a7019ba124219b81aee18c311d618521a8f18061237189d19ca18f69c469d779ec60c7da2049c77a031290da5549ce69f472d65a512a01aa0672d6ea311a135a2982d4e28ada2aca2ed2dd22ff7a36da30e2e0e32bca235a4432ee132a3a280a5362e4e3363a4f3a6012e1e34a6a4bca7022e7434bfa5bea8032eb2345ca7e2a9b62dca3408a863aa0d2dee3423a89baa592c00355da816abc82bf0346fa8acab332b7f3393a810ac7b2a672cc1a824ac462924a599a8cbab78288ea613a8d4aac6279aa544a85cacf525c9a559a8a8acd12372a428a819acee2281a2f7a742ab052077a17ca77aaa451937a1dda782aa1f19c4a077a799aaba1816a044a76faa5918c69f11a675a99817aa9ebca4b2a8c819089c97a2b1a74d1be598da9fe5a4d51b5494d69bdba24f1ca78cdb0b359fb11d0e06ed18d7982f1db110541b2a93131df914251de217591d89161c1e861c1e1e9c16591ed11dd11d8716891e431edb1d4e16251ebc1ef71d6d16251ecb1e0f1e2d16ce1db01ea91dd715921d7c1e891d6115371d671e361d4315c81cf91ddc1c2515981caa1d9c1ce1145b1c5a1d5b1c8e141c1c051d161c57146c1bb11ca41b1514021b621c221b5413841a071c8e1ad612111aa01b901a1f128519e51ae31976114219a11aa9190d1224196e1a2d19d1105c189b199b1976100d17631899198d997795e8988a92a4a1949b539d7b284da4df9d46a0182dd9a595a18da2932db6a504a1b2a3112e0d1119a34ea5f32d912cc9a3f8a4df2d7931aba2d8a2fd2dbe3334a395a4e92d68340ea431a6dd2dbd341ca5aba7da2dec34d4a57ca8ca2d3535fea652a97c2d60355aa702aa142d79359ca783aab12c943517a8bfaa252c5635aea7deaa4e2bea3365a76aaa342ae62b65a7c8aa88290ba784a880abd42890a733a84eab3828daa512a859acc0261ba576a863acc02481a437a803ace8222ba41ea8f4ab8b2058a268a76eabf31e63a154a7e2aa271b30a10da74eab3a187da07aa621ab3a18499f40a5a4aa0918f39d63a4e4a8ab19ea9c3ea300a8b91cbd9b51a166a61f1d4999989ee5a43f1e5495929967a2991e0d06bd16ad9cd51e8b103c1bee0c791e7613aa1cde19221ea0145f1d2d1c251e4915841d6c1cd11d7315c21d1d1d001e2b15c61da01da01d4315641d7d1d7d1da614ef1c541dfc1c52149f1c3c1deb1c0314561cdc1c911ca613ce1b921c4b1c72136a1b121c561ca012081b131c131c5e125c1aa71ba71b0b120e1ad11a421baf116d19751adf1a3e110d19ff19621ac7107a18a919061a1510ed17bb186e190910b3174b18531925100317be17e2186a0df514dd160c1abe0d3a149915911818966e9a6d9bd30d8ca0e79dfa9f6a2845a5249d6fa06e2d8ba579a05ea17c2dc4a4caa158a4372ee9a483a27ea3be2d92215da312a4a82d792f51a3a9a4d32d693363a40ba5ef2da03447a4f5a6362ef534b9a403a8d32d3535b2a590a8bb2d9e356aa659a9822ddc350fa7c3a9302d11367ba71caae02c1a3668a794aa792cff3554a7c2aa442c12348ba6daa9492b502818a602aa312ab8a74ca890aaa32964a796a86cabcb28aaa537a808acf827c4a4afa7ebab1026c5a481a7e2abc02429a4a6a736ac0823cfa206a7a8ab9420d4a2cfa6ffaa9a1f2ba26da696aa271f07a122a6e7a9931edb9f05a5aca9781f0a9efda320a93620c69c2fa23fa7211f539b68a0f8a5f51ffc986c9d28a55b203298f09813a31320a294c911d69e8e1f558cbe185998861e620ea71bcf8ce91e3f12921cb2158d1eae12d41c9019521e1d13bd1ca21af81d9213c41cd11bf71d2c14d61c7c1c0b1eda13891c891ca01d16147d1c941c981d8013ec1b4b1c401d4c13721b041ce91c5212091b921be81cf411321afc1a871caa118a19781a311ced1047190b1ad51b961095189e19481b3c103f18dc18321b180f73179418c71a210f1c1769182c1a010ee016a717d219980d1816bd176a19a30db4157617a018260ef8148616ae18eb965c980a9b6c94aaa0369dae9f12283aa42ea0b9a1f02ce1a4a9a082a2762d73a6caa116a2a52d46a5f1a123a3d22d3ea30ca208a2132e3d2aaaa380a62d2e99312fa588a6512dfa3467a5d1a6fd2da43590a506a8be2dc435d5a5caa86d2d3b36e5a509a92f2d7a3669a664a9f32cb13647a7fda9d22cf3365ea770aa8c2ca136f2a671aa472c9e33e1a616aad62ae123d6a686aaa129f7a779a885abfc28eaa629a754ab5c28b9a58ea7d7abbf27e3a4a6a726ac4c26cda43ea7c8ab4f254aa54fa7ebab5a24dca4ffa644ac8d22d6a3f0a613ac5f2056a2a6a611ac3a1f28a12fa66cabbf1d55a0d0a40caa1f1da39d07a3c7a8cf1e869c60a1f7a6d91ed09b7ba0f7a5821e1f9a4e9efaa4a21e1b98329a1ba3321e11945d0b46a12f1e228cb3189b9e9b1e9d0b811b52987b1e670b4f1c8812ce1ecd0d6c1c9718e31ef210841c301ae71e9b118b1c901be51e46128e1cee1b781ec511351c641b6b1e7211dd1be21afa1d0011401b131b8f1d9d10531af119d91c4110e41981197d1c10102b1920192e1caf0ed618c418c61b410e1c1866182c1bbb0cdf162e178c1a750c5816a916131a390c9c155d162d1aa10a01154e15d6194a0ae8140815df1955084214c4148f19af092a146f159819c00a0a11ba114019c495098ece067798b9a0b59c379d2a2882a4fa9e989f132df3a47aa076a1232d80a54da175a3e12dbda7aaa3c4a3f42d7aa772a3eea3fe2d5ca5d0a3cba3b82df62d70a43ba66e2d56340ea416a63c2e243633a544a7472e87369fa5e9a8a92de836d8a535a9412d37370da65fa9082d66377da6b4a9c02cc23703a68ca92f2c5e3770a64fa9d12b74321aa894aa8f2b78a2c7a71eab382a7aa743a81cacd22917a866a7e1aa182948a79fa74eab7d28bda56ca757ab6d27b2a40ba7edabbe26e5a304a704ac3c250ea30ca6c6abdc234ba20ca603ac192384a1d9a597ab342215a11aa5c8a94b21a0a027a3efa87920249ee9a100a82f20a49c10a168a70e1f3d9b869fa8a6ac1f3599ce9cd9a4ba1eb6986c99ffa22f1fdc96b58b799f791f28942a16169b681fff8e71195898221f2a85cc1a2693d91eb104c91b8d0c8a1ea10aee1b4712041ed50cdd1b6316b41d430e281b8118871dc20d9d1af318851d6f0d3a1a9218191d1c0d6519fd18281dc60c0a190418c91c7e0cc6189217831c420c221833174a1c2e0cdf17f116be1bc6099e168315441b510774152f14be1a7602d6134f10ad1a12025912f70f2c1ad901f910830fd319de01bf11fd108619dd016f1079104519ad015e0ee50d91189b01f60da90d1b18e1998c951f94f495ad9fec9dc39d772847a46ba13ea2c82c51a679a2cca36b2deba68ea3bda4d72d80a795a3e7a4e02d6ca882a271a4432e07a8c9a4aea5462e8b1ad3a476a6e52d3331fca49ba7b52dc935f5a57da8f02d113776a6bfa8792d833778a627a91b2dc73762a65ba9ef2c0338a2a6a1a9a12c52385ca6a2a94c2c1438a0a5d2a8bb2b53310ea7f1aabf2bc3a4e0a7f3aa122a6ba753a812ab8a29f1a6cfa7d6aafa28dea53aa7e6aaaf28cca46ba69caaac2735a42ca61eabdd26e2a30ca640ab80259ba281a5a5ab182583a115a5a8aad523b3a1b0a46ba9dc225da144a488a9012335a102a404a9832203a0baa255a8c621f49d50a1cba78421a59d3ea021a68420689b3b9da0a45120c1995a98a8a2602009973e8bbe9fbe1fae944a14c69c521f429285186c99881f0b922119a5959e1f5d909419478cc11ffe8af419fe113e1f1804291a9914201f8c09541a9b17f81e180cda194518681ec90b6d19e917ef1d790811196717e31d56085318f8168b1d1e0811186715411d9e02d716ee13ac1c7602ac157913671c36028914f810191cfe8121146910d71ac6812e12920fde19ab818111200f8619968144102e0c0d1988815d10330c1319a681e00e390c1a197381ee0c9085b11819889683fb847219ca9c72941298079931a16ca02a9f62286ea539a286a2002da2a581a35da4b22d75a7fea338a5d92ddaa748a49da5d32d44a88da483a6072e0ca719a4dda5e82d95a70fa5a4a5c72d8529e8a5cda89a2daf34b9a501aa902db137b3a571a8942d1f380fa61aa9582d1f3884a66da9ec2c5c3838a696a9c82cc338c7a580a9a62c3b3893a512a9f12b512f9ba6b8a9992adda403a8dfa9b42903a730a8dcaa8229fea5e8a730abe0283ea52fa71dab5628eba496a6a2aa5627f4a443a65eaa9926a5a3b9a592aab92508a27da5aeaa4f253ba150a511aa3d2461a105a511aa3d2438a1bfa4d7a9c923c7a0bda34fa81122489f6ba2eea71922419de6a00da7c821cf9de2a051a68a21e49c809f07a58a21a799ed9985a255219496c60bbc9ec920ae953016329c5b209f948f1867990e204593c9199e9512207c913d1a468cbf1f1b90ee19060ccc1f7a8db019b1115a1f3d8d5e194f114d1fb78ce018db10ad1e488ee0177d102c1ed48d43168a09b61d848deb1424894e1dd68e9513d988001d7f8e9111d88eb51cf18d8a0f628e201ca58d4a0cfb90b81b7b8ede0ba0902b1b178e3f0b4e90ad1a008e860402909d1aae8d5804988fe2195f8d5104778fc919198c18044a8ce619538bda8945929e162f88af038e8be118298f1f84fd8c3c96689d029bf79c04289fa425a2ada3cc2ca2a43fa2e3a3132d46a504a379a45c2d21a6e1a25aa4702dc2a6d4a30ca5e02d5fa7e6a3b8a5c32dd7a8d1a41ba5ad2dcaa758a516a7672dfb2ddaa5b0a8fd2cf23617a691a8652d8e3885a630a9722d9838c6a58ba9022dc53846a618a96c2c3d39b2a494a81a2c6938dba4caa8dc2be82aa6a687a9b82a96a6b5a620aaf529cea675a7b0aa7929d2a6d9a627abf728bda5e1a6e9aa94281fa5a8a6a2aa1328a2a42da66eaacf2668a3c6a5eca9912570a264a585a94e259aa1e8a45fa9ba24c9a018a43da993240fa10fa498a8b92344a020a336a88423cc9f2ba2cca76a23cd9f1ea176a6d0229d9ee69ea6a445222b9cd59a3ba21921919a1e9756a1f820fa98d90b38a09620839735183c9d5d200794601b7a9851202c92c51b1393f51f8c906a1b858c18205f905e1a4c0cc91f0c90141a140ce61f698ff9189c8bd91f9d8ee017e48aad1ed48dec158790da1dc88e66141c90a61d978e61125292371ddd8f3c10e691de1cb08fbb0cbc938f1c4490d905aa94041c07907a855d94841b598f11851895b81a858eca84d894621a168d9f840194731af48c79848993121afa8d4d84d7928319ee8d0884f3902019cb8c9b895c948718438c948fb1942919769484942f95c98ccd9fce9c259f4b28aca306a28fa3dd2ce1a4aaa22ba4ec2c9fa5fba26ea43b2d4ea6c7a24ba45d2d1ba795a3cda4812d2da861a485a5642d7ba750a477a7b12d65a75ba525a7462d3ea619a751a8282dd13130a503a9e22c1238a9a61ca9a62cf738d1a596a8d02c013913a539a8442ccd390aa5d0a8502c233815a53ea9bb2b84162da7bea9332a66a621a837aae829f6a6e4a78caabd29f7a6e8a64eaa1629b9a6cfa649aa782884a57aa643aaff279fa415a622aa3e27f2a3a8a5aca90626d6a2c8a476a988259ea11ca48aa92b254da195a3efa89624e1a074a240a82e244da06ca127a70823c49f54a0eba50822889e3f9ff9a47b21399e689e7ba46121859d869c83a33321209c2f97b1a1f520ae99eb11509dc820b1974119c7989b20f195001adf936e20f294a11a078d3e2099940d1bc08c02201d93931a6c8c761f57925319088c4e1fc891e618568b1b1f3f91cd17b88a831edc901b16238a541e059217133a90d01d65929e0d9494661dee91e586bf960f1d639205906f97b81cec9133918b98241c23923c922e98a01bb5912793b6977c1b4e91bb9205973a1beb904d929096c11aa890f2922496531ad0908e917896f5199e91339325965619f991e293b696f41813949d911d94361535021f1aa41c9b85afa0cb9edc9fc32a40a32ba29ea4942c45a45aa24ea4a42c87a484a27ca4d52c2fa555a26ba41d2ddda58da2a0a45a2dafa623a3f9a45c2d3aa7b7a420a6622d3fa618a5f3a6212daaa6ffa506a8252d542077a49ea81d2db93528a518aac32cd7385ea6e5a8702c623902a6d7a8602c0c3a3aa5eda9542c5337caa58aa9fc2a2ea51ea75faa362a09a695a785aa3b2990a692a713aa0d292ba635a70caaa02892a5c8a6fca94c2849a597a604aac827d1a46ca6d1a9262741a4c6a513aa6f26aaa335a5eda9db2542a273a4c2a8b12440a241a322a8522493a044a23ba70b242ca097a18da66323fe9f12a154a622237c9f91a0d7a56422899e159f11a5ff21f59c299ca3a2d5212a9b5592349f802138980c17849a40210595211c009713211594611d5e0ddd206592191d9a1398200a92c81ceb154a20c491111ca112012095920f1a110ce11f21933c189391331f30934b15e395f01e4b936f11f1965d1e3e940f886499ee1d6e949f924a9a771d1e95ac956e9a0d1d769515960c9ba71c1e951297779a441cca943c97649ad01bb094ba96e999a91be69336966e990a1b249355960b99891ae792f495c298d1196193cb959a98a01976932d9672981b19f59370960b984e1a7c9136951c97ca1800003d16a81a881569a3c29f77a0752b33a463a3aba47e2cfda417a2fea3a02c72a495a10ba3a22c9fa4b0a140a3c52c00a5dca182a3f02c76a5e7a274a4e92c8ba636a419a6d22caca684a5b0a7c92cb7a6cda65ca8a62c0ea609a881a8b72cef2927a85ea91f2cdc37a4a662aa842c6e3978a66fa9642c3b3aeda47fa93b2c2736c2a7ada9532b6da620a837aa8a2a80a72ea7c2aa7429e4a6f2a73faafc28f3a57ca72faaa828dfa533a7c0a9432824a5d3a6aea99f276aa45da67ea9da26c6a39fa548a93d2606a300a5e1a8f5259ca231a451a88a250da2d1a2afa6bd24a1a079a1caa59b24d39fd7a068a50724df9eb3a0a4a5dc22109e2fa06da598224a9d029e77a40622869be9983ea1a121ed9a50973da0f920759b048c1a9ed82009984f1aef965620648fe01d540d7f203a8cff1d77184e20be90241e901a53204493b91d3b1b0920ab92fb1cc1181820e290d319f791b51f0b933c12ed99101fed938e88319a661ed795b6963d9c141ea596d898ba9c611d7996e198f89c451dc2965299e29c9b1cbe965a99e39c5b1c3f96fc98cd9ca21b1f958c982e9c741b95947a98869bb61a33942e98c39a661a61932a98379ae1190e938697ac99ac19d892d5977099211986910f97ce981d194791a6942896211900000a19e41bf1144aa3e7a299a48f2a38a354a439a50d2cc9a2a7a114a46b2c72a3709f7ca17a2ce0a3d99e61a0ac2c26a404a029a1b02cb5a47ba23ba5af2c94a564a515a8b42cd9a58ba681a8b52c4ba6f7a624a9b12c5da511a7e9a8782c90a653a65ba9602c87304ca7bfa8dc2b9738b1a4b5a9222c273ae7a541aae32bc031b5a895aa212a5ba675a8fcaae3293da62ea809ab5f2955a5aaa743aa9c28fba4e2a714aa3528c7a46ca7eca96b277aa423a7f4a9c9261ea499a6b1a9e12511a395a54ca95c251da29fa4a3a81225a1a173a38fa7ae24ada190a25aa6462479a02ca09ba52c2463a026a02aa6fa2341a08a9ec1a54823909f4a9ebea58722fe9e549d17a59c21c49d7d9ccca360205c9c309757a1bc1fcb9a15151799a21f2398831b4014711fa08faa1f2e1df21fd805a0209b1f222071052c20941e3b200985701e981b3c20a88aa61c6f122720749108196299092049941312909aa81f409686931b9cd81e82972c98a29d5c1e6798989a899e871d5697679af89d0d1d4397499aba9d9c1cfa96179a7c9d351c6396eb992e9d9a1b0d968099a29ccc1a84954999ef9b171a4795f698729bb71946958d98ce9a7a195e957d98a59a59197e955a98559ac9181794aa977199da18fe948d979e99c11500002e1bc91c7114f7a13fa497a5f22905a430a42ca5d72a2aa374a129a4d22bf3a12190b59c132ceaa39c1b40181e2cfca4999b4c9e282c4da5eda362a50a2c5fa5e4a536a7072c2ca682a660a81e2c2ba6faa6dda82c2cb0a75ea89ea93b2ce2a859a8a2a9532c83ab27a74ca8812b782ff9a519a8bc2aab33ada50da9882b45a490a58aa9ff29d4a448a74ea9932802a5a8a633a9732852a545a7a9a92b2819a581a7dea98927eca474a707aa1627a4a427a722aa51262da490a61caa8e2567a3efa585a9f924cca2bfa493a80e24c6a129a363a7bd2315a1fda0c2a62023859fa99e01a6eb23ff9db69de1a42a244a9e989e9da41523849e359fffa47822909fed9fdba45021529eca9ea0a42c20e09c7a9b0fa32a20ae988219819af31b8f912920681d211ed20f7421d320811f3f14252273210b205c118f22a5219e20c49221219e20ef202093c01d191c82205f93cb162d911f1fe29574915e9bc91e8797af97a79d041e9f983e9a159f6f1da798109cac9ff71c7f98879cea9f951c7498399c5e9f441c2498099cc79e111cad979d9b579e9b1b2f970d9b5e9d161b5a965e9a9a9c511a9b950b9a789c221a7195d099179cd819f9944a99ce9b9319c6941699539b3b19c494e798b59a1c1a2c94b198879a23190000e1194e1cc016a9a243a519a85a2917a4aba621a8ec2a06a389a2c4a3e52a6da14d21dc22222bb6a29e2455263d2a4ca4b7162c9d012a30a50aa59ca62d2bfca6dea7a9a9472b89a678a87daaa12bfca662a839aaf02be0a62ba8efa9ef2b89a712a879a9e42b16a78aa6cfa8642bc3a653a6bca8922ab1a65ca6aca9f4296ea7cca628aa93296ba5cfa72aab2d29e9a58fa8e0aa6f2877a557a893aad82750a552a8b7aa84271fa5f6a73aaa8326eaa485a7c4a9b6255aa455a7cba93525cca3d7a6a2a9bd2446a3eba512a9602404a206a497a77b233ea0a9a029a4f822329d3a94d4a031249f9c548d93a1ba248b9e759fd8a43a2469a0f1a28ba68e239f9fc7a21ca74d22cc9d89a0cea55520e79fe29f94a3661e319c3d15229ce21c64906b21951e081d5e107724cb24df1dc918ba2486255d1f5019712480243a2003172f226b216f20a191a61c05187420e29ad094a19c0520bf99079a719eb01f7399099cd09fc51e2999949cdb9f7c1d0a99c69c859fe11cd798a79c529f971cac98889c319f5d1c7898729cd09ed11b32983e9c849e7a1bd9970a9c3d9e281b0997b19bfc9dde1abf96359b6c9d6e1a2496b69a449db219de95119afc9c3d19e595f799cd9c0c19409556991f9d1018ed94a299979c83140000c11acb1cba165ba3d4a507a88928e4a476a7d4a816298ba3d7a642a8202aa59692275729da2bc320932cf92df72890a61d9fde9c6f28f6a493a707a9832967a575a8fea9c42970a5c7a827aa272aada5a5a828aa9d2ac1a587a830aac92ae4a53da8e3a9ec2a2da55aa58aa72f2b0fa4b4a24da5bd2a0aa50fa50aa85d2908a810a8b4aaa128b5a725a88aaa2c2825a661a880aa7a2786a57da805abda2606a566a8cbaa1926bea43aa88faacc2579a406a84caa74252ba491a7f6a92325e3a33aa7e1a94d248aa30ba777a9cb23cca232a60aa9ca210fa2eca20da68220ab9e3521e821e82125098d24cf24e92536a008a311a6f22401a1e1a460a74d2379a1b5a433a7ac218aa0fba222a62f20c49ec2a02ba48f1d399ee799fea2750d8298432101150115161c63266b2668159d1e0628cc28ad1f481c9826cc27072221962f2260211222199af990e99c5821129b699d2ea108203a9acb9d90a19a1ea49a059e60a14c1ddb9a7b9eb0a1251d669a539ea0a1f31cd999e89d14a1781c5b998e9d7ba0681bab98669d0ba0de1a5298299da79f801aee97a39cc59ee9193797c39b229e5b195096239ba99d16192f96c69a6f9db418f495729a599da1180796939a179d681812963d9ad59c1019f99338991e9db91233139b1f5521e619dea05ea306a52e2422a403a750a8722895a286a565a8c8271aa76eabf8ab6328699dfb248b246a295ea432a997aadd29c7a449a823aa6c2985a462a8d8a93d2917a58da836aa7a2946a588a83caa91291ba6c3a86baa9f292ea6c7a8d0aad129fea423a66fa9732ae9a01620a520cf29b0a38aa001a59727d4a528a876aaaa27b3a576a859aab32742a56da895aa5027faa45fa87baae826dfa444a84daa5926bfa42aa82baa092692a417a8f3a9ba2567a4f2a7e8a9432551a4afa7e9a90425f4a365a7d0a99024ada34ea7e0a9242427a253a795aa0424979fb7a545a94422f89b21a400a8fb1c4ea0e4a457a8ad1dcba042a578a820207aa0c0a449a8fd1f459f34a435a7251f709e71a3f1a5261d869eb0a1b9a4ca181e9fbf149098d393ea1df827a528f09af022b52bcf2ceb1dcc1d92285d291b240f94d61c091c5d221a9b1a9e23a1ae20889c179fa2a1551fd69cc09e67a11c1e789c089f49a17f1d959b7a9ed2a0c21c069b439ecea0491c6f9a2e9ed4a0341c3b9aff9db8a0c51bc999b89d8ea0801b50995a9d2fa0a71a3799cb9c839f1f1ad4986d9cf69ed119a4982a9c949ea3193898029c439e0b194597599bdd9dd91807972f9b5e9d8f185d96df9abc9dd9169e94489a709e951100002d189719a005c29ea5a200a485230fa364a7d0a85f2726a34da631a83826bf935396a2951d20849af79fb0a1722491a535a803aa9f2862a55ca800aa062905a664a800aaf32839a680a809aafb2840a6a5a835aaf52833a6a5a863aaf028fda59fa84baa99286fa54ea823aabf27cea4dea7d9a91326f3a4c2a8e9aa8e2695a5f3a83eab312761a5bfa8f1aacc2618a598a8cdaa63262ca571a883aa0526f4a43ba821aabe25a1a427a80aaa912569a4f5a7d7a90d2531a48ba7a3a9c92403a432a779a97d24d0a3e2a65ca93e2490a399a62da9012404a3d8a588a8d822daa0a1a32ba61e21169de6a0afa4cc1e159ef8a1f2a51c1d13a060a317a7351d1fa0bfa3f9a6321d0aa0e7a3eca69d1d459ff0a3d0a6781ea79fbca39ba6121e879c02a2c4a5d11a1c95ef18441c369d3b29ea3079326a15db964f1c1316ef24859b6da057a3111f909d13a14ca42d1ec69ca0a04ba33d1d439c66a0e2a2ae1c329c3ba095a2641cd99bd69f1ea2d71b8a9b649fd8a1a31be39a0b9f92a1481b839a9b9e3fa1ff1ae899fd9da9a0151a44997b9d35a09c198898fa9cb09f3d195398b29c349f5819df978a9cbc9e1c198097559c6a9efb183097ff9b159e21195b97039cd39d521910960c9b459ee714be95ba992b9cb8160000bf17f21a4d088aa23ba5e8a6bf25f9a162a6d3a7e626b8a065a475a5c824429d8c9f20a1772027a405a511a709265ba4c0a793a95f2886a422a8b4a9792801a533a8baa97e285ba54ca8c5a99b288ea558a8d0a98f2869a553a8dea9742854a55ea8e8a95028d5a47fa753a96e271ca109a49fa5d72356a3d0a5f0a7872440a50aa8a2a9c0251ca5fea7c3a97d251ea5f2a7baa92725f7a4dfa7c6a90925e9a4bfa7eba9e024c6a49da7dca99424a2a461a7d3a9662476a429a7b1a95b2432a4f0a687a92324a7a3bea66ca9d223bfa254a626a9f622d7a1a0a5aea83e2205a103a54aa8cd2168a07ea468a7f0201ea002a4b3a62220ac9f9aa36aa6861f429f8ba3afa6701e119f6da3c4a6a51d1f9f57a3c9a6951d0a9f1fa37ca6691dd39fc5a20aa6451d329d8fa04ba3a61b6311e6147416be0c5c95069bc29de4886a9da2a11ba4941b989d53a1caa3781cf09ca4a013a3181c429c30a0c9a2121be49be89f65a2c71a629b809fd4a1831ac69a029f64a13f1a4c9a8e9e12a11a1ac4994b9ecaa0e1196699fb9d90a0b7190099979d3fa06d19b498259d959ff3187898b19cad9e8c183a98699c379e9c182a982b9cde9d2e183098f09bb39d10184e98c69b589d4b174397929b509dbf162097459a569c0c180000e718281c260537a11ba588a656255aa1e5a44aa6b92524a090a3f1a48f24b99f99a298a4072488a147a5c0a6a2256fa3fca6b6a89c272ea481a726a9c72743a4afa736a9ba277aa4eda772a9ce27c3a422a892a9fb27caa53da87aa9cd270ea525a8aea9b427aba3f1a6e9a87a26e7a1a7a5eaa75625a0a36da661a89025a7a461a705a9b02546a47fa740a96e2519a49ca771a91b2512a492a79ba9d32406a47aa777a99f24dea30ea733a96024c2a3eda61ea92a246fa3bda604a9e223f7a28ea6eda879237ea258a6dba819231fa20aa69aa89022c8a1b7a54fa83c2256a15da507a8ae21bba0d2a44fa74e2148a061a4aca6b720b29f15a447a670202e9f97a317a6e11f9c9e32a3eaa54b1f6a9ee8a2bba5b91e2e9e98a2dda5551e119e63a29ba5d01df49d1ea2b7a4b31deb9a679ff1a04b1c6195a29ba89d5119e8980d9e2ea20c166f9c929f15a43812ec9b19a03aa381170b9c41a0f2a28e19ad9b1ba0eea2fc19cb9b809f49a2b419ad9b109fbea16519529b8b9e7fa141191c9b409e40a1bb187d9af69d0fa14518d499b89dc0a0291841997b9d8ba00e18c598239d44a0c6173398ca9cd69f4817d397739c449f4a162197249cf89e09162397139c939ed0154c96c59be29e6515e2954f9b549eb7152b197413a0199922292291a91faba02ab528811c5318c728672c002326248129772e60236e24032abf2f33209b1ca4294530faa501a7e7288c30daac20aef92b793083ac1aad4d2eb3314aa072a1ca2f2533ee2515283d2fe332d3247128b02d7432c0a892aab02dcc3233a098a3bd2be932022787288c2bc832fa262a288b2aca3120266027b4273130ea11d293e31c702728b1a9b17ba488a4e6b0d3b12729bb1d1d99911b2d2c191e6c23a829bb245b1ddb22802913212b1c73209f28ee21328cab9de024632531a9f1b0e0b17d28dea97cb22bb4d0a927a049a83fa8f4ac2a199b2185251aa9a41a61204123c1a1ad17661b1d1eb499721d84223b246d1c0b1c6b22c724d41b151c962277244f1c3b1c78227224991cd31b44225a24e41c121cf0212124021d581b7f21ba23091d131b42211f23131d671ad3209b22d11c091a9c203d22d81cac196b20e221911c20191f2088218e1ce418c91f2a211b1cd1183c1fe1201d1c9218bc1e9120e51b54185c1e6420271b0518ed1d2a20f51aba179e1db81f051b5917591d971f811a0717261d431f391a6416bc1c3a1e7a19d1156b1c841d26198315301c761d63198815281c4a1d5d1987151d1c4f1d17194515b11b291df318e5142d1be91cb618e214be1a631c9218e299d7a12ca1f721671db4a396a3ca289f22c0a517a8f925a029c8a58fa72c270a2d18a799a80f27712f1da89ba9a628a830afa95fabc32945318aabbeac082c943195abbfacc52d01326aaa3cac032fbc32eea688a8512f0033eaa42ea6c92eda324cabb4ac232d8133f1aab1ac062a9d3349a28fa4ae288c3343112499ed27b6323ba1b5a4461e963073aa5cac359d8e2925aed6af991bdda0edad94afb82a5fa319ab9bac772c679fb8a6c2a8772ad79c22a5c6a5c8277a9deba5dea77a2861a2c8aa8daca329f2a5a2ae46b06f2655a62dafceb0afa759a403ad85ae3fa946a040a917ab98aa4b9ef4a795a936a8b29beaa438a6dca6780f2598f39c46a02e19a41e0520b19b6e1a21215822db993f1c03225b23c517151cc22148230f1ce11b9a218623941c771a8a215e233d1c2a1a0921cd22491c9719bf204122a01c80197020ea21931c911936204321c21c5e19f81fed20dc1c3c19501fb120a11c1819e41e6d205e1c9718861e3620281c3c18171ed81ff31b5617911d7f1f301b0917581dfe1ee51a7616071db91ea11a1716df1c511e681ace15811c031e191a6915351c741db319c714971b311d6c19c514611be41c1c19b514451b831c9518d214c71a751c201829145d1a041c1518da1127177018ad18c198e29b7f9c3722c49874a266a3f529b08ee6a4eca5052b5624a2a500a6bb2b7f2a1ba6ffa60c2cbb2e78a536a72c2cce30eda50ea8e12cb5311da6eca7d22d5a3288a54ea7f32d6f32daa528a8bd2ea0329da6a8a89b2e05330fa86ba91c2e5e33d4a8adaa6f2d97339ca87faa442cc433aea78da90b2afd33f1a58da8c928fa3250a790a9dd26ba3082a9acab9326762908ac3fadaa265ca36bab15ad242804a50eaa31ace12813a359a916aca728dca21da909ac402915a353a90facec2848a3b0aaf5ac7625cfa348ac13ae4a22eea35cac16ae48143ea308acb7ad099f7ba15faa79acfca0e99e86a8b2aadaa40f9d63a6e4a8a7a40d9806a276a553a1ed0cf6977e9e0f9ad8175e1d811c8b8d931933205d2039133f1ac8206621be18751a142126223c1b2c1a40219022d41b321a11214f22101cbf19bc20ed21151c66197c208621621c2a193b2055216e1c061901201721681cbd189b1fcf20731c7d182b1f9820201c4e18b21e5e202e1c2618391e0020e21b0518bd1daf1f921b71175f1de51e001ba016021d821e9b1a1516a01c0f1e271a7c155e1c821dc519fc14011c1b1dac19d714671bbb1c1e198414a01a351cdf1861145c1adb1b6e180414b519751b3418001319191c1b6d18d0127419951bec183c8bf691cb93950c04a0ec9c759fac2b1ca097a086a16d2caa8f05a19ea1022d8426dba216a4c02c962c54a4b2a4902d71309da4e5a4e82dd03118a4e2a5272e903265a4efa6522edd32efa492a75e2e1f331aa616a83e2eb63354a79ca9e82d0c3414a8efa9832d3134aaa7b5a9eb2c3a3412a8b9a9ea2b413401a874aaf2295c3388a8e7aae52893309ca983abe3283d28a1a960ac0529b6a477a91aac7825d5a52ea9b1abf0289aa442a93aac71291fa494a996acdd27d4a3cca9d2acc2250aa49caaeaac3a259ca3e4aa3fad6823d0a2c7aa27adbd1c33a21faae8ac6a9940a160a93dac749d35a074a820ab2f9eb79ca6a5fda8949c529513a01fa5db995010cb8c009e628fbb15cd1b8e145019e516451d2d1b2d1b2d189c1e6b1d6a1bed1806203e20b61b6c1971202e21181c461974204721441cfa186a204121d41bf51841202e21551c92181220fb205e1c9d18ae1fd120681c5618341f7a20671c2818d41e2c201a1cb4172a1edc1f211c0517cb1d701fd11bb916821ddd1e781b4016071d7b1e0d1bc815be1c2f1eba1a6415581c9e1d551ac8141e1c381de2197a14981bd91cd1193a14ff1a7c1cb6192414501a211c7419de13361adc1b16197013cb19361bdb186b122419e81aa71855132219dd1a5818af9134941f94e18341a0c19c2f9e2e2cc6a1b99ee89ed32cf2a10ca046a0f92c279de8a080a22d2d4c2892a207a3b02dab2eb2a3a7a34b2e92315fa38fa4ad2ee132cda298a5c52e7733b8a4c3a7ff2ed733bea51ba8832e1a34c3a6d3a8f12d353402a8d6a94d2d6c3405a802aaa72c85342ca837aa482c833430a88aaaaf2b06345da8aaaaaa2aaf30cda8f2abfd29ef26a9a807ac40299ca4bda8dfaa9f2886a5d0a85fab3228e1a458a987ac90276ca4a7a9edacde2419a4e9a900ad1f22cea3ffa947ad5e2023a3f0a90dad8a1c76a3b0a997acf31816a372a961ac4d92b1a06ba822ace698f89ec1a618aa2e9e229dbba494a8679d029955a1dba54a9b5e96309dd5a3a59a508d8497b8a1169533112b1902994a144e16841dfd1a211c0d179c1eff1cff1c9517eb1e961e011dce17da1ef61eb71cae17d01e0e1f3b1cc317a31e6a1f601c9317821e5d1f211c4317681e431fc51bb3163e1e271ff21bbf16e61ded1ef51b7216881d7d1e751b35163f1d4f1e771bed15ba1cd31de51a7315641c611dce1a0015151c391df1198d14b31bc81ca8190514fe1a8b1cbf19d013c01a331c8a19d1123e1a031ca219bb12d1195f1b14197212a919141be01839124c19d71a6818a711de180b1a4618ac11411895195917359098918f92160328a31a95999b942c26a4659b999c762d31a4f69dfe9d9e2d54a478a02ca2212ee21dd4a278a48e2ec52b11a471a46c2edb304aa45aa4c92eee3216a4e0a5e92edd33fba4f2a7c12e2e34bca5a3a8632e8734c1a631a90f2ec634a2a7f4a9a92dce34d1a71caa042dd2341ca885aa852cd93446a8b1aad32b463413a822ab222b3c30aaa8c5ab322ac01efca831ac34291ea728a914acad28b9a678a858abe027b1a584a840ac3e266ba524a9deac98241da50fa9b5ac5922c8a336a9f7ac042085a203a9a8ac301c05a2d9a841ac7d1833a16ba803ac6d1817a064a733ab4418cd9e2ba6b0a9b117c59dd4a481a8dc16899b27a2d2a62e16b2985a9fe7a490185394c8996fa2d0199f8cdc11cd9df61a9c0ca41a0f94711b36121b1c0b13a11b9d148e1d201abc1cc815371e8c1d041d5816671e5f1ef51c3e169b1ecd1ebd1c5316801eca1e3d1d5916361e341ffd1c5d161e1e171f041dd315b21da11eb01cc815521d841e651c9e150d1d0d1e5d1c17159c1ca71d131ceb145f1c551db01b9e141c1cfe1cbc1a7914da1bb01c521ad113221b6e1c631a06139f1a141ce2198f122d1aae1b891903129519351b3219ca115719e01af518e21138199e1a7618f2109718d219e018880ea5156917e41800803383908e5e8dfe9e0198c99ac228b9a4699fffa0662d41a66ea200a2a52d94a623a3b3a1e92da2a439a45ea5572e7b1f8ba3bea4672e7c2e82a3e0a40b2fc83240a46ca5fe2e7f34e1a449a7ca2eee34b9a57ba8802e0a3565a611a9222e45353ba7b1a9c02d6d35b6a71faa412d763535a898aab02c763522a8ecaa242ca834f3a7f8aa6d2bd92f46a845ab372a9d1a13a867ab6029c3a69fa823abba28aaa62fa81cabd0270aa65ea852ac742620a5c0a8baac502580a4b9a888ac0e2428a498a86cac6921c2a34ba81eac1220d2a237a8f3ab6f1ec4a1d1a7d4ab091bb8a0f6a63eab1718cf9e98a5e1a9711aca9d9ea4b0a8c519de9cdba240a71619809bc4a09aa5261afc98119e12a45e1ca9942597c0a0f01c3306611902995e1d11127a1c0b16231d0a14921df61a171dd414eb1dc41cc41c0815ff1dfc1c821cbe15e81da81dc11cca15e41dc31d7b1c7315c21d061e781c4b154b1d761d0d1ce514f21c5d1d101c7d146e1cf91c881bf413351ca71c9d1b9b13931b631c2d1b5d133b1b271c4d1b0913911acc1bda1a38123b1a5f1b7a1af7119619941a271a5d112319131aaf19ca107d18ae1950190510f617c018c018ec0fb8174a184a186c101317cf17cf178a0d77159c1721193d0c1b15ba174b190080e786e98eb189f59ff499dd9cb1290ca4689ee39e342dbea4d8a023a29c2dc9a5e9a158a4202edea6d5a338a30f2ecba417a46fa3272ef42925a4bca5932e143128a54ba6722e5d340da5b8a6c62e1c3580a69ba8cc2e783531a757a9a52ed6351da788a9272e083639a7dfa9982d1436d9a7cfa9192d19363ea72baa7e2cf93436a700aa0e2cbf2e80a746aada2a5aa40da89baa362a5ba8dca80dab8129d6a695a888abcb2860a56ba8d1ab0e2824a512a8afab6c26cca4fea799ab112521a4dda70bac112397a2dda717acc8201fa28ea79dabe21fb3a1bca680aa3e1faca0e1a5daa9de1e0ba0d7a417a97e1e179f8fa309a81d1f1f9d6da139a6581ebe9baa9f5fa5f11d3899f49c52a4a61e8c97e59892a1311e4393e7114b9d4b1d518ccc193c964c1ded0bd11bcf0c1c1d7b11a91cab15631d2113ee1ca619641d6913321d971b221dcd131c1d461cae1c1e14d01cce1cce1c2e14c51cdb1cdb1c0914831c8f1c8f1c7f133d1c991c991c4813961b511c511c6012381b981b5c1c0012601a071b091cbf11171a981a921b77115f19291a121b8210ee18b919921a3d108318e2180e1a1310f917f618b2192c0f21176c187c190b0fd01624182219860e7f162218bf18cb0c9515ed174218120e4815e516ff170080a786ca91ca91dca0209b5d9e322992a358a0eda01c2d30a54aa175a2582d06a634a265a31e2e24a56aa2c8a48d2efba68ca47aa4aa2e45a141a465a6f62e1e2c82a4a8a7922e0c348ca6cea8182fbd35e1a5ada8412f20364aa60da9df2e843649a64ea9272ecd367fa698a9a62de43689a7ffa92e2dfb3614a7c6aad52c0e3511a8e6aa532c852c92a814abb32af8a48da85cabd42954a72ea905ac2229bba613a839ab692881a5faa7d0abb827d3a404a808ac4326ada491a7b5ab6325aba45ba78cab162450a434a704acdc2297a356a79aab7120baa178a680ab6a1f76a0d9a5c0aab81d569fd8a45ba9ca1b679ed2a363a8dc1c509d1ca2fea6651d639c61a09da5b91d109a0c9e72a4231d7b976b9811a2c81cb5929d118da0bb1ced8eb618e19d301d3405971b2296361d6c0b581c6315a81dd60d741c9219d31dd70f8b1c221bf21d97118c1c331cf81d3811861ce01b981dbf113a1c121c3c1d6211f01b921b3a1df010711b221bed1caa10f31aa61a461c5510121a291aec1b10104219c019641ba10ee318d7185f1a4b0e26187a18e419170ea9175b176819770c6e16b4165319620cb5156a167819cb0a1d15181633197e0a04151515ea18820853147415a718300bb1141d16ab184f0b0912a112111800804a81d08cd89127a0039b6d9df528e7a4cba03da1aa2d5ba5e3a1e1a2db2d4ba647a2bfa3052ef8a612a4c9a43f2e38a776a42da6ec2eb8a75ea4f9a5d92eb42460a489a8ce2e383143a588a8962ec03589a5bda81c2fc236caa5eaa8032f1b3715a6a3a9282e643741a6b0a9a22d8a370ca7ada9fb2cae37d1a616aa3d2c1535d6a603aac92bf728eca748ab482b41a733a8c3aa622a0fa88ca86eabbc2978a72ca8feaade28a4a619a811ab4628aba5c2a71cab332705a56ca76aab412654a414a7afab0025a9a3b5a637abff233fa330a6caaa38231ea271a516aa2a22cda0a2a407a9af2029a0e0a38fa8ee1fd69e64a2d2a7381f359d79a102a72d1e0b9c5d9f07a6ea1dd0990e9d6aa4291ea898b599daa2e01d2098fe8ba89f331e619458163a9b951d3a8f97193c964c1d5f85e81ac38ca71def04fc1bc912601ddb0a0c1c4f17f51c0e0dfc1b2218d31c4c0e3b1b7d18491ccd0dab1aef185d1c030f481a4b190f1c370df6190619301ce50c1519a418bb1b920cd01860184a1b560c8c182118e21a320cda17d616931aef09a8167415331a4a07ec143a14561a6a0209141e12e6190c026512a411d719d001f9103b116b191d05b411e110b51826056e107710a0189901680eeb0d65179a07c60fd40dde175c88568d0c8d9012cb9e949c559dfa28a9a45aa142a3562dfaa509a317a4d92dfea681a3a5a4102ecea712a42ba5322e61a8a5a3b5a48b2e6ea869a50aa8bf2eb0a6c8a561a60f2ed22a62a6a6a82e2ed2334aa6e6a9662ec13680a6f2a8802e99378da6e8a9f62dd237c8a619aab52d113857a7efa93b2d333892a73caaa62cf23494a6e7a9042c162338a870ac9f2b8aa692a882ab2d2a96a770a837abc12952a629a8d8aad12887a599a7e7aa8428cca40aa7c7aa872764a4a7a6dbaa9a2663a48ba6cbaa672567a4cca549aa9e240da32ea5aba93124fea1e5a408a94a23e3a116a451a84d2280a1c4a305a85c21b8a022a257a79320f09e06a19aa6e01f2c9d15a0caa5b81ff49bb59c81a41f1fcb996c982da21d1fe597498ba59f511e5a965a14c59c0b1ead948c178a99761e9b933f19c3950d1e87908b1a598c401edc84dd1a1415591e7e0a0e1b3a18de1dc4091e1bb918cc1d440c031a5718b81d090c901905184c1da1082f198417f41c6f0868180b17f61c2b0824186d15ac1c9e02f4161315161c7702be156513a81b2e029114d612151bfc8126141312dc19be8149133d110d19a2818511ed0ead189a815310d10e9a1898817110240c5018bd811a0f3f0c6c183e01db0c0a911f161d8a30898584a9180f91578c9990991067a1279f33a0f328bfa5aca263a47c2d33a634a4efa4002e54a799a499a5462e91a7a4a4a0a54e2e8fa7d4a470a64d2e4da695a4e8a6642ef0a855a5eea55c2ee2a0a1a6eaa8892e352e21a7d0a92b2ecf35cba6c8a8b52d343809a60ca9112e4038f5a5c7a9f22d6d38e1a51caa632d9338e2a5d4a9b72c5b3436a7e0a9ff2bee9808a806ab802a3fa653a89baae729e1a609a8bbaa8229f9a519a826aba0285ea5fca75fab52282fa58ba707ab7127d0a4d7a6b3aa4c2687a347a6bcaaae2502a319a66eaaec249ea283a5a8a943246ea219a50ba9022420a29aa49ba87c22bba0b8a33ca8232228a046a261a79121ed9e6aa193a6d820de9ef5a003a69720839d819f00a54a20299ae89a58a26c20ae96e60b019e1020a39659163a9b8e1f9695ad184698061f9193ea19bf92071fa391581a430ca81e2e90051a080c4c1ea98fbe19b211ef1d268d69195311fd1da38cf018e1107d1d728c8c187f100f1dea8d70179609b71c7c8dfd142409561cd68eac14d688141c718e9111d08eaa1b018e930f688e351b0c8f530c0b91cf1a9c8eea0baa904c1a168e370b4d90ce19fd8dc90acf8c68198e8d50048f8fb9184c8c4704698fa218fc8c17840e8fc318258bd48973931415f887a6030f05e61800800887138d1a0f5a9df598d19c7e2891a442a248a3432dd1a4f2a25fa48c2da4a5dba3a6a4e62d64a6a0a3dfa42e2eb9a6e0a35ba5532e9ba78aa4f4a5172e29a889a467a65b2e34a7bea55fa82b2eaa10bea5aba9d12d1d323aa8bca9c92da63715a792a8022d773834a6fea85d2dd138b6a5b3a9ec2cb438fda510a9592ccb3273a79baaf22b01a845a838ab092b44a83aa7b4a9b429eda6e9a60aaa5b2943a77ca7c8aac6283ea666a7f4aa71286da52da7b1aa9427b6a492a680aa9426f2a375a623aa58252aa3f0a5efa9d5246fa235a552a9662425a296a4e7a8012456a114a478a8fe22dda033a31ca8d322b1a076a2aaa7c9225aa062a168a60b22af9e769f87a44421629c859c92a2b1207a9a1e976ba14c201899fc0b44a0c91f7f974618969c681fe494b81a8c98781f5f92fb1bc88ce01e0e92331cd4121d1f7c90431b6215441f1490db1a1412d61e918f11198a0bd51eaa8efc17e38acf1ddd8d03161d8a281df58e73142690031d1e907e12a08f9b1c07905610f591511cc68fd20ccb93091c4e90fb05bc94191b13909f857994b51a678f398553959119c68ef78420955c19418daf842a9452191a8d8604b393eb18fe8c55045c91c918da8d1484c58e3b18578bca836790dc17228e3f8e32907d170080638d53903f12999dc797e29b6f28fba322a2f9a2442de1a4c7a23ba45d2dcca512a387a4be2d86a64aa3aea4c32d43a70fa426a5e82d01a819a4cda5ab2d67a77ea468a7ef2d5aa728a66ca8b12d61a73fa819aa0c2e22289ca7a9a99d2d873499a8e9a9052d69383da791a81a2d103998a462a89e2c77381ba66fa89d2b2231cca7b4a93d2b15a551a8adaaad2a8fa6cea822ab722ab9a6d7a747aa7c295ea683a743aac1282ba663a72eaa3e2872a506a746aab627c8a47ea62caad42649a41ea6a3a9b525dea35aa53fa90a2504a39fa4e2a86a2435a222a47fa80b2444a1a5a2c0a75f23aca08aa1d8a63822c89f8ba0eca55821c09efa9f4fa5fc202c9e6c9ee1a4c720539d889c07a42120259c9b982ba24d20b599eb11559d172049985318d098e81fc596091af0939b1fc895af1a128d4a1fad944e1ad08cec1e1f93df197a0c6f1e5d92181a160c631ecd91f4187c0bd81d49919018d30ac21dcf913016400a461d5491a614b8892e1d8292c2109b92ca1c059204879595301cb19113908897d21bdb914a911298531b62914c924098bf1a7b912193cd97321a2991b2920897ff19db903f92bc95ed19b190de9163959119e1909a91ce954b19889149922796b2180b93e4924095c918bb945392aa93681700008c19f7199d1411a1719e49a17d2b7ea422a3f9a4c92ca6a4b5a24fa4262dd1a420a390a4482d87a55ea3c2a4822d25a6a6a3eba4b22d04a72ea4a3a5af2d27a7cba4c2a6b52d54a7eba5f2a6632d9da7b5a668a9742d31a79aa53fa7402db32d06a73aa92e2d963605a88fa9f32ccc3833a661a89d2cb137dda621a92f2ca32ea1a7bea9132b40a53ca863aa8d2a79a77ba8c0aaf52934a602a80baa262908a69da723aa8c2891a567a722aa412846a510a711aa9027d2a49aa6c8a9d32672a429a6b4a9e92510a4a3a57ca98e2528a3f3a4f2a8c12496a230a455a8072452a1e0a2eca78e2342a138a2c5a6a72287a0c2a190a6382223a010a1dea58921e99eef9ff9a44a21819de89deaa3ab20129c7e97c9a06720ae982e12cb9c3e20d795701bf6986e20c192771d0914bd1f6992281d5d16511f1e92d61cf515d91ee791831c9015661ee292ef1a2e12701e5f93fd18888be21d6d9362154194bf1d689384110597441da9932288bf98ee1c5894c092bd998e1c9694e994999a3e1cd1943096ab9ad31bd49433979e9a261b9f946c97839a831a9594df96099a7c1ae6935f968299ea194893e2950d99cc1917930f96c1981b190e93dd959e98f61809933696cc987818da92819668986818da90b2947b967a18d30fc11d581f101835a286a1e0a1db2b8aa461a2e6a3ca2ceda579a2c4a3ee2c34a517a28aa3342d27a534a2e1a35a2d50a5e0a264a4672db8a500a42aa5792de2a6e3a491a65e2d15a798a530a8632d37a81ea76da8132deea6f1a7c6a9592dd8a7d5a734a9ce2c273139a889a9db2c78373ca746a95e2c1b3690a74ea9002cfa2783a8eca9852ab9a75fa9c4ab992a08a9f7a86eabb52921a755a870aafe287aa624a85daa8c28e8a514a842aa0f282fa5ada726aa6e2790a435a7d5a96c2637a4d1a6baa90d26c9a3fba565a9752550a3f7a498a829257aa284a350a770247da101a2fca51b2487a043a1afa53223559f3da01da6b1227a9e1ca06ea58a21a99dac9e0da56021c29c4b9dfda2fe20329ce99a0fa1af20019c2495e39e2b207f98f016499a551f748ffc1d5f0d0d1fa885921ecc19c31ecc90421eef1b041fea91e01d6a1b8f1e7e91811df419c41e9c8f5a1b110c5a1e40916b142498c01d3e93de0e53977f1d7795b394299a411da8966a985a9cac1ca796d398929c471c7396d798ca9cf01b6e96e798d29c091b0a96e898869c991a33957d982b9c151aa7946a986f9bd4190a941d98b59a421950932b98f199431901938997b6990f19bf92db977599d6184f9220972a998a1813920f9656987917dc02501d901f5c188ba4a2a3cea2dd2ac7a3c5a3b1a4162c1fa420a241a4872c15a473a0c4a1b42c1ca426a050a1ea2c2ea4b8a00aa2042da4a4c9a35da5fa2caea5d4a527a8f52c42a6cca6c6a8fb2cc3a70fa864a9da2c96a55aa86aaaf72c19a8fba6f9a9d32cefa7c5a45ba70c2c89334fa6c1a9702c8e3423a89caa7e2be9a7b2a757aaa6285ca62ea9a9ac7b2a39a77aa8c2ab6829b4a577a8a1aa892871a560a87daa15283da526a851aa6d27c9a4c6a737aa89264da430a7f2a9e225b0a37ca6a5a91625b9a287a503a9d42431a2a4a47fa85024dda1d9a3a3a70024caa016a1e3a5722342a010a08ba5d7225a9fb99e02a54a22ce9e709e16a5a7218a9e149e8ca4dd20cc9dba9d3ca42220b19c849c9fa2301fb59a298c7c9d371e17989119a38db11e5f91be1e7f1c921eef05b120ab1f001fa1854120511f511f3185031f071dce1e9784381de118521fa5913419fc943b1f80944312e798761ea095918eed99bb1d01978f97fa9c581d6c985f9aff9e9b1cb9972e9a6f9e3d1c6f97769add9dba1b3597459a969d041b9296159a499d581a13968c99b39ca41985955499fa9b61194795bb98789b0a1931959998cc9acf18359584984c9aaf184b954c98f8997118b693bb96cd98cd18ad951b97c2976a18a18e441de51f511684a3a9a40aa5462ae2a4eba30ba5902b75a3b7a149a4162c5ca260903a9b4a2c1da4e9168498782c7fa553a092a1b12c1da6d2a5bca7992cfea5f7a694a8752c7ba659a7c2a8902c36a666a727a96c2c6da75ba849aa6b2c71a659a80faa902c53a8b1a695a8ff2b0ca466a4dea6ee295c2c2ba620a8d32a88a52aa775a9132a31a56fa8a0ab282924a509a88baa79284ba5faa743aacf273da5eba738aa202709a5e1a741aa7026baa4b4a754aaaa2574a45ea74aaa27254aa4b8a603aa6724dea3f5a574a9bd23c2a2a5a4aca8dc223fa18aa2cba7f422e09f68a0daa5ee22b69e1d9ec5a43723619e4e9e34a4af22f09ede9fbda4fe215e9f4aa0c2a40a21679ef29fada4f81ea89dc29db4a3861fdb9a021212a0ca1b0a96c61d5a1a001e6e06fe206f20bd1e26153b22d121671f0e13de220822ed1fd1957821f92109207094601ee81d981fc091e3186f111c1ead947508fc99c91dcd969c95e79ce71c0899249a079e661cb098129c159f111cb298939cac9f0c1c80981b9c249f881b4298129cc79e251bb497a39b119ea41a11970f9b549dd5194696739aa19ca119e995199a7b9c72197695cd99129c2719ef944299b89be218f2941199419b971848941b99439be4181d94a7987c9ad418f49d2b8e6b869d1860a47aa77da8c629b0a2e7a5b6a7eb2a48a4d6a181a3d42a6ba20224e525f12a18a1a2237d23352a6ea430a036a2372b24a530a634a8ff2b0aa780a86aaa0e2c97a60ea9aeaa2a2cbaa680a80aaa362ceaa667a80daa392cf8a620a841a9092caca68fa6bda8382b56a64fa6bfa8d12970a6f3a675a931291ea730a8d0a921291ca6eaa86eabee2864a6cba8f4aa3f2829a67ba885aa802701a647a8c9aa6f2756a52ea863aa8e26f4a4ffa7f4a9cc2589a4b1a7d4a9422517a43fa7a3a9c624bea3e2a67ba9332412a411a614a9c5225aa22ca492a75d22139f6b9cdea53e22cc9b11177c9cb823169e37966c9f0a24fe9f43a215a62523fa9f9aa390a7a621409ea2a1f4a60c20029fa8a08da4f31ee49d0e95a09f721db098d81e5619b81dbb1308242824cc1d8a19eb24b725cf1de319ba240725731e94187323a522281f1685041f0a1dd21e029a5590749ab31e0e9a10992a9d671eb499369bba9eb11d5299779ca69ff31c2c99c99c9d9f681cd298dd9c639fc31bd898939c509f6f1bae98899cfc9e191b7998599cad9e591a1998209c609e7b1ab997e19b209e3a1af4964e9b6d9db3194096c09a099df418e595029afc9c90182996e999cc9c6418c2942899b39df311b4942b99319ccb15b09d1198809a921571a6c9a7a3a8e0284ea5dfa6d5a84e2947a381a521a8c0290e1af02a592c662beb18d829442bb828cca4f9a556a7c32865a550a875a9ed294ba6aca831aa6c2ae2a522a971aaac2ad2a5f2a87baad62a11a6cea89faa262b05a728a82baa542b4ba5fea47fa7422b31a519a50aa77e2a46a7e7a763a9402957a8dea828abd62893a7a0a8c8aa6c2856a6b2a81dabdb27ada5a2a82eab042750a580a801ab862611a56ba8cbaa0726c7a432a875aa9f2570a400a81aaa172536a4bba705aaa524c1a361a7bda9222455a30da75fa96d2281a224a670a9c4207ca0c39e99a43a20d914da26af2682245ca0c699b19ccc24cba059a4dca635227ba1e0a4c1a71321c0a0d5a3c1a6ad1f7b9fdca1f6a40a1e2e9edc9d31a3c1193f9d881d499c3c8e55199f25f9244e15801e0228bd28061dc71d832778286a2046144423282421214098150b06965e20209cd49c5aa1371faa99bf9da0a24c1e1d9adb9d52a16b1c1b9b319e63a1191c4c9a169e70a1731bdd99ce9d25a1691b44998e9d95a01c1aa798439d24a0ad195698349dd39f5c190c98949cdc9ed5184b979f9b299e56181c96389bcf9d35189d96e39ab29d98171a967f9a699d09183796889a2c9d1a179a95299ae39c3118589475999b9c8d173a113d1f87211a1bfba28aa5bda67b27aba3fca68ea87c28b6a439a632a934286ca630aabaaaaa2014a8c5aadeab582c20a44ca919abdf2962a483a84baa8c2905a5c2a86aaa7a2996a5f1a8a6aa6829d1a50ba9d5aa702986a65fa924ab8e29faa511a9a8ab312a97a41d9e07a3c02a7ba243962e989d28eaa487a8dbaa1d28f4a412a923abe8275da5dda8c9aaa0272da5a8a8d8aa63271fa594a891aaff260ba55da85faa6b26daa434a82aaa0826a3a42ba803aab4257ea411a8e2a93d253aa4e0a7d5a9da24f9a3a9a7d9a97624a5a329a77fa9dd231ca3eea65da9d822e1a2e5a628a9d4219da07ca4daa65e1daaa08ca4d9a7be15f2a01da576a8fd1da0a0d6a43ba85d1e839f2ca45fa7b31dfe9edca3a0a6221c099f9fa114a646128d9f7699bfa1418dbb1a9d255f268f9575226c2ba92c3011281fd3296e2b7b216f856221982198210f9af29b439f5520969c199fa0a1741e3b9d359fb0a14a1dc19c1e9f5ea1b91cc29bac9e1da12b1c0e9b6b9ee5a0c81b609a439ed5a0811b279afc9da9a0cc1ace99bc9d82a0941a8b99729d31a0431a2899e09cc69f6e19a698799ced9e16196398569c759e33191498069cf59d9b180c975b9bbf9d23180f97569b4d9dd817e895919a9e9df614c894339a389df01700005e19811bd003a5a105a58ea66225aaa3a3a755a9df27afa296a558a766250c0e3d11da14f61e5ca09da42ca62c2682a55da802aade2871a57da82caa1329d3a57aa820aa092910a6a8a847aaec2850a6d2a85caafc2858a6cfa88baaf7282da6b6a824aa8d28dda4e2a789a995269ea405a8cea9af2569a5baa8c3aa72260ea61ba93eabe726b1a5d7a809ab842646a595a8c3aa59263da56ea86daac32510a546a837aa6625cfa438a81caa0a2592a40aa8f2a9932464a4bba7c9a92f2437a46ba78fa9d62330a42ea763a9492313a4c8a62fa91d2316a462a6eea89222e8a284a526a89d216f9e7ba2bba5a41f599cd5a08ca52c1d159f73a20aa6e81cde9f9da3afa6ac1c539fc8a3c0a6b81c9b9f12a4c6a6ce1c9f9fafa398a6aa1dcd9dc8a2dea5eb1daf99aa9f0ba27013be270d300c31c8a224201829f0294225669b32a0fba2141f659d16a17ea4a51d9a9ca7a025a3ab1c1e9c75a0daa2201c319c34a07ba24d1bc89be99f1da2e21a859b819fdfa1be1aec9afb9e97a16b1abe9ab19e29a12c1aed990b9eb2a057195699899d3ea0ed189998029dbc9f97185298b69c329f5e18f797839cb99e7b1897972d9c359e56183997e69b0f9e3c18bf97f79b9a9dae184796aa9a149e4b14ea95039a669cdd1500009218701c760cbea35ca5d1a6d9254fa235a6c4a7f62626a02ea44ca50b25c19ce1a0afa2f621d3a412a635a833264ba41da88aa96828a8a43fa8aba9972817a551a8d2a9a62864a56da8dba9c328aca570a8eba9a42871a584a82aaaad280aa550a8c6a9572828a4b0a690a86c2611a303a698a826256da554a807aa98256aa529a8faa9762569a51ba8c4a9412564a523a8b8a90f2537a518a8cca9bf2406a502a8eda99224daa4e1a7dea94624b5a48da7c3a919246ea46ba79ba90b2425a403a780a95523b3a3dda648a9d922d8a26ba61fa95c2208a2e1a5d0a8ca2164a176a563a82e21f4a0ffa4daa7b320afa074a419a7c81f52a020a4b4a60e1f7f9fd9a3aea6bd1d0c9f8ea3a5a63d1df09e65a38ba6c71c289f2ba322a6e81ce89ed0a2f2a5781ccf9da3a140a4641b9e100c14ae15240f608f5695b998328af39ce7a061a3d717c39d37a194a3481b149d93a0dda2271b4b9c2fa0c6a2251af89bc59f67a2e919ae9b879fe5a15019469b1b9f6ca111199b9a979e0ba14a19fb99489ebca010197899f49d79a0e118ed98889d23a09b189d98f99c4e9f271863988e9c9e9eaf173998479c2d9e7e173798339c1a9edb162a980f9ce19dc1162098f19b8e9d0316a597879b659ddb161497639a189c9d170000c318f61ba581f9a112a59ba61d25f9a0d0a414a658259b9fa2a3eca4772477a03ea3bfa428241da2a9a55ea70a26b1a325a7dea89a2731a4c2a739a9e4275ba4e3a769a9e82791a422a88ea9f627eda449a8b2a9142898a573a8b2a900286ba409a89ca98f27e7a2c9a6a7a824267ea23ba646a88d2551a448a7f2a8d225eea4b5a759a9892579a4d2a783a93f2538a403a8d4a9b62420a4e3a7d6a980240ea4aba792a91d2405a44da754a90b24d3a32aa73fa9ab2378a302a726a987232ba3d5a60ba9d122bda2b3a6f5a86e2285a262a6c6a831222fa209a67ba8e421aea1a6a51fa8562106a115a577a7c12068a095a4e4a62f20f59f2da458a6d31f469fdca324a6d51ea99e53a3f7a5471e7f9e02a3caa5bf1d689eb0a2caa5511d4c9e76a2a9a5331d3c9e34a2fca4061da59c92a05ba23c1cd195cc9a0f9db9182c96799c2fa13416809c0fa0fca3250d1f9c09a004a3b613409c6ba000a3a118409c41a0e0a21019ec9bad9f6ba27518959b199fc3a13518359b9e9e86a11b18119b489e3da1ed17809a089e19a11c17da99c49dc5a0e8164f99829da8a00816c898489d4ba075164398dc9cf29f1916ca977e9c779f20156197279c149f61146f97269cca9e33141c96b29b9d9f10108a95049bf69e840d4e9daba479a57019461b30a05ba1832a0926cd252e27922ac729212621289c2b932c10274228de2b852ec7278f28ff2bd6300328a1287d2b7c31602660263b2c1031719ca19a522bf1303dac5dade8286b311cade4ade32ee431eca71ca6d12f6131eaae04b0132ff53283241c25132c93321f278128822b5e3177265a27562a14307e25c1266429d02c562506263828ed28db2126248c2253a3b3ad63ae16ac20aadbb094b2e926c1a5eeac61aede2cda11909bce9a532ceb8c4ea27ba2372b2fa88cb0beb1982803a90fb128b2d3a8de197e1f6822a7a1531caf2385257d94711a5722c7247f94921cbb201822f71cca1c76210924118dee1c7c23fb242f1df31c73232025951c621cc1229224fc1b3f1cb9228c244b1cec1b63225f24851cef1bfb212124441c5c1b8c21b823561c351b4a2124236e1c8d1ad920a322371c2b1aa0204722fa1bdd197a20ec210a1c551933209a21a51b1d19f21f45215d1b0c19661ff420ec1ad0180a1fb220041b87187a1e64204a1a4418011e2c20211ad417d31d0320e4199217a01dcc1fba193f17501d651f921982160f1daa1e05190116901cba1dbc1891154a1c9e1da5185b15181c781da51854152e1c5c1dae185915cf1b1e1d2e18c914561b151d52174f15d41a701c8917d9942ea23ca24a98859c3ba25ba1102a83204c227022b12a0b26d91d1f1f3b2aa62a7b1e651e4e2ace2d181fee1ea42a1c30dd113993e32aee30dba17aa4b72a953109a859a9442bfb3197abf8ac5b2c39322bac36ad2d2e7f3282ab02ad252fc4329bac1caec72d2733bca8e0aa502c2533c991919c6c2b94327820d720dd290331141c74183c27d92c7fa171a49d1f2b2479a8b8a9caa00da593add4aeb5a47fa6b1ae3cb00825a5a4a6ad9aaf2b2c09a4b7ac3dae802ca0a47aad04af732b4ba699afe7b0c42a10a6fbaebbb0d21ec0a20dac3cad68aa129de7a75aa927a4fc9952a4f0a5daa7cf96f8a202a533a0919555a1d7a232a17016e718f619899d93194b20f420c8989f1a6521c9226b98561c1122a323d318f31bbd213623c91b731b99216d23f31b8e1a7b2152239f1bfe191921cf22161bb919d0205c22021c9f19892011220c1caf1943208621451cb6190d2006216c1c9c19a01fbc202b1c3819211f7b20e21bd118921e4520831b6218291efb1fc71a8017d21d9a1f751a3917771d0b1f271a9b161c1dbe1ee3192916e81c501e4e19d9157c1c091e13190f15311c7b1dbe18ef14aa1b1c1ddf18a214361be91c62189b14131b861c2a18cd14ee1a6b1c5817f913631a311c2f175912eb182c1afc17918bed8cfd8c68159e9a7798a296032a2b992c9d3c9e5c2b6d1d609d999e142c1025519c979ec82b8f2af89d599f572c9d2e9fa080a2b72c8d308fa430a5202d9831e6a544a7332d28329fa7a8a8a72d7a3286a8dda9ee2db432d2a968abf02ddf3288a916ac792d2033b0a8c3aab52c4d337ba537a81b2b28339e9f7da4ca29e130dba1c5a46e283b2c22a644a83926279983a9a6ab4923b0a523abc2ac982266a504ac2fad0a26dfa461acfcad1729fca4a5ac5caee4286ba5f7acddae3c2967a568ad93afe824d3a44cad9eaf2622dda37dac4dae211feea1d6aab0ac6c19e69fc9a8c0aab298e39c85a6e2a89ea04999bca33ca690a06290059dd7a0a09e8a14df184a0edd973e17151e221e2a8d7d1911202420db12391ac2207e2127178b1a14214a223919431a45217522cc1a4d1a1c216c22291bb219ca201022501b99198620ac21541b321944206e21751bf2180e202e21811baf18aa1fe820ad1b6b18331f9820b91b4b18c21e5a20511b1518371e1220d81a0218e71d9b1f951a7717661d0d1f1a1ad7160e1d751ec3195c16da1c191e7119a115761ca61d33190b15221c631df518f014951bf61cb81891149f1a551c68188e14301af91b34183e14c4193b1bea17ec136819e01a2e1809149319791aa0185b81d485d1895382689fc78fbc902e2ca99fb19628988c2cf19cd990e711362d9a15309cf69cbe2c2f2623a12aa3882d032d1da3c3a4f42d43307ea365a5282e8f31aaa40ea7632e5d32b2a550a8bb2ef23261a716a9742e7a336aa831aa412ecb337aa86daab42de133c3a7d4a93f2d0434fba622a9ac2c59338ea5c0a8932ba230f0a6bda8b629a72a78a8dba9f02893a234a99fab0b292fa617aa1eaca326a4a5e9aaaeacfc2801a573ab27ad9828e7a4a1abb0adbf27d0a4f4abf6ade52544a407acf6adc625a8a396abc3ad482397a3feaa48adb2195ba2e4a9bfac5c99e8a0eda86cab439d079faca701aabc9c0e9cd3a459a86d9c2195419f75a468995210b70ce79b068f2a15701c6b173119f316b01d5c1def1a8918531f641f1e1b3e195f20e420851a64199b2090211a1b401995206921a01a011969206c21f51add183d2034216f1ab7180e200421af1a8d18aa1fd520891b56183e1f7b20981b3a18f11e5b20241bfa178b1e0120551b2917f41d8c1fe91ae416a31d311f951a5816201d931e3b1ad915d71c461ef2198c15941ce41d2b19e5142d1c7d1d331978148d1be01c24191714e91a721cb0186d131c1aab1b5c184513e919281b3c18ba124119c81a04184012ba181a1add17d2131e19141b9418b588e88a748d45873aa0ae951597af2cc4a09799af9c0f2d94a1369c8e9eb12d06a2609cac9e832dc7166f9f76a0222e992849a295a3bf2e742e65a23ba5c42e6e3108a42da63a2fea322ea5fba7252f773329a702a9de2ef0333da8e9a9812e22341ca829aaf62d22343fa8eda91b2d353456a745a9982cb1331ba773a92e2ca43026a8c6a9b72a40282ca966ab94293fa578a920ac002947a6c7a933ac2328b0a5d7a94facca27d0a475aae0acfb2669a4b2aa48ad9d244da495aa7bad6c2100a492aa84adf11e3aa376aa33ad9b19f0a2f7a9beacd31277a25aa941acce98c3a05fa89fabb79ba09eb1a6cfa90f9e949c92a4d8a7229dd698d5a002a59f9c6495bd9cdfa2a29a718d60955fa0ff942c112b191d941d14aa15e61d931cb61a1917931ef31d5d1bcf17f01e6f1fb11b03181f1f481f811b6717d81ed61fa31b8d17fe1e1320331b7017d51e0620841b1e17b61e9e1f1c1bcf164c1e841fb81ab016fa1d071f481a4316931d981ee4190916431d661e021acd15f41cef1d0e1a6015711c7a1d96190215211c4e1d33199c14cc1bd11ceb1821141e1b901c07195d13cc1a321cd118ef12421afe1b98182d12d0195b1b6a182012b619191b4218a7125a192b1ba0178111b918771aea165e115a18c319e715b4887d82c989f18629a2f1954697312d1ba3029cd79aaf2d03a45d9de89c012e6ea52b9f6d9b2c2e90a36ba068a0a92eee91ada20ba3e32e7a2b21a4a1a5432f413094a45fa7502f7e32c9a5a9a73a2f973376a6f1a8b12e2f34a8a7a8a99a2e613405a824aaf42d6a3415a82daa5c2d7234bda749aaf02cc233cba730aa302c04305da8baaa372b3823b7a821ac952a0da62ea9b5ab93294ba70fa906ace0281ca632a912acd327d1a56ea944acb3269fa5d1a9c3ac0925f1a4f1a9d2ac5e232ea4bda9f8ace920eea275a9b0ace61d32a223a95facaf1b82a1b0a81facee1195a017a844ab9a11869fcba6dda90111ad9d11a593a88110749b40a279a61010aa98b19e68a43a0f5793b09835a100151a86ee16349ca417830c881b4b8da21846128e1c10183a19a914001ea21c151b0716a91e631eaa1b1316d91e411ff51b5016af1e471fe61b47168d1e311f151cbf16801e431f481c57162d1e291f041cf315ce1d151f931be7156a1d9c1eb01bbc151e1d1f1e1f1b3915dd1cf11d211b0415671c8f1dac1ab714261cfe1ccf198114ea1bb01c7419c5132d1b691c2119f712a51a151cc01895122e1aa31bcb181a1291192d1b8118ec115219dc1a4e18a711f9188b1a1c189a104218ab19c018de0dba148f15d4188d8da102fc81f788239c6896b7948a2414a4bc9f079f3b2d3ca630a3d1a2522ec3a5dca3b6a3622efda564a2c1a3fd2e03a604a3c5a06c2fcc22a1a362a5aa2f082e67a49ca7ac2f49322fa5d7a74e2f1d34d7a68ea8d52e7334e5a7aaa9dc2e9e3404a819aa292ebf3426a871aa9f2dac347ba8baaa242d14343ba863abbb2cc02f98a8bdaaaf2bbd21b8a86dab592a64a5f2a873abb929caa587a8c3aae328a8a5cba885ab2128a8a502a93bacd02640a536a9a5ac0625c4a418a999ac1d242ca405a95eac2b2217a4bea810ac3520bda349a88aab8a1eeda192a7a7aa991c79a0b5a6f4a96c17649fb1a548a95917da9d5da471a8c416c49cbba2faa6e015669bc1a001a542182899119dd9a27b19f99341923d9fdb1aad0c69194c94e21b0812721c5819b81b3c14a51d141d031cff145c1ed31d991b2d151d1e041e381be715481e271ed61ada15341e421e791a8015d11d181eaf1a6615581de51d121a9514021d741d471a98148a1c641d771a1414541c0a1d9f1acb13cc1b761c381a83136e1b361c611a0e13101bf11b041a40125f1a831bb119fd11aa19141b5d1978113719241af418da108218a1198a181010f217ad18f7171b10ba1791181b17d50f03173c187016610dd7151f181f183c0e7e15131763185d90c38671885886f19b43955998cd23a2a2049f399f602dcfa464a106a2552ea3a6cea218a4742e62a66fa3a9a4242fd5a5bfa353a4282f939e69a37ea6722f7328faa428a83e2f883074a6a4a8522fb83331a69aa8062fa534cea7dfa8d52e02351aa8bea9a92e2c3514a814aa242e2a3503a7a8a97a2d0734b0a6eea8702cab2ef9a619a9cd2b2c9b8ca85cab942b14a84fa903ace52a01a7a0a8feaabd297aa654a884abd72831a574a858ab2028a0a43fa840ab61265fa42aa840abb5241aa44ca89fab2623a8a220a8c5abfd20fea1b9a755abd42097a11da73caa501fc6a0d6a573a9921e23a00aa5b2a82b1e4e9fbba376a7c31db19d7da1e4a5541cfb9b209f92a4041c5f99039d04a3ad1c61979e977fa04d1c4594c8119a9b9a1b448cab198f93181cff0b4e1c4213dd1b4c10b91cee175d1b3313f41cb61abe1b7413411d531cbd1bd813341daf1cbe1b2214261d2e1d071c3b14d71ce11c281c1114951ceb1cce1b81134f1ca01cf91b3913b41b581c7d1b5b125f1b1d1c181b0412881aa31b1c1bb111da192d1b301a4f116d19411aca19e010fd18d0196219121088184b19e718e40ff717f518f518e70e241765186518ab0e4817181818183f0e6a16171894171e0c8915e717e717e30dd014c215db16ce90dd883d8d3d8d5e9d5c98069a872320a339a098a0522df7a480a1c9a24b2ee5a513a3faa3b22ebba533a3b7a41f2f2aa920a583a4eb2e26a83ca566a7752fd9a684a4fca5432ff82ae7a7b5a84a2f0f32c5a763a98b2e893410a747a84e2e4435c1a665a8242e9535a6a7aea80f2e8b351ea70fa95b2df433ada728a98d2c052c7aa87baa7a2b4ea64ea9a1aba42aefa74fa905ac1c2a03a793a861ab2829f4a5aba883ab64282da555a8b7ab9e27b3a430a899abf7254ea407a824ab0225f9a3a6a7cdaa6c2324a326a79daad721b8a2c3a61aaa3b202da27da6c6a9b21d94a0bda5d7a97b1cd99ffaa4ffa80e1c479ffea334a8791bc39df8a185a6451c6a9c33a00ea5bb1c1e9abd9dcca3661c5d982f97fea0111c1495ae11c19ed11bfe90ba17649c641c5985da1ae38c951c24055c1cd818931c030e801c871ac51c0310e21c021cf41cb210e11c951c051d49118c1c4c1cb51cd611881c701c701c8411441c271c841cff108d1bdd1b461cc310121bb61a5a1b6b10271ace1ace1a2e10c019c419511a0210f9186e196e19590e8d18891803193a0edd172d180e19990cbd16eb16ae185a0ce815b516ef18b70a1d153a169418ab08031513153b188308cf146b15f8173e0b0815b316f917f30a9b133a1669170d90da812b82978b209d08977d98a623b6a499a1f5a0d32dcaa6c1a2eba29a2ecea6e9a2bea37f2e46a620a4c3a4cf2ecfa604a556a67c2f51a841a631a73f2fdea7d4a58da7112f051242a586a7ef2e982f15a701a9d62eed335ca618a8792e3e3556a624a8fc2db235ffa652a8c82d6b35aaa6ada8742d4c3333a6e3a8512c1c2a8aa716aa712b49a8dea808abd72aeca8eea82dab8d2a19a82da89daa7729dea641a813abb02814a633a8fcaa1528cba50fa8e6aafd26eea4cda7ffaad82526a468a7f3aac024eaa2b0a631aa21244ea2f8a5e1a9c322d4a187a586a9ea211da1dfa4caa896206ca05ca479a8c71f1f9f5aa315a8881eb09df4a10ea7721d789c17a036a5e11c8b9a3d9d02a4851c4299ef9a36a2351d22980f8cdc9fde1c49958416519b531c3c8fb01977930b1c088ccc1bbc0c701c00050b1c9a15341cfc0a151ca418bc1b310d041c0519c11ba00c531b5019f21aea0dd51abc19431b8c0d661a5619c31a510d121a0d19661af60c2919ab18ea197e0cd418691896193a0c88183a17d6190c0cc917d9160119040cab1672163519c306a8153e1501197106c314f2131319cf05b1131f138c1851050512a0129a18d804ad12e7100718e90474108a1075178001770e020ee9166404b20f201046182f961c915f116b21ba9dcf99ee981724f4a4b4a179a2822dd3a5bda381a4872ee8a60ca4a4a4732ef7a771a493a5ae2e2ba864a48ca53e2fb5a830a4aea6622f13a792a54ea7f02ebea411a681a81a2fe627f3a762aa332fd8300da892a9de2e7e344aa75da8fc2d3b3502a890a8252efc346da76aa87d2dfd3101a7d1a8602cf825e3a7fda93e2b3ca6efa837abd42acba7d8a840ab6f2a4da827a82dabcc298ea66ea8c6aaca28a3a513a8c2aa4d28e3a48fa782aa45279ca441a744aa062685a49da647aa3f2553a444a6fda9832407a395a578a97d2314a2dea4b1a8722270a13ea42ba81722fea053a3d3a7e020d3a0b2a228a7481f299f45a185a62a1edc9c7f9f75a50a1e279bba9c0ea4681da4999399b5a1861da298a591109f0c1da2964f11c79c6a1d9895ab178f99401d9a944819f892841dac90a41a630c361d7b8bbe1b3417671d7604ee1b4119041df509511bb119091d5f0cbd1a3f19a41c120c371ad9184a1caa0846198218561c85087f181c170a1c3f083418ac16951bad02fc160d15041b8a02c415b214861a37024315c212081af9811f14fa11e918be812e1327113c18a1818811d30e4418b2816e10b70eb917b58190101c0ce1172b85140fde0e4b185f84ad03ca8bd0164c8a6a837b0476195498ba8f48106821a49f019c299c58244ca5e1a27da36a2d41a647a4fba4982e9aa699a47da5942ee6a663a48ea5c12ee7a6dea410a6b32ebca6dfa41ea6c22efba9cba4d5a5fd2e1ea7bea68ea80b2f3ba6c4a63aa8fd2ec22954a8dba8872ec1310aa865a91c2e413429a718a8b32df2333ca732a8632dd22f0ca87ea9312c78a212a96cab9d2b87a631a97bab182bcda773a893aa622aa6a753a841ab9a29aaa674a87cabab28d3a530a85bab112861a5dba7faaae426a1a486a7c2aab3251da4eda656aad92497a38ea623aa822457a3dea549a99d23fba252a5b7a8b42331a2b5a460a85822cfa0aca3daa7bc2100a06ba2e9a61721349f92a141a67c209b9ef3a0d5a57c1f899d819fb6a49f1fed9af59ae7a13c1fe897030c5c9dca1e98977716fe99531ebf95cd182f96e01d9194041a810c591dc1916d1a5a128f1d4a90161a0515461d8d8d791ab814f51c3e8d1c1a6e14a71cb58c03191414b01c7f8c9c187d134e1cef8d88172f10021c7c8df5152409641b4c8dbb14d508f21a768e411385887e1a0d8e521140881c1a408f3c0f0a8eca191490f40b938d58192f8e4e0b178de118f88de30abe8c8c18838d5f04858ce9172e8d4304588fb617f08c1384008f5a17218de18ca4904d16418b9e83d484fb181596448f9a8fe5202d9f049b379b8224e0a4cfa196a3512d3da5a4a38ba4672ec8a50ba41ca57b2e76a61ea438a59f2eb2a641a44fa5bb2e0aa736a526a6cb2e2aa893a5b8a6c52ec2a8aaa640a8072fbda73ba62aa8ad2ee8a348a6c5a8332e852a87a740a9662d8830e1a637a8312d9c31c7a4c0a79f2cdd2ce6a743a9702b07a5f1a8f6ab142c6ca7fba873ab732b58a670a780a9392a5ea644a8abaa9a29eaa63ea8c5aae32862a6dfa79aaa2828eaa5b1a793aa2127a9a458a794aa0926f4a3d7a677aa052565a35aa609aa9f2487a2aaa598a9d82301a213a50ea9ed2274a156a478a8f521f1a0a1a30ba83a217aa0a3a218a70d211fa074a10ba6ca204b9e24a05ba441207e9c039d98a2e91f7e9baf99d6a1e81fac99089239a03d1ea897a916879cec1da995b81a7496221eca93071c2b13461e8793411cf6178a1ee2915e1b81172a1e5991ea1a0317c21dba8fce19a414cd1d6c900b181d11541dde8f2416220acb1c418f87148d89561cef8e92122189021c22902c123f8f8d1be98f1810a791801a568f8e0c83932b1a0590a4059c946119368f37057d95bd18a08eec04489514182b8dad044e941118118d7e04d3936417e68c550442912317d28c1384a48ef9164d89c203518e4417288d4e8e299003189e95f506430712220a9d639a7f99482469a442a108a2472d3da58fa366a41d2e9fa5ada3f4a4312e69a6f8a322a5522e28a725a4c2a59a2e42a77ca417a66f2e9ba7eea4d0a6152e27a885a6c2a7582e5eaa2fa84fa9562e08a501a730a9e02d8c9865a78aa97d2d9d2901a834a8f02cb92c1fa65da8242c78219ba8b0aa592bdfa763a95aac952bb9a7c0a8a9abf02aa9a61ba83aaae7291ea623a86eaa5129b6a5f7a734aa8f28a8a5cba733aa1b2833a58da752aa4927dda414a706aa3e2677a496a6d1a9782508a4f6a567a9c92451a349a509a9292435a26ba487a89d234aa18aa3d7a76d228fa037a223a742219a9f3ba137a67520ba9e0ea060a52b20e19d809e76a4e31f399d929cb6a3841f259cb099d0a1201f299af30b529dbd1eb7985219da96821ec2960e1a448d411ec695b81a0c0dfe1da7945a1acc0cb21d2f93ba1a7b0c531d689276191c0c641ded910a198f0bf61c6e919f18ea0af81c009243164e0a881c8f91b914bb891f1cf091d0109e929c1b2b921e079a95291bbc91f38c6596b01aeb9158911198b11973914d924098c0197d912293c1973f192b91a992f7961f19d5903f92b6952419ae90ed916295d818c790a191d695a218b79053927f950b183293f592a6946c1971922393cd940f1700004018401a720d5fa35fa0e39e242c1fa570a278a4f82c7ca4cda23ca48c2df2a4aca3f1a4cf2d8ba502a41fa51e2e1fa67aa4a9a54c2ed0a6daa402a6402ed0a677a5cea6142e25a6d3a628a8f12d4ea83ba719a9f32d38a915a852a9902d37a817a8dba9282daba894a8fea9c02c41a2eea7ada9132c7ea125a834aadc2b85a491a8f6aadd2b75a7afa8cbaacb2a38a62aa877aa8d29eaa549a865aa2929efa52aa86caa9c2863a5e9a74faa3b2825a570a72eaa6a27d4a4e8a6cda9912695a471a6a8a9dd2527a4ffa53aa929257da35ba5e8a875247ea2b2a45ea8a02393a16fa3aea7122338a1cda2f1a65b22aea038a29fa658216ca027a1aea5ae20ab9e06a0e4a49120909d979ef3a348200b9cdf9825a13e1f95992b0c819df81eb1968319ee98b01ecd92921c630d651e03913c1d6716151e1e92eb1c0616b91ded919a1cdd17561de792d71b2d156f1d7c931d19980bfc1c4d9485152191ea1c9e9397117295791c5d94298800982f1c7894db900d99351cb894fd94a29ae61be2944996c29ac21ae8948996b59a2b1aa8948f97a19aa6194694f896339a4819d393759698992e194e93ff95af980f19009334966f98ca18cd92f695ab98ab18d892479678987818dc910a9610981018e18f8493a9970c170000331c821c379301a222a1d9a0b82b85a539a38aa4202d43a655a2aba3602dcba596a215a4a22d9ea5b8a240a4c62d94a561a3bea4ee2d0aa69ca4f2a5fe2ddda691a520a7ec2d6ba7aaa68ba8f22d6ca8c3a788a8492d67a8a3a6c6a82e2ddda969a79aa8a52cc2a70ba8dba9ba2c56a9d5a887aafa2b97a8a8a883aa4c2bc8a563a8dcaa312be8a8d8a8bbab052b66a850a853aa4e2915a743a850aadd28cca633a857aa592805a626a869aa042865a500a867aa0527c7a478a702aaf12590a444a7e2a98f252aa4b6a683a93225c0a3b2a5cba89b248fa253a40aa83824c9a10da3bfa6d023c4a0efa1f2a5c322989fbe9f4ea6bb219a9e8d9f74a51f21e59d439f07a57e20539d759e1ca43620a19c8d9cd6a1e81f399c4097a19fe71ef2980415b99bf71d3e918d1d688dbf1d478c381ed619831dbf90591e091ce61de791101eae1b9d1d4790431d261a4f1d6f8d101c28156a1d509021187f91cf1c7193e50ea6953c1cff94ab946699231c4d96f397f29b501b2e96d498319c391b1796d198739cbd1acd95e5987e9ce8195895e2987c9c9319bd947b98259c281953941d986e9b051902941d98619a8e186493d397fd999e18bd929597bc996c18dd9264971f99311811929b97c799cf173d92e797e299bc1500009c1c1c1de78dfca1dba169a2b52a18a52ca41ea65a2c8aa406a23aa4c72ce6a324a066a1fe2c68a454a08ca1392d90a47ca10ea36e2d1ca56ea40da68c2d20a65da616a87e2da2a675a7f4a8732dcea69aa8f7a94c2d1da6a1a854aa202daca7e6a8c2ab002dd2a93da8aea96a2c02a903a8e3a9ee2a5ca894a8beaabe2ae0a823a9f8abcb2a65a6eda82bab2e2a37a6a7a87eaaf528cda5a8a8e5aa9f28dda58ea8e1aa282892a570a8bfaa352724a547a8a1aa9026c1a411a854aaa32555a439a7fba90e257da366a6b5a98b24e5a2a5a5f2a8072431a292a488a87f2307a167a29ba6f72219a00da04ca55b22409f9c9eefa4bc21a29e5b9ebfa41321359e989e7ea463208b9d459eaaa48b1fe49c959d74a3801e869b4d97b59f821de498271723975b1d3394be1ddc18351dec8579200d1fb51da9854720601f741d4b05871faf1daf1db584b71d1e1bc01da890141a070cca1dac946b120b989d1dd195bc8ef599f71c4797b796049d461c8198789ab19ee51b36984f9a269e401b9a97989af39dad1a4397679aa49d081aa596239a0f9d6a190096de99b39cce1858956499f89b4318ed940b99839b5e180d95ab98e19a3218d7944a985f9a1518e1944b98039a2a18dd935496d3984f178c945b963898591700007d1db31e5393d0a313a4c2a4172a22a68ca422a6072c04a410a183a2fc2bc5a2bd96699b672ccea44a978a9de62c32a714a3fda4232d62a722a761a82b2dfaa612a8d5a80d2d75a63aa874a9272d41a62aa89aa90b2ddba638a8b9a9cc2c76a61ca8c0a9cb2ccba6bea76ba9202c15a617a761a90c2b3ea795a7f9a9c02a09a642a8deaa622abda511a9baab6e2918a687a8e4aa6628c1a541a8baaaab2780a548a8c6aa162737a551a8abaa3d26f4a41ea88faa6a25b2a4b3a759aade2464a42aa720aa16240da48da6c5a93a2366a399a52ca94722e6a15fa461a84f2285a0bba170a65222479f579e9fa4df22ad9e709d8ba3a122369f0f9f52a4d421a49fa0a0d1a4b920ed9e8aa0dda4821de19dd69e0da4671dbf9c839867a0c01bc2984f1ce818421d10907c206720481d45154a222722fa1d4b14e12261228d1ef5929421b821351ea393531f931e6f1df391781a9d16f61cb093c0117e98b31c399699948c9c2f1cb898369a059ed51acc98c59bd19e5c1ad4986a9cbe9f791a94981e9c329f041a5398d59b919eb319b097a19b169e48192597259b619d131948968f9ab49c9c18d2951d9a4d9cbe185195c5990e9c7818d7943a99b99b4118d5944399f19afa1755940799349bf01729946c98e599db160000691c951d898e96a2b3a581a774298fa3eaa507a8672a7aa547a0e3a0162b7fa1c9241c269a2a45a04d215520632bdaa415a403a6252c60a5dfa744a94e2c4aa6d5a8abaa762c5fa6d1a8a9aa822cc1a698a82caa922c60a79aa826aa652cb9a6c2a72ea9372c43a6a5a6a3a89f2b5ca6f1a61aa96f2a07a73ea82caae22915a7b1a8bbaa5829fca64ea9a7ab0829c5a653a993ab782842a6cca8f0aaf227fba57aa889aa0a2796a558a85caa6a260ca53ea82daace257da413a8f1a92e2516a496a7b0a9a624b1a34ba7a0a9c42304a4c1a65ea99f2233a4aca534a95d21c5a00aa235a82021f49cca0dc09f7522929e0d1dae184123a59f6ba000a5bc22a79fbca26ba63e2105a063a212a6a71fff9e89a16ea5ce1e329e5e9bb5a0ee1d979c131c7f14df1cc006ec228323021d0119cd245225421cea19a624e224fa1c58193524e3224c1d73100a20681e301de699da098298421d579b2f99b99c221d829a519bf79d9a1cd099839c639f121c4799ce9cbf9f561b2b99e49c829fe01aee98a39c619f891acd98999c069f381a98986b9cc49e8c193798379c739eb519cf97f59be99d6819fe964b9b549de1182c96ac9af09c2f18bc95f099089d971790960a9aa09c361735953699679da60edf94e898959b1e17d60c151bfa1d6707efa5e8a720a97b29a5a4e6a7fba8c629e6a3a1a3d7a4cb29061e942c1a2e502aa49dfa25c02601299da434a880a9592971a5b3a84aaa2a2a2ea60ea9c3aae22a04a666a902ab402b0ca64ca93cab7f2b82a622a928abbc2b19a880a784a9b12b0ba641a57da7682bd7a61da7c4a87c2a77a7f0a895aa9c2902a82da9f4aadd2845a7eaa802ab752844a6e1a821ab0c28b2a5caa825ab342765a59da8f9aab52623a572a8b3aa7226e1a44ba87baad6259fa42aa826aa0e254da4f6a70eaa9924eaa396a7b3a91a24cda389a78da90b23a4a2cca644aadb203ca13aa51ea8b91f5d98ef22cd216922ad959d231924f2245fa016a48aa64321c3a103a51ea83a20e3a039a4e9a6b21fae9faba262a59a1e919ee29f5aa4941c159e060ce59b4f14d515362437243015051e97277028741af41def27d1285a1e1c1964245325941f5d96e9183418e81e699cf39ab89fba1d779b2a9e3ba2361dff9a4f9e76a1fa1b059b0c9e31a1521a749afe9d5ca12a1ae199c39dfea0be1937998b9d84a0b418d2983c9d39a0661857981e9dea9f5f171798839cf49e721762970a9c4f9ec116d096689be09d7916ad963a9bbd9da8154796ca9a689d22169996eb9a189d2c15cd95349a379d4b15d6947e993e9c041800000b1e8b1f8017eea3a9a6c2a70428e6a45ca7a4a88028bca571a89aaa5429b8213b2c642e57243da86aab51acba2c69a585a92dab1d2a03a5bfa8b6aa89298ba51fa9c7aa6929c5a52fa903ab262988a63fa932abfb281aa7ada97cab682930a6ffa871ab3d2a07a1112222239c2a0fa506a503a87c286da520a9baab102836a538a94cabc32753a5f5a80aab4a2763a5d5a8f1aa172745a5baa8b8aaac2637a592a886aa4a2604a565a848aae025b9a441a816aa582578a418a8f1a9df2440a407a8caa97a2408a4c3a7c3a91f24aaa35ca78ba9b82389a31fa71da99c22e4a337a713a92a22cea123a533a8221ebb9a3ea010a594975ba0dfa434a89e17ada0e1a44aa8421c779f52a468a72a1cfc9f04a443a78e196ba099a28ca52417b39da89d9ca111167115da22d923ca0e9221cb2a022c2e917921982a8a2bfc1e36144c235f244820dc98c596bd9c3c1fb19c159faca1931d5c9d6e9fd5a1c31ccb9c239f9ba1dd1bcd9bbd9e5aa1231b179b719efea07f1a579a489ecba0171a1b9af19da6a0e819d099b59d63a0b519ae99759d35a011194299029dbd9fc718dd98879cf29e65185398539c579e7218e897fd9bd09dc0171f975a9b6e9dd81605974c9b2e9d191725968a9a099df515db94ef997e9c76170000511ca31d7c1042a336a667a7962631a4f7a729a90c2872a2d6a416a6182561129f14b616cf1f47a346a7daa8d5270ea599a830aa122930a58fa85aaa212990a5a1a877aa2429ada5baa866aaff28efa5dda895aaf92802a6f7a8b7aae8287aa5b0a822aa38280ea41ba7eba8922553a5ada832aa1226dea502a9e7aa4f26bba504a906ab5626a0a5d0a8eaaa232697a5b0a8caaaec2578a588a88baa9c2539a557a86aaa2625faa437a83caabb24b7a416a80caa412481a4e0a7e3a9bd234aa48ea7a7a9372330a440a772a9bd2224a4f1a63ea9952225a4bda625a92922b0a356a6c9a88821f0a0d3a4aaa75420249db7a157a5d31d429e10a24ea5621c499f49a351a6a21b6a9faba3a8a62d1b7d9f17a4c2a6841a7c9ff3a3b2a66d1b679ea3a331a6871d6a9b59a176a35c1a0f25722dbf2ea0a09824242db02d5924f09ba69f3ea2ca1e909d23a115a4c91cfc9ccea03fa3291c149c8ca0b8a22f1b219c3ea088a2581a959bfd9f2ba2fd19159b919fe5a1d619b29a2b9f7da11a199c9ab89e30a1ec18dd990b9ec0a099184b99839d45a03918ac98f99cb49fca176e98af9c2d9f6b1710985b9c849eaa170a98219c2e9ed9168797d09be79db4169e97ae9ba99dfd16d596b89a919dec15c2952f9aad9ce4150000ff192f1dcc88c3a29fa590a7c32409a26aa6f5a7e626499ff6a316a500254e9da6a113a4b923bea4ada66ea8592737a43ba88ca98f28bba460a8cfa9cb280ba57aa802aacd282da592a812aad92891a59da82daac12851a5a9a890aae32825a53ea8e0a9452832a38ca664a83d26ada4eaa7c6a9a82573a58fa892aa8a2567a563a828aa3b258ea55ca816aa03258da561a802aaca2454a53aa8e8a9762408a528a8e7a94d24c9a40aa8eea901249ca4d1a7cba99f2365a490a7a5a9392316a438a78ca97d2271a3e5a64fa90122dba281a623a9872133a230a6d3a8fe20bca19aa56aa8b4205ba10ea5c6a74320f4a099a4fea65d1f81a031a491a6371eb89fd0a378a6411d109f8ea367a65d1cdf9e43a314a6341ce29e04a3aea5671cbb9edfa295a5f61bfd9e99a204a5881a93011c83498dd0110788cb92ba963282369c23a016a2ef13709e0ca185a3d419359da1a0eda2b919339c31a0c1a2c418ec9b03a079a21719c29b849ff7a184186a9b1e9f71a14518c19a8f9efba07218199a289ea7a03d187e99ca9d52a003180799719d0ca00217bb980c9d779f9a166798a79c059f57162a98699ca79e47161798609cbc9e5b16f0972e9c659e96152f98129cfe9daf148f97aa9b979de9159a96a79a6d9cbf150000aa18221c948b0da435a56da6ef24dba010a54fa67425109fc3a358a59c2492a0e6a371a571249aa204a611a87226cfa35ca700a9ab2713a4e5a752a9e22766a421a88ba90d28baa450a8c4a9362817a573a802aa3f28f7a479a804aa1c2809a4dba769a94b27b5a2e8a6b7a84f2651a3f5a6b2a8f7257ea49da725a9d9254ca503a8a8a94f25b7a416a8eba9c82450a41fa828aa50242ea4fca7e5a915241ca4c8a78ca9652318a48da764a9492300a447a748a9d922b7a32ca730a9b9226ca302a718a9532203a3daa607a9f621b2a288a6e0a8832172a24aa699a84621e8a1e3a535a8b92044a146a58fa75e2099a0bba4eca6971f15a04da45ca6b21e6a9ffca320a6141ec49e8ba3f1a52e1d999e21a3c9a5b21c839ee0a2aba59b1c829eaaa2b4a5901c2b9e31a21ca5981c7f9d51a1aaa3791ba696889b019d40181695409bc99ec215689c0da038a36006bd9c29a005a3110d689c87a021a3a216279c57a0f5a27417029cd79f78a24517949b349ff3a1ea16329bd59e95a1b816049b7a9e44a174169b9a369e1aa19e151d9aef9dc3a0711588999a9d9ea061150f995f9d5ba02d157e98ee9c02a0db1403989c9c869fe7136d97419c419f73124f97219cd79e56138396ab9b109f68125c96fe9ad79da315ec9382a4a7a5bf21d61c2c1c7521652b1f245f26d8277a2c3c2818274f28932c382a84274228842c3c2c84278728a52cf92d67277f28c82c912f1b280529572d8f309828d1295b2dd23070258c25662c0031c5a4aca52d2a6c3057af90b0032d013010b2eab20e30d931e524b724a72ceb30d4257727972ad22e69257c26ba29232c4c2556265329de285025b0257d28de24a8254e2789263a210f256d27e91a0d0df1a042a1021b20a846b030b1ff97d3aa69b212b43c2766ab96b3cbb4562898a8dcb045b210a65d9758a2d0a368217c1a0321d3204f25941ab021f92285249a1ad020c1224c20f215261d881fc520571d8a222c24281d3c1c6723db24ec1cd01c8c23f924051b781c0b23ae24511bb21cd2229024cb1b581c712258246b1b171c07221a24bf1b861b9321b323451b261b4f2116237e1ba11ae520a0222b1b4e1aac204422c91a0c1a8a20f0216e1aac194020a121a01a4b1905204c21611a2b19a31f07210e1aeb18241fc520bf199818971e74207f195a184f1e38205719cb17f91d112025199f17d11de61f00191717981d861fe3189916311da81e70182316a51ceb1d4318a215571cac1d32188615231c871d34185c152e1c781db4176115ce1b0b1db9167c14321b301dbd169b15b81a661c8c150000e916cc17e594191e25233321432b141ec723b924852c70220b243f25692cae251f24e224562c7c2986241925702cfb2ce5245f25ac2c562f04240f24532cb0307c1dcf1c262c353199a29fa4792bbe310baad6ab3d2ca83196ad43af782da731efade2afa82d283266a876a9802c8d317d18a719e42b13308a2222242f2b212cb221f5200d294c257b191b924023e196329da39f1799f3a0ffa74da9b69cc8a34cac92adbaa306a63aaf8ab0bda2d6a77cb0a7b11d2654a8f6b086b22329aca773b0bdb15527dba4b1ad14afc62062a1bbaa61acc014d19fb1a85baa3e266b9df9a666a89025b19b7ba592a794204998bda266a43e9eaf189d1d411f1c8e6f1aef20ad21308dbf1a4f21ea2260933e1c03229b23df19181cb5213023a21a701bad214723271ab21a84213f23c01a2a1a2021c822511ac919d8205a229d1aa91994201922d41abb19502092216e1bd01915201f21601bdf19bf1fcf20711b62193d1f8b20061bf618b41e6020c51a7d18661e34200e1ab417e41dba1fb7197217801d541f6b19c716441dc11ec2185216e71c521e94180b16721c0c1e62185d15091c801d1b18dc14821b1f1de11794140f1bca1c9b177614e11a9c1cbc169f14831a521cc2151014f319051c8915ff110519cf1a68170080bf07cf82ea0cc991291d421dab2bf796921f8b20d92caf0da51fac20fc2c771c07200d20ed2c5f24561f6920f62cf8291c1e8120452d782def9139937a2d103071a087a2b62d4631f9a45da7a82d1132b1a8b1aafe2d5932efaac2ac6d2e1432a4aa86accb2d5332c5a855aa3a2dd23138a31aa55d2c0330749baa9ca52ae72a9d9add9d22294a20b5a004a4d32745a24da51ea7d32436a46da966ab852273a481ab06ad182535a5caac59ae4c27dfa5beadadafdb26f7a51aae05b0d023fba532ae16b0111b2ea597ad5daf6814dba348acd0ad001dcba1a1aa5eac301e6ba046a930ab4d12529e11a8a0a9ec9adb9915a4fca5cb9bf386a899dd9e1e9c6516561cb81a7797f217671e941e038d6f19f81f4a206d0c061ae4209a21fb14621a36212e2232186c1a42219622ce19641a392158226919bb19c9200322b919a3198220a521e8193919442061211a1ad71812201c21391a9418b91fd520721a5f183a1f8920931a3d18d41e4d203b1ae417361e0520d3199617d91d791f93192817651d021f3b19aa16301da11e8d186716ed1c341e6418d415911cfd1d3d186315511c951d14182a15b81b191db017ef14ca1a5a1c06177e142b1a091cc1163c149819591b6116ae148c19551bea162e140b1a701b01160080b901098209027e9d631b841cb72c729d0c1cce1c052d189d691c511dd62d899e221a761b8c2ddd8f42986493862e4b25609b7799512e0d2c429d18a0332e3b2f6fa031a4992ef4303ca410a7232f1e327fa75ca9bc2e8b32e5a8d1aae42e6832a5a83daa2a2e513265a842a99c2d9a3197a62da8ea2c572f21a582a7df2ba82832a519a8342ab19fb9a6b2a8272952a541a89ba9e328bfa4e8a8aeaa5027a4a446aa5cac5527f9a49eab5aadfe2715a545acfbad6e2643a581ac4caeca23b5a45fac2bae942011a424acc6add619a1a35bab42ad669340a2fca950acd29d9ea0afa8b4aa029d979ed3a61da9679c579b5ea4e3a6de9b5594019f0ba3d49593109d0ce499bc0e48156c1c931a4e17fd16171e831e9519df180c206e20d51842198b20442163195f199620702117193619bd208e21cb18f9188d209b217c18e91863207021f6189c180f2011215519a418ea1fe0209e196c18721f8420d1195718f11e64200c1aee17a21e2920471a94171c1e981fec193617c41d321f9c199c16671dd01e5019fe15ed1c451e0f19b515a91cea1d5c180e153c1c831d73184b14831bd61c0c18c913e41a6d1c06182413fb19921b6c177812b819f51a8816361228195f1a3c16ea116e18ff19ba1743137b18bf1958187e8456823b880d8bad9fe18f4897e42c28a0ab903e98702d7da1349aa19b572e5ea39c9ac59b122e36a2179b3d9cba2ea4a0679dbf9c6b2f622564a058a1592ff42c19a36ea56f2f84308da433a67b2fc431fba515a8632f5832e7a738a9fc2e793286a7c0a84f2e4132fea66ba8b12d583152a614a8332d0c2e35a68da83e2c1325f9a692a9b62af8a44aa8e2a97129e0a64aa853aae528a9a5c9a840ab9e2718a5a0a9ecab9526bfa488aab9aca425a1a420ab69ad4b2384a478ab9aadbf1e2ca434ab65adb1196da3c8aa1bad579368a328aa96ac0f99caa25fa92dac809df2a086a82eab8b9e469e6ba634a90b9f359c2ca4d5a6229e4a986ca02fa4909c4894e99a5da1879a0087488c2b9eef94a912141a720d720dc815d31d161d30189216841e5e1efc187317eb1e441f83191a185e1f0f20b4190a18301f2a20481920180b1f4720b319aa17e01e2c2054196a17b41ee21f0819f416411e6c1fbd18c516f01d461f0c194716921ddd1ec318f815421d701efe18b715fa1c021ea9186415801c8e1dc3181e15631c6e1d7818cc14001cee1c3a1851144a1ba51c5c18de13db1a641c1f18e1123b1af61bcb171c12cc195b1b851720127d191e1b4717c7126b19e41a0b1739118b18fb1970160711d4170e197c1500806882ea87a382d4a04296b497562da6a2fa9939981d2e03a45f9c249d782ed6a44b9ee19d312f83a5689e239e492f40a6bfa110a2df2f839f22a263a5443053275ea400a71d30fe2d22a63fa82530f83009a625a86b2f0a32cfa6c6a84f2f263259a7d2a8452ebc31f6a6cfa8b42dc9307ba6efa8de2cc32c5da65ca9be2b3691aaa75baa972a84a75ca819ab232aa3a78ca8f0aa4a29f0a60da93eabb628c2a599a922ac4f2885a5d0a943ac0b27e8a4dea96eac782564a4fea997ac592325a4eca983acac20e1a38da951ac8f1de6a229a92bac9918cba1a8a893ab9311dba012a801ab4691749fd8a6a2a93697529dcba425a886962f9bd6a182a5d68f69981d9e3ba3038fb5934195a49f6f0e21066a1871977714530f991bd613d613a813051d581ac415d414281ea31dd518cd15221f341f751a6216ea1e901fe01a8d16f61ea91f361a6516d91e901f981ad916801ea61f571a7116771e921ffc191e16191e2f1fae19fb157d1db71eef1964152f1d3a1e81192c15e61cf91d9319ef14981c921d3319a314211c341ddb185914d11ba51c8a18ae13111b5c1c4218e612901a0a1ce5179b12241a871b5a1719128619c41a971798110e19851a51174611f018811af5165e10ee17f418e816f70c2514e114c017008037034088160b18a00995f69ac62acca3119dcb9f3e2ec7a581a277a31f2fcca4b0a235a3792f85a64ba180a13f2fffa51da32ea3f52fefa431a494a4113011119fa4cfa60130732aa1a488a6e72f892f4da63aa85d2f303163a726a84b2fa431e9a6baa8af2e04310ca8d4a8ce2d952fdba6cea8fd2c772b92a72fa9d52b86181ba841aa222b3ba6f4a8aeaa762acba672a846aad529e7a580a87faa2d29afa526a9e2ab75283fa570a931ac7b26f4a47aa97fac8d247ba457a97eac3023f8a320a967ac6321c4a3c7a80cac051fb1a33da841abe51c98a291a75caa711ae6a078a66fa926179c9f3fa5caa8b710c99d51a417a87010ae9c40a25ea6b00fcd9a2ba053a4c00eca980f9c55a1bd140894360c029db417bc0c6b1bb80d01195212f11cbd1b5b196e14251e9a1dde1957157b1ed61e961a7f15a91e891e5319c315841e141ff019ca155d1eb31e9e19e215ee1d7e1e1e193a15721de81da718c814171dd01dfc18b514d01c731d4c191f145a1c131ded18ce131c1cc11c291988137b1b781c5d191a131d1b341c0b193f126c1a711bbc18f711081a0d1b7d1873114019801a2318ed1086188b1982170a10da17dd1860162b0f8d176e1894150c10ec160c183514150e38165e182516ab0e62159e177d160080e78745881e0b09a0289c2b9eec2be0a20da085a0d52e82a5cca1c4a1de2e10a6aea382a3292f7da664a4f0a4ac2f3ca667a488a53d3091a565a462a5113048a6b4a6b8a61330fe1c47a6c9a72130942b55a571a8bd2f2e2f25a66ea6232f7130d8a67ea7a72e473008a767a8192e0c2e4da7c2a80c2d1e270fa82eaa702c94a4d4a8aeab2f2cf8a7d7a8b1abb12b9da725a869aa312a18a6a0a8c8aab52935a6c2a813abc12813a582a840abf72798a46aa838ab212622a45da833ab6b24f1a358a890ab832244a325a8b0ab1021e6a207a832ab8f1ec1a1daa608aaca1dfea0eca51aa9081d62a0f1a458a87c1b199f3fa3c2a6241b769d1fa165a5b71a019cd39f28a44a1a6b99739c1aa2e41970979397519fb4174394a9117d9bc418338c8a19b4937e18ec0b521c61134e189011c71c1a191a192413571dc51ba9187e13501d6f1c2219e4133f1dc41c631926142d1d2b1d831a4b14d81c3a1d211a2114951ce61c6c1ab313581cf91c181a5513c91b641cc1197012731b281c061a25120a1bbc1b9a19d7114c1a3e1b3e1973117719491ae3187110ff18d21987180b10881851192218a80ff517fc18c117ad0e8317b41851175f0e36170e18d016070e50160918ae15af0b08151616ab16860d90142916c41700805c8c358d350dcfa0249d46a0ca29a0a302a117a2672e0da5c1a2a4a34a2f00a6eaa366a4982fe2a5f7a302a5ad2f0da85fa504a6f72f90a835a5eaa72b3062a98fa561a532308ea5e1a669a81c300e1e06a80ea9762f752aa0a5c0a50f2ff12d3aa653a7a12edd2d2ea739a8bb2df02bd8a6f3a8e52c8021baa82cab562c45a76ba816ab832b2fa77da8b7ab0b2b1fa788a89eaafd2905a8d3a862ab1929aba60ca96bab5f286ba597a856aba127d2a46ca832abf32546a437a820aba02497a309a8d2aa712314a38ea778aa2d2101a35ca740aa551ff3a275a68fa9631c50a1a6a51da91b1a07a0cca482a8ba19369fb1a39ba7381bbc9de2a1e2a5761a529c65a0a0a4bf1b7d9ad49cb8a2541b1a983995109f34191e95bf147d9cd5187392c318a798fc19118cf81a6413c61ac70b651cde18081bec0dd91c721b721bdd0fdf1c6f1cef1baf10d11c851c171c3f11791ca11ca51bb911801c5a1c311b7011361c141cbd1af5107f1bb81b0c1bce10091b3f1bfc197a102d1ab91a8e194e10c619451a2e19271061196419e118a20e9f1802190e18360dfe1732183218b00ce916d117d117bb0afa15b61681177c0a17157d15f416290a671512156c164e08ae14bb14fe156f095d152b178c16d30b0b14151681150080dc858a888a08e7a0529c0a9e372aa9a449a233a3652e97a620a30ea4e72e1aa729a4aba45b2f66a67da42ca5652f54a7e2a478a59a2ff7a809a63ea70030c8a9a9a6cea7dd2f88a85da60ca8e92f4fa512a6b7a80b30011820a648a7582f2e28aba7d9a8a62e1a2931a714a9d92dcd25d1a7e5a9e02c6aa235a91aac6b2cc9a607a9d1ab032c97a876a8d0aa3b2be9a6e6a71cabe42a82a778a803abc2294fa733a877ab03291ea63aa810ab0d28d2a531a8fdaab826f9a421a8faaad42545a4e4a796aa9e241fa328a71aaa7c2375a273a696a9fb2128a203a653a93f2160a160a5cda83d1fb0a096a47fa8e81d779ffda31da8bf1daf9df5a188a66f1c629c14a0b8a4251a399bf09d39a36e1bbf99f89adaa1441b11981492269fc61a46959c16109a101a228fbc19fe8c9e194d85ce1be7157e1ae7046d1c01191d1a300b7d1ca119a1197b0d621cd41a0219b40ef81b2b1a5819fa0d6d1bc119fd18a60d7b1a171aa8185d0d191a17196918090d3819b318b318710c381962186218430c77181a181a18120caf17c616c616aa09a816691666178e06b21544152e173806c714e5137417ac05b41308136c17bb01121386129c17a301c21254126217a5018410a010461679818f0e170e2d157e013e0ca70da117f38bf98f9b16161cd4a0c99df79c9629eaa479a294a3e92d9fa51fa4cfa4f92ef4a67ba47fa5472f01a837a50fa65d2ff6a7ffa4d6a59f2fcca8cfa486a5ad2f4ca7ffa58da8173047a72da75da87d2f12a71aa819a90e2f4ea535a7a7a8dd2e04a161a7f8a84d2e8da234a73ca9842da9a1afa88baac82c36a7dfa8d1ab332c48a8f8a849abe32bd2a812a9eaaa8e2b1ba862a8ebaa812ad3a75ea8fdaac629fba657a8b4aaaf28fba525a8d0aa16282aa5eca7bcaad226d1a4cba748aab625c4a400a732aa8c2449a4a9a6f9a9c22358a3e9a58aa9cb226ca227a5c1a83c2171a165a426a87a20faa082a395a7ae1eb5a047a217a77b1cb59edfa009a6431ca39cc99edba4521abf9a1f9c97a298199499a698f0a0061cba98c1917b9e811b9b975f112d9c2d1c5e96b3178d99021c97944a1906939c1ba690a71aa512331b788bd21ba918c51b7b04091c4a19161c240a781bc019851b930cdf1a4e19f01a400c541aea182f1bc90861199718b61a90080d194718e91a3a084418c516761ae2070a174116f9198202d215bd1487193f025015571495180682191406121718d6813b1360114b17c781c011031185179d85b110090f63175c85b710400c6f172385090f200c39178b877903358b8114c787320369041a196788de8f6d17e51abea1889e09a0482943a52aa3c4a40e2edea588a44da5052f36a6a2a468a50f2f77a6b5a477a5222fbba6e6a410a65e2fa0a706a5bea59a2f52a914a529a7cb2faba7bea6e3a8542f09a8f9a722a9042fcca8e6a7c8a9bf2e98a787a818ab6f2e00a717a948abd62dd8a634a90bace32c1ca9d5a804ac1d2cd3a7dba85aab172cada686a83baa752be7a696a812ab7d2a57a7c1a8f8aad32990a695a816abe128fea536a8e3aa192896a52aa8cfaa8e26b6a49da7a4aabe2518a40da731aa8c24eea39da6eca9272482a333a644a9372337a35aa5bba8a9225fa2e1a45da8502115a12da482a7ad2019a075a2a1a619203b9f8fa1fba5091f539ea2a065a59c1e3a9d679e24a4101eec9ad89923a1b51df2980b0ca49c5b1d56989d16c098171dc696e6189e93c31cb994201a9b0c511c22936f1a6b12031c9391231a1115991b09908a1aad160e1c698d2a1a3b16911bcb8c9f19ae15e51a898c9e1833150f1b028e9c17f212991ab38d2016c30f251a658dca143b0fba192b8d4f137f085719298e4f113588ff18f58d380ffe87bf18c18efc0b8a8d6218128e640b1a8d0a18b18df20ac68c90174e8d6a04988f7416f88c41044a8f32168f8d0484e190ed156e8cd08e5393a915208b818c098e8b175680bd102814311b6ca1789d8e9e302967a444a273a3a22d92a514a4dda4aa2e1da67ca483a5fe2e6ba6d4a493a5122fc3a6eda4aea54f2f15a7aea59da66a2fa7a706a690a79f2f12a90ca77ea8d52f3ba8eca7a0a97b2fd1a626a71ba9de2e02a807a85aaa692e54a853a87eaa962d15a88ea84babf22c15a808a9c8ab7b2c7da726a972ab382ca1a696a851aa4a2b9ea6c9a8faaa6b2af0a6cfa83dabec2987a686a8ccaadb285fa624a84daad1271fa60ca866aacb26b0a487a779aa752537a434a761aac4242ba4dba6fda9fd2333a32fa6a8a9c22216a24aa50fa9d32170a19ca471a8e420eba0cda3b8a72b2069a0e0a2faa6052004a0a7a1e3a58d1ff09d1ba058a4101ec99c9d9dc7a2cf1d7d9bb99a7ba1ab1d7f99f291959fb21c2498bd14989b2e1d6d96d9192c8dd91ca394101c00161a1d9793491c1a19631df291171ccd18111d2d90ef1a7818b71c918fc8196916cf1c5790ac182f14641cf08f2e168810ee1b598f90147f09361be78e3c141789ae1ab58e3612438fc019ca8f1f10b09167191b8f900c91939818848ea2059e94b217fd8d2a05779575168e8de70441953616368da90449943016028d73041292a315f38b780a2d918c15b98c0c04958ef01411898b098e8b9c16e28cf58f579199180000751da11e821cd69f08a0e49e252a6ea4aaa189a2e42d81a58da360a4b52ed1a5cea3f6a4b22eb4a615a429a5f82e36a797a43ea6282f6ca7f8a4aea60f2f9fa7cca578a7c72ef7a7f4a6d1a7de2e1da949a8dda9002f35a624a7bba95a2efba5e7a7d0aa162e9ea6cba75daaaa2d68a5b4a751aa202d53a59ea847aabc2c58a695a8b2aa592cbea546a8bbaab52bf4a5c7a81eab662a2fa683a8e8aa8b2997a550a879aab7283ca529a874aa1f2809a502a841aa1527baa479a70daafa257ba436a7e3a93f251aa4bda67ca9952478a327a638a9dd2331a234a58ca8972230a11ea40ca8662177a0daa28ca73520be9fd0a16ea6041f9e9ea0a068a59f1ea99d1c9f89a47c1d029d979c68a3341d239cb499d5a1e41c229af30b049e4f1dae985718d1961d1dbd960e1a408dec1cbb95b81a040db41ca294661ac30c771c3c93fc19730c2c1c799284191d12551cef911619a211fb1b6e910a18e10a161c06924b16460a731b7892c214bb89ce1a0c92da10f88f4f1a8491270760945019b391f78c7196fa183d915991119811186a9151928f974818fa90e091cb97cb17b1907091f696c717cb903e92b8950118ac90ed9160958717a890aa91e3954617f5905192279627160a91e29256968b176d90e892ca953d1500003416ff196489cea24ba1fda05d2cbca422a201a38c2d6fa4e5a254a42a2e15a5d3a302a5762ea2a56ba49aa5b12e0ba6dfa42da6fa2e55a631a57aa6bd2e80a6cda538a78c2e4ba610a715a88b2e87a79ba70fa9ce2ed9a834a86daab72e80a852a895aab12d78a890a80caa5c2df2a71fa871aab52c05a8b7a853aa4c2c4ba7efa849ab082c96a7bfa83baa652a42a6d3a855ab202a31a6a9a8deaa602999a543a89eaa982857a527a867aafc271da504a837aa2b27dda464a7c6a9422694a4e2a696a9842521a43aa62fa9db2486a3a8a5cea83b24bba204a572a8c322c0a104a47da7232238a1eba29aa68521d9a002a235a673206fa02aa14ea5ad1fed9e729f6ca4561faa9d679d03a3cf1e5e9cf89920a1b21d899a308c809d3c1e2c980b17509af61d2e94191c620d0c1d7692cb1c5f16c71c3f92f81c3a18871c1492aa1c18193f1cf792e61b5b17771c5194cb19b40b171c88938b152b91521b97939611bd935a1bc59327087e96da1a1294e0905a98071b9d9415945499f519b5947795299a931964949796c79a9c187494eb963a9abb1805945696d4996e1871937796a899f7173b931596bf98f917e99245967798801795920296b5985217a4924c968498b217639180951a983b16bd8e749326989c1400009416d3183d0221a333a19ba2462c19a582a4f7a4592ddca568a293a3d12d94a515a302a4102ec0a5fca397a4562ee8a566a422a5852e70a612a568a6aa2efca60ba696a7832e43a73aa794a8422e81a7e1a7bca8fe2d6ba7c4a611a9172ee1a9dba83fabc92d60a847a818aa0c2d50a755a805aa662c2fa865a751a9ae2b02a8a3a74ba9b62a94a840a810aae929c3a676a8ebaaa52924a67ea86aaae728e5a555a853aa4a28b1a53ba851aa86276fa523a869aa7b260aa5b3a708aab325b2a457a7e3a94e2578a427a7a6a9f32427a440a6e1a8532495a2cba42da8fc230aa2f6a3b8a6d722eda0e4a1e8a5ca21b79f229f54a5c3208b9ef59efba43520509e499f95a40d20d89df89e17a4c91e229da49da2a2af1d0e9cb69992a07c1d67990a12939c931c2a94171d6e0d691c4c8c471e2c1b3d1cd48e781eea1a161c888ec21d9f1a831c3190f41c1019381c748d171c1a179c1ba98e64196211a11b7592fe130494d41a079535936699d71a5896e8973a9bf81945966298299c74191796c7982c9c1d19c695dc987a9c5a1854958e98449c2518cf949098e89b4b186e942b981f9bbc17fa93e097779ac217b793f4970d9af317db92a097c9999b17e3925d972a9933177b92a5978a99a6167593db9706992d1500002e18501af189a5a2a4a347a4742bfca47ea413a6a32c3ba4cda153a3032d31a47ba098a1452d11a53da1d3a2f92d38a5ada250a41c2ea3a5efa453a62c2e61a639a795a82a2e5fa60ca8e8a80f2e8aa666a886a9c42d3fa701a8a4a8ad2d4fa6e9a7f7a9b42d62a6bea802aaab2cd6a659a910ab282c14a7c3a811ac432ce3a64ca94caca72bb4a562a946ab212a16a715a9a9aa0d2927a6c1a811ab7f2817a6a6a818ab1028c4a5a6a8ebaa402750a57ca8bfaa4c26f2a444a895aaa5259ca4fda741aad52410a4f7a6f8a94f241ea301a64da98e2394a2e6a4c3a8832254a155a3c0a7f62146a0ffa0b6a55d21629fd69fe5a4c820bf9e819f7ea42920479e919e0da4101fe19dd09e41a4ba1e439d1a9e6fa3f51c099cb39997a0c61c6a991615e29be21be9953b1d2914811c928c3e20621e5e1ccf854c20c21ed41c78050b20521e831cf384451e3e1db11ce190081b0e17c91cc3949e125e91401ccc95d48e2299811b5797d297f39cf71ad2986c9a8c9e611a4598c19a079edf199997959ace9d6219dd96699a8a9d61183f96239a029dec17f595de99b19c16175b957399009c1217f794e798389b6517e694bd98f19a1c1799945b98739a9b179d946198c899d01759930197e698d416d0931c96059906160000f7161e1c068aeda486a47fa6902aa3a5e7a4aba5402c87a38ca0dea1882c2ea33097cd9bd42ca6a4839c45a2472d05a81aa435a6ba2d0ba787a75ba9cf2d7da649a861a9d22d9ea644a8d4a9e02d60a65ca8c6a9a12d6ca64ea807aa492d11a84da8bfa91d2d66a615a8a4a9e62c34a535a83caa332c5aa678a87caa542b03a7a0a8f1aa772a8ba640a9c8ab782905a610a956ab6728fca5baa87dabf527cca5afa846ab352776a592a813ab622614a555a8deaa7825bda409a876aaa0246ba48fa737aa11241fa414a7eaa9a9229da36ba674a933226da233a5aba8392215a1c7a35ea750220da0cb9fa4a46d22cc9e4c9caea2ae22519f329e24a38221d29fc2a0b2a40720ed9ed4a0dfa40c1c409ef79f34a4df1b3f9d9b9b13a1b21b9b9a9818970d8b1c6a95751f0920901c7c1455228022911c43143323c422831c1986262273214b1c44926b1fa31e541cf991b41a5418371bd192881626940e1b66952e8e319a311a0b98d399679d9119c298009cd99e2d1905997e9c929fdb189198299c409f7b184e981f9c889e30189397a39b0b9e55181097199b689dc1176596919ac79cde17e995269a509c65175495c6990b9cee16cd943799b19b3817c0943d99ec9ac6160b94c998709b8a1502932a98249a18130000d719471c2b8518a367a6e9a7042a01a36ba5baa7652aaba50aa040a1702b45a00f243425f92a12a1891c1e1c7a2c9ba549a603a7c92cbda5b4a86eaacd2c0da62ca911ab042ddca634a91aab212d64a714a9beaa202d0aa8d0a837aaf22c12a7d7a76ea9862c9da659a7e1a8372cf6a6fea7e7a99d2b3da8aea8c0aa712a5ea81fa9e7aa9f2915a8bda9f5ab242999a79aa9ebabab28b3a614a928abf32779a6b2a8a8aad326e5a58aa8afaaa12660a573a869aab625b2a445a810aafe2449a4e6a7c3a96f240ea4b5a7bba93f23fba30fa76aa970226ca497a6d8a8192186a11ea535a98c20849d6297b2a39321e09d8b20771e3722f49ed19d71a3be2116a0c9a19ca57b1f7b9f5da28da5a21dec9e33a267a5211ec59e009d25a1a51d1f9bd118cc9c0f1c2c1067226122f61a5d19d724352580199819b824c72476192519392478238f1aeb115720ce1fde1ac899761310924b1c1e9cb498eb9beb1b739b6f9ba29d2c1bff998e9c1f9f5d1a0899e39c919fc719e598e59c909f6219e198aa9c319f1e19da98a89ccb9ed618b798729cb99e12198d98419c329ed4180a98fa9bd99d8f18fc96449b409d18185296939ad69ce216c095e399cd9c3016fb95fc99cf9cfe1557958399619df611959496988a9bb11700008511011bfe0564a618a839a939297da509a85da9782979a4bca180a3f3294e224e2d812eef283ea2481f4222872970a5aaa841aaf52921a66aa91eab7d2a79a6bda994ab332b79a6f0a9a0aba02ba0a609aa28ac032ca8a670a99eab1e2c5da7e1a6d9a8362cdda51ba548a7b92b26a740a8b0a9502a34a768a905ab85294ea773a93dabe328dba647a940ab8a2826a615a940ab0d28c1a5e7a821ab682793a5d8a8f6aab2264da5afa8b8aa762615a572a885aaac25dca454a832aa172591a422a811aa6b243fa404a8d3a9e32347a4b3a7a1a9aa2246a3d8a6b9a9de20ffa1aba67ba99c1fa39dd19fc9a43221c71c1329a929f72466a079a48fa62b202ca21ca560a8a71e2ba16ea45ea7951edc9f39a379a5f91dbc9ed7a095a44f1e9d9cf496d39dcc18d513862368231415381d822761289b154d1e1328ec28c91b291b3a255326801df5912a1dad1d141de09ad098c09d401c869b229e87a1ab1b759b4d9e6da10c1a1c9b0e9e23a11019849aed9d12a14918e699e89de7a008184099819d7ea06317bf98369d34a0fd159c98ef9cec9fa51524988f9c3e9f4e1583971a9caf9ee514dc969a9bf89d80149a964c9bb69d4e146e96d89a689d3214ad96b49a2a9da014ac95299a6d9d6710ca946099ee9b2e183e12d81e281fd41849a44aa75ca86f28cda440a7a1a8352897a574a91aab242921281431ff33ac2887a6beaaecabca2ba4a54aa99daace29d9a512a9d1aa9b2911a657a914abf12800a65ba94aabad2802a755a91aab8528c7a68ba96aabd1280aa670a8d9a9012abc9e702456254c2a87a6f5a80fab43287ea55ca9e3ab682752a561a982ab5a276ea529a956ab48279ba507a92aab032765a5e8a8f2aa672656a5baa8a1aa032618a577a861aa6a25cca44ca823aa082587a433a8fca990245ea412a8d3a92b242fa403a8c1a98f230ba4cfa78aa96323a3a329a720a9522206a43ea706a9cd21c1a2e5a547a8661eef921999dd9d8996599fe0a330a72095d1a0cba4aea71519c89f6da45aa7381a2da055a46ea77f180fa000a328a63812b19cc19e95a1ba1559868920dc20ab14d3201f2a4c2b89975e224f2b5f2c891a6a18cc24ed25391d65975b0a4a97771dc29cbb9e5ba17b1c0e9d7f9ffca1e31a9d9c179fc8a1261abb9bd69e95a1ca191b9b899e1da12d19699a569ebfa0b1183a9afe9da0a09218d899c19d63a004189899779d37a0441839990b9dd59f0f18c398a49c059f76173d98419c489eda16af97ff9bbf9d6f16e3965e9b549d2216c7964a9b199d4e150496e19aff9cc914b094c199689ce51300002e1dca1e091217a3c2a619a87f2659a4eca74da90a28f7a167a40fa60e2573129a119810792003a429a859a94128b2a4d0a84caa3d2922a5b6a87caa3c2930a5b6a870aa1a2932a5aca881aa0f296da5dfa8c5aa17299ba50ea927ab202917a5bca868aadd27f8a27ca666a8bc228aa5bea86baa8d25e3a52fa91aab2426eca52da92cab0426c7a503a90dabce259aa5cea8e1aa8f2577a5a2a8aaaa472544a56fa86daacf24fea444a851aa6224d2a42aa80daad82378a401a8dba95f233ea4aba7a0a98b221ca45fa77ba9112228a412a743a9e8211ca4efa634a98b2100a4a6a60aa926213ca29ba570a85720da9e1fa39aa5f01d079e02a2f5a43d1c6c9f14a3e5a5721be49fb6a386a6a219989f06a490a6cc166c9ff3a3a5a60b19fc9efba353a6401c779d53a239a4951a10223f2b312cf29d1a26e02e39304a21a09b129f19a1371ee39cefa0c8a3181c419df7a053a3ac1afd9b96a0d4a2191a199c38a085a2d0185a9bd59f2da28e18fa9a919fe5a16f18ab9a0d9f9aa137186e9ab39e30a11018cb991a9ee0a0d6166f99909d53a05416cb98f49cd39fd9157d98999c3a9f2b1641984b9cb19ed9152a981b9c229e9e15be978c9bdb9d7f159f979e9b9b9d43156e970c9b5e9df816ac954b9ac79cd71400005d1a691d818ebda229a6e5a77a2552a244a6b5a72127789fb3a3daa4c524619ee7a2fda4a8242fa441a7bda8e92739a44da8a6a99328bea47ea8e0a9d8280ba5a4a81daae22825a5a9a839aae2286fa5b5a873aadf28c5a5c6a8aaaaf0288ea51aa88ea93d283da252a659a86f265aa428a8ffa96425f7a474a891aae0244ba56fa847aad72487a577a846aa9d2450a55ba815aa602444a554a8fba93224e4a438a8f8a9c023a7a425a8dfa9682376a402a8b6a9fe2247a4bca7a4a94b220ca45ea770a9da216da30ca74aa96621cda2aaa60da9f22041a239a6baa8b220cda1bea56da8342068a131a5dba7ae1fffa09fa401a7881e8ca047a48ca6b61dd09ff0a345a6b71c269fa7a316a6af1b069f5ea3bba5591b079f3aa38da53b1b089ff6a26ea5801a939f3fa384a5661ace99a89c889f43152407c40958020687f69ad39e8ea1ac0b8e9edda056a35218d89c57a0bda24e183c9c32a0a9a2bd17fa9b10a087a23d187b9b899ffca155176e9b149f6ea1e616b39a939ef3a02a17149a1f9e84a0cb168899a69d30a06e160799599dd19f4116ae98099d939f0f166198bd9c539f5b1545987c9ce39e43151f98709ce59ea6140d983b9c709e71141f98149c019e2d1361979b9b509d6115c196709a349cd614810ab119a71cce8876a43ba57ba6e6240ba155a5a9a68f25699f44a4d8a5ca24d9a090a404a6c0241ca35da65ea8b22608a4b5a731a9b2272ba421a886a909289aa462a8d5a93328eea4a3a817aa4d282ca5c2a83aaa66289ca494a8f7a90c287ca3e5a726a90927dfa245a7d6a86c2616a47aa709a9402699a4e3a761a9b9256aa54aa8e4a9eb24dda433a81faa582486a43aa807aa052442a4fca7caa94e2314a4caa79ca9de2207a48ba771a97422f6a35fa73aa94a22a6a340a733a9e12161a319a71ca97f210ca3f1a60ba92521baa29ca6d4a8ff2081a266a6a9a890201da2ffa55ca854206da166a5c8a77f1fcca0d0a4e1a66a1e36a059a45ea6f01d789f01a410a6ec1cf99e90a3dfa56a1c9d9e1ea3bba5ee1b7b9edda29aa5131b7f9eb8a28aa5ff1a409e4ba260a5e51a8a9db3a198a4a81a10982e9c699d3717ae937c99a59cf014259c7c9f50a2d005989d76a021a3128d869c96a021a3f513359c61a0f3a2d0140c9cfa9f88a2c014729b799ff9a14f150a9bed9e9ea12c15c99a9e9e50a1fa14769a509e0ba12614059a089ec7a0bb149f99bf9d93a0d1131c99719d4da07f136a98f89cec9f0b13d997919c669f93126397349c1c9f2b111d971d9cd69ebc0fa096ba9b2a9fcf0a78961c9ba19d6f150080b7a2aba49422b41f3e223523682b122473276128922c8926a9274b28e12c0d28b72772280e2d3e290028e7288d2d0e2b3628f328892d382c2528f0286f2d282d81282a29362dbc2d9328f3287c2de02e5327fa27802cf22e39a4ffa68c2b5729deb230b4392e972ea31c3f20892d412dd9251328062b2f2adf25e327072a6827ec251228d9296e250426b1274c29f82299251c27412804209b24242664262b205625b9273128b79c58a83ca93c292fab5bb38cb4b2a5c2aac5b22fb419aeada996b105b341a8bda9edb169b3851843aa67b21ab4232b4ea99fb10ab3782e78a601af7cb0132e2ca13fabc9ac232b0c1ec5236a25c61c4f1d2723de24921c8d1c5a23d024e419911c2023cd247a1ad41cf7229424fe1a831c9b225724a21a301c22221824411a971b9a218223de191c1b4b2116238a19ae1ae020c3224919641aa620412201191a1a832010224c19c8195f20a12190194c190e20712161192019c31f1521a718e4184b1fda20e9189d18c21e85203e1875187b1e5d2086181018231e14205618d617f31ddf1f2f183d17bc1d911f2118c216511df71e99172516b21c161ed016d115601cee1d7917a615431cbb1dc8162c15171c7f1d81166a15b21b071d8915bd14321bf51c2915cb15cf1a421c2f150000b31213831303d31cc61d211f172ca51e7725de24012d9d20a125e1263e2dc222392630277a2dd624f725da26b22d6e286c260b27492e492ab3264027352ec52cef25e726212e0a2edb23df24522d202f48a00aa4952cf82e45ac8fadd42c712dbeae5eb0a72d692db2a918ab332dbb2cc61bea1c1e2c38299b232124802b37246e245724b82ab91d6822092459290d18a3203f21d12626130c91ff989f25ad9e8da78ea9b72260a40bad74aeb59e0ea88bb0cdb170a404a8beb007b2c6abf3a60eb04ab14ea836a639afb6b03aa2eba5aeae66b01a231ca513aed6afdd2632a4f3ac4bae86282aa18daa4aacdf242c9971a47fa5a319bc19b21eac1f6214f61a1821dd215716291b8d213b23ec0c341cf721e5237e17e11bba214b23ca18721bb7211a233419da1a8d214c23d619681a2f21d42276191c1aea207f223319f419be203b228019e1195320c121471ab21913205621611afa19b31f0f210b1a7319401fb920a4190d19d11e6e206f198118871e4020c318e417161ee21ff8189a17d01d6c1fae180317601dfe1e06189216f21c7c1eac172d16761cfe1d4c172015f91b4b1dd816dc146a1bec1c90168214001b9b1cbd156a14c51a7d1c97158f14681a381c4115e813161a1b1c6f14ae116918b119e114008050067508330dcc14ab202121902c1417dd227e23aa2d5a14df222a24ee2d7b1786239c245d2e971d2e249e24fb2e8522702380242b2f2227d4226321682f4d2ac6204b1dd12e932ca19c3ba1772ea72dbea6e3a83a2e712e2aaa0bac842e9b2dddaa6dac092e9e2c2ea979aa582d162a4ba539a79e2c48240fa2bda4562bac0e6e9fa5a2892af59dc89c30a08a2868a017a27ba4c82717a134a756a9342602a352aa4bac0525b2a4b1ac32ae4624c7a5d9ad97afe51d12a611ae00b016a587a5c4ad7baff0a4cea416adbaae88a4eea358acb6ad4aa1b4a289abd9ac5c9c9fa182aa51ac109c07a0f9a8a9aad89cf99990a42ea65d9b1a87cf9a6b9eb49bbe15c41cc01c939a5e185e1fb81f69930f192e20bc20540c791ae420f721d811841a2c2146226316841a43217b22e917791a122172228018e919d520fc21f01876197420a82139192c194c2060217519e21815202221a7199718b41fd120dd195a18461f882084192c18da1e4820361908183e1e0520e4188617e31d6c1fa7180e176d1d011ff217c2163c1da11e85178316f31c441e5417ee15b21cfc1d00179415411c751d96164a158e1b2a1d3a16be14b41a691ce1156914321a1b1cad1551149219901b6c153114b5190d1cd514a712f6191d1c5e130080b6058a028a82779c051e441f532d099c1c2044200f2ece9c1a1e871ff42e799ec81cc91dde2eab9d581d9c1ebb2f1a9b161c6f20d32f201c381c331ad02f12255a195c94d52f6029f7a146a4a02fb42bf3a55aa8462f562c79a8e6a9bb2e0f2ca9a81eaa0b2ebc2a41a89ea98c2d95274aa712a9bf2c9219b8a616a9282cd8a018a5b0a7112bc6a4d4a539a7da2928a401a755a8132989a39aa82caa6928d9a303aa06ac682773a478ab0aad0626d3a435acb8adc9210ca55eacf1ad2e1431a52dac95ad6aa05aa4d4ab7bad43a2e9a220abedacdfa0a5a106aa19ac58a08fa0c8a88baa749ef09d6aa685a8849d3e9beca3d4a5409b6895f89e32a29798500de31217988b8e2215d91cdb1b49147617d91e081f1d16d5183e20f2207c179e198b206e2158188819be208d2114186019bd20aa21b2171b198a20bd213f17091963206121cb16c8182f203421c3179b18f51f002143185718861fa4202d194918fd1e6620e8181218b11e33203b19b9175e1ef41ff4186017dd1d8e1fb518d516831de81e72180116061d901e3a18b415ba1cfa1d211743154e1c8a1d631772148d1bdd1cb816db13df1a461c21161a13f119981ba8156c127619f61af7154812f018181a261532126e18c319b31624124218f3194a1800806582c282c282659e40903091112d07a02f9127124c2efda08b9a5f929f2e87a3049b1d9cf12eb2a22992be9c1030e1a48812f31c5d30a0a0131352945b3054970ba01fa44b30c9245aa465a515302b293fa651a8f62f022abfa71ea9632f872916a856a9da2e4527fda62fa9182e0e21c2a758a9482d9ca1c8a730aa7c2cfea585a625a9a82b5fa5f7a6dda81d2ae6a4b8a6bda8fc2845a48fa81aaae62739a496a981abe92682a482aa6bac7a247ba414abf2ac30204fa421ab1dad5b1300a4efaa06ad6b996ca35faa9aac119ed6a2a4a93fac80a01ba224a9b3ab11a1b2a058a885aa85a0629e55a6ffa8ff9f999c23a4baa60b9ed4985ba022a4829d30949b99cba0659ab5866d123b9b04982e110d1ac016660d3a15611dff1ce0152f167b1ed81e7a15ba17eb1eb31f79182d18631f4320de170c188b1f6220571715185f1f4d203518b017f31e3620e2179e17cd1e22206c173e17581ebd1f1b18bc16051e4a1fbd178e16a91de51e51172416521d771eea17e2150e1d161e74178315c11ce21dd81734157c1c8f1d6917da14111c401d2d1649146b1bbd1c94168113b11a471ceb16e912131a011c7a1637129519561b3216341282191e1b03168a123619361bd415e3109818521a3e156d10d6170d1980130080a082dc82dc020da05190ee973f2d48a2749aa298ce2e0aa3e59a419cd12f68a4499d609e2f300fa58b9d57a0403085a6c5a0bba080304fa8dba0f8a19430daa747a44da5803032a4b8a427a72f302c12a6a65aa80930262475a86ba94c2f6d2448a812aa682e601f43a846aace2d739be3a8e6aaf42c13a4d1a81cab6e2c10a6a2a848aa092cfea663a8e9a9ea2a8ba566a8e2a96c2958a541a97aaaa82829a596a95fab32280aa5c2a9d9abda26b1a4aaa903acec2443a4afa925ac4b22a8a38da9f3ab3f1f78a339a9c0aba81b78a2c9a856abcc1139a159a893aafd976da097a710aa8f97269ff8a5e6a805971f9d2fa4fea65596d29a11a1bca48b958598f69ca2a102953492560c139daf9449067419cc8dcc8d0911471c8f18360d67130f1d571cf212c314281e101e6217cf15c71e781f56184b16ef1ed41f07185f16f41eae1f9118ad16d51e9c1f4b18b516741ea41f1a1861166f1e8f1f92182d161d1e371f5d18bc15c51dc01eb51878153d1d4b1e64183815f01c0a1e0718e9149f1c9a1d3c189814241c371de2173a14b41b9e1c71165513e71a451cf615b7126a1afb1b50161512bc19891bf51593113719751a4a162c11c118291a0016d4106018d31946165710de1638181c16210c471331146e16008022028183620cc2a05c99ce9c312d63a3439fba9fec2e9ca4f4a1b3a1bb2f76a409a120a236305ca5ada245a24f30d5a6cca39ea28d3017a8eea48fa5993077a696a593a67830fca5cca5b1a69e30f2a536a679a87030d0a345a838a9f82fbea0c3a7e8a9362f7ea254a8b2aa3c2ec5a474a8f8aa832db4a504a9feab032d63a6bca816ab932cfea68da8e1a9082b35a6d3a861aaee2977a6ffa810ab362966a51ea934ab1a28b5a439a992ab2f2692a453a9fcab5b2426a45aa91eac1a22baa32ba912ac6c205ea3c8a8d7ab6b1d87a245a8e7aafd1afaa193a7f0a99a1719a169a603a9a690e39f02a555a88c90b39dbba310a743903d9ccea163a5568f479a279f38a39a8e4a98069a8ea0568e31925415019b3a0ee40c751b541454142b11051de31b1116b0132f1e9b1d7917ef14e71ec91e86182515c61e001f581845159a1e781f1318db15701e0d1fb117eb15f41dde1e101741157e1d471ee417df142b1dcc1d4f186c14a41c6f1d0a183314661c161d5c180114281cca1ca718a813901b7e1c5d182d13271b3a1c1b184912721aec1bb217fe110e1a7e1b471772119b197f1ab2169b10c218c519f2152e10261815199315240f8617ad18d61412106f1751182814570d38169e18c714560fdd1513185715008077818388860bd4a0259da89f9d2d30a373a0c4a0872f20a5a0a113a2232f92a515a394a30a30cca69da49ea56d30e8a754a594a6b430f4a7d8a477a69f30a1a82ea732a8b430a3a7f6a684a86a30fea5a7a71ea92f306fa5a2a714a9c12fb8a4bda7caa9122f08a741a72baa3c2ec8a70ba9c4ab892d83a89ea964ac2d2de5a804a9bfab5e2cb1a7cba852aa3e2bdda6a8a88faa1d2a2ea6f0a8a9aa5a297fa5b4a894aa7d28dba498a8e2aa9a277da46ca8deaac62527a459a8feaa0624d9a351a805ab9d2147a316a802ab1c202fa389a7afaafe1cd1a1cfa6b1a93d1ad6a0eda5c5a887192aa0caa404a85216029fd6a225a60516999d1da1dba4b015f29bd09fd7a360156399aa9b38a1021571974e95679e060e5d948f11119a650d218fb718c693c613030ce51b331670139f11de1c3b1acc123013781dc31b2d15a0136b1df71c9f16f313511d481d9c1736143d1d331d3d185d14e41c361dac182b14a01c391d0e19cc13641cf31cca185a13de1bae1c88180813861b761c51180e12201bd61b9818bd115d1a5a1b9b176b11e319d51a1117f7105f19e5198c16131097185f19c316cf0f09180d195c16b90e9d17d61817167b0e4117701896151c0dcd150b1817157e0b911475157515cb0de014b51634170080d282988ca002eaa19e9e31a16129bda388a25ca3bb2ef0a422a30aa47f2fc9a5b8a3a8a4053017a665a466a55030eda696a5e3a6b03073a74da586a6dc3067a8dca54ea6d530f8a654a69da870302ea7c6a79ca83930dfa645a70ba81430e4a5c8a7b9a9632f17a759a8f2aa612e65a7c2a8b1abbc2d2fa9e5a854abdd2cc1a8e2a855ab262cb5a7d4a86cab2f2b1aa769a9adabe5290aa735a952abfd2880a6fea8feaa282890a57da8deaa2827dba455a8baaa7f2564a42aa8b6aa3b24efa3f7a774aab8226ca37ba750aa7f200fa335a71eaa601f5da255a667a9631cd7a04da5a7a8e8190ba047a409a87819149f5ea3c4a6eb18b79da2a149a54c1a899c22a0e0a3f6199a9a559c79a1ad19a0985492879d28192096c414169abc181994cf1891969818fd8e181b6d1392195405731cfc19e5180e0e871c641b6c19e90fe21c661c041aa910d21c7d1c8f193911731c931cf719b611801cb11ca1198411ef1b671c49191011801ba31bfb18df100d1b261baa1890102a1aab1a59187f0fc419371a0e183f0f6819da19a117dd0eb118fc181f174e0d0918a0189c16b50c8417bd171c16470c72165b17cf150d0a751507165115dd0927159815f014b7097c14a814a8140b0c2e15cb15ed13ad0c5c1446151b1200807580c88ab68237a0eb9c3a9f152a4da470a21da3992ef7a59ca3d2a35c2f3fa739a4b6a41130f9a63ba462a53e301ca708a5b4a56f3073a744a6e4a78d303da873a799a89130bca783a7e6a8783075a8e1a654a84b309ea8dfa700a928307ca82da8dfa9812feda7eca8ffaa522e50a868a91eacd62d28a98da9c7ab162d9da8d1a814ab9f2cd9a7dba884aa9e2bb4a6e9a800ac4e2b96a603a965abae292ea69ea823abba28f8a56ca8abaa20279fa549a8d2aa332621a524a8a7aa5c2584a4c2a746aa2f24cfa341a7dfa9c122b4a294a66ba9572126a209a612a98a2097a137a58ba8f81dc7a077a41da8b41c899f54a32ca7881cd09d9aa180a58e1a659c11a021a43c18539bf59da0a20418ed990a9caea1d6176c980995119f70171995b514189ac616f390a41a020d43165785e31b21182118f404761c1f1aca17270b7f1c991b8f187e0d6c1cb01b1218c80e0c1c091b7317170e8d1b911af416af0d8f1a261a8316800d341ad8193016430dca196619b8159f0c42195e183e15500c77180918ec15170ca017b4179f14ca0baa1659165f151509a51531153115ee085715b914951564055f143914c3150f050b13e3131816e604cf124b12f215a0018a110112011578819d0e2d0e401582815a038d0a1814008035810d09e40d18a0269c559e072adfa49da271a4cf2e6aa50ba4a0a4642fe2a6dca494a50b30bfa765a54da63b30d4a71ca570a652301fa80ca60ea74a3002a8c9a604a88030a7a707a847a9273088a75da803aad02f38a9a2a86caab92f32aa0ea964aa8c2f68aa3ba9a2aa322eaea8e6a899abaa2d65a9eea84dab422d71a8fca8d4aa9d2c93a7d8a8bdaa9f2bbfa6d9a8f7aa572a61a6cda8b2aa7f29eea58ba8c1aa792879a56ea8edaa14281fa532a8e3aacb26b9a4d8a758aa3f25d2a44ea719aaeb2314a4b2a6e7a99c221ea325a660a9982155a232a598a81d2056a143a4caa7dd1eb5a074a327a7ae1c2ca0a6a2aaa60b1bcd9de9a0a4a5cd18789c1b9e14a46918d59a209c98a1b717a799b39839a024191f99cf8bdd9dd41843986811139bca196796b8174898811991944e19a68c3b199590721b8715fa18e384d51ba719a7197b040e1c3b1a4519300a911b9c1abb198809e31a1c1a4b193209551af318f318d5086619aa18aa18a5089b185d1705194c084718ea16b718a3021017311553187602cd15b914de173a025015b2122c170a82181421129116ec816d13b4111d160682e31164118b160486d310630f47169e85c710610c34169d881a0f270ce115da896b037e843614c4878c08500dea1800802d83af839b0c3fa1909d26a0ac29efa429a397a4bc2e71a502a493a4032f70a6a1a463a5b32fc9a6d8a49fa505301da707a5d7a52d30d1a72fa567a63d3076a852a6efa7623059a85fa7b4a8093000a929a87baabc2f04a9a6a77eaa382ffaa93fa8b4a9462e06a9fda84dab152e57a8f5a8a1ab452defa821a904abef2ca6a793a862aa2a2cf2a6f6a86daa3d2bcba6cda8cdaa682a41a6aea8c0aa9c2928a69ba879aad52802a64ea87daaca277aa50ba85faa7426b2a4aaa744aa5f2540a430a70daa3e2406a4c5a685a990239ea31ea628a9af2202a383a56ea88e2157a2eea403a8b12063a13ba416a715205ea081a2ffa50e1f5f9f46a15ba5ed1d449e5ba0e5a4c91cf29ce99d83a3781c169bd69862a0311c08992112d39bd31bd9975d18d1967f1bd5950b19368d2a1bff93581aba0c5119f2918c1a7c12dd184c90ed1a1a1597180990911abf164d19628d271a3716e218cb8ca019a3153c19868ca1182f158e190a8eab17f6123919af8d2f1681123a18428dd414460f8c18138d5d1385083c18c28c59114188f917ea8d3e0f01888117af8e040c888dea16dc8d730b148d59167e8dfd0ac28cf3152a8d7504838ca415f38c4484278f5d15aa8d108ad0907814108dc58edd913116218d0d9050916117008027088b0c8b0cb1a15c9dcc9eb82924a433a2f2a2422ed4a5f8a395a4062f24a6d5a4f5a5c82f77a64aa525a6e92fc4a663a550a610300ea7e7a5d3a61730a6a70ca619a841306aa9dfa7dba7573079a836a8bea91e3078a73ea86ba97f2f03a883a8efa9232f57a85aa8bca9252e65a81fa880a9722d23a86ca8b8a9202dfea6c9a846aa5f2c48a73aa906aba32b08a8ffa824ab612afea7c5a81eab99292fa78ca802abd3282da646a8a7aa9427ffa523a88aaa4c26d2a497a74aaa20255da440a721aa632416a4f6a6d1a95d2368a34ea68ea90f2294a295a5f1a89a2086a1a4a43ba8941fe2a0d8a363a74c1e7ea0f0a2b2a61c1eea9fada1a3a5bf1df59db69f2fa44e1de99cb09dd2a24a1c3e9cd89b73a1221c6e9afa94859f721a2998c0141e9a7a1b8296e119238d101bae94161c01169b1a3e92511c18195c1beb911b1cd419f31b2b90a51b68195f1b968fc1191218c81a5f90a518c315ff1a1690291679135a1aa58f90147709ce19569097120c095d1925903712ca881719d48f2310c58e3b181c8f940c5c91f816c18fa905a094a715ea8d3105719471146d8dd9043e95ac122c8d9e043d949712f38c5e040f92ca13f48b5e0a0e91f213d08cf903b08b0c132989ad037e8bee15df8dda909e93e9170000231cb01eb017e0a19ea157a1d42c9aa490a378a4762e4ca586a347a4df2e05a648a4ffa4702fdea67aa498a58e2f3da7fea441a6ef2f23a76da5d3a6f22f36a700a6f5a7e52fe8a68da751a8b52f00a872a8fba9e82f66a7ada7b8a9ff2e49a850a8fca9282ea8a720a88fa9812dbea60fa8b8a9f12cbba6b9a829aac02ccfa62ba956ab4a2c5ea62fa95aab8d2b3da61da972abac2ab4a5d3a801ab96294ba57ea88baab9281ca54ca873aace27cea419a85daa982696a4d8a7fca9c42556a457a7caa9b82418a4e0a682a952247aa346a638a952236da27ea5a4a803225aa15ba4b2a7cb2083a045a32aa7491f989f2ea25da6171d7c9ef8a060a5d41cd89d379f89a4a41cf29c2f9dfea2651cba9bb698b1a0211c149afe8b499dc01b97985618be966a1baf96131a370d2c1ba595bb1a7c13dd1a8a94631a2213891a2193011aa412311b77928d190f15941aed9118199211f61a6b9208180f11531a19923916a010c819a3925e13a5094a19fc92d910e18f44187292320758940918d691fa8c6f966f16f19162911197fb1576915c92a5979b15fd90ea91da97011626916991fb9628165d904192c49588163290ec91689521160b90a491ec95ec158e904c92779577155e90a09303955e173890149369958d1600005618381b110cfaa21aa144a19b2cc3a468a3a5a4ce2d61a455a32ba4802ee9a43da4eea4052f7ca56ca4a0a55e2feba5e4a441a6b42f60a650a5b3a6ae2fcea61aa6a7a77a2f45a786a7d0a8562fe1a7f0a778a95a2f4da829a8a8a90a2f00a832a8e1a9282e2ca876a8eea9a72d51a85aa86aaae42c11a900a91dab7c2cb1a80da967abff2bcaa722a928abcc2aa1a602a96bab2b2adaa5d2a8ecaa41298ea599a89caa8a2845a563a879aac5270ba527a830aad826bfa4a6a7c3a9f92572a422a76da9f52403a482a62ea9542464a3cba5d3a87523dda222a55aa84f2205a24fa487a72f2146a107a35ba68e20c6a01aa2aba5de1f42a0e2a033a5a31efb9edd9e1ea4551ea09dcb9c23a2261d709cfe995aa0eb1c169b4b92b89cb81c0c990b15da98811cd095421b4f8d501cab92631c56161e1cc593051d6f19a41a7793bb1c1b193e1ae9925d1c6917d3193793ce19cc11481a4e938e15ee8aa11980939a11be93cf195a942e88759661198394e1905298a619af94159449994919c5947995219a6118b994a3963c9a11187c94f096449a851712945196d89904176f936c969c993c16f9920696b4986616aa9240967298c21659927e95b2989c16ff91d2952a98541626918d951d984714dd8c7c93319a06920000f115101a840e01a57ba2bfa1f42c60a557a428a5c62dfda472a264a35e2e2fa512a3f4a3a62e0ea617a41ca50d2f73a67ea4a8a54d2fa0a67fa5eda6352fe9a695a62ba8272ff6a69da7dca8f42e3ba751a860a9ce2e38a738a88da9ad2e29a90ca995aa102e07a74aa801aa672d6aa63ea810aa9f2c5fa656a8cca9012ceea6a1a824aa6d2b84a7c6a888aa5b2a45a688a8e4aa902981a59ca866aab4288ca589a875aa3b2890a574a86baa5c276aa534a846aa7b2618a5fca70caab725dda4a2a7c6a90f25a3a409a783a96f242aa446a6d4a8082424a309a511a8d72280a20da4d7a6422212a1faa016a5332102a0909e11a42d20029f5b9ee3a3401f8e9eb89eaea33a1eda9d659e46a31c1d5d9dac9d9ca2e91c199cc19992a0061cc4990c15bb9b531a29949f1c14141e1a2e8f591ee219e219d48e151ea919a9197e8ec01d6319961a3590901cfd18181ab18f171c74187219c78e0c1a3c16ca19d29058166f8a3a19b4943d8eb398b3183f96ea974c9b20188296db98369c5b181796d798339c1018c795e5983a9ca91680959e98429c53160895a098e79bc616a7944798329bfd166894fd97369a6616c2937597b9999716f1921d977c995116e2924f973b990616ba919f96f699d614a29258976a990614000019199f1c87029ba344a33ca4e42b88a4b0a499a5f62c72a4fea204a47f2d66a4cfa142a21a2e23a517a2a5a3b12e1ba5aea3efa4fd2eaaa59aa522a7132f69a6c1a7f0a8102fcda632a853a9da2ed6a662a8dca9942eb8a7d2a892a92c2e69a66fa8b9a9012e0da6c8a8fca9052d7aa6b7a8fda96c2c13a7dda811ab362cb5a681a98aab8a2bf7a5aca935ab362a45a63ca9e1aaf4280da6fda807ab79280ca6dba8fbaae127afa5baa8d2aa052733a585a8bdaa0926dda45ea895aa642590a418a83caa91240ba4ffa6ada9072418a309a604a90323cea222a57ca8fa218ea16fa32ca769216aa00fa127a5cf20b79ff49f54a43720fa9e18a028a40c208d9e2e9f82a3e61e4d9ee39f25a4c81db19d919d51a3211c179ca99989a0fc1be1990b159b9c601a0996371d2114321a8c917e205e1e081a8d8c5220711f1f1b8c854820ff1eb11af184ba1e491d3b1bba8fe11b8e19911a4094ad141d8bc8195095de8e5298e4193d97e097829cb01836996a9a149e45183798ba9a999dde177597989a679d3417ce96719a369d9b168b96379a039d1016fc95ef998a9c7d155a9583990a9ca315f294f9983c9b00169994cc989f9ac5157c946898789a4e164d9444989299af16f093c3972b9994168a927296009ac5120000a919ca1c321042a5ffa497a5162bada44fa5c2a53d2cf5a3aea176a2fd2c2ea3e09de99d702d32a4cb9fe9a0f92d05a620a4d4a5962e82a64ea7a5a8a02e48a64da86fa9992e70a60da834a9962e43a6f8a795a92f2e02a6e4a7daa9cc2dada615a8b7a98d2d50a61ca852a90f2d7da525a868a9512c18a6daa855aa602b87a726a928ab832a29a796a914ac9f295ba687a92bac952813a63ea90dac1628fda5efa892ab1a278ba5baa816ab25262fa58da8dcaa3925d6a43fa895aaa02483a4f4a731aa0d243aa479a706aa1d23faa3d4a6aea93222e2a2e6a5c1a83022e5a192a44ca74122baa03ca093a4cd22a79f459b3ca12522c69e179d85a11d21899fc6a047a4391f8c9e8ca07da4081c239e35a061a46f1a399d4d9c6da14d1a4c9c1515fd964a1a4396751ef81d521a5713da212722541a40144823cf22491a0b067022d721ac1824925a1fa41e3319f291bb1a4a194a190293b916b18a9a186e953388bd98bd18b2976c991b9d48189098399be29ef417dc98539c3c9f4118a9982e9ce69ecf176698209c659e46161798ac9bf39dbd1647971d9b659d1c16d596879acc9ca5151096239a7a9cf8155d95cd99079cee14c4944299b59b5915b2944699f69a09150a940999299b62140e93ff97a099f0100000fc1a291ed589dda2fda5aaa73c2a36a372a512a7242bf6a4319f08a06b2bf19fad23bc23072a66a15c91e012ff2cc6a46ea60da88e2d41a521a8f4a9e72d35a6d3a8a4aa152ef7a610a9bdaa462ea1a710a97caa1f2e50a7b8a837aa8d2db7a691a720a9132ddda638a72ca98a2c5ea75ea825aa152c0fa87da984abdb2a33a8b0a9a7abd62905a807aa15ac2129eda7c3a9deab4c28b4a64ea98eabff278ea6c6a8eaaa83262ea68da8d9aaff258ca593a896aa5625b1a45ea836aad32453a421a8e0a90d2421a4e6a7b7a9d6220ea455a779a9012251a4f3a608a99520e9a16aa573a98d2023a00d9c63a40d21019d7a2161225c21b89f649dd0a1852035a17da2a3a4621c889f6ba291a5fc19f59e55a202a6f01cd29de89dc2a1981d0a9b5a92c09c941ac206d221a021c3176619d6240625ba14e719bb249c24b61425194124d7234b1790107520951f3f180e997f1013928e18b89b77990b9c89191a9b839bb59d3019099a899c269f90181699f59cb19fc118db98f99cae9f6d18d998b49c469f3118b5989f9c089fd6178f98689caf9e741746983a9c619e1c17f597f29bd79dbb16e9963e9b3b9dbc1649968a9ac89cdc14d595049ab49cc91420962f9abe9caa145f95a399169d2b058294a4984f9bc1130000c01b291eb7145ea47ea7b1a89629a4a40aa803a9e02966a312a03aa1d62939238f2de92e3a2a68a2fb198d987528f1a566a844a9a52813a7a7a954ab7429ffa762aa65ac552a3da7b9aa3dac792cd1a6b3aa7bac172dfca599a97cabd32caca57ea725a9832c21a5c1a53fa8192cf9a69fa8f0a9932af8a6b4a991aba029f5a6bfa99bab0d299fa698a9a0ab932831a64aa952abf427bda50fa924ab32279da5eba8f9aab52663a5c6a8b5aa3f262fa59aa86aaa7825f5a465a831aae624bba441a80daa39247aa422a8eda9892381a4eda7bda9f7211ea451a787a9b32039a2fea68aa9c81fdba088a53fa88b20f01fca2a702c7f2461a0b1a505a8d31eeba226a5f7a7d11dd3a160a4afa6761df29f3aa3b4a5ca1c7c9e15a106a48f1dec9be896009d551c2812d92241210b15881c27274028740f581e112806294d15951b7f2582264819c08b0d1ec71e7c1ad899b796ac9c6919689bf49d01a1c819079c6f9e72a1a5182a9b339e37a1db179e9a289e04a13716c599df9dc4a0bf153499709d63a04a15d7984a9d2aa01b14a398129df09fd41351989c9c9d9f82139697529ce29e44140897d39bf99d9e139d966a9ba99d39137796eb9a5c9d09137d96f49aeb9cde13ef951b9a169d7711fd944c99b69bc414f314971fc61f461a5ca406a8afa8d728d4a4aca7c4a8ff2818a6a7a96aabcb297b2878312b34842a1ba538aa3daba42a9ea5d7a85baa412a89a5eca8a4aad129a1a5c5a863aae128c5a5e8a887aad6272ea6f7a8c3aabf2472a5e9a8ccaa44262aa730a82aaa672892a00a210b1eb82906a6fea961acaf2791a598a9beabf626a0a57aa986abdc269fa55aa970abdf26a2a53ea94dab6f2686a50aa900ab0e2653a5cba8c4aa782517a59ca889aa1925c9a45ea830aa8a2491a43fa803aa112466a429a8cca9482347a402a8b1a9d1221fa4d5a77da95722d1a349a725a9ba2155a316a7f2a821210aa224a642a85b1f090f8403da8b9490419e4ba261a656989ea0b8a481a76214c29f45a4baa6f91821a06aa485a7f616f79f49a33fa62715049db79e7ca1e0170c93301ff71f95177120bb29462a329a8322602b572c4a116e1a6b25ba26fb1950973714430cec1add9cd39d7ba0b919e49c7c9f8aa1d1185a9c379fe5a15e18729beb9ed0a13418049bc09e5aa18f176b9a4e9ec2a0b8160c9af29d9aa0a215d999c19d65a082157299839d41a05515ea980f9d0ca032159c98a49c329f77152a98689c509e94159c97059cbd9d3415e096719b4f9df214e7966c9b0f9db71458960e9bd99ce715fa94fc993c9c6e1400005c1d031f660d0fa3e4a641a8d22628a524a872a95e2817a289a471a5712533114f042f8f13219ca333a849a98f28a3a409a9abaaaa2906a506a9b4aacc29e4a4e0a887aaa129e0a4d8a881aa7e29e0a4cca8b3aa5929fda4e0a8e7aae728cea4b1a883aa8f2679a267a64aa80b1f23a6e5a856aa542424a648a924ab7b25dba52ea91eab5925c5a511a90bab5d25a5a5e8a8e4aa222569a5aba8b6aab62441a57fa883aa4824e8a455a84faa0824b5a428a80aaa292364a404a8d9a9612237a4b5a79fa9e72117a468a779a96f211aa42fa73ea94821e6a3e4a61ca9da20e6a3a2a610a98420cba214a69da8d01f0ca04da406a68f1d259e87a2f2a44c1c9c9f18a38da5f219bc9f90a345a61618a49fe8a388a68513509fd3a3b5a6f316269ff6a345a6811bc69d98a287a46b1bf61f6629d42971980727f22fe530851b1e9c2b9fd3a0ca1d399d9fa06da3121a369dbca024a3cf181c9c79a0a5a27918289c38a058a28a177b9bec9f27a236160b9b799fdda10a16ae9a1e9f77a1a016609ac19e27a16016b299259ebea0fe152e99979d53a0d614cb98009ddb9f7d148498a49c419f3d146498499c8c9e9f1456981b9c0b9e5e1429988a9bc29dd5140e989e9b639d17149797869b679d4b166896a79adf9ccf140000ff1a2b1df10524a282a61ba8d1252aa219a6a5a70f276d9f23a47ba52125e19feca300a61f2563a375a7cba8fa275aa450a8a2a9a128b7a4b2a813aaec28f6a4f4a888aa1f292ba51ea9a2aa2e297aa53fa903ab652908a6f7a8d7aa2b29cfa511a859a94a2839a294a681a80b27efa3f8a7e4a93125b0a467a871aa682427a595a87aaa5f2434a58ba863aa262400a557a826aae023e5a464a80eaa8a23aea446a8f2a9dd2273a430a8e6a97e224ca40ea8c0a91b2220a4d0a7afa96a21dda36ea776a9f92065a311a74ca98820f2a2b5a60da9192070a244a6bda8cc1f0fa2d4a556a8581f9ea140a5dba7371f17a1aea4dea6a91db6a050a459a6d81c12a0faa30da6c21b689faaa3dba5cb1a2c9f65a3aca5e3192e9f4fa38fa5dc19089f01a379a51819d79f22a365a57d18469d97a055a3a716a91038142516258d2a9a249e60a16991729eb7a082a30b15df9c90a0fda2ee16189c4ea0a9a2d416029c34a086a2b1165d9bb59f09a2a8151d9b519f78a15115ab9aa89ef3a0a815059a279e77a04e158699a09d0fa0051530994f9db49fdd14d998069d599fbe149298c89c509fb81457987f9ccf9ef4132d986a9cbb9edd133a98339c599e96132d98279c079e3413dc979a9b5c9dc013b7968a9a5b9c1c11c5079019fd1c350b34a440a537a6882527a19ea52ea7b1250ca0a1a421a6062576a1f7a4afa62d2570a3daa6bba802270fa423a888a9192842a47ba8e3a94d28b7a4b1a83daa7e2804a5f0a876aa912821a513a9a8aa8c287da4c2a833aa342892a323a865a9392766a3cda730a9a4263ea4e9a74ea92f26b9a42ea8a8a96225eba43ba802aa7a24faa42da8faa9c1238da431a8dca914233ea4f6a7baa9b42223a4dba78ca946220ca49ca76fa9d821faa36fa738a96721a3a34ea71ba949215fa323a702a9e7200fa3fba6f2a89020d2a2aba6d5a8302069a275a6aba80c2006a215a66ba8441f78a18ca5dba7a71ed4a0e6a406a79f1d49a066a45fa6ca1cc19f0fa40aa62e1c119faaa3bea55e1ba39e50a3b6a5d719849ef1a285a5bb19929ec9a264a5f0183a9e72a28ca59619649db3a11ca52619ea98039d439e561678939199199c6f13f19bfb9eeea18b85659d91a03aa3e8918a9caaa054a38b10359c67a03ca34812f19b16a0bea224124e9b879f10a27613d89a059fada13b13b29ab79e37a13614679a689e06a1c312279a1f9ec6a08c12c599d59d88a0561272997e9d28a063138a98ff9c9b9fa5112b98939c189f44118a97389ccd9eda0f71972b9c6c9e930f6f97049c8f9ef9100c97db9bc29dcf14cc9df8a429a68d23c91d5f2158238c2bd8239a279428c82c60255e2820296e2dcf2572282729bd2d912694281c29462ef827c72872295a2eb528f0285329582e7f2904295729f82daf29fc2830299c2dea2945284028ac2c9c2a0625b5245c2c70143eb27cb3062e3a122fae50b0df2e7228df266127872c6e26af2672283a2a6e243e268e28a32932230e264c280d29ef21c725af2798282e217d25f12604287d1d0c23ef2407299ca868b0aeb10d2b0ea9bab0e1b193a60a1a7a1edd2085a37d1bf0230625aea4d418061a0f1cc9a98d9a32a73ea814ad62a4a1ad3aaf3aafaca842b102b355af3ca8e5b0bdb22faa6d1f212554261ba1671d50239c24490bfc1c2823dd247914d71c0c23d124ca17ff1c1123ab245519a71cbf226e241019441c2b222524bc18c71bbc2197236f183a1b482125232d18ac1afb20ab22f917561aa32058229517241a842017223318e1196320b2210518601913207b21bc172819d31f2021691704195d1fed201f17a118e51e9e20d8167f189e1e7420981633183f1e26204e16ea172f1ef71fdb166617d11d9c1fee15c0165d1dfb1e71152d16d61c2c1e9815ed15611c001e96156015401cbc1d7e151e15121c6b1d94144f15b71b121d4914b014401b2d1dfe128915e61a8e1c3e140080c492e59eb418611c181edc9a962c4820df259425b62d7c20fc25f1263d2e8021ae260e28c62e9d2234272828fb2e26240c28a428c02fa12441283129ca2f432686277528332f2e27f1264028262f1b2854202620262e5b2668a9fbaa762d3918f9ae56b0522e50972aada7ae172e881fbda48aa6302d1b1ea3213d21582c841c7124b724472b601cef238b24b929ff1a3720932004293c0c4d9c399c8b266b9eb9a8e9a94b2727a58aae27b0d62464a581ae17b08ba6bda217ac28ada4aacda1d7aa4bac10adc4a213ac2dad6eac0ea4e3ac01ae4aacbda44cadbfaed0aa05a58ead0aaf74a92fa326ac73ad12a6f99618a3bea410a07818a91d091fd19c9a1adf20182240963f1bcf21ac230596f61be121cf233c0cd51ba3212f234a144f1bab2103231d17b41a8d2134233a18901a3521e922e517ff19082187227517091ab9201b222018ff195220b1216f18081a1c205c214a19e819be1f24218b187c195b1fba204918f518ec1e8a2099187718931e5920e2171f18261e04207b179b17e01d881f04170d176f1d091f8e16c416f81c7f1e39166e16821ced1dd7157c150a1c411d7f15dd14311be91cad147e14d01aa61c93147914861a851c7214a114281a1c1c3e133414331a931bad121712ee17a418fb10180276129f128515ad180a213e22e32c111b84238a245e2e951a51244725a72fa21c3225da2520305f1de92515263a30171df925c6263b300d1d1026d8267830241fc5244b251330322049204a21b62f8820a1a2eaa2272f5c1eb5a825aaba2e179a90ab14ad132e3d9fedaa79ac292e2aa140a824aa972da2a2c2a43da7a02cef9ed19e55a2ac2bba9d229da59e0d2aa69d45a284a4952920a09da68ba8ca28d1a289aa39acfa25a8a4bbac1bae7d1d7ca4efac46ae9e9ab0a323ac7cadb0a5cca245abe1ac13a990a263abccac62a8c5a260abc5ac0fa855a2efaa7cac91a5afa142aa10ac04a4b09f96a8fba9baa1459a59a4bda5a19eff8660996b9d6b9d5217371ec81eda9b2119442007214498641996203921498c241acf20da21bc117d1a172164227c145b1a2c218f2206163b1afb2053223a17af19c9200b22b21698197420c721971720194c208a212d18da181620322184187c18b21fd720c5184818521fac2079181618df1e64203418ae174b1e0720ef179317f01da21f86173a177d1dff1e1917fc16491da81ef6159a16e11c401ec515ee15951cee1dbe147915231c601d701432155b1bee1c34149b14a41a6d1c0a147a14691a1e1cca133a148a19751b9b133d14e819871b2210a7133a19ab1a0c0f0080b309830a9b82a29ad41fd220422e3399b020cc20d02eb09aed1fc420a32fbe9d121f2d201730539ea91f241f7f30619f6d1c501d8c3091a2561ea51aac306aa2b819ed9a5d3049a36aa09ba28a30fd9e50a58fa60630409d56a794a8572f67a12fa833a9032ff5a26ba81baa2e2e84a45ea8bfa9662daca4cfa69ba8cd2c06a32ba4d3a61c2c26a3dea448a6e92a58a231a607a83f29dba27fa8e2a96228dea314aa06ace62624a41dabbbacc72346a491abfeac279429a443abefac7ea25ba4d5aa85aceea4ffa26aaaa6acd3a656a20daa25ac3fa529a281a94fab37a377a079a80faa45a14c9de5a520a8cd9f269a6aa320a5809c5b94e19ca3a06b985810d2174f0e4f8ed0152a1d341d8d0d2e172e1f8e1f4113b6184020ef206712381986206421cb143919bc20b6217a144a19bd20d0213a1401198020a821f013f6185a207c213515b4182c202921e6149418ea1ffd2032175918481fb020c3163c18fc1e692085171118b71e3d203a17b717631e0920e2165e17e61d721f9016ce168c1d041f2f166816141da31eda15ca15c91c0c1e84154c155b1c8b1d0e157e149f1bc81c8514e2139e1a431cd3140813fc19ac1b83148d128e19161b56149d1234196e1a1a143412df18951aa4157312dd18f41ad11600803f820b820b026f9d9f909d91a82df39eba91d692512f51a058981f93f52fbba1ba98a599343023a1e492749ae030a0a330936714fc30b2a29e198e94cd30dea488938594c430a5a43ba138a1873067a44fa6d2a76b307ba522a82ba93130b7a500a984aa5a2f2ea8aea82aaa612ebda6d2a861aae22d0ea768a881a9092d10a578a7c9a8562caaa349a7a2a8232bdea3a7a7f0a8a929bca3a8a805aa5e2838a4a3a95cabc62673a45faa36acd82346a488aa64ac901cf3a363aa52ac62997fa302aa3facf09ff5a2a4a9dbab72a141a221a91babd7a165a197a893aa4ca234a09ea779a90da1159e99a54ca886a0819caba34aa6f59ec9983aa08da35c9d1f941096949e249aa6865d179a94ab97b70f0d1a8a163b8d0014f41c521cea12b715851ec01e7b12b617341f0f20eb1419186f1f3d2058140418a11f5f20111402185c1f7e205a158b17ed1e332001158e17cd1e2420bb14e6165a1ec81f7214d716051e541f62159e16ae1de71e12152916601d7e1ed415ef15261d651e85159815dc1cf41d11165315a01cac1dc815f814321c641da6146014971be31c64145d13bc1a591cd014c912151a061c7314391292190d1b441442128619f01a32148b123a191a1bbc1445116018691904141410e516ab183a12008020067008f682ce9f9b103298ba2d9ca15c984399832f4da3879b999c2b303ea4dd9df19e9e304aa44a9e9a9ffd30f6a4999e25a12e31c4a635a149a22d3162a719a4eca41b318ea6b8a46fa6f1308da5cda589a6b5303ca5d6a790a8723009a659a87ea91f3059a666a8d6a9f62ecba61ea9eaaa1b2ea8a60fa933ab372dc0a593a86caa4e2c57a555a80aaa112b18a59ea8f3a9f32939a54ea900ab1a292da594a978ab062801a5bea9a6ab6e269aa4a8a9a5ab172409a46ba95fab66215ea319a9faaa811dbca2c0a881aadd11eea13da80caa7391e7a0a3a75aa9639a2fa0a9a6c5a83d9c799ec7a43ca7f19b879cf4a1efa40f99419a559f66a24b9526974b99079ed3947b907b158b9787947f06811a3e143e941011471cca19258d6a13781dde1c950cdf14351e791e3712e815d71ecc1fba144c16f01ead1f63145e16e91efe1f19149f16cc1ef31f6e15af166d1e9f1f6f136a166a1e941fef149c161c1e341fb114cb15c01db51e9d158515381d4a1e44153d15e61c061ee415e514991c971d77158a141a1c291d0c154814931b8c1ca714f113131b3c1c5514d0125f1af41b12143512ad192d1b8d14ab11e818211af81450117a18781950157e1013186f19fe14cc0f4f161f1867153d0cf413b31512145590af0693070618efa08d99039b7a2d88a2b89e5e9e902f09a44ba039a15d307da484a198a1ac3016a580a2dda2da3095a6dda233a328317da762a4b8a4083125a681a54da7db302fa7cba509a7ef3054a7bfa721a9a030a4a708a90aaa7430fea739a944aacb2f6ca8cba8c7a9fa2e0aa8f3a830aa1f2e3da8d7a87baa5b2dc3a61da998aa972c76a7d2a83aaa732bf0a509a9bdaa442a5ca5d6a890aa01290fa5ffa8f3aaea27a0a414a927ab992560a414a967ab42241fa411a975ab2c21b3a3eda85dab111f05a3b8a81bab941b2da240a856aa2b188ba141a769a9059119a14ca6b3a8f196f69fc7a4cfa79396b39dd5a229a60899e89bc6a047a463989f99719d75a10b989096b797b39ee197f7915515b2979e9456066e1b2717b98d2b110d1d9e1cec0cd913401e3a1e7f121315f61e411f01154815d61e631fc4146b15a91ecd1f3e166a157f1e571fdf155a15fd1dc41e6a1532158b1d421e0215d914341dc81df3157514a71c6c1d941534146b1c1a1d6a16ff13291cce1c0b169e138e1b7f1cae163513271b391c46163b12721af01be5150812161a201b9d157f1193197e1a1e158710a718ae197914890f0b18fc182e14340f7217a5180c13420fe2163f18ec12010e3816cf179f112c0fc415f71621122d89ae057e86b5170fa1359de29fb02d6ba312a0e0a0b32fb4a43ca2d6a11130c3a5faa344a49d3018a714a5a1a5ed3025a87da5a4a50131d3a72da56aa60e315ca769a643a82e3148a7eea548a7b230dba7c4a725a853309ea899a81da90e3013a8ada8e9a90e3087a81ea938aa032f47a9e4a8a1a9d32ddea828a95eaa432df6a8c6a8a2aa522c76a702a9c2aa402b1fa6d6a89baa252ae0a5b7a887aa33293ca5a4a87faa5e28dca491a886aad62690a488a877aa5f2558a470a88faa3a23c4a330a87daac0203fa3f3a76eaaef1c9ea25aa7f5a90718c1a1d8a683a9f890f2a002a6b2a8a09013a073a440a73890f39e7aa27ba5d8955c9d12a18fa49d956c9cc49f4aa34d95e199469ca6a0da94629731957b9d62944494a111119a0b94de8ec218c4932d8ded0bfe1b2a16ee8c6110ea1c2f1a7f8c2b12371d5c1c1a0ca8137b1deb1c9f11e8135a1d4e1d3e143e14431da11d6f15f313e51c441d89161c149a1c401d1816c513631cf81cc51569132f1cb71c7a1507138f1b7f1c391517122e1bef1b0516d4116e1a751ba1148011fb19ef1a4e1486107a19681adc142d10ef1867196714160f12186e19df14f10d3017de18b014a50dcc161f18f2145f0c5a15ec168314aa0b1e1478155114e90d1215f216fd15ea9a71934594451461a2f59c429eeb209da438a30ea4e12e35a5e0a3e8a33730d2a597a415a5723066a63ea563a5c73087a7eda5c3a6093137a739a624a7523109a7faa5bfa63f31c8a6e9a53fa7e4300fa7c8a526a7653047a781a803aa37302ba8bda85eaa922f5ea8a4a8dda9bf2ec3a7a1a8ada9e02d92a7b4a85eaa012dc6a7b8a822ab582c5ea7efa839ab392bd2a647a982abe4296fa633a949ab1c2917a6e0a8d3aa2d286ba58aa8b9aad226eba441a887aa7c258ba41da85aaa3c2410a4e8a723aa0c227ea35ca7bda97420cfa200a780a9991c0fa221a6ffa8261aeba01fa528a8c3160ca018a4dea63816019fb3a2a5a5c415b39d5fa194a47818da9c27a0eea23318c19a4f9c90a0f01788985092b09c3517d996bd11a398a01622940118c7937b164c8f4b1b2f1654187e058c1c141b9f173d0b901c241cd216d30fe71c551c1b18a310891c741ca31722117c1c8e1c221788113c1cab1c1c184411381c5b1cab17e210761b151c3017b910081ba61bbb167510861a261b4a16730fb619191ad5153f0f6319bd197d15ef0eb01856192d14410dfb178418be13870c5b17821759147e0ad015221721144c09cf141d16e9136709081504155b13c8076b145115e212a80ca314aa14380e760a0c135c14a68432953e8c358ee615379d2599ad9ab0248ca4eda2fba2ed2e25a6a7a35aa4183000a798a41ea56b30cda752a591a5ce305fa7d7a59ea6373157a74ca69aa63431cda701a75ba84c3157a8f1a798a80031a2a85fa818a9b2302ca8e5a875aa45301fa841a9aaaa8c2f33a8b8a9a8aab82e76a891a9d1aafb2df9a73ea95daa2d2d53a808a9c5aa9e2c58a85ba9f3aaa22b3aa8dea81bab732aafa60da955ab9429c9a5c2a80fab9a28bca57aa8c5aa3c2788a55fa877aad82523a536a861aaef2487a4e5a707aa9823e4a320a7a7a90d22d9a293a655a904203ca2faa5f8a8571d54a144a52ea8ac1b88a025a408a71d194a9fa6a298a5c318cf9deca089a46c18a19c709f1ea3e214d89be79d0ba2ad14ae9a879c13a18314b5980497d29e4f14c695b714af9804140091af1a77137713078cfd1b1b18dd15f284831c201b7b15060b801c6b1bf214450d611c8e1b7214bc0c071cd41bc5152a0e8c1b571b6815d30d941a261a3c13ad0d451ae019ea126a0d5d196e196312d10cd018f418d411660c7018fe177613250cad179e1714119809a0162917af1209099815e21513140206a9148c148c14730550142b142b141105ff12bf139414a301c3131f126c14d8047812e911391375812d108411be127b8144034084c810fe94d60543054016de9dcb99689a2b250ea599a257a3492f77a527a4c7a42e30c9a653a522a672308ea79aa56da6b930f4a730a62aa7f130b8a754a64da7e7303aa7daa6dba7d83035a766a790a8ab30b4a735a8f7a99e3087a89fa8aea91f3069a7a0a878aa322f22a7a6a8fea9702e4ea79fa88baad62d33a8e2a829aa382d68a7cca877aa932cc8a7c6a86eaa8e2b6da6eba891aa5a2adfa5c0a8c9aa5e29c4a5a6a8caaa6d2886a589a8dcaa892714a54ea8d2aa2a26b9a408a895aabd24a0a478a72eaa432223a408a7e3a9562140a318a63da9ad1f10a248a590a82e1e2ba15fa4fca7941b5ba050a304a74b19849f86a286a62416c89deca04ea58c0f559c2a9e6ca3ca0e239b339b45a13e0e0f9abe98de9f7f143a99e491369df31644988714bc99a5139095b118009600169e93191a980cbe158a90671b75157515c684c01b95191a176904061c2a1aa4161d048d1b741be4179909dd1a061a3a174109471aa719c816e7086619a5186f162103991859170316ce024418df169f15a0020c1752162b156c02ca15b514b5144a8263154c144c142f822e14391200144a8675131e106913ac86a511c30f45141f89d010490fbc14c288b9104e0caa14b588f40e82059213738b300c81045113e584440ba40ee0169e97078fe38edb15429ff89b589cff247fa4f6a217a39f2e8ba521a4ada4d92fb8a6c7a483a5483023a70ba5c2a58a3085a79fa579a6b23005a83ca629a7ce3035a842a73ba8be3009a8bba7d6a8983092a819a8bea973303ca852a859aa20307ea8cda8b2a9382fe1a7d2a895aa632ec9a744a917abde2d3aa727a92babf72c82a708a9c6aa4e2c29a7faa8bcaa9e2bb3a6cca8b2aa7d2a72a6b1a870aa7a2954a691a854aaad28eba53aa824aa702765a5eaa70baacb25cca492a714aab42448a446a7b6a9d323c9a3a2a690a9672251a325a609a98c21c2a257a54ea809214ea2f2a4aaa74d1f82a143a4f8a6161f85a0dca2e9a51a1d569f3ea105a5041cf19d13a066a4021adf9c679dc0a2bb19909bfb9966a05b198d993412629af7181b9772181a94d516c795131a440d9516f293721a45130f160b92a81a6c156c155390431a1e1715150090e1195918c316478d7919f1172d16b28cff1823178d15768ca21896169616028eb016e0144516b98d3f168812e0154d8de1144c0fb0168b8e6b13bd0e2e16358e60113808bf14f68d3b0fe2876c15b28e070c45870015c88d6f0b038d9814548da904bf8c5a14fe8c6d84908f2914dc8c3b84348fed13bf8c178ae68e97131d8ca18ec8917615408deb904f922b17489615051a8c711486a0189c979d39256da449a3a9a3812eb5a56fa422a5a52ff4a5d3a408a63130b8a670a545a65c3044a70aa69aa79e30a6a791a6a5a7a53012a803a7a1a89830aaa834a89ca8833018a849a85ba9473099a754a86ba9fe2fd6a79fa8b6a94d2f58a783a8d5a93f2ef6a656a8aea94b2dbba658a8baa9cf2c77a7cca893aa5d2c32a83ba961ab982b61a83da96dab692a10a8f3a83aab4c294aa7b8a8d9aa7a28e5a56da8cfaa9a27a1a545a8aaaae825bda4cfa727aad42482a472a7eda90d241ba412a7a9a9c32258a354a655a967214ba261a5bfa8032053a177a40fa87e1ed2a095a320a7501d5aa0aaa26ba6331c869f68a174a53b1af69df29f1da4991b219dce9dfca29619699c049dd0a14019319bf49612a015177d98a1160b9ab318ae95c71a140d7218a6945f1bf9152e189693d31b0e190e19bd91181cc519b9180190d91a57195e18628fab190618eb1848908f18b3157b1800901c166613cf1898908514121075174a9035140909ed1614903412c0888816bc8f2b10b78e271620909c0c4891c114bb8fa50506930613018e3a05b892cd10798ded0428948b0d2f8ead046c929710fd8c6004f4914110fc8c2d0403910311f28cec83558eb31152899d8350909f14bf8f9091ce94ef15ed09931a481b5e180aa2c0a1fba19b2c22a446a228a3e42e18a589a33ca4a22ff2a54da478a5123097a6e3a4a3a5423048a77ea5e3a65e303ba703a68ea7763025a7f6a659a86130ffa6c1a7a1a84430e9a6eda76da912308ca7fca756a97c2fffa7aba8d5a9a32ea1a7a3a81aaaec2d6ca7e8a863aa192dbba768a9a6aaa22ce7a670a940ab262c59a63ca94dab4d2bf6a5fba819ab572acaa5cba8d4aa3b2988a5a4a8a5aa752816a55da856aa3727c6a429a841aa0626a5a4ffa709aaeb2466a486a7b5a931240ca41ca768a9952381a36ca612a9382250a262a557a871211ea162a499a73c208fa060a3d4a63b1e07a051a213a60b1dea9e0da15aa5dd1b369ef79f85a4e3192b9dcf9df2a28e19f59bc399a9a03819449aed8b409de7186698b016b596b2186c96061a2c8d86187895b81a721358186a945f1a1f132718fd92051aa412bf1752928d1902158218e9920c1991141c1855920318fb1078170d9232169310dc169292b814a20956162892df10e78f9c14b3913a0758945814ed91b1864595db11fa91bf8f1897751162910391af971f11ef90e79104978c129b90729122978d13e0904d92e1955014b090ed9140960c14f18f9d92c2969f14b88f3093cb961d13288f74931d96f314908d3e92ff9495152681c715ee16a11238a3c4a0aaa0a02c97a4c8a2a7a3992e6da421a3fba3fc2ef5a448a456a5b72fa9a5f0a4aca51a3038a67ba5e9a64130e1a602a689a763306ea7efa654a85c30b9a700a8c8a82b30b8a748a8b1a9c82fb7a751a872a9142fe5a789a8eba9712e1aa8d6a869aae32d2ca809a9ffaa382da5a83ea92dab8d2cc7a722a96eabd72b34a741a946abb52af7a621a9f7aae82982a605a9e1aa2e29e7a5cca8caaa80284da574a864aa8b27f8a432a82eaa4026a6a4fba7c3a96a2566a443a772a9b52418a4aea611a9a22390a3eda5b7a87522eca269a55da850211aa259a48ca7352075a115a35ea6351fe5a018a294a5eb1d36a0d3a0dba49c1dbd9ecc9ea1a35c1d579d379c46a1141d969ce598e29f211ce89b3995aa9ce51bbf990112289a281a73963c1a418dea1990925f1c6518a619d1930a1d6b1937189293c21c1a19f017f492fe1bb81856175093d519d01455188693e316f18acf17d893a611b7933e18899430887096de172b94de8d4a974f183d945b92a29804184a947c95759978174a94b7962f9aea15f593eb96269a6915d4933b96a899fb143193409607996c14c392e895a098d0148a922f966798941462927995af9883146b92cb952598f9145d910795ae97ad15508ea693379812120000e6179818721461a343a31fa48b2c1ca510a48fa36a2ed3a445a222a3c42e4ca5f2a37aa4992f51a6f6a43da50630a4a65fa549a61e30bfa628a6b8a714300ca75ca7a9a800304ea717a834a9ef2fe1a7a0a8e0a94f2ff3a7c6a874aa052fcea86da92cab232e90a70ba905aba72dfca626a90fabfd2c98a62da9cbaa562cd4a61aa990aa8b2bdfa6ffa8f4aa652a0aa6d9a800ab9e29f0a5e4a8b1aac228eaa5c5a8a5aa3328caa594a87eaa262785a54ba829aa3b262da51aa8f5a97d25f1a4c9a7a9a9d12495a421a759a9272425a426a6a4a8fe2232a313a5fca7c9213ba212a4a5a62e212ca103a1c2a4a62009a00d9eaba2501fbc9f659ee2a2421ecd9eb99eb2a2461d1c9e6a9ed1a2101d5f9d369e92a2c21a459cc99ae6a01519139a0b17af9be418e9949b1cc216c2161b8f551e8c187e16a78e0f1e63184416498ede1c2b182b181090881ce4189c178c8f8f1b52195a1860901b1aef17ef17f68f5c18cc906618c6933188e4977516e795f197b59ac0152596ee984d9c5715be95f498469cf714bc959a98459ca8149895b4984c9c6b143995b098f09b1514d5945d98389b8a1470940998439aef14ca937497c9998f14c2920697819956145d92bb96ee98c51484910996b299db1192923497e599bc11000088188e19f00cd5a250a422a50f2caba4bea41aa5e72d85a481a289a37b2e65a482a230a3202fb5a4c7a286a3962fc9a43fa46aa5ee2f6da545a66fa7e22f4fa6d6a730a9c82fb6a6aca8a0a98f2fc1a6b0a8eca9312faea6f6a8dfa9642e2da6a6a8d7a9032effa579a8b2a9362dc4a66ea892a99b2c72a7b9a82baa292c6ca673a919ab7a2bf2a570a924abfe2905a64aa921ab232935a659a926ab7f28a8a505a90cabac276ea5d9a8b8aac9261da5a0a8a0aaca25baa46ea871aa212569a424a836aa4e24fea341a77da97b23ffa2efa5d1a86c2290a233a52da869212ba17ba35aa6da205aa0c2a06aa44d20a89f669fa3a36b1f219f17a0b1a3121f859e6da0baa3f11da49ec0a042a4ec1c009e0f9e2ea3a01a099c9b991aa0fe183f9a0115ab9be118b097a91dd016d0160596bc202d20ad18689193205f207a163c8c18207c1e2d165d8bb51ecf1ca815bd8fd21b921814155394a514090b281655958b88399860151c97c096049c49161e99d39a919dba1523980c9b699d4415d997899a429dda144d97689a199d7a14d996599afb9c2b144b96139a999cb31379959d99179cd912e3940299329b90147f94cd98999a661429946d98799afb142f945398a09977157c932b98f79931145f916d97539c77930000f815b117370901a49ea575a7b62a78a43ba535a73c2c5aa37aa119a2562d8ba2379da7994d2ed4a374a0139d0a2f5ea5e3a26ca4592f2ca6c4a565a7962fdda53ba799a8652f31a6cea706a92b2f92a6fda7a4a9a92e26a6cea74ca92e2e59a6afa75ea9a72d62a6aba7dfa8402ddfa506a819a98c2c24a6e9a811aab22b50a718a9f4aa9e2a2ca7e0a941ac9729bba6f2a96dac9f2880a699a940ac10281ba62ca9b3abd4268ea5e7a807abd92524a59aa8d1aa3025d0a463a893aa622480a435a859aab02336a4c1a70daaaf22f3a341a7b2a936223ea358a604a9392286a298a47aa7362293a1e69f57a4cd22c9a0fa99b29f1c229f9eec9b48a04820179ff5a04ba47b1d309e83a0c0a3b01cea9d29a02ba4621aa59c909b1da24a1a249c1912fd96e418f996f01df41de7184213db212722ec1836141923d62203177f0c7122da2103148d90901f841ecc12fe92b11a4918c3141e94e516c98af015f495788ecb98a3168a970899269dfb1540984b9ba09e8c15b598579c399f191598982c9ce39ead145d98109c559e4d14e3977a9bc69dcb147897dd9a509d6914ea96799acc9c24142f96159a7c9cbc137495d5990d9c4613e8945599c39bf812da945f99099bc813559456998b9b8212a4930b98be99d80f0000991ca31d531711a378a61da8ce2938a374a5a5a7ac2a8ba31d9d03a1af295da01a21a9214b2b12a1039cef991f2e12a47ba4e5a5db2ecaa4baa410a8b52e6fa669a5efa7ac2e99a6d9a6a1a8b52e1ba67ba7c3a8372ee2a512a77ea80c2e0da68da631a89b2d7fa686a6a8a8ed2c30a72ca8a4a94e2c05a87ca960ab322bd2a7f1a91bac242a38a703aa3fac182907a7cea9fbab6f288fa66ea9e1abaf2761a603a93cab932619a6cca802abd02589a5afa8b8aaeb24dca47aa845aa752475a438a8e4a9532322a4eca7cda96f2214a488a772a935213ca445a71aa91520eca292a5a7a96e20fda0b39a6da0f22051975a23a323012167a0c59c68a04c1e67a14ba308a6a0189a9f61a3c7a6b116f79e3aa21ba65d1b9b9de59ec3a1f11ccd9a41955b9dda1bfb0c842107209a140c19ae24cf24480e011aed2438254d8ee8184e247a24d98d940e74200d20cd0c5e983c150a920a12099b35980e9c4514d89a9b9b269eeb14e299959c799f7e156a99059db49f2a1613990a9dc39fca15d298e29c659f5515b2988a9cd49ed2158398789c7b9e87154798229c2f9e4515b697db9bbd9d0f15e796229b369d97148f96909aca9c25130896689aa59cab110f96759a8e9ccb125c95e599979c9a11ff94d498f39a1b1100007d19fc1bbc14d4a367a7c1a80a2944a428a816a9162998a25a9e23a3fa28f9222f2dad2e8d2993a2c71e5222d22513a562a792a83b2267a697a8c8aa82212fa860aa35acc828aba6d5a94aabd12e79a7b5a805aa7e2f88a5d0a7cfa8922d41a440a5cda61a2db0a4e9a456a7802c11a6cda8ddaadd2ab8a61daa09acb429fca6f5a905acfc2872a6c9a9d6ab62280ca67da95cabc427b9a523a91aabf0268fa50aa9d1aa3c2657a5e9a8b3aad52519a5a3a880aa1025eaa47ea82faa8124baa45aa81aaaa32371a422a8d4a9532268a4f1a7afa9772168a486a763a93e20e3a210a7a2a9e81eaaa0c5a585a8e51f0022732a102c5e2340a0afa642a8201d4ba1a5a46da75e1b14a13fa4bba65f1b7f9f35a3e8a5661b3e9e48a128a4601c829bd2963c9ce21c58106c22d91fc819ef1b16271f286f0f9b1e21281229220f7f1b9b25c9261e0e4185f01edd1ffd120599b896309ce6160e9b959da5a00d16b79b549e0ea1cc145c9b4c9e0fa17015679a219ef1a003159699d29d77a087144e996d9d3ea083121b99229d1ca04e12e098f69cdd9f08128e98ae9c609fd1110298649cdf9e6b115397039c059e4812cf968f9b989dd6118f960a9b469dab118a96079bdb9c6111da95539afc9cf40dea945e99ed9b2c14d40dbb1e1d1fe61a60a41ba813a9d2280aa4c8a729a91429e2a533aac8ab7f2a04294c318d33ab2ab1a556aa84abc72b59a5efa813aa732b1ea5cda84aaaf22ad5a446a8baa9f0293aa5d3a749a9e228d7a528a847a97522e5a3dda6e4a8d31fd9a67ba65da8d224b4a2879ca1a0f128aea56daa56ac8b267aa59da9a9ab4f26b2a588a986ab0a26bea579a97cab1726bea55ba977abde258da526a929ab4f2575a5eca8f2aaf42432a5bfa89caa6824e6a480a85caac223a0a45ca80baa222373a429a8dea93f225ca40ea8a2a9162234a4f3a782a9a12112a485a743a925216da3f5a6f5a843209ca116a618a8301fb7017e922e96ff13f09c76a101a67b9938a0a3a4f9a69c0add9f1fa425a6e21531a06aa4fba6af1636a02da31aa609155a9d069f8aa191176294981ebb1d59195a20ad29302a1c9aac22822b762c25919d1bf425382755155996ff156a0cba17aa9b579d63a0b816789c7f9f5fa19b150c9c609fcda128154f9b1b9fbfa1fc14d49ac39e53a18314489a659ecaa00f14d599fe9d99a00e12a199a89d64a0ec114e99779d43a0c011fd98159d19a0ab118198a59c4e9fa91217986e9c619e4a1385970d9ccc9dce12df96979b609da813ec96949bf89c471326960d9be59cd3143a95929ab49c5c0a0000301d7e1f2d0cc2a301a741a8302730a63da8a6a9ee2811a162a4a6a50926e6104584de8ef0208ca343a863a9cf28eda48fa933ab412afea497a925ab642a0ba59ba955ab8f2aeea481a942ab7b2acaa430a916ab4e2a63a4c7a892aab329b8a303a8aaa9172797a0daa46fa7a70a22a53da8c5a990200ca637a9f5aa2f2494a516a9fbaaa7249ba50ca9faaa5b2491a5eda8e0aa2c2475a5bfa8adaaf52332a590a87caa7c23dda46aa843aaa522a6a43da805aa7a2254a419a8caa9ab212ba4d8a78ea9332108a480a761a9bb200ba420a722a99420efa3f5a607a9322001a4a1a6efa8c71f08a325a688a8401f6ea081a43ca6541da49e10a30ea5621b789f68a3a1a53d19bf9f7ba333a62415d59fe6a35da67610969faaa38ba6a4132f9fb8a3faa5f918109ddca1b6a4a119861dc1283029a011842732304d312e954e9c339e60a0871cb69d90a090a3fd18839da6a0fca256171e9c7ea089a2b115349c3ca058a28715ae9b05a015a256140c9b829fdfa12f149b9af79e6ea1d4145f9aaf9e1ca1a214fd99299eb5a05c149f99ad9d58a01c140f99189dee9f46129c98b79c509feb116f984d9ca09edb1279981f9c149e72123f98cc9bc89d6c133198b19b659d1a132798b59b6f9d3a153f96999a0e9dc61100007f1a901c860f00a2b9a63ba89c26d0a205a697a70527949f57a4b0a56b2544a17ba42ea6af2596a3cfa711a94e28a0a4b1a820aaf628c9a43ea9c5aa7c2938a594a975abd92975a5d0a9c1abf829e5a5e8a9faab0e2a37a68da973ab8c295fa571a8bfa9ad28ada222a7eba88f276aa378a79ea9012558a443a83baa0b24cea493a877aabd23f2a48da852aa5723dda461a81eaa4a23c1a45ea818aa9f228da43fa8faa9422263a436a8eea9922139a413a8c6a92f210ea4d9a7b5a98120cba37aa779a9142074a31ea737a9e11f14a3bea603a9921f95a253a6b4a8351f53a2f1a54ea8ca1eb9a16ba5b9a7461e1ea1c3a4dfa6d31cb5a062a454a60f1c32a00da406a6fe1a789fb6a3d0a55319689f74a3a8a57e18839f7da393a57e189e9f63a37ca56c1839a023a307a59017e39cf5a008a4c015471167140a16d58c19998b9e55a28c969a9d9fa0c4a39b0df59c9da0fba214153c9c5aa09da2f914009c3ea060a2e1147c9bd19f08a2c8144d9b6b9f84a18a14b59abb9ee8a031140d9a329e67a0ac138699bb9def9f32132099619d8f9f0113ca98f89c329fcf127b98b49c1a9fb91252988b9c9a9e87123d985e9c7b9e3e113a982a9c2f9e41125e982d9cf29d03121d98a19b639dc012e196b09a889c1f120000021a981cfb1089a279a592a64925fda002a69ca70e2681a047a5d0a680251da2a8a588a7f825bfa3a0a718a9b22711a475a8e9a961285aa4dda86faa9c28c4a436a9dfaadb281aa55aa90fabe32811a570a931abd02882a424a9c2aa7d28d4a3a7a825aa0d28dda34aa8a2a90e274ea429a875a90c26d6a443a8bfa9fe249ca436a8f5a90624d3a435a8cda91a2384a426a8bda9672237a402a8b3a9bd2115a4eaa785a9552106a4cfa771a9f420f5a381a73aa9d420a0a359a71ba96e2053a324a7f9a8092003a3f8a6e6a8661fc2a2bfa6c7a8381f59a27ca693a87e1ef4a138a66da8471e6fa19ba505a8c91de9a0f2a40ca7621c54a063a45aa6421bf19f21a40aa6e71a689fb8a3baa5f219de9e67a3a2a57818839e26a387a56d177a9ef8a273a55317fb9d7aa2a6a54117aa9da3a199a49516e3991b9d1b9e201509951e9a589c7012cf9b319ff1a1a2850b9dbda093a3ab95989caaa087a35b875d9c7aa05fa35007f19b27a0cfa21507559bac9f1ca2030db99a1c9fb3a10910ab9ac79e3ba16011549a669e02a17d0f009a1d9ebca0370fb899d39d87a0080f5399719d1aa0a4108798f69c6e9f4a103298a29cef9e0110c697509c909e870deb974b9c589e580dca97269c8b9e7a0a3997029cbd9d6b125e121f161e0c1c260623402674275f2c212425281f29142d3f25f328ed29f92d3125f528ed29942edd253b29022a022f7e26a8297f2a532f1b27dc296e2a812fae27ee29692a672f3628372af52a222fc0262829d1291a2ef625882887299a2de1a267b033b16f2e0ea730b0e0b15e2df21b9e9f0aa40c2dfb24772705291a2b3623892666283329ff21da254b289b28d521d725cc278228402054254a276428179d30a832a9152baca956b1f0b2da23451af41c441c1e99681d1e247c25c320e71c36223b24241fbe1cd2229024c517081c1623b224210e0f1958211f2436a0a814c518d31d04a7e49d63a8e9a968a5031d532489258aa07b1c8522ae247996601d592329257191b71c0723bd24d10a121d1d23a124b315a91cc3225a24e316411c2e2211246f16b91bb82176230916451b4a211923be15bd1a0321a4227f156b1ac82056223f152f1a852015220915e6196220ba21da145b1916208021a8143219e01f402172142119681fed203915b518ec1ea2201e148918a41e7a20dd1431183f1e3020ab14ec17231e06207b146d17c51da41f5d14af16721df81ef7132a16c61c2c1e3e13d9154d1cde1d12135e15281cb11d0e143b15fc1b451db8135815ab1b141d3b13b514781b291dd310e5154f1bd81c8a1136145692b79ae0254e20db212525ab2dc12142260427dd2e3c21f5263f28c92f6b2278277e282d305f2341280e296930b7239d28942961300724f828282a5830c524d328bc295f3032239728ae291d300121bd24e5255e2f8396aca66fa8f12d9ba321ad91aeec2d9da49dad4dafdd2da8a095a9b4ab902d8c0d3692e099392c3b1c6c220724bc2b701c77234424662a281bc11fb1215b2a8198f5a27fa4762991a391acd2adbe28c6a5a5ae5bb0a520c7a018aac7ab47a68e9500a456a5e6a7499886a13aa43da9749678a074a229a829934c9fbba05ea90f9a5fa490a531aa0b9e38a77da840aae09dd6a7eda8eda80588f79e5aa0e9a27f18021d931d369beb1afe2003225198b81b0822fa231098ce1b092215243892c21bc5213f230a11411b99210723b413e91a7a210f234615ab1a5221d22260165c1a02217722b314241abe201a22b515181a7520b72188160d1a39205c212016ce19c31f2421e01584195e1fe920a1160119251fb92065158a18a91e632026150c18621e2c20e514c717eb1da01f991455177e1d171f0d15f7162e1d891e0d147616a91cdc1d79137015301c5c1d0b13d314561be31cd4128114e91aa91c80117914811a741c7011b0144b1a471cdb0f34148619291b87113d123e186519ed0fc614241d201db925761c27235924312e9e1c28246c25372f751c9b2414267730161e69258326a830931da1252226c430931d1f26de26d730bf1b5f261a283231af1c17267827d130ca1bdf24e8256430c199871a49152b303fa1c8a5c1a7fe2e89a4c6aa74aca22e3ca444aa13ac6d2e2aa24aa8bea9a92db8a0baa4c5a6ee2c0a9d8aa0cca21e2c679c0ba15ca12f2b109d02a4b1a44b2a5ea090a7e7a868293da3f8aa81ac88265da469ac7bad5514afa20aab75ac87a2eda0d6a82caa9ca560a09ca7f3a85fa7f29f12a811a9d7a72ea047a87ba967a80da048a871a903a81d9f78a7d4a8bba5e39ca9a577a79ea3cf9886a24fa4ada0ae06cb95469bdf9ed8182c1f50207c9c9719e920e0213898fb19d620ce217b92221ad52002228a0b721a1b21772242116a1a2821682233140b1af32031228115c719a720f1211f1574197620b3211f16271930207c21fe16da181220272192167718ae1ff62044173d184c1fa820de171318b11e44206e16ae174b1e05200e16a417f31d951fb7155c177d1d281f65153217431d9f1e5914c216f71c5c1ed5120216821cd61d77128715111c491d0a1229155b1be51cc7119314ad1a7c1cab115c14871a321c7e111f14ee193a1cc412ff13511ad61b1e057f13fe18411a8f0d00807808f9085083f796f11e3a204b2ed399e41e01210230c59974205a218830659c0b20d720f1300d9eb41e3d219131e49ce11e2e207c31369fee1e071e63312fa03f1f401e463177a17c9d9b9ee93073a21ea314a58730eaa3d5a63fa8343041a5c2a8e2a9252f67a553a9a1aae22e9ca52da888a93e2ec4a3aca62ca8652d34a2fea5f2a74b2c2fa212a644a7642be5a169a615a8d129b9a292a8e2a96228bda316aaefabcd26afa3a6aa36ac8b2374a340aae1abc293b6a2aba94fab09a211a22aa974aa28a44ea1b8a85daa0da61ea192a8fca982a5cda01ea84aa956a40ea09da67ea8caa1339deba4cfa6baa0a999c5a117a4729ea292bd99b99cba9bf411071a4b1990977816061ec31d1194b4171a1f1920db8c9c183720ee20438c0c1981205321930b1c19b520a0210f0b3919db20ee21ff101819a920cb21b61021196020a1216213df181e205521fe12a018c71f002197145f185d1fb72091153518101f722040151a18c61e48200e15e217411e15207e139917f21dce1f2a1316179a1d1e1fc21280161d1db11e1514e415d31c3e1e9e135615541c6c1dd9128214a01bb21c2512ce13911a3a1c04132713081abf1baf12c012da19301b74127c123c19831a181226121519dd1a931417133019e11aaa150080cf02e402e482f29c491175929c2e2c9f8092c0137330ef9fa0920b14e630c2a06d995f94163142a1e999ca94933144a2279dfc94b9314da23094a29bb0317aa46b9ab89b973181a3899ffda14831eaa3b1a422a5eb3049a5d1a6c8a78730b9a559a860a90830c6a594a8aca9fa2e79a55ba879a9232e84a4bca7d8a8312d0fa4dea73ea9812c82a330a80ea9632be6a33da84fa9cd2911a4daa856aa6c286ca497a990ab49265ea4f1a903acc82213a4e8a9d5ab691c49a388a934ab2999eea228a9f5aa92a06da2c4a86caaeea1b0a14ea8c7a93ca2eaa09aa726a9bea13aa088a66ba845a1579eb0a4f9a645a01d9c6ca2f3a49a9ed098da9e22a2009d4e94bc8cc099c099798dbd183c1757940a0d0b1bf31a0e8daa12f01c5e1d850ccf15251e9b1e3a0c1417431f3520b20be217731f6c20e60ad817a11f8920d7100e18701fa8209010b017481f5b201d13b617e41e2020bb121117631ec81fa00ff1160b1e571ffe116016b61df01eaa113116a01dc71e71130016631db31e1413ac15ef1c401e3f146515b11cf31d4912fc14461c701df8116714c01bf31ca8114613ca1a5f1cb212ca12f919051c29126c128f19241bfb111c125119131bed1135123a19e91ac91165119718051a8e11dc105717a71813110000220192092a8b7d9ae61846170e2ceaa0cb9893931d307ea3d09d049d9c3001a48c9ebc9f36314ba486a042a0be31bda4b6a1bea1f13187a505a447a4cc3145a6a3a45da4d43144a5bca4d9a58c3127a553a5eda546318fa568a64fa7eb30d6a54fa791a84630f6a577a8a5a9562feca5dca81eaa5a2e78a5bea8f9a9072d3ea5c7a83eaa5f2c53a5bda833aa412b45a504a933aaf22963a55aa9e2aaf42833a567a93fab9827cba460a96fab8c255fa44da92aab4523b1a3fda8c8aa491f1ba387a823aa88184ea212a887a99d9159a11ba7d6a88e9abba06da638a84c9c04a058a564a7389d109e89a3a1a5f29c879b8fa034a3f49a5399d99c2aa062985c95c18c999900987090bd17fc0d7d947a86961aff1633944a0f451cfc1a9e932212791d571d7f8cd514341ecf1e098cc715da1ea11f660b1d16f51e8c1fe60a5316a41ee81f7d0a9e168d1ee11f9c10a8166e1e8b1fe3096c16281e821f31103916201e2b1f0010d1158d1df41e2e1282153b1d821ec9113715e81cfa1d7013dd14951c8b1de61294141a1c1f1d60124014871b891ce8113c13ba1a3c1c8411a112ff199d1b331102126519d71a501208119a18ce194d13b010271824190d144f108c17cc188f13091035168a173014130d5f140d15d9118d99590b4a13542498a0419695973a2c0ca2949dad9eee2f16a4b3a0ada0b630c3a411a23aa2213188a557a3c8a3933195a6b7a3b9a4dd31bda606a581a5f331bda6d0a514a7f13199a768a68aa6b931c3a660a74fa8373189a720a837a9c03040a73ca8f9a82130f9a772a863a9282f1aa8afa8fca90e2e06a700a92faa272dfaa527a916ab9d2cefa504a947aa432bdfa50ca96eaaf62966a5efa898aacf28f3a402a9c2aa8227afa4f2a8f2aa992557a4f1a8ecaaa02324a4f0a8baaa1221fba3cba891aa551d2fa374a823aa66181ca205a8b4a973117ba11ba714a9809701a10ea65ba8b799d59f84a4eda63a99389df9a1cfa4919a7b9bc09f2aa2f3994999599ca59fa299b095bc92529c80993b908b17178e9d976606331cf31812971c117b1d3d1d6593a513a71ecd1e5a8c5414f41eba1ffa0b3715ca1eb41f780b6f15f61ea51f3e1179157f1e941fea107f154f1e061f8e10f0149f1d8e1e4010f714441d191e9712a314b51cb61d52145c147c1c171d13141414311cca1ced149413921b801ca1142e132c1b3d1cc8122012671afe1b6512e7110e1a171b041263117b195c1a65118f109718a9192d12960f1e180d19dd117d0f0718b018d211ac0eee169018a911e60e42162618c3129f0ecc1561171b13a299ed0b5116582406a1869bb397882c2fa32b9f4ea02830a2a41da268a29730ada5eca32ba42d31c0a62fa5aaa5a0315ea7c1a5b9a59c3146a783a6a1a6cd311aa752a732a8ea3156a7c6a62ba88b3144a82ca8cea82d31aca89ba80fa9b130faa8b5a88ca93d3039a903a9f2a98c2f44a802a935aa922e94a8f7a877aa6f2dafa821a982aa462cf7a71aa9e6aae62a1da6f7a865aaee2965a5b4a851aafc2817a5c3a864aa3928d0a492a865aaeb2689a481a853aa052556a466a82faa78220ea41ea8d6a9e71f9da3f5a7bca9d91acfa220a77aa93b113ca24fa629a9a09737a1a0a58ca8289721a04da4d6a65c99679e1aa233a5c59a419db9a045a49d987a9ca09f1ca34f98839a319c7fa0d29735983895ad9c31970795b211b298b596ef8ecf18198d5f96f80b031c3d1845935c10f01c391baa921312351d4a1c0a8caf13771d581d6f8b06145b1dc51dd70a4914491db11db6101314f21cb41d6a102714a11c4e1dd812d4136e1c061d7b127213361cbe1c1e120913021c851cd5111d12331b481c8611cb11d21a051c30117111fe19011bc31281108219741a3b1243100719d419a0117f0f6a187419c5127d0e4717cb18d0130e0ed21618183413790c61155516d7139f0cee14f015eb0f6f0fb3151717dd12239e8094550c2124eda1c69e4f9e8d2896a4e0a231a41a308da5bba344a48d30b3a5a7a40fa5f5309fa67da586a56a31d0a740a66aa6b13134a810a774a7e03163a846a7baa701324fa813a781a7963183a849a8ada81f3135a8aaa8d6a9b130afa777a899a92030aea683a8d6a9422fbea66ba802aa142e28a7dfa89faaee2c02a7d4a8e1aa382c0ba76da943ab042ba6a63ba923abbc293ba610a91fabee28b4a5e3a89baaed2735a582a885aa6c26d0a456a84faa76257fa42ea8f5a9372428a4b6a78ea94a219ca366a75da9211edda28ca6c3a8851c14a2aca546a833173fa1f0a46aa7501058a0f5a322a60210da9e5ca20da5a3158b9dbea01da45615959c0d9f07a2fd14b39a6c9b609fa91476984b92c99b3f14e195d1148e96de130b940f18238db4135f8f601b4c185d1395058e1c111b86123d0b891c241cd811c50f911c541c8f14ad10951c791c42143b118c1c9b1c0114a4114a1cb21c83135511001c601cff12f8107b1b181c9514c2100f1ba21b461486102c1a241b0014680fba19971a6213370f6519ad19e912e40ea51845199510390d4118dd18ec117c0c4517141870115d0a4816f7162211de09cf14ec15e010400b14151315bc106009c913c5147410630b2014bb111885460476106611008ec2988595c494d621679e109d3e9df228f1a4a1a2ffa325304ca62ca4aea487307fa63ba5b5a5fe308ca7a7a54da670319aa77ba6b8a6cc31f7a7a9a689a7db3128a8b5a777a8d431dfa716a8bea88531d7a7cda84aa94031d4a7fba8f8a9a230d3a728a940aa09305aa722a936aaf82e5fa724a97eaa072ec8a762a9bdaa262deca726a9baaa582c8da752a916ab912bcba730a93fab192a3fa725a922ab282917a6d3a8daaa652892a5aea8ccaa162754a586a897aa99250ca52aa811aa452480a4c3a7aba93f22fca32aa750a9c220f5a266a6f3a87c1d5ca2d4a576a8181c9aa1eca4a5a7ac168aa0b0a307a62816569f53a200a59415099e9fa001a43215aa9c769fa6a2d614f89b619d9fa1a714d79af99b93a0db0d4d990b97dc9d830df295c5148496370d2b91ca1a2c16f00c148c6e1c631af812f884831c0c1c7a12aa047d1c221cd611460d641c2e1c4811cd0c0b1cbf1be4107d0c951b491b9a10000e9b1ad81a5310cf0d3a1aca197309dd0bc9195b198f0ff00cc218ec18a208700c6018fd17640e210c9e178b1706087b098b1607179f0dfa088415bd154c0dd10534157f14161057054814ec144d11ec04f113b2134c1294019b135d130612c20452121713cd116d01f011d9133a105d04990d580a588a109719954291b6203b9d009b5a9cc62845a49da205a4fb2f7ea57da41da57a30bba688a536a6e5305ca7d4a59ba64731e0a77ea6e0a69131bca793a695a79331ada71fa72aa88331caa71ba87ea84e3154a8dfa8cba9f93013a82ea9dda9793078a7cba83daae82f99a7bfa8e0a9e72e28a7d9a877aa012e34a739a998aa3c2daaa60fa9b9aa762cb5a61ea9beaa332b6aa604a99eaa2f2af4a5d2a8aaaa062998a5aaa891aa05285da596a891aa482626a55ba87baaee249fa412a866aa5c2363a45fa70daaf9203ca4f0a6b1a9dd1e9ba316a610a9711d8ca217a573a8161c56a18fa4aea7b4167ca08fa377a63910ed9f4ca2d9a5f68f2a9eb5a0bba4628f5f9cad9d85a2bb8e4f9b599bf7a05a8eb69ada9805a0210eb4991492a09cb10d3e98a2148c98320d4696b6182893c60c9e93111ac812850c8f90601b7e17480c458bc21b7e19fe117b84031c0c1ba3113404771b691b5c14e703d61ac51af7139603bb199a197b105f035e19a31848103b0394185317a812eb02a417e2164212a70203172415b7116e02b815b114371147829a14aa12c3102382251446127b103b867513141014107c86d5118b0f4811e385b710250f6e12ad88a510390c5512b68569106605b910aa8f5c0cd510901489846d084b0afc1448970696b3956120fe9e969e1aa0c428cfa366a200a4b52f84a53da4bca47530ffa6ffa4a2a5dd308fa7a5a578a61931a7a7d6a5bda64f3109a800a78ea77a3131a8a7a77ea8633122a85ba8d0a83e3174a8dca871a904313ba8e8a8eda9993051a844a954aa0230f5a75ea9d2aa072ffea780a9ffaa022e75a768a911ab132d86a756a905ab582ceea62ba9f3aaa22bc6a609a9aeaa422aa2a6c3a877aa46294ea65ba81aaa4728a6a53da8faa9c2263ea507a8e9a97e25c2a4b7a7c0a9602464a42fa78ba98f220ea494a648a9d121bba31fa6bfa8f720f9a250a520a80e2065a290a4dfa6801ebca154a487a6391dc2a0e4a2aba52a1c4a9f81a1b7a4241ab89d8b9fc4a333187f9c6d9d40a20818e69b009a67a0a817f899320c5e9a3f14f5967c196d8d6d0de694111a370d370da2946b1a5513e30c5093a61a6c15568c8c91391a0f17090c0190d6194f18a90b708f6419d8173a11bd8eee180b17b210538e11188c1646130d8eae16dc14f112d68d4e15801280120a8feb140c123c14c68e7d13b10ecf136b8e6f1131083d11228e430fdb07e910bf8e060c37875012d48d5d0bf18cc4114b8da104b18c7911018d6884868f4411d48c3884488f8d12af8c158ae88ed510468cb38c5e909d11218dd48f0c9056145b9559944f95291dcf9ec89da19e962887a4e0a2fba3ec2f88a581a414a55230cea546a504a69c30e4a608a604a7f23095a7bca6e7a72931fca743a745a8313113a8b2a792a8203155a855a824a9f5305da8c4a8aca9b13025a8dfa8dfa9303030a8f3a8f1a9ac2f1ba8d5a8d9a9b12e82a7bda8c1a9b12d85a7dda829aaf12c2ea809a97baa612c45a876a976ab762bdfa738a95cab1e2a3fa703a9faaa112998a6b7a8bfaa0c28a9a580a8a6aaea2682a557a87baa8e25cda4eaa70daa8f2476a449a7bda973233ca4fca689a93322eda358a630a9d520c4a250a559a80320d2a138a470a78c1dffa007a3c7a6e61a74a077a252a6c518959f54a156a53a151b9e5b9f0ea4fd14219dd79d7ba2b614a69c009d60a17314409b7b98589f321470989f16009a00149195bf1a96139613a8945b1b231817137893c71bfc188915b891101cc01a31150590881b3c1acc14608f4d1add1831165f9083184e17af151090131663132b15929088141110be143d9031140b096a1400902712bd8826149a8f2510b48e961115909c0c3e913e11a18fa505ee92f10de68e370596928607818ef004189447074b8ea9843692530dea8d5f84c591f20ce68c1a84f0900e0fb68db58969906910d78a7c8c4790801115917b909b94f6119392a216f017581d04a15ba04aa05d2befa3b8a271a32b2fe8a43ea306a40e30b9a54ba46da56c3097a6fca459a6cb302fa71ea635a7023180a7b4a646a80c3180a73aa798a8ee306aa7fea725a9ab3069a75ca8a7a9623068a7b4a8bda9e82fdca7fca80aaa0c2f06a823a996aa232efca774a9dfaa5d2ddda776a9daaa8d2ce0a634a9e6aaf62b5ea633a9b7aaea2aeaa5f3a892aacf29c4a5eaa8c5aaf72877a591a889aafa2710a54ea840aa5526c7a438a82baa272588a4f0a7f8a962244aa4aaa79da94a231aa447a771a98022afa36da6c8a8a82197a25ca5eba7ef20b9a17ca4faa65020e5a0b1a333a64b1f55a0a9a2c8a5311d269f12a1d0a4b41b589e46a02fa4b719709de09d65a2c0176c9cca9939a05717529a028c839cf2166198b516f0939d1629970c1a1a0da6137b95c01a1d161d166694601ada15da151e94fa19771577156f937f19ed16f214fe925918851485148d920218231423143092401692109e13aa925813a2090b131093df10e68fe60f869237072f92f308fb91af864495ae882a92c58ffc955a88a8910d91aa9716081891ef91fb96720724915f911f97070def904892dd957911c390ec913d962411e28f9892cc960211a38f2493cd967a0e068e659363955f13b08c8d9091935d14b7900c0569876718a0a014a0f79d702a98a307a2a7a2ee2e78a432a3ffa3b32feea44fa45ea54030dfa510a55ba6983060a6b2a52da7d830cea6bba6dda7ea3071a7b4a792a8e73096a772a854a9a530fba7b4a8f7a94430c9a7d5a8e4a9a92faca7d1a817aac62ec2a719a97daa0f2e14a853a9cfaa512d4ba85ca9b2aa992c82a723a9e2aabb2bc4a639a9e8aab62a98a6e1a8bfaaab29d2a6f9a823ab06290ca6d3a8b8aa3b2830a57da86eaa4927efa439a808aaf6259aa411a8ada9302568a471a785a93a2412a4d6a621a9322386a30ba6c0a8772101a364a550a860207da28ba48ba7ab1f56a241a3bfa6611e8ea150a248a51a1e66a023a15ea48a1d3c9fc79f4fa3591c979d3d9cc7a0341cdb9cdb98f19e931a2d9c2795429de818099ae311ae98af1648972d1a2d0d88181094601c6318441696940e1d9b1a01167894c21c5c1ba9151694f81bb3192e155393db19b816cd146394e516ea0a52148c94a7119a905e15b2943288fe946b16c694ea904c97f915be9415949a988615b59482956c9923154594b49691996d13be93cd968d99c212ac931c967899211215932696e8987e11b992d69592989412a2922d965c98ac138a92839551989813ae92e3952d9859135e910a958e973a13048e5093369864857f8f6d1503186c0e9ea0aba180a1592a08a4a1a0b5a1c02eaba45fa236a2b42f3aa508a46fa4243003a60da54aa58f3048a67ea57ca69e30c0a6d8a61aa8a13017a710a842a9953079a778a80daa663005a8cda86aaafb2f39a804a9b4aa092f80a87fa950ab392ed7a74ea957ab892daea786a97cab0c2d90a76aa938ab632cdaa62da9e1aa472b47a613a9c3aa0b2a20a61da9f8aa622945a610a9f6aa9d2857a6eca8c7aaf32725a6c6a89baafa2684a57aa83aaa052632a538a808aa0425fba401a8c1a95d247fa420a72ca968231ba41ca693a8192276a331a5e8a7f520eba238a4d4a6dc20bca19da11da5512079a0ef9edca1601f43a0c09f86a2791d889e789fa0a2ec1c899ef69eb6a2e71a539d2e9ed2a229193a9cc39adba03217049bfb16289428149e951c1cb9180c14f890db1dd0192b0da58e951d9b19fc0c7690de1c4e1913135d911f1ce01969120891e61a4119c7148a912a1acb185c14f7916018c0108b155f943a886c96221354960398bf9a6c123096f8984e9cf011e99508993d9c7811f995a198fb9b2611b195ae98fe9bd81066954f98669b7c10ea940298b59ab11127940498379ac712b7936397c6994c1233926c968599af104d92af96b0981d13e2908295cf9aa58e57920598159b9c900a8f3b172a188d119ca055a206a2f62925a4bda22aa4652e25a4e4a08aa21b2f33a4b8a0e7a1fb2f6ba49aa22aa44430d5a4a4a4f1a55a30a1a5d8a65aa83f3088a642a862a93e30c4a60ba91faa1d300fa71ea97baabc2fcaa61ca979aaeb2eafa6dca82caa3b2e60a6e7a841aa672dcaa6a5a820aac82c75a7e8a879aa292ccca652a926ab582b34a64aa948ab0e2a4ba655a97dab2f2933a68fa962ab6e289ba54ca902aba82752a5e4a8c5aab42615a599a88daa9425a7a466a852aae2244ea431a80daa0824dba350a773a9f222fba229a6a4a8e0213aa239a506a85d212da14ea31da6d82032a030a0aba4bd1fdc9f859f13a47c1f599f1ca03ea3351e189e34a0d3a2cb1cf09e08a124a40d1cf39d739deca2641a189ca099689ff018ce99fb14cd98dc16b1982a1e191ac7164095bd207e20fc13d8929620af202b0df88ec71f7f1ef38c3d8b4b1e461c8e8ca18fc81b9418128c44948714ea8aea8ab795b08ec496040afa96b796519b2e10a398f19aa19db80f2098259bbf9de511d497f59a479d6a117397c19a159df5100a97689afd9ca4105996329aa39c5110a395b399209c5f11e49406992d9be7107794c998ef9a16122c946b987b9a501343945698f699311452933298149aea1100930898129b43050000ae142515c081d0a35da6d7a7f22acba58da519a8512c65a2a2a01ba01a2eafa10e937614752f43a37199e19af42f70a56aa356a32030cba505a7cca82630f5a50ba87aa90a304ca68ba8dfa9812ffca69ea833aa052f84a643a8bca9482e43a6eaa74ea99a2d16a6afa71da92b2db9a5eaa705a9a52cf5a588a8bfa9e32baca6d7a84eaaa92ac4a6b9a9eaabb3298fa644aa77ac962876a6e8a94eacf02726a668a999ab97269aa507a90bab9c2532a5cba8d0aaf124f3a490a893aa6224aaa44ea85eaa3e2357a4eba710aab3220da437a7b0a9352269a31aa6aca83b2238a2fea351a633223ba2a19e35a235224ea12c9a109dc021a79d4b9aaa9d6c1e9e9ed9a093a38b1df79d35a0f9a25d1d759de99f11a43b1a339c989817a1ea18b19b2112fc96fc161496f91df81d37142913e0212b22a40d3914dd22db22a00d540fea21ca214b8d4e90081f551e688c0994031a9d168f0b4195701444941e11fa96b1934f9a741001989c99269da5124898489b469e1e128a98559c299f9e11de98629ce49e34118d98099c589ec9105398629bb79d0a121c98c19a449df20fc596549ad49c4d1119960e9a7e9cef10b795de99159cab0e2b956899dc9b6a0ef1947d991f9b3e10559435995b9b3410d7932898279a94040000b71b111c2b0e7ea35ca617a89729d2a285a4c9a6e62839a3aa9cb9a07328f9a0c820dc22062c8ea13e9a4c95dd2f3ba486a3ffa4642e00a6d9a799a9a92dcfa7fca85eaaae2d4ba7e6a847aad92d52a644a834a9a02db3a5f6a638a87c2d84a5d0a56fa7562da1a5aaa5cca7052df5a5eca6aaa8802c8da6e2a86aaa5f2b40a7c0a90bac162aeaa60baa27ac04299ba6bfa90aac362858a686a9f3ab3a2722a638a978ab0c2613a6efa825ab3a2578a5baa8c6aa8424e9a48fa887aadb2371a44ba825aa4c221ca417a8d9a94f2104a4c1a786a9ce202ca481a768a9172079a427a6baa96620639e9414489b6c2050947023db23102089a0849f04a2781bd5a21ba4b1a5b31371a085a3b9a6f813a99e8da240a6001a1b9d32a072a24c1ccd99308ceb98ba1b99868721c42093147219d324c6243c8e641af1248f25ae9489183124cb243c97f10b4120671fec95c1986c10ee91ee91119b2f98059cc58ae49a1c9ca09e4c10269aa79c959f3112a599099da89f91113199059d609f3f13d998cc9cd99e7f12a6989a9c559e02127f986b9c5e9ed9112898219c389eb611a797019c259ea411b8966d9bc09d75116696d39a519d350ff7953d9ad79c910efd95289a8c9c50102c95ec99ab9c590be894cf989b9a780a00007115571742054ea308a8fea8c9283aa48fa7dba8e92994a45c9f7ca135297e23332d862e40294b9bed21b622a02927a569aa1aac002cbea627ac7cad4c2ca4a74bac50add42cb1a7e8abe8ac502dada811ab6cac4c2d09a5b6a5caa6972c3ba1dc126714052d96a2329c869a182d50a63ea8e5a9f62b98a65baa50acd429d3a617aa21acd92857a601aae8ab3d28fba5c7a97dab6e27afa557a934ab97267da513a9f5aad7253fa5f0a8beaa0b2507a5c2a88eaa8124d1a492a85aaa9023c6a46ca82aaa3622a6a444a8daa9432153a414a8a5a9602018a474a74ca91f1f4aa366a7b3a9eb1d989f0ea629a8261d4c189d23df24ad1f8d9c68a568a7741a37a07aa407a77919f1a03fa4f7a60518169feca2efa5b815b39dffa0b4a3651ab79ad094159b791d178721226221621cf619ff265d28420f411e212804296995d1192725a426b397b78bff1d3c1ff292f898d998b69cef0bde9ab09d7ea0b00a189b589ed1a0d60fe29a7f9eeea0e311279a3f9ecea06a117299c49d58a0e5102299929d31a098101499599d17a0610dbf982b9dd29f250d7698c09c879ff30ce697769ce19ec00f5d97319c159eef10e496ac9b769d90109a965c9b3e9d62108796159bce9c2310f195909aae9cc30d0a95a799039c710d0000a71db31d461aa0a4dda7faa81129b9a3eca745a9e629e6a57daa04ac142cf627ec2fcd31602ca5a5c6aa04ac932c98a50faaaeab372c34a666aa2dac962c32a649aa35ac242ca2a680aa47ac472c60a61daa8fab702a39a19fa44da67c2593a181a149a4d51c2b9f311aaa180e21b7a482a97cab092394a540a950ab4f25c5a582a959ab6c25c2a57ca97bab6525c3a566a960abfc2493a539a937abae245ea501a9f1aa2c2421a5dfa8c0aabe23e7a4a1a86baabd22a0a467a82eaa222289a440a8e9a9462159a40da8a2a919213ca4e1a773a99e2002a48da756a93520c2a33ea7d2a85b1fb2a130a653a8d01e37908299f29a28177e9d60a22fa52d947ba0eca43ea7de0a919f5ca461a61b1619a034a447a63a1893a028a31ca53b18869dda9efea2ef18cc929a1e841e5e19b320de29d42a3597bd229b2b8a2c509a441ab925202743959f969e0a56923a0c2c9b909d50a03a10a39c429f8ca14c0f219c9b9fc7a1b4117f9b079faea1920ee09abb9e4ca1fb0d3c9a739ed2a0710dc899059e7aa02d0d9f99ab9d61a0c1063f996f9d40a08e06ff98119d0da0cd0c78989f9c4f9f710c18986c9c629ea410ab970d9cc89d51103d97b09b6c9d59115797b79b079d19117d960d9bf49c7813a395979aa99c7c0a00003e1e3320b11322a389a7d6a83c2774a5a1a84eaaf228dca032a59aa6f026b60e3b91fe949e21bfa396a8d4a9232940a545aa13ac182b39a593aa30ac862b87a5b6aa5aacee2b8ca5b9aa5aaccd2b65a57baa30ac9b2bc8a4daa9aaab0d2bd8a254a8c9a96029e49e21a3eca4ff1f35a3cda5a2a77c1c54a5a8a825aa122076a505a9e5aa432268a5f2a8d3aac72279a5e4a8d3aac7226ca5d2a8a6aa6e2238a59ea881aa0822e5a477a830aae5219aa44fa8f3a96a2151a426a8caa9a22010a4f1a792a93520dda390a758a9941fcaa32ea717a9531fb0a3d1a600a99f1eafa38ea6dba8851eb1a2f5a55ea8841d6ba092a438a6771ccf9e3fa318a5061a779f86a3aca5be172da0a0a31ea65c13e89feca31fa66b1012a0d0a33da68110179fcea3c1a5bc16789c4ca1baa4e518781d2629592a5c1ba6271a300b31429e8a9cbc9dbaa0bb15f19ca0a0c2a366124f9d8ca0fca2bf13529c6da098a25013669c44a05aa20811cc9b15a012a2bb12269b959fc3a1a810ad9a2f9f50a122126b9ab49e01a1e611f399309eb8a090118c99b99d5ba03f111599349df29fe410b398ce9c509f9a108198649c959e561089982c9c0c9e3f114298d09bc19d1d112b98e99b669d0312f197ac9b839d1413a295489a819de4900000521bbe1c6e1455a2e0a63aa86f271da45fa610a8e2271fa0fba485a66b260ea11ca5bca619260ba407a872a96628d3a430a9d8aa772907a5f1a9d0ab0a2a78a555aa27ac4d2aeba582aa42ac572a26a6b6aa5fac6c2a2aa65caa19acfd291da55da9cdaa442930a30ea887a90628fba256a76da9d02417a422a8f4a9642399a48ba849aa1123c8a484a839aaac22bea474a81aaa4d22b4a462a800aaf5217fa454a8f9a94b2148a43ca8f3a9f3201ba41aa8cda94320e4a308a8bda9cf1fa1a3aea781a9fc1e5ca34fa73ba9bc1e2ba3eda604a9741eb8a27da6a0a8201e5ea2f9a535a8bc1dd3a171a59da7441d2ca1e0a4d6a6621cbba063a43ca6931a4ea01aa4e1a57819dd9fd3a3c6a595188c9fb5a3a1a548169a9fb7a3a2a54a16989f5ca384a5291665a05da32aa51013e89b59a074a30612de0d9912aa14188c49991d9e73a279979f9dffa01ea4c58dd59cd0a0fda25d12619c72a091a20a14079c47a05ea23412649bf69fe5a10e12fe9a8e9f8da1d0119f9ae19e06a17711149a579e7fa069128d99c79def9f94101799579d779f6710bf98ea9c139f42106d98ab9cd69e35103b98709c859e1a1032985e9c649e05103498289c0c9e01116498199cd29dd1101298b09b609da910de96e49ab79c29130000c11b211d1702bda1c9a5dda685254ba140a6dba74626dda0b7a528a7cc25aaa28ba647a87626daa31aa876a9fb272ba4cba849aa812878a447a9f2aacf28eca494a970abfa2830a5cba998ab142933a5cca9baabfe28dea4a9a969abc0285ca42da9caaa492842a4bca83aaa282767a45fa8d6a9f525a2a448a8a3a98f2479a434a8bda9702362a42fa8c9a974223ba40da889a9bb2125a405a892a9122108a4eda77ba9b020e7a3d7a75ba95820afa38fa73ea9ea1f7ca362a71ca9b81f3ba328a7f6a8f01eeda2fca6dda8411ea4a2c1a6c2a8971d37a27fa690a8ec1cdaa13ea66ea8c61c5ba1a6a50ca86d1cdba0f4a407a7141b71a061a454a6b6190fa01ca4eda5b4186c9fb5a3b0a5a517d99e67a3a1a53016779e36a385a5b814409efda278a5ad14f59dc6a295a5a2148e9d91a16da444154e9aeb9c799eec138e95b79aae9cbc10ba9bc39f13a2338fce9cd6a0fca34e987e9c9da094a3a190429c84a062a37f8dde9b34a0cca213874b9bec9f05a2b306da9a609f93a16d06b29a009f3aa19a0c859a8a9effa07b0c339a399ebda0550cf299e09d7ea0300c7699689d05a07e0eaa98de9c2a9f170b55987c9c929ea40a0798509c6c9e7e0a3d98549c479e580a4c98409c609e4c04b497de9b659d72121d8f17938c904f2410235026b827652cc0234428aa28912d59256829732a802ebd25a329b12a502f5d26fd291d2b0230e3263d2a862b1d3005275f2ab92b4a3067274d2ab72b4c3092278b2adc2b1a304a26ea29752b212f41253e29112afd2d52a354aedbaf242e1b9a50a803aa912c5ba563adecaeb52d1c2412286028bd2a23235327bf28ea2816222c2657285728bc21b62506287f28061f732263248929b5a9acb120b3322bb89f5ca8aaa8b89b361d7224aa254921c01e5924e625e622f21d812387240c20ac1dc4224c247c1dea1c60220b241c1ec61c61223324eb1e8f1c34229a247f1a920e609ae69ae30f4e1e11249b255a9c361d0123da24f39b0f1d7f23182508989a1c1423d5241991cc1c08239124d1107c1caa224c248e132a1c2122fb23e914821baf2158239a12311b4b210e235712cb1a0b219e221512831acf204b22ca11351a7e2003228711ed195520cf2158116c19222071211f111219d01f3b21ec100619671f0f21c3109c180c1fbd2091106b18991e772069102718581e402033100018081ee81f01105f17991da11fba0fb1163f1dcb1e0f0f3416b11c0e1e750ec2155b1cd51d5b107615161c7c1d35104e15111c411d08105015c91b171d9a0f85143e1bed1c410df115801bf51c050df38842938991d81c47228325c425b72d3e221827f526772fef229027ce28683082237328fb28e1306424c028a0293b316e243029402a4c319d2465297e2a6d318f248829292a183122242f29f529b6302f22f526e0270e30491635a1c6a3462e84a15facd7ada12d74a1e9ab8aad1a2d8fa144ac5fadfb2d368e2ba30aa5d12c311bd62024215c2b9b1d7f23a824c32a901afa1c431e982acea0f9a882aa822ae4a5b6ae51b02e2766a37aacc5ad65a12b9be2a476a6cba4cc0a559972985fa5ad09eb15981747a3ae12101ab11bdea2c115941be51ce3a35914b119cf1cbfa3c18ef39ca59dbfa4c2982da380a4c5a4be107e984998b79c4319aa1ee71fdb951d1b88213f23829ac51b21220d245095b91b06221624db91611baa211a23960a1e1b8821f1229010a41a7721fb227213ac1a5321c3220613281afb208b22a012091ab92031224512ea197620d521e811c9193920822194118619cd1f1f21521133195d1fdf200f11bb18101fa420d2106718a51e5c20a610fc175a1e0d2071109817e01dac1f34104d17a41d2e1f82115017271dc41e31119216a21c071ec110af15371c531d73100c15681b171d440eb514001bcb1c8b0b9814941a9d1c820be514501a471cbc0a3a141a19741ad20e2812401851193609b185ca081d09ea1dd11d59236724572ec91d4d240b250e30201ec2243a260b31e61e382537268331971e8c25aa261232f21fd1258b273132fd1f7d26322840328e1f8e26e127f431741e17269e265b31df167b220321ca30019d93a28ca5db2ff1a172a92dab452f55a20ba96aabc02e75a0b0a828aae52d5b9ef8a588a7982c9e9c50a244a4322c979b53a1bfa2222bdc9c0da563a6422a55a111a9a8aa9c299fa343abbeac25260fa39baa2bac221d12a172a8ada902a0f09f3ea6dfa74ca3ce9d8aa4d0a50da4509db8a3f5a4f5a4b99cefa27fa43da6559b39a278a43ea7169a23a275a31ca5e2995ea1f6a272a2e495a99e45a045a07110da12c914c79efd180020d620569be819d9201f222e98131a052122227495ed1900210822918b6f1a13215722e10afa1916217922ee10d119e5201422a210b019a020e72144138e197220ab21c5121f192b2078217014db180a201e21271480189f1feb20fd144b18411f9e20b9151418aa1e3f206a15ee174b1e03202f147d17eb1d941fe9133717701d291fd0111d17221d9d1e87117116cb1c411e780f0b166d1cc31d170f87150b1c561d110c40157b1bee1c770eb914f31a881c5b0e70148a1a481c3a0e5e141a1a791c6510e313731a661b2995a5135c19121c5f8b00801f830a0492132798701ec41fbe2e969a091e2c1f8430aa9ab81e36217631999b381d6320ea31719db81dba208a32609cf41dec20d0326e9c1a1e1721dd32bb9d3b1e5e1f9632919d6c1b771ce731a79ed694729c3c31c9a11ca5b9a75e309fa42da887a9942f81a35da8d6a9cf2e4fa36ea87aa90f2ec0a178a7a8a82f2d72a1d4a63ba8292cc8a17aa610a8352bdea120a775a8fd29a1a20ca929aa672803a426aad7ab382653a3bea952ab3323f7a1e0a836aa3a1358a109a86ca9aea0afa0fea6b8a838a420a093a625a8f9a402a0aca5a2a7eba4e19e07a5b4a6cba3259e84a4dea5bba1d69ca9a3e8a482a0329930a0a7a12da0a98d80932e986f9dec11f61be81b789ab015e41d491e9e961517201f1e2019962d18e81fa3204c95ed18752042219b910e19b120ca21fd8a3019da201422988a1b19ab20be213b0a23195f209621dc09ee181b2045212510c418c71ff72083126a185b1fb420670f3a18071f7620050f1e18bd1e4b20c10eee173e1e1820710ea417f61dca1f16083917971d141fc30dac161a1d961e5c0df915ae1c261e010d7d15531c5a1d810c9d149b1ba11cbb0ef9139d1a321c550e4813121ac31b170eda12ec19461bf00d04138519e01a9d0d22122019ea1af7119a12f8189c1a68140080460388032e0ed69c77182113132fc89e1b933e14ac3094a0b5998e945f31b5a1549da59b033232a2d69d339cb23234a349a06c9cf4325aa3329e849cea320ba46ca0929c8632bea3a1a133a40f3286a304a4e6a46a3140a443a631a8b1301da562a8cca91630cea4b8a847aa0a2f18a44ea8b6a9482ec0a33da86ca9592d11a466a879a9472c36a44fa88da9192b1ea47ba8eda9ed2919a408a9b7aa842872a4b1a95cabd72559a49ca93fabcc21bfa32da9eeaa1e19f2a292a848aa1e9c79a235a8caa951a027a204a8fea872a160a1e4a64fa8bfa182a0c6a542a740a1d79fc8a45aa6cda0d39d57a394a4d99f0e9c38a1d8a2239e1a99d09c389fa59ba194ef12240e9b94058ebd1a951b838d740d081ca51cf58c2b11f21c4f1d798cf214061eec1e1a8ce816221f1220718ba817741f9520d28ab317a61fbd20748a0718731f71200d0ad517461f5920ae09e117d91e1a205c093a17581e03200909ba16fb1d881fba088a16da1d1b1f750840168f1df21e31083216501d9a1efa0ddf150e1d341e9e0d5d15a91ce71d590d0015471c6a1d180d6314d31bf01cd60c7813cb1a491c610c0113e919931bbb0e85124c19371bb60e5a126919f91a150c72120a19af1a850e5c11cc18e919100e5811c21721198c0df10f3f11a210e088fd96f612cb0c0525eba0e998de99013063a356a008a081316da4e3a1c1a10832c4a458a23ca2a03210a5aca20aa4ef328aa5aea4f7a405330ca6d9a421a5f432b4a583a5b0a671325fa549a56aa6cd3139a512a67ea7f3306da56aa7f7a83d304fa5a7a8caa95d2f5ca5d1a8f4a9842e5da5d0a8d2a90a2d41a5b7a8eca9572c67a5e1a83aaa052b63a50ba981aafe2907a51fa9ccaaa628f5a43ba9f0aa9826a9a437a9c0aaa52424a4e7a89faa772178a3a9a838aae61bd7a23aa897a9de91f0a16da70aa9d59a2ea137a643a8819c6ca022a5d3a6769de79e28a49aa5529e079e6ba33ca5e89d619c92a0aca2729c55993d9c839f309a3b95b78cf997f9975c90aa177b147797eb8ca019dd18f396870c4b1c0e1c3d964512771dc31d7d953e142a1eb61ef791cf15d21e9a1f87919316ee1ef41f29915316a41edd1fd79055168c1ecd1f91908316751e761f5e909916281e6c1f86895016dc1d0b1f3e89e115801dd31eda088515301d681e8e082115d81ced1d520eba14551c791dd70d7c14041c0d1d640d3214721b7d1c020d5313aa1a321caf0cb612e619771b5f0cf6111419ad1ad90ee9105118b2198e107a10bb1714198a112510fa1678185812f90e22164f181d12530c5c148916520f7e907a0c070dd118379dad967f97a72618a2af9f4f9f143084a477a19da1a7311da509a43ca4fd31ffa5e7a43ca58032c3a62aa585a5f232bba6e8a56fa6f532d1a60da64fa7c83219a7a1a63da76e321fa791a79ea8de31aea77aa81fa91431f1a68ea891a9583073a6c5a8c6a91a2f43a6c3a8d7a9112ee2a5eda824aa372df9a536a93baa4f2c07a645a99faa242bc5a512a9abaab229b1a518a9c0aa3b283ea524a9a1aa4e26c5a407a985aac22471a4d5a870aabc2242a4cfa838aa3620eaa380a80caa361d3aa325a8a6a94e186ca244a7faa86591a0a126a644a8349a85a042a5cea6c79b6a9f01a4a0a5ff9aed9c73a1d0a3059c719b329faca1909bb1998e9b949f2e9b8996808c069b069bcc91dc18fd0dbd9a33864d1bd418359a170ff21c951c479895133f1eca1e6e956314fa1ea71fed914a15d11e8e1f548b8c15a61eea1fd80a7a157a1e611f620a1415071edd1ef0090315961d6d1e8f09bb14021d071e37096214ab1ca71d550f13143a1c131df50e8b13e71bc71c8e0edb127d1b7f1c2b0e7c121c1b411cc707ff114b1a9f1b6407dc11041a2a1bf20603117519571a9c0cb410a018d1193b0c4a103c18a519d80e8c0f1f183319b60eca0e0e17a9186e0eb20f4517ca1854100910ab163818e610c9818e145214fb16c69b8b955998832557a28b9f179f053085a40da23ea249313ca5d4a3afa4e5317ea658a5c3a57b3235a72aa6c9a6be3274a7eca6b9a7c2324ca7f7a64aa8aa32aea787a73ba8353208a845a8e1a8bd3137a8b7a869a91b3193a8d3a88ba97e309aa814a9f0a99f2f2ea840a948aa832e76a84ca953aa452d99a786a9fcaa492ccea63ea9f4aaf42ac0a5eea88aaa972967a5e8a864aa99282ba5b4a86caa9f27e2a4a8a834aa1926b0a470a825aa3b2462a460a8e0a9c82125a41ea8afa97f1ebaa396a732a9161875a282a6e3a8219177a1d5a56ba8339a28a120a5efa7319c36a010a43ea6709b459ee8a1cca4369c739daba01fa4029cae9c839f6ea2789b259b2a9c66a0e39a42983a95a89c739a0e95c511b296079add8eda18030d63983305021c2e182e985c10891c241b7e9532122f1db31cf294c012171d3e1d789112144b1db41d12915e14fa1cbb1d538a2914fe1cb71de689c013a81c451d7089f7136c1c011d2b898513361cba1ce18802138a1b831ca88812122a1b451c6908cc11cc1a061c27087911fd19f91ab2079c1084196f1a530d61100c19cf19cf0cab0f2718791949118e0e47176c18f3101a0dd9167d178f10500bea1450166911810aef141217eb0fa00e5715c316870e0d8faa10c30da0162b9e3e9af79a32245ea441a290a222305ca5bfa322a4fe3081a558a49aa4b73133a645a5bea54a321ca79ca6afa68e32f5a7dfa6a4a798324fa895a74ba87c3265a8faa733a8293268a87da8cda8bc3155a8d9a89da90f310ea8c7a801aa573043a71ca951aa522f56a711a968aa0d2ec6a749a9c6aa0b2d45a75ca908ab2e2cd9a63ea9f1aab02a58a624a9f3aa8929fda5e9a8deaa782884a5bfa865aa1b2730a593a858aaa925dda470a82caac024aaa41fa89da9ff2282a4b2a78ea996200ca47fa752a9141ed1a2bda623a9851a05a2f4a5b5a8c810bea1e8a483a73810b5a0f5a3cea5e88f239f16a2d8a48f8f0a9eb9a010a4070f989c5f9eefa18c0e339b479c0ca02b8e63995397979ca68d7b97bb0b9b98e593c3946e16b193b193208f801a441850938205271c111b598c3f0b861c241ccb8bc70f941c581c500bbd109f1cf01cde0a6e10541ca41c750a0211521cb11c010aa410021c5b1c93095b10761b0e1c31091e108f1a921bd9088410271a121b8608430faf19861a2d08180f5f19a919e107c80e9b184f196207230d4818de18c506740c49170518980c170c4516e5165b0cd809c9143a152f0c050ba2141a157105bc09ea132b14b10be40a05141a0525941207b9083c905a96278fed03698472176d9d6897a09a4a24a8a400a243a2c52fbea53ca4b0a4ff3032a6dda4d7a592311ba7daa570a63a32eda7bea699a7a6324ba88da749a8a93241a816a8aea8813215a895a853a9323202a8f9a8d6a9b431bca7f3a8cea9ef308fa730a91caa453002a708a943aa102fffa60ca95eaae42d22a733a98baaf02c41a746a9a8aa562c65a73ca9efaa2d2b6da725a9f3aa022afba6fea8e5aab5280da6c2a88faadf2760a5aaa88caa732614a58fa86baa0625a5a422a8cfa9fa2339a48ea771a98621ffa30aa723a9bf1e0ea3aea6dda8ce19b0a19fa560a8aa16caa1e1a406a85d9005a133a46aa6309060a064a36ba5b58fe79e41a13aa4ef8e049de99e5fa2930e559c709d3ea1368e839bfe9b28a0c88d6f9a89980a9d608df397c311a8931a8df192d81a4618e28cdd8e741c691b8f8c7a8b7b1cdd1b318c9504701c071c958b430a021c551be68add0c081ca71b728a950c041b351b128a5e0c8d1a0f1ab4893c0ca819af195a89160c49194719f788870bd218e218e58e980a08188418608e2d0ca5177c17fd8d74098e1611169a8dfb087815aa15f886d40820153f1575065a053d14de147e0ce104c7137814e10ea504691336138e0ebe042a12e512450e5b04cd11ca13cb045d04540fcd10678af20afb10af12e613279b49958499852429a4cba230a4942f1aa535a499a4e7305ca641a5bda58d3122a726a6e1a61a32a8a779a605a883321aa837a77ca898325ba83fa8e4a8793283a8caa88ca90a32b4a883a91eaa8d314fa823a915aacf30b9a7f1a842aa023089a722a928aaf12e4da71ca96faa172e24a71ea9b2aa0e2dbea62fa9a4aa332cd1a64da9bcaaf82a56a60ea9a5aa8e29dca5e3a8b2aa6e286fa5c0a892aa412747a5a2a880aa7725f0a459a864aa2424a2a4faa71faadc2158a471a7e2a94a1f76a423a7b4a9a01d38a4f3a642a9261c66a238a6bea8a919baa00fa515a86d1696a057a4e6a603105fa006a364a5aa8f629eb4a1d4a46495389d6f9ef6a210950d9c4b9c02a10298569bfc990da0a194b5991592af9c53940c98b4149e9898967095c118c68c2a938e93121aa915cb927590981a79176892458bb51b6a19e18b7c84341be41a598b2a84b31a3b1bce8af1031a1ad8193c8aa403a9197e19dc896e03da189218a08932030f1835173e89d7028b17b416e088970215160515760867829b159d141a8852828414961286079986f112301212075c864512ab11db0c4986f2113011690fe7888f10fa0efa0e78887e10e40ed3103685920ede0b8e0e0e8c1b097504cd0f69897888428a4d0fa093608d03904e120c9d7d99549c4124a0a3fea17ca38c2f2ba5b2a3afa4db309ea614a5ada5573187a7f2a5c8a6da31e1a7d0a6e8a73b3251a88ca7c3a8373285a868a886a91a3299a8e7a8c2a9b731afa808a9f8a96a3175a801a9faa9ba3068a849a947aa053016a852a95eaadd2e0fa863a9d1aaae2dbba781a91eabda2c26a771a9f2aa342cb6a63ea9bbaaf52a9aa607a965aafa2972a6a7a83caad9282ba66fa8f6a98527a4a52da8dea9212621a5f8a7d2a9e524c2a49ca79fa97e234da417a77aa9082246a4f8a64ca9382119a49ca6d3a8522091a2fea531a8b41ee5a09aa436a7341dd6a06fa4f8a61d1ca2a0aba3d8a56b1a519fbfa167a44b18c29d089f77a22c18769cec9c58a1c014229c219b05a0200e559a4692bf9ba28d95976f18039403948e951519220db3939c94701a0e160e962d93db196a156a9564912d1af916fa911e91ce1933189a916e8f5c199517be8aba8eec18e716228a358e0c187416bc09e08da916ca147909b58d461582142789e18ee714fd11ca08a08e7113a10e6b08588e68112b082b880a8e330fc287c287868eed0b26872687c48dd404ee8c9206468c9604b68c4806078d68848a8f0806df8c3c841e91630cac8c0d8ad58e1a0c1a8ca68c3d900e0e338ced8df18f8a04dc94419009910911769eab9bc59c2a255aa45ba210a3792f5fa52ba41da5be30bba569a520a62431cfa653a64ea79931aea7c1a735a8ef3125a82aa8e8a8f73166a8bfa898a9ce31b2a83ba9d3a98931d4a89ca960aa1c31bea858a975aa9b308ca861a974aa17301da82ba938aab42ebaa7eda845aa912dc7a7dda82daac92cdda728a99baa1d2ca7a728a9b8aab82a09a70fa9d8aa6a29a8a6e1a8a1aa632842a6b5a87caa492797a57ba88baa75263fa556a848aa3225dfa40ba8eca9e62388a493a7a7a9552291a45ea787a903215ba47ea60ea92820f0a2b8a54ba8791d52a166a477a79818d5a09da3dfa6740f47a0d4a24da6b595419f87a165a549950c9ec49f0ca4a48e0b9dcc9db5a2218eaf9ce79ca6a1d58d8d9b7199f69f2794e498b111009a558d9396eb198f130a8d9b95901a1f18b58c9b93c31b061a610cb6910b1ca41a160c0c90c41a201a8a0b658f3e1aa419351165907a183017cb10129003164a135f1078907e140110011026907412fb08fb08d88f5e10b088b008648fed0caa8e72081090190636912b08ac8fb785e992e6872a8f538591928187788ef9840994618d388eaa84f991d386ee8d878a7c914506b88d178a3492220cb48ca88c6390450ef38c0290a1926d119e937890f88eba143b92830abd84ec0d3b9f379b6b9d3c2635a398a12ea33d2feca453a395a49e3089a55fa4e5a4ee30aaa6b4a593a670319ea716a7a1a7c43106a8c2a791a8cb3109a873a845a9a73117a89ea8dda9523107a8fea860aadd30ffa73ca958aa4b3013a86ca98daa352f21a882a907ab452e08a87da902ab492dd4a76ea9deaa7b2c40a735a9a7aabe2ba8a610a97faab42a22a6ffa896aa9a29e6a5ffa8a1aa9328a2a5b2a888aa242735a564a829aabf25bda42ba811aa922491a40da8e5a9a82342a48da7aea93322f2a32ba72fa966217aa351a6b3a80821d8a2bca50ba8e120a9a10aa535a704201fa015a420a6af1e6d9f0ba30ba6e91b909fdda12ca5e919079e56a03fa3d617409d4f9dd4a18314a89cd99b79a04b14b09a0092779c1f147698c216e993460d32971c19140d140d8a95bd1a1a16e20c2b955e1ad215a80c2794fa199617560c94937c19d516cf0bfb9252183216150b9b92c8161c14930a1b9327158f10148a7e936d13a509a589ff92dc0dea8fea8f7d92310754942f92b192038d3e95d3914192c08f00967491b491059192970c91be91ea91ea96888d169157911297a786d3902c92d5953906b690cd914f96f005529080921796bb054f9005931e962785dc8e5e9360953912a98d95905e928613e2915089ba8cba0cc59d5e9ae59a4025cfa263a1eaa1c42ed8a430a3eca3533039a555a4d3a4b730aaa523a5d4a52e3157a601a689a78731caa62ca72ba8a13174a76ca833a9943110a8dca80daa313140a869a9c9aac63040a873a9e8aa143011a845a9b4aa2e2fe3a737a99daa292e04a82fa99daa4d2deca75aa9c5aa932c3fa721a97faa982b74a6f4a83faa722a67a6c3a81daa632989a6eba8a7aab328eaa5e8a879aa1e2853a57ba836aac326d9a44ba8fda979257fa411a8ada9752463a4a6a78ba9932308a409a739a9b321aaa30ea6bda88a204da3c8a581a89c1f6aa214a525a86f1ec8a0bba27ea5d41d5ca055a197a48d1d669f2aa198a47e1ca29eb89fb2a24d1b8c9d409daca0ba1ae69ccf9a0aa0eb189f9c2297e79d2b14a39ae311ab98550d77972c1abd13290def94d71cde1aff0c9294091d861abe0c7894c31c441b790c1594f11ba119180c3794da199c168e0b8894ef16d90ad90a3095d30ea3931c0a3e9532885c963e104295e5903a97e20fcc9412948f984c0f5b9478955d99c70e2e949d9677993f0e84939e966e998e07e692ef954b99140d08930c96cc989b0cc392c49587983e0fb19227965b98f70e989283954a98dd0e8b92e1952798a7107f912795899742144d8e6f933a96ee0d2415cc194e1b7896b89a49959a9ae024e8a1e19e5da1402f16a4f09ffda089309fa416a28ca3ae3045a51ea43fa50e31cea52fa54da7333184a632a74fa83a3133a75da894a92431dea703a964aadf301ea852a9c8aa683031a87aa9fdaa7d2f56a8a8a93aab572e1ba8a3a95dab7d2d06a8c0a96fabf02c05a8aea982ab552c46a746a9eeaa222b51a629a9b7aacc298da637a90dab3829b5a61fa9f6aa6228b1a607a9c6aa2c2742a6d0a8a1aa1c2696a58aa843aa352533a552a8f8a98724bfa4f6a78aa935235fa416a71aa9752207a422a69fa85121d3a34ca510a89b2086a3afa4dca6e220e4a111a262a44520a99ee29d97a0fc1d6d9eeb9fc0a2f21a6a9f96a03aa34c1c5b9ed49f3da24b19379d8f9e00a32e178e9cc199dca05214179a8b19910d910df2941b1d641b608dff90de1d101b238d9890931dc81aee8cc691e51c6c1aab8c6a912d1cd819408c2692ea1a3d199e0b96918319bb18e20afa918817a710340a5d9437885996a50989960b98c79a2a8973969398049cc3088d961099f99b660839969698e99b1588c3959898cc9b8f075c953b98359bfd06e094db979c9acf0c1c945d97219a750c41935f97bb992b0c979262968b996005b3922d96b698800ed3915d967299ec0bb391d797349ce5978310d6159b169b96ac9b399b2f9cbc2043a3cda134a4232e1ca3ee9df0a0033005a446a05ea1963068a459a20aa4c73005a5a8a40ba6e430c9a501a77ea8d830b2a6a6a8e1a9a330faa67ca9a9aa8d3037a78ca90bab22301ea7b9a941ab302ff9a66aa9deaa6a2e9da611a985aa982dc9a6f0a85daacd2c3aa7daa86caa312cf5a618a9caaa312b3fa641a916abfc2911a672a957abfa28f7a5a5a993ab3a28aca58ba946ab5a2738a50da9d1aa9b26fba4b4a883aa6525a1a467a839aaa7243aa411a8eca99223e2a379a77ba98122e0a221a66ca86c211da2daa416a75821c7a044a3eaa53e2008a0f6a03aa3101e659d7e9d7fa0b61cf09c67a0b1a2e21ae49ed9a05ea4b11a409e4ca0d9a31c199e9dd69c10a1e4182e9cb99ab39e0d177c990d151c94da1615993d1e101d0d1437959020d120510d5d91a9200c20c4933c8c1b20db1d2a96468b9b1eca1ce397ed90a81b86180997cf946d14bf8ae7953b969b8ea79664934097a696529bf8924798f29aac9dc78f3898369bbf9db788da97f99a899d52889b97c19a1e9dfe872897bf9a059d78876296409aa59cea069995ba99269ca20ccf943f99339b370c64940599e99abe0e209463986e9a980e409493983d9a7a107b933398b89993106c92fd96689953100000581ab91cbb8df3a2c0a661a89a2a19a4fba5d5a7382cb4a17b9c8094862fd4a20b94301556302ea4f69e63a06d3036a55ea556a6903028a6dda7a4a98530a9a65aa962ab4930e6a648aa02acf32f36a7e7a9caab322ff7a612a9bcaa6b2e7ea681a804aab52d0fa606a86aa93c2de8a50da837a9942c1da671a8e7a9062c64a6faa860aac12a56a678a914ab82296aa62baa32ac7b2871a617aa2eacaf2712a68aa99fab2e2691a531a90cab75252fa5eca8b9aab924fda4b0a8a3aae423c4a485a898aae42270a419a82eaa5b2217a419a78ba9d6216fa3eaa55aa8cd2140a291a35aa525222ba2dc9f36a2c821fc9e409d7fa10421f29dd18d4f9a0e1c9e9fafa044a31717c19e90a01ea3841c729d24a0b5a32b1a299b23923a9df7165f99a9193294fe164b930d1f681fa50d9011e2213322ab8d4114a0227e2236945f0c6921b22182966591341e2e1e60958f948d188a169b91b3950b09e995119156973b97cf9bf389ce97ab991d9d47093298309bd49dc8089598489cbc9e990ed798619c8c9e2a0ebb98e59b4c9e9a077b982a9b979dc00617989f9a1a9d2a061397369aa89cd8054796119a749c310cd495e9991d9c5f0515957899f09b2f050a959499379bea045d944c997b9b540bff93ff97ae993e110000b61e9c1f729148a29ea457a57328cca2fda209a5ab269aa0f39c539e45a12ca297206423da2da1a2779d029ca230d7a50aa645a829300aa765aa65ac8a2f44a868abacacca2f41a840ac25ad412ff7a774ab79ac302e44a7a1a925ab642dfda5cea7baa8082d83a587a595a7b62c60a5c3a5eaa77f2c68a5d4a724a9fd2be9a56ba9feab572a43a6e7a90dacb52826a6bda9e7ab8f270da69ea9f6ab732617a661a9b5aba325e4a521a934abcd2465a5e3a8d5aac623eda4a9a8a7aab42280a47aa855aaa72139a43ca805aaa72002a41ba8bca91e2027a4aca789a9951fa0a4f5a51da9ff1f0e9c5b1f161b971f26981421aa21db1cb19eafa017a3281510a2aba4cea65b1476a066a3fca5b8182d9ff7a2a6a5121afe9c0ea085a2591c0b995e173614b91ba38617229f228a141619b524f524c697061af524b7256c99251817249b24809a2d05a41f5e1f7c9a03995110bc914d98539b59995c9cd095339b6d9c609f3293819aef9ce49ff488c199039d879f61085b99ed9c299f05080599a69ca29e32079d98809c299e030d7d98659c449eee0c1698179c349e82067d97e49bf09d71069596719bd79d56063c96fa9a8f9d0706da959a9a1b9d8a05d0953c9ab59c1b0548952e9a839ce504f794a4986e9a4d0a0000a91bbf1b5a8fd1a269a714a9b82912a35da7e8a8692a1ca476a318a4622b7622782c012e772d7b9dad192f20342ec8a551ab60ac2d2e96a777acb9ad0d2e90a783acc8ade42da1a766ac82ad9c2d0fa860ac63adfe2c3da7f5abe3ace32ce6a437a86aa9a22c34a234198094da2cf3a49fa0cba0ba2ce8a573a91bab352a92a65baa44ac95285aa630aa15acd827e5a5baa998abd126afa570a94babfe2597a53ca9fcaa03254fa517a9c4aa712413a5e6a891aa6b23bea4a6a85daa6a22aba47ea812aa1521a5a452a8d8a92b206ba42ba8aaa9601f62a386a733a9a81d27a241a74ea9581c74a0b7a6c3a8d01ab4a080a5b6a73d1af79d0aa540a773172da0e8a40da715157ea030a434a77a0c2b9f65a2e8a58e0c6d9d47a0eca21619679ac8917f98d11c738dd922ca23311d041d9a2726287415a71e3d28f5288f98ae18d224fc25d69a1093a51cec1c369970997b99339ef196969ab69daea0f793139b829ed9a01689c29abe9efaa09e886a9a4a9ea8a032088999ea9d3da0a3074b99819d21a03e071299529d06a00e07de982b9db49fc0068f98f59c389f820619988d9cd89ea10c9d974a9c1e9e420c1197cf9b879dec0ba196669b1a9d470eaf960b9bcd9ce80dbd95639a9f9c8d0420951a9a2a9c3b040000cf1bac1cd21969a438a758a85c298da237a8cea9642a4ca502ab59ac8e2cae24bc2c6f2ffc2d3aa571abbfaceb2cf1a587ab99acac2cc1a608ac39ad642dbba75bac7bad4e2df1a78cacc4ad362d31a8a3acd6adc02ceaa588aa7dac902afea5cda9abab8928c5a2f1a2efa3e72492a39da8e4a974944ea590a868aa202158a69ba9afabde24cfa585a966ab7824a6a563a951ab152488a542a93babac234ba522a906abc82215a5f4a8c1aa3c22f0a4bca88baaac21aea484a834aa1b218ea460a806aa9d2056a424a8b5a91b2026a407a877a9571fdfa3bba757a92d1fb7a378a7f1a8bc1daba11fa65ba8861cf794409cc09d2a15f89db1a3c2a528905aa0d5a4bea73c8b1aa097a475a66a1446a01aa4fda52f1817a0d0a203a53019509e0c9fe6a1221bc28c422094202b1b4a21662ab72b55978322542b4c2c939d0e18d22479258b9c8e973295429abd969c9aa59dada014907b9c699fc9a1688f469c989fe6a1d38e859b339f87a14388aa9ad19e39a1dd87209a619ec8a03387ad99fc9d85a0ce867d99be9d4ea0fb8c11995b9d2aa0d18cb298fe9cdb9fa88c3c98979c359fd6851998619c6f9e5905c4970e9ccb9d6b0b6e97b89b759dfb0d8597d49b149db90dae96139bd49c3111a195529a6d9c8a0a0000d41d9b1fd815f5a3baa7f0a8ea2701a61ca97aaacb29a3a197a637a891281682e897b198122247a370a8c9a919299ea538abb7acfb2bc9a5edabf9ac542c43a612ac2dad7f2c72a61dac2dad582c5da602ac14ad402cbfa58babddacf82b9ca445aadcabda2a889fe6a48da68d26f69f6aa35fa5df1fc3a3efa6c4a8c81b3ea5ada875aaa81e71a5e4a8baaae8207fa5e9a8b4aaa2216da5d7a89daa4a2149a5aea87daaeb20f2a488a82caace20a4a462a8f6a9612046a422a8b7a9e11f12a4eda782a9791ed6a389a749a94c1e96a32ba70fa91d1e92a3e7a6faa8711d5fa38ca6c9a8c01c84a2cda51ea8571c3aa075a4f5a51c1ad79e94a337a5d9177e9fdaa3c3a5261349a0dfa33da6ea0913a001a41ea6e3893ca001a412a6ee894a9f65a3b3a54615b79ffca066a43c1bca20312b772c061e8726d12e6d303ba24e9d559e29a00d92539dbea09fa30889759d65a0d0a27a0e499c5ea095a2420e489c33a048a2f607ce9b0ca003a29e07209b819fafa159079d9af39e3da12f0d459a989eeaa0f70c9b99159e87a03c0645999d9d4aa0e805d298249ddb9f250c8898ca9c4c9fdf0b7e98709c969e330e6098319c0b9ed30d3a98d29bb49da20d2898d69b569d910ffc97ad9b5b9de110f795189a999c760f0000bb1b001dbc13dca213a756a82227efa2d9a7f9a8202854a08ba636a8042817a108a696a71b27d1a449a889a9632852a5b9a999abcb2961a5b5aa51ac5f2acaa51dab8fac9a2a24a643aba6ac9b2a50a661abbeac9b2a43a63eab9fac702a72a575aa09acc0290ca4cca87faa5028e9a29ea77ea9062591a3b3a76da9052356a43ba8e2a95422bda479a816aaa521cba474a80eaa4b21bba460a8f8a9f82094a457a8f1a94e204ea453a8f2a9fb1f19a435a8cca9411fd6a312a8b8a9ea1d89a3c2a77ca9c01d3ba35aa734a9881d12a3f5a6eea8c11cafa27da696a87d1c61a2f3a52da8351cc9a166a586a7b21b31a1d2a4bca62b1ab9a05ba441a6f7184ca00ca4e6a57c16cd9fc3a3bca5e7149b9fb3a39aa5f3128c9fb1a392a5e912959f5ca373a5c21227a0a0a363a59b0905978d9c0aa115886808b30c460f3c8a2e9b949f6fa2d796b09d93a157a46e94e59cc5a0fda24507689c75a073a26910149c37a025a25a10cd9b18a0c5a13c10629bb19f87a1f50ce49a0c9f22a1f90f4f9a749ea6a05d0fcd99ca9d0da0030c4e994d9d8b9fa00bf298f19c169f510b9098a19cb79e150b3e98599c4c9ea90d4998479cfa9d7f0d2c98199ccf9d580d4e98139c879d340d1f98bd9b5a9d380f2497fd9ad39c53130000781c9a1df38c30a170a6c8a7a0252aa106a76ea8f9266aa1faa656a8cc26eba291a7f0a8a2271ca471a8caa93b285aa428a9a7aab328afa4bca94cabf32813a510aad9ab242976a545aa12ac27298ba54aaa11ac252942a511aadeabc328dca4cca96dab4028b1a45ca901ab712799a4bca856aaf0256aa479a8f7a96c2451a438a8c0a9982233a42ba8b6a9d4211ea416a886a9ca20faa307a88ca92120dfa3eea778a98b1f99a3d9a758a9e01e7da3b3a741a92c1e53a36aa71da9021e1ea330a7f5a8451dcaa2fca6d3a8961c85a2bca6b2a8e21b1fa274a683a8a71ad7a132a660a8741a61a1aaa505a8041ae3a000a504a7681977a061a44ca62b1836a01da4e9a57f16c19fc8a3aea5db14f79e75a397a5d312939e44a37ea50710319e1da378a50210f99ddfa2a7a59a12a09da0a139a4ae11599bc19cab9d2a116296319b179d000ea49bd09fe0a1cd90af9ca0a0a6a3b1982c9c6ba06fa31295139c7fa052a35b92af9b34a0aba26890379bf49f00a2028de49a699f83a15b86c19aea9e2ca11306749a7f9ecea0db85209a319e8fa0aa85e999de9d52a07a857f99659dec9f1f05c498df9c069fa2046c987d9c869e650436985f9c679e50044b985a9c209e37846d98529c3f9e860fe497879b689d7a100e8f2fa176a16124c9219525c126cb2c2f257a29462ac92eec25de29132b822fb5267b2ad12b24307a270a2b3e2c91301c287f2b9d2cf7301d28862bd12c04312328702bb52cbf301228572b862c7c306127d42a5e2c1b30e126682a952b892ea7a019ac0bad682e6c1e2ca4a8a1582c5ca51faed9afb82d6d1db619c614e72be8229827152944293422d6268b288b28c4206125d1279a281fa10fab40ac0d2b2aa978b1d7b2fa24b61f6d241e25441f2822b725ed26cd222e2289258526a8219a212525b8259c21cc1f24240725b41ee91d4a238a24ee0df31cf52278244f1a0e1cc121cb23d918121808198d1a5e94d81cb2228624bf0caa1c442380244b0bdd1c9123fe242e8b841c1923bd24ab0aac1cf5227a24b910561c8f2232246d10131c1522d5232210691ba3216423cc0f221b6421fc22890fe11a0a218d22d1087a1ad6203822dc0e3a1a8420f7216308f4195920c4213e086b192020662111081a19c61f3021d007e618851f0a2197878918f61eb620738d5d18a71e6d20fe8619184b1e3520a586f717ef1dc31f4a8653177a1d541ff085a3160e1d8c1e71052016941c051e0105a515461cc31d2f0b5c151b1c661de90a3715071c3b1d950d1d15c11b021d580d5414cb1a991c370ae315641bbc1c0b840080a598969bd21fbe21f324e024052f2b23642721287f308d245128212950315924d028b629ff31f6246b29712a6532cb25ef290d2b8e32a726ff29372bb432bd25b8293b2b4232e1243c29ba2a9731ca232828012987308d20201e751cc82e029dcdaaa2acec2dd59ef9aa57ac662d93a138ac6fad6f2d729d96a804aae62c381aff18261d982bbd1d15223f24252aeb8cdea14da3732a39a4e6ac48ae40293fa54faef4af5e23f89f8ea8b1a9d89c8c8bcf9cea9d411197183f1c3b1da6908d1a90201f217896951a4b218a21c895e7183d206f20899a7914901d181f9f9a6f11571a771a63a0718eae9a759c34a1e910e395f794609d9319d01f8421c60cdd1bf021f423778cb01b552230241f8c9e1b30221724978b6e1bcc2146238f0a0a1b7f210d23050aee1a70210823d809c31a5221db228e096d1afc2076223c09321ab5201922f108cf197120c021a9089c192f206b2164085019f31f092130080819951fd3200208aa181b1f9b20a9077218da1e552064071e18621e1e200707f017eb1dd41fae069f179b1d241fb20c3417121da41e5e0c68168b1cf21d050c9a15281c831d1c051115a41b391d248503150b1b1f1d3485a214b11ab11c1785d714441a281cc38a1214db18791ae20cf91101181b1937890080d4941a9810201c1f5824a324bf2f831f4925b3254a31591f37253d263232e81e2925c826d332a81f98256a278f338e208b264528c8334a212327aa288e332321f926312822336120932586274932a51dd62157246031d610659e78a1273086a0a8a820aa032fcaa12faa9aab552e86a109aa87ab6b2d6aa013a846a98e2cdf9d51a5eaa6f82b789c14a406a5022bf49eb2a6c7a7922a4ea3ddaa6bac4d2975a416ac1dad0c25e8a2efa937abdf1995a051a7d6a8f098ee9d34a3e1a40f9d0c99dd9dfba0fa9d9c98e9989d9d0ea0a598209c0da02ba38c995a9d6da048a41c99639e37a0b4a10e97379e309f309f8b94529cae9c879d321115186d19439cf81853205421309a9819fc20582255980c1a25217f228795121ae8204f229e8b181a13213d22c48a011a192154226d0aef19c72002221a0ac819a820d721c009681979209821021021192b206721850fd618d31f0d21db117a18601fe1207f114418061f97203d130718a41e3820e510e0174f1e0020a3107517eb1d921f641043176c1d281ffb0c2b171f1d9c1ebc0c8116ce1c3a1ef20531166f1ccc1db5059715171c5e1d74854c15761b331d4805bd14fa1aaf1c15057314871a4b1cff04e513161a691c310e8413171a2f1b03951714a6192c1c488b0080468d8d8dc21d6798481cff1ecf2f2f9b3b1a1e1e8c313b9cf51a511cc932189e861b841c4b336a9e141cd01cc5339b9e3c1c141d0c34579d661c702022348e9b511c6220ba33f89aa0151a1ddb32999c099c8b96c731b9a0f1a4f3a5e8305da2e7a7b8a80330bfa2e2a819aaee2e30a3f3a8cca9e32d9fa262a86ea9e32ca7a112a810a91f2c43a2bea7d7a8552b39a250a869a9f0293ea382a9eaaa672809a4d0a95eab8e2512a316a96eaadd21eaa14fa867a9871205a1cda685a8ec9e04a0d1a488a658a28c9dc6a23ea528a4339ec5a15fa4efa23f9dd7a170a3c9a1f39cd9a1a7a303a15f9c0ca2d8a29b9f04992d9ef69e099edc8df20c8a8e5c9bdf11821c9f1cd39bdd14eb1ddd1e94982317321f6b2044981b18de1fa0206697a91846203c21a8945519b620fb215a944719dd200d22ec903a19b620e721318a081970209021d689cf182c20422184899018d61f18212d8970186f1fad20e8883d18131f7820b0881f18c41e4b2081880918391e1320698ebb17e51dbb1f158e6317851d091fa187ba160a1d7c1e0987c715931cfd1d7e860f151a1c431de8859114521ba21c64050a14a01a341c13055e131d1abd1bdb045213eb19851b140b18137f19261b7c046e12f818b11a5f041d1294188e192b0d00807f83fc031c18909d1b133f143630db9f429af4949c317ca19f9d059c7e3244a263a0889f1b3385a3d4a021a0e533dca31ea165a02634f1a338a185a0353457a4a6a25da2e53328a487a205a417330ca4bca3b9a4103287a4b3a5e9a62231c2a44fa842a9553058a4dea822aa282f5ea4d7a80aaa202edea4eda829aafa2c98a4e1a80caa342cc4a4f4a82baafe2a40a427a98aaabd292fa474a921ab212846a4a9a996ab8a2542a411a923abe42123a3ada8ffa9351c01a2b5a729a9ad987ca02ea64ba8939ed09fe8a451a76da09e9f81a4aca6a8a044a068a43ca6b6a09a9e21a4a2a5839f169ee2a27fa4529e249c9fa093a1039c2a98b999519b1198d49405186d1774943b8ec71b6d1c738d620d811c411df28c1511571dd51d728cec14f81d461f0592ec161a1f69206d91be17ce1fb920b78aa017ac1fac20c690f7177a1f9520fb89bb17481f7f20a4896117d81e3e2053894b17621ef81f808fd016fe1dc51f098f9c16de1d4f1f69885716951def1e478e22164b1ddb1efb8dc915101d431e8f874d15b41cfc1d3987dd14471c831deb865514d21b031d8b86e813b11a3c1cc3852f13e5197c1b5385e31278194e1b6f0590127919091b7e051412ff18a01a2c851a117d18121aec0dac10d816ce187e0de60c711f21208e0c229c281df71d0f2dc2a10c9d559bed30fda332a287a37532dfa41ca433a435334ba575a45aa5ab338fa5b0a4b8a5193444a6a9a507a634343ea6aca503a604340ba687a5b8a6553393a5e9a52aa7443264a5cda61fa8403183a55fa8fea86430c6a507a945aa6f2fb4a549a948aa5e2e56a5fda828aa072d75a51fa968aa0f2c50a519a9b2aab22a28a505a99aaa5b29cda42ca9c7aa2928ada417a9adaa1c2691a406a9b9aa7e2309a4b3a896aa871fd4a242a8c0a986182fa188a693a84e98019fdda42ba7e59c5e9e52a47ea6fe9df79f0ba450a6c69e6d9e8fa2eaa44d9fb59ef8a3bca5de9d219d4ba123a4859d089a449c6c9fdc9b0696b48cd197099be191af177714b39a1790aa19e018e0983206b61bf71b4a98eb10191db01d9697d814431e3e1ffe965216d51e981f71961a16991e7d1ffe955016571ecc1f99954816491ecb1f529584163a1ec41f0e953d16331eb91fdd920716ea1d4c1fc88fe715851dc51ed0887b152e1d5a1ec78e1115d21ce31d3088b014511c781dc7876b14041c0b1d2c87cd13271b7a1ca9861e13a01a2d1c3786a012dd19731bd005d1110719511a7705c21045185919c70b3b1098170219120edc0fdf166918b10d7e0f88164618b80fd50db914ea152c0a0080500c4714a3197aa0589bbe92012d89a3b9a0c5a12b3100a53da390a3253284a550a5a6a5eb3297a6b2a5eca67b3384a7c6a664a7fd33d5a712a7c3a7233471a7fca644a8ea3322a781a78ea8373371a734a8b6a84c3262a795a83aa95f3114a796a89aa9623071a6cea8eba9302f13a6efa837aafa2d3ba6faa84eaac42c5fa629a977aad72b1da661a9d1aa8d2a95a52ca9d5aa1829aaa52da9f8aacc27a3a510a9b0aa7b2554a51aa9acaa7224d9a423a999aa172203a48da806aae31e6ea274a716a9231b70a05aa562a77f11aca0f2a2efa5129800a193a20da5209a629f77a2e8a4889cb49e18a30ca53a9c719d06a11ca4ff9b489b969ed9a0969bd699c49bc09e269ba6968a8c6999f59ae691de187514169ca28c481b151a6f9b040fe31c201d6e999e13b21e701ff6985d14081f1420eb964615d01e7f1f8b940315af1ee61f45949315811e5b1ff3930f15021e281f6890f4148e1d561e1c90b314f21cf11db58f5d14681c8f1d368f13142f1c011ddc8e8613d41bbe1c808ed712611b781c218e80120c1b401cd48df211431aac1b948dac11ea192e1b398d551167195c1aa08cc010b018e519b885f60f551862198e858f0f29183f196a05820f9017fe18270514101a186419640bb610c317321943040000fb1cd31dff17999ebb110919162d61a3639f7e9e28318fa4e0a1eaa1093287a574a4aba4c7326ea67ea59da658335ea78ea601a8da33bea785a72fa8fb3390a768a71fa8a633b0a7e5a7cea8f23207a87ba86ba92c3209a8e9a893a96e3105a8e9a8a5a9993022a823a904aaa62f40a847a947aa5b2e0aa880a9d8aa062d91a663a9b2aa012c59a652a9ceaa8c2ad9a5eaa89aaa662985a5e8a878aa332810a5b0a82baab526fca4ada82daa3c25d5a4a3a8e9a99c2331a433a8a3a93420eaa24fa715a9221bb0a07ba59ea76b119b9ccca394a5a697559db1a266a5169c9da057a275a5cb9cd19ec7a3d6a5779d419f11a200a5e49c649d39a0a6a2b99b419c569e07a13d9b179b469b309fcf9acd9859927b9a7b9a3295df11f993fb99e690e81863138a994305fe1b49194999430e8c1c101c96974211da1c971cc3960a13241d221d3f967e13071da81d319403140a1dc31df2933c140f1db81d6293d013b81c941dc392fa13711c4b1d6a92a1133a1cfc1c3f8f6f12f71b771cc3911712281b421c978ec011c41a081c3e8e6d11f019031bcd8d9d108019771a22876610c018d0196a06af0f2a181b190d064e0e0d1751188705fb0c181649171105700c3e153c16c004000cec14ff159184880eb2141515df0300008a1bc71c6915e5a10c9dc6123d2d1ea463a141a0f9300ba5f1a25da4ff315ca568a4baa4ae3227a665a59ca63d338ea68ea62aa7be3386a77ea728a8ef33e8a70ca88da8873337a845a8cda8f13243a86ba85fa91e3239a8c9a8d4a94f311ba801a929aa723098a718a962aa492faaa76aa977aa172ea5a74ea9bfaaf32ce3a66fa9e3aaf72b78a644a9b7aa772a08a633a9b0aa0c29c6a5fda8a7aa092859a5d4a86faabe260fa5a3a839aa5525f0a47aa8efa9552463a431a8a6a9192232a303a70ea94b1f82a197a538a8761c8f9d34a424a630177d9ce7a28ea51491baa0bfa0b6a47596449f45a381a5df95fb9ef3a10ba5818fa49e78a0f0a25f95389cc89d18a1e4948c9a3f9a779e90945b995897999c12978597cf0b919691961b942c18170d74982b8f601b411814967d05261c171b74953f0b1e1c151cce948e0d411c531c8e94560f5c1c901c58947810631caf1c12942c104e1cb11c8193c610f91b511ce9927410011b0c1cc68f1e10941a911b0e9278102f1a191bd08e2c0fc019931a508eef0e6b19af19f190a60eac185919a690190d5c18f4182b8d660c7d170e182d860c0c5b169c17cc85d009d914e4158b855f09b2141b15168c94097514d714bf8b2b044c12be125a8bb2843383e18a96040080311146126719f8a1999cae98ec2c6ea40ca29ca3cb30b6a5a6a3e8a4c4310ea6e4a4f4a5423297a6e5a535a7f932bda7f8a64da86d3365a863a801a9ab337ca8b4a871a974338ca8e1a817aae1327ea84ca931aa0b321ea849a92baa4831d8a73ca97caa6d30a6a75da9b5aa712f74a74ca9afaa042e6aa745a9a7aad22c41a75ea9e1aa172ce7a64ea9e6aae62aaca626a9c4aa942990a609a9a8aa4228d1a5caa84daa012736a5a1a85caaad25dea458a804aa422455a4c5a74ea9ea218da30ca7f4a839200ca2cba5b3a8501cd69e33a355a6b61022994fa2eda42a97df9e58a0f0a56b9a6c9fa7a150a52f99629e7fa2b1a5d09552a0e6a1cfa44698699da39fe4a1e094279c559c65a09694819bd99abd9e4294839a0895509bfa938c98d5141b0da9930d93c91bab1a4693e58e781c341cb992a98b701cad1b2492a004071cea1b9691380af51b0c1c4294cb096b1b911bf793880cf81a181b7b90450c7f1aa41a31901e0c9519331ad48f0b0c3b192c191592710bd018c918a191a40a141876184091e309ed166117eb907409e3150616a2900f0978159c155190d2081d153115cb8c64083114ca14e585cf04b4136a146f058e04231436142e059d0417120214ee047001cb118d12c4846f81e8086f0ae59100007a1e961f9412dc9d4811c51b842c85a41ca289a3ad3048a544a44fa5a9311fa662a5e4a55e3208a7e7a53aa7153386a7e6a6c6a785334ea8d3a7e3a8b333a1a8e0a838a94033cda860a9d6a99732dfa894a96caafc31a3a87ba962aa0f311fa844a98caa1230dda75aa96daaf92eaba73fa9acaadb2d2ba758a9e1aad82c04a764a90aab0d2ccca669a9fcaa7f2a37a618a985aaf928eda5eea885aa09287ba5b1a84caa022637a57aa839aaa524eca43da8e9a9b52217a53ba8e4a9702093a422a89fa9dd1d16a51ea726a9251a5aa170a40aa782176f8bea9ff5a1cf16a31166a0a5a2a0105d9fc1a05aa4860fe19dcba1cda4d48e539ff7a2a5a51d95bc9d6b9fd9a226986e9c4c9cf7a0f197a59bed99d29f379981991992889ce1980197b3148d9696984a95be18cb0c32986d93061aa115e2976c908a1ac6186d974a8bf51a5e1adb968684221bce1a599614849b1a2a1be695db030e1ad2196f9597039a19701913955683c8187c18d4942183f9170b176792c0027f165715ef918582fc15e91475915982cc148c140d91da8671148412a8905286e9120612298d23866212f30f5c86fa8520123111ef05b885bd10020f9b0563889210cc0e140c4a88aa0e741017054b8b19095b04880a2c8dbc8ef48ef9030080928b4a05a110c89fdd9e23a05f2c35a430a2f0a3d930dca490a3c1a4ab31a4a5a3a4b5a51632d8a6ada5cba7a23205a8aea63ea8383385a86aa833a95433a3a8fca8e6a9dd32c3a821a9fda93a3296a83ea913aaa9317ba830a90caae13064a825a957aa303032a86fa97caadc2ee0a76fa9e1aab02daba77ba90eabba2cf7a653a9d5aa092ca4a624a995aa952a4aa6faa852aa77291ca6a2a821aa5228dea56da8e9a991267da54ea8c8a9292511a513a8a9a9c623d3a490a77aa9362258a43da723a9be2073a41ca728a901204ca275a513a8131e249ce7a174a42b1d8018239edfa0031cd79e48a15da31c1b00a0a9a2e1a4c318be9ebea188a4a114cf9de19e6fa1d414279ca49b2aa0580edc9b1b9b1b9f7d941c9a2e95859cf4965797ba16e9939d98a494f5199e13b7998e938d19e8155199ef92c3198717ea995c9169198118819821910b191b181b985b8faf186e17c7958e8eea18db165595038e03186a162093ac8d9316bf14c892228f3d156a127e94ae8ef313f811f891678ec2119b0e82912d8eab0f29084893d78d330fc487cb922e8df00b2d877c90a48ddb04ff8c2a903f8c9804bd8ce68f178d6984768f7a8cee8c3b84378fc585bf8cf789b28e5c05368c988cef8dbf043d8dda8de19056040080eb9264919f0cb69f929eafa0192c08a4bda250a4a23096a547a45ca57a31c9a52aa564a6ee3197a6bda6aba76f32c5a7cea7f4a8fd324da894a86da9fc3283a822a913aa9d32aba894a987aa1c32cfa8eea9e7aa8831c4a8d9a98caabe3099a882a9d6aa18303ca849a9aaaabd2eb6a741a970aa8c2d72a71aa990aab32c82a715a96eaa5e2bfba6cda82caaf4296aa6d2a85caaf2286fa6dea859aa132837a69ba821aa9326cea55aa816aaa82555a53aa803aa7224e7a404a8c9a94a23fca4d7a780a9ba2196a476a7ffa858200fa347a674a8e91e0ca0cca3a4a5581b011c9c8fcda1e310401b9315629dfb99c29fda9da7a252991b9e8ba19ea43d97139e03a09fa3b194169d239d8ea19994709c639cc5a01097c59b7699279fd09688999c0bda998196a097ee1936163696b995771b3f19fe929894f81af9196e9508934f1b981a17922491af1a0c1a9491458f271a8f192191579075181717ba90e390f7150b15c3896c907914ea0f4789ed906912e8085c8fa29057109d889d885d90ec0c928e928e0d9016062d91368e788fbb85d692dc8d188f67857e92908d818e01852e926a90558e108bc691f38ce28d788ac0920086878dfd8910926405608d718e8f91f104c18def8fb7931f0bc79044905392de0c0080538c9a86211023a0cf9ee1a0452c11a3d2a17fa39430a9a442a38fa4483170a580a494a5b331c0a6fca57ea71c329ea78ba764a88a321ca827a8e1a8963232a8bfa892a94a3242a834a929aad53133a84ba9a1aa3d312fa879a9d6aa763019a88fa9f9aa5c2f1da89fa91bab2a2e0aa89fa9d6aa4b2d8ea761a9caaa622c59a757a990aa7c2b2aa733a9a7aa372a97a648a9bcaa492914a615a9c1aa3628aca5c2a895aa50263ba564a81eaadd24c3a422a8cda950237ea401a8cea9802232a474a765a906219da3f4a60aa9b2207fa20ca624a8552034a11da4f4a56f20169c3f9a1ba10820c821b41caa17071fba9a9f95109da019789d43a0c9a3cb14d39d449f6ca39114529d369db6a085147a9cef9b5b9f3414b19a0995779b6e0ddd98d714d393370d29971c198f130a8d3a96d7191216499318955f1a0e18f3921594fb198e177a927993b718ba16c491e8924f18211640917f93cf161a141a94f69229158e10989366935011a0090893d993db07de8f97944c933a874c944c94d192098d32953295fd9274910797dd944f92659274977994a791bc91b696439204916c92ee961490e3901892be95a88fe190dc9243965e8f4f9068920f96478c4590f7916c95618eb58f54936795d30a179003948d956d120080c78e7b8c7b0c389e559d709e992b00a35ca2fea1303034a504a487a4f13092a56fa494a57431a7a54aa5a6a6d1313ea63fa6f4a76432d0a600a77ba893323ea765a821a93832dea71fa95faab03151a8b7a91aab11314ca8c3a932ab47301da87da9e2aa402fe3a74aa9b1aa142ee6a730a998aa1b2dc2a757a988aa602c3ba729a988aa382b97a6d1a81daa1d2a5ba698a815aaf62857a6c5a82aaa6128e1a5b9a839aa55275aa579a8f3a92f26d5a428a899a9ed2480a40fa880a9ec233ea4a8a759a98f2217a423a72aa96121bca255a685a8dd1f7ca3d1a541a8961daca1d1a1a2a4c41c52244a236d21b7199d244d25e9231a1c5b9d1c9c24a0191afd9d0ea0a4a2761afc9df89e59a16017229d709c05a0980d899c0997d39d7b8dfb9ad0119196e1932198131b63166396b895cf1cc41a61936195951ca81be49574945e1c391b8e951b94f21b8e1910923d94db1976169d948194a815bd0a36941c95d40ea193a1933695338857963a903c95c2923d98d38fbe94e8948398398fa19458954a99ae8e1494659659991c8e769383965a99968d6f93e395da98108d13931496cd982586d392cc958d98d485cb92339663989d85b49293954a987d059892ea952b985605df91bd958097850ee28db2912894a60a0000b01c161e3e11229d87900718cd2bd4a1609e13a06730dca2db99839b0c3184a4d3a001a26131efa436a39ca4b83195a55ba5ffa607327ca612a79ea8f53152a79da8e3a9aa31c9a73ea9a6aa3e311aa88da9fbaaab30f7a7b8a939abc22fffa79ca912ab6b2ecda787a913ab682db0a75ca9d3aaa72ca9a758a9c9aa1b2c48a730a999aad02ab3a6e6a888aa5d29c3a613a9e8aad42896a61fa9e8aa092865a615a9dfaaca2613a6eea8d9aa6325a6a59da86baac32434a549a8e9a98323b0a4a4a74ba92a2251a49ba6bda87421d4a3f3a54ca8bb20aea2e3a4a8a77a20b4a0e8a2f3a5212073997f9514a0fb1d0d2ac8296a2882986899d71dae991c9d399ea4a07aa41e194a9e03a053a2ab17029df49d43a15b14769c3a95d69ec20d7898911af2168e8df094a41d5d1c07947692e81d2b1cb193fe912a1df91b2296be91771c7e1bc3959c92871bc81941953192241a4118ac91a0923418e4150d91d89333158c108c9046953e91ad97fb92c3961498679b7092c4969b98fe9bec91e796a698ea9b8c8ed9969c98c39b02915c969b989b9b888d88959898179b288df994e097839a508637946197b799e785d793679758998485b4925f9682995785539233960f9938856f92d296e39962858a919697429c9b960000be18401a0b18e79fdda0a4a0e22a77a21aa058a2253091a1d2938d9bc230cba2649a079c3f317ca4faa0eca07e316aa538a479a5b33125a667a7cfa89131dfa6dea895aa303129a7bfa956abda305ea748aa94ab5e3026a71faaabab742ff8a6b4a92eab4c2e89a654a9d5aa7b2d86a602a977aab22c9ba6b5a847aa0d2c6aa6a8a8f7a9cd2acca5eda86eaaa9299aa528a9eeaad328e1a5a1a94aab0328dfa576a930abcf2662a511a9beaad22516a5a0a857aaf024bba45ca804aa2e2439a409a895a91d23c2a339a7eca814229ba2daa514a870212ca104a4bda52d216b9fd8a113a5bd20079cfd0df0a2a09cf729a4296028a29785258f253524f6964ea0969fb4a29814499e129d97a28817099d5a9c7a9f4614149cb598499d3a1467991e157b8d1c149097cf1e661e640d0193a220d320538d868f7420692089961b8c2020141f8a99eb8a1d1e9f1cfb99588f751bdd165f9aa9945d1403916e991696928e1198ce980997ab97609bba9718986a9bff9dd595f697859bae9d14948497d19a759d53916897b79a509df1901d97c29afa9c8e8d6896449a979c208d8e95bd99279c2e86d59441993d9ba7859f940499e59a620515949998ae9ad20b2094c098739a8d0bd5925f983b9a630e3692f9953f989c130000c01abd1f381328a405a831a9b829f9a337a720a8512e0ba16f146a1cec3073a274144c1cf83041a4cf9f45a2453163a59aa645a86c3142a65ca94dab3b3175a7f9a925acc9304ca712ab7cac3c3093a74dab9aac9f2fa4a7cbaa27acca2e16a7ada939abc42d5aa6b6a812aae42c1da632a86ba9472c45a658a8a0a9ec2b7ba615a983aa832a56a62ba9b4aa3c2913a6e3a998ab6c281ca624aa08ac3927d7a5a1a97dab052693a549a900ab1a2530a510a9dcaa68240fa5cba897aaa323c2a48ea862aa902260a424a8f6a90622d4a3cfa6f9a8fd2101a3c1a5d9a7db21a4a173a2e1a4382140a1f6a1c6a3fc1fafa0c611aa92aa129c2feb30d63068a8aca07b9eb1a3789c379dfca0b9a33b1b7b9dac9f14a2411a8f9a198c459af7162798b71b3314990d8e910a201120a88d7111e02137221a97e61215227822e5985e0ce6204b21c6996691721d931dc798a99546168f112b98af96868f7f99eb95cb972e984b9c77933198a999c79c96924b98339b789d188ff698499cb19e8e8e2b99659c789e178e11991e9c349e9e8d7798589b729dee8ce797d89a009d878c35977c9acb9c578c9a966c9a839c3f8cf2950e9a5b9c1a8c5e9599990e9cf18b4995b999b19b06856c943799989b708b5b945d987799170b0000d51e801f7d140da135a45ba5eb2820a235a270a3072a8ba1bc9fed9fbe2c4ea158207d210c31a2a2909d9595313194a60fa8a7a8183154a763abf4acc63077a75fabcdac603018a869ac86adef2f3ea883ac8eadce2e18a8e6abfcacd92ddfa6b0a939abf52c90a520a78fa8402c3aa529a52ca7ca2b0ba555a5f7a79a2b6ba584a84baa802abba5e7a9c1abc128b2a598a988ab2d27d7a59da9c5abfa2502a66aa99dabe824b5a521a942ab212452a5e3a8f7aa9222d6a4c4a8d5aa8e2186a496a8a6aaf9202ca450a85caa6a2024a443a832aaea1fa5a390a743a9c31f68a1f9a282a65e1fa7943e228a22b61c989c70947d8f9e15251b2d21241f9e8f4da043a488a64b1466a066a4eda5ac18cd9e9ea28ea44a1bb99cc99e2fa1591ccb98fe1af718ce1b4910c922d42395141f19e9245e2577991b1af724e0253d9ca0179b2332245b9d478e391e7e1d569c7f999d898c96049b6d9b7d9a229d5799889ba69cb09f7096d19a249dd39f2392ed99349d739f808e45990d9dee9ed68de498b79c759e418da0987a9c5a9eff8c50985f9c2d9edc8c1298309c0d9ec38c4197b09be89da68c85963a9b859d7d8c3096d99a609d5f8cae95419a209d2b8caf95369ac79c7a8e1595f4994f9cd7842b95ac98559a238400002c1e911ddf15e6a216a834a9942a1ea343a893a9a02b72a382a7efa8af2c351d4429202b742ee19f8894b815f32f63a6beabbcac222f5ea9c2ac42ae1c2f82a8d9ac23aed72e08a8a8accfad3c2e22a895ac92ad922d0da877ac78ad0f2d45a614ab68ac4c2c41a405a56ea6d82b96a27d1c9a94632c63a3b0a2dca4cc2bcda591aa32ac7828a2a68caa32ac1d2724a6e0a9ababeb25a7a59ba959ab0c256fa553a9fbaa28244fa51ea9c8aad52218a5e4a88caacd21d1a4b1a85faadd209ca487a80baadf1f8aa45ca8dea9ea1e90a450a8aea95e1da4a3c1a755a9701cd6a149a733a9511b75a1c1a608a9fd192ba1d8a6dca8381822a0baa5f9a75c1581a0cea434a7041263a048a413a73b8cb89e05a20ba57412cc9c039f95a1fd19c899f611e393ee1c9010d323e524951cca1d2528a128500ff81dfb27ed28149c531654246325bf9ccf969d1929194d9cfc990b9a959f5c9a959af59da9a0d996379bb49ebda05994bc9ab59eb6a0a091569a3f9e8ea022919799df9d37a0b28d3c99799d02a06c8df0984c9dbc9f3a8dbc98149d709f088d7798eb9c2b9f76861d98909cc59e1a86be974b9c0e9e9e050897cc9b809d41058596259b169d830b6596d49ab09c240bff95779a5e9c95846495529a3e9c508f00008214ce1bc11842a122a5f1a6202820a499a999ab4b2c83a475ab01aded2c189eeda1c3a16530a1a4d3aa4caced2b4ea7a1ac7dad292d8ba7e0ac0daedc2d03a802ad5caeab2d14a81dad51ae6c2ddba7bdacf1adb52c21a74fac9dadd12b40a732ac88ad072a49a663abb8ac332790a20ea87ca9621b6ca160a598a7809401a63fa9f0aad220e0a5afa97aab3b2384a557a941abd12295a554a926ab6c2241a539a90cab902117a504a9cbaaaf20d0a4cca87caa2c20a7a494a82caa072079a466a805aa2c1f3da43da8c1a94a1e17a40da89ca97d1de5a3caa75ca9b21c82a351a7daa8b41bc5a0ffa4b8a759199898399fc5a016117e9f36a4eda55a93b8a0f3a448a74191ed9f75a442a65b1420a00da4c4a531186f9f89a2fda44a19af9d1e9f92a16d1bd0115d221423731c53223d2b262cbc978421722a5f2ba8a02f151723f7234c9efa981399409cec98239b2c9e17a10296439c9d9f53a29f95d19cb09fc8a1cd930a9c229f52a12d93bd9ac99e1ca1cf90369a5d9ebca07590b899f99d5fa037905b99b59d41a0bd91f798789d16a08491a498169db59f54914698b59c209f378f1f98619c779e078cf9970e9cd69d788b9f97bd9b7c9dcf04c297e09b469da004e696119bed9cda0a0896449a389c800f00002b1f34210a18afa43ca8a0a94c28e4a696a956ab282abba39ea8f3a9c4296794c29d229f2924efa285a707a979280da603ac1aadd82b88a672ac9cad7f2c09a796acf3adc02c10a7a4acf3ad7e2cf5a685acd3ad362caaa65facc0adf92b1ba628ac3badf32a0ba3cba82daae3284f9f27a407a636244da1eaa4f7a69a1c52a47ca74aa9ae154aa5a8a87caa7b1d59a5cda889aa2a2046a5c3a87eaa302028a5b3a866aab21fdca498a81eaae61e8ea461a8e9a91c1e3aa430a8aca9521d07a404a878a9971cb9a3a7a740a9781c60a34ca716a9801b4fa300a70da94e1aeba283a69fa8061a26a27ba5a1a7491914a040a4c6a5fd16499fd0a37aa53d13f49f0fa4f9a5d60950a021a447a677902fa026a435a6789357a035a428a64395a49ecfa25ea55713a4a0fba0e7a2461ddf24ce2d412f741f09246a2ca62d6da4619cc69fdba0bf982e9dc5a000a4b495439da5a01ba39f8e4d9c7ea0caa2548e3b9c39a050a2008ec89b0ca0dea1b18d329b809f84a1758da99aee9e2ea1d5861f9a6e9edba08b869499109e83a0a88c2e999e9d55a0798cb9982c9df39f318c7898db9c6c9f568563987e9ca79e02054b98429c1a9eb4041398f29b8c9dbd0a1798e49b499d6c0a9897829b539d780ae9953d9a7d9c2a040000051da71e6516cca320a8faa83d28dca3f0a816aafa2854a122a859a9dd2829a1d8a653a897270fa57ba8f7a9ad28bda537aa2faca229ada564abcfac632a0aa6d7ab21add02a5ea6ffab23adc72a6da60bac2cadaf2a6ca6d4ab09ad5f2a00a63cab89acc52996a4b9a97dab7e281aa354a80aaa862516a376a740a9c722f3a3b1a74ba9922179a442a8a6a99520d8a463a8f8a94520c9a460a8e6a9eb1f91a45ba8eca9ad1e44a44fa8f2a9111e12a440a8cca95d1dc1a31ba8b3a9a71c6ca3d2a777a9861c1fa369a731a98e1beea2fba6e4a8371b95a277a678a8be193ea2dda51ba85a198ba146a541a7df183aa1c1a49ca64417c8a067a42ca647154aa022a4e2a53013e59fd8a3a7a53510bd9fc8a3a2a59709bc9fc7a39ba59009de9fa9a383a58e891aa0e4a3dda53c90e80135099a8b568ef205f084c781008c129ceba019a3cb95129d9ba146a46995e19cc1a0e6a2798d7b9c88a05aa21207229c45a002a2ee06c49b0ea0c2a1c306699bc89f71a1a206f29a319f2ca16d06749ab89ee0a02d06039a089e50a0b1858799849deb9f55852799169d649f1685c498bf9cdc9ed3845a987f9c569e8e0447984c9cfc9d670421981a9ca69d610a3298149c9f9d2304e997b99b3b9d330a4597189bc59c6e130000121d211e050a28a10ca74ca81526dba139a854a9022810a239a83ca9d627e7a231a876a9de2753a4cea845aa5e28cba478a918abd828f9a404aaceab1d2957a57faa37ac5529c7a5c7aa5fac5729e5a5c5aa5eac1a29a1a583aa2bacb52836a51baad7ab2a28f0a4b0a978ab1c27a4a427a9edaaa32561a4bea856aa2a243aa46ca8efa9242219a439a8b0a9ee2003a41aa885a92b20cfa306a870a9ff1ec4a3caa75ca9b21da9a3b9a750a90d1d70a3b4a73ba9641c56a369a71ca96f1b21a32fa7f5a8361bb9a2f4a6cfa8ec1954a2b3a69da8b7180da264a67fa82417b3a120a655a8e1164ea1a0a5ffa77116eba001a50ca7d9157ca06da43da69e1344a024a4e3a53113d69fe8a3a2a52010049faba392a57109a19e86a380a56089629e65a378a55889169e09a35ea52b09be9d8ca12ba469085199fb9b759d870dbe960c9cb39d6b09289c1ba0e8a13592259d98a089a32299739c89a03ea3d896239c7ba01ba3ec94e59b41a097a21992629bd89fe1a1d491f49a499f5da1df8fd79af29e01a17d8c819a8d9eb1a04a8c3d9a399e75a0288cf799d69d39a0038c72995d9dbe9f0185f598d59cd09ee28abe98819c829e62846998579c4b9e55847c984f9c299e5c8a8d985f9c659e6704f597a59bb49d1a84359bb2a4b7a5f3259321bc232625502e0a27fa2aef2b00309a27372b652c95308f27a02b752cf7302928fe2bc72c3d317328322c4c2d9c31ca286e2c5c2d9631c628552c4f2d7131bd283c2c0c2deb306028af2beb2c50308f27ef2b8e2ccb2ecd1d779f34a4312e6e10aca8b2a9212df89864a89ba9282c949ef9a957ab772c70247628c1295629cd23d127ce285128dd20f22349256828c6a8b3b11fb3332b6c2077a27ea4d620c526ea284529b820bc28cb29f929e9208129942a942aff205f298d2a942aff2004281c2940293320c024f1269127df1deb20c82477254d1e161d5522a123681ca918741c501df518de1bfa20d42240189b1d6a23c9249d16cb1c8823e0242216541c1623a42415145f1cc5227424a9131f1c67221524be09cf1bfc21b7236d093a1b972152232689061b6321e922f8889c1a07217522c0884c1acd20202282880d1a7420dd21788ec4194120a6213b8e5f190e204621f790e418931f0e21c290b3181e1fc52099906818c01e972031920b18561e4b20f091d517211e19200c907917b41d841f9c8ff416461d011f188f6c16ea1c4d1e8c8e1416811ce71d5c8bc615591ca61d0b8b7115161c4b1d85843b15ff1b171d58040515ad1be21c410a41148b1a4a1c260aac15211b7a1c278400804da3fea42a21911e2b2025237d2f3c25412950293131a5252529b2297a326d254d29472a8b337a26382ae12b23341627e72a112c36340e27452b4a2c34348c26d32a062c72331b26182a3a2b743268253329a42a623152237f25f026a72fe510d1a749aabe2df89e70aba8ac4e2db1a013ac3aad3a2d87a067ab8eacf22c2a17b49cc89da82bcf1c4d207422542add9ed9a72ba9f12a29a53baee1af41295fa022ac5eadcf240324bd1dc213ca1e8628cc285f28f81d3a2aa92a542a041c6c2a372b622b79926229192a202a0718502652287e28e0105f211924a924891c8914d61c421eb38fbe91889a3c9ba69c368971982b98ab0ea21a6820a8211c1ba91b0e22ae230719d31b4222f1230b15c71b3f22fa23668b331bd1217123868af11a83211223088ae71a7421fb22cd89ca1a5721ca228089851afb205b22b98f281aae20fe21488fd5196520a421db8e8d19222058217f8e0519d81f1921328eb9187f1fe420f28d6818011f9320b48d4a18c41e67207d8d0b18551e1320f586c317fd1dbd1ff48c7317711d0c1fa28c2617ed1c831e488c6816981cde1dee8b7615341c831dac8b3c15a61b6f1d7d8e1315461b241d9290a314e61ad91c73900715801a531cf08fa5128419951bf709d3123518fc1851890080db9c6f9e1323191e3b22cf245930e31f372582253232811e41255c25ae333b1ffd24f3256034e52084254c28d6340f21b82680281035e92249289429e13463220428bd286634ea209726ea278133a51fd1238625e5310418129ceb9c41308c9dc1a70ea9922e2fa10daa58aba82d9ba1a5aa13ac362d86a0fca878aa652c0a9f2da76ba8c52bf29e9da617a8322ba9a12ea979aa2f2a8ca4f0ab14ad6f2830a168aa19ac3923c51e6ea1caa4091480275f253f23d59c692ab22949294c9ed72b662b962a0c9e0c2bc02a8b2a789db628da288928f09d412334240024559dd012d917d518d5983298b9983b981395e8951a9b159b4c8efc07de12801480946b18c61fe220b7987b19fa2076226a980c1a4821ef22a995f019f3205222b991b719dd2025220091f219e6203422ba90a919c120e921018a6f19a020c12140903b19492086214789eb181b203021f588a618ba1ffd20a1885018491fb2205b082218ec1e67201508da178c1e2820b50777170e1ed71f45076d17b31d6c1fe2065517611dd11e83862b17191d861ead8ca016ce1c2e1e6e8c3916731cc41d428c9c152f1c611dd48e2d15c31b201dcf8b9214f11a961c768b2914ad1a521c468b2d14381a511cd904c913a019881b7d906a135a19b81bd8840080a6965796442205991114511bb030939c1b1518166d326e9fc795d496bd336aa08e9c4b975c34c3a0b5960298cb3421a0279743180735bd9e9817b91e2635819c4b1d411e8734159c8416be17ce33379da29c60978332729ffaa3c3a42431bca028a74ea80d30c3a18ea80daabc2e15a33aa9eeaae62db1a2f9a81baade2c28a280a8dea9f92b7da281a8e4a9c12a74a30ea944aa332917a4f7a933ab0f2877a21aa97eaad624929ad3a531a81420c124a7186a993993602a242959283ba0aa2c412c5b2b45a2e52c742cc12ba4a3582b912ab12958a2de266425ba24cba14918069512994fa0af99ae9d1ea04c9e819a219d6d9eff99e092ce8c448ed59742108c1c4c1df2980c15081e511fba998917661f6c20b59ab417861f9f20c19865181d20fa202a982b19c220fc2118967419f4204422c1955619c120e121b6930f1975208c214693d51831204221e592bf18d21fee2078926e186f1fb02025922d18011f6f20d1910a18ab1e3a20c293ed171c1ef71f50938617cd1d871ff090f716521de61ead90a216071d5e1e5190db15971cb91d049012151b1c4d1d708f91144c1baa1c128c0c14a11a351ca08b54131d1ab51b418be812eb19301bb2840d134419d11a73846212ee18601a838a0e1293181a1a2704008050845c855e13919d1e94f9947830c7a0bd9b969c8b3299a2caa0bea1a3332fa4f8a2a3a06034bca48da383a4bb34b8a409a47ea3fc34d4a422a49fa30035b5a40fa4cea4a33469a4b4a498a50a344ca468a450a5b43284a439a689a76031a2a49fa82ea9673051a430a976aa252f85a45fa9a0aaff2db9a464a9a0aa9b2c93a4b0a90eabfe2bafa49fa951abb82a1da5ada948abe628bba4f5a964ab442776a4dca932aba32409a168a75ba94920ba20109fcfa359137c295b277c24b89cfb2c182c9e2a7ea10a2e122d5a2c92a3582d7a2c892be2a3d729d828fa2791a14320c71a9a9051a09a9a94a046a21c9dc79d8ea0bea1f499489a8f9ce29dd8977494fa180b1953940d91d11b671c1094440d1c1d121eaa93f510541d6a1eb1921d14d41d091fd391ba16fa1e42203d91bf17c71f9e20ec9099179c1fc620ad905c17741f84206c909f17051f742031903c178b1e2c208c92b7164a1ed91f2892b116e71d5e1fc891a016d11d3b1f75916516941de41e4893e4154a1dd51ef89078150e1d401eb7904115b21cc01d5192bc14411c891d14923714a21bfc1c1290db13a41a2e1c1e8f3913ee19661b948ee6127419391b088c47125619d51a008c4512de182e1a578e181162180b1ab7043f10e616a818c50a00003419ad1a1a06b49f469a0b15603023a44fa0a7a23c321ea5f8a436a54433a7a531a67ba72734d2a5f7a652a677348aa660a7caa6bc3482a726a637a6fb3448a7f3a627a8ac347aa606a853a80a34d8a566a7fda7df32b6a529a897a8a131dea5e2a8e9a98930f1a5c9a9b7aa622fb9a5a6a90fab102e8ba599a900abcd2ca0a5aaa913abae2b86a5a7a94aab6f2a15a588a917abc528d7a45ea9f6aa922778a441a9a5aae52425a33aa8a3a9dd201a94faa313a60719db2798240b21959cfe2cbc2b072a9ea0192fdb2de42c2aa3932f2c2e262da1a34c2d412c682b85a35227a6253424b7a1f194e59d2ba05a9fa69d09a00da2d49dc99b519dea9f959cfd97c6956399ed9a9f949b12dc0d979adc91b118de18429a3c86be1a9b1a67990b0faf1c9e1dd1982b14411e371f7b98ad15811e9d1f27981316721e551f9c98e2154e1eac1f5498e415451ebd1f27981516401e5d1f77961c16ef1d5c1f2a96f215991d3e1f81948215771dba1efa912b15251d471e95911215921ccc1d2791a914401c1f1dc4903414f61bc11c6c90e1131b1b6a1c1b902b13891a1b1ca48f8612c019481b1a8f3711ec187f1afe8b9c10301833190a852e108517e918c304d90fd5165a187e046c0f82163c188f0abf0d98157117280a0080d8040206e114d7a0199f3fa0f62f28a4eda226a4143285a5e6a4e1a5d03243a6a8a643a7a233a1a709a86ca83834f8a758a8bca8853475a841a88ca8b734faa79da80ba98b34caa7c2a83ca90534a6a7d0a85ea9d432a2a7d6a875a99f315ca71fa9d3a97830f2a63ea97baa212f53a692a9f7aab12d0da650a9a6aa682c7da678a9c0aa092b86a658a9feaae5299ca5a6a922ab8a28b2a56da920ab012795a579a9e7aa352502a54ba984aa8323baa1e8a601a9aa1fe6231c12f89f50195d2ccd2a6129019af72fbb2e672ddb9fd8300730d72e79a22c30202f182ef6a2ff2bce2ace294ca10e1ea915179aea9f8f9d4ea0c6a2cf9cf39c14a0b1a1969b559a979aff9d669ca097858c97972c9c7c938b176a14c89c918c3d1bf4194c9c0b0c691cf61c969b0312301ece1efd992f14f61eaa1f73988814681e781f1398c5149a1e601f9597eb141d1e471f1497e814a01db81e89965714341d401e15969114df1cdc1d6f943814541c791d2494d513171cea1cdd933b13af1ba71c719392123a1b6b1c8b944b12881afa1b5a94ea11331a961b23948811c519101bb4932e114119521a5c919b10ac18d819f6905b104418a819db8e28105e188119ac8e550ff7174319618e011006185019db041911021848192f8a0000fc17f218971228a1f49e369b183055a4179e5d9ff031d4a4a2a297a28c3225a555a448a576335ca5eda4eba53d3461a6eba634a87b3476a774a7d8a7ac349ca707a856a85e34e4a797a80ea9c3332ca81ea9b8a9ce3217a82da947aacb31e0a71da92faabc30cda73fa962aa912f02a8a5a9ecaa2a2e35a7e2a94aabe32c47a699a902ab8f2b4ca66ba9e7aa1f2ab3a505a99aaaec284ba5e9a821aacd273aa5e3a822aa3e26c9a4cda8f4a963244fa310a831a91821620d589fa6a3d518132a2f291327e19cfa2f162fbe2d5ea1b83107312f3065a4c73102313c30c0a4ae2fc02e962d5da4c326f0242a24a0a0519b769e19a2f89c499effa0e6a34a9b649c2d9d8d9f9199cc9a2299e49cc69ad3987a920a997b9ad395d6113e8d359b4c92f4170716a19ad78b1a1b5b1a5b9a7f0b161c071cd5982b10731c021d4b98fb10ce1c091d2196a3120e1d981d75972213161db31d81958713cb1cb71da496b113b11c421d1b962613661cf71cc495c3122b1cb01c72954912671b771c3095f911031b3e1ced94ab11aa1a861bab946511e019031b5a9496107419721a39924e10bb18d11903905a0f2f182e199b8cdd0d32177118448cb30d14165517608e790c36154716fa8d9c0cdd14a816ca8d2f0f23153a16fa8900008117a418d80cb0a1ee9ef99dd72fb3a2e89d509ce231a7a3a1a2afa28b326aa43fa47ba4613350a57ca5fca41b3430a6f9a68fa7813475a731a805a9a834e6a762a850a9553432a8e1a8e5a99b3338a8f5a806aaa3321da800a914aa9b311da852a970aa8930a7a764a99caa6a2f68a78aa9d7aace2d66a785a994aa9a2ca8a659a96faa872b55a638a992aa0e2ad2a521a98caae1288da5eba876aaab2741a5c4a83faaf12516a5baa80daaf624b0a484a8caa937234fa155a5c4a7f21f35250620ce121b19112fef2daf2c6e9d68327831823026a35e3343322e3181a506323d311330d7a43e2cb32a87293aa181959299779df49a83a05ea13ca42198899d0d9f97a0fc97489b449aa49d449961996097b49be7988697d00b8496dd99b0947b160c0dae99e8907e1a3d1874995985681b0e1be298d404141c031c4098910d401c471c0e988e0f621c9b1ce697220f6a1cb81c639756100b1cb41cc6960211721b541c3b969510011b111cdb952d109d1a9e1b7c95a70f381a211b2295250fd4199e1a6993cf0e1619b3197594800ec7185f193494f80c1f1806191d92800cac172418e28f280c8616a517488fa60b6d158d16e58e7e09c414cc15c690250b02158015d391eb086012581158917381f408a604a60400804510010d6c157ba230a0d29f9c2f61a44ea2b1a3ba3125a5a8a3c0a470325ba5f8a416a65a3386a66ba6cba72734a2a723a81ea8543474a871a8d7a86d34a3a8aea8b9a92334a2a87aa946aa42336ca876a94baa593238a873a9b2aa543116a8c7a9abaa5530fba7e0a9ecaa302fb7a7c1a93aabdd2d90a792a901ab812c49a789a902ab462bb0a661a9f5aaf22939a6fba8a5aa8c283aa6daa86eaaa12790a5b3a81faad22510a5cda811aad024a3a451a8b3a9e02227a3f6a67ba8711fd3937c9e9ba46c18f92c5c2c792a1c9f8a32c331a53083a46a3481334832f2a65b34aa3324325aa7f6305d303d2fc7a45d223721f41ff49f16a1f1a061a37b9a0e9f87a0e8a19e97429c1f9cdc9f3e995a9bc199069ef698699af38bac98ac980a99c8161c0d79983494b61b8c1a2b98ba8e6a1cbf1cd297858b671cd51c1f97a804581c5a1c1f984a0ae71bf71b8b97cc096f1b241c19975a09f31af91a2495fe08e819761ac394d10885190b1a7494af08c01817193194560b6c18bd18cf93af0a261877185b93f9090e1763176e948e09fc1509162d9433068115a0150e92c5051e152c15929145052714c0144e8fc604a6135a14058c920419142414a58ba5040e12e013d9846b01e1105011b9846f8145034384cb9000009a196e1a3d06c9a09d998414682f12a401a0eca0ab31daa4a1a3b7a47b320ba6d6a4ffa5583378a7f3a698a71b345fa702a8f7a73f3437a888a79ca8473444a8d6a885a90d3492a854a91eaa31339ea867a997aa37326ba8b9a903ab283125a88fa9ceaa1730f4a785a9deaa9e2e92a78fa907ab632d10a78da928ab4f2c01a793a93aab3a2bb2a65da911ab942938a632a994aa5928eca5fba84aaace269ba588a8fca922256ba582a807aacb23f4a451a8b7a94621b0a4fea759a9781f77a1c8a562a8d01ce726be26e023a292953108312b30f1a1d43455341c332aa76f35e23418343ca84b34bf336e3259a7252bb12a9029e7a0229a4b9d77a1479cda9eb5a063a34d99029d4d9d33a1ef9a169bd599309e8d9a7e991392869b289ad397ad117c96229b2696e217b10c739a58934a199d154c9b9a91931acd18de990f8ef11a69196999bd8af81ad919d9991c8a7d1a441a9998cf83031ad1190b9997831819aa18aa98508349187a177a970e83e017de16de96a7825e162e15559677821615c114c194e986b614eb127294d6867a137112719297890613fc11fc91718960118911e88f0d8632114111818cc588d610070f9f854985a610b70e5f8504855910a5110585e18a7f0381848104ec8c269090920a840080da0a5d0fa01260a10ba0fca1242f21a43fa25fa29f3160a49ba304a46f32bca4c0a416a518330da657a55ca7bd3380a6bea7cda70b34faa75aa8faa80f3476a8fca8daa9c833c2a871a95daaf83297a879a94daa0c3279a878a9afaa34315aa863a98daa343040a8a0a9fcaabe2efba7dca912aba42d5fa78ea907ab7a2cdea63ca9a2aa632b9ba60ca95baae52948a6eaa82daaa928f8a5bea80aaa2a27b8a555a8d3a9892575a53fa8a9a92224eda40fa88ea97f229fa495a745a9dd200fa465a730a9061f21a07ba12fa470178d2d332dcc2ba99fcf344b340e3370a74d369f35b234caa80f365c358434f5a80431c730ed2f49a4269a139b929d2595ef9d209e6ba16b8e469c7c9b969ebf97929b079a8e9d2f99679a27958c9b2d9a6498c714cf93289b629511199113ef9a18958f19e715ac9b0d94fd188917099c91926619ed166b9b1d91fd18fb17c499a690a0184f1748991e904d18d6162e98e48df9176716d397818d8a16b6146797cf8e2e1552121c98868ee313df117696538eb5118b0e00966c8f970f1908a295088f1f0fa7874395498ee30b2f87f094908de3041f8daf93398d9804c88c2c93258d6384608fa492f18c2c84228f228fbb8cef83a78ea78edc8c7f8cf48d248b068e95904c937d04338a418d5290e90660a1ca9d93a2622e55a446a2c4a3843190a446a449a50832e9a4a6a4c5a5c832c2a5d8a5fda76933afa61da8b5a8cb33e0a733a848a9dd33f9a7cca814aa7c3344a835a984aac8327ba889a9ccaae03184a8c9a9c5aae53097a8aca9f6aa083048a89ea9b2aa772eb7a761a9d2aa4c2d14a723a99caa402c11a712a982aac02a7aa6d4a83eaa5629faa5e0a838aa5228ffa5cba84aaafd2646a696a8bca978252ea635a88ea97a24b0a53da8a2a9822338a521a8a3a90922a8a480a70ba984207fa1b2a57aa80c1789252f23372099989c3391326a31c1a6a9361436dc34b3aa3e37633646351dacff34ad34ba335baa6a1e1815dd9c37a2309d349f9ea3dc9db09daf9d77a1259cc29ce39b81a07d9aeb9b8f98e19d3a9afe99c20ba198f4993a98091a5016af9986969b1a741a48994295f11ae919d698e992411b911a8c981c91ed19061a2b98a89072198519a59747906d180a177a95cf90e815f914f99430916414c80f8a94ed908710d9083d94b8902a0d8e88b19173908a06788e6491bc901e861e912a935090bc85c292c29209905e8555925592498f6f8bfc91fc910e8fef8a8b91eb8f968e4b8d6f92268f2d8ef28cef91e98b098e738e7f91e304568ee18f5292e50a4e8ed18e4b91da83de838f89db8c7a0649a1b69d8ca15e2e3ba3eaa01ba27831eba32ba370a4d83126a524a567a68b3210a6a3a521a619339ea61aa70ea84f331aa743a7a0a85333cfa751a87ba9113350a821a96eaa60325aa8d1a9dfaa8c312da8f1a90aab8e302ca8b9a920ab8a2f21a8bda92eab092ec1a787a9e8aa012d30a743a9a2aa3a2c20a746a9b7aaf62a1da74fa9c3aa9d29c1a622a9c0aa9c281ea611a9baaa082797a5d0a86daa67252da567a8eba9e423d6a41aa88ba91b2295a4b9a75da9492132a4f9a6fba8821f81a35ca64fa81a2058a0b3a2b3a4b2190c2fe92ed52d09a03636d435ae345faa07383837de35dfac08374a363435d3ac3b2c182c182b01a3629c1f9aa89d098ea19d1d9d28a0c98d859cdd9a039ea88dc09a1695789b1394e298de11db93db93db97361892134f961e96ef180e163d98e6947b19c5153299969424199417df985d939f18c2144898df9232175314c99763938c15ef108698c19309141b0a339809945c0eaa89ca979b93d6078d923597409339874294b1967693359019953b96f0926f91db96db964f924a923f9748969391cd925797c09480913792c3966094709120937596d692ca90b0922a96879238915991bf951592ff90f79146959591b58f6792ea94c88dfa90d7945097050b00807783908c16062ba0959d76a1052e03a4d2a151a31d31ada422a38ba45f3144a562a4eaa449325aa553a516a58132c2a536a607a7df3262a62ca71da83233cba629a850a9f53241a7e8a8cca9253205a891a99baa6d312ea8f9a91aab753047a8f7a916ab2b2f09a8a4a9ccaadb2dbba76da9e0aac92c91a73fa9b9aafe2b49a723a98caac92ac5a6e5a838aac82957a6aea809aaa62821a6cba82daa8e27d6a5a9a8fea9142631a55aa8c9a90e25c6a413a876a927247ca4eea756a9502246a47fa727a98421bba333a7d2a8312016a204a619a80820119a7b99cfa021113634f0337532b7a8103892370836c6ad40387e374e36b7aedf33af33303285a904a0749f43a10d953a9ef69f1fa2998dee9d779c2ba04097cd9c1195a79e4d9add99e2140a9a629b1c98131b8f182a9b3297621cd51a97996295941c881a889a5294581c371b1b9ade93de1b791979994693c8190e18f4986f94a715a80a94981895d40e9090d89601953f8e439643961195aa922b98c595f694d2940a9956957d940d963299ec94fa933596449984945893769654992b94e192f395e998b09313934096f5988d91f192ec95aa983a91b99244966e98168f46922a965198258c9a9270962b98568571912a960e9830056c8edb916892d38d0000d7165b1a8314619f9992b513532ef5a07394401c72316ca0871d171f8a316ba1c114f115fd3132a3859be09f5932b3a426a42ca6a232fba5d3a6cba8b93245a7d9a846aa6d328aa773a9f5aab031eba7ada92aabd930cba7e2a965abce2fb7a7cca93dab8b2e8ea774a9deaa662d35a733a993aa732c14a720a944aabe2b1aa7e4a83eaa782ad6a6aaa8e9a9e82885a6c6a83eaa212816a6e0a8aeaa2327e2a5eca8d3aa0c26b9a5c4a8baaa07255ea57ca853aa042403a509a896a98122aca429a7f0a8232150a426a639a8f020d6a377a595a73a20d3a29aa4e6a6851e8d2937281125ad9d42369535693411ae4b3991386737a9b02337de368a35a9aecb9f5797809e3495ba9d699f41a15914f89c039d9da0e88d079c3d0c279e58941c989e1af716f796ef94a91d011dac9678926e1dc81c76986593b71cf31b81990393071c7c1b2e998292ab1ac119b69836934f19321832989293f7161c1466975a94d70ef089ae96c295ac9479983296569710984d9bb79575979a98f29b4c953b97a498de9be2940797a198c39b829443969b980f9b19945b959e98019ba4938294fe971c9a85911e94f297b7992a91c69368975399cf90ef9272962b99ac8ee192c8960599c68bef924c97b899898eff904997f69c519a00003d149516e71173a1bea119a20a2e1ba08c14e815363107a0e31a641ca0311fa1d1941516093220a34295ed9c9f32b4a44ea39da4a8328aa5cca64ea8823253a642a9c1aa08320fa716aa1cac6f31b3a795aa33acac3062a764aa01acc62f29a71aaa9eab402e97a69aa925ab0e2d68a633a977aa3f2c5aa6dfa838aa292b29a688a8cda9752a61a568a8b2a94c2918a57ca846aa462875a512a9bfaa2927fba547a9d1aad7259ea524a9b5aa0d254ea5dca839aa8324dea451a891a96c233aa489a7e0a8aa22a7a3d6a678a81f22d6a2b3a561a7912121a1e6a2b9a4c221da9ffa9f04a56c191f32b73171301fac6139a838a037b6b203385737f0351cb122a360a15ca3049c0d9e18a1d1a345172d9d9d9d37a0dd0db19b5495d69bb30d9498b619ea16880d1695e91e1c1f6b8db48faf20d920b096738c8320bb20df99078cac1f1120d69bd78df71d061d7f9cbd90981ab716149ca7944a142f94f39b9a967391da98589a4e975198629c4399d697399be49d2398b6975d9b8e9d4496de971d9b629dba94c397159b059ddb929097c79af09c6e92d8964b9a8c9cec919a95b499219cae8ffd942c998d9b068f9f94f698389b078c5494d098a89acb8b6994f298659a7c8b4f938f98189a00854992eb952097d70a0000ab195c1e960e17a238a85ba9a62787a152a4cfa39c300da01d1e911c483183a0df94941cc63139a39ba005a07b32dca4eca5b1a6723211a6c2a950ab2432fea71cabcfaca43161a7aeabefacbd309ca7c2abe2ac0c3093a767ab7eacd72e7ba7cdaa20acb22deda66ba9dcaa6e2c29a643a879a9e82be8a518a84ea9312beba556a893a93b2ad7a5c1a81eaaf428c8a55fa9d9aa1328cca5c2a961abd3269ba589a923ab9f2581a549a9faaabe2449a515a9c7aa142401a5d6a879aa6f2397a45da80baa3b221aa499a72aa91422d1a2bda5d6a78c2165a133a300a59c21189e2c9a149e041f699cc920a190369d37308d31033131af4a347d34983321b1e4a201a26fa4470fbb9d509fe0a15d1c739d8c9eb3a0441add99260ced983914b597ef1cf618ac8d0490de2075202197be0ce7214822769abb0fd6212d22c49bd0856f20f220269cab92af1c851cf99b2796e912668b039a2c973c925d9a849934983a985c9c2b986998be99cc9c4897b098cc9a729d799618994a9c6f9eed9435992b9c819e97941499c99b1d9e13957d983b9b589d4293cd97d39a059dd1927b979c9ad69c9292a296709a899cfb9008965c9a649cd290b895f199129ca7905695c499c09b6e90dd944d99089b408e26947498179ac104c40f0f1e2a1e731e24a0aca2f5a42b2befa004a4fea4bd2d61a315a5e5a5a330d6a04c9b5d16853145a124956d162d32e8a4c9a735a8b83122a7f8aa4cac6f3141a70dac3dadf9300ea876acabad333051a87eacc3ad0f2f14a858ac7ead002e67a783abaeaced2c08a6e9a8c8a9bf2b39a596a5a5a74a2ad7a404a437a6972af5a473a6a0a8352a82a587a951ab892862a57fa988abb626a7a549a963ab3125d4a554a95dab27247ca525a918abea220fa5e9a8feaac821eaa4e3a8e3aa3c2199a48da8c2aa3f208da487a8bcaa3b209da449a82baa26207aa27aa675a8e01fa29b7e1d221f221f1189d2247f254a10279e45a028a2f29790a0b2a462a7d68d3da1b9a47aa6ad134da15fa469a56418509e0aa1f8a2211b2b9cdc9cce9f691c7e99bc1cbe1c031cbd14ce238e24a7147219d0249b25149b5419cf247b25899e3816ec22ce22a19ee8925e1c4a1be39dad99e3920899ce9c519b049bde9db09be19ba19c8c9f9098d89a289daf9f6c95f699689d5f9fd3947199049d259f5c94ea98ce9cc09ef893a298af9c719e9b935d98819c2c9eab91dc971f9ce69d6a91e896af9ba89d32916296319b6a9df8902c96c29a579de790d695929a109d2e92b7953b9afe9c34936e95ee996b9c338e03953f99239b4f840000f31dcb1bb711efa108a8baa8c12b73a43aaa9bab332df8a45caac8ab192ecf9c8e218221f72f019e8715652054310ba60bacfeac663046a951ad21af243064a86fadeaaed62f40a8f6ac75aed02e8aa8f7ac15aedc2d6ca8cdacf0adc32c64a730ac6badd42bc6a540a9c7aac72a46a4419c739dad2a4e9fea21e0236c2b96a4fba898aac528baa577aa3fac052618a6fba9d7ab992491a594a94cabcc2370a56fa9f7aab2223fa52ba9d0aa9e2107a5e5a890aa3520bca4bca84caa6b1f90a49da825aab81d53a46ea8eda9da1c68a445a8a4a9f01b75a30ea86da9401a8ca131a720a9ab1808a1aca69ba8c216eba02fa66ba80a1691a11fa6faa78b12a5a116a5fea65217c6a059a464a646155c9e6fa141a45517699d8c9d9ba0411b4798041b4f1a8f1c5c180a252c26c41c551e4a283629548f2e1d58277a28bf9d6f11a6229223b09e3799f710c3925a9dcc9a3c9c1aa0759cad9afe9da4a07699879be19edaa0c696e79a859ed6a02b96349a249e8ea09e94ad99d69d33a0429445996e9df29f44922299689dd49f0292b698319d849fc4919a98dd9c159f96912c98a49caf9e888fc497399cfb9d298c0997b19b729d3485b5961d9b0b9df7849796d19aa79cba04a9957b9a759ca98d3f953e9a2c9ca69108177d1cf419300d30a0b7a319a4762016a5f6aa83ac4c2cb0a575ac70ad0c2d79a500ab05aca02ed3a310aaeaab972c5fa771ade0ae712e9aa769ad13af6d2e25a886ad13af332e2ca88badffaece2d33a84aad9fae0f2d03a8f4ac27ae1e2c60a77baca8ad3f2a54a6dfabffac592727a43da838a99119199e53a198a3c794c5a380a691a840991ca67aa952ab1c1e8fa59fa97fabc7206fa557a921ab2b2144a537a9efaaed1fffa400a9abaafe1ec9a4cea87eaa171e8aa49ba836aa361d5aa46fa8fca96a1c29a451a8d4a9461b13a422a89fa91f1b07a4f3a732a9a01944a24da640a87115ef9e76a230a42510b89be5a015a3ac885da087a444a6e5937da020a575a777914ea0b2a477a666112da018a49ba54018ae9f35a251a4521a5d9cb79c0b9f981c0e19422534265a1d3f23022ce22c019815205a29e92949a23e057420392097a057994e9bc39d0e9ccb9b299f65a1fb98349ced9f0da3fa98e59ca59fe9a16797ff9b3f9f4ca17c95fd9af89e09a14494509a939eb9a00094d9992e9e80a0a0937199bd9d41a0839404997b9d0fa04d94a1980f9d979f1f943098a69cf09e52921098519c5f9ea290ea972a9cd89d5d90a397be9b809d3b8b0598e99b209d9f840e97109b049dc88a2796889a4f9c3e0400000e1f7120bf18b2a3fda85aaa942802a599aa31ac442b5ca5dbaa2eacf92a719dfea421a665277da2e1a599a79927bfa648ac53ade62b5ea71ead8aaeb22c97a71fadb0aeb92c9aa711ad8fae6b2c5ca7cbac36aef32b4ea7a0ac28ae2d2bf8a670acdaad942a81a55baba2ac4e2977a13aa7c8a82a2671a076a48fa6b2215da28ba505a8f91b9aa41aa8b1a90816f3a4c2a84faae21ce4a4b6a858aae91cffa4aaa84baaf01cb9a48fa806aada1c71a467a8d1a9f71a38a428a895a9c61aeda3faa765a96f1999a3bfa743a91f1863a361a709a9b71503a3f5a6f0a8af15aba23aa679a85d125ba107a509a75111c89f3aa4cea50b0a939f15a4cca5f08928a04ca429a6869378a070a45aa659955ea063a468a60b9779a064a43ca6f69632a0f0a246a59a13f69e449eeda0ad1edd2756308f31031ca21d1728ca28baa3609c70a01da2659aea9de8a000a41e98ef9cbda031a30795609c88a0e2a27c93479c55a05ca20e93d89b09a0d7a1b890479b799f73a14b92a09a099f21a13b90339a809ecfa00c90b499069e7ba065913a99a29d56a03991c898429dfb9fe9906198ea9c7d9fbb8e5698859cb89e528e2d98459c2e9e268bf597029cb79d84840d98f29b419d42844797859b419d428473966b9a659c14840000c81cf21dde1254a3d5a8c1a9042805a414aac6abe52960a222a95cabe62970a133a846a9672841a4f8a867aaa7286da5c6aa8dacaf29d8a50fac6bad392a5fa65daca9ad962aa3a65eaca1ad562a95a645ac88ad4f2a99a630ac51ad012a70a6d5abeaac5b2957a5c3aa51ac6828f0a327a9f5aa1526f7a201a899a93b237aa352a710a943212ba470a714a93020c4a41ca87ea98c1eb7a45aa8c0a9521d7ba45fa8e0a9bb1c35a452a8d3a91f1c07a443a8c0a9e31aa7a31aa892a9881951a3d0a757a96019fba24aa70fa905189ca2e9a6bba89f1735a234a65ba81f17d3a1a3a5c6a7ad143da110a5eea63b14f3a099a466a6b0109da054a418a6f40926a018a4e3a5c189fe9ff3a3cba5a989fc9fe5a3b3a53e90f39fdfa3a2a53190e79f0aa495a50893519f41a3c9a5f394b0133215ac16dc8eaa8c4b94b796498ef99caba1b1a37195519db4a11ba46b96e19cd1a0fba27692a49c90a076a26b90399c4ca001a2328d0a9c13a0c0a1108d989bd59f95a1028d589b529f40a1e58ce89af49e08a1c98c519a7a9e9ca09a8fcb99c59d40a0298f69993d9dcc9fb290ff98cb9c129f378e7898689c559ed48a4998419ce69d828a0a98139cc49d3e841d98179c789d1e840798d99b229d3d0a0997469bd29c020d0000021d031eb412bca103a8dfa86126c9a2f4a869aa8428d4a207a941aa682869a3eda851aa5728a3a457a9f4aa4e2862a504aacbaba82886a595aa3eacf528cda520ab99ac0e2927a66babc9ac11293ea668abcaacd228e8a503ab92ac8b2860a587aa33ace227f0a4f5a9f0ab9626a6a488a94fab242548a4ffa8a6aaa02329a48ba826aaad2105a447a8b3a95e20bfa31ba87aa9871eb3a3fba758a9271db2a3c7a750a9ba1b96a3c4a73ca9721a7fa37fa729a9331951a34da70aa9e5172aa316a7d5a87c15c3a2d9a6b0a8621261a284a68ea8341216a246a66fa8060cbba1eda530a8b70b5da189a5f1a7500b06a1f9a414a7b70a97a06aa45ba61e0a47a01ba4cba5a989d39fd3a387a566891f9fb2a37ba50490fe9ea8a380a5b892919e92a364a5af928a9e1aa33ca5cb8fc29d44a1d3a335887997e89a7b9cd3834f976d9c1e9ea983839c5aa02da207947e9dbaa057a3b598919c9da02ca3ae973e9c7ba0e6a29f961d9c43a07ca2b794a99beb9fd9a18e940d9b589f60a11993da9afb9e06a14291809aa19eb4a00591349a449e6fa0d290f899d59d2ba09f906999549d799f2a8efe98cc9cd19ebd8d99987a9c5c9e788d5e98579c449e648d9298549cf99d4d8a6998489c2d9e848a4b97639b499e7195e722c6268127162bf525d22472246530de28342c002d97306029712d7b2e00325c29e82d232f2a34e029462e852f63341e2a822e6b2fe433022a122efa2ecc3265295a2d5b2e16323e29f12c072e9231c928692c4d2d7230da27ed2bb22c722eeb25cb28ce29812d499bf0aba4ac7c2d2b19e8a5fea62d2bfca41caf62b0cb2d0a257d286029e628fb245228922907278324261afa9a3728e1a47ab19cb3b2272b2cbf2c532c8a14702d7a2d412d8b19d22ec32e142e241a972fa32fc22e2e1aee2fa22fff2e1c14242f172f8d2ed613532d852d412de618042ad42ab32ae419aa247526f3267b190e1bfd1ee51f4319ca19a718c619c6193b1eeb2317256817921c3b23bb244014391c13239e24c410441cae225324f309031c4b220c2492897a1bd9217a234289001b7f212023858fec1a5521c122498f9e1afc207622ce91281ac12025228691e3197f20e121669393192d207e2112933919ee1f3b21bb92f218621fde201f949518ee1eb520fa934818981e6720ab94e1172d1e3a207b948c17f31dda1f44941c17731d661f0594cc16251db81e7c933b16bf1c201eba910c16701cd31d3d90d615391c9c1d14908f15ef1b361d8f8d2615b01b001d4484d914631bcb1c17843f14791a3d1c0c8499150d1b671c410db420b1225b21b12adc26e5286329e92fd22552281529f231db2692290c2bb034e6262129ee2a9c369f276f2b0a2cf936ca27f62a232cc03574280e2cc22c563571280b2cc42c8734c5272d2b432c3f336e268c2acd2bbd31c624b82842290d300420129f02a2412d449e7eabb4ac792c71a028ac60ad1c2c50a292acd4ad652c318e5ea32ba5d72a8d14509ee09fc429269d94aa7facf029f219f2acf0ae0826342a0424259c8615ce2d2b2d472cce94a62f852fb12ecf94783041309d2f189bba308930fa2f19a097305a30aa2f999fcb2f592fbd2e8ba1ef2cba2c482c53987026db27b3274396a519431b821c02168591e59be89de81d6b1a74209421c01d731b192298234e1a611b1222ef230e17d01b3b22ec23590b441ba42166230e94071b792104237b93e51a6f21e9222e93f71a4d21ba22d0925f1a102142225692fc19b820e5212e94a0194e208b21db93571913203f2170931319c01ffe201493ca186f1fcf20d2925318f71e7d20aa902e18b21e4e2079900b18341efa1f41908117dd1d911f09906d17591ded1e5091ba16d21c641ee7901416881cd91d9c909415341c861d7c903115011c661dcd9105158c1b311dc09128153f1beb1c9f911515db1a801c24910015121a461b258f3514731885190e90b91dbd21cf216a2cbf2280269c2793302d1f4521f223ad32ef1a69234c244135e715ba220d243e377e215b267d275537bf1e6c24b526a936b42250280e29f1350622cf279a282e356522392644284d34c92086245b264b324d1b901c841da830bb9783a59ea70e2f5aa0b9a960ab952d06a253ab81ace82ca2a1b4aa36ac9a2c13a1b9a82eaa842b18a1f6a822aa732ac5a144aaf8abd828399905aa48ac24264b28bd9a7ba58320212dff2bda29979bcf2f0d2fa02db5a1dc304930372fa8a45831aa302b3045a6843106314d30bca41f31a130cf2f13a4782f0a2fde2d03a1012ada294229e59a9f1d341bd51adb154a96cd98c19b081aec906713f014f01407188b1fc3203c941e19c120da21b2992d1a2f21b82201989019bf200d22bf949319a120d52118949b19d9201422b793a219bf20d42167936b199d20ae21fe92411949207e218e92cc1817204a212292a818a91fec20b4914b183b1fa52063911218dc1e5d20138ec117841e2120be8d5017081ec61f82904017b81d641f499019175e1df41e0890e616181d6d1e5f917e16b31c251e239105167a1cba1d58926d152d1c541d17921d156f1be11c7a907514a61a3a1c2790cb13341a221ccd8d0614181af71bcb8d0a140c1a281c3b90ef13bd19681bf98ab499cd99a89a692996971d15661ca0308c9f03a0a79d023355a2719e789f193573a481a4c9a3f6361ea42da0f1a05d3768a362a28aa09336a3a1419fb0990036c89f50981b994e35f89cd997aa987c34189e5c9d6b9e2733b89e2da34ba430316aa031a673a7ff2fa6a184a885a9702eafa368a9faaa302d9ca390a9fdaa922cfaa28ba926ab262bbea3c6a94bab0d2a3ba453aadbab9828e9a08da954ab0926a5246aa001a64a22752c392a7527c61401307c2e132d83a039318e30812f4aa4d63129313d3098a546328431963065a65c3295319930d5a65531ad30ea2f8fa6902de22c462c6ea4e72258219a1ecd9f8e9983981598e694e0982d988899be949b06fd19e01b4c940313101eb21e7698be167e1f7320fa9bd9179a1fa020d0992a18f91fcd2027993e19d620c421d4979b19fe203e225f972f19bd20d421e296261972207d217b96d418282031212096ad18ba1fdb20bb954e18511f99206e950018ad1e57201f95c4175d1e2320e294b817111ecc1f9a941b17c01d5c1f5894d416461db61e18947116fa1c3c1e9c9399158e1ca41d21932015201c551d3d919814621bc61cdc901114a21a421c6e8e6413181ab61b0c8ee712e5191b1bcd8d0a134a19cb1a8c8d07133d19af1ae990b3136f19861a87940080d8884b8d5a0a06a0449e719f533025a38ba4d8a245339ba46ea503a4b134daa6c3a61fa89a36e1a728a7fca6f036d9a588a520a55d3616a608a41ea6d2352fa5dca4caa55935d0a488a55fa58434eea4fea53aa74c33d0a400a73ea88d318da4a0a820a96630a4a42ea951aad32ec8a4eca962ab652d9aa4cda94bab282cb6a41faa74abd22a60a55baa14acb1296ea55aaad5ab212835a4baa93dabbc256f151ba66da8e721682aa8264b21b414772fdb2d782c8da06831a0305c2f66a471328c317b309ca6e232e831f53009a83b3353322b3134a8d132e331f23048a79a30ef2fbc2e49a55728d426322574a00299ad9d1b9fa29afc9cb59c4b9caf94df95d3175a1a3c94e78de81b681cc8964610a61d321e8596fe10521d591eba97a414af1de51ea9968216fe1e3c2057949317ba1fc0200b94a0178e1fb52061955d17771fa42018958517021f6620d4942f17791e2120d4950917ff1dbf1f78956f16d61d4a1f25955f16bb1d2e1fe0942f16821ddb1eb195bd15381d881e6c954915c81c311e34942415731cb31deb94ba142c1c4c1dc29428147d1bed1c3d93e3139b1a1b1c4a924d130d1ab01b9490d2126f190c1b97903b124219e51a6a8ec911d418fa194a9092105718081ab5844a106e162b18e68a0080730b030f01849ba395a266a22230b4a57ba700a7b6325fa7eca71aa87a3417a667a608a53e36f7a564a44ca5933604a77ca79ba7eb35a9a778a76da8aa35afa70fa8dba824355aa7aaa8fda85d3486a613a8f6a81e3341a686a883a9923140a643a959aa6e3037a6d3a916abfc2ed9a538aaafab872d98a5d2a999ab232cb8a524aa9cabad2af7a519aacbab712950a525aa92ab44281ca5bfa924abf9254fa29ea8fda9a02292245e99bca3301a1e2e732c542a52a07d318530c42e45a5d732ce317b302ba78d33713246315fa81434ef328d31f5a80934ff32ac311aa9c632dd31c73021a8222d9d2ccf2b54a4cd19fb1c5a168fa1aa9b199c049f8a9c009903983a991c9c9b95690cd50d029c7c934015fa16ac9bd38c061944199b9b540c551c131df29adf122e1e271f6d9914156e1e01200899a415681e961f5599ef153e1e801f0099f8153d1e9b1fd3982816f31d941fc197ae15ea1d421f6d97e9158c1d241ffc9663152d1da41e50950815da1c241ee994a3147d1cac1d8a9447142e1c471d39941b14771bb81ce793be13021b6c1c67933513801a211cea922912c1194e1b6a924811ea187a1aa790931022186e19358e16107317d8180c8bcc0fdb165718b88a690f281603186d04980ea815a217510a008059886284930a55a203a0c0a00730caa4b0a505a58f32a4a672a8a0a70934aba853a99daa3d35daa8b3a946aa7d3520a81ba924aa5f354ba8aaa885a9513512a8f3a8f0a9f6342ea81da993a94a3404a800a922aa0033b2a74fa901aa7731c2a792a951aa31302aa79fa9efaaa32ea5a6eba966ab532d13a68fa9f5aaee2b22a6ada909ab702a7ba68da930ab3729c0a594a946ab1928a7a595a9efaa15260ba56aa98daa0d2490994ca51ea8971ed02bfe28d625ac9a1c310730f02d79a421330732b53077a61934d03298318ea875347133f5313ba99234dd335032ada9633494332f32f1a9e4304e30962f01a7b6217821ee1f7ea00b9d28a0d2a08b9b549c6f9a1a9d1a9d4998b2927794d69c759553155414b09cba8f421b251b399c7e05741c681d669b1812371e441fff9a2314951e1620719a7b146b1eea1fe199b614491e541f7199e714221e3d1f16997c14951da31eaa987a14271d771e4f985214d21c061e04980214461c581d5a968013031c141d22978013921b8e1cc5969e12191b501c68962612691ae21b2b97ce11091a781bca9680115a19f01a77951a11ee18391ae7947a10a918bd19a79337102e18891962930b104e185f19dc91fa0fd9172f19a7912d0f6517e9182b90c1106a17ab1890920080360c8f0ec0837fa313a1a8a0bc2fcda477a215a23f3260a27196ae17bd33539e7925ae286b350e9df7246d27dd35f5a35da374a2873501a6d7a5c6a55535efa744a82aa9e63405a8f1a86da940343ba835a974aa08332ea88ea946aa8431dea772a988aa5f30c2a78ea9baaad22ea3a734aa49ab992dcda657aaa0ab4d2c30a6d0a94dab712a25a69da913abf02881a52da983aa0e2856a5fea8fca98d261ea5a7a8a4a9172561a358a89da98221d824091c2fa071130c309a2efb2cf4a223332f32c83057a77e346533fa311ca9c9341134bf3229aafe344134eb32ddaa293572343433bfaa0334c5329e31d4a88d29002901281da2cc9c57a0bea08a9cb89c7e9cf99d93991b9a1399b89ab89a249983924d97049c9b96bd11230d109b7d92db170e18889b058c071b441b269a2505051c791cca991b0e661cee1c2a99f310c21cf61cbe988511bc1c801d4c991313c51c961d3d985013c21c9c1db598b712ab1c351d5e9806135c1c381d1d98a812c61ba31cc7973b12531b6b1c4698f611f11a321c0f98aa11301a6a1bab975511d219ea1a3396951014196d1ae0944510c218f2196293700f3618401900935a0d06179b18a292080d67169217ed91290c2515ec166a91340d4815411610959910f216c018f8910080360d2810b20332a3f39fac9eec2fc8a371a213a23d3286a381a311a10534f5a5b6a615a78335d5a65da7e7a4163664a7f9a755a88b35bba7cda778a9443527a89fa842aace3426a81da93aaa073426a86aa92caaba321da85fa91faa63312ba8aea97faa3e3016a8c6a9b1aac92e76a791a9d3aa3e2d37a772a9bdaaf02bd1a64ea99caa542a5da63aa989aa33290ba61da968aafa27a4a5eba869aa12265fa5cda8f5a964243ea5aea815aa2f224aa184a590a7161c092c9a2a6328c9a061324f312130f9a7a634cb33403218aa3a355b341b330eab6a3590348133ababb335d634b733c5ab783589344d33a5aaf92e412e292dffa57e9a80a0f4a29ca1859d56a06ca2019bf99b3f9c859d9f9a109a6597479aac9b0298d40bf093469b1d955516200d0c9b35929f197419aa9ac78b681bdc1ace99be04691bea1b0d9a8e0acf1b421cd499610d081c971cae99320f0d1cb51c5399ca0ef51b4f1c9e992a10581bfe1b3699ae0ff61a1c1cef983d109f1ab81ba298a10f351a2d1b7697f70e6a191c1ae896a40e0b19ac1969963c0dc41862191696f80c21180919d194d30cb41727185a942f0c8616bc170d944f0b6015b316c193ee0a4315f415b493de0a0f153f16469442099312541207906c01210e5c112b9000809902e403d609b6a2919f709e7c2f47a451a248a05e3240a479a301a10934fea31d9eb71f6c351ba569987999dc3533a630a378a44e35c4a78ea597a803353fa8eaa807aa7c34b6a865a99daade3378a898a9e7aa7c3219a872a9b3aa2231dca7c0a998aa263006a8e1a939abc22eb9a70daa22ab642d5ba7c1a9edaa0d2cffa67ba9e0aa112a7aa646a9bfaab62827a611a973aa45270da6f3a85faa9725a9a5cfa83daab52434a5caa8c0a92a232ea435a812a9a0209621c39163a1a1927830a22fbb2d7da5ae3405343632a3a98c35ad34913366abd335ee3426343cac2536383527343dac8d36b335a73474ac683386328f3101aa2f17e18d889dcca3e79d32a029a21b9c389d199dfa9e829d639bab989f9c559d889a0d0cbf960f9d1a99d616430def9cf294ac1a47199f9b978ede1bac1c259b4a8b511cc41c859ab384e41b4b1cdf994504dc1b5a1c6399e609651b1c1c16995f09581aa01bfd97f208db19611a6397c4080319f819e9969408ba180419ac974d086918b1181296ce077f17d817c095220750165f165f967f06f415041604961f06db14a115c394a2051a152f152d932c052014bd141a91af0497135214a7906f0427131d14558e7d04e512d4133a8b6801f80f5611be846c81140c4d04608d0080220f0512918a4fa3519d1e95992f6ca4c9a321a22f329fa499a1e39d143453a506a121197d35b3a66ba115a0d33595a6a6a57ba4523534a756a688a6f034faa7c3a8d6a97b3436a847a979aad53345a865a9beaa563235a8aca901ab0a3103a8e9a9d6aa0e30c2a791a9e3aa452e7da782a9edaae92ce1a675a9f1aad42beca682a9fcaa2a2ad1a678a9d9aadb280fa61aa95eaa5f27caa5e3a823aa33257ba5a7a8efa9652352a580a8c3a9ab2177a421a869a9092076a23ba6bda72018f829ee28ec2544a0d233d132343127a9e035ea34dc3333ac41363e354f34e0ac8536913599342bad29372636f6347bade53527355534b0ace825be25a1248ea1879e1b9e9ea16c99c39d489e16a1259c1a9ce89a239ef09b83990692179a669c7898a511bf93329c1b960118cb0c7e9c45945319db17359c9091d019ca18fb9b3690ea1a65192c9c8f8d3b1ac119869b288a731a2b1afd9aba897619ce19949a9a831a19a518129aec8843185618ac998f88e016be169998e5874d16111539984e870c15a614b796f886f413ce124b97ab8989136112ed95b389dc114f10bd9473898811021037930e864e115f115f917b858f0f050fea9006859710980e988ec984ac0e4d104d9011878003bc8a0d91d08b6c8dd591e5920080a40d62148318eda1379f919b7d2fd8a3bfa3e4a3f9316ba325a3009ecf3374a46ea48b9f3a353ea668a302a0a33556a587a46da4413559a618a770a7af349ba7f5a820aa3a3447a8e2a9cdaa9f3346a89fa99faa563255a89ea982aa173144a8cfa9afaa0f3038a8bfa9c2aa532e0aa8f1a916ab1e2d30a78aa9eeaac72bc9a660a96faaee2992a6f0a82faa8d285fa6c9a8ffa93227e9a5a4a8dfa92725bba547a8b3a9582360a537a8b5a95c22c1a419a86da97b2030a484a712a9cb1d24a2b6a4ffa67691772fa32e092d82a69e35e834e73389aced36c535c034d1adfa36e735e4342fae67376a362535dbae753781362c35a5ae122da02ca32b78a53a9d07a01ca2e699809cde9c65a0e19ac99bee98c29c079c679a2d976d9b6d9bcd98b411a693259c369620182f16a49c089584191518f59cec93fd187c17149d92929c185c181e9c64924718bb174d9bb990ff173b17d49a2c904e18d216719a968fdd165416fa99f68e7416a0149e99bd8e221554144199668ed013ba114b987d8fa411610ef9973f8f8b0f05084598d98e460c9e870c982c8ef10b3687c396918de804198d86953f8d9804c08c26952e8d5f84448ffe93e98c2384fd8e4a92a38ce2838a8ee291e08c6389fb8d6291458dac904d94049000800080d588d588c09f169db89f052c17a361a459a4623134a449a4d2a0c7339fa4aca214a20e35d5a52ba144998e3574a5dda290a52335aca601a6cba8b0345aa7d1a806aa2834f3a7a5a9a6aa723319a865a9d5aa1d3209a894a98faab83025a877a9afaa7f2f28a8b2a9bbaad42d94a75ba9c6aa982cd0a626a997aa262ba7a60fa930aa6e2915a6cca82eaa5028bda5a9a8ffa93227d3a5c3a820aa9b25eba579a8e2a94b24e7a537a87aa99b22a0a518a874a9b42107a503a854a92320aaa423a79fa8101a0522721d2c9ed4a11e34bf324b3156ab5737fa35e834a2ae59376736553592af923771366f3508b02f382e37b2357db0223298316f308eac6b9c439b00a408a3149d959df8a1c79dba9c119b149f979d079c3597919c919c159ae40bb5965c9cac982b1950161b9c8596b5194819a19b2595171add18079bf4936d1a8719889a2e92d4190819dd9a9b90be189918449a1f918f17fc160b998e91d315e31489983491c212aa0f0797bf918310c70892967591260d7f882f9620917306588ed095b5900e86049185953590338c9c923195d28fde8b3a92e4942e8f518b8b939c94f38eb48d6791f292708e3d8f3192d190108ed08ebb915e8edc8d22906491308b9e8dca905a9386844b8c648de08ee489008000802d850a8a4a9ffe9ab99f672b89a2e1a147a44c31dda351a1bca0843312a5b4a0ce98fe346aa50ca1c09f5e35c1a608a5eaa8bb3406a799a699a94c3412a8a8a8dca9d63364a881a984aaf03263a800aa36abbc311aa800aa28ab67300ba816aa2cab162f08a8d2a9f1aa922da0a788a99faa7d2cd9a62ea943aa542bc9a600a95daadd29f7a615a96eaacb28b9a60da95caa8c2746a6faa85caada25b7a59aa81caab32442a536a897a98922cba4d3a710a9d22074a45ba7c0a80d204aa4d1a666a8801f18a3a1a59ea72c1db12a0d2a73280da54e366b355534a5aecd37a0368235aeb0f237da36ef3516b18238ae373b36adb1c8350b353c34f9aeb29cc9984d9bae994a9d279e54a02794619cfb9a9d9c1997d19a2192b298b5966099de112f8d899862988f167713d89ad09606182e13959a8295aa18c4157f9b969455186615059b4a94ba17ad14049b019428174114629a3b948915e3101c9af193c5110d0aea981694520e94893a994294c0876f92d3980d94628d2b9477986993239013962598bd92db92a696ab974c929593159715974992c8923c976296ce916d93a596dd95b69111935696d9944c91a392fe954a9526913f928e953f94ed90f1912c95e993f78f7c92f1943c919e91d894f995b00d00800000da04da84159d0198739f8d2bbba26ba0c1a27d31a3a492a233a42d33faa5aba53ca6923429a6f8a5a2a7cf3423a66ea7ada8813410a63ca6bca72834e0a65ea81ca99a3356a72ea92faab33286a756a9d1aa6c31fea7b4a9c6aa42301aa8d2a92cabc12e02a8c6a9efaa512dbaa773a9a8aa2d2c26a726a996aad82afea605a967aaad2995a6dba828aad0282ba6aea807aa8f27e6a5a1a8f7a94026a0a57fa8f5a9282525a55ba89fa9b823b5a414a84aa9ff2174a4aaa71ca9932021a42ca7c5a8a21f0fa4c8a69aa8191df8a1c2a4b0a53b104530b02f082e98aad73796368b3536b107381537e935f2b1b7382838ee3633b32e386e371e3686b1809e819db6a2b9a0249d179f72a3819ca99d789c32a0799d5f9c1797e99d379dec99dd14b8980e9d44981f1b8318d69c6397d11b8e19a19c2396241c861a729cf094d01b311b269c7794001b5e19269c3f9460182d169e9aeb945c14860a1d9a909585087490929972952c8e1996689875958f92d396a798eb94b994519851988094f3951499039807941d9634996e97049478965599f5967e93af966f99859636935d961599499522939796c0982e94f692569679987192f69233965498d990d8927c961f98978e35919b95f997618e2a8fea92f393969400805e155715da10da8afd21bd24012c8d9d5a2086217a31f99a5c25de26b332df9d792573231734949fe124e32367347aa1c31673a339345fa459a471a5ba333aa623a85aa94633aaa7eea9a3ab62327ea7eca993ab003182a706aa86abc92fc6a72eaa56ab702e68a7caa9f9aa1e2d2aa734a94caa162cd1a6d2a81baadb2ac7a6a2a8e4a9a92946a685a87ca93e28e6a54da887a92e2798a56aa8d7a9bf2581a588a812aac02456a549a806aa972306a5c6a77aa94d22d0a448a7f2a8e0206ca46aa64aa8152002a48ea538a7e01fbba2d5a4f4a6951fa1a1ffa152a38216c9339032743156ae70389a377e36ecb3ba382a382e376cb4f1372c370536d9b2479fc69b1ca15a9d6f9d4d9f5fa172943b9dc69c23a19c97019c448cef9b37978297ad1b491ae398f794381dff1cff99f093f71cc51cfe9a5394b31ce41be49b1794f71b501a4e9ca1938d1ab519c89b24949d176916de9abd945414720a0b9a3c957b885a933f9a3396a7951f99ce99489709983c9b599964979a98539bfb983097a698469b0a981d97ac98319b70976596a898019bdf955695a298859a789580945198139a19952794ef97a8990394e49362973f99729320937e96159997901e93d096ec98729021938d960299778ec5922e97829a589300001e151215f08f70a09aa12ca4372dcf9fb99ef7967f31059ff7157922a53294a04d9dda1e763411a1ad221122e43479a1211d65985c34bba222a56da5d53300a572a732a90f33aca60caa18ac0a32aaa7ddaa7aace8309fa7ccaa53ace32f3da77faa0cac092eaca6aaa97dab732c38a627a9a5aa6d2be7a59ba826aa262ad6a581a8d0a9952996a520a878a9a52831a522a8d8a9db2768a59ba836aa7926a5a50aa96aaa3a2586a523a99daa682463a5dca86daacc23d9a426a84ca92b2228a4c3a652a86a21aba34ea60ea868216ba273a405a6de20c9a031a153a34b201da0a9a0cda208109933ad326d3170b0be381338793627b5893570357034b5b2b7a352a025a12d9eeb9fc7a1eaa4ef0d659dd79dc99fef0dc69a4e0c2097b38d7997d91b4d1a9a8dec92f61e331fdb96778c6b20d920059acc854020f8202b9cca8b271f3920f39cca8fa61c471cc89cf8931419a514589d4496560fda95cf9c9097e994599a4b9cc0973c99079d489bb197f89aba9de199f997259b6b9d2b98c897089b429dac960598209bed9c49956a972c9bd99cf694b3969b9a809c9b949795039a219ceb9211957599a89b6992b0943999439bba905f94d098099b9490a094e698a79a559050937498479a49905b92df9560981591db0afe1bcb1e129f70a2cda78ba8ff1d6ca1efa3afa06430cd9f909cbb20ae320da17aa0e51e7d3400a2a597dd18e734d8a399a3fca55134c3a41ea813a9ca33e4a643ab9daceb3228a730ac6bada831d9a701ac63ad5a30b7a761abd2ace62e8ba728ab73ac452d62a73daad8abd82b83a6b3a846aac42a7fa591a7e2a8132af8a42ca7a1a84e290ca516a831a9952870a5caa814aacd2799a55ca9abaa6c267ea564a9ecaa362562a539a9c2aa992430a5e4a86aaad423b1a477a8ffa91e2334a4efa759a9712246a33ba613a84522d6a13fa4c5a5a62152a0289fbda0bd20fd9edc9c539ed01a8da1029ad89e439923a209a08a9f47a1c7a36fa2a9a4369ee99f81a32fa5061c06a114a2e3a3b61b6e9d1b9f7ba1121776993715cc9bac8d2f96031ea71c4c9416906221342106997d06db214522a89c31067c21c221ef9d148fdd1f3d20f79d8394d41acf1afa9ca096101095945b9cfa979995369b089c5b985299c49c3f9b8b98b09a189d9699e998a39bf69df1981899489cb29ea5983399579c859eab97f3980d9c089ebd974698349b7d9dfc958497cf9a109dbb953597ab9aeb9cd49489967c9ac29cab94f6955f9a6c9ca193ad95fe99199c5d935895d999d69b09936d946099739bb5911d94b098ac9a2790040b6c1c6d1c5b12899f92a345a4502cf9a14da6efa6ea2ffaa3b2a884a70632c1a2f0a5fea14e34f0a3f3a27422f634aaa5d6a797a8273441a65caa1eac1133f2a653acbbadf8311ba811ad8daeef3071a8c9acf3ad872f3da886ac93add62ddfa739ac3bad9a2cfca6aaaa20ac862ab7a51ca87da900299ba40ba434a514290da405a384a41c2908a59ea8ffa908288fa587a9f0ab4126a1a56aa971ab97249da55fa936ab67234da527a90fab0822f6a405a9e7aa6e21dca4d0a8c6aadd2083a48ba878aa5a2027a534a88ea9192018a4aca75ca94a207aa1a8a2bca78d2011157d25f12610189f9e8f9d34a3799c58a062a501a8d298b5a1dba51fa8548dada0cca4e6a64813a89f99a38ba55219b79d07a0f3a1131b149c2f92209d841ba89b20207421231cc41548246d25500e6b19d42469251e9dc01870242d25e89fd7105b2174219a9f99951b194315949eab996e97a79ba19d6a9b239c509eaf9cc79bdd9c0c9f889ac79a679d8c9fb297c9996e9d9a9fef965a993f9d399f5e96ce980c9dee9ee8958a98bf9c8c9e959542987b9c699e4a95a697159cd69d3694a4968a9b759ddf935896099b329d7e930b96939a219d6094c495799af09c5a94aa95479aca9c39946195c1997f9cae9116958999ec9b9c840000471cc5196b92f8a18aa8a0a9d32aeba52dacb7adb72dc9a60aad4caeb32feba444aaeaab1831f3a1e6a03aa28c336fa669ac5aad093275a864ae18b03d3169a842aeb8afb3304aa8a6ad3dafa52f7fa84cadc0aee62d90a81cad65aeb22ceda7a1accfad232bf3a69cabf6ac5829cfa4caa5c3a83f280fa1931c369b8f29aca08319d3949429a0a467aa61ac9f2425a616aa15ac0423ada5baa94daba82132a568a9ffaafd20f8a440a9c8aa6a20c8a4f5a87baa071e4ca4d5a863aa4a1c46a4b0a82aaafd1a09a491a804aab31775a34da8b3a94b1735a221a865a9141438a15ba71aa9b713cba007a7d5a8ee13eba044a677a8b91322a193a5c3a78e0c70a105a515a79a12b6a048a4dda58c17969edca062a3e8199c9e2c9cab9d121d9b944f1fb01e1d1dc41b7026d327591a9e1e78288d297f95ac1b2526cb27439f748c3f207e20a89f769be993029bbd9e219cae9c17a0159d459b679ec9a04f9b6e9bfc9eeaa0bf99d49a6d9ed9a0c7983a9a059e87a0a697b099b89d2ea01f963499549dea9fcc951599279d909f8a95c0982e9d809f8594a798e09c1e9f69944598999cb89ed092c297309cea9dcd90fe969c9b5f9d6a8e5c96129bfe9c258e9b96e29a9f9c0b8bc2958b9a569cf68f5e95379a229cc69100004f1ee81ed10d889fc6a5e6a7452767a668acb1ad872cdea81bae5daf902d92a8f3ae5fb04a30dda8dfae50b07331d9a8c7afd9b0d52f79a837ae35b0262f9ea81daef2af9d2e48a8e4ad6dafee2d4aa87fad02af0d2df7a721ad6eaee02b89a7bdac0cae182af1a627ac82adee2794a59daa33ac082298a0e5a4cda69992f39f0fa2c2a4339b85a5a1a833aa0b93f3a5c9a99cab781761a559a910abdd1c30a52ba9d4aad51cf6a40ba9b3aa031cb3a4cba86caacb1b73a4afa827aa321a51a483a8eea90e1a1ea44ea8c4a98b16f1a334a894a96b16a9a22aa7c8a8880c04a05ba4dca5a38a9c9c2ba137a25991c09d82a203a5629653a1eea4dfa6ac97e5a036a536a77994b3a0c5a4b1a6a81414a050a485a546182a9f83a11ca37d1a9798080c609d181e4c1fc2283b29aa1f5123082cfa2c069ed71d9f27442816a316971f1a281676a0a09a9b9c969e979c2f9ce89f0ea2f89a5a9c2ea063a3749ab49cd49f07a2d398ab9b489f2ea15097c79aef9ef9a005973f9a869eaca0b795bd99029e59a072955599b99d30a03f95ef98719df69fc195a198039d729f84953b98a19cd69e80940d984f9c4b9e3193de97269cd79d9b91aa97b99b849d3b90f297d59b289dcf8df296009bd49c998d2d96499a679c508a00002f1d301f5a18aca3c7a957ab2e295ba5f3ab2aad0c2c43a6abacc4ad262c5ba2cca966ab282af49f7ea459a63a26aaa6efab36ad052b2ca8e8ada5afb92c0ba8c6ad65af942ce6a76bad17af372cb2a709ad91ae5c2b96a7d5ac5cae962a57a792ac0aaed32982a636ac5dadef2858a4cea989ab3d2724a13ba650a8452449a1efa402a7591f6ca3a5a6b4a8be15b0a463a8e3a95216c1a4a4a82caa8518b9a4a1a829aa821892a487a8eca95b1655a464a8b8a93a1623a436a882a94c13d9a306a85aa9ca0c57a3b4a73ea9b10c03a351a708a9918c9ca2dfa6dea8b992e4a1b6a528a80092d6a0bda49ca62a9414a065a42fa6cb930ca069a427a66d954ea076a45ba6fc9659a081a450a63e9837a064a468a62a9936a065a429a6f79800a0efa22ea53e17dc9b3e202d21a1217528b7301132f6a06095991ca21bb9a1bd9cd7a0c6a25b9a209e20a114a46399109d19a17ba34698849cb5a0e1a2e0957b9c62a05ea28a94e19b0da0cea139946e9bba9f6ca10694a69a209fffa093930e9a829ec2a037938c99039e70a0339429999d9d48a00d94c098619df09fad936e98e79c729f069244988a9cc59ebc911398499c489e3d90d897129cd99dc68ddc970d9c569d688d7c97ab9b499d5a8d4a96f49a899c168400009d1c171e311110a4d8a95aab9b27a9a408ab6aacd32913a48faa31ac052acaa2eda993ab7c2901a4d5a995ab0a2909a531abe3aca22919a66facd5ad042aada6c1ac2fae102ae8a6a9ac1faec429c1a687acdead8429aea66aac97ad2e299ca61fac32adbd28e3a56baba6ac0a288da4fba9bdabe72559a3a2a84caae2235ba39ea726a91c21f5a303a7afa89e1f24a4a5a715a9331d5ba444a8a2a9d61a58a461a8dca9a91919a453a8cea96c18e3a345a8a4a93a167fa31ca887a9511321a3a3a740a9b30cb4a21ea7daa8780c41a293a686a82a0ccaa1eba515a8be0b65a159a55da7168bf4a0eba4aaa6838acca0a5a44ca69d9075a05ea40ca66e9032a01ea4e3a531932ea01da4cfa518932da013a4d4a5fb94e29ffda3cba55e9623a01aa4aea5c097b69dcba195a42397fa0efb12e015808e5f96159b179d0c92819d3ba21fa4bc971b9db9a1cea34297d59cf1a0dda200968b9c9ca054a2d894389c47a0fca1c393109c1ca0c2a19c939f9be19f7aa18293659b8b9f44a15d930d9b159f17a14293aa9a839ec3a05294299a079e85a03094b9997f9d27a0db931599f19c9d9f5d938298869cb89e70912b98619cff9db88fe197219cd99d618d0198269c879d348dab97039c519d408d8b96719bfc9c0c8d0000141d8d1e3e15e8a186a890a9eb254fa3f5a96bab46289ca3cea956ab8e2816a4dda982ab77280aa547aa0eac8128e3a5e1aa70ac78280ea660abc7ac8f283ea6c1ab0bad7d2873a6f3ab27ad44286aa6e8ab20ad1d2800a679abd1ac6e2768a5d8aa6bacc226daa442aa1aacb12587a4c3a991abb22445a438a9edaac72214a4b9a847aa2a21d6a368a8dba9fa1eb2a329a889a9b61ca6a3fda75ba9781993a3b5a733a9211889a391a72ea9f5127fa365a718a98f0c4fa331a7e8a8748c26a3f6a6c2a87b92cea2a1a6a6a8479584a26aa687a823951da22ea658a80095c6a1dca529a8c9946da16aa5d2a79194f6a0e2a416a7339468a06ca441a686931da00fa4afa5dc94a79ff0a37fa5b394449fe6a37ea50996119fd1a384a51096bf9eb2a364a5af94bc9e21a3ffa47a941a9d59a02ca29d902995059ac99b0b8c7c986d9ddb9f458f1a9dc2a0cca222966c9dc0a018a3b198aa9ca4a0d3a28c97689c7ca0b5a28b961e9c3ea038a28795a79bcf9fb3a15795209b559f50a14a94b99ae59edfa0af92669a7c9e90a0cb93299a239e50a08393f799bd9d09a0de916f99409d6a9f81911499d29ce49e3991c898779c689eb78f6998509c4a9e938f8498489cfb9d5d8f3698309cff9d648d0e977e9bab9d9b9135214a253828d6295b282e2a142c292e27299e2c7f2d44303929532cba2d3d32a321da9f9f26d233321fdca85324ad33f9268e23be2ce9345b2bdf2e63308734802a822f10300e33c229d42db22e47312329142dfc2d69303228522c472d7d2e52273d2b712c712c761c0ba570a7172cb2999eaaf7abf02adba599b052b2f22cb425c928aa2907268b28882a902b0a256c2804a943ac2527e02958aa47ae2619f52e832fb02e729e12300930a82f54a096306a30063085a1c630b1302e306ba1ef30bb30323058a1f030c330403081a2e130b330143022a2db2fb52fd02e4ea14e2c722c312cdc9db424952522260296eb8bf8a481a6ac1a6e1e17245d2424180b1d5823a724cd10001cb9224a248690f61b53222b242b93ab1b0d22c523ae94281ba3215423ad95bd1a5321e0227195921a3a21b6224f95481ae52042221095161aa920f721d394d3195e20af219f9577191420482158953019bb1f01211095e018261fc120ae956a18d31e7c207d951618591e342014968417f41d0c20da954017b61d8d1f9895cb164a1dfb1e0296a316061d871e9e951e16a61c0d1eb794fc15621cdf1def93d3154c1caa1d799286150c1c301dfb903c15981bef1c5e8fca14511bbc1c0d8d5814611a301c008da415c11a381c3b0a0f1b49219024062c8f27bd295e2bde2e702664275628da3135244d2352240635a5a760ab2cac333640a8b2ac46adbb36f0a0bca46da51f370b28822a742b24371429962cfe2c5135a128e62bf62ce433b627422b4f2c1332fa2566296f2a0d308f23c623bf24a32c2f9153a96dabfd29e3a1ccac2bae492abca39ead31afdc2a5195d2a684a82f293e200ea4bca58e283f2543aab5ac1c27c02b52a4cfaa07971a2f492dc12b29a452301330042f9ea4c6309930273089a32931e83071304fa38d313f31a03015a3b2313931883092a4f6319931c03041a54e31dc30133081a40b2f732e7b2d0ba49927ba272827ff9e56924ca0d3a01c1b9c162c1eb91f841d4c1bc6213423781aad1bf921b6230e15701b0522af23578b361ba72177235d970f1b6d21fc22b596d81a5c21db22d597d91a3521a0220a962c1ad02040228e95a9199620bd2164964d192f206e2125970a19f31f2721c996ca18961fe920789592184f1fbc2046955718dd1e87200b9523189d1e3920d3941118211e022095947c17bc1d631f55944d17431dc41e1494df16ba1c431e8c932c167f1cd81d3e936c152e1c7e1d01931c15031c3f1de4923015951b2a1dc9925a155c1bed1cab922815271ba31c6c939915911afb1bc19161144119d51a06920b9c849c3514462ca52394262f285930081b759e0619ac32e196a1a077a1a235c5a8cfab64ac4c3730a8dfaafbac11383fa8a1aa55ac9437e617ce2486228b3722214e266c27ed35962152266f278534932043255c279532ed1db221ca226d307b11779f4aa22e2e769d73a8d2a9d92c50a2daabceacf82b0fa311ac2ead3b2bcda11daa87abc729279e2aa9a2aaef28932070a857abcd26502a149c65a8a41fa32e3c2c4729b19c69307b2fe02db7a214319b30862f71a58d31fc30313091a6ec315d31c93079a83832bd31ea3000a8b032e431f23005a82d328a31a5306fa7f3306830412f64a5042b212a0929259e9b18a594818f810f7598e4997c9bfd140f14821d251f718d6a185b20ba21f48cae1905216d22db921a198020bd21af9421195d20b321999549199620d121dd9676199020c7219a965b197320a521a597041940206e212297c418d91f1121a7967b188d1fd12007954b18171f8520b8941118b21e3f206e947b17621e0a2036943e17ed1d9f1ff4932e17a91d4f1fa193ff16501db41e67948916121d651e33945316a91c151efd93f8154e1ca51d84942415111c301d48948e14221baa1cbb920c142e1a121c49929013071aac1b24929513c719611b0391da13241a171c2a91d113bc19671bb48ac3813d93c19558194192891cab205a2f5ba297a371a201332fa39ba61ba6d53558a875aa9aac163868a93bac46add238eaa750a92eab863848a4b5a47ba7d03787a206a31ba41c3696a10aa242a0bf34299f219e689f2d335b9fb5a327a3eb309ea0c3a5fba6552feda166a85ca9ae2dcaa3f7a941ab372caca45faa1eacc52a43a4c0aa2bac9d291ba4c3aa05ac6e285e9fe9a9f0ab6b2629280b9b5ea60822ea2dd12a7a27b29572309d2ebf2c19a44e314f30092f37a6d0310131353013a82a327b31a33055a88432c631fa3098a8103338324f31d9a833335b32453111a99732d131df3073a8a82ee72dec2c17a5c2202220f91fb1986f9c7ca047a1d38d0b95c492918d2d941d102e1d9b1e6798d315301f5f20d79b2d172d1f9220ca9abe17b01fe320339af4187f20cc21b0992f19cd20f3213e9933198220bc21e49830195d2062214b99de181020152100997d18961fbb20a7984018261f7520629801188c1e352024985817451e0220d5961b17f81d8b1f6e96b316771d191f0d967516321d801ebb95d315bc1c191e60957515821c981d1a950d15151c4b1d169455145a1bb61c89931714ab1a671cc4917713161abc1b7691e312f5192d1b1a90ff129419e51ae28fd91258194a1b0d929113bf19e81bf89200802784fe8f8d03599e45a100a1452d20a514a8f7a6e332789f83a8fd20ef347ea31bad66a657365fa9dbacd4aba2374fa544ad45a5ea365ea7ceaa31a51337e6a55fa639a4dc35b6a5cea7c9a7a534d1a4c2a606a83233bfa438a87fa81731e2a48ca881a9c72fe5a45fa97aaabf2d24a51daaa0ab342c16a54faa29ac8d2af1a491aa28ac0e29afa5c2aa30ace7272aa433aae4abe125cd1d6ba605a97a21592c8228612464955a30a42ea52c02a488317530f82e10a70d322d31403092a877329931b53033a9f73228323d318da9933399328c31c4a9c433d032b431bfa9d533d132b23128a96331c330d82f5ea78026d1245022d19f799a489b749bf894c898778c4d142a9745955412d016c598da06aa1ce11cdb99fa10771cc11d079a23144e1dc11e2099fa159e1e0220cd970c17561f84203a9792177a1fa5202c98c417161fa020fa977a17fc1e5d208897ba176a1e132028982217251e981f78980517ff1d6b1f33987b16b31d0e1ffd974c16711dbd1ea197c815291d6b1e44975c15c21c1f1eee961715651ca11da096a4141c1c661d5a9625146a1be11cfa9573139c1a201c9194eb12111aac1b2f935f126019321b099303121f19991a86919611c418151a579158115c18c019ab93b91086168118119000808f0051898b833aa17e9f6b9ee52c93a599a784a672329ba8e6aa73abda3452ab98ae67af8e3579a930acbdadac367aa7d8a891aa02370ca762a403a534374ea834a94fa9c43554a8f5a8dfa98934efa634a80da90f33b8a6eaa8ffa926318ba693a9c8aad52f6da616aa6dabd62d33a663aad5ab7d2ca0a539aaa3ab9f2aa9a528aafbab7a294ea68aaa04ac3c2874a567aabfab7b266fa23aa9daaafc2247274214a7a2d714682f1e2d2a2bb0a39a314e30a82e55a758322a312830c7a8d132c831ca30e1a966336a326031a9aa07340033e7315eab2c3459333432a7ab4f348f332f32a0ab7b337c324a3134aaa12b7e2b5d2a33a55598359ac29bc29b169b3b9ccb9ca39aa8965f0cba0de09ba294411225147d9c669112183d195d9c9505c11b8d1c049c1113d41d1f1f5e9b68143a1eda1fbb9ad614f21d611ffb9949152c1e531fa3997415df1d7a1f339ac415db1d761f3499d415d01d201fa299fd15791df81ea5988715131d841e58982415be1c0e1e0998b714681ca01d80965014281c061d13961314691bb51cb195a513ea1a6c1c2b963c13861a241c02954a12ce19651bb0947c11fa18761a4a93c81021184b19729124107117c6180c90a00fd8164b18c28f750ebc157a176e847f0ec315c2175a0d0080d484278e84839aa0379fb0a1fa2c6ca5d3a712a7ea31f0a676ab95a40d3481a854ae6fac59355bab27af29afc136aeaa43ada4ad2d37a6a87ba972ab033764a8b7a997ab713583a8e3a956aa3634b2a7fda890a9a93277a738a963aa0c3171a7d0a9a7aaaf2f2fa739aaa2abac2dbca61daa9bab5c2c19a6b7a929ab7f2a05a6d1a937ab112972a6f4a935aba12744a6c3a910abe8258ca5b5a9e4aa432453982ea6bca81e1d6e2c302a1626c4a152312030422ed9a7c83262314c3037a93c330332fd3064aadb33cb32ad314eab4b3490333b3206ac7634e133a13229acb634123477323faca8340c348e3240ac9e2f072fbd2d61a8a709fc0d698f189de89d0299229c43996e99a5925994f89b7b9649153d144c9d8d91351b211c669da1856a1c401d259cd710be1d0c1fd49b21137c1ef71f3d9b7c145d1ecb1f929b85142f1e311ffc9ab0140b1e0e1f3f9b54147c1d7a1ef4997a14151d5f1e359a4c14c01cf21d2f99f4132e1c411dd4986713c31bec1c8698c912531b6f1c9b97a212931a341c15980a12461aa81be49773117e19301b249829111d19991acc967a10c218011a309658104b1899191795151012186419e694fc0ff317e7181d94310fb217bd18f393360fcb16ca1863925910cb17da183b940080fc807983798386a0459aa49b032df2a16d976898da3115a3e59e29a04a342ca945acd8acaa350faac6ad94aebf3622aa63ad52ada736e6a72fa906aa8b36a1a70ea7b5a9483507a838a93baa4e349ba7e2a8f5a99832bca761a915aace308ba780a946aa3f2fc8a708aaf2aaa82d80a79faac6ab402cd9a66aaaa0ab542a4ba6f5a924abcf28eca58ea9e3aad42768a54ba9a2aa42265ba5c5a8fca9ee24f2a32ca881a91722f92429195ea2d6931130342eb22c1fa5ed327531643054a9be336a323431abaa32341133bc31ebab8b340634b03275acdb343c340633d2acff345b343033dcac6335a4347333e6ac9d32bd319230cdaa4a1e7a181c9739a2359c8a995b9c5b9ca29af698fd98d69b159977924a94a69cf096a111be0c729c1a949617c217289c9c8e181ada19fb9bd184f91a2e1c619b240b541cc11cca9ab20f631cd71c509a9211ba1c651dcc9a1a12ba1c741da4998412b41c7f1d089ac812611c781da29906134c1c241deb99af12a21b971ca0993612311b581c5399cc11c61ab41b0c997711f519491bc6983811a919d81a7c987510fc18661a9f961710ad18f6192b96890ff4170519d694ea0d9b1636186194ad0d47166817d594ab0a2815e916d093770dd214bc122298790f5b15cd177e950080f08082838283829f0794eb94b02c27a291a06198d1312d9d13a4d62724345ea430ac8da0b13413a558ae4ea19535d3a55cae66a19235cfa7d0ac53a60b3629a881aad1a8f43401a8e7a8e6a9fe33f2a726a9bba95832b3a746a90eaac930dda76ea94baa452f03a8eaa9edaad62d95a7bfa917ab3d2ceda69aa9f7aa092ad0a679a9b1aab3283da64da998aa4427dda50ca997aab825ada5ffa88faad323aba5c0a8b7a967212fa4f1a6dda8f718ee2a3a29f4262ca430321731be2feda92034a032603112ac583469330b32bbacca342b34cd323fad213580346f3389ad57359a348133a4adbd35ff341634f4addf344934de32d5ac5425992490234da4b69d9ba0d9a1ca9a639c919cfb9dbe9b1b9a4895de96779c4f98d60ba493c69c7c954316e20c939c3c929c193c19f19c188b2b1b7e1a3f9c7284591bb41bb49b740aca1b2d1c799b640aea1b6e1c2c9b220ddd1b8a1cb59ad00ecb1b351cf39a4710431b4c1c889afa0ff61a1a1c3d9a1b0f271ab11bd999b50f221a791ac998f10e4819f9196a986b0de4188d191a98310d4e185519e2973f0d161896186d97110d19172018e595470c7e16b1177e95610b4f159e163a953d0b4d15f7154495610c24155416aa957c0acc126812f394ef08da111314458e0080f1801f896a8356a0019a2b9eb42c5aa230a25c9ec33103a560a990a76d3418aaa2aef0af4f35afa80ead63ad16360ea3e1ab69a41e36a4a626a872a42c364fa7ada9aca8e5341aa85da97baaf23317a884a93eaa4f3207a8d9a9d8aaa930c7a796a9f2aa0d2f2aa80eaa1aaba92d13a8e9a94eab292c7fa7e4a911ab2a2ac2a6a6a9c8aa912842a669a993aa7226f3a5fca853aa8924d5a5eba849aadb2209a6fca83eaa5a226aa5b8a8bda948201e973da4fea664928b2fde2d132c5aa71b34c232623113acad34e9339c32ebac133561344d3361ad5f35b434d633e4adb035fc341a340eae183661355f3493ae1f36363529348cae252b782afc2840a6ca9c559e8aa0219d159de89c86a086a0769baa98a49c1ba0379a2012169713a0619863181014ca9f47947b1b521a089ec090481c1e1c379d288e541c481cc99cac84d01b351c359c5204361bbf1bbf9bee03bf1a571b579b5709441ad11a199aef08d3194c1aa299b008fe18481948997208b218f818f8982908f0171c18a898b8077e17d1176e9819074d165f162b987c06eb150016d8972b06dc149e157b96970576141e151e952f051a149f149f94bd0474133914269366040913d9129a919604f011871227905601d90f0c10f18a6c84040c5b0d49840080a50070037083b59f3c139294372c3fa1bb9613986931a9a638a94ba8013486aa0bb01aafce3482a826ae18ad8e3533a6f2adc6a79035c3a5d7aa24a1bb3537a7eca890a8df3428a8b0a9c2a9f53313a822a975aa01329fa78ea972aa803080a7b1a9a9aa2a2f8ca771a9beaa8f2d45a75ba9b1aa2a2ce8a651a9bdaa712acda663a9cfaa2429b0a650a9a2aa432720a6fca834aa3025dda5d0a81baa482363a5a4a8f0a93c2123a59ea8b1a9f21e25a4e4a7fca859184d24821d709cc5a1683230311930e9aa08352d34af32eead4a359d34a833c4aead35f534f73317af063640355b34b5af6c36ac359d34e1afc736db35da3429b07b2fc82e742ddba9bc9cd99b0ea1799f319d449ea3a0d29c439c1e9b639d639dfa9a21928e98e19cd398b811108d619d24960d184e13c99d47945919de17579d9b91ce19c618919d2690df1a561a1e9d6d8d301a861a019d068ac3190e1aa49c94897119ba19649c67898f185419169c018942184f17a49b9688de16b416669acb875b150215d7991387f4149614d798bc86cf13b0128a989e891b128010a697ba89e71153105a977b899e11b0114895fd852410661103957188810fff0eb293db840f0f8b0e3293b387c00c210ebe92ef888a8393846f93118cf18b5a8ae29200809d05a60d7010949d3799a69aa42c30a173a3309e1831979f09a83b275033a4a5e0ae5da812340ca8e2ac94ac203523a56eae6ca95f3538a563ab32a49c3543a6c1a86fa8bb3499a76ba901aaa633a4a7fea84baafa31e3a792a97faa89300fa8afa942aa2a2f26a8aca9aeaa822df2a7cfa9e8aa182c1ca7a3a9bdaa2a2ab7a647a951aa832883a600a908aa622646a6aaa8d5a9a024d0a58ca8dda9652282a535a8c4a9481f99a533a899a9501dada524a848a9ed1a55a47aa7e2a8f297e228f1269822d6a57c34a2332e328eadb835ea34083465af01361e353134d8af5d368935893433b0cb36f335ee34a6b05c375f36493503b1c9320c32bc30c6acc69cbb9cd99da09e8f9c989bd99dd99d779be098f59b6d9d839a2395049a589cfc98a30b8793b59c849603190a16229d3b9575190318729dd993ef18b018799d74928d184118f69c4a923918aa17789cb290ef172d17959c27906d17bd164e9c968fdf1644164f9bef8e71159014d89af78f25141712659a7c8ffa11a111e9993a8f9511550e8a99f48e7e0ffa073c99938e3c0c9187f798178e4b05608db498938dea04068d1e97558da704c78cc596208d6684408f7095ec8c1f84e08e2895a48ce9837e8edf94008d62894e8bea93128d1d8e519002944c900a85018a018d4e991695e294211d51a142a4c4a03b3077a01aa80d267b33b9a53bae66a903343ca857ac5cac1235aba38eacc2a54b3563a56aa8eca07d35c2a524a952a8873418a723a962aa493353a7dda833aac43141a758a946aa463044a761a959aaa32e54a75ca956aae22c0aa704a94daa872bb0a60da96aaad82970a6cca819aa4828f5a5aba8f2a9c326a5a57ba8bea9fb249aa577a8c1a91d23b2a586a8d0a91f2191a546a8aba9172072a50ba85aa9ea1cf3a4afa70ba99d1a9ca2a6a50ca84ca06a2e8a2d242c79aa9235ba34d23322b037367f358034aab0a036ea35cf34d8b0ff36263611352ab1ce37dd369735f5b1d4342c348a32ecaf019cf493889c26a1cd9d4c9e9fa1979e4f9cde993b9e3b9eb59b2895b69bf59d8f9ae10bee939e9db79837183c16ec9d4c97ab1916188b9db7953f19e4182a9db19398198418c49c02920019f418ba9c939104186617519c1392521657153f9b9392b614dd12859a2892ce1008095899ae92670db8886d982f92ca06a48e2698d0914c863191ca9750916a8cee906497c890258c8492fb967990d28be9939796108ffd8d56931d96c78ec28fcb92e894598e1a8f6d936d930e8ec78ef492b1919d8e239097923290998dd2906393f58fdb8c198fc690c690c78f8481c683a9891499ef8bcd91141df8a0a29f9aa2303089a584a890a99b3307a859ad48ac16340da192ad089adb344da366ac8e251c355aa3eeaa4e9a45357ba5f4a720a75534eea7e5a94aabf432c8a7e7a910aba9314ea711aa51ab063064a7b9a93aab352e72a7c7a9eaaace2c51a772a97daa652b7ea60aa90aaac6298fa6dfa8e5a9a4288da6f9a806aa532796a6eba8f0a9d5255ca6b4a8eea9a024d2a57fa887a91f2364a523a813a97920e7a464a7bca8101f66a4d7a667a88f1d51a47aa61da80a1c70a1bca4f1a6759a9b31b630762f1bae7536a43583348cb1c636f435f634dfb13e37533637357ab233384a37d03538b324357a3444339db0ff9c42965f99fd9c9d9d859c009e5a9a8e9cda98b29b4c9a0a9b2892b296079a6499d711308d379cd89779166913409dd696fd172c13159d8d95a718c9157f9d329550186a15249da79477178e14c89c5994bb1526145b9ca3943a14cb10969b6c94a911f1090e9b8394230819907d9aae9491874b92fa9967945e903d9587990a94a591e59518996893ad927997bb98ea927393c79759983b92e3931b9764986a924c935d975d974e92fb934296ff966b919593999699962f9148921e967a955e91de92b6951c950c908492f294f294a591679459958184d3894306350d358d7e98c48bbf94821caca0519c7da0193086a530a966aa15332aa889ac0aad8e33bfa363a45ea3a73439a61fa8f7a6ca3431a736a940aaeb34a9a623a949aa2734e1a6c5a9b9aaa93217a71ea99caa4c3152a7aaa9caaadb2fcca7b4a91babce2da5a7b5a9dfaa8e2c49a76ca991aadc2aeca613a929aa5f29bea6e6a836aa432875a6c3a805aa0b2712a6a0a8e2a92925a4a56ba8a5a9672469a54aa87ca9d522eaa40aa828a913218ba48ba7d5a81e2057a433a79aa86f1d1aa4cda66ea8cf19eca3d4a518a8e516f0a046a25fa4139dd232f5318e3008b034372836f734f9b27d37b636973504b42b385037c73537b408342e33f13112b0709fe39ffaa3f6a0139e2e9bf49f709e0e9df69bd29e1a9e679c1e972e9d909edf99ce14fe93549e2498ef1bb119029e0398ae1bac1ac39dd096501b681a1d9e6b95d11aec19a79d5b94151a4918799da9943b174d14f29c5595480f570a299c789569085690969b4995fe8d9b94409a399517949b96b499bf949a942f984c99b094c995e898e8985a9409961b999e9807940b9745995b989393b29674992598029463961c99c497e293a496d69894962493559683986a950193229653989c93d892f1951598e091c9900f95a1966b90ed8fe693349534957c92041ca51d3c24da1e0325152595a0a715e626f629d82d60911f26b72ca4312711dea0f528a2324b125c28072c3f34289c32249f26d434b5a0d81e1820bb34cca323a423a5ec339aa55aa87da94432aaa6a3a9bbab0731f2a61faac4ab4a2fa0a714aa9eabac2d56a7b8a9e2aa5c2c2ea72ba936aac32acca6bea801aabf2982a68fa88ba95d28e2a54fa83ea9102798a51ba808a9b92564a509a821a94a2444a5d9a704a9632303a57fa7e2a8a121a8a4d5a685a8f71f60a452a64fa86d1e10a4aaa591a7f41c50a311a589a6cd1ca1a109a4a2a53e19cea1e2a069a1f99b0e300e30db2e62ae08374936e73463b48e369035a23448b4592ce72b4b2a18aac29e84a08ba23998b99ecc9d8fa0ee97d79c269c07a13799c99b4f0c0699769ab197631cb01bb09b0895311dfb1c519cbe947b1c181cb99c0c953a1cc51b159dbe940e1b391a609d0195e2182a17609d0c95ac144f11a59c8395c408b0907e9cef9578917796219c89968596af99b19b8d976698b79b7b9aa3978298c79ba09a6a97f798b29b9399f7969e98259b2d993d96fa98ff9a4a9822959e987b9af1974a944c98fb998f960b94e09794991f96cb934e97309905951e937c960199339496935397df98b794029339969c9822949d92fe962e99478e0000f3131518929989a063a145a0322cb49d239d7a212231469c37a8af26743241a50fb0a8aa8733caa542a90ba8a4344aa1f218029ad534cf9fdb18e8991f3512a3b3a072a63634f9a4cca8fda9683276a660aa21ac08313ba7d3aa61ac6b2f13a7a0aa06ac492d92a6c5a956abe92b1fa642a977aa332ab7a57fa8c0a9c5288ca542a877a912284fa524a853a9bd2645a5c9a797a94d268ba5fea763a9ee2463a55da867a928241fa564a8dfa96623f7a44ca8a2a97b226ea43fa7aaa874219da3e4a586a7a620b0a2bca416a69920ffa131a3e7a4c51cfba20da2f8a221109fa0a0a239a44f9d0f9b4d9f36a3bfa3861f4a9a8ca0afa4e0a0e6a096a35ea0039f6ba10da43497419f849f6fa1ff8d7c9c0c9b859de38dda996315a80d3e948a97051d971c1097f392041ff61f3b9a8c8f2f20d920599c598c741f90205a9d8390b21d7d1e5c9d1293231a6219a09d999503163c0b1b9e0798dc887b97079e22981b97aa9c699d2398149a939d8f9c0c98209bd09ddb9ada974f9b889daa990598539b6e9d4b98b5976c9b199d08985e970e9bca9cae969396869a7d9c43969e95f699279ccb953c95c099d19bba940b958099c69b9a93ae940699719b4693b3941699e69abf92b0934a98da999a92a4929b965398958dfa19861ff120979d619f19a221a3ed9c6da2daa8a0a7bc2e439db9a85422e132d7a090ac871ffb32dc9e69ac2a25793485a097ab532aca346ca0c8a7d51926355fa4b3aa02aa41346ba625ab9dac3f325da88aab26ad9e3016a8a3abefac642ea8a793aba4acc92c77a7faaa6dac012bb9a693a921ab612982a5b1a7f1a8b42874a4eea50ea8492867a48da663a8ec271aa54ea846a9b62638a5c5a8d8a91b2625a5e7a835aa302517a5aba820aa2e24c5a458a8a0a9802335a470a7d1a8c82273a344a614a8af224aa290a4f3a58e21a6a022a0e0a158201b9f6899749cf318b99f9e9c1c9e3b9c5ca0a1a117a4849f59a064a41aa6c29a1da1dca4c6a6f10dcc9f35a385a46217999ecea06da2f316e69c0e9d81a053141799c81922974894a794aa1fd21e2e97d491ab218f21e49b2d909e21de21789f7691ed204c21dc9f84935e1e091fa69f2e96111721175d9edd9708900e98159e8198cd96eb9b359ddc98d199189db79c1299a59bbe9d8b9b6599469c3e9ead9a5699849cad9eb99951998c9c7c9e5799f598129ceb9db19821987d9b669d1f98a5970e9bff9ceb973697ea9ad59cee96fb96859a8a9c0d965f965b9a669c2d95da95fe99169c0195b895d499de9b2d9496945f99319b28945a94ad985a9a519100002d1b051c4e9aa59cbda0e4a2ec2bf3a357a91aaa5e3027a402acc5a70d3203a47aac73a4c1321ea1daa96e236934bda4cfad3ca5a13474a5cfacbcaa023500a6c1ac9cacd633a1a771ad85ae913114a81cada0ae113008a87fac9fad9f2de7a739ac3fadf72b77a793abd6ac442970a613aacdabf626c9a49ea6faa70327d1a2989bd39e8e27e1a377a58aa6622724a500a9abaa392661a5b9a981abcc2400a555a971ab0924c4a401a9ddaa4c2291a4b6a875aa112157a46ea884aa05214ca48ba82faaf3208ca2d0a6bda80a21c79f27a05ba41c21cc130f266727391b84990320331f339fbca19ba586a7dd9da2a126a600a8d199e1a02ea571a76796b1a06ea4c3a5eb0cf49efea1e4a45918379d9d9c6c9fcf198b9acc1ae316331a3394562282236419c218d3241b26ce942619dd24c725a99e6c16862373248ba0b68ebe1e191f2ba0b897f2090395449f1c9a389a8d9d709e5f9ba59c0f9f729d829b0c9d349fb59bf59a959dd89fa099bd999b9d01a029994f99439da19fc198ea98109d559f6c988998c99cd89e639744987e9c749ef796f197379cd99dc09506978d9b569d3f956696f69ad39ce894f895b89ace9ce394b595659ace9ce39495952f9aa89c5e952595b0996e9c49957195d899019cfd8a0000611a931a5394aaa39ba9b2ab3a29eba7a8acdfad732dfda9f6b009b2013050aca6b394b4da280dab6bb12bb3042faca9e6aff4b00f346fa966b06fb10133aea830af89b07e3158a85aae0db035306ca8caad9faf3f2e38a83eadc4ae5f2c12a8e4ac15ae232ab0a74caca8ad412855a7d7aa69ac3e249ca1349c849dca25b01967291329062827a414aa0eac7c23a6a4c7a916ac8920e8a4c9a956ab801fdba466a9cdaa541ed4a464a9ddaa731da5a41ca99caaa71950a4eaa868aab2142aa4bca835aa298e95a38fa8f1a9168e3aa337a883a9bc8d1da2e6a749a9538d7da144a7f5a8ec8c73a142a7dba856936aa13fa660a86f93efa088a519a8e895c0a020a528a7890c55a011a46fa50d1a7c9eb7a02fa2511c759c2695bb98121d37128f236522da1cb81dd927d328b815491e4a285c29529a2219052571262aa07c946b1d0d1c84a0019c8499379db39fa49c419df09f9d9d019c979ee6a07b9caa9bd19e05a17f9b0c9b9b9ed8a0e699a09a309e6aa0b998b799aa9d08a051986199769daf9f5c97f898389d5f9f1097d6981d9d289f0c96ad98d09c089ff19537987e9c659ed194f5971a9c9e9d60933b97839b419de792bd96109bfb9c8491af96eb9a959c13901d968a9a609c4f921b951b9a349cf7900000171dcd1e269814a236a801aa2b289fa792adfcae742cb7a8f3af06b1212d4baaecb1bbb3033078aa1fb1fcb2113234aa74b1a1b2d430c9a989b0f3b1e72feba834afbdb0b52edea859ae08b0b92d86a8d8ad37afc12cf5a758ad99ae432b75a7d4ac1fae3829eba65aacb3ad5d2731a625ac4aada52417a41fa9a3aa781c0b9d09a216a4e39864a2b9a5ffa7929c9aa5f3a8dbaa3a9be4a58ea98fab229c17a54ba923ab7b94c5a4f0a8a7aab70da7a4cea840aa840d63a4a8a81caa650d40a461a8b8a9318d03a42ca87ba95c93b6a223a7b6a8969523a0d4a494a63196859c3da215a44694e09d7da323a598975da1e6a400a7839a98a26aa54da7fb9872a11da5f1a69794c5a0a3a434a6ba1412a0c7a313a56718c29d02a08ba1441cdd11d521252273200d22ef2a4a2c301f0022fe2a8b2ce9a0e4176a2451243ca3b99812979899e29fcb9b4c9ebda09c9d9d9c83a0daa23b9cbd9c72a006a36d9bb29c09a0d7a1c699b59b6b9f22a11399d29aee9ef0a06a983c9a7a9ea6a0719793991a9e6fa0ee973199aa9d26a09897d3985c9de59f3b978798ea9c619fec9644988c9ccf9e8d961b983f9c489e8c95c397229cd89dad948797e89b819da2928397d39b499d0e90a596f99ad19c07910796879a689cbd900000e91c8e1e471872a4d5aa6aacff2824a709ad96ae912b18a8b8ae35b0982c5ea740aeb0af752c58a074a7faa8b5274da566aa49ac862999a89fae38b04c2c75a8e7ae4cb0532c32a806aeddaf032c0da870ad0cafcd2ac8a70aad91ae9a29aea7bbac25aef72827a75dacb6ad2228e0a569abbfac83265da3f0a873aaa92450a1f8a52aa85e2009a29da5dfa71b19c5a371a70ca92e9350a470a8bda97f9370a4a1a8f6a9959350a489a8d4a9839322a467a8a2a95c9310a43ba877a93d93a2a30ba84aa9eb9581a3a3a724a9159806a324a7f5a8e09712a261a67ba8c89849a142a552a7169892a0afa45aa667986fa0ada467a65e9878a0a8a46da6629861a099a45ba620995ca089a458a6e7993ca084a471a6fe990ca01da4c1a5f7962b9ee2a2fda40b1ba122d72be52c2d2536269d2e463090a7d19aec9fa9a1789f809d65a1bea3fb9b879d18a122a4ba9b159d10a196a3129a919cb5a0e2a28c988c9c80a055a28596169c22a0baa104968f9baa9f4ea1b095bd9aff9ee3a05a95419a5d9ea2a01395a299e49d55a097951b99889d1ca06b95c098509dbc9f37958a98e79c5a9f12954e98929cdd9e339412984c9c5f9efc93b1970d9cf39d7792c297da9b679dec906c97669b229dcd904a96309bf09c1b840000771c1e1e2a118fa531aaecabc22630a508ac28adaa28fda459ac69ad9429d9a45dac8dadff29d6a4e3ab17ad74296ea5f9ab48ad63295ba6c6ac1bae9c291ba728adb0ae7f2929a71dad9eae2e29f6a6cfac3faec128c5a68bacd4ad3f28b5a644ac66adae2738a6beabdcac7b2635a59eaa2eac072525a470a9fbaa3d238ea358a8c7a9d62078a382a7e0a8061e50a32fa7c3a8ec1ba7a3faa73ca9481801a44ca8a5a96013d5a33da8a3a9e98ca3a31ba87ba9429337a3d2a742a9e295a2a239a7eea8989517a2a2a689a83895b4a131a625a8d79448a187a59ca75096f9a025a5f3a6da95a3a0c5a46ca67e958aa092a43aa6539555a05ba40ba6a5965ea047a4f5a58c9665a036a4d0a5ee9757a02aa4daa5fc9716a02ba4e3a5ad98a7a026a4c7a58c999099179ed7a1079800007b0d830f1c8d379a989e7ea07594d69d80a237a49c98eb9c97a192a3ad98af9c08a1faa2f9975a9c91a046a28c97259c49a0e2a17a96099c20a0a7a17f95cb9be89f77a16995749b999f4da15b95349b289f23a14a95da9aa09ed3a0f8956e9a339eada0b296fd99d09d78a0899666995c9d57a07c96c898ca9ca99f2a955d987d9c699eaa930a98359cf49d069206982b9c879dae909f97099c519d5a8fbe96649bdc9c909200001a1d641e0c0aaba2fba82caafd24fda3e5aa49ac0a28b9a4dbaa6aac4628b2a437ab8eac872870a5b5abe7acbf2821a613ac36ad652864a623ac5fadf9275ca628ac64ad762781a635ac6eade12655a617ac45ad7f26f6a5b6abf3acbf2563a513ab90acb724e0a47eaa3bac34248ca4eba9b7ab99224ea464a91babf82019a4fda89baac21fd8a390a80faa781ca9a344a8a8a97e1885a307a862a9551360a3a5a72aa9b08c57a36ca708a9b5955ca33aa7eea8d5973ca30aa7d0a8ea9812a3caa6a6a8ce99cba278a687a8ad9a87a23ca655a87b9a12a2dda52ca83d9aaea196a5daa70b993aa120a56ca7c598aba099a4a2a6539825a035a4f1a5dd97ca9ffda383a56897b19feba385a56a97799ff3a38ea56998679ff3a393a57d97f19ec5a35ca56e97849ec7a2a8a47495229c609e57a00594f7942f9a349c7590189a229f09a1ff932f9d19a132a378971a9dc6a0dca2b098a59cb3a0c8a24398709c95a0aaa22f98129c4aa038a23b979d9bcb9fb0a12696149b449f21a1c195de9ada9ed0a0c494859a799e80a08c94399a129e3ca00895db99b89dfa9fd6946599399d609fe993f498d99ce59e8c93a998879c639e0b925498539c2f9efb9168984b9c029ec19009982e9cf09dce90e696be9b7f9d6f910080aca2a7a4341e3b27bf2a662ce02a042a492ed22ff02ed61b4aa9c420dd30639e61a972a050242b95eaa4439d10a2339e54ab88a40aa860208aac0d255520e32a862fe4302a33742a8e2f3e30bc318c294f2d342e762f96286e2c652d942d7f277a2b4e2ccd2a67250f28f42896286ba05badd6aec528fba8f7b2bfb46d29ed284d2a292ad0221c2c8f2cfc2c5b22be2849af74b1c2206e2e9d2b5a282aa3e52f03300d3058a458307b302d309fa5b63089304930cfa4e830b630423050a50831f5307030f8a52e310731753083a6433110316730eda61131c830353031a70e30ff2f112ff0a5252c0c2cec2b35a2d81e439ba8a0d49e7e1a1a21a92158136a1c1d23f324e690391c85223a24b096e01b43220d248898711bb0217a23d398f71a6c2116232f997a1a3121b7226d98891a1b2192225598211ad12039221a98011a9b20cd21d297a319302082216d976e19ff1f3521059727198a1fd1208797a318ee1e972002985518931e5b20ca97d717251e182025987b17c41de51ffe970c17841d571f9c976e16221df81e3a978b16fe1c731edb964516b21c361efa950516661cde1d2f95d515281c9b1d5e947f15cc1b151d0c931c15781bb71ca690e114371bab1c7c9059147e1a421c71905015851a321c028a008047a59aa6141f3b2122233425d92c3228962a222b3930eca7beac13ae9a2e8ba531a769a71ca04ba4cca470a37c9e83a478a6f6a6f626b6a753ac80ac6435ac28be2bfa2cf43664284e2b5f2c53344128a72b822ce331b2262c2a5c2b7a2fbd24f2276b28c92b5e1d63a2a2a5fb28aaa102ad59ae8d280da470ae33b0a1285c20a7a6bea83527df28c01577a338261f2ce9a451ab0e1e592e44277fa22da40e30622e232d0ba584302e30862f71a5db306e30a72f31a40631ad301d303ca471313f31793004a575311a317d3025a6de317331fe3097a7fb318331a93007a8993122314d3044a8312ea32de42cbca4122142151b99159002882b0dab8e401e1d1a052195228319bc1a902126230512c11a95211e238594ed1a6a213723e99ae31a5121ec228a99d81a4a21cf224e99c01a28218b22f8981b1ab9201822839895197e20b12137983919182041218698ef18be1ffe204c98bd186b1fc6201c988e18261f9d20f1975018b91e4c20b2961518741e17205f96ef17011ec61f0f969f17a11d2a1fbb9519173f1daa1e3596b116d31c5f1ef0950216871cf91db8959115311c711d5d952e15d71b181d90941a155a1bf31c6f944715751bd81c56945d15231bb31c3594a814cb1ac91cc5913914d019e31b9c94fe8dbfa5eba5ad1daa9c089d0a9ee82c2a1f1a200d245b3085a818ac45ade73309a860a8daa80725cda696a6eda5e71f2aa962aa64ab14288fac3dafcaaf9735bf1e952568287a37811c2f231621083501200525eb25a832921e55228e2362304c18289666976f2d469a16a623a82f2bd4a146ab93acbf2957a472ac6eadf0285ba0e1aa59ac4228132211a8b3aa82267f2a3ca1a9a9df213f2ee828251d01a243304d2ed72c5ba5cd3011307f2e67a63f31a030f02fefa65b31b730c52f2da8ec313b316530dba8ec3142315c300ea9a532c131ed305fa98432be31f53076a98e32a731ba3036a9aa3005307b2e2ca68a2695246e22d39b759a01a041a1ba0e4690ff16f6194c0dca16481f6820dc0c0d19d420c621828c14197a20bc218e96d3182b207d21309736196920a321f79861198920c5217f9958196f209a21dc990a193c205c217099c418d11ffb200e997218401fba20a8983718001f70205f9805189d1e342025985e174c1e0220e6971917d51d921f7697e1168e1d401f2597b3163c1da81ec1967c16fa1c551e6d962216981cfe1d15969315621c8b1dcc951215bf1b161d7d958e14081b8b1c7894ee13281af91b32949e130b1a8c1b22939d13c319341b11930714021a1b1c2d94c513d019b81bf691008038963a99c7040f93d4961498f82c94a465a874a8c23045a6bcacc1a91f3417a566a648a669299aa435a472a45e264ea80ea95aaabf2cd1abdbaeecae503581a38fa2f29c2f3728a47fa6f7a5bd3450a1d2a1dca2f23223a089a2d7a3b030eea003a635a7202e1ca21da869a9382c30a479aaeaab4b2aa7a450ab7bacc4283ba424ab86ac7427ea9f33aa0aac2925c32636a439a9bd1fc72da2294524c49f19306a2d512b24a5b430352f6d2dffa743315630262fe3a88531d4300d3066a9e331483176309ca94532a431d830e5a9ba32e631253131aaf3322c324d3115aa2a334d325a31f4a94a326e316a30e5a81e2b702a1129d7a1f6997ea0a6a1b20ece99d69cca9ce50d56866c1a6f1d6596e7142c1e1420db9b0c16a41e6020f49b2b17951fb4203c9b9e1856205a218d9a14199520e221c89a491972209f21449afb181d203921819ac918ec1fea20209a64182c1f9520b5992b18c91e50206099d5176a1e102010991e17251ebd1f5098e116e31d501f14988c166c1df31ebf975816261d6a1e6497c015b91c171e05977e15801c9d1d7c970815131c491d4e966514321bad1c1a951d14851a311c1d945613031ab91be0933013f919971b8c9250139f195c1b59920713a619671b30946d13f018481a6295e2957194d6924b8527998b9eafa0ec1ef7a58da82aaacc2fcea34eadf4a4953096a03ea93da48423d5a2e1a4a6a351229fa207ac43a610274da9c8b0beac593470a77daca7aa94360ea61caa86a9ba34efa579a76ba8b6324ba50ea8dda8a6305ba5c1a8b3a9512e1ca527a99daa292c7da53faaacab1a2ab4a563ab86ac7028b8a570ab8cacf226fca4feaa52ace42477160ca870aaa020922b3826ac15419cd72f4a2dd12ad8a5e7305b2f8a2d51a86e316230f32e60a9da31f930283065aa403275319430efaaa532e731f93038ab413357325d3180ab9833a7329a3178abdd33d032ac313aaba4338d325a31d2aa6f2ece2dc82c18a6a414b68d010f6098ac9b629b9d9a2599b198c29a829b829b08905819c7192c9c150f0d1c341d1b9cc112ea1c531e079be6154d1e0c20909a3517ea1e7420f0993217331f6f20a8993c170e1f6d206b996017a31e4d20bc990e174c1ee91fe599e416081e681f8599d016b11d441f369951166d1df51efd98e9152e1da41ec398ac15eb1c531e89983915ad1cce1d5398e714501c931d97989114151c221d679816145d1bdc1c2a985513921a281cb896e7121d1ab01be8945f1257190a1b1194921112196b1ac3931211bb18321a579296119218011a65949610e916e218b293a88d0f8988898889849d059b5e9b231eb4a652a8a1a71c2ff0a808adf8acbf32a4aa6cab2dac4c26c9a44ea78aa7a5209caab5accaad092b95ab66ae83af873510a513a209a341378fa824aa65abf334b9a744a927aa8f3271a750a95aaa7d30faa6cea904ab6a2e90a68baafcab6d2c55a680aafaabcf2ae7a5a0aa13ac0729f1a5a7aa3aacaf2730a66daa1cac7a25a8a3bca9faaa67230225669f48a6c914412e392ca829bea40331872fd62dc9a8b5316c30e72edda91b321b31093006ab9132a3319230baab25333f321e313aacb833c032953199ac08340b33f231c7ac313450332032b2ac76348d335632b2ac063160303f2f7ba9521ed71cd01c909e069c3f9c349e919a9e986f929d8d8f9c9495200c19141f9de790651637181e9d9f85ed1ae71b019d16126d1d701e889c8814251ecd1f3c9cd114f31d561f899b4815df1d3f1f109b8015df1d661fdb9ac215d41d0c1f889ae3157d1d011fd89a94155a1dc91e559a7815f21c531e57990c159c1ceb1d869991144e1c851da9983314d11bf01c5d9800145f1ba91c1e989513ea1a6c1cd097c112431a2b1c5d972a12ce19871b3e968a11f2188a1a0895c1101c183b19c5930e105e17bb184f92df0e701654182592340fcf15ac17f58f470f4f164e1872845791d28d368d5182229d089b289b2b1d45a6a1a6ada8252d12a89faf74abb7306da3ddaa7ca548263ca002a6a4a481228ca95bad23ad7f2b13ad43b2ebb0133573a863a8dbacc9363fa8a2aa0fab8434faa767a95baafa3181a778a913aa6c3041a7f6a9cdaa372e21a750aa45ab772cbfa631aaa3ab262a25a61daa43ab8f28fca5eea94eab87264fa603aa50abe024e4a5e5a9f5aac62101a36fa8c8a92b1a3b2a78262f1ecea29f30112fff2cb6a8e1319130502f6faa613256314d30edabf132f631cb305cac80337432563185ac1b341933cb31e2ac5b349e33493216ad7f34cc33543228adc3342634c73241ad33336032203115acc7246024ea22e4a1049d509ad09c4b9e6d9ae0980e974a9d07981c0c740d7a9ecd922419ac1ac39d228cd51b061d069d360c431dc61ec49c2312001e5c1f829ca713f61d351f269c9913cd1d181f429c1614ae1dff1ef19b4f142f1d611eee9b0c14121df31d669b3514a51c841d439aed13081c181dc8997413851bc61c6b99ce12201b521cb198e911591a101c69987111151a531ba9985e116819e51a6398a3100c19561a08986510ae187819b5963f1038187e19539604108d17ef186995180fd117c2183895290f20174c187294850eb516bc187693f50fd01774199892e88eed86068206824b99a78dda8dc11c9d9e091e2d22b72d74a802ab77abb332a8a8efa9aeaa6a2856a25ba6e1a5cf22c1a87fac3aacd5291bac9eb2e6af4e345ca763ad78a51636c0a754aa36a976347ea7d3a8caa9dd316ca7eaa8ffa91b30b8a7a7a975aaae2daea760aa5aab122c53a79aaab0abe629a1a634aa99ab5e286fa61caa3bab3326fba5a6a9f2aa2d25b0a54da995aa39246ba51da915aa3f21330f01a4a4a6df93e42d772cdc29a7a6be319830212fa8aac7326c3163303dac6e332d320931b0ace833cc32823142ad50348b334932bbada9341434bc32f9add4343b3401330fae2a35803464332baea234d3336a32acad5d285426b82368a5989c2d9d6d9eac9db39be99a3e9ae59d2c993495de96d79dc097600b750cbc9c3e947c1786171b9dd8900c1ad51afe9ccf84ea1a1a1c969cde0adb1bb71c449c990f5b1ccb1ceb9b8410631c3d1d139c1b11a61c461da49b75125b1c551d3a9bfb114f1c531d6c9b5e12071c071d029b1c12911b7c1ca89aa811b91a3b1c479a55115c1a021cf299f910ec19241b289ab3104019bb1a56996510e518541a959803107e18581986974e0e74179b18cc95670d3616c51749958a0c1016201744950d0c1f155e170395340bec138314b695240d8d13ea155a95e38eb78975862782e899700dbe8d621db9a11c1811998a2d70a180ace59a8a2f949eb9a94a9f48200190eda44308201a3c0ccdaaf395b421469eebb1501a053270a26cb055a5ab3576a5afaa3da8303400a828a924aac73112a84ca980aa1930e1a79fa981aa7f2d20a8eba9d7aa022cbba713aa32abca290aa7bda91eabe827b3a68ba9ccaa7f2542a648a98baa0224cca54aa9adaa8d22e3a507a944aa032113a58da83ba9451cc923ec1dbf9c39a19730472f722de5a91133d931a230c9acd5337732343176ad19340f33a531e7ad9434ee33723264aef33453341b33bbae25358c346f332aaf6835db34003469af8b35e7341f345caf302ca42b3e2ad3a78a9d8a9faca05a9e949cfa9cd09d219d2c9a2b95b496079d8c98a58b50932e9dd0964911b38c949d8b939f18f017639d018e4c1a581a209d5484a41aba1bc59c4304bb1b221c019d4a0aa81b411ca89c010d871b611c619c9f0e0d1b2b1c889c790e341bfb1b569cc10ff11a2b1c2b9cd30e0a1a071b079b0a0e8e193e1a3e9a7f0d1719c1194199670d67186719ef985a0d39184319ce98560c701796189698b50be116481706981f0ca715dc16dc96c60ad6142916e396520b8d1569162a97560b6315d6168e973a0ad413c11273966a09cc12c7133090248f4187d086d086a59b1a946394c01c57a106a1fc98132ee5a60aad6ba95c328ba72aaadca95f2674a127a64ca5662168a17aac3da6b527de1a64b051255033c5a148ab0d9c413572a629a9aba6df3364a71ea923aaa031a7a788a9dcaa2130cca7cfa93cab972d21a811aa17ab792b1fa8eaa9ebaa3b29dea7c6a9c1aae826c8a681a9e0aac5241ba645a963aac722c2a517a968aa5a20bca503a90daa651e06a6efa81faa4b1c0ea5ada773a80e9288290027bc21ffa55e3216310130c4ac0734a6326131dcad6e347f33303259aedd343234e032d2ae3335873485335baf7535d434e733d9afc3352235493442b01d364e35703469b0f42e242ed02cbba9559d119eb99e849f479da59b1da0e6a1689b3a97b99b17a1c999100cfe96b8a04d98bb16660d8ea02a94731a351a9e9fad903b1c071cb69e0f8ec81b3a1cb89deb8aac1b251c049d4084321bb61bab9ce883bf1a511b6e9c8f03b019d01a1f9c40034219431aec9a13037b183d19799ae50237185718149aae02dc171318b4999107a816b716f199ee063e164f16959968062f15f015cb981006da1491157f9882056a1405155697200509147f14e195b1045c122014c3945004f312c012fa934804f6106f126f927401b90f3811899386817c0f990479931b91d6829f039f830c9b128f8f8f241e9ea013181e19eb2dcda70cad1ba9d0309da723ab3baa4726a59f76a60fa5e120cea262ac36a76d26c9a0a8b148a347328ea40faefe9b6e3578a759aac9a8d2337ea831a954aa4c31b1a78fa96daabc2f17a780a96aaab12d4ea778a95baa162c0fa76aa9bdaac029b2a666a9d2aa1728cda672a997aae325aba658a964aa852349a607a90baa0521dca5e8a802aa1e1e58a591a8c5a9ab1d12a572a858a98018f9a178a647a8199d472d3e2c3d2a7fa8d93377323e31f2ad9d34ce334d3279af0f354f341f330bb065359b34a5333fb0b735f6342134adb018366f356d34fcb080369d35c43434b1df304230342f59acea9cb19b689e689ee39d239faca09c9de69c1d9aa79c169edb9afb9172967b9d22999411ea8cd69dcd96e217d715b89ee1946618a217459ec392ae19ab187c9e1490091a4619799e2f8d161a8b192f9edd8cb0193419ce9d978979190319969d5b899918a718319d0e897e175917829c9988ee157515179cde874715ec14d79a038a1f141213509aa9894d12a212ec99b1890b127f102c998f899810591000993d895c101710c597cc8815109b0f77966a88510d250cdf950d880e0ddf0b9495a887ba09f004dd95548a92839d840e96d88af48b518d85940f948c08d609dd8c739c4595848f1c1ec9a00ea312193b2d599388ad9720b22ef59e01ab00a33e22a49d55a69ea4c11e32a057ac01a542254ca0b6b09319d63141a211add8212d35bba596a9a9a8cc33d8a691a8a1a94b3180a718a9d7a9d32f93a771a9eba99c2dafa764a951aa0f2caaa790a992aaee2928a777a976aa2a28c5a625a92aaa082683a6e3a8dfa9132423a685a8a1a9db20baa55fa865a9ec1d9ca53fa833a9b6184da505a835a90f12d0a421a896a9669899a079a58da8cfa10330872ef02cccabb2340c347f321db048358834943398b08e35c734e133ccb0e83523353e345bb14e3698359234e0b111371236353558b23d318830662f77ad789d999c8b9e509ff69beb97b59a559e1d9b5d95f9980a9ed59a2797fa99a59dc299a58b6193d89d73970c1807180a9e39958f18f018509e80942418ff16c09d829384181d18b79d039237188b17a89d9b91f0171d17559d10914916b316069d9c90ca15d014a49ce58e62157f14569cce8f1c1402120e9c488feb11b00ef79a068fe90f31088c9ace8e7c0ce487a99a728ea0058187dd99268e4505578d90999d8de304f48c55986f8db384bf8c84970d8e72844e8f3696c38d2784ed8ee395ac8ced83728e2096148c57892c8b1595f88a3c895e8e9e98f0880c81de82de82f996cf9145930f167ea0f9a20c99342d419c03ae271aba2e909d79ab6da26d22b49db3a60ca50d201aa36cada6a8cc26faa691b023ab603270a67dac7cad113504a754a9dca952330aa7f6a8a2aa3e31d6a6ffa8c2a9b72f9ba633a916aa662db4a6daa802aab92bc9a6dda805aab62992a626a922aa6c283ba6e0a8eba99326cfa587a8bda973248ca54ea87ea97622a9a552a88ba9871f96a572a87ca9fa1b76a53ea85ca9051288a537a830a93898a0a48ca7b2a8e997e09ed4a325a650a200311e30542e4aad523597348c330db1bc3506352234a8b129366a356f34f9b1c136f335d43497b2593777366235cab35530e52fcb2e8dac379d149c529c84a02f9eae9d98a03aa01c9ca898519d729f499b0695209ad49f529ac711bf936c9f93982b186b13ba9f3797cd18df15579f8b952e199417c49e6c94ca18ff16409e149455180118909dbf92c516b7151b9d1d9346164715b69c749238130e10399ce492c210ff082f9b99921c07aa88209a1e92b1868f8ebd99cb913b862091629945915c8cc8921699c590ce8e6392ca986e90658eb99313980f901b9021938697a08f9a8fa69247966b8f88906493b695128f5c90fe92c594db8e2091b692b692768ee79088935894b88e7190d091c29098899000f602670bc596c1913d933d13bea0c297f518bb2d78a8a9ac34aefb3013a893abb7ab8825bf98f6a63ca1501d0ea3b2acffa65b2486a834b20baffa316fa51fadf5aa0b3578a63eabf9a8363350a7e3a9d3aafe30f2a6b4a9c9aa1d2fc8a685a990aa282dd4a642a990aa932bbda642a939aa9e294da6dfa8c9a92c2825a6b5a8a6a9472640a6d4a8d2a9fd2452a6c4a8bda95c2342a68ca880a93321d5a557a852a9b91e82a508a8f4a82c18dda436a797a8271168a4dda63ea8f010c1a35aa6f5a7a190c5a041a433a6729d4e316830d02e75aef3350735023461b264366c357434f5b225372436f934c1b3ad36ee35db341eb4052cff2ba82a75aa299e529e769f9f9c089f1c996b9df39b1e9c3295c2986b9cf89a0e929196ec9cd499c3110f0d029eb89894144e13659e7897e5171013c59e33967617a2150b9fda95e8163e158d9e969415167914979dc594b615f410299da8943d14560af39cd794b50edf89979c79940c080990349ca594928d5594bd9b54944b904f96989ae8932393e396189adc9306945797a099d9926d94ab97a499cb920294dc972c998a923c945197d09836920294e6962d98e2914b947b96d8979b9133931496b896c790c193ba9554968d9085920a95d2967f9172943496ae938509670cb71168820c967891fe92aa0ccea18320a2187d2c88a866ad01ae192f3fa789aa6aab9222de97c7a202a0cd19e89d50a694a03222c7a76dad99acc93172a76babf0ac1a358ea5a6a9caa9ee32c6a68ba9eaaad430dfa65ca959aadc2e31a780a97aaad02cf6a638a985aa282bc7a608a947aa67297ea6eaa8e8a9122843a6bda8fea91e260ba69ea8d7a95a24c3a584a888a919236ca552a84ea904210fa509a820a9ea1fb2a48fa7cba80e1e60a443a779a8651c26a49aa63fa82717d1a34ca60fa8d69637a364a55ca7aa96c2a1c6a1f6a2a49c242dc02c072b7aac493586344e33d0b27d36a43590347eb49a332133a031d5b19d1ce621551e7ba58e9da29d41a01b9d769f6d9b8a9d479e039dd29bd49e1c9ef09b0395739c2f9f5b99bb163b8d859f7c98fb1a92191e9f5798b71a891a6e9f5397491a2b1a929fca951319a618f99e4f95b217ae14ca9e1a957a14d00a999edd95220fad90a69d6195510825932e9d3995e8909394699c2595059489966e9b13955c951a98d59abd94ae95cb98ce995794a496f79870995194e5969c9929990d94a6966699f898eb93e6967a99aa98e9939596ce980998c39336967a98ce963793079647982295f792df9509983294fa9008959396a291f98f5494d0956d960000d51a281c781d221b4e2748267d24cf1bbb2b192c972b23a0a2aa87995b2d11a013abb7a1a1220e82b99f490a851c308ad6a2951f8524781ee69da029cf30a19b40195628ae3446a18c9dbea1ad32a1a43ba8dda8933071a682a9ffaa7f2e2ba797a9fdaa842c20a77ca992aa432adfa6ffa841aadd288fa6c2a8c3a9f0273ea665a850a9e725bca534a817a98d2448a5b4a7b9a8a3231ba592a7a3a8ae21e6a405a776a8b21fb1a489a62ca8e41d5ca40ca6d2a74b1c1ea4c5a574a7d8194ea346a5cfa6ac16d4a2e5a492a64b103da287a426a6539bd1a12ea49aa57a9ede9fe29beca070a196228e21251ff4a8eb12a098b19d45a4bc9db09fc7a2089cf09e9f9ea2a0728e279d279b609d749ae29c0e9ca19ffe9bbf9b6412a88d4e9d9f97611c781cd99dae95ae1cf21c439e6595751c121c949eae957c1b831acf9e5e95211af718e59e2d968916f214ad9e9b96b90f1a91be9d4696d78ec396729d2496bf94af97109dc1965e97379abe9caf97be980e9c5a9c5e974c99139c969b2d97ea98839bfe9a0697ed98749b7e9a1796ef98df9a8b995f958c985d9a229996943498ce99de976a94be9760994897fe93aa9704992696a593e096d5984c9595934397b8982d95b592229627989d94b9920e9681976791000000004e0f9986e89ff0a48ea47926b69ccb974124ed2da2911bae57236c2e489eafa8bfa20c20da9d30a4eda2651d449e9aa5a7a19a232b980dac482293311e920ba3bf283b35eca057a54a9f3733e1a48ba8a5a9cc307fa613aab9abb02e05a729aab8ab552c81a6baa936ab142af5a551a975aa9d2864a55fa884a99e2654a517a800a9592539a5bca7bda8a1248aa56fa7c0a8af2375a542a7aca83b22f0a4fca676a80d21a9a4e6a677a8392050a4d1a69ea8e31ef1a304a6baa7401de0a2a8a4eaa5b41b4da2c6a3f5a45c1913a2b1a32ca54e9968a2a3a31aa573a05ba1a2a33fa526a027a086a355a51c9f789fa9a2f7a40e9978a123a376a45f94ef9f7ba10aa39194709d379e10a03d94039c8997db9b25976999ce18ec18ec98c2968a1df21d4b9afd92f21ef21f7e9c48913b1f20209c9d3492c51de61e4d9e9394de1aff1aba9e13956816d011069f2097fa0f6091f29eaa9871954e99bc9ebb9810994c9d079e6b98ca9aa89d029d62985e9bed9d319c1598a39bc39db39ae497b79b639dc3996e97629b139df5983797609bc99cad987496d19a809c65989c95ef99229c4e9764958e99d79b33962b953e99679bdb95b994bb98109bed94a394c5986c9a14958293f9976899f8948b93ca96ca98aa8f00000e1c5c1ee39018893c1c2f185b24eb9e1fa636a4de2de29d62aef7a4da2d58922baa7c0d751c479135a5b6967e15ba9b3bacdba0db200b9835b0ba261f31699850acaca76135b9a421a95daa333377a749aa09ac8730e0a67babafac462e54a7bfabc2ac2c2c87a734ab71ac2c299da62eaadcab3c2786a53ea8a5a97c262fa445a535a7d02517a4ada5cea67d25c3a40ca781a80125f2a4bda7bfa8a824c5a4bda7eda8f3236fa416a78ca8b322cca337a6c2a76322b9a2a1a405a69421aaa158a274a44f20fda0519e2ba0c81b8b9f04985e9b5e9b12a0a99da7a125a2bba04ba299a49ba12aa194a469a64e9efaa0b1a4faa6e59d98a050a4dda578940a9fbaa22ca44214109e34a0e7a12817149c8c97889fbd8dd397151d3a170f99f291f5208820fa9be091b321f221d89ee9915621d421c5a057946020d220d2a0f1945e1c9f1d96a0f0969313e4110da061989094c698299fb29877982f9c2e9efa98b39a9d9d419d3599369c3d9e519c4299ab9c729ebd9b2999b39c8d9eaf9ad298919c629e429a7398419cd19d7d9904987e9b579dda987e97089b1f9da8983b97db9abd9c1d981197659a729c52976b96389a539c71963296e299089c9895d895059ad99b7295ac944e99399b75956f94a0980e9a62970000011a231c7212249fc0a40da6e82943a45caaedab9a2dd5a03ead85a8bc2dc48f3ba626149b1b4889b0a1708f9415209afaaa47a04921ae9aa6b0d0185631169b80ac9c1a52353aa59cac9eac11333ba776ac48ae34304fa76bac99ad712df0a72dac4eadc62a44a7deabe0ac3628a5a65aab94acde24daa581a988aacb233ba4a39bdd9ea8248da24b9bb69c6b2545a416a519a6ad2563a423a823a96b2567a484a87baa8b2480a472a8a7aa33234aa408a8efa9bd2260a3cda669a8702274a37aa383a41c22c99baf21f923c9205615b1265828ad913ba0019e6e9e8ea119a4aaa562a74a9f8ca2b7a68ca8589bb0a1efa5efa77d983aa1efa453a85e9c3fa05ea3f9a4370d039e729f43a177185e9c0797a298a2184797951ff51e531727140c24e1245f0eba1809255f26489b4818a524aa2508a00911d5219f22eca06a95a2191a1965a02599ff942d9ad79f8a9a0e9cc39ea39f2a9bda9c419f149e849b2b9d519fb79cdf9ab99d01a0489bb199f09d28a0d19a42999a9dfa9fd399c898399da19f6699b998fd9c1f9f0a998098b69c779e4f981298459c0b9e4a974697d69b519d9f969996279bfa9c33964596b09afa9cda96d095529abb9c1896f395259a8f9cdf95e4949199d19c21986495f399259cd28d00005017db1765835ba4aeaaa1ac2128bba79ead19af022b45acfcb3deb4032915adadb4beb521a6b2ac28b443b558aaecaa0cb25bb33523feab0fb356b46f2f50aa49b183b2ed3118a9a2afb6b00531cfa86fae28b0062e32a881ad31afa52b1ca8ecac1baedd288ba761ac90ad1a2609a806ac46adcf219ea52faa98ac6f1f1ca4e2a617a9432076a307a7dfa8911d9fa4caa90aac841689a4d7a994ab688f24a445a9deaaf594bda46da9e1aa44985fa41aa992aa9e9902a4e7a877aa72998ba3a6a80caa9e9705a36ea8cfa90c8eb8a216a84ca9229409a2d8a731a9d9938fa14ea7daa8059697a107a792a8f1953fa102a616a8e4951ea19da5eba7ec9590a0f5a4a6a6d8154d9fa2a265a4521cfc9c7d9d079f321d5c9a151ee71ca81de31728269425461cc51e61289329c1955f1d7527dd286e9fe7145923b124b4a167986714978c4fa1f49bd39b139e2aa0599c149e51a06e9e9a9be69e26a1659d2d9be19e3fa1b79ccb9a689eeca0059c899aeb9d48a0079ac699859d0ca0199983996f9d9d9fee985a993b9da29fcf9820991e9d6c9f45981c99c79ced9e6a977898519c3b9e24960398089c819dee9457976e9b069d4195e396039bc19c8794d496df9a829c7293d695469a349c69932995cf99149c309300000000a615220b90a0a9a6e8a898248aa787ae23b06e2922aa6db110b3d12bf8ab3fb3b3b4572c47ab04b2b4b3ce2ca7ab46b21fb4b12f58ac98b3c3b46e2f19aae8b08fb29a2e26a91dafa8b0652d89a821ae95af0e2cc4a775adbeae2b2a28a7e3ac1bae4228aca666aca9ad17254da61eac5badfa2278a513ab7eac6d1eeca0bca63aa8788d7e9e45a3faa4349ba2a2f2a512a8739cd2a42ca800aa969e5fa5fba8dbaab99ea8a4c2a864aaae9dbea4aea821aa479c77a44da8c1a9e49a2ba4a9a706a9459a25a254a62aa89899d99f61a4c6a55798059ebda23fa40d9827a080a4b4a63c9ad1a09ba556a83e9c68a2afa5e6a70a9c4ca299a589a7459a7ca119a5aea66f8bdea06fa4aea5b2160a9f0ba2fea39519e29a3295c9982e1f1d1ddb27ed28842148230b2c312d951156205629b42a5fa48692ca1dd11c7ca25c9b639d8c9f8c9f919c4fa063a21c9ee29cc2a0dba2cb9c8e9c81a0c9a2369c299c0da0cba15d9b829b919f38a1239abe9a049ff1a05999259a6e9ea3a005998a990d9e6aa0c7982199999d22a0fb98d598299ddf9fbe989298dd9c539f869850987c9cbe9edb971998519c3a9e2596ac971c9c0b9ef7954e97db9bba9d95942d97bb9b5b9da1933a96f69ae39c5d93eb95be9ad89cd7910000351d811e1c13a2a41bab8dacf82513a7c8ad77afe828afa83bb055b11c2b54a9efb01db26a2ce6a4c9ac50ae502973a250a98cabe826a0a807af98b06b2a34a922b051b16d2b73a8e5ae79b0e62a28a8f0ada5af9729eca742adb7ae6a28c8a7dcac36ae1f2748a775acb9ad5c253ca6e9ab1cad3424dba483aa33acb822b7a265a8d5a9731f80a134a620a88d1921a260a63ea8f69213a39ba7f5a8c19b6ea3dda750a91f9d7fa3dfa73aa9b59b85a3dfa71da9629a95a395a707a9469a25a366a7dda8299ad2a2fca6a3a8df9927a24aa64da8869953a1aaa5b2a7049ac1a0e8a486a6129aaea0c4a474a6019ab2a0d8a4a4a6159abfa0d0a495a6209a86a0ada474a6cd9a77a087a475a6bb9b34a068a42fa6ba9a68a0c4a39aa57595c49bd4a093a18d1f5129ec3049322421a7190b26cf25eca7d89d27a1d5a3589dfc9d66a12ca49c9c089d22a1ada3739c0c9dfca08ea30f9ba19cbea0e5a2a099909c8ba061a2cd98089c20a0c3a1ea97709b9e9f48a12398bc9af09ed7a0ee96479a4f9e75a08496ad99d59d3fa0f19636997e9d0ca0c396d298329dab9f8c968598e29c4b9fb39541989d9cda9e7c950b98559c369e99949d97129cdb9db593ad97da9b6e9d25935597769b0b9d878f49961c9bc89c14840000701c131d330dd8a4eaaa4dacb124c5a5e7ac21aef72763a6b6ad45af1329aaa61caeacafc4295fa686ad16af592999a6cdac33aeb22822a731adadaeab289aa78fad33af8428a2a78dad2baf282840a722ad9eae6627eca6bbac0eae6826b5a661ac8bad6f256fa6d9ab03ad71249fa50cab66ac8d229ba409aaa2ab0d21f7a3fea866aaa41e82a334a878a9951b29a34ca7bfa86813caa22aa7b6a81f93c5a26fa7dda81898e4a297a719a93599cba253a705a92e9a72a2eea6c5a8f4990da27ca66fa89d9989a11fa61aa8459941a1b0a58ea7ec98e7a042a5fba69e9896a0f8a47ca6269969a0b1a440a6f6985aa08ca43ea6e1984ca06fa427a6d0987fa06ba417a6d69886a049a40aa6cb985da045a4e5a57c9941a029a4dfa57699b0a0fca3f7a5319a990fe9028d0467953389f192da96e0912c9d66a1bba29697a99dffa106a4a799b09c41a146a38899939c10a1f5a2e998569c9ba05aa2b898369c4ca0e9a18e981d9c23a0afa10998009ce89f7ba1ef97969b779f51a1d997389b239f26a1bf97d09ac59edba03598599a3d9eb3a02898ff99f59d94a088986a99879d77a01f98c498fd9ce29fbb962d98819caa9eb195c3973e9c099e2a94d5973f9ca29de5922a97209c919de79148963d9bc39c9e9300005e1da31e488aeaa370a9f7aaa621d2a4ccabefac6825f5a525ac82ad14276fa567acb0addc27dba5a5acecade62731a6aaacf6ad5e2756a67dacc5ad5f265fa666acaaadb32554a65fac8dad0a253da634ac55ad5f24e2a5ceabffac622362a52dab9eac0822e2a4a6aa3eacc92093a416aadbab441f4da491a93dab311d0fa419a9a7aa181cb8a3b5a81daaef1671a34da8a9a9240d2ba301a856a90e96e2a289a711a92c99f9a23aa7eaa8229a06a3f6a6bca8fc9af1a2a5a69aa8ca9adca26ba678a89b9b80a22da644a82c9c27a2eaa51da8069c95a174a5bea73c9c0fa10aa5fea6f19a9ca0aaa481a6759a2ba045a4fca55299bf9f10a4a9a51b99ab9f0ba498a52099bb9f15a4aaa5e199999f10a497a5e599659f07a485a523990e9fd8a351a50699549d6aa17aa3e296a098159c9f9d1094bf96389ca19de4931e9c84a02ba20d970f9d11a135a3c498e29cbfa0bca21f99bb9cbaa0baa21d99889c9ba081a29798259c40a013a27098cd9bc79f85a1b3974f9b0e9f0aa16896169b9a9ea3a02096b49a399e56a0d7956a9ae29d23a09395ec99b59de49f6b9565993a9d509f2095e498d39cc79e4894ab98849c4e9e11944598429c0a9ee6924398299cc19db9920298299ce39de0929296db9b9b9d2d95008061a275a4b719b128642cef2cf4259d2a5c2e662f3a2b9da23daf53a9992ca1981aa4919c1b1b00800080008000800080248c5e901393bb9e97ab57a450a920156fad2f9a2f1acf2a5d2f8330e731502a762e042f7c2e6a28a12c722d272ce0274e2b5d2c3c29f126e9294f2b3d252225a1232726622361a82db3c8b4f0206e2ac029be288e1cde2dd62db52d9e95c129a9aed7b13fa4a12fa82ead2d5ea534301b302130dfa62630423022302da8e22f4330fb2f21a7aa2f1d30b12f46a6173034306e2f13a749307330e32fc6a8fe30d4307930f6a93c31da305e3035aad0308030f32f4da9bb2e6f2e2b2ebba688259625872595a02818d91b491b4c8d1c1db82273241894011b33221c243199ae1a32221824dc99151bab215723a19aea1a7121fe22509a4e1a2221a422219a501a0b217b22fb99251abd201d22a499d0198720cd215b9966191a205b210e992a19ca1f0c21c398f7185a1fa6207d987618c41e7020b1982618691e3320f0987b17fb1df21f2b992c17bd1dac1ffe98c816601d2f1fca981b16041ddc1e3c981f16e41c661e7497e1159c1c001e8c96df154f1cbc1da895c5152f1c831d71957715ec1b0e1d95943e15661bcb1cab93fa141e1b9d1c61937c149d1a6d1c4e920515651a171c38910080dda459a6691bf92345252c274e240f290e2c212b742920a60cab2dad7325c2a0eba123a2cf99008000800080008000800080008000004ba6f8a870a9f31fc7a996addfad2634f327ef28db2ce935a7268a2a5f2ac9312c26b829302a8f2e01257e28fe28972a0922e7212223f1251a9adfa93cacd0235da05dae5bb0de222e27ada6e8a99d220e2c2f1d52a6d61d3a2de1a05bab73a1c02e002a56244da5da2fbe2e742dbea55d303c306a2fa2a54a300a30d82e12a584305930a52f66a5e3309a30f42f8ca4e330c830173021a3b3316b31d430dca7893105316d300aa9d4314331883065a9eb306a30922f03a864292a28272692971a94b69fb0a1bc1f3b17b71cec1d4c1d1e1a0a210c22f014701a262172225f94db1a64211e23d19a2a1b5421d422bd9a011b2f21ac22479b901a01216522cd9ab3198f20dc21149a511937207b21af99fe1802202321fb99e7189b1fef20be99a3183f1fbb2083996418f41e70204d991218901e402013990a184a1e0820d198be17eb1d871f37987f179e1d2d1f0598ca16361dba1e3d986116d01c821e1a98a7156a1cfe1dc3973815191c521d7a96fa14b51b1f1da495d7145a1bc41c6895ef14291bba1c35955515211b7a1c9d954915cb1a531ce7949114e819a81b9795008040974fa2a30ddd9e66a278a3cd241223c8260028c72901a688a94bac282ffca37aa442a57f1c0080008000800080008000800080000065a833aa0dabe428e0aad4ad19ae4f340f22c31c252a67360d1c91249b235f32a5199d1d8f1e3e2f571805964097312c8b9792a455a66f28e8a003aadaab8425f3a229ac8bad8823a817a5aabdaca5219d2940a4fba916175c2dfb213aa5a7a2082fe22a2424e7a62130ed2d202ca6a7bb2f7e2e3c2d3ea67e300630f32e79a6ad303430df2e1ba83331bd30b02faaa85b3102314430cea84632bc31053178aa6132a531da305eaa42329631a7309eaa1e3228314c3070a98c2c312b812905a104975fa165a2f31465992297689668165d10041c951db38c661775205a217d9518196520c6212f99391963206c21b49a51196a20ce213c9b8a199d20d921459c1b196f209821ea9bed18362050214c9bbc18cf1ff620689b55182a1fb320449a2218b91e6a20e399e0175c1e29208c995517101eee1f49991117c21d7a1ffc98d416761dea1ebf989a16251d891e7d986716c31c371e4498e215881cb71d0b989715331c711d0897ec148a1bf31c9a965814dc1a701c8795df13151ad91b3b95ab13c719711b24957d13ad19141b8b946b13d719011cb495ec13171a0a1c90950080339c76a256139ca7d8a894a9d8259a9fe619f99a8a2add97caae5ca5d3280b9a30a39f9b0b1c00800080008000000080008000800000cca8f5ab0aac7825f9abeeaedeaea43484987d9c7b266636b7a3b6a476a5883242a253a53fa6862fcaa122a664a7502c67a36ca859a9eb283fa478aae0abde26a9a45fab92ac4824a4a21eaba8ac1c216522a7a844abf615592c1d24dfa1dfa1442f182c622843a63330c62df02baea89830432f8e2dd6a9eb303830e72e77aa4a31bc30113005ab92310931633085abea31653196306fab6832a031cc3061abba32c731f03058abcf32f23105318cabf132e231d730f8aa342f152ee52cfaa6cd18409d20a0c48f4b9ce99f33a0d80d6a95f38b93139393bc124c1ddc1e909ac515681ea71f689ba817521fbd20229c4118212019211f9ced1853209521729b3519472089219f9bed180b201321a79ba018811fbd20c59b2218fc1e6720a49a9e17991e2620419a95174a1ee31ff299f016161e901fb499a416a31d271fed984216581dd51eb498f715141d4d1ee9987415a91cd71db7983315661c871d7698d514e41b041da8975414061b981c5a961014641a421c44955013f219f81b1c9525132c1a911b73949a13da19681bf0941e13181a0b1c41940a125c188619b69300801e9f65a02d8c7ca5b5a880a8dc169ea3a4a891a7a028b3a592ac82aa0225809f55a35aa2d9150080008000800000008000800080000000a9a1ac49acbe277aacb6b033b024342da34ca5f81cab35d2a6e8a8bea908322fa604a9e3a9de2ebba527a9bda95e2c4ca57ea9a8aa5e2912a5f8a947ab7927b4a525ab58ac522503a6d4abc2ac0222f5a049aad3abfd1b8928b49b19a605a14f2e382b9c2664a72630ae2d802b79a9b830692f992da5aa27314630002fa7ab9831f130f92f08ace73136316e304cac5b32a531b8306aacea3213321c318dac2e334d323b3182ac71339a326f3177acc133af327e319dac2b315c30262fb1a9bc204a1dcc18329f339d5c9d1e9e7a9afc9af49ca69dfc9c9c9153197518699d600c571b2b1d2b9d9011b11c671efb9c4f15481ef21fc49cb516731e4b20329c0b17da1e72205a9c1e17d31e71202b9c57178e1e1120a39bd4162c1eb01f8a9bba16bb1d3a1f169b5616a11d221fba9a4916611ddb1e789ae1151f1d881e299aa015da1c381e66993315771cbb1d2c99c514431c511d6d997214c61b101d2a9901144a1ba21ced985513901a361c1f98d312051a9c1b279627123019d31a2895c911f818471af7946e11b5182a1ae0946a11bf18f9191f96dc10e216ea1792950080e08eb891158527a482a45ea4f11f94a50aa68da5f329aaa1d2a5c7a60d2e21a3b0a533a6531f00800080008000000080609a54985c117caa4badf4ad96293cac9fafe8afcd3421a572a810a3d035cba769a922ab4a323ba7caa96fab052fd5a628aafeaa762cc0a665aac9abaf295da681aaefab102800a6a1aa16ac37251da6faaa49acdb22b8a5acaad1abe61d349943a8e4a93f9b212c3327ca1e18a51730d42d232c32a9da306e2fbb2d30ab61316030da2e09acce31ed30e52f5dac453279316030b2accb32f631ed3011ad53336e325a3166adad33c332933159ade933f932c73177ad39344633003284ad9b32a431bf3046ac89241923a920f4a3e89b699ad49c169c859968971c94239d4d97140c530da99d2a9287141916cb9d398c4819d31a839da110011d7e1e0d9d6314df1d611fb29cb514de1d411f1e9cf314d21d271f389cb515e51d501f1a9ce815d51dfe1ed89b65155f1dd81ef59b60151d1d461e4c9bde14b81cd51dc89a9014751c7f1de79a7714371c2d1d049a2914b41be01cab99f9134c1ba51c67998213e41a681c2099ef123d1af01b7498541291199f1bce978c11f218831a5896da101b1830190a9523106d177d185894f50e821664185d93700ec715d2178893400fc516b818269100800e9304931b0563a220a32da4981f71a64fa86fa8812761aa4cad1dafcd2baea05ea5e8a4391d00800080008000000080369bdc92070fe2a824ae90acdd287caa7eb098ae18347aa5f8aaa6220e3507a8d3aafaa98a3141a783a91bab732e32a7eca9cdaa572cfca62daa1bab7b29c3a62faa95ab072732a628aa44ab652401a634aa49ab94212aa6efa9f5aaae1deba497a9bfaa3b94b3218ba174a550a2522e5a2c9329dba8f130d62ff72da0abb6319630772f8eac12322731283010ada832a831963064ad3c332e32283194adbe33cc329c31c1ad24342e33ee31e2ad513495333d3202ae9034f7338c3251ae1b34ff32d831a4ad7b28b527342580a5fa9c139de49ce69fee9bf99b6e9c7a9e6b990f979496e89e00956e1612181b9e088fe91a671c709d300c351db51e379df411941d391f5c9d41127b1d121f5c9d7f136f1d0d1f099d0f14551d8b1e0c9d3814dc1c431e919cf913c01cd81d449c67135c1c661d4c9be912da1bf31cb09a2313f41a5c1c3a9a9a12901a231c7099ba112b1a611b249935119619041b5199cd105119b61a16999010f318201aa498551049183c19c49722101a180519cd96330f6a1785188c961b0f3a175e18b9952a0f9a16d0178095a20dc31517183b94540f90167d185c9400809e8dba8e6285849e459523162316e09cc3219527d32401a702acacaba42d0ca00aa5c4a3b11e008000800080000000800080008000007da118ad4aa62a2238a9adb208ace63250a4e8a95f1cfc3404a63ca59ea77431e0a6fea87eaa1a2ef4a656a91baaea2b58a734aad1aadf28eda63eaa42abba26c0a640aa4dabde245fa6f5a94dab8e22fea5a8a9f4aae820baa589a98faaee1eaaa4eaa8e7a9b593fb279b20d29a66a54f30a62ef42c06abc1319f302b2fafac6b3254313d305cadf232ed31b630edad93337a32663121ae17343133e8318aae5e34c1336532bcaea1341834cf32f4aeea344c3408335eafbe341534d23223af432a8529dc2737a73b9daa9e9c9e639f5a9c7b9c269d859e5b9a8d989b98e89e1c98718bb48c2d9ecd949017b117519eb490f019bc1a799e308bdc1a191c079e6f04cc1bb01c959d470d041cc11c2b9d8510531c251d259d1111431c251dcb9c7a11481c3a1d8e9cde11001ce91c479c4e12f41ba71c5a9c09120e1b6e1c249c9e11ac1ad81bd89b4311431a6f1b6f9bdb1081199c1a1a9b8e1025192c1aa19a05106b18c2195499080fa31705194698d60d7e165418bc96660da8158b17bc95b90c90154c16b295060c121504167295f90938129513f594830bef112113ef9000803590e7909a8535a047959e9c9e1c43a00c9fa619c427bda548ad1dac5c2b969eaca4b8a1a8180080008000800000008000800080000062a2aaac8fa56024deaaf9b3c2afd03292a786adcfa8e034fea634a85da84a31b4a7c5a9f2aa0b2eb1a7b0a9a1aa8b2b79a7bfa9bdaa6e2863a7baa91fabe82538a715aa27abfe22c6a6cda924ab142011a678a9bcaa481dc3a535a99eaafe19a4a5dba8b3a9271338a245a7dea813a09c2b8529b52685a853314e30b32ef4acc032a7317630eaad55331d32ff305caed833b8328a31cfae493477331a3247afa7341a34a13281afdd3456341b33dfaf4235873467332eb04f35683478333fb0a92c1a2c9d2a59a9a09dfb9f2fa0a49f279d039ddc9d8c9ee39a8d988998ce9eda98ae9123933f9ed197248baa8cb59e75947417d717709efe8d351a331b009e938aa41abd1bb19d4904fb1a211cde9d540ae41a1f1cb19d060dd91acb1b619dc20c001b191c869d680ebc1af21b5b9dd70d6c1aa11bd09c150de019cf1a4b9cda0d5219ee19f69a810dee1896198f9a5b0c5b185419ca99640cb817be18a599720c5f1781185c99a20ba3161417a8987c0a9015a1160398170ae2146e165a98eb0a1815ea158898990bf1143a1636982e090c14e6116d9800081a104c0eb9940080a78de98e878527a11a95f695f61541a11d244820232335a4c4acf1a5ab28f09aa8a46c9e8c1800800080008000000080008000800000d39f88ac9aa2702447a029b0ef23a73135a31fab149c0334aaa6d7a90aa9f5300ca790a9c4aa242ebfa7d1a9e5aac82ba0a79aa903abbd28a1a7cea9d9aa582665a78ba9d3aaac227ea680a994aad71f1ea619a955aa341aa8a5f0a841aad993aca5e8a8efa9a89c7ca5f8a800aa1c9e839fb3a5c6a74ea2ab2d6a2c392a39aa5f32523111301fae9a334a321b310eaf25341833bc31aeaf9234eb336e3217b0de344c34ff3254b021358734763390b08135cc34cd33a9b09835d2340934f3b0412da62ca12b71aa899d079d9da0d1a12b9d2f95f398d5a1639b1b92d796f5a0f199e48bbf9841a147987b11348d0aa14f95a118ca1750a0ee91da1acf1a989f45900b1b3a1bfc9eeb8d3f1a641a2d9e838ad619e41ae19df789231a841a2d9da6831b190e1acf9c5f83ba189919729c2183f3179a18249ce2027e175318c99ba202f6160c18499b77029a16a316e49a45027e153f167c9a1a0228150115249aeb05d6148815529968055a14f21460980c05ef136d142797a6044512e01290965a04fe11b112c8954204f4107112fa942204bb0f67121c96be083f13228c389c0080a309420f5b0cab9b4d135a14711da29dbc1e0d20ba24aea140afafa50f24e39982a56e9e251500800080008000000080008000800000849d04adc9a1de1f16a8dfb180ad5b3254a519aaf1a6a63425a7e5a5a8a93d311ba75ba986aa292e10a731a916aa592be1a664a95caaa127cfa66da97daa5324d8a67ca99faa291ea5a67ca9a5aac91aa6a623a961aa01143da611a916aa5993e3a5d6a8d5a948997fa5a8a88ba9d698d7a454a812a95c9d3f9df0a4e2a6d1a3522fbe2d8d2c13ac87332c32ef305faf4d345233b33149b0b234123499329ab0fc345a341733f8b05135aa34ca3367b1bc35213529349ab1fe3524353034b6b12d2c172cba2a3ba9e09d739ea09de09f339ece9ddf9e989f8c9d95999f9c16a0969be9946296579fdd987711a80cdb9f9896f415851500a0cf9451186817ac9f9d92d1189318e19f0890e8192219b49f2b8d5c196f19519fcf8c11192219e99eb58cdd18fa18b39e7f8c1018a818e99d4d8c88175317d39dbc8be5156815f59c898a5b147613219cf689f413e0129c9bc1891912ac103e9bb0899b107210739a818b89105010d2990b8b4d101110ae98bd88c40d8c0c5b98398a600d230cee971d881e0d430591975b89dd03fd842b97d2889583e68a9c96748c858df68e3a9400809d89b385460c0b9c16933f146e1ff99fd5a316202126c61327af7b1a0d243298a0a51d9ecc10008000800080000000800080008000006ca0bcace8a3a62164a995b20aae953185a6a1ad0eab4b3407a6a6a6b9a81d319ca6c9a8dda9372ee1a6b6a882a9f42beba6f4a8c7a9ba2845a745a92daaa72605a73fa97baa5224a2a634a93eaad8214aa6c3a8f2a9da1c1ca68ca871a9541996a536a857a9b49242a51aa8f8a8ad98f4a4bda7b5a8639b90a484a78ba82c9ec99d87a32da6b5a25030e62e5c2dddac46345b33e63193b0d7343534b13217b1393576347033aeb19335d134ec3341b220365535523471b29b35d634d7339db2d228ba286a2749a9d39dd39fc59f079f4b9c0899909a31a0759b6195049709a0109b149790987e9f88997b8b3e93f19ece972a16a2150b9fc6957d18c9182d9f989419185818849e4594981708187e9ee9922d179217859e8791c4162417269e1a914a162f15bd9d9790b814be14409d2f905b146714e09cbb8f5012e0118e9c458f2b108e0e3c9c3590e00f1d08749b1490790cc9870e9be68f9c055787a79a598f3c852d8dd299b78ede84d58c08995e8eaf84a18c7098ed8d9b8a608c3198c08c2b84028f5b97aa8cf3898f8e8b974d8a7683a9841d96668c3b89e584a6970080da879a84e70afb999392e493ef1cdf9c7aa1e71f48282f933bae4b9a8225389504a6489ce51000800080008000000080b286148fed07b2a563ada8aaed253ca5e6b05fab0e321aa445a5429b063417a757a9ffa921313aa6aca836aa192e89a6d2a8aaa9012c13a67ca88aa934293fa6e3a8b1a914273ea6baa8d5a9d6240ba6b1a8a0a9cd22a3a55ca83ea9861e9ba528a846a92a198ba556a85ba9b8928fa550a854a9059c50a50ca825a93d9d0ea509a8eca8389e2fa410a73ca8fa9d05a0d1a3f7a57ca1252fb72d2a2cecac9234d83369325fb132358c34443334b2c73521352c34fcb24a3668357634ecb361345c330f32c2b15421c62266200ca52c9d099f41a0c59f449d0b9bbf9ecba0319cae98b29bb9a01b9bf894a898d3a02d9ab811b893aaa0d3986c16ee0cc7a03798bb17fd1283a0f6955018541521a00e950218e214929f1f9455172c16469fcc938c15b115b59e249317157e13ce9d759222110f103e9de792b10d04898c9c7e920507f88e369c11928a866491479b5892958c0693c69ad891468ca592699a2f91a38efa938a99b390258e66932399ea8fe98fe3926698e28f848fee93929768908d9065930f97618f65902f941d96df8f20920d944c95bc8e05917994dc96c38e49911793a39400807b0a3a111519dc99f098f519f31ebea0549e1519fd2619a67cadd8accf29069f0da685a4ac1800800080008000000080918f4d98930d83a64cadf1ab3e2602a769b1adaccd31b1a481acd9a71634b0a6d7aacaaacc301aa60ba9c5aaca2d54a6dea8cca94c2b3ba6e9a8c9a9cb2827a6cda8a0a9fe2607a67ca88ca99a24cfa580a85da97d21f8a56ea84aa93c201fa69aa885a9551c1da665a847a96012b6a52da816a970985ea5baa7c8a8df9ccea43ba769a8c69d59a4bca61ba8939d4da49ba6bda7179cc9a10da52aa6079eea2a352a9a2866aab0338232653165b17c3590345633b5b3fd343834ba32f4b29e2d7c2d362cf9ad579c3c9c82a1bca4ec9e73a068a1989d949dca97609abb9e579c3b95db96839e459bfe917496c79eb5999c0bf48cbd9f12998a14c90c0aa020981816f5127ea0129761179a128aa0e295b616fd11bc9f1295ad144311cc9ed9947014f510679e1e950012460a149ed4949d0ec6893c9df894e6879d92cb9c9f948f907795679c9d94e5913196159c30940493c5968c9bb093b7944b970d9b289357949097749a49939694c197eb99f2923194f89780991e928494e896e898ab91459428979a9879911794c8965c985391d1936a96a397fd8e6a92f29649997291e194b098559900000f0d4b142a814e96f4119f197f136ba00a98591fbc2601a724ad61ae0729049fd1a5a1a48d16008000800080000000800f930194690940a627ad2baca125c3a8b5b17faf143224a57caae8a00a34e1a619aa0cabb9304ea61fa971aa822d8aa6eba8daa9eb2a6ba6f2a8d0a98e2844a6cfa8f9a9b42629a6c1a8aca97c24e0a596a8c6a96422bda572a891a9172087a565a852a9d71d16a536a81ca9b61bd6a4caa7baa8b51181a446a794a8539138a4c2a644a87397c3a354a6cba7e2998ea300a6bca7e09b44a37ca5fca6ee9c5fa2f3a37da45e9cbf9b1f9d25a01da5582571244c2205aa0c25ac244c23aea8f29e4c99009e0aa49d9c179ed1a111a1909d519bb69d3c9fc39d129c9f9f2ca0c49cd999249e28a0969b0c922a9a9fa03b9add14408d6ea0ce98261955187da09e98db1818183ea0b5974019811727a0d79653150b1529a0c8962710969113a0a096f388e095c39fd497e38e60951a9f2796469161968f9e5a95c5922297ad9d4b95d4946898d99cd9940c961d99ce9bf19451963499b09a979445975999479a3f94da968999fb99e9932f97c399c399e493ba966d996d99e2936f962099bf98f7931a96739818980b94f4953f987496d493d795ff97cc940592f59477960194218f4894df96df960000c410cd1ac60ca21b8d253427e422aa1f9c2aca2c41290da450a96bab1a2c8ba02ba716a7201b00800080038c5504008050998a95f70ed78eb8a8e59cac20561ec3acf729a130d818aea56a2a4333aea037a0429875309ea53ba86fa9222df6a6c5a80faa672af0a602a940aa9f27a2a6d5a806aae22566a69fa88aa9612410a643a85ba9302294a510a8dda8c71f47a573a788a8a41df7a44fa776a8981bc0a4b1a63ba8251889a441a6e1a725113ca4d8a56aa7d890eaa392a51aa7cc9925a341a5caa6fd9ccca2e1a494a6e89d43a297a444a6ab9fdba15ca4fea5579f91a17ea37ba5109e6aa08da22ca562a2999f4aa234a4a69ee59fa7a0a1a2069ed19de49c389fd69a419d2b9ab39cb39cd09cc2977a9a669df89a6917f7169e9e4a985a1c621c149f7b96a11c321c6c9fe996d41bc61ab39f139797193719d29f2e975e184c15af9f9697f3127d8bb99f7197ec880e94b19e1e97c293fc97fd9d1197b996d499009e77979698649ba09d61971199e79b1f9df1962899f49b869cbf963999629be49b4696d898539b539bc295df98c89a589a1895c4989f9ad1997b944e98fc9988984f9400982999a897ea938297e0983c978a93ca96ba9867967e9339979b983d9601920f96559814953f92a695ea979295cd1400007317b08eb19d90a286a3f31721a0f69d76a40327af9e15b009a4432757952ca2589c77060080b98a8e927204f7890080008000002f9ebbab57a4ca1d83a76cb2f4ac6231bba3aeac92a957345ea2c6a4d7a4e83072a414a823a96c2dffa50da974aa232a1da6a1a9c6aae926a4a55ca978aa042534a56fa856a974220aa58aa7cca82621f6a411a74ba8ed1f03a5d2a658a8a81dc0a4b9a622a869188ca46ea622a866116aa45ea616a8b19713a408a6cda71e9a70a380a50fa7099ce8a297a4d9a5fc9d79a26aa4b5a5e69e52a286a4caa55fa010a2a7a426a610a1faa1bba444a6bf9f69a181a4cca5ea9ec0a0b6a3c1a4d29dd3a057a36da4c89af39e83a01ca26797d59c419b949c0b97469b560c3794ba9b9598f11b861c869cea958f1e3c1fdc9d3494e61e231f239fd494061e091ef19f9d95671b651b68a0fd953d181c1537a097963c10c89137a01698e38f0a9827a0d9987f98a89bdc9f2299f099789d869eac98f19a0d9e6e9d4f989e9b109ea79c4b98f89b099e289c2298ab9ba69d489b8697b99b5b9d6d9a3497539bfa9c87998196759a6f9c2899e195e499159c5e9869958c99cd9b9f973e953099519b2697d294ac98029bd996a594a7980d9aca964493c1973d9915970f940e97a898738f0000000044194303da15912124225f1fb99c7da5899fe826081bdcae9b20e9261f988fa41f9da08700800080e98ea500218400806e885400739c5dacdea0d71d1798d6b13199f3304212bda49e9a303406a539a740aad3303ba5a4a921ab642d16a698aa17ac192a8da6aeaa60acf6248da690aa2eac7e2023a637a924aabf1e5ba453a5c3a6871e09a412a5f9a56c1ca4a42aa6dba7d518b1a4c9a5c4a70f124da42ba5a1a6bb11ffa298a33fa56a9143a22fa10aa4c1972ba1029f10a3879da6a0e99cfaa09c9f12a1199fa9a04ea231a102a2dda3dda3bfa184a49da6a8a314a23da586a7b8a160a1c2a4a7a6299dc6a025a4d0a5dc9a50a089a31da5f38dcb9f8da21da4da0d2d9ef09eeca0d68d889aa9175394359785933720df1ef49bc4868821f4216a9d3390b92145221fa09a94cc205d215da1d295931e571f96a1a096a119201a26a12397bf8996914ea0c998db96339a08a03f99f099159df79e9099439c689e109e9d99969cb09e229d5699d69ca99e659cff98b69cce9ebe9ba698969ca59e469b3e98469cd69d639a9097bd9b459d2c990c97259bf69cdf980797a09abd9c4f98d696719a729cb897c7960f9a309c8e978c96059a1d9cc6961f96f099ba9bfe950c952d99d39bb5968e94be98589a9c9500000019851db209a09f86a5b1a57e24c1a31caa19aa3a25d89dbcaa4ea31d259b92269fe6981d8d008000800080000000800080ef8d180138a071ac9da5232068a4c1b1e6abfa307ca2b7ac5fa820341fa75eabadac9d3018a6ddab5caddd2c4fa7e4ab22ad33290ea7a8abd8ac5e25a7a6bfabfaacec2053a6d0aa61ac531c5fa58fa5aaa76f13afa4b8a02fa2c29c3da451a086a23899b0a19d97e198e118c5a07e1762922f1f30a04117991837208b9ea51ef11e3e208b97a7241924af180494da258d270da0269c2b20462130a431a2aba42da606a3a8a2dba642a8709f5ea2bea5b1a79b9b7ea167a5cea7cd9896a16ca586a7a1985aa173a460a7759b929f6ca153a3738d0d9d6a9cd09dd716fc9ab412e40d6b147e90aa217021728ed817a524ae25709b2219032550269e9f2415bc23d32448a1d291d81d6e1e5ca17d98468a2595c2a0cc992099c79c6fa06d9be19ccf9f1da0c09b959d0aa0f49ed49b7b9dc79f3d9d109bd49d2ca08a9ce699ec9d52a0409c5c99a19d2ca0729bcb983e9db39fdf9ac198f99c369ffe999398b99c8a9e30992f98489c149e70983a97f49b679d1398c896349b099d98976d96879aef9c0c989395419ac49c0a98bb95439a6e9c8197e7946b992d9c289650957599b99b0e9100003a1999180f8143a419aa3fac0d2232a893ae30b04323b8ac5bb456b5a29a1aada1b4cab52ca40ead88b49ab50ca705ac20b35fb422a65bac90b39cb4469c7bacdbb3ecb4692d4aaa42b179b2c431b2a8b4ae31b0662e1ea89bad58afe02aa8a7e3ac60ae5227a6a774acc8ad272404a723ac27ad911e3ea5bcaa39ac0d1147a402a914aa69966fa444a936ab989c2aa43da910abec9f49a431a9d9aa45a029a42ea9aaaada9fc0a462a9d3aaeb9f1aa4fba87caabb9ed7a3c6a856aae59d6aa390a801aa3a9c71a23ea8b8a920994ea21ea87ea9eb98c9a1b3a737a99998b1a132a7d2a8a499d3a1e0a68ea8b499b1a13ba631a84e9811a17ba557a70e9600a01da456a56919249ecfa01ca2531d4c9b610c3594f51d689a3f2357245a1e8817d4279628d40f531e672883291d9fdb1ac225962707a2ce8ea71fe020e4a2c8991b97ae99cfa1319cd99c9d9fa1a0529c0e9fc2a0719fa89b2e9f5ba13c9e1a9b059f68a1a39d9e9a9c9edfa0cd9c589ad39d28a0439bc899769dc29f569a8299629d759fac994599379d5d9f9a994199229d1e9f03998399ba9ca89eb0989f98439cfb9dfa97ca97dd9b609dbd967897589bf09c6196e396eb9aa29c9795e796c69a719ccb943596399a229c53954d955e991d9b1a952819c51bf51b2e8a63a1fea4cba52e1628a8d5ae70b0971f59ab24b2f2b35022ccacf5b331b5e923a9ac3eb446b5cc2510ace0b26fb4ae2a94ac55b452b57d2c42ac79b39bb4512d5ea98ab0c3b1752c4da882ae1bb0652af7a79eadfcae962844a7d5ac27ae7225a9a650ac89add62134a6f8ab27adc11d9da543ab88acda163aa463a9baaa6d1595a004a6a6a7149818a070a444a6299b9f9f3da391a6799ffea135a468a65a9f3da163a546a7f99f1aa14aa50aa7fc9e3ea0a5a450a6759ddf9e3ea3dca46d9a909d52a2afa32798f99e6da3d4a44a98d8a008a54ba6249ac5a205a629a8b09c70a1b0a57fa8ae9d78a187a59fa7489c54a154a539a7879935a111a59fa6ec0b9ca017a411a59e187d9dc39f41a14e1e32075b21131ff420ab21c82a812cba219b22b72b1a2d15a4d81afd257627c0a5f098bb98539b57a27f9c03a0a6a128a0fa9cdfa008a3969ed49cf0a0b5a2869d559c74a05aa2d29c0b9c11a0bda1179c3f9b779f2ea1129b859abc9ee5a0ae9ae799589e9aa0479a5599d29d44a0f6990099859d13a0b299cb98179d979f6f997898b29c3a9f2d995d98749cbc9e9b982e98509c439e7c97a597219c109e9d963697d59bc19dd495f296a79b639d0495c995e79a1f9d7b951496699a719ce59200000f1d061eba12e8a400ab9cacec1f2ba75caeeeafb021ffa8bfb0ecb1082690aa00b29eb3c128c6a9e3b030b2a62847a138aaf1ab68236aa68aad5dafe425d2a9c0b0f3b13728eba806b031b141283ea866ae2ab0d7260fa85dad01af2525caa7beac25ae1f2311a758ac9bad552152a6fcab10ad781f84a521ab8dacaf1d52a492a92dabe41b49a2faa723a90617c4a17ba645a8c00c12a253a634a8799b50a25ba665a8b89f44a244a659a83fa024a223a62da8fe9ea1a1e0a5f1a7179d4aa1bfa5a8a7d49b04a1a1a539a7849a05a171a50ba75a9af4a063a5eea6419afaa035a59ba6dc9a53a13ba5e6a6019c2ea121a5e8a6029ceba0f9a4b0a65b9c88a08da48ba6439c1da071a455a6969c02a15fa43ba6b39b319ea8a262a4d6109f21422a7d2cc5242927372fc9303ca8b69caea100a471a3139f43a115a4ad9d019e62a137a4b99d6d9d2da1d2a31d9d049dd8a044a3049cac9cb3a0dea2339b9a9c70a054a2449a0d9c11a0c4a15c99939b819f48a10299d89ad49ed5a0ae986e9a5d9e6ca0fc97c799d89d19a024984899779de79ffe97db98309d819f15978698e29c249fe59638989b9cca9e1296fe97579c559ecc95b6971d9cd89d0795c397df9b729d3d9513978b9b2e9d9394b596e89a969c088a0000a71bb81c2d115da43eab8aac9a1edaa537ad8eae442251a7bcae3bb0f2241da897afc0b01527aca706af8ab043271ea7c5ad5caf1c25e2a788ad1baf982424a8d2ad8daf5d240ea8e3ad81afe4235fa768addaaee522c5a6ccac13aee1219da651ac99ad642063a6f9ab1aad201feda52bab95ac7d1c1aa55faaf0ab0e1c65a465a9dfaa1218cba396a8f1a9ce0d47a300a82ca96a9678a249a7a7a8479905a2dfa667a8369bc1a186a657a8099cc6a173a63da8669caba142a626a83e9c7aa106a602a80a9c35a1b2a58fa79e9bf8a069a505a7559aafa020a5aea6d49a83a0fea47aa69f9a6ba0e3a472a6989a75a0bca464a6899a9ba0a8a457a67c9ab3a09ea436a6349b9ba079a42ca62a9b52a077a4ffa5119bdda0bca435a6339b249b4f9fc4a1d69921079e0f9e11c9903b98219d4f9f6195d49d72a22da49b99489dcaa1bfa3969abc9c46a13fa3789a749cfea0daa2539a409c8ca059a2119a1c9c35a0dfa163990d9c0aa080a13d99e59bbd9f4ca124998e9b669f28a11b99149b189ffda00a99899a9e9ed3a0f998379a459eaea05299a899ef9d71a02899f7983d9d1fa0e4986398b39c3d9f1198f097609c5b9eb9969b97349cec9d4b95c097399ca59d8494cf96f19b479d02943d96d49a899ca4920000a61d4b1ff30cb0a4ada919ab211edca404ac21adf720cfa5b8acf2ad6921d5a517ad76ae7d241ca645adb7aeed2441a617ad85ae872444a6ddac33ae02243ca69aacdaad18231ea66eac9eadb92101a635ac57ad7420a4a5c5abf9ac811e3fa52bab9aac471ce2a490aa3aac461a97a414aad7abe41940a486a922abdf1701a428a999aa6e148aa3b7a829aa229419a34da8a1a97998cfa202a851a9a29aa0a28ea70ca94b9caba239a7e2a8b69ca4a2caa69aa8819ca7a282a66fa8d99caea23da645a8ab9c59a2f4a513a8ed9cdaa199a5c9a7b49c55a139a529a7649cd4a0d2a497a60a9c70a09ea421a6a19b0ba061a4d0a5589bf09f55a4cea5559b03a050a4dda5cd9a0ca054a4dda5859b03a035a4dda5859bae9f16a4aca5af9acd9e65a3e8a4119a8d9a6d9fcaa081976496609b299d68948e99739e5ea02a96109d05a101a3eb98f59cd6a0f4a2bf99f39cc1a0c2a2229ab49cb8a09ba2ff99669c87a054a26899149c38a0dca1c598959bad9f5da12298389be29ed4a0b997079b739e83a0a996a59a189e3ca00b97439aca9de69f1196c599869d8f9fec953699309d309fa295b198c89c899e57957298759c369e8b942198309ceb9d6c942e983a9c9d9d929385972a9cd69de0942096919bee9d5f984e269929712a8da2b52bfc2ea32fdda5c82b412fa82fb0a88ba548b061acb3aa5a98bca21f98f0937190008000800080de92008000800080048db194928b298ded9f6eab77a577a5a89bd8a9a1a08e2a3229c02d532e9a2d7a28092db22d2e2993275a2b532cfa25f427662af42bd01f59283b29a4292815462170b0a7b2bba53d2a09a660addda5c02d832bf52932a60b2974ae4bb1c2aab42ef32d442d7fa7dc2d272ec92d59a7962c092df22c6ca46a28762a462b779edb247028072971a0cc23d4254426d69eb0251628ce2714a1aa2d6d2de82cbba7f0306e30c32fccaae73043304c2f0daacb2ffc2efb2db5a73f29f728df287fa2719e2ea8f2a8dc9c601c9e22aa24f399491c202241249e9984198d214d23bd9a9e1a8c212e23b89bbd1a4821c822e09b7a1a0f21aa22bd9b301afa206022019bf719bd2002229a9ad6197020bf21d29a2f191c204a216c9aff18981ffa200a9ad0182a1f8c20a59969189d1e5b20cf9924184d1e192098996817de1dbb1fc6991d17a71d811f9b99b916561d401f6a996d16301dcf1ee0981e16ec1c5f1e5b980916a41c171eb6970a166f1ca31dbc96cc15081c661de395d1159c1bef1c87955e15891bba1cca942815021b911c1d959514cd1a841c1894b9143b1a2a1c1b902924d0250f2654a4f3297b2c9c2c9fa905294e2a0e29a3ad77a8bfab1dad1dad869f759ead9f4f1a00805e8f90859b070080d38cb2939512008000800080008004a7f4a8dfa9442849a997ac04aed2339525d328072726328425a5281329242cb22432289f2806263223c5249426a51c921d0ba683a8289d3d20c8ace9ae09a3942946a849acb6a58a2ccba2c8aa0ea72e2d9ba42eac7fa7e32ef2294f242ea7932ee42c0b2ceba5a1296829d82810a41f9d159cdb9ccd9e61a073a486a4b619578def92518d501eb28a420de08d6d22eb303030212f23a68c31ea302b30c3aa9731c630e02f9ea967318430742f67a8b02c582a25281a99c69aa1a7baa8e822f5955d9c609dce1eef176a1f85202b15171ab120e121d70ace1a3e21e422cb9ab11a2a21bd228c9b981a22219922499c6b1ae3204c224e9c96197320c921b69b311922206221b59be018e11f0f216d9bad18831fe120a99b8f18271fae20589b5618d61e6420129b0b18771e3620589aee170a1ecf1f0a9aaa17ca1d7b1fc9992c17911d2b1f2999bf162d1dbf1efe984d16c01c5e1ed89886155b1c051e94985e15101c491d2398cb14981b141d5d97cc14131baa1c6796a714071b971c1e96ce14ed1a6b1ce495d214f11a7b1ccb944614071aa31b10968681e29c939d79963d25d126f32790a97521fe2429249ead23a999ac82aeeda784a239a2e9a3a91e008000800080000000803394af838a02008000800080000007aab0abb6acb49b09ad26b0f5b05a2e9e17a1214b9cc4312c141698ed18772cd611869c629da1274b9a3ea53fa62a209c9ffea892aac996b89d45abccacf8a17b252ba91bace2a4282c41a016a91ea8f92d332267a5aaa8182f372acf2088a9c52e642c272954a8ef9a289c5ca162a07ea00c9ce09e232633a2a2a7b4a8cd24e29c75a18aa2d52160947e9b569c8122e12ee02d2a2d93a8ad32ce31b53062ab233226315930bdaa42321d31033092aac42ed92c552bd1a591196ea2c4a42719769a629faca07a17ad91aa91c60cc68c1c15cd1dc61e9697161934204021279cf0187020af21ee9c29196f20c421479d73199820da21639d12193d208d21f49cf0180c2043218e9cc818bf1fe6203e9c4f18111f9f20c49bf917a01e5620499bd5173f1e1a20e59a2c17f51dd71f979aec16a91d6d1f3e9a8f165d1dd71eec995216111d7e1e9f991a16b51c2c1e5799a515771ca71db2985b151c1c591d7198f9146c1be51cc5973414bd1a751cb996b3130f1ae71b6196b513ca197e1bb9958d1370190b1b959541134d19081b93955914121a091c6195368a739def9d5c95e19c92a08ba3a8a934a19d19919a8baddb1d4aac552522ae0c9785a03497ea0a00800080008000000080008000800000008000800080000093aa3aac36ad7b2bd3ac4db0ecb0433406a488a468a77b32f1a3d3a61ea8472c89a2b3a717a838270ca4b1a8a1a9d621f8a321aa5dab5e1641a45aaba2ac919f3e972eaa33acb8a21529a3a4d4a93aa57b2dc9263c9d25a8112f7c2b3a2750a91930562da82aa8aa6130f62e5e2d75abca301a30c42edaab06318630043039ac4731de3047307bacb1312131663071ac17324c318a306bac67327631893041ac7e3295319a303eacb23296319f3080ac7f302f2fea2dfaa985205295aa9daa9d449c0aa0f8a0e48d6b988a9abf9978987c0cf8197f1ccb9b3815dc1d5f1f529cb416061fa520c59c20187f1fd420829c6618192037215c9cd81810203b216f9ced18bb1ff220619c78185e1f92200c9c2b18e11e4620909ba317901e0f20309b39173c1ebe1fdb9ace16d51d731f989a74168e1d191f499a25164b1d931e059ade15041d471e2c9a8f15951cd11deb9912154e1c831d9c99da14b81b071df0988714361b9f1c33982714a01a411c1d97ab13131ae01b3d9656130b1abf1b23967713c2198d1bfc95f512a919b11be0955f111c18b11980940080a390ed97778d4ca240a40ba590ab81a311a004a405ad549d6eac19a25aae929b35a00e9d9e1300800080b7905d0d00800080008000000080008000800000a6aa76ac9cad812800ac02af79b08a32e7a6b3a8a8ab7d31afa6daa911abaf2bc8a55ba964aa1a272ba558a97caa872346a5e5a92faba91ca1a5e0aa02acb395c1a47bababacc1a0ac2013a830aa99a41e2c4425a79c12a8d92ed32b92272daa23304a2dac2a7bab9430fc2e342d11ac0c313e30bd2e57ac5531aa30d72fabaca23105313f30e3ac0c325f318a3001ad8332bc31c8302aaddc32f931f73017ad24333e3219310ead6f336a32433139ada231b230b82febab4b24f0205119b5a3e29c089f0ca00ca0319ca59f43a0289fad94db144716389fd505651ba21c449e5010671c9f1d1c9eb014d11d891f2a9eb0163f1e05204b9d6d16781e41207b9dec16c41e3c20399dd8162c1ef51f089dbf160d1e431f989c9916a91d331fa99c7d16921dd81e299c0e16491d991e459ca215071d461ea09b79159d1cf11dc19a2115681ca61d6c9ab914321c3f1da49a4914a61bfe1ce8990214ec1a9a1cad994113251a271cc5989b129019fc1a2397d41102194b1a2696a011d8182d1a0896bf11a318111aed955e11ad18821a7f95e3104c17e518d396008077883991cd8d6ba5a0a5b7a6f1a94da50ca72ea85eac11a6d1aa25acd3a696a219a329a4c81ad09100805f88ab0100800080008000000080008000800000dcab92ad29af1429a5ac38b036b18b3245a66ca840aaa63133a8b0aa0aac562c44a75daa8eabc92798a62eaa12ab462361a66aaabcab871c14a699aa06ac7a95f2a517ab34ac589e16a42faac6abb5a2e2242ea448a806a6a62df9297a254ba91330af2dda2b78abb330382f702d7cac35313730c02ee7ac8a31bb30b52f2badfa3126312a3077ad75329f319a30cfadfb3216320631f5ad4d335f323e31e8adb033ac325c3103aefc33d23299313daed6328d31b130f3acd5251324732031a5689c649c7e9d3a9e749ac999d996819e0798098c3d0de09e18948814d515b59e068f7518c619909e7010991c861d019e0813831d451f829d1114841d351fdf9c0415751d0e1f869c51158e1dd11eb89c8f15751dc61e769c78153c1d951e229c6915cf1c1b1e1e9cd314761cb51db29b9014431c661dc89b8314091c1a1d5c9b2a14a71bd11cf29afe13371b971c9e9a0013d71a5e1ce3990413341ae11b30990f1288198d1b9b989511e8186f1a9797741017182e1937963010f9168a1890951d0f18162418db944a0e541524165097b50d5a15c017e1940080518f5c94d18d7ca462a572a6b4a944a64eaaf1a893aba7aa4eaf40b00da951a089a271a1d91a2a960080008000002b8e008000800000008000800080000071a88aaeaaac50282caadcb1baafe83033aae5addbaf243031a82cab6aacb02b2da729aa02abb027d1a6fda9dfaa1123c1a625aa19ab5e1c37a622aa2eab5895eda526aa3fab679be4a5dba9e8aae59f33a2d8a804aaf3a27128f01fbca1f7a7212fef2c872a46abc2305f2fb72df0ac67316730f42e6eaddd31f530f22fe4ad5832713162302eaecf32db31d43059ae4c335d32323188aec533c8328a31afae0b341633e731ddae4a348c3328321aafb2337b327f3180ae5f28cd269e24cca7589e369ff79fada0589cf09c9b9d1fa0759a8598d2990ba058966a11c815399fc590f719bb1b719e6a055f1c1e1e1e9e6310261da41e2f9eff100e1d831e179e6812031d7c1eb39d1014f51c641ea99daa13d51cd81d2d9d2d137b1c731dd49c9513131cfe1c6c9c0313531b901c909b7b12cc1a441c129bef116b1a9f1b3c9ac411c919481bf5993a118f19f11a199aca10fe183f1ad8998410a618ae1950995a103d18221978981c10a917f418fe97250fdc1675181197f00ea61607184396480e061630170996780d46150717c794ff0d521563175a9500808688458a398d1da2c69ccfa088a9b49eb523a322a1aba9a0aead85a4beaccb995ea1369a0e04008000800080008000800080008000000080008000800000d6a903aea6ad47286daddcb184b24f3297a427a572a4c83033a6dba858a9082b9ca63da9daa980268ea668a944aa512194a6e3a9e3aaa715c0a63aaa50ab339570a6f2a9f0aa159b2ba6d4a9e1aa659d9ca587a994aaf39e6ca147a89da93ea41a2bbe27ca2267a95930b02e152db6ac75317a30162fc3ad123206310f3034aea332a431a130c7ae22332b321631f1aea433b532893119af10341a33e23170af38346f333c320cb096340c34b3322bb04f341333fc3162afe52844285126e8a6839d509e239fb2a0269cc09b629c37a0619a7898c39952a07c98818bcd8c0da05e95f715b217f99f709018199d1a609fdb8a131a081ce09e49040b1b311cd79e1d0de61bab1c4b9edd0ede1ba61c239e1210d11b061db89d6d11e91bce1c789d0d11e81bd41c249d9c116b1b941ce09c6b11061b5d1ced9cfa10441abc1b679c4511da19431b229cd6107519701ade9bde0faf18f119d29a1d0f33186b19d299fe0d4e17a818a898a50d55162518ad97c00c9c15c916c996aa0c18150e160e969b0a2c144a15d995a2083112271427940d096110e213418d00804c8aaa902f8de5a16d96e09da2a95fa0a51e621910ab97a43aaf96aa76abdb9b3da06c9d291400800080708bcd0300800080008000000080008000800000a2a9c8ad1fada22791ad0bb303b3973192a613aa70abb43089a72da9e0aa6d2b41a786a939aa4c27baa68fa90faa9c220ca79ea991aa0b1cffa606aa66ab0995aea600aa1babf69a09a697a9d7aa299ddfa552a95faabb9e39a5dea88ca913a0829c55a5a7a755a5e72cbc2a5a28c1aa36314830962ed3ad58324f315030a5aeec32dd31cd303aaf743377324d31a0afff33f432a03108b03d34623322323db07e34da3383326db0ea3455341a33b8b0713478334a3254b065280228652695a75b9e45a174a1639f559d979dd19d2f9f919b9299c1995a9f5099be9423936f9f3d982d8ba58cd79f0095c715a117e69f0b9077192d1a5d9f888ad919b21b049f4184ba1a051cfb9e2404b21af51b419ee409411a8f1b4d9e970c751a581b1e9e190e341a281bf79d9d0de519d61ab39de70c5419031ab99ca90dd318d0192c9c500c7f180e19769b710c0518d618249b8b0cc817bd188a9a580ca61602181e9a4f0bdc1537164d997c0af914dc15a8986b09ca146515db98b709fc14cb14fb985f0864147b15ee987909a3132b0cbb99a801560e350e09940080e088828db58fbda2dd9fcea00ba9d3a086a16499bfab37a3caa9b6a8ffa50f9d5ca01b9feb1459860080b28392010080008000800000008000800080000069a42fad49a8c225c39d5fb082a5093012a556ac8fa97c2f20a6beaa2ca9432a08a7a4a9fcaa5a2666a7c4a9c0aa1c2156a7b3a9aeaa371514a778a96caa2b9b6da632a96faa7a9df7a502a9f3a98fa0afa5eba8e4a94aa1a5a5dba8efa9fba209a5aea87ba94ea3999418a597a78aa5fd2d712c532a75acd731fd30eb2f23af1e33eb31e2300fb0d833983266315eb02f343c33f331b5b07534c3336532f0b0b1342034db322eb12b359534993379b145343f330a32b2b036268d262125b4a6379d219eed9f79a19f9c5495189790a22a9b0095b196dba1b699ac917c98eda15e98088b4c9352a15a963414b2129ba0d094441748174ba0c592ce183919d59f3891dd188519029f4d8f27194119ab9ee78cdc18b9194b9e73897f189a18d79d648326184918709d2683ee16fc17119deb8286167c17c09ca8821216f8166c9c8102ca158e16d19b52027b153016619b19021e15f114f79af60123146e150f9acc0152141e140e99fa04d61271149d989204461204134e985d04f7118111a5974004f5105111cb965201ad0f5211fb9770048912b110de9a6b12b61af51c4f1aae9758178914ce9a489f1e210c19fea9b7a0d4ae12a103ac529570a07096ee8cce8d008000800080428000800080008000800080008000002ca952ad90ad1027eeacbdb12ab372313ea6c0a28ea8733020a7bca996aa962ac0a619a950aa7b2487a602a9e8a9ba157fa61ba919aa979e9ca677a995aa83a191a63aa953aa2fa288a61da920aa80a12aa6dda8cea9eba1c1a5c8a8bca9a0a19fa5c2a8afa9fba1c2a466a884a995a2ce9b71a4b5a6f0a53a2eec2c9b2bbcacda32dc31bd3038b0f133dc326e31c8b04f347c33043242b197340b348632a5b1f2343d34d832adb17f35af34b3330fb24133103219317fb03a2050227020b9a5659e15a076a0d9a0ac9d9e9c049e6ca0d09cb7996a9b8da00d9be29448968ea00499270b8b8c67a01e9735146f126ca05b950a17521793a0839302187d189da0fe901319f61866a03a8faf18861803a0ac8e06191e19ae9f8a8e4718ec18629f8b8c0818d017ed9e3d8c7b16ec156a9e548de9141614669da18cf1122d137c9c2a8c5b12bd10259c038ca0109010fc9be68b8410450d3e9b588b73101c0d999af98a4810de0ce2998c8abb0d960c2899478a820a9105b298fc892c0a3f856d988589e083fc848498078993839c043497548bfc882e8402969099cd8d4b15da1c3c995194f70db69ac99e03a1342246a9f61364b0e9a52dab9995b7a068973d063f95008000800000018d0080008000000080008000800000eea7a8ad6bac882596ac87b38bb284309aa6cba865ab2f307fa5dfa660a96c2bf7a544a8f0a8b62639a687a847a92022b5a6f6a8cfa9891bc9a634a92aaa97946da6f8a8fca9529dffa5c2a8b8a9d09edea55fa832a9f69f53a537a81ba9809ff0a4f0a7c2a846a0a4a49ba79fa8f99f52a40ba725a839a029a005a4c2a592a30f2de52b9f292eacd532b63184306ab05b346633e43190b1c0340b349b3227b23f356134fc3253b232356a34ef32d3b26a2fb22e8a2d57ae8e975f8df49bf8a4f49dc09fc29f40a09f9cf798e89bdaa0c49b6597cf98fba0fc9af396719899a05799648b1b9397a053975f14aa124ea0aa953d173717fd9ff3947f168416ae9f189427162a16449fa792d9158c17579f5991b9161b17e99ef49116152015c59e9390ad14b514389e2f90bd123812719d9c907f10f20e119d72902d10820ebf9c5590bb0c1608789c2390fd05c2873e9c15909d857d8d8c9b888f2e85248da49acc8ed484b88c4f99458ee28a718cff98db8d758a3c8cc3989b8c1e84ed8e5498738ce989918e6e98698a5b0386848196508d828c208e6e9615987f8de917b91eb1994294c58d0d993c9ef2a0601f39a91d9322ae7c1ab3ab1d93f3a00394f201c0960080008000006593008000800000008000800080000065a485adcba84a2388a486af40a0d82d57a6d9abf7a84e2eb0a54ca938a9b62ae1a55ea876a92827c7a55ca816a93723f5a594a85ba91e1eeea5b2a884a98614d2a575a84fa9379a96a52aa834a9799e8ba52da80ca9bb9f9ca52ea85fa97aa162a51ba815a9fba10aa5e1a7caa86ba183a472a788a8f2a00fa4d0a634a8c2a038a2fea48ea6f4a02b279e25d42157a9ed301630ad2e08b00f34bb326f3114b2b534ad332132e7b2c83114311f30cab03d26a326482590a8699c6f9ec3a000a0b79ecc9ffba09ca0e79ce09b909e02a1349c3497209a9ea1389bf69191966aa1339ab20bbc93a4a135997c11eb8cafa13498e115840c38a19f9669154712d7a0a3957d16c01465a0b194fc15591406a0609452140914779ffb93da137010d79e3e931c0e65093c9ec9928e07fe88769d1f93f086eb8e0c9da09270865591ab9c2892838ceb92149cac91fd8e7692279b19917c8eb393a19aa29038902d93c8999490e68f2c941f99d990fb90e0937a988590939166943b9845906491eb948a9712903292c894b296978f0d92bf927096198fce8ddf90c496ca0ac019a61afc208596878dab0d4094b49dae9d1b1f08a9389cd4adb9a5f3aac594e2a1ac94cb885f9200800080000042950080008000000080008000800000749e09aca5a21d2244a411afdba4122e16a525a90da8712e73a572a986a9f72a89a534a84ea9ae27c3a547a85ca93924bca587a856a9452090a53da847a97f1a82a53ca80fa9e613a7a55ba83ba97193d0a566a845a92999dba560a83ca9889d90a502a8d6a803a01ba571a78ba875a08ba4ffa63aa8c9a069a4d9a61ba8a6a053a466a6c3a7fba0baa2c9a507a782a0709be49d49a2c8a4a02437246e2393a9252870272427deaaf91fe51f211c0ea8b29e4e9f6fa26fa2789fc09f96a16aa21a9e6d9ce79c56a0509df498dd9b1ca0a59c4895c298d09f709b0092c0935ca0409a970bec8cc5a09c996411b60cdca09b98f915d41244a110989f15771241a166971a15d01474a06796a7142711f29fff954912e010839f89950f0f198aac9e2d954d083e90309e4f95d88d8a94ad9d069588906295ef9c96948d933997959c3a943d94b1973b9c2494a5940e98de9bbb93eb9422982d9b83938d94ae97129bf992cd9402984d9a96928d94c097179a909141942f97a59952910e946c975399d690c793dc957998858f639283960c9a0e924d954099ee995b14b3169118978e1098530d4e17939a3b9d8e9d021ff7a8b19807ae04a406aa2e94f2a190928788848c008000800000249400800080008000800080008000006ca176ad69a8282185922eb0b522342ed2a5a0aaaaaa7d2ed1a5dba92caab72907a697a8cda94625fca561a875a99d210ea688a8a9a9ce1de8a588a866a9521acca55ca83ea9cd9387a562a843a9609947a52ca80aa91d9cf3a4ffa7d4a8929b9aa45ca772a8e19c4da428a752a8de9d07a4aba60da8ba9e9ba30aa6a5a7599e4ea3c0a516a73a9faea232a5aca6d99f7fa28ea47da5529f5ea107a42da593a0e8a112a306a570a00ca120a314a51ba09da066a27ba494a04ca013a0e1a1aaa0419ee59c1d9faea01d9df298ce9cfea08e9c5395e49b8fa1889b1d8cdc98bba1509ae011ee93c8a1a7998116511356a10a992a16e71252a16e9899154b15e6a04f977213fb11dca07a9773099194aea01c9817927e982fa0159832969b99a99fef96a6953e99839ff6951d9663992d9e8b95619671994c9d8695739787999b9c5c95a797119a869bf694d497aa99069b86940598d899b69a3d949e97159a819a3a942b97c399289a5594e0961099709973949696b4985b988c94dd952298f29665944296d9975695c8925995f69625953a8f2894c2969595981c601c561c4290a30bcb196e1b6e9b8821b429c22c86a5faa2d0abb8ab801a509d4aa4349fde0e0499008000800000c4980080008000005590139603867c0012a22cadc2a7ed21dca5d8b08baccb2da79f70a32219412e39a45da3c7a44c2a6aa634a855a98a2668a679a8a0a9b02206a698a879a9db1fb8a536a848a92f1a99a50ca81ca99a9349a50aa8d8a82b9902a562a778a8f19bb1a42da75fa8369d93a490a6f2a7169e65a425a6bca7f29e2ba4c6a550a7c39fc7a379a500a7dba00aa329a5aea6baa1c2a2f5a471a686a13fa287a429a648a120a25ca4eea599a0f3a122a49fa5cd9f4da10fa3dea41ca084a083a193a3249eb39f2fa0c8a12f9d569e129dfe9ff29c2c9d0098a29a439e269c728cbb8dce9e969a6617ce18e59f1899911a431b20a07398461aec1a3fa0a09801193a1860a0a0988517981556a07198a3130b0c6da042986f8975941fa0ba97e6911197449f6897f1955699f09e75979997619ae29e3797f598cb9b149e2e97f698b29b8f9da8967399c99bf79c58968899c39b629ce9952099379b139c8a951a991f9b1f9b0995ac98869a219acb943398d4991f995294bc9754995c981b945a970f99aa97739317979798cf9668930f977b98a5962392499687988d9558930f964f9723967a1c76207d21849b8d921987cf889d96651ae826f6284ca862980ab0e4a04ca91f90d19c5491d0880284659a00800080ef920299008000800080008000800000bea6c2ac25aca22236a970b079b0a52fc99d91218319c12f02a3e6a6f6a77e2a89a4faa7c2a8d62572a5e4a82eaaf2207da527a97caa4b1df7a44ba822a90214d5a43ba75ca88a93baa4b6a64aa8669c90a46fa61aa8349f7ba45ea616a8fe9f59a454a612a8fda024a43aa6e7a7e3a1e5a3e2a580a72da268a397a522a76fa20ba354a5c9a61ea2c7a256a5d7a6f0a174a25aa5a4a6c3a11aa202a57ea6e7a182a198a42ea68ea01ba159a492a5e49ebda009a42ba5da9d1aa079a109a3f29cd89d469c859d9f9ab19cc797f998d09ba49a9e17e818f59d9c97891d8c1e3c9ffb95fb1d211f3ea0b595d41d711e41a14696861c2f1cf4a1b4966a19c417afa18d968813050c27a1be973c90bd962da172980d97969ab8a01a998199e09c31a02199519b8f9de89ece98a49b1e9e1e9e7898279c429e6d9d5998019c479ef19c3298019ce69d659cb697b19b5a9dd99b7897549bf79cd79a0197c39a659ced990996e4990f9c1899c2958a99b19bd5987b952c99439b8f986095ac98a99a6398f0946d98159a0198ed93299735995d98dc932797fe98aa955c1fc421c421f89e12106419f115899a0ea0fba404a406aaab9c11b068a50eac8891a8a0b195f081dc9300800080000014901791008000000080008000800000e69c64acd89fec1e0e9bf7afb99f992e3ea08ea131a6bd2f95a3fda88fa9cb2a48a59ca924ab89253ba67eaa64ac211f9ba64dab83acea13f4a5d3a96cabc9937da4b9a548a7b39c40a418a64ca7f69fe2a43ea7a4a8b6a2d4a4bba67ea8b3a391a48aa636a8e9a33ba41ba618a856a4fda3afa561a711a446a3d9a4e5a65da4b0a2c5a43aa65fa4eaa270a564a763a4f6a230a655a827a493a21ba641a84aa35ca2d7a512a8d49f5aa190a434a6169b7aa06da3dda4a1971ca076a263a4f90db69e60a057a1e48d069c810ce60d6c945396f41ead1f949af88c6221a221739daf06e221af22969f14903c213a22cea0419503208b20e4a1e797791c291deba126980614301594a14498bb921796e5a01a990499179c62a08799d99be19da99fa5999d9cc69ec69e7199ef9cd19e9a9d3599009dda9ee59cda98e19cbf9e5d9ca998b59c979eb59b2c983c9c139ed99a7897bf9b469d8f990997229be69c2a99f796929a809c9698c596689a639c2498c0963d9a1b9c07989d96e399089c45977196dc998b9b7796ff943899489c23999294c3988d9a48970000151f4720fc9b36a08da590a715a805a473a9c7aa3caac0a0abaea8abeeaa2d82319fa309a3899c90008000800000a48f0080008000000080008000800000b0a182abc5a78b20549e44b022a8842e46a4d7aabca9972f59a5bcab4cacb02a81a625abbaaca826b7a688abaaacbe2292a69cabcdac391ca1a6c6aa4daca212a5a3bba43aa45619bea4a4a813aa92a3bda45da846aa20a526a42da7ada8c2a433a3b8a5dfa646a596a293a5c9a686a56ca283a57fa697a58aa2b4a5faa60fa593a2afa64ca83ca4bda204a768a859a1e5a22ba797a8599d9ea29da63ca8fe9857a2ffa5d8a7d498dda1b2a5b9a7c198a4a163a52ba7b9988ea095a320a6369a0d9ec79f2da1b68d759d3299379c218e6498ea1d281eed942f1415246324fe993e192f252c26f39f8d18b3241026f7a1098647213222dda23598ef15820c57a279990b98299c81a16e9a2b9c6e9efda0cc9b989d23a056a0bd9bea9d37a05a9fc89b109e4da0199ef79a0f9e6da05f9d9a99e79d66a0029d2999a59d3ba06c9cd698529dec9fce9bbb981f9d349fde9a9c98bd9cc19e079a36986e9c0f9e329957970c9cae9dde98d896819b4c9db1982496e39a2b9dea98c995559ae19c51989f95269a4f9c3c98ba948399079c1097f19445995f9ba19500003a1dbe1c3a94fba303aaf9ab9da506a807af5cb09fa77fac0ab40db534a9e5ac81b495b5bca5eaac82b49fb574a470acefb3eab489a54aac57b37ab449a3bcac2bb43bb5ec2453ac70b3c7b4d42caaa858afbfb0d02ca2a782ad07af51283ca7aaac2aae8d234da76bacb1adc81b95a61fac32adaf119ca47baaf4abf299daa0b0a44ea53c99b2a307a875a9ab9d30a491a95eab64a097a4c9a96aabd4a0b7a43ea9e9aaeea07aa429a99faa94a02ba4e1a87aaa8ca0b0a3aea83baa72a0d1a39da814aa479fd9a24fa8a6a9839d8ca223a856a9709c0da2a0a7f4a81f9cd2a10fa788a8d29a9ea18ea636a8c79992a107a6fda75496fda021a58ea60e0d51a04ba38ea4281c279db19dee9da01ebe954e208121bf1f2718dc251627491d431d862869297b9c141d8827c1281ba39b139922292429a40c987316da1575a3639a729aa19c10a2549c3b9e6ba0fba0ee9b269f4aa148a0d09a1f9f83a1839fbe9adb9e61a1d29e6d9a709eb4a06e9d259ac59d05a0ee9bcd996a9dac9f219b7799529d749f839a56991c9d699f799a36990e9d1c9f369a6799a49c7d9e4d999998279ccd9d8a988c97c29b459ddd972b972c9bd59c6f97a596c29a869c9b96c596e59a639c68965b96719a479c049725958b998f9bb0970000f91c5b1efc9a01a0a1a5fea730a419a8eaae88b0baa50bab1fb2c6b3a7a568acdfb31eb502a4e9ac9fb4dfb563a295ac13b430b5939a4cac39b37bb47121bbac59b44fb5a02610ab36b2c3b3202895a836afa9b0cd2505a893ad06af4a2315a7cfac0aae0f201ea62dac54adee17d6a5e4ab04ade7906aa5cfaa57ac7799b0a498a917ab749ae8a368a88ba9ed9c99a315a81ba9d69d71a3a7a71ea9209e3ea33fa770a8319c4ea234a78ea81f9ad5a104a759a8b69824a252a6aca727999da125a675a7039ad3a159a6b6a7389a64a277a62ea8689c77a266a622a8f29c97a24fa60da8ed9c22a2cba5a7a7e39cb4a175a52ca7e59b11a130a5e3a6589718a1c8a44ba63d8cd69f6ea21aa4511c03991216d217ac21061e8a289129a023d722522c7e2d829bef1f3f29e82a70a7518c0620bb202ba58d9c009e3ca023a3169dbaa040a254a0d19c1ca1c7a2b29eaf9cd6a075a2ca9d4f9c6ea039a22d9dcf9b09a0c2a1c99c1b9b759f47a13f9c6a9aca9efda0049cf899509ea3a0a39b8999d19d46a0cd9a1c99819d0aa06d9ae1980b9d779f159a8798b09c179f6d9985987b9ca49ee09835984e9c2f9e5698a0971c9c049ed0972697c89bb29dfc96ee96c39b5f9d2e96bb95f99a759d38980396339a209c749400007f1ca01d3e8627a597aa46ac24a18aa79fae1ab0b2a20ca9c5b0cdb120a17caafeb189b3489c02ab41b2c3b3431fa8a671ae24b0551c8aa215ab75ac28161ea92eb03eb1aa133ba971b0b4b152143ea8f5ae6eb07c19e1a776ad00af1812a1a7b3acfdad499102a745ac66ad3f9739a6d4abfdac959995a529ab7dac1799c8a401aa92ab7d98a1a3c1a80baa9d97dda2cca7f7a85b96b7a236a7a7a82b98a9a209a79fa8689a91a2e2a677a8389c8ba2b7a65ba80d9c77a28ca636a8719c17a273a617a83f9cd3a145a6f5a7129c9ba120a6aea7639c4ea1cfa565a73a9c6fa1b5a56ca7229dc4a1a3a54ca7209d81a153a518a76a9d1fa117a5d5a64c9dc5a0baa488a63a9d63a050a4eca5819c60a069a38da5179bc09c98a16ca19a1a0f291231a53283a17395ac20b41e09a8329e2ea242a409a0db9d8ba123a4849d719d6fa1d4a3c99d489d2ba181a3e99c329ddea027a37f9cb69cb7a0bea20f9c9b9c7ba041a2ae9b069c08a0c3a1c09a639b6b9f4ba1549aaf9ace9ed3a0e399579a589e67a01c99b499d29d14a0d7985199839da99f4e98ea983f9d5f9f24989498f09c019f68974698a59c889e9c96ff975c9c219e5b96ab971c9cbd9d1a96c197d89b609db7951397369bf49c0595cc968f9a299c19940000411b811c6e8d38a415ab70acdaa0daa551ada1ae569f92a704af5db0b79d64a80eb00bb1781954a8e4affeb0521e93a7c2ae37b0e31b55a7c5ad55af9e11fda7e1ada1af3c9812a815aec7aff49a4ba767add4ae639a67a6a0acd7ad1d9c39a636ac77ade69b1fa6dfab17adda9cbea513ab8bac739c1ea552aaebabf99b79a47ca9d5aa2f9bdda3c9a818aaf29b14a355a879a9479c9aa2f5a70aa98c9c4da271a7b2a8cd9c1aa20ba780a8249d01a2b5a648a8689df6a16ba620a8369ddca133a6f0a7039daaa1e3a590a7529c77a1c9a553a72f9c26a19fa529a7859ccba080a518a77b9cc2a04da509a7719cbfa027a5e6a6c69cbfa003a5a8a6459caba0d5a489a6979c7fa0afa453a6839cbda0d2a474a6779c4e9f24a3f7a46d9b070c90094e0ea195fe8dfd940b98f093089d4ba1a8a2d3988a9d02a202a4ca9a1a9d7ba16da3019b0d9d3aa124a3719b949ce6a0a7a2b69a3a9c8da02aa2e39a1e9c34a0b9a1359a149c0aa082a1159af29bbb9f50a1fc99999b6b9f45a1ef99109b159f1ca1de99709a979ecea0249af5992d9e93a0f8994299bf9d37a09f999d980a9d9d9fda9822989c9cdf9e2b98c1975d9c479eca978b97339cdc9d5896a797329c969d0c969e96cb9b549d0d964b96219b949c85920000df1d251f280838a4eca96fabb49cd9a44bac3cad5599a1a50bad39aeb690d8a56dadd2ae751a44a69dad2daf071851a67dad00aff41739a626ad8dae72173aa6acacfcad9710f4a568ac8fad7896b7a520ac38ad25966da592abcdacd5980ca5fcaa6cac659abaa46daa22ac0e9a83a4faa99aabb7992aa47ba912ab6399f4a316a98faa119964a3aea812aa799b19a35da8afa9c59cb4a20ba854a9239d92a2ada716a90f9ea1a267a7eca86c9e97a2f8a6aba82e9e9ca2bca689a8019e7fa274a65ca8459e2da229a630a8079ebca1d3a5f1a7cc9d51a18da593a7879dd9a049a548a7519d70a011a5eca6209d3fa0eca4afa6079d3da0cea489a6ea9c23a0aba471a6d89c13a084a41ea6ac9cc79f50a4faa5909ca19f08a487a5019c0d9d67a143a3219aa097e19c299eec96a296ae9c509e03962b9c63a018a2f398bb9dfca026a3a29a769dcca0dca2259b249dcca0baa2769bc69cb4a08ba2d19a5f9c6ba041a2349a079c28a0bda1e4996e9b6b9f3fa13399439bd59ecaa090980f9b709e81a006989a9a209e41a03798339ac79dfd9f09989c997c9d939f2f971399079d029fca968698a09c799e679646986b9c229e8a950998269cc59d549507982b9c799dac9476970d9c6d9dbd94b396259bf79ce894252370288d29b6a82e2baf2e3430b4ab1a2caf2f763067ad751caba738a247b0fd9f55a8d7a2f5a10080008000800080008000800080008000800080008000800080439954983d9c5ca26da976a707a81f266429052acaa7e7282b2d9e2dd8a42a28b42b9b2cdea27528e62a512c9ca3f1288427fc2777a6e82882a4b4aab4aa952c0a2c932b69a9d12ca39813a766ab6026bab085b2fbac082cb6296f293aa8aa240e27f1270e18691d741fd31f3719e118cc1dcb1f9010ca18e61e1f205493f019701e1e20989549184e1ea31e1892b322bb223f23050ad82e002e532d54a6e9303530742f50a90c30ca2e342e3ba9612aa0226295bda701a5f8ad7caf10a77f103e1418184ca0e71b74227c24709ca01ba321fd223e9c441a2d21bf224c9c8b1a12217b226a9c701ac92051224e9c621abd203c223f9ccc197d20e021019c78195720a721b39be318de1f2e21379bc8187a1fe420d09aa9180c1f7c20ce9a6318811e45207a9a1418381ef61f2e9a6317d01d771ff09914179c1d401fc499c816541de91ea1997b162d1dae1e71992816de1c691ee8980c168d1cef1d5b98db15591c7f1db597e5150b1c431dd596dc15951bd21c6d964315721bb21cc2952415241b8a1c0d96ae14c21a851c8c951615361ac61b5695b21a5721c22405aa242a4b2d9d2e64aee428622a0b2a99b1f1a59caa6eac9ab1d7a60fa9b5a99c23fd9700800080000000800080008000000080008000800000048c3a9800800000e4ab3aad76ae082c05a5e6a778aaf8a64926db29432ac1a78824e02739286ca468231d242124e1a47e2266a5dea805a80027bea867ac6daaaa2b3997c8a78aac9e2c78a4f4aa50ac2b2df1a6a7ac81abcc2c5a200fa835a66d9af1a478a62414ed15311b531dbe8fb406d5142a13072091117d18d91a23214791a8948f925421a49acd99749a4f2201315230512fcda835318330a12f5ca91631ec2f252eb4a8f430bd2e942c04a8182d8325969dbfa4429b49aa0eac5f98229b18a4a8a4cb19f0117c17a41a168cf718e91fdb209c99cf1a2721aa222e9cb71a36219622df9c911a01218a22ed9c101aaf203622319d68195d20a121b49c0c190d2033219b9ca218be1ff620669c72183a1fb220839c6518e01e8020539c2d18931e4f20249cd317621e2420f69ba317f01daf1f2c9b6117ae1d571fda9afe16561d101f379ac016301dab1ea9993a16bd1c3e1e73999415491ca91d16993a15f01b211d9c98ae146a1bed1c2498ab14f21a971c6697a114eb1a7e1c09978514ab1a2b1cb8964e146a1a3c1ca6951814ef199a1b00975fa2a5a46ba312a984251d29ac2a4aaf401ff81f291adfb1e5a62aaa23aca7b11aa904abf8ab3e24098f00800080000000800080008000000080008000800000019a989e2198fb1114ae01b0f7b08228daa9caace9ae181cee1ad31e4c994ea88198b39f90a0d8a6679c2ca5f0a6f0a65d9c98a8dfa9b1a7c51fcda84aabcaa88c2928a336a91eaad52ce41693a8fbaaed2d28223ba66dabdd2e5829a2202eabda2e192c9e28d2a9279a8fa0a2a12aa0c89c9ba27ca37c23e09df8a3bfa41e25979db1a2fea3a624899f6fa41ca5a02466a25aa3a7a3710d1b306c2ee82ce3a92f321c31133095abc3316530af2e1bacd52e6b2cee29aba9eb1c3da406a604a05a9c6da237a3c699cb977c9d249da79a9a0ce815e3198c9c6318231f9820349fd8182920b821679f42199020dc218e9e3e196b20ad21249e001923205521969dbb18012009211d9d8618611fb420a29c4a18ad1e4e203e9cf317791e0d20fa9b8117181eb71f9a9b0517d21d661fba9baa168b1d0b1f5c9b5316421db01efd9a1016d21c611eaa9adc159c1c141e5a9aa115671c941daa9967150e1c471d0899ed14561bd31c71986714bc1a711cdd971d14221a041c9d979913d1194f1be5968c136919081b1a967712d218ac1af994f413af19231bc294fea4a9a667a504a915934b170e2134af56a29ba298a0d6b10ba99aad80ad27b25ca8aaaa9daaa425008000800080000000800080008000000080008000800000f89a569e5095221164ae88b0a3b17a29f5aadbadf5afc9a14da23aa55fa75ba866a39ea78fa833a7daa394a87ea91aa6c4a3f9a9c7aa96a64fa106aaf3abc4a773221ca8f6a9cea8eb2af595f4a712aaa72db32713974babe82e1d2b7f25d3abb82fb22cce294eac1a306f2e042d78ac8e3004309c2e7dace43053308d2fb0ac1f31a8300d30f4ac5e31db301e3019adb131e3301030f8ac053214311630d7ac283248314730e1ac5f324c313a3022ad7230b52e3f2d75ab94215d8fba9e78a2799ce19f24a0ed9b5199c19cc59c229cd18fa1142b18a89dd513c91c1d1e959dde15421e2f20d49db9170a1f7d20a39d47188c1fd4201d9d6f18ca1fff20169d6118571faf20ec9c3718f11e42207a9c71177c1e0420389c2117271ea51f049cc416dd1d461fa59b4316b51d181fef9b10166e1dcb1e9a9b0e162c1d841e499b9a15be1c001ef39a72157f1cc11d119b50153d1c771d539a0915a21b351daa999e14241bac1ced983b14871a3a1c27988613f0199c1bc1970713d3197a1b0e974f139e194a1be096e5111219eb1a5397ab102e17bd1867960080bc989699fe9158a3b6a4f3a254ae8da5cca548a590b1fba169a970a88db149a7d1a9a9a9fb24008000800080000000800080008000000080008000800000109c229e3996411181ad16b022b1032bb3aaf1ad04b0579b3fa6d0a8e2aa43a8d4a545a959aaffa729a53aa9eaa91ea61ca5b0a9faaa2ba751a5caaa1cac58a7ffa16caa35ac4ba8ec2517a490a84aa9c32cee26ca1cfcaad22ee82b912715ace72fe82c2f2ab0ac5d30912ef72cc7accd300130702efdac173165305c2f1cad6031c230fb2f4badb7310431313090ad18324e315d3091ad6c328d318e30a9adc332c731c530a1ad18330532ee30daad1e310e30b92e76acf123f91f3b191aa50c9e87a0dfa042a10d9da2a047a198a05f96c991ea8cc2a09f8cb519121cde9f880e041c911d809fd614a01d481fd79e3216121eb41f859e35166f1e1520449eb416541e2920329e7316f01d521f739d51169c1dfe1e489d2616471db41e0f9de315401db01eda9ce415fc1c751eaf9c8115b71c231e749cfc14751cca1df29bb914221c461d899b6614e01b211d549b2a14681bb81ca19abc13b11a8c1c629ae512c919f11b3d99251224197b1ac7976a11b318e419d9966a11a718f919f1968e118618ec19e39639118e18661a8a96491105181819dd9700804e985e981291dba5d0a72ea7ddadb4a688a853a90fb143a45aa840a850b1d2a9c4ab4bac7121008000800080000000800080008000000080008000800000259cde9fb79ef816d7acf0af0cb1be2854aa88ad77af1f21d4a72daac2ab09a83aa731aa7cabcea66ea60eaaf0aaf2a521a6e6a919ab30a60ca638aa82ab57a695a5a9aaceab53a7aea04fa90fab3ca88728b3144aa472a9e52d772a5626a4abd82f492d752bb0ac7c30fb2e2f2d5fadef301030782e8fad5a316f302a2fc0adaa31d830ef2f31ae0d3236314e3059ae773295319e3079aed332f131d43069ae2d333932133192ae8533903266312bafb931ba30073058ad81230b21e91c6aa6489dc99e939f97a1a39bd19b969b00a17d98f591c493b1a0f4947011ca1532a0cd905d17c418ad9f650ecd1b141d039f1d13271dd01ed09e76147c1dcf1e089eed145f1df61e889d24155c1da01e449d4915381d821eec9cd114c11cfa1d859cce149f1cda1d7e9ca214511c7a1d759c5614221c381d3f9cff13e61bf61c0a9c98137c1bb71cae9b3613c71a4b1c559bc012661a0d1ceb9aca12161aa71b299add116e19471b25996c11d118471a58986210ac172e19fe97cb0f06178a185397310f19161d18f595e30e381575150799c60c56143e153e9500804c993b992f903ea536a511a789ad8ca5cfa7cba63fb042a71aafada959b174a010ac89a1a2970080008000800000008000800080000000800080008000009f9beda051a1481a98ac8eb02fb1f22905ab43ae4ab0312826a8d9aa48ace7a128a715aaeaaae8a4b5a6efa9c7aacfa59ca60baaf4aa59a520a606aaffaa88a5d2a504aa0eabb4a583a5caa9d5aadba569a052a8a5a96fa7bb29ab23e79b6caa2f2feb2c3d2bbcac8e30172f732dd5ad1d313c309e2e3fae9431bf30942f7cae043236312f30bfae773284318530e4aeda32ef31e23041af4533383224316baf8d338d327431a9affb330033c831daaf113201311c301daeaa2363227a1e5aa6f79de59f48a04fa1409cef9c8a9d0da1829a6a99a399dba0cb97148b850c61a05d935d189d19e99f3a85f11b9f1d949f3a0ec41c1f1e7c9fba0fa71cfe1dd29e5011931cf61dba9ec6128b1ce21d3d9e3b13741c7c1d269eda122b1c611d619d8112851bde1cde9c0412d31a7d1c7d9c3512501af31b379ca211ef197e1b7e9b1911ad19c21a329b36117819e11ae19ac310e818351a9b9a9110a118a819059a5610351817191799670f9717ec189b98f70ebc1663181698070e8216f3175d97680d81151f171f97300cc914f51586966a0d8114fa15fa9500800794fa901592249e2e167b1d98ada79e7a1e6c2294b079a5d6aac8a8c2b144a5afaa65a8a2a10080008000800000008000800080000000800080008000003d9c579f069b52125bad12b1fdb18c26b5a94bae24afa2a0d4a4eca273a74ca83ba6b8a852a93da729a6bea8d5a966a665a687a976aaa2a6d3a61daa37ab18a698a612aa25ab20a648a6b8a9bfaa8ea576a5bba9d5aa36a6139f9fa7a8a99ba8ee2b9128bd2407ac2b30a32eee2cdcad36311e307d2eadaec331bc30972f07af4e325631433067afc332d831c830b5af3e335632363103b08d3393325b3142b0da33d4329c317fb04c34a2333b3292b01c3243315830e0ae8720f020821d62a5289d609f139f66a1559cbf9a539b29a1f79a7a98b39939a1e0989b913093f1a0d4953b147b15cba0af911a199d1a73a0058b2e1a1b1b25a06b84741a341c18a02a0a2f1b3b1c749fa20e2b1b901c1d9fdb0faf1b981ca29e6c10391baf1c4c9eea10401b6a1cf09dd110e21a331ca69da710841afd1b5f9ded10cb198b1bd09ca2106819921a809c251001192d1a3b9c900f7d18a519519b970ee2170719259ac00d151727182699bd0d6716b8177a98f30c3b15cf16fe97ff0b9f14e91579968c0a651394143296d90825120b140b94cb0a5611f2110e94008083989b97c591cba0829c589d75adeea042a10b19a6b00daae0af96ae24b0a9a5d0aa80a98e1e0080008000800000008000800080000000800080008000000097fc9a008000003eac9bb097b064237faad2ae22b062a506a750a55ba954a795a63fa907aa11a7eea5d4a886a90fa675a67ba959aa89a5e6a6e4a935abd3a571a617aa32ab5ca507a6aea9b0aa4aa4cfa53da934aaf5a32fa5afa856a950a41c9aeba4b9a6a7a7842cee29e3274face930b12f0d2efbaef331ff30d32fd3af78328231743012b00933f631d63043b0773384323f3162b0cf33d7329731b7b028344e330a32f6b07c34e333593208b137317030432f76ae7f1a3719329570a4c89ef1a078a169a0159d1d9dbf9d90a00b9ca09a079ba2a0d4999c96eb9596a07f984f91918cb6a0739512145315a9a02691bd183b1929a06f8dca19b21a21a02284e219ed1a8a9fef03ef19021b319f9d091e1a621bdb9e5309e119341b089f380c2d1a031bd99ec30bd3199b1a229ec20c3c19cf19659d630cc2183d199e9c520c21180019679c6a0c0318d018039c6a0cfd163518c09b170c6816b317179bf40aa215f215c599390adc14a7152799d50944141f15f498950957147e1403993008af137614a2983a07ea11a41256965c85b708bd0e4292008003908c8f9594b3a344a146a20bad15a33e9e839f26b01ca4f0ac7da7aeb05d9d86aab09f4e98008000800080000000800080008000000080008000800000e6964b9900800000089f3baff6a54b2099a059ad42a522a883a61eab3eaa12a80ea6c0a8dda9e0a664a6c3a877a9fea5e5a65ba9e8a911a69aa65ba94aaa8fa53aa617a900aa9aa5a4a5e4a8d1a933a592a5d1a8caa9f6a4a6a590a8c4a9a7a519a591a805a988a5249c71a587a71fa7a72c702a772865ac3b313f30ac2e62af6d32833170308ab040333732f430dbb0b933a732753128b11b342f33e73165b158349e334e32cbb14d346c3315326ab1f42e2b2ec82c7aadaf996f9ceb9f7ba4ff9d629fbca0a1a2ba9cf999d39b4aa3019c8198f499c7a2649a7696469842a2b8983691eb929fa19497b30a630c13a1ec95fc131715b6a0b8938516281846a04b9224179d17d39fb690dd176418629fca8e49171918449fa38ccd17aa17cb9e3b893a172c175c9eb788e415ac169c9d518882153e16889d9d82f215d015e49c7382e4147615979c4b82a6142715559c1c026114e014199cf50111148514319bc60167131814249ae204d212761451999f045a11371316996e040d12a611de985b0420103110a4986301d30f52119598c704cc110413439900006c1abb1aeb93bc9ce61a7b9532ac00a14c182d199db0dda767ad34ace8b0caa50fab6ba9cc9f00800080008000800080008000800080008000800080000022998e9a0080000055ac66b034b1f22583a9c4abafae81a6fda5dea627a99ca802a69ea86ba937a81da6a0a871a9aca64ca602a9f2a9c0a677a61ea91faa46a676a61da92eaac4a551a609a905aa29a5dea5bea8a2a915a56aa599a882a9c7a431a58ca883a972a404a556a81ca97ba48ea0e7a425a67fa6df2af7280b2622ab25314b30992eafaf05331b32cc3001b10534e832763190b152346033ff31ffb17c347033f93113b21a33f031bb30e7b04e294629bf271daada9cea9e7aa033a3c59e4f9f43a01da29f9df89b419dc8a1b79cb3995b9bdaa15c9bd0942b9666a14699158b858c3aa1a797fd10460c36a12d956515271548a13693e917da1604a1d9915118e417b6a08d90991878185ea0aa8e5b180e195fa0738e5117101827a0388ee6163a16c89fbe8d5a15c015de9e098dbb13eb13149e6e8c2b11f210129d158cc0108e0d839ce88b8b105c0d5b9cb18b4f0e2c0d349c1e8b310efe0cb29b788cf60dc00c899a898ad00a920ce7991a8c5a04a9057c991f8a2004428518998f89dd835d8b10994d899683a184d09785898983f40aa9960080e50ad0106998559dc89a5c958aab8ca0379e01194db033a1dfae4a1a9eb08e9cd4a9229f089c008000800080008000800080008000800080008000800000b894ba9969908002d8aa9eb084b0d91cbda967ae3eb09ea7b4a5e4a485a8f9a7aaa5bba778a8d5a5dea52fa8dea809a543a694a85ea999a46ea616a90aaac6a420a6e0a8e0a971a4d5a577a85ba986a480a54ba81aa920a43ca508a8dca8dca3d7a4e4a7c6a868a37aa443a760a812a224a4d1a606a8fea103a212a58ca650a4ed23b322db1b67a9eb2ec82d6f2c53ae24323e312d3006b14533fe31aa30bfb15f3256312f305bb1f42c9b2c462b05aee40a69197c9524a5479dd09e28a0bea13f9e189da29d12a1d69c2d9ba59ce5a1189cae98b698e3a1ce9ac896299664a19299849105931ea13c98f50a690c19a1e096f1130a15a9a088950a159b1443a08e94c5141a1640a09293c715c51504a055923b147015f79fdd91d7130c15649f62913813a412ce9ef690bf101d12449e6491560dd70e8f9d4491050d5008429d6d9050061688fb9c2990f485d08db99cae909085778d369c2b90928b35905e9b3d8ee18a908f3d9ab88d7a8af28e62999c8c2f8abd8e3999728c1384e48eff986d8ce3899e8e76991c8a53036904e3961b8dc48f4490ca950080b91555155595a49d6a9db79b3bab53a01a98821f25b0bd9f58ad8e2045b00d984faa3c9d019c008000800080000000800080008000000080008000800000b795099b3398220c5f9f92afe0a7ba19c1a22bac55a755a7dba5d6a9f6a9bda6a4a504a80aa9daa4aaa547a804a935a497a577a842a982a4c5a59da86ba92ba4b2a55ca834a951a48da54da827a95aa476a523a801a978a466a519a804a9b5a41da5e9a7dca862a489a43ba760a8e4a31ea4e3a633a8a8a2dca39ba612a810a370a3fea556a79ea211a000a296a4c5a5e321c51f1d1eaca829281727762612ab1e26202595249ca938162318c68f39a5f59c029e00a142a0a79f55a0e0a044a1a49e659e21a0eca1459d7a9ce79d13a2299c9498049a2fa2239bec947d9601a2069a988b9a932da23d99150bb78cbfa149981a14500c87a132979b130d12eba02f96fd1488117fa03895a0143f145aa0ed942112c21010a076949211c309619f2294110e4e89cc9e9e938107588f469e1393dc86aa91ce9d2793be8c5b93639d98924d8f6094bd9ce491bb8e09945f9c63915f907493a99b3791229052947b9add901c912a94de994591f99106944e999f90aa917f94049952907792f79478982b903c93d59459989a8f109345957e98668ee08d738f2f970000d419e51a5b90199d209de59446aa6b9dd0972b1f51af9c12baabb72326b0351406aa010d519d008000800080000000800080008000000080008000800000718609970f88e700669cfaad2da2a79ee0a0a1ab8fa2eca891a550a9e3a9a7a66ea5dba7f4a8c5a479a5f0a7a7a82ca470a52ca8e8a876a456a527a8eca8fba36aa5dba7b8a84ba260a53da8e7a8eea180a526a801a964a285a521a8f8a8d8a112a599a793a861a1baa476a751a8c2a169a4fda639a80ea216a4a8a6a5a7e5a2ada3d3a522a76fa2aea394a570a7c3a295a20da525a7b8a4e3a164a433a6aea43ca141a3d4a410a271a028a23ea44fa222a092a00aa235a1489fa29d639fa3a1ec9d4d9c339e4aa1569d039ab49b6da1bc9c4897b09831a1139cf4946f96a1a1fc9a918b5993aaa1f599160b9b8c9da16a990c116f0caea1c598c313240c90a117981b139011fca03097e60fb30a80a0c496f808580a43a01b96a5887990a39f96954e8eec92189fa395c890c695939e4395f9938396c69dc894839422985f9d7c94e4945098f29c1d94369571988f9cf5936c9510982b9c069402952798b59bc692b69458985e9b59920095cb97dd9a8591c2940398759a52910e9486970d9afb9160949c963299698d6291a3983d9c5f909995b49ba49d00001b1b0f1b1494929cdc99db9de1aaef9c8f97cc21d0aecd9b0aad592572afe68ef1a9140d089e0000008000800080008000800080000000800080008000005990ba9d0f995b0bc19927afbb93cc99fca42daddea9cba6f8a455a986a93fa669a583a7c5a898a40ea599a779a802a487a5eea7afa83fa283a50ea8d1a8c5a29ea518a8eea837a380a519a8e9a88ba236a517a8e9a803a2cea4d4a7b0a883a179a438a758a8cba13ca4c9a618a876a101a49da602a824a1a0a3fea550a773a117a380a5b9a637a16fa2fca413a6e9a023a296a441a522a175a18da388a4e1a067a138a310a49da043a143a2e6a356a19ca096a1aea20fa1af9f18a04ba14ba1069e5b9c779ee5a18b9c7c95959a66a2419c5492fb9895a2089c188ce496b8a2d79acd0bcf9358a21a9a7d11ca8c23a236994514828c57a2a498b710308ce4a1da976210dd8bc6a104985c896e9435a10e983e946c98b9a0a297259692995da035977f97899a0aa02296b497799aef9e1896c8976e9a029ec3955a98719a069d9b956798799a709c35952298029ac99bbe94c297209a649b6e945a97f499989b4894ed96a499cf9a5d949a965799139a879460969c984b996794ba956398109895942096c2978596dd92bb9575970798dc9082940c969f960000f41a0d1be997899e84a2dfa167a8f31dc42a2b2c67adc72169a48d2b29ae0f9fbcac6ca4e59d0080008000800000008000800080000000800080008000000c8f1a9fde9e4111e7a88ab019b0d4195ca74aae33ae09a46fa3169689a233a418a5caa6e2a7cda07da5d7a7a5a832a054a513a8d5a8bc9f42a5f6a7baa899a034a5a0a797a82ea104a599a78fa883a1cba442a760a8d5a19ca4fca63ca821a261a470a6c3a79da14fa450a698a7e3a11ca4f4a537a72fa2b4a3a4a5eba60fa353a354a59ba647a3f9a213a595a67ca379a2a0a402a61da328a23ca484a5dea1c5a1d0a30aa599a129a174a22da47fa076a044a1cca253a0af9f1da057a1849f339e729cbd9d819eb39cb8956c94be9fc49b97123d146aa0dd9a3415b116daa0449af8168218fea0a6999a161a1609a1ca994c11001365a14a99770a498c39a1e0986d90ce94eda0a4989094a59791a033984996b19914a011980098b19aed9f2f98ba98a49b7a9f83974f991b9c899e7197b899049cf59de596be99049c4f9d8096cb99049cbf9c109660997e9b339c97955199629b629b3d95e298d29ad29adf945c98039aab99aa9418981899c9980c94ac97f5985b9837930297d898ed974993e6967598c39759922796c6983c970f9479967c981396c01b5424b325f0a43e94e88e5b0f7ba4e81ab427202817ada69869ad1a2497af4d9b98a8069f6c9c348c00800080008000800080008000000080008000800000b596ec96fb885c017ca487aa66aaf012c19e3898f19804a892a256a6cca5cca503a4a4a6dca7eaa2eaa438a858a9ac9f0fa5afa8a2a9569faca4c9a7e1a881a080a4d7a61ca82ba197a4eea66fa87da2bea461a7bba857a3aaa470a7c8a84da3a8a468a791a802a46ba405a767a807a432a4e1a62da8a6a3ffa3c1a623a853a39fa376a6eda704a355a345a6b4a750a2a0a2daa539a71fa220a246a5cba6c2a161a17da4cea547a1e8a024a488a5a59f6da0d4a266a4a59eeb9e5e9fc0a0b39d1b9d23999a9ac59c989b6e0cae0dbe9e4c990b1b881c02a09f97fe1c7e1e9da0cc96751d601edfa15496bc1c081d35a396969a1b9d1954a3d69602174b126da28697df09d091efa14b98c794f4999ca1d0983499ea9be5a02299ef9a739d6ba01199869bff9d9d9fbc98ea9bf69d8b9e5c980c9c879e409e6698219c429efe9d4098189c2b9e699ded97da9b9f9daa9c70972b9bf09caf9b0497a59a7d9c969a4296169ade9bac99d195b5997b9b6499f99533992e9b2d99ba95aa988f9af598a39581980b9a9198b6948a971c998f98039489972299f096a71cae25fa2633a5f2943612301366aa1a9f29a28ea31db0819fe4aedd991fb0039168a93a9b0199008000800080000000800080008000000080008000800000838b6399238a6c005a9989ae4b992d9e16a25aac36a2d5a60da365a933a9f9a4f4a436a957aa4fa132a697aa33ac069fa6a661ab90acde9c65a50ea96daad99cfca306a562a642a0b2a400a8a7a81da4c4a571a9d0aaaaa4b2a50aa93faa7fa4efa470a880a911a47ea41ba819a90da46da4caa7dfa8bea36ba49ca7cba86aa35da481a7dea825a331a475a7dca853a287a3daa698a8fba1f4a279a65ea8d7a00ea26aa55aa73c9d03a117a460a5799952a08ba213a49497f09f76a081a27694d49cda927094669740988e1ec61faa9ad993af20ba21ce9cd286c321c022a99fb706a8215322e1a0a29164206a211ca286963a1dc71ef0a2bb98da1703198ba2d4986290a69100a227991b98189a2ea17c99fb9a519dada0ed99c49c9e9ef99fd499259d199f199f9d99399d2f9f039e34991a9d059f5e9de198fb9ce19ece9c9198cc9cb29e439c33984d9cff9d329bbe97bc9b389de2991697259bce9c6a99f496c99a9a9cda98bd96589a469cad98cd96239a069c42986d96bb99df9b2b988296e599589be596369511999b9b5398cc94f398bc9a7198481ca424ec25eaa45e9eaea530a7dbab6fa258a708a911af1ca253ae61abe8af559c60a8729f2b9b008000800080000000800080008000000080008000800000528d3294e7895c80079a11ad27a3929f8aa18aadb6a6b6a638a423ab88aa37a0a4a575aa72ac919a27a623ab69ac2693d4a6a7abbfac2c9c2ea626aac9ab7892a1a074a1999d991d73a496aa08ac52a150a506aa0dace6a3b2a470a9d1aa41a360a417a970aa76a340a4b6a841aab7a3e7a35ba8aaa9b1a2b8a32aa860a9d4a1c3a326a892a9d8a0afa31fa834a9609e31a391a7d3a80b9c9ca2a2a624a8fc9875a2eea596a7fa96aca14ba5e3a62f940da16ca4f9a52197db9f72a188a42e99399d769a939ebc97ae9c071c581d1c98eb90a522eb23b49b221672241125559f9e18e524a6255ea21513f822342406a4aa96611c8e1cbfa3c599f096c39bdba2fb998a9abf9d17a2fb9a469d22a067a1079c8d9e8da0bfa0f59bac9e92a00ea0719b9d9eada0e69e879a549ea2a0219e6e99bc9d79a0be9df398879d2aa0d99cbd98389ddf9f599cd898179d239fb09b9698ec9caf9eca9a4a98809c0f9ef799fc97159cb69d9f99df96b39b6b9d8299a3950e9b6a9ddb99c195629aa79ce498a495529a539cad98d494bd99e59b7b97c0947b997f9bdc960000b61e811fe002f5a29da948ab16a9fea653aebaafd7acb0abc6b252b44fafa8ac54b469b590a7d7ac78b4a0b500a6b6ac4bb472b5c9a407ac1eb369b4faa547ac97b3ceb4971c5cac0cb4e2b4881beba812b0f7b046a60fa865ad9eae76a4d0a678acb8ad8ca314a720ac3bada8a1d7a6caab1bad3ca139a5b1aa4eac18a1c3a0a7a503a7e39dd8a229a7c6a8a39fbca412a99caa50a021a593a928ab26a127a555a909aba1a1b1a405a982aae5a067a4c8a85baadaa023a496a829aac7a008a484a8f3a9afa02ea352a8d8a93ca0d8a244a89ca9d29e6da202a84ea9dd9dc0a1cea66fa8289b77a119a6c6a7af9814a138a5b3a64b8d78a066a3fba4141a34a0d29e639faf1ed8982c1d791f212060182d25d526f31ee51d21286f291790311d44283a2922a3ee12b7246e2538a57498971b461c85a4a29915953699c1a2669bc29c909edea1499c349f0ca13aa1c29b7e9f82a1b0a0b99a689fdfa143a0ab9ae59e7aa15a9f759a7e9e84a0b99d149ada9d05a04b9cbb99849d889fd99b66994a9d609f469b3f99109d5a9faa9b1899df9c029fe99af398749c389ec8996398f59b839df49887975c9bfb9c7198ff96069bc29c3f988596b69a7b9caf97bf96da9a599c7397ad96a99a439cdf954c957699369b08960000db1aff1d5a98bda04da6eba8b8a79aa783ae2eb09caaefa952b18cb2b9ab2fac84b3d2b447abe1ac83b4b2b5cfa919adc2b402b66ba9f2abc7b255b475ab9eab42b379b406aa98abf5b257b42fa800a90bb054b111a505a854adffaee0a3d6a691accbad04a2e1a50eac25adf8a194a56faba6ac0ea237a580aa1eace0a1f4a486a901ab84a16fa49da809aa37a152a47ca8cba9eda039a477a8bca913a12ea467a89ca98ea00ca42ba861a90ca0d7a31fa83ca930a024a405a821a9fe9e2ba3b0a701a9869f08a369a7c6a84a9faea206a770a86e9e80a2a1a634a8319ea2a275a60da8a09d4ca2f0a56ea7869da4a182a50ca7079c53a15ca5e2a68b92c2a02aa449a5341a979c249b499dc1200519d825fb275124cf220d2c4a2dbe1e5f201c2bd42cc9a6e9146024c725dda6019bce98519bb7a4de9e74a006a272a23a9defa0c0a204a0a49c18a1bba2f79e7a9cb5a064a22d9e119c51a0f2a1be9d8a9b06a09ba12a9dd19a5b9f52a1e79c2a9ab29ef1a0a89cc099409e98a0379c7099c29d5ca0009c0799669dfa9f1d9bd198f99c529fb09ab698a49cbb9ef7998a98719c7e9e6c994298479c149ee598b7970b9cf19dc9984297a59b9c9d56984197a79b4e9d459787958e9aa99de099b7950d9a469ce4960000c51c121f2d8d07a4c2a968abc9a5f5a656ae8baf89a87ca831b031b15ba9c8a965b1b7b20ca9faaa3cb2e3b303a7d9a92eb1bdb204a388a1e1aa6eacc39f31a48daca9ad67a309a903b02bb1faa770a830afabb004a77aa786ad18af73a512a783acc0adeea38ea6feab0bad7da2d3a560aba0ac0aa262a5c3aa3bac9aa1e6a4ffa988ab9ea04fa426a994aa689fbda375a8a2a9c39d88a30ca82aa95d9d5aa3d7a706a9239d3da39da7c4a8f29c08a36fa7a9a8d69ce8a265a7a5a8c09c81a22ea78ba8319d49a2f6a671a89c9d43a2cea656a8ff9d25a278a61da8309eeea12ea6dba7e89dbea1c8a56ba71e9eb4a178a522a76a9e49a112a505a7699eefa0b8a48ea6c29da3a0faa3e7a5f19ccb9f28a5e3a5d69c31286830b7318f9f0d216d2c352d8ba92d9e03a30da59ca322a04ba2b8a4979fd99dffa148a4a39eaf9d60a184a3c39d329d32a144a3069d269df8a0f4a2e79cbb9cb9a08ba2b49c939c7da01ba23b9cda9b03a090a1049c3f9b639f22a1919b909abd9ec0a09a9a469a579e55a0c699ac99b29d04a079994b99849d8b9feb98ea98419d1c9f6a98a598fc9cc19ef2975f98b49c789ecb970998649c0c9e7897b7971e9caa9d9896e297cc9b579dc396ef96ea9aba9c7996bb96ce999f9b65950000371cf11ccb89a7a395aa19ac39a59ba521ad3dae9aa62da790ae14b0eba739a8d4afd5b0d8a667a8fcaf13b1c3a4dba742af96b0e1a363a6ccad60af04a434a62fada0ae9aa4aaa658addbae7ca575a6f1ac62aedfa4eca548ac86ad34a4b0a5c2ab18ada0a38fa548abc9acd8a239a5aeaa61ac59a2cda41faaaeab4ca147a463a9abaa6aa0bea3dfa811aa719f44a389a8afa9f99edea22ba859a92f9f92a2e6a70da9c99e7ba280a7d3a80b9f7aa22ea78ea8c09e7ea2e1a661a87c9e4ca2a8a637a83e9e19a255a613a8089ed0a125a6c8a7da9d7ba10aa6aea7c69d35a1d2a583a7199e11a1a7a555a7f49df7a05da523a7cc9de7a034a5d6a6a29dbea0f0a4bea6799da4a0eca49fa6609d49a06aa4aaa5d19ced9373999f9b2499eb003e84f88a3793ff9a479f83a00e98659e4ca204a4f69a589de8a1c5a3789bf09c6da12ea3f79ba49c0aa1bfa2bf9b639cbba066a27a9b289c80a019a2409b199c37a0b7a10d9b009cf39f83a1ee9aa49b909f4fa1379b429b309f23a11e9bbc9ad09eefa0fa9a369a7e9eb1a0c59aab99079e61a0749a1699889d01a0079a9098f89c449f45993d989e9cb89eae98d6975e9c379e6e9870972a9cd59df597af97249c679d0797bb969f9b419d01973f963b9bc09c2f950000231d941edd92b3a3d6a94dab09a3bba446ac2bada3a363a5ebac15ae84a4efa56badddae10a472a6adad3eaf3ca453a68ead23afaea3fca528ad96aecba3f9a59bace3ad9da3a4a533ac5dad8ba34ca5bdabf4ac89a3f7a404ab83ac09a3cea48daa27ac38a287a41baad3ab86a166a4bea946abe1a023a462a9d7aa48a0c7a306a962aa659f4ea3aba806aafb9efca252a89ca9389fc5a21aa84ea9869fa2a2b8a713a9c69fa6a27ba7e9a8869f7fa234a7bca8cb9f6aa2e1a68da8989f58a2aea66ca8629f03a272a649a8279fa9a11ca621a8fe9e3ba1dda508a84c9fe5a09da5e5a7259fa8a06fa590a7f39e95a03da562a7389f7fa017a506a78c9e4fa0d5a4bda6489e1aa097a453a6fd9d04a06ea41fa6cc9d859ed8a2cda4ae9c7f99999e8ea07299f696829cd29daf969999f09ec5a0e498119dfca052a3619bf19ddaa0f7a2089cc89dcda0bda2ee9b269db0a084a2cc9bac9c97a04fa28c9b429c62a00fa2619bc29b09a094a1a39a4a9b4f9f1fa1f099f99aa59eada0a299c09a389e61a008995b9ae59d3aa03099059aa79df49fa9988299639d8c9f8398ff98ff9cf69eea976e989c9c6a9e73971998699cf09d86969f971e9ca59d3496bb97129c509d7d953497a89b7f9d8696e3962c9bc19cb394449a8fa55ba5f3a10528db2bf12cf1ac572b2230c33002aebf2ab12ee62f85b2e61ac3a893a358b2a39d0da89aa104aa5999c0a5d19ddaa7c599a9a4ff9dbba5c89f1ea816a310aa339482a42e9fb6b0f828a92c512d2db0d228892c612d99ac3c28c92bb22cb2a95f287c2a712bb5a8662872a452a877ac112c092bfa29bfab062e8c2ede2ed7a9792d012c242b24abd52292b222b45cade4a734b0ceb16ea5f0a03eaa30ac992060101816fa907797d11cf52148221a9f671ca721d622759b711cde209421c3963717a61cdc1cdc122296e89a3e90f41fbb2b7e294f2682a42e2f132b8125c1ab0a2fba21a6a5c0ae442b4e27bd1e79adc5202c20fc1e76a7f99c61a60fa83ea3d2183621c322a69ec41bd52147232a9d181abf202a22ad9c701ae7207722f99c711ac3202822d79c641aab20fd21719cca196e20ac21769c8f19462076214c9cf318bc1f19213d9ca7185e1fb620029c7218ba1e6b20839b2e186a1e2220339b0e18061eee1f479b7517c81d701fa29a2517721d371f6e9ac116471de21e4a9a8416021da11ebb991b16e01c3b1e8599cf15951cc31da498bd15381c681d5a98eb15a91b041d8e976716211b951c17978f153f1b9a1ca1963a15101b7d1cf1967d14a81a7e1c7896e7145e1a631c8895008007a62ea6fa9d68244b28bd2a9baf3229fe2c3e2d40b2ce288828a526c1b509ac73b003b124b337a85da9d5a9782732a438a5b2a5e324a9a2f1a4fca51225e0a80cabe8ab4029f5ab16af11b03db334271a29f52856b454250f28d528bdae8524b027282852ab0c237820861cb6a84124dca753aae3a9eb294296bea54face62c8029d92549adc22c791d8fa76badc02c70a9f9adcfac6e2ccba77eac64a9e8a1a2ab2bad4015b5a03ba9acaa1825169b2ba544a6ed258f96229f839f2224979c89a381a4bc242fa1b5a78da8a9263c30302dfe2a40a6b2308f2df72a40aa7930ad2c55283cac99307b2c6e27ddac082d6e25b29f77acc216dba6baa86ba8b09cdda4f0a5d4a165855a995c99a89d8017821d641f029db71a13217422889d701a24216f22fb9d891afb2040222b9ef419aa20f421089e541940207f21919d0c19cf1f2e21609d9318811fe0200f9d6a182b1f9f20ec9c5818e41e7120bb9c2818951e3d20849cd517341e1420589c9f17eb1d9b1fe99b6a17ad1d481f2f9b2e17531dc41e7d9aa616281d8d1e489a3916b01c051eef9999153e1c831d98992815b81b161dde98a314631bd31c9d988c14e61a821c2c986f14e51a4c1cf4977114a21a131c8b978113171a041c84952014b119651b56968289d6a70ca88ca0599d5d9c161798b00123c827c727ceb2e1206f211f1c1eb66badddb0a6b1a5b3eda91cabc4ab400eb6a68ca85ca9842266a51fa8e5a88f233dac90ad61ae1a25f7af6bb267b327b2afa203a6e9a6c0b4bb93dea0bea1e6af6e984da14da263ac609c05a507a63baa0891bda76ba9a0aae92424a5eea84cabc32a981ff3a15bac0e2dd0210fa5b6ac972d9d231ba5c2ac262ee927381766ac4b2e2329b32189abbd9c2da656a8aca249a1aaa890a91f2541a149a7a9a8e125a8a079a6aca7502530a35ca83ea96e25b3a2eca62da81a1c922f172d532bbaaa9a310730002e2dad7331e02fe42de4ad312e3b2bef283dac131ab7a38fa58fa5ad9ce0a221a491a20298d59ef79e929f7a8cc38a7c12d69fa116ad1d3f1f20a0c6187f1ff32012a047195a2062213e9f36196a20a021d39ebb1803205c214c9ebb18c41f0921bc9d4a18321f6620029d2518781e20208e9cc6172b1edd1f589c9e17d91d8e1f2c9c0d17961d481f3d9c95167d1dfd1e119c4416081da41ebb9bf915c61c2b1e679bcc15961ce51d129b8a15671c991d609a55150e1c401da899e1144e1bce1c57999314b91a791cd6981314e519cd1b6698b6139619181b099835132219b41a19976a12c418461a67966b14121a551b7e96c09829a84fa808a01aa6baa855a9d0b0969f541ee418a6b25d9d2121d8a1e8b556ad8cb0bcb15cb2d7aa19ac81acaa25e5a632a9e9a9f820e7a445a8c2a8eca392ac3aae1aafa4a31bb0c4b2f3b394b234a819aa04ac6eb461a37fa7baa73cb034a3c5a610a860addca221a8faa8f8aa86a375a98eaa8eaa369dc0a86daacbaa08264fa4c0a869ab072c991f80a58cacc62dc0271717fcacae2ea22aab2433ad5e2f732c01291baded2fdc2d682cf2ac4c30512f2d2edcacb7300c30e42e26addd304430322f2fad1b317c30882f5cad593187307e2f71ad9131b5308b2fa3adcb31e230e52fd2adef31d430b02ffbad5e2f672d552c55ac661e769afd9f31a5eb9cc2a033a1d8a0b399b99d559dd89f0f937b8bb80c609f6711621b7d1ca89f23156d1dc31f439f0a17a21e3a20649e4f18311f94202a9e3f18711fc120b49d3818ff1e76207a9dc617961e2a20f19c59176d1ee81ff59cc916231e8e1fbd9c7f16a31d361f869c35166f1dff1ea09c0216241dbb1e739c0616e61c751e7c9c8e15a31cf51d499c5d15551cb41d1a9c5815271c491d7e9b3015981b1a1ddd9a0615311bd21c229a39147f1a401c19997a13e119751b5d981813be19191b0998551351191c1bc7976b11b718ec191b979b10d815f91616940080c89fbba0ec9ad3a637a93ca99cb05ea44aa379a59db299a1c9a081a190b500ad9ab070b13bb2f7abcaac45ad6a23bda753aae1aad82348a68ea933aa852121ad34af38b0c01cbfaebfb19db26db2f4a701aafbab85b40ba6cda95baa77b051a5dda8e5a94eadf5a42da9d8a975abffa499a9cfaacfaacea454aa50ab4baa479f42a924abcbaac027c1a1b5a7e4abf72c0b27cf1cb6acaf2e1e2b9c26f5ac7e2f722c4f2968ad1f30ef2d652c85ad7930272f9a2d9aadc1301330912eb6ad17315a30352fe2ad6b31ac30c62ff9adab31f0300a301faef831273136302eae4e32603152306cae88327b317730a4aeb92f342e292debac381f710e2b9c36a5669e16a12ea1e5a1ab9c65a0f6a048a105985298099648a1db8ff917121ad4a0580e411b201d45a0c714ae1d1a1ff69fc915261ef01f879f5f16341e20207b9f2c162d1ebe1fb69e2a16c41d041fd29d2b16861d8f1eb89dbc153e1da01e8b9dd015fd1c5a1e509d8315c31c1d1e5d9d6915a41cce1ddb9c07153f1c7c1d979cd414171c331d239c7b14bd1bff1cf49b1414f31a961c389b00132a1a0d1caa9a7d125f19d31a0199b511a818eb1913987d1161189019819751118b188919d4979e117418d819e297f4101d187f190c97d01188173a18b0990080a29d099fcc9a2fa77da912aa71b047a62aa856a84ab211a10d9afe9a14b5f6abdaaf52b0aab14cabf6ac68adbc1543a862abb6ab531bf1a622aab5aa4b19b7ac1aaf17b0f39c85adf4b0dfb1ffb0fca89fabe7ac23b3b4a7dfaa1fac0cb086a612aae7aa03ad18a6e2a9bdaabdaacba5a3a9d1aac5a9c4a5b0a9eeaa51a91da50faa18abd5a9ba9d9aa86caa6caa33290c1e0ea292abb42d772a4c26e8ac862f072d8f2a87ad3a30432ea72ceeada530902fcc2d55ae0c312a30b22e86ae57317d30452fc2aebb31db30f42f19af03323131483009af56326f3179301bafb232bc31a63075af15330e32f930a6afb42f442e4b2dd4ace51b4f0e559afea51f9de09f94a04ea4039c5b9c229d5ba3de98e9945896dea1cb954e0bdb1200a1ca90c815c218e4a00a0eac1b971c3aa0dd120e1d4b1e03a0aa13181db61e189fb214f91c821e829e2415021d801e2b9e3f15e51c0a1ebb9dbb14be1cd91d479dab145e1c6f1de89c3d141c1c5d1ddd9c4e14d71b1d1da39c0e14de1be41caa9cad13231ba31c349c5313be1a671cfd9be5125f1aec1b899bc0120c1a871bcb9ae11176191e1bbb995b11cf183d1af598a51014184119a79835107a1793189398140f7d161f181f98040e87151d17b2981f0e9a142a161895008013a0c9a0dd9580a746a9c0aaf2af00a5afa6eca7beb183a39daa52a312b45da3f9b0e3a432b28e986aacad9bcca441992fab059e639dc5a10aab07a6ac955bac4cb0aeaf0ca0feaeb4b3a1b38daff0aa34ae7daf50b119a888aa32acb7afe8a69da962aaf3ac73a685a953aa7aab60a69da9caaa17aad4a5c1a9b7aa27a975a578a96daab7a8bea588a974aacea82aa029a8bca9bca9cc299f23ca9bf3abda2ea62caf2a83ad3630922ec92c79aebf30ca2ffe2deaae33316230ea2e18afb031e830d92f52af18322f313e309caf6e327a317c30edafbf32c431c03024b007331132f13054b053331d32113114b0f02ea72db62c9aace3096797a09dbca54f9e5ba058a06ea2869c4e9d7b9d51a1209a30995a9934a13998f18a658c15a1469488158b18aba0f784181b0e1d74a0140bf51b861d4fa0870f411c681dcf9f5811321c701d509fb011351c781d3b9f2b122c1c2e1dda9ef311c41b0a1d439e5912031b891ca29dd211671a331cf79c6111491ae01ba79c84119019f91a639c09115419b41a389cb9101c19631aa09b5910df18281a589b2c109e18a419bc9ae10f42182119ca99820fb017f4184699520ecd166618b4980d0e8d16fa174898240e81152817bb97cc0c6614e71478983a0cc11285141f9800801b9a579b379864a36aa2faa100b0b5a1141738989ab13ca43719a4a359b472a8c6afc5ac28b3a0a2b3ac18a68f9db2a58aaa74a97f1c55a151aa27a6771a5ea516af29aac3a344a98fb115aed9b1a1a3e6a91da5abb2caa555a7f3a8f2affda591a834a919ad72a555a8ffa838ab1ca65ba947aa47aa9ba6dea939abafa995a60eaa29ab32a944a6c0a9ceaac0a871a5d6a9a2aa22a9079e3aa77da94baa0a2ba127e1239facaf2fb92d6e2c99aecd30862fd72d82af5c314030b22eccafc131d430ca2f14b04732503155303eb0b932c731bd3061b0103311320731abb0723379324731d4b03d331a32fa3054b0f72c502ca22ad2ab799b269e749f37a4979dcf9e0d9f7ea28c9cc79b4f9c22a2cb9a6b98a2996ba2d3988791119309a2c09534146b158ea172914318821922a1bb8d6b190e1bd2a068846d1a7f1b85a0130a5d1a241c3da0600ef61a1a1cab9fae0f071b2c1c2d9f340f091b3e1cc19e20109a1af71b579ec610511a961b0b9e9310fe19ba1bbb9d3410b419cc1a299def0ff218521a909c270f8418e0193e9ccc0e1818f718bf9b040e53177f18a89add0dbc163018dd99000d0616e3173499fd0c4415cb169498190ca314531590976f0a68138c14af962c0a331209149294d00a4712491509980080039f59a0249563a6f2a79ea998af21a205973598b8b10ba4db9fa1a07cb415a985b05dadccb19f9c20abe79e8ba0369d74a9d4a166940ca34ca9f4a7050bdda54eae09aaf5a122a854b07bac55b191a6fba970aaeab241a712a8f5a9e6af5ca6dea88ca908adc6a5c5a87ba98baa04a619a9eca99aa974a6b5a9b1aae8a82ba6a7a9a6aa7aa8bfa55ca988aaa3a793a529a916aaa9a615a57da813a9fda60ba0eea5b4a74aa88f2a5127ef2233ac25304c2ee72c24af45317830162f65b0ee311631193079b0763275316730aeb0f432e431ce30e6b046334432203108b1cd33b932703128b16332623174304db0fd288a28d526c0a9c39daba078a139a2779e1ea060a06ca1239d9d9d509e7ba13b9ca09b289ceaa1e99999961d9870a169982991688c5ea11b95df13251546a12891ee173419d9a08e8dff1892199ca0278ac119d91931a0d3835019ed1ad69fa0039119a11ada9f2b09e319791aaa9f170ca719eb1a699f7e0b4c19821af99eb70ad218d019f49d660c6c184e196e9d480c31180a19ec9c490c5a175f18b79c410cf4162918459ce50b46167d17b09ba10a0015c8154b9a0a0ade149615c099f8094c14f1146f99f2078b1348141b99b1099c136114e2987707131203134e98ac011d0c2d040c970080159176912c9c0ca429a28da416b09ea3b1a328a17bb1119abf1fad2345b4951c48b0c92206b209a022ac44a4a09fe7a48fa949a95614f1a3cba928a9461430a560ae6eaac0a1769e28af70a50fb132a598a528a8b5b2f9a5bea84ba970afdaa503a8f6a8aaacf9a561a809a9c5aa85a6b4a878a978a96aa639a922aab5a80aa6f9a8d7a949a878a5c5a8a4a933a867a583a868a942a893a568a86fa91aa8f2a43ba8dfa85ca7f8a017a601a833a877281125d21eacab572fe32d322c53af70317030ea2e98b08832773146300fb1eb32ec31b03060b18e335b322131bab13b334432073193b1e92f8e2e332d54aed51ede1d5f90b7a88d9e3ba166a270a4779e9c9d5a9ea9a3d89ce59a469d8fa3f39b6e98d99950a35c9a68962698aaa20c995194ac92faa1a0979f8a478c7ba11696bc100a1229a15194f6146316e7a0e292c815d91548a099909216051731a0d58e2a179416dc9f818eaa162216549f628c2c16b915d69ed18bca1580165a9e4a8860151216ef9dcf871115b415939d7082cd145815fb9c4a8291140815b09c28824f14c0146d9cf88102146b14d59bcb015c131714e19aa901d012aa13729a8e0164114b13229a82013411c311ec998101341041109f995d01f20f61113b999901e910e1134e990000fc17c01b9e90a69e92207323c2af89a0191d4f21a4b1cba11022de192cb4d2a828b067ae28b26da409ad94a800a066a213aa01a87c0bb89f5ca965a57314eca9aeae36aee19095acbbb24db21db1daa85caa97acb3b2c4a542a8b8a814af66a5d2a781a836ac6ea543a806a969aae4a59da87aa97aa918a6efa8e0a9baa812a6c8a8b9a965a8cca5b6a898a9dba76ea592a865a9fba624a56da844a98ea6eba466a855a92ca6e4a471a84fa917a6baa2aca620a833a7b220e89aeba1d2a9a72cac2a78289fad6630952f3f2eaab0ba31d630a92ffab0cd31dc30b32f26b1d62ff52eb52d7fafd52701281c2631aac69c799e46a153a4df9feaa087a16fa30f9edc9d0b9e49a35e9df49b459d34a3a49c9099409b6aa31d9bbb941b9690a242995191c9925da2c197930a370ceda1dc958f130c12aba121945f16b0169da1ab913c171b1620a16490e9172717dea03490621722189ba00690f81568165ca0ae8faa15b6141fa0268f3e145814999f4d8ece1176116b9e878d0b11bd0d619d2a8da80e6a0dda9c148d7a0e3e0db29ce18c450e110d549caf8c2c0e9606389c928ce90dbc0c4d9b778cf20a2506b99a598c6a04c2054c9a0e8c200439856399608be283cf844299d98a81890b8b419854897789fe84d6980080830e3c17399c9ba037957e231cb017a07a9615188db1e4a291a7ac991fb4b09e73af6ea4c7b1b69832ac199f38a1ca9ef0a9eaa4a0942ea2a6a95da863167ba906afc2ad459c83ace2b230b257b0d8a900ad1aaff9b19ea58da7b0a889ae12a5a6a704a81cac64a51ea8cea821aadda572a83aa93aa940a6b9a898a93ba8e2a589a86da9d3a769a552a828a9a6a61aa506a8c3a890a6eea4f5a7c9a850a69fa47ba78ca8ffa579a44da75ca829a516a4dda6cfa79fa40aa3f7a569a74ba557a16fa39aa5b9a74d176890869a23a9112645259d241fab88265c25a0247fab481fae1c0f1712a9489d139f40a1baa4989f47a0fba016a2c39ee89e629e32a21c9e629dd69e4ca2239d1f9c989ce4a2659cab99eb9969a2bd9ab8963f9838a26f998694cd95f2a17798d28a5d8c97a12797a510ea114ca1589548107811e6a07194b8124f14a2a041945812121495a02993f511a9134fa0a79283111713fa9f0b921711d40f579f8d919a0d370fc49e5091f8067f08539e3291a4064588bd9d0b914686138e719dcb90e385c58d2b9d96901e8c81909d9c1290778b2490099c028fac8a538fc69aa38d498ab18edb99848d138a9b8ec7994f8d0d8ac68eed99a18cd689a0901d9a118a5b0381049a97718dd28d7a8dd896008021115818789bc39f0a959d21ecaff69e2aa0319870b1ce9e25a50923d4b3df9cc9adf3187db11d9137ac4d9568a2a997b4a9759e4e98669dc9a918a4628b4ba9baae15aedb9fdea801b111af3ab009a4851822a68ab176a427a831a9cdae27a56ba7a7a800ac46a53da8a7a8f0a980a526a8e2a8e2a89ca581a807a936a885a543a80ea9a5a748a506a8cda8eca63da507a8dda86aa619a5dda7c0a803a69ba435a761a8e5a532a4f0a608a81aa51aa498a6fba7daa4f1a38ca6a2a7a4a47da3e7a51ba751a4dea24da505a72ba5caa286a41da64ba439a1b9a29aa421a497a0e6a28da43ca36ca0fda1aca3cba232a07ea057a187a25e9fd89f60a0a9a29a9ee59e21a000a3679d7a9cde9d14a3629c9c994e9bcea21d9be8946796e2a2e0998f9151938ea21c99ef8a808c0ca27198d810298cdaa1b4978310cf0b7da1b0963910340b11a1b395d30ff710a7a06a95450fa31058a06d949b0ea909f69f1394fe07d98faf9f34945487418f1a9fb893098dc793879eee92b68f9d94c49d47920c8f3694449da0919090c093a19c40914c907694289c5a914d915794b29b8a9131913494129b7b9124920394629a2991d3928394bb99f390919201952b999e905393d094fa98bb8f10935b959198328e258eb08dad970000f215111ae396609dc294951f1caf529dbd9cfe1defb0409b33a5b51967b3519faeabff983bb10b148da6ee8e6aa1ae9dd8a9c4a4469a75a1d8a9a3a8e79c719f02ad8ca7e2a4b69cd0ad619e74b074a3eda58da49bb106a5f4a703a9cdae0fa538a793a84dac1da5f2a7a9a8f2a94da517a8cfa8cfa843a50ea88ba806a820a5b1a79ba853a707a5e4a7c8a873a60ea50aa8e5a8a0a508a5b8a7a2a81ba5b2a470a773a8b6a478a417a73fa87fa42ea4a4a600a83ca4c5a332a624a7dea356a3aea5eda6e0a34ba34ba585a6b7a30ba3dda451a683a445a252a445a555a4b1a134a34ca4b6a3e9a08ba1a1a20fa307a08da058a1bda1d19e559e02a0eaa10c9e4d9c719dfca15b9df999a39b6ca2ba9cb798029a2da2169cf396679690a21a9ba5913b937aa2759afb8a7e8c51a2d3998f0a440c00a22099050ae10bc9a14a987d09140b32a127982389838afca05897488f9f9087a08796a5910d953ea0de9538930f96e99f62954294ed96669fff94c8949b97959eea943d95a498249e9b948895c798a89d3694c2955998269d199447956898b99c989370951898639cf29232954898009c1b92f494b897899bce91ab940898309bab9186948697619ab89154947a96b4991f8fe7927096ac99b492be94b8972b9800007817fb1a3499509e6494169c8daed89ce5a2b917c4b0089ec4a8ef2206b36d9c39aee998d5b08395e9a9339afba1129590a6d79c9b998f981aa9179fe394739effad8ca456a3cf9e62af90a55cb062a47ca715a928b14da496a7c4a8caad93a4e1a56fa78daa5da41ca614a7c5a8f4a4f2a614a814a844a52ca73fa8f3a663a598a755a853a650a599a78ca849a519a5f3a78fa83da596a4a2a763a87aa46da416a746a830a41aa4ada60ba8eda3d3a349a69ea778a369a3b5a5eca610a300a338a558a6c0a259a2caa4d1a577a2e1a12ba404a51ea26aa12da350a4d4a127a17ca2bfa389a1c3a072a187a244a12fa097a015a1e5a1af9f009f22a01aa22f9e9f9bb99d0fa3119d8f958c9a18a3639c5895619a44a3e19b118cc396efa2119b9c8b50961aa3429a0e0bf992d4a23b998e0a8a92ada2d5981a0a19927ba27e984390c0940fa258989094b79777a115988996e099fea003980d98d99a98a00f9795988d9b2fa056968d98539b2d9f53969b98559b629e1a96b698cf9a6c9dfa95b598e09adc9c969562985c9a479c229520986b9a099c9294d7972f9ac79b3f946697d299529b61947f963499a49a7f94b696dd9888995b9420965198a39890947e961e98a0977193ae95629794987c91d6948e9646990000be1a061e09993aa1aca591a73eac309ec9a298177aaf4324fb2a812d2bb298a450ae20a9feaff4a49eac8eaa5fa4ab9ab7aa25a3a99d429beba921a3689cb8a1e8ad14a84da495a380b0e5aa7eaf55a1dea803a5aab053a39ba4f1a4f4ad7fa4dea647a769aa21a5d7a7a3a856a81ba5b2a78ba855a60aa584a774a859a5e4a425a74aa855a5a9a465a772a8c1a490a40da73ca8b4a477a4c7a614a8b0a448a44fa692a707a434a43ca678a79fa307a4e4a51da7d7a398a38aa5c6a676a337a337a570a69ea3d5a2f5a467a6c8a35ba288a4e1a571a303a2f1a363a5a6a29ba156a3bca462a2e8a0c4a16da3bba121a0a2a0f5a123a1e39ed69d8c9f5da1a59d8b9aec9a31a16d9ce2927294bea1ac9b620ca00d27a21f9b1e0cea131aa29b9aea119e1382a26f9a9611d60c7fa2669ad78a8c8c65a2cb99b3901c9501a25b9902951c985ea1b298fb96199afba0a09841984f9a8ca08f989199019c44a03f989799059ce19f9b978e99419ce59e4097f7992e9c579ec096079ada9b729dad96159ae09be59c6b96ab99619b959c07964f994d9b119cab95d498c39a269b02954598049a5c9ad6940a986f996f993f949b973f99f298c5936397d498d49809945197be9875981a92879620992099aa94e0957c9831980000ce214723bc9bf216522223249da91a1aac24932667acdb170d9fad26c4b237a632b11faea1b0aaa48cab24a99b9a0ba243a874a6070a889b67a79fa3568adda1c8ac05a802a10da150acbca7f7b0559f09a3ec189eb127a2d3a5c3a485ad1ca44ca60fa8afa994a409a826a967a69fa411a81da9fca43da4f9a65fa8bfa41ca467a60fa8dea47ca49ba7dba82aa5fba424a85da9e8a414a531a866a97ca4cea437a855a97ba4a5a402a804a937a462a49ba7a4a804a417a444a74fa829a3a7a3bca601a8dca239a35fa6c3a7a7a278a2b6a504a7f2a1fea1faa45ea623a140a14fa48aa5cfa0a7a00ca387a43aa0a59fb6a0a8a1699ffc9d099db59d789ee69cc0955e97bc9fc39ad2176d1a76a05d99171c3f1d13a14f98821cd11da5a13798eb1cfe1c28a399971c1c2d1c18a4949779190b18a7a31898b513150c05a3ac984f93379871a20b99e1983b9bd9a18f991d9ae89c33a19f99bc9be89d91a016991d9c119eee9fd3985a9c169e389f9e983d9c6f9efb9e7c98519c6d9e6d9e5998109c139ed49d2498cb9bc69d119dfb97649b209d419c2297909a709c4c9b4f96169abd9b4d9aee95b899609b019a34964599249bd099df95ad98909a9a99de958198089a72998a9574970799c2983c94dd974c99ca960000cc22ac2425993a0bbd1d761f43ad799be1a1c5a1e5b0569dbaa9779924b4e39eaeaa0e246eb1bf8f33a5659abf9e8f8d0aa7560aeb9351882ea89395f793419483ad8c9bbda2859025ae249e8bb0fb9d0f21701f59b141a460a666a63aad66a481a8c9a9e5a83ba562a9dfaa40a50da604aa28ab4fa2f7a492a74aa864a13ba4fba449a6fba2f0a4a0a8a9a992a4aaa5e0a96eabd8a45ea57ca9e2aafea3eaa4d8a8fca96da3a5a46da879a920a39da424a828a9e0a27ea4cba7e4a831a25ca47da7b7a8f8a114a4e4a677a833a17da362a625a885a05fa274a516a7ce9f7ca138a47ea5319dafa0d2a26ba4129b2fa035a121a36599f89e709cbb9de19a229b731a311c319cc59636201d21ae9de493be20cc21da9f42903e211022b2a130909120932103a3ed95fe1d081fdea31d992f18981af2a3349a598a0b0cf2a22a9a8997c5982da2ec99ef9a6c9c7ba10e9a779c2d9edaa00b9a279d139f32a0fe99449d399f879fa399559d089f759e5999329d2b9fd19df598e39cc29ef99c9698b09c899e659c3b98449cfb9d9d9bd697cb9b4c9dbd9a0697449bdc9c2f9ada96d59a9b9c87999696959a419cfa989e96209a1e9cd1983196aa99b69b6398ff958a997d9b42981e95f9981a9bc8989894e598e09a59980000271fb320389e419e47a32da53cadc6a1e2a8bca935b0d8a44fad3fadb5b3b4a65bb110ae25b1b7a31fab28a8999d6499aca6ab9f7b937290a3a628984a95519737abb79ef1a1079db8ae361868b02ba053a946a2f1b0a7a244a94eaa93ac85a406aa20ac9da86aa5abaa42ac38a523a66fabc5ac67a4c5a4dba989ab159d80a2e9a6c0a73f1856a46ba9f0aaa99ee3a47ba9feaac8a1c6a450a9eeaad3a1bba42da9c1aaada198a4f9a885aa7ba158a4b7a82aaa45a11ea464a8bea9ada096a3efa743a97a9feea240a798a8cd9d9aa2a8a64da8ce9a70a21ca6dba72d993aa25da5c8a67594a7a132a4b2a57897dea034a288a46699f99eb59d0ca1449b019c5d16079ac09b7497bc216622bc9df91039242425719f19166c24342596a26715b1235d24c1a4f990921f6620cea46799ad8a919209a43c9ad59af29d04a3929ac89c15a04aa2af9b4f9ecea0d4a1d69bd69ef0a01fa1b09b269feea043a0399bd69ec2a0b39f3a9a6c9e85a0899e8c99dc9d56a0d49dfc987b9d06a02a9de0983b9dbb9fbb9cf898159d199f0a9cc298f39cb49e389b7398819c079eb39ad597fa9ba19d419a1497759b509d189a4696fd9a2a9ded9904966f9a899c62999c953f9a199c9598d394b599cd9b3e98b0943d99239b42950000811f5e20e690d8a1a5a85caa5caa5ba501ad40aefdad4aa9a7b0ceb1f7b037aca7b3dbb4f7ade5ac68b48db5c3a7b5ac68b472b550a45dacf3b3e4b493a8cea95eb194b282a9fea95bb1e6b244ac1da858ae02b07cadcca6acace8add5a97ea666acb1adbfa756a6a3abf3ac78a572a659abb0ac7ba408a566aa13ac16a3eaa16ea79ca8c4a074a317a82aa91ea1b7a407a99daa5fa1c9a412a98daa7ca1d2a4fea86caa76a196a4cea842aa52a150a493a8f6a989a100a477a8c8a9fea0a3a34ca8aba988a03ea32da893a988a0b8a213a874a9939f29a280a7faa8199e7aa10ca610a8a59c05a116a5baa64e945fa04fa317a50019559e4b9de59e711d5a9cb51a161d6f1f7014af243e26b81f531d2e2821290d10b41e9028b429eca2e913ed25de2631a6bb9a1e20371e1fa6229bd190da9861a4a79a039ca29d92a23f9cf19ea1a0f4a14c9ccc9f90a139a1ce9b839fbfa1f0a0f49a3f9fc3a180a0739aa19e44a1a59f409a5c9e7ca0059ee599d49d01a0b89c83997a9d7f9f8a9c4099389d509f399c1499039d399f2c9cd898a39cd99e869b8798569ce59d529a0b98c99b369d71995197469be39cf698d896109bbe9c86988296c59a869c7498a096e59a509c849825968a9a549c43982d95f4989d9a869700000e18fd186991e89d0aa58ea7a0a681a6b0adf6ae71aca5a84eb045b124ae4caa08b29bb3eaaefaab5ab394b45eae5dac3ab43db5d8ada5ac32b448b591aed7a978b1f5b2dcaef1aa6db207b4d9adc4a971b0a2b1f2ab1ca83aadd3aee2a89fa65fac8bad9ea7c8a5d7abf9ac52a693a540ab83ac74a522a558aae4abc5a4c1a456a9c4aa5ea455a4aaa8fda9dba374a498a8dea993a374a484a8a7a930a337a459a891a988a21ca432a86fa90ca2c4a31aa849a990a1aca308a829a9bea13ba3a3a7d5a8f1a040a354a7afa881a01ba301a77ba818a0bda2a1a634a8619f83a258a6f0a73e9e08a2c8a554a7c19d8aa19da53aa7359cd4a0cfa4fda5ed12df9d24a024a1cf208013aa2434263125bf217a2baf2ccb232523272c412d3fa6c71a12275b28bca85d98e016801807a6969ded9fd5a1b3a4c99deaa071a235a13c9d0ba19ca2ce9fb39cc2a069a2ed9e809c89a029a2819e249c36a0c9a11d9e779bd79f97a1879dc19a369f39a1489d3a9aa49ee0a00b9dd4993b9e8ca09a9c8499c59d37a02a9c2999339de29fc99bde98f69c3e9ff99ad198a89ca19e369a9798769c6b9eb0994098479c049e2899aa97019ce29d0a991b97b59b909de5980a97779b639d74985a95939afd9ca398e1947b99169c269800004a17ab1b3a94c49f18a7a4a817a6cca59dadb2aed6aabda71baf7ab064acdfa893b0a2b1d4ace5a97cb1d2b2a8ac9aaafab18ab395ab73a7b6ae37b021a8709e7ca855a902a493a4c0abedac09a830a836aeedaf70aa45a776adf3aeb9a93ea663ac94ad14a8e8a58babc3ac5aa66da5f5aa53ac5aa523a551aae3abb9a4c4a4cda940ab21a47fa41da97caa7ea31fa4a1a8dba91da3e7a33fa85fa9a0a2c6a317a81aa9ada188a3c6a7eaa82ca169a38ca7cba855a14fa369a7b5a8f4a005a356a7b2a8dea094a2ffa689a8b4a079a2d2a65aa895a058a299a641a829a0d8a132a6f9a7ea9fe0a1c2a5a5a7b49f8ea1a1a599a7c69f7fa122a5c5a6b79e24a1e4a423a6b89de19e46a5f0a6e09e4224aa2c712d63a24d2835301c3157a908a0dfa375a51da564a09ca2e1a45da1d59e86a296a4f59f5a9ddaa1fda3a59eca9d84a19ea31f9e3f9d30a119a38b9d2b9d0aa1caa2249db79cb6a075a2249d629c61a011a2af9cbc9b02a08da1b29c1d9b579f1ea16a9c469aaa9ea2a0c59b1c9a239e38a0dd9a9e99ad9d02a0849a4899819d819fe799f298419d179f61999c98fb9cb89e95985398b89c3e9e78980698649cce9d4398a597f09b639d8f979197a09b099d9697f996b89a899c36975297f599959bc1940000831c741d138f53a325aacfabd4a63ea5b9ace0ad26a95fa6d2ad56af3daaa0a714af65b0cfaa1aa880afc2b020aacfa721af8db03fa905a695ad26af7ca883a42fac42adcda7b2a4e1ab0ead22a8b2a533ac77ad70a8a8a5fdab3bad93a74aa542abc3ac44a6eca4bdaa52ac39a5c4a454aa07ac7ea475a4dea959ab80a339a45fa9abaa9fa2f6a3f8a831aa3ca2a2a39aa8c9a97ea12ca33ca858a926a1fea205a813a9e3a0d8a2b3a7dca866a0b9a268a7b0a83ea0a7a208a770a813a080a2c9a64aa8e19f25a28aa624a89b9fe5a14fa6fda7569faca113a6d7a7aa9f4aa1dda59ea7729f11a1b5a556a7489feca06da52aa78a9fc0a04da5e7a6f59ecba03da5c7a6d49eada0b7a404a6419e439a909feea0059ca5045a0d510d2b9504960a9bc49cbd96c99d93a1d7a29b9a549e03a2e4a3279c989db1a16aa3769c2d9d5da1f8a2689cbd9cf7a091a24d9c579cc5a042a22c9c2b9c70a0f9a10e9cf49b36a0b0a1de9bd39bf19f5fa1b89b7a9b899f45a1fc9b009b1f9f20a1ea9b719ac39ef0a0179cf199589e9ea0cf9b7a99f19d4aa00c9b1599789de69f499a9498f59c119fe09922988e9c839e3d99b897549c299ef5984c97159cc59d7b988d970b9c719d3a9896967a9b069d60972a96089ba59c8d950000491bad1c849200a37ca922abefa55aa405ace1ac2ea70ba5b0accaad17a8aea52dad77ae91a818a680addcae77a8daa548adbfae3ba86aa5d1ac33aedea747a536ac68ad08a701a574abc2ac95a6bfa4d4aa5fac20a68da457aa0dac8aa565a407aaa5abe5a443a4b9a943ab54a415a46fa9ddaa8ea3e6a325a989aa94a28ba3dda83daaf1a127a38fa8dca956a1d7a24ea87da9c2a0b1a211a84aa996a09ba2d4a706a9b4a09ea27fa7e1a891a093a241a7b9a86ca04aa2eca68ca894a002a2b5a66ca874a0c1a17da64ca854a071a131a625a83ca034a1f7a511a864a0e8a0ada5f1a785a0bca07da5a5a76ba0a1a03da56da74aa08ba01ca51da72ca06ba0e1a4daa604a03da0aba47da69c9f369fd9a383a5c59eb29a19a0e1a1399c0797239d1e9f37993a99339ea29fd498299cb1a025a2479bd09d5ba196a3a99c619e24a13fa3989cc49de0a0b7a2679c109da4a062a2799c7e9c73a017a2219c1f9c4fa0f0a1079c8c9be89f7aa14d9bff9a149f13a1059bb69aa19eaba0589a819a429e67a01a9a169af49d33a0f199b0998e9d0aa0b6993c99429d9b9f2d99f698f39c059f95987b98a29c489e01981d984d9ce39d81979f97019c739d9c969c97089c369d53960d979a9b439ddc96ec96ed9a8a9c2894008021a28ba4c89c28287b2b802c42adfb2a392f2a3043af5f2b472f273062b1e62ae82ebd2f35b5ca2375233626efb5f320f59960211bb65c20af1f71251ab58e251a29202a75b44629632d222e28b3e2298c2d872eceb09b28102ceb2cfdad64282d2b762c69abac28a42828294aaba02625aaf3ad98aeff2c4b2dc22cc8abec2d1b2e462ea0aa372d0d2daa2cddabda2844afd0b166af3c2aa4257b2343ac7319fea1b1a459ac0ba660ad93ae89aca7a90ab12bb2bca8dea98cb1a8b2f8a278aad4b1b2b2c2a27caaf0b163b311a88621c9afa3b10bae2a2ecd26a49ec6b05a2fad2ccc2ab6ae2c2f7e2d9a2ceaad7f2a112ad6297aaaaa220b25fe2579a48a94ad9d9e9f04a37d945998339c54a1c11a7a21fa23929e051b10219d22169d2a1a9a20da21dd9cc71ac2205d22109d9b1a9d200222269dd9195320a421d69c7d1925205221aa9cdb18991f01219c9ca7183c1fbd205e9c6e18d21e5c201c9c2a18591e3120259cd0171a1ee51ffd9b6c17c51d9d1fb49b42179a1d391f239bb3164e1ddf1ef49a8b162b1d9e1e5f9a5516e31c391ed499ba158f1cb91d34999115311c441d83989515821bd01cbf978e15051b681c489746151a1b7f1c6f974115331b871cc39765148d1a681cc197c515931a581c189700800098f39e90981e28902b532c49b03f29fd2c112e58b26d29eb2b492c8bb4632854295d28b2b76ea536aa47aba1b7b4a839ac6dadc9b7cba7a1ab7bac51b7579745a14ea229b78228e22a2e2b1fb7a12738290c2a2eb418256528bb28cab04a24cd260c28ebac2922b5a055a4e5aa442505a878aaccac532bc42751232fad2d2dd12b272a75adfd2c1e263997c1ad732c26a7acac01ae682ef82358a5f3ada02c1a2471a4f2acb7a000aa23ac30a9c6a25cab9cac5fa3dea2a3aa03acac9258a4d3abd2acfa1853a55aaca7adaa9c7c2e5b28261fbcac5e30982ce828d1ae71306d2d482aceaf4a30fc2df62bafae562c242a872894ac431c2c9b03a0a9a87b9a2fa2aaa36ca4bb93c09e37a0e3a00b16b319bf1c54a0071af920ff211da05f1a292172221e9fd019b6201b22dc9e321a8920a121749ea419242085212a9e1e19c11f1021a79db3186a1fc0204f9d7b181e1fa020689d5618d81e6f202e9d2a188d1e3e20f59cda17291e15208f9ca117e81d971f5a9c6117a91d331fdf9b14174c1dd71e1d9b7416f61c641e7a9a2016851cda1d199aac151f1c881dc4995515d71b161d2999c2146d1bc41cd5987714d41a681c9b984714c21a351c25986714811a001ce2975213d8199f1b5596c1131619581ac5950080fe972ba02498811a4c1e9a1fccb0962217284a295eb30d243b25032638b55324ed27372728b84ca792a96faa5ab875aa83adbcad09b8f2aad7aed9ae77b7aaa75fac1dabbab7c617fb1a171cfdb7bf1bf418aa19d3b40613539d349e5db1359803a103a2c4ae5c9ce4a4daa5c7aca217f3a6eaa8d1ac3f27089ceca4d4ace02bfd26152068ad1c2d352522a2cead7d2d822407a4edaddd2d9727dd9678adc22ef22acc264cadc32e732cc929c2ac472d222afc26d2a9b49da6a5fba627a0f49c9ea4d7a5a7a1322ca52999250baa2030ed2ee52ce5ac1c31c52fe22dbcae1031912fb72d80aee930b12ff62d90aed72c4b2aa02829acbc10c6a05fa2b3a6ef9be2a1f1a239a4d397ec9d529e44a13b8c1191588cc1a0e6141a1c641d44a15818901e602060a02a193420332138a0b7183a207821f99fac1805203b21089fbb18b91fd9204f9e4e18af1e3f205c9d3018451ec71fe89cbc17051eb71fb99c4217bf1d711fc79cef167d1d2c1f9a9c7116691def1e739c0d161d1d991e3c9cc515bd1c291e449c93158e1ce01dc69b8515541c9c1d149b47151f1c321d3c9af6146f1bc21c9699af149f1a6c1c5e992914d719b61be898c7137f19fe1a8698fb121019a21a8b971112e6186f1a51977f14d3192f1b6b9500808a983d9fbc972ca3b5a5eda63fb1639c371d141853b3c614849839991ab55c9d1421f221fdb7c9a809ab08aa14b8b4a986acbbac11b8cba865add5ac1ab8d8a8ecacb9ab88b713a4d8a5dba649b71aa48ea56fa69ab4d7a1e8a5eba685b1b5a21fa7aca78fafaba201a8d1a84caddca2f1a8f3a9c7acc090d4a6bda8a6acbf27bf9b7aa5d6ac2c2c172415a068ada82d2128101dcdad6c2e722a7d24d1ad2e2f2d2ced2802ae912f792d242cccad0e30df2e822d82ad69308f2f3b2e95ada530f02f8e2ec4adcd302730da2ee8ad0a313e300c2f19ae3a3166300c2f6aae72319d304f2faeae4f314830ac2e87aefc2c9d2bfd2941acde10279b169ef8a5d49cf0a01da13ba37b99a29de09d6aa14b94b2942493e9a0790cac19201bcba0a114021da41e4ea00f174e1e3e203f9f4018381f89207b9e1f18681fad204a9e2418f91e6920ba9d0c18831e2120759d5617281ed41f719db5160b1e751f2f9d6616bd1d141fec9c6316831dd71efc9c33160e1d5a1e039de315cd1c521ed29cc115941cde1dd79ca815441cac1d7b9c5b15111c451d509c3e159a1b1d1dff9bfd14361be31cee9a4f14891a411c6a999b13d5194c1bd19827136d19ed1a7b9818136019e01a4898b51136188e190198b11066162218c2940080179fe19ea49b5aa389a48aa484b171a22b9d0d9e1fb30ba17da11799f8b476a400a49fa1acb792ab7dad02aec5b7f6aa93ad1aae5db702aa75ad1badfdb64da9aaac2aac29b78aa412a7a2a41fb73fa682a88ea899b478a5c5a8aaa9bcb1f8a407a9ada9d5af13a50aa9b2a999add8a45fa984aaabac98a48fa94eaa49ac449d50a80caa55ac4c282c9e88a6baacc52c9327a51c83ad4c2eea2ac725e0adf92e552c4e2962aed32f762dff2b3bae3030aa2e372d47ae8730932f052e30aec5300b30a62e52ae10315330002f84ae4a318b30672f9bae8c31c130bf2ff7aee331f830f22f54af94319630462f95aeac2c102ba3298cab02966b9cdc9e25a5959d2ea07ba0cea21b9c2f9fcf9f17a2fd9753983798dfa19c915116c01766a1870b7b1a9f1cfda0ec146b1d1b1f6aa0ab153e1e112046a05316291e112011a04716111e841f2e9f2b16c61dec1e559e1e164f1dc01e339ea8153a1d861efe9da915f11c381eb69d4d15b11cee1d729ddf14611ca21d2c9dcd14231c581de89c9514ea1b111d729c57148a1ba31c3e9cf513ce1a6c1cb79b3613441ab01baa9a6c125e19c31a8f992012cb186a1afd98a7118318db19b79877118c18d019ad98c0117318a21989987e10b5172c190d98d30f4b159316939900808b989198099bc3a474a605a644b15fa523a64ea50db370a500a804a8d3b407a45aa572a40eb7b9a8e9aa44ab35b74eaabcac38ad46b720aa63adb0adc4b613a9a7ac3bac83b6ada71faabba866b605a8fba970aa72b42ea7dfa9feaac3b14da66ea933aa97afa2a55fa91baa45ad51a520a9dda971ac42a536a948aad0abc1a48ba962aa92ab3999e4a78ea9f5ab3f296e21a8a0bdac7e2d642a3826c3ad2e2fbc2c112a87ae0830e82d372cbaae6130e82e502de1aec430bb2f1e2e26af0e313230ba2e3daf533186305b2f86afa931d530eb2f95afe53113312630cdaf4c326c315d300ab0b131e130cd2f82af0a2bf129f6284eab379bd79d67a075a5119d6a9f52a094a4e09bc99c9d9d0ca4b798b2965598a7a2ba954d0bdb1224a232921d146517ada11b0b241a141ceaa0b412991c1d1e88a05614091d8c1e06a0b014f11c721e249f2f15fe1c721e1b9fc114d71ce41d319e92147b1cbb1d029e2014551c541d969d1b14181c051d449dc013bf1bc51c3c9ddd13641b911c039d6d13fe1a561cc29c10139c1a191c4d9cb6123f1ac41b129c6f129f19531b539ba1115419db1a859a4511bd18141ac4999c100e183b1988992010601788181d9943106b161418ec98090fdf1509186e997010f8153c18ed960080869b219c3a9abfa42ba607a8d8b0a4a401a638a5b3b298a480a8fda454b407a537aa5aa512b6cda6bfaebea782b6f6a634b0f4a896b64ba433ad85a803b63aab5aafdeaea4b518ac5cb0b5b036b513a948ac63adc5b344a79ba939ab6bb162a692a96aaa58af3ca650a917aa72adefa566a93caaa2ac89a542a921aa9fab1ca54da93baa0fab79a540a974aa01ab81a012a8aca99bab1929032147a0a9ac392e442caf29f2ad0730052e3d2cf1ae7d30152f832d7fafd2300f30472eb1af45317930372fe9afb331e030c22f0db0e8311e31163041b035324a314d3063b071328531673067b001311b30a22e09af2f288427db25a1a9589d0fa142a2efa5d19df99f67a0eda3b69c3d9deb9d63a24b9a259938993ba24d982d91578cd5a15d94fc131717b3a14d8b4a1a091c1aa1c00ac61bef1cd4a06d0f9e1bd71c5ba06111181cf21c1fa0b5112c1c111d1ba01d12231c311dde9fae11b21bb11c1d9f0112f21a361c1d9e7b115f1ad11bac9d1011f2194e1b119dba109319dc1ac29ce81042198e1a8c9cb5100619441a259c7610d3180b1afe9b3a109918a019709bed0f53183919939aaf0fbc17f818ee99550f48175b188f99310e9216ea172199840e0716b517b6984f0ed314f214219b5b0bc712a0144e990000d60e0b152a97cb9978202e249cb075a0a31c841d26b24aa1a4a08c9e32b4bb9dafa4ba2073b66b95f3ac122673b66aa461ad0ea87ab6602016ab022b08b6c0224ca7f129feb5ce1a6c1fba26a7b5b2a39ea67fa502b434a638a892a945b1c6a555a802a91caf93a574a829a99badeaa522a905aacdac50a6a4a9f8aa14ac4fa6d3a9eaaaeaaaeaa5caa992aa13aa73a5c1a97faa40aa09a06ea7e2a8e3aaf5284424741a81ac4d2ea12c702ab0ae5e30e22e192df6affd30e42f2a2e3eb04d315530ea2e5bb0a931c830c62f83b02c3246314b30bcb06a328c318530dfb0443258317d30d3b0b72f5b2e2d2d45ae4621ea1d26168ea7389f7da119a2f2a3d59d829e889fb6a37d9c579ceb9c60a3a89a489980992ea307998994ea92c5a27b960311671244a2799139186d19cca1a68d6719fb1a78a158844c1a161c0da1e6091d1aed1b6fa06e0cc01aff1b42a0bb0dd01a151c01a0dc0e5e1a1e1c789f00106b1ac71b0f9fbc0f2b1a661b709e620fdd19031b1a9e031025199f1a859d780fc618ad191b9db90e53183c19819c970ee417d518289c2a0e53177718529b630dd8163718e99a270d1e160418439ae80c4315e3168a990f0ca2145715a398ac0a711388142198cf0834127b141e97150be613d115679900805593ed83279578a364a531a49eb03ea26ba18e9d6cb26da0c6a08b985db408a262a7651a72b663a0d8ac242196b6911befac2c1babb62aa6e7ac38aaf6b5e29d34add920cfb5b79a2b99d123b7b53aa4b3a59fa52db4bea699a88da95fb17ca6bba878a930af80a565a8b1a820ade4a5bda884a92dac33a649a935aa13abc0a536a921aa21aa78a504a9e5a96aa96aa5e4a8c3a9dba8f6a471a842a9d0a8d2a284a7b6a85ea9d1251a1ed19c59abb02d342ce9294aae8330482f512d18b046317730dc2e96b0ba31e230d72fe9b017322c311e30eab04a324931593072b1273176301c2f65b0032b732a4e290cac2599889ce09f14a59e9fbaa113a271a2dd9d009fe69fb3a21f9d959db29ddea2e19b929b209c23a3419a34983d998ca26e980b916c9205a21c95a3130415a5a1249197181a1973a1638dcb181d1acaa00e84a219671a6da0d603d719dc1a3ea098037a19881a36a019094f195b1a19a0cf0895191d1ae39f6e0bcd18d319839fc90a6c185019da9e5b0a1618dd18039e200ab1179018a59df109511760182e9dcb09d61616189f9ca20987157516159ca308e714b115889ad10950148615039ada094014d814a799b8072f1433145499be0972132a14f79855092e1310148798b70410107e0efb9a0080c8923593869598a37aa10aa473b007a4c3a4d9a43ab2bea306a6c0a342b49ea29da4e7a346b6d29df5a92f241fb659a9bcac87acfbb567a858adf7ac9db58a9a37aaba20c2b5f4a48f9f239a9cb5c2a590a79ba808b439a605a871a852b116a63ca882a827afcfa500a846a837ad2ca64fa80ba934ac40a6e3a8bda96babd4a5d5a8b8a93aaa40a55da829a99fa909a556a82da92da936a552a83ba904a9a0a4eca7b9a887a8e9a2f4a69ba756a8e71c009eb3a1fca9242a6228f025d0ac6c2e1c2d902bc7ae5f30292fa02d3db0bd30e02fef2d79b03230c42e442defaf462ce02a792906ad771f6f1fd81af2a7fa9da39f20a13aa5f29edf9e779fd0a49f9dbc9c139e33a48b9cb79a6f9c02a4a99b4b99f29a6ba3369a59961198d4a2b5984f94739521a26897828a238cd1a1df959210d41177a14f93d7143c163ca1bc91b915bc15d0a0a9915415ef1687a07290f215df1734a09c8e9215f515c79f318e2015c116379fa98bc7144a16b89ee68a7114d2144b9e978739149114b59d2287fc134514569d99869213f1140e9d17822513a813929cef81e41366144d9cc30154131c14049cfc04c012bb13349bad044f125e13dd9a8904291218139c9a8b012b118211469a6a010b103710df99080502104111469a000043179e176c90099eb414ad954db031a0d095471d1ab22fa18ba0849e3eb403a147a290200ab6e3a22bad641abeb54fa79baec6acddb59ea54dae4fa5a4b556a831ac4eac4ab582a42ea91ea87ab561a639a82ba9fbb3a1a5dfa7d6a802b179a51ca8cca8cfae47a5b5a781a841ad8da520a8dfa80facd8a580a851a9aeaabba575a842a9c6a960a592a865a9f0a81ba54aa80fa970a8f1a42ca8faa832a8c2a431a816a995a7bba459a829a986a707a4ffa653a8a1a750a121a597a7a3a8ce8dfca0d4a35ca9f72416210e1f2aac07283426dd246daca22527247522b7aa150c9498ef9c2ea8d29e47a137a35ba544a0faa096a124a4569f859e069f58a4e19d299db89e55a4019daa9b5e9c1ea4529c6199f39a07a4ec9a8396379861a36b995591c992eea2d997660a188c45a2ca955a13dc113aa2e093cc14a9142ca293911c171d16c9a15891a2167b1530a1289026168916d0a0c98fd315331690a0458f7c148d144fa0c28e5212fa11ec9f0f8e0310590ebf9e658d160f9e0dbc9d138da20e1a07379dda8c6a0e280d0d9db18c330efd0cad9c9e8c140e8606629c8f8cda0dba0c099caa8c0b0b1e06749b7c8c6f04ce05b79a218c1d0449851c9a828bf383db845099358cbf8c2f8bf098238b1190789151990080cf138b109092739ffc9aa79532b0dfa09a95cf96e7b16da15a9d4b1831b4ab9f689f0d1a01b65ca0f9abe9269db57ea062ac95a5bcb595a90baf7dae3db587aa08b178b010b552a8d9acf0ac59b521a784a9e4aaddb38ba5aca7c5a8d4b00fa55ba741a862ae06a5f6a74ea8dcac72a504a8baa898ab97a51ca8d8a8e4a94ba52ea8b8a834a9f8a409a8cba8cba8d3a492a77ea849a8a0a478a781a84ea874a448a773a812a85ba423a720a88ca716a48fa614a8e0a603a456a68ba75ca69ca3b4a51aa786a6d6a24da58fa600a645a2cfa4dfa559a5a9a17ea46ea5b5a428a122a4f2a442a43fa154a24da318a477a067a0bca038a4069f659e07a0dca3219ee19c269ec7a3229d099c6a9ca3a34b9c8b9af89a21a3aa9a9c962498f4a271997594ae95aca25f98e890318c29a2f696fc09a90ba0a1d1953810310b82a1f594f00f161132a1a794770fc410dda0da93d3117a13c4a04e937a0e2b1041a0b092fa0d2209dc9f36925907bc883f9ffc91dc867188cc9e37919486598e379e0d913e86058ee59dcb90da85c08d649d6d900b8c7a90099dde8f548b1290609c098e958a1e8f4b9bb68d278ade8b649a838ded897d8ea79a378dea89a68ed19a898cb4899090019b418b6583a484c998698b0c8ca28a029800003e151a141a94b59e5c944795ffafb0a0399cdd96d9b187a028a23c1801b4359fdc987a23d8b5d2a1d0ac7f2393b58719dcaba620aab5011978a92c2328b591a6a5aa67ace3b448a62bab5ca90cb575a43ca44da54ab3fba4e2a64ca8ceb036a528a889a842ae23a526a88aa89eac1ca5fca771a898ab5ba513a8d3a863aa38a512a8d9a852a920a5baa7a4a8a4a8dea47ca786a852a8b6a443a765a8aaa752a4b2a60da8b9a62ca4a3a601a85fa61da49da69da710a6dfa334a628a767a53aa38ba56fa610a5fba206a51aa610a571a29ea444a588a4e8a1c5a35ba4d3a4dea11ca3e4a39fa4f9a0d8a183a24ea42ea082a0b8a13da4c19e279f38a020a4079eaf9d609fe7a3139dcf9b0e9deca33c9c8399309c92a3ed9abd9658984aa3b5997491db952ca3e698c48a78929ba233983e8a038c25a25a97d009838bc0a17c967509fe0a5aa1149613097b0af6a04d95b608080acea0ca9447088a896aa05194cd87b78f19a00e945e8dfd91ef9f0f941a90a993409fa0923a917794539e2c92c99012948a9dae917d90ab94329d869197918694d59c769162917094569c779128910395e89b3c910e92bb94189be590bc9182946a9abe90a492fd94d199ab907493c1948c99688f11934e952699f78cdf8f6b915e9800000817fa16da915e9d259afb948cafab9efa9be21c8bb1c7a0c8a3469ee8b329a3419f7ba0a5b522193722c52650b5c89fc5ab61256eb5cba616aed4ad14b54ea5baaf4facdeb405a502a6c9a4eab410a546a835a816b34ca58ea694a86ab016a569a712a8edadfda4aaa736a872ac0fa5d0a7a1a828ab1fa5c6a75ca8daa9f3a467a76da8e1a8d8a493a79aa863a8aea46fa787a820a886a41fa753a8cfa657a4f4a62ba8f4a535a4a6a6f6a75ca5e9a376a67ba70aa582a3c8a5f3a6aea43fa368a586a6a9a4e4a2c4a4d5a589a494a25fa45ea59fa422a285a355a41aa43aa103a237a30ba47aa0c2a019a219a4c29f31a0f0a0b3a3d09ea19d219f51a3cb9d3b9c5e9d56a3f69cdd99789b4da3589c9e98d7994da3f39bda965b984fa3d59a7d91d49524a3249a12918a92ada277994a8a1d927fa22799c3899491eea16a9858891e9170a10e988f8ffd934ba19b97e7918293c9a03f96a9934f96a5a02b968d943b975ba0a6952295a09816a03f95a195e698599fc494ec951c99db9e80946595ae98489e83949495be98c29d5094c8956498209d7f9356957b98c69cd7920d9538984f9cff91e3948697089cda91aa942f975b9b609193948697b59a5e9168946d96469a08902193c0959999f090d0937b952f980000eb1a131bd798629f20a003a1c0ae48a0ada45da120b1e2a03ea614a12cb39d9f47a5d6993fb530a190abdf9900b5d79875a5862320b5b791e6ab2429acb4b71119ac92a473b4b4a35aa9caa882b45ca47fa8fda797b2eca41ca70ea836b0afa43ca64ca74cad28a4fda553a6aeab71a44ba6dea62eaaefa488a624a825a941a5f0a635a86fa827a557a76aa8c6a6c9a469a73ca897a670a428a74ba87ca632a4e9a62fa8bea501a43ea6e7a76ca5a8a3eba528a71ca51ba3a2a5cca694a4d8a22ca547a668a459a28ca47fa538a4e0a125a4bca402a43da1b7a203a490a3e2a006a2bfa22ea379a0c5a0a0a1e0a2d19f3f9f9ea007a3359fbd9d989e2da3349e8b9bdc9ca9a3039dad97609a9ea3819c3b95c898afa3e59bf291729693a3889a7c910b96b5a32a9ac08a98956aa34999c0904595fba246996093de96bfa2f898cf94029943a26b9812985d99aca12198e5982c9b31a10598f198fc9bc6a0e096f498f19b5ea09896e798bd9be19f3296e898b59b0b9fed950099229b079eb895a2983a9b3f9d72954b98c09aae9c02955498569a659cae94ad97049af49b24944497b199879b2b94f0961499d59a5094a196c998c6996b940b963d982e997a9475960d985a98b7930f964498db9830924d95019758980000b31eaa20a69a35a1c1a468a57cac43a303a932a9c1aef7950222671e78b20421e62d842dceb492a144a5f6a4a6b44d189eaba127a3b49697cfab77246db48f1c19aa6a2a3db4e210b7a0912624b4eba0b8a122a139b239a4eda4f9a725b053a48da57fa60bad98a4c6a676a7b7aa92a4a3a6d9a747a966a415a634a759a868a47ea6d0a7d0a774a4baa60aa8e5a666a4bda60ca84ca630a485a6d1a7d2a524a420a657a727a5eaa315a651a7a1a4c7a3c0a5f5a667a44ba369a598a62ca4fea2eca444a638a483a2aba4c0a509a414a242a445a5bba3a6a16aa394a45ea305a131a2fca3b1a270a0bfa0a8a1eaa25e9fae9e44a0b4a2779efd9b219de8a2449d2c985c9916a3b09ce2926f9493a3049c578c938d7da3899b158c3e8d5fa3399baa8bec8c3ba3f39a5791e7920ca3469a0b946295dda2e2999b965a982aa242996098919976a1ff983099639b26a1cc984d99a09bd0a0b298ec99399c7aa06898e2992e9c1aa0e997439a639c389f7d973f9a199c799e0097ec991a9cd89da596fe991d9c4a9d6896a499c49bc59c1d969d99aa9b3f9c72952299b69adc9b0d955098fa99a99a839408986c990b9a2894a7974299dc99b09381973899d1999e935a97d0986599c89211977699589acc96ba964e9640980000a01d812036983c0b412271247fac2b13d7205224feac9d949122392446b2469f41a4f4a65cb576a872b01eb0eeb445a6c7b0ecad35b54aa000aee9a2e1b4b19ccbac09a095b4959726217624a9b4c6a1dba140a3abb25aa2bda46ca4bdaf18a340a534a67dac6ca31ba630a751a9d0a23fa52da629a835a374a4b4a5b0a7d5a3b9a5d8a649a78ba497a7d1a8dba5f6a409a833a9a0a5e8a434a866a9ffa4b2a421a83ea9b6a46fa4dba7f1a871a42da43fa793a8eba3bfa3eca63ca88ea336a339a69aa73ba3a4a2a3a5dca67fa201a2dfa426a644a277a10ea4f4a481a1bca055a2b1a333a1d19fdd9fa0a007a17d9e9c9c199de7a09f9d6499aa97caa0469ca90c771465a1de9a16197b1af1a1cc99241b911c7fa2b299e91a6a1ca3a35f99961a1c1b1fa4b5982219741951a4b098c41599120ea4e498eb89eb9441a301990796a8996ba25699a299749cb6a1bd99329b8d9d1ba1b1994e9c1b9e8aa00999629c0d9e0fa0b5987c9c2d9e469faf98669c909e199f8898679c419e829e80982c9c319ef39d5198aa9ba79d319dee97489b069d989c2497709a5b9cf09b6a96009aae9bf79a1296c4995c9b559a219649991c9b1e9ad09599987c9ada99bf954798569abf9936961997b5982b981994a797cd99ab980000811c0c1fc1969197749136197cada79c38a26fa1a4b0d59f86a506a55db3b1a140a7eba4aab5399e5da6d1a749b5ca9a24ac302341b51020a5ac03a0ceb4d31d7aad409978b4d3903d23ce1f98b48b9fd3a13ea19eb27ea3d0a5d5a54aaf2da3a2a6fba7f2aa75a41ea86aa829a8cba42aa853a82da6b1a315a42ba42ba4fba3dfa556a767a49ca4e1a801aa91a4e7a44da97eaa54a4c8a4e0a8eea989a381a46da879a94ca36ea42ba82ca98ca25ea4caa7f7a849a24aa446a7aaa80ea20ea497a658a854a15ea3b8a5a4a718a1c6a206a580a67aa0bda114a445a5069f08a175a228a4459d5ca02aa13da23c9dfa9ea99cfd9d319ddb9c2616c214f39d9b99c01d212021a007984d203121cea0e9963620172138a28297142099208aa30198b11daa1e79a4b4996318a01974a48d9ba78a588c24a4369cf3970d993ca3979b579b9f9c54a2409ade9c3f9e44a1fd99369d279fbda0ea99669d6a9f56a0ee99809d439fdb9f9d995d9d0e9fc79e5299029de79e1f9ecc98d99cb99e809d53987d9c439eab9c1d98359ce39d639cd497d29b659da79b2497559bef9cff9aa996959a6c9c2d9a6596479a0e9ce1990b960d9ad09bab99869594998c9b2e997a9583990f9b0b99b1940499fe9aff989094aa98379a8f9800002619cf1cc190009ff7a4cfa553ad8ca234a992aa58b051a4cdab39acdab273a703b020afadb5a2a84cb144b071b5a7a352b01bac67b5869d04affbaaddb4859cc0acb6a994b43a9cf8a705a091b41aa04ba8a6a5b7b1bba243a803a908ae9ba47ca917abcdaa22a529aa90ab13a84aa55caa09ac85a5ada37ca8c0a955a06ea30aa812a93c95bca43ba9cbaa169feaa41ca974aa59a1e1a425a972aacaa08ba4fca868aa20a172a4d0a841aa70a142a4a3a80baa59a104a444a893a9cba08aa370a7efa8bc9fcfa27ea636a8269d3ba2aaa55ea7129bbea1bfa466a6169b4fa16ea347a5939944a1f6a127a4ac9932a0fe9d5ba1b69c079d4b0df49cf49c8795e620da1fee9ec907e2237924bca1ba100324e72430a30714cf23b024e3a446861d21c92185a52298d818dc15e8a44b9aae99289cf2a3929ae29c529f35a3529b779ef7a0a7a2fb9b6d9f57a1eda19b9b339f2ea12ea1049b279ff2a079a06a9aa49e9fa0899fc899169e6ba0ba9e4199cf9d2ba0199e1099829dd09f3f9df4982d9d879fd59c0b99119d389f6b9cdc98ef9caa9eff9b7698779cef9d599b9f97ed9b899d809a0397529b399d569a5696b59a019d659a10966e9a729c9399bf95169afe9bbe98d194a899aa9b3e99c1940f99c29a60960000eb1e9020219651a11aa873a9e4abe2a438ac57ad4fae81a6bcad14afc7b079a9adb0cab14fb3dcab14b370b443b4a8ac3eb433b542b05facb0b3b3b43cb0aaa735ae68af64b4f3a207a87aa825b381a3a0a80daa23afeda462aa4eac50abd3a683abb7ac2da8f5a530ab74acd0a531a588aa26acffa44ea497a903abbfa36ca21ba850a9eaa1f3a364a876a9eca156a4cca8eba9dea172a4bfa8f0a9e3a189a4aca8faa9d4a188a4a7a8dba91aa264a47aa8bea9e2a11ca44ca880a9bba1d9a324a84fa9e6a049a3bea70fa97aa0a9a271a7c5a87e9f16a292a64ca8269e06a1eba48da66e942da01aa3d3a44c19fa9db49d13a00b1df69a8118681bfe1e3408cc232825e01e6d1c7827cd281910a71d7628832905a4441a7b26f427c4a6ce951721dd2187a6b89b6b14c58c70a51e9c2f9b509e26a4479c849ec7a09ba2989c19a0bea1eda1359c0aa0d9a130a1369b659f84a1bda0989af59e64a15ba0249aa29e00a1899fea992f9e63a0229ead99af9de19f4a9d4c995a9d8b9fdb9c0c991c9d4d9f809cf398ef9c2b9f6b9cb598869c979efb9b3798339cbc9dd19a9997aa9b269dfe99cb96389bdb9c3b998296199b999c1b993996c39a849c05999296d99a459cbf98af954a9a279c16981b95a598c1992495bd173e1e921dc4913e9d8aa3e1a40ea36fa556ac77ad79ac08a744ae05b012af2ea80eb010b166b096a9ffb057b210b1d8aae1b15fb323b173aa20b2efb3d8b0a0aaeeb199b322b1bca8f0afe3b0bbb055a9c4af16b19bae7fa78cad52af98ab5aa61dac79ad47a941a659abafac49a866a5ddaa50ac78a7cba4faa970abf9a596a423a994aa5ea552a4bda816aae3a483a48aa8d6a980a473a479a8c2a94fa453a45ba8a0a950a404a42fa86ca956a3aea30da83ea976a259a3eea708a94da211a36fa7cca835a1daa220a795a80ea1bca2a3a632a84da065a25ea6e4a7dc9e1ca225a687a75a9ef8a1d5a53aa7f79c89a087a4a8a5f58cde9d669e05a0b820d216fe246c262a255b22f72b102da5246023652c442d9fa66d1d462843298ba93797211ad31bbca7349d8ca029a20ba5b49df5a006a339a3fc9ceea094a2cba0f89cf6a066a2fb9f669c9aa034a21c9f3a9c72a0e5a17e9efb9b34a0b6a1269e569bbc9f73a1df9dd69a2a9f17a19b9d679ad29ec4a05f9df999319e6aa0e19ca499b89d16a06f9c44994b9d7a9ff09be398eb9c0e9fcb9ad0989f9c829e199a8198669c409edb993e981c9ce89d5f99c497ed9bc29d3c9939976b9b759d1799f496319b459d33997995539ada9c8298ef94fb980f9bae97781a3d1d571d3093839f70a33ea4c7a0daa454ac4ead4fab61a6bead51af5aad5fa7f9ae64b083ae68a826b021b108afcca878b099b1e2ae47a8dbaff4b0ecac8da325ab83ace1a8ce9b9ea4bea561a478a333a9dbaa47a8f5a692ace0ad4baa61a655ac8aad93a963a568abacac4fa80aa573aa0facfda6dca4fca95dabc8a58aa468a9b0aa21a539a4e7a83aaab5a420a491a8d0a938a411a457a87fa9fba308a426a83fa94ea3cba3f7a7f7a805a3aca3c8a7d3a8d2a27aa37aa7bea8b4a230a349a7a4a88fa2e4a219a77ba856a285a2c8a653a8daa1aba289a63ba879a1c9a1d2a59da7d7a05ea12aa528a765a0aca15fa5aaa63aa053a1e1a4dca5fd9deba035a79da872a13520b428bb2895a54f282430cd30dca99ba028a5dfa69aa51aa118a33ea51da114a0bda2dda4fea0549e1ba25ba4bb9fa69de9a10ea4de9ead9d7da19ba3479e429d35a113a3b09d1a9dfba0c3a28a9d899ca8a060a2529d3b9c50a0fea11a9d9f9bf59f7ea1199d199b449f08a18e9c5e9aa29e96a03e9c339a219e2ca0849bbc99ab9dea9fc99a5d99769d6b9f2b9af5982e9d0e9fad999698f39cb49e85993f98aa9c399e1299df97379cc49dd1988397c99b5a9d96987c974f9bf69c4098da96689a7a9c0c980297ed99b09b5a970000551c441dae9308a3d0a968abb1a8b8a436ac29ad63aa73a5ecac35aea2ab58a6e0ad64af78ace4a661aeebaf73accca630aeccaf03acbca537adadaea3aa03a465ab9eac21a90fa269a9e1aa4ea87fa3c7a98faba4a8dea40cab7daccea8e2a4f3aa85ac16a87da459aa0dacd9a658a4fca98dabdba545a4a4a91aab31a51da434a991aac0a4fea3f3a83caa56a4eea38fa8c6a9cfa3d6a34ba86aa903a3a8a30aa82ba965a23da3b3a7e0a8d5a104a365a7afa89ba1c6a220a780a820a16ea2cfa648a8f2a02ea291a629a8cfa0dfa157a607a8a7a08fa10fa6b9a788a055a1e9a590a7aaa001a1bba560a753a0f3a088a529a743a0dfa050a5f9a627a0cda003a551a6869f3b9c7ca0b9a1049da9047006e0025e9760947498f899e4969b9cfca03ca2f49ae89de5a1a7a3a69c659ed5a1d8a3119dce9d9da152a3f69c369d54a1f1a2de9cb59cefa09da2b79c619cb1a03ea29d9c309c77a0f7a17c9c089c40a0afa15b9c8e9be69f7aa1479c419b7f9f49a16a9cb99a0c9f1ea1909c379ab59ee5a0739c9199359e89a0359c4899d29d3ca0ab9be598629de19ff29a8298f59c139f339a13988d9c8a9edd998597389c2e9e8a992297da9bc49d4a992e97df9b3a9dea987d96549be89cb3970196f29a679c76940000b41b381dd29266a335a995aa56a632a456ab98ac81a8a3a431ac2fad68a9dea47eac9daddba910a5baacd6addfa9e3a481aca5ad9ca97fa41fac45ad2ca92aa40aab93ac9ba8fba320aac3abb6a705a4bca958ab1aa705a49da93dabffa6eda36aa9e9aa37a6cfa33fa9b0aa7aa59da308a975aac5a459a3d9a82caa49a403a39aa8d5a9e3a3b8a25ba897a9f0a2bea230a84fa962a2a9a201a826a9e8a1a6a2c6a7f1a8bfa1aaa26fa7d3a857a179a235a7a0a831a145a2e6a689a859a1f1a1aaa668a874a1b7a179a63ca851a177a130a621a86da12ea1e0a50da852a101a1aca5eba76fa1d5a076a5a2a750a1b3a035a568a728a188a001a549a74aa167a0c1a4dea6fca015a026a4a1a5db9f459cf1a0dda2ab9d2e97e59d03a0f89a87988d9e22a0ff99f69b54a05ea1829b479daba15ba3fb9c189e8fa16ea31d9d529e47a10fa3059da59df6a0afa20e9df89ca8a04ca2d89c779c6fa001a27e9c1e9c46a0daa1609c839bd09f65a12e9cee9a029f05a1b19b9e9a8e9ebaa0619b609a309e61a0c49a0a9ae69d2fa0989ab599929de49f589a41993e9d609f6f99dd98e99cca9ed2986198869c369e829828984d9cdf9d4298a497049c739d97979a97e69b119d3997fc96b69b1f9dc497c096e99a769c1295f99b13a5dfa67f9fa1259c296c2a0badee294f2ee82e0fb0102a202eee2eceb0612a782ea02fd7b2852ad42ed52f98b4d12ab52eb52fd6b4db2ab02ee12f99b4e629072e642fe0b399297f2da42e1db20129d62cb92d83b03328fa2bd92c2aae0128362ac72b86acc42682a090a66fae502aad26011ea1ae1c2dc02d352d4dac732d8e2d7f2dbcab422dd92ca12c4bac042a98ad07b1b1af9a2e442d832c7dab982cee2c242d6aaa6a242c29dd29b6a83e220e28d4286fa85a254129ed2911a9a02c2c2db22c23ac0f2fa32ff72edead1c3020302730daae25307c2f3e2f47ae0a30562fac2ea7adc72ea92e2c2e1dad252a8d2a822a63a95f218b249e25f0a3831aa1202b2336a21b9fd8a44ba677a351153f1e17209aa1921a04213123fa9da61b9520e9212e9da11aa420e121279d921a8e20f1215b9da71937207d214d9d81190b204721199de818931ffb200a9d8a18271f9120b99c5318c71e5020769c32184e1e0b20799cdf17081ec81f4d9c7f17ae1d541ff29b3f17831d201fba9bb516341dc91e349b9216f51c8c1ef49a2f16b51c2b1e679abd157f1ca41db6996b15d81b101ddd983f15451ba41c38980715e81a6f1c08981115ee1a7f1c17981615171b691c039858147d1a501c5f985516221ba91cfc97599149a3e7a4d59a38241a284c29f1afc028172d962d13b222299f2c5b2d04b420297b2ba72c52b55b29882a0b2bffb65129612b9a2bc1b7e528962a2e2c84b7b728682b5d2cf9b61e28942ab02b1db562263329112a38b3b524ad279e2891b097231823f72283ad491f6ba879aab3ac452719a13fa65aaee02b322a5c2902aefa2c362c432bc2addd2c2329922421ae5f2ce7a421ac61ae4f2d7b2436a2a8ad012fff2c8e2b70ad5f2e2b2d432cefadb12e362dee2b11aef62e7a2d2f2c66ae292f682d092cbaaec42e9c2dc02b0aaf3c30982e232dbeaf2e30aa2e582d4daf7830542fde2d8cafc02fa22ea92db4ae592a322aba2925ac7f19321cb51d53a77195589d4b9dada4ff9674a039a13ba27a0545987f990aa1a518621fbb2000a11d1aae2002222da049197b20f921729fdd197320a721f89e621926205121619e2319861fdd20199e8818261fad20b59d7b18e21e6d208c9d5a18a71e5c20539d3018651e32201f9ddf17261e0b20ba9cb117ea1d8d1f889c5e17821d291f1b9c2217421da21e749b7516e41c4e1ebc9ace15771cc51d579a6b15141c491dab990c15bb1b031d60999814171baa1c01996c14c31a6d1cbf9841147c1a1a1c49988c14911ac81b1198e31283194b1bf5965714fe18621a9a950b814e9fa6a0a597b6211a2610276ab07a247529f22920b3462538290d2a91b477250b28b0280eb6032408261b27c0b79e24f226e02759b872235125cd274fb824210323c825b1b75121be21b822ecb5921c801d4a181fb47918919c789d87b1f2970fa25ba3a9afee99b3a45fa6e7ad721c4ca5bfa7cfadfa277e20549caeade12b6228552401aed92c78269c9682ae362d20254ca0c5aeae2d6928f51c82ae752e122b38272cae4e2fa42c152affad2630c82d0f2c0cae202f1d2da42bb1adc42f442e932c20aeac30512fd72da4aec630b82f432e0eafd030b82f3b2e4fafc530892f002e03af2f30a82e662d70aeab295028d326e7aac897e69c029d74a61c99ce9db49d72a4b794e49a5d9acca2bb8e32947e92d1a1bb121619931a6fa1ec16501dec1ecda08d18841fd72072a0c9181620402125a0bf18cc1f29219d9f7318431f8d20b79e3218771ede1f9e9d1918f81d961f409d9117f51d7c1f2e9d1117c01d391f399d98167f1d341f0d9d5c16451dc41ee49c0816231daa1ead9cc215bf1c321e7b9c96158f1ceb1d199c8e15511c9a1dc29b4515cf1b281dd29adb14111b841c129ab214891a2d1c85995314ea19971b1b99a0136719251bfd982313f718881a3a983412d418161ab39782138c188f19e9950080718d4e0809985c1db123e62556b1a41b2324d0247fb338190922f922b3b4a7146818991f22b6159f4e99439aaeb7d39c239af49a44b8cb9c92a0f19a26b8f9a0e8a408a1cfb72ca02ca4e8a417b639a153a44ea67ab4caa1f5a52ca70ab26da1cda509a74bb063a2f9a68ea878ae19a219a8f3a88cadc619caa4f2a660ad1b28781b4ea284adec2b3a250e9627ae262dcc27bf1c6daede2dbe293e2476ae9d2ef52b432865ae252f1b2d932b6eaed82f5f2e042d55ae4030192fa32d46ae6c30862f022e7aae9730d32f752e9daec53010309b2eeaaee8302430c32e3aaf11314730c52e5daf4330cb2e692d48ae982802288d264fab669acd9c4a9c8ea56c9c2aa035a04ba4b2982c9c099caca23d94ad94bc8c5ca2c305bb17e718dba105143b1c6a1dd3a08316ea1d861f2ba0fa17381f7c20819f2818561f9920db9e1718dd1e56208a9e7817751eda1f339e3e170f1eb61fe29d9c16f81d5a1f9c9d4e16ae1dfb1e539d45163f1dbb1e5c9dd215ef1c411e609dd115ab1c051e639d9e15731ccd1dfc9c98152e1c731ddb9c4715fe1b411dae9c30159b1b211d629cc414341bda1c3c9b5814701a3a1cff993013b719fe1a1399b4125e19d81ab3980a135519c21a769817116518af19ac98b9106e1655189096008051a156a28398e4a459a678a74ab131a0941c1e1765b3aca042a0f8a090b417a366a343a4d2b5f1a4d0a5dca663b7aca26ea337a423b896a217a52ba409b8e5a460a847a788b7c9a472a779a7e7b526a571a83aa94cb413a595a809a92db28ca454a841a9c8b084a460a85ca94daf91a4f7a8bda9d1ad17a4b6a8b7a92cad5b9b18a720a934adaf27109b90a5a5ad552c7226621c7baecd2d482a8b25beae9f2e302c08292caf522f442d522b0eaf0530132ea62c03af4d30fb2e872d03af8330822f262e1bafaf30e62f5c2e4eaffb302a30c42e8baf2d3170303e2fb3af5d3180301c2f8aafd02f472e062ddaad712568248f21eca9cc9cf99ee19f59a5d99cbf9ef99ecda3649b4b9df49dbca2d3975c980f96d1a20b936411951547a2980b9c19071c55a161145c1d841ebba0ee15e81ddf1f8ba04916171e8b1f53a0fe15ba1df51e9b9ff7157b1d911edc9eec15401d681eae9e6615ec1c6a1e6a9e5e15d71c1e1e1e9e0415911cd11dd19da5144b1c8c1d8c9da814171c0f1d469d8214821bc91cc99c4214211b851c549c7f13b61a411cc89bc512481a921be59a59129d190c1b1c9a9811fe18d91aa2999011b118321a97996411a118a7195d99f611761860191a996b10df1691189198430e6a142d14b5990080ca9074906895c5a0e09de59ef5b0d8a22fa10ba212b394a35ea350a458b43ca486a543a584b5a2a5b5a684a603b7fea446a699a5bfb7efa48da79ca5c3b74da7e7a9afa927b701a7aea98aa9a9b50da7bca940aa3fb461a645a9dba944b2b0a5d2a872a996b01aa585a870a9edae09a5a7a84aa987adf8a4c1a8bda9c8ac7fa4f5a878a96aac629ce2a69da867ac3828e61fada148adb42c69298e2491ae892e322c792927af8a2f8d2dd02b61af2430672edb2c6aaf7a302d2f9b2d9dafbe30ce2f3a2eb8afea302330ac2efeaf44317430462f36b08f31c130cd2f4db06e31ae30842f0eb06a2e5a2d942c6fae8820bd1e2d19daa8799e39a0eca02da53a9d139f24a0b8a42b9c4a9d169e15a43e9948983d98b9a3bb95388b8a0c3ca3fb91d7103f15b0a27f044a190b1bc0a16a11291c781df7a06c14fb1c0b1eaba02c14f21c101e3ea07814f81c111e05a08814951cd21d509f4a14651c5b1dba9ecb13121c3b1d419ef213a91bed1ce39d9d13a51bae1c989d39134f1b781c589d4e13e31a391c0c9df412811af91b929cac12271a8a1b529c4e128819221bd49bd6113819b21a069b0d11a518fb19499ad61032182619089a6010b217bd189a992410bd16ff176099e00ecb15e8175199a2104416a118c1960000d1157e18a897a3a0ed9a8395deb0f3a1819c449d13b3c6a319a57ea225b414a5ffa716a615b502a6c9a858a737b626a881aa6ca9bcb683a780a818aa96b6d6a6dfa92cab30b611a8e0aaaaab19b5a5a7fda926ab12b46fa613a9aea9f7b116a6f9a8aaa972b0aca504a9bfa90eaf94a51aa9e9a9d4ad49a5d1a896a9f1acfca41ca903aa57ac15a502a9f9a972ac47a1eca75ba960acf525e2991ea402adcd2ce729ee2744ae0a2f542d562b6caf2830442eec2cdcaf7b30242f8b2d0db0cc30fb2f572e2fb022316730e72e48b06c318f304c2f78b0a6319e30692f6cb0b530cf2f7e2e08b07e2b772a7d2949ac83907997d89bdda61d9fd4a0f9a06fa5ed9d919ece9f7fa47d9c2b9d369d83a33d9a18992d9956a3399823914c8cd8a2e294be10001560a2d78d7419ea1ae1a1990a001b5f1c4fa1470f7f1bbb1c03a13811081cde1cc7a09311181cfd1c8ea00b12a51b111d55a0a011921b991c919f2711e61a271cd69e7211541ac51b249efb10e519471bc09d99108519c51a229dd01027196f1ae19c8c10eb181e1a719c6a10be18db19409c2c108c188519a89b07105c184d195a9bbb0fd31701199e9a490f4e175d182b9a510e9f16f8170d9aa20e151624180099170c3f159716e099130a3914d9163f980080ba99b09b7e96dca23aa262a4adb064a13e1cb496a6b2b4a1769c71a0d4b3efa276a0709e10b518a473213d9943b6c6a111223da0d8b668a5b518e7a4b3b6e4a478a10da62db678a4e7a02da41bb546a536a7aaa7dbb3c7a58ca815a9cdb1bba576a81ba965b0c6a582a886a9c8aedfa528a901aa9fadf8a564a955aadbac9ca510a90aaa2dac6ba51ba9bca923ab20a536a9e5a9d2aa5fa231a84aa968ab51232c9937a363ac902bf628e625f8adb32eeb2c3d2ba3af2f30a12efa2c43b0a930762fdb2d75b0ff3015303f2e8ab02c313c30ac2ea8b0f0300630782e67b04b2e6d2d732c59ae572575253e2412aaa69e03a13fa257a5b79f25a1c2a1eca48c9d379e469fc3a4799c479cc59c60a41b9b309a939a1ca4f8987b949f9573a33d96810a1d0ccfa28b92cd165c186ba2a38d6519f51a25a24a84221a171b87a19709e819921bc7a05c0c181ad31b82a0a40d3a1afe1b3ca0b20e3b1a6f1be19f740ee2199e1b7a9f9a0fa819361b149f350f5819d21a719ea50e0919f319d59d3a0eac188e19719dbf0e4a182219d39cb00e0018cf18859c5c0e80178618419c850df8163718979b300d1b16f417d79ae70c4f15e016219a1a0cb01460158499260c7f13fb13ec98b6082412d21390975b0b0113b61467990080170a2a15419000a327a2b09eb9b0dba237a218a0ceb226a2859f669d22b4bca285a0759e26b5dea3839e41995db655a4ec1852a0fab68ba3d9184ca0dab6baa39fa127a046b64fa476a545a44cb507a550a6a0a6f6b339a67ea80da9c4b13ea678a82ca95cb0a3a534a8dba8c8aed8a58ea852a98cad9ba5d0a8a0a999ac33a5bca84ca9c3ab30a59ea86fa9d2aa10a5bba864a945aaeca46aa837a911aae2a42da8cba8d0a9bc973ea4eca521ab4528f9244a20b5ac812c382b55295cae952e3f2d152c86af392fd02d982cf2af582fe32d892cbeaf7a2d5a2cdf2a73ae22274026742506ab0998369aa69ca8a6929feca015a16ca4509f84a073a001a40d9ef39eea9f0ba4a89c029df49c0ca4e89ba19b209c0ca4039a2b9802984da33c98c2902392c6a225956013d51467a20b917818e718e8a12c8dae18ed193ca1d3898d194b1ae8a0b683c219b91ab0a084036f19671aa2a0130940193f1a85a0bd080a19091a5ea06208c318c1192aa0a30a6f186119809f3a0a14186818de9e060aa0171618229eb20933175018909d7b09ef150717db9c3b094e1554165f9c7708df14ae152f9b1608bc147615969aaf092a14c314319a7e092314ce14ed999c091b14b4147c99f508f612dd13fd98ce0128108211be980080c595dd9691927ca305a332a48fb04aa458a362a4a0b290a30ca433a2ebb3a4a403a480a30eb591a44898cb9f4bb61fa3361f40a0f4b6faa20f9fefa4d3b6e7a4bfa3cba44ab631a553a564a521b562a5b5a76ba7bab307a6e8a704a8c2b11ea607a83ba82fb0d4a5b0a760a8b9aeeda530a8dea888adc8a57ca853a9b6ac72a533a8f6a89fabdba4dba7a9a89daac6a4eaa779a823aac4a432a8d1a80caa91a4b2a796a826a929a402a7d8a797a8f8a05ba573a60ba93b0d3fa124a23baa0c241b1e3a1d30abaf267624172424ac0726d0235e2296ab5a20b716009164a96b9dbca1d3a2b6a79c9fb2a16da2a6a5bf9f44a039a054a5549e9b9d659e2ca5a19dbe9c529de1a4409cad9a409b5ea45f9b4a998e99dfa39e990998fe9747a39d983b945195c7a22797578af88b5aa28295db098011d8a11794b8123e1469a1919262148d150fa169914115be16c7a04290c314341665a0508e6a15c01513a0d78dfb145115889f1e8da914fc140f9fb68a5514a9149b9e6f8722146914019e2287cc1321149f9d99865f13d5131d9d4586fd127e13e49cec8188121713a19cc7012713af125d9ca301a712ca13299ca00452126713929b9204291221134a9bb6043911ba12939a6d0110106b112c9af404380ed40df9990080121562188c903fa1359da91b82b084a1b79e739699b263a1509c399de3b329a3409d5c9e00b594a42f9810990db63ba4b398e7a4c8b603a5de9e2ba0a4b6e8a4c9a44aa824b6cfa427a6a4a708b5aca540a8b6a8c0b399a5dda7e1a892b14da5e6a791a83fb035a5c5a785a850ae45a5cda794a810ad64a519a8cea859ac2ea501a8b4a85babf1a4f6a7b3a83aaac3a403a88aa8c0a99da47fa772a834a973a44ca734a8bda85ba4f8a623a84ea8cda301a61aa7bca7d2a21ea57ea666a7cda240a595a625a78ba2b2a40da6d2a604a225a43ea695a80ba250a4f4a5a7a66da144a45ba5cba5b1a0f5a158a3c5a5fb9f65a034a11ba5af9e709e2ca0fda4c89d109ddf9dc0a4df9c7f9bd89c71a4369c409acd9a67a4eb9a2698279814a4e5994d9473957ea33b981f0acd8bb4a2509645107a0ba8a28e94b61482146ca28892ae15f71513a224924a15591572a10291ef14471625a1b4909d14a514baa06290b51258146ca01b901e12c6111da0508fe50f3e0e699f708d050f7207669e128de30b0507d09dd78ca10bbe065f9dc78c320e8506fe9cc48c480b6c06b79cc38c0c0b3b06619c228ddf0af805039c8c8c5204b2854c9b148c14043e85639a9b8bf783dc84ec99138cc08c058ede996c8bd08f78939a990080f9109415910ebda1279f501e4db016a1829e399677b210a2f5a0259dc5b3c6a21fa24ea1f0b4dca324a1fa98dfb5fca2851814a06bb63aa16a18689961b6e0a235a3c7a5e6b5d7a4e7a67fa702b55da521a824a987b330a597a74fa863b1dba405a74fa7bfaf05a522a79ba702ae38a53fa73ca8d9ac2ba57aa763a8e5abdaa449a74ca89faaa5a41ea736a8f0a983a4f8a623a859a951a4e0a61fa846a922a4bfa61aa8d4a818a49fa606a88aa8ada368a66ca72fa8a7a3b6a5c5a659a717a369a51fa6aaa613a3efa4dda5a5a60da38aa45ea55ea6d6a233a4e7a4dca52da226a36fa407a65ca1c3a1d0a29aa52ca073a0d0a056a5cb9e669e589fbca4ef9d5a9d019e54a4fa9cd19b429c2da4249c539ab29a09a48e9a2198f9978ca35f99f9956b9573a31898b190fd91dca22e97d689688b5da23a9688090d0b0fa26d953509a30ab4a19d94d9082f0a50a146948d08d009ffa0fa9235086609a3a07692c287fe884ba011922e879f88a79fd791108d848e329fc491d88c348e989e7c918f8ce990439e28914c8cad90bb9dd290de8b6590629daf8f3d8b0d908f9ce08e788a158ff79bbb8e088a728eee9a768dbd89598ed39a3c8db6898890f59a498daf8cc391869b838b1089df8a4c99038c8188d4836e980000bc150e1831056fa0a699b01423b047a172a025964ab2b5a1ada33ca0acb3e5a2c2a34e9ee5b4a7a20ca1e598c6b58fa2709807a040b6efa3869eb0a225b636a31da123a8b0b537a31ea421a5cfb4f1a40ea816a846b35fa581a748a85ab15ba503a8aca8e0af3ba5f3a75ba8efad1da586a736a8d3ac0fa59da791a803ac12a555a760a8d8aacfa424a73fa8e7a995a4fea6f9a727a941a4bda6c0a798a810a44ca637a71ca8baa303a62da77fa7a7a3eca5c8a6c8a623a373a541a641a6b7a2e4a49ba59ba538a283a430a5b1a5f7a12ba4c0a4b9a588a138a317a4b9a51da173a252a3a8a579a062a17aa289a512a0b5a096a11ba5df9e7c9e23a0c4a4d29d1b9d979e98a4d99cab9bec9c83a4329c6d99e79a50a4bc9a9f962e98eaa3d99970949f9573a3ab98f1903d9225a312989290cd91a6a2be97479070913ba2ca9658891091cda15096eb88ac905aa193958a885d902ea10a951f880890caa09b94b58d3f9273a0509463901f9432a0db93eb8fd894ab9f069311915994a49e95920d92df94de9d0f92b691a7949a9d9c91a09191944b9d7d9165914995c79c44912091f5944a9c1091f7919a949b9bd190c39179940e9bc090b992f594729abb9088921094179a2e8f00931c954399438da691409464980000b118d8190e85649f669c5e94b5afc4a02ba0579cecb1a8a102a2b7a131b398a3a7a43fa3b1b4e1a273a436a487b5cea25318dd9ff0b58fa03918dda5e8b5fca372a557a476b587a4dca418a69bb45da45aa6fba6ecb238a5a8a694a709b144a5bfa648a89eaff6a463a70ea8c9adeea488a72fa886acc1a484a72da80aab7fa40aa7efa7e5a973a4f0a62ba863a954a4d4a622a818a92ca49fa602a85da808a480a6c1a7c1a7b0a329a65aa70aa779a3cda5f1a65aa62ca379a583a63ca6eaa2e9a4daa5daa542a274a45ea59ea5eea1b9a3aba425a56fa149a2fca322a5f3a044a1afa2daa42ba056a020a105a57d9ff99e6fa0b9a45b9e769d329e77a49b9d1c9c349d6da4bf9cb39a359b2da4429c5f9995991ca47b9b8f962598d8a3579a64949695aea3b999199443953da36a998390e694bca2d198f692749420a27d9873922194ada114983d94689550a1b897fc938e9602a16596e0957598b7a04f967b952b9892a0da950696859825a067956a96c498b69fff949a96f298289fb294f2950599939e75942196a898e19d3294ac95bf98789dc193439562980c9dae92e6941098819c6192c194ea970b9ced91a494b097859b6a918d94cf96a69ad99170944396699a5d908592e1944f99519025922f940b9800002d1ce51dbd9232a05ba343a2ceae24a101a511a342b187a15aa543a4a2b229a24da640a36fb4cca1d2a2f2a118b58ba134a1afa554b569a111a145a236b526a2bda0b7a7c9b4c3a2aaa3c9a416b4bfa36ea5e7a52fb2c8a4eea5bea69cb0b9a436a62ba7bdae10a4e2a527a60ead56a4aba517a609ace0a446a6fea7e7aa22a510a749a89aa9d8a432a719a8b2a890a4f9a6e6a7e6a742a4b5a6afa757a7f7a332a677a7d4a690a3d1a504a76ba649a389a55fa617a6dda21aa521a6dba5a1a2afa4a5a5a5a5eba113a4e4a464a56ca15ea36aa422a5eca035a268a3d3a46ba039a12ca2caa40fa00da0b6a09ca4449fe39d779f9ea4589e709ce29c6aa4979d2a9ae09b63a4be9c6897c7985aa43d9c079790987ba4a19bc2944b985fa40b9b68940d9845a4379a15949697fea3b3994e95959882a39e99c49722991ea344994098649a48a29c980b995c9bb7a16298ce998d9b4ea11798d799299ce9a07f9752991e9c80a0f6963b99759bdf9f9f963a997f9b1c9f6396eb98fe9a269efe95ec98069b8d9dc4958f98959ac79c109548982c9a7b9cac941598c799029c34942d977a99999b2a94d596db98dd9a45948c9699982e9a619470961e9857997894e096e797d498f09371962e98c298b4923b95d7963d980000d91dfd1fc29dbda13ea66da6eaac30a4a3a97ba90eaf11a43ba981aae1b01c9e17225798f0b3459af028c225aeb4ef99dd28a825adb4349d5a27421fa6b41b9f90208f1862b49b9f8a1617987ab3dca1f3a038a2f1b161a396a416a574b08da380a46aa45eae66a3eda36ea481ac74a371a40fa50eabb3a31fa5f8a59ca90ea4d4a5e8a6b6a840a467a69da7fda72ba436a66da76da711a415a645a7a0a6dfa3bda5dea6f4a5b5a3b1a5dea6b3a557a369a585a622a5f0a21aa534a6e3a4a8a2a5a4e5a5a4a438a23ba427a56fa4b5a15fa37ea443a422a1fea146a314a452a077a0bea126a49b9fd29ee29f0ca4649ebb9c3c9d21a4c19dbe9a0e9b05a41e9d2598939743a48a9caa955a9471a4189c5e92229464a49a9bed91a29360a4019b7b94e192e1a3829abc9558977aa3179ae496799814a3ce999098ec9a93a255997c99099be6a120993a9a589c62a1e798439a639c00a1b698bc9a649ca2a06b981f9a529c19a01198109a489c989fd497149a4b9ce49efa962f9a0f9c469eac96de990e9cad9d68968999099c209d2e967f998c9b979cd5951699019b429c259593983a9a939ba49446987099af9a1794ae9749997e9aa49390974099739a059471971c99fd993193bb96839a039c67950d9836997e990000781f4a210498aa9c6b9c9098feaceb99a811e31d92ae2c95ea1d8b2062b03a98021f7e20eab3959ed01d489f7fb54e9a671e3099e1b53e9e2018999fa9b5eea09d9deda126b55fa1ae9cf0a20eb4dba183a3c0a331b2eca15ca416a422b055a2cca35aa471adcfa14ea3f2a3caabe5a0d89f0da198aad0a2a6a14ca273a9eca39ea52ca768a833a40fa746a8cea651a410a74aa8aaa538a409a773a827a50ea4eca639a8e3a4b5a395a600a85aa465a346a6e5a726a4fea2faa549a7eda363a223a57da697a3b9a168a450a5d8a23da112a339a49fa299a054a14da24da2e39f789f54a0faa19e9e1b9c699cd1a1b89d2e96b39413a29c9cd98c210e52a2789b1b183419e0a2c19af3177d1ac0a3839aef18541a4fa4449a5517ff1994a4d699a7163a1874a416995c1489155ca40699400a1b8c0aa482991f96139a98a394992f99379c86a2079a7b9b399daca10b9a749c1d9e0aa1b6999a9c499e86a05299be9c6c9e11a0f9989d9c479e9d9fcb98899c4c9e539f8a98539c439e829e78984a9cff9d3b9e2698dc9b779d779db897289bdd9cdd9cd896509a3d9c3d9c3496e8998e9b8e9bd1959c99409bea9aa9951699ee9a9b9a6d9585989c9a4e9a60958398399aef99e6948d970c9998990c944e973b991a98000026207e211e9aa29defa109a191ad0b9f42a43ca474b04c9f4da4b2a411b22da1a9a632a855b4ada127a8b4a966b57ca277a6d6a7d7b5d4a069a590a8beb5e7a00fa55aa617b5009e7296189e49b473a16fa46fa62ab2e5a20ca6f8a6fbafe3a376a728a88bacb8a46da84aa9cfa936a5eca804aaf2a7a0a42fa83da9bba50ba450a844a9d9a462a496a890a9baa483a488a889a948a434a432a828a9a1a312a493a7d2a855a3eda30aa776a877a2c2a386a625a830a274a314a6b5a7eea11da34aa5ada6a8a18da28ea48da502a119a228a38da4dea050a1bea1e2a2ed9f8ba064a034a1e99f359f339c909ce29fb49c7618bb194ca0ad9a501dd11e03a19c996c1e83207aa2fc98701fc720d6a3db999b1ecd1f8da4089b1f1d3e1dfba4499be1145116d1a4a69bf295779571a4369c9899579b19a46b9c419c689d3fa3ba9b409d399e21a2939a769d4f9f2fa1349a929d839fb7a0249ac19d6d9f52a0cd995a9d449fd69f9e993a9d169f169f4999119de99e689ec498c09c769ec19d7f98669c0a9e299d28982b9cb49daa9cf597c29b549d5c9c1b97329bcf9c869b7c96689a459cee9a1f96229aea9b5d9aa395b199a69b269ae7944899229bae99f3943e99f29a87996d940d99b49a47996c948698a199a1990000831ef9209f983ba0b0a5f3a55dad92a24da88fa92bb02da310aa39ab8fb149a56eac35ad01b401a5aface0ad18b59ca545ad1caecab599a416ac03adb1b5f6a2d3aaf6aa1eb580a00ea830a819b480a1dba622a692b1a2a248a69ca6dfaec7a37ca7d0a828ac44a3f0a708a944a907a2d6a5e4a75aa68ba053a49ea5c4a171a415a87fa9f39fd7a4f5a837aadfa072a4a0a8c1a916a161a47ea89aa9daa03ba45ba885a9afa026a44aa884a906a10aa409a853a9f3a0c2a376a7d6a877a03aa33ba609a8749d48a213a5cda69a9c78a11aa48ea58c9bd4a058a25aa4a49b4ba01fa0cfa1bf9b2f9f699cc99de59cc29c3c1a680f049ef69715217820ff9f2208d5234f244aa2bf1049241825dea47d10c323bc24c9a5e88c6f2160221aa67c98f81abe1a97a5d99a3b97c69ac1a4f59a6b9cb99d10a4709b019e61a05fa3039c6c9f88a1bda2009cd59f97a1f5a1469b8c9f33a133a1b39a129ffca064a0529ab29e8aa0ba9fd899369e3aa0b09e5999c09d20a0199e2f99749d959f8c9d1199489d4d9fe79c25991d9d1f9f929c4099d39cce9e5e9c9b98639c1e9e0c9c5c97c39b7d9d7e9be396319b179dd89a4b96a89ab39c889ab795039a529c019ab095ff99d69b2e9960947b995d9b8e99b6949998ee9951970000682057216d9ab2a062a7a6a82fac9da4edaa95ac3faed7a457ac64ad0fb0dea55eadbfae6bb18aa793ae32b0c5b25ba89cafd5b06ab3ada8f3af15b172b335a668ad19afaeb3baa0f5a490a502b39097d321992346b0f09e6f94b81533ac44a362a6f0a784a839a403a931aa7ba52ba428a960aa5ba478a3bda8daa993a2d5a228a848a9cda1cea363a88fa9d4a125a4b6a8cca9f3a146a496a8aea9d5a128a466a896a9bca138a458a86ba945a120a425a82ba91fa1efa3f5a7f2a8c49f58a340a797a8e89ed8a2b3a63ca8779d3fa22ea6a8a7a59a69a11ca54ca6048e3aa033a368a40d1b199d479ca69c7f1dec98261ed41fe91ea31182244826a41dd61cc22714296b99da1d57289829fda4451a5e26c927c9a7db8ca62195227aa74599ef1187130aa6339c6d9ca79dbba4cf9c1e9eeba0fba3ee9ccd9f12a2dda29c9c3fa023a2caa1f39be49fbea11da11f9b559f70a1b2a07b9aed9e19a142a00b9a7f9ec8a0789fb9992f9e4ba0779e6899b29dbf9f699d32993a9d749f009de398089d3a9fa79cc498d19cf19e789c7598679c529e019cee97089c959df59a36976c9b129d829a9f961b9bcb9cc0995996089b889c9c990c96a79a769c3d991d966e9a0c9ce99892951b9a089c399838959a980d9a69960000b91e6b1f5e95159c6ba3fba418a8b1a43baba9ac0fadbea5e8ac65aee2ae4fa6baad1eaffcafd8a64eaeeeaf71b09ca7ecae5cb0adb024a856afadb0cfb034a8b2aff7b0d2b02ea83caf77b00ab1a0a404a93baa4db0aea5fcab00ad87adcda5a2ac32ae27abb2a4d6aa95ac07a9fea44faa1aac33a887a5fca954ab46a7a9a420a9a1aa29a604a495a80aaa6ba544a483a8efa96da53ca464a8cea9b2a430a456a8afa95ca4aaa328a86fa901a459a308a849a978a314a3c4a712a9f8a2dca255a7b8a8cba1a4a2cea65ba80ba155a265a6eda712a0fda1f1a534a78f9eb5a1eea539a70a9cc9a0fba413a6ee18649ce099ce99ac23f719f126c0287427aa23702cc82dd622e223702cbc2dc7a73d1de827ef285eaae498f715a31770a8159e4aa1e4a29ba56c9d68a139a3d6a3389d16a1e2a289a2da9cfba0a1a2c2a0ca9cb2a050a2fc9f6c9c76a00ca2349f409c57a0dda1d49efc9b1da08aa1369e609ba29f4ea12e9ee79a129ffaa0b49d619a8d9ea0a06c9d059a1a9e4fa0f79cab99999d01a0899c46991f9d5b9f169cff98eb9cc39e5c9bba98979c359e9c9a6c98669cf69d0a9a20981a9ca09dda99b297f29b7b9db3991b97789b5f9d969997962c9b2f9dab997e95609a969cca9837959499e89b84970000541d491ed297889e84a58fa65ea701a43bab85ac2cac34a5a9ace0ad62adc3a536ad7bae36ae6ba6e6ad58afd8aecea61eaec1af06afd4a653aee6af44ae58a64eadaaae67ac69a050a783a8cba72d9810a022a2f7a3f6a042a65aa823a793a599aa57ac72a983a5f3aa8cac11a989a4e0a9beab3da853a497a9f8aa9da64da426a94faa11a613a4d0a806aa59a5f7a390a8a5a9eaa4f3a360a879a99fa404a426a83ba943a4b4a3fda70aa91ba4a9a3d7a7f1a8c2a361a375a7b7a884a30ba351a7a8a850a3efa20ba774a8d4a244a286a647a84da2eea12da6f6a70ca2f3a17aa58ea781a164a1fda491a683a0469d91a406a6519faea245a882a8b2a4e425e22d5d2fdba94e27d42e12304dabdea071a6aaa81aa6fe9fb0a23ba5f0a0e8a0aaa245a522a1a49e07a29ea4bca04a9e0ca23fa410a0cf9dbea101a43a9fc89da0a184a37b9e2c9d2fa1f0a2199e029df1a081a2af9d6d9c80a01ba2ae9d179c3fa0c3a1789d429bda9f64a1399db39a299fefa0e29c219a869e82a05d9cdd99ff9d1aa0c19b98998d9d959f549b5999589d3c9ffe9af698f59ce09e7b9a8498b09c849efb9929986e9c149e8e99a497189ca89d4c9943979b9b469d129930972a9bc59cb5984f96409a689c78987196b799869bdc970000271cec1c3a95b7a252a9beaa41a944a46eab91ac10abbca434ac2bade7ab39a5a9acdfad99acaea510ad45aec5acb6a507ad49ae8cac38a5a9ace6add8ab4da486abbaac48aa9aa1eca83aaaa9a884a06ca7a7a8cba7f5a180a8bda961a83ca4e9a986abbca889a40aaaa0ab31a827a481a90babffa60ca43fa99faa34a6eca3e7a849aae1a5d7a3a4a8f7a968a5f8a363a8a8a9cda404a42ba853a95ea4f4a3eba721a90fa484a3a1a7dca8cda33aa356a7aca8f5a2dba2efa67aa867a26ba2b2a643a830a211a287a628a8caa1e0a15ea609a89fa1a6a11ca6b7a739a16ea1f7a59ba760a10fa1c7a54fa73ea14fa1cba595a7e9a09ba0c6a4a1a69ea00d9a4e9e98a09c9d9f000586a38e55987a93ba98189a08989d9cbaa0c3a1af9bf39c22a2e0a37c9de49df8a11ea4a89d619ee8a1e8a3da9dc19d77a129a36a9d159d26a1b4a23f9dad9ccda062a2159d619ca9a026a2fc9c329c75a0e1a1db9c059c41a0a0a1bc9c759be39f57a1aa9c109b7b9f28a1999c8b9afa9ef6a0b69c1a9a999eb8a0929c8199fd9d62a0569c13999f9d19a0249cae98359da79f929b6498d69c079f1b9b2e98949c7f9e6c9ab3973a9cfe9d109a1b97db9b7f9d6e9939979b9b1c9d0c997b96389bd09c06981796989a2b9c409500002a1ced1cf59217a2e5a823aa2fa776a3caaa26ac00a93aa467ab86acd2a956a49dabcdac38aa74a4d7abedac4eaa3da482abc2aceca900a4f6aa78ac98a99ea335aa0dac23a93aa357a9f6aa70a82ba3cfa82eaafda756a3b2a819aae1a763a3b1a82caaa5a779a3d3a838aadaa632a3a6a811aadda5f5a28fa8d7a93da5aca259a89da9b9a471a22fa864a93da47aa205a829a9f1a393a2daa7f6a82da399a293a7d8a802a389a25ea7c2a89da26ca229a796a878a216a2dca681a89ca2cea1a6a64fa86ba288a15da63ba88ca25da128a61da85ea21da1dca507a83ba2eea0a2a5cea744a2e3a076a58fa729a2c6a026a565a707a278a0eaa438a7cca14ca048a40ba613a1719d85a159a3a29eb2987a9e44a0399c7c98c39e6ba07b9bc79a71a0afa1469c5d9da4a133a3549dec9dd3a1b8a3ce9d449e7fa152a3b09d149e4aa1faa2839d6b9dd2a07da2369dc29c8aa018a2fb9c709c61a0e8a19f9c159c23a0a1a17b9c3a9b889f38a1809c8f9aeb9edda02b9c3b9a839ea3a00d9c129a269e64a0799bd999dd9d32a04a9b98998f9df69f0f9b29993b9d629f109ada98df9cc59e63996998819c319ec3982d98399cbd9d8398aa970e9c599d0f98b197009c159db5970997cc9b489da1987796ef9a7b9cbe97c61ea824bb257da86e27102baa2cb9adc228fe2c0b2eceafe2281b2d062e99b02429262d292e97b18829362d6d2e78b23d29e42c112e0cb31b290d2d142e8bb2f428d42ccc2dd9b15f28552c352dfab09028802c642d11b02927762a802b97adf126ac26fe26e4ae0024e8a9caacdeb0232cb72c622c96adb12c122d012d98acf72c872d792d87ac352d462d262d88ac9e2980aca5b0d6afd32c732889206cac9c2e6f2ef22d14ab622da72db52dfbabec2d1d2ec52d41ac752e932e082ed6ac2e2ffc2e572e1cad492f052f9d2e7bad7e2f502f202fb7ad802f2c2fb92e83adc72f562f9b2e4cad042ed82d312d63ac1f281629dc28f9a7241f2d23562457a31e1b7d211a238ea16e14ee19481ddda21a9f0ea5bea675a44a18ed200922cea03d1c0b21c2223a9e371bab209d218d9dac1a7720be216d9db81920206421b19d7619e21f1021789de1186f1fce206a9d9c18021f87201a9d4d18a41e3120d59c19182a1e0320d09ce617d71db01f6e9c85177c1d3a1f449c53174d1dfa1ee69b0517011da31eb49bbf16ca1c571e8b9b3e16941c031e079bd615441c701d3d9a4c15a01be21c579905153b1bb21cc298fc14e71a871c9698fc14081b721c4698e114011b591c68987614731a431cc2984a16f21aeb1cfb980c1ec123712486a92827ae2a472c20b0e527302c142d42b11528522c3a2dadb23f28c02b8c2c0ab43c285a2b232cf0b4dd271d2abb2a14b53027dd29ea2a07b50427102a2a2baab446267729122a96b32d259e281d2916b23223aa24ee2438b0311c02a594a7aeae8e1cfda81aabccae85287825922236afab2b9f2b302becaeb12c282c722b7eaeb32c832987266fae2a2c8ca32eab5fae8e2cc41c68a71ead0d2e622c6e2a21ada52ea42dda2c9fad5d2f882e962d09ae8f2f682e892df2add02fbf2ef82d3eae0f30482f462eb0ae34309d2fc32e0aaf0f30372f5e2ec2ae2d304a2f222e81ae152e7a2d9f2c03adca2677274b2733a96b12e61c361f68a5790f5818ca1b6ba4068f589ab99a2ea3ca93079e9b9fefa10215f715f7181aa13819491f892053a0331939206b21bd9fc6192a2081214a9f2119c01f0521779e9b18251f98202b9e5d18cf1e7520d39d3818921e4f20679d2218631e2720349d0d182f1e0120059de417f51db91fd79c6917b61d7b1fb09c1b17561d1f1f469ccd16181d941e0e9c2816ac1c0b1e519b9215301c621de99a4a15ea1b0f1d319af2147c1bd31ce8997a140e1b8a1c49993914a91a411cf3983a14621a071cb09864143c1a9b1b6d98ca12a219671b4a97b3138019f11ac497301cf7238c2494a9d924fa28fa2ac1b090240029362a03b29a24fe28d529c3b366245d281c29b1b46b2346279c276cb5452236252126f5b563214c240925d7b5a11ea0206f2155b51e1c141d011879b4701825164c9704b31811bb9e0aa04db12f97f8a234a441b0c99679a447a5c6ae152005a072a32daed4276724a72011ae1b2b76288325b5ae832cb326921cc2aed42c9425d39cf0ae362d8528cb1f86aeeb2de72a662812ae9a2ea62ceb2a09ae4b2fb82d722c63aebd2f432ecd2c7aaefa2f9b2e692dbfae1a30b72ec32dc2ae4b30432f202e1daf46303f2f1c2e3baf5230442fe42d15affd2d092d752c6dad2224df222d21c8a8e698a49a379739a682954f970c8da7a45e92299695951ea3a98e3394749297a2d50f77153f1757a2b915ed1b241d40a14118b51e1b20e8a0c11819202a219aa09e18d81f21211fa07918c71e5d20b99e1418191eaf1ffa9de317f11d4a1fab9d5417c01d7a1fa39d1417901d371f719d99167f1dfe1e7d9d2f16491dcd1e569dde15041d7c1e169da715a11c2d1ea89c6a15651cb91d739c4515011c521df09bfd146a1bdb1c3e9bb614c91a711c8d9a82144b1a1d1cff991b149f19621b8199c2135f19f21ad99853133119b11a6c986512fe18471a4f9855121d180a192097b190e51f7920f1a637206e25582821b1351c7a244625a3b2911a6224342521b4bc187d217c22f3b43a99e3161e187fb5e19c97977f98f0b5ee9ef1a0d8a107b64da0b0a2e8a39db5889fd7a3a1a4bab42ba059a439a5e4b355a096a483a518b213a168a585a68eb079a178a6cba708afb8a09da6eda71aaee11ce6a2aaa4d5ad4e27e91db29e47ae242bd12495158bae902ce427751ffdae552d6529c4240faf2e2e322b5928dfaea52eba2ce02acaae722fe02d7d2cb2aefc2f842e492dd1ae1f30052f9a2df2ae4330392fef2d1baf5c305d2f112e61af9530bd2f662e94af6030632ff92d0caf022d112c9a2ad5ac4120371ed518e4a8cf9c9b9eb49e8ea5229b609d879da2a42896d3962d96e0a339918891a38c1aa349852514621775a24711b91a481c85a1b915411dad1e28a18617901e1d20aaa0d117ff1e64200fa0a517891e2220a99f5517301ecf1ffc9ecd16d01d601f999e7316b71d4b1f4e9e1216681ddf1ef19db3151d1d541ee29d9515cc1c171ea99d71158d1ce21d799d5515571cac1d469d7415081c591d279d55159f1b231df39cec14761bf31c699ca514d01aa91ca19b21141a1a2a1c359a0b136c19011ba199a6125719d31a3899f1121d19851afc98ba1199189819199978113b17d11809980080729730998498cb980a94411bf3b0219a441e2c21e2b2ff9d8d15f91c39b445a0bc9ca29de6b467a21da237a371b50ba446a413a6e7b50da462a53fa6edb551a424a653a799b53aa476a6aaa7c2b42ea49da6d8a7cab315a478a709a81bb2dea364a775a8e5b022a40ca8eea8bcafeca366a802a94caef7a230a8f8a89badda9a06a620a87aad8625789a92a404ae252b2b25321593ae1b2d752924251daf1a2ed52bb8289bafbc2ed22cf92a91af742fa42d3d2c70afe82f5a2ef52c7aaf2d30ec2e7e2d81af5e304a2ffe2da9af9a30c22f3f2ee7afc93012309f2eeeaf1630ba2e5f2dc3ae9b2a27294e282bac8690aa9a239ec8a8789d8d9f349f67a5139cf99cd59c44a4fb99649bf99b83a3a296ab94019326a3de9025116512cca2bc04b718001ae2a1fd13c21c331e73a1c6159f1d6b1f1da10216a11d341f7ba05515661d721e02a02e15211d781e9e9f7b15e71c181e2e9f1d15d01c1d1ee49e2d15971c0f1e8e9ed4147d1cc01d389e8414391c741de69d4e14c41bfc1c699d1d14651bb61c1c9dd713131b7b1cdc9c4a13641a311c319cb812071a8d1b8d9b7412ac19211bcf9ab9111219701a709a55117318fe19fe9974116e18a619f099a31142181e19ac991510831645185f99290df613e514c0980080fb89188c2997169fff13dc14e6b017a1969bf995dcb282a1f19e23a02ab4a4a3e6a26ea2cbb48ea4a1a474a53db505a5f4a5e8a69cb576a5faa621a8bfb5a9a54ca826a974b5e6a5cea83ea9a7b4caa567a8c8a8afb342a55ba8cba833b2f5a432a8aaa8e6b0bca440a8c5a8a6afb8a424a8b4a872aed4a488a834a98ead8ea4b3a872a9fbac1ca019a7bfa8cfacd124fb9c2ba45aadf02ab1264e2061ae772dc92a09282eafad2ef12c172bd5af892fc62d792c07b001307b2e052d1bb04130092f982d23b075306f2ff62d38b0b430d32f6a2e71b0ad30ab2f272e11b0412e302d3c2c27aeb825ea2445239daa5e9d9fa024a14da7909e99a0aea0faa5e39c859ea79f3da5da9a329c0d9cc1a4af982d98139870a463953c915c8c28a4bb91b510201287a356847d17e119aca249117a1bf31cd7a1cb13a61c061e63a12014a91c171e22a13414a21cb41da5a05114811c781d36a0bb13161c471db79fa513f91bdb1cd99e31137a1b931c739e7013181b8d1ce29d0713ca1a5a1ca09d98126b1a221c579d4712171ad41bde9c0c12c9196c1b9e9c08127619091b609c96112919a21aee9bfb10a4184e1a3a9bb810301870199c9a5a10ac17b1181d9a2410b4163118d199e10e56152617b1990e101415501729980000521499165798329e1614ff14f5b08e9f2b15931c01b3d2a1d39ee89c10b4c8a3b6a24ea296b48da470a44da5e8b4e2a495a5a4a634b5b5a58aa677a84ab5a4a51fa871a80fb507a6bca833a98cb444a6c2a8c3a9e5b3e4a5a5a833a92fb276a55fa84ea9e5b04ea568a80da9e7af24a57aa82ea996aeeda487a846a97aad99a49ca866a9f5ac84a4a9a874a9abac86a2ffa7d1a886ac231e02a3cfa596ac7a2998249f2096ad152d332bc528ddaea22e072d962bd2af8b2fef2dbc2c13b00930a22e372d3eb05f30122f8c2d38b05530ee2e752d1cb0fc2e902d552ce4ae0d2ada28b92772ac07197c0e8c9a62a8c09e769fef9f24a6849e669f3a9f98a54a9d669edf9efda40a9c939c859c4ba4a399f998179908a459970a913a8c86a3b694a310e014f2a2b28d9718c41952a29a0a301a3e1cc2a1120fbe1a411c45a11910591bc41c08a17c107f1b881cf3a00b11821b9e1c89a0ab10ed1a391c01a0fd105f1ab71b519fb810e919b51b979e57107e19c11a2c9e84101d19441a4b9d4310c618e719fc9c11109118a019c19ce40f201863198d9c710f3f1823192a9c540f1b185019079c0c0fe1170219459b9c0ee01656186e9a810eac16f017079aa70e2116a717d099b80dda14f415a99ae50ced133b15eb99008009923092549962a281a1b1a2c1b0efa2a7a139a1c3b2aca2b29e0ba0efb302a48da23aa288b443a408a336a4d4b41ea4cea168a40db575a4d7a18ca425b5bda45ba581a7e9b41ca5a2a615a756b427a5e3a677a769b332a51aa88ea8cab197a536a8c4a8b8b0b2a595a846a9c0afc0a5d8a8a6a972ae59a5cda858a969adfaa48da824a9b9ace2a48aa81da943acdba497a82aa903ac3ea476a839a992abbe9c22a541a7fbabea249c1d5499b8acc12ad6284126f1ad022dda2beb29c5aebb2dca2c7c2b48af012ecd2caf2b3baf642d432ca82a98ae9d2a0229d427f8ac96214320211e5da92d9e2aa1eaa11ea744a02aa214a26fa5c99e14a010a090a5989d0c9e639e4ba5539c9d9c9d9cd8a4cd9af199549a88a4a898ee95539532a4e795270adb0b7da365929716491842a36c8d2e19df19e4a2fe832d19ac1afca19303b919961a1da12309fe19081bf0a0fc0b9a19341b9fa0100da319a91a46a0d20c5019e51adc9fe50d1419891a739fa10dd0182a1ac89e640e8918d019299e030e39186819bb9dba0ddf170e19289dac0d7d176718e19c6a0d07178d18a59caa0d7f163818229c3a0d1516df17669b350cd1143316a49a040c2b144c15ff99930a7e12e0136299aa0845119e127498c2094f1125141d990080df8ca9045e94e8a158a01aa0b9b049a217a0fc9e6bb2a2a274a0c19fb5b364a3f6a012a26ab4fba3e9a224a4ceb444a463a358a40ab53ca473a37ea425b584a485a481a5e9b41ea591a611a754b423a5c9a660a737b38aa50ca881a8d3b1c9a528a8bca8b1b094a539a893a8cfaf7ba586a8fea859ae2ca583a8fda84faddba44ca8c4a898acc7a43ea8c2a826accca45da8f6a87fabada442a80da9d6aaaca43aa8eca868aae8a209a744a871aa1a9a06a3d1a4b1aa6e207491de9869ace4244e214c2059acbb256422bb200dacea23951eb11af2aa4317979a079edda8439e62a071a16ca6c79fffa08ea1d8a5e69f2ba153a16ba5889e58a0fda013a5999db69e029fc2a4699c5a9cd09c69a47c9b539ab69a59a49499e8979f9704a404989390da916fa30f952713a41414a300915e17bd1891a2308da218dd19c4a1db89ee18451aa0a1a2832119e8194ca17903e0184f1a10a15203ae187919e8a0a5087c18481995a05308401809195fa0f207f017bc181ba0210a4c175e18539fdc09b516ff17779e970941167717d29d4506b715b016369dd70532151f16979c63085814a1150e9c04082f145d15199bdb0704149f14ef9a6c090814b814739a680916130c14b19a0207ed118e12d0991f059a0c400e28990080f39039932a94fea125a16aa387b0f1a281a25fa26bb2f9a325a322a3e0b352a4b0a3bba470b43fa4d3a4f1a4b0b441a45fa433a5efb43da440a36ca411b5d5a402a664a7d6b419a522a7dea740b464a538a701a81cb3ffa5cba75da8a5b1eca503a834a86ab096a5a7a75ca84bafa7a5d8a78ca8fead2ea5ffa775a829adeaa4b2a745a871ac85a460a71ca8e7ab96a48ba740a804ab8ba479a741a886aa95a443a754a8eba952a4fca621a843a970a35ea679a7cea8aea279a5b2a68aa857a2d0a41ba630a8cea146a46da5cfa77ca136a48fa50ba751a10da4e7a4bba6efa098a23ba377a64fa0e2a0bba179a66d9fd09f27a0d5a5f89d899d429e6ea5ce9c119b929b13a5029c8e99be99b4a4cc9a449832986ba489994c96f39730a484982c944795c8a30397a190d6912ca354959c090c0b7fa27d94bf0fe010fea164930912a213a1a13592f3130b1522a117914b13ab14c0a0e38f5e14541468a03e8ff113fc13d89fed8c5f13c414489f808cdb12f012d09efe898c129a12409ec88932123712e19d6f89d811f111a09d4b869611bb116d9de98162127b112f9dc9810612c812fe9ca701aa12e213919c950164110312429ca70427120e138a9b91013011a512199b150410102110c0999d01570c1110af960080130ddc848e9478a0509ec89f7bb0ada11ea0f6a06cb27fa26ea069a1aeb326a340a2b2a369b46da39ca2fda3a2b44aa448a426a5e3b4a0a45fa45ea60db5dfa421a54ea7d7b421a555a6dca73fb4a5a5e4a7e4a848b39ca534a8c7a897b133a5f5a78ca856b01aa558a73ca8f0ae07a574a759a8bbad15a5d0a752a800add3a48da733a85fac97a454a717a8a7ab7ca426a7fea7ebaa1ba487a656a72caacba306a6dea672a988a3d0a599a612a934a34da55aa6baa811a3fca4c5a583a80fa3a2a437a5e3a7a1a26aa4efa4dca651a25fa4e1a47fa7bfa1d3a338a4f5a6f4a0c2a21da3caa642a0f4a068a14fa6809f1aa0c4a0d0a5619e7e9e789f6ca5889d059d649e21a5869c7c9b269c07a5189c339ac09ad5a4a59a079822997ea48a999c95249704a45e98cc89949153a332967c093c0b1fa32b9586124011e4a275931812261488a2e592f9138113e9a1b5928013d51262a18a9100116c12e6a04491af102e0f90a0d8903710a80e3aa03790910c0708ee9f738e140c4e07f79e168eaf0beb06619ec48d7a0ba706b89da68d460b5c06449dae8d220b3106ef9c8e8ddc0afc05959c8d8c9e0aab05f99b258c26045a85319be48b03841285809a7b8cd3893b8b2d9a918a998e6591259ad78caa90c890a6980080670a1885bb9191a02e9eb59f5fb032a1c59fbe9e32b2e2a140a0769f6ab3b3a2d0a0f4a155b493a304a4dea490b401a432a41aa5c8b44ea408a53ca6e3b4cfa4c4a52ba7b0b4c7a42aa6aba725b4f8a4eba6caa7d0b2f4a46fa7ada758b1dba424a773a740b0f6a4cea6d0a7bbaed6a445a7fea77bad9ba409a7cea78dac83a4eca6bca7d9ab41a4cfa6ada728ab30a4aca68da77caa11a49ba68da72caaeea38ba6faa7c3a9cca371a68ba748a98ca30fa605a7eaa82aa3b2a584a66ba8cea223a5cea5b2a774a29da43aa544a74aa231a4b9a425a7dda139a308a4cba627a179a23ca378a6a1a03aa11ea239a6da9f58a011a1faa5929eec9e3c9f9ea5719d289dd39d0ea5899c749b159ccaa4b69b169a6d9a9aa4229ac4978f9763a44a99909512951ea432987593b991c0a3fa9646906f9121a3a8960c90e48ac8a2d4951689798a2ba27695b888018ab9a1ae946888a3895fa1c393238eda8fd3a02b93a98d458f78a0a6925a909891f99f479215903b91759f1692c58ff192d29e3f914f8fa192829e9491f78e6092089ec490828e0f92bc9d6a90fa8da891279d118f5e8d0f8f539cd88eeb8c508e6b9b388eac8c59904c9b4c8da48c63905e9b598d718ea391ad9be68de68de08d519aeb8cbb882c0a469900805c140a14259714a079a0aea225b0c3a0709f7b9ef4b1bea16fa20ba129b324a24ca3cba137b411a2cea3c6a374b466a2afa218a4a2b409a329a43ea4beb489a32ca430a583b410a467a5c3a616b4c1a4f2a6e1a7cab234a581a749a873b16ca5a3a76ca84db06ea5f8a768a89cae03a508a7dba763add8a42ca711a879aca7a4a5a6e3a7c8ab5fa498a665a7e5aa3fa478a656a7eca9f4a3fba5d2a656a96aa3a8a56ea6dda83ea35aa56aa675a8eda2f5a4f5a5fda74aa290a434a557a7f8a157a4eaa4eda6e2a103a487a4baa6bea15ea31fa47ba669a1b7a2faa37fa62aa16aa23fa3b3a67aa058a1f1a1d7a5b29f91a00ea1b5a56e9e4d9e599f56a5ae9df49cac9d16a5cc9c819b269cb5a4279c4d99b79aa8a40a9b2a983a996da4b89912969a9724a4e89897950995ada34c986293ad9422a31d98dc925894a0a240976e92109432a2d596f1918c93c1a186967691129392a1659500919294fba0e194a1903d949ea06f94fa911e9556a02494ee92bc95f49fe3925b923595389f82924493b295769e2d92fe929195519efd91d3926a95ef9dba917c920e96599dfe901f92a295c99cdb90f2918d941d9cb890d5926b94a59ba790a1923994a99a83905392de93829ae08ed4925894a6996f8e3d931494e3970080c213e712149491a0bda13da3a9af5ca187a2fca391b1d2a1a8a418a5bfb2e4a2c5a431a511b4fea276a478a549b4fea2b5a4c8a57ab499a2c9a412a586b486a3cba403a65db404a4a4a67da7e0b33aa417a6dda682b2eba4bda6a4a73bb115a5f9a604a823b0cea481a7a4a770aea4a42aa7e9a72bad89a42ba7eea705ac49a472a69ca7e4aa18a464a6a3a72baaf5a34ca699a7a7a9a1a321a670a71aa94da309a6e9a694a8f3a2b2a5d2a62ba8e3a26ca580a6a8a799a224a525a63da750a29aa47da5c3a6e0a1f7a3c1a4b4a681a1daa218a46ea6f3a0c3a1e1a253a661a0cea0ada134a6ae9fd39f98a0b1a5029fd09ef39f65a52f9e539d0a9e10a54a9d789cf99cb9a4b19c689b0b9c6fa4129c179a849a5fa46d9bef9815994ea4459a9297cc9810a4a99985950797a8a30f9913958c9622a3d498b59405968ea28c98a7953d9722a2269884962698c0a1e8971a96c69764a1a496c59604991aa1269650975899cba0a695ae97939954a08195de972099f59fba9416973a99579fbd9466964d99cd9e9294a996fe98309e42942d96ae98cd9d8793c695b798609da6926e955a989d9c53923a95b9971d9c51921c958597af9bd3918d94b996e29ad591eb943a96609a93909c924193e298919060923a92a4970000f919381c4c9962a050a453a58dae2aa2eea5c0a6e5b08fa29ba71ca8f9b129a313a765a7bcb377a28ea4bba337b4ffa12fa1879d59b4f8a137a1b7a055b44ca226a1a6a00ab45fa2a7a32ca254b35aa329a478a43eb257a485a532a6f7b081a4eda5c9a600b0faa39ea5e9a543ae56a4c3a5c3a5f3aca4a44ba690a711acbea47ea6daa7e6aa50a464a6a4a795a913a42da6fba691a87fa3a6a5c4a60ba8ffa23ba547a680a7a0a2eda4eba513a76ca2aea4a1a5baa659a274a45ca567a6e1a10ea4e1a421a668a1faa22da416a6e5a055a219a311a681a054a152a2fea530a06ea036a1f1a5899f409f32a0b2a5b99ec19d889e7aa5f29d519cbd9c32a53d9dfe99a29b1ea5ba9cab99ed992fa53d9c5c9898990da5ed9b0e983599b3a4249b9097079a97a4919a4e98ad9a4da4129aa698339b05a49199e9985f9b44a36f99d2997e9b69a2fa988f9a329ceea18298ba9a4d9c98a13198b39a4f9c07a1da97259a449c7da050979899d19bf49ff0968799c59b649f569625993c9b6b9eda95ca98d29a9c9d9395c898689a109d26957c98669a8e9c7a94f597a199449c439491975499bc9be193bb96c498119bf493f7968498639a149459966198e4992894d096379861999c93d69667988a994a9247953396b898fc99549ebe9f06a829a2e0a790a82aae0ca4eea87aa992af7da41aaa6dab05b00ea526aa0bac4db13ea439a765a912b301a308a01ea1ffb360a16b961398b3b3f6a1c99feba071b362a108a188a0a0b2eca19aa02ea0ccb1a1a2a1a3b6a29db0daa2c5a33aa34fafbaa2b4a36ca3a3adada2aba34ea47facd8a2cda4aaa4feaaaea37fa516a698a9e9a3dda5f4a6b9a8dda3bda5e4a61ea8bca36ca582a676a779a364a579a613a717a321a532a6c5a6aaa2e0a4e0a526a652a29ea499a5dba5eda1ffa315a594a58da143a362a455a5eba0dfa10da31ea562a03ca06da11aa58d9fe09ef89feda48b9ece9c209e00a5f29d109c5f9c11a5939db29a429c20a5e49c189835994da5999cb8970c9732a5269c1c97979607a5929b74962b98b0a4bc9a7597739775a4599a3a987c994da4099ac098239a12a4bb99b799309c9aa35c99159b359cb6a23099b39bf09cf1a13699169be59c51a1dc98039bd79ceba09398d59a769c64a03b98599a759cf99f0698519a799c8b9f8397629a3a9ce29ef296129a349c409ea996c799f69bb49d59966d997e9b2a9dce950599ed9ac69c499583982e9a179c62943b988099639bdc9310985d99339bea93a3979f99239bcf9302982d99a89a589358975299259b58941598ea99219be598f5986f9b00a66ca00da508a6e5adb79f4aa230a22baf719c989c2c9c0ab0b8987618c31ccab0d49c9d99c99de4b17ca0bba2d2a59db373a134a2aca5cdb3dda189a4d5a576b3a5a008a37ba478b28da103a458a461b1d1a1f6a3eaa22db064a1d3a0f29e56ae35a0c99cdf9419ad68a17ba1dea065ac26a323a59ca6b9aadaa309a66ca73ba907a46da6d0a712a8e2a325a668a7c7a68fa3e5a527a7f0a553a3a6a5d5a661a5f9a263a585a622a5aba223a534a69fa4fba17da46ca56aa445a174a379a43ba4d2a015a23aa315a43ea0cea031a1e7a3a29f799e529f89a3889e3a9c619b2ca3d69d5696c99460a3f89cf60cae14ffa3109c0f16991746a4479b1718241980a4f29a9715fa18e3a4899a4b15b71823a50c9acf112116fba4f099d20a86128da4d599be900c955aa4f199fa973b9a41a43e9abf9a139dd5a3ff991d9cda9d83a2009ac49c869e9ba1e199f09cb49e11a1d499239d9c9ea1a08f990c9d819e39a04b99b49c5c9ea99f0b99929c469e419f9e988d9c419eba9e8098619c089e439ef697b09b519dc09d7b97029bc29c2a9ddb96839a2f9c8e9c0e96de99ee9b249c88957899249b7a9b61952999c99a6b9b2295a698729abf9a23958298029a4a9a7194fc97fc980f9a2994fe96d598489893909f170612a8a364a054a6a3a71aae54a0eba42aa6ebaf4ba084a576a60eb1fba0a1a63ea866b265a274a8d2a971b328a359a85ca922b40ea473a987aa3ab44fa467aafeaaf1b323a399a8c2a816b357a363a675a8c0b1e6a1bda46fa51eb090a292a452a5d4ac1aa453a609a8e1a928a4a4a6f0a796a67fa3cea6eda770a50ba4caa7b4a866a540a404a8dda818a50ea4eca7e3a8a9a47da307a759a822a41da316a6bfa7e2a389a267a5dba6fca233a2c6a4d8a5b6a2e9a13ca464a578a28ca119a34ca446a235a1dea10ba3aea1dba0ef9fa5a088a146a0c69d919ee9a1289fb298109a47a2509de9133c1824a2bc9bd61c001fcca2899afb1d302017a4f399d01d1320c1a4a99af41c531e4da5d69b051ab61b85a5749cd814851367a5359cd995a197d6a4089c229b229c70a4309cb89caa9d22a4159c8e9d349f83a3319bc29d599f2fa2839af59d9b9f19a1429ac39d839fada01b9ac09db39f49a0be99649d3e9fca9f8399439d169f169f3399e19c9d9e5f9e8b98b89c269eb39d3b98669cf69d559d1a982c9cac9d139dc797d39b5c9dcc9c0197ef9ab89c349c92962f9a2a9cb49bf295ee99bf9b239b6c958999889bf19abc943599179b839acb943999a19a599a1a94db986a9a6a9a3a948c98269a269a1b175121762206a230a036a6cea74cad32a2eea72fa97baf52a276a95eaab8b0e3a3a3aaf4abe6b129a44dab38aca0b2d3a434ac86ac5db392a403ac61acd2b384a484abefab9db354a392a92baaa7b2cea284a726a870b18ba14da308a4fcaf31a0c69fb19f49ad959dad116119f0a9739cf61676183fa7429f389ffda1e1a3d3a304a645a70ba1c1a31fa772a8a6a057a3f8a65ea8f4a05ba380a65ca828a155a38aa648a8eda06aa35fa629a854a044a3e9a5bea7bc9e0fa390a50aa7b49e4ea27aa4eda5eb9cc0a132a3dba4f89cb7a01ca195a2fe9c079fa79cfb9d109dbb9c3b17aa18109e14993020f42002a0cd9408231f246ba1288858247925b0a3f60d3124132586a51e0732235a24b0a6d58f4a21f121ffa67198571b351c64a6a99be195d59870a5989b0f9bfe9cb2a43c9b329d269f2ba4e39b529f2fa16ba30c9c16a0bba1aba2ae9bda9f8ca1b7a1f29a539ff9a0f9a07c9aeb9eafa044a0159a609e52a09b9f75991f9e22a0969e4199b89dd79f059e2699499d8d9f949d5699219d4e9f309d42990a9df19edf9c5b99d19cad9eaf9cac985b9c089e5d9c4f97c29b639d059cc796229b069dbd9bdb95579ad29c5b9bab95df994b9c419a8095ea99939b859959943d99289ba6998594829885994b98f714f220502150a15ca0d3a7daa85aaccfa3dba96fabecadb5a4a9abc7ac9daf4ea550ac63ad74b0f1a5b5ac0baef5b06aa628ad7dae62b1aca64aadddaeb2b1d6a5d0ac35aea1b1f2a411ab70ac63b1d2a034a4a4a4feb0380d2225512883afe715b326a9283bab2c994e206b222fa5c19ed19feaa0aca158a0fba4f7a5f49f42a25aa6c3a7d89e25a31aa807a9449f77a317a8e2a8a29f81a301a8e3a84d9f4aa3b5a79fa83b9e1ea325a759a8669cdba2d1a627a8099b84a20ea69ea7a194d2a16ba5a1a6260e96a191a48ca53b0e52a0c1a2c6a3f917219fbf9f12a0b71bd39b6814a918201dd88e8223ce24ac1cc51766261a287210601c07284a29cca0021d22284929c1a58c19de25942723a80490a7200f220ea85d9a1e959696d5a6819c1c9ec49f6ca5b99c099fd1a06da4109d09a085a2c2a3719d86a090a262a2ab9c26a07ca2a9a17e9bc29f88a116a1f49a4c9f22a192a0539ae39efea032a0d599729eb3a0a59f6799039e42a0b29e2b999a9dca9feb9de1983e9d7b9f4a9db6980d9d089fea9cb498b59cb39eae9c5c98669c059e279ce297e19b5e9d509b45974d9bf99cae9a9696f79aba9c419a4096e09a829c289aef95839a4c9cc699ff95499a2c9c6e994095cf99de9bdf98a295db98389a47970000131e4020359b8f9da8a46ca6e0a976a4b6aa5dac2fade0a41eac3ead51ae6da594acafad07afcba5c1acf9ad93af45a61aad68aedfaf1aa60dad5caed7af53a61aad8faea1af0ba674ad0baf56afcea50aad5caef8af010ff0212f2548ae529aa0208d1632ac06a59aa923ac79a903a46faa10ac1aa843a42ca999aa3da6ffa3dea816aad9a556a4c8a8f5a9d0a56ea476a8bca926a5c9a34ca88da990a4e7a342a892a92ba4a2a320a84ba9d5a334a3e1a713a9a8a2daa265a7bca8caa14fa2d6a66ba849a1e8a158a6faa707a0f7a128a648a7539d7ca18ca596a6790d18a073a393a4ad200699571df11f7c26a01f3e29fa2acb272724c42c442e1913de22142c5c2d82a9b119202603281daabe9a8c8cc90d62a8079edca006a2f5a5369d61a15ba332a4319d6aa130a3d5a24b9d46a120a31ea2c29cfba0b2a2bda0a29c9ca03ea224a0319c66a0d7a17b9f129c35a0b2a1239fc09b03a06da18f9e419b8a9f17a14a9ee19afd9edba0019e719a779e83a07f9d169a059e3aa0139d9d998d9df79fb49c3799369d689f7b9ce698dd9cf79e0a9cb298839c629e459b6b984d9ceb9d9c9a3498fe9b8d9d5d9ad697b49b669d309a33974c9b279dca99ab96219b249d2b9a4595659aea9c6699a395e7991b9c71980000091cd31ddd94b1a01ba78ba8aaa9c8a367aa1dac4fac82a4bbabdfac3cad06a52dac43adcead83a590acb9ad37ae7ea5c5acefad45ae88a5ccac12ae28aed0a5f1ac31ae74ad1da5f0abecac5eab909ebea5a9a7f1a6f693349ce89eafa25a9a5ca027a38fa498a288a6f7a84ea704a559a91bab58a899a462a9c6aa34a7f7a3eda84daaa1a696a3a4a8e4a907a69da351a87fa98aa5b1a331a83ca91da5e9a319a832a9c4a489a3f7a7faa86aa467a3fca7fea837a477a3b5a7cba8eea3f7a245a7aaa8b7a322a2b0a66fa82ca30ba20ea634a8b3a268a2eea589a719a27fa0c4a518a8d7a1af9ddea7cea81da361a197a54fa7afa78526a62dc52f0cacdd1ff528872ab1a96a9d48a715a93ba5169c9ea252a5cba0e9a062a31aa50fa1679fa1a2daa4f9a0e09e67a258a4aea09b9efea13fa46fa0f19db7a1d7a3c59fed9d8ca162a3e89e4e9d20a1ada27c9e0c9ddfa055a2079e599c74a0eaa1f99dda9b33a094a1c09d1a9b8e9f16a1769d929add9ea6a0e69c049a429e43a0979cd399eb9d00a0229c9799799d6c9fd79b3e99319d099f6e9bdb98c59cac9ee79a50987e9c259e5d9aea973d9ceb9d499a5197e89b8d9d0b9ad3965e9b319dcd99b996179be19c7399bb95219a7b9cca98ed958d99e09afd960000751c361db595f6a1cea81aaa68a9fba3b9aa1cac43ab74a480ab9cac1bac99a4efabefac78ac02a53bac36ada9acf5a436ac39ad88acc0a416ac28ad36ac72a468aba8ac20ab71a27aa906ab48a988a038a7b0a82aa89c9e45a527a707a73ea007a6f8a714a7a5a379a8f9a94da87fa40ca9ceaa1aa8d5a3d1a865aae0a67ca3a7a802aa23a661a36ea8a7a9b1a546a32ba856a925a5a7a304a813a9d0a4b5a3b1a7eda8ada48aa372a7c9a867a44ca333a7a1a81fa4cea2c7a664a8efa352a269a63ba866a3eda11fa6f4a7eca2d9a115a6cda78da298a1e0a582a713a2a0a1efa5c0a739a253a1e0a56ca7bea1649fb8a36ca5c0a01a96549b99a03e9e1583a58f6c94af98ac95329bb39c8299ba9ccea05fa2ca9c599df1a1b8a3109e659d4ba231a4a09e3e9e4ba21aa4969ee79dcfa19da36b9e6f9d56a1f8a2139e019d0ca1a5a2aa9d939cd0a05ca2849d479ca3a002a2679d159c70a0c2a1469db79b39a07da11f9d5c9bd39f4ca10a9deb9a609f10a1ea9c579ab69ed2a0f89cd0994a9e97a0a39c6099d19d4ea09f9c3099a99d08a03f9cd298289d8c9f109c6f98cc9cfb9e5f9b2b98939c819e079bbe97359cf09d919a2a97ce9b719da499ed967f9b099d38993396159bb59c2b983e96809ab79b099600007a1c2d1dad9459a166a88aa9dea7e3a2d8a95bab5ba9a4a36caaefab25aadba3a0aa30ac83aa11a4b1aa43ac70aac0a385aa20ac33aa92a344aaf3abd8a982a3cea978ab5da94ea328a9cfaac5a835a36da8d9a93ca8a3a2aea726a975a7b4a2c1a71fa96ba702a323a86ea990a7fda24da896a903a7ada24ca8a1a94aa65fa22ea86aa99aa55ba20ca837a9f6a476a2dea70ba996a491a2b5a7dfa837a4a8a27ca7caa825a490a248a7afa8d7a376a20ca782a8a7a31da2b9a664a875a3b3a187a635a87fa36aa146a624a860a33fa10ea604a827a304a1c8a5caa7f0a2d5a08fa596a7c1a2b3a03ba527a776a265a0e3a4e9a673a2409f07a4cea57da1f19c72a16fa3a09f1a99ab9e30a0a79c03998e9e25a02f9c579b3ea0aea1b69c039d68a163a3fa9df79ddea108a4a09e469e98a1cda3b99e609e6ea144a3799eca9d26a1c8a2259ef89cbba042a28d9d979c7da0fea1519d489c56a0aaa1ea9cee9b1aa089a1cd9c1e9b7d9f24a1a09c9d9ae29ee7a07d9c2b9a7f9e96a05d9ce299279e57a00a9cbe99e49d25a0de9b85998b9dda9f9c9b2d99359d3b9fd99ad298d69ca29ed9996c98779c289e47993198339cba9d0599b797f19b5e9dd098ac97019c189d5598b796b39b459d18995796db9a7a9c8898401cd423532662aa9926bf2a742c04aec127d92bba2c6eaf51285a2c402d60b070289b2c5d2df4b09d287f2c782db9b10b28662b8b2c62b2b727e62a142c35b26728132ce42c5db13928012ccb2c5db08026262a4f2bb0aee82555279b28d4af9c1e90a875ac8ab168280229a127feae0d2c0b2de12c26ad5e2c0d2d032d26adcb2c682d472d02aded2c3b2d1d2db1ac282b209e15aa19aff029c2a987ad29ae4e2eac2df72c35ab832e762ef12d79aca82e932ef32dc5acc12eaf2e152e05ad022fe02e382e27ad182fcb2e132e44ad282fd62e0a2e3cad772ffb2e1c2e69ad162f912ec72deaac382c352c912ba6aa83243e2666269ba5661dc021022389a2c61a85203b2253a109184520ec21fea0118c500c99137da20695579cff9d3ba3141c27227d2308a10f1a9b20fa21769e981a8d20c021329eb2192d2046212f9e6e19c31f0821229ee518521fcf20db9da118ea1e7020889d5118891e35203f9d2b182f1e0920389ddb17d81d931f059da917701d401fa19c5717421dc91e469c0c17f11c6f1e279cc416b31c1a1e0b9c5b16781cb31d739b83150e1c411d959a2c15421bb81caa99d114091b991c46998c14b81a6c1cd698b314c71a691cb398be14b51a471c8e983e145f1a0c1cdb98b8155b1a7c1c559945185b206a2439acfe255f2a1e2cc2afda255e2a882bb1b04c278d2b8e2cd0b159276b2b872cb6b288276e2b402cd2b3c526a729b52a0cb4f5253c29212adcb3cd25fc28d82936b30c250a28dc282ab21c2323256a25bdb07c19bca43fa7b9afee9b81aa53acf2afd22286a170a508b0f4284529eb2837af7e2bd52bde2bfcae6b2c292c582b9cae9d2c112a052860aeea2bbe9f4da942ae142c21a34aaa50ad7d2da62acc27d5ac202e1e2d502c57ad882efc2d4e2dbbade62e3d2e782dbcad152f852edf2d00ae552ff72e452e66ae9f2f1e2f2b2e6baeb42f0e2f1e2e5baeea2e572e7d2db3ad872b072b4e2a77ab1c211b238f23c5a6f612981d6d1f55a4f214501d9e1ecfa360101516a11738a3bc8bc499299a94a24d8b0e9c2a9d92a15016c71ae31c01a1b21809204c210aa01519d51f50218b9ff018771fbc20cd9e9e18bd1e7020339e3f189d1e4320f59d19186c1e2320c89dfc17351ef31f569df217fb1de71f2a9dd617eb1da01ffc9c9d17841d381f0b9d40174a1de41ea09c8a16e11c601e669cec157c1cd41df19b9215041c5b1d839b18158e1bda1cb79ae914201b951c589a6514b71a7d1cc3992f14561a371c699926147d1aea1bd8984814211a691b89981913f119221be097a515ac1a9a1c8699659799906c20b8ac1724d2281a2a94b06523fc27ff286fb10924b828dd29dbb25a2402299429f7b39423a4278b286bb4f02110262f27adb45121c724bc25b6b4a71f8022ad234ab4971cd31ee21c5fb3541c481552962cb27210259e2ea10ab14b9695a38fa457b0141003a236a39faf35212c14fd94efae0e2710257d2436ae122a55283826a1ae072c84274b22e8ae6e2c5927831c0dafee2ca0289422acae582d8f2a342824ae012e722ca42af2adb32e622d652c2fae042f072e232d43ae362f542e752d90aea42f9d2ea52d93aefd2fd62ed82de5ae0530d12ed92de0aed62edc2d042dc5adaa29f4289028e1aa4618c51b351afba675974e921b0d82a5fb92b091a50c6da4cb9045947a9226a3668e28945692bca2c00a3a0a0e0c36a269142519a21a6aa11217b91d571fdca08618f41f1e21bfa07818c91fff202da03818901e3a20119fa4170a1eb81f7f9e7017ee1d611f359e1717c41d871f239e0217961d3d1fe79da316581df61ead9d57161e1dc01e819df615dd1c751e449dbd15761c1b1eca9c59152a1c8e1d7f9cec14ce1b041d329cab14031b9a1c659b7d14ba1a3a1cbc9a5914511a101c339afe13a819561bbc99ae139219f51a1e9991135919a51ae49847134919c21a8c98a5116518bf19379800804b9ac0971c9e3e1d4f24b92563b04c1e4d24522635b2e71c4024b9255db35c1c2624fa2448b47211dc20cb21a1b4ca91711c381dd0b46a9817962d17d9b4379b899c209798b4b19c229f3da000b4639c13a2a0a1e1b2439edea217a4b7b171a0dfa4d3a5abb07ea071a5eda5b8afd19e98a483a599aed61a4ea026a214ae9425601a3d9b68aed929a8231815c4ae0f2cad26cc1e39aff72c66292c2554afa62d352bd9281baf212e622c922af9ae9c2e4d2d272cdfae262fe02ddd2ce5ae972f5c2e512d28afde2fbd2e7b2d49af1830082fc22d6caff72fc42ead2d1caf852dc72c1d2cadad2c264a255c240aaa7d9bb49c829de3a6579c949ddc9c44a56d9874984396c6a45c94d094d68c4ea428917b918e8cd5a3fb84ba100612e7a2dd0f1b19851afaa12715981c2c1eaca11317ed1dd61f31a1d517b31e2b20a9a09e173e1e16203ca00017ea1d7c1fc29fb916c11d461f469f6116761dec1eec9ef6151d1d831e499e9315fb1c2a1e2a9e7415b21cf31df39d5215781cc51dc59d3a151d1c5b1d8d9d4015f71b371d679dbd146d1bf41c229d6914c71aa61c7b9c27146d1a291cb29b3813e219a51b7e9aba125a19de1aca9972124c19c41a719979121519331a3099f1117f18d0199099701157177f19109a00803698a998f698bd0e221ee3229ab01499771a782081b2ee9bff1d211fb5b3b39d49155e1667b48fa0349f249dcbb47ca141a135a2e8b47ea1e1a252a2e2b4fca115a4f7a390b42ea28ea495a409b479a205a5f2a516b3efa155a557a6d4b17ba210a63ba7c7b01ea3f9a6b8a7a5affda2eea626a8a7ae8fa12da67ba72aae9f9bf3a40aa7cdad9d2246a09ba4e4addd28dd20029b80ae282c1128182429af5f2da72a52289aafef2d0c2c262aa5af8e2ef02cda2b9faf062f992d722cc2af762f272ef12cbeafc32fa82e642dd5af1830e82e9c2db0af1a2fe32d202d75aff72a002a2629eaac191e7f1b9e15f9a85e9dc29ece9f28a7bc9cad9df49c5ea50f9b539cb69c7aa411993f9a4c990ca48f957c94a2929aa39c916d0a0e12f1a28804cf17fe1878a2dd13631c9d1deda19215251df61e5da15e152f1d821e97a05715121d521e65a03d15e01c241e12a02e15d51c061ea29f2215811cc71d519f0215741cb01de69eae14321c6d1d959e7414f51b261d3f9e3f14b21beb1cc29d26141f1bab1c449ddc13ca1a741c059d5f136c1afe1b879cf312171a8d1b1c9c8f12bc191f1b709bd8112d197a1ac89a86118818ae198d9a951180185819359a6d110f1814192d9a4e0f70161d187199b70d5d14dd15549800808d032105a698629d4119601a7bb08d9e56142b156bb226a0369bb695a1b3d6a19d9ef59f5ab41aa362a2f4a1b4b45aa312a4f2a3e2b411a4e3a4efa4dab44fa48ca5c1a59eb44da4f5a51ca70db45ea4fba686a7fbb249a41ca7bea7c2b162a401a7aea7cdb019a444a70da8e0af26a424a70ba8e7ae40a48fa79ba81eaef7a303a8e0a8b0ad83a14ea797a81fad2c1c7fa422a656ad9627db1c649a0fae322bba27af248baedd2c972ac32849afbe2d642ce02aaeaf552e0f2de92bfbafe22e9c2d772c01b02c2fe32dc12cecaf052fa62d7c2c63afc32ce52bcd2a19ae2b259e241a2377aa9f9b3a9dda9e8ea7ff9eeea080a064a6899db89ef99ee5a5ae9c619d859d70a5349a2b9b9f9ae4a41b984e96da978ea415950a91358c46a465917e10d311e3a3418a2617a618dda2cb0e351a091c3fa2ae124e1c3e1de0a1dc13531ca71d65a15a13451c4f1d11a162132c1c1f1d9ca067138b1be51c09a0c6124a1b781c209fe012db1a6a1cad9e9e12e71a331c239ede12a51a0a1ce79d7f12511a0d1c6f9d2912011ab11b299df511bb19471be19ce5116519e81a779c6f111219831a359cd9108f18e619b69ba71024185f191d9b9f109417a418549a0c1093162018fe993a0e40157c178d99e20e5e14c71525980000ef136216df98289e34138f1a8bb08b9ec51ab71eacb284a03f9bba1590b326a29aa0e69f45b4bda24fa2e2a18bb4a8a306a4e1a3bbb486a4d0a4dfa4bcb46ba4b4a4a5a57ab4bba4d8a507a701b408a582a721a821b3dfa494a734a8cdb1dea4e5a76ba8c9b0cba497a748a818b08ca4d4a77ea825af6aa436a8a1a831ae4ba41ea8cfa874ad22a427a8d8a803ad0fa3aba7afa8bdacc89c8ea5f6a696ace4215aa0b1a213ad0b28a122a71ee1ad6d2a5c28192648ae1d2c292aca2891ae892cf62ad629c5ae972c002bac29b2ae282bab29dd28ffad3e263725752318ac45946b9bae9e76a9589fcba0d6a125a7fe9fec9fb29ff4a5519e409fb29f9ba5119dc29df99df3a4479b119b919b70a410990398b19730a4f396e590138c02a46794ee09931151a3a18f9817b418bda23a040d1a841b3ba2e90c9e1a2a1cb4a10210ae1a461c37a16e10d01a611cf2a00511df1a241caea0a1104d1a1b1c2da05910311a841ba59fba10cf19041be69e40100f198f1a389edb0fb718231a9c9d32106d18ce194e9dff0f3c189019159dda0f1918f918b29c810fe8172619879c590fb917fa18349c140f6a17b4189f9b820e5616f317a09a6f0e2916c117e399be0d98157017ec99ec0cde143b16189a930d68147416289b00802590ca922f9ee8a0c89fdfa192b03ea1719f6b9e38b255a25ea100a175b3dba2c2a173a129b410a484a376a37bb426a4c1a3b2a49db420a498a4b7a495b4b0a43da57fa55cb479a4baa51aa6e2b37ea40fa685a6c3b2daa4baa665a780b1f0a446a714a8c5b0f1a419a8b2a834b006a512a8bba818af9ea40da870a8efad70a4f8a767a85cad90a40ea880a8ffac60a4f0a76ba878ac52a403a8a9a8e4ab8da2e6a624a8a4ab659d2ba445a5e7ab6a1e839a2c9d34ac27240e21162069ac2225fa2221225face1240b228f2013aca820b81b0f118faadd99449fc7a097a853a03ea21fa39da669a00ca265a2f0a5eb9f98a0b7a0d9a5ad9e4c9f4aa017a6589dcd9d1d9e8da5099cfb9b6d9cf1a4f399aa99f299a9a4ff978595fb944ca43c95f009c51126a45092fd14891607a4518d3b18b61863a3d483021993193aa27f032919c81987a111096a19e31a55a1c70b7c19661acca0350b0e19f51978a0d40cc5182e1a19a09f0cf918e019ca9fac0d53188c191d9f2d0d68183219aa9eda0c2318dc18059ea40dc81794187a9daa0de11660183b9d5e0df8167918eb9cda0c641693175d9c6c0c70150717ca9b040c34146315f29a450a0d149c141a9a730a5212c513d4999b08521185126499f004381125147d9a0080b28e7b8d1c94f2a00a9e6e9f8bb063a18ea0219ef0b14aa232a2c6a01eb35da3c6a2cba209b47ea336a330a351b41da466a468a373b461a419a58ea46db49da408a550a537b468a489a5eea5a9b3c7a499a635a7b0b228a549a708a890b135a50fa743a89eb028a555a77aa8deaf0ea505a8a9a8b9ae98a406a871a8d2ad46a4b4a745a818ad39a455a743a8a0ac17a47ea700a83eac1ca47ba73ea87dab03a455a71fa8d0aabaa3dda60fa849aa4ba2a2a5d1a6d5a9afa1afa404a6cba95aa118a434a522a9bea052a3eba4b8a8e8a075a3caa43ca89fa0a1a21aa46ea7b1a0faa1a4a259a73ea051a1d9a1b2a69e9f11a19aa13ca69b9e43a0a4a0eea55a9d859edb9ea2a5279c289c939c1ca5759adf993b9abfa4cf986f9732976fa4fe9688908a8b10a4d19437105711ada3d791d8157917f4a2fe8c8618bd1968a2ae89d4181f1a08a287830c19c31982a16203ce18281a44a14003a31859191da100036b181e19bea01c081e18dd1882a08e07ad178c1836a01c0715173c18999f9f097f16c517be9e4206f9151e172d9ef205dc149815509d820582142815ba9ce2043214c814399cae07ed138014a69b6607ac129e132d9b9a07dd12f713339b8307d112ef13799bda03b6104112d499b8813209d70a46990080668e398dca923ea15c9f8da142b055a27da176a1e0b1d3a34da37da31bb3e4a38aa4d8a407b442a4c6a413a538b456a493a53aa565b49aa49ea51aa659b4e8a440a6e2a62db401a5baa679a79fb34ca5a5a74aa8aab2a9a5ada750a864b16ea571a732a878b021a51ea709a896afffa44aa731a8acaeaaa432a7d7a7c3ad8ba42ba7dba7feac5da400a7aea769ac39a4d6a63ca7b3ab34a4eaa681a711ab21a4d4a676a762aa06a477a64ca7d3a97fa31da696a658a9dfa256a5b3a5efa855a2a9a42ea595a89ba124a453a423a817a199a225a3f4a7c5a0e5a1eaa18fa747a0e5a03da13ba7bf9f6da052a04ea7089f299f689fb9a6a59d759d709d12a6849c0e9c729baba5ca9b749997995ca58e9a23983d9905a560992f96c797eea4a798c59536957ea4649774909e910aa4a0955a89b38a03a34094fe08ae1056a23793110f711004a2fb918811ec1273a1e190181166120aa18a909112251484a0ce8ef811991301a0af8c8a110f13709f518c3311ad12099fce89641261127f9e8b890f120e122a9e3d89b711d111219e18867811a011ed9da28520116e11b89dc781f411d512999da50193117112199d96015311df117c9c92042911e312ab9b84012a108c124a9b5d81730cfe0a449ab3811a09ad0a83970080d08ea18f169453a131a16ea13ab011a294a2c0a2deb150a320a457a40eb376a378a4c9a4f6b307a4b8a408a52fb470a493a50ba668b480a4a7a528a663b4bba494a50fa62ab4fca4a0a665a78ab337a5e1a63da8adb251a580a73ea863b10da546a722a867b0d3a464a73ca850afc4a491a720a850aea4a479a71aa892ad75a4fba60fa8feac28a4dda692a759acfba388a63ba7b2ab51a396a534a69faa25a33fa5e9a526aaf6a2d4a46da5a9a9c1a2a9a440a57aa98ea25da4e5a4f7a84fa20ba48da47ca8eda1a1a33ca4dda766a14ca39da380a7d8a036a2dfa234a73ba034a1a2a133a7e89f43a0eea09ba61c9f06a04ea045a6809e7b9e5e9fe0a5469df59c8f9d7aa5619c539b049c54a5689bfb99719a0da5299aa997d398a0a45b995595b59622a46c9802937194aaa393964b89e38a6da3199508099a0a1ea34194170fb410c3a2de93960e511035a28d921e11df0fa9a13692c00d6d0f2fa1fb91620da508dda0b590d30c420875a00d90570cc28710a07e8f450526877b9f118efe04ca86e69ec68ee2047e86319eac8ec3042a06ae9d548ddf0add05399d0a8d710a81058e9cdb8b0b042305dd9b918cdd83f184429b168bc583378bc49af58a9a89098b999ae08b738e1790dd9a9d8cb08d198a7298008004848604179163a1eea159a11ab0e9a132a367a2b6b1f2a26da420a4b5b245a3e1a4a7a4bdb335a433a5aba516b462a414a6bda649b47aa431a60ea650b4aea41ba6c6a61cb4aba479a679a679b3d3a4aba676a75ab2e8a4b0a684a730b1b6a409a769a756b0c8a4c8a6cba730af9da434a7f9a719ae45a404a7d3a76cad23a49ba6d2a7cfacdaa339a666a759acfba321a645a7ecabd5a308a63aa750abc8a3fba542a7aaaa38a39ca5d7a620aabaa252a51ca670a947a204a5b1a5eea8fba189a414a57ea8b5a133a483a435a880a19da349a4fea705a195a25ea3eda7aaa09fa12ea25aa7fe9fc1a018a1d3a6199fc59f74a07ca6f49d049ee19e10a6f19cf79c9a9dafa5319c5a9bfd9b4da51d9be599409a2fa5be994a979d98aea4fb98c796c39687a41b980c959c9435a45997e6926a94d6a315979392059138a34c96648fb89096a27295b0915b9014a214954391be927aa13994e3904492efa0c6938a900d948fa02b93e591809315a0c1927a910393639fd9912a91a592c49e9491eb905d927a9e3791ac901c92389e1b9169908b93f99d5a901d9088916f9d0e90378ddc90999ca58fc48c50908d9b288e5b8e7f917b9b378e448e8f91919bb68d378eb292099c9d8f818f11919d9a268d0a8e3d8b639b0080b61246178c9a86a06ba13b9ed9afbfa1d6a23da377b1bca247a534a578b20ea33fa52ea578b3e8a309a580a5eeb316a442a5c8a52bb4e5a3baa419a531b460a44da5d5a503b470a4c2a571a63fb3ada4aba688a752b202a5bfa628a847b13da50ba75aa851b0dba415a7afa7f4ae7da4b2a668a7cbad5da488a648a7e9ac16a415a62ba740ac9aa3c4a564a6a6ab7ca367a502a6d4aa1aa30ca5a4a512aab8a2c8a45aa598a97fa2b9a457a51ca921a25fa4eaa490a8bca10ba486a455a8a9a1baa350a401a88ea16da328a4f5a77ba1c1a285a3a2a73fa118a23fa3eba6e3a0d8a18aa2dba612a0c6a03ca14da6329fad9f7fa007a6549e259e199f7ea55e9dd29c7a9d3ca5b59c579ba39c06a5fe9b119a7c9af0a4a29af597009983a474997097ab9837a41899e696c396daa37d986596129859a34698a294e395d5a28e975494119761a222971f958296e0a12d964a930d96a2a18595b892b0954ba1a39435927d96cba045946e93059672a00394249493961ca049939d9311965a9fe2922f93a796fc9eaf921e947d96d09edd91ea9333964d9e8c917c93f095d79d3f91f8918a95149d1991d8927694609c1c91bc93e894029cb1908492bf941e9b719030937c94ba9aae8f60931d942b9aa28e38929c91e8970080018f9d8d359424a2eda40fa6f2aec8a2cca589a621b18ba322a71ea8ffb10aa4efa60fa806b36ba40ca70ba8b1b339a4b3a55fa60db4dfa39ea400a510b41ba42ca5b5a5c1b31ca492a53fa607b351a4dda596a605b2c6a406a760a717b192a4c8a6c6a723b057a4fba686a7aeae4da4c6a661a76aad2ca481a625a762ac09a4f4a509a7bdab7ea3eca5b0a6f9aa3ea38fa5a9a636aaf5a273a58ea6a2a9aaa21ea51da618a958a2d9a4c8a5aba86fa2aca490a5a3a821a26ca446a542a8c6a1e4a3a9a4efa72fa1ada2e0a385a7daa0fca19fa26ca782a0f3a0d6a107a7ea9f5da01da1a5a63e9faa9f17a054a6a19e249e089f04a6169e369de49da2a5419d5b9cce9c34a5ba9c2e9b849ce5a4439ce7996f9bcaa42c9b9899fb99b0a4f6997098a4996ca4a499c396559827a40399a297ec98b8a3d5981c978e98efa28d98a996459881a235987f97c29821a289970f982599bfa1d0965698839945a15d960b98c999f2a0d3952698e8996ea04a952298629909a0ca946c9769992c9f9b94d4961899c19e7494209744996d9e3994b5960299e99d4e934096a998809d729256954a98b89c539231958a972e9c459215956697e19bc8917f949896609ba491ce941396cc9a33904992d993a0992890df9205946c980000651db11fb69e5fa014a4b2a43faef5a281a605a873b01ba491a872a959b15ca4b9a8b7a957b2b4a46ba82ba935b33ca433a605a7e6b3b1a39ea407a5fab3aca3fda345a49eb3c1a30da5e6a404b342a4eca5bea614b270a489a678a713b146a453a64aa731b024a409a677a6a8ae57a4d6a5cba654ad25a401a61da779ac23a4f2a51ea7a0abaaa393a5aba662aa2ea324a51fa656a9e7a2fba4a2a5bfa86da2a4a43ea545a80ca25aa4eaa400a8d7a1cba3a4a48fa7ada1bda39ea41ca749a1ffa22ea40ca7d8a0f2a116a3bea68aa062a168a2bda633a080a0b7a1e1a6899fff9fada067a6ec9e759e6d9f28a61d9e9d9d609e18a66a9d429ca89c00a60b9d019b749ce9a5c29c889a1d9be7a53a9c1b99979a78a5d69bb198159a0ba5079bea99c79bbba46e9a329a8f9c80a4479a079b9e9c1fa4bc991e9bfd9c48a363994a9b079dcca21b997e9b2a9d52a2ab98a79be59cfea15698159bd49c5fa1b797749a6f9ccba02697d099089c3aa0eb96c299869ba59f7c96fe98029bac9ef895fa98179be99d9f95b298b29a949dfb947398499adb9c9894d0978b998f9c2a9477973999219c1f942597a298829bb693d8966198cb9a62933b963f984c9adf93a6961898ca99f79253960298f1991e91da9401974e9a0d9e70a34ca474a9efa213a8c2a854ae64a4f3a8cda9c9afc1a4a9a9b8aa36b0cca408aaa6ab84b052a516aabdab2bb197a50faadeab62b275a4a5a6b1a63bb3bba06a9541202db3fba03195242093b227a231a09e9ceab1f1a208a46fa4fdb036a3eba499a504b0f3a220a55ca551aedda2fda44da521adeca21ba585a5deab6aa390a529a641aa69a3b4a56ca64ba986a357a570a6b5a848a30da5cfa529a8f5a2d0a4cba5e0a792a291a43ca580a704a221a4b4a4daa6bca17da37ca489a658a1c2a208a43ca6d3a0b9a14da2f4a55da06ca025a1eda5a89f0d9f0ea0dea5d49e809d2a9edba50c9eb79c2b9d10a6859df39b3d9c12a6569d7e9a169c09a6db9c0f99f5981ba6699cac989c98d9a5259c41983d9886a57e9bbc97f09802a5c69a5d988b99b9a45f9ad398359ba0a4f199ea994d9c5ba4ba996a9b409d0ba49199fd9b269d27a33a993b9c6c9d36a22f99be9bfa9cb2a1f198ae9bf09c2aa1b898129beb9cd9a04898079bab9c78a00598899aa49c33a052977f9aa59cbe9ffc962f9a5b9c099fcc96e8991b9c6c9e50969f99c19bde9d12963b99349b449d42957b98389a749c839435988599069cf1930c98a799ca9b6b939d974f99bc9bc89311983e99a49bc592fa97a299099cfe93c2978899ba9a539c439f729f75a802a193a5eca6c9ade4a149a61ba727afeca1f9a584a731b0f49ff8a1c1a232b0189d909de99e0eb0759b019c379b70afaf9cbf9aec9215b07d9f87a0799ee5b0aca158a409a4d1b064a379a54fa5a5b00ba4dca5d0a5a4b05ba495a727a84eaf17a4b3a78fa816ad40a400a8d9a842ac15a4f9a663a8baaab0a3e8a589a785a982a37aa5eba696a84da30ba50ba698a7fea2dea4d6a509a7cda2aba49aa576a643a23aa412a5e4a5a6a139a34ca457a517a11ca23ba31ca59aa01ca100a229a52ea0b49f68a0c1a4509f069ebf9ed6a4859e719b019a9ca4b39d7196798e8da4b49cfc0cae1495a4509c09165019d6a4cf9b171824193ca5699b9515ec188aa5f49a4c15b118c8a5569ae3112a16a0a5459a47916c8c0ba5de9a2d979798c8a4a09b0e9b899c98a44c9b9b9c6b9e42a45e9a109df69e75a3fa99f09cc09e51a2b299429dbc9e8fa1cc99799dfc9e20a1dd99769d399f9aa0df99509dcd9e33a07499f59ca49ea59f2199cc9c3e9e2f9fb4989f9c359e6f9e59986d9cf79d2f9e9e97d89b189db89d1f97229b9e9c359d8e96589a1e9cd99ce795ff99c89b699c9f955c995e9b039c13950c99f79ae49bcd949a98669a4a9ba7948298ac99c79ab893c6971d99b09a0e946697f098f09871902a93a095eea142a19ba6e6a7d7ad05a22fa742a856afcba165a76fa882b0e5a19ba799a813b193a252a82ea992b1b7a247a860a911b24aa392a884a978b200a49fa84fa959b2e7a235a756a8d7b15ba144a404a601b1f39c2f982b9373af3e9cbb10941b80ac0e9fe09db79c79a96aa1e8a1fba12ca825a200a4b5a4fba671a281a45ba5faa653a290a4c7a517a648a2a0a490a543a5d0a12ba44ba5b8a481a18ba388a442a4fca0cfa216a4a5a3dea0c0a1e7a26aa375a06fa03da13ca32da0a59d5e9e1aa3bf9fab9ac09afea2129f3a97a9954fa3fc9da30d560f03a4ad9cd218321a18a45f9b5d1c651e95a4969a861dcf1f09a55b9a4e1d781f9aa58a9a6f1c991de1a5f89aaa17331a1da66f9bdf8bef0cc8a5129cb597a49764a5f09b7b9a709b05a53a9cd19cbe9dc4a4469c6a9d0f9f55a48e9bc19df99fe0a3fa9afc9dcc9f7fa24e9afc9d01a042a13c9acd9dd29fcca0d499c69db49f46a08a99759d439fca9f4899239dcb9e0b9ffe98f09c879e4c9e66988b9c0d9ed79d24983b9cab9d789de397f49b5b9d2b9d84977c9b089ddb9cf396de9a839c839c4d962e9a339c339cb295be99da9b8e9b52956a996b9b6b9bc29427990b9b0b9be8943299909a909a1f94cb98519ae19a459480980c9a509a000096206d21689c03a0dca453a6d0acdca26ba8b3a9adaed5a277a96caa13b0cfa3dfa93cabbeb04ba48faac4ab26b183a4ffaa2eac8ab160a482aa07acd9b152a40baa44abd9b17aa306a9f2a995b1c8a214a74ca8fbb0d2a0b1a297a335b0d09de911a11964aef49b561f3e221cacb29be91fca211da9049ead161f1b96a60ba170a05da088a469a111a288a227a37ea108a3e9a391a199a176a34da446a1a1a18da393a4f7a0cca141a3baa3bca00ca1f3a198a2599e03a1cea01ea1569e4ea007a0a4a0539f0ea0a697da95569e509d5919651c539f749a662097219ea0089642223a2413a1688efb231725dda23e887424e925c1a4fa074224b2255ea62f87dd226f241da75c946e20642157a7be988719b51620a7169b2c96689a55a6049c599b299d58a5f59b5d9dd09e90a4f79b189fc8a004a44d9c5ba0c8a11ca3249c42a0a9a12fa2a89bf79f54a17da1d69a769f02a1b8a0709aef9ea6a03fa0119a749e4fa09e9f7699f69dee9f8d9e4e999e9d869f379e2c992f9d4a9f9a9d5a99eb9c0a9f689d6b99d49cdc9e459d1a99909c7c9e219d6198159cd09dbe9c1c975b9b429d6c9cb296059bf09c219cfd95b19aae9c0b9cc795f0994a9cd59a7395d499909b069a35943499e69ab09985948298ff990e9900008e1f3620069c22a099a55ba702ac02a49aa9f6aa6bad72a4b8aa2bacaeaea9a43bab80ac78aff7a49babc2ac0bb017a519ac23ad54b011a50dac3cad7fb0eda4efab28ad81b023a5e5ab05ad66b060a460aad8ab2bb0bba077a433a52db02a8cfe24f8260aaf731c94284e2a60abea19be27282909a5be90ff238025139c739e7819eb1a8911cda033a29aa28b1776a12ca46da4da1685a15aa43aa55c1951a127a4fda41e1904a12fa353a4eb1aeea036a271a3521c8fa0f8a0e0a12b1d0da0e79e049f251d15a0e08dcb181320869a7b1f4f21951f3f946b23cd24f01cbb16dc2501272717551be127e728d99f2f1c062832296aa5081b6627e9283da84f16ed2459269fa85695be1f51212ca8a39ad6941e961da79a9c819fbea007a6f69c78a0e2a1caa4d99c9ba0f8a1fda3e89ccaa0d8a238a3be9ceda0b7a20da2779c5ea048a25fa1929b00a08ca11da1db9a509f0ea1a6a0679ad29ebca01ba0d9995c9e64a0619f6699f29d26a0929e2899799dd99f039eeb985c9d659f9f9dc198229d139f309d8598b79c859e179d3c983a9c0f9e919cc297939b469d0d9c2097099bd89c609b8696c19a9d9cf59a1e96b59a989ca59adf956c9a689c4b9a1096269a0f9cb8998d950f9aef9b2a99dc96d1983e9a1f980000911d141f8399639eaaa4eba5b1a935a40baad2abddac6da40eab53ac9cade9a4aaabccac42ae23a5feab0fadc3ae5ba529ac51adfdae18a523ac3aadfbae3ba51cac49addeae3fa511ac38ad3daeb5a4f5ab42adb4ad22a5a5abd8acb0ad01a2cfa5eaa615ae5c25492d972f12ac7e1f172a4c2c33a498a2afa496a609a4d0a115a884a906a456a347a86ea987a3cda33da878a910a465a316a822a97ca339a3d0a712a9a2a2d9a28ea7b7a836a1e1a234a765a85aa032a2b3a63ea8819ff8a12ca6a0a7e59be9a07da454a5fa1a5e9e78a10fa2f52239989a20da211b277b1ef228622a59289523dd2c422ecf2386243e2daf2e75a89920d829912b91abc2900f2108231faa3a9dd89e61a004a8909e8fa137a3cfa5f29da1a183a325a47c9db8a1e2a383a3489dbba1d8a3c9a2399d73a127a3dea1ae9cf9a0aaa20ea15f9c9aa039a24fa00b9c4aa0d5a1d19fd79b19a091a1769f939be39f53a1239f1a9b659ffda09d9e9f9ade9eb5a0079e5c9a579e64a0c19d0d9af19d27a0609d8b99879dd69f019d2c99359d579fcd9ce098d89cf69e629c9f98749c5c9e1b9c6298269cda9d739b5598f19b7d9de19ad497ab9b5f9dbc9a3697519b2c9d619a9e96289b149d899a9495b29ae79c659ac295279a2e9c13990000861d071efc93b6a00aa761a883a947a3aba947ab1dacf6a3b5aa13acd8ac58a425ab75ac5badbea48dabc1ac9cadbaa4d1abd8aca2adcda4f0abe6aca0adc9a4d3abddac70adb9a4b4abd7ac93aca2a4e7aa58acbbaae09f2ba6eda73aa70e93719a509d78a2ff03c80fae05e69fa696c39ca19e8ea272a09ea498a5dca492a291a7c3a8a7a5a5a3a0a8c4a925a6eaa3a2a895a921a668a31da813a9aca58aa3fca7daa834a518a3b9a7afa8a5a42ea3a8a7c9a886a436a218a78fa8efa3b8a1f8a68ba867a36ea071a632a8d6a22d9ee1a623a829a2fe9d1aa8ffa730a363a3b1a763a804a8ae205428a22947aa78202e29f329a1aa28a250a837a9f1a57f99cfa45fa7caa1939c33a399a5f7a0e1a060a335a514a10a9fe7a29da4f8a0ba9e8ca287a4f2a0b49e42a265a4e2a0989eeda12ea4aaa0cc9d81a1a5a3da9fa49d45a10fa3419f159d04a188a2d89ec79cb0a037a2659e3d9c5fa0aea1149e979b16a04fa1cd9dfc9a509feba07c9d809aab9e7fa0209d109a209e21a0a09cca99c49dc29f599c98995b9d319f1f9c3e99129dab9e839bc798a79c4a9e419b2a985f9cf89d0c9b9d97199cb49d9f9a2e979f9b5c9d609add962d9b079d239ade96069ba49cd199bc95169a579c03998d951e99ac9a76970000871c291dd9955ca131a852a923a968a3f8a956ab1dab03a49daa0dac0dac1fa4fcaa5dac5dac81a46cab98ac88ac8ba47bab9eac8eac72a45faba5ac64ac4da4f4aa62accfab6aa3e8a976ab1faa7ba2dea844aa0aa995a0d3a68ea8fca7649d9da30ba586a5e69caca273a4e0a42ca064a50aa775a6dfa144a783a8fda629a228a8f4a8b9a630a200a8f9a8e1a517a290a7d8a886a54aa26ba79ea849a588a23ca797a80aa56ca2eda667a8b3a428a292a63aa862a4d4a128a6f8a713a411a2ffa500a808a42ba2eca5e1a7f0a3afa204a621a8d9a3f3a1ada597a719a359a07ca4e6a522a2689bb7a003a27ea0249060988b997a9cf28d5494db979299d197d19c549ef69bd39c7fa199a35c9ee19dfba125a49a9f0e9e27a25aa4d79f2d9e74a25ba4f99f0d9e28a205a4739f9c9d98a173a3239f299d41a1d3a2879ebc9ceda07ba24f9e789cb5a030a2e89d419c9ca0f0a1c79d119c68a0afa1a29dbe9b2fa069a1429d549bc29f32a1259de59a219ff4a0019d3a9aa59ebaa00f9dbc993a9e7ea0e99c5b99c59d38a0b59c44996f9ddd9f7b9cde981c9d549f449c9998c19cd09ecf9b3f98729c369e299bcf97359cd79dbc9af096969b599dcc99fe963d9bd39c5c997096f29aa29ccf98b096979a059c4b980000ca1b9c1c389404a11da849a938a83ca24ea989aa6ca9e6a2c6a91eab3caa3ea3fca984ab7eaa89a31eaaababa3aa2da3e4a970ab6daa20a3cca954ab22aa39a395a901aba7a9f9a226a99eaaf9a89ba27fa8bca95fa8aca13fa7c3a843a70ca165a614a84ea602a135a6fea74ba629a192a638a867a6d7a14da7c0a8b6a60fa2b2a7e5a85da604a2a4a7e4a8ada538a28fa7cda83fa57da26aa7c3a8eea489a259a7a7a89fa483a211a78ba882a441a2d7a66ba863a4d6a172a633a83ba46aa134a616a81ea439a1f9a5e5a717a401a1afa5a8a7b7a3b4a05ea539a762a389a008a5caa60ba301a065a41ea6a2a2539ecea2eaa4aca1c79ba9a02da2039fc798a79e4fa0aa9ce398cd9e20a0519c899b54a09ea1629d399d43a17aa3d79e4f9eeaa12da4a49f639eefa147a4f29f3d9ea7a102a4b19fff9d4aa131a3229f5f9d11a18ea2639ec99cb3a02aa2e59d849c77a0f2a1b09d3a9c38a09ba1429d069c18a05aa11c9d359b779f13a1ef9c919ad89ec6a0d29c399a529e8fa0849ccb99f89d52a05d9c7899a39d21a0419c46996f9df09f179c0e990f9d279f619bcc98c59c9a9eac9a63986e9c2a9ed3992698289cbf9d8e99b597ee9b679d57999f97f69b1f9d0f99ce96869b299d73995396a29a549c6198fc9ccfa393a467a6512284287a2923ad80269a2b692c03afc426842b712cf5af2627c82b992c50b04827032cc12cbab015277a2b8f2c73b144265129502ae4b19e26d5295d2a29b193252729282acdaf3e24d225f02656b0931caea740aa52b22325de2517255bb08629c82b622ca7ad212b402c9a2c7cad582cf12ce22c68adb02c4d2de12c01adce2c0f2dd72c97ac5c2c7329b72795ad3d2877afbcb195afc42df02ce42b08ab672e5a2e082e3eac202e172ee32df4ac382e472e9d2d29ad5d2e252e9e2d2cada62e652eb12d40adcf2e8d2ed02d5eada72e622e9d2d14ad512d212d922c35ac86282029e72894a88720b123822441a4c41be020e521e5a18d1a71205b215ba165191520d7212ea10f176e1e91208ea1810fe091088d14a3ac152e1bf51aaea1531ae520442241a05f1aa420e2211c9f921916203c21dc9e5b19bd1fe1208b9e0219581fb020829ebc18ca1e71202a9e4d186b1e2420e39d1d18121ef21fa69dc117a81d9b1f689d5d17351d121ffa9cfd16f91cb11e8b9c9716a51c461e5e9c9816671ce71d109c3b162b1c761db79b7015d41b361d169bfd14741bd41c379ad814dd1a931ca399ae148c1a4a1c0d99cf149d1a431ce398de14a91a201cbb981e141f1aac1ba598ef1491194a1b53983997c4a44fa521a430207026102870ae8225382be22b82b03a26b72a1a2c43b15f26f82a442cb2b17526d92a352c2db2c625d929f42a8bb201258a285e29b6b2342409272f28fbb175210b21b420ffb03316b6a529a835b07d9d5daa43ac50b0da189aa653a832b02e247223c123d4af51283629022990ae752ae72a9b2a1dae0f2c062c6d2b4aae712cc52a952924aed52b5b1c21a536ae3c2beba6ddabbbadbb2c9a28fa23ceacdb2dc92cfb2b0bad342e9a2de62c4dada22e1c2e2e2d6cadce2e352e692de5adea2e812eb72d54ae402fcc2eeb2d65aeb82e622e8d2de0adbb2ca92c5d2cfeac0e262327492746a91c194c1f4c2033a55815281efb1fdaa3b6174d1f742041a3d816d51d631f43a387147918c21ae3a22b8ec69ca69ddba2878d079c4d9c36a36f18f51e90204ea1e218cc1f0c2172a0b118241fad20c59f9b18d31e6f20ec9e1c18b41e4a20b29e2518711e1d20329ee817301e1120f79db617ed1dd61fbf9d9617aa1d8e1f8b9d4317681d151f569db816021d871e0e9d40169d1c001e9c9cac15371c7d1d579c0e15c51b071de49beb141e1b981c709b9714c01a5a1cc69a5d14931a4f1c3b9a32143a1a0f1c9e993b14131adf1b0d993914e619561bb59805134319691a4f985814a0184f1a64997d96ada445a5e2a4e01cd42411264aafae23fa28de29ebb0b923a428c129fdb13a241a290e2aafb28e236f289e2958b3e8222e27f128b6b3d4219725ac26afb325207922ac231bb3f41cd41d331c6eb28f1bb394ab95b6b1ef15e39f21a2e5b0be98fba364a552b0971573a074a28eaf4221d91c8914e0ae2326b82434232aae31296127ae2580ae1a2b98274123d8ae212ced26511f39af832c34288d2202aff42cdd291b2758aec02dcf2b8f29c9ad4b2eec2c132c13aec42eb22dae2c2cae0c2f192e102d60ae2a2f542e5f2d82ae692f7e2e8d2d87ae6b2eb92dee2cccad1e2baf2a222a4bac88206821252160a804970a122916c6a518957f8bef1246a517946291748caaa4299244945595dea32d8e49972f970ea381845195d696b7a29011b614c517f0a19416061df71d4ba14c18301fc820f6a05018451fbf206fa010185e1e1420e39f6f17d21d7b1f7b9f3e17c41d731f369fe416ba1d7e1f089fb9167d1d1c1f749e7716421dda1e029e53160b1d9a1eca9ddf15c21c0d1e499d5015521c771ded9ceb14c41b1e1d9d9cbe14631bd61c339cab14d41a6c1cf29b7914981a3d1c0b9b19142f1af11b8c9a0b14c619651b529ae913b1190b1bb799a0135319b11a6e99de1252197f1a8499b0117f160618ff9800807ba0f3a1c09dda8c1c21502206b0931f9126dd277cb1151f9325262778b2b71ea225572739b3c51b4f24c825c8b3c619ab22ac241cb427175e20a92223b4a810721b6a1cc5b395962a9b469ce6b23b990ca0dba01db27d9c08a101a261b12f9eefa3bca4b2b0b29fa8a499a517b0c79dc3a21ea512af4f15d19fa3a32caef82276136d9f2aae4228c3219594a8ae8e2a9d25801b1caf2f2c6f28cc241eaff62c332ae62730af9d2d122c9e290faf382ed52c632be1aeae2e712d732cfeae2b2f052ef42c1faf592f3f2e362d30afe62ee62df02cc4ae0e2d6e2c8f2b5aadba271a28572790abd2099d168b1436a8f19c189d0d9b87a5cc99199714963ea52296e391d70ceaa41194a791b78c7fa4ff9162948a9228a4bf8ae589768b1da33d0de2157b1756a2af136a1a731c18a290167a1dee1e99a1c417341ecc1f03a13817081eaa1f8ea0b7169b1d231f3ea09016761dfa1ebd9f0b16311d9b1e549feb15071d6c1ea69e8015b71c0d1e439e4d15731c981d009e2215431c691dce9d0615101c391d9a9daa14761bf91c559d6d14df1a771cf89c1214631a441c6b9ca213091a9b1b9b9b0313aa192b1ba09aec123419d31a4a9abb123019911a089a7e12e2184c1ac899751176189319129a58105d169d186a9b0080bba36ba4119ed59ebf91ff9220b0f41434240025c2b1b08f8e209222c2b23a96f520e9216db3d29bfe1aec1eebb32b9dd994531c1fb4689e6b9be0951cb4519f42a0409fbfb38da074a253a2fcb2eda04ba476a439b22aa128a4f7a46cb16ba1f7a4f0a5a6b070a286a5a4a639b0b5a203a6bda636af38a15ea503a69aaea99d00a564a6bdaddc1b0ca303a6d5ad392572931aa39faea429e7248e1de0aecf2ba628d92507afb62c9b2aa02838af9d2d4f2c942a59af0e2ef52ccf2b54af702e682d6d2c34af4a2e5d2d6e2c41af422d7c2c892b47aeb92917294b28f3ac861eea1e461986aa4c9d929e239f6ba7c89d3e9ea19d35a6559c0d9dce9c86a5e09a369c939cf5a4c5971a98d79769a42a953994308c40a45391088aa50bc4a35584c214be17fda26311fb1a621c01a2bb14901c0d1e72a13515c21cf51d13a1c214aa1cdd1de3a0b014871c7e1d70a002157f1cbb1d55a004156b1cba1d02a0ea142e1c991d819f9a14201c4a1d179f5f147f1bfe1c7b9e32144c1bce1c079e2314131b641c909dc313791a371c579dea121c1af21b089de612c619781b919c5c128519be1a289cb7110719231a559b451157189619059b2311fc17e618949ad8106e175f187e9a750fc91566168099d80e4a149e14069900804611fb116e9eb1994c1b6d1c1fb0879c7919761dd6b1169e15143a1bbdb2909f6d94479576b3a9a0e09d319ce8b354a13da03c9f23b4f3a185a122a11ab4cfa1aba28fa2e1b3aea26ca49da425b3fba273a5dca540b220a3cda545a63db120a3e1a570a6a3b0d3a341a600a72ab0e1a3a1a606a759af89a303a792a788ae57a319a713a81cae52a2baa633a870adbd9c51a57ca74badb420ca9e0aa443ad92265f213113acad48294d2779242eae122b6729fe277bae1a2c7a2a032978ae662c392bc32962aef92bb02a6f2920ae382962286527dcac3521bb204a1f61aa759c4e9e17a009a8349f9da073a052a6349eb09eeb9e03a6d29ccf9c5e9deba55c9b359ba69aaba50c99fe982b9963a5db96029662950ca59d945a8a038c94a4d4903310781129a4e9838d155e18d9a28c0e7719001b5ba29211ca1a6c1c1aa2ba125f1bdd1c9ea10813451be51c4ba18312301bc31cd5a0c012051b7e1c2ca0d312c11a4d1c539fb912aa1a121cb59e6b12681a141c2c9eac127d1adf1bf49d5812381a931bbb9d7e12ea19921b729d35125a19261b259db7114219c21adc9c6211fb186b1a769cee108918dd19f89bc1101d185219569bac108917db18859a64107e160c18239a180fa51549176799010e1d15db163499e700901bb41d559f4c980c20dd2124b0709c961e122105b2cd9f3394f114d5b2ada0bf9a5b9567b396a1e89d359cd9b345a241a011a10db4e5a287a198a20eb4aca29ba282a2bab371a35ca491a412b312a4e9a5c5a527b211a42fa6cfa626b141a4c3a68ea7a5b01fa42ba789a738b01da4f5a671a760af36a41aa7aca774ae2ca450a70ba8d8ad09a45ba742a859adc3a35fa731a8bbac54a1e2a5daa78cac419c44a415a678ac941a33a0b4a38aac24229c1ce391a5aca4248821851eaaacf1244023342161ac2024d620ad1da5abae1ccb8fc5966baa1d9d7d9e5da0e1a86d9f82a0c9a01ca8849f26a064a05aa7a39eac9f7f9fb1a6a49d209e539e13a6619c9f9c2a9d64a56b9ae599259ad1a45498d695379772a4bd958d908e8b12a42793980940118ca37c8ffa157917f4a2010436198d1a74a2b30cda195c1bdfa1020eed19191c7ea1f30e1e1ad61b40a10a10291a051cd7a06a10ff19eb1b70a039108d193c1bdc9f9c103f19c51a1e9f2710f3185a1a769eb90fa3180a1a259e1d1061185619a29d051038182b19749de90e9317f6183d9d6c0fd317d118159d4f0f9017a018b69cfd0ebe165b181d9ce00dbc154817d89a8d0e9015fa16479aed0d1215ac16019a5f0bce13ef141a9a0c0ce11386152e9af998b399f79803a998a02a9f979e80b00ca129a08d9db9b184a1afa054a0c3b24fa201a1a2a052b351a368a242a2c7b384a3bea3e9a306b411a488a4bfa416b406a47da4b8a4d9b330a4fba456a512b339a45ba5caa501b26da4a5a6bba602b1a4a44ea724a8b7b0aca4aea726a854b07da47aa71ea82caf2aa422a7b3a7fead0ca411a7afa774ad25a432a7f2a73fad13a41da7e9a7aeac27a434a732a827acbca3d2a629a88fab26a279a506a745abc3a0e9a3fba490aa0b9f29a246a443aab19f14a3c3a483a9aaa053a47ca527a96fa128a415a5c6a808a299a2b5a321a88fa0bba1cca14ba7469f43a083a096a6d89e969ffb9f55a6259ea09eed9e2fa63c9d139d329dbaa54f9bcc9a509b46a5dd989398a7981ba569969690c68bcca46b945410c01493a4f291a51229163ca4dd8ea416461849a379893e1853197aa269038518ad19eea14803cf18131a83a18808e9184a1a2ba1390b9118e819daa0d40cb418151a6ea08e0c7a18c51913a0770d33185c19929f000dd417fd18d59ebf0d5f17b118399e930d00177218b39d960da9163818699d500d2d16e2170e9d080dac155a17659c720bd5143b16dd9bad0a5c133d15089b3c0a18137b14329ad8085a119e13f799090482108311e4990b055f10b311589a0080248ea18f15933ea0d89e2da035b0fda0efa08c9f8fb1e4a16ba24da15eb2dea201a323a32eb3d9a35ca375a380b338a450a483a4c4b33ba4eba43ca5b9b36ea4daa4e5a569b35ca459a5cea5c9b275a454a657a6e2b1a5a491a6a7a61cb1cfa403a7eaa782b01aa5c2a734a81ab01aa5e9a7a5a858af79a47fa72ca87bae1fa4d1a6eda78aade1a3b4a6cea7ffac71a347a6f6a682ac41a320a68ba611ac2ea3caa581a637ab3aa3b6a5d7a69daad0a289a59ea61aaa7fa248a56aa60eaa68a20ba5faa5a1a9bca1d2a43ea550a9dba121a41aa482a80ea1b1a202a316a863a0c2a1ffa1d6a7b29fdfa04aa192a7c49e4ba0aba02ca7e19d9b9f21a004a7039d259e809e44a6979b439c399c8fa5c5996699b79922a572981097dd96b8a413966890528b67a4989468091811f6a36b9238128b153aa3a98e681618189ba27b891d1843193aa27d8374180819c9a159033f1879198da128030718301943a1d6027617c918b7a0bf07ed16811870a03a078416421812a0c809d5160818789f84094d167b17ee9efe082c15c516129ea705b5140e166f9d3c055a14f414099dc9043c13af149b9c9704ce12b8133b9c5e0490115412e99b6707a8118112d59b7504cf103f11b99b4401a80d5b0dc299b581f1083a84269900804009540dcc9068a0b1a0d9a0e1af65a1a6a1c2a073b12ca33ca388a356b29da36da4b8a4f6b211a49ca4e9a453b362a446a5bea5a4b379a4f4a5dda5b8b3b7a4f4a595a667b3efa47ba68ba6d8b209a5dfa6b5a7fdb13ba515a751a827b120a590a74ea87eb01da53aa720a8ecafc5a449a7eca7e6ae7ca4cfa6dda71fae40a4cfa683a7bead1ba496a648a7dfac73a3cca567a632acfda297a533a664aba2a287a5e4a5b8aa83a209a59fa520aa4fa2a0a423a5a0a91aa274a4f7a44da9e5a145a48ca401a967a1c5a3a7a3a1a8f2a020a238a251a86ea015a165a1e0a70da0cca0b1a072a75a9f41a01ba054a7c29ec69efc9ee4a65f9d1a9d149d85a6309c819bf19a12a6fd9a24995199d5a5d999f29711998fa52b99b997ad976aa574989095199701a58596fc9247911fa45b958b8f468a28a31c94c808fd09a5a2e492c50e451051a29e91510ea012b7a16691d7101e1220a129907610a111b7a0558ead1132132da0648c4511bd12d29f098c06116c12759f6d89d2102c122a9f4189a110f311b19e09896110ba11a59ee68536108f11749e888517115c116a9eba81c2102711fc9d94017b103812719d8c0146107410889c860131108c11159c8501630e52118a9bb0868503de8dc69b088a6c83e68a9b9900805994da95219263a1b7a219a4eeaf84a280a4f1a45db134a340a53aa516b2cda3bea563a6ceb23ca40ba6b8a63db3a3a44ea60ca797b30ca512a742a7bcb303a575a639a770b317a5d2a6b4a7bdb2efa49da677a70bb200a5c9a61ea725b10ba52ca7bea78db0c5a4fda68ba7deaf7ca4bba647a7a1ae42a49fa630a7d4ad28a444a6dba65aadb9a339a6dca6daac75a3a6a541a655acf8a21da557a5b0abc5a28ba4bfa4d0aa70a268a4a5a4d1aa3aa205a42ea4fba916a20ba47ba480a9d9a1fea33ea4f4a872a10da35aa354a8c5a03ba2cea21ea850a08ba114a209a80ea0eca063a1aea78b9f6ca0c6a05aa7d69ecc9f2ea0d0a6e79dff9d469e31a6de9c089d279dafa50a9cb89b519c66a5319b759a1a9b1fa5fa996b988498b4a40a99ac96749652a48d98d494159613a4ec96b88ff790c2a36795cf084a8a5fa39a948208f009f5a23b942d087f0945a21a93c9070809bea1cb924d07be0869a1c491de06728812a133911506028873a0d18f7105548710a06c8f2405e586a69ff68de30498861c9fb58dca045806a49e808da4040806209e268c950aa6058f9d068c20045505eb9c9a8cdc03ff04739c408bc183c884ec9b1b8b8189028b739b158c888cb88d4a9b658b228e1091749b448cb68e35919e980080060acc846591d1a03ca367a47faf76a25ea4cda456b1bca385a524a6e8b102a407a6d3a6a3b25aa463a634a716b3c3a4afa6efa679b3f2a4e5a6cea782b3e2a4d8a6caa753b3eca4a2a61ba8b1b2b4a45aa630a7d2b17ca47ea6cca6eab06ba47ca6e5a64fb06ea459a6d3a665af1da415a612a754ae07a448a687a6a2adaaa3eda5fda60aad44a395a593a68eac26a37fa51fa611ac05a369a518a654abffa256a516a67aaaaea2fca4b3a5eba92aa2b0a45fa571a9d8a19ba405a5f5a8ada136a4c7a498a846a190a343a46fa808a18fa253a362a8d8a007a2b6a22ba87aa02da1b6a12ea81aa04ba000a1b4a7d99e399f9a9ff8a66c9d7d9d439e58a6a09cb49c429df4a5d99b139baa9baca5ec9a8d99029b53a5b39944987598e4a4db9810984798d0a412985d96639681a4c497b9940f962aa4e0967a94b395a3a38a962b9446950fa3c895a293d99452a26c95f9927894aaa1709477922494f4a012940092f59479a0c7922f93939401a05492a9923f946e9f8591e3904692d69e4191ae9006928f9e19917c90d291579e0c9141904193259eed900290ce92949d1790258fff91bf9ca08f3b9079912e9c198f1590a192259c288eec8fca92179caa8eef8fc893449ce1912c9290926d995d8f0991f393c19a0080ae1195112297c1a0d8a3cca4dbae64a3bda500a70ab169a48ba74ba8b2b15aa4a8a76fa854b2c3a49ea7ada8c1b200a574a7a0a837b3fba426a718a853b3caa4a2a691a71db3c2a488a612a8a2b2c9a4cca6d2a7e7b1aea4d8a650a702b1dea4daa6e8a731b0dba41da7c3a733af60a470a610a718aefba3e7a57ca648ad82a378a50ca689ace9a2f1a46aa510accfa2a8a420a528ab80a2aba42fa570aa65a25fa4dba4e0a92ba253a4d4a4a3a9ffa108a483a4fea894a174a330a4c3a877a1afa2eca380a84ba15fa208a35da810a1c2a1bba2eda7c7a070a101a2f8a739a0c6a03ca177a7469f20a076a0b1a6669e339f30a072a6b49ddd9dbb9e02a6089d1e9dd19d96a55f9c759c039d61a5679ba39a499b1da57a9a5f99c499a7a4d89943986a995fa44099fe971d9903a4a1987797c6987da36598f3966e9826a3a59776961f98a6a25c97f3957b981fa26d9678950997ada1a0951295cd9753a1a0949f944697f7a03f944194cc9682a07a93ba94649740a004937394ee96f89fba9231947a97969f8a920f945a96179fac919b93f795a99e6391339362961a9e2891df924d95919de690c2930595c59ce7907593b694299c7e9022931f95af9b8290a493dc944a9bcf8f0a942495e79a108e828f898d1f990080c5916095be9459a11ea538a62dae4ba372a66ca7b2b034a432a8a6a847b17fa495a828a9ebb1fda4c1a845a971b234a598a85fa9f1b24da541a8eea80ab309a56fa74aa8deb2b7a43ba72ea84fb287a4e5a602a89bb172a4efa68da7dcb068a479a681a71cb059a47fa609a7bcae41a478a612a7c2ad04a4ffa58fa6d0accca38aa521a634ac33a330a5bea580abb2a2d3a457a576aa70a2c2a458a5e9a932a27ba405a566a9e6a106a473a4f3a8b1a143a33ca4b6a83fa166a272a38fa8d4a014a296a255a870a05ba1c5a118a855a018a184a123a8fc9f76a03ea1dda7989fd89f90a03ea7ec9e6b9fe99fe0a64f9e7b9eca9eb3a6e79d8c9d569e41a6689db09c409dcaa5d89ccf9b5b9c71a51f9c659b1a9c43a5509b1e9abb9bd5a4239ac0995c9a96a46d995099f3994aa4bf98e198849915a4ac9895981c995fa3679856988f99c3a21d98b298f79968a28497f298449a05a2b89618997a9a79a13e96bd98109afba09e95aa98fe995da0059523986799a39f62948e970c99e99e55942d974a99aa9e5994f5961299649e4d94a996dc98ed9d899341968e988f9d1493da953d98009dd792ab957997a19c1a9274953f97559c8891d3940097c39b3791ad947b96e79af28fc392ad94c999d18f1792bb94d898ab115120b42018a9e1a049a50da6a5ae19a3c4a611a80bb07da4c7a875a9bcb093a407a910aa1eb114a578a980aa8db174a5c4a9e3aa1cb2a5a539a978aa81b261a59fa8c2a976b200a55fa8dfa816b2b0a489a7b8a88ab182a432a7eba7e2b06aa4cba677a716b01fa44aa653a7cbae51a49aa63fa76fad31a476a631a778accca302a6c8a6a8ab5ba363a577a6eeaaaea2b6a49ea5b3a95aa269a439a525a90da215a4d4a49ba888a12ea33aa44ba83fa1c9a2efa3cea71da16ea284a3e1a7cda021a2c1a2cea765a079a17ea280a72ba095a0d6a13ea703a063a02ca122a7309f309f32a018a78d9e549e0aa005a7fe9d879d099ff2a66c9dc09c4c9dcca6c49cee9b0c9dd0a6899c529b1b9c8da6449cac9a869b01a6d59b979b769c51a5299b2c9c1d9deea4729a369c0c9e89a4139a859cee9d24a4a4994c9c839d82a35299209c3c9df4a21899369c5c9da7a29d98f09b0b9d1aa20d98439b9f9c70a1ac978f9a329ccea02097ef99b79b4ba00f9786993c9b07a04a962499d39a289f8795d098ee9a9d9e22958d98a99a289ec3945698519a749d72941498fb992a9d1a9453974199a99c15941f97f498139c899341975798559b8b9398963198cc9a6c93fa9647987c9a9b923696e597669a5e910b944294ac9ae291a09d5d9e49a3bfa13da6b5a77aadf0a364a82aa905b06ba413a90aaa48b0a7a446a965aa63b0c2a49ba9bbaa65b098a4e6a924ab95b050a54faad7abf8b0cda52daa01ac4eb199a5c0a995ab4ab120a541a9bfaaedb0cda4b8a8fea97fb0a5a435a847a990af3fa471a767a82daef5a3c2a69aa74bad69a356a60fa726ac5aa3eaa548a68daa68a397a553a68ea938a340a5ffa51ba90aa3c1a468a5b6a8c5a24ba41ea550a81fa20ea490a414a88ba1dda210a4bba70aa124a2b6a295a79ea073a1dda127a741a073a020a1cca6579f1c9f449fbca6a29e1c9eed9e9fa6539e379ddc9d8ba6c89d779cde9c75a6369d449cac9c8fa60e9d0e9c6f9c65a69d9c8a99f79aefa5379c1a996e9ac6a5d89bb198f6995aa52d9b2699889a16a5b89a519a099ccea4979a519b2b9d8da46a9a5e9cb99d4ba4c699aa9c1f9effa3aa99949c579e27a374998e9cda9d45a24f993b9cbd9dd1a114992e9c629d4fa1c798b99b539dfca03a98239bfb9ca9a0a097999aa99c5ca05197309a749c0da0c496389a339c6d9f7c96f499e59bc89e67966a99919b4e9ed7952599519b199e3595db98169b8a9d62949e98729a239d14940e98fd99c69cad931a98c499999ca1931298a599809cad920f98b499659c09941d971c9887990000db1e3620639d2aa03ca40da634ad81a21fa72fa841aff1a360a831a909b001a42fa8f5a828b0e5a3d3a7b2a819b067a3bda7d9a8d1af58a30aa808a949af66a343a84ca962aeaba39ca822aad3ad10a4dda893aa73ad33a5c8a953ab85adc8a4e7a81faa3aadf3a37ea7d3a884acf9a3eea637a82bac7ca3f1a524a73aab21a357a56ba62caab4a2dfa4d4a56fa98da23ba406a5a4a820a2bda348a45ba8c0a188a2a7a30aa81ba15ba1aca16da78ca045a05ea011a72aa05f9f5f9f83a6cf9f979d299e84a6389faa9c069d47a6739e379a2f9a84a6ac9d91960c95ffa5da9cee0cb714fea5199cde153e1915a66c9bde17071904a6359b8b17cc1841a6e59a1c15741660a6f49ab40b501352a6739b6c91908ceba50f9c7499cb9977a51a9c5b9c0f9d1ea5ef9bef9c4f9e83a4f79a0a9d799ef1a3d199da9c2e9efaa2b199e49c9b9e5da2c0999d9d2a9fb7a1109ac89d679f4ca1e599bb9d4c9fc0a0c899659de09e58a07c99399dab9ee19fec98cd9c2e9e149f8d98c19c1a9ebe9e1d98679ca99d479eea967e9bd69cd29daa96d69a609c4e9d5e96609a279c099dc895cf99ec9ba29ca0957799359b679c2a954599e19a349cae949198509a099c639470989299799b679315983899009b24940b97ba98ba980000ae189819ce9a38a04fa5cfa60aad7fa298a791a8aeaecca22da833a9cdafaca2e7a7f0a843b0f0a237a80aa966b004a331a806a99bb0cba245a7baa8b3b0b0a1eaa500a793b070a00da377a43fb058a004a2faa264af07a0a3a181a24aae89a07ca1dda207ad4ea1a5a2a4a332acd8a149a339a42dabbea1a1a209a3f3a957a166a120a2eaa81ca127a1dfa118a8cba0f7a015a106a7a4a0c7a0e8a07ea68fa09ba0bea000a63da02b9f029fcca5669f539b529b9fa5a09e498e139079a5499e9814f21593a59c9d7617d5186fa5df9c801a391cbfa5249cba1bdd1dc0a56f9b6d1c7f1ef4a5879aee1c0a1f1ba6c59a141cf01da1a6cb9a761ad01cf1a62a9b5b15c218e2a69c9bc791e28ca4a6e59bbe98059a5ca6089c689bc09cf0a5459c189ce09db2a5609cc89cb99e0ba54d9c429d5e9f87a4339be59d0ca017a4bc9a269e07a0a8a25d9afc9d06a0b2a11e9adf9ddb9feda0b9999d9d719f89a043997a9d089f07a0f998169dd49e4e9fb298db9c499eba9e2998799cc69d2e9ee697259c679dc89d9c97819b179d729d50972d9bd59c2c9dca96ab9a979ce99c1896389a259c729ca395d999cc9b319c42958a99679b239cbd941799109bee9be7944f99899a189b1594eb98c89a9d9bd0947f98df99ea9a0000561d611fbb9475a0d3a561a744ac0ca386a8d6a92dae78a338a955aa17af83a311a97eaaa2af06a490a9bdaa01b038a4d2a94bab45b042a46ea9cfaa6fb0dba3dea855aa75b066a36fa8cba94cb0daa2eca637a80bb094a1bca417a66aaff29fd69f01a166ae619ec010fd114aade39d2a1cc61e48ac039e6a1e89212eaa3f9e501f5c21bca89b9d9d20822206a7d09de32030225fa50d9e9c204c2185a4949f64200921d0a20aa03820f42163a1f49d1a20ae2055a2569c4a21332233a28b98682213240ca23795e623862574a3cb8e7924ed25d1a38c8e5e24c9258ea45b91c323242561a5a594602240248ba68096ac20cf22cca75298b91eb0203ba80a99491a7f1d13a8369a2492418df7a7b49bd19bc89d60a7629c859d30a06ba67c9c3c9ee89f24a54b9cf29fc1a04ca4629c8ca095a1aaa3499ca2a0eea1d1a2079c5ca09da1f0a1269bfa9f22a148a1b19a699fcda0aaa0149ade9e84a063a0b099359e2ba09c9f3299b39da39ff99ef898569d3d9f669ede98ff9cdc9e0a9e0399c49cb09ee49de998959c809eb99dc2985d9c5d9e9a9d1398af9b8d9d0a9dea96049bf39ca39c8696b49aad9c5f9c0796a59a959c229c8e951c9a2d9c399b3595039a959b8e9a36942899c49ad1997f946e98a0994d980000111cc01da39586a079a62aa84dabaaa33aa967aa14ade9a3d4a925abfbad1ba411aa92ab7cae47a460aad1abd9ae79a49baa25ac1faf63a4a4aa1eac4daf49a48baa26ac44af61a481aa35ac0baf39a44aaaf8ab9dae8ea336a959aa4fae12a1bfa57da62faed59ade1d572151aeed19602765291cade01d4129332b05aadd1c0029852a2da6a41808281c29c8a0321149265b28329286970525a5262f1bc49903241125fd1a169b2123e824bd1c709d63234f252f20f5976c248b25f81e33101a266327a81d47196d27eb28ff90881c5e28ab29639ae81c84280f2a9ca2a91c78289f2950a6701b4b27b82802a9db166a251c279fa95c90c321dc217aa97799c818361a71a80b9cef983f9a2ba75e9cbd9dd19f7ea62c9db5a003a27ca51a9d37a19ea254a4df9c56a1d3a230a3a59c6fa114a365a26c9c6aa116a3f9a16d9c0fa190a262a1929b3fa0c0a10ea1c79aa69f16a192a0179ac09eaaa032a09399399e2da0459f1d99ca9ddb9fa29ee0986e9daa9f459eb2985d9d7f9ff09d9098ff9c059fb59d63989f9c809e6f9d3298269c049edc9ca497749b2c9d6c9cdc96c89aca9c139c5b96c19a909c719bf8958b9a8e9c269be3955c9a679cd99a2e96639a489c639a0596539a3b9c1e9a7d985699f199d2980000a918bc1ae795289cdba25da4f7a7cca22fa993aa47aca1a3bca914abf4ac03a451aac0ab60ad52a49daa15acccad73a4e2aa3cac16ae62a4d0aa41ac1eae5ba4c7aa4eac03aea2a4c5aa50acb6ada4a46caa23ac48ad54a563aa1bacaaac07a4e2a9a3ab29ac09a39fa987aa96ac4a192927b128bcae7f276030573129acb226782fbb30fd1c9a21dc2bf32cda278398ca23a724de260aa08f9ce69dbd2515a03fa128a3032524a03aa166a22525fb9fca9e36a0c225cb9dee958f9a65263f9ade23f3248628d61d4229702aa828c622882cad2d8428e924d42d6c2f34142a25c22d772fbea9f821152b9a2c9aacd4883924742504ac359d169d9aa1a7a9be9e62a22ba463a7fb9e99a22ba4b1a5199e2fa2fda363a40a9e22a2f6a398a33a9e3ea213a440a3689deca101a4cda2019d79a16ca3dca15f9cf8a09fa232a11b9c7fa0fba189a0a89b3ea0aea12fa06e9b0ba072a1c79f229b989f32a16c9fd49a539ff7a0df9e8e9ad09e84a0559e299a3e9e3ba0129ed399d49dfa9fac9d5f99709d929f549d01992f9d599f2c9d9698d29cd89ef09c73986d9c339e979c6198229cd99d2d9c3698f59b759db69bfb97aa9b589d8d9b7d97559b2b9d819b5897509b579d8c9b9895bf9a6b9dd79cd295349aa69c569a0000be1c881d049358a0aca623a878a995a2daa83faad9abdca27aa9daaa64aca4a3f2a982abcbac44a45aaa09ac1dad3da483aa21ac27ad26a46daa03ac16ad49a472aa0aacfaac5ca45faa0fac9cac84a47caa02ac30ac6da44daad0abb8aaa5a23ba866a947a81c9c30a2e2a368a4d408810e7610c69ee20ef817d518519d1e12ce17e217169e648d96941b9980a0899e0ea296a328a3f7a002a5d4a533a4f8a1d0a502a72ea476a1d5a514a79fa343a035a55ca66aa25f9eb3a406a6c5a1729ffca4ada606a2859b97a409a660a24ba009a53ca63ca60c8cb21dfb1e9da8500e2d14c79baca9c5a3aaa93eaa00a6909ca1a7eea84ca3c69a71a4e9a5d9a0b39f5da3a0a552a125a0a4a31fa5caa1d89e13a3a6a426a1b99ec0a26da438a1b49e8fa25ba43aa1759e3ea23da4f0a0619ed3a1faa3d0a0bb9d6da14fa33aa0819d06a1cba2be9fe29ccba062a26a9f789c87a0f1a1f19ef49b3da084a1939e4e9bc49f25a10b9ec59a1e9fa6a0b39d4a9a739e37a0489dd599e99de29fc49c93997e9d4a9f819c4199389dcb9e4b9cf798de9c549e189c85987f9c169ee09b15983a9cc49d5e9b6f970b9c919d029b3397ad9b4b9dd69af896159b129db79a0697fc9aab9c5a9a6c963b9ab19cba9931969599b59b2d990000191b4d1cdf94daa084a7cca80da9fea24ea9a5aaf2aa18a39fa9f4aa78ab1ca3e8a96cabf7ab00a465aaf9ab46ac27a490aa19ac64ac00a48daa27ac54aceba361aaf3abf3ab90a3bca939abb6aa42a352a9a7aacea978a2b1a814aaf5a8b2a0fba661a86ba7cf9dbda3eba4d4a4369a09a090a13ca21f9c8fa081a268a3a29d2fa420a63aa600a1e5a595a768a6e6a101a798a831a6e5a132a790a8e4a555a23ba769a886a5ffa101a758a83ca5d6a18fa62ca8dca47ca15aa617a8b3a475a1e4a558a768a4baa0f8a469a620a40f9eaea258a4dea2fc98bc9d859f2fa0cf9078987e9aaa9d4f8cf2952998ca9b3995739b9a9c229cae9b739fc0a0ab9dce9df3a127a45fa0239e84a2c3a415a17b9e79a297a4e9a07a9e75a26aa4a9a0249e37a240a48ea0ad9dfca1eda342a0419d94a156a3e79fe09c44a1e8a2549f8e9ce7a083a2cd9e3e9cafa033a2979e1f9c8ea0e9a12e9ecd9b55a09da1fb9d959b08a055a1969d3a9ba69fffa0719da69a109fc4a01a9dff998c9e8aa0269d78990b9e50a0ff9c1999969d09a0f29ce3982e9d799fae9cc898dc9c039fa69c8098959c819e1d9c1698799c109e469bb297299cbc9de19a0e97789b429df599f896629bc89c50997496aa9ab19cfb98e096609a079cbe970000601b6b1c5494d1a078a7c6a84ea803a2c3a8eda9aaa97ba221a971aa2baa8da274a9c5aa7baa06a3ada922aba4aab8a281a9fcaa98aab4a276a9e9aa6eaacea250a9b8aae0a98ea218a961aa21a92ba298a8b7a96fa845a17fa7d0a871a76ca031a6efa739a6ab9f04a58ea624a5c59e71a4d5a5baa43f9fb9a426a613a52ea04ca5d0a6b4a5eaa000a6d0a71aa685a18ea625a8bfa5d3a1b5a642a868a523a2d4a650a85aa51aa2b2a648a81da511a281a62da8fca4b1a12ea6e5a7c8a48aa1d0a5a2a7cea4a1a13ea51ba765a4efa0daa4aaa62fa439a015a4eca530a4a99e7fa2aaa4e5a2069dbba053a295a0c09ae39eb8a0439eda98469e14a0c79ced99e09fd4a01d9d9e9c47a166a2739ec39ddba1afa39f9f379ecfa11fa44aa0699ef3a137a485a0249eaea12ca469a0b89d77a1aea332a04a9d23a1cfa2909fe99cdea068a2ae9eb19cafa011a26f9e709c6da0bea1ff9d259c2ca08da1999dc79beb9f49a13d9d089b599feba00e9d5e9ab29eb2a0eb9c099a329e7da0f89caf99dc9d43a0a49c81998c9d18a08c9c48993d9da89f579c1499fd9c179f1b9ce198b59c9c9e899b6398619c309ef09a2c983b9ce99da09ad997119c9a9d6b9aa697e29b2b9dd299b996499b139d22993196439a439c6a98dc1e5124282597a879240829162ab7acb8257f2ad92b45ae0f26c82a192c34af11269f2a162c9baf3826b72a2e2cdeaf3026c62a3f2c39b0c3255d2ac02baab00c25f028012aa0b0d821be239124f7b0a49000a907acebb1b2232b25782457b00f287a2ad82b4aae8028442a252b48ad402ad62b1b2c7fad252cbd2cc62c84ada32c022de62c48adcc2c232d5a2df4ac3f2dae2cb92ce4ac812750afb7b1afaf722c9b29e9250aac1f2e412e782d0eac102e102ea22df6acf52ded2d592d3dad2c2ef12d632d11ad4a2e2f2e6b2d4fad4c2e2b2e7c2d45ad592d5b2dc82c98ac2f2a982a202affa9d523b825182618a6431dd721032378a3d61a3d20642106a2c41941202e212ea1d717601e03209da1a6144c161119e5a2d58d029bc59beca32e17241e1a20e7a1b019dc201322a5a089195020772115a03f1903201121c09f1819721fd320619fe218241fa220159fb618d11e5820ce9e7c18741e2c20899e3318ec1dc31f3b9ed017811d6a1fc49d45170d1dd11e709dbe16bd1c731efb9ca416861cf81d939c3916411cb81d3c9cc315081c4c1dc59b4915561b101d5b9beb14161bc61c979aa514851a821cf7998c144a1a241c40999e14601a001cd9989a145d1ae41bdd98f613a719b81acd98dd14f718241a3798251e5e222f245ba95824b4289629f1adc024ab29002b94af35251a2a692b6cb06a252d2a972bd6b0c2255c2abe2b22b16725362a632b8ab1b424f728ab29c4b1a6228924d62471b19f1a83a4b9a6ecb04f9ac4a95fabacb0a48e0fa79ca8a6b0bc1f461e5a1df6af13245126e627e2aebb27c729042af4adaa298d2a572a88ad492bc22bea2ae6ad3e2cd52bd62a4eae3f2cb5270f2198ae2c2ba7a71cac55ae812c99228ca140ad9d2d852c732bf1acc92d672d542c3bad3d2ed72d222d9ead4d2ef52d532d07ae732e0e2e592de9ad0d2e912dda2c5aad912c702ced2b8cac1628de28aa2888aa561e73214d2288a66e0fe11a331d84a4bd15981d371fd7a37e17661ef71f11a3a3151f1ce11ccea27b142c17a9181fa34b91c89d18a007a42484269cee9c0ca40918b81de91ed0a17a18f11e6f20dba06618fc1e90204ea05718de1e7a20f99f1418951e5320769f1e18801e1f201e9fbe172c1e0d20cd9e8917e21d901f879e3417951d3c1f3e9ee1161c1db61ef49d5916d41c511e409dbc15531ca21df69c4d15e61b2b1d889cd914581bc21c289cc214c31a5a1cda9b7614701a2a1c3d9b1b14231af61ba89af013d819901b139acf13a319681b4a99c0137e19dd1ae7985c12cd18fb19839875125518f319b5998b1b1d21232273a97522d7268128acae0023a1289b294db05a23a528b62920b175238728a6299fb11e232a287129eab1ba2206280d2962b28b21f825b22773b2272048235a2433b2bf1dfa192c1bcbb1411a179d4ca055b1ff190d9d41a0e6b0ea14a699f59f3ab0031b3c19311423af7820ee223222e5adc3247125b824a7ad4228f1260c26daadd929dd27952564ae452b7d272523bdae022c8127e920edae7e2c2929f7248aae3c2d362bbd28f6ad1a2ecf2c7e2b33ae402e4f2d5c2c50aea42ed42d1f2d5bae162e9f2dd82c18ae522dfb2c5c2c76ad682a9c2a192a59acf822a124a324a6a97791a5127e16c3a51c97a291a50cb8a4b9958e94808cb6a403943e968995a3a441939a98ae99dfa37292849a1b9c5ea3a28fda9ad49b7ca3d20e27099b0a20a34b16161d601e48a2f017c11e6620e5a11718de1e522033a197170d1ec71faea03117c31d6c1f52a0ab16881d171f20a09f167b1d131fbf9f57163e1dc21ef99e1716ff1c6e1e6e9e0216c41c1b1ee99d97157a1cc41d959d2a150c1c321d069da6144d1bbe1c959c8714c21a5f1c379c39148f1a321c0d9c3214351a1a1ca19be813d819d61bfc9aca13ac195c1b159bc51391190c1bc69a1c132719c01a7c9a95127a199d1add993f112e164117d09695175a1e1020aca96d1ecb24e02588af38205126d727beb0221fde25d3277cb1d91ed325792706b2a31dd824482662b2031d29248525ddb2461ca622e42305b3b21a4d1f9a21cfb29315321a681b4ab2198f0e9d199eaeb15495049d0f9e30b1f194ce9cea9a49b0489c339edfa0a5afc29d639f82a0f3aeb294199ccb9e5fae951d9992c29c01ae5e246319089d5aae5a272c1d17a100af5b2905239f9426af3c2bcb272e22f3ae492ced294727f1ae102dbd2b7e29b5ae812d9e2c342b88aeae2d0b2de42b4dae402d8b2c022cd3ad562bd52a032aa9ac2b2671264d267faa9716211dee1d98a8689cac9a5c984fa60d9b559afa9574a5c198ca96159363a5dc95ae91ab8c53a5a2947c94c092daa496924397949863a44a8deb942e96d6a31d0a1a09d8102aa361117818611ad9a27d15851cf71d0da22d17f61d901fa2a190169f1d751fffa06516521dd11ebfa04d16351dab1e57a0c415e81c4d1e1aa09f15be1c1b1ea99f4115731cbc1dfc9e0b15381c4d1db49eda140a1c231d4c9eb014a91bee1c0c9e6e14f01aaa1cb99d0214801a621c359dbe13341a1c1c939cd9130b1ade1b159c7313c019591b599b3f136f19421b429bf1124a19ba1a749afc11c2181d1ada99f011b2187319f89a181037153814e59e55999d9b7e9a9fa9ed1aaf22412407b0611a5f24092600b1c31702243825c0b1ed14bd22912448b20b8f39215a239cb28095f31e8222fdb2a6981c1a131e06b3779a1b94ec14e1b2089d1a9d1e9e63b2a59e84a2ada2bbb1a09e82a1a5a2f2b0f99e35a120a161b000a0aea0c8a13db0b2a074a320a476aff2a041a370a42faf0fa08da368a56faee99b7aa4baa534aead1b64a319a67eae3924239cbfa370ae4f27712131933dae2d2984266f232daed42a10297c26e9ad822b1c2ad02827ae602b9e2a41299aad3f2a97290129f6ac732678266d2626ac0e1cb81d8a1c5eaa6b9dac9d919e4ea9139efd9e9d9e66a7bc9ce49c269c76a6639b439c059c1ca6da981d9a349990a50296cb97589524a5aa94e793df91b6a4c8904890218b2da404847b120c1496a33e11161a9f1bcea29614631c811d16a20415a61cdd1dc9a19f14961cc51d66a1ab143e1c681d33a1b714051c651defa0bd142b1c631db3a0ad14c61b401d42a06414b41be81cbe9f6c14561ba11c1a9f3114d11a7c1cad9ec813a01a4d1c369e4a13581aea1bcc9dc212b119771b4b9d65126719071bd29cec11f718a51a409cbc118818c719da9b4e11181834192c9bb8105d1775189f9a3c10bf16e1177b9a710e8915be161e9976106f1674184b9abe90d0192a1c7fa94098d01c3a1ffbaff8989a1d36202eb1179b651c401fedb1839c7d197f1d5bb28d9eae939b14bbb2c89ef699c694fab2c99f0d9d4a9b06b3cd9f249f2a9ee5b24da097a157a078b252a09ca054a0c2b135a098a0259ee1b073a05aa04ba185b085a14ba311a55eb02ba22da43da506b0f9a1b8a4f0a58baf31a2bea4c6a578ae3da29aa4dba5b7ada3a1f7a501a741adcb9cdfa479a669ade41867a198a431ad31212a11829e32ad5b24cb20451b3aad11254d23522103ad412513242023b5ac4b22f420102185ab1b8b878e9d95aca9c09e4ca0b5a059a8629f90a053a06ca7659eff9f0b9f74a6699d4f9d5c9d62a6379c1d9cb19a77a6319a0a9a3b992ca66a98f0978295fda57f961b94239290a56a93e889838b1ba50b8fe60f4a148fa4ef839a163418bda3790e5019b61afaa2b010a91a4a1c9aa2ed11aa1a6e1c28a22212941a811cd3a14a128a1a6b1c0fa10b12711ac31b52a03712421ae81b919f3212311af31b339f7512491a9b1bae9ebe12141ac31b449e6412d519781b089e0f1286191a1b8e9dde113e19b51a3f9d8111ac185a1af89c5211b418101a969c2f11401881193e9c8410a117ed182d9b3710ed167318569aad0f5b16d317ee99610e081687177799630dfc133b159a992f15a41f2721a8a92999131e6a200ab0ce9ba51d472032b1cc9d1293411af6b1ab9f8a996f1468b20ea0d49cee9aadb2a3a0fc9efd9dffb224a11a9f149e08b328a19ca053a0e9b225a1a9a1a4a18bb212a2bda2dba2ceb17aa1c0a2dda2b8b0aea164a3d6a3a2b0cfa1a0a2a2a487b0a1a1c9a2aea4f2aff5a119a40ba512af25a2b4a4d1a55eae19a3f8a42fa693ad05a305a5d8a55cad36a2fea4c8a5d5ac87a1b1a484a523ac75a051a4bda515ac469edaa2e2a453abb49c3aa1cea3eeaa859ce6a05ca20aaa999e4ca29ca2d6a816a017a1a4a286a825a0f3a086a125a80fa09da0cca0f6a71f9f07a046a0e5a7fc9d629eb49e7fa7b39c629d789daca6419b029b889b03a61e999198a49839a50c972f95a09491a420953290e78a43a4c7924609f91018a4738f97155418c6a30904e518291afaa2970c9919fb1a3ca2d30db519d61bb8a1030ffa19971b8aa10410f319ca1b44a1970f5819071bc0a0521056196a1a38a00110b918121ac29f49108c18cb19309fe80fa718fe19829e6b0f681858193c9e2c0fdd172b19089ede0e8317f318979da20e4617d118719d740f0617a418129d480e28160e18759ce70d3515a3165c9b960df0144016a99a9d0de1146f15579a410a7f13cf14f299b50cfc1348151a9c00809a9397910d9cb89eaa9c1b9c08b0eb9f6a9ff39c8ab19ea0f69f5b9f02b23ba10fa1b59f5eb2e2a134a120a196b205a24ea273a2c8b29ba274a3d0a3f3b2b4a290a3f6a3dab23fa35aa412a475b26da3d6a318a4a1b141a374a4bea49fb041a3a7a454a68fb071a3f1a4bca67ab052a31ba564a6dfaf31a359a587a6e5ae11a38ea5d1a62fae13a3a9a5f0a6c4adafa2aba59da63bad0ca36da565a6b7ac90a298a508a756ac78a212a5d9a57dab1ea220a4a7a4b6aa1ba139a352a393aab7a033a160a1d2a993a0bfa000a088a878a0ada0ef9f20a873a057a081a042a8c29f8ca0c4a0eaa71e9f03a024a04aa76f9efb9e2e9feca6cc9de49d089e6ea6d19c689c559cfea57c9aab98bf989aa5cc97d693e09134a57595f5097a0bd9a4079321106d1498a4859058149d150fa49c8e3115fe172da34f8928172c19cfa25683c51791194da22c032b18e819d4a16c0853188e197ba12b0b7418c11923a1db0a35186f19b9a0920cf917a6195ca0450c15183019c89f040d9417d118039f9f0c14177f185a9e6c0db2164218d49d5f0cbe1501184f9d5a0c60158017f99c300c07156816809c750b3d14fa150e9c830a21131115119b040af8126214939ab50824128513649a5b049411c4116c9a0d057a10fe11969900808e8d4a8e7e8c279fd29d259fb0afcaa02fa14fa03cb167a179a182a1aab125a2c3a2fda13ab203a30fa478a392b28ea32ba470a4c4b2a8a338a41aa5ddb2b8a3bfa427a5b5b2b9a3c0a434a54fb217a4c5a428a56cb1a4a3d1a498a48eb005a487a48fa56db025a365a4fea544b09ba312a5dfa6c2af67a390a5eda6e0aef8a2a5a507a708aee6a2cea50aa748ad0da3dba5d3a6cdacaea397a58ea675ac55a3eea4caa50cac81a28da4aca509ac37a2dba3c7a408ab74a108a459a463aa66a1e4a30aa4eda9d2a000a34da339a9ada03ca2cda28da833a0b3a1d2a144a85a9fdea0e8a0baa7b29e57a04da07ca7109ea59f13a041a7309d9f9e0b9fd0a6619c379dfa9d55a60d9bed9b709cada59999e899789a69a54998bc969d9605a54096e0922a9177a4d4940d894d0af9a321931b0f79105ca30a91e913021511a36a8ce31576189aa21689ad16471856a232834417ba1811a2f682c71659186fa1b402fe167518c9a060078516321881a0140737160a1856a0a8099816c7170fa054097a153e17599ff50509159a16819e90051a143515a49d3a059913dc14449dde042412f613fa9c8c01f1107712a19c7e01b30f2111349c7c01fe0dd80d2a9c7381f90d9d0dff9b5a81d80b3a0a5b9abc81900c3b10679b0080851395189403c5a0b59dab183eaf38a137a14da145b105a309a44ba4b7b152a3ada41da528b2b9a3dca453a569b2e6a3fda47aa5abb211a422a5a2a5dbb218a430a5b9a5bdb21ca4bda5d2a552b2a5a4d7a575a693b14da4cfa570a6a3b07ca473a551a75bb029a42fa5f3a637b0cda349a524a673afa4a36aa5bba6e4ae71a3bba5c8a66cae1ea377a5cba6a6adbca2c7a4d0a5dcac42a276a4b4a547ace0a110a4f0a48cab19a23aa449a51eabe9a141a44fa58aaae9a1cea485a53aaa7ba101a442a400aa33a118a3c6a354a99fa05da290a2eca84aa06aa16ba12aa87d9f70a0b1a0caa7a59ead9f07a070a7b69d6a9e4a9fe5a6bf9c549d7f9d25a6c49b3b9c2e9ceca5c49a729a0a9bc0a5da997199d799c6a5c9987598a898a1a52b98a696999602a5b8967d92109437a441952b8fef8982a393949788c00919a3ab9257081a10c1a22f92100eb30f2da20b91930df21193a1c18f46106b11f2a0ec8dd60ff51086a0648d530fb1102aa0e38b0e0f861003a09a8bc4101d12c09f48899f10ed11849f1e896310b5113c9feb852b10d70ff59e8c85cd0f7e0fa69ec4815e0f260f2a9e9e81ed0eb610789d8b819f0e3e0e9b9c88816e0efe0d1e9c96847109c40da49ba78861034192e89c268c5e83828ad4990080ed95e0961c8adca17da4c2a447af53a33aa54fa61cb12ea350a5e9a569b1cea3f9a548a6cfb12aa441a616a723b284a4fda669a76ab2bca44aa724a89bb2e3a474a741a890b21aa5f4a6fea72eb208a508a6c9a691b1a2a481a592a5a7b042a415a5cda52db0d3a379a49ca5fdaf77a310a41aa527aff2a231a438a5a1aee9a29fa461a520aeb1a2a6a4c3a570ad8aa253a4c6a5dbac56a242a44ba54aace9a1eca3efa4ffabe5a110a4c0a46aaba7a1bca340a4c9aa4ea1c6a34ca40faa20a133a371a3b5a9c9a0f2a2cca3c9a87aa0e4a174a252a805a0e2a09ba135a8879f52a006a10ca8f99e30a084a005a8409ed09edb9f42a77e9d9b9dd29d83a68b9cc39cd39c07a6ba9b6d9b219cdaa5f69a3b9aca9a6ba5a299ee983899cda4bf98ba97e0976ea43f98e495bb9525a41e971b92bb93a2a3c195e18ee18942a3d59443888789d3a2fd93e487318969a274936487d688f8a15892f3869688a9a1719188063c883aa1d490ba05838785a05690260502871ba01b8ffd04c386ed9fbc8ece048986759f818db0044f86329f508d8c84fe85a69e068d52849c85df9dd48c1b844d85629d9e8cd483ed84b29c668c7489f88a489c458c4f89a08d029c118c548c738d7e9b6d8cdd8dd790209be98daa90df9173970080cf0c8816d00a02a13fa2969eb9ae0da24ba4c2a412b16ea392a53ea63bb100a436a61fa7adb141a483a6e9a6fbb170a43fa7cba748b297a408a707a86cb2a9a4aaa61ba868b275a42fa6b3a719b248a425a60ba775b15da419a6f0a68bb091a4e9a5c6a64db02fa44fa52ea5f4afefa309a574a5d0aea5a268a4b7a467aecda21aa42ea5b6ad75a269a4cda50eadfda2eba467a68eaca5a255a59fa61eac4da2bea4f0a59aab7ca101a4c0a4daaae9a021a30ca477aabea06ea29ea2b3a9f7a093a2bda356a9c9a0d7a21da4b9a88ba0dda115a3aba847a00da103a2b7a811a092a0fba06fa82d9f5b9fc79f07a8059e0d9e3d9e24a7979c049da59d76a6559c759cf59c58a6819b9a9b259c03a6a89a089a9d9a88a59999dc98419951a50599e3970a9918a545989197f197cca412982d97899773a451978c95169716a483961c95809650a32296a094eb957ea2639532946695c6a1d994d093fb940ca112945493b594a4a05e93d2925e9430a044925f921194cb9ff1910a92bd93349f0d917b906593e19ee29086911f93a09ebf903491d292299e9e90d1904a92ae9d58905e90f792fc9c15900d91a4929a9cd08eee90d1936f9c888eb990f393829ca98e8d906094989cc7901d927994f99a3a902c915794399a0000a3172719928de1a0cca3a4a330ae55a31aa6faa6aeb04ca4a0a759a80bb17aa4faa7aaa878b1c7a42da8dfa8c6b1d1a424a8d9a80fb2cda40ba8b8a83cb2aaa4b8a783a830b297a452a7fda7f5b17aa4afa6d1a75cb14da497a61ba7b4b067a4f3a5d8a606b0f5a320a5efa589af71a3a7a471a596aec2a25da412a5efad93a28ba320a55dad85a236a4eaa4f6ac2ba209a41aa5b5ac39a20ba411a5edabd2a179a35fa403ab87a159a309a479aa81a165a31ba407aa50a1f2a2bfa390a924a18ca256a326a9b2a0bfa1c5a288a86ea01da1f3a15ca814a0c7a02fa115a8579f31a084a07ea7609e3e9f2da0efa6cf9d599e3d9fb0a64d9d9c9d5d9e71a6dc9cf89c949d3da6599cb59c569df8a5709b189b7f9c7da5929ac599669b1ea5119a7099079bdca470992a99c39999a4b998d29860994aa47e98d097fb98f3a3c8972c985b9968a35797b297ee98d2a27596119793982ca2bd959496d6989fa1e194139690982ba183946996d598c5a0fa9308969a988ba09293be95559847a0b292c0940a98f89f41927394da965b9f1092259457969f9eb191f193f595399e1a91c293b3959e9df99054948895209dc79020943795879cbc90a893ea94f29bbd9008943995499b75904d94b2965d9b668e8c915193c5990080d495c893319065a1f2a4e2a4a1ad53a3bba615a85bb04ca444a8eda8b1b096a4a2a876a919b1f7a4d4a8aaa959b115a510a9f7a9a2b129a5d2a8aaa9d2b1e6a46da83ea9c9b1d5a402a877a895b1a2a46ca722a81bb12aa4d8a6a0a795b017a460a6f1a6b8af06a4e8a54fa699ae13a496a515a6eaad0da38da4dba43aad5ea2e0a32ba49dace7a12ea2f9a2fcab7da136a1caa1baaa89a1e8a1b4a225aa9da17ea2e9a2c9a93ca116a2fba260a99ca04fa101a112a99ea0b2a12da2c2a83fa003a16aa1a6a820a014a162a275a8ca9f88a039a170a8489f3da0f1a04ca8c29e729f5aa01da84a9e099f1da0c8a71d9e259e219f62a7db9d489d119ef1a67c9df49ca69d78a60a9d259c3f9ddea5619cb09be19c75a5849b379b969c21a5389aca9acb9bdfa47c99a799489b8da4d4983d99cb9a25a4c19896995c9ac3a393985799c39a07a3fb979b996a9aaaa29b974099a69a18a2ca964799c39a83a13696d698419af7a04e95a398049a27a0df942a9877998b9faf94f09744990f9f6e94ad971a99d69e63947097e198579e5f941297a398079e3c94a2965c98ab9d5c9347961b98569dd392fd95df97f59cca913e958897989c1e91a494c996349c1b9108957796ba9bd8905b94ed95169bfc8fde91c2950b9c400a2d1d751d109a21a10ca500a61faeb8a3cca7afa810b051a477a876a956b074a4c5a8aaa98cb0a5a4eaa8c8a9a4b0c5a448a90daae9b0dda41ea90caa15b1d6a4d9a8c4a91eb1bea48ca82ea90ab1cba452a828a9c9b09ea411a8a5a872b079a4f6a758a8beaf26a424a705a892ae21a4f6a65ea76bad17a463a61ba76bac1ea304a5efa55eab5fa3e2a4cfa5d7aa34a246a4b6a4d8a922a2e4a308a51ca919a2e0a3a4a4dda8bba1cea272a39ea8d7a0f3a172a252a883a036a108a249a87da0ffa035a28aa87aa013a1eca18da82ea083a045a160a8bb9ff89fa6a07fa8139f9c9f74a036a8829ec59ed19f0ca8fb9df79d859fc9a76e9dac9d7e9e9aa7299dcf9c7d9d59a7d49ce19caf9da8a6739c579cb79d0ea61c9cb49c369ea7a53f9bb39c369e1ea5549ab49c279e9ea4e199649ca69d24a480992e9c529d9da340994f9c719d1ca30399179c309dc7a283980f9c2f9d34a228985f9bb99c83a18397a49a479cfda04597c199ea9b7fa032976699749b1fa0739606990e9b609fdd95b198bf9a0e9f26957498939aac9ec5943c98519a389e6094f497f999e29d1794ae9785991a9d04946d97de987a9c26930d978098fc9ba89265961698779b0093cd96d097239bbf92999627984b9ae5918e94b696269b00809b9ac59b5f9b17a14fa5afa6e1acb2a302a8efa8c2af4ca4b7a890a909b08ea4d2a8b5a930b09aa405a9c8a94ab085a403a9fca94db088a445a91eaa42b0c8a442a950aa2bb099a4f4a8f4a90ab0a6a4a9a89ea9c3af9da49ba883a966afa1a467a843a9d7ae85a429a8f9a80eae57a422a89aa84ead44a4d1a74da842ac12a4aca68aa7c0aa8ca3d1a5a0a6dca914a307a5c5a55ca9c0a295a436a54ba911a236a4cba4dea895a15da369a49da84ba1b1a250a39aa898a075a1f8a17aa8eb9f69a0afa012a81f9f9b9f55a088a7989e939ead9e5da7fb9da79d619e39a7ca9d6d9d6e9d26a7979daf9c349d32a7269d719cfd9c10a7bb9c249cad9cc7a6a59c339cc69c1ca64d9c4c9ce29c97a5139c7e9c269d55a5fe9bff9ce09d1ca58d9b599deb9edaa4079b3d9de09e88a4b29a269dd79e40a4fc99329ddf9e0aa4c099dc9cca9e66a38799da9c4e9eb6a27899959c379e23a23299859cdb9da4a19398dd9b799d23a1fe97259b069db8a03b978c9ae99c48a0e8968f9ab59cfe9fca96469a759c929f5096149a0a9cfe9e63969f99d99b9a9ef1955199ad9b759eb6952499229b209e64948a98c59a219e10944d98119a7f9d8493fe97ab99fb9c96930198a8991f9dc69289976f99bd9c7f930796309800990000601c581e879178a070a4afa5dbac44a39fa7b8a8d6ae03a46da86fa951af30a4a1a8aca9b9af57a4d1a8b9a9caaf7ea4e1a8fba9feaf7aa4f5a802aaf0af59a4aba89ea963af33a466a838a9e3ae2aa422a80ba93eaed4a3d8a7c3a8c5adc5a30da725a87cad76a3cca610a8d1ac75a35ea6a5a784ac4aa3d4a5fea61bacd8a22aa531a639ab90a2d1a4c1a574aa2da22fa4f6a4caa9a8a129a3d0a348a91fa114a143a1eaa850a01b9fd09ea7a88f9f1f9d799c69a8d19e1f9ca19a34a83f9e769a5d9a08a8fe9d309a199abba7899d92962f98a2a7079d6d93548ed0a7429ca80c77145aa7c89ba4121f1763a7789b490c2714b2a7039c1d92f193b1a72c9c3798339820a7959c799a209c88a6029d339c5b9d0ea6759c4a9d479e68a50d9cdf9dfb9ed0a4ea9a619d6a9e53a4529a9c9ce99dcba3dd99139d269e10a3c999859dc59e88a2f199fe9da59f12a2ed990c9ebe9f6ba1c999be9d0d9ffda0aa99689db09e9ba05499099d6e9e26a0bb98989ce69d679f57988a9ce29dea9edd973d9c7d9d7c9ef6963f9bb29c3b9ec096da9a6e9cb39d8c96709a329c659d4d96e499059c019d2796a699689ba69c8a952d99d99a7d9cc194c298519a559c76949b98d599019c9393a89751990c9b1a942f96259862980000ad1ad31c059671a001a5d2a57cacdda2aaa7baa825ae26a352a820a9c5ae44a341a813a95eaf6ba356a827a991afaaa38ca845a9bdaf36a346a81ca9d5afc3a2e6a792a89baff8a15ca650a730af31a2f5a5dfa6c1aea7a2c8a599a651aec9a266a55aa6d3adb4a2e5a4cba557ad80a283a4fba4b3ac21a2caa391a40eac99a1a6a215a329ab3ba17da152a265aab6a0dca0fba07ea96ea0ab9f45a00da9fd9fcb9cf39c9ba8839e0c95429053a8bc9ddb1425192ea8fc9c7319781c08a89b9cbd1a431d20a86b9ce21b081de4a74b9c8c1bd41c01a8159c3b1b991cd6a7619be81a681ce9a7e79a60192d1ce1a7f69ad0176c1a0fa8289b240c9416d0a7b19b3e98029649a7399c129cac9caaa6569c4b9dde9e6ca6919ce99d1da00ea6949cbe9d09a0baa5789c909d10a0e8a4149c959d1aa03ca41d9bf19d18a09aa37f9a0c9e26a0d0a2289a409e12a0ffa1ec99e79d9b9f53a18b999b9d789feaa02899739d0c9f64a0b1980c9d9f9e02a079989c9c5b9e6e9f45983e9c959d5e9efb97e99b319deb9d97978a9beb9c9b9d5e97469bae9c2c9db296e69a7a9cf39cf295669a3d9caf9cb695ff99069c769c2095a699909b5a9c9f942b99369b2c9cbb943299af9a819b75940d99aa9a7b9b1e9555989899d9980000201dd91e27030da13ca63da7d5abdca232a822a9c8ad88a3fca8cca943ae5ca3d0a8f1a9a3ae3aa3f7a8cca9b7ae66a303a909aae4ae53a3cfa8a6a9f8ae23a39aa890a9f9ae42a37fa874a9e0ae4aa35fa854a99aaeb6a255a79fa83aae06a271a52ba7efadf6a0eda207a46fad7aa0d89e4f9f1cadce9f75966c11b4acb39e6619241e23ac249d07206e2205ab4d9cf7216d24d1a9299a1b248c25ada85c96662452257ca81f967a244426b9a79c94ca2411267aa73d92a924e22540a72a8f8424ad2586a7d08e5c247725c0a785919f23c42418a8d495cc21bb2364a8de987f1f2521c1a8729a011aa21c00a9009c4a93310ee2a8689c1b9b489a95a85c9cab9c569d33a8a89c979e34a0c1a7089d4fa096a127a7df9c1ea066a10fa6c19c5da065a1f0a4cb9cb9a0c2a14ca4af9cbba0cea1c5a35c9c80a0bba1baa20c9c42a077a115a2309bdc9f15a183a1e49a609fd5a01ba13d9aa59e92a0b3a0b3992a9e05a022a05699769d579f579fe0981c9d0a9f0a9fba98d59caf9eaf9eb998a99c909e5e9e7498739c519ef19d2498289c0c9eb09d4397779b219df99c3c96de9a919c6c9c30968d9a7a9c319c9295709a3c9cea9b3895dd99fc9b719bfb94d4998b9b089b21943b99b59a3d9a68948b98719a09990000b51c681e5a945aa1cfa60fa824ab40a3f3a80aaad0ac89a361a951aa49ada7a359a998aab7addca37da9ceaad9adcba394a9edaa04aea1a389a9e4aafdadaca37fa9bdaae8ad03a472a9e2aac8ad2ea446a9a9aa82ad7ba4eda83faa29adc8a387a89ba9bcac74a2f6a632a8d9aceca0b2a2a6a32aad7b9eae19151b72ad619c7c24622614ad5711fb27512989ac231c3529ce2aacab591da929882bd5a9111f082a3a2bb6a8121ff829d92bbfa7d01d7f29052b06a87a1d5a29202bc1a7fb1b11299a2a08a8ae1c9228c829cea8351afb27ee2862a9cd161e260b282caa68887e24bd252faa4296b520ef21e1a9de9a1113b51759a9b59c439d10a097a8019dbc9eaca0dca7809d33a0bea1f4a6919d98a09aa28ba6259df7a08da217a5099d59a1eba216a4df9c84a11fa31fa3b59c62a125a3a7a2859c3fa120a330a2549cc7a03fa268a1a59b14a07ca1d7a0d49a6f9ff9a07ea0369ae89e7ca00aa09a991d9eff9f639f1699aa9dab9fe49e0699849da99fe29ecc984d9d689f729e8f980e9d2f9f119e6098889cba9ed49d31983c9c319e589db897b09b819de39c0797f29a0c9d769c7a96b39aca9c379c1296af9a939c039ce2957d9a5b9c559b2696619a3e9cde9acb953f9a269cff99b296a798de99cd98f417bf1c4f1c2997c89c2fa1b5a1a3a3f5a131a848a930abe5a2f7a812aa61ac2aa359a998aac3aca5a39aa9dfaa06adcda3ada917ab3eadc4a3dca949ab63adbca3c3a942ab4ead14a4d6a96dab20ad25a49ba911abc8ac07a44da99baa52ac06a41da97caac0abb3a2eca8e8a92caa65a144a897a937aae6a1b1a7ffa868ab1aa186a307a436ad431f492a322c66af69267c2f2831e9ae4328aa3009325cac6928e830f731b8a91e28a4308e3118a70e2848304631a0a68627213043317aa8be269e2fae30a7aac724bd2d612fb5ac0f1e662bf82cacadde180127c12884ad149848208c2239ac049dff9c949ef3a9889f37a2a6a37da8f4a0cfa29da4f3a6939f09a359a46ba5219ed4a231a4ada43e9e9aa225a425a41a9e4ba21ba458a3e39d20a20ba4eca2469db7a1f3a381a2f29c3da139a3c4a16d9cc4a07da227a1199c4fa0dfa1bca0ea9b24a07ca148a0bc9bee9f49a102a0479b7d9f18a1809fd99a3b9fe3a0329f6b9a8f9e71a0a39ef2992d9e35a03c9e9799ca9dfe9f119e0699669d9f9fed9dce98279d619fbd9d7498bf9ce09e7b9d59987c9c669e1b9d3198369ce59dab9c1a98139c889d5a9cb197a09b479d699c5d97589b5a9d799c2497469b4f9d4b9c6195539aea9c339ca7957899f79ba99a0000d31c8e1d419463a030a6a2a736a963a2aea807aac0ab72a2e5a818aa12acc7a20fa97caa50ac57a362a9dbaa8bac8fa37ba902abb3ac80a390a91dabb2acb3a395a90cab98ace4a372a9ecaa55ac57a321a9b2aa08ac40a3f4a878aa48ab17a3f6a83eaaf7a9eaa3dca8fca99fa8c8a2cea782a875a611a0a0a4d1a5e8a39c980f9f46a0e59f46053a09dd04f19c590de518501a9a9b8f10c619391bfa9a5d100e1b881c889c2911211bce1c279dfc12a51ca91d1a9e6817d01eba1f06a09419e520b4206da1c619a71ead1faea16a9a92a299a4f7a3fca1dfa867a9f3a4569ceca708a92da4f6989da427a605a2fd99e1a2a3a543a2bba08da4d6a530a3999f08a43aa556a2429f45a3b9a403a2ff9e19a3b2a414a28d9eb7a258a4d1a1ae9e8da247a4aea1519e1da220a454a1f39dada18ba3eaa0889d40a1e0a26fa0439deda07ca223a08f9c91a01da2b79f319c54a0cea1789fb39b0fa05ea10c9ff69a8e9fe1a0799e669ae39e76a00c9eef993f9e14a0789d7999c29d809f249d4599689d079fee9c1099319db59e8c9cd998e19c4d9e5f9c7698869c169e399c1f98579cc79d1b9cc297159c8a9dcc9b5f97a89b369d859b1f970d9bff9c249b4097d49a9a9cc09afe96649a5a9caf994c96da99199c899a0000371a9a1bd3948fa0d4a64aa8c0a87ba2b7a8f7a99faaa0a212a94aaa27ab8ea21aa98faa72ab09a374a9efaadcab4ba3a4a929ab0eac54a3c2a950ab08ac3ca3b5a91aabb9ab2aa355a9beaad7aac0a2e3a832aaeda943a284a8bda929a9c9a10aa81ca94da8b5a1c7a626a89aa604a045a58ea628a5e09ca4a219a413a3af98769f10a196a14e97529d939f84a16798119d13a077a2e198f89df0a0c3a3009aaa9e52a102a4ad98169ffba2a4a49699c89e16a146a35998449de19ff0a17995809aaa9c72a012902198009b139f528b4d961299419d5f92499a0c9c1c9d0a99ab9eae9ff09da19d69a26ca31ca07f9feba324a586a1a99f96a36da5ffa13a9f83a337a52aa2ee9e04a3e9a4d5a1d99ed3a2a2a488a1839e85a25aa438a1f39d2da222a40aa1729ddfa1c3a3c3a0f79c77a154a353a0a69c33a1f2a20ca0659ce8a093a2909f359ca2a033a20a9f069c6ba0e4a1cf9edf9b4ea0a3a16e9e929b00a057a1359e2f9b9d9fffa0d69d909a0e9fc1a0ab9df099679e68a0a89d4e99d69d21a06a9d0c995d9daa9f239de498169d499fe29ccf98c19cd49eae9c8098799c4a9e449c3898639cd59d8c9b9a97169c679de69a0b97889b179d419a4497149ba59c9f9970968c9a839c5f99bb97e299fc9b0b980000141b101c17947da0e5a64ea84ea88fa158a864a98ea9f8a1aba8c9a9f5a931a2eca853aa6aaac9a236a992aac2aabea233a999aac9aab2a239a9a1aaa1aaaba215a96eaa28aa8fa2e7a825aa72a923a280a8a4a9c3a85ca1e7a70ca91ea8bda0d1a65da8f7a64ca0b6a548a79ba5499fb6a4eca59ba4c19d04a437a532a4c69c1ca3aaa403a4f29ca1a24fa408a4929de6a29aa461a4649e8ea3d0a46ca4269f0ea448a59ba4b79f66a4c4a5c5a42aa06ea4bca5baa4179f25a4b7a5c9a4439f9aa323a55ca4fa9e7ca262a4b3a3949e96a139a350a29c9e38a041a174a0159c1e9fa1a02e9f2e9a8a9e41a00e9ea69afb9fc5a0f49d699cf9a049a2249f669d14a2d3a33ea0f79d9aa21ea477a0fc9d2ba20ea4bca00a9ee1a1f8a3cfa0239ecfa1f4a3cca0bd9d76a1d4a398a01c9d1ea129a346a0ee9cf5a0b5a2c79fbc9cdca062a2509f939cada00ea2d89e569c64a0ada1549e1e9c1fa065a11f9ec19bc99f1ba1b79d159b459fdaa0599d699aab9ea6a0679df199209e62a04b9d8799c79d47a02b9d32996d9d1fa0149df798449dc49fe29cc098de9c609fca9ca898ab9cd69e3f9c46987c9c389eca9b1e98439cf59d769bc097119cb39d0b9b7a97de9b4d9db49aee96509bfc9c139a6f96e199bc9b51985a905a1b401db7a47322aa27162924acb62486295d2ab3adda24a329c92a62ae1325b229db2aabae3525cb290d2befae4725c2292d2b37af3c25dc29582b8caf1425fb297c2bb5afaf248b29112bfdafc421cf246f245eaf6d238c266c28c5ad23251828fc28f0acc52614296429fbaccd281e2a632a29adc729b32ade2a2dad0f2aef2acc2ae8ace829d92ad92a36acfa2aea2b692ba8aa022614a8efab9bad861473b05eb128ae9f2c872c082cdcaa262d2a2dc82c93ac8f2d5f2de82c02ad9e2d682dc62cc6ac7e2d782dd92cf2ac0d2d0c2d7b2c7baca62afc2a6e2a90aa1d258626e1268ba7811fd522072485a4161b90205d2160a2f618421f66201ea24016091e031f2aa2e20daa11031649a4a89862a08fa101a53d16011d871e4ba4a4190021922267a221198720c22137a168192d206521a6a014199e1fd2205ba0cc18551f9b200da0ae18e61e6020e39f8e18a91e3f20a79f4118571e0a20779f3518d41da81f139f8517471d0a1f7e9ed416e11c851ed79d27168c1c141e219d0616341c941db09cc115e01b5a1d369c9015ae1b0a1ddf9b0b153b1bd81cc79bf8140a1ba71cf29a8b14501a5d1c749a7d14151adf1bc199a214011a871b48994914dd19491bc198e9125f197d1ab19857137c1891194f98d30c5e1f2f20f9a0e021ed26d328fbac1224e328d729f8ae6b2444296c2ad6af8c247329842a3eb0c7248a29ca2a78b0b5249a29b72aafb0692405293e2af3b01523b626042813b1841fc312109a25b1c11bbda196a4d3b02f1d8e12e8933bb0c51fd12243231aafdf227426a52775ae822509299b29e4aded274f29672932acc629ab2a702a67ac252baf2b632bb5ac252c452bc729dfaca32a829fbba873ad5c2bfa95aea830ade62c8b2b422939ac122d902c1d2c54adce2d732da52cf9ad7d2d222d932ca0ade02cc12c3a2c2dad832bdd2b812b98acb227932878282faae71f6d222a2313a7f4119218771a0aa48705bb134a1993a39010e3159c184da3f8044294679289a21c90f49b7a9c74a25d945c9dea9e09a43b84209a359bfca459146218a61900a4ef164c1d0c1fd3a12d18c61e6d2016a16018fc1e8b20cca05f18b01e5c209aa010189c1e4c204ca004187f1e172017a08f17231ecb1f959f5717c51d671f339fa8164b1dd11ea09e6616cb1c3b1e0c9ee815631ca81d7d9d7015121c3e1d149df314331bcf1ca89c8914dd1a6a1c459c63145c1a111cdc9b37141c1ad41b4c9b0e14ee19a51bde9a0514be19501b539ab2139e19131ba3993f135219ab1aeb98da112918e9188298c312a318a81ad39b74929a8f2a138aa2481fe5245e27bead2d222228ad2809b02c22e427df2857b044220c280c29bab04b221228db28fcb0e5217827e82843b1712150263e286bb167208c2474255db1ba1e74205a2124b1dd1ba9920694efb0f718459c359dc8b0aa9853a081a339b08d9bc99e559eebac7b147f1d96193fac0f203a216e20bdac3f249c22802150ac05266722991f8bac1f281223bd14d0ac5a29722198a001ad862aba251a9505ad832b31298425ddac2b2cf92aed28feac7a2c1b2c652a86adf02c5a2c502b5cad842bd02af629b6ac7e28eb288228e8abfb211124392440a9460f5d1a5e1bf3a6a296fa91dd0c65a5df9583968f8cc6a4609550968795c5a45e94b598c59870a4ba93aa9a229c31a4d491b69a8d9b2aa4098449978e9740a45d14bb19421b0fa437171b1e9d1f05a380172d1ef81f17a29717011ecf1f69a10617b21d751fdea0af166e1de81e63a051162c1dd21e15a022161a1d871ecf9fd815cf1c271e299fa415941cda1d9f9e7f15371c921d1e9e2f15f01b0c1d8f9da814261b8b1c059d72148c1a5b1ca99c2a14231a0b1c569c0f14fb19a41b1c9cce13f819951bde9bcf13bd19ab1bab9bbc13a3194d1b969b7f1378193d1b869b9712ec18b21a3e9b7e12a7180b1a0b9aea103f162318d997d80af71c771ce59d7d1c7822942483ae7c1e4a25eb266bb0df1e7d25ec26acb0771fe825872730b1a01e7b258c2672b12c1e8f24f025bbb1e21c0423ab24deb12e1c6022a123e2b1ef1adf1fab209cb1240e0b93399471b14999c3a0baa196b05c9ea5a3efa40dae119e8ba119a457ade89e58a015a1e9ad239d279ff29ebdad6c96369f07a18fada71a9b9ffca1a3adc821bb9b65a309ae50250a191ca154ae0428742262132cae41290727452403aedf296e28332681ad7c29ab284727deac2b29bd28c1272eac8327b3262c2551ab992129223d222daa178ab016c6176ca8a29ba895019442a7069b95995f9386a69d997298289330a66397a796e792f8a5cb948194708ce4a564932c94509296a562931e9853981ba5ee8e0b96f995a4a4b80c4012d9132ba41712fe18fa1acea3c7141d1c241db7a22616551dcb1e1da20516561d151fa0a11f16321daf1e4fa1e215eb1c4d1ee1a07415a01ce91d94a00015471c811d28a09b14f31b261dc59f75148f1bf01c429f4414361bba1cc39e21148e1a4e1c3d9e7613161a101cb99d1e13ca19b21b1b9d1213aa19c01bca9c5e13eb19ae1b719c5f13a0198a1b109cca127c19081b9b9b74121a19801ac79ac211c2182a1a2a9ad6104f187919bf9a1c122718d919fd9a8586e114430fb19c5f18a62051244bafd71527233524d5b0b2198123de24ffb0ca183c23c8246fb14e17d5221324c8b19914722188230eb23d8e071e9f2021b2b294631c401d23b2109843134f94f6b14f9b5e9e759db2b1f69de4a0d8a17bb019a1cfa405a6a2ad3b9e539fcda19fae6a9ef89ec29e9eae3e9f23a15aa105ae959f33a2dfa1beadb69d1ea119a2b2ad939a2fa1cba27fade219939ec2a109ad5c20be904b9fd9acfa22971e0418cfacbb2492216b1a5fac5a241d24a8223dac84226822752189aa791c091c2d1bb4a99d9ce59d1a9d9fa9549e2da0a8a07da9369efa9dab9edba8e79c899de19c91a7859b2f9c9f9ad8a6629941991b98ada696970998869548a66995bb9509959aa52f925e937c9116a5cb8e6589bf0a96a49a099b1547183aa4b112db1aae1c5da38c14361ca81db5a288148e1cbb1d6da27c147e1cab1de3a1a4142a1c501da7a18e14f11bfd1c4fa14114bf1bed1cdda031141b1bcd1c69a0c513bb1a741cf99f8613681a321c529f4713461a161cf09e1913ca19831b819e8a128519291b069e21123419c21a5b9d0612cf187e1afd9c9d11ab18e919789cfe1001186c192d9c76101c1787188c9b561060169d17b29a8d0fb51599167a9a5b0da815b916fc98230f21173218bd9c7381bb156816299dd791081e6a202caf4693381e4321d5b08c96221dc52011b1e698781d3c209db1919ada18d81cb9b11a9ca012021aeab1e69cc892121402b2c59d2f993a9a21b2fc9d469e5a9decb1b3a0afa2e3a255b130a2dca570a65faec1a055a1a3a448ae4fa163a44aa5abaf58a0e6a009a105af3aa07aa09ea02cae40a01aa1b2a048ad92a046a190a1b8acb5a015a483a479ac59a004a478a45cacdd9e6aa367a428ac749d70a092a054abde98199e39a03fab0099d29ddd9f39aab89c4e9ea19f26a91ea0c9a135a24fa8e7a0b0a2c6a24fa828a026a191a116a8859e16a0e59fcfa7799d869e159e48a7579cb19cdd9be1a6fd9a3c9a4b99b1a6c299fe98d89760a611984994549221a622959390a78b8fa591924f0928111aa5b88e4412c415e4a4de039b17a0195ca4680eaf19361bd0a3ab10741a391c85a3bd116c1a521ccda22412651a591c12a2b0116c1a421c6da1f811f019941bb4a02612c119a11b16a0af11b6193b1b8a9fe411c4195e1b449f3a129919891bdc9ef6116719e51a6d9ea81118198b1aec9d7b1190182d1a6c9de9105618e219039d2c11291852197c9cf710e2171819269ca1100c178718469b2c10c2161218709aa90fe0159917019a800eab16e8172799dc0e5f15f7155b9a24826919e219b09d6f99d31bbe1c54afa99cd19131190eb1ad9d98984d1346b1019ed598bd13b6b1f29e259cf199c9b1cf9fea9d1a9d06b2ee9f0b9e2f9d0fb272a0f59f6e9f23b2a7a024a0f8a01bb214a3f1a4bda455b17aa352a64ea6f7ada9a102a4b5a422ae03a273a429a561af97a1e1a3a1a4b7ae8ba11aa4d4a4b4ad86a11fa4dba435ad8ca137a413a5e2acb6a19da491a5b4acf8a05fa4fda480ac69a1d6a316a494ab73a16aa328a4bdaaaaa06ea115a206aa7fa07aa0e1a084a9a9a072a139a270a898a00fa295a261a712a09e9e849d9ea8669f009f0e9ecba8ba9fb8a09da04aa8ee9d019f4b9fe6a7bb9cfe9cef9c7ba75a9b5e9bf69bf7a67e99d798e89834a64298da96be9465a50f96f2922f91cea4659457899b0a97a49791a00f00145aa4378d3c150318eea302040218ae191aa35409dc18071a95a2f70b0d19f91a23a2420d5a19571bf2a1590e5719f81a82a18d0f2119c91a16a1640fcc18321a6ba02610a018df19f09f950f6f18a5196c9fe30f8f186f19f19e740f0c183d19b19e490fd31720195c9efb0e8117f018209ea70e2f176b18eb9d7a0e5f163a18539d370d76154517d29cf70c9614e815bc9bb50cc0147a15a69aac0c481426157f9a980861147f15da99a20ef1164f18369d00802389018c5693b59ced96409864af9f9e3b9d599935b115a0dd9e559e49b198a05ea0ba9e9db11fa14da168a0b9b182a131a283a1ecb19fa15da2a3a2f7b124a280a2cda21eb2f0a1ada204a309b247a36da4c0a435b120a426a635a720aea4a29ea26ea451ae19a2cba21ba35eafcca12fa309a3ceaee0a12fa4f8a4f5ad7aa133a341a452ad8ba1c6a311a4dcac1fa1bba209a459ac76a195a3e2a3d2ab21a1fda26aa3bcabc6a081a26aa339ab18a15fa3fca3b7aa0da12da3b7a305aadaa042a15fa2a9a866a07da1caa110a70fa03ca0e49f84a8ec9f1ea0c59f94a8d29ee39f6b9f32a82d9e089f359f13a8b69d0b9e2a9e8ba7079d119d149df2a6d19ba29a079a5fa6b598fc93fa91caa52696f1896d0b48a5ae9444107014f0a4ae929c12d1159fa454903614581526a47f8e0f15cb1787a35b8cd0155018e2a234836b16ab1875a208830417761805a2e4026517c4188aa13608ae17fd182fa1bb0a4f174319d3a0600ab11704195ca0420c3b179b1801a0f00bb8163f182d9f370b32164a186e9ed20aba15f817ce9d990a5415b916349daf0a09155d16ed9c710a56147a158a9cc1096e133e15359c810a30126f14b19be609e512a0133e9b98081d128f13ed9ab607d1123e13629b5c0431105910ad990080f18bb28fb28ffc9dfb9c149e0daf4ea0a8a0b8a0e8b0cca092a1bea129b1ada1a9a22ca29cb169a2d6a368a3c5b18ba2fda3a3a3f3b1f1a210a45ea402b221a31fa4faa41fb29ba30ea59aa5e7b1d9a4a4a666a71ab1b5a4c8a701a8bbad94a3aca5a7a6daad3fa395a519a6d5ae28a346a5d0a5f0ad93a298a4cba599ad6da2dda481a53fad51a372a4fca4bcac1fa204a4eaa487acbfa110a4ada41bac96a16fa340a4aaab95a1f5a39ba409ab78a100a24ca32eaa09a17aa1b1a185a97ea2bfa336a47ba891a1aca352a4dda74fa0aca0b6a148a8c39f72a04da071a8ff9e1ca000a022a8279e279f779fdea7449d299e669e8aa76b9c4f9d719df1a68e9b179c879c53a6239ae09a8b9adaa51f99ed98489976a580974496329625a5d3957994f99389a48a94f891ec891ea4cd938988b809c6a3db9169082d1064a3d78f4511b314f7a20c8c7b140e17a8a27c880116d4173fa2cd828015011774a19382cb154e17cfa05e027615f81696a045023f15c11672a02d020815861630a00c02b4145415af9fe4017813df14d69ec301e0126214fc9da9016b121714959d96011c11a112339d8b010a104d11149d8781600cc80dd79c7c81480c0b0bc49c2984f4085604ff9b5781db0ec50ea69aba09c6155b16449c0080f512b712338a7f9ff59e979caeae75a1dca131a2c6b05ca22ca41ea410b107a3d3a4eba489b169a368a58ea5a5b16ea30fa5ada5c5b187a32fa546a5deb162a3d6a464a500b225a380a4fda4cfb188a4b9a606a7e9b04fa4e8a69ba793add0a375a5e7a689ad2ca379a5b3a520af37a201a475a476aec1a2c2a4a3a5daade6a278a4a7a441ad05a230a410a5aaac4aa10ba34ea469ac48a1cfa250a48eac6aa162a301a4d0ab65a11ba411a51aabe3a060a2d5a26baa1fa146a233a207aa0ba19da341a42aa923a16aa390a427a880a0aca1dba2d4a8399f68a05ca0b1a8c79e48a052a047a8219e04a05da0d6a75f9de09ef89f02a7c59c699ed29e35a62b9cb89d079ef6a5079b449c509ce6a5d199a29a5f9ab3a5c698dd983e998aa50998af97f69708a5f3969095649548a4d79501944990f2a30e959a8e888985a35d9324883709eca20692bb07e3087da2d3901f07de0ef0a1828ff30c450e4aa1e38e7c0cbe10afa02b8d430c8c107ea0048d290c6e1043a0c88bc70e521029a0868b940e2f1007a03a8b3c0ef50f769ff088de0d890fe09e9388720d170f789e2f88230a080cf79da084c009a90b599d9a849309520bf59c8d847909200b879c18899083a004f29b898bff88978d209b11884e12dd11bb990080ed93ff95b58daca097a201a49baec3a274a5ada5c2b0cba267a5a1a5d2b03fa39da5fea53eb1afa3dfa5a6a66ab1cca360a6daa695b127a495a603a7b6b190a434a7bea7d6b105a57ea789a8cdb1c4a54ea86fa906b1f2a497a849a9b7ad3aa346a5b4a607ad21a317a5b1a579aef8a2b2a44fa50aaeffa2d0a464a598add1a22ca5f5a55bad8ba257a4eda4aaaca5a129a361a446ac2da1c2a175a26daba1a006a19fa1c8aa76a1aea15ea231aab0a1f4a32fa40aaaa4a1baa3f2a494a987a1eda283a4cda86aa0f0a127a435a81da006a131a2bea8569fcda08fa1d7a8fc9e2da0dba08ba8af9e04a054a048a8c59d859ecb9e00a8f29c749d969dfca6169c9c9c9e9c50a6429b279bea9b22a6269ad699679a9aa5c9987898ca98f4a46c982c97559788a4e697b296e29641a4bf9601943a93dca30e9674912990b7a328951d8edb8f1fa34194ac8d678fb5a239935c8df88e2ba2fc91b486b28ecaa1c4913786008e30a133917c85498d75a036901285118d2ba00a8fef84f18c2ba0bc8ec084d38cf19f948ea184ac8c7f9f598e8384778cfa9e038e4b848c85549eab8d138ac38b949d488d8f892a8bda9c198d618ca18d6f9c348c418c978f229cbe8b158c348d699bbe8b1f8c438f659bc18c12900f94d9990080d611e110828a3d9f5aa00aa01aae62a294a481a59db043a39aa553a6b8b0b7a329a61ea718b1fca3aca638a72bb106a4c6a667a74db13ea4f3a68ea769b141a4bea6c1a78db152a406a705a883b16ea4f9a634a8e5b061a4f4a78ba8b2ae91a5dea8c7a961ada8a4b0a728a8d1ae27a39ea5c6a609aeafa216a5b9a584ad03a436a58ba5e8ac69a282a417a55eacbaa12ba3a3a4e2ab68a11aa262a331ab5da122a31da4cbaac8a051a31aa467aa79a1c5a30ea4bca992a137a411a559a909a143a340a5f9a821a030a23ea4a0a823a0a3a14ca2d3a8869fdba0e1a0d5a8c79e1fa07ca043a8f09d7f9ee99efba7059d919dca9d63a7839ce49cf39c10a7dd9b4f9c2e9c9ea6f99a189bb49b19a61c9a6a9a329aa8a533995199e49961a5c1981e99a59928a59d9843987299dfa422980a98279982a45d978097099815a40897bd96499734a331961c96a6966ca29a959a954797cfa1d9948594ec9664a190946494a2950fa19c9313942c9587a007938e93ce9418a0ea91da918e948e9f6f91829154942e9f81902e911a94ce9e4390dc91a8932e9ef88f61910c93af9dbb8f2791be92499dce8f0492ea93199db08fe791da930f9dbd8ebe919194f29c658e80915e94bb9c839008915192319a3391c5903694d2990000da13a513188d4ba0d7a21fa385adc7a2d3a5a9a64eb096a3e7a6eba777b013a494a73aa8d2b040a4cca78aa8fdb057a4fba7b3a82ab16ba413a88fa833b12ca482a768a848b148a448a73da821b12aa4eba601a801b177a41fa824a80fb037a457a722a830ad02a39aa53ca6d5ad50a2e3a48ea5aead0ba222a49ea422adf9a115a429a59cace0a123a4aea438ac87a16ca4fca406acbba157a47da4ddaa32a109a4b4a454aa38a1e2a34ca474a945a18da359a425a9eca048a3cda42ca9b1a026a35ba40ca914a09ca151a2bda8af9ff4a01fa181a8fd9e25a077a027a8819e4c9fbf9f00a8c49de09e559f92a74d9d149e639e13a7b29c549d159ee1a6769c219de69dcfa6109ce09c1b9d62a6699b319cda9c32a69b9a109b8a9ccba5229a9a9a4d9c7da584993b9a249b18a50399c099a09aa1a47f98cc981e9a2fa4e0977198ac9996a365979598d999d9a2da9634986f9913a2bf95d3979b99aca1549505984b993ba1b39496979599eaa012942f97e298b5a0b293249693984da0c69299952e98aa9f13929f94fa96129f789150945e96489e659133941b96079e599131945895949d3c91a1944795339df8906b94a595ae9c7c901c945b95289c41903f943695d09b6b906f9329974f9c428c948dc991b49a0080ea96d199519653a121a5f9a53eadbea3bfa63ea80ab020a40da8b7a846b036a45ea8fba891b06ea46ea835a997b073a479a853a9b2b076a465a8fea8c3b05da443a8dba8c8b072a400a8b8a8bfb04fa4a5a78aa89eb055a40ba886a83cb051a417a855a8b3ae4da330a72fa854ac83a2a9a5caa69eab31a1e0a358a437ab74a0d0a1b8a17aaa5ba00aa13ea2d5a954a03ca09ea050a935a05da135a3afa81ca085a0fda044a8fe9fe1a09ba1aea7739f68a099a056a76ca0bba13ca321a79d9fdaa02fa23da80d9fa99fdca09ea8319f0ba083a026a9c89e35a005a1b2a84b9e769f18a067a8e69d339fc79f2fa8899d569e1c9ecda7759d809d599e54a74d9d109dd99dc0a69a9ca19c639d18a6209c549c0e9dd6a53a9b199cdb9c7ea5679ab59b8e9c0ba59799219b279c7fa40199ab9ac19b1ca4c098629aff9bbca35b98199aa89b3da30d98389a3f9bb2a23197ab99499b0ca25d967f99479b53a1c995fb98ac9ae1a010956e98fc9928a0c59423989399be9f76941e988a997d9f8d947d975799059f879424970c99a39e4094d4966498109e289468962498e29d39930896da976b9d7f92c9958d97369da7918d954297b89cf29008952d97609c0c91109515972d9c8c900f957d97e79b8a90ea91fb94529c00801b121d0d0c987ca04fa4fba459ad7fa35ca790a801b012a443a810a911b042a491a86ea942b072a4caa8ada94eb08ea4e5a8d4a96cb0a6a4d0a8b5a979b0b3a4b0a897a989b0cea494a838a975b0aaa454a82ea946b09fa478a82ea921b09ba485a843a952af21a4dda7b5a8c4adf7a39ba6c8a750aa38a3a6a53ea7aaa90ba3eca48fa687a940a3b5a401a601a980a10ea4bba4fea717a270a23ba382a640a187a158a3d9a5a9a08fa120a333a6bda0f8a1f6a252a7bf9fdba000a247a8c59feba0c7a115a9a29fa7a075a1cda8899f6ca034a1aca8e39e3aa093a070a84a9e8a9f09a041a8b99d9a9ea79f09a8689dc39e3d9fa2a7e39cd09dcb9e4fa7c49c5d9de89ef9a6689c719d009f6aa6f59bf19c729ecaa5899b0d9d8f9e5fa5f09ad29c3c9effa42c9a8c9cca9d8ba4cf99839c589d1aa47599469c639d8ea32499589c7a9d0ea3db985d9c359db5a24d98039c269d1ba2a1973e9bb19c90a14097959a489cf4a03d97369a0a9c8fa03697e099a89b52a0b1962f99559b08a02296da98139bc99f57959e98e79a659fd4945998999a129f29941d98229a669e0b946a974b99889d659396970199ee9cb7924497a898729c18922e963a98289c0c9294961098bb9b3491fe950b98a69a3b90579393963b9b0080fe9ab19c9297baa1cda54ea79cacfda33aa864a942af05a46aa83fa95faf30a488a88ba9b7af3fa4b2a896a9c7af5aa4c4a8b9a907b07fa4c2a8b5a9f2af71a4b2a8a3a9daaf7ca465a83ca982af54a433a83ba955af4ba429a8fba8e2ae5ba421a8f4a881ae48a465a81aa9faad41a4f2a7c3a820ad40a404a7baa77daa7ca307a7fba7fba78ea25da5a5a618a8e7a246a5e2a6cda712a318a6a6a7f3a7a4a19aa4e1a584a8aca068a218a415a985a053a240a41eaa4aa09aa139a388a9fc9f77a03fa1e1a8079fc19f7aa087a87f9ed49e0b9f67a82f9e939ec79e3ca8c79d4c9e919e31a8899d079ef09e17a8879db69d9a9ef0a73b9d549d379e54a7bd9c309d149e8aa6379c199df09dc3a5039ca09da29e8ca5e59b169e4b9f40a59d9bf09d929fdca4469bbf9d739f89a4d19a649d1c9f3da4269a699d2c9f28a4cd991c9dc89e87a34a99d79c589ee3a20299ca9c3a9e4da2b798769cd79da2a15c98109c539d04a17097fa9ada9c92a0e496689a929c33a05c967a9a9a9ce09f4196419a679c569f2b96259a0c9cdf9efd95b399e19bb09ed0957199ab9b559ebe95ed98069b159efc946098799ae59d6f943c98239a969d0d93ac978599009d4093bf97b1994f9d6492fb96129a5e9d5d937096849884980000f81ab81c3b8dd6a0eba4afa57face4a29ba77ea819aea8a345a80ea9adae91a345a839a90dafbda359a82aa931af2aa4b5a870a96daf40a4bea884a989af4da4bfa882a971af32a47fa845a918af0ba43ea8ffa89fae1ba4e5a7c0a831aef1a368a749a8c0ada7a3dca6eaa757ad67a3a1a6f2a7fcacefa209a636a786ac52a2f4a42ca60eac13a29fa4caa569ab70a1afa3d9a4dbaab5a0b2a12aa34daa19a096a040a1d0a9c29fe69fea9f4ba9259f1b9ecc9df6a8759e759cb89be1a8e19d519b959be6a8809dc699ac99d0a81b9d89996e999ba8db9c039851976fa8b99cfc98ea9841a8979cd599239a4ea8219d6c9c119d59a8829d319e09a028a85d9eaa9f8ca018a7f89dde9fbca022a6719d08a0e5a0c0a5bf9cb49fb6a02ea5499c9c9f84a0dea4939b979e4aa087a4db9ac39d819f0fa4749af59d3f9f54a3289a199ec09fc3a2299a2b9ecc9f06a2b499c39d149f8ba17c994c9dbc9e25a11299f99c6b9ec9a0ab98949c1e9e48a05a98269c919d979f0198fb9b669d5d9f6897b39b0e9df79e5996169ba09c709e3d96619a279cd89d3496619a2c9c7b9d7a96f999089c239d7f96d299da9b019dda959c994d9bd89c1195ff98c89ab09c73949c98e699529c9a93089885990b9c1f93c595e5978e9800006a1d6d1fb69426a15ba5a1a62fac08a306a8e5a894ad1ca33aa805a916ae19a336a80da982ae3ea349a828a9b8ae34a33ea823a9f6ae53a32aa80ca90baf54a310a819a90aaf71a3d4a7c7a8c9ae61a357a7c7a88fae5ba3d1a625a84bae53a34ca692a7e7add6a277a55fa685adcda2fba408a630adada277a46ca5e0ac28a278a37ca485acd7a1f6a226a441ac2da189a170a2c5ab75a01ba09ea0feaaab9f3c9eb79d6eaa5a9e249bf99807aa879d8e949c8fc4a9bf9c581492188ba95d9cd618e01b4ea9799c9116da192ca9b19c7313c614eda82c9da50cf60db4a82a9d75929c8d9aa8bc9c0a958e964da86f9c4598d29a39a84a9c3c9c819de4a7889c159e539f42a7ac9c9f9fada0a3a68a9caf9f02a11da68c9cb49f06a19ca54d9c7e9fdca035a54c9c329f7da0a0a4c89b9c9e47a0f8a3119b569e23a01aa3829a369e11a0bba2039a2b9efc9f18a2bb99059ec39f76a17099b29d739ffda004995c9d139f9ea0c598f59c9e9e52a0a1988d9c699ee19f6698299c979deb9e2898cd9b2a9ddd9db697909bfc9ca99d4b972e9ba59c4b9d8096d99a729c399dec95499a309cec9c7c95c899dd9ba59c3b95a299a09b819cb6942999509b599cd9942b99d39ae59b6794db980e9b329c4195c798169b99980000de1c8a1e380be8a0caa531a7c0abd3a21fa829a940ad3ca385a86ea9b9ad05a37fa86ba90eae0aa3b9a88fa920ae39a3b8a8b1a931aef7a28ba87ba91baeb3a243a827a909aee8a242a825a9e5ad35a357a844a9a0ad5ea347a834a990ad5fa306a804a974add0a2e0a649a834ad29a2a2a5d1a60bad48a12ca4faa4f1acafa029a239a3bbacbf9fea9e969f7daccf9e589a119c40ac1c9e278f8d10e4abb39cc21cf71c60ab3e9b0d1f8420b5aad3999220542147aa8c9962208a21d7a96b99b21fdb20b9a9b899b01e3a209ea9909a6b1c6c1e83a90a9cbf13161877a9ee9cb29a689942a9519d6f9ec19eeea8489d6a9f0ca093a84f9dbb9f92a02aa8269d03a013a19ca7409d8da0cba104a74d9d52a18aa25ca6089d1aa18ca274a5e99c1ba198a2b1a4169d16a183a254a4be9cc3a019a29aa3199c68a0a6a1bba2909b37a072a12ca2ed9aae9f29a1daa16e9a3d9fcfa077a1109a9e9e70a030a1b899dc9dec9f68a059993e9d179fe99fe898079de39e7c9fa698e39cbd9eef9e6898bf9c739ea39e1398499cc99df59d5697d49b5a9d319dd3962d9bd19cad9c6e96a79a729c4f9c3296979a399c169cb5952f9a239c029c5795e399959b539b04959a99549b149bb493eb98de9ade9a7a948e989d9ad29800003b1d2d1e838f38a15ea60da8f0aa4fa3d8a8fba99caceda2bea8bba9c2ac00a3dda80aaa17ad58a3f9a829aa40ad58a305a93aaa5dad3fa304a93aaa5dad5aa3e3a80daa33ad6fa3e5a81faa0bad3ca3c7a8dea9c2ac35a3a9a8e9a997aca0a392a892a93fac22a46ea85fa904ac3fa4a0a7c2a805acb5a313a6f5a760ac5fa25aa5b9a6e8acbca04fa25ba30aade59ddf95ed900bad3f9c801e722116ad6c9849224e23ceacee959b23d8247eacf991ca23b3235aac25940423302402ac74985421cf21f4abfc99d21e6720b4ab429e0b1c142005abb99c408d028fa0aa159d639ae99cb6a93b9d669e61a0d3a8dc9dc7a028a21ea87f9ea5a133a387a78a9e06a2dfa30fa7659ee9a115a480a6d99d77a174a384a5f09c4ea1dfa27ba4d39c60a1d1a2f7a3d99c58a104a3a9a3b59c31a1fba24da3909ceda092a247a22f9c48a087a125a1ab9bde9f15a1b9a0d99a639fc7a06fa0379aca9e53a01ca09999f89dac9f499f1c999e9d819f1f9ffa98979d979f349fe998519d529ff19e9498eb9cf39e949e55988c9c8e9e609e2598399c2d9e009ea997bb9bdb9ddb9de4963a9b5a9d0a9da996e89adf9c949c2f96999ab39c6b9c0596a19a8f9c049c0c96799a4a9c439b5695b299c39b099a4a951e98a199d7990000bb1df01de29b819c63a2daa3caa7a9a1d2a71ca96aaba4a2c1a8daa93facf5a2f1a815aa64ace0a2f7a829aa8eac3fa318a966aaa7ac75a33da97eaacdaca0a349a991aadbac92a345a987aa94acaba327a959aa4caccca30aa966aa08ac00a4dba848aa7cab56a4eca842aa3eab1aa49fa8cba9bcaa2ca37da8c2a97faaf4a159a81da9f6a953a1c9a738a9a1aa6ea27ea7e7a8c5abf0a1e0a586a769ac39a1bca38da4eeac22a1169eada06aad4b9eb49a3e9a6cad859efd998399dbacfc9e749e1f9e26ac38a0bfa03fa27cabdc9ffaa176a353aac89ef3a28fa55aa9eb9f33a45da52da8a69f1ca467a61ea8cf9f51a48ca50ba7cb9fb0a3cda4a6a5a49e4aa39aa4e4a4339edba240a42aa4be9d05a2a9a358a3389da3a142a3cfa20d9d85a151a394a2de9c70a14da34aa2a09c18a1d4a2bfa1339c9aa043a240a1de9b3aa09aa100a1df9b14a045a1b1a0b89bee9f1fa155a0f69a609feda0e79f7e9a0a9f9ba0599fea999a9e54a0dd9e89990c9e1fa0b19e3399ac9de39f8e9eb298499d819f659e8c98ee9c359ff69d5698af9cbd9eb79d4998719c539e5d9d27982f9cd79dee9c2e980e9c8f9dd19c8b97ab9b689dd09c4397519b719dd99cc696089b4d9dde9c1695ae997d9c7d9c4a95dc98099b0c9a0000731c6f1d4894cda010a68aa72ba933a271a8cea9b0ab47a2bca8f5a907ac44a2d6a81caa1dac7aa2eaa845aa42acbfa2f5a857aa4eace0a212a963aa49ace7a2f2a84aaa2bac02a3f9a84eaae4ab00a3dea835aa75abc3a296a813aae5aaf4a2a1a8eea932aaf3a267a87ca97ca989a257a84da9d6a826a340a82aa93aa8bca30ea8eba8cba6aba21ba737a851a585a11aa651a70ba4bf9feda4cfa5fda1a09e90a48ca560a11ca0dfa4eca5bea171a0aca514a709a3a3a1e3a600a820a492a150a7d1a806a51ca31da8eca831a5c2a1a1a646a8d9a4f3a0c2a52fa782a4909db8a3b4a578a3b8a071a406a637a4c39f33a492a59fa309a04fa466a59ea3479f1aa41ca590a3d19e65a3b6a435a3aa9e00a397a4d4a2239e9aa25ba470a2099e47a222a4eca1b19da4a166a35da1709d49a1e6a2d6a01a9df8a05ca28ba0bd9cada018a252a02e9c6ba0c1a129a08a9b2aa068a1fa9ff89ac89f02a1559f8f9a3f9fa8a0f59e019a9e9e49a05c9e8399089ede9ff79d3999959d429f779dff984b9dd49e429db598039d999eee9c8c98df9c3e9ea19c4898879c119e7f9c0f98609cca9d659ce897199c8b9d2d9c8f97ae9b299df79b2097389b199d9d9b0d97bc9a9e9cd59a9897c899a29be6982c96e398089b3f990000ec1b811cdb94a1a0b7a62da89aa8dda15aa860a988aa7ea2c9a8eaa920ab81a2e7a85baa50abcaa20ea96aaa97abdba212a989aab7abf0a222a993aaa5abf9a220a979aa6fabcba2f4a83caae2aab3a2aba8dba934aa78a260a891a97da95fa23da85ba9d2a874a218a8eea82ca8e2a1ada7a9a844a75aa1f6a639a81da6b6a0f0a55da7eda4fc9e7da4a4a52ea3e39da8a2eea34ea1399ceba007a256a04299ec9e09a0c49edb977f9c1b9d5d9d11970a9cc29c209dff96b19cd99d729de59aec9eab9f089e559c0fa119a2969f689d9aa2f1a370a0eb9e30a423a53ca1b89f73a478a5dca1a29f67a47ea50aa2f89edda326a535a2739e5da3f2a423a2729e35a3c9a406a2319ea3a268a4cfa1379e7aa249a49aa1fa9d50a22da469a1a19d00a2f3a352a12d9db2a1a5a313a1e19c6fa12ca3cda08d9c36a1e4a2b2a0539ce8a08ea250a0249ca9a053a20ba0039c64a0f2a1879fba9b24a09aa1039f529bd89f2ba1b99e0e9b7e9feda0579e6b9af79ea5a0499ecd99529e63a00f9e1499a79df49fe79dcf98219d499f869dc498d69cd59e259dac98a69ca09ed79c4c98539c209e709c01983a9cac9d129c4b97de9b339d649be1965a9bed9cc49add960b9b8a9cf09929968a9a489c50997d993d99d59923970000cb1b581c8c94f1a0e1a63fa876a841a1efa7dba866a997a13fa863a9cba9c4a19ba8e8a941aa32a2c5a819aa8baa55a2dea838aa94aa51a2d9a830aa8baa57a2c2a816aa43aa38a298a8dba9b0a908a259a88ea913a9a7a11aa81fa986a839a18aa7aca8d8a7cfa098a612a898a681a0b3a5efa650a5a59ff5a42fa68fa4ab9e54a476a5d9a3af9df2a26ea4a9a2549da1a160a3c0a18b9cd8a090a25fa1689b78a034a229a1159c40a0aba1dda0f29b4aa062a294a1b39c59a06ca1d3a0579eb29f0da164a0a09ca19f2da13aa02b9c519f05a18d9f869bfd9fd0a0809e0a9cbfa0b7a10a9f889ddfa117a357a00d9edba257a45fa10e9e16a3b1a4cda14a9ebca263a46ca1f29d6fa21aa426a1b49df4a1baa316a19d9dbaa189a3eba0769d77a17ba3e2a0379d2ea126a3bfa0e99c12a1e7a278a0d09c09a1a5a243a0d69cdca081a2e59f8c9cafa007a23c9f559c5ea097a1d49e149c1aa05aa1a89e9c9bac9f0ba1339eea9a289fc3a0f79d329a889e8fa0d19daa99199e60a0b29d4b999d9d2fa08d9d1299549d06a0729dbe980d9d909f399d8b98c49c329f1e9d76988e9cae9e929c34986a9c379e589c03983d9cdf9d119c9f970b9ca49dbb9b7897e09b4b9d2d9b7496779b329d829a8296159ae29bb0990080bb9e62a0a89ff21fce24122615ab7f243f29482a89ad372401293c2ae0ad7f2436293e2a13aeab242729362a3fae9e241b29452a5fae95242729422a81ae752437292f2a81ae37240829372aa1ae2b245e282d29bfae9422f1265e282eae7e23e6255626edac3d2427266c26e7ac8b24e825bd2615ac0121c4234c2472a9641a2e1dc91d23a50e112d15b615cc9d91102711a7144499f895529f5da1f2a54dab6ab275b3e1ac0a1caba0a5a3b7a83b2b302bd629aea90a2da12c1e2cc0acab2c312cc42b4aacc92b482b972ae4ab9f29c829312925aa30255f2614264fa7e81fc4227f23d2a4cf1ad31f6b20afa24318291e0c1f70a321178c1ccb1cb6a4f28426985e976fa52814041b971b4ca6f71887204821dfa43e19572193223da35c19ae20162216a2d1183420752154a1e918fe1f1221b7a0b218831fb22078a0ac18451f90203ba07d18c61e4d20f69f6f185c1e1520c09f4318121ef71f909fec17911d5e1f2d9f4e170c1dec1e909e9616af1c331edf9dd715491cc21d4c9da8151c1c521de29c7715bf1b201d6c9c44158c1bfd1c2b9ce6144e1bc61cef9bcd14d91a981c609b3a142d1a341ce79a4714f119aa1b039a1414c5193c1b749903147119fe1ae7980014d519bf1afd9852132119231aba980000d112cc127a9749216d2613289bac47238728a52978aefd23dc28122a02af0424d528e72970af2b24dc28252ae8af1224dd28d12912b0ca23b128e22948b0ec220628e12865b09321af249c2592b04d20a0213223bcb0cd1e3b1f2d1f10b0a51c3d1a761b7bae6c8c1e9b809d3bad4f9ecfa20ca4c0a89d9b7aa05fa1711b7d98b29dc49eda1bb493139c2d9d85185f95b49e0da0b31a239f1ba76fa8ae200da4aaaceaad4a2438a53aac40ad33249ba5cba856a9129592285e276725eaa9162c4d2b1a2a45acfb28932830287cab8d2531261326c9a9201f51214a2115a7c3149319931991a4c690a497b199dba254932d9c049c5da3a194189e7e9fe9a39d95279f7ea027a40c92e59dde9ec5a4040df994879409a5b815d61ae11cbba43117471d831f6ea3f0172d1e0220c6a16818e81e4f2035a13018a61e5120f1a0f917511e182092a07b17331e022059a088170f1edc1f25a00c17e81d8a1fbf9fd016941d291f299f9416291da71ed79ef515c11c171e449e9415441c991dc49d3115e11b021d539de9143c1bbf1ce69cc414ec1a631c889c6c14721a341c349c6314451ae51ba09b3714191ab31b2d9b2814ee19771bb49a92139119341bfc9941133719a01a80998a120419a0190899481255187319259a00808f979d9a3096ee13c91c302007abdf20c0276d2856aff721f427da2802b01122f427ba2830b0dd218127a92855b05a21c3263c286fb0e62018260f28a6b07c2013257626a0b0311ff822a224a8b04f1d4e1f3f2183b02e1b831aa91859b0619e3ea46fa5b6aeaa9e41a405a5389cb49c82a198a25a1a0b9aaba0e3a19a1bd8984aa07ca18e1ba798e2a00ea21b1c329aaaa24ca4db1c079ea0a535a7621e98a099a8b1a92d20e9a025a945aaec1fe4a176a77aa83f1da0a2bea59ba65599ab20660e0e9866a787238a20d41ef4a8281c48193c18b6a8349560936994cfa7ae98da99cd9987a6af964b991998a3a5cb940698a59742a5ef91a1974d9748a5729155986f98fda4428d89960f98caa4a20e03101f14b1a42a141e191e1b5ba4ac165b1d131f03a459176c1e212016a33d17ed1d971f01a22817941d341f1ea196165c1dfb1eada05c16401d971e4da02216061d8f1eda9fd415be1c3c1e769fbe157d1cd61dcb9e73153f1c881d709e3d15011c121dee9d0a158c1bc61c959db114e61a6b1c319d5e143b1a231cbd9c1c14d519aa1b449cbd13b119781b289c8e13a419331b069c981389195d1b1d9c9713b619591b1b9c41137b194c1bde9bcb12fc18c41adf9bda10b0173b19ef9af4103717a91878980000c60c13129a92081af520a822e4ab6d1e9d246b2603b0491ed02421263ab0a01f14265427a1b0951fbe25ec26dfb0fe1e3c25552608b16a1edd239e2512b1a11ca52207242ab13a1a2a211f22f9b0d715af1a1e1cd0b0d19de0a26ea4d8af9ca186a78da896a4029f12a3d1a42b12c69bb8a0d6a1a213349958a08ea19715099abca19ca31b195f9bdfa27ca42c1b099c10a404a5ba1b979dbda4d8a5ed1bcc9ee3a567a7b11c429f24a69fa7361cbe9e85a5b6a6d91b359fefa4e1a59f1931a10da597a588920e9eb1a32ea40da4de9b629e779f0fa7089c879c899dbca7839beb9a189b80a77e9993984298eca63898ac96ba95a8a6489543966e952da6f8921494209210a60f908390988bc1a5678aa109300b55a5361031176419eda43f14dc1b4e1dc3a41d15901cbd1d36a4d414451c741dc7a26015b31c021e14a2a515261d7e1ea1a19015df1c341e41a17515a21ce11dfba02e15551c871d91a0d914091c271d27a07114861bd51c989f3114211b9d1c409ff813ce1a661cbc9eb213341a001c369e0b13c8198e1bb49db9128d19911b2c9d26137d19701bef9c2d13b1199e1b689cc51248190c1be99b9b122a19d61a659b2712ed18771abd9aa21192180f1ade9a9d11ac18ac196e9ac811d318fa19bc990080f590e590638e9817f41fe8205aac8619d8225f244eb03a1a04238d247cb0531982237824c8b057187c224c240ab1511641212b2331b19e13d81f9d2135b1330d1d1df31f54b15293701842191fb113964698479924b12da0dfa421a600afe9a06ba578a66d96269c2da055a26710f497629f3aa1bc0a92982a9f8ba05510ac98eba093a143148f97cca039a25215f2992ca2cea3db16a29c42a454a55c19229d18a588a63d1cd79e01a55ea65b1b669dc8a414a6751b369db7a3aca41b186d9e42a4e7a4fe0714a076a4e3a476a0b4a03da499a460a5d39e2aa190a103a87f9d649e909ebca7f89bb49c189df7a64899099a1999baa6e6975b9691959da6f7943994389228a61991058a6b0b9fa5388d20101c110ea5b9837e143b17c5a4650e8e18311b67a45513a81b0b1d67a3ef14421cb61ddea2d314b41ce41d91a2b214a11cd91d10a2e414501c761d87a192142d1c1a1d2aa15d14a81bf41caaa02814ff1a971c53a00414681a4a1ce29f7713611ac91b509f3e13d119861be29e2d123c19cf1a8c9e18120119c51add9d8911d118811a799d8111bb180e1a0c9d92116218d819b99c7c10f6171419479c02109f163a18c59bf50fe3157117cc9a5e0e48151416af9a480e36150916b39903135f19291b649c0080ee05a908208d0590311c451d58ac0492b91e762170b01093f31eff20a3b05a93121e422107b12e98d41c761f28b1a999fd1afd1d60b15098191bff1d46b1179bc511351958b17b9b159b179939b119a00ea4a0a418b07ea221a8f5a86c9fd79c2ca3caa4600d6c9bbaa09ea36305b19893a030a241107498259f8ea0f511dd95c5a065a13114209642a167a21416c29869a22ea42818c39834a3c2a4ae18309bfba35ea52f186b9b30a498a5e217669cd6a352a5da14859b7aa2fca33712b0994ba235a45c0f319cf1a1d2a3d498fb9f0ea360a460a4ef9ef6a0daa1fda7f39d5ca073a0e7a7129d8f9ed09e55a7779b779c729bf1a6b0991199d297a2a62b98119662922fa68195d990f80b0aa6089330104c115aa558902a120514e0a4e489b4166e18fba4bf09e618491a7ca41910151aa91be9a3bd10411a6f1ccda3df11a41a7b1c57a32c12b51a6c1c34a26c12621a191c9fa1fd11e019f71b02a13712bc199f1b4da0b911a019101bf99f5d116119cc1aac9f9a117519f01a389f48114119b31af99e2311b618601a4a9eaf108b18c419af9d9a10131833191f9d7a104e17f318939ccd0fe2166918329cdc0f24163218719b200fe51584179c9a380e65151317399a310ef015f616a499a90cca127d14559b00803a0a500abc906394901a1c1c7bac669c0d910b128eb0879c02987912bab09c9c9691b41228b1169d4098d39241b1089e319b469977b1eb9d149d639c4bb1d69e1f9d709c5bb1239fda9f9ea152b1f2a07ba408a51fb0baa0b4a47ca5639b8a9bb8a06fa21213909a69a0fda1b404e5999ea014a2bf8a4298c5a004a2ea111c9609a1dfa1430fa195cea04fa20112a2970ba175a2f3119d9519a1c6a2e0143a9893a155a3e7136a95e4a139a47813fd97aea106a49310cc984ea112a33c10ab989ca1bea31013289ca6a109a36095469fc7a2eba311a3db9e38a1e5a1d6a6349ec0a00ea12da7e69cf49e809f27a7af9bf59b569c4da76a9a1a9a3d990ea7fa98b39878979aa6c9968f938791eea526950d90b98a4ea57e921f09cb10f2a46990700f7715a3a4c58c1215b917fca3a703c5177c192da31b09bd188a1ac6a2d00b7f19ea1a64a2280dbf19391bffa1390e3f19591b83a14a0f1019ad1a02a1270fba18971a7da025109b18c7191ea0830f67188719ad9fcf0f7518ad19259f380fec171619e09e130fad17f818899ed90e6417cf18539e730e80164818159e400e341618187c9def0cd5141617029db50c7a14e215229c980c481470151f9b670b24141d15b29a500acf14eb15cd99df0ed01628183d9e00802e858c894591af9af794ee98b6ac019eb49abb98c1b03c9fee9d9b9dbbb019a0a69fdd9d36b148a09ca0b69f54b1e1a06aa1e2a086b1cba082a1c7a15cb10ca149a2e2a176b15ba02ba297a269b1a6a18ea4c8a538b00aa077a454a5f5983d9c59a17da3b817a899969f23a1a70e36985b9fe9a02f102b9848a071a17812d29769a00fa116111a943a9fb1a07411d592b99e7fa0000f7d954aa09ca1fb11309553a15ea39f13289808a1d8a20d129898bea02ca27810869740a09ca11011419727a0a7a1f5124f99b9a02ea29b93d59e37a247a347a3c09e87a0bda060a7c69d7f9e559e1ca87c9d259e669e27a8d29c729d9e9de8a7e69b759b1e9ceea6f299839896986fa6da9789907a8b04a63f95a10940116aa59e930a102e1411a563917312a615cba423902614bf1643a4078edf148e17a4a3158c76151118cea2088301165c182ca2d602aa16c518d2a1c4020f17831860a111086017c11811a1040830171a19cca07e0ae916e5187da0260a30178f1812a0e50b92162f18799f250b0a16a617a69ec50a8f150617f09d8f0ab6149316669d8f0a871449162a9d4e0abc137415cf9ce3077e12af147a9cf0082a12cf131a9c6b0804128513a59bb7063312a513849bb20981146814c99b760943105d1057970080ff83498ad68d399a0598dd9877ac9b9f1fa014a06db085a06ba103a18eb0ffa0c9a153a10ab135a19ba24ea23ab1eca179a371a363b1caa18da364a33fb1ffa182a32aa458b1b9a167a458a55fb163a3dea626a814b01d9f6ba36ca46198f698e89e08a1c31274985a9e3ea08d039796269e30a0ef0b1a98119ee29f770b8794859d3c9e64022b95529ed79fdb0aaf95089fbfa0150fa094f49f0aa153110294639f03a1670fe1966ca0f4a1fb117d971ba0c0a1b9117e95c59ff3a02c118594859e39a01c0ef396eb9da79e01921e9cf99e0aa020a1829d489f1aa028a6bb9de09ee99e88a7869dd09d6c9deca7aa9cb59cbe9c9ba7999b1d9c149cffa66c9a549adc9acba60b996f987e984da61298b2968a96aaa59396b3943594ffa44a956292cb90bea47c940b8fd5893ca4889364888989dea3589245886b0989a378902a0e8a121ca34b8db712551494a2338b021457161fa215887214a21530a18382d6140d16b6a05b829814d4158aa041826d14a8154ca0290244147c152ba00482ce126a14ed9fe3014b121214209fc601d4116a13529ea5016d11e812e39d940139107311869da684910c2310649db484700cfc0a4f9d9c8429099b04f79c4b8748834604579c4181270d620ce69a450403126412939c00804e06ab016b8db69ca39df39d17ac3da068a104a1e7af7fa1fca2c0a35cb02aa22ca4a3a4f7b05fa29ea433a52db1c4a206a559a552b140a2afa4dca426b172a2a2a4e2a42db114a118a49ba4efb07fa1dca48da5c7af599ebea38fa4ee98e99955a016a2d115569848a0d7a1100acb99c8a03ea2c210799769a05aa19612b1970ba0c6a01012f193349e19a0c6112695f19d259fdd0fdb90419e5fa0b113f495bc9e8da0640ba99507a093a1e90f36974f9e4da002836d91779da29eac09bd92779e1ba0b70cbc98c2a030a125939f9c14a15da2a8a2499e34a131a299a6319eeaa0a2a1a1a7459dc69e439f08a8ad9cd09d159e9aa78c9cc09d639d71a7709b019d179d2aa7e899739b299c8ba621993d9af19a13a60e985699eb9889a5b5978197b39730a5c7968896aa964ea42c969993c994f3a33c954c91f98f8fa3d293fe8d0589fba29a928887c508a1a2bc901f07ce0e2aa2878fee0c3e0e87a1f38e720ca90de5a01d8d450c8b10b7a0b58b2d0c70107ea0ac8bc20e551047a05d8b8b0e27101aa0258b560bbe0f749fb08ada0a570cc89e378a3f04130c5e9eca8900042e05e99d6b89c983f3047d9d7589b683d5840f9d9987a483bf84d29cd98a5a899c84659cec8a478c3591449c700515143c15da9b00803a8dfa8ff08c0f9e97a01fa109ac76a176a4eaa441b02da2bea473a565b09ca207a5b8a5cfb07ca227a5dea5fbb0e1a28da504a61cb1fca236a5f8a5f7b0fea34fa6dba610b1b4a338a72da8f7b00da446a875a90cb0259f70a45ba5949c1d9ada9f23a14e8b2e981e9fc2a0e90c3a97289fa1a0e8117497599f34a0ff109396b59f61a0fa1057940a9d1c9e020eb78c9e9b349d2f0c5691189c7d9d060b99915d9d629f540c8992979db49f030a2b909c9ebca03a08cb92489dae9e37828d94309da79e880ad095319df29d5894379cd49ddd9e64a2d19c5f9ee59d3ea76d9d919d029f3aa85d9ddd9d9b9e5da88f9c109dbd9d1da8579cc49cc89c62a7f69a4f9c5d9cbda6e4998c9b779b88a656992c9a1c9a0da66d9851989c9815a51a9803971c97caa49797609678962da45b96ed94d492c5a3bf954f91a69290a37a94e68d9a8f35a35a93868d428fe1a2f792458de78e8ba2bd918f869b8efda1a0912186eb8d5da181907e85f78684a01d901185058d57a0b18edb84de8c35a06b8eab84ba8c16a0618ed68a968cbe9f678ea28a718c7f9f278e4c8d238ca39eca8deb8c9c8bc99d098e918cdb8d0d9d2c8d458c8b8da49c2f8d238c808f5a9cfe8d7e8f358fda9b0589e10b500ac29beb8cc9020197419f00804d089081da8d879cb59d5b9d0eab67a1cba4fea4e0af82a237a50ea64ab0eca2b8a5a3a693b000a31fa6bda6beb070a380a64ca7dbb073a333a63da7b8b0c0a35ea6f5a6cbb0a8a234a621a7b2b0dda042a532a6d4af229bd3a00aa1f6a5269a28a057a1e28c26984a9e85a0ef035298659ee79f62894f951b9caa9ccb8c3195659d689eb7023a93719ddc9e4b0cf594aa9e3ea0d10f2195189eeb9f7310db914a9e76a0960e74938b9d43a02708f692ce9d4da02688ed91999e9da03590c593879cdd9dc494a593f4995c9bf29d4299579bb39bb8a4739b059d449dd4a7eb9c8d9dc29d35a8ab9cf89c989d16a8189c5e9c6a9cdfa7429c719c729ceea7249b199ca09c24a7469a9c9b279c69a68b99169a939bbda5d8988f993e9a26a58a986999179aeda427983e99d79987a48597f8988b994ca450970f982099f2a398964897b59823a30796ca96ae97b8a2a195a095539745a2289560951497eca190942195ba9680a1599403941f95d4a051938d93c69465a0a2921593869410a06e91ac924b94b59ffc903b9208940e9f3890aa918d939b9ec88f40913494109e768f2491f692ee9d299011920c94ae9d5d8fe79190948d9d268fd8918494589d128eb6917694479d448d8c8b4090e89b3e8da08785907299008065076101dc8dba9d31a1fca16baae2a126a601a75faff5a25aa687a717b050a3f0a6c6a75cb069a355a721a879b003a46da770a8a6b0aaa332a744a887b01ca46ca732a8b6b0aea396a773a860b08ca3c8a7c1a873b02ca218a7a5a861ae609e8aa293a3fd9aaf98d39e75a0f50a82931b9e77a0898ea9951b9e559f798b9296bd9f8da0d3083294389fbfa01b0c8b940e9e4da0fe0c2e90919df39ec506fe8f779dd29f8b87e693ad9d17a02b8e1993fd9d47a0cd911e94af9dbe9fc7941997389e2ba0829af598869d979fdda2b59a169c5d9d5ba63b9c8d9c309d71a7fd9cee9ca59d32a8299dfa9c479e13a80a9dd69d249ed3a7b59c899dba9d05a7529c429d249e02a7b49b519d559e85a62f9ba89c0a9e19a6769a159c449dc8a5ec99ff9a969c84a55e99869a3a9cfba4ad9878991b9b89a46f9823998e9a19a40898c898159a71a33e97ea98a299bfa2bd969198ce9903a2f5953d98639974a139954298939908a19194fb975699d1a0e893a7971f9982a05f938096c49832a0f492f995e897709f0592fc949596ab9edf91c4941c96319ec691a294e295f69d56911b942f95909d7b916d9498953a9de590ae94e495b39cc090fc93aa951d9c249126941295e09bba8c9290df98559e208e62885690a09a0080548f7591a690af9e1ba235a37aaad3a20aa73ea83eafa1a338a758a8f7afffa3c8a79ca827b0f7a30da8a4a83ab02da439a8eca85db0fca3eba7baa837b039a411a8a9a85db09ca3c6a762a83ab068a3e0a624a808b019a26ea6eda708af79a0eda50ea7bbac939d13a228a3669aaa98359e48a05385db96339e7d9f74903e98309fdf9f35916595309fa9a0b5830995379fd2a0a6831e94429e1fa00d032f93859d4b9f138d6992069d689f1990b393a49dd19f36942c967a9e0ca1eb98b0922699909ab4a1e2973590a58b27a6d69bd69a5b9934a8939cbb9cc29c3ea8329de39d3b9e63a84a9d3d9e9f9e23a81e9df69d4f9ebda7d49ca19ddf9d32a7b79c4d9d939dd5a6569ce09c3d9d4da66a9b1b9cd09caca5899abd9b089d6aa5cc993b9ba49ce5a45099609b4d9c71a4d998ec9a019c0ca48a988c9a8e9ba3a3fe973d9a349b20a35197c699519b83a2e7969699499bdea1e4951499d69a62a17595a3984d9a13a1f2943798b59948a0f294209889990da0a69413988899e39f8f94d0972d99309f87946a97c0986c9e269419972d98ef9d0794ca96f797a79d1b93ec959797639d51922d965697359d8d9176950897b69cd990ff94f196609c48912f958996559c62915a95d297b59c0992a19477968b9c0080108294896a929f9d50a186a292aad1a2cca78fa826af86a3d6a7b6a890afdba346a816a9e1af16a496a84da905b055a4a7a8a1a922b02aa460a840a906b078a46da854a92cb00ba452a826a9fbafc7a3c7a786a8b0af12a3e1a63ca8d0ae9fa161a614a867ae1a9f52a571a60aac709c26a170a2a6974d99879d2aa00a11dd98469e64a0708a6c95dd9c429e34903594079b269c7d903c92f59b4d9dee90b392159b0f9d208f6d93209cde9d10904195c39c3c9e85984f94a19a3c9c69a1fd958293e89699a6e59ad89a5f9a17a8ff9cbd9ce09d37a88a9dbe9dde9d35a8bd9db39e219f4da8f99cd49d9c9e0fa8209dbb9e699f57a7b29c419ef09ee0a6c39cde9d1d9f70a66b9c9e9da99e25a6639b0b9d069e8ea56d9bec9c6c9e8aa5279a6a9ca29dcfa4069a7e9c639d69a48499559c1a9d17a43299639c2d9d99a39898299c409d14a34a98229cf49c88a2f297629be19c10a26f97cb9a7f9c97a1f396599a6b9c14a13a97769a3a9cdba03f97d699ff9b7ca00c977399a09b2ca01b961899559b03a04595cf98ae9aeb9fcd943d98569a269f41940b98e5997c9efd93c4972199ac9d1c936497d798359dc09201977f98b39ccb916a965498659c3f92dc963b98099c28917e955d97ba9a0b90a5905b944e9a00801693a19583911c9e80a3f0a426aa92a26aa788a873ae6fa3eca7b9a8c8ae6aa321a8a4a831af46a33ba8e8a822afc3a348a8dea861afa9a307a800a91eaf42a45aa848a95eafaba32ba8faa815afb7a3cfa79ea801af0ea3b2a62da868ae9aa267a6d6a7f3adc0a015a5f0a560ad5999509c9c9c2aac278dac094614d3a50697be9d1ca017966d956b9d909fc38daf92a29c4a9e5f91c78c86972799d69426101718461a279c9118ee1ff820e3a14219b8203622eea59605131d7c1e70a8239c5195ce98efa83b9e2f9df19defa84c9ed69def9deea8359e439e269fb9a8d69d7c9ee69e7aa8699d339e269f28a8359d3b9e239ef7a7e49ccc9d419e69a79b9c729d669ed8a62e9cd49dd79e31a6169ba19da39e83a52c9b339e609f52a5ee9aa69d219fdea4ea9a6f9dff9e70a42f9a119dad9e27a4bc991e9dc79e02a48e992b9dd19e5fa35899f29c639ec2a2fe98d39ceb9d20a29498769cbf9d6ea10698b49bf09cc4a0f596e49ab79c59a06796b39a7c9c09a02f968d9a5a9ca49f1f96a89a669c359feb95339a149ccd9ef395c099839b609ebd958e994b9b319e8a951299a89aed9ddf948c98079aa49d38941c98bf99619d5b9360973499da9cca93149721990f9df4904d954d9afe9e7d933e969f98339b00005e1cb81d5b9804a009a403a51eacbea22ea75aa865ad32a3d3a7a9a81dae0fa3f8a789a886ae44a327a8c5a8a8ae9fa33da8d9a8c4aeefa34ea805a9e0ae2ea470a82ba9bcae29a43aa8eea89caea8a3c1a7b7a84cae79a376a78da8fdadfaa2e9a62ea8b8ad3ea21aa616a773ad24a1eea438a60cadd39ed5a16ea340accd997e996099f5aa8b05141d5c1ebba9991752219e220aa9ab1828213223b5a86916a6205322fca8458cfc1cba1fffa88698a6120e1948a9549c2599279932a9139e609ca59c0ba91d9e499c1f9e2da9519ea59cab9e38a97d9de89cc19d09a9959d159dae9ea7a8089d5c9de19e4da8b99d309f0ba03ba8b49db79f0da1dda78e9d19a032a1e8a61d9d49a0f0a0dfa5b59c1ea0baa083a5529cbd9fafa022a5319cb59f02a1dca4769bfb9ea6a06ca4bf9a5e9e01a0c2a3479a2c9eb89f09a3ca99c29d369f6fa2a4998d9db99edda144991b9d799e86a11b99f09c439e38a1a098a39cf29dd7a032982a9cac9d56a09097a49b379df89f5697609b119d8e9fba960b9be29c189f3796b09a6e9c849e1f965d9a279cf19d1f962a9a089c9c9d74961f9ad69b4d9da496379af99b319dee95d8997d9b369d5c953299f79ae89cd094d298559ab79c5c933d980d9a6f9cf291e2956597b2980000381eff1f709805a172a506a7d8ab97a29da786a838ad36a343a8f6a8afad2ca33ea8f7a8f7ad39a345a80ba920ae2fa334a800a94dae32a323a83aa97caecca3aea8d5a96aae19a4b8a8b5a94bae10a48da8a0a911aed2a307a81fa9d2ad23a448a785a871ad3fa305a670a723adb0a225a59aa6f3ace2a14ea4a6a5bdac61a101a380a469aca0a0b3a1d7a219ac6a9f19a0c7a0adab679e8f9ea09e1fabd89d139d6b9ecbaa159d449c979c85aa389d039b4b9b21aae09c88997499cba9f59c1e983b9977a9089d2a9a739a54a9779deb9a6f9c13a93e9e3d9cd69ccca8139ef39ba09caaa8739d8e9c0d9e49a8739d599e17a117a84b9d44a033a2b8a70c9d8ba0f3a148a7ea9caca0c1a185a6c59c58a04da1c9a5289cf09feaa05ea5409c52a037a1e2a4929c69a092a18da41f9c549fbaa0efa3119b739e0ca0fda2439a219eb49f83a2f9991d9eed9f1da2cf99129ed39f94a16e99f39d869ffea00699639d299fc1a0ba98e29cad9e6fa0c4988d9c579e50a089984d9ce99d449f4f980a9c679d4a9e0a98a29bff9c039e87975f9bad9ca99ddd960e9b869c239d5296339a0d9cc39cda95f499d99b9c9ca4958f99a89b809c14955999599b359c5f951199f69ac09b3f940198539af89ce9956e98de9aa59b0000611e4920cd9396a027a545a671abbea2d0a7cea8b8ac15a36ca82ba932ade5a265a824a97aad37a39aa892a99aad62a3b8a89aa9a2adb7a3c4a8cfa9a8ada9a3b7a8b6a980ad9da38ba887a971ad44a344a854a92fad30a33ca834a91dad01a306a8faa802adbaa2cea7d5a8ceac7ca20fa75aa8acacfda1eba52fa76bac08a1eba45fa65fac87a04aa382a43fac3ca007a23aa32bac8ca0dba06aa1f2abcc9f139e70a0e2ab9e9fe49dbc9f56abe49eb49d669fe9aa0b9e709d249e66aaeb9d379dc79d05aabd9d739d739dada9df9c9a9c3b9d5da93c9d709e989f14a97d9d00a01aa19aa8c49d57a1f2a13ea8d69d4da176a205a8bf9d5ca177a229a70c9ea4a1d4a2c4a6a69ddda1fca23da63a9dbca14ba3a8a5179d6aa105a3d2a4609d5ea117a388a4229d38a1c2a226a4889cb2a0f8a136a3ac9b3ea05da139a2eb9ae89f1ba1c9a17e9a7a9fe0a0a8a12f9aeb9e93a053a1e699449e35a027a1a799919d999f8ca02799119dfb9e19a0d498f39cd59ed29f7598bd9ca09e659f1098809cf49daa9e7a97129c699dbb9d01979b9b0c9d339ddc96559bb79cdb9c8a96c99a5f9c819c7096a19a3c9c3c9cd895349a279c279c0a95d6999e9bde9bfa94bb99939bd39b71940699419b7d9c0b95bc98bd9a1b9c0000081e5b1f0e97bba0e5a5aba78eaab1a24da83da93aac9aa276a854a963acc5a27ea882a9a5acfaa2b2a8b7a9c8ac36a3dda8d2a9deacffa2caa8e0a9f8ac11a3dba8b4a9cfac82a3eda823aacface3a2bea8c5a987ac7ca38da8c3a985acd1a260a8b2a964ac54a36da886a928acc5a208a80fa9deab4ca276a7b7a8dcab54a28ea625a8a4ab36a1c9a5c4a7edabeea0cca4d1a580ab8ea0fda3efa4b7ab019f02a2baa377ab499fa6a1c0a236abb39effa0d7a1ccaaa39ed5a0c1a1ccaa5c9e46a024a2c9aa389ee7a098a274aae29d48a167a427aac29d11a18da46ba9bd9e7ea162a37ea8ac9e7da22ba4e4a7179fafa3e3a40fa73b9fbda3dba475a6eb9e62a3bfa4f3a5719e16a385a450a5df9d72a20da4aca4229db0a133a316a4d59c73a123a3f0a3b69c5aa1f0a2bca39d9c11a1f8a270a3489c77a014a238a22f9c13a056a136a1f29be79f06a1caa03e9b509fcda092a04b9abc9e42a027a09199009ea39f729f3799aa9d489f189f12997f9d519f519f0699559d059f359fb798f59cdf9e3d9f7a98969c8a9e6f9f37983e9c2d9e869e8897a89bf09d1a9e0c974b9b6e9d6e9d9496039bfd9cd89c0596c29ac59ca19cc5957c9a899c249c8b95759a3e9c389bae942499079b8d9a51951499239baf9a00001e1df11eb09c8f9e2ea44ba58ba952a1eba7fca8c7ab23a266a855a903aca4a27ba893a913acc1a288a88fa92eacc8a2b2a8a5a93fac06a3bea8c8a953ac16a3b0a8c9a94dac71a3c8a80baa38ac29a3e1a800aaf3ab36a3dda82daab5abc4a295a8eea908ab10a4b9a81aaaeaaa4aa363a86ea91daab9a354a8aaa916aa22a333a85ba99aa921a41aa816a929a96ca40ea8d2a8e5a86ca326a837a937a9bea1aba7b5a82fa9fba1c3a64ea8fba82aa1faa53ba799a830a1a0a597a72da906a1c5a531a7f6a8e1a039a524a7baa88ea02ba570a6f8a798a0d9a4e8a5b6a632a061a410a5e2a5519f11a47fa505a6eb9e27a464a598a5f39e00a434a504a5089e12a3f9a4cba4019e8fa23ba4fda37e9dc4a16aa3fba2179d5ba1dda24fa2e89c43a1d7a26ba28c9c08a1b5a26ea25e9cd7a07da2f4a1479ca3a01aa259a1469c7ba0c7a10ca1369c59a07fa18da0c69b24a043a15ba0c19a8c9fdfa004a0359ae99e83a0669fb399809e3da0eb9e6e99019e07a0bb9e0d999a9db19f949e9b98399d429f5d9e6d98f79cbe9e109e2998979c779ea69d2e98719c2d9e659d0c98599cd19d109df197199caa9dee9c3597b09b7e9de89cdf960a9b439dd49c1a96be9af19cf19c3a954099709b1c9cd1945a98ff993b9a0000a41cdb1d7697a6a0aea5b2a62ea998a126a832a97fab06a288a8b2a9c4ab5ba2a7a8e1a90fac62a29ca8c5a90cac54a2c1a8f3a916ac2aa2a6a8d7a9eeab29a28fa8c1a9cfab6fa284a8d3a979ab3aa281a898a91eab8aa265a894a9caaa62a25aa87ca924aa86a237a85fa99ba951a213a828a962a975a2afa7e3a808a938a21ba7a0a88ea87aa2f3a65fa81ea8e9a2fca660a868a7e9a211a758a809a72fa2a8a619a84ca6dca189a605a8fda5a9a169a6cea7dea5f8a1dca6cba7f7a527a1fea567a7bfa5f7a083a5d8a672a5eba03da5bba63ca549a0c3a4f1a5a7a4d59f7fa4c4a55ba443a0a2a4d2a538a402a070a4b1a531a4c59f5ca48da52ca4539f30a466a536a4bb9e9ba3e2a428a4739ef6a29ca45ca3779d3ba2ffa369a2569dcaa157a3b9a1e49c23a1a6a209a1b09ce1a03aa2afa0639ca5a0f8a194a03e9c76a0c2a164a0d69b34a07ca128a0339bf69f2ea101a0da9a6e9fe4a05c9f719ae99e84a0f19edd99829e2aa05c9e5399f19dae9ffe9d2999869d1e9fad9dbe98409db49e789da398089d649e309d6198de9c359ee49c2298909cda9db99cea97689cb69d799cac973c9c949d5f9c5897b89b339d0b9c0b97449bfe9cb69bde96eb9a899cf39a8696e799ca9b089a329635997f9b129a0000851cdc1c809539a198a639a8c8a855a100a809a94eaaf8a17ea882a9b9aa13a278a8cca9f3aa27a298a8e5a944ab29a28ea8efa950ab32a295a8dfa920ab61a285a8c0a9e4aa6da27ba8c7a9a5aa6aa26aa899a945aa29a246a862a9c8a906a213a81ca91ca9f2a1b6a7c6a8a3a8c7a186a79ba857a876a146a763a8c7a744a118a75fa80da7d1a090a6e9a7f9a5d0a000a63fa70aa59aa06ca562a62fa4e29ff7a416a6eca3d99f9fa48da5fca246a079a434a5baa2cd9fdfa4fba554a31aa0e9a40ea654a3ea9fdba401a635a32ba059a448a5d4a2739f59a46ba5c4a23f9f24a424a5c8a2e59e0ca405a59fa21c9f04a4f8a453a2929e31a39da4fea1f69dcca26ba4eaa1e99da2a248a4c7a1d09d62a22da475a1a69d2fa211a49fa1769dfba1e0a388a1079da8a174a36aa1b39c4ca115a31da17b9c16a1d6a205a1509ccea090a2caa01e9c89a03da286a0ef9b42a0e4a191a0d89be89f8fa114a0679ba09f33a15f9ff89a489ff2a0f49e479ae79e81a0989e8d992d9e28a0099ed498739d9e9fd09d9998009dde9e7a9d7998c29ca39e4b9d6e989e9c479efa9c34984c9cf49d969cb697189c7b9d319cf496979b1b9d919bc796329bcb9c0b9bff96d99a979c4d9aee96929a6d9c2a9a2098dd995e9b99990000521cbd1c0d9602a1d5a668a8b1a829a157a776a846a95da112a8faa882a98ca139a864a9dfa9cfa152a884a917aaaea154a890a90daaaea153a88da9f4a9d2a157a874a9c6a9cca143a86ba96ba9d7a12aa84ba911a9f1a119a82aa9cba89ba1c4a7e3a853a83ba128a76fa898a7d4a041a6bca74aa697a0dca50da79ca552a0c2a5f7a643a52da054a569a6a8a4c69f0aa50ca63fa4e79e9ca4d5a503a4b89e2ca433a501a3729e7ba38ea418a2479ed7a255a4aca13c9e6da26ca3f8a05e9e8ea285a3eba05c9e11a33aa452a1a59ecea3aba4b6a14d9f36a4f3a4f8a1e39e1ea40ca516a2c99eb5a3e0a4e1a1469e52a3c1a4e6a1df9de7a290a4bfa1fe9daba23aa47ca1c49d3ea2e7a316a16b9dcfa184a312a1499da8a157a328a12d9d6da143a31aa1ff9c35a102a3e3a00e9d19a1cba2d2a0279d02a1b7a289a0099de0a06fa232a0819c8fa0fea1d19f349c38a069a1ec9ec59be99f2ca1bd9e2d9b5a9fdda0a39e939adb9eb6a0419e199a789e85a01d9e7e99fd9d59a02a9e1899a09d26a0009ee598579dde9fa49da2981e9d659f699d6b98d29cf59e339d5f98ba9cb79ee19c3f98799c3e9ea29cdd973a9cd79d4d9c6f97069c8e9d0f9c42978d9b329d0c9b4c96f99a029da49a6d97f299b29b29990080bda001a2038f73208e24e82592aa05248e28a92944ad2324b428e4298eadd023e128bb29b3ad4e24c828d92911ae8523b1285a2914ae12248f288e2916ae7a236e282729caad0e2347281229b3ad6d22dd27702879ad18214f26f62657ad2421a524192533ad6a1ffb227922c2ad3c207b220824b1abec185e1adf1a1aa8fb85538acd0b47a626885d8de78d3ea07800fe828d07f4980080fa8a8d913a9c53a4e0ac2fae28ab27acb8b378b42aaab4a0e5a003a09aa40f29ce289628e7a82b2a9e291f298ba91b288b27012791a8d123f723102467a6221e19212221c2a58a1ad31f1f200ca584177017a819a3a4a1855996e09432a63f18191da51c86a6291af6206f2268a5f517e9205c2383a447186f206d2233a360198c20d1213da2891957209b21bda1bc18f91f1621f6a0b418bc1ff920bda05e18591fa92070a05918f71e6f2037a03a18621e4b2015a02a18001e1520f59f1218c91dcf1f699f9517681d311f029fec16df1cae1e559e2e16671c051eb29d85150d1c6f1d239d6f15e01b321dc59c7515b11b371d859c2815721b1a1d499ca414021bdd1cdc9bab14a31a9f1c6b9b4e141b1a231c009b2614ac199c1ba49a04132e198e1aaa998713fe186b1a28992b13ee19641bba996c12a21796189698008076933b9491954e213a26872757ac4522c627bc2800ae64234f2839295aae95222828e6289caea3235728772946af6d221428c42814afbc2200281f2965afef2160275a284faf3e214e26362778afa9201325e6255fafd51e5e221023d1aeca1aba18f81b27ae219836a425a5fbac199e72a6dfa7caa8fb9d2ea57ca6d390d09cc7a3d8a4f51c479af0a008a2731a169ab0a210a407196f9f94a7b3a8cf8cfaa473addeaefa9f1da72eaf96b09b1b13a5afabc3ac202317a428a723a8929d1f238b1f051a45a69c213d1e881ab7a50417ba947295c9a50095479cef9cdfa3ea97839e4aa015a4dd972aa02aa15aa46d9759a0a0a1b0a4239785a0e2a1ada58604eb9aa09b8ba695109f892f9174a5b6165e1baf1c03a55f18fb1d941f27a4c118801e4120fea283186a1e1f20b1a16418711e02201ea1e717301ed61fe2a02817df1d681f80a0bc16911de11e2ea06816651dd21e05a08916571ddd1edc9f4e16481dcb1e5e9f6b16061d561ee39ec015831c9d1d4e9e5d150a1c601ddf9dd1148b1bd01c4a9d7e14f31a9b1c0f9d6614f81a781cc39c6e14a41a5c1c819c6014801a261c269c3a14611a141c9a9b3514fa19f51b6b9bbc12a6194d1bc99ab812f918731aff997d132118bf18dc995d1136177618d5992a979a973c96d88a3618c418e31aa9a2351f08250a26d0ad7f220928f1287eaf9121482752288aafea2130276e28f7afa6202f26772712b067209525692738b0212034257f2645b01920b424b3256db0b21e6d237e2423b0a11af1201520a8afe610229c039d70ae609ecba49ca5f7a9129d51a3a9a43b9f8c9ae2a0b1a2e9055d9b6aa247a4cf17139c4da363a42917de9cf0a430a66a145b9f80a7ada8401129a227aa8bab489323a36cab93ace20defa3f4a946ab5093c9a2daa7bfa85a98069d68a49aa456a33d9c38a328a405a4889d93a2e5a39ea43c9cfca02ea11da57a9b27a090a077a57c98339e3d9d72a5dd951c9bbc9b5aa5959123995c99a9a589048893a69110a68b12e614d21888a56f15bb1aa51c19a5cc15e71ba21daea4d716f81c971ef4a3cc16641d221feaa2b216401da91e13a25216f51c381efda03516cd1c421e72a0ea15d01c1e1e22a01616b11c2c1e07a0c415961cd21d349f5a15261c691db29e1c15011c201d2b9eeb148e1bd31cce9da914061b7a1c939da5149a1a461c2c9db314f819e61bfe9c2814c4198d1b599c93135f19351b4f9ce6120d19cf1aec9b41133119fa1a339c8a1374190c1b3e9c86124519b71a129c7a121c192e1a0d9c2511f9150317fe98730c9c1169122794ea8211094c846e9816932f908f94de9cf01c3622812492ad87202a265a27dcafea1fc425e8261db0c11fd025ec2698b00a1dd724c9247fb0321ef3235125b3b06f1a2622c722b4b0c71c842216241bb08f184a207c203fb03e186019e51d09b0ab9e31a543a62bac569e50a3aaa455a06d9d5fa220a456991b9d78a3dea4b890309c11a389a436072b9c8ba2dfa35686b09c79a478a51808609e1aa6a7a73d0926a07aa7aba8e309a7a030a82ba9550a37a138a825a96c8a55a1c8a7bea8df90cba1a2a693a7d598a3a054a51aa68ea2889f67a354a454a4c79ddba03aa148a5e59a9c9d1b9d7fa5ba98179bc89a99a5f396e0981b99faa5cd94d8968196dda58d92b1968e9643a6f7895b89c60a73a54a10d9161f1945a53e15411cba1d2fa53e161c1d481f11a5ae152a1de81e87a4db14241c2e1d5ea28814c91b021db7a1f6147b1c831d93a1fe14831cd51d46a14115491c901d08a1bd14081c441d8aa081148c1be41c37a01514131b941cb39f1414b51a5d1c559fa813171a211cc49edc12c719661bd79d9c123c190e1b909d58120d19211b159d6d121f19fa1ad39c6c1230191a1b6c9c0712c818de1ab69b0a12ba186b1af79a72119c182e1aba9aef1048188c19719bd61171183519ab99b40e00164817ee9a769b60951d95928236963997dd96f89cbd183721b1230daea31b8323152529b0591a8c23cc2448b0c1199f2260249db0bd18a621822395b08317162131229fb0090c801ef71fd2b0210c2c1c241e49b0408c021a6e188cb0c09c41a22da4f2aebc9c38a39da46ba5119d0ea206a4e99bfe9cc0a0eaa25996079ca6a032a2b793b29a43a15aa29c91979b62a1d5a2658e849cc8a22ca47a8ca59c39a46ba5818d829d0fa598a61d8e059f66a505a76091c09ed9a543a7821164a01fa5fba5d98747a082a563a6bc9317a0f0a4bfa55c9f339f5fa31ea4cba29d9ef8a1f6a2d1a4779db3a033a177a5039c889eac9efea5f598259bd89ac7a6d696a9974295e7a60494ab93b58b90a65b8f6d094f1471a5f1834212a01546a56a099d16ea18c5a42010ee18a21b68a41413481b921c54a3b1140c1c801dc4a2d5144b1cc41dbaa2dc14581cd51d55a2be14411c741da7a17514321c4d1d3ea16214361bd51ca9a010149e1a821c3fa0e1134e1a401ccf9fc213fe19ab1b649fb3125c194c1bdb9e1e122119891a739e92119e182b1ac69d57117118f719479d57111e18e4190f9df51006187219a29c62105517bc18609cb90f80163518019ca50dfe1467164d9b4f0d5514f714bd9aea0c25151916f19886125919aa1a309b8f8189008b80cb036e84e10c2b10e59ced89eb1bdc1e5dae720cc41f06227fb0b40b541f33217cb0f191431dc11f9bb0dd95821c521ddfb0a995601c4d1ddab073971a1a2f1df9b0f99ad390a99167b0ef9bfe9ce69c5ab0ca9fa3a4e0a5d2ab609a56a1e2a26c9b2d9ce39f24a23598539c2d9f11a1f496f09b2f9e20a044915b9a79a061a10a8a149c0aa135a264045e9c98a25ca4aa05a29b90a310a5ca0c169c6aa3e9a41286e29ab2a27ea4aa05159c56a2f6a3870bd19cd0a23da4178c8d9ec5a3aca4df956c9dbfa05aa19d9dda9da4a05da145a20e9ebda01ea12ba5999dfea0faa089a6849ce19e189f8ba6ff9abb9c5f9c23a7fb98af982f95efa6bf960b94028cb4a69f940f8aac11f7a592910f090f1420a57f8e08142515a4a4fe8369160d19e7a4c809cc183d1a8ba4060e4b19971bd6a3b6102a1a641c91a30912181a191c25a2a5111b1a3c1cf1a15f11af19df1b86a1ba119b19611bf0a06a119919941b62a015113119e71afd9f3511eb18a11aab9f6e11b518681a6a9f19118518291af49ef6109618f719649e90102d18bf19aa9d2f101217d918159d5e0f4a1655188e9ceb0e7515a6172d9c600e3a153e17ea9b310d141575161a9bc70c8614a615c09a200dc4142015cb9863041209600a0d9c8e849280a8803607468af20ca811f39c69992b9804101eae0199e110521b99b0589a96904d1881b0469b05979d9195b0079d8b9aac98fdb0739d969cfc9b11b12b9d5c9cae9b42b1709e249d119e5cb0e19ba19ec99deaafd39d8da1c4a36fa8d592279d09a0d396369ba99f17a27191759c02a091a10e95109c159fdda01e0ca599479ff5a052035d99f99e0aa16103169a44a086a1a0038c99c4a026a214841c9a40a119a3b78a869ad3a03da2dc033c9948a114a3520a6b9ce8a19fa3c204439c30a2a1a3c690879c189ed19e4b9c329c29a0e5a01ba2119d74a032a1b1a4fe9c40a0b2a05da52b9c429fac9fc1a5ef9a6b9cba9c96a650995a987f986ea7709814988996f1a6fa9592921094d7a51c94db8f6a0aa9a54d91df08bb132ba55e90300f9e139ea45889bd13af17f2a36103a41674194ca3f5082518651ac6a2d70bf318d71a78a2150d3119281b16a23c0e2f193e1b91a15a0f0a191d1b17a13410bf18a41aa3a04410c2181b1a0ea06d105618d6198b9fa60f11188d19fc9eef0f24184d19ac9ea30f01188619819e5b0f2a17ff184a9e160e40167118019ec10d6f15df17969daf0c34144a16059d6b0cdf13dd15669cb90988136714a49b500b6a134315649bcc0d2b157b15079ba70f7c158f0ce4a0da01e70002818809ae928c8f1490969ccf9a399ca6993fae569e5e9c329d9db0739d289d1f9b84b0039e719e4c9e9db02ca04aa01aa114b123a0f1a001a221b1f29f7aa12fa15bb10e9feea03aa161b09e9d25a08ea0a2afe09b52a0e5a157a56f90919bbd9e41943a99189c759f49904f9a9a9d27a0af8e019a669de69fb402a4996b9e09a0b48267981b9f34a1400353995ea0eba1a9032b994ca0d7a1ae83a798c19f17a1038ce198519e24a0b002b89829a095a1320c539b44a1bca2eb0ca49ac5a0eba1118d1d99359d7d9d4b9aa59b649f14a043a1469cf29f34a0d9a47d9b619c6c9ca0a5db9b7a9cdf9c32a6f59bd89cb49c5da7f49a439b369cbea727995a99e498d5a61998cd94139114a68b95c9894d1104a6d392ce0fae1553a5419135127715bca42990de11b41654a4f08d63136e17afa39c8b32149016a3a23e88af141a17f1a1c48276150018aba1b202eb15441835a1f4075a168c18d9a0030806170119d3a0a30ae616e218b5a03e0a7316951834a0b50bde152c18a79fb00a4d158417b59e380ae414dd16f79d210aae147b167a9d080a06145016569dc209c11392150f9d46097812b514a39cd80816126414339c070619117512099c700635119712fc9b0f0b5115fd155a9c6108bd1034112199fe8a7b82ae842609b6939d93c092509b129db79ed59c78adaf9faf9fa29f5cb0bb9e13a04fa03fb0749faaa0ffa065b0baa05da167a2d3b0c9a008a294a2f5b0e9a063a1a7a21db142a002a140a14fb02f9fb9a14fa1d9af769c11a06ca2aca5ba8d9994b5990591a2988d99819de38a3399a99cfa9e7802a099529c099e6706d597759d929fa60287988b9d41a01a88e8976f9e62a0ca8c4098979e43a01d88dd97fa9eb5a06c8b4897429f06a1e508d396c09f47a13b03d79aaa9fa4a0fc820698599d549e6292ec96e1996e996e99a698b09b159c08a04c9a659ca79c05a4209c649c559c3ea5929caf9c8a9c6ea6799c759ca69ce9a6c39a3f9a1c9a67a6fd989a98ac97cfa58e981398739664a62e98fa96ce96e5a52096d194409186a546954b92c790d4a4cd93e38ed20952a4759248887209eaa301921688330964a33390c207820ff6a2e78f7b0df21178a2d58cea11bc1302a2bf87ec12641516a1598784120515bca03b827713a31564a02a823913a9144aa00f82f6124a1505a0ee8163110b13bb9fd48115110f14499fbc81680f6e13809eac81f10eb111169e9201940e7111ab9d7b846f09e20d839d5a846c03c50a4a9dd08841835184ec9c8a897d88f98c4a9c51868b0ac908159a918dcf920c948c9ad5898d80428521080b94c693a795b99ba39eaaa010a15dad37a1eda2c5a285b0d0a007a3dea362b008a1b6a35ba498b012a256a4c7a4dab0eba13fa441a5f0b0c0a165a41ca5feb0c1a021a3e7a3ddaf8f9ef79fbb9f79affc976a9a529b67a6728af096a09a7c8d74972097e89b1588eb98ea98099c4688f496d099999c3a8569979698ee99a58891969a9aea9c99880297819ca79ed08c4197d29d56a0c50a13985e9d15a05f8c9295869db39ff4091c950a9e15a074820599c69d5c9f8582d2956e9c4d9d1297119474950393f19d5198469b5f9cf4a2289c829e17a05da59d9c7aa0c0a0baa5169cf99cd59d89a6569b959bb69bc6a7539c439c309c38a80d9aef9aad9b3ba7da98d9999b9956a5ac98e199559af7a52f981e997c99a5a5819730988d9839a559961c965d9633a4c995a295dd9593a32c9599946c9278a37f94ea90708f0da38d928b8db688b3a24b9126878e0855a26a8fa706410ecca1c18e720ca810f2a0468dba058c10d5a0068d290c530d7ea04d8b66055a1068a0068b1e05f30c12a0e68a200b8a0f429f538a6504f70e889e8a8b1c844805069e198bd4891585a39dbd8a8f89608b4d9dd68a838c508b419dff8b7f89f08d1f9d3f8b8b8ce58d159d9b8c7389fc8fd89b07986e906991af98078b7f8434873407fe95c7968e96e89be29f86a2cea269ad07a256a4d6a480b0f0a047a4a4a45cb07ca14ea4dda457b053a2cea454a5aab044a2aba469a5a4b0a7a12ba47fa4beb003a136a3e1a3d7af829e41a223a0c2af0b9d80a0b9a2baa90a8b5598349b4493cd968795059ad4860c989798359c148551981099799b1487a4951a9ac09b41878396e898949b1c847595189ba49dba857397309ce29dbb889396059c3e9d0a8cd3969b9c639efe8bd9927e9b269d4d91ec8dcc90549088955b83b21315165c99df8cbb0c83131e9c4b94a2942294afa14b988b98e19796a40d9a549952995da5419a569ae799c1a61a9b4c9b2e9c71a7229bff9b159ce8a6a5994f9b8a9beea58f99e09adb9a50a57999ec9aec9a0fa63998ea988a9836a54298fa97d796cca4ae96f495b694fda3f295a594759282a35495fe929e8f61a33594bf90299250a30893538d1c8fe3a2ec91ca86db8ea4a2e0905f8661883aa2af90f285d48752a135906c85da86a8a0178f738b7a8633a0ac8e1f8bb48c11a05f8ece8a9c8cc79f3c8ea98a858cd19f428e528d518c779f7f8f408fb88e249fa68eac8e378e239ef88e01901b905a9dfc8d9e8fad8fbb9c9a8e748fc0908d9c8790199059916a9b7489210bac097f9a328cdd8f4d93739a0e89508091829f04b4942a967996499cf99f50a374a30bad34a2b0a4b3a562b0b3a1c4a4faa51ab0eda1b1a552a61cb097a31ca664a770b0a5a31ea67fa7a4b0caa37ba6aba7a9b022a225a572a506b08ba0f0a21fa4f3af07940813ea1aa2ac958a6a923e95b19e6d954294599864903398bd97019b8c0122977a99829c7a887a97ed99069ce6879097f398b69a8286f695c19ae99c3388e6952c9c769e17893295379c2f9ea98c9592279b329d4e8d46910397be98d88eb68c76905a917e93fd003e133c142098b20831158517f79d49921286f81064a33398c796e195dca4749a079a0099fda6469b749b289c31a8d99ba49b539c25a8979b079c9d9caaa72d9a429b1d9b99a5cc99439b369b25a5c599419b3b9bb0a5b098bc999899b5a4aa98409a589a9ea45c98a399989955a4fa976799229a31a4a597e9989999a8a3a6960298249908a3089693977398e6a2be9567976798d4a215954196399843a20e951395c996ada1a6949c940996eea07d936b94ad9587a0b4922b946c9539a0e791f493e895f99fca905d93c6946f9fd98f8d91a093d89eb28f00924493da9e5d8f06920193219e328fec920a94229e328fe0928e94d89dac8eb1926194799dd58ea9920295869d6d8b54832584789c188bee029883679a2a874c004e81eb031a96fe9777985e9c60a070a412a592ac2ba334a6a4a70bb004a2c9a5f5a6b1af27a271a65ea7ccafc9a322a72aa82fb001a426a773a857b0dca352a768a883b068a384a643a718b0e9a2c6a5e4a62eb0989c9f9c01a082ae018c5a0ec314eea61a90a29127941398009310912497158ced941b97239a708faa94d899f19b0f8f63930c950598488edd8f119518977f8e108e6b90f1903b92d10e11138915d5956d120919db1a3a988513781bca1c7e996f14101c7f1dce9b4e11701a371cf79cf80b7818311976a0c792dd1123122ea56d97f28e379501a67c99ed966b994da6679b1e9a559c72a60f9d069d349e62a7fd9c7c9d499e3aa6a99c959d199eeea5349c429dca9ecba5409cb79d489f2ba69f9a8e9cea9d88a5eb99f09b3a9d7da50c99d79a119ccaa4de985e9a8d9b5ca454986999ef9a01a4c09780997b9a54a3a09735990d9ab3a2d996dd98299af5a1f295f598c19951a177958698d399d5a0be942e9887997aa01f94029873996aa09493e396179905a0a4926b963398659fe0916b955296679eaa912795eb95ff9d9f918e942795af9df9906894fe945c9d2091ab944f95f69c7090a5945e95699c40907094c295129c5b904694c195a19b6f8fa5922395449a058fa88d0b8f9998ea8b0d817b8337026f973899c4995f9cd8a056a5f4a586ac87a3c9a62ea8c5af82a2bda61ca86fafada249a757a83faf2fa41ea8dda8dbaf2ea408a804a90db0ada3d5a798a817b0d0a284a62ea7c1aff2a179a518a6c6af33a07fa175a345ae68949592a00d54ac67106417dc190fa5251031145a17369cba10f1123115e19824117a1420161d98131124148415a59699122d18121bbd985115701a9a1cdd984f16a71c271f199b1416c81cc81e269c0316e11e24216d9d3118951fa620539d9d171d200f229ca0a915071fd51f5aa3128ca71d8b1f90a570954a160619aea6369989930b9580a7019bb69b829c5ca7e09ce19d639fdda79b9c239eac9f79a7a29cfa9dfb9e90a76b9bec9c639d44a6fc9a849ba99c1ea5819a759b4c9c10a5af99e49a729ce2a4e398f69a289c62a49498a49a299ce8a35f982d9acf9b6ba3dd97e299839bfca21f97dc99f49a78a257964b99f29afba1de953d99959a6ca19e958598229af1a0bb941598099a6ca03d94ed97d39911a04794ef97f1990ca01b9472977b99479fb9931b97a398459e6a93ca961698f79dcf929e96d997bb9d7d924496e596529de3911b964c97099d3c91d595f896ac9c8290bd9555976a9cbb906c95d796729cd990ae95f9970e9c259282925194f9985b89f7804d82f502919508991e99d69ce2a0b6a587a6c8ac39a40da8a6a872af41a3eea7bea830af88a33aa80da9fdae84a4b4a893a994af48a47ba896a9c0afeea359a837a998af94a36fa753a8e6ae95a2aca6d4a7a0aea7a112a590a615ae479e77a21da4acad4b95b999ef994bab87138f1aad1cd8a54e16ba1c581e7fa02218a51d891f599e9f18611ecb20439e92186f1f06213f9e64189a1e9c20de9d5518861e8f20ca9d6d17921e7520259e4016de1e9d203f9e9a183c204721cda0cd17bf1ec21ff8a35d11d21db81ff8a4a896901479177da6af994b937a8b2fa71c9da4995c9900a7449ca09c7f9c9ba78a9ddb9e0aa0e1a7359d019f69a05ea7019d739e17a080a7809cce9d849e76a6269ba69c979d8ba5639cb79ced9daca5b09a4c9c6e9dd3a4229a489c2f9d84a47e99359cff9c2ea42799439c0a9d8fa39f98009c0c9df6a20c98ce9bfc9c7ba2ab97e29a8d9cc9a12397e99aa79cf9a1dc967d9a5f9c42a11697489a339cf0a01397159af39b75a0dc96ba99e89b4fa0ff9552992d9bda9f1195e598b79a599f86945498ed99859eff9319989a99299e12935f97ef989b9dac927697b0982f9d559226976798de9cb891a69647989a9c0f92d6966498549c0991ba945396b89be9906092d894939a468f458e228d870bc698be9b079c1e9d0ea122a676a651ad9ea340a8d8a8e8aec6a2eca796a89bae63a322a817a98dae19a464a8f5a8efae2aa43ca88ca906aff3a33ca837a909afffa3e2a7c5a8abae0da314a760a8d9ae50a270a541a704ae1ba1bca437a65dadb89ddda1baa376ac40056815d51679ab4e19e720cb222ea8311868207421daa44a1aeb20fd221ea3dd1a97216a232ba2881a932160239ba1ca1a2d223a2482a25719b521662314a26019b82022227aa2e019462146223ba51d154e204c2163a6f390661b271e1fa78698830a130cb3a73d9c099c769c09a85f9c849cb79d2fa8d99c099e899f79a77e9c829d569e6aa7959c989de09eb3a6b49cba9d4d9f7da7e19b929dcb9ebca69a9a649ddb9d26a5b59b489e539f7ea5f79a999d059fe3a45b9a3b9da09e4aa4e799209daf9e09a49999e79c749ea2a34d99079daf9e62a32f99f39c679e9ea2bb98c89cff9dcea15d98549c979d0ea10998ee9b0f9d77a0db96199b5c9cd89f5896b19a679c679fd095cb9a519c429fa1959d9a5a9cd69e83951e9a079c6d9e7c95a599219b0d9e83959899f59abe9d55952899109a849d9c948d98a199209d8393a197f798c49c7492e596d698829cec9182968c985a9c93902594f696869b2b91d3917893ff990000a51c741e4b99ff9fa8a42fa5deabb5a2e5a744a84aadf6a2d4a79da8c0adf7a2dca7dfa824aeb3a336a847a949ae75a321a808a94eae07a454a879a96eae23a471a88fa987aec2a328a86ba963ae7ea3d8a725a906aee6a29ca633a8cbad60a200a6e1a75daddaa0b7a494a5ecac319e7aa133a373acbc9a1f92bf13a8aaf10f341c351d0da94918de1f1d2191a7c818a420d621faa681198021882381a6fb19c92161237ea635196721b52248a654187d200c22cba67710dc1dac1f1aa7db8fe91a7f1c0ea81098301197126ea8459eca95f99886a8d69c489bf09ce7a81b9fec9a0a9c69a8a69d399d159e5ca7939d119fa8a13ea875a020a195a297a75d9ec5a048a25fa74a9dd99f4fa0c3a5779c0ca089a0ffa5329c349f5da03fa5559b049f7aa085a4d79aa29e2fa0d1a3959a2e9e0ea044a32d9ae29d8e9fe3a295996e9ddb9e1ea24b990f9d659e95a10a99e89c449e78a1c098b79c0b9e27a15698629cd59ddca0fe97029c569d57a04997599b199dfc9ff196119bf39c909fe595bc9aed9c879fbc95539a4f9c819ea995199a009ce29d11964d9a179ca29d40964d9afc9b599d6296629a129c679df0952f9aae9b4a9d6a9594996b9b1c9d99940e99aa9af79c0294c49611996b9c3d92f8952b99499b0000e51d2820049a9ca066a546a685abc0a20ba8c0a82ead7da332a81aa97badd8a389a87ba9d2ad2ca4bea8e9a911ae9ea38fa88da9f5adb2a377a8aaa934ae65a3a7a8e6a930ae13a4caa8bfa9e7ad3ea4aea876a9adad74a370a835a97aad67a4fca7bda8efac5ea2a9a612a8c0aceaa0dea445a64eac7f9f3ea206a460abc29c24a071a1cdaa6298e0968f9357aa1097620bb38cc4a97292de17371a43a9cb937419ea19f1a832929d17ee19f4a8df950f117617d4a80099eb95538cc3a80f9b3c9b0d9ca0a8b29cb89d299e85a8869d21a0b0a063a8c79d78a0eda05ca8aa9d15a0daa132a82a9d91a0e1a1b1a7cc9d5ca041a1c3a7989d2da11aa27ba79d9d83a078a164a7269dc2a0dba1f2a6879c54a07fa147a6609c34a02ba17fa5cc9cb3a016a2f3a4ed9c0aa170a281a4ac9c0da062a192a3569b759e27a0afa2a69a079ecc9f7fa2e699f19db99f16a2de99159eec9fb9a17599029ed69f3ea16b99939d6f9fbfa0f398d49ca69e46a0f4987e9c919e6ea06f98349c5b9e63a05a98fb9b839d989e2098c59b169d169ed197399ba99ccd9d4d97e69a5b9c949d6b96039ae29bc69c1696099aa29b7c9ccf9590995e9b339cde95d699729b609c81954699299bea9b1e94279711996f9b75931e979f997c9c0000271ea5208e9600a0eea4b8a5ecaa01a2d1a780a894aca0a217a8d6a8ddacf1a255a829a914ad91a39aa8a6a949ade3a25ca86da92dad00a4aaa80faa4cada6a30aa916aa1cad01a4d1a8e7a90cadeda387a88ea9c6ac61a365a865a995ac2ca34ca85da970acc4a2c8a7aba82aacd5a1b6a61fa8e9ab61a001a53da714acfe9f87a4c5a5a6ab029feea1aaa3f1aae99ddda0b8a2efaa209c729f7ea121ab819cf99e89a082aaa59bae9c739d0daa319c919dc29dcca9809c5f9d569c3da9c29c489f67a05aa9cc9cc5a0b1a159a9af9dffa0b8a1b5a8f59d3ca1f9a17aa8599d1ea12da221a8c59daba179a23da75a9e98a230a45ea7639e09a34da4f1a61c9fe9a2a3a4eda6df9d8ea206a473a6a99dafa1eda25ca5f39c1ca1eea2d1a4f49cfca013a3d9a4a89cdba064a201a4549c52a0a6a1f8a2289bf89f1aa10da29a9a7c9fd5a07aa16f9a249faaa04aa14d9aad9e8da028a1009a399e2ca0f8a0f7994b9d519f61a04b99209df49e48a0a798d49cda9e39a01798909c629e4e9f4297399c9f9d759ee896009c049da29df5969e9bcb9c3c9de896389b7f9ce99cfb96b89a509cb69cc996aa9a2e9c4f9cdd95419a1e9c5f9c1a95d599cf9b279c5895d499fc9b809c8992d897679d45a0619440981c9a179c0000ab17e41a7a94969ff5a40da69ea8b4a25ca824a92facbea28aa857a956ac99a260a86aa97fac80a3daa811aa9dace1a2ada8a9a99dac7ea3aea8fea9caac80a3aba8c4a9c6ac24a3a1a829aacaac2da23ba8fca9a1ac79a371a872a938acc1a233a83da921acdba200a822a9e8abffa191a7e4a874abc7a25da7a0a800abc5a115a759a8e2aa65a223a64fa717aa89a14ea69fa703aa2ea083a5c9a617aaf19f78a45fa590a94ba0afa335a450a9729ea7a26ea469a96e9fa8a396a4f6a8f19f0ca412a5b3a806a01ca400a580a868a088a457a50da87ea0d0a4daa5a9a710a08ba4bda51aa77f9f8fa4aaa5a3a6fc9f2da4fba41ca63b9f5ba452a5f0a5c09e8aa3a0a49ea5629ee8a261a406a59f9d5ba224a463a4e59c7fa150a3eea3209d6ba144a3e4a3c79c58a107a3a9a3a09cfda000a379a3d59c55a089a1eda1ca9ccf9f1ea13da1869cdc9f08a127a1bd9b739fc6a0c6a0919af99e59a059a09299129ec19f8f9f3599dc9d519f519f16999f9d4f9f4f9f0a994d9dfd9e5d9fc398ee9cd79ed79e7098989c909eec9e2f98449c379e909e9c97cc9bcb9d779ed9965b9b659db59d6896229bfc9c6b9df295d09ab19cb19cec95b49a8c9c6b9c77959d9a6e9c289b049436988d99349ae592989686985e9900006719771ba497ac9ce3a21aa48ca757a1f1a620a8b0aa8aa231a81ba9f2ab61a266a899a918acc2a29aa8b0a912ac84a289a898a912ac53a250a85fa9e8aba0a234a857a9feabeba255a87ea9c8ab91a263a882a989abb1a280a8eaa98aab4ca39ba893a955ab1da484a8b1a9e4aa90a327a805a9f7a9eaa2eaa7d8a8bfa9bea2cba6eca7b1a80ba203a723a897a89fa15ca66fa75aa815a129a682a730a88ba071a5c0a608a81ba1e4a553a727a884a0b2a58da6f7a707a1baa5b8a6e8a72ea073a5b6a666a715a0f9a46aa6bca6ea9f7ea4a4a509a65b9f85a4b3a5b3a5869f56a487a570a5c19f17a44ea521a53a9f03a424a553a5fa9eeca319a503a52e9e5ba2aaa361a3019ed2a1f4a26da2b89dfea146a3fca2279d78a125a395a2eb9c42a1cda261a2d99cfca059a236a2969cb9a059a214a2459c9aa02ba268a1609ca4a005a206a1319c89a0c7a1b5a0ac9b38a059a156a0fa9aa69fe8a010a0359acb9e68a03a9f8299479e1ea0e89e3199de9dc79fae9ed2987c9d539f719e65981b9de89e399e2498c09c7a9ed29df197919c3d9e739dfb97769c129e4d9de1976d9cc29d299daa972e9c939dda9cbd96b89b579dea9c5796079b0c9dc69ca4958d9ae59cc39c319550997c9bbd9b15950899af9aeb9a00005b18eb19c997339d95a3c2a443a763a13ca78aa86eaabea260a865a9a0ab5ea273a8aca90eacc2a28aa804aa31ac6ca287a8d2a9eeab40a26ba899a982ab99a289a87ea9a7ab53a220a85ca921ab38a243a86ba92eab62a24ca850a912ab29a216a849a966aae2a1e9a7fca808aac5a1afa7e5a867a9d6a134a78ba806a934a2eea671a8b4a861a286a64da85ea8b8a230a610a83fa828a35ca643a8eba7a5a23aa613a8ada7e6a1f0a5c6a7fda665a13fa5c0a6dda5bca01ba52fa65fa51aa12ea56fa6ffa4b9a006a50ca696a4a4a0fea4eaa5b0a460a0cea4e1a5a9a438a0c6a4c9a57ba448a0bda4e3a5a6a41aa06ea48ba595a4ef9f57a496a58ca4579fdfa336a53aa4da9dfda2a2a49ca3d89d6fa250a40fa3e29c9da16aa3dea1e29c60a1baa265a1649cf1a014a2b7a0329cafa0bea184a0fd9b86a0a2a14ba0a59b3aa07fa147a0459b15a064a116a0ca9abf9f0ca1ce9f799a3b9fb6a0709f2f9af09e79a0df9e98995c9e19a06f9e1399cb9d839f079eec98609dfd9e939dac98409d9e9e8d9d5b98089d5a9e4e9d2698bc9c059e019dd197929cd09db19ca0975b9ca49d8d9c7e97359c7c9d4b9c3997db9b2c9d279ce696849bf69c159c6c960f9b809c999b3d957799319b559a4a95f7977799e99a0000681b011de09512a054a64ea7e1a871a1a5a791a801aa88a1b1a7b1a81eaabda116a80ca97aaa6aa271a87ca9e4aaaea286a89ca9e0aa8fa294a8c8a9fbaa69a28ca8b9a9a4aa98a25aa86ca94faa92a25fa86da90faa64a21ca803a988a9d5a1c2a7b6a822a999a150a773a8c7a87ba10ba747a888a876a104a73ea83ea890a1bda619a8b9a718a157a698a70aa7afa07ea5c9a649a6b7a045a54ca63aa5e1a095a5efa667a5cba0e8a59ba7b1a549a063a5aea7eda5a0a066a5bfa607a5c1a01ba54ba6c1a431a007a54ca686a435a0b9a4cca533a4b59f87a49da5d2a31b9f25a424a51fa3fb9e8ca38da4ada2839e96a3a3a4aaa2db9e37a365a469a27e9e8ba22fa44aa2ea9d6fa26fa490a2b69d7aa24fa440a2919d16a2e7a3b8a1739de3a1d7a3aca1ea9c5aa129a34ba1b49c21a1e0a22ca1719cf5a0a1a214a13e9cb0a095a2eca00f9c6da048a2aba0139c30a0eda198a0fd9bd89f97a150a0279b959f56a182a0b19a399fdfa06d9f149a9e9e60a0a19e2499f29ded9fed9d77983d9d4b9f919d3598d89cad9e7a9d2598a29c569e519d02987b9c2f9e309d5b97329cdd9da69cf096de9b529d329c8f96869bfa9c9d9b7e96499bde9c719bc7960f9bd49cc59a74962d9a2d9c209aa796849a9d9c309a0000781a2d1cca94829f08a633a74aa843a173a773a839a957a1eca7e4a8b6a9d6a146a85ca93faaffa164a899a96aaad5a140a850a919aacea128a827a9d7a9b1a113a803a9aea907a2f5a7c4a856a9e8a1f3a7e9a80ea9eca1d8a7d6a8e8a8c4a10ea8f0a8a7a8c6a185a790a81ca816a10fa746a855a7bda090a6eea7b2a670a049a681a71fa69ea0dfa5e6a65ba57ba0caa5bfa6e9a41aa0bea515a7fea40ca072a580a68ea43aa0c7a483a5c9a3269fe7a4f2a5bea3fa9e7ba459a502a3bd9e2da4fda495a2919fd0a36fa411a2259f33a4e6a49ba21a9f67a48fa513a3259f4ba46ca5c0a2379f0ca4fea465a2bd9e57a385a40ca2c99dc2a25fa4daa1fa9d61a2dca378a1889d28a2d5a33ea1649d8ba105a32aa1f99c51a1dca204a1139d30a1d0a209a1fc9ceca083a2fda0299defa0bca218a1749defa0b6a231a1219dd0a06fa288a0a29c7da0f6a1fc9f499c2ca07aa1459f889bd59f1fa1dc9e1e9b429fe6a0af9e799afb9ebaa0739efd99929e7ba0679e5b99079e3aa0289e04999f9d02a0cb9d9a982e9d9f9f9f9d8798089d119f489d7998f49cd99e439d8d98c19c719ec79c4598899c039e8f9c7f973e9cc09d5c9c8a970c9c959d3b9c0097909b219d7e9baa95689a7b9cdb9ad5951599c49a02996c8fba9fefa0619635175e1e5120c7a8a620f62652272cac192315283c2989acd122e5279b28bdace221b3260a28c0ac39224a273d2804adb122b8279728dfacfb21dc264928ebac6621a6261e28c1acdd207a26ad2766ac4f2006263c276aac86201d259d2613acf21d6323e02439ab3b1bfe1f922070a94794f29ff3a0f3a96ba1e6a838aa38a91a9fd1a577a75f0eb997d59dd19ef219fe8acf935894ec95d398aaa0f9a1e3a50cac0eb360b444ad8ca8ecaf19b10fa9fc238223d9204da4ea249324202320a3a6208121c92040a1ad19e795af93159e62a0a4a8f7a9e8a1bc9c4ea57ca711a8bc1a231dad1e07a8b41a931e672009a63116ec1d3e1f41a4e5170f205f2148a3d618f21f932117a3541945206c2151a2551973207c2103a2c01988208721c8a1f0181320242106a18d18e61f0c21d2a05b188c1f9d209da09218421f752075a08018e91e3f205aa02e18721e18204da06117df1d8b1f2aa0db165c1df21e4f9f7316fb1c471e479e04169a1cc31d9c9da615661c901d449de5153c1c3e1df49cbc15121c291d9c9c9715081c101d679c4215d01bde1c389c0915771bcd1c099cea14e91a781c6d9bd2146d1a0e1ca89a2b149f190d1be5997714561a2a1bcd99021354181819b9985213a219b71aa89be883b79c7c9e21954511dd19df1d6aa96c212d271f28d3ac7122f927d428d9ad3021b526ef278fad5221ea26542804aea72096254a27d0adc922e227002989ae1c21de26ee2702ae47206b25ca2624ae4d215026e527fbadf01fd024022637adaa1ec423b324e2ac45182a0d3b8e80ac5298aba266a4afaa099d5ca5d2a608a8919e62a6f7a777a1749e22a677a7009b739df6a558a7229c659d3ca6eba7c5a12da25faa03ac24a8b7a566ae1cb0c5a97ca52ead7daea9a342a28ba88aa9559c658e1fa3bfa467a1309a7ba3c1a4b4a1709d5ca5c7a67fa59f9c35a444a523a3b69b66a3d9a47da448984ba119a2eba5c78c039a879b41a6ac893094129563a58916eb1cff1dfba4fb14ed1a2e1c38a40c18fe1d7a1f68a36718821e6020e0a234193920592103a35419d41ff920faa1c918f71ea22074a16018fa1e6f2061a1e317b21e572008a14a189b1e64209da0cf17af1e4b2031a005174e1db41ead9f2816d41c3a1e579fd215c51cd01d3f9fd115901cae1db29e0016661c9b1d189e8215f21b161db69d7315361c3d1d649d3115021c371d379d5415e81b0e1d0e9d3e15491ba21c579cc514b61a271ce59a2214a719ab1b8d9aba132d198d1a489a0e149319491b559aab10c2163c18b2984f12c918f619549b9684a19d859ddc956a95bc970c9193a6c51a03241022d5acdc207826e927a6ae45207a267a27daae7a208825b726d1ae0c20c625452624af022040256b2698af8b1fd024fc25d1ae061e4724972589ae7c1d6622c022b7ae1d1c1622df2149ae9b12901a331a3bad5898db9e7da0dbab669972a213a306a7379ce8a1fba260a13e9d24a461a5219ea69c63a453a5709d779d66a5b9a6069f019f97a615a8c5a185a01fa955aa8aa4b7a11caa86ab10a4f1a20daa9bab91a303a2a4a8b2a933a041a0aba562a68fa2ca9e22a461a5d6a4359d33a3bba443a5989b67a018a199a3f19a69a037a122a4f998379f1fa0e6a4a895c29c579fb7a56093ac99f19ae3a4b2123b190b199ba41a17ff1c3d1e3fa54216741c941d86a41f17001d4e1e79a4d716a71dfb1e6da4ac17eb1d0f1fdaa2a6160d1d641e14a2d515b81cc71d0aa1ab15c91ca81d45a0b215cc1cf71dfc9f8515bc1cde1d759f63154b1c941dad9e5e154a1c041d609e09158d1b9b1c399e0f15641bb51c259e5015e51bbd1c2f9eaa15501b711c009efd150a1b321c149d9e14c419c81a809c71121e193b1a4f9c0f137319b71a829b1d132519871acc9a16135c19a01aa09a5c12f7187b1a0f9b4f124119141b0d9a810f83154e17289abc100518f218439a28920689cd0aa4a66b9a1a9e2398d490ef98869751998ca9a51eab25732706af171ea0240a27bdaef01e6624652468af9f197f22fc213baf671d6623d62439afa3198021b822f3ace518571a401b36a4f60e37143c15d3acf3149b1b9a1c0aae1f98fb9e08a1b4ace39b6ea1ada210a8a19caaa10fa32ba1bf9b09a2aca3fa9ebe9cd5a22ca40f9ee19bc6a23ea4cd9d089d4fa459a54e9e439e6ea5c7a68e9fba9fe6a63fa844a05ca011a8e4a86da025a122a8e8a801a02ca1c0a7bea82d9f9ea0eda515a7b9a0029f63a362a461a3cb9deba1dfa268a2c99c8aa069a166a4719b4f9f12a075a4e7993b9e0d9fa8a47d97b69b2e9c6ca52c943997b79576a5ac03d70f0e11bea5b311e918c01812a5761369190b1b92a44116631def1ec2a400185f1e1b2096a43118581f53201da4e115561db21e7ea2ad15201d531e00a2a5152a1de01db0a1aa14081c0c1d1ba1ea14e91b521dcfa05c14c11bd21c72a07f14b11bf71c35a0f614491c451dad9fbc14bc1bfc1c169f6f14df1bf91cd39e5714171b7e1ce99da813971a041c549df5134e1abe1bb79cd0126b19d41a389ce111b518531a199ba1111319ec19739a321159187119f9995f11b118f1197f9ad8125219991a539c64117518b519319ccf0fce17b5182a9c008000800183b18000800080008000800c89640c320d55a552184521f32138ae9719e921962322af951a0822c122beafbc195e21cc21beaf97179b20952162af6e14bd1e661f26adaa13c317bd18e6a45609aa14b41523ad099a2aa06ca004aeb09b52a16ea254a90a9c34a187a203a57c98199b7c9c349f4899ed9e57a02e9dd69acca0e6a13e9c849a66a1d4a2619c8b9a55a2f5a35b9c0895a0a1d9a3669d8498b59c149e799d17999d9b279cb49d7d9cd6a271a49d9fdd9e18a51ca6019e079fbaa48aa573a0579f83a23ea3f3a1bd9b60a0dfa0e8a34d9c7d9c789d07a45b9aaf9d09a03ea4f999fe9d259e9ca4fa98639c1c9dfca42995c397b29803a54991a888849069a5f68825139c10b7a5ff08cd1673187ea41b12e01a481c11a4cd13381ce61c03a47b14141cdd1cdaa26f15fa1c221e57a22a15c31cc21daba219150f1db81da1a26514351c331d11a27114631c5a1da9a13614151cb01cbea0fc13391a901b06a0d313161abc1bd49f0914341a641b1e9ff312b9190c1b729eb0125b19631a249e6b128f19581ace9d44126a19891a659d30124219501a119da811dc18c719719c7a101218c818849b0810041754182a9aae0e68155b17f6999c101916f916229ae00db3150c17709ba412391a751b2b9e00000000160138000080008000800080738e06868187e4a57709561e7620fdae560fc21e1520e5acc911e018811811a7e589011a061b3cad23949e15aa1942af63920018e5184aadb18d460a810ad3a3269ab19ce79c19ade29cf0a1fba2c3acfc9be9a1f7a2eba4d398eb9dfc9f58a0ae9563987199739e58989d9d619f899c4597589fe0a03f9ac9990fa0e5a0d199a99756a0f2a1fa99a796be9eaba0459910943299dc9a27965084908b9f8f2f8f260062009580f188ba8cf68d588f3f8d969a26a0d0a0ad9c2e9d88a278a396a17a9c4da0efa058a2d99a089dd89de9a33f9b509e509f97a44299bf9c7b9ec9a51a99449b6c9c48a58096d3987e98f7a44a95f98ed489c8a4429086141c1499a5308c0a172e1846a59783c51700194ba4120db61a751b4ea4bc11a01b211c5aa31411f41a621c07a38f10641b6a1c14a33011d31a021cb4a27212641a111c7ba10d11f7191b1bfca073115219cf1ac7a03612bf1a181c91a06112381a6f1be99fc011bf19fd1a709f3f1132196e1a379f6a10dd18d019ba9e6810a4188f191d9e6e108e189e19059edb108a180b19469da40f30171b18519c670d62167617e19b230dc415ae16149b130c6a14fa15259b1a0d7e142115739be008870fa60f6b993481dc023889129b008000006b8149800080000000000080f4967d97d997a6a4669798961d981ead4298fb8d1f0f7bac2495598b289281a7ac993698f1953aad159c829c099aa8afa09926982099acad3491928ffb92b8a2249a55940b8fdfacbf9de5a371a471aa0299539f22a0caa0ca97559c6b9e019d2094fe9764984f9c9194d79b879da5993091a39bed9db995fc9572998399bb92ee8ebc9c149fac96fe8f189cca9de997b18d10946c956c954b859e86d489db8c9e80738392849a86fc8df5903891e6875199249e7c9ffd98269bd09dd19d81a0f2994b9f4ca035a2b89cd99e12a06da3bb9b939ed09fdda42f9b199f03a06ca5089bfa9ed69e7aa50c98969ca19c0ba6018fe2907196c3a4b092ec93719552a3eb93f3928594f7a40790e5118713d8a4e98c3b146b1367a4ad832f16521615a46c03d817f618daa3ef084719a51a83a36a10641b5e1cdaa23310f91a151c43a2c10f921ad11bbaa10810011ae71a0fa1971070197e1aa5a00310f518bc1984a01610d218b019f19fbc0f9d189319ec9e10107b186419b29e151065189319559ee20fd617fa18059e840ece160a18759d7c0d0c164217029d4d0d411556169d9c8e0cb2140a16229c9706c9126414129ca70b0a143915549c2501530f6111b99aad0b2014d014639900800080df804a8000800080008000003a8f388eb405b99c45986f94779509ad2e99af94918fb3ac5f957b950298bba58d9b029a949c5fad659d9a9dbc9eecafc79bae9cc69cdead049323957e9436a12c9c099d0f9d33ad279c2ca03fa08eaa7d98de9d329e869e8695229a669c959a8e901494e294329ae892fe9a239dc7980f903d9a529cf093d792a296db9609917393539a7b9c44940080e29ae49d9497428e6a932c95da949a8368865688358c27008280dc802883b989498805895d873d949e98c0999f981898708af812199ecd99d89e579efba0ca987b95209816a4509b2696239992a4be9a039e779f44a57799279c349d16a58098679a489bb2a4be8c86903e927a9e409256913e9485a02995b8913595e7a58192ab111414c3a54e904b16a216bea4958c651827187ba42d836b1859180ea4cc82ac1650178aa2108800168117b1a12d88c8153a175ca19c8203172b1751a19c820616cf16f0a07b0239172e18aca07407d1173318b2a0fe06e716121872a0d20bba17821811a05c0ce3168917459fa90bed150117c19ec30cc2153a170c9e600bd715dd16729d800b49152716599d8c0a6d142715ad9cce06dc117b120d9ca5835e0de00ebc9b530488105b0f239c9989b28dbe90269ccb0b6914a2142c9b008000802f82508000000000000000809190998da48ee69c199db89df89eabaebd9c609d819c29ad66976d970899e2a41a9d7f9d949f46ad929e67a0dd9eeaafc29cae9d149fe3ad8093e694d99726a02e9cc49c289a23ad8f9c06a0a8a074aa5394c899349ad99ec3946d9a7e9c099802911895a595e08dbd92089a5e9cfc92d490ed99d79be893fa93059740974490a590679af49c4f9407886c9ad79cfe96978c70921f940495d081088330852f8a14809a80e1800d8246888c881987578872907693d59468998f96c7964f94ad9ea3960d95a194aea09399d3982b986da13f99049bd19bc1a31e99379bd09ba2a30a99249ab39b99a489967f97c598c1a2d7899f8de88da797928f648f4190199e6f95d694219611a57d942189618a22a5bd93df88158a2ea55f92fc0eb9099ba4db92880e051050a4fa8e3c14351423a3018d041420157ba29b8ee613ea1414a20b8b7514c41406a28b87c1145e1466a159878213f514e7a03e021315861568a095862513901433a010063a1531150ba0fe01d4133914c69fcd014d130414369fb101d5122212909ed0045e119611d29d8e040d114211549d7d01f80f1a11519d6081720f8f0f109d2184020c230dd09c3081690e710ef09bdf8028021f88ed9942081a107e0f8e9a5d00000057800581008000800080008001941c94c095289d909dbe9fdaa02aae589d999f2da088ac0298f998849a07a5599d6c9e55a062add59ff9a006a206b0b49d919f22a0f5ad5694f795959643a09a9d339e8d9effacf697c011fe1869aaea95c19c659d59a1e494dd9ad49c5399f38e50929793708fef8f6296c6982f93ec8dec95b997d892468fa29286922f90568bb49518989494328ef695eb97cd965487638f90907b9582806b8163829a887480408165816581958409845d86008904890103f60ed69ae6937093478f2c9e6a974894db90a3a02e95d58fe807fba27f99d1981c9938a58d986896d09c16a74198599637988ea5ce959693ba946fa4b489a28a478a2e95a28dc689368def959b955e943e9752a45e95bb9127966da678953d8f849021a514940208148916a4cc92cf0dd908a7a3a492bd07e2888da3bd93d68d17923ba3ca925b87c18e8ba2da91fa0665883fa2168ea111750e1fa27b87191456149aa16587b9131b14f6a0a58925123212d0a082863b13aa1466a0ed81ba1275141aa0c08134139112359fb681e0111212289e50880f0f470ebb9de587bb0cfd0d779db084810c270b969dea874f0cc804c19d67888303968e549f0d88cc0ce90b2e9e2489ec8e81903b9d5b8945876b8b8b9800000080aa80aa8000800080008000800d963b951497af9da49d84a097a16cae259d35a02ea0e3acfc9a4f9b3b9c9fa5769f16a18fa165ad26a046a318a41db0ef9d12a1f4a198ad39963598db979ca0089a4194c99b00adfd994e93159933acbb0cae142c1507a4f08dd893e1944c9ca38d8991ef93738f5091a6987c9abd908f8b1b978a98bf9165904b944594c48f3f91f598579bb7940c882d9504970497d00e86133114f692da075c0b630ca48ba0027708f608bf856c05f309470bff85c2807a13c815e599298db6121117c29fe291f9058c1223a27796258d6f912ea4b2989e985198a3a416984e95d3961da6b897d495239680a51a966496bc966da3c889b98b378dc7942d902a8d9f8e8b97af95fd95ce9736a45c96e794669693a461976996bd98e1a4b9960a97569836a4a9954e96cb976ba390951595839727a3ec9417942595efa2a592d086a791daa274921090039579a2469129064091d7a12f91548cb59000a1a4902585f18c60a01f8e76041886e89f0e8e6d04788c0da0f18d4a04418c889f018e1f04278c2e9fa78d2184168c3c9fa48ef583e38b7e9e648dbf83cd84ed9dec8c1889b58a859d3d8c7483bf8a699d0b8d458c8f8f339d7b8ef58da190709c688c4891b492179b968c948d5390549bb1800080af81348100000000000000801f946a957a96929e9d9e38a184a2a4adb29e7aa282a259ac479b559d1e9e2ca6a99f93a132a3d8ac4da155a44ca5fbaea69f8aa373a4f2ad3198349b089b76a1759d75a090a0ddaca798d0161b18e7ac1383ba181c1aa2a6b60eae14b214209dae0a200e060f8591df03d70ea811ed94fa891c91799320939305d508260a73914a09ab153b1843961a0ad4128d14c195100985800283a491af00370074007a8b22004d005a004485b1047c0be30ce38ca810e419e91b829c94123a1d561eafa0fd8e7c149c1518a2fd95ae8ff79000a49c9637972e98f2a428994a983a99f8a55e984a9792976aa7e1957093c8921ca47688158c458cf2955a904e8e9f90b598a496ba97499b56a526984698369ae3a4c6982c9a8b9b5ba44898e099569b10a4409711991b9b05a459974898aa9a61a31197ca98079b42a39a969598f19b68a421967d98e69abaa3cf94a197bc9a64a308950898179a06a2d894c296dc9844a139940d958696bba0db91a9917a9453a0ca906a91479408a0009000909c929f9f568e388f2d92f29ebc8dae8cdc91989e3c8d9f8e7590729ec28d06906591ec9d6b8ddf8f7892cf9d998ea6903e93819d0a8ec4905a934d9d2288db8be88c569d8789110858038a99010000803380558000800080008000807a97b5981a9a0d9fb09f92a20da477ad7c9ebca1e8a10cacfc9b919dc49e2ba6909fefa25ba420acf8a09ea4cca5d4ad959e1ea2b6a38cac4b99899c259b33a5a69c139d7f9b8eac8c9a6894399a32ade18a53176c1aa7a9ac15251ddd1d19a4860ee210bc105b96011131181d1af198670f9f18d5193698680ca310d80f34941c81c281148cb9978a0a5d17c4192b992f11491579168a94220aaf0ca60cda8deb00e407000a448b8304000c6e0df390e6033212be14d498550b5d1127140a99c68c7b12331426a036940d91169671a18d946293c794d5a040944896f394e69f5f983b98809749a32b963c98f798f0a2e492d6946395bb9e0e942c96df965d9e9098c699169acea273997d9bb59c79a4fa99bd9b2e9d0aa5bf98a29a929c9da49598089a3f9c4aa439983599449bfaa334982898799ac8a36c98c998569b1da35c97ce98b59a3da260955197a49975a1d1944597a299caa061944197449943a07c93e7953e98fa9f789279951198759f9892c0949497219fd7910794ae956f9e4d915f939794bd9dde9007925394689d2a90cb9057934b9d25904c91e793f09c788f7891e792159c1590cb912c94929b678f0591c894669b9a8cc28d62918e9b628c268a5c8d699a5e800080408189800000000000000080d1956f97e3985a9ed39f49a386a4f0ac619f0ca469a4d9abb49cae9f4ca039a645a030a441a5faab00a118a570a679adec9ea8a233a439ac3e9b469e9a9e97a5a09db0a0b0a027ac7b9c209f37a1e0ac6585b919301c9cab4b14841df61e94a618113f167e158e96641147189b19489df210d718bb19879bb5127b16d215639655103119581b3b9a130e1219eb1a599a2d1116174b184b98290bcd0cc50ec58ec100ae09fb0d298a1809ff0c821082903c09f11548198a986b0e9814af130899f40c681ac115a7a3d892f9189118e9a4a7908d11c3966ba4f0918c907a955fa0dc98a695c59535a4d399a199e49838a5dc988099f99b14a5d5960999519a1da4bb95e196a6987ca056973797749923a30c99329ac39b43a4ad98339b7c9c32a49c98af9a419ccca36398529afb9b2ba31d9885999e9b8fa2da969899b29b4da23096e9994f9c55a2cd95b199e39caba26d962b997c9b63a19b955097eb9958a0b1940c97099a55a099947596a49922a09b939d96c198f49ef392ba951398469e6f92ac954797179e0b9284952197a89d319285950f979a9dfe912a95a3961f9df39092946c96ad9ca89048948c96419c3c8f76923195ca9b338ff7931996559cfe90c191a494d99c138000800c8136800080000000000080e496209a4a9b029eb69d87a247a480aa019f36a474a455aaf79defa0aea1d4a6f9a081a4c6a5c8ab8ca1d0a553a760ad099f64a48ca50fac419c0f9fe19e5ea5dd9da8a156a362ab45a0e0a274a461ac139d0ca1b5a262ac3494b494059859aa8a19e32019226aa8f41ad421f322ffa5dd1a1021472232a3a0190a207d2163a12f178b1ef31f22a0d213f81b3f1d669e3e1126175518229a270c610e0710469065028c079c0b6785050daf10541054900e11b419a41922a0b5109c1ccd1d48a47d90c81bac1d10a5fd8c071c651c2aa6059504937e926da44e9483966a98f79ff59a409ea09f29a5239c3e9f39a0d2a5d59b0d9e1c9fbda585999a9c5b9e39a40896c697be98889d2799439c789d60a3799aef9c479eb5a4559acc9c449e72a4ce99809c069e31a41499089d109f0ba49e98869c1a9e5da31598249ca79db0a27097369b0e9d07a20497f79aae9c76a1da966e9aa09c22a13b973c9a749c4fa150964799c09ba9a0a895f898369b0ba04f9549984c9a1b9f06940d971999559ef192af966c98b89dcd9278968e98829de1924f9658981d9d0c9238964298959c5d911a96e297849cbe91ac951598659c379194952598359c30906f958898269d8f902494c0955f9b00800080d981d9010f901490b890b890639ca8a02ba19fa9fc9f95a3d8a46cac019e86a34ba471aaf49ee9a1bfa231a737a001a43ba546abf0a097a58ca7ddac439e97a4a3a571ab8f9d08a0b2a0e5a50f9edaa1c8a3a2ab45a0c7a3afa473ac02a0c0a3e3a456ac859c4ba049a274abac8ae7100c0c79a9c1195220fa2023a890189320be2107a60b1a5b203221a7a36617ee1d381f15a2ce13c21cce1ecca08a11eb18561a669dfc0c88104311dc92b70da20f22107891d911731b431cce9e4415eb1ca31de5a2fe02841d072094a4428d4c1bef1bd2a5d995e318211b3da614981d924497d0a6439cc09cbe9d41a68a9c599d7b9e87a64a9c0da012a15ea6a69b9f9ed1a075a76499049d9c9eaca43b94e0951298669cc199049da39e0ba30e9ca69fb2a038a5e89ac09e43a07ba4389abc9dc39fd7a3b199919d159f28a37799c69c799ed5a26498499caa9dfea12298999b3c9d2ea1ad97a69bde9c99a0aa978a9a429c02a05b960d9ab49b419f1c96cc99cd9bad9ea095da990e9c789eb295f399099c589e9195dd99c39bf09d30956b99589bdc9df1941199e59a979d97948298d0992c9ddc93cb975199bc9cb7923497d598859c8a9310978998989cbb9257964998599c7b8d9691ce94c99b389244964498ed9d970dc81a221cfb9a939cf49f96a0bca9aba08ea4b1a584ac68a191a528a71aadaca185a603a832ad76a20aa756a894ad3aa289a643a88aadc6a211a7bda8aead4da2a9a6a5a8acad55a23fa773a844ad42a1b8a585a61cad3ba050a45ea5a2acca9fe4a27da419ace29c19a0d4a05dab9399a49cd59d13aa428dc493f7941ea937112919a51988a88d17ac1da21edba65e17dc1e4820e1a5e5153f1f75205da49a14891ae81bf99f770fda14dc15db96a512d6148e15d896e810461b651c21a19d14da1de61df4a4d408c51c1e1c1ca70096f813d49a69a87f9851987d99cfa5879a939c529e7aa6cf9aad9eb8a0c4a6689cd99f77a03ea7f19c629f00a1bfa7caa0cd9e69a0d5a694a0309f7fa0b3a4a69c3ea079a139a5549c929fe8a0dca4889b7d9f84a0a4a41a9b669ef19f4aa31b9a5c9e54a087a2519a3a9f91a057a29099dd9db19fbca14599039d4d9e69a17299c99cc69d5ca1aa98e19c399e09a10598099c019edca01396c09aa39df2a02c96799aa29c05a0b0958a99cd9b329f42950799549bbb9e3a9534994d9b3f9e5a954199309bfd9d22955b99549bb19d6c959b99639b5a9d6a958c99e39afd9c58957199c19a089d33959999359b4c9de0944599d49a729db1926397c499ce9cae946f98a39e0ea26d10e91b8e1c249bb79c68a157a201a9c5a09ba522a611ac6ba1c5a5d9a66fac5fa111a664a7d1acb0a11fa772a851ade2a29ea7d9a843adbfa28ea8baa9c1ad66a30aa89ea8d8ac08a242a69ba7beac2aa24aa66ea788aceba0b0a5d9a66aac41a23da4cfa478ab12a0bda256a471abaa9f5ea118a3bdaabf9f7f9c339f91a96c98ef98329f7fa9500a0413748bb0a84f039d12f80a01a80e14731cfa1c51a730158f1d071ee5a64c14fb1e162064a605140d1e321f89a6a108df1a3a1aa3a60195c19165939ca68396c1084c8ad6a60199d199699baea6e798b99aec9b3ea7669b979dcc9e0da7e39c9da0aba1e9a61c9dcfa0b4a143a7f79b21a03fa1cca62e9dada01aa20da6cc9c6ba118a489a7e79c91a054a2ada5c79cf7a042a2daa4e29c79a1fba2f1a4cb9c22a153a258a4479c05a04ea14ea3eb9a999e3ba0faa1409afa9d8b9fb0a1f699449df79e70a19b99e19dc79ffca147994d9e62a0dda19199c29d67a0cfa1aa99199d499f28a0a999a09cbe9ec09fac98129ce29dd09f4e988a9b2c9dc09e5c97899a6f9c5f9ea097529a059cb09d6898b299bf9bdc9cd8963a991c9ba19cd6953699a89a769c0e96f498189a009cf2977898c199669b0b96d298469a709c589302978c98609b1a93b6972899189d8913b81c341eab99909de5a276a3a6a8bba095a52da667ab4aa1c5a558a7feab53a128a67ea716ac23a1f8a66aa858ac2ca2e7a67ea83eac9ba2e0a7ffa8c8ac1ca2dea773a885acd0a195a6dfa748acdaa191a605a855acbaa03aa642a896ac7da196a619a872abf8a010a645a74fab45a062a498a580aa1c9f0ba3c2a442aa37a0dfa22ba410a9059c65a064a24ba9439b189fc6a0b0a83e984c9c069d4aa8ef97f39ac49cb8a7a79481928d98d0a74d959c940e96f2a753975698a397e7a7099a309cf29c5da7549b7b9d739f2fa7af9b0aa061a11fa7bb9c74a0aca1f6a6739ceba0b8a24ea74d9cc3a007a21aa7d19c16a197a28ba6da9c46a02fa165a5c79c86a0e5a272a6549cc7a103a3d8a58b9ceea0a1a29ba42d9d5da1f8a270a34f9dbca112a344a48e9ccca03ca29fa3f49b79a0caa19ba2b89a859fdca098a1f599d99e74a0eba09a99649e50a0a6a0bc99529e3ba08fa0469a409e2ea064a0009ac79d6f9f36a062990d9dee9e0da0f697909c869ed89f64971a9c999dc49e0597939b0f9dfe9d9296ec9a9a9c7b9dab96c49a4d9c019d0597949a1b9ca49cde97f499fb9b629c9f96ff99b49b7c9cfd95af99e39bb29c9895a199c79ba19c0895b999d79bea9c779408994c9b299d0b949a972b99d09b12135c108a116b821694d9967394bd99109fc7a4eba5e3a8d7a1e7a65da821abc9a187a627a8bcabefa147a7c6a80aac0da2fca703a940acc5a234a865a954ac87a16ea7cba8eeab269e1ca5dea650a97c9db8a0faa047a2df9e3da46fa5cba8c9a0e8a510a767aa50a160a58ca64aaa20a1faa452a648aa23a407a434a51ca968a006a410a55ca975a002a211a452a8d69ebaa249a4cca77698849de09ec6a5aa96f5970f99cea0ef99a59d1e9f6ea5459a34a083a322a8ca9cf1a090a252a7399da3a110a304a7a29d3ca2aea3a9a6539d48a13ca2bca5dc9c8ba192a210a6ed9caea0b2a1bda5f99c55a155a26ca57c9d61a1c3a202a5a29d82a216a4f7a44e9d2da267a329a4099d66a1bca211a41f9ca1a060a208a4509c4ca0aea1e2a2109de0a125a3bfa3449dbca146a3faa2be9c85a19fa3c0a22b9c19a07ba19ba13b9cad9e4da01ba13f9dd89e29a09ba0c19bfa9e50a089a0589a579e2fa04aa08f99c99d9a9fff9f1b99949d6f9fa19f5d998c9d7e9f7e9fec98209de09e0f9f9a989e9c869eb39e8098569ce49d679e1398be9b6b9d169e5d97229b469d169e5e96c19ac49cad9db6956d9a9b9c759d8c95749a689c339da2954f9a349c929ca795859a269ce69ab19374970d99a39a57921a973c98ac998b0c220da40d52049986ae8d2a8c66904896c799a69a759ce99dc0a263a4f0a7a1a0d7a52ba719aa09a18da60ca8e0aa56a1f0a660a830ab0aa1b5a622a8ddaa54a06aa613a861aa0c9c39a483a526a893985e9b599b6d9c448f6d9140932f94eb9463966b98999b35961f9db09fdea11699369c9b9cfa9ff497669eafa0fca2269a0a9da59dfca0aa9bd7a0b9a2e5a4869c9ea292a4a2a5479a70a10ea395a4db988b9cd79caea0f29ceba0afa230a4a99e0ca472a55ba5fb9e65a4cba5b4a54a9ffaa309a597a59e9f2ea452a599a56f9ec5a3f8a4baa5c69ecca3d8a461a5e29d89a22ca41ea57d9e55a2e9a36da4d19ceea1a1a337a4b0992aa05aa15aa1f69047959b95c196dd91d093ee94bb950f9a509e39a092a02f9dd2a159a379a2bc9d7ea2dea373a2189d10a220a447a2319c08a1b9a328a33b9c9ba0d5a120a14b9c82a0a5a1b6a0f79b5ea098a18fa00a9be09f09a15fa07b9a079f9fa003a0dc99699e25a0fc9e4e99c69dc39f839e9698329d2b9f4e9e74980e9df49e1d9e4998a69c489ea59dfb974c9cbe9d219db1971b9c8d9df59c5597ed9b5f9dcd9cee96d19b569dc49cb7969e9bf49c8b9c67962e9bd19c6b9c3b96f39aa69c659c8e95249a309c309c0495ea99129cb29c4b944a99d29ad29a4209c00a010c2c81e586008ed38cec91c7950e9ad59a6b9d4d9d06a20fa40aa7b59f2da5b3a650a9c29f04a575a68fa9439e7fa4ada55da8fa9e95a25aa3dba48d9d8ba384a40aa8679c07a3bfa417a7cf9e0ca2caa2e0a39f9ea6a4d1a529a863a055a581a6bca85da066a5a1a6c4a891a05ba59aa699a85ea058a565a656a880a04aa5a9a646a872a0f7a488a6dfa72ca057a4a7a5e0a6a89edda29ba442a5679d16a11ba26aa2989eeba177a30ca4ba9f41a2eaa32ea4919fdba150a3ffa3349f0ea1b2a20ea2b39c8d9fcea0fe9f9e9d02a13da256a1cd9e49a2eea3a3a39b9eb4a25fa45fa4af9edaa292a4baa46c9ea9a23da43da4b39de2a1afa38aa31f9ca6a01ca27ba1319aae9eab9f4f9e999aae9e8ea0da9f5c9b2da074a1caa0589ce2a007a228a1749cdea0f2a1dba0599c6aa0c5a196a0199c50a082a170a0cf9b0da050a127a0e99a789f53a12aa0a19a439f1aa12da0529ad79e8ba05d9fb7993d9e3fa07c9e0599c19dd39f739ea198539d119ff59d9098ed9c729e899d6398b59c389e589d3998a29cf29d169d0198589cc99df39c5197279c9e9dab9cee96f79b599d6c9cd996be9b229d3f9c0597679be09c229c89962f9bcc9c119c77965e9ba79c6b9c0f95cf9a379c1b9cb5956099199b019a6313be1bd71c1398ac9c04a26aa343a7a3a06aa66ba795a9a3a066a69fa790a974a0e1a52da75ea963a02ea6fba799a90aa1aaa642a8b6a94aa14ea793a8cca968a187a7ada8eda9dfa0fea671a882a981a075a612a837a945a0e7a593a7efa841a071a50ca7b0a84a9f03a55ea7d1a8aa9fe0a492a6e5a710a0d0a456a662a7529fc0a4d3a6efa76ca0c7a425a6a5a617a04ea5fba6dfa63da098a4c7a510a62ea069a4a4a5a4a5a29f96a4eca54aa523a082a4bba5dfa4b09f8aa4bfa5a8a45b9f0ca428a54ea4f09e2fa390a420a4789eafa253a4cea3909da0a243a469a3a99d34a2d5a369a2639da1a12da3a9a1469dc7a16da349a28e9d2aa22ba457a3809dbfa1b3a464a4f39e7ba16ca363a26c9d3da1a7a293a1039d5da1fea29ba19a9dc8a115a39ba1c69c27a188a200a1609cc7a03ea2aba01e9c87a0f3a1a3a0229c64a0dba18aa0789bb49f8ba17da0559b039fa7a170a11d9b719f5aa121a0d79a009f00a1ab9f109a759e4ba0ae9e2699bb9d939fb39db5983b9d279f7f9d5398d29c999e4b9dec97879c659e3f9ddf97759ce99d149dd597379cc59dd29c5297fc9b719d8c9c99966b9b1e9d099c1a962e9bdb9c6d9b78960a9bbc9c3e9b2697c59be29c129b8f961a9b689c689c38954a9a249c3e9cd40e401a941bf894d49c20a35ca452a66da070a6a7a7caa89ea069a6e5a7eda8eba0cfa642a850a949a16ea7b3a880a934a157a7a3a8a5a9eaa040a78aa8afa90aa1f2a662a85aa990a099a632a838a9f09ffea52aa86ca9a7a092a50aa780a83ca091a50aa74da869a0c8a526a72da869a0c2a539a7b0a733a09ea525a709a75da054a5bfa66fa629a038a564a6fda523a011a52aa6aea514a046a593a6aca5879f25a557a64ba5569f6da477a58ca4b99e21a45aa571a4d29ea5a3aca4f9a37c9eeaa3f7a42ca4149e04a4f4a404a4929e98a3c6a45ca3889eaaa224a4c6a2299e96a216a4b0a2169ecea236a4e4a2679d6da215a4a8a2d49c61a1dda2caa1849cc5a03da270a1409cb7a003a239a13f9ceca078a248a1669cd1a19da39aa1ac9d30a2b6a367a1439d75a1e2a21fa17c9d18a1cca225a12a9e05a1bea2c8a0499de0a06fa299a08f9c59a0ada132a08f9cec9f19a1939fae9b9e9fefa0279f319b189fcaa0129fcc99709e97a0149f5e995d9e6aa0d09e4199cc9d17a0469e67996a9d999fa49d3a99f69c559f8e9d8098d29c0e9f759d7798c39ca49e5b9d5d98659cd39da69c76982d9c8d9d469c0a98c39b1b9d259cde96389b559d419c7896db9ad29ca59bac959b997c9bdc99cd931d979b989b9800800080688ef881c299dc9d7d9f469cfa9b54a0daa0c6a05f8eb4972494c4a30896fd986b9974a0f79c559f49a0a2a0ed9c979fb0a0f5a007914b9a1d9cb9a22398e99ac99a1e9d809a519de79d899cf6952e9c509a339700805a985894609000809989008000800080008000800080a68d0091098f098f2b94eb97c3997e95fb85099581975d94c984b9899192e18f07819c8a318c318c00800080008000803e8fbb922e9719a00f9a37a4e7a56caa1b8c7aa50aa80aa9ff959a9dd79c88a0121561908a17c5991312d111121684a043017695159433a08b95a79ca69daf949f92199bf99d7b973e086c0fee14359c0000de03740aa19a7492589667997e989d94ee97a398579623923c97bc960e973501a60f3e12ae99841103190b196c98fa140f1c9e1d309d7416f81ce81e439f3118931d2a1f40a01d173e1d111fa1a02517f81c691e73a0a1160f1dbf1e83a0f016cd1c5e1ec49fec168f1cd51df49ed315bf1b2c1d389ee114f31a681c499e1c15ad1a791cb69d7715fa1a4f1cf39d4115231bc11cfe9d5315281b911cb99dab14811a331c439d8314031a761b829c7e146c19d31a749b4a14c318bd19579ad512c818431a1b99c813a5186919f196d714c91a531c5199bb136819cb1a569bbc119d185f198b9dc3890080438f00827a89b198cb9b3c925a9d1f9f329f0a9c4b826913fd1872a5f80ee311c612629a2091a295e594c8901aa026a138a13b9bb18a3e92d71035a78394bb96b0965399459cf69cfe9b2b90a899b2989898fa8ceb931e910080008091864582008000803c000000000000807680428000800080008000800080008000800080008000800080008000800080cc804f808a8053003d8000800b805d8037943a9c6d9dcba0919e06a781a8aea8629821a1e6a2209dd2910898c399148ed888c48cd38c5d0f93952a9cce9c52a1209751a084a19ba27c8bd88e698f4c900986c48358862f92c903f40c2e10bda042885d91c491baa1b29537983698958c908bc98cdc8c640d498e6590f88d3208dc0813143515379bf80dbe130614168aa013841a451cab9d43164d1dd01e39a09016eb1c411e5ca07216f41c091e5fa1d715941ccd1d1da12216c81ced1d18a0eb16a91d341fc09ffe15d61cfe1d799e5416af1bca1c7c9da913c51a2d1cef9d0a14c31aca1bb79f8c144d1bd21c829f2214b819581bf89e31137c19ff1af89d7513f818051ada9c04139c197d1a789c3614171a831bd99c9a149f1a1b1c3f9ca513ec193a1b5199e913a318c319ea961813f918b51ac499dc12d9183e1a789a030e50140215c49867968390e695508c00803197409d1d94b49ed7a05ca1d39d7197579d7f9c6ba8608e9a134012e6a5278e8a91869073990d9cca9882996c9cf691b89af19aeda78c98139bec9a009afb9bd69abe98718c6c96c396aa943981be890080008000809088008000800080848200800080008000800000000000800080970100000080d788128e128d1e800080008000800080008000800080008000800080008000800080b89021948c9407813084ab886388518b898ab78ccb840080838b7894f4831897249824992f0dbe97bc9b189e56a424964a9d209f32a1ca911a9694950b906095069a479a0d90d691a09a859bfb9f708cbd90549550a088835b850a902a1334011a042a05c20eb00b5110c810ab0c650829131815c99c490d720f20108d926c0e47145315a79ed413751a2f1c03a1c915151d741e0ba28d16a71d651f57a11f167a1df51e3fa14715861c121eb1a0c514941cd61d0ba08a15e31b041d919f8515591cb11d1ca03914a11bfc1c08a06313c119791be99f3612091ada1b8e9d5314b818251a859e3a143019b51a3a9ecf116418ea19399d9f101216cf16889bd610571610185b9ad81047181b1990990d124f1813191598e3112f18a5195e9990124918d219719bca0cf511b61361978b116b17a818859a46961b99a599a599939ad79d359ee396ed993e9d179d98aa4615b822fe23d8aa8a96ee1bb41c3397b392b891ae91088c2c94c7965b979589e4882e905b898282f189648c7890028c828c008000800000038b00807086b20000800080008000005f805b80008000808081ef8098810c82fc0afd08ac088d820000800c9a0d9081000078043c02d38000007400a300108100803d802d802d8000806c80b380fa8000804d8102821e8100807d816883e481cd80ad86668847056c847390a9935613ae940397a1971613088fa2949796399b2b10ea128213bd89f400e1031d02a68440827b83c783fa871c86b6825a82369060825f0d6b110f9b90811903c8022e8f14048507f3089b820b0fa9114111448a32096f11f013fc9a0d0e4111081284926c105118fa199a9e7914f51bf51c90a16314921c321e42a27e15471c4d1dfba1d314b21cdc1d2ba2c2149f1bcc1ca4a0f213d21b4b1d72a06b14b61b151ddb9f8a143e1b711c09a074142a1c7c1d52a0ca14021c551d899f34140a1c311df29e23146a1a5e1cc09e90128819bf1b119eb011ab18321a939d7b10cf1746199d9d1b106515b415969e1b10e8151217769aa40e2516081794962e112c181219e49aa41150178418d6995c12d6184e1a4e9a7f1059187d19c49b438d0080f686e088688cc1846c901e88e19041925591a298640d7e19c21cd0a7e808c6080d0dc1977f80b680c780d589538103849584cb8b21815b851583d8840387908a668dd089b78a008000800000f58b0080008000000080758c0080000000800080008000801889ab85b589258604816981b581db870080fa80378237827680b9802781278100809380c081f98000807080fd81aa8000808480a683ff000080008054803a800000038000800080cd8016834d85c4016c80b38ddf8f520fa98e2394fc947e100789858de48c1797c3818e0b720b5189c586da149414ac8279802409cb09038b248cec8cd08c72911c894493f1945d993a87218cd08b8607518478832c835c01138286810f82e58bde82618381843599aa0a140b850e6495050f8718451a9aa0d610d3181c1af9a28213401be71c7ca3bd13f01bfe1c5aa3d1135c1c051edaa260133b1bb31c4da1dd12de19e81b69a02413f919691b75a0b710fa18b01a0fa0c711ce18241aa29fc8119b19461b0ea01b14361a051c9d9f4e126419ec1a2d9fbf119e181e1ad39e19116318c819279ebe10fa173919dc9d9a101a185719229d780f19176b18a29c820ec515bd16e29a770de1141916f7996910e415b616789b2d0e6a145616019d3c0d6d152916f79b89820000a6036e8800800000c3004e83a58bf8876b0755994783a716141c69a8d982860b920b779aa382008000800000008000800080008000808383d081d0811f827f887b897b89b58f5d8c0080000008970080be8a708000806e93008000800080148100800080bd838381f2866b843780548057803c88d1805e81f682f68230801b00d480968300806080ee80848000800380fc818b81008000802480198000800080008000800000008000800080008000800080008000800080008000008c86f18d00930c871689d6926e95ff958c0049026e0316879b0f9d08bc0d358200001703ff0050812688ee8674867f90a988f2902393399bca89f58a5889ba0cf28371817a8037008c8417859284598a4e831281900185997281fb08380917952d0ad0158c177fa1fc0c341a431ca7a21111ca19fb1a2da3aa0f5d196b1bcaa3240dee16e218f7a278104a18601a8ca106113f1afe1b64a1780f5919e71a4ca16710c5187f1a8ba18a0f4d185c1afaa0160f9616d71814a0b10ea21556179e9e2e0c5a14fc152b9ffa075511d512119fec0852102211349e830a3813b2155f9e610b4a14f115739da7011e1346142b9b8c014810261180998c04631058124598390c0412ad134b9b2a1146188f197e9d04811807e90af599790ec806970c7d8452095909e1097401000000000000008069007a04920abf8ca184e8877485008d00800080008000000080008000800080000081806f8029823300eb032003bb89db03690200000000718cf001220875010080e28cfd84530000800080008000806e847001628373816b0222082a072a87f084b409640e46807f80a402d302f58100005d014600050000801c00eb80eb8000801580da80498000800080008000800080008000800080008000800080008000000b00000000003180be808583160400804c84a389ff8f1380d384fc863a883c822e82a282f984a0821d859d88eb8e46917b93d2930b9c8791ef99489a3c9d7892099ed39c9998dc8edd99079b8d9f689051943c931598ca8c4292ff92179c828d2d91b4906b97b18d59852d07c6a1628d68103d15c8a3418e2b15b01638a433838612d411f1a313038915781860a2210e8417c21812a2900cad17441995a1960c3b17ef188fa0640e5918ea1970a00e0e3418b719d1a0050d1e1721193aa0220eb616c818569fc00e2616f217b29e4d0d80150418c49e180bd8124514559e33079a110514d49d53049e10e2125c9d37075d11fe12949dc008ce129414979d6906d911390be69f550cc4124c14a99ddd098311538695a1b08113107f0d279d7d914288b18ed982ac92ac926392a68200800080008000007c800d84b488b4880182b988c185518c0080008000800000008000800080008000003280f680f680dd8023831c86f28b91803280008000003b820882f882ee860000bc003702198300800000008000800f83588139857a80cd002a005500c582508084804f810f8249802380c6803881000034800080008000800c8054805480008006003d80140000800080008000800080008000800080008000800080008000800080008000001780c389b28e3f82968000800080008000800000000000803d80b20a670d3b01b883fb0105019f834d9026940695599b4b91d090e28fde9d8489a5873e86af110080008000800080828500806f822386a4833b8d2890139bdb8ae788ac8a9995228cd00fa99065a3098b70124c1515a4088cc11653195ba37a885017b319daa23c880416f516e4a21b8bec13ba13a8a36c88f7145a17b3a17787c9147b16cca13307fd143e16a1a0060bc9159c17c2a049092214971448a0720ca014a511e6a1420a40155b1780a0e10a83150a16139fb60ab114e3153d9e4d076813ff13e19ce106cf1152132f9d6a01ca108c13469c2201210f7110179c7a83c3071c834a9b1f048b088f09fe9b68823d1315150d9ea288f1123d148c9d4e1000000a0d58813910200a961198845408530e2c051787b4915d92d88851a610880c8b0b834898008000800080000000800080008000800080e580df8086807d83a7880b89af8c96896681008000009893af8cbd8a0b0800804b90b29271000080008000800080238594824787eb834501b702de024380b1025f07e40b3180af019402e9029580000072010000000000000c006f00258000800e8053802400008000800080008000800080008000800080208000800000008000800080000004802f80ff8a3b03ca812a812783e48a00802580cd827588c58bde8b408c6090c2906b97a998eda06395349735983f9e1192e8951d971e9e648cf3885b89971300800080008000004c840080008000805a83a38c4091f698af8ef09114927f9484921b977f9891a2a0934f94439294a41391c0875e9591a6db900413ab14cba4ea02cf1798182ca4560c9819fa1790a474087d18371911a3c0023918f51948a24b917a1665188da07207c1150d18daa03d82de118a13a9a05982d711191576a0e101ba1255147ba0e5011d11ce1309a0c6815f106512789e6901780f8b11db9d3b8101109513da9c1f01370b920cbe9c3d81dc0ce80d2b9c40016c0b940c689c0304d00e3e11109d9308b81111134d9974072e14e314b69c5c07000084032c81f78000801a83cb834b89e2897486f8914094e5952e9427a83f8bdd8d148c9798f080008000800000008000800080008000003b80d9806a81768066817484d38c8600118000800000b70ec20c39101e840000380d34114c80000063010000008073802001a9009e8427006900840013801c802a80db80838015807c80638114810080588024800700008057805081ca00008075818b82948400800080008000800080008000800080008003800080008000800080008000003d80358050815488d2801b80008000800000000000000080000000004407460129000c002801d582b68a4d8e35917298d890f0909591129b2f8a9389d78aa48e00800080008000008d849680ab800282bc818489e78c4a98f089fb8f9490f094ba92d294f494afa15893cf9541969ba300947b9239941ca44494908dbc089ea3ba94a79250940ba4fd926592ad9623a49b920b90b698d4a475971c86e487bca1698efb05d30da4a1928da713171672a1428dab0e5c1049a109862c10298752a2c785ab0d810c75a0c401010ffb0dce9e860118101d135c9e62010b103c12bb9e85819a109111029e5d0131104212989dfc8396115c13f39df386160c170aa59d5d891b8e858d019e0e861c08680c229c3a89860b7709b99c21080000c5035880a380008097822a83e18c178d8e87fd921295639822963ea8e88d5c90068f64995083008000800000008000800080008000005580a100268384048f099009048ca5068f0100000000de0825027805040200809d8f2d9172800080008000800080db84de82f985f98508800f805780578023806580728129801080f580d981d780000017000180010000808980c08240800080f5805482550000000d008000138100800080008000800000000000000080008017800080000081807b803b805f0a2e8026800080008000000000f1009e805f00a001ac09b3800000000000000080128b2e88ec88c89bf28cdf8c1b8aeea0458a22891c8a43910080008000800000178400804c80d780dc803087858bb597938a9f8ccc8c0994ba933693c99137a169950f985899cea3ae965d99a39a8ba4d596b599cb9b67a40e96699a569db0a47694f5969e9889a3879563975698aca115930795ad96f8a14494be9311953da14991cd93819900a3709203943895bd9fb49122943495e49f6890e2931b954ca0249068918591be9ff68f198e868db39ec18f4589888abd9e5b8d1f8c328d0b9e8d8d0490bc91789cf78c69903391aa9cac8df78d438f419db389c6839204809d028c2f8e0991629d068e808f6d90da98cf0e0000f20a4f8000000000d10ee982050bcf10510f7d937c944b988795dca6888c83903f8de799ce8000800080000000802780b18215859a8b988e358e6598028fb595ec96c2a43186c18546868c90710ef20d5b11f9860000ec128713e2040000bb09980b988294033605c1081f8589800f8194813a806b0082006001c5813480a9805881588100803e802e80090000002f808f80ee8006802100230068800000008000800080008000800080008000801f800080008000809780008000003801f68871912d81008066805d812a86008000805880d180298000000000008000800000c102ff057390c180cb805f97c48c9a90f78f1fa07c8c0d8c218cd19100800080008000004e840080008000800080e282cd8c1295008e7691f691d595f1940b980f99d7a10296bc99299a68a34f972499ec99e3a297950b98bc9872a3a1954298f49831a2e095eb989999a8a1479591995c9b85a15d9545985999c2a01a95cf97159907a19a941e9820998fa05e949598ce995ba07993f797a19807a013932b960397449f2392b395f5960a9faa90c7947c952d9f5290f892e894ff9e2c90f191ad94b79f848e3493e297eda06b90e6933f95b39ee88e7692a1944c9d288c6891a692609ce28503088d03459caa841f0e690e0d9c770500004c035e80008000805b82ed83848c5b8d058cdb932d953e9b209cd3a64d8e8a91738ffc99a180008000800000008000803c806f8000808281e2807981fb802182cc84cc84b20b3104000000004a0c0000000000800000af0d000000000000130e04106288c2130d162019bc980b088c0581052f84fe00ab010d03f18141006d80338002830000a30034007a800080f5004f804f8000008304cf07de0000800000a8010400008000000000008000000000000000800080170008804a8092803e80fd01f78a00806602c00ce3930b806801b00679871987a70095123e11878e3d0dda11da11928dd1050011789c7090908f698ce59e5c91648f168f489cb98215074b0c199dd588588788887596858d688c588fed9a4390f0921594f598bc953a99bb9adba0d197ad9a1c9cc9a29298269b629c5fa396981d9c529db5a3fa97e89a849ccba3fd96179a839b05a4dd96e399e39aeea12a96de981c9aeca0cc941a9853987ba0b295f497f398159ff89357987299ca9f24943b97ca9809a0469477976b989b9f5c93ba9713993ea02894e897a798769f3293d2968a98859e8793d7954197d89dda95ed949295c99c5f910d94e894529c4f8f6c920095269c68906f944a954b9a738ccb925194579b91872f0cf50bc199f70e00003d0c5980000000007b0f8183ab09740f5a0e37926292db986898f9a5838c1a90e68c82991780008000000000008000804b81088200807a801881d281ac825a0005825e83e8010000000000007c830000940d820900800f030000000000004105090126006909050a280e8684df0e290d100c0e0200006209ea0e12869403a1056b082f841600c8003b003b000000e400f4021c82000068026005238000000000d700208000000000000000800000000000000000000000000000000000000000d70571800000740717020e00000000005403b9014180a60b5d105d100080f5018a0cd012478161007903998a008056829c046d9906810784c9803990f8844184e382888dfe8c1c8d330539947c88a7915f92d59c3790d191c5927b98f2956098e09825a03e97f19a7e9b86a2219a5b9ade9a6ca2b697d19a1a9cf3a25f971e9a849b6aa22296049ae29b8da292965b9afe9be6a20298449bd39cd3a12c96429a179eb6a3e3967a99099c12a1f7961d99c49ac4a0de98c09787981fa019957f96b6966e9f8993c494d794c39eec91b2947795fa9e7c93429538962a9da693d0966598869d1194e697f898299d52938f977f98e69c4e929e951997869c018edc913c93249b948e3a918b92339ceb89d78c208f3c9a4f0900000207300088003c081a00000000003f030000000034801901c9049589358315869787d48a000000800000000000800080608086800080a1817d817b822781908294844583ce00230200000000850d160238162d060000f2090000000000006005000000009d06c40c000000806500aa0d7613bf816e0c7f11ad147a82b000430af70cba8200007d0246071e8300808a028f038f8300002f004804340000800000d0028a0000000000000000000000000000000080000000000000000000000000600aae0900000000000000008d020000000000006b09c109540c04060b03a214621562159e900911ea13289f6390328be78ca0a0cb847c861a8770908b82fe81db820a828a815882ba886a045b81e780ed80aa01df88e08d8f8ea1848494c498049ab4a07798d69c059ea1a32999c69cf89d7fa32d99449d5e9efaa2dc986d9c629d12a226983f9c8a9d3fa20098249bf79cffa1d6957c990d9ea9a35f98a39a669c72a06297e69b609de7a0e996379a999bb9a04b965499329a34a0d8948c9890992a9f8e9478973798ea9d8493c9965498199ef593d9969098ef9ddc9365970b99349e9e93cf97f298649dfa92b9978998089d469283969c98ac9c6691f8966d98619ce18fbd94b9969c9c4e934e97b2982e9ccc0b7a0470118c0f00008b139813b20c5f146c1c8f1dea88510f3e1c771d3d09420d23175119d40a0000e000de0c750400000000c410e40600007e0de70de10206020d06960c0a8200009f03000000002e0200004014cf03000074110000000000009d0c000000000000920400000000ab01ac0cd909e80819037e0edd103f0a09003f05900d72010000f403cf0422000000df04fe0703010402ea06c807aa03f6020000e500200000000000880640010000000000000000fe000000000000000000000000000000fd010000000000005a020000000000004d05000000000000450a450c1d0bcc01430eb20d5f0bcf88ad86a50eec0e189ca882d6810382868ca780248161816181f5824f827b005f039780008000800000c98ba78e5890668ace97bf9b5e9d4ea2dc9a509eae9fc1a3179b8a9dad9e2da3149a0d9e0e9fb1a2d49ac19d789f73a2cc99a79d0c9fffa17d9ca89bbc9c859fa898129cd29c35a08c98a49a579c1ca06296b59a959ce8a00196779afc9c81a10596919a6f9c92a0a095199a9c9c79a05295379a699c05a01296fd999d9b369f70957b99129bc19deb930a987999bf9c3593ac964d98e79bfe926b96a1970f9c5f924c96a0985b9d3694d49636980a9ca4905a9622987c9b34917094da957a9b0000000000000080cd120a105f16c1020000f6134518d609d70118115811408000006c1137103d00150db80f52118101150f5411f20fee03dc0ce10e170980004a0d950c0a092280200f541100000080ab0bf10e000000801608641000000080fe0bcc0d00000000e80b0000000000000000000000000000d1012800000000000000cd0300000000bc02870c52014b000000000000000000d205080900000000b60ed40e950f7f05d1025f068c12dc0c9b07000000000000c00a00003c101a0600000000000000004d1539177d16bb8b6509a618cd1ab99c08132e142214160c2f0d810b4310d206eb00b0015c890e8b7488530c270ea899460ddd104f11fa84870f690deb0cb4084503220030006e020780bb804780ea0d598be58dbb8da1104698289b729c8ca2789e149dda9d50a4159c719efb9fdea2ba9adc9ffda01ea36e9ac09e6aa097a28799469d4b9f7ea2a798979c169e26a24098969c0b9ea0a11598029c479de7a06398b29a6f9b20a08c96479ad29be99ff995d9997f9b3f9f8a957499c39ad79e74968399b29a899d2f95d1999c9bd19dba957299909a169d5c953c99f199fe9c3b948c986e993e9d36930798c3986f9df5923797a798259e66941d984f99e09c299265953696c89cac95fc99189c879d00000000000000801514dc16c0194d090000c719271c900900001214bb16e1829610581a851c5c848816ba1d1b1f4f82cc1dd91f1020a0980080858b509254a583144f181519b097dc1b2f1de81d688610175c19f4156181a9030411f60f19017f0c0114000000000000000000000000ec0300000000000000009d12000000000000dd0809078a0630093a1000000000000034083e000a0000005a0e710dea00000019105a1170050000dd11c01067080000ae0e680c69024800ba0d8807c00000000d1008024100a906c50ec20dbc024203060e00000000d60d2911891011058a106915bc147a00d40f70123c11c08e6201b91396162e9d9a143f18b618638d6f10f41284116d076803e706da0abc0b5601590484064a10ce8c6c907c8f2f10f297129c569d8ba08a9a819eff9ffba2789a829fc1a0bca3639b799f96a065a29f9a1b9f71a01da29a99d29dc79f1ca2af99799d0f9ff5a1fc99e19d529f41a18699cc9d9a9f31a12e99fe9c559e56a0a2989f9c359e28a07198569ca89deb9f4c97129c739d2e9f2a98ba9bdb9c3e9e2c973c9bd09ccc9e7e978b9a6e9cf69e65983f9a899bf09dfe97be99d29a919d04965a99df9a109d1795a298799a4c9ce0948c9853992f9c439449986e99a59ba095c198169a4a990000000000000000370a770fb111558300008518e91a648100001315eb1635889b12c91a011c898bc8152c1d971db28a861cd01e121e0c98008028051288d2a3d3148618361971979f19781cb01c0c8bbc121b19f71768851609dc0f0310fc035405090ef2014b02090076089703f200d50500000000000000000000000000000000cc0a0000000000007b0e4007cb003f075a0c7b011e000e03b70c6807ba0000000d1096094d0100004210c207f40100006309930a10094e0963108e0eaa04680cbc0f6f0dc801de08ed0b00000000f50c0a0d000a4603c60d3d108f0a4601490cd010b00f3280e71154145111718cca0581132615269b3e14b4152f15528b140e640d491081057e053503b901e00220006a83f7843109278d83934d94e18a3498aa9d699feda0b69bee9fdda002a3869b71a0bba1dba3b799879fd2a010a3c699e99d799f78a1bf997c9dcb9e9da0a899509d789ea1a0cb99a29d499fc6a06599fb9de89f8ea02799c09d6a9f18a0d598269d129e449f4c98389c409dc69e5197169c7a9dbf9e6d970a9c1d9da49e8597939bb89cd09d2a968e9a4f9c4e9db995ae99819bc39cf6957e999c9a259cb1955299909aae9cd9956399999a4e9c5b958299df9a409c6393aa98d899d59bfd9468987299959b0000000046090f800000000000000000a2066c15fa1a5a0e00000215ca17a111ea10331adf1aff096214551cb21cbd81251bcd1da51d0398f7040e1a271ceda1bf19af1c171d07960713a718c61987813508ad0c00000000170800005e0fe51400000000000000003010f0000000000000000000ba035200b51100000000000000006f0c6c100d0bb80f8b0c000000002e010000000000005f10f510ad14600100000000000000006304120d8312430000000000e3080d00ac0e64128c086701df007f065d06f508d506f604a307e903270cb60400000000c80a5309de080d00ba0d9f0a00000000d70fdf0c110b7d00e80f280aaf0001000611260ffe0b1900d60dac08d4000d00670c88050b06dd00cc02d0012c056004468b808f8390968dd598ed9cc49e33a1c49a4c9f9ea2e8a4409c7ea0f7a170a3dd9b0ea02ba1fba1369a2f9f7da004a1e299499e18a04ca0ad998b9e23a00ba0449ac29e53a0b99f7e99ca9e69a01fa0c3991d9e779fd59f7c99e89d999ff99fca98609de99ece9f0b99f69c029e7d9f4b98999c0d9eb59f2598469c5d9d129fb998ec9bb19cac9d38974e9b669c519d8a97d39abe9b969ce895979a359cf19c2f96819a379cce9c1e96f69a789c399cd494da99649c349eb9941098f598a299f209580b150b780000000000950439800000000000000000000069103a122b8200004318cf16978032016615ea146d8000005a150e145d8000001815d3103880b805fb155a128a810000f614f6157b83d8089e0b0000000000000000430829804d133314ca0c740182020000130de2803612e9100000000000000000cd033d800c0c3811000000800000000000000080000000000000008000000000000000800000400d0000000000000000fc085a8069022c8100800080a5022685008000802504be0a4408ab80770caa0c8a0dd280110d3d098b0d0781950e140d01086980050cbc0d2d0e0e818e0a4b0900000080ae04d4010000008000004705000000800000000000000000000000000000000000000380a900fb015a8d5591c5926d8f4398329d109f15a0d49b3ea068a1c1a1339c28a01ca12ba28a9b329fa1a0a2a1ec9aae9e6fa0dca0f09a2d9faca05ca0279b6c9ef09f5fa0ac99e39dce9faca005999b9d549f809fe898789d1e9f519efc98ed9cf39dce9d8299b59c819d5c9d37987c9cd89dd89d78983b9c599d599da497069c159d389dfe968c9bc69ce89ce3975d9b499ca89ce096609ba39cc49c3b973e9b869ce39c8e966f9bd49c149db4958a9a339c0e9d30952899779af39bfc96639ad29b469c4503c207f409b80000000000ba01098000000000000000000000770ed81106816507761607188782cd0c0215b0166086000000000c13f882000000000000000000000000e20b278100000000c10b6280000007020000000000000000c10a77800000e60500000080000000000000008000006e020000008082029d0900000080df0d740ea90bf98050103a1198099780bf0b680ec5067280c704930a410c608100000e07460c1c80a304c70e500e02814110d91069110a84df0ee6146a16e789b3058f135815398a0000450d92120c82e90a31139c15f883060d7d15b0175985260d6f164618b283d40d4616f816c28362074314b91462830000f60f2d0fb38000007a082b09620000006303450253008a816385238423044992d193a09440921b9b649c639d639dd39abf9e49a076a0239c15a081a117a11e9c58a0f0a1b8a1759b2aa03aa2afa2309cfe9f2fa115a1c99c219fa3a029a00d9a5a9e4ca035a083994e9d1d9f1d9fa498db9c4c9e4c9e0898bb9c379e379e4d98bb9c369ec69d3798d29c4f9e059e2498c09c379eef9da2977b9ce49d609dc097069c239de79ca3979f9bcc9caf9c5c971c9b6d9c509c4696c49a4c9c689c13968e9a209c209c9595d599fe9a5e9b7e94c1993b9ba09b20947d98179ba89b00000000000000804d10280f9014af8500003b138316e78300003a11b810f0820000ec10380f8081b60de20e431065812d0d680d320aa780ce09930d000000801007711000000080c00ce0125c0d5581821063148c129b82c20f1013a311c3817c0e0914f810ae80210d540c5910a0807b0db2109a0e688100001310c8054d8000000000340654800000c6060000008000000000c20c0781d50d3510760cc0809408030b630add80cf000000f20465807308810600000080000000000000008000003601590339800000030140087b8000000000000224800000000000000080070ae10a5d0a2081a109300819067f8000000000000000802f063c0c280795808501bf0a860c4e818f0c580ca10d5a827e05560bf70b92821f8b558eb58fe291c7980a9daf9eaf9efa9b34a048a1cfa0489bd79f0aa1bea01f9b4f9fcea0b4a0ce9a249fcaa07ea0119a199fb8a06da00b9baa9ea89f7c9f5c9a969e34a0b29f9f9a679e0aa0bf9ee898e89d2ba0d99ee699759de89e089e6298e19cad9ed19d1299559c9f9dbc9cc0981a9c1a9dfb9c6698289c989d589d3498289c909d309d4197139c929df99c8597dd9bdf9c729c0a98ef9bee9cf49b2b97939be79c059c2d971a9c979d5b9dd895489b279d6b9d0e95c998249aa59a00000000410eda86ab1111116414269100009d1561160792900733145c146390110c1d1412143f8f1f119215cf154f912f13091700173e934614e917ec17c293fc13031826181e948e1334180718cc9358129b164218119443146917d0175f93af0f4415c81572912a112c14571440907210cc14a8131190d41009157214b790b910b614ba14f490f410cf1454159691aa1082131113e58f1b1142125410b48cb110ab13a8123d8fcb119013d7123e8f9a11b9134914f4900b116b134d12cc8f6f0e5411d8112d8fc0102813ae122890b0106312bc11d18e14111a1365137090b810f012c912099092115d128d119a8e7512f71251125d8fe01150139212c58fef11b4133413a290b2105b137c13e1909f105314a414b092e70d6d113012e897e498b09c949d989e159c1ca000a183a0aa9c71a07ca1c4a0409c6aa0d9a134a10e9c0da015a183a01e9b4a9faca021a0289bc39ff9a082a0209a5b9fcea070a0189a099fbca031a0429a639e18a00e9fb89a1d9eb49fdf9dba99a19d729f8b9e49995c9d6a9f889e159a0b9db09e489e789bd99cf09d349d5a9cba9c9e9d039d9f99759c5e9ed49dc698159c579eaf9dc7968d9bdd9ead9f2998cd9b6e9da99ca897279bc79c3b9c5395589a3a9cf59a0995d7984e9adb98 + image data: 19200 + _typelessdata: 8c23c0205021622660257a1f4c20f8252029041e9f1f72265629741a1d1b9e28fa2574106015372ad21e2f9346261c2d3a1b6c96532b07304c205b130e2d873003226d1d592ebd306023ce21432f87302025bb245b2eac2e5127ef27da2a88292f29142a622b2526842a0e2c8f2cb9230e2c8b2c092d89201f2daf2d0f2e1a1d0f2ea92eb32e2f17ad2e8b2f282f82971a306630e92f8b9cf82f01308a3037111514dc1e181e1a287188a21dd51b8228a09ae918ca969727ba9e9810e09f6e29d79e049735a3052a479daf15dba27e2a0a9c8f10e991d92c000000005a1c1321000000002e21a92111217022da2dda2dbd266727542cf42c06270028ed27dc283e28b028cb283e260f278f2873289522182c992c9a2ca81ff52d9c2ee62e731f902f2730263073185830c3308c30649d6731b93115317ea043314631f631ff988393770d998b251d1e9ede190e0bc627fc9e2118eb98a827b29597832496f81f7c9ffe8f7fa21a29259fd81873a32b2b5c9d22148da45c2a008000003018e41f000000003b1d5c2004204d23b626302b802494257e256a29eb201c23ab224d2156281f29a7288525482ccf2cc42ce6229f2df62df42da61e822f03300730e51da830f430e73042936531e1319b3164a11f337e33a532cfa20c332433e833d8a02d982e859694c61e539eed15eb963b28099cf7150d968227e514f917ab1ce91e8e9d6a16b09f4429149f351d08a0d72a17a098148ea3fd2900807b007397cd1c00800d0fc70d6a1dcf1feb223d1de0284124cc24981f9a289c209622c7201b210628b4283727a7242a2c782c1e2cec20fa2d322ef52d251c29304c304730e1137931b531ac31919dbc324a33d83242a5a234dc344a34dca5b234b5342e3561a5a09c79983e9b7e2060a2989a0ca1e228dca0389cdea11e29a6a2d59cb5a3a32a5aa2ec9acda3ab2a87a1d897fca32d2b34a04f0ca6a20f2a3496d60cd8990c1f878aad170e91cb1f6e1de6207316192852220b24761f3c280f21b822cb202120ea278c28a5264825972b0a2c2b2b3c22de2ddc2d922db11c4b304b304630981413324d322d32e99efd334f340a34a1a7e435353672353fa93d364436e836faa93ea246a1daa3552838a48ca1fca4132a6ea27da0bda4ca29bca2a49e1da49c2a31a3659b41a3692beda1468ddca2dd2b9fa0861af4a0a02bb39d301ce39f822a2b99861db59aac24d41837213c9cea28b1207523e31a14294d24be255f216328432729288525e7258129e429d9289a21bc2cba2c372ce321742f762f5b2fbc20b531e631e73141a003345e340e34c7a8c4362137373644accc37e0376238f3ae5ea322a3e0a4072822a2a5a1c4a43e28aba052a09ea40027f89c899da6a09b247d9e0c9d7ea2df2852a0cb9dd8a3ab2ac79f4a9417a2e829b39bec15939a202336988e1e289da929d20da01e849cb9297518461fb19cc628651eb12192917028e3225623511d4426ea25f125d122e821192988284727781a502c3d2c072c291f2f2f992f492fb0a2583127328431f3aad43557364c358eaffb3722387a38e0b398a349a427a68e2753a337a4a1a63b282fa207a3ffa5f92616a2b8a2b4a5cc26eda14ea2d6a5c826e8a0a7a138a55226bda03aa1f0a48c25dca0b3a1ada5ad25f2a046a215a6ac24d6a017a21ea66c2345a15aa292a617249fa1f9a262a66c233da1f6a242a65d21f2a0dba2d2a52d19aba18ca45ea6891d75a2eaa398a5751f59a4d8a275a6f4a25fa4c89f16a707ac17a437a4d7aabab0f4af42b0d7aea7b9f426671e2620bf25cb2ab11eca219e28882dca1d3b1f9e277c2d8b9a309b2028a82ca19dbf9b9a29262821930527202d1d1dff16cc2ca22e1a1c9f1ae92d4f2efe1f841e2f2fbb2ea02232236d300e2fc824a1245030bc2e42267927872c542a0d29b129da2a4e24c82a5d2b6d2cde1f062c142cfe2c6f164e2d6d2df72d8590612e532edf2e139a7b2ebe2e282f11a0a12fdb2f0830cfa25a30ed2f9a3037a20a115e1c211d8e257b125819001bc12833241217840c77293a285e95eba0032ca922109ecba4772ca49f629651a1022dd9a0bb1cf929ab2f4d94eb1cbc2eea2e8620b22105312830dd234f240432ae30472625270130612f55273428992999290e2818286228e7248121e52256225e1f982baf2b3c2c441ea32eb02e2f2f231bf72f03302c30759b373056308a309aa213312b312731c4a4af313831ee316da41881a60ce501fb16639f2e103d8c682847a2a098249e2f2a87a3e69b1aa4f62920a50e9e0ea67c2b95a22499eca6c52b71a23514cda5ca2c5d9cb41e0a2d992f221b9720013252312224f3242d32b0314925b926e02cf52dab241a263f2584261229f628e728fd24142c6f2c4b2c5f1e922dcb2dd92d1692a02fd12fb72f259ccb30c830f630e5a159316b318f3125a6b132bc32c23265a86f33be32b4337ba80080bd8146900f185ea22a91c49c5c29bba2b3988ea0fc2a0da0e61bed9c382ba2a4629cf8a4b02b85a3330d0ea5222c19a32d147aa61b2c229ec11935a44f2ab68c2b208c25d42c1821c124f228442d2c24ee2514262c2ae1243b261c24a225b4280d29de273524f72b602c532b6b1b072e372eb52d3899443051301e3075a095319031af31dca59a32b632c332b8a9543454344d3482abed347d34023571ac1894a093a796da1927a2b09c94a164295aa3339ecaa27c2ae0a43d9e0ea52f2cd5a4f09c44a6822c43a4e29a8fa6eb2cfea22a8e9aa5472c1d9f211b10a4652a2d98be1d349a8129641ee022901d0d2b86223625ba202d28a1240226d3238a24de27942881264624142b822b592aa912b32dab2d1d2d55a042303c300130f4a518320a322032a7a9a333bf33be3307ad54356a35483544af7636e8359836b7b0f19c529db59faf22caa26ca037a43f2936a380a0ffa4bd2a4aa4fe9f32a5e72b50a4509a53a40c2c46a34d19bea3cf2b8aa1141b7da2202b309f061e7ea1242aff9b3520f09f8128f40d2322da9cf028b41e9c245f18192810244726f220a9266b26a927e624aa226529be295d282993672c642cc22b14a3372f222fa82e18a9a03172317f3109ad75339433a13381b0d935ef35b835f2b2ae373237e937a3b4cea3dfa325a6982869a411a496a6102932a425a2efa5252975a23fa0c7a47b295ba26999dda34b2b92a1461c1da2ce2bf69fb020a79fb22a0e9d36232798ca27ae9a242410920529788e5224fb1194287e18362405126c28e21e8723b7184527fb212124af1db72355254025e7218a9c582812284926d5a6172cbe2bd62ad6aae02e682e8f2e3fafe130df300931bdb2a134b3349d34feb50237ab363c3759b896a46ca56ba77b280da41ca56ca750289ba2f8a393a68d276da294a2b8a57d26d4a1aaa18aa5532629a10ba247a5c1263fa142a3c5a5572761a15ca32aa6d726fba0d4a232a6b724d7a004a234a6a01c55a1d3a183a6e11a3da128a233a69d90c2a02ba249a64f9819a114a370a68ca397a0a5a492a624a7bba0a4a47ea524ab50a222a535a534b04ea64aa57ca6e2b38aa69da697a68db761a938ac92a8ffb97c2ab5208b21bd28852d6520a1227b292d2dc5181419ff254a2ce09dc39e2e24cf2d95a351a46c28ec2d559e1821182cbe25500e892b892b14206717c02ca6285c20f11aec2d6a28f920fa1f5c2fb02acc225121aa2fca2b4026ad260b2d4f272829112a192b2f1ec92a622b272c1e900b2c002cc52c5e9bff2c512d702dfd9cf92d272e4c2e78a0212e5a2eaf2e7da2242f5b2f592f62a4792f592faf2f26a5511dff1dd21e49291c282a192f1a502aa62c96128314892a6b2f820dbca0ea2b4b2ff29cb2a56d2cf62a32a00fa7dd2defa3478fd7292e3042995e203f30cc2f6520e6226432492f6a24bd245533cc2f5126b4266e31842e7727a228012b4d2882284f285f2868234b23de237422ee1c502b832bef2bd6103d2e772eb42e659e7a2f992faf2f86a1c52fdf2f2030c5a487309f30943002a7c730a030e13065a83a9e451c8a13892983a05e1254978d2a9415ac8db9a0322cac29f89e94a7832ccd288ba049a88a2cc6a449a23aaa872dfaa731a069a93b2e4ea3e820e63043319818e0222634313172232125db346931cb26ca262d32ef2fec2611283d28d32670292129a6284321072c392ca92b53983d2d502d622d9ea1d32e1d2fe02e37a4723065307c3077a6e230e1300331aea8b831de31ad31c6a90132d531003293abdea1f49b5ea2a02aaba3fe9cd9a1022b47a31d9df5a1052c53a5dba0b3a4772c25a71ea273a7762c0ea532a260a9d72cd3a5919e8aa9be2c75a30c1df922f82d0ba22221dd32ff31a6221f2575341432ad2569275730b42e1c2758288f286c2718291a2967282522702b142c042b8292762d892d3f2da0a2642fb92f472f9ba6fc30e430e9308ea9c131b631d83131ac10331e33ec326dad8433513366335eae1da2a69e26a2102971a471a05ea4d52bb1a523a12fa5402c50a679a169a62f2db2a525a100a8f22c6ca5d4a1d2a8dd2c1aa5a3a022a94f2c2ca38e9838a8722bff9dd2187b9c342cce1dc622842a192ec0228425ca28c529e32507277226e224ca27952838278a205a2ae42ada29f39ff82cf32c852cfea6072f132fbf2e68aa31311031053138ad5f32453252328caf1d342234fe330ab17e3458346d34e3b1e8a1fca11aa58f2943a4e8a116a6352b10a50da268a6052ccaa56da216a76a2cdca54aa0d2a6822c2aa53e9eb1a62a2c4fa4ae9ca3a6342b0da2298f85a5c629469f091bdca3b529a694ae20ac9d2b292d1e7c23231cd4264a23182644226324df25ae274a25ec1dad2856291e282ea14e2b362b832a63a8a42dbf2d372d6fac6b3061302b30c6afee31cd31d33127b22a342734fa333cb4bf347e349234e5b40ea4c8a4b7a75629dba486a49ea7662918a536a492a7ee2a7fa430a24ea73c2c56a407a07aa6e42b88a4d19f09a7f42a78a4d8a0b7a7fe2947a41fa065a7e72865a2379b79a5e326e09f0e1caaa1b824c1958621ea98f722201d33246b1c33249921df24072007207c24eb242222f4a4ec26c32619254eaaaf29d429b62871ad132dbd2c772c09b1192f022fde2e27b4c23184314d3136b6ff326532a13282b749a4ada5d9a71b28f7a3f3a499a7d727eca208a453a68726f3a242a4a1a610270ca4cca4b1a71b288aa4bba5aea8c32874a48da5c7a8672838a447a58da83d26b3a3fda48ba8992471a3c2a457a81c229fa239a4bda74b169fa19ea286a63fa383a0fda1c4a556a32da113a325a60fa780a1b9a3c8a5bfaaaba133a4b8a5f9adbba168a384a592b193a59da5c2a6b6b441a440a4bba63ab780a408a721a75bb8292aab1c851b2b28982d9e1b5e1c82291d2cb68cc2988525c628039d7da0da22032e3aa53ba65c291530fca2bda6dc2b7f27d9a4fc99dd28d619919ecb27ee1a771ee899442644260f21628f3124de254822cd15be2ce61e5c255726a22b369a02290a2a6e2a6a99742a352bd32b829cf42b082c9b2cf49fe22c2f2d422dcda0bb2de62df62d39a2082e282e782ea8a3cc2e132f232fada4992eb12ec72e41a60420181ce614672b5e2b4b0d788f3b2c082ea18e50964e2cf23073954ca3e12cf53038a0aca8a82dfa2f87a216ab422e3f1d32a448a6292e6ca52f19d02b5b2d8b16142102337e2c4c24dc245f34312c6025e624b631832973260528522934214c287a282628631c6628cf28862814109c2b262c502c5aa0c82d0f2e172e5ca3e22e1d2f252f9ca4502f6d2fa52fe3a51f3047304c3045a711301c301a30f3a883a1ba18619b392bada15b9710a1b22cdf297b9a11a4022dc730c6a023a7b32d1c33dd9cd6a8112eb32d01a481ac7b2e88aa87a4cfacea2dc3a6810fc92d672f3ea2ec1c7834a52e73215924e535db2e7c256a25e032652cf0253527d3259c21f028d828fe27f2114a2bd82bd82a20a0982ccf2cd22caea4092e1c2e1b2e72a6c02fb22fbf2f71a866305b30773005a912311831103104aae230dc30e63019ac9da4819d33a4d82cd1a43a9e73a2452c9aa41c9f0da5de2ccd26e29849a74d2df22dc29c63aa562e291d60a441accd2d66a974a413adf62ce0a52f961aa2d92dd2a5a11ee934df30e5219723c436b230a024e524c032f32db525f1265028e5248b28af28c2270819be2a472b3c2a7fa1862cd22c852ce2a53c2e592e2c2e0ea9213021300c3044abe130d130d93078acc631de31c13145ada831b731b43156ae53a40da15aa4602b6ea5eea0d4a45d2c81a691a208a6aa2c29a64ba332a8392de3a888a405aa212dc1a818a5efaada2cc0a6aca402ac022c77a601a268ab392cfea48c9ea52b102f4696322425332930da1f9f24c42d9e2b6c245326a72664234f271628092627935629de29cf289ba3bb2b072c362b60a8922d8d2d3d2de4abe02fe12f982fd3adfa30ef30ee306baf34323f321e32b5b01d3219320e326eb1b3a407a48ba6c02bc5a5c8a286a65c2c67a6d6a348a7922cd2a71da5baa8da2ce7a7e5a453a9b12c28a7dba4bfa90a2ce8a6efa448aaa22a45a59ca28da95d2996a2ef9d44a78029b99e0417779ee429df18f5214513222634214225c71fc71f0925d126a4246c9cdb2770284127f5a38829ff29052947a9272c322cb32bdeac402e2a2ec02d95af483033301e3072b1b131d031a2316cb3b631a831a2311ab483a388a57aa8a129a4a589a55da85c2ab6a509a568a8232c2ba616a5c5a80f2ceea5e1a426a9702b14a63ea5c9a9bc2af4a553a5e3a9b929c1a5b1a4b7a98628c1a47aa3d7a8832612a4c7a0cda79f23c1a07f97f6a48e1dfa16592279994c936b20d8246120d09e4723af246f212da614258e25d223e9aad827ac273226adad902a732a8629aeb0ba2c9c2c802cf6b2252f062fbd2ee1b42c2f1d2ffe2e8db574a447a53ea80c28d3a386a47da75e2781a314a589a74d27faa438a6d6a88b2813a68ca7d4a932295aa694a728aa0e29b4a5b1a68ba9e427d5a4e4a55aa9e224d1a4d8a5a1a93b21e0a4f5a5b5a9db0fa3a4a4a53ba90f9b05a307a48fa7a1a2559f6da05fa49da3e2a0d5a2e0a53ea825a163a306a6fcabfea079a3aca531aebfa0a8a35ba50bb179a3a5a499a5ceb3c3a0bfa26da481b553a57ca588a610b68a298d154f8e102a742c6097da99f82b9829069c96a25d2bf32c40a063a4e129302f6ba6faa7d42bd52d7aa8b5ab1a2c4428f8a50fab8625981040a12aa0dca4eb163ba1aca002a7511848a226a40dabd221849b872887a82225f2262f2945a1b928bb299829559c032ac12a652b8d9c6e2be12b742cf69ea42cfc2c1a2d6ca16f2d862da82d36a29e2dd62d0c2effa2652e802e902e3ea43d2e282e472e15a6a41e39957598f72a8c2a9c9db49f262d152ed99c3aa1722dda306a9f2ea5ce2d47312da555aa662e54300ea769ad962d9628c2a8b3adab2a6ea8ada371a1142865a2089f562e90252720f519a9300e1916251522482d659d07268627de271a9968280c2960285e9a372afa2a7c2a7c9cc82b412c732c16a12e2d752d722de4a33b2e432e5b2edea4942ed52ef52e6aa5762fa22fa02fb7a6692f352f472fbaa859a118935e9d732a54a45b9a89a1d22d022ce89e7aa5e02d6e3134a47da8102f51346ca4a1ab112f06329ea512ad372ee4a854a7eeaecf2c37a9b6a113a3e12a05a7fd9cea30292a609c50976432c62622233221a32c512024251626d02040199028fd28f9266092af2a582b802a25a0362c8b2c8f2ce5a3682daf2da12d76a69b2e8b2ead2e19a88e2f922fd22f9da849305f3058303fa92230173020306cab2da54e9f4ba4b82c53a6bb9e43a3312df3a5e2a12ea60c2ef02fe1a0bea89c2e423418a12aab7d2f213117a5b2ac8d2d8aa919a645ad1c2cbda6b5a1bdab362b07a527a3f7302d2da5153411ad33c12b1f223222ce2aa126d52478251b24c71faa276b280f260399342ab52a9d2982a1062c572c3b2c5ba5422d832d7e2ddfa89c2e942e932ea3aadb2fbf2fd62fc5ab8f3099307c30b8ac80305c307b3083ad74a5bfa295a5512c15a6baa244a6eb2c86a86ea4a2a7782d3ea82da4a1a82d2d8324ada2a9ab932d212283a6a0acb52dcaa711a693ac4c2b85a615a536ad3c2b28a464a250a6112b8f9b441af92fa4291820b8230a25a2255b23d9244b20c51cc425e1264a24529e1e2969296928c8a2e22a392b9d2aa8a78e2c912c862cd2aaf82dcd2db32de5ac762f6c2f482f20ae81309530653091af713051305a3033b015a558a493a7382c8da692a391a7e72cb5a7a5a432a8e52c6aa8ada518a9cd2cc4a826a66daa8c2c46a99aa64cabfc2bdfa8e1a6c9ab2d2a99a779a61eac6329a4a409a426aadb28f4a0659d8da62e28fa95941cfba15f241e1ffa234519641c6c2422269b23799c1f27fb275926ffa3ee285a29ab28aba8a42ac32a2b2a52ac882c512c192c55ae0b2efa2db12d40b0d52f9f2f752f4fb1c22f692f6a2ff1b1fda346a6e5a8c9299ca6c1a5d3a8ad2b15a645a5d2a81a2c9ca759a74caace2b6da7bfa7cbaac62b67a7a4a7feaa532be3a6caa6d3aafc29faa5b1a54aaa652838a585a4b1a9532670a4b2a3f9a8e2233ba2db9fada6571da9990a1deaa0789c6c1f1224081a87a19122ce24ac21e6a47d24fe24bd2250a9a1260c26bc24f1acbe2807282627b1af282af12962292ab16f2c492ca22ba8b26f2c1e2c092c6eb336a43fa560a86f272ba38ba496a7e4267fa4b4a600a95228c2a63aa854aa48294ba77da810ab48299aa62aa88aaa692868a56ca7d0a95327d9a4caa6b4a9f525fba46ea6f2a9932433a5bba5b7aaa71cb8a4faa51caaa6239da214a408a82d222e9d889e63a1bb1853a0dca117a5d8a5d4a0efa223a576ab83a1c6a22da584ad09a082a299a405b01aa2a0a397a4b1b15e9f40a135a420b359a13ea423a5dab3a126e395a89f922c7a2a3d9f01a4372dc12a72a11ba6502d712d4ea419a8f62c422dd0a6bca99a2ce62b2ca8acabd82a0c258aa6b7a920254290a2a453a81ea0cf1719a47ea826a60018a0a7d7aaf4a87923c610749b25a74b264f287f2803a17b28d529b229469d072ab62a5d2ba29d442bf02b512ce39d752cd92ce92c3da0342d6d2d802d05a1592da82dd02dc7a1d42d122e282e81a2fa2d1d2e2c2e72a4db15f996169b8c24182619a15da4fb2cbe2cf4a155a7e32e6b305aa31ea9c22e5931bda5d6ab392e2630dba72eada72c089403a871ad31290ea682a7dbadb123d2a109a6d0ac0a964a1715a320abdea04d24971ecfa58ca0ee26b5270625369d89285f29a4288f9c3c2add2ab12a849c842b1f2c482c509fc62c172d232dc6a1b22de22de72d60a41e2e602e802ee8a4b92ef12e082fc6a5cf2ef52e0e2f1aa7d498a98f1d9a4823aaa4469e4aa2692dae2a3fa3b5a5802eb93175a4f0a9552f3b348aa55bacd92e9831f3a6baaca02d44a807a85dadc92b1ea8a6a668ad6427e6a363a440ade522118d7f9dc3ab11156223da1df8a62114fd25b125c012c0128428e32844260b9c4c2ad62aef2925a0f12b482c462c63a2042d552d532de3a4ec2d0c2e052e46a6b92ed52e092f85a7662fad2faa2f24a82a2f672f622fa1a921a6dea004a58b2d02a8f4a0d8a3952ec1a875a48fa6852f8b2d56a691a9a42f6933e7a65fac312fa23007a8a4ac512d3ea998a754ac662b5ea773a6b2ac5a296ea462a5a4aa44274f8e979df9a8432443214c201ea5632086257e254f1e6819d2275428bc251899c2295b2a5429859f6c2b042cbd2b35a3bb2cf42ce82c47a7cc2ddd2dd62d34a9c32eeb2ed62e2caa832f9f2fa02f11ab6b2f5e2f5c2f32ac0ca6f9a367a6362d3ca749a426a7cc2defa889a56ca8242eb5a98ca788aa0c2f841e5ea7d9ac0c2f0d254ca8fcacfc2c8da78ea6d4acfd2ab0a6afa714ad472aa4a37da5eaaa5d288a95b29b05a41825ee1df61eb1a471206a239f236d936d134626f526c622529ebf280f29ec27e2a1382aa42a0a2a3ea5ff2b252cfd2b20a9252d0e2df92c6dab142e392e0d2e97acf02e152f022f34adde2edb2edd2ee9ade8a56fa55fa8ba2c29a7e5a43da88c2d9ca814a6eea8a82d7ca956a755aa812d5baa4ea8a1ab122d46ab0da8d8ab032c18aab8a889acad2ab4a899a8b5ac47295aa67ea6b2ab02287ba1d8a026a89b253990e01adaa301224f20d7222c937b1c4024e725ea218c9cd426fb27ec2529a29328f6284d2820a7f729242a94295baaba2b782b042bbfacce2cce2c8d2cbfada02d5b2d612de5ae712d8b2d862d7eaf55a55fa731a91d2b6ea746a652a9ce2c22a794a69fa91b2c32a86da812abec2b3da8aba8a7aba72b48a8eda838ac0c2b02a8dfa84aacce2916a76ea811ac32287da677a79cab3125dea467a577aa2c2131a164a123a8091c9999a09168a33a99f61d3423fe137fa08222d424ab20b5a15f24e424a022e1a64025b925ec2343ab77274727f32598adc62899282b28dfaeea29ba294829ecaf5c2a272a032a59b0caa4eda5efa887276ba3dda476a7182648a659a836aaed2812a826a985ab8b29bba704a991ab102959a7eaa8aeab5e28e4a6e8a8abab1628b9a6c6a8c4ab3f270aa684a8a3abb326a9a433a701ab452412a405a6d9a92322f6a1bba4d0a84721a7a014a3dfa58420faa173a3d6a57ba57a9faea1daa432a929a150a362a509ac489fdea1bea4a7ad56a1a2a2aba415af389e6da022a342b0499e78a09ca0bcb04f203a9bfd9a262cc9244ca172a2ff2c3e28f0a489a6c12d012a41a6baa9fc2d2c29ffa7a5aa942c0b26d4a6a9aab0296f191da808ab3427019aefa81caca51f6f9a71a92dacaea292162ca8cca88fa36b24b921e6211da19a2774280d291f9da128db29192a0b9bf229c22a332b1899462bf22b332c689b662cb22cdf2c0c9d182d4e2d6d2d519d342d942db62d739d752dda2ddb2d839dad2dd02dcd2d28a1469b64a06ba0602cf899cca2c3a3562ee123cfa39ca7b02fd32b3ba71baad62f322d9aa8e4ab4c2e6227cda88eac8e2cb0a624a9fdac612a85a60caa66ae0026e3a2afa9e9ad5f1bf0933ca6e0ab579d1e233b17c0a5f79dc02719272325169b0d29c7293229ea972c2a072b402bd297622b1a2c3f2c989a9d2cf02c092d179e862db82dc22d32a1dd2d292e352e12a2462e832e712e21a2532e8b2e722e17a4349f7b9858a1f02baaa326a1bda21d30e69c7ea291a65130452a0aa8b0a96c30652ef5a83fac072f37266ba82fad2f2d8ea841a91fad7e2b8da8aaa82cad2a2886a3fea6a4acd823979c5fa319aab21ef9205e9a2fa73a1932264a25941d6092c6282e299e27d09b0b2a8e2a292a4e9d852b042c032ccc9ecf2c092d152dcfa1bb2dc92dcf2d8ba34a2e7d2e992e5da4af2eec2ee72e7ea4992ec02e8e2ee5a55ea535a034a4412d36a75da2d7a53c302da8e5a45ea89d30fca733a74aaa5e30a81bd7a897aceb2e7da59aa82fac1d2d71a887a8a1acea2b22a73aa80ead112ae8a428a750ac6126bb9eeba2a0aa4322c51a609127a79d1cb7248024481cd912332888282e261d996d29352a2b29e89d252bb22b5a2bac9f8b2cd72cca2c7da3962da22da22db1a5392e652e552e64a6912ed52eb72e80a7852e872e5c2e8da867a5efa2c5a5f02c39a85ba53aa8b62fb5a8d8a66ca9e12f54a9e3a818ac323033abbfa906ad8d2e43a96ba961ac7d2cfda74da936ad8c2bc1a7cba80ead742a7da5f2a7f5ab5f28459e57a039a8cb240c102298cea6921e29226a2015a042938826ca26e121559ea128f2287a27fca0022a322abf29c3a2a62bf02b992b61a5d52ccc2cb32c92a76c2d952d6e2dbaa8f12def2ddd2daba9c22dd72da12dd2a9eca51fa6c0a83e2deba713a6b7a8a22e06a9b2a7fea9c12e8ca9cfa878ab612efea914a91eac822d12aa17a905ac1e2c06a964a9a7ac012bc8a86da9c5ac402933a725a818ac3427d7a1d2a157a8ac246d90331bcba3f521772086217199711954243825f821989c81269527722543a05828ae28022851a29729b829312955a6162b1b2bbd2aa0a82d2c3c2cef2bb5a95f2c6e2c2b2cecaa572c6f2c1e2c1eab6fa54da801aa7c2b28a858a748aa932d21a82ca79fa94c2b9ea867a9dbab562cc8a858a942ac422cb6a8f7a9d1acf72a6ca810aae8acbf293ea8eca9d0ac58285ea70fa96bac352452a576a7c6ab7f18b1a130a403a9441ca6992b9ba8a419938e1ca220f693f89eab215e24ae20489fc523d324942297a309250925a82367a7fb26e0261e2585a91928eb273f27d0aa9d2867285b270caca428732801285fac25a552a75aa90628a6a31ca6c4a8f42672a77fa987aba22916a8b6a914acc7292fa73ca9b4abef2880a75ca909ac2e28aba7a4a93eac952766a76da949acaf26b4a60ba917acaf25fea4e0a7d0aadc228aa3f2a599a96a200ca32ea5f2a8cc1fe5a2e8a4d5a7d31d4aa4f2a460a68ca26fa05da2baa42da5eaa009a32aa5a0a76da096a188a4bba9e9a025a262a428abfe9f14a093a242aca39d09a050a15aacf61cd9901699812c9f1ce39e55a3702de21dcfa2aca5bf2d5a20dca565a8352e291e0ea850aa1d2d421963a758aa582af38e7ca8d5aa9e28129c30aab5ac35252a16fba73daa66156e21199e6da3db9aa224452538256311e927cb285d299a1beb28122aa82aa71c0f2a0e2ba52b521b4d2b192c4f2c7b1b532cb72ce62ce51bff2c3b2d592d221c072d662d852d351c5c2dbb2db92d3e1c822da52d9b2dc0901a96629efda0f42dae9cb3a165a3c02f069e28a4b5a67530b0a06ea6d5a9ad308ba15aa879ab2f2f85a4eda840ac552da9a714aaf8acc52b94a554aa63ada3255fa177a8ccabe31d0720159ca0a63d141e22ac1ec4a0ef12fb26fb2644264c18e72886299029a41a162aec2a622b8b1c5d2b152c4e2c8f1a7e2cce2c062dc11a7b2da52db12d2c18a22df62d1b2e47180b2e602e362e261b102e4a2e342ea2910080a209ce97ea239ca1f2a048a408304ea27da2fea778318ba4a0a500aa2e31aba552a80daca62f53a70ea938ac602d53a83caa3dadfa2b9ea877a981ac922862a2fca5deaa94240e1bf49b58a691200a20dd1092a3f81ba9253c255b22fc11c128f62877289018f3296f2a482a8018882b042c122cfd11b52cfb2c0b2d9c189f2dc42dca2dc018ed2d322e4d2eeb18552e862e922e2119342e732e5f2e869200807a974c9c7724f7a52fa22ca6d0306fa8c0a753aad43135a949a88aaa4231f6a8cda824ac0330c9a8dfa815acc72d4fa88aa9bdac952cfda845a99dac632ad6a57aa8ecac4927379069a0c2a8e520c722482128a08b1974247d24cb1d9f1235284a2888260e197729e0291c290119002b782b482b11197b2cb62cac2c651c792d992d7a2d851ce72d0b2e002ea91c392e762e5f2ec41c232e302e222e80990080ec9b559edb234ca795a55fa8563073a9b9a83caa91317ba9c3a913ac623173aa34aa8cac08309aa9a3aacbaca72db6a872aa1aad2c2c41a89ca9deac5f2a3ba58da73bace627d89f989e90a7d0243b20c11dd0a4111de621cf1f1da0509378267326bd223093882893287a277019e429052ac2296b19722be42b8e2ba61ca72cbe2ca52cd41c272d372d1b2d0b1d962dbe2d882d351d6f2d602d3f2d0b94dba57ea6c9a8852dd7a890a746a962302ea90da95aabdc3076a971aacdac843032a987aa03ad312f2fa916aab2ac322dbda8e6a9bcac092cc3a8dca9b2acc529cda7d1a81cac0e2802a159a1eca7c1248b19a31ef99ff91fc620ea2178939a196524f224f72157131626b7265c2597191d286b28e427c81c5729a6291d29fd19e72ae72a962a331af32be12bab2b751a412c442c0f2c9a1a282c132cc82b5f945ea472a8eca979297fa716a9a5abf22b78a5c8a420a834254ca9ddaba0ad522c9aa99fab67add72c8ea934ab33add32a30a9daaa62adb6298fa890aa20ad1e2868a7c8a9b5ac1824b4a560a82dab411776a229a512a9a81bb099059d8ca43219991c9b1fe493eb19b321d123ac202794c7235d249d221214f22469254c240b14cd26b3268925541ae927ba2777267f146a2897286c27c09437281128fa26119e90a53da8bea9622855a47ea723a9d72704a8f4aae5acbc2a2da840abf4acc52ad7a60baa38acd92892a7e2a93dac932704a818aa66acb626bfa7e9a95eace82566a781a92aac0f25f0a578a811ab702368a43ea63fa9ba1e7fa333a5daa8e612d8a21ea51ca82519e6a4e1a5e4a6619169a020a317a55099d4a0dda295a4c91955a074a26fa4421aafa002a3cda48514c89f1ca196a3011bc89f1aa15ba2a0942f1d4c1c6f1a902d4a17e79dafa20a301f16c6a4efa65630ce16fea56ba8532fe415e0a7c1a9612efe0f32a89faa2a2cd917dba8b7abc82ae026b7a16ca61128ca2bfb287826f224042c402a47298d229e285f281d28a420d627dd285029d21e1329032adf2a8e1e042a082bb22b981d6b2b302c592ce81e6d2cc32cf42cd820092d482d6d2d17211c2d6d2d902d8a20642dc12dc02d66228e2daf2daf2d0d21ac0db19911a00c2ff99ca2a197a49431afa0cba52fa8763253a146a7b0a98131e8a15fa8dcaa333044a596a970acad2d05a59ea94fac782b862a09287596dc267531b930482f601d47318630ed2ed296392896281628f41c0a271528ac27c61c1c29cf29ee293920752a3e2baa2b1a1fab2b2c2c702c3c20952ce52c1a2d6922942dbf2dd22da722c02dff2d2d2eda221c2e6f2e662e2d242a2e622e6f2ebe22e90eaa196d946e2ed99ecb9eeea14d3221a16da5baa6923300a221a541a871320ea31aa707aaa23090a686a94cac042e9ba720abfcac012c5da480a64fa9fc28ea31e830c62ef8250134e2322e31241ed12908298727b11a89250e268c24bf187828c2288028251d352a9c2abc2a0f20e72b3a2c3c2cd620cd2c1c2d242d0924d42dda2deb2d9324eb2d392e492eb324862eb02e932e6b26752ebc2ea72e7c25baa0379f26a4bc2fffa536a407a7ca33eda88fa851abcb3483a84ca867aa3c33d0a70da88eaab43002a848a9e4aba42ed0a736a9c7ab862c77a6d1a887ab3b290625f821f7a24827b734ff3336328e1ee2307530172f28a140278a276d2651197e27a327a0266b208929d02969294f21602bd62b992b14239e2cd72cc52c7b25b82dbb2d9b2d9226e82d0e2e222e3e27662e9d2e7b2ea3287e2e822e692e0b2891a4caa44fa6492f1ca828a89ca91f3335aa5daa2cac5734f3a9e9aab4ac2e3312a969aa79ac6d306ca81eaa3bacd42de4a79da96aac6a2ccfa78fa92dac5b2a00a541a66baa06274134b73329324ca12e3591346833e4a87d2718278125c99c78267e272525791ca228d8286b28e421652a8b2a492ac523032c272ce32b5b26da2cee2ccc2c02282d2d402d3c2dec28bd2de92db32d292ace2dc52dc42d9329c9a52ea8cea97c2edaa8f5a833ab623247aa35aa97ace232aeaadcab23ad633114a931ab1aad9d2fd9a8d2aaf6ac402dbaa859aaa3ac012c99a801aa85acfc29eaa73da90aac702805a1cea210a7a12418201b228f138f13ac21fc22be1cbe1c9a248f25f723372080262d273c26ee226328b92836289324a629c1296329c4264a2b062be12ace28c12bf02bba2b5f2a682c752c462cfc2b6a2c792c4a2c742bdca06ba871a9302a0fa963acdfad283038aae5ab68ad602e98a9ccab1bad652dcca85fab30ade92c63a95eac1dae032c09aa16ac67ae7d299da834ab7cad5027eca6fda94eac69240ea575a86aaaed20b1a28ea5e3a89f209199049bf9a34b22ad1cab20e3195c23cd21da23a820c323e5236e24a0225a25022501255624e3266a27d52625263629f627d42709272d2b8528a828d2276b2cec28be2847280e2cd1a42ba90cab9d2808a579a92bab232977a890ac1fae942b9da8dfac69ae842b10a80dac60adf72821a8f7aae0ac22263aa89eaabeac0c25f6a75faa73acf32476a7dca926ac932475a6fda854abfe233fa591a7cda90b2161a4d2a5c5a8df1961a34fa5f2a78e196ca5e4a6a2a7692048a144a3aea4ae24f5a00ba3aba40e2882a0b6a292a48329d8a12ea3e0a4072bfe9f3aa1bba3af2cc29d1aa098a26c2c891fc521a521582da9188f991da6893330990ba8efaa38349391aba729aac830351120a8feaa932e2f1c1ba9e0abc12c0f24b3a44ea92b2cf5253f23191a3128e528a3278c24fc25c82c7d2b2b290f269c2b862a9e2952248e2867297a29b7201429012a982a1d20ec29e52a782b3220512b1c2c3f2c6920722ccc2ced2c6321292d602d702d4d22382d832daa2dc821962dde2df62d2724d92d082e0b2e5a24c017059c9da11e2e999dffa575a976342aa152a944ac72358ea1eca896ab2f32c9a29da90eacfb2fc4a461ab9aadb92c1b2437a696ab492a7730a22e112c8122d432c031a9309ca282332532bd3026a5a72e302e3a2da5a0b3282029ff285c181e29cb29e329181fce2a8e2bfb2bd620072c722c9a2c3122cd2c172d352dca23a22dc62dd62d6324e62d262e3c2e8d249a2ebc2e8d2e5326ac2ee92edd2eec25061e021c4516f92d4315ada0b3a43a35339c48a77aa84736fd9945a6c5a727334f9db6a753aa1d306fa5a7aaa0acd22caca6a8aa67ac022b6a2d462b1d251d253734b932fb30e8a63435a8345f3323a9bf310431fd2f71a73828d7285628c412b4280e291529a81ec62a2b2b712b3f22262c682c982c4524022d432d5e2dfe25142e212e122e0727482e852e942eaa27fb2e572f432fa028222f8e2f832ff028c99ec79f73a2062f3fa89ea883aa2e376ca9a0aa24ad0c38e5a6b3a82fab1d34bfa4b8a73ca98d3018a5a0a8d8a98b2d10a640a8b8a9ad2b4da51fa74ba9b02829311430492de1a4c736a2355e341aadcc33fe328431d9aa97267e27502639191a28542802288620582aa72a6d2ac123002c222c172c9825ca2c082de82c1428fd2dfe2dee2d2e293d2e7e2e682ea1291b2f6f2f322f412b662f962f7f2fec2b0ea4c9a460a61f2f7baab6ab13ad7a3601ac20ad29ae083714aa28ac6fadcd33eda833ab00ad8e2ffea787aaabac6e2d46a70baa8eac8e2cf5a604aa40ac7b2a8aa541a894aba52543344c3391312baf60349233e3317baee9264027a1267c1911273c282727a3215e29b1297929b124d42a4a2bf82a1627242c4c2c2b2cad29542d4c2d202d362bbb2db22d9c2d4a2c952ec22e772e602dfd2e222f252f9f2dd9a880ac0fad0d2e1daba2ac1bada7359eab35ad64ae553632ab4caddeaecb32d2a938ac94adc12eb9a8dfab76adf52c60a8e8aa30ad492c4ea84faa6eac8c2a60a734a941ab432889a16ca47aa7cc22b21b271d4699271e9e200d22e41d7821cb24c825b524422482271728b427d625c2281b29c7284a28e429342ac229862afe2baa2b702b882c622c542c2d2ce12d2c2d332d012d642f8c2d962d5a2d9d2f21a63eabe1ac482a83adc1b186b39a30ebad9db106b3d032c7abdaad3baf082f4baa5dacabade42bd1a93aade2ae082a00aa9eac34ae0027caa8e3ab63ad0025d2a77daa51acd523a2a5dfa863aa752298a272a57ca86323d0965b985fa20924101e7022e51c23258722cb239a21e02668247b249822b12842253b257624382bef27442772261d2d89282b286527e12e2d29092984283e304a2a1c2a8c29663020a618ac48ad542786a730ad6baeb72a1aa9c7ad7caff829e6a894ad21afe1287da8afac14ae1f263ca8caab4dad4c2417a8d9aad4ac7c2262a72faa3aacae218fa66ea976aba823d6a5ada86caab5248ca515a89ca90e25f4a414a7c6a80f2470a4caa593a77a1f64a5b4a61ba805268aa1a3a3e4a4792948a172a3e6a4dd2bdca036a3dca45c2d32a1bda39ba4242f5ba0bda145a4a430239eb7a113a3a030f6208825b126b5a9281bd41ff4a0c7a58a9c9aa57ea95f30149252a826abc72f6518e5a689a9842ca12107a8a8ab7e2ceb28209f01aa6a2ce22b4b261718e129152df62acb279520cf2d5d2c9629dba0aa2b852a0029e51e3428b728c328652043283d29a229961f042af02a7c2b8d20a92b492c572c6721a82cf22c062d5721642d992da12ddc22692dc52dd02d9923222e5b2e492e1725612e922eac2e5426901b2d95db9f85a8f99173a26da83ea7fa9c4da86eaad23025a060a94eac7a2f17a249aa84aca7283ba57fac71ae5925eb27d2a54bac2a184b300d2d0c2abca4c3318b30f12ecba8ca31e6302f2f12ab542ddf2cdc2b2ba499289a28a2284b1d2729bd29ff29cc20f52abe2b0a2c5521442cb42cd12ccd22152d672d7e2dd523072e262e2b2ecb244f2e902e9d2e5d252b2f6e2f5b2f06278e2fe72ffb2f7e2800009015fe0cfe8ca11f781916a1c89a8b1c7ba4bfa7ac315e1531a76ca84d30279b3da791a90a298ea4b1aa98ac5923a1a5b0aab1ac409c772c4a268c976ca95c322f31f22f9aac4c3281315f304face52c312c662a9ea1cb26ce26ca26fc1e0c2963295e2976212a2b712bce2b89236b2cb02cc52c00255c2d9e2db72d0e26752e992e9d2eff27fe2e3e2f412f9f28163037303330c0293930553061304a2bb48d4d97e2990b95a0a477a615aaa2a25fa75aa998ac54345aa79fa9e0abe83192a2dba646a97e2b9aa301a722a94f2830a427a719a9402604a43da674a84d205f290e27db1f49165530de2e1a2d2bab382611263b2478a2c1236023a321c31edf280829e5289520b02a072bfc2aa8243c2c7c2c6c2c7326402d802d732d62289e2ec02ea62edf294d2f952f702f402b613086306f30de2c9f30af30c430962d298cad9a839c1a988ca855a97cabfca60aaac2ab54ad4f341faa91aa86acb83151a7eba880aa8d2cdca6f7a886aa5e2d22a648a867aa372d1fa68aa863abb72ba8a5a0a878aa2127e29d54a43ba7fc9c2722ae21411e781c2e24662448227121f8274e28a727cf20aa29272afa29de257e2bfc2ba82baf28b72ce22cbd2cb32a292e492e172e732cd82e342ff52ea42d4630653040306d2f9430ad30c030243032a1faaa19ac57a51da965acd8ad8ca694a9e5aacdac06340bac8fae04b0b430bea9b7acf7adb92afba9e5ac75ae562c88a970ac06aef92bd4a85babf7ac7429c7a79ea9d8ab8d2541a21ba530a8fb2047195b180a9ebf2033203522811f1623be241a26092599242a2897284f2839275929f6296029a029f62a492bd62a5b2cbf2cbf2c9d2c142e822d922d642df72f3a2f3f2f0f2f5c31f32ffc2fef2fb6310080bba5e5a62699d3acbbb13fb38fa741af5cb48cb5c728beadcfb122b3792c4aa9b5aca1ad0e23a3a81aac4cadb620eea83eac96adba21a1a810ac59ad1d2203a8d3aa94acd2211ea5e6a82eab0722d6a2eca44aa71b23bd90ac18749c3b24921f89226920a8248722bd237e21be27ee240b25b7234d2aaf26ac2653251d2d4629ea282b282d2f552adc2950291931052cd02b3a2ba0328a2c972c7d2c1d334ca7fbac3cae80a350a853aeceaf2ca1cca813ae73afcb9ba2a862adc7ae2f9b5fa892acc4ad14a029a8d8ab14ad9c908ea79aaa82ac9b967fa6aba9abab5519caa5d0a889aac31f05a529a89ea9f92293a455a7eca81e25e5a3faa50ea80d267ea323a567a6db25b2a394a5bca63429cfa102a422a5f22ba6a1f6a337a5b22d55a1e7a3aaa4da2f02a27fa336a56e3149a12ba12fa415333ba158a1f7a27f337320af260d2878af3e2031251c1f1cb49691a9a49da8e0b4b39df5a87aabccb09c9783a8c1aa07a7a713b9aaf7acce28432606a94eade529822b6b2507a6b2a24c2d462b51289dad752cc82a56285ead75282927bd25bda5b825bf269526b916ce266c288e28671cd929bf2a072bbf1ebf2b4f2c742ccd20c92c0e2d172dd121992dc22db42df223a12d072e072e66245d2ea62ec52e8b25cf2e4e2f472f15270000a915ff1394a4bb1a479dd7a3a1b3be180da69ca830b5539f31aa8eacfdb115a43cacb4ad8daa0da637adc9ae98a4369f64ac53aec5a56a2b4b9765a52ca8f92eef2be829f6aba42d432c382928ace1244824d6223ea5ec257826f72529114829de29da29e71f312bd82b0d2c2621722cca2c022dbb22752da92dc42ddc238d2ea12e982e9025bd2e292f282f2c26bd2fec2f0830692733306f307730fa280000651383106ba04722c720061ffab3b423071a569bc9b5592006a225a528b2cb9d4fa89caa10aba5a285a93fabc8a88da4e0a9f6ab9ca8ef9d7fa644aa5fa42a26301f67a3941656249521851436a2731f8617ff9c239b3c25cb2473237a1a0c298c294d296020722bd12b022c6623c72cf62c222dfe24e22d1c2e202e2d26362f502f472f5b28d22f1e301c3054299430c530b930ec2adf3027310731202c00806d9041946da17e953599b1a3b8b5ad9e36a23aa81db8569c16a3e3a542b4e69b73a12ba5c1ab419ca7a15fa5a2a6b99e9ea3d3a5b7a49ea1c2a4f5a77d1da59f97a401a90928ad1b449c70a3ef935315b416f097f0970025dd242c238718c0281929d6281b1f2e2b8d2b9a2baa24ac2ce42cd32c0027e82d1a2efe2d8a28bb2fad2f872f742a55308a306630062c38315b314a31772dab310c32ea318a2e00805798739a9fa07ea426a532a61eb541a633a6c1a8b9b7d7a367a449a54cb4029c9616e497e4977a12c121ca22e92ee8188621ac20d32f26a0bf9b66a4b32c4aa3e2a439a888254a9d00a306a55e9c4e1e0118a798a7984d249a241222db98c8273628a527701f392ab42a532aca253f2c722c422cc928932db72d6d2dd62aa12f932f3d2f002d73307a305730922e7931a4318e3170303432723258324831fda3f3a8b5a9a9aeaba4a9a8fda8c8b463a490a38fa16db648a641a9eda968b324a84caa0cacbaa9cda952ac96ad7327d0a97eacccade32922a92eabbaac3525e4a6e2a8ffaa971cdfa249a4bea68912ea0f6d11909dc418df20eb2266217a1f6925e02646265b2363280c29be28b6263e2adc2a7e2afb29352c6f2c082c992c3c2e1e2ec52d122f6d2f9a2f292fe230da30f430bb30a932c0310432ee31d233cfa464a9afaaa5ac16a900ae54af46b2c9ac9cb118b346b65faacbae28b052b1eca736ab7dac99a9d0a612aa9eab18a2f3a7aaaa4eacf59a68a74baa22acc51cffa53ba9eeaa291ecda2f8a535a81e20909fb29f12a27420ba901b1f741ce620681f18231f210d2244233324462179263625a2257424f22a562836281827a12d2e2b502a86298030412c1f2c322b8732e42d2a2e8d2d8134af2ff72f0830533526a67aac74ad02ab79a76badb8ae70ac2fa7efac41ae12ac95a6e8ab25ada6aa9ea6b2aa78ac90a8d8a67faa42aceea584a6b8a9c6abd6a335a646a913ab74a1c6a5c3a847aad09d1da5d1a72aa95d196da3a7a592a7a422bca132a481a53c257ba12aa46ea56b26e0a14ca463a5482920a230a448a5ec2b40a29ba30fa5072ecda0a5a34fa5d23077a485a46ba5233374a284a23fa4fb34c7a2dfa0e5a2c13555214e260a2898ae71200026d12556b0dd1f6522a3227fb2778dc9a401a706b1a19c07a838aa75ad1aa0f8a628a947a2ec9fe9a9feab051230a43da758a8fda53424791cea9984ab8c263b24c421a8a95723262156213da4c324112588242e990728e928cf28301a542aec2a382bd21df62b452c7e2ca520ce2c112d302db321d12df52dff2dda23de2d3d2e3b2e54240c2f982f792f6425112fbe2f982f8225a0205a1e3e1c29af5d20a020171567b213215e95079d44b4ef94b8a700aaafb1289c73a6fea848a3f29cbea4d1a7c3121e9c29a505a8bc195d9e5aa448a6388ddba028a54ba72fa214a0eda2a2a53ea66e196e90759c92a5a8256426a9255ba04d29cc29f229e116612baf2b232c2d1dba2ce42c182d4a21c22dfc2dfd2d0923f02ef72e192f2e256b2faf2fad2fd7256630ac309c3049288730e930ce307b284c21cb1de11347b0de225d21b6158ab31824601f571dd0b4e920c6944d9f12b22793569f4ca298a050975a9fb5a2d18aae9492a00ca459185008c79ddaa0771b6f176799f39d998d2f13eb99409c03a0a01e1b198990f4a18825f72583255d9d7c29df29d729af17142c1b2c452c50203d2d572d792d9923772ea62e982e5b25093008300b3005287630a530973007298631ce319631ca2ac8310a32ef31362bf30d079c25a050af4b116995f19f18b4ca189b16da9d65b5f81b331bc69573b24a14c614a48cc9a033146114b20ab28a9d18031a7219ee166e1a371c0b1bf619241c381d121c6717101cb81c0519889f4320c71f431df8a07b25c125912465a01829a9295a298298fa2b012c022c0521412d602d4c2d3f25dc2ef12ece2e2428883076306330332a46316a314331232cb632f532b032a52d1d3359334433932e60a016a49ca57daec6a324a6e0a726b32da270a44ea61fb5f89b1195ab9cbcb3f91b7222362378ab991a61205c21328df11ca5208f21b21fae1d8b208620961bf91d4e2168219b99261d4420951ff5a0e8205421fb1ec2a0cc2439255d24ad9f1a286e2812288b18792aaf2a7d2ad323b72ccc2c9a2c3927982eb52e462eee29b83090308130dc2cca31c73195310e2fd13300349933c1302f345f344334e93152a184a665a87fae60a1d5a482a561b0868efa22ee222ab1b5117927822848b07c9a0820191f87aeaf94c61e8d1c71a9d110401fe41d17a11892b61c841629a19193ca1acd9d5aa47e978019749128a3b51b731ef21c97a06e2186236f224d9d33250e2620251a1c9728bb28aa285224f02a362b192b84283c2d4a2d082d222c1f30d82f882f2b2f353148312731b231ab33f6339233f0336534b4349c34f0344fa231a9a1aadfadcba539aabeabcaafdda5f4aa55ac2db18ca571a959abd3b0d1a4bca7aba9dbad11a102a39aa69aa63da155a14da4029feca0daa032a3a19d399f029c509ee99c179d821c141fde9b838f86207b20139c6b19a220491f0c9cbb2074229720d71ded23eb23d8219f25f2266026a7258429dd297f29d128e62ce72c6f2cd92b7a30562e292ec22da93324315b31f830f1351d334f3358339e37eba576ab86acf0ab48a627ac0badc3ac28a555aba9ac98ac2ea46fa968aba7aa26a3aba708a946a9c6a397a706a907a81aa47aa7f7a8ffa512a414a7a7a862a4f6a3b4a65ea8c1a228a3a0a58ea73c9ea9a115a413a5f61cdea03ba3d8a45e224da18da324a5c924f0a15ba47da5af2761a156a48da5792a8ca11ba489a59e2df89f4ba38aa41b3185a48da4a1a55134f4a1fba136a4bb36dca58aa292a26a3846210b285c2954ad0321b4265e2780aee2219925ad2516b06320fe1fc01c4eb09617f89c309d83ad1f9ad7a117a461a8c59749a756a988a5239ad2a464a713a107182c93c497c2a4f2200620ce1e4ea4052347216920d4a0b42649268e24029f04299229ac294a9afb2af72a612be58e2e2c362c572c0f1dce2c022d2a2d5c20cd2de42de62d59226b2e822e7a2ee7235b2f8e2f772f241eee2f1130123038220c1f67243b258aaedb21e8237322ddb0f520ec20e51c89b1b620cf981e9f8fb10315d59f44a3eeaa279784a2b8a4e0a52c9792a46ea7c1a268998ca302a68fa1749b4fa340a40ea40e180e9cfc9ed4a45a22bc20071d75a475269a26a725c5a1e4299e299329859fc22b742be52b4f99d82ce22cf32cc819cf2dfc2d152ec520242f402f412ffe23123020301b301225e230e230e5302025543171317331fe257e1e252045209daf1920771ddb93adb17b20351c689a5fb2f71e8298739e80b11f13b39d6ea132aab48da49fe3a169a2010dbea1e3a464a0778e02a0b9a2109e471a079eada155a1c61e8514158fbfa39e23db212b204aa49f26f1261b26bca1002afb29142a089d162ce72b202cc210512d3b2d4f2d791fd92eb52eda2ed5216f3068307130742551314d313931e02757325c324a327828383347333433962700804e94e09418a0b19509a2e0a320b1e20d549cffa27eb2381cda11499934b1301a4f1c711a62aa8b1bf41d491d6ea6771c421eed1dc9a1841d121ea61cd79e251f0020841f79a055226921751fcda2de230224152315a359264c26ac2503a1d229c629b429c99d092cd52b092c8e11772d592d7b2dd2218f2f712f6b2ffc2430310d311d31782886327f3271328e2a1e3423341a34fe2bcb34db34e034952c0080289a109c62a01ba15ca65da897b01ba2b2a6b1a8ceb189a0daa460a686b12a0a78157290f8ac9e1b4c20b8202ea9661d0822d4234ea5461ed0214422bda080200a24752442a2ef217824d82422a40924c82498249da351258e26172662a1df28fb288428c59c252bbd2aa82a401d3e2d162d012d46248a2f632f932f4f288f31513169311b2b7e335a333e33bc2d273524351035452f3b3646364b368430d38df79e36a046a45aa129a7a8a8aeae92a23da79aa838b0a2a110a696a8c8b0129e7ba082a201ae0c100e1d911e61aa171cad229a2443a73d1d4c23a324d4a41c20af24ef2464a5e41fb524f9247ca57f22c024e32223a6352427255923fca3ac2599269e25409b0829fb289f28041e0e2cde2b6b2b77254e2e0d2e082ecb291631c830c730382d1b33de32b532c6308e3582353d350e336c378a377f3783349ea1e8a6e2a891ab29a4e7a837aa98ada9a4e5a807aa80aee6a25da7a4a82fad3ba19aa43fa642ad789e5f9e04a085ac809de21d3a2115ab429208238e24f3a9ee0c53246a2557a990148222a422f1a7311cc221b51f30a57b193d20811df39fcb1e5720f71cad9164248f239520142328281c27b525e227a82ad129f428b02bc12d612dc52c6e2f473002303d2fe232cb33d5331e3305361336b23634365238eda1dfa8eda9d8aa59a498a9daaa36ac74a483a914ab5dac9fa373a806aa5aab42a16da63ca822a90ba07ba489a5eaa4a59e25a2a0a22b9fa19d12a1eea1429be49ec8a1aea2b89bf59ff9a253a4c99cada06fa3f8a4799a02a188a3daa4701048a19ba36ba54b1e21a1fca379a57223afa1f9a3c4a5422878a31ba59ba6d22b53a2fea4e2a6ea2f53a588a682a805342da833a8b4a9773765aab4a864aa263a3422e325262852ac4f21c926512710ade42094251626faac781f2f24c92414ad7c1e8420ee2095ac831d171a4b98b6aaa1194ca352a6e2a829196da784aa53a6321f299e58a312a4db23ba21df1d94a573253425f82423a559279c27112752a530297929682927a2a02ab32aa92a08a1f02bfd2b012cdb9fbb2ce02cf02c399ee52de42d0e2ed39d5d2f4b2f5e2f99902f302c304030361a1b303c3024305497f2114f135917b9a1e01c5020df1e85acab1f6a230c2217af2d1b4f1cd7180dad7a0dd4862788dea088155394b29bc5a71c17549c17a18ca5750f908d0793e59cd71cc614139825a4f621561f1a1c9fa6082366228b20a1a4671c9d1cdd1c219965282428472856a1252b592b192baaa2962cb32ca72c40a2d32df62de92dd49f772f5c2fa62f289eb2309e30b630809b90319331ae3185928931b531a331159c5a81518fb507c2a0d51b2e1b0e90dcad9e1dff1c68116ab00f180f8d198eb1ac7000008754838399e609c009920ccd942e17fe09159982a3dd0f5710600ee699a01d69198e0c42a3d5212020c01fe4a4ea221722ad2012a4e01a841bd51b809895286d28812812a3a92bda2bca2b63a4062d352d402d73a1cf2e902ec32ed9a0b4308430ac30399c193204320d327b938333843390332e1a5333863369332e94778e4b8e6f8dee9aa2128f9b69a010ae048a509d17a281af2486f6960d997ca9c1025a914e8f669f26151992ea997aa80916d00a019751a5b712290f330ff199e01c361dd11cf5a18521ad21db2026a5a7225e234a2219a4051b1e1cf71ba1986a283928542818a29f2bb42b662b28a42c2d4b2d4c2d60a2692f532f372fe8a17331383178315d9abf339933aa33521b0c350d351735291c013521350a353a1c50944f945f95359caa9ca2a2c8a473adc09f2fa588a631af759ddea3a9a4b0acf6937697d89718a0710db0912093b7a825146c193019d8a622136013ef11919a8a1cdb1d271c13a45b2112211320afa5d6217d227d215fa480183d1956190f96c827c0274c2755a2992ae72a972a91a0f02c082de82c9ca1792f6c2f542f879feb31ab31de31539597346d348334e31fbd36ae36bf364824ed360b37de36f517e8a3eaa579a7efab06a2d4a73ba925aeb9a164a7dba815aea5a12ca791a8a9ad59a025a5b3a6dcac049bb4a0b1a249aad48fa192c4995da85515ca15500de4a6811cb01d6119d2a66e1f6720dc1d1da84721902249216da7e522e0245c24a0a4b826ab26b42566a411291129a928b4a1d92b0f2cd62bc09e792e812e652e2a9e9f314d3146318e96c2348834a93425210138033811386529a838b738a53891295d9c779fada01ba1b79fdda4baa6d8aa2da082a4baa53aaa639bde9e4fa0f6a1cd9e2fa3e1a4fba8cf9e56a460a507a92a9d14a31ea5b7a7719c7da1a8a3c3a67f98f19f3ea2f3a6f58c209cff9f94a58e17c48e689ab0a4331cc81a361645a4a721b1209f1c74a4ba241d244721e6a25228de260326c0a1652b2c2bcc29eba0932e352e172e99209532e0313a32c4261237ca360637dd2d3d393b392a394c3067a3e3a71aa9a7aa34a34aa853a939ab50a332a848a95cabcea27ba720a910abb5a216a7c2a8e6a910a4c1a5f1a636a875a173a4e5a54ba6d1a0bca3c4a551a52fa204a3d0a404a335a1f3a24da481a343a16ca256a4e5a2e9a020a24fa488a289a0f9a17ca450a2baa17aa321a528a27ca3d5a47ba5389d64a4d5a558a7989516a504a707a8a2227ca226a73ea74728e4a8a7aa8dab38314db143b1ecb11539 m_StreamData: serializedVersion: 2 offset: 0 diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_LM0_final.hdr b/Assets/Quiz/Textures/Lightmaps/QuizScene_LM0_final.hdr index 80b359e..9b9c101 100644 Binary files a/Assets/Quiz/Textures/Lightmaps/QuizScene_LM0_final.hdr and b/Assets/Quiz/Textures/Lightmaps/QuizScene_LM0_final.hdr differ diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_LMA1_final.hdr b/Assets/Quiz/Textures/Lightmaps/QuizScene_LMA1_final.hdr index 293aa83..5e496f3 100644 Binary files a/Assets/Quiz/Textures/Lightmaps/QuizScene_LMA1_final.hdr and b/Assets/Quiz/Textures/Lightmaps/QuizScene_LMA1_final.hdr differ diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_LMA1_final.hdr.meta b/Assets/Quiz/Textures/Lightmaps/QuizScene_LMA1_final.hdr.meta index 5e2eff4..3b34c5a 100644 --- a/Assets/Quiz/Textures/Lightmaps/QuizScene_LMA1_final.hdr.meta +++ b/Assets/Quiz/Textures/Lightmaps/QuizScene_LMA1_final.hdr.meta @@ -69,7 +69,7 @@ TextureImporter: platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 + maxTextureSize: 4096 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_LMA2_final.hdr b/Assets/Quiz/Textures/Lightmaps/QuizScene_LMA2_final.hdr index 71a4b8d..8828c95 100644 Binary files a/Assets/Quiz/Textures/Lightmaps/QuizScene_LMA2_final.hdr and b/Assets/Quiz/Textures/Lightmaps/QuizScene_LMA2_final.hdr differ diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_LMA3_final.hdr b/Assets/Quiz/Textures/Lightmaps/QuizScene_LMA3_final.hdr index 01d2781..7357fa5 100644 Binary files a/Assets/Quiz/Textures/Lightmaps/QuizScene_LMA3_final.hdr and b/Assets/Quiz/Textures/Lightmaps/QuizScene_LMA3_final.hdr differ diff --git a/Assets/Quiz/Textures/Lightmaps/QuizScene_LMA3_final.hdr.meta b/Assets/Quiz/Textures/Lightmaps/QuizScene_LMA3_final.hdr.meta index ee898cf..09f4525 100644 --- a/Assets/Quiz/Textures/Lightmaps/QuizScene_LMA3_final.hdr.meta +++ b/Assets/Quiz/Textures/Lightmaps/QuizScene_LMA3_final.hdr.meta @@ -69,7 +69,7 @@ TextureImporter: platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform - maxTextureSize: 1024 + maxTextureSize: 256 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 diff --git a/Assets/Quiz/Textures/NoPoints/Platform_NoPoints_DefaultMaterial_AlbedoTransparency.png.meta b/Assets/Quiz/Textures/NoPoints/Platform_NoPoints_DefaultMaterial_AlbedoTransparency.png.meta index 7a2c23f..5d27798 100644 --- a/Assets/Quiz/Textures/NoPoints/Platform_NoPoints_DefaultMaterial_AlbedoTransparency.png.meta +++ b/Assets/Quiz/Textures/NoPoints/Platform_NoPoints_DefaultMaterial_AlbedoTransparency.png.meta @@ -5,7 +5,7 @@ TextureImporter: externalObjects: {} serializedVersion: 12 mipmaps: - mipMapMode: 0 + mipMapMode: 1 enableMipMap: 1 sRGBTexture: 1 linearTexture: 0 diff --git a/Assets/Quiz/Textures/NoPoints/Trophy.meta b/Assets/Quiz/Textures/NoPoints/Trophy.meta new file mode 100644 index 0000000..4e33c19 --- /dev/null +++ b/Assets/Quiz/Textures/NoPoints/Trophy.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 147615bf4f1fe0a48972026f1f3feb79 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_AmbientOcclusion.png b/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_AmbientOcclusion.png new file mode 100644 index 0000000..d55fdbb Binary files /dev/null and b/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_AmbientOcclusion.png differ diff --git a/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_AmbientOcclusion.png.meta b/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_AmbientOcclusion.png.meta new file mode 100644 index 0000000..06e341b --- /dev/null +++ b/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_AmbientOcclusion.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 16337472a5db21c42890a87f301a32b1 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_BaseColor.png b/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_BaseColor.png new file mode 100644 index 0000000..8eab65b Binary files /dev/null and b/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_BaseColor.png differ diff --git a/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_BaseColor.png.meta b/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_BaseColor.png.meta new file mode 100644 index 0000000..a50bcba --- /dev/null +++ b/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_BaseColor.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 8f739ccd5d3d5d446a49ea4f861e81de +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_EmissionMap.png b/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_EmissionMap.png new file mode 100644 index 0000000..fd06428 Binary files /dev/null and b/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_EmissionMap.png differ diff --git a/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_EmissionMap.png.meta b/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_EmissionMap.png.meta new file mode 100644 index 0000000..0773cdd --- /dev/null +++ b/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_EmissionMap.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 9df83596aa076ae4396040c3c9698725 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_MetallicSmoothnessMaps.png b/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_MetallicSmoothnessMaps.png new file mode 100644 index 0000000..b50929d Binary files /dev/null and b/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_MetallicSmoothnessMaps.png differ diff --git a/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_MetallicSmoothnessMaps.png.meta b/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_MetallicSmoothnessMaps.png.meta new file mode 100644 index 0000000..2c8a462 --- /dev/null +++ b/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_MetallicSmoothnessMaps.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 783c003699d6acb45a883ad2f443c621 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_NormalMap.png b/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_NormalMap.png new file mode 100644 index 0000000..f3253a1 Binary files /dev/null and b/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_NormalMap.png differ diff --git a/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_NormalMap.png.meta b/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_NormalMap.png.meta new file mode 100644 index 0000000..23715d7 --- /dev/null +++ b/Assets/Quiz/Textures/NoPoints/Trophy/t_Inner_NormalMap.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 067b6556edd6a794ab94bf18eb4658d7 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_AmbientOcclusion.png b/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_AmbientOcclusion.png new file mode 100644 index 0000000..9df9642 Binary files /dev/null and b/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_AmbientOcclusion.png differ diff --git a/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_AmbientOcclusion.png.meta b/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_AmbientOcclusion.png.meta new file mode 100644 index 0000000..6eeba22 --- /dev/null +++ b/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_AmbientOcclusion.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 4cda3413bad56d242b574d5675447170 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_BaseColor.png b/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_BaseColor.png new file mode 100644 index 0000000..c9114f1 Binary files /dev/null and b/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_BaseColor.png differ diff --git a/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_BaseColor.png.meta b/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_BaseColor.png.meta new file mode 100644 index 0000000..d972eec --- /dev/null +++ b/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_BaseColor.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: a03d6f0d699dc8b40830464da8f897bc +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_EmissionMap.png b/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_EmissionMap.png new file mode 100644 index 0000000..c6527f9 Binary files /dev/null and b/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_EmissionMap.png differ diff --git a/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_EmissionMap.png.meta b/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_EmissionMap.png.meta new file mode 100644 index 0000000..6876055 --- /dev/null +++ b/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_EmissionMap.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 465e8ef1c9b54a24c8d069d3349868f8 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 256 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_MetallicSmoothnessMaps.png b/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_MetallicSmoothnessMaps.png new file mode 100644 index 0000000..70213fa Binary files /dev/null and b/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_MetallicSmoothnessMaps.png differ diff --git a/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_MetallicSmoothnessMaps.png.meta b/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_MetallicSmoothnessMaps.png.meta new file mode 100644 index 0000000..8739695 --- /dev/null +++ b/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_MetallicSmoothnessMaps.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 83969fcdc479d8c44881063325ed42d9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_NormalMap.png b/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_NormalMap.png new file mode 100644 index 0000000..29a76a3 Binary files /dev/null and b/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_NormalMap.png differ diff --git a/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_NormalMap.png.meta b/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_NormalMap.png.meta new file mode 100644 index 0000000..45b7aa4 --- /dev/null +++ b/Assets/Quiz/Textures/NoPoints/Trophy/t_Outer_NormalMap.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: f24d430227105c345b2947e209705074 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/RoundedSprite.png b/Assets/Quiz/Textures/RoundedSprite.png new file mode 100644 index 0000000..a06bf69 Binary files /dev/null and b/Assets/Quiz/Textures/RoundedSprite.png differ diff --git a/Assets/Quiz/Textures/RoundedSprite.png.meta b/Assets/Quiz/Textures/RoundedSprite.png.meta new file mode 100644 index 0000000..8e19d1e --- /dev/null +++ b/Assets/Quiz/Textures/RoundedSprite.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 336f97fda39555048af8b9b119995419 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 20, y: 20, z: 20, w: 20} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 1537655665 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/line.png.meta b/Assets/Quiz/Textures/line.png.meta index 13786a1..e6033e1 100644 --- a/Assets/Quiz/Textures/line.png.meta +++ b/Assets/Quiz/Textures/line.png.meta @@ -5,9 +5,9 @@ TextureImporter: externalObjects: {} serializedVersion: 12 mipmaps: - mipMapMode: 0 + mipMapMode: 1 enableMipMap: 1 - sRGBTexture: 0 + sRGBTexture: 1 linearTexture: 0 fadeOut: 0 borderMipMap: 0 diff --git a/Assets/Quiz/Textures/t_OfficeChair_AmbientOcclusion.png b/Assets/Quiz/Textures/t_OfficeChair_AmbientOcclusion.png new file mode 100644 index 0000000..25100bb Binary files /dev/null and b/Assets/Quiz/Textures/t_OfficeChair_AmbientOcclusion.png differ diff --git a/Assets/Quiz/Textures/t_OfficeChair_AmbientOcclusion.png.meta b/Assets/Quiz/Textures/t_OfficeChair_AmbientOcclusion.png.meta new file mode 100644 index 0000000..c5ab6cc --- /dev/null +++ b/Assets/Quiz/Textures/t_OfficeChair_AmbientOcclusion.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: baa4f7bea064d9347b064e5a34424978 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/t_OfficeChair_BaseColor.png b/Assets/Quiz/Textures/t_OfficeChair_BaseColor.png new file mode 100644 index 0000000..f1affde Binary files /dev/null and b/Assets/Quiz/Textures/t_OfficeChair_BaseColor.png differ diff --git a/Assets/Quiz/Textures/t_OfficeChair_BaseColor.png.meta b/Assets/Quiz/Textures/t_OfficeChair_BaseColor.png.meta new file mode 100644 index 0000000..35e6ab1 --- /dev/null +++ b/Assets/Quiz/Textures/t_OfficeChair_BaseColor.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 64613c407de9568478ee03d84f975b60 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/t_OfficeChair_MetallicSmoothnessMaps.png b/Assets/Quiz/Textures/t_OfficeChair_MetallicSmoothnessMaps.png new file mode 100644 index 0000000..f4c8fe8 Binary files /dev/null and b/Assets/Quiz/Textures/t_OfficeChair_MetallicSmoothnessMaps.png differ diff --git a/Assets/Quiz/Textures/t_OfficeChair_MetallicSmoothnessMaps.png.meta b/Assets/Quiz/Textures/t_OfficeChair_MetallicSmoothnessMaps.png.meta new file mode 100644 index 0000000..fa1e274 --- /dev/null +++ b/Assets/Quiz/Textures/t_OfficeChair_MetallicSmoothnessMaps.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 034e874b7e431464bb4ab5171bbcae9c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Quiz/Textures/t_OfficeChair_NormalMap.png b/Assets/Quiz/Textures/t_OfficeChair_NormalMap.png new file mode 100644 index 0000000..a0adc5e Binary files /dev/null and b/Assets/Quiz/Textures/t_OfficeChair_NormalMap.png differ diff --git a/Assets/Quiz/Textures/t_OfficeChair_NormalMap.png.meta b/Assets/Quiz/Textures/t_OfficeChair_NormalMap.png.meta new file mode 100644 index 0000000..fc0cc4a --- /dev/null +++ b/Assets/Quiz/Textures/t_OfficeChair_NormalMap.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 13a546a670af67640b830b231316b04f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/00e7195c282b04b40a5f0479e81cd681.asset b/Assets/SerializedUdonPrograms/00e7195c282b04b40a5f0479e81cd681.asset new file mode 100644 index 0000000..d2450e2 --- /dev/null +++ b/Assets/SerializedUdonPrograms/00e7195c282b04b40a5f0479e81cd681.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 00e7195c282b04b40a5f0479e81cd681 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec9d057c1447fbf8e72e38142b2e25454391842468694b708a844280b6b48590044809094dd096babbbbbbbbbbbbbb3bf5be75d7ffceecccedb37bf3dcdddede73ccf6f7effb79d9acdc33cf7ce79999673c9acfacff2283ad7fe6b3396c021bcae6b14a56c76aadbf2658d795d6ffec3bf57c36abb7aecbac7fcbad7783596e925ff2ff0644ba58ff4eb3ee1ad86aeb976b588575ad16efe7b22aebef69d66fabac3bfe74a9f5ff2aebab4823eb47f3d84456ca66b1ce918e4944cc173f6a90cf223c5e9166d6bfe3d906eb6d95508a07922f5e75b6fe996bbd6910ef565a4aabef16b2dd45b4565aef2aacdfd4b31a4be61221b1d903cb98f883d99702791d26af1c6773f9778efcbb99fc1b7edf585e0b53fcbe08fcae39f89b13ba20c1ef8bed6be47debdac47adc1ddcf3df7e2dbf1b6ecb8b2e4f206ba4bc8e92d7d152668f14f46f2aaf6392c437918c6d81ac54983593d7ede475acd4b7679ae1ef60338a9c03e471961f007db603613707eff9b3ed03c45da5e3879e74fcd04ec7e81932fd36c9efc7c9eb78792d91b2ad6f3aff249f4d90d71149f49a68ff2e96ee85769839abe4fd24799d2caf53a46e1f4b5db702f7417551693a55cafc4886d14bf35c7dcfdfe7cafb69f2baa327bda6cbefb696f73352d42715fb533a6d9261f406f716c7468b13c852e9fe8927dd3f91bf3dc1e6d8e80e4f7c80fd69e5ce94f2faa4118f4f3df1f8d4d6a5719efbbba43a28f9b3a49ccfa4dcbee09ecb3dc567dc1ac9dfdd22ef4b59f2b2ad208577736c39cd14ebb976384d3ad8cf9bc8f22066cb3b25d153a5ede79eb4fd5ccaad917255fccbecfb88e23c06c8e1bfefe791fb8547ee1752ae2a2366a4a8e73c79dd595e17caebae2c968fe70d96cf16c8eb2e32cc2f99bb0cf852be9feffcb6db073eb9254aa3dd3c693d4286fb551299eaf7bbcb6bf314bf57dfec1140e745f2da22c5305bc8ebe20061b6b46da1d9771e5b989b4466b9cdb7d96aa08325a7f94679bf445e2be4b552f2ffc66307dfa46007c974a992ba309006962e2ddacafba5f2baccad0b5beed1a97fe6748a7c2d650e00f7fcfa3ff93c0fdc735d67dbe1b47844caac96d73d3d3aafa0d399c972668b56c03652f95d22fb5a69c7af65812dbb65997c5eebd16d91a377b389e0b74a8f54f283f44322df79187f2775506cf7f27c3710dcf3ebb74e78e26febb7ad946d1583e7fcb7db807bfebe2e455d1b58bccd72393f80b07f9061cb74697582fc76358bcf7bbadff2ebf7e0d9f752de3bf2776b587c3da6bee3711b04eef9fbfa14e3b656a39f15ee16e312fc761d73973fbb3bf6d0f405f96cbdd4e747e6ce5b3fcaf7db3abf89d4c8671becfb364a97bde56f7e025c7eb2f56badead37de4757fa6af67f7051c647e64fb39616fadea9c8d09c252f9f9004fbc573a725a7691baab72ec40e6ce33de6ff9b383e4f530793d525e8f70be5da0fca143e5f570a9dbcfcc5536b343c0737efd45be1f0ceef977073bb2bb293d8ef2e8aa4bcfa33d71d7950189ecec18fbdbf92a6d8fb5d9b63947727bc4a3c3de2cb1fd1e67ff6ece03f2fe78793dd17ebecb25f2fe24793dc1d177c062f9ec6479aff2aaf4d922bf327799f4abad6bdba9f6f76d559a9c2aafa7c9ebe9f2fb3fdd6923ee9395f7c9e2abcaaedf3cbafd2675db64cb6d375b7e7f86bc9e29af6711ead659cafadda3dbefb66eedae707f1765f2bb21e05e85c79f0f75c7999d2de5fd21dfe7837b1587e6cc1d1fd9de8ffc257f5300ee2d9db654ed9d73e5f57c4f983a3ff93c79556d9a5da4ec619ef74af6d99ef7def8fceb89cfbf924704f056322f00ef74615e08e20ddf5fe4fe2e1a95ef0bc13d7f5fe2c437d6bef7e81b93adfab52e967aff0df455bfb904bc83bf51ef2f4564aaf797796cc2fbfe72f9bcd8f3fc8ac46c23ff005bf9c7b6850eb976bc3ba8baf54a79bd3a059bb80ad802b0bb583af507f741f3d935f6ef4a551e9f91e2ef1295cbd7db3263fd0537c8eb8d9e38f3bf25cba89207395c07de411ed7ba3924d4e52679dd22497c0ac077fc7a7380f8277ad7445e6f93716bc45c7d2851d967d1a92681acdb6d4e3dae91f777d8bfe9acda5e77daef3b3e21efef0271e261a8be63fe8df2f5ef96ef9a80785f2b9fc17ed65be533d0f712557dd8f778d2a7c8f3fe5e2043f7fe3ea083eefdfdccc99fbc4c79433e7fc013976b3dba36652ebf853d181fd768534fd8c37da4a52c27a3cd3d69d9dc4e972ea312c87a489f965d5579ffb0272d954fa3d252f515c0f83f2adfc17653897cd64a93be206f44559fc263485aaaf78f03b9baf74f001d74ef9f74a76557e55b3d85a425d41fa6e5d3f1718db6f2843d2285b47c565e9f617899fa1c73ca562e77640a729f97d78313c82df6c81d9a82dc17e5f58504725f42f44d273c65ebd22ea3ad99dbd6f9bd65b7ddfb2690f532d3da7a0fa5cf2bcc6debaf32b7adb761f1b6fe9a7cd7d6497fc1823f6bc7e26dbd3db09336f2ddebe01b68abeafd1b40aeeefd9b4007ddfbb798cbd67ba8b6c1db4c6feb507f68ebefc4c7557c03c34e54d6a8b47cd7c359f1dd92b97c6d716fa54f4fa59ff20dee6089ebc6f76cf90b559be67d29af83943f1adcf36b474fb81d65b895b69cad545bb9957cbe513e57fdec1fc8f0541fe687f2bb4b3cdf7d64dfeff680bcdfe4e1ff89c7563a3bf6168bcbc7e01d8c5b17e6f6493e95cfbb82b4ea029ec1b452be5a32ae9fc9ebe71e7e9da4bc31e09e7ff7a5a3ffee8de4b32fe4f526e75d47d5ae53e90beb88aff4b622740569e6db475271fe3a499cfd9449dd98bb4cea66db41af3b12c8927d83bdde49f08dec4b63aa9f49f68745bb3357fe8ccaf11526db3ad11e9ef76a7cfc05877db755400f259bff66db04faa8f8cb7e9958fba0a7fced58706fc52d57c9fec50e736623fb9afb9bbcaaf7bf7ae4fee6e8b968b5e7378fa4a01fc5bb7d65dcb662ee32632b3bae5babb456b6bc31897dfd2eafb2dd2ffaf1b8bc5eccd5a71155e3ca89da5ac9c24a10afe8d6ccd5a729eef97bd9f710cd95ef653f41b48fe7fb3ef2fbbfe47d6fcff7fd3cdfab31c2bfe57d5ff7f7ec1f2087dfffebc44de812b11fc79ea9b1da88c3a7afb2c3feeeb02351e66e1faa36e000f9ddf6e07790817abf83bccff3c469a0bc1f07eef9751b8f5c5566fde579afe40ef2e8abc67464791301eda745cf80df009e91466e99096d5af5d10c96bf2901f7969cbeeb13c850bf55fd5e43a58cf1e09ecbb841a649827c1bcdf7f01b029ef36b817c3f01dc5bb2fb75c1650a1be1df0ef3c46d98fc6d590abf55fd4a459eb8154919b21fb8df050964c9f65da499270d95cd7279c335e93a1ca427bf5763ec05e0de7ad75fd6e591e6886d177a7e3fd1fdfb01f23e22db4791961edd4630771fabeca788b4c66d32d2c6a3fb48e71ba55fa49547bf911ebd47c97027013dd4737e5573bf06837b2e578e5944c778deab319412479758df60a23ca27ce6c12c71195b00bee3d753927c9f4046a41dd3cef318f097fd3c4fda6ea4bdbc6e29afca2fdbd69d665155a7ebea109dcd7664eebeb944ba76d2eb9a7785fd9c1785e23bd5afaef2ac1c5f88aa39715b817b3fe9a4ea99ed1cde91aef29d1a6790fe4f747be6ea478daa727907e7b751596e46ba3be12fce0361f077dde4fd38e6f6fbc6d9711facc6837b227a8cf7e8a1ca9509408f09ee30a313e56f26837b2eb317d053b615228a650990a7cabf49ccedbf4cb275de66675bc6368bedeb6035d72a97e9c795d4dcabad99bb4f5bbdef03c2d5bd57f57eb1e7b9f40fa2533c8ce49cbee86410a7c9b6ee83e4fca7416a9cb63f73c759d9989a1738003ce7d7691e1b9c86d820e012933d55fe762ab8e73aa9fc30d0f35d9efbbb1867f57c47277eeab79181e01d64a9de2b3fa2d8f35cfa06d1191e96d2478d4e072c95ff3515dcf3dff4b2e33d50962d09cb82a14c5b160cbec57e3e24577ea7c63154b9a5eab45d3de9b0ab9493c0f78d24299723ca9750f30df3c0bda5db1039ff6588f44f2272ac2952e8d62d52e4d1b13f818eb3a4ec69e09e5f4be5733567740878ceafb3e5fbe9e0de8adbd0c1b63e43377ac299eb0947cebf882e44c291f3ed22ca8798e1913707c44f9575c3c1379a31af88f22b3c635e11e90744cb3c362bebbce83cf97c26b8577168ee890f98c727fee6f295ffa0fad466817b8b59fe629b59c1259edfa9bea39d3dbfdbd9fe5d811aa3957e4644cdcd968c226aee352fa7657d1691f5724495f198fd7bcb21fe4ca54122db6a0cf452f5da38b75dabf84577f3d8f56e01ed9a87adc6ce4becfb96725e8798abc4993d633f1fa6ea4b3557bcd8c3a3d4636f4a57559e4f602e5e4af7e8ee9e38a9b995e9f2843a28fb990aeead380d53638e799eeff2dcdf15aa7450fe389cbfa9b80d04ef601e52efbde5be7aaeca7d35a69f0fee95cd2a5f691273d5efb1f82d00faa8ba59f19eecd147bd9f0a64e8de4ff3e8ab9eef98babe2abf1535b3f52e927d881159f64566bae3a1cd772aad93e5bb00657aaaf694b03e957593b73e2d96fd68c52adfa8324ad5a773643c6a3cf15263bb89e2352bb1be1155e72cf2d8f522a9db05523735ef54cded2bcb60d8e5cc5d7f95cbeb12a6afbfe49ce0e862f97eb6475e258bafbfe6816f74f597cad7defa4bce3f8f2ef5d8f252795dc6dcf5979c1b1cad02365e25af15e0598594afeaaf6ae6ae87aa6dfe23726db6232b3dbf9373e7a32b3cbf5b61ff6ea42c33236adebcaaf355d9abcb47329fc4f211666f89cadb4469de18e8a5aee33c362ee3175dc9dc65bd9ac39baebd59df8f90e31d91dd99b6fe1a29fb7f46a9fc2ae7d2c6ea2fc543312cf5e8eaadbf6adcba476b3d71527397d3e5c9df2f62eef25ee9b49cc597f7aa8db798e9cbf33e40463a6dbc3d993b8fec096cb939f8db623d4af6ff8f567d1fe51efd156b6f1b0f3285b6a9ec43c3322653e595a9e0ded265b45a0f33d0f35d9efbbb31aa6f5a953f708eb6b76d57e761986adb6e2f0f4339c73cba0a8495a26d24ac8baa98b62e1a23d77f8d917dda1159cec5ea2255beadf5f05fcb92e74f50fe696d79398bcf975c36982f2efeb6f4dc56b5ef54b9d8c0e2cbfc6af08daecc57f6ea2df3e55cece81a4f5aac91d7d5409fd5888e29c43761fad4e8d367ac5cff30f608f9dd4a4ffac83225babf277df64f903ebab4a863da7e22758dae77e21659c5f4e582b2ddbd3d1ce5dcf9e806c06c83bcae03cc543d7400f84eceef8f1e2865ee04be51cff9755fe6eecbdbd7e6c79b4d2e39ea7707c9efe7807b7e3d443e9f0beef9f560f95cf9411e9b8bbdf76b738779581d26af87020687da71d97eac9d46dbcb7925917a7d9ac5cafd0696b0dc8fd339d572ff088fced236a387039d25e7587fd401ccd51fb55d2e739515d17dc06f3732f7f8dc464f1ae7817b9ec6725de30eaaff54e6d188ccbf2a8f44d682bc01eb659f7925a6cf7ecce5c7c6f51363697b2488eb911efb566b25555e38047c7b08f856d905b479692725e77864abdf1dc5dc7dd0478178a8f483bee5e1b6bc710f489d54bf2348abc83ab70dc6641eedc92fde36e87ac4f6a67a7eefb70d8ad9e631f11c63b6a9f2bcb4cd716acc691fc953f67f8e97754f64034b9ceff6467457f96e23f23e59be4bb5ace0d76359e2ba48d53b724e94b7de192fc77f26c87ee3889c3f11ab7794cd1ccfdcf58e5afb92c82fd827b16e11b97ecaebaf4f50632607d8ef67aa31bb6ddcd7e871c03e551e554c55dfc67cb74d27d329e198a1f2e54e60eef2e9045bef89926de4607995754d04a45b4cc6890eb70a95462aff9e04d2f944f9ee30f00db0a9d87b95a78b3dcf55be38c56353aabe3f19847532884f73f037977360fadc2247e96d6f525ffbf92415c6d11edb3b46ea709ac7f6d4daa744b607ca5ead6eca864e05dfa972fd586033babafe388fadcd4831cc448c4ed0339a3cd57e3e59d5792a5d1523b9d64ceceb0119a9397b89181d9f22a3d313309ae09351b23013313a55cf688af4a9a79cc2dcf13b397158119507ce64eefc7ca694fb882d77aa9cab10917617bd8cb9fbaf8682e72a5cfe7e7af2b0633a9ce5e81a39ddcd2ef6ad4cd3a85abf940feef9f56c4786f8db8ac3d423641c547fb74f3611b9962f7a9e274cb5b6eb5c204771b8407ebb007cc3af177a9e5f009ef3eb45f27d4f706fc561da628f9cf31d9b9eb6da13f6f98e3ed1f33def2e91f27706f75cfe031ef91703f9af78645c1c2f3f7aa994abd61f299fee72f0eda5f27a0573b76f2e07cff9f54ae6f6f5aeb4759cdec52347fd4ed9e21c70cfaf573177fb46ae198b5eedb65d111ff59c5faf71dbaeb8b7c2dfd1b3ff4332fb51fac57c2fb5764efa5e3c783ff698b05c389b69cb85e987d8cfa75fe309ebac2461a9b456f3fd17807b98bed731b71f7d9d1dee8c1efec28bc955acaef7c8bd5ecafd80b9cba11b98be1c92793d7aa3272d6f04faf0e783109d1a3b61c5d23b511cf8f789e650ab7492ebaec7364bfe6d5c1beb66e62e7fd49a849b1cbd22e78267fc5e3337283627e816101f959eb73acfa2b782eff8f536e6ce97b7d96952aacae8f3dc61c77eafe6c14f06f7fcfb44f3816e077adc2eaf7732771d75a71dfe2cd9b7366b957d2d95f3f522e7b3c46d970b58e2b6cbedc8fb646d97bb3de9a4d60dde15cf3666ef6abd9f2c1b66aabaca8f7ddceb0957ae258cde03ece342f02c997ddca7b18ffb411cee07dff1eb031efb78c04e9f39727e42e42277d8b1df3fe4b18f8752b08f07811e0fcaebc31efb78d80e7fb6acff674bff728e9a637231621faaddaeea4aacddfe20f23e59bbfd514f3a3d2aaf8f80383d62ebbed3445bc79d64f91d91755fe432e68a7b4a63c78f33b77facd6276afce318d3c7987b5ce131a997da0b31cff35d9efbbb186b55573f016cca3b77e0090fcf54e70e3ce5e1f994bc3e196fabb1fca6d6c9cafc56aad608262abba57fc2d458c9950eb732f58d5a972ecb8244f92b96a79e66eebaee699bdddc1909745265cd334cdf97f62c88fbb3e05b7e7d8eb9f3e9737678651d3cb2d5ef9e67aefc19b91a3c4738a8dfc6783febe63d37d17cfd022097fff605a6afe3659a455f64ee3afe45199f03a44ecf78e4bd8cc87b597ee7993ba66d1ba8fc28fd96c8759e305e62ee7e57b5ceb4c4619570aeb09a1ff40a73e7ab57ecb8cd937bb7cd93fd2591ebe5ef7671d25dabf78d1ef9af4af9f09ebf3fc2d153ed8513513ec5ad6e19709d80da2727fa9af3fbd85c7b39c73e728bf3ae42c9be01fc8edfab35746a9e4dff04ac12d9d06d7638def5b4f3d53a7c95c649fa1023723f01effac9058d7ccab9c396a3d65746eeb2efd5facac89df2b7caae94eff0ba9b4344d5a16f38e1455f07cff8b7deb593c9fa4975cf54dfd99b1e3b7c53c67f93adffce4a7f658787270e4b7d177d0b7ca7c27adb7916513ecc3b209e6f8367fcfaaed46d21b8b774db65b947ee7bf2bb521036bfaafd7e7703f7b02cfd80b9dae431791f019d3e9061aa3ee4fb3c617c2865c879aebba8bae07af0be39d0533d5332d46f41f84cf5ffcb391f3be7bac34c9606da74b9df9655a5fa7ba49d463f96618d06f7fcbac963179b2407b9fe6357358ef09047ee831ef95f30b76fa2eed59e6f6a5f0cd02facd5ff618f7e9f4a3963c03dffee51162b83aa645f48448ebb473f0169f189bcaafd56f3c0bd15cf858ddcdf25d5ef718f7e9f7bf4fb1ca4adb7fc7d0ca42bbfaa75298a557f16889d56df27e4bbf7fdff36aaf6331d00eef9f52b0fcbaf6c96bbc9f1ffddd4dea9aadcfa3071d84a6ee44979aff695dc0edcf3f74f0179fcfd585ca6361cb52fe500700fc28d283f34d17a46a5abda9343ed91b808dcf3eb374e9c23ca6ffb0ed8a5dccb32aad6427bfd3fb0cf61f407f02dbfaabd017b837b8bffa2028f6cf5bb9fe4f78bc13dd74bf9876a4fbc72b7bd457f013afc0c9ef1abdaeb6d09b8b774d8a3d8b68145cd90b0d43e6cf9e01e86a9f642ab00f75cee3deeefa36a4fb34a70af184339556e395ebda2600fb4a8da03ed8b24f6aad6ca4f05f7c037de7dbd3b4ec9e425f47fe47e2c11b5c78a8abfda9f6d2b70cfdfa73a87a6b1bc2a1f5ced37960feef9fb46fe758fa83d98559afe23652f05f796dcc5aadf1bae75536dad633cb2d4be07f37cea22d7b447d45afa329fbf57ebf6d4be6879e0de8ac3929fdcdff19f89efa6c9e76a0f9bed3cef8779de4b5b8abce479afe446e4f3299edf5de079ef957ba1bc7f1991abf6b59beaf9dd6d9ef71eb91139a6107915919b239f2ff3fcee35cf7befef1ac9e7cb3dbf7bddf3defbbbc6f279b5e7776f78deabdfbde9f94ead412bb4edaf42961391b7c07bbff940ce6fc869e2b61d716fc5a362bdfbbbd8b8f814a983ca03d783f77e7590be478eda1fac04dc5b3a5436f28491644f38252f227df888f4e1739a49f97b827b7e6dce5cf936c7d31f99d382b97c7371cff57ac523a7a5478edab759da6d8eda336b85e777ad40bcf87b39ce5af9b9273e69ec85177957be53fb973ec05c6572ca7264ffa1f22972d4be538bc03dbf823dcc22b28d91d3c6799623d7cbe7a87d923c3e450ed82b2aa71df8965fdb33974f21eead7458768847b6fa9dda476931b8e77ac97a3ea703d3fa14391d810e1dc0337e557bfc2c01f7960e4b65ffefb2dd90b03a3357dd95d3d913a6dab7a802dcf3b8b5757f9fa3f62caa04f78a319453e591e3d12ba71b88a3ec2b8c80be619d0d28ae317b56fb62499fa2ea19779c92c9733f6b1c11f5f85456c5cad92a962f362fe5bdb6a91e83a47e99fc0024515f889d69193f098907bb9a6db07e5aa53b85689e38e368352b6285da5388ba8abd1b54e813c4bfe5d617d542e8ca9cb820ee8c0b822b5763fdaf0a1ca1d4603d9f224e60e28728555b6f86b219d695ff6a311bc6165aff734b996f055bc3d6587765d6bfab84bcc596daf15f268b123f6ec9fb9b39964cfb34a895d613057495755f23349c2bfe5d2b34ad12da4fb39ead166753d5b2656cbc755d2f428b8f7bbdf5b72ecc32894cafa3fe5028ecb97df4944aa689566cb8f6f9c216ff7f8a6c8e1411eed5ca1c3b1b36ca17b5fc517129f1ff19da850c770ea74919c304b288eb5921cb17eda5397104fdc7313e867afbb6798f60c509e3a227c393bbbb888193c27ddedcb0c3ef075c777e6377d48a583e7747c51874a2a82502cbe5e589dd59fc44a171e346055c512ffe880ebfd8da686e16f1dbdf558beffc27401351f9b913406ceb5066956ab341e539dffad7566e9e88468d505217ad7af1d76ceb8b722b481ead12ebab4a517e965a51e44fb8c2fcd0bfb8342ee00a3515c9145f09278b2a9650515d4209bfbb6cb3e413ec28c3c449d52c160b27a9f28567d5258141636109972b2afd2e95e5eeb9b5b4b6ecc42f3735d6a74b0b912ee98486a54c8e2e655a643b0b25af3312a54bcb58bc9c74e1ffe919b6426c3b990e18c1463a822db36ddbfc5d9d90526e7deb9f216fb40df216437a80ad11234cae0286b0b106610147d846a3156bdcdca315570891dc449738ad364f059d9e71f39667670f82c6a871b74b58bffa35eda63a7aa279bf98949e6a37ceb51a08d3ad77e5d6f755c209e5cfdd151b0fc1696bba7f91982cefb718e225aba5baa5a0da17b482836a86116fa6215ec0edb583c60c4419e7cd0cedf0ccd01ccb661d8366b31698e44e4125b7c424770e2ab91526b94b50c95be8b28de899db2d2bd9c6e96e517f8db77ebbdc8acc5ae103aeb17eafeb9e499c5dbaa69c5dba89ec92cb749d46fe34c2b2496b5ddaf187dd754a7a93ae1b9e746d30c13d020a6e8b595bcfa0d6d60e2b32b6ca4091d15e67ca025235a929cfb39ed93d7793c4db6ad1ddc33b7a54f93a5394a42b84d9605f2bd39d294e385f23f4486ce4bc0f35c7ebe28bb4e32b2ce9b4ea926b95fc88d39f2bb2136df85846db5297fec2e2b2dbc2b69b9c5c8e7f0f6a6b4bd35e29370f7a33ace99b58078c60075df6e404fb606a79b3676f3c7b76c484f7cd80f04e98f07e1910de596758a2b4a9df2c058bd34332c7bab7fb4896b0c9228cd5e22e5196727e9d7a51d33fe5fa748030c911090a000aed3183ee82d564799a9a2ce2a726eb8a19dcc00c185c374cf8365ae14f94f811de1d133e482b7c952fe13d30e1833380a527969a4334a9e9cb2fd90a933c34a89df4c280e46700482e26bc402b3c77bc1fe15b63c287e985fbb293de98f0c20c60e9a32baf857750bb99caeb5a21bf9ca971c109a215b15656cf9973098b6231072ea1a8d50b1396c899d38f4f948ce68bba7e688220a75bff6e604bad9f970bf0aa2bd84f507c7fe4d8987ca37ce1020cf611a6dff03a8bd344ec0a2b22cc9457782bd9225626cd8789a74de55368c007ecd04b9c0bc19ff3fead32d1efb88c5509e3b37fd74abe2fb57eb35af345677172841d1e7c67eb5825bf692dbf59603da9b6be592e8ca4d2f5552f715685d2057e69bf6de9d2c4fbdeca759d4450c9713c51f27f0047d3c65b35935618fb03691e71bf282f6b7911f38afaea0a5f8e7b248b6f85ff6bfde7a715de4f57f80a0f3afbc367bc0f39bde1b351ba82547893d88056a2b0f8ea1461198d70d318c3120d9725928e25737f5d32735be69ba607726a066092c76a24fb72c4f27492f9f77cb25f903ead8198e0ed030ade0613bc4340c18330c1e3020a1e8c092e092878882eeb8b86523969d6770f7414597f4d14e56739f86ba290a4cad4724bd286b8018fa22485c2785da120da6afd9877b82588167c8151135991b0a6487931519417990d182b4986ea2c8627ec240d91024e64b2270a5e2b9a885b51be2e305e3bf1f9e341fb880b74c279ed3f35f67192aaaf152e7c18a6f9348de68baaa2be342fc4cadc1d8396b94598e4e9412517eb0a04d1ff7060560a8464f37fa7c89640a9558beec9ec899b2adc3ae158718dd40450de5db55468c19f5748872c7158890b9419ba024574a14c02f97af3c782efb41f15a5ce2c51ea246ad9e9b4f1efb8eacbbc5211ba596cb032733856d2ccd694346fe88ab10425cd082ccbee1434cb8ed449e659768eaea8b7a75732d642780571e194e2e18cd284932f3af8f6deac4583ed6e73794bc5947c5bde2cebba9aad13a6bac232e0b5d270ca4455ba4cbc0d5a18f0e6514faf572e6b507d769827b2c3f6296407ca58611960b4ce929a327b2d67dc2cd22ec2c4665b9217896cb89778cc29d9a95b2d3ead667b8396719cbd35c5ed6d8c4e1bde81c077904beaf46e890bde1613bc7340c163b13cbe4bd03cbe9d4e322f6df8ce29413daced31b51706557b07ac44dd4d53a2fe15f157a28ec384efae117e4fd49ff0122c2bec918a8d24b0eaf198e045ba3cc61b0b13445f59aef5ff3aeb17bc33a15ce4fe5c51193aa541ae1865ab1715f660f07d9df585bd9ac58f9e1330a3581cd4282662e956ae49b79f7ca6db244cf8128df0a939fe844fc6d2ae429776bc6dc1eb0dee962c97759bbb34cc657c5d51ae584ab6464cdcab1429d720d23597ed63357ef6b5aeabadaf73453d5023def1bf794af3b2d64f9a4ec1f4afd4e9df02e83f1b68e827c4a958b955a529b7223ecbad693ae1dcf159ca10c787af01f7eff8ec88615baec3c63da24996fbc23dd735e2fbb9c200aa62be7265862ac8e91abdf2c5b828eda05932d785b716f8c2bb06f1b7e3a2f0b09dc51d411c2f3e3bcceb78a9fff48e175f0d6e77e367437bccc19aa1b3245ea8aed014aabefa77676279a106cb0b2bd3ca0bb374362746cc576d569bc373d41c217b8d98aa12d4ee78be8a9bbf97cb635f9c8265654ac74162808e7f5f21c935f0c2b4b9a8e53608a5f9e76b62e36e48dbbc4ee4896c6a8ee58b52acd65ea5a9b56f69ecafd69ead3359315582762e5832a81385846c98ed5e3ab315f33946a490f899d4b397589fdd20b252a567109e9783f5a2dae4053c2f78e1fb4162ec98fb4b9305ef95827c9d981ab04cb8a07a23af676a765b36e38919fa4e5805d0a0a9007c79d573749279165aadc9427ff9cc427331b5d70455bb0c537bad46ed8d4dfca93d0f13be4e237c46537fc2e7eb84f382996fa613a485b80013cc4f508a7337f9cc00d54ea8f0b4149788b6826aff558a271bac7f6bac67154244ae586bafa677fbd172678cedde1ab66d7db2dd0543b04f40b6bbea0473f3dc988ae00403a90b7582b9ffb52f43fc2f7ec6927fff6b370cfbfe1aec17f8c4be3b96cd0f089acdf7c0241f1854f2224cf24141252fc6241f1c547239968887681291afabf393884b30e1876a8497f9145e8165ccc37465533fc66728384eaadd7c72fa35caad96fa6a51f2e45ae5bd5de756bafa47789f47b56c34fbc9e795989e87ebf4b4b7f6e14b5bb84f512efad07888a556bbcc4fa85518fa2334e88ff1897e2926fc488df0cf7d0a5f86f13a4ac7ab4b9274ad14f3df9ca7c3aca77e382ec7b4395aa70dbf75d2cd4f38d518d2633448cf69e10fe99e58248ed54582af4db1f18db190cd121d7ee572fec75a518dfbc7b802d3e0389d06bc649b11730c66a7e916d460488fd7207dc527d29558897c42d012b91653fb445da1d9d29fda7598da2705557b954e32f73a4e6688d7c14f10f1ef75ec8585732a16ce696985538f913a3d28a9062c81cfd024f0b856fe12783526fc4c8df08d3e85afc1849fa511fe884fe16b31e1676b84f7d8c29ff07598f07334c22b7d0a5f8f093f5723fc0c9fc23760c2cfd308bfc2a7f0bd31233f3fa891ef83a97d8146ed0eadfda9bd1153fbc2a06aefab919c2f5604657315b077f693bfd9e7fc44aad4965b5eccf42b8093858f7529eda74b175e435fa253c94755be3f664d976aac6993cf4c700026fc328df0dd7c9aea8198f0cb35c28ff029fc204cf8151ae16ddbf8137e30969857064ccc4330c1fc98a9385f70b0b0ce3a91c772c5a21bbee35eadf8ab56ec7a5a2506aecb85ed3b1d4e6ae09a6fe1982badb75eda748d65ed43ada77eb43e14d3fa6a9dd67ce49577e23a7eb3dd94b49b21ba7985b96c80f4ba07f8d2eb30cc06aed1d8c02d3e0dec702cd2d706b4812374e5ac5859b47976db28139df77ccbd5a5c25256667869e5752997c9d7b3647b6004d7152bbf8fd42537f7ad6f60886fcd4fde6ac155f6e55b1f85d9ec4d1a9b2df6596e1d8d09bf59237c679fc28fc184dfa2117e884fe1c7ea8473b7869f4d16c8ad390e53fb368ddaaff854fb784cf8ed1ae1cddafa137e824e388fe91da99440097ac94fc4b4be53a3f5d73e919c84697d5740ad4fc6b4be5ba375179fac4fc1b4be27a0d6a7625adfabd1fa189f5a9fa613ceab1e7e5a595cc5cc476e55dfa0721596ca190afefa754fc7c2bd5f172e5fd3aedfa77682a8a8ec0aab4656697ef4380383fb80066e5e3b7f70cfc422f9a02e922d35706d3fcc4f84cec2c27c481766730fd8b9bec33b1b0bef615d783c3fa84dd8d5d6ec334598cb450deb27e473b0901fd185cc677b975a21c2d82a4de659fe903d5ce17778e25ccc7c1ed599cf96fecce73c8df0fc7efc211f0fdf1ccde9f416743fc6e2fd9f7cb142ba6b5c3c52094d1c5acc81f1ff865aff61eb34f94975796906827979e76329fea426c547b5f797e217e884f3eff93972de59b67cfb0d3fb36c2fc4843fad119ee353f84558667c469719795b6582d8d75139dbcea8d3503940922bb60be1566c37ee0a45e34ecda1e64f8a7c37f72ed669c95df46735262a5c747e589affeeef4b301acf6345d322eb7f7c0cbcc65338f2e7ab44f39c377afdc4f5524c8717743a74963a1458ffb7078e6aac4cc01be02bd82cd9e04e5f97cb305d5ed4e9d2dba34b2db095aa84d547fa1a5e8e69f852325a2556b895715acd67f6fcb3a5a28bc55fa57205a6cbcb3a5d72812efe74e25fd7fbaef0afc40ac0573405e0091dfc15805761517f5517759e7327838905aa708099483d73172e7e227c3516e1d734119ee133c2d760c25fd7087fc2a7f06b319a7ccd6b900ea8eb30c16fea9289476761ccb5b51360779f1d88d7639cded270ead1d11fa71b30e16f6b8497f9147ea34e38b7dc771852e7f043e0fcd73937e9c2e1fef67ba9247682f6e7cd98e0f7030abe05b3a20f029ae7ad98e00f030abe4d2798a73d3ff7dbeb4271017e5ca8db312bfc5863851b3bf9b3c23b74c2798b73130bd83b7627a6f6271ab5cff1a9f65d98f04f35c21ff029fc6e2c677e86e5cccfd3ca99f760e6c84ff18d2b2df996818e375867f93cb3452dcd6bedf5013c9c7b312dbed469e1f8a4dc9fe0de1f9f1f66cfd04f5f87fb301dbed2e9d05eea5024fcc03ab98e7ebdf56ffa1adc8f69f0b54e8366202df83a7eded7e527b40730f3fd9fc67c8fe9eccf7c1fc4ccf71bcc7cbf4dcb7c1fc222f19d261253bbf88bc4c398f0ef35c297fb14fe0826fc071d7e9fc21fc5f0ff88e1ff292dfc8fe9c2e136f773a2d2a330c3a5c7e39816bf242e3d8665b0f47802d3e1d744a54771064b8f27310d7e4b567a2c10e1f95b16fc1466bebf6bcc77e7aefeccf769cc7cffc0ccf7cfb4ccf7190c193f5e3e882ff62c46e76f0d9d4d3ee93c87d1f907a3f36f5a749ec722c1d7d07b2331b69bbf48bc80a18f4482a17f11d33aaad1fa149f5abf84a1cf8920e81b45d241ff321689c69a481477f717895730e14d34c2cb7c0a7f1513de54237cbd4fe1af61f89b61f89ba785ff75cc385b4412546b4519aed6dec0b468a9d3c2a9d60a3358adbd89e9d04aa783aad68667b05a7b0bd3600b9d06cd9953ad4d12f3c2ea7c0ebabe8d19706b8d014fece1cf80dfd109e706dc0633e0b66919f0bb5824da6922718fcf48bc87096faf11dea3a73fe1ef63c9bd65c07ae1034ceb0e1aad8ff1a9f5873ae1e254ba48c01e8c8f30b53b69d4bec5a7da1f63b03bebf2165fdd9078f55099f5e92ab1be67992877ea5d5330f8bcccd9cc3e5bd3de60a85c0c05f05ef0e5e25e959be56c891c461be61a58dbc0ec63d672c578a83d74902b065f2ae596552bc49306f1551590ac9f97592de797c2999c7e0744366109d44593408ff84ca04f30e15d35c23ff729fc53ac30ea861546ddd32a8c3ec322d14347682b7f91f81c13de5323fc0a9fc2bfd009e79975ab540aa304bdcb5f6a04e78bddd337cf24d9f8ad4f337c249d8e97765a446e24d924d9e0ba62d327bec26c696b5d6ef3694b5f635544efa055c4ff30c97d824afe46279997857d0356c6dfeaec5fecf1bf74b3d87f904d89135b7ebf942dbfbfb0fc6d12587eb0ad93f529f11d663c03821acff798f1e405349e1fb06c3a50934dc7e5facba63f625a6fa37389f8dccf12d1d0aa12ebc2753b0ae40a7729d7e76ca09f303d06e9f488f004f325ff674cfee080a9f30b963a43740eabcfd4f915133e545742fb14fe1b86243f2092df31ad0b345affb5b53fadffc0b41ea633149e5fd56407dbfb4d7f36ef9f58c88558df4099d53698cdf2632788e7c7f6b02cb5b24f25f33b41fa2f4c83229d069db51acc107fad161b7ed96d84f4b679f81bd3a558a74bf71475893f62da8f4effe874e286375cd752efe3cff0fec5223c226076611144f0c880822398e051010547758239e7d1ba9e729f9c7330e16334c2f9195e7e8437c2906c1b1049639d605efa8c0dd8746aa213ccb3d37658ab75fbb45aad4d31ec3b68b0bfd1cf1ff6665824c6619128492b12cdb1488cd744a24b7f7f916881099fa0eb291de04f784bcc3027ea8a53be9bdd1c067775ac141eb92ac8f3d84051e1d5ca7fdd8b8673c59d5dfd70bf7a9578a38adc065623f6b36b6070d726bb0b8acf585dc5dc4b7c5538bcebc9ae629da325734561ce7fed272fb5c2584cd2b1e0078cc0ada16d9fd4a9609d1d94d6090d6b98b3f18fad1fd7399984423161d55f3cb6c00c66b2c6604ef1698dadb12c3505cb5253d3ca526db0484cd344e20e9f91688ba5f48eba94e61bf3e83b5417caae58be509db745ec1d4513a5695ec2b703c59c58bb13d6b16b770ea81396a13a5cddef560bbb5aadc9454b848675a0bbd6965d27dbb27eecab1d9634d33549b3c96781d41e133e43d7eaccf3277c4b2cdd67ead29d0f38ba3be257cb52a75aa45d39b3f795f5db95dd01d362964e0b3e83842f5ae37d0fbcc3bec6a787d011035aaa015ae91368274cf86c8df0137c0aef8c09df4923fc6b9fc2bb608930479708fcc4ad05b2c8ae4d6808f6910f2b44965c155bd6542f42a8931b23c2654db681f949d0ae1896b91a2c3503fd61e9a613cebf2f8b043f9ba6bb4e386f2ece4bc5591d830bee8125e67c5d62dac70ed9e7acd809e4bc6cf095143db1a458a0498a0edbf84b8aad74c2c5c946a9d04a70b2512f2c8d77c9401ae7624876d52059e513c9d698f3b110733e764bcbf9e88dd9d3ee3a7be2a774a8c91070076667857aa93ca7bb5eec891a64a2481f4cb33d749a7561ceba30a8599958356f7b3441d617f6c5b45984750c296d9cd0e1626c2f273fbaf4c37459acd32597c5af984b4da7f456ccf5c7b245b92e5b0cf2972d0660515f82455db762ae2216fd5c5153c148e74ae7319dfa2a0fcbb41558a6ad4c2bd30ec42854e928740499b65aec05c46bf265c27dae0b9429b6c1f458aad343cda42a1007ef950bb7dc9fe10fc2c25ba60baf3d8b377c27dcf48c7bb04e033eb8b53c1270706b0856075607ac038762f9714f4d7e3c67b0bffc988f095fa111fe9b4fe1055872d760e665af044e7713e061586456ea480df11799422c32b5bac8b465b041a6ba5278ee5d2b7d707f0db1222cf43a5de8dc4cbd956889552ef2136b2b7ce698624dc8f996abce22fc4c80cd7b543b8f179fdf55ebfb80f65511cdd1347ca45dd43941c36e27242f627c207e952848f403fc7b45f8d877264244cf16c6eca65e6737ed98de094bbf86198185df803577dc9b02a45b148cc4c25dad0bb793a6a6890f3fbd1a6714d68459938126cc684cf85a8d70bf3bb08cc18ad375baba21df5f71ba2d9640eb317fdc3d48cd5fd50b27b052f4c59783e2cd6f2fd7582ca21b3411bdc76744b7c322ba772a7e4102adb7c71c8e7d023a1c3b6038366a70ac2ef087631c86635f5dbaf313fee6897edff5a22055a96b7753a973b1e23ba99c4ad70fd1122ce2fb69227e8bcf888fc784efaf113e75983fe11330aa07e8a8f23daebd6dc55c64124815e8cbad7435aefcd29d8835ae0ec41a5707a5d5b89a84813e58037a76a13fd093b1481c8245e2d0b42231054bd0c31275eb78eb6d8a6e9da9986687eb34eb8a68e6f548d3d7671aa6cf113a7dba017dbc4ce2771654bb38fbeb6add11d3e8482c337a7d0f3f9aa5e7954cc732c951ba4e9e227f99640606e0681d80ade34a233514d1e0892aefec590a4aaa744f699a8945fe184de48b7d467e16d6c3706cd01e8652acc23f2e60853f1be371bc86c7d73e79ec84093f4157ef15fb133e07b3b4137596c605cd115fd99d86e9362ee662513a4913a5477c46a90c8bd2c9ba28f1aa074643f590d68368aa2a3dfdde8779984ea7246a457a0719d22fe3e763e19f8af5bd38fd85c1937b0116fa69c96abc645aa45776ef8c35fa4ed734fafcee8cb90b66db67686cfb8e11fe6c7b578ce4993a92cea4063e31c93da21da4b9b7108be2599a286ef419c5dd30e167ebea9691fe84ef8e093f47d732f3297c0f4cf8b91ae1cd46f913be08137e9e46f8389fc217634ef9f998537e415a4e793916890b3591281bed2f124bb0485c8445e2e2b42251a10b87fb279704f54f2a31ffe4d280fe4915c6fd320df7f563fc715f8a09bf5c23fc159fc2976105de15ba024fcc19b48ab9920085db722c3a576aa2d36a5b7fd1a9c6a27315567eeb5ba57c44207d6f604f4c8bab31a7cf1936b777a02897e3a87e425d81857a8d2ed48e4c3768ef0e3dbddabf064be06b3509dc65acbf045e8909bf4e57c1f8145e8b11bc5e47504c706355a26b8f77f52df745a90e8bc80d9a889ce13322abb088dc88f5614e11c93c4b1880feb0d306b6404cd15b1ed7f8f767a67b61badda4d32d0f9869301dd333e67a2c996ed624d38cedfd25530356a3de82d5a8b7a655a3aec622719b261217ece02f126bb0f4bc5d979e6d188bdb973efd66df5a2cec3b7461731fa226f041beeb3098776a60be30ce1fccf59845dc8559c4dd6959c4062c12f7e83a084afc45626f2c12f76291b82fad48ec83398af70775143762781ed0e03961bc3f3cfb62c21fd47566f914be1f96231ed2e5087eebccd4f3930bf6c722f1b026127d27f88bc40198f04734c227fa147e2066358f06b59a83b0e6c563019b1707633c1ed7c19ee88fc72198c53c918ad6094ce4500cc79301711c8669fc543247173af9c14fe1381cd3e3e9449d8e5c0fde861a2f74e1e78138e74af8abfd8ec0c27f46173e1c584aae477aded29158de7a3668de3a0acb02cfe95a8d93fc6581a331e1cf6b842ff729fc182c955ed0a5129fe833598c60f30968dcd7e5d3c3f8eacfe5721a1a5f1c631fdf5ae773ffdb63314d5e4cd649bd36f638fddc721c16fa4bbad0e1d45a7b946d518cc46cc6570736f8ce2fc763d6f97250eb3c0133a05734065430d99f019d88097f5523fc189fc24fc252e535acc3a484d5082f7a5d062df3642c655e0f9a32a7e824f3efdf48a5124a748a24962a6feaba5aa7f84b95d374c2f9f76f45e20750feb5fef33380723a96e46f63c5c0329901a78a310e67893acf80a556c5e127a9cfc0427f47173a1cab4aa6457a55d699983eef6295f86cd1a9b056549a1b624769f1296035968c4a9fdd216761a6ff5e50d33f1bb3d0f735165a33dd9f859e8309ff4023bcc34c7fc2cfc5847fa8117e844fe1e761c23fd239d3b3fc093f1f13feb146f8013e855f80b5ab3761edea4fd26a575f8845e2534d24ae28f517898b30e19fe9da76b3fd09bf1813feb9aea3cba7f04b30fc5f60f8bf4c0bffa55824bed244e29a9dfc45e2324cf8d71ae1ab7c0abf1c23f43f8cd0376911ba028bc4b79a486c9ae32f12576275ef779aba97ffe7a7eebd0ad3fc7b8de6cde6fad3fc6a4cf80fba8e259fc2afc184ffa811de659e3fe1d76295f04fba4a7830834b97dcd571aef0479d0ad959dae49d8fcfff5e166bf1d60b37c2dfde1dd7615aff8cb5ece678c24ce44af8d1e47a4c935f749a688d3681f41b30e9bfeaa4378da54e7e1a73b06fc4ccec378d993de0d3cc6ec284ffae11de63be3fe1376394fe08d88f760b26f8cf80826fc570fca5c1c17ce2b80d13feb746f8213e85df8e09ff4723fc199fc2efc084ffab736d17f8137e2796987cf1535c5e5acd926d5fef9ced9cfe96f5f6a68e8b5c9be09bbd81fd5d581245a21a1fde6712dd8d25515497447c5170fc19027e22730fe635e54411afa951341dafe95e5d387c727fe3680ae5c8c5b8e0fb30604d74c078f593ef0bd0fd586a37d5a4f62dbbf84bed0730e59ba5422581d60f62829beba8709f469f5fe02e7d9596895579563fad97fe04dcc3afca955bfd68fd10c6ba858675ab5dfdb17e1813de5223fc029fc21fc17afa5aa59290097afa1ed5091e60dd6e918a60be870f22f831cc425aeb2c64504a16a2f642ac1565b733abc2a9292ae2ce22f0631f8f6349d8469384e316fa4bc22730206d75405a30a6adbafc44e7492cc476ba103b69cbfa99220336c84540ce1b7f55da539826ed759a70097c5f02bf85d2d39a50f2b96545aca63ee15e096ec96572d781c1c28168905b9b72435d926457842da3fc7c34370c9175231e0662f7820e51be7b41c7b898250a1fdba7e0195dfaf0db8e517ec88c5ba51d671ed8f49c1ecf46e392a6319e34cf6206d04967006a2302db93ab015b39f89d43f51c96a33b6b72f41d8bfce5e8e7b14875d1458aa7145f4cbd5cba976a496f9570766b3d859d9f48be80e9d155a7471b146ead2c80fd84fda22eec7ed66d379d7fd7dfbaed6ebd68c21d4bfedf50f55fd3786fef093cd497b018f7d0c5980f38548a724c4d919895464c5fc6c2eca90b93bfe0213a5339fd84f50ad64db75534be9b4e643b1fdd74af6211e9a58b4833199199ac3cd6b3e3272aaf6151c9d544a589cfa8bc8e09df5a23bca94fe16f60c27b6b8437f329fc4d2c11fae812612cf3ae33542bb3f2a4ebb39ddc027ab07857249f14c79e0c974f46c8277cff1a7e3f52de2f13759bddc8e6e5127f37ca7a37d05762bf85c5aaaf2e56adc577b52e472edd89ab6febea7edeeec86add6f7772d6a751f7f7b300f5f3001a8a1d4c84d4fc8942c76afe7774dcf8695f914559e4667f67fb987345295d6d3d29159b55db132e1ad2603a20ca4f9d733355ffe9c9e609b27de2629eae7e18f577b17c3210ab4b545bc0ffae8aef61bedd361adfeeea633e6adcb5f32b07f9f1edded705c0ebdc41d18083fc1f6092070795fc2126794850c91f61b5c6504dadc17cd61a1f6376931fb03f6713c6a320288f4f30c9c3824afe14935c1854f26798e4a2a0923fc724170795fc0526797850c95f62463722a0d17d85a93c32a8ca5feb24f356e5a854544e303bfb7f98caa383aafc0d46794c40cadf622a6f1b54e5ef30c963834afe1e93bc5d50c93f6092b70f2af947cce6760868733f612a8f0baaf2cf98cd9504b4b95f30c1e3030afe15633121288bdf30c913834afe1d933c29a8e43fb041afc90107bdfec4d26f4ac0f4fb0b633135288bbfb1119269014748fec154de31a8caff62c9373d60f2b168bce07c7e3249644fb6394ef3d58dec64f654df19a9109b85138b6888d9e7fd0434f82826785640c1393ac1bc9d519a817646239d706ef3b383da7c639d64fefd4e01b369139d60bec07e4e2a82fbe303994db1149c1b30059b6182cb020a6e8ea5debca0a9d7024bbdf90153af25967a0b02a65e2b0cf2ce01216f8109de25a0e0d658eaed1a34f5da60a9b73060eab5c5526fb780a9d70e83bc7b40c8ed31c17b0414bc25967a8b82a65e079d645ea92f0e58f775c4542e0faa72279de4bed6ed925454be1e17dc194bbe8a80c9d705135c195070572c8b5405cc22ddb0d45b1a34f5ba632c960564d10313bc3ca0e09e188beaa02cb6c224ef1954722f0cc68a80307231c13501056fad13cc3b3a5606ece8e88d695c1b50e33e98c6750135ee8b69bc2aa0c6fd308df70aa8717f4c707d40c10330140d0151e4611aaf0ea8f140ac05b526032da86d301c6b03e21884e1581710c760ac885b1fb4881b8281de9001d04331b5f70eaa763ea6f63e1950bb00537b6350b5876192f70d2ab91003b25f068014616aef1f54ed624cf20141250fc732f9810133f9084cf04101058fc4041f1c50f0284cf02101058fc6041f1a50f0184cf06101056f8b093e3ca0e0b198e023020ade0ecbd8476620636faf13ce7bb98f0ad8cbbd834e303faaeae854042738247a1c56601c13b4c028c12aef630356dee331c8c705843c01837c7c40c813319b3b21033637094bc11383a6e0644cf24941254fc192f0e48049381553f994a02a4fc30aa4530316483b623d95a705eca99c8eb1383d288b1958f29d1130f966622a9f1954e55958163c2b0359b054279c1f5c7a7634feeccf027ef6a7e6d84e6f787be1fd60b3314ce704c5b41386e9dc0c609a83d508e705ac11e6625a9f9f01adcb3063bf20a0b1cfc3b4be30035acfc74ce4a2a026b2004bc58b03a6e2ce98ca97045579172c092f0d9884bb6295c265012b8585588972394d89b21b16912b024664774cf0950105ef81559b5705ac36176166787550335c8c49be26a8e472ac28b9360345c912cc16afa3b1c50a2c32d76720329558e97543c0d2ab0ad3fac60c68bd142bc06e0a58802dc3b4be39035a2fc758df1290753596916e0d9a91f6c440df1610f40a4ce5db83aa5c8395b077042c61576282ef0c28b816137c5740c175589d7077c03a6115967af7044dbdbd3083bb37a0c1d5632adf1754e5062c5bdf1f305bafc6547e20a8ca6b30ca0f06a4bc1633e587029af23a8de0fc7ceb36b290514e6be56b6527882f26b2e9968a43ad2bdfd8a91cfca5b697576b6b27c4be4e3c71f5611d93888789589bf84894af4dec25be0ca20fb626713d56503c1ab0a0d8a013cc93edb15404f3682382f7c62cf8f18016bc0f96e99e089ae93662e5c49301cb897d31959f0aaaf27e983bf47406dca1fdb1b2e2998065c50198d6cf6640eb0331e1cf6540f84158d3e2799aa6c5c19849be10d0240fc128bd98014a8762f6fe52507b3f0c2b555e0e58aa1c8ea9fc4a50958fc0547e35a0ca47ea04f3d19fd752119c60f4e728cc365ecf806d1c8d59f41b012dfa182c05df0c9a82c76292df0a2af938ac5a7f3b60b57e3c5674bf13b0e83e0163f16e501627622cde0bc8e2248cc5fb01599c8cb1f820288b53b032e3c38065c6a918e48f02423e0d83fc7140c8a7631a6f0aa8f11998c69f04d4f84ccc2c3e0d6a1667612c3e0bc8e26c4ce5cf83aa7c0e66c95f04b4e4737582f9a12d5fa62278222ef83c4ce3af026a7c3ea6f1d70135be00abafff9781fafa424cf83719107e116677df06b5bb8b31d8df05847d09a6f2f74155be146b8aff10b0297e19d668f991a6d1723966323f65c064aec084ff9c01e1576289fb4bd0c4bd0a53fbd70ca87d3596c0bfd124f03518a6df8362ba16c3f44706305d87a9fd6750b5afc724ff1554f20d58d2fe4d93b4376231f927684c6ec29aabff066caede8c55d82c2758857d0b668c919ce0c6782b263c9a01e1b761a998931330156fc79aef8d52819da0f97e07c6a3710678dc89f1681294c75d98e4a64125df8d9975b380667d0f96119ba722384146bc17d3b845408defc36ca365066ce37e4c78ab0c087f00338f2d829ac78358466c1d30233e84f16893011e0f633cda06e5f10826b95d50c98f6266dd3ea0593f86a9bc6550951fc7fa363aa4a27282be8d27b01e888ea9084ed003f124c6a25350164f61c9d73960f23d8da9dc25a8cacf6059b06b06b2e0b398f06e1910fe1cc6a47b5026cf636af7c880da2f605e76cf1c122ffb450cd3564131bd84e5fc5e0173fecb18a25c1a44af6088b60e8ae8559de4bed66def541025d8f8e4358c7d9f80ec5fc704f70d28f80d9d60bef149bf540427d8f8e44d2cf5fa074dbdb730160302b2781b63911790c53b98e0810105bf8b41de2628e4f730c88302427e1f2bc50767a014ff00e33124288f0f311e4303f2f8082b8bf20396451feb04f30da90a52119c6043aa4d18e46141217f82f99685017dcb4f31c84501217f86b1280ecae2734ce5e10155fe02b3e411012df94bac3d3a32607bf42b0cf2a8a090bfc6588c0ec8e27f188b3101597ca3119c5f60dd4656b0cdb177ac92e99ce8b7504ea8cddceeb1dbea986927e18ecde19370f98819adbed824dd6f75c9ce5367bb54929d6b8f08fe4e2798df6e9f137f4a88fa2f2e80c6b85d7d8f55cb3b64a05afe01133e2e03c27fc44a8792a0a5c34f5875343e6075f4b34e303f0971422a823be0e3bcbf6082270614fc2b06795250c8bf619d33930376cefc8ea93c25a8ca7f6099716a8632e39fba0006f0db54982438f5f52facbedb31607df737968ad303a6e23f582ace089a8aff6292670695cc471db5c5ddac0c1477119d709e32a5019330aa132c36150fca230793bc5350c98d30c973824a6e8c499e1b5472134c725950c94d31c9f3824a6ea6919c6f193a8bcc639be7183ae5b5f93b726e7eca9ee402e149768d8b5d2a3a60de6173ac5cd83903e5420b2cf177099af82d31b577cd80daad30e10b33207c0b9d70ee8eef16d01d6f8d09de3da0e0363ac1fc768f0cb9166d31de8b32c0bb1d267c710684b7c70cbc3ca8816fa993ccbf5f12d0cfefa013ccddf18a80ee78474c706540c19d30c855412177d649e61ee2d2801e62174ce5654155ee8a65c6e519ca8cdd7401703fbf3aa09fdf1d7312f7ccd11c603a51dc3a8b90c7337e9674159b65fd7f355b276ab615b2ce1b2a0e279f66bd2fb5ded48aba9c3fd1f79ee84e16e25fc33a95d7f875c237e007affbf1587b60b15ca18be561b158ce6395c2dbb03d9395e2ef69c267e1b1596afdc4f64ca6c5be9c143b047e8e88053fe97eadf87aa88c4f95389a798215148f1797eba6e748e0dffbd3039354c6f871c2cbc45b3753e8a57879cfb7e4f0c39cfd90ee8991aec1ec098668c7a9c8fa8d4dabcef2061759b6512fd2dc8e6d99381cb9364e5be7b7f8f34cd9d356582c57ea62b9bd279690b91dcfc922c5568a387ab574a7107c9328afc05ff989592f2c66b5ba98ed9052fa9558365429f2bc7dc472f09473def8895b2e16b73a5ddc4678e23653a4ce7219337eb77eb3c5646b2c26ab74313926cbe599f39b89d6551d035f695979bd2ce51b7c58396487c782d7256b44fb0a967abc6599b9b2ad37467d2f1df59294f2c60c41a3c18852ad0f16bf7a5dfc66105a157fba970886c7caee07a8164157b3bd453ed49724e9a46a5f2cd60dba586f9730d6b8a673445cf898d06a1947551bf3a71592507cbe483f35fb61f15aad8bd72ebe3dbbb9e28ddbb7d349b09fcd8e9503f5567dc0fb78827882e9a4737f8cc71a1d8fe959a9b3a96bf301589cd7627e8a3f1b50363cc37a572104c174f66b117e629687c56c9d2e66639098cd13f9b346fa26761fa36ab5cc97b9b8322e3568da2803b118add7c5683261e9ab52957f536ec5b546d4de998be936584c37e8623a966163f4ba92c21d8372f1cc8e1d673255a472bd680d555835ee860cc66a1016abbd536913b8c3851ec23c910af5d6b73c1f2e4b50fbb965642e6683b198eda38bd984a425676aad02bc0c4dd4664db7a41c82c571a33f9b8c9f35e2b6c86548ed96ba85fb89d5502c56fb662aa7d95e4009c867feac329d9a3c1f8bd57eba58ed4a58524e11b19f2dc6a496c9d6cd7c915bab63256762bbc66b163f440a3022fb6375472a39749a487bee8797cb3a32bebc4c2f97a65f160dc3627a00e6ad637c4b2cedea8507022d39d5f657a6bdd3422c5e07a657c606f74e1d3e992a638bb0381ea48b631561be9d1b38df52da4231c6e9601da779c49cf0de1d3f255b3a1c86631c0ed171188fd65ebc176a89f591ca1b3344aa27f6eaf592329dd223b0181eaa8be1349f315c202cba3685ba265bf11d89c5f7305d7ce7105a7603f3dfc6c90481511881c37504a6f84cf149a2ccae936defcd9ddaa3b1b81e81f597faf53e278b2fe2d3cd5b12d178d763b0f81da98bdfb601dab1ab451d556bc56fa9acd7f15895c57deb274edb62713aca5f9a79edb344f46ef2fc97accf84b64e198bc5efe854c627314f7992615ef276582c8fc152d14f3f9dbbede3bce5a3cc895be499f224b7c7e277ac2e7e7d59e29198328b3285963b605a1e97783cc54f2acc4d2b152873d8382cd6c7eb623d042d41ecd1bb2a4f49b8343686c87d81355a3f34bd31d5124cef13747a8f4e5a324c13f331f8884f8d55b2d75b71e3fd42c94b874c9501e3b1f89c8879cf89f308ef819c2d3c4a6e95e98cdf724f6c69066338018be149a9b499f5e3b1a9f47964734c762216c79375719c9a521cbd63ceb675aa386fced84ec2627b8a2eb63b27cd83b46374d4a37793311aa7ea6814a069efede99ac292f57465a23c9d82697f1a36dbc67feda76a053e8ed0603db7bf9a256b884ca5c3542c26a7eb62521428263c1ece686ae672d6342c0e67e8e25018280eabc0fb699ad6597af6b423168333753198e4894151ec401d75e55edf0ac6dbffeef27fa5d09faf39a94e9a4b520dc14f3ca763f13c2b15af315e8b89222e6a94cd1e49b4633c413ce1df548bf6e2744be0065ff1ca9c7dcec0627db62ed6f303c4da1e77f417cb7479a4e33fcfc4489c83e55418a29da6764fd76ad0bec14bf74435577a397516168373d39f2797ac859d4d2fa5148bdf79baf86d83b670f0fe9eda0cd760b3318dcfc77a1dd3cd5d7384f4bad84870f64b929db0b85ea08bebe0a4715507b0b95328d3adcf3998d617a6d26393aad64a76f66bb5b958fc2ed2c56f90efdadb8961e6d2a40cd3f9626cc660267ad1c65bd7c45e13e5bcba79589c2fd1c5b99fa7ecf6b6349cf98155a2cce2f3e7339336f3313d2fc57a99d2f792ec52287e4c259dda7d01a6f765a9f8e17ef4a62aa976c66270792a3d12f1759edd2b5425d6f8d48a913aa7ae8f9f0f9d5e0b3cfdda64172cb657e8623b2a407ad92581ed8337a4500eab12de4f6c76c5627325366b36bd596ed91baf5a88c5e82a6cae44aabe58e2fec0544650fd8fb2a66fa7bb611caed671e8cf92f59cd195dcbb639a5ea3d374249a62f176e3ed852897654aa21996c1ac6f0f2c2ed7eae2321c8d4bb0d1fce0b5d2222c1ed7619e8ebf72c12edbe2dfc697ef65ccde00184fb178298ed7e127ce8bb1385f9f4a3b3bd14c42bffdabe9ce3f28c76270832e06bbc5eaa6cd330f16a66caaa35fea377ea82cc1a8dc98ca3c7c15a29fbe072766982567a68cafc06276532ab37cfdd6709bd3ebaac4627a73f03eb011acd85779eafcca4f0caab018dc927a1f180fd37f1f981d3fec79a652682916bf5b53994783d962b21866db0e9761b1bc4d17cb62964e0f001cf999297e6197c3998bc5722c16b7676eec87cf7698276778717be35f672e06d5580cee48a515967a0ce0bb29a236e32de74a96d9f56f7b62b1b9131be149ecabcf952356f1963f418cf0d727a8719ddf968ad92976bb34f1fafcf4fcad1558acef4a673e8a5d5eccb53e5ec2ecd6a6d3aa0e3e36905ecba6068be1dda9d45a7ac2e97994c9c7099a5aff8b44c4beac428a3dbba74efc86fbe5f95c3d31a7c0ce354363bee05097dfe83ce7e1afb45283e789b298d7c777bd4b2ce11e0b4e9328b3ff1b10e160d5292091a51e46f62f6b84e40a60ad4305217b1d3aef5f191aeb1d51fb03268b85ceff1d0a3c6018bbe471da1dd9ef2f12692a63a46459a4f98481ff5c4cefe5a99a2753359acfab46d0abefcf9a926b715f8e7d3c9fce863ac79185b943a7bb2d40cd2289b415b9a741346f78b3c7de8868829c3cc593a2267998d03fd185394408506d86a4e2e681ccaf13d755189a3dd45dcfe4742fabdddeb471b480a7c5fd94c0f8a6f48b44bacc1681e3bb628401db3b8d1c6c0f5062e35b884e144ec72a0b9cbdf04a55d218c0865020dc1471103e489d55953f3d55787d5c40b96807721fae94ad0805b01b9a39c01ea204d64164d545ac80394ba2c20cae6d4b07dcc394e0da6bc071817c048bcf925e239e568602da62e6407b84dadadcd97332e393cfecc5776a19866d75610097d7ca01f72825b86ec0da6c70a5b27f8bb7575789562c17e5764ac251398c9de2407c8c126227a6fcb8d4ead630c03b05d4ac8f53c26b092cb0d4352210064c35b90ea62728313507989ce1bb30207aa39b83e8494a444d04a2865015f48db670e03c4509a78b75531a6b38a9216c7b19cb1c5173ae617c493faf2b67cb0ec830009cb8b503f0694a80cd4006e46af251fd3000caede4007a86ba842a1583bfcea6cae170535b011b7a9612d116c0866c15e0b84018501d32d841f55cb6b29bda6e240c80beeeec007a9eda73574d9e496cbd88f59a988bc9575e560aab9a233263a5c89a3556806180c8ff53105fa084d89331173cdea5c8b76fac8a1db35819723fbe03e8647c91ba6ce336a6ec6d83742eecb1db30a0ca03d5c04bf4bebcda5c5c0d688501d133031c442f67ab438737ade1ec30d5bc0e939fff5b5307dc2bd47d11101cdc40b344f44e409b0b877fb611f4bdbe4a09af15703a9c99b3f69cd930806a047cfdd72841f1717f67f94a18d0ac1fefa0799d7aa468a6c0b2c2b3bf395fa1512f420a03b0c55107d81b94c03a33d8b06ef02c59ab11530956c4262384a5ccba678283ef4deac15d55e0bb67a0ad115dd175b1d5f8f5b1791fe1c8b2470067e32d4a84ad3d1658c2968a85631521b2b7c5631c586f6777a8cd3d73bf32649e590d18117f87ba6250560617b387ad0be8952207d8bbd49656224aac3aab0e5563e0cb997d4e6ff89ae25d263be0dea39f42c0b14c144187b9ffe289c60eb4f729a1b500d0b8ab11a666f9fa3c07d207d4597292981db64604ee6c28e51cd7d46065d16a2bbc3080db04aceb436a17039e9219c6d93c7cceb682f511fddc317b9a679d1013ee3ed8b1c0ca3ea6eefcb17b5db93f364b4c7b0a7badf9d34407de264a783c687bcb083be8e5a1c0c3c63a783ea19e4030c7ca901358eaa7288601e011a267b669638f70ef22d7f4974df8a38e2ff068c3ecb1aa55e2a9dd32858b191a583edf07c038cd3f850b36f2d21eb7cc4b5a87e6a53c7736cff794bdbc3427d1e7a5d41f9817702032cfc7ca883c5fd56b5eca8d893c5fce615e5ae5499eaf71a13c5f7d157929cdf1cff335b13dcff7708c4e677c2a735edc9cb7bc84631879da594c79dac91679c894c3bc043336f390494079494687f3d29a9e969766df671e32009b87b601f392ccdcc94ba973272f6947639ec609c9f30cb6e4a5d1619ee7db33ccf3d5fb9297f63cf2bc9416c1396b4a6185e7ac052de06b4a3ffb3fbedcb3802ff7fc9c43e82e7d40db2bfc827af441a57b32fbe7efeb456ef568d1234e8b39726339fba006e5ffe9f469eef2105ba712c574bcc459603afc97d46e3607652f97e6ae4fe2236d4659d1081fcedfc1e0e25726e11c1d4a9ced731c9c5f9b8473582871fe0432fbff4cc259184a9c1d4166ffc6249c45a1c4390ee0fcd6249cc5a1c4590d707e6712cee1a1c47932c0f9bd4938478412e76d00e70f26e11c194a9c2f029c3f52e2dc4a8333f5130b46d2a1dd2b4284f66580f6a76ccca3e1bea51bb1dd6dc43f23c3d78eca32bb019ff3e76c64f465685687eaf316d1083a9cada8708e05387f3109e7a850e2ec0470fe6a12cee1a1c4f93c7370fe6612cee250e2bc01e0fcdd249c234389330a32fb1f26e11c114a9c9b8075fe6912ce61a1c4590370fe6512cea250e23c11e0fcdb249c85a1c4b93fc0f94f36564d6130dddb9693761c5f4c05f36fd0a4fcd72498852184f91480c91a1904735808613e0a60464c8259104298f70298514a98aa53ae42cef658edab538e102d59a75c3170e57328d1764a62a76ebf7378083be8ae0056dac8149485a144c9c07485c694283b6a327c3c4afbfc1ac26aa83115c8f740f66e620a48c272920ce4330064534a90dd25c81aeb239eb1f919296a7e5c43c232337cd9fc3e50623633112aa1a59241bd05406d4e09b527736676a63ae33ecc333cf7600ed81694607bb0641d21fa2320490b8127a8b0be084ad696945855ff12564541711c6501e5287b532a9c77039cad4cc2392c94385f0238b7a0c4d90b94a67ed69d85b9441d0b4ad4d69bb3c5e4b5d5f0d9e997c04edb50a26c23518ec8fed41a3278ef033b6c9b0d78a3b20faf1b15bc2f00bc76d9e8e94cadc2219da84066897f0398ed4d8219c6babb252813b7340966710861fe092cb383493009fb37c960fe056076340926e1b82519cc9f00cc4e26c1241c512783f90780d9d92498845d7164303f0630bb9804338c2d9c1f01ccae26c11c154298ad806bd4cd2498a34308b32d80d99d12265fd8e2ec99e3decfa452ec8a14b74f60081a90792063f7a0c4b70d738f02d56851ba677c8c175b9554c9676ee47ccb12d231a22da9906f0463443d2991dbfbe52c173bfad83b0c2d639a6d8c43d057d90a58e9569bb3afd23da12b8cd3b9fe00e5652f4a94edd1f212ee4013c6327320b0c65c4a846a2c529599f640ae3ddc3bcd2a21ff5bd365da8079475b53621d105715950b61936537709555f154897273ad18e759232a26dc710a63eba82fa8847a67a3444dcd070d23cad1a038e8930d947037aff8ddeec23c263918544e7d2951f6f11401b675ae165b39722b752aaec4fb2c10da2b19e47d40d6ef470959b7cbc23cc67727e4614c1262f83b4ea55e006d103b5ed65b3f27457b3d15da4e006dff6c7a06d59612f385bdf26d5a13f9ac615ccfd119780603a84bd812b1c36f9ddcd7b4de12c7e77ff0d9207c0754b5dbabbd876ef8327f235059e551bbfff63e208bc4031e78b9f05d178939a0e19db0702b40389012e1284f26af159594be4dd5c016887275796c67d77a51287095932da399c1aaa5634658e63e12254a8e75a0ccdd261b163df23f67d1df008b1e448950ed439c7cf10c9c584b689563a890ee00ac723025d22d99ae51c055e08540b8277d7f0dec720825c4de9e92162e51986629842f53c8d20470323bbd07d8e9504ac4fe774e269c424666b151e0a9e69b8493743711ba8da8417f4081493849b7bf20c3b915c8ecc34cc249ba390b19cea90067a1493849a7df92e1ac07388b4cc249ba8b1d19ce8b00ce62937092ee134686f3018073b849384977b123c3f92ec03922db9dd0a9ef2a423825976c57912500edc8cd39b4e7a86e2f41244349b69cfb35e07f8ea244e96f2321d2d59c64bdf8e701bb1c6d124cc2f2930ce63900e618936012ae082183790a80b9ad493009d72a91c13c02c01c6b12cc30eeb1781880b99d4930c3b8c7e2de00e6f626c10ce398fc1a0073079360867152ee5e00e638936012ae0821837937805962124cc2b54a64306f0630c767a331997c6898b8fa216b4c1e02504e300525e96ec96428df07282752a2744e332af0200df37c8fdf98836f1235bef9d66b7e5873953cb57bb5e8b7e4f7930542327cbda9f07503f8266fce8c0cc52d0ae5eacd6620234fc9064ab85fe20cab869e22cfb45f6afd687d3626cb90a1bc1658e5547ab7072e285cc45608747cbd263fdcde1635d9baf2e3e1c3b8c46b0b00735a368627f8cc4d5e3aaac10975e0bcbaea56241551d6dd6468ef017dea3b9a8a96d42d22433b11a09d6e2a5a52e79d0ced73a04098418996973ca5d6077c22e21aeb537ba3c9996289e20a3a70b954e0da03703329c1c13d3c278bcfb88f39cbfa8b8be51ee772eb1987f9dfd9c3f34890e16751c2e53bccc3e506f1163a59d4fdab8588f0b9f41d8095965282ecc012bbf42aa68b28872b3a50adc5e808a6bfcece46d75beac7e492c1243bac6c6760933b990493b01f930ce63c00738e493009c7cbc960960298734d8249385e4e067312805966124cc239466430cb00cc7926c10ce369997300ccf926c1241c2f2783b90380b9c0249884e3e564308703983b9b0493d06927833911c0dcc5249884fd446430c70198bb52c2cc6589e7b527df3b91b07e27db3b7110182f5a980d5bc5e6b6ff1736029a006c7537936012d6ef6430670098bb53c2545312783fe75ab0e54f56b6a020c35704f0ed4189af2bc017bff11f17e61c9617e6391eff02a08b2881b60740ff5bdba2dc02102ede9ce5a3779e47180fd739160c55949b04338c87eb1c07602e310966180fd73902c0ac300966180fd73906c0ac340966180fd7390cc0ac320966180fd7391cc05c6a12cc30ee79bc16c05c6612cc301eaeb31f80b9dc2498613c5ce72400b3da2498619c9e7d3a80b967361a9123fe738dc8f9cc41b8c2ec0e61c2ec4ed6213c077408d750e2e50b0866b06a29a05680e30b5ab822154c4d26b48f08e7a1866f0e5c4760a92b2951e25bf2a4327f98b0bd4e367b783db0d2da6c740ef395bbff9df56a87806aa88e121fdc4cd759250417ba90cf1526b3c19b41f65e455d52a6ee1885b193630140b957b6062b943d4e15f5b83350c1cfd02a950bb0c23a8f7d2e005a9f8df2b1509c9295e5f2912c6b3f02cac7066a7cb3c50fd68ae9fe1bac3a7bb918b4e50e518dd82b9b0c1fd96af2bec0fa5653e2e35b3b4eb5fea8b63e5f6efd94ef34e82c8f9e207e582f403acb53c8708ea0c2d907e05c4389338fc51f295a1baba9136ff238514077dc767ece0be92c8e8954b82f06bee55a6aebf5b7e6228cb3e1f24159bace249ca34289b31dc0b9de249cc34389f31150b66e3009677128715e0d70ee6d12ce91a1c4f92bc0b98f4938478412e77b00e746937092eea54986b30ae0dcd7249c45a1c4790cc0b99f49380b4389733dc0b93f759f126ff3ccb6fee542e68af652b51cba803b23cc11aaadb19e13f629d551019d05801e4009b48db4cfa2ecf728911d647b0480772025bcee2cd53382ddbb69124e81ed1f2182fa0e68a91f642254c2be7832a86f03a8079b0895704a2c19d43700d4434c844a58c39341ed0aa01e6a2254c229b26450db02a88799089570422219d49600eae1264225eca72783da04403d82126ab013af08ed95ecc4ab8500ed9194688b58fcd406f7cc253e88b7d2fa1fffdb8e086f5d2d15a3a555a255c247e8d78920565816be5660e74381bcb1a0c6f809ed7b5e2a58d249047e5abd4a84a3b2d11f90dafc9261b47b7992cd3179170c9c1c6d12ce8250e2bc16e03cc6249ca4dba192e17c12e03c9612279f3363ef1bcffba7f808ff3ad7345c5b10afc0dc3351c237076a00283f8fa344ea6f57f930ae358e007fe0784a94ce74db11d9effc239b0fd50b64ee134c2a2b0b42b988e64180f3449370921eef4486f35580f3a46cb4a3d2db3f3e94cb1400da934d454b7af82d19da2600ed299468fd2d4b243dfc96ac083813b84aa79a04338c7b899c05609e6612cc30ee25721a8079ba4930c3b8cce67400f30c936086b1c57e088079a64930c3b897c8a100e65926c10ce35e227b0298679b04338c7b89ac0030cf31096618f712391bc03cd72498616cb79f03609e4709532d9af5339b398c479a5c089a94e79b06348c07ee5c04805e601ad0301e6d720e007aa16940c378f0ceb900e845a6010de31127e701a0179b06348c07f09c0f805e621ad0301e757202007aa96940c37810cf8900e865a6010de39127a702a0979b06348c4bc1ce0640afa0049acb826e194858a2926d19f835c07b2525de2d245e1ef0520157c9aea6dc27a7311538fe9f02771525b8643394dc93c109dda48ba950ee0266285d9d8d2c5e20feb5afd3ac9fc0cc3c5efc5dc1568099759531cb0de37e6207822c7e0d25de1e2236ced4ed12b13196bd351bdfd9891fceb352bce1422b2c52e5969ad5e2dc6c32ac643b84f60605c0b59458d559eef115536a334408fd52b21922a78322e13a93e112d6f964704f0570af37192ea1bf4a06f70900f70693e112b6aec8e09e05e0de480937d8aecc6144db02a0bd89126d6fe084a9255eeed6d41ae115d489e563b54238f71d6a58d8371d3e05780c3767a36f80239e29dcaf159eb576f666ed3cc4307bb62300d05bcc2d0e0887ffc86cf544501cdc4a89b6354bd42f40d8306841852e0aacf2364a746aa2446a6b978687723ed45fc00e6f37096618e74345721c987764a3cf0a9bc2e3ee9a0ee3485401c8e47752a254abeaf816edff9d138e57027c7765bbe6d66faac1bdcd9556a875e2ae96116f3d901b2142fb272831efa644db4583160af41e643e2a944799ff0870de63124ed2e3fdc870360555d0bd26e124ed2725c3f93de8dbbfcf249c85a1c4d91a64f6fb4dc2493abb840c6711c0f98049388b4389736780f341937092b686c8701e03703e6412ce11a1c4793dc0f9b04938478612e7d300e7239438bbc782ae66f0e4ce64475b1176cd8da182da8f39501fa584da87c50f724c62eb199fa6b32686b9d4fa7925e3c31a7384b5f2b3ebb83d67a5579e6cc79c7c00f9b16c1404a99fc114c67523c3808bffb84938478512677b80f30993700e0f25cea740667fd2249cc5a1c4790dc0f9944938478612e7ef00e7d326e11c114a9c1f009ccf988493747f1c329c4b01ce674dc219ce05b6c7019ccf9984b330943837009ccf53e24cb6c0c19dd109173890b588ae056df9174c4149ba2b2319ca9660fce8454a943d98fb3c65ce812f54b05783241efa085f6fd3b1c0425fa2c40aa726f2c3d6565b245659cad45acacc67f6b16b9562d54855a8a726ee0d4acf972981f604404b98da159c8bacb57eb69cd58b9e26f7597661067b3c68bfbf928d5a1e9bc304c5d9f3e9c33825ec2d80f3559370168412e79900e76b26e10ce7066e4f009caf6f4ec7c98d338cbb34fe0c50be4189524da42d901316ede354970807497d94a5e98b6430f703b5fb9bd4304b2d59ee81b944ab95c960922d35180460be4509539d4d5be0c9ea61b6c45d00bcb729e1053b0080b00384cc2e178312f31d53d192f67c92a17d0d58edbbd9a88c5273934684f2008011c04edf330966180f00180960be6f12cc301e005004607e6012cc301e00301cc0fcd02498613c00a000c0fcc82498616c5a1602981f9b04338c0b5eb70130379904338cfd478300cc4f4c8219c60300b605303f350966180f001807607e968d01373f5369c27800c04d00e8e7a6010de30100b702a05f9806348c136aae0240bf340d68180f00b81a00fdca34a0613c00e01a00f46bd38086f100801b01d0ff9906348cdbae5c0c807e631ad0301e00702900faad6940c37800c06500e877a6010de301005700a0df530255c3c323b33f3c4c365bee43e6c0fb8112de40e69e2edbc0968b8fb9b87ae63e49a1c8fad7de17dcb9f2fdc09d490ef56c0323dd7d692215f0f3c144da1f2981fb3b1680b024253b16607b80f2a76c64fcd1d9cff864bb807d0932fecf94f0d4fe7485967aff9d69350f804ae71773b231613f125936de1364e35fe9bb8df9049906f1d37259fd545a776bac1f5630b5ec6e0de3f3e43784b03e6f09b2f56f943083ed781cc623271a033bfd9d12ed108fabb40acce72cb37e364788adb38056b1ff0b47509500f07f64a3ac4d6d5c298cd31a2683e2e1cf6c170ffa6d55cb840f502bca5d2e6e252ddaeba9d07e04acf42f4ab4feb75525f40ac82ab2c6601de7df26e1243d4f9e0c6723609dff9884b33094380b00ce7f4dc2497a963c19ced900273f91d1189ca423f364380f05382326e11c1e4a9cd7009c51937092ce6c22c3f918c0996312ce91a1c4f919c0d9881267e72438bdada3304e611c0b603636096618a7304e03309b9804338c8bb8c600984d4d8219c6455cdb0298cd4c8219c6455ca300cce626c10ce322aed100660b936086b1b7730480d9d22498615cc43512c06c6512cc502ee20230b73009661817710d07305b53c2d49da8ad1fd498227fe21e9d27b4d45954701980db86126eb72496eaa85e6289a817239ba4234564874c1c0990b635a9038474c37eb20e907f00ce7626e1243d4e820c672730f0d6de249ca43bd990e1fc154c14dbd2249ca48d4d329cdd4066ef60124ed22dd1c9704e02383b9a849374052719ce150067279370929e1d4386f34c80b3b3493849775b22c37927c0d9c5249ca467c790e17c05e0ec4a89139f6a8b2d97e1b34457b02a599292a1dd8b6a71c2d5006d374ab4ed25dae1d6ff57cac0cb193f902fec3bd0bec01c84dd2911269b34eba8ce5d78c29e4fb22325de002e7c0f4a94ea50c8e4fd4b132c212bad50ebc41dff1a768a1076e28dcd2182dc1a343b7b86013261671e19e46f41b9ba55360a85e49d79c4ed7ab242e14280b297292849dbf464287f0028732951aaa350d4c29a2a79e06e2953c7ece26809b33b19d84200766b4ab0b91eb035621dd26a21c659659768e4298c8378b9006f6f538a00d2e5096496fa1040d9c71494a4b3eec850b6058e54dfcde9f8676dec936c65f2bdc0f1ef4789b2a3880d2f29edb3e04bc4c12876d93959fc3b87f1d3dfabc5097364207b939594cc01d99f12e4d6c226a7591fcd119657657db456fedca98c16b115c272f972597e348afd7eb275adb2c45686b02faa39003c80127077e61c91b24afc70ad80b8c16a2d2d17dd79b502e23451df67a50b85ac24bd1264ffbc6cf4976225a9db55e2479f85719ee8f500e7409370923640c9703e0b706e4389536de0324cf49266790317b24d05b602f80651e26b66ddcc163fa813ff72c9e12b0bdb810a66f0e674d0c3df6cfc1858de104a94fd18be8f88df7d4308bb94c9b2f883a05139342ca0c3b841cbed00743e25e80e490a071553527bed1025c2f80bc058908dee3a6c4039b995122ead21b3d2fe00ef304abc3c0633acd7158c9fc6c9f711b315e17da01026614b7e2215c421c00f28ccc6a487f48e9324ecb823db5fec02e01714998a96b47b990c6d6b80b6381b1514d6f4742a28c27a9eac827a1a601c4e89710bc6db4cf624317534f4346199bc5a0a5ff75c5b506a8ec886fd15c46cb0523439ed7d93b3d4214786f17f00e348ea55731cd844117015b38f28e79fee2dfae56d9c73c45bbe5728e1a9daf55430670398a336678bde3d4e44e8b8938d13fd0bcac5d1d9405990608c3ddcd316194039261b0b63edb3deed2b1f372a614badffd9d6a88072e508b33859795901606e9b8d69b4c5ffb969b4078352726c36e626713b9c247cc7354209a72159cad689c135de70e48efbaa50dbe64e00ec76d918be289459fdbf317c7128c8dadb6fce591eeefef8306e0654092c71074a94ea1889e2ecdb2159363e16c01b4709afbf80e7ee8b5c235a377562a276ad1057273adcec7ef7cd34c783ac136330405d928df1f3540f8e1a1dca83cdfa831274bc4938478512e71600e70493700e0f25ce8740669f6812ce709e62783ec039c9249c234389f3078073b24938478412e7db00e71493700e0b25ce728073aa49388b4289f32880739a49384977ab23c3b916e0dc311b1d1ffcd8bdb5a207690dcb5a871c59837311c037ddbcfde8082d926c3fba096062cc0c4aa4bd193e4f8e2f1868480931e1c83919e29b00e299266dbd328ab2cb8eac10c8016bdc66998473582871fe05daeea526e124dd5d9e0ce76090d9679b84b3289438a7039c3b9984b338943857039c734cc2393c94382f0138e79a84734428713e0c70969984736428717e0070cea35ee536d7fa632db367cb71c964b8c856b935610eaef9e66ee947b8891ad9967e97014b5c60ce7e7461dcd6e715e0aeef4c89728006a57ba9001f795fc9568abff9aca53542e424510cf06895096a5958adb92715ece9a048d8253bcbac0bb33f3f846cd2426360abbb9ab2b10fe9b00659b63f1094a00b4d4149da074f86f2598072b76c4c8ce5530fa7303e5393cfe75c26a6c6d6877afee61da05cdcdd9c0d01c278e86853608d7b506f33355bd4cc95f2477319b6b88570712a59b66e066c7291a92b28490781c9eaf1cb413dbed854b4a4951119da3c80b6dc54b4a42e1319daa74181b0241bab89529b255f14ca13885f07302b4c8219c645076f00989526c10ce356684f00985526c10ce309c44f02984b4d8219c613881f0330979904338c27103f0e602e3709661877a1bb0fc0ac360966184f20be1fc0dcd3249861ec0e7913c05c61124cc29d8fc860be0560d698b1351f613d4eb6f3510730e1702525c6aeccff0a0dc24c4e360bbe0e747ad49a069430a39301ad0740eb4c034ad8a82403ba14005d651a50c2862519d0e500e85ea60125ec9023035a0380d69b0694b0538e0ce84a00b4c134a0848d4c32a07b00a0ab4d031ac6c5838b00d035a6012574ece9d60a03a06b4d034ad8494706b40a005d67f626e684753ed9be5f7960aec87a733a4746857244b316d8ea069360867144731580b9b74930c338a2b92780b98f4930c338a2b902c0dc6812cc308e682e0330f7350966184734ab01ccfd4c8219c611cd0500e6fe26c10ce388e6ae00e60126c10ce388e65e00e68126c10ce388e61a00f3204a987d19be5bcd0c562d04c32320f04532615c64b81368681e4cbd2821f96aa31162d764c292b43115c8ae60e8f8105340125a2419c83f80451eba791667a732539eb0b949364f7e4780f630ea0a6ab278cdcf6687c7dccf65abe4ea23be16c9d9db9b0c26d9ca387e9283827938fd61f76e3bb59713724bac653b8ae5d8ab1276338771542907003e221b80950750c3d4591cb03bd93eeafebf54f7ef078a8323cd395c228c1d793b025b3dcaa4cd5347877296d378e0fc1f6d124ed2b61419ce9e00e73126e11c1e4a9caf80cc7eac49388b4389f32e80f33893708e0c25cee620b31f6f12ce11a1c4f939b0ce134cc219cef9cbab01ce134dc249baee830ce71900e74926e1243d9b9d0ce74100e7c99438f98d3af93a7cfd486d00a6534cb2bad1a19c9c3814d4d8a79a849374ea0219ce3600e76926e11c1e4a9c0f83cc7eba49388b4389f34a80f30c93708e0c25ce5f00ce334dc239229438df0538cf32096738971d2c0138cf360927e9362b64388f0638cf310967612871ae0338cfa5c4d983b907d83887358cafdaf00ea979b7e3271c56231b18fe0af89fe765632688c25a9d607c328cdbf71e00c627cf37056418077ab703202f300524e1446e3290b70290179a0292b0ea21037939007991292009271e9081bc1f80bc9812647f0fc8252c7e4e5ceab3e7084b51b25ecf9f00ea4b285117c4b94b1848beb9ef3ceb8d7d10cf2411000fa64a9ed8b14afcce3ea3234bc7978ecd21c2bf0598607b693636f31f65fd7f2553674df3adfcb374a82ed92ca5ef9983f0b26cb49f529bf0c537bd08e3b2aeeb80a37fb9493849b71420c3f914c0794536267eabf2b54194a9bc313a5966edaaff58036008a8baae34e7148f30ae32fe1358e955a66ee35f48b94f039983d500d05e6d2a5ad23dc4c8d07e0a6afe6bb2b1ff4d0173afa4e3e71ace1122eb44599b25578a6c83965260abd79ab5a1506128770a3d0a00bdce34a0619ccb7434007abd6940c3b853e8be00e80da6010de34ea1fb03a0379a06348c3b851e0080de641ad030ee147a30007ab36940c3b8a67335007a8b6940c3b853e83a00f456d380867152c40600f436d3808671a7d08d00e8ed9440db3075b2f67fe75ced5d9903ef0eb3b75925b44db2567c1fd02f7ae7e6ec172db57eb2a7f557055b4d3b107d3115ca2900e55d9b7bbf26689fffad9efca300e6bb29316f61ddccb462cf7f5e2aae0dd667950229e1a1d164b3f2fa8392f49e6c0cd615081b2d1782741dc9e11e4a8e805afd5e4a9cad01ce09cc9e196ae3b3f7c0099f25ee03d0dd473d9181cf0929b75ed588babbcefa8cefc834c3fa6b9db0bf865066e62e2033df6fee1e61842e11ddda4e50c13c90cd7a9cefbab44c4cb3a94767354d913f76bb4b84f5f82c2acc1d00e607b36dc17ab865a232e2f34b960a712b693dd1eba9d07e0ed03e4489b62d530dce51d96f7292b589b607d5d3c394f846790a805a518ef2aa297ef3b506b64058ec722bebaf154feaa537ea6ea61659ffda5b0daa2b1f785ec1f81448d28282effd4b921c07016b7ec49c4ddac2b8a5f072e0353c4a8972a8c7b2cb851ad582459d70c8b87573817c63cc0a2ba809c277a815e570cd7f70abc1e781153f968dadb1539b80561cca7dc6bf00301f370966180b85af01cc274c8219c69396de03309f340966184f5afa10c07cca249861dca0f53500f369936086710ef4eb00e63326c10ce3494b8f0398cf9a04338c6b485e02309f330966184f5a3a0dc07cde2498613c69e90c00f3856c8ce4abc6e772d1fc9ccd781748650c220ce2bfb0e9c607a0d7eac56c0cef61b6ea8549ba871e19ce5f81b5be64124ed21d1ec970b6006b975f360927e9b65a64387f0099fd159370924e7924c3b925c8ecaf9a8493749732329cc500e76b26e1246d1f91e15c0470be6e124ed2ed5cc9709e0070be61124ed20d33c970de0870be69124ed2ed5cc9703e0770beb57926f6a432904cd8374f3690fc0240fbb6499b678e0ee5d2b01d800ffa8e4938478512676780f35d93700e0f25ce179983f33d9370920ec591e1bc1de07cdf249c234389330764f60f4cc2392294383f01d6f9a14938878512672dc0f99149388b4289f36480f363937086734b820300ce4d9b73c9a23ba313b688c826255e055a449f98829274e7113294cdc100c7a7d99973bf199679930d0e37020ed167d95823cf035e2aec50c9ae959f840f5e0494889f53c2e3b927d9b46dc2d57413a9000e0500bfc8c63920780d0d1776c10dab09a7243c4185f53c80f54bea3dee9db59df34537f01af1ca165361b12917733fd650da676f2a903d00c8afa833b8da41046e2b10f6cd2a0f02d5cbd79400fb30f7dc23be9090b3e0cb59feeb2b3a3f06dee4ff4cda0dbc20944b09ee0436fb8d493849db3a64385f0038bfcdc6812ba9351bc3d7d2c901d9fc3b5340867149e047c022bf370564180fa5ca0716f9832920c37828d54000f247534012ae0f2203390b80fcc91490613cdd6b2200f9b32920097bcdc940ce03207f310564183b7ae70290bf9a029270dd3919c82a00f237534012ee864006b21c80fcdd9cb38dc2b814f51be092ff918d057fa9b5b98787b2c5dd17c0fcd3249861dc0ba11f80f9974930c3b817426f00f36f936086712f843e00e63f26c10c6305d405c0fcd7249861dc0ba10780c99a1804338c7b216c0960464c8219c6bd103a0098519360867137b80100668e4930c3b81bdc4000b31125cc6d58fceec7f1db9efa3d8383b030209b9cf02568bf37a644cee7be4d12bbc77215a7491baeb67ecc17f8f19f91c123dbad9b2fc454f09a50c2f3778009a1bb447680c97860874d2951f664ded38753df8f9bd07522db8ffb4860a3cd28c17a671fa9d3379c53ddb9403e8d2b71d51546ffb437b0dee694907b7820db40f9b6fdbc4c9da8ed5c1ec18a69b136a6c2fa1dc0da221be56baab390c267a1e34131d0921265b0130f08d19295b0af022b6d458936d1e9ee2516c4a5310f20dc1366878066c0169440d572167e8073d697b3e44688f03d0af0b5a6c4c707159d99ef13997dfa1bcfd2fc7e16b30f8b22034836e3bd2b282bdb64b336e7676acc17cdd035ac2aa18b4f589b93b9f8bf8172b22d75537391e804f9ef1c457a12b0c976d9e8674a6d9c7d58283bed7a014b6c6f12cc3076da0d0030b734096618a72d7407303b9804338cd3167a00981d4d8219c6690b9d01cc4e26c10ce3b4852e00666793608671da423b00b38b4930c3386da13d80d9d5249861ec166e056076330966187b30b70030bb53c2f47fc600611544b6d7ebbf00670f93708e0e25ce2e600b9e9e26e1247590c870fe06fa30b7320967612871f60499bd9749388b42897332c0996b124ed203edc870ae0238b7360927e99c78329c67039cbd4dc239229438ef0238fb988473642871be0970f6cdf64484d4cf1820444b76c6c00d006dbfcd395dc6519db84f896c59ebebc0ffec9f9d29088bc4be866ae8372b3338c832f9eeccc13760734e8c755b6218f797b90064ea3c5350168612e5f700e5404a941d18dfaab45c6cf8582544f12931cbadcf797959cdf616154eb5b80b5fe66e0c32f73694187b3167be9b3dc57591a56e83a54e85e0c117139430bebf219f56586e09e0ce5125535becae0e21dc3a00771075c55306660f9788eac79e4fccb785aca6b44db2a95b5b037c834d292d4927c99095967780d2728829280b4389b215e81c1e9a0d6f92cfd7f8efeccfbe1d70c6f3b3d1024f7519404128271fdc0070169884339c73399e07388765a343c359b9667767ccb394e180d575bcf531df187fadf030d7b07a6a879d6cd2eb6480b6d054b4a4cd4a32b42f0147a98812ed00e69ee35e2720c72faf8eef8ee30b0a2a62ed245e7d119f4530910af6b9c0952aa66e782672a5544c493176881261fc19601c4e89315783d1df560084333cc9965df5037847985ada923600c84adbbd414536d254b4a4cd5432b4cd00da519468b71668a78aac3f87f1855855b20faa5288522bdb578804e0454485f5b72d7eb275e567145586b047aa05f014469b5dea122e9f212b75178052774c367c03ac35669fa6554feb1bf4a7f20dde06c5c0b6d9d8e6a240fc6b5fed42a1541406f5c22e57098be422dd87943584ba73fa6400796c7646450bff43fd58b7007cdb6d9ea90fa9f80184ebe6c8bc803a508a6e9f8d99f6704c4a0df039437ee11e832a0435fe0ed9d88b09c24cee608517ec6200761c25d8f6126c91f5ff9532f07281384b334bc8cad06700c21273b6040ae35ae30a80723c25cade3e50ce65ab8490d5963bb58aa9cebf065aaf348fca2b7d07d4f813b2b13590ea655d25fa509727b4d930aea87b0bd4f31329810ef2005d6b7d58a16d74fa6ba21242276ba21e0ca04fcac680217e42f13cd76c80d194385b51e1cc0585c26493708e0a25ce1600e7149370926eb54e86f301e0154c3509677128719e0b704e3309e7c850e2fc0ae0dcd1249c234289f3558073ba493849f77b20c3b91bc039c3249c45a1c47918c039d3249c85a1c4b906e09c958dde273844c2e7edcf6576175f783bf0360284a5e62e5e24b44eb2c58ba5a09139db94e9e6a4d510d974f36500e54ea6a024ad82c850b60333f7e7988292b4fa2143f90cb0cab9d4bb2a9758aff8a13eeb5ceb9a2688e1397edacc4aebf91a4b39debd3c418c7bae156a86af4ada0a5449659bd342dd9dcb61dc2f340a2c745eb61c247b50840b5acfb2b6757f7faa5afc5b608df34d5a5b5210ca8daaef037d9b0b4cc219ce7dbf5f063877cec65c3b9ec1ab62879ea9d7611f83ff1964f25db23b9b597f92cc14f983ac9d91308b0a6d3140bbaba913c5495d79b229629780ccbfd054b4a4ae3d19daad01dadd4c454bda962743fb28281076cf864f5af89f9b32560210ee919dd5f79b612f27b2d91fdb027c8bb283afd8d3d0cc02be3154f8ba83b271b1390744178672cae255c016cb4d82f9ffbabb17e0b8aa320ee0674b4be92843a15447d1713ae3e8ea8c85d8366d1975264d491b4da4a6697cd45a92ec96c42669c80b52ac88afaa20455e22be80521e3e5a012d6f11a8202af8c0178a22485b100b288a4faae7fbeebdbbffdd64b3adfabffd4ea7334d367bf7eebdbf7bcebdf79c7bcef785d8ddb115303b2c6186981ee52ac0ecb4841962488dab0133670933c4f4285b00336f0933c4f4285702e61a4b98210ee6be1c304fb68419627a942b00b3cb1266881dc5b70266b725cc101344de0698ef4d6312ccfe0c3224964ede30436852aeb5064a2ca134d05500da630d94d81aa281be0d407bad81125b4434d0e500da670d94d89344037d2780aeb3064aec4da281ae04d07e6ba0210ed73e01404fb1064a6c21d140df02a003d640893d4b34d066001db4064aec5da2812e03d021dba1d6882700da93cc67817798c93bcdbf68f36f4bfcda7cc0d9148e7145b0910339b6b8746017f17e73338bb215c6169f9a66bce5647cb1e49e9131f11879795f86cd8438686627609fc6c47e6519763f9c299b5cb7aeb845376ad8bf33719a341a336d464727308fa63132a4f6400caca195d273e1ecba9ec9f7ba31a5543e3ca2116a47cb025436fa0d1c74d5261b26659b7a7ad8c18acab405caede976e33012fba96865fa3d40fbbe3446d8d7142e7132992b8917167afec467e0d4b0819fa9ae78d1929c0b03f18d569277a1c74523eec3bb7f7d1130be9f7dff5a2999da5b5d5e7fb6f8ffa58cca14c4f0285f019467a4311349a6ceb417e66826b1956545b983e0da7f0134453f60f7121462428073e01274661abd5249788b6585db2a5961e96d55c8412f2e81b2fa414b61581606f9f4be0e383f64897341909c2f01ce0f5be29c1724e703709dff8825ceb94172de049c1fb5c4393f48cea950d9375ae2ac0d92733794ce8f59e2a48617a0710e02e7c72d71ce0992f342e0fc84254eea98661ae799c0791693f308579c497cb0a4eed9087867a7dd5e1f3fe845bd933056fdda768fe28b509f2249d4720aed4b21c4da27d3484321edf5c54e9e87f6fb367b3eee3a8e924fe47585519fe77a6dc917135084db827f1394de73d23893563a8f2ef21f5da70fa1dbb5979e1a719ec6f924f4306db2c449cd8740e33c144e00e75ae2a4460ce13d3b8236d2a72c71522729d238a741653fcf1227350a138db30638cfb7c4494d2f41e36c03ce0b2c7152939fd0383702e7859638a9e925689c5b81f3224b9cd4e42734ce7b81f3d3963a44160639a7ee78b851bad812e78220396702e7672c71ce0b92f33e57e4bcc412e7dc2039b701e7672d71ce0f92732f707ece12676d909c8f02e7e72d71d604c9d90d9c5fb0c4392748ce4dc0f9454b9cd4e87634ced381f352f683b813fd0232eb6358ab853cca68d0791f43fa311a1e6d1cf20cc0bb8c9d450627cd888320e6fdc654eb360eaf697912342d2f67b2bea68cb55f1fc4e5bc8794c9643f8b9912f0cbf0abeadc803e4c1e75d439486f3f84047e183cf4d8cc049fe9268e3056da8ea741d226215e04cdce2bac4012c787d020df01905bac4086382df68d7089bad20a648819e36a00f22a2b90c4b82234c84b01f26a2b90c4883734c8a500798d1548621b8806b91d20bf640592186991067919407ed90a24317e1d0d7221dcfe7cc50a2431d20d0d7201407e9509f92a57da94ec706327b0ee4f7a281a356daaeb0c68446e65521fe7ca3b432a41564ed23776bc724a6df837b0daf04f41a7c9b634a284effbb0daf07aa0f6c069e36b9630899d2234cca701f35a4b98210ebb791830afb384196247f3238079bd254c62739486f918607edd1226b1938486b91330bf610993d82ca561ee02cced9630899d2534ccdd807983254c62f39486f93860de680993d86942c37c02306f6262bedc15e76e4621d656bba54e82543768746561ccf9fd5da72b9679c6432ee4199b03ae087b337f9843935fa053a7bd6230c0d56ead222ed211236be39536f89f12d22ac763a545009f0aacb7a43192a952271fae4e6ee4c34ce0f72054ff5b2d7152337ed0382f06cedb2c715227c2d238ef06ce6f1ec8e8f5a59c2166377e0e286f4f23fcc590eb7212627a7f7af0a9a341697df81d40fb2dabb4d461e034da87e06a7f879d2c9ef399ed26da29a005cae99d963089ed261a662b60de650933c48bd39b017387254ce2399386d90498dfb68449ec9fa7612e05ccbb2d6112fbe769988d80798f25cc10db46f580f91d4b98c4679a34cc258079af254ce238101ae60ac0fcae254ce238101a661b607ecf5686ce30c3a3df0fa0dfb7061a62a6f8db01f43e6ba021ce2ebe1340efb7061a62a6f8bb00f407d64043cc147f0f80fed01a688899e2b703e88fac81869829fe0600fdb135d01033c5df08a00f58030d3153fccd00fa13db99e289e595364e6416ccecf8299377862b8e6b1ad1714b127dbe43c733a594e39096f27c832b22fecc4ef678e24d3d8db209cae3cf9994b3fee7ea5ec36c86d22afc1e00fe8575e010cfa88300fca07560e21d010df82c00fea57560622b8b069c03e05f590726b6ba68c05d00fc505a29a693c1e4954640d38790d3388f87dbaf5f3339a7bb24df574d59b90d39e3d7f5d0c2fa0d936f9a7f81656e39b7bcd146dbbd16cadbc3766ef7894f9968b7fb6be04cf85bbbd9e18957715a297d1eaaf52369cc58aa74159fe3ff97fc72ed859f4daedb458fa189b03b26916047a1cc3eca843d12aedefd65d7ea142e38bcfb4b2899bf4be3fcb96f031f421c2ab6042e458fa551c9ff9b31f5c4f124b4b3e71d00bbd32a2cf18a4f83bd0560775985259e0a68b02b0176b7555862871e0db619601fb70a1b6250b746807dc22a6c88b7fef301f6f7566189037a68b0d702ec9356618943cf68b09b01f60f5661439c197a0ac0eeb10a4b7c8e4a83ed07d8a7d2eeb91a3fee68abf6084843778daeae977b27bb8d45bb0b3a589e4ea33f7f5e3c26459207a5361a855632af8392f98c9dee9510a7e89c0c947fb494d6774190916f274314e73f59e2ac0992732ff4a33e6b89f3f54172ce86cbce9f2d71ce0992b31938ff6289736e909c1b80f3394b9cd4e98d34ce6b80f3af96386b83e4dc019c7fb3c4499d1ace0b770d9c7f3f90a15bcb9f90867813bf0930ff610933c479f6e701e63f2d618618696c0430ff650933c448636700e6f39630438c34d60b987b2d61861869ac0f30ff6d0933c44863ab0053bec50c6688c3c77a0033630933c44863ef02cc499630438c34f66ec03c8489296db813fdba64dfe531863c056af16f8c38196adbc1a37b358b4ed63275cad429652b6f18b3f27a6d294b5bb9b3b0fb83feef4b5c5e9f278a62a77f9d0cd73ec997a495fedffe79aff2ffc6fb7b267384dfa213dc69ae5fff2aebcbe9ba7bfdbbb26583eeb8797e91c972f867c5873fab4f9deabcf9905f460e947cfba85baedb9cf387b2af9028635849b299a39dcc3b69f7af6532997c439fdf922effaeec71b75bafc3d2a3fdcf660e53a7a400444f59b3f1b68eb8289f6363fcbcabdbef73bb6ec9805f66b27e4fd4ff90cd1c0eaf9289eef2b915ba15d1f72cd36f5807df73b816c74ed7a9db3f186f55b34e845b1b6fc7d8f7658f3b0bdb31d395ceb3a9b6bc8826c73839f28bfdeb819292d1aec72ddacaa3cbbe61e2a5ab55b16ce628d5ed2b38b5f9e5a4ece575b6daa9fa38568a7656c7c417df5d1c6f75bb1ed1bcafd5797d709bd547bb95976b88979a56b2d4122d377db160f1ef6d7a0c87b57e0fc5b5a2c52f9bf3bf0deb5649956b504d59be4e1f2647c95996ebb6cb9ecb5ed7693e5151c8ea99a44eeb9fec217ea65ed72a47a7173e51afe579442b7974cc5a75e9685e1f7e3e5128ddc699137ca2619ce5a74fb07c51ea65132c55dd4d7af396fa77a51e75f96524ad4dd1bd5e45a55cf594d4d0e9859a33a2e578d42fd9a5c7b64f976df4df90cd1c533831769794bc6a9f1c8c6b61b39e63f2bee4ca4fa939392daff2be3cbb8fca547be108620d8ace86ad7ad470fdd1b68f3f0333dad6bc6efb5115976ad1b3ee3a2d07b9b8048f9d531795c8f23a87cb2dd2df25d74db2dd72c9c868fd4ace90cdba2e395ed1116d2dd4cf636be586b1566b890cf2995d18de333bce7edb1bbf4afe5e7d9d728d98786d53e4429019ff3ea0e7ff7675abb647d105593ebf4605f3bad6c6aa7b5a7dff2a5f295f38c1513956467b1ed4fb7fa81cf7f8b06b317d71e605feb715fec8472b974a3a1057cfd5f9496eca7f006d281d592c6e0600 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/00e7195c282b04b40a5f0479e81cd681.asset.meta b/Assets/SerializedUdonPrograms/00e7195c282b04b40a5f0479e81cd681.asset.meta new file mode 100644 index 0000000..1691932 --- /dev/null +++ b/Assets/SerializedUdonPrograms/00e7195c282b04b40a5f0479e81cd681.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 068fe5994b0972f4eac0a569be16f2f8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/00f1385c43eb91f44bcd2854658046a0.asset b/Assets/SerializedUdonPrograms/00f1385c43eb91f44bcd2854658046a0.asset new file mode 100644 index 0000000..2fcf5f4 --- /dev/null +++ b/Assets/SerializedUdonPrograms/00f1385c43eb91f44bcd2854658046a0.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 00f1385c43eb91f44bcd2854658046a0 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cc5f5f8e76ccbbdf78a65e372ae92255bc660702fc2154b3606dbd8b224dbc2922554dc3060d37b2fa6f7dec1f4de218104084948422a24a1258104084948f8cfcccee8deedcdbbdbbdd53bcdfaff933fd66adb9bf7bef3a6976d91c3f84f642cffb5822d63b3d878b69c95b16ab685ff358b1fabf83fe74c5f5fca6af97123ff5dc2ef8d65d929de143f23237df9ef427e56c7eaf99b0dac941f2be4fd2256ceff2ee4ef96f333717503ff5fce9f8ab4e22f2d67b3d912b698f589f44a2162857ca94e5d8b08bb226df9ef996c07bf5b2e951281e4c85b7df8af227ea74edeabe24aebe756b135d2ac2a7eaf94bf53cb2ab9ccf55262dbe7c733f907730e7dd4b1af3af6e6ffdba9bf5baabfdbaabfe1f359ead8cfe3f3fdc17bedc0df82d00d49de1fe01c23e2bc353f9e01cec5bb9fabe7063af25a6c4a22eb00751cac8ed94ae6991ef46fa38e4352d89b4cc65020cb0bb3b6ea384c1d0f54fa9e9566f8231c46916b803cc1b215d0671808bb1db82fae0d0f60bb8ec72c573c2a1f68b157c5df47eaf991ea384a1da34a367fa6c72deada68751c9442af31ce7bec2016f3591e66cb1a753e561dc7a9e378a55b1ba5ebd9e03ca82e3a4e7394ccd62a8c730cd7f5f3e2feb9ea3c571d27b8e22b4f3d779e3acff7a88f17ffd33a695dce07e79c63ab754964e9786fe78af776eadd0b1d8ead1e77d903fccf2877a29277411a76b477d9d1ded1252b1aff5c4a1db4fc494a4e0725f742702ee45eead3b656eabd7deabc80a5cedbfa78b837c591d356b33ed809a7754fe77aeba92cde970f4aa1a78edb8eaeb8eda8e4562ab9dafe439cf388e63c04c811ef5fe492dbc925b79392abf3887c8f7a6abba6a9e34c759cc11ad3f1886c75ed30759caec2eccce2f380ceeafea1b1777b5fe8935bb2389ae58aeb412adc2e2964eaf767ab633b8fcfeb67e604d079ae3ab6f718667b759c17204c95b6da7ee1f2858353c89ceff06d5b0f74e072daed52e785ea78b83a2e50fcbbbbfca0bb073f48a5cb42a50b0371c07569df559d2f52c7c5f1baf0da64bc4e17379d4e91ae4ae625e05c1cbba9eb978273a1eb52279cf62f2b994bd5f10897cecbe874e6b560f95ea78ec037bcbc97ccbf8a1dfb3ae43ab23b14abebcb5dbacd8de9dd76367857ebe1253d1ca958f47431eea974d06c57ba9ebb0c9c8b638f5878f26ffe6e47ed5b03c075f1eee5e05cdc5fe151d7a359a2cf0a39a0dd20ff1661abfcbfa38ecf552c31ed99de15c75ee05a2f25ef03f5de6a96588ee9e7846d57807371ff288fb6ad31e8c7c3ed343dc9bbc7b0f8fc6776cc1fdabcadaead55faf461f1690bb60bd43b914a756d9d73de45eb52a2dee90bb8f475f4ebaccbd3f5eab88199cbd932c041a547de5a6c0c7be0fbea5a6992b0cad4331b5d7617c7e474e8ab74d7f9982ecb4623cf8a6b15ea58a58eba6e5e1d7b76e43a754d33daa274ebc7e2f266b6195c17c7feeafe5e702e9e3b3626bbd7ebeada712e5d4df159ebb2dd940724f3b33ae7d9beabd579bdc3b6cbd32eb9252cb9df36387246e93c77ab23a76b2b9f72b639724667abf31dce7957adcf7675dca98ec72b8ebadea6f272a6cad0c840e03703c035f1ec952ebea9744bc6f14447cfc6fafd49eab85b1d6700d93a5fd1ed2158e73b01dc13e7d381bdd0be64baec51c74e29ece9039e13c79303d89fec9e6e3f9ea66c3b80c5b7790e707ca5fbc024b24e67463feda1dbcb6738f7bb69ffd0fd2827ab3006c75837fa92eabb886403bb955f4586806ba7aa6b4363d722badfe66cf09eb0e92ad7fd73800cd3fd73810ea6fbe7a9eb573bbaf7d0769defb265278bd775088bcb67d80589b64686b8c2d67d315ee252b72b753fd0f9e05cc4cbc749645d648ecb9edfaaf38b5d7179892b2e8719e252d75360bf902a7322230cf13b1270d06de1cb90b8d4f72f07724df7af003a98eeef8d8fcb5eba6e76251297507f1897578170da816760d8d77a884b1ddf57aba3a9deabe58c5672aff320573f736c12b9035c72aff720f70675bc3e89dc1b117dd3094ffbbaeeabd1f17e3e38e77edbfbbd24b26e62465fefa3fb0d6e66f1beaefbf0b4af8f6289be7eabba373a16ff9285b8368625fafa58e027a3d4bddbc033d057f5fddb815cd3fd3b800ea6fb77b2385fef3b5d5dbf8b997d1dea0f7dfdee445be533306c5d8e278bcb7b5c9c35df712cbe9d33ce899fbeeefa4f3de06a0ae75e47fe685d27bd4fc91bafe4df00cec531c7156e8e136e3fd5ffd55fb5a398eabfea37d6b9de4f8f31dccf8cf5ad7ec5aee71e60f1f5a9875cfc1f76f9ca8498bf35daf220b8076dd3fdbcba4ea2fa0823f920aef2c035539d2b15d747d4f15117bf5c25ef46702e9e7b1ce8af98b3c7d4714fec5eb7f9aef8ed08f478c2ec2b52571067beeb48dae62753d8ec274fd27dcfe78373ee070392f5cf3eab9e3937c933cfabe30beaf89c923f89c5b75f547f337b519d17b8ee17a8fbd7c7d8f7ce067a68d9e29d9b3cd8affb1f5e51c797543893597c9fd86416cb57dc6544baf5d874efa974143928de7fe4398f8741ba6dac7db134857fbcaa8eafa963b99237c5c5604a1206a33d8695c4aec8212cbe0fe110755fb55f2307abfb37abf3435dcfab3c9fbda1cea7ba9e9fe67a5ef799ff409d1f16ff3cfb219023cedf8cd91651fd32ec2d704df7afff28c667f03deadef4f8b0d98f597cfb4eb7e166a8e76e01ef4106fabe2eb367ba6c9aa5ce6f03e7e238db25578f13bce1baafe5ce71e9abfb077ea28eefc66c1cd716bc0378b277e26526f5e937958cb9ea9ddbc139f7e9c1c9eafffa5ddde7365fc9b8039c7319d9d98ebed9137159914217bf79e0ba381eaeeedf09ce85ec64e3ec6fa96717b86c5ba0de7dd9c3bb0bd57191cbb6454ac6778e6d43ba2691a5eb953f75c5a1f659216f89215e9780f814e78b950e778173aec310a513fb1933fbf642d7fb77c7bf3f548f09fe5c1ddf77e9b694c5f785fd521d7f85fb24d3fdaa5af72362cf34eaf70b977eba7f5febbd4c857b0fd0435f17c722165f4615a9f77fadce8b5df7753bcd34d69e2c8dfc46bdbf5cc9bb179c8be30a75fd3e702e8e47b2b8b4cfbab9aedfef92bf525d7f405defeebaae9fd7fdeb4b5cd775dff46fd5f507e3e5b3df297947a9fb0f8173715ca5ae3f0ccec5f1e898bfcabf852cd5168eac56efec03e7dca78697b99ed77d466b5c3eb826fe79f6fbf8f722c7a8e71f71e226a2fbc675bdfa0f80018fcfe1d7b8ee7f8830fa083032bdf747e4bd3fa578efcfc87b1fa778ef13e4bd4f53bcf719f2dee7c87bda17feaa8e7f6171edbe465f5cebf2c52fc075715cc7e2f384bfb9aeab7abe315dcd50cf96b0f87a5489e30b23d4f8df085d6fff521da7b3e4759c7fb8e4af67f1e9558f6598faffbf52c77fc6cb88cbabf5d840294bccef543ec7be01f7b44fff1dbc27cebf06f6a4ea0b365dab56f2ca5cfcca1c7e23d5fc97917a2c4bf3db92829f7a2e520e9ed3616d00d754ff5e6463ec9abcafaf89e326a5db63e09ceb36aaa74b6e45bc9f45741df85875fd71700ef39dcdeafe592e795540a7cd4e98d1e7d533ff728551c962e503e715d5e5f497e07e3ba0a7bea665c0fe8d6a7014d755db73e49bf161a68c0353dd680b8baf6b6a3fd4615d0ace056315ffa374fceb36c2d6e4616bb9ecdfeabc86c5d7e3f5f8d97f803c71ff499ff61ce7b2e7b8f870a5fc54f5d7efd4f13eff3c99e6f25f157e9d0aef29702e8eb540f6ffd435d0cf115163769106f5beee8bd13e0a78cbbff5b3e2b88dc5b7f7b7397137f64d976cfdde76f5fc33e05c84f5bd3adfa1eeebb6b84ea33b810e3bc035713c5ebdf31c38e73a8c79dbf19fb1b72061ed62f1f5875dae304f50f79f07e7c2b695f1cf474e54cfbd00ce356328e745971c975e9193808d7abceeb1e47ea1b936f6bf685f3ec7b17d8ccea7bef526cf78ed5d259ba9e36e17b7ddeab977d290fd8d92b187c5b76df6388cc6e93abdcefbbf4e1186961751c716ea78b292ff123817c753589ccfcb73e8fb7a9cec2c70cef51a7faa4bce692e39a7b9e2e57475ff65d77ba703bbc4fd579c781bbf37de9e9476c75dcb8ac879c9f359392b61352c4742103de15e9701e837532f0010a25b8b5fe267a40cb69eede0af969b66e12f9773fceb593ecb33cec2ef27e747ead067c9df25fc890a29f4d54842104f24042194abe4ffcac112823a7e7d9e5c8120161154f03be3d9427e146fad6313d82afe2f5eca0a1e6c256be067c5fc778d94b78eab9df8642a93c47203f73bcbb84c67354415bfa281d6f0f34aa96191fcbd556a5a2eb52fe4d7eae5da8c2d6c239bc98fdb656889b6d7f2bf4d61162b64661dcd8b22b0ebced20b1d4db3b93542fb1ce98bff1723cd1123027deb57234e326c952367b99c9d1013ffc7d0c96444e74da1923141228bc45dcb6339e25476d004b531d142b37f3bbc0bd8c4a4b698c988e81e202d88c5709be86b6d4f6c3b7b6056bc69f92c470ed90c4c615a32b0425e54ce46f463425656ab5ca1a81b7fc4845f2e2729ca207ee7b90af99cff08682d0bbff80890c3f1c53c575b0a0acfe552f94aa99adb9862a972bd522276be4c1e1bf85bf52c21367345d06d64842416b7a98cc2a2a485294a640f4171b3a4086cd15ef24869db68452c5272641daa6f12d7c5c29295ab16aa86a513d7d38f2cd9527cd1a71f6599e3a5bd8c977442c362a6a52966da673ab1a42e1d92c54b8746bb62f1227ecc0c3b22be9d4a078c602b13c10e99f66d71af5a4a29e1cffa6728a6488e71673866809d11274cad028630cb80305720ec62d08a65b5736925144224b736454ec7e6298ad3736e317ed6c785200b75ee6e494b52bfaeddc6444f4ea65d474a4fb7108b78536001bf57c29f2f97d54d717d299758c2c316f266c81062adcaf837929315a348e3dc648d547b48aac3407b37a86618f1b606e2b9c25f7b1adc40e671eec4d00d4f0cedb064d62b68326b8f49ee1d5472074c729fa0923b6292fb0695dcc9946ce45ac6d5194936b18e15fdd74cfeee266ecc56d95a6ee0ef9b3a629227977e9e934b7f995cb299a97bc89f465832e96c8a3b717180494977d4f5c7a3ae0b26786040c15d316f1b14d4dbba99bc4dda5146ea6dc56c91daddc369596ce74f2e926f6d52d797b379b2562562763997e074ba614f27f7be033c7bdf60e97d4e5ba96935c4bcb1bb296e450c647b719ac178d4f6c0040f0928b82726786840c1bd4cce287d7f1da933c6226f8ebc5b213b029d4abda8fd54716b36b2725744273e9bdc090ff4ec84c398ae3134956698f3f53645a528db86b3e035863e26e1a2b01fc1129b5cdff39f04e11d71e17d31cd471a34ef5fd5c297e6fdb0fc361a34bfed8f491e1554f20053e291d9fb1ed2c4e37510679edcc3a99c2de14d866399d3fbaec3ad96ae2a34d2bdf8a2976983d4425c2f552e9e3cace4c96f74231fd0ff2233df39ccfb5014bd1562f9460b990d8c95d9c0f824d980499b64598166b18889eda91a646c6721bd45e364e876b1c1b2b181584e33de90d3bc6fcac692e43483b0249b1334c91e60922c926caec1577385af8ae181f6b2a29810ce383c9cc1a6ac41560f76366bd6e0f42b08791be4b8aa236f31133bac6d93aeba993bf056e538c5fc995a59dad507ce0cc4ba9b41ee0e2be6fc989343be4c0e8779480e9456610920dbe449a203464c0e4f180a1065e7325e2d9dc5d6ca64789cbc2c2839b15b211fad603bf9510f9126f85b1bdcdf8698b411ed5ab11c266505b1072e782826b820a0e003b1343e39681a1f66922c721bb1bc25680d6b38a6f694a06a8fc072d4830d39ea77117f39ea484cf82106e14fb7f0273c8a2585a95e7c2489578fc2041f6a4a63226a66c9beec6cfebf9abf912d6beb22f567cbc230961b64f3b45ec1ff1205f658f07c357fc29992e047cfd1263d85531c16d429c660f136cd106f5ff98cb7b198f0e906e1f35bfa133e0e8bbb19a6b813a5ac283744b564932adbe273c36c3939245bce076a907db26532e6ea64bc66b3e379117e023fd6f3a7b365395029ef65cb0d476b655eeb274ec763facf34e9df1ee8bf1468e827c41c2cdf9a65c8b7223ef3ad5c9370f1fc6c86547c443dd47fc56702866dae09db2019ce7659736d90cf174907286fac2b973551019967d02b4776ab6c61cd592113ad05317baa4efe1daba288b063e3f6412a5e62019abbe2a57fcc152fb1dc2d2a174a67427bac82958f65aa85864c35e227539d88a585c3b1b4b020adb430c9e473b2c7ada6597d0e4f5170a64950bf138be15aba5bffb2f76ba207cf6a2a1dc7c88d69ebe486d20eb93a91998aa1b5f560e76807be4c12e634b148a6894c6a8ea58b02acd45e6c28b5f765f92bb5279b5c56f62ad636abcbce961232e1b64b4c6e2bbb3e0b3c447e53ea39584eb2ad93996a99ca549dac7bb0dc3db756169be5fcbac878e1fd31723758515f9a2b795749f2c23ea7ef1a73f2a5d2c9336d27e6e8076105c0118602c057ad7a0a9684961992d0773e93d0c198da4541d53e0453bbd8a0f6aed6fed49e8a095f6e10beb08d3fe1879a84b761cece9a415a88876182c5d2e484eaa6e819d0ed8452574b71bd6c2be8f65f99bcb283ffaee4d74aa5886c39615acf17f1a3e5348ced4a03dbae3ed94ec7101c1590ed0c9360e19e477b119c646c7da649b0a87fad6248fd4bccc3f05fff9a85615f63c07e834fecb34dc245323f2668329f83495e1b54f25c4cf2baa092e761924b824a9e8f45e27a43248a29537e22b110135e6a105eec53f8e126e122bd9599f2a6e14c748dc42aa94ef329d6af51c2364829b5fcefadaacc2d8beb1f117d1e15aad1ec279d2fc0f42c37e9e9accf12b3e2449da244f6a1891097b0cdbe425d88a1df60407fae4ff48b30e11b0dc23ff6297c31c66b938957df14f15a262753c5ae4ee057fd705c82695361d2469cc6e2cd4f384b31a4c71a905ed3de1fd2233023369b8c10258283ef608e6cb1ecf02b516bcbb6ca62dc3fc665980695260d44ceb6b0b162b034cd6a411186b4ca80f43d9f488bb11c794bd01c7939a676b529d3ece04fed1598da3541d53ed22459d43a8e6348ad433479fdd73a5662e1d461e1d4a715ce5118a986a0a48ec62278ab2182a777f417c1ab30e1db0cc277f914be1a13bedd20fc659fc2d760c27718840fece44ff83198f09d06e1653e85afc5841f6f10bed7a7f07598f05d06e177f8145e8239f909419d7c3da6f68906b57b76f6a77629a6f64941d52e3348ce9193e732b9fecb3dfbc9df1299ddccebb44c318fceb4f62b55f8589752b9295e44097db249251f45f906cc9b4e3178d3473e13c1464cf8a906e1ab7dbaea264cf86906e167fa145e81093fdd20bc6b177fc28fc522f38c8091b919132cf6684ca80b8e95de592dd358b6fc04a55836bd457df1526c5d512e07ae4ba4efc73a9cf4c0b558879fadbcb756f974a59cd59eed4beb4a4cebb34c5a8b9157d1891bab373b4d49a719629a5798cd46aa5af7485f7a55613e70b6c107f6f974b02d98d1e704f4816a533e2ba7125790e6b3d83cd262d9792ff6cdd8203da5caf7acd3e479f2b99ef3e4f3649e2c2aa674ba62f9778d29ba45ddfa7c86d4adc56726da0b957dd5ad8f3385237cf64283cf4ef4996fd562c22f32085fe953781d26fc6283f0537d0aaf370917d51ab1015aa06a4d03a6f6a506b5dff4a9f6564cedcb82aabd0d53fb7283da3dbbfa537b3b96b75d61cad045dc78e914c99689b2411650a28859ca9c15e0ce5ca9127eb54ccea2da24cf97caa4297a16d7cb02c0d9ce62adecfcd828c7126bf9553deb6a0773960666cbea98b3b94fb6cc0acad45cbccdf24a9d7caa1c84632e702a54c1098b28bfbd9b3bb028da6b88a2613ea36827164557062c7e8ec7045f658a7b319ba1989fd4c4c58b9ff0766119ebd558c62af661f5df69710266d7b526bb4434ad6aec2975fc778dcf6ad18958fc5f67ca597cc6ff4998f0eb0dc25b75f3277c37162737607172635a71b2c7148ec8f46ef2e2c449c6f94ec604df1c50f0299817dd1230d99d8a09be35a0e0d34c8245dc8b6de2dd733b85003f733b4fc7bcf07683178eedeecf0bcfc084df6110bed0a7f03331e1771a84d7f8147e16967eeec2d2cfdd69a59fb331a7b9c794a78939a76bf93fd12b5729736b5dc656f0125fdca9914d45511efaf1b073302dee3569d1a3518b5cfe5b94bc626cca991d94be0ee7623adc67d2a1bbd2219fff2f958d21f18e58c69dbe06e7611adc6fd2a02d880bb18648d48cfc8476be2934e1be0f18dc776a0f7fee7b01e6be0f62eefb505aee7b2196353d6cc89a5afacc9a2ec208ed3310fad627a18b31e18f1884f7ede94ff82598f0474d71eb53f8a558dc3e86c5ede369c5ed655872782259d694d7c459d3e598164f26cf9a263461d67405a6c353c9b2a6894d9835edc534783a55d674a40ccfdf7a872b31f77dc6e0be6d7bf973dfab30f77d1673dfe7d272dfab3164cfb360d5b16b303a2f18e85cea93ceb5189d17313a2fa545e73acc88970d467ceed388eb31f4af04447f03a6f5ab06ad67f7f6a7f58d18fad730f4afa785fe26cc88370c467ce4d3889b31e13f30086fd5c79ff05b30e13f34088ffa147e2b86ff4d0cff5b69e1bf0d734ef1a127b458cb6fe262ed764c8b1f9bb488156b794d58acdd81e9f0b649075dac4d6ac262ed4e4c83774c1ab463b1626d8e1cf0aaf6d9537597293ce1c0ef1a1cf82b9f0e7c37e6c03fc11cf8bdb41cf81ecc889f1a8ca8ecebcf887b31e13f33087fd3a7f0fbb0e816df5c0b522edc8f69fdbe41eba9fdfc69fd0026fc1706e1653e853f8821f9a5290588019ae4fdf4893db9c1faec9d7e53bb7be91fc222e8578608aaf719410f63c23f3008dfeb53f83e2ccbf8359665fc26ad2ce311cc88df9a08f5f767c4a398f0df1984aff429fc319370d10dfc7b2f5946926ee0c70d8273e4a65ccd33469fb8f352d38ed1ffc1c4cb38462f3e16987c8c3eb8aed818fd13982f7d644a6d3e7de94993703194fb47167028f7294cf29f824a7e1a2b1ffeecc5ff93649acf98fc5f6eccb5a159fc3fc89e68c93dff63cf9eff89f4fcd1493c3fd8ce6de6987816739e4f833acf7398f37c16d0799ec792e9e78664fac5007fc9f4054c6bf195ce842a91d81261866c0e95cb6529a6054dd9b2ba94ed73eed98b981e7f35e921f654f127ff254cfedf02c6cecb58ec7c61889d4d03fdc5ce2b98d65f62b123d2c8265545d4f151deb8df47ba33035fc58cfcbbc1c8ca41fe8c7c0d33f21f2623450ad4f30c9cfa6cfc344d3f66bd8e85fc95296451237466d5e434ee369fd3b829ce129e20ca98dfd91c6f601a7c6dd2a08f518385f2af7ab9838053eb4f6fddd80f305dbe31e932c0a32e89db91fbd1e98798e3fdd3e078e71ee0cff1dec40cfe36609ef01626f85f0105ff0813fcef80827f8c71fe8f81f33d3e39bf8d09ffce20bc66b03fe1ef6048fe1b10c9bb26c122f7f99f17c1491a433f310916edd0ef1b6fb8daa1620f31ffedd0f730eca2f874639f3fc41ff69f6246b4882046b44ccb889f6146b4321871a64f237e8e09cf3208df37d49ff0f731c76c1d3164a762cde33206b7892993756c9d9147d92859e06d51bfe3572164cb33a7f8192bb7bfa895a5be93e5d6b14ab941461d83cbc09d4e25b1a0b9c65533d0e188ce24a788ddd0989d67cbccbccce7d4be5f602cda985888ddb8e05e734e2d3356c0c696646f931a5632386976932c82b2534ac8e34ffb5db9f14bcc61da1a1ca6954f87f91596a4da6149aa7d5a49ea03cc880e0623a23e8df8b549b820dad114d3629580b98b7495ea5c152b5f44ebc2d9a228599c4693de1d25a7a33addaa31bf8e4f01d5d23374176afcbd7ae957f58654b45e6a580d3a601dd9d5aa75eac7bf7e8395399d22c1ca9cdf1a04e7c8cdbbcb597375c0554a684ddbfdd03962d8134c6e252e76a86d7a6db2b9d46971bf764f43b6ecea1211fd1d346a60bd1dbfc3526357536a6ccdf49613f5b2d4f0e3b9bf373998dc5b7d39a983e15f1a4cef4b94dd0c796d8e88db48bf043bbc84d69dcb6b2bc4096865c3183b95ff7f9affff8aff1f3b9c611bbcf590de925e989837fc01f3869e266fc85235129123eff0e50b1f62e1f43285d34686233c628b5ad5e827ac8f4c61898cadb72127c815398188ccc65fbb7592750729522b12e41f31f3fa98cc6b258bb812d969e6c7b03f6186f54d6598b449fde5cbb03f6386f5c30c9babfafdfc18f6316658ff2486c56c4ac7b04f30c306980c139d8be37c99f42966d2c0e4267dfed9e669d97b76ef9eeadfa4cf30930661694c94279b6567d9369f33143fc7cc3bc0538ca593c6fe620a52d485076375e1ecb4eac27fc5300ec10ac8b84f3cfb80f837cca2a1984507a665d1179845c34c1689ba65b19c7f208ade39b268a9e5d9fd5ad5c4f263e19758c8c34d210be7f023fdef98f41198c33b16e4a4b1c5d43f4c618916d24853bfc0087f2da4af30e15183f0ae23fd09ff1aa334ca4b032209926f30c1a3030afe2786638c01c7573e597f6b122e2a5563bd68bd0717fc2f0cc738ac44c9f145e5df98fcf126f9bd996955e922d910d5fbd8c5eef89beff31f4c931cac52207210bf5ef01d164aae29146727ddc4f5cd7e42fcaf21c49c21e2a2d8e22e530d96627e263621f1df509910111d43f1606461616c4ee4c9e644af04cb92858f3523fe678a2b719a1f1135aa78950e5fb4a7cd3503df6a9110355978d47c8f39c3449333880db4c54455672a5d25ffab5e1955e1d3d5590409779229dc2e68b85b545fa99fb02386b0738666da1d67c95eaeda34dcb12022caf97844e311679c8c3863b2d031676c61e226bf58b53683dc9ce79c8cb6486e3e2d7a6e96c8be43a727b22e0da60745fc7e0f648a247b6082e5e9ea87516f694a296216cdc19180b3685a61920f092a390b933c35a8e4d626c9a256726824f867ccda6099d261012b5e6d311ed382f26887499e1e54727b4cf28ca0923b6092670695dc11933c2ba8e44e98e4d9412577c69c6e4e40a7eb82a93c37a8ca5d4d9245dd609e1795937cfeb01ba6f2fca02a77c7281706a4dc0353f9f0a02af7c4242f082ab91726796150c9bd31c98b824aee83f9dce2803ed7175379495095fb613eb734a0cff5c7041f1150f0004cf0b28082079a048b49d9455e047f820b1e84d5078a9ba03e7000e61acb83bac6609364f1fc0a2f3c920c3e6763a08f0c087a08e61a2b03bac6504cf05101051f88c5ded141636f18167bab02c6de702cf656078cbd1118e43501218fc4041f135070148bbdb541636f14167beb02c6de682cf64a02c6de180cf2fa8090c762824b030a1e87c55e59d0d81b6fea8418c64f2362e7e3cccfae31adfe6cda7936e55ee2622c4e2c078b8b0d41e322d7245924908d5e543e0f173c01f3cb4d01fd320f135c1150703e96f68f0d98f62762b1b73968ec4dc258540664518009ae0a28783226784b40c1076190ab83429e82a95c1350e58331c1c705147c08d6d0aa0dd8d09a8a695c1750e343318deb036a7c18a67143408da7611a6f0da8f1744cf0b68082676028b607443113d37847408d67612dc39d4dd0329c8de1383e208e39188e5d0171ccc5b2b813826671f330d0273601e8f998da270555bb10537b7713a87d38a6f69ea06a2fc0249f1c54f2420cc8294d006411a6f6a941d55e8c493e2da8e42558223f3d60225f8a093e23a0e02330c1670614bc0c137c5640c14598e0b3030a2ec6049f1350f072acd1736ec046cf0a2cfd9dd704e9ef480cc7f90171acc4045f1050f05126c1623ed9855e04efc1051f8d71bea80938afc2845fdc04c2576359dd2541b3ba3598e44b834a3ec624594c2abb2c9238e7d00824d927fc30e7bb3ca0f3adc3045f11507009067a6f50d0ebb17ce9ca80f95229c6e2aa802cca3016570765518ea97c4d40953760dd3cd706ece6d98809be2ea0e04d18e4eb8342aec020df1010f2b1581e7a6313e4a19b311e3705e55189f1b839208f2a2c65df1230656fc11a9bb7066c6c5663906f0b0ab906837c7b40c8c7612cee08c8a2d6203867383f8d882f2adab01f9f5edbd8744316779a98196751de1511b32873989f3df9d2d1179b5d59678a76113b777b8976a13d22b8de24589cde13499cb9ad7ffcccdc6ec072c97b9b2097dc8a09bfaf09846fc37287fb83e60edb4d92c5f30f7889cd2443bb3b4c8287f0d307bd08cec3dd642726f8a180828fc7203f1c14f22eac61b62f60c3ec044ce54782aa7c2296181f6da2c478922900b16dd7635e987c880bde8dc17e3c20ec3d18ec2782c23ed954e08de0a7914c6e4f00a7e1a7b73dc1939e0bb1a722e60d04bce880154ca76039f0d34d90039f8a45fe334123ff344ced679b40edd331e1cf3581f033b09ae5f311c38aa4d9f27419779622369b2d68dc966f31131b236e9311bc5945fd78b976a990df5f22d7830b971657ccf517d38412f134742de1f8d5ccd9cbc7dffaf233312b5f3059797aa395cb794d4a243a278156c9bf9ddd31843562d720278116363e39a77127ccf8bdb66a158f22e67c0f7c166b907609b9f1f46212c4f3fef4c0248905d8b5720963bd8b294cac6ede2bb81cbf2bdccec248bf88f9130c31b6f38843ab9a678a6bb96fd4ca3877ac2d56bb8fbab58dbd8b5f6f2a7f3a1bb3f225939587b9ac84cc1d3be732e7dbd82506af8f8f217827595a816ff9b1ec1cccb2974d964df3147f33e48e5b154caf040b1e73b13b7e6c3b17b3ed15936d052edb16c9d8d9a42c1367db9bcd92f3304b5e3559726e86f3b3d83b626fb54a2e7507138bc2635bb6d6f9f072c80eb74294250db29a01733d51c16ababced7c8cfa6b26ea333ca58d85ccf9f88f0db9da05987daf9bec5b48e855e2ea7132186195531dae904157b09d321d9a73927462f542ccea374c561f9ad46a5c53b8a98b63a32e8dc5d5524528315da41f9b176176fdc064d751be6b7645f24e7cddce24c1b9b6b4311fa8e5e58168ea04a909a613cf17633c7e68e2b12023653675697e0966f39b583dc59f0f681f165b64944a41309efd7a841fcb2ec52c7bcb64d9c18865cb65faac547513a7a9ad5b2d2b542a2e4b880d9a36ca6598453f3259349730f7d5b1eaec33e16cdc9448217d4b2fc72cfdb1c9d2a90ceb2537e514f116c08f690926f3652cd7cad650292f717734a155576056bdeda54d101f2eac212c97b120b6cc12e9706392d22f5e46d359b617b3ec1d9365b352e69cde5a05781e9aaccd9a6e4e792566e3bb261be7a13e296abcebf943da5667f3a0d8e70d93e72566994d5d125e85d9fa1393ade5c4ad877af9913a41c9691dac90de5ed198f3344d7b381d4e57639cde33715ade6cadace4848273b806e3f0531387993ed3860d29e25accc29f992c2cf469a1fe66b739469ac3deeb307b7f6eb27719a167d7a551d7680a02d76304de6faa3a8893b7cd0035107aab6ec0acfa05d643e1d7aab9f289c41872e739dee5fab1ef46ccbe5f9aec3b2440cdb15e964662d7aa0daa9d875b559cf0ac1f9b6ec26cfa95bf3873e73df02b6aa93c8fb2f4b819b3ef03cc3e3f6d46c7d679aa1e11bb2b463c92d70e9baae6780b66dfaf4df60d63c97b058b39610a2d6fc5b4fc4df2be3d3fb15094562c50fade6d98d5bf35598d7f23b5b871a81ee611b16fd688f2b0c158174baf7fff764cefdf99f49e92b2c55528c70645ef63a5fc62c91c562577e64b6cff268b81f45b907760f6fc1eab41264f23a235bc54d6aaea0ce5aa97b104511bd9d08416de8959f8072f6d64f3d840a1f43dd10f5ea2faa812e32b93e3037761367e88f55079e907f062657a3946fa96de8d59fa91c9d2f99e62d33dd2e3a4436d7773c6eb3d98b57f3459bb3265bcd2f68c53f799df8bd1f813d6b36c2e331267f036570df33ecca23f9b2cca4f520abab580b5af2239b1ab52112f94ad84f2a463e47e6cb81fb3e163ac442c668b54cf52b1d4a39e9f8b14b8495d5dcef516dfba896f87d6ab67a9fb541ec0ecf9c4640ffe0d6bbc05a3f7886eaa74f120a6f1a758ffb65963c17c9ef4a41af925b352570c9432fd8d2a3c3dcc8a7b26685c3c8459f699c9b2a3195d6f886ec7a4df1f8ae78f7e883c8c11f9dc4424cf5522cc92b63a76d583760d5e7625cbc7d3cb2ff66116fcc5cb68af9f7968f694e38f6036ffd54bacc1ef7ecd90e315a21507fd32996d6b51597e2c7814b3e06fd80c2dafb9a2ce5dbce48a4d91a73c8659f2053676e0d592e4b5662ffdc7fefb98d3f7c9c7310e5f9a388c4859b78ccd38289757c58cbca6c9319ec034fdbb49d3c9be6b495af31a999fc7466e286a7c4f62b6fcc3cb2c5caca536c7b256da5398955f6179bcbf9aba93eb25de4d9ca5a53f7292bcc6122f2596c7fab1f969cce6af4d360f77c5ac3b5fa74b4dcf607a7ee3a52c827951d0b228dd3ad0b39805ff3459b0ba996b85d003bda63cfd8e1f2acf6154bef532cb4587e82757895986a5b8a6c94d9ec72cfb9797de2dbfe574f0fe8df42d7d01b3f4dfc16bf7056c621ab57bf1961f0b5ec42cf88ff799d8224c3f7e08edc3ae37550cbd84d9f71d365a93bcfc8e7d91c7ada3fe22129e6b605ff34996d3a457b6bd8c59fddf7446099c582de20faf674e5f5b296bee1528af6016fecf4bca33134eaf544cdd0bd486ff8b44c4f2c8d8473b97ca96905307ca19c96f45721bcbbdf18de5d9f8b8b22f765d845fc56343a489d82741c5f2d0e412bee7705ab760cecf48f5054027fb8f6c60eee5a74edf50a5ca6fb4b78e97849c99ea4e9fd3425621dfd20b695359612ac3c783521c5a97daa635c8c2d888fcb02894c5494705e9fdcd52c663b4f54015ab2d72c467eb2363d2f4a6d45a4444682dcd3ed427812c4c1d26dd1d018b555f4244ac0c16092c5715f815323af42290f2d4e1b9b7517787374e0ad0759e94e260f78b495c3fe964ce04dc5ae60c4bbd3e94b136592d72453cb4a084d543c21271b254068eaf990903b60f5ac5b0b5a4c426d6d9cf964d801a0ece990eaa0b680c605d28108a31558db01525c2aefc44b778e7cb192d424089acc78a59874bd8e650007ba06d0c581625b09e205fabdb0fc075ed1003d79a125c77033821700b7f49cc5b699057cb42016d1d8b416b43ed6df1c9732eff5da1a604eb89718ed785015cb4630c5c5b4a70e2e3dc628697d762210cf02e0585423b4a781d40525d12d71917064c0307c630b5a7c4d40e608aad660a03a2337bc71075a044d45a22aa0b551ed5aa530c4e474a387df9c992c63abf1e0373668a2d93997e03136b644436bf54f59b8501e03e90003b51026ccbe2db986258300c80deee1603d4993a875a22c75d62b334c251c3da057ca84ba67c482f4a0b03a06b7ac40075a50424bfe2a6aaa073d87669754363bd49ccf42993b5aa65d2c3caa4bf55f200c30051fc6888dd28210e622c0e9ee8e2118bedcb1bb7a52d0b79e5b427e8f4e94e89b293cad3b4bfed5025e672d97e0c03aabd206feb91a9d6a3680cc1a174dd200a53cdecdb3631703da95b8f101c5cb13a43b627c5f84f6c6d6e18e0ed021d3dbd28e17504256a6c01a6b3ec3b0ca0f681da596feabed74532f96d76ed27349b3f5e2b430a03b0752d62c0fa64b6372c7e725059c8f2b34ad069dd97beef55542566cba0c35cd1783d2b06ad1fb5b7cd9123460d32f0d8865eb10ddeeae4728d9a5080fb0880eb4f3df40bf7d50d630fbf98c3a1610da01f4f72867eaba59870b703a6022f1b48dd7bb68c439bc5bcef8d19068067ca4a6e9b2c9770f7e4caf4a7baf8a38e4fcae9c29c366d8dbc5aafcadfb8493a628d9e759a0f82936ca269f76f4453e67351cf639e51dfe355d134273f443dd53aa3013b2ca23e66b4447d658151cf7599a8af023c9a567e12f5d5c48efaaac0463dcdcd88fa9a9010f5ddb235e98c0f414713067ca2499b835163177ed4d8291b45c6dba249862ba3480f7834452f5234adb19968ca496fb1f9a3e6799fb962fee8012dfeff9eda992ba6760e1610c48738c48f539bc8a6ae4d88987366f28a1c3ef9ee50137899eed26160820ef1dfb4d1b5069336ede2ea159dbd18984edda22f984130c4269c79a1c47938c039d4269cf9a1c4590d701e98099c1b51a050fdb56c122ba0c3d9910ae7fd2c8673984d38278612e79500e7709b704e0e25ce7f029c236cc259104a9c3f043847da847342287116019c519b70e68712e70e8073944d38f342897303c0399a12672f85b354352bdd6bb1e13adf5c3a90595420ff07408ea19effa33b06bc761789e76be5b3e1abcacf0160c752821dcc608f8bf7fed330c33d10c01d473d0d2659b3138a13253d19ca3654283b8326e7784a945d14ca021750a767513c4406af3f15bcc7801fe66402de41998747e679ef0078b994f0faa428c3e3133169db9c0ce66700e6049b604e0e21ccbf02987936c19c1842987f0630f36d82392984303f013027da04332f84303f043027d9049370e8820ce61f01cc029b6012b6cac960fe0ec09c6c13cc30b670fe00601e6413cc834208f30b00738a4d30a78410e69700e6c19430472b9895fca14a79347f99d9df97ba0973d61e54c8b780ee8e432891b797c837c9a955ce54af8d125ef83adb3a022f9d4a8d6ca69c6b592f137d3173beba41866c3015b21e00d9a1cdd93f19bfc92a6182dd4385f22890600fa3449925ad11f315c52ca2f0f95c77e073d328418d4c284c4aa4b0b94c7ff86e26ff2f72bead72a8a18125db4896d42bc94aeec380574ecf4402f7560d0a23ca6ce0b73328511e60c82bbd7e668114ed795468738197cea4f6d219b2e4ae5673c3c5bec0fafbe46216b99e31efac43085f25a815f0d25999d8247002ff5fa5022f9175477135cce33da70284b3338170f27e87f06980700efd76bccea4027d747f3a3aac93079e0410e7da34679d74a22019ce282864e6d9849374661b19cec500e77c9b7092cebb24c37902c059d89c2df1f819c184c365dda8509e0e501e4ebd2b8c5305cadd8fa6bb7c0d8a9d05f6cc590b63bff948e0890b3381124e5a5dc8db33f3d4aad80dfca5ed99a80c91a1dc09bc7211fd780eec095fcb364b7433e5eadacd4ad45c7e2ce72212364909c174c04e00e6624a9803999f49feb1af02d18ed94488b0fe1e605d92891ea27ab925425de380985ed1ad8fa6fe4dd2329dcc63af056897666238d7ebb214c262896c51ca3400f3089b60124e3420833915c05c66134cc2698364300b00cc229b60124e6825833916c02cb60926e1546b3298870098cb6d8219c655915300cc1536c1249c36480673048079a44d3009abf064300702982b6d824938d59a0ce61800f3289b6012b680c8608e04308fa68499cd12bbe5fccdb7242cdfc9e65bce015d75ab9a73beb07b38833017251bcc180d7c75b54d3009cb773298f900e69a4c0c67884ee4ad4c7fc73b435311c8f0f507f88ea1fec4adc69738d550088b6d1611e6f1a13701d0b599fa0ce9fe353de61480705d261016ec77080f05084becae0e11f66a9255878e03d5a1f5999ac0151bb984836fe4639664831627031f2db567f27518d7931f06509665aa144fb5a3779827171e0c8096537f94d0ed9be6d9ecb36455bd5a267a421fed4235fcfb3940bac1a6adf32685b2f7e82e8073a34d3849f73d20c37911c0b9c9269c934389f30380b3c2269c05a1c4f93cc079ac4d3849bf1e40867321c0b9d9269ca4dbdd93e1ac03382b6dc249fa3106329c6b01ce2aeacabcb78f152d93aa89cf251156e61751019d04806ec9c4f68ef9ae2e910cf424912d3ead06f0aa29e10d605ed7f5c6ef864038c3e3132aa81b41ff518d8d50091b9864503700a8c7d9089570961c19d47c00b5d646a884253c19d4d1006a9d8d5009678090411d0ea0d6db089570749d0c6a3680da602354c2f91f64500702a85b29a1e6b3c4cee5f8a530a253597fdad03124fe4389f1df558d7d8fb258d668f508006124e4534582d8c04947c2367bd6718671d3f221c09fb7dbbbb08b70de1dd918e94f8097eeb0679f4ed22d2ec8fcf4040073a74d30c3b8b9fed900e6f136c10ce3e6fadb01cc5d36c10ce36488e301cc136c8219c6cdf537039827da04338c9beb57029827d904338c1b4e1e0160eeb609661837d75f0660eeb109661837d73f07c03cd9269861dc24e85c00f314bb6732877123fdaea0ed7e2a25de4e0aafb3df52a56cc53bb22b28370922fbe22a037e795aa6f73bf6deed11c6dd6c46019f3c3d53b39917c91ecdcdae1ecfd9fcb55a19629867330f02be7a0625d0ce4913791d1dbaf654e85a00746736e72285f06f1ed007a03c2b132b35c5c7bcf79f959ac500dfd9766cb0ef8c1ed5488f75c685483df3432ab4278102e71c9b36eb256d4c92796a2f80f35c9b70e68512e75c80f33c9b70e68712e72680f37c4a9c07b2c4b57273d87626a62e34303db576097fbd8c8966e43209d6f9ce4665666a9c649b4cf70685d505364d099f14cabdeaee01382fb40927e9b7acc9705e0c705e6413cec9a1c4f90f80f3629b70168412e7cb00e72536e1241d5b27c3b908e0bcd4269cf9a1c4d900705e6613cebc50e25c07705e9ea9bece2259ab6ce0926730f165b7156ac957995cf2551eeabece1200f40a7be6758671ba423fd052da9b89714cbdb59ab30871bd6c6aea87c2be235339f0cb2b33b108717ffae8ce7400ef2a7b671813164064836db702b45767c22f2767de2fc93a8e1f07f0aec904bc29998747e679ef0278d7d2172f9b0cdb54157126a5ac5429b441ae70175d6fe1abf6740030afb3773a02618731999f0e03d5a0ebedd9a72e8cb389c7012fbdc18e314cd347c209d192edd3b01e78e98df6ed5847382c4cb663dd6f81b7de64d3c01be94c4eb2226a22f0d09b6dc299174a9c2500e72d99689d7bebe8c80be594edb500e6ad36c10ce394ed7500e66d36c10ce3a2d52301ccdb6d8219c645ab2b01cc3b6c8219c645ab4500e69d36c10ce3a2d56200f32e9b6086b19979048079b74d30c3380ab40cc0bcc72698615cb4ba04c0bcd72698615cb4ba14c0bccfa60625e948105983f20080f37e9b7092568fc8702e00381fb00927e9bc23329cdb00ce0733f151a8496c7ffb28d4f52c86f0a14ccc7c4fddfb9eb8826806175a2b975693761adf45d5695c07fcf4614ac88314e44afe90005cae9616c41614c4670370ae1c2158b225050b01d87d99d8084083d55f2b8c1f3a4e569d0a63cdf46080f791e61ce5ccd8fe9e7ba8507e0bf2d94729510e91280b45234d0213cbacb7aad763deba567d8b6ba6dcd573b3ba3f971fcbb958c2bd17c8ea02ed00e0c7ec99e319c664df0624fbc72951f64c81525b4a3a47248faad4df09303e61f72e3584bda364bbd44c07789fb477fe27e1601dd9eca65f81bcf4a94c640058b91fcb0008f351b20ce0bf00e3d3d4fb282d552d7a3d47be507aa648f6e12bcbbb0270cf64c2ff721b7db04c36489d65d861df1de42980f159ea8e65016cb60cb8593f18b5940ae66400f3b9e6ac5f66ec0312646da1dda0e47e3e13287393b4d8c3dd7df716f0ca1732d1033a71bfeb013d16207c31139d73c21be7c8ea4e8354427cbbbd54e6974bd836d9e759cbef89ba660d0bf3aacb8300d897ec99231fc6394a0b00ca9733b1a668a2ab080a7335682b80f78a4dabd3275196de64abd36f06385fb509e7c450e23c13e07ccd269c934389f3e700e7eb36e12c0825ce4701ce376cc249ba0b2219cef900e70f6cc249ba6d1f19cee300ce1fda849374ee1c19ce3500e79b99d88c577c137bffd98c772ec0f7964d93bb483f264686731ce825fa914d384997b990e15c0d70fed8269cf9a1c4b907e07c9b12675b29a05c7e65b59639b3e5c23751ab35c81bdfa1c43592f9f9bcade8866b9022e1676c05b50cccdf984f053b0fc07eb739872a32566127f3dbd34032ff4926fad745e7f03c263a7c45b7f046d9c35e1bea6ee07ae08defd933312b8c2bd247006ffc2925ca5e4c4c282857e3e1ced4416c5897f00b2e64c9ba2df0c99fd93a7788b411493677e86f00edcf6d454b5a1891a1bd0aa07ddf9e6f08e687720f851f0098bfb0096618c727df07307f6913cc30eea1f03a80f92b9b6086710f853700cc0f6c8219c63d145e01307f6d13cc30eea1f01a80f91b9b608671c9ca0b00e66f6d8219c63d145e04307f6713cc30b6d97f0160fede269861dc45eed700e61fec5e5245d826225b523513f42f7d48ddbf94bae3b8404e43242c8ec83e047e2200f911fd6adf78904e47b1e8e8d8c20e97c31b3549272b84f1bbc12d4146f0477be61687b1b93901a0fc934d936826511651649ef930c0f9679b704e0c25ce1b00ce8f6dc259104a9cef019c9fd8849374a13419ce5500e7a736e124adde93e13c1de0fccc269ca47b6e93e1ac00383fa7c4294ef4faf3f00dab750198fe6293d74da2ec2426f3ba5b00cebfda84736228719e0f70fecd269c934389f39700e71736e12c0825ce2700ce2f6dc2392194380b01cebfdb849374bc920c672dc0f90f9b70926ea14f86f31880f3abe69cc919fefecb634007f1d7942807b2f88d4b05870626862edcdb95bad7651062259b6bdc0560fd8612eb0817d6f52c7192a1f7e98884a8c95a4ddb01ea7f52a2e6b2b97a845b920ea642d40de497df5222eac1628b07ea65e0f5dcf39c11ca0cadaa24f3b3df0088ffcac40a8c83d8feb6c3d17300e1bf3331255be78a75329f1345cd5c05afdc38d01bde0dc8e7815cf03ff62c6e09e34ccd0100e5779428dbf313bdeff546fe50b5244158c00ca342d60b24ecffdabbd682702a0c59b1b30fa0fd5f2676dc9ae04ade612eb3670078dfdb3d4d8b70e630d934ad43414e2966c290776bc0fd334d493cdcd5a31f016f8d50e21ce6aa1e89efa0c756f89a3f86334fbd9cb12f608ca5c23c1e786d0b4acce97d8c9eb0438eec63f47f029edb9212a9bf5970619c59bc04a06c45895217593a13107969996bb1f5fed731d70a24feac4c1459583b29716f24c2844f86b337c0d9da269ca4031b6438e7039c6d6cc2493aec46867333c0d9361338bd4fa8215c5c4d3656f400289adad984736228715e0370b6b70967412871fe18e0ec60134ed25d0fc9702e07383bda849374630a329c27029c9d6cc249ba892419ce8d0067674a9c7a87d809cdd12f4ad6c8fc06e0eb42894f772a8b8037484fd4b2b7a847c2072f02e075a584e76d71aa2e64c23766390854cfbbd902328c83bfad01c8eeb680241cd02003590840f6b0052461cb9b0ce42c00b2a72d2009272390813c1a80ec650b48c2d5e56420570090bd6d014958f52603792c00d9c7169084333bc840ae0220fbda029270c88c0ce45600b29f2d2009b7882203d90040f6cfc430aeb7498461dca1b03b40398012a5bfddb62685728b5c06600eb4096618b7d9f98ec5600eb2096618e70a7f0f601e6013cc30e699ff063007db04338cbbbafe07c0ccb60966187775fd3b8039c4269861dcd5f55f00e650eac187d8e7940a15d00afeb2f86888788d0c1ed98cf6ce00de8194f0f447e2632b2dcc53578be5209840bb410aaba2ed433f8f0a6c0d003b8c12ec81cc3df9da99cf1e5b9926048ab1c5e4893f8cf9e85450911f4e09d9bddadc012a66b88b8c60b6b1dd1ede5d5eeb01d611f64cbf0e63e1340a6403232951ea956cb00bc47b0e4b88962c875d0ebc346adfba0b42a464eb2e3e02de3a2a93f969055762058b7d30190acfd80aa13d549eba0b78eae84c4c8f99b41fcd2dba0ff8e4984cb495bc75224f08e5471b66004f1c6b13cc302ead9a0d608eb3096618fbe4270398e36d8219c6cfd64d0130736c8219c6018e490066ae4d30c338c05100604eb009661807382600987936c10ce300471e80996f13cc3076cc8d013027da04338c7d486301cc4936ade2252d82c856f11e087016d884332f943817019c936dc249fa5d5f329cc7039c076562259a985cb81574bd6564cf23327cb3590cdf144a7c3d99f8344889da735888dac21fdfc46a65277105db2907852be459f83066018c0753621ccc623b7139c3696bb9ba62a7b552c9438cb6cf60620719d1cf5ec20588045ec6f422c0fa10c25d01e01e928931a1f4763724acc4934d67b811a09d4a9dfc931546da52d2018b3caa71a01da0103a34139b46418cfef63924ec5122dbe7701ac07b98bd1900e100075906f05390014ca3443b44a29d2ffd731913a393e5aab82a93a2f4849bcd3202f4b6bc8ef8b9fc58cec5126ecd4b5678b50780a7672287c5e686cc921e4bfc9581c954396c0464013332d141022b58bab61aabbf86bb42d50ff8e4cc4c4c628430536701e1053b0f809d4509567fa3209fed6fdf28b81a209c6dcf5cba300e111f0e50cea14439d407ca221ea61052cf96f0bf748bbf8eb6589a42552cb500c5d25cfbe6d41156f6c9e6d47d0abc761e25d27e2c7e4e5d8dec81da94341b08e3d85239f0d1f9366d7d46ba16896cebb39b807f16da84736228719e01701e6e13cec9a1c4f9338073814d380b4289f3118073a14d3849a73990e19c05702eb209677e287156019c8b6dc299174a9cab01ce259968bde7cadfce510ce21531a78b24bc1d20a500e1d2e6dcc126637925d96640a7806afb11f66c0614c6e9dd4301ca65994ad84e4b5d08daae127506bae53ea142f80c48d8459918c61008cb1b370fd0b7c3debbf912c0589cd991ccfdfdb3620300dae5b60e1293568cc80689ff02d0aeb0152d69294f86f65280f6c84c144d79fbdd885114205c998919a0e24b04199f014a36b96628c077943d7b2be58572c8ed7600f3689b6086b1da7e0780b9ca2698615c95b917c05c6d13cc30aecabc0dc05c6313cc30aecabc1cc03cc62698615c95790580b9d62698611c393f0fc05c6713cc30aecabc0cc02cb1096618f7a5b913c05c6f13cc30ee4bf32080596af7ea0dc2844fd6c0ec037adfcb32d1753ca1d15fcb648fa733c530ec2b359f055e5a6ed360ef24ca1c946cb0f7218073834d38278612e77500e7469b70168412e7db00e7269b7092ae7223c37934c0596113cefc50e23c09e03cd6269ca49579329c9b00cecd9438f576a779ae5a6898477fb60078959958e4222626cc6662db8a1a5e452f57b54c67694bb914582205c00d2dea423da96b38405c65d38e35a443be64387b82f6d0169b709276d291e13c08e0acb60927e99c62329c6500678d4d653be907cac8caf67b41de799c4d38278612e7250067ad4d38278712e75700679d4d380b4289f35580b3de269ca41b4f92e15c0a7036d8849374a744329cdb00cead36e1249d034286733dc0b98d12e728e65ea72e1a9f659c8798acaded8ccd90c786e766f0bf6ae58812e904efa72244c04f0635d3ed94c0f567c6b131cff89c950c24d9caa261c07377d802328c4bb4fa02903b6d0149386b890ce46900e4f1b680249c4b4706320780dc650b48c2e9b264202f04204fa00499eb2add1bd0252ef822ae59fc892aae4fb53c13a666a8acbf8baaacaf0565fd899998dfe4b5538f707c89ac4baf1b8079924d3009278b91c1ec0160eeb60966183b9b5b02987b6c824958ada7db831ec03cd9269884152932986d01cc536c824958bd2783d90ec03cd52698843553ba0da501ccd36c8219c6afc77400304fb70926e1e25732981d01cc336c8249b8f8950c662700f34c4a98f81edd73f9ef0ae67c3fa6980b1082c3bf47f7512c06f62c4ab0ce37db17f2074ae59430b89ea3d9be7340b6caa30dc07ab63ddb558571a9767f90f4cfb177bb15c2f29e6cbb95bb81979e4b89b6b514502fe7808a4f4690a11a4c85aa2740759eddabe2081b9864f9e52120919f4f89b70728dfb7caf25bcc5076be0b97a135717ba82096011fbd2013531a6025092bd9c9ab46643e3904e0bc3013054f6292f752f484719fafc120b95f9489ea113630175f3d0ae31617e381975e9c8996513ad523c2a10d321fbd0080bdc456b061fcc8de5900eca5b6820de3e74b6702b097d90a96b0764a067622007bb9ad600907e9c8c0e602b057d80a368c15ac0300d8bdb68225ec882603bb1b80bdd256b084c32564607701b057d90a368c9d7c2b01d8ab6d054bd8314d06f64800f69a4cf70f98a73e16cbbe2bd1d0dd20c555d1d664cfa3425b05fa07aea544ab37b19ec49a61136b32cfdc033cf33a4a7ce97d8793d023c9bec3f931407abd3d3d5661dcad71314079834d5b1490eee64436829f03f2ca1b6dc249bafd1019ce3500e74d36e124dd1c8b0ce7a900e7cdcd390bcaddd31fc6bdc12b01cc5b6c8219c681931a00f3569b6086716ff05200f3369b6086716ff00a09b34d964bf8dc04e14ea55a1411a52cb6b9da78368f95cb4ab70051cacf17caf6783d5bc771ace2fffcc5c01afecf743d2277d09bc3b6b31a7955c82b93b2abf85da1591dcb1dcd1fb95d384407e5105159c39dc199d7f36796b17219fa0e56c49ccde396f0df7aaa65834412955b192fe5d7c4d4a17219c216aec926562b2d8edf5c2e1a692b39395fcbab554d91a8d2557f41af50d5ad2bb8cd2552935afe4c2b198e53ec46239dc0999e225228fb31eaa4562df8fd42ae71349225bd42845429efb4e7e733a585f552a762e67cf6309a30114a3febcc7bdc282d6a901c84034422dd549c0b7b17495625fc5e893c16376a9533863f1629e0bf9c1e97f18d7d2de3d56ac82a75a6afa79629623cb9b43b44b446cce9bcb2c97c3595454ef212ef6f9014cba5d4c29496a6b60ff7fb8e496225477cd26fbfb6ff4e11ef2adaa59bf68988c4bd9cc7bc235c7c3fb196ff2d94ea5fd58265fd3fe382442374550300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/00f1385c43eb91f44bcd2854658046a0.asset.meta b/Assets/SerializedUdonPrograms/00f1385c43eb91f44bcd2854658046a0.asset.meta new file mode 100644 index 0000000..62351fd --- /dev/null +++ b/Assets/SerializedUdonPrograms/00f1385c43eb91f44bcd2854658046a0.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f0f92cd1e6b30a346a2bcdaf90fb9fb7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/05a95d053eb5ae345935fb8b2441f352.asset b/Assets/SerializedUdonPrograms/05a95d053eb5ae345935fb8b2441f352.asset index d1bfdab..51a7030 100644 --- a/Assets/SerializedUdonPrograms/05a95d053eb5ae345935fb8b2441f352.asset +++ b/Assets/SerializedUdonPrograms/05a95d053eb5ae345935fb8b2441f352.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c15c5d6c02740200142874068a147451202227621b4284d20a8a0424802440244128abd2bf65edfd367177befbdf7de7b57ecf5d9cbb7333b937b76ee9cbdbbd97b36bbf95ef891cdb6b3e7fce74c3b333bdba290593f19c3ad5f73d92c56c246b03256c956b215d65f25d676b9f5cfde53c767b255d67689f5bbdc3a379ce5a7b893ff0ccbe869fd2eb5f6ea58bd75e76a56616dabc5f9d9accafabbd4bab7cadae347175bffabacab325a593795b1096c069bce7233baa7103157dc54278f6570bb32b2acdfe3d9bed6d92aa1147f48a138956bfd9a6d9da913e7965b4aabebe6b33d8559cbad7315d63dab588d2573919098757701137f307bd3456ebb5aff33adffa3e57e0beb7f36bf5efe0daf6d6bfde796ede6726d37706db6fcbbbb7cc6d91e9ed15a6e7bc8ed21f6b10c06f6b90e1be57eae765f3b797d86dcef29b7ede5f116daf11c79bca576bc0372bc2372bc9376bc97dc1e06381ca6dd73a8bca715d8b7fe6e71b526e370795d26d019ca53e75b6bf71d218fb70136c1fb8e40ee3b52bbafa376df91c87d4769f775d2ee3b4abb4f1dcf03fbfc7c96ed2f19f5f2b862aa7865837d8b5756a5dc571cd76bd7ad97dba3e5f1b660dfbaa7651ffb792d2bb5e71d03d24ec93e161c3b061c83f2db39e5673e2ff77bcbedf140465f8d613f29a3bda64b7f701d3f9fa39dcf07b24de707c86d1fe4fc40a08fe9fc20795cf9d060b93d01d832d4a72d79296c3921852d4352d832d4a32d27cafd8eda75c3b4f3ba9c02b9ed819cdf447b8e3abea9dc9e24cf7702fb7c7b1c60caffe63ef4b8dcdf8c095f6d77b2bdcd52e9b039487f75ef8834a7472adf4a951e233ca64721487f654b510a5b54fec4f2893a9f0f649bce63f9449d57b61421e753f996ba0ef32d751ef32d755ef72d75bc11bed5e0432359c2b7f87e3ba083ba1ed6c5ea7e556e16dbf70fad91fb6ef57ca67d6fdb4b34fd4f96cfe80cf6ad73d9a7cbfd51727b2a4b2e9b87816b28989eae31553a9d02743945ea7bbcdc1fcd9c7a8f91d75af6b73fc4de363068096440065266db5a17067a99a5334857998531380de8721acea5c1d62d5370f1ea3f3fc9fdade476acdc6e9390d771470ff2b6955bd576f1abcf76dafd7e9fbfbddc9ec19ce5c5192efa6c21b7c30167d333dc9eab743b537bee992e766c2db73b0478ee38e6ec778c91dbb398b3ed76969dceedef97b6ab76ff78c0c04d0725f76c29b70bd8b7e4e6f4b4e5e6a832ac44bbcf64bfdf679f239fdd55eeab3aec5c70ffb972abf6ff25efe906f62d7d3b2c94fb59da7dff96d77707fbead97c7b9e3cdf03ec7379633539a96c52d7e5817dd066cf517547b6765d36b80eeaafae538c547f6e82c66a22b856719d94489b7c55de4e96db52b99d92b8a6ff58ed99a96c75f3df9d98d37fb791dbf399d37fcfb739773cc4bebee306797c6796c84b6e3a28b9ff61661fba00dc7f8166df85cce94317daba747e5b4b0375df45cce943178167f3edc5cce943174b793723697a89264f7f9e3a9fabdda7fb8cea2f4fd5ce439f509c4c3e31cd834fe8ec2e95cfee05f6b9ad4ae674b99d25b733c0bd6a3bd39036bb249e3d50f54b55faa4f20525230fec83bcd7f165e6cfb7dcfc5b4f8bd9cc997ffdca2b634ebfbd8c39631f97d97cbb6cb06de9f2b8765fb6765f9ef33e9e2dc4fe5cb99d93c2f62c4dfee5cce9ab97cbad2aeb3730a7ef6f90cf5de7f3b99783ebb8bcde2ed7baf15431b82b98b3bcb942eaf59dcdb19bca3bca8e5d53e8a7e45ec9cce5cd55e0feabb4b4b99a39cb9bab6d5dbaabfd2cedbe6b34e6d78067f3edb51af36b6d79ddbed2e4a4b2495d9707f641bee9a6ea1aaf8cdcd265bedcce033c657eef7a3f900f9fb73b73fab4df672ed0ecbb8e39e370d76969b81773f69dd5f185c0ee3de4b61c1cdb536e1781634a7645c2ce9e5ee2bc4b349dafd774be5ed36db1a6b3ba0feaacda7050e72a83ce4ab65f9df766cebc7e0390a9ea16a8cf52833ed5067d6e68a43e2bb567dfa831bc5163b85c63a8ce2b962bb4f3aa6e83362d33d8a4fafbd02625dbaf4de5727b3373966baa8d711373c670f9be5526f47cdf7e46af4e4017bebd4593738bbb9c5e6ee320b5ccd9e6535c9f05762b760be5f676e62ce39e05c7f9f65ee6ac07efb5f5c83b40eee768f26e95d7f701fb50ee73daf9e7e4f679a0a362fc0238f63c38c6b78f30672cfb11a9d71c173e4a873cb00fcad95eaa6ed9c7a76d7506ddebc1b13572bb1a1c53b26f03c7609a489f1c325c1e5b25b77780eb6fd3d2ea0ee61cbf582bb71d34f9776a76dc69b043f927b443b525a01d4af65d063bee76b1e31e70fd5de07a750eda51c19cbe980df6ad34ef53a35d779fbcae2fd887e9aee4f473cae9abcae77de556c51a943df76bdcd4f3543e7b409eef0faed7b93ee091ab7af68306ae0fb9707d185cff20b85e9d33715579291bec731e0f6bd73daa717d546e4b3539fd9c72faa974dd0fe1fa18c255a5d7e31ad7c70c5c557bdc2bd7270c5c9f74e1fa14b8fe0970bd3a07b9ea65ecd3cc59c63eadd9f70c73f65df4fbd579d50f75ab9f942fbec892cbfc2972fb92a6cf8be038dfbecc9c65fecb763ae6abf86e8e26ef552dfd5ed5e4bea69d7f4d6e5f61c9e58892f9ba76cfeb9acc37349f78453bde41bb3e0fec8332bfbfeab37b61faa681e944b97d4b63fa2638ceb76f6b4cdfb6990e5465578e26ef5dcdfe7735b9ef69e7df93db7758b2af2b99ef6bf7bc2fb71f3067feffc0d66dc057889c0f35391f6aba7da4a5cd3be038df4e62ced87e074dfec79afc8f35f99f20f2d5f10edaf579601fa47dfe053ed2fe5343dacf90dbcfb4b4ff141ce7db8d5ada6fb4f90e516dc11c4dde179afd5f6872bfd4ce7f29b79f1bd25ec9fc4abb47a5edd75ada7f6deb36682322e71b4dce379a6edf6a69f33938ceb733b5b4efa4c9ff4e93ff9ddc7eafe9f9bdade76015cfd5f5fc4193f383a6e78f889e3fcaed2ecceca34afe4f9afc9f34f9ff45e4abe31db4ebf3c03ef0d1812a4eeec5477f01e95f27b7bf6adc7eb5b90dd9a85df70b73d6edbf687afd06f4e2fbabc171befd599ecfd7e4feacc91f60db3554979387c851f7d76b72066ae75701dbfdc627f6973add2ff755dfe640b9557d8c83e4b3077990a9c646954ebf33670ce5773b1d86a9faae17b84f8fd3aa737f3367bce96f4d865b1c51e9f3077396557fc8ed9fcc19ef5331dabf801efa18aeba27dd63b8ff30e718ee3fc0de6ce6b0bd60ac9d7605aa6d7230d08d6fddc607a16d7f4979eba53c350ea2b8e5817d34ce9c9921caf829accaea07d6b2429108dc5aaf5340d59da9277f72d1adf92ffe334c3cb6deeab8d45a020c3330cbc4fcce7a368a151b6760f6123115f5f412f1bbdcbaa25a081d9c91f4883b921ec195abb1fe5581e9a375d6f1c962f6299f405a6d9d19c1a65a5b7ed7423692cdb7fe39a5ccb51e5b63150a556c8ef5bb56c85b68a99d7c652a93f85453fd9e59964c7b26ec72eb88025a6bedd7080d678bdf6b84a65542fb52eb58bd9897bb822d61e3aded3af1b464db57597f9b9e39472233eb689e108b1db7a7ddaa649a6059c3b52f14f9e77f29d21429c2d1b7e6f983ffb42a142dbc639352e27f0ced428607274ba58c91025986e358312b147388672511f46f63b28566ffb6798f61a35d6d3193e1c9dd5b589048e145395b4cbff2ded77ec8749a368a158af0409f14a6b981e5f20a44edefc784cccc56455c511d7f8609bf08cdcf0e11bf7d5db5b8ce7f02b416959f3301c4f0de1ceb8f75d6ff1aebe279428d2a364ddcbc48beccb0d4125fcb9252a9888b6c23402757a3a994c550b730a1ce0a1b75eab2c50d7556835d09d4fcc74c301b21984a078c604b1341d176db83946072234cfd35deba77a945628da859575bf79b1a6dee4cf9e0cee61a5333cf768267beb129e94f238c702b03e1224eb8bd49c96c4d49ae1f2238d3947462586b4e88cecfcfad1452caad6bfdbb3fefc36ca6bbbf39ad3a88b4ea99645c6a15b0b4696d42d82efca2da2ef96a52d4fb66803c40d3df73f9d1092d81dd75c008b631111471bc85a1941fb3add6faced6b972ebfa2ad122e4c7675a12cbad677379e3c4131239d679873bdbce9ecb912e82eb60508e04d50c239e65229e1376b64fd436d8cb87ee64bb365891205b28e216c9f93bf5b378cb44bc8dd08afdef276a3f99e61cc30365a6d23c756a633943345bf49c21e2d7e1f77b1ad716e45d905c2d57fc63fd9809e632b76e8bdf96605b03bd227e902751720dad375478de4524b73349e60779fcd55875e9c23be1c2db9b84f3e29007165336afbae382734cde2422a765217ad30c2bc5f66676a4a971256d6f1307a33ff511fed42bc93a2f3a605ed5c1943c9c625f2fc9d3074f9e8e98e07e010577c204f70f28b8b349303723df90eb8dd9201717dec5249c371506b0e4eea5285274e1d9b8f0ae98f08106e13d4d9abb08ef86953b830ce54e869f72a73ba6f66083da07f854bb0756a80d4943a1968b091f6a147ec80e7e84f7c4fc7098c10f5bf9f4c35e98f0823438791e267c1383f00c9fc27b1b84178a3c7b280b3712621ec29a2c562fa97294c6eab9761c8e6ba4c6306659dbc5420b7e9c6b917ae8cbbd1ed994195aeca2d899c8bc0fc4d15bc15f946f2bc226e65a8e4f402b8898ce58edd9c7e4f0bccbcddffa4f8acff2627a81a387394744559758fff8de44a127ff2b295fb4c1f3455f53be10354298ed2018216e5c3b6884c97f45e593dce2f1f234be58416b3940c546b441bcad8899db545e9e8079453fcc2b469abc825790b5c027265afc6d8f1d67ed2df1e50bfdb127179b9edc5df8e3028bc1026b573d95f74ef8a246ebc4393e1c6eafcbe4478f7c4c8f51263dba003d968a1861a5f4c7c66b3000d360b449836e4612d365b9d2782d06625a6c61d2a223d0a25ca47d5d80670fc29e3dc6f4ec1cf0ec05a28c5c2247c7fd9647834dcfe5f5f496860c5ec4d37e6ca246d09f331c7fce10ccbead701f732b7bd789491f7e2c1d6ad28097bc5b9b2ce53eb68d5e26e94f2bc29f360cb3775b93bd9d657a8e12fe93b0baf1fe54803d7f3bb7e7737fe2cfaab4e8ae0ee4cf9b60cfdfdef4fc5e0e7f86e93ed32ac1eb445adb33437879a7464afde8b329a6cf0e267d063af4f1abd70241b1caa77f6e66d290f7af7664c9fdabc733fdf5af869b84f3126c1c0bde91d81c2b43c663654849a3ca9011a6e7f01c3c01cbc11303e4e042ccaa499855931b65551166d514ccaad200568dc4bc6c2783970dcef2e765c598f09d0dc22b7d0a1f6512cee395fcdd889491a42eb8e0d198d6d30c5a1f9fed4feb2db08c373d0d196f0c86644640245b6248661a905cd2d61f92b198d6bb04d47a2b4ceb5906ad7ff2a9f5d626e13cb0c6c7b60305f4b7c178cc09c8635b8c479981c7e876fe786c87099f6b105eef53f8f698f05d0dc21ff6297c072c25770b9a923b626aef6e507bdbf6fed41e87099f67107eb24fe1e34dc2793135df504c1903de2ec55409a6f91e262c39fe349f8009dfd320fcf50efe844fc4b0ec65c0c27ffc60996412cef3fd8280f97e328664a101c99f3e914cc19094a7014929267c9141780b9fc277c2b05418b0ccece80fcbce58a15219b450998aa95d6550fbab4efed49e86095f6c10dea9b33fe1d331e14b0cc28ff7297c06e62a4bd3e0873331e1d56910be0b267cef34089f85095f6610ded2a7f0d998f09a34683ec7249c17877cbd9520c56119a6f58a34683dd720bc500c958639e7118ea5f88fe5af340136c6dff9eb6ba6f98ea99e8fc5de77c592669f3424cd6e9843ad0ae850bb9b04f3b29ebf4d1aa8ac9f87a95c1f50e5f926c1bc285ecd928be203bafb2b8af730e50131a25f4d9a07caac63d58cbfec37519cad16d1b71186d144ee936e57f35c308df1cf43ac167ab8e797359ef3cb5a915f787c8c4e572c6fed694a721e7f5ce7c5975c02957b6182f70d287801e6a4fb199cb4b2873f275d881535fba7a1a8293709e739e0002f48d6e2821761ac0f0cc8bac22498471d0ff222d825c05889a13838208a2a0cc52101512cc6041f1a50f012cc9f0f33f873cf5c7ffebc14e37c7840ced5188e2302e2d81bc371a401c7069f389661388e0a88a306c37174401ccb31c1eb030a5e81093e26a0e09558021e6b48c0037afa4bc05a4cf87106e1137af913be0f26fc7883f04ebdfd095f65105e28e61c8639519e4f3f59258627fd77004e303986b141c3bfb3619a24effe74ac8952674a164eee242f9e7a229e24f526c1bc5776b217c1b5b8e0d5a6b4165340770931adbdbcd66e4ee9533ca7f4a922a5bb2759e5fae637426d8d29393835f1b90b4d1d5116eb49722a9e246bb1bc7dba216fbfee336fafc3343fc3a0791b9f9aef8b697ea641f3a2befe34df0f137e9641f8fa7efe84ef8f093fdb54130cf527fc0093703ef07e4ec3096de09d7f3dc1ffc0fb81a6e7f034e41f89489a12c2137d012b6d98f4b9429c2ab1da613cecb1ccfcdabe8fcaf52053c922e67faf202d59524ddbe51dd0d522a78f00931de788672796180832159aaf1dd6d7d001e33fe6b2e93c513615b3d4938ed3a13d56aa1d8c6582f30d99608f027f99e01093701e63e25f910814633a14937c4150c9879924f32ef6852c7817fb7053fe10af302c23cd1fde03376ae271fa024dfccb21de6aeb8b458ee0539668f5c5f2c211a6a4e7e1844b4c26f808271c8909be34a0e0a330c19705147c3496bf2e0f9abfd663923704957c8c2973895778163749e6d2c713d297a5aef09ca5ae14596a53972c15444b2c231d6b4a639e12577971cb2bf1243e0e739eab833acff126c9bc8b788d17955d422f276082af0d28f84493603ecc729d17c12ec32c279904f33ed4f55e04bbf43b4fc652ef86a0a9770a26f9c6a0924fc528df1490f26998ca370755f9742cfd6e09987e67602c6e0dc8e24c4cf06d01059f8541be3d28e4b331c97704957c8e49326f80f24f47046d809e8b09bf2b0dc2ff8531b93b28937f636adf9306b5cfc3d4be37a8dae76392ef0b2af93f1890fbd300e4024cf80369107e21c6e4c1a04c2ec2d47e280d6a5f8ca9fd7050b52fc1d47e240d6a5f8aa9fd6850b52fc3243f1654f2e51890c7d3006403a6f61341d5be0293fc6450c95762409e4a0390ab30e14fa741f8d51893678232b90653fbd934a87d2da6f67341d5bece249977d8f937b78274d8afc704bf1050f00d98e017030abe1113fc5240c13761a9f772d0d4bb1993fc4a50c9b760925f0d2af95693641e727ccd0be68b71c1b79904f335665ef722d86551a4dbb1acfd461ab2f61d188e3703e2b81373e7b702baf35d18e7b70372be1be3fc4e1a38df83e17837208e7bb19cf25ed09c721fc6e3fd34f0b81fe3f141401e0f9804f321ba0fbd087619cb7b10f3bb8f02fadd4318e78fd3c0f9618cf32701393f82f9dda741fdee518cc76769e0f118c66363401e8f637ef77940bf7b02f3bb2f02fadd9318e72fd3c0f9298cf35701393f8d69fd751ab47e0613fe4d1a843f8b09ff360dc29f3309e761f5efbcf07609ab3f6f12ccc72ebef722d865ece2054cf00f0105bf8871fe310d9c5fc284ff9406e12f9b84f332957fb92d5099fa8a49329fa9f0b317d82e2becbf6a12ccdb8fbf7811ecd27e7c0d73e85f033af4eb26c1bc64facd8b609792e90d93605eb0ffee45b04b0df026e6737fa4c1e7dec284ff9906e16f630efd5750877e0773e8bf033af4bb9843ff13d0a1dfc31c9a2fc319c4a1dfc71c3ac38b601787fe004bbd16190153ef434ce5960155fe08cb83adbc0876c9831f631a6706d4f8134ce3d60135fe14cbd86d328267eccf30e1596910be11f3bbeca07ef739566ab4f502dba5d4f8022b35da7911ec526a7c89951aed03961a5f610e9d13d0a1bfc652af43d0d4fb0653b9634095bfc5f260a78079f03b4ce3ce0135fe1e83dc2528e41f3095bb0654f9470c72b780907fc234ee1e50e3ff621af708a8f1cf26c1bc40ccf522d8e515995f4c8279b1dc330dc5f2af98cff50aea73bf616ae7a541eddf31b57b0755fb0f4ced3e6950fb4f93703e07a8af171f719903f417c6a35f501e7f6392fb0795fc8f49329fc295ef0586cb142edef63666f1011986d745f81a4c70062afc22d808b142e84aeb610bd8643133b45c5cc557b9b55754e6e7b1bbddce38cf39bfe4e6a7d4c9c06c1d68b2b5c4a3ad13ace36bc43ac5f69aa9e9b1129ef363630bccc641261bc7683626be0a9478f5d1b695cf065e29d7ee35df819f49c8f263494bcc92c1264bc66a96c059ccc16d314bf3634d2bcc9a21266bc6a1e9023d6f2ae333d1ebd0fc05edf16667e3f3562666df50937d7cb935f3bcf2e4173a1a977afea5fbb1b63566ed3093b5dbf9f04dfe9e41bde7948492f47be65a5656b34a5f76b5c1ec2af092e7e0f70a82e739b3343fd66461d66c62b266074f796e9c45b412ac901d3ccf25cef8b12d1bb36d53936d5b8bdde4ef4796093b6aa43df67b2d0bc40ba175f276ee416ea561fa4a90b698459b992cda5e4b2de773618a9589975a5759d74e67fc8b02e568da3965a4cfb2769865c34d96cd46cb46c81d5a3891ed63dd5a2ed3715f97f2cf99725eae491783f61883cdbd94986e258bbf12134a4a47899983d935c2645755433e542fe5c2577213af612fb66eb1df332b6db832f1a2ef2c913a55a2ddc9af861c668a77d296c86f1bcc159e5f6dfd5e84b432210dca9aa503c6a9d0c4a98c9813ffba4b095b2d2ce27213f7b8130acea123c6a1082be54ce5f67491d66b458dba4c6a675bb744e686a9d6b90a21087edf815f6192877d77d88f659d30cb469a2c9b4798c29303e7043c2ff821d21923528cb5f9fd95fba5a22d5b23de49ad96be1b6699de05b36f94c9be42c49731dff3d21269bcee5d31dd479b742f6e94ee2a2fc26fdf941aac685c0bb01b66c116588fcb7f8f7286f82a916a5d3465ffb23b66ed1893b545a8b57aeb6172cad6433ad2aa07a6fd968deffd9b5a7d4d953ab9987d634df66de33975fcb5ed70cb1a5353f7c46cdaca64d3784f6936dbba7891a869ca4559dcb47dc85e98855b7b89879a2d2c15f54d743c330fb3711b938d133cd9e82dba1da695bd312bb73559b973a36a33d5aa4a9c1d6f6dddeb33caf6661fcce6edb01adc6b0cce6f9dd0d8f6615fcc82ed4d160cd12cd0b54eb4fcab44cbafdef2cbf49413fd303d77c0bcabb179283aed8dfe98cd3b7af12eb778855fef82b2fc58908f5930ce4b9b43d7ba04a417d7955fc799f2de97aeb15a4cd1ab858d8bee0ec0ec1befa5f64ab68ffb65725d95b8cedbf1f4b64106623696986cdc36858d766b2a71837b5c97ceaa419855134c569dc89a2a1634c1daaa1aaa525c5b21a456b2ba14f1037c9417b724b1a89f79493f7fe4db58ff3232f8843dfb8bde3cfe3d53dcc1f7ea58a1f86c785103dbd45f38e7cfe64b41f2f2744e431c25f5428313ad446dcdbf6ac47f86657087a8970584611dae1221bf467aa1dd3ee6a3129305912ac1b8c2da9fcaec2f037b5df0d1e4272380a740ebbc2ffda82f159b91d1465aa46459a4c5c7d19b9ba59378aa7695a9daa2507c6e7cb3467a536a2d26f3a7b534fb50f2775b605e34e96e0b505fd6cef0fa59e694cf4df5bd98cd8500553ba61457068a5d93b85ec2d9ec01c955cc0edc4cb1727c9bcc16453c3da65042b3bf13ced30682db499630bcbc8c03ae7559095ca594b83a30f8e9655b09082e16b0da2760ed4409ab2773fb0e7ca25553663daf52b649e300f0eedc04c09de94bb459e2e695a231611e0e8a033406bc6e2a7d89663f3cbeb8d6830a601a25aece499954f95adc908ded9840369d12598eb1cee4f19ac531695edcde36816a0625aa5eae55409cbd6d5d8f04c2999408bb3a109608bfe3319b6ad1cf881bb699dd13d876a1c4d65a60b3c35bab62922df98f82332b3c9f4a1e112815d1912aabc314076cb7774d609b4d89ad9dc0365164bcd5e2f1a5729a461c300d07de3587beddefef6324710058393401b08c12a0fd9975982179b16f2f6c1f07503dbb2440cd0daf3b9e5c8ec501d652006b57fa42df2d3ea6326c1cb065810ed26e94d8fa32b726aca92c2b91a3a04bbcd81e0194c3413c63774a943d5c51c6339af6b068d0b6c9d4844f4a12ded871027fc4f1110d1e17e121f05a7194cbabd44738fa5b97444ef3797084a220a95d5fe0d22a2bf010de2e48d19d2ff0516e16781e8328f010a62af01cff2b4819972ef018e729706d7be8cf49ae700b7c742df46bddbab605becb8e8246c61e0a0216f8058d0a7b1734aad19c181c360fea16f1c1e1f9ffcfc76df9a729d91e1c027f479effd835dd9e610c7dd8c3f42b580d739bd0b4c082384ad7a14f920ece6f5bb97dea34db51ef75f0626063eabe0b59a2e1b057947016c712e72d00e78228e11c154b9cbf039c0bc3c0b904050ad5e7997d0c1dce6c2a9c3b019ce551c2591c4b9cfb009c8bc2e87461309d9eb9051dca5c2a94bf01941594283bb144cbaebaa11dcb8fd48ade08bf2c7ef8ca00becaa6f444288efb2219ca3654281f0728ab28517693282b64035d9fe89b98ba4d88f1542a8ceb00c6c561c58fcb45c72ca4cc7c2215ba3a806e0925ba3c067bb9a9e20afc1c573169fc2206edc8ad01d2a5f4d3bd78737b810c2854b29a067c2178e55a2a84cb00c2eaa6ac629caf4614d1a1aca542791240b9771855cc48eb7f55c39b0cea74481e49565357018ccb2831f661a97a3350207c1d89b0e62ea2c23a1460ad0923a3630d20675b9230a39379681f807239f5ac166775c3bd7089a52a19b43e54d03a01682b9a021a61a62583d611405bd9b49916be624798693b51a1ec0150d68651adf8af5408233c64d5ca8700eb3e518a8c938672c97a3497019caba2849334944b86f36580b38e7a065785eb88f02cf36b543128395b0388f59410bb4b9facb12ee2feb8b74b3c9cb00a220be77e0a40ae8ecec002616b920ce54b00e51aead6a47d839a28348fd96b5b93416b4705ad1580b6368c00c5a86619a0a80118d75162e413be9c3d1974b279fab075a7c2d61e60db37acf0185c18d2ee06c6ddfb16038cfb5162cc65fe06fbb78ae150ff7600e6fe518239368630b705300f88124cc27e3519ccd100e6815182393a86308b01cc83a20473cb18c2dc0ac03c384a30e338d76c4b00f39028c1248c9693c1ec0e601e1a259884c10a32985d01ccc3a2049370c23319cc9100e6e151824918fb2183b9198079441830b141313d464e98cdc922e4dd00cc23a30493b0022283b93380791425cc2ca64786ea6238ba9d03701d1d9d292984dd45b2a8d04080727d1828d5188dfdcd187c70217e430bff01288fa144d98f258fd278fda8266933886cb2e96b00edb1618c6e7befedc4b1555902701e17259ca42f7992e1dc1be03c9e12676fcf19df39299a10ea9554505f00504f882254c21e1019d4e701d413a30895b0de27837a2c807a5214a112762fc9a01e03a09edc94535e9c4d7cc250315913ff4780f2144a948398b3896fafe7a33e7ee4fcbc86da8eb7cef20ee91a562da628aca2f557b229329f03c8a7366538c4e9afa493b4c83cf64000f3b428c18ce34b279b0098a74709661cdf06df14c03c8312664796781757490d690612d93be0ab01bc3329e1e51bea743fdf3a24ad82ba50e13d11e03d8b126f8ec4cb1fbc58d6f4b66c1ed423039749058e0170678751423a5fb04f5ee82e8457ebc9a2a05b0098e750c26cfceb52844d22b2d7a59e0258cf6dca218ff84f50e80250fe2bba717a42b46471fae301da7f871158c6327ff2a0701c8785cf0338cf8b12cee258e2bc09e03c3f4a3847c512e7f700e77fa2348a343296738d27009c17440967712c71ae04382f0ca3c1c41bf33c535782f5b09bc79b43cb01ca8ba2138b271cd52443f911407931254ab5e2b98ac5af1262ec55dcf48937cd613ae25f00ec254de9a3a10d12932d47f60f407969183d78ffeb6811667db21e7c11c07a5918589d51a612867f8a21ce4b39ee0eb05e4e89557d6d631473be1d1c52ed4e16369e07006e68cac892b3768fe3b8657f80f20a4a94ea3b28aa76af60eaf5fee6b5f0c92f00e895614fadc16a755811c57141bd0701d4aba20895b0762783fa04807a7514a112667f32a8b701a8d744116a1c9786bc0b40bd360ca8c9cb889b3f7916e756e80e00ea75510a2d8fa45c5e850ce7d500e7f551c2591c4b9c1b01ce1ba239264fb8a005598ffe2b80f5464aacf0a38a7c80782d0831c7fd5335bb0088374577349ef0dd4eb2d1f82f01da9bc3c8f6aa3b0ac323a5aeef79c6b153fa07c07a0b2556f5f190d1acb97d3ca41c20bc354af53be9d03159fd7e31c0795b9470920e1d93e1bc17e0bc3d4a3847c512e7df00e71d94380719707aade143ead55f4c05f95600f9ce384026acf9c9201f0e20df1507c884915432c8af02c877c70132e1180019e43b00e47be20099b0ff4506f90b00f9de3840266c5d90417e1740beaf2927fe84360395ac63fb1940793f254afe681823205c838c6c55fa2c00eb813032b70aaef08bf9edb5ccdf5bf584ad5ab2b7eadf01901f8c03e4382e5df00a80fc50534e008aff975ce702940f87111a2c6e76a1c1a500e1234d599f4371f1fcdce80300e5a3942887303cfeffffe1cdfb3f01e8c7c2c8f6239b5db6af04081fa744a83ef2835542ca52524f245b62630dc0f8042546f3520693199fbe13f2a41eb26c3d07c07cb229aba2d0d6c8236b189d0e503e15c650b4ff774a08b33bd90c94be00ebd39458db32f899d2c4ec93f805393a0364cf34656fc7d9be249cff44d6be1c02503e1b46a64e55d9386745c575059d5d01d6e79ad6436d51f6b7db09ab1db22f10e70294cf4773e22361a098acda791f607d218c0912de577e88e3e7a77604385f8c124ed27549c8701e0c70be14259ca4abe690e15c0070be1ca5d950a493c6c966436d00385f8912cee258e27c1be07c9512e7304363c9392e648fad2f177ff331f7d542e4c486cf98cf11d44208289f4705fb2000fbb5e88cb5c7f16341cf0094af53a2840b095789ecbe3cac60315934a91ec07b83121eaf5413618f59d6612e287efda07600d89bd4d1755efec15ef94ed6117bf6917395dbf8058447018c6f5162842f7ce96b8ac5fd85af9900e2db941007182a113b26c4e76aacb0fc92d7d0b5ae4df638ae6fdb02007e273a114ec240075984730040f96e1828bd7d1d9170c63159b6bf1ca07c2f4abd72d237e4c932f97480f3fd28e1247d439e0ce77e00e707943883bd854c98f1c966763c07d07e18cd183ca1c792c5e0bf03583fa2c4da9d25d6bdab6a0866349ff6e80c00f2e32895a4a41faa202b49c7019c9f440967712c712e01383f0d239b275aa0cdebebdce702909f4505641c97bf380c80dc181590842fba9281bc0a80fc3c2a20e3d8b5bc0080fc222a20095f582503f92200f9655440c6f14dca6701c8afa20292f0dbc56420df0420bf6eca1147672c93307393c532bf0528bfa144c9c7fae11b40891170fb7328f11bf76903d07d4b892ed53ab45808238e018cfb01d4efa208756c0ca1de03a07e1f45a871fc72c77500ea0f51841ac70f9a1e05a0fe1845a884410e32a84702a83f45116a1c5fb23a0240fd6f14a1c671ede43b01d49fa30895b0b74406f54600f597284225ec379141bd0140fd358a50e3f806d1f500ea6f9450f30d50fd2d4841d86225ebb09e09f0fe4e8957ada630da3138ac4ec7fdc3a78b00c63fa233938eb0b74f86b200a0fc338ab340485fce222b477f0258ff8a2256d2b733c8b03e06b0fe1dc624060c6bf23b6f847d7db297b4ce0738ff89124ed2392164386f0638f96cefc8e01c154b9cbf029c1961e0f43e018cb0674f3663692ac0d9224a38495f7025c3b916e06c498953bd28c81fbc58a054b257c84be2d7eacc00f05a51c2531f872e66cdebe3d0bb01809961001cd9cc006e0300b6a604a86682606561dce76f5e0440b6890ac838cedffc370099151590719cbf790d00991d1590719cbf790900d9362a20e3387ff36e00b25d5440c671fee6ed0064fba88024ecbd90817c0880cc890ac8384e84bd0f80ec10159084031164209f04203b460524e1544332908f02909d2841fa9b9a4dd800220b53bc0150760ea3973dba99f5b22701805dc288393a5722b69599c8ecd5b5d4cbfae42b109f48857315c0d995122777087db9a8a98cc71feb63be54d45880b01b2542beb4d75a79ba12bc6b41f84d35b291984c00ad3b2534356da5482b07ed1754e23e6d652f80b10725c6c67f6c218e33d64700acb9613478bccd06220ce69279683f80b267181eea7fda4a1ce7ff7e0cb0f6a2c41a6c1523c288d05a2ab4ef01b479519a73319232524956d35f0a70f68e12cee258e27c04e0ecd3947d71e728631c4775de0228fb52f77d541bb4797dcb6f0f80b05f182136ee6dcd7169b2890064ff30408e6ca620a70090f96180b4e3423084c11b42abc38a0c91819c0d400e08a3a2e1205788c22ae18dcda397be02a01c189dee2461bf870ce5208072501828bd2dd31cc7d941e7009483a3347b77642cd762df1ee01c12259ca36289737f807368947016c712e77c807318254ebeb39f8c0191616a4785a925c054109dde751cab97a701ca4da23369208e5fdffd2f40b969588365cdef1def3d01c6cd2831e61b3cd2df4a0484233d64e3e0a702bcc3c3787d897b69b9e820d685e59b64e3391500dee6d11c268be37a6eaf03ac23a2d35d8c63b4fc4a80b2304a0df29194732ac91ae4d300cea228e12c8e25ce7d01ce916134918a9b6513a91a602c8eeeb402c2e611d950d90900eda8288d8393762fc9c6c1ff05708e8e124ed2f81019ce6b01ce2da28493347a4986f36b80734c349bf3715cf3fa1b8075cb28359a48a76691359a26039c63a38493746a1619ce5a8073abf05e4db195986a5d5e615d50e38827c57902c2708073eb30667260a3e6ce8c1e3f90bd00c86da202328e431a3d01c86da302328eb1a4f100e476510119c7f534f200c8eda302328eeb69cc022077880ac838aea7510a40ee48093297f9eb4812f677c8ba91670198e3a204937039083298670398e3a304338e018e4300cc9228c1246ca093c13c14c09c102598715ce3f76800736294601236d4c960ae07302745092661d3880ce67100e6e428c18ce37b9027039853a20493f0ad0a3298a70098a5518249385b930ce66900e64ed199f84a5862924d47f804a0dc39da3336099b4a643336cf0078a786f5ae64737ce9742100398d126496b5b3dcda5907e0c50f5736c0359d12571e73cecab45f2fb5c7c19d6565485f2e255bc7ed6780744618eb0aeaeb69c57d5dc13100e0cce8bca34bd86924abb5f301ca5d2851f69528ebd952eb745d439d5d6629c3e1aaed78eb62beeec61aeb2afe6afe2a5ab0646fa71502b0b3a20a96b0214406767300767654c1124636c9c00e0660e744152c617d4f06b637005b1655b0845d4e32b00700b073a3d30e201cbd246b070c032877a5449963ed38d7d50a6571dc3e54e03a0070bb45693236e9ac61b280dc1500e7ee51c249faaa1519ce0f00ce79d44b49f08bf93b41f1c3d416609a1fc55700485f54217b05e00780758f2862257d9d8a0cebc3026b9b4c4df8a424e125a204e3655885d0df6ebc8c6093457d5b25905458fb53456bb19e2db480ccb7fef94b8b3dad7fa6e319e2e5ff896c1dab1547b9bc4a217bb975966b56c78afa5b97ecc95da395748d0261945a95a6402ca46f3f7f89f58feb3ccf71cebcc87e414657eb5c85d5d2e0b62f63d3842d8bc4fd75a2755c6ba56bb9d089a3cc10b132aedb0aeb7a7e75bd75b6525c516ea568b9752fe758986f5d96c1e34f76cb7a44439b7a847cf971b9dc53c753cbe4ecdca5edc5016598f34e4dda523d9545b6a3f2fb175bba570867e44753599ada3edc83dabba44ae1009e16cdd9fe053cdd65b20b37cd152e5f66a57ca574de19d6c5954229fe93f97ff0743d26c8330200 serializedProgramBytesString: - serializedSignature: 50c8d445848c61ca18ed5919c77dae5bbd8ba03af5aacccb548436570fe237cb36f2ac47bff4321f0b03f29f38043dfc23ac1a5887d8dd6e0bf6729441eb5308 + serializedSignature: eabafc01921a6bf0ff9c058f3493c56ec5a9cde03068df9a4ebd4fc837eea39c34a20743cb610e26c8a4e6b8f8b46065677e83290f123d6a075899b1f8f1e507 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/065771c70501b7948b90054d4c86d4f7.asset b/Assets/SerializedUdonPrograms/065771c70501b7948b90054d4c86d4f7.asset index 3ab484e..e25ddda 100644 --- a/Assets/SerializedUdonPrograms/065771c70501b7948b90054d4c86d4f7.asset +++ b/Assets/SerializedUdonPrograms/065771c70501b7948b90054d4c86d4f7.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5bfb5a1347149f0de466122e2204d45aedcd589504b0d6da8b55a496d6aa1f24fca1ed8751169b7e2150887cf8b54fd047e91bf411fa027d87be41ff6bcf39334b26bb67b22c309150c397bdccce9c39e777ae3b136245011fe70a1c96c482981593a22256c4ba68c0d52c9cd7e04fde79ed8fc4269c5fc0b10acfae88f32123f173d11987e33cdc6d89268c7c299ec3b946cf17850bd7f330d6853b6c5d85af0bbd9c7e18541177c543f140e49dd110124b34684bb53928979382e31df10a9ebac4144e52a44779382cc2932d7ab6064c7bfd9e881f48ac3578f61cc66c8a3ad07c4614533b707448263ac5d5b94f9db3f04dc0f7a4768f52fcaaeefbd53907dfb46f6c42eb83d723bee749d57ecad73ea0d11a50e741d57754bb07bace906f6c4a9d8754ff31ed1ecfc3aa3dafdd3bda7cde3ce3be796ef8f839e1e33da668a4d4b58e65465da7b8be7187ace26bd053556c88220dbe14c17cbd91e1868ba41331a96bb0609cb60926b2010418eba9906d36c58c9866ad67c2c96a7ccfd2b10a3d6a44742238c51f812990b93afcb99ae96f41fb3df21c34fe1a3c9914f7e18ca39e8a2930e6273e2a4b306d1ddcc71565386e10bda7c076b0679848e826fe310b40537af11ab478806ec07d9d385ca4e33671ea12f7f3d0d6a498d280a87207ce3b345b50f64db8e6e62c2bc8781e796736b5cb90e1a9e92e4883dc17c95fde68e4756804a14f4c2837ec2f5204fd2da0893718ca2013a72429694cc934d5d6362d8a146717020846973128216fdf12efebe25a4759786450dd67488296867ff9e7ef3f33bfffb5136f176d461429859e0d11ad13b048afe08c05287416211eef2f21a37ef81d0e7e4ce3ce6217e197fd6ad42fba02129499da15406544192e76e05b279f4262b3c48c64aa2e02da292554115360d26718932688631cc4a96e431c1e533a419cda95ab05317e7804d30604c3783021d8c72148f5ddf756110c165fded51d18fb2320b14d19f5258ce78ab5ce9862c179d587298f6786f03ccf9690d1383221dccf218c0c3a8fbb82f022d431dfc2b32af477295762bbf4d9961cedbd3aa39bdd33ba3942f79c86ee7eb831211b67902da5d47b87dfa5fe854f3ced63120ddd403cc111c7f835c885449c7119fe4af07d49c2e01dd6f8f245393073d23c73d234f350d8cccb001d1a2a1a83ab408d3273ca34f3303733ba0e965a553012699c4db8c67151e64c73ee91793d45cafe0238beede7f71cc0473ad61851c3f70993c64e711acb92ad9429d5be201bd9148f9406a3e82c6372bc51c6f156a00e8ae27859ce20a8b1dc4583c067eb4405dd29ba51a0822ffb8d82b7883c59c47840b870164c5691e3f483a632ce456ebf6e7266dd0c70845197137b219c31131ee408a3d24fb338fa29e7cd948738732280ba59223e046dfd24e4424174633ab3e7847b56f0e561d8fc264b1ae6f4827a7ccb14f4fcaa1931abe6a429789de382d74d21d8eaa0420aabd3525a4da90553e13c5cc9e135a8d0b045874407c4ffacddf1a204c61193446f7312b9bb127935a4be002913021adc2a2d15a264f3bb3de7c00ce58af90249e18294dbd47b52c9838be2edabf54b548ed4e0f88ca4f3cbadbf85ed1dad259801118e82d329134ee7399c2a96716a40df59980a2542baad319d113a380ea3261c2e7038dc16b821d2508bc673c4458d561a75fd48b9d6216ca10fac518956534bcdf8249cc2e1f9c39849be7738f91e5bd4f3bd03fb83d923a220923721f22e87c8b42f90cb35162997a7e932b4b58ac72871ae352a8a04e32609de33d92c3fa76ea773e267e85e5551fc55074ecdedd16d36097f0ebdc6cca995ab576021eba4f126502a52b95312dcda00bfbd841cac01e2387379d7aec2379bde17e6cda6d54032dfefbe4398149c874d6a3ea64b172e93798f25a924f26801d254ff1d37493fd0b51a2b52257a799fd614cec5459cad8fb7a1e82bae92c0038a9340006bfc65e5182e854f5448e82c6165e75522e02dc91fc22e2b9ad66d806785eae62df8bb0faf9fc978ac84e8176c429412c197eb5e00083f18097dc4bf3a3467dcdf7e44306c0c52a0de01f6d629fdb920842f8cd0ebca51e3fc921e060aac9d140c0ed6ca507c66296186faf07f9e3c4a681818571327bd584bde7ec5a6b78f09b9ec2a35d6a0055f73dd55f2cf7f905dca745b4c38bb17e1f6131786442b705eed0694cf952d363b96e116a14cda8232a141396913cabc82f285d12e2b6d35b34530d3b6c0cc6860166d82995360e2c4ab04a4471b5ff3ad0117b7059cd0802bbd4e87ee7d1b8c6b504e1d9dd838dd83b131a541396d13ca0b4cc646269ab461db10dfa85ffb1d375b8d6900cfd80418e9cabd6f6b20e56c81d4af8174cd264805658575e854a7f33a5ce1ca97b7118b25f4b26f1dd4fc4b14ab3699b105f78006f74736e11e34e6f086ead27b11d3d1c0bb6e13bc5126629a565f2d5ae1882d208735203f3e3a597caa076d32a94179c32694a7199be47685f5df9559b54e6b2929a741fa894d4831ca6fd33b8d0b9df434d47b89a54f03ed663762a3c9a57b3d36a635203fb509a4b764614a32ed1b7956c1ccdb0233ab81f9d95102d362aab106e6a006e6e747276bcff460d63e218ecdd64f098bb92f44db4e8b39b115b49755b9c732ac646ec0ccdf095c15a8c2b82a9d5bfb2d45fac91a16dd51f6703bd30cdf0cb9856239bc95d70f4d5787b1c1c3497a90cd9e6c07ad14e9c776c759fe2f85fcb769faa099e6c9a42ba0f915f54bfb87d0798598c24ffc3f9d0b5a32d13f0000 serializedProgramBytesString: - serializedSignature: 9058038c57b0fe5d540a7ca41bb2674644377deb7d224862b79b07d4e2aa02797c728bbf16db31ad95afcc4654a9365378c8aec01e97e7feb73704179b1d7d02 + serializedSignature: 96b52298165a434b0b7d62583b12178ab65bf5b12261f22b1f6a2fddabb270185f50ededb53c7c8f8c86c238c7cb923f218c5e3c0cc564d450aa881de602450c programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/07bc28560014a6f4fa836ceec923f959.asset b/Assets/SerializedUdonPrograms/07bc28560014a6f4fa836ceec923f959.asset new file mode 100644 index 0000000..2ef6944 --- /dev/null +++ b/Assets/SerializedUdonPrograms/07bc28560014a6f4fa836ceec923f959.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 07bc28560014a6f4fa836ceec923f959 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e7825b71b7502c589c20a550085ab410282db41092002909499360757777777777777777f75fddf5dd999dc93dbb37cfe5f6f69ecd2cef3f7cc866edd967bef38c3f339396c5ac9fc848ebd712b69015b24cb69895b22ab6defaabd03a565affec33757d01abb18e6bacdfc5d6bd912cbd8137f9cfd0480febf72cebac96d5596f6e6025d6b15cdc5fc4caacbf6759ef965967fcea6aeb7f99f554a4a9f5d2623695cd67f358f748d706442c112fd5ca6b111eae484bebf714b6c5ba5b2694e21fc912b7ba5bbf1659776ac5bd4a4b69f5dc32b69b0856a575afc47aa7865558325709892d6f99cfc41fcc3ef492c7def2d8d3fadf4afedd44fedd52fe0d9f6f268f7d127cbe2f78af15f89b13ba20cefbfdec6364a9756cce58da2470cedffd463ed7df9697b6368eac01f2b8ad3c0e9432774840ff16f238a881f0c6933118c84a84594b791c2a8f43a4be9393fcfe309b51e41c208fb3dc05e833147cbb15b8cfaf65f808bb8ac75d5df1b8ab1d8f6967c8f8fb443e3f5c1e47cae30829db7aa6cf0df2da28794c6f40af4cfb3d3696456dd6fa66936a799e258fd9f29823755b2e759d02cefdeaa2e23457ca5c26bf51a8b9ae9ee7f7a7caf33c79cc77c5d768f9dc34795e90a03e89d89fd26937f98de9e0dce2d874651c592ade7777c5fbeef2dd136c8e4def708507d89f56ee18296f4602e1186b7f63cc33f27c9c3c7696c7eda2f1397690bc36dea94f6485fcde4c706ee9df6ca5f33921933f374b9e4f90c72ef238117c4bd9ce24441ffef7f6f27b2b63758ca86f4b5d23c5f2db3b82734bc7e687c8e77690c76971be27f58cacd27c6f957c660a785e712a04d7545a981a95314e71980cbea39e9feed26706b8d7511e676ae4cf8aca9f900e9e53efa9e77774c5c16c70af933cced1c89f1b95cfa3adfe39f55e2279f83cc9ae44c6cd6c706ec54d0b650389da7d53f9de0bf27c3e6bb8dc53baec248f0be47161347c93be90d716b9b8c3b850f1e3352e3a83e78b5cdc615ca8f8f11a17d09616bb744d246d973267da2eb519b79ae07c2e266d2f71e9ad4bdb3b23fac0b45d16aba3b806d3f66ae64cdbab6d1d5baf94cf2d95c75de27c4fa5ed3d34dfdb83d1a46d95ffaf65cefc5fda6b648dbc3e079cf3705d61cb6eadea77bb7a88d75c97ece94ed96d3a303cad7493cf96cb77e78273ebddb6cca587b2a175f2f9792e9b50f72be4fdf9cef7239571e207e8c396b9beb3c0757fb9eb3beefbaaecdec966d65ed6752255f2fa4270ce8febe5f545e09c1f37c9eb2a1dabf06d8eea2cfe56cff263b52b1eaa6d96ede6b864abf7b6c8e7555ade1d5ce7c7bde4fd25e09c3fb7326a1393fe96d756000e2ea691bd5d71bcb7d46b902da35ebfcd2ebbdacca27536ebb9b6452eb9d52eb92abcfb48b9afc8e78be5b1441e4b5d713c059cf3fba04ceeafeaf03a1b5679874a7b7b4a793b8373f81d9577ac717e2f52e3d2a3ce652b75f258eb92b3165ce7c70d2e3935e03a3f6e94f77701e75cceea68787ba97681d774530eded3a58b3d800cdd7dc548959df1cad74a5bd74e3de4f97a3bdedbd7d9d7dbab3853796805d0375edd791fe6cc3bf791729f91727f96cf57d9e7910c793e08c8e1efefea92bbaf4beebeb6dc0eaaad5190a09eaa1d25e395c9786575d1f89b226d9b49db63ca36f673d9c67e0cb7f544b9c58ba38dcc595f4a97dfddbf0199ea7d99a789fb893caf9ed9dcc0f3f164c87c8fb54ef09bade5712f1fdf6c63db4227951e942dac6f40e6de36df8eaf001db89c77e4f93ef2b8af3ccaf88e1ce4b2838312b0838674d95feab212c481a54b6765af07c8e3814e5dd8412e9d96b194e914398039f350a943e440e62c330e94bade607fa78b4acb07cba36ad3299d0fa5d3991d66bfd7ad02d84622efc5b3afc3edf07591edff2eb7c8eb47b874db12d5bbe325e05da54722e9e128c9e21017e3436c1dba2ab647bb9e5b0ecef9f1e0e8f7c4dffc5d655bfdc075feee6ee09cdf3f32415d8f65b136cbe51c06be7d98fcb6ccffbb7e2f9f3d8ec5a63dddbbfc7828b876a82daf9baac71fcf62cb31f51cacab4b9b63c72418b61334faf1ef5e10e7dd139933ffd904ec41f5d79d24f5399c39d396b293c1d17722ca864fb6cf7b285d4e91ef1c01b81c61ebd75dd9e4a9f27826d397b3a7030e8acd19d16f0f567598d3e27ceb11f9cc59ae701f1e95d365b3d45de5636733679a713fcbafa934af585f2c8f17459f9daada5ae7cbe38552b72399236f66e781ebfc781473d6df647a63e74665f7539c551a56baeae2f35257d8757940227dcd473367fde6689b714f596f6597c9e3e5f278853caabe54d5ee38c66557c7c8e77ac8ebb28d1139d6f5dcb1f2b9eef2fa4a797ea51d96c26be4f955c00693cd4fafb565d6f7d95e278fd7cb631d90dd53ea775c946b7dfdec1a708f9fcb7a1abb9a39ca95b8baa8be8f760d84a717788e1f6ff411fe78f79acbe3cd326cc733677bf478db2e7a67c491758bcd6980aa37de6abfd3478d29dc66dfefa5cae5db4198f8374e88b2eef984bc27fbbc23278270af96d74e02d7ae96d74e8e5e13f2f8bd3b5df1b3c075ff2e205777ff6ea083eefe3dccd16fd047e693ec5e5758aed6e80ff204765f6c582327b9be5dec212eef97ef9ee28acb5364bcfc1c47d603fab8ecd7549e3fe88acb875c7179aa262e1f96f74e03f136425e83e5828acb33a2d722aa5c79043c03e342dd7f14c8d5dd7f0ce8a0bbffb8332efbad94d79f40e212ea0fe3f2c9d8b08a67e0b7d55841bcb87c5a1e9f92475d1d558dd98c92724b1290fbac3c9e1b476e3f97dcd204e43e2f8fcfc591fb02d3eb9bccf794adab7ea73399d3d6f9b965b3fd3f8823eb45a6b5f57455677c89396dfd65e6b4f5b358acadcbb23c727634fe998c6f31b6ecb6f573a3d722aa5ef32a7806daaabaff1a90abbbff3ad04177ff0de6b0f5016aace04da6b775a83fb4f5b762c3aac6cfebbfadfadbe2c5e5db2ece8aef79ccd92639cf8e9f014a3f5507ba95c52f1bdfb1e54f57edec77a5bcf3a5fcd5e09c1f2f707df702fbbbdba6db7206a64b396de5753986baedeff2fa7bf6f90cd546785f3eb7d2f5dc07f23935bef4918bffc72e5b01f5d1fab07c08eec1b05dcc9c751259bf8e5c02e2ea62700dc695aa7f36c4f55379fcccc5ef42e6ec83be503ef74554ff99ca77e17379bc217aaf97ea3356f1db16e8f1a5de5684ae20ce3cd7915498bf6a20cc5ef2a44b99334fbad4b683417571647d2b9f3923ce332a7ffa411ebf93f22f63ceb686aac3ff28cf2f77dd5775fbe7a2ecfb8f047a28d9fc9d3509845fd52b7e91c79fe477ae60cefe2bd59648b4cf3e917a6cb2f754d97ca5d37ec4b9150f43942f89b2455887d1c9fd551e7f9347198f91ab5c0c54bb265edf5343df8a13aec835ccd9de52ed2999f74454d9a2c623ae733dafda487fc8f36b5dcfdfe07a5eb56bfe94e7d73b9f677f0139fcfcef68d822aa9cf9075c536db37fa37c32549be046e7b7d97fccd9be536db89be473e5e03dc840dd97e31c919b5d61ba459eaf03e7fc78ab4beecd2e56b7bae4dee692cbe451f57ba645c3b8e329e01dc833e29419d7a6e5f85ee476f94e0538b76c3a235efd5fbdab58df29655482734bc6b091b6bec376c06545ee72f1bb035ce7c7bb9973dcfe6e29fb9438fafd239f556daf0a70cedf7d218177ef95c7fb5c61bbcf9631bca51db6e17de2844db68722cd5c71a86c965f7b4013af0f80f8e4c7fba50eebc139d741d95a73c4b6ef75bd5fe57c7f84fa8ef4cd8cb474e9f62073e647725c24d2268e4db675e9fe50f419a55fa4954bbf875c7a3f2cbf5b0df450d7f9f111e62ca364bb2f22fb41228fbaeec3769fd4a5deef305efef81873a649d53e54edc0b9e0dce239b28f2d7b64362e3bf2a44ba66a0b3ec19c7d614fbb9e936dbdc853ccd1171691f5c0c83351db127f737d944f600ffc99ac7479be8d7cd68b7fc80bcc597779c196392adff99cdbef27d25e5e8fe3f713e980e8c3ff567e3f2fc6ea28ae015d232f3167fef192ad63a61c6b8f483fad48a738df53e3e3af6abea7da6129f6fb89bce28a7fd5667c99397d05dc7e34eafe9ecca17bfdfd67e5fdf9c09ef8fdeef2fc3979bf063cafaef3e3f3f27e2d225fdd57be0daa9dd203840d7eb355627ab2ae1a7df8fd0d887e1bc1393f2abf0765b39bc0b9650fd91fe8f510df85bc942d285f152c9e547879de28ebe2111906d55f1e51cc559c2dd3eb1079cda5434f709d1f5f67ce7cfa65709d1f555b7e1770cee5af8eeaa8fc4322bd98637c3fd2dba5b32aef5c7dfc71eb1a2a1c6f021be82f8f6a5e8326bf11cfc3b4fc1673e6376fd9719723cbf348ba3caabe225dbea2646e1f5f66ee01f27c80534ff57ee46df9de3ce737ebefbfe38ab3b7e5715bc040b6cf2303a37ae69ee3d233179c737985f67339aadf3c5ef9a5380e96c7214007f55d7e7c9739cbdb77e3d807f4e5c4e24d8d03b8f3771897ef69e2e63d57dcbccf9c79b7ec23c9576970983c0e4774023a443ed2e8f9917c26d53e9bcade3f07713d22016e9f3b75887ce1b2cd2fecf08fae76ca52ef45be74d9e497aef8fe8a39eb915f499eafd87a8c56fec65d5c72bf76d9f240709d1fbf91f73723efabfb71fa34eac39e0bce81bde74b9b8ac8be87484e9c38575c3e88651c5387f9107c47bdc38f9920ee3e94c7ac589b886447bf315b9579a3801e4a86fa5e1ec3f56e045b8de4c7d14771fc38018e9f488e5bc03beabab241502f898c7686d99147280e9fb2983c42e50df5dffdccf5dd4fc17565ab0dd81e3a5fe77fcc99fef8b9955ec676703ed7e09c83ede4fbb27f28f2ad94bb1738e77255ba5679ec7810fe239cb2c43d2ea328ce7775d726ba74f9cea5cb775297bf5dba6c0feca98b5396b8978c2e535cba7cefd2e57b5b9771aa9f53a65161c7fcb9bde3c856cfaabcf807575cfe2065ffec7c2e21d94aef1f9de18efce8fc76e427797f2638b7beb99deaf39f6a9f8fffdea5ebefc09ed4b77e757deb77709d1f7f7385ef3797ec29aef7d4fcaf3ae7f57adbff9d39f2dff12b9d7204a77836af18fcece28985e757d77b2a3c55cc119eedce70c9f905c8b1f4dcee1a979c5f809e92f7768fc8673f71c9fad925731fe7f506c3ac2bd7543d4dcdb38bd3ae8efc11951ff9c3151f7fbae2f74f3b2cdb5738e5d7a7a5bf98332dfd653f3f418d07cf02d75bb99ef9dd29ab7ebe92a5f3f6aadd3c0edce3e7a0bcacb763afe5e54c16976f643cfe4dc5cbd73767b8e4ffe1b403ad4e2a3f96f3d2b47398547d16f667abfc55c5ef3faef8fdc78e8b49739cf2ebe3f75f57fcfe6b3f3f51d9ff5c70bd95eb99375cf13b27aaf32469af9109e09e4a23aef8f55cef80f3d2742cb7c7bf59cfcbcf37673be50b990dc46fdcf1a195528e2c077977a890b72f38e7f7ff03e190be74691170ed3f792d8d39cb51c939ad49f4d9b426e0597e6ceab41b716efd9f92e192adde6b269f5f0ccef9733bc8f3e6f2bef22b97369206e6dc8b67d4357e6c29dfd91f9c5b3a4c96fdff5318f2ad56f2bd03c039fc666b79ff4070cee5dee27c3ead8d7cee2070ae184339073be5b8f54a0363c869b21f5bcc7f8a63b38aab4ac7e21c949b3ba836754162f2b4d7649e95d68e39fa9dc5390fc72992f33df25bcaf66be37f2b52e892bf8d947f0838e7f7353eae1139c72532c329c331c671a194d33efa7efd38818c9bc8f4e8bd79aa6c9902dee3e7d34078603f99d7f1ce994cebcb53a8ca7715475735c06d16d3fa6e4c9de051ce8ecce1db1199c31cbe1d11955f29df0e15ef1d9c1c22b2bd9f06e66ca77500d7f8b36ebf8d0674d35e93fe23699d5c76d8c90eff3439fe314dd986b2c30b1be0209f4b83f39cd5b7605b55e50b5d4138bb806bfcd84dea762838b7749b7e814baef2293e0c7c9b1f954ff2e1e01ce6c53de5fdc92e79bd814e3de537553933dff58d5e2cda1fcbfd7456ba38f402b2ba836b4a06e8cb55df17477efd0819074b9ddf6c280eb4f1a2e62ebdebfdddb43eccd12f9e26fb8dd3faba6ca7afcd6ac6525bef1907b8ecf4fdf8df567223727e619a9aabb7169cf3fb0b813c7eff488fe1e9ef0a4f7fe777857c7e3fded8bb4ae7aabe308039eb0b03e4313d1ae6889c3f9c06fa8dc57d7e547d1beefac220f0ec20f02c3f0e66cefac2609bff8e4b5db2d57b4398b3bea0fa907790e74399bebe900174180aaef1e330e6ac2f0cb37598b5dcb6811db3916f0d67cefac270d737955fef81e09ccbfdc4f97cda48e6ac2f8c048ca19c839d72dc7aa58d026154f60afa7cb576a4da7cb9e01cd417665ee00c5343f2b4e956d60d23d22ed2325ddc32e5fd4812b2657e9896c59ce938cb66347bacf3b988ca6765fa9eadf2c4c9e0be571d94fe2adeb399a32d24ceb92e6a5c48ae4f1451bec3b3e2c8566b19299bcd61cef49263cb9e33d2f95c42b2a5de69b9cc916ed3729ddf4ecb638e7e23716e7d73aef2d195e19b9be1d2756c9465fdb70a5cdf1a0baef3a3ea079a0ece81ec7a392a5e1733473faeba5e6fcf639df63ce70ca79c084833f1f8a7e53b79a2e12970bda7c253e50acf0b2e39a3811c4bcfb99fb8e48c062c15efbfed67e7f571c9ca77c9dcc779bda1306b39a8f81827655680734b9779d23fb23e1d4d6b80abea5750feb6722d8334d58f7c1438e7c7ed5c9c553f87b2b509cc510f12e7965ef337bbe4b8fa86d35cfdf7691399a3ffbefebd89205c6a4ccb623fff1857781a08b7f35ab388f0c99ac9ca5831ab665922a3e4a54fa24b1faa371b5ef450b4e5450f0087263e5bc7b658af96e9561e5c2cd635ac63791617ddca833d855f95fa7aa1f85d6c3d512e841e9d16f3893b633ec195abb0fe958165136badeb33c4aa8b7ce1c472eb4e269b631df95b2b590e5b66fd734a59627db6826db0ce8aacdfd542de4a4bedd8271b0a125f62d1fdce424ba6bd0264a5754501adb6ce2b84868bc4ef8d42d332a1fd2ceb5a9d588f723d5b63b5e8abd866f1b5d8b0d7587febbe592491e975d42f04895db7979b54d134d50a0dd73e4bd8e2ffc54863c488e88e395aa6c3a659c223f3a89898f83f867626c33bc2664919390259c4712d976589beb2853104bd873136847afbb67917b0fcb861d193e1d1dd5b84201ac3e70c7be598ba53bf2a6ce60c5a1ecb12dd9a7d1a085a3cb05c5e86f00cf3128466cd9a667345ddf8233afca2cb755180f8ede7cac573de23a0b928fc9c11209abf4556aeb600149e8b85f215423577608a84ca7552894ceb3db5ccaffdc1f5225099725de23af1df8ea41996c42a4b49fe691e9062eb7f2d8b89f96cae660b1179b145734300b0e84bd3459ff030286a94d4832d6a1c3f025bd687221a8159a2bed5238e9963df1215b134591b5309f19e5be7af2f3af1ab4f9ae9e3a5b5889764be86c54c135dccb40e3a61355c92c48b9736f5e18ac60bffd1336c8bd876433a60049bea08b609dab6f9bd2a21a5d87ad63b433e7c32c29d39e9016e831861c32a60089b6910667384ed355ab166ad5c5a718510c9cd7591d3b6718aede48c9b8f5d74772168861a77c7b8a5ae57d36ea1a3272696ac24a5a75a938bac66c36ceb5eb1f57c99a89af2eb0b2c89c5d6b7b9bcc9e20bd116a8f38df864f948cd2837592dd5ce82ea20d036f6ab1946bca5867836b7d72e1a3310799c3b3174c413432b2c9975f59bcc5a6392bbf995dc0693dcddafe4b698e41e7e25b7d3251b317ebc3c906413ed84517f4db1de5d6b0566a368596fb0ded775dac44f2e3d134e2ebd44724967baae246f1a61c9641b5ddcf18bbd754abaa3ae171e75ed31c17d7c0aee80595b5fbfd6d651676d221c8b032ce260cb20b9da753fa6a95d0b6c3d63c291c8d7e420a5fdd302a950a70b534dee03987176d24548c7e023c4d69ecb492e4206e822a41316210d7f8d8f28f2f24dd49891f81888c647c3f2b1f8e8ac4b7a3c810c4a244da7e329af8b4e308fe8c189081e880beeaab320118c607b3ba2ccbd5b0f1f17ee9f70a36c28c33a1ce2eb80c579372c1fcff0998f77d7458d308435a451b3d8ba660f704c1377cb45af78a6d8e689f7987324790211f6a48a98b962e3a70d4287f851c807839ab83300619bdc098046239edcc02f249b182ecc854e0bccac7a60a5f808bfa5784f9d645e45e563eb7e2bfebd74c2799d7d148bed39f9cffa8911de1617de1bd33c53a3f9aaf2344f9af7c18067f905de17939ced57723f8de42c91211d489a45243a6e3b436c5557c6e65bf9e71e3299a8ef568944c1355203770bade36aa185ea5c6e78bc377eb692c334f50a91af4e63898f3ed387828fcaa789ec264f64379971b21b9d36de331d7d66972fbe6e161b2c83ec8fe534a33539cd1bba6c2c4e4e938e25d902bf4976804e324fb26334b69acd6d95bbf6b416f58498efe4e3dfd9569735884265af46cd1aecee412e6fb570a5b0e5cd637c23c94dc254d75906bc511a4e91f54c8df58d3269e47e3203eec2d3d7ddefccec1f7d72182f92c3c404920365a8b00430506749bc1f95fb0cc58cfef1a85fc8165892578864b8a7b8cc29d9b15b2e1e2d677b89d13adb2b22c6de5ae0f63648a70def9ee21e4a0d56833be382076382b7f729780896c627fa4de3437592796ec36721f9ad6165606aefe057ed61588e3a5993a3fe1df196a30ec7844fd108bf27cd9bf0115852284cc446e258f5484cf0545d1a1b2cbec887a4d2adff7c3c9c37238b45ea4f178561343748b7d27ab9f5172fb04782e7abac276c2f242f7a8ec28c629a5fa3c8c4e26dba26de7ef6186f5998f0191ae1339b78139e8dc5dd4c5ddcf1aa222f3778b564ad2cdb9cb961baf07c48172e801bc4d04aa988b95a11afe96c6feb8bfb5a47de124c17e54085b8972ef655ae1179ad9738cdc1f49fa5d3bf35d07f01d0d0cb1773b17c6b474dbe15f1986fe5e984f38acf6c86547cb8cfbaf78a4f3e866dae0e5b5f9146368b9aeb06f1fc22610065f575e5d2141590a3357a6589b6f87ad6981532de5ae00e93b5e2ef6815857f3bea7ee3a7e2c57d88dd152ff5a3af78f1995b1962ed9620b4c72a580558a6ba4093a946bc64aa637492795ad8094b0b0b934a0b63b1fc75912ef36eea2d7f1d87092fd208efd1cc9bf0f15856b4589315318f59d1763ae1ed99bd33aa9f6efa0918929d35480ef188647b0cc9d2142099a813ce9fdf25112471061826614876d520b9c723921d30e1cb34c2ab9b7b133e1943b2dc27922998e0dd7c0a2ec42c64f71458c8549d709e1bf2a9f5beaa98d3b0585ca989c5911e63713a26bc5823fc058fc2676019c92a9f19c94c4c70894fc1b3b0582cf51b8b3b62a0cb34a07985cc0be8d93ae1dc5857fb4c327330c16b7c0a9e8b815eeb17f43c8de42c31eec217bd68bc8a245e4d5e2864f3eab4ff5ebc72a61929140343f9ace1ea62aa741c2116efe6cf974872b53c876d2592fe16a1347fdc862f725a7d45974f5bcf085473acb23b1f4bbeeb74f9a4c7e4bb4067b262c0ada6514d76aa901084d956e8cc560c0c162410f9a9d4b3bf982cc7a5adb7ee1749cefca7bf58619e6b5b22121a6f4dc1fb23c44aefbc1364bae05d29c8f3f0158bce6cccc82b8591071d4eccd077c20c7dbdc6d03bb4f466e80b75c2b9a15769e23fbbaf804e181d6ecd2b71cd176158aa3558967bc4528409df5323fc1e8fc21763c26b34c27ff6287c0926bc56237c652b6fc277c684d769849fe151f8524cf8068df039adbd09df0513be5123bca547e1bb62c23769843fe351f8329d705e98f319f431dd83dc056985f52fdbfacfe7a72a97fb7972d87b85b85e2cd25ca5a7eec0e5981e5b747a74067a94327b065eb11c424f5e87dd301df6d2e9d001e8b0d8fa62a9c89acb1c5311bc7c7d772c9af7d644f3076dbd45f30a9d705ea9e68b44f8f1ca5ba9119c25fc7078cd3478afbc58678bd47ae6edabe3a52de6f952441962d10d3a5db142bd18b3a5fd35b6f4403b6fb6b40a4b260724624b7152400926f8405dfae38d9c39168b127129dd911fa58b190eb5721c313a16c5ef7a1b752ac5743a48a71377474d78feaf072dcab0f83c58139f376ce32d3e5763413cc4677caec1041faa63c7fbfbe78ad85b23872ad265be5e276272b5acd5a9d8f4a2c95a4c93c3b0526e9348836badaf55a036e65d8f724c8fc3757a7462fad2b6d64719b707a6c111983d63e5ac1f2dd6615a1ca9d3a215d0425988374bacd07d8f3727f8221cbe7a9f2ab19479b426652e6fef2d65aec7d43ec6afda5598dac76ad47ec7a3dad598f0e334c2afe9e04df89e98e91caf331dee86a532ff12972bca2a56061c4c4ac5952d7112bc1783abc1109ca04150ed11412d86e0449f19769d4e30b7a29312111ca796b841279867f827d7df700df0f2057abd0ff06ec4b09faac1ce4777bc60df84a5c6d3fca6c6cd98e4d3fd4ade82493ec3afe4bd30c967fa95bc3716896769227165276f91b80f26fc6c8df05b3c0adf174b98e7e8f2a6c18cbb12463bcc55a547e557c55695a74e563536cafebf5287031677aa2a975e395ed2f97e989ee7eaf4b4d77ce3d569bbf25a23de2965f3ad62dccb57f7c7d09fa741ff8d47f40760c2cfd7089fd9d99bf003315e17e878f568205e79e3ad065ccdf158893c08d3e6429d36fc341a6f5ebe733086f4220dd2bf3d223d040bc4c5ba40f09ab08d6fbc856c9e68d315cbf5ea368a62dc3bc643310d2ed169c073b6686b33d93e9ec330a4976a90f20de6bc203d1ccb912ff39b231f81a97db92ed3f4a8f69198da57f855fb289d645eebb89221b50ebe1cbdf75ac7d1d877aec6be734d52df39062375ad5f52c762117c9d26822fe8ea2d828fc3845faf11fe8e47e1c763c26fd0081fd4cd9bf01330e1376a84efe351f88998f09b34c21ff128fc244cf8cd1ae1bf7b147e3226fc168df096ddbd093f0533f25bfd1af9a998dab769d4aef3a8f66998dab7fb55fb748de42c31db2fc82509dcd32bbd2d49c0b7004facd79caf4fab5b8ea0a1ef633de167e8e28597d077e954f250949f8959d3dd1a6b9aead19acec284dfa3117e8f47e16763c2efd508ffc2a3f07330e1f7698457f7f026fc5c2c32eff71999e761821f609abae048619d55228df1ea7c99e8e55f2ffe5a2f96c32e133dd6c5c2f6a31d4e6a660c5fdb375d5a6f8db4e90acbda33adab5eb43e1fd3fa419dd6dcbb823b9444ebcd7653d26e86e8262ea7b3a1b2d63dd4935e176036f090c606ba78b4810bb1403fecd3062ed2e5b3e9acd146328b44bf3a5f8b7bb5b094ca148f643e92709efc286b6824d3bfae58fe7db12eba79ddfa3186d4ad1fb7feb7e62a7baa5b5f82d9ec131a9b3dc5a3cd5e8a097f5223fc0e8fc22fc3083d85117a9a25d3fab81c4b78cfe8721b7be24b8dc86dd62539ea7985ee8bdcf5e359a65be168871d62840fc5855fa913ceb57e4e132787f4f4162757e984f3dae0f3cc676df06a9d64cef0059fd9df3598e017b1e85d56dfa36577beece6b1f8ba168b81973431f086c718b80e13feb24678875ede845f8f25b957b024f76a5249ee06dd77b871bc964864c7198fb91113fcba4fc1376156f4864ff3bc59279847d19b2c762e0f17e0652ecf2d98b1bca53196b1bdbd19cbad585ef0b6dfbce0364ced77346a2ff5a8f6ed98f07735c2f7f128fc0e2c01bd8725a0f7934a407762e6f8812e5353de0edc5d8e0f02af11be3c6562befa661fde0e77615a7ca8d3a273bd16dcdfa192d98308b60f73f23adc8de9f0914e07e5799267fd2f11b556fece66eb77f21adc8369f0b14e8396202ef86a32bc5ee9e56bf762e6fb89c67c67f6f166bef761e6fb2966be9f2565bef76399dee79a4caf89c74cef018cd0171a424dfb7a23f42026fc4b8df0411e853f8409ff4a17b71e853f8cc5edd758dc7e9354dc3e822587ffc5cb9a72539c353d8a69f16dfcac29278559d363980edfc5cb9af25398353d8e69f07d4359d3cee27bde56be780233df1f34e6dba59f37f37d1233df1f31f3fd2929f37d0a43c677b1f653d17b1aa3f38b86ce051ee93c83d1f915a3f35b52749ec502f1bb2610bf7b0cc47318fa3f7ca27f1ed3fa4f8dd60bfa7bd3fa050cfd5f18fabf9342ff2216887f3481f8de63205ec284ffab11de21dd9bf09731e1ff6984e77b14fe8a4e38c76f6fc1abc1cff7e5f58eff55cc38d322718ab5bc14176baf615a34d169112dd6725358acbd8ee9d054a7832ad646a7b0587b03d3a0994e83562c5aac4d132313551ebd5bdec40cb87924d680f9ca9f5e0cf82dcc805b6006dc3229037e1b0b442b4d20367b0cc43b98f0d61ae16f7814fe2e16dd6d22feca85f730addb6ab49eb9ad37addfd709e7dd23ed223ebb473ec0d4de46a376b547b53fc460b7d7a52deeb11ddf7fadc87ab45a7898ad11f94e8d70efb4974c281523830b98bdc197bd865eb175b554acaeb7569cab7cb398ad92e3763962dc4eadbfb785d97bbda48b71737b67d7743166532a57655c27aed48aa7ca8064fdc860b91ce18463895edd503fc222a88326820ef018411f63c23b6a845fe251f8275866d409cb8c3a2795197d8a05a28b8ed0406f81f80c13de5523bcd4a3f0cf75c27962ed96486614a787f90b9d603ee1b47b2282f7c3057f89e1e8a133188f38bec272b99e7e73b9af31c9bdfc4afe06cbe27afb2c4ffea7119c35805fe45311831f69f7b3747cfc31f63e3a52da31f6be113ec6ce5705a6d0121b5dff16339e7e7e8de73bcc78fafb349eefb1649aae49a67f0ff2964c7fc0b41ea02bd5f93cd1c9a2ad50269ceb75d332d245899feed183e6474c8f6d757a58d73ccaff09933fd067ecfc8cc5ce204decd40df6163bbf605a0fc66287a791b5b296a3e2a3ac7e59d464fd9b7ec5023944d74418e22d90bf61811caa0b244f816a14bebc7ec27bd4d9cc4bb07ec7be9c813558ededb3b3eaf7d6ccaa5f3b78be95204a99d7e9117f601a0cd369d05dabc11cf1579d5804c8aeb82637fbe54f4c97e13a5d7a27a84bece68b5e74fa4ba71337bc111ac33b63a837c3fb1b0bf0489f79c23f98e0513e05ff8b09cef429f83f8c739686f31d1e39473bdc5cc2b335c2f7c9f0263ca213ce439ae313499a4e30cf7d727dd6e79be804f3a6541ed694ca4faa29d514c33e5a83bd68b837eccdb040146081189354209a638118ab09c4291e03d102133e4e23fc8111de84b7c40c73bc2e3be52b812d6470a5b75251c7561979061b260abcf5f2b7d3973a5d9cd9c50faf29578b3b2acbad15bed66a6d113599d5ee17e1d332ab5d3503f51dde1f525ebf12899d9ddbebcc947a747c6b85b1d84ec7822f940f97e4b76b99d102363ab17493d0d0decbcfeeff89ae83d390845ceb69affee7ad318399a031980e1e0da60d96a4b6c792d4c4a492545b2c10933481c8f7188876584cefa08b69be6e86be976f99ec1fe4fefbbc75612ffa182f4e33e2de1d269c35ed9ec1a85d3b534095b00cd50be8bc5727ecaa4e938a56090dab401fa22dbb4ab64ebdd8d73658d44cd644cd3723bd454d7b4cf8148df0a5a3bc09ef80092fd4083fc1a3f08e98f0a91ae15333bd09ef84099fa611ce3c0aefac13ce47dfa647740edd074cf2e2d0dd05d37c8646f317b2bd69de154bc8337509990fa545bbfb5556ecc5f4bb618199a509cc488f81e98e0566479f95c41e3ac17c55d6d989088eb337594f4ce3393afc8319ab2ff7ea4459cd6b10aafdaf4a4b5e7ed7317b3dad74d973a372bb35a207d11e7bf102a017166d7335d1f681c768eb8d9588f3b012717e5225621f2c952ed0a6d20b3c4dbbe8ab13ce57f2df29111349c705f7d309e6ee8f0b13111c67e5fafe589c2ed2c4e9f21c6f719a8e092fd208bfc1a3f00198f0c5ba222ed79bf06db124b9c46726321033bf9db5e6a7d13a8ef90dc2902cd520f9de2392c118925d74b954a6b69088976fe592e55b4330cd77d5696eef3be47fc5dba158642cd34446973c6f919181095fae113ec7a3f06198f0dd74b5a47c6fc28763c277d708bfc7a3e62330e12b74583c6a3e1213be5217a105de848fc24a8e629f2547262678954fc1593ac13c842511fffb0f65eb848b9d6b223e87ee72b0582cd39549a3bdc5622e267cb546f8351e4d240f13be46237cad47e1f998f0b51ae1bf7b143e1a135eae115e3dc69bf0029d70be82c81e8918f89db8e0315851bd2e0545f5580c4985ae993bc11b927198f04a9df0edbd091f8f095faf117e8747e1db61c2ab34c2074df4267c0226bc5a277c9237e1db63c2f7d4083fc3a3f0891ae15962d377bec14950abe414c915bfbdaf905313e11ea64e06a2e5a6f516a98df051d9ae31218bf77dcc0764922e5af8695d84bbfa38553a67d82bc7d49dfa55614cd434c3a36607ac72b94157b9e4dd05dc0dd97667acb0fe52cba8977bacd44ec6bebb51f75d6df61447fa144cfa269d747ec3aeec6725b1546121967236eb8a9e29de52ce544cf8168df0a2426fc2a76194f6f2d94a9c8e09dedba7e019188e7d3438c67ac4311313beafae6aef51f82c4cf87e1ae14da77a13be23267c7f5dbbc1a3f0d958641ea04b4b752cb1c540fd3950dbde1c2b1c2ed966bb53cfc1a2e8405d4795c7289a8b45d141ba28e21de0b11eed5e02334ff73dded97970fd0d5767e72191643a3be763e13a54172e5e4a64790ac7024cfe613af9f6aa39b186e7e58b3b615f3c5cf7c56eda989a2b0c522d5d1cbde3cd2017629a1ca1d3844be0b52caf19f622acfe72a4a6feb2e3dc035b9cd3e7d9342ff597222c1847e982c13b0ef4f597f532e57b09dc62ecdb47fb2ce696e8eacbbc173cd0fa72a1e8efac49a2be7c4c84bb7d3ac39f89d4968f456acbf1be8ed59677d6711bc4b9ad08909bfd9c9d3a17894d2acaad2bf3c5e8bc3dd65f9b04d3e322dc0fddc954fde8c91e2fc80e8c0979b2fa61d497629d5d27f8edecda05937ca25fc9bb62924ff22b7919d6af78720afa15976339ce293e739cdd301ea7fae5b13b26f934bf925760924ff72b7925168767a4200e8b31b5cff4abf62a9d64aec9598958479c51d6124ce5b3fdaa5c8a493ec7afe4322c0ecf4d411caec6d43ecfafda6b30c9e7fb95bc16937c815fc9e598e40bfd4ade03b3e88b7c5af43a2c23bdd867465aa113cc7bdd2f89f8ef75afd409e775da4b13d13a1d17bc5e57711a6c9d46f8e66cc14ffad3b5c397c9ea51ea26005ea6a3a6ad4a5d2eaa52d90c9f00982a8db14a56952eea7977ec1589447d1cefad6a2cf15ee937f1ee89a97c954f956bb0c47bb5cfc45b8b09bec6a7e03a0cc5b53e516cc034becea7c61b31c1d7fb14bc092b976f4841b9bc19137e630a846fd16592437826b9873199646a33c89b1289eb3c9cd85ebae8e0c5d0cd89087e1417bc379669dde237d3da07937cab5fc9fb62926ff32b793f2caddeee33adee8fa97c875f950fc032c43b7d668807622adfe557e58330ca77fba47c30a6f23d7e553e04937caf5fc9876292eff32bf9304cf2fd7e251f8ed9dc033e6dee084ce507fdaa7c2466730ff9b4b9a330c10ffb147c34c6e211bf2c8ec1a2ef519fd1772c26f8319f828fc36a238fa7a036723c06fa09bfa04fd049e6cf3f99088f38b3894fd4091e609d3e9588603e3901117c1266cd4ffbb4e69331c1cff8147c0a167bcffa8dbd53b1d87bce67ec9d86c5def33e63ef740cf20b3e219f81097ed1a7e033b1d87bc96fec9d85c5decb3e63ef6c2cf65ef1197be760905ff509f95c4cf06b3e059f87c5deeb7e63ef7c9d64de427cc36743ea024ce537fdaa7c21d6447bcb6713ed222cfadef6197d176382dff129f8122c89bceb33895c8ac5de7b7e63ef328cc5fb3e595c8e09fec0a7e02b30c11ffa147c2506f923bf90afc254fed8a7ca5763823ff129f81aac46fba9cf1aedb598c69ff9d4f83a4ce3cf7d6a7c3da6f1173e35be01d3f84b9f1adf8809fecaa7e09b30145ffb447133a6f1373e35be056b40fd2f050da85b311cdffac4711b86e33b9f386ec7b2b8effd66717760a07f4801e83b31b57ff4abf65d98da3fa540edbb31b57ff6abf63d98e45ffc4abe1703f26b0a80dc87a9fd9b5fb5efc724ffee57f2035822ffc367227f1013fca74fc10f6182fff229f8614cf0df3e053f8209fec7a7e04731c1fffa14fc189643ffe733877e1c336496e6d3909fc02447fc4a7e12839196e60fc6533ac17c539126697caf0fa7e06cee019cce1cbf62e70a0cc7bff634168ca63e83f10c46be995ff2cfea24734d9aa7f9f7157a0e13de2205c29fc784b74c81f01730e0adfc027f112b1e5ba7f92f1e5fc2d46ee357ed97b17cb06d22a61d271f7c054b33ed7ca69957758239bb6d12111cc76fef35ccf0daa7c0f05ec73877f0c9f90d4c70479f82dfc40cba530a0cfa2dcca03bfb35e8b7311e5d7cf27807338fae29308f7731adbbf9d4fa3d2c16bba72016dfc762b187df58fc4027997ba3f64c84473a2ef8438c47af14f0f808cb9a7afbcc9a3ec670f4f189e3130c47df14e0f814c3d1cf278ecf30adfba740ebcf31e1e92910fe05966206f84d315f6239c8b63e7390af309507fa55f96b2c471d94821cf51b4cf8e01408ff1fc664885f26df629287fa95fc1d2639c3afe4ef31c9c3fc4afe01933cdcafe41fb1543e2205a9fc274ced917ed5fe19cb5247f9cc527fc17864a680c7af98f0ac1408ff0d839ded17f6ef98da392950fb0f4c786e0a84ff8931c9f3cbe42f4c72be5fc97f634046a700c83f98da057ed5fe17933cc6afe4ff3492b378a11459c71a634e809269afe8cebf96fa69536375d958c4c54c4c9b1a97c6a74d65317cda546af4c5264df15ed79878e7b1333e919c986b8f088ee804f3d3edd26297b5503f311f6886db559aee033ca14d4841426b8209df3e05c29bea84f3b436d16f5a6ba693cc9f9f94486cc6f18d6bae13cc97a7db2111c17cd21822b8052678b24fc12d31c853fc426ea593cc97a32c4c44e538cb51b6c6549eea57e53658629c96a2c4d856f701beabe9f44498c4d9d5b41dc664865f26dbe824a75ba7331351f9515c707b9d60de329de5b309db0113bca34fc11d75820758a7b313111cc7adaf13167b73fcc65e678cc55c9f2cba602ce6f964d115133cdfa7e06e18e4057e2177c720efe413720fac785d9882e2b527c663915f1ebd301e453e79f4c6f2a2c53ef3a23e3ac17cf86a89cfe1abbe18e49dfd42ee87415eea13727f8cc52e3e59a46375e85d7dd6a107608297f914bc2d561f589ea2fac0402c81ef9682043e0813be7b0a840fc60c7b855fc31e8255ce57faac9c0fc5ead0c53eebd01998e0553e050fc32097f8853c1cab9c97faac9c8fc0542ef3abf2482c31ae4e51621c8555ced7f8ac9c6762b0d7fa849d85c12ef70b3b1b93bc875fc93998e4757e25e762f95d450af2bb3c4ced4abf6ae7eb24f3d1def58958473a2e7834c6a32a053c0a30e1d529103e0683bda75fd86331b56b52a0f6384ced5abf6a8fc76ca4cea78d6c87f1d890021e13301e1bfdf2d81e537b530ad49e8809df9c02e193b06afb9634cd2ac353c5e94256c816b1a96c76fd9ef3f318df1c6c93e8c05e271760cd14eb11cfb2eecfb7eef02eee1a7145dffdad5bf2873f0d3beaf9404115b357535fefa90db10316cabd74a13cac3e948b59a9e8c0b73bf32bc5dfb344673e0f0d5fb5dd1ed09855ffe434b1163c7fc2b991748de4b148dc2db5246e10e1e2729df4a212f8f3def4c0241531bee0f01a71d7c9142e99ebe6bdc492e379f70b8cf4de983dc12fda61cab3deb16955b16aebf70c312c522c435b24964f5e1fa36df45dfc7aaaec690a16ca7d74a19ce80a25646e8773ba88b14a1146b796ce188277e2a515f8969790156221db5717b24909c5df64b1e7014ff3f622ccfe632e7ac74bd8a66261db4f17b60257d8e68ad8592b43c6cf36375a48a66121d95f17926302cecfa2eff08dc3d5268da59695ab0dec6b3d58396487878297251b185fd81be67a7c403a7579db748cfa013aea93134a1b73048d5a2372b51958f80ed4856f0ea155f1ab7b8acff050d9ee03e5e2d3e56c2f910ef5394932b13a130bf541c9c7ea34a1bdad2fafe93466accec2c277b02e7c63e3945593adbf6a446ab6c35a22d27b4ddcd0e1a93c2acd4b6876c44273882e348509c5d62c51033527c66663613c5417c6ede3a6433ced2c14a98bbb99d4491aaa7ec8af96c8341b9b53271fae3958b80e4ba4d6e4fc2e8cbfc5628f931aeb595eff5d13277f70ca485dc8e662213b5c17b2f1482b6ab1d0bb42d6946c4729d5865a2263b034466b9a16d33c2c4447e84294eb21d79821ad2c993cc34b08e663213832b110d85fe4ecfc87202acb4b08166021384a178232e25a5e9dd8abac4a6cf65d2ccada6299b3ac12214b4dbb2599127c278cd3d13a4e8b1bad361c9f907f0e0b310ec760f9abb7be1c553ef08db94a8420b8057bb4b7c229cfbe069f9c2c5c43bd846c1116b26375215be6396433a47d477584365aeb396cdefab992ab0915614c8ed33119eccadfdc795a346ecb84b6bca59b9ab6ea624ccfe313c987f59c92cb87a12c2f21588285e0045d08b6639853b02eee9df4eb44f8f83655ab658f106e494531cf7a09d3ce58984ed485695e9229ca4fcf2f555eb2140bf949582f90174d9cf1592a3634ac964fcd93214d550d67172c242727d2168aed854cacb70e2fd7e39567c98671572c8ca7e8c2b88b673b5da4b1536f397df2e319c994f1cb301ea7ea78cc6e30ce53d1f34cdd27bd1c0bf369ba304f27acdfa9746defaa69d77b635b64c9b7ba76c3427aba2ea4137c943470e762ce64a66871d6883a7d8955f6c7f680241faaddb1509da10bd5718d563f77f6562f1212aac4f35efaab616bafb17bac5760e4cfc4fafebc9775bc7702de9b215a89f6fed7a94d1d2bb1d09c95bad0a8964015ab759581fa94b644a62e9e8be6790a4d31169ab375a19982a6756eb5abac87548e6e6f9b1cbf97482f29d565d52a2c84e7e84238cb6308771679d57a24b53446784bb0f09eab0bef42c27cae3689722a15044a3102e7a5aafcb2eb6b9341e9451faa322c54e7eb4235c3a31d4f13ad5add384a63d8f06a2cac1760a3615e6370ba7822d61addad87c4e57a09df1a2c7c177a0b9f3b2e278bb1129e021bea85a7ed035c8b85ef222c7cc99791d1bbdcbf287e9b2f556d81722c7c17ebc23788c51fff2bb2085368b907a6e525f147d2bdc4c2a2a46281d2f6d661a1be5417ea5168dab26bc165ae16cbea7aef914259bf8cd7f7e745ef0a4cefcb747a8f630db5a9798d789e1859adb0f2a91a2b6c95620bfad83655bc1848be9e5c8985e772ac66193f8df091d505a2b655ab296f13f1dce1b594d5290ce17a2c8457603d0289f47c25e207905c6a4a3ea4555848afd48574660371a9f739b26d5485bb313d1faab1d05ea50bedd206e395b6778bbadf6b4f8cc6d5981f48a263f08b5843232794e5440d16ae6bb07652226d6f3b6453458f7b9db0bc12995b25f276a24fa56664bf1623706d623df7d1af7aebb9873d53f89dd484b10e0be37589592fee7fe1d57af1b02563bd1bb0705d9f58d9a38fbb45d6e3ab983dfe5762480c6ec4427a033672ab4f43ca737a757d5b6995b64735f521d88485e046ace59e485c25361f21b9b84abeecdc8c85f526cc733fb1d8d27bba076b895bb0b0dd9c4c8dd64b8a0bcaa37f2f2c84b724326f26b69725313fe4e4ea33c9dbe8de58286f4dcc17192f1392f145d649f3129a7db0d0dc964829ee0e41a188b3d8388a3e97d8753cc4c99476fb6261bc1d1b6fd6e72ab1cbe1c1bea4d8bbb1e54391f57775dc1a5dac94e4e2753f2ccc77e8c2bc9cd1f5e3ab9eb6787e97904ba2b576f58e172afb6354ee4cc47b5b7dd14bee140d196607a9c9950ec04276972e64bb36727c7b89e7647bc90fc488dc9d481d172b8d12e95f09ba443a080be93d897827168a58b563b00ef429db5650c0f21b089f2ee7e66f7909c1c15808ee4d7cfe12ffa6f7f94b76f8b0eba98aa143b0f0dd87cdadf0560205ef7b792816a2fb317ff586c7fe124967898c207a1f654c3e660fc3383ca0e330dc030715a7eb596a3d2e0fc7347e50a7f19098faabbb7f92ceebfa084cd387749a8e41d9c65aba53f36a513a45e73750a49723b1b03c9c48db08ebed6f288f0bbaa7ff282c948f606386f143b948f81d976b526ca1e8b1a88913aae8bbf3c5c895dd368eef05d7505dbb85f52f12e1cbad4c13d6628f2a5589b7797d3f2bc3ba15c9aeaf5d65d6d79a321d35ace875ae49a595f639efa2fafa115f623bbe8447d3ec8de8c4cfd0088f8c3a59a98cac7671b5dfac10924b00894c5157b37d86f9b2e699561ab67b9ed542e60d85425753cc04754518ba86c3a41636e7fe8425228df1f85b6559540b192225cb223d8c93deda42fa188fd57e3256d3b27871111991a43535acc5e3fc6b4df436d43d862c4c273add6d016a7e40842f5ab9427c6681c85cf149bc0d7e19968dba2f8f1202549baa41718b4171a413d753989b3d1051c3ec61c6772c992d9aa565f3187982125b4feb64aa683b555be06c4f5f959f61006b4381906f94a5103e4989b08375a28af699c20d850b2816cd1bee42389fad0b05b00e9da2c09ea204d64524d5152c9b45bd2ec30caeba4b14dcd394e03a69c071817cd8963b9b6c10574b43016d258b427b863a792a688b2d99a572140a7a818501d829b95160cf52274f677e36ddfa6def4b535aeffe6727d330803ba26b14dc7394e0ba315e81af4db81c0d03bc534029fa3c25bc362099ce7774fb860153c6e028a6172831b50298a25ef06140744aff28a21729113517886a43954795768bc27989124e0feb647e7d2349f544d93e7f0b45a6bf81f119423c9b5f20fb65c200f00190005f0e2a01ce1559fb9a44c26400a23e395144af50226a0910713579ff651800bdd32b0ae8556a1be289b090459da2c2516b3f0224b3d782b221356b310c80aee81305f43a2520be4986aaa54f639b45a837d4572db97b7aa9c89d160a0b2b15f656617d300c10f98f82f80625c4be8c39e0f16e433e93bfac7e33c9d290d7dfbb808ec4372951b693799ab2b72db252b158f4498401d525206f7b2ba806366f2f42bf16d5660c53e57569c728b8b7a91bd8101c9cd23c5934b9a73138793b0cf0de019d87ef50c26b0b4ad4e84c5c7b3e7518403d006a67ef527718ce15c96f9d6b11243e51a6467c290cc0f8d21f0ad87b94c05a8b90d83ee1eb64dec547a7c300e995115148ef07dbabea74672c0d59a6ff0cc8f43fa01ff4e0f5ada9e2d361ae8d7dd2220aed436a6b9b26866a37888f47971f8d2edb566b5574cbadef8501dcd4f651701f5182db0624d3b00ead717f2005eb63fa815cdbe7a24a880977636929489e9f50f7c22eb4a015b2c4f76d0803c02f3a70802d9ab984bb9ddd93779bf2461d77f06acfec867fb5b85a27cb5f87c317f783324ef34fa1c35646d29d40190de67319093b1b64781ef7cc48d2eb2823a1aa7986cf5e9d0c0fae64199eb2c08c84eb32199e0af08ca4f2930c4ffd10199e2ab0190939456578f204caf0dcfcd7e98cbb3264c40c1c66c46d336768c73932b43dd719c8b86d469c61ef0c649820a381aeb68ca4c6f832d0565c0632e4959190674dd48359ef799ccd3d983ffbffdcb9389b3b177fce214c9214ec3ac81741f845e5b1d1e268fb94f3f2c1b618fe98eb9b7d62beb9502e2a652f3ea5ea16baafb772d43e5a2412a0646a20d381bfca97d4553827b6f80bd8e558c120c3b90d15cebd01ceaf4cc2991b4a9cc7039c5f9b84332f9438ef0138bf3109677e28717e0570fecf249ca34389f31f80f35b9370168412e760309cf15d1015a31cb97859a01523327c735914dff74158e31ad41ea1fa2bd838cb1ec970b6a5c2d90524ee1f4cc2393694389b029c3f9a8473742871de0212fb4f26e1cc0f25ce3301ce9f4dc2392694383f06387f3109674128713e0f70fe6a12ce9c50e22c02387f3309675e28711e0670fe6e12cedc50e2ac0438ffa0f6b58cd7a87426f4d174283b52a14c030dca3f29517695284be450857b95365b757b05b01c3a90cda8402e0295f7bf4c01991d42909300c8bf2941f66e2071ebd779e5d57732a803a9a07e0aa0fe632254c2244f06750f00f55f13a112267f32a8ab00d4ff4c844ad86d4c06f52300953531106a6e08a1be0aa04628a14207217b63f0e83625f6d27a01f4c99361ec0730a65162ec0b3026eaf1c59faf11cf866fb063338b826d4209b63f00ebc50532cc708700b84d29e136d40485e248ab5164de4aeb4006d08c12657b89b220f8114db2f67b21b0c3e641c01b1b3cbc742a783300bc1694f0bab3f86d766722261d1f224bc62d41326e6912cc312184d90ac06c65124cc2ce0f32987f8064deda2498841dc66430ff0430db980493b0094906f33700b3ad4930093b39c860fe0e60b633092661371c19cc1f01cc6d4c8219c616ce2f00667b93608e0d21cc76a06ad4c12498e34208b32b80d9b171bb31a21dc3a4031743a9505600949d28510e97282bac872ac451cd8a85730e57c8a9798bd854369b4d11f33ecbe435f8dc644bab725ae49da990f701ce0b9d2991b716c8d78a89a6f6c4d7354cb3647a08fa2ddb82a2a80b25b25e31560a77aac29d68c2d705371a5861d7c6cc439d9bad1126e83ba950660294dd2851f67159a73dde638f0acdb272ccadcb37695b80b53b25d6a13189be58089b2ebb88cbac82a84ce4a31bc518d006166f3331521b26ab525d0fea013d286147e7aee76e45031a59005fcf2072d3c4aaf761b4c481a0acef158425e6b231c15b622f2a7c69c0127b53e2b39716e1db365709067cb9a29845d64250b7ec01ecad0f25b07e9a8a50a2fb879226e547a9d0ee056cb16fe3e68a616fa75f01acb45f9075cc724b89e846acf1aaee84754cb2aafb7050c7ec4f6da193c5926655722127be212cf7325acfecc5ddd4f256f6a261e1cb479b020b4da744a956b7cbb1fe57ca8f178b5650404e8564559fd500e18020108ed9ea107e03106e4b89b0338bba0faae364a102ef620bb70fe65700e2404a88de57e222f43122c37920a8060d320927e93c4a329ce7019c834dc2493acb970ce7e300e7109370923a1492e1fc0ee01c6a124ed2e550c870b60415f40c9370922e384186330be01cd698a33ecee133422f38b22edfcf40421f6e0acadc50a2dc0e58e58820ba7c7364b53dd02e5fb2443d8b45f18d3467564f183d8b8e02897a541028e1b4be396c3e9b2197fe5e6dbdb43988462419caab815566d27bbc410797156c9d403785d92ba2dba2a65bc7324b04e12005d9a84e3b00332b88418a3ab141416dbd43965a295d1d7523e2a4e53819da6700daec20264463b9a70a29e964fdda0811c60c5086e704e1e09af822a56430c9968ada01d864ae4930095dafc9604e0230f34c824938918a0ce6580033df24988453fcc860660198a34d824938f9940ce60400b3c02498615cab701c8039c62498844e066430870198634d8249e8084306b33f8039ce249884957632989900e6789360123624c9600e0730b7a38499ce621b92dea64d1196ef64d3a6ae015d73131a7306a57b2488301725eb321e056c757b93601296ef64300b00cc89410c5ff04ee38dc0273310972d327c7d01be4994f87a027cb1737cb8b0e8f27961f681fb1b00dd210837420e74eb7223bc09209c1c04c282ad0ee12a80708ad9d521c25e4db2ead075a03a5418cc98f9b8e0c7ccc9acf342609d5383f2138e0ef4c2b14af2215eb2a1b31b01c4699410b358228b4738a7a3e8a756cd9022039b759e47057f0bc800a69b33e5348cabc32d03763c23a81aa87373fb68edb34ccc075a1744c64056a55f0f80ce0c660e6f7ef0851359befa39c0372b08a7d7c4c7d2c3d8cbd901e4943b9a84736c2871fe05ac73b6493849f79a26c37925c039c7249ca4eb6992e13c09e09c6b12ce31a1c4f91ec039cf249ca43ba193e17c02e09c6f12ce9c50e29c0f702e3009675e2871ee0f70ee6412cedc50e2dc1de05c1884d3b66ed5c245d643ab997be58e80bc40c8660cfd01aaf48ba85becbcdb6381f59b0bc1f7055a2854db605d276cb1ef4105741eb0d5224aa06a4796bce0dbeb03a9e04d04f01653c2d36d54a7efe774f66f12ba20f6a59a50d0154c2858622254c29e4e32a85d00d49d4d844ae8c64d06b52380bad444a884952732a89780127e1713a112ba2892413d1b40ddd544a884ee5f64504f035097990895b0824f06f54400753925d43c163bbae99cf25a68fdaeb4fef1bfed80f026c06a31b7b84c549df920dd26f1897556346c6465e2a922165d9d9b3412c6278225a915b8593412763367618130ee33b81fb0e7dd83ec0b702fd0bbf5f9323f01d0ae08c613aa11f662dd8f0adf4a90c8579abbb400e19405b271fc26c0328b1bd3cbde997f92aea2489683ee0bec74954930c3b853eb7e0066894930c3b853eb3a00b3d4249861f4c5db13c02c33096618776a2d0730579b04338c3bb5ee0160ae310966187779590360ae35096618776a5d0b60969b04338c3bb51e0860ee6112cc30aea7781080b9ae717b906c51f60e30845576b21d60be018dc90ab3e7d3857157d62a80b792126f3b89d75ee5d3dec6d196cdb7da210347b64d2303497c7d10fd47b17699480f521897a63c0bd8645550f392e68abecc75ae618da9d66b35e28b619e97940e6cb53a88aee23cb14b51c05dc5e954f832813dee4989cf5e2a553fcb7396ac2cf1010b3e0017be64dd0d58610d25c66de21635b574e85a53a14b03e86a1b73d26bf81752eb0550d651a22c60894cdeae75382dd4a2ae0dba09dc93adf76b8424d2a8b89ccad9613dc8573704512cf1c9b25bcf024287034bde18740d546fa5b6cf48b5c83c6c6f1052cb241b1c6e0b5c1b37053123046bbfc7ae1316c695c2ca4142df6c12cedc50e23c02e0dc6212cebc50e2bc13e0dccb249cf9a1c4f93ec0b9b74938478712e79f00e73e26e12c0825ce9ea064dfd7249c634289731cc0b91f25ce812c7609a1696c33e32da10d4c4d469c6fbdcefd3d6bc4b4c462666f315ec102e9be239bf5c9bb2915e4fd4d9a9f3c2e94db4f740439ea0126e11c1b4a9cff01eb3cd0249ca34389f35a80f3209370e68712e7c900e7c126e11c134a9c1f009c879884b32094389f06380f350927a9473219ce9d00cec34cc299174a9c07009c879b84333794388b01ce231ad329cc99d0099dc2c85a443d40b3f3c8a03c44f81a387516896a4b193ead70895c0da754ac8653166a0f9153806d1e65ce94d730facbd782e6e5d14138d2aa6d51ecf59956893e25f550d877533803d8e53141accf941dbcdf12592e391ec03bd6dc29ae846539992fd32b00ed71e678cb178472ba5611c8318f370966188b9fc500e60926c10ce374ad9d00cc134d8219c6e95a0b01cc93cc9914439863924d8a790ea03c39886ad198e0ab45646d9da9a0ec3e2508788db081543a15bc9900dea994f05a5a2753456d32009ff78154b83a015ca705e1e29adb182bccd2f912017ca7d397bf6b59ec9e448b2c2625ac442ab45aac74cc1d0ac207b30d807986b933d608ab3664cdc15341797c6663cecf70d613c3d818cc06567a96195eed4522ff5c2f923f1757498bf6512ab4db805ef3b31bd74ac35e01ef0312fc3926b91192ae974056341d0a709e6b12cedc50e2bc12e03ccf249c79a1c4f912c079be4938f34389f32780f30293708e0e25ce4ea054bfd0249c05a1c49907705e1444976f6223e1b9a15c54ea1190d42f3609661817957a14c0bcc42498615c56f72100f3529360867159dd8701cccb4c8219c665751f00302f3709661897d57d10c0bcc2249861ec9abb09c0bcd2249861f4d3b815c0bcca249861f4d3b802c0bcda249861f4d3b80ac0bcc6a40625a9ab205983721f80f35a937092568fe83cd501ceeb4cc2493ac7870ce77d00e7f526e1249d6e4a86f37f00e70d26e1249d0c4d86f35f80f3469370924e3725c3390cf46dde4489b393c439dafa5fc9d4f437be6e47d827a43cc7a2086f0e62c19386dd130a997bd13db83024610d942ffe42027900b0d35bc20099b0cd44069901c8b79a331d95305f259b68f52b28a66e33052569f59e0ce5446095b753a2eccb9ccbf396c9c5a4e633b584148e9630b99381bd17d8e81d9460f9a79d2b1c93c14aa782d51194f27752c24a77596185f040ae1362a23ec8f1fa98c2d85d7735b0c5bb28f16eebc2cbcbee4d8e921b734b0ca874279b78f033407cb7294512a9732259ce39081449f734a6db6c60dbdbdf4985b20058e5bd9428070894b3ac87160a607ceb878df2f568deba82ad13c0f9d64e25d6dff6fde9d6b1cc124bb82b11590bbf1528b8ee0b62be518e68e3073cdf886c1ec70a80ef7e739641096319bf1c24f5072851766900a50a296957085ff48504630b50f83c483f59b5da5171df593caef2c5f055e33b83e4fc5010d5786883def60e2474ae21db3bf01890c41f36777d19c23a275941d406a07d2488dc13ab7346734fc242882cf79c08303e4a8991ef6eb9408e11a935b86609cbe4c93e7cf5c80e20e77ccc9cb53a084b70b2a982cf021b7c3c88a49c5d9f9c4bc54086bd347ed877bbfa1a58e413d42e5e1cd854f1e132662fabc71fdd4b2cf468e35c28eef2c50008977baca482b900c07c3288e49d1da76f33dc03c2ff00944f99d49719151e505f663a15e27cd0067a3a08b785fcadce6de15c60a5cf0431acc613fc3451a3dc209498c3d4ee97f32dab5dcfec0626afce57b3302f9c5b01c03e1bcc023f8db04429d9921417017ccf99b3704a182761ed06503e1fc4b266f9c1db21d970d96400ef0573964609637ba73368efbc1884cf66e2bb5511e224db35601b80f32593708e0d25ce9f41427fd9249ca4bb5392e1bc04e07cc5249ca47ba792e13c01e07cd5249ca4bb5392e17c1be07ccd249ca40b3893e17c10e07cdd249ca4bba293e19c0e70be61124ed26dbcc970ee0d70be69124ed259c06438770138df0aa26383af5bbc51f4106d608175b891f50b6d01f8de0e065f23b4c7c93a33a68156cf3b264dfc23dd2f8dcc1a0f0638df350927e97a4764382f0038df3309675e28713e0370be6f12cefc50e2fc1ee0fcc0249ca34389b335187dfcd0249c05a1c4990d707e4489b3a5105066d5296d1f0e2e990c17d9e493e62c8aeb634a5c4359ecc084d3cbb290f129d095e26f3eb4bb41889c2600f36015096a01f8accfa7823d1ac0fe2498d913b95bd120da1c80ef5373e69c11b6bec992fd27a00cffcc1494a41d1964280b4081f379301e1a8db0e11799937f0f60895f04e17cc5dd5b6630ee0dc47d86d608f7ab9a50fb08dd0af2c52fcd995516c605c58f04d6f81525caae8c3bf4f38a4da97c6911c37c8109573820cb155b029bfcdad4b93ba4050ed9dc9d79c046bf31152d69b5880ced93c06aff473d09207177c1bc502e81ff3a80f9ad4930c3e87df90680f99d4930c3b804feab00e6f726c10ce312f8af01983f9804338c4be03f0660fe6812cc302e81ff3880f9934930c3b8dec62300e6cf26c10ce312f88f0298bf9804338c6df60f01cc5f4d8219c64dc07e00307f3363591dc2729c6c6188a1a053f8774a8c3d99775756c2444ee62e3801747afc611a50c2844e06747b00f44fd38012362ac9808e0540ff320d2861c3920ce83800f46fd3801276c891011d0f80fe631a50c24e3932a0db01a0ff9a0694b0914906341700fdcf34a0619c65910780b2a6860125acd89301cd074023a60125eca423033a1a004da3049acefcaea14958e693b9d71c0bf036a1c4db558337d6d1ab40cc2222cc499b51811c095af44d4d014958c693816c034036a304394003d276f1e22e0aebd98ec2c3b83a6eae1ac64a14e7a90037a704ec6dcda3300e14e703942d2851467d3b0b82f7ed24c31701854f4b4a7cde97ea0963975d7f80b3954938c78612676b80b3b54938478712e7bd20af6c6312cefc50e23c07e06c6b12ce31a1c4f925c0d9ce249c05a1c4f932c0b98d4938c33918b733c0d9de249ca44e0c64388f03383b9884333794386b00ce8e9438f989dae5820c13d9e481f600532793ac6e5c287bdadb83ea796793708e0d25ce5f8175763109e7e850e2bc14e0ec6a12cefc50e23c11e0ec6612ce31a1c4f90ec0d9dd249c05a1c4f910c0d9c3249ce11c43df11e0ec69124ed239436438f701387b9984333794387705387b53e254d3abd5864b7ce52dfe2a9f6ebdc87a68352bd30efdaaa44f86966c5180bf4195be0f25da3e2eb49cc306c6bd3b4a5d48dd8b9e110ef892adffb13fc0da97126b5717d6f2adcc3e3f0720fb990292d022c940be0940f6370524a1771c19c8b1c05926dd149084a53a19c8df81450ea00439c40572158b5d1c25f1655408133f593f683360b3db52a2ce8e29e531907ced9ac5d61d7b95ce69e203fc336572d1c96af19ebdcc24dccd92b0101b9746843f1de01f48895f2da836966d6dbb597ec7a2080705d904a81556cb6ba9d325bc784d8030d60cee00f9f0604ab4b6471d5f5c8d8be095fb12ebf2cee28575520c193eb22550bb00cb1c4289cfdb527f615cb76623b0c4a1942887b91279358b4e2de0a39db50ceea2ae2fa69658ff4bacabfc2379b4497f3815f0a700f08c2072d5e4d6ad239ce54156e5fa04640bc328d1f6f6902dc08a146193219d0aeac7c05e879b0895b0764a06f5030075848950c3b8817d25803ab2716b05b6287b7761c2191f64bb0bbf06508ea244e97d7e676e2897c5980580669a06348ccb62ec0880669906348ccb62cc0140b34d031ac609888500688e6940c3b88ac3540034d734a0611ce39f0180e69906348cab38cc0440f32981b6676a67a3c0a7c9a653c1db8e45e18da68497cefc2e8141689b644b601c006cb38012aff28fca169d7dc54290ae8f29dc8323ff026b1d43df836f2f3e1d7862a7db9f1058e3584a7c8398dbbd0cee76a4ef669e215f9e6f89db83d95dcea45d22795498cf0798c70561a539621c34602b25eb50ae03897c7c103d4a252c913544c2b8a2722940b91d25caee9ad21d47991fca55e8fb01e7860941549554eec9cbf052d78e5d5b9f27e92e20d7dc3e88aa1266ab6e98a4131dc87056039c134dc249da6a27c37934c039c9249ca4f346c870de0d70ee60124ed2298c6438bf0038279b849374822d19cebf00ce2926e1249dc24886b32fa838159a849374822d19ce0900e7d4207026bed643181752ef0612fb3493708e0d25cee600e77493708e0e25cedb5814e70c9370e68712e75900e74c93708e0925ce4f01ce5926e12c0825ce1701ce1d4dc219ce2d5216039cb34dc249ba0d3419ce2300ce3926e1cc0d25ce2a80736e10c31c184c674227f4a2239bd8d504b488e60533e0d6083e206413bb66034b9c4f894f39d0f00faf1676a864af978f846f542802e02da08497d8de1ce15d0063256838ee640ac8304e735d06402e3405641817c0d804402e3205641817c02803208b4c014938ff820ce47100e462534012ce0c2203b919805c620a48c2560c19c8bb00c89d4d0119c636cc2d00e452534012fabc91817c0f80dcc5149084dbde93817c1180dcb5313b28a038d20a105923b106a05c468952f96126e6d23a9a32a72483391bc05c6e124cc2f29b0ce65c00733793608671cbc6c900e6ee26c10ce31a495300cc1526c10c63013404c05c69124cc27e2132983b0098c526c10ce3ac8a9e00e62a936012f6a193c11c0c6096980493b0fd4306733e80596a12cc30ce445b006096356e63d216652f134558fc902d13f53c40b99a12251fae9d26d684e52ace92b6596ebd5cccece520c9e0914d2ee55ed90ade1a4a78bd18bec3c6d635def80bb0c7b59448fb32f7da9afa99e445ac4638f8d7b2d54258252dd847a9c05e0c6cb59c12ecc0185bb51790882e04cd05720797f8455318eb9fd702ebdd8312b27b5f181b285f1381e7ad53b5994201cba7c5da8c0a6b04b864ad0ba2bc4facf214c64afd48900d5450a2546b17c3aa53e2392c215ab21cf64290f82b29d146d793c90ede71309d0adf28806f7d10f8f8aa9981e3db8f0adf17206157356e1e19f636d1186089d54196e2e596124bac9b151611f77e1981ad64742715d656a014df93baa9b942746e6c3d6ed55340f2ae09a2ff28b1f1f39c5076c65d061278ad4930c3d819773980596712cc30ba235c04606e30096618dd112e0630379a04338cee08e700989b4c82194677847301cccd26c10ca33bc2e900e616936086d11de10c00732f936086b13bf82400736f936086b1e7f26400731f4a98de9774242c82c8167eda17e0dcd7249ca49bd990e13c13e0dccf249c79a1c4793fc0b9bf4938f34389f35b80f3009370927a1393e16c0a7a320f3409674128718e00380f0a66e46705db08fad903d9c7820cdf2616c5777010233f983542df23d2d60f99f7d18f209f3cc41494a41b2991a1dc1e24ea432951f29dc41758271b18dff1878be23ba4afb51ee7e393e56c2fe16068ef4a1dbec4dd0c24eec32831f667d13d7f6c3fa21596bab5963a258207f7dc9cccf89e01dc77a3d812c08b9d52a696e0a90b21dc2301dcc34d49eea4436a64c97d2048ee47045186f32189c08777c93a376a81251e49894fcd33cf16959ee8be68ea81b06feab52d28c18fa204a9fcdba2fec3f666738b2d657851a38eba7dd3482b4764deee2f001b3d9aba448f975baa9092bac1d4468830360739e5319418d33518bd6d9248384e49b649e2e1200338d6dc0c80b08c27cb009a01b4c751a21d20d0ce14f6b990719fb73259032d15a2d4e481752202b81d97587fdbe2a75bc7324b6c6908eba3ad410e7bbcd95903a1a71259d67003b0df138228c03017d9429121d4d01660c75215604b00c61383e9aecbdd8aaafaef82447e12253e35280c5bf4aa7b24da6112ee167c1f00f3644a987d35301b2ea0c20b762f00f6144ab09d989accb2425ce01f2f1688c3de147d0a203c3588de257c4606f4fe08a35bec7280f2344a94db7a40b94874a0f0f96cf3adbf5417732d6da97e3c55a9be3328d54fa744dc933927bd548bfe79f73c76a7cd86d1f9ab3368e79f4109d4fbce6a8438c976b8680becf34c93708e0d25ceef418e7a96493849179e22c37901c079b6493849774727c3793cc0798e4938c78412e79b00e7b926e12c0825ce0700cef34cc249ea254f86731ac079be4938f342897323c0798149387343897329c0792125ce7602a75a2d69aa1853aa137e9dbc77890c1cd92a0a5d01b88b82e841b21743b18fdc736911b3bbe9c2db09771a407871103d4889f92785715db90f41f3f112535092e68864287341c7c6a58d89d2d94714c619ea0701abbc2ca83cd2eedbe48236cbfc31805ef6be54fd96ff0379e4e59408bb008465f50b996e2d7e733f018c5750628c759bd1af0a3743be10d8ba47795468fb01b457068b36718f24d2a288cc23a937c83faf32152d6985890cedc3c06aaf0ea268caddea0680470084d750228cfac437c2bc363277adc100dfb5c1e0cb0fdecfa8920adf4280ef3a4a7ccacf2831f783dc503a20dc09605e6f12cc30b67aee02306f30096618d7e5ba1cc0bcd12498615c97eb1a00f326936086715daef300cc9b4d8219c675b9ce07306f310966185db30e01306f35096618d7e53a14c0bccd2498615c99f86e00f3769360867165e27b00cc3b1a77a0c216652f894fd8fe211bccfd1a74b4dd49895279077b7179214ce8646e052301d0bb4c034a98d8c980e600a0779b0694b0614906340300bdc734a0848d4b32a0c300d07b4d034a582891011d0e80de671a50c28e3932a02300d0fb4d031a46e7c17400f401d380123636c9800e00401f340d2861271d19d04100e843a60125eca823033a14007d9812683af3bb86076106403628bc27c0fb0825dece2ceaee55ca9cced8018dac93b5e60702888f5242543e7339f53d4d1ca59a2a1df68577bf65518c8f5162f43ec3378c5d22bd80553e6e12ceb1a1c4d902e07cc2249ca34389f37690d89f3409677e28719e0d703e6512ce31a1c4f919c0f9b449380b4289f32580f3199370922e1c49867309c0f9ac4938f34289f35880f3399370928eb993e1ac06389fa7c4a9f6a56e84d50ce9b67900f05ea084a76660404bd4cf1c2ab484545a5fad1267fc69d2ae8efda8d08e02f32c5fa4b74bb81afc02ebe15ad0522783379c0a5e7760972f51c2532bc6f17ea2a98c6f3a526de12b935d1df63a71654260b11000b723a965619e9d9e0110bf1c4431841542b11b32128e1591e15c0bdaebaf988493d4c7930ce76100e7ab26e1245d55860ce7ed00e76b26e1245de08c0ce75b00e7eb26e1245d7e8f0ce76f00e71b26e1245de08c0c673750f37cd3249ca4cbef91e11c0370be458913aef201abf3b5410db5a55321ec0b12f8db2675798c0ba52b622780f31d93708e0d254e0670be6b124ed2ed95c9705ec7a238df330927e9e6df64384f0538df3709e79850e2fc08e0fcc0249ca49b7f93e17c16e0fcd0249c39a1c4b908e0fcc8249c79a1c47930c0f9b1493849d75720c35906707e42897318736f32c27be64b2d1e7c1d3915cee8e27df063f05393adbf6a443b8a74edb9742ae0e341d3f3534ae06a5fe112a69f4feccc59c337ce391458ee67a6800ce3eab1bd01c8cf4d014938d1800ce4cd00e417a680249c0243b79e3100f9a5292009670c9381bc1f80fc8a12e41057e9be8ac5aebae9657d4e32d464ab730e01e5fad794a8b35da837a020f1a57c631d7202aa568d4b23c2ff1fe8f0fb8612bf5aa625d1011242ff3bb2e191d500e6ff4c8249b80c0619cc3500e6b726c10ce3c0dd5200f33b93601216596430770530bf370926619d950ce66e00e60f26c1246c4991c1dc1dc0fcd12498848d0032982b00cc9f4c8249d85f4a06b318c0fcd9249884cb0591c12c01307f310926e1524164304b01cc5f2961f665519f26be2904ef34992996b6986efd2e17184badf05609c1dcc329dc7bbe1dc3a2607fa304db47809d633d5022a626c0154256b07502225f43a4c4fadb163add3a96594f95d261255b37a405c0fa3b2556b599049f0b17f8342fb2a554bb83e4fe07253e6f7bbe8571c1fe0d00e59f9428fded5944585d22eb157d0b24f2bf1ad74a6d51f682bf8428c996087a0758e9df9428d33528bd2d6345d87e272b8eea00de7f28f1c265ac368a02884f445c252d3310a7f03ba9209e0e92fbbf941007f8b6d11cca16139995be02acf43fd30113b6a2c800f707c378ac99e180092b5b64809f04161c311d30613d810cf0d300709ae980c35853b80d006e623a60c2de7f32c08f01c04d4d074c388a4a06f84600b899e980c3b826eecd0070734ac0ca491df6c5621d88e43db0643807b128ce169438a35d8539c177159275605f05f0b5a4c4a75b112af11eae30eec97d0248e8ad28d1aafe2dcc53d5d90b1bc6fd14738095b6a644a9c6af92e98525744023b3d1fb00d836a68225749324037b0700dbd654b084590119d80d006c3b53c112365dc9c08e0160b731156c18bdfff300d8f6a6820d63056b0000dbc154b0841ddd6460af07603b9a0a967088860cec65006c2753c186d197e06800b6b3a960098764c8c01e05c07609ba7f403f41ad4874b6f086ee6a21ae92b626fb2815dade6038b16b103d57a3a55741854522307f0232cbbc0158663773ba57c2b88f7d0940d93d882ee9c4674e85718ae421a0e3af87493849777c20c37929c0d9d3249ca4fb9190e17c01e0ec65124ed2adb1c870fe0070f6360927e9c66d6438db814a511f9370926e8d45863307e0ec4b89b3a15954ee31a8305693ba0398fd4c824938f24406b31780d9df249884fd4a6430db0398e926c124ecfd2483d901c01c6012cc30ce9f7a17548fb6350926612f2719cc2f01cc8126c1241cef2483f9068039c824986174d0791bc01c6c124cc2714d32982f0398434c824938fa4e06f37501b3453397f0e931c20b45738f37f84a5874cbbf4c3683958961070ea2c43a9fc3cac55b2b2d1ccbac7fde626037eb9fee7a44eceb388d6d66d5e22a97572a64575a77b966b52c7b0487c40da2a534880cd1393dd9625e673db3909589af6f618b98bda5e17cebb75a786183409211e962bdb1c0bab68171ef6afe85f596266b598d08b173cbc38c484bc1a98c6d940438c00ca9eb4666af0f384b768b975b612e169ad458cf3415dfb11bd1199176e04ccd689c25c6cb6a85562dc47db8098efdeda99276b1d0b24c446524d251c61ebf365784bad80a6db13816d5cbcf1a693d1629b07ed9637499f5a373997295c34a79a6ae372c93c75d7c69193c8222fa145b9132ab6b28447642e1efaf16ab429409a9b31a0c69c3e1c32db86d9c58c91ac5e3626b0eff301eef6932ded3b23279787352607b0d6b341c7e39d565446cc234dea617307b63d732918f6ef165d3ad45f0a1bc72f1ddac2c33ed3975611f01f3b1b4acec64edd9bb462329edd996663b6fb864cf482074fa78708739fa54b52cf1942dd8a97b2de3db1b344ca2af28df716993adb33522ace5426a25533fbc9ce475489e0d8da2e4a92ba4ff2f87e0b5359e43643a1251364f4459ff67dd29b26efeaf7ba48d75bed87ad72e2fcbac3a6f8df53797b7aa3c8d35fb7fbe70be1126c10400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/07bc28560014a6f4fa836ceec923f959.asset.meta b/Assets/SerializedUdonPrograms/07bc28560014a6f4fa836ceec923f959.asset.meta new file mode 100644 index 0000000..17eef88 --- /dev/null +++ b/Assets/SerializedUdonPrograms/07bc28560014a6f4fa836ceec923f959.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7bddb3ba946203a42a5930a44728eecb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/08cbf49934912ea4c80ee79aa2c179b6.asset b/Assets/SerializedUdonPrograms/08cbf49934912ea4c80ee79aa2c179b6.asset new file mode 100644 index 0000000..d8f08ce --- /dev/null +++ b/Assets/SerializedUdonPrograms/08cbf49934912ea4c80ee79aa2c179b6.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 08cbf49934912ea4c80ee79aa2c179b6 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d097c5d45f5f8e775dff77da1e9feba264d9ab485026dd32d744949d252684b9b26691b9a36214b6959cbbe15d9a120fbbe8b0a0a8ab8a122a082a2a2a22820226e28080828ff7be6cee49d77df9cf7de7d37e7656effbff4d3dcdcedcc99ef9cd9cfcced902b9c9fc874e7d73a51268ac54cb156548b7ab1dbf9abd839ee72feb967fafa1ad1e81cb73bbf2b9d7bd3454e8a37e167726498f3bbc4396b12cdce9b2da2ca39d6cafbe5a2c6f9bbc479b7c63983abdb9cff35ce53914ece4b6bc562512a568ba191c12944ac932f35a96b118857a49bf37b91d8e7dcad914a4120b9f2d650e757b973a749dedbe528ad9fdb2036c968ed72ee5539ef348a3a47e65629b15bf50c21ff10ee61883a0e5547d0b1bbfabba3fabb9bfa1b3fdf591d87a5f9fc70f45e77f43710ba2dc9fb23d4f19fceff2ece9f8de81cdefdab3a1fe9caebb02389acd1ea78983a8e51329bd2d0bfab3ae6a4886f32196391ac74987553c7f1ea384ee9db9c61f8135d46919b903c38fe0be9331e85dd1ddd87e3840071d7e9f89e271ddf73d3b1c341957e6faaeb93d431aa8e93956ce7998177a96b53d471540abda6baef89b92266b34e981d1bd4f934759cae8e33d4f1df4ad716741e54179da633d5f17d15c61ec375fd3cdc3f459de7aa639e27bd66a9e7f6aaf3fc34f549c7feb44e1fa830f6a1738763a72d4964e974ffd093ee1faa77af7039767ac2131f6c7f26b9054adea919c4e3234f3c3e7275e91cf53c974a072d7fb63afe47c93d0d9d83dc6b7cc6ad937aef31755e2852976d43d2b837d795d34db39ee786d365907bbdcb7c116fcb7352e8a9d3f6634fda7eace4d629b93afe87bbe711cd3907c981f74ff7c8fdc423f71325579711dac653e979843a1ea58e0bd5718168cdc7139e51d78e54c7a3d5f153115f067caa8ef363ef0eb9c227b76469b4c893d6a3d4f1bf2964eaf78bd5b17b9acfeb671607d079893af64833cc1eeab83440983d5d5be8f6aec716e6a590b9cce5dbad19e9e0c8e9ae6d6fb93a96a8e331ee11fec47620cf53d9412a5d56285db4acc5ae2e3dfaa9f395eab82a5e17a72d19afd3196da8d3ff94cc33d1391c3f53d7cf42e7a0eb1a379c1e3aff94aae31a8fcec732ea5ce6bed7bb17b28d74de4b665fe56efc7ae6b9b27b56a8ebfaa8755b12d3bbdb62f4aed6239dfcb04eb1e810cf589e830e9aed719ee7f6a37338a2fc2cff76deeda5f98e40d7e1ddb3d139fc5f9ba6aec78b449b05399d50d8aafeeaa5caff5e3a3d4f108979cff42e1c3ba26b1d95bc57d57b1b44623da69f83b89d83cee1fefa34e3b6d1a09f136eef0549dedd24e2cb9fe2983d747d515d3b51e9d359c4e5ad88ee438d8dbd13a953d736bbe77db52e5bd43b5d10972eae7e7d747d5aa98e35c25ccf56210e2a3f3afdc9d6b047bda2ae6d4d1256b57a669b27dee531393d8729dd7539b65dc4e719efb3704dd7773afef5eab83bf6ec24651b62a73aee52ba7515f175f449e83a1c751bfa5c740ecfd5c6640f7e565dd37d02adab293d4ff6c4dd540624b3b346f7d9611bd57993cbb6ef531eb95b4472bb6d76e54cd67d8516574ebf4e3ee5ec71e5447539b3d73defa7f5d17d0fdd5e566dee48771157960bd5ee8da07640a43bba06cf9ee7e19b4ab7641ccf70f56c6ddfeb3a4bd7510b90ecc14a0f5d26e336dfe9e81e9cebb6df3e4ffc92e9b25f1d7ba788cf10f41c1ccf0e10ff64f7baa8a3e21de925e2fa3cf2dcb19301a392c83a5f18ed74a0ee275fe0deefaffb9c17a23841189a05b6a58bd4bd3e28de5aa7bee89aceabfd62d7229ad9c59ef439df73ff1224c374ff52a483e9fe01755dc56fa0d2595ce689cb3e8fae7d455c39233e971857f90c0e5b334b272d2f57eff6f7a4657f952e6f27917585392d077da4ceaff4a4e5559eb41c6048cbabd5bd8128dd26ab6b830ce98bc616a53cb8770d7a06a785be7f2d926bba7f1dd2c174fffaf8b41cacdb6f0789b4c4fae3b4bc2131aef2191cb6b6936469f97975bc511d4ded5e3d3e3745c9bd380db937ab636d12b9233c722f4943eeadea784b12b9b711fa66129eb6753506131922e26d1dce1dbb1df2721259b70ba3ad0fd5e3067788785bbf53c4dbfa509168eb6a9c2f82c7bbd5784964b848b4f511c84ef4d8fadde8196cabfafe3d48aee9febd4807d3fdfb449cad0f5ba0aedf2fccb68ef5c7b6fe40625c23c33d61eb7a3c595a3ee8e1acf98e14f1fd9c916efa0cf3b67f9a44f2baf12157fe145dff3face48d52f22f45e7701ced0977b41bee7035fe3542e567a1eac6e1d3ddebc3f51cc323c2d8de1a5ee179ee0b22be3df5450fff2f796c654cccde5ae3f228ba87e39623e2db245f56d7c7a2b4ca41d74c6dae545cf5b8e3e31e7e87297907d0393cf755a4bf6eff7e451df7c7eef5d7632b3a7d7b213d9e30db8ad4158f3bf86d23e9383f9922ce7eca243d0fb30f9d3b763032d9f8ec37d43307923cf34d75fc963a3eade48f17f1fd173d8efc6d753ec1737f82ba7f4b8cfd901ca487960def5c9646fcbfab8eda9ebfa3c29928e2c7c426aafba63a22d3766ca6f7aa944e93e2ed479e3be9305af78db52d6e4d611fdf53c7efaba3ea074774bba4059d530ca6a41956927845745d7a263a87fb3f50e751755fb73da7799ed7735daabf1b99ea797e86e7793d17f643753e3dfe79f11c9203e7cfc7e2d63afef002baa6fb0e3f8af119f390ba37333e6cf16311dfbfd37db85cf5dce5e83dcc40df57dc23799e38e9b9b22bd1391cf33d72f51cdbb39efb5a6e8147df9fa8e34fd5f1a5581ca73d84de413cc58bf13293daf4f34ac66cf5ce55e8dcb1e931c9dafffadd42752c5232ae46e78e8c9c1c57df9cd9b4acc81c0fbf42741d8e73d5fd6bd039c84ed63e7e413d3bcf1337354795f34c1aef1eae8e4778e2768492f1a91bb7b1fd92c8fa993aeaf6a54e436db320ef4843baea7923354614d16db86bd1b9a3c3d8fbd4733f1766db3edcf3fe75f1ef8fd375f32fd4f1971edd8e12f16361bf52c75fd336297ee3d1fde8d833adfabde2d14f8f9168bd17a870af477ae8eb705c28e2eba885ea7d35a61b59e4b9bf48dd37cdb527cb2303d5fbc54ade4174eef01bafe3f35b57e6f80969c8d4fdbcc522be2e51f33513cef33cb7443d77033a87e35211373eddfabcbe7e89e7fa728f9ce52a0e7a9cb6bfbabe2cc668bc6e830ef0dcd37fc3b1c4138f12158fc59ee78e51cfdd88ce93bd7f9ee7fd159ef7bdd7755f3819fbdfa5914edac6567af45aa9f47adf9531518f75bda68edace29b97ff0c85fa5e4df84cee1be698cfa7575fc63bc8cb8f2448f5faf168979528f35bf19bb375ddbeeefd17b70fe068a4faaf14ad3b5dd4a5ea9875fa9cb6fd26c1537dd9fd6fc76a5e0a79e8bac41cfe9b08e45d7de52d7ca62d722c7a26b702c57badd8cce1ddd263fe1915ba19ebb05850dc7b5eafaade81cde536de9c83a11ef5ba5e5a1b923f90c84a9e740fee409e338112bc3a09fa8fb32afa1fbdd919efa9a9681fbe0bbd111aedfa6d2a0213ecc946960aabf8f17f1eda1e3d5f1044ffa9fe0c637aad23faad35fb7395b9287ade50ad52e896c10f16dcd0deafe9f913cb87fbbcff86cf4c467637cb8527eaa36d63beaf8b07f9eb2ff0bc7bfa8f04f54e1dd81cee1b809c956e5746433b209359718d9a2ded7e352da462bd1b395e859386e15f17dd2ad6eda4d6bf0c8d6ef55a9e7ef42e710d6dfd479b5baafc7ac741ead413a54a36b70dca6deb9079d3b3a4c55f354d39613616d57efdd8bce71983bd4fdfbd039c8fd34fef948ad7aee7e74ae1963390fc4cbf1ea153909c551cd25caf18c64b6aeb8b68e1154aab0d4dcda145d4ebd959e3ce3b597d4f1ef2a8c9d1e6e7a5ef4c50c64abb15139ff8cdbdf752ea3e9ebd573baec7f2345187aacf51feaa8fc7422bb94fc07d1391c753977273ac7b65f2fe2ca6779eee83523ea91d3e091a3e77375ba9cacee3fe4794fcfe9bea1ee3feca6db8cf99ef8a48a77dcb5ce11e9cfb05cd4884ad12072a5a306949ee9baaaeb37533ba94b9f10f8053f9365b0cd629ff36a8dc9537cadf4436f160522dfe8293e5cce0fead08be5ef4ae7895a29f4914842104f260401cad539ff6a909b7b93737d99f4920747f75ae7ce4cb1d239c25b5bc42cb1c1f9172f659d136c9d5331d4880ae7778394b7c5513bf1c95451029778ef3b658e4cd7637f977345036d70ceeba486e5f2f71ea9698dd4bec4b9d62cd70fec16dbc522e7b857869618f746e76f5398150a995947b3e33e75dd5d1ea09369b1131bd03e57dae2ffa5487ba408a0ef02f9037e3ae5cadec0250929f17f0cdd420606184a948c59125924ee5abec8953e52650904fdc731318666fb76791789d949e3622603c93d52c62096c2d5cfbdb3f6c2a73f78bf737cd40a44ae9c561895226ac9c082bca89c11f51385ce9d3be581a25efc11137ee942559e45fcee73b5f239ff09d045567ef109202bdc0aa7545b832acfb552f93aa99a3932ba2aae906bc5b6cb88953a0a9ca4cacf84f4cc83c0bbca2449ac7053458b4a940ea64491e30015ed9227a8a565c993a55b6b2c62c9922b5b51c392182f15966c5e75506d2c9dbd9e7abc7477c595efbcd9d99c2e3d64ba64121a95321d4d29d323dbd92575fd902c5d7ab6c62b962ef06366d88bb0ed543a50043b9908f6ccb66dc3bd7a29a5d279d63f43701a9be62d72cc00fb1046985a050a616703c23c40d8d7a095e8dcdda315284448ee624a9c5eed53196766dc30cb33d483a03369dcfd93d6a57e4dbbab899e742fdcc24a4ff711cb9dcec00ae75ea5f37c8d6c70c2f5358ec44a276c90b7508610eb57c6bf919c2ccc2dccf09235521d28a94e403ddea09a51c4bb1988e781bd0e3298812ce3bc99a13f9d19ba53d96c70d06cd683923c24a8e49e94e4a14125f7a2240f0b2ab9b729dbc0f37248973fdbc48656f45f8b9c77773891d923fbcb2dcefba6a198e4d96578dad96584cc2e39c23440e44f232a9bf431a51d5c1c6952d29b7423e8a4eb4b091e1550703fcada4607b5b6fe266b93f1a863b5b6b5ce3577206d89bc5b2b475f663a055f8b937a90aae52a654116a46eea3756c9ad215aa436c9adf1b0b4ad718cb4467082e1d698b2d601a6b48714ca49c7a8c6d0493fd094f4d2d2b6b74bd2af707eef6bdddf2319409d8ce927f858c82b1e56db85fb634ef87132e1a72549f860fa52c93dc8942a32979ed42ea9b24c6e1013dfed6fdbb4199f76669c20d364669234690b6da994196cca88d00e982882b7ae86988443c3689248ec9e7ee6fc2408ef450b1f4a693ed9a0f9abab3af8d27c1855374583d64dc329c953824a1e61ca64b2a03d9b3593a53be56532631d6ebd345dd048cf799439c76d520bb8ae6b9fe46125cf92535bf9a0b12a595f2c11e94fdcf1c7028ae71e502a10235ed365816197ce54f132922a0166184a80574cc54b9212601495956606cd4aa34d92212be51a6c280f6c081a533d646337219ce974388799b2acac2c4f6dd72ceb8e8d80bc6d7276d895b75ac05e66a7c8ecb4d3a973f628c3a9709e6974c2a851f552904c3acbd0a689246dd3e4cbec70541ad981335654061863b22418440277f184090da876cac41a47f266990d4f969781929bbab5f2d15a71aa73d413bd09f6d695b6b71c9336d0370747b094cdee81b4e0b194e0c28082c75179bc28681e1f6f920ca50d38bb076df94ca0d49e1b54ed8954893acf50a27e1af157a24ea2841f6e10fe54077fc2275359e188746c2489554729c1f34d790c0016cbf1f81ce77fbdf3068cfe56cadc9f232bc358699023bbb48db28d3d1d3d5fef3ce13a56f8d1730a65144706358aa926c9906e4719d2ed7d9fe9368d127eb441f8f28efe844fa7d26e8129eda076807a039a253b54dd165f1ae64817971ce9d5d422c795ab65ca35c974cd11a73935f519ceb1d9793a47d60375f25e8edcdab35196b57ed27406a5ff4293fe3d90fe6b90867e429c49955b8b0ce556c467b9956b123e40a8ddc74c0d1f585ae0bfe19347615b62c2365aded82b5bae2df2f972690035addddbea36aa206719f4ca957de4dda23d1b64d0c1071fb026f977ac890261c77c0f8234bc60a98ab7e1a57fcc0d2f58f411954be7b2a13dd5c0caa70ad5e5864235e2a7502da0f2420995178ec9282fcc36d99c1c3a6968579ba3735499940d392f78831f960c75f4f6cae5d8ceec342cabad749c26b7946a925b37bbe49aa03085e9c1ad688f6617becc12e63cb152e6896c6a4ee58b42aad65e65a8b51febecafd62e3299ac1c336b6c57935d2c2564c36c579bcc568eed15a591f86da9e718e92adc240bd56a55a8ba45f718b9ef55a3ac366b9ceb50f0e2fbd3e4be48d05e5a2a79ef92e4217e95b2df4b1979a934f26cc79332f4395405b0c65001f86a55cfa5b2d0b1862cf4a9cf2c348f52bb2ca8da87536a971bd43ebd8b3fb58fa084571884afecea4ff87c93702898614d5f901ee291946058f897d0dc84cebbee2754797a8a5b655f41f7ffaae5957dceef3ae75a95149123ddbeb5cf8b1f2d8fa2d81e6760dbcf27dba32904eb03b25d60120ce6797c3a8293f8072c340986f6d70982687fc1b243ffedaf4514f68d06ecb7f9c45e6c120ed97c53d06cbe98927c6250c94b28c99b834a5e4a49de1254f2322a112b0d89086e5f7e127139257cab4178854fe12526e190dfaa4c65d34401430bb146aadb7d8a8d6b548a6d524aa3f3f71e55e756c78d8fc09847adea34fbc9e7c7507a569bf474579981671fb4292ae5181a84582a76fa0a750585bec680fe804ff42b29e1db0cc2dff6297c15c56bbb89d7b014e95a2d9d706257673957fd705c4d69b3c3a40d9cc6d2cd4f38a514d25a03d29b7af843ba868ac449a6484055e1e23bdc41b65a0ef855aa15727b6435ee1fe3b194063b4d1a40c9b6b2b561b026c366411985b4ce80f4659f48cba9127957d012b982527bb7a9d0ece94fedb594daf541d55e67920ca6d4208856072c30f6dfea388e0aa7910aa729a370d653a49a83923a9e4ae01643022fe8e52f814fa084ef31083fdda7f00d94f0530cc29ff1297c23257caf41f8a8defe846fa284ef3308aff629fc444af8a906e1077d0adf4c093fcd20fc3e9fc2b750467e7a5023afa4d43ec3a0f6a03efed4de4aa97d6650b5ab0c9273a5835836d7b0791d16fd2df381cd6ad273a1dc2fccebd752854f0d29559bd2056ae8b34d2af9a8ca6b286b3ac7604d6ffacc04db28e1e71a846ff469aadb29e1e719845fe453f80e4af8f906e1fdfafa135e4b25e6050113f3244a30ecfc9ed0169c2eadb35ee6b11ce95c0d8bbf77ab6f4bc2061c3572e2ba52da7e6cc0494f5cc36e0239ca7a1b954dd739d63ed3b9ea47eb9d94d61799b486995718c48db59bddaea4db0d31f915e688c9aad53dd9975e75940d5c6cb081c77c1ad82e2ad29704b481dda672563a3dd6b296b394eb77851cbc87dd3fb6494bd9d5c66eed97a65d261f906532b847f0e94a95dff5a6e486b6f56582685bc3c6653d40655f6deb06533860b3971b6c76b6cf72eb644af81506e1eb7d0a6fa4845f69107e9e4fe14d26e1d0ac81ada702356b9a29b5af36a8fd824fb55b28b5af09aaf61e4aed6b0d6a0feae74fed53a8b2ed3a53810e04d31914c99199b245565050c5ac11ee2a76d757aad2b95a2dbda876c8f335326bc2c8e2565901b89b726c96831fdbe55c62a373557b5ded13ee92b21cd91c73b728ca914541b5f2c5db29af34c9a76a5038e60aa756559cb88af23bbab9974aa2eb0d4934c16712eda392e860c0eae7544af00da6b4076f860ae7a4212e5dfc84771a55b0de4815acb013acff418bd3a978dd648a1724d386d69152d77e37f96c169d41a5ffcda692c567fa9f4909bfc520bc537f7fc2cfa2d2e4562a4d6ecb284df69bc28142eff6748c38c93cdfd994e03b020a3e87b2a23b0366bb7329c17705147c9e4930a4fddd22d1b71304f8f1ed3c9fb2c27b0c56387d803f2bbc80127eaf41f84a9fc22fa484df6710dee053f84554feb99fca3f0f64947f2ea68ce6415399068b80363bff60e0ac4e96d6ba8ead75ea2ab8d320bb8a501ffab1b04b282d1e326931b0558b3ce737d4bc3037e57a0765aec3a5940e0f9b7418a0742870fe57c9ce10bcb3d7f99db90607280d1e3169d00da505ac218296919fd02e338506e6fb0583f9ce1fe8cf7c3f4799efa394f97e3123f3bd9c2a9abe64289a3afa2c9aaea0087dd940e8239f84aea4843f66103e6c903fe15751c21f37a5ad4fe1575369fb152a6dbf9a51da5e4365872792154df96d5c345d4b69f164f2a269561b164dd7513a7c2d59d134bb0d8ba6eb290dbe9eaa683a4e86e76fbdc341ca7c9f32986fb7c1feccf706ca7cbf4199efd31999ef8d1432f8ec5690e6d8e7293adf32d0b9c6279d9b283adfa6e87c27233a375391f8ae21127ff519895b28f4cf04447f2ba5f5f70c5a2f1ee24febdb28f4dfa7d0ff2023f4b7539178d61089377d46e20e4af80f0dc23b0df527fc4e4af87306e1519fc2efa2f03f4fe17f2123fc7753c6099f5422abb58236aed6eea1b4f8b1498b58b596df86d5dabd940e3f31e9a0abb5c236acd6eea33478d1a4417711abd696c809af7a9f2355f79bc203037ec960c0effb34e0072803fe2965c03fcbc8801fa422f1b2211275c3fc45e2214af8cf0dc25ff029fc612ab9e1eb6641ea854728ad7f69d07afe707f5a7f8112fe8a4178b54fe18f52487e65ca013087927c9c3e712437d898bd3b6e6af728fd17a904fab521819a7d26d09728e1bf31083fe853f897a922e355aac8f86d4645c66354247e672234c25f241ea784bf6610bedea7f0af9884c330f0efd32932920c037fd5203857ee1dd43e73f4893b2fb5ed1cfd1f4cbc8c73f4f029bbe473f4c175a5e6e89fa06ce90d536ef3694b4f9a84c354ee9b22e054eed728c97f0c2af9eb54fdf0563af69fa4d07cca64ff7287ab6ded62ff7c9b2efe296dcb7f5b5afed42496cfb1d9e23728e3f97350e3799a329e77021acf37a96cfa1743367d77a4bf6cfa2d4a6bf8865e429308b6e15828bb433572598a6941538e6c2ee5f8f43dfb36a5c7df4c7ac09e2afee47f8792fff780a9f35d2a75fe61489d1da3fca5ce3394d6ef52a9037964876a22eaf4a869ddef2353cfc0ef5191fca7219275a3fd45f2fb5424ff658a24e440ed67e0b667e3dd34fd44eb0754c8ef994286a6a2eb5593dbba637e6eeba638a54e86a8167ebd399ea53478dfa4c150a3062be55fcd720701b7d59fd9bab11f52bafcdba4cbc8347549dc52dd8f4ecf5186f781c1f00e1ce6cff09ea722fc61c032e1054af0470105ff8812fc9f80827f4c71fed8c0f9219f9c7f4209ffc420bc618c3fe12f52483e0d88e4259360287dfe9b8ee0249da19f9a0443e1f2bfd61b9e7ee86722937ee8cf28ecb0259917fbf2b1feb0bf4c4502ea6663243a443289c4cfa948743444e2229f91f80525bc9341f863e3fc09ff2565989d2386e214d6229609bc4d4cb56c63eb823c2aa6c80a6fb7fa1dbf0a21479eb9d5cf74b9fd45a3acf5dd22b749d4c90d329a045e06ee0e2ac182e6064fcb40870383496e15bbadb538cf918579b54fd7be5728165d4c2c60df24bcd79cdbca8c55b0b125d9a7480deb04769add21aba09c9412f29da7fdaedcf81565305d0d06d3c9a7c1fc9aca52dda82cd53da32cf51b2a123d0c9188fa8cc4ab26e140b4a729a5c17bdf3c44ba410daec2ca17e85db85b14254bd368d2bb53a43baa3bac1ab3ebf81c502f2d430fa1c6df6b9676d56cc8455ba586f56800d6955daf7aa77eecebb754d2f432244db7f1fe92e67794f0de06e18f4ef027fc352addfb98d21d2a213f5c7e4f49ef6b920e37dc12223783fd05fe4061ea67c0b47ea23f4caf53c2fb9b6a1c9fc2dfa0280d88046b0abd49091e1850f01f291c830c380efac4f1964938949683d3d17a3f2df84f148e21266b0463cff545e56d4afe50937cd8a63271226a952c85f42626b13bfe267bfe4c6932cca40948809148bf56f00e15ca705328ee4e67898b5bfc84f8174388b9f24b00b0bb48b6d666a7f35d67f328eb880854fef160643bc038d23a320223ad83136296f4f3c704b9bf9ad20a4e4745123fcf7cccaab3bbde34ea471d1292a6339d347fa38c61b4c91860f744f05270e751eb9cbf9a55a46a7d9afadfa9700f3385db970c77b76a28fb09fb1f26731c936d732c964d9cc60ccc718c8368a207d14cc2187308634c163a658cef9ab8e5c0c5cd59e4863f3f5d2e771eac75ae94ca86a3db0c6dca80e9d888dfcda0c749b2e313629ea97e14f57f9a720a4ca18c8f049c42f91725794250c9ef5192270695fcbe4932b44a2645827fc3e2df54a1343960c3eb038a4734288f0f29c953824afe88923c35a8e4ff5092a70595fc3125797a50c99f5092670495fc29657433031add7f29957383aafc3f9364681be4a5a372926fdf7c46a93c2ba8ca224250ce0f483962120c2a170455b90325797650c91d29c985412577a224170595dcd924196c6e4e409beb42a93c37a8ca5d299b9b17d0e6ba51820f0f28b83b25f88880827b98048347cefc7404bf4d0bee69120ced8123dba03dd08b328da3829a466f936478fee874782499edea43815e1010745fca341606348d7e94e0450105f7a752af3868ea0da0526f71c0d41b48a5de9280a9378882bc3420e4c194e06501050fa1526f79d0d41b4aa55e49c0d41b46a5de3101536f3805794540c82328c12b030a1e49a5deaaa0a937ca2419caf0d5e9a83c81163c9a52b934a8ca8799248343cf9a74543e400b1e4325dfb101932f87125c1650f0582a8b9407cc22e3a8d4ab089a7ae329166b03b29840095e1750f0444af07101054fa220af0f0a7932a5f2f101558e52824f0828780ad51fd910b03f3295d27863408da7511a6f0aa8f1744ae313036a3c83d27873408d675282b704149c4ba1a80c88228fd2786b408d67511da8aa36e840e55338aa03e228a070d404c4319b2ae2b6052de20a29d0dbdb007411a5f68ea06acfa1d4ae6d03b5e7526a9f1454ed7994e49d41251f4e01a96b032047506aef0aaaf67c4af2eea0928fa432797dc04c7e1425b821a0e0a329c1270714bc8012dc1850f0424a705340c18b28c1cd01051753f6d612d4de165392f70495bc84927c4a50c94b29c97b834a5e66920cfe12fbd249c031b4e0e594caa70655b984927c5a50c9c71824e78e754e23b0757df6177e2e74c2a896b3fec57296bf21e9c2cad8d3e92f003ddd94ca467f85332230dd0cdf52e7d496f26258614a73489933d33153d09d10bc9232a6b3821ad32a6ad8667fc0619bd554997b76c032b79462714e50166b2895cf0da8f2b1d480d079010784ca28c1e707145c4e41be2028e40a0af2850121afa59aac17b54193751dc5e3e2a03c8ea3785c1290c77a2a675f1a30671f4f754b0f04ec969e4041be2c28e40d14e4cf0584bc9162717940169b4c95fc38e734025f7ab16177930daaca6ebb7d1eae48bb9abf5256f3b9c2cf0e2799e84b55f4279a921d52e7aa7492fd4abaa2df6c120ca75747125da1f58f1f57e82d5429794d1b94929594f06bdb40f856aa74b82e68e95065920ccf5f9f4e6a26992bad360986250107d3113c9236931a4af00d01056fa320df1814f276936460f7f97454de4f0bde41a97c5350956ba9cc78731b65c6934c01c01656b7a4c3e4755af04e0af6ad0161d751b06f0b0a7b97a9c203c7f3087c14b63dfcee7585e1cfc7fef6b42bb13b6425363c2176e9e840554cbba912f8ce362881eba9c4bf2b68e237506adfdd066a9f4c09bfa70d8437522dcb7b2386253e8be56999632ce562b158d1bac9c96a01dbcc9c221378a74afa997231508973bfd4b9b35b9a345c31b75f4c9b33c2d3d8b4c0f0eb85bb32dadf7ee24d542cef33c5f282d658ae755a5290e9dc0cba4bfe5da2369e6d946bb0dd0c5ad2fae492d67d85e2772e68543cca85fb75c562d122e30572e3e9c524c0f3fef4a02455085846b45dde8d678a33ab97f73a478edf2563cd14e9fb297bc221ba712a70de7169d53b85e266c7361a659abbb1ad507b3979b58dbd4b5f6f2b7b6aa162f98029964779628999bbf15caabe345869b0faf814c27792e515fc969f98eda162f6a0296647a7957e0be5fe05b5422fad0a9e72b13b7ee2760a15b7874c712bf2c46d954c9d1d2a6670b6b7dd62b2978ac9c3a6981cc87279167b0776aaa873a4ee13b0ca3ab60156930f2bc7ece858405dd2229b19b8d4830656db956dfb28ea8f98a82f4c2b6fac14ee56ea36946aa752f1fb82297e2b19ad0aae9e2c838158b9cde15a1974ad38555492254926a97a1a15eb474db13e3269ac694dcb645cdc1d5bdc38eada18ae56294289f922f3d43c9d8ad7174df13ade77cbae5cde896fdb9924b8d7d6b496038d4e7d005d9d202dc14cd2f90c8ac7974c3c5664a5cee6aecdcfa4e2fc65aa9de2cf06b40dc39e135552104e67bf16e127666751317bcc14b3c38998ad95f9b34eb54ddcaeb6eeb5ac53b9b83a213578fa28fba9183d6e8ad152c6d257a7aabb71c356e1ee99da76313d9b8ae9574c319d2fa851725349111f03fc690260b25ca672a3ec0d553935eebe368cd53954acbe9a4e9f203e5cdc42582b53a1d17916f2e1f624b55fbc8cb68bd9b954cc9e30c5ac3865c9995eaf802e4393f559332d29cfa3e2f8a4298ecb489b8416ef56e7211d5777379ed8c76292972566996d5d139e4fc5f56ba6b8d630f71e9ae5273f8092db3b5827adbdb6b5e4699bfe70269c2ea0387dddc4696dbbf5b292130acee1428ac353260e8b7ce60d1b72c445540cbf618a6189cf18ea2f209a53a43de27b3115dfa74df12d63b4eca60cda1a6d41e0128ac037dbaa0de2966d0b510b843f569752b1fa163542e137564be5138929e42d73d297eb277e07a8f87ddb14bf2302b41c9b656d04db406d53fd3c3a561509cffa89d365549cbee32fcdbc650ffe26452acbe3ac3d3e47c5efbb54fcfcf419ddb82e53ed88d85d98f148de3a6cab96e3e554fc9e31c56f82483e2a58e110e6d0f20a4acbef251fdbf3930ae519a502a7ed5d49c5fafba658d35f9caa689daac765446c0770a80f5b8c6db1ccc6f7afa2f4fe8149ef79297b5c25726e10461febe4fecf4bc42eb9d55d62ff37590a64de83bc9a8acfb3540b32791e81def01ad9aa6a32d4abe9cc25406b645b1bc6f01a2a863f4ca78f6c9e1b2891b607e3e0956a8c2a31bdb2393f702d15c7e7a811aa74c601d28965662546e631bd8e8ae9f3a6982e4f2b35bd333d6e3ed4f16ecf74bd9e8aed0ba6d8ae4f99aebc23e3dc63e607291a3f32d15840d61990520da2a5b565e9b6515638bff739756abd9c37a1db94ee73c5d2973755cfc14fec6ea062f76353ec0a03b4a0f1d82bb40ceadab4bcbd918ac74f4cf19843c623b640aa5cb89f62aa4aa8e7ab84bbd08a4eadc445597ee2f2792a2e2f52e5aaffb8e85659a97cb2dc2983ea559e4937466dd11ebb898ae94bd4ac8d59bb44eff8f6eabddd4cc5e8a7d41861ea119e746ac774c689fc8f25659e1f6fa138fcccc481fec2255d9ee84dc4dbaa9cbf95d2f86593c69352d67ab1b9d01a79157c85daa637701ba5e9cffd957589961eaf79836c51c7c69439f2cbed545c7e918e7f20d5865c6259fbf10e2a96bfa47c0dfc95736e5b22f16ea2ff88fe9e019d9e895216cad92aa82dfcc4f94e2aceaf98e23cd193b2b130b973d35d949ebf32e999efd113974f5e9d97299dd36db1673a0a7a3715835f9b62b051f08ddeeb71b764f377d802d3cd79fa1d3f54eea1a8fc269df9771da29f522516332ac7b54d69722f15b3574d313ba19dd3db4f3a679a03eea388fc369d9108bf6dade07dd1ccd3fe7e2aa6bf4ba7b42a96a9eaa660331a6176ada048cc4e113f5349066ff989c103540c5e4bdf6b16c2f4933371fca8eb6d95420f52f1fb3d35b29ebc4513fb1c895747fd39183a7f519f3249962733abed1fa262fd874c4674dd542d771ede2adcbe5b9568efd5020f53317c3d9d9c67269c593b21750fa7abf32f1281a56c4ba414777cbc5ebe03adc25c98768ae4b5d60c335b4bfc9971b543ec3a84bfcb490dc81315ad653b2ce54b2ee10d074e970ec2fd99ac3e7fe65688916dc2bb54b058caaf53e58db6d6999290eb550c4b20673aadc05af9965ef4982a16a65a6e26aae770ec52c76913b1883122bfaa886539a4a1617bc8c5f44d48d5d12a553be4426738322d436b4aadc51f21b48e661b1a9a4016e70e93eeae80d56af420027b566c96c1ac919d5dda653f65c8b8ae34853c430ad0edc194e2d6a222c0246eb83437d76db251b89309af3a32bb76ee900729f216273658e6bb58b6fb1a1c70ae379aae7328804da14008b6ad11fe8913613fe744776b97cb09751010fb6c6ea9d8190a608f768b017b9b13d820e17e50304fc4fcc4c20cae5fcf18b83f73821b60000702e113e9306dde22af568702da161183f60eb7b5c567cfa5ceef5ae591a8fd725cab0b03b868af18b8bf70821b22dba34d69570b6180770daa14feca09af27caaaa571233061c0346a540cd3df3831754798628b29c280e8a22131447fe74754dbda1f70fbd061407470420cd13ff8335b9d70b79258eb48ad567f8701d3b3e36298dee5c4d445626a0a556dd7a9770cce3f39e10c734e4a5b7b8f7acad475792a93cd0770bcd82d1b0c6bd4a06218003e868af27f7102ec868a7250136691c300e8c5fe3140ef7117e4a572da26b6ed4d38daeaa7231b7a3f5b36a457578501d04d036380fecd0908f6cad39d992562af8c754b6b0b1c5c4fab6523a14c5a58b5b4b73a27c03040841f0df1034e88f29b8e081e0c16c2aaf19ad6fd55ab43decd1984860f3fe444d95b9569dadef6a91a73ad1c890803aa83a86cfb285be310d0adc633f1ba6b1da696d9475d63e0fec33d0e81c1e1a5970be5c8044c8ec516998601dee968c8f0634e78bd508d1a5b49e8ae5f0e03a8c750ebec13ee51fc5532fbedf46c8cb3d879bc51861406605b3ac4807d9add71d578dfa2ea9095677568fae3bffca3f8d094582c830e7343e3d9ce3168ffe3b6b62572eeb145061edb992ab6535993d38683150d6100f72602f71927b83e289b8675ae081c5c342cd1817d66d27522a89762c2dd0f988fac2cc2090e46cfca1c68c522fd4d1ec300f022d9c8eddad923dceb799ab91f903feab4c7525fe1f6691be4d56655ffc679304d0623b04df30e1d90075234e3f18d68ca722e9af6ec79d4f7cc673443379a685aadce68c0018ba80fdfa8a8af22309a765b26eaab028f66549e447d75b1a3be1ab0d1b4bc7ca2be5c5ba2be7bb6269d69678668c2844f346977306a1cc28f1a0765a3c4cc6d34c9c4779418018fa618458a663437134d322b1825265563eeb66637d9bc09cead8e1dfefff684cd034fd84e0001be31215b64b27dd199bb7db1b935c5a0cc4fbef1d12ca796f7e8302a4187f8cfb5e87684499bee712d8d3ee9443093d64617e49dd2c5269cf9a1c43917e1ec6a13ce8250e25c897076cb06ceed2450acfe6651288af870f6e2c2f98888e1ec6e13ced9a1c47910e1ec6113ce39a1c4f90784b3a74d388b4289f33984b3974d386785126719c2d9db269c05a1c4b917e1ec6313cefc50e2ac4138fb72e21cac7056a96ea577e93a5e169dc707b23317c8bf2290fd38418e16b1418b740790e0f946f96cf89af28b11d8fe9c60c7083ca294fe886a98e18e43700770c21d2292773bb138a8e9d95076e542f92942399013655f85b2c803d41d6b8487d8e08de082f715046f5036e0cdcd3e3c36cb7b11c11bcc096f688a3a3c3e13b3f6cdd960fe0dc11c6213cc392184f9770473a84d30678710e69f11cc6136c12c0c21cc7710cce136c1cc0f21cc3f2198236c82c93875c106f36d0473a44d30197be56c305f433047d904338c3d9cdf2398a339614e5530eb4495ec28d609f3a75dfd7dea97d17e0772213f1ecd631ec689bc8744be43bab4b82e36db25bcf00d69f442563aa63d8734e2b7b164b4befd5c287722ebcbe144e93aacb927f5085b85b244704760c3378e0bdf4064896339f14d4e282f2ba5b0a5427f1c6a91f31f32f71e3966d922926de0c96aab6c95d37464abe3b291edd3abe9c388720cb2dbf19c280f3394a0e96ef8cf8af60017dac390954ee0b6d285d201bb5eb99dc27eacfa1bbee0a0aa9d715d17e7f0d5f39d90954ee444a97df16739ff77a9c02b65f308ae8679e0f85c8470523610ce39e4107e1d219ccc8970a088cd4eeaa3f7f3aa619d857c12418cdae4fccaea71c4867308aa64a6d88493d545860de77c8473aa4d38591db8d870ae4338a771772add7a3bef109aec7d039595d3edf1d898174294839125cec8064aecb2b5d269842f53abc4b6392fedcd460dce86721fb2ca99fce3ec788472b3d829d12d926bcb762a514b9d237cef3361d3801038c3f4463073b3d1ff6e966b599b5a47d4f5c23b7d348d1ecde29ca964437b13429b978df9a074bd8719cb4f36dfe1a310cc5936c19c1b4298472098f936c164f4ee608359886016d80493d1ef880de6340473b64d30193de2d8601e8e6016da04338c8b57e622984536c164f4ee60833911c19c63134cc6791e36982311ccb936c164f48863833915c19c67134cc61e101bcc4908e6e19c307344e2f8913f872dc6fa9dcd61ab008d291dd19e0e87dec162c652946da8780ab2d5f936c164acdfd960e6239847dae1d5010e0ad5724ca9588a6ae0457b468409ed0a94e98fcac694060c24ef11fac3bf599a4367b3cce1c8328fe6c4371ce14bf4910361b1e5d2619e237a1e015d900dbf8ebc43ceafe31c8470613610161d7208e723848bec6e69320e18b3b53437a24aa7385b9e47b1d94b3c01c73e6fc9361f7436b2d1c5f6780d877145e59108e5926cd5e2a976b90db357dc3c0474a94d3b1d15867214e97e8473994d385997a9b2e1bc02e15c6e13ce39a1c4f91b84b3c4269c45a1c4f94d84f3189b70b26ef6cc867305c2b9c2269cacbb13b3e16c443857da849375ef6c369c27229cabb85b9ee97d6da24caa06dfbb606c79aee4023a1b015d9d8dddb80a3cfdf72c0c7bb02df1db8de09572c21b29d21d678f5f89cee8e9f13617d43234d8b1c646a88c3d7636a8c722a8c7da0895d15b8e0dea5804b5cc46a88c353c1bd461086ab98d50193d41d8a00e44502b6c84ca3815cc06b50f82bad646a88c7e206c507b20a8eb38a11688c451faf82531c522f6252a3722f1dfb58aff305eec836215b245ab87ab1913219f2b11c0ad4327c271f62c3c0ce31eb37d913dafb7778117a3ff1ddb84de4f91951e6fcf867fac1b09b0d9e9e908e60936c10ce35ec81723981b6c8219c6bd904f413037da04338c33f7a722989b6c8219c6bd904f42304fb4096618f742de89606eb6096618b7f55b83606eb1096618f7423e16c1acb40926a32b231bcc4b10ccad36c10ce3ae369722985576bbdd867147eeff21bcd59c787b2bbcee064175b217efcaaee5dcd586ed03790281abc9f6faa3f4873dc2b8abcd50349eb42d5baeb7abe488e64ecf88e762e7b5461962985d6f47215bddce09b44fd24cdec487ae0717ba0e08dd8ef6f4a80fff26024310cada6c2c2b846faf1e3acb0acb11be93ec58f0eace1e35488b75e785582df3752eb427a10a67a74d5ba2b27626d92cb523c2596713cefc50e29c8d70eeb209674128712e473877db8493f52b5a6c38eb10ce7a4e9ce345e23ab92562af004f9016a13d954b9dd7ab05f4cacb2458f7e31075d969c0f7e7823c18d5fd0d3679d81786720bc00711ce936dc2c9fa2557369c57229c8d36e19c134a9cbf45389b6cc259144a9cdf45389b6dc2c9eaaac0867325c2d96213ce8250e26c4638f7d884333f943837239ca7646be8b85cb62a5b1cc90b057c8e6c9d5a41572d57d0d5847ae8780b02bad71e37d9307a7f74453da57dd99816d6dbaab96b3ab7caaea67e28ecbb315523bb3c351b6b3a0fa58fee1c8de09d66afc3366305c436777917427b3af7466bfa1bc378490c7c63382bdf199ec085701042784636b2f69cec676db6a98caf2278676603debcecc363cbbc2f217867f1d7d03b0cbb7c953b4caa449552689bdc7301462fc3d772ec8960eeb7d7418671cc9dcd4e07a096e4d9f66cf31746fff6e9c84acfb16356ddf4717046b46c3b87ac47567aae4d136dac8eb06ce5e93884f33c9b70e68712e71284f37c9b70168412e73684f3826c0c6ea4374e941fca0504c7219817da04338c0b0836209817d904338c4ba857239817db04338c4ba82b10cc4b6c8219c625d40b11cc4b6d8219c625d48b10cc0336c10c6317f36804f3329b608671126d0182f9399b60867109f59108e6e536c10ce312eaa310cc2b6cea50b24ea4b175287b219c57da8493b579c4f7f50d84f32a9b70b2ba6db1e12c4538afcec6f7b40ac5a1f63dad5b440ce135d95838907ae43d713ddb424768a35ce8cfbab2edca0813e413919d5ecb0979b4825ce73c04806bd4ca8cd87a8cf86200bb1a3282655b917138027b5d36b6a5d060f5871ee3a78d9335a7c2d8328d22bcd7b7e70c67d6769bddcf85f22d54ce1ee4443956a22c711e2a93c060d1ff1ef57acc5a37abcf982d927bccee54f7973ac71a472ce34e206c6d81ee08f00df6b8c88631dbff1ba1bc9113e5a01428754c59fd434672d5fa35a8f4fcbcdd7b26318e8eb2ed993413e1bdc95ef759c6c93a36cfa65fa302e0e66c140054bd1f2b0018cb51b602e02f08e32ddcbb7aad513d7abdc4a0445a2664fbf0d5e5fd10b85bb3617f79ad36582d3ba4ee2af6b0ef55f33584f136ee816500b65806dcae9f2f2be582598460de9e8df6655e926e66b8c79c5e4028efc8c6b0ddec436ed8ae1621bc331b234a608d4b641ddd2295806fb557c94c5e2a4e9103758dce3d6820358830afb49c83c0de658f5377181d6b8e4128efcec62298d99e5e5098ebee1604ef1e9b56a41772f6c5d956a4df8170de6b134ed6eda6d8705e8870de6713ce39a1c4f90b84f37e9b70168512e7e308e70336e164dd48920de73284f3419b70b2ee7cc886b301e17cc8269cac0e5f6c3837229c0f67633f63f8acf8a1b39ff11284ef119b3c9258bfc7c68673249a94f8824d3859d766b0e12c46381fb509674128719e80707e9113673729a0467ea8b651b82e5ee1f32eea82cac62f71e29a2cfc7c211886e15aa448fc2560a09605a783655cb06721d85fcec6a0308c682e13304a096399dbe5b07063a8c72e9b10c2c7ec718109e3dadf41a8a47c9c1325ec29bd4666e26aa19db4a80934c62fb7b095a1dd904d7ec55e2f8d30ee3f730342fb557b3e705710ca25d53f44309fb0096618677e7e89603e6913cc302ea9fe0182f9359b60867149f5b308e6d76d8219c625d5cf20984fd904338c4baabf8f607ec3269861f460ff1682f9b44d30c3b8a4fadb08e6376d8219c68ee52b08e6b76c8219c64da55e4530bf6df70a0bc63e11db0a8b3c3408f21d3b76e55ce830aa963df76229aa8177b4f30caea501c720b4dfe51e5f4a3654e7aa5e247de71841b27d00bc16817c867f5d653c4877a018c690768b63e4987c43d219f6307e2fb8232a63bf678f436c187bf27908e5f76df2fc28e4acfdd92cf34b08e70f6cc2393b94386f45389fb50967512871fe0ce1fca14d385997a4b2e13c01e17cce269cac3d27369ce7239ccfdb8493757763369c3b10ce173871c2895ee91bbe19cbbe08d38f6cb2ba42cef17736abbb13e1fcb14d38678712e76508e74f6cc2392794387f8570be6813cea250e27c02e17cc9269cb342897339c2f9539b70b24e05b3e13c19e1fc994d3859372b67c3b909e17c9913e72811bfaf217068113095e1ddcdd0eb01cf3896c9e620fb5f84f5e79c582779b06e15894e87e9bb2732a2666bea57a171f95f64c39d7bae38d4f6f8781a59eb2fb331fda6adb549da1f14014b15bc1ae3ac5178f78d2d44d6f98a3d9ef261f4a8eb8e50feca5e076fc6f977b632f4cba800f87536365099e5b1d5307f45780182f71bbb7d4318dd15d97c43a6a16cff6a361afc783b3453160f775dff2364adbfe5c439c153d7d709bcf6cdec74b34c247ee09eb5de9fc0857914b2dadfd9e3cc1046dfbbd5c8625fcbe6d6fb90f1ab3d6be60ebdaeeabf10dedfdbb4f29d75b88f0d672794f1ff60134ed6f129369c4508e7eb36e1641d3d65c3598270be61134ed6893c369cf508e79b360d461772aee6641b8cfe02aa8afe6813ced9a1c4f97984f32d9b70ce0925ced711ce3fd984b32894387f8c70be6d134ed6fdc0d87056209c7fb60927ebc6026c38cf4038dfb10927ebf66a6c38b7219c7fc9c6de89b3da6388996d08e44d84efafd9189f8780b7494bd4b277ab47c2072f82e0fdadfd57c0e94a267c73993d516fe7efb6800ce3a4f0fbc822ff610b48c6b9213690739045be6b0b48c6810c3690b310c87fda0292d149810de41604f25fb680645cc2ca06722d02f99e2d20199bde6c20772390efdb0292d149860d642502f96f5b40324ee8b2813c1981fcc016908c5bfcb0816c40203fb4c7b9308c3bcc0984f2234e94600cd502a6bdaa64fcf7a06d77cba58f11381bb0011cc30510bca335c0ff64d3afa8a9155aeaad7cca9513177cac9eb5ebc8867919b2d38fb9478262bbbe83a24d92c37669aff05af83c35fb201bfd241bdfb28c79109b2db3428e4802da6d52d82e5eab3cc005b61e81fd9413ec78e1752a74fd3463cb0740a0fb01db64555418b79a9c8ab2fe7fb3b954cb050a9e9b50102c3636a2c2bbafd76684f57ff6786a8671ffce282a063eb3631b3f5309cb8896ad845d85ac14764acb5ae6af75945827621f21c3c2b3e6a6bd9f0beb768435c289554fac151e42b3920fa3ecde8113de5043764f56728671bbde5c64891d6d8219c62503f90866279b6086f183251311ccce36c10ce3074b2623985d6c8219c66d4ec723985d6d8219c6e5d51310cc6e36c10ce370f21804b3bb4d30c3f8c1921c04b3874d30c3388a341cc1ec6913cc300e788c40307b71c2f4bf7692b10a625b4ed51fe1ec6d13cefc50e23c02e1ec63134ed62fbab1e12c4738fb72e2d43eece096b0070dbd6565e309be2fac8b18be7e9cf80609d8b9b852ed2e07a2763b8fef701eaf9743c4f843b7e1c3d81961eccf89718c886d87e2cefd6c76d46d72d4d18e0b30b30ef3ee30de5ee908800c5e2dc2fc5debb508ee004eb8c1b698626cc4b3cdbddf86d00ee4cefec92a231d53d6098b9111268cd5a8121ac48931c780d1df66538c234a6c9b4dcd407807db5b00304e70b015002fa302600827dab112ed72699f65a2463a7bd5aa6d264194f60ed929136091f4c4dba9c42f758e358e58460f3cb6caab07023c341b252ce5c8502c2d96793fd91cae12f61f08e3b06c0c90e006966eadc6daafe16e500d43308773c21c6d8099ba08082fd8a508ec084eb07ad7e30271a8ed7a7c2342389213a13fc7af304e11972094a338518ef381b2dc091384348b52e72fdde36fe2ad96c671554bef22c4a339110f17f10e600d72b86447529b0de344c81ad4d43f2c1ba3a3e9efdd15c6afb7de8eec738c4d38678712e70508678e4d38e78412e7cf11ceb136e12c0a25cec710ce7136e1649d9367c3b908e11c6f13ce8250e2ac433827d884333f943837209c13b3d1d5cc93bfdd23cc38950bb73f1fdedefa5684705236ba9ae939dd84d181b61f6ab64fce9635badd4d10b457596216063edee642f814b2c66836068a01614deb5a627d3bece347df4118a76477aee850ff7ac6088476aabdd37061fc5cded508edb46c949ff987dcc0f16484707a361cc166b5872318db1cfb58846f463626d8d21b77cf0fe5c8fb3d08e64c9b6086b16d792f82996b13cc302eceba1ec1ccb30966181767dd8d60ceb209661817675d8b60e6db04338c8bb3ae43300b6c8219c639c90308e66c9b60867171d6350866a14d30c3b83dc57d0866914d30c3b83dc5a308e61cbb9db819333e5b07b3331a229e9b8df1cd59adf65a2d87e55c4fa3b02fd8fa06b2d279364da3157296a06cd3685f44380fb709e7ec50e2bc19e13cc2269c734289f38f08e77c9b70168512e74f10ce236dc2c9ba76880de7f108e75136e12c0825ce3311cea36dc2c9da3762c3b91de15c908d4d24f33d8dfa304fa6ed42f0166663e90038232c16b0194083d3e3a9518d7677c1408d14582905e06d029a42ed7d3401215e64d33e20ac33e86c383ba0ee65b14d3859c73cd9704e423817db8493d5f9956f6120c2b9c4269caceb30d870ee403897dad4542ae49cc7646b2a3d84aaa26536e19c1d4a9c57219ccb6dc2392794387f877096d884b3289438bf87701e63134ed6dd11d97096229c2b6cc2c9ba9d1f1bce3d08e74a9b70b27a28b1e1ac44385771e29c22bcebd3a12f5fedf0007f771dcfd822036af278a1f357a39cef64f591bf23c23570825aa6abb9479d0eb5af15f647d65aca094f7f8294726788af96d840b27d82743c02b9c616908cd9990de45004f2585b40323a24b2813c0f812cb30524a39b2c1bc8990864b92d20c3f829fbcb11c80a4e90799ea6510bb97a8d5e4458ec3cb1cbd1a75e9e4154b3d450ba92aba1b4093594d666c37531dd1151c6b94eb6f1d0cf902dafb30926a31f281bcc08b2cce36c8219c691fa7f22cb5c6f134cc6663d1bccf710cce36d82c9d8906283f9018279824d30199bf76c303f443037d80493b165ca06f3230473a34d30c3f87d98ff20989b6c82c9b8ae9d0de6c708e68936c1645cd7ce06f313047333274c7a17eea5ceef5ae17e21a6c2110082c3bf0bf77a04760b2758f7abec2b9d07aaa47b225eaad56e5f32605bc0d51561adb467bbb430eec2d00d7531b7dabb9312637dcfb693d203c84aabec5ec5c9d86b622b04a620cbade6c43b10555a7b64a5042ee0eee7ccb2b486733f17c42a64a335d97072c0353f555db1d7f76c369983706ecb46699a98e5d3294fc3b82f5d6f94ddb767a3cea7669be2ebfc306ec9320359e98e6c34f733a9f319c7ebd96cf473086cadad60c3f86db88b10d8936c051bc6af6e2e446077da0a96b175ca06b60081adb3152ce3cc131bd85c047697ad60c3d8c01a8dc0eeb6152ce3e82a1bd8b310d87a5bc132ce01b0813d0d816db0156c1847ae8e43604fb6152ce3682b1bd875086c232758bd3378a168879dc1d9f0ed47f89aec190308e37e8dab10ca669b9681b36e40c436d1371a8d4eb5d8849375c71c369c8b11ce3d36e164ddcf89eff3521267d7ce1ee14b138417cbc84274dde55c6ee937532c13e0eaedee7e53e59caf94b575b3d8e264d70dce3f7f69b0c9f967ba1e914bc99688bda2415e0579d552f62ee72e68d624f2e0e31aa78049f450261195a5f5428779b3f30c7ccd1b42df27ca85bb774fa9f35b7b17b4482451b93167ec13ea10027c547d876894318edfdb271ae92639b91f28827801c0a8d2557fb4a844d513b54e9c2ba5268dce339d6438ae094523bdd1999e402a91ad9c26a955ea8574d1082c42a896e698fc3968006c57565e2f62dffb01df8aedcebf3a19e200f454a9e729fc24184f4486ad59ad929c2b9db02ae5b1a23546b951e7b14891f3cb6dcbcd6c6dc5cd548b0776a9337d3db54cb096e4d2f6824944cca5445d9bd979aa18b95913dedf2653a8464a2d4919d3d4f1a3f34caf24a9920b8b610fe9f8ef837457c92ecd7468a4a7f3d75a27e55de160d88d32cb348a575775109dff1f98ad66095e2e0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/08cbf49934912ea4c80ee79aa2c179b6.asset.meta b/Assets/SerializedUdonPrograms/08cbf49934912ea4c80ee79aa2c179b6.asset.meta new file mode 100644 index 0000000..155b362 --- /dev/null +++ b/Assets/SerializedUdonPrograms/08cbf49934912ea4c80ee79aa2c179b6.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7c18776666af33a4aa2967e7ded082a3 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/09c0c4402f33e734592e05288a881890.asset b/Assets/SerializedUdonPrograms/09c0c4402f33e734592e05288a881890.asset index e95e9b9..20daa24 100644 --- a/Assets/SerializedUdonPrograms/09c0c4402f33e734592e05288a881890.asset +++ b/Assets/SerializedUdonPrograms/09c0c4402f33e734592e05288a881890.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7f7c0e780e0c55d4309103481e02e099022c5d2d2d2164b08b4414ad0babb507777777777777777f7f6bf333b73f77632efb27b7bef32cbef0f9f64b3bbb36fe67de7cd9bd9b1ad95c79c7fb17eceaf1dd81c36890d6025ac94ad66ab9cbf2639c795ce7ff74c5d9fc5d63ac772e7f762e75e3f965dcd93fc5faf583be777b17356c9d6394fae674b9de30a717f2e2b73fe2e769e2d73cef8d565ce4f99132a56c779a88415b2edd94cd636d6ba1a113b88872ae5b518d72b56dff93d916d76ee968944f148f2c4adb6ceafb9ce9d4a716fa59368156e01db55a8b5d2b9b7d479662dab70642e1112ebdf3c87893f987be8248f9de5b1a3f3d340fe5d5bfe5d5ffe0dc3f3eb5cbb5d9284ed02c22a995d9d9f2ce7e777799eed9ed7da479e7773cf63ad34190d818c6de5b1bb3ce6c8630fe7a7aef3e7df3ed29fec5e4b29e71f79de4a9eff0bce55daf8f5ffe4795bf7bc9662db4e9ec7e4797bed3cd5f4f5948c4ed71835f299770de5b15735e193c968248fb921643466c2866a9d9f246c171056c5d3dbd55f845336cb8f37803037c8631dc9bc96763d4b5eafad5daf8b5caf875cafaf5def238f3782b4dca83d73937ca60e3877feae73b626e366192e0ba419ca53f7eb6acfdd22afd7033ac1e76e419ebb557bae9ef6dcadc873b769cfd5d79ebb4d7b4e5dcf01e7fc7e7d57c7daa5f27a5ff7bccee349ecc34f79e92f8f77c8781a80737ebc5d5e6f08ce9dfcc8eae7c69fa57cdc0079bc5393736735720e4892c67ce6f57ffd34b67769b6729794f9b8fb1c471ab7737ebc5b866fa4c9bb5b93d7d82baf9e6235481e5f96e1b691e703b574a9fb75b5fb39205e785fe5c1fbf27a1370ce8f6f21f11568f7f5f854bd3540bb3f580bf781bcdf543b6f96246f545a94cef7c8679a8373875dfdf9d5b01b520d3b753f5dec943c8c9dba8fb11baa854b859dd2f54396f083ca46954dde2fe5b40061d5757e7c96796dff5957062f5e1e7fa8e4dd2bc3b704e750ee47dafd8fe4f1639046c5fa1370ed63708d1f5f91725a8173275d0d6e665e7fabd2f5a016ef835aba943db406e7d0dfa8f8da68f1bd9e84bf929d03ce818fad5f21af0f0bc8728481d548706db43c8e02d794ecfbc03568030ddc30799fcb6bc3e5f10110fe3ecd361e605e9b1d13903dd44371867a8c35e8a1643f64d0e3e1247a3c02c23f04c2ab7b508f71f2584f93ffa8a6c7a3063dc6fbd443c97ecca0c7e349f47802847f0c8457f7a01e13e4b1be26ff494d8f2743e8a1643f65d0e3e9247a3c03c23f05c2ab7b508f3ce6f5450dc0b95306b739400bf71cf3d6bfcf316f3954721a7be534998ae4fbf31a2ffdfe0bdafd17e4f1452d1d2f6ae97849de6faba55fafa35a8374a8e7e0fd76daf3ca573500e75cbfcbb570af6ae97b551e0b34398dbd729aaed1f25e71784de3a0df7f5dbbaf7ce71b5a3aded038bd897052f755ddda1aa4433d07ef2b4e7a1df836f3d6816f6bf2df6109bf6d7a5edd6f2fcf2722e1ded5e279578be73d4d4ff5dc2496282befc963218b97ad66aaad9e6adb7cb23c7ea6d9cd67f2f829f3b6a93f75756b26dbbfcd543fc21479fc5c93f3797239cd93a5712af3b6cd8b98b78c7cc1bced932fa4cc52f7b9e6ea7d4eddff92796dad085c87f21a7be5b5b85d9ecbf625ffd3d3de2bf6a62b7ebfae763f07c40befcb3c88c598a77d29cef9b116125f81765f8f4fb52fa768f7b7f3868bd5669ef665fc3c48dbfc2be66d9b7fe5b26bf97335eca655c34edd4f173b250f63a7ee63eca67bc3a5c46e86667fdbb3441957e57116b8a6cad66c162ff705c7c86b33e5f16b10fe6b799c238fdfc8347500e74edeb452fd57a634ce9547d5765469fd9679fdf8b7f25862887f07704db54b7704d794ecefc03515cff7095d07e6ca6bf3e4f10710fe3b105edd83f9a5de0deb6af27fd4f4f8d1a71eaa1d04f550b27f32e8f173123d7e01e17f02e1d53da8c74ef2584f93ffaba6c7af21f450b27f33e8f17b123dfe00e17f03e1d53da8c7cef2585f93ffa7a6c79f21f450b2ff32e8f177123dfe01e1ff02e1d53da8471d4deebfcc5bbfabbe6ae5b7fe63defa5d7f5edd57ed8805dafd5d0c1c764de8d24ebd4fa6da0e50e959e81e63aadfb62338777eda3d9d44d66ef2a87cb9eae3ad03ce9dbfdbd771d3dc7eb437ee585de6ad9f7703d7a1bcc65e791df2657855c734625e9fbf085c87721bca709db473e5bb555da2fa9e3b83731e6f276f38b6441e17cbf05db4fb4bb578f4fba5f27ad7248cb57a379eb60e5ada54fd50a6e5cdb284cd741a2e8f9d34d9d26663f535d9f5a56cd5a62bd7642f4fc8ceb91f91adeadd069a6c399ed5b150865ba1c9de3d213b7b1f4d3696ef7b78e346f33fbb9afc6face5bf1c37e95413f98fe4953837bda72c9371aafbca3f29fb69c2e27e25d60484e5c7a6cc5b7e9bba72b3c74b19595a1ccd99c787c79a6b725b68f7655a62cd401a24fb584b8d794b37eecee3dd783babb68bcafbd65ade5780eb308d6a4cb09376de4cda967a4f54696ea5a5a3959b8eaef7cb702bbd3ce3f950b79af4a9e772b4fb75b5fbea7d7c99f7be621a7fbe8d96ffeaf9ceda7d5dfe2acd3e947c950f6a4cb5093887dc747d566bf7557ceaa8f2418dc5b604e7d0563a30ef7bbd92bf46bbafe4eee90d17ebc83cedf2c065b423725f2fa3ba5e9d34bd949d29bd3a7bf58a73eeec955b257f9b80fce5be4ff977cc0fa876463a7cc8ee320d72bcbd8a0fe9ca12e5b72b08cb8fd9cceb43b25db939874819595a1cdb6afcb6d5e476d7eecb3908b16e200ddde4318779cb6e8e1b77b743dc78bba9be1e55467b32b30fe9a9a5b137f3fa10752e7d488e1aaf5479de434b470fc940f15debe589fa103d7deab91ced7e5dedbef221bb7bef2ba6f1e77b69f9af9eefacddd7e52b1fd24593aff22197797d48aec64dd767b5765ff7212a1ffa68b600ed911ffb32af0f51f2d768f7751f22c3c5d43860aa3ea41f721ff3214aaffe9a5efd35bdd478a1f221ddb4eb5dbde1e3f9db15e42fafeb549f72267cc87299863c66f621f92c517ef341587e1cc8bc3e64a02b37578d7d6469711468fc0a34b983b5fb72ac3a3608a44195b921cc5b7687b871f790fd9f3db399b78c0ed36cba025c87691cc9bc3e449d4b1f927bbed7666243b5740c950cd4b845a59727ea43f4f4a9e772b4fb75b5fbca872cf7de574ce3cf0fd7f25f3ddf59bbafcb573e244f93afd23d82797dc8088d9baecf6aedbeee43543e8cd26c6194662ba399d78728f96bb4fbba0f91e1626358381f3206b98ff910a5d7584dafb19a5ee3bc7ac5398ff3caad92bff9207f1d3beda1c6e0c3f810bdef613cf3f63d8c77c3f49e9a44d63ae6b1ffd804e6f51913a48c03dc74f7bedd1b776c22f3f63dac03d7a1bcc65e797dd4388de23749b3c745e03a945bc8bce55f9dfbe973c77cadd2bd88559df3a1e29dcc3cfe375604aef3a3eaefae03ce9dbff3ae9672b23479c59a9d156b72b7d3eecbb187d85490c67a9acce9da33d33599d3bcb61bb71b3056169b06aef1e30cf94c3770eee8d5f7726f7835f68d867f1da41f3eb79e79cba92a8f4aa7999a4e33359d54feb7f6ca671be4f9f69a7d6e9447e5e766796d419cabe7f871b666bfb35d7dfafdec0d17ef9f9923c36f0bcef971aebc5e5b4bdf5c2d9dddbdd745b806de67940e4257e843956e39e01cdab9fefcb490cfcf0cf97c61c8e7f531ad6a9e8fc7d7b59af06dab89af658acf17867c7e66c8e7a7857c7eaaf7795506e3759ce223ebb83e8be4fd30759cf2cd703c43b5617690721a8073a76ce65fac852b611e1f20ce61ba77d4ec6c14b8ce8ff3e4fd1c4dee3c4d7e7757effc87bd72e2f16872d4f362be1094d343bb3f1ce81e74aefa0e1ac7f9cc5b4fcd77990d5ce4a67da0ea1f948c623b79d92979b19d34798d3579cf7be588b1a2643aa8f8166879bac0955790ab85db55cbd35d35d6bb6836b623b8ce8f3b6b79aad2d907dc07e74cd95a4f8d8392b79bc6753799ee6c2d1f54fa167a6d4ec989cb5da4a5bf043c07d3a787efe9e66381aa077734e8056d50c9a92e7f92d998aae31603192abe25ac6a9b4ad5ad4b99b74db5045ce747d556af03ce9dbf87c83a3adea652f29631af7f5aa6c92dd7eecb7198d872904655ffaf485c8b2d07d7f8b14cca6905ce9d740d56639e75b574edaec5bbbb96ae3d98b70da3c65f666bf1b5f1c637245793a3f8672518a97b71bb5bc23c3ebae066f02c0f3733841da87a45d968858cab1738e7e9fe1c84e7f773bdcf89ebc9d2a0e2db2c8f9ba4fc95525e6f70ce8fabe4f53e5af8d5f27a5fedfa1a795dbda3ec0de4a8e754387edc5386cf06e7fcb9bd12f931fb7a796d1f6f5c6c5fa0ebfef2b85fe2b989eafd41a5bd35087f80766fb7c473ed8ef0c1ef20793c50a67badc64ff5e7556afc54f875f27a7fedba6ad3abf9c9070339ea39158e1f3768fc54bbc3c4ef106f5c1e7eea1dc22fbf4399a76c04e6a7dea30e63a9971935375e9519d506eb08ce9d323322db1b8e1d5e4d9c6d403890a7a1d3b7494bdf2699bef35d6e23bef73e17dbcc3c652ca6caec91f27c2f793f0f9cc3781a7ae319a9fb8a237c723842cacb4f12d60f87a398d7e683ca39dee5149fd32dc7a3627b4bb903b5ebfb324fd913e7fcb89fbcaed6eeb403d7f951fa92d801325c013877388e5aae85db47861beca66ff4fbdaf5988c678bbc7eb816bf4a9fe23c043cafc2c3fb6aadce09f2fa515e79b113e43903e7fc78b4bc3e4c937f94765fc9571c0fd2384adf173b468b57c93b565e57f9d40e8487f7553c6a7c57d51527c9fb23c0b9c37df4e35ebe9ee77878f92ec0549be840966887289f9703c2c0f7961393ebcc4ed2f24add57ed9563e5f583e5f526e09c1f0f61de3eba93bce989dfafabdd577de0c721f7551ff781dafd93bde16287cafb4dc139bf6fa827628769767b8ad96e4538689f2a1f54be9eaad9adb277c5ea48903fcaa7295b1ea5c57184765fc5719a66bb2a8ee3101b3d0c8487f7877aed246ea343b4e7543e28db6e0fc2c3fb7a193d9e99cbcaf1f2b845de1f0dce61591ea3a5ef442d7d2768d7555950724e46e29776123b458bff14affdc5cbe45870ee94c9f1cacee4bb6fec542d1fda81ebfc789a26afc02b6fc2782ddc1932dc3870ce8fa703db51efddaa9e3d9379dbce674ad92acfced09e3b9355f5136725cac576bfbbc709eadde96cf77c528ef6ccd12cf5b6ccb9cc5bb79d23659fe5cde7b8bd9d258f72bd41ec1c8de739aece13b768f2ce45e49d2b8fe7c9fb321fd8795a3ce76bf971be3c5e00749771b1f301d70be43515ced175ba5ad7938c8b6ad77700f22f9447599fb38bc03d5987b38b13f14c51ef4c9778f32d69bc6a8ee08540870b5da693664939aa9dabeaa18b249b09e09cdfef039ee7f73b68f2ae4e921e65d31727d2118fef122dbe4bb4f82e95f79b837327bea2595e39f1f0d7c8f013c1393f5eafe5f9f5789a989a1f310984817a5cc7bc65f33a374d852f7bc3c7ae64de36c79552ce784d4e374dced76edee83ac66ed058dd00d2cbcfd57e041dc03967858dfff1fcbf5fde53ef4ed04695be97836b97ca6b57806baa5fe362105e85e1f7553fc965327d85f2fa65c979b1cbc1757ebc4ade2f02e73c9ca9fe5732afd6f2e06acd4e741fafece55a2d8f0ac0b9c374cad35a38b537865abfafeaac9bb57894bf557b590c01cfabf0f0beaa8355dd74ab575efcb95be5f136cd160ac0394ff73e5a38ac5cdc99c8df98da3762b29696dbb5b4a8fc54fb550cd4d278bb765fe996cc8749ff1353fb3ff406e7fca8f68de803cef9f11e66cedf7be451ae0b8fdda771bacfe5b4dddb5ab8fbb5fc556d9507bdf18870ea3a3f3ec4bc6d12b98e3af600f3b48998b2d78799f7bdf761373dc5eabd55f150ebaffb82737eff484d4e9e2647b517947d3eaa71521c1ed3ecf37e101edee779e894bbe2cf35b98f6b72551bff0944eee3da7d651b2a5f9f04f6f8803c3ec5bcfef049709d1f9f96f7eb807390b7ec0a4d9e7a5eada59e08cef951ad8156ebca54dd08db5ecfca6b7adb0bc88ffb00b5a65cf6c516fbd9ffe94c796c938893c97694a76f4bf525ab75dd7a5b49aeef8ec9719a985a8f5d00ce1d56d3e769e1d4fa6c550e549b58adab1e04c2a9ebfca8d6458f06e7fca8d6538f03e7fcf812d045b5a35f47e250730bded0e2906ba2636a8df554201b5ef7b36e40d5dd17c867d5fa6a55575d05aef3f3f3e5b95a47dd099cf3fba6be4d25fb6dafec98f2456acdb4eed3de9147b9363aa6d644178073272f679fac857b5fcb4be5d33ed038bf0faef3a3dca323f69116cf476e3c33d769e13e655e5fa7d87cecb54d114e5de7c74fe4fd62edbe5a733d019c435fa1d6527700e7205d713dbf40f4fc421ed5bae7f1da731f23cfe9e9de0e9cf3f81f96f9adde3715b7af80ad6ff199b6af355d0bc0b913d7f6e3b5706a9df114700e99295d3b80732ee772cd36d59a58d54fd9165ce747b5ce55e659bcadf01da28f5c871a93fdc6b11f347d7e90b65ba88553eb37c781737e046b43c5df3c0daa1dfb33f3b6db7f96b2d5ba75f50ea374556b5d5519bf065ce7c7df99b73daad66e9adaa36a5daa6a4319c623e2e985befd5aafad18c72814e39f10c6728d6cec37cd9e113de3fa69f2e2fe46c9fb599397cc7f3697acd5f8c075801597a5d6bb4ed3ced5ba71b5de43ad776d00ce1db9730ed1e4c135ac6a6ea01a0b556dde2edafda54086e9be3e77d4f79ad1ac9858073a9595b1c56c0dcb139bfaf196acdfad3fd593d56ffa29d6e58b5e73c677ffe4d1ae639b9d47cb4c3b6f96887d3dd739d635c8b8f3667bb1664fc53e49fc5eec84582184cea855258a3baa44c11357e1fc2f03db86563ad7a7885d47f9c6a12b9c3b03d874e7c89f5ac406b205ce7faf941d9c682bd87ae76c9ef37b8d90b7c84976d590d5a9c4b718d59f99e3c87477405de95c5140d738e715228573c5ef0d22a56522f5c5ceb575623fd655ac9c4d748e9b446c55755febfc6d8a739e44664ea3792354ecbabbddaacaa642471b9efa3c6193ff9f233591231c7ddd19b21cd6c9136f204755c989ff67e83a19de695c2c650c14c8629e6b83589e98eb33a70ac1e03a56d5d06cdf2eefa16c70525dcc64787677141a2472f8e536bfd69a5b347e429657b502965797abd6a91ad59281e5f272c54ad5202a6465d5c9e709d5f1c74cf8c554f3b919c4ef865b21c205cf80baa2f2f3668058fa3acff96393f35321f0ac746e963b6785ce631b9da82a9ce362a75a9de1fc5e25efad6555722c9f8baf27a057ad52ab4b3886bd9609bb18d99d5723568f6dc69d1c7cfdb81609f079a21dd62e897962718906542dd98a5205e8f51983878dca1f714196395f1a8a7c4925362c676a9b72a661a60b44f53540b27c6914d72b912ffc9f996163c4b6ab4b0346b08e8960a39ab16d9ef6d46c9b4f7be8af3134f36b92d40693a5002398652228de5b4b3248707b2785bbcb76636a0c9bfa66d84c306c5f453b3f69c028d63550cce7149b9b92d5404b9658626a165c0f13dc22a4e0fa98e0962105373019d436992e92fcde6a218557b8c1cd898f2cf6d5dd9ad99e5a2365b2fa2460d6d4d094371c611b63aaf4cc698d674e234c72dbb0921b6392db8595bc8dc9a0c40cb2ccb7da53ab23b9af69ebbb8eecc09235ba83d6904d4cf4c43cb75d48e955ed4c527f4d749e5dee70d8207a08d63bcf9b3a9f9213ede8dbdb771234b399a94b2c588a30c24d4d96cfb177c6b25d37fe0eb8f1373309e73176f1e3a63be1829b63e5b56bd8f2da02e3916de0110bc8a3a5c99c05a4651931e7b9ce2bdd342789f0256f80bc8bbff695794c4ac9486ee2dd7c9bf8b6c2c4fb00134f672a31b36f65ca0961550b6b3027dcd7f075a210970997b9cc793a28fbeebed9e708f6ddab65ef375d18edd658a1ea910627d3c69495a21897d5605616576bb041b3b5a7ef6ced25b2b577b5d99a4a1ab12c6e6bca05e1ef166438170a9d94af737e127fa91efba0c4737d13ef2d887735120f921e8c6e3b135de1c316d738dd4221498d982c76246d0e4cba8f6fd27d05e91e3e49fb4b1b46bdbdc96d71eafdfc345ffae22eab03d67ce91fb6f9d211f3b403d2e0693b9984f3d7bd3c56b51bed3fe75f15e18d71e19db194e71b525e3b60cabb60c0071a80c78200ef8a31196460728029d949986463c20b0cc2b70414de0d133ed820fcfc80c2b735392cd10c3830230eabba990353c4c742cb3cdd662aded562b897a7480d1dcf718ecb442af8759e8aea671c24777843e27cc0808068c91401d756f35af0f9a60dc58b98d91d0f13eed8ae3463eebcbbc9e07917255f985365588cbf0c2c94dd163cfe55e2d62c27069e9bfc3a9fed51a54cd4c3cb440ee6e146183c5cd057cb1ea602271a65ab6ab4c01539bff9bc8b4af1f70699bdf344dc89d1c03045892f87eb6ca8d944ed6634da51c26807f930da74a41e33c79e98ff1d6df0bf0fc782f9df5e588537c650e1056a61e46292c78695dc1b0332ce04a45630207db0c237de50f858c0c2d7174bf90443caafae132ce5fdb0944f4c43cafb9bdc8678db5841ea364aa4ffdc2c8a58b9284c5066a226e0052c5968ee026630fe25edf5221dc99d055fbbe6ef45a3503809ce872ead986b1880d55445a6e407a882f24cd92d5e7332395e0ae782a4365e3ad977364e61e6f1523f69c0b2271f2bee530dc57d4b56b0e23ed024bcb138353419c59b646aa3c1622bcd3accfd37c0f9572f2bc848e920533ab9779f6648673e6fdaf239cbb544a6cc1099322049d932b5128397ae2afa0cc3f529c0dcec4c839bad15d0cd0ec60a34df0bab4ad373bab0dbaa00b2d9de8eededeb1c5ddb2d7354e57faf767e73e5cb65bf122f97d9622c689de3e0573b0de8fece95c502589973a72cde92e112070a89cb44c95d299ee3b25db4fcfe20e7fe48e758e01cbb05f236434c5a73539e6532118e6f76389b1c8a619e63c2bc282d98538799cd36b2e5d29d668b21bc554e4c15522e9ff85a2abab1f85df7f935426eb94845a5f33f58760cc3dcd65c83db3ab96130b735dc54b388dea84c8e734f7042714bdf9c429d32cf779d52c2cc63dcc963c76a9311a66ce9c8dc3d0cabadec4bf02c1969ca12d18797c9097aba070f96293bface94f9cc3c39afbaf8b16c1965a2273a296767909e9f89e366723bf926b7b320d7ba8a5649e75623d4469b8c9953e3a3400db4e4149a6ad19d71831e8339b05d0c0e6c9746c11cd8582ce5bb1a525e2f60cac76129dfcd90f29cc6c1523e1eabf5169a6a3d664a7a925a630296f44586a47f1d30e91331e18b0dc2a7360b267c9249386fd1f1056f615f9c0b31e14bd320bc08135e9a06e1934dc2f92b7f99c963e8820b71c153303b5ce6477012139c8a5949b9c14afa350f6625c526e13cfc7286345279cf488846ea7618a6dd4dc595bf7d046da4f2cac8c6f7816918ea3d30d415e1504fc750af34a15e9236d4d17927988115ad5586a235be55b0a235137363abd3e0c6b6c784af4983f05926e1dc47ee19d247cec62c726d481f3907c35169c0611c9b4f82632e6625eb4c0eb875302b996712cedf7fd6fb4192e4fda70413bc21a4e01d30d61bd3607a3b9a84f376e8263fa94ed2069d8f65e2664326fe1c301377c284ef65107e779b60c277c684ef6d107e48db60c21760c2f731089fd52e98f05d304bd9370d96b22b267cbf3408df0d13be7f1a842f3409e73d1307f8b1f1f9b8e04526c1dc6bf25927552a7cde2116b4c25f272beff2145a55c1aae6c5982e079974e137b23db106896b0916d7c1a6b8f814b885ceff7ce767699541307e678d986bc7c90649c5522c15879852d102a462a56cfcb8b358534f41299682434d29680852b0d071dc6bc5d044b07abb0c733f87997c5b8760ee671956880f4f43212ec7527e8421e5ef074cf9722ce547a621e52bb0941f6548f9e88ec152be3b96f2a3d390f23d4cc2b9751d63b24f3e94b840fab25d1ddfb040faa191f2a5c3bd365f1cfbb3b1ceef22e0b3960a4115ce5f7c71c51ae7da72e15f36894ecc3271b534a04fabc0d27fac29fdbc0b3691a289ce8d4ae159954e23a53ebb1a06665c9fadbf40ad14212ae5b8affb2ae6ea57c9dc0ed9cde2c9203aad34e9c40de4b8f80dedad566c185e8fb9ff06b8ff82bdd8aec28c6c8bc1c8ea0434b2d598f0130cc2b3020a5f83093fd120bc6e40e17b62e67592c9bc727c150ff7bd3ccf390e96d7dca2b2371b22c30e758e410c662d6630276306734a6883a9c4e23c158bf3b4d071aec3b2faf43478c2f526e1bc09c977800fd384dc80913a132325f671cf82a48271da88713a3b0d9c369984f3a6d3397e38f5c2056f3609e695e8b9ac6a257afbd06095e85e58413ecf4faa9394bdbd31c1e79b3c441f114e2d8eca6689b586a54ec9e7fd717c3c6c8cf4217c9c8c57236effdc18e94ddcab2b1c95dc6b83027a8b7d30ce1718387f1f90f3be98755c18d23af63309e6b344f9e6c0a16689ee8f49be38ace40330d2971848e70e0b46fa408cf4a521491f84a5fa3243aa7f0f98ea83b1e272b9a9b8f4468a4bb6687dad15ad2d73b149dc87c526786139048371850146fef060300ec5845f6910be3ca0f0c34cc27925c077500e5b091c6e109e27d644f1aeb54c2d1f540d78b596bb449881be1c4f854a3ebbe16a53a931ce6ee0bbd3e6c6ba307dc160b0d460f31d8e3091156bc26a66fef43c06576a0f727448effce96b7d73bf8e55377f3a7c5ab15c39d2942bd9f4b9126e0783b9f1b643d0e5b37ce75e7d094c6de6fe33e7ce0df1dca14b33963b479972a79bedb95314afa282e6ce8d86dc614973e7a634e54eb23463b973345611dd9c868ae8189370ee9b6f31f9155df035b8e0634d82f980edad7e042719b03dce2498b7406ef323384953e578ac3571bba135f1f8c860ad892d58aaf9b6c755da6dfc34f1e212448913b078ee34c5c34d7ba973b25814e7ca40319d88e1bacb802b7b6c305c279984f3f077c76f68effce23b3aa94f4c39d91421d7fe5e1337de0fca17c2ee294e794e650b826ea137b7a8bd3d9fb0559d182152afa3aa4b2b91376364b757901c3a05d3e93e934ebc7a72531d248e53b138ee37c5c16f78390489eb342cae07b03294dad8dbe9583c0f62f124f23e483c676025e82143091a3e2158093ad3249cbfde3eecc74d2679bd3dcb249857478fb0f0d5d1d91892470d48660544720e96f2c7d290f273b1943f6e48f9c501537e1e26fc0983f02d1383093f1fc3f2641ab05c6012cedb174ff931c324ed8b0b31244f1b90fc1e10c94558e1792664e1b9d82498f795f1cf7185ea2bbb04e3f19c8147fd49c1785c6a12ce13f33c3354c77c1d0eff2c97dca622c092bfcb30255e3428913d399812979b8473f7cc3fb355c5ad7325f4d6bb1aa44cb4ef47c6a7a60471fc57606abe6c50f3e6ed82a9792526fc1583f097a707137e15c6f0551343fe0ac99b49eea6b5ee507175cd246f93676040b25763cabf6650fefa59c194bf0653fe7593f27c5b86996286126c61670b18cb98bbf4a9548c7eaf115b9828e34a0628088a6b31146f1850349e1d0cc575188a37313b58e0d982631e9bcfa63b0afafdb4011fe50da2fcf558fade32a5af9508e7f3230b015271832915bc66e51fca0b5bb3de88097f270dc26f3209e7f514ff245fa87aea6683e43cb139159f4a63c3fe166a797efafa68f9770dfdf5d1becf783f13df148236bd585fd32da67ce7bb197c605241cff62978b6df8a09fe30a4e0db30c11f85147c3b56043e0e5b04eec0247f1256f29d98e44fc34abe0b93fc5958c9779b24733ff6791afcd83d58b2bf089bec7b4d92b91ffbd28fddbd8f0bbecf249857c55ff9119ca48beb7e0cf4d76900fd0086e39b90381ec4caf7b721cbf74318e7ef42727e18e3fc7d1a383f82e1f821248e4731c13f8614fc18c6f9a7909c1fc738ff9c06ce4f60387e0989e3494cf0af21053f8571fe2d24e7a731cebfa781f333188e3f42e278d624987b7efe21d6509eff398cc75f69e0f13cc6e3ef903c5ec004ff1352f08b188e7fd380e3254cf87f6910feb249b898601b0b3792f80a667bb15848db7b15e3512b169ec76b9889d4f6c3238989bc8e09ae1352f01b188eac34e07813135e370dc2dfc26caf5e48db7b1b4b75fd34a4fa1d4c788334087f1713de300dc2dfc384374a83f0f70dc2f3c4e6c67ced51e6fb34d2b1575ff21e8dc67eac74064eec03ccfcb70969fe1f62f9dc240df9fc9149389fd3d2d44faa93cc69f9d864407c350cf167883083a0339c662652c6aeb0e631f519228a54621d609f98b298e7440b3f59ccd38c08fed42498b7095a866d137c86496e1556f2e798e4d661257f81496e1356f2979803689b0607f01596ec766193fd3596ecf66948f63758b23b844df6b726c9bcdba7a39fe2f23e2ef83b9360fe36dbc98fe0246fb3df63a03ba701f40f188e2e2171fc6812cc5bd05d43b6a07fc2386787e4fc33c6b95b1a38ff82e1d836248e5f31c1dd430afe0de39c1392f3ef18e71e69e0fc0786a367481c7f62827b8514fc17c6393724e7bf31cebdd3c0f91f0c479f9038fec552dd370da9fe0f13de2f0dc2791f8cf10da17fc837849849307f591b10f29da61696e2bc9029ae8d09ce0f29b88e49b0f80857d876411626795058c9754d92b9d115a4c1e8ea61c91e1c36d9f531c943c24a6e80491e1a567243ccee8685b4bb4698e0e1210537c6588c08cb621bccec46a6c1ec9a60c247a54178538cc9e8b04c9a9924f38f498ff1938dc93e266d12cc9bd1634336a35b9804f30e9c71213b705a6290c78785dc0a933c21ace4d658299c18b214b6c1cc79521accb92d567d1786acbedb61388a42e2686f12cc1b77934336ee3a60299e1232c51d31c153430aee84a1280e89a23396e2ed42a6b80b66cbd3d260cb5d31e1d3d3203c1b731c33c23a8e6e98df9f19d2ef6f8bf9fded43fafdee98df9f15d2efe76090678785dc03933c27ace49e5859991bb2acf4c2cc795e1acc3917f3fb2521fd7e6f0cc70e2171f4c19cdd8e219d5d5f2cc5f343a6b81f2678a79082fb6328760e89620096e20521539c87d9f22e69b0e57c4cf8ae69103e10731cbb85751c8330bfbf30a4df2fc0fcfea2907e7f30e6f71787f4fb4330c84bc2421e8a495e1a56f230acac94862c2bc331732e4b83398fc0fcfeb2907e7f2486a33c248e5198b35b1ed2d98dc652bc22648ac76082770f29782c86628f9028c66129ae0899e2f158f15b19b6f84dc024af0a2b792256fe56a7a1fc4dc248af0949ba1013bc6748c145188eb569c03119135e9906e15330135917d644a66255f7fa9055773156756f0859756f8755dd1b4356ddd330bbdb14d2eea663ce6e7348673703338bbdc29ac54c2cc97b874cf2f65831d9270dc56416267cdf34089f8dc1de2f2cec3958b2f74f43b2e79a84f371ef03fce4649271ef7926c1fc9b3d07fa119cec6340188e83d28063072c170f0e9b8b3b62c93e240dc99e8f25fbd0b0c9de094bf6616948f6ce988d1c1ed24616603c8e08cb63178cc79169e0b12b26fca83408df0d63727458260bb1641f9386642fc2841f9b06e18b31e1c7a541f8124cf8f16910be1413be250dc24b31533921aca99461924f0c2b7919d6a03c296483b21c6b509e1cb241b9dc2438c7393dc58fe02453c65760824f0d297877acd9775ac866df1e58dbfaf4906deb0accdece086b6f2b4d92f9066567fa4972920dca56612cce0ac962b54970b6737a762cc9b6b67a0437e011acc17cd23969f0497b6258ce0d89652d9691e785ccc84a2cc5e7874cf13a93e06ecee9054132f2263c82f558ca2f0c99f20d98e08b420ade8895f38bc396f34d98e44bc24ade8c95c74bd3541ef7c2927e59d8a4ef6d909cd7c3398df1ef646672e3ef42c6f73a5e0cfe9ae73cb107e35b1c05dddefbf2185fb2ecc592d7936b952dae858bbbb990bc90f175666b0470f3fab52b627cd2793a62c4d6aaed63b20bbe97d9957e4a615fdc2cf6c58af755218bf77e26c1dcdeae3664593ecf32036d3dbe2bf086cefe587cd7d0c477005652af0d5b520fc4eae4ebd250271f84e5f7f521f3fb6093603e7877831fc14906ef0ec1527c63c8141f8a09be29a4e0c3b0c27a73c8c27a3866e3b7d0d8f811587cb7d2c47724f616745bc8b7a0a330456ea751e4682cbe3b68e23b068bef4e9af88ec5e2bb8b26bee3b0f8eea689ef782cbe7b68e2db82c5772f4d7c2798e26be99cdee7a7a0f5c63dd4899822f7d3287212560b3f10b6163e19d3e4411a4d4ec1e27b8826be53b1f81ea689ef342cbe4768e23bdd141fdfd7fd513f269e645ff7334c82f9b0f9637e0427f9f8e999982d3f1ed696cfc2d83f41c3fe6c2cbe2769e23b0723f7545872e7629a3c4da3c9799826cf84d5e47ccc6c9f0d69b617609d71cf85ec8cbb1063f17c581617616f582fa4e10deb628cc78b21795c82a5faa534a4fa520cf6cb61615f8639e257423ae2cb4d3d5a3c7c6c39ab899d946630f71b5e6b9d2b5c9ff4eea6f4aa8996b137ea35d11bd58fe1bb29854d29d64b75852947f8c711627b91e688ea752b7152c8ef0ff07c80807fb66f95d47799a3af92571c0f5f14ff7614ff8405bfbf425c819feec3a427cfb5d77de7da1b22d7c63256a3da60397b25d657f266c8be92ab30c16f85147c3526f8ed9082afc19a04efd03409aec5e27b9726beebb09ae0bdb035c1f55813e4fd904d901bb09af18334d48c37623c3e0ccbe326ac9ff0a390fd84376326f3318dc9dc82c5f7094d7cb762f17d4a13df6d587c9fd1c4773b16dfe734f1dd81c5f7054d7c77624dc22f433609efc2dade5f856c7bdf8dd5265f87ac4deec1d07f4383fe5e2cbe6f69e2bb0ff39edf85f59ef763def3fb90def301ac73f487909da30f62ec7fa461ff1016df4f34f13d8ce5f5cf61f3fa1193e46ce7f497587ae65d3c8aa1fa9506d563587cbfd1c4f73816dfef34f13d81c5f7074d7c4f622dc03fd3d0027c0a13fe571a843f8d159abfc3169a67b03cf887260f9ec530fd9b064ccf61cafc47a3ccf3587cac16497c2f606610ab15d20c5ec4eac95ab5c2d5932f9904f38586b5fd084eb2d0f0658c7d1d1af6af60f165d1c4f72af61e5cd70fb824efc1af61add47a7e042769a5be8e11aa4f43e80d2cbe0634f1bd89816b1812dc5b98e0462105bf8d096e1c52f03b18fa6d68d0bf8bc5d78426bef73047db34aca37d1f73b4cd423ada0f3044cd69107d88c5d78226be8fb02c6919364b3ec6346945a3c9279826adc36af229f652dac68f71257929fd0c6bb5b5ad15bed5f639c6a35d581e5f6039db9e2667bfc434e9105693afb00ce898860cf81ac3d48906d337587c9d69e2fb16cb962e61b3e53b4c93ae349a7c8fc5974d13df0f18b96e61c9fd88354db60dd934f90943d49d06d1cf18a29cb0887ec13ac07bf84194a403fc57ecd5a267c8578bdf3016bdc2b2f81d3397dc90e6f20726b87748c17f622cfa8465f11796e4be2193fc3726b85f2dfe210eafe0d8314ccd4250b304e01c01d3fc033fb30f06380571a198d7b1ca093bc9898acf97e07213cf143ac70a47ea66e758ca263b4fb99fb7ab94cf26e658b8b3415688d920de3b6efa0a1c0d1726d182cf7259effc5d09629f2766a328995ea93b384fad70e404a1fe0f46bdbf89fa943875b51aacd87962b1939632793d715ee8a466a393ce0ae7b8d8495582ef52c174adf87b619c406a1283e8fa2fa6eb0093ae2392e83acff9d9e4c8582f66d0f0dc5ce6a4299876661941f4f90fd327cfa4cfe814f5a974aeac738e53840596097be7b1cd706c6d8d98a7b5c660fb7cf6d36a314f6a319fb313402bde7b69d42adfa4d5c02a5aa9358cea38dd49274f959fdcc19e0d92fe1896fe81a6f48fa936fd85627e199f85c67dc26227ed9b53d2c52427885eb530bd0699f41aca18e2f1263831af15feb3aa16988fc4ee246405d1a436a649814993e19a26f03b8fe175314b0ba24d1d4c9bc1266d26a0f9e26ab0da29cd0b1dbbe7f559a5e317968bf29b4c1f7f7aa6ee0fb230fd8698f49bcab039a56af6e66a71b62ae5dc0b2e3d88b675316d8762dec3af6dce957edc5f4e4249e96867d4c3f41ae6a7ccc19654f832679616449bfa9836c34dda8cf355e62638444b8565b91e3a7c994bdc09a25b034cb71126dd466af5d744e7166f3194083d2aa43eeefc5f9ebe62e72ff7716e41c9bc61fa3c48434ca391268dc66ab9e58d17e65849bc1e9de9dc2d17f5ac39efbc32d2a759234cb35126cd7a689ae925a95c7a88e9c283953b7f2f4f934d35c6d239da94ce69becacb14d15655ab04544db5bdf37711dbd311c4c5d564bdb50da6f31893cef897a56199f0e6d32af9e699ccbf054971132cc563b1f709bf75a137dde5acea07e1f19ad5f4f9f8205a35c5b41a67d26a52929ac7d562b2a86d560acbf3ffc66fae99d39573cd301dc79b741c82e61cefdb58e20452ba4e77742d7742ac15ab5aaad6b1e96e2534c7f49860d2a330849fa849cfd002d372a249cb7cdf6f5253aa6de1a5c397b7c4523fc994fa41015aa841d39faa476885695068d2606e00cfec5a5ca2fe719fc17d9bb7fcf809932e1b6c8d3128f2938bc9dae3417331559fd706d360b21f5f51d5afe379e7cfc37befa42b9fda625a4e316939d197479ceb045e2252bb18f408d5d4fb463b4cc3a97ede78935962b037de64f9974a5dd61ed3abd8a4d728df5e3e9856786ea5a253074ca7ed52ef6baaaec465b266ee88e937cd8f4f09521fe0ad28faf7e14e9896d3fdbc8d51b488fd6b9d6a6dd119d3790666b9c1eafc62f1c65321fad857b064ef333479da05d36fa649bf32463b7aba8ecd126f0ce572747407d14fc257f22f11daa56a25e13d58578cd3f6264e25c49cf051e6e484c273c8c638cc3271985fc33e80da3b74c368cc36d198ecb32d592ccabb5dedc96d314de798342df25583cf607ccf8d75623cd8f580784f68a65a95dd313de7fae9f5d1db5c9384a655730ff6e4f8b99eded6580ea6e33c3fadb1aa3a26fa49783a79386e5d4b0dfe7a1e7327abf9d52eb551961e987e25587f6432fddc7a29f180ff56587a73ad27a6d50e26ad16a4d932b1f217347c7a99f4c298ece8c7ffe26db2eafd6fa6dbdeb998a6f34d9a0e8eb73fc2ccb72a14b358787f7ca5c1ee53c9afde98163b059d49555cad1edeb18312472b775cc734eaa8da6a3c4c107dfa60faec6cd22747d3c7147bb2beb0545b297db1542e30a5727a1aa9cf1575c13a693da95a64424a10adfb615aef82f580a54feb156c2f591bce1031af16a3bd139d1f9e92aab3de526babf4c734dc953a5fbd233ba9e66b424a10ad07605aef868dcaa75feb19cc9de7e43e95ae729a8769b630e808899bee44ff51558ba3a9a5f2310d169934189fc6bc992372c47d9fc0fb50e631385f7590233388760331ed1663b37792cfac4c7c2d23f98c243daffc4a0da2db204cb725584b2a986e786f57b277570a4d0b304d979a342dad56537c9eed3cf1b75b977bdf1ffceae53f24b7ff65692cc983314aa5588f76307b50e53619c5ea49859d9b3c04d3b20cebd5a0b07aef3b1185cd0fc5f45c86bd3ba66af36ad6bf8a87c6dad3f12e320c63526e6232238d79ef6fed00952d0cc7f45e8ecd62c88cdea97980d4188cc018acc07af982ac15992434e0d75788feb06065205d1e7c24a6e3eed83872101ddd59c761344ba5cc8ec274da233db5126c81f91b85a3b0ced1989615262d6785f0d6aa164ecd5bd3683f06d37e2536e33f5ccbc3bfbf4d6555d7584c9b55266d764ad1db9a660a046d399a5b24e96e578ec378acc6de7153cb5d37dd65e23dcf3c1691ea2cc0f198066b4c1a4c09513ae730b7ef6843e0b78674e5d6044cd73d4dbaf60b5887a8bce2f5e57ae3e8756afd6213b154afc5c6b7524935f499996dcd4fc2f4ab34e9372ca07ed0ea2624cd9374d4e885982eeb4cbadc524597d4c635bc7712cff8191fc05a06fa972792add04f750648d055e1c97a67abef610b928f45583eaef7b3568a665e487a7a6527639a6d30695690c442fdf669a67fdc6d0aa6c346930e7d53ae758bd3e8c5a76269de644a735eca694e365f26559b29c6d2be391d3550cdb70bb6c3f4dbcbdfc893ff3690fe2e3dcd1118ac7d9b3eada7615aef9dda8a307feb77539be995aae54ec774dc075b63146445589051a8e47eae9ef33f166be4fc5924ec835bcc2cf1043fab64797c5f4091beeabe39a4aef3b8573ae9e1b6318fa919a7d57f5768df5aeeeeb6e25faf1887aaf6e48a2dd36cc07db242484ed83b5fe39cd82585978401f1129faeef4041edfc7ff989ef21b454d4c4fccd72896319f5a4464a96439a2f41ddea34dd8fe76a0b99abb5f2789508eac560d6547d2af6e7b1d536db50db2a6461d936a5dd153093b9eb5f63cd198b57cd1cdb2a517e6789e6c53a719d17df6a638565d5146b7f2140cdf0ab565c09681698c4b517a6e63ac7b5cc1d6ee71fbeaa97552b9f67c40194c83a09640b59bef8ada32b71622995adfda9a2162965ee97dd2a1d65a200f2f69c04c803ed0439301220f906840ae44194209b7a40f23a9727a15cfa4e8e2c0ab836354be03a9812574b81cb7dd5562f5bd3999a4eb6de7974a94c5214b0fd3d2481ed106a6ceabd48af2056c8fe653eb3ad3412d8f86c2485ed504a6c4d00b649a20bc6ed765e27bb8ca200ebfee1095887d13747cc453331c32e0ac8460f4b203bdcce5ab4201220d76527401e4109b261dcf60a45d4ee5777374702d231a0123892baa9013bf4a2e9fcbf06ef0a4751e26a863aff49ac42f45bad8c04b07d4005703425b046a2101689ee80c4704554de41799792c2740c7d3da99c3eeff375fb2c2b053055734601d9311312c88ea544b64d1564517b417abb4e02d57199b5ae3d4597aedbe28f92755d3f3281ecf89a71f4d102b6684402d8969a0116ad76fe726161f5b234e1fa72d2d4bbbc8351c63be779cbad886d1243c76b85bc52bdb39ecfd1b12ee527c0cef6dc240d845c9f9dd9b93e1ab1b9017a3b72aba95a727df4cfe586ea0c0df37441a8a707394f63ef4db9013ada727dbef9e7fa6a51e756dbe9924c4e22fe64a1609afcd597a670a6565b62f4d23cea98cf472f4ffc1f1f58cce7038b277108fc132ffc9f5b679d4c5967b593f9e78e23af12f3b8f0d9030bf97a323d0d9daaa4618e9cdeb842c4a1ea2a536a1a786ab3d67e144ca546fb86259a00a7d884735024716683be86536dc25910499cb301ced36cc239389238f702384fb709e79048e2bc0fe03cc3269c432389f30780f34c4a9c5d0c38fdcf211c4687967fa69104ed7100ed5994687b49b4154ea00a8138312d3d95c5bd55e67e4400f66d00f6d951829d1f41d8a701d8e744097695e9611180fd3d807d6e262abc72b4ca83c9e76e62281dcec654151e5fe3a9709e6713ce8248e2bc0ce03cdf269c832289f31080f3024a9c6d0ccd3128d05bd087d0a1ec4085f24b80f2425b50164412e52250055d640bca419144391ca0bc9812656b897298f353165fd15a2cc616f85a557e6f8d58ebc51f881ec8e5a0785f9289d97f78c5837d248cf03daa1915d62100eba5999a51cfadb0dcc195219b9c4f056f3d807719f5d0be82b762ab29d23b007c9753e32b65ee2a6ffe92b8d4f126fa5a70327cbda8f0b501f8aea0c4d7d9504bfbdd9481b0bbe335aa37f0cb419d7d654d367fa038d2eaa51e958dbe056cf42aea35210b0524b77a599b29ef584285ae04a0bb3a53e8d68b401942770d15ba0b00ba6b28d1b592e896caf91ffac70994a6a48577672a8c6301c66b336181f95b4de11d01d05d4789ae854457e0fc2cf74c25cb10c2422a84c70284d767cafab60eff770c4077434d3660bc1b8e10b605c95ef1ce006dc11b3351950cf4f4dfa8db19b248b276e01460913765c222b11ad9dba426b4483294dd01ca9b2951f663fa60acbbcb5d625670e5ffd018f887c011dc42bd5ecf5b934f10dd658463d964bd8bf581adde5a13d0a2d8255b0f40bb2d133ddd7eba1f603f37e948cc142aacd34101bedd46aca4c3ae64587f05d67a874df33349a7ab90cdcfac07acf44e9b7092ceaf20c33910e0bccb269ca4b37fc8702e0038efb609e7e048e23c13e0bcc7269c432289f30580f35e9b700e8d24ce3f01cefbec5d2a10c539be4700b4f7db32c16a20254ab24904efb004ca076c41591049943b01ab7cd01694832289b22e40f9902d28074712e5b300e5c399e8812fd82a7be08f037ef2113be74f0e8e6067dd4a80f5517be60a8d88a085760005fd314a947c3587b7b37812539fc422c3d6840a5b1d60818f53626b5b6dc1f6aec821b441b2f538e300cc276c82393c8230c700984fda0493b09f9d0c665f00f3299b6012d6da64307b03984fdb049370df033298c300cc676c8219c505a170bfdb676d824938924e06331bc07cce2698841360c8607605309fb70926e1363c64307b02982fd80493b087880c663700f3c54cc0c42617eae33e84c59c6cd4a70b80f9924d30092b203298fb03982f676219009fc3be52469ef8c67294fb2df702085fc9c4a06e3ef37e60b7eaf6c43cd45a11227a16d90be07c9512677b5675f6b05ab68c8f40466f786231e8b57ccd36a084151019d0af8185be4e09944f4ef6760357f93c5d040620b200ae3732314bc3dd6a5b1d274b3bf46e635ecce01e05c4be92cc126702b46fdab36885b0f792ac169f0e50be95d9b19d4aec7b4711a8ad1b036c6f677a0a96798b073e54b692ad1196ea8e9093be811752a11d0ceaed776cdac88e748b7bb277f019c052dfb50927e99eec6438cf0338dfb30927e91703c870ee0370be4f89b3a36f3fea5d1a4d3888d69c6a12eb91c0837e602354424b2583ba0240fdd046a8841dc464509703a81fd90895b0e3830cea27c0a77e6c2354c2ce0f32a81f03a89fd8bbe6228a5f0c381c38814f29d1f665de8e3afedbdd2f81279aefa0501dea42b682253e2bc6fbee37d3da735faa86d78b00fa6794d03b5463cf1399fb5138f79afbc93a523b26dbdc672d40fa3975ff28efc45be21028175f0e2ca7c3d5890a5733e051bfb0678236e1dc24b24ebc46c0f2beac590ffabfb3efccf300fa5735391eefb55fd2dd15c82c780b70065fdb049370de2719cc1300cc6f6c8249d8994206736f00f35b9b604671b4e96000f33b9b6012769e90c1ac0030bfb7092661f71e19cc3d01cc1f6c8219c59d104b01cc1f6d8219c59ddaf700307fb20926e1ca3732982703983fdb04338aeb824f01307fc9c4279486b2adf3134abb0390bf66ea5b3f4a6a86e0916d863f0ac0fb2d135638642bb5c26500e4ef99d88842f522f111a28d60a9ffd6356d7617d04ff40725d66d24561ef1320156c95ec1083fa39445058e017bfc33530b0c121f36d6bf4395a1e24df655aa8b00cebf32f14d3477c37cbe8b0c0f9a217c64333e2f06f8fea6c4d743f38eee972ffe773e207f36f097ff440574140730f606a0ffcdc4775ccc1513e1da8e8654cea0167006ff516f9f5f2ab02d761854c8f6261f682383964305ad1580c66a5bb8cf3be98e8664fbbcf707c538662356d2de7532acaf036bad4589b5ba3546d1dfa0a21340599b1265b8c53284680ba9d07e04d0d6a1441bfc230f51dc16e00b8033cb269c832289b325a89aeada84b3209238a7009cf56cc23938923837029cf56dc239249238af03381bd884736824717e097036cc74a3c97fc707e1b82559c7c71680b651262cd5ff0ae328eed93917349a1adb84b32092382f0438b7b109e7a048e23c00e06c9289f7780ca6b7a013ce2b261bc9fc19a06c6a0bca8248a25c03aaa066b6a01c1449949301cae699e8ff0cfefd0cc209b164db574d0385bd052556b57d1adcde6f92188c5bcbdcaeb9c477ada3bc69d5610068cb4cd829043acb09ce0516b3ad6ddfc45c80b5554d7a52288eb4c893cde764c093b6a644a926c7f21922de3dc1b69ed974bb02bb6c430993cfe9c4672d71a864f0b6a582d712c06b4b09af9b73c2c7808ae300a74b70454ccd5c2a96dd21c528e4e84d063b10006e4709b827abba396aeaeb8409bd2a596fd3bbc0abb6afc90a2a63db05cda7b2daeb01ca0e94281b683ed5b544326064bb7cb403c5bc634d4e62f0368ea2b8da722840d929138d23d87c2f8a2f3780b3e4a3fb2ed411c0ec9c8997cbc48615d52f3288e2b758f38067ec621b50c25a9b0c680900dad536a0515c06b30d009a6d1bd0287edfa00b00da8d12a8699b3f3fbd9e847e94acd7f33150316d6b23d42876253f05a076b7112aa13f25837a1f809a632354429f4a06f52100b5878d5009f7f62283fa1b80dad346a884a39e6450ff02507bd9089570ae0819d4ef00d45c1ba112eef94506f52700b5b78d5009f7b121833a1734fefbd834d99674271bbacff9009c7d6dc239289238c7039cfd6cc25910499c6500677f9b700e8e24ce0b01ce0136e11c12499c9f009c79991818f13701675024f7a75b0f60e6db04338afbd36d003007da04338a3b74ef09600eb209661477e8ae04300b6c8219c51dbaf7003007db04338a3b74af023087d804338a7346260198436d8219c5d9c98500e6309b60467187ee3100e6709b60467187ee7100e6081b7760226d2491edc0b43bc03ad246aca4ab38c9b0fec91258475162ed6ac06ade8d698a7c24635f899d41053717d8ec689be11236a7c8e0b60570c7d80c97b01223831b0370c7da0c97b0b94506f77de073c7d90c97f095950ceec1c072c7db0c97b073850cee08007782bd7b3712da6d2115da72807622255afe6180c4072b0a59d4bf1cdb0478d349360de091eedf4436805707d861a14d3849bba3c970e6009c4536e124dd0e8b0ce70e00e7649b700e8e24ce0300ce2936e11c12499c0f039c536dc2393492387f06388bedddf492102dd936044703b4db51a2ed6e40ebb7210f7b5709679cbc4f65bfcb00e46951804c38478a0c7231803c3d0a9009bb03c920dfcb12906744013261b72019e49b01e49951804c38244306f95b0079fb2840261c9a2183fc00803c2b0a90093b0cc920370715dfec2840266c279341fe0158f29c2840269c834006b90058f2dc2840269cb14d06795b00795e2636ffc2fa26124927ee2227db6be53de0144a6c4149da9f4b867221b0ca1d6c41493ad24086b21740b9632626c805dff93c8afb555482c23e3f139593daa98a07e68faf61ebe2dd91254ec27895a48e139d07f996c91b9c70abc52ee9a46f656463b85381edee1405c8846f6564900701c83b470132614f1919e46e00f282284026ec292383dc0c40dec5965603e95e1764ad86bf41f5b6ab2d2849376620437909b0cadd6c4149ba569b0ce52c80726126502e65e69daa3336d9986c97f485a0802fa244d942a2e456e7fd8c47863ede5148668d00e1e29a2cd8501ca935922d8e7b19a05c92096bacfa5199a85be36480702925c256d5f846a529a925ee4c857134c0584a89b107d377a056df2f9beefcae04cd756cb251221c21e8de54a03f057579594d7acf8cadca22abcbcf07289751a26c2d510e767e126b058ad9d6f239aedd40e12fafc9f6a5b7468fe2e6358b01cae59428ebf2fa2eee3b2be950917d7fa73d40b52213db2ce45769fc6c3d45b810c0dc9d12667d9e5b7290b8500e0893e1229b4bdd10e0da231373a95573a7ccf8b122acbb228adf32b901a0adb071670ad2f14cb29d29c682c6ce4a1bb1924e5e20c3fa0bb0d6559958a3820f139768fde7844df2c6543827029cab6dc25910499c67039c6b6cc249ba171519ce1500e79e362d4823dd2c89ac11551f54496b6dc249baa51719ce210067a54d380b2289733780739d4d38074712e73900e77a9b700e8924cef700ce0df62ee68de237c58f02683752a2edc5aaf6667a671ab9f3e6578abff97cfaf54264e283c5f304b50c8c608ea2b2e31ea049b5c996591ea4ef4e641d276f03949b6d4149fade44867247e002f6b20525e93b1319caff8055ee6d0bcac19144f914b0ca7dec5c9210c56fe8ad0516baaf3df391a2f8859d76c042f7a344d9942586e4ca44637e65a686e0c8a6238c0476b83f25bc66005e620838ea239867017c0750e26b0ff0953b1778b37d9298febf96a9991d2b9dc0fc1e0fb7568421037a1d15d02300d0032981e630ef18a73ec170eb5e7df112f0990765a256579879512f8fdfdedaa6c64e03580fced4ec10b33b28118f66c0155c4305f370e00a0ea184d9cdd04472a171a0abd876a20b644dd2b125426b251b59aa0d001f6acf0cba287eb16c3b80f2309bc63c4957b491596619c079b84d384957b591e1bc1ae03cc2269ca42bdbc8709e08701e99e96110ff3be813ae6f2fa442db1d34a08ea244db87612b3adc5ea6eac69b0a9db04b05398e9cb76a89b72c249bd17c18407e742616240cf4e0860377d1ee0b381fb88563ec9cec48e86dc9263bb607f6796c26ecb3806d9d0b667601f6799c4dad8081945515592b602ac079bc4d380b2289f35c80738b4d38493f544c867333c0790225ce8e5a43aa4c5438ae90adad7baf21a88a4ecc4455a4a0ae483a6f247a55d187c03a4fb2056414d72ddd08409e6c0b48c2f9776420bb82a27d8a2d20092b1e32904d00c8536d01493843840c641100799a2d20a3b8a96a3e0079ba2d2009a77f93817c12803cc3169084fbd192815c02409e4909b2034b3e8f7ea213908fb6a8c90eee903161b54336587c01407a969dd31409e7d6914d533c8925b09e6dcf3445c2fa9cece5b136b0d0732851f6ace23d57b1654ef0492cb1f1cad6bd5dd50300f5b9999ad4e8767cac6619db9d8e6c99d77ea0d09f5713960ac784fc2ffb22ec08215bf6752db0d4f333d14d1774cc288a2346cf03fbbdc046a8842d0132a8cf00a817da0895b0d7890cea8300ea453642257c1520837a1b807ab18d50092b2a32a8b702a897d80895b09d4a06f51600f5521ba112f65291417d1240bdcc46a8843d5664509f00502fb7112a618f0019d44701d42b6c841ac5bdf11e0150afcc448f15de1118f5c1e58d00e55535d9f9e7ddf59bd02ac996d9fe0adef3afa644c9f788dde0dc5ccaa63b81caa5759647b017aa39b0be6b2891f1cf4c78577f9638924b450f539983d19d0b5a11c102bc0d40786d26c69954471e5f84b0515625dea29ca1f7a0122aa43b83827c5d26a6290e147e512dede69b576f141e72b573a534535dcdbda8709e092cf4fa4c5868bef8ad8e739c5b7b3a4cca84e08caea0272bf44703a43750221da015fad22ab6e9edbb4fe02d96778a93d835618389cc9a2f03cee1467b16d412f6e1938d962e05567c532656d2fb1b781e1cc9d5c97f01bbbcd9269884ddcb64307f07306fb10926e1000819cc3f00cc5b6d8219c5e5096f0398b7d90493b0a14f06f34700f3761b577392eecc48d63dd70760bdc346aca4dbb092617d0d3497eea4c4dad580d5ff149d4194531fc826e93c016cf62e9be11236f4c9e03e03e0de6d335cc2863f19dc8700dc7b6c864b387c4706f75100f75e9be1120e3893c17d0cc0bdcf66b8845324c8e03e0ee0de6f335cc2b73032b8b703b80fd80c378af3a5ef00701fb4192e61cf1619dc7b00dc876c861bc50fbc3c08e03e4c09970ffa9632be7c678d80b7942d074b7fa2379ec5271828708f6462c415eb31a8fafd3bc2424e36ade22b80f3519b7092fa4c329cad40b17ecc269ca4bb4091e19c01703e6e134ed2b12a329c9b00ce276cc2392492386f04389fb409e7d048e2fc16e07c8a1267b8cf0946b1fbe45880f6699b76d323fd6830d96e7a3b8346d33336e124fdca2d19ce2b00ce676dc249da9d4786f35080f3394a9c7dabf5a389197dd5cdf09b2bfc2c4f08e944e01ba8a06f061ef6f9284227ec5b2583be1a407f218ad0099b6964d01f01d05facc96540de76441437fefa1e78ea976c41591049944b8155be6c0b4ad2b15632941301ca57285136678945186ee4eb9d80eb58d457b1ec0b8af5ab9400d5c7dbd5928bca78d592da9649511c5ffd1a58eb6b94b0d5e75e79c4cb046e257b950c12bd59ad3160a9afdbb94d22a14d926d933810607d8312abda19d55f13297a55d1fd00e49bb6808ce2dafdbb01c8b76c0119c58de11f0720dfb605641437867f18807cc7169051dc18fe3900f25d5b40467163f8a701c8f76c0119c58de15f0220dfb7056414dfc45f04203fb00524e1aa1232906f00901fda029270ed1319c85701c88f6ab29b0d8a236d0091bd7b7f00507e4c89b28973c277e0d9e43c9698f999e8f7899e15b600e83ec9c480b1779b1837314562c2cd4aa6beaf4cbe450cd92646c301ce4f2971a67783f728cea9bf17f4567e4689ba9b86dabba35951fc7bb65bdb37195f03803fb7679342c2ae0eb24d0a5f0528bfa044c967c2f048135b6fcd167ff11f326c645f1b690bbce997f6ecfa14c54d370603945f65627e47a2624a6cfd1666d732c22a8a6cf4f21750ecbf8e2274424b27837e2780fe4d14a147717fbed301f46fedd920692065cf0099af1e09607e6713cc286e77381ac0fcde269884bda864300700983fd80493b06f9f0ce63000f3479b60467123cebe00e64f36c18ce20735fb01983fdb04338a9dd33d01cc5f6c8219c55d4d7b0398bfda04338a1d7c1d01ccdf6c8219c50e96ce00e6ef366ebf493a839e6cfbcd9900eb1f3662256dc89361fd8325b0fe69ef8644a4efef642353b7009bfdcb66b851dcd5f45600f76f9be1467157d3b300dc7f6c861bc55d4dcf0570ffb5196e14b7e5b806c0fdcf66b851dcd5f4660097d5b1186e1457dd9d08e0c66c861bc55d4d4f06706bd90c378a33b04e01706bdb0c378abb9a9e0ae0d6a184cb17e3ae11a84ae543fa9034193cb2fdcff87459052f8b129e69ffb312e7b842c45124c4f07b658eadae761e59232618a9f98284af08855468b703765997126df04d63095f0ac82c350be0ac67134ed22f4790e1ec0170d6b70967412471ce07381bd884737024719e047036b409e79048e27c1ae06c6413cea191c4f91bc0d938d38d26ffcdf92876fd1d03d06e4389b6bb73c25b9889f9a5d399da2b6fbdf3e05299a0eae7a1466f0eea269680dc8412727b86ed15b575ed74f215b0daa69440836d4f18c5bd4ede05b6d9cc1694059144b92bb0cae6b6a024fd720e19ca3600650b5b50927e6e9b0ce56700654b4a942d58621db577256a86f67a24eb59ea0f7c642b4a84a9efa047387847b683de0680b5b52d859c74620f5921ff1da06c630bca8248a2bc08f8cbb6b6a024fd883619caed01ca769428d58e3c1c55597cdb83625105f13d5132540191812c02c5bb7d26400edc4a414e02203b5082cc66de3771b5374f8978c0dbab34d179a892a98f0aa81084efe5d750e1bd1814f88e99b0d3115ba99d6e0fecb4132548b5547c294bec2ff1bffaa5912301f4ce99a8f921746c463fe9a686646b4e1601945d323100e2f76b4f83292d93ec6b4fd7029c5d6dc2493ab1910ce7048033db269c0591c47906c0d9cd269c832289b31ce0dc961227d7804ffbaa944d273e35ac504e038bde20712380ad3b25b6deccbcc1a1db3557dd8071a1137ea9e0c641f3162af10730fa5201df0734f673a2069c70ca3819f09b00f01e51034e388d9c0cf8fd0078cfa801271cab2203fe3e00de8b1278b8893e515cccb31f409b6b4bb736e9eb0359e7cc9ba0a5d1db1694a4af0e6428e700abec630b4ad2d7063294ff02abec6b0b4ad2ee1632943700abec4789b24335d5d0d63332b01220ed5f93d6e9ed5b8de2ee7cad01ca0194285bb1c4849ec4208bba9da12116ba1d2381bfcccb445b731d5beedcae64d83abc29f201efa6f284857d0615da41006d3e255ab57d97bf8114d27da6c8ecf43a0073a04d30a3e83baf073007d904338a3b9b5e056016d804338a3b9b5e03600eb609661477363d1dc01c6213cc28ee6c7a398039d4269851dcd9f4540073984d30a3b8b3e96900e6704a986a5d5dbe187c2e1330273934d68aa4f0641789bfb9800c7c24ee262aa04701a023288176044013c73942d86af1aab9f57c796f1e803a92126a530095bf97978b97cd8cbca5936d079b07e08da28457c0b0aeb8122739dc874e627c9f9c95cc5dc5bc4a44b4962d7304b86b978be321135fdee316cdefae1057d6d2becfbf4135767405e8711a4def1612f838f2f5d201ec21b267a2c0bd871439d9399639a20817859375323705963d86126aeadb7213b656c91cc62860ab636dc44aba4c9c0ceb8fc05ac751620db7a31ee97813d9d8fc77c066c7db0c378a1b6dfe04e04ea0841b7cee34e19a3eb2d9a90b80239868134ed2d5a66438af043827d9849374c52919cee301ce424a9c6a6cd4bbe2746b191b9d0d301651620cb74b296175544885b605a88e2667a2c063c5bdea2ea5844d27b259ff9f034b9d62134ed2ee69329c4d81754eb50927e9f446329c1300ce629b7092be2791e1ac0038b7b309e79048e2bc14e09c6613cea191c4f939c0393dd38d26ff6ff151fc6ed9f100ed0c3b3bf508b19275eafd031a4f336d7af924dd319fece5733ec0b9bd4d3849b77827c37909c039cb269ca413ccc8701e0470cea6c4a9b694c1ab27ff5bcac06915846d02b20915eb40c5358712bada10099beee3f5aed11b2dcd01d63bd71690515cdbd419809c670bc828eeab5b004096d8029270b22e19c83e00e40eb68024ace1c940ae022077b40524e1c206ba55c900e47c5b40122eb72103b90680dcc91690848bc0c840ae062077ce440748f01dc809ab1eb21dc88b01d6059458535be84dd82c225be87d1778e3d98512695b03d2649dca841d74645dca9f02fbdcd52698232208f3330073379b604671b0e3260073a14d30093b37c860de0e602eb20926619d4e06f30e0073b14d30096b7332987702984b6c8249f85a4906f32e0073a94d30a3f84dd07b00cc529b6012be5e92c17c16c02cb3092661a70719cc5700cc659430836d7515c51d466a8197c9724a946ae92cffee8d929aa149dc3b53c1db11d8e1f24c74bee58b0eb80ae7326700e71c45fb632ce700902b2841f664e66d8021caad7b97dafd4181df9d12b5fea5e484dd6e5dc3bd0702a07b64ca096c8d5f64ea079c404526ba8ae197c336ca9e76af6dc2de7742dba4db1803d8e6ca4cd8e6f0add436d701db5c4509b2330b3af3783a5bc1dce138420bed4d05f60460a1ab33d194c7c62fbd4df928ee22361ed8e89a4cd86862bb55ef362eea38d109cc3f53bd81f1ef26ac17de95b0f3b81315d84b01d83d6d054b58f8c9c06e0bc0aeb5a7f0138e639215fe2500652525ca6d9c13efb7e7139b0955467082425d006e1d25b8e0ab85a3389ede00d4e7eb6dc249badb0219cea100e7069b7092ee054286b314e0dc6813cec191c4791ec0b9c9269c432289f323807333254e7ec203f33d40a287a901a8b1f7aac9a134fd95318aedc63781cded6d134cc2f96f6430df0230f7b1096614bfca713580b9af4d30a3f8558ebb01ccfd6c8219c531f32b01ccfd6d8219c5af725c05601e6013cc287e95e31000f3409b6046b13ffd5000f3209b6046f1ab1cfb029807db04338a5fe53808c03c841266ea1b9b13da28d9663d9d00d6436dc44aba812419d6175802eb619458c3edbd4dfafe4e369deb0b60b387db0c97f07d9e0cee3700ee1136c3257c8b2283fb06807ba4cd7009dfaac8e0be03e01e65335cc29e2932b81f00b847db0c97b0a78a0ceec700ee3136c38de2e4efe700dc636d861bc5cfa0bc0ce01e67335cc29e2d32b8af00b8c7db0c97b0a78b0ceeeb026ebd2c4df8e42ac2278951763ecebe54a4df9d4d37c07977e4ea9709ce4b9d733527799153901738ff83e5c8aece7fd3f598584456c436b135e22a97572a64af74eef29455b27cbe8a600b37905ad2407263f59ddf7c1afa12877bb993b6d5ceefdc5843e7ea0647ca5279a55ca6888388c59a4bdd5739f767b03291d1a5f10c5fecc8e214f2fa3bc162439d5fae890c884fd11ce0f99861e27af532b9e6c9a59dc0d58b99edbf226d79569d46ae99793fd038007ca211d3b47afdf0fc6f9c2457f206f0bcd89af53f91e7bbcc7661a66d638d9cbf4a9c9c778597b1ed9dc0a52251fc5fd6ff01a08465bcc7440400 serializedProgramBytesString: - serializedSignature: b2db05f84d4b5b363f4e3afabb07ade73944bd999c63c01b50dec03f6656abe7dcfd3a3f25e88d3d2a831e1453360ae6e8a0c558eee887e2d7fa247db4b6e10d + serializedSignature: d360fc09df9f620c2cbdbc9ff1769ee37a721536fcca7bb672c71a439702444e6df160c8761953a02fff40d11bf88aebf6bd346d654d1933aaf6a6d6a3385b00 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/09dda5f2eb755fa4e858f339c8b1278b.asset b/Assets/SerializedUdonPrograms/09dda5f2eb755fa4e858f339c8b1278b.asset index 0ef47d5..9c8b26b 100644 --- a/Assets/SerializedUdonPrograms/09dda5f2eb755fa4e858f339c8b1278b.asset +++ b/Assets/SerializedUdonPrograms/09dda5f2eb755fa4e858f339c8b1278b.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c16c5d687e70542972a82140141098aa4d211818412e9104045a5258448203109cd8a1d3b2af6861d7bef8a0d7befbd77afdeabd7eebd57bf9dd99dbc672773deec66f72cb3f90c3fb2d9ddd9ff9e79e64cd999d9d94619ccfa490cb07ecd6133591e1bc866b32256ce56587fe559dbe5d63f7b4f1e9fce2aad6d89f57ba1756e00eb55c795fca75fa28bf5bbc0daab62d5d6952bd9626b5b2acecf62c5d6df05d6b5c5d61e3fbac4fa5f6c854a34b12e9acdf2d9343695754e74aa43628eb8a8ca3996e0f14a34b77e8f656badb3c5c2287e930c71aab3f56b9675a64a9c5b6e192dc3cd630788682db7ce2db6aea9646596e622a1d8fcfb294cfcc1ec4d3767dbddd976b5feb770fe6eecfcdddcf91b86e7c779ecf64f11b607082b3577b2fea759ff7f73f67bdafb8dfa3afbbdecfdc4f68a464ba0d1dbd9eeec6cfb385baed1d4faf35e0ff6a73ab78b6dc3e4a702eaeceac465b41297561e19b774b6fdea089f4aa395b34d0fa0d1da4eeb46133da4756b709ffe4e5a376749dfe2dbe74098e79c6d1327edee538ea739c7ef578e37458e37438e37578eefe66c9f07b63caf5cf38273cd0360dfb2b349bea2f1a213ee416033d493e7b728d7bde41c7f08c4095ef71272ddcbca75cd94eb5e46ae7b45b9aeb972dd2bca75f2781fb0cfcf3f6cc7b1716be7f8eef67e938a14fee125bfece16c5f73eef308d8e7db579de38f827d9e1eafd9f74f6be21c1fe86c5f57745e4fad93969ec2c64ce62ea706286cdf507ce50d47b3c2b16d334bfa39dfbee9847f4cd17b53d1dbead66b2af7b39dedbf9c708f3bfb598a5df2fc16e57c1f705f785ea6c17f9ce34f807dbefd05b95f8e725ebd5f2e481b787e9012eebfcef92795fd5465f1764a9cdf72ae791aec37b12f49c96e701dece4f9b0d8493d8c9d3c8fb11ba284ab0f3b19d7ffb16439287d54fae4bb8ece3320ac3cceb75f33b7ef7f6d6bb4903e9fa6e8bded847f16ec43dd3f95f37f3adbbf808d0e6bfe67cdb1bfc031feeb7b47e739b0cfed926d1659de4abbde57eefbbe6297f487e7c13e2c6fe4fd5e50eeb72e057fa9dd07ec8332b6b96c070df5c972786d566c0438b6a7b31d098e49ed77c031e8032dec30191b9c63c39ced7b20fc3b8a6fbcc7dc3e3bca277b180fc919c6632f4d3ca4f6079a787c98221e1f81f01f80f0f21c8cc76867db4cd1ff5889c7c79a788cf1180fa9fd89261e9fa688c76720fc2720bc3c07e331d6d93657f43f57e2f179807848ed2f34f1f832453cbe02e1bf00e1e539188f0ce62e8b1e01fb561edc2e5d09f70d73d7bfdf30773e943a5b159def9174ff87c24b3dffad72fe5b67fb9d62c7778a1dff74cebfa8d8afd651cf033be475f0fc4bcaf5b2ac7a04ec5bf16b335d09f78362df0fce3647d1d9ead669db45497bc9e1df0a07f5fc8fcaf91f9ded4f8a1d3f299c7e4638c9f3b26e7d1ed821af83e72527b50efc95b9ebc05f15fddf58b2dcd65d2fcfbfecece721e17e57eef3bb729f3f9478caebf833490b10866fc7b19abcd54eb6d5ebdb369f606f138ddc7e23f6f936c15c6dea8413b7764efbb7dd2647c779864c3456741ad7a1b335858d05ccdd361fcf5c7924219f2d1f00fbd6fff6adedebdacbe739272d12f299f331b75e224dd1dbead6ebb0c009efb42f13dd98bbbdb7b762973cbf4539df07dc179e9769d09db9da9709a7ef26d103b95f8e725ebd9f6c5f4e54ce4f72874becc45cedcb9a7d1f6df3847c6e7f1aec5bec3a5e5407bbc975b093e7c36227f53076f23cc66e8a3b5cbdd84d75fb1f9bce9279dc890f9b018ec9fe9999ac26dfe748fba639f76d960c9f9075d42c675ff691bc02f6adb4d97e740a1b0b9dad6c3bcabcd282b9caf184b4718ee6fe73411c64bb741f704ce63bd80728ef23fbd2ac3099b2ec9eed9c037d51899620bc3c07d36b5f67db54d1df4e8987f4e7bae221db41301e8e76a28d261e6d53c4a31db8571b105e9e83f1d8cfd93653f4db2bf1681f201e4eb844074d3c3aa688c7f6e05e1d4078790ec6639eb36daee87752e2d129403c1cedc40e9a78744e118f2ee05e3b80f0f21c8c4713457747e6aadfc53e28b7125d99bb7e57af97e7653b627ff779768086c381c9b87491cf93f56d07487b1638f7e8e9d8f32ad8b7c274a94ea135dfd9cab2bc1773d7cfbd1c8d1b1c9b3f73df3bd19bb9ebe7f9e038d4dbead6dbf12d27bcac637665ee327f21380e757771c2bda6eccbb25be6c99d9de3af837d7edfadee706cb1b35de4847f43395fa4dc473d5fec1c977d855eea5d69db2b6edbbacafa6189923625499fe9f691b3ddaa684b9feda368f771b4e5f3dc5245bb34a9dd7729a22debddbe8a765f475b3e3f1da4682f4b6af7eaab6863e95ee6be379afe6fd591fefd94f4ef67dbda6d5ba4bfccaf4a5a31599f3dcc5c794aa437bf673a733f7f48ffe9cf92e54a7f10966f7763eefcbb9baddbf32b47234db987ec377d16ec43dd3d94f3b2af6f7760c3eece56f689be0ef6ad7b77ffcabe6f8fd14ada672a69bf1c1c8736e630779e97fb4fd9ba3d253f99f6198a1d190e03e9fb2bdc3c6bd2614b1df6c9ebfa28e7b728e7e5f37889fbbc645a737d9692fef2fa5ce5bcaa2fdbc9e98abe4c876ce66e57cbf8486e6a7cca95f3f27eb2fd25d32157f10569a7f49541ccfd5c2ff52b94f352ff6077b8c460e66a97fbcea38391f36a1e55e3354489d710255e43ddf1aae13cd4ad5b2b7dfb83f4b5fcb4bb2cdfb17240b633c228439639360c63fa3204f41d8abf6558be1dc1dc65c8085bb7afecdf4853eeb1a7c26f4f45779472dee9774e807e49f137dfeec5dc79772ffbdebd07d8f7ed7dac736fe9d363149f5e0e8e431bf399bb0c91fb4e19d257729365c868c58ed1b61d7d6e70c255ba79a265886a9fbcae8f727e8b725e9621cbdce725d39aebc72ae92fafcf55ceabfab20c19a6e8cb74c863ee32244fe1a6c6a75c39af9621321dc629be304ef115d957f0bca25fa19c57cb10275c62020b56864c40ce6365888c97ec737816ecc37815b8e355c3b9c0ad5b2b7d8783f4e5eda835c0dfa8cb9052c786bd99be0c99c492f9771208cbb79399bb0c996ceba6cb790969ca3da62afca62abad394f3b20f650ab0c1e9e7494c67eebc3bddbef72e4effe72eb2ad28f3e84cc5a79783e3d0c6d9cc5d86c87da70c49977d3eb20c99a1d831c3b6a39f1cb7a872f344cb10d53e795d1fe5fc16e5bc2c434adde725d39aeb6729e92fafcf55ceabfab20cd95bd197e950c8dc6548a1c24d8d4fb9725e2d43643acc517c618ee22b7399bb0c91fa15ca79b50c71c225f661c1ca907d90f3581922e3b5af12af7d9578ede78e570de7fddcbab5d27712485f5ed7c9b90141ca10b5ef611e73f73dccb3c3a47f9f424bf64bc8f2647fe62e33f6b735faa7db76f75fe0be77e200e6ee7ba806c7a1de56454fce6192f9eb40c51f1782e350773e73e77fb9efa5cf1d2b6b65dc17b0da733ee47d173257f99b58008ef3adf4c707c0bea591a1f6074bbd22c5cf8a14dd62e57cb1b35d0c6c6ca6689628d794289a4bdcbe5be3370726354518c03db1d4b9e66db06fc56bf7e9eef072ec1b0dbf0ed80faf5bc9dcf954e6471927596e3e0bf6619c64fa3fefd667ab9cfd8314ff5ced6c653927db760f837d791ddf9629fe5b66c767c045ee7035fd33cb9df0ef807dbe5de11cbf5fb16f8562e7bbeee3225c0bf735320e22aeb00c9571eb03f6a19fabd72f09787d69c0ebe707bc7e81bfeb6beef7661de15face37ecfd6f3faf901af2f0d78fd9280d72f765f2ff3604d1d27f970de5679b79b1cab0852c7c9b2b98225f3816ccf1fece83c02f6adbc9939590957c15c6540a2c26d4fa252f1b391e038df963be7df5374cb15fd77ed786796b9756aeea3e8c8ebc57c21a8f3be727e1888bb8e552a7e73158e55cc5d4f55d9ccb29adbb6678d76c2cbf65cb59b9dd44b542b7a5b15bd356e1d3156942a0ef27eab94345d65eb65bfa4845ba3a4a9bc9f64adfaf23ee038dfca7ae73dc5ceddc079b0cf647bf503b00ff5d62a5cd73a763fe50e5f63df216e9f933a35ba872af6cf01d741fbd4f01fd8e9982ddb7cfb68e2057d50ead4953ea97c4c8e971f0634e4fd0e67b5db54b2ed700473b7a90e07c7f9f64885e991b646ae7c57264dd13b8ab9cba7a314dda395f3473bdb63808d339c63c7268f89f3f218dfae73749e03fbdcae2b1d8da68a5dc729f73d4eb1eb78e66ec31cef5c3f53b9df0bcafd5e527424ffb4242379aec6ef0e67ae323a677f702d0f372d801fc83cd8ae0e0d195e8e55af0d704f4723710248af136c3e83e49cb88e8a4f9ee030781aecf3f38704b043f23b348046aa7347dae9354e8e21ad53e2742273e795136d06833fb2af1b22ebe2a3ecfd41b28e5aab5cff28d8e7dbf580eb7a5b7348aea3e93cb3b0a311db3a82eb601d2175ce73c2c97240ce2dd67170f22093f3244e6235be2eef2b8ec1fb4bdd8fea991ec77ab02bd5f5aadf9dece8bd02f62d0e4365b9217de8b83a7ce87885b7bc8fcce3a73277ddb10e1ce7db53145f39c5b6639833ff6f981cfb3bc1de9f2ce748ac07e15b80bfbdd8ec87d3690aa7d31cfbe47b0b92d38975dcf324963acf9ccedce5c0e9f67d866f6f5f375cbe637032c2e174c0e1748f36a5e270aa62df06e6ce371b1cfb9e53c27754c23f00f6f9f95302d874ba1df7bd65f9e1d83062a87d7cc402254d4eabe35eed9debd7d8d78f9475f9192cb54f9fcdf43e7db6b3dda8c47da37d9f9172bcef4c45ff2cc527e47dce63ee76992ca336b29af266bc330e3652e6dbb335fec1ef2db5cf71a76b4aad739ded2c242c3f266dfcd8d93f9fa5f47326f353aa39c317e835126780f4bc10b98f6477a69b5d8d5f9ee96ccf52d250faf9f9c97b88bf65d814e93a6aa8125edee36cc5860ee038df5ec0dc75420745479effc47dbc268ee73357fb69cf758abd9ab8d470c0e2f29a72ef0fc3b16dd464e5fe67827d980e3bb875c43e6478915ba726dd647c9e66aef8ecb554097736abf1e1bd6439314b3907d248ebf31723be27ef710e739795e738b6c8e7a06c25dca7ee70a3e55cf94bdcba62ce939c2b28ebc54bf5b688bcc2b7e73af7f80cecf37bc86758f92e481fb00f794b5b2f546cbd50d1d9a4e8e86cbd8cb9cb8acb5373f45456a4aa2fae64dafa628c33af6d8cac93a41f5cc13cd5176336dbd7e7c9f796aeaac31f2e626edfbcc8d6199bef84bb5ab9fe1a4547e6a98b992baf887da40c1f2bc7341c5bd5fa60ec2dcefeb5cc9d9fe4bd2e51ee7589877b5da7f8802eef5caff8c00d75f8c0151e7cc06bfaa5f2959bf5be92b7d149eb07947bdde8cd57f29cf7dff365dfce4d8a6f5ccadce5f0a5f675f94efb377f80725d47e5baadca75453eedbc45d1d7a5d9ad4a9add56479adde823cdeab22f559add6edb51f3fead97e7fb3bea713f79ed9de0dabbc0b916cabdeed49c4b659bcc9beb02b0901a1b1d7fd8c4dce53edfb7fc63fc46773806e6fdb3bb993bffeacaf05436c8ba5bceb7bf4cb1e132db86095d34e1a50df730b72fe96c90d73bf3f313972bf7b9dcb9cf3a4d78791fb90e4d7de3ea8c9d2564f924db49728d940792f71261f8b107c1fdc738db2dc9fb4ef432ffff21a62da7268e7434a6a7d0906db82b99bb1fbd2338ceb7573177d972957d8f02c9e561f7753575c6d5ccdd769065da35cef1cfdd76b04701a3ab9d638f8163b21edc9a64345996a38f00ad168a6e47707fd046adb36da9c4a7a66d2acfcbb6d066e66e0b6d76f848dbe4bc81543efc047397a9a9d2bc9d739feb9c6b5e07fbd67df7bed21dae26fcf580cd93cc3dde28c33a63020959667f01f6f9f606901e3780fbb6007ff3edb5e0d8b5b65d93462376dd04ec7a1ab14bf6c3dfa2d8e5d457899bc1fd6e06f785fd86d20ed9172ceb9c0d2c75392bd359d67b9f827daee7b4a926c93eefdb9c705f827da9c38fcb7ab287c7fb7bf185db155fb8ddb66df2b1ee704cf6f3dfa170bcc339bfbe0e5b0ef318ce6f5fb24ca33b997b8ced4e3b1e53ee50c2ddc5dc636cb2fe95fb7733773bea6e4567ab12fe1ee61e737b141c87f77bd77d5c943ba9383cea319ceb585a42bca73c9115b385ac82658817b7fb33efcbe6c92beb5e304fbc23ce7ff19f7ee2b6d56cad7569b16ed5bad9624dbc6a9663f9b26ed5ba1dc5bb9af2ee79e2f7422b44a910fd3a51eb16f7d6ba0537aeccfa570c96dcabb28e4f102bf6f145f74aad3303d9646bcbaf5ac0b2d83ceb9f5b658e75db32b6d2da2bb47e5708bd0596d9b543d61525be3c9f7acd4c4bd35e3d70b9754402adb0f6cb8485b3c4ef55c2d262617d8175ac5aac65b88295b0b1d6768db85bedb8575a7febee59e820d3dba85f44103b6e2f55289329df8a0db73e43f8e2df29b22d5284a36fcaf307ff69922146a34faa95127f33b40b19fe9057e06864096409d7b16c9621c6df67d622e83f8eb563a8f76f9bf760969b322e7a323cb9bb8918245378e0a11bdadc76fa3d4bd2dc51cb61196208bf7b1d514b0596eba58bb7a1fd44212dad49263754c59fd0e117d33f674588df0e572ac2f94f80a6a2f273278078ddbdd0fa638df5bfcc0a3cddfabdd0babccc29e7668860fc7fad34cae482cd04e6da95685da662a01be9408be7bec26de2e7d8d2b5a95137af894512758668197549e190d8bd4493a9b1d36e9259a6f7acb70a4ed8f0f02f6f4dc91d322273d86569faf46929d2a73e77c552a8b12e855a469d15ea2efb53a54fab9a7825d387ffe819b6467cbc2e1b30824d74045b6d1b1fe7b6d7cfc7f924d23d14867a7e6d52fa602a0b3082693a826245a9d911129c66597890d362ac1fc3b69e19b6130c77ac153b2f3660149b6a2866728aed7566b550cce21621c2cd30e10e01859b63c21d030ab7d039d4765167497eae5ca82cb4c2fa7727de97babb5aace9fda9139227eb3601f3a696bab4e10877d05aa5264e273c715a61ca9d832ab7c694bb0455de4ee750e21db8e8dbebf5ab237959d3d9731dd995a56a6efbad21dbe8e88915a6f627a557bb1b49fe35d6ba76a9c56195e81b58695dafeb764a4db49be7d2bebba0d98be93ac3fc5984116eabf37c8ebd0796ecaaf377c59dbf9d4e9cdf71272fc574775cb83d965f7b6af26bc24f7eeda0f3b876d179dc2c96cf2659e7165ae18b452f083f3e5be41459afdbc7dc21537b5c2fcf1ed7bb96c7d5d722cce33a621eb773081eb73d26de2704f14e98d7f50dea753b6066ef1282d99d31f15d4310ef8289f70b417c474c3c3d04f1ae9878ff10c4bbe9c479cb683756fb89f32feba796786b5cbc3b66f9ee1acb9bf8b4bc07e6e403823af94e18933d344cd6e9cc4ec1a427263e5023bec1a7782f4c3c4323bec9a7786f8d7886a8e08e62d1b671f4c36b13c4d7a88a5d4f98f2bee5624c845b24c757665adb25c20a7e9c5b51f7b05ceaba2bb3860fe84313d5f438e67d90903e16bc6fbea568b3e86b563e209e6e98cd581dbdb3cee1f9d33c7fbbbe56df3177d6f94e0b9fdf7f853835ddba034f4d7e9c0f89d6ca13cdf03cd1072be17235255cc26709d75797e144ab64c536cd70e3acdf2bc5a311ff7b9593bc85e2dec90ef4205989af39d74353b389da4debb48385d3667b70da30acc7dc7117acfc1da2297ffb26fc95bfbb62e24335e2653ec5fb61b5e9304d6deaab63211d531e1e54b93f0664840e48237f4076c372f6484dce663e73f6ee98e57b6a2c2f6ce2cff20198e5a342b07c0f5d99241e664a49cba4d94ee1bc56e4df129153a166b29ae1b93755685ebe4c61fc3b902b851da94b22be92a1b707d2d1a204e27ce86cc5ca9d81ba24e7d5d6189df93eeab70c5d728bc7cb28c72de0d86cfdc62dc67a4ec63ca61fb7f06203963c99bae4e1d93d5f93dd87a6f9cbee593a711e7e1cd3b447c5037cfd4665c65b57356dc2ec9f81d64fb3343f2316d93a3b798b6c82c6ce4cde6ee62bf335128952201265608abca56b82facf5db5e2938dc727072b66f7d614b38d7c16b3b998f8248d78639fe283b0d282bffe57abd13c5924516dbabdd8a196631f6e6ded8c516c71e47f975bbf39d912674206cff4bd44876fb5557b945b4dff3d58a518ac2961bcc3afb8a60dc615b384e212512c2c17d7716d3bddf8f96cebfc706b9b636d7bfb2aca0663f9648aceff783e991acce1876098a7e9302f080573fd61f662abd952a7acee25fae95758772a7374f9bcb622eb58b5386b5f5fc1e457a079695ee53339866265e2744d9938b2a5bf327198aeda12dd8b510e668db142558ac949fe2bac199e2bac994c3f9095faee5855355c972cf64c120f2d899978928cd02589e8948d72168e5a3df84b9442cf89329be967e0d4757f2c5946eae8895ee71911d2f3322f544f6e8e67727305b94eb5629572ea24426d4f9d33736ae21b368a39a375b5e85cdca1476105d8be9a02ac492b7f05d85e98e5fb692c6fe6d3f2d198e5f334963fe7d3f23158adb7bfaed6633ad353d41a6331d30fd098beb1b53fd3f330f10335e2dfb7f5279eaf13e72d3afede59d0a7f27198f88210c4c763e20b43109fa013e7fd098b7425862a3c1a179e88f9e1622fc2295cb000f392228d97bcd6ce9f97ecad13e7e18b19d2485dc20235522761984a74d995b788fd3652796564e2f3c0640cf5520c756930d45330d407e9502f0a0d757c9e09a662596b99266b7dd5d15fd69a86156365211463d331f1e52188cfc0cac81501cbc899984796072c236761382a3438b4b30a52e028c4bce4605d01bcbd3f2f99ad13e7edf84a2f48523cffccc184ab020acfc5585787e07afbe8c4793b74a517ab53b441f7c512719526112feae42f11f7c3c4576bc48b76f0273e0f135fa3111fd0d99ff8fe98f85a8df86f3ec50fc03ce590103ce5404cfcd010c4e763e2878520be4027ce7b260ef7e2e3b371e1853a615e6af265466b55f8bcbbd06f855fed54de25f56855f9ab9a176171395217177ea297ebae7eeeb518bbd73addbd784538dffa9769fd5f5c6b848d9fe16fbb570ab27eac28c2ac384a67450760c572a7f1b350b0afbf05c5980547eb2c68092c986f15bd9562dcc35fbdbd042b7e8ed1956d5dfd153f2558263e36844cbc14b3fc388de5eb7d5a5e8a597e7c08961f84597e82c6f2cf7c5abe0cb37c7d08969761fe79a2ce3ff938e53ca72c3bc02a1be639e5d070e7a1c33eb68fd8eec14659bfc781326bb1102ab3fe2ab28e5558c7968af2658de8c42c16478b7c9669cb31fb4fd2d9cf3bb09316c9c9e3bd6ae234dc89cf019a8119bbcc561fa0968b1055cea0b2fd2866c7af8ad91db26bc5957ee2b4421727ee2027d79c509e6ac5dacecd98fd33d0fef1f7605b8e39d9a91a274bf3e9641598f8691af1a63ec50fc63ce0749d07f4f5e4c1f6a37386b5cd758ed9de7c281be4841d6c6dfda4692596a61bb0343d23709a5661f73c13bbe75981ef598d25f5c6100aab953a71decae36bc80669e5adc2489d839112abbda64152fe38adc6389d1702a7353a71fe2ad4f95e38a578156aad4e98cf03e48b14079a077808a67c6150e54331e58b822a1f86295f1c54f9704cf992a0ca47689433c4db29fc817bdbbe7256bfd7cd2ed5f9b476587213e3c3923b316faf9bf97dd5ec485d9af136e065ac761b70f3607f6dc0755871717908c5c55198e557682cffdea7e54763e2576ac4f387f8133f0613bf4a23fe804ff16375e21ce3d55e4ad14db8f07158eebe2668ee3e1ee3b159c3e38ea1fe789c80895fab11ef3ecc9ff87a8cc97541999c88295f1f54f9240cc80d1a20eff9047232267ea346bcef707fe2a7604c6e0acae454aca0ba398482ea34ccec5b829a7d3a46fb560ded5e23fcd1de80997d5b50b3cfc0ccbe5d63f67a9f669f8989dfa111ffcaa7f85998f89d1af10123fd896fc49cf0ae109cf06cccf2bb3596e7fbb4fc1c4cfc1e8df81a9fe2e762e2f76ac4aff4297e9e4e9c4f0dbfafe68432359c2fecedbcc3e863caf6f958241ed04462abcf485c80893fa8116fbea73ff10b31f12d3a97f7297e1126fe9046fcbcbdfc895f8c893fac11dfec53fc124cfc118d78dfd1fec42fc5c41fd588e7fa14df84893fa6117fc9a7f865587eda8ae5a7c7eb959f2ec722f1842612dffb8cc4153a715ef3f145d203d57c5762663fa5317bfa187f665f85893fad11bfc7a7f8d598f8331af1df7c8a5f83893fab111f39d69ff8664cfc398d78a14ff16b31f1e775658c4ff1eb30f11734e2aff914bf1ecba92f6239f5a57ae5d41bb048bcac89c44f3e23712396535f099a536fd229f3c6d8ab2c7863ec668cc96b1a2687e5f963720b26feba467c7dbe3ff15b31af7903f39a37ebe535b76191784b97af7c46e2764cfc6d8d78e6387fe277602ef94e5097bc13537e37a8f25d98f27b4195efc650bfaf41bd71bc3fd4f760e21f68c4bb4cf0277e2f26fea1467c9d4ff1fb74e2bcc0f88805eba4bb1fb3fa638dd5bff9b4fa01ccea4f025afd2026fc6940e12d3a613e52f89917e11403a30f619c3fd770ee3bd11fe78731f12f34e2dd0bfc893fa213e7b341bff48224c56cd04731e1af020a3fa613e655f1d72c7855bc5527cea7997ee3c5ea14d34c1fc712f11f9a447ccf67223ea113e7d5f0b70ca986bf63f5a9869fc4f2cf3f99669602af07f8bc333ef76d9698a45f2146bbaa59159bc65633fbe3205562627f85afecf61466c7bf7476f0b132391fcdbb3dfc8a4a11da8f654f63967dafb3acb5b0acd03ab0ccdacd13638ef6d86399afbb3e83ddf5072c5d92f3f3f477af5fec9fc5ecf8b7ce0e9e67f93df8cb94fce50df5030a7eeefc1c5628fc1842a1f03c26fe5308e22fe8c47963eb6716b0b1f5a24639432cb3c827e399b0428e5ce023bc55727ed115d3da71f45f191f47e7cbcad0da8b8db4bfa44b779e9abf79a969f2f0647f1913fe3da0f02b98f01f01855fc5b2c07f826681d730e5ff06557e1d53fe5f50e53730e53f832abf8995637f85508ebd8599cddfad0e64f6db3a657bb9580f7ef72b2efc8e4e98d7c98dbc08a79817f72e06ba712238e8f7301c4d02e2781fcbdf695e8453e4ef0f30ce4d0372fe10e3dc2c04ce1f61389a07c4f13126dc22a0f02718e79601397f8a716e1502e7cf301cad03e2f81c13de2ea0f01718e73601397f89716e1b02e7af301ced02e2f85a27cc4bfef6414bfe6f301e1d42e0f10f8c47c7803cbec584b70f28fc1d86a3530838fe8989ef1082f8bf74e2fc71aeb31724299efbbec77caf4b50dffb01e3b163083cfe8db948d7802ef22326dc2da0f04f188eee21e0f81913ef1182f82f98efed14d0f77ec5acee1982d5bf61e2bd4210ff1d13ef1d82f81f98f8ce2188ff47239e21beeec0df5e8cbe4f238cd53e53f768f4f1e2a50538b1ff62eedf37a0fbff0f4be75d4248e73f75e2fc05eb5dbd583d1a17fe4be740e20b1e4bb68903d1394e3f1d296d57587a82ffe7eb8c5358897580f17e815a49cc53a2bf9724e63623c2099d306f13ec16b44dd00853de3da872634c794050e52698f21e4195d374cabc0018184201d014333b23a8d9cd30b3334330bb3966765650b35be89479b74f76c06e9f963a61fe349b13f069b615063a3704d0ad311c8302e2d84e27ccd36570c016741b8cf390809cdb629c8786c0b91d866358401ced31e1e101853b609c4704e4dc11e33c3204cedb6338f60c88a313263c2aa0f00e18e7bd0272ee8c711e1d02e72e188e310171ec88593d3604abbb62e279218877d389f3867f7ec02784ee3a61feb0362ee0334d0fcce2f1012dde09139e1050b827d62e9818b45dd00b532e08aadc1b73babd4370ba9d31b3270535bb0fa63c39a8725f4c794a50e55d30bf9b1ad0ef76c584a70514ee87b1981e94453ae676334270bbfe98f8cc10c477c398cc0aca64779d325f0ba5d04b32a6580b6500d68c9e1db019bd874e9877e0cc09d8813310833c3728e40c4c799fa0ca99582edc37602eccc2dc79bf10dc391babbee705acbe73301cfb07c4918b35ee0e08d8b81b84597c60408b0763c2f3030a0fc1502c0888622866f1c280160fc37c795108be3c1c135f1c82f808ace0280a5a708cc4cafde280e5fe9e58b9bf2460b93f0a2bf74b0296fb7b61909706853c1a532e0daa3c06cb2b0705cc2b6331775e16823be761e57e59c0723f1fc3b13c208e715861b7226061371eb3b83ca0c51330e18a80c21331140707445180595c19d0e2bd315fae0ac1972761e2d521884fc60a8e95410b8e2958b9bf2a60b93f152bf757072cf7a761e5fe9a80e5fe740cf2daa0906760ca8704559e89e5954303e69559983b1f16823b1762e5fee101cbfdd9188e2302e29883157647062cece66216af0b68f13e98f0510185f7c5501c1d10c57e98c5c704b4781e96fd8e0d9afdf6c7948f0baa7c0096ff8e0f21ff1d88913e2120e9f998f0fa80c20b301c2786806321267e5208e28b30173939a88b2cc6aaee530256dd4558d57d6ac0aabb18abba4f0b58752fc1fceef4807e578215761b0216764b31b73823a85b9462269f19d0e483b06c725608d9641926be3104f1320cf6d941612fc7cc3e2704b357e8c4f9b8f7b95e5232d5d70b74c27cc584f3bc08a75831a102c3717e08380ec652f182a0a95889997d6108665761665f14d4ec6accec8b43307b25e6239704f49155188f4b83f2588df1d814028f3598f8652188afc5985c1e94c92198d9578460f6a198f89521881f86895f1582f8e198f8d521881f81895f1382f89198ab6c0eea2aeb30e56b832a1f853528af0bd8a03c1a6b505e1fb041798c4e984f19bfc18b708a29e3c762c23706143e0e6bf6dd14b0d9773cd6b6be3960dbfa04ccdf6e09ea6feb31e55b832a9f8829df1654f9249d326fc3ddee05736f5cf864cce43b829a7c0aa67c6750e553b112f4ae104ad0d330b3ef0e6af6e998f23d41953760caf706553e03437d5f08a8cfc4c4ef0f41fc2c4cfc8110c43762c01f0c0afc6cccec2d21987d0e66f64341cd3e17537e38a8f2791890474200723e26fe6808e217e8c479f8c7bc94d99b70e10b31d85b83c2be08537e3ca8f2c518e92742207d0926fe6408e297624c9e0aca6413a6fc7450e5cb30e567822a5f8e293f1b54f90a2cbb3c1730bb5c8979c7f32178c755188f1782f2b81a33fbc510ccbe4627ced7177dc90bec14eb8b6ec678bc1c94c7b598f22b4195afc3945f0daa7cbd4e990fc2bce605738a41981b30935f0f6af28d3a65fe59d037bc989ce2b3a037612cde0cc8e2668cc55b4159dc82b1783b208b5b3193df096af26d1ae50cbef26c6201db769fa4944baa72bd31e20ef5fb3ce5bb3aee09858e584be0bd045f4ba0af08198e65d8fa01b76369f97ed0b4bc0373bf0f02badf9d98c91f0635f92eacd2fa28844aeb6eccec8f839a7d8f4e990f677ce285748ae18c7bb1eeb14f139a95884fa971d7d9ac4864333b4b2e177f1788ccca1d758975899d250b6a4226bfc43e93158bb3a5e248a5e5eaf3c54ad3c5e25beb79d6ad78c6e2bac96bf2adadcc08456cbc7595bd9e4c95736d3233da4580fd8576f719db3ebe70f7fc14b1e00b75acb4feae02772f144590d474abceb1ae2af5f9cdf7fb30ea9fe9a80f560ac6643cc65831ad14546c868b05b7ca5a36c2986367925a7e62723f1693cf753119aac4042e97123c2e7a353fb179008bcd17bad88c41d3c58e41b9581d7db2f0d22acb87965a97ae48191f6ff1e4155bb9a802b99e9ff83d88c5ef4b5dfc26326ca19bda2b3ed72ff5fcabfb89ed162cb65fe962bba70fdfe46555b5e794844a61941e0f61f1fada4b9e83e563f03ca757f3139b87b1d87ca38bcd5e9ef2dc188b6891f0ac52e145c1f35cf28c9fb83d82c5ed1fbab80dafa95ddd0dbbd9221e654e7cec862eb7afc0facbbe9c7b50aad230bc12e4512c46dfea62344a492df77d618af19260a1e53d6bd954eb6c095b88a69d5b23bc983d86c5ec3b5dcc765162a6e624f9fd8cc9a2042bb1fe5e1a924f6dc5ecfca7cece499ef2cb04f1f0b2d069bdc99a6a9af5f73876b025c4e5b665bdf53816e77fe9e28c2fd006f3843b9d5638edc954e59b1f8b9fc02cfe5e67f1481f35addbee12567b5d45bc66d5adc2e827564f62b1fa4117abbc14358f1d8bf1a2b6592e3ccf7b3b5e5f338795724f6171fcb72e8e83d094e34f2c8bac4032ae93adb89658212a450745ed3a36ec56c2d3583c7ed4c5233f4039b12d4b8667b058fea48b65a6e727a90975b6f0c228cb9fc5acff59677db68f16aa5ffbeb5b223c87c5e0175d0c66f928996d8f4bd63ff63578d9e6ce3f5ec284e583cf630c7ef5928aa9dae37e53b1be65de0b580c7ef35256d42ed7f1b4f356c2bbcf84954e2f62b1fc5d17cbb19e4a44fe7db445c2da85c2abb6edf3c64b580cfff0f2c49bca13fd3df1a64abffad4652f63f1fa8f2e5e233c97f2fe6285a7567de2f40a16a7ffd6bfafa9ae1c1765cdfc2a16bfff792953fcd407782b8afe79f8352c967f7a791aa368117b8f757d6b8bd7b138ff8579aebf3abf403cf1948961bd5296ea7986264ddfc0e2c71a69e257cc68c744f8f71e2bc5b3833de63147f493945abf1789d8d5d74b8297606f629c123a4eb38939e16347a90905e7f016c6a1918ec33edbb80ca02e1ddec66834d6d118efb12d5920f2bb59edc977b09836d1c5749ca71a7c0ae31f03a8165fd6b54b40bc2734aa56e5bb583cd374f1547b7dd436579e8869edd4833d395e8e87db1a7b0f8b63535d1cd5d658ed3826fb49b89d3c1cf7aec59af2bad0fabb421cf716bbfa8db2bc8fc5af992e7e23eb889f5d2f252ff0de0a0b37d53ec062d55c17ab79217b2696fffc860f97c9871893163a26036b6a65f79893aca92bad80ee1ee771a27526cbdfbaaef563f94798e52d759663a365f0eef5e94f0933461f63316aa58bd164c216d24ca7f62c16b1b627ce953a75e92129ea98fa78e02758ac5b63f5a2df74acfbb9bd2ec530e2f92916cfed74f1cc47e23955c465b568f32d73b57cf8f8ee34ebcc0a915afe4675c26be57c86c5b28d97da5fdfcaf1d29a8bb2afe2732c8e6d7571dc99d5d557619733c99a5d5fe3fbb1f00bccc2763a0bf7232c49ecb80579260d67e4e14b8c487b1d9151be735f7204bf5cb4c2cb5c537153d714b527edfa89d95758cc3ae862b6afef98d9a5a7bb64f1139720e550ea72b699f52f916865fd394e78209f0f325d5cc1f7aa58464feb9418c59393a6a5d70e747978f238bff772cb1e5e2e14d6f867720a35a6d0b191ddf4173ffd123c99aa9d6cabf9005e9ed02f73e26cd7a455e2ab87c50e63fe2437d0f2a55271953a291d8b852ea70e047915c6aeee38c9a9eb7c6eeb62e117bcec5d64f95a33274652cb22dd8b936e6831dd9ea76a4f27551b65f4e671dcbd9ede54b7159df8dd1aeb7da8732db2b08cd4d96e0b4c75f258a2bdb5331f605be11451e542b2c0c9a075de55fd60a17ad73d8480acb1ea949b0daa679ddc8ec2d5ece97995cc99186b1577cdd21a65f2d4d88112592b816c3ecb14bff9a71779bd56686de380a9282f89a93325a6ee2e4caa87cdb6ee52e4746d4c140dad22e76d9c2a2b327100b9a06f1264174a90ad05c83c01497adb7461c6aa58802a1b9604b52325a8362e8f73038b4bf6ac1e9e84d595125617018bd72f76ab3bcf99855522dadd559634ef671c27b2abddda298a05c0f5e39200bbd17b9bfd18c3078c2a8509dc5cbb6b200eb0360c4ec2ea4e09ab85802533237fa65813936645f31149443da22ee6e3042a7f6812d44e66362cb26201f2ad6e49903d29416e0f405631bb9bc25d9215087cdc07e300aeeff824b85e94e0daba3c90f76270134a9c6755ee6b71c0d5ab5d1257efe80aff38355d878e4922da991251476b47f614aa0fdfc9f195b8b4c1de028fe27d28b135159e650f8b57c6a49eec021aa87d29e16ce72aa56c230a993dc378592c506d9c9044b54b14a8b2628baaf5c424aa5da93b0c654935cb0ac69b0bbc9f357e4f8af92023f6a32edcf54f8a336a86d2e3f3ccd804b4f3d3cd6ce7e7c40264f75e4990fde9fdcfddce1f63791e9fe0ca4d5a5533a92c0ed8aa419fc56ed4ad7c59d2c5b72db611b4c5768f0a577cbd2b1378d700ea51a4a477c11518e28069f3a024a63d2831b50398e2dc37f111686c0ca41f9d1c27c6d3578adbc7691097cfc99098322831756072f8235fdc1a9bc81807689b41bf5766744f947c5e57dcfabc8e6d9244954589aa13abdde68af7e3d22da004cba6f6325833c60f5511a81d73a26ad9275fa72815f562b96bca5d1cb0e50a6ccdd21471f5ddaefacf1ef3c71a9fe7c69bbae3ac864785385a2dfc5299f7c627f71a67792e9cb7969ea2a990ee715e58ba8787a4741f9ddbe9755431e91e865ed2030d1006b93a27d0d5d90e296ff939bd8e62323dc50346ba8767b5741fbd06e975ce8548f7d107969e72245c7f568e29494bf03940e9c85404f57852119fee975e6bfc21dd63f7687abda6dfa4fb6c55a47b7a7a4af7350e9ceeb9e5ace665b5573dbd8e5ef7e4246efde4eb4c5e900dfa7f3ebf3ab39775683087c05760e63f76ab6308fdd4b1f9cc9e4ebf8295b1d44b2b66d5ee90ed5ecb06f722edb29da1b3a685ab25d2c94b04eb35f107749c0d350967762c718e003887998433279638cb00cee126e1cc8d25ce9301ce1126e11c144b9c97029c234dc2393896386f0538f78c0267090a149acfbd73301dced654386f61499ca34cc2991b4b9c97039c7b9984332b9638f70538479b8433279638cf0138c79884333b96388f0138c752e2dca18e9add9dd107d1a1ec4a85320dd4ea79a6a0cc8925ca4301ca7c535066c712e52c80721c25ca9e1a94de17f0e1bd8a64707b53c13d09c01d1fc5f0f310eb7f71cd4a2cc96e5c7eae42743cf30be2e7a5a5a01a9a10c52454bc56c73e2351eb65b3f0b0b6a3c23a18609d18d51b54dc0b4b9c4180087c723615bc95005e01f59c3809afb4c164e9b900dfdedbb20e8772a4d9b81915ca5f00ca4951acb890e564e3caa8bc702615ba3900dde4a8d0ad14812242b7890add0300dd9428de5b5eec0ce0aa8bc3ca989266deb95418f70218a746b55c4ac3c8bcc301ba6951a16b1899f73e806efab6ac7dddabfe113ee491b5036f040f7933a22807b35c0f79f274441e49d68899083c7226f5b34805b3a77bd993d1560af7484ed58b5f63ba3380372b8aec8cd5c5eec634617626f3c39d01ca42ea377796ba26858e114fc6b596c38b41474273006df6b68016c7de976600da9c283ab5bc3c01c32e2dd21eed3c2aac25a03e9e6b2256d2e12b32aced01d67d4c9ae3433aec4f36c7676780735f9370928e5393e19c0c70ee67124ed25914643857019cf34cc2493a658a0ce7e900e7fe26e1249dd04786f37280f30093700e8e25cebb01ce034d994d9145f91c44f61cfe1b4ba29c6f0aca9c58a2ac065eb9c01494d9b144d91ba05c680acadc58a2bc12a05c1405ca4c96fca650edd77e79884a71367ed5ce5a50562e36734e4f6e0c7b955600ac45e6ccab1816c3aee04120b31753af05efeed5cc63e50e0d326c6da8b035011eb884125be73a33b67b0a3ea10f924dc01f056096980473680c610e0530979a0493b043980c667f00b3d4249884b53619cc5d01cc834c8239248630e1aa82cb4c8219c737c0760730cb4c824938e44b06b32780b9dc2498843335c860ee0460ae300926e19a036430770130cb4d8249d84b4406b317805911054c6c3a963a404198cdc9fa897a0098079b0493b00222837918805919d54b4bab98fcec78449354c9f01d0ef0554531f2e8eefed5ada119e72ee07e00673525ce1d1d9c6556a032e67e8d0e1f818cdff0c461a0c772a56940092b1f32a0cd00d0559440f90c5a771770550c071fd240865e4d896b27503e26b7e31d3f74afb55bc0e03bb3c4652599274e0368d79833c59fb0e7926c5c670a40b936da719d2aecf31c31a8ad5b036c874491b9e103e26c07db5a31026e3f3c163bebe856084fb55f87227dfa1e4d96b9413573a849ab5691ae4749f6fc7d1df0d4c34cc249ba5a2a19ce4b00cec34dc249babc2719ce8700ce234cc249ba703719ce0280f348937092ae344d86f34c80739d493849d74127c37924c07954144b2ce5284da708badbc8d6c6d80ae01d4d09af1bf3dae274af5740e891e90922a8c782b6e6312642251cf121837a0c807aac8950097b33c9a03200f53813a112f6689241fd0b94a9c75342edcddc5dc4e5e2621b241fc080dd720da9cbf80ce0b5275002eeca6a8f11e15f878af338d11dc067d74781141604752d524b5ab66ea2427a05f0d213cd794d8070861c5977f2ae00e549db7282821b25e9ba0864309f0659fd649360124e842583f90c80798a493009a76893c17c12c03cd52498711c827b0ac03ccd2498840f9f6430970398a79b0493b07b840ce6c100e6069360c67131bd6200f30c9360c67199ef3200f34c936012be0a4806f35900f3ac283ecd319835cc4f732c03203746f50d09a91a113cb2018e9100ded95178e1a006ea852500e439512c26217b3579a7f06af0ba7ec3eacb5c0dba36cea5c4da8bf9e9789b6e9de72b74d8ebbf56585791e27d8faa2ffe3680f73c4abc1d189c2e3bc50ac88b80e9cc5e053bce5dc357808c7f3e25c2ed1c84fcc64b847f4aed52cb1c32706954e01800774194af0a54b1a556b0250daeac3c1364e60ba9eb72b9807da1a8b1175badb03c67a6311f098af762f63b02cfbc288ad11e775d6e2f00e5f64df7aad86448c9be94720ff0cd8ba36867da154d9ef04859dd4c152dcdea585737c701dfbc248a4fcee8ab1bc277835a52a16b04d05d4afda0586509acb00235940f7cec00e06d3271517bd29531c916b59f08cac5cb4cc44a3a204186f547e0ad976fcb77d5e2bfc8493780f20a735fba22443b9a0aed9f00ed95262d234e3a3c41d6346a02cad2ab4cc2991d4b9c0301ceab4dc299134b9c8b00ce6b4cc2991b4b9ceb01cecd26e11c144b9c17029cd79a8473702c71de00705e67d23b6c8362b938e90da0a174bd4938736389f35280f30693700e8e25ce8701ce1b4dc2493acd950ce75480f3269370e6c412e75900e7cd26e1cc8e25cea300ce5b4cf9940de9cb01645dca6d4123e9565350e6c412e5a900e56da6a0cc8e25ca8500e5ed667e158870563bd9c27c9341b979471458e14ba9d3ade05cb08035b4054cd301d63bcd798b328eef5d740319ffae2866b76759ffdd8bf3359ce9b00702bfbc3baa49d911af3a433659e61100ef9e283cd1bd88a97bd24ca1b58d7309790a8079efb62c21235b63663615ca3b4009795fd443c172c5832231ec2bb763ade0bc0c5d6585b5179e205d0da13b15da9b00dafbb7d5fcb886301dfb4490dd1f306795e238bed53b04a07c30aa6a4836d9c7d5bc23045f6d89efead95d01cc2d51ce765fccea7e33288e1f42de1b94980f990694f0f9870c680500fab06940e3f83e463a00fa886940e3f871916100e8a3a601251ccc20037a1700fa58d4eb1b7ae9e924ac98c87a3a3f0135fd5613a1c6b1fbf80b00f57113a11256506450df01509f30112a61254506f50300f54913a1122eca4706b503a8a89e32112ae1482719d41d00d4a74d844ad8a42283da12407dc644a8848bf591416d03a03e6b2254c205a8c8a0ae00509f3369ca77161b16c38ee77e00e7f326e1cc8e25ce7900e70b26e1cc8925ce7500e78b26e1cc8d25ce7300ce974cc239289638af05385f8e62d0cefe2878a9986c53ee5acd2ba289376403c96b5812e52b510cda799b10463ad99b6c04f478e097af9a04338ec3c9070298af9904338e9315e70398af9b04338e8b44ef0360be6112cc382e12bd1f80f9a6892bda90be9640b6a2cd7100eb5b2662257d07890c6b2780f56d4aac3d3558f5abdb4c702e89ec438f055470f300dc774c864bd89c22839b0de0be6b325cc24a8c0c6e7700f73d93e11236b7c8e0fe8725e1be6f325cc2475632b885c0733f3077b936c251a8d154688f06683fa45ee93bf98d847c6bbbc86251c2265b9794c4b04faa0dc8f01f99d45b4aba4006596f694fe0871f9b8493b4938f0ce75e00e72726e1245d6f840ce7c100e7a726e1245dab89eef54580f333937092ae2446867313c0f9b949384997be22c3793bc0f90525ce3e1a9c5e5b9bb0978a7074f4572ac84701c85fc60132e16c2832c84500f25771804cd8ad4206f96d9684fc751c201376af90417e1140fe260e9009bbb6c920b700c5c53fe20099b08b9b0cf27bc093bf8d0364c25e2d32c80380277f1707c884ed6432c8ad01e47fc60132e1582e19e4a900f2bfe20099f04d2c32c87b02c8df9bb2d224693f2ed9dbd77f80eaed07535092763a92a13c0478e5bf4d4149da1d4e86722c40f963948b2c940906bc0c6d58cb809c0580fe64e682b2717c25b80a949e3f4751db273f1fbc585c5e213cd5fbb274848fb96423b78b81effe1207c8848fb96490a700c8bfc601721c17581c0920ff1607c884551d19e4dd01e4df4d698691be4e4cd66ae80c50fe610a4ad2775fc9509e0750fec71494a46f6593a15c0650fe775baeae1ad92c58b2c59417b024caff51a2ece0a0e45ee75e6e3ea2775d4753219c0110fe69cec70fe2f80adcbf00cabfa2f0c6da1f3f88bb374e000859634284adac9d2a4b6085158877362fb482708445319c40d409404b5042dbbe8e0a45c69434fbcea5c2b827c0d88812a3bf8f1c103e2892d5cbb780264e634a94f04345f3add283af6b9e271efeb829dcec19d65eb1b8c16c2112c1fae79ba8b01e0b3cb4092556f981835ceb7ff2258a02d650beac331f804c8b22ab6325a6bbd14338604cd6e859045036a54429dffbcfacd5e869387e390ec06c4609b3b9b553ea8cb6e73b23ebf16bf8b404b89a53e292efe9c9fec862ed87351ad280db73006d8b286a702f8f85eeb9788403c3644b25ec0b1a462d4dc44a3a0b840c6b3b80b5152556bfdf671e44d97c27fb3ef36690f95b9b84333796382f0238b73309e7e058e2bc17e06c6312ceac58e21c0b70b63509674e2c719e0e70b6330927e94a68643897029ceda3c089c1acbdec01e1d33ad913531fd050ea60124ed205e5c8704e07383b9a8433279638d7029cdb9b843337963837009c9d4cc239289638af023877a0c4d98fd5ee3476cf79b35f89592efee6a3972b8564f273af85cc9e064e3e963e980a765f50ef77de9683719135f0c9baf27e0528bb988292b4714f86b21214013b9a8292b4614ff72d6780b2ab292849fb97c8505e0250768ba253d9ffcb3171fc6056252837bb6f4b0f750f12132e0c4336489c033cb40725cab62c39485c2c5a9ccba31a14269b4c3302f8e14e51ccfab027d3145a879731fbf5eb1542a83c9ae93374cf430064cf28ca49395ccc7dafa4e674439bf6ba0464ee5e94587b6bca49db17f984af156c6ff11c5491b217941030591f6863e0b7bdcd99ad14c78f114d02287736a9779ef49b63649e7937c0d9c7249ca45fc423c37935c0d9d7249ca4afff91e1dc1fe0dcc5249ca4af0092e1bc00e0dcd5249ca4af0192e13c09e0ec17c5e44508d3fb4706081703184d8576146891a69b39cb8ed063c966d9e502acfda37810cd610df3f5830340d6dfcda49274106576272b49af0538773709676e2c715e0c700e3009e7e058e2bc1fe0dcc3249c59b1c49907700e3409674e2c719e017066988493f4fbcc64380f02383329717663ea1b49bc75698b34b40ee65d40bb332b8a76a7845a9a722e48fcda9dff03de996d0ac838be1df73c0099630a48c2b511c9400e07593bd7149084150f19c8fe00e420534012cefa2003b900801c6c0ac838ae813c09801c620a48c279c76420cf0720879a029270b5633290870390c3cc99d045584a9235c97702288747f19ce3b7873d8efdebff6049a8234c844a38f5900cea5700ea4813a11236dbc9a0be0fa0ee692254c2263c19d45700d451264225ecf22083fa3280ba97895009bb3fc8a0be04a08e36112a61339f0ceae700ea1813a11236f9c9a07e06a08e35112a61e39f0ceac7006a9e8950e3b884d547006a3e25d4762cb99439bfa8614ca9b909e01b17c5b33d3e8e19f7c18dd500e5f8285ed6ca523279047e38930adea300de044a787c0d78f732a8b32de522eb08179cccec79736531f4bfed00c2899408bb32777f279ff4badaa948dc593aa2a72032af5c09baeb0acc798388b0938eace7b30878e7de26ce2d265d0e80acf9330e78e82413b192aefd4186f5dfc05b279bb40410e9e443b237889b022f9d62124ed2d97264383300cea926e1249dcb49867329c039cd249ca4f3e0c9709e08704e370927e95b1a64382f023867988493f4b502329c37039c334d9ab84dbab81fd9c4eddb40436996493849979e24c37925c05968124ed2657bc970ee0770ce360927e93ab36438cf0538e7988493741564329cc7039c73b7e5bc3a77468fe314c556a056dfc7149439b144790440b9af2928b36389f20080723f4a94f203a3f60a74723bc5ba60952051cee2bcfedc8da09c9c17c5c01abff112e18f527b8513247efdee09006fff283a88fd2f724a38d84bb6c86916c07a40142f1778abbbe35746be0b401e680ac8384e3f7813809c6f0ac838be5bf92900b9c01490717cb7f2430072a12920e3f86ee53700e4225340c6f1ddca2f01c8c5a6808ce3bb95ff04208b4c0119c747c4ef00c862534012ce2f2203f91300b9c41490842ffe9181fc01802c31e76d5fc20610d9b3f77f01caa551f497bbfb7f6c63c631fb730e726152f27e20b2d998c300ce524a9cbcc7bf525c2a3bd07857c562b6ccba2c7edd67ed01b683a27843228b35a437244e05f89651e26b61ed5459022bac40332c0ac5e23f19b0de54c03a00606551f57a9788326dbe656e159b6305e01714c5bad7fb1080713925c6ceaeca6382c095273e0d52e9541ab3c5a511c0dc4405f3080073853913f9093b6cc91a358300ca724a941d815f1e2ccac22a972f4650a990f9e383006205f5d38aac5492cd983ce715285e6ac2d79fe2573b7701200f8ea294f4f6b49215cbcfcdcd06e3d59526c18ce30b4f7301cc2a936012769391c12c0030ab4d8249d8794b06732680b9d2249871fc32da780073954930e3b83cde040073b54930e3d8fb3806c05c63124cc249016430f301ccb526c18ce3c2f48301cc434c8219c7e7f1a100e6a126be014e3a7797ec0df05280f53013b19236e4c9b06e0fb01e4e8935d8d7fb085ba2a3a9d01603b44798f4a228695b94acffbd17c079a44938b363897334c0b9ce249c39b1c45905701e6512cedc58e23c0de03cda249c836289f33280f31893700e8e25ce3b01ce63a398c1c1e7aead12a3e87cd82dee333836b224bee34c79a391b41b840ce5ef00e5f1a6a0cc8925ca3520539f600acaec58a2cc0228d79b8232379628af06284fa444d981256777b8d7638da8ba194d85700f50469e64e61bb784a396646fdcae02584f36259393cef320cbe41d41263fc5149439b14479364079aa2928b36389f22080f2b428dee0e1a8ece5beb9a905aca1cc581f0f4acad3a30099d54041e603901ba298c98e656e1953d29509e65261bc0664ec33a26a532697bf992a7c3192579fe8fa2781279e1945961ed640b3f47400f22c735e0488e39ccc8500e5469356031c44594a92ad06780dc079b64938736389f34280f31c93700e8e25ce7b00ce734dc2493a038e0ce76880f33c9370e6c412e7c900e7f926e1cc8e25ce2500e705d42fdaf38957554e1b934fceca772662c5af91de0a60bb9012db8eacf68bcfee3776dd0d76e2a71eb2c6fa3a00f422533ad7482b1c32943f0394179b8292b4b22143b91c74675c620a4ad28a860ce58e00e5a5a6a0247dde2143793140b9891265570dca39168f3c4b289f4d6263ad80555640fb987c5d9f10e9262aa41700a49799b312561c5f39cd04282fa79fc1c6a7fcf1d55faa98bdf2019feebfd00acc271814c5b0657917a8bdafa0c4d79ec11ef499d621aecb1787a88a75fff97a00f0caa8d6244af69fcbd311f59e9365e38100e35551bcbd53cd965aa7b9efe9dfdd99e05c0027ba905636055468b301daaba35aa52df239be7453a401be6b28f175739590b0a494ab05369c05176703a89b29a1b60550b90f9638d54d041e49f6a6630680772dbd478eaba96cf2aca02b1ddf5b26308e75967db225c75bdb62d1408adf534e5b00f53a13dfca259d404de6ab7340f3fc7a13b192be2d4186753b80f5064aacbce779152b155dbee56cba158863e393a9c9a075a782d60e64f11b4d1acb194439ab926c2ce77680f3269370e6c612e75500e7cd26e1249d894e86731ec0798b49384967a393e13c1fe0bcd5249ca433d2c9709e0070de1645af917b467a43e9359a0930de1ec56364b6d2c68cf384d5c700bc3bcc5d308770e5acd15468f700cdf33b4d5aa580748a0159175c6380f32e9370928e8d93e1dc0de0bcdb249ca4b336c870ee0f70de63124ed2e90664384f0038ef350927e9e47f329ce7029cf799849374b63a19ceeb00cefbcdeccf247c1e22ebcfec02b03e60d2e325e92a59648f9737b324ce074dc249ba861b19ce4d00e7169370922e3a4686f37180f3219370922e274a86b310e07cd8249ca4eb5f92e13c1be07cc4249ca4abb392e13c1ae07c348af7cb1733fd6bd1ee8c1ebfeeba3e00e463a6808ce37cf6ee00e4565340c67145b71c00f2715340127e4f850ce46e00e413a68024ac6cc840ce02209f340524e18aff64207301c8a74c0149f87a0a19c80a00f269534012ae094306b21c807c268a8e37ff6b5f12563d646b5fee0db03e4b89b533f3d73d4cd88b49d6399c00bd98cf990493f02ba764301b0198cf9b04338ec3162f806cfe824930099fc4c960be0a60be68124cc20a880ce66b00e64b26c1247c222783f93a80f9b24930099f81c860be0160be6212cc387e68e62d00f3559360123e0b91c1fc1ac07ccd2498844fe86430bf07305f37672d8e387eb1bc0768b2bf11c5746cfea6b9548d682efb5c2a78fb003f7c338a7147b8c6db188b46b57509376995c8cc8b1da4715d97e35080f3ad283adedceb7270831bc6bad60300c8b7a358fea9cc0ac4cb46fe0ac06aa783cd5d52c24e37c2a771b2d50fca4139f90ef58a1c55cc5ea9085bc6317e1eb93df0c877a358d024535433fc7595b2e82a1ab25a7a0bc0f71e25be36c0fb0a052ebe54441e938b48c4cff33a0274ef47fdca945cf6ae488cf0c8ed582b38ffca197f49bf5c6471d23291ece5fceb4199f84114f5f5d0065a5f57031ffd308ae7196cc4d1fd3c43d89d4656528e01283fa244d983a98b9279cfec8460e9323b00fbb1a960097bd3c9c05e06c07e622a58c2311f32b0e701b09f9a0a368ef57e6f00f63353c112f6b893817d0280fddc54b084bd9c64606f0560bf30a78145386186ac81b518a0fc9212e576d68efb5bd0c9550dab62386dab2900f795496ff592be7e4ad659dc173c7c7e6d124ed2d58dc870ce0038bf310927e9da5b64388f0438ff61124ed285f6c8706e0438bf350927e93290643837039cdf51e2e43b3c30ef878f1fa616a0c6fea7890b4790ae6544b670c410e07dff32112be98a5b6458bf15deda2c4d111f5f4b3c4f9460bc0c5b2cecb79f5406b209a2715d2c902cb6f6278b47c36ab6c00232cffae72f2d0eb0fee98e27c44c90716c0dab1047b95e91d05e6e9de59655b1cc9dad20df73d74838ae919ee06f3b578a7bdb0beb2747a7aa44b413e273255c878f5d4d617c0ac4424b79a1d81632f9c5970cfe526e62b0f5cb7ee41d58f3b03bd059cb6eb9b3278fd7adc9e3995aed0718192585ca424ba1ba62643b15bf7e8960572c540bea8c69ddf1c353bb758a54c9e8cbd3a221c7ffdf3cdd9b3ae9de2863171edfac107caf6e8b7ee4776e4454b2f29a510e13cf109f0ce1ff8df7ebe9568872615ca53033885fb7b462e7d62b15f7cdd8d54c9f0e2fee3fc1b2ac5146bffafab47f8b7ea6f4695bcdee0f55b42778889d3e1dd438274355087f5858e30b760e5f6afd5de481440fd1d388ab8db1f64a445c4b85ea72267f785dc95b5fbc28fa8592a7cfa9240d39c7e0a545262f2d7e7565a84c9ea17efbdbd343f5f4df2979d663cadeff636fffa3b6b7ffe76f6f0fd5dbff4bc9b315f0f6949fd2fc7fece3ffabede37ffeede3a1faf85f943cdb32ddf3cd6c4bdd7e00fbfb5927e9ebac492d5fe76cfef6f5f07cbd1125cf4e4cdf4eb7c7de4bfef67bc4ef1bd7f6fb267ffb7d487ecfff75164d0de87cd3acf045428fffa4fd1f5b7cb10ac7bf0300 serializedProgramBytesString: - serializedSignature: 3e47976988cd3a76a473195e20f53cda441f92ac2da843dcd7babdba438286e24238e55a3c2c7427ad2cc845578eed6a71b399c7a301cf4e9f87765f8e331607 + serializedSignature: ed08431140a5ae0951f96fba72ad12446c171f94edc9281ca17d4612499fa6d2d74084c7cbb52b3c614d49621a254ce7b4e61eaf5bd60bd25e9cf0858efa5200 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/0ebe5e8b90d0cfb469bdcb258e1afd2f.asset b/Assets/SerializedUdonPrograms/0ebe5e8b90d0cfb469bdcb258e1afd2f.asset new file mode 100644 index 0000000..9704978 --- /dev/null +++ b/Assets/SerializedUdonPrograms/0ebe5e8b90d0cfb469bdcb258e1afd2f.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 0ebe5e8b90d0cfb469bdcb258e1afd2f + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c5545f6f8e721bd4897aa841e6a4212aa8d168a5421208a088104882480293451ec62ef8a8a8a1d7befbdaebdf75ed055d7dd7577dd5d77d75dff77e6cee49e77df9cf7de7d37e76686ff2f7cc8cd6d67ce7ce7cc993eb7410e737e62839d5ff3d91c36810d65f358095bc3563b7f4d708e15ce3ff74c5d9fcd2a9de30ae777b1736f30cb4af126ffe91febecfc9eea9c55b16ae7cd1ab6cc399689fb7359a9f3f754e7dd52e78c5f5deefc2f759e8a35745e9ac726b2596c26eb14eb9842c47cf15295bc16e3f18a35757e8f671b9dbba542291e488eb8d5c9f935d7b95325ee55384aabe716b245225a15cebd65ce3b95acdc91b954486cfae37026fe60ee612f79ec248f5cc766f2ef3de4df4de5dff0f946f2d839cde7bb80f79a81bf39a11d49deefea1e63fb38c7c6cef12670cedffd513ed7cd95d7606512597bcbe33ef2d843cabc390dfd9bc863568af82693d113c84a87595379ec2d8fbda4beb764187e5f97516c3b90c759f600faf406613703f7f9b53e21e2aed231cb978e596e3a36d826d36f977cbe9f3c66cb637f29db79a63d93d706c863f7147a0d74df63a39867b34e987bac95e783e471b03c0e91ba29deb782f3b0baa8341d2a65f69461dca6b9ae9ee7f76f97e739f298eb4baf61f2b93be4795e9afaa4637f4aa7de328c3bc1b9c3b1e19224b254baf7f1a57b1ff9eeb92ec7860ffae203ec4f2b375fcabb2b8378f4f5c5a3afab4ba3ecf8e752eaa0e4174839fda4dcbbc139977b61c0b83594efdd2bcf87b3d4be6daf34ee8d72e53455ac47bbe134eee05e6fbc1f8bb7e59129f45469dbdf97b6fda5dc722957c57f8c7b1e539cb3801cfefe3d3eb9d93eb9d952aef2117969eab9af3c1e208fe3e4712cabcdc7dc45886bfbcbe38132cc012cde072836fb79ef76546550badc92a5d1785f5a7797e10e4c2153bd3f411e9ba5f9bc7a6662089d0be5b1799a613697c74921c26ce1da42d39f7cb6303a85ccc92edfa6d54007474eb3cdf27c8a3c4e95c78324ff213e3b1892861da4d2659ad4858134707469de469e4f97c719f1ba3875c9789deead3b9d6283a4ccfbc0393f0e96d7ef07e75cd7d96e38cd9f953267c9e36c9fce07d3e9ec54dec57bad5a02db48e7bd64f635d78d5f8b5c57768b22795d1d956e859ede4d278277951ee9e487f992458e8f718ed441b13dc4f7dc03e09c1f877ae189bf9d775b2adbea0aaef3771f04e7fcfebc34753d9425da2c97330c843d4c862dfd7fcb73e5b387b1c4bca77b971f73c1b55c29ef13f9de4296588ea9e778dc1e02e7fcfe8234e376b8463f27dc566393bcbb88c5fb9f099e3d3479435e3b42ea93c7e2f3967aa7a7f74eac5c5e5bec9eb756ba2c91efe4032ef9ae7e7baaf2b4581e4b99be9c5d0638c8fce8b4276bc3ee2eeb314e4b110fab443eb3dc17efb99e9c169da5eeca8fad60f179c6ff2cbfa6ca3b15ff35f2b8da7b76f056796d953c5648dd0a589c6f664782ebfc385cde7f189cf3e7ca3cd91dfbc86baa4da074d5a5e751beb8eb7c40323bab749f1da4ca9a2a976debed92dbb33e1d96b0e4f65bedbe374095173569be974cc70daeccdabaf34679dc248f6381ec8e92eb088f436d7d6a3db8c7cf65bd8aad6371e540525d8e96c75629e2b317788e1f3787887fb27b8de5718b8cdb4816df9e18e9a667db0d49641de772eaa47cd8f1ee3bed948d9fe0de6ff38e3c3f11c4898731ca63dd46e5a193e43d58eead93d7c6806bc7ca6bfb7ad762aa6d7cb22f7d1ef1dd3f05c8d0dd3f15e8a0bbbf555e7fd4d5bd9daacb9fe68bcb3a9fae63585c1e66a727c6553c03c37e2c405a9e21dfddcf9796fbb9e9d23e59be3e539f961d545de12c5f5a9eed4bcbfd3569798ebc770048b7fef2da819af41d0b38a836ccb9e0199816eafe7940aeeefef94007ddfd0be2d3b28364c62e44d212ea0fd3f2a2c4b8c60ef485fd781a6979893c5e2c8fba3ae5367954edba27d2907ba93c962591dbd527f7c934e45e2e8f972591bb9de9f5cd243c65ebaa1f641c8bb7757eeed8ed5eb949645dc1b4b6de69ac3cbf92c5dbfa552cded6c7b3445bdf21efa9b256b1e0d760bb54d97aa1774dc8e3f7ae06cf405b55f7af017275f7af053ae8ee5fc7e26cbd934a97eb99ded6a1fed0d66f488c6b6ca22feca7d248cb1b7d9c15df492cbe0d21ebb09d957eaace723c4b5e36ee74e50f556598ea83992ce53f0dcef9718a2fdc2932dcb5ae9c2eaa5ed5525edf2aafab3ad0cd323c551fb8453e77a7efb95bddf31c59d6b1db7dfc55ffa7b295833c7bab8dcb6de01e8cdb34165f2751f9623a48ab69e01a4c2b55574bc555f557aa3e42c56faa94f70c38e7cfddebe99ff382bca6fac98ef6eeb5b9ce97be2d811ef7e96d45e80ad22c701d49c5f9fe14710ee29366b0789f34c3b583aecf2691f5b07ce6bb24cf3c2a8faa4ea0f2f74c16df36907d2b4c9637b159befbaa7fe3328f7dc7cd400f259bbf934c6715ff27e551d991f4efb1d92cbebf49f5a7e8ca884cebb199de5b26753a38de7ec4b9930edd55de54b6b834857d485fc2a4ed33d9c68ccdf131989384c18034c34a12af58118b6f9fabfa9b4cc7d85c79ff39793edff7bcecc761eafe3cdff30b7ccf2f90cf3f2fcf0f897f9efd0ec8e1e72f78718ba93ea617c135d93fc45ef2f8f490edb7d8a1f161b397597cfb4eb5e10e93cf3d0fde830cd47da5db425f9c0e97e72f80737e5ce493bbd0c76a914fee113e7d5f91c7d7e5f1352f8e79b9e01dc093bd1a2f33a94d2b7d17cb775e04e78e4df74856ff57ef2e91c76229e32570ce656c9669722e2e2bb6d4c76f09b8ce8fcbe4fd97c13997bd2b897e2a2e25beb895b8ef6665a5f16ea93c2ef7c56db994b1c08d5b56791259aaffe44d5f1a2a9be5f2566ad255f50dbd2acf57481d5e01e78e0e3d1bcae7de627adb2ef5bdff6afcfbbd547fd5dbf2f88e4fb73216dfcff49e3cbe8fdb24fbc0a7fb91de33b5fabdebd3ef489fdeab64b8af013dd4757e2c67f165944a830fe57985efbeec37d38e6327cb23ede4f12396b18f651f0359e9f4e5b497c74f4284f92990954e981de4f1b310617e0e64a513e6574c3b36db5bd67f7b2b3b52e5dc1729e47e298f6d659aaf9636f03a3877e4f769e3caefabfa8abf9647e54fbe91c76fe57b47b1f83af277bef07e605e1e38535efb43bc2eb5cff0bfbf97722b35effd1edc83cf56c5eb103b0a5ce7c76a166fefaa0f3d59bd21154fc5718d94ad7c5957709d1fd7fa38af7539f795fda97d77c8f7f2d20c57e9f9678421e4f54779fc938f972fcd14af503c92d9f25f98d696fbc9f2afdf75beb07e4a11d65fe5518d09fcece99dafc2f89b8c5b8d272b26fbc163aa4fe07e70eee8d3bf4ffc73b569ac9e7fddf7fce1beb44ba5f7dfe5f11fbe7491792ab6de972eebd348975461264b975fe4f15ff2f84f79fc8f175e81f27dff96c78fbd7bbd541bfed7f8f7631b7c7c553bfb53f0aef227fff585fdb9f74c6f551f4e1687df7c3c34faf1cb71cf68f488c5e4b1813c6e0476b33133dd623e5f1137de26fd273adee6d8d70039fe33c03ffe036c5a1b7e5e9acfe9ae8d95ba6ff2a5e12657a78172fc7ba08c7f4cd5b10e4c1e56acb14ffed152fe9be09cdfd78cefc5e45ccb58f3781971f54535f6b7d97bbfb6cea5ea5acdbc7b05b2ce1d6b04dee3475507537dd2c9c6a392a57d0ba6ed171da4eafa2a8daa52706bc9b4fd60833e0828a7158beb278bb56671fd64b13de5bbaa9f4cd67d63c7c47388299f78ac179e78465dd3f581a5d04d7b6db594b9c567875bdcf80f7e50dac8173e3bac48c1413e173b0e3ca7c23a1ec449f98113c0b5e3c1357e3c51eaf6163877e40fddcf27f724f9dcdb206c7e3c595e7f079cf3f77acbf35358fcfc5e256f2bd0e91437cc21b2de156be70be354e6d57d1c5e437ef5713815c83a095c5332605ff56a70e4d7df9569f0737c98a9d2409b2eaa5e7f5306ef9ec6e2fb1c4e93c7d37db673ba4c9f9f5dbd73bafbecf49614b6a3e4ca323176068befcf5163861d813c7eff3d5ca6369c337df139d3176e4796ba1f43e557e58fce96efbc0fcef9f12c90fe72ce7fec1c70ed2c793c57beaffc8eb2d1f3c0b3e78167f9f17c16df777bbecb7fd8cf3ed9ea3d357ef82138e747e5a32e94f73f92e72a8f5e0474b8105ce3c78be53b1f83734787dc5f5c1b18f60a12d625f2bd4fc0390c739bbcff2938e7713bcef7fca5f2b9cfc0b9620ce57cee93e3d7eb321047353e784f0a7b55e3b943c1390feb3637eeb96a4caa417af2b4d7541f845ccf11bbdcc74d8d69be9a81ec1fa48ced2c3e1f6f7719e5c9b1b73c55875365c0f729b874f5c9bf82c5d745ae90f775738d543d43f9d92b59bc8f5432af92d7bf00e7fcb8435eff12bcafae2bdda1bc7459a93cd54d1eaf9672be02e7fcb9bf65900eff9132aef1a5c3356e3a141421cf7d0dcef9fd7f070f3ba66cfe5a16df5779ad0c5bf155e559d31469afe4a979d4720d504c8de7ee02e7fc783d8bf37be21cfabf1b585c192dce1d5d86dfe99373a34fce8d528eca9b3be5fd6f7cefed04f1e2f7bf75ed71f8b3bef8a48877fcb54631c16b0a2b65c56c2dcb110e809782e92e99536fa65e2cc74537e6bff84f7f116c35dbe8bc5aaa5bb1364fac87ab66f94ebd56b762ad8ba80fabd02788dfc5ce136542e8ef6309413c94100457aedcf9570a96db5539d7278bd57a7cc15d997367289bee1cf95b4bd830b6d0f9172f65be136cb9d3c02a6545ceefb542de1247edc4275345892fcdf3bf33c791e9ae1cac70ae28a06b9df372a1e15cf17b9dd0b454683fd5b9562dd631ae662bd878e7b841849618f74ae76f5d984512995e47fd0242ecbabb4c5125d34427365cfb1c618bff9722f591221c7d639e3ff84fc31ce12d4f4f4889ff63e83a19de293055ca182690c5e2aee5b11cd16f30278160f03826c6506fdf2eef11ac20695cf4647872771331f052b8f4e9b7061cf6c0a69c46f151cb6739a2aba67b8aa82503cbe5658b96479028346ad430972beac71fd3e1175d427323c4ef3e57269e0b9e008d45e1179f00a228e3628bc1b26ff7ac9425a44a2e17d144804d2c36532987a16da0432b7ac08aeac5b2b185eac9e136ad8d85073747d4853a2731412c2c51496a206b4a2a933c7adfacd545e7fdb0ab913e5d9a8b74c924342c65f6d0a54cf3a88d3eb5974f962e2d6ae3e5a50bffd1336c89d8762a1d30820d75045b446ddbfcde1a21a5d879363843de6d3bc8ef38f400f7448c30b50a18c2461a84b91c616b8d56ac51339f565c214472635de2b4ac9f223533e3e6fde39d7c081aa1c6dd36698918d4b49be8e889452e4b48e9a996de5ca74a3fcdb957ec3c5f2aaa8dfcfa6c4762b1133697374e84e0b50ee3df484e96f7ac0cf193d5526d2fa8f601edd6b09a61c49b6a88e7727beda03103e1e3fc99a12d9e199a61d9ac63d86cd61c93bc5758c92d30c99dc24a6e8949ee1c56722b5db611e35e8747926dbc0e12f5d778e7dd954e64d689fa5f8df3beae43257976e9927676e92ab24b16d375f304d308cb267bead28e5feca653d29f745df1a46b8d09ee1e52701bccdaf60e6b6d6d75d626e2b12c42279d0fa4ad11bd293c9caa5ad718dffef0bbc5fc14b6b74fdab6d743d85eff04571d563fcc12db61e99a15365ddb63927b8695dc4127993bad5ee918797b5c70479d60ee67792776d8d26b2f9d705ef0f46189d5ffdf9c9f04e12d71e19d30cdfb6a34ff704683409a77c652b25fd894ec8249ee1f5672579d57114eecf848bc4aaa8181c9620fbd5236cba9be1ec9dc1eddc4fcad7a86e738c7e5420b7e9d6b917a4021b947caaee503fa02842b2ed4967bf5150b3ed8d24078c681c233f261a079ce757720a350a440990869a8561b1e02f6bc623183f1ed016b446a37427a2e0689d0cd6283f9f46e98a719acf1341fe8dc58124fd31dcbb243c266d9bd759279961daab1d55c6eab7cff96e6a2d29210ce203c9c7d74ae4194839bead535b86d5c2e6fb918ab73e5cd647c87cbf5c254573906bc4e1a4e91f34ca51346a934f230ce80cfffdbdbdf79c2dc1f7d761826b2c301696407ca586119a087ce927867009f0498d0bdcc8bb7394edb77025b2cb2e151e232a7e4a66e9978b48c6d0215ac047b6b82db5b964e1b5e5de15bc384a9aef4c404178414dc0bcbe3c3c3e6f1de3ac9dcdbf06d4ec2d6b0fa606a8f0cab765fcca38ed278d45f63c13c6a3f4cf8688df0471b0413de1fcb0a63d2b19124569d8d09de5797c738c009a25f35cbf9bfc67983f7e2158bdc9f250a43cf1b643979bdccf98b17d883c1f36b9c27dc61ee207a0ec08c62bfb04631104bb7fd35e9f673c0741b84093f40237cca1ec1840fc6d2ee405dda715fcfcb0d5e2d5929cbb6786f9825261c6489392635a27fb044a45c9548d72c76b453c21ce31cab9da7b34439502eee65890d9f2b85af0d92a64330fdc7eaf46f0ef49f0d340c12e2505d889cf0388ddf8a05f45b393ae1bce2339e21159f092c938a4f2e866da20e1baf8e153ad5175e73ad11cfcf1506505a5b572ea9a302729846af1cd17db09ad567858cb716f88c9c2af1b75745e1617b63c8612a5ebc3de1af78a91f7dc56b12e315af3c96bae25517da6315ac3ccca94ed638d55810a79a8fe58529585e989a515e28d0d99ce8585a5baf3687e7a8394236cf79e12bfc7c03973dfcad7fd1fb55908665d5958e83c482a52ab1a1bf4bae8a3b533eccb314ecdcefc21759429f27a6893c11a5e658be188e95dad335a5f6bd8d8295da2374262b7a152bebd564270a095198ed0c9dd98aaecf1169247e5dead9434cdcac124eb5443a55d775f7102bda2a45b159ea5ce78e17de1f245698f1fad224c1bb4290e7f12b16ed5eccc8670a238f3a9e98a18fc40a80599a022050ad7a149685666bb2d0af01b3d0684ced83c3aa3d06537b8e46edcd8d83a9bd2f267cae46f8f426c184efa713ce1d339ffe13a685b83f26986fcb9350dde48d77d54e58e66b292e156d05d5fe2b1157363abfcb9d6bcb84882c310957cd5d08a2e50118dbf91ab66d02b23d1043704848b6637582b9792e4847709271de713ac1bcfe752843ea5f7c63a3e0f5aff1ba7038f6851aec3b02629f8065f3c3c366f38998e44561251762928f082b791226797158c993b1445ca249443e7d2748224ec184176b841705143e15cb984b75bea92fe30d7daf92ea369fbc7e8d62b65c48a974fe5e27cbdc92b8fe11dee751261bcd41f2f941989ecb747aba6b7ef80c2d773a40a578a7c4299457050a751a86be4483fecc80e8a763c24b35c2bf0b287c06c66bb98e57e714e95a2226f6785787395783709c8969b342a70d3ff5d22d4838b330a42b3548b7370f8674361689325d24f8389a8b6f8c836ca6e8f02b96eb95d689623c38c683310d8ed469c03ddbf4da8ac1ec0cab057330a4ab3448df0988742ee691cbc37ae4224ced0a9dd36c114ced7998daabc3aa3d5f2799d73ad630a4d6c17b6982d73a0ec1c2390a0ba732a3701660a4aac2923a5427992770b52681c7b60c96c08761c26b34c2370714be1013be4e23fcd980c20fc784afd708efde2a98f04598f00d1ae12501851f8109dfa811be2da0f0c598f04d1ae13b030a5f8219f9d1618dbc18537bb346ed0e7b06537b29a6f63161d55ea6919c2326cf45b916c93ffb29d8720dbe35517a3355f90643ba7548a9c2c7ba944a74e9c24be8e3742a0528ca4b316b3a5e634dbb026682e598f01334c20f0f68aa2b30e1276a846f0d287c2526fc248df036ad83092fc312f3e4908979242698efef9450171c2cac738dc86359e213c07c29ee6af9c561be1d42a918b82e16b6ef7538a9816bbeb63b4b5a6fa5b4e972c7da873a578368bd0ad3fa549dd67ce49577e27af566b729e9364374f30ab3587f59ebee1f48af72cc06b66a6ce0de8006568145fab49036b05ae767c554e232523f8bcd232d129df77c2f86e5c2522a02cf3a4dee934f4fdb279f217c329f1e41a72be6bfd7e8929bd7adcf6448dd9a6f6bd59cab1ca86ebd16b3d9b335365b10d06f1d85093f47237c4140e19598f07335c24f0a28bc4a279c576bf86656a1aa35d598dae76bd47e27a0da3598da1784557b1de67e2e0ce97ed663822fd23973b74f5bf528b99d1f8b02161f1bb014b8589302d96d82a5c0464cf8251ae14b020adf8439856d9853e0fbbe056f701fad0b871bc765e9247692f190cd98e0cb430a3e06b3a2ed21cdf3584cf01521056fd109e669cfb766f3cf81e30282cc813b0eb3c2ab3456b8b56d302b3c1e73323bc23a991330b5afd6a8bd33a0da2762c2afd1087f25a0f093b09c792d9633afcb28679e8c99e3f54ce32df90cacc5ce3fde75c1477757b0d9a202c2e7896e1077d68aca3aaf0207b1dd53302d6ed069d1be568b5ce77705734707dcf91999eb702aa6c38d3a1dda491df29dffcb447594bfb3c1f99db9065b310d76ea34680ad282afe2e015c620a19d8699ef4d1af3ddd62e98f99e8e99efcd98f9de9291f99e8139bd5b354e6f8f804eef4c8cd06d1a4245ed83113a0b137ebb46787540e16763c2efd0a56d40e1e760697b2796b6776594b6e762d9e1ee64ae29af8e5dd3799816f724774dc3ead0359d8fe9706f32d7545087aee9024c83fb52b9a6434478c1669c5f8899effd1af32de910cc7c2fc2ccf701cc7c1fccc87c2fc690f19d23c354f42ec1e83caca1f353403adb303a8f60741ecd88cea558241ed344624ac76091b80c43ff7848f497635a3fa1d17a4740adb763e89fc4d03f9511fa2bb0483cad89c4d8bd8245e24a4cf8331ae14b020abf0a13feac46f8490185efc0f03f87e17f3e23fc5763c6c9b7c1478bb5fc3a2ed6aec1b47841a78557ace5d561b1762da6c38b3a1d54b136bc0e8bb5eb300d5ed269d08c79c55aa11872581370dacaf59801bfac31e0d99d8219f00d9801bf8219f0ab1919f08d58245ed344e2858091d889097f5d233cbb7330e13761c9cdbf7a16a65cb819d3fa4d8dd6db026a7d8b4e38ef1ee1df6b09d53d722ba6f6db1ab59f0ca8f66d18ec7774798bf78f279f9856e43cba564c1d5b21fc4ea598b7e9ae3f2a11437eb399bb3ba4bb76b5d8b95a2256b5ae14e7ca6f16b3a572406e98189053eb5e373277a3b02c3120ee6ed99d2506634ae46ae855e24a9578aa1448d60ff995c9a14b384818747ee9ed5802bdab49a0370226d01d98f0f734c27f0e28fc4e9d70ee8cdec79cd1071939a3bbb0487ca823d4255824eec6847fa4117e6f40e1f7e884f3ccfa713ace2849d7f5bd1ac13962c3a5fa197f4ddc55a76ec75f3fd1f1d28ebff28fdc241f7f0daf2b36fe7a1f664b9fe9725b405bba1f2b223e0f5b443c8049fe22ace407b1f2e1cb74ec3f89d37c4867ff62d3a5e5f562ff61f6bb4a6ef95fa56df95f0bcb1f98c4f2c3edcaa54f898731e3d915d6781ec18ce79b90c6f328964dbfd564d3e9dd8265d3c730adf9178113aa447cc1f738d1d02a154b0e748b55b24475292be0bca2c7313dbed3e9c1f7cb0826ff094cfef72153e7492c757ed0a4ceb30153e7294ceb3f60a9c3f3c84a594554e9515abb9743a6b3be9ec622f9a326922f740f16c967b048fe5117499e03d5dc08b73e1b3f052f48b49ec542fe932e64deda2f726afbb3594eedaed639b51b9ecc723244090bba68e4394c833feb34e8a4d560baf8ab5aac0e776bfd99ad097a1ed3e5279d2eddd2d42571dbe3203afd0e33bcbf680cefbbbd8319de0b5884ff1ad227bc8809fe5b48c12f61827f0e29f8658cf3df359c9bee138cf32b98f07f6884bf1250f8ab18927f8644f29a4e30f73ebfa423384963e8759d60de0efd57ed0d5f3b947fdd2f783bf40d0cfb7f34d8afcb0a86fd4d2c12bf6291f86f4691780b8bc4ff3491d81530126f63c27fd3086fd32b98f07730c3e4bb7d25b853bece6c0e835b8094883ab672e4d96c8028f056cbdff133ccb3c4995bfc0c165b1b548a52df75b95562067a9670ccde125fb753892f565debab19a8707867925bc42eaf75e759c29997049c8ef82ec622a663c1f7c481fb88b9b54caf80f596dbae171a96336f95a8ab1fd73995843ce7e9a0b3f2dfc30ca6414c3394d43398c1bcaf13ceb3d41e31244b358c6592a53ec022d1481389930246e2432ca51beb529acfccd677912e949dab7c55036f5db8dbcf244bd3eca477078829b46eb7aa67d7f139608db00cd5851a7faf5ad855b526172d151aae011db0aeec35b2751ac4be3ed2d1e3add326b190add38f31c94dc34afe0493dc2cace44f31c9cdc34afe4c2799efb2d422166e1fdccf31c12d430afe0263d12a2c8b2f7592f9d734f64c47e51eb8e0af303fd35ae367b6f50ee667bec684b7d108677d8309df8539b1b63a27b6b77062bc036e9dd8c5c3750bfa36aabb23912aacc6042c7ebec1f46aa7d3cbdd9228f1531f4142fc160bb1bd2e447e23f3b07e8f85d5018b9d62dc93ed9fd13611df6146d4516344257d8219d1f75874f64a275f25d1fa079d605e0be8948ee04f71c17fc07074d6e0d81e10c78f98f02e1ae16dfa0513fe478c75579de90c63fe2ea435b5f55db7e457755dfd30aa5bbff49e86063f262343fc13a67f379dfe49bf6e1a20d43f6349d25d9324af04f4a13fe9848bcf3f852db0fe82a9bd8f2ed706b4a4bf62c27b6884bf1050f8df74c279519b15b2a8fd1973093d43ba84bf63387a6970ecec1f0cc73f30abefadb3fa7e20d77a932cdca2d56bfda9cdc5ab65be768b5b5d3e0e9253fea9d39457ebfa84acd6fd82f1edabe15b901d8cefbf30e1fd34c23b0714fe6f2c7ff70f9bbfff83c1ce0e09fb578cc7000d8fb50179fc17133e5023fcc280c2ff8721191412c96f98d683355abf13506b1643840fd108ff25a0f018267ca84678ee8060c21be884f37d5972d2e1bd0517bc07a675aeaeef25a0d60d75c2b9571ba6f3a78c69a427f1818d30e9795853c0f5d63919d4871a6398f275996960304c4d30e1051ae13f0514de14a3343c64adbf1926784448c1cd311c23752e20208e1698f0511ae10b060513de12133e5a237c4740e1ad30e16334c2bf0b287c4f2c31f7d5e5a56a96de0e89e1269fba83b98be3a6b39a3d15b5359644fbe9ca978049d4064ba2fd7549c4e7e127ce060e1299b6baf078efff01b5377cbdff07c632e9fd6f87c56bac2e5ebc94c809148ff698fc71582f8ecef08284d8010b71bc2ec4bdb429354318a4dacfd5bb13cc203b629a4cd069c225f0897b411df65e9a5072c44716f9b6a7516d1a57e49cf1adb1826f183731c6c706e2610833d64e132c8cf18a7fc78498250b1f9bfcd749973efc74528c77b5c4ab74d08ce39b6ceffe6a8384a46984274d67cc0026eb0c8057e0f9e21dd70f973b7f55cb48950534bc2e58b85374e1b646c35d2d7d7590b0bb625e78aac60b67e507f3c2dd74c2b9ad1fa43122d141e217ceed0711de5d9791f68e3a234d10238b951964a46931de4f10cf6028928da623d92859e85836da5bc74d7c23757184dcdce75c873d577ccc81f7facc12e3b56eaf6855064c67c4827e5f6ba620db3b21e699ea8751df479715c40754c276b8f4c024cf0e2b390b937c7058c93d7592b92399130bff59d05e983b9d1bb2add51be3511496471f4cf2bcb092fb6292e78795dc0f937c4858c9fd31c90bc24acec6241f1a56f200cce80e0b697403319517865579904e32afd51c1eb25b7230a6f2a2b02a0fc1281f1192f2504ce5c56155cec1242f092b3917935c1c56f2304cf2d2b092f3309b5b16d2e6f231954bc2aa5c80d95c69489b1b8e095e1e52f008ac745d5107a5eb480cf4cab0a047e924f3e7cbd2e19164caf6689d60be02e2c874047f8d0b1e83a5e0aa9029b82f26b83ca4e0fdb0d4ab089b7afb63a9b73a64ea1d80a5de9a90a9772006796d48c86331c14785143c0e4bbdcab0a9371e4bbdaa90a937014bbdea90a93711835c1312722126785d48c193b0d45b1f36f526eb9af4bc3f25c6b7cf8f7e81b26ed0a06e172a6f48272d06e2c4a66069b1316c5a4cd549e69bd56f4a47e53370c1076176797448bb9c8609de1c52f0742cef1f1332efcfc052efd8b0a9371363b125248b5998e0e3420a9e8d093e3ea4e08331c82784853c0753f9c4902acfc5049f14527011d66c393964b3651ea6f12921359e8f697c6a488d0fc134de1a52e30598c6a785d4f8504cf0e921051f86a13823248a8598c66786d4f870ac6578561db40c176138ce0e89e3080cc73921712cc65cdcb9615ddc120cf4797500ba1853fbfcb06a2fc5d4bea00ed45e86a97d6158b54b30c91785955c8a01b9b80e802cc7d4be24acda2b30c9dbc24a5e8965f24b4366f2324cf06521051f8909be3ca4e05598e0ed2105976382af0829b802137c6548c1ab317bbb2aacbdadd149e64ddb1d215b806b3195af0eabf25118e56b4252aec4045f1b52701526f8ba9082ab31c1d787145ca313cc67c6dc908ee0246b71d66166716358b3588fb1d81992c5064ce59bc2aabc11ab78dd1cb2e2b50953f996b02a1f8d75bfdc1ab2fb6533967cb7854cbe6330c1b787147c2cd6fd7247c8ee972d58eadd1936f58ec358dc1592c5f1188bbb43b23801137c4f48c1276290ef0d0bf9240cf27d21219f8c5596efaf83caf229188f07c2f23815e3f160481e5b315ff450485f741ae6971f0ee9974fc7203f1216f21918e44743423e1363f1584816676904e76439a731fe755f13763d5e288748ea6e58e5711d33edbcc927627cde640e0bb2f37126fa62f329cfd6253b4f9d27d34976ae3d22f81c9d607efa542c7196b9fa0932cbfc5ccc4b3e5d075ef23c4cf8337520fc7ccc3b3c1bd63b5ca093cc9f7f2e9dd44c32fc7ca14e309f81fe7c3a8293cc3ebf0813fcbb90822fc620bf1016f2253ac97c59ec8be9a89c6459ec364ce597c2aa7c2996195faea3cc78992e006e4fafa4c324c9d60b9763b05f0d097b3b06fbb5b0b0afc0aa2baf87acae5c8995fd6f842cfbafc232e19b2133e10e4ce3b7426a7c35666f6f87b4b76b30b37827ac595c8b497e37ace4eb7435ac9ece696c1eab9f9528aa86126cd5c97b69d79ade17b5a62e09b14b4707ac26743d56e47f500745fe0d58e27f1836f16fc4d4fea80ed4de8909ffb80e84df8439874f629ae57a13c5a9bb8fdb4436ad76b7ed998cef77be5e24f02a99f443c5c2bea9cefd5962eb1b6ed2fc8abec2ac9b65c59f86a6c50d7f0d73179207dbcfed662c969fea62794a6d2ce73955779ee9dc0c5a21fe9e2abfad562916acbb19746aed9385b51bdcc76fa15b2979cc15774b1c8935225e5c6e3c3d4f027f3e981e98a422c617d6ad1077e399c2cceae73ddf911374f9e72d18e9cf307b8221ba71ca77de7169ad719ce262c7362a459abbb12d921f15f06bebbd8b5faf2b7bba158be5e7ba581ee08b2564eec6739248b10a1147bf96f12904ef24cb2bf0ad2031bb0d8bd917ba981d9856fa8d13db3d9431b5d8307cca797782c4ed762c6e5feae236c217b719227556ca98f1b30df516933bb0987ca58bc99911fb33ef1dbe6572b9237523e3fb17785f62a80a60e5901d1e0b5e96d4886a06f47abc825577beed4e8cfad73aeae3d2ca1bd399fbb55013bcda5d58fc76e9e2379dd0aaf8d5a344303c566e75b84c045dc636316fb3c9ba48d5bbb1587fa38bf5fe49638d6b3a47c4c5dd3adc8da32a8df9d565925062bec83c35efc1e2f5ad2e5e8706aed9cd1577e2eb763a09eeb5d9b57ea0d2290f7853274c4d309374be17e3f17b1d8f699194d9d4a5f97d589cbfc3ea29c16c40d930dfa566991004d339a8450489d9fd58ccbed7c56c0c12b379227f96cbba89dbd456ad96f932179724a4064d1be5012c463fe8623489d0fbaa5475376159cadc8f77d55d4c1fc462fa075d4cf763d8b08cce53c4c7006e4dc6994c11a95c295a43cb9c1277631dc6ea212c563fa6d326880f17d610e68954a8749ee5f9704592d22f5e46ddc5ec612c667fd4c56c424acf995eab00f7a1c9daac997aca47b038fe4917c752e21a75b5dcc57f85ac31cf171650569b1beba68d984929fa28c6e9cf3a4ef3eaade5919c50780e8f611c7ed271188ffa30de425aea3ca4f286bbdf5bf212472fa9ae53fa712c867fd1c5706ac0181e222c7a359222f511df27b0f8fe5517df3984965d9541f95b17049ec408fcadaeca65d7b78d03a5327dac9ec262f5b32e569303da71a1f8f4d91a59dbad6f1b7e1a8bebdfb11e8aa02938493c91688d7eff9abedc20f17b068bdf3f74f1db3744cdb15a94bc7c63b4e5b29d87c7aa28e1d920717a168bd33f83a599df3ee1c79153e532ca92f2392c7ebf60f10bd26674e33a59d699bcbb7cc42379edb0ae6a8ecf63f1fb972e7e7d58f25ec12287308596bfc3b4fc77f2bebd20a93037a354a0b4bd17b058ff4717eb2168de2aaa1daa873ec2fb14252ffb6bb4f5ceccfaf75fc4f4fe55a7f7e8942daea9626c90f73e968b0f1116b20ab1f96362fb37590a64de827c098bcf7fb1da72f23cc25bc3b3450db24a538748672c81d7bc96d7610c5fc662f8bf74dac8fab181a9c2f6783f78b1eca34a4caf28c7075ec1e2f81bd643954e3f403ab1cccc63641ed357b198b2069a984e492b35fd233d6e3e54f1aecf747d0d8b6d4c17db0529d395b6679cbacffc758c468374d23eb146e97a9a52318761b568ed79a99e38de93595c334ffb37b0d8eea18b2ddee64b9c201f5f56ae40467568da096f62b16aa88bd5988c63155d2be12d2c468d74319a87c628d13e937be174daadc1dbb699dbebdb1887c63a0e0303705069aa369eaf2b7ff20ea671139dc6fd527a576fccad545ce57352eaa6d6f92ea669539da62393d496fd961eaff95a5173f3fa6929f2cb7b585c9ae9e2e29f8786d5550a0daba7bc8fc5b2b92e96d302fb39b75d9d7837b1dc52dfc0c0d33351ca38d177c6db8a41e2fc0116e716ba38f7f5a5ac1726756efa10d3b3a54ecfbc24f508bfce93a5cee9d60c332d453fc262d04a1783c3195d8fb8eadf493626062d30dd9ca7de0942e5638cca9e3a2afe715e156210afe2c50ccb7175e34d3ec162d65a17b3c3ea39bd83a473a639e0538c481b1d117f8b37685dab3edb019f61316d9b8eb79a2052d54dc16ad093e95ac1085690227e3a4fc6df0a1283cfb118b4d3c5403f3b9387192467c2f861d7eb2a85bec0e2d75e17bf5e296dd1cd639817c9c4337e8969d841a7a1ff3335f19e5195cb33ebb836fe15a663479d8e85755663aa8bfa5290787e8dc5732f5d3cf35926fdfd2a8df8f7eabc19807567f1bbb03874d2c5617aca3abcf7e923bf8eead353b88d619f4d4a669799d56fbfc162dd5917eb547de5ae1f9beb3cbc94b9bd15cb587dafc3f8168b619774ca1a3de1cc6ac6a9bd4813e75f2cc61709160a29eec8c31af10e6f07e570471bcbadcd3f436beb3843e3ea43de751e7e85931a3c4f14d5d666f822c9e412ba36703b39c44f7ff9c946d789c49633ff22cc09427eb9f4f8ca5a870a42ee7c6dbeb874a8936fcbc45b6a3969aa58e8ea754341cd0ec62e759c1621cb4363e2a3cd5096439a1718bb5d4cbbf154ed2553b5410e1f1e8e0dcad09a526bd19d87b687de863a259085b943a7bb2b4095d031befdcc62118cfb3d5f7c3144ca90fd7bedfb431e2204a83234a5b879c005e8c47511e6e64e48ad64ee30cd278ecc268d1ae4f214d99b121b5f403d51b474d63ae0dc398daaccc1005659819097df0ae13e9408f9b7895565648aa8ba7001c5a231c2a7cecd62abac007667530f580f4a601d98fbd9d55ce6cd36b4195c9b161eb82c4a70ed34e0b8403eb0c72724d488ab2556405bc23c683d29a1f502d0bc5535ee7a6efe09795ea75e2d2d4f7938dd08a00d508febed41ed459d85e37dde24e777999c2caca691b959d90670d92d3d70bd29c1f1afaef3f950e996b536c0bb1094b47d28e1b5005979565c47ae0d983674f330f5a5c4d40c60f26688db806857470f513f4a446d996a2dc43bfec2da66972de5e8aefe1eb2fe94c81a0b645556b9f586ad3c38d99470f87674b36adb9e6a8a813b156d8e28276b185f70c44bc6d9b24bd206806dba7b00075002e4fb3cfb6b67bb4fbd6c7a3f0fe3404a8c4d81ebe76af2c92b36001adcd6033488ba6c9c25468bbd5d9dec70f41f80eac360ea9e3455b787832f5313b2a30dd85a8226d1104a6c5d01365ec3d7ef4a6127c43ebd3c8843a3f25f6a91ae0d807e69e701ca89caca0ad90611eb9a5a5be2b3fa4b849dcd11dead44f8ba7227401b20f21f05319712e2de8cc5c1e3a3057c438ed2dabdd24b2c6f927700e307c32851b692e5a9b2b78db2d23b8f55a513370350fd0ccad5bca8facc780101279fa96e209b1a57bf34f1c0e553f79941707005ff38d18bc69bedde5e0536c0db0cc60c0a28e1b50425aab748dbdd3ec006506d40cb6038f530de0c91fd56f9f61c9be83c5e2942b201d892061eb01194c03afab2657cb576165b264a573e61cb964cb90d547347463b7c123f13b9c4b2a2a01c0c1d8fa21f01e5f63551046d731ded85461eb4d1d4d65628e66dd488c0bd96a9b77f669553fd2d73c2b301dc2e006e0c25b83d4136b5759c9d4f0e54b0f6a59fd5e14ec05a23c4d8dd84da0f58d97ed4150ffd58d40656c6ece9a0dc99ed01db9f7ab0658e63651358fa7b35db0070ab68503569e413ee5fd893f9a4d360d4f1e9b1ad99db7fb2565cad961596b8e9b27ce5a3719a1f00a7bb6667dc97969db260c84e7baa5676e01921d919ced9cc4eab85931db2732c3bc044dcec40654676da95bfec40359eec8cfc4976a0ee9cec4035feecb4a69466079a47991db81745a7333ec92b3b617e4076d2ae876ced5065b67600201b99d1929d6442503632d2979da2c7323ba3a1fcec8c477fb20336a3b3030ccf65d7d9dcc7ec10e3f3d9694eb6c94eab22e4ad88d1af64c9e5513ef0fff3c52ab97cb1ca580e817f608bffb8b5b271d4b5b2c5623d1e8f362f2993effa38cca91bf974e89ea043fcb7ea54ed4ba74db3b8fad99ee94430933a5a3e98eb38de249c7956e25c06704e300967be95384f043827d2b759dd4c1c8fd52d30f96364f87a50e1fb1bf3f01546618d2b507b84ea2f66a3d9083a9c2da9707605d638c9249ca3acc4c900cec926e11c6e25cedb41669f6212ce022b715e0a704e3509e7482b71fe08701e6412ce1156e27c05e09c6612ce6156e29c03704e370967be953837029c334cc2996725ce52807326f50c188e7399ec33f26f96e6aaee6ec4954b07b21115c84ea0c6398b7a42aeeaa74cb74f9d3f5f299eb5af9d3e1158e86c4ab06edf6092e50616b4cadb02580753c2eac1e08844fa2372365b622f00770ef524de641d70501caf1691a16c42857200f096732951b696284744dff5466687b7003b2c8a02dea8e8e17d4a05ef5e006f5e143bf760151e1553d20c5c1823c2d80d64e0f994183ba5c018ef0b49fb83c8bc612300f31093608eb410e69e00e6029360165808f31fc05b1e6a12cce116c26c082cf3309360e65908f38fc032179a0493702c9c0ce69f00ccc34d8249d8134406f35b00739149306d6c28fe1ec03cc22498a32c84d90614408b4d8239da4298ed00cc259430074a98e5ce43e5e2a89b2ebb38d0670148fbd8db53213f0d202fa644de5c205f29e63cbb73b0570878f6f515b504fe73697df659c67f4686d0fab650a1bc1c58df324a94dd59e2084ff2d9eb11f4aa9365eacf8085965062ed9fe0478b85b0494c7d1c7cbcf39f67fa75026b0d4bf69911521b262bb40e01365c1a853b48af066023ca1ec06e9753a2dc47e359d3fd102729da33a8d04e0556ba82da4ac789957b6be47a25fed5183e7ab95aae6154abb8dcb571f695ff0d8195ae8c62bffd61ceff0a1978b128bef8d508468cc832fab1006159140847ee76081f04088fa4ffb28d5b7552c771cc9de864fb4498fb01c45526adff219d974986731c2864ca4dc2493a91900ce70a80b3c2249ca4d35cc9709e0f70ae8e66755a6ef4b33cba52e17b0df8ca35e64cd5b2b19f7322b0c4b551a084dd1ed39d4af864b9bdc072e7a50d5194e06428d701ab3c8abeff1df65c2e66ab04baf16279fd2a296a12e33b2594b3844d932cc8e2ad00ccca28dadfd5621394aada9e76b5f7803aea7a8f86518ead93a1dd0ed05645314e94feda5e3298642b2c0e0030ab4d824938824906735f00b3c6249884f391c8600e0730d799049370a61c19cc4100e67a936012cee124833906c0dc60124c1b97f88d0230379a0493703e1219ccbe00e6269360128ef390c1ec06601e6d124cc2399c64300702989b4d8249d8022283d90fc03c861266164bec3f0a36918bb07c279bf37104e8533ab63e2722fa3b8b09bd285957f10060ab5b4c824958be93c1cc03308f8ba2df9df776ae13b339f946ba110df492e1eb02f01d4f89af0bc09738918b0bf3763eb079e4fc0500f48428261fe4ee76930f8e01084f8c02e188dd0ee17e00e149665787087b35c9aa431b4175e8e4a8a6c778436c7094887c708d6cd06233b0d153cc99da6ae342d5fd01ca53a32ac553ede16ff3d4add100e856fa39ee4136d5afb7816132d8ed00ecd34cda216eb495fd4a2d41e174ba4938475989f357609d67988473b8953877029c679a8493742300329c67039c67998473a49538bf0638cf3609e7082b713e0d709e63124ed2efb390e19c06709e6b124ed20f8a90e1ac0438cf330927e9e76ec8701e01709e4fdd084defb37a73846afcc37e848dd06954400b00d00ba2d836b21e3e7743b624753580772125bc6e2cddd5bef13b2a10ce4cfa9a0aea09a06979918950093befc8a01e0fa05e6c2254c2d99d64508f05502f31112a61094f06753a80bacd44a8843397c8a04e00502f35112ae1ac1032a80700a89799089570de1219d4d100eae59450f359e2805dfc12ae09ccfb78ac1b91f84fd1c67f01dcfb727291a8d1aa912bc244184695087c719b4a84ede62c94b57117ef7d813d5f11cd92ed7af8aa01d92488ff004bbcd2dcf59c84d36dc9a646bc09d05e65cebe9fa4fb869065f35300cc1d26c1b471b3fe5301ccab4d8269e366fdeb01cc6b4c8269e31ca89301cc6b4d8269e366fd470298d79904d3c6cdfa570198d79b04d3c65d3c670398379804d3c6cdfa0f06306f3409a68d9bf56f0530779a04d3c64dacce05306f327b01838d1bf30f025d1f3753e26d25f1bafb81958b56bc2bbb8c72ae32d9578319b0cb5ba2de443afd6e0f1b37b11a0f6cf2564ab48358fcbef25c109c5f0fb37fbeec6a5e2beeb99dc855b54fc4bf47e808c8be3f5c03a0df16d5ca9119a2d77395af977ea2f35aa508d1e69523dd8183b89d12e89e493d6b151dbae654e81a007477d4e78230fb376ad90ba0bc338aa18d02b63bad8a9f0bf0dd65c6a722128b2152cb24fb9cf365a0c0b9dba46da7495bf064969a0b70de6312ce3c2b712e0638ef350967be953837019cf7998493f4db9a6438af0538efa7c4d99b252ef32e641b189fbd5453dbe299e5bc5ec27857c81c01d6fd004f793415f8b654903b82b2ff019356858cb6729bd556c0661f3409e7282b71fe1758e74326e11c6e25ce9b01ce874dc2596025ce0b01ce474cc239d24a9cdf019c8f9a84738495387f07703e66124ed2d94b6438a7039c8f9b8433df4a9cd500e71326e1ccb312e76280f3c9a80636e68a364f8d23791ce31f249d2fd724978871a252ab07369600a04f99b3f0c0c6096105a04df474143345d49eb5ee2af9a5a223443d64fb569725c02e9f8962957c3d7c768f0cde8100deb3e6aee1202c80c8a633dc00d03e17855d8e8cde2ec9e0dd03e03d1f05bcd1bb51a67e15c0fb1d7df1b252b3ffe75c87c932b64c2ab45c6cc1c23b86edabf6b400305f3077c217e170065926df1f54835e346703601bd76b0c0656fa52d42343c176afb5b705f41180fcb219b3428a4421b55af8582eae82d67ec9766bda0a5cc12b260d1493ce9e27b3d41900e7ab26e1ccb312e73a80f3359370e65b89733bc0f97a14dd1fe9f524e559b9eaa81ac07cc3249836ae3a5a0f60be69124c1bf75da80430df3209a68dfb2e5401986f9b04d3c67d172a00cc774c8269e3be0b470198ef9a04d3c676fc2a00f33d9360da38cc560e60be6f124c1bf75d2803303f3009a68dfb2e1c09607e4809b38706a6be2769b27c25b26d2a0752c15d03e07e64526b9d741c93acb53e12e0fcd8249ca4754f329c2500e72726e1249d354786f31480f3d328be153b9ced6edf8abd8c79083f8b62ec2875613481f917bb8e7384568a7125d242e9891811e4b3819d7e4e09796f16bfb945a95cb6e52dd68a770370a6272158b2e55aa500ec17516c14a4c0aa8f98bbe39b6ae243b2baaa8dd5feb900ef97f539461f59bd740b15ca0600e55794287b32f54dd9390218df11649d7cddb3d6ddef3bb2cd4041f67534fb790f8f7eda1819be7f037cbbcc99e06da3d7ec05b2fa3794283ba440a9624a3a41ac90aad27411c0f8add99b0012f6dc936d027828c0fb7b73277f130e24934d6d6c0bd07e178503c0aa4d9e0320f4a3640e602f80f17bea6d2a67cb0e11b54066aab04c9eeded2bcbdb80b2fc8728ec2fb7d6064b447bde9bed697395e80180f10fd4831e1cd8441170bd7ece742615cc1100e68fd4f54b8ecb6deb28788542e152a14e495c196e5fc9fd4f80f28f5154d573937478d8ddfbf92240f9a7283a900b76bb0ee43280f0cf51f46d726b2c14d59d1aa184b7f860165b2fba8c2b9d7bbcaeb996d9bce0602400fb93390b646c9c3f771040f99728161416ec463d435500de5f4dda9a623465b706d9d614cd41abe66f26e11c6525ce5f8075fe6c12cee156e2bc1ee0fcbb493849f7ec24c37926c0f90f93708eb412e70700e73f4dc239c24a9c8f029cbf98849374376e329c9301ce7f99849374fb68329c6b01ce7f9b849374d63119cec301ceff44313e9ecf76a78f4214027cbf9a347393f44bc26438278156d07f4dc249ba40900ce76a80f37f26e1ccb712e7c500e76f94389b0a01a58e9f74477db864fb66613606be91ed4188ab3f4beca98c9f4ce0ce1daea81df3a911220b05601ead22412d82d94593a8600f03b06394b0bd796e79d1f766927d81e80780af01253e35e2c3872b26333e04c1072a5688319f4aab07268e0708f7a044186caaa08dfb778c05054d434a94fcbb26b3850f2c616a2e3036d180f0eb816445505360938d2841869bcd66e3467ddb00dac69468d5dadff4c621f3addc16e55d00b38949306d1cd6fd10c06c6a124c1bb745791ec06c66124c1bb7457907c06c6e124c1bb7457916c06c61124c1bb745790ec06c69124c1b57fa3c0560b63209a68ddba23c0360ee69124c1b1b96bb00ccd626c1b47163c86f00cc369430d35fd047588e93ade7b90a7476b4a5c498a5c1186c411f61d3926c59c04280b71d755f52322b75551f2126c11296ea8da8405e0a40b6a704d95303d2ed14e6fd45abd94162f8626dd2c9088480c9a622ec01fc6987283a90d32b9c6c6cb5e702941d2951069f4d4c58d29359666390f5f73209e7702b71de0dacb39349380bacc47925c0d9d9249c23adc4f95780b38b4938475889f36d80b3ab493849379120c37918c0d9cd249ca46d78329c27029cdd4dc249faad0c329c2b01cebd2971f213b537877d63e7ad01a67d4cb2bad1943d486456d70254cf7b988473949538ff05ac33cb249cc3adc47923c0d9d3249c0556e23c0be0ec6512ce9156e2fc0ae0ec6d12ce1156e27c12e0ec6312ce6156e29c0270f6350927e99419329c47019cfd4cc249fa6126329c8b00cefe9438bbb3f86dc639871ac6c72afd9b8bfb175a118e03912d241808aaf3d99458fbf9b02e658993b3d39fc64d889aac217a01403d208a652fa3d8eeb6d1d923c0090c8c628981b2d62a617fdc054c92f04ab523eef67ec66109b0ce41e6ac28b271e6f11880727054ebdbb8106ffd504419bd0715c22f41461f423d9146b755e906562644dabe51e9ff00c8a1e62eca229cec45569ebf0ed0e644b10a7824db9d76f3f814e0cb8dc23273451b894fed72bfcd129fe567392296398cf8e443b5adaeadab833f01688751a2557b6d0ef395e811d82559b61e0be0e5993d459670f10b5981341f548ef2a3e816813b67eb0a1fbb5b442f016b2da0c4d987f9bfbe067752d8dd3f693b1958edf06876fc1815bd4f25b3d26600df0873661bdbb8106626c8f0232951f6622ccd8ad2eef619bbf600f1284ac4703bfdf97217901281ba547c888487c2770be1bf9709a05556d74b6b00d8d15154ad5461c5cbfc12dfe62bbb5f5f7e0fe065c74451b5c2baf012f747241c7122c3390ce0dcd7249ca4037864388b01cefd4cc2493abc4c86730bc0b9bf493849673a91e1bc01e03cc0a4d1fa5194db02918dd6c700ce034dc239dc4a9c77808ad3589370165889f37280739c4938475a89f3cf00e77893708eb012e71b00e7049370926e734e86b308e09c68124ed20dffc8701e0770169a849374d778329ccb01ce49d1742cd7c3601d596fe8f700dfe428463a79c0cb85252ad9abe523f6c18b017853ea7fb71a55c8d837776e0468ed4c3505a48d93107b02900799029270949d0ce45200729a292009fb85c8401e0e404e370524e1a4583290e70290334c0149b8dd1419c89301c899a68024ac7a9381bc1e809c650a48c289b06420cf0320679b0292706e0719c89d00e4c1a68024dc7a970ce48d00e41c7316b3d8b8f3fb1080722e25ca4e2cc8d4ade1566e15d905c02c3209a68d96d911c09c67124c1bbf49d019c09c6f124c1bbf49d01ec03cc42498367e93a00380b9807ed2205c67c195e542e0baca7a9aec4ab61e83ef77aff01e4add83ee7d0474aab4d732e7658e97bf46068f6cadd09e00de6151cc14f65657ea575c1489911c8e76b9105641db117c0615d83500ec424ab0bd997f598bbb52c85be6ef3a80ca14bed5c6626a1ef0ac8747b9a58a0bd45d8b39954dd4363eedfd76c13900eb227316bbd858f66703377044146b84613b3e7d0f4b8896ccc31e0dac747194999f2f71990f56b143e1912d14dc4285f51280754914131286ef46b3396e02d9bd388a76537add76c3acfcfcd82260894b4d8269e3aacb9500e6329360daf801e63900668949306dfc00f3610066a949306dec9f9f05602e3709a68ddba0cd0630579804d3c6c18e6900e64a9360da38d83113c02c3309a68dbd488500e69126c1b4b1c3e32000739549ab7a498b20b255bdfb019ce526e1ccb312e77280b3c2249cf956e23c1de05c1dc5da1fbea554e41b48928d5c7ece3c7c6ba2c097571ff8c8ac6f02c0b796121f1f619eed9cb89be873517c37a395cee36b440ffb2630be6e1fc64600e35194187b30fd36a6e3446f799918591fc7f8fe467cb8a2d811c0fda3dd1b99ce03702ba3591d397237ea4f6f0a0a98aa2886cf32dbfc99b0094936f36307b0cc6a6aef99ac2aa4624a3a5cc6db7824182f04165a13c58e701063b0cd7609fb33c9aa480b00de75e63a00c2e1353207f03e7000eb29d1f61468a708fb9cc3f8d878a92ced4b842835376977db85b33900bcc16cd74038a249e61ace04ae6163140518364b69827008c41f759a4e55807507183745d1fb09abffaa2de5b5aeecaeee770659fee828a6d34298a93dacbd602701b09b29c1aa2f12e5b3ddedd363170384c79833abd3c6f91f5301ca632951f60a8072ae13261752cd66397fa9fea82ada62692655b1b4372896b65022ee033ca97f0bf359ccbf7c46ff41087bfdea4fc0928fa3c4dc85c54fa25d2ba0ae4cea1a6c1c4c3e0ed8edf126ed2e379a1227d9ee724d00ce134cc239ca4a9c7f07d9fd449370922e9325c37915c0799249380bacc4791ac079b24938475a89f33d80f31493708eb012e77d00e7a926e1249d754786733cc0b9d5249cf956e22c07384f3309679e953817029ca747d1df942b7ebb47f793656ea79ebd4dcba500e119e66c6165e3129903412be8cca8acd1ed73e28236484b8ca0f7f36b2a840f016b3c2b8ad1228eb0b476b71075dbf64ee42700c6b3a31d8fdfddbfd0da15a03dc7dca90e8468c9a63a5c04d09e1b85ffccdbed468ffa0384e745339171779aeadd13e03b3f1a7c05be4a5104f83ea5c2f733c0778139fbd1e559397a791d8079a149306dac9adf06605e64124c1b57af5f03605e6c124c1b57af5f0b605e62124c1b57af5f00606e3309a68dabd7af06302f3509a68d130ece03302f3309a68dabd7cf07302f3709a68dfb773d06606e3709a68dfb773d0e605e61f66202c28c4fd63ecf033dec5746d13e1f511fdd1b64633d1f03ebbc2a8adef561b5d9bd44740aabcdcdedc6f830c0b8c3a441dc51940510d920ee1e20535f6d12cee156e2bc0b58e73526e12cb012e71500e7b526e11c6925cebf009cd7998473849538df0238af370927e9626b329c87029c37988433df4a9c27009c379a8493b4a54e867305c0b99312a7daf33d2ffab149b296790580775314f336a025ea27c54c70845438a1ae1167fc69d25639d9b0efd5a0027f7314eb2cf9a4ad898cefebb596cd16e84aa4103e1f930b741708c21dbfaa98cdb334fb00ebbdc5a41d1149671a91e1cc01167bab4938490737c8701e0c70de66124ed24502643837009cb79b849374bd1a19ce6b00ce3b4caa858ea69cb040560b6d0d70de6912ce5156e2fc0d94ec77998473b895386f0538ef3609678195382f0138ef3109e7482b71fe01e0bcd7249c23acc4f932c0799f493849bf6240867316c079bf493849b7dd27c3b901e07cc0249ca41365c97016039c0f52e21cc0fc7b20f19ea61287075fb5a6e2e92d15c4e6308d73feaa14d36e4857babd1fa35a80002afa0f5102efc8924f0c8bf7ac6420db52596e6f60b90f9b0292d022c9407602201f310524e1d46e32905b00c8474d0149b8e0800ce45000f231534012ae292203790600f93825c85c5fe95e832ea3c657b3270edc4554d63f4155d69f05cafa27a298049e6e9733e1383d5987f36000f349936012cea827833914c07cca2498360e85ec03603e6d124cc26a3d19cc2c00f31993601256a4c860f606309f35092661f59e6eb60880f99c4930096ba66430fb0298cf9b04d3c64f91f603307f67124cc21d42c860f607305f300926e10e216430b301cc172961e2df8499e4fc2e63eed7348b1c015cb0fddf8459c03cb02f5182ed2ec04e771e5826e67fc245aff5f6d932b2a5b04d00d69729b106dbb7d3c6fd6c8683acff8ab95bfa1196f7645bfadd09acf455b3d7c313b69ac89c4011b0dcd728f1b60785d63a5128f139f6eea79f235acebd850ae23260a3af47314e0f4b7eacb8222fefc96c320be07c23ea8536e9fb531b37481d05b2fb9b5194f9d868537c996fe3e656438095be1545753f93329fb0bf9ecc46cf0160df3615ac8d1f823e1d807dc754b084ae800cec3800f65d53c112d64ec9c0e603b0ef990a9670e4890c6c0e00fbbea9606dac60ed0dc07e602a58c2de5532b02701b01f9a0a96700c800cec2600f62353c1dad873750800fbb1a960097b5bc9c0ce07603f3163238e22d177c51bbacb85b80ada9aec195468af00fd039f46b13de670560fdb639259e6d1c0323f33a77bc5c64d856700949f9bb48501e9be646463a85340c6fec2249ca41b6991e15c0b707e69124ed26ddec8706e0338bfaacf7928fe6e691b3ffbb303c0fcda2498368eec9f0160ee3209a68d5faab912c0fcc62498367ea9e62400f35b9360da3898772a80f97b9360daf8a59acd00e67726c1b4f14b35c70098df53c21cc4123f503e5f6e835922b6c1e45b16ac718eb31c915cb8b735a6fee3bcf6ce38fd8271e84d1af9844f4a103e4154becb6594d53ea1431d20a5a25f88f35fe69c4f171d73d56c8963830b9d7fc1526a91f34f773d26f6d92d641bd85a7195cb2b11b22b9cbb5cb32a96dbd779e4076e384da4e1648bde83710ef36ae7993922892a9d77e632771f549ebc6a22718d40922d3ec731dbb956c3f814381ec26a479395ac52c4387e9fd4ec5853c1c9fd2876a5ec2dcb96baaa0f654f95fd16654e9c8b852695ce330d45386e93263bd60a9ca9b9625345876695d0aa8908071a224fb458acad4c27aee30c11bf6269c2c58eed284939fd9cc762239c5f6e77e9d0da8ed2a1727d6e853c53d753cbe4a9945cda1f7852c4f479b8bcceec2b558cdc2cc1df5f2ee633970aa95353c63475fc705b6d99245572f8678777ebf8ffc8d35d26bb30d34eb116ce5ff39c9457de7596f3708950eac3190d58a3ff0716cb888c5f990300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/0ebe5e8b90d0cfb469bdcb258e1afd2f.asset.meta b/Assets/SerializedUdonPrograms/0ebe5e8b90d0cfb469bdcb258e1afd2f.asset.meta new file mode 100644 index 0000000..038aa21 --- /dev/null +++ b/Assets/SerializedUdonPrograms/0ebe5e8b90d0cfb469bdcb258e1afd2f.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ff49a38b1de9e9142b548494c2ea623d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/11a7cf67459b2db47b9d573b46c07df3.asset b/Assets/SerializedUdonPrograms/11a7cf67459b2db47b9d573b46c07df3.asset new file mode 100644 index 0000000..fefa740 --- /dev/null +++ b/Assets/SerializedUdonPrograms/11a7cf67459b2db47b9d573b46c07df3.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 11a7cf67459b2db47b9d573b46c07df3 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c15c5f6f8e786de7b1524f4501342282aa274509a216041859004882424a62028f6aed81b2af6de7befbdf7de7befeff99ebea73eff3bb333b967f7ceb9f7eedd7b6e66f8ffc2876cb69d39f39d33ed4cd9ac5ce6fc44463abf96b042368d8d668b5929ab626b9dbfa639c74ae79f7ba6ae2f6435ce7195f3bbd8b9379265277893ff0c8df4747ecf71ce6a599df3663d2b718ee5e2fe2256e6fc3dc779b7cc39e357573affcb9ca7224d9d9716b3e96c019bcf7a44ba2510b144bc542baf4578bc222d9ddf53d906e76e99508a07922b6ef5707e2d72eed48a7b958ed2eab9a56c1f11ad4ae75e89f34e0dab7064ae10125bb2c94cfcc1dcc336f2d8471e7b3bff5bc9bf9bc8bf5bcabfe1f3cde4b16f92cf6f0bde6b05fee6842e8ef37e3ff71829708ecd9de33fc0397ff77bf95cb62b2f6b751c5903e471a03c0e9232ff9984fe2de4717082f8c6933104c84a86594b79cc91c7a152df5f530c7fb8cb28b205c8e32cc7017d7240d8adc07d7e6d5888b8ab741cef4bc7f16e3a666d96e9f7b97c7e843c8e92c79152b6f34c97dbe5b5d1f2d83f815eb9ee7b6c228bdaac1366936a799e278f63e4315fea3651eafa2f701e561795a663a5cc09328c7f6baeabe7f9fddfe479813caa3451e9a5b8fe2ecf2724a94f32f6a774da4e86f11f70ee706cba3c8e2c95eedbfbd27d7bf9eea92ec7a677fbe203ec4f2b57a5cd7f5388c70ebe78ece0ead22cc7fb5c421d94fceda49c4952ee1fe09ccb3d3360dc9acaf7946d6dcf12976d4a9749eeb33979493c3bd97db6e5d3f27c2737dce683dcebcde732af6def98406f95d63bfad27a472977a3947bb97c7e67f73ca2b80c0672f8fb7ffae44ef6c99d2ce5aaf27042927a4e91c7e9f2384b1e67b2867c5d502aaf4d93c71932cc9d98b74cd849de9f1a7db7fbc501b9c54ba3d9beb4ef2fc3dd39814cf5fe1c796c95e4f3ea995d42e8bcab3cb64e32ccd6f2383744986d5c5be0b73db6b0530299f35cbe2d8f023a70399be4f97c795c208f0b25ff693e3b507612cf0e12e9b29bd4a52348034797d6d9f2bc501e17797561453e9dfe4a9f4e912952e6ffc0393f4e95d7ff06e75cd7e56e38ad5f973217cbe3129fcebbd3e9ccf670df6ba7dab46d927c2f9e7dede9c6afcdceaeec36aa7cd8cba7dbae51bd5b168177951ec9e487bd258b193ec633a40e8aed3edee7b21838e7c7e9d1f0c4dfcebb6d956df503d7f9bb1170ceff5e9aa4aecb58accd7239b340d8b364d8b2fc6fabd253da8a27efe9dee5c799e0da4c294fb5fd8b596c3da69ee371cb02e7fcfebe49c66d85463f27dc760be3bc5bc2bce5cf9ca83db4f8585e93b61399cdbc796bb6bc3f24fa4ea4425e2b73cf3b285d56ca77947cf5b7a35f7bd54e5d258f6b98be9e2d071c647e64fb45c3eef3b5bcb63a4e5875f219a5a78af79e51396d72a4eed9f25e25f3e619ffb3fcda5a79ac91c77a79ac8b3e3b4eb523f697c75aa9db2ecc5336b36a709d1f779576d1049cf3e7aaa2b2bbbd2dafadf3e9aa4bcf037c71d79501f1ec6cbdfb6c4fc57083cbb6c3f33eb92b597cbb3dd0953341b5370f72e574ec1a508ecca713551977887bde51e973b03c1e2a8f87498e7399a72c6787cbebf380ddcc05d7781a34f5f14da45b3c8e47ba7a36b4f7555e395a1e411922fc1c5c8ff9d1b46a68f31d01eef1f31920be307ef17439461edb2588cf36e0397e3c3644fce3dd6b2e8f27c8b82d60de3ed002d7563a8f8c23eb44a6b5d32e93e4f926f77ea7e3e4f949204e3c8c8551d60db674b2bcb71b88b7b4ab4821b876bcbcb608d8922a874ff1a64f5633dffd53810cddfdd3800ebafba7cbebcd5dddbb6c96d7cff0c5e5509fae85cc53ceb03363e31a29f485adfc4cc9a4e559f2dd225f5a16c974f93d8eacb3f569d94de59d737c69a9e2acd272b1262dcf95f796807493f614d95d93be7b000eaa9d781e9296eafef940aeeefe16a083eefe05deb4eca6f2fc85485a42fd615a5e141bd7c8eebeb015cb786979893c5e2c8fba76efa5f2385aca4da63cb94c1eabe2c8ede793db3a09b957c8e3e571e45e89e89b4a78cad695ef664fe6b575d92eeffe791c595731adadf7507e83ab99d7d6af615e5bdf8bc5dafab5f21e6c274f95d7f666b1b6be0fb013d567b80e3c036d55ddbf1ec8d5ddbf01e8a0bb7f23f3d87a4f559eddc4f4b60ef587b67e736c5c237bfbc256f578bcb4bcc5c759f1dd9779fb39fbbae9d3d3dffed9c0e2d78db7baf2275e2dcf6f93f296491ddb80737e5cee0b77b91b6e2fe9ffea3d48ca692baf4bdf5a2fe597ba9d69db5bbd4a7dcfddc1bceda9bb7cfc95ef53d9ca8aa8bd35c4e54e700fc6ad8479db24f7c8eba520ad4ac0355d9b2b11d77be5f13e1fbf6229af2d38e7cf3d00f457f9f27e793c267aafd31ebef46d0bf478506f2b4257906681db482ace0f2588739032a98c79cba432d70eb6591f47d663f2992d719e79421e9f94c7c7a5fc95ccdb7f917d41f6943c5fe5bbaffa819747d977cf037a28d9fc9d7671f451f17f461e9f9547d9ef8eac665e9f98f259eaea8854dbb1a9de2b973a957bed479c3be9d057f599952dae4e601fcfc9a3cac3fb4979fbf918ec1787c1e824c38a132fe11f803e0455c7bd20cfd7c8746d2fcfd7fa9e57fdec17e579a5eff96adff36accec25795ee57d9ebd0ce4f0f357a27113baf06baf826baa7df25a944f3f595644f6f786cd5e67defe9deac3d5481d3a80f72003755ffaa822b5be38d5c9fb9dc0393fd6fbe4d6fa58d5fbe4aef3e9fb863c2a5fc25bd138ee3017bc0378b237bd32e3daf42b52c601f29dcee0dcb1e97ef1daffea5d59464564b99ad5059c3b32b2f35c7db3a7e3b22207faf8ad07d7f9f12079bf2b38e7b237c7d1ef55f9ec465fdc36ca775f4fe25de9a7881ce28bdb21ae8cfe6dddb8f5cf8e23eb1d797cd79786ca66b9bcc334e97a18484f7eaeda78ddc039d741d5fdef31bd6d1fec7bbfbbf7fd01b24e60efcbe3073edd0e675e5fd847f2f8316e93ec139fee47449f69d0ef439f7e47f8f43e52eadb03e8a1aef3e351cc5b47295fcda7f2fc68df7de5c3d18dbdc7cb23ca268f91f27a827387dfc08eaeac81caf7fa993caa764bb275d717f2f8a53c1e1f7daf93f2a37ee59e0f4ea65fa8f43ed6a7f7b152efa75d59bc892a9e57617c1350ef6fe5f1bb387a7fef9e0f8dd79ef1eb7d9c4fefe35cbd071d26f55676ff833cfe1850ef9fe4f1e7387aff22f5be3f8e1ca5772fa96f2fa9aff41535d411d2a7e31f9b8e9c20dfeb0dcef973728c9af564def91d2a3f6c92efa9f0a5df3b72128bd68d278167f9f144e66d679ee8321df2ba4fb67aef6419461f70ce8fa7306f1be81429a78fcb6b88ea77aa7951aa9facda34a7326f1b47f9d7746927ed81a9f8abbe7f33dffddf58b4af8aa4958a5743bbfb24c096e72bd596fe9d79c7cc252fa6e68afcc13cf3be3c690b3867f5d5c7a1e17e0a7168b037d53754fd36d56690f378b2b64d4286ea03c978f13f3df3d9545e8cc8f3097abd2359c9eb1d398d79ec9df504d7f951fa4a1b6cf474d7b6728e8a235bd9ed394c9f2736b3689ed80c9ee5c7b37de19ded86377c8b4fb67aef7ce6cd13d29f28e6c4c13cb1c595334cb67f864d748fc355dbf00ce62d1f949c26defb0d3e1975bfa99775c375f5dc85f27e3f70ce8f17000617c8382a5d2ef2e9a2645f0cde51e1b4f0be13a35f4bf0aeee7e2b447fe9cb8b5cead35ffa2e2397c4a661433edecc3cf93847f99bfc8ccff0d971b6bcaefc3a6746c368b09db340b86781e7e2d8ce28d5d6556d2de5dfc0d2e6321086f4bb46daf938a9ebaa5f8571ba1cc8f2a7abf4b9463a78ef37a491baaffa235720f73bf974933eddc895206cbfacab7cfa5e05def5bfa3daea57fbdeb91ae4ad56e06fce5cf50daef1c559e9d6c57bbf214eea7e57244eaabd7dad4f17e5bf55f9ca91374ad67f2afd95bd34d8e9595e3b1dfe7d7cbbcaeaefb5abd1d2ef16517625cb26a6e60b5ec7bcf5aaf20f53d7abaadcf597e9aa8c95f9336b0038e7c773e5f581e09c1f555be83c795ffa51234a6e2f709f8717a0ce8b5cefb50fa6ece686a84d35e45bdf3b0d6cd4fd3e4086ee7e5f1f3b755dea19b9c9675337c9e38d40977871b99979db9caadcbb455e1f0ccef9f156797d8894a3cab8dba2e1353c7b27d3d7a5778167ef02cff2e31dcc5b1edee1da6dfee53ed9eabdbb651843c1393fdec3bc75e93d52ce461f4755aedeebe328fdcd91fb80aecaf7ec2f57d57555ae3ee093f5803cde0f6429ff52075f3c9af9eeabb2ef41e4bebf1c7d501e1fd284a5643decd3ef61f0aeff1d558e3eea7be751797c4463f38ae963be77a49f37f23808e741708d1f9f90efe480739e6eaa6faccac12759437994bfb7cfbe9e04f26f03d7d439e80b293b6a907b17b8efc8ce557d2c15876caf5ca6f2cdedf2bdbfc039bf7f5c54cf4ecf23ef4a9b576575c3f53b015bd54eeeef7bc7df8e1ee0b587b879ff29e62dc7543df5b4264d5b78df8929a75a0219bafbbe365bc375d5667bd6672bd2af1f7906a4e5735e7d23caffadea9dec38719e29df799e79cb85e75dfb2a38d34da30265f7b23e11f36ee294a391c13ef92f485d8681737e5f33672c22cbd0c830af0c8f7f4fcd277b31fa7e838f4cf9c672a2f72629d983c07bfc3814c407d869d2be7ed5ce7fc9c7ef2597df38e9171fa7f28be2579b809faab75f06cfa9b0a0df5e956fd06fff0ab8c68faf49f6c3c1b9a3db843d7c725f97cf8d0061f3e31bf2fa48700ecb15e9176f58fba4e4bd0d747a5386a9da59c37d61bcc5a23e453e6eabda2303c1fd56404f754dc950ef82f0991a3b18e5ca1cdfd11b66a234d0a6cb3bcc9bd7a40f3af2ae2ffddf95f195e93f41f914d4b8d24109d25fc95569f19e8c4b7b70ce8f23813c7e7f342e531bcefbbef8bcef0b57cde58933e61151ebc0405b27e9fca3da0052efc88732bc5c70ce8f1f80f457f73e02d7a46f3df231d3b7ad3e01cf7e029ee5c74f99b76df5a99b763b74f4c956ef7dc6bc7e0ae9978ec871dbc8e7f2be3a5779f40ba0c3e7e01a3f7e29df1903ce1d1db6efeadacff65f23617dc5bcf5c357be30bf96f7f3c13997bbc5f7fc37f2b9b1e05c3186720a7c72fc7a7d0be2a8fcd7a07da7b51fc9b5a1adf109f3b435b6dbc31ba744f2b4d75459a1f87ee7e3a67cec6fa620dbe75f6fe8f7213ebd40be485ffb06f5130668dfa4d3f7a8e6ad47be97cf7606e78e7d4c92754243393e34812d2879ca5e954dfc20e58f03e7fcf823f3e4f7881aab50727e629eba499c3b7aedf8b84fcecf3e396aec4285ff0bf3f6b37f00d755bcf8fdf1aecdeef8b62f3e09e2edbdd62c227c91b359192b66d52c572c92e0ada16497d1ab37132fa017692c56a730be929e075bc73638af96e956b12f166be4eb1c2af9da55ecbd441f47853e4dfc2e769e2817422764c504714f4c105cb90ae75f1958825feb5c9f2556f0f345f8e5ce9dd16cae73e46f2d6763d852e79f57ca1227d80a56ef9c1539bfab85bce58edab14f268a125faeef7fa7d091e9ee2650e95c5140ab9df30aa1e122f17b9dd0b44c683fc7b95627f63658cb56b1a9ce71bd082d36ee35cedfba308b2432bd8efa4d05b0ebeed6052a99a63bb1e1dae70a5bfcbf14698c14e1e89b4f90f9b069ae68259f109312ffc7d02d6478453547ca182390453cd7f259aea8cb0a6308068f636c0cf5f6edf21ecf0ae2c6454f8627f7362206d1142e1b71e5a3bfeebeb4b899376a6359aea88efb24885a3cb05c5e8ef074078942b3664df3b8a27efc111d7ee116599441fcee73e5e2b9e009d05c547ede04105b041439a5da4250792e717ebbca2d16d1a8104afaa3552494af93ea44cff71232cad80cf1745983c2f3c51633070865d6387f97b29854cfe32ab61009175b2d278a3c967459baa4131eaba246c939d8e638f113af65432ca289972bda5a3de398381696688435912d319509bfbbfdc4bcdf775e5375ff1d0bd6169df6ede7cdf4e9d35aa44f2aa16229d4449742ad339db912d726f1d2a74d43bca2e9c37ff40cdb22369e48078c60531dc13699b6717eaf4a4829769e0dce900fad8cf017507a80ed11234cac0286b09906611e47d841a3156bd6caa715570891dc5c97386d1ba7ea4ecdb8b98fa8870f4133d4b83bc5ad79839a760b1d3db1486039293dd5a35ce4741d7675ee153bcf9789e629bfbed09158ec84cde54d1121447ba1de37e293e59e84517eb25aaa5d04d541a07f1c56338c784b0df13c6eaf5d356620ca387f66e8846786565836eb16369bb5c624770f2bb90d26b94758c96d31c93dc34a6ea7cb36c2afbe7746b24dd411a3fe9aeabcbbda89cc3ad1bbae77ded7396ee267975e496797de22bb64339d3b299846583669af4b3b7e711b9d92fea4eb8d275d074c709f90823b62d6d637acb575c254de36a4ca9d31c1fd420aee821572d96928e4baea329f48d672d2ccb7d8b9e67a216788bbe5a223c6bb6635a23d54cb568a8ce46e3a8a3dad32db3cb1db67bdd0237eb6ec9f74b61c20b2251f4ba3d315cbb0dd7449ce53656032b634004feeee98910e0a69a43d74762472f19a46b12325d3ede0f3d054572f7db63498693abaa27cc98d6335e9d18ccfc968cee44f0ba4ff3b549830bd329819f7c44aae1c7dc975589092ab17267c581a8ac5de98f0e16910be8d4e386f138e60b13df3bf9d9f18e16d71e17d30cd476a343faa322b90e67d75c279b5cc8bc950d5f2b698e4d16125f7d3954ca2b23e9cb4644a766c7096d85abb8c2d707a96fb31775027365baac1a142e7b85268c1af732d128f29c62fc57275a5986873cc60c98f70d2c782cfb0c812c5da1851ac8d8e53ace9b4095ea8e90bd57c11ba596cb002381b2b69c66a4a9ab775c5589c92a63f96650bc266d9013ac93ccb8ed3d86a1eb7553eccdf5a344f62c2c9c7c319a82b1a448bf8c0462d1ae6348c47ac14c3f5ae3cefa8c40c272cd7708a9c676a9c30caa49187290cf8d493be7ebf26737ff4d961a2c80e9393c80e94b1c232c0209d25713f1ddf873a668489b7570ad94247f232910df7179739253775cbc5a3e5ec40e7a846de63ecad056e6f8375da70f707dfb53a61ebbb0b2e780826788790828762797c52d83c9ea393cc4b1bbe0374d816d6304cedc961d51e8e95a83b694ad43f23c14ad41198f09d35c2efcf0a267c249615a624632371ac7a142678aa2e8ff13c304d749bb39dff55ce1bdcc15e2c727fb6a80ca3a541b693d7cb9dbf78853d123c5fe53ce1ce7409a2e768cc28a685358a5c9d649e6ed335e9f66bc074cbc384cfd0089fdd2498f03158dacdd4a51d7f9ad71bbc59b25ad66dded2305bcc39ca16d3ccea85ebbe54a45cad48d76c7690139d839d639df374b6a8072ac4bd6cf11d981a51d60649d37c4cff593afd5b03fd17020d838438162bb7666bcaad48c072ab4027bcb338451a3e7c9fdee00d9f7118b65d75d8fa0a635b2f5aaef5e2f945c200ca1adacaa569aa20c76bf4ca15ceb0b5ac311b64bcb7c027e5d58abfa34d141e76749a479886175f2be36f78a91f7dc38bef0a9c23e6e566427bac8135012b54e76b0ad54890427522961716607961614a79613b9dcd093f6975a3da1c9ea30a856c9ef3c237f8f95eba4dfcbd7fe1cc2d48c2b2d2a5e308b16eaf567ce7cb2557cb0b533e02bb027cd0cb852fb2843e4f148a3c9149cdb17cb13d566b2fd2d4dab7370b566befa03359e16cad6954939d2e2464c26c8b74662b3cc2e39348fc74ead94fccddae15856aa92c54dda2bb9fd86ca346549b65cef57542efe8fd116281366f2fcd14bc2b05f92a31a8b44a3441f546be581879a6e38919fa24ccd097680cfde38086be2356bbecaea95d0235d927636aefa151bb6df3606aef84a9bd6758b577c6d4de4ba3f6a6806a4fc1842fd508dfbb4530e15375c279a9cf277984e97e4ec304f36da463dab2dc21a43a2125be6ee80ad111519dcb52716583f3bbc2b9562244648b49fe6ace52102da7636cf7d5b0cd0ec8760686605948b6337582b9792e4f46709ce1e2593ac1bc7157cc90c61ddfcc3978e36e3686bd4483fde680d8e7e884f36c5e1a369bef82492e0b2b79574cf2cab092e762925785953c0f4bc4d59a44ecd82a5822cec784976b84970614be40279ce7b7fd7465d360c69d71d116b0db378b3a4d8a9d44aa13254fb6d398702bf4528ff3853b54ca658f3c483e5f88e9b946a7a7ebede033337983a55838e878880b9cc78384ba1b86be42837e4b40f48598f04a8df0df030a5f84f15aabe3d53341ba968a097dd1ab639cab41381661da54e9b4e1a7d1740b12ce620c69b506e9f5ad83215d8245627f5d247855e1e2dbde41365f78138be57ac875a21a0f8e71774c831a9d06bc649bdbd030589862b3600f0c69ad06e9e70191ee8995c875614be4bd30b5eb7585669b606a2fc5d45e1756edbd7592b9291dc0905607dfc63778ab631f2c9c0d583807a614cebe18a983c2925a8625f0464d022f6c1b2c819763c20fd608df1450783126fc108df0d7030a5f81093f54237c64bb60c24b30e1876984d705145e8a093f5c23fcea80c2cb30e1476884df1d50f84accc88f0c6be4ab30b58fd2a83da87d30b557636a1f1d56ed728de45c316131936b10fd53ab822dd33a86253b0d9b6fe2ae5b7f98287ccc5fb59f2e5d780d7d9c4ea50055f91acc9a8ed758d3af0133410526fc048df08a80a65a89093f51237c7340e16b31e19b34c2b33b04135e8525e6492113b31a13ccf7858f690b8e14d65925f2186fce9789a5fe6bc55f6bc5762b656254bc58d87ed4e1a446c5f9de11d9d27a6ba44d5738d63edab91a44ebfd31ad4fd169cd8775b98738da6e76bb926e37443769319b0d95adeea181f4aac16ce0548d0d3c1ed0c06ab1489f16d206ea7482f9228cd393111c671146bd4e306f1e9ec190e621dff5b1b59018a479b80ec37e9606fbf48059ef004cf8d91ae1ab030a5f8f093f4723fccc80c237e884f39a99efd51caa663e1053fb5c8ddaef0754fb204cedf3c2aabd1153fb7c8dda833a0653fb602c7b6ed195493ccf25d3afcf164baeea4519cb4bc985cc5d48efce252a76ae968a5946abc5f94251aa72e7d80a5186b9bb882c13fdf75562acadc6b9aa66256d60ee0acb6cd1a270f754ca164305a572aeda1a71a5563c5506c2d19799e5b2ec87a56c5007dd2158125da049a28280497428964417862c410fc3045fa44b7b3eda5fe49c547bd2254878876305ebc558c17a094ba5df7d0416af4b75f17247d094b3cfb5df7d02d6ec4762e97f99ae640998fe4761c22fd708efda2998f0a3b134b9024b932b534a936374e1f042efaa648c38ce50d5b198e0ab430a3e0eb3a26b4266bbe331c1d786147c824e304f7bfef505ffdc472e20c8dcc713312bbc5e6385933a07b3c24d98f01b34c2f70e28fc244cf88d1ae18705147e32967f6ec2f2cfcd29e59f5330a3b94557a6f14532cb9c7fdc5358214a6b55c7963b8d377ea75af476787d18c4c24ec5b4b855a74597062df29cdfbce6e5c32beeec99d475380dd3e1369d0e9da50e639dff25c26fc2df59effc4e5d83d3310d6ed769d012a4055f63c35b4641423b43171a37df3b34e63bb74b30f33d1333df3b31f3bd2b25f33d0b2b9aeed6144d4d02164d676384eed1106ad93518a17330e1f76a84e70414be19137e9f2e6d030a3f174bdbfbb1b47d20a5b43d0fcb0e0fc62b9af2d35c349d8f69f150fca2694c1a8ba62d980e0fc72b9a0ad258345d8069f048a2a26977115eb0f5001762e6fba8c67c7b760b66be1761e6fb1866be8fa764be1763c89e60e19a639760749ed4d0b93c209d4b313a4f61749e4e89ce6558249ed144e2cf8091b81c43ff6c48f457605a3fa7d1baa87b30adafc4d03f8fa17f2125f4576191785113895f0346e26a4cf84b1ae15d7b04137e0d26fc658df08901855f8be17f05c3ff6a4af8afc38c937f0f06add6c6a6b95abb1ed3e2759d16d16a2d3f8dd5da0d980e6fe87450d5dab834566b37621abca9d3a0158b566b33c4984d55404fd54dbaf0b801bfa531e0a63d8319f0cd9801bf8d19f03b2919f02d5824ded5446263c048dc8a097f4f23fcfd80c26fc3929b7f6e274cbd703ba6f5071aade7f60aa6f51d98f00f35c2eb020abf1343f2912e07f041b7f87efa584f6e389fbdeb3735db4b7f1796401f6b12e8a88009743726fc138df0ab030abf072b323ec58a8ccf522a32eec522f1b98e50ef6091b80f13fe8546f8ea80c2efd709e76ee02f932932e2b8811fd008ce155b8435ce0e8cb13b13a577d7bcaf74bcb4537ff8b7ace2efc0185e576c9ad083982d7da3cb6d016de9219d703e94cbbfd0156a28f7614cf27761253f82d50fdf2763ff710acd4775f62f76b15bd928f61f66cfb0f896ff43d296ffa3b0fce1712c3fdcce66fa94780c339e9fc21acfe398f1fc1cd2789ec0b2e92f9a6ccaf7460c924d9fc4b4fe07d33489f83615534477a84cacacd0adc9c916cda5ec80d3a79ec2f4f8a74e0fbee74830f94f63f27f0d993acf60a9f32f4deaac0f983acf625aff1b4b1d9e4756cb26a24a8fb286fd30529ddcf61c16c9df3491dcd83758249fc722f9bb2e923c07aa79066e7bd63bd33048b45ec042fe8f2e64de547467d5e4366cda9fdbb069cc02274394b2a0b3395ec434f8af4e831e5a0de68abfeac40a7bb7d59fdad2a797305dfed0e9b24d92bac4eeea1e44a79731c3fb5363785bb60d6678af6011fe2b6499f02a26f87f2105bf8609fe3ba4e0d731ce7c7b273fe7fb03727e03131ed1083fac5f30e16f6248b222e190bca513cc4b9f26c9088ed3197a5b2798172e4d23483fb45924957ee83b18f6e61aec7bf40f86fd5d2c122db048b44c2912ef619168a589c4e68091781f13de5a23fcf101c1847f8019669b88a638e50b330b19dc46a554b4b155419ec386890a6fadfced9d489f2dcedcea67a4d8c1a146d4fa6e915b2b26da678b8239ba92d9752af135b9d5be96810a873b93dc2a766543719e2d0af3d28053fb3ec458b4d5b1e03bb7c1bdd8dc5666b4828dae2a3e406858c1e0a4d9d5a20aca4e2821df793ae8e2838f308369a73198ae010de6632c4bb5c7b2548794b2d42758243a6a22313160243ed509e7443be9529a2f41d1bb48974ae72a5fbcc17b17ee163ef1d23427eedd61623aaaeb568ddab537075409cb502e54efbd3a6157759a5cb4426858051cb0aeec2ad93b0d625f9f6149d359933405038325cde758d274d1250d5f8db5944d12054d8588de8e6ca093eda2ff2637eca214fd2ee524a70d187d63b2801e2b65a2f376011b27a51431f8e54a9d04f584bbbf72b978962bcaf77a2a13dd4dfeee3a79cdf5b0bb6f64378c9ed530f545e1602dd02fb024e9aa49928a8049f2259624dd7449b2c89a240902f82b0c70770de08d01017f8d09efa111fe7d40e1df60a9d753977a6546a69eeb6da4cd42df6289d04b93088306054b84efb044e8ad4b84b906274210a4df6348b7d155140191fe8009efa3117e7940e13f62e9d557975ee546a6d734a63e69bad8691ed0669e9fb0c4d8569318ef074c8c9fb1c4e8a74b8c8516244610b4bf6068b375954340b4ffd009e7cff78fc44ed6ee3854233cce64ed7f629a0fd068be7c4830cd7fc58c62a0ce28f886a4d1cd065d5b2f160957abc9173c17f0e1ac20c9f42f4c9f413a7df874dc2922a715cab06a0385f66f2cb4c1bad0d43c2dbe36c3bbb56feaf3b47ec33418a2d3a00bd040650a5d932cd82c8fdf31031baa31b0cf031ad87f74c239c91caca33b2ca58eee7f75e1f03986c323713622f70730110fe00f2ca54660b6e2cef871eda22c0d7b6bfd89a11c89a11c9512cabfb0988ed6c594a7fd34d18d2e616b44175ec52e9815fe4f136aaef83e5b2677815924ab212e27f82e30b9115e9bfa6d6dd354fda0785e44bf134c221db0e1eebf31fb1883d9477e4af6c122887d8cd5d9079f5b3a5754dadcd1b997749504b18c08165e41bc523a3f8da57416a6c1389d069d34a574b4e1c2f345d0c64b132cfcf1baf0bb82f0e1f6beee27c953a7d014d36202562e282da6f9da0a41426d86853a51176a37102a163abfce736bb011d3e63a3d78ded92e9921a26371c12db0086eaf8b6077e65da81a5ba5a49ec02d314d76d069d21f6852253ca7ae1fb64854016562161bf79caa8a4fdd4f5dbf56987e93121920f716f34652610a4dd2d658a83b266b80fed05333c0363a3d7824276b3a195febbe9b14a793d1168be44e583b74a1a764a9175fb6aa620b44295f239ce9a501cbf976980e3b637d11f76b7acb105d54be4fb537de1ed3678a4e9f0120e183eb959a4974c0349c9aa85eaa4e4b81d1110b7f9a2efc6d41cd5c9d94f5a4ae59274cb3e93acd7a0332b3442acc736eae172df872518cf1ecbb21947577c6349aa1d368a0a61809a2596af6d405d37126960375f654e4e85528deae125aa59e8a5d317d66e9f4e908f481e1a7dadfea86853e3b118d445aa4963add75faf07efa1c4d3ffdee51c1fae93db0c8eea28b2cff604f74b9cc4c066784bae3ae3520eadeaf4cb8330c783d982d04560057516d838375a5f85d2e7471bf58c1db183b0502d6531727de3fd815eb10cd4da943d40b63370f6b97cc60ead3b1a977987beb42e51de6f99a5e6855e723b78f11ce3ba088f06db0282d88d728cd236894f6c1345918af519a97b146695f4cbfdd74fab563b051aa8c209566e9b658b8858952080f3fb572a91f562e2dd2944b3fe7072b97b2b16816e9a2c93fe8e9edf4473fb396cd7674fe653b512cf7b84ca199469fde89b973db95bbdb7d37f826fcfd31fd17c7735e8c49a3f36200a6c192e49d17ae7bad429846d0726a2016feeebaf019d3d8471ce98330e97be8a4b768a8b7725348cbc198a1efa931f4df0b8219fa104cf85e1ae145e382091f8a515a9a8cf3220e921c4cf0de21050fc370eca3c13131208ee198d6fbea8c86db646e20e54760f297616573eceae279626a99fab84af44eb0cc3712d364b94e132e81f74b8326d6282c94625d28ad19d3ee581a24c4d19a1073790733c23fc293a9d18222e78cef8c1d7ca4604584cf6af68211ed4eed4841891829e81613b378e163a304b9bab4e2a7a5113ea3c4abd22ef30e6fb1a5cf0b593149d30c4f9a3ccc18cae23588dcc5f115ce5f753252e5014d7d0c16ee4a5db81dd070d73277f67390b0f375e6d82fd3e6384dcc5bad49c11c5745f898b717d168c4185723c6182f74cc18c7eab865736ecb32c8cd7dce2d681789760e6f1d2e00dd87da14989647827e017b3f4176604ccc53d50fa35ea0cb297c5dec9a48c875b1e330c91561258fc7245786953c01f3abafd5f8d545e205f0ab4fc40aa5aa90eda3ed301ed561796c8f49de3face41d30c93561254fc224d78695bc2326b92eace4c998e4fab09277c28c6e5d48a3db1953f980b02a4fd149e66d83f5c9a8dc05173c155379435895a761940f0c49793aa6f24161559e8149de1856f24c4cf2c16125cfc2241f1256f26ccce60e0d69737330950f0babf22e98cd1d1ed2e676c5041f1152f05c4cf0912105cfd309e6dbac1c958ce01f71c1f3b1f6c0d169680f2cc04ce398b0a6b15027993f7f6c323ce22c61de0d037d5c48d08598691c1fd2341661824f0829b8084bbd13c3a6de622cf536854cbd2558ea9d1432f576c7209f1c12f21e98e053420ade134bbd53c3a6de5e58ea9d1632f59662a9777ac8d4db1b837c4648c8fb6082cf0c29785f2cf5ce0a9b7acb744e88fece69847f5b31f31b76e9f6734cefc65d67279316637062cbb1b438276c5a14eb24735fdde664548ef38dba15985d9e1bd22e4b30c1e785145c8ae5fdf343e6fd322cf5b6844dbd95188b0b42b2588509be30a4e0d598e08b420a2ec7205f1c16f27e98ca978454790d26f8d290822bb08ed665213b5a9598c69787d4782da6f1152135aec234be32a4c6d598c65785d4787f4cf0d52105d76028ae0989a216d3f8da901ad7613dc3ebd2d033acc7705c1f12c73a0cc70d21711c80157137862de2d663a06f4a03e80d98da378755fb404ced5bd2a0f64198dab786557b2326f9b6b0920fc680dc9e062087606adf1156ed4331c97786957c1896c9ef0a99c90fc704df1d52f01198e07b420a3e12137c6f48c1476182ef0b29f8684cf0fd21051f83d9db0361eded584cf28361251f87497e28ace4e3b1faeae190f5d5095869f4481a4aa313311e8f86e5b10953fbb134a87d1226fcf134083f19738b3d11d22d760a06fbc9b0b04fc5f2f85321f3f86918e8a7d300fa748cc73361799c8165c6674366c633311ecfa581c75998f0e7d320fc6c0cf60b61619f83a9fd621ad4de8c097f290dc2cfd509e76b515e8ee87644d0088fb316e53c4cf82b69107e3e5646bd1ab28cda8299c96b61cde4024cf2eb61255fa893cce3f8463230e2ac71bf082b46de0c598c5c8cf98bdf0ae92fbe0483fc7658c8976290df0909f932cc94df0d69ca976382df0b29f80a4cf0fb21055f8909fe20a4e0abb0c4fb3064e25d8d09fe28a4e06bb0acf771c8ac772da6f1272135be0e6b837d1ab20d763d86e2b390286ec04aa1cf4396423762a5d017614ba19bb0d4fb3264eadd8cb533be4a433be3168df05cce2fb282510ed52e71a44d134f4c67bb367c0263b4bceedde68187b0540ebfbaf7bd6fc51f9afd5a875f3b5bfc9b089f2d3e443c993eedb039e3b7ea929593ff36197bf9066f80dd86d9cb7769b097dbb1a2e4fb9045c91d58c6fc216cc6bc13e3f1631a78dc8509ff290dc2efc68ad79f4316aff760b07f090bfb5eac14fc47c852f03eac01f2cf900d90fb31c1bf8614fc0086e25f21513c8869fcef901a3f8409fe2da4e0873114bf8744f10866c8ff096bc88f622aff37a4ca8f6182ff0829f8712cf5fe0c997a4f6090ff0a0bf949acf4fc5f1a4acfa7b0d2f3ef90a5e7d358e39465856b9c3e83818e648504fd2c667459c9a81cc7e89ec320374946701cc8cf632c9a8665f102967ccd4226df8b58dba8793282e3b48d5ec258b408cbe2654ce59621557e452798cfb56b958ce03873ed5ec504b70e29f8350c729bb0905fc720b70d09f90dacf86c9715bef87c13e3d13e2c8fb7301e1d42f2781bcbd91d43e6ec77b052ae53c852ee5d0c72e7b090dfc320770909f97d8c45d7902c3ed009e65bd0754b46f0505cf08798e0ee21057fa413cc4f7b64c5eefca07e6202688607f03196c17ba621837f8209ef9506e19f6286dd3bac617f863573b7492635e334733fd709e63ba0f449467009ee90f90213dc37a4e02f31c8db8685fc15d65eec17b2bdf835a672765895bfc13263ff3465c66f7501f00ff90e4886c9d7b8e0ef30d80343c2fe1e833d282cec1f746e63becf4664316b9c6d46940b36d89622837584b5cee12159dc39dc2b2676c9e880b9807fc44ae0a16928817fc2123f276ce2ff8ca93d2c0d6aff82091f9e06e1ffc01a4523b2343b1a4d676a24c0ebd19fcff8ae7d0788045e23937eb4d8fb688e737f8173672d535b74ea9798e916a4f1a7a1694d155b48aa8f1c0469a1fd138be5485d2c8f6988a5fafa949b412bc5df731ab6b4e4df117533e89c86276788dd68f913deafefd6481e8bc4dd524762bd881797eba51795c09f0fa60726a988f15d93d496e19029ccac7ede4b1c394177c8fa15233d0ab32718a21b27be11ae4b8b6fafca37a5ae1169eec6b648ec01b53646dbe8bbf8f574d9d3bfb0588ed6c572b22f9690b91bcf9922c52a451cfd5a7a5308de899757e05b4162f66f2c66b9ba98ed9454fa4d11dfe02d677023dc702917bd13246ebf6171cbd3c56dbc2f6ef344eaac963173b7486fac98fc8ec5648c2e269b325c9e45dff1ee3c3d93a9af7ed706b072c80e8f05af4bea453303967abc8195beb2ed3f18f57c1df52949e58db9ccdd7bd78452edbf58fcc6eae23797d0aaf8d5fd45303c566e7338faf139ef96da6153f50f2cd605ba58ef1837d6b8a685222eee57c7dd38aada38760fe6f4a4e69f58bcc6e9e2b567e096dd2271c7dbb6d349c06688846909a692ce7f613cc6eb78ec9a913a9bba36ff1f16e709583b25980d281bd67f7830a8450489d9df58cc26ea62b63d1233f55559b76de276b555af6589ccc5a531a941d347e143a5da186da78bd14cc2d257a5aabb4fed0ae67e75237d318d6031dd5e17d349ce69f225853706c5e29a1b3bce64b648e51ad11b2a716adc0d698c551616ab1d92e91378c3852d84c522156a9c67793e5c15a7f6f3ca485fcc9a60319ba48bd9b484256772bd02bc0c8dd7674db5a46c8ac571475d1c67a136c95bbc2b9c87545cddcdc76788cf2655c932112f4bf432d35d1336c3e23a5917d732e2de439df8d014a7e4f60e96086b2f6f2879d2d31f4e8553738cd34e3a4e8b1bad97159f50780e2d300e3beb384c0d98374cc8112db1184ed1c5704ec018ee2e2c7a2d92228d11df56587ca7eae25b4868d9b529b435d241a03546605abada206ed93605b440e863d5068bd574cc4311345633c513b129e42f7392971b247e6db1f8cdd0c56f87102dc73a511bf15def57ca7e1e1eaba2986783c4a91d16a799c1d2cc5ff64c11fe8432f129b2449647597bb4c7e2370b8b5f903ea31bd759b21d013f10599ca07598ae9663072c7eb375f11bc4e27b05f9872d29b4ec88693927be6f2f482a2c4a2915286daf1316eb5d74b11e85e6ada286a17a5846ac6cf06747bfe9961eff7e674cef5d757a6f97b0c735478c0d72ef638553e6d53871ab145ff688edffc64b81d47b905db0f8ccc55a90f1f308ef0d2f14adaa5a4dbd9acc58026f8dac4c630cbb62319c974c1f593f363047d81ef783174b1f556c7a65727ca01b16c7f998872a193f4032b14cadc4483da6ddb1982ed0c5747652a9e91fe971f3a18a7763a66b0f2cb60b75b1dd2361bad27ac6a97de63d311abb056b8fc5b62d95bd57caef2b9588b7f076258d9fb91716bf425dfc0ad2d41e4b770dd91b8bc5226c9e42b0910d37066a229edb9671db005cdf7962d480a761ad489f2ad1278a1dbd4b2d6edb60712bd2c56db02f3f4e11be46cedd3f465326e2c7e730a447cf3e989e8b757ae6fbf484d6edd77996d439d9b22fd5fe645f2c064b7431581ad88a6267bf656a8434f5f2615b8cc9ee3a2627b3c6f27a7ae7962c8a9b0fe3b51fdcabaea7b971e797f4c3c8efa123bf172179557ea7ee974f4ffeccc688ec1964fc3a7e5d3547325b2147820fd4c42dfd9ebafe58ccf64a7d2ed10c83fa0a03b0f82d4da5c7e7c66f91f3f00ae67ae65caf6a63ce261c88c5706f5d0cc7fa62384de8eee6b93a8fef079647c9c600be15240e83b038ec838d7b60a1c2749a27e7399537b473f1316b6f7cf13be989ef602cbefba6c30be66fc594883a2b76ccd79b8ea9851024d643b0582fd3c57a9f34b5f86b43c42e335c86625c96c79f71939a3524d3a6a59a2d9583c5b438197f466c4fd6f59e958979f96b45fb215af7c4b6be52ebbfa75ef70cc362bb029b1ba66f67ab655955e26c2d6bbc31a2e1588c4ab09908417d127a1f5c327e894cfa2e46601c4a751c8607e0a0d2547d993d5ddea49198c6653a8d87c4d4b07edf1a5d6f7e14a6e94a9da61350b6b196eed5bc5af423a2335728f2cb682c2eab9259858479aa13b5af33eda5cec562b91a9bd11cac9c736bacd8bbb1257c91f377b5cc35c986915a9d9d87c5b95c17e7bd59e3f691219764ed41bd1384ca188cca7ec9cc3d552106b1f568cc303b488f8de763315b93cc9853d0faae315b2d63b1985624e34dc5fa93ae8d8f670509e2a7ab41f85b41625080c5a032799f060f33b84fc38d1f763d5d29340e8bdf5aacf718bf565924fbc7b1fca78931c29a38a546f4dd056224dfed5dc7f77ca656e28ec7625d958c5deac34fcdcb9fb80dd6c2f91789f025fd338414779e40957887d75bb97cfa4d24afa15618dd50da8ff6d40cd1eb3cfc4a27a7708b296a28d7a33bdb6212aab3dc4dcec4cfd008075b270bc7c84ae6df32619a905f2173a34acbd182903b76c0bd28a39d565fb978cbbf6730160b5d0d371ad471307689e3b40fb2994324d242c648c97248f361a9ad2ea6fbf3541d2053352b9737d7232352b4a6c45ad4f0d09ae86da8470c59983b74babb02e6cbfe4d84cb75f7214928d9ff9160bfe4514280aafb138a5b0cb2b84e5c2f614eeef2901ae64e9a387520632d9a65e571e2b59458f86e5ccb04fd8522707c45a70dd8de6f1ac5564789ad6d4391cb717987e66c0075f5e828a87a4a507cbb9ce9a2cf50ed58983bbea96a74ccd26aad40c8370b5308d751db1a6f20f1d8aeb1d0d6ea72a3a00ea004c537f4535e97d9c29bcc05148b1e0287b5c0c16703b0875b4681ada704d65514fecb581e8b2e4cb1195c769b28b80d94e03a6bc071817c6c80cfd3ad1757edc89ecb5914da81d4d6e6cd9e339ddfee1e70a50d0b015cabb301dcc4b65170075182ebce989859956cfd6903bc3341edb991125e1b90551778dc9c36601ad9278ae9604a4c622960839768b123d5063cb30745f11c4289a715b0a2e8e2761b106dee1e45742825a2d6a29472c742a2a55212b13200d2db03a2900ea36e38b81d6d352ca8df4ac60668393951688753426b2e325fad558d83aeeda2708ea084d3d33959d0e0be5156e52e492914adad7ac617e3f3f6d54239146003c0c741cd772425c096a068e76af2f1771b007ddc290ae828eaba6f81184a8e6e4b6a47d76613b0a1a33365436af70b1b005ddf250ae8184a407c2f73d5f79bc1d68b58d7377458f8d2c05251ef150a0b2b15f656e104680344fea3201e4b09917f9f1bc2e3defa12e1182c153390d5ba107b7b855d81fffe384a94ed6499a6ec6d83ac31170bc78d0da8ae0665dbf19972db702f049c1da43c1136b5cc5a02efea09d46e1b080e6e8d33453872f808527413201be06d021ed613a9073d548d1adde9c5dd5fca06508f83d6d926ea418f7922fbadf12dcc9cee3c5e2342b201185f83a0809d945937b477be63a965e5d946509e9d4c3fe8c19b12d345d03637349e6e1685760ab5b5cd1063daf53e774f749d74add3862bb7c4e3fa2b00772a25b8f6209bda3ab4c627de2958a7d10fe4bab378aa8418bbfb019380959d4eeddb982bfa00bce8df8bb9d3f56d40543d368ae80c6a0763a16357d358f2df29b001e0e6161c608b663ee1fe29f5a94fe10c461d9f6cda81b9ddfe6a71b54e36513c934f873a8f18a7f99970f2684eca2ea09c8455414ed2f33172028fa5e7a438832d27a986794e489f4e4e80f99b39816a899ca49b7b3981da38392995273981bc103981daf83949cd1bcb0934592a2770e75fa7333e3d2627664c2c276e8f39473bca91a3f55be72083dd3971a652e420830439091c6d39290d5fe5a063cd39609a778e664e434ed203b03971a7f8e6c49d949983342ba2ab35f4ab2cf20639b7cefaff7c21451e5f48713687c03fd5c87fdc36ce39d46d1c6ed9eeba195eefc4df0f678cd3d2f0e9d0274607ef574f555b46a74d2b4f6ba77d32114ca5c53307ccb9da6c12ce7c2b711e04709e6b12ceb156e23c1be03ccf249c0556e27c1ee03c3f133857a140a1facbd844369e0e675b2a9cdd01ce2d26e11c6725ce5b5914e70526e12cb012e76680f34293704eb012e71700e74526e11c6f25cee700ce8b4dc239c64a9c8b01ce4b4cc239d64a9c1b01ce4b4dc2996f25ce5500e765d4d36be235e3bd197d1c1dca4e54283f016dcecb29517693284ba4ffc8bf0190abbabbb94c1e1dc86654207301c82ba867682a0f69b2de6afe7c8d78d6be4ee62e20b35f4909b61f83eeebe4876f6c863b14c0bdaa314b52288e97a564285b50a1dc09140057532f0498223cf285c28bc41f27c335940a570f6079d750e2ea202d6fbccffedcb119fe1019bcde54f0ee07f0aecd04bc899987479651df04f0aea384d7234193c75be6917a85c860fe0a605e6f12cc0916c2fc1780798349300b2c84f9238079a3493009bb8964307f06306f320966be8530bf01306f360926e1182419ccef00cc5b4c8249e8c42083f9398079ab49306dec107e0960de6612cc8916c2fc378079bb4930b7b310e66f00e61d8debf57145b9dfa3222c31f3224428cf055e9f3b29510e97282b9c872ac45137a534e8c730099177a1b2dee301f2bba8779b5a26768d2f95739c5731cdc64916b879db820c7f77636678ef071208adef582a941702ebbb8712e5d0980c5f2c84cd948eb732277b9709eb5c270622ea59bc6f1b90c226aba8aa00ec7b3361b7c9d5fa36a21c048a80fb28516eab290292fd1e1529da0154688b8195dedfb8566a7b73ea7fc04a1fa0463945ac86ab926b80f8774dd4d7b1f96a21b532ca5d6f665f9ddf14a07c30131b558f71fe57aa2c219a4afcaacd2345c703840f6502e184ad0ee12300e1c3f41f1971676fa8e314a182fbf92e9b67693c04203e62d2b215d2c9ad6438f704f5f5a326e1249d8d4986f35080f331937092ce1526c37909c0f9b8493849272890e17c13e07c22138ee3e45c1f6328472ec99c1fdf01984f9a0493707c880ce6b300e65326c1b4d12df71880f9b4394b02083339d992802701ca67a8b7955c262d6eeb995e3814e07bd69c29d5368e53ee01503e970994704dc55ca75c9c25f77159e9bcb43e135d48329487b228cae7e92b1b385cb68cad11e8a68a5d5ed64851339d23dfd0266697450ba65fb703305fc8842fbd4eec6c55db30bcabb6c05147dd48503e65e54386f66f80f64553d192d6eb64682f05685fca447b33d945a8845513d912d42900e6cb26c1249cdc4506736700f3159360124ed52683b93d80f9aa493009171190c184bb2bbf66124cc2e52d6430270398af9b04d3c63d102601986f980493d0154706733880f9a64930095d716430b301ccb74c8249b8bc850c662e80f9b64930097b406430470098ef50c2cc66b1aeb96013b309eb77b289d9eb80bbeeddc65ca3e11fb9242c45c9c62d47035b7dcf249884f53b19cc0900e6fb9918d2e08ee475627506df783e4393b8c8f06d0bf07d4089af17c0173bdf9d0b8bee6764f318d12b00e887995c35c43f53512a3c990bc4b6f1354258a9b0d1e4fd9f84e52999f7f34150397d9489b99cdc86b7aeb99cc701abfd381308c76f7508a702849f98dd0225742493b540cf0099fcd34c2f7249befc246cdcd36d3905d07e96a989dcd1b178389c4c3e0a4f06f15890fd3f37673d9b8d3bd24c0328bfc8549b34d1179c6c5e64b01300faa5497b144fb4d271f70bc0f9954938c75989f31a80f36b937092ee9a4486f30c80f31b93704eb012e74700e7b726e11c6f25ce0701ceef4cc249fa4d36329cf301ceef4dc249fa1131329c07009c3f988493f4137764384b00ce1fa91bf2c97d98b650a8c63f8d4bd8902fa402ba1d00fa532636871eeb738564c04147b697471d80f73325bc6d58b2dba478976711ce55fa910aeaabc077f48b8950091d2064505f0150ff612254c2f99e64504b01d47f9a0895b0862783ba1440fdd544a8847399c8a02e0150ff652254c279226450770350ff6d2254c2917732a8f300d4df28a18e65b1831ede41b9692cfac1783722decfcfcf67dc777f8008628d930c7c8a047faa48b46895f79fd0b2275225c27f5934117edf1a128130279025c2409008ff316769b88ddf9d290485ca7f29518e60de1954d560aa4474d56872932aa6b01ad131de406bbfdf4488a0df02a0ff61eee25c1ba757bc0d8a863fcdd9df9e748337b2c2e10800f32f9360daf851aa5300ccff9904d3c68f521d0c60fe6d124c1ba7001d0660b22606c1b4f1a354d50066c42498367e946a7f0033cb249836ee5cbf04c06c62124c1b3f4ab53b80d9d42498367e94ea5400b39949306ddceced3400b33925cc6c167669848d5f4d9a02faee2d28f1b69378dd7df32a442fde95cd179a91816b46058e01bb6c49092ed8b79308bb92649bb43e006cb01525ca70cb736cdcdc6d2f80b635255ab81c629ef0c8aff179eca73bafd588106d5e0ed11f64fb3699b6d5e4bf9744d86f279b63f536b0d5b6e61603848d28b262e07180b61d25daf6716bf95a3a74ada9d065810cdf3e13f53cd698b77f07a86d00ca0e9428d5761b056c6bda6e634f80afa319558f3b665f2d2cd61d8d27b5ccafa9d07e0bcac74e9468837f49c9c67d7566029c9d4dc2996f25ce0300ce2e26e11c6b25ce5300ceae26e12cb012e71300673793708eb312e7f70067774a9c0359ec060633d87ac63d49f54cad795ae0bccef781aa11ab9f8a99fb11d48accf4e2c9be65d31b34a57a64c26693dfd4c0c6edb0ff0970f63409e7382b71de0470f6320967819538cf06387b9b84738295383f0138b73109e7782b713e0170f6310927e94c3a329cbb019c7d4dc239d64a9ceb01ce6d4dc2996f25ce5280b35f630e1a7b333ae1a0315913fe67d04fcaced4c8e622d1dfa977244f715e2f654be42e11a562978832ab47365702dbecdf98b609c591ae6c269bb3b40bb0cd01999800a6f61577f72d59219c20ea21dbf7c6dd0fd8e5404a981d00ccade5abb33300bc4194f07839bfc4b95dcef86a4dff2ee285c2354708906ce4bc3b00383813836ea9ad6d236c0c91a1bd16a01d62ce34d9f156ae6deb08aa9ca126c1b4716d5b270033c7249836ae6d6b0f600e3309a68d6bdb3a0098c34d8269e3dab6b600e6089360dad8e76907608e3409a68d6bdb5a0198a34c8269e3dab6d600e6689360dab8b6ad3380996b124c1bd7b6750130f332e1da989079d706d99ccd075814de18731660113684c816605d05ec303f1376b85de6ed90cc8df116b0c3b194f0f8099fa0c5a7619361225bddd30d602a3027bb12561b64d9f551905dc7d1d7c1ab355f355ae4302961254c0d1df14dd1f9a440fb86bdda00bb1c6feeaa33c2863759c9b818d8e984c65c3ae56d2bdae8aa1803ac74a2196b7f74cb4e09d192554c37002bddcea4f9eba4fb759095a76500e7f626e1ccb712e77100e70e26e11c6b25ce7b00ce4926e12cb012e79700e78e99f00625376728df4ad7daed00e6649360dae85a7b11c0dcc92498364e2e3815c0dcd92498364e2eb80ec09c62124c1b27171c05604e3509a68d930b8e0630a79904d3c61efb1100e6749360da38b9e04800738649306d9c5c70188039d32498364e2e381cc09c65528792744e3059877201c039db249ca4cd23329c1b01ce3926e1245d0d4986730bc0b98b49384917e693e17c09e0dc9512676789739cf3bf52065e2c363db17d71d4e52c8a706e26768b493c2e348df9f784cbd0f7ad865241fe10d8e93c7356ed126679b255bb1f0394f32951f665deefb395c99d8d1630b59f118e96d046c9c01e0cc02ea0049bed035b216687d40931d1f921f11afa36f699d600bc0b33b1da3c8a9733e0a5ecd665af6702a0bb35e6dc908c7d48976c3a587380b29012657f81728ef350a100c637755e275f8f66ff656c8d00cebf9751e2fcedde9fe91ccb1cb1849f7a206ba7b6028dac45e6ec8c6063393a11d86a1125caae0950aa9892ceac2b891061fc02605c9c89da3e76d262b21fc5211c0821fb28cefe00ef127317fddbf825828f4159ba7b260a00acde8f160084e5285901301a58e81e9418f9679b164a6f93da59668eb04c9eededabcb3b02fbdbb371eb72575405752594476583e7011bdc2b135939af213b978a1e91bb43b1ed9f75781858e452eae1380e6cba08b88cb99b45f1470f14db97b9380bc55dbe9e837095d1622a983b00987b9bb3ca88307b93752b2f05d97b9f4ca0cc8be34db2db4bff2ab0ca7d3331d051b0d50d74540184cb32e138e6d63843b41ceb8512739d574a4479b9801d2086366a9c7bbcd95ecd6cdef671470076b9398bb46c9cd9b910a02ccec432ea025f15647333e820006f45e3daa1ed0df3dea0e62ec9e45850ad6755f034e1aa581b03d8f6a18bdb00ded24ccc0249fee32184d64ab627f60f20e397998493f4fb416438af0238579a8493f4eb56643837019cab4cc239c14a9cef019cab4dc249bab51919ce7b01ce729370927eb7920ce76c80733f9370927e68910c670dc0b9c6249ca44b0dc87016039c159438d5e793c7b2ade9f3c9bb027c95264dde26fdfe0a19ce7d412f68ad493849570593e13c06e0ac3209e7582b71de0870569b84b3c04a9cef029cfb53e26c290494c9cf87b88b0becf3103507554d0d25aea12cd697e99d41e4aec6a8147ff3e18c7a21728600cca355c4dcf9c5e4530ae751c11e0f60d752c2ee2260f3c7ddc907bc610467bc45fd9df6596c2f00b1ce9c252e84cd7432947781b2b23e1383bd7ca47216e3a38f7c8c729518eeadb17a4c7203b0c675e64cb8b67153a9dd81351e408992efefbb50542aa54c2d09c0e618d55a98ad5b029b5c6fea9c6052c706d99ce03f01da0da6a225ad8cc8d05e04d01e9889bd3e929bdd31d6ca6dd05e02300f3209a68d93653e0030379a04d3c66dd05e00300f3609a68ddba0bd08601e62124c1bb7417b16c03cd42498366e83f63c80799849306d5c8afa248079b849306ddc06ed2900f3089360dad867ff10c03cd22498366e04fd2980791425ccc12cdc52e90ced92f40dd5ace35b81a7e968b3d7a413763ec9d6a4d702bcc79853284cb4b2273f0ac03cd6249836f6e4f300cce34c8269634f7e048079bc49306decc98f04304f3009a68d3df94100e68926c1b4b1273f1cc0dc64124c1b7bf20300cc934c8269634f7e208079b249306decc98f01304fa11e7d4f3cad66bc58314c98c59b5181fc06803c351343c4b19dcb640689095b9c6443c49703b4a7d16f1fe945ebce50e2f0d6b25dc4e4c46a166fe506a1ed92addbe03c15e0d3cdd961c1c6ded13880f20c9356144da4f48d9259e61090f5cf3409e7382b71de05acf32c9370927e5c940ce76500e7d926e19c6025ce6f01ce734cc239de4a9c6f009c9b4dc249ba2f2c19ce6500e7b926e1241df524c37914c0799e493849bf264c86b312e03c9f12273f51dbeddad795ec00306d31c9ea483dee6456f713c079814938c75989f36a80f3429370165889f32480f32293704eb012e7fb00e7c526e11c6f25cefb00ce4b4cc239c64a9cf300ce4b4dc2493a2b9e0ce73a80f3329370927e6b9d0ce70a80f3724a9c7d9877c353cea19ef1c986fe4fdef9f7fd201cb8205b86bd33700f5f9189d14b85b55c3b7a69ef8eb16701905752821ce203b982c58e51263f9a49889aac0bfa19407d5526765f98c8b6b6adf61f07a5e9d599186b8f6e1f5d2cf6a529653325bcb2adac20580facf31a7336b6b0716ee75c80f25a73370d209c1d4f5686de030a80eb28d1aaef188cf1d96a064a4f32783301bcebcd5e06433871966c19cc5a90ed6f68cc12d4fb8127c2c934641f78ba16a0bc31139d50f881275d696977b3e93590f16fcac43c3ad56caa115dcdcaadbe697f32b0d79bcd9d034a58aa92a1bd0ca0bd8512ed209fed5630b863dd62e6eeadb8416c55e9faaccad82cf972c6bed43e860af33280f9d64c5bb01e6e91286ff96cd195425c256d6536800aed0b00ed6de64cb2b571c57c11a8c86ecf440b561506bc242df56d22b8f57955c7014bbd83126f3f1fde6aa6dbab76eb72b0dc0ce0de9989362dd63d88dde49f706085cc5667019c77998493749c8a6e5f5b80f36e9370928ea292e13c1de0bcc7249ca4137ac8703e0370de6b124ed2e96664387f0238ef33698c9f749711b231fe7e00e7fd26e11c6725cedb5914e70326e124fd400a19ce0b01ce074dc239c14a9c5f019c0f998473bc95385f06381f360927e9a7cfc870ee01703e62124ed29dc0c9701e02703e6a124ed22fc991e15c03703ed69823a4de8c4e381182cc9bf42368733e4e89527d71734c634c85207324e7007c4f64621e090f78a5b043257bad7cc43e7811908d9f6cfcad835436b62f13cf0756f89429206df4ad4f00209f360524e1683b19c80301c8674c0149e86223035907403e6b0a48c2c9b46420370190cf990292701a0219c81300c8e74d0149d88b2103791a00f98229206decc39c0440be680a48c2693164203703902f9902927053543290e700902f9bb308c6c63db9a70194af50a2ecc182cc7a1b67e547219a0298af9a04d3c68f423403305f3309a68ddb9e660198af9b04d3c685834d00cc374c82696305c400cc374d8269e347212200e65b26c1b4f1a3107fb028ccb74d8269e34721fe0230df3109a68d1f856801b2f9bb26c1b471b14a4b00f33d4a98c359eccab512e76685676975d025d8848501d912ec7700f2f7a9877567881d41b88a73a40d973b2f173b47fe1a193cb29596ed4149fa8139ebd7099b4b64ebd7af0676f82125cabeccbf0348f26b29099b4e646b29eb818d7e440976604c99ea6e0e10ddfe870be41360e2575d36b64f2b81f57e9cc93deb5ca07cc9352f53a76b9dcbf67e28ea2380f51373d601dbd8e81f058a814fcd5dad4e8896ac84bd1858e96799ccfce58e124b44abb59ef93757cbd8fe0a642d82af00d6cf3331e170dc56345bf33690ddbfc844b734b961b93156f6f16b80257e69124c1bfbf8f500e65726c1b47194733580f9b549306d1ce5dc0fc0fcc62498368e72ae0430bf3509a68da39cab00ccef4c8269e328e70a00f37b9360da38ca590260fe60124c1bbd487b03983f9a04d34687c73e00e64f266d80425a05916d80520470fe6c12ce7c2b711e0270fe6212ceb156e2bc00e0fc8749380bacc4f91ac0f9cf4c2c95e6b3dfd7014f6646368f26c3378745f1fd6acea27d1b5757be012cf15f9428bb32feadd662f901282e6aadf3f86a56234684cad981629a42b938b3cf229b018bfc372546b54d29df1dde1d955ce6a85beba8532278f0f91f5318df11968f04153b02785959cad482ff3a0be12e05707fa3843b9ec57e10aa4e08abf1cd47aa67a5c2561708e03522905251b26eddbbca5f018a8bdfcd29796d5cd8f50b40f91f4a94ed456cca4441502d1eab73ce5d0ef39c57ed43d7131408ffcdc4587b2a5f33cab7f2db063d8155fe612a5ad2a61619da2b81d5fe49ddd48a5776aa98925641dc714982f17360a17f5162ccd6600c365f99705c896cbe7235c0fb3f730b00c21a9fac00781714007f53a2ed2fd0ce16f659c8f3a2f3bf5c7e2c928b527344d78804e0765ce2fced8a9fe91c795ba1d4c28e426b00983535ba68209c594256345c048a8608255e558161b345a7890281b80fb59aaa02cb0718b3283186fb32978ddfe2bc0fa06d4289560df041378cf26945bd5c76bb5dfa82d2b42925ccbe1a98892b2f7bc1ce05609b5182555fdd1ecbb6b6af6e5f0c1036a744186ce1828d531c1700942d28510e08807211ab1642ea1cf5aa991a17a8a5adf1f7a3aaf1c7826aa92525e25eccff11b362d1bfdada9683bd0c80b6a2043ac207749df36089b6411facf94f089dacf97f3780de9a127ad09de7b7a3c449b6f3fc3080b38d4938275a89f37b508db5350927e986306438af0038db9984b3c04a9c27029ced4dc239c14a9cef009c1d4cc239de4a9c77039c1d4dc2493acd9c0ce77480b3934938c75a89732dc0d9d9249cf956e25c0e7076c984f7294ffc768f7caada22e6baf8ec75e0ad0608bb5222545377b88069c205c25fe7f39ff9641e1b7774ea04d075a344378c797bee55be997a858c4f24afdcea67ec9d0fba99dd33e1294d6ec69e8d9ff4b913a0ec418992cf269e21d423cde4641bb6740599bc6763da9cd7d369e39af945c0e67a65aab62e91554d195b2f6bea0c8c15fd4885f051608dbd2911760508cb1a766254b76d1f727b1a60dc861263ecc430fdf656b3e40b19db89690c15da7e006d9fcca20d329fd9c6e6cf7f00dabea6a2256d0e91a13d17a0dd36135553fe56378d612440d88f1261f493b98db00e946c447208c0974d894f4df74a6e1648be95f340ae0730fb9b04d3c666fb0d00e6009360dab8d5d50500e6409360dab8d5d57500e6209360dab8d5d5f900e6609360dab8d5d51600738849306d9c21773a8039d42498366e75751e809963124c1b37fbbd11c01c66124c1b37fbbd13c01c4e09339b855df166e3c77b6603effb88c61cc8f0fa3809bb9764bbcddf0b508ea444d9dc39291481d63b0f104e2f2073ac7506997a54267c96a92d1024ecfdd0edc100ac707426c682c6345440a56208c35dc862fb066c8f010bcd35d7426ddc24e02160a1799468832f0b20c44936db6d30c039c6249ca45fe324c37907c8f8f926e12cb012e72500e75893704eb012e7d70067814938c75b89f37580739c493849b7ff21c3b917c039de249c63adc47924c039c1249ca46e39329c1500e7444a9cea6b70f9be86bdcdf3386a01bced28e1a93d14f814c3e98c2f05a8660b5999ec5eba3b27940981c54200dc55b996d9bce6621840bc7d26b23b96d9633f3741383e44867306e817ed60124ed2e136329ce500e7249370922ef923c37922c0b9a3493849579f93e17c04e09c6c124ed2bd11c8707e0d70ee6452cb7322a54f9eace5f93ba8d9773609e7382b71de02704e310927e9a77ac8709e03704e3509e7042b717e06704e3309e7782b713e03704e370927e947f8c87016029c334cc249fad538329c07029c334dc2493a759b0c6719c0398b12a77fef846ae1692a7578f0f9472a9ed185add8acba29ac46b8f43630d2759943b28880ff001afab329817763f1a72a7a4b563290643b27e400cb9d630a481bb7a0e80340ee620a481bbf7b780200b9ab29200997c090811c0b40ce35052461ed4e06f21f00e43c5340122e17240379160039df14908453b6c940b601cd9f059420f398b7bd598fcee9c4770399c6f86e5ed5e23d77e3950cb53e8752e1ff00e05f48895f2d9449d66b4f38bd81cc673f15c0dccd249884ab8ec8604e07300b4d8269e368520180b9c82498841d4d3298e301cc2293601236edc9606e07602e3609266187930ce6f600e61293601236f1c960ee0060ee6e124cc28e2719cc4900e61e26c124ec3391c1dc11c0dcd3249884bb2891c19c0c60ee450913ff02e14ce777b9c058eac4b74a08b6ff0b84fbb228d8a59460fb08b0739d074ac48c64b83140a37d7f986cbb801600ebde945883ed7b6ce39e5fbb82acbf0f25ca70fb76dab806fe6660a5fb66a28ac2fca35e2b9d60e5ae897d819d2e3309a68dbb266e0b602e3709a68d25e8360066b149306ddc35b10f80b9c2249836ee9ad803c02c3109a68dbb26f602304b4d8269e3ae895d01cc329360dab86b62370073a549306ddc35311bc05c65124c1b774dec0f60aea684d95c08a8138bb0eb9d47ed9b03c27d250a553925aa6c16768349c2a61099c7a80258e27e9478bbb0a887739df060f22d025608cf668676a323db5ab21cd8e89ac674bb7977e924ece790a1bc09d8630525cafea1b3fb18ca5e3959867f1f00ae341db08d25ea5300f05ad301137638c9003f070057990e98b0134a06f81a00b8da74c036eeea7d3d00bc3f2560b52c110e2b6363a1e483c964380783e6578d39cd2fc25e3e59f3eb616099b59428c3edab6ce3d70a1702b47599b0d2e41c2836ba9cf34186afa744a9a6e5a432364fe89722b3d13301d875a682b57153f59301d8034c054b581490819d05c0ae37152c6137960cec44007683a960091bff64600b00d8034d056b63036b00007b90a96009674591813d1a80dd682a58c2b97b64600f07600f3615ac8d334cf701600f31152ce1e80119d8bd01d84333ed1fd0afbb2f12c386bca3bb5288aba46dc90ea042fb34f00f1c4689b6a3443b4e8ec45638243236064b6699c700cb3cdc1cf78a8d537d1601944764c23d9dfc82701b777e580e32f69126e124fd4e0819ce6301cea34cc249fa151b329c77009c479b8493f4836a64383f05388fa1c49968f9addfcb6fe33cfdf700cc634d8269e3d4f2d701cce34c8269e3d4f2b704cc16cd7cc267c6089f26ca345eaa95b0e8779046b359ac4cf45e388812e77caee83ed6b1e50e8ea5cebf6029b08ff34f773d223e763583ad67d5e22a97572a64573a77b966b52c8fef1f763c378836d22072441b778ac3bcce79867fca9a87be812d62ee779e1638bfd5b2f47a8124477c6e78a1738d4f322e1321ac753459cd6a448cbddf81ca89b4149cca9cee874b8003cc91baae63eeee697364ebbadc8973b1d0a4c679a6a908c7ad297222edc0999a4c3a4774bb6b8556cd84c4b522deea6d4e83879813e173969738eff214287362e56ac3f52975fe2a14722ba5b653442aaa6bb5ced5f6c2ceca44988a6e91b4d079ce13dc3c22220c45639e2059ec482f16c7a2069d73f9feb491f1421fee3e18dde038182df795ab9467ea7a6299dc1ee24b3b81277a445f0a54a4cd9213c5684e43faac14ebf0cb84d43909639a387e78ae681b275572f9e6d35b75fc4f84e99e953b9cc7774c1a6c2fb1469b78c85944f54ea20c69bc852f64eef7f4ca84ea1b4259786b51324279e522dcdc11665a77fae27e92d7ba47a66addc1353a99d2ba5d69ae97d9277b5612b1d3a7833fced1a7aa659daa6cc1cdebab19df853f3189bea205814be3b5e92a11d77221b592a91f5e6bbaff7a44787b64b1f3ae5bbef01aba46d4cc35eca8ca2cd6ecff01d46726be81320400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/11a7cf67459b2db47b9d573b46c07df3.asset.meta b/Assets/SerializedUdonPrograms/11a7cf67459b2db47b9d573b46c07df3.asset.meta new file mode 100644 index 0000000..32a8fc5 --- /dev/null +++ b/Assets/SerializedUdonPrograms/11a7cf67459b2db47b9d573b46c07df3.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ccbadb03f713f8d4988f6c2739fe9c83 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/11be2a0f1f5d7dd40b1e776c7a281df0.asset b/Assets/SerializedUdonPrograms/11be2a0f1f5d7dd40b1e776c7a281df0.asset index 6a3c664..3c8d0a1 100644 --- a/Assets/SerializedUdonPrograms/11be2a0f1f5d7dd40b1e776c7a281df0.asset +++ b/Assets/SerializedUdonPrograms/11be2a0f1f5d7dd40b1e776c7a281df0.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5dcb5b1bc9116f0142086303e66dfc00bf90cd4302bf5fd8186c2f6baf710c789d7837181b61b31186057663c7bbd9bc1f9bc7f7e596434e39e7945bbe2fa77c39e690638e39e46fc82587a4aaa60795465d9246520b0d59e943ad99eeaeaefa5575554d4f6ba8892b788586e0e3917aa826d5889a574b6a4dbd826f9350aec2db3972cf3f501b50be80cf45a81b527d797ae26b20d40d9fd370b4a9b6a0e727ea39942b543fab92f07d1afa26e108cf2ec35f125a85eaa0d3bc9a5233eabeea0a75e421f1883a6dea7321942bd4009f37d51ba84d125338489caabae063166a36a96e159876db3d511f9258ab50f71cfa6ca814d07c46141bda238abe28a768d4659d2efbe0af1efe46d931d6bde36957abdb8de9e31af88b227dfd9dd3deabcb565df6ebb6f87d8f2ef7b1734dba6c66e7fa75d9a2cf85e1ef9f058cdde019fba8e6fb0c3b069948bd4033f4c0d3ef986e7f961d63b9df43ef5c26bd9a83fab89ed1c3efe73dfde34c4677cc21cf9871761ecb015d7f811df3311b3cfdda74fb8b9ef3edec18eb2f690c7ec9fa61799cf118d163adebe313baef657ddcc1cebb7db1fe8a470f2719cd16768ecb773553bedacff471a707c316ddfe9aa7beddc383b7be4ba56dcf54dfadd276c8eb7b3ced62ba7edc837fd4537fd1c1b7f66ffafc01c69fcb873b1e96a774bfeb02dd532a53afaebe4eb3366e69d2b51f9b1b56993637ece8a4eeef1e3a6ebf41ddfe06e3c93d8f6542d74fb0632c7b597b5e9fc766d12d89f3caedeb1e0bb2847f5725b2fc4bd0773e3ebce378751f2d50f751769ee3753313affac71ecca3ac6f5897232a339e8ce8bebff5b473792f249e1cd6a5ebef78ec38a4d273c83d7744a5fd44ced8110e859c589784d4605dc569609c6585a6166ecffc490592aec70f7c0dd0b05b10bed7818021b2cf53deb005516bcc18d97b424d8cef49fa5c84162b4474327b883f650d81cca5e09d6469c9269cbf43590d26262b5033a2ee4189bd9e824a9fc03b93ca23183605a94d52cdc1e73ad17b0a6c67b7cc2712a630de3e0f81a69361adc21917d075384e1187b3f4f929719a24eea7e1dc16e57baf20e3bb09e56b1a2d5bf60df86e1a734e4366e6d19c6849e79d74ce55d3144883dcc73197fa4a233ba2114a6327f534ac8b5376fb659626bec2d07132e838a7358d51822c94716e4cc5c99f3fcc42d0bf8cd9129aeddbc1fb3c04af5cb298914175f79204690dfff12f337ffecdeffffd9f70a66867549c52f9837944cb052cd28b853ab328e416211cae4b20a35ef84326f8313d0fcd56107ea7dd0ab5f3af807a8a4c990a0861389f832fafe12f058da7a07c06552fc0d3e1757b966612482642e06687ce7c0c4af0d698e06da834bcf9fd492e781bb6e54ac38b2f33825101c17c3c4808d61a104c44741e97a575e22beae10b5b0bd4eb4cfaa18c6fc1aa7ee6e19c9356dda2da158ac50e4a23da6eb708a75c2d73eb0d1745863d009975d6443ac34589f2f025e9326cd225a2bdd7c4aa578d4db21aeb4d6a6cdc992052dc244377d5e541a0579c64cd396380df291631a1474b6a7315440febd688ca22b4f58f205e970d7add9419be5682af3b4bb8fc2c4810369820a415c8f91d0aa3d2f26d6e10f717ec33da08c39e9c9152e24142316af20f388ddb0db3c3e8ea9b651fd168228e7aeb30c4b7ffc22b8b785426be478a529d8578b61c01aa4922dc5522e1bd121cdd0638fe6ac23a071cfb24ae7b4ae4ba59227ca044c22d12e1de1209b79a3c03815fc90c700666dd47ca5903f0ef150e16ec150e2973f6976f7cc923ec973cc2e13278843649e7b8d457726ad92eb1de67603de493f50e89f57e13ebe89d9ea8b72a01d85f5297d56d20fe3968bccf97409d264ba6995ec918c72da9b81877745b8e344471722cd9d1ac90d1e8e61edd3a80d708bc2261f3e438aecc21b39041a409d22559d9098395d5f8b4b26e89f84903f15a9fc47b24131e3099304e9aab84488a50b906b0a3417faec6a11c85120d7c4c9bf55b32f0ab2ace7a8cfb32f603127731137718a51d6e9e686e1c2e901f3fa3f64aa39e328deadccdf043ffa044ffb4c9c3fb207c48223c5822e1c326c298a60c29c3aa44c45f9a7244e27ad804374ee1dbf04ee8b71f31fa4c23a15bc63b59d9572d5ecaad32e57e49867889c81f95584e94caf231c9ad8c1adc8af2e9568e4b788c9588c70903e138a58d955d29752ead908effd087fb558e980036c62bbc936b5e0ccdcd8314ab4e4aaa3957a26a0624533d5faaa9c624962f94c8f22989f0c512099f96085f2a91f0a044f872898487247770a50cee6058328daba59ac68844f95aa994e31220e365002421a9f17a896a1c9508df5086607a59b9fb2166d594ba0b3e6f11bc4852cd93d74cd1d2f28af68d0bf09e866f4ef715b54467b84fe219b4b72e7351cf8f44639244132689d0d79817c571497c4e394be78e34282972baa5cf7a79e68b68deba47200d62e04792339224374d924c2925a2ebf0bf06b16c0164fc183a2c6a6dbdc9a315fbfa3a2b49396992f28447ca09401c37f3bed132bed03abaa792a4872df5328bd7f47abb1f3ecf497c4e99f89cf0f0991ed38f2ed2bde4f3e5d2c37949be5b26f92e7ae4e3b6efd509da0be619b9a49367529a9a1f692e48d2dc2e5e5bf7c8b36d82577849e8eea4b62e4af2dd31c977cd87b666f50c2a4cb672fbbc4b925cef98e4ba5e90de268087251d9bd6caa2b7e23cc86549b669936c313132cd6d5fa1708fe75eb764cfa574deef87db2b12b7ef9ab81dcf61610e9fb7c907ac42977c91b3d098c37bf991ecaa24d95d9364b7f34ae658d934e926b73f97e5cc358f8af712d72449ef15e22538f6a579895c5a2cc64b8c4b72bd67926bb202b699c6a75c567a5d92f1be49c6c715997fa5e789c5a271434263c684c6988f787727af2597478209498207c5d96c61b1ad388f53ac8c372519bf6692f16e41d1fb0ead812d529b8deddc6b06bea7b3e7ca6462117887e8b6dc2da2b301fd1f90f7c2a34d15a7bbc60955f86f06908355982d38f21c8cfc6c7b752e3705dc1f25fd8260597957fe8add4c9e4f0a074decbf4cbf387037289ba4cb2f93bc713ea225726901d2748779b7498a2bd2dbb7246be274a37bb0486bcacf05ee12abaf35db90ffadb40e81fbf4b35a7dd76581ba2f4293adfcf4f36d35182602ee0eeb32fc68c6591142e7b9a19ccb3a7c45c23589364abc2d82d34ce02ca8047dbe4f5d91d42d8a4cd82d0870fda13e0dd7239b70350a700501a40f984dbd5f0990460308d23f08a448d843dc7be155ae5f45e543560e44cd14fa5f037b6be4d59220842730d1fea16ae3fc310f2cb12ce71c13a7584cb4ab58015e2c9d2f99f39c04e64b5fff3f4f651298ca7c03411875233f798b2736bd45a7d69d93b9bea20c5abe3618f58e5fca0fa1a219fe24528870c5f89493ccf17eb0b350a697df70b25883f2ac2d284f30283fb409653bf335cff5de8b359ad6c832d6ac93c7c2e6c1b3c87d0cc66fda84314cd4d019a7b223760080aa65402d5462ea3ed761c4bb8e95e9052d4e5d6b50b631289fda84723f9bbaab7af045ba3511f469dbcc205cb409619786f085184ae633d6af2c46e5a82d300f33309f5513981627b73530f732309f5762722776dde46e62102ed984b09106707fcb8e8ce2d16b7b9035db822cca204bda84ec80b6ba14344a6d5fafaed23d81dd15a58f3348976d42ea2fe1391740288f30285fd88472af8612075e26fb7469e3bd6c6bc0856d01a718702f77d206831f971b19942b36a1440952cad91384cb4f0e0ec10b29f50cb08f2a617b852d7b9d09a0ff3bc5a0fc56f58492b10042d9c3a04cd984323337bca727f4a63dc8da6c41d6c0205bdd49ebcbdc816431881cb205652b83f255f5f8c420a6d7fd0cca359b50f61ba04426b600910d387e573ff471b7253c350ce0759b00b7a8f44244fa27e2415f846861f07d5c3d31fb6c00a1ec65506ed884d2bd5535b62b6f551d64306eda84b14365aef1ace4d8af69d1335abbb2893320b7aa278a07716527c1a0fcc42694bd1e9bc4b47c19de490a35bb2b353acd40fdd426a8ee66a1ece5b257ba49f0c00b31f0be6d13bc832adfcd2ce99728166df2b82d583b19acaf2b117c24502b74b3d55af0196240bea916208318c58f3120bf533d513c888b6a3106e5db4a4059d8b54e1077387630283fb3096554f1fd6473ca79f88535c09a6c0156c700fbdc2660eec5a1bb4cb1bb2e0ef73018bf6b134677dbc9d8aedb76728841f885eda99bbeb510dca91b66807daf12beceb13777c38935c05a6d011661807ddf26606eee27c5d9a027d1ed0cc81f540b90414ca2f733207f582d405abcc56f0dc86e06e48faa05488bd722d680ec6240fed82690ee6664e9b22ef3d90356a7b7b580d3c7c0fc4935816931e85803f32803f3a7d504a6c5696e0dcc0106e6cfaa094c8bc1c71a98c30ccc9f57139816ef565b03738481f9a54d30fdad2b06f1c6ff2083f2179580b2b075c5206e213da076cdd3181278f586ffd1be3eaccd21e6f9756c4c58dd8c094b273161d3754c5839701e81d0aab17b0512bca79254bb448fb45a648f4388d3bf87c1c7b0fa79e04f6e9a885c6e6abf427842e6d9922a9bcecbf1fc0593a4f9e593eda7298756e2f46f7376b3fcbf56ce3f5da7179a69173da9631e34bfa49fb636038d9788297c85ff072baa6f766f850000 serializedProgramBytesString: - serializedSignature: a927ff695e4687722ed6e0ce371d93bdd810abfd11ad9c6cf6c064f76465bc54ec96440eebc457fe74da91103c640e5cc36271750287be9bfa0f6ac468a79a08 + serializedSignature: fe5b93c9aa101676ddc33e4dd1e9b24715d834de57afc429598242a8c9744ff21635492e19948feb8dada9793e2cf124d7312a631f9acfa8df361dca220b7d0e programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/1283bd55942bd05459e1751b1c37b944.asset b/Assets/SerializedUdonPrograms/1283bd55942bd05459e1751b1c37b944.asset new file mode 100644 index 0000000..52e49bc --- /dev/null +++ b/Assets/SerializedUdonPrograms/1283bd55942bd05459e1751b1c37b944.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 1283bd55942bd05459e1751b1c37b944 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e7aeb86b81164a689120254082165adc8a156f81424802a4044893a0a5ee2d7577776fa9bbbbbbbbbbfbafefceec4cf6b9bd79ee766ff31c33fcdff6d36e766ff79967bef3cc333e13cf63ce3fb15eceff66b3e96c14ebcd66b162b68aad74fe1ae55c5738ffba77eaf93456e15c973aff2f747eebc572d27cc9ffe9166bebfc7f827357c9aa9c2f57b322e75a2a7e9fc14a9cbf2738df963877fce912e7bf12e7ad582de7a3596c349bcaa6b036b1d66944cc161f55ca67311eaf583de7ff23d97ae7d712a1140f244ffcd4c6f9df0ce7974af1db0a4769f5de3cb640446b85f35b91f34d052b73642e1612eb6d2a64e20fe65e72e4b593bc7674feab2fffde46fe5d4ffe0ddfaf2daf3b067c7f27f05d7df0372774618aef3bbbd7d809ceb50e63f1abc13dfff61bf95e17575e7c590a59dde435575ebb4b99d704d0bfaebcf64813df54327a02594198d593d79de5b597d4f7da0cc3cf7319c5ce05f238cb13813e3b83b0eb83dff9b3de11e2aed2f1245f3a9ee4a663fc4c997e9fc8f7fbc86b3f79ed2b653befb4bc543ecb97d7ae69f42a70bf63839867b34e98db94cbfbfef23a405e074add4e91ba5e07eea3eaa2d254ea123b598671bde6b97a9fff7e83bc1f2caf437ce9b58b7cef46793f34a03e41ec4fe974aa0ce32670ef70acb528852c95eea7f9d2fd34f9ed892ec75a77f8e203ec4f2b779894777306f138dd178fd35d5d6ae726be975607257f5729e70c29f71670cfe59e1a326eb5e4779be5fd6e2cbd6fcb09f0db48574e3dc57a941b4e9d56eef33aca66942d8f48a3a74adb337d697ba6945b26e5aaf88f76ef638a730f20877fbfd927f72c9fdcb3a45ce5238606d4738cbc8e97d7dde57522abcec7b326c967e3e475820cf36c96e803ce96bf8ff5bedd56f9c7a0dc52a5d1245f5a7795e19e9346a6fa7eb2bcd60ff8be7a674a049da7ca6b8380613690d76911c26cc8842dd4fb8125dac2a83432f770f9d6ab023a3872ea6f94f7d3e57586bcce94fccff7d9c1f901ec209d2eb3a42e0ca481a34b8366f27eb6bcce49d485cdf5e9746bcde924ea065ce66de09e5fcf93cf6f07f75cd7696e380d1e9132f794d7bd7c3acfa3d399cd77bf6bdc08d84690ef52d9d702377e0dfbb8b21baa78ecedd36daaa777bdd1e05ba54790fcb048b2b8d0c7f842a983625be87bef0e70cfaf1778e189bf9d6f1b29dbea0c9ef36fef04f7fcf78501752d62c936cbe55c0cc2be58862dfd7f23959ec52c39efe9bee5d78bc0b38ba4bc77e477252cb91c53eff1b8dd05eef9ef8b03c66d89463f27dcc6c3537cbb9425fa9fc99e3dd47d413e93be3c76094bcc5b97c8df7b7adfc4cae4b352f7bea9d2651ff9cda580cba5ae7e4d5479ba5c5e57317d39bb027090f951346f65d81d16c9676529c22a96efa8bab38af7024f4ec3b65277e5c7f6658979c6ff2e7f5621af6be475bdbcaef3de9dbd493e5b2daf6ba56e97b104dfccaac0737ebd5cfe7e37b8e7ef557ab25b3f219f6df0e9aa4bcffd7c71d7f9805476b6d17db7ed7c79bfbfcbb6e93d3eb9fbb0d4767b802b67ae2abb0e74e534ab1552ce41ae9c3d551de810f7be99d2e760793d545e0f931caf6009be9c1d2e9f5f09ece60af08cbfab64e607d42d15c7235d3dabebf747c9ebd1f23a11c8ee28f5b8ca4babea3adf11e0377e3f01c417c62f952ec7c86be334f1c901eff1ebb111e29feab73af27abc8cdbd52cb1cdc3ef1d3b69d13e85ac1398d64e5bca7e0326db6ecdd7c9fb93409c7818d778acab6d49b66b63d782784bbb8a5d079e1d279f5def3d8ba97e9a53c0773c4ef7fa7e3f15c8d0fd7e1ad041f7bb6a1fdee7eade52d9d519beb81cead3f53a96e067d899c9718d5de70bfbfe10697996fcf6065f5ade20d3e58b14b2ced6a765ab3fe4fd39beb4547d442a2d6fd4a4e579f2b79b40baf595cf6ed6a4ef2d8083eaa7381fbc03d342fd7e0190abfbfd42a083eef78b12d3b2b5aac75d8ca425d41fa6e525c9718dddec0bfb81006929cb24a6fa8d74f55e553ee54bb90f06902bfdac28d330b99d7d721f0a2057f9c42b53c8bd1ad13793f094adabbe9acd2cd1d6f9bd63b7dbbe9242d6354c6beb6d54bfc1b52cd1d655bd41d9faad2cd9d665ff5cec362ffd050bfeec76966ceb77003b51e5c70de01d68abeaf71b815cddef37011d74bf2b9b95b6de76b87c7e0bd3db3ad41fdafae6e4b8c66ef785ad64a54acb5b7d9c15df3b59623be74e377ddafaeb3ffbb3d465e36daefc3d951d2a797749f90f837b7ebddb17eedd6eb8ed64ffd776ada49c46f2792ff7793b35c67007d3d6b7dacdf4bd77274bac4fddede3ef4b87d8bd9ebd55c7e52ef01b8cdb7d2cb14ea26ce07e9056f78167ba3a573aaef27b76bf8fdf3d52de23e09ebff720d0ff19f9ec01793dc6fbadb9ea7f53e9db08e8f190de5684ae20cd42d791549c1f4e13e7303ee90196e8931e70ed60fb54fdb38fcb7736a578e749797d4a5e659b24f6204b6cbf28fffab4bc7fc8f7bbf2b3aa1ece7d750ed043c9e6df3c1a20fe2a4d9f95f21f96df3e06ee9db8b5576dd7e7dc3077abe75edbffe093f3bcfcee119f9c47a41c558f7941ca2903726a83df5ff4c97dc98beffca1be6f82f82b8adf56c8b83dca127dcfa36e5c3bf8c76bca586a3b7d595e55f9b752ca7b8c25f64f4aa629fbd5d28595225e31653fb7817bfefbabf2fe71f9bbb4b7d853bef7958dbf26ef9ff4bdff8cef7d95c6afcbfba713df676f0039fcfe4d2f6e31f5ce5be099cc3bec6d8f4f4e81fcedd9c4b0d93b2cb19da9da92cfc9f79e00df4106ea77a953ec795f9c5e90f74f817b7e7dd127f7791fab177d725ff2e9fbaebc7e20afef7b719c7f2af806f064ef25ca4c69d36f4a192fcb6f9e06f78e4de794a790a1be95f61b7b55ca7806dc731957ca3449916f63aff9f8bd029ef3ebebf2f767c1bd23bb53b314fabd25df7dc317b737e4b793027cabe2f8962f6e6f491987b971eb74660a591fcaeb47be345436cbe5bda34957d547fa9ebc7f5beaf01cb87774d8518daf7fccf4b6fda6effbe713bfdf49f92b55a7fed4a7dbbb2cb14fee737955be5b6393ec4b9feeef79ef54ebf7994fbff77c7abf2fc37d01e8a19ef3eb072cb1acfc407eff95bcffd0f7bb4a07dd987faa3cf2b5fbee98cd01de6d2ec3fa882596111f49d69b5d599dd5f886aa677e2bafdfc9f73f4b641efb2ca4eedfcbef3e06b62675633f80df40dba3faf71fe57528f2fb4fcc6b9bc0e73f4bb99fcadf5f04f7fcfa89a78bf8dbe1d1f911372e5d547df21779fd35350ff69bbcfe2e7fff5ccf2b266d35f685cf1694ed86b5850eaede5d6419c5fe94f2be92f2952f6e0f9ef3eb97f2f797c13d7fef0f9630cea10d1b0b63fb006138ba762df7c9f91ad1f56b79fdc627e71b9ffcbb3471c8b43e2e7976537efc6f29fb3b4447690fecaf441db561049415fbd617df6fa54e8b5cbbe876a34fdef7483aa83cf7834fde0fbe70ee02f72a2e99f2fb57cafa51ca7e05dc3b71c855fd9dff93d7ffe4ef4c5eff6689f946c631655df39f34faee2065fde4bd27fe76f4e92ec7886231798dcbebcf2cb13ea57c492d4f8ff98a23cc17f2b72e6a2ceb8f1461ab7255ce778ca9b6a06288b14835472c1d0b25fb179fcdb403cff9f5579fcdfceaeadce30b9f9cdf1039d21fc67e97bfab7a6b5ddf7b2adfbc06eef9b53e88470bf94ccd0171e23df21ff9ac9ed44b8e7b29fd62729c3ed6c8a72f857d612cb64358bc0cee1ddd7ba9f1f3c6beef82b051e57b0a363dd558b6aa57a5894fac89bc36cd223b55ee287652d7d89ff2b96a4b6c07de87bfab365a33df7b35c4b0d73f21192a99d96098aa2ddd525eff6189fef81f375ebd95ff53fd933e7f1caf93a86f5cf9a814fac65aa4d157f9e37fbdf7c4df5c1f391620e6b3f3ebb6f2fa3f96e88f65f991b13fd6849da7f2611b79556c5aa66191c21fa763519d3eff31bdef90e9c18b25e83bc4bda3739f753e1d637a39e239bfc659a23f6ee77baf364bc82f71553685cc2f7d1ab9cfabf553f16914906904fb4259b44358bc0cee1dddfbaa318aed7ddf056113a0aceaebebab4e1b1f553fec904576db30ad3f8ed76289feb81d781ffeaefcf10e340cfb6d4ad42b6dbc541b3e0b0c53fae34e329cba2cc11f8b7b275ef9caffed28bff3fbe3263e7d9b04d037278dbe328de2f5bcf7e29273811a97d8495ea58f8cd76709fe38ae7c6986fe581bb6ca875de455f963c5106391ca1fa761512dbb01d3fb5139bf38de9025fa0e396778403d9f9c46881ce907e38d59a23feeea7baf294bcc2fb23e11d61ff73fd77d5ead9f5cafa4e6f1a5651ac1be5016edc073c8e26570efe83e70be4f4e33448eacfbc59bfb9876f7bd57434c07c8f19f6afd7a648f69b5df4bf75e2a5fd453eaa5fa3bd59a2db99624d61b3ce7efbde57b2f4f5e657f6fbc857cef6d70cfaf2de573d57f2ce5c75b79bac75b8177f9b5354b180715f70ef3c1553ed9eabb6de5fbef827b7e6dc312fd6c1b57ce20394f63f024dffb6d136d2bd6133ce7d7763e1b6d27e5fd83c8db8ee9cbd1ed5942395a1dce76bedfdf488ca71a2716f7fcf7ebdd7007a97973a9d2bbc097de723e52bc7d627ea84e9f1d40fac83a48bca37cf73df08e7aceaf39be74cb71f90c79c627477dd749beaffad0f3c1737eddd1c75baeaf1b22c76d8728ffaeb8eee4e35ae093a77e7f23518f6aae3b24721dacc657e45ac1788700ac3a4463b5cb1f3e39182b7fdc1056bbc8f58fbba839c644ac86a8f97ea96c70b0cf06e5fac8b85aa7e5e7da157055758f6e3eae5dc1737ecdf571cd75390c3bca27477dd7ddc7750078ceaf3d7c5c7bb8f2864aff3f6c91fc6ea0efbb9ebeef7a4a3d7213bfab4e0fe567557a0cf6c953bfbf91a87f757a744d4c8fa16a0d84fabd4b00c65da231def51b9f1c8cb19f15c2785739ff6957352fc8cf0461bceba6c4efa8180f0b30061753eb69551b7817965ccf18caaaeb02bba9f1c561eefdc84601c290eb44abfb5561182d5284b15b8830d43ae037813c7e1d2ed9f46609e36c71597f88efece9121b019ef1fb519e4e0bd4da8a913efbcc93723f00f74e1a0fdf88ebace4c7fb307ddda3afa753bc2f78975ffbf96cbb9f1bde881f7cb2d5776a0eeabbe09e5f5579fb0ab8e77264fe1fb1c8f77e7f9658f7d8053c87f25ef6c95b27e53de1933720515e751e18e8cb03bb80f7e1ef6f24c6b33a0fa8f9d2320f0c57f37753d98e5abba2fad600ffea7cd10f3c53769c0f9ea971ad02cf6606cb7a736c8c7c47b511fb83ef54980334610ed48439083c537d2f83bd3087aaba58aaf82adb02b2e28a9f2a03df03f7fc3a443eff50ca906dcdeafca57e57e3dfca0e77d18431d417c62ee039bfaa35ee37817bc79646972361efca12f3b6f437f1dd3461abb086b3049f1f57b246c8e71f0119f03bf5fbc789cf19940fec6f94f21b637dba8ff7d28c2fad14cfc6b9f11c23ebe9b10952e6482f1ed5df4f04bf01eed5bfef2e9fdfe77baeda0018b36180d930f90de8ffd0b6a1e5daeb985c1399b2ed98465690f922f15152f7dbc13de7f6891be658e5fbd5fa6c35ae20eb1cf1292cb1cdabf456ebfef87a895473b954fb6eb44f8fd1ae1e6365fd7facaa17ece1d3637a0de9a1ca67b5665bcddf53b620d77cc4c700e6ea9b59e037986fd5efb3f532ab7f576bb3f391dfe726da5ff573b94e3a3ece677f72ff81f8584f57f1b7c373dc3d2e8bf1d2b7c5e41aeb985acbf95dcda66b354f356f51f1947d29f1f19e8ed5dfcc02bf411eeaf7d97a99d5bf633cd5ef7e9eeab9e239d1c753f9870980e70497e70439fe3141f673c61610f194e36471e58b6e07f75c0f39872eb6b7ef7d15ae9a63a7ca48b55e18e822fa7ba42e032f74af1355b9b810ff3eb608f99ebfaffa4726f9f49ee4ea3d51ed0d50e87bdfaf77db907a2bffb018ff3e95deb122f95dd87ab6eaef0edb06286189f573953f97c8b84e963c3e05f70ebfdd9f497cbf9adb67898ce253e5f3a7c13d947b57a2dc496a7f08b5365db5a567c8f71f01f7fcbd52104fa5cb4c2f9e7bab3e7eb9be213e0ba4e34cf08ccb56f33cd598a96230cdc740aead9ff442e2fbf13d7c0c6499119fee6330dd27f7ae44b993557fef3e193068c96a8641aabaa75cab1f9f2dbff902dcf3eb9c440ed5e93237f1797c0e78ceaf7bcadf1f03f70e8fa9ca26d4da7eb92e816df2e2d85ccdb556f978014bccf7724f8c29f37defedcdbcfceec899a2eaa78bc0ef2adfaaf50a2afef3e4b75f827b7e5d9898deca07c41701ee0ba53e5ff8c29befc589679584f0e62786175b057454bff36ba17cef5610aedf8749bfa7f5412abcbd7ce9bb972fde2a7d5bfaf4fb8c25f2507aa934790cdc3b0cf65063808abdda734197beaa7c518c6f07f78eac69437deff9d2779aeab3d2a56f852ffe8ae3972c81597cb12f7ddb68d277b1d4e7095f78455e9ca67de00baf284dfacab2215e1c207d55bd4097be952c789f8cdcaf22a6c6454a126da2faf912f95ccdcd957b61c4d682efd47bfcba54beff02b8e7e16ada1dd561ece3b347e91fe3cb99dedf94f9ec713978ceafa53e7b2c75d36cfa953e392b7c72a4ff89af4cb483f84a9fdcbbc03dbf2e03e9b3cc0d6b462d5f1c57c96fbf06f7fcf775e03bfefbb33e398a95da7b449519eb586299a1e6cbe8cacd0a869719eb81ee15e0192833aae350e14b27f57e25d3fb8d2a1fdf4af09c5ff7f5a5d3be6e9c674ef3c959ed93236d37bec6974e6b7c72ef02f7fc5a0ee25a2ec3bad617c7b5be7452fbb9ac03dfc174927266295fa7f66a09934e2a9e1b02a6d3067d3a69f3bb6a6becc712fdea7e526f39ff75961c0f53fe8c81b689b65f61a34ffe4629ff1b70cf7fd7ec9513db5f5e0f4a9491b09e48f997fdbdefabd7e4a8b538077abf2d9463f8b1fdc077fcfe00101fe05b03f76fa8743fc0c7ef0097df6cd9fe9dadda4b8adfda34fce47bf103c17b2aac83bc67d575d58341fa1f049ef1eb2152b76fc1bda3dbdce13eb987caf7be0361f3eb61f2f9f7e09e7fa7fa090f97bf5feb937724d0e97037cc396a8dc5c1be308e9032e4ba735ef54be0700490752878a664a86f41f84ce52d399e36fb8fc430d3a581b6ffff2829f33670cfaf47fbd2ff68c958a6ff5cd5ae54736f0f4c1db6921b3b44de1f23e53f0eeef9ef870279c057068ecfb1bef81c9b186e4cd9c493296c55d903dc532268fe7950ca385c86aff6bff911dcf3eb264f764ca5fbf1c026a4ef88ab3d97fde33260bfe0f889e05d7e55fbfbde04ee9db49bf7874fb6fa4eed7ffb13b8e77a1d29efd51ebc6a6d87caa3a7021d4e01cff855ed35fb0bb87774d84bceff98f7021296daf7e745700fc354fbbb7e0aee79dc0e4b7c3faef643fd15dc2bc650ce6f3e393ebde2678138cabd7fd803696c5df5330f02f73c2cd90fbfd7f0c438a59397b25eabf2d5d1f2b91cc38afbf64c8da7da3355275f8d3fcb7c193fc7972ee7c8f7d4fad010bac7645d31aef6b9bc1ddc3bbf2d1894f85e4ccdb1fdddd57b811a9358047e0fabc3289f5da9bd35ff00f75c97075842be8ba9f10faec71b3e596afce39d90bac879ce71b52fe7ede0ded1616f55873ad6f7beda47f24f70cf7f3fced37191ea6bd80464d6077ff3dfc665c04fb605aafddc855297bfc03dff7d5906b255197a114bacef5ee4f258a8d25d5d0f481d86921753fbb0a9f1eb8ba5fcb7c13dbf5e92988ee21efade4b5942fd40dc3b7a2deae39373994fce652cd12f5c2e7fffdbf7dde5205efcf777655a8ef6c5274dbcb52c54f9a3f60dbc1ddcf338c8f9af8bd47c103556b6297558f12b5962b97ba52fbcabe4efff807b27bc42351f6f688870945c2e6fb33e3c210784979e4fed98f037e359092b64e52c4f2c70ecce821f69a1be4c7f9885584f2156a6307eaa050fb68aad773e2dd19d28314b9c5751e5a4443fed8912edc45a1115fa28f1ff42e78d5221f4df785210772605c1952b73fe2d01c761543acfc789d334f88118a5ce2fbdd924e7cabf5ac4fab279cebf8952663bc196b1d5cedd4ce7ffe542de2247ede437d345891f9de1ff66ba23d33dd96385f344012d77eecb848633c4ffd7084d4b84f6139c6755e29c91956c291be95cd789d092e35ee1fcad0b73a644a6d7517fc007f6dc3d464425d36827365cfb3c618bff3f45b6448a886ac5bf321fd6ca13b58d639252e2ff33749d0c5f803441cae82b90c5129ef56379628dd2f42482e1e3981c43bd7dbbbc07b0829471d193e1c9bdbd888197c28b5bf6d9bdf679f79c573b316af92caf0e8f5afb34514b0596cbcb15ab34c344a176ed5a7db8a27efc311d7eb1647c4616f1bbef958af7c227401d51f8252680e8e69fe978b569a0f09c25942f13aaf92333cd795ee888e75148bc1b29fe2e62cbab7d6452aaf6e12ad41509935ceca68b1c9634715dd288d54433b748cec00ea24a9d38f5aa63e1254e9ea897b54d61c25858a2921597352d95c9eeb975eaca99277df5496d7dba3410e992496858ca6ca34b9906d9ce34e94b8954e9d2b03a5e5ebaf07ff40c1b21b69d4e078c602d1dc186d9b66dfedb2a21a5d079373c43be5caea7dff1e80136418c30bd0a18c2da1a847d38c2a61aad58edfa3eadb84288e43abac469b4658ae4cc8c9b8f69b4f121a88d1a77f394256a58d3aeaba327361a59444a4fb51467384d82dd9ddf0a9df74b44b5933f8705da081182d7ba4cfc2235593ee36a673f592dd596826a67d0ee8daa1946bc9e86b8d80ea195c60c848ff36786e67866a88f65b3d651b359034cf2b6512537c424b7892ab91126b96d54c98d75d946acdb9d9f956ce375b0a8bf463adf2e7322b346b49a573bdfeb3a645267977681b3cb7622bbe4305d3751388db06cd2449776fce1f63a25fd49b71d9e744d31c1ed230a6e86595b87a8d6d61c537987882ab7c004778c28b8a52e7f08f27b6dc1626596280e332b4a7202e78d4e226fec90b62849ad0d962f5ae9928c93dd31489275c293acb52ec9844d979226d92ce799db673b46fc5a2a3afa78774d89f3569553ca560a20550215f6b64aa6c9e29ce2d5428fd409ba53e004ed2c12948f82d0e98a25f7b6bae4e6a9d225487277c693bb8d2eb985a329cc620ecd77fe1aede85fe5fce7fd355a4852fdbf858ea4f549f9243f4df276659a96bcf0775d927266142de44268f79fba48a33e575850cd068c594c5b9dc5f084edae21d28713e9e18b82df8a72712b6a8705d6130bac57e6816d8705b6331658efcc03db1e0b2c0f0bac4fe681b5c702eb8b05d62ff3c03ae802e3f5143ee619a99eb20326b9402339164672479d645ebde7eb78a3369a7274c2797b67004bee75facff9274978235c78274cf3813acd27c64369be23067c50d4a4dc09933c38aae4ce1ac979a2be7830cb6ed3493f9e3dce89160f6d2a5bccf661ee40a40a779528c1b9466a4073ba735d22b4e0cfb916e9c7c153175c4334593e4fd4fac6b0e0a3f2f4b1e02bd4e2a274e3731872c56e50588d47a74df81a92be6c1d2642378b0d563677c13ccdae1a4ff386ce8da5f0345d75c27996dd2d6a96eda693ccb3ec705df1c46d7584f35f03d13e4c0a67181e4eaece358876c9862dea1adcae552e6f89185b73e54d61bca2bf5698ea72c780d748c39929aa6c4b996a064471067c6a5d077fc1c9dc7ff4d96194c80ebb06c80e94b1c23240779d25f13e683ec72b6954945765a7b3698ee485221bee2b1e734a6eea968a574bd906517176abcb49f65617b7b71e3a6d78d71ef726691b572d71c13d31c163230aee85e5f17151f3f8ce3ac9ee0cabe835acde98da13a2aa9da793cc3dea448d47fd2716cea3f6c184efae117e4f3c9cf0be3ae1dc582705b1911456dd0f133c5997c7ba089fc187f3729cff56395ff0c1a34291fb734461e879831c27af973a7f55c906a97a7f95f3863b3b2b8c9ef998514c896a140558ba4dd5a4db2f21d3ad3f267c9a46f8f86dc2091f80a5dd1ebab4e326c4cb0d5e2d5926cbb6446f9823e680e488a991ab45d754b14839b7932a87ede7d8f8feceb5ca793b47940365e237fe374f69317f24449a0ec4f49faed3bf01d07f1ad0304c888330bf3543e3b76221fdd6609d70ee9e6732a4e2c3d7e187aff80cc1b0cdd661e30df8314ef585d75c578bf767080328a9ae2b17d75001b98b46af3cd125b9926dc90a196f2df089a495e26faf8ac2c3f6a62e45a978f1bd0dfc152ff58fbee2c597bae58a3dcab2a13d56c11a8a39d53d354e355417cc302c2fec85e5857919e5855d7536277aabcbb7a8cde1396aba90cd735ef40a3f1f3edec6dffa175dba05012caba674ec29cee1e1ef17497295dc99f2d9058b1db5b9d2a3c4982e872fb2843e4f2c1079229b9a63f96237acd4de5b536a6fae1daed41eae3359d1355eb1454d76b490900db35da8335bd15f3f2040e2d7a49e1dc57a834ae1548ba553755d774771e8538528364b9ce7dcf1c2df7b8a0396787d69ace0bd4290e7f12b14ed5eccc8170923cf763c31431f811500859a022054ad7a249685166bb2d03f21b3d0284ceda2a86a8fc6d42ed6a8bdb14e38b5c760c24b34c227d50d277cac4e3877cc7cf1669416e2384c30dfc525a9bac93bec553ba1c8d7525c2cda0aaafd572c9eac77fe5fe63c2b122272c4da1135652e8c96e331b6cb346c9b85643b0143501a91ed449d606e9efb04119c624acdee3ac1bcfeb59c21f52fbe06367cfd6b12867d8506fb8521b14fc6b2f9caa8d97c0a26795554c95331c9e551254fc324ef1b55f21e582256681291cf1a0d9388d331e1951ae133430a9f8165cc2a9d6feac2f858835749759b4f5ebf46a1e32bab84e7c971ca7bb7cc2d4ee81fe17d1ea5b2d11c269fcfc4f45cadd3d3ed48e533bb789da250f4a1f110a73ab9374ca8b330f46b34e83785443f1b13be5623fc8b90c2e760bcd6e978b54d93aec5623ea9f7b4aff3340cc7b99836eb75daf05b2fddc284b32786748306e9b90dc221dd0b8bc47eba48b460aa181fe2209b223afc0ae53ca335a2180f8f711ea6c1469d06dcb34daaae184ccbb05a301f43babf06e92b21912ec03cf201513df2de98da07ea9c66c3706a2fc4d43e28aada8b749279ade36086d43af88e43e16b1d8558388762e11c9651388b3152874725558425f0119a041ede285c021763c28fd408df1852780926fc288df047420a5f82093f5a23bc7de370c29762c28fd1082f0e297c1926fc588df033430a2fc5846fd208bf32a4f07d30233f2eaa912fc7d43e5ea376ab26e1d42ec3d43e21aada2b3492f3c40ccf6c2e81f5cf7e0ab74a90ef5a156cbe3adff74cb7fc355df85897d24a5dbaf012fa649d4a218af25598359da2b1a64f426682724cf8a91ae1f3439aeabe98f0d334c28f0a29bc02137eba4678b3a6e1845762897946c4c4acc204f32de8b41b1ecc1039ab4454e74bc40e122bc55f2bc52e3e2562e0ba502ebe511d4e6ae09a6f499223adb742da749963edbd9da761b45e8d697d964e6b3ef2ca3b71bd7ab3db94749b21ba798539ac9bac75770ba5d71acc06ced6d8c0e69006b6168bf439116d609dcecf8ac9ed5b6a0d5185e8b0ac74aa21dc5256d4f01aa27303fbe4f358fa35445175c5fcf77a5d72f3baf5f90ca95bf31df51a709543d5ad3760367ba1c6660b42faadfd30e1176984cf0d297c2326fc628df0c3420adf5f279c576bf8fe7a91aa3507606a5faa51fb99906a1f88a97d5954b50fc2d4be5ca376ab66e1d43e58279cbbac2b740e9d175a413a457244a65c2d0a285ec44c63ee2618ee5ca942e769b19845b54cdc4f135993f72c2e160580bbb3cf42d1f9b1548c2556384fd5acabf5cc5d1d9d23aa63ee3e6739c21514cbb978cbc5934af1560908475fe094ca82131651617b370fc192e84a4d12750e99448762497455c4e2e7304cf0d5bab4e7b319663a37e509e91226bcc331c77a0de658f9d699e13b2d8ec0e2759d2e5e3c99e655f794baf6bb2064b5e8482cfdafd7799690e97f1426fc068df05acdc3093f1a4b931bb134b929a3343946170e777a370731e214e37cc762826f8928781366459b2366bbe330c1b746147cbc4e304f7bbedbaa7f6e271710666ee7099815deaeb1c25e2dc259e18998f03b34c22785147e1226fc4e8df0f290c24fc6f2cf5d58feb93ba3fc730a6634f7e87c1a0f67a1f32fefea2e13de5a95b1a54e3380ff522e9a8abc3c0c6361a7625adcabd3a265b5167d9cfff392978f4db9b38332d7e1344c87fb743ab4903ae43bff1589c610ff866f3e90b906a7631adcafd3a01e480bbe8688d78cc284760666be0f68cc7768cb70e67b2666be0f62e6fb5046e67b16e69a1ed6b8a66d42baa6b331428f6808fd1192d03998f04735c2dbb60a27fc5c4cf863bab40d29fc3c2c6d1fc7d2f6898cd2f67c5d38dca09f4ce59afad5b06bba00d3e2a9d4aea96f0dbaa60b311d9e4ee59a0a6ad0355d8469f04c3ad7344784176ebdc3c598f93eab31df7aadc399ef2598f93e8799eff31999efa518327ec64794ead865189d1735744e0d49e7728cce4b189d9733a273051689573491f8266424aec4d0bf1a11fd5598d6af69b41ebd6d38adafc6d0bf8ea17f2323f4d76091785313894f4246e25a4cf85b1ae1b5da84137e1d26fc6d8df0dc90c2afc7f0bf83e17f3723fc3760c6c9cfb2418bb5fc1a2ed66ec4b4785fa78557acf5abc162ed264c870f743aa862ad7f0d166b37631a7ca8d3a03ef38ab53162c06b55c89eaa5b3003fe4863c0bf8434e0cd98017f8c19f0271919f0ad58243ed544a2ac6db848dc8609ff4c23fc9990c26fc7929b1fe918a55cb803d3fa0b8dd643db85d3fa4e4cf8971ae1c52185df8521f94a9703f8a875ea7efae49edc687df66ebfa9d9bdf4776309f4b52681aa4226d03d98f06f34c2cf0c29fc5ecc657c8bb98cef327219f76191f85e4768bb7091b81f13fe8346f8dc90c21fd009e7ddc03f06711929ba811fd408ce137bc26d9931fae49d976a768cfe271d2fed183d3fe731f5187d745db131fa87305bfa4597db42dad2c33ae17c28979f12196928f7114cf26f51253f8a950fbf07b1ff144ef3319dfd8b9d0b976c11fb8fb2275a6acbff23b0e5ff292cbf470acb8fb6739b3e251ec78ce7afa8c6f304663c7f47349e27b16cfa8f269bfeb07db86cfa14a6f5bf4c5325e2fba2a9fd862b987e41538ea82ee5849c7bf634a6c7ff747af03d55c2c97f0693ff5fc4d4791613cc377ed1ae319aea209b2176a9af10c0bcd393ca987b7ad228f1eb4a51a70c573b7b4ea78d7b8c82a6fadc3e9cad3c8f45351e34aa739cbf4bc5b7d1a3fa0216d56d3451bd3664545fc484d7d208ff20a4f097308eb563d16cf1654ceb3a1aad7fe9104eeb5730adebea529f3b4a351dc46d7624cea60d13ad57b190ebe942e65d27eee4a7bcea8dedf3aaf72e9aea5862310b3be9e6354c83fa3a0dda68359824feaa121b3db88db3cc96f7bd8ee9d240a7cbf60175493e38238c4e6f6086d7506378ad3a8633bc37b108378a985ddec204378e28f86d4c70938882dfc13837d5702e08c9f95d4c78338df03f420a7f0f43d23c2292f77582b9f7691144708a36eb073ac1bcbba0650ce92e6815cba4bbe0430c7b6b0df6173a85c3fe1116896db148b4c928121f639168ab8944b31dc345e2134c783b8df0a13b8513fe296698dbe9dc295f513e9dc1dd7c8a45534839f25cd65d14782be5ff13178be4883bb7f8e9257629e1bf28975bc9cac43e26950caed677fbfef8baf37296b8b4438553252a5595a21aaedc798e70e6c52167607e86b1d85ec7826f4a09b704741b035e01ebad9c5f2b342c63706ef3325104e5a495d0cf793bec029bcf318369af31984d21adf10b2c4b75c0b2d40e1965a92fb14874d444e2c69091f80a4be91c5d4af3656dfa9eec79b20f9c2f50e28d407727a954699a9bf2d7ee62d6b0dbfbedd975620e58252c43f57427fe5625ecaa4a938b160b0dd5b94a9eec55b213218c7d7d8d254d274dd22c0be990bec184efa82b86430aff164bf79d74e9ce8f7a507978a5489332d9cde4dfddc4bf3b4611530776f2457361d87e8769d859a7a13a92d2dd24bf186c6d09cf141e217c30dff8218c26df6319bd0b96d1bb6694d17fc062dc4d1763353add478c9197ca2e387727e4ccc7867fc474c8c51a774a07feb02c42c83f612177c71a772ae4e9e2ed5522c527f94884d1e0674c831e58834a69104413fe0ef739e11a79bf604ea0a7c6098cef12ce09fc8a45b8972ec21d8113582b0b6db8159bcaf289c6582cdd78af9045f76f986e3beb74e38737144b07e40e96e608d82a31bc62c2db9ca94cbcc10bb0f57210953b29d78cd7b3dd4269fb3ba66d6f9db64d65319ae2d8f41061ffa10b9bf764e7c522f664ff89c5aa4fc4b6da5f98ca7da3aafc37a672bf882aff83a99c1f55e57f31950b22aafc3fcc77f4d7f88e45b9e17cc77f98d6037416cf27118d612b44e56c7d752e0c13191643c21ba80b8fc7126efd38453687c28418d385c8050fd2e0abd53d1cbe38267cb046f81721d3661b8cd5908816554b27986f5cbb4b10c1298e16a98de118aac1511692751d0cc7309de9f09d66f7944588da006271d2c88c5bb0a91938bc70599d5020bac508df9bd42b027572127728cd74c386ba18be5d35f88a7b84c3574f275c1ced14d5f3d5d748ce13a7edf1bdddb6ec31a0aa240e7bf4e7705d4ed08e7b8f88f15a7547f166147db011ee06ba74e3a9313262876843ccda4669aced8190d6d608cbaca37599750ce3c71ac1316737a325d6fdb0ec8b653db7038ddb97eab2e25f78597689ec7a2811f22b448d73654857da1883384603f1a09ee12036c1848fd508ff27a4f0a6580a8dd3a550019242aae3084f03dc65d604ff6618a2f11a448ff40a87a839267c8246f8f09dc3096f81f9e38951fd714b2c65778f586f6885f198a4e1f143481ead31e19335c24fed1d4ef8b698f0291ae1eb420a6f83099faacba62185b7c512735ab66b3d3a175a13b59e7618be3d34f87ec90b876f3b4cf8748df0697dc209df1e133e4323bc59df70c2db63c2676a846f0a29bc036655b3289c3f55e1bb038668b606d1cc7ee11075c484cfd1087f21a4f01cccf9cf8deafc3b6129bb6744e7bf23c6632f5d4d273f1c8f9d30e1f334c23b178413de19133e5f23bc5e48e15d30e10b74d934a4f0ae98f0bd35c20feb1f4e78374cf8428df00f420acfc5cc7091cec10c411c4ca51c0acaa4eebf56b89c652c47146acbe41bf0fdca50f6df1dc355a8c1f5c68070b87a60c2176b84170c0c27bca74e38df3aa228884bc8c505f7c212b938a2afd919135ca2b39eb873db98350815426f2c8425ba109c6721e5e7e9fa44729cdb183f56235bbb058f927375c3ef14bc34c6c745133134407a4096891e90d649f14a153ad6dbd147c7ad13e7b6308bdce060f30ce133b82f992afabddd290e9519302d8d853d0f721f4176a7a49867aa1f46bd2fe6219647f410fd30c1651105e763825744145c80095e1951707f4cf0aa8882076082cb230a1e8809de37a2e04198e08a88820763822b230a1e8295cf55ba9ea0ddc295cfbb605aaf8ea8f5509d60de76581344708aaee361188eb5ba5675481cbb62c2d769845f1a52f86e98f0f51ae19b430a1f8e552a36e82a157cc06d0e734f45775db9f763b8aae9082c52fb6922356878b8488dd409e7ef6f8c25ef52c6ff49129e6297b251bae29e4f538bf153aab644713f4f16e1e18af6fd75194a5ba41f208af47649b10ba203567c8fc6d2ff404dfa978d0c97fe6330e107e99a8921858fc5841fac117eeae870c2c7619d2c8744ed64198f39d643233ad6093ac17cc0fdb0ea1f7c73140f8f6532477122e6a98ed0792a5eb5577bc7948aca25cf854bc590e6aa48f31477c7f43852a787dac3c69da357283a02c2352c2761e11da50b0fce4e4c0e37b3998093318b3f5a63f1e563c259fc142c7ac7e8a2c75774ea7a5df838b5bb11893a9495f7952c1393b2c344752a16d5633551cd1d1b2eaad3b0a86ec25232797a1e8f349cc017aed4dd038bde719ae8dd18327ad3b1e81d8f45cf5b8b5b33d19b816970824e03eefcfc5365278bccb14cace20f13f24ccc099e8839c193327282b3b0189eac8ba1b78d584d4ed49e8de9708a4e8736c02115c961bac5d2a8d5dcb8cc759983e972aa4e971d7dbaac4c58fb9dca1632d7702ea6e169e9688d1043557ead6633f72075be215dd8f5ea7b62ba9caed32547539404d329b362662fcc399da1714efc98ec30ce691e16f5337551ef9c54ccc0eca3a69bbb458f7746b8674a6a8c70654804f331377216e646cecec88d2cc0509fa36b0c4f08877a6f4cf8b91ae1ef8414be10137e9e4678fb89e1842fc28ce47c9d9130a6919e22710b31d52fd0351c42aabe18137ea146f82b21851761c22fd2086fb47b38e1c598f08b35c24787145e8209bf44237c6648e14b74c2f9e29c4b8334a94ec2052fc5b4be4ca375af49e1b45e8635042f8fd8102cd509e63bac5d1144f0cfb8e07d301c576a70f4991c0ec7725d770e1fbe88f1f31fb339131876a7f00d1d0bc5ba227ed7dbd14dcdbcf5de192ddb3a65f2ddb0f385af0adc0174b5e800eac774f3856b5e6baccba80c33836b3466d06a4a38335881b9fe6b75ae9fa398e5247c3183072196cacdc14ac58bfa3944abc1a9eec53e146e4da342988ebb8a394cf1b212c3739d06cfdca9e1f0acc2f05cafc3c37f70ab450d32385dbd1c8bc80d9a88fc123222fb6211b931f374d64d14a64be70a0ccf4dba9ef33dc2e1a9c484dfac113e3ea4f02a9d70ee6a6f095240702784085e8d69bd59a3f51721b55e8359ccad3a8b69c898ef0c32b5834498345e8b85799b2e4c3e58e16e7396ec8a33db377b9d2e7ccee8f658f2000a6f6a871940598fa5d61d9ad42a9e112eb53660c2efd45555678513be1f962c77a5f682791978c18d5844eed644e4839011d91f137e8f46f8d0d9e1841f8051ba3748364f81e4404cf07d11051f84e1b85f832327248e8331ad1fd0190d6f55e68552fe104cfe833af97cb78ae43dc3278b72ab12f88ea5196c877828a6c9433a4db804eeafc226d66158280feb4211b3cf35e7908609f1705d13817711657562dc4ce78e1f161e7ea4f79118df2530118c68c7692bfb8fc6f453e352858f55d98fd0a515bf7d2cc677744a5469e2e483eb9edbfed97852d2d4c693e648cc181ed719039fbea0fa269730be6548958c546948533f0af3184f683cc641f3c3798ca3b1483da98b144f29be2db1dbfb585cdd63e9f54066bacae5184c8fa7747a3445e1ae64e197c01f8b017e5a5749d83b1ce04d3ae1bce6f64c2ce228fb713a57d185bb8a7d485d05b62fb5ee10869add6dfbd92065ef509cd8f1bab4c8716e9f8b254fe7d5ec91b50c6f169c8025f3f35193f9444cf20b51259f84497e31aae493b13afd4b9a3a3dff274c9dfe14cc55bc1cb16a762ac6e395a83c4ec324bf1a55f2e998e4d7a24a3e0393fc7a54c9676292df882af92c4cf29b51259f8d19dd5b118dee1c4ce5b7a3aa7cae4e32af96bc1344e514db989c87a9fc6e5495cfc728bf1791f20598caef4755f9424cf20751255f8449fe30aae48b31c91f45957c0966731f47b4b94b31953f89aaf26598cd7d1ad1e62ec7047f1651f01598e0cf230abe5227989fdbf24510c17fe282afc2ea035fd6407de06acc34be8a6a1ad7e824f3f7bf0ec223c5f0e5b518e86f2282be0e338d6f239ac6f598e0ef220abe014bbdefa3a6de8d58eafd1031f56ec252efc788a9773306f9a788906fc104ff1c51f0662cf57e899a7ab762a9f76bc4d4bb0d4bbddf22a6deed18e4df2342be0313fc4744c17762a9f767d4d4bb4b27b98b73fb57c426fcdd98ca7f4755f91e9de4f6ceed3f41543e0f177c2f967cff464cbefb30c1ff8b28f87e2c8bfc17318b3c80a51e8b474cbd0731167cf97b14160f6182e311053f8cb1d8262a8b4730c9b5a24a7e14935c3baae4c730cc7522627e1c135c37a2e027b0a64ebd20825334759ec434ae1f51e3a7308d1b44d4f8694ce38611357e06d3b851448d9fc504378e28f8390c459388289ec7346e1a51e317b0b659b378f4b6d98b188ee61171bc84e1681111c7cb988b6b19d5c5bd82816e5503a05fc5d46e1d55edd730b5b7ad01b55fc7d46e1355ed3730c96da34a7e1303d2ae0680bc85a9bd5d54b5dfc6246f1f55f23b58266f1f3193bf8b09ee1051f07b98e01d220a7e1f13dc31a2e00f30c13911057f8809ee1451f04798bded18d5de3ec6ba06760aa2728aae814f30953b4755f9539d64be7ca34b1095532cdff80c4bbeae1193ef734c70b78882bfc004e74614fc25967adda3a6de571ac9795d9ddbd87cb6a577709fe97cc157a3af0cbd26a3479c1f1e9c8825af1b8f558e78162dece642b2373187d5d64f01eb19e753c06a22446c62d8d73abbe0a9d74b03a00f07a0d1dd6f2d5c6d24bc6f303bdc39aa1d7e8b49ee1d55f27718a33c1a46df63e1f5a109ef078c5cdfa8e47ec424f78b2af9274c727e54c93f638da782888da75fb064ed4f93acbf6288064445f41b1693813431f91d8bc9a0a831f9038bc9609a98fc8985378426bcbf74e1f1f346760962cc7c6f3044f0df58456568c48aca3f585a0f8b9ad6ff6292778d2af97f98cbd82da2cbf80f3397e134e6c2471ab48846444514d349e63119491393381693515163b20d1693d13431a98585378626bcdabaf0b8cb181bd165d4d109e69e605c449751174bebf151d3ba1e26794254c9f57592b9cb9818d16534c0cc65771a736988219a141551232c26936962d2188bc994a831698259fed48896df14cbabd322e6d56618fb3d68d837c7d84f8fcabe854e32df7f6a46104407e0885aea04f39eee9935d0d3dd0a133eab0684b7c660cf8e0a7b5bccd0e74434f43698ca73a3aadc16b3f43d692cbd1d1693bda2c6643b2c26f36862b23d16de7c9af0da63ce6e414467d70113bc7744c13b60b978610de4e28e98f04535203c07b3d2c2a856da09b39ac53456b3231693a2a831d9098b49314d4c3a63665a12d14cbb6082974414dc1533d1a53560a2dd30e1cb6a40782e6635a551ada63b6635fbd0584d0f2c26cba3c6a42726b92caae45e18a315348c76c6ea882b23d6117beb04f391cd554104a718d9ccc3d8974765df07cb56fbd640b6ea8b09afa801e1fd3026955199e463d5daaa88d5da024ce5d55155ee8f65a1353459680016de5a9af00662e1ada3096f105646ae8f58460ec6b2c4861ac8124330c7b65f44c7b60ba6f5c61ad07a28267cff1a103e0ccb720744cd72bb62cefec088ce7e372c150f8a988ac3b14c74304d261a81f9d14322fad1913ac1e24c8d2082534c7a1a8559cb6151ad653426f9f0a892c760308e8808632ca6f29151551e87659da322669df1188ba323b29880b138262a8b89188b6323b2d81d53795354952761928f8b2a793226f9f8a892a760bee88488be682aa6f28951559e86493e29aae43d3018274784311d53f994a82acfd049e62b124f0da2728a1589337582f99e5aa70511dc09173c4b23388f9fc017dbc0b231517296d8ff7665b5b415f26e820889cb5bc20aabe54da87e7f4cf5fe65d35989f8bd549ebbee4d33c4a4a79e6479ba8ea87622e419713e117257c6b6686cb04994b331933933a2c9ccc1f2e55911f3e55c4cf0d91105ef8965f873a266f8bd30c8e746843c0f63715e4416f331c1e74714bc00837c4154c87b632a5f1851e58598ca17455579914e326f005e1c44e51427a016622c2e89c86231c6e2d2a82c8a30952f8ba8723126f8f288824bb05c7d45c45cbd04d3f8ca881a2fc5045f1551f032cc2cae8e6a16a598e46ba24ade074bbe6b2326df728cf2751129976182af8f28780526f88688825762a97763d4d45b8575b4dd54031d6de598da3747557b5f4cf22d51255760e6bc39a2395762c6716b44e3a8c204df1651f06a4cf0ed1105afc152ef8ea8a9b71633e73b6bc09cd761edcdbb22b637d7eb04f36ac9dd41049f81f7b66ec08cf99e88c6bc1f9682f7464dc18d18e4fb2242de1fb3e6fb235af301188b07a2b2381053f9c1882a1fa413cc37307a2888e0141b181d8c097e38a2e04330c88f44857c2806f9d188900fc37cd16335e08b0ec7783c1e95c711188f2722f23812cbd94f46ccd947e904f389f44f05119c6222fdd118e4a7a3423e0683fc4c44c8c7622c9e8dc86293aeebb2bb731b5bceb6c46efa4ae62a71cf439b273b1a6b6e3ffde702774e3e2f3a27f31823d617eb7e3c4e97ec3c755e0892eccfe33588e37582f9ed8bf1e45343d43f4901d4c6edea04cc4bbe54035ef2444cf8cb3520fc24cc3bbc12d53b9cac93ccdf7f35486aa618b23c4527b8b373fb5a10c18fe2d3084ec504bf1e51f06918e437a2423e5d27990fb2be1944e51483ac67602abf1555e533b1ccf8760d65c6b37401f06363df09c224c5b1b16763e5ddbb11cbbb73b0547c2f622a9e8ba5e2fb5153f13c4cf20751259f8f49fe30aae40b7492bb38b71f05c19c62bfda0b318bfb38a2c55d84b1f8242a8b8b759277746e3f0da2728ab9589760a5d56735505a5d8af1f83c2a8fcb30b5bfa801b52fc7847f5903c2afc0987c1595c9955835fceb88d5f0ab3095bf89aaf2d5988bfe36ae39616c3453e3f0eef642239d9f2a9d1fa638ff55b1b5a2eababcfaf0697e16d904e7f7a9e2ec5d5ef9e74ff4155fdd3159fc6d5845e74d8455a242cccf590b535e5c83c5f23b5d2c8fa88ea59a0d00e702e8e619049965d05bc6a7449c11378aad16f1e27213e97912f8fbe1f4c024cd74dea810e72e56f998c2136bfdbc673b72c21ecb772d46fa7bcc9e60886e9cf29d6f5c5aab9ca6d342c7362a449abbb19d29cfd9f36beb7d8b3faf297bba0e8be50fba58eeea8b2564eec673ac48b115228e7e2d135308fe922aafc0afc2c4ec7a2c663fea62b65ba0f41be1d850b13caf7b558da49cf74b98b8dd80c5ed275ddc06f8e23659a4ce3219337eb76e8bc5e4462c263feb62b229cbfeccfb66b473e527b3af67fc44ccb1ce57ae97af0c61e5901d1e0b5e96ac66fc5454e8f5785754cdf9b69b30eabfe8a88f08943726091a954678b59bb1f8fdaa8bdf2442abe24ff715c1f058b91d87a522e852b641e443bd27c924556fc162fd9b2ed6c352c61ad774ba880befceab927154a5317f5a240925e78bcc53733316afdf75f1da3374cd6e86f825b16ea793e03e9b56ed072a9cf280770a47a9096692ceb7623cfed0f1d83d2b653675697e1b16e73fb17a4a381b5036cccff52e1282603a87b5883031bb1d8bd95fba980d4162364be4cf32593771072554ab65b6ccc5c549a941d346b9038bd1dfba188d25f4be2a55dd73a31733f73ceb9a8be99d584cffd1c594772305f71489312814cfdcd87126e3452a5788d6509153e2aeafc158dd85c5eadf206d82c470610d619648850ae75d9e0f97a628fd1265d45ccceec662f63f5dcc46a5f59cc15a05b80f4dd566cdd453de83c5f13f5d1cc7a136c96bbc8b9d97545cb9675ceabc5121063a2bd2f812bdcc9a2e09efc5e2cab6d1c4b584b8f550e59404158292db3a982dacbdb4daf3d44c7b38134ef7619c623a4eb3b6582b2b35a1e81ceec738c4751c4686cc1b26e48807b0186ea38be18490319c232c7a2592225b22be0f62f1ada58bef7442cbaecca0ae5113041ec208d4d611c8a40ee2fab611a006421fab87b158d5d1c56a4406b11a2bde484e21bfcf092e374cfc1ec1e2575717bf5d22d41cab4469b4d289df12d9cec3633533e9dd30717a148b53bd7069e6f73d23447f02cf69e95a29b4a5c76358fceaebe2e71f11c06a8f6344ff50a16cbb25d7e333ab3d665e477e1c8b65032c15c3b48cdd988f93b525ef573eae93ba0e5c53f5e327b0f835d4c5af334bddf7c90f2ca1d0f2494ccb463a2d2765940a33324a05ca1cf61416ebc6ba58ef8c7a9099d55337a1275c52dd6bcf4bfdd5da1a6766a3184f637a37d1e93d38ad6798204640791f6b99e3d92b9cb8f1a997e9bd434df98067b0f834c5eac9a9f3086ff34f1375c74a4ded21c88809af732da9c1183e8bc5b0992e86fe9e00fd08c804617ba9bd793647419ec3e2d85c17c7b101cbab20b1cc7699f53c16d316ba988e0f949afef12c371faa786fc9747d018b6d4b5d6ce7a64d57dafe7fea918117311aad7434f6226c01aa5a4de67d4038ad30445ec288b4c6f27de2416bea30b6e443d912fd002f93b80728125e205dcc82861126a62f6331dd36482d29598bd12236aa1fd7edab76e33c4a3ce1ef948af6d1ee8ec0f5a1e25573f9ff152cd66d74b14e3f67c75fdb98e378bc52f1f60c2785dd7c909d7ac7ab58ccdaea62362e427a4e17d25755f766643f155fc3e2da4e17d74111e2eafa25d7622b03c4769223a332a4cf791d8bcd7699a55c663e27b91f8ac2ebbc81c5757b5d5ce7454839d5a7a8c20967a999da74262db7373126edb1965be69ed84ddfe411a84cf47e0bd3bb834e6fff2cc1645fcafd4ab96851a7f79ad43d1d6f6371db012b1d53c76d86cc7bc9f96e94a82357a4d0dbfb76aa68c9bae99a7af6dc0831d6c8fb26c2c4fa1d2cd61d75b1eee28bb517a67f5e4889d089cf9bac993e8377313d73747af64b913a7e9dc7499d83b64432b5aff7b01874d2c5a057da3cafca9d44f235dd57f33ea6f58e41fa37836a0d3d369e0a14a5d30758fc76c2e297be2d9cae8f3a9baddf0fb1f875c6ea4d41f30d2f6f74331b82e59cccbcd547586cbae8629317badee4ad94a8f9f2e5634cf7ae3add8785488919693d18652ff42758bcba85ed852e61eb5855f5f855f2c89cfb7b4da5c7a798deb941fafb92471083f7f765d6e393b90ff80c8b69775d4cbbfb724de2e8c82c877519f168cee798be3d74faae4fcae5305c3e13a350cc37e377ea3deff7d1ceef7c2673997ccfeb9f525fba31f6973f3a2a61576d05e92bab891cfa05c6b327363e1194e7840044137371709a6162f82516c35ec16a2935194338e3bfa672c45758fc76d6c56f3869fcf0398d99c6ee6b2c76bdb1d1a56cc48ee75eee0f6aa61efd0d16c73c5d1c87a0a564f2c6325b6afecab7588cfa60b324d3cf710b5292069929177e365de6a5eb771887be3a0e3d42705069ca7b7456682c31d3fcf63da6713f9dc65d53d444a95bfd3f609ae6eb341d98a26ee9b7f444cdcb457f8c37ab9622bffc88c5a5401797dd437b00b71f23f9d7e45ea399cc3dcb078f69b294ccda6b3f6171ee1fa4d706e688a8bd36998e0efe8cc560802e06f3abcba62d335e0a5336689b4f7d1386ca2f18958141c6d4548861fa4cbc9861965c33defc572c66838258ac3beee9a65a156825b9293f8015a4690beaac997f152606bf6131181cbc478b8719be47cb8d1ff6bca652e8772c7e4374f11bc052b566b1b97eaa5c2816bd95e5f2ad29355c0eff81c56497203364b17a53bab4ca76efc39f582c87869b719faee6bb94e9d70fd3cc48ff0b8bd5305dacc6d458695e1365799878fe8dc573d74ce636ba163ac3797931735b2adea865f45ef2ccea98ff6031dc2dc8f874263b21656bb57c903c5bd7f93716e35b4a8d11f4dcb9a7ab4428bcee98c71b2cb13ed5b1c6cf6152cfb9062b1cad78c833ab6b26e9cf5a1aeee0aee3a485f8a75b8c27953a7432b6c46757ee976542b267417c15f73861e3ee6e0c45cebd1a6faaa9b3b160ec829f86c5f7272912b6c1bdf262c7deeaca1829590ee99e9cf4d616d3113c553bcb548de7f161cd58cf0cad29bd1623b771973ce96ca84d1259586eeb747705a8523fd6823191c5fa30b5889957ed46cae90bcbab13206db830cfeac2dd5908509e3dadb859c0f1e9c4b513c6e66a5cc1dc69badf7463ac6eed781f9e1ea328a1b514d078da4c1381e33ba5d880ed9d5a1eb6d194d8daf1004453afdc01e72e025653433080955620fc24e6211c4389b09973a3ea86e34529cb05148a96195f6b3ad5c9b23600bbb19e076c2c25b056c0bf556e05e09a35f4c08dcb56c1a0c071812b9d8ff83a9ed5e269b115d016310fda786a6b4bcc9e63199f2eee2e045743cbaed5d9002eb791076e42b6accd1d6be4103930be127889b0b7324ba035caf7a04da484b62d4f15e795a065a90df04e0525e9ee94f01a028b9b9ad0536d03a6f6ed3d4c932831d50798bc61641b101db5ad87683225a23a0251a5558ebd56630fce144a386d9d9ba9d50d253524e92e379c2e9cfc6ac6b793e1ae7e9aecdab101e0d00e1ec0a99400eb810cc8d5e4a3b436007aa1b907681a7dd5c1ed56499e326397cf9abf87076d0f6ab73e558ce47abb91db5197af0532def46c653cb5e9950d80ce6de9019a4109881fd2e4cd305b2762bdbabab2c95791ba334fa70b0b2b16f656e604680344fe8f82389312223f2706c2e39d897c334f9e1d57cb76a3dd35fa56a07b711625cac6d2a7297b5b2fab19b3446bd2065439c0b7cda6afd5abade6d570960d88a6ede4219a93fd81116f5dbc4d03231b77f6a0cdcd56ff17ef998093be54ef844dcda43fea7ae0f6a404d79cc15a7ea5c6ce6ca99f5ddbd543b61775ef17b435b839e508d11f067d9b1df03682defd7994f01a017bf3f65a747778b501d466d0ba9c4f3de0365978ace5bee9307c7b820a11920dc016c53d600be807dcb0e6f88c84f3416c00573ed903b77776c78e12a74c175b5676968121de85d92c3b9327afd8e2fee777f1902dca4e9fd968e60eb6d9dbbe7ca2b607ad90125a03008ddb954dcda68da0d9b498da8b8d11f376568bc0bdc374bce9a295a2725b6e05b84f80751551826b02dcbfadf32cf88c5a05ab383b950c3e66c4c5d8dd473614585909f570dc7407da2816fc5c3a1b001e251aea756bfb84fb37b8c87ce27138eaf814e9a6ccedef2d174fab64bd2e61ca34df4dc438cd97c029cfb919f7fde7a6f573b981679ee5869e00939be114d4dc40cdc0dc889df9b921e615e7867281b9812b7cb9a10af0dc8cfc496ea86ec2dc500da3dc40336473434d0bcd0dddd5a4d3199f08989b3483243765ff4cae764e40ae76c0321799c0939b62fe532e323a9c9b66842537a3c91eb9c860442e5adfce0dd8e24b7e4fdfab9a8bf4f5274bc5de4c969bf866aa198db9a17a4c72034f77f0d640e9d72ef5e16ba096fe1f5f9ed487afda59c6215c2d29b875b052ea3a18b70c77351a2f1753ef603bc8a909f974689fa4c374b941a27be885aa6be9b4a99f501b6b12248299d4c80e071d8efb988473b09538af0038979b84b3af95382f05d38ccb4cc2d9cf4a9c2f039c2b4cc2996f25ce6f01ce9526e12cb012675de03b579984b3bf95387301ce7293700eb012e70480735f93700eb412e76280b38212e70e1a9cc18f5b184887b6679c08ed9fa058aaa49e74b150d62d1311bb7d0afc35327ccda92c7324c057958d8cbe14cdea507dde221a4087b31115cef600e76a93700eb212671380738d4938fb5b89f30ee6e15c6b12ce022b715e0c70ae3309e7402b717e0d70ae3709e7002b71be08706e3009675f2b71ce0738f7330967be95380f0138379a84b39f953857019cfb532f7048d55e4fcce8fd2d6c119d00daea07646b8af02a3135a35cfc9f3fcb429332970a604f50693f9012606b09b0480efafa77d9755577f744ee4307b23615c82300c883a8d7fb2a4b0c3a0586bf5f21deb5af3b6e0af0960753af464fd51da73fdb88b000ea44857403f09a876403a9df6b264f77b1dd8f0e06d9ff504aa41d59e28ca4692cd81c449b5d402fe0020edb921526288e5799c850d6a5427936b0d3c3295176612ce1945e6e915cdd52f184dfe9e7d2c1bdbe95b0a4757e3507ba3315e86d81cd1e4109baa9b4d901d91fe8d88e0ade0300de91d9803728fbf0c8b2f84b00de5194f0dab0d455fa446f49da6d4c06f36700f3689360120eff92c1fc15c03cc624980516c2fc11c03cd6249884fd4864307f0230379904b39f8530bf03308f330926e16c2432983f0098c79b0493b0938e0ce65700e60926c1b4b129f92d8079a24930075908f33700f32493600eb610e6ef00e6c994307b489865ce4b65e2aa96bac26e8cb0479b117ad69654c88f025dcaa7d0efa1b24cac557457b32e15f0ecebd56c04acf454fa5ef8d284ce37fd825775d85d2923ed7423eb856f03909eb6253b8a13cf1f24ccd02751a1fc1474149f4e8932d7e743f9a270f76877be16d8eb244e3737de1b4922c43d224684bb0bf09f6750e2eee4c35d9290e5f1ba8077d23829e003a800b70080cfa4de59c83ff091ec6ddde163fb868e5b020f7b1625c66e4955ab42216cacec972f71a096887ac01a017ab5a868e135591b9bab4f031f7c76367d70625dc11b86dbba7d707be022cea1c4ddd587bb50a8c12b60ff57507700a8cfcd46452d5873d74627d11d78e4f3b281b28f98aaa31ba5cfd2241e32abac0ffcedf9d95ef9a93fd07ca680c92d778910b782d64acfa3b2d27b00da0bb6c494b3e42a98ed53ce0a00d20ba933fe08017195dc84abc2113783b913cff8765d6a6b3277c337fbba626a011f7a11254ab5a7575fe7bf1532f042d18395256b242b868e03082fce06c2815b1dc24701c24bb23185bc6fc06e41db3de500e0292fa504db12143ede267f5c055e51b27b1efec3c03a2f33699711d2d5f264384f032da0cb4dc249bae2930ce76690c5af300927e91245329c6f009c579a849374012d19ce9f00ceab4cc2493a29970c6763e03baf360927e94e236438f300ce6b4cc249ba970319cec900e7b526e124dd69840ce74a80f33a73b763239ca84bb61ddb77a058bade9c8d080851926d44b00a58e90dd9d9d9ae8f0fa9cd0bbede671ebe1bcd59e169e3e4c75b40a6be295be3416a2382496c2a1b274f6f58e27cb42e1b5d1e64280f05567933fda45c389d71a153b070742365779c2b6a2ce3d374ca58d2615e1664f1c600e62dd928c7abc4d4316f245d1df6a0aebaf923fd280b1f32b4334196df6c2a5ad2729d0cede5c06a6fcdc6bcfce05bae92c124dbf86a3c80799b493009578c90c11c0360de6e124cc2f59f6430770330ef300926e1ca643298fd01cc3b4d8249b8669e0ce66800f32e9360dab8f3e24800f36e936012aeff2483990760de63124cc2f9716430bb0098f79a049370cd3c19cc0200f33e936012b680c860c223b9efa78499c3c2ecbfa85b384b58be932d9c7d09b4dd1fd8920bbffda345845e946cac281fd8ea8326c1242cdfc9600e05301fcac69006ef485e23a621f223a0b334e9900cdf4e00dfc394f8da017cc9abe4b8306f13609ba7c7be09803e928d19c61ce8d635c3781340f86836100ed8ea108e05081f33bb3a44d8ab49561dfa1954871ea7b6d0f43bd0126e82413664d10258e813d9998a3038fb5311c832f801c0029fccd662016ffc1c0e01938f9c93d9e0b1c0069f32677daf8d5b538e03289fcee68e0bba35be6166c411b679c866c47507d3b89eb10936616b9d0c762700fbd96cb59094a71d2faa4f5eeba8442c655d9e0daf4bd6e41c055cc573d998791c7cb2828dddc8ed404de07993700eb212675d80f3059370f6b712e72d20b3bf68124ed27d96c9709e0d70be6412ce8156e2fc04e07cd9249c03acc4f924c0f98a4938fb5a897316c0f9aa4938f3adc4b911e07ccd249cfdacc4b90ce07c9dba5dc4bb4da639ffe742f0d3e3a60bd5563bcf09db450ba880ee0a80be4109541d27959ffdfe50b29dbbd601786f52c2db9e05dd142d717765c289887f52413d18747dbc652254c29e5232a80701a86f9b089570323719d4fb41abfd1d13a11296f064506f0350df35112ae1444532a83701a8ef9908957040840ceab500eafb2642251cf820837a2580fa81b95b5ad83880f73540fb2125dacc4e8b2744da89ca5a67836ad5479448f359f2587ee2fae251ceff5738fff2bfdd88f006eb12b1469e2b3b85f181bbb52288e58ed358c3dce32d668af6971afa237419a3a81281ef8da912e1637336c8b0f148dfeb808bf8243bf3a3b6a6b3b9c7037c9f9abbd900e15a1032b41f804cfed9965cbe9098c949770425cbe64700989f9b04d3c693bb4f0130bf3009a68d27771f0c607e69124c1ba7471e06607e65124c1b4feeae0230bf3609a68d2777af0630bf3109a68da71ced05607e6b124c1b4fee9e07607e67124c1b4fee3e15c0fcde2498366e5e791a80f94336a6848799e764e32e61fb83d6fa8fa601b5710fbb8300d09f4c036ae36e61ab01d09f4d036ae35e76eb01d05f4c036ae3ae611b00d05f4d036ae39e761b01d0df4c036ae3ee612b01d0df4d036ae3de76e500e81fa601b57117b10a00f44fd380da3849bc1200fdcbec7d48083d2ad93e24e702bc7f53e26d2cf1ba27269489f14e57762923dce6bf361538fe8f02f7cf9699db146ca37ffb86876f0536f92f25dad6cc5b2fefb4279ccff8f49ae26c9f9c4d06722800f9bf6c6d3c3059005bee9ba334daf9ac428468f3c6035d41a6ff8f12689394de9270b7a60654e8e2001d3f879cd85f168beccc1f953a2ff3855e65ce13fd46586344647810259468c98e7d6e07d0c628d1aa9ef96073e6fa5b39347c0c98051a3709a68d43c3670398db9804d3c6a1e14301cc5a26c1b47168f80800b33625cc741bb7d9bfa57f0e287eea50a254f38c0bd8d6b47ff20280af2e7dc528c8ca2377f941b9b058776101a965fe4c85f62c90c9eb51a20d7b42f1202b374a3f00e0ac6f12cec156e2bc08e06c60124ed2c95e7438416747439370f6b312e7230067239370920eb491e1fc12e06c6c12ce022b7132e03b9b988493b43544863307e06c6a12ce0156e21c0d70363309e7402b712e00389b67bb85147c1b01c2599e64db08c400da1694687762c95b538f61eb18dfde623553dbaf4d753e2f667c4c7dbab059be55f54ad1739f8551a3e654f6db9179905b66c31d04dfaedac689b4db81aa542b93700eb212674380b3b54938fb5b89f35690d9b7350967819538cf0138db988473a095383f0738db9a84738095389f0338db99849374c300329cb301ceed4cc269e78aa30300ceed4dc2d9cf4a9ca500677b4a9ce9b6a64acce8840b63c85a4497806667074a94706222dff5bbca2151ee28b3d25166b6dcffbb58b4e54bac9e98b80fb0cd1d288166b61d206176ef448614d868c72d99dda138d26d80c926db5c069a98399428d5cc2575c2b6bbc9ff62d103ea9d3667f7c1bc2b4156ef4409b32980b9b51c7a3a01c0db91125e279678eee14af943254bd7a5ec2d3e209c72332246047810f09a3b65a3af3eb35d13090b24b2d51cd703dbed9c0d2f8a4d594c2c900658b96be2745024753109a68dbb26ce0030bb9a04d3c65d13a70098dd4c8269e3ae89d300cc5c9360dab834667700b3bb49306d6c134d02307b9804d3c6a531c301cc9e26c1b47169cc4400b39749306ddc35711680b9b349306ddc35713680d93b1bddc66186db6c5cba7514009a671a501bf7533a1600ed938dceb981d9ef9c235baef520f3e0f5dd923dee593b23ee242a94bb826eb87ed9b0c3c15b5127f17bc00ef329e1a949b1c1e71bf36d548a989a2ecb11afa7ed2826dbb46211b0d002fa8ad132312e394340ac10a28a9dbbd5ce874552a125e2d8673ed7d8bee1df86c062fb67a3d73dd96283f5bbdbd7eb7e2328d10764a3500a5681b7b1ff6800b0d2819428739c9bd16254c8ddf867155bcb263bff2f769e2d7104bb82f8664025c252f9567e456c79c2a640f639811d00de41d97602fa8d04668a3ac04ae15db9b815b4964b77363c28ac0653a26de1dce8ed116e3849b84915991f6d0eac730825c20ecc9bb6502aadb25438023dd82ccd0721ab48f50505d42e9460c36f7241d8c744e645cf03597da84938490f3a21c3f900b0ce6126e1ec6725ce8f00ce5d4dc2497ac80919ce7f00cedd4cc2596025ce36c0770e3709677f2b710e03384798849374f4880ce7748073a44938075a89730dc0398abe032fe8fcf87e560e13ff0d0aa2d126c1b47198b80eb0cc3126c1b471a2ece7c032c79a04d3c689b25f0098e34c8269e344d90f01ccf126c1b471a2ec6700e6049360da38d0f13e8039d12498364e94fd00c0dcdd2498364e947d17c09c64124c1b27cabe07604ea684d95103533fe0364e7e92388389d0528752c1bd0054e2a750c2ede2dc4c756479936aca84bae9c68de0809c12463830d7990a343f044b819e6a52b708e9766a64dd224703bb9d66124ed2cdfec8705e0570ee61124ed235c46438af0645d6749370923641c970be0a70ce300927e9865564387f0038679a849374ef44329cf580ef9c65124ed29d3dc970f60038679b8493749d3b19cedd01ce3926e124ddd9930ce73280732e25ce689ba413a225db24fd17502ced4989b68544dbdff96f850cbc506c976efba65557320fe15e9408e1a6555cc43a96b5639cc9e0f502f6378f129e6e3d52d013e24638422b448708697fd3f35499fc38e03fe753420eb7bb27a1bf24dbddf330807201254a35d55b6db256220f9498cad43112385a421b2503fb2670047b5382cdf1812d13abe7aa84186ffd5caa1e7d1b07471e0778179ae30208a7e09059eae5c0052cca064a6cd55cd60642c896722f0156594889b2934039c17969ba0056e2bcb4467eee65fc854e559e031f298744dcdfc73ad71247ac8debe6ea330ff0624ac0eafce2bea2829fe5d5f264f8c601fb2cda925ed3fe02e81480b2981265ab3428554c49976c3f1a23c2782a287c4ab2514dc2ba421237438703c6231c0d4a454b9f0c6f4b2a2b7d1658e9124abc6aaf7977036af7ca8ba73962cb5f2e148ec7dbbc7dff5fa0085a9a8dcebbcc764d26ac8992ad3bfe02a05d960d9f8ad5443d9f4a583491f9d4c341a62fa5c4d8d8b999267be4d5d6fd138465724f6a5fd66e06ec6f9f6cd85f9f6a1b2c66ee1ca655a2e73d2b7da074c791038ccb293172011cd868117009738f90e0af6e10c3192ecee9e257be61106171b3880ae67000b36c4bfac451a29021de1a6819954f3c1ef8c4155bb2e593d8c9418892ac93a337a8b2afcc06ca3e297a35ed1e2d7a0b64ee559428d56865c156375a59091096676300835be318e121570b2526399f148962672a5b2b86d8f8a63fbcca5e6e753b670400bb6f36badafa6d55a7171d080a9c8a2dd9ab9ed8d566e34acc99c0122b2951aa0909055b5197ef81005e1525bcf62c711cb294c175195b5bf7efdea012b49a126bd8f35a075bb917f7b6c05bae3109e7202b71c601ceb526e1ec6f25ce6b810f5d67124e3b37de3f09e05c6f12ce8156e2fc10e0dc60124ed22375c870de0f70ee6712cebe56e2dc03e0dc6812ce7c2b716e0038f7370927e9b600643897009c0750e26ccd542707ef6e4b5e8d6e7b37dcbf00e481d9e82dca67eeb1e1650e89ace1236ba54f05f80eca46b60ebac06a10658f1119ce3340ebfc609370f6b512e79da0397988493849779623c3f916c079a84938f3adc4f92bc0799849380bacc4d91cf8cec34dc2d9df4a9cfd00ce234cc2497a7c3d5d4509e03cd2249c03adc4590e701e4589b39e1050e254d9dd695a5c32192eb2a552759887eb684a5cd116ee136e1d49b670ff7b508a1f4389b61b4b1e2f4f9c583d8af105d32bc4df7ca6c76a21728cb05d1ead99825a16462fe752d9f12ec08e8fcd466bbdafe8f8c8f2983ad9aa8a5ac0563751e20bb7f894b0038ecca30e0505d0719428d50c383ec7681ce353b2f8c4ada5620e5c85d513b5f60799f9f82d698d89b33a6c3cdae16690b14fa0ee0e9e268a9362f9d10c86cd5f27dca8942c5bd70336796236fad50bb6d27ef54ec0224fca468d3393d566a4633f64abcd2600b4279b8a96b45427437b09c8fea764a348e2a57aa5236825e37b2114834d9eb3e400c8503600567a2a25ca362ccc3ce27c2b0fc8790dd8e56926c1b4715af6eb00e6e926c1b4f1809c5700cc334c8269e30139af0298679a04d3c603729e0530cf3209a68d07e43c0f609e6d124c1bd7603c05609e63124c1b0fc8791ac03cd7249836f6237d0a609e67124c1b8f08fd0cc03c9f12663b167e4236a175924d7add0b34292f300d28a18592015d00805e681a50c2d61019d0b100e845a601256c1191019d0c805e6c1a50c29e2432a05301d04b4c034ad89b44b74e0800bdd434a084ad2332a0bb01a0979906d4c6b5422300d0cb4d034ad8b344067434007a856940097b97c8808e0140afa4049ac3a26ea64b58e6934dfb7a1ee0bdca9c56fd202b87e28e0630af3609a68d4371c70098d79804d3c6a1b8c300cc6b4d8269e350dc9100e67526c1b47128ee1000f37a9360da3814772880798349306d1c8adb0fc0bcd12498360ec51d0c60de4409534d9e4dbdbc6080985c4b6895b5a9409e091617dc4c09125fae15648e276125896c5ae24880f6164ab49d3468dd951a1cde4a36512ccf2a4fd99eb7b1fb8ef3548037d3db6e31e39367f9a352e6ee665ce63c19295aeefce8b049cc3bbd658c880c0f82ab4a8636970aed7600edad9468e196d18980f16371b23057990c6c3e28b86ea3041b6ecf631b1ba143808dde9e8d3a403edb3a17d0b40436790725c8f01bf5da38d5614780f34e93700eb212672b80f32e9370f6b712e73dc06bde6d12ce022b715e0570de6312ce8156e2fc1fc079af4938075889f31d80f33e9370da3989b118e0bcdf249ca4b396c9709e00703e6012ce7e56e2ac00381fcc469bbdefff9136fb2050037d68cb7486e87b996c07db0f807d98122c3f85d5b3cd328970b2f34131b3f114d60e20ab3f42098edfa8e36bedeb816f0a303d6a520133d8cac9886d40767dcc249ca45315c870d606381f3709677f2b715e0732fb1326e12cb012e71900e79326e11c6825ce8f01cea74cc239c04a9c0f019c4f9b84d3ce6506d301ce674cc249ba1f0819cefd00ce674dc2d9cf4a9c4b01cee72871361238176bdbdaf6b5aeb707d89ea7c4e63fd6967358cd2a99db450145fb7784279c7544d6f63e0754db5fa0c4dada87b5543bf550153b6420c93640ed0ae6c7bd680a48428b2403b90300f9922920090b1a3290bb00902f5382ecea03b998254f790d3e3996d066c9bae64e06a85fa144bd1d0bb30e739610436abd9da890ee0590be4a8954ed133fc8f96f850cbc50ec126ffb4cb8274095e9354a846a36bc720095224bf30ad35809af642b2ba45e01d5a6d729d186db82dfc605835700946f50a2dc8979e391ea3acb915d2cb6de2f11c2d576d27005bb6a37d97c64443d00f9cd6cb882ccb63e275cd74e56f6df0bbcec5b9468b70fe10a46387f55080b266d4d1d10a3dacb0694fe6f9b0895b0d022833a04407d87126af8ed57fa59b9afe23ec0abbe6b1a501b277d9501a0ef9906d4c67d158b00d0f74d036ae3be8ac500e807a601b5715fc51200f443d380dab8afe25200f423d380dab8307b6f00f463d380dab8afe24200f413d380da38a45c08807e6a1a501bf7555c0c807e4609b429f3161f64f9b05cb20e9189cc83f73925bc1c1675534a42db24db94f229609b5f6cc9aee7a9ce27fb387f1531de374ad83a3a89cc524187c8979428d5cca63e6290a45008d2f580da3ddef436c8f85f51e2ecc1fce34d5ecfbdeaad9f2df6b459cddc2321b7d62ebd9d81057f9d8d7efd645f1ba4679fd0cf9215631f033ffb0d25dace3e6b2e63f098f2598e985211da1821908b2d61e3e4c7893e98d082875261be0b60fe36db16ac873b53b804becdd012216e056df1761e15da238173f88e126d33a66ab183b25f8ffd990a5f29b0ccefb351d12a624136b7b2f144afb9a066f00325ca369a4c8ea32cb0f2acb9d5205bff68124c1b2d737f00f3279360dab8c57f2580f9b349306ddce2bf0ac0fcc5249836eeae580660fe6a124c1b67ecad00307f3309a68d5bfc2f05307f3709a68d5bfc2f0730ff3009a68d5bfc1703987f9a04d3c62dfe9700987f65635044f526f1ae383e9fb9c411505c0d1106b1352c633c11b4d5ffa6c4db5163ab70cc29dff93f9f4e5e587d9de9085b2ef02fa49d00d1334e04b73fb0dd7f4c864be818c8e00e0070ff35192e61e58a0cee4000f77f26c325ac6c91c11d0ee0fe4709b7ad066eaa028c74032db222ec1080939f90630c4ed2edddc8705e0a70c64cc249baa70e19ce8b41052b6e124ed282890ce7a300e73626e124dda2880ce73700672d937092f64991e18c03df59db249ca47b3992e1dc11e0ac63124ed2ddf2c8708e0538eb9a8493742f47329c0b01ce7a9438f1296441da4884e3a1642da43f40b1543f1b961a7cc7661b5736ed007036300927e919f264389b019c0d4dc2d9df4a9c77320f67239370924e7f20c37919c0d9d8249c03adc4f90dc0d9c4249c03acc4f932c0d9d4249c7dadc4b937c0d9cc249cf956e23c12e06c6e124e3b57d497039c2d2871a65b719798d1095b4464fbe69d081a9b2d29517a4b12b6c0d25ab25924db802a7b2b4a7c6a5d320f7889b043257ba57cc53e7831908d5b53c283079ff18f4a0505be1c71eb3c51ae3fb0ca6d29c166b6fb2de114db4e54482b809f6c4389b4b506295ee4d857e05c056cb3ad29206ddcf1f66400b29d292009a7cd90817c0d80dcce149036ee6fff0200b9bd2920090b1b3290ad4061d3de149084ab8cc840b604203b980292b0c54d06b21b00b98329206d6c6f7704203b9a0292709d3019c8be00648e29200957af9381ec034076da929d69501c690588ac43e37c5001da9112a5da241d9e9ce0aac2676824776ad87c52420b0075274aa86ad51b7f25fdae1ffdaddc10a00380d9d92498366e08900b60763109a68d1b02340530bb9a04d3c60d01da0298dd4c826963a95e07c0cc3509a68d1b02340230bb9b04d3c60d01fe631ecc1e26c1b4714300062cb3a749306ddc126d6700b39749306ddc12ad3780b933f5248331e2a048aee20409b4d4f9984fffe79f91c123db35b609f091bdb764f746e2ceb0846537d9eedce3404f515e36e66b78671606df1796b01c27db17763db0d13ed9e8cbe4fd459562271aae4271423f91cd135f76019eb22f25487574a9b745b4bb87bc77bc2e17c841a62e906cac753e0920f7a384dcde07d905caf7e1e685d3686d3ffc0056408bb53615d6e38177cdcf8677e5f3308b19dfa89fff50ea7c3252d871115bbe55cd861b08ecb5201b35806075511bdb48fd4041d53fdb4b5383d70108d192d5016680ec3f209b5eb5d451c23b9b23559d95d0ab92d5594f075807666382767f9fddda3cbbfd7690dd0765a3151f6c68b8af955d222f826268b049306dec127907c01c62124c1b07851f0330773109a68d83c2cf0198434d8269e3a0f08300e6309360da3828fc1080b9ab49306d1c14be17c0dccd2498360e0adf07600e3709a68ddd73b70398234c82696387c71d00e6484a98d1f62b266d1191edc6b513689b8f32192e610b890c6e2f0077b4c97009eba564709b01b8634c864b584f2583db16c01d6b325c1b7740dc0ec01d67325cc2b63f19dced01dcf126c3b5f1d0936d00dc0926c3b5f1d0935a00ee4493e1da78e8490300777793e1da78e8492300771225dc5ce61f37d56f24940eb937d78ad00b8f8811e1ee0c704f3669afef4194755db2c58d27019c534cc249da7420c37903e8ae996a12ce7e56e27c1de09c6612ce7c2b71fe0870ee61124ed2538fc9703604be73ba493849d78c92e1ec0970ce3009e7002b714e0238679a8473a095384b01ce59e61e8a62637feb6fa0589a9d8d2d80f94e396bc08cd3ac4c2f27b3ccc9ccc337c79ccda86ddc89712dc8e4732951b6726ea63937ab19df9d968b5ae9bcbecc797d9568d56f1059bb54dcd96791b58145ee998dfe26be9ccc5d96b3d051b7d251a748f0e02b4947307ecc399fb15fe808e0c590bba2c4d6ed881602b87b9993dd6ddc79ec3290dde76567eff9813ea4592878c856362f03e5f6fc6cad1a2d677c89d87ae77145f50b592ac1c926f9fc09b2f4826cd42dbd75cd6a63f46251d4a8eb48e765be38778d2882563be2888f2427b3d1f9c046f736152d6965890cedd5c06a176663937fb8d9202fe5f1d5a2b696ed7f00a48bb2e151fb6ea51ef56f00b2907a1d3ecfd6f0b349ce934251e7ac1015fa0a2702aa05efbd35daf965ada803b86f9341be9a6a28ae0af8d6c5d4ada55435511553d211cd47a9309e026aa1459418733418f1c352a601b730c2d1a094916ec1de92ca153c03acb4d8dc1a0061fb89ac06f011f0b22594683b09b4e3857d4e677c3978896cdd170b516a9f93e5220146ca5a812b7eac732d71c4127a58b2fa4003007889d9ae81708a3a996bf81f700d4bb351801531fdc61ca3e45648a405d832aa022c0f605c969dfefb7ed9ef46194a6585c7017ca55b66642948114538d99cac801a0faa56fb6463291aec8856bdfa5e3fbfdd8dd31d4161b43c5ba7252a98e9cb7e7bc14e0360cb28c1b69060f39dff56c8c00b0562dbdbfb9702842bccd962cbc6cd386600942be9bbf5b059ccb04b6f8c884485a8c857d22125db00ae2d40ba8a12e98e21ac7386e8f8e3b0a73a7fa9c1e64ada3ae83e5475d03ea012554e89b81d4b9c855f2e46ea97a5740336aee23f10549df6a504dad307748df36291b68919ae414a089dac417a25805e918d397b4bd13ed55909e3fb83297136a2c2d91a38854a93700eb212670ce0ac320927e9e1196438af01b582d526e12cb012e78900e71a93700eb412e7bb00e75a93700eb012e77d00e73a937092aec527c33909e05c6f12ce7c2b71ae0138379884b39f95384b00cefdb2d1a1e79f193583b9bda6f6f6899601841bcd5d6e63e33e265f816afcfed93e2478ba5082db24c738daf96b89181e29b3dc5e7300d403cc99954f689f64b3f207834e9003b331af34d8a48759420c6996ef44857426407a903947acdbb8bdf6f520a31f9cadb2ddedcfe782d6b1ac1d92f52715c2c740d97e4836a6dd708425d5c70a6e2d739c9f01180fcdeec446fd4938e3e407593bb4856c4a4e6780f63053e78c92b68dc8a6e47c0fd01e6e2a5ad28a1319daf300da23b25134f5dbeae691f405088fccce8ad02db01501d9f8654f80efa8ece02bf0d537b380ef00aa490ca340ddf268730eadee67e53ca61b812d1e63124c1b5b3d370198c79a04d3c643852e0230379904d3c643856e00308f3309a68d870a5d00601e6f124c1b0f15ba10c03cc12498364e473c1dc03cd12498361e2a743e80799249306d3c56f56600f3649360da78acea5d00e629d998c61d669a0ca175924d4518069a94a79a0694d042c980ee0a809e661a50c2d61019d06e00e8e9a601256c119101ed0e809e611a50c29e2432a03d00d0334d034ad89b44067408007a9669406d9c70b813007ab66940095b4864403b03a0e7980694b067890c681700f45cd38012f62e9101ed0a809e978d3d96bd05afbaed02f186a88dbd4ddb82f972e79b0cd7c6dea77c00f702b337b522c44b36067f09700c179abb9d1061cb8a6c82cd1860b9176563e262dfeaeebe62e66e92c1ffb6fdc08ac79987f1624a8cf9692d7494f3ff15cebffc6f37223cfb2f111b0872652754bf39a67afe68e2264415b46ee20caa5520eb812d5fb2352402613d832c11668144b8d4a4757783adececee088abecb4cc239c84a9ccd01cecb4dc2d9df4a9c778362ef0a9370165889f30a80f34a93700eb412e72f00e75526e11c6025ce3700ceab4dc249bad33819ce2280f31a9370e65b89f32880f35a9370924e0122c3b92fc0791d25cea6cc5b7893e5450f64dd816b01bcebb3dd5fa55fc8e83648cb4593d36d6e92b6f17fa6427b21685ede908d7d47f942dbd18c9f7953cea60974c55208df91840b2c1402e0f19695cce67d1f7a03ebbdd1a4539649b71824c3b91fb0d89b4cc249ba012619cef301ce9b4dc249bac0960ce785a043e416937092cee927c3f930c0b9d9249ca49bb891e1fc04e0bcd5249ca4fb8992e1fc17e0bccd249ca4bbdd92e16c078aa2db4dc249ba9f2819ce5100e71d26e124dded960ce79e00e79de66e3748d83942b6dde07fc08fde65525fd3602b67f76f0f70de6d12ce4156e26c0c70de6312cefe56e2bc8d7938ef350967819538cf0538ef3309e7402b717e0970de6f12ce0156e27c01e07cc0249c7dadc4b927c0f9a04938f3adc47910c0f990493849f7d921c3b91ce07c98126777e65f12c1c7938a1d1e7c3f5115cff48b2346387f558819fda47343c93683bb1834491fa104de9aa5de5722d1b3928124db4f7c6760b98f9a02d2c68dd93b01908f99029270ed1e19c8e301c8c74d0149b8aa940ce42000f20953401296ee6420d7816e90274d0149b89b0919c8b380453e65dee11584deb21315d21250117a9a12691f9658f35c8d2e5fc4f7c04f9e3a96a57ae8f354fdf79b00fe67b2b1bf59f0194ef68d339d07fcecb326c124dc8a8b0ce60500e67326c1b47104f40400f3799360123639c9609e0460be60124cc24a3e19cc5301cc174d824958992283791a80f9924930092bfb64304f07305f3609266113940ce61900e62b26c124dcb2900ce69900e6ab26c124dcae900ce65900e66b94303b306f190d3f4d89778e8c17edf8b1ceff4b05c66231218c0be64bbeec3e347531f3c0be4e09b6bd003bc979a148ac40827b3d2d64cb05c49162bf91e552e858e75ae2bc554c87956c07a8ba00eb1be69cf669e3512d9783acff66b6cf4a7655e1d97da4b0576e9d935829abb43cdbff03ecf32d4aa88d04d4b5e200402e42c12ba1ccd6b954d8da036c6f9b7b72a28d1bbb6d0668df31e70c8781561ebcb60af8cc774d8269e3c16bfb0298ef9904d3c6d27c1180f9be49306d3c786d0580f98149306d3c786d4f00f3439360da78f0da3c00f3239360dab815f61c00f3639360dab8f5f55c00f3139360da78f0da1a00f3539360da78f0da5a00f333b33765272cdfc9bae49e00783fa7c4db9279fd486b441731df7369b1e83aced2bee12751415cc13c885f5042ece2dcf0ac0e3fe39dc7858e3233c4428422a9d2846adbf5de1cedbcb95658b6fb0519e8ab63546b3d80b57eb9253b90a73a9fecc3f84edf55b4a39a64367b0e983df71525ca4e91fd2ae99e4c649eb53e00fcb5e9806d3c4fe45800f89b6caca383a39fd8901df9e00719ce1ea010fb96126733a6f60aedebb35b9bcf0ed9048aa6efcc3ddd86d093920d825c03d07e9f8d690e98274dde03c71bf524043b82aa3af51700fb83a960098b2632b0b541d1f4a3a960099bab64609b02b03f65a30110ac6bc5c6cee881a0bcff391b369ac9a83d618f155971752600fb8ba96009fb55c9c09e0cc0fe6a2a5842574006767700f63753c112165764608701b0bf9b0a96b0824506763000fb87a9606d6c6b750360ff34152ce17c2932b04703b07f990a9670561f19d8c301d8bf4d056be3dcd34200f61f53c112cef62303bb0880fdd78c8385668a7e57ded05d22c4ada0adc99e47857623e81ff85f363ab1fbcbe1ec328744d606b2c92cf3186099ff99d3bd62e324a0390025ab63d03ef8a447fe920daf9c0b3276cc249ca4c75692e1bc1bf4fcc74dc2497ace2219ceb701ce6d4cc2497a0a2819cedf01ce5a26e1243d909a0c676be03b6b9b8493f4b874329c0500671d9370921e484d86731ac059d7249ca493cfc970ee0b70d6a3c4996e830dff08a98d95f84200b3be49306d9cc95f0460363009a68d6b99e701980d4d8269e35ae6f90066239360dab896790e80d9d8249836ae659e0b60363109a68d6b99a700984d4d8269e3f4b13d00cc6626c1b4712d731300b3b949306d5ccb3c02c06c4109b3957333d591c5e3ce8731f828d09ca43d9ddc1deec93076a2c2c86357b776ddda3ee16393848f12ad66de6e2eaa4651e93c1fc74ac4d822275ae4dc2b208b1cab9ae7fc1b8efd02e75fddf358aca9a3d118b68e958ba75c5eb190bdc2f9956b56c9faf093765a725368224d21578c408d70985739ef4c672522f4f5ce775ce762275957566f6db85a20c915c93dcd79b69af1d5543c84958e26cb5885887129db206658bbf1cf8dd5139c4ad81a498003cc95baae61ee0efc13e4d857a913e742a14985f34e2d118edb17911b6b0ceed47a59fedd2ca1456eac85f37bf22e6c9c015c985429df4c364fdd9b3ac34e0ec3356cfddb5836c8154b58fd6f4f60ee98742912925f4795032b03c94b1f6728af7102a532f9c564c64ffae2bc739cdf478ba785c2eaf9925af7d752b6c491e75a3097c0d3581f179ead62b1e63227712b9a2c2c902fca55672babb4ceebedbc161be0fccf9d14d1bb7a3a446f79a6c30a79a79ea797c9f3516a69ad786689e9fd66598d79807431729d16ff7e89a05822a44e481bd3f4f1c3bd49a314a99297c7d3626b8e7feb3a62b0dafd879b699b5843e7af594ecabbc24b9ccc5621b242056313e3acf6ff036d1519274d9c0500 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/1283bd55942bd05459e1751b1c37b944.asset.meta b/Assets/SerializedUdonPrograms/1283bd55942bd05459e1751b1c37b944.asset.meta new file mode 100644 index 0000000..6f3601c --- /dev/null +++ b/Assets/SerializedUdonPrograms/1283bd55942bd05459e1751b1c37b944.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: edb5bb83c653a4646a49d7eeb3164916 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/13a6f181596d6094c8b946028f390ace.asset b/Assets/SerializedUdonPrograms/13a6f181596d6094c8b946028f390ace.asset index ec5f241..efef429 100644 --- a/Assets/SerializedUdonPrograms/13a6f181596d6094c8b946028f390ace.asset +++ b/Assets/SerializedUdonPrograms/13a6f181596d6094c8b946028f390ace.asset @@ -12,9 +12,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} m_Name: 13a6f181596d6094c8b946028f390ace m_EditorClassIdentifier: - serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c16c5b6c0274008bd57410936a2022914111b10aa8220042c881048029124c42404b062c7de3b2af6deb1a362efe5dafbb5b76bd7dbdebbefdd376776367bbefde6ecb79bfdce975dde855f32d976f69cff9ce9655be50bf92f6ba8fc354fcc16c562b8982bcac40a5123ff2a9661b5fc6f1dd9e767893a192e95bf4be5b5a12237c593f06f48563ff97b9a3caa170df2c99562890c2bd5f539a25cfe3d4d3e5b2e8fe06c85fc29977765b5910fcd1513c54cb19fe89bd53b858879eaa17a7d2e0becca6a277f4f106be4d572a514bc245f5dea2b7fcd9157ead5b56aa9b47ddf7cb14099552daf2d91cfd4892a2973b192d8ae9b34244bd9a4822e3aeca8c3cef2a7bdfebb95febb9dfe9b3a67cbe88a6479c9b0efefa4c36e21ded91dc9f2f34efb9e1e21ded941873d43c8e8a5c3d648466fa4a37dae8ffcc9967ffea08ffb5ac7d98bf4713febb87d371fef6cadc3d5f2a7adfc79191d4b4f6d35d092d57aad3edfdfc5ec28fddc2baee357f5f1563adc5a8747ebebafa163088fd1e75f47c7101eabcfff091d433850eb2075eb7d933e37c0c0cfb66f8dcbbe35967dad6bf5f136aefbd7eafbdf40c7101ea7cfbfa98f73d179088f77f1385e878390bec2c574b08b599b143adf653ddfc63ebf6dc038491517db213de0fa5b2ebd8e74e975a475adcd267dbcbdeb7ebf2c77683ecb26163bba6c6dabc323f4df6fa3630887b86c7a27d1a6ec89fa382f2063af3467f3df498727ea67df45c7109e80de77820e4f42e776d6e1c9e8dc49e81c84a768d9efa1636957cef32eb91d908c5d7438543879b8e62da6eb73393a3c4324fac21996fcb625d6fd391bf5f9612e7e67baf8d9c736bfe13accd7e159fafafbe818c2b35def3f5bdbb7d125e71c91988f9ca3c302640f5cffc065dfb92ef9e76af9f6f3852e7dce13893e5d84ce4378becbeef305e9d34d368cd0e148e25ecadf6c3f1ba5c35345a29f9daac375285ed6e9f03491ec67a7a373a7a173d80fde43c79253bb0d2eb9d8cf46eb705741fb99c9ae3122982feda6c3b101dfe32edb2f3030b9109dbb009d83f022adc787e85832697f94c73bed77edae9ffd8838ff313a0fc79ff8b0634f1d5e8c74de4b7368a78f3bebf0122df7cfe818c2bd7578a948cc2f2fb56cebd0a08fc7e9305b87edd0bbe1b94fad6b1dec3acc78428fcb5c7a5ca6c3093abcdca5c7e55a0f5b6eb14b0ffbfdafa06308f7404c82d6dbec3262920ebb0bc7bf36eb7376bd62bd48cc4fd65bfa76b4f3635b872bd0dff6b393d13d20e333d7f529fafce73e749eaac3693e74bed2a5f39596ce9d6c3fb6f5bccaa0f33e2974de3780ce765a9de143e70d2e9d37583a77b6f37b5bcfab0d3aef9742e7990174de5f87b37de87c8d4be76b2c9dbbf473e97c2dfa7b960eaf33d83127851d254886e9fadc0076ced3e1013eecbcde65e7f5da4efbd8b6e306834d07a6b0e9a0003a1facc3f93e74bed1a5f38d96ce5dd7ba74bec9a0f32129745e1040e74375b8d087ce37bb74bed9d2b99b5d8fb0f5bcc5a0f3a2143a9706d0d92ebb6e75e973abd607d70de0fa170164dee692799b96f9914be6970164deee9279bb25b37b814ba69f3277890ecb74b85887e55ac6573e642c15e6b2f10e915836dea143bb8cbe5324968d775a76f4b4e3d68ecbbb5df6deadc3bbf4f9afd1b17cbe4781a54f8f9b5c72ecf01ee1f8d33291e827f63d953adca8af7f838e21bc17c9b8d75b9f247bee73d9739fbecf2e3f6cb9f78b64bf5f8eee31f97d950e0f23ae578bd4e9c2f633db9e9745a23d1b5cf755e8fbbef590e9f6e1075cb21fd0b2ffe5baaf46dff75d00d90f226e763df82174ee41740ec2874562dbe0614b975eeb5c725788c43aaf1f5d1e71d9f98896fda5ebbe5a91586ff6d327b6c9257b9325bbb75dcf1fa4c34745b21fd5e9f07061f6937a24c374bd41a4f6a3813a5ca9c3c7f533dfa363081f43fa35ea70333af7980e9f10897d2476dfc893e8de27d1bd103ea59ff90b3a968cfabee5926d3ff7b4beff07740ce12a1d3ea3afff2812fdeb59a4c333e81c84cfe9677e42c752873ee06f329fea7b1bf1aee74562def3bceb9d2fe8eb3fa363b06d91ebfe17f57dbfa0639b3196f3ab4b8e5baf97908d2fe970003a67f2019bebdee818def59b657b1fdb4776f6292fe15c76961aad982a4bab529982f2d54dd06be57758c57e32f5800a886e0bbfe0df10f5da06b1463e5a6e1ad598abc64c1ac40851641cd5e89fd509e95dac7e97ca3b2a95d0df935ff150d22b40b92af9bf1c0dc9d4cbf353d4880e0cca54ca2bc365a3a4523db54814ca8ae47c979479f2b555328196cbcaf64af92a90b748aa9d7c672a9360f8c6fdcc6c29d31a5daa96676ca0b5f2b84a693847fd6e549a962beda7c9730d6aacab46562b26c870b57a5bb2ed75f26fd33b4b3432b38ee64126eabc35946547d344690d689faff2c0ffc4484bc408a06ffbbb4e866df2550ffe694931f11f8656260395f2695a46a142969570ae48e4ab7ea7d9490483db986ca1d9bf2ddea3c5484f5bcc6420ba07280b9c187e744ae5827f8f29f82a3bd1b411225f0dad0c4c619a1758909797d5274982b709d9d96d0a405137fe2c137ed58d3f2783f8adfb2ad57dc123a0ad2a991223200b9af825f28fd5f2a74aa5be4a35e4bf420a59216fa9534a26c54f0108cb5188930bd0546a52905b9920b7cb34e4d4b98a17e4764d763990e19f99607b82602a1d2882ad4d04558dec105682c9d52ffbaf09f2d9659244a32a53c19f4cd5356fa6d0cc1ae6626ae6d951f1cc355622836944116e6322acda8155ac84e7ca7356057392ba5aa96a25c3c50cf5e432f92ea8a7942989e5da26ea199beb0c35bd67a5d2c63b063af98e81ce2a06a013875b632a86b24d31d4b1654acae6e521d055d0d745fbf556541ed2d5b3a00b9a83b435d153f3a696b7887fdb3257a863789b3dd92c7ddeddadc9668777beea07cdf7f0e3f46806e56f5b5d251639d9e628eea1a2985f19ca29724c4ed1a5e532bdf1f21d652afbc695142f6b9d27fcbb454fdf995eaf94995eba34a662a89d2986d4f4c8920c667a706d8592522aef0d9ef1c184935ddc952733f23e0a79bf24e352ab40216c6f405800e5465f4376acaa74ed5d8a016f42780753fca87ca7312315b33962a2d857aa882bf8a65ca35e212c956139facb92e23c394b6a522a75b68b6debbafd0eef38eee73b55f557513c1655e6326905e5261d4d31d9bd65aa1785b21d1b3c95c1acd99e49fe6c8e83019e950beafd14bb4e54121b988624d6d9241c22666bb3bd6ed10368d15d4ca221cbdd4624b7f6fe2dff25096f4f0bef4ae93d28b4dedd4ca281776e1a7877a7840f4e83f01e94f06dd320bca74938b0dace9437b905f7a705f7320986a8dfde8fe08eb4e0de148e1dd280a30fe5dd3b1abcfbae2c83700fefee4b091f6210be39a0f07e94f03c83f0d7030aef6f120e356118a34aea47b38a29bb68c99519a253cdcb15478a0271b40c21fb5daa4710ac766f993cbb4a550097a9271ae471a9fc6954a22bd5f54624b75ad56b4aa514787e78b24539b4455b51b87636e07ab055305c0328dfdf25a4ef0f3408ce57f9034cf388428b34bdadd1a1265ec6c219a6bde765c16f3e5da9a27c6b53aca88cf538d658f13b383c45adb52b17336575e430618dea25d3b04707a12faa42a7c89aa6a699f7bbbc6371b830f429a8f26192f03fc4cd6f05742ab452de54a0bc69b8873799b409ee4f665f2e546f8f161bcaf7b7a1f2d122433ebaac75b07c741055ec8cf0938f7ae4feb994e091a6f20cea599355895493a20cca55ac72d524883a4d7d6c53991744c3c19486a34c1ac29850b1d2b04a695823ff86d2b342f95f994b23ef523457f98273bd56370d17ab891dcbf5d3502e43390de5b7bb845fa572b32aa4c72ae5fdcb0396d1db520c469b18ece4abd651ad34aed72372b9f22aa48806756779523f7c307db7339503aababa3f6b39107c84dd9c4fc3f2a0f62eacd09234e75263542ed53bc932cf816882dcf6542eb29b2117d9d826582eb203e546634d6e34d095d8972827b792559dcb3dace4debc04be23a5d5ee26ad66a44ce05e7a4629510f31d90d555e581814b6f9964741ddd304b5d2578eb14c75995966437bc4ee8ace55bb18ac50f372ea35e21279668d0ce15c99bcb701e533e02a35ba6c2ed75196dc59679720100de53a77ae54671a0dd1673ba153ea078b8c9d285e7b99788d40359220dd8fe3e53dd6be0fc3f5f3ce19731764101b7636e5baaa1d9fc99912ee7a60b09c776f537dc698eb8e13e65912a9de4fe5bcbb5039ef7843cebb7ddb6039ef509370e82b834585eeeebcac40dd79c328cf2d3679ee425f29ddcaf64a556a733c3431e5e12781f362dd4f41e71289ef82cef786a6545ea9d37c9df236cbf7ca9bb2f3529d6354054cd5c34d6ca03d3a512437c40aa021066d0dabe53359a46a47431e079ad5cbc207fcabba39ed1eb73585b435f9544c4f31c5349839db45d33ce0188468814907a8fac0ea4e7795a997a9d01a430b2fa492e03443125c97132c091651f4f631d11b26122b3ff5f2af7a559b734aad645fa5bdbdf9d5a31114947d0d5036068432928232dd04658130d7bdc0c52b7411ec1f8a555198a30a9e72d77dc9b5b20a1515781ab655255863a887e5ea0cbf4e475795bc2b58c6318ae232837296e65407ac679c0c237c156034e52cfb199ce58c76c19c6557aa109b6928c45a052ac4c650bc679978cff35588b90ba206f9bf541527965ffaa39fab3c29d76775cd54950de679bb5131b8bf2106ff08188363a9189c6d88c160a38abb9b44430305ea9ec9d337dc92fbd092f7a07c0326b184e9fbda93123cd7e4746d542ab2a235c85bf6a222749e2142ffd53e5884ee6d120e6d485814ef6e436699a2d4a30d398ee273a0890fc4a0933c863615057bea040967a0d90cc78501cbc0f114c3830c0c4fec108ce1048ae1c10686ad02322ca618ce3731ec22706d339961106613296687189895740cc66c12c56c81819908c86c32c5ec501333e8975b28ff17c81fc892e16fab8f17460282109b42bd77a1e9bdddd17b17ca22b006150950ef2e957faf09f4fea9548c2d32c458bb4ec1626c1a1563a569c829f6a1c82df68ab1c2d031b62ff5de2541636c8eaa1cd4c9df41de3f9d8ab132438c6d0a186333a8182b4f43beb41f45aec22bc68a42c7d84ceabd4b4defedea11639354cb2cc8bb6719de9dafa6a2f0ce19486e1a50cd01a7c180edac5372834faa848d30b636e4c52a3f36f6a901873ca239932e9da9feb7fda9b47498212dd5760e969666536969b9212db50e9896e6503e5de5959646844e4b25d47bab4defed8dd252a321a69aafc75c4a8f9aa0b9b0a34d90f7cfa33c6785c1730eec12cc730ea03ca7d6e0396d027ace8114b9c3bd3c675468cf39887a6f9de9bddd3c626cba8099f5b581de7e30155ff586f8ead435587ccda7e2abc1105fd901e3eb108adb4aaff81a1d3abe1650ef6d0c9ac266a96e36e8a00bf2fe43a9185b6588b1cd01636c211563ab0d31d636608c2da2c8adf18ab15d43c75829f5de2382a630bb7b29c8db1753488f34201501912e310987d186a39a2eb806556097e70e6a326790e18e320ae13126841d14c2c40a7dd08ca9dcf0c67c359d184ab2969bbe08555dd8a8a45efddda8ab5f25eaddce82fa301313618ff36055c5b502aa8a4522f5d4bc74684f551a2b4c31a6e6681f9c9118b32ab5ceaa22bb4f19069bdd555ffb2eef98384ef81d003f5ec5c036c25d590fa60d45762995e59f60c8f237740f96e52fa392f68954790673f21a6402777a1861b1d1243560d410b8c65849bdff24d3fbb742b9736a3de0ce3a7557108d0ea372ec930d3976d0ee99e594b9a77815822343178255d47bd799de6b37500ad3de40a9a6f4389572375b8ff434506a4cb9945a7791d97d62acdc16e4049f98035b320d32d51c8c79d3e982da04c65b072a375a618a41f078d8f43dd4e8522d25f9ccb0920f3749867ad25982a827c1970482d793ea28ef3ec7cbbba12b0f8f9b363f75d553ef3fd7f4fe1e2877a9561e5c2fac29d7cdd7a081d2e03c93067d05ae6c4f940c5609fb6b48e5eadd136508d39996aae6edd240baac34e902591b7c76c13d41a6a32923f79820d368120e87b03fa87b1baddd97beffd3d40b6eff23e905d9f40b5651242ff42a29805b853cb950d8bb1b5606ec9a5d4da5c28bc2a6c23594e48bc34a3ec2241962143e5c10b6917524a5f6a561d53eca2419a206be73106638fd6883e07cb500b06596e4859f9ee75d225eee87d7649ad731a688005eeb430a3e96127c4548c16b4d31ac56621ed622319c8ea567de717ca51f620534b1e3a8c47655c8c4763c25784348c127980443ffd4d57e047b2c833fd124186a03d7f8113c8c167c92c92bd54ad48a16f14a3e6fbcd644ca58ffbe4e40fd1b1604706849d5d24f364531c4c4f57ea2f83a3a8a4fa14ac31bc29686eb2877bf31a4bb9f4ab9fb4d21ddfd340af2cd21219f4e09be25a4e033a8d8bb356cec9d49e582b785cc05cf32098622f4763f823d8ad0b32916778465710ea5f29d21553e9752f9aeb02a9f4745dfdd21a3ef7c4af03d21055f40a5917b43a6910b29c11b430abe888abdfbc2c6dec514e4fb4342bec424181a56f04591b00dab4b291e0f86e57119a5f6436950fb724aed87c3aabd9e92fc4858c957504036a501c89594da8f8655fb2a4aedc7d2a0f6064aedc7c3aa7d35a5f6e634a87d0da5f61361d5be9652fbc934a87d9d4938f4ffc13763c8f14ef70b2ae9175c4f71793a2c971b282ecfa481cb8d94dacf8655fb264aede7d2a0f6cd94dacf8755fb164aed17d2a0f6ad94da2f8655fb364af24b6125df4e497e39ace43b28d4afa401f59d94daaf8655fb2e4af26b6125df4d497e3dace47b4c9261581e3e491d66f7b57b2995df08abf2469364b8ff4d3f2a8fa305df47a9fc565895efa71cfaed3438f40394daef8455fb4193646871bceb87b4478be3214af07b21053f4cb1783f2c8b4728c91f8495bc8992fc6158c98f9a2443abea233f983d9a5f8f9904c326bd1ffb11dc8316fc3825f8939082379b04c3217ca6d43d2c6aff0b322cfa0495c43f4d43127f9212fe591a843f45f9dfe761fdef699364285cbef0139b1e85cb3326c13082fea51fc11ea3e7cf5282bf0a29f8390af2d761213f6f920cf77fe347e571b4e0172895bf0dabf28b5462fc2e4d89f125d30b2077f8de0f138f9ef5974d8221a3842f8d264d7e8035c9e641939909bb50c104099888bc504aad561b5b54eacf42c295d412e02e3c1c94f82d832019fb2b947d3f98ec8375ebf8bdf8fb5d965593f5b07aa9414b7c77e2152fdbf053412c7b95b2ec479365a3c8987326fe58165ad37f12a720fab5659e7c22e83498d7283b7e32d9b13b69876960dcb2c89ebfda90343982f6c6e48914416c7a9db2e967934dbb9236256b916811ded793cb963f51b6fc62b2652c694bf25aca968a9d37288b7e3559b447b32d5a6af048da2693ff06b1ea4dcaaadf4c56d1c3e474faa9d11aa62b077b8bd2f87793c6f44785a87898a2f44ebe0ab3d78b9b36ccb4d20fdc5f1248fbb729edff3069bf83ab6419aff2d752b54913663c5d69b354c00e906ecece77cc82e8f90ea5e75fa912defc4e5caa4f1287cbdb4b55b90eb1416b4a9f4f5709ff2e65dfdf4cf64d6d46f941f99177f94fa5f3643941ac7d8fb2f6ef266be736a3be06579363d74f9d2d93f5baf7290eff3071d83b70093b59585beb362f8ec3954f1f50b6fdd364db8e69cb1783e7811f529afe9749d33981bdd194cf44cd133fa218fcb789c16c612f5db3f7867016da98769bb097acf9f9749745aebea92459a1297a599a8e1afcc714817f99081c90310293548d65b1b21576016d50d2ad7d9997e87d42d708d860317ddef009c5e27fa87c899785bd24381df1fc67cab6ff35d956e8aa49142b4b1a956e762a2fd16b09cd7502e7d36ae9a9097d4ae9ff6f93fefb8a4cf40570f7127c46d90c0b2a936c2e6ff2477b49325e906c5187f8ab10a57ab2f0b4a63b9d65ceb3950db020a631c11321555aeb4797ea054ff354fbb5b22995a6a747a539befd39c529cbc4692e3327a879148b95ca2290eb3c93aa3e1296c317148756260efcf9977d261db67d49d9d6da64dbb80cd866ef4b920eebbea2ac6b63b2ee8c16f360e86fb44994c93cb44eb7bbea03a47e5c66d056389b3098b7604807f5af29ead926eaeefee5c47a06aef9ce557517f89ec47ea25cf524d99b4007abcf35bf26f30d65595b93650733fad394d025075d760421f22d4524c744a4843dff801a3eecb83957de395d9d316d768137c44887c77f47516867a2302b0335dcf2a6746df20367f17d3aacff9eb2bebdc97abac51bb46d5eafd2d02c577f3fb6c6fef252909e27a717320883bf500c3a9818f8eb519c2eac65f125facb172dd9a3f803655f47937d452efb70eee2eee5b562d7cbb6f4e4543f521674325970480be7ddd873fde6e1f63341a8fc4451e9eca7acb6df18a41fdcb18c4aa9e9f1d89f29cbba982c9bece1b17efa82c3b7669b6fe92f94a55dfda44def3e88d16a830eff56384f05b1e057ca826efe734f7867f0f118cb3eea7cba62e837cabeee540b3275e9305ee636d66e53e63a70f0d221550f528efc9f950533b626a93ba1263e4bd517acd2385f7dfab4a029e74cfd9556787bb5f426a05ad294f7a5de06ae87c4d616b6ba867f43d42719ec1d470c8bbd8b95fc2aedb1f6676386ab7cb846f93df47d0e97e5adf5ed6dbfdbf1994a81e1a81cc0d6f9df98cfbd155256568eb6c8962549abefc06e6996f68458edad63b5557e2ed8b84b33bd29b516bde06dadcd3e64dab0ca29774dba0fd1df05b1daed6ac3727bf8da5c514ff9c654dfaf1ba604d8e5664a717351f23689ebafdcccca54ea74c573a8449493ddaa0062a237272e6b03218815d34efc7140f5514707551f4e543d8d9e853fe3e6dbce0860837f36b6bedc1ee6cc272955829c7a7a1c50352054fd329d189da98f714035b1b383aa3f27aac41db6137743777aa1e2806c5d7707d9569cc87a296478981004c127291bb420eb03a2a0561cc0bddede013720d3c9d2f9be501c50e5a132722027aab628b39f2626c602ceb7287bdf9a130e2cb4a2be051007509f7671406dc309aaa30194557f8f03a60bba3a980671635a185b6f5adfcdc194db1255056ba8c69e98160764dd7a39c80673e754ee122f4ea086a29c6a5b4e505d127ccbf228d8981e84c254be38c05a8fbc6abb964b88f698691c906dece920db9e1399fb9b2a712a07a7a20c7e87cc25c2e40fd0c401d644d40adc91bf3163c38266cc52dd251d97bed15ad4373a2493892f4efef40b4a7c79fc9550779f154cb88b03a6733a01a69c6c9770f79874f3c77782b1a547a26058639258ade6cbd409abe3c635323558de1239cd77c2234b7901fad0f352741ce725f535e4f918fbc94b91ffe505ea25cb4bd13564beee0cafe479a41ef3b34e6f709e67253dcfb3b321cfa3859d47d639f23c1a9cc94fd999655ecae239cf67672e7d5f620532d57d0ea354b57767d8dd3c5c5e00c3ee3bff3f1f112f8011f15d00c2cb1a8255ea0ce52c75fae998b32640d4a8c9a45ed3900b65a9e0d26160920e895bd3db1991499bf60925531f3f0636a774823d3fed427c58947016c512e7bd08e7f04ce05c4a02c5ea2f548bcad870b6e7c2b93fc299cf89d3fe2cdd129d5bbae7f6e17963057c20b3b940362290059c20fba448e6581c78251bca1c2e94c7219485fc83a9b44f3ab36a19318ee1c2588030167162ec9b0263a2478ee44cde6c3e89a78f8c8812cc3826f05508e6c84c752aae14f67225e7eb886ce88ee7425781d08de244677dad37b9c9be502c571027a816ca722d10f636813598491d46e943da950b69278474744b96dc890b031873c9715c28372294bb72a3a43a557c4cbb4b1fca4a2e94b310ca319c28bb09e73bcd20a45409ca503ec9d64cac45f876cb44a2f6575ec7b1ead31fa11ccb89721b43fee877332c56b493b9d01e8dd0ee1ea5be21d6ce0cb6447f33c2b947947016c512e7c308e79e2d59314aec662b8a611df3098472af4c786695bca94a97e8755b5c917431c2b93727ceb12e9c2b9b8aa3c49d31d2b907056b94f4e78a9275284ac665a283c46fbffc6e31ec951f8d608e8f12cc3131843902c19c102598a36208737b04b3384a3047c610e63608e6c428c1dc3586300b11cc49518219c761e15d10ccc95182c938dcc106b32f8239254a3019eb996c30fb209853a3049371320d1bccad10cc695182c9d8c66783d90fc1dca7258788ddbd4f8cc99cadef69770473df4c0c7fc0107163d32652191afe18c085af2bc2373d1a5368189334db149a9508e30c4e8c3d901756eb9797aa69f019f244b6aeba4108e17e99e8f92c10cea78fa80eb6854abda48d6b62d0cdd613e19c199d714dc6ae0c36cfdc11a19c9509cff4dfc689635d7222c2b93f27ce01c2ef3071e2841ac64e8debb8a03e84a0ce8e2254c6ce0d36a80f22a873a20895313765837a21825a1245a88c1dc46c502f4050e746112a6341c506f57404755e14a132b694d8a09e86a01e1045a88c1dc76c504f46500f8c2254c69e2536a82721a8077142f5b7e2cdfa161da377b2f531ed8a401e1c15908c1ec906722802393f2a20190b2136906311c8435a72c26262e708631b89ad73e4518472414b0e6624a2649d97cc06b318c13c344a3019bb44d8604e4630174609266303930de69e08e6a228c18c6387f23804b3344a3019cb723698a310ccc55182c9d8e5c106730c82b9244a30e3b8f8a008c12c8b12cc386e053012c12c8f124cc699ee6c30a72098155182c9b806830de63e08e6524e98f66686f0e20ad594b4655772eea7c0b6139240e09671821b28bc667c98f6a3ccc0cc0fb6ce8dce086b654bcefc88ff1ce22e08e5619c28fdaf682f16ee4583ac688771a13d11a15d9e89493554175cf28a76c6ea11db34d82b11ceaa28e12c8a25cebb10ceea28e11c114b9c2f209c35d19a4117c7e5805311ce159c386176f81279502b1f5ba95e3f5b153a5071aa13864f08a40f5e672e786d10bc5a4e7878c140b5a4b05a2a5b2632344d9b6d838ade08dfe1d1193a8b6367db9908651d773276763e778066c00f3b72c11b80e0d5672a1983902d63dbb315085f434b36121393711c07200623942ba3d148346d7bc688966ddbb36311dac62855c3597b2ad912fded08e7aa28e12c8a25cea710ced59c3807f94ef853f423199b7d59c005772d82bb264abecada6464f3d5eb11ce23a284b3289638ef43388fe4c4b99defa49fdc313c5ed4a97ac01ade2ca00717e4c711e4a35ab28e1afffdb67746288f8e4eab3d8eb33a8e42288fe144d92b054a67ac328e1f1d7916613c361318a9c4ed6064f446368cdb218c6ba3d38e8fe37ce19d10cae3a2354811c7cdccf642388f8f528d9375363b5b8df35684f38428e12c8a25ce4710ce135b32df4c4ce88c4510db88d06108e5499c288718505afb63dbdf35b5da40d6574da16db4528974be49647d343603b5cfb55cb0cb11ec935bb2229fb1028acd6fef47284fe144b98348dc1bde520046cfc12fcb02f5e2c7f1e3256721d0eb3841e3afb85923ee191aa6631be5ec85d09dca892ed844ed11b15c5d5985609e162598716c2d552398a74709661c5757562298674409661c57572e4730cf8c12cc384e6e284330cf8a12cc384ef85a86609e1d259871ec875f84609e132598715c5d598a609e1b2598715c5d5987609e172598715c5d598f609ecf09d3def3c8bbc363b4ac5fb2b6c2d9565bbe88405ec00972b001a4b596129610d4887d54b75cade790471c170bb642802f8cce505c1cdb433b2094176502255e196cfa943dfb6a60b65ece6e08e5c5d11ad58ce307170f45382fe1c4196e45306353936d45f04b08eda5d1f2d4387e65683cc27919274e58a9572d0f56abc581f56a7078a522011e19bf1c331b81bb9c13dc8e22715c68b13cb94c5e6c54e8a0b2e41edfb4c309863b19ab4c6cc31b4f23d4eb395143dd8c759314366f6c8f105dd19203be89b5ca38760c9f8f505ec98912afb7b46b95d3c4c458d7237b20785765025ea1cb1b33308ccb56b51988e06de08407e3c5502cd4ca1b56e8f2d8996850ac0a8d1a554face2c3d88b0b630ec27875745ad871ec56cb4728af89d27442d6ca36db74c20d08e7b551c259144b9c77239cd745ab2918c72f9ecf4338afcf441f3a547c2a74695d2e2b3e50dc58ebd0e2bdf9c96204f2064e90ede441a3b077289ca1e6b2c5af79d71ae1ba311375c6e49d316bf42df12ba1b310bc9b5a7ee0cbceffe297682f41206f8e0ac8384ef43f0281bc252a2019e701b181bc0281bc352a2019eb896c202f43206f8b0a48c6ae313690572390b7470524e3c8351bc8ab10c83ba20292b1cdc206f20604f2cea880645cf5c006f25a04f2aea88064ec326303790b027977544032ce8f6403791302794f7486b4e2383dff7884f25e4e945b0bbc85e8647563b5da0b13049649b51ab4c0c56af01fd4cbc070171bd83d10d88d9900db2096c9cbf5e42c9f2d6531e87004f6be4c0dc2daf667a8fff1742e783508defd9cf0ec2fa6d853531a14346b2cdb1ac9de92a6466f46581f88ceb8621c1792e422940f72a20cb7192e235ab69cf31884f6a14c267e188698272fc2b4be7297c7c67f6bbce711d68739b1c2304ba9b4be4cc0a4bd29a24e4dddab950fb14163db9ab12d82f64894c6bb593f08cb36de7d23c2b9294a388b6289f30184f3d1966c60260e9dc571a8e24984f231ee996bfe76bb8ce3368dcf208c8f47a78619c75d5cf210cacd9c283bc8832a7979955a1106426ae4ed6b62981fb643c89e88d674aa382ef4dc0de17c324a388b62897329c2f954744aeb38ced0b803a17c3a13adef54bd965bcef728b646689fe1446b7f6f0ad63f34a25677bc674e7647f89ee5c4176c4f8ca25856810e44309f8b12cc386e64771082f97c9460c671e3861204f38528c18ce37ac5b908e68b518219c791f29908e64b518219c78dece620982f4709661c37b2db17c17c254a30e338feb81f82f96a9460c67123bb4310ccd7a204338e2b6e172098af73c2dc5924777358db88cc1113656e33c2b06310ac11b4579b397f4d12756a9492797b914a2ee4d721e47fe21eda7596ebcd12d66a475878cf06ad3f17b40e08da1b51eadd2ce4cc43d97a370f4638dfe4c4394624cedab0b68170277d27719b3281096aebbbf2a6d07a769ed1b359b30436ef3e0145c75bd1989f941c11acf393d836393915a17d3b4a931858fbf2d906edd6239cef4409276b2b8b0de79d08e7bb51c2c9bafb3a1bcee710cef7a2554b60ecea63ab254c4738dfe7c469af2da25a5a715fa4b51081fc202a20e3b8486b3e02f9615440c671fb89bd11c88fa202328e931b8620901f4705641ce7744e42203f890ac8386e3f310181fc735440c671fb891908e4a7510119c7ed27a621909f4505641cb79f380081fc3c2a20e3b8fdc46c04f20b4e900522b1ff13165a99f74aa7a72b2677c58d574320d6de858c9526b6855a8f21fc5f666208cf6fb707639b88add3e35204f3ab28c1646ca9b3c1bc1cc1fc3a4a30e3d81db71ac1fc264a30195bec6c30d72098df4609661cb7723e12c1fc2e4a30195bee6c304f4130bf8f124cc6b6121bcc3310ccbf4409661c975c9f8d60fe1025988c6d263698e722983f460926634b9e0de64508e64f9c3083ed3617c7d51de721943f677af2cc96fd25b47b10da5f32e1a5fea6dac67171c2b608e5af9c2893b7eef3efa38ced22361f3d1c81fd2daa60e398f89720b0bf476352a269d334c6cc806dd3b47310da3fa293afc67135c83084f2af519a41c73a319cad5e7a1bc2f9b728e1645dabc4867313c2f9774e9cb90aa733277e8e2e7a96200e0bc572851ce6d12f917f5bc227cb10be84c5f819da015c783b2abc39d92ee1939384172b5f026f5a22ec6f40c3aebf5344b92a5880f412793c5d95ec0d62914cbef3e5ff6071b240fe379dcf52dbfe4e12abd5205e9d9257a66457cbaba059bd28182c6ff907b8485bed2279c6ef6de529594b6414d64a392b158ad9ca8a326507fce4a5f8fa759ec7ae8f7981bed69947ee4705d19295d55dc7049c9b21609fde5229a3548525f267b18a937ca81c678d96bfac1ad5f0a6bad4703df859ad8fecf3a965423c784bfb27c0ce32a7c7aab479502a8b2ca787e72b54b22c5752a7a5b434b57db43776f28895fced202eb664fbff0be25d47bb72d3be2a39cc95315fa65d78a6bcd94a4ef02ffbff009c87abfcd8dd0100 + serializedProgramCompressedBytes: 1f8b080000000000000aed9d0778144796806b0049e41c0d36c289b10d9210c118078244b2c1601038602c8434123292902521c011679c13ce39e78c73ce39acedddf5ee7af7f6ee76eff6eef6f6f6eef672d8ab575dad79d3536fa65b3d6f54ed5bf8a452a7d7effdf52a87ee552ae4bfd814f96bad58252a44895823eac416d122ffaa9061b3fcef1cb9e7578a361936c8df35f2da14519ce549f837393656fe5e2a8fda45877c72aba89561a3babe5a24e4df4be5b309790467ebe54f42de15eb231f5a232ac50a71ac18131b9545c45af550bb3e1703bb627de5ef056287bc9a504ac14b4ad5a531f2d76a79a55d5d6b964abbf7ad13eb9559cdf25aad7ca64d3449991b95c4bedf482d62ca26150cd6e1001d0e923ffdf4dfbdf4df7df5dfd43957c610242b930cf7fe813a1c1ae29dc3902c3fef74ef191ee29dfd753822848c913aec8d648c423abae746cb9f02f9e76ff5f118e7b860833e1eeb1cf71beae39dbd75789afc29943f2fa363e9a9bd2638b27aefd4e7c779986dd5cfbde2397e551fefa5c3bd75d8a9afbf868e21dca6cfbf8e8e21dcaecfbf818e219ca07590ba8df8569f1b6fe0e7dad7e6b1afcdb1af77ab3edec773ff0e7dff9be818c2d3f5f9b7f471313a0fe1191e1e67e87022d2b7ccc3749287599f2c3a3fe53cdfe7537d7edf8071922d2ef6437ac0f5b73d7a7578f4ea70aef571e5efefb9df2fcb03bacfb28bc5811e5b0b75d8aeff7e071d4338d963d3bba9361554eae37840c699d29ccbff201d9ea59f7d0f1d4378267adf993a3c1b9d3b5887e7a07367a37310eed4b2df47c7d2aea20f3d72fb231987e8708a48e6e19ab758a6cf15e9f04291ea0b173af20bab9cfb8bf6e8f3533dfc2ef2f0738f5d7e253a2cd5e1c5fafa07e818c25d9ef7efd2f6edf1c8b944a4e62397e8b00cd903d73f14a9f65dea917fa9967fb53e9ee6d1e73291ead3e5e83c84977becbe5c903edd65c3741dce20eea5fccdf5b3993a3c4fa4fad9793a3c17c5cbb93a3c5fa4fbd905e8dcf9e81cf683f7d1b1e4d4f72e8f5cec67b37478a8a0fdcc64d76c11cc970ed3e19c80eff196ed5718985c89ce5d81ce417895d6e323742c99f43b33c33bdd771dae9ffd9838ff093a0fc79f6690e9da71a40eaf463a1fa539f4d5c78374788d96fb193a8670ae0eaf15a9f9e5b58e6dfd3bf4f13c1d16e8b02f7a373cf7b973adbf5b87994fe8719d478feb74b84087bb3d7aecd67ab8722b3c7ab8ef7f051d4378046212b4dee696110b75384c24fdeb4d7dcead575c2f52f393eb1d7d07b8f98eabc30de86ff7d945e81e90f185e7fa627dfe4b1f3a2fd1e1521f3adfe8d1f94647e781ae1fbb7ade64d0f9e82c3a1f13406737ad2ef7a1f3cd1e9d6f76741ee4e697ae9eb718743e368bce2b02e87c9c0e57f9d0f9568fceb73a3a0f1eebd1f936f4f74a1dde6eb06375163baa900cd3f53501ec5cabc3e37dd87987c7ce3bb49d6e1ee6da71a7c1a613b2d87462009d4fd2e13a1f3adfe5d1f92e47e7213b3d3adf6dd0f9e42c3aaf0fa0f3293aacf6a1f33d1e9def71741eead6235c3def35e8bc218bce35017476cbaefb3cfadca7f5d985ee83eb3f0820f37e8fccfbb5ccef3c32bf0a20f3018fcc071c99c3ca3c32fd94b9b53aacd3e1461d26b48caf03e8f5a047af07b55e5f7aeeabd7f77d1340f6431ed90f39b2874ff1dcd7a0effb6100d90f8bf47ad323e8dcc3e81c848f8ad4bae4a35a97173d723789d43a921f5d1ef3d8f998237bc448cf7d8d22b59ee5a70fe5718fecc7b56cb76e3251874f88f4f4b65987a70a737a6b42324cd79b45f6f43841872d3a7c4a3ff323740ce19348bf2d3a7c1a9d7b5287cf88d436b5db967e16ddfb2cba17c23dfa991fa363c968d44d1ed9ee73cfe9fbbf45c710bafd36cfebeb3f41c7d8cf5ed0d77f8a8ee17dfb7bee7f51dff73374ecda8de57ce791e3eae1eaf512b2fd251d8e47e74cf1e2da3a171dc3bb7e2e54be3ed2adf71cec535ecab98298ea715e22739c1a49ad54dd043d0f7ebbc6dd27b3778a83e842f805ff26abd776881df2d184a9677a8deaf7ee90addb7263cff4b8d840a47785fa5d23ef6854427f91fe8a97d25e01ca35c9ff09d4adde2ecf2f56bdf2d0b1de28af94c88a65a37a6a836cceaf93ff53a5ac95af6d125be55195fcddaae46d906aa7df99cd24e882f73eb34aca7446089ae5191768ab3c6e521aae56bf3b95a609a5fd5279ae438d57b4c8ec78810cb7abb7a5dbde26ff36bdb34a2333eb681e28a0ce3bc3116e34554a6b40fb52952ffd29467a2246007de12f7432ec53aa7a612f4d8b893f31743219a8382fd532a62964b19473e5a254f51dac4a2318dcc6740bcdfeedf09e256664b4c54c06a27bbcb22019c3af2d6e5cffc7d965bf2e48356dba2855dde313b29896092cc88bc746a749c86c4241419f3250d48b3f66c2afba6257e711bf735fa3ba2f780414aa9229350262d04cab927f6c973f4d2af535aa61db2d52c816794b9b52322d7eca405891429c5e8066539382dccb04b96fbe2167cf553241eedb65571232fc3313ec4710cca60345b0b789a0aa919dcc4a30bdfae5feb5403ebb4992e854652af893a9ba969929347da67a989a790e503c8b8d95c8601a5184fb9808abb659132be135f29c53c15ca8ae36aa5a498958ae9edc24df05f5943a2531a16da29e71b92e575334b62a6d32c7c040df313048c5007448706b4cc55081298606f44c49d9bd3c049aef633cb4bfec45e5214332167441739042133d35f765738ff8b72b738b3a86b7b9138672e7dd43bb6c4ef22e55e33ca519fc38379a41f95ba8abc4a2a8c01cc5c35514f32b43394591c92906f75ca6375fbea34e65dfb89292c9dae413fedd6284ef4c6f64d64c2f571a5331d4d714436a8a5b551e333db8b64549a991f706cff8604ed921deca9319f968857c6c9a71d955a010f633202c8372638c213b5655ba7e1ec5803721bcbf297e54bed399978ad96a51298e912ae20abe29d76857086b6498407f3952924fae949ad4489ddd62dbb9eebe23731c8ff59daac6a9289e832a73f9b482729301a6981cd633d58b69b21d1b3c95c1ccc71169fe6c8e83f1192b17d4fb297603a924362107496c90493844ccde667bbda2c7d3a2079b444396bb8f486fedfd51fe4b13de8f163e84d27b6268bd879a4403efe21cf01e46099f9403e1c329e1fbe640f808937060b59f296ff20a1e470b1e69120c51bfbf1fc10368c1a3281c07e400c768cabb0f3478f7533183f00cde3d86123ed920fccd80c2c752c2e306e15f06143ece241c6ac2304695d68fe614536ed1522c33c46435af589c21cac4593284ecb7418f2038edde3a79769baa006e524f74c8e31af9d3a94437aaeb9d486eb3aad7d44829f07c49ba4545b4457b51b80e36e07ab157305ce329df3f24a4ef4f30082e55f9030c85dbd022cd6d6b748a8997b17086a9cbf118fce6d3952acaf736c58aca58cf658d15bf83c38bd57aa9845821ab23a70a67542f9d863b3a087d51f53a45b67435cd32bf2b732c9608439f822a1f160aff43dcfc5640a7422fe54d65ca9b4a327893499be0fe64f6e569eaed76b1a17c7f1f2a1f2d37e4a39b7a07cb472752c5ce743ff96886dcbf98123cc3549e413d6b912a915ab29441c58a55b19a04d1a6a9cfe92af382683889d270a649431813aa501a36290d5be4df507ad62bffabf36894b9142d56be90bcdeaa9b861bd5c48ecdfa692897a19c86f2db5bc26f53b95913d2639bf2fecd01cbe87d2906b34c0c0ef255eb68561ab7eb11b9627915524487ba3391d60f1f4cdffd4ce580aaae1ec75a0e041f6137e7d3b0c4a39f072bb424cdb9d46c954b8d4ab32ce34034416e7f2a1739cc908bece9132c17398072a33926379ae049ecb5cac99d64d5e6710f27b9772f811f486975b849abe5591378263d6d4ad4934d764395171677846dbec529a8479aa036faca3136a92e33c76c688fb85dd1c56a25fa16352fa75d23ae926776c810ced5c97b3b503e03aed2a2cbe6848eb2f4ce3ab704816848e8dcb9519de934449feb84c9523f58641c44f13acac46b3aaa9104e97e9c2fef71d6ee97e8e79367cc5d90416c38d894ebaa767c3e674a78eb81c172deb9a6fa8c31d79d27ccb324b2bd9fca790fa172def9869c77ffc26039ef149370e82b838561deeebc58a0eebca994e756983cb7da574a77b2bd1a95da921e9a9af2f093c079a3eea7a07389d47741e77b47572a6fd469be4d799be37b89aeecbc46e7184d01537589890db4472b457a43ac0c1a62d0d6705a3e8b44b67634e471a059bb2c7cc0bf9abbd3eef15a338db6a6948ae9c5a69806335779689a071c83102d33e900551f58a1e7ad328d34155ab369e1d3a824b8d490047715054b82e514bda34df4a68ad4ca4fbbfcab5dd5e692a556baafd2dedefdead1740aca3106287b0242994141596682b25e98eb5ee0e2f5ba08f60fc5a928ac56054fc2735f7aadac5e45059e86ed54097618ea61c53ac36fd3d1d524ef0a9671cca4b82ca79ca53bd501e799648611be0a308b7296630dce7279df60ce72285588ad301462bd021562b329de2b4dbcd7fa2ac4bc055187fc5fa38a13c72ffdd12f569e54ecb3ba66aaca06f3bcc3a8183cce10837f08188373a8185c6588c160a38a879b44430305ea9ee9d337bc9247d3928fa07c0326b184e9fb3a9212bcc6e4747d542a72a235c85b8ea22274ad2142ffbb5fb0089d6b120e6d4858d8ec6d43c64c519aa10d398fe27382890fc46032794ce92a0a8ed40912ce40b3198ea7052c03e7530c4f3430bca07f30860b2886271918f60ac8b08262b8cec470b0c0b5cd748641985552cc4e3630ab1a108cd9428ad97a03331190d9228ad9292666d02f572dff97c91fc892e16fa78f17460282105b4cbdb7daf4de61e8bdd5b2086c414502d4bb6be4df3b02bd7f0915631b0c31d67760b0185b4ac5584d0e728aa329721b33c5d8b4d031760cf5dedaa031b65a550edae4ef20ef5f46c5589d21c65e0d1863cba9184be4205f3a9622579f29c6ca43c7d80aeabd0da6f70ec910630b55cb2cc8bb571ade5daaa6a2f0ce19486f1a50cd81648301dbd9a6e4069f54091b0eec6dc88b557e6cec53030e71a239932b9da9feb7e3a8b474aa212db50e0a969656516969b3212df50e989656533edd94292d4d0f9d96aaa8f7369bde3b0aa5a54e434c755f8f35941e2d4173e1a43641debf96f29c2d06cf39617030cf399ef29c5683e7f409e8392750e44ecbe43933437bce89d47bdb4cef1d9a21c696099859df1ae8ed2751f1d56e88af814382c5d73a2abe3a0cf1551030be4ea6b86dcd145fb342c7d77aeabd9d4153d84ad5cd061d7441de7f0a1563db0c31f666c018aba6626cbb21c60a03c6d8068adc8e4c317668e818aba1de7b7ad014e6762f0579fb460ae91906a42220d25a9370186d38b3eb826750057688edaf26730619eea8a3109e6d42d85f214cadd007cd9812863796aae9c45092f5dcf445a8eac24625edeaef4e5dfdaa52ef4e2ea80f333111f6df0d5655dc29a0aa582eb24fcdcb85f654a5b1de14636a8ef649798931a7529b5c55e4f629c360b3b7eaebde953926ce157e07c0cf5331b08ff056d6836943916d30915573c5f3bbb785e3212027f86402d8f577a229b733f2bc40501b5764d68122b8c9947f41be7aa108d923de4849be28ace453a9bcfd622a6fdfd5adbc7d3395b75f62cadbdd0a0d743fe0b19eee17cf4dd4fb2f35bd7fb87eff0cf9d3ac3cb85d38d344bbaf4133a5c165260dc6085c41a8940cb609f72b1c09f5ee4a19c2148c0655256f08a44b8b4917682fc276dfde417d15d70106f5b79884c321ec3fedddfae7f0869ffc6ec9eec7ff90f68202fa05ad14c92b4d24dd2a1e70ab9727ab85bb235b63c0eea4d3a8547855d854d84649be3aace47693648851d8303b6cc5b08352fbdab06a6fa5a218f6d70e3304d869105caa162df5cc32a2f0538a329788bbfdf05a44f3da668a08e0757d48c1db29c1378414bcc314c36af5d8a93d12c3b9582e93398e6ff443ac8c26763a95d86e0a99d8cea004df1c52f09926c1d0a6bec58fe00c4b77cf320986dac0ad7e044fa5059f6df24ab57aaebe47bc92cf1b6f339132d6bf614ff8780c2631736849d5d2cf314531c4c41d7ea2f8763a8a7752a5e19d614bc3732977bf2ba4bb9f47b9fbdd21ddfd7c0af23d21215f4009be37a4e00ba9d8bb2f6cec5d44e582f787cc052f36098622f4013f823314a1bb28160f86657109a5f2432155be9452f9e1b02a5f4645df2321a3ef724af0a321055f41a591c742a6912b29c18f87147c15157b4f848dbdab29c84f86847c8d493034ac6097fab00dab6b291e4f87e5711da5f63339507b37a5f6b361d5be9e92bc27ace41b2820cfe500c88d94dacf8755fb264aed1772a0f6cd94da2f8655fb164aed9772a0f6ad94da2f8755fb364aed5772a0f6ed26e1d0ff07df8723c768bc2f68a45f7007c5e5b5b05ceea4b8bc9e032e77516abf1156edbb29b5dfcc81daf7506abf1556ed7b29b5dfce81daf7516abf1356edfb29c9ef8695fc0025f9bdb0921fa424bf1f56f24394e40fc24a7ed824196a67f0edbe30b5b34728c11f8514fc28c5e2e3b02c1ea3247f1256f2e394e44fc34a7ec224196aa09ff9c19ca1aafaa449306cc2f8b91fc1c369c14f5182bf0829f86993603884cf47798790dc7f4186909e31bd00b252f8b65bd8acf4594af8573910be87f2bfafc3fadf7326c9308deb1b3fb19961ebb6e74d8241911ffa113c8f16fc02c5e2476159bc4839e08f73e4802f995e0029e25b3f4c32f4bcbd6c120c99037c812c6d7014d659993b5557a4ecac0103a830b9aa5a4a6d568b751bf5a7aee04a76097017ee2e4edd9f394866f60a65df4f4df6c15a3cfc5efc4d12c7aa457ad8adc6a025be3bf54a26dbf053412c7b95b2ec6726cb669231979c18e058e84c0f489df7edd796b5f289a0c3e4af51767c67b2e370d20ed3c09963114cc4e85003f9dec153da1bd3075a83d8f43a65d3cf4d361d4ada94ae45aa4578af322e5bdea06cf985c99639a42de9eb437a2a76dea42cfa3393454774dba2068347d23699fc3788556f5156fdd264153d8c46a79f16ad61ae72b0b7298dffdca431fda1042a1e162bbdd3afc236e4155d9b8039e907eeaf0aa4fd3b94f67f61d2fe004fc9325fe5af356ae309cc7899d2a641c0ae565ecec96fb304d1f35d4acfbfa44a78f33b71a9be509c266faf51e53ac406ad297d3e5725fc7b947dbf32d9b7a41be507e54799cb7f2a9da7cb0962edfb94b5bf3659bba61bf535b89a1ebb7eea6cf9acd77d4071f82b1387b9814bd845c2d92eb07b711cae7cfa90b2edaf4db61d98b37c31781ef811a5e96f4c9aae0eec8da67cc6364ffc9862f0372606ab843b1ddf5def9a5c92625a41eb4ec3f7f33912875c7b5749b24553cc64692e6af09f5004fed644e0f8bc1158a86a2c1b95adb0b3598792eeec3559abf73edb2160d3a8dc79c3a7148bbfa3f2255e16ee32a75cc4f367946dbf35d936cd5393a85096742adddc545e25cfd17582e4e762725313fa9cd2ffef4dfa1f23f2d117c0dd4bf00565f3ef4c3627bafcd15d6685175939d421feea458d9e4cb8b4ebcee4d2ad55ca069830df99e289902a9ddd7f1af48288b5aafddad8954a73d3a3d21ddffe92e2f40f54bd8a9313d43c2ac4566511c84d3e93ad3e1296c30f280ebfef99fccb3d930bdbbea26cfb47936df3f2609bbbd63a17d67d4d59f74f26eb2eef310f86fe4697449dcc43db74bbab3d40eac765066d457261a97959692ea87f4351ff6713f52a769f825a1fec2cb546deb94c9d312deac40b3f7341e18714853f9828accc43ad27d115d7a65225b9603317d6ff88b2fe5f4cd6d3ada0a0edb576950e567afa80b135ee170682f446247ba68230f831c5e05f4d0cfcf5322d13ce52ca2abdc3734ff6327d4bd9f76f26fbca3df6e1da8ab7e7cf89dd4cb6d1359f2016fc84b2e0df4d169cc4583e381687a909e686c84f2922ff6122b228439cfae9410bdf06e8bef7fe8cb2f43ffd786fe696db2cb5ecd9bf15c9a78258f01d65c17ff9cf5fe09dc17bb11dfba8f3b98aa19f53f6fd3755efce9e7fce97e9b14ed9e66c891d3effccd6ee2e92ff633198dbb150dd09dff858a94a54a7bc2a551fc12aebca5bb27faf0bdede2cbd09a85675e50ed93704f91ff98e42d8f450287e80dc5dc76d584257a1e437698f7537102f5139558bf27be8312a912592f31546bf1bb398f2c912945362ebfc6fd1e2dd6022162bd216b9b22469f545b0ef9ba5ff0bb13a4ac76aafd262b0f1906e7a53762dfe086feb6df621d33620c912caa4fb64bd43b4d3da515b57ba837ee6aa6cd63766fb92c95425c0ad036615b706256f93b871cacd9c4ca54d57cda6c484282ae855063101bbc2b2e172b665805831edc91a0554df0d48a28a71a21a61f42cfc410fdf765a800dfeb9d87a717b587214be46094ad664a380aa03a1ea9defc4989c30160554958392a8fa70a24add6b31755fcc643f4d1490ed1a964456c0896ca44286075740107c9ca8430b723e25056a4501dc97fd92e00af39d2c933bcd4701551c9591459ca80a5166bf54544602ce6f50f6de97130e2cc9a076858d02a85f0e4e82eac7096a800194537f8f02a6dd439298fa7363aa8eac37dd36348969404f54159cc10c773a4f1490cd1b9e4436903ba7f2967851023505e5548338410d4ef12dc7a3e0634c201426404501d6a7c8ab06f75c42744715a380ec57a8ce3e8413997777ed2895834b50063f347f89307d2bf228c0aa441e358cbf31e3c282664c83ee928e4adf682bea1b1d9ecfc417257ffa3d4a7c23f82ba1de3e2b98a614054c570f044c45051ee1de31e9ee8fef04634b8f44c1b0c642b15dcd2869134ec78d67646a92bcc53acd47c6d0c8523c401f7a3c4bc7713cadaf21ee63ec279e25ff8b07ea258b67e91a325f4f0eafc433a41ef3b3c9dee078c64a7a3c6367433c430b3b4ed639e2191a9ce94fb999653c6bf11cf7d9994bdf975a81cc765f9251b6da7b72d8dd3c5c5e06c3eea362ffbf47c4cb60447c3440785943704a9d319ca5ce581d73ce04881635dd929e30029fbc9ceed561429a0ea91bfeba1991499b7e2925d3683f0676a774829dd4dc427cac4d38cb2389f33184735c3e70369040b1fad56a290e1bce7e5c388f4338f7e2c4e97e41b156e796deb97d78de58191fc8022e905b10c8f19c20476749e6581c78251bca222e94a7239413f80753699f4cce1067c4389b0b6319c2b877beba6eb60a77d944f2cb3e6ce8cee342578fd0edc3896e2f852ebd61542d362b880b543d70b31608ebee617d505ab33c77488770211d88904ee4ce1fa9f6968f1939b943d9c88572254259cc89d2fdb2267c66b45d35783b84f7b35dd1ab4136227c93f2515253c54b6a49cd58e9612ba9c72194fb72a2dc47a4577afcee2ec28a761117da4e84763f9b9a8daced1cb6447f0fc2b9bf4d38cb2389f30584f3807ce06c923735e962a8ed7b978f5e8d701ec889738e07e7d6ae3c34752d742e571db346c938ae28391745c964ce2871bf4eeab79fe9b008f632cd4230e336c19c1d4198d311cc836c8239338230f747300fb609e68c08c2dc07c13cc42698874610e63404738a4d30a338cc71088239d526988c1dcb6c30c720982536c164ac67b2c11c8d6096da04937170980de65e0866994d30cb2308732c82392d1f30a97e526f9709633267eb30391cc12ccf479f3d0cc675766d8a92a73efbf15cf886207cd3ed1812664cd26c43c22d08e30c4e8cc3911736eb97d7a8699d79f244b6aeba8908e1cc7cf47c9689e40710a80eb66aa55eda460c11e8661b8170ceb267308eb12b83cd330f44280fb56b665c14eb929508e76c4e9ce385dfb1cdd49de3183b356ee782fa08827a988d50193b37d8a03e8ca0ceb1112a636eca06f54a04f5701ba1327610b341bd02413dc246a88c05151bd40b10d4236d84cad85262837a3e827a948d50193b8ed9a09e83a0ceb5112a63cf121bd4b311d4799c50fdade070be48c3e89d6c7d4c872290f36d01c9e8916c20a720900b6c01c95808b1819c834056e4a373846acfa7768e30b691d83a479e40282b7b7230231525eb645a36981508e6429b60327689b0c15c84602eb209266303930de69108e6629b6046b143791e82b9c426988c65391bcc9908e6529b60327679b0c19c8d601e6d13cc282e3e2847308fb1096614d7aecf403097d9049371a63b1bccc508e6729b6032aec16083793482792c274c77732e7871bd6a4abab21b3957aeb3edec2110b8159ce026884c333e4cfbabe561e6075be7c6208475654fcefc88fe1ce2c108e5719c28fd2fc3ae10de4583ac68a772a13d0ba15d958f493554175cfa326cc6ea11db34d81b11ced536e12c8f24ce8710ce2abba67c4571fdda1284730d274e98ce5c2b0f5ae5635bd5eb5709e7b3e00975c4b82bcd202e787d10bcb59cf0f00cf7664961bb54b64ee4695e31dbfe48a310bee3ed19eb8962efd04508e509dcc938b9f56c12681efc700017bcf108de89f94ac620e4fbb1b9d42684efa49e6cd5a426e328f6984f4228d7d9d1aa316d2ec588966d73a9ed08edc93655c359bbd6d812fd0308e77a4e9c137d7bea62fd48dee6b79571c1dd81e09e6297af32b671d87cf50e84b3da269ce591c4f938c2b98113e77ebe937e7ad7db7cd1a60aae1dbc59c0702ec84f21c8353d59a9ca5b6e3a8f0be5c108e5467b9a99511c37df8a50d672a2f4bf269d1123db9af4fd10c63a7b5a4c519c4a78104299b0ab3b388afb1c1d8570d6db5455629de8ca5655ba0fe16ce0c439d990d09d0d4add0f25395524e733495075daaa4426b7df77be429587c2692717ec0482bda927cbf9bc65036c3df3cf22948d9c280f10a99bf33a0ac06810f8655da05ea9286e797e31027d2a2768fcc1126704294fddce6cbdf62311bacdf6cc949b1ec9e52dad0866934d30a3b822a309c16cb609661457643423982d36c18ce2f8521d82b9c52698511c73df8c60b6da04338a3d4b1b10ccd36c8219c515193508661b274c77357ae6965074bf70f92202d9ce09729201a433cb1de6cab588a3557bbd35638f5314a771f742803bece9098d62adf30084726b3e50e2351ba6cf39b2afd360ebfe188a5076dad5a91cc54fe19c82706eb3635653fa8031ebac26b6b51a2f21b4dbedf2d428eeff3e1fe1dcc18913a6a437cb83ed6a167cbb1aead8aa488047462fc72c40e04ee70477a048ed30de284f6e92173b153aa82c79073edc7081e14ec62a135bbfe77308f5199ca8a16ec6ba7c95cd1bfb214467da33e3238add6f9723946771a2c40b0bdc5ae5525119e97ae47004efec7cc09be6f1c63c8cefb0556d262078e770cf358262a155c0d7d19df238390259a10a8d16554f6ce2c338920b6311c2b8d39e167614b793284528cfb56b720c63659b6d72cccd08e77936e12c8f24ce4711cef3ed6a0a46f15b946b11ce0bf2d1870e159f7a5d5a2764c5078a1b67fe7ab457f96e44202fe404d9571e740a77ef98e56a924bf49a77bd11ae8bf251674cdfb3a845df12bd123a86e05ddcf3035fecdf3b654bb4d72090bb6c01c9d85bc306b21d81bcc416908cb32dd840de80405e6a0b48c67a221bc8eb10c8cb6c01c9d835c606f21604f2725b40328e5cb381bc0981bcc216908c6d16369077229057da0292713a341bc8db10c8ab6c01c9d865c606f25e04f26a5b4032ee0bcc06f26e04f21a7b86b4a23809fa0c84f25a4e947b0bbc57d622e12c54824d9f40609d54ab430bdca806ff41bd3c0c77b1813d0281bd2e1f603bc42679b99d9ce5f37d59255682c0eeced720ac6b7f9efa1f2fe082d780e05dcf09cfddcbda9d9ad2a1a03963d9ce48f6f7696af4d308eb0df68c2b4671ba7e3142792327ca70bbbe31a265cb39b721b437e533f1c330c45a7911a6f5253c1e1bfd2d759e47586fe6c40ac32c35d2fa3a0193f6168b363575af553ec4068d6d4ba74204ed169bc6bb593fd5c536de7d17c279ab4d38cb2389730fc2799b3de5791417d3c711cadb3951f697074df2f236b5fe0684b4c8db7744d0fbfa226477d83579258acbea0e4338efecc9dea2bca164eb787b06a1bc2b1f95f36c9d1adf9f6d6ef74668efe644ebeebb0ed3a33b51a53cda13ab86217cf770e20bb664be3c9265f60908e6bd36c18ce2a68c272298f7d904338aebbaab10ccfb6d8219c5e54c6b10cc076c8219c581b41508e68336c18ce26e42ab11cc876c8219c5dd848e41301fb609661487278e45301fb1096614bfef7c3282f9a84d30a3b8206f3d82f91827cc83457a3787b3cbc06a5129739be9860d45dad1878c937f2d146d6a108379f781462ee4b723e48f738ffc2457f3ac14ce6228d6ef448ee382d61f417bc2aede4dc63c94ad77f32484f3494e9cb345eaa0aeb34adc9bf49389db94092c503b6325ba42e7d9b546cf66cd12d8bcfb4c141d4fd9317d213d2258a72fb0ed81701e42fbb44d639cac7df96ca34cd7239ccfd88493b595c586f34184f359bb8a35c6be29b6626d19c2b98713a73b579e6a1a447dd1413502f99c2d20a3b8e8601d02f9bc2d20a3b89c7a2e02f9822d20a3381a3f19817cd11690515c4ebd10817cc91690515c4ebd00817cd91690515c4ebd1c817cc51690515c4ebd14817cd51690515c4e7d3c02f99a2d20a3b89c7a1502f93a27c83291da61070b07cc7bffd2f3ebd2fb8ea2fe2de92711fe37f231e6e4b7db83b14dc4d6e9712d82f9a64d30195bea6c307723986fd904338add71a721986fdb0493b1c5ce06b30dc17cc7269851dc9ab403c17cd726988c2d7736983b11ccf76c82c9d8566283792182f9be4d30a3b884701782f9814d3019db4c6c302f45303fb40926634b9e0de65508e6479c3083ed9e14c5e5089721941fe703a5bf098c519cf2bd2f42f90927caf4fd92fc7f2289b1f2ceb687f6a908eca7b6828de2b7a76a11d8cfec98ea65daa986313360dba9e61284f6737bf2d528ceb19f8a507e61d3342fd6e9b66c95a7fb11ce2f3971162b9cc9a9b1ab755e598b38548bcd0a394ca7ad957f3bc217c910be97c1f8b1baf15c780728bc45051ee18bd28457285f026faa15ee9722616fc0c522a17242205d2b8f97a9a2a8436c90feb64efe0f1627ebe57fd3f998da1c70a1d8ae8646da94bc3a25bb595e05cdda45d92479cb0fc0450ab58bc48d5fe5882b59b5320a5b85f385eb84faee568bbaab4dfdc4b37c23339e616fa878a06f7ac5c97d54205a62b1613a26e0dc7201bbf9d54819352aac923f1b559c94426d2e364bfe72aa00255d857f891e526ad647eef9ec32211e324bfb0a60c7cce9b129671e94cd22c7e9e1f97a952c134aead2ac9666b78ff6c6811962a5743f888befb3fd5f43bceb68576e3a4625873532e6ebb40baf90373bc909fe15fc1ff9c434b136ba0100 serializedProgramBytesString: - serializedSignature: f758db480282aab900585fd45ca96735ea8401309cdb1382e99d88bed9bea1ebde5fd51ec5bb2452c2c6c3dd6baca1ad759d176a8a4715841767a2f7b621620c + serializedSignature: cdef2b890874c87de950f6589acd6b30763482fb041c7cdbcb0208fb1dcb63179402fcf54ae76c4ee93118cb1f00503d8251a523f4774c202524213719780109 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/16ef152668069a445a8a154652bad845.asset b/Assets/SerializedUdonPrograms/16ef152668069a445a8a154652bad845.asset new file mode 100644 index 0000000..5b27337 --- /dev/null +++ b/Assets/SerializedUdonPrograms/16ef152668069a445a8a154652bad845.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 16ef152668069a445a8a154652bad845 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d097c55c5f5f8e7016147f61d24ec614b4208011415085b643509b80042c8029184c42c6ca2e08e8afbbeeffbbeaf6d6dabadb66a37db5aab56eb52b5b6b5d5b6b6b5f57f67ee4cee79f7cd79efdd77735e66f8ffc287dcdcedcc99ef9cd9cfcc6d97c39c9fc864e7d76a56cc0a59365bc52a581ddbeafc55e81c6b9d7fee99babe923538c74dceef32e7de649699e04dfe333e32c8f95de49c35b226e7cd6656ee1cabc5fd1256e9fc5de4bc5be99cf1ab55ceff4ae7a94807e7a5556c3e5bc196b38191fe0944ac162f35ca6b111eaf4867e7f73cb6d3b95b2994e281e4885b039d5f25ce9d4671afd6515a3db786ad13d1aa75ee953bef34b01a47e64621b1f3750eb0888893380c90c781f2c875ec22ff6e2fffee2cff86cf67c8e3a0249f1f0cdeeb02fee6846e8af3fe10f718e17f77748e7bc1397ff733f9dc50575ebbcd71640d97c783e5718494796a12fa7792c7cc04f18d27632490950cb3cef2385a1e47497d4f4b31fcb12ea3c875401e67d90ee8331a84dd05dce7d7c68488bb4ac7f6be746cefa663bbab64fa7d209f1f278f59f2385eca769ee9db4f5e9b208fc312e835d17d8fcd649ecd3a61b6af97e793e471b23c4e91ba65485d4f07e7617551699a2d657690619ca1b9ae9ee7f7cf94e739f298eb4bafa9f2b9b3e4795e92fa24637f4aa78e328cb3c1b9a367870d7164a974efe44bf74ef2dd8b5c8e1d9ef2c507d89f56ee34296f5f0af1504ccf06e78e2e1959d1cf25d441c9cf9772ba48b9e780732ef7b28071eb20df7b4c9e4f6789cbb60149dc9be9cae9ac58cf72c3e9d8cfbdde71368bb6e51909f45469dbd597b65da5dc1a2957c5ff10f73ca238670239fcfd737d72bbf9e47693725519a16c3c919e87cae3e1f238571ee7b0967c3cfa2279ed30793c4286d99d459701dde5fdd9debb1c6f206ef1d2689e2fad87c9707b2490a9de2f94c72e493eaf9e991f42e705f2d835c930bbcae3c210614a5be8fcb9cf16662590b9c8e5dbb909e8e0c8e9b25b9e2f96c722793c52f2efe5b3835e49d841225d96485dd47bf35d5dba2ad94be57159b42e4e5b325aa7f35a4fa7c84152e67e70ce8f3de5f5f3c139d775a51b4ed717a4cc15f2b8d2a7f351743a3b8d77f15e0f9537bb25f95e3cfb2a71e3d72dd795ddad545e5747a5db024fefcef3c1bb4a8f64f2c36ac9a28f8f711fa983627bb4efb90bc0393ff6f6c2137f3bef76572c8780ebfcdd0bc139bfbf2a495d8f65b136cbe5f40361f79361cbf2bfbb2a5b8f63b1794ff72e3ff605d7fa4a796fc9f7d6b0d87a4c3dc7e3761138e7f78f49326e6b35fa39e1f69813e7dd752cbafc29f4eca1d34fe5b5e3a53efd5974deea2fef8ff4de89d4c86bebddf39e4a970df29d0180cb0057bf83547d5a268f954c5fcf96030e323f3afdc996b087a9b26f639cb02ae43355be78977872ba0d92baabbcbd8945e719ffb3fc9aaaef54fcebe471abf7ec38f5ec1679ac95ba0d645165333b015ce7c741f2fec5e09c3f57edc9eeaffa06aa4fa074d5a5e789beb8ebca807876d6e03e9ba5f834ba6c7b5e27b9bde0d361038b6fbfca466439c09a3d7d46bde1d33591ac787aef7065b6b4a777cae32e799c03644bdb8e0cf6746969636d07f7f8b96c6bb16d2caa6e88abcb49f2986cbba8873cee0e11ff78f73acae31e1937d5a63d1b9c3b69dc7b7f1c597b5d4e035f91e7a7baeff451fdf5d3dcfbbd3e96e7cade65db2532d463dd4bf56565bf3202fb81dbe4b5e1e0da29f2dac1de35218fdf3b13bcc7e37489effe594086eefed94007ddfd7df2faa5aeee7dbe92d7cff1c5659b4fd7e12c2a5fb37363e31a19ee0b5bf54592494bd54651e344678373275dfa1e1347d67e7d5af653e5dcf9beb4bcc09796999ab45475f648906ee3e5b5519af41d0d3864ca7b178167605aa8fb1703b9bafbea7c2472ffd2e8b4eca7cab2cb90b484fac3b4bc3c36ae9151beb02f4f222daf94c72be451d7cebc4a1e2748b9572421f76a79ac8e2377884fee9549c8bd561eaf8923f73aa6d73795f094adabb191312cdad6f9b963b703e2d56bd733adad0f546de51b58b4addfc8a26d7d2c8bb5f59be4bd715efa33393e1119cf626d3d0bd8c95879ef66f00cb45575ff16205777ff56a083eefe6d2ccad6073e24afdfcef4b60ef587b67e476c5c23e37d612b1b8d979677fa382bbeca1ece07e74efa0c52faa9b6c1a980ab2e9cbb5cf913d57b774b7913a5fcabc1393f4ef2853b49867b862b67b01af3ec2eafcbf6cfe0b5f2fa3d323c5566de2b9f7bc1f7dc7deef924d5867bc0c7ff419fad4cf1ecad252ef7837b306ed92cba4d22d3389203d22a1b5c8369a5da6f89b83e2c8f8ff8f84d96f2ae01e7fcb9c73cfd27a9718b47e5f124ef5e2fd53f52e9db1de8f1b8de5684ae20cd02b791549c9f4810e72065522e8b2e93725d3b18f2461c59cfc867be8ef3cc73f2f82d797c56ca5763e91783737effdbf23ccf775ff1bdc663dfff22a08792cddfb9368e3e2afecfcbe377e5f13b321c35e67d3a3857e58abf8e48b51d9beabd72a9537eb4fd8873271d86a93ca1586d4c601fdf93c7efcba3ec7746a6fb184c8fc360429261c5895764068beeb3cf90f765bb265220efcb3a3932cbf7bc1c9b602fcaf399bee70ff53dafc6aa7f20cf0f897e9efd10c8e1e72f797113baf06b2f836b87c86b3ff2f88c5063cab3a3c3663f66d1fd3bd5873b4c3e773d780f3250f76f90e787fbe274843cbf119cf3e31c9f5c353effa2efbe923bd7a7af6a6ffc441e5ff3e238e503f00ee0c95e8d9619d7a65f9232e6c9776e02e78e4d8f88d7fe57efcaf1f8c87c29e36670ce65c8f9af11b7e1b2220b7cfc0ac1757e5c28efdf02ceb9ecafe2e8f7b27c76912f6e8bdc7733f39378578e17458a7c712b9232e4f85fe6de38b2d498cacf7c69a86c96cb5ba249d725203df9f99152875bc1b9a3c34835d6f373a6b7edc5bef76f8b7e7fd418f9fc2fe4f1759f6e4b59f4d8d3afe4f1d7b84d32556f29dd9779cfb4e8f74b9f7e6a0e40e9bd5c867b3bd0435de7c7152cba8e52e3f2bf91e72b7df7d578bd6e6e3b5e1e91e3c791a37c767494e477977ceeb7f2a8c670755c240ff6a6776fd473d1e1b4dc4ba457b33cbe2d8fefc8a31a23966d6ef63b709d1ffbc9fb772611867ae7dd247552b2ef8af3ec1cc9af9845d7a3c52ecfd1cfbb5c46ab76db7bf27844021ddef7c92f91f2ef06e7fcbe6ebc55a5cf1fa26544e55535165b1a275d3ff2ee652b19bf07eff1f30f417c128d05c663fd09d3f649c766ca73d50ef93801b74f99b60f32767340397f64d17d943fb1e83e8af263527dc53f4b2eab7c1cfe22afaff6c213cfa86bbafe4722dd74d7b64a9947b3683b3cda8dffb8c5d246d478b9b2c3da0461c9e722704e4685752cb826e77523c781781e0baef1e31aa9db3de0dcd16dfc2b3eb96be573f782b0f9719dbc7e1f38e7ef8d96e7c7b3687f2b256f03d0e97819e60ef9cc5f7d61ac675e39ebf01aafda2eef81fb5d809eea9a9201c709b68223bf7ebf4c8333a2c34c9806f1f2cddf5c9963541df5b11bbf2ce93b92b5c1675b8df1c38a94b1e8b660993c6ef4d9d54619ce4d321c951fbe90c72fe5315e3b3f812eecefee7ba3e6c8f33765d8e5200dcac0357eac60d1ed75d50fa964d1f55da5abff84bd889c72e6b53b1d1d2628bf857fc8e33fe3c44fcddd56013daba4bc070232c84bf239dd35d59ebc3bf8bb914d3e3b90738291cd3e3bd8ec729ca8c69a54fb50c5efde04f6a6e61aff25cfab7de9572defff1bc8e3f71fc4656ac339c1179f13a2c315f213f533947fd77fa48c1af9ce43e09c1fb78038cbf18c08c8e311391f1a51e5821a4f52e5581d78b60e3ccb8ff52c7a6ca5dee53fe52e9f6cf5de89f2f947c0390febbff2bc41de57e351aa1c07f6269e51d7f8b149bef318387774982cc7f5a6ec45c26a96ef3d0ece61986adcf70970cee3961ffd7c64bb7cee4970ae1843394ff9e4f8f48aec007154f5c1a309ec55cd736783731e961c239da4ca89cf9393a7bdf69a3cfe4f86b1d3c74dcde3be9a82ec8fa48c5d2cba3cdce532ca56e360efc9e38709c290f2d837520e93c793a4fca7c1393fee6651361f51e398caf64f665175b83877f4cad9e093738a4fce29be74d923ef3fe37b6f0f8817bfffac9b6e396a4efe23703f69b61911e1ffbb9855b23256cf728403362f01935de2a0de4cbcb8818beec87ff19ff122d826b6d379b552b7c2609558bfd0c4a639f5886e85c160e11fa9422f14bfcb9c27aa85d0e72231413c1d130457aec6f957099647343ad71789d5157c8144b573279b2d758efcad0d6c2a5be3fc8b96b2da09b6c6e90456b252e777bd90b7c1513bf6c94451e24b29fcef143b32dd951eb5ce1505b4de39af111a9688dfdb84a69542fb22e75a935877b2956d62f39ce30e115a6cdc1b9cbf7561964a647a1df50b3eb0ebeeb212954cf39dd870ed73842dfe5f8ab4458a70f41d9f8bb8d9b0438ef0fe3f372625fe8fa15bc8f081b2222963aa401689ba96c772f8a91834091bc7d818eaeddbe55dc0f2e3c6454f8627f75011032f85879db4fe9347bef8fb9919d1519bc672c4f4d8b004518b0796cbcb121e7d41a29091d121972beac71fd1e117cba54ad288df7dae5a3c173c013a8aca2f3a01844b41a973520f2acf5542f91aa19a3f32eeb30b9df31dce7985f36cbdf3bb4c04562c8f31a999cb83ee241224b6ba4d14292c49dae992448c2c97b6498ec01624c64f94ce2db1f0122547b4a106c5315d2c2cd1b86a2f5b582a73359e73c987ef0c285ff3dce32bb6965efce90719faf4e92ad2279550b1146aaf4ba1aee9ce34896b8978e9d3ad255e5efaf01f3dc3ee888d27d20123d84147b05bba6d9cdfab1352ca9c678333e46ea993fc058f1ee04188112656014398a14198cb11f6d468c532baf8b4e20a21923bea12a77bdb54c9a91937f7cd1ee84390811a77efb8356a50d3eea4a3271c983790d2533dc512a74bb0c4b957e63c5f299a9dfcfa4a476299133697375784e0f52ea3df884f967ba94ff193d552ed2ba88e01fddeb09a61c43b6b88e7727beda7310351c6f933436f3c3374c1b259ffb0d9ac2b26794058c9dd30c903c34aee8e491e1456720f5db611ebd7d6a625db78032ceaaf79cebb9b9dc86c13bde666e77ddd804cfcec3238e9ec324464974ca61b260aa611964d0ed2a51dbf3854a7a43fe986e049d713133c2ca4e05e98b50d0f6b6dbd759279c9cd5750c4f425b46546275c7a1f9d2d0b4ae9ed54b97d0f2e277815ca97498c88293bf7ced35b6f26c3fa40f175c06cb5af2e7d38c1915ab534c99389274f3f4cf8288df073f6ed9b1d44787f9d705e6cf231edb095d1009d705e8f8c61b1adf96f9c9f18e1dd71e10331cdc76a349f33afe7de209a0fc2b2f2b8b059793026797c58c94374d9589449a79266e364e70916892d902ad90a27239dc0dc015e156e9d18dce51aa981e262e75825b4e0d7cb65868c1f56fc2222ab850fe8e28b9275014b7eb6833e167ceea59d28a6268a628acf0aad72aebbf31a0b440a548b90b2b5daf010b0e7158b656277a76691da19c840c42411ba596cb002782856d24cd694346fe88ab13825cd302ccb4e099b6587eb24f32c9badb1d55c6eab7cd94757d106890967121ecec1baa24154fbbbdab46870bbac5c5e9598ba73e52d677c83b2edc254b73806bc4d1a4ea9f34c831346a534f23085015fd6315cd7706258b77baac80e8727911d2863856580113a4be26d3eee8313d342e4d55bb1d3952d64eb45363c515ce694dcd4ad168f56b35d6224d99d850bd2a2ccd469c3bb4c7c1549c226765f5cf0484c707e48c1a3b03c3e3d6c1e1fad93cc4b1bbe82226c0b6b0ca6f68cb06a8fc54ad4999a12f5eb48b012751c267c9646f873ed82091f8f65854392b19138569d85093e5497c738c042314c9ae9fcaf73dee0fd893291fb334565e89506994e5eaf76fee215f664f07c9df3843beb1d44cf099851cc0e6b1413b1743b4c936e5f064cb74998f0c335c217b70f267c32967647e8d28e97f5bcdee0cd92cdb26e8b2e0d3385ff41a670396916c37d1522e51a45ba66b2939c1ae664e7d8e43c9d29ea811a712f53ecd7d920cada20693a05d37f8e4effae40ff9540c3202166eb42e484e76acaad48c0722b47279c377ce631a4e1c3d721056ff8e462d8e6ebb0f1e6d80231a15aee5ce0cf970803a86c692b57b452053955a3578e1845d8cadab241c67b0bdc41a751fced355178d8ded470988617ef4ff81b5eea47dff0e22bccb2c4bad774688f35b0f2b0427591a6508d042954a76179613196178a52ca0bf93a9b13834bf56d6a73788e2a16b279ce0bdfe0e76becdafb7bff62f42b3f09cb6a2d1d2789bd481bc57ecc2eb9465e98f2599b8d60e36517bec812fa3cb144e489746a8ee58be958adbd54536b3f9611acd62ed099ac18556c6853939d2f24a4c36c97e9cc560c7d162491f8ada9e708e1c7d9280ad50a59a8ba45f708b1596a83a8362b9debbce085f727890d45797b69a1e05d2bc8f3f895897e2f66e4cb8591a73b9e98a1cfc02a80159a0a2050ab7a269685566ab2d0d701b3d02c4ceda3c2aa7d08a676b146eddd1d83a97d2826bc44237c69a760c267eb84f382997bf384e9211e8609e6ab26639a9bbcf3aefa09e5be9ee246d15750fdbf0a7165a7f3bbc6b9562e44640a9f5ce58a1044cbc331b6ab356c7b05647b0486e0e8906ce7e80473f33c2619c171a66de7ea04f3f6d7b10c697ff135a1c1db5ff374e170ec6b34d86f0a88bd10cbe66bc366f3f998e47561252fc0241f1f56f2424cf2fab092176189b8419388dc1b2748222ec6849769849706145e8465cc8dbab2692ce31d7daf91ea769fbc718d325625a434387f6f93756e45d4f8081ff3a8969de620f9fc484ccf729d9eee1220ee70c5db1465620c8d87b8826d0914ea120c7d8506fdfe80e89762c22b35c23f0e287c19c6ab4ac76b508274ad107e3aded5a9ced5201c9763da6cd269c34fbd740b12ce0a0ce9660dd2ebba0643ba128b44b52e127c1ecdc57788836cb918f02b93cb97b6896a3c38c6a3300d4ed069c04bb6a52d0d839529360b8a31a45b34485f0f88b4042b916bc296c8a598dab5ba42b35b30b557616a6f0dabf66a9d64deeaa86348ab838fd2046f751c8d857322164e434ae11c83916a0c4bea589d649ec04d9a049ed33d58021f87096fd608df1d50f81a4cf8368df017020a5f8b09dfae113eac4730e1eb30e13b34c22b020a3f1e13be5323fcaa80c2d763c2776984df1550f806ccc84f0a6be46598dabb356af73b2898da1b31b54f0eab76b946728e709e4ba7eba8dffb2998eb285f7d9f9cd3335f7faf731b4d143e36a454a14b175e43efd5a914a02aafc4ace9548d357d1030135461c24fd3085f1bd0543761c24fd708df1750f8664cf8191ae1bd7a06135e8d25e6992113f3044cf0594cd3169c2cacb34ee4b14cf10547be3277abfc6024df1da1524c5c9709dbf7069cd4c4355fea9d29adb741da748d63edd9ced5205a6fc1b43e5ba7359f79e583b85ebbd9ed4abadd109d5f61261b2f5bdde303e95583d9c03e8d0d3c16d0c06ab1489f13d206b6eaca59e14a5c4d5ace627ea4a562f09e6fcd50252ca536b0d769fc32f9dca4cbe4f34499ccdd23e874c5caef3a5d72f3b6f57e86b4adf9ce535db9ca81dad6f598cd5ea0b1d9fc80e5d68998f00b35c28f0928bc01137e9146f819018537ea84f3660ddfc32e54b3a60953fb128dda1f0754bb59279cafe7e05bfb875d2cb20d2b812e0b59026dc7045fae2bcfdd616d35a8e48e7fac0b5883ecc012e10a4d22ccee152c117662c2afd4086f0a287c17562e5c85950bfc6b06c1fbdc27e9c2e1667d4d32891d674a643726f8da90824fc6ace8ba90e6790a26f8fa9082f7e804f3b4e79bedf9dde03ae8726b1c37b8bd9815dea8b1c2eb7a07b3c25375c279f178130b593c9e86a97db346ede702aa7d3a26fc168df077030a3f03cb99b76239f3b69472e6999839dece34a52577c25aeffce3a3177c827793f86c7ca57015dd21eed48bf63a6f0507b1ddb3302deed069d1b7458b5ce7772d7327085c178dd475381bd3e14e9d0e7da40ed39cffe5a245cadfd9e1fc4e5d837d980677e934e80cd2822fe4e06dc620a19d8399efdd1af3bdaf4f30f33d1733df7b30f3bd3725f33d0f2bf4eed3147aed03167afb3142f76b086dee1b8cd0f998f00734c2f705147e0126fc415dda06147e2196b60f6169fb704a697b11961d1e895734e5b572d17431a6c5a3f18ba6a9ad58345d82e9f058bca229bf158ba64b310d1e4f54341d2dc20be6747e1966be4f68cc7747bf60e67b3966be4f62e6fb544ae67b05868cef2519a6a1772546e7190d9d0efd83d1b90aa3f32c46e7b994e85c8d45e25b9a48ac0d18896b30f4df0e89fe5a4cebef68b47e2ca0d6d761e89fc7d07f3725f4d76391f89e2612a5038245e2064cf8f735c29b020abf1113fe8246f8550185df84e17f11c3ff8394f0df8c1927ff88155aad4d6be56aed164c8b97745a78d55a5e2b566bb7623abcacd341556bd35bb15abb0dd3e0473a0dba30af5a5b20661dea027aaedc8e19f08f35065c31309801df8119f02b9801bf9a9201df8945e2354d24de0a1889bb30e13fd1089f3d2898f0bbb1e4e6df5308532fdc8369fd338dd6f705d4fa5e9d703e3cc2bfde156a78e43e4ced5f68d47e3da0daf763b05fd7e52d3e441edf37cddd4876a9280379b9d3205c37dd25481562d66f2573f77b7497af9639572bc4c2d6cde25c959b656ca39c939b2ae6e4d4d2d79dccddfa2b53cc89bb9b78678af9980ab9207a8bb8d2289eaa0492f5b37ed572f612ce130675317d004ba05f6a12e8838009f42026fc571ae19d070713fe904e382f8c7e8d15466fa454183d8c45e2373a420123f10826fc4d8df097020a7f54279c67d6df265318c519ba7e4c233847ecb9d43653b0b11bebb4ee14ec5b3a5eda2958fed9bbf853b0e175c5a6601fc76ce91d5d6e1b12cc969ec0aa88df85ad229ec424bf1b56f25358fdf05e32f61fa7d07c5a67ff62dfa5aa36b1ff305b5ec5b7fcdf276df9ef0bcb9f18c7f2c36dcca54f896730e3f920acf13c8b19cf87218de7392c9b7ea4c9a61b8606cba6dfc2b4e6df908c6912f135df734547ab52ac3ad0ad57c914cda5cc80ae45dfc6f4f858a707df322398fcef60f23f09993acf63a9f3a92675de08983adfc5b4fe23963a3c8f6c964d44951e952ddb39a4eaf8f53d2c929f6922f9d6b06091fc3e16c93fe922c973a0f28d70dbb3d15e7841a2f50216f29f7521f3de7ea9d3da5fc9725af6a9ce69d9f3648593212a58d075232f621afc45a7c140ad064bc55f4d6281b8dbea4f6d59d00f305d3ed7e93234495d6237320ea2d30f31c3fbabc6f0be1e1eccf05ec222fcb79065c2cb98e02f420afe1126f8cb90827f8c71febb86f3b08383717e0513fe0f8df077030a7f1543f2cf90485ed309e6a5cf57c9088ed319fa894e30ef87feabe586af1fcabf5119bc1ffa530cfb7f34d89fca0c86fd675824bec622f1df9422f1732c12ffd344e2ab8091f80526fc1b8df031a382097f1d334cbee1574c71ca979a1533b80b48856863ab823c8b4d1015de56f93bdac93c539cb9d5cf64b1bb4183a8f5dd22b75138a1678a82d95be5eb0e2af1f5aaf5be96810a870f26b9556c554b719e290af38a80ee88bfc45844742cf8b638702b31b795e955b0de8adbed42c31ae62d1475f5e33a279290e73c1dd431ff5798c1b48b68a692460633985feb84f32cd53e8264a90e9154b2d41b5824323491b82a60247e83a574475d4a73e76cfd10e91a39b8ca1736f0de85bb034dbc34cd8a7b778270a17587553dbb8ece0175c232d4106af4bd2661574d9a5cb45168580706605dd975b2771ac4bedec4e8758a84abcc7e8ba579674d9aef0f58d2bd85196e17cc70bba664b86febc2e1cedfdd225ae7efb9419cbfdfc18477d70adf3b3f88f0df61c27be8851f1144f8bb98f083f45802f9c4bf8759644f5d7ed64a8f6396bfc7a4f7d249e737dc923f27856d01dec7b2406f4d161833265816f80013de47237c6f40e11f6294fa862c153ec204f70b29f80f188efe1a1c1501717cac132e3ea614093984f709a6f6408dda1f0754fb534cf8208df0dcb1c184ff11133e58237c4740e19f61663244974b9b58725b7a849b2a75871ed6474dbe9a3d71fa272c89866a92685fc024fa339644c37449c4bd4662e7ae8344e62fbaf078953f1cabf20f4ea9caff5c170e5f233f2299126a0f2ef8af18b04c1d305eb1e50402f4372cb5476a523b332b586a7f81091fa511fe4240e15f626446ebc8f0b4d06f9fe31f9edd269ea80e986bfe8e45758c26aa5f078cea3f30e16335c26f9b104cf83f318ee3741cf93c18fc825613ab6be9ebbb3d0ef7332f99e29506515256885e3d773873bfe7dee8d8a877c6cba79181587f85693c5ea77157c6b4a5709010ff858598a50b7180b6d85a26e2ab76e3f2ee04b3b37f639a4cd069c225f039d7a0eda2ff6842c9119fc8398aa56fcb8f64bee5ae9fdd9d18e19dba6818a24cd7cef04e8af084ec1f13b3b89f3c47c87dad4b1f7e3a3912fb49f623979ddae9ba61afb68b499a0c3c69fe8b19c0149d01f04d79b9dfa5db28a971fe6a92910a5ac0fd0f0b375b176e4f34dcadb2e11224ec6f74e6383cdde6582886561a5230c79c082faaa3116523c6988b1863bcd0316364110d37f19da8f569e4063f3a5f2236b4ad76aeac100356eef057630a4ca746827e63204f901d1d13f354f5c3a84734d445bf6f5ad87e5f3b4c727e58c9ed31c9d3c34aeea0932c3e8d1409ff69a40c9d705e90cc083930d011e331332c8f4e98e459612577c6241f125672174cf2a1612577c524cf0e2bb91b26f9b0b092bb6346777848a3eb81a97c4458950fd249e66d8339c9a81ce7936a3d3195e78655b91746795e48cabd31950bc3aadc07933c3face4be98e4056125f7c3242f0c2bb93f66738b42dadc004ce5c561551e88d95c51489b1b84093e32a4e0c158edbaa4156ad72118e8a561410fd549e6cf2f4b86471c9f95613ac1dc056c793282dfc7050fc7527045c8143c1813bc32a4e01158ea1d1536f532b1d42b0e997a23b1d42b09997aa330c8a521218fc604af0a29780c967aabc3a6de582cf58e0e997ae3b0d43b2664ea8dc7201f1b12721626f8b890822760a9b7266cea4dd475e9c58781f916a2e95fa1d11a1f278fdfd15f9b4c5a4cc4894dc2d2625dd8b498ac93cc37ec3c3e1995cfc3054fc1ec727d48bbccc6046f08293807cbfb6521f37e2e967a1bc3a6de548c457948167998e08a9082a761822b430acec7205785853c1d53795348950b30c19b430a9e81755baa43765b66621a9f1052e35998c65b426a7c08a6714d488d0fc534ae0da9f16c4cf0d690820fc350d485447138a6717d488d8fc07a8627b642cf700e86a321248eb9188ec69038e661455c53d822ae1003dddc0aa0e7636a6f0babf6024cededada0f6424ced1d61d55e8449de1956f2620cc8ae56005284a97d5258b58fc424ef0e2b790996c94f0e99c99762824f0929781926784f48c1cb31c17b430a5e81093e35a4e09598e0d3420a3e0ab3b7d3c3da5b3126f98cb0924bb08eda99213b6aa518e5b342525e85093e3ba4e0d558476d5fc88edad158ea9d1336f58ec1589c1b92c5b1188bf342b2380e13bc3fa4e03518e4f3c3425e8b41be2024e47558b57a612b54abc7633c2e0acb633dc6e3e2903c366065d12521cba232ace97c69c8a6f3460cf26561219763902f0f09b902137c4548c195188b2bc3b2a8c2ca8cab4296199b30bbb83aa45d6cc6585c13964535967cd7864cbe133016d78564b145233827d3398df06f6499b071d81a39c8de7a03f3d7eb98693def6e8870cfbb1c1664f3b054f4c53cf26a74c9ce53e7c664929d6b8f08aed509e6a7374562bd7dd54f106fdfad58ed79732bd49e7598f05b5a41783d563adc1ab674385127993f7f5b32a9196702b34127987bbddf9e8ce049b899346282ef0829b809837c6758c8cd3ac97c11cd5dc9a81c6741d3364ce5bbc3aabc1dcb8cf7b45266dca10b80dbd3bdc930791b17bc13837d5f48d8bb30d8f787857d92aec21be99c46f8e7b4dbc2b55c5518c1dcc81f48ba127b505462836362978c0e58c5b41b2b811f6a8512f8642cf11f0e9bf8a7606a3fd20a6aefc1843fda0ac2f7622dcbc7229a552cf3c569b1632c256c3e5bd2b27fd872c617be6d1709bc45267db658ef52e4dc5fe1dcd92a4c9a5fd1b75f746e13fc69685adcf0eb98bbd838d847404ec562f9b82e9667b5c47295d392e299cecda0b5e2ef22b95b7c8358d4ec66d0a2962717b46cd917bd295083e451c2dcefd216b266112f2e379a9e27813f1f4c0f4c5229e32b653689bbd14c6166f5f35eedc809ba2aea348cf413983dc110dd384d73de7169d53985e27ac736dc65936e6c4be536897e6dbd77f1ebad654fa763b17c5217cbc37db184ccdd782e94df682dd3587d740ac13bf1f20a7c2b48cccec062f6942e664724957e73c59600d54cad1e0a9f72de9d20713b138bdbd3bab815f8e2b64ca4ce6619337eb6a3cd6272161693677431d99fe6f2cc7b876f02a516965780bd251b0358396487c782d725cda299014b3ddec06abdb2ed6c8cfab33aea7393ca1b4b99fbfd13134ab57d58fc9ed3c56f29a155f1ab278a6078acdce670b508ba9aed62656849924aaa9e83c5fa5bba581f1637d6b8a6c5222eee66686e1c556dccaf964b42b1f922f5d43c178bd7b775f13a3670cbae44dc896edbe924b8d7e00613734557274c4b3095743e0fe3f11d1d8f2569a9b3a96bf3fd589c9fc7da29c16c40d9b07e2391a016112466e76331fbae2e668720315b25f2678d6c9bb85d6dd56b592d7371454c6ad0f4512ec062f43d5d8c161296be2a55ddbd093632773bf2d68be985584cbfaf8be96c868d92eb4a8ae818c0edab3893c522951b446fa8dca97177b662ac2ec262f542327d82e870610b6195488506e7599e0f37c5a9fda265b45ecc2ec662f6a22e6685094bcee47a0578191aafcf9a6a49790916c71fe8e25849dca26e12dba6f10d71dc16f36a6101d52db9b175fa88a9d4a297629c7ea8e3b4aacd7a1ef10985e77019c6e1251d87796819c67b481b9d8754de70b7418a5fe3e825b5764a5f8ec5f0655d0c8b02c6507dca579f226d11df2bb0f8fe4817df6242cb6e4ca1fe6d0d025762047edc5af5b25bb6cd05b5327dacaec262f58a2e568b02dab1f7ed4e136cf86a2caeaf622314415370a17822d61afde56bf27283c4ef1a2c7eafe9e2776888966393a879f94e4755b29f87c7aa34e6d92071ba168bd34f82a599df3ee1e79e12e532ca9af23a2c7e3fc5e217a4cfe8c675916c337977f98c47fcd6616bb51cafc7e2f7335dfcc6b0f8a382a50e610a2d6fc0b4fc79fcb1bd20a95092522a50dade8d58ac7fa18b35fe31c7d296a97a5846781fd7e0757fb3b6dd99daf8fe4d98deafebf49e95b0c75524e606f9e8638df8b4c202562b76738bedffc64b81d47b903763f1f925d65a8e9f47786f78a56841366ada10c9cc25f09657552bc6f0162c86bf4aa68fac9f1b2812b6c7c7c1cbe418556c7aa5737ee0562c8ebfc646a8921907482696a99518a9c7f4362ca66fe862ba38a9d4f4cff4b8f950c5bb2dd3f5762cb6bfd1c5f69884e94a3b324e3d667e0746e34d1d8de5689da1e68bab249542512fd60a5bf06bea6d1f9dda1dfc5e9098df89c5fcb7c98df379a142bb9f2f7a7a7cab676c9c2f9d71bc0b8be35bd8286d322d02d563af72aef24f1955c8996fbefdb77a327ebcc3b775eec662f6363623a28f59ace7795bf58ceec162f40e36d698b8979d4ccd934c5f3d787f3ef5f2f95e8cc3ef741cf00f33e3bd5db507756b95a1f7611abfabd3785cc21ac59b67ac145779b9da3a2dedfb314ddfd3693a234e79e0b7f468cdeb456bd51b9ba6c82f0f6071f97db01220d64ee633d713838f74259f47c297690f62317a3f196f42acc5b9c0b0d6e643582c3fc03c138295dceee848ecdd586f13b5c13f9ec2b152e68a1150dee30f12e787b1387fa88bf3585fca7a6152970f8f607a7ea4d333cfa727cc0f7e9d17499d936ddfa73a66fa2816833fe862b096d1cd6ba851ba78339bd00293cd79ea9d20541ec3a87c9ccc6cbd0a3148a9e2c50ccb71ad539a3c8ec5ec135dcc8e6be3f40e92cea9e6802730229f26336e11b4f518bee79a7ada3f89c5f48fc99456852255dd146c02e3d1ae1514b0fc04f1d39564fcad2031780a8bc167c9fbd8f23083e44c183fec7a6ba5d0d358fcfe848dc3c76fd178dfe7f0eba8be8f82e72fecdb1ef1f2646ab5fd3358acff9ccaf8af9baa25cec31b99db1b2d676dbdb6e0592c867f4926e7e909a7d64e48dc67ebe4fc8b44c46ef9428a3b9a5e27de111f231be5dc8ae4b6d40cd92d257e7654ede05de7e1d73aa9c1f344694bd9ce17fec597f0b903a7633be6fe8c975fe7722bc44815f32f2c2c14f26b6479a3ac355b10727d90f982c96ca715e87e484d2d914c140b5d2d970dea3918bbc4715a872c798c88cfe042590e69fef19d032ea67fe5a93a42a66abb1c3ee5199994a23525d6e26f3cb4f67a1b1a184316e60e9deeae80e5723c24c277b8582f8271bf638a3bf8270cd9bf21b43fe42942806a0f2614b70a14013a718385b9b94e960dcc9d7a78cb91d929a35d2e4f912f28b1f145c1f345bbafde01e7fae9a93a0703d8680542de255708bfa444c8bfc9aabab58bc5f43b17e07dbf7e05db6205b0873a7bc0fe4e09ac1f73bfb097cbbcf1789bc1f5eae681fb0725b83e1a705c20ff6e299f646f16572bac80b68179d0fe496d6dd1d973a1f3bb5afa6a2a2f1ed7ea6c0097d5dd03f71525b801a23dda9874b56003bccb40a5f02f4a78dd40565d1135026303a6fd433d4cffa6c4d40560f21c746d40f4557f0fd17f28117514881aad2aa33af4f0e07c4d0987ef34b4a2a5cdafa6ee5cb7966251e83733be788117f32be550900d00c70cf300fe971260679001b99a7c36d30640737a7b80fe475d42ad1083edded62676b4b03e0385f83794883a091b6a76a455484036e0a918ede161edd294c5d4622a1b0075efeb018a5002e2fbd0a916fa02e19555ee58936a5672efcb0ad1e82c1619b04264c71a27401b20f21f05b11d2544fe4d79088f8f80f185d3952d5b8c5658de76ef07c6c4da53a2ec218b7c656f3b65836295e85edb80aa33683e74a044053bd7bcaf08a797557fd1a686eb579d3c701994e006f8c0c195967345779bcff8786b4a6d80b71b8c8375a484d71dd4a8de623a7799a70da0c680c66b274a507c687a99c87e5b7c7bc3705fef0611920dc036b4f380754e5779e60e16463bcc5458569ed58031fd2e94e0dca169de94703d506d6e68bc94e141eb4a0f2d7a3c7f15e846155bd49dfae9280f5a37ea2cba40cc42368bc0bd1dadbc1dce1a9d866fb5139e0de03e00d6d69d12dc41a06cb375d688bbba28583da8ad4cb913d4093176779e66032b3b8812dcc0282bf3164e3531d74d9577e5dd1dd5f912ac4a4b46fb6782d2ad67ba32a9ad55413e1859eb45098b8ffe173b19b49025bf11a90d00f7895e68a70c9f70bfbf73eade67c1a8e37e723d993be8542fae36c9067294df1c5f10629ce6bddb01bfb7ac940720b312d6a95949fb6c64059e6fcf4ad1792b2ba96e6156c811c5ac001e795981aadbaca43b1b59811a8b592995275981c6c0b202f530b392f22dcb0ae450951578e849a733ee42931533619d1577bc264b3b0599a59d35c942fc05b2e2b85b6421337859098679b3529a5bce4aa1fda32f2374957f56c2e641966632ce7322d73b7fe77227f23eedfefff6efcee5fedd7d3904fe9d15fee3b65ffa51b75f78babbeefcbc4e89bff9d754a715e1d361588c0ed19f2c52ed149d365da25a32072513c1545a330380cf557f9370e659897321c039c0249cd3acc45909700ea41e8b5f2f33713456b76ae18fd987ef63e6e11b940e6bdc84da23547f3d9bce0ae87076a7c2f900c039d8249cf956e2bc1ae01c6212ce1956e2fc04e01c6a12ce022b71be02700e3309e7542b7116039cc34dc239cd4a9c3b01ce834dc2996725ce4a80730425ce4ce60d26041b88e06f358827c8f076a2c2fb26c09b4989b7bfc45b2e073dfcdb85b8aabb5b51e4d281cca002f935003992da61d56fa789864fd360a1643da5f900ec284ab023181c4f4d7e3ec166b8a300dcd1d47e9bf10645a038de90b2af24ed0e0644c650a2ec2951161c40c321f7023b1c9b0e7833d30fef6d2a788f0178e3a87d54e2d5e1d1999874e8832c1bff0bc01c6f12cc1916c2fc3780996512cc7c0b61fe13c09c6012cce916c2fc0ac09c6812cc3c0b61fe15c09c64124cc2893532985f0298934d8249d82b2783f9198039c5249836f670fe0c60669b0473a68530ff0b60e6980473968530ff0760e652c29c2861d6380fd588a3feb3f0413e2d473aded9970a791918ee984a89bcab40be59b81abaae8f9b9866f98305831cdd8195e6b5e5605bf4a6d684d6b7870ae54e607dd328518e8fc9f06542d842a6be8c38cff9cfad739b180e6e66f1f6a326854d56ba1e0260e7a7c36e93abaa6c4439021401d329511eac290292fd220f29daf3a8d04e06565ad0b656ea4d1a93a2cca442f936b0d219d428e78a453275726900dfa99d4fb56d95cb85d4820977198a7d757e078072663ad6c44f75fed7aa369a682af1ab6998de202b334f010867a503e18c030ee15300e1219408fb326f0e5d1dfd9f69b775aefc0900f15093161090ba1d92e11c03eaebd926e124f59323c37924c07998493849bd38c97036019c87a767794b6efa5d128650e17b0d94954798e35764e3d8e678608973d281123a162e751ae18be44a5ef7d3cf363bbb6e035639977ecc1d8e56ae675b04ba79627dee16296a21e31ec4352c6613210bb2780f00735e3a86329ac47e038d2da3eb6af1b23aea06e2a652cea793a1bd0ea02d4cc7dc50b24b0808cb4fb20504870398f34d8249386b4906f3500073814930097d90c8604e0730179a0493d03b8e0ce624007391493009fd36c9601e02602e3609a68d2bd86602984526c124f44122833916c03cd2249884f33c64308702984b4c8249e8b74906732280b9d42498843d203298e300cc65e958f50b510673de22acdfc99cb7e68231a5e56de97ce81f2c262c45c9868a27005b5d61124cc2fa9d0c661e80b9321de3ee7cb4731b53dfad4fd3442f19bec100df5194f806037cb13e715c98b7f2dce699f39700d0e2747dd3e0c0723e3819202c4907c282030ee16c80b0d4ece610e1a8265973e804d01c5a952ef7186f8a0dce12914fae914d5aec0636bada1c2f611b17a71e06501e9dae5a3cd176d936bb6ecd02408f31694fae99560e75fc03e03cd6249cd3adc47917c0799c493849175093e1bc00e05c6312ce1956e27c1fe05c6b12ce022b717e0fe05c67124ed24df2c9702e01388f370927e9aeee64381b00cef526e124fde60019cee301ce0dd40df9e4be02542c54e3df21226cc82fa1029a0f8096a5639fb836f8e600d90ac9ad00de464a784359b28b4fa357a2134ea5bd4f05b50a8c1d959b0895d065860cea71006a858950094795c8a01e0ba0569a0895d0ed900cea6a00b5ca44a884cd2632a83900ea2613a112bad490411d07a06e36112aa1bb0219d491006ab58950091d6ac8a00e03504fa0843a8dc5ce2445af2d2a64de6711dd88447f6431fa2bb0ded7334b4537414da91026c254aa44e0abae54226c316705a78d5b4a1f0cecb9c6dc957284bd2fb249e79f012bad35671745d21d19c8ecf42c0073ab49306ddcfafc6c00b3ce2498366e7dbe1dc0ac3709a68dde25670298279a04d3c6adcf4f00301b4c8269e3d6e75b00cc469360dab8d5e44a00b3c92498366e7d7e1480d96c124c1bb73edf07606e3309a68ddb035d04606e37db35dcc66dce0f027df71dd4c320457240cf9db7e79b03ed60dcfd769513468598c3af7408b9473294995428fb004bdd4989b287b45477d3aa1a3120e2caaea6dc6989ecd3a20c80db95ee4da3931f41b271a7a5b1207b9f942e4ffb656270788b6ff078bef35a8308d1664ffb61c0567753023d286e266fa443d7950a5d3b80eee4b65c4063ffc6160300ca53d2b18a987fb5fac059455c02f0ed31e32b05ee445cbdb058778a8dd432c9bed5ba0354387b4ddaa697b45f4e66a97d01ce534dc2996725ce7900e76926e19c6625cee301ced329718e66b1eb381788ce63b9f8ba86ebfabdc279bd82f11e79b100eb7e61a3263d2dcede5490fb83caea0c93962c4cb7721fc57b00ce334dc249fad166329c97019c679984738695383f0038cf3609678195387f0870ee330927a99b0219cea500e73926e19c6625ce2680f35c9370e65989733dc0791efdf8521370813dd0a632fa0294fbd3356c5c2250363b92e732fe79bcd57275a7c269f3b0f10600f47c73bc8d6d74a219083a9d17a463765deda0e8ae37de287aedea21db375eab0076792125ccfe71caccf98c7f2386df2b9564ec2b31fb019017a563e1761b7c4d8bcc0a8f00f02e3677010161a3886c02f80e80f69274d8e58cf4db2519bc4701bc4bd3016fd60194a95f05f02ea3afa7376bb6f52b719894b372a95095d815840f07dbd77eec06605e6eae8b0ce124065926cf04edc92bccd9d7d3c6c5029381955e69c6bc7aa9283fb78aeccfc5d5d2a225dbdb6603b0d2abdad64a5d5135a2f7438832930ae5ef80955e6dd22430a9833659d5940b2cf31a9370e65989f36880f35a93704eb312e7c900e775e9182d4a6ee02dcfca852deb01cceb4d8269e3c2960a00f3069360dab8b47f158079a349306d5cdabf16c0bcc92498362eed5f0960de6c124c1b97f6970298b79804d3c6defa7200f3569360da382bb902c0bccd2498362eed5f0a60de6e124c1b97f62f0330ef30a943493aa146d6a11c0270de69124ed2e61119ce4500e75d26e124752924c3b919e0bc3b1ddf229cce0eb46f115ec33c84f7a463514be2498c42e65f1c38d711da2036a0205d2678438408720db0d37b29210f97906b9c8738e04ab96ac85b2b145d0c40375842b064ab851603b0f7a563bb1405567d24978bf166e0e335a76c6c991600bcf7b7e5345cda7641de4385f27350ce3e408972a44059e43c542c80f11d14b6c9d73d6b5d2f3f01394fec7dbc45dee74e8adc3991705b15b2b6401700f841737c8e6dccf61920db3f4489b25f02942aa6a4ae3693a86afd4680f161b3f7f2221c1d25dbcb6b36c0fb88b96eb4849375644e626f81b2f4d174140058bdef150084e5285901f01f80f131ea2dd256ca1ebd5ab351242c93677bfbeaf25e00dce3e9b0bfdc161bac60ee967d756258c4ee8d7f9e04189fa01e58e6c0e68b80dbf45b85cba9601600984fa6a37d991ba79b69f798d3cb00e553e918b6cb3fe086edaa01c2a7d331a2c4ad7181a8a39b85124b9d57ca45265fc1b68b81ba06e71e6f20d5339b97aece00609f31c73fde46c79a2301ca67d3b19e28dfd70bb2b9ee6e04f09e33c7039eb01f9e4985f21d80f25b266d3c31931227d9c6135f009cdf3609e7742b71de0e707ec7249cf956e2dc0f703e6f12ce1956e27c03e0fcae49380bacc4f91cc0f93d937092ee174b867311c0f97d9370926e704a86b31ee07cc1249ca4ae886438d7029c2fa663dbf269ec40dab67c01c0f703937ce548bf6049867302982efba1493849570d91e13c0ae07cc9249cd3acc4b90de07c9912676721a0527cdabb81b9ce87f6f9bd750465e38f28718d6741bea9ce07889b8548f8ed744e2d0dee300ba9604f05b07f9c8e7a7caa68f41c283b237d04f0bd928ed91e3e55b188f1e9073e49b149ccf734583d29712a40f8aa39be6d362eea1f0d2a9ad7a8b7805c29cac00aa6bc2fb19971c2ef5b9155419d814dfec45cf72b1bf7e8ba0aa0fda9395f549d66e55e09bf04307f66124c1ba7747f0360fedc249836ee95f00300f31726c1b471af84d701ccd74d8269e35e092f0098bf3409a68d7b25bc0860feca2498362e4df92e80f96b9360dab857c2f701cc374c826963c7f23d00f33726c1b471b7b8df03986f9abd748ab04f44b674ea703008f25bfaef60e0e349aeea05c27393b03acaa002b91d807c8b7e556f34487734930f746c65478a71f7fab8b3e8367efabb3d2808de36c71ddbc6ee662e40f98e49de1dd329ab2832cb7c04e0fc9d4938f3adc47903c0f9ae4938675889f34f00e77b26e12cb012e72f00cedf9b8493747d3919cee300cef74dc249da5b22c3793ac0f981493849b72a27c3b919e0fc9012273f51cbf6ed9ba5ec09307d6492d5cda41c7327b3babf039c7f3009e7742b71de09707e6c12ce7c2b719e0f707e6212ce1956e2fc2dc0f9a949380bacc4f93cc0f94793704eb512e76280f333937092cea693e13c11e0fc934938493fe44086731dc0f9674a9cc358f49eaf9c4333e3b341fe9d5efd6b300847dac97c8c7b80a98cbf50621de7c3ba91c5fa6d26efe149889aace7742240fd793a3ce267b2036dffa3674121f0d774781f2b6b6d14f6c78b8085125ea5764ed3de3db50b8175fecd9cc506363a250e0728bf30d7479ed08581ac0cfd092800be4cc7e652537db69a86d2930cde1c00efef66bbd7107a7c92b9d7cc02d9fe1fe968f0c3ad227559dceebafe47c05aff4989738cafaeaf6170f9a0fe63258be4cb69fb42c1442acc1381d57e658eab8d8dee8bcb81c5fe2b9d9f25e119bfc2b7ecf0c0ebaab60396fa6f93f65e201dee23c3d90fe0fc8f493849c7a7c870ce0738bf360927e9e82919ce8d00e77f4d1a3d9d4eb982936cf4f4415035fdcf249cf956e2bc16e0fcc6249c33acc4f929c0c97dbf8dc1596025ce9f029c119370926ea14686b314e06c67124ed2cd04c870ee0538db9b849374473a329c550067074a9cde36556d30264ad667ff10e0cba0c4a7069479c055c21295ecadf211fbe04500bc8e94f0925b50a82a19fb26df0683de4e275340da388bd90180ec6c0a48c2c90c32900b00c82ea680241cc82003790400d9d5149084b3ea6420b70290dd4c0149b822980ce43a00b2bb2920099bde64207703903d4c0149e8d54106b20e803cc814908433906420f700903d4d0149b8ad0f19c85300c85e94208379c3d9b8ab5c2f80b23725ca892cd68fc3fd5625f4300aea8944d89d24f344da0490f7a11ed4f0f67ce78a360a0e9bc42ec7fc35fbbce4f894a682d797129efac6aae7bda9f7352a15836b1c6d9510564bdb373f8fac960760fb51821d1d5310b83e729eeb3617e87e58395e696be34e893341d6ef4f09d9bf4cc605cabde67841305fdb1eb077c7af5a8075403ada03c979c9d9b8fd641628060652a254def1b069957c094b8896ac842d01563a289d99bfda516235f33e410685a7cd45760f15d6668075703ae688a61f40136c7783ec3e8412de404d768f5772dab8dbec1c6089434d8269a3bbf61200739849306dfcdec6740073b849306dfcdec66100e6c126c1b47103d43c00738449306d5cda3a0dc0cc3409a68d23a3d900e6489360daf8bd8da900e6289360da388a9405608e3609a68d031e5300cc31e97078c560c6ae5b23ac82c856068d0038c79a8433cf4a9c4500e7389370927e908c0c673dc0393e1deed87c867d1b187a4bcba27f327c85ccc3974589af1fe39bf096c99dbdb8a8adcee39b9dc7ebc41031fc4eab7d183300c609941847306f2b0a77ee67bda36ea3a34eb9e0c1a786e732be2a9d8fb79739027806af60367f967915803b311d1318a96def43d888279b7bbf09a09d449dfde355462aa6a41316932244181b402534991263a6066330f71ac2112532f79a4301de29e6160084131c6405c0af4101904d8976a440bb58d86731e3b39395b2baaa10a29477c8169100dc8ecb9dbf5df10b9d63a523b6c2c2caab2b009c938e121673642814164bbc97672e5509fb0dc0989b8e0112d8c052ad55affd6a77836a108039351d1e771066e222c05eb00b01d83c4ab06ac7d969ec40db71f60a80709a398e5f364e11170194f9942847054059e284c98534b115ce5faac7df485b2de551554b0cb44ca753221ecca21dc0eac570c9e6b8366be344c831006881499b55ccb4f2bbae7f0345c00c93704eb712e78d00e74c9370e65b89f31c8073964938675889f35700e72126e12cb012e7e300e7a126e124757120c3390fe09c6d12ce6956e2ac01380f3309679e9538d7009c87a7a3e79e2b7ebb473e8157c2dce1117b073f3602844798b384db467fe451a01734275dd6e8f6deb9a01dd212d3308ef43e15c2a78135ce4dc7b83b4758d9b2345bddb67d38ee3b00e3bcf44ebd1de81f821802d0169a3aab495a9b93cd6afe05a09d6f2a5ad2663c19dacb01da05e9a89af20eb8298ef100e1c274b82cf2fd63d3eeb248e60d3212e05b948ea9e0e46688f2ac9c23ba0dc05c6c124c1b9bedf703984526c1b47119e12d00e69126c1b47119e1ad00e6129360dab88cf0520073a949306d5c46783380b9cc249836ce9e5f0c602e3709a68dcb082f0130579804d3c68d54be0560ae3409a68d1ba97c1bc03ccaece50636eee6d91f8cbe17a7a37f5ed016fdf34c2a7ccdc03a4bd231f23eb525bb57880163d7a5d0f69599cf008ca5264df04ea7ac80c826781f063857998433df4a9cd7039cab4dc239c34a9c7f04388f3609678195387f0e701e63124ed2458264388f05388f3509e7342b719e06701e67124ed2ae2519ce4d00e71a4a9c6ab7d83c5f9fc8e6b9c85a006f6d3ad608713799f98ceffa51ef74182b65a3dd5d19542904960901703f9046abfde2c600c4eb4cdaf087d401810c671fd03b3fde249ca443c66438f301cef526e12475cb26c3b906e0dc4089b39b10e03e5e234a465e521651ee91405609f506256499490da2e99493bd640da2fb00ce8d26e1ccb712e7950067b94938675889f30f00678549380bacc4f96380b3d2249ca49b9d92e15c01705699849374774e329c3b00ce4d26e12475e322c35906706ea6c43981f9b79be03df60a87075f6fa1e2e92d72c166d8e73a7f35884961d2351a0f4688809f049af3d594c0d5f75d31b785e892950c24d9f75d4703cb3dc1149084164906722000b9c51490848e87749f6e06206b4c0149e80e4b06321b80ac350524a1c73b19c8f300c8ad9420737db57b33ba4a0d5f8759e83c51ebe85327ce7854d354d7df4055d76f01757d5d3a5c14931d09259c94231b07ed0960d69b0493d0df930c666f00f3449360da38421f01301b4c8249d8ac2783d91ec06c34092661438a0c664700b3c9249884cd7b32989d00cc66936012b64cc960760630b79904d3c62f16750130b79b049370fd3addf6fa00e60e936012ae5f2783d90dc0dc490913df177ea1f3bb9ab9df2c2a750470c1f6ef0b7f0cf3c0eea2043b4c805dea3c502efce8e092ac36fbb606d942ad4e00eb499458d557b7d48049b5a344a56451250036c49904b17327ee725018ec36673b3f1bb7b21804509e6cee7654848d29b2eda81e0245c029662f8525ec929295b03380e5eea1c4db17b408b6891a9f3b82bb5f2f4cd34ace3d642529b0d1bde9708280cd2aac2d40de9822b3c94c80f3d47494a6b1593e99f2d4c6cdfd8682ec7e5a3aea7c6c2a2fbaceb7715f9b29c04a4f4f475f2a953a9f703284cc462f0460cf3015ac8d9f823c17803dd354b0367e64772e007b96a960095ba76460a701b0679b0a96705a8f0c6c0e00bbcf54b03636b08603b0e7980a9670e89a0cec1900ecb9a682259c602103bb0b803dcf54b0368e5c1d0dc0ee37152ce1682b19d8d500ecf9e9981284c32dab1cd91562eb824a878c7b4cc3604b2615cc7701cc0bd2b117de74d6067be191d9e24900df85e60ca8d8b883e83280f22293362a20ddd3896c4a7a1218eabbd8249ca49b1091e12c06382f310927e91659643877019c97b6a55b8f7f20dac699fc6a01b353864ff8c218e185c272b8ed94336fefa56cb6887167077777a672e77ca9684736b10d4ed9b7c6f9172c05d639ff74d7236283ad056c07ab1757b9bc0a21bbd6b9cb356b64b9639d472ee306d1591a4496a8fae63accf90e28c5a299d5e0bc53c2dcbda55638bf955351b3409225368e5de95c6b667cc69687b0d5d164336b10318ede7b2a2bd25970723fedc6e3c50166495dd5e7de8a64a55bedc4b94c68d2e03cd34184e3e6c7ac480f70a6a6368b44fbbb516885efe8e2c6b188b9eb70dc1db2b8dfce0e4148d7e4e4c91d89f49629cc63b74c482c934f963956a774c819e73c1629707eb9fd82ec961e41b65ce5532bcfd4f5c43279fac69776394fc4883e57d7b49a65268a919b99f8fb55c22baa52482d4a18d3c4f1c3adbc7b9c54c9e1df863aa0e37f054f7799ecc24c070ac38746bcc279b8422835675ecfbd19ff0f3dd4c15569480300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/16ef152668069a445a8a154652bad845.asset.meta b/Assets/SerializedUdonPrograms/16ef152668069a445a8a154652bad845.asset.meta new file mode 100644 index 0000000..aa2347b --- /dev/null +++ b/Assets/SerializedUdonPrograms/16ef152668069a445a8a154652bad845.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eef933c2b5f6c324a97da6dc2b77c451 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/182b3f96945648a4aaecc699847b49cd.asset b/Assets/SerializedUdonPrograms/182b3f96945648a4aaecc699847b49cd.asset new file mode 100644 index 0000000..8ebf7e9 --- /dev/null +++ b/Assets/SerializedUdonPrograms/182b3f96945648a4aaecc699847b49cd.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 182b3f96945648a4aaecc699847b49cd + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1dc5f1f8f7b957dc7b93fb73936449960bcdbd80ab241b836d6c59c516962559c50d03a6f7de4cefbdd740421212089000a924218104484802842424218450ffb77bbbba79f776eeddbdd33cedf9ff933fd6e9dadcec7767fbec6e9b1c66fdc4265bbfd6b022368f65b3d5ac9cd5b21aebaf79d671bbf5cf3e53d757b27aebb8c5fa5d6add9bccb252bcc97fc6c7065abf9758670dacd17ab3899559c72a71bf9855587f2fb1deadb0cef8d54aeb7f85f554ac9df5d26a369fad60cbd98058bf1422d688971ae4b5180f57ac93f57b2edb63ddad104af18fe4885b03ac5fc5d69d06716fbba5b47a6e1ddb2082b5ddba5766bd53cfaa2d999b85c44ee5d94cfcc1ec437f791c208f5cc7cef2efb6f2ef4ef26ff87c7b791ce8f3f941e0bdcee06f4ee8668ff707cbe3c7d6ff0ed69f3bc1397ff743793ec496d766ab87ac61f2385c1e474899bb7ce8df511eb35284d74bc64820cb0fb34ef2385a1e47497d77a7f9fdb136a3d8f5401e3ffe07e8331a7cbb33b8cf8f6342845dc5e327ae78fcc48ec7360764fcbd2baf8f93c7b83c8e97b2ad67fa8c91d726c8e3d0147a4db4df63339863b3d637dbd6c9f349f238591ea7c8e3a752d73de03cac2e2a4eb3e5f1bff21b7b35d7d5f3fcfe89f23c471e735df135553eb74f9ee7f9d4c78ffd299dfe27bf711238b738b6dbe4214bc5fb67ae78ff4cbe7b89cdb1dd53aef040fbd3c9cd97f24e4e231c9fbbc2f1b9ad4bfbb8ebb9543a28f905f2f885947b0a38e772af0818b676f2bdc7e5f934963a6febefe3de0c5b4e27c57aa6fd9d0e7dedeb1d0e6389b63c3d859e2a6ebf74c5ed97526eb594abc23fcb3e8f29ce59400e7f7fbf4bee572eb95f49b92a8f50369e4acf43e5f108799c238fb359733a1ea3d2cde1f278a43c7ecd12f380afe5f130e7ddfe3d0372f38aa3b9aeb81e6a1ff99fbe6c719e3c76f6f9bc7a667e089d17c863179fdfec228f0b437cb3ab6d0b9d3e72d9c2cc143217d97c3b35021d2c399d55fc2f96c725f27894e4df36d10e624a9e971da4d2e568a90b037160e9d245c9592a8fcb1275b1ea92893a9dda723ac56252e669e09c1fdbc8eba78373aeeb4afb3b5d9e973257c8e34a97ceabe874b62aefe2bdeedd806df879cfcbbe8aedf075cdb565772d91d7d551e9b6c0d1bbd37cf0aed2c34f7a582359b4773196f5e3ae8aed31aee7ce00e7fcd8cef95e4c9621dd946d0d06d7f9bb6782737e7fb54f5d8f65c936cbe5803aadf89b7f5be6ffdd2e91cf1ec792d39eee5d7eec00ae7590f2de94efad63c9e5987a8e87ed2c70ceefaff519b6f51afdacef769fedf1ee069698ffcc73eca1e34fe5b5e3a53eaa2e771a38e7f7473aefc4aae5b58df6790fa5cb26f90ec8d7c5df967e87a8f2b4541e2b98be9c2d031c647ab4da93cddf1eba565edbecf1ad72f94ca52bdcc58e9cae03a5ee2a1d6f618969c6fd2cbfa6ca3b15fe5a79ac719e1daf6c759b3c6e97ba75618965f409e03a3f7695f7cf06e7fcb92a47763f95efab3681d255179f3b5c61d7e5015e76566f3f3b56a5eb069b6d8feb25b7e75d3a6c62def6db47beafea45bd12edac99655f2027cfa76caf70ecb4f56dae5fab76b46a9fce06b2fb49f6dd1c56cd75ae26708f9fabba57234b282b3c755171df3d4578fa83e7f8716f88f07bdd53798f6c63c4bab384368738b7e2acd7f51eb24eb6390d50f9de29f63bbdef97e7fbedfb3d55bb5471926dc9d8210eeb9eaa6eaff29e1e20dc328f89f504d764dcc47a39d7843c7eef7457fc9ce3ba7f0690a1bb7f26d04177ff2c79fd5c5bf73ecabece7685a5d1a56b4f9690ced939e03b9dc133f0dbe70588cb73e5bbbd5d71d9db8e973e5eedb3f3f471d957a595f35d7179812b2efb68e2f242790fa6ebf1f21aecc753f1db1f70e823ef5d84c4a5ba7f3190abbb7f09d04177ffd2c4b8ecfb9abc7e191297507f189797278735d6cff5edf37dc4e595f2a8daa4ba7ae755f23841cabdc087dcabe5b1ca43ee6097dc0b7dc8bd461e0f78c8bd16d1379def295b977d20a29719da3a3fb7ecb67f8987aceb98d6d607a8ba832ce79a6dfd069668ebaa4f19dac78df2de2027fe99bc171bcc926d7d08b01355c7b8093c036d55ddbf19c8d5ddbf05e8a0bb7f2b4bb0f501cfcaebb731bdad43fda1addf9e1cd6d860d7b755baf58acb3b5c9c15dfa12cb19d31d48e9f814a3f5537388579978d77daf2e31fcbf3bba4bc6152fec5e09c1f87bbbe3b5c7ef70a5bce209526bbc9ebf7cbebaa4e78b77d3e41f57dde239f7bcdf5dcbdf639eff615e7f7bbf83fe0b2952cc7de9ac3721fb807c3369225d6491e94d74781b81a09aec1b852f5b9545c1f92c7875dfcd478c525e09c3ff7a8a3ff4455ff7c441ef738f77abee48adf6e408fc7f4b62274057116b88ea4c2fc788a3007c99346b3c43c69b46d0783dff390f594fdcc906e1ecf7c531ebf258f4f4bf9635862fb41f5f93f23cfc7baee8f95f70f38ecfbdd0cf450b2f93b97fa08ff77e4f1bbf2f86df99d712cb14f4a8d99e8ca8874ebb1e9de2b933aa97ac3e9e0dc8a87a177b3445bdc9cc23e9e95c7efc9a32c4b441b1732506d5eaffea454dff208576c224b6cc34f94f7bf2fcf55597b993c9fec7a5e8d313d27cf27b99ecf763dafc622649b303625f179f60320879fbfe0842da6c2fb22b8a6c6b65e72f88c903ac57212bfcd7ec812db77aabe952b9fbb1cbc0719a8fb323f8f4d4d941bcb93e75782737ecc77c99dea6295ef925be0d2f747f2f8aa3cbee28471f2fde01dc093bd9c28d3d3a65f9032a6c977ae02e7964d8ff0aaffab770be571ba94713538e7326e9671f2382e2b36c3c5af105ce7c799f2fe01706ec9ceeae4a1df8bf2d959aeb0cd92ef7af56ba877e5384b4cd59fae06e75cc63e3b6c599778c8fab13cfec41587ca66b9bc2334f1aac6765e96e7874b1dae01e7960e2355fef053a6b7ed435def5f9bf8fe28653f3f93c79fbb743b9225f645a9f6ce2f719b64bf72e93edb79a659bf5fb8f49bedd27b8efcee75400f759d1fe7b2c4326aae7cffd7f27c9eebfe3c795f37d6ed95467ac9f717b2c47c5ff5f52e60897db40b245739fe3fea5929e775a6efe3d5bdcf8f60fc2a26c751467d68cb182dc7d0d86fe4fd452cb1ff7c11780fca9672462bd6ba70cbf0b2def29dc552c6f5e09c1f97c8eb3780737e3c4a5ebf119c7379bf95e747cbfb3781734ba731035df297bae4abebcbe4f59ba5dcbee07978ff169bd598ad89e16a967babebba7aef361f723176926b6cb9cb5696cb30ca7afb189586de90c7239977f9fd3b97fc1552feede09cdfd7f52dff5e1edf499491900fa97ee7952c392dcb34ccde76ee4d5169f84df01e3f7f0b8427553fa7579afb03d3b6b7c7a9baaeaa6335a4e0f647a66d5f8d2b0928e75d96d8fefa334b6c7ffd491e553bf82f92cb2a1707599f8f1539df8bad02d7746dab54bae9aed54899c52cd10ee518e0f8026923eb59a21d6e4ff12df95cac043ca7be05c7dbde97d7d68070ae06d7f8f118a9db1de0dcd22dfe944bee5af9dc9de0dbfc78acbc7e1738e7ef8d96e7c7c9fbbb5df2d6039d8e93df54fd381fb8beb18e3965086f4b2b596f80fb9d819eea9a9201fb406ac0915f976dfff17589df4c1907ba6b7f95c7bb82bf1bdbc012ebb272fc2f76bccb768eb7594da8b3f59ea0faef949ddee3fd6d2557f937c636b2c476c24679ff6f401ebf7f4fc0f06c72856753e27785fc54f5e347e5f1ef52c666f9cebde09c1f4b4198ff21af95019b2895c772f9beec8369b6d10af06c0578961f2b59629f40a5cd7f729d4bb67a6f8b7cfe7e70cebf25fd49625be57dd557a4d26815d0612bb8c68f27c8771e04e7960e931a6d1b98bc18f9d636f9de43e01c7eb35ade7f189c73b95f243e1fdb2e9f7b049c2bc650cea38972dc7ac56a4018553a7c2485bd4aaecd7d3415f25b7bedb04f54f9d4fbfee469afbd228fff94dfa8757153e39c2fa721fb6d29a38e25b67fea6c4653d4d8b8cafbdf4af10d298ffd4b1eff2de5ed90f21f03e7fc58cf126c5e9c43db6f6009f9734c8e1967c75d721a5d725419abe2a549de7fdcf55e130817bfff841d6fd9aacc7e1bdcf7cdb67d4cf8972c6615ac94d5b11cee34247a25fcbaeaab37533be90bff24fe8bff8c179f6d647bac572b749ef2ab851f7e23cbb7ea343a4ff941622c5a7d7d9ef85d6a3d5125843e194bfac4d3499fe0ca555bff2a809b7f83757d919825c01dfdabac3bd96ca975e46f6d6253d93aeb5fa29435d667ab5993755662fdae13f236596a273f992a487c4a80fb9d224ba63d6361bb754501adb3ceab8586c5e2f74ea16985d07e8975ad51cc9fa8615bd85cebb85b7c2d39ecf5d6dfba6f9648647a1df51317b0ebf6f408154df3add070ed73842dfe5f8cb4468c70f41d78fae03fed7244abeabca498f83f867626c33b789648195305b258c2b53c96237cfb8a9208060f637208f5f66df32e64059e61d193e1d13d4484c089e13d972cdbf97a9b5917b74f0c5a3ecb11c33a435304cd0b2c9717175e0d4182d0be7dbb5caea81b7f4c875fb823166710bffd5c95782e78047410855f6204886ef3122b575b090acfd542f96aa19a3b302badeba596781e046ed9f5a2e8db26959a6f9d355aff17cadcb496ed124ff2949a14c7b95ca18e229a920be15441c522aa8d2ea2441f4b49aba4136cba9d7754756a0e85135539a26635d0c3a0b16f892a575b59ef52498ecd78ea8ae7fad6e43ff3c48a9a924b3f78b7bd3e7eba88f849e7ab580cb5d5c550974c27a5d4658757fc746d0e97133ffc47cfb01b62e3a974c008b6d311ec9a691be7f76a859452ebd9e00cb993e3247776a40778086284a955c010b6d720cce5087b68b462ed3bbbb4e20a21923be822a75beb14d4e919371f111fe042d01e35ee5e9ee56c50d3eea8a327dc713791d253edc762ab083bdaba576a3d5f212aa3fc3a2cf4e6882f386dcec437bcc9f271a0296eb25aaa7d04d531a0351c56338c78270df15c6eaf7d356620f2387762e8852786ce5832eb17369975c124f70f2bb92b26794058c9dd30c903c34aeeae4b36c2637a7d46928dd3eda2fe9a6bbdbbd50acc4ed1966eb2ded775d378279741be93cb60915cb298aef3289846583239441777fce2109d92eea81b8c475d0f4cf0d090827b62d6362cacb5f5d249e62638dc8fca7d70c1bd75662c00ed302af79f84367c608b3478f9c07d368769b25c91ed6a0d3f4b18feb434ca89f4c38025913e98c18dd4185c2c88c1f5d5d985b0ef2a52bb586d5db37b751788bb55a22b50357b790761a588397ba118ec6915bbcbc40a2d4d420f6f3b18e53be31b2de29ffbedd1e98ac5773f5d7cf3328e575bc2d61cfaeb84f3427f2c4b6e7a7d6dfd2409ef860b1f80693e4ea37959699b409a0fc492c1f8b0f9ee204c723cace4c1ba0426b2f9533392f1a61aea59245663aa602baca6c309cceea357dfad15a6cb35527dfd45d6b15268c1af97256465d8b7bc13e484663ea03f4694560b98aeced15aa1e05e356d44c63049640cd91e19834e9be059833e5b9a2cbe6e161b2c1b1b82e534533439cdebba6ccc23a7198a25d9ecb04976984e324fb2391a5bcde5b6ca3db7ba880a63d27726e3df19aecb1a4451bfb755b306bb7f81cbab14b5185bde72c6d74adb254c759b65c03ba5e19458cfd45bdfa890461e2633e08331ee5a9a1cd4424ae93c911c8ef0911c2843852580113a4be21d317c6c2069c080176f45567d721edb2892e10e719953b263b74a3c5ac5f68adaa43d909a646f1d717bcbd269c31b17dcd12e4ce3622426785a48c1a3b0345e18368d8fd649e6b90d9f1010b6863506537b4658b5c76239ea4c4d8efa452c588e3a0e133e4b23fc9936c1848fc792c2a17e6cc4c3aae398e0c374698c039c276aed59d6ff5aeb0dde835a2a527f96280c9ddc20cb4aeb55d65fbcc09e0c9ee7436fb6e342103d27e8f4e446717858a39888c5db119a78fb3860bc4dc2841fa911beb86d30e193b1b89bad8b3b5e3af07283574bb6cab22d3137cc122e2459c26ba849b4a8cb45cc358878cd62275a25f549d6b1d17a3a4b9403d5e25e96583ab45ee4b541e2740aa6ff1c9dfe5d80fe2b818641be988de55b7335f9562c60be95a313de8bc9d5cd74151f3e552378c52717c3b640876d98b8b15bd45c9bc4f3c5c2002a9aebcae52d54404ed5e895237a486a586b56c8786b81fb583588bf9d2a0affb6338e1fa6e2c5a70905eb1ee39377e2620a6126b4c72a587958a6ba5893a906ea18cbc7d2c2122c2d1c95565a28d0d99ce8ffa96b559bc353549190cd535ef80a3f9f56d5d6ddfa171d54053e2caba5749c24963f6b104b43dbe41a7866ca87d8368335a06df82249e8d3c452912632a939962ea661a5f6324da9fd78fb60a576a1ce6445c75f7dab9aec7c21211366bb5c67b6a277b2d047e4b7a49e23842b6e83c854cb65a66a67dd23c47a6bf5a2d8acb0aef38c17de9f24d6c2e2f5a58582f77641be56f4696f115550bd91af10469ee97062863e1d2b00566a0a8040b5ea1958125aa549425f044c423331b58bc2aa3d0b53bb58a3f6be0ec1d43e14135ea211beb46330e187e984f38c99cfc90bd3423c1c13cc27f925553779e35db513ca5c2dc5cda2ada0da7fe5e2ca1eeb3777c72c1322b2845bb51a0f0ca2e51118db63346c7b06647b2486606d48b6b37582b9791eeb47b0c718fb1c9d605eff3a8e21f52f3ea53178fd6b2e867dbd06fbcd01b1cfd309e7c97c43d8643e1f937c7c58c90b30c91bc34a5e8849de1456f2222c124b3591c85da78244e2624cf8668df09280c297e884f3f456a6cb9bc632deb5e05452ede693d3af51ca2a85947aebef9db2cc2d4fe81fe17d1e55b2d11c249d1f85e959aed3d39ec5c57d1a789da254f4a1f12fae60db027df5680c7d8506fd0501d12fc584576a84bf1750f8328cd7161daf8129e2b55c38553957a75a5783705c8e69b355a70d3f75e22dc877566048ab3448afef120ce94a2c1027e802c14b041bdf2c0bd972d1e1572a67a0ed14c578708cab300db6e934e039dbd2e68ac1ca34ab054518d26a0dd2d702222dc672e4ed6173e4124ced1a5da6d93598daab31b56bc3aabd462799d73aea1852ebe0ee73c16b1dc760dfa9c7bed390d677d662a41ac3923a168be0264d04cfee162c828fc384efd408df1750f83a4cf82e8df0e7030a5f8f09dfad113eb47b30e11b30e17b34c2cb030a3f1e13be5723fc4040e11b31e1276a84df1d50f826ccc8f78535f2524ced93346af73d2498da9b31b54f0eab769946728e7071cbe43c30b7f753b0a9327c31257f8e9afb997e0e58aaef635d4ae5ba78e125f4a93a950214e51598359da6b1a6770326824a4cf8e91ae1eb039aea164cf8191ae1e70414be15137ea64678cf1ec1845761917956c8c83c0113cc57524aaa0b4e16d6592bd25896d84c92bb81d7c8bd2bf902171562e0ba54d8bed3e1a406aef96cfd2c69bdf5d2a6ab2d6bcfb6ae06d17a1ba6f5393aadf9c82befc475eacd7653d26e86e8fc0ab3d87859eb1e1f48af6acc06ced5d8c0e3010d6c3b16e8f342da408d4e30779e3fdf8fe0d1b8e05a9d605e3dbc8021d543bec67c17213148f5b04ef71d8efd220df68280496f0726fc628df0b50185d763c22fd1083f23a0f0069d705e32f355a34395cc8d98295e16d2149b30c197eb123607b5aeb977c16e086f089895ecc462e00a4d0c2ced192c067661c2afd4456f40e1bbb1d4751596baf88abac11b5f7b74dfe1c671c04f647bf48defc5045f1352f08998155d1bd23cf76182af0b29f8249d601ef77c2158b73f141710c41fea64cc0a6fd058e1fdbd8259e12958267363d84c663fa6f64d1ab55f09a8f6a998f09b35c23f0a28fc342c65de82a5cc5bd34a99a763e6c897d54dca2db907d846eb1f6fc6f291be2d622bf30ae133b85bdca91315375e1d0a62bb67605adcaed3a24fb316b9d6efedccee29b6c7ead3d7e14c4c873b743af4963ae45bffcb441390bfb3dbfa9dbe0667611adca9d3a013880beed1cf67de05f9dad998f9dea531df677a0733df7330f3bd1b33df7bd232df73b14cef5e4da6d73660a6771e46e83e0da1dd7d82113a1f137ebf46f88180c22fc0843fa08bdb80c22fc4e2f6412c6e1f4a2b6e2fc292c3c35e59535e0b674d17635a3ce29d354d6dc1ace9124c8747bdb2a68216cc9a2ec534782c55d6748cf85e30efe3cb30f37d5c63bee7f40d66be9763e6fb0466be4fa665be5760c8bec1c255f4aec4e83ca5a1d3b75f303a5761749ec6e87c332d3a576381f8962610d50103710043ff4c48f4d7605a7f5ba3f5f301b5be1643ff1d0cfd77d3427f1d168867358128ef1f2c10d763c2bfa7117e4640e13760c2bfaf117e7740e13762f89fc3f03f9f16fe9b30e3fc01f328d6f25bb858bb19d3e2059d164eb196d782c5da2d980e2fea7450c5dab4162cd66ec5347849a74167e6146b0b44f7736d401786db3003fea1c6801b070433e0db3103fe1166c02fa765c0776081784513880f0306e24e4cf8ab1ae14b0706137e1716dd7ccfa730e5c2dd98d63fd168fd4c40adefd109e7dd237c07a950dd23f7626aff4ca3f6bb01d5be0f83fd735ddae21dcdde4e4a25d6a375c28d688bc877ea850f9f3d17a55c0cffac64f62a8df63cc652eb6ab998e1b8559cab7cb3946d96833353c5e08c9a03b987d90b766589c1517b416e2ea54648e13363b7892b0de2a90a20593ffc532587b1e08051505fc3fbb108fa8526823e0e18410f60c25fd3081f382898f00775c27966f44b2c33fa555a99d14358207ead231430100f63c25fd7087f3da0f04774c27962fd8d9fccc8a3ebfa518de01cb1f84eeb2c6495bcc24acb2e64f55b1d2fad7f04df3ac37b21abf0ba62be148f61b6f4a62eb50d0e664b8f6345c4efc216114f60927f1f56f29358f9f0961ffbf7c834bfa1b37fb1004f65abd87f98b58fbc2dff6ddf96ff8eb0fc891e961f6e85267d4c3c8519cf1fc21acfd398f1fc31a4f17c134ba6ef6a9269dd9060c9f45b98d67f629a2a119ffa3c4734b42a84fbb96ee24296a82e6505f4317906d3e3cf3a3df8da09c1e47f1b93ff9790b1f31d9d601e3bef6962e7bd80b1f35d4cebf7b1d8e16964abac22aaf8a8689ed79fae07d0b358203fd004f2c3a1c102f93d2c907fd50592a740e51b61d76713ddb18204ebfbd8973fd47d99d708ed2d23729ad704cd695efc62859520ca59d00904cf611afc4da7c100ad064bc55f8d62a6b05deb4f6f7ec8f3982e7fd7e932c4a72ec9cb0f07d1e90798e1fd436378dd860733bc17b0007f14324f781113fccf90825fc204ff2ba4e01f629cffade13c3920e71f61c23fd608ff28a0f0973124ff0989e4159d609efb7ce247b04763e8559d60de0efd6ff30d573bf453964e3bf4c718f6ff69b0bf94150cfb4fb0407c8605e2f3b402f1532c105f6802d16964b040fc0c13fea54678c1a860c27f8e19e6574c939df23947450c2e07512eead82a238fb309a2c0ab91bf13bd8db3c4995dfc4c16d3dceb45a96f67b90dc21b394b64ccce744fbb53894f5cac73d50cd4777867925dc4563667e75922332f0fe88ef80b8cc5d73a167c7d14b8a6945dcb740a5867eae52ea1613573660cdafa719d5349c8b39e0eeaa1fd1a66307c35afa4a1a480d6f84b9d707bcd792449b589a593a47e8505a2ad261077070cc4afb1986e17d3c4347771d67791ae939dabdcc39db72eeca548bce234ee79778270a1b5bb551dbb4e4c01b5c23254176ae2bd4661578d9a54b45968580b3a606dd9b5b2751ac4be5ec7a2a6bd2e6a026648bfc1ecab03665f1dd3b2afdf6abe93231604ceec9e71f654082e278d8dc8627c8d9e4424b5bd4f9fa5efcae81cc33673f3d601eba478034b445d748988673f418cec4d4c7a579d747ec3ce6e73d29894fd3bcca0bb690cbae7d86006fd7b4c78778df0ea80c2dfc2281d120b57af7c1b13dc23a4e077301c3d35385606c4f1074c782f8df0d7020aff2326bcb746f8d071c184bf8b09efa3115e1e50f89fb0c8ecab4b4b8dccdfb207e14611ed56f9c6847149b3c714ff8c45513f4d1435068ca2bf6051d45f1745dca1227958374860ded37d8f17b303b06276605ac5ecfbbaef0c120ffac847f6e3823fc0800dd601e3c54f4e20407fc5e40fd1c9b717304bb6e8205ffc10fbe250dd17fb6b4d6099b074b5fa8b732798a5ff0dd364984e132e81d7768296047fd77c25476c9cc01749c9540dcccff6cffadad7f018af5325c210e9435bfb1a216a5ffd9242e6b94b3242ee1fbaf8e1a759b1e45d9c8f5a766ac7eb87beda26296adae351f3116600237506c01781e4ee5d76065f6dfdd528035515d0f0fe897d7794eebb3dd0efd6c84220c8b7ffa533c7e19936c779a205579f86398eb6108d7521ca468c710c628c5e5fc78cf1df3a6e62d78a8d19e40677a42e160b28565957568876b1ddca6e4883e9d858d035adc709b2a393429eae7e18f58f752945ec63150b3942fc1f4c723cace44f30c913c24afeaf4e32af6d4d8c85df8ae3532c539a14b229f43f8cc7e4b03c3ec3244f092bf9734c727658c95f609273c24afe12939c1b56f25798e4a961257f8d195d5e48a3633144e5fcb02ac77492c5de407e54f6d8c2a70da6f2b4b02ab7d549e6f00a43526e87a93c3daccaed31c933c24aee80499e195672474cf2acb0923b61367768489beb8ca97c585895bb60367778489beb8a093e22a4e06e3ac1bc743db2054ad7ee18e8d961411fa293cc9f9fe38787d7a6d03ac1dcd364ae1fc1efe0827b6231382f640cf6c204cf0f29b837167b0bc2c65e1f2cf616868cbdbe58ec2d0a197bfd30c88b4342ee8f095e1252f0002cf68e0a1b7b03b1d83b3a64ec0dc2626f69c8d81b8c415e1612f2104cf0f290828762b1b7226cec0dd348cec9b24e637cc9bacc3b82b7c466b8de0dfd957ee262124e6c381617abc2c6c5089d64be405c911f953d1688cbc2ecb238a45d8ec4049784143c0a4bfbab43a6fdd158ecad091b7b633016c78464311613bc36a4e07198e063430a1e8f413e2e2ce438a6f2ba902a4fc004af0f297822d66cd910b2d93209d3f8f8901a4fc634de1852e32998c69b426a9c8d695c1a52e31c4cf0e690827331146521514cc5342e0fa9711ed632ac688196613e86a332248e020cc7969038a66159dcd6b0595c2106baaa05404fc7d43e21acda3330b5b7b580da3331b5abc3aa3d0b93bc3dace4433120352d00e4304ceddab06a1f8e49ae0b2bf9082c91ef0899c88fc404d787143c1b13dc1052f01c4c706348c17331c14d2105cfc304ef0c29783e666fbbc2dadb024cf2eeb092176292f78495bc0893bc37ace4c5ba86fe48eb34c6173ca7df86b598cd6747374fcccb96d7e13e4773c41726b11231b7a38c6d9363e8f3850b5f29d8f63351967773ffc49866f3d5513cdc53c5356aedda8a95fef86a090da203c3f600c8e1adf518ef65c03a36d630bbf38387223f701748162f509c5fed6d2deac5c4546783b79c315c8b6c0f2d5659f26c07ca7af1047f2ba42eb642c876b1fb62dcf920333183f95b2cd1a594b19cd416d294426309dea9e3244deac81dad8b2f6d749d2ca28bce8cb1283a4a974df2191da7c492a74908fddd39251ff443841f8de5c1fbc3e6c14b7592b9659dea3b1adc5f3b190fc7329d1d8f63add6b5db127989b7359fa6c3382619a397499f2e4c9a3a4fc40c7b39667b6784b5bd153ac9bc73f94c3f15388fcee59558cdf0ac9035c35598e0b3430a2ed209e69dcbe7f811fc0e2eb8188bbd73c3c65e09c6e2bc902c56632cce0fc9620d26f88290828fc1205f1816f25a0cf24521211f8b75055cdc025d01c7613c2e09cb631dc6e3d2903cd66379d16521f3a20d5877dfe521bbfb8ec7205f1116f2460cf29521216fc2585c159245a9ae5e31de3a8df1fdc24c583b6f9dac25b45ccde26a1d336dfde180a83fe4b020ebe7a5a32f5683d8ac8b761e3bd7f889f6037875b24c27989f5e1b4b9e89a27e82cc4429c772c9eb5a2097acc0845fdf02c22bb1dce186b0b9c3169d64fefc8d7e62d3c3b966ab4e309f9175931fc1237033a9c204df1c52f00918e45bc242dea693cc272edeea47e5fdb8e06a4ce5dbc2aabc1d4b8cb7b75062acd17d80dbd31d7e98bc810baec560df1912761d06fbaeb0b077e80abcb8751ae35b8bb7c6b4275560049be274b7ef42ec1e51880d4a0a9d1f1db082a91ecb81ef6d811cb8018bfcfbc2467e23a6f6fd2da0761326fc811610be13ab593e18d3ccb09ccf549f6b622fe972c61731dc252258f5ac668bb9984bacfb2bac3b35c2a4f9157dfd45e7d2c79f86a6c50dbf96d98b0a04db07671716ca8774a13cab3994abad9a144f747602dd2efe5ec2ec0d13eac5e20576025dd2fce482e6552b13d7c5aa973c8a99bd47ef3cd624c2c5e526d27324f0e783e981492a617c16e716713791294cac6ede6b2c394167eceec6483f8cd913fca21da67ceb1d9b56ad95296eb46ca35ec4b91dda12b952a85b5be75dfc7a4bd9d31e2c948fe84279842b9490b91dce8522c6b68b30bab54c8c2178c72badc0b782846c2f16b24775213bd257fccd114b7f543135a2143ee69c3b41c2762216b6c774612b74856d99889dad3264fc6c77ab85641f1692c77521b920c3f999f30e5f074d8dc19583e5551b0258396487878297254da29a01733d5ec16ab9bced248cfa133aea737ca58da5ccde02c8845ced642c7c4feac2b794d0aaf8d51de2333c547675b84a7cba8aed0563d32d11aba760a1fe862ed4877b861ad7b44884c55e0fd00ea32a8df9d5324928395da41f9bfbb1703da50bd7b1816b76c5e24e62dd4e27011b8b0f53134c279e4fc5783cade3717446ca6cead2fc342cccdfc4ea29c16c40d9305f58a84c0882f11cd4228284ec742c64dfd2856c1612b2d5227d56cbba89ddd456ad963532159727c5064d1be50c2c44cfe842b49030f755b16aaf9bb399d92bf2b75c48cfc442fa6d5d480f63582fb92ea7480c015ca68e33592c62b95eb486caac12774f0b86ea2c2c54dff1d32648fc2eac21ac16b1506f3dcbd3e1168fd22f5146cb85ec6c2c64dfd5856c5eca9cd35fab00cf43bddaace9e694e760617c5617c60ae21a75a3581e912fd666d798d7080ba86a4e8d2dd3464ca7143d17e3f43d1da7d5add6f2f026149ec3791887efeb38cc45f330de42da6c3da4d286bd449f7789a397d4d2317d3e16c2e774215c1230846a376b7d8cb446782fc0c2fbbc2ebc458496dd9046f9db12042ec408fca0a5ca653b6f9b034a65fa505d8485ea055da81605b46367fb5a136cf8622cac2f623d14416370a17822d91addf9ab7fb941c2770916be9774e13b3444cdb15194bc7c15be4ad9cec3435592f46c90305d8a85e987c1e2cc6d9f70c7b354a98cb2a4bc0c0bdf8fb0f0056933da615d24eb4cce5d3ee2e15d3b6ca99ae3e558f85ed6856f0cf3ee152cb10853687905a6e52bde7d7b4162a138ad58a0b4bd2bb150bfaa0b35be9f6949f3503dcc239cfd6578d9dfa4ad77a6d7bf7f15a6f78f757acf4cd9e25a22c60679ef63b5d85d6401db2e561a4d6eff7ac540fa2dc8abb1f0fc04ab2d7ba711de1a5e296a900d9a3a849fb1045ef3aa6cc1101ec042f8533f6d64fdd8c012617b3bc44c826a6995ad393e700d16c69f613d547efa01fc8432bd1c23fd905e8b85f4e7ba902ef6159bee911e3b1daa70b766bc5e8785f617bad0ae4d19afb43de3d47de6d763345ed3d1680c515fc1e62206ed37c7e4a8a5e45b4a5e108a3760147fa9a3b82020454cc3c4f2d93d9f16afc1274e400c12ce1bb170fe4a17ce7cb48691a8817b847007ab171e075be4bb4d627fb0648b77366e0a12869bb030fc1a6b21635f0deeb503dff6bad35279ddcd58585fc772f696b74bf70c6bdc2e75b3088384f6162cb4bfd185b6cca3feeb6ee126d6f813d3d91cd14350e43b9489b61f84454bb4116ec518fd56c76846a8f6297d7e741b169a37b01e927443e33f7ec35af1ed5898dec4c67af57a24cfa969ad3e9f3bb010fd0e1b4549dd7fe8a74eeda71732784f65fab9f19d1887dfeb384c0cc041c5a9daf9a5a56a8777611abfa5d3785ccabab2e3415121ae720fc396e943b81bd3f46d9da6d303e7fd4e2dab5494f4aaf78322bddc8385e51d3f5ec558cb738161adce7bb150fe01f3500a96cfd9f976f2dd64af33d872f0fb8d39622484971741c27c1f16e63feac23cd615b3ce37a953d3fd989eefeaf4cc73e909f327b7ce8ba4ce7edbf9e98e9d3c8085e04fba10ac6fae19b4fcf8a6aa0d797938400bf49bf2d43b41a83c8851f9b31faf1df5c520b98a13322cc5b54c6ef21016b2bfe842765c2bc77790784e37053c8c1179cf4fff65d0ba56f81eacf4e3fe112ca4effbc9ade68958b563b0118c4bd95650c80a52844f9793f1b78284e0512c041ff8f7b5e7df0c923261f8b0eb2d15438f61e1fb2b361ee75da371f69073eba8f6f0c3d317b6ff9c579a4cafb47f1c0bf587e98c03d9b15a6c3dbc9935ca9e97d69e63f40416c2bff949797ac2e9d51352b7703a5aff6231b13b8b90628faad58a7778ad306782752b96db5c326437e7f8d909a583739d7f7fbb151b3c4d9434e7edceda7a9884bf5b703ab461f6cf78b983ac5d20c62a997b82f13c21bf5ae637ca5ab305217b2e029f389d6dd502abc45bee5526b150e84ab96c50cec1d0a50ed30664ea734c6c4e0f6559a479d3f6a00be93f78ac0e95b1da2687af002896014cc79a526bf111ff5a5bbd0d0d48220b53874e775bc072d97b10e32bdd6c149fb1f72dc727faa4fcb27bd312f797a70801aa3e9852dc6a9005e8c40d12e6663b5bd7337b08f24d4b66c7f66d727964fc93121b5f1c60bea8f7d559e06c7f5d55e660001b22819037fb14c27f5122e42b5ea966ed62d13dcb05948aaa19770b5dc1b64502d8c39d1c60ffa604d697d9bb40e732c79336cae07a7675c07d4c09aeb7061c175863bdc49d6d9ac4d5f24840dbc41c68ffa1b6b6c4e4b9d0fa5d257db695379f6d75510017efe680fb84125c7f511f6df05d2c4401de15a050f82f25bcae20a9ae48e8818902a6eb8738983ea5c4d41960721cf5a380a8537f07d1ff2811f510886c4f9946ab1d618fd3aeb6ae94cbbfa3806bf12807d76794b83a085c0d91cad2db7577e07c4e0967a075b2a2b989a4c6056d6fc022514636090f005e2aae943d6751005830d401f80525c04e20bfe26af2a1d228005ad9cb01f4257586be428c4d38be65d1a8907e01cabcaf3265436a926514000dede300fa9a12105f9f52d5d817b0dd22d44dcdd54cee955d2e2aa145c2c2ca85bd555b1f8c0244fea320b2368410f95aad101eef11e30b2a54342f3d5c1ef1ba7c5fd04716a344d95de669cadef6c81273b5686e4701d540503eb6a144051bdbbced08879b55fb314a35b34f3b3ae0da5282ebef02076760dbdeba7c04c8996b1e0578fb40bf583b4a78dd4089ea4cb2b5a77f47015401a89db5a704c5bbaa9789e4b7cdb566d47cebf17af1a52800dbd4c601d62153f999dd7998e840531eb1fcac1af4f177a404677755f3aac47cf1e92857345e6aef40eb446d6d0bc4005b93f8b8b3689bb3885f835587abb2be170570ef02709d29c11d029269540744b8178782d585dacad448b9dda918ed76c061c0caba5282e3bd674516b479ccfffaa75100788ea8e4766cef12ee76af4cdfd9251875dc2da707b3dbb475e26aa32c7f13dc74265b8f18a779b736c0cd269e76ff463c653e17f73d441c0f3cbc174fd35724eeabd6190fd961110fe000140f9405c67dd765e2810af0785af9493c50133b1ea8021bf7e5ca120fe4bf110fdcb2d5e98c8fd8c793067ce29ecdc1b8b60b3faeed948d23c393718fd1dd38d2031e4fd18b144f6b6c26ee6374d0f121d5fb7ee6721fd2ee6dfeff76efcce5ee9d8770087cbb15fe63d7277a50d727b815d9debc3c8ff75e036caa55aabb74189aa443e2ce45aadea0d3a67342cde2103f014ca776d119b85cf43409675e2471ce04387b9984333f92388b01cede99c0b905050ad5dfc8a6b1423a9cdda8703ec01c9c7d4cc25910499cd7009c7d4dc2393d9238ff0870f6330967612471fe18e0ec6f12cea991c45904700e3009677e24719e0c700e3409675e247156009c832871f69338cb64b3d23d1f1bcef5cda503d99e0ae43f00c8c1d41e40aa93c26f87117fbe5e3c1bbdaafc7c00760825d8110cf620f9ef418d32dc5100ee506a4718af662714c74b7a32941da9507e0d500ea344d943a22c7401b5fb16f943d1b3c37b00bce199803723f3f0dea082f72880378212de801465786222266d9b9325e38f00cc2c93604e8f20cc7f0298234d82591041981f0298a34c82392d8230ff06608e3609665e04617e00608e310926e1d00519ccbf0298634d8249d82a2783f92700739c4930a3d8c2f90b8039be751b8bb6287bfd4242bbe483dc24288f02e393714a941325ca6aeba16a71d46f181d6c037142e47da8ac7703403e81127917817cabf006b2bd93b60878d16b957703097e626b26f8c4652e09ad6f3f15ca5a607d9328518e4f4af0a542d842a6f64c9b6bfde7d6b953f45f3631af152a49619315545300ecc999b05b7fa57e14518e0059c0144a94c3355980df15ed49d18e26430bac34bb75ad34ead5a9df022bcda1463947f8b1d74aef5dbe76abda119dfbf92a9f66db533c7a657e3b8032977e2a211febd9282ef08f978aaa12bf9a81fe78b23c731f4038351308a71f74089f0408f32811f661cea0af3aba37708eeae0eee30062be493ec5a48e5c64380780f2bac0249ca49e4764380f0738a7998493d42f8e0ce7f1006721f5621376b99d9bf931f4c154f85e0179e574731c616646b0ec1e0c2c71462650424fb8a556257c919c6c5769bdb43b13253819ca46609533e9872f606fe546b64da09bcbe0beaa0bad6385252269ed850824f1ee00e6ac4c7465348a29c10dcdbdeb6a3ea33aea3ae2a6520e0093a1bd16a03d3413c36c7e9db209f34f3297ec2300ccc34c82392382300f05300f370926a1d30c19cc6900e61126c12474e722833909c03cd22498848e866430670198b34d8219c539413300cc3926c124749a21833916c09c6b124cc2711e32984300cc7926c124743424833911c09c6f124cc2161019cc7100e6024a98592cb9ff2898f31661f94ee6bc5500fa9416b6a61fa7bbb398301725eb2a9e006c7591493009cb7732987900e6e24cf4bbf3dece9d4ced649ba1815e327c8300be2594f806017cc93e715c9833553aca23e72f00a04765c2f920f7a0733e3811203c3a13080b0f3a848701844bcdae0e11f66a9255873681ead0b24cb9c738436c7094887c708d6cd0622fb0d1e5e67809477136e5e100e58a4c95e2a956b48db2ebd64c0074a549ab1c4d8b6457c7dd00e72a9370924e5125c37919c0596412cee991c4f97b80b3d8249c8591c4f90380b3c4249ca40b3d93e13c1ae05c6d124ed29589c970d6039c6b4cc249ba6e3619cee301ce63a86b9efe76962812aaf1bd2d086b9e4ba9801600a06b33b11257beabfd9e816e0fb2297d3500deb194f08630bfb32513a74e13ba23bc4305750de8ec38ce44a8842d7632a8ab01d47526422574e922835a04a0ae37112a61094f06751480bac144a884ee0a64500701a8c79b08957028980c6a5f0075a38950099d15c8a0f60050375142cd67c9bdf489f336e63167172a3b20897b5a256e82e76c1e56226ab4aabb9a3012f2a82281cf685191506aceecb828ae2fdb0bd8f366736721113a89910de8fd04586999398bfd91ce7627b3d33300cc72936046711de43301cc0a936046711de42600b3d22498511cb93f1dc0dc6212cc28ae837c0280b9d52498515c07791b80596512cc282ee3b712c03cc12498515c07791580b9cd249884ae8c6430cf0230ab4d8219c5a5572e0230b79bed761bc525a463a0ed5e4389b7bbc46baf62532d5af1b6ec2acaa557c836c763c02e6b33bd8aacff6e8f282ebd3210d8645da65c6f97891ecd6dae1ecff9d66bf5e28b5176bd1d0a6c750725d0433c1379031dba2e54e8da0074f5ade9511ffd99eefd01ca864c4c2be4fbae1e3cd30a8b01be4633962db7478fea84c5dae342a49649b6db600d28709a4c5ab793b4314966a91d00ce9d26e1cc8b24ce6900e72e9370e64712e7d100e76e937092eea04586b301e0dc438973344b9e27b780ed66dc13a489294fe515d6ebe58cb7ca8b04587b0783eacc54e07b5141ee07cafebd2679d84f8be43a75f7029c279a8493741757329c57029cfb4cc2393d9238df01384f320967612471fe10e03cd9249ca4ae0a643897029ca79884333f923877029cfb4dc29917499c1b01ce5333d5755c2c6a954d96e4398cef99b546cea02b1733e82a22dd75bc09003dcd1c37d9287a7f74012da5d333312cac9655b3e7746e164d4df550d457632a0776794626e674b6c2ce3064f08e04f0ce34d7619bb000221bbbbc1da03d2b1376393df3764906ef1100efec4cc09b791025ea9701bc73e88b97ad9a25aa8a2d2665ac4c2a5429160ce05d6fd1abf6740530cf35d7bb83b0c3982c91f701d5a0f3cc59a32e8aced99381959e6fc690b06e276b42b464cb5eac07567a8149a344a45e9c64f9e96880f3429370e64512e74280f3229370e647126735c0793125cea1bef3d135cc9ee1ce45e5d3bad59c1c23c2ba0460bd24131d1efefa8ef22239a9601d8079a94930a338a960238079994930a338ad7a158079b94930a338ad7a2d8079854930a338ad7a1e8079a54930a338ad7a258079954930a3d8729f03605e6d12cc280eaccd05300f9804338ad3aa8f0430af31096614a755cf0630af35a99d4e3ab846d64eef0e705e67124ed2ea1119ce5900e7f526e12475e522c3790cc0794326f6d89ac60eb63db60e3007e18d99984c90ba232e798edb1c4b68bd98fc4fda2d7780aa5b6e33b0d39b28210f9390abad8738e00a395bc399a391980d40f74342b064b3340e05606fcec452150aacdafc317134deab3a15c59ae90480f796d61c38ced80ab4fba950be0ff2d95b29518e142897580f1509607c21809df275c75a37caadcde68a7567b7c9fb0bad63852596707510b2ba406700f83673dc66a398ec3f05286fa744d937054a155252b79b1154a57e15c83def307b1d25c2de51b275947200de3bcd75a9251cac237318fb0dc800eeca44068095fb4e0640988f9265007f0718efa65ee96ba56cd1ab69074b8465f2641fbdb2bc2700774f26ec2fb7d906cb4583d49ed91ef5f56b9e0018efa5ee58e6c0e68b0fb7ea96662ba860160298f765a27e99ebd1cc8c769fd38b00e5fd99e8b62b38e8baedaa00c20732d1a3c4ad718128a39b84127cfff63291c857b05da2a3aedebac72b48752ccab32fa703b00f9ae32b1f45c79aa300ca873231b7a8c0d50a8a72d9dd00e03d6cd22cf569946d71b259ea77009c8f98849374092a329ce7039c8f9a84737a2471be0e703e6612cec248e2fc0ec0f9b8493849179724c3b908e07cc2249ca4ab2192e1ac03389f340927a9c31719cef500e73732b1c6319f1b74f0ac71bc00e07bca248f24d23ddae8d67d0783124f9b8493746e0619cef900e7374dc2991f499c9500e7b728717612022ac4e6b5f5cc76f18a9e77510790373e43896b3c0bb26b30ef866b1222e1eec09c5a069c0e1651c19e0a607f3b13e5f85451e93958d6a2791be0fb4e26fad47987f022c63b797957f016d1ab5e1fe9aedf5300c2ef9ae34114c5a9d3fd4141f32c254abe4cf74a91079633e5e3868d3f126e86435604750236f93d739d5ca2b82ad25500edf7cdd933303f9233d27f01603e6712cc280e9cfd1ac07cde2498519c91fe3c80f9039360467146facf01cc174c8219c519e9df07305f3409661467a43f0760be6412cc284e00f82e80f9439360467146faf700cc1f9904338a0dcb3700cc974d8219c535b9de04305f317b820a619b886c82ca54d009f22a752788577f92ad7aa1f08f232c8ec836fede0e40fe987eee642248bb37937774d4b0a344bf7b9de7287a14f7096e0b32829f98e3f41ac5e6662e40f95393bc3ba65116516496f918c0f9339370164412e70d00e7cf4dc25918499caf019cbf300927e9b453329cc7019caf998493b47a4f86f36c80f39726e1245dc1980ce75680f3579438f9899acd1bbd61b51e00d3afa95be8f60467672e1a6c3aceb58e7c426aa5758578d229994b421f00f3759392f034ca1e77b2247c27c0f91b9370164412e70500e76f4dc2393d92387f0770be6112cec248e27c16e07cd3249c5323897331c0f93b9370920efe92e1dc0170fede249ca4abbb93e1dc0070be9589fd84d442909c4393a885ba977f744f1920ec1826ab7f32d0f3fe3625d6712eac9b59b29ba17f874442d464eda62d00f53b9970e09ec10eb645519e0699c01f32e12cabacb541d81fcf02164a7815da21b8e82eb45b08acf38fe6f8c647d187ae2740f9aeb92edd8423ee6479e8ab2003f813f51c227bdf5567f1dcf962aa41697328c9f06551e1eb0df0fd39130bf64c7525f528efa43e1bc0fb8bd9ce3484fe9d64ce349341aef95e26da4b70f93d5d0e19edaad24bc05adfa7c439c65555aa6670b2a07e038845f2e58cadfa3e890af33060b51f98e358134567c5e5c062ff9ac9ad1e78c22f774d323cf85afaff01783f3469a505d2de52329c1d41c2ff9b493849bbf7e856e50438ff6e124ed2ce67329ccb01ce7f98d4f93c8d72be2659e7f34320effcc8249c0591c4791dc0f94f93704e8f24ce7701ce7f9984b33092387f0a70fedb249ca40ba691e12c01383f360927e9d2016438f7039cff310927e9fa7364382b01ce4f32b328552bf48992b5d9df02f8fe9b890e65fee14a61894a768d7c247af06200dea7ad3f7d501532d11bbbec065a3bff330564140781ff0b2cf2335340120e6690819c012cf27353401276649081cc0320bf300524a1530219c87200f24b534012ceff2503792c00f995292009abde6420eb01c8af4d0149e8144306b20280e433fd8d004938024906b209808c99029270111f32908d00641b4a90c19c09a3b8865c5b80b22d254adec276961be78a36080e5b84d71b7f2d7a2e5b7c7c4dc16b47094f6da2e87862ea1d5f6c97c21ad1f1c4856da76d288ea6025b0bc0b6a7043b9ab9bd8b6c872dc70d9b0bb4774ef54afa515ca46f1248fa1d2821bba7bcd840b90b17cf08e66b0ba7e82e365506b076cc44e1e4cf652b8a2b1fc64136d08912a5f27487e5bcff1c96102d590ebb025869e74c26fe2a4b8935ccd9fd0a0acf98bfe67e2aacdb00d62ed4d5a98da2afe8e019edb90b24f7ae99b0c9d4c97d8db4462e2a9f36a99f1c23c2ba14d864374aac033458bd0aa428ae1f9b0f6076370966145db28f00300f3109661477d08803983d4c8219c51d347201cc9e26c18ce292a66301cc5e26c18ce2ecdf7100666f936046b1f7732480d9c7249851dc41630c80d9d7249851ec9c1b0260f633096614fb91b200ccfe943083cf4d232c82c866fff40638079884332f92380f0338079a8493748b31329cc7019c8328712a976b3e8abe13f4686664623f19be79ccc13798125f5fc657292e958b9f715135d6e35badc76b45571cdc79357a18db038c4328318e60ce7213f690da464bdd064b9d32c1838fb8cf617ce639efd72cb504f0045ecea2bcd1f26a00776826c685d25b0189b0124fe6d27023403b8c3af97b15462aa4a4e34023a8fadcb78242683825c62c0dc6608bf910f628912de6930df08e303703201ce020cb007e0932802c4ab42305dac5c23e8b181f66ab90c555b910a59c6eb68908989bb054da42eb5861892d8f60e1d505001e99891c16f30f99272c9678b9d3315439ecbf00c6519418f9dcd0156c97f578b2ef47f4fc3efa026ca333d1af04eba5aa92ef54fba35d0f1d08608ec984ff2784993ae78c2ed88500ec584ab06a2d63eedbb19d1d4c6b195f01108e33c70d318a23eb4b00caf19428470540596c7d930b69b40aa73aa63a4a1a684bf37154a5f9bf01e23825e2412cd11db14ef4326df5b4d9288e1f958016d2844c742afb5fa12b8a1bdcde06ec73a249380b2289f33c8073924938a74712e7af00cec926e12c8c24ce6f029c534cc249eaca4086732ec0996d12cefc48e2ac0638734cc29917499ceb00cedc4c343573c56ffbc807ea8a99dd9e8f6e6b7d334038d59ce9d851f43bee07aaed7999b246bbb9c905ed969698818e8f77a8107e0358637e26fad739c28ae699edea76d4fb8fbe0d3016647688ed60dfd46130403bcdd4d14bd2d29c6cf4f23d80b6d054b4a4d57832b49703b4d3335134e51d747df2e301c21999704de46bc166dc3591cceb6324c0379312df74e65eb042bf535b30571b6cbf37d2426c1f558ffd6250539d958981647fe34b79911c61ba1558f6a126c18c621bea3e00f33093604671eee6cd00e6e126c18ce2dccd5b00cc234c8219c5b99b970298479a04338a73376f0230679b04338a63ef170398734c8219c5b99b970098734d8219c5d56bbe0560ce3309661457af7906c09c6ff61c0fc2844fd6daef041a980b32d18f3fb5d95ecb45f7b3ed5117f5f99c4f012b5d68d270f134ca1c946cb8f86180739149380b2289f37a8073b14938a74712e79f01ce2526e12c8c24ce9f019c47998493746a2119ce6301cea34dc2991f499ca7029c4b4dc249da3622c3b905e05c4689532ddd9be7aad4477964733b80b73c135364b8d3cd7cc6d70aa9b35a3c15b2d26e4f8ca910024b8500b88a4843a4bdecc600c42b4c5a2688d49d816e8116d0bc5c69124ed23e4f329ce301ce5526e12475f226c3b908e02c320927e97c23329c750067712656638238f5ee8cab2c46a5e233f5e2beddd74408f7742a4f9065006e8949f5d0699483c464f5d0fb4139bfda249c0591c47935c0b9c6249cd32389f30f00e73126e12c8c24ce1f019c6b4dc249ba322d19ce1500e7b126e1245d4a950ce72e80f338937092ba7f91e12c0538d751e29cc0dc8b5cf08e92728b079f34a3c2e9cc54c246e6e7587fd58bc164d29ae93d5435d31da066ba9e12b8da7017737748cc59c940926db83b1a58ee065340125a2419c80100e4f1a6802474582403791200b9d11490846eb46420b301c84da68024f4942703792e00594a0932d755ba37a1530df1c9b4f3ac27b65bfad48a331ed40c95f507a8cafa5250d66fce846ba3df1e53c2b150b2fed236006699493009fd44c960b60330cb4d8219c59efc8f412e5b61124cc26a3d19cc4f00cc4a93601256a4c860fe0fc0dc62124cc2ea3d19cccf00ccad26c124ac9992c1fc1cc0ac32096614b797fa02c03cc1249884f3dec9607e09606e330926e1bc7732985f0198d59430f1d5e8175abfab98bdc1548925800b8efe6af46b01d8ed9460870ab04bad07ca84fb229ccad56a1ba1904df0ea08b0d65062edc05802cae8a1ea0550d59ab3c2621417b4e80a5ae375e6ae10465835225b21ec4160a53bcc9e104bd8c024cb042602cbada7c4db0794ef3b45f9cdbde9ed8d2333341d763f15c43260a30d997069809524ac6427af1a91d96416c0d99889dc3439c9fbc94fa3b8dee22120b93765a2ccc706e612cbfc28ae6e330558e9ce4cb48cd229f3098736c86cf442007697a960a3b80be73900ec6e53c146717fe33900ec1e53c112d64ec9c0e603b07b4d054b384847063607803dd154b051ac600d0360f7990a96b0239a0cec6900ec49a682251c2e2103bb1b803dd954b051ecb93a06803dc554b084bdad6460d700b0fb29c1aa15efa7b15658f19e0cdf1e80ef5473fa00a2b8f4e53280f2349366d493aee54436263a1cf44e9d6e124ed2c587c8702e0038cf300927e9d25864384f10383bb677095f98247c9e082c0f6e19739609ca668b18f78ab717122ab3ce978ad2ba916db292eb3aeb5fb038d860fdd35d8f89b5a01658f5ba3a7195cb2b17b2b75b77b9660d2c77b2f5c899dc243a4b93888bdc7a8ec5bcd17aa6885588afef61c5cc5e066985f55b396234092471b1c6e94aeb5a13e3e362fc0b3596265b59bd0871e23249f15827c1c9ded38c878b038c4b5dd53e674b6439516585b95468526f3dd34e7cc736a178ac3b385303484b442da74168e51e988f8b621cdb2745594d5c18892d433fa232d73aceb7feaa1421aeb6dee6c6108bf592f1cfc3be4c702bb57829e94ac31cde5d1c2bb47ed975b3ece65a59b69c37b15d9ea9eba965f2d8f79676168fe2983ed557b798dda60a919dd4f8fb95220e2a84d42529439a3a7c781ae8e6112b397c7ad2411dfeb379bccb6817663a20d65598779d14ce77bcabb7fee64a9595b661edff1f631d9ce4293d0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/182b3f96945648a4aaecc699847b49cd.asset.meta b/Assets/SerializedUdonPrograms/182b3f96945648a4aaecc699847b49cd.asset.meta new file mode 100644 index 0000000..91ce28c --- /dev/null +++ b/Assets/SerializedUdonPrograms/182b3f96945648a4aaecc699847b49cd.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5fe0eac1b0c14da41bfc7d66e0ea375a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/18a8a73823b22934e929c67357a4e2d7.asset b/Assets/SerializedUdonPrograms/18a8a73823b22934e929c67357a4e2d7.asset index db69ed7..224d74f 100644 --- a/Assets/SerializedUdonPrograms/18a8a73823b22934e929c67357a4e2d7.asset +++ b/Assets/SerializedUdonPrograms/18a8a73823b22934e929c67357a4e2d7.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5aeb72d346143e722cdf736b1b0cbd52681b53124b493afddb42a021338530499c3f0c134cec80191b32b661c22bf48dfa1e7d9ccea4e71cadc87ab52bd98e65e3147b2c59bbdab3e7fbce6557c74e38802f6b050f07b00b9b50860ad4e00dbcc66f9b786ee1dbbbf2db1f431bcf2ff058c5be15b81e31925ecbd6553c6ee35507ba38f22d1ce1b9c1fd7b50c7efdb38b68e57d47a8c9f3ade6525715005eec10e3c82a2b51421e2800775449b45b8ac0c1eefc27becadb3523489c35d453cec614f87fb5aa8b47fdf1378cab05ad8778463dad04499cf5962e61f1acb98f89417e799f36648e1a720aeb3e29c54be5be243f7ce4a632de99317fd73e23a27ceb624cb3fa795efb26e29f19997c6cbed0bd4767676f6af6d31e30f90832a9c8093a01b6f0de01afec868a720d1a98400bdccd37691fe1314a0b14c85edde850d58d75ae69a5590f4dee46315ef68b0509a4c99e2efc014a45c13df75c9ad3ad8bec55e498ed5c09e32fc89671af50cd6d0519e28520e70da26ba661df6f178c2f29ea1dac13ba320910baa637651a617212d6cf1093dc1eb266bb8c7c777ac699db5dfc6b62ec7eb6b8cd8bb783ee5d982d8dbf85d37e7bea04cafa33e504ced5e38fa66ba8768487b8763e79345266111a23eb528c230e97066fa2b60894f1c7a49c6e605c893b1e6a5eb9eb6757038b7ee06181c1c6310a1debfa3f87e1ac20c99bbc808ce2d4c2fbb17d60638b44c585f47c00a2395e495ac2b0109e1eadb76d2252555ea2d0df5ae2d96332da2ac8288ae0cc21326e1e911089f3109cf68845b030a4fea3c927703af62f5c80ab6794bed7dee6d707e2ec34344d215999a30f91b2bd3fdbe5f3ee48dda5bd624dc8369cbb3aab016f05e3725364f25ab0c10abb62687b5759621935bcd09598646bec4b9682dadb144fa8cd63af9bead5360ebb8a1d6198dc6260ba57416e21df5cb8f2276466b99d9be2d33c7965919206e466591b42e55a6c5734c4079354de6cc693263cac10b2348f05993d68b17d43aa7134c503eeb4770c12c386fa2e3f311d051d0851543d98b35ac7a257bf735f8bec1b7495f003d3f2a4bf36f8afae71b99321ce2fb0d2a7e0877d0cb6b1c09def30bf5e84799db4d3dfa785de2780d3e424751608ac2599d779001afe8585937e609354bdcc16f54417a2ff87a0154c239c4a7b93a8fea62ae0fc1aebae092d905e74c088a3a04bff765d75deeab32366f2d1aa9650740376f4277d5846e38fb6c09fb84a1e94ff220e8164ce8aee9d06d85a0d3ef1e3c6c1d81ada568da3f26959703f49306cea3c79ac6b76551debdcffcb571e4631e41571d703825bbd07fe18de66e611453c5641f357ace2933ba0cf72598cb70c7811c326c45260a85e74534fe98cb76fe53be0e5d342673f5292d10f9b290695e9f2e1bd2afc8aa7e4539e1700abf3da437456b416581d48cde87065f873c018ff8b7051440c9fb0803b7ca0382811739df0eca7c25eca89b6f9505f8a58b1154a2c9c9bc65bfcde6ed302f14f28af03f46e675c36d7682f131cf19e914d5a356925753e38517d38f4df36f647f2f45facc79fad5a74d97babefd9f67469732e3774442c14f242e2592eb71463b4d454b6903bc5ff9c88204fa10a34d99eb22c5c86c4fcce7fa01324cdca739ee3ddabe8f9bb6966187131b6d85b868cb49b4dd988cb7ad4d216db644dbcdc9d0e64e61902625da7e8893b62c0769ef4ad49942c2b212613fc64d18f999fc8cf94b7c84d97111969108fb69dc84c598c96223cc92085b1e376131e6b0d8080389b0d2b809db9842c26624c26e8d9bb018b7b2b111969008fb791c84bdfb50d58b3524e7e2222c2511763b4ec26802755bb12d9e004ea7d0d3f270698a252e7917fd72faa18e5032ec024ba18f705ebd625130409b6d2a67d3c6bbc692aa52edc2e1df037e85c18a7de132a30b0bab20156014cb05ffe030c962890ee9450a278510ab38fcebc565c64f7fa74909b3b39b16b9ac5641cbd78493efe0cd9e2bd3cbfe0f57be09a7702e0000 serializedProgramBytesString: - serializedSignature: 0593813fbd27164bceb9f72916996a5cc98cbc391a4382f6bf8a04b1ddfc93a1f6a8a4fc33ee814fd3e3720afc5e6fb5fe8cdefd770fcb487f4ea2a587a5e200 + serializedSignature: e45ea1996c07ddb0597ffb682f3b068ec559030c74ed396b1926f84b33f4039fe79771b746e04c9d3bfb70914c6f656f9dd33eb6b517408ecbfcac1e9a1ce508 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/19cd62cadd8e1e84e8a34345d144dd8c.asset b/Assets/SerializedUdonPrograms/19cd62cadd8e1e84e8a34345d144dd8c.asset index 703f354..4764b8c 100644 --- a/Assets/SerializedUdonPrograms/19cd62cadd8e1e84e8a34345d144dd8c.asset +++ b/Assets/SerializedUdonPrograms/19cd62cadd8e1e84e8a34345d144dd8c.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed585b53d340143e5b1a0a5a41546ee2033e892392020eef72531cb908941774a0d0163bb605dbc2e05fc0077f8f7fc35fc3a3df3949da34d92654083a4832d9646f67cff9beb3bb67133309971a47b245eb34471394a62c1d52195f737897705b39a77c8d2a781f20cda06e9c46437af2f54c0d215d42ae4a35f43ca67dbc0b52bf41397c2fa16f0e392ecde3c9a1958aa3539ae66995566850f58788d8924e55bb4cb15daa0be92c7d436d4e94e2414ca91a44b2819aaad495a0b4d36e9b3e895925d4eda34f858a90b92712bb042e3c8612eddea27d868ec88c71f9f33660747a8603c8a23b634436923c6c0daa1e4180c68ab46054a3699ad25a31ac922ebde724cda04541841afe217efa8660e58ab8732e0aaa287f230c320905d44cd07bbcb9d72e4d02d46d8f942d0c5b048d39da447a24f276a1b6bf6598494c97b7cf3a645ade54428903e811f245d17043d213d13427da2fa1ac26be5d8677cfe27d2aa3f96dafe05b37e6a60d995e47bd53b52ab75cd7a1691ed6b0f66607bbd92d237f831186bed3b0a761dce439a2ce7c4cdc62682d32862cd6968c49814c35954d91c959b5ee43b07d1bfd16eafddbc27b865e05daa24786e91e110b1a0c2ffe3a9ff871fefdcc68366d9acc4e36ed49886941c0b2bc3135e093106c8261c453aca8177ea5833fc1851bd708bfd5ae20edda27a05376a66602542fb22b68b086a7206a576919d5653c07a2a88f9b140b4a08bcfecd334cc55600c77400775d37c0e12b4a10c05d75bb1a009315e96810ec6e8160980ead10ecd021c883a82f912298469915fa2c486d41f6cb86cc43c9f3684e5818d483715c9630f358740946fc4edde606e2a6149a12f846a9d95ddecdeccd8c12869ee4a4901cbd32ad9c22ae730ad65c7d8cd429fcf1b8f3358bbe9f41d6890459c7e8af8bdf8369bf07dd5f7a68d7e3df23f88f6a4f15ed69641809dc4a31780b825305bab9974d93c956a9364e306c5d09539a43cf4d68b02748879f677a03ce33f92b0b6dc3acb09629ee9f97f38f132ee9ac0bb7a975189fb02d7264016976801b67e9fde605c5c3eb624447968bc6147e5e7a65269ccada551179592f4f3cfdfe39cdfb9a717626b57e32a678523ff8cfe75b8ae7db43729dde6226b3af5efce16217aede231ead430f79fb51a7256045feb7d941efbeacf4157bcffd207b48b5ce9767c4cb1c44ba4594d3a2e722e684ff81628e5e03b8ac5850c51d17678ea5d8b6fe28c1635fd8c1cd03e7d164a72ebb007522034ef35fed6a80231770035102f7d406ce8a17ca021d2b51134f2cd33bfb17d54ed3306e937628151dc0dd51011c73013c18f5b4d67b66d96e12197889a8c0532ef086a2048fe9ffea5905abd101968c0ab00e7b53bf01e1538a378b6177ec31d682a6b10b6c6956a4d367e35046eb65597c32183723ef46d463722caa66dadcdd836586eff98fd954a5f7efe295f177156196ced2cb845cc900564ca6ec46db3f429e807c5002f23498b784e768158db3a2145fc66f1eedaccf751d0000 serializedProgramBytesString: - serializedSignature: 3b6551106e90f61d84590f6ea5ca39fe2820b93c32f90bfe6a5e848aa1c82951bcb1e69c6817862fb11e9b03dff326c022731a55e8eb70144e66f41c8f3f4602 + serializedSignature: d31a7053526c09e1feedbeb0df1511b57ac4634b104394e58f50cd74315f16150a6f483404f6a00a32d81e2899b622c680c38382971387205fede1f7016d7e0d programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/1acedb947e4c9dc4d8f749557d611c1e.asset b/Assets/SerializedUdonPrograms/1acedb947e4c9dc4d8f749557d611c1e.asset index 902f09b..5c5da86 100644 --- a/Assets/SerializedUdonPrograms/1acedb947e4c9dc4d8f749557d611c1e.asset +++ b/Assets/SerializedUdonPrograms/1acedb947e4c9dc4d8f749557d611c1e.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9df7571c4712807b915608814119e52c010aec020a4846208284b08c02c9f2f97c3222db2061822c9f4f67fbf2f972ce39e77c3e5fce67bf77f7c3fd3ff79eafaba6475b3bdbb5bbc34e0d1e09edd3f6cef44c4dd5d7d5d5617a86a284d2ff6287f5d780ea51edaa56f5ab617553ddd0bfda753aa53fce96bbffb29ad1e998fe1ed47987d5ae1c67c2bfaad826fddda5b766d59c3e735e0de97402f37bd588fedda5cf1dd15bb07754ff1fd147c596eb93fa5587baa42eaacad8861c2206f0a459b32f0676c556eaef36f5acce1d41a5e02209ccaad45fbd3a6716f3a6b4d2ee718fa9c7d1ac299d37a4cf9951935ae67594b87297d62986363957d0ff57e8ff1de6f732931699fd67c971ee7e733ae69f23db2079dc6c2f37f99d641bd2b8499b4cfe79a203a4c5266d36fbbaccf64a939698b4c5e43f64b64b4d5a66d2559ef35799f48cd97fc16cb799ed87cd76bbd9ee36db0f98b4dca415265d6dd235265d6bd25673fe45c756e4117ffdf5d7ff67f24f9b741db1653b6102e96623e392d9de499840bac593bf9b308174ab27ff8c49f7916bee25fb20dde6396733b9962bd33d0ed20de6f8cb667b3fe109e9468fbc2ac217d24a4f7eab49ebccfe2b641bd27a93264d7e0fd986f488d9dfeb9177ccecef23db901e37e9518fbca326ad65e49d34fbfbc936a4a74cdae891d768d28447de61a2b77b3df738480f9ae307cc760dd94ff5d9648e7b84948bcbdfe5ec1e07e97a4fb9adf3ecbfaa8cbfc66318bdceeb7832a8a655022b7e8dca3fccba67e60eb0186be00bfe55e165e774289bd6022c51ae1f63e89c6ad03e618b729b636544ef76fc1ed4474ca050b898e712af645c02949bd49f1112a267f5fe4e8cf010a427744ead0e1a1378d613da4d1fd39f742903fab2933acc8f68e79bd79702794f68b5338fcc65128473ef393d5aa6d3da4ce93d2ed069bd3d891af6e2f72dd47404b5efd2fbe6b0edbba15bbf369ddec6ab65da3ea37fdbaed96790d975b4373adc7ea769738ba9435b03da27b0fd592a91c5281140bfe251530d9727b0c57e29a32496183a41063a325d46461d228ba5edab5709ecebf46510f46f63a68576ff86bc9b2865501f9bcd1e3b1d28f2436845aa94553cddae0695c0bedab61c7665a30af2aab147ed57ff787c7912b4f4f28f59f827e3a64dcb34a9c463126c31928b38c9c5854a5e66f319ecff8e89fa4cbfdee73486673177022368adee128fe87dee2003e87347bafed28dc7cea30ed93d0b62fd760fac19136a321c2c098556823e724829217d394f5a6e2b151c7df48658937b51f73194e3bf1ec36067a7d73559d2a5483ab3a3954b078e60dc56638060995dad968c4a53ca579a15b6e2c1414d4f88c593ab61cb563830a2acccbb70cab1703666d8965d03ae688a6d4503f42a2c4a811765144d395f342bb9725fcdb9a38f722fe184afb10a7fc19753ade2b0ace5caca0796524ef8ba00849771c2d75b845754f913fe00c77c4300055ace09df1840815670c22b03d07c35277c53009aafe1846fb608ffcfbf1ff6257c2d277c4b009aafb3084f60cdbaa616a33b03c30fe8dc8fe863e7b2760fe0c8ec311b66bf8e78f8d8e335748bab6330bb168c5e5c245f6fa38da126dc6eca1c0ebde138ff2de1f6bca9ee505c1725fbf5397a1b6c1501e8edb4a9e4ad043bf84ab09113bcab40c1959ce0dd050adec409de53a0e0cd9ce0bd050adec209de57a0e0ad9ce0fd050adec6093e50a0e0ed9c60986eaff2088e3da837af9b21f629ed91cfa9a4baa353f98f1f9b76d8225b59d891ed9226f5a472a61bfd47b6eabc235b0d13d9725d9f8b6c3b398f3868f308b87b378104c3f58720fc6497cd52f09343f954aa1a5ef06e0ee1611b42b86937aa376eea5d6163f4836b0f87eb4881b8f672b86a6db8e0fedb2c69b56581f901b48f03942810d07e0e50d206088ebe652a3e54f7868210f901708003505720802a0e40bd0d00c4cea7f5cf413c7606fbc610afc3c250cd61682810430d87e1a80d0384b7260cf993e807a7750dde6b00ec51cd24c70153a7f737695f4ded6ff665f641ceec63059a7d88137cbc40c187399e276c3c61ec0bf44ea9abfab83b482cf5bbfeee6f3fcc8e70a63516685a2d27f8648182139ce053050a4eda04c3d402743a0b9d71a9e384370520bc9e137eda2afcf9763fc21b2cc21338af06b2c29f1469bf1b1d82bdbf034b9396795825708a0f7c26786d203a7abfe2f61e36ac8aaa165283eb851fe57cea4c000e7b8c13de1a80f0e39cf0b6006ac3099b70a80ded16f749966716b12967ef255bf84b3672f6740400eb2427fc6c00c24f71c2cf0550120f7225d12956124db64bc2262c012de846fa699be455b89947a3b68d17dc6c130c775760d569a1b76e5ab8f2bd6029dfca97ffdbe8a77ccfd884c3f1b0ce35a36f041292e6e3a7ffd3ca795137eb45afbdfa6a33f9c29b0c7ebca8cd72c904deee599c4513b0663b35540bb651bd68a198c0bb4fd9964514a611d4eb96d417d3a6c2aaddec8b330ad3826b57db6da58fb7cc9e5c94d2bf6219a706eb03976d3e80f7f16ab3d00f422f8f276473872be80ed20a714ed1c1c5ba1e5bacab57ee12e65e7de6055dd0831a3b54367804e319bcee536672aa565dd39f31ccb9a6a5cf6a7d064d21cd601e2db4f4d56b7ee2e859ce825e9b056758ceb028645a1f346734ef44cd9d75521d5ab767743eecb79f9dbe9e2a38ebce71d6f5d9acebf654e4f4eb3a76ddd4565e434d6f685d2794bb221884b4e2beecda67cf0bcaee4eceee7e9bdd7c30edc12b0f63f84af7c85b774ff76a4dd76ef9d1f93ca7f3804de74e4f59d1abd292eac4baecd6ff3e356e254dcfce961354f97471b63e62b3b5c547f9387bc62cdaa6966df1fbb91c3fb63dc4d976d5665b5b20b62dacfc16eaa917380b1fb559b8cfe3a929aa8e557dda42ba982053cb549e1f2d1fe6b47c934dcba605c400c88747062166bbe7f6ea5a378e756d244bbc4fefa2f9b1aa9bb3ea319b552716601574c3e6306238919db7c2d6b3f063cb45ce9637db6cb9e3c396d4b4d2795d22030bae2f61e570845376f8e17a89e3fab88d6b73464b92aa6f0ecd73a8c1149675b6da999e436fa30755a72f7396bdc566d9d59c9639fd98219f96159e130c8d2b1c8d6b361a07d8fa93f2326f2408aac5e8e1347dc2a669579e7d9b6e1c9d409c9ac6a519439ea8b5782d642f67efa0cdde46b664bad1a271357ab707701387d6c3d86a3a2d69764b83e8d1f471d65c0fc6cf6c356261dcfb394d8782d1f47a609a0e709a0e2f2c920511a31792134c247b84a33162a3716191690463f355cee6519bcdc7595f85a5ca7dca59d2ec583f6bbc75ceeccd4e203d6f4093831eaddd9262fd89c540c9b3184966f49997f10cd89a55095c899e54f93faa0ed79ec2a59193da8a41fdcb7de629bb049872e61e5c1f55de09c9853ec39ccb0a279ec2f9a36a903c176bb32eb74dfcf3dac5c6225796268dabd0ef354bc769a9162570adf8a1057a536e2d26e06acbec3ee47fc1bb23e0a28237db68014e3f6cd20c90fab5d461f33be795722d403d8202dca77c03786b03b857abd66f1887adb3fa331d53aa385e9484127852125331629a8f181ef807b1d023fc5c60d57161cf7a64068e0a0cd5b7b57ab017e40d7b03093e37f146d3fc291a08aa2d5e529da582a55a297beb9284566af23e6f4092d0804c01840e37de626dbf2159db5761995df38c518e7baf53c80b0e4ad26a7f693e462c24029c54a900795312d94a836c501f30a692b2b86aa4701d24b8a6257195195ccedcec1cce0c0ea197d5cb616b91c2d640b03d2d896db5c13685a77421341879c0f4f62dc49794c3572e856f05c13713465c1b4d1b7736c821db21856c2f41362b1dd79c61636a941b3d0f6b26b8e624715528fba31921c0bb2205af9dc09b0fa37a8e23289854bd2d1bd1c4ba1de504d9ad3090a5f7d404239a18b27a82ec19e98896de53ab8b604f6d17c1753b3c5c75b215520cd72182eb59495c7cc7f668043bb60f126c6f95c4b6c6609bc596735ecd907b84dd28269a0d410501f85c180d417ad756700c2ad6b5ad21c8de1646649bc5d3ea653d4c0c5725c175273c5c0db2eda618ae6d04d7dbc3a890e93d33c146402c861d23c89e0fc3c3523d33415c625d8d0304d70b92b8e277437e34dbc62401f56258a004639618a8a304d43bc20225380f2b06aa91807aa72428b7979f7abc20cab3156b09b6778511e09d2e4432a23dae0d04d7bbc3c35517d11ed71682eb3d92b8ec43a02822db4990bd571259ea7e12442f5881702fdc4f2a26f8de27ed71a9379b8530c72fd604b41064ef0fa392ba73fcd19dda7980207b298c6620352c3a11c161d11182eb0392b8f81958c1a6609b14b67504db0725b1951a6cde677d05ab665c0a9a22d03eb418d0043d4d0c5a8c40fbf06240131c718a412b22d03e22092df7ca9f28ce6cac24f83e1a0e3ee8e886bc704a0c5f09c1f731e92a3b4b4e09a1ab2b36b83a43a07d5c129afd0e4014ab699c20fb4418c8d287f0827701c4bc6c3f41f6494964b6a9c8e80eaad6106c9f0abf724671d2bb8e20fbb424b2cc71a8202eb171e81e82eb33e1c732c1a1bb582c3b4c907d360c0f4badc888e2eced5682eb7392b8b22f9a8aeefda8d504e0e7c3f3b78688de8fda44707d4112170c37dcbf8e13c208406cd0de44807d318c2620bd9321d8048855c95304d997c2a892a94ec6b1087632aa09ae2f4be2e227bb059f01105b6e7c8260fb8a34b6f43f2113423cbb2485ad8d60fbaa243678506f5e67f429e78d25d1bb9d729aa0fa5a18712cb5d4258a5dd9cd04d7d7c3c325fc948918ae8d04d7372471d9c79682c3713164bb09b26f4a22cbbdd445b0828a2d752923f8be25dd62da3b1a515c21b48a60fb76385ec7ddb613acb462f84a09beef48c7b921e5bee42f843e9a58d7b69520fbae24b262e3714f297857bd68f52c9182b58cc0fa5e18ed68fa003d8a7366cb09b2ef4b22cb1ca047f179e01d04d70fc2c325bc865b0c572dc1f5c3f070093f9329862b4170fd288cf8953e0e109c31131b075411643f0e3fe40b22130bf9c709b29f841bf2052717c52ae53e82eba792b84a94774546346733d613603f0b3f8a4511d97675cfbc70340993593f87628f9962afce98ff75dee0b9c6580763db6e35829303ce3b3e0755ea6d9e09208cefc7f6f396e0ec32c1b6ecd27e410df094ca6460a512c4eb436d96e6b68f2fe1b22ca592805bc6f7b4fdbf84722f36e55e948079ec585d00be975ba35f29fe85b5e1dc817fe395eb65057fad681a8f04350bf16b682cd2e54de075135bde983e1d9cedbfa6b1ac28b175a13eed5fa397257dda91368ef83db23bf3b0ce5e0e5e9b53474da33fd08552237879f89b8eb9496c8f41b3c84b6bd55b6368eb044a9d522eb662fcab0c45490845bf91e499c71b3befe55ac2478824448857d22a51122ad16f97bc3b50effe9d24cf3c1fb9be8f3dfcf7991efe87250f0fd4c3ff28c933ef67adee631fff53a68fff79c9c703f5f1bf4847f13ceeebdec71efed74c0fffdb928707eae17f97e4e96385e97dece5ffc8f4f27f2e7979a05efe2f499ebeffdcc17decebaf66fafa6b4bbe1e90afc3a712bbcef42f8c5dd2c70fa33cf817ff3f8fae33c60ab70000 serializedProgramBytesString: - serializedSignature: dc76312e0500bbb91176ae6c243f7195f2c9e5b9d5cfc86fdca632aee81a6c4a67ee347bd2e9ab1ad9e9cc8f115f706de0ce62e16397c6d35e9297f0d7bdee04 + serializedSignature: a0a68082ef3b3c61085106d2eb35c49fbd7add93509eaf4f973211ccac333f23c5d807d169798abd7e5ade99ea9894e3377318dd6a2483522ec7457c5a56750d programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/1eda265cca426974d8012caf1241a005.asset b/Assets/SerializedUdonPrograms/1eda265cca426974d8012caf1241a005.asset new file mode 100644 index 0000000..90f6ede --- /dev/null +++ b/Assets/SerializedUdonPrograms/1eda265cca426974d8012caf1241a005.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 1eda265cca426974d8012caf1241a005 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c14c7f5f8e7e8dd60ba0123fa51252410c5d8a68866d30c0217c0202401320261159a1beed8c6bddbd8c6bdf7eeb8f7de7b4f62274ee2244ee27427f9efcccee8deedcdbbbbb9d53bcdf0ff890f5a6d7bf3de77def4b24d7299f71319e1fd5ac216b2696c145bccca5815dbe0fd35cd3baef7fef967eafa0256ed1dd778bf4bbc7b23584e8a37f9cf90480feff76cefac86d57a6fd6b152ef5821ee2f62e5dedfb3bd77cbbd337e75b5f7bfdc7b2ad2cc7b69312b62f3d93cd63dd235858825e2a51a792dc2ed8ab4f27e4f655bbdbbe542291e48aeb8d5ddfbb5c8bb5323eeadf79456cf2d65cb8559ebbd7ba5de3bd5acd293b94a486c356b2c137f30ffd05d1e7bc86337ef7f6bf97753f9772bf9377cbeb93cf64cf3f97dc07badc1df9cd0ee24eff7f28f917dbd630bef781338e7ef7e2f9febedcb6bb23689ac7de5b1af3ce6489937a7a17f4b79ec97c2de6432fa0359e9306b258f03e57180d4f7960cc31fec338aec02f238cbbe409f8120ecd6e03ebf362884ed2a1e15f39bc0b9178f4d2e93f1f78d7c7e883c0e95c7a894ed3dd3798bbc364c1efba4d06bb8ff1e1bcf623eeb85d974a33c1f218f23e57194d4adbfd4f556701e561715a7b952663f19c66d9aebea797eff76799e278fa303f1952f9fbb439e17a4a94f3afea77452fe772738f738365b9944968af78181781f28df3dcfe7d8ec91803dc0ffb472c74879776560c7a0801d837c5d9a47e39f4ba983923f56ca192ce5de0dceb9dc8b0c6d6b26df7b409e17b2d4795bf734ee4df0e5b452ac27fae1b4e8e25f6f3189c5fbf2f8147aaab81d1288db21526ea594abecdfcf3f8f28cefd801cfefe3d01b9d180dca894abf2888234f554761d288f53e5710aab4fc7c38ae5b503e471b20c73288bcf03547eb47fecdd6e6586dc92c5d1b4405cf791e10e4b2153bd5f248fadd37c5e3d333d84ce33e4b14d9a61b691c79921c26cebfb42ab1f02be303185cc593edf56b540074f4eeb63e5f96c793c481e0f96fc4706fc409515c9fc20952e73a42e0cc481a74b9b8ef27cae3cce8bd7c5ab4dc6eb746fc3e914192e65de07cef97184bc7e3f38e7ba2ef0c369f3bc94b9401e0f09e8bc904e67af162cde6bdf0ef8463aef25f3af62dfbeb679beecb62a7f581cd06d464cef5645e05da5473ae9e150c92237c03857eaa0d81e1678ee0170ce8fa362e189bfbd77db29dfea05aef3771f04e7fcfe9234753d8225fa2c97331a843d5a862df3ff76e7c96797b2c4b4a77b971ff3c0b53c29ef73f9de3296588ea9e7b86d0f81737efff0346d5baed1cf0bb7fde424ef1ec9e2f39fa2983fb47c5b5e5b21f55175b4fbc039bfdf3ff64ea4525e5be99fefa5742991ef14002e05be7e1d5479ba4a1e57337d395b0638c8f4e8b516ebc3eeadea8ea549c25269734dc0eee2989cb63da4ee2a1f5365d930e4597ead421ed7cba3aa9b57c59e1da1e25f31da20755375419937b375e03a3f8e95f71f06e7fcb9a362b2bbaa36d1d1015d75f1591db05d970724f3b31affd951efcbf35a9fed5ebb24b7e7033a94b0e4fe5b278f5d34f1bc29453c7be17694f5bf8ec1fa5faa7037fbef0d9d1ce091eabd646cb6f932ebebecc7c8a32a9fa700d9dd647c16c66cabafc76d05f7f8b9d2710b8b2b7f92ea729c3cb64f614f77f01c3f1e1fc2fe64f75ac8e389d2b6712cbe1d33ce8fcf4e3f24917592cfa987ca1b4ff6dfe9cce4f929fefd4e73e4f9a9c0261e86aadb727f51f9fa69f2de0460b76c17476019bc5d5edb2f762da2dae4a707e2e791c0fd1d4086eefe194007ddfd33e5f5477ddd3b2f93d7cf0ad8b285c5eb3a91c5e51d6c67a2ad918981b01f3388cbb3e5bb9302713949c6cbe349649da38fcb2eafcbf3730371a96c547109ea5cf5f69f2fef1d00e24d9623910335f13b1970d85fdebb00894b75ff42205777ff22a083eefec5f171d955957397207109f587717969a2ad91030361ff2c8db8bc5c1e2f93475d5df60a791c26e5268b5725f74a793c2a89dc5e01b94fa421f72a79dc9544eed588be9984a77c5dd553a7b0785fe7e79edf764bd6af790dd3fa7a775507dccde27dfd5a16efeb5359a2af5f27ef4d8bc53f933e16296289be0edac811d587703d7806faaaba7f0390abbb7f23d04177ff2616e7eb3d54197f33d3fb3ad41ffafa2d89b6468a02613f99465cde1ae0acf8ce60f16d97197efcf450faa9bac1c92c79d9789b2f3ff763792efb3d2333a5fca7c0393fce0a843b4b86fb9d2fa7e777524e3bff3aeffa15d79f96d7eff0cff314d73be573d1c07377c9e754dfd33d01feaa3ea17ce5a098bfd5db7237b8076d3b98c5d74954fb600e88ab83c1351857aaae968aabe4c3549b51f19b2de53d0dcef9730fc5f41fadf257d96614f52279af53ef40fcb6037a3cacf715a12b8833e33a92b2f99114369be44973597c9e34d7f7835e9392c87a5c3eb332c9332a9ea4df32995f46e6b1f83689eae351f1303f705ff6f9883c5bb5597e047a28d9fc9d67d2b0ff59797c4e1ee53b91052cbe9f4bf5e7e8ca884cebb199de93e1460e89f71f71eec543ef9f58bc2f96a6f00fd5ce7a411ecba5bc850106aaad9cac8f2a555849ec8a14b3f87e01d58679519e2f92f7659c4596049e5f229f7f499e2f0e3c7f58e079d98fc45e96e787c63fcf5e0172f8f9ab31db842efcda6be09aecbf62afc7f8f4dd2eef1d1e1f367b83c5b7ef541bee08f9dc73e03dc840dd977116591ab069993c7f019cf3e3f280dca50156cb03728f0ce8fba63cbe238f6fc76c2c380fbc0378b2b7e26526f5e957a58c15f29d17c1b9e7d37d93d513d5bb2be5b144ca78099c73193ffafae6b4c265455605f8ad04d7f9b154de7f199c7bb2739625d1ef35f96c59c0b632f9ee6569bcabd2e4ea806daba58cb7a56ddf2491f5ae3cbe178843e5b35cde5a4dbcaa7eabb7e4f91aa9c32be0dcd3a19fea9b789fe97dbb3cf0feabf1eff7576ddb0fe4f1c3806e152cbe7f4bd5273ec17d927d1ad01df475d5ebf751403fd5ce507aaf93e1be06f450d7f9b192c59751aa5fee3379be3e705ff5ede9c6cf93a5914ef1c7c806107f5fb058fd183efba57c76a3bcff3a38e7c7aa980cf1377fe773963c0f57fa7ccdb4e3a80364bff48053e47555367c9542aeb2eb68f09cb2e3e7f258c0e2da07f5f77f11b0bf20cd3093d9f78ddebe8193fceb038365df2fd3b4af3a897daa3d99ae7da9c24c66dfb77afb06c9394483f27019911a16974fb2aee03a3fd6cafb6f80732efb94247a75f69f19acd2e5afa41f8d0171c9653cee5fe7d30ac4f55fcba36ae3fc468659c7e2eb2faa7f38587fe1b254fffb6ffdf3a1ff90e7bf63f17dbbc9787eafe739588eff0cde9e84e72684a7ecb78e6c0ef0dc2c65bf9f442fc97388aabbfeded763a06ae3fd52de6fe75faf7fee0ff2f8477994fda811d5b6bf159ceb78f26b7f32e0f6673db7213748bd1e4922a36b80db5f0cc2fd511f6e54fa7f3489ffb3bd2583ad2c7eac6dab94a1c66d3aa778eea22461fc551f5f51e9ff43d5f5bfc9e3dfe551fa6e645b20beb625892f5df8ff3460f96f79943a458e8985d15ff5fd7ceeeb3f5495cdb29d123936f6ec50f5ec7f02f7f8b57f816bfc785cc0be6302d7559d3599deffd5eb384cc5fdff401cf07115c982df8acb9b74614c91cf1ecfe2db69c7cb30e418c330390e1589c8f726b3a4797a2428ff0429ff2d70ceef6bc60cc54c5c7e6c192f23ae2ea8c613b7c7deafaf4fa9305a807b72ee69a409788f1f9b037b528d35256b17ca70827d9ec303f39fc41ce164dcda306d1fd788118672dab2b83eb0487b16d7071651f32f541f5807793c319e43642f793c29169e78465dd3f46fa5d24d7b4dd6eb2281fea688e43852e6ff23d538b1f2c30dc9c352cf454e01cfa9b04e0536c9f1efc869e0daa9e01a3f9e2e757b1b9c7bba8d3a2f2077877cee1d10363f9e21afbf0bcef97b72ae61448d7bdd1290b713e874a60c53f675453a05c2388bc5eaf17cdc7a4180c35940d60e704dc980fdd055e0c8afbf27e360567c98a9e22069bad9db97397c17f01d6edf4ffef55c350f53d55f6b53c4b72ccbeaeba4607c3da2d25492f1f5dc5a19ee2eb370ebebbaa99ed3e92ceb51a28fd9f4ddb3597cdf8a1aa33c87c5a7a3737cfbf28a7dfbf2543b58d977670aae4aae6a6f9ecbe2fbadce95c7ee401ebf9faceea70be7bc803de705c2edce52f7d7a8fa8bac2f472e90ef7c00cef9f17ce01b3de5f142704d8daf5e24df576d7d955e2f06cf5e0c9ee5c74b587c1ff5253eff82e2806cf5dea5f2f98fc0393fcab51891cbe47dd99f509f5f5d0e74b80c5ce3c72be43b9f80734f87fcc37c1f2818818475258b6f875f19087397bcff2938e772bf0e3c7f957cee3370ae1843399fc7cb49d0eb6a60a31aeb7c3085bf4aaef563066a1c5a8e598d56f94dc7f4e469afa97240cdd7bb26c0ed1af9dc5be6b22372cc23b29bc5f7c7edf6198d51f9bfcad79ba7e0a1e4c931a0889aab7cad94ff0538e7c7ebe27d3e725dc0f7af6771659538f7f41adb2e20e786801c558755f172a3bcff65e0bd1b815dfcfe577ebc8dcd09d893c2eef86bcd23a26e39cb2b014ad846962b2a834359facbd1d49ba917a271d12df82ffe3344045bcbb67aaf96eb56832d166bcd6abd52245fbb1aaca7a8afa9d0a789df25de131542e8d79184201e4d08822b57e9fd2b074bd96abceb33c54a38be98adc2bb338acdf18efcad956c345beafd8b97b2c40bb692d57967c5deef8d42de4a4fedc4275399c497bd05df59e8c9f457e5adf7ae28a01bbdf34aa1e122f17b93d0b45c683fdbbb562bd6086e606bd854efb8458496687bb5f7b72ecc62894cafa37e711e76dd5f02a8a2a9c8b3866b9f2b7cf1ff62a4316284a36fc1d307ff69962b5a966726c4c4ff31f433199e99ce9632460b6491b86bf92c57b49717261034b731d142bd7ffbbc0bd998a4b6e8c9f0e8ee252c88c5f08b6d77772debf7eee3cde34d2b60b9a248e99dc2b46460b9bca8a8a99a98d0bc79b33cae68107f44875f74892cca227effb90af19c7904b410855f7c0488a997c55eaeb600149e4bbcdfbe728b85199542c9a059d33d354b846195f529658308b45a1487b56cae903245e6a89bbcab2a674d88ef3cae5c4b11658905722ab3b1486ba28b34315650dc2869065b5e9e3cda5ad55b118bb65c51cbea91c4b9b1b044f5aba9ac83a9e437eebe6d636ecb7f7ce4e30fcedf507cfe6fbf69ae8f9f36227e3209158ba1a6ba186a93ed6495ba1c49163f6debed8ac50fffd1336c87f8782a1d3082cd7404db66dbc7f9bd2a21a5c47bd69c21ef101d1ecc9af4003b204e985a050c61730dc23c8e702f8d56ac79eb80565c2144720b5de4b46b9c423b33e7e62df2ee0104cd51e7ee94b4cc3575ed963a7a62a9c84a527aaa2db9c86b341cecdd2bf19e2f1715537e7d8127b1c40b9bcb9b224288b53fe3df484e96f7b58e0c92d552ed2ca80e042de3b09a61c45b6988e7717feda2710391c7051343273c31b4c69259d7b0c9ac0d26b95b58c96d31c9ddc34a6e8749ee1156727b5db211234acbb2926c625d30eaafa9debb6b3d633689da5f9df7beaecb267972e9997672d94724971ca6eb4832d3084b261d7471c72ff6d229198cba7df0a8db0b13dc3ba4e08e98b7f509eb6d9d3095f70da9f2de98ca7d352a474c54ee8c49ce090ba38b2ee989485d9595a4e7e7f205405a95e8bce2e1d4807282cb5c273a57822544418a64d82fed64d85f24c3c12c586a85d30e4b925d7571caf3d8012c7cc9d50d133eb0018477d709e725da2096d8aef89ff79320bc1d2ebc07a6f9608de66bca9b1869de134b4743c2a6a37d30c9d1b0927be952a8c81d4fcc4a0a4d35a6315374a994b3f95ebdf828e6774627a616d5a9bdd03bae165af0eb5c8bd46321c9d3f7d07a3ea0b341e4f1d399ae406d2c2bf848791391cf0c17f90cdf8d63b177dd1f83992e62a04284344aab0d0f017b5eb198cbf8ae817522b69b235d222344e876b1c1f2c8de584e335293d37caccbc692e4347db0243b2a6c92dd57279927d95c8dafe6715fe5d3beda88aa45423823f070faeab206510bd9d6a85943ac5775b5e857f5e5cd637ce3cbcdc255d7790ebc493a4eb1f74cb51746b974f23099011f75e813ac6931ff479f1cf2457238208de4406915960072749ec47b19f87ca1849e715e762ef4aa23d3d80a910c8f169739253f762bc4a3156c1becd70efa5b4bdcdffae9b4e18d373eab2e65cdb9332eb83f26786c48c103b0345e18368d0fd449e6b90ddf99236c0d6b10a6f6f8b06a0fc672d4099a1cf5a788598e3a04133e5123fcf12666c2a35852d82f1d1f49e2d54331c19374698c47cd34d1619be3fdaff2dee0dd832522f5e788c230961be47869bdc2fb8b17d823c0f355de13fe08bd899ec330a7d83fac530cc7e2ed004dbcfd68186f2330e1076a84cf6a6a267c241677937571c74b075e6ef06ac95a59b6c5e7863962ae448e981e53273a1ecb44ccd58878cd61c77825f571deb1d67b3a47940395e25e8ed807ba5ae4b526713a0ad37f8a4eff3640ff054043931073752172c25335f956c430dfcad309efc8fcad2eb5159f229649c56734866dba0e5b1f71638ba8b9d689e717090728afaf2b9735500199afd12b5774de6c608d5921e3ad053e99a846fc1daba2f0b06383d4612a5e335862c54bfde82b5e7c578aa8d8172f1bda6315ac022c539da5c9548dfaecc66069613696160eca282d8cd5f99ce8d6dbd8a83e87a7a88542364f79e12bfc7caf94a6c1d6bfe85a1b93866735948ec3c55aa31ab1cfbf4fae8667a67cfc6815d8d0df872f92843e4dcc1169229b9a63e9a2102bb5e76a4aed079a9b95dae3742e2bba2cab1bd5658b84846cb8ed3c9ddb8a7ed5c23422bf21f5ec2be69cd6884cb54c66aa7ed6dd572c02ab16c566b9980d551e777fb85814c6eb4b3304eff5827c95984bb5465441f54e3e5f3879b6edc41c7d3c56002cd0140046b5ea0958123a4493847e324c421331b51786557b3f4ced451ab58f6d61a6f6244c78b146f89c9666c2f7d709e71933dfdc264c0bf1004c30df8d27a1bac97b06543ba134d0525c25da0aaafd5726ae6cf57e577ad74a85881c313b514d8a30d1f2408ceda11ab61d0dd94ec6101c1692ed149d60ee9e87a72338c968ec549d605eff3a8221f52fbe5f9079fd6b9a2e1c8e7d9906fb6e43ec4558325f1e36994fc7241f1956f20c4cf28ab0926762925786953c0b8bc4124d24f279412691381b13be4a23bcd850f84158c22cd5e54d831813b39b5525d56f3ec5fa354ad86a21a5dafb7b932c73cbe2fa47789f47856c349ba4f383313dcb747afacb95f8d42f5ea728117d683cc4f96c9d51a87330f4e51af43b0dd1cfc584afd608ffce50f83c8cd71a1daf1e29e2b54ccc188a5d1ded5d35e1381fd366ad4e1b7e1a8b3793701660482b344877b531437a0866c4513a23f8389a8f6fa2876c9ee8f02ba95f18509e11c6859806eb741af09c6d4e7dc5604186d5824518d24a0dd2f70d91166339f2fab039f2624ced0dba4cb3ad99da4b30b5abc2aa7da84e32af756c6448ad83ef04665eeb380c0ba71a0ba726a3700ec748d5862575844e328fe03a4d044f6e6716c14b31e19b34c28f3514be0c13be5923fc7943e1cb31e15b34c27bb737137e24267cab467899a1f01598f06d1ae197190a5f89093f4623fc1643e12598931f1bd6c957616a1fa751bb4b0733b54b31b58f0fab76994672ae989997cd454ec1d94f66eb40f80e51e9cdfbdccef40b9c52858f752995ebe28597d027ea543228ca5763de7492c69bbe314c046b30e1276b842f3374d5b598f05334c277180aafc0849faa11de712f33e1476191795ac8c85c8709e6db4225d4054708efac12692c477c1998af22de203f44cc7772281703d725c2f7631d4e6ae09acf4dce91de5b2d7dbad2f3f651de5513ad2b31ad77e8b4e623afbc1337566ff69b927e334437af30870d91b5ee21467aadc77ce00c8d0f3c60e8601b30a3cf0ce90355ba7c564c52ae20cd67b179a4c5a2f39e6f23b15a78ca7ae359a7c9f3e4b3d2ce93778a3c994fefa0d315cbbf37eaa29bd7adcf6648dd9aef8ed586ab6c54b73e1af3d973353e3bc630dfaac6849fa7117e98a1f01a4cf8f91ae1a7180aafd509e7d51abeef56a86a4d1da6f6851ab57f32547b1396495ca4cb195b8bd36a319127b67ac424efd88c1973b1c698391dcd8cd982197349c81c6f2b26f8521d256eced2fa4e2cbfbf65b96189b50de3749986d36e434ec760c22fd708ffd850f8b1583e7405960ff19dd3ccdbf8c7e9c2e1c968573a919d6408e6784cf05521059f8079d1d521dd733b26f89a90824fd409e671bf9b254ebbe3024ca6dd9d8479e1b51a2fe4cb144dbcf0649d709e1df32ddd4265c7a7606a5faf513bc750ed5331e137688417190a3f0d4b99376229f3a68c52e6e9983bf24f8225e4967cd2d70aef1fef8ae103ca6bbcb285d779f8d4d42de2ce46d13ee0b56e13dfdd8169718b4e8bcef55ae479bfd7337f40c29f1292b90e67603adcaad3616fa94381f7bf54d480f93b5bbcdf996b7026a6c16d3a0d5a81b8e00b47781dd524b4b330f7bd5de3be1d3b9bb9ef4ecc7defc0dcf7ce8cdcf76c5d385cafbb34995e53c34cef1c8cd0dd1a42af1b123a17137e8f46f8f786c2cfc384dfab8bdb2e66c2cfc7e2f63e2c6eefcf286e2fc092c303c9b2a6fc06ce9a2ec4b4783079d634ba01b3a68b301d1e4a96358d69c0ace9624c838753654d878af0cc26b95f82b9ef231af7fddcd07d2fc5dcf751cc7d1fcbc87d2fc390f18fc086a9e85d8ed1795c43676d57333a5760749ec0e83c99119d2b31239ed218f1b4a111bb30f44f87447f15a6f5331aad7b7433d3fa6a0cfdb318fae732427f0d66c4f31a231e3134623726fc058df08f0d855f8b097f5123fc2743e1d761f85fc2f0bf9c11feeb31e77c852529d60a1ab858bb01d3e2559d16b1622dbf018bb51b311d5ed3e9a08ab5b10d58acdd8469f0ba4e83d62c56ac4d17a31c558633656ec61cf80d8d03bfdcddcc816fc11cf84dcc81dfcac8816fc58c785b63c4e41e6646dc86097f47237cb7a1f0dbb1e8e6df3b09532edc8169fd9e46eb8e3dcdb4be53279c778ff02f5784ea1eb90b53fb038ddae30dd5be1b83fda12e6df1fefee473e18abd47378ad96a6b44be532da68afa4b9ecac428e302e6ef74e92f972df1ae968985b46bc5b9ca374bd82a3906385a8c01aaa5b65b99bfe9598e1883f73738cf11e33f657201f63a71a5463c550e24eb47192be468291c97349dd27a0f16411f692268966104dd8b09ff5823bcd250f87d3ae13c33fa04cb8c3ecd2833ba1f33e2331da17dcc8c780013feb946f80843e10fea84f3c4fa453a995192aeeb87348273c5ee518d33e49bb8914fc30ef97ea9e3a51df2e59fe8483ee41b5e576cc8f761cc97bed6a536435f7a042b227e1eb688781493fc8bb0921fc3ca875fa6e3ff4932cd9fe9fc5fec71b6ba51fc3fcc165bc93dff9bb43dff5be1f9c392787eb88dc0f431f138e63cbf0aeb3c4f60cef3eb90cef324964cbfd324d3e77b9925d3a730adf9b77613aa447c8df914d1d02a17ab1c74eb6372447529c7702ad3d3981ebfd5e9c1b7e83093ff0c26ff772163e7599d601e3bdf6b6267526fb3d8790ed3faf758ecf034b2565611557c94d76f1f91e944b3e73123ffa03172721f33235fc08cfca3ce489e02d5dc08bf3e1b3febcfc4ac17b1907fd085cc5bfbfe273872eb77e8ceaddf6365be9720ca98e93a9597300dfea4d3a0bb568339e2af5ab120ddaff567b60ce9654c973feb74e995a62e895b389be8f40ae6787fd138deca7dcd1cef55cce01f43e609af6182ff1a52f0eb98e0bf8514fc06c6f9ef1acedb0d39bf8909ff874678515f33e16f6148fe1912c9db3ac13cf7f9573a82933486ded109e6edd07fd7df08b443f9775dcddba1ef62d8ffa3c1debb9f19f6f73023fe8b19f1bf8c8c781f33826fd315346299a1111f60c2231ae13bfa9b09ff1073cc26114d76ca97d02d6470d7913251c7561979940d1505de06f93b7e527b8e38f38b9f116237856a51eafb596e8d98f49e2332e6d8aa62bf5389af8fdd18a819a8707867925fc4aeaecfce7344665e66381df1238c45531d0bbeb913dcbaccaf65c60ad8d80adfcd42c34a165b98eaebc7754e2521df7bda7421c0c798c334d338ccc786def8894e384f52cd2348926a11c924497d8a19d15263c44f86467c86c5742b5d4cf349e7fa2ed2a5b273952fa4e0ad0b7fc79b64711a4d7a77a89842eb77abc6fc3a3e055409cf505da8f1f76a855fd56a52d12aa16115e880f56557c9d6a9897f7daea3c75ba7ad23215ba75f60f1d246172f7cb684bf8b2f9fc855e371349b2df125165a5b5d68dc95f920169f3a170c955faf66a615fbaf308eedc272fc1a4b3ced3589a7688059e2f93986ad43326cfec49e4df537321f7bfc0516fe5ebaf0db8168ab09e12cbfc422ab63d8c8fa068bac4e9ac81a38d02cb2bec584efad11de6c9099f05f61c23b6b84df6028fcd798f02e1ae17cf36413e1df613ed455e743bc15191b638bef46aa0d8cb8f9a3557cdc8b777d9a78d86f309dbae974e21f82e13e0cd7a82c161e5e2437b13209fbb718ecee1ad83d0c61ff0e13de43233c6a28fc7b4c784f8df06243e1bfc784efa311fea3a1f03f60c27b69842f186226fc8f9833f5d639539f940e5ec6824b453373f21f30bdfae8f46a8f3af962c325597fc260efab81bdd210f69f31e17d35c2771a0aff0b263c47579b3714fe2326bc9fae78889a09ff2b26bcbfae783014fe374cf8005df130d44cf8df312f1da8f3d2de2cd6d94b9976fe81693548a7550b99768ac4a89b596af9270677b0ae4a6208f75f981943b04a7eb1e891dd50dfa43631e5df9829518d296586a6fc84993254674a53112333bc7f2606fc070b63982e8c26228c794621fc1743345c83a8d5303344ffc3848fd015fe86c25904113e52237cb2a1f0884e38c7384a079e318df424d09b60d27375d25bd66731b919ec6dd614c394a7c1f49d21a66698f0d1bab6e67033e1cd314af99170fde62d30c1052105b7c4708cd1f9bb218e563ae1bc113a366c23b435a676a146ed3b0cd56e83091fa7ab461b0a6f8b091faf113e698499f076989b4cd0a5d25a96debe84e1e65ffae3992be26674da3d1bb33d164513355134c7308a3a6051b49f2e8af854f4c409b126c6eca50b8f77804fc23ac0f7cfa803bca32e1cbed1d701e9e450db71c19d306007ea80f1822dd708d0de586c4fd6c4f637a3cc62bb33267c8a46f8b25c33e15d303253b19ae95c5189f7a774957b374c3875c5429ba60bcddf893d31e59b84d80d0bb1481762376d52992b7204b58d6dec8e598ed01dd364ba4e132e814f1e342d8b7b6842c9151faee4fbcd666bafbc62ef8cef0866be4fde8c081f53898721f211ed54c59911dea8e99a6059b2f0b109883d75f1c34f674578ff54bc4a07cd3db1e5aede6f3449889ae678d4ec8339c06cac1f488db1acf62eae60b5d2a80a43c7eb85857b10d6c9aa0f77832c2c4dc2eead73c73ed976c769628cb03a03773c38c2bb1ae2118d429c710ee28cc942c79cb18f8e9bf890eb8a2c72f39ff3b3bd45e24b1015de95f962e4d51fc7adc980e9dc88e9c7b9e609b203122ccf543f8cfabe585b637ed8b6465f4cf282b0927330c9878495dc4f279957251646c27f53b43f96292d0ad9181d80f1280ecb632026797158c98330c94bc24a1e8c493e34ace42198e4c3c24a8e62920f0f2b7928e674478474ba6198ca4bc3aa3c5c2799d70d96a5a372926f118fc0545e1e56e59118e52343521e85a9bc22accab998e4956125e761924bc24a1e8d495e1556723ee673a5217dae0053b92cacca63309f2b0fe9736331c1ab430a2ec44ad7350d50ba8ec340af0d0b7abc4e327fbe221d1e49265f4fd009e6b3508e4a47f0b7b8e089580cae0b1983fb61822b430a9e84c5defab0b1b73f167b1b42c6de0158ec55858cbd0331c81b43429e8c093e3aa4e02958ec55878dbda958ecd5848cbd6958ecd5868cbd220c725d48c8d331c19b420a9e81c5dee6b0b13753d7a4efeb9d46f8a6fed95f6aac1bfb68d825c75bd2898be138b159585c6c0d1b17b37592f94ef7dbd25179272ef820cc2f8f09e9970763828f0d29780e96f68f0b99f6e762b1777cd8d89b87b13821248bf998e0ed21052fc0049f1852f02118e493c2425e88a97c7248951761824f0929b8186bb69c1ab2d9b218d3f8b4901a2fc1343e3da4c687621aef08a9f16198c66784d4f8704cf09921051f81a1382b248aa598c63b436abc0c6b199edd002dc3e5188e7342e23812c3716e481c2bb02ceebcb059dc4a0cf4f90d00ba0453fb82b06aafc2d4beb001d42ec5d4be28acda6598e48bc34a2ec7805cd2004056636a5f1a56ed3598e4cbc24a5e8b25f2cb4326f20a4cf01521051f8509be32a4e07598e05d2105576282af0a29783d26f8ea90823760dd07d784ec3ea8c21c79775847dea893cc27845d9b8ecadb71c147632cae0bc9a21a137c7d48c13558267743036472b5580cde183606eb306fbe29a4376fc278dcdc003c36633c6e09cb630bc6e3d6903cb6622adf1656e56d98cab78754f9189d603effe88e7404f7c7051f8b697c67488d8fc304df1552f0f158ecdd1d36f64ec0babaee09d9d5b51d63716f4816276282ef0b29f824acabebfe905d5d2763b1f740d8d83b0563f1604816a7622c1e0ac9e2344cf0c321059f8e417e242ce41d18e44743423e032ba31e6b8032ea4c8cc7cfc2f2380be3f178481e3bb1bce8899079d1d958e7c393213b1fcec1203f1516f2b918e4a743423e0f63f14c4816e76b04e7e678a711fef1681bf68a5e2a87a31a6e08eb591d33ed1cd5e7227c8e6a2e33d92f3a137db1b9ab17e8a29dc7cef3e9443bd71e117ca14e303f7d2192382f5efd98cc8bbf08cb255f6c805cf2624cf84b0d20fc122c7778396cee7029d68c7c256433f2329d60be3ee4d57404cfc4dde4724cf06b21055f81417e3d2ce42bb1de853742f62eecc2547e33acca576189f1ad064a8c57eb02e0fef4763a4cbec2055f83c17e2724ecdd18ec77c3c2be5657e0f5f34e238b59e32cc2500586d9828bf7d22ec4de178558cf04ebd2d1012b98aec372e00f1a2007be1e8bfc0fc346fe0d98da1f3580da3762c23f6e00e1376135cb4f229af55e45e274a1e72c8b58113bb87ecbe8798c6f1cb75944f03a19f5a3c4ca307f2bb9cda28e522daee8eb2fba0946fc69e85adcf1ab98bf14dc6cfbae9b312b3fd559795abd958bbd9a144f747e025d2ffe9e2d3f10562d969cfb097476fd93d3eb77698fdf07b65af25824ee967912eb845d5c6e3cbd9804febc991e98a462c6d794a95d192153985883bc9778724cd70fde8291fe0cf32718a26f5381f78e4f8befcbb3c2f38d6a11e7beb5c57267fca0b6b177f1eb0de54fb762567eaeb3f280809590b96fe70c1163eb858d412de36308de499656e05b2696dd8659f685ceb203d38abf2962c3860aa6d6d9858fb9d81d13db6ec76cfb52675b61c0b6b92276d64acbf8d99646b3e40ecc92af7496eccc727e167b87effb5be949ddcaf802f8d8e7046a0cbc1cb2c3ade065499da866c05c8f57b01a2e6fbb13a3feb58efa94b4d2c61ce67ff2d2865ced2eccbe9febec9b43e855fcead122186e955f1dae104157b06d221dea73924c62f56eccea5fe8acde3fa9d5b8a60b852dfefed7be8daa34e6574b25a1c47491796cde83d9f54b9d5d871bd7ec16893bf1753b9d04ffda82fa7ca0da2b0f7853274c4d309378be17e3f18d8ec7c15929b3a94bf3fb309bbfc5ea29663ea07c986f73522a04c17836f50813cbeec72cfb95ceb28988658b45faac947513bfa9ad5a2d4b642a2e4b880d9a36ca039845bfd659348330f755b1eaefe2b18af9bb75369ca50f62967ea7b37412c37ac9753945bc05707331ce649688e56ad11a2af54adcad0d68d5439855bf49a74d101f2eac212c16b150ed3dcbd3e19a24a55fbc8c86b3ec61ccb2dfea2c9b9632e74caf5580e7a1c9daac99e6948f6036fe4e676339718dba566c6ac7b78ef26bcc4b840754d4a7c686692366528a3e8a71fa5ec76971a3b53c92130acfe1318cc3ef751ca6a279186f21adf21e5269c3df302c7989a397d4d031fd33ccc23fe82c9c6d68e1a1c2a3372031d218f63e8ed9fb479dbd0b093d5b7d86c3a4fc6d08024f60047e68a872d9cfdba6805299deaa2731abfea4b36aa6a11f4f67d522a7aeb6c2879fc26cfd33d643611a8333c41389de18cc5fd3976b62dfd3987d7fd1d9b75f889a63ad2879f99e60ab653b0fb7aa38e159139b9ec16cfad12cce82fe09bff09b2a95519694cf62f6fd15b3cfa4cde8db3a53d6996277f98847f2da6143d51c9fc3ecfb9bcebe812c79af60b1479842cbe7312dff9ebc6fcf24161665140b94bef70266f53f74568f44d35671fd503dcc2362df53e4657f9db6de9959fffe8b98deffd4e93d21658b6bb6181be4bd8f95e26b7ad3d97ab1ef6162fb37590c64de827c09b3e75f586d39791ae1ade105a20659a3a943a43396c06b5eab1bd0c297310bff9d4e1b593f36305bf81eef072f917d5489f195cdf18157301b7fc27aa8d2e90748c7cacc728ccc2d7d15b3f43f3a4b67a5159bc1911e3f1d2abb1b335e5fc3acfdafcedac352c62b6dcf38759ff9eb188dffe9681c41d80e54b59acc7b82705a2644dec088b026198f7b4eb7285f7b13b32fa2b3af3050372ad0ccd5aea9af29c5becb16dfb6f7bfd256ecfddfd280befb166649139d2513d1fa4ea2458dd53a7a1bb3a8a9cea2c5a845892dbde4a54f3aed75f3367de63efa0ec6a1998ec330030e2a4ed58eed0de58bef621a37d7693c3865a9121b6b2c1757f95c9c86a96dbf8769da42a7e9b824ad84a0a7c76bee7fce37d63f4d915edec76c69a9b32538ff0eaba3a5caadb35d3ffb00b3b295ceca838df339bfe4d5e5eb411bd4c723f0f84c943245f419f236b289cd1f6236b7d6d93c2810b3b130a953d347989e6d747ae607f484f95350e79952e7746b0499d6773ec62c68abb3605923d700a107a69bf2d43b26543ec1a8b4d351098e6fab104d72959865588a6b98dce453ccb2f63acb82ed5ad39a45f8964de6967e8659da219db4394df8acef9fb5a0bfd2f7f1423626857dba74cbdf32b1e073cc82bdd26f8bf030cddb22be7dd8f5868aa12f30fb3aeaec9b93b2fc8e7de924a8a3fad20c9e6b605f494996d36456b67d8959dd496775aafe413f5617790faf627e4ba59435f6dcf3af300bf74e27e5e90967562aa6aecfb7f4fe45227c61d47421c5ef6dad12eff03a502edf4d2592575fee8daa2fcf46c5957db1eb3cfcf55e6cf034515c5f72f18561c925746ee257c2c5cf10f99d333ffb8fac66c18567d384fc4a99df286f1d2508f97354796b7c9457e7a9106fa92574a9acd095e1a340290ead4b6dd37264495c447cc416caf248f3cf18ed719676e1b19a2363b5492e1f128b0ccfd09b526bd19587d654ef43dd13c8c2d4a1d3dd17304fb695237c0784152218ff2ba4f804f0942107b7d60e863c520850b59f94e216832c4027aea770377f125e35f3bba63ff764b66cde248fc748374a6c7cd1a8faeefa02e6cfe352650e06b0c609847c32b942d89d1221ffa2aa6ac4cd12c3b35c4089a89af1e942f3d93a2780ddd32a06ac0725b02eccff56611ee88575195cc7b631703d29c17500795cac3bdbefc05eecfde502ac498363b0f6a184b5b7c6cbb8c00dde4b7cc4ba4e5c2d7302da4a1683d68b3a69c6e76533bcdf1572e2a39a12e3275117c045dbc5c0f5a604c73f41cce776a45b86ba00ef225082f6a184d71624d5f9719d712e60faa1570cd3be94985a034cb1d9ae2e205ad62d86a82f3da26009e902a2da2131443994885a0844354e65e3cddac7e0f4a384c377369a5fdf8654c384fe349a85a25cac637cb1042f0917c8ae451700eee81d03d89f12602b90477135f9c8a90b806ee8140334801a90aa61f95bf2b85119d8d53f06682075163e5f8cddc5f69a71a396be0024b241d94a646af9960b8036768e011a4c09681f90c8a6b32dc2eabafaba379fef59266ae60b858795097fabf402740122ff5110875042ecc3581c3cdea7ca976a97d76f6a5ae67803a70be8658d52a26c2ff334e56f5b6595c2efba71015525c8db8666ab0782978f703a866a54bb5475fd47cb18b861d43d10101c5cdb3945f449f031c4d82a5617e01d0b7a568753c26b074ad4d8f23d7f61a90ba07680eaeb08eac18eb922f9ad0bec4653e43d5e2d427201d8ca26316023b3dba31a3fc1acccb1fcac128c128da2efbfe755892211b4cb158d979bc7a0e552274f6c84a8c8bbbed91160df0f8c01cba34e9ed3c598769d083cb67f566c3fb51aafd25be14837e237c0d346538f45c26d6c5d1c56e313a714ac7cfa116f3f595609316e379c26012f2ba004d7121402fe241517f07c0ffaf2c75077572ff47c6a1a4b7fa74e1700ee108da696cd03c28313be339f7e67461d9f28b817f3fb48368aabb5b23e17377190afffb04ef3b170e25f34e3feb268ca62209af63c8ca8f1187a34c3d96bd1b45a31d1901d605183298951a312229a76dd386a54bf8966949f448dba6ca2460da2685a93eba24633caa2c63d253a9df16931d18411d668d2ee85a876cc2caaede48f227300a249a65044911195688a5ec9684683a151ed005734ad864934e504b72832c01fd554146273e7f573def3f8dcf9c2ffcfa7b5e7f169ede33804fef911fee3d75ac653d75ab8affaab187849927c4facd15edd21a043ef041de2bfe4a36a273a6d5ac7d55f3aa4636026759802307b6a824d38f39dc4590a704eb409678193384f0738f7a3ef91f213713c56bf40e18fb987af15c037291bdeb806f547a8fe0a368115d2e16c4785b325c0b9bf4d38c73b89f34716c379804d38c73a89f32e80f3409b708e7112e7e500e7649b708e7312e7af00ce2936e12c7412e71b00e7549b708e7612e72280739a4d380b9cc4b90de02cb20967be933857039cd329717695384b659f517093195f757f03933c3a90cda940f60415f819d49352553f67ba7dcefcf96af1ac7b0dcde9c043675282edcb602774fa83302ec31d00e0cea29e9b99ac4f098ae3253d19ca96542887820c603625cabd24cac23da837e94ee087076503def8ecc3fb8a0ade4300dec194f0baa728c3e3133169db9c2c19ff0060ceb109e6380761fe1dc09c6b13cc310ec2fc0d8039cf2698631d84f9470073be4d30f31d84f90b0073814d3009c725c9607e07601e62134cc2563919cc2f01cc8536c174b185f3730073914d30c73b08f31f0066b14d30273808f35f00e6624a98c324cc4aefa14a71d47f6cdee48375a4fd9d9da9909f0dba3b9650226f2390af15f333fdf9a26b043cf73a39da012f3db4313bdbe2b74227f4beed54283702ef3b8c12e59084045f2284cd60ea7b8b53bdffdc3b3789eee03a966c177352d864b9eba100f6e1d9f0dbf48a2a1751e6802ce0084a94fb6ab28074bff1438a762715dad9c04b97527be914b11ca64a2e02e09bd2f3f1a10d7261905a1ae12f3871afa06a06bc74593676a81dedfd5f2f032f11e53bbf9a853e79b284be1d205c4e8970a026a167f24940d244df9f0af33120d11f990d4f1db7c779ea63c05357d07f9fc01f5f57c7e087e15d1d477f04405c69d3da0cd239736438a780645d62134ed2495e6438d7009cab6cc2493a05910ce72500676976560ee5657fbac23e54f8de067965993d738e5cecf72c029e589e0d9470d2e11cafad33532e8d5eedbdb4251b253819ca2dc02b57d3f7c7c39ecc155e159ca39b2a963eaf93a26678c7724f44c246420e24f1f600e69a6c7473d48a0d1c6aeadb3e6a5db83aea3ae946538eb593a1bd1aa05d9b8d71a3f4d75d92c1249bfd7e20805961134cc2114d32989300cca36c8249383f890c662180b9ce26988433e7c8608e00302b6d824938a7930ce67e00e67a9b60bab8fc6a0280b9c1269884f393c8600e0630ab6c8249d8b34e06b33780b9d1269884733ac9600e07308fb60926610b880ce61000b39a12660e4b3eb4967a621761f94e36b1eb48d0a754d3981313839dc584b9285957f130e0abb536c1242cdfe9f6930330ebb2d1efce7b3b3789d99d7c13d02c0df492e1db07e0db44fd4575852f71be1c17165b95eef2c8f9ab00e8e66c7dc879cf9a7c700240b8251b080bf73884fb03845bedae0e11f66a925587ce03d5a16dd99a1e131b6283a344e4836b648316c7031f3dc69e19c42e2e5c3d00a03c365ba578aafdc75d9eba3511003dcea60da52638d9d5c1407e79bc4d38c73b89f34fc03b4fb009e7582771de0a706eb70927e95a75329ce7029c27da84739c9338bf06384fb20967a193389f05384fb60927e9e71cc870ce01384fb10927e9f707c870d6009ca7da8493f4eb18643857009ca751b78bd2fb4ad542a11aff4e1661bb680e15d0b100e8e9d9d892af11be8e41b618b50ac0db4109af174b779d6ffca27fc2c932df52413d0d342dcfb0112a617f1219d45301d4336d844a38e1900cea4900ea593642252ce1c9a0ce015077da089570320d19d46900ead93642259ca84006f50000f51c1ba1124ea521833a01403d97126a014b1c438a5f55348dc5be35e91b12ffe5caf80feac63e445a2c6ab46a30853012f2a92281ef91af22e13c7bd66ebab8d1f47ec09fcfb7778d1ce11446b2e1e6f780975e60cfde8aa47b3190f9e9e900e68536c1747143f41d00e64536c1747143f44d00e6c536c174715ec95600f3129b60bab821fa3a00f3529b60bab8217a258079994d305ddc80f21000f3729b60bab821fa4200f30a9b60bab821fa1900e69536c1747163a03301cc5d764f0a7771f3f3e1a0ed7e1525def612afbfc752a568c5fbb22b28370622fb4a26037e7975b6f73f4ebfdbc3c58d81a6029fbc265b0b158a58b9e8f5e41c3689a90fe5f5feeae264f05f02ffdc9dadd9f57345b7f0ba40b77191f75ab508d165a07d00d06b298176489a53d6d0a16b4385ae0940775d632e9a717f338bee00e5f5d95839ccbf62bde7ac1c2e06f86eb0e3ab05fe101cdcd49cd433c9bedd7a3528b56fb4696b5ed2163999a7e6019c37d98433df499c2b00ce9b6dc259e024cee301ce5b28710e60896b37a7b32d8ccfffa8636a7ef27ceff532c6dbe20b0558ffe32595d9a97176a282dc0d1456b7da34af7e82937b2736053e7b9b4d38c73b89f3cfc03b6fb709e7582771de0670de61134ed24f8c93e13c0fe0bcd3269ce39cc4f90dc079974d380b9dc4f93cc079b74d3849a7cf90e19c0b70de6313ce022771d6019cf7da8433df499c2b01cefbb2d513bf48b479f8e7f0a630fe31c725725567d91e30b4510280de6fcfd46d1767248d016da207b23155416d44e9af335e253a42d443aeef5f570efcf2c16cac336e846f6991c19b0ce03d64ef2202c202886c3cfd1680f6617be623153a3921b617c8311fb109a68b7338bb03988fda04d3c5399cfb00988f65a3f81997fde2872c8f7c10e4913fcb06bc097b50d9fd1680f7387d325eabd9bb7391c7a494954a85568bbd6af8f88f7bad9bb600e613f64e2c24cc21c912f9fe20877cd29ecd7b5dac068d045efa941d13698a45feb941247f2e6e3d2d5ab21d9776022f7ddaa6a90aa40b08c8f2d3b900e73336e1cc7712e76680f3599b701638897337c0f95c365a40e9f565e63bb9f0ea5800f3799b60bab8f0ea3800f3059b60bab8f5c41600f3459b60bab8f5c43600f3259b60bab8f5c47a00f3659b60bab8f5441d80f98a4d305d6c62ae03305fb509a68b03bd9500e66b36c17471d8a202c07cdd26982e0e5b1c0560be6153839274b097ac41390ee07cd3269ca4d523329c6500e75b36e1249d5a4886f34c80f3ed6c7c25732cdbd3be92b98bc510be938da557a97bdea7b1e012d6299ed06ab1410ae962d6e72244902f007efa2e25e43e1272a5f710075c2ed7b6c556b4c56703703a2c2158b2356de500ec7bd9d8ce4781559f6f8e1f364e569d72b166ba08e07dbf314738b3b64bf7762a941d01ca0f2851f6132867b31ab178954f61a81023edfcf598b7ae901f279d2a76a95927efcff08ee59e58c21d94c8ea02ad4141f6a13dd3b85d4cf6fd81af7e4489b24b0a94ca52d2f92133a94afdcb01c68fedde6b8eb077946cafb9c301de4fec9de24d38584736b3692f80f6d36c640058b91fcb0008f351b20ca007c0f819f56e880b648b5e2d83992d3c93277bf7caf28ea02cff3c1bfe9757ef8365a241eaef03e2faf6548f028c5f50626ce59dccf56e947abfab4443b3d2c15caf13c0f525753f3cf7af221170a37e25733e15cc7100e6578d591dcfda57b3b653a1bc0614235f6703655e920e0eb77b3b5f035ef9f36c74188fd9e33a8c8f02087f918dbe4cee8dd345edb04e2831c77ba554e497f3d966d1455ceddde355f38dcce575e8e301d85f5282ed04c0aa4dd0787fd17c59e57115e0e700e037f6acc770714edcc100e5b7d958bf36265086bb5cedae05f07e65d386271328ab3f641b9efc17e0fcb54d38c73b89f3f700e77736e11ceb24ce6b01cedfd884738c9338cf02387f6b13ce714ee2fc18e0fc9d4d3849f74420c3f930c0f9bd4d3849372527c3390be0fcbd4d384977d126c37934c0f9079b7092ce2426c3b91ce0fc6336be8d51c0f6a46f63cc00f87eb069aa2be90792e970824ee03fd9849374d11f19ce2a80f3cf36e12c7012e71500e75fa8471af966a49b983f6cc62593e1229bb6da02e48d3f52e21ac2127b2ae327aff893add78bbf792f7b9d10395d00e666150b6a5998cd36930a763e80fdd76c94e3a345a5674fd98dab0548da7f6bcc81dcacb577c892fd8d00e5dfb331fac8477866323e9ac307cdd688d19e6aa7c7784e0689f91ff6ccf275717b93c9c01bff4989b22be3b3d3787152c6d43c746cd20be1f728c992752be093ffb27722aa8b5bec5d01d0fedb9e1d5d0b9cdc35e64300f3279b60ba3842fe1180f91f9b60bab86bcc4b00e67f6d82e9e2ae312f0398ffb309a68bbbc6bc0060b2a616c17471d7981701cc884d305d5ca4f73480d9c426982eee1af31c80d9d426982e362c3f03309bd904d3c57d33bf00309b53c2cc6161179112b689c816912e059d202d28f176d5e04decdd2c141361098ba3e65420af02205b52820cf79d01173fb8743440db8a126d3f0d5abfa398c3dbc00e12a3431b93cef520f45dba4f79833cb6352560b385032eb6e44703946d28519acf7d272cfdc93cb32d48fa6d6dc239de499cff04ded9ce269c639dc4793fc0d9de269c639cc4790dc0d9c1269ce39cc4f93b80732f9b70163a89f37d80b3a34d3849b7d821c3b914e0ec64134ed26e12329ca7009c7bdb8493f46b2d64382b00cece9438f989dab9c8bd96f95e0053179bbc6e02e5601b99d7fd0fe0ec6a13cef14ee2fc03c0d9cd269c639dc47933c0d9dd269c639cc4790ec0d9c3269ce39cc4f929c0d9d3269c854ee27c12e0dcc7269ca39dc4391be0ec65134ed259496438ab01cede36e124fd341819ce2301ce3e94387bb3f8af08700e758c8faa07bf1d105c164838ac46b656631818bcd89712ebe000d6552c71e037fd216242d4640dd14b01eabe94a8d5caa2f16c4fdbd7f0099009e464630283f2d61ae17f3c0b9821e1956be786b8fb959695c03bfb65637c1d2bace2c7d75d9cdc3d11a0ec4f89126e123985950a069bc4422d3fa9bbba80f02b90cc0764239967b6588b702e1d5921f40e403b9012adda34727420b167a1f821833705c01b64f73c4fc2a50764f33c97807c7370365a4c700f6d5d1277bbb2f43af0d621f6cef624f454b28c6003f0d42825da812cf8493bb84580fed38c33e5cb59fb1edb702acc3301e6a1f6ccf9747189c27c90190ccb46d1a53c9627f7b2c0d6027b5e374a5fe0a9c329f1f2fd6b8a04aaf8ea3edf17bec87ba9ca0bc73d7c7b03ef1c918d921f6b7c26ee4347d8574a867334f0c69136e124ed7a26c35902708eb20927e9c008ddf6400067ae4d0323132837b9201b18690d70e6d98473bc9338ff0a8aa2d136e11ceb24ce7b00ce7c9b708e7112e7950067814d38c73989f3d700e7189b70163a89f34d8073ac4d3849b79326c3b918e02cb40927e96e6064388f0138c7d9849374776e329c6b00cef1d45d1efe4852238c259175c83507d5f609d91888e301af169ea8646f908fb8072f027c6f62e3ef08a20a19f7667d14022fdccf16902e4e9fe907404eb20524e1d01a19c85500e4feb68024ec662303b90c803cc0169084d3b9c8406e02200fb40524e1be3364206b00c8c9b68024ac7a9381bc08809c620b48c2d9706420cf0020a7da0292707a0119c8eb00c869b68024dc97930ce4c50064913dd3b05ddc167a2440399d12657766327b68ac93df25e80460ceb009a68bdf25e80260ceb409a68bbb19b6033067d904d3c5a52b1d00ccd936c174b1008a009807d904d3c5ef123401300fb609a68bdf25f889c560ceb109a68bdf25f80f8039d726982e7e97a02b48e6f36c82e9e2a4ff6e00e67cea31c6d8e768674ba015decb7c763a7f8d0c1ed91a9f0e20592fa084d7870517a1ead7f514b36a31efb786ad16c2d6d30e95eda402bb11803d8412ec00165c3ce52ff58b2de1e702f91482e489dfc5127e3148fa0bb3b95d8a0f94af50e3194191b67bcedd2f685c08b02eb267459a8bd5a6a1201b28cef6f2d4f4735842b46439ec09c04b176733f157784a2c61fc8bc1752cb8414ad696a36ea7c27a25c0ba84126b6b1e8077b3942df06e97b2751e09c2657dfda980750149fcd06ccc711bbb074d10bc1dc03b2c1b2da1f44682463bd9ac5c0e92eee136c174b159b916c03cc226982e0eac2d043097da04d3c581b52300cc6536c17471606d3e80b9dc26982e0eac2d00308fb409a68b036b0703982b6c82e9e2c0da3c0073a54d305dec769b0e6096d804d3c51ea28300cc5536edbb415a0491edbb3109e02cb50967be933857039c6536e12c7012e739006779369693f219c29b405f6556367b24c357c462f85653e2e37d7a0bbc137f4b7c2e6a83f7f85a562d062a2ad83631e45b21cedcc3d81c605c4389b12f8b6d41ea0f96adf0d4ad01db38977b7ff32df3f8004589278027f032e6f2b6ce4b00dcb5d918f1c96c5b67173724bd0ea0ada04efec90a236529e9080fdf179404e365a0103a8a12638e06a3d906cf843d4a641b3c1f06f0aeb33703201ce020cb003e0119402525da7e02ed2ce19f0b191fce2d97c5559910a5a6d3ac131130556c54ba4e8a9fe11dcb3db1650e165e6d00e0f5d9c861b1991fd384c7127f04670e550edb1b64011bb2d141022b58aab61aabbfba5da1ea097cb22a1b531421ccd45980bb606702b01b29c1aa4f3515b03ded534d97018447db3353cec521e28300ca6a4a94fd0d502ef2c2e4426ad97cef2fd5e2afa12d96e651154b7d40b1544389b8278b9f31b7517497ac4deab32e0e849c0280d6dab4d9de044a9c649bedfd1b64017536e11cef24ceef01ce4d36e1245d4e48867337c0b9d9269c639cc4792ac0b9c5269ce39cc4f901c0b9d5269c854ee27c00e0dc66134ed219236438a7019cc7d884b3c0499ceb01ce636dc299ef24ce6500e771d9e808c913bffd231f0f5dc4fcde2677fb924a01c2e31b7347aface595649ba3dd001a9527d8b3399a8b33e50f0428b7672b61fbfd4a5cd01699a8b3d0c3f92d15c29f81847d6236468438c2f2fa5d16d46dd73b8a9f01184fcaeea0f09efefdd45e00edc9f68eb713a2251b6fbf14a03d251bf967fe1e37421405084fa544d841205ccdd4ae1f6a51351faf5ccc081756935584ba0274a76563b22cfff24ad627cb92cd43ea0ff09d6ecf2653f94e8e4ede0860eeb009a68bd5f29b00cc336c82e9e202d6eb01cc336d82e9e202d61b00ccb36c82e9e202d68b00cc9d36c1747101ebc500e6d936c17471dec60500e63936c1747101eb8500e6b936c174710b9fbb01ccf36c82e9e2163e4f0198e76763be9bc920ae8b0365ed417ffa05b60125cc3bc980ee0d805e681b50c23a2719d0ce00e84576af6d23f457b23ea57c80f7e26cf4b527e24da7b79db0e949d6d75e0dd05e928d81b6d1f5a57f99181ff2e7b6bbbe45c0e3a0ccbfd4a6a9311328eba364f9691be09597d98473bc9338ff06bcf3729b70927e47830ce7bd00e71536e11ce324ceab00ce2b6dc239ce499cbf053877d984b3d0499cef029c57d98493742f05329c47009c57db84b3c0499c27019cd7d88493b41f940ce75a807337254eb5a97e7ea0b9e9f29ca30d00deb5d9584acde76c1631be39da46b68095cb26a5bf80ba5c082c1102e0b66935cce5f9ee8300e2eb6cda179174a22119ce5cd0ccbcde269ca4e39b64380f01386fb00927e9722b329c5b01ce1b6dc249baf2970ce7f500e74d3655952650761c9355959a019c37db8473bc9338ff024af65b6cc249faad75329c77009cb7da84738c93382f01386fb309e73827717e0b70de6e13ce422771be0270de61134ed26f1990e15c0070de69134ed2cdf7c9706e0638efb20927e95c79329cab00cebb29710e65c1dde4784f5399c7832f5a5576c6560a63d318a7787f558b6938a40b5ddf8f1001bf1654f4efa104de95259f1b1a9fb39281245b58381078eebdb6807471ab8a1e00e47db680245cdd4106f24400f27e5b4012ceff2403990b403e600b48c265856420cf06201fa404991728ddebd0799df86616d3bc27d67bfa5489336e6a96cafae7a8cafaf34159ff5036d681a4dbe54c38984cd6e13c02c07cd82698848b6ac8608e02301fb109a68b4321fb02988fda0493b05a4f063307c07ccc269884152932980300cc9fd90493b07a4f06732080f9b84d30096ba674536f00cc276c82e9e207490703984fda049370932032984300cca76c8249b8491019cc2880f934254cfcb34f33bcdf15ccff2469b127800b76ffb34f87b318d86728c1f61660e7780f948af99f70116ca37d3a8f6c696c4b80f5594aac66dbf6bab8a5d55890f49fcbc62ae3cc76f4747195f17dc04b9fb77b7d3c61ab892c1328069efb0225decea0d0da240a253ec7deff7e769696706fa78258067cf4c56c8cd3c3921f2baec8cb7b329fec0770be64ef9e0d2eee8f3c1e24f797b351e663a34df165be8bfbdb8d025efa4a36aafb9994f984fdf5643e7a3e00fbaaad605dfc18f94e00f6355bc11266056460a702b0afdb0a96b0764a06760c00fb86ad6009479ec8c0e601b06fda0ad6c50ad6be00ec5bb68225ec5d25037b1a00fbb6ad6009c700c8c01e0bc0be632b58177bae0e0360dfb5152c616f2b19d84301d8f728c1aacfac8c658df09915327cc7017cefdbd307e0e2e6d7f300ca0f6c5a674fbac313d940df2cd03bf5a14d3849b72422c3590b707e64134ed20db3c870ee02383fa6c4d9de3b992580f10fa1d508ebabbcffbc005ae720b8ce2097fca4316799043b9d5d1c6a3e1778e1a736c174f1833f3b00cccf6c82e9e280c85900e6e736c174f1833fdb01cc2f6c82e9e2077f4e14305b360f089f91207c9a28757945a594c5b6fd1bc56632be48cbdf18b0d43b9f23dad9b56ca58763a9f7cf2c06967bff74d723626fc7e96c0bdb28ae72796542f67aef2ed7ac86e5f17dfcbee40ed15a3a4454b4b3a678cc6bbd6716b27211fa56b688f9db1acef77eab798175024954eca8bfc0bb56276a173c840d9e266b59b5b0387edbc368a495e0e47fe29adbc50146a5aeeab3d7b3650bafc2b3b9446852ed3dd34c84e357fea2a25ea3ced4d48fd9a27fa24668c59bdb45a292e8d3df2424950b0bd4668dd114b5a368847359e23d5d5aff41d93aef3d1efd91482719e3dcdab982548927a5441c8beb75ca1dec3d16291472783fcaa8fa1e945172e1de7a79a6aea796c9e33bb9b4af78a446f4a9bcb2c13c3595457ee2e2efaf16f1502ea4ce4e69696afb70af6f9724567287f0b8d893edff9ac7bb8c76e1a6dd236dbdbff81790cbea1340b5f737576a4d7913d6fcff01bbe390736d8d0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/1eda265cca426974d8012caf1241a005.asset.meta b/Assets/SerializedUdonPrograms/1eda265cca426974d8012caf1241a005.asset.meta new file mode 100644 index 0000000..2b516cf --- /dev/null +++ b/Assets/SerializedUdonPrograms/1eda265cca426974d8012caf1241a005.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f4443c3defe0cef48bff5c507ed1cd82 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/1f7e9fb643472ef4d83f2ad49fe34b18.asset b/Assets/SerializedUdonPrograms/1f7e9fb643472ef4d83f2ad49fe34b18.asset index f99c387..b342b19 100644 --- a/Assets/SerializedUdonPrograms/1f7e9fb643472ef4d83f2ad49fe34b18.asset +++ b/Assets/SerializedUdonPrograms/1f7e9fb643472ef4d83f2ad49fe34b18.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5be9521b47109e15080921409ce28aed248e21c1b002e2dc892d202624c4a6b8feb82810687148094324e122af9037ca1be471f2333f52e574f7cea2d1eeccae56d2088b582a7677ae9eeeaf8fe9d9111193c1c77808973db6c556d83cdb657976ce5ec1d30adccfe06b979cfa4d5684fb4bb8e6a0ed21bb1730123fd3c6185cd7a15462651879c98ee17e4aeddbcc82e775186b41096b4fe0cf825e46270cda65abec397bc6d2c64800893d1a54e27506ca65c4e1bacc7e87568b98c2494c6a4ac3651b5a4ad476064c3bfd5eb07d12eb0cda8e614c911580e611518cff03578364a2db00bfa7e0af0bfe868432defb78fd302ff7b2ebe1ac5b7876fa1afc0fc78c086540c2f8db453b29d070ea127ceca88b768fd03721d4e1bd838f49f372b432e7f5980ea10eef113e664c28238f7ff9f028e3c5a1db25a91be4f5e375d28cfbd09cb0e5bce6d7a1d32f94b1df24c76315ef6fdebcf9376a9055fe0076926317cc44c18d8f59edeee38c0c761cc238c29999a669cb60a217404062bdbbe41b65b6c416a5d63b6e2405be57e89a831ea7441427734df1a7670a64ae005f4b70bd12d4af91e7a2f39d42cb3cdb803b8e3a640be04c2f5c54f660da02b8afc576e07a41f40e816d6fcf2091d04ddd63b680a61d45cea0c601f402ca05e2709baeaf89538bb85f87ba32c5b45710d596e17e45b379652fc2b36cce1d0e999c47793051d5db21cb51d32a4883dc9b64bfef3472131aa1f038c5ddb0d3a408f8874713ef30b4830c06cb754e63c10eab55758bcca4f565cb83607819bd12caed3b08ef7d1f6450dd6992a0a261fc44abc55a62262e17c65480587ea022bd1963d443c19ffd68b433834cbaa13764d0c7b072a785d063db3951c941dff0f023a8b36ef83dd867b05b8ce01bf30817cc820ac28804c24c8c67165eaeba5d5c614f05e50e997290aab1dd42e53c07d97fe56b4778d5606a35e70241ae990469c69bb204cdafd24ba74c2f719e057a5872ab25a1564b544538d920e12e99be29373dd4aa6f27c1dc864ce22768cb417f8b562bacdf048a39981be96569864a525a3dc2df127a6bb6843eb284fb42badc28672a1b89c9104fb4dac3b6610cf62904aca3725c713372b796b587b04d29bc2c88071582719933a0cd0ed4e20c7d6a67e8961146d50caae475134fa98927647aa79deed15be569ce4b86f0de3654b3b70d93453ca8c3dbfcb853d94b8f4cad581c51a5506eb546d56a4dca88e38ca3b518e3b09a70af8aeb7413b8ee53111f6b02f17e15f17109712324f1940aef8906f11e50713d29e13a1e92eb415564996a426419924516b2cbd6ae2865dad563bff02bca7b0c5ff3b84c63e33a40543bba2a3864e1a94875f3ec00be98be21797c16a7adec5bb0a5be19e481ed0e532d75fee0a842d7b0cc6e50b57765783d6a10af970cdf561fb00d6611a765f68b0f761e13bda336d111951cf76472645df855e6b4f93c07ee6d2e4bf0dd012e7103e5a765b5f6c596ea0d5918f94655f2bd2f936f3fa49e6ca9d7483b626ba901fb6dc0f243e09256e1f2810c97a70ddaef1ab7df66797b1849c754927ea89254e451dc708a36be4e2f4b7f8341398a1465ae39d558bf9666d9fab84ad2fbcdd0e93ce7d43e373be70bd12a7f4d8cbc62f9293c79e3bab8a170b7d9b4f2a1249d5049fa914cd21f1b90340b4b6e8ee4c3d64be0135f99db526ec115cb97dcdf754a3ca992f8814ce2c735c5e92cf09027dbb58f011a8fd3416b500cbe868149e1f7d4b3086337090d2c959849b9758655b61f41676338fb1978137acc0e007074bd69f5a730cdd42765279e2ca1de439320296cbc70fc099dac392fe265d205cba43e208a71891c5a80346d346e9ba433a855e7303662d27e67b64e6b0ae602cf70bb3ae436143ed3b4093ca39f4800017ce571c01dc3a2c5141512384bd00bd23922e09c2934e188184dcb0e24459ef6e1071ddd45dcbdb236eb28b2d6ed8dd72bfa290e5d017b588bf4f26e2fa14deddbc6f927a295cf282ca5126ae5213283a176f67f1e05331805f1974c5d434ed0c8a055cce9f4ec24e9cbd698983a1d808fb9e66ae46cb0bbcad3fb6a11a41e6fa773b4a80ddbbc4ed87a386c17ae7d56461f68c3ba404b0aa09937636b0b6d085b42802dd30a5babde8b69b5b5982ed02202680b3a418b73d06c02177ae18aea82ab5f806b51275c090e57f5bb008d6e99d00559a700d9522ba259def5d241aba5a574c1d62dc0f6a94ed8621cb6d7fcdd8c46b0b4d9585400eb512bc03ad10f9636cb8a09607dd60a87f4a6174b6d98cac605d83ed7091ba6176750b8f2bc3e6d3f5b1b1440fbe2666cad1d77002901b62f75c2d62dc086ffca72d5a679191300fbaa150b804580b527587d02585feb04ab9783754caf5eaa0f13da71b36408c07da3133879f6df8e99598700d9b7ad8864e2f193c6ed9236e7ec1100fbaed580b563341b10007bdc0ac0ecf4a2a8db25b501d6cb6ecd094c0613a527aceac0439d3edb871e035c4eacfb9959d49ee7a7f8950310937e5788dba330a783fe34834f27b2a2282efd149aa69f669cb8c8246de4f425e9a315937e86799be55f66f67f07d307cd344d66bc0b9ab7895b900a1429432f529fe87f8750fcb8683f0000 serializedProgramBytesString: - serializedSignature: cb72978190f58015651fb1514f92866bf48a63cc48f2e87f5e51f8fc9442a9717e67e1408259919ba856f43098a0b3263e55c9add0a545e8c9495236c092ca05 + serializedSignature: a13b10965522f94e1473a76dc3fe77809fd422bc6cbb702f57ab05aa7d3f09a04f3b9517111ddef9b8ef05d2a961152423b751e964c86e685cffc32365b0ba0c programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/2359d1e3705d32a41b9a1101c54a3616.asset b/Assets/SerializedUdonPrograms/2359d1e3705d32a41b9a1101c54a3616.asset new file mode 100644 index 0000000..a51f7f7 --- /dev/null +++ b/Assets/SerializedUdonPrograms/2359d1e3705d32a41b9a1101c54a3616.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 2359d1e3705d32a41b9a1101c54a3616 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cc5f5f8e7dc7bef55eee78224cbb26cc0806dc945b8c848b231d8c696556c61d91292656c30bd99de7baf21842424402aa492842440484212920009c469940412204008fc776667b4eff6e6eddddeea9d66fcffc91f6bb5eded7bdf79d35ba73ce6fcc46639bfd6b17256cc72d95a56c31ad92ee7af62e7b8d3f9e79ea9eb6b58b373dce6fcae72eecd623929dee43fd362239cdfa5ce590bdbedbcd9caaa9d63bdb85fc16a9dbf4b9d776b9d337eb5cef95feb3c15ebe2bcb49695b032b69a0d8f0d4d21629d78a9455e8b71bb623d9cdf8bd93ee76ead508a7f244fdc1aeefcaa70eeb4887b3b1da5d5731bd82661d64ee75eb5f34e336b70646e15127b543aa862c22671182c8f43e47190f3bfa7fcbbb3fcbb87fc1b3edf551e87a6f9fc30f05e4ff037277457c0fbc3e5f19fceff6ece9f278373feee9bf27c842bafd3f60059a3e471b43c8e913277a4a17f77791c9bc2de2019e380ac7498f590c71c791c2ff56dc8f0fb135d46b1db803c7e7c1be89303bedd13dce7c709116c57e1f88e2f1cdf71c3b1d34d32fc0ecaeb93e4718a3c4e96b29d6706df27af4d95c79129f49ae6bec7e633cf679d6f766e92e771799c2e8f33e4f1df52d79de03caa2e2a4c67cae3bfe4377669aeabe7f9fd46793e4b1e0ff38557ae7c4ed99497a63ee9f89fd2e95df98d53c0b9c3b1cb9600592adcdff385fb7bf2ddab5c8e5dbee6b307fa9f4e6ebe94d79c811deffbec78dfd5a56bdcf75c2a1d94fcd9f2f81f29b7059c73b9d785b4ad8b7cef31795ec052a76d83d3b837d795d343b12e72bfd36d887bbddb0296e8cb8529f45461fb812f6c3f90721ba45c65ff3cf73ca6388f0572f8fbbb7d723ff4c9fd50ca556984f2f1547aaa787fa43c1e2d8f47b1b6783c49b13e421e158b8f58621af0913c1eeebd3becaa90dc82c2e8185f588f94c7ffa690a9de5f288f3dd37c5e3db32882ce8be5b1579adfec258fc511bed9dbf5851e2a6f52be5094426689cbb7c76ea08323a7e77e79be441e97cae33279fcc4e7079fa4e107a974592e7561200c1c5d7a0d90e7a5f278ac4f97153e9d5adb51a78fa5cc3de09c1fff27af9f0aceb9ae6bdceff47a4a5e5f298fab7c3aaf26d4b9cc7daf6f1fe01be9bc17e45f6b5cfb7ae7bbb27b57caebc7f9745bece9dda304bcabf448273e54b847fe27642cceb90e8a6da5efb9bde09cfffa147cef53f7dd3eeade70709dbfbb0f9cf363799abaae63c93ecb75e8e4bd2ffee6df96e97f1f159ec7b3e4b8a77b971f41da24fee6f25e92efad67c9f9987a8edb761a38e7ffd7a669db091afd9ceff65d18f0ee892c31fd59e8f943f7e7e5b50d529fce2c216ec5948c71de3b6d65fb8dee797fa5cb26f94e17c0459613faa9fcf42479dccaf4f9ec16c041c5c72aefdb635e94d736077cab463e53edb37b8d27a7b7ac8bf557e9987a672af22cbf562b8ff5f2a838ecf09e9dfcaebca6f246592e8875658969f336709d1fbbc9fba78373fe5c9d277be8d3f29a92a174d585a72aab2bdb756940909f35bacf8ed828cf9b5cb6fd9ff0c9ddc482fdf61457ce54551e6a76e50ce812524e8b2b679a2a03b5bae703943eca07559ea0d2a7ee2c312d57e91128dfc6ba836bfc5995cf4e4d53b7208ea7b97ab695ef65f832f58da380ec41520f552e8265be7de01e3f5765bf3d3efb827439431efba6b06730788e1fcf8c607fd03de5e3e748db7ab1843a8f3877fc64d0980059e732ad9f0e5675d0f3dcfb0365b8b3f3814dfc1b2aff83be7481bcd707d8add243c8ee6c79ad9f772da6f2f50b7de17386effe454086eefe01a083eefec5f2fa99aeee83e5f3ec129f2d7b58a2ae7d59423ac32e4db635d6d7f7edb34284e565f2ddfebeb0ec2fc3e56f01b22ed787e5900fe4f915beb0bcd2179603346129f3f5d840106e93e535d88ea8c27730e0a0f286ab91b054f7af017275f7af053ae8ee5f971896435539ee7a242ca1fe302c6f48b63536c8f7edb3d308cb9be4f14679d4957b6f96c7a952ee3969c8bd451eeb02e40ef7c93d370db9aaadf0d600b9b723fa66f23de5ebb20d26368425fa3a3f77fc76d80b01b2ee605a5f1faef2c93b59a2afdfc5127d5db56943ffb85bde1be685bf60c1af0d67c9be3e02f8c95079ef1ef00cf45575ff5e205777ff3ea083eefefd2cc1d7472c94d71f607a5f87fa435fff4cb2adb1e1be6fab3c36282c1ff471567c47b2c47ace48377c46f8cb3f4d2c386ffcac2b7f9a4ac31e92f24649f9e781737e1cedfbee68f7bb2365fbd728d507d2475e9fe55e1fa9fa183ec7b4e5ad9195bee71e6689e5a92ff8f87fd1e72baa4f01daf279700fda368e2596491e91d7c783b01a07aee9ca5ca9b87e491ebfece3a7fa4bce07e7fcb9c73cfde385f2daa3f27886776fe0725ff8c232c0e37a5f11bac27687b0652465f35752d81c264dca618969528eeb07a383da67bf219fb92ce019e51f4fcae337a5fc092cb1fe3241deff963c9fe8bb3f51debfd5633f2c07e8a164f3772e48c3feefc8e377e5f1dbf23b935842bd4b9c637944a6e5d84cef6d913aa972c3a9e0dc0987b1aa6eac7c71730afff89e3c7e5f1eaba4bc293e06aabf2aa83d2bd5b702ec8a4d63896d08d3e47dd946145379ad2c23c7a6fb9e9f2e9fff813c8ffb9e9fe97b5ef585fc509ecf487c9efd08c8e1e74f7bb6c594bd3f06d754dfda4f3c3ee31f96f766257e9bfd9425d6ef5479eb30f9dc45e03dc840dd57e5fcdc44b9b13c797e3138e7c77c9fdc5c1fab7c9fdcd93e7d9f91c79fc9e3739e8d336e03ef009eecd94499813e2ddb286205f29d4bc0b9e3d3e383caffeadd39f25828655c0ace1d193939aebe3985b8acd85c1fbf39e03a3f16c9fb9781732e3bc8c61fcb67e7f96c9b27df7d2a8d77653f4f4c959f2e05e75cc6c7ae6d130604c8526d3c3ff785a1f2592eef484db8aabea567e5f9115287cbc1b9a3c38407e573bf607adf9eef7bff8ac4f727aa32c52fe5f1059f6e0b58625bd8afe5f137b84f32d5eea77407fd626dfafdcaa7df513ebd8f96dfbd12e8a1aef3e3312c318f3a46beff5b79bed0777fa1bcafeb6b0f8a2303e5fb8ba4bcabc0791777588168fb592f9fff9d3caa74fdf7f2f9e2448e31d9569d76de26f5602f493957fbf45b2caf5f835cbf3640b6641f2b6189795b89b4f1a0abdf64d51ff2b23c2e60c1f9ce1f7cf29748f9d781737e5fd726fb4779fc53a28c84f8a3da6b976a7c50fa1e7b0ddc5365e157c07bfcfc55604faaf639dd3539de27b6ccc76f99cb6fca64f7fb53545f96e277720a7ef2b9d872f09cfa5629b826eb0fb163bd6be2bebac68f2ba46ed7837347b7a90ffae4ae94cfdd00becd8fabe4f51bc1397f2f479eaf6689638994bc3540a7d5f29baacde4cfbe6f94312fcef27a912affbe0ceef7047aaa6b4a06ac73ee00477e5d8e079ab225f19b29c340975f1dc712f37fd987172bf7857fb96bef3419fed354f8ab724c73f0b7955cf617795ec112cb56b29f8ffd15c8e3f76fc6656abf53e9b3a732f1bb427eaa32852a2b3c149e275379d0dfe5f7d7c9efdd02cef911f6bbbd2eaf1d0f7c62ad3cae97efab36a61c79fd04f0ec09e0597e3c9125d6c14e74c36ec6169f6cf5de06f9fc6de09c7feb0d79be51de576d592a8e82fe89d846708d1f4f92efdc01ce1d1da6d7b8fe33633ef2adcdf2bd3bc139fce61679ff2e70cee5be99f87cac4a3e773738578ca19c7b12e5f8f58a6d05366e95ba3c1aec178a6b5b9df804f9ad5daeed71954e1d4c4f9ef6da73f2a8ecaef671ab96f79fcd40f66b52460d4b2c6fd6b88c66aaf446a5fdafa6f88694c7de92c77f4879b552febde09c1feb5882cfc754bb6d8e3cdfc612d26771eee8356b844fce769f1c9506ab70a997f7eff3bd570fece2f7ef77c36d96aa4bbd06eea7cdb66b4cf4132f67b54efdb889e589ce7c5ee34c7768b67a33f5a06c2eba1bffc57fa689cfee66fb9c576b7523a3d78a71d7bbd91c56a01d193d52f4c7a8af178bdf55ce13f542e803b1a44f7c3de9135cb906e75f2d18d6dde25c5f264685f381ddf5ce9d5cb6d239f2b7b6b0d96c83f32f51ca3ae7b30dacd539ab747e3709795b1cb5939f4c65121f02ee7fa7dc91e98e50dfe95c51409b9cf306a16185f8bd47685a2bb42f75aeed16e3e577b16d6cb173dc2bbe966c7bb3f3b7ee9b9512995e47fd4075ecba3b1c5e055389630dd73e4ff8e2ff854847840847df8dc70ffed3254f8c3cb8242924fe8fa19bc8f00a75a994315b208b255c2b607962cc4a7912c1f036265ba8f76f9777112b0cb4454f8607f768618117c26f5cf5d615fb9e7cab47d744d3e6b03cd18c3e2685694160b9bcb8e8810a6342d7ae5df2b9a27efc311d7e315ca5228bf8dde7eac573e103a09bc8fc12034034c5563aa9da1a9079ae15ca3708d5fcc62c72ce6b44fa98ebbcd3e008dac7ca9c279638ffab1c15b88949a199cf3fdd5d044872769bca282c483ae98244b4405576488cc0265205074a8f362bbc40c91365a81101ae8b7d4b14ae3ac912968a5c4f3c5eb6abf2ead70f76d5874b2f112e997c0d0b99ceba90e995edc8923a77080a97de6d7679e1c27ff40cfb20be9d4a078c60171dc1ded9f66d7eaf5148a9729e0dcf900f5f9ae94f70f400fb214e985a050c61570dc27c8eb0bf462bd6b5a74f2bae1022b99b2e70fa744c569c9973f33e8de13e045d51e71e1898938675edee3a7a62a0db16527aaa8658e154055638f7aa9ce76b4571935f57591997b7487cc1ab5526be114c96f7701ce627aba53a58509d0ceabb5135c388f7d010cfe7fe3a44e306228df34786817864e88945b3a151a3592f4cf2b0a8927b6392874795dc07933c22aae4beba68c39f170d8df4d1c66b58517f2d76deddee18b34794065b9df7750d31c1d16564dad16594882e394cd73c144e232c9af4d3851dbf385aa7a43fe846e141d71f133c26a2e00198b78d8dea6d0375de26ec6820f5b6b5ce35b7196d89b85b2fda5e60ada342862c97c54337f51babc44208ad429b606f1c97b6378e17dec88778506b8c79eb202c51cf6987447db04e384f8f27b0e452f1a7ce4f92f03eb8f02198e613359a97d6760aa5f9502c4a4c8a1a258661922747953c5c17d944dc3e27cb49bbbe9d7d9958faa4d6a9e66f652733b781547db751382fd74835b4963bc73aa105bfae9c3ef85bc1d1720ad35491450ab5449b1d749415bce7b793481ea689e421372079d06913943828168949833e718a8baf9bc5064bc6466029cd744d4af3a22e190b48694662517646d4283b4a279947d9991a5fcde7becabbca7a89bc3ce93b71fc3ba375498348fa4febd0a4c1adfa717975a2ebcb95b79af185894e15aebac371e03dd2712a9d679a9d6fd44a278f9218f0e19a63fd6d0accfdd147875c111d8e4e233a505a854580313a4fe275643ece34a9b596479772a74a58cc368b68788ab8cc29b9a15b2f1ead67a73947d58b95e46fdd717f1babd386573d785127655175302e781c26787644c1e3b1385e10358ee7e824f3d4868f608d5ac29a80a95d1855ed89588a3a5793a27e1c0b97a24ec2841769843fd1299cf0c9585498978e8f0478f5144cf07c5d1ce34f178be6c61ce77fa3f3066fdcaa12b13f4764865e6a90234aeccd22c39e059e6f749e707b8dc3e83915738ac3a33ac5342cdc8ed084dbbb21c32d8e093f52237c79e770c2a76361b74017763c35e1f9062f966c97795b626a9823faef73c4908d56d16c562342ae45846b0e3bdd49eace708ebb9da773443ed020eee58875fa9a455a1b264c6760fa1fa5d3bf17d07f0dd030cc1767eabec8091fad49b76221d3ad593ae1bce0730c430a3e0b5926059fc3306c8b74d878b6b5c429bef0926bab78be4238406d5b59b9a69d32c85c8d5e79a2babc8b7564818cd716f8009716f1b75744e1dff6ba56a314bcf858737fc14bfde80b5e7c147c5ccc37c986f658012b0f4b544b34896a2c4ca29a8fc58525585c589a515c98adf339d18ad2d4a13e87c7a872219bc7bce8057e3ecebeb3bff62f9a790ad3f0acf6d271a6589ba445acc3ea926be18929effdd80a165c75e18b28a18f13cb459cc8a6e658bc28c072ed524daefd58d770b9f61c9dcb8a16b4e60e75d91221211b6e7bacce6d454b5f511a81df9e7a8e17e3205b44a25a23135537e91e2f16316916d966ad739d27bcf0fe4cb100092f2f2d15bc770af2dcbe2a51efc59c7c8570f26cdb89397a219601acd46400a14ad573b128b44a13853e0e19858a30b55747557b1ea6769946edfdddc2a93d1f13be46237c65f770c20fd709e709339f4c13a586780426988fe8482a6ef28aaaaa2754fb6a8a5b455d41d5ff6ac4957dceef06e75ab5109123c6b4aa2efd305a1e89b1add0b01d1092ed020c416544b647e90473f75c9b8ee080eecfa37582073077d9416df98bcf75095ffe3a46f71d8e7dbd06fb5d21b12fc4a2f90951a3f9224cf28951252fc6246f882ab91893bc31aae4122c10376902918f6a0913884b30e1276984578614be148b989b7569d314c6ebc85e21d5ad3e79ed1a55ac4e486976fede23f3dc9a84f611dee6512f2bcd61e2f9324ccf2d3a3ddd29347ce0122f5354893634fec532b623d4579763e8ab34e82f0b89be1413be5523fc6f21851f8bf1aad6f11a91225c6bc41803efea6ce76a188e2b306d6a74daf0532fdcc27c672586b45683f4b65ee190aec28ca8d319c1fbd15c7c4738c8568b06bf2a39fd678fc8c6c3635c8d69b04da7815b0a5505833519160bca30a4db35485f0889740d9622d7474d918fc3d43e599768f60ea77639a6f68ea86a57e824f3524703434a1d7c5588f0a58e4aec3bbbb0ef3466f49db518a9a6a8a4d6e924f3003e4513c00bfb840be0e331e1cd1ae1fb430a5f8f096fd1087f2aa4f01330e1bb35c2c7f40d27fc444c78ab46784d48e11b30e17b34c26f0a297c2326fc548df007430adf8439f9dea84e7e12a6f63e8dda43fa85537b33a6f66951d5dea2919c2706e364738a8e7ff453b8590c7c3590f4866bf2350d75d373527d1f6b52aad2850bcfa1cfd0a914222bdf8a79d3991a6f3a1832125463c2cfd208df18d2556b30e1676b841f0829bc16137e8e46f880fee184d76181796ec4c0dc86093e8f69ca82b38477368a389623766ee3335b77c98de2f8ea02b5a2e3ba4af8bed7e0a43aaef954e91ce9bdcdd2a71b1c6fcf75ae86d17a3ba6f5f93aad79cf2b6fc4f5cacd6e55d2ad86e8c615e6b069b2d43d2d945ef5980f5ca0f181c7423ad8c998d11746f4811dba74568c4bac274d67b171a495a2f19e2f6d50273c6567e851a7c169f24569a7c907449accfbf9e974c5d2ef065d70f3b2f5c50c295bf3650a7a71954395ad77623e7ba9c6670b43a65bbb30e1976984af0f29bc11137eb946f8f9218537e984f3620d5fbf3052b1e6144ced2b356a3f1352ed664cedaba2aadd82a97db546ed2103c2a9bd1b4bdbaed125e8fce9741a457244a46c151914cf62d6307792ae3b56aacab95a2346516d17e76b44d4e42d8b5b4506e0ae38b059347e6c137d89cdce5535ea6a1f7367cce488e298bbfe4a8e480a6ae458bc1de24a8b78aa167c479fe1d4cb8c136651615b375bb120ba561344934306d11e2c88ae8b98fd9c8a09be5e17f67c3443a573d294102e61beb7174b586fc01256bee460f8468b7d985d37e9ece2c1b4a1ada5d4f5df4d218b45a761e17fb32e650919fea763c26fd108ef32309cf0fd5898dc8a85c96d1985c919baeff044eff6749c38a09fef4c4cf01d11059f8579d19d11a3ddd998e0bb220a3e47279887fddd2c796c271710666ce7b99817dea3f1c25983c279e17998f07b35c25786147e3e26fc3e8df0a690c22fc0e2cffd58fc7920a3f87321e6349fd1a5697cfcdf66e71f6f246a10a9b5ca63eb9d5498df691255459e1f86f1b08b302d1ed46931b84d8b7ce737cf7979df943b3a28731d0e603a7c56a7c320a9c31ce77fb5a80cf177f63abf33d7e0624c8387741af40061c1e710f1925198af5d82b9efe734eebb607038f7bd1473df8731f7fd7c46ee7b1996347d419334750e99345d8e11faa286d00721095d81097f44237cc49070c2afc4847f4917b621855f8585ed97b1b07d34a3b0bd1a8b0e8f05254d05ed9c345d8369f17870d234bb1d93a66b311dbe12943415b663d2741da6c15753254dc78bef859bef703de6be5fd3b86f8fa1e1dcf7069d70eebe5fc7dcf71b19b9ef8d1832beaf4d94e2d84d189d273474ae0b49e7668cce93189d6f6544e716cc886f6b8c7833a411b7ea8473a2df8988fe364cebef6ab42e19164eebdb31f4dfc3d07f3f23f47760463ca531e2604823eec484ff4023bccbf070c2efc284ff50233c1e52f8dd18fe1f61f89fce08ff3d9873f23d62d06c6d4e3b676bf7625afc44a78597ad15b463b6761fa6c34f753aa86c6d6e3b666bf7631a3ca3d3a027f3b2b525a2c3ab31644bd50398033fab71e077433af06730077e0e73e09f65e4c00f62463caf31a2614438233e8b09ffb946f83321853f840537dfea284abef0394ceb5f6ab45e30329cd60f63c25fd008af0929fcf318925fe96200ef32086ea74f6ec98dd666efb69b9add4aff052c807ead09a0dd2103e88b98f0df6884df1452f8235892f1229664fc36a324e34b9811bfd3111a15ce882f63c27faf11be3ea4f04775c27933f04be9241901cdc08f6904e789157e3aa68f3e79e5a5f6eda37f59c74bdb47cff7d20aeea38fae2bd647ff38e64b7fd0c5b690bef4159d70de95fb4716b12bf7ab98e457a34afe1a963fbc968eff07249a5fd708ce132b4fd57588ff4759132dd8f3ff94b6e71f149e3f23c0f3a3addca60f896f60cef3e7a8cef34dcc79fe12d1799ec0a2e95f35d1f4edd1e1a2e99398d67c43b2a422115f146091a80ed58a6929ba094d39a2b8941372ecd9b7303dfeaed383afa9124efeb731f9af470c9def60a1f3862674b68f09173adfc5b47e130b1d1e47b6cb22a20a8fdab6f53e321d19f83dccc8b73446368c0d67e4f73123ffa13392c74035cec02dcf260ed30c63d653d897ffa9fb32af93bba36af2da1604cf6b5b14a7cc8910352cec688e1f601abcadd360b8568395e2afdd620501b7d49fd9bcb11f62babca3d365749aba24af181d46a71fe974e28ef72f8de35d362e9ce33d8d19fcef8869c28f31c1ef4614fc134cf07b1105ff14e3fcbe86f3c321393f8309ff8f4678d3f870c29fc5907c1011c9733ac13cf5f9301dc10195a19fe904f37ae8476d377cf5d0ffb24ceaa1cf63d83fd6605f3e211cf69f6346fc0f33e2938c8cf80566c4a71a230e8434e2979870be689b5ff86313c3097f01734c5e7a494a4ef964bb72069789a911656c9590c7d97491e1ed92bf136721e4883337fb992596bf6816b9be9be4b6b006b140460b83d3c0dd46253ea1b9c9573250dfe18d496e165bd7969ce788c4bc26e4d0be5f612c3ae958f0455fe05a736e29d3cb60bd29d9a70a0d1b181c34bb5d644139292514384f879db9f16bcc613a6b1ca64b4887f90d16a5bac49028d5359649947a1133a29bc6887848237e8b8574775d48f361eafa26d20db27195cf7ce1b50b7789a2a0308d07de9d2e86a3bacdaa9e5f27c68046e119aa0935f1de6ee157bb35b168abd0b01134c0bab21b65ed348c7ffd0e0b9a1e9aa02999142e687e8f054d4f5dd0f03ab17e87853006bda4f9669e589039bb9bfab9d3a5b89cf093207bc5f83a5e897898887d3e0ea259a3770cdb832f5807acc1e2652cd4fae8424de815227c5ec1a4f7d549e737dca4372f83851bfe8039773f8d732f9f1cceb9ff8809efaf117e5f48e1af629406c4a295315fc3040f8c28f84f188e411a1c0742e238a813ce67360f4e47ebfdb8e03f633886e8bc913b7b5e282a7fc1e40fd5c9e78b2926f7f0ad12c9bb5a1dc6bb13ae17edaf9826c3749a70093ca50beb057fc3be325cf7955e8c69670d85f9e2df75e9bd58f2feb82ca6f7e9ec06ac4feb47c47876980866149ad68f1469fdd024cb0237cd45c8bdae0b2b7e3a2a96bca9efb1abcee97edb98673b25054d573c68dec09c61b4ce19f8b2947cf887db41dde0fca5f65aaf0fe9ea6f62df1da3fb6e7ff4bbbb640d24ccb7dfd2b9e3b86cbb63b1283b3667e08e631d44537c887211671c873863d0d73167fc878e9bd807627316b9c16d8b2bc4928ef5ce9532512257dbc787673a3e167695ed1c41765292e599ea8751ffa72ea6f072f88458c4bea9b731c913a34a7e07933c29aae47fe924f352c9e458f4cd41fe8d254a532216bcdec5784c8dcae33d4cf2b4a892dfc724c7a34afe0f26797a54c91f6092674495fc2126796654c91fe924735f9a15d1e9fe8ba97c5854953fd649e66583dc74540ed854e87f98ca795155fe04a39c1f91f2a798cab3a3aacc6288e482a8926398e439512577c224174695dc592799fbdcdc883ed70553b928aaca5d7592b92bcd8be873dd30c1f3230aee8e093e3ca2e01e3ac1bcb3f88874041fc405f7d409e6e58123dba13cd00b738d05515da3b74e327ffea87478047423f6c1401f1d11745fcc358e89e81afd30c10b230aee8f85dea2a8a137000bbdc511436f20167ac511436f1006b92422e4c198e02511050fc1426f69d4d01b8a85deb288a1370c0bbde511436f3806b93422e41198e063230a1e8985de8aa8a1374a23392fc7398df1b5e4b23f68b63d36140e6e9a58994e584cc3898dc6c26255d4b018a393cc17d95b9d8eca0770c16331bf2c8be897e330c16b220a1e8fc5fde322c6fd1c2cf4caa386de048c454544161331c19511054fc204af8d28783206795d54c85330958f8fa8f2544cf0fa8882a76115ad132256b4e298c62746d4783aa6f186881acfc034de1851e39998c69b226a3c0b137c5244c1876128364744918b69bc25a2c67958cdb0aa1d6a86f9188ead1171ccc6705447c451802571355193b83918e8da76005d88a95d1755edb998dadbda41ed224ceded51d59e8749ae8f2a793e06e4e476007238a6f68ea86a1f81496e882af9482c92ef8c18c91760827745147c1426b831a2e0a331c14d11051f83093e25a2e08598e0e688821761fed612d5df16ebaab6135887556dbd819ec5a28fba29b062eb3d9d7ed576b72e2cb4bdedad31def1c87701a7d416eb832fc69c694f44672ac19ce9d4a8ceb404ab9bef8d58375f8ab1d81791c5328cc56951592cc7543e3da2caa558ad7f7fc45affb198e033220a5e81413e332ae49518e4b322425e85954bce6e8772c96a8cc739517994613cce8dc8630d16b3cf8b18b38fc3ea1ee747ac7b9463902f880ab902837c6144c895188b8b22b258abcbe4273aa731be6589098b9e6c905976fbb5601f483b9bbf5864f3792cccc22799e88b65f4eb74c1ce43e79274829d6b8f083e5e27989f5e1a4b1ec8ab7ec20ce45d8fa59297b5432a790226fcf276107e22963a5c113575d8a093cc9fbf329dd00ce8e9dba813cc07b45f958ee091b89b6cc2045f1d51f04918e46ba242deac93cce77d5c9b8eca01f33eb6602a5f1755e52a2c325edf4e9171abee03dc9f6e4887c92bb8e06a0cf68d1161d760b06f8a0abb5697e1f161d331be036a478c1a571946b811e237a79d89dd2232b19149d6a5a3039631d56129f0aded90026fc302ffb6a881bf1d53fbf67650bb1e137e473b083f192b59de19d34c502911a7e58eb354b012b6a26ded93d58caf3e73aa08e01d32e873c5549652e77e9973679770697e455f7ed18d2fe04f43d7e28edfc8dc09d3e19619df81597997ceca0bdbac5ceb94a478a47323e84ef177a95c8fb6594ccd76236869db934bda961b4a5cd0a059f2a860eea68bc5ac55d8c5e526d2f324f0e7c3e98149aa647c12cc36713791298cac7edeeb1c3961273c3560a4efc6fc097ed1b5698ef38e4babd14914373bbed12cc2dcb5b6522ef1e4d7d67b17bfde5efeb413b3f21e9d9547fbac84cc5d3b97327703c22a8dd7278610bc131457e05b612cdb855976afceb263d20abf456259837aa62606450f39ef4e18db1a31dbeed3d956e4b36d95089dedd2327eb6b7c32c69c22cb95f67c965594ecfbc77f802160d8ed47d8ccf11f6d6c56a09e1e5901d6e05cf4b5a453103a67abc80d57e69db2918f50774d417a5153756327785751352b566ccbecfe8ec5b49e855fcea29e233dc2ab7385c2f3e5dcf4e6355684a9249a8b660563fa8b3faa840ab714dcb852dee422eae8d2a37e657ab25a1e478917968eec6ecfaacceae134297ec2ac49dc4b29d4e827b6d4d5b3ad0ece407bcaa13a524984938b7623c1ed2f15891953c9b3a37df83d9fc39ac9c12ce07940ff31513aa852018ce613d228c65a762963dacb3ec08c4b2b5227e36c8b2895bd556b596753216d72485064d1d652f66d1e775162d254c7d55a8bacb0e6c65ee52aaed67e93eccd22fe82c5dc0b056725d4a916801dcb18033592e42b959d486aa9d1c775f3b5a751a66d517d3a913247e179610d68a5068769ee5f1705b40ee9728a3fd2c3b1db3ec119d65c52953cef46a05781a1a5467cd34a5dc8fd9f8259d8dcb509fe425deadce43ca56772d196f0f99e0b4442fb3bd73c233305bbfacb3b596b8f6b05bec04c229b9b58375c2dbebdb529ef6a90f67c2e94c8cd3a33a4e6b3bac96154c283a87b3300e8fe9382c0e19374c88116763163eaeb3b034a4856a63447d887484bde760f67e45676f39a167b76450d6680f02e76204beda5e6510376d5b044a20f4569d8759f535ac8522ac554bc513c921e44f73d2971bc6bef331fbbeaeb3efc80825c7dd2237e28b18d5c97a1e6e5565d2b3616cba00b3e91be1c2cc9ff6c0ad2a52791e65ee712166df3731fbc2d4195d5b97c972847797f77804970edbabe4781166df133afb26b3e056c14ad648a2e5014ccb2783dbf6c284424546a140e97b1763567f4b6735be1155655b573d4c23bc85c1797ed8aa2d8b65d6be7f09a6f7b7757a1f9eb2c6552afa0679eb638358167a09db29166a4baeff068540e635c84b317bbe83952083e308af0daf11a5aa164dbe9a4e5f022f8dd4b5a3859761167e379d3ab2be6fa054f81e6f07af926d54c9e195cdfe81cb311bbf87b550a5d30e908e9599a518995b7a0566e9f775962e4f2b34fd3d3d6e3c54767764b85e8959fb94cedaf529c395b6659cbacdfc2a8cc60fc295c792cb96cadf77cae532abc55b78b992a69df96accbe1f862b43ebd7c74facd5a9216ec961e3ad07df1ef9fc35984d3fd2d9342f239b54ae5fcddc695778b8254fd10a63cbb5982d4f63a96c785b5419ad4c3c59e1a4488d819e986c517b84da7598a53fc6fa70f4da258f95efa8badcf598453fc15a0cc3a61dfabc329df4239b69cc0d18879fea38e0db60e2f573b520767ba5fa37621a3fa3d3786aca3cd0eb19ad1557f9c8a1f6a91bdc8469fa6cb8b42ed9d313356f12e56baf859922bedc8cd9f25c3aa305b112e512c34a93b76056fe0c1b79102e9d735b3f92ef268f26516bf3e3e1992c6591e8bbe2b945189b6fc56c7e5e67f3145fc87adfa48e4db7617afe5ca767814f4f983ef9755e26754eb7fc9e699be8ed9805bfd059b091d1b5e5ab56b8a0de3ce881e9c63cf54e182a7760547e994e6fbcfa629854c5b30c8b71ed939adc8959f682ceb2133b38bcc38473a631e02e8cc8afd26997085bd68a5e33cd3cecefc62cfd753aa955b1085537047783f666d70b8a58610afb7429197f2b8c05f76016fc26fd31b4fc9b616226b40fbbde5e21742f66df8b583b7b7089c6db5ac3afa3dada048f5fd8b61c417132b3dcfe3ecceadf66d2beeb866a85f3f056e6d6ddaa5947cf1db81fb3f077e9c43c3de1ccca09a96b38dd9d7f31b187e11221c56d2d6f14eff052611eef848ae5b7e50cb96d297e6e42eee05de7dfdfe984068f13956d693b9fd8172ce1f70e9c6e9d98fb334d6ee5e56688b13ae69f38582ce437c8f446796bae20e48e31e66d66b94e29b05ebca5a640a6b24297cbe5827c0e5a97daa64dc894c698d82110ca7248f382ed2167e94b3c54c7c850ed94c72bc3b199197a536a2d5ee65febacf721dd4e935eecd0e9ee0a582d5b0f627c058bcde2336b4465171fc09ff2cbfe9591fd5f3e4c0850e5c194e2d6822440276ea470377710653373bb165e726476efda299f87c82b94d8f8a4df1251ee6b72c0b963d3549e83016cb102e1c19887f00f9408f9dec6aa5abb5c74af7301dedeba656c8715c01ee9e101fb2325b021ccdd1c2f9f79fd0b36831bd0db03f72a25b8411a705c20df479d77a2b78aab355640dbc23c68af517b5b62f45ceafcae97e313d5281dd7eb6c0017efe381fb1325b861a23cda9276b66003bceb40a67090125e6f1055cb125a606cc034668c87e9cf94987a024cded40a1b101d18e621fa0b25a26e02518b55695497be1e9cbf52c2e12b0995b595f95547973b6ca55c24fabcbb7c9748e6d7c8a6201b003e0622e0df2801f6001190abc9fbfe6c00f4fc400fd0dfa953a832d1d8ee2d5d6247096b3ff0a1d7b3e5436a868c0d806e1bec017a8312105f484d154197b0bdc2ead6b672131f3e58234a55e5c2c36a84bf35381fb40122ff5110dfa484c8171584f078130f9ff95bdbb646668de585d321a0d1e72d4a947d659aa6fc6d9fcc31d78afaa30da86e0269db3fe80ba86a5d1ad55e6e03a2a7277a88fe99ad0a36af2fc22e665567b4a9f0fa41770fdcdbd4156c080ece305c24aadcd0e72c297480b6b07728e1f501850e6fc29c3b4dd706508f8102ecbfa89ba75789e8b7c3b7fe4b89f378b3f8920dc0b674f280fd3bbb0d868983666a2c4bcf1a40bbfebbf4cdd33caf2c119fb6b92cf674570fda7bd4deb64474aab58a8f7b0b30790b72b538c55c3e54df06700701b8f729c1f503d1d4d64e103e7243c1fa0f7d979bdb3bde28c4d85d555a00bcec03ea06c672075a314b7f2d431b001e1085dcee5d7dc2fd432a331fe0128e3a3e14a73f73abfd4de2ea6e99ff260ccd99e63c629ce61fc2a135f18c9b80e229d3b978daddc2f1d05d7af10cc787c4d32a75c623b6e9c4430cfa89874a02e3699765e2a132f07846e9493c54153b1eaa001b4f6bf84a3cd4988d78e89aad4e67bc973e9ed427160fac0ec6b5bd1c716dbb751ce9928c07f4e8c6914e82788a86b67846dd5771a44dca1b2baa1fe3993fd9b9f5d1ffe7c338f3f930ceff72087cbb04fee396213ea62e4370cf7147edf2743d780d9fd94e4eeed3614c920e893b8fa8b2824e9b9e09a5897ee91898519f2f185af13f9370165889b308e0fcc4249c73acc47922c0f96936706e438142f537b3b9ac880e671f2a9c9f631e4ed6c9209c8556e2bc1ee08c9984739e9538ff0870763209679195387f0470763609e76c2b7196019c5d4cc239c74a9cad0067579370165889732bc0d98d12e75089b35a562bfdf3aee19cde7c3a905da940be0e4076a7043996790d13e93612f1e79bc5b3f615e51701b03d28c18e67b0d528fd56539be18e07707b52c21dc682ab9d501ccfe9c95076a742f91140d98b12657f89b2c807d46d4fe40f91c11b4505ef5100af7736e0cdcf3e3c32cf7b16c0eb43096f788a3c3c311293d6cdc960fe0dc0ec6b12cc7916c27c03c0ec6712cc420b61fe05c0ec6f12ccb916c2fc2b8039c024980516c27c05c01c68124cc2ae0b32987f063007990493b0564e06f3f700e6609360da58c37919c01c6212ccf916c27c13c01c4a09738684d9c0aa45adbb81e9b77c0db70530616230980af971a053781825f25e02f9763106c81d93b44dc0b3af7da80ff0d2e11dd93e94b8a025a1f7eda742590dbc6f0425ca694911be4a085bcad4ae478b9dffdc3bf78816cc5616b41625296cb2d47506803d321b7e9b5e566523ca312009184589729c26094877ed7a52b407c8d0022f1dddb15eea8a72177e2644d93b4684f225e0a563a8512e12a3d71be5985dbe4aabdae7978fee552399ddf1e1f6e5f95d00cab19428d54486d9ceff9df2e355a2a8c4afdadc227f3640382e1b08e71d7208bf06108ea744389879ddbeeae8df82d5d6eeddaf008839d9182c93fe9877c2be21329c43407e3dc1249ca4638fc8701e01704e340927e9c838329c3500e7244a9c03daf2edfc43a817fd5590564e366728cce116a21c0c3c714a3650c2b1702b9d42f83239c5aece79696f36727032947b80574ea56f7387ad959bd90e816eb198b4b7438a5aea1c6b1d11492b2e5830caa82f80392d1b4d19bbc544e096b6d67535a3511d750d71b329bb80c9d0de0cd0c6b3d13794eeb06cc2f4936c50f69100e67493601276b491c19c0f60ce300926e1b01932980500e64c9360120ee822831907306799049370a82119cc7900e66126c1b47156d05c0033d7249884c366c8604e0430f34c8249d8cf4306730480996f124cc2a1866430a70198b34d8249580322833909c02ca08499c392db8fc20dde22ccdfc9066fcd066d4a733a72f0a1bfb1983015256b2a9e0a7cb5d0249884f93b19cc3c00736e36dadd796be71ea6f6accd52472f19be61005f1125be91005ff298382ecc9b2c6d7347c6d300e8bc6c0c3ec83fe4061f9c0510cecf06c2a2430ee1e100e1e1661787085b35c98a4395a0387444b686c7785d6cb09788bc738dacd3e24ce0a3479a334ad8c6f9944700940bb2958ba75ac7d6e6a15b4500e85126ad7334d7caa68e0700cea34dc2493a49950ce7e500e73126e19c6725ce1701ce8526e12cb212e71300e7229370922ef54c867339c0b9d8249ca46b1393e16c04388b4dc249ba723619ce0d00670975c933bdfd24ca856a7c470bc292e7722aa0b301d025d9588b6b8eaffe9e85660fb2297d3b00bca594f046b374674b264e9d261c8e70900aeab1a0b163998950096bec64504b01d4e52642251cd24506753c805a6a2254c21c9e0cea3000f55813a1120e5720833a10405d612254c2ae6032a87d00d4952642251cac4006b50780ba8a12ea1c96dc4a9f386fa39879fb50b98624ee6a95b8f59db76558a528d1aae66ac240c8a50a04ee702a10569b333bcec61566fb027f2e33771612e12031b20ebd9f012f5d63ce0a75a4b3ddc9fc741f80799c49306d5c09f94200b3dc249836ae84bc1bc0ac3009a68d3df7a702989526c1b47125e46d00e65a9360dab812f27600739d49306d5cc66f158079bc49306d5c09793580b9de249836ae847c1180798249306d5c7ae5008079a2d9c36e6d5c42fa6380770325debe12afbb8a4d83a8c5bbb2eb29975e21db1e8f01701bb3bd8a6cfacd1e362ebd3214b4276dcad6d0db55a2457387afc5b3c479ad597cd1e6a1b72381af9e4409b45f60246fa143d78b0a5d27806e73478ea8b77fa6fb6080724b36a615f29d570f9d69856b00be2a33962d777b8f9a84c7bafd42a49ef90a15daad20c3d96ad2ba9da49549324f8d019cd526e12cb0126701c0596312ce3956e25c0d70d652e29cc49227762d617b191fbad0cad4d0da32e7f51ac6ab91e502acbbe47e43764a9c03a9200f0299559d4943c2e75ab9b0da8300e7369370926e3c4a86f30a8073bb4938e75989f3770067bd49388bacc4f91d80f364937092f6ad93e12c0538779884738e95384f01381b4cc2596025ce8d00e7ce6cb57556885265ab237911e39b3cad9353be6ac494af5aabdb3a3701a0bbcc19d769e37085aea0a6d4988d7e4cb50e983b0971aba86aaa876c5f3ea80af865533626211e4a5b992c00f04e31778431610644d6d9763740db9c0dbf9c977dbf246b387e0cc06bc906bcc3b30f8fccf39e03f076d3672fdb356b2a55384caa59b554a84ecc70e74d6ff6157b7a0398ade60e47206c3026f3d301a018b4c79c45d56c1c4d3c1d78e9a966f461eab65e26444bb64ec31ae0a57b4dea25221d7648969ee6009cfb4cc2596025ce6500e769d9a84aa6572b2fb0727cf14a00f3749360da38beb80cc0dc6f124c1b6758160398679804d3c619964b01cc334d8269e30ccb6300ccb34c8269e30ccb8500e6d926c1b4b14e741480798e49306decb2381ac03cd7249836ceb03c12c03ccf249836ceb05c00609e6f528592b4db82ac42d90be0bcc0249ca4c523329cf300ce0b4dc2493a48860ce74900e745d9d86e672e3bd4b6dbb99579080f64639876eaa6e2e4e92e8b1ca1cd621e30e9c4978b634490d7013fbd9812f25809b9c1798803ae95e3e0bdd1ef89c9001cd84508966cfcfb7c00f6926ccc5a5760d53e7089fd9c41c5291b4ba65301de4b3bb24b2e6b8b51eea7427910a4b39751a29c2050963a0f950b607c4ef01ef9bae7ad9be52e478bc512943be4fda5ceb1d6114bb850005959a027007cb93903126d8cf6ff0628afa0443924054a6529e980869154b9fe26907a5e69f6922a84ada3644baacc0278af3277b02261671dd9509cdf8004e0ea6c240058beef250084e9285902f07780f11aea457fd6c81abd1ad05d2a3c93477bfbf2f20100dcb5d9f0bffc361fac11155277ceb0ed4b597c1560bc8eba6199032b111feed0dd8d5650c19c03605e9f8df225dc6edc5fcdb4bbcde9c700e50dd968b62b3ce49aedea00c21bb3d1a2c4bd7189c8a35b85127c2be76a11c9cbd8a9a2a1ae99b588025213b3795e5b21007b9339a3906d1c58b30ca0bc391bb3360a7db5209bf3ee6600ef1693e6ffcea5ac8b93cdffbd13e0bcd5249c8556e23c1fe0bccd249cf3acc4f94b80f3769370165989f3cb00e71d26e1245d678e0c6709c079a7493849174623c3b913e0bccb249ca403bec8709e0070de9d8de54ef9aec387ce72a78b01be7b4c1a9144ba5d13dd12d0a053e25e937092cecd20c3b908e0bccf249c73acc4b90de0bc9f12670f21a056ec63d9ccdc215ef68d2eea06d2c60728714d63613610e5cd70ad4224dc289453cbc2a083622ad8b900f667b2d128cc5b349731de4ac9db32b78966e166abdb2e9b00c207cd190263e3dcdf4120a5fc2c25caa18c77ddd6ca9e47779016d68146b8b103591ada03f8e443e68ed2b071c1941b00dacf99b3ffd51c2ba754ff10c07cd8249836f6fcbc00607ede2498364ea97e0ac0fc8249306d9c52fd0300f38b26c1b4714af57701cc474c8269e394eaef03985f3209a68d23d89f0430bf6c124c1ba7547f0bc07cd4249836562c7f05603e66124c1b1795fa2d80f9b8d9332c08eb4464332c724123c857cc58467291c3a846d4dc8b85a826dad6ce56aaa9018b01daaf52b72f0535d5b9aa1789b1738420c9f607ae0220bf463faf3211a4db50ccdb9076b163459b7c53600fbb8ddb89760669ecd7cd19106b634dfe3080f21b268dfc984b99fb9379e61701ce6f9a84b3d04a9cb7019c4f9884b3c84a9ccf039c4f9a8493744a2a19cee301ce6f998493b4e64486f35c80f3db26e1245ddd980c672dc0f91d4a9cfc44cdf4b5afc7b23fc0f45d93bc6e2e65fb3b99d7dd05707ecf249c8556e2bc04e0fcbe4938e75989f3d700e75326e12cb212e7e300e70f4cc239db4a9c4b00ce1f9a8493b42b980ce72e80f34726e1245dac9c0ce78900e7d39438c7b0c4750d39875651a0f5af66e81f014fd896493640f6bf00eb8f29b14ef561ddca92071da63f3c91103559517f036897ff49368673cf6787da1a1fdf04defad36c74bf296f6d11fec79380a5125eadb6d7c8de7563e700ef7cc69c91f2368ea8eb0e503e6bee006fc2fe77b234f41190003c978d055466fb7cd5e66d6f8f02f07e66f6d810c2e18a646343a68368ff7c360afc7039345d14b73bafff09f0d69f53e29ceccbeb1b189cfba61f74b34cbe9cb555b8a751611e05bcf617e60c66b071ecdd0ae0b1bfcce6d2fb3ce2d7f8e6cc1d7a55d5b701de174c9af94edadc4786b31388f8bf32092769fb14dd2a8900e7af4dc249da7a4a86b31ce0fc8d49ada77329a71f92b59e3e0cd2ce174dc2596825ce9b00cedf9a84739e9538ff0470fece249c4556e2fc29c0f97b9370922e604586f33880f325937092ce8427c3791ac0f9b2493849d70323c3590d70be928dc5fe6677449b28599dfd3580ef0fd96850e61fae139ea864ef928fd8072f06e0fdb1e3a76ca94cc6beceb79ea0b6f3aa29206decc5fc17f0c8d74c0149d8994106722ef0c83f990292b021830c641e0079d0149084bdea6420d703907f360524e19c4b3290ab00c8bf980292b0e84d06b20e80fcab292009477590813c0180fc9b2920097b20c940d603907f370524e19a346420b70390af9b331acec625d13e611eca37a86bd8def2cf5cd116c1619b582f96bf66df90ad7e00de9bd9d8d4ce1b4aa81ff852295a7a38da3a216c276d45f10015d80600f62d4ab093987f74913b60cb1b47cc05aa2de8f1a86fe39a7371908afe239b73365ca07c08174f084ab49993bd0bfc1c0fb0fed39c215b362ee4370524036f9bb19e972e8525444b96c22e015efa4e36237fbda3c43ab01b11149eb5f19afba9b06e0658ff958d0e8bb987506fcf4320baff3b1b4b4da657ac9f6de5ba9d87014f7cd72498368e1dce0730df3309a68d3b174c0230df3709a68d3b174c0130ff63124c1bd73b9c00607e60124c1be7594e04303f3409a68dcd746301cc8f4c8269e3ce05e300ccff9a04d3c656a4e100e6c726c1b4b1c1630480f93f93a6a990664164d354fa039c9f9884b3c04a9c87039c9f9a8493746b27329c5b004ebe6a39f9d860dedd7be86c04be9079f86294f88630be8469955c668a8bdae53cbedd79bc513411c31d2fedc3d81560ec4489713cf3d64570fb7e363beab638ea540b1ebc6b7811e353a4797b7b95238047f01a66f306b7e5006e674ab8d1d69a212cc493f5bddf0ed076a18efe419991b294b4c362648c08e346900975a5c498a3c1186ed519c21625b255676602bcddcc4d00083b38c812809f8304a03b25da0902ed72e19fe58cf74ed6caecaa468852a343768800e07e5cedfced8a5fea1c6b1db13516665ebd00e01ed94861b1810cc5c2638917961c4795c2be0530f6a4c4a81a4860014b9556bdf2abdd05aaa100662f4a98633530532701f6822d06607b538255cb9fce6187daf2a73702847d2811861bf8656317f15280b22f25ca8921505638dfe44276b332e72f55e36fa1cd9672a8b2a57f00c4fd28118f648903c09a4473c9f6409fb5b123643928eaf7a7041a7e4d241bb771bc03f8e7009370165a89f33c8073a04938e75989f31700e7209370165989f34b00e760937092f6c993e13c06e01c6212ce3956e2ac0738879a84b3c04a9ceb01ce61d9a86ae68bdfee91f7385530b73e6f6f6d7d3340389c12616ff169b5857d856c32e6cd1f64d0c653411b08a08dc846fd3cbd914a368e3aee07ea3a23b31585dd3a3a17b45746df2cb4161da442f875e08da3b2d1bace11d6b64dc056b76d6f74fb36c0383abb1d6c87fade03c301da31e6f65ddab8d9d85500edd86ca49f05875c6bfb6480705c3646cff17535b33e7a8e6c60c238806f7c367a25d3ebac28b0b2bbe25e0033c7249836962def0330279804d3c6196dd70198134d8269e38cb67b00cc4926c1b47146db3500e6649360da38a3ed5a00738a49306decc8bd18c09c6a124c1b67b45d0d604e3309a68d6b7adc0f60c64d8269e39a1e9f0730a79b3df29d30e29355303b8326e219d968df9cdde6af35a259ce1d9e65fb2cb76f002f9d6952dfe35cca1494aceff10b00e72c9370165a89f31680f3309370165989f3198033d7249ca43384c870ae0338f34cc239c74a9ca7039cf926e1242dcc93e1ac01386753e2544b4516f84aa136f7fe9c0ce01564638200ef3d2f617cca7f936f2bef0a5154af173d43898b01b4583dc66802403c271bd11d8becc96bd1d8b83f3a03f5a14293709236d291e19c0c70ce350927e91057329c2b00ce2293f2f6b9943d456479fb6741da39cf249c8556e2bc12e09c6f12ce7956e2fc03c079b849388bacc4f93d80f3089370922eda47867325c079a4493849579923c3d902702e300927e91810329c27019c4751e29ccefcd3a679e5b3c6e1c147142b3bbd61dc58f7dc22e7af66d1a3443a0af9961811f05a50323d9a12b8da340febf34c4c59c940926d9a97033cf7185340dab88bf5100072a129206ddcc5fa1c00729129206ddcc57a2600b9d81490366ebe7c1900594c0932df97bbb7a2535cf09946c5ce133b1d7d1ac51937354b79fdc55479fd5a90d79764637c53ba8d7a84fd4b644d7aff03bebcc424988483c5c8607e0a602e3509a68d8dcdff043097990493b0584f06f31d0073b94930090b526430df05304b4d824958bc2783f91e8079ac4930094ba66430df0730579804d3c69d37fe0360ae340926e1e45732981f0098ab4c824938f9950ce68700e66a4a98f8fac64b9ddff5ccdd7ba392350ac1f6af6fbc16802da304ebee77bdd279a05a0c0983f3393a6c8d78b2591edd01d635e6aca964e354ed6ea0f1e33873975b21ccefc9965bf90cf0d272b3a77a11d69ac8128169c0732b28f10e0699d61e9129f161b7ee4651599ae8b59f0ae216e0a395d9e8a787393f965d91e7f7643e3916e05c9b8dd43439caa7939edab878556f10ddd76523cfc77a9b12f37c1bd76d9801bcf4f86c14f733c9f309dbebc97cf4520076bda9606ddc75eb0200f60453c1dab89fe1d100ec89a682252c9d9281cd076037980a96b0e7890cec2c0076a3a9606d2c608d026037990a96b075950cec7e00f62453c112f6019081dd0bc06e3615ac8d2d579500ec1653c112b6b69281ad0060ab28c1aae583e7b20e583e980cdf1900df5673da006c5cd4ed5880b2daa499cca48bbe9075f48d06ad533526e1245da5840c6709c059db91bdfbfec63e1b5716ad1030bb77f5095f9a24bc58780ef79d6ae6ad2692cb96313ed0db5d6fa4da395f29f2eadd6c8b13593738ffc285c026e79fee7a4c2c19b3c429d53589ab5c5e8d90bdd3b9cb35736ad57cdb893aee10dda543c4455acd370bdaed3cc37749e65fdfc72a98bb5a4a99f35b8d2d681548e262ed3e6f6b6afe05be59f576d62c2c4e5c4d251eeb2138b97b9870bb38c0b8d455ed6b522a73897ac7e62aa149b3f34c17f11d373ec6637dc199ea3e2a15659c16a115bee9110fbc586ca00c2faeeb2a616795f36c953856b649cc8b3b8fc58a9c5f6e492ab7ad0c952b87eeef9467ea7a6a993cb482a56de34112d3c7d18676f3b35416b95183bf5f27863ad40aa9a5292d4d6d1feeb37d0242258fcfa63ca4eddfcec35d06bb70d3e1c28dd73a21ef0ae73bd2343b7f73a54a6b3bb1aeff0f050bdc790b1e0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/2359d1e3705d32a41b9a1101c54a3616.asset.meta b/Assets/SerializedUdonPrograms/2359d1e3705d32a41b9a1101c54a3616.asset.meta new file mode 100644 index 0000000..c1b6069 --- /dev/null +++ b/Assets/SerializedUdonPrograms/2359d1e3705d32a41b9a1101c54a3616.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bdca7d43d50c6814e98fe7f8ee3be56d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/24cdf75976d66ae4998dcfaf1dfcb0ce.asset b/Assets/SerializedUdonPrograms/24cdf75976d66ae4998dcfaf1dfcb0ce.asset new file mode 100644 index 0000000..248b884 --- /dev/null +++ b/Assets/SerializedUdonPrograms/24cdf75976d66ae4998dcfaf1dfcb0ce.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 24cdf75976d66ae4998dcfaf1dfcb0ce + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d097c55c5f5f8e70161dff79db03fd684900450402061095b3009b800424802440289094150dc37dcf77da9b656adb5562db6aead6db5d556ad6d6d6b5badb6dad6aaadb65ab5aeff3b736772cfbb6fce7befbe9bf332c3ff173ee4e66e67ce7ce7cc7e666ebb1ce6fc44a63abfd6b13256c4a6b3b5ac9ad5b35dce5f45ce71a7f3cf3d53d7d7b046e7b8cdf95de9dc9bcab293bcc97f2646063bbf4b9cb326b6db79b3995539c75a71bf9cd5387f9738efd63867fcea56e77f8df354a483f3d25a56cc4ad96a36283220898875e2a526792dc2e315e9ecfc5ec4f639776b84523c901c716b90f3abdcb9d324eeed749456cfad671b45b4763af7aa9c771a599d23738b90d8f99e294cfcc1dc433f79ec2f8f7d9dff5de4dfede5df9de5dff0f92c791c90e2f303c17b5dc0df9cd0ad09de1f248fff74fe7774feac01e7fcdd77e4f960575ebbed09640d95c761f2385ccadc9a82fe9de4714492f826923112c84a85596779cc96c75152df6d69863fc66514b909c8e3c77f017db241d85dc07d7e1c1d22ee2a1ddff5a5e3bb6e3ab6bb4ea6df1bf2fa58791c2f8fe3a46ce7997eb7cb6b13e4714812bd26baefb1d9ccb35927ccf60df23c2a8f93e471b23cfe5beaba1d9c87d545a5e914797c4f8651abb9ae9ee7f78f97e753e5719a2fbda6cbe776c8f39c14f549c5fe944eff9161d48173876387cd0964a9747fdf97eeefcb772f73397678c8171f687f3ab9b952dece34e2f1812f1e1fb8ba64457dcf25d341c99f218fff95727781732ef7aa8071eb20df3b28cff358f2b2ad5f0af70a5c399d15eb42379c8efdddeb1de7b2585bce4fa2a74adb0f7d69fba1945b27e5aaf8cf72cf238af3082087bf5fef93fb914fee4752ae2a23948d27d353e5fbc3e571be3cce632df9786c7779ed3079542c3e66b165c0c7f238c77b77e06501b9254aa3237c693d441eff9744a67a7f813c7649f179f5ccc2103a2f92c7ae2986d9551e8b4284d9cdb585ceaa9c54b650984466b1cbb7f36ea08323a7cb7e79be581e97c8e35279fccc67079fa56007c97459267561200d1c5dbaf696e725f2b8dca7cb0a9f4e0dacf574fa44ca3c019cf3e3a7f27a2338e7baae71c3e9faa4bcbe521e57f9745e4da873a9fb5e0f9587bba5f85e22fb5ae3c6af5bae2bbb5b85bc7ea44fb7459ede9d8bc1bb4a8f54f243b93c7ee163fc85d441b1adf03dd704cef9f17310dee7eebb1c494c99fab97c773738e7c7b214755dc7e26d36e2fea9de177ff3b065f9df5da5e7512c3eefe9dee5bfbe04fa7c29e5bd2ccf8f66f1f5987a8ec7ad199cf3e3da14e3768c463f27dc1e0b12bc7b2c8b2d7f1678f6d0e905796dbd8c5b84c5e42d71ceff8ff4de6969936c70cf7b295d36ca77da0156ed5cfd7aaafaf43879dcc2f4f5ec66c041e5c74a2fece12fc96b9b1284552d9fa9f2c57b8d27a79bec8bf552e5987a6702f22cbfa6ea78d50e561c7678cf8e53658b2a83659b38d29ec596cddbc0757eec20efef01e7fcb9ad9eec014fcb6baa3da974d5a5a76adfa9b8ebca80447656ef3e3b78833c6f70d9f67acc2777234b6cb727b87226a8b64aa32ba7778780729a5c391355f9d9ec9ef756fa281b94fcd8899263168b2dcbf7caeb1d81dd64816bfcd9137d7c93e99688e349ae9e2dedfb93e551d5e5f380ecbe520fd5f7866dbe7de01e3f573cf7f8e297489753e4b14792f8f403cff1e3a921e29fe85e47793c43c64df523ebc0b963277d8727907526d3da693fd5073dcbbddf47a63b3b1bc48987a1daa0d096ce91f7605b51e54b585f9e2eaf75f7ae45d4bd737de9b3d777ff3c204377ff00d04177ff7c797d9fab7b3ff93cbbc017973d2c56d76e2ca69c6117c6c735d2cd17f64901d2f222f96e0f5f5af690e9f266025917ebd3b2bfeacf5ce24bcb4b7d69d9539396b25e8ff402e9364e5eebad49df3e80434f79ef72242dd5fd2b805cddfd2b810ebafb57c5a6e500d586ba1a494ba83f4ccb6be2e31ae9ed0b5b953f89d2f23a79bc561e75eddeebe5718294bb3f05b937c8e3d6047207f9e49e92825c3556786302b93723faa6139eb275390613e9cb626d9d9f3b763bf0c504b26e615a5b1fa4c60dbec2626dfd56166bebfd58bcaddf26eff5f7d25fb0e0d7e018b8b2f581c04e54dcbe0a9e81b6aaee7f0dc8d5ddbf1de8a0bbff751663eb8317c8eb7730bdad43fda1addf191f57f10c0c5bd5e389d2f22e1f67c5578df7348273277d06fbdb3f0d2c71ddf80d57fe44d5dfba5bca1b2ce59f0acef971882fdc216eb843e4f8d7503507d25d5e9fea5e1fa2e618bec9b4edad2115bee7ee61b1eda97b7dfcbfedb395619ebdb5c4e55be01e8c9b9ab3506d92fbe475302f11190eaee9da5cc9b8de2f8f0ff8f80d95f24e03e7fcb983407f5947b1efc8e329debd3ecb7ce90bea76f6a0de5684aeb04f1cb48da4e2fcdd24710e52268d64b165d248d70e86251a9f7d443e73518267947d3c2e8f8f4af96ade670f38e7f7bf2fcfb37df7b3e5fd1b3df603d5b547806cfecee929c4ff0979fca13cfe4086339ac5f4bbc4395647a4db8e4df7de66a9d318169be7c7b8e93042f58d952d6e4a621f3f92c71fcb63a59437d6c7606c020613520c2b41bc22e359ec18829a1f93634411d54e3a439e4ff43d3f513eff943c9fe07b7e92eff949f2f99fc8f368ecf3eca7400e3f7fda8b5b44b6a5d833e09ae2fe338fcfa87be4bdc9b161b39fb3d8fe9deac34d91cf9d09de830cd4fdb3e4f9545f9ca6c9f3b3c1393f4ef7c955fd9ca77cf795dc1c9fbecfcae32fe4f1792f8e933e00ef009eecb95899096d5a8e5144d4dcd739e0dcb1e95189daffea5d395715c99332ce05e78e8cec6c57dfec7c5c5664a68fdf0c709d1ff3e5fdf3c039977d20817ecfc8670b7c712b90ef3e99c2bb721c3032cb17b75952c6676edc46f74e204b8df1fcd29786ca66b93c90b75bd2750e484f7e3e5bea70009c3b3a8cbe4b3ef72ba6b7ed42dffbe7c7be3f46cd09fe5a1e5ff4e976188b1d0bfbad3cfe0eb749a6c6fd94ee877bcfb4e8f71b9f7e6a2e4de93d57867b01d0435de7c7792cb68e9a27dfffbd3c9fefbbafe6e87473ed89f2481f79fc030b5ec64a9d2247b0d83ae30897fdd8b9ae1e63d578e61fe5716e92b05ef1c95f20e55f08cef97ddd58e79fe4f1cfb13262ec528d832ed4a4ad4c53f69a776fb26a63be0cdee3e7af82f8241bf7d25d93be0791453e7e8b5c7ee3f6cbb8a97454fc8e4fc24f3e172902cfa9b08ac1b5bfc86b8bbd6b9162708d1f9748dd2e02e71ddcaa3946ee52f9dcc5206c7e5c26af5f02cef97bd9f2bc84c5fae828792b804e256e98e365bdc75ef785b19c7979c1e135fe091f87e540d652704dc9807db91de0c8af5f2ad3e0a1d83093a681ae1e58c962eb5569b39155bef45f2519cbf49fe0f799694c1cb692cb64ff3db29ac5b659d45cc65f813c7e3f51db53174ea92f3ea5b1e10af9c9eaeabfc9e3ddc1793255b6ff5d867fa40cef7270ce8f6b806c59e747c0fc5d44e6ef48b97c5f8da165cbeb15e0d90af02c3fae65b17d9bb56eda4d7ac8275bbdb74e3e7f2538e761fd439e1f25ef2b1f1095478f063a1c05aef1e331f29dabc1b9a343f431d77e265d868475ac7cef1a700ec35c2fef5f0bce79dc8a639f8f6c90cf5d07ce156328e77a9f1c9f5e1130b71191f377a25f9cc8d6d5f8e41470cec3aa75e3ce9bcf304ec9e469af3d2f8f6fc9308ef37153f388cfa521fb352963138b6dc76d72194dbe553ea7cafe57938421e5b1b7e5518eb144364bf93780737eac6431362fcea1ed6f6131e5b33877f49ad2e09353e59353e54b976a79ff46df7baa6df0aabc7f939b6e53d4dcc86be07eca6cb32262ce7219ab71fa9d0d2c874fc68a9e59aa2ecfeacde4cece5c7447fe8bff4c14c1ee66fb9c576b741ec76b853ff36e3693e5693d8e8788f91b157a91f85de93c512b84de1c890be2e1b820b87275cebf1ae02edde45c5f2abcadb9c374ad73673a5be91cf95b9bd90cb6def9172b659d136c1d6b76ce2a9cdf0d42de6647edf827934589bb56fbdf297364ba9edf3b9d2b0a6883735e27342c17bff7084d6b84f625ceb5ddc20f7d17dbc61639c7bd22b4f8b8373a7febc2ac90c8f43aea1dc0b1ebae9bb94aa66227365cfb1c618bff97226d91221c7d479e3ff84f871c31a37f415c4afc1f43b790e11dd512296386401689b996c772841f42591cc1e0718c8fa1debe5dde852c3f615cf46478720f1331f05278fe2f2fffecb667e79d97151bb5992c470c4f0f4f12b54460b9bca898b10a1285acac0eb95c513ffe880ebf70ad28cf207ef7b95af15cf004e8282abfd80410431e154ea9b606549e6b85f27542357f64ca9d279a1d714af52572c591bb90c77dd60dd25d125429aee89e8a4bf35cae6027916cf19572b2a86309d74e977062fca7a24df20db68c2971d2756e8985977439a2a53538818163618926587bd90e535970d2dbf78e3cd87fd4fcc71e2cdd5571f95b6f64e9d3a7ab489f7442c552a8bd2e85ba663a6b25af4b12a54fb7967879e9c37ff40cbb23369e4c078c60071dc16e99b6717eaf5e48e1793e3843eef033c55f3ce901f6448c30b90a18c22c0dc25c8eb097462b96d5c5a715570891dc519738dddba6e24ecfb8f9ccc2201f822cd4b8fb24ac77839a76271d3de166b899949eea4f963b1d8715cebd4ae7f91ad138e5d7d738122b9db0b9bc852204af0f1afb4662b27c9e619a9fac966a3f41751ce81d87d50c23de59433c97db6b7f8d198832ce9f19fae099a10b96cd0684cd665d31c903c34aee86491e145672774cf2e0b0927be8b28df01edc90916ce30dc3a8bf1639ef6e7722b347f4ad790b52376c9338bb0c4939bb0c15d9259be9069382698465939ebab4e31787e994f427dd503ce97a6182878714dc1bb3b61161adad0f56648c6c8522a32f267c542b08efa713ce8b926c16dfa0fbd2f98913de1d17de1fd37cb446f34b17b50ba4f9002c35c7844dcd8198e4b161250fd2954ac2decfc870a9a41f505e2afba8a54e83e478e68e04aa70ebc52820d7488d289639c7ad420b7e9d6b917c203a71f9368e697a7922db2ed696646d158bf18e36ed44393b4194b3dc8568ad73dd1d005f2c52a05684345dab0d0f017b5eb15825b6056916a99d85f445278ad0cd6283d51783b19226aa29695ed21563094a9a2158969d1436cb0ed549e65976b2c65673b9adf2b9a4aea21a8a0b67221ece305dd120ea9593dab468707b2d5cde5631c7e3ca5bcdf8ce36270a53dde118f01e693815ce338d4e1835d2c8c31406dc4f6f84bf3bccdc1f7d769826b2c3fc14b20365acb00c305c6749bc7bc74b8fb861499e5dca9cde4c11db24b2e109e232a7e4a66ead78b4969de41cd5744d9cbd75c2ed6d844e1bde6ae6ae8c495b59fd70c12331c1b921058fc2f2f88cb0793c5b27999736dc7d326c0b6b34a6f6ccb06a8fc14ad47c4d89fa592458893a16135ea011fe58bb60c2c7e98473632d4cc5461258f5784cf02c5d1ee34f178991b26ce77fbdf3061f97a914b93f5b54865e6990ede4f55ae72f5e614f05cfd73b4fb8d3a341f49c8019c5ecb04631114bb7399a74fb2060ba4531e18769842f6b1f4cf8242ced0ed7a51dcff4bcdee0cd92edb26e8b2d0db3c54475b6f04d6816233ed522e59a44ba66b3939d12e914e7b8db793a5bd40375e25eb6d8e8ad5194b541d27432a6ff5c9dfe5d81fe6b808641429c82955bf334e5562460b93555279c377ce633a4e1c31d6a83377ca661d816e8b0f16a6bb1d37ce12dd766f17cb930809a96b672752b5590d3357ae588bef82ed6960d32de5be09e1c4de26faf89c2c3f66607c334bc16b2f88697fad137bcb82b70542c36c884f658032b072b548b34856a2448a19a8be585622c2f2c4e2b2fccd0d99c18a26968539bc373549990cd735ef8063f77da6eefeffd8b31a4fc142cabb5749c22368c68121b79bae49a7861ca07eeb7801d3b5df8224be8f3c452912732a939962ff2b05a7b99a6d63e9815acd69ea933593136d7d8a6265b2c2464c26c4b74662bc6100b5348fcd6d4739470f86b12856ab52c54dda27b94d8a1a251549b35ce755ef0c2fb53c46e13bcbdb444f0de29c8d70ba7956da209aa37f2e5c2c8331d4fccd0f3b10a6085a60208d4aa2ec0b2d04a4d16fa2c60162ac4d45e1556ed5998daab356aefef184cedd998f0528df0959d82099fa313ce0b66be52214c0ff1304c305f8611d7dce41d55d54fa8f2f514b788be82eaff558b2bfb9cdf75ceb52a21225b386faad9e8205a1e8eb12dd3b0ed1d90ed5c0c417948b6f37482b97956a42238c1ccdd7c9d60defe5acb90f6175fac11bcfd750486fd280df65b03625f8065f3a3c366f38598e463c24a5e84493e36ace4224cf2fab0928b759279226ed0242277c80892888b31e11b35c22b020a5f8265cce37465d378c6f769f41aa96ef7c91bd7a8645b859446e7ef3db2cead8e191fe1631eb5b2d31c249f2fc5f4dca4d3d35d2bc27d6e789ba2528ca1f1104bd98e40a12ec3d06fd6a0bf2820fa124c78a546f89b01852fc7786dd1f11a9c245dab85ab86777586733508c7159836553a6df8a9976e41c2598921add620bda96b30a4abb048d4e822c1876d5c7c8739c8568b01bf4ab9ce658fa8c683635c8d69b055a7012fd956b6340cd6a4d92c28c5906ed3207d3120d2355889bc3d6c897c24a676adaed0ec164ced324cede3c3aa5dae93cc5b1d3b18d2eae0cb6b83b73a2ab0707662e1ec4a2b9cb5ba7038a9fab0a4d66109dca049e005dd8325f05198f01334c2f707147e3426bc5123fcc980c28fc1843769840fef114cf8b198f0dd1ae1d50185afc784376b845f1750f8064cf81e8df0bb020adf8819f989618dfc384cedbd1ab5fbf70ca6f6264ced7d61d5deac919c231cd132b9bac4effd14cc019fbbc0a4e6f7ca37ebd4ad2c49163e36a454a94b175e43efd7a914a02adf8259d3291a6b7a236026a8c2849faa11be21a0a95663c24fd3083f1050780d26fc748df0debd8209df8a25e6192113731b2698ef3916d7169c2aacb35ee4b16cf1e92fbe847397fcd2185f465f2326ae2b85ed7b034e6ae29aaf09ce96d6db286dbaceb1f6e9ced5205a6fc7b43e4ba7359f79e583b85ebbd9ed4abadd109d5f61b6d318715bdd1303e9558bd9c0d91a1b3818d0c08ec7227d4e481bd8a1119c239c1e6b49cb59cc8fb4420cdef335a85b85a5ec0cec759ab84c3e37e532f93c5126f3797e3a5db1f2bb4e97dcbc6d7d80216d6bbe355b57ae72a0b6f54e5d38dc662fd0d86c7ec0726b1726fc428df0a3030aafc7845fa4117e7640e10d3ae1bc59c337e00ad5ac390153fb128ddacf0654bb1153fbd2b06a37616a5fa651bb7fef606aefc6cab6cb75053a7f3a9541916c91299b4505c5ab9835cc5d5feafa4a553a57ab8517d57671be46644d3eb2b8455400eed2fa4d62f0639b984b6c74ae2aafab7dcc5d78942d9a63ee4623d9a228a896be783bc49526f1540d08475fe1d4ca8a1356514147379bb124ba429344e30226d11e2c89ae0c59fd9c8809be4a97f6dc9ba1c2396988499720e1edc50ad6abb18295ef43157cd0621f16af6b75f1e2c9b4be65a4d4b5df8d019b452761e97f9dae640998fe2763c2afd708efd02798f0fd589adc80a5c98d69a5c929ba7078a177532a469c609eef544cf0cd21059f8659d12d21b3dde998e0af84147c864e304ffb5b59bc6f271710c4b7f34ccc0a6fd358e1d4bec1acf02c4cf85735c25706147e3626fc6b1ae10d01859f83e59fdbb1fcf3f5b4f2cfb998d1dca12bd3b807dc26e71f1f24aa13a5b5aa636b9d5298df69105d455e1f06b1b0f3302deed469d1af458b5ce737af79f9dc94eb1d94be0e07301deed2e9d057ea30d3f95f253a43fc9dbdceeff435381fd3e01b3a0d3a83b4e06b8878cb2848681760e67bb7c67ce7f60b66be1762e6fb4dcc7cef49cb7c2fc28aa66f698aa6f6018ba68b3142f76a087d1c90d02598f06f6b840fee1f4cf8a598f0fb74691b50f86558dade8fa5ed0369a5ede55876f84ea2a229af958ba62b302d0e262e9a66b462d17425a6c383898aa6fc562c9aaec234f86eb2a2e928115eb0f50e57eb42e3e6fb3d8df9761e10cc7cafc1ccf721cc7c1f4ecb7cafc590f10fa484698e5d87d1795443e7aa8074aec7e83c86d1793c2d3a376091f8be2612ef048cc48d18fa1f84447f13a6f5131aad8b0706d3fa660cfd0f31f43f4a0bfd2d58247eac89c41b0123f1154cf8931ae11d0605137e2b26fc298df06840e1b761f87f82e1ff695af8bf8a1927ff800a5aadcd6ce56aed6b9816cfe8b4f0aab5bc56acd66ec774f8994e0755ad15b462b5f6754c839feb34e8c2bc6a6db198f0aa0f3852750766c0cf6a0cf88380067c2766c0cf6106fc7c5a067c1716895f68225137385824be81097f4123fcd980c2efc6929b7f8b274cbdf04d4ceb5f69b49e3b2498d6f760c27fad115e1d50f8b730242fea72009f32483c4e1f3f921b6eccde1d37357b94fe5e2c817ea349a0dd0113e8db98f0df6a845f1750f87d5891f13bacc87829ad22e37e2c12bfd7111a1a2c120f60c2ffa0117e7440e1dfd109e7c3c07f4ca5c848300c7c50233847ec1dd43673f4f13b2fb5ee1cfdcb3a5eda397afe31abc473f4e175c5e6e81fc46ce94fbadc16d096beab13cea772f9a73a424de57e0f93fc5a58c90fe924f3b2f0cfa9d87f8242f3619dfd8b1daeb6b689fd87d9132db1e5ff2565cb7f5d58fee404961f6ee7367d4a3c8219cf1b618de751cc78fe1ad2781ed309e6d9f46f9a6cfadeb060d9f4714cebbf334d9388af2f5f28ba433562598a6e4153b6682e6507f43dfb3ea6c79b3a3df89e2ac1e4ff0093ff8f90a9f304963a6f695267fbf060a9f3434cebb7b1d4e17964bb6c22aaf4a869d9ef235dcfc01f61917c4713c9ba11c122f9632c92ffd44592e740e567e0b66763dd348344eb492ce47fe942e67d72d7ab26a7652feb9c964d714a9d0c51cd827a733c8569f0ae4e83415a0d568abfe0a72ed25b37f6134c97f774ba0c4b5197f8cd8e83e8f453ccf0fead31bc8b460633bca7b108ff276499f00c26f8fd90827f8609fe20a4e09f639cffabe17c4f40cecf62c23fd4086f18154cf87318928f4222795e2798973e1fa722384167e8173ac1bc1ffabf961bbe7ee8272c9d7ee80b18f64f35d8978d0e86fd9758243ec322f1795a91f81516892f349138103012bfc6847fa9117e704c30e12f6286c977848b2b4ef962bb3206b789a9166d6c559047d92451e1ed92bf635721648b33b7fa992ab6bf6814b5be5be436b13ab141461383cbc0dd4125bea0b9c1d73250e1f0c124b78addda529c678bc2bc3aa06bdf6f3016111d0bbee90bdc6bce6d657a15acb724fb44a1611d834eb3db4515949d54429ef374d0951bbfc50ca65d4433e113d0607ea713ceb354fb0892a53a44d2c9522f6191c8d244221a3012bfc752baa32ea5b99bba7e8874bd1c5ce52b5f78efc2dda228519a4613de9d24dc51dd6155cfae637340bdb00c35841a7b6fb7b0abdd9a5cb44568580f06605dd9f5b2771ac4befea0a3c769778a84df10f78f58d274d6258d567a02d55fc6a477d149e737dc4c9c93c61600af6016dc5563c1b78e0d66c17fc28477d308ff2ca0f057314add23e15a2baf61827b8414fc670c474f0d8ed702e2f88b4e38efe5f44a45eb9371c1af63387aebac911b7b4e202a6f60f2fbe8e4f34de9e2e78a56898242ed33e2dd09361ff3574c93be3a4db8043e5818d40afe8685d24f174a57c6b4eb4f8284f8774d883962b37ebeab45a6964fa7f20155fd4068ff082ffa62c188aa5a3b183a20c2074307c4c52ce1774611726fead28a9f0e8cc47f0775f9aa333add34fcb9767149938527cd3f306318a43306bec121772470a73aeb9cbfd4e7a96b039afa5b58b88375e1f642c3dd25dbb241c27e5b678ec3336d8e45a215d29886390e71108df7219a8e7dc30a31c644a163c6f88e8e9bf806c2a60c7283df702d179b03d63a574a45db4e7d713b38d36191a0fb350f1764c7c6c53c5dfd30eaffd4e514f1c5ad48c8598e7f6192478695fc2e26795458c9efe924f35649762bb4aaff8d154aa34336bcfe83f1181396c7fb98e4b161257f80491e1756f27f31c9e3c34afe10933c21ace48f30c913c34afe1833ba6848a3fb1fa6f2a4b02a7fa293ccdb0693535139c1e7693ec5549e1256e5cf30ca534352fe1c53795a5895bfc0244f0f2bf94b4c724e58c92c8248ce0d2b39a293cc6d6e46489b6b87a99c1756e5f63ac9dc946686b4b90e98e0fc9082b330c105210577d409e65da8c25404bf8e0beea413ccdb03b35aa13dd019338dd9614da38b4e327f7e4e2a3c124c4875c5401f16127437cc340e0f691add31c173430aee81a5debcb0a9d7134bbdf92153af17967a47844cbdde18e4052121f7c1042f0c29b82f967a8bc2a65e3f2cf58a42a65e7f2cf58a43a6de000cf2e290900762829784143c084bbda561536fb046728ef85e22df952cf3ee97adf169dac44313cb52498b0938b121585a94844d8ba13ac97cbbb6e5a9a87c1e2e781866972b42dae5704cf0ca90824760797f55c8bc3f124bbdd561536f14c6a234248b6c4cf09a90824763828f0c29780c06b92c2ce4b198cae521551e8709ae0829783cd6d15a1bb2a33501d3785d488d27621a1f1552e328a6f1d121359e84697c4c488d2763828f0d29780a86627d481453318d3784d4781ad633dcd80a3dc3e9188ee342e2c8c1706c0a8923172be236872de26660a02b5b01741ea6f696b06acfc4d4ae6a05b5f331b5abc3aa5d8049ae092bb91003b2b51580ccc2d4de1656edd998e4ed6125cfc132796dc84c7e1826f8f890820fc704ef0829782e26b82ea4e07998e09d2105cfc704ef0a29f808ccdeeac3dadb02ac3bd510b23bb51063714248168b30168d615914612a378554b918eba8ed0ed9515b8c096e0e29780906794f58c84b31c8278684bc0cab4af6b642555282f1d81796c7728cc7492179acc072f6c92173f64aacb9b83f6473711506f994b0905763904f0d09b91463715a48166b74438ea39cd308ff5e81093b1eac970388ad37e878ba8e99d60fea8c087755e0df8da7d517f38f3a5297ec3c75ce4c25d9b9f688e0329d607e7a5624def752fd04f1bd2cc74ac9b35ba194acc0849fd30ac2d762a5c3b9614b87753ac9fcf9f35249cd04933347e904731fe403a9081e809bc9d198e0f3430a3e06837c4158c8c7ea247357fd0b53513981abfe7a4ce58bc2aabc01cb8c17b75266dca80b806f6b73492a4c5ec1051f87c1be3424ec4d18eccbc2c2deacabf0b29dd308fffc615b38faaa0a239853efe529576257884a6c485cec52d101fdec1956025fd90a25f0162cf1af0a9bf85598da57b782dad598f06b5a41780dd6b2bc36a25953502c4ecb1c632967c56c45cbc607ab19df7ae24491c03b64d24f17ab0f4a9cfba5f253f58de28abefda29b12e64f43d3e2865fcfdcd592c1f618de8ac5f23a5d2ccf6d89e55aa725c5339d9b41778abf4be466948d625da69b414b5a9e5cdcb2d748ec6ae646c9a39cb95f5c2b62cd225e5c6e2c3d4f027f3e981e98a40ac6d72d6c13776399c2cceae7bdce9113748dca368cf4f5983dc110dd38cd74de7169d53b85e226c7361a459abbb1ad90fbbbf8b5f5dec5afb7963d6dc76279832e96f37db184ccdd782e915f1fabd4587d6c0ac13b89f20a7c2b48cc6ab198dda88bd91129a5df42b1a6b996a9b51ce153cebb13246ec76371bb4917b7425fdc5689d4d92e63c6cff6b6594c766031b95917938b325c9e79eff0d5ebea8be3d560539ca600560ed9e1b1e07549b36866c0528f37b05aaf6cabc3a8dfa2a3be30a5bcb192b9db2b9b50aaedc4e2f7155dfc56125a15bf7a820886c7ca6d0ed78aa06bd949ac122d49d249d55d58ac6fd5c57a5ec258e39a9689b8b8bb38b87154b531bf5a2509c5e78bf453b31e8bd76dba781d13b865572eeec4b6ed7412dc6b6b5aca8146a73ee05d9d302dc174d2b901e3f1551d8f1519a9b3a96bf313b0387f0d6ba704b30165c37c917b951004d339a8450489592316b3db75313b0c89d95a913feb64dbc4ed6aab5ecb3a998babe35283a68fd284c5e8ebba182d212c7d55aaba2bc5b730771fc5d68be96e2ca677e8623a9761a3e4ba9222360670bb72ce649948e546d11baa726adc7dad18ab662c5677a6d227880d17b610d68a5468749ee5f9705b82da2f5646ebc56c0f16b3bb74312b4a5a72a6d62bc0cbd0447dd6744bca13b1387e4317c7a5a84df216ef16e721155777fb0fef031289cb12bdccd6ae09f76271bd5b17d71ae2dec36ef119004ec9ed1dac13d65edb52f2b44e7f381d4efb304edfd4715adb66bdacc484c2733809e3708f8ec3a28079c3841c713216c36fe96258123086eaab68fa14698bf8eec7e27baf2ebe658496dd94465ba335089c8211f8766bb541dcb26d216881d0c7ea542c56f76123144163b5443c119f42fe322775b941e2771a16bffb75f13b3c44cb71b7a88df8be335b653f0f8f5545dcb341e2743a16a70782a599bfec81fbd427b33ccadae30c2c7edfc1e217a4cfe8c675a96c477877f98c47e2d6616bb51ccfc4e2775017bf712cf1a86085439842cbb3302d1f4c3cb6172415cad34a054adb3b1b8bf57775b1c6bf4253d132550fcb086f57605e1f366bdb62e98def9f83e9fd3d9dde7392f6b84ac4dc201f7dac137bc22e663bc5de5af1fddf4429907e0ff25c2c3e0f612dc8c47984f786d788565593a65e4d652e81b746b6b6620ccfc362f8702a7d64fddc4089b03d3e0e5e29c7a8e2d32b93f30307b0383e828d50a5320e904a2cd32b31d28fe9f9584c1fd5c574594aa9e99fe971f3a18a775ba6eb05586c1fd3c5f6e8a4e94a3b324e3d667e2146e3716c64595f67c47bf0b6550bf3222c46dfc7c63192f74253c9c1a9f46583f777d3b7f38b310e3fd071c0bfcc85f71ad4ceaaad658b97601a3fa1d37842d29ce9cdd7d488abdc9fa1755a2c97629afe50a7e9ac042d2dbfa5c76aee7efad71bf7a2c82f976171f9512a3e4c583db7d8b03aee722c963fc6e6438395736e9f2cfe6efc1cb7dae4194fcf78290bc5883aef670489f315589c9fd4c579bc2f65bd30a973d395989e4fe9f4ccf3e909cb27bfce4ba5cea9b62ad21da9b90a8bc14f7431d8c0e84618d5d840a239066881a9e63cf54e102a5763547e9aca1ca10a3148a9e2c50ccb71ad539a5c83c5ec695dcc8e6de3f40e92cee9e6806b3122cfa4d25b0adad60adf5e4e3fedafc362fab3544aab2291aa6e0aee06a360ae1514b2fc24f1d39564fcad2031b81e8bc1cf53f7ece36106c999307ed8f5d64aa11bb0f83d8b8dfe256ed1787bb4fb75547be4e3f90bdbdf3d519e4cafb6bf118bf573e98c3ab9a95aee3cbc85b97db72ad6d61ecd3761317c3e959ca7279c5e3b21790fa793f32f12e1cb6d160b29ee185ebd7887b70a73463bb722b92d35c3f496127f7a4cede05de7e1ef745283e7898a96b29d2f374a2ce1170e9c8eed98fb33517e13c6ad1035dfa32e12f2eb6479a3ac75ba20e47a3ef2655ad39d5660ad784b2dcc4a160b5d2d371dd4733076c9e3b411596815119f9a82b21cd26338e9432da62ff0541d2e53b55d0effc844644a9ad6945c8b5ff2d0daeb6d68501c59983b74babb0256cbd183085f57bf4904b346747671b7e2a421fbb7d8f4873c4d0850edc1a4e2d6822240276e883037d7b5ab91b9039e2f3b323b65b5cbe529f22b4a6c7c2962b168f73538e05c8f1955e760009bac40f846c443f86b4a84fcab8aaa5bbb4c4cfa7101dee7fe4ad90e2b80ddd7d903f62225b0feccfdca522ef37c596c06d7bb9b07ee3794e0fa6ac07181fcd3ae7c6aaf595cadb602da66e641fb2db5b5c566cf25ceef5ae935a57c075cabb3015cb4bb07ee7794e0068af66853cad5820df0ae0295c24b94f0ba81ac5a1a33026303a6e1c33d4cbfa7c4d40560f21cbe6d407460a087e80f948878b7d05b056a039aa7c77868fe4889a6a3b09e26ab8aef0e3d3c382f53c2e1dbbe95b67487d41ca0eb675026eac366c63dac790db8468e92d900f020289b5ea104d819944d5c4d3e2d6a03a017fa7880fe445d78978a79086faf093b1a9ffb810dbd9a291b524b1a6c0074533f0fd06b9480f84e6aaa75be98ed15b16e6e6952727faf6ad1e02c1316562decadce09d00688fc4741fc332544fe6d5c088f8f7ef1a59a352d9b1a565bde6eef0fc6c3fe4289b2872cd394bded9335e65ad1b5b601d575a06c7b3d531d6bde4f8453cbaaaf6853cbece34e1eb837a83bd6101c5cefb45074b5f96c8fb7b2cb0678fbc118d85f29e1750735aab77cc75d346803a883a075f637ea61e95522fbedf0ed4651ec3cde2842b201d8e6761eb0bf6776a030d659a6dab2f2ac0e8ce7bf493f2ccd9b12c522689b1b1a4f6779d0fe416d6d8bc5645ab308dcdb0ec6db1ea8c969c3d53ae1d900ee0d00ee2d4a703d4136b575f2837b6c28586fd34fb5b9b3e2f5428cddfd80b9c0cadea11e3d2b73a015b1d47756b301e001d1c8ed94e513ee77a54cdfb1251875dc05a71773fbb40de2ea6e59ffc6b8e48c731e314ef37f42979a68dae31bd1a4e55c34e5e9e068e0a9bc689a7e21d1945a9dd1900316d100ce3ed140456034e5b64c3450051e4dab3c8906ea6247033560a329b9ad4403f96a4403f76c753ae3b3f3d1b8099f68c2ee60543b841fd50eca4691a9c8688299dc2832021e4d328a144d6b6e26ea9b09f47c43f53e9db9dc37f45fff9fbb6de672b7cd773904be693bff71db0eef51b71db8c5b85ebabc3c4fbc93c80ca706f7e9303c4e87d8ef1fa836824e9b2e31ad889ea944309d96443be04af16f9370e65989331fe0fc8f4938675a89f31880f3fd4ce0dc860285ea6f6205ac900e67772a9cdf641ece0f4cc2996f25ceab01ceff9a8473969538ff0c707e6812ce422b71fe14e0fcc8249c33acc4590a707e6c12ce9956e26c0638ff6712ce3c2b716e01383fa1c43940e2ac92dd4aff3a6bb88637970e641615c83701c84fa9bd7dd48044aa8343fcf946f1ac7d4df98500ec6794604731385a94fa68a9cd704701b89f533bbd24ea764271bca62743d9890ae5c700e51794287b4994853ea0ee38227f880cde502a78df01f0becc04bcd99987476679cf0178ac1d21bc4149eaf0d84c4cda372783f90f00336212cc5916c27c0bc06c6712cc7c0b61fe15c06c6f12cc020b61fe0dc0ec6012cc3c0b61be0e606699049370ea820ce61b006647936012f6cac960fe11c0ec64124c1b7b382f03989d29614e9630eb9c87eac451ffadc460dfce24b4df7e54c8578279cc2e94c8bb0ae4db85bb8aeb3eb34dc0b36f48a33bb0d2ae94c8920d69c4eeb948687d2753a13c0e585f374a9413e3327ca510e6b93b2d72fe73ebdc2306dd9a59a2ed1249619395ae5100bb7b26ec36b5aaca4694c34111d08312e5484d1190eaf6eaa468cfa3423b1458694f6a2b5d28bc83eba54f24dffd527dd5917b4f2a4f51d7ffd6be8aaa03b0d25e942895a3f80ce7ff4e1978a5a8dff9559b473e4f07087b6702e1ac430ee14300611f4a84fd9837bda68efe0feed93a8df65d00b12f25c4e0bec58463f06438fb824aa69f4938497d3cc870ce0638fb9b8493d403890ce716807300254ebedcc5eb01c56dbbdb7aa8fa50a1ea03cac58194a87ab73471720fa189dd5701be416d399411db259c6321ca3e20d30ece044ae89eb5d2e9af2c95abbdb63a2fedcd4463870ce51e609543e8c7d4e168e426b643a05b24d691ed90a2f807b66b1c11718bff2d707ce901600ecdc450c56eb126b5a965f45c2db25347dd40db0cca594932b4d703b4c33231f793aaa73061f949e6277c388039dc2498b32d84391bc01c61124c424f0e32987900e648936012fa1891c18c0298a34c8249e8fd4606731680996d124c1b17aa140098a34d8249e8c94106730c8039c624988453626430070398634d8249e8fd460673228039ce2498843d2032986301ccf19430b359fcf85130e72cc2fa9dcc392b078c294d684be742ffb83a61294a36aa3e01d8ea44936012d6ef64307300cc6826c6ddf968e71ea63e9b9aa13971327c0301be4994f886007cf13e6f5c98b77ed7e6898ca701d0c999f0d3c83de4fc344e0308a7640261e12187700e4038d5ece610e1a8265973a8143487a665ca93c89b6283b344e4936b649316a7021b9d6e8e17b08d4bfc0e03287332558b27db52d5662fb742003437137e44a94f5bd838d47107c039c3249ca4eb26c9705e0c70e69984739695385f0238679a84b3d04a9c8f019cf926e124dd7d980ce73280b3c0249ca4dbe592e1ac07380b4dc249ba993319cef500e72cea96676a9f362813aaf18f2b10b63c9752019d0180cea604aab6879ae9ebbf6760d8836cc9de0e006f0e25bc612cd5d590b14ba309dd115ea782ba180c761c662254c21e3b19d46200f57013a112ba7491411d01a0ce35112a610d4f06b53f803acf44a884ee0a64507b01a8f34d844a38154c06b52b807a848950099d15c8a07604501750429dc9e247e963d76d1431efd3486e44623fb414fb1536efeb5515a245ab86ab0913611a552270835389b0d09cd571366e7ada0dd8f322735721113a89914de8fd02586991393bd0916e0c4066a7fb00cc629360dab839efb900e6629360dab839ef6e00738949306d9cb93f11c05c6a124c1b37e7dd06602e3309a68d9bf36e07304b4c8269e3367dab00cce526c1b47173ded500e60a936012ba3292c13c0fc05c69124c1bb75e390060ae32dbedd6c62da23f01785753e2ed21f1babbd8d4895ebc2bbb9672eb15b22fb63100ae34d3bbc4a63eec61e3d62bfdc078d29a4cb9deae12239a3b7c239ec5ce6b8d22449b5d6f87005b3d921268cf84999c700fbaae54e8da0174656de9516fff4af77e006579269615f28f811e3acb0ad7007c15666c4beece1e35088b75e785482df3152ab41b4185b3d6a42d4e493b936496fa25b0d47526e1ccb312672eb0cea34cc239d34a9cab00cea329718e65f10bbb16b3bd8cbb2e3433e55a5beabc5ecd7837b24c8075bf4e5097991627d9d6bd7d4111708c492ee105566eac7617c079ac493849bf854986f3128073bd4938675989f31580738349380badc4f904c0b9d1249ca473eb64384b00cee34cc239d34a9c27009c9b4cc2996725ce0d00e7e64c8d75968b5665b3237921e3dfc35a27977c558b255f35568f756e04402bcdf1ebb4d15da13de8296dc9c43ca6da07cc5d84b8457435d543b66f1f5409ecb22a138b100fa54f99cc05f0aacdf53026ac80c826db6e03686b326197b3326f976403c70701bcad99803727f3f0c82cef79006f1b7df5b25db3a752b9c3a48a554985b68a15ee7ce8cdbe664f370073bbb9ee088403c66476da1334836acdd954cd466fe249c04a8f37630e53f7696542b464fb34ac0056bac3a4592252b743b2f27424c0596712ce3c2b712e01387766a22b995aaf3ccf4affe2e500e62e9360dae85fbc1ac0ac3709a68d2b2c1702980d26c1b47185e55200f3049360dab8c2721e80d968124c1b5758ce07309b4c8269639fe8700073b749306d9cb2980b60369b04d3c615967300cc3d26c1b47185e56100e68926752849a72dc83a949d01cebd26e1246d1e91e12c0038f7998493d449860ce77a80f3a44c7c6ea7801d6a9fdbb99179084fce849b76f2a1e2f8e52e0b1da18d621d30e9c297332244908f0476ba9f12f20809b9ce798803ae917ef09ef77b6c31001dbb08c192f9bf1702b0a76462d5ba02abbe03173bcf99a8396563cb741cc07b6a5b4ec9656c33ca93a950fe0594b3a751a21c2d5096380f9509607c4df01ef9ba67ad9be4578e16892d2877c8fb4b9c638d239670a300b2b6401700f874731c126dccf6ff0628cfa044d93f094a15535287860154b5fed1a0f43cd3ec2d55084747c9b654990cf09e65aeb322e1641d992bceef40017076260a00acdef70a00c27294ac00f83bc0780ef5a63f6b648f5e39749708cbe4d9debebabc3700776e26ec2fb7c506ab4587d45d336cfb5616df0318cfa31e58e6c08a45c06dfa75a3e554306702980732d1be849f1bf77733ed1e737a06a03c3f13c376f987dcb0dd5680f0824c8c28716b5c2ceae866a104ff947395c8e4a5ec443150d7c89a4403a981d9bcae2d1f80bdd01c2f642b1d6b00ca8b32b16a23dfd70bb2b9ee6e04f02e3669fd6f01655f9c6cfdef5700ce4b4cc2996f25ceb301ce4b4dc239cb4a9cbf06382f330967a195381f00382f370927e93e7364388b01ce2b4cc249ba311a19ce9d00e79526e12475f822c3790cc0795526b63be55f1d3e74b63b5d04f05d6d924712e9e79ac8700e029312d7988493746d0619ce2300ce6b29717616026ac487171b99eb93649f3b4c479099afa3c4359105f9e2251f376a1622e1972d39b50ccc922fa2823d1dc0be3e13a3987c086e29e3c36a7cf06d9b18c76cb47ab0ad0120bcc11c9f0d1b17abf60625e58d942807303ed75823a7ca5caf226cc687f04b046465686760933799eb5660e30e1fd700b4379bf3c1a69956ae01fe0980798b49306d9caa7811c0fc8a49306d5c03fc248079ab49306d5c03fc1480799b49306d5c03fc4300f3ab26c1b4710df08f01ccaf9904d34697ebc701ccdb4d8269e31ae0ef03985f3709a68d1dcbdf0098779804d3c65d907e0f60de69f69200c23e11d99280a96010e42eea419044e349aeea85c22389b03a22fbeaea0600f21bf4abd56241baa3997ca063175b2e068e1b12ce5bdaf891c6f6a020b8db1c37431bbb9bd300ca6f9a349f5e4059459159e6b701ce7b4cc2996f25ce9b00ce6f9984b3d04a9c2f009cf79a849374a11f19cea300ce6f9b8493b4794f86f34c80f33e937092ee194b86b306e0bc9f12273f51eb27ed9b56eb05303d6092d515500e129359ddad00e7774cc2996f25ce0b00ce8326e19c6525cedf029c0f9a84b3d04a9c0f029cdf3509e70c2b712e0638bf67124ed2f94a329cbb00ce874cc249ba053419ce6301ce8729710e67b1bbc5710ecda241ebdf23ceefa64d389649e6c5f93f80f5114aac137c58b7b078cfb8d47de808519335f5d78171f94733e1733c9b1d6a3b273c0aacf5b14cf8772a6b6d12f6c78b8025125e8d76d6c8dedd386700eb7cdc1c776e1bddbeb200caef9beb854c38494c5686de070a801f64625b8a193e5bb5f963a2f300bc27cc766020f4a92373609808b2fd0f29f1f664de9a22581d91af2522ab7cfe002cf34799e82bc1fdb974a5a3ddcda49f019c3fa6c439ced74caa63706d9b7e87f8a5f2e58c6d0b3d810af36090e19f34c70fc446dfba15c0629fcae45ef03ce357fbd6c41d7abdfc7f01bc3f3169653be94829194e0632fe4f4dc2493ab44786330fe07cda249ca403cf6438d7029ccf9834f05c40b9bc906ce0f91e5076fecc249cf956e2bc0ee0fcb949380badc4f97380f3599370926e014486f34880f3399370922ecd26c37912c0f9bc493849775422c3590570fe2213dba5cd688bf14fb24ee66b00df0b99183ce6016f1596a864ef928fd8072f02e0fdb2ed9767a94ac6beb1ce4ea079fe2b5340da3863f91eb0c85f9b029270e2820ce44c60912f9a0292b0e74d06721a00f91b534012cea093812c07207f6b0a48c2f5956420970190bf33052461d39b0c642500f9922920093d38c840560090bf370524e1941919c86a00f20fa68024dc24850c641500f947733cdf6cdca3eb33e6a17c99ba87eded47cc156d121cb6890d4cf96bf6b967f504f05ec9c467c13cb741bda7468518e9e168b70a613b693b8ae75181ad0360ff4409762cd37f68de73d2e202d547bcf1ac6fe32668134029fa6a26d767b840b9cf112f088ab59593bd9bf99401acaf99e36364e3ce72e34131f0e74cb865c37a3ef51296102d5909bb0058e95f3299f96b1d25d681efb940e11973303c990aebb100ebeb9998b0283884667bee06d9fd8d4cec7d985ab37e86951b494e0196f8579360dae8ec3a1dc0fc9b49306ddc4a7f3480f9779360dab895fe5800f34d9360dab8b7e12800f31f26c1b4714d653680f99649306d1ca61b0660be6d124c1bb7d21f0e60be63124c1b4791060098ff3409a68d031e0301cc7f99b4ae82b40a225b57d103e07cd7249c7956e29c0570be67124ed26f0d91e1dc0470fe3b13bec17cbaf7d0f994f202e6e1fb0f25befe8c6f575a29b794e2a276398f6f771eaf1743c4f0138cf661cc0218dfa7c4388a790bf9ddb99f4d8eba4d8e3a5582079f1a5ec8f89a5e3ede5ee908e019bc9ad9fcc5d53200f70373f795216cc493cdbddf0cd0fe973afb27aa8c544c49272c782b9b04e351a012fad0ec1d66084794c876989904f07e646e014038c1415600fc1214001fd37f346799b0cf32c667276b6475552d4429ef901d2201b81d57397fbbe29738c71a476cb58595575700f87f9928613147862261b1d49b485295b06f038c9f6462800436b0546bd56bbfdadda01a00607e9a098f3b08337911602fd82200f6b34c6c753a931d6a5b9d5e0b107e6e8ee3978d53c44b00ca2f28518e0980b2dc09930bd9cd4a9dbf548fbf89b65a1a4e552dbd03107f498978088b75006b10c325db13daac8d132145a0a9cf3f3868ccce0905567eb2f116609f119370e65b89f32c80b39d4938675989f35700677b9370165a89f37e80b383493849e7e4c9701e017066998473a695386b01ce8e26e1ccb312e7d10067274a9caaab992b7ebb473ee354cedcfebcbdbdf54d0061674a84c116c0dae840db1d34dbbb64ca1addee2617b4575a6206063e5ea742f830b0c6ae9408fb0384352d6b89d56ddbc78f7e003076a3c4183f5774a8effb3e08a0ed9e59b441a6e16cfc46d665006d8f4c949f7987dcc0f13880b02725426f93c8367004239b631f09f0f5a2c4a726d8521b77cfb372e4fd6b00666f9360dad8b6bc1dc0ec63124c1b17675d0560f63509a68d8bb3be0a60f63309a68d8bb3ae0030fb9b04d3c6c559570298034c8269e39ce4f900e6409360dab838eb7200739049306ddc9ee2eb00e6609360dab83dc5b700cc219430b35958276ec28c4fd6c18c8021e2a19918df9cd162afd56258cef534b27dc1d623c04a8799348d56405982924da3dd0b700e370967be95386f0038479884b3d04a9ccf029c234dc249bad8850ce73a8073944938675a89f3648033db249ca48d79329cd500e7684a9c6ad7c33c5f2bd4e6d99fe301bc3194f094af3b9f3d2f667cf57a83ef33cae5a2a95e2b668662d7b53759ed2e331a201e9b89ec8e65f6f86d556cfc36f51700e7389370920ed291e11c03ba97e34dc249eaad4986b304e09c6052dd5e4039534456b77f0364f68926e1ccb712e7a50067d4249cb3acc4f92780739249380badc4f9238073b2493849f79f23c3b912e09c62124ed20dd3c87036019c534dc249ea034286f33880731a25ce49ccbf0298773eab1d1edca358c5d373e3c6a6e7163a7f358a1925522fe42b2244c0378396e9744ae0eafb6fd89c676cc94a0692ecfb6fd9c072734c0169e30799fb0390b9a680b4f183cc670090334c0169e30799a7009079a680b4f13bc2170190332941e6fa6af76674890bbed2a8c87962a7a34fbd38e351cd505d7f06555dbf06d4f5f999f06f4a75508f707e896c48ef5360cb0526c12474162383f939805968124c1b079bff0960ce32092661b39e0ce6bb00e66c93601236a4c860fe07c09c63124cc2e63d19ccf701ccc34c8249d8322583f9018079b849306dfc88c47f01ccb926c1245cfc4a06f34300739e49300917bf92c1fc08c09c4f0913dfaa7789f3bb96b99f91a8700470c1f66fd5bb16803d8212acfbe9e695ce0355c2250caee768b3edcec956797402581750620db6a7928d4bb53b80c18f859428c36db74258df936db77227b0d245662ff522ec35911502e381e51651e2ed072aad3da252e26eb7ee378f32b4d0eb642a889b818d1667629e1ed6fc5875455edf93d9e408807371264ad3f82c9f4a796ae3e6555d40765f92893a1f9b6d8aadf36ddcb76132b0d2a59968eea753e7138ed793d9e88500ec3253c1daf801a97300d81253c1daf869bef900ec7253c112b64ec9c0e602b02b4c054b38f34406762a00bbd254b03636b08602b0ab4c054b38ba4a06763f00bbda54b08473006460f702b0a5a682b571e4aa02805d632a58c2d15632b0e500ec919460d5f6c105ac0db60f26c3770ac05766ce18808d9bba2d0728cb3331f097ba37948d6e8f43c0e85485493849772921c3b948e0ec94e513be244e7891882c8f6e15f336c098ce9632ee9bec6e9151e59caf14d5cb6eb6d9b1aff5cebf6069b0d1f9a7bb1e11bb9c2c761a220de22a97572d64ef74ee72cd9c8ee038e791b5dc243a4993888ae265a1c37cb7f30cff462d0f7d1f2b67ee061fa5ce6f351dde2c9044c57673de87817908fc53c1db59a38871ec0620d14867c1c9fdec068f17071895baaa4f7194c882add68973a5d0a4d179a68308c735a168a4073853331e25a25a6e125a7574ee2f91b5094f389e6491481f994a5cc3552276954eac2ac5b1a2454ece78e7b148a1f3cbadf2a7b754f6d3a58ff94e79a6ae2797c9d328b1b4753c2122fabc59d76ad6952c466e86e0ef6f1573f235426a49d298268f1f6ea9dd13a44a0eff9ac7211dffa378bacb6417663a28d28de74b27e55de1fcd3298dcedf5ca94b17b56359ff0f15dd72b3180e0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/24cdf75976d66ae4998dcfaf1dfcb0ce.asset.meta b/Assets/SerializedUdonPrograms/24cdf75976d66ae4998dcfaf1dfcb0ce.asset.meta new file mode 100644 index 0000000..ef289b2 --- /dev/null +++ b/Assets/SerializedUdonPrograms/24cdf75976d66ae4998dcfaf1dfcb0ce.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e2763720ab444a241aa143fcf6e926f7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/282ec8a3a5b8b024dacebc124af7b602.asset b/Assets/SerializedUdonPrograms/282ec8a3a5b8b024dacebc124af7b602.asset new file mode 100644 index 0000000..e0cd28b --- /dev/null +++ b/Assets/SerializedUdonPrograms/282ec8a3a5b8b024dacebc124af7b602.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 282ec8a3a5b8b024dacebc124af7b602 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c5447d7f067835b71b7502c6842084e290ec18bd50b81044809d224584b5ba8bbbbbbbbbbbbbbbbbbeb53fbeecc9dc99ebd3b6777676fce6686efedf37bb8d92b67cefce78c9f99c9ca65de7f91fede3f0bd95c36810d640b58315bc3567b7f4df0aeabbcfff9bfd4fd39acdcbb2ef7fe2df29ef567d949bee4fff58eb4f3fe2df47e55b04aefcb756ca9772d15cfe7b112efef42efdb12ef17bfbbccfb7f89f756a4b6f7d1023691cd66b358db48eb2422168a8f2ae4bd088f57a4bef7ef78b6c97b5a2294e281e48a476dbd7fe6794f2ac4b3559ed2eabdddd99e225aabbc674bbd6fca59992773899058ff97594cfcc1fc4b7b79ed20af3c9a0de4dfb5e4dff5e5dff0fd3af2da31c5f73b81ef1a80bf39a10b127cdfd9bf46cef7ae7519cb9a097ef36fbf91ef75f1e565ad48202b5b5ebbc9ebf652e6ac14f4af27afdd93c437918c1e40562acceacb6b2f79ed29f59d9d66f8393ea3c839401e677901d0a71708bb0178ceeff50e1177958e1706d2f1423f1db3ce90e9f7897cbf8fbcf693d7be52b6f74edbe1f25e7f79ed9a44af01fe774c7dd7d10fb3d65af97ba0bce6ca6b9ed4ed62a9eb1cf03bac2e2a4d07499917c93076d2dc57eff3e773e5ef7c791d1c48af02f9de3cf97b488afaa4627f4aa74b6418f3c16f8f63edc50964a974bf3490ee97ca6f4ff039d6be23101f607f5ab943a5bc0569c4e3b2403c2ef375a99313fb5e521d94fc6152cee552ee42f09bcb3dc5306eb5e577b7c8dfc359f2b2ad7d0acf46f972ea2bd6a3fd70eab6f2efd71dcd626d7964123d55da5e1148db2ba4dc322957c57f07ff774471ee0ee4f0ef770ec8bd3220f74a295795114352d4738cbc8e93d789f23a8155e5e3f14cde1b2bafe3659857b1d832e02af97cc7e8b71d54b99e2ab74469342990d65d65b8572791a9be9f2caf0d527c5fbd332584ce53e5b5618a613694d7c2106136f26da1fe0f015b189d44e6349f6ffd4aa08327a7c166f97bbabcce9057657bd705ece0ba14ec20992eb3a42e0ca481a74bc366f2b7aae7e7c4eac2760ae8b44bf5e914b946cadc15fce6d76be5fdddc06faeeb1c3f9c868f4899aa9e52f590d2793e23d3992df0bf6bd218d8462adf25b2af857efc1ae5f9b21b49fd992aa3946e53a37ad79f08be557aa4921f14eb1b028c6f903a28b6bb05dedb1dfce6d7eba3e189bfbd6f1b2bdbea0ceef36ff700bff9f35d52d4750f166fb35cce4d20ec9b64d8b2fc6f7c827c774f169ff774dff2eb8de0de8d52de3bf2bbbd587c3da6dee371db13fce6cf774f316e8b34fa79e136199be0dbc52cb6fc991cb5877a2fc87b45529f9b596cdeba593eef11fd265226ef2df17f3755ba2c95dfdc02b8dce2ebb79daa4f8be57505d3d7b3cb000765cfcba3617753f74a1284a5c2280dc47b61544ea3765277558eedcd62f34cf05d7e6fa5bcae91d77279dd27faeec423e4bdd5f22adbef915b594cd9ecf57ba3f7f9f536f97c2ff09bbf571695dd5ee607afc71cabab2e3d559aa8b8ebca804476b6ce7f7782aa37d7fb6c9b9e23b93d12d061294b6cbf1be4b58d269d372649672fdc66b2fdd72cd8fe4b16ee26796dad0977df14c23d46867b8b61b8fbc974bc1dbca774d81f3ce369be28f0fc0079dd8c3c3f10e8a27bbe45de5f1cb8bf55867ba77c5e047ef3eb1d515dc5df5efc9bcbf8b750f5dd41f27a4840b6ae9d7ab0bc8e07f1e1b2ef65b1f5ebbdf279a2fa3519ef43e5b5ad269d0f4b9ece2d2a653ccf310cf7701987bbc07bcac6f707cf603aa9e72a9d8f409e63e9ac9e07d359dd57e97c4f209def91d7bb413adfedc7bfa58c7f2bd53e39525e8f0ac84e259d8f204ce72129be97a86c3bd60fbbaacf7d9cbc1e1f8823ff5b96fd91fb34f13e063c83f13f3a36de097551ed8e2649e2d31ebcc7af2786887fa26775e555f68723f7b3d87188fb7d7b697d430259a7fa9c3aaa7ecf69fe376d1e90bf4ff79fb756b6760688130fe38128eb56aabe3c533e7b10c4fb6879ef2170ef6479efe1e8bd880af7ac40fa2c0a3c3f1bc8d03d3f07e8a07b7e2e8be6473eeea6c693cf0bc4e5e880ae0fb198ba9f9d1f1f57f10e0c7b89415a5e20bf7d2490968ff8e9d27673025917ead3b29db47d7651202dd5f8a34acb47356979897cf61848b7bef2dee39af47d027078543ebb14494bf5fc322057f7fc72a083eeb91a2f9269d9ee0b79ff4a242da1fe302daf8a8fab780786bd3485b4947d5c76b5bceacad06be555d517c529c8557ddbb204723b07e496a42057950fd727907b23d3eb9b4e78cad6d5f8e9932cd6d6f96fcf6e3b241a9fbc89696dbda36a9fdecc626d5db50995ad3fc5e26d5db5ef9f8ea6bf60c1ef3dc3e26dfd5960274fc967b78177a0adaae7b703b9bae777001d74cf557b70b18cff2bf2fe5d4c6feb507f68eb77c7c755bc03c35e96425ade13e0acf83ec762c71e9ef3d3a793d24fb50d4e6389ebc67b7df99355bacafa3bf2bc94bf1cfce6d71702e1be20c3bdc297d3f90a29a7b1bcff80bcbf45debf5f86a7ece501f9de1781f71ef47f4f516deb8703fc559f4bd9ca4b517bab8acb43e0198cdbcb2cb64d22cbb9c82b20ad5e06f7605aa9b65932ae8fc9ab2adf14bf17a5bc15e0377fefc9a8fe539e90f7d4f584e8b3566a4c45a56f63a0c7537a5b11ba8234336e23a938c37c6b2a235826bdca62cba4577d3be8f2770259cffbef74cd4ef08ee2a9d25c8e01445e63b1630aafc9e72a9d5f0f3c7f5d3e5763747ccce116a08792cdbf294da08f8affab4c3b97d3f503ff7eb61a57517aa9f07575852e1c554ea9fec61b52b7bdc16f2fbcecc5f2bd377c99231f91e17f1290a3faa76f06e4bc29e5283b7c53ca590ce4d401cfdf0ac87d3b1a9f69c303df246a47a7d25e4ff799ccdb91b7586cd9f6961fd76eb28d5695e74a58e27ca0e2feaebcaa32f46d163b27f1768234ee9f625809e2157997c58e5f2a7dde93bfdf91cfe5585ee4fdc0fbefcbf7e535f25ee0fd0f03ef7f28dfff40fefe20f67df62190c37f7f148d5b4431fb18dc9372d827513e3de41869e4a3d8b0d9a72cb61fabfaaa1fcbf7cac07790817aaec6203f09c4e953f97b35f8cdaf9f05e4aafcf37ee0b992fb7940dfcfe4f54b79fd221ac7e9f5c1378027fb3c5666429b96f18c7c21bf59037e7b36dd23517b587d2b758b7c2565ac05bfb90c39fed92341be8d7c1de0f725b8cfafdfc8e7fb80df9eec9eb513e8f7b17cf7db40dcbe95df8e4de1dbefe4f5fb40dcbe973236fa71eb794c02595fc9ebd781345436cbe5fda849d71f417af2df3f481dcac16f4f875eaa2cf886e96dfbbbc0f715b1dff7967e31ec5b79fd2ea0db4f2c761c5eb5f5957e1a9b643f0574ff39fa4e957edf07f4fb39a0f72f32dc4aa087bacfafbfb2d8baf857f9bd9413f92df0fc37f95ce7e793288f3497d75f58da652cfb15c84a65cc4ad521bf850853c9f83d848c16f2fa4708197f0259a9c4bda5bcfe2f44987f0159a984d94a5eff0e11e63f40560a61f23f757e027d9ef1eff7556dff08d3b609fbfc12782f4b5e55995a3b70e5718363cbaa0d9da85df16fe2b844eaf8dff5567e152a6ffece62cbdcdf7d9dfbcafe5f3f59af44647b3f520fd155b5811ac48613a91f08ef9fc0fb7f83fbfcfa2f8b2d0bfead86b837f4bfcb51f37d7ff871ec27cbc788f45788344e12b76a4807f69f94f5078b6d9b4a9dfa67fb72fbab316a39261ed92ea05b53425b691678ffafa8ac3e4cbea3ca5a191f91a7d43baa1e90f39a7d54bda5d25a961b91162c76cca675ecfb11392f13f913e8abe2b73f7806e78fd4f303f461543dc7e69fd4f32d2c76fe49dddf2ae5fec562e79f6439160165a1f8db4baf0132ff0f94632911398f1751f5a74a5355de04d3b403884b4de5a18ef299aaabfe8ccaca5173459dfcdfbd1f90effce6c73fb755e0db6461295f992e013eca17cfc0e623d9feefdce01c77b27c9aa83ed89e69cb93dc77fcfb79b563c38a744b12dfee4c9f4ffe63b165c47f7e388354baf788fd2ed2d3bff2ea25985f22bdc0338dbd477a8334d23dcf61dafc10e923e566b198fc9025ebb8ac485417f137d7bfb6af77553cd4fc42bf403a4bde59b562d33b4ba587a67d2816a2f0b4516920ebb37c951603e475603c2bf137569629df74653f3afbcf0bc8ae05642b9d7f8d7ed75bcd8f0e49d14e06b1f474973eeb91c1b80e9102791dc2b4ed8444654732bd13e62539669423e7ef992c3307e7f8f70707c6bf234393301ac1b4fe7159b5598c6f5a96f4f11eac7cf74632ad4f1bf65d818afb2879553e703bc8f71ab198323a4bf94426e2982c6e6398b6dc2998efdf2f7840bea7e630c66640a7714c5b7665d561316597f85ddb4f46fefe10659bcacf7bbb585dabf2bed279976ad459ae175063d7597559ccd8b5f8ede93a4ce58909b1718c481fb32cb88e48958793c0335d393a99e9cb5165a70d596c392a7db5b31a44c3127f7bfa0d9de1eb354cb55ba55d44a6e9d344b5bbb21a07c2680cd8aab64b6182f4e0d7262ca6cf9fa57c3742a44bca797c7a203d66c4a7874ae3acfa9a349a99248d660119bae7ca2fbc00793e0749e39dccd378b8f47f1eaefa2ad2bf3b326fdb4ee38475862cefaada7489de5de8bf3b46f5a7a4ff78644192f0d5f76adc58b535778bc67dc7b5297c2ffdb57750fe69ca373a459fe888ea1ba9b6fce268f8a37252f8be2896bbb62fa7fc6d54fb6258f49dc12c853096a6104671c8304a98766c65945cff304acd93a9795dd3f936d5d794733b59bc3e82f947d64f594da3e926d242dde3d766f29b75e0776d5f55b42c5b11087fefa8bed3d5d84ba99433dabf3f5af93ca8799b55b132747e8c557eedb2becd6ac562db02aa8f96262fc102f6e5e5fc40161c4755df4c02cf60f9a99e07eb48755fd5912d0369a3ca3c306e19517eec896c52e5df5e69dae43e7a9bdc41ce7f8e51f593f2a54f6493aafcdc93252e178276da3ac0a2758a7212c5ab421faf31d277654735efa1fcf013c42b22f382287713e9a3f456f16a1388571b2087df5f9f66dcd6ebe3b6a35cffbca3f22f503efda6e548301e6d03f190633f59ed62e311d90ddce7d7f6f2f906f0dbd373ec0c3cecc8c6800e09ca92b147f8f7c7a9b115b99620b26fac8c94ca12b57e740ef81d82996001cb12b9de20ab03b021f5cd24f00c9625ea79b02c51f75559d229903ed2af350becab10513ea489ca12391e695c964c90e17561b1fda52e7e3a8d97edbff1aafda1fceac7b384f929b22520bfab94bf11fce6cf35eb7b225be5f590581931f3a1b2ecccca0636a6c6fad55ce2c1d16733d458e781e03bfe5badb918cf627db84cf3f5a17e3841ffc609813116b1d62711b7c398d69f6dc21b86720e6731fe6e9123598cbf5b44b2aef277936b11b2bac57288c8e759db47c313efa87b3a5fb624ba69efc9f9faacee013beceec77fe21dd2463e08d8e1da241ce47b593dc07b2aac9ed17b55635abd403c7b827bfcda5beab609fcf6749b3c3a20578d55ee0bc2e6d73ef2fe7ee037c8b359ca9f7a76405e7fa0535f3fcc495f48bd8f0984d18f45c7de3d5e9354bfec00f0bc01d053dd5332c0b8bd0a5f5cf9fdcd320d7e890d33591a68d3e558f9ec3ef36fb306b018df972c39a69a3530603b0365fac8f98f296acd80b2d3071287ade446e41a96ac5c16e37f9425c76423c70379fcf9deb84c6d387981f8e4c5862be427f3d37952be2bcb9bac7cf9cdfee037bf0e8ac63922fd39b306039b5063526a6c41e53365a343c0bb43c0bbfcaaf6e4980f7e7bfc0b7f09c856dfa9f18d03c16faed749f2f770f97c0b8bcda323800ec3c13d7e1d29bfd90a7e7b3a4cfdc3b781c26790b046b1d87a785420ccd1f2f941e0378fdb96d8f7b37690ef1d0c7e2bc650ce21013901bdb2c68038aafd2b9e4862afaa6e809c79583bf9719faac68807a6262fa10f83f43554738259ca3f7e6ff0db8bd73455cfa8f1d59303ef1f1a785fb57fd59e2109e680b5e5caa901fd4e8b7e3733d15a1c559e9e2ef5191bb087b1f2bdcfcd99451493712cb67c1ae7c779baf4558c9c11785fb5490e03bff9f3b3409ca41f6ce44c20b301f89b3f2b4d436765bf13588c7f86f8ede93c43f992a879ee831287a1e445e43a30b50755d64429ff70f09b5f27b198f2274bb6b3abca21d5ae9e0d7e7b7acd1c1e9033252047b6bbabf2c854f9fc88c0775341bcf873d97e9a3923109f24f14ed8663c575ecf03b6cac32e64b1fd9942f95d8afd99885c8b97352d606fd37c46b3e4fce72c95b754dfffccc471c99ace62eba9e981f066c8e74781df3c3c9597871884a3e472793bebc313724078c9f9d78988b9fca9ac841579ad965c3149cc8b9354b70e545f26df3450cc478b5951c6770fe4c156b24ddea725ba9dfb16887d012bbdae5abe76e7bef6c23748853e41fc5be4bd512a841e9d1517c49d714170e5cabcff95806d072bbcfb53c4ae857ce3c152efc94036c3bbf2af167b596477ef7fb152167ac196b175deaff9debf6b85bcc59edaf16f268b12dfa230f8cd5c4fa6bf83e22aef8e02bad6fb5d26349c27fe5d2f342d11da177af72ac57e8eabd972af13b7866d14a1c5c7bddcfb5b17e67c894cafa37e2345ecbebf5da34aa6895e6cb8f6b9c216ff2f456a224538faba47cb7c583b578c361d159712ffc7d02f64f82479a1943148208bc4dccb67b9fca798040c1bc7f818eaeddbe73d9415248c8b9e0c4fee8e2206d114ded272f85ebbfe36f9bf3ab1511bcc72f9b4bbf0214b14b54460b9bc1ce1356812853a756a0b8fad20fe880ebf707f9d9741fcfe7ba5e23df304a82b2abfd804104393f3bd526d0ea83c177afffaca2d10d128134a06a335c953b34844ac4c4663a6f88a47642d5b21249554dd9d29b7cb2d6371699dc715ab27922bbe324e16652cc1b2740926c624e7d7487ec1b6014e9c64f5ab62114db25cd15a6b97c0b0b1b044d3abb66c7fa9acd77ce1492bb73f6473f96b2ffebca06cc667bfde73ebecd5f34ffcea933afa746a28d2299dd0b194aaa54ba98699ce5ac9eb9244e9d4a82a5ed174e2ffe91936466c3d990e18c1da3a828d326debfcd91a21a5c87bd79c217728e9172c9ef400b7438c30b90a18c23a1a84791c61538d56ac4e8380565c2144725d5de234ae998a3b3de3e69e0b6d0308eaa0c6dd3c61bd6b6adaf574f484ebd162527aaa3f39cfeb384cf79e1579ef9788c629bf3fc79358e485cde58d132144fba0b15f2426cbc7eb0604c96aa9b614547b80de7158cd30e2f535c4f3b8bdb6d2988128e38299a1399e191a60d9ac75d86cd61093dc26ace44698e4b6612537c624b70b2bb9892edb8851df3d32926da2c330eaaff1deb72bbcc8ac177deb75def7ba619bc4d9a57dcad9a583c82ed94c379864a611964db6d3a51dbfd951a76430e93ae049d71413dc29a4e06698b5750e6b6dcd759279c9dd251595ebe1825b602a770dab724b4c727658c9adb0f4eb1632fd5a6382b70f29b80d26b87b48c16d31c13d420a6ea713cc4b53ee2410b68e6aaf13ceab975e2cbe91ff9ff75f9cf0c6b8f00e98e6bd359a2f2dc932d2bc2366d439618dba1326b94f58c99d3592734519b89565b6a6d24f324c11631c256cb6d748dd9bf9a3c32a5c7f84836ba44699e77ad765420b7e9f6b917c7222719dd7b78a0f18011045f92496fa54097d2cb8db4a96a87bf904568e98d65ee0ddf72745268914289523423a6d7808d8fb8a853f86b44ea4761d647c628008dd2e36581ba20b56d20cd494346fe88ab104254d572ccbe686cdb2d93ac93ccbe6696c358fdb2a1fbe6e28caf3b87006e0e174d3150da2adb16f8d160d7e4f96cb5b26e6fd7c79b3183f356c8330d5959e01af978633df7ba7dc0ba3441a7998c280fb0d750e0e9130ff3f7d76182cb2c39814b20365acb00cb0bdce92787b903b31c50d55f35a7faed7c39dc016896cb88fb8cd29f9a95b2a5e2d65fb7a57358567d2daecaed386f7a4f85479d2e64a4b5c700f4cf0d090827b62797c58d83cde4b27999736dca5236c0bab37a6f688b06ae76025ea484d89fa77c4ac44ed83091fa5117e4f9699f0be3ae1dc5847a7622309acba1f2678075d1ee31635418c9e667bff5fe37dc1c7ea8a44eecf169561b434c8f6f27aa9f717afb0fb83f7d7786ff853e6267af6c78c624c58a31880a5db8e9a74fbc530dd0662c2c76a844fad65263c174bbb71bab4e3b52caf3778b36485acdb624bc36ce1bc902dfc55d68951c062917215225db3d97e5e15bebf77adf4dece16f5409978962d0ed12c1765ad499ae661fa8fd7e9df10e83f07686812e220acdc9aa029b72286e556be4e386ff84c6448c387b743cd1b3e83316c9375d83a8b70368a96eb3af1fe3c610025556de5e26aaa200b347ae58a319ad5ac261b64bcb7c0bd7b2ac4dfd1260a0f3b3a731ca6e1c51d15830d2ff59fbee1c55d1673c4661b99d01e6b600dc10ad5424da11a312954876279611a9617a6a7951786e96c4e8cdeadad519bc373d45c219be7bcf00d7eeeb4592bd8fb17238c0529585675e9d84f6cf456210e49f6c955f0c2944fe62c01a721fbf04596d0e78999224f6452732c5f0cc76aed599a5afb963a66b5f6089dc98ad1dbf21a35d989424226cc76b6ce6cc530f3d01412bf3af5ec2a9c402b44a15a2c0b55bfe8ee2a76fa2b17d56689779f17bcf0793fb1db1e6f2f4d16bc5709f23c7e45a2df8b19f91c61e4998e2766e823b10a60274d0560d4aa1e8565a1b99a2cf4b761161a8da93d2facda3b606acfd7a8bdb9ae99da6330e10b34c267d43313bea34e783de69fe017a687381613cc5dfde39a9b7c3043f51396067a8a4b445f41f5ff8ac59d4ddebf65debda54244b67017541e0a265a8ec3d8eea261dbcc90ed780cc1ae21d94ed009e6e6b95b2a82134c814dd409e6edafdd19d2fee233ffe6edaf4918f63d35d82f30c43e19cbe67b85cde65330c98bc24a9e8a495e1c56722126b928ace4693ac93c11976812913be99824e2744cf8528df0f986c2676019b3585736f5647c6824da48f5bb4fd1718d22b64c4829f7fe5e2febdce298f1113ee6512a3bcd26f97c26a667894e4f7ffd10f7c3e26d8a223186c6439ccd561a853a0b43bf4c83fe1843f4b331e1cb35c2bf30143e07e3b542c7ab5d92742d16ee3bd1bb83bcbb261c77c2b429d569c37f46d3cd249cb918d2bd3548cf696886741e168995ba48f0611b1fdf480fd92c31e05724d73ead17d5b839c6f99806653a0d78c936a3aa613027cd66c1020ce92a0dd2570c912ec44ae4d5614be49d31b5d7e80acd46666aef82a9bd36acdabbea24f356c73e0c6975f02eaf79ab63372c9c0a2c9ccab4c2d95d170e27b52e2ca93db0045eaf49e0b18dcd12784f4cf8068df0cd86c2f7c2846fd4087fc450f8224cf8268df04e4dcc842fc684efab115e6c28bc0813be9f46f81986c29760c2376b845f61287c2966e4fb8735f2624ced03346ab7dace4ced124ced03c3aabd4c233957382b6672c551d0fbc96c51c61696aa2f34f7a3d3ad364a163e36a4b45c972ebc863e48a7924155be02b3a68335d6f489612628c5841fa211be87a1a9ee8d093f5423fc0843e12b31e1876984376b6a26bc0c4bccc34326e62a4c30dfdb23ae2dd85f58e71a91c7b2c53a51beac77b5f86bb5d85aa1444c5c1709db8f0e38a9896bbe4e3c5b5a6fb9b4e932cfda077a774db45e8d697da44e6b3ef3ca0771a3ed66bf2be97743747e85d9acb76c75f736d26b0d660347696ce01643035b8b45fae89036b08f4670aef0dd2e252d67313fd2f962f09eefebb04c58ca2a63afd3c465f2312997c9c78a3299374ce974c5caef725d72f3b6f5710c695bf32dcf1a72958ddad615ba70b8cd9ea0b1d902c372ab12137ea246f82e86c2d761c24fd2083fc450f87a9d70deace19b71856ad66cc0d43e45a3f6df866a6fc40a895375252317e4affb2ff4ec60b667a551cf069312641316a5d33451aa6c6616a57db1289dae8b12cf087090622ae32b8d8b6571ef47d6246afb61d9f00c2c1bf21d96ccbbb89bb1589ea58b259ff3e4c9b540ce4c4e104be4568b194fb311d1fdb170cfd685cb3d3a1679ffe33dc432562a0b57df8b90df5f2baa7e5ea19ae87000a6c3393a1dda4a1df2bcfffb8352655ed5cd2bf7956c96acccd3d7e5404c977375ba6c1fd065754c4acc08109a299a412b44e19fbe865b300dcf4b466b9c176e719c560b993fb7bd4c34dfccac672ba6cbf93a5db2812e663af1b7cb053d13ed0ec28aa50b74256d73b362e9602cea17eaa2ce9dd62783490be5bc093391baa7da9e03e5d86e6fef5e495ae5f22118808b3400ee3004702826fc628df03d5a98093f0ca37b898e2e6fabc18c67c2e870ac80bf142be02f4bab803f028bd1e5ba18359605bc5f61a55f331f8925d2159a44faa4a559221d8509bf5223fc0243e14763bcae62e1ba3bc76082afd625048fceee5533587e86dcd3b0bb7a2cc6e91a0da7c5adcc381d8709bf5623fc0c43e1c76399e33a2c735c9f56e63841170e6f43df904a6227f0bf3811137c6348c1276156745348f33c19137c7348c1a7e804f3b4e7dbe6077deeb900139ffb53312bbc5563850fb436b3c2d374c2795fec3616b22f763aa6f6ed1ab53f3054fb0c4cf81d1ae1b5db98093f13cb99776239f3aeb472e6599839decd34a525f7798ef60fd67895f11cd16ee3edb88d21dabc67635adca3d322da4be12d4cde1fe0de08be3f68fa3a9c83e970af4e87165287c1a267b046aedadce8fd9bbe06e7621adca7d3a03e480bbe6a940f509984761e66bef76bccf70543f33d1f33df0730f37d302df3bd002bf41ed2147ab50c0bbd0b31420f6b081dd3d68cd04598f04734c2af31147e3126fc515dda1a0abf044bdbc7b0b47d3cadb4bd54170e37e82712154df9d55c345d8669f164e2a2695035164d97633a3c95a8682aa8c6a2e90a4c83a793154d3b8bf0cc56b85d8999ef331af33da79d99f95e8599efb398f93e9796f95e8d217b9e856be85d83d179414327a7bd199d6b313a2f62745e4a8bce7558245ed644628b6124aec7d0bf1212fd0d98d6af6ab47ec350eb1b31f4af61e85f4f0bfd4d5824ded044626307b348dc8c097f5323fc0c43e1b760c2dfd208bfc750f8ad18feb731fcefa485ff36cc38df6509aab5c1d55caddd8e69f19e4e8b68b5965f8dd5da1d980eefeb7450d5da906aacd6eec434f840a7410316add62609178735866eb2776106fca1c6808fe86866c0776306fc1166c01fa765c0f76091f8441309be67994924eec5847faa11bed850f87d58727fc6c2d50bf7635a7faed1fa0543ad1fd009e7c323fc7ca650c3230f626a7fa951fb0f43b51fc2607fa5cb5bdc4d21b123fc7cefd5b5c2557db92877cac53a117fbd73b170319ac3fc3da7fdbd328ac4cc139f7459217eab72b3882d9193306af2c59f96d9c4fced47b385039e3f53952da61c8ae5ee2b2bc59d0af1560990ac77312a95ae52d029c974feed612c81bed62450fdce6609f40826fc1b8df0fe86c21fc50aa36fb1c2e8bbb40aa3c7b0487caf23d4c52c128f63c27fd008ffc690d0133ae13cb3fe984a619460e8fa498de05cb19d66cdf87bc5efe257bdfe5e3fe97869fdbd7e66c9fcbdc2eb8af97b3d85d9d22fbadc6668a84f6355c4af61ab886730c9bf8595fcac4e322f0b7f4fc5fe13149acfe9ec5fecf8baac46ec3fccfe9a892dff8f942dff4f61f97d13587eb85d40f529f13c663cff0b6b3c2f60c6f35748e37951279867d3bf35d9f490ae66d9f4254ceb7f98a649c4f72a19273a5a256289a36e716cb6682e651bfa31bf8ce9f1af4e0fbe3f9799fc5730f9ff854c9d57b1d4e19b880553e709c3d4790d131ed108af9d6d26fc750c495644839c37946649e7fa529911a3bb9398b622dfc022564b13b15d0c23f62626bcb646f80586c2dfc284d7d1087fc550f8db3ae11c63dd48382b7d07d3ba9e46eb2fba9969fd2ea6757d9d21f1225439b7f81d92d8351b26d17a0f0bb9812e643e5ce39f68965b75d8496ed50e79b3bd12ad9899ae327e1fd3a0a14e83b65a0d6688bf2ac576427eb72dbd45e41f60ba34d2e9d231455de24fc330d1e943ccf01a6b0caf7e7733c3fb088b709390d9e5634cf07621057f82096e1a52f0a718e7661ace39869c3fc38437d708ffc650f8e718921621917ca113cc4b9f96a9084ed09bfd522798d78fad22c84042eb483a03095f61d8db68b03fd2d30cfbd75824da629168975624bec122d15ed784e96516896f31e11d34c2f37a9b09ff0e33cc8ebae294efdb3097c13de38a45274915e439ac8f6c39f9ffc62e49cc16bffceaa7bfd80b8b3f51456e052b13bb655530b8278c3f2ac87dd6d7b2d805842a1c3e1ae857b1cbaa8af36c5198171bfa937e8fb1e8a463c13717851bcffadd8468051bdd9f6583d0b08c45b715f1f5e33a2793902f1cd6cde2f10366309d3506b3c5d01a7fc4b254172c4b754d2b4bfd8445225b13894b0c23f13396d2dd7429cd5788eac7b87797a3e37c192cef1efafb15264ad39c844ffb081f687f5c3c6ad7b139608db00c35061efbac52d855a526172d111aae0123e8be6c754cad897dfd82d1db3e6465f62b26b87b48c1bfe904f301911e91900322bf63927b8695fc0726b95758c97f62927b8795fc3f4c724e58c97f6192fb8495fcb74e327fbf6fc816d43f98e07e2105ff8bb1e81f96c57f98ca0342aacc2248693e50539adfd2c7ac348f60c27335c2df31149e8509cfd3081fdbd74c782d9d705e8e0dd2d5437c2e293a57ebb724d4ac6df58c58d5c6f4c9d7e9d350bc171fa649887530bc833578371ae2ad8b092fd0081fddcf4c783d8cd5101dab313169173c63449772d9c2cfa748b6728b8518d53608b69cb3652ba0524c987019d9a23de17bca8c346c3fd6c76236541733fe33bd6d3d1a60c9334c933c1f18a67d434cf8708df04ac3b46f84091fa11b0f3714de18c33f5287bf5d8c618df36e978b866ab1e84c852f129a60511da5896a597fb3a86e874575b42eaacd34e59f1fc5f5327a66516b8a85be832e745ec12e058b61d35b38da0cc3394683f30e439ccd31e13bea2a4243e12d305a6375b478a3c15f68bb46f46dca42eca5d0120b791c1672a21d024c426e85011daf1b133404da1a133e4123bcd30033e16d74c2c5613d58377d525addf4b6582426ebc61a069a45a21d96f0537409df2d501216576d4fa2aa4d55646c1065e20a961db7d1855945d91ed36f2a56804c085d8074c0c22cd485e99fad1b1d324b7783e78e58324fd324f33386c9dc09133e5d576c190aef8c099fa111be38d74c78172c3166ea1263508c81c6b79cb19db8f9f8df82987d9f078173ca96ca91297e8cd25ac3919cae98feb33063e2235d61dbfcd95892ccd624c95ac324e9a613ceb3de9cb09de3ed31b577d2a8fd88a1dadd31e17335c25be59909ef81099fa7113ec350784faca6998fd5340bd2aa697a61b6ba5067ab6ae5445eb5eea8d41bd36167ac25a274f0ab99f443cec142de4517720b10f25cf1f61a51d904db45261af4c134d855a7414716bf2751224dd2db89a82f66d8bb690c7bce2033c3ee874578f7e4ad8f684b834f19acf6ea5e75408c2ac4638d52ed5c6412f9fe58e4f7d0d56c86911f8009df5323fc0a43e10375c2b9dbc85e91148619b7e2827331ad17e99a29865ae761c2176b84d7ce37133e08135ea4115e6c283c1f13be4423fc0843e183b16cb254974df818266f430c306aff98648b022cb2c59ac8de6318d92198f0128df00b0c850fc59a2ecbc2365d86e924734d9647c29f673d1c63b242c3a4d96033262330e1a5ba42ce50f8484cf8de1ae167180a1f85095fa92b2e0acc848fc6325d992ed3b562c1455ed5335db003a6c52a9d167c734d3f6cbe01e126ef9b655e51a08ed03609770c8676b506ed6843b43b62c2d7e88cc250f8588cd85a1db10e31e9161d4a4b3c71609686e3b0e8eea389ee0b86d11d8f092fd7753c8698099f8009afd008bfc550f8449d70deaba9c47a35ebd2ead54cc20c62bdce20f8d204b512ba546c8fcd937eb9a839d784ead94cc6f4d8a0d343adc8f65bf545a2296b360630050b6f63b2fe4c7cb8e9f51da662e6b349633e9f0c35339f422c7afbeaa2d725269febf6332daf8a6cb46fd15bba87994dba4dc3a2bd9faea16918ede998f0cd1ae1138799099f8165c9fdb12c79405a59722696760726ca92f9d59e2567617a6c49a4479ed0a358d84fd4bfbd22841eb3313db6eaf46803f428d19ee79ebe2673304d0ed269d2545b48f149a942c9c724ec9db0b00fd685dd2e6181057548aff09a8b65b4433419ed89e166196d1e26fc508df0a986c2e763c20fd3151123cc842fc0fa398757433f6721a6f9111acdd71a6abe33a6f991d5a0f92e98f0a3aa41f8ae1896a335581e31c4b21ba6f931d5a0f9ee587ffbd8b0fded3d3026c76998fc60c8644f4cede3c3aabd1726f984b0921761404ed4e5fa91664016636a9f1456ed224ced93356a1f62a8f6124cf829ba215643e14b31e1a76a847f6128bc18137e9a4678e35166c24b30e1a76b840f3714be0c137e864678a5a1f0e55813e14c5d13810bda59341157ca86517abeed2bb0289da589528fd166512ac5b2d6d961b3d6de3ac9fcfd7322e15c8d57623cced5f0b8c490471996c4e7e992b82bd39f4ec19766f89b1aad611be40458855892b156dc5bc6d4e2211343588545fc7c4dc45718467c35d6f9ba00eb7c5d9856e76b0d16898b3491d8bc835924d662c22fd608bfc050f83e98f04b34c29f31145e8e09bf5423bcfe1833e11598f0cb7439c650782526fc728df00f0c85afc39a8757689a87ff79ff99340fd7639a5fa9d17ccb8e669a6fc0845fa5117e8fa1f08d98f0ab753d95b166c23761c2afd1b56d0d85ef8b09bf5637a66b287c3fac0cbb0e2bc3ae4fab0cdb8c45e2065de77c9c5924f6c784dfa811fe8da1f003b0eaed265df5c698467a820aea404cfacd3ae9fc815f09e6ca214f93b0b660986ed1603a65bc19a6ad98f05b7559c050f84118a5db5269182540723026f8f690820fc170dca1c1f18a218e4331e1776a84ef32c14cf86198f0bb740d0243e18763c2efd675c10c851f8125e63dbabc54c992edf2a92615c2ecece96fb4b22866af50bbf7f93c124ba27b3549f48761121d8525d17dba24e2536af15bad9a44e668ac7abb1fabde1e48ab7a3b068bd783ba78f15a22d7281ec762f21fd2c96fc898d6f04c423c0e0bf1615d886db429355318a472d28e3e3133c8e3314d1ed169c225f05d114d0bec1334a1e4728fcdc84e8c72a7c658c9f3bd5ffc9cf3fe22fb57c8cd42b817c39224fb2f3e1ae19b5fc5c210661c0930107b303e16e1ebcf5bc7c52c51f8d8ce8a27ead287ff7c3cc2b74c895569daccadf5cee9f46c565cd2d4c193e624cc009ed0190077a9511348cb847f71a58c94e95ab893b1c2e349acf0782aadc2e314acc47d5ad7ef996656e29e8a097f4623fc1743e1a76129f36cc8e6d3e998e0e77449ae6635e3937cb5ac264dc23e0323f6bcaeab32dd8cd8993ae17cf0f08548c8c1c3b3740558275e80ed4d5a80619bb3ea5a28d5bbe5ec8ba918597f9cd8d93a629d335de4fbcbdfcad328f25f8af02d5562e33f1029f05f460afc44a16305fe393a6edc5f27b22883dcfcf7fca6c53c4f6299b0aad962d71fdf63ba220da6af44f89650816c28ffd3937d5590ed1e17f374f5c3a89f8b154baf698aa507669a154be761e5edebbaf2969b11cfc62b6457458de4477d5bb2d3dcfee07cac787c236cf1780126f9cdb0922fc424bf1556f2453ac93c15df8e849fe9bf184bf27742d6dd97603cde0dcbe3524cf27b61255f86497e3face4cb31c91f84957c0526f9c3b092afc4247f1456f25598d17d1cd2e8aec654fe24accad7e824f34ec6a7a9a8dc12177c2da6f2676155be0ea3fc7948cad7632a7f1156e51b30c95f86957c2326f9abb0926fc2247f1d56f2cd98cd7d13d2e66ec154fe36accab76236f75d489bbb0d13fc7d48c1b7eb04f318fe908ae004de167760907f0c0bf94e9d64be48f4a75454de8a0bbe0b63f173481677632c7e09cbe21e8cc5af2159dc8b19dc6f210dee3eac39f77b3534e7eec740ff1116f403986dfc19d2361ed409e6efff2f15c17fe2821fc252f0af9029f83026f8ef90821fc152ef9fb0a9f728967aff864cbdc7b0d4fb2f64ea3d8e416659e1203f81098e8414fc24967a59592153ef292cf56aa5a27282d47b1a4bbddaa9084e907acf6090eb8484fc2c26b86e48c1cf61a9572f6cea3daf93cc8764eba7a2728291cb1730951b8455f9459d64be72a7612a2a1f8b0b7e094bbe462193ef654c70e390825fc1b248939059e4552cf5b60b9b7aaf612c9a8664f13a26b85948c16f602c9a8765f12626b94558c96f61925b8695fc3686b95548ccef60825b8714fc2ed6536d938ae0043dd5f7308ddb86d4f87d4ce3762135fe00d3b87d488d3fc434ee1052e38f30c11d430afe1843d129248a4f308d3b87d4f853ac6fd6252b7cdfec330c47d790383ec7706487c4f10556c4750b5bc47d8981debe1a407f85a9dd3dacda5f636af7a806b5bfc1d4ee1956ed6f31c9bdc24afe0e03d2bb1a807c8fa99d1356ed1f30c97dc24afe11cbe47d4366f29f30c1fd420afe1913dc3fa4e05f30c103420afe15133c30a4e0df30c1b92105ff8ed95b5e587bfb03933c28ace43fb14187fc90830effc3541e1c56e5bfb0c1e08254544e3018fc37661843421ac63f98e0a12105ff8b091e1652f07f58ea0d0f9b7a7c604f6b7023421a5c442798ab3c32acca593ac9dce0468534b85a3ac13c5546874cbeda188b1dc2b2a883491e1356725d4cf28e6125d7c34c6e6c4893abaf13ccdb45e3aaa15dd400e3313e2c8f86983d4f0869cf8d307b9e18d29e1b631a4f0aa971134ce3c92135de0ed3784a488d9b62663135ac5934c324178695dc1ccb80d34266c01698cad3c3aadc124bbf1921d3af15667133435a5c6b4ce35921356e83099e1d52705b4cf09c9082db61e5f24ed5502eb7c76c6e6e589beb8065937921b349474ce5f96155ee8425e1829049d819cb260b4366932e188b9dc3b2e8aa93cca7d37609399d968db1d835248b6e98e0dd420ade5e27981be8ee21a7d3ba63a9b747d8d4eb81b1d833248b9e188bbd42b2e885095e1452706f0cf2e2b0907330c8452121f7c14afc25d550e2f7c5782c0dcba31fc6a338248ffe58595412b22c1aa013cc672196859c851888415e1e16722e06794548c879188bd2902c066904e7f2cdb4222b594d2cef5332fdc3d27968bbcb8555d5b7c06f6f1db34880995884b5328b2fc2ca658c585f6c7156be2ed979ea94a592ec5c7b44f0609d60fe735556fce26af55f5c007570bb2ac04ac9d5d5504a0ec184afa906e143b1d2616dd8d26118d6e8de2764a37bb84e30df64a03c15c1dce312113c02135c1152f0480c726558c8a3b06ec2ba90dd84d198caebc3aabc039619375453661ca30b801f0fb43115263fe38277c4986c0acb642c968cfb864cc67198cafb855579bc4e3277cbdc9c8aca09dc3227602aef1f56e589bada3fdbfb1959c06a66c9b5aa3dcd96571f90728d7ea0a8d1dbc7c52e151db05a7a12561d6da986ea683296f85bc326fe144ced83aa41eda998f083ab417821d6cc3e2464337b1a06fbd0b0b0a7630df8c34236e067602a1f1e56e59918e523b2348bf7278a9f73bd2c398f4d64d3bd0cefef65368bf1031736c4ecbe3c506cab52e83d9f5db5292fbfa36f32eb76fce06fc30ccc8b97354c9dce6b92e4b3b0581ea98be56155b15ce035de79d1e61783abc4df85a280e4b1e13bb5f9c56061d59bd143a8e78a5894c81de1ca258f79e269b127719d8817971b4b2f2a81bf6fa60726693ee3fb742c174f6399c22231c87ba127c774dfa3d918e9a3307b8221fa711aec7de3d35ae3553d8b3cdb281769eec776bedc3a22a86df45bfc7e75d9d31c2c9647eb623926104bc8dc8fe7649162ab441c835ac6a6107c9228afc0af4c62b61316b3637431db31a5f45347c7abbd4bc2a75cf48949dce662713b5617b7a181b8cd14a9b342c68cffda5863319987c5e4385d4c8ec9707916fd869f4c5ae649ddc4f8262fc1e39352b372c80e8fc524715e3b6fcc4d420f490a5bb6cdc7a81fafa33e2ea5bc3143d0a8b0a2545b80c5ef045dfc66105a15bfbb8f0886c7caef74e8ceb5ad8e545d88c5fa445dac7748186b5cd3b9222e7c20b052c651d5c6fcee5249283e5fa49f9a3b63f13a4917af5d8d5b76f3c493d8b69d4e827f6f4e553950eed507bc4319a625984e3aef82f13859c7637a46ea6ceada7c572ccea760ed14331b5036ccb7675d2a04c17436b5089398ed86c5ec545dcc4622315b20f267996c9bf8031aaad7b250e6e2e2b8d4a0e9a3ec8ec5e8345d8c261396be2a55fd2d3097307f8bb6ea8be91e584c4fd7c57434c326667425456c0ce09edc9cc95491cae5a237b4d4ab71375563acf6c46275462a7d82d870610b6181488572ef5d9e0f9727a8fd6265545fccf6c26276a62e661392969ca9f50af03234519f35dd92721116c7b374712c216e51578abde0f996d77e8b79a1b080d2aadc583d7dc4746ad1c518a7b3759c16d458cf2331a1f01c8a300ee7e838ec46c8614a687bc12dc684c8128cc8b93a22e3d1529df71997782fa9d2c2dffa3d711dac9754ddb6bf148be179ba18161ac670679166ab5348954cc5b7188beff9baf8ce25b4f18a345a24d541a00423704175b554fcd27e1c68a7d0c76a1916ab0b75b19a6268c793bc542b67eaa8ee9ab6e1e5585c2fc2c66c4c5370b27823de1a83656cea724de2b7028bdfc5baf88d0ad196ae14750bdf797a99ecf9e2b19a1ff7ae499c4ab1385d62966641fb1c27465878a992acdf46db76d81b8bdfa5a9cc9160ede94962c4ac48f666e37b36e9b5a7d3ef35acc4627919968a266305b16d9fe8533ed395b857505d3d86322c7e97ebe2d783251e0d9eef51a6d07215a6e51589c7744d52615e5aa94099c35663b1be5217eb01680932bfca11069684cbaae631780b679db6bf91debcce1a4cefab747a8f485a32148a39613eea5ce695ece55edc5689330492950ed55506acc5e27335d627489c47f828c81cd14eaed0b494529943e2edcb65d518c37db0185e93cad8887e4ea850d85ee2d23c93f342e5581cafc5462653a9af528965a6ebac0a2ca6d7e9623a35a5d40ccef0f9f950c5bb26d3b5128bedf5bad8ee92345d696744a8e74ad661346ec07a45a98ddf266b97256a79528de8aec7e27aa32eaef981b84e107d76bf7f5e09da2fb88d264aaff46aca0d580c6e4a7f2e3e594a65326f6ec4e2773336bfa56fc1c42f5da9a95edd262c46b76023c7c9470852a94f521967301f8b483f65f7c538dcaae3d0d780834a5375705d75958cfb611adfa6d3b857d27a223a6b5c22ee72afaaea291536639adeaed3745882767fd0d263355f2bdaa0d199068afcb23f16973b307f05b312c0ef3bc73f8df74151077be2318d97324e8c02f2fea0499c0fc0e27ca72ece3d0396160d93dace0ec4f4bc2b95fa13e6dca0ce53a4cea9d630e98e1b6ec16270b72e067bb09a9dbf8216986a2f407d6342652b46e59e54e6f05588266d8a68ccb01c573db5ce4158ccee4da50f675ae7866fc5a71fd383b198de17be6d3b9415a4d1b6e55f99c4e0102c06f7a7deb6e5619ab76dfdf861f7ab2b850ec5e2f7402abdec785bf4c7744a648dcc4b98686ce36bb34cdbe361586c1f349b434cd6925fae99c1a19b773a1c8bd543d8b872e23661f494d3207975ca2c5ef26327a426aa2dd26b9f1c81c5fae174c633fd9c39cf7b7909f3fb614b594daf9138128be123a9949e7ac2e9b56cd2edad1c85c5e0515d0c7667fa190f93156d99f27a4ea50caae7fd2f12e14b032709b2fe88f91a110a6fdbe776f31e45f2aa623db0aa9d3630a64d17bdcf3558e569c5439e5fd522e34b67134b782ccb3f5e47fcd73bc2934a9dac1e59c6824b732708f96532e62a070f1456e393e64b8e077a6df952f1955a649c2c16bab6e940d03a85b14b1ea73d9145c391483d192325cb23bd3d27bdadc5f4719eaa393255b372f9d1d5917e695a53722d9ee0a1d5d2db50db38b2b0c4d0e9ee0b9825735a842f54e6592c8f451d8cfcccbd3a7958c193e983610d1002543b3ea9b805a020d4896b2f0ccc77992d67fe8442bb918cd5ab9395c7d3e0494a50db015085b2f48aae7149217616c03aa74f14d65394b05a0a58dc78e788c0f125412e607ba77614dbd394d8f8660d13c518c05a0f9cefd9ab5a7718c00a2710f2636714c267281136f37ea8cec054d10ce1028a444796bb4bcef61a322e00bba17e14d8b394c05a692a0097c1356b1405f71c25b8161a705c20ef7c73f78c75e26eb113d016b328b4e7a9ad2d367b4ef6fe2d95becccaffcbb73a17c0e5348e827b81125c1bc644bb2cd56ac10578a7804ae1454a788d40569d1d331aef02a61bba4631bd4489a901c0147560770151a70e51442f5322aa2b1055385546d56e1285f30a251cbe15eeecaa36bf9a1ef61da2e68a427f1de38b7b78313f470ee3b80030af5b14e0ab9400ebb3d83e269f3177015071eb28a0d728013507cd8709e2c34a3150c4eb3fb74aac89bda3c85ea7b62985cca5819d37464401bd415debcd1693f9d10db6dc68b5ff911d45f42675e313da90bfa133dfd5483712e606bcb13951786f51c26b08e02d60fed2ab424720ed0232e1db99aaf9d41a601700f18d7a15a077280175005634896d14b15e57d5dbe3eef4c5c2b2e68a32ac589468655e802e40e4ff2988ef5242eccc580c3c3e30cd774029a9da9ebed8f12e752b3054fd1e25ca26b2d654f6b649b6f3fd12ce0954a055ff7ea6c6bc78ed093d00d5308e4bfdc93fea45c17d90c96607dc20609c1805e3d3fbd1ad105c80b7190c4f7f98a989dde81a707f770217404d057dca8fa8db67fe5ce544e66fb5c87b916ed49cfd41fbec63ea69b599a28c5a19f00a9ae8bd5e2e42720118dfb94901fb847aa44265bf59de6bbcdc5ae6092cf4fe750bd91ff951649f52372982136a8ea1027dcacfa80b775e5ab9ea88724d6e14d4e7999d6f8c5d7f51ec58dbab0cb8057c413fbb1dad155dee143d51270aed4b6a6b9b247c72d689c0a33bc2467d652bbcfe66a9179e0be03e01e0bea276ae830733b8e843c1dd8915acafe93d767ce7ba35428cdb6316a381957d4309ae2983b347fe4614fcb75bee0039c089f35bea891185cbad76d82da01df61df58cf75c2f1b4e60a96fd7ef02c023c010cff799f2aa566d7ed72649ce109df07a7502c283cb47d35ff46046185f9ed194f9c3df6bc5dd4ad9fc8d59aed1c37bc53acd7f80cb2d72d29e0ac949daccc849d9a933c7d8212f274defee9c94c65e7242ce6de418b8ece718b5407252ee4ae418b59f73d22a7c738c46e3738cfa8f3929399fe718795ce7180f82eb74c67d6c73e23cda72128e1ce7687d9472b4f3b7398843614e027fcc1cc41d2327c984534e5ace6739293a14c5a742320f881ca4f5949364942b2785466a4ed2b5483909078872521c9ccc4187c67350a7869ca4357a8ed62329d6ea820bd1a2eb396175155d87c91df4d88fff9f2fb5cce34b2d7fe210664a0a7efbed67ea06304f357f652daf6713efdd36c86b590574e814a743ecf9bbaaeda6d3a6414ceb6ebb542298567f0238aaff6213ce7c2771be0970fe6a13cec14ee2fc1fc0f99b4d380b9cc4d91e4c11fe6e13ce214ee2dc11e0fc837a8a7a91ac6262b1fa8d41fe1a19be0e54f8f60699fbcf4c58e372d41ea1fa8bd80836940e67632a9c1d01ceffd98473b89338eb029c7fd984738893386f61519c7fdb84b3c0499ce7019cffd884739893383f0338ffb509e75027713e0570fe6713ce414ee25c0070b25a16e11cec24ce8300ce884d38f39dc4b902e0cca2c4d95ae25c2a473483db7bfaaafb5b99e6d181ac4305f244d0e2ac4509b2338b8e47a73a5fc4df2f17efbad74f9f022cb436255835f930881f38ec4154bb50f27b19e8a99301dc0b58661d4a805d199cfd497d06da65ebec09acb32e25dc362cf1a01c14c76d980c653d2a9457013bad4789b2a9443934f3c3716476f800b0c3fa9980373cf3f07ea682f72480d780125edb248da0d84c4c3ab841968dbf03301bda0473988330bf07301bd904b3c04198ef03988d6d8239c441981f00984d6c8299ef20cc7701cced6c824938b14b06f33d00b3a94d30098735c860be0c6036b309a68b3d9cd701cce636c11cee20cc9f01cc1636c11ce120cc5aa0efdd9212665f09b3cc7ba94c5c95273d3c8dc5f4d416c292b52515f201c0ffa81525f2f6cc7c9a8d1028d95406dcb5b9b56d4009ab2b32a0a702a06d6c034ad8cc27037a0600dad636a0844d7d32a0e702a0ed2881fa0b4e5688053efe82a3e5a202726fa0b8316836b5afc9098bd8b3d4082b9cad5428ef04d6d7811265efb84653911036598eb897784da412619debc594da3a96e8404652d874e34d0076c74cd86d6acd7d17516e0f8a804e942879593393f1f56a6ac11cbaa385031eef6d00b6ce94d8ba684ace54cfb027b5c863a9d0be08327717eacc3d4e2c435f2317dff22338e731df51815ba85a92ec2ff476af7eaf0dacb42b254ab5230177965925032f12cda20c39cc90958f270384d99940386c9b43f82c40d88d12614b16f53952d7714205ff8c78977d8b9e0610b7cf84ab2bd6548f5f2c4de8984086f37e50c974b70927a9e73019ceaf00ce1e36e124f56ba7abb7c170704f9b70927a2191e1ec0e70f6b20927e90240329c9301cede99986c4b6dd46810e53030d9b8d1580033c7269884931464303b01987d6c82e9e288665b00b32f25cce89e087901a82ef77a3e67517cfd32b1984aed8456c8e277d372b9e7d30db42dfbdbb3aac245cf8e2700ca01994009d7a5cdf04ac52972e7bb65de471b33619564288f06d97b207d5503e71917b19502dd78b177db4a296ab277e55bfdc56d47ebc0687a1300333713a3e995627fce8a2adf22b5b19dbaeaa6d0f229db9764687b822c9f672b5ad2a63b19daab80d50eca5469eaefe7c97ddea213be15991a226e4e857218b0d2fc4c34dc53df40ca3d479871c02e07db0493d0b3980ce61800b3c0269884eb84c8600e073087d8049370051b19cc8100e6509b6012aead2483b9038039cc26982eee23330ac01c6e134c171daf7300cc1136c174715940170073a44d305d74b81e00608eb209a68bcb01fa0098a3296166b3f8514eb3055684f53bd902abcf410773874cd82ae6311c9c02262c45c946e4fb035b1d63134cc2fa9d0ce6100073c74c4cb3f151a46d6743b34e00dfd84c2ca3e2f8e2d75c7061d1edf55c9eb7fc08001d970987570e74db72783d09201c5f93e56370c6d2c5ed504e0735f7049b60bab81dca7900e6449b60bab874ea780073924d305ddc0ee52400737226aa9da1db5cb5b323a876a6d8dd85249c0922eb42e6017fb8a99998498fc79bca5c3a61ef9c6c26bd1e405b48dd0782f63855741fd5aec4fef254f7f0b506197f5aa6165845ddbaa06712b9431719c41301c4e9f4d91b3fc7b5c6dcbbc82aa6e600ed8c4c38caa4d6507271a7cdb100e54c4a941d4156d77914fbaaf34cbf5adc75d9c3f837007556a6c690921dc1ed32d0d100e8ec4c2cb84add9dcbc589b656a06f34c7269cc39dc419013877b20927e9d9a964386f00997dae4d3849772ca6db680fe09c6713ce614ee27c07e09c6f134e3737d97b04e05c6013ce414ee29c05702eb40927e921f36438d7019c3bdb8433df499c4500e72ed4fd22de639fe3fdcb85e0c783cd15aaadf3ee13f68b6652011d0680ee4a09541dcc540387cc93ed0bb70f80b75b26863e60d6d66fb917bbcc9fd055fb4f2aa8bdc0c8fbee3642251ca42383da1340ddc346a884cb5dc8a06e0fa0ee692354c21a9e0cea2b6028642f1ba1127a2c91417d1a405d64235442ff1032a88f01a88b6d844ae8c14406f54100b58812ea60163f3117ebd230c1fb7795f73ffe77746e699998032d113d653e15b24104b1126c1d3d5fb468d5640a61220ca64a846e2c9a084b32313b9a27126285f099e7e0a23033e401453687ff1f40b994126507163f91976846dfdd7d6e7e01488b33619dd8804aecdcbd8b87e13e044adb924cacf4185413a75a93e13b0de05b9609ffbbf4360972d1ffee688076b9ad68073989f651507eaeb0c7499c74d76eb222603380596a134c178f13df1fc0dcdb26982e1e27be11c05c69134c179d1cf70530cb6c82e9e2fab95500e62a9b60bab87e6e3580b9da26982eae9f9b0760aeb109a68bebe7e603986b6d82e9e271e2070098fbd804d3c54da70f0430cb33e15d6fe232e6e296942b416fbdc236a02e6e98ba0a00adb40da88b5b531603a0eb6c03eae2c6a92500e87adb80bab845e5320074836d405ddc40750500bad136a02e6e55b90800dd641b501737522d0240f7b50da88b5b562e0140f7b30da88bfef64b01d0cd9440b359d80d5c084b54b20d5cae0178f7a7c4db44e2f54f3a2a13f39dbeec52cafd1bea5081e3ff297007d4a40f48acc71d6133692b15ca96c08bf9c04cccb4c767f1d4dc18dc9b697f0064ef2d99a88eb8f3d74ce150b332e09e38d1fbac5c84e8f22e0e5d41b6df6aafad128e3891d96a07500c1c448976bb845551051dba8654e8b280551e9c89ca081b9b77ff3484f600e5219970482c60dbd2d6d30b01be43335d3eea9724f85ef46b85c52a976e42cbfc990aed18503e1e4689d6f4c476d2c961324bbd11348d0eb70967be93385f05388fb00927e9c01c19cedf01ce236dc259e024ce66a0ec3cca269c439cc43912e03c9a12677716bfa66812dbc8f870c73aa636c098ed7dcecf802d175b611431be5920479f91ae26d9f9afed4053ea984cd86cea1b06ba38ffde1a94a8c7da8473b89338b300cee36cc239c4499c3781cc7ebc4d380b9cc4793ac079824d38873989f34380f3449b700e7512e76300e74936e1245d6744867336c079b24d38dd7454dc00709e6213ce7c27712e01384fa5c4a93b886201ab10fda2424f2197fb420b406bf3b44ccd63ce13b0d67992c7799f17b38572efc562b1f76289d3f3984b81559e4e09b43953fb2ee46f53131d8b81459e5193fe1f501ce9866b648b616e0528cfccc4ca2275daabbf9dea12311ca75e72fdc0b3e520639f4509b32980b9ad6ca7321ec03b3b13b397e96da742d80c22f3ee980132f939b6a225edff90a1bd1158edb999283f31ef8fd8aa68a893dba9f401767a9e4d305ddc4ea51f8079be4d305ddc4ea5378079814d305ddc4e2507c0bcd026982e6ea7d215c0bcc826982ef6867a019817db04d3c5ed543a009897d804d3c5ed54ba009897da04d3c5ed5406039897d904d3c5ed5446039897676278d86442cdc5ed543602a057d806d4c5ed543601a057da06d4c569b50a00f42adb80bab89d4a25007ab56d405ddc4e653d007a8d6d405ddc4e6503007aad6d405d5cebb60600bdce36a02e6ea7b21600bdde36a02e6ea7b20f007a836d405ddc4ea51c00bd3113d3c3c3323f3d4c36d1f6048bc2bba9267d3e32761edc562a947f013bbc39137638621b7253781bd8e12df6d82161bf9ccc0edb80956cb7d20fc3ad109b48f14fb9f57151c5deaf75de874ba542cbc441ce7ced9a7b3e718d805dde96091f0f6897265e1eee553d7781f2f2f64c64f9d4868b5d9cadcc05567a47a6ad54bf45c57c5115ad16d99f8b5b458b96ec38f2fea034bd33335ec583590d781593f9b9ef06b2f95d99587b81d5ecf17b7c10d6ee6415d27300e7dd36e1cc7712e7f700e73d36e124dd629f0c6703505ade6b134ed22936329c0301cefb3231a39eda8a8c7c27dd136a0198f7db04d345f7844600e60336c174d141fb1f50093d68134c171db4ff05301fb209a68b0edabf01980fdb04d34507edbf01cc476c82e9e290c72f00e6a336c174d141fb5700f3319b60bae8a0fd1380f9b84d305d74d0fe19c07c821266570d4cfdc8e614f949ec4c11a1a5f6a7823b1e34e29fb4a9b74eba6895acb77e07b0d5a76cc249daf624c3f916c0f9b44d3849f74022c3f91fc0f98c4d38499db5c970760465e7b336e124dd2c920ce73880f3b94cd4f3704ba942ef9399de277cc3dd32a17ca960e3ef8db42f2bc9cc56536470ff6051b8cf53c26d21e10ef1febf4a065e2430bbbe07cdf500e10b9408bb6bb27baa87408cf38472c09b68dba32bb38820e78342e0c54cd8292f04a6884cbdadec2ab733a8e55fa244d859222cf35ee2365a22b7309fcdd4c6e5b1d514f43426b44d32b0df01b02f5382cd0e802d13fe7595424cd4c32e514fdfc541937700de576ad2192c63bd7a32ffcf8100e5ab9428bb0994bcf1345700e3878dad979f47ad75115b2980f3c346977a7ffbcf277b57ded8223c2793cec901b4055ea304acced31a241a54db8aabf7c1c03e5faf49576ff74bcd8b01ca372851b64a8252c594d413f9b10811c611a0ddf96626eaf67827ef540f64269cf7243b90f92360a56f65c23b39bd7d125d3c60f46b5015bd9d8902006b36450b00c27294ac00380158e83b9418f991e173e4809ddaa6b7505826cff6ee35859a01fb7b3713f697576583c572906e8d18f5747be7ed6700c6f7a8a78c39b08922e012560e46398baa70ce154ff9a22dc22190395430470098efd764fb32b62b49d83022eb4ade03cac50f3281322fc18087db03c81f03abfc3013639b05dbdc187c1940f85126c636b9354e12cd9d75428919de274b4579399b6d10a3eee5de33ded65cebf4fcd04800f6e34cac710b4ebecd9675b8ab007707e5e4279400eb0a80bce9532ea4ba87aa25b0b54f6b72a03776f4c7454ff79900e5679428d5861305991f8524b3c3f500dee79918c4e5bb75647c552fd9c0c33f00df1799707f49fd245f1777d96a062a902f6dc239dc499c3f01ebfcca269ca467a393e1bc06e0fcda269c6e6ea9772cc0f98d4d38873989f34d80f35b9b70926e894f86f34180f33b9b700e7212e73480f37b9b700e76126705c0f9834d3849975791e15c0470fe98895e508dec6d44d6899c0af0fd64d322804194031a64381f01bda09f6dc249ba130219ce6f00ce5f6cc239d8499c758097d0af36e124ddfa9e0c676f80f3379b700e7112e73480f3774a9cf5858012af16f7dd0748a721c8dcf9eb829afb0f4a5cbd59fc3444ac579abf8e6795f89bcf36ae13222709c03c5af305b50cb8a94ea5825d0060ff991987e9fc6d68aaa214d4e3ffab4987968cf5c6c9b2fd54504afe95d91566dc7960b998f52e777aaefb349099ffb6c77ddfc51d091f0719fb1f4a94ad19773be5d5493153eb7330e7bf0a07b3757d6093ffdaea614e3a424436d1db06d8e87fb6a225ad8cc8d05e02ac96d5b6e6bcd4c14eeea179078019b109a68b9e457702985936c174710fcddb00cc5a36c174710fcddb01ccda36c174710fcdcb01cc3a36c174710fcd2b00ccba36c1747161f3a500663d9b60bab887e66500667d9b60bad8677f08c06c60134c174f117809c06c4809d3fc2cd44194d649e6cf310ef4d61bd90694d042c9808e07401bdb0694b0374406742400dac436a0843d2232a0a300d0ed6c034a38924406740c00dad436a084a34964407704409bd90694b0774406b400006d6e1b5017dd608700a02d6c034a38b24406743800dad236a084a34b64404700a0ad288166b3b05b9411d6f9645b947d02f0b6b6a7573fdcc9a9b8a300cc3636c174712aee1800b3ad4d305d9c8a3b10c06c67134c17a7e28e0030dbdb04d3c5a9b83200b3834d305d9c8a3b00c0ec68134c17a7e27602303bd904d3c5a9b8e50066679b60ba3815772c80d9c526982e4ec51d076076a584d99aa5b2c860a8d86c8ab0bcac43057207b0c4209b1264170dc8d45d66099bef640eb34f011bed4689b69b06adbf5e83c35bcda689455a6b138e34b938b0cc792ac0db530236db9ccfc5aee66080b27b26cad3e84a23b5a326175424c4babcde684f90e97b508234df69ce4587866c80b3a74d38499b4d64381b019cbd6cc239c4499cf78252b3b74d380b9cc47931c0996313ce614ee2fc16e0ec6313cea14ee27c0de0ec6b134e375d15f70438fbd98493d437990ce79100677f9b70e63b897325c039801227ffa18e58726f88a329c034d026ab1be1a41f5273d03ccfb50927e92c25194e0670e6d98473889338af03997d904d380b9cc4791cc0996f13ce614ee27c0be01c6c13cea14ee27c18e02cb009a79b1ec6d301ce2136e124dd0a800c6725c039d4269cf94ee25c0c700ea3c4a94e541b24e67f32beb336d98e5ebb8096e6704a809d24c032ef256e899cc33ac63ddc8b037619dc27967082976c32ed6a80750425567884223f6c96abea9fd7ab769c2b91ea978819f52201dfdd59cadf41861f4909b657c05e97b078df8ed4bd40086d986c88641870b01945895aede1399c6d6b27a9be00ac75342542e5a3a4acb542d81f2f5b274b78255af72f72171ab28aeb4b50c2ee4089d66c7b54171718dc0b508ea144d9015456ea3acb7b9db358e6092ef4fe9dc8d499ab2e57534301d21d3391f1d3db289570d51b59b5b41f403bd656b4a43b3290a1bd1b5457e328d1aafde387d5445f8a2cd3ff09f08da7c467be183bdfc95d967605597d826d405d9c1cde03009d681b501777599a0b804eb20da88bbb2ccd034027db06d4c55d96e603a0536c03eae22e4b0b01d0a9b601757131cc0400b4d036a02eeeb23415009d661b50176799a601a0d36d03eae22e4bd301d01994409b32356d97f163cac87ae9135814de4c4a78d92cec165584b649b645d5fbc03667d5e4c0f26cef93bdbdbf96b24a46ba36732b15ca8660066936254ae5ec9027a6408a8420ddb09cdbb3499f808c3f2713239ff1193f95b14fc24c4f56a63e0a32fd4e94687bb0d889ba32064f2b5c2067ef3789034afd5640099b223f8e2d10089bfafda9303f0f30cfcdc400f32031a99ce19a9f0cdf5900dfbc4c544d4b592adb06b8b80dcb4ea02c9d9f894694caf0bcb42c0e1c12b9edf93f5d002c7541266a7eac11158449ea844b86f3268073a14d3849fbf36438df003877b60927a94f3319ce3f00ce5d6cc249babc860c670bd06bdad5269ca48bbfc8708e063877a3c4d95de0e49b02cdf45e2af66e9569dd71b9bff34a019e0fa02cf5fef68398ec5df937c50e426e019a53bb67c266535f4eebe21c532750a2ee61134ed2bdbdc970360038f7b409e7102771de0532fb5e36e12c7012e78500e7229b700e7312e75700e7629b700e7512e78b0067914d38dd3ca36b678073894d38073b89f3108073a94d38ddf46d2a05388b33333ebf2dcdcc7f01f09550e2536e0d3ce065c21295ecd5f215f746e42300de324a78a96d8cae2a193290642be3ee03bd9de5b680747189e14500e40a5b4012ceae9381fc1a802cb50524e1582619c84f01c8bd6d0149b8cc800c643b3028bcd21690842e5e6420eb039065b680246c7a93812c002057d9029270c10b19c83e00e46a5b4012bac890819c0440aeb10524e1325632904300c8b59420cdb6aa70f1f8c6eb4003681f4a946d998907dc1027cf0f6e016096db04d3c5f3835b02981536c174f150a7ed00cc4a9b60bab8bd4f5300739d4d305dac80ea0398eb6d82e9e2f9c18d01cc0d36c174f1fce0da00e6469b60ba787e703d0073934d305d3c3fb81d80b9af4d305d5cb8d21ec0dc8f12269f639c243691e42a164aa0a5dec7fcac4bfe997b13b4dcff55c1db5c933df1d8a57c8475f7562a94596050637f4a946a87e3e8367cfa5592f359b9f053af60cb84b055b4b38ec752812d07367a0025d8ee2cb814d55f381ddd31960be4de1889cb51171b4bef8152f4404ac8c16dcf7da07cbd2f2f53276a473add3d937d302814b664a27c4dada677b105da0f14035b2951ea16fba75ec212a2252b61bb022b3d289399bfd4536221d8ee146f1110667eb216c12880f560ea96e922d180cfb8eb205976bf0f64f74332d1474a6d8e6890931dcecf40ed7ea84d305dec70fe08601e66134c17a7dcde06300fb709a68b536e1f039847d804d3c529b7d700cc236d82e9e294dbeb00e65136c17471caed2500f3689b60ba38e5f63280798c4d305d1c457a06c03cd626982e0e783c0b601e970998f014a24216bf4f87cbe70ffdcba2308fa78469beff16617d4e86f36e609b27d88493f49007329c5f009c27da8473b093382360e0ed249b70163889b30bc079b24d3849dd0fc9704e00384fa1c4a9d694f31d5fb79d43c5fe0235f9a999c097bf4de19b0cf09d4689af95f7638ef7c33fd39a8b5aedbdbec27b7d8d685bee2bdc664ac52ff730d601184fa7c4d895451be7fe2cb9bfa5de383131562afc91c631be752e9f992cf204f0f2b1d8e9c6fa2e00ee1999c8e27cb837e3536764f8ce04adc93329f1853b6bd5c56df12702b467d98a9674208e0cedb520d39f4d5d31256a65aa98923a1d3c1621c2381cb42ecfa1c498adc16876180ee1ac10d961381f8202e05c5b0b00d2c36dc90a809301daf36c454beaff4186f64b50b69e4f89b69b403b5564fdb98c3b6f95c8366ab110a59c67b7b5ed9e1b02c01764a2f2c2fc3c27088b2da7adbc5ea6aabcce0645c085992802e22baf540a01178fb267a05d7051a66693548755f5fea3e3016e77503b82ec7e3125ccce1a98c94b5777c11602b09750826d21c10ef6febf4a065e2410bb7e28ded500e1a59408cd961cb8e89c3803a0bc8c12e5f60628e779617221956cb6f7971a41ada0adf15fa5aaf1cf0135fee59488d549c26ae9c15a31fcbc22a1cdbae882d303d4f3575002ed1700bade7b71a9b69f6f362a40089d6c54603a807e252574f3d35e087192edbadd04140a57d98473b893387f00d5d8d536e124dd57840ce79500e73536e12c7012e75100e7b536e11ce624ce3700ceeb6cc239d4499cf7039cd7db8493d4419c0ce72480f3069b700e7612e71a80f3469b70e63b89732f80f3a64ce084c37afec8fd6af13bbacd500606f3c8869cff06386fcec4605eec02860a4f4c496610928d87960084b76462300fcbde19ab7ac8369d9e02fae8b7d624cad8312617d7193f0cfae7b7652a63fb63a35cd04699a933304aff2715c2e740c6be9d12612b80b0a4aa5a518f5d9fec780560bc831263bccf887e4ba029f2838ced5ed39f0a6d6780f6cecca235f17422444bd630fa11a0bdcb56b4a4b53c19daf301dabb335135e56f7313c87d01c27b281146bdef6b60810dd95c500f80efdecce02b08b4375db6be8340dbf23e4a7cca4f2935f7857c271d18ce02b678bf4d305decf59c0d603e60134c1777573a02c07cd026982eeeae740c80f9904d305ddc5de96000f3619b60bab8bbd26100e62336c174d1b56b0b80f9a84d305ddc5d692b80f9984d305ddc5ff61c00f3719b60bab8bfecb900e6139430954bac89cb01a175924deb0e025dca276d034a68a16440f301d0a76c034ad81b2203da1f007dda36a0843d2232a00300d0676c034a389244063417007dd636a084a3496440f300d0e76c03eaa2f3d6f600e8f3b60125ec219101ed0e80be601b50c2912532a03d00d0176d034a38ba4406b42f00fa1225d06c1676af1bc202806c26f36680f7654abc66874312369fb652a1dc0e381fbe4289524d0a0fad893975b221915f5914dfab94f8c2ed0b42d853227398f91364f2d728d12a47c44155c377c5ccdf619effedfab6aacf030b7ddd5e0b7571f3aae6a0ec7c8312adf9e26a1747433b830cffa64d38873b89b321c0f9964d38873889f31e508ebe6d13ce0227715e0470be6313ce614ee2fc06e07cd7269c439dc4f92ac0f99e4d384977f924c3b907c0f9be4d38073b89f35080f3039b7092fa8890e1dc1be0fc9012675def075c4ced5e8fa72d40f511252ab8be52ad439fe8bd582ec27079e1f4ff00c28f2911aab3d7f303bd729787dbd602789f50c253fb1ee609bbe327c3ac657358891c1bf2773b2c1102d52984d133632a9cb6cfde00f1a799a85cb0aa25fe3c42c2c95f329c37805ef86736e124f53426c3f902c0f9b94d3849b7e921c3f903c0f9854d3849778c23c3d9140c087f69134ed2fd0cc9700e0538bfb2a99f33c249d7c3b620b37f6d13cee14ee2ac03707e63134ed2c347c970decca238bfb50927e9d1b86438cf0038bfb309e73027717e0a707e6f13cea14ee27c1ce0fcc1269ca487de93e19c0b70fe68134ed253dac9706e02387fb20927e9260064388b01ce9f2971f661c19334f8c05db1c783fb67aa784677988381c1a0c6797f950b4759d20dd20ecc22023e11f49b7ea104de9a255ef41a5bb2928124db99b317b0dc5f6d01e9e216a71d00c8df6c0149b8b0800ce42900e4efb680245cf24206721000f9872d20096b773290ebc030c89fb680245c6a4d06f2026091ffa304d94980c47675afa10370c95c165a01ac7f5162cd63b1adcf75a8b73bbe49ef04ef8d559e3e6bc42f1ed50cb5455752b5450781b6e8df94f8d5062ca94e89107a2a914d885c0bcada7f6c8249b8570819cceb01cc7f6d82e9e254ddf900e67f36c124ec7692c1bc10c064752c8249d8d0278379098019b1092661f7930ce6a50066964d30091bfc64302f03306bd90493b01b4a06f37200b3b64d30093705208379058059c7269884fb2991c1bc12c0ac4b09b3338bf7999f2af6ff98ecfd5b2a30167bf15d2304732770b78f20db9d45c1d6a304eb0f98ccf05e582adcbde1362a35366042b6b94a3d80b53e2556b3e3c85cdc4bfe3690f51b50a20c7752918bbb83ac06681bda8a96d49b840cedada000689489da1f1bd18f2d00863979d0c94c60a78d6d82e9e24127b300cc2636c174b1729a02606e67134c170f3a2904309bda04d3c5834e260198cd6c82e9e241279301cce636c174f1a0931d00cc1636c174f1a093b100664b9b60ba78d0c96c00b3954d305d3ce8640e80d99a12a6f97ec86e6e9e763800dac636a02e1e74722400dad636a02e1e74b215006d671b5017577d1c0280b6b70da88b079d1c0a8076b00da88b079d1c068076b40da88b079dec0b8076b20da88b079d6c06403bdb06d4c5834ef60740bbd806d4c5834eb600a05d298166b3b0079d10da2bd95cfcbb006f3625de962cea3bb25ef886f09ded96089f910c9d80b0950ae2321685d8ad261d1a624f8b216cd493a16c0c56736c4f8952ad8c87be4c98030eb9071359f6ee0e2cb3bb3d964938c2446699ad8165f6c8843f487c45948a470861b39ecc1fe4765009f5cc8495a636b4ece2645c1ec8f0bd32e10b9a8ed712e17828998d9e09c0f6b615ac8b671c1d0fc0e6d80a96b02820033b1180ed632b58c23e1319d8a1006c5f5bc1128e469181cd0760fbd90ad6c506563600dbdf56b08423fc64600f076007d80a96702e8a0cec7e00ec405bc1bae87bbf1b009b6b2b58c2f97d32b0bb02b0799460d539c743580d9c734c86ef04806f903d63002e7aeacd0128f33331868a0dfac56f95e1e29e384f82d1a9c136e1243d0c8d0ce7b70067814d38498fea23c359170c4b0fb10927e9a9b16438fb029c436dc249ea964b867306c039ac26f779088eecbb58af170298c36d82e9e2b2d97e00e6089b60bab86c3617c01c69134c1797cd76033047d904d3c565b33900e6689b60bab86cb63380b9834d305d9ca9cf0630c7d804d3c565b34d00cc1d6d82e9e2b2d9560266bd3a01e193e3844f103d14de4759caa267130f645318df5ada3fbd78a9f77b861800ae648b3d1cbb7bff334b813dbdffe9ee47c401d493d846b656dce5f28a85ec55de53ae5905cbebe1bd32961b44036910396200709cc7bcd27b672e2b11a16f62f3987ff6f26cef5fb59bd93a812427c277f89ee3dd5bc7b803300f61b5a7c90a562e621c7b36734ea4bee05422763ce7f1e20073a4ae6a17f44239f458eac5b9486852eebd535b84e3f7fb72224dc02fe5295b2806ce2b8456cdc4f3a89fe254f1a63a3d7aa6609f13e18ed9fedf85de773c76512d72e20e8ce7c91e89349729cd633953102af2e41689ebfc2a5d727b7aaf45f864b83fb03fb06a487fa0dc667c95fca5ee2797c9d339b1b4713c3123fadc5d566d169a2c467ea6e2df2f13dbb29508a98549639a3c7eb8b5374e902ab9fc20996d3afee379bacb641766da36d2c8fb6b8197f2bef012cfb8cbbdbfb9524b4bb2589dff070cd9b11739d10400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/282ec8a3a5b8b024dacebc124af7b602.asset.meta b/Assets/SerializedUdonPrograms/282ec8a3a5b8b024dacebc124af7b602.asset.meta new file mode 100644 index 0000000..d59f7bf --- /dev/null +++ b/Assets/SerializedUdonPrograms/282ec8a3a5b8b024dacebc124af7b602.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 265c5c9db160e394e9aa2b78b0295c0b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/297080557d816484cbab03269d8f64b4.asset b/Assets/SerializedUdonPrograms/297080557d816484cbab03269d8f64b4.asset new file mode 100644 index 0000000..674250e --- /dev/null +++ b/Assets/SerializedUdonPrograms/297080557d816484cbab03269d8f64b4.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 297080557d816484cbab03269d8f64b4 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e780e05adc4af0502809490850c7a1455212a8d01602099012208d50a852f796ba517737eaeeeeeef2abbbbbbc3bb333b9e7f6e6d9dbbdbd6733cbfba79fb2dcca33cf7ce7197f66a6492eb3fec446587fcd6373d8443692cd65e56c155b69fd6ba2755d61fd67ff52f78b598d755d6afd5d663d1bc1b2537cc9ff0c8df5b0fe9e6efdaa6575d697f56cb175ad14cf4b5885f5efe9d6b715d62f7e7789f57f85f556ac99f5d15c3689cd66b358f758d71422e6898f6ae5bd188f57aca5f5f704b6d67a5a2194e281e48a47ddadbf4aac27b5e2d90a4b69f5de7cb6a788d60aebd962eb9b1a5665c95c2424b6bc742b26fec1ec4b1f79ed2bafbdadff5bc97f3795ff6e29ff0ddfcf92d7cd3dbedf0f7cd70afc9b13bad0e5fb6cfb1aeb6c5d9b5bd787c06ffeedd7f2bdfeb6bc26cb5c640d94d741f23a58ca7cd883fe2de475488af8bac9180a647961d6525e87c96b8ed4f79134c31f6e338a6d00f238cb2e409f6120ec56e039bfb74580b8ab74ecea48c7ae763a36394ba6dfc7f2fd11f23a525eb794b2ad773a1f2fefe5caeb80147ae5d9dfb1b12c6eb356984dabe5ef51f29a2faf0552b7ee52d747c1efa0baa8342d9432bbc9301ed3dc57eff3e78fcbdfa3e5b5c8915e63e47b4fc8df633deae3c5fe944e3d64184f82df16c7660b5d64a974efe948f79ef2dbf536c7667738e203ec4f2b779c94f7541af1e8e588472f5b97ac9cc4f752eaa0e46f25e5f496729f06bfb9dcd37cc6ad99fc6ea3fcbd354b5db6f5f1f06c3b5b4e4bc57a7b3b9ce65decfbcdb76189b6bc6d0a3d55daf671a46d1f29b74aca55f1dfc1fe1d539c870039fcfb671c72fb3ae4f695725519a16c3c959ee3e57592bc4e95d729ac211f6fa9c29e28af9365989bb3c4326073f97c42fcdb6e6b7c72734ba3698eb41e20c3ed9742a6fa7ebabcb6f2f8be7a67c7003aef24afad3d86d95a5e670408b38d6d0b2dbf77d8c2f62964ceb4f9b6ac033a58725a1d207fcf92d7d9f25a2cf90f70d8c1000f76904a979da52e0ca481a54beb8ef2f71c792d49d485953a747a36733ac5b2a5cce7c06f7eed2fef3f0f7e735d8bed705aab36c95c799de7d079173a9dd9aef677edda02dbf0f29d9b7ded66c7af8d6c3bb491ccd9ee0edd768aebdd7212f856e9e1253fec21590c72301e2475506cf774bcf702f8cdaf03e3e1897f5bdfb655b6950deef36f5f04bff9f3f91e755dc0926d96cb01ed62f16f1eb62cffdbae97ef2e64c9794ff72dbf0e06f7064b79efc8efca58723da6dee3717b09fce6cff7f218b7451afdac70dbede0f2ed629658fe4c8fdb430b993e569fcdd667284bcc5baa3f3034fe4dac4adeabb07f7750ba2c91dfe4002e39b67eed557dba545e97337d3d5b0938c8fcc8f68e87dde701796f994b58322e4ce9a9e2bd5b5c4e9b1e5277558ead608979c6f92ebfb7525e6be4b55e5eebe2efe6a93cb88fbcd64add86b184b2995583fbfcba857cfe32f8cddf5b1597ddf546796fb543575d7aeeeb88bbae0c70b3b335f6bbb9aa5fb5d666db6183e4f688438725ccdd7e3bc9780d6789e5c77029f7675b6ec785f2fdfde4757f7995759f184481759cea83b995cda9741bebf13d375e07db6137b4e3d7c9eb21f23a05c8ee2d75077db486b6dd41e019ff2ddb78ec40965027b9ea72a8bcb64b119f3ee03d7e3d2c40fcdd9e3597d72365dc46b2c4becd48db06366be622eb289b530f65bb47dbdf7456f6798cfdbcd342f9fb5810271e466e9c75c74be5b3e3e4b33c10ef03e5bd51e0de11f25e7efc5e4cd9d6f1e03b1ea7571ccf4f003274cf4f043ae89e9f24efbf6aebde598d07ac77c4e54087aea3584279c24e4e8e6b6c9423ecd77ca4e529f2db02475a16c87479c145d6a9fab4ecf281fc7d9a232d4f77a465a1262dcf90cf46837493792856a449df318083ea4b9f89a4a57a7e1690ab7b7e36d041f7fc9cc4b4ecaafab2e7226909f58769b92139aeb12247d8af7b48cbf3e5f53c79d595a117c86bae94fb8607b917caeb2a17b9d90eb96f7a907bb1bc5ee422f71244df74c253b6aec664c6b2445be7bf2dbbed768f8bac4b99d6d6bbabf2fe329668eb97b3445b1fc7926dfd0af96cab78fa0b16fcded62cd9d6b70176324e3ebb12bc036d553dbf0ac8d53dbf1ae8a07b7e0d4bb0f51eaa9d772dd3db3ad41fdafa75c97115efc0b0dff29096d73b382bbedbb2c4f6c8b676faf450faa9b6c1d1ccbd6ebcc1969fafd259b6d562db49f96f83dffcbabd235c39ced5e36f5b4ecfbfa59cb6f6fd9e72fcaba7e4cc6e92e1ad93bf6f96ef6de378ef16fb7781eae3deeae07f9bc356c6c7edad212e1bc1331837651baa4d72bbbc3f11a4d504700fa695aadf527155fda73b1dfc7690f2de01bff97b77c7f52f50637a77c9eba1f1679df21ce9db16e8718fde5684ae20cd7cb791549cef4d11673f65d2249658264db2eda077b18bac07e53b752eef3c2cafaa9dafc63727b3c47e8a6a9faaf6f814c7f329f2f94571f6dd5a023d946cfecdbb1ee2afe618d41c829c93884d6589fd02357eaaab23d26dc7a6fbac52ea342dd17ec46f2b1dfaaa3ea8b2c56529ec43a63553f30a7b4b79d31d0ca6bb30c8f518964bbc623bb1c4b10235c6aae6167694cfdf93bf673ade9f29df9775616c86e3fdd98ef7d578a71a979b95f83e7b0ec8e1bf9f8fc72d26c780d80be09e1a477d31cea79f2c3362c58961b3975862ff4ef5e17696efbd0fbe830cd4f30fe4ef398e3895c8df1f82dffc5aea90abc6599f713c5772e73af455f5a76ad3bf1a8fe3e8bfc13780277b2551a6ab4d2b1b9e27bff908fcb66cba9f5bfb5f7dabc65b779532fe077e5b32b25bdafa66bbe4b1d86e0e7ebb80fbfcbabb7cfe31f8cd6557bbe8a7c62ce73be2365f7e7bad876fd578e99e8eb8ed29657c2ce3f6bb8b2cd586576d589586ca66b9bc059a745d00d293ffde4beaf009f86de9d05f8d79bec9f4b6bd87e3fb4f13bf1fa0e6e8559dfeb643b7852c71cc4b95ef2abf6a6c92bdefd0bd2cfe4e837eef38f42b73e8bd4886fb19d043dde7d7c52cb18e52e3a31fc8dfe58ee76a3c5137a7ee964736935755575748b99f3b9e2bdb5892f85cbcafeef3eb52f9fc0bf9dd47e03efffda17cfea50fddd4f8e3324437a57ba543b765e03ebfeeedd0cd19b7e58eeff706f7f9b5caf1fd27e03efffdb18fb87d6aa7d1a0a33dbcfb998f773fb7df2d92f6c4e4b8706ca5d4ed2b79bf13b8cfaf2be473e507a498abb15d7eafa7bc572ddffd06bca3eef3eb3e2cb1bdc77f5b7971709d43ce2a47d8df26de6f48d7552ceedbc139a8796b370e2a0d545a7dc51af2c5b8b6e099a5d7900b1dac6a11566a9cbc0661a5c6d8611ceb1daceac07d7e5ded60b5daa1534fc7772aec6f13ef37b0aa4b643544b5dbdc58f54c8c07fb8625e6b3ce8961b06f996b19c1be733cff455ebf077c7e95d71f34f77e04f7247bf613b8f79bbcfe0cee7575e8f0b5d4e13b97f8bb3171c439b62fc26498e3f9b78ee7aa6c59e3ceb4e1b9fabe8be3f95a477cba38c257cfbf773c57e1ef877c5fe878aebe7796adfb23693eccf1fc5bc77315fe01c8f7858ee7eafb5e8ee76a0ce807c7f3618ee73f3a9eabf00f42be2f743c97dfc70e96bf7f42e41dec08afa743de3a477c1d79ace1f9b78ee74afe21c8f7858ee7ea7b55761dcaf465979c6f891dc612cb2e67b88731f774383c91a3f8cdaf6aeee067c4fed4f3ef91708f4cc1eba8c4e7e27d759f5fd5b8c72f0ebd95fc6352d8cfb18e781d03eef3eb71f2f9af203c759f5f8f97cf55d9e4ccffea3996bf4f6089f9d3519e353cc7f2f7494c9fbf55fcd6273e17efabfbfc7aa27cfe3bf8cdbf57bf4f96cfff00bfad7a6a4b35f6e58cef298ef4749697a73ad2f314709f5f4f4b4c4fa54fec7479ff4ff09ebacfaf6738d2c1590ea9e72a1d7475801c0f8a9dc912c742ce947196e39f2395ffb36422e641ddc629fe72c83f4bcaff0bfce6cf7573f5aaeff15fa28c84fe966a9f9ccd92fb2c6aacf5dff8b371d3e4bd3fc177fcf73f203e5c3fb7f95cb7b117c6b4f30ab9b24fd43096b4d69d5b2cc6b4e3c8b9cef1ef54729ab0847166b1aa008c33c794fe6a9c394b5ed59c981ad3692eafe7c6c313efa87bfc5de718720addb4f7549b6f034bb4c30d76fcf30e9736a2fafaca0e6b5384a5f2f079e03d15d6f9204ed2573f7601b8773eb8c7af174addfe06bf2dddf25b3ae45e24dffb0784cdaf17cbfbff82dfb09cb8443e7fc421ef32a0d3257698a3d41c404b471897b2785fd9e2354a8dcbfe019eb7027aaa7b4a06e867abf0996a67ff27d3e081c43053a681ce3ed5fb37a6f1ede52c71ccee7279bdc2613b57c8f479c0d63b5f95cfca4e6f760fbb41aef43d8d5dc912c743e59c5dac0d90673de759cf577cae72c4e72a47b86d58ea71c0bbe5bbb2bf1793f37d4d62e037bf5e0dd25ffa99c4ae05f7d43ce2752ca12fd760a3d78377af07eff2eb0d2cb17f7783cd7ff4030ed9eabb1ba58e4dc06f7e6d2faf37c9e78a93caa320ddc43bea1ebfde22bf69067e5bff2e7cc4b681d16721616d94df6581df30cc5be5f3e6e0378fdb0cc7fbb7c9f75a80df8a3194d3d221c7a9d7ed208e721e4fcc9bb9d9abe4dad0ceba9e25f48f0b5b26c629953cedbd57a58c0ef27a87839b6a23bd92866cd51f55b676279021db54b1bb12ed327627b8cfaf773b6cf06e9bef98660e39f23bd10f87630cea7e21f80d1816d5b9e8b859401daf74c84953c7313d5c74ec124cc7b1331c72942ebfb384367b4a1def71d1b16b401dbf77c84953c7b10b3dd8ea577698e306d9df8c53b23ab2d4e398aa1d708f0cf723f09bcb546d64d5d6f987b9e729254ff583951ddd6bcb6fd20afce6d7fb1c7cef73a4c9fd2ca13d227e5b7a6db5cc21e701879c071c5c1f94e1b7767cf72088177fdec666b6d50189f14919ef847b5931d1d69dc62a5819ab66b9a272e131f2bad4577d997a912f17dd5cd4f68caff6e5c1d6598ddf6a4b8066a5ed5cb18eb78e15b07ced4adb9ea2ee56a14f147f97596f540aa16d9b2405716752105cb92aebbf0ab04cb8d6ba3f55ac32e60b852bad2723d90cebcabf5ac846b1f9d67f8952e659c156b17aeb57a9f577b590b7d0523bf9cd5451e24b8a9ddfccb164da2b9e57587714d06aeb7795d0b044fcbd5a685a21b49f6eddab13ebaf57b2a56c82755d23424b8e7b8df56f5d98a512995e47fdc267ecbebdbc5a25d3242b365cfb5c618bff97228d91221c7df3b6321f36cb1535fdb14929f17f0ced428637d4a64b19a304b258c2bd7c962bda72739208fa8f63720cf5f66df32eb22a0cb7b8e8c9f0e4ee2d62104fe1d77ebbfdd2cab7ffed949518b502962b9aef7d5244cd0d2c979723565afb89425656b33caea8137f4c875f34cf4b42c46fbf5729def39f00cd45e5979800c2c5b5d42ad58a41e53957285f25547346a6982d13c2b9f2b5e2f72a11d40c4b240f70ae15d172f96fbee54595f55c558df6de1c3ce2e5024152aae771155b88844bae9653451e4bba26baa4133dacd246c939d8061eee89d7b22116f1c4cb156dad1e2e268e85251a614d654b4c65c21977bdd075c34dc38fb8e7d6d92b4b4ffef2e32c7dfab416e9934ea8580a35d5a550ebb03357eadac42d7dda34c42b9e3efc8f9e615bc4c653e980116ca623d8266c1be7cf56092965d6bbfe19f261aee1ce024a0fb03d6284a955c010666910e671841d345ab1ac560eadb84288e4e6bac469db3855777ac6cdfbc8dd1d08b250e3eee45af3fa35ed163a7a62407421293dd5a32cb1ba0e3b59cfcaacf72b44f394df2fb6249659617379e34508f15e68e217ee6479cf7f4b27592dd5ce82ea20d03f0eaa1946bca586781eb7d72e1a3310659c333374c233432b2c9b750d9acd5a6392bb0595dc0693dc3da8e4b698e41e4125b7d3651b3186be4728d9263e10a3fe35c1fa76991599d5a2775d6f7daf1bb871cf2e3d3d67975e22bb6433dd70923f8db06cd25e9776fc666f9d92cea4eb85275d074c709f80823b62d6d637a8b575d2599b884725a9b5cdb5eed97d8bc9e269a518abe13dee1ad100a8654b84e5d83b01626f2beb9a29b6e0ab177ab8dbe1e69eedb09fb043ee004da72b66a19be952a563e3a50aef0ff2d1351e8382865e42e652259b69fa48c234ddf807d7aabf25bd795366ff69962bb00ff71ca2dfd0782cc15f56da6f9670c3ed6e0ba44f3720a59506a7845969675da9c4ad74a02639f378720e4ae0ed23fa2814675137002feabae8329588c35cd24c95287992a8b0160939e90d280cd6651611b99e49f1f012da10068614b03f88f90d15e6975eb8985975d599956844ebcc8a477c98b718386d65286e2bdd30d3de0233ede18d69dadd31754760ea6ed998eaf6d0a9cb1b1d7c5b9494eda47eb8e09e18875c8c435e6372e8a5513757987f982552891c9a4dbf441aa5a19b2bb25072c9e02534beeb8cc8cfcd58e21fa414e23bb0e84a212f6161a5506f9d29f15e1f9f720fda97eea313cebbc1a359f260e47fd69f24e16d71e17d31cd8b349a8fae6ce24bf3cd75c2794f84ef2e13a827d20f933c36a8e46c5d361345e621a4d9ccab3bc454b1e379059b6d99e3deb2b5a6c25d25da655c23351f3ec7ba2e115af0fb5c8bd46e14eed9779c2efb8a327a32f3eed4411f0bbef9491391e1b716199ed716583b56a78dff76afbeb8d946846e161bac18eb8f9534db6a4a9a3774c5984b493300cbb2db05cdb20375927996dd5e63ab79dc5677b0fe6f2d865092c2d9060f6790ae6810ad88fd1ab568b047dcb9bc25c243c996378bf1f308f615a6badc32e0d5d2704aad776aac302aa49107290cc65bf1eeeb001c53d5af363b4c10d9613b0fd9813256580618acb3243e3531916926d5b925cd61c5d6c305221bee236e734a76ea568a572bd97e62a2dc76364ab2b716b8bd0dd169c3477cf9a296942ddfceb8e0a198e0c90105e7e804f33c3e25681e1fa693cc4b1bbe914dd016d61698dad382aa3d1c2b51a76b4ad4bf63fe4ad41198f01d35c2ef69e24ff8965856d8c98b8db858f5484cf00c5d1e1b2c321f1f38cdb6fe5f657dc15be56522f7678bca305e1a645b79bdd2fa17afb04780f757596fd8ce7d7ef4ccd5e9c98d626650a3c8c3d26d9626dd7ef6996ea330e1b335c2a735f5273c1f4bbb625dda715578bdc19b25cb64dd96581a660b37cb6ce1595b2f662bcb45cad58a74cd66fb5bac0eb4ae7c40325bd40355e259b6389ea74694b57ed2b400d37f679dfead81fec540433f211662e5d61c4db915f3596e8dd609b7dd4d90860ff713f1dff029c2b0cdd561e35dcac956f385b75cebc5fb25c2002a1adacae519aa20c768f4ca15e3242b596336c8786fa15e0c1e8c4c68a2f0b0e39e6d411a5e7c1b2967c34bfdd137bcf8c64f39628bde30b4c71a5863b14275574da11af353a88ed349e67961372c2fec9e565ed84a677362fca7ba516d0ecf5173846c9ef38237f8f9165f4d9dbd7f314055e8c1b232a5e370b164ae561cbf6693abe58529773a5904ce59b3e18b2ca1cf137b883c11a6e658bed81aabb5f7d4d4da1bb3fcd5dadbe84c560cfcd534aac94e1212c230dbbd74662b46278b3c247e26f5ec2796abd48a42b55c16aa76d1dd4fac2bae11d56685759f17bcf0f970b13e98b797a608de2b04f955c2ad60a96882ea8d7c8130f2b0e38919fab65805b0505301f86a556f8765a1324d16fadb6716da1e537b5150b577c0d45eac51fb80e6fed41e8f092fd7089fd1c29ff0093ae1bc60e6f61aa487381113bc84699a9b7c544ef513163b7a8a8b445f41f5ffcac59db5d6dff672052e225b2c3d529e947eb49c84b15daa61dbd127dbc918826501d94ed1096ecfec4d7883789d4dd509e6edafbd19d2fee25b1bfa6f7f4dc3b05769b05fe813fb742c9baf089acd77c424af0c2a79274cf2aaa092676092ab834a9e8925e23e9a44e4cec47e12711626bc4623bcd4a7f0d958c6acd5954d83193fb930de48b5bb4ff1718d32ab48ab13254fb655dfdb756e79c2f8081ff3a8949d663ff9bc18d3b34ea7a7bdd299fb8bf33645991843e321ceb632a99f5077c6d0d76bd01fef13fd1c4cf86a8df0cf7d0a2fc178edabe3d52345ba960b37e3f8dd51d65d3f1c4b316dd6e8b4e13fe3e9e6279cb918d2b51aa41b5afb433a0f8bc47eba487007191bdf5616b25962c0af4caed25e2daa71ff1877c134d85fa7012fd96634340c8ad36c16ec8a213d4083f4159f4877d309e77a1f18b444de1d53fb205da1d9c69fdaf331b50f0eaaf61e3ac9bcd5b18e21ad0eeec5e1bfd5b12716cea1583887a515ce5e18a9c383925a8025f0119a04dea1adbf045e88093f5223fc009fc2cb30e14769843fe253f8224cf8d11ae17ddaf913be18137e8c4678b94fe1e598f06335c2cff229bc02137e9c46f8953e852fc18cfcf8a046be1453fb048dda5ddafb537b19a6f68941d5aed448ce152e6e61ae8c767a3ff973ebe49bba7a5b2bc3b77dd5ad8a4e153e36a4b4b72e5d780d7db24e251f55f972cc9a4ed158d3c73e33411526fc548df03d7c9aea0a4cf8691ae147fb14be12137eba4678c70efe84afc212f38c8089598d09e63beb26b5054708eb5c25f258b6d8c7826f40b252fc6ba5d8e9a2424c5c97c915496ac0494d5cf31d6db2a5f5d6489baeb2ac7da475d78fd6fb605a9fa5d39a8fe9f341dc78bbd9ee4adadd109d5f61361b2a5bdd437de95583d9c0d91a1bd8e8d3c06ab1489f13d006ea7482f9528273bd0876594a50af13cc4bb80d0c691ef2bd5a5b0b897e9a87ab31ece76bb017facc7afb62c22fd008dfd5a7f03598f00b35c20ff7297cad4e38af992f62016be6fd30b52fd6a83db6a33fb5f7c7ecfc125de6e6f151e30b89c58d9f2c700016e6a5ba30794cf9bc4f952c48ec39a955be423c100bf1b280b9f9204cf0e55854e63700b4c712f6f4591a1f8c59c315ba52cfa735acc3845fa911feb54fe1876005d4555801c53707f6df7f3d54170ecf5fd778496c97e985c330c1d706147c386645d70534cf2330c1d707147ca44e304f7bbebfb3d3a58c0bf0e35276146685376aacb0cb66feacf0689d705eaef15da30395d3c7606adfac51bbd0a7dac762c26fd108dfd5a7f0e3b09cb911cb99b7a695338fc7cc91ef889d545af285b20bacfff8b8119f2c5d2a7675ab106e976bc4936ad1f6e52d4a3fb67b02a6c5ed3a2d3a37689167fdbd82d983edb6bb43fa3a9c88e970874e87cda40e05d6ff8b452f9a7fb3c6fa3b7d0d4ec234b853a7414b90167c51c4129f15f07acc7cefd298efa0cefeccf764cc7cefc6ccf79eb4ccf714acd0bb5753e835f559e89d8a11ba4f43e8039f844ec384dfaf11cef71df023fc744cf803bab4f529fc0c2c6d1fc4d2f6a1b4d2f64c2c3b3cec5634e567b8683a0bd3e211f7a26954068ba6b3311d1e752b9a0a3358349d8369f058aaa26917119e3f07ee7331f37d5c63bedffb34df0d3ae1dc7c9fc0ccf7c9b4ccf73c0c193f7f3a4843ef7c8cced31a3a0774f547e7028cce33189d67d3a273211689e7349178c567242ec2d03f1f10fdc598d62f68b41ed1cd9fd69760e85fc4d0bf9416fa4bb148bcac89c4333e23711926fc158df0af7d0abf1c13feaa4678c7eefe845f81e17f0dc3ff7a5af8afc48c93af9c46abb5820c576b57615abca9d3225eade567b05abb1ad3e12d9d0eaa5a1b9dc16aed1a4c83b7751ab462f16a6db218c15fe5d30be45acc80dfd118f03b3e0df83acc80dfc50cf8bdb40cf87a2c12ef6b2251dac35f246ec0847fa011bed1a7f01bb1e4fe9005ab176ec2b4fe48a3f5a09efeb4be59279c0f8ff00324030d8fdc82a9fdb146ed193ed5dea813ce197ea2cb5b7c72c7ddcfabd47ab55a78622d15e54e8d7083b497f3948b19b462666ffd6c2f052db3ee968b45a2cbc46f556e96b145727e6b9498df52cb48d7327b17d06c31bf6c9ffbc1a5ac1452f8e2e2e5e24ead78ab0248d6cfa055ca994038e7e6d75df3562c813ed524d01e3e13e8364cf8671ae1eb7c0abf1d2b8c3ec70aa32fd22a8ceec022f1a58e502f7f91b81313fe9546f80e3e85dfa513ce33ebd75e0a2397a1ebbb358273b3f9cdc6d9f83379939acc6efcf98d8e97d6c5849fcce6bed165705d3177947b305bfa4e97db7cdad2bd5815f17dd02ae23e4cf20f4125df8fd50f3f7ab17f9742f3019dfd8b3d8c96348afd07d93ecaddf27ff26cf93f0bcbdfc2c5f2836d72a54f890731e3f925a8f13c8419cfaf018de7612c9bfea6c9a66ff4f6974d1fc1b4e6471e263589f8268ee34547ab4278f0ebd67e648be652b64f379d47313dfed0e9c1b79ff027ff314cfe9f0153e7712c75fed2a44e711f7fa9f304a6f5df58eaf03cb24c3611557a54346c8d90ae13d5935824ffd144b2b4afbf483e8545f25f5d24790e54be11767b367d1793a7b190ffd385cc7bfbf6c954b90d4756e436ec1f32dbca10f214291f1a3c8369c0775849d2a0bb568319e25f7562b1b5ddea4f6f89cdb3982e319d2ebd3dea927ca6811f9d9ec30c8f1f4fed34bcbacdfd19def358849bc68295092f60829b0514fc2226382ba0e09730cecd359c4ff3c9f9654c780b8df05dfbf913fe0a86a4654024afea04f3d2a79517c12e9da1d7748279d66e1d43faa16d62e9f4435fc7b0b7d560cfebef0ffb1b5824da6191689f5624dec422d14113896a9f91780b13de51237cc3007fc2dfc60cb393ae38e50b00e730b8a346b96863ab823c870d1315de4af977a2c376b6f865573f23c44e0135a2d6b78bdc5ae1d09d2d0ae6f88a597b5089affdac76b40c54387c30c9ae62973414e7d9a2302ff7e98ef80ec662331d0bbe5918dc96cb6e65c62bd8f8ead57d8586f62114f6e099ad1fd73995847ceb6dbf4eeeef6206d35963305ffbb4c6f7b02cd505cb525dd3ca52ef6391e8a68944479f56ff0196d2dd7529cd973ae88748e7cbc155be4880f72eecdd5cdcd234c7f5e930e1426b0fabc6ed3a3107ac1296a18650139fd509bbaad3e4a245424375e04b5cf62ad93bf5635f1f6ae8e58aed88f97ab1c63e2027b323053d62c93b1d690f1fd00f1ff48cf1e103ba536db001848f744924f6750ef7e0ddf81100fe57c0f58af14d9c12d15b7fb6d793ee1dc3cebf75d70123f83f5d11c18b943eb16407397e58ae1f07b98f75c2790eeaebd9dc9ca1714b4342fb44171a3786cd3584afb9faeaed9284f7c6857f8a95d3fd34e5f40e83fc95d39f61c2b335c2ab7c0aff1c13de5f23fc2c9fc2bfd009e7237803620147f0bec4d41ea8517be3607f6a7f85a93d28a8da5feb4aa441619748f068a4340e7f8a71e3482a91c41f7da93404299552e981954adf6005c7508a82e35b2cb41c8ad0bec3421b4611daf73a7b1ccc6fee4d6a8f58edbeb315863dd35d23dee0df66b629b3850663aed813dfed2c8f4ce8e548279958da0c333c96ea70914c288465af1f30131c4161823f62a16d4911da4fbad0c4b95f5e468a5c16ebfeac13cc9b17b9fa065cb27097e6c52f3ae13c9be6e9180d496664fdb56efb6450c3f1207fc592651445b2fc86d1cbcf00bddf75c279a55be056933903188207f0872e00de752cd475a4b5d25d3a9a7f62d247eba4db1b51f12197dc34f6b6fa4b17166f5615699a550b47fa6b56fd8d091fa3117e8f4fe1ff6094c67ac9d82e48fec5048f0b28f83f0cc7561a1c17fac4c16288f0ad35c207e5fa131ec3846fa3eb90f814de0413beadae65ef5378539d709e46dbe9f2521df3b67b5c304f427b666e41826fa2d97e85cdb024da5e93448ff84ca22c2c8976d0251177aa4e76edf41399e6baf0785f657cc303c750ee84583a43b92d74e1f006c5442fe5c87a5c704b0cd8241d305efde4fa02d40a933f5927bf35635a8bf613626b2cc429ba10bb694d60a6b074b58966fc893f4b6f83693255a70997c07b3c7e6b82b69a507287f2ea816f7d1ad6a840a9f58bef47e47f44605a8ccfb426c210f943dbb9992e3a375d9362e6163ed65569a74b1ffe73c7181f0c4d5469c79987b4d8d0e7d92649499385274d7bcc0076d21900df4b9f2ff1b00bf82aeb5f753252953e0daf0316ee0c5db81dd07057ca4ac04fd81db1e27da6a6782f1ce7af78efa4b3f59cb06d7da29822aa49c3d66759fa0f7630188958fa6cc4d2dd42c72c7d331d37717edd8210b9d9efd9656a89d8e49e0f36cc16136ff620446d1a4c8b637ecf1dda59901d9814f374f5c3a877d665053e123c27167024b80b26b924a8e4ae98e4d2a092bbe924f3bc3e3716fcb8c4ee5889372f603fab07c66397a03c7a6292770d2ab9172679b7a0927b6392770f2ab90f26797e50c97d31c97b0495bc3966747b0634ba7e98ca7b0555395b2759343cbca8ec72cc6a7f4ce58541551e80512e0b487920a6f2a2a02a0fc2242f0e2a793026b93ca8e42198e48aa092876236b724a0cde5602a2f0daaf230cce69605b4b92d30c19501050fc758ec1d94c5084ce5e50155de126b105465a0413012e3b122288f5c9d64fefe4a2f3c5cdc85f37482fb5b3f577911fc332e78149682d50153301f13bc4f40c10558ead5044dbd422cf56a03a6de682cf5ea02a65e1106b93e20e43198e0d501058fc5526fdfa0a9370e4bbd3501536f2b2cf5d6064cbdad31c8fb0584bc0d2678ff8082b7c552ef80a0a9b79d6e14421c74df38fe22ba398eccfa8b1ce8252db6c6896d8fa5c54141d362079d643e1278b017955d5c19c66376b92ea05d4ec0041f1250f0442cef1f1a30ef4fc252efb0a0a9371963717840165330c14704143c15137c6440c1d330c84705853c1d53f9e8802aef88093e26a0e09db09ed6b1017b5a33308d8f0ba8f14c4ce3e3036a3c0bd3f884801acfc6343e31a0c6c598e093020ade1943b13e208a3998c62707d4b804eb199e92819e612986e3d48038e662384e0b88631e56c49d1eb488db05037d460640ef8aa97d6650b577c3d43e2b036aef8ea97d7650b5e76392cf092a790f0cc8b91900b227a6f686a06aef85493e2fa8e40558263f3f60265f8809be20a0e0324cf08501052fc2045f1450f0624cf0c501059763822f0928b8422798bb255f1a23704b5e8285761945684bb1d02ea7086d1916da1514a15562a15d4911dade5868575184b61c0bed6a8ad0aab0d0aea1086d0516dab514a1adc442bb8e22b45558957b7d06aadc6a4cf80d1910be0f56ebde18b4d6adc152e0268a14a8c542bb9922b43a2c496ec94092d463c2376640f86a2cbd6f0d9adefb6229701b450aacc142bb9d22b4b5bad006593fefb01ef4d7248936595cd6fdec870570678602d81fe3751705af03b0d0eea608ed405d68dca3ef9e58f0255f0761c2efcd80f08331e1f76540f83a2c11eea7488443b0d01ea008ed502cb40729423b0c0bed218ad00ec78ce2e10c18c5115841f348860a9a2331568f52b03a0a0bed318ad08ec6427b9c22b463303b78220376702c26fcc90c083f0e13fe5406841f8f25c2d314897002965f9ec9507e39110be0d90c05701216c073190a603d16c0f3190ae064accdfa42d036eb29982dbd48614ba762a1bd4411da6958682f5384763a96e55fc940963f038bcaab1451391333b7d7829adb593ac9dccfe2f558303f8bb37582f9d8e71b5e04bb0c929e83097e33a0e0737582fb5b3fdff222d8c5cf6203967a6f074dbdf33016ef0464713ec6e2dd802c2ec004bf1750f08518e4f78342be0883fc4140c817eb04f351950f63c147552ec1787c1494c7a5188fff05e4711956167d1cb02cba5c2798cf7c7fe245b0cbccf71518e44f8342be1283fc5940c857612c3e0fc8e26a8de05cbe2d666c3933e3689df9d2173273fe935fe898c51cccc49ace2f637c4d672ef373bc4e3afa626b3dafd1253b4f9dafbc24fb9778d3e45a9d60fef3eb58f22275f52729802cdcaeaec34ac96f32504a5e8f09ff3603c26fc04a87ef82960e37ea24f3f7bff7929a2e7ee637e904f3cd1a7ef022783a6e263763827f0c28f8160cf24f41216fd449e6b5cccf5e5476d9d3e4564ce55f82aa7c1b96197fcd5066bc5d1740b6f5f3372f4cbec505df81c1fe3d20ec3bb11cfe470672f85d98f03f3320fc6ecc4cfe0a6a26f76092ff0e2af95e5d236084f533369735ce460eaa12f5b769c33f9e2bf67f45c5de3329765e74c02aebfb30b3fa2f0366753f96f87c8beb4089ff00a676ac4970b51fc48437c980f087b0d676d3269a0d6926899f732c63296193d84e0da70ecd62fcdca77d45022f97493f526c5d33dd7a3edb7ab2529834bfa36fd3e956fcf0b7a16971c35fc5ec3dd856fa6afa3f8cc5b2992e964736c472aed5bae499cecea02bc4bfa733fb8ce91ab1d79b9d41a737bc39b9e1a0afc4a3446a248f12f1b4dc92582fe2c5e526d28b4be0effbd3039354caf8be344bc5d344a630b33a79cfb3e4f8dde0e8118c7416664f30443b4e05d63736ad5556a1b8c0b28d1a91e6766c4be5e16a4e6de3dfe2f733654f8f62b16cae8be5768e5842e6763ca788145b21e2e8d4323185e013b7bc02bff213b3c7b098b5d0c56c7b4fe9375eec9458c9d45e3dc1532efec44fdc1ec7e2d65217b72247dc668ad4592663c67fad69b4983c81c5a4952e26c7875c9ec5bfe147c7545952d732be435ffc44ba5a1f560ed9e1b1e07549bd6866c0528f37b03257b63d89516fada33ede53de982168d41a51aa3d85c5af8d2e7e3308ad8adfdd4704c3636537872b45d0956c3f910ff525493aa9fa3416ebb6ba586feb1a6b5cd339222ef6114a761c556dccef2e968492f345faa9f90c16af76ba78ede6bb6557229e24b6ed7412ec7bc50de5408d551ff0ae4e9096603ae9fc2cc6a3bd8ec74ea1d4d9d4b5f973589c3b60ed147f36a06c98efc3ba580882e9ecd722fcc4ec792c661d7531db0a89d95c913fab64dbc4ee6aab5ecb3c998bcb935283a68ff20216a34eba184d212c7d55aadadb8cdae7b82453483fa62f6231dd4c1753bef7b2f79222310670576fce649a48e51ad11b5a6cd5b86b3318ab97b05875f6d227480c17b610e68a54a8b1dee5f970a94bed97282373317b198b59175dcc26a62c39bdf50af032d4adcf9a6e49f90a16c7aeba385610b7a8ebc46ef27c6f6bbbc53c4f584065436ecc4c1f319d5af4558c53371da7b98dd6f37027149cc36b1887ee3a0e13d0328cf79016592fa9bc61ef68ee5ee3e825653aa55fc762d84317c3e93e63b88bb0e895488a34467cdfc0e2db5317df3984965d9b46fd9b09026f62047a65aa5eb6cbb6f1a056a68fd55b58ac7aeb6235d5a71d4f6635a2a4ae31c286dfc6e2da071ba1f09b8253c41bc9d6e82c5fbdcbf513bf77b0f8f5d5c56feb002dc73a51f3f27dc597c87e1e1eabd2a477fdc4e95d2c4e9bfb4b33a77d8e17e309bc5449d54ba1ad29dfc3e2d70f8b9f9f3ea31dd7a9b2cd147fca673cdc5b87996a39be8fc52f5b17bf41cc7d54b0d4224ca1e5079896fdddc7f6fca442495aa940697b1f62b11ea08bf59668de2a6d98aa8765c49286f16c5ef7d76bdb9de98def7f84e93d50a7f7b8943daee9626e908f3e568903d927b315e2ec84e4feaf5b0aa4df83fc1f169f41586bd93d8ff0de70b16841d66ada105ee61278cb6b490663f83116c3c15efac8fab981e9c2f6f83878991ca34a4eaf30e7073ec1e238041ba1f2320ee02596e99518e9c7f4532ca64375319de629359d333d763e54f16ecc74fd0c8b6d8e2eb6bba64c57da9171ea31f3cf311ac3b0713c7d9d314feac5591458f5648da82dd626b458dc521d6b6d26caf513b32fb0986da18bd97c8f314b35a6e74586d7b732cfe44b8cc9706c3ccb2f939972d6af529c5ba42bdb6c1bb5c7f51a8bc3571887113a0e635c5a4acebe50629b897bf9d7a661217ee2f23516972d757129f51d179e4bedf19a5aed5bc5a2a5aa5a838d95a2df601446ea280c7694eacef22a3ed35721b4e39e309969eb7e8be999eb6f9cd1bdbc2d4959de7a4da7a07d92efb0f8e6e9e29bef489749a2a7618f09a653a760b2fcc4e07b2c06a3308f09af31489d4a98a44ca4cc0f58bcf2bda40c2cc783a60c94e527063f623128f092326e31f0973289755af094f9098b5721e6b9e7a71faf1cf16dadf9783c2fe578095f254679cbb4e39de9a5d0cf584c46eb6252e848a189a2ceb4eb9e3a3062e49613dcd222dd12e0172c1645ba58ec9546aba944e8658fc22e8e507bf2578ccc186f7de4785a79a381a7b4571b48d7927fc3623a36532de749628ea852b417fda5be5bdc339de2bf631cc67949719803fda77862bef75a37a69bebffc062ba5590987a19ff492f9ee98f88fc89c574eb20a5b4d792385339f42f2c16db603e72fabc91bc3ebbb1e6cafec662b4adbf322779decfdd16bdccdefa9fe14ddf3effc1386ca7e3b0850f0e2a4dd501e3991a55fb17d3787b9dc64392ea45e718235d7ff43f4cd31d323d12c2e72fe2de4a14f9852f6cd4c665bc97d558d888fd64c346eb63582c27609eddfeca39bbf796fc34d95bbfd4fa77b56b3b23594abca7e527ce4db0384ff4d25785f93e685f355d5f8ea6580c26e962b007a3f3b752de036e1e973065bd5ab4fac60f95661895c95ebc8855887e726b3c6698256726976661319ba28bd9ee8d9cde7ed239dd1cd01c2332d54b7bda6f1b26f88c5afa69df028be9342fa515d69eb6ada08815a6889fae24e35ff989414b2c06d3bdaffde361fac999307ed8fd4ca5502b2c7e3b62fe41ee2d851231db55a9e13f51cc7fd7b8e4aff8b7b385978addf7755f339a5e2dda1a8bf54ee9f8a5f8e9b9fb9fdf4faf35db068be10c6f63da3ac2e98e69a7ea39b4b0fe8bc5f8861c938514dbcb47cda5d5b25ceea015cb6ba819463694f823136a87f87d1efe0a2b35789e286d28dbf98624ee126636b197f28b3f43631c6c9dac10634b1c8cec2fab84e4c5c05a470a42f6da48be91cb48abaf5229be525bb7a48a85ae961b09ea3918bbd471da13d98a25166b2163a46459a44772d29b5a4c67f1541d2853b5492edf922e363c4d6b4aadc56c1e5a53bd0d754f220b73874e775bc02cd92b8f75b57ef00c96d7901167307b830c2eb24474dfabadeb324b445dead09de72c3b43df5208506dc294e2e682624027aea73039db59a486d96e511bad3e7f8bac26793c558a29d17516e8780a158bc0f135db51c0f64eb338b69d29b1f17d9e26892673b505ce5e7aa5aa6b0c606d241072d74d85700e25c28ed60f35fa334d7854730165a255cb57f8cc66cb2301ecc69671602594c0ba8052ae761300d7b14d1c5c2925b8cd34e0b8403ebbcdfda6ebc5ddf248405bc8e2d0e6525b5b62f69c62fd6defc957deb030c3b6ba2880cb691b07378f125c37c69bf2b59eab8528c03b0d540abb50c26b03b2eaec84c1ab28606ad6278e69574a4cad00a6f89acb2820aaee1647b41b25a20e0291ed601bef0fccb5ee94cb7f4701d71343e3b876a7c4d55ce0aa8d5491deac5d1cce7c4a383dac1fb31bba486aaad25ed83147d491f58c2fdfe7b562b11c748c02c00da0bcda8312604b505e7135f9ec6d1400ddd1290e684fea027db698d6896fee198d066939b0a1bdc2b221b55f4614001dde390e680125a04e0090eda05cca2a447bbd5a7c141d9b3a7a701cd9424a64fc0404d5c999ccd68858d737b4ccf99ac472d16e9f233265b9c8a27cd5521420f23f0a621925c4be8c25c0e383887c3bb18a86c348ca23defde90286151751a26c27ab01656f6b652363ae18a18802aa75a03a581cd6f804df4267b12ceb6a806d8db77a8f4b2de5a300eec6017170e5f47d47b54bb09a058c02a29c4171441561d9161fca818e336a38274a1da5df5bc4c12da11efb82e0e0de56e3c56818b4b96834460e00c3d44b29e1b565f1f65b7cfb227b63ad2880da003a4bcb284171678989d2af271aa35eeb40c955493da936536059eed8a8982f1faa11214501186ff52b607b873bcd91e825591eb1a2be0acc462ea79f54e3cd884922e828b7ef9fc88a43aba284d61a40e33e41516a7d9582326c0575969c2cfc25ea45e0f1edd4e3dbebd75afd4bbe854814c07d0cac6b2525b8f6a02c8beafc36f76754b056d17b53d88e4ff61c51b4c728b60156566d46c7bb2012e0660c8c83db877a16698e656d1399f7235da200f068d1bb6c91e510ee5ca191bebfac3feab8676f07660f54c2e17087a72f2f7e8cd3bc067aeae6a43d689d93b282c8f1ec2a95e3dbcd25274d9fc91c4f7d9a9c80a3d0393e1c61737cd51d399e5bca39be5a3e3969952739bec6b6727c758f723cb974e6f8f263ccf13da4a4d319f75ccb49727cc8711d87c9d14e65e76827277310379d1c172fa71c64263827c5d4404e5a3e0a39be46d1fdbc5dd0107be740730eda09ca710cece4789cd1ccf1e9ff9fe3c13728bef846bf68268f2fbea9fdff7c5d4c1e5f1753c721f07373f91fbb15554fdd8ae2696d2f83e2359bfb66eea3929ba17d9274483c825ab59674dab44a684fb5f712c1b4a63a80c3e56a9370e64712e7ae00e7be26e12c8824ce0b01ce35d4c3d90b64264ec46a5770fc35327c2da8f0fdcbe2f8d686618d4b517b84ea2f60a359111dceb654386f0538f73309676124715e0870ee6f12ce3191c4f917c0798049388b2289f36580f34093708e8a24ce5d01ce834cc25910499ceb00ce834dc2991f499ccb01ce75616c20b058f6ca9dfb00d9aadb7bcce4d181cca202d90e34d80fa19f552b13aff35157de48c7468ac8300ea0c2d81dd8e3a1f4bb32d8035af6cedb7c2038be2f5208bd9f9e312288df02888751fba52b885e47bcf9fb35e2dde8f5ca7704600fa704db8fc12170ef534051869b03e01e41ed42eb368204c5f15667f4863f360795d191f44b80794f27f4b123323bbc19d8e15194f0360799dcfbdc4a08597c0855c5f435407b74187639367cbbfc96ca2eef06f08ea184d79db937d513cb47d22138b212b23528218f3509e69808c26c03601e6712ccc208c26c09601e6f12ccd11184d90ac03cc12498492b262300b3298079a24930092778c9606601982799049370f08d0ce61fa069b4de249851ec3cfe09609e6c12ccb11184d91e64f3534c82392e82303b0098a736ee08912dca3eb881b0c4ec4dd5133f10a03c8d12e516126595f55295b82a87eb623179b196f1b1cc05d267b2844d623bb109c2a5b842de83ef8db7b4aaa445de99ca7a2f07c84fa75f02b94cf830db3ed54b05bce80dc5b50555d11961949e7c086eb97583bb3ff3131a1b6156880ce61700e6998d597a261e96429895d753a1bc0364e5b328510e4d2a3dcb84b029d20a2bacb2b24264f5d56206a89eb99d73420a9bacd69f05609f1d86dd7a6b424511e56050049c13c6d4062c02bc9e37488ab61f15da1d80959edbb8561af5b6e947c04a373466459578462ee12813d984db09c02acfa346395eac0a5d25d7c2f1c394b8a3c24ab93e56ad10b4d75d46aff9d40c58e5f9619ca530cafa7f850cbc4c34e1436a8192553f47008417848170cc2687f07e80f0424a847d3cd7e08927d92fa09c0e26f3985b0ecac98bc2723b54d7f14205fbb0c9283b70dd0b6cf362939600922e1c20c359006cf2129370927aba93e1dc13e0bcd4249ca4eb30c870de00705ed6988df4c4154284f3ea9da8503e08505e1ece5adfbcf0fde27a51e17b15543b5798e3371cc509b631c012af0c03255c3830c3ea264e959bab2cb13e5a134663880ce581c02aafa29fba80f33c7c0a83a39b20362b592e454db1ae7c42236993c20864f17600e6d5618c5bd6892da06a1be625d54e2eeaaa1b7527ad7cc8d05e02d05e13c6149bd7f59484e527d96aca4900e6b526c124749d2183391ec0bcce2498848eb06430b70630af370926a18b3619cc5100e60d26c1245c3c4006730700f3469360467139ff7600e64d26c12474842583391cc0bcd924988493ba6430fb0398b7980493705a970c26dcc27da34930097b406430470098b752c2cc66c9e347fedc5e09eb7732b7d7b9604ce9b6c6f480778ebb1396a264a3eeb9c0566f37092661fd4e06732c80794718e3eef65e3365c20926345704327cfd00be3b29f1f504f8921d60b9b0f8ce3251f6ed781e00bd2bec6d7b526d361ec2583c9977c7c700ecdd61f81de56d727e47870384f78481b0689343380120bcd7ec7626e17031593bf32ad0cebc2f2c17aef8dc259c7e232f29c966830e03367abf396b2da2b8f5c44480f281b0ecd13e70a3b2a1f68efa4e86df00880f86d5c64c75be4e947d34b707401f32d37f9830b393d9e9dea0f279d8a45d89c746727cb323c0f9884938474712e70d20d33f6a124ed2ad7bc8709e0e703e6612ce3191c4f919c0f9b849388b2289f34980f3099370921e134686736780f3499370929e6b4586730dc0f9944938494f5d23c3590e703e4ddd3ff2761aeb1ca11a3f9980b07fb40715d0ad00d067c2d8a1b8114e5d23db03a10ec07b96125e0b119b5572f308eee31e3d583d00ace72861f5665e7be2891bf310fabffd4c05f502d0717cde44a884831b6450cf07505f30112aa10f3119d47301d4174d844ad81c22833a11407dc944a884fe716450b702505f36112aa1ef1119d4d100ea2b264225f48e23839a07a0be4a09b58025cf5e262e149cc8e207bedb11493c3e7e16e3f347fb8a20965bc9c08f20e36f958ae6bf9a81224c840954893088c513e13573966347f1909251c09e5fa744d94ea0744e1e974a1264e00aa8c0f50236f886b9eb8509ddb9c93c44de0068df34674373d22d7ec832f84100e65b26c18ce22944c703986f9b04338aa710ed0f60be6312cc28ba821d0060be6b12cc289e42540d60be6712cc289e42b40f80f9be4930a3b8bbf63c00f303936046f114a25d00cc0f4d8219c553884e00303f3209661437493b11c0fc9f39a7101136d9c9767a3f1d0c707c6cf69298289e38940df07e423f7e647bc52f117095ec4acafde6b2a8c03190c53fa55f195c265eaf1756579374ee1019be0154f8ba017c9f51e2ebc5128fc72917e8f87a0db7831c08b332d9410e2782acfc79d827b7781fd38ce20e88e300da2fc25a63345364f5e58e79a049d6673522c428af311a00b2ff97f4d50e9f52d3ad5c8f5eb9b91900f7953907df108e5f92959727814cfd3525caf6ae4d9f5a3a74ada9acb009b0c26f1a730d70f4373deb03507e1bc60e33856c53da61663780ef3b338eabb3fd3aaa85c5da1e1ba496f92d15dadb41f9f8bd49a761908e569259ea6080f3079370e64712e73480f3479370164412e79900e74f26e12c8c24cefb01ce9f29710e64c99b524c666b18f7d1ac6fe8e7ccb63ee7031f3562e95519b38f5bac0aa7134976284e6f50f7ff62d242c1d191dcb2fc2680f3579370164612e7b900e76f26e11c13499c9f039cbf9b84b32892389f0338ff300927a92f1c19ce3900e79f26e12c8824cefd00cebf4cc2991f499c1500e7df61ece80587ebbcede845384042b6a3d7af00eb3f61cd0a9588c67abd25793ce3e7a6cf93fb2b948b698d8a48cf0a2d0140ff35675d5014bd3687810ee87f61b873a98dcbed1d3fec7921f552d4b7e5dd1bd8256b1ac28e1f8d70f62a19bcc9005e8c125eb0855684f53a995bc275006d134ab4fedc0c093d3cc8dc0c0f06e565d330b2f898f0b338991dde05ecb05918f0c66d42e5e32b005e16253cbba65ea6d9b1b8c462623bc8d8ad30ee66c80787a3d7826c0360360fa3b249cf078e704a832c93178212b24518958db70502515c9f960facb465d856aaef8fdbdba4ad14d99f8b5b418b966ccbb4cb8095b66a5c2b8d7a93e83760a5ad1bb37599e86a48587692b91aee07acb20d254affae3484cbabe84e280038db9a84333f923857039ced4cc25910499c77039ced2971a67f7e461447db2b00d60ef4fd24af83c3f9915ced7b1180d9d12498515ced7b2980d9c9249851dcefe86c00733393604671bfa37300ccce26c18ce27e478b01cc2e26c18ce27e47e5006657936046713ca90cc0ec6612cc28ce9c2f0230bb9b04338afb1d2d00307b9804338afb1d2d04307b9ad44f279d3d27eba70f07387b998493b4794486737780b3b74938495d60c9705e0270f6a1c4a94e531fcd36b5d3d42f6271847d2911aa4558a907e22632e7dae0f196d01ab19514e9b0dc9754c372d7003bdd9c12725f96b8914f855ce5369ba9b56d89c50074db26044bb6ba6d0f00b61f25d86c07d82ae1215227c4c47d44dc9a53516c99ee08f06637e6447168676aaca742d902a0ec1f46110017bb8e67faad7dc6b3d5d63bf92c047f78b2298f0f41053680126c7f01763aab15eb8339ce4ae1afc43f8f17030be4c1f613987da09efd7c8a75e5f80937f1236b64b502800736ae036dd4cbd3eea01018144621e07fd693740885ac10381a801d6c2a58c2e11432b0c703b0434c054b381c4d06f6140076a8a9600987a6c9c09e0ac0e6980a9670b0850cec6900ec3053c1124ef391813d0380dd82126c97140d2c155352ffd1e954186f0618878731160031fadb049dd04ac936412f06784798bb4491d0378a6cd548738076cb300a006c98255e00107602c80a80b600e3484a8c7cbfe4623981a296714f1796c9b37df47af87cd753052ed79c25b2849510d97a9083800de635e68869f4b7eaff1d58e5a8304ac5bc069ce52c7e7a6bd437ffbd0f60cca7f62ee1c02689802b98bdc9057f753f30e43c473ce58b6709079b1750c1dc06c02c08237be7b9cc35457be2f90580b2300caf278e123be3202498645dc8ef00ccd1613842146e728e10ab00c2a2b026e8268bbabb5e283183f1b38a7889399bed2b86376aac67bc0f541dc6041d5905b42d003bc69c35f1515caa500c508e0d630f914247733dca0da1b500de3833971c12ae9223ab7a56821ecf56e66c2610c5cee327c042b736673301c2e935b2cee311c02ab73133b31356406499bd0a60dd360cff65af7bce8ea5ccf0647bce360138b73309e7e848e2bc16949fdb9b8493f47c0e329ca7029c3b9884734c2471be0f708e3709675124713e0c704e300927e9c95b643867029c134dc2497a541419ced500e724937092ba2192e15c04704ea6c4a90e80e40df44de700c89d00be29262d3b1c45d90b22c3391634dba79a8493740316329c7b019cd34cc25910499cb7009cd32971b614022aac72d29eece592c970912d216c0ecac61d29710d65c9e397899e6d13195ff8ba42fc9b8f1cd50b919305601ead52412d840530bb50c11e0360ef14463d3e4aae6e0b750a836cfee71f806f0625be5e0cce99f38fea851b428d18c5ac12339576868ffaccf90f00e9ccc61c730fad0b4956923e002a9e5961382170eb9ccaf8ac389f3b5f2adc106a223d577e34b0c6d9e6acb58ce2ee9d45c01a8b295176e501881aba5c7e54c230efb7da0866eb96c0267736d7f13f8ac7455c00d0ce09c307ce9b6b4c412437457d16c02c310966143d8dde06304b4d8219c54d519f0630e79a04338a9ba23e0360ce3309661437457d02c0dcc5249851dc14f52900735793604671ab944700ccdd4c8219c54d511f053077370966143b96ef0098f34d8219c563213e0030f7307353895191dc11695f30fcb1a7a960a3b823d21a00762f53c1467147a4fd01d805a6828de28e480700b00b4d051bc51d91d601b065a6828de28e488700b08b4c054b38464a06f6500076b1a960a3b830e63000b6dc54b0515c5e7824005b612a58c29e1719d8a300d825d4bb252d103e4cd06fa45492200337d44b54d201c7b78b51e0969abdcf1c611545b6cfdc1c6097cba8e7ed533be4148935f08423005954206f03202b2941f6d780b41d70f8dcfc4ab6a37064ac666ecb120801932d4a680a0a82bdcdd9d8228a33a44500e5729396cb8ca6acdbc92cf34e80b3ca249c8591c47919c0b9c2249c63228993818a69a549388b2289f32d609dab4cc249da2f22c3b910e0ac360927e9041f19ce6301ce7d4cc2991f499c2b01ce1a4a9cfc87dae3980c1399636d0780a9d624ab1b4b3935476675cd408d5d6712ced191c4793db0ce7a9370164612e76900e76a93708e8924ce4f01ce7d4dc25914499c8f039c6b4cc249ea2542867316c0b9d6249ca40ee06438f70538f7330927e9a96e643817039cfb53e254db4eaaf38839877ac667839ca7103b37b5201c69275b16db0fb43f0f08634e4861add4ce09a9f2930c24d95ace3a00f240534046f1e0f15500e441a680242c31c940de09401e1cc6f62bf6292f95d66b8b45a9389eb96d6fc10f33592a94e5ea86b4d905d906d33f83ea691d25ec210eab5dc492976c7b5fdc4d5840908d40dd08ecfa903036c318cb36b513391e02d67a68181b0f286bad15f6c79b525324bc8a4dacfada0558e761e6ec3312c5f5c82300cac3cddd1e83d0158cac0c7d0d14004784d1c8ca939e4b5572cb96d582c3aab04ad27e54207f02208f6cdcec6e8bb20f9620f454226b421d03b2fb519428d5113ca31c4043b043b20c3d05d8e1d166bbce122ef422739d9d096cf3983006f3e0e984ba6a27daedcf1781b51e4b8973104b6c7ff20e687c373bfd2284a9f2e3d996b8bd99bd2081b42dba3515e6ed80d51e678e1b6d1457d397028b3d3e8ce167ff8b65a2b8327929b0d013c2a8b65441c0cbd372c7e6829bdee87e1780f7c430aa2dac759abc3b3da1b592e11c02709e64124ed2293d329cf300cef526e1249d7026c3b901e03cd9a409e7d194eb8ec9269c6f0335fe2926e12c8c24ce8b01ce534dc239269238ff06384f330967512471be0e709e6e124ed23d1bc870ee0e709e61124ed22d83c9701e05709e69124ed25391c87056019c6751e28c1f95d20843cd64edccaf00beb3c318a7e7012f1196a864af94af446f1c2906e09dd3f87b3044d7df6e4bd0db39d71490517458e806406e300524e11c1119c8dd00c8f34c011945c7c51200f27c5340123ad09081ac07202f300524a16b0219c86a00f24253401236bdc9405e07405e640a4842072e3290170390179b02927062970ce45d00e425a68024dc4e920ce4f500e4a5e638be46f1ec980100e5656138be261f463adefa6c31ab10936235e098bda81f4afa238ba3bd9c12ed4096e870506dbd5acb2a01486f5e1d513c216105b0df2ba200398aa725d400c8579ae3794cd87327f33c3e1ca0bc8a7a44337ee83857b45670582a4a58fe19193c32cfe3f6a044bd9a129eda463abe4a439fb94b45e5c4d12e11c256d096a2644b0bea01d86b28c17606ad801aebb5baf0ebfbe15459fb7b00f1da30ab22e5bc1d5fe75622c0d63077e7d8289e283703949fd785b937830d94bb73f3d27492b64715dd6da6af0558af37c77d3b8ac7f48d04c5c00d61f4a852bb6febaa2942b464d5d459c04a6f6ccc76e824c617c72c92ed50c20c3f84aab25a0b50de1466395a692931cf7a586511712ec80e6d19cc7a2a0bdd08b0de1c86c3c2e8f0bd3dc84ace1b41c9798b990b5fa2d87b5f026c722325d6ee294a4d67dd1ec573637706306f3509662457ba0198b7990493709a8e0ce65400f3769360124e1e93c19c0e60de6112cc289e0b3319c0bcd3249851dca9660a8079974930a338fb391ec0bcdb249884531b6430270098f79804338ae39c5b0398f79a04338a4372db0098f799b4fa97b40a225b953112e0bcdf249cf991c4391fe07cc0249c0591c47905c0f960184baeb817dd6a30a219ca2c2619bee92c8eef214a7cfc04de62eb87bde13917b5d27a7d19ab113343956c3f30351c3d8c5900e3c39418fbb1f88cba3d3bb9c052b75678d5a9dd0ff9eec8e5625cb34c4e5a9433b5daad2e8270e703b88f8431c596de6e9d848d7832179b2b00da47a9b3bf5b65a4624a3a0f349d6accfd2650093d66f61e8984234a647b24ce06781f37b700209ce0202b00de0305c0139468fb0bb4d3847dce6115c205bc52eed8cd4529ffa5e52201b81d2fb6fe6d8b9f625db9c37879042bafd600f09394805b09c04e3f65326003a880f504c09e0aa34ac27c93268a2c4e7c96c16caa2aa91328339f0e634409b64855f33edee08f760b74736093cf84e1890c61a62e33a30b760600fb2c255875e206f7ea58c136a51337ce03089f33c797338a73eab301cae7cdf44822f4fb20f348aa0555d10b945807f8b0d0122bcc2a017cb6f52fd55caaa5aded77a642bc1940fc2225e29eccb92eae4cf49636b58507e701a02f99591410f6e4c98a824a80f56593f69b1b4b69a564fbcdc500ce574cc2393a92382f07f5ffab26e12c8c24cef500e76b26e11c13499cef029caf9b84b3289238ef0138df300927a9071319ce6900e79b26e12c8824ce1a80f32d9370e647126719c0f93625ce4e02279fbcd0ed71532a8990011c4a05b02b00f84e18037579e26ffbca1d1c4a983d1a1addb1ce6500e1bb8db99c35b4ca866c47b0fb40bfe73d7376048be2d2977c80f2fdb032b63d40c705ad91993a8411f89fa9103e0032f60761cc587284150d9bfda8c7519fc8780c60fc305c2f8f4dfdb8c66c80f623731d6808d19239d06c0068ff1746f999bfc9cd606e09107e1c860b373f332374176e32efb8a100df2761787a789b00ce8fe414f05500e6a726c18c62dbf26a00f3339360467159f53900e6e726c18ce2b2ea2b01cc2f4c8219c565d56701985f9a04338acbaacf0630bf32096614bd384e0230bf3609661497559f09607e6312cc286e2c750d80f9ad4930a3b8b1d44600f3bbc61d0eb645d91b4512f67fc8362c3f0e0c077f6ff64a36c23294aeaf0ef0fe10c63a6198edf5a39c3b5b8cca443035e2b9bd3737616d4fb623f72fa018f8318c71f8510d80cb193c1a22da5b023c0830fed498a569e2b6bb84dd4cb26d77d783ecfeb3495e1ca3291b4d645e1c7700cbfcc5249c8591c47929c0f9ab4938c74412e77f00e76f26e12c8a24ce3701cedf4dc249bad09f0ce70280f30f9370164412e73100e79f26e1241d0e21c3b902e0fc8b12a7da483fdfd1f28cf2fc792d80f77718eb2bb9ffd124c677eeaab67ae615b2ff63afaaac1002cb8400b8a7572d8bb2efe61600f13f266dda47ea3443867310e817fd6b124ed2690e329c9300ceff4cc249baf6820ce7c900276b66104ed265806438ef01386361e0f43e084238a644d654ba0554454d4cc25918499ce7039c4d4dc239269238bf04389b9984b32892385f0238b34cc249ba953919ceb9006773937092eebd4d86f36080b3854938499d12c9702e05385b52e21cc69c9bf8f0be7cb9c5832f7151f18caf2bc2fc45c65bffaa11f3f2a413c6ff524dcfdd0b5aa6ad28817765ee4e3889252b1948b2f598c380e5b63605641417b6f60520db980292d08d960ce49100645b5340123a7793812c0420db990292b0762703f93f00b2bd29200917c290813c0580ec400932cfd14caa4717afe26b88275a6fac60d5e23b7bb976488da62fa91a4d57834653474afcca73d9ebe828e1bc27d9d8687f00b393493009ddc0c9600e0430373309661447ed3b03989d4d8249d83f2283d915c0ec62124cc2162919cc1e006657936012f693c860f60430bb990493b0654a06b31780d9dd2498513cd8b13780d9c3249884cbbac860f601307b9a0493705b0b32987d01cc5e9430f1d360a6587f5732fb68c7524b00171cfdd360f66271b0bd29c1da9beecfb05e582c5c15e1f2c2463b828c6cd1610b80b50f25567fbb25467113962d40d6ef4b8932d8466a84f53dd9466ab7032bdd9c12ad7d50de6a919d7901600fda9101233b28af3300d6af71b3b52d8a7c9d26d9aaf76341b6cea64499ad41e96fd53b618f9dac02da09e0ed4f89b7336830ad160d22be1441ad200e6559f67a2a889520bb0fa084c84f2c9d234a477bf5c66a11ff5574c8fa5121eb04900da444a6fc9360431d6b5d9237cfc9b2f110807350188d9fe452d24bf3278abbc8e68212727018753936399cd8448fe2066a05c04a8784d13b4fa7894e38bd4666a36700b0434d051bc533d84f0660734c054b581490819d0ac00e33152c61839e0cec3800760b53c1124e1493811d0dc00e37156c141b580301d811a682259c0c21037b1c00bba5a96009a7ecc8c01e02c08e34156c14079af70460734d054b38394206760f00368f12ac3ac763346b84733cc8f01d0af08d32670c208abb2b970094f9610cfc79775e8ca297f2b66074aac0249ca49b5d91e1dc07e02c340927e9566c64386f05384753e2eca3c1a95ff5318fd9a7c5715105b483273da9e6449701ac45945853b98c3987a4a37810c59502668b2c87f02949c2278a0c5925ed476d9d36924d6515c2b23888c5d6ef19a24559c7165a55ca7ceb3f7f29b0a7f59fee7e4cec8f3799ad61d5e22e97572e64afb09e72cd6a591e5f1635861b444b691039a24531de62ce2d9e4f1df2d0d7b212666f0d37dbfa5b39acd50b2439620bed62eb5e3de3d3dd3c84959626cb588d8871e2d67139b19682937de4658dcc6f395257750ce674d996a9b4e25c26f35e8ec05d2c8bb99c583bf04bcd0b4f172df15aa11536f599239294ffab54342fb95f184fce9838ef59693f53c4bccc8a7199b8963684913bca7a2d5664fd65f7004636b4fd47ca15622be42f753fb54c9e7eeed2c6f2448ae9736d55c62c2f558cecccc2bf5f22c85508a9d353c63475fc702b6eeb922ab9f93c2d36e5f88fe3e92e935d9869f7581beb5f73ad94b785f3234d6bac7f73a54657366159ff0f0a066cdce8df0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/297080557d816484cbab03269d8f64b4.asset.meta b/Assets/SerializedUdonPrograms/297080557d816484cbab03269d8f64b4.asset.meta new file mode 100644 index 0000000..0aaedd4 --- /dev/null +++ b/Assets/SerializedUdonPrograms/297080557d816484cbab03269d8f64b4.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4393201f7fec7c140bb78b3388d189cc +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/29bd21032c7bca44b9b818398771d5f0.asset b/Assets/SerializedUdonPrograms/29bd21032c7bca44b9b818398771d5f0.asset index 04e2344..338db05 100644 --- a/Assets/SerializedUdonPrograms/29bd21032c7bca44b9b818398771d5f0.asset +++ b/Assets/SerializedUdonPrograms/29bd21032c7bca44b9b818398771d5f0.asset @@ -12,9 +12,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} m_Name: 29bd21032c7bca44b9b818398771d5f0 m_EditorClassIdentifier: - serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cc5f5f8f76ccbbdf7de8b8c6d495633068365cb156ccbd8b2e9d8b28a2d906d21c9c6a61a30bd83e9bdf71a92400281d002040810127a2784100825b40408ff9dd919ddbbb97977b7377aa719fe3ff963ad7677f6cd9befbce9ad4daee7ff4426fbbf567acbbc522fc75be155791bbd0dfe5fa5fe75bdff2fb893cf977a0dfe75adffbbc27f37d91b99e44bf6332132d0ffbdd0bf6bf49afc2f377995feb596bf5fee55fb7f2ff4bfadf6efd8d31aff7fb5ef2ad2ceff688537c72bf396780322fd928858c93f6a14cf222c5c918efeefd9de56ff6d35578a7992cb5f0df07f2df7df34f277eb7da5a5bbfdbd0379b0d6fbef2afd6f1abc3a5fe61a2eb1e3d8028fffe1059789e2ba93b8b615d749feff4efeff2ccf6b572e9eb517d7b383bf231bc03d0b699db8efaeb8dba8b8dba1b89b2cdcd58bfb0ee27a8ee2cf39e2fb97c47d0fc5dd46c5dd0f8a3bd59f8ee27aaee2cfb9c1f79119e2bea7e26ea3e2ae4a71a7fad32970d7e63125dce729f2ce13f2ee4dc2a7afb8ee50bedf21fc99a1b8bb58b83b14dcb3eb25e27903b867d74bc5f34670afd3a39fb89eafe871be125ee9ee32458fcbc4f572458fcbc5f50a458f2b103d92f06c3b547127b935817bf8fd06e5fb12e0af4c079d14db4218b4bd48717781e2f705caf71b94ef1f50fcee00fc96f676a1e2f785c1b7edfa2aee2e52fcbe48f97e83f2fdce8adf1d81df6dc4df1dc5df302f99e445f3924ecab32bc1b32bc5f52a45ffab84ffb77941fe23d3f11471cd13d7abbd587bba5a5c73bde6bc6bca2be2594e02ffaf51fcbf26f0bfbdcc1fda89ebb58abb6b837759e5815f59972972a78aeb75e2bb4de09e5daf07ba5c0ffc92cfb2c4f506c5df1b84bfcf046e9839c6f89b2fae372afede08e40a3e1d64de5ea0b0bd59617bb3b81645bfcd2b11cf0ac5f526a0fb4d899935fb2bd922616c7f9708e3638a5c1da75b1419b708195f296195328a85fbcdcaf36969c45b1678b6b3f06f9b973cadc8f0dfaae87eabe0f4b0b81fa3b8db10ebaeb3ccc3a603f7529f5dc5f576f04cfabbbbb8ee22e41ea6bc9f09bed5bd97363003793f4b5c7743decf56e2608eb8de9140d7d224bade9144d7b949749d97a2aeed94eb5d40e7f988db05e27a8f176b5bf788ebdd40c6dde27a277876a7b8dea6d8cb6d8a1dec21aebfd07c2b392e54c229dfcf04dfeade4b8e7b22ef25c745c87b95e3628fa7971eb25c92e9190ba3acff8d55dc6d8875d745a6d7e9c0bd64b1c48b4f13d25f2c4dc8f7589a90ef259f32e4bde4b31479aff249947f8cf6a269825def15df6e01f73e8bae0f28ee7e09c2dd5eb89179ff5e8a1b5fafaedbc4b30ec2ed018011e6b6a3702bef9769fc5e0e9eb16b79544e37a9f38ae0be4f9590ff8e78be520993eedb44ecf656c21bf6fb7d140661bfdf57e112f67b599e49fd7fa5c47d17e5793df2ddaf95ef7a29cfd5ef6478ef53beebaa3cc7bebb5ff9aeb7f25cfd4ef2f98df25d37e539f6dd6f95effa28cfd5efa43d3d20de6f15f79d95e7ea77a3bdd4eac76ab9f13b2ff572e3612fb6dc78585c1f02321e12d7fd1459f2f9fee2fa8822eb1171fdbd787e38b867d707811f0f2a71faa8c2f8d140f79edb15a652866fe33d9f5464497b7c4c91f59890f5a4e20eea33405c1ff762cb8cc7836f7b7554dc3d28dc1d21eefb8beb13caf74f04dff796b6adc6dd1f800e52c69321e2f369250e9e16d7a7808ca7c4f50045967c7ea0b83ea3c87a465cffa8c4e793ca73c92091cdca36fcb30a9f67059ffb94f01d24aecf293a3d27ae7f12cf8f04f7ecfabc787e94e2af7c2e75956ddb17147d5e0874e8b340d16795b8bea8e8f3a2b8fe593c3f1adcb3eb4be2f9318abf2f79a9b393f9f05fc437dbc03dd395d5d958f976530259aaddbd0cec63b5a7b7b10a717d5509f3abe2fa0a9021dbc97f05cfa49c35e2fa8622e70d717d137cf3a6b8beeec5d6c95e0fe4f5dd1684b5ef0ee09f7cdf09fccdaeaf6974a914d7b7155dde16d777c037ef88eb5bc2edb18a2cd96ff79e22eb3d717d1fc87a5f5cdf55648d14d70fbc583bfc20f0a7ff40c5dddf80ccd7c4f543f0ecc3e0bb7e0f03ddd9b51abc67fe1ca7b8ff44dc8f13d7bf7bcdf92ccb96f8b3f1ca3ba98f7cc6e41e2fee4789eb474ab83e12e1fa5c71f70f4db83e06cf3e16dfc93ea77795707dac844bba97ed7e19ae7f8270499b1dafbc93fac867305cc3c5f513255c9f04fe0d946d861a71fd3790f91678c6ae9f2a3a7f1ac818b04371ff9570b71ddcb3eb5a45ce09b172069eaec89165e83a71fd5a7c7722b867d75a71fd46bc3f4991f3ada2cfb78adcefc4fb9395efbe53dcfd47f1ff1bf09c5dffabf83f5c797e4a108fcdcc8703ffe47b763f42e1b411dcfb9c06cb7ab82ecede05cfd8f53325ce3e0b640c5aa0b84f166752ce09b172069728724ce34cca091b67ef82e726713642792ee2ac99f908e01f8c33b5bcfa178893833d7d797588b87eeec5e6c732aff90cc890bc9f0ff419b2543c977dfd5f28b6f245e07e484fc59db4b553c5fd3071fd52f9fe4bf1fd52c5ddbbcaf76d13fb3f74b5b81f9cc49f4f1479726ced7b85cdf75ebccd0f06cf609c0c12d71f143f7f5074937eae17d71f153f7ff4a2b6db4991fdb5e2e790c4e11c26ed48dac04fc25d23b867d7ff89e7a7817b1896d3bdd8b07c87b83b23d6ddb012c59d6476a6a23f649905f496efab9570a7d0fe637f4226fc9ee9749df0e3be04b294fa5024121b47fc9e5de5b7ecefb6c2cd59e09d7cceaeedc4fbb3c1bdff7f78490a7ac830c17ef0d55ec27a69a483a2b318f78db4073a8bbea91163151932dc1d1519a29d17e9e4c5d71d378077ec1bb57f7723d0d70fc748f95cf2e9acc457e7e05bd55db3fb2e40877a8585742bc65722dd947088be8d4857c042b6231ac13b108ee6f7b21fb50179bf49d125155bedae84bdbb08fb52c1aa2a812ca5be1de9a184558c8d467a82b0f6526cb52778ceaebd155bed2df4f924053d6498fa84b0d57e8acea25d1ae90b74ee1b7c37ea7924dcfd1519a2bf80cfe4c06c75406ab63afa2ec5f6062af13530f85675d7ec7e50085b1da28443e48191c180852c0f1ac13b688bf23d66abf27d185b956e441b3d32547c7b0eb867d761e2f9b9e09e7d7798d7dcb618332305ffa41d0d57580f0fde8da913b2b685b0c911216c7294120fa3c475248887914297ef025dc62af58ac81845f73181fbb1afc4ba6b760fc75092d9c978453fd14e8b8c03fac97cbd11bc837620df637622dfa76227f29bd15e6c9f8ee4ba4579afa6b9ad216c51c6e70485ef84e0ddb89383f81877590259a2af3292edc5da71b6782fda1691895e4c7f29bf6f17348bb9bb5dc077c2bec7cf5164893ed5c84e8aac9d84ac398a3b290bf2395cd157e577441afc2629fc26097d9e14e17823812c356d4df6524f5b395eaced8af92391295119fc6fffbb0962fe47b66c43cab492afe89e1fb8cf2e8c75d7ecbec04b3d6d1529fa15896b21d04fcee96804ef60da91efb1b425dfa792b6647998abd86aaeb84e15cfcf03f7ec9aa7b1a323c13b9d1d1d95861dc9b91e1bc1bdff6e62cf20ee268e4d204b96d3d362c3d6fc7c674d188e56be51c3704c8830c8743e1df8239fed0a9ec9f1e36de29d9c93b109dcb3eb6ec0467613d7dd85db1d40ae7cceae722cfc7c70ef8765d24588df3315bfc59879a404f85da2f8354b7c7301b867d7d99a308a6ba414bc3b56612add8abe9ec85c45a7b9e23a07e824f3c579e0d96cf08c5de598ce85e09eb1a857c223e32b2bca49be6bce477715b22e127628c76c062adc37827be6d72b8abbe9c25d2ae311c72bdf2e88b5eb88ccc7b647f59fbc2805b9324e162a3a2f0c749e7ca49075760259aa1dc939269bc03dbbee01e25df689c93421e79d9c0fee99ff3f04f2a7140219ecbad88bb17d298f3f87f22e8e953745f60168c2216537cb5a126bdbcdcfcb34b67d82f28d3a3fe4442f79de21f25d4ff4e345f612df5c02eed97529f05ff41d4696459f45447f5764b9c248b22e076ecb815b765da1c4c38a805b5e3b45b6fc6e652ca3889cdf21fa54227b8bf7723e728d78be0fd0616ff08c5df715df5c06ee7dff733b063c73df40fc9263e79bc03df4737ff1fe7270cfe49e1deb3e22c76caf00f792319473a52247d12b722008a31cefcd0171a7b341659e07bf07794d8e4cd335a9c9d33e93fd9e458abd1da4d89b1c0f3edd6bce53f21e16cf649f5e611afe8bfebcc82af0ade80b8cac06cc568b6b0562c76b80db35c02dbb562a765c19c451fe478a6cf95d9562c7b26f44f42946645fa16ac73540876af08c5dd72a76bc36d061aae8ffce7f18f16b9d62c7eb143f6b153bae15617b38d67de460a0dbc18039bb1e22645c05ee991fb2efa64ebcdf0aeedbc5eb1c590ffc907dcfa725b609c9bcd9c6d77831363e558ed7d7a4262ff6595684f7812ef0aafd7641bd97cb1db1d22ed5a546f2cbe48b8c98e8f6ec17fb99c0bd6df21b9cf5be00cd4a9f157c1d519357e0e56b57fa0ce27d83d2f752febbc27751cb855e1d89f3e2fe382f987275febf6ab04ca9d17f3e9faf72620b956afd3739de22ffcabe5aed4df5f6f7ffc54a59e97b5be73720aabd72ff773d97b7da573bde65b220b1254dea37cb7c99c18aabf5fe1309b4debfafe31a2ee7bf37734dabb9f60bfd674d7cfdd7066fad37dbbf6ee1bec587bdc1ff5be767b940a6d751bff00a7b1e2cef92d134c70f0dd33e97b7f5fe2f465a2346f810094b1feca75d2eafa99c1a1713ffc730c864588574a1903195238bc43ccbf772799d75591cc1f0618c0fa1debe03dec57e65225158f46458740fe12188c670bf31dfdefad4d997cfcc8a0d5a8197cb86a6789f72a2a02502cbe465f351803041c8ca6ac76bd02afe880e3f1f525b9e41fc81bb5aee2e7c04b4e7855f6c04f0e1a172ff8f2dfeff3adf7199af6834ff63292c2e6ef298a00e1c6f7ce1994c450c701b1de08e99069c3c474904b86373b8a280d98f9e60278460321d30826d7504796dec005282f1552ff9d76cffdb753e89cddc9e36f9dfebaa6a8999b261e0290a533dcf2e9ce7486d05329c4618e1761ac2798c70579d929d1425997e88e02c4c703743c1ed7536c167da97673055b1771bb9940adf6df874c586c327a91997de087a7023181817b8e42a6091de4117370c614fad566ae4f4c023a72326b997a9e44e98e4de1ac9f106954072679d41f1a90f07931ad40aff59d0be9acbdfd6f24a39ab9e5770e9657e0c1eec05957716bb987b69528bf96e0f9bb826898daf4fca19505f6e7bac9f87525bcc4ebbe8e29c3dec974a1ed2178ff2ae98e0fe8682bb618207180aee8e091e6828b807267890a1e09e98e0c186827b618287180aee8d091e6a28b80f267898a1e0bebaac8b1b7765ab645dac9e97e3cde15fd5f39ac761a2684af445e2cc6a78ca99d5089e594d489059a5a71f963df5d3452ba33f3295681d81476b7f4cf02843c10330c1a30d050fc4048f31143c4867e13c975dd58a161eb42e131774c92d7b6cca963d8e5bf698a4969daa5e98450fd64523a33d3e95681c8747e3104cf00443c14375f6c10bcbea56b40fd6daadf77d6bf2e6f19dbdeafcbcc6cc56b253b69589dc562626b5957474c4ec66982e7a592cec944af44ec4a377386637930ced66042678b2a1e0913a83e495acd5ad6a90ebfdd0acf5aa0dcd704aca6698c3cd706c0a6698aa6698f18dd24525239e9b4a54e6e051395a1795bc5a9bf9fee9f47aefd884b8016adbd8c37aefa67a89ba97c3f6dd8dd1450b6b6bb3598d460df6b198e40253c9e37431deabf54a9360046fa3e8d36bb90e003671a2ad022a97377f12951be96be3678adb66825fcf3eb3686696de088b92165fe9ab8199ea789d41b1682fd670ca639c582e3f13fc7af6996776cf8ab3b422dcd226605e4e4be4653348dfcb82828299a1bcccc6bcdc19f5b2a6a666a6f457043a949713755eb23ec2e9cd8ea35efee4ffc409ef840bdf0913be8b46382bd6c3089fa413cedcef9a4aa192a0fb7a329679cd30cdbca6603c76d3f0f8a85d381e39188fdd0d79e4eab25cde6152db6a592e93b991df6f48d2980a9ff5ced4f1d2e684253c279c92242734d315cb11f374b1c27b9b8e258d9554e749e97a9de369c88932cbfc6b0dd7823daf1475cdc47e258ec559cd7c4001cafb83e67aa9cff6a20f059b89de865b5369526b2ae71b5cb321f21a1ecaf5695893de92e770bfed228359fe545d46c706cc98fa71530d58c6c62c9bedb2bdd15bea3faef049314de2f2c00e781e988ff9394fe727eb56abf0fface203be8b799c052da870be1660e5c57c4d7931a77db8f2a2102b2f16189617453ac17df86d0a824b70c1c55824eca18b04d60c64c89bbc557e66601e19d330dff7d4f9ce7a4557f9fff2fcffc9b460ee1ab89b30faec8c19c7228d71547508671cd375c2591d882da0301a25de452799c5155b1aa1b684d9fc9c38e15371e1bbea84b342b14c531ae4b1d2802d58e8cc8d39ce9f39b83f33305bd84b670bbdb92d94f931beb23923622d769689afe0a31c155c4a98d8df4da3412e1f95604b325a636a18764441e2627a99266272f920c8a0b870a4e29b58d412fc74404a3b360d253b4d0fb0526977cc2456e84ca21fc81eaa7df44169c98c8299c716fe8ecdef0e0eb408631833313d56e2a619e8b18e674a55c228d2d7a004d3606f9d067db5249688da45fa5accc2b4d847a7450fa005f36dad1febe9fb3d1bf37b5f9ddfdd80dfab784d89d5e102ab0c5744956279eb7e9abcd50b99b7cec1f2d6fdb1bcf580b4f2d6b918bc0375f0fa68f256968c831c35dddc759e4e0796bb1ea40beb002fd88c12e63baa67e5b867f3b100afd60518566ba2414ebf5ab300f3bd42e7bbae5a8369915eb5662166c36b3436dc31a40def81d9702566c35569d9f09e18d46a3c0b6436bcd87fb0451c1dd4240aa2463f590759f3da9056bc08b3e21acc8ad7a66fc58b759eb1f859e7c5574777740e571d5d82c55b2d166f07a7156f653a7f18e14374f1d6bf39de640cb1666f9d9fa01bf83cdffa9898ab0a15774bb1b8abc3e26e7dfa71b71796e63668d25c24649a5b8609dfa811de36a4f0e598d5d56baceebaaee1acae1cd3fc508de65e48cd57609a376834bf37a4e62b31e18d1ae1ef8414be3726bc49237c64b770c2f7c1846fd2085f1d52f8be98f0cd1ae1578514be1f96771ca6cb3b58d6240bd045a286c23ac6b686ca25f6c7fcdca2f31356b5f57ea757641f8069b155a7451f107256d96de483859b3cb9fe27da080aa3c381980e87eb7418aa21915897f4c81c846975844eab4e3c8156727f588ccce3ddba61fc5b85f97724660ff5a04374b917ac4e61bd0065bc29d6c09bc35521eb1dab312d8ed2691134bd4a793959eeff3ec40b8e45dce0057d1075a1fcaec0fc3e5ae7f7400f36bd12e9905efcafc1b43946a70d2bbdd9b07925f73f5c7da112f3699bce27d69357c9e33ae8906ff28ba38690a4ab301f8fd5f9d88187ad82376bc3fb558df9759cce2fcfd3e4dc09a4d768a4e7f2f9b2995c05a82ecf08d78fc636004a6dd072bba75f0198cc7face36bad2e6e582de9042fbe9634561735096a49eb30e1276a84f70c29bc56279cd9c9493aab6255d31cfe2f8c6d1d8cf971b2ce0f582b58e8f3df8b3f6e0c99eb1c82f9790a560aa86561acdfe9e57d759816a7eab4609d60b55e70906e8518222ce373ffc37668acc7fc3d4de76f778dbf8b453e15d6e70d98cfa7633e4bee9b782a4bbfc37123e6f319c97c5e15d3460d9f33d7633e9fa9f3b917f779b12861a3f1bb985b5aa3e83a0ae3ffa198ff67e9fc1f1c13f2647aa467f70dbad26450a64b93e5a2f788c9095f9ab02daf46c435704b4af425ca394889924c07ac4469c4e2f4dc64d6cc7c586b908e9a309fcfd3f90c074f641c6ee4ad87f435d88469b043a741ff187b0efa0d65eff7269f85492d7eb34e13d6583edf8b6f2c8f1c13aeb17c982e91f0b52d999fb8cd2616844f226c27b03e7149449f402ef4124ddbc6fcc792c716cc442ed299081cd95aef05a7cda76f9e5b31bf2f4e9640a2e6196d642e16fa84d1e0704c834b92695017d7d5911e8323300d2ed569d02f0983f43b7f8ec4f4b82c593659c33b16d2277014e6f3e53a9f7b69099874731c8df97f45b29037f01c22fd901f83f97ca5cee781da9047e35ed7e514469b6d983657e9b46155ec4a64a0a23194bfc762fe5e8d51900d8be5dcdfa091c9ba38b0819330da1c8769738d4e9b515e7c732755add2ab101eafd38f15a4d77af10569dee47005e9769d70d610bece331fa33801237bbd8e6ccf18b290597a69ed44ccf71b74be0f884b6b32465bc2c64ed2e892cb97ccb2b1b34cd55752d9d24d5f5bb9d1d7b293828c8f8e6aeb2becd4ca6c5e72a5ee3f565b3959178becf6662f7e67b637ceeef350fd9bdfbd1c17355978d49c8299c92d58262893710d6f73cb0d336b43f6b89e8a25eb5b35c97a7b5eb8647d9a4e3873cf0e4237999c7bbace90f912ed43480d39f5051272e25dcb2de8b85dc74c6bf87770c3670b5e68f5c512cb195862b95393585ebfe388b285bb9d37284c6239134b2c77e9128bac39e9134bb83ac359584175b7a6a0d22e344b50509dad13ce0639eef10c976c9d8349fe85a9e47331c9f79a4a3e0f93fc4b53c93b30c9bf32957c3e26f9d7a6922fc024df672af9424cf2fda6922fc224ffc654f2c5bafc9f6f0ed13a8bf9cc973425cefb7fabcbfb555ea538af4b7431c1783d6028f8529d6056703f988ae0043b4e5d8669fc3b438d2fc7043f6428f80a0cc5c38628aed40966b5a8dfa72238412dea2a2c7d3e629a3eafc6203f6a08f91a4ce5c74c55be1693fcb8a9e4eb74925977c213a9c0d88e0bbe1e338c3f181ac60d188b274d59dc88b178ca90c54d188ba70d59dc8c99f21f0d4df9160cf233a6906fc5243f6b2af9364cf273a6926fd7496693ecfe940ae6125cf01d98e0e70d05df8959dc0b8616771726f84543c1776382ff6c28f81e2c55bf6498aa7f8145de5f0c23ef5ecc90ff6a6ac8bfd449662dc4973df3aecc5f616abf62aaf6af31c9af9a4abe0f93fc9aa9e4fb31c9af9b4afe0d26f90d53c9bfc524bf692af9014cf25ba6921fc44cfaed1630e9df6199d23b8699d24398e0770d053fac13cc72bbf752119c20b7fb3dc6f9fd16e0fc08a6f507865a3f8ad9dddf4cedee314cf287a6921fc724ffdd54f21398e48f4c25ff01b3e77f18daf3933ac16cf38f8f53119c604fdda7308dff69a8f1d3982d7f6268cb7fc452e0a72d90029fc1b4fe97a1d6cf6236f799a9cd3d87a9fcb9a1ca7fd208cee59bb066722472b67fc7fe0e3f12f985af65af38b2dad1982f3dfd306422cfb19195e731fbfc770bd8e70b98197d656a462f6266f4b5a119fd5927984dc0fbc6d3ce6b53455f888b7e0943fd6d0ba0fe0b86fa3b53d47fc524ffc754f2cb3ac92c37ff6f2a919820377f0553f97b53955fc5ecee0743bb7b0d53f94753955fc724ffcf54f21b188c9f0c61bc89a9ccd63019a9fc964e7270a8500a2a2718c67d1b63d12615c10958bca3119ccbf700670b6be9f7335ceecdf1f6f4dfb1a51f4c66f03c581011ddab2ed655e292aead8e88b6a06b176105dd70ee327d6db0a2ef5dcc16b20c6de13dcc16da1bdac2fb3ac1cc163aa42298d144047f8025b88ea609ee6f3ac9cc7da754544eb0c5f98798ca9d4d55febb4e329bacdb2592648363f82bd46ec31f6181e96a1a987f60fcbb19f2ff1853b9bba9caffc4f8f720e3ff0916989ea681f91493dccb54f2bf749259eda9772a319ba0f6f419a6721f53953fd7496619635fc38cf10b4ce57ea62a7f8949ee6f2af9df3ac9ac54196058fc7ca513ccda190323e6ed8caf31ad07196afd0d2678b0a1e06f311c435a00c77798f0a12d20fc3f1892618648fe8b091e6e28f87b2c818f304ce03f60c970a46932fc11537994a1caffd308ce1dc91eaef65aafe20e377a9ec57d48af123f3ae54afc98883c4ea7a534c32af43fe9a2921574635389ca04f3a558b3536b7de34cad2fa293ccac6fbca1f5b5d109664d8509864d85b698e06c43c1ed30c8134d2167e924b39ad24e8635a5f698ca934c55ee80d9c56443bbe888099e6228b8136617398676d119839c6b0ab90b6617798676d1552798159b530dcbd76e58ece51bc65e770c728129e41e98ca85862af7c40caec8d0e07a61828b0d05f7c6204f3385dc07b3e49d0d2db92fa6f2745395fb6176b18ba15df4c704ef6a2878006617330ced622006793753c88330bbd8ddd02e066339dc4cc31c6e08167b2586b137542798b5d466b5404b6d984e381b359c1d311d351c8e1947a9a9718cc08c638ea1718cc4549e6baaf228cc3ae6195ac768cc3ae6b780758cc1782c30e531168bc2858651380e4bdf7b18a6eff1580cee6918831330c88b4c216763b6b1b8056c6322a6f61253b577c22497994a9e84495e6a2a793266cf7b19daf3144ce565a62ae76006bddcd0a07331b32b6f01b3cbd3096703ad2b22ba6948aae42f71c95331c92b4d25e76371b8b7691c166066b78fa1d91562d9e8be86d968116675fb195a5d3106797f53c8d3307b3ea005ec79679d7036e3f4c054782498713a1dd3faa016d07a170cf62a53d8bb626aaf6e01b56760c65761687cbbe904b34d38d6a422f80e5cf0ee188eca16c03113c3516588a304c3516d88631696dfd518e677b335827347f9b711b69774e657d1ab7b37b7dcfaf9b53a52daf18f7511d637ce8e7ca6d0121b0b29c5a2b8d6308ae760820f36143c174b46871826a3793ac1cc28eb5211bc0eefb7998f65dfeb4db3ef05587eb5a105f2ab8598da1b4dd5de03cbb0ea0d33ac3d31db38d4d03616612c1a4c592cc6a2b0b105a2700996089b0c136119a6f5a616d07a29661e9b0dcd632f4cf061868297e904b3db2d91f87da7e44f9c0759b807cb31de5b5b80773926fcf01610be024b394798a69c9598711f6968dc7beb04b3cd0a8f4a45f04db8e07d30c1471b0ade17837c8c29e4fdb01c759b618eba3fa6f2b1a62a1f8025c6e35a28311ea8f380ed0d707c2a4c4a70c10761f9d376c3fc691586e4841642b21ad3fc4443cd2bb0bce9a416c89bd660c24f6e01e19598819f626ae05558c677aa61c6578de54fa719e64f3598e0d30d05afc5209f610a791d96f19d6998f1d5622a9f65aaf2c1ba56f568ff36a38702cce2e725b0197a699c9b91726bf99c88fe4880c4be63ade043b08ce0dc16c808eab0083fcf34c2d76305d10ec3826803d61f7d7e44b3cde9ee4a2c30ebd8c8ed88ed4c98c3b740ddc8b7b25ec18f376ef0dd2ef1d831dd159edcb63dd8741a9391f86d980ef18d58c82ed0856c9687f5c6c0be1818c2853c15d5f174c3be5a25429d5842cb85af1e0bdf85baf0cd40c337df0b0e908f0f67b00dff2cfea4969f8f122eee56faefc2ee157d2816aa8b74a1da050d55fceec34198e446f64d71bb69e2f117bff3669810356021ba5817a2696888e2b5880d51b0757c1056aab0346261b9249ccd258b9db51a9bc4c3a4b3e030a16ac24275a92e544569a42419ae0a9096828df76b5a3047d88485e3325d38f6f3e4fcfb157e1a653111c4cafae6f35c9b78cda0866bcd6a060b9b5dcee521602e96f170568b303588f0cee7e15dca6b116bc581062bb97dd6fabfd7f0d0a9e10e6a1dc13958eabb7463763346e4721d9115844496f3b7ecc08c4d3c544c6ef49b302cd2c9550fc3385ca1e3504dccc1cc3230bb68094e5b304e57627506e86340a6c0ff06d613e67a87face2b784da1491ca7a4ff0a7fde5239c4562c7c57e9c2579a52f816f2bccf9e301e8e85f16a5d18f3953006671907162b73ef72ff19ae69221b8c7e152604476021b8461782796879b4c2ff7e0e4f69f53c751ed65c470f526154c8defceb75e24cbe25fe959552354962d23cbd1d8985f45a5d48f3528c2bb9eb51989892df84d1fe284cfbeb4cb44f9426f4e14acfca8ec6b4bfde3c9db083fac2a713f65598101c8385e0065d08a61af3c7c3965e0c6cc3f4bfb1a55a70ba7a27d37581ff77352f7d1bf84167f1e93cfdfcf7582c5437e94235b6b9ae11bba2136ee302eb9489ea0661b43c0ed3f2662c8fc57c0d5b16e2b59944b5bef4e3e3782ca4b7603d3c7869329fdb4cbd6f31acd7230879a388974aae1f6b53e22db5d21837a6a5c7762c64b7ea42363e691ccad4b288d760d7f212b16552fa0998a6b7e9349d9352bd6b3e6fed07476236f839d73a6d1f4c266b5e2762a1bc5d17ca9949e363b9ef700d7f8fa58af0a14b37bf38090bdb1da9d49cb1fc62966ff1553c9de8fb46d3cb2bd20de3c95818efd48571764a561ac461d0db568986337c3ca6970e4fc14278972e84c509f3c272ffbaa5b9a495b96093784adda23f150bc9dde1ea0e2c248c653daff9cfe3f5823a5f97d609d56958a8eed1856a09527758c2b53e8c973387c4a4baa00e113dc53e5c9f22738dd755e277ab0813f2d3b190ff02ebf7d669b282a7b03a91a304a379ab78bda4517cce62245cbb28ddd2e00c2c44f7ea42949bb01e18cf369570a5affb9998eebfc4f289f0bacbda06cbff1bf94852051f2d0becaea5f2f4b3b090fc4a17929c946be352fbb91eebc797f5dc64df86d1fc6c4cf35fa75267c246ed92f5c6c5a605fa54720e16cafbb0f809dbd723636a73b39896294bcfc534bfdfbcf59db88ddd32bd07e761faff06cb9f4cfa9e92f7ea84d17d07a6fb6f75ba8f53748fce9ca06ef79c8fe9f940fafde98b78b9d668458be7022c7c0fa6d287067314354ef4bd1da9f5428709c18558087ea70bc17234ff0993dfa6324b229333292ec2183c944abb556fa5c95a76996af15c8c85ed615dd8f64c296cfa9e8732ffef686cb766aabc040bf3efc3d934364b21489bf16f1b7968962af3306098e4b1f0897bc862a5467386300c2ec5183ca263704073bdaf75e602402ea9b62fe53761a85c8651793495d96ed2c730f5c968c8303b68199bbf1c0bd963a9f467e373dc92f76767bac67c0516d2c7cdc7ad8abdc250ade3e8576142702516822752af15313fc3cf3208c2873d6fa918ba0a0bdf1fb0bea944b553a66195c7fa9fca34b3a5a2ae5b6e54be83ff2f1261b3e7e772976c16eb52de9b15e4f2b963fc577c3c57ee5f2af3c29c987c33fa9cf9beded788f12c6fcef5a2bb9962129ef481b56fe3053f13220c7693c83a34eba783d1953a11eaa0dec17a80e6f3fcb99ae7a46cd46611ef71688adb1f160b852effcf0125000c5df230c979e1ea8ced48a483089194e59366c3833fbb903ec562b59788d536b9ac79169994a63525d7e269e65b5bbd0d0d88230b4b5c9dee8100d94b156153d657790b781651c5236425ef8aabf63f090c3da98fea5a77d5c7295c802c31938a5b0192b74edc206e6641f5bcc10b9a9285dd3caf43569b3c16137fa4c435200ed722518fdee07fb6d58fb7a02ecd5ae4553c282ee05b3a2e8aef194a7c3d39be555e9e179dc41414e8c182159665b8006c51bb28b0672981b5e7c0d8e715bcbee3021cf623e13c4709a72f8753e63b5fecd744b6087b6a12021a6312a30be0ea7a44c1fd8912dca0b85c6cb9ef9ca9c1f2b179bc06ea664e76f6f828c2e7335b6ecef26db08a5765dc29379b40b9f90225aede71b8e4a81a9b4fdfd0dcdfe202b4ba6151682f5242ebdf9cbfc9c4c8aac675bcfb8e4df4ad5712a90bf02e9b1885f7674a78431324d0a02fabc60b56d0ba99d37d32290af2a5cce67432e92ee203c46e24da8123a3b8fe4289ab7b1cae323ebe2edbb82ec0baaf4b14d65fe98b0596c3455b9d4c5db6b471051f080f1a572e403ba04f14dacb94d006c759d832aec246de21272dcdcd5ced95ec28c457e8db0e1062b0059fabc5c163a3a3e05ea504d747936497f3f62913e85aa21dd93b8aedb5cc160b329f73a7b5f0555706ab4396225c1d8b4abf77371c61bc1f9a5559e67a5bf8286c039757a5f64bb3c504d669fe3aec57ce8eebfcc94ea9ff2c3b691544e722d61ab353e817d6b951dbc0d9a1fa68b243642ed929d71db2536e7cea42a4d675b343951cd969741867a7d93d939d76c5203b744b33dba879151d9ed30fabe5b1e1b937fe3f1f39cb6323676f32086c871ff61394526f5196520345fe120c946ef0ea120e29aff22116a83a0c8dd32176ff2a5942e9b4e9145386f5482580e99463b778d142ff6d9b70e63b89f30180f31d9b70163889f34d80f35d9b70163a89f30780f33d9b70163989931d042671be6f13ce622771ce07383fa09fb880e38c9d6e95ef4da383b99d0a661180f9379b60163b083307c0fcd02698450ec21c0f60fedd2698850ec21c05607e64134cc202880ce61000f31f36c1cc7710667f00f3639b604e7510663f00f39f36c1cc7310660f00f3139b604e7710e64c00f3539b60eeec20cc1900e6bfe86753e130e142c6a994b5cca954289703949f51a2ec2750568a7e7675dd185c934458f46451813cc38b82fcdc169084c50e19c89301c82fa8672530c76cf00fe68ad19d82cabd6007243288e3a8200e0110bfa484c87ab936c68c1447c7f498a3cd74f0fa52c1eb09e0fd9b7e56566cf1926c379d55943d43ed2244487b8162e6abd62cb1a138d282a60395757e0dacf3eb4cd424b18226166521a55d92c13c06c0fcc62698847de96430b70198dfda0493b0c7920ce65100e67736c1246ce590c13c1ac0fc8f4d30097b2cc9601e0160fed72698847de964308f0430bfb7092661d3910ce65600f3079b60ba58cf3c1cc0fcd12698843d9664308f0530ff67134cc2be743298c701983f51776e304fd93e6d8110765705268fbb377b680c80e7b569c59678ec40848b0364d70194114a944305cab529756bc0ddb1080b9e722aacf300d63699c05ae73b6240833533c1c6b86c63e59fd700c52ad005d79612eb48056b259f6d59eac1254789e76512660664f9ea5f81d5b6cb44be9a5a09ef62357e2a4099458972b8a6884af5045d52b4a554682f0668db53a2edee45571d36f1555aec2e38ae9839716fa4bc1ca0ebd0ba093c10159c9a4a6885e750a16c00283b66b284afe595f7e89108787dd4c5d96feb4009df89122b9b822047ce6397c3c62eab0dce17220339910ae450609f9d2941865f3b4938c8465635ba17e0ec62134ed2551664381f0738bbda84b3c0499c1f019cdd6cc2493aa24e86b33d2884badb84b3c8499c1301ce1e36e12c7612e70a80b367266a9ec99b96c1618cebfd0fd75257e873a8b0fe0de4a1bd28b1869bdd3ed5c925a91d808df6b609a68b4b522300661f9b60bab824f54790ccfbda04d3c525a9df0398fd6c82e9e292d4cf01ccfe36c1747149ea7b00e6009b60bad829f7368039d026982e8eb8bf01600eb209a68b4b52bb81aad1609b60bab824b5238039a435a7d54455272e7ec806da160094432951b25d53e53086dcab13ee58eaeae2bf1120971c4609b07742802e8f000d03088753228c5f3f1905e8eafac91e00de08ea826573332eddc6b573bc068e97edacca56f592c11c4105b33f8039921266df24058b0ce92aca06e24d54186b40a1322a13951d7caee68a98329ab0e6d8890ae63ec02647db0493b0e64806736f00738c4d30097b28c9602e0730c7da0493b087920ce66200739c4d30094775c860ae0430c7db04937054870ce60a0073824d30097b28c9604e0130b36d8249d843490673270073a24d30092bed643077063077b2092661b71a19cc02007352266062f3d77f0eab7d260398936d8249580091c19c0e604ea19eb79eb8b36d96179c05b4d98b3b0fcd818eb7de00640e25c8111eb671993cc4485e67fbced771b40c395b2a40bc1d6e172ab84b400f526ea657a5a50e97b06d4486f66560b779d4031672555abd074f1c737d75da768070aa3dcb4f5ddc2c6a7780323f13b96874a1345c4a25b77bc4e1bab8b6f72d00b7c08eb5bda51e3b6daf9edb73809eb4b5544285f6405040156662a940ea9d222e363e4f05965a443d04bc8adb5cacbd66a03822b3c52200af9812de90949379c6d6f7b265b82450e781043ecd46a884051219d4d900eace9450d3dbec99d04ec9367b7e1f24fee9ad39172eb6bae4e2fec4838175eed29afd4cb12849d70291c1dc1fd8e5ae36c17471b3e70300cc1936c17471b3e7320073379b60bad87edf0fc0dcdd26982e6ef6bc00c09c69134c17377bde13c02cb109a68b3d497301cc5936c17471b3e7f900e66c9b60bab8d9f3810066a94d305ddcecf92000730e25cc6e0226f3b8c60bf6830d64b32162327064fbbd7a00dc5c7b367a7671478ee700ca79f68eab932670b2c1df39a08b63becd70098b2232b8a500ee029be112569ac8e0f6017017da0cd7c5e9365d00dc3d6c864bd81025833b02c0ddd366b8845d2664700701b88b6c864bd8b94706773280bbd866b884ddd06470c702b84b6c86ebe224c759006e99cd700987f6c8e01600b84bed9d9ceb627176b71745bb5726a695c9e990eb7da76c6e3ebebf0d61bd966ca26e36b0d465764c80d41d6e425837203bdce46660a9cba9bb0ad911f78dfc6013367dbc8acf22ade39f90812ba202371e802bb737f774b1772b0b24f715ad392fdffda5b5138195aeb423e7d44d1d27445b4285f67680766f9b769927ed18245bd0782dc0b98f4d38f39dc4f91b80735f9b70163889f31580733f9b70929e934d86f30b80737f9b701639897320a8301d6013ce62277116039c07da84739a93386b01ce83ecd9e697b03f94ac23a402a05c65dfc21bc2fe7bb285379d00d2d5f62cbc7171aaee7f40a95e9189d59f790ad00cacfe24ebf4c801f0d650c2ebe9a91bba3065592fe6525ecc54fb9f91e123dbc6a50bc05749bde5af1edfcf61379c5e0063953d13205d3c11e61e80b29a3a41b35ef44a8f1dd25c16639b651ced56076b8d9d00be9a4c9c3a88efcc0005cef21a7811b395b68c2ea7c2ba14605d6b4f0277f12c985701ca75f68e00b9384bf42e80b6d69e9d995c5c8c580c501e6cc708906eec9c102dd9d8f96500ed21996e8de3836bc1883ae9a01ad9a8fadf01d23a9bbade48d7899055a2ee0338d7db8433df499c2f009c1b6cc259e024ce4f01ce8d36e12c7412676fd093596f13ce2227714e01380fb50967b193382b01ce864c4fe5d65796e68b4f32d6d744d66df713c8491b6d864bd81825837b0580db64335cc20a3f19dc4b01dc4d36e5b2a4ab91c872d95b01cecd36e1cc7712e7a300e76136e12c7012e70700e7169b70163a89d30355aaad36e12c7212e71880f3709b70163b897321c079442676744a6da48974fe31d958d39e00e69136c124ac7392c19c0b601e4509738c0666aa8b62e04033a1c5de4105b904403eda05c884964c06793700f9181720134e9920837c1080bccd05c8843d586490f702908f75013261958c0cf26a00f9384ac883fc1be63898555ac79195c69cd4143d4470a1ff49852f9670ba640e15d0915e14e8f1f62c6d20b44db2a50d65c036b753a2eceadf54f8a1679b116cf416f33656607f84db10d0ad95071678823d1648384245668187000b3cb135279d65ac579fac855503acf224fbd629112efd225ba7340058e7c9f6ac53727117fc7f03eb3c857aad48e28ebeadfc2fd216fe975418f380459eda9a1865484931de4485711f80f1344a8c233d75afb04dde162fcc547217f7c4bd1324f6d33361a558a91eb552428c64567a12c078863deb465ceccbbf11a03c93da22a32d9da51e3cbb7b0ebfabe789fd305f2019c611541807028c67d9b9408c30a1932d10db0d603d9b126b67ff6673732f5006d61e938d747600c8cea1ce1bd56eb545bc85f373e9501b05509e6bcfc22f170f9b2c0128cfcbc46e0c854ab9edf26e0ca701783bec3a179eb0ca43b60de56680f37c9ba6d6906e034456e0fc0ae0bcc0269cf94ee27c02e0bcd0269c054ee2fc18e0bcc8269c854ee2ec0cfa872eb609679193387702382fb10967b19338f705382fb567fc91b0924436feb83b4079993d233c2e9e265b08505e4e8992d598a32d7277bb30da8332fb0a7b8edf2da03c5887ccfa1a01cc2b6d82e9623746138079954d3009275991c1ac0730afb60926e1d13964300f0530afb109a68bdb546d0030afb509a68b1bf16e0430afb309a68bb385ea00cceb6d8249d8c62183b91ec0bcc126982eb67236019837da049370f62f19cc2d00e64d764c0a242cc7c926054e052def9bed98144888916cba5535c0780b25c67e493006aa17f3c15dc2d23b8b0ae40100e4ad9420d9cee9b1fbc2cf0253afdcdd58bf1bc8176fb3779763178f0e7f08a0bd9d12ed280d5aa6441387b7c1dbc3bfb2958e3fb7d32fdb00c077d8339bc8c59ea31900e59d999ca55ec993fa06917fcef71a7892576d3543964a36f6331d14537751e21da2e065930899a80dfefdd69f19d40781cdde6dc7d6e7a55efce1b784f5d3122ab4bf0068efb16b7e1c214eb282ea7880f31799a8eecbe45ffb334bf2bb827cf45e4a90e315906b3475d29ff7c2aa9500f52fed5be34b980d90adf16d0390feca9e19202e0ece7505287f9d89d9ef5315a01998fd4e56bae782e2e83e6a78cc5356ba0742d85d15e83a716f2acd5800ef7e7b564a12363ab753a17c04a0fc0d25ca6ca5345fdbdccc6c0c5195777d37b93d409ef9dbd6ef749eea157ba42b7c2fa402390c807cc0169084164906f2cf200378d0dece67c2392264d5f7df01b4bfb3a37344772e1c61b145762edcd500ed43f6743bbb382a3f1ba07cd8a6d51aa4fd4c6475d31b00cedfdb8433df499cbf05381fb10927e91c50329caf039c8fda84b3d0499c5f029c8fd984b3c8499cc341a5fe719b70163b89731780f3099b704e7312671dc0f9077bd661122edf221b432a07289fa444d9dd53a78c316559db67096f60ba3759ac3b28729eca44af3bf3b886dba094bd413871afad1301f09eb66f408d7014886c40ad2748ca7f6cfd8e38992bba9727fe11d8e633b680747182c2ef01c8676d0149d87f4906f22500f2395b4012d61cc9403e0f40fec9169084850d19c86f01c8e76d01e9e251205f01902fd8029270ef0432904341f5e7455b40bad824fc0e58e49f6d01e9e2192bb9c0225fb20524e1da5f3290a301c8bfd83355d0c5ad27be0189fbaff62ca326ed252783790a80f9b24d305ddcc7e34c00f3159b60bab88fc70900e6ab36c174711f8f1301ccd7ec99e44a98c8b753a17c18a07c9d12e53081b2c95be7b1e9d661a661112678b269587900ec1b9460c77ab1b387831355d85cf644fdeaf20007e66e96af492d2de631547decff0398dfb4f31c16c28a14d9392c8b00d6b73281555a6f135fb8c28e0f69f2d59ea36d37b9bb1fc832d06e7adb9eb9992ed601f28185be63ef0c6242b46445d72500edbbd4bb28450f615a14b31980fb47840d0018dfcb641eca80aef45fd6f944aa13d6585d3cdd773f9087be9fe9890af862ac3a2e8834c1175121fd27b0d40fa8b7a98a26f8c5fe7ff697fb49bd2f00f837ea1c933966054c295fffd3e005cbffa227b095fbbfb7f84fc8308ea3c2381c60fc301313b88a94049e8165d364eb274f07f0fe9e891e2658655ff3339b28f34b00f3233b6a97ac905137ef211c5f2fa142bb1e94dfffb069eaf554ca791f6453af6f0396fab14d38f39dc4f918c0f94f9b70929e524086f34380f3139b70163a89b31dc83b3fb5096791933827009cffb20967b1933817019c9f51e264db1254f02e8c5abf3909dbdfeeb5bd27801cf2f34cf41225af69b260448ff126edd2203bcafb1f00eb1799dd793bda127779e7edae00e097f62ce97371b1c062902ffe9b12258b33966cd907a5dc1a9b78d75a1d2feb88b091ed11d31658e057f658a08bf335d7000bfcda8ee345087b85c88e17f913b0c86fec385e841023d9f1227b036bfc3613ddbc79fefff562b081dd67a09b976c53b2c3800d7e4709afb3c72ad9193c4484ac5dd21120fb4f6b4efbcfd0168de7504db63a1824dcff52ef4dc0260304d30164d5dae5665e36b0c1efeddd4b90707914593df12980f6077b2655b97876f44c80f2c74c4e5a6d141658e9bfcc0f65b12e6e5e7f13c0fc3fea06616ce784cb5d129d01b69f3239a1aa8e4f9d6e6ade8c044ff42e2e4d791760658d6e8b4e5371f1d8af7d01ce0825ce9e1e9c4c358f77e4ba3f95aa1fc0d78612df084d4509ef0f57c192267532b84f02b86d6d864b38e440067767d03a6a4709375c7fa58bd3afa60194599428d3db8c8c1029d96664ef80a4dfbe35ad33b6c244b8b1095985691cb0ce0e94285937889cedbb58d441d9823d7767f80e0256d891125db865d0f94eb6d6ab01cc4e36c1743151d702989d6d82e9e279bd950066179b60ba78985c1580d9d526982eee1053016076b309a68b3bc4ac0130bbdb04d3c56eb85500660f9b60bab83a7c3580d9d3269884b387c8601e0c60f6b209a68b674a1d0260f6a68439c68b1dc40836a75fe3b159e6b1930313cf4527cc4bc9667cbc0620f7c92464388ef9731fc5bc1240eedb9a3d4ab17b1a10b6e4b753a17c06a0ec4789d26c760861eb89cc4aff00d0f6b7172d61bd800cedbf00da019468d99860ec3486e811ddc16135b3bce86a20f72636f40120075282ece34527c4567ab10b0432343196cc1a270188832821b21044c7dde1467aee416b07a00da68426a762e72b79a4cb165708e00dc974d192fa261184edf7122ab47700b443333127095fb0a26e12e1627be81a8073984d3849bbeac870de0f700eb70967819338ff02708eb00967a193383f033847da849374e776329c7dc16c8f5136e12c7612673ec039da269cd39cc4b916e01c43dd064fd4371f3be9d0bd2987a520d71c6b0b4817e76eee02408eb305a48bdb46ec05408eb705a48b674c2e042027d802d2c53326d70290d9b68074f18cc96500e4445b40ba78c6e45900e44eb68074f18cc97500e4244a90e3bdd811f3355efc6058eac36684354db26ee32a50659f6cdfe216c2aa12d9e296b600e9144aa4798af56e426d133fe12abe8f3e43fb82906d3dbe14e0cfc9c404b154dbf484a3ea642dfa8b404e9c6b134cc2d9766430af0230f36c82e9625fd3d900e6549b6012d602c8609e0360e6db0493b0854f06f35c00b3c026988495293298e701988536c1246ce993c1dc016016d904d3c50dc6cf07308b6d8249d8e2278379018039cd269884fd5064302f043077a69e7cb881bf661b3dd739bd27e238006dba3d5b52b8b8e0fabf00e52ef6acc5202c64b653a17c1aa0dc95ba4b993966bb7b2c149dca2c07646b87ca9a0ff12ef75cddeb63300039837a9b94d8e501e57ca55b19974fb8091a596ffc68806e377b923361771a59727e11a0dcdddef53f2e2e00bc1ea09d99092bc506df62cb6f1777529806509650a21c265036f91658eb3586b25142b06436ba04809d652b58c22e3732b07b00b0b36d05ebe2f0f01c00b6d456b02e1657bb02b073ec58ae55ce877d59915623daf4a4b96c2915dacb01dab9f6d4045cdc6c65164039cfa6f9f1a4275f9175ccfd1ae09c6f134ed2ad80c8703e0b702eb009678193383f013817da84b3d0499cddc13ca43d6cc259e424ce4900e79e36e12c7612e7fe1c67872c45f8bc38e1c1980e0b6eb0a94950d5c9f1e67bd5a253b8d67f93e32de2d5f6266fb55f36efefff0b170707faff74cf237caf86b9de16af9e3f65f2aab8ecf5fedb60af903c368b7711338911c224b223890e1fcd4eb06946f065f4a4b9c53c9283b387d95b765087ec268f9e5e93cdcfa7831263dfe84eaecbe64766b0d1b24a3e765616d3675cc60d6fabd0073b35279011fb76a146bbd48e05d6b99ba5d53cbe8f5bfa1a6c8093cd630df31177a36ea493cdcf9e4ce413dc6a275bb3358fea6b32f789b6f209f8446379b1171ce2a81e18919dd26128d93c21475d2de3099359e8a6667de2bfe91bf3cd22af82a708364cb315710d6d8fbdaff1ffaed36a9d6c83f7ec908344d97c871fe91e76deebdc42d9a5bc61dfe0051392a371c8fcace77cb223bd81fb45425bbdcbbe29488eead12ba1dca8bb413139419083e07acbf3cbb379a351fd4ea7bffc8265d211ae15cbf518ebc5fe53c6bd8ac77e85185f62719acbce6f8f14fbbf82ce939ce66e931c31d17bbdb893cf93cb64b97262698b59d61bd197c6752d569e240b515004b2ef6b7cdd2b796a624f93853479f8f0b2a96b8258c965872cfeacc3bf84c5bb88766ea60378c1ba82672a41c654e63baee24ab19facff07279008047c0e0300 + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c5545f6f8ef0342efbdf71204929086284ae8a04010027621a44034404c028215157b57ecbdf7de777575ed7dd575d7de5dd775752d6b2febffcedc99bcf3e6cd79efdd37398f19ffbff021937befdc3367be73a697db22d7f37f22e3fd5fcbbcc5de0c2fc75bea557aebbcb5fe5f337c778dff2fb892f71779f5bebbcaff5dee3f1bef0d4df226fb1913e9ebff9ee75f35788dfe9bebbd0adfade1cf977855fedff3fc77abfc2b76b7daff5fe5fb8ab4f25f5aeacdf44abd855e9f48af242296f1971ac4bd088b57a4adff7bbab7c97f5ac5956281e4f2477dfc5f4bfc270dfcd91a5f69e96f6f6f5f1ead35feb30aff9d7aafd697b9924b6c3b3fdfe37f78813356b8db09b7a570c7f9ffdbf9ffb33caf5599b8d75ab8a7077f4756836b16d35a71dd59f157a3f8dbaaf81b2ffced2faedb08f70c259c33c4fbaf88eb2e8abf1ac5df2f8a3f359cb6c23d5309e7cce0fdc81471dd55f157a3f8ab54fca9e1b40bfcb5784c89f7598abcb384bcbb92f0e929dcadcafb5b453853147fe70b7f07806be65e20eed7826be65e28eeaf01d73a3d7a09f76c458fb395f84a7f17297a5c24dc8b153d2e16ee258a1e97207a24e1d972a0e24f725b0baee1fbab95f74b40b8321fb4536c0b61d0f23cc5df394ad8e728efaf56de7f4009bb0d085bdadbb94ad8e706efb6eaa9f83b4f09fb3ce5fdd5cafbdb2b61b70561b7107fb7157fc3b2649c172d4bda29f72e05f72e15ee658afe9789f06ff282f247e6e309c2cd13eee55eac3d5d2edc5cafa9ec9af09ab8979320fc2b94f0af08c26f2dcb8756c2bd52f17765f02cab2c082beb2245ee44e15e25de5b07ae997b35d0e56a1096bc9725dc6b9470af11e13e17f861e618136ebe70af55c2bd16c8157cdac8b2bd40617bbdc2f67ae11645dfcd95e570a170af03ba5f97985953b8922d12c7d6b789383ea6c8d571ba4191718390f18d125729a358f8af53ee4f4a23ddb2c0bded45789bbde47945c6ff4645f71b05a787c5f508c5dfea587fed65193619f897faec28dc9bc13d19eecec2dd41c83d50793e15bcab7b5e22dc29c8f369c2dd09793e5d498399c2bd2581ae3392e87a4b125d6725d175768abab652dcdb80ce7310bf73857b87176b5b7708f77620e376e1de0aeedd2adc9b147bb949b1835d847ba7e65dc9719e124ff97c2a7857f75c72dc15792e39ce479eab1c17783cbf7469f462f333164759ee8c54fcad8ef5d741e6d7c9c0bf64b1d08bcf13325c2c4fc8e7589e90cf259f52e4b9e4b30879aef249547e0cf7a27982b9778977ebc1b5cfa2e3038abfbb41bc5b0b3fb2ecdf4df1e3ebd571b3b8d746f8dd0730c2fcb6157ee5f5624dd84bc03de69645e574923a2f0dae7b540af9ef89fbcb9438e9de4dc46e7725be61dfdf436110f6fd3d152e61df97f599d4ff1e25ed3b28f7f747debb5779af9b725f7d4fc6f73ee5bd8eca7decbdfb95f7ba2bf7d5f7249f3f28ef7552ee63effd5179af87725f7d4fdad303e27983b86eafdc57df1beea5d63e56eb8d3f79a9d71b0f7bb1f5c6c3c27d08c87848b87b29b2e4fdbd85fb8822eb11e1fe59dc6f04d7cc7d1084f1a092a68f2a8c1f0d74efba45612a65f836def5294596b4c7c714598f09594f29fea03e7d84fbb8175b673c1ebcdbadade2ef41e16fbdb8ee2ddc2794f79f08deef2e6d5b4dbb27810e52c65321d2f319250d9e11eed340c6d3c2dd479125efef2bdce71459cf09f759253d9f52ee4b06896c56f6e19f57f83c2ff8dca7c46f3fe1bea0e8f48270ff22ee6f00d7cc7d51dc3f480957de97bacabeed4b8a3e2f053af498abe8b35cb82f2bfabc2cdcbf8afb1bc135735f11f73729e1bee2a5ce4e96c37f13ef1c0cae99aeaccdc6eab7eb12c852edee55601f2b3cbd8d950bf77525ceaf0bf7352043f693ff0eee49392b85fb9622e72de1be0dde795bb86f7ab16db23703793d370771edb91584279fb7037f33f70d8d2e15c27d57d1e55de1be07de794fb8ef08bf8728b2e4b8dd078aac0f84fb2190f5a170df57640d15ee475eac1d7e1484d3bbafe2ef1f40e61bc2fd18dcfb3878afd7c34077e65681e72c9c4315ff9f89eb51c2fda7d754ceb26289df1bad3c93fac87b4cee61e27a98703f51e2f58988d7978abf7f69e2f529b8f7a9784f8e39bdafc4eb53255ed2bfecf7cb78fd1bc44bdaec68e599d447de83f11a2cdccf94787d1684d757f619aa85fb5f20f31d708fb99f2b3a7f1ec8e8b355f1ff8df07738b866ee2a45ce11b172fa9eacc89175a8cc53df8af736836be6ca387d279e1fa9c8f95ed1e77b45ee0fe2f951ca7b3f28fe7e54c2ff0edc67ee4f4af88395fb4707e9d8c47c30084f3e67d743144e35e0dae7d45fb6c37569f63eb8c7dc2f9434fb2290d16faee23f599a493947c4cae95fa2c8314d3329276c9abd0fee9ba4d910e5be48b326e643407830cdd4faea3f204df6f7f4f5951c6bfcd28b2d8f6559f305902179bf18e8336091b82fc7fabf526ce5abc0ff80ae8a3f696bb29d3a48b85f2bef7f2dde5fa4f87b5f79bf65e2f007ae10d7fd9384f399224fce8dfcacb0f9d98bb7f9fee01e4c937ec2fd4509f317453719a69c77f95509f3572f6abbed14d9df2a610e481ccf41d28ea40dfc26fcad01d7ccfd9fb87f0cb88671395689cb0f88bfe362fd0d2a51fc4966c72bfa439659406ff9bc4a89770afd3ff62764c2af994e578930ee4b204b690f4522b169c4af992bdf657fb7147e4e00cfe47de6b612cf4f04d7feffc12529e821e304c7c1577809dba591368ace62de37d21ae82cc6a6868c5464c878b75564887e5ea49d17df765c0b9ec17137f97c1dd0d78fc750795ff269afa457fbe05dd55f93ff0e40873a8585f42b74887452e221c636221d010bd98f6800cf403c9a9ecb7e5e3df27cbda24b2ab6da59897b6711f74582556502594a7b3bd24589ab981b8d740571eda6d86a57709fb9dd155bed2ef4f92c053d649c7a84b0d55e8acea25f1ae90974ee19bc37ec4524debd151962bc80afe4c06cb54f6ab63afc36c5f6fa2ae9d5377857f5d7e4bf5f085b1da0c443948191fe8085ac0f1ac033688bf23966abf279185b956309a28f1e1928de3d095c337790b87f32b866ef1de435f52d464c49213c69478315d6838367236a85accd216c7248089b1ca6a4c330e10e05e93054e8f243a0cb48a55d1119a1e83e22f03ff2b5587f4dfee11c4a323b19ade827fa699151403f59ae378067d00ee473cc4ee4f354ec448c2945867bb1633a92eb46e5b99ae73685b045999e6314be638267a38e0fd263d445096489b1ca48b6176bc7d9e2b9e85b44c67a31e3a5fcba55d02de6fe7600ef09fb1e3d539125c65423db29b2b613b2662afea42cc8e760455f95df2169f01ba7f01b27f4794ac4e3ad04b2d4bc35de4b3d6fe578b1b62bd68f44264465f0bffdf7c688f51fd9b20f29f34abea27b7ee03fbb30d65f93ff022ff5bc55a4e85724dc42a09f5cd3d1009ec1bc239f63794b3e4f256fc9fa3057b1d55ce14e14f74f01d7cccdd3d8d1a1e099ce8e0e4bc38ee45a8f1a70ed3f1bdb3548bbb12313c892f5f4a4d8b835dddf5e1387c39577d4381c11220e329f4f06e1c87b3b827b72fe78b37826d764ac03d7ccdd09d8c84ec2dd59f83d15c895f7992be7c24f03d77e5cc69d87843d55095bcc99474a40d8254a58d3c43ba7836be64ed7c451b89119e0d9910a53e9578c894466293acd12ee4ca0932c1767837bd3c13de6ca399d33c0356351a7c447a6575694937cd6548eee28649d29ec50ced9f455b8d7806b16d66b8abfc9c25f2af311472befce8db5eb882cc7b644f51f3f3f05b9324de6293acf0b741e7fa890757a0259aa1dc93526ebc035737701e92ec75e649e90eb4e4e03d72cfc5f02f9130a810ce62ef0626c5fcae3f7a1bcb362e54d9063009a7848d94db216c6da76d3fd528d6d1fa3bca3ae0f39d64b5e768872d713e31d91ddc43b5bc135731781f0c598476471f45e448c774596288c24eb32e0b70cf865ee52251d9606dc72cf5364cbf796c5328ac8f51db20fb8bb620b72fd46b5b8de433c3f1b5cb3f046c6fa8fec29fc9d03ae65bca19c73153975b17a45f60271df4be8920378eaec42597bc1af41fecf91f9ac3a3579da7ba24fec152936b0b76203721dc0c95e533ecf93fac93aae308df0651dbf0f7857f6b5f605ccc4bc75643fc4b69603bfcb815fe6ae506c6b459046f95d15d9f2bd72c5b6ca4558b2be5ba9d8969cf394b655a1d8564510dec44f62fdf3bd00edc0df920373e518e179e09a8521e3502d9e37806b1886d039b20a8421e7234e4a627772fe7b37700dec2e4fce3d57a7262ff65e56848f15cef5aafcf6739d97cb3db15a21d52d39f2cde49b7198e8d6ec17fb19c3836df43b6675be00cd8e98a57cbf4da357e0e56b77c4f4e3636832f419fc77b9efa3860b3d3f1217c4fd714130e56afd7f55603b4f837f7f0edf0dc436f4d4f84f72bcf9becbde5ae14df4f6f6ffc54a59e6075beb37b4abbc32ff771d97b7c2573bde67b228b1ad3fea3b8b7d99c1cea435fe1d09b4cebfaee51a2ee1bf37704dabb8f6f3fc7b8d7c9fd45a6f9537dd7737f2d0e2e35eefffad0bb34c20d3eba8dfa084dd0fb641c9649ae9c786699fcbfb44ff9722db2245f85402cb1feca7552eefd59c189712ffc730286458c36d9e903191238bc4dccbf77279db6e711cc1f0718c8fa1debe03dec57e059f282e7a322cb907f0184453b8d788ef6f7cfaf48ba766c546adc0cb6553387cec3551d4128165f2b2f9687998286465b5ca638aaaf8233afc7cea694906f107fe6ab8bff009d09a577eb109c0a751cafc3f36faff6b7dcfa5bea2d1f28fe5b0b8b4c96382da70bcf19567321531c02d7480db661a70f2122511e0b64df18a02663f7a82ed1082c974c008b6d411e4adb17d4809c637bde45fd3fd7757fb2436707b5aefbfaf6baa2566caa64b27284cf53c3b709e43b50dc8701a61845b6908e731c21d754ab6539464fa2182b330c19d0c05b7d6d9045f915e96c15cc59eade352ca7dbfe1f3159b361ea7165c7a23e8c28da06f5ce492ab80257a1b5dda30845db55aa989d3054f9cb698e46ea692db6192bb6b24c71b5402c9ed7506c59708ec4f6a504bfd7b41ff6a167f5ac31be5ac795ecea597fa29b8bf1734de59ea62fea5492de0a722ace79a2436be1e2917403db9edb1b1174a6d313beda04b7376b3572a65484f3cc93b62827b1b0aee8409ee6328b83326b8afa1e02e98e07e8682bb6282fb1b0aee86091e6028b83b2678a0a1e01e98e04186827bea8a2e6edc15dba4e862edbc1c6f267fab8eb73c0e125553a23712175683532eac86f0c26a4c82c22a3dfdb0e2a9972e5919fda1a924eb103c597b638287190aee83091e6e28b82f267884a1e07e3a0be7a5ecf26d68e141ef32714597dcb247a66cd9a3b8658f486ad9a9ea8559747f5d3232daa35349c65178320ec0048f31143c50671fbcb2acda86f6c17abb757e688dde6c7e0256ad5fd698d94a76cab63296dbcad8a4b6928e8e98dd0cd2252f4b85ed5249deb178f20ec6ec669ca1dd0cc1048f37143c546790bc91b5629b1ae41a3f36abbc2a43339c90b219e670331c998219a6aa19667cc37449c988e7a692943978520ed725256fd6667e7c3abdd13bb670ac8fda37f6b0d1bb895ea2e1e5b063772374c9c2fada6cf59f51877d2426b9c054f2285d8a77db76b5493083b74e8ce935df00005bccd0520195cbbb3f89ea8df4b5f10bc5cd53c1afe79f9b3f354b6f844549abaff4d5c04c75b4cea058b2176b38e5314eac949f0a7e3dffdc733b67c5595a116e6963b02027250ab209a41f644141c1d450416663416e8f06595d5d3d55862b221d2ac8b1ba20d918e1e426cfd1207ff37fe284b7c3856f8709df41239c55eb61848fd30967fe774ca55249307c3d1e2bbca698165e13301e3b69787cd22a1c8f1c8cc7ce863c7275452e1f30a9d966452e93b98e5faf4dd2990a5ff44ed5f1d2968425bc249c90a42434d3152b11f374a9c2479b8e244d9554d749e9469de369c885328b7db79a6bc1ee5788b666e2b012a7e2b4263ea002e5e341b3bcd4577bd1c782add86ec1ad6946526b2ae30741b329f26a1ecb35695893de9267f2b0ed228359fe445d41c726cc98fa714b0d58c1c62c9b9d46bdce5be4df2ef749314de2cac0367819988f85395b17261b562bf7fface413be0b789a053da870a11660f5c51c4d7d31b375b8faa210ab2fe61ad617453ac13df8650a824b70c1c55822eca24b04d60d64c81bbde57e61609e1893b0d077d585ce464597fbfff2fcffc9b460feeab99f30fa6c8f19c77c8d7154b609671c9375c2591b886d34309a25de412799a515db42a0f684d9fa9c38e11371e13bea84b34ab154531be4b1da802dec6fcf8d392e9c99783853305bd84d670bddb92d94fa29beaca920623d7656882fe5b31ce55c4a98d4df49a3412e9f95605b17b6c5d230ec28ffc4d5f4624dc2e4f249907e71f1482534b1f923f86983d4766c194a769a0160b5d2ce98492cd599442f503c54f9e883da921905338f8dfc195bdf1d7cf8218c614cc5f458869b66a0c76a5e28550aa3485f83124c83dd751af4d49258285a17e96b310dd3620f9d165d80162cb4557eaaa71ff6742cec3d75617702612fe72d25d6860bac325c1535032b5bf7d294ad5ec8b2752656b6ee8d95adfba455b6cec2e0edab83d74353b6b26c1c94a8e996aeb3753ab0d2753f5d5cfb78c1a18db0dc51032bc3039b834578852ec2b059138d72facd9ab958e8e5bad075cd1a4c8bf49a35f3301b5ea9b1e1b6216d7817cc862b301bae4ccb8677c5a056e14520b3e105fe8d8de2133b8da2226af0b3755034af0a69c5f3312baec6ac7855fa56bc4017184b9fd55e7c73746bfb70cdd18558bad560e9b67f5ae956aa0b87113e40976ebd9bd24da610ebf6d6fa19ba9eaff3ad8b49b9ca5069b7084bbb5a2cedd6a49f76bb61796ead26cf4542e6b9c598f0751ae12d430a5f82595d9dc6eaaeea18ceeaca30cd0fd468ee85d47c29a679bd46f3bb426abe0c13dea011fe5e48e1bb63c21b35c287760a277c0f4cf87a8df0152185ef8909dfa0117e5948e17b6165c741bab283154db2029d2f5a286c606c53a852626f2ccc8dba3061535b1f767a55f63e98169b745af40031678ddd063e59b8de93fb7fa29da0303aec8be970b04e87811a128975498fcc7e985687e8b46ac73368050f87a5c86c3eac1b26bce558788762f6500706449778c1ee14360a50cabb62f5bc3b5c19b2ddb102d3e2309d1641d76b06af27cbfcdf0778c1e703d77ac118446da8b0cbb1b00fd785ddd7835daf443aa497fe2b316d8ed069c36a6f366d5ec1c30fd75ea8c042daac0b898de455f0b40e06e41bfdeaa83e24e94a2cc4237521b6e1712be7dddaf0615561611da50bcbf334257702e9d51ae9b97cbd6c267701aadb33c28da3b18372529bb4dce2e97700260b1f1bf85aa54b1bd64a3ac68b6f258dd4254d8256d26a4cf8b11ae15d430aafd1096776729cceaa58d33487ff0b635bfb63611caf0b03b60ae6f9fc77e3b71b42963a0760619e80d5026a5d181b767a655f2da6c5893a2dd820588d177c70b65c4c1196f2b5ff610734d660e19ea40bb7b326dc05a29c0a1bf25a2ce493b19025f7f53c97a53fe0b80e0bf99464212f8fe9a3862f99ebb0904fd585dc8d87bc40d4b0d1f45dc02dad410c1d8509ff402cfcd374e1f78f8979323dd2b3fb7a5d6dd22fd3b5c912317ac4e484af4dd8d14343e23ab82525fa1ae50ca44649a60356a33460697a66326b6621ac32c8478d58c867e942869327320dd7f1de43fa1aacc734d8aad3a0778c3d07e38672f47bbdcfc2a415bf41a709eb2c9fedc57796878e08d7593e489749f8de96cc2fdc660b0bc2671176225b8fb82ca2cf20e77a89966d63e163d963236622e7e94c04ce6cadf182afb2a76f9e9bb0b0cf4f9641a2e619ed642e10fa84d1e0604c830b9269501b37d4911e8343300d2ed469d02b0983f4077f0ec5f4b828593159cd0716d227701816f2c5ba90bb6909980c731c8e857f49b298d7f31222fd981f81857ca92ee4beda9847d35e37e414469bcd983697e9b4614dec0a64a2a22154b84762e15e8e51901d8b253cdca093c98638b0899330da1c856973854e9b615e7c772755add26b101eadd38f55a4577af11569def87015e9169d70d611beca339fa33806237bb58e6cd718b290597a79ed582cf46b74a1f789cb6b32459bc3c68ed3e892cbb7ccb2b9b34cb5575239d24ddf5ab9d6d7b29d828ccf8e6adb2bec84cd6c5e73a51e3ed65a395e978aecf27a2ffe64b6b74eeff150dddb3fbc1a97345978d29c8099c90d582128b37135ef73cb03336b428eb89e8865eb1b35d9ba6f5eb86c7d924e38f3cf3e186eb238f7649d21f32dda07901a72ea1b24e4c2bbe6dbd071b38e99d6f06fe186cf36bcd0ea8b659653b0cc72ab26b3bc79cb21a5f3763aab5f98cc722a96596ed36516d972d26796706d86d3b08aea764d45a5dd6896a0a23a5d279c4d72dce1196ed93a03937ca7a9e43331c977994a3e0b937cb7a9e4ad98e47b4c259f8d49bed754f23998e4fb4c259f8b49bedf54f27998e43f984a3e5f57fef3c321b6cd663ef32d4d89cbfe3feaca7e95d70c9cd705ba9460bc1e30147ca14e30abb81f4c45708213a72ec234fe93a1c61763821f32147c0986e261431497ea04b356d49f53119ca0157519963f1f31cd9f9763901f35847c05a6f263a62a5f89497edc54f2553ac96c38e18954606cc1055f8d19c6938686710dc6e2295316d7622c9e3664711dc6e2194316d763a6fcaca129df80417ece14f28d98e4e74d25df84497ec154f2cd3ac96c91dd5f52c15c820bbe0513fca2a1e05b318b7bc9d0e26ec304bf6c28f8764cf05f0d05df81e5ea570c73f59d58e2fdcd30f1eec20cf9efa6867cb74e32eb21beea990f65de83a9fd9aa9daf762925f37957c1f26f90d53c9f76392df3495fc074cf25ba692ff88497edb54f20398e4774c253f8899f4bbcd60d27fc20aa5f70c0ba58730c1ef1b0a7e58279895761fa422384169f7678cf387cdc0f9114ceb8f0cb57e14b3bb7f98dadd6398e48f4d253f8e49fea7a9e42730c99f984a7e12b3e77f19daf3533ac1ecf08f4f53119ce04cdda7318dff6da8f133982d7f6668cbcf6239f0f366c881cf615affc750ebe7319bfbc2d4e65ec054fed250e5bf6804e7f2435833391339ddbf627f879f89fccad7b25b1c59ed6cccd79e7e1a3251e0d8ccca8b987dfeb719ecf325cc8cbe3135a3973133fad6d08cfeaa13cc16e07de769d7b5a9a2cfc545bf82a1febe1950ff0d43fd8329eabf63927f3495fcaa4e322bcd7f4a25111394e6af612aff6caaf2eb98ddfd6268776f602aff6aaaf29b98e4ff994a7e0b83f19b218cb73195d91e262395dfd1490e3e2a9482ca09a671dfc558b44845700216ef6904e7f233c0d9c65afaf30c977833bd5dfd676ceb079319dc0f364444cfaa8bf595b8a66ba923a2ade85a4558453798fb4c5f1bacea7b1fb3852c435bf800b385d686b6f0a14e30b38536a908663411c11f6119aead6986fb874e32f3df2e1595131c71fe31a6727b5395ffa993cc16eb76882439e018fe0a75daf02758643a9a46e65f18ff4e86fc3fc554ee6caaf2bf31fe5dc8f87f8645a6ab69643ec724773395fc1f9d64d67aea9e4aca26683d7d81a9dcc354e52f759259c1d8d3b060fc0a53b997a9ca5f63927b9b4afeaf4e32ab55fa18563fdfe804b37e46df88793fe35b4ceb7e865a7f8709ee6f28f87b0cc78066c0f103267c603308ff114332c810c94f98e0c186827fc632f810c30cfe0b960d879a66c35f31958719aafc3f8de0dca1ece60a6fdb35dce141cfd37808e935e287a7dc881f11919fd3692ecdb006fd6fbaa46415ddc8549232c17a29d6edd45adf2853eb8be82433eb1b6d687d2d74825957618c6157a1252638db50702b0cf25853c8593ac9aca5b49d614ba935a6f2385395db607631ded02eda628227180a6e87d9458ea15db4c720e79a42ee80d9459ea15d74d40966d5e644c3fab513967af986a9d719835c600ab90ba672a1a1ca5d31832b3234b86e98e06243c1dd31c8934c21f7c02c797b434bee89a93cd954e55e985dec606817bd31c13b1a0aee83d9c51443bbe88b41dec914723fcc2e7636b48bfe580937d5b0841b80a55e8961ea0dd409663db569cdd0531ba413ce660da7474c670d0763c631c3d4388660c631d3d03886622acf32557918661db30dad6338661d739ac13a46603ce69af2188925e13cc3241c85e5ef5d0cf3f7682c0577354cc13118e4f9a690b331db58d00cb63116537ba1a9dadb61924b4d258fc3242f32953c1eb3e7dd0ced7902a6f26253957330835e6268d0b998d9953583d9e5e984b389d6a511dd322455f2d7b8e48998e465a692f3b134dcdd340d0b30b3dbc3d0ec0ab162744fc362b408b3babd0cadae1883bcb729e449983defd30cf6bcbd4e385b71ba6f2a3c12ac389d8c69bd5f3368bd03067bb929ec1d31b5573483da5330e32b3734be9d7482d9211c2b53117c0b2e78670c474533e0988ae1a834c45182e1a832c4310d2befaa0dcbbbe91ac1b9c3fccb083b4b3af3bbe8d5b39b9b6ffffc2a1d29edfcc7ea081b1b679f7ca6d0129b0b998125718d6112cfc404ef6f287816968d0e30cc46b375829951d6a62278353e6e33072bbed79816df73b1f26a6d339457f330b5d799aabd0b5660d5191658bb62b671a0a16dccc758d49bb258802561433324e1422c13361a66c2524cebf5cda0f522cc3c36189ac76e98e0830c052fd60966971b23f1e74ec99fb800b2f0009660bc373503ef324cf8c1cd207c2996730e31cd39cb30e33ed4d0b877c74a91c30c4b913d3016879bb2d81333c0239ac900f7d205c0f6c36f4e8549092e786f2c4f1e699827f7c1901cd54c48f6c5343fda50f3fdb0fcb8a519f2e3724cf831cd207c0566e0c79a1a783996d98f33ccec2bb1cc7ebc6166afc0589c60caa252d77b1aee5f66f4f0f769fc5c7cb6122bfc26c61353ee159d14d11ffd9e3874acb7538519ffc9cd60fcd558829f629ae0abb0c2f754c3c2773536ee785a44739ce5ce4a2a30eb58c7ed889d4097c38fba5cc78f2c5eca3f635beffb5de8b1cf31977bf278eee070614c46e2a761063e6bb0989dae8bd9340feb75c33e378ce13c9e8b6a79be616f2d17b14e2ca1f9e2b73f16bf3374f19b82c66f8e177c283c3e9ec171ebd3f89d1afe1d8c7069b7cc7f16f64ce003b0589da98bd50e68ace24f990de2240f2c6f8c3b35114fbff81316c3c4a8168bd159ba184d426314af456c8c8223c283b852c5650d1697ade16c2e59eaacd2d8241e279d058789d55a2c5667eb625594464e92f12a0779293860bdba194b8475583cced1c5632f4faeb35eeae751961241aaac69fa6e67236f195473ad59cb605e93cf593c06ccc7621ecf2a11a77a11df393cbe8b782b629538b87e19b7cf1afff74a1e3b35de41ab23f8de91fa2cdd94adc3889cab23b29490c812fe947d18613d8f15931b7d270c8b744ad503310ee7e93854117330b30ccc2e9a83533dc6e97caccd00430cc814f8efc076c22cef40df7b396f29348acfe6e8dfc2ef375709d180c5ef025dfc66a414bf79bcecb3278e8d581c2fd4c5315f8963f0cddac06265e95de6dfc3354d6483d1b7c2c4603d16838b7431988dd6474bfdf767f29c56c773e7414d6df420174685eccedf5e2dbebdb6d077592d559d2425cdf3db062ca617eb629a97625ac9d36dc2a4947c278cf60761da5f62a27da23ca18f577a56b611d3fe52f37cc23ec8163e9fb0b7c2c460131683cb74319868cc1f8f5b7a297030a6ffe5cdd583d3b53b99ae73fdbfab78ed5bcf3f68159fcfd32f7f0fc16275852e56239bda1ab13bf7e0711db04d99a86d1046cb43312dafc4ca582cd4b07521de9a49d4ea4b3f3d0ec3627a1536c283d72673b8cdd4f916c3463d8298378874a9e0fab13e25de539b11e3c7b4f6381c8bd9d5ba988d4e9a8632b7cce72dd855bc466c9e9c7e04a6e9353a4d67a6d4ee9ac37bfbc1a70febfd926bb5760c26932dafcd582cafd5c5726ad2f458e27b5cc99f63b9227cecd22d2f8ec4e2765d2a2d67acbc98e65b7c25cf27fab1d1f4ca8a74e3781416c7eb75719c9e92950669188cb655a0f10c9f8ee9e5c3a3b118dea08b6171c2b2b0cc773736d5b4b2146c1477a97bf45bb098dc18aeedc062c258d6f196ff6cde2ea8f575d936b13a068bd54dba582d44da0e0bb9d607f17ae680985c17b421a25f2b0f37a6c87ce36d95f85309c2c4fc582ce63763e3de3a4d96f21c562b4a9460366f396f973488d7598a84eb17a55b1b1c87c5e8165d8c7213b603e3d9a612aff4753f1ed3fd56ac9c08afbb6c6db0f2bf81cf2495f3d9b2c0ee9aab4c3f018bc96dba98e4a4dc1a97dacff2d838be6ce7267b378ce627629adf9e4a9b099bb54b361a179b17e873c949582cefc0d227ec588f4ca90d4d629aa72e3d19d3fc4ef3de77e23e76f38c1e9c82e97f17563e998c3d251fd509a3fba998ee77eb741fa5e81e5d3941ddef390dd3f39ef4c7d3e7f37aadc18a1ecfe958fcee4d650c0d96286a9ae8473b521b850e138333b018dca78bc112b4fc0953dea6b24a22932b29cec418dc9f4abf556fa5c97a7699eaf19c85c5ed0fbab8ed9a52dcf4230fa5fedfd1d4de96b9722b16e73f86b3696c95429037e39f36f0d82c52d661c038c9cf7f271e218b951a2d19c230381b63f0402ae39bf89aa7e4e39b996e419d83c5f441f3798c62af30546f29fa5698189c8bc5e04fa9d7922cccf0b3ce41fcb0fbcd9542e761f17b081bab48d45a611a567a6c3ca254b37a26eabbf96669dbf8ff2211b6827816f7c956352ee2a31b41aecf1de13fe2f37bf2dc42b91a222766e544f43e0b7d8daf11e359d6b4ee217a8a2126e1611f58eb165ef03326c260cbef896bf64d06a3edb522d6413dc44604e6f092a58af727d928fe7cde036d8c3b17128b856e0508bbab8b5df238c975c2ea0ade48a48d889194e59366d345bfbb98fe99a56a3791aa2d7259733d322e4d6b4aaec5232cb4967a1bea1347168e3be8740f04c8518b085bc2bcdc9bcb8b884a9e20cbf8d04c95ff4a60e8494354f7b8aa214ee002644d9a54dc5290bd75e2fa71330b9a6bf5a26b51d8c9f3da64b5c86329f12825ae3e71b8e68b76d55affb54d7eba056d2bd643abe4517101dfa251517c8f51e2ebcaf12df7f2bce8a296a0420f3630b022c30560f35b45813d4e09ac3507c65e2fe7ed1d17e0b01f09e7094a383d399c52dffb02bf25b251d853a310d01093195d0057db250aee494a70fde24ab125be77a6062bc766f316a89b25d9e9a3a3089fca6cbd39cdb7c14ade9471a7de6c04f5e6d394b8bac7e192b32c6c7d757d53ffdb0568b583a2d09ea184d6bba97c939991358d6bf9700e5bf859a7645217e05d34360aef594a78031364d060357bb517eca874b3a4fb6c5c14e473992de964d69dcf270cddc8b47d8746713d4f89ab731cae523edf2afbb82ec0baaf4314d60bf4d5022be1a2bd4ea62edbeab6944f8c069d2b17a0edd3230aed2f94d0fac759d862aec23a3e20272dcdcd52edb5ec28c417e9fb0e106270f496abd5c163c3a3e05ea204d743936597f0fe2913e85aa61dda3d8aede5cc560bb29c73a7b7f04d4706ab4d96225c9d8b4a7f74371c617c1c9a355966791bf9ac5c3d9757a98e4bb3c5e5d669fe5738ae9c1d37f8939dd2f85976d22688ce47ac3566a7302eacf3a3f681b3438dd16487285cb2536e3b64a7dcf9d4c5486deb6687aa39b2d31830ce4e7378263bed864176e89e66b651f72a3a3da79f56cb63d373affc7f3e7396c766cefec620b0135fd84f504bfd9db296ea2bca9760a2742d5f16824f292f67e76bab3a0c8cd321f63c235943e9b46917538775492582e9d4633778d14aff559b70e63b89f30180f3359b70163889f36d80f3759b70163a89f31780f30d9b70163989937d0048e27cd3269cc54ee29c0370be45bf7001c719bbdc2adf9b4407730b15cc2200f36d9b60163b083307c07cc72698450ec21c0d60be6b13cc4207610e0330dfb3092661054406730080f9be4d30f31d84d91bc0fcc02698131d84d90bc0fcd02698790ec2ec02607e6413ccc90ec29c0a60fec32698db3b08730a80f931fd6a2a1c26dcd83691b29539910ae51280f29f94287b099415629c5ddd3706f72411563d5954204ff1a2203fb1052461b54306f27800f25fd4ab12986736f9074bc5e8c931655e70220e19c45154100700889f524264a35ceb62668aa3737accd3063a783da9e07505f0fe4dbf2a2bb67a4976baca72ca91a1561122a4dd4035f3d9b6acb1a138d28aa60d95757e0bacf3f34cb424b18a26166521a55d92c13c02c0fc8f4d3009c7d2c9606e0630bfb00926e1882519ccc300cc2f6d8249d8cb2183793880f9954d3009472cc9601e02607e6d134cc2b1743298870298ffb5092661d7910ce62600f31b9b60bad8ce3c18c0fcd6269884239664308f0430bfb30926e1583a19cca300ccefa9073758a0ecdcae4008bbaa048bc7dd5b3d3402c0fb615bf6c46327225c9c20bb0aa0fc9112e5408172554ac31af0742cc28aa78c0aeb6c80f5a74c60adf53d31a0c19e99e0a05476d0eeef6b82621f3004f73325d6a10ad60abeda728607b71c255e974958189095ab7f0756fb4b26cad5d46a78179bf11301ca5f29510ed65451a97e519514ed0c2ab4e703b4ffa344dbd98bee3a6ce4bbb4d855f0f95ae6c5bd99f23280eeb76d9bc10351c1573409adf00c2a94f500a5d72283357c0d6fbc478fc8c7dba32eae7e5b096af8082556b60441ce9cc76e878ddd561b7c6f860ce4582a9003817db6a004197eef24e1241b59d3e82e80b3a54d3849775990e17c1ce06c6513ce0227717e027066d9849374469d0c676b5009b5b60967919338c7029c6d6cc259ec24cea50067db4cb43c93772d838ff3adf15f5c45dda0cfa1c2fa0f5086b6a3c41a6e75fb4427b7a4b60136dade26982e6e498d00981d6c82e9e296d45f4136ef68134c17b7a4fe0c6076b209a68b5b52bf04303bdb04d3c52da91f00985d6c82e9e2a0dcbb0066579b60ba38e3fe1680d9cd26982e6e49ed049a46dd6d82e9e296d4b600660f4a98e1b6a412563f64136d7301ca9e9428d9a9a9721a439ed5094f2c7575f3df10504af6a204d83d2140976780060184bd2911c6ef9f8c027475ff641700af0f75c5b2a10997eee05af56be964308750c1ec0d60f6cd442d8d2f325c1a53b9103679da51c1dc03c0ec67134cc2260f19ccdd01ccfe36c1241c5a2383b904c01c60134cc2a13532980b00cc8136c1249c8e2083b90cc01c64134cc2e90832984b01ccc136c1241c5a23833901c01c62134cc2a1353298db0198436d8249381d4106737b0073984d3009c783c860160098c33301135b78fd7bd8a6321ec01c61134cc20a880ce664007324f582ebc4a344d3bce023361bbcb80f79393062d41d801c45097288879db825bfbe23dde9bef7d51c2d43ced6b8139fe3da810aee42309e3e9a12ae6e3b55ea7009fb4664685f05763b867aa45d6ea7aaf3e0a7b25cdf56b50520cccec4c419bead0aee9b74f194a39d01cab1992845a33b7ce11e20794e210ed7c54da9ef00b8db65ba14d5af1c9ee1b1cfc4d5717b0ed093f6964aa8d0ee052aa8719958e39efaa0888b9dcf1381a58ea79ebb5cce6d2ed65e33501d91d9621180378112de8094b379c636a6b28f4692409d0d32788e8d50092b2432a8d301d45c4aa8e99d524c68a764a7147f08327fdeb65cc415db5c72f160ddfec03a276ecb71a65894a49b58c860ee0dec32df26982e9e52bc0f805960134c174f292e05300b6d82e962ff7d2f00b3c826982e9e523c17c02cb609a68ba714ef0a604eb209a68b2349b300cced6d82e9e229c57300ccc936c174f194e27d01cc1d6c82e9e229c5fb01983b52c2ec2460b280abbde020d340369b222603477650a907c04dd996bdf0d83122178f927801a0dcc9de7975d20c4e36f93b130c71ec6c335cc2aa880cee0c0077aacd70091b4d64707b00b82536c37571b94d0700779acd70093ba264708700b8d36d864b38644206b71f803bc366b884837b6470c703b8336d864b380c4d067724803bcb66b82e2e729c06e0ceb6192ee1d41e19dc0200778ebd8b735dacce6ef7a268e7666259995c0eb9c6f7cad6e6e307b310b66bc916ea66034b9d67c70248dd573908db06645fe5b81e58ea2ed44385ecdbec0dfc8b1c6cf978255f455acb5f21035744056e3400b7abbda5a78ba35b5920bbcfdf96ebf2dddf5a3b1658e9023b4a4eddd27142b42554686f066817da743c3ae9c020d986c62b01ce529b70e63b89f30f00e7229b70163889f3358073379b70927ee0990ce75700e7629b70163989b32f68302db10967b193388b01ce327b0e54251cc023ebb9ef07502eb56fa708e18033d94e917600e9327b768ab8b8b6f447500ded9e89ed8a790ad00c6c5724eba5e700787b50c2ebeaa927903065d9b0db225ecd54f9af91e1233b77a403c0b72725be9e28bedfc3f12ddd00c6bdec59b1e7e2b737ee0028f7a6ced06cd8977d9dbdd607076db394a3dde460abb11dc0b74f26beef861f2500054ef3ea7915b389b68e2ea3c2ba0860ddd79e0ceee257375e0728f7b377cac2c5658db701b4cbed394ac8c5dd73c500e50a3ba62c7493bd8468c9267b2f0268cb33dd1bc76783822960d25920b269e07f02a42b6d1a7a23ddd840d688ba0fe0acb00967be93385f02382b6dc259e024cecf01ce2a9b70163a89b33b18c9acb6096791933827009cab6cc259ec24ce0a807375a6d71eeb1b4b73c42b191b6b221bb6fb0d94a43536c325ec8c92c1bd04c0dddf66b8840d7e32b81702b807d854ca926e9f212b656f04386b6dc299ef24ce4701ce3536e12c7012e74700e75a9b70163a89d3034daa7536e12c7212e70880b3ce269cc54ee29c07701e68cf47c94917cc92cd35ed0a60d6db0493b0cd4906731680d9400973840666aabb38e04433a1c5de4205b904406e740132a1259341de09405eef0264c225136490f7069037b8009970048b0cf26e00f2412e40266c929141de1740de4809b99f7fc13c07ab4a6b39b219319f168a7ef56e9eff4ab92f9670b9640e15d0a15e14e8267bb63610da26d9d68652609b0753a2ece85f94fbb167bbe7d7790b781f2bb03fc27df3749bbb81051e628f0512ce5091596015b0c043b7e5a2b38c8dea93f5b0aa81551e66df3e25c2ad5f64fb94fa00eb3cdc9e7d4a2e1edbfe5f609d4750ef15493cd0b789ff45dac3ff9a0a631eb0c8cd9418877aeaa94cebbd8d5e9835d02e9e3e7a2bb0d2233361a5587524634a8af13a2a8cc7018c47d9b3e1c1c541e86b01caa3a92d32da445fe4c1af24cfe457753cb31fe40b24c338840a635f80718b9d3b9b08333ad9cea69d00d66328b1b6f72f36340d5f6460d32cd9145d1b80ec58eab2511d0f9acf9be6bf9791a06100e571f6ec5872f1b37e2500e5f1993846a050a9b75d3e46e02400ef04bbbec04dd8e4213bf06f03c079a24d6b4248cfaf21ab70ee01384fb20967be93389f00384fb609678193383f05384fb10967a19338db83f1a1536dc259e424ceed00ced36cc259ec24ce3d00ced3ed9938236c24914d9ced0c509e61cfd4848bdfed2c0428cfa444c95accd11eb9bb4318ad419d7d963d1f3a2da0fc840999f53500985b6d82e9e23046238079b64d3009570791c1ac0330cfb10926e1474ac8601e08609e6b134c17cf575a0b609e67134c174f905d07609e6f134c1797b9d4029817d80493b08f4306730d8079a14d305dece5ac07302fb20926e1b25532981b01cc8bed58cd46588f93ad669b087ade975062ec950463a07a319f9524ac76b2a840ee09405e4a09929d551d7b12f734b066c8dda3cc3b810c7d99bde7cabaf875e18700dacb29d10ed3a0654a3472786bbd5d7c97ed2dfbbd7d20af05007c853dcb605c1cf29802505e99c9e5d5153cabaf15e5e71caf9e6779d5563364a9649316934135751525de010a5eb6fa8d895aeb5f6ffa9d417d10d8ecd5761c363dc38bff3e2661fbb4840aed9d00ed35762dec22c44956511d0d705e9b89e6beccfe35bfb32cbf232847afa304395a01b952d326fd7def085a06505f6fdfae4ac262806c57650b80f4067b962eb838abd411a0bc3113cbb6272a4033b06c9bac76cf05d5d14dd4f058a0ac760f84b0ab4a3074e2de1a909100decdf66cf123ec746ea142f90840790b25ca6ca5365fd5d4cd6c08d19477fdfcae5d409979ebb61f749ee8157ba45b53cfa502390880bccd169084164906f2afa000b8dddec167c2c50d64cdf73f01b477d83138a2fb121761b545f625aecb01da3bed197676713a793a4079974ddb0c48c799c8daa6d7009c77db8433df499c7f0438efb10927e9e245329c6f029cf7da84b3d0499c5f039cf7d984b3c8499c8341a3fe7e9b70163b89730780f30ff6ec7823dc284336e9510650fe911265674f5de3c494658df585bc47e4deeaa6cea08c7c2013c3c42ce06a6e8352f65ae1c5bdc67904c07bd0be1920c2690bb219a0ae202bff69db8f1cc952d1bd32f159609b0fd902d2c519f53f03900fdb029270c08d0ce42b00e49f6d0149d8722403f92200f9882d20092b1b3290df03908fda02d2c5af057c03403e660b48c25dea64200782e6cfe3b68074b14bf803b0c8276c01e9e267187281453e690b48c25d9664208703904fd9b3b6cdc54dfedf81ccfdb43d1b56498775c9609e00603e63134c174f4c3815c07cd626982e9e98700c80f99c4d305d3c31e15800f3797b56651266f22d54281f06285fa0443948a06cf4567b6c7d7098754384199e6cdd501e00fb174ab023bdd8e5aec1b72bd8e2eb44e3eaf2a87ce66f9aaf490d2de6115463ecff03985fb4f38b17840d29b22f5ecc07585fca045669bd8d7ca705fb5043a3aff64c6dbfc9dd032c16837ed3cbf62c2674b10d900f2cf4aff62e7925444b56755d00d0be427dec4ff47337f36376afbbff31a63e00e3df32598632a0cbfc87b53e91aa842d56173f00ba3b2843ff9ee9850af8eea15a2e8834c3175121fd37b0d457a9cf558a66f805fe7ff697fb59bd2700f81a7589c93cb30a06fbea7999ff7ba37f870ce3282a8c8301c6d733b180ab48c9e019d8e74bb6e1ef6400ef8d4c8c30c126fbcadfd94299bb01cc37ed685db24a463d6d86707ebd840aed2a507fbf65d3d2eb8994eb3ec8965edf042cf56d9b70e63b89f33180f31d9b70929e074f86f36380f35d9b70163a89b315283bdfb30967919338c7009cefdb84b3d8499cf301ce0f2871b27df4e57c08a3c6ef4ec2feb77b7def31a084fc3013a344c95b9a2c1ad10f26930e69907d34f95f00eb47993d2a3ada1377f9a8e88e00e03fecd9d2e7e2668105a05cfc9812254b33966dd90b33b83536f2a1b55a5ed71161233bd4a425b0c07fda63812eaed75c0e2cf0133b3ee440382a44f62187bf008bfc5726c627f3fcff6bc42839bbcec0f824d9f14f0701789f52c26befb1d661063fd740d6a06e0b90fd7b5bae57cfd061782751ad12aa04e5df67d49bead92c76308f2ddb842ef74fb2810d7e6eefa96d84fb7ac81a384f03b4ffb16735908b9f979d0a507e91c9d5960dc2022bfc87f9a12cd6c563c2af0398bfa4eec9c4f6aa5dee4bb707d8becae44aa05abee6b7b1e9140d3cd3bbb8a7e27d80f56bbbbe5be1e20796f60438ff4b89b3ab075701cde62390eeaf01ea05f07d43896f88a6a1840fe4aa6049b33a19dca700dc6f6d864b38564e06777bd03bface9e813617d70d4d0228bfb7ef142d42a464a768bd07b2fe0ff6ec35273c9183acc1340a58e78fd4c3207299ea02d106653bcddc5d9ada0f58e14ff6ecdfcd77b2b75e0560fe6c134c1733750d80f98b4d305dfc326a0580f9ab4d305dfc6c572580f93f9b60ba78b4493980f99b4d305d3cda642580c9d6195803d3c561b8e50066c426982e6e6b5e0160b6b00926e1b2173298fb03982d6d82e9e2d77b0e00305b51c21ce1c54e6204a7aaaff4d8f2e8d8556d8917511396a5642b3ede0090b3320919ce63fede67312f05905b53420e777c14614f7e0b15cae700ca369428cd568710f69ec8acf44980b6adbd6809db056468ff03d0b6a344cbe604639731443f861c7c65659a17ddc6e2dec2861e00647b4a903dbce882d80a2f76657b8616c69259e33800b10325441683e8bc3b3c01ce3d68ad00b48e94d0e452ec7ca58c74d9e20a01bc4e99ae5a523fdd80b0ff5e4285f61680b63325daf0a71bb8d81fba02e0ec62134ed2a13a329cf7039c5d6dc259e024cebf019cdd6cc259e824ce2f00ceee36e1243d729c0c674fb0daa3874d388b9dc4990f70f6b409e724277156039cbda8fbe089c6e663171dbab7e4700628357bdb02d2c5b59b3b00907d6c01e9e27907bb01907d6d01e9e2c711e70190fd6c01e9e2c711570190fd6d01e9e2c711170390036c01e9e2c7114f032007da02d2c58f23ae06200751821cedc5ce98aff4e227c3529f36236c69920d1b978326fb604ad4e96d6e216c2a916d6e6909900ea1449aa758ef7ad436f14f33c58fd167e85c10b233b31701fc4333b1402cd53e3de1ac3a598ffe3c50120fb30926e16a3b3298970198c36d82e9e258d3e900e6089b6012b602c8609e01608eb40926610f9f0ce69900e6289b601236a6c8609e05608eb60926614f9f0ce65600738c4d305d3c19fb6c0033db2698843d7e3298e70098636d8249380e4506f35c00733beac5876bf963764271add367228e02d0c66dcb0d04501c693543b6abe8278072bc3d7b31082b992d54289f012827500f2933cfec748f7962509995806cef5069d3d7a7cb3c57cffae80f40e6508264c7a4c46e0f28e33bdd4ab97cc243d0c846e3870374b9f66467c2e134b2ecfc32409967effe1f1737005e0dd04ecc849562936fb1f5b78b27294c0228f329510e12281b7d0bacf11a42d9282158321b5d08c016d80a9670c88d0cec2e006ca1ad605d9c1e9e09c016d90ad6c5ea6a4700b6d88eed5a657cda975569d5a24f4f5acacea0427b31403bc99e96808b87ad4c0328b7b7697d3ce9279bc806e6ee053827db8493f42820329ccf039c3bd884b3c0499c9f019c3bda84b3d0499c9dc13aa42936e12c7212e7388073279b70163b897305c7d9264b113e3b4e7830a7c3a21b1c6a12347572bc395e951814aef19fe478f379b3bdd15be1d7cd7bfbffc2a5c1befe3fddfd083fab6196b7d1abe37799bc4a2e7b8dff34382b248fade2dd9999c4106112d991445fcdcc4e706846f066f44b730b7822071fcd654fd9873ae43079f4eb35d9fcfb745062ec13dd97ebb2f92733d86c59059f3b2b8d19332ee586b749e8837d35279011fb749e46bbd4be67abf3374dab79fc18b70c353800279ba71a1622ee473d48279b7f7b325148f0a89d6ccdd13c6aa8c9fc273aca27e0134de5055ef01147f58311d9297d0c259b67e4a8afc53c63320b5ddfa44ffc3b3d63de99ef95f31cc1a6693621bea1edb1e7d5fedfb55aad931df09e1d7292289b9ff023fdc3c17b9d5f287b06efd8d77bc182e4681ab230eb389fec4877e07fbed056efb3670a92a37a744b2837eaaf5f4c49109420b8def2c3dbd9bcd3a8bea7d35fbec10ae908d78a957a8cf502ff2ee35ec953bf5ccc2fb134cd651f1e8f14fbbf82c1939ca661931cb1d07b8db892f793cb64a57262695359d11bd1d7c6b5cd569f248b515005b2f7abbd726e910dfc6eb298268f1f5e37754c902ab9ec238bbfebf897b07417c9cecdb40faf5897f2422528984a7dcf955c29f693f5ff007a6e9b04e2010300 serializedProgramBytesString: - serializedSignature: ce029be05ca8718a91b3855723a009ec85264a1a0080670b752077375ae46ead2c1abf7bea1148b1e7587b492e6643845d663a12b02e29236ce7b85d7d137008 + serializedSignature: e9c35a633f338f66c087875a2c660ddaeb1bd1621c99938798b1d44e30e7feda5c4e9f2d7ffb79694bddc2882dbd89948effaa60676832e5c9bb6602b4e9950d programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/29fe30e2a863cca43af6ab4dc34b67ee.asset b/Assets/SerializedUdonPrograms/29fe30e2a863cca43af6ab4dc34b67ee.asset index 9f301ce..83d4484 100644 --- a/Assets/SerializedUdonPrograms/29fe30e2a863cca43af6ab4dc34b67ee.asset +++ b/Assets/SerializedUdonPrograms/29fe30e2a863cca43af6ab4dc34b67ee.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed59eb72db44143e722c5f9a04534a9a941668cba5665a2ab7650ad37f6d5a20d03699d8ce9f0ed3b889130cb6e3b11d26bc02afc01f5e83f7e11df809df39bb8a656925c56e3685b4d2582bede5ec39dfb9ecd975c6235cce0d3c36689d96e926d5699bf6a88bb765941ddceacbaf5fa33eca5d3c1b68bb41975346f275cd59c273055f031a62e43e6da16c497b959a785fc1d826beb87607bf267a39590caad3435aa5a7b4e82ca490d89041035de7b05c4e01cf07f42b5a9bc2144fe249d3221e55b40ca4ad03a6fd7ecfe80711ab83b62d8ce9531b345f08c5c21f3c56649222a7cbac2e0bbaae18f8e6b6aff073f1dbd4f5795dba81be19fd5ed0ef41baaea67b26a1ef589deb087adf429e06f5c8934e9f4da0667f64ba8299742ea33081a679da21a0ec818001e5bae8704877e8b611e50bce5c80ef657936d0a3254467a353fc199982996be36e064c6480fa6fc4c2d8485a68b9498f51f2a84dba05a53f0b51d9c0b46d9859936a78f684de26d88ef64c1389cd293c661d3495b57750e303dac3775b38accaf317e1b429dcafa06e28bed785f73d407920b34565efe3dd34674d4366e6d16cf471f5cab57c353d8434ccbd37c366f64623af42230c7d6e56bb61d693c8f15b44136f305441c695c544d1b8a5c2f958dd6df2f8d3598f2038b98c5109cdf6adf0be4b5f24ca624686d57d5124186978e9cbbf7eaffc3d7fcf1d17ed0e79b26c5d4a112d0958a65776ce4728248be0bad90a331a86df31c12f4b64f504e157fd5ad26f7205e464651a5780a42c35bc1ce0d746e7353c1b18ded6718e97b7a174e78c2aa2a74a4ea70a65c3429ac66e1cd81913d88593063b3dba24815d38946b04365f66048b3108a6f11087e08c01c14a5e6767111b10be8a21beb8770cf5ac493f9223fe6c553f75d4a924eb91b4b664651ed1dc936f9ecd4f909346b0969e48c2bd2fbc24eb73f650e611709ee4babc3fb1cbd99c4eade5cabb66139a1713b2cf4c9cc9b926a3987d350bd4742efb16f85c3cb2cb9612d797491d366772588e216f1be2c83fb822fe5a8cf7d7bc8938abe66c9cc461e2a578e20593ded9629dda09ea9ddbf6844a037d27d7fd3be0f57a1809b3e2cf89e29722c2a5b310a7fc625cb47ed714adef91bf45ae6257f33de66d609e269c782840b6a454f03dc7bd823735bc0527e69a20dfabe0eb2752bb9e70dbb84493ac1067e2245a3049f44908cbfb40ac2f59889260979ac2dd63095bbb78ff31c2ebc8edcc7ce6713b0e1bfd23e9d9c7d83548d792af01791c3f9d0a1dfdf88167ef003d46a8066e5f0852e987111c32e20e2376225635edbe344d0a85178fdf91c30b7faf63922e5da6f83d785e4be4d302d21c674f9da49cbbe5f4b11b653c0e98cef529ad299d0b8e3eb919b30d4d9e872b024fe5b414047855f05d2eba1dd8d3313c75d6606431cdfab910f0b770c7702ac7a6761f706d4b441fe056f952de0d11fffad86c6fbaed59d44b4a12970e2439eb0bbdedb0d77022f09fe3fc42d0eacb47b49c51283687d00a87e2f75ef32859e12879914128fa41a5c25672c9a6e733e8bcb056028b6ebc1eb9675f7a85f87899639be25854281d45c86922832b914141fabe4d48e735a43cf10eba3c3fa4cdd99835e05c5bc05100b80f6c02775e03b7a59d79184af882ccb3c55a83b2680bca5c00ca0f6d42794543a972ddae58a172dc7d945dfa4eff3772da00ce0400be6c13605ecbb6c60e4afd266ba0e56d81361300ed8a4dd04ab191b1fbbf05cf098077d52678ec33bdd0ca3cb007d8bc2dc0b201c03eb209d842ca727242b1ce5a42930f00f9b14d20170d8b49fca1915530cfd902b340a766df58e17d231fb01d6ea6ca09cb553926b0a82ddb592d7f17a39f48fed0c07c8ace68fbe67137e72e4d76f6914c337d6ff5290576a221bdb58f4d6fc7b15f3449fa327bc7b904ad787cae7daae5bf4663ff8de5dd4531ef3a34af883769159db78529bedc7f01149b60bc51280000 serializedProgramBytesString: - serializedSignature: 2f243d940db94a12d51eb1f3f10494bb66e39cf0d6966a281d4d136c72c909a2977316f7fb8328e77126d22a5fff738bdd8e25e5d1467aba01cda50a17c5000b + serializedSignature: 527e859afb8742d29852be4fbf09c0c602629fda4debcda87fd239deec5368cc164ca9e02fe8d0f87d7b0224d1623805838957221e37b7442b600fd36bdee002 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/2c30388fd9dc1ff408c4b34ef1cb3274.asset b/Assets/SerializedUdonPrograms/2c30388fd9dc1ff408c4b34ef1cb3274.asset index c178d6f..0efa5b7 100644 --- a/Assets/SerializedUdonPrograms/2c30388fd9dc1ff408c4b34ef1cb3274.asset +++ b/Assets/SerializedUdonPrograms/2c30388fd9dc1ff408c4b34ef1cb3274.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed59dd52d35010de539a962288a880281778258e480238dccb8f8a83c000e58671a040c13a6dedb4c1c1199fc037f2317c0e1f42bfdd9c40484e1afe0a88249393e4fcecf9f6db3d7b366dca261c6a04c51a2dd3348d529e76e80b55f1348d7b05a7f7e6d72f511df73d9405b48dd050c2483e9ea94728e7f0d6201723f7691bf792b4af5011cf73185bc41bd7eee22aa2974a63509e66689116a85ff526885893410d5da7582fd58e728abea1b528a078125b9afa51aca0a5216d1580f6fbadd34751ab82b66d8ca9531932b744623b33a54427b9b5e93b23cde0b2f47b0a578efbf3b3a5449377905da01ad9dca89e9f82727f6432d92c3a93f2f081759ed6855a350830689c173e5d9aa071a3c603aa33807b5aca027a944468263ac5cfc8140cae8cb318305703f56fc5da6cb0125a46691e771eb5496330c07a48ca1aa62dc3e4455a455913799b801ded99a4129b363c6619323dcfaba0c627b486f7b2205c91f2ab202d0afa39d4b9b20eaa580953b81fc86c51ddeb7836cdb9aa293363343b605cbde7e6be9966a00da3b7c5376f2d72151661ea3319bd0cd336af11f52362895b0ebd20634960f7648c79a1f558dd38d9125797230c9e5ec7a88666fff6f89ea4574d753133c3e67e221a1c5938f77bebbb3b58ff651d576d826c76133598a05a336259deb0ea8b4868ae8265a51d061aa65f99e8cf72e5ca25d2eff52b49bfd31bc0db998e1b4075e0755560b818b62de26b788e58c4e1e1592135ba6526018ba33565a2b5fdb2694d8e23cd686d3fd4eb88563ecc0ce662184cc210c7609b81418721751860fdc161e542b018518cf0b44938fbc01d932bf5892b7d920d724897055cae76af21319c8b1e9c718e520449361e891587a4d384c4910cb9aa33b2597180926ce333b8b6d0690ff36fe09c97a49d9f82e658449fcf3a1508b7ad614409f8cde8b33895627a66c59c758c5c9211fcd6209bd9167c27cd7279ee0af0707ab20a15b7c4dd9373deae2639efee85a53f495a784ecde3772547f6b7549376c93ac5a77a59ad912f0b4cf302b8719ade65abea2f2d4ad9ec68eac519bd29194537cfd676d2efa6a44dc013b0201fc8a19de743203024ce135c9da6795e8a003f37b880cf3d76aed740b623f1be81930f5eea21e16f5af45971d27d3fba2eba25121d001ed7b2bc9df03ae1087aed90df0bfaf970acaf1c855b73987438dcf6fce791d061f6ee3309961f381ca6ec412b57372703bc756e6b02ddd0361a14b7414e78fef364feb963eb3f7b12e5ce1203d212033c2a1fb692ca2e4d254fbc8b2e1b87b24bd1707971c459ad228e02c4f55ea50f06c1b7d40773ada2b22d40655f2ba97caaa9f4f2d8aa78615d02f13eee557aaf7f5ebb6904a70204f7b792e0eed8455ed55dfebd08a96e4e96e47096c4ffd6f83f5fead4a347eb5285442f3129606c41ee476988cd215c4dd2e9f2f4e632937384010ae450211b94af55de63d2f43c39506713abd8fc0975a3f57f1c76d37ec990f3b0bc27bc884fa8bafce957973ed65f5227b614f01c0000 serializedProgramBytesString: - serializedSignature: 9797c81dafed0a9520ef742c4786092a29d76303bdbc88b375164e30437165aef87f053bf8c56bee2043de32daa1c8fb9e99ac4f26fb9a7b25babd959135d003 + serializedSignature: bfa0e4d6666679f14b8e6749ff7c6ff3c32463bcea97334c452ca57762c7ee2c13e4a5f4eeef80cf0e6bc0f85b2191c0019b94d97a174cda8f69ef95b4362509 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/2d2f36720388b17459e4bfa03562fcf8.asset b/Assets/SerializedUdonPrograms/2d2f36720388b17459e4bfa03562fcf8.asset new file mode 100644 index 0000000..128b5df --- /dev/null +++ b/Assets/SerializedUdonPrograms/2d2f36720388b17459e4bfa03562fcf8.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 2d2f36720388b17459e4bfa03562fcf8 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c5545f6f8e7d1ab48ef127aa80949088858e8841a93501410420a441288291441c50a2a76ecbd37ecbdf75ed65e766debaaabaebaeeeaeebabbeeeeffcedc99dcf3ee9bf3debbefe6dccce5f70f1f7273db9933df3973a6cf6d96c1ac9fc868ebd76256c0a6b1b16c112b651bd87aebaf69d6b1cafa679fa9ebf9acc63aaeb17e175bf746b3b4046ff29fe1915ed6ef3cebac96d5596fd6b312eb5821ee17b232ebef3cebdd32eb8c5f2db7fe97594f455a582f2d62d3d942b680f58c744f2062b178a9565e8bf07845da58bfa7b22dd6dd32a1140f2443dcea69fd2ab4eed48a7b5596d2eab9656c8588569575afc47aa786555a32570b896df2b399f883d987aef2d84d1ebb58ffdbcabf9bcbbfdbc8bfe1f32de5b17b92cff700efb5057f734257c579bfa77d8c74b08eadace365e09cbffb9d7cae972dafd9da38b2fac8635f79ec27655e9e84feade5b17f82f8c693b11f90950cb336f298268f03a4be57a418fe209b916228e471961d813e6920ecb6e03ebf36d047dc553aeee34ac77dec746c76914cbf2fe4f383e571a83c0e91b2ad67ba9e24af0d93c7de09f41a6ebfc72632c766ad309b57cbf374791c218f23a56efb4a5daf04e77e7551693a4acaec24c3b84a735d3dcfef5f2dcf47cbe318577a8d95cf5d23cf3392d42719fb533a7596615c0bce2d8e2d56c591a5d2bd8b2bddbbc877cfb639b678d0151f607f5ab99952de7529c4a3ab2b1e5d6d5d5aa6473f975007257f9c94d34dcabd1e9c73b9bb3dc6ad857cef5e799ec512fbb6ae49dc1b6fcb69a358e7dae1b4ea665f6f359945db724e023d55da7677a5adcc5fad2aa55c15ff09f6794471ee0fe4f0f76f70c9ede192db43ca553e2223493d55be3f401e0f92c70359433e1e7691bc36491e258b88d2ed4a70ceefefefbcdb43f99164b9c54ba3835d69dd5b86db2b814cf5fe21f2d836c9e7d533537ce83c551edb2519663b799ce623ccf6b62db4f9d1650bb909644eb7f9b6a9033a5872da6e93e733e471a63cce92fcfbbaec40d521e2d941225d664b5d1848034b9776aa9cc993c739d1bab0b92e9d6e6c3c9d22bda5cc9bc0393ff691d76f06e75cd77c3b9c76cf4a99f3e471be4be705743a5bb56bf15ec70ec03692792f9e7de5dbf16b9f69cb6e5f24af1fead26daaa3779be9e05da54732f9a150b2e8ef62dc5feaa0d816b99ebb059cf3633f273cf1b7f56e07655b3dc175feeeade09cdf2f4852d7c52cd666b99c0120ec01326ce9ff3b9c2d9f5dc262f39eee5d7edc0f5cdb4fcafb48beb794c59663ea391eb73de09cdf5f9464dc0ed3e86785dbf19038ef1ecea2fdcf218e3db47e435e5b26f54963d1792b4ddedfcf79275229af2db7cf3b295d56c87706022e036dfdf651e5e911f2b89ae9cbd9558083cc8f5613b821ec7e8ae7ca386195ca674a5cf1ce77e4b4976db14eca8fa9778621cff26b65f258218f8ac33ae7d9118a972a1b8f94ba0d6251bed96ada3bd7f971b0bc7f1b38e7cf953bb2bbcb34b1daccd1baead273bd2bee3a1f10cfce36d8cf0eff4c9e57db6c3b5d26b93debd261058b6fbf47d9ef0d516df81a29ef3bfbfabe4be5f55a795436552f790c89e627ce13f9e4443a6524f95c3c4e9bedb01beaef5be4f168793c10c8ee22751feae8dc50a7db04eef17355cfddc8a2caa2b8ba6c9547d8568ef7bc6a336ff311ff78f75ac9e371326ec358749b66986d039d7f8d236bbbcda997e271bcfd4e57558e9e60dfefacece74410271ec67087f5beaa4f41b68785ef51f1de28af8d00d78e95d7463ad7843c7eef6457fadceeba7f0a90a1bbbf03e8a0bbbf535ebfc3d6bdabf227a7bae2b2d1a5eb0816e547d869b1718d8c70857da787b43c5dbe3bca9596a364babc1847d62e7d5a76fb409e9fe14acb335d69395a939667c97b6340ba49df1019ab49df0cc041f5539c0d9e8169a1ee9f03e4eaee9f0b74d0dd3f2f3a2dbbe7c8ebbb91b484fac3b43c3f36aee21918f65d49a4e585f278813cea7ca8f24b2acfde9d84dc8be5b13c8edc9e2eb9f72421f75279bc248edccb985edf54c253b6aefa62543fceb5e0dcb2db1ef7c6917539d3da7a4f556e5ec1a26d5dd50b94ad8f63b1b67e95bc97e5a4bf60c1af65b3585b076dfc88ecff61578367a0adaafbd700b9bafbd7021d74f7af6351b6de2b4d5ebf9ee96d1dea0f6dfd86d8b88a6760d8f1f8abb4bcd1c559f11dcfa2db31e3edf4e9a5f4537583e301575d3837d9f247a97aa492972be5df07cef971822bdc0932dc9f6d39bd7f9672e4d841ef0ef2faabf2fa2d323cd586bd553e97e37a6e8f7d3e5ab59d6e77f1bfc3652b204f35c4e536700fc66d128bae93c8f223720048ab49e01a4c2b55374bc455f9b1bb5dfc264a79f78373fedcbd8efea357c96b2aaf6f75ee7556ed0d95be1d801ef7e96d45e80ad2cc731d49c5f9fe0471f6e29326b3689f34d9b683beb3e3c87a583e5319e79947e5f131797c44ca3f9045b74f0e94f71f97e707b9eeabfecb4b1cf6bc6bb4410f259bbff34012f17f521e9f92c727643807b3e876c1c1ccf12bee3222d57a6caaf756499d0e61d179fe103b1dfaab3683b2c59509ece369797c461e8ba5bc292e0653e2301896645871e21599c6a2fb08641f0993655b64aabc2fdbea9119aee755ffe573f27cbaebf959aee755ffdcf3f27c66f4f3ec0520879fbfe8c42da2fa7d5f02d754bfe9cb0e9f01bbe4bdd9d161b3575874fb4eb5e1f2e4730f81f72003755fda7a648e2b4e73e5f923e09c1fe7b9e4aa7ed5e75cf795dcf92e7d95ffff8d3cbeeec471ec8be01dc093bd162d33ae4d2b190be43b8f8273cba607c4abffab7717ca63be94f11838b764a4315bdfb46eb8acc8a12e7e0bc1757e2c90f71f07e75c76bcf1a997e4b385aeb815ca77e38de3a97755ffe72257dc1649191fc9b8fd184796eac379d39586ca66b9bc259a745d02d2939f2f963a3c01ce2d1d06ee94cfbdc5f4b65de47affc9e8f707a9b1b2b7e5f11d976e4b59745fd77bf2f83e6e934cb50195ee8739cf34e8f7ae4bbfc35c7a1f2ec37d0ae8a1aef3e332165d46c93e4ff6a13c5feebabf5cded78da5c7cb239de5f1b72c651fcb7e678737e84e208beb04fbaa545ff3a7f2f8591cbe922bfbc4b997a1fad03e96b28f706447545fee4ac9e469706ed9c0e007c13bfcb8ca913b58e9f17bd7332bc0b3b0fed8d3755d956ff1f8a832b3c607e33fc8708b59f45845b11dc7213bedf80c51f6adc674bf8c63175fc9e3e709f4fa23d38e730f557d065fdbf787aabcf64d9272bf95c73fc9a3ae0e90ac8ef1d8a9394daa7dfd83134ee67679ed7bc9733508e7cfe01a3f9648f6cf82737e2c65d1f57cd53fff1710ce93f29af4a59132271cf1377fffb9e8f0d85f59948d355cff260516b20e1c2967d1f5bb723b2d87bd68eb394cf9fa9fe4717282b0fee692bf46ca7f1e9cf3fbba7187bfcbe33fa2654495216a4c622df3e6277e06ef01bfc1545b245e1f753c5bfa8569fb4ad2dd6db5ea04dcfec9b46de3f46a8f72fec5a2dbcebfb2e8b6f3bfe551f561fc4772a97071f8afbc7ea4139e78465dd3b58b13e9a6bbb64eca5cc7a2ed709d1dff1172fc7bc466166d874726084b3e27c6fbdabac2aa02d7a43f89ac07f1ac02d7f87183d4ed05706ee936f21d97dc6af9dc8b206c7e3c4a5e7f099cf3f7d2e4790d8b9e77a8e4d5019de498d3c8edf299ffb9c2a8654ef96ff11aa97cef4fe07e5ba0a7baa664c0feab75e0c8afbf2cd36057749809d34057f765f2decd29bc5bcfa2db216a7c4df507de0cce2d56a3649ffd28b79dde1a3fec06b91179dcc4a2db786abcab1990c7efbfe2313e9b5df1d9ec0ab7194bdcb691718b289947cb775e05e7fcb805a47f0b79dc0aaec9b1bfc836f9bef2a5ca468f01cf1e039ee547354e742d38b7c218bbcb255bbd779c7cfe7570ce8f2de571bbbcafda812a8f1e0f74d80eaef1e309f29d37c0b9a5c31839ff716c2912d689f2bd37c1390cf32479ff2d70cee3d62bfaf9c8c9f2b9b7c1b9620ce5bce392e3d6eb1410c753a42ef724b057c9b5a17fed1819d65576dc472b3ff55572f2b4d7545ac9bebcc80e1737392628ca60afb23f9132d4b8e1a3e0dc6294a1c6d395efff3841184a9e9c531e916db0c8a952febbe09c1f4f6351361f91e38e0db67f3a8bf2cfe2dcd22b73ba4bce2e979c5dae743943de7fcff5de19205efcfefb76ba652e8d8e4fc278ebaefd208fdf4bd91f787cff2f5247656b67b168ffa2c630cf74748ba8e3d9e09a1c0f8d9cc3f4fee55cf0ecb9e0597e546390d782738b7fd6772ed9eabddd2cdabfc8b2b021cf9fcff4fee502a0c3f9e01a3f5ec8a2fdcb85b60ee37eb4d32aeb5924ac8b58743eb9c815e6c52cdabf5c2ce3b639faf9c8252cdabf5c02184339efb8e4b8f5ba14c4518d4dfe18dfae14d7063b3e9745f997716a4cf8abe4e469af291ee81cd79611516ecd6665acd8aa696688c277044b7e59927a33f1822451eef25ffc67b808b68e6db15e2dd3ad0a5a24d61cd5b16c96a55d15d45baca551a14f13bf8bad272a84d00f2331413c14130457aed2fa57069634d55ad7678915517c51538575672c9b671df95babd838b6ccfa172d65b1156c25abb7ce8aacdfd542de2a4bedd8271345892f7f72bf5360c9b4576755595714d06aebbc526858287e6f149a9609edf3ac6b7562add87ab6864db58e9b4568b171afb1fed685592491e975d42fd2c2aedb4bc154324db762c3b5cf10f6f9ff53a4295284a36fc5f307ff6991216aada7c5a4c4ff67683b195ee0e44919e304b248d4b52c9621caa4821882dee3181b43bd7ddbbc73594edcb8e8c9f0e4ee2b62e0a4f0d2ea5b9efceed3b7af69191db56c9621aaa5fd12442d1e582e2f5dac80f11285962d5b647245ddf8233afca23a5a18207efbb90af19cf70468250abfe8041053fc8a2caf960f0acf4542f94aa19a3b324542e53a714ffd3d53147f7522982d2c262d3379c0ad4572c416b689a2842548335d828876415193e4076c0971fc2469d3100b274932446da9571cc3c5c21255abe6b27ea5b2d60f437efaf28d0927f67bf4be85eb8bcef9f68b96faf46927d2279550b1146aae4ba176416799c46544bcf469df102f277df88f9e6107c4c613e980116ca123d83e681be7f7360829c5d6b3de19f289dda3dc6e470f701fc40813ab80216ca94198c91176d268c55ab67569c5154224b7d2254e87a6299053336e3eb3aea70b414bd4b83bc72d4fbd9a766b1d3db1046015293dd54e2cb41a0473ad7bc5d6f365a2d2c9afe75b128badb0b9bc292204a76d19fd467cb27c0ec01837592dd5ae82ea10d0eaf5ab1946bc8d867826b7d76e1a33103ece9d193ae399a12d96cdbafbcd66ed30c93dfc4a6e8f49eee95772074c722fbf923beab20d7f5e4c0fa1cf364ef78afa6baaf5ee5a2b321b459bb9de7a5fd71d133fbbf44e3abbf411d9258de93a89bc698465937d7469c72ff6d529e94eba3e78d275c204f7f329785fccdafafbb5b6ce3ac9dc73f3f597312d09adcf688d4bef8239a4018de090baea84735f92c6626b74ffb37e628477c08577c3341fa8d17cc59c669e34ef8e25e720bfc9d903933cd8afe49e3ab7240cfef880dd92bea77896d8b8aa8c2db46a244732bb8b4f85bb4174ef718d54576181752c175af0eb5c8bc43dccf11ddc10a669e6897c3b43ebca9a2a16432d6d9a09473b4c385abe9e6b9175ddeed99e2152a042843456ab0d0f017b5eb1982ff6e4aa17a9dd12698c0e17a19bc5062b307a619e265de3693ed0b9b1389ea637966547f8cdb27d749279961da9b1d54c6eab7cb0a89d288762c2198e87d357e71a44c1727493ba06bbd9c2e5958bde2b5bde02c6b795db244c759d65c01ba5e11459cfd45861944923f7e30cf8a4cafebac293614daf31223b1c944476a08c159601fa61b584b1ba5a02cf2e055673661a5b29b2e151e232a764a76e8578b4821d6d1dd5388c975a457f9d36bcdacce7db25ac6675c505ef8709cef429780096c7c7f9cde3693ac9dcdbf0358b7e6b580331b5b3fdaa3d08f3a8391a8ffa6bc49b471d8c091faf11fe68336fc287e8847363cd4dc646e258f5504cf0045d1ee34f4f135d6569d6ff0dd61bbc63a658e4fe3451183ade20cdcaeb15d65fbcc01e0d9edf603d618f7b7ad17318661413fd1ac5702cddf6d7a4dbcf1ed32d1d133e49237c76736fc247606977802eed78a6e7e506af96ac95655bb4374c1323d06962d241bde8f2291529572bd2358d6db53cd231d6918fc7a48972a052dc4b13bbacd6085feb254d4762fa4fd6e9df0ee89f0f34f412e228cc6f1da8f15b118f7e6bb44e38aff81cc4908a0f5fc5e9bde23306c376880e1b2fb66658d5175e73ad17cf170a03286ba82b973652013956a35786688baf674d5921e3ad053e45a356fced545178d8cef0a09f8ad714165bf1523ffa8a175faf992e56f807a13d56c1cac09cea348d538d7871aa99585e988ee5851929e585713a9b135d34d54d6a73788e2a10b279cef35fe1e72b7c9bbb5bffa20f292709cb6a2c1d4789d9b3b562176d9b5c2d77a6bce77e35d82edb862fb2843e4fcc12792248cdb17c918595dab335a5f6bd2dbd95dad93a93157d73354d6ab2d3858420cc364f67b6a20f313789c46f4c3d0788997cb5c2a9964aa76abbee0111ee076b44b159665de78e17de1f25b6e2e6f5a59982779520cfe3572cdabd9891cf11461e743c3143cfc10a80b99a02c053ad7a3c9685e669b2d0af1eb3502ea6f67cbf6a4fc0d45ea0517b5b2b6f6a4fc4842fd4089fd7da9bf0fd75c2b963e6cbe2fcb410276182f91e0431d54dde5055ed8412574b71b5682ba8f65fa9b8b2c5fa5d695d2b1122d2c4ac4c351ced45cb0330b6051ab6fb7a643b194350e893ed813ac1dc3c8b92111c67e8ee209d605eff5ac490fa17dff5c07bfdeb600cfb120df6ab3c623f04cbe64bfd66f32998e4c3fc4a9e8a493edcafe46998e4657e254fd749e689b85c93887c468697449c81095fa1115ee451f84c2c631ea1f34d4319df24d9a9a4dacd27a75fa398950b2935d6df1b65995b1ad53fc2fb3c2a64a3d94b3e9f85e9b952a7a7bd08844fbae1758a62d187c6435cc8d6790a7536867e9506fd2e8fe8f330e1c51ae15f7b143e07e3b55ac7ab5782742d1573359cabe3acab5e38cec5b429d169c34f9d74f312ce3c0c69a906e965edbc219d8f45a24c1709de6d63e39b64215b203afc8ae502968da218f78e7101a641b94e03eed9e635540cf253ac162cc490aed1207dc723d27ccc23aff5eb910fc5d4aed039cdf6ded42ec0d43ed2afda853ac9bcd6b18e21b50ebe3f80f75a4711164e1516cefa94c259a40b8793dae097d4622c81ab35097c48076f09bc04137e9446f8368fc29762c26b34c29ff528fc304c78ad4678bf8ede841f8e09afd3082ff5287c1926bc5e23fc228fc29763c2376a84dfe451f80accc837f935f22330b5376bd4eeb68f37b557626a6ff1abf62a8de40c31112dc8e525eed94fde66e0f32930c94d7ce5bb4ee89696240a1feb522ad6a50b2fa1b7e954f25094afc6ace9188d357de131139460c28fd5085feed1544b31e1c76984eff428bc0c13be5d237cdf4ede8497638979bccfc45c8309e69bb1c4d405470bebdc20f2589af8ee265f9bb95e7ee693af8f2f1303d7c5c2f69d0e273570cd17fba649ebad91365d6959fb58ebaa17add7625a9fa8d39a8fbcf24e5ca7de6c3725ed66886e5e619a5519b16bddc33de95581d9c0491a1bb8d7a3811d8945fa649f36b04e2338434c7aac20f5b3d83cd222d179cf17e7970b4ba9f23ceb34be4f3e25699fbc43f8643ece4fa72be6bf2b75c9cdebd63b1952b7e67bd3b4e32a7baa5b57e9c2e1367b9ac666733cfaadf598f0d335c2977a14be0113be4b23fc248fc2ab75c279b586effce3ab5a7314a6f6991ab5dff1a8760da6f6597ed5aec5d43e5ba336b7472f6ad761beed1c9d43e7a1aa3ea5547b02ebb110cfd585d8593c67676a6714b0ccbd2ede43f81bb1f0cff3e9cd3761827763289735c0b4fb9256782c8d37639671bec632f678b48c2d98f00b34c2bff028fc689d70ee632f64888fe57b3b79efbfd8aa0b87e7b58b9349ec38c34bdb30c197f8147c0c664597fa34cf6331c197f9147c9c4e304f7bfe691cf794422ec0cb94c2ed98155ea1b1c20e5dbc59e1f13ae1dc67f30dcd7df9ec1330b5afd2a83ddaa3da2762c2afd608cff728fc242c675e83e5cc6b53ca992763e6781dd3784b3ea56ba5f58ff77af0c1f2352c5fd4e7f8b4dbcde24eb568fbf0168517db3d05d3e27a9d165d1bb4c8b47e57317bb0c59eee92ba0e3b301d6ed0e9d045ea906dfd2f11b57bfece66eb77ea1aecc434b851a7411b9016bc68e6f56f2fa19d8a99ef4d1af3edd7d59bf99e8699efcd98f9de9292f99e8e39bd5b354eafb947a7b70b23b44743e8038f84cec084dfa611fe8b47e16762c26fd7a56d376fc2cfc2d2f60e2c6def4c296dcfc6b2c35df15c535623bba673302dee8eef9ac635a26b3a17d3e19e78ae29a7115dd3799806f726724d4b4478de26f0efc6ccf73e8df97eedd17ccfc7ccf77ecc7c1f48c97c2fc090f12db9fd54f42ec4e83ca4a153d7dd1b9d8b303a0f63741e4989cec558241ed544e2558f91b80443ff984ff497625a3faed17a480f6f5a5f86a17f0243ff644ae82fc722f1942612cf7a8cc41598f0a735c2bff028fc4a4cf8331ae16d7a7a137e1586ff590cff7329e1bf1a334efeb911b458cb6ee462ed1a4c8b17745a38c55a5623166bd7623abca8d341156be31bb158bb0ed3e0259d066d9953accd1023381b3cce02ba1e33e0973506fc8e4703be0133e05730037e352503be118bc46b9a48ccebe52d123761c25fd708dfe351f8cd3ae13cb9f8aeea7eca855b30addfd068ddafb737ad6fd509e7dd237c7f765fdd237b30b5dfd2a83ddda3dab761b0dfd6e52ddebb1e7f9e5f91f568b59889b746f89d1ad1f96d2fe72a1523a8f9ccde3fd15e0a5c6c5d2d158b84d78a73e5378bd96a39be394e8c6faa65c45b98bd95569a985f606f899d26c6b64ae5e2f275e24aad78aa0c48d68fa056c8916038e6eab593fe762c81ded1245091c704ba0313feae46f8668fc2efc49cd17b98337a3f2567741716890f7484fa788bc4dd98f00f35c2277a147e8f4e38cfacbf4dc619c5e9babe572338436cb3d334c3d9b19b1435ee70f6ef74bcb4c3d9fc038ef187b3fdeb8a0d67df87d9d2c7badce6d196eed709e745c4277e8b880730c99ffa95fc20563e7c968cfdc7719a0fe9ec5f6c0655de24f6ef67fbb0f896fffba42dff7361f923e358bebf4dcef429f130663c7ff06b3c8f60c6f3854fe37914cba65f6ab2e91b7dbd65d3c730adf9976462aa447c29f614d1d02a132b38746b7fd2447529cde334adc7313dfea8d3836f3fe24dfe1398fcaf7da6ce9358ea7ca3499dd9fdbca5ce5398d6df62a9c3f3c85a594554e951d6b03546aa93e89ec622f9274d24e7f5f716c967b0487ea78b24cf816a6e845d9f8d9ed1e8255acf62217faf0b99b7f6ed8f366434ecfb9cd1b07fcc422b439432af6b709ec334f841a7414fad06f3c45f7562b1bd5deb4f6d89d5f3982e7fd6e9d237495d623706f6a2d30b98e1fda831bccafdbc19de8b5884ffe2d327bc8409feab4fc12f63827ff229f8159d60cef9670de75d1e39bf8a09ff9b4678fe006fc25fc390fcdd2792d77582b9f7f9473282e334867ea313ccdba1bf34dc70b543f9578dbdb743dfc0b0ff4b833d7da037ec6f6291f83716895f538ac45b5824fea389c45a8f91781b13fe5f8df0dd83bc097f07334cfecde11877cad7a51530b8a34aa9a8632b479ece4688026fbdfc1d3d613f4d9cd9c5cf68b153448d28f56d975bcb2ac55e12b50cae98b63b95f8dadf6a57cd4085c33b93ec22b6bcc19da709675eea713ae2bb180bbe915c0c0bbe3f0adc96cdae653a05acb37a7993d0b092398b6e6dfdb8ce892464594f7b5de4f01e6630bc461a3394e4d11adfc7b254b30892a59a4752c9521f609168a189441b8f56ff2196d22d7529cd6774ebbb4897c9ce55be4884b72eecdd7ce2a5697adcbb23c4145abb5bd5b1ebe81cb0415886ea428dbe5727ecaa4e938b560b0d37800e585bf606d93af5625fbfc5e8b58af82bcc7e87a5796b4d9ab718ec2dcd3fc284b7d1085fe551f8c71892b63e917c82096ee753f0a7188ef61a1cd33de2f80c73121d3027d1312527f17b8cce3eba7cec6c89b0d2b2fb7231f859237b6378f9b432852d113ed76890213636e7abae82ef336b8cadf7e3f79d754ac6f086e1c4fe80d9c6be986d744ec936bec00cbc8bc6c0f70cf166e05f6286d7556778692c76d365687a65b2925016f5043fe3636ede97a87ca5d38e37cbbb2593765b71c17fc49876d7d52c3c32fd1a13de43e7fd877a13fe8d4e38cfa73d7d9af3b798d6bd345ae77bd4fa4f9899f5d69919cf440ba4f15468d61c7933a2efb088f5d144ec418f11fb1e4b8ebe3e93e3074c703f9f82ff8ce1e8afc19136cc1b8e1f75c2792b7ebf64b48ed38aff8b4e301fd21c908ce08f70c17fc52c334d67993cea45ccfe96439e58f45a27dc6189c74acb4f58a80375a132a6498538d27fc6a40fd249e737ecda44460af586bf61e63458634ea3877b33a7bf63c2876884eff428fc1f98f0a11ae1951e85ff82091fa611fea347e1ffc4840fd7089f98ee4df8bf30e1e91ae1db3d0affb74e38b7ae113acbac63c96dfde56f1a90ddadbe326a6291d993827ec59268a42689cef69844ffc19268942e89da0a87e89e97e52532ffd585c76b00a3b16af49894aad1ffc3e23556172fee73333cc5834510f9193af9ed18d31a9e971023588899ba107b68536abe3048b551a173c79b4136c33419a7d3844be0cd41af2dfde69a5032c49799f8267541ed8654649df13d5fbcef849415e1dd28d13084196b276c6447b8cbed1e13b378e1a31fd9d6a50f3fcd89f09a6ab44a73e61fdffab27eaf358b499a9678d2b4c40c60bcce00f87ee57c1ab5ed872badbfea64a42a3c1a5e2b2cdc5cac5da10f77bdf4d55ec26ead33c7fe419be334d1535a9382394e88f0aa4e34a2b188314e448c315ee8e8479a75dcc497c75606c8cd7ece767b8562af6fdeca5c28fa9feddeecda1498ee1ff1faf9954982ece09898a7aa1f46bd2de6020ed0b880a5d5b73cf9dda76f5fe3c505b4d305c01bac937d3658db63820ff429b8834e309f9c7650c4ef27ac31c907fb95bc0f26f910bf923be924f37ae29488ff0fe9ed8bf9e9a93e7bff3b633ca6f9e5d105933cddafe4ae98e4197e2577c324cff42bb93b2679965fc93d30c9b3fd4aee89195d9e4fa3eb85a93cc7afcabd75927975696e322ac7f900671f4ce5797e55ee8b519eef93723f4ce5057e55ee8f495ee857f27e98e47cbf920760920ff52b390db3b9029f36371053b9d0afca83309b2bf269738331c18b7c0a1e82095eec53f050acd85ed208c5f6302c0597fa4dc1e13ac9fcf9c392e11167a0205d27983f7f7832823fc7058fc0527099cf141c89095eee53f0282cf556f84dbdd158ea1de133f5c660a9b7d267ea8dc520aff2093903135cec537026967aabfda6de382cf54a7ca65e16967aa53e532f1b835ce613720e26b8dca7e0f158eaadf19b7ab9587378adcfe6f0044ce50abf2a4fd449e6db2b1f998cca3b70c1fb63c9b7ce67f24dc20457fa147c009645aa7c6691c958eaadf79b7a07622c36f864711026b8daa7e08331c147f9147c0806b9c62fe42998cab53e559e8a09aef329781ad66ca8f7d96c988e69bcd1a7c633308d37f9d47826a6f1669f1acfc234dee253e3d998e0a37d0acec3506cf589620ea6f1369f1acfc51a50c73442036a1e86e3589f38e663388ef3896301e6e2b6fb75710b31d0c73702e87c4ced13fcaa7d28a6f6898da07601a6f6497ed52ec4249fec57721106e4944600b208537b875fb517639277fa95bc04cbe4a7facce44b31c1a7f9147c1826f8749f820fc704eff229781926f80c9f82976382cff429780526f82c9f828fc0049fed53f04a2c879ce33787acc2543ed7a7cac598cae7f9557935d6ccdeedb3995d82093edfa7e052ac957d81cf567619d666bdd0679bb51c4bbd8bfca6de1a8cc5c53e59acc52cf9129f965c8109bed4a7e023b1d4bbcc67eaadc352ef72bfa95789b1b8c2278b2a8cc5953e59acc7045fe553f0060cf2d57e21576390aff109f928ac7e786d23d40f6b301ed7f9e5518bf1b8de278f3acc17dde0d317d5636dc01b7db6013762906ff20b791306f9669f9037632c6ef1c9628b4670c600eb34c23f1a68c25e8acbe48cc4c65b197bab8e9976f6e29e089fbd98c1bceca7988abed8acc6a375c9ce53e7b664929d6b8f08deaa13cc4f6f8fc44e97543f5ea64b6ec3bce41d8de0258fc184dfd908c28fc5bcc35d7ebdc3713ac9fcf9bb9349cd380393db7582f9ca817b92119c8d9bc9f198e07b7d0a3e01837c9f5fc827ea24f335d5f727a3729c35d527612a3fe057e593b1ccf8602365c6537401f0d5a50f25c324ceead21d18ec877dc2de89c17ec42fec5375055e9a751a59c49a667abe2a30bc4dc57f34e942ec315188f58e895d323a6005d36998077ebc113cf0e958e23fe137f177616a3fd9086a9f81097faa11849f89d5049ef65913380b13fc8c4fc167635eedd946f26ae760bc9f6b04dee762c29f6f04e1e76106fe825f03df8d55315ef459c5381fab09bce4b326700126f8659f822fc420bfe217f24558a9f7aacf52ef624ce5d7fcaa7c0996195f6fa4cc782956c5f88dcf2ac6655893fa8d886609e474715a609592856c3a9bdbb097ec02c677f3dd244ab675b2cc1b2b164be659f7175a77d68bb29c5fd137dc74cbddf9d3b04ce525fe06662fcef7f641b8cbb158bea98be5290db15c643521796dc3ae995489bff3e497836ac4260076cd24afe1c9190ddb37476f10592379148abba596c47a112f2e379a9e23813fef4d0f4c5211e3cb2cd788bbd14c612dc5cd7bb125c7eb92da2b30d26f61f60443b4e3946dbd63d3da60d506575ab65123d2dc8e6d91dc32dbadadf32e7ebdb1ece94a2c966feb6279902b9690b91dcf9922c5aa441cdd5a46a710bc132fafc0b7bcc4ec2a2c66efe862767052e937456ca151c1d4d253ff29e7dcf112b7abb1b8bdab8b5bae2b6ef345eaac9531e3679b9b2c26d76031794f17935d01fb33e71dbe2168a525750be37b4238fb8cd77ab072c80e8f052f4bea45fb0a7a3ddeb26c3cdf762d46fd7d1df52949e58d79ccfe169e095eed3a2c7e1fe8e2378fd0aaf8d5a344303c56763f80b3855b31ea495249d5ebb1587fa88bf58171638d6b5a20e2626f8c6bc75195c6fc6a8924149b2f524fcd1bb078fd5617afc33cd7ec0ac59de8ba9d4e827d2dbfc10fd458e501efe3f153134c259d6fc478fc4ec7636e20653675697e1316e78fb07a8a371b5036cc77fe291182603a7bb5082f31bb198bd9c7ba984d4262b648e4cf4a5937b1fb1855ab65b1ccc5a531a941d346b9058bd127ba18cd24f4be2a55a3775e6dbc98de8ac5f4535d4c27336c7850e729a26300b77be34c668b54ae11ada112abc4ddd288b1da83c5eab364da04d1e1c21ac222910a35d6b33c1fae8953fa45cb68bc98dd86c5ecf7ba984d4be839936b15e03e345e9b35554f793b16c7cf75712c23ae51d7896d06f96e6a768d79b1b0808a86dcd8386dc4544ad13b304e7fd0715ad4642d8ff884fc73b813e3f0858ec354d487f116d26aeb219537ec3df4e297387a498d9dd2776131fc5217c33c8f315c222c7a3d92224d11dfbbb1f87ea58b6f01a165d7a650fe3606817b30027f6cac72d9f66d5340a94c1fab7bb1587dad8bd52c8f76ec7cc7dd041bbe0f8beb37580f85d7149c299e88b546b77f4d5eae97f8dd8fc5ef5b5dfc0ef05173ac13252fdf26af5cb6f3f05815c53ceb254e0f6071fa93b73473db27fcf467a25c4659523e88c5ef3b2c7e5eda8c765c67c93a9373978f78c4af1d3656cdf1212c7edfebe23784c5ef152cb2085368f930a6e50ff1fbf6bca442614aa940697b8f60b1feb32ed6f887bd8b1ae628411fe17c688d97fdf5da7a676afdfb8f627affa8d37bff842dae3c3136c87b1f2bc567b666b02ab115686cfb375e0aa4de827c0c8bcf5fb0da72fc3cc25bc3f9a20659aba943243396c06b5ee58d18c3c7b118fe359936b27e6c204fd81eef072f967d54b1e915e4f8c013581c7fc27aa892e907482696a9798cd463fa2416d39f75319d9d546aba477aec7ca8e2dd94e9fa1416dbbfe962bb3461bad2f68c53f7993f8dd1f87b6a63fb6edfbb447c74903fcd3766b65b87c178e167b098fd031bff4edc6a896eb1aa8dd0a97b5f9ec562f20b3666976a3b600d321a45d3be790e8bd73fb15224d9149aceecb154de56dd6249af127a968a3ec53a9962c1b4519fc7e2f82f6ce446af57ecd2a0a66ac1bd80c5e8df589f68b2a916bf844c26bdbca769eafee5458cc3af3a0e233d7050699a8c7ff1a2f14b98c6ffd1693c2ca1af77c643cbc4553e5fa8715a042f639afe57a7e984382d19b7a5476b5e2d6ad54e1f3a457e79058bcbff92992388d523671856877c158b256b86cc37f0e6e7ec3e8fd8bbb17348d4375ff0f48c953245f46bf276bc9738bf86c539a28bf35057ca3a6152e7a6d7313d9be9f4cc72e909fd935be75952e7646beda9d6147e83c5a0b92e06cb19dd6885ea7b8b375e092d30d99ca7def142e50d8c4a0b1d1577dd5d85e8c5ab3831c3725ce3789337b198b5d4c5ecf0264e6f2fe99c6a0e780b23d24a47c4dd1be1b5aee5bf3d9a7adabf8dc5b47532de6a9a48553b05eb402fb36d05b92c2741fc749e8cbfe52506ef603168a38b817ee62c0fd34bce84f1c3ae37560abd8bc5afad2e7ef312d6689c4f36b975549fccc2f317f6b9a7787932b5d2fe3d2cd6ed74b14ed4ab6ba76aa1f5f06a66b7dd4a5853af18781f8b61fb64729e9e706af584545b381f6031e8a08bc19c8672238f399f27ae6be825503d5aba7bde7a451aa30fa5b5f52f12119f3e129ad8a3021b841c5e0fce18c86b9e990d711adb50c68d8d2a0f9deb9c7895152ef702450da5195fb91d5f42c76676b1237e86cb4f54da5580483973af0c9f26e457cab8a9fc3956d8843d979aaf781f6bd57b2bc45b6a8d7ba258e8caf5b1a06487b14b1ca715c89af588f8e4339465911ec449ef6d31dd87a76a7f99aacd32f857f622a352b4a6c45a74e2a135d7db50cf18b2d01fe874b7052c907929c2b7285a2982b1bf5f8c2f54481832cc97ba90c70801aa069c50dc22e0f474e27a0b73b3278bd6307b08e5234b66eb96cd32798aec4b898dafb09d2e6abad516387bbea12a653180b5a140c8a7292a849d2911f24f2eab86fc6c318da050141d354260a9c5625d2880ddd9c601d685125837667f66369339e32a6106b76f7b075c574a705d34e0b8c0f5d64b7cb240bdb85a1a0a68ab9803ad1bb5b54567cf99d6ef0a39e754cd46b2ad2e0ce0d23b38e0ba5382eb21eaa3b549170b6180b71b140a3d28e1b507597561549f531830fddad7c1d49312535b80c999681c06446b7b38887a51226a2510d586ca47b5e8e8c0e94d09876f13bbb0a1ceaf86f6ece93905c2e9d733be0883bbf97cd9f9150680bbfb3900fb50026c03322057938f768601d09d9d1d407da93dd44231bce06cd1128e1ad6726043fd82b221b5ea290c80b6757500f5a704c4b7455355d0196cb388757d43bd894f992b15b5aa026161a5c2de2aad00c30091ff2888fb5142e4dd54101eefe2e12b9ccb1a36412e0d79e5b41be8f4194089b2a3f469cadeb6c8127391683f8601d566e0dbd2e82ba86aff1dd55f1e0644df0d72100d0caa81cddb8b70505db519c35479fda5b5036e1075031b8283ab46a7882637b4b970543ab681beb0c194f03a804a87b330d05eb21a0650bb4105760875f7f47c91fdd6b9f6b9996e3d5e23420a03b055cd1c604383ed308c9e26541a327f5609faf587d1774ff3b2d29e8b1fe6bad88b2d1d68c3a9ad6d861854ab17813b1b4d391b8fd58a0535d5a100f70500974e098e6f560c1be570ce464948ea68f9431c5823a861c1cd71c33862c4a7b9285823e9c727eda9041b849870b72b27832c398aba37b6c082368d25bfc1651800ee142d82d62d5dc2dd336e539f0de48d3a3e6fa913b3fb48aac5d53a5959899ac764791cf3341f0de721a5a7dc5f969ed0cfa5273d869eee79fc333dc5c934e94955d1d37d7680a57b982195eec905a6275df14bf754db494fc99fa47bea8f48f754db4f4f6aae4fbaa7092ee99ebb01743ae3531ad2630610d3e3b69dd3b54342e9da4efe7464fc363dcef0773a32a2929ea057323da5b1be74a4032f3d61f5d1997aab9f329bc9a7de8ef93f3e2b3693cf8a1dcb21f0af6cf01fbb9691415dcbe0b6654f82e69e3ffed64fe3acb2dea543bf181da2bfd4a56a133a6dda46d537f6492682a9d4390682992a9926e1cc0a25ce0280739c4938b343897323c09945dd7bb95266e268ac7601c01f23c3378c0adff7ccc1971d8435ae41ed11aabf924d64b974383b50e1fc27c0996312cef1a1c4b907e01c6f12ce9c50e2bc10e0cc3509e78450e2fc02e09c6012cedc50e27c05e09c6812ce71a1c4b910e0dcdf249cd9a1c4b919e09c6412ceac50e25c0d701e4089b3bbc459223b39dcdb48d8aadb5b148ca303d9920a645bd0fe996c0ac8cc10826c01401e483d7d54f54826db3bcc9faf11cf86af853e0564f58328c10e60b0bb38f9e19230c31d00e01e4c3d45305e6f121447ea495b53a1ec091cc02194283b4994b9c1f72391d9e1adc00ea704016f62f0f03ea282772f803795125ecf046578742626ede420cbc6ff0630a7990473420861fe07c09c6e12cc9c10c2fc09c09c6112ccf12184f9338039d32498592184f9270073964930094724c960fe15c09c6d124cc2563919ccdf03987926c10c630be74b00738e4930278610e6ff00ccb926c1dc3f843019687bcfa3843952c2acb41eaa1447fdd7d4bd7c918db4bfb32b15f27a807c3e25f27602f95a3193d29ed9b946c00b5f27470790e5173465675bf4eeae84d6b7950ae50e607d0b2951f6736578bb47ddee77cfb3b2f7de351a7436c09a4f8975788c1f2d16c26632f59dc6a9d67f9ee9378a5ef67a166f1f6d521b262bb46602d88706e10e92ab018411653fe0590b2851eea7f1acc97e778714ed0e2ab41381951606e969f9c7ca9cfdcee31560849e96ac00bb08602da2cefc53c432ab0d727109df7b9d8f66ae970bced4921b7b2153f8aa552d40e65f14c4aeb5e3acff5532f0625117e05703184122f39fc702848b83403861af43f82040b8847e7f787b9a823aba3f201fd6e908f703884b4d5adc423a87930c672628640e330927e9a443329c8b01cec34dc2493a25960ce74900e7b260965e65063feba30f15bed781af5c6eced4ad30761f67004b5c11044a3877739e55099f25d782975b2f6d0ea2042743b91158e511f4c31ab04378255b27d04d156bc7d7495133ad63992522666ba01064f18e00e6ca20ba35eac48e15b50d03186a61bd3aea3ae5c6514e5920437b1940bb2a886fc460de53c57425e56485ec0811c60b80e72c0e621433d9652d84c510d9a29603804dae360926e1f83a19cc8900668949300967cb91c1cc02304b4d8249388f930c663a805966124cc219c66430270098e526c10ce3aacaf100e61a9360128ef090c11c0460ae350926e1282419cc5e0066854930092bed6430870398479a0493b0214906733080b98e12661a8b6d487a9b664858be934d339c0f1a98954d394dd6dde74ee845c97adc87015bad32092661f94e063303c05c4f0973088b9e1863ef8d59275ed8d2104ff5f8de36b5eb08e0003604314ac4fbe637827947814c4b20b3d21ec04aaba9bfbfaef0c5cee6e4c29cad28c23ccfe34500f4a8a0be91bd774d95390620ac090261ee5e87707f80b0d6ec5a2761e73159ad73332874ea829acce50c08c3314df2a160b221b66dc046ebcd99df1ec6d5ea9300ca8d4195e2893e0f10e68986b900e82693b6e39b18ca1ea5bf039c9b4dc2393e94386f0438b7988493744705329c67009c479b8473422871fe0ee0dc6a12cedc50e27c12e0dc66124ed2cf8d90e19c0d701e63124ed2ef6390e1dc00701e6b124ed2afb790e15c06701e475d914feeab67054235fedd35c28afc2c2aa0e300d0ed416c1cd9045f6f215bdbbb0ec03b9e125e5f96ecb2e9e895bd8423969f53415d0ffa8e4e30112ae1cc2432a85500ea89264225ec5522837a24807a92895009677792412d03504f36112a61b5890cea0100ea292642259cb94406350b40dd612254c259216450c700a83b4d844a3807840c6a3a807a2a25d46c163b9214bd126e1a733e306b4724fa73b5d15fbd76be165c04f60d234d84315489c00d4e25c269e6ac370ee31ef323803d9f1ecccaf726f85804d9f70efe022c7197b9cb62091baf6463f66f02b46798b32b2de9f62b64d97c138079a64930c3f829899301ccb34c8219c64f49d40198679b04338c9373ea01cc734c8219c64f49ac0130cf350966183f25b116c03ccf2498615c88301fc0dc6d12cc307e4a62018079be4930c3f829895300cc0b4c8219c6bdc0760098179a3db33e8c9f8de80dba3e2ea2c4db51e2b5b755b3b7eeb7655750ee0546b6353f03767971d05b9c27dfed11c6bdc0c6019bbc24a8d9f5f34507dc3a5787f174ebb51a11629867d7f706b67a2925d07de266f25a3a74eda8d03503e82e6bca4533e1df33a42b40797910bdecfcab2f7bcfcae17c80ef0a33bea9610fbe550b8bb587d5482d936c00e31450e05c69d246d2a48d49324bdd0fe0bcca249c59a1c4b900e0bcda249cd9a1c4b901e0bcc6249ca41f2125c37931c0792d25cec12c7629ec0cb699f18934f54ccd9e5f68bd5eca78abbc4080b53fa953194c05be3315e42ea0ecbfcea4551f1343b9e3e73f00ceeb4dc2393e94386f02386f3009674e28719e0970de6812ce09a1c4f911c079934938734389f36980f366937092cefc20c3990770de6212ceec50e23c0ae0bcd5249c59a1c4b91ce0dc13544f7ca1a8a4d75b92a730fe4dccc572916ca958245b16ea9ef81500e86de64cda0ee3649a41a0e1797b10a3ec6a234a7bd9f66ad1727776f90cf7fe75c5c02eef0862d976137cf98d0cde6400ef4e73e7bf1316406443c13700b4770561971382b74b3278f700787707016fffbd2853bf06e0dd435fbcacd56cea57683129612552a172b12708efc90c5fb5a73d8079afb9936508fbdfc932f968500dbacf9c5d3dc338d77d04b0d2fbcd18612f12fe73bdc8fe5c5c152d5ab29d6dd6002b7dc0a44137d249b164fe7432c0f9a04938b34289b31ce07cc8249cd9a1c4791ec0f970102df3e43a39b242b998a002c07cc42498615c4c500d603e6a12cc302ea75e05603e6612cc302ea75e0b603e6e12cc302ea75e06603e6112cc302ea75e0e603e6912cc3036310f03309f3209661847800e07309f3609661897532f01309f3109661897532f05309fa58439400353df93344bbe12d8ee73c3a8e09600b8cf99d45a271d62a3fb0829c0f9bc493849eb9e64380b01ce174cc2493aa18b0ce7b100e78b417c9b703cdbdbbe4d78097310be14c40a8dc485d134e65e3838c5125a237654201d86db1321827c16b0d397c30099b0e427837c3480fc0a25e4fe2cfa13cf65729d91b3ba28dad7c2999e8460c9d6171501b0af06b1c98a02abbe4cccc538131ff6b66f664f05785f6bca31fac02aff5ba9507e050ab3d729510e1428f3ac870a0430be85c546f9ba63ad2be57737a78a0da7d7c9fb33ad63992596705f1bb20a575b00f837c1ec853c7e2f9a73f723c0f7863913bcc3e835f7055ef34d4a94dd12a0543125ad996653559a8e0718df327b0335c2e111b20dd46603bc6f9b3bf99b70b49ecc977e067ce93b413800acdae43800423f4ae6009a030b7d977a8bbf7cd9eba416c8e409cbe4d93e7c55a17d81fdbd1784fd6536d860a968cfdb5b5a847de3aa0700c6f7a9479638b0e922e026fdbee61c2a98d900e60741d42f33e3b4d2c3dd2ffa1240f961500b08a789e0ed85ac79b2b0e1fdf3252c9085ad6483729f0398bf0da29f3e67afeba72f07087f1744ef26b7c719c206eb8512f3ac574a84c75cc836894ee31a562b6a9bd541d82659019403c07e64ce1299304e539c05507e1cc492c29ce0fb86c8ecb01ac0fbc4a4cd292652766c906d4ef16780f35393708e0f25ce2b01cecf4cc249ba2f2219ce5301cedf9b8473422871be07707e6e12cedc50e2bc0fe0fc83493849773c26c3391de0fcc2249ca45bf492e1ac0238bf340927e96c64329c87019c5f0531a49bcdf6a68df7a7027c7f34694627e98743c9708e07c3115f9b849374e12019ce9500e73726e1cc0e25ce9d00e7b79438db080165e283f435cc9ebd19be8983ad806ffc1325aee12cb66b2d7afcdb9eee5a25fee6bd9af542e40c019847ab48500b6042cc542ad86301ecef82999a95157cf71b59dfe52700dff74d39352bb0f60e59b63f1778c91f8218ede14315b3181f7ee083146bc4784f4da807258e07d6f86773260a86718b94b1c01a7fa444d99df1092ebc3829656a263036cd80f0637764d9ba0db0c9bf983a978db40d4e3697edbf00ed5f4d454b5a1891a1bd08a0fdc99ccf2d678772539fe701cc9f4d8219c6d1f27700ccbf9904338c9bfa3c0b60fedd249861dcd4e73900f31f26c10ce3a63e4f0198bf9804338c9bfa3c0360fed32498615c42f51880f92f93608671539fc701cc7f9b04338c6df67701cc5f4d8219c66d4d3f0430ff63c64a49c2729c6ca1d4f9a01fe9bf66af94246c5a92ad949c03f0fe8fba9b2e71ff7bae985b4c5810b5a402790900c99a1b0292b07a4406f2640032420972a006a43d70c13bded6b33962b4b23aeedc2342c064338f9a8382a91925606f2b2fc2d8fd3106a06c4e89d2fb6c77c22a139965de0570b63009674e28715e0e70b63409e78450e2fc16e06c6512cedc50e27c0be06c6d124ed27d39c8702e0138db988493b4f54e86f30480b3ad493849bff14286b30ce06c4789b39d753253ecfb56271eda62b5dccb18e12c4eb2ba656780ac3d25327ea2768809df44834e0053079332ea44caee36b28cfa3780b3a34938c78712e7f500e73e26e1cc0925ce5d00672793704e0825ce0f00ce7d4dc2991b4a9c8f029c9d4dc2392e943867009c5d4cc2493a21860ce77a80b3ab4938493f1a4686f37080b31b25ce7e2c7a7776cea15e34a9dc7bb2bb17fb110e4e90adc0e805467fba53621de6c2ba9ac54ebd4e7e9236216ab296d37100750f4ad49931168c81e433e3ffaf7c9ce44c80bf27257eb55c6b22dbdb36e77b04f8e05e9408d5fa0d65c1b5c26ab9079e29e1956947e1c3fbf19185c03a7b0731488cd515a20789c338ad7b0840d927c8228dbfc885395b99eeed5f215c0d50f70dc221a4b6a08b70a218596de137c0d7f6a3443bc465c5d5d6831b2c45ea855daa782ed07add686711c6c9e12b8005f7a7c4acf6f21ce7f2be61fececb81c046f7a38497a629b4bccd15255c054236577406b0cd0141f420c06dce759e34dcb5d79781b5a605e9512b19dcad616faf13e402ab1d4889d9d9a06562f03e950c5f7b806f9039b345c3b822642ec8f08383289e5486e77eb3d4b549c6ded775d81158ea90208a27acc91abb252061073719ce0100e7509370928e1790e1cc07388799849374348b0c670dc039dca4d1ac89949b62908d66fd0b144de926e11c1f4a9cb7039c234cc299134a9c17039c234dc239219438ff08708e3209676e2871be0a708e360927e956d464380f0538c798849374bb2b329c5b00ceb126e124ddd99b0c6709c099114c6f5213f4d09375817c0cf0650631bcc1032e1796a864af978f840f5e04c01b47092fb92d06542113bec90d4341e331cb1490619c25d20980cc360524e1d01a19c84301c81c534012f60b91819c0b408e370524e1ac253290db00c85c534012ee114206f228007282292009abde64204f0320279a0292702a1719c86300c8fd4d014938a04b06f20c007292292009379e2403b90b803cc09cd9c661dcf7b82f40399912654fe665be06e9f26d32982d01cc034d8219c64da45b0198079904338cf3842300e6c126c10ce326d2cd00cc43a87b259d8fdfe549a015d6cbfc1b45fc3532786493aef9140f056f0a25bcfeccbde6423f75b548f48e73b4e54258156de7da0e2ab09500ec544ab083997b7eb03de5da59dbc605f24187f8993f8c7e743ac8fad32821bb9771db40f9246cee08a66b2bf4e1ddc4772bc03add9c59c3612c9c860237302388356db06d94bc8725444be6614b8195ce0c32f357584a2c66ceb7d8a1f0c0565c6ca5c27a22c03a2b8841def17bd108f9cd20bbcf0ea2629f5c57c8b8507ed0240f58629e4930c3b87c651e8039c7249861fca4e3c100e65c936086f1938e5300cc7926c10ce3370d0e0430e79b04338c7b7f1c04602e300966187be3f70730179a04338cbdf19300cc7c936086b117291bc03cd4249861ecf0c801300b8298b18ec18c5dc74b580491ad941c0570169a84332b943817019c4526e124fde63519ce1300ce4541aca7e053643682aeb740f69021c3770873f02da6c4c73f329a6f9dd83bcf72517c4fb9b5ac46f4bb57b0a3c5086685380b1fc69600e3124a8c0398b3b3913df6b3d252d76ac18aeede0a31343c85f15d3a787f7bb1258067f052a696b2d485106e0180bb349825531382ef1026db80a71df090870531fe93da9e86846d20b2a90b5701cb3c9cda7b26f78966c2d60fd9279ab7030b5d4689314d83d1dbb67b841d7264dbeecd0278979beb0008c787c81cc0fbc001aca0443b50a09d2decb380f1c1dd3259da970a516a72cd3a9100dc8e4bacbf6df133ad639925b63484657f3b00f888203c2c360f649ab058e2adfa275279d8d6c005ac0ca27f09d64f5565dfa9fe87bb3eda1dd8e4aa20262c4298895d4078c14e03608b29c1aa2f1a64b3bded8b06170084abcd993717c611f69900650925ca411e50165a617221756ca1f597ea30a9a52d962651154b6d40b1544a89b83773ef095f2c6aa97bdb6ce44a00b42c88cee5e4773524c449b659cf77c005949b849374cd1119ce2b00ce3526e1cc0925ce1301ceb526e19c104a9c6f039c1526e1cc0d25cebb01ce234dc2493a43840ce7c100e73a93706687126705c0596912ceac50e25c0a705605d172cf14bfed231fff2c6476f748783b3f560284eb8368b963f61898af24db0de41cd00adad09428a31b94619c193f12a0ac0e2a63db1d215cd06699a903e892fb9c0ae14320631f15c410064758d6b04980f3a1bb70f76c3e0130d6043b8ab9b77fe1aa27405b6bea003169c5886c80f80f006d9da968494b7932b4e703b4f541144d597bdd68d1108070633033eb9a60f22cd9c49afd00be4dc1e0cb71d537c33c31f107806f3325be3ea0629427cbf20a61857cde71199b29a6cbd8fb276d097523b20620dd12c43c8fe4867fb34239007c0d8079b44930c3d890bc16c0dc6a12cc302eb13e0fc0dc6612cc302eb1be1ac03cc62498615c627d0e8079ac4930c3b8c4fa5c00f338936086716acc4e0073bb4930c3b8c4fa6c00f3789360867193a9eb00cc134c8219c64da66e03304f347b2d1161c627ebf24803e3412705316ecedbecf98caf122eb558f039ef79d276f9aa757e1e407b9dac0be41b60ad2707313634ae21fb97ca6e10fe77d857b13f0c309e4289b12fb0ca59c2e6a06dd635c4140eba11db269927fd2d80bac3a4293213294b79b22932bf029c3b4dc2393e9438ef00384f3509674e28715e0a709e6612ce09a1c4f935c079ba4938734389f30d80739749384957ad93e15c0c709e6112ceec50e2dc0e709e69124ed2ee10329ca500e7599438d5eeef59c18fa99355da8f04f0ce0e62be11b444fd3cb96996902a2bd40de28c3f4ddaf5f111591509747d9c438956ad07e68dcce9a279596d3533cb649bdd5e055c2604aa290cced669b5a19ebe301058efb9417852cc8fc6eedc4938e44186b33fb0d8f34cc2493a8244b75722c0b9db249ca44bb0c870ae0338cf370927e96a60329c17029c1798540b9d48392b84ac16fa0b288a2e3409e7f850e2bc05e0bcc8249c39a1c4b91be0bcd8249c134289f35380f3129370e68612e70b00e7a526e124dd809f0ce73c80f332937092ee184f86b316e0bcdc249ca4d367c9701e01705e4189730473efe1157fe41d9bd934c5faab464cc6215dadf9588408f8a9a0a27f2525f0ee2cfe74b168cf4a06926c9b803460b9579902328cfb2d740320af360524e1846f3290c70190d798029270190219c85100e4b5a680245c694406f27400f23a4a90c35ca5fb6a16bb4eddcb8a7632d464ebd9778372fd7a4ad4992ed4f528487cf38bd841bd80aa557ba8aa555b00fe1b8298859f6c7734e1183e5967741f00f3469360122e692083d90fc0bcc92498611c26e90060de6c124cc2228b0ce63e00e62d26c124acb392c1ec0c60de6a124cc2961419cc2e00e61e9360123602c8607605306f330966183f58da0dc0bcdd2498845bb4d07d8a07c0bcc32498845bb490c1ec0160de490913ffae11df89a982d99f2c2db20470c1e1ffaed122e680bd8b126c3f01769ef54089981b0a571d37d9b7e1c8d622b70658efa6c4ea6d9bdf306e28341864fd7b8298369eda369584e53d59b7de9dc04aefa5449ba6b1526f1b1210b69ac89cc03460b9f751e2ed0a0aad8da250e2f3efedef6b07b47e7e2b15c455c046ef0f624a042cf9b1e28abcbc27b3c9fe00e703412fc249de9f8671d3dfe120bb3f1844998f0dec4597f961dc5d6c24b0d28782a8eea752e613f6d793d9e85900ecc3a6820de3d7b64f03601f31152ca12b20037b1000fba8a960096ba764603301d8c74c051bc6c912a301d8c74d051bc60a561f00f60953c112f6ae92813d09807dd254b084630064608f06609f32156c187bae8a00d8a74d054bd8db4a06b610807d26e8fe01fd7cbe22d177c51bbae5425c156d4d760715da3ad03ff02c255af54996f1ac09be684366995b81653e674ef74a1877759e03503e1f449f6af213cdc238a37402c8d82f98849374932d329cc500e78b26e124dd028e0ce7e900e74b4d390fc5dd2d1dc62f35d402982f9b04338c5f6ad82460b66ee9123e3346f834910d79462c61ce6e6263c536d7bc86c8419458e7f34415bd8eadb2702cb3fe794b8115d63fddf588d88d6f06dbccaac5552eaf54c8aeb2ee72cd6a59e610eb9157b841b49606912eea11532ce6fce36d05ac4c84be8515327bb7b485d66f35a5a85e2049173ba1e75bd7ea191f0ce721f06de4d7b21a11e3e8ddd4d2236d0427fb6bba35b2de9c2e75555fd8cd9335980a2bcec5ccfe8c5cbac09d2f9d5b7aa4233853a3c679a269532bb46a67dd8ffe0cdd5cebfa169174914867995a5cd3f92296c556ec8ac5b1a8415ec650ebb148aef5cb6e3e8d6d68388d95eb75aae499ba9e58264fabf8d25ee50912d1e7d0ca46b3b24431b233067fbf5c502c1352f312c63471fc708bed10275532f87ab6bd3afeaff17497c92eccb467a4bdf5d7222be56de1fccbc835d6df5c29fed3f2ff01fa000dd847780300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/2d2f36720388b17459e4bfa03562fcf8.asset.meta b/Assets/SerializedUdonPrograms/2d2f36720388b17459e4bfa03562fcf8.asset.meta new file mode 100644 index 0000000..68d2883 --- /dev/null +++ b/Assets/SerializedUdonPrograms/2d2f36720388b17459e4bfa03562fcf8.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ef0ec38010190ed4bb1e23a47a4490b2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/2e5c789119468cb4e86a11abdbe6a67d.asset b/Assets/SerializedUdonPrograms/2e5c789119468cb4e86a11abdbe6a67d.asset new file mode 100644 index 0000000..d8b5e30 --- /dev/null +++ b/Assets/SerializedUdonPrograms/2e5c789119468cb4e86a11abdbe6a67d.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 2e5c789119468cb4e86a11abdbe6a67d + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cc5f5f8e7dc7bef05cbfd5c25cbb26cc0362e7203376cd914636c59926d61d992555ce8bd9ade7bef9d988424a49304125a1292908484244020948424044820f0df373ba37bb737efeef6566f35ebff4ffe58ab6d6fdf7ce74d7f33d32a5f383fb189ceafb56295982f268b35a242d4881dce5ff39de376e79f7ba6afaf1475ce718bf3bbccb93751e46578137ec6c60638bf973867f5a2c179b351943bc72a797fb5a874fe5ee2bc5be99cc1d5cdceff4ae7a9581be7a535a244ac10cb45ff58df0c22d6ca97ead5b518842bd6c1f93d4fec75ee564aa5e023f9f2567fe7d76ae74ebdbcb7dd515a3fb74eac97c1daeedc2b77dea913d58ecc4d526287519385fc43b8873eead8571d7b3bff3baabf5babbf3ba8bff1f36dd5b15f96cff747ef75447f03a1dbd2bc3f401dffedfc6fe7fc598fcee1ddf7d5f940575eabad69640d56c721ea3854c96cc842fff6ea785086f0a693310cc9ca865907751cae8e794adfc61cbf3fd26514bb09c983e3c7489fe1e8db1dd17d388e0810761d8f9f78e2f113371e5b5da7e2ef4d757d943a8e51c7d14ab6f34cefbbd4b5b1ea3828835e71f73d3143246cd6f966eb5a753e4e1dc7abe30475fc8fd275173a0faa8b8ed389eaf8a9fac66ec375fd3cdcdfa3ce27a9e3644f7ce5abe7f6aaf3822cf5c9c6feb44eff55df38119d3b1cdb6c4c234bc7fb679e78ff4cbd7b99cbb1cd539ef060fb33c99da2e49d9443383ef784e3735797b671cf739974d0f20bd5f17f4aeec9e81ce45ee5336c6dd47bfbd5f95491396feb93c5bd62574e07cd7abafb9d767ddcebed668a645b9e96414f1db75f78e2f60b25b75ac9d5e19fe19ec734e783901c78ff148fdc2f3d72bf5472751ea16d3c939e07aba30edf61ea385b34a5e3d167ab6b87aae32cf7087fe23c409ec3af4312eff6bbcc27b7747134c713d783d477631964eaf7e7aa63c72c9fd7cfcc0ba0f37c75ec94e5373ba96349806f76766da1c3871e5b989e41e602976f8706a48323a7a34eb30bd571913a2e56fcdb78eca04d1676904997254a1781e2c091dba9873a3f5c1d8f48d6452cf5e8746af3e9146ba5649e86cee1d85a5d3f1d9d83ae2bddef747a46c95ca68ecb3d3aafe0d359281dba7641b691cd7be9eceb48377c9d0b5cd99d4bd5f5551edde627f4ee5082ded57a64931e94ec583b0fe3764a07cd768de7b933d0391c51dd3aa6ead65db46d0d40d7e1dd33d139dc5f9da5ae4789549b0539a84c937fc3b755fedf45c7e7d12235ed99de8523aa23cbbf41de6beabd63446a39a69f83b09d85cee1feda2cc376ac413fe7bb5de7a479779d48ce7fe626eca1fdcbeada714a9f8e22396d699d8625de8955ab6bebddf3ee5a97e3d53b288f957f3bfa75d3e5e906752c17e672b60c7150e9d16915367d7bc8abeadac634dfaa50cfe8a30ef79109399d0728dd753e562992d38cf759b8b6591d4f50c7edea589d78768c4e0755eab84de9d65924d7d3b7a2eb70eca2ee9f8dcee1b92d09d97d9f55d776787435c5678d27eca63c209d9dd5bacf0e50762176ba6cbb3fed917bbc486fb775ae9cb8ae27d6bb727ab4f129a7c195334ed78176b9e73db43ebabda9db28aa2d12eb2a92f272a1da1eb16ec86ebaa26bf0ec391ebe99744bc7f12457cfa6fabd2ec3753d723692dd5be9d13d11574d75be13d13d389f85c28bc3974e17fd4cd70ce1e9839e83e36901c29fee9e2a1384cee77b88a4368f3c77eca4d79034b2ce12463bedaddb4767bbf77beab6a98e5b9dbff54cb06eb2a573d5bd5e28dccaae62b8efe90c75ad0fb2a59eeade799ef839d773ff7c24c374ff02a483e9fe85eafa79aeeebdb5bc8b3c61d9edd1b5b748ca67c4bed4b0c67a7bbead6567139717ab77fb7ae2b2af8a9777d2c8bac41c977d743fc3a59eb8d465b68e4bddcf87c37fb9bad71fc5db68756d80217e07220efdd4bd2b88b8d4f7af44724df7af423a98ee5f9d1c977d753dee1a222eb1fe382eaf4d0d6b6c80e7db17641197d7abe375ea68aaf7dea08e6395dc0bb3907ba33a6e4923778047ee4559c8bd591d6f4a23f71642df5cbea76d5de531b14122d9d6e1dcb1db7eafa49175ab30da7a7fdd6f709b48b6f5db45b2ad0f16a9b67e87ba372411ff92055c1b2a526d1df513c774bff39de8196cabfafe5d48aee9fedd4807d3fd7b4492ad0f98a3aedf2bccb68ef5c7b67e5f6a58e533f8db3aaf4f1797f77b386bbec344723b67981b3f03bcf59f9d227dd9f8802b7f9caebb3da8e4e529f9fbd0391c877bbe3bdcfdee40d5ff3548ebdd455d9fe85e1fa8c7181e12c6fad6c052cf730f8be4fad4a31efe8f796c6564c2de9ac2f208ba87c3364a24d7491e57d7759fb47e465f33d5b932717d421dbfe2e13742c9bb189dc3734f26f41fafeb9e9ad1a9897b3d755f808edf2e488faf9a6d45ea8ae2cc771d4987f96b19c2ec274f1a2392f3a431ae1d0c4ed73ffb4df5ccbe34cf7c4b1dbfad8eca5e623aff3c1b9dc3fdefa8f3b8e7be6ef7dd9460df2f0fe9a165c33b976411feefa9e3f7d5f1bbea3be344729fd83875df5446e45a8fcdf55e99d2697cb2fdc873271e866a46da163766b08f1fa8a36e836e52f2267818e8b1a374fd5999be95265cb14922b90f418f07fd509d4f54f72f55e7f99ee7f3d5f33f52e7933dcf4ff13c3f453dff63755e90fcbc7816c981f3e712618be976c24fd035cdfba7093ec31e52f70a93bf2d9e17c9ed3b5d779eaa9ebb0cbd8719e8fbba7e5ae409d334757e053a8763b1476e918755b147ee748fbe2fa8a3ee27782911c689d5e81dc453bc982c33ad4d3fa764cc50ef5c89ce1d9b1e96aefeafdf556321315dc7b80a9d3b32f2f25c7df38a6859b1433dfc0e46d7e13853ddbf1a9d83ec746d9d9fa8676779c2364bbdfb4c16efce56c7c33c613b4cc9f8dc0ddbf01e6964fd4c1d7fee89436db3206fae215ee7a2f884f3394a876bd0b9a3c37055b712bf1066db9eed79ffdae4f747e87255d77f7fe9d16d9e48ee0bfbb53aeabe3d834d8adf787447fd594dfafdcaa39f1ef3d17a97a8ef5e87f4d0d7e1b8402497510bd4fbbf55e70b3df7f5388c69ac3d5dfeb828d936452f741d8e8b3db6b9d8e53a324f3dff9afbad519fab73dd27f03bf5def5697448a7d71242af25ea78b847afc3955eba8ffb0f845ebf17399725e275f5cd1b727cff8feafd1b737cff4feafd9b727cffcfeafd9b737b3f760411276abc2db654ddbf059d3b71327a651ad93dd53bb72299f81ba677749a5a2692eb2acbd4f7f6bb713f5a8f7fbca18eb332c4fd5b1ef9cb95fcdbd039dc37f5b1ff451dff9a2c23293fd4fdef2b446a9ea2f212f10ebaa7db366fa2f7e0fc6d149e4cfdada66b3a0f5ee9e1b7d2e537e623f7fb63755fa7e6b72d033ff55cec48f49cfed62a74ed5d750d8da1c556a16b702c55badd8ece1ddde27b3c72d7a8e7ee40df86e35a75fd4e740eef0d57e7478964df302def18a4d351ea9bdab7ea3dcf378e16893c18dab9da5fea0d74bf23d2535fd332701f42353ac2f5bb541c14247f33631c98ea1fc78ae4fadcb1eab8ce13ffeb547855fc8fd3f1afebe1f5e9bfade56a1fc3d87122b9aeacfb973e40f2e0fedd3ec3b3de139ef5c9df95f233d511ffa68e0ffae729dbef70fcbbfafe06f5bd7bd0391cf1588df2bb886d4436a1c728cbd4fbf78a641bdd849edd849e8563b9486e5397bb7137b1c0235bbf57a19ebf0f9dc3b7fea1ce2bd5fdfbd5759d4637231d2ad135386e51ef3c80ce1d1d2614b9f633b103f1adadeabd07d139fe6695baff103a07b94f273f1f3b413df7303ad78cb19c4792e578f58aa134155379b4ec8f4967eb8a6b531fc726f5addd6ed8c7eb7ceaddece419afbda48eff54dfd079c383e81ceebf98836cd5f6896d17c9ed87ed2ea349ba2f5ae7fd6f67f8866e4bfd4b1d3f52f27628f98fa27338d688249b8fe931626dfbb522297f96e7a0d73b1e393b3d72767ae2a54edd7fccf35e1d0a17dc7fdc8db7499f7bc29329dc49d7dac6a47fce625129ca44adc897ce40d0cb93adabbd7e33b393bdf43b825ff033567eb641ec755ead3479baaf917ef40d62aa28347aba0f9463fcfaebf3e5ef32e7892a29f48958ca27be9ef20950aedaf95789dcf4eb9deb8ba4973f38ea573977268ba5ce11deda28a68875cebf64296b9dcf568b46e7acd4f95d2be56d74d44e7d325390c0a5dffbce2a47a63be360bb734503ad75ceaba586abe5ef5d52d34aa9fd12e75a839cffb0436c11f39ce31ef9b5d4b0d7397f9bbe59aa909975344f3ca0aebbd31b74349538a101edf3a52dfe5f8cb4448c00fa76903ee0a74dbeeccdbf302526fe8fa19bc94007c91225638a44164bba5628f2a57fddaa1482fec3981a42b37dbbbc8b4551dab098c940740f962148c470fb8ff78dee35e8bd43da26076daac897c3224332042d1d5890179723f57e82d0b66d9b0250d48b3f66c22f5d00578788df7dae4a3ee73f02dac9c22f3902649771a993abad4485e71aa97cb554cd1b98d5ce138d8e38ad7a69d39d5532a7ad6eba32d7796ba19a075729552f73ce1a444a5c178062ed6574a516c699824c45582b5384c9ba6c698ba4176ada5cfa28ebd0148a4494e5cb1ad68034864d7d4b56bd5aabfa974e7a0dfb3f987446c188879e7e72c58ed2cbdf7db3ad397e3ac9f8c9e5ab540cb536c550a7b09354e632245dfc746e0a57227ee0c7ccb00b61e39974a008b63111ec1cb68dc3bd1a29a5cc79d63f4370569ce0cd96cc00bb11469859050a615b03c20240d8dda09568dbd1a3152844486e678a9c2e2d5360e766dc3092d5df83a02d69dc3dd396b77e4dbbbd899e746bddc84a4fb723573b0d86239c7b65cef395b2520ad7573a12cb9c6f83bcb9f20b89b667f21be9c942bffd242f5923d5de92ea28d42a0eaa1945bc83817801d86b1f8319c83cce9b187ad289a12395ccfa064d669d28c9fd824aee4c49ee1f5472174af280a092bb9a920d3c2fbb93f9934da2fb45ff35cf7977ab13985db24d0d354753774dfae43230ebe4324826973c61ea44f2a711954cba99e20e2e0e3629e98dba4174d475a7040f0928b807656d43835a5b4f93b5c9708459832b91b1b849caf15fc8812bed7043ee26c8826e9830d7e232e94159542f2ae3cd6b868cb737257c783308ef63120e19f208915a2dfed2f94911de8516de97d27ca441f3f9f3ba9fee47f37e549a1815344df4a7248f0e2a798029b5c9c47d46c879bbb93b7e916ae9af706cfd04e1f6a3eaefd6c83e54d048f7c7426fc166a9055c2f576926fdb7d2a7e431c2d0569659d4026379d052a18001e256322789cb9c049c1bd738d7dde183053206aae497261bb5812f50cf6b16cb042ce6d32863bb2dd1a21f27bf6e171b2a8f1c48e534e30d39cdaba66c2c4d4e33884ab2138226d9c126c99064271a6cb5006c153c6e3bc9c23ce53be3e8ef0c31650db25c39b145b306b7ed07f236cb113257de7201eb51ed96a6bacd31e05dca704a6507e1167937686600896aa8b753216db19e2f93c3ec2c920367a8a80430d46449d048061786944e5d282a56396dc2f962834c863be565a0e4c66e957cb44a9ce81cf560578abdb5a7eded209336d0f680718a8c75d5deb4e06194e0c28082f3a8343e35681a1f6e920cb90d387604ad618da0d49e1654ed91548e5a6cc8513f8ff9cb514751c2a71b843fddca9ff0d1545298918d8da4b1ea3194e0834d690cd4982ffb1bf39cff35ce1b50e52f93a93f4f168689dc20cf49eb5572f063afcc03f4f335ce13eee0b21f3dc75246714850a38853f176a821de3ef2196fe328e1330dc217b7f6277c3c1577b34c7107d914941b502dd9aacab6e4dc304f0ef3e749cf8e46d96f562163ae5ec66b9e38c9c9784f718e0dced379b21ca896f7f2e4f28c7532aff513a71328fd679bf4ef84f45f8934f4f3c589a62f02e1c30cf956cc67be35c9241c2a3e730451f1992b72a9f84ca6b0cd336183427481537d819a6ba37c7eb53480caa6ba7245331590f906bdf2655b7c8768c90a19b416c00fa65efe9da8a2c0b71363ac412a5e3075c35bf1d23fe68a174ce288cb695661684f55b00aa84c758121538df9c954a750696121951616e594160a4d3627bb686a5bd4e6e814b54aca869417bcc20f536d5a7b5bffb20fa9280bcb6a2e1d27c865a1eae5f2bb2eb97ac84c61f863135a67d7852f9384394d2c9169224ccda97431952ab50f3794dafbdbfa2bb58b4c262bfbe6ea5ad4644ba48430ccf60893d9ca3ec4e22c22bf39f51c26dd25eb65a65ad1e4c4033fc3e45a5775b2d8ac74ae43c68bef4f90eb30417d69a1e4bd5d92af91ae3f5b6415d46ce44ba591871d4ecad0a75105c0324301e0ab565d4c25a1e58624f4b9cf24349d527b4550b567506aaf34a87d723b7f6a1f4c093fd2207c697b7fc20f3109878c193c2f82b4100fa504c378574a75135ac1ba9d50ee69296e926d05ddfeab9057f63abfab9d6be552449e747dd563fa7eb49c49b12d35b0ede193ed2c0ac19a806c679b047713ee028b41c63f0f330986fad75182a87fc1b433fff5af3914f6630cd86ff3897d2e95cc8f0d9acce75192d705953c9f927c5c50c92594e4f541252fa022f1784324825b8b9f485c4809df60105eea53f8222a616e34e54da30534b9139554b7f994e8d728139ba5943ae7ef5daaccad48ea1f813e8f2ad568f693ce17537a9699f47467da80e752c28118beb8426cf3f5d52514fa4d06f4fb7ca23f9c125e6e10fe8e4fe14750bc2a4cbc066488d70ae9f092b83ac5b9ea87e3524a9b4a9336708a1cbf7d7c67198574b301e94d9dfc215d4e05628b2910308ee6e23bc441b65c76f895a95942bb6431ee1fe30a4a83ad260d20675bda5431589963b5602585b4ca80f4159f488fa472e41382e6c8ab28b5b79932cdcefed45e4da95d1d54ed529364a8756c1744ad037a06fdd73ad650dfa9a1be539bd377d652a47606257594493244709d2182e774f117c14753c2eb0dc24ff629fc184a788341f8333e851f4b096f34081fd2d59ff07594f05d06e1153e851f4709df6d107e9d4fe1eb29e17b0cc2eff329fc78cac8f70635f20d94da271ad4eed3cd9fda1b29b54f0aaa76994172be74440bd3c3d3ebfde4cfc31316eecece7b1896f636797666fa3ed5a5b4c9142f50429f6a52c947515e4e59d369066b7ad36722a8a0849f6e107e9c4f53ada4849f61107ebe4fe19b29e1671a84f7e8ee4ff8162a32cf0a18995b29c1670b435d70a2b4ce1a99c6f2e4867d30017687da1f101621a89403d765d2f6131d4e7ae01a6654e729ebad53365ded58fb64e7aa1fadab28adcf31690d23afd0899ba837bb4d49b71962f22bcc136355ad7bac2fbd4ea06ce05c830decf76960dba8409f17d006aa4df9ac747aac62cd67293fd252d9790f2b206c9696b2ddb7d769fa3cf9fcacf3e40b649e0cfe047cba52f9f776537443ddfa4241d4ad6111f24ea0b2afbaf50eca66f7196cb6c867be554309bfd820fc689fc26b29e19718849fed53f84e9370a8d6c0125981aa357594da9719d47edea7daf594da970755bb8152fb0a83da7d7af853bb91cadbae3465e8a04a369d2279325136ca020a8a9895c29da5ebfa4a9539572ba417d55679be52264de859dc240b007761820db2f3638b1c4bac73ae6aafabbdc29dbe9527ab63ee322d79322ba850be78dbe4957af95425fa8eb9c0a95205272ea2fcf66eeea2a2e82a43148df21945bba928ba3a60f1b387127c8d29eec19ba1d439a94d8a173fdfdb4b65acd752192bacfceabfd3e2442a5cd79bc205d1b4aea9a7d4b5dff53eab452751f17f832967f119ff2753c26f34086fd3d39ff053a838b9898a939b738a93534ddf814cef966c8c38cd38df6994e05b030a3e9db2a2db0226bb3328c1b707147ca64930c43d2cfce9f5ed04017e7c3bcfa2acf04e83154eece5cf0acfa684df6510bed4a7f07328e1771b84d7fa147e2e957eeea1d2cfbd39a59ff328a3b9cf94a781ffdf06e71ff44055cbdc5a97b1554eae0f776a655311ca433f16763ea5c5fd262d7a376951e0fc869217c6a65cefa0dc75b880d2e101930ebd940e539dffe5b23104efec717ee7aec18594060f9a34e880e202e61041cdc8cfd72ea2ccf72183f9ceecedcf7cf751e6fb3065be8fe464be175359d3a386aca9b5cface9128ad06306429ffa24742925fc7183f0017dfc09bf8c12fe84296e7d0abf9c8adbaf5071bb3fa7b8bd824a0e4fa6cb9a0a9b396bba92d2e2abe9b3a629cd98355d45e9f0b57459535133664d57531a3c95296b3a4a7ecfdf7c876b28f3fdbac17c3bf4f567bed79a8483f97e8332df6fe664bed751c86029e520d5b1eb293adf32d0b9ca279d1b283adfa6e87c27273a375281f8ae2110effb0cc44d26e140f47b01d1df4c69fd7d83d625fdfc697d0b85fe0714fa6772427f2b15881f1a02f1a6cf40dc4609ff9141789bfefe84df4e09ffb14178dca7f03b28fccf52f89fcb09ff9d9471c2d64064b136b5998bb5bb282d7e6ad22251ac153663b17637a5c3f3261d74b136ad198bb57b280d5e3069d051248ab50572c0abc6674fd5bd9401bf6830e08f7c1af07d9401bf4419f0cb3919f0fd54207e660844f5007f81788012fe7383f0e77d0a7f908a6ed8e12a48b9f010a5f52b06ad670ef4a7f5c394f05f1a8457f814fe0885e457a614008311e9fbe9537b7283f5d9bbfda676f7d23f4a45d0af0d11d4e033821ea384bf6a107e9d4fe18f5359c66fa82ce3b73965194f5081f89d89d0207f81f80a25fc3583f0a37d0adf6f120eddc0bfcf26cb48d30dfca44170be5c3ba865c6e853575e6ade31fa3f987819c7e861abb7f463f4c175a5c6e8bf4ad9d21f4da9cda72d7dcd241c8672ff24020ee53e4549fe7350c95fa7ca8737b2b1ff3499e6370c82f3e50a579b5bc4fe83ac8996def2dfccdaf2df92963f3e8de5075bb9cd1c13dfa48ce72f418de769ca78de0e683cdfa292e93b8664fae1607fc9f4db94d6b0bf604a95081605982b9b4395725a8a6942539eac2ee5f9f43dfb0ea5c7bb263d604d157ff2bf4bc97f2f60ec7c8f8a9df70db1b37588bfd8f93ea5f50754ec401ad9aaaa883a3e2a9bd6fbc8d533f0075420ff660864f5507f817c860ae4df4d818414a8fd0cdcfa6cb29ba69f60fd90faf287a62f439bdcf5aac96f5a113cbf69519c154e82a8107ebd397e4469f00f9306fd8d1a2c957f111b86f8d0e5c7942eff34e932384b5d52978cf6a3d3b3269dc0f0fe6530bc7d07f933bce7a8007f14304ff80925f8df0105ff9412fc7140c1cf539c3f31707ec827e71728e19f1a84d70ef327fc450ac97f022279c92418729fff6623384d63e865936068877ed674c3d30e85bd02fdb7437f4661ff9f01fbe2e1feb0ff9c0ac4175420becc2910bfa00201ebaa790371becf40bc42098f1984ef1fe14ff82f29c36c153364a730936f95c0cbc454c83ab6cec8e30ea43c59e3757f27cf42c893676ef133512e7f51274b7d37cbad17d572818c7a81a781bb9d4a30a1b9d65333d0df81ce24b788dddc949de7c9ccbcc2a76bdfaf2816ad4d2c603919bcd69c5bcb4c14b08929d9bba586d5023bcd6e9545505e460985ced37e676efc9a329836068369e3d3605ea59254db1891a4dac5724952bfa102d1de1088b8cf40fc968ae90ea698061f787317e93ad5b90a335fa075e12e51942e4ee369ef8e93eea86eb76ac2ae9353408db40cdd859a7caf41da558321156d921ad6a00e5857768d6a9dfab1afdf19e8e5cb15aac3dd2acf9d5d94dbae101d63b0ec5572440b69c51e0eeede68316aefbaf43a50edfbd728e3ee6c30eebc91fe8cfbf726e1b069471747f870439865b8bd1f18467fe00f94f65d0dda3fe553fbd74dc2c1b8ba5131e6150e914508ff2325bc7b3308ff1325bc473308ff3325bc6733087f83ca0e7b99b243a3f434d9c59b94f4de26e970c32d38f3735876e32dca34fb184c73c0187fa6f9174a785f83f0069fc2dfa628f58b056b21bc4309ee1f50f05f291c030c388ef689e35d93f001f2c12cb43e8516fc1e856390c91ac1d8f37d51799f923fd8241f96c24c1d9f5d260b67bdb64fe28ebf31d00f284d869834010950f0fab582bf515f196afa8abb485dea9c2f3f5ffcbbe18bf972fb0458a326acea47365b3e131b5239603a7ac0c8eab1b1ea314c563dfaa6842cedcec804b90f4d7105a779b1d49d9b0f5f7646fb9b86bcd02a256adad251f30fca18869b8c01161505e71dd7bda0daf9ab4105aacaa7a9ff93faee08d377bb93dfdda1da8f7ebefd2f93391e14b639ce9735ffba1ccc71a48368b407d164c2184711c698eeeb94317e64e226b707d9102237bcfbf46ab92067957365856c4fb9adb3fa1c988e8ef95d237d8c243b3225e4b9ea4751ffb729a5c0c8e2d858c091c58f29c9f1a0923fa1248f0b2af9539364a8958c8f05dfdae53f54a6342160c5ebbf148f8941797c46499e1454f2e794e4c94125ff8f929c1f54f21794e482a092bfa4244f092a59c408a32b0c6874319360b9bf5250955b992443dda0281b95d36c09d59a52795a5095db50948b03526e4ba93c3da8caed28c933824a6e4f493e38a8e40e94e443824aee48d9dca1016dae13a5f2cca02a77a66c6e56409beb42099e1d5070574af061010577330986a1fe39d9087e8b16dcdd2418ea03739ba13ed083328d79414da3a749323c3f3f1b1e6906817b51a04b0282ee4d99c68280a6d18712bc30a0e0be54ec2d0a1a7bfda8d85b1c30f6fa53b1b72460ec0da0201f1e10f2404af01101050fa2626f69d0d81b4cc5deb280b137848abde501636f2805794540c80751825706143c8c8abd2383c65e9e41727e9e731a836506c377796e8eeda0d3774dacca262ee234b1e1545cac0e1a17234c926189c4d26c54be80163c92b2cb3501ed721425786d40c1a3a9b47f54c0b43f868abda383c6de588ac5310159c429c1c706143c8e12bc2ea0e0f114e4e382429e40a9bc3ea0ca1329c1c707143c896a686d08d8d09a4c69bc31a0c6f994c66501352ea034de1450e32994c6e501352ea4045704143c95425119104511a5f1e6801a4fa35a865b9aa165584ce1d81a10c7740a4755401c33a82cee84a059dcc114e86dcd00fa104aedeaa06a1f4aa9bdbd19d49e49a9bd23a8dab328c9354125cfa680d4360390c328b57706557b0e25b92ea8e4b95422af0f98c8e751821b020a9e4f096e0c28b88412bc2ba0e00594e0dd01052fa404ef09287811954cf6364332594c19f389418d7909a5f649cda0f6e194da270755fb084aed539a41eda594daa706557b1925f9b4a09297536deed303b6b9575009e68c80096625c5e2cca02c8ea4543e2ba0caaba8d6fcd9015bf3ab29c1e704145c4a413e3728e43514e4f302425e4b25edf39b21691f45f1b820288fa3291e1706e4710c95b22f0a98b28fa5da14fb02b629d651902f0e0af9380af2250121afa7585c1a90c5f1a67ee9e1ce690c76a8b161299a75aa97b9f97aa62f3331333acb5d1e03afb27ce167399a5cf4a59ce83698a21d62e78a6ca21db427046f340986d32b63a90ebafac78f836e19954b5ed50cb9e4264af8d5cd20bc9cca1dae099a3b549824c3f3d766139b6946f02a4d82c151fdba6c040fa3cd643325f8fa8082b750906f080a79ab4932cce7b8311b95d3cce7a8a254be29a8ca275089f1e6664a8cdb4c1f007bba251b26afd382ab29d8b70684bd9d827d5b50d83b4c05de08e73406fbdfb68437b82e30fc797edf9e752176872cc406a6842e1b1da882a986ca81ef6c861cb8968afcbb8246fe4e4aedbb9b41ed3a4af83dcd20bc9eaa59de1b334c3c2991a7ab1c63592d4ac4114d2bd22c17b026d06e19c1db54d44f9653549638f7573877764893862be6fa8bc96f009ec6a605865f23dc69ecfe167f6fa042799f2994e73685728d53938244e726d0edf2ef256a95e03a3961de4da04b9a9e5cd0b40854f23213758ac76ae16e85395f34ca7081dc647a0909f0bc3f3d2849a50226b76c91779399e2c4eae5bdd691e37722532345fa7eca9ef017dd304d75de7169d53899e206c736ea649cbba12d550b6f79b54dbc4b5f6f2e7bda4585f2015328677b428999bbe15ca8b6852c33587d720ce13be9d20a7ecb4fc87653217bd014b2c3b28abfb972b1892aa127fc048fb9c41d3f61db4385ed2153d88a3d615b266367ab0a199ced69b190eca542f2b02924fb42cecf12efc0b222d58ed4bd02e6fe26562babf761e5981d1d0a284b1a653503e77a50c16abebced448afa2326ea73b34a1b4b85bbeebd0db9da4954f81e35856f29a355c1d59df233102ab73a5c253f5d254e1465644e924bac9e4c85fa3153a867a50d35ade92a191677791d378cba3486abe58a506abac83d364fa1c2f5b8295cc7f8aed9ad967792eb762609eeb5954df9409d531e405327484d3097783e95e2f18489c711a194d9dca5f9695498bf42d553fcd980b6615809a15c0ac2f1ecd722fc84ec742a64fb4d213b8408d91a993eab55ddc46d6aeb56cb5a958a2b526283a78d720615a2274d215ac898fbea58759713d824dc056e9b2fa4675221fdaa29a43305d54b6eca29924380f79100268b652cd7c9d650b953e2ee6dc6509d4585ea6bd9b40992bf8b6b086b642cd439cf423adc92a6f44b96d17c213b9b0ad953a690cdcf987366d72aa0f3d0746dd65c73ca73a8307edd14c645a44d428d7793f3900eabbb464c62679ff479895966739784e75261fd8629ac95ccad8706b93f0b50725b076ba5b55735e53ccdd31ece85d37914a76f9a38ad69b156567a42c1399c4f7178dac4619ecfb461438ab8800ae1b74c215ce233847abb4a738cb444782fa4c2fb6d537857315a767d0e758de620701145e03bcd550771f3b6b9a806c21faa7d54a8be4bf550f80dd542f9446a0c79f39cece5fa09dfc554f8be670adfa1016a8e0db23482c58936ab761e1daad29467fd84e9122a4cdff71767debc076f2092c9f2384b8f4ba9f0fd800a9f9f36a31bd645aa1e91b80b231ee96b87cd5573bc8c0adf33a6f08d12e97b054b1dc21c5a5e4e69f9c3f47d7b7e6261754eb1c0697b5750a1fe9129d4f4f660a54d43f5388f482cd70ee561a3b12e965bfffe9594de3f36e97d70c616d712393608bd8fd572b1ee0562bb5c802db5fd9b2e06726f415e4585e759aa06993e8d406b78a5ac55d51bcad56cc612a036b2b91943783515c2e7b269239bc7069648db837ef032d547951a5f618e0f5c4385f127540f5536fd00d98432b71c23f7905e4b85f4a7a6902ece2a36bd233d6e3ad4e16ec978bd8e0aedf3a6d01e9d315e797bc6b9fbccafa768bc60a251e4a1315fb67a76a97a172ed3130bed7b352d91a507d5db9178cf4f286ea042f1a2291485be4bbe2ab90944851ae185ad1af493cd15821ba910bc640ac1549f21a897ad57d8d16c2b63186ea2c2f07273d43f2ad8f4be99d2fb6726bda7f9d4bb51b695dcf1225e1bba850ac7cf731fb15f6051897c2b15be5f98c237c7673cb95e571033ee5d3716ca05def9aed161022dcd747918bee72774b751a17b851ae333872e752e454bb5f56fa742f44baa4739737f603675a96c7a15fdf73ce66eb777501c7e65e2406f5e4bf7dfe885d09bab567027a5f1af4d1a8fc958474a8c9c57caab500e354fdbf12e4ad3574d9a4e4f9327782d3d59f35a990324462038d2cbdd54587e938d3729d5e2c8948387dddab8870ae56f29cf147ff99cdb3b967a37d5db48efc940c767aa94b9726c137a7cfc84f95e2accbf338579b4276613dfe44e4df7517abe46d5a3a9f68957e7454ae76c6b09b9f699df4f85e0f7a6101c27f8c67a742f6dbad15e6c81d9a63cfd8e1f2a0f5054fe908db786fea29f5c2511322ac5354f6ef22015b2d74d213bb685e3db4f3ce79a021ea288fc319b7e2bbf75ade03d17b9c7fdc35448ff944d6e45f55db856502c8a3284cf9493c15b7e42f00815823f67df62836ffa6fb1b9e1a3ae37570c3d4a85ef0d6a1c267d8d26b1a58a5747bda50d9dbea8ed58d2a5c9dc4afbc7a850bf994bffbf1babab659bd26dbb958b969e5bf23815c2b7b2497966c2b9d51332b770da3bff623198f8b8404a7147536ae43b502bcc875d7c62054d25c3e4a61c7f7252e990b80edfdfeec406a489d2a6bc1d267ea697f017074ebb56c2fd19abb670730bc4d866e19d583a5fcaaf56f98db6d6c99290eb830e1366273bb5c02af9969e229b2914a6526e322ae770e83287693d31e535267786c4b21cd2301c7cc085f46d88d5112a565be543e53d3621476bcaacc53bf0b5d6661b326d789b481d26dd5d01cb55ef41aca76a6ca5efaeccf855ef6ad8deaf4e9202745d30a3b83528f99bc40d94a6e63ad8d60977d869bf636aeddbb62a80d8f82b2732581466838c9995f2e3f49c9828607bad4d02dbbb9cd8601e7d89ac2ad73ae05c774f5d4c5300eb238110ca788df03d4e8430417f619a91a928c0fa686402d6fb9cb060c77bdd6db258baf7243af501df0ab12d12c01eeb9000f60127b03ec2dd74b34024bc56a30cae47e704b8bf7182eb650007026128099c781ae5d58a4840db2812d0fece6d6dc9c973a1f3bb4a5541b497a06b75510017ef9200f7212738d8901adcddb22d43a300ef2a5482fe83135e6794545724f5f04501d39021094cffe4c4d411614a4ced8a02a2f3fb2510fd8b1351171912b7dee5f50f8802a88da81ef61127a876d296ea239599b7e99a80f36f4e38b0e4db8aa696a41e7176fd0b57c9d2b151c0cc2a280f57aa3ed92800dc8f72aa8f3901b641c9300a609e1d9100f30927980e280b0735c13b210a805eee9900f429771917cd267403eae9fa0f37a21572c434b13e59349a3127a3fce7bf9c88dacb64064e82150a5014f07c842ce8b3b072213d4b380a806eea9d00f4392720584c56378317c88ebd72c79a74db0da6508013b45b1928939d2f3b1c417b2301117e34c4ff7142848595313ce89387d54f2a9bd609af887803b90feaa5ff8213655795e56b7bdbab2aa36b447d44f2b6eb50d6ff65583d58d021837d8474a74c941a3d9fb64f8013ad987bb03038bc84c05cd9a705c3f689c512a200ef64d4d91ce384d70595a88919f1ee3a1c5100b51fd5ef5b718282f19f6532f96df32cf056e23c5e27bf1405601b5b2580b5e60496da239fecf55811b1fcac1a0d9cb5e104e78eff4055a2447e3aca158d67db26a0b5e5b6b6057288bf517e3cb1c26262c5cd7aa70e57e57c2f0ae0de44e0da7182eb869269544719c1f54ec36acf6d65da57a7468a89763b6026b2b20e9ce0a0637a95036dbec87eb1e228003c1f55723b7202ec2e05a49b831d055c45b2a3a87d5b8f70ef1482dc1d3afd31a65d4fbb0bb70ba0565e6d50d59524575498b3689de69d5a2157d278cedd41f18cc5423c6b3795b86f1783788ece7df1ac2ae9f180fd3b711f1e9b715f25463cebaa5fdc577d279e53f61bf7d52311f755df8f67e54e17f7e54316f7dd1160d299f61a8aa70c3dc7d3b69ee3c631b3b8b10f3b4eb848c4d37898c489f19478864eb7784ea3c4f1a4a1d1785a7f857846cfd27816e5599c18528b67e9641e370ca624667298676014c04c8eceadfeff9e6451e014d2a20b4080cdaee0c7addf74e5ae20829dbb736aa0144abf02e314a7dee1d161488a0ec9fbc6e99a8d499b8e49759f6ed9043097fa4f27e498d6cd269c8591c43913e1ec6e13cea991c47914c2d9230c9c5b48a058fd0d629a28e6c3d9850be7432281b3a74d388b2289f31a84b3974d38a74712e75b08676f9b70164712e7b308671f9b704e8924ce9508675f9b704e8d24ce5d08673f9b701646126739c2d99f13675f85b35c352bbdaba2b8aabb2b6e14f0816ccb05f24304720027c8a122d18d926d97163c5f279f8d5e557e1e023b9013ec3081fbb8b2efe38d32dc3c047710b76753ba66271607253d1bcaf65c28056a720ee61e3fdb206b97c940ddde4f78880dde202e78fb911d0e0903de8cf0e1b159de8b08de504e78fd3394e1c98998b56dce06f31f08e64136c19c1e4198ff443087d904b32882303f4030f36c82392d8230ff86600eb70966610461be87608eb00926e3d0051bccf711cc9136c1646c95b3c17c03c11c6513cc28b670de44304787d157042d71ca33238456f7302e90bf4720c770821caf40563b0f55cba376adc25bf56df0b5e11f6bf75c6f2ee4c7a2d6f9584ee49d24f2add25bc9f59eda22e145af6fa80bb2d2784bf60d252f35cd687da770a1ac46d6378e13e5d894045f26852d147abfca79ce7fb0ce5db2f7b251a45b259a15365b315580608f0fc36eb32bf3a3887228ca022670a23cc8900564bbab0c2bda0bb8d08e40563a91db4ae74ae7f01ae5120b8b7ec370c60ee526af1d855df7ebe815546d90954ee29fce08c3131be405f878992cdfe16a94bb90cf400827878170fa0187f0eb08613e27c2de22d13ad247ef8eef511d8ffc1a825860931b2cabef111bce41a8909962134e566719369c7310ce429b70b2ba72b1e1dc82704e6dc90666b29321630f7c4f2e9475086511f7da216e15a8e0001a417f1b153bd3ec71833938822807224b2c0e0325f6835beab46716a9c980ee46e5215486d850ee4656399d7ff002f7566e10db24ba7972c2de36250ae641c2dcc494a53422e061d415c19c11465746839cb25cdfd4bbae6733eaa3a9238eb5f061437b03427b7018836cd9ba6433e69f6c0ed93311cc436c82392382300f46300fb50926a3cb0c1bcca908e64c9b60323a73b1c11c8760ceb20926a39b211bcc1908e66c9b6046714650318279984d30195d66d8608e4430e7d8049371c88c0de6400473ae4d3019dd0cd960c611cc7936c1646c01b1c11c8560cee784992752fb8ffc396f3196ef6cce5bd3519f52494b7a717afbdd197351b65ef7b1c85617d80493b17c678389976b5d1846bf3bf476ee127a37f990c6ccd9f0f547f81671e21b88f0a5fac481b0c444e9280f643c87802e0ec38fa3e080f3e3381d215c1206c2e2030ee12108e1e1765787187b35d9aa43eb5175e888b03c8d12436c7894887d708d6dd0e23464a34bedf1128ee25cca4311ca656195e29956dc8db217dc740474b94d6b1c4d8b6457c7bd08e70a9b70b24e5065c37909c2b9d2269cd32389f33708e79136e12c8e24ce6f219cab6cc2c9bacc331bce2508e76a9b70b2ae4bcc86b316e12cb50927ebaad96c388f4338d770d73cb3dbf96295540df6de60ac792ee1025a8880ae0d631daea99ef67b08dd1e6c53faaa11bca338e10d16d9ce964c9e3acde88ef01617d4d5a8b3e3681ba132b6d8d9a0ae42508fb1112aa34b171bd4d108eab13642652ce1d9a00e4150d7d90895d15d810d6a7f04f5381ba1320e05b341ed85a0aeb7112aa3b3021bd46e08eaf161382b40d772baedbe42e856869d955860be2e12303770c29c2a52873c9227c1cc17890dbddc80246f0f96bce36162a7b852d93cd07dff8c169dcf56a0a148d868cf54c3282ed5db1b650e65f64ee962f4b8631b1d7d1959e9264eb4ee6691eea68fd54db92c1b30b625fd7a2260e5f62c34c9ba6c055bc23e11c1acb0096614d7e03e0fc1acb4096614d7e06e443037db04338a7e237b10cc2d36c18ce21adc5b11ccad36c18ce21adc550866954d30a3b888e47204f3049b6046710dee1508e6369b60323ad2b2c13c1fc1acb609661417feb900c1dc6eb7d3771417306f853a3b7670e2edaaf0ba6b2855cb6e0f577615e7c23f6c1b330a64973561af619c7d3f511417fe198c6cb2362cc7ef65b20b789ba78bb8c479ad4e7e31ca8edf8390adeee404da2d6d22af671cdc60cb1f11baba969ccf11fd7516fa2094f5614c6a853d7f0f9c49ad47227c0d762c9aef0eb7d54a8b7507d2582df3752eb4db5081d368d302bcac8d49364b6d8f70eeb20967612471ce403877db84736a2471ae4438f770e21c2952a7152e901e20e572df0cd7b17b85f37a858066e42a09d6dd3ba33a9c1a27dbc2d1bd5161b5d7a60909d322b9acdffd08e78936e164ddf2960de7a508e74936e19c1e499caf219c27db84b3389238bf87709e62134ed6b175369c87239ca7da84736a2471d6219ca7d984b3309238d7239ca787d5d7b95ad62a1b1dc97305ecd6b6564d38ac90130e43f14666abde1f8f809e11d65255079643f79f10c233edf1258ea2c74767d4d83c2bac8906bb642f27cc2276f7b4d60f457dfdaf4dc82ecf0e6316f181b417d12c04ef1c7bbdda19cb70b6f1ca3b10da73c3b0cbe9e1db255bdffb9308de7961c03b387c786c96f71282773e7ff1b2d5b028da6a8749b928570a6d964b5440ef65f46a8e9d11cc0becf5e860ec7367b3d37ea81a74a13dab2246d1217b3cb2d28bec180636ed9dce88966da195639095eeb369a08dd573932d3f1d83705e6c13cec248e25c8a705e6213cea991c4598b705e1a46cb3cbb4e8ec2487abc1f8d605e6613cc287abc1f87605e6e13cc28cef95d81605e6113cc28cef95d83605e6913cc28cef95d80605e6513cc28cef95d88605e6d13cc283631e72398d7d804338a23402508e6b536c18ce29cdfb908e67536c18ce29cdf7908e6f5363528594781d81a943d10ce1b6cc2c95a3d62c3390be1bcd1269cac6e5b6c38d7219c3785e116334d1c68db8fdd2412086f0e63e240e69ef7d40958731da17572663aeb54accbb97c8f36203bbd8513f25005b9da79080057aa991989f918c9d90076356404cb36236336027b6b18eb2868b07a5fcce461e374d5a928d64c2722bcb7b5e40867688bf39ec285f25d94cfdece8972b844b9c47968950406b3d477a9d713d6ba41edfa364fae22bb4ddd87c57cc1e79371e90ab6ba404704f80e7bfc3ba398ecff8350dec989b24f06943aa4acfe21c3b84afdcd28f7bccbee457e187b47d916f9294478efb6d7f79371b08ecdb3e9559401dc1346064095fb890c80311f65cb00fe8e30decbbd0cd54ad5a2d7fef14ba46542b28f5e59de0381bb2f0cfb2b68b2c10ad9207567b1477d7195a710c6fbb93b96015889fc708beef6b6940b661182f940185d77ee9cb6ed325943d173604dc7fa23c2f96018d5f58234adf66877e1fd04a17c288c5ed0a203ae17740b42f870181d74608d0b6495a7512ab1d479a55ce6992bc46ed9ef5927ea657db3368c64ce56044d43601fb1c7473e8a7e4a8b11ca47c3985354e4695446b92a548fe03d66d304ff699c5d1b6c13fc6f43381fb709675124719e83703e6113cee991c4f90ac2f9159b70164712e75710cefd36e1645d48920de70284f3499b70b2ae7cc8867307c2f9559b70b2facfb1e13c16e1fc5a18eb19c3a6f607ce7ac6f311bea76c72f062dd8f8d0de73034c6f3759b70b24e7561c3b918e1fc864d38a746126715c2f94d4e9c1da4804ab9b36f9d703de6a2e7acd50ee58d4f73e21a2bfc6ca90cdd708d5224de3a19a885e0c351c2053b1fc1fe564bbac384566167b3db9d28997f3bacc5f71609e8f0856ee12db287bd2ed2ddc03b91357ec71ee7ac28ce4a1f80acf1bb9c28fb0a702aa85463e2aefb2035b4cbb8090e5bb2ee806cf27b616c1206c9fa4018bafd1d02f77d7b1dafa2b8a4d4b508ed0fecd964716a245749f83182f98c4d30a338faf84b04f38736c18ce22a093f44307f6413cc28ae92f02304f3c736c18ce22a09df47309fb509661457497806c17cce2698519c94f26d04f32736c18ce22a09df41307f6a13cc28b6c87f85603e6f13cc28ae13f75b04f305bb274d31b689d8264d15a1dea317b97b8f32770b174b2743c6e2886da7f41310c897f8e7f32683747b8ea0a36387385c0e5ed4a6754588e2c6caad5146f0b23d9ec3516c6e4e46287f66938bcc34ce228acd321f43387f6e13cea248e2bc19e1fc854d388b2389f36708e72b36e1649d0acd86f36884f39736e164addeb3e13c0be1fc954d385957d566c3b919e1fc35274e38d133cca337acd61d617ad526ab9bc6d949cc6675b7239cbfb109675124715e8470fed6269cd32389f3d708e7ef6cc2591c499c5f45385fb309e79448e25c8870fede269cace3956c386b10ce3fd8849375917c369ceb10ced739710e11c9eb6902874601fdedde5534bd530518fb32d9dc5f63a8b3f88f9c58c778b06e12a99e71d9fbd031a266abea5720d47f0ac3597b8638d01643791a65027f0ec3bf535b6bbdb43fc802162a7895c651a3e8ae577c30b2ce37ecf1838fa2db575784f24d7bbd90190789d9f2d0c75106f056182bcd4cf1d86a9477af9e8de0fdc56e0706469f3a3607867c94ecdf0e6b193ebd6e9c298947bbacff29b2d67738718ef294f5d502cf6c336f04b148bd1cdaeaef712ecc79c86aff6a8f3343141dc496228b7d37cc2d1f20e1577866c41d784dd58f11def76c5a2280b5bb8f0d670794f0dfb709276bff141bce4310ce0f6cc2c9da7bca86b314e1fc9b4dbda7d338e7c8b1f59e3e8cf2cebfdb84b3289238af47383fb409e7f448e2fc0bc2f90f9b70164712e7f308e73f6dc2c9bad2171bce5508e7bf6cc2c93a5d9b0de74908e74736e1645d388d0d6705c2f9ef3056459cd2127da26c6df67710be8fc3e850860f6f9696a865ef508f440f5e0cc1fba4e5a76ce942267a836fdd516be7535b40467114f3536491ffb10524e360061bc8439145fed716908c1d196c20a721909fd9029271549d0de41204f2735b4032ceb96403b90881fc9f2d2019abde6c20d722905fd80292d1ab830de41108e497b680641c816403b909818469ea5680645c38850d64190219e304e9cf1b2e8aeb76b541285b71a2841676629d6c50b45e72d822578385d7a2e7b205e36b1a5e6b4e787af7bf842ba1d9f1a554f6f400dacd52d876de86e2055c60b723b06d38c18e145eef22d7612be1470c02dd2d3fd325fd282e8c361925fdb69c90bd73365ca0e0c205194189b1708aee023f1b11d67661144ed9b96c4571b5b931281b68cf8952bb6ae3723efb1c96112d5b0ebb1c59698730137f95a3c45ab46d13161e9abfe6295c58b722ac1db9ab531b645fd18133daf3204aee9d38e1e9f510b3abd64f89e4e29253912576b60966147d878b11cc2e36c18ce2f2fae310ccae36c18ce2f2fa1310cc6e36c18ce27a876311ccee36c18ce23ccb3882d9c3269851eca61b8960f6b409661497d71f8560f6b20966147b91862298bd6d8219c50e8f8310cc3e9c30fd4fa2622c82d8a6a9f44538fbda84b33092380f4338fbd9849375ff21369ce508677f4e9cda3718867b0f9c1dd3e78a04be019cf8fa0858c2b44c2d3305a276388f6f751eaf915dc4783fcbe8616c8b300ee4c4384c24d64570c77e3638ea423c964b1e30343c57c01469e86f2f73044002af1051debe7635823b88136e370977b3d0a3962b9cbfd738b22ba46d327aafb3f978f442e8068731f693db323d8ced1f36b7855b10da21dc3967ba725c879475ac67588c0963252abf877262cc3360f4b7600f63671cdb823d5310de83eccd0018c786d832809fa30c601827dae112ed62699fab040cec56aa92be428ad28e35db6404801d973b7fbbe2173ac74a476c4504cbfd4e08705e18392ce503325f5a2cf39a9ca3b872d87f218cc3c3e85bc275535dd14f54fda35d17ed87608e08c35911c3cc9c0544176c09023b9213ac5e3976aa38d0568ebd0e211c658fcf5c1447d7172194a339518ef08172b5f34d10d2e0344c6b85ee2ca9e72d96c670154b1f21c46338110f14c9be73b5b235bf35adcd46710ce94854d51f1b46c772f6cb49457107cc5b917dc66dc25914499c67239ce36cc2393d92387f81708eb709677124713e81704eb00927ab3b031bce3908e7449b704e8d24ce1310ce4936e12c8c24ce6310cec96134350be46ff7088375ab85db9e8f6e6b7d234298df92738743cb2bd986e86a50b5bdc09e69d85174e3ee83504e092b61bb2d7710b44725ea10fa90dee242f80d94b00bc3e8730784954d33daf5eda877c57d17619c1aeeb0db81be99c30084b6c8de11cd28eede7639423b2d8cfcb3f080eb831f8d101687e18e080b9586ee8ec8e6ae300ce19b1ec6586576431885911cc4b80bc19c6113cc28d62def46300fb6096614a7085e8d601e6213cc284e11bc13c13cd42698519c2278258239d32698519c2278158239cb2698511cdebd10c19c6d13cc284e11bc02c13ccc2698515c24e51e04738e4d30a3b848ca2308e65cbbfde119133e5b03b323ea229e1746ffe694267bad90dd72aed356d4a70d7e1359e97c9b4624a771e6a06c23928f229c2536e12c8a24ce1b11ce0536e19c1e499c7f453817da84b33892385f403817d98493751a161bcea310cec536e19c1a499c27239c4b6cc2c9da3662c35989701ece89532f655ae8a9d44779306d1b82774418b330c019a144c09214b59eade657cb964f951c684b5eaca23ed28e5c2310e2a536ad46c33a82ce86b31d6a5e2eb309276b9f271bcef108e7729b70b2fa11b3e15c8670aeb0a96c9fc639f0c656b63f80f2ce9536e12c8a24cecb10ce236dc2393d9238ff8070aeb20967712471fe00e15c6d134ed64525d9702e43384b6dc2c9ba0a221bce0684738d4d38595d6ad8706e4038d772e21c24120dcf35b231592e9b98b0ae478980857b606d8f524526848666a71813d23f23a44771221d27bcd3fda13d5fe1f0009f771dcec444036a0079aef3579d1cf364f593bf830bf80e54d93f9a13b8de27931a954f2eacd840b24dd01a8e2cf7185b404671a65b5f04f2585b404671e3fa3311c875b6808ce2c6f51311c8e36c0119c5fdd62f4620d773822cf094ee8de4242c7a2edc7ce789ed8e3e35f20c821a52597f3957597f3c2aeb8f0fc3032fdb7e52c6213bb65ed2d608e6069b6032ba33f22d8c8e606eb4096614fbefff8d72d9329b603256ebd9607e82606eb2092663458a0de67f11cc729b603256efd9607e866056d80493b166ca06f37304b3d2269851dc6ce77f08e6669b60324ecf6683f90582b9c526988cd3b3d9607e89606ee58449afcbbdd0f95da5faee4b1d012038faeb72af4560ab38c1ba5bdc2f751e708740f08ca316dbdb806d1e527b84f5047b56fd8ae262025d5013739bbd0b023196f76c0b02dd87acb4daeec9888cad26b64c6012b2dced9c787ba3426b972c94c093d9dd1b2ea4a988a770412c4336ba230cd7075cf253c5157b79cf669307219c3561e4a6a9493e9bfc348acbabf544c9bd368c329f1a6d4a2ef3a3b8b2c80464a53bc3a8eee752e633f6d7b3d9e83e04b6ce56b051dc2dee5c04b6de56b051dc87f33004b6c156b08cb55336b05310d8465bc1328e3cb1819d84c0eeb2156c142b588311d8ddb68265ec5d65037b0a02bbc756b08c63006c60f722b07b6d051bc59eab3508ec89b68265ec6d65035b8ac09ec409562f703d4db4c002d76cf84e45f84eb6a70f208acb0e1e81509e62d3e470d67574d806fa86a3dea9536dc2c9baf00b1bcec311ced36cc2c9ba2c111bceed1267fbb61ee10b5384cf978185e0968bc4122d93c52201aedeee222ee5cef952595a37888d4e725de7fcf31707eb9d7fa6eb31b90ecf02b147d4caab20af42cadeeedc05cdea45c118e791d3c124da299388cbdc7aaec3bcc17906f6f786afef15ab85bb04cd0ae7b7f62e689448e2727dc9c4a6eaf005d8667daba893214e5ea2261eeb2039b9fbec40b800605ce9aaf7de59a2ca892a27cc6552933ae79936f23bae09c5635dd1991e405a226b39a00544502cd653c509e8b34c86a5cc094399706732eab7f2c73a8fc58a9d5f6e7d6972534d69b272d0dfaecef4f5cc322146d24b3b03b0c7cc29b1bad96c2953885cf387f7374b87864a297549c690660e1f6d975dd2c44a3e6cd6734087ff4c887715edd24cfbc73a3b7fad7162de150e3b23d5397f8352f3e7753fbdedff03e0b3f109b3360300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/2e5c789119468cb4e86a11abdbe6a67d.asset.meta b/Assets/SerializedUdonPrograms/2e5c789119468cb4e86a11abdbe6a67d.asset.meta new file mode 100644 index 0000000..5817142 --- /dev/null +++ b/Assets/SerializedUdonPrograms/2e5c789119468cb4e86a11abdbe6a67d.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1174f898257a76b458969465d29a112f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/2f9470ad3bec463449d4e6ade3d92a6a.asset b/Assets/SerializedUdonPrograms/2f9470ad3bec463449d4e6ade3d92a6a.asset index a417d95..770e5f6 100644 --- a/Assets/SerializedUdonPrograms/2f9470ad3bec463449d4e6ade3d92a6a.asset +++ b/Assets/SerializedUdonPrograms/2f9470ad3bec463449d4e6ade3d92a6a.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c16c5f3f0f741426f2208026a5094202521a10b082434a5090151444a1202924024547befbdf7de7bc1865d51b1f7deb0f7eecf5ededbbddd3c739b9d2777cfdd3cd9e3ffc227b9dcdddedcce776767fb5e835ce6fc4bf4727ecd60535921ebc3a6b352b6942d71fe2a748e95ce7ff74c5d9fc29639c772e7f73ce75e2f965dc793fc5ff74447e7f778e7ac9a2d779e5cc14a9ce322717f1a2b73fe1eef3c5be69cf1ab0b9c9f322754a2a1f3d07456c426b349ac43a27d1d22668887aae5b504d72bd1c4f93d8aad71ee968948f197e48a5b1d9c5fd39c3bd5e25ea51369156e169b2dd4aa74ee9538cf2c63158eccf94262930da399f883b987aef2b89d3c663b3f4de5df9bc9bf9bc8bf61787e9d6bb7778ab0db83b04a6637e727cbf9f95d9eefe09e376827cf7774cf13ed3419cd808ceef298238f3de47127e7a791f3e72d3ee24f71afa78c7b9e16f7e63e993693c75e75844f25a3b93cf60e21a3859bb60d06f948db16e03d7d64da3661495be2c7eb4198ebe5b1a14cab5bb5eb59f2fa6ddaf546c8f5c6c8f526daf55c79bc01c4e506ed991be533b78373279e0dfb69326e92e1ee007186f2d4fdb5da7337cbeb77029de0733723cfdda23dd7587bee16e4b95bb5e79a68cfddaa3da7aef700e7fcfe5dae8e0dfe96d7f3dcf3867353d8879ffc922f8fb7cbf7dc0dcef9f13679fd1e70ced363bd7cff2ff27a813cdea1c9b923b59cac8e29e2d89f79fd525f8ded5acd56d64a9973dde7b2ce65493be7c73b65f87b3579776af2d679e535526933501e9f93e1ee93e703b478a9fb6bb5fb3dc07be17d95066fc9ebf783737e7c1579df20edbefe3e559e1468f7076be1de96f71fd0ce1f4c91362d359def92cf3c04ce1d768d7fa883dd903ad8a9fb51b153f23076ea3ec66e672d5c3aec94aeefb0a41f5436aa6cf25e29e76110565de7c72799d7f69f74653455369fa5c9bb5b867f049c43b9ef6af7df95c7f7401c15ebf7c1b5f7c0357e7c5eca79149cf3784d90e7cadfaa78dda7bd57a5938a97b287c7c039f437ea7debb5f755a5e0af64f700e7c0c7365169313420cbe10656bb806b23e57104b8a664df03ae411b68ea86c93d545e1b268feb40f87b4078750fdaeca880eca11e8a33d4a3d0a087927dbf418f0752e8f120087f3f08afee413d8ae4b1b126ff214d0fe583a01ea37deaa1643f6cd0e391147a3c0ac23f0cc2ab7b508f31f2d84493ff98a687b2f974f450b2d71bf4783c851e4f80f0eb4178750feaa1ea64ca17dd0dce9d3cd4b2a3166e03f396bf1b98371f2a39eb34391b91747f4ae3a5df7f5abbffb43c3ea3c5e3192d1ecfcafb4a6fbdeea9fba4a7c073f0fe13daf3ca57dd0dce1dfd5a8dd0c2bda0c5ef05791ca4c959e795d35aa5b96e572f6a1cf4fb2f69f75f92c797b578bcac717a05e1a4eeabb2f531100ff51cbcaf38e965e06bcc5b06bea6c97f9d25fdb6e97975ff49793e1609f786f69e37b4f7bca9e9a99e1bc79279e54d791ccf6af2566b55574fb76ebe9b3c6e645ebbd9288f1f306f9dfa0357b73673ddf7b739555e5765ef879a9c0feb90a3f2b9298e1399b76ebe2bf3e6918f98b77ef29194f9b7fbdce6ca56545a7cccbcb6b62bb80ee5adf3ca6b3b459eabfae51fcc5bdf9ba4c54bdd5fabddef01de0befab34f89379eb977fcae35fc8fb0669f7f5f7a9fae504edfe642ddcdfcc5bbf54e741eae69f306fddfc1397dd1627d6c16e8a264767a7ee47c54ec9c3d8a9fb18bbddb570e9b09b0a74e1c76296cce34a9fe9e09aca5b33584dbe2fe826af4d93c74f41f84fe5710f79fc4cc669033877d2a69deabf32c571a63caabaa38aebe7ccebc73f97c7bd0cef9f05ae8d94c7bdc13525fb0b704dbde7cba4ae790fcb6b7bcae35720fc1720bcba07d36bb63c36d2e47fade9f1b54f3d543d08eaa1647f63d0e3db147a7c07c27f03c2ab7b508f7de4b1b126ff7b4d8fef43e8a164ff60d0e3c7147afc04c2ff00c2ab7b508f39f2d84493ffb3a6c7cf21f450b27f31e8f1bf147afc0ac2ff02c2ab7b508f869adcdf98b77cff8d79fdd6efcc5bbeebcfabfbaa1e3157bb3fcfc0617e52978e4a5ebaf500f57ca93cfe23e3f3143877c2742c4d21ab441e952fff9779cbe77fa58c0b659c5fd5defd1ff396cf25e03a94b7ce2b6f2be5d7641993507dcecae79781eb406e623319ee69ed5cf9ee56f23a93d79f01e7fcbd6bbde158b93c2e90e19fd5ee2fd4dea3df5f24afabfe071fe56e4ddc3678e3d649950ffb6a2c17276da6f38bf2b856932d6d3691d064cbb4ea74a80c57a1c9ae4ccaee3613912dcbdd44034d7603295bf5092dd1642f4dcace6ea7c9c6d2bdcafb6e34fd9faf23fdd558c533e0bc21787f26d35fe5572dadc4b9a99db258beb311f3fa27653f8d598d5f49340661f9518daddc0ece1db9dbaa764896f68e66cce3c313cd34b9cdb5fb720c2b01c60d13ead842632ec7aababce9be776b55775169df4a4bfbfdc07518c7cd9937cfabf3075db9dbaa712a95f62db578b4940c54fd689997674d3ae8b6a9c74f3dd743bbbf56bbafeaa98bbdf715d39ae75b6be9af9edf4ebbafcbafd6ec43c957e9d08679ead5e21c72d3f559aedd57ef537524950e6d355b68abd9ca16ccdbae57f25768f795fc95de70625c19d6cb83e6d176c87d3d8fea7ab5d7f46aafe9b5a557af1ace5b7ae5d64a5f35fe29fb8fbb28ff8ef90155cf88c2872c9571e8c0cc3ea4234be6df8e202c3f6ec5bc3e642b576eb72e524696f68ece1abfce9adc2eda7d2927d109c4a1933c6ecdbc79776bf7dd5dbbb8efed2a6db5268f6eabd9f47ee03a8ce376cceb43d4b9f421dbabbaa3f221db68f1d8c68dc7f617ca70abbc3c511fa2c74f3dd743bbbf56bbaf7cc852ef7dc5b4e6f96c2dfdd5f3db69f775f9ca8774d0e4ab74e8cabc3ea4abc64dd767b9765ff7212a1db6d76c617bcd56ba31af0f51f25768f7751f22c3257660e17cc80ec87dcc8728bd76d4f4da51d3abbb57af1aceddbd726ba56f4790bebc1eb510d81bb50fa99471c861661fd28325f36f0f10961fd57c9fdbc1b9233767ae9491a5bda397c6af9726b7b776bfb73cf60471e8298f7d9837eff671dfbdc35cf7bd3ba8fe4c9547f3349bde0f5c87715463be4f6be7d287e4a83cab7c48ae168f5c371edd37ca70abbd3c511fa2c74f3dd743bbbf56bbafe253e9bdaf98d63cafc6ceefd29edf4ebbafcb573e244793afd2219f797d48bec64dd767b9765ff7212a1dfa69b6d04fb395fecceb4394fc15da7ddd87c87089012c9c0f1980dcc77c88d26ba0a6974a7fa5d720af5e359c0779e5d64adf1e207d793bef46606fe9fa10adef21319879fa1ec439cfef1b53c85ac33cf69f18c2bc3e63882ba3474737de3da678df9dd89979fb1ed680eb50de3a4d9e1abf547c876af65806ae43b9c39837ffab733f7dee98af55bac3b1dc86da7b77611eff2bc2aaebfc3842e336c29591abc6c5b33479a3343b1ba5c92dd4eecbfebac44810c7c69accd1da33a33599455edbadb19ba1499989222ff7c418f9cc0be0dcd1abe7086f7835f68d86af02f187cfedcfbcf954e547a5d3584da7b19a4e2afd1ff3ca6707c8f3719a7d1e288fcacf8df7da823857cff1a31a375907ce1d7d7a9de80d57d33fb39b0cff2238e747351e729b16bf095a3c5ff25e17e19a7a9f513a085da10f55baf500e7d0cef5e78b423e3f36e4f3c3423e3f3cd8f335ef7bae8ef08fd7f1be47d27c7e58c8e7c7867cbe28e4f323bdcfab3c5853c6293eb28ceba1e6b08729e3946f9ec492f940e5fdc952cedde0dcc99b7943b5709398c70724b471e5c414cdce4680ebfc3851de7f59933b5193ff92ab77dede5e3935efd1e4a8e7d92e9a9c57b4fbc380ee41e7aacfd238eecebce5d4ee92d9ef6edcfbaafaf65ef2fe542f3b252f315593b7ce2bafef42af1c3156944a07f5be622d4d8b5d79f90f6be16668693a43633d5db3b1bdc1757e9ca6a5a98a672eb80fce85de3cfcabe01ccadb43e3ba878cf73ddef035f19be9b53925a746ee9e5afcf702cfc1f8e9e15f75d3317fa3576f8f5ed006959cbad227958dc9f1f2041c7354ef83638eaa4e552cefedcdbc75aa59e03a3fced698ce7665f45363d7599abc39cceb9fe66872e76af7e7cae33c1047959ef393d7c47d758d1ff791721e05e73c5e674a198db4789568ef2dd1e255cabc7518355638437bdf7aed7d3a37c53f2bc928a1db9db263e9a30b26806779b86921ece0209926aacdabfa70cb98b70d5ee6c67f80b2cd83e5f505e0ddf2597618b027584f54f70f07cf9aee1f218f8720f78f94c74391fb47316f9d41f5ab961be27a34086392758c262b15cb63e5711bf09ee35cbe23528d25abe78f97c76dc1f3b23f36b1504b8f85323de4fcaf816d52c85772557ff26bdaf513e451f521bf2ecf4fd4e27e92f6dcc9acc67607a9756ba768614e4d8619acf2da695a98d393617813545c3b430b736632cc505557384b0b737632cc70352f2215ef9325cb7da5de6f80737eff1c79aefa1fde04e7fca8c6a99e01e74e9a0c5eed0dc7ce95e1d41a8af334f9159a7c39d69ca8d4e4576af255b82532dcdb5afc9678df5b135ef58dbfa38557d7dfd5c257c9ebef69e1d575b55621156b397732b14c63adc6bace97e7fb692c549f62b5c6a2da6531e4136fb81ad61f68ac95fce59a7cd5a65ca1c95fa1c957e156ca701bb5f8adf4beb726fc2a79fd432dbcbafe91167eb5bcfeb1165e5dffc407ebd3e533aa9dfe0638e7f72f90e76b3416aafd7e80c6e20097c5d06c6fb81ad66a8ece799afc0335f9aa4d729026ff204dbe0a77b00cf79916bf83bdefad09afca8bcfb5f0eabaaa83a462277d54e2308ddd61f2be1cc74a1caae976a83c1eaee976b8abdbb06fbce16ad87da9b153f28fd0e4cb323171a426ff484dbe0aa7cac0afb4f81de57d6f4df8a3e5f5afb5f0eaba2e5f958bdf6ae1d5f5efb4f0c7caebdf6be1d5f51fb4f0c7c9eb3f6ae1d5f59f7ca4e5d9f29913b4b454e5dd45f2fc788db52c4f12276aac4f74598f18e70d5793966a1edf799afc9334f9b21c4d9cacc93f5993afc29d22c3fda2c5ef14ef7b6bc29f2aafff4f0bafaeffaa853f4d5eff4d0bafaeffae853f5d5eff430bafaeffa9853f435eff4b0bafaeffad853f535eff470bafaeffab853f4b5eff4f0b2faff3e9569ef067cbeb092dbcbadec0876da97ad9395a1a9e23d390c795d79dae4d21eb62f9ccb92c59df93eb0d13e7816bdbc86be76bef3adf7dd7c84fbce16ac25f0d645cc2bcf55815f65219f622a9fb66e09c1f2f96d71b82733dcefa7baf01f72e43de7bb90c7badf65ec92b7161524642f944c024a1d6656e2ecf2f907254fbb23d781632bbd065366aae371cbba20e0e7a7cb88c53c1bbb98c4e485cdacaf00f7b6d87c979430d1ab9b652b8509377959606595a1ac8346da0c614ae04d7f9f152edb94bb570326d1a3401e7fc78b9bcaeb7412e07f185d7af006ca4ef4b5c09ae5de9ea5f78add453ad5b6867087b05b8c6dfa5f68fd85a5ebf8a79fb9aae72651775f3c6496fd33468eebebb68a8164eb6891ab490e7a9f27c7bef31715d32deec6ae6b57315f61a19f606cdaee4be0489eb99377fa97d1bc01c1f26b9f96a43cab62ebb4eca93fb3f346809ce9d778d5eeb0d279ed3dac609b5e7c333e0dcf06ce2e6dacfd6b4abaf6369b4abb31262feea3856c6e6b12a962b1c32ef0df1bb1d8e7ab2ee8d70c4dc5c514230be230e7fed72b6c679b4ccb41bcd74b1d7cd7256c0f28dbbd16c25e66eaab7178adff39c108b84d0560d6abde2de5aafe091ab70fe9781ad74aa9deb63c54e3c7c339d45ce9d3e6c8273e44fcd657dd92ce7bf57ca0ce7b5156c857356ecfcae12f2e63ad1ae1db22e95f8b63bfa33531d99eeae4095ce1505b4ca39af10319c267eaf14312d13b11fef5c5b2ef6285ac2cad928e7b85abcadb6eecb9cbf4def2c96c8cc71346f0e845d77b72052c954e468c3639f2bf2d2ff4f91fa4811314dbc95cc870d7385373cbe564afc7f86ae93e105fa7829a3af4096f05ccb67b9a2cc9f5a8b60701d6b6b68b66f97f700d62fa52e66323cb93b0b0d92297cd59e0f8cdbab79b39e595ed50a58aea87e74a943b55460b9bc1c310b39880a59590df3784475fc09137e51259b9641fc6eb845225cf00468240a3f6f028869eac5ce1fab9d9f0a27f048e772a9f07f856ca1136c89f07e15ac560ae571718d05e4da45685d11c5303730611635d7e27ab1726c43bad4a09bd46891049d2bea4e1d539823f62e51616a206b4d2ac3bc39b1dfc09df3065f96654e9766225dd2791b96329b9952a659a63340dd1e3f55ba34afd12b992efc9f99610bc4b6eb8a0346b0a18960f3fab16d1ef7f46c9b37317a6b0ccdfc5aa5b4c15431c0086699088a36ddf40c129cecc4705f594f4c8f616bdf0cdb08865bd5d2ce4f1c308a8d0c14f338c5cd4dd16aaa458bc70811dc1813dc36a4e02698e02d420a6e6a32a89699ce92fcde52218517b7c1cd89f7b0f4d4dd9ad99eda2379b2ee2860d6d4cc94361ce196c658e989d31e4f9ce698e40e6125b7c024770c2bb9a5c9a0c40cf7ccd7d2d32b23b9afe9e0bb8cecc45255b2839690ad4cf4b8b314138fe8e8d5ee3c527f8d729ee5b5e095a246bcc279ded4d9949a6867dfdebe8ba099cd4c5d60c16284116e6db27c8e7d6b2cd975e3ef841b7f1b93705e28f0e1805a0d0fa3f4c6b8f4cd4dc6215e99d91698dba8e17282672ede1fbd6d2dca87ee6236876c8635ae52c7014bfcb698dbeb1ad6ed6d8149de2eace47698e4edc34a6e6f92ccf34737537ed50577c1056f89e5b11d22c8631d301e3b86e5d11193dc3dace4ad4c395764e70ad29c3bddb9e6f6c98f16771789ae0cd8c5314dbad0129993ea7e62a2d8c97e85884deabc9ee3dbedf710f99ccfefa68e31e6193a99d29efbd69d3087a5277f369efc9d31c3ea19d6b0ba60d1ee658cb641788a686f6db25ae14297d493d52e11f2e731353c51282c61651d96a0ecd1bfe5f6f66db97d84e5e6a7b4dce8628d59ef369827cf0de9c9b73509e68e2bcf8fe01eb8e06cac88e81b4111d1d5249c37d3f259edeeafff9c7fb584b7c0856f87c5bcc010f3cd02c67c7bcc53f433788a44104fd10d63d2dfc0e45053b45330d901133ec020fcd480c277c4840f3408bf34a0f0ee261f272a738791fa38bf23fc63c5876eca3cdd5deabd4b85a7e0315243bc539de302110b7e5d9590a9df95da130eaae1033af245957434f33f4f815e0bbe9ebc997064663f3d44f869bbe28c79f31c93c1f376215f3550ab15c9bdf11cd9ddc0dfbf44dc9ae2bc81a7e67859ba046967f6c03cdc5083874b04f4703b99329c6889d0562aea4a765ef8ae100d49fef74a99bcc5e2ddc951bc3059892f95dcda50b289d2cd68b4c399aa5c6422f69839f6c4fcef2e06ffbb772298ffed851578230c055ea0aa716f4cf2c8b092fb60404699803408062417cb7c8586ccc70266be3c2ce645869817350c16f3be58cc474710f37c93db10fd0c8b48dd46aadab9b72488b6053286f96d818c154e825b3b5d5c31d750809554e34cd10f5004f53325b7e8f9c9e438279cc391de38e778dfc9b82b338f73fa8903963cfdb1ecbe9b21bbe76405cbee034cc279f809cc5065147d6be98de28aad091a32f75f1fe75fe3ac20239c034df1e435fc498678e6f1aa2ddfaba1814894292251faa4c85ba65a62f0dc554b9f21b83e834cfa7037bbbbc1cd3608e8660763199a0fded5aa7a4e10eea736806c768053d41ce41c5ddb2d7354e57f2f757e73e5398e6a595dcd16dd79cb9de27aa95381eecd9689f1d772e75eb6f3a36a325c625f217181c8b995e2392edb45cbefe73bf78738c702e7d83590b7198299f234938970532e0e67933b6398a79b30cf8d0473fa30b3d92ab650bad36c3925ae543ad76c3141b554f46ef1bbeef3554c7da6953bdcea80c93114735b330c6eab57b3606e6b98a96411fdf3991c9f1ee984e296be268d32650fdf65ca4c661e9b4efd76ac34196e4a164e6e4f5384f424998927c92ea624111df2991cd7d43d78b044d9cb77a2cc62e631cdbade8f25cb08133d31e2b07b06e9f999e06d26b7b76f72b305b9f6b5b44a39071aa136d264cc9c1adfc0a4a9169db1a65274366ed0a3300736c7e0c07e09e8c00ab198cf35c4bc71c0981761319f6788f9fdcd83c57c3456eacd37957acc14f514a5c6182cea2586a81fd92258d4c762c24b0dc237b60e267c9c4938afd1f16672d886f3784cf8820884ef8a092f8f40f86e26e1bc305b68f218bae0b1b8e00926c1dcb216f9119cc204276256b2afc14ad6b7096625934cc279f8c50ca9a48afd56d2afa44ec630559ab22b8f5ed04a2a2f8c6c6c0f4cc1502fc1502f0d877a770c759509f5fcc850c7a74d3015cb5afb19b2d69b5b04cb5ad34cc2b91b5b16811b2bc6845747207c3ae6239787f49133308b5c11d247ee81e15869c0611c9b4f8163266625ab4c0eb85d302bd9d3249cb77f56fb4192a2fdb31726784d48c1b330d6fb47607a7b9b84f37ae8017e629da20e3a1b4bc4030d897862fb6089b80f26fc2083f0e22d83099f83093fd820bc4b8760c2e762c20f3108ff22a0f07998a51c1a81a5ccc7841f1681f0124cf8e111082f3509e7e18ff063e3b370c16526c1dc6b1ec90c053eefc20e5ae02f978577791ab5aa6045f3024c97a34cbaf01bd99eb706795739f6aea34defe29df9739cff79ce4f49ad41307e876f5bb14c900d128b85582c8e31c5a22d8845a5acfccc13ecd38fc1222c06c79a62d00cc4608e53022f134313c1caed7d31f7739cc9b7750ae67e169b84f34c7c7c0499b8028bf9098698af0e18f34a2ce6274610f32558cc4f32c4fcd580315f8ac5fce408625e85d9e72926fbe4330766495f36dbf10db3a41f1a221b1deeb599e2d89b0d777e8f063eab4408aa70fe2a75ae5539d7160affb25a74629689aba5017dda7e58fc4f35c59f0fe7246334cab9512d3cabd26988d467b66160c6f5d97a03aa5284a896e3be6e53ccd5af9ab91db26bc49341745a66d2891bc8693537b456add8e8ae3173fff571ff056bd85663467686c1c81a0634b2e598f0330dc2b3020a5f81093fcb20bc5140e12b31f33adb645edd7c650fb75d9eeb1cfbc96b6e563980f597610738c72006b30a33987330833937b4c1acc6de791ef6cef343bf730d96d41744e009f73709e7e1f9ee7a61aa900760a42ec24889fdf5b220a9609c0ec4385d1201a7834cc279597729ab5dd60ded1facac3bd8249ccf01b9ccc48a571bf91e80723e7180b9198760f9fa0a53bee69311e73815fa256c8c73913bf7e9a0df2c484e3dd4f45e3ec478a541bf5cb16828bd99465731f71302e29fc17a76c5e37818c6e66a139bf62c59654d3615c68b429217ede9579d0fc7e2718d291eb0f2ee2da4d38fc111580cae35c5a09d91c424d91c4c3f164762b1b8ce148bd62016fc6de58e61a4ffeea3b0775f8fe713d57c99aa55a082bcf768ecbd3798dedb06bc97bfcdcd97e96b7d0cf6f61b4d6f6fe5d19a8fcc2f6723e5d67c2b03fa87634d6fe649cab7ba0cb33eec389360eeb56f66b5bdf685038279ede34dc2f972875bfcc43ac5e2b3130c8273c56ac715b5bc62fd2dc74d2e1384131ca25ca0cb3f8caeaf484848e76e9e82c13f1197233ede98795db0a91c27623678bbc106670e0c66832761c2ef30083f30a0f09331035f1bd2c04fc1627da721d697068cf5a958acef0a19ebd3b058df6d88f5fa80b13e1d8bf53d21637d0616eb7b0db1fe2260accfc462bd2e64accfc2627d9f21d62d06058bf5d958acef0f19eb734c82f998d303cc508fe70eeb41e1b006f97258e34487f942364574e0543bb572eee4dd5a463aee2ac098d7b926c578bde7211672b1d27926c9bce9f3b00919af6c3ec2d4f4f747595d4b4b8ae54842355b20ca944ae2c9efe76306f0186600eb850e037d19c004e767557d24ff05985a8f636a3d21d41ae24bad22595be6f0d51e041954ee424cb92731e53608e5faf9526eb453bf58e81c33a8d04598424f610a3d2d141ae04ba142a1ce32e73ca32678b14929de02e2bbe287dd00e5129370de5ee1dbe5d76af9f06defe6d474a3cf604bc58d4a535991a2cd7329f6cee74cef84ad6cf3bbf975eebc820d585e86c5e279532c9a7a349f28866c83697d39f6be174cef6b6bd45abd373d8dafc062f0a229063c77cc4bb3557ba5e94ddc645f3298ec39c327ef1cc464afc284bf6c103e73f03d238208bf1a63f48a8911dffcb35ca4c39c9a9ec2209caec1def6aae96d9b039bd0df9a9e455c6b7a3faf6bbec66ad735371605ab6b5e6712ce6b4efceb8ea16a4ed79b24f35e19fe7dadb0dddd3760c2df8c40f88d1893b7c232b9c9203957ec3ec487f06d5886ad7aaea35b8acd3f37e96f810affd0644e82afe0a78d2fd61372b329ddf930c0bb261502f4dddf82097e2fa4e05b31c1ef87147c1b96053e089b056ec7246f0c2bf90e4cf2876125afc5247f1456f29d981ffb38023f761716ed4fc246fb6e9364eec73ef56377efe082ef3109e6c5d7677e04a7187cbd1703fd7904a0d76138be0889e33e2c7f7f19327fdf8f71fe2a24e7074c8239e7af23e0fc2086e39b90381ec2047f1b52f0c318e7ef42727e04e3fc7d049c1fc570fc1012c76398e01f430a5e8f71fe2924e7c731ce3f47c0f9090cc72f21713c6912cc3d3fffd66b28cfbf01e3f16b043c9ec278fc1692c7d398e0df430a7e06c3f14704389ec584ff1981f0e74cc2792bf42f3f485234579fc76cefefb0b6f702c6e39f0878bc8899c8bf214de4254cf07f2105bf8ce1e083d06171bc82094f4420fc55ccf6f8b796c3d8de6b58ac378b20d6af63c21b4620fc0d4c785604c2dfc484378a40f85b06e1b962e363bee621f37d1a516c2995ba47a3b11f2b9d82137b1b33ff2621cdff1d2c9d9b4690ceef9a84f3b5b2cdfcc43ac55ad9f74c0694cd2f2ea81703a2339ce62652c6aeb01609de15c6377ba58825d601f6be2989794ab4f493c43cce88e00f4c82799da05522649d602326b97558c91f6292db8495fc112679f3b0923fc61c40db081cc02758b4b7081bed4fb168b78b20da9f61d16e1f36da9f9b24f36e9f2dfd649714dd3e5f9804f3d66c073f8253b466bfc440778c00f457188ead42e2f8da2498d7a03bf9119ca206fd0dc6b97348cedf629cbb44c0f93b0cc7d621717c8f09de26a4e01f30cedb86e4fc23c6393b02ce3f6138ba86c4f1332678bb90827fc1386f1f92f3ff30cedd22e0fc2b86638790387ec362bd6304b1fe1d13de3d02e17f9884bb9fca0ed742f8d3249837d67a846cd3fc85c578a79031fe1b13dc33a4e07f4c8279bda057d87ac1bf98e4de6125ff87195d9f088c8e771b19a39d1b36da094c725e58c90d30c97dc34adecc24999b537e48bb6b88092e0829380b63d12f2c8b4626c9dcecfa4760768d31e1032210de046332302c93a626c97c4dd8203fc998624d583393605e8d1e1cb21adddc249877e00c09d981d30283bc7358c82d31c943c34a6e85e5c2612173616bcc9c874760ce6d4cc279f1bd4bc8e27b730cc7889038da9a04f3caddc89095bb2db0188f0a19e37698e0c29082db63288a42a2d8128bf1e89031ee80d9f298086cb923267c6c04c2b7c21cc7b8b08ea313e6f7c787f4fb9d31bfbf6b48bfdf05f3fbbb85f4fb5b6390278485bc0d26796258c9db62796552c8bc928d99f3e408ccb92be6f7a784f4fbdb6138760f89637bccd94d0de9ecba61319e1632c63b60828b430ade1143313d248aee588c67848c710e66cb7b4460cb3d30e1332310be13e638f60ceb387a627e7faf907ebf17e6f76785f4fbbd31bfbf7748bfdf07833c3b2ce45c4cf23e6125e76179654ec8bcd21733e7b91198733ee6f7e785f4fb05188ef92171f4c39c5d494867d71f8b7169c8180fc0049785143c1043b120248a41588ccb43c6783096fd1686cd7e4330c98bc24ade19cb7ffb4690ff8662a41787243d0c135c1152f0700c4765043876c1842f8940f808cc44968635919158d15d15b2e81e8515ddfb852cba0bb1a27b59c8a2bb08b3bbea9076371a7376cb433abb319859ac086b1663b128af0c19e571583659154136198f095f1d81f05d31d86bc2c2de0d8bf6fe11447b8249381ff73ec04f4aa618f79e6812ccb77e3cd08fe0149f969884e13828021c93b1543c386c2a4ec1a27d4804d1de1d8bf6a161a33d158bf66111447b1a66238787b491628cc71161794cc7781c19018f1998f0a32210be07c6e4e8b04c6662d13e268268ef89093f3602e17b61c28f8b40f82c4cf8f11108df1b137e4204c26763a672625853d907937c5258c973b00ae5c9212b9473b10ae529212b94f34c82b39dd353fd084e31657c3e26f8b490824bb06adfe921ab7da558ddfa8c9075eb32ccdece0c6b6f0b30b3382ba4599463513e3b6c94176292cf092b799141726e57e734c1bf94509fdbda46bbb362ea352ae7fa49f907718afb9a286ec7292eaa178ae1b7584ccdeb3c3fbc1ec5792dc6ecf9fcb0f65c6192ccedf98290495c8945f9c2b0515e8249be28ace4a526c9bce57771c2b43f9f4178362ebc0a137e4904c2f73365a8ed7986aaae67b714e57e9fa933d9a57e2c763dce70992981b853ba2c64eeadc60cf6f2b006bbdc249927fb152159acc0a27c65d828afc4245f1556f22a2c835d1d41065b8d09bf2602e16b4cb9b71bcfbd2beb39f746bfad6dea3c7cad1fbb7d0227b93f9687af0b99870fc0ccf6fab0667ba049324ffc1b42b238088bf28d61a37c3026f9a6b0920fc1b2d9cd1164b3434dd96c079ecdaaea399b45b3c172eaac758b1f73da80d33b0ccb5ab786cc5a8763d6745b586b3ac2249927f8ed21591c8945f98eb0513e0a93bc36ace4a3b1ac75670459eb184cf85d11083f16137e7704c28fc384df1381f0e34d1e6747ee7196d5b3c7896e07f4d45ee75e3f39ed699ce00998d75917d2eb9c8865b4fbc266b4934c9279a2df1f92c5c958941f081be55330c90f86957c2a96bd1e8a207b9d86097f3802e1a763c21f8940f81998f04723107e2626fcb108849f85095f1f81f0b331e18f4720fc1cccc89f086be4e762d17e3282689f87457b43d8689f8f497e2aace40b30204f4700e4422cdacf848df64526c97cf4f0593f9e3bc577642fc6783c17018f4b30e1cf4720fc524cf80b1108bf0c13fe6204c22fc784bf1481f02b4cc2f9571d5ef6632929bebe752566dcaf8435eeab30c9af86957cb549329f3af99a1f1829a64e5e83097e3da4e06bb18cfe46c88c7e1d16e33743c6f87acc9adf8ac09a6fc070bc1d12c78d98cdbd13d6e66ec224bf1b56f2cd98e4f7c24abec524990fe9bf9f307c23e644713ad569494d77da5abc95e7b6082bc5dfe3455b91b7d816b079b24538be26e4e89a6f18f32ff9f2bbee977f96392d33f5a55bfe95e542d1fe5b2ee4269f29728e158ed435ceb1d4691dba5fe12d935f2386ed3cf8396bef1d377e058e86735268c1db97fccb4fd5e0edc5a205ac647aa5f26f452d72e4049918712b46fd031375fefd30b31e231d4d97092a2ec312e6768beb71849a637792b28268721ba6c946932683344de05e90e175314b0ba2cded98361f9ab41989a68babc15256e5fc9e20acb4dab121f73be2a9f4f1a727ef57592afa39b8bc20fadd81e9f79149bf710cdbc5b3f6e76cd24bbde0d28368bb16d3f66393b6c302d8a6fb556ebf29092545e13deec4f4fac44f9e83fe317c9e334b0ba2cd5d98369f9ab4d9c5579e1be9102d1596e50e0f86cf73c93b4174bb1bd3ed33936e436a4ad7694e79b75bcd77f9a60b3d2aa43e6e3f2b8fdf78e72ff7716e41a9bc61741ee41e4ca3cf4d1a0dd752cbfb5e9862dc13cc73ac670d9be4dc2d77fec6d2ce2b233acdeec534fbc2a4d90e9a667a4e525fd09b203c58b9f3f7c2886c6a1d16cf2f4df1dccd577e192bfac5e7c9da9b2aa9263b7f8f66fb3982b8b8fa2cb7eec374fecaa433befb34cc13de745a22eb93a9fc5b9018df8fc5f86b538c87062869bdf12e67b5378dc74b56d316f341b47a00d3ea1b935685294a1e578b317266e33c838fc2ebf1e69239aa947b10d3f15b938efdd194e32d96f94e20a52b9f7456ee845826c6c76a97b151d7121ec2f4f8cea44751083f519f9ee1614ccbef4d5ae6f96e498dadb38617852f7f048bfd0fa6d8e707a8a1068d7fba1ee1514c831f4d1a4c0be0995d8b4b963fee33b86ff3e61f3f61a2b2c1c730063ff949c554f5f1a0a998aecf5b8f69f0b31f5f51dbafe369e7cfc37bef44954e8f635afe62d272942f8f38cd093c5fc4567dcdba3edb1b4f601afecf4f8b379525066bf1a64abf74cab22731bd7e35e9b5b36f2f1f4c2b3cb5d2d16903a6d36fe9f735d595e33259323f85e9f7bb1f9f12a43cc06b51f4ede1a7312dfff0d31aa3a811fbd73addd2e2194ce73f31cb0d56e68f172d9e0a31ab6c114bd59ea149d36731fdfe32e957c668c74496b329a2c5502ec73c66887e9245ceeff942bb74ad24bc077b0ee3f4b789d374624ef8d8516a42e1393c8f71f8c7c461663dfb006aeff00246e35f138d313eeb92e3457eb7ab3ef922a6e97f264d47fb2ac1278a19acbc1ea93c20de139aa95ae54b989eac818f5e1fbdce552834ad9d7ab027c7cff5686b632f633a264c3aeab5b1da3a26fb49783c79386e5d25067f5decfc5d25aefbd32ebd51965730fd1a98f41b5a877e6eb9947cc07f2d2cda547b15d36a339356b322b64c2cff050d1f2d93d730260d4d4c06a2b5b3e4ccfa69cecf0a47236ebddedee76a8797eb9fb8c051c28b2e318c454d93be577cc331802eaf63ba64997429494b17b78f05d61c0a458895d2ae83484c3e99ccd5b88425625649d2bf279f0ec2e80d8c512313a32128a3ba461adc3e0eb81f01ae5bedbd0b8268f426a6516393463b06d648a5b87e97df2b0e14d3b7b0983631c574ac0ffb4cb563861bfb6a991e3cceaa0d503bc7a51e254dc7afbc8de9dad4a4ebce91e85a9e86ae41747a07d3a99949a75191ea54e23cc3fdcd02e7ff18515fd84fbc86d7124c75dbf43ce8bb9886cd4d1a4e8ad442d3d7300a7b7d0fd3bc8549f3d191a6ed4219b24a86e4add66ae169542d70f7c852f87d4ccf96263d778f3485c3ea19453a7f80e9dfcaa4ff181ffae3db83d4af07de8869da3a5849ef5f536afffb21a6511bacd515954699f1be1f61fa6d6ed26f6284b659bfbef7634cefb6588f4154e95a21c265c2ef7e82e9b88549c7c911a66d381da348df4f31dddb99741fef43f7ba3675a95fcffb19a66f7b93bec322d397daff7e8ee9b5a549afa2c8f52a3584e63326791bb8f68cc37473ea1798961d4c5a4e89dc5ad3d7320adbfd12d3be63babed8b4334cfde6cfaf301db74ab7cf0bd7913a4f7e8de9d2c9a4cbe0487429656562a4618d539aa8fea8a872df37983e9dd36d87d56d7f41f589c206bfc5f4ec62d2b35f64e956c1ccb35fd34badef302db636693122b2d4aa5b8b28d2e87b4cbb6d4cdae1737b83a5115fd530d1b9bf3ab254fa01d363db74db4d7e52c99f1e51a4d38f987ed974e9b44a1ca34da79f303dbad2a5935f3da248a79f31fdb64bd7b7637b40d56ffde2174ccfedd32d9353eb495dc7f81fa64f37933e0322d327faf2ea574c931dd2edc1f76781992bb37ec334dc913eadaa9869dd5aba69f53ba64977fab4aa5b9328d2ea0f4cc39c74db217ed32afa3ac69f982e3dd26d37fa4dadccd533fec274dc29dd7a86bff45a26e7064595567f637af44cb79ee12fadfce811453afd83e9d7cba4dfa0c8d209d6a5fa46965aff62daf44eb7d7cd5f6af9d7268a34fb0fd3b24fe6d2ccb4422abd34e3531d8ddae4662ecd526b13459a25302df33297660591a559034c9bbe994bb3d4da4491669b615ae69bb4dc8bd1cdc277e7558559ad80cf220d42a42146a400eb89836f2d14baba7aa91963c56c69ca744b3d8f3e3debcdc2b4e8878db1616f4d777eb95763bf369caebe8d307dfba73bc6567baea7caa12b45bb99eff2455f77698ce935c0a4573eaad74491520b9d9ce9ea32daf12e5581629f6eca34c1341888cdb0f16389fe56ce66d6069b629a0e0ad6d6d6d3aa50f415f0d9a679016b5ee96ad20cd3643036df3ffddc5429e69ad48e7bf4fd70cd31ad8698b45a929656eeda06baf9e0c167834741ae05466ee7745bf3b83da4b32a200a1d5b623a0ef55362e27b53f9597ba6dbbaff7ce0a717b7b1f33f9168eefc395ad4bf780fc91441889f55b3dceece2db1bb895bb7eb535367ebe3a9df25aff318543afe97bfb9b8a676c6bf99905ac2b006eec202f1af7b8227c37269da89051a51f7c90a2139e9e1f9ee6563854594899a5f89733e81b93324d4b722ead2c2544fed036aaa50bbba75525f8be07b7e9688fa3d4fe5f98e2d35961a29590ee91c4e7a53d374384fd5d632551be4f2bda0133dd3b4a6ba63b10b7fdb66661bea508b2c6c2198e2ee0a98c4dc9dad127cc3eb3900db1291697966e122c74ba756e75b618ddef4d6de4280f2ea758a9bce928bbc4ce2b612a6e66e5bb88cb91b861625186b9cd5208fa7c6084a64ad05b2394edd84ff1e251e2cf5f8f738e0ba754012d7484a5c5d3cb8744b9beebca554768b8e132ebd94b91fcba976948903c829dd922047d909b26f2c406ee89c04594809b29d07a45b81851f469a2790960b7871005705b27251e63c1faff1f22894cb323a2eb8dab449e21a4d89aba5c03599f1c9aef3c4b02acca4714035a528896a0c25aa2d9c13d5bbad573e16c976c4fe8ccfea8803b60da02a3296125b236161fcf179a2fb350e70baf54fc21967677959100b902db29320c753826c2b404260e66e8d3840db7b4412daae94d05a192b196e6b77654c60fd02dcff6ed4150be5fee3ebf68f046e7f0225aee6c2b6468b3e9315e2f5716aa8f37e378569227dfd4b65c1a931acaa2e6fc85135ced284eb6346e9f7a705e38bf7fcf10cec8eb0b9abb6ca448f88a727906f336f5dcc27c19ebc9c14192bc7674f598e0f5f9613a0ba9b538715e7f86894e584ea3a08f37441a8a7f39da7f51a6e4ea0d6bb4ec7d45997e3bb7e9353478b2ea7ce423f3930611e50c8e3031393ff8f8f19e4f13183291c02ffda1affe79615bb539615dbca94ab7002f145a6f399fb3199190c4e7dc087e3f2f41875a91523efd7c155b9618a5b534fc992ed47dd744a9773417d652a25dc6d245c77fc6d8900ec770faa396c001ddab154681700b4d328d17634a04d3598dab776e3363a9ceda9707e06aa8cc536e1cc8f25cead80754eb70967412c71ee0a70ceb00967bf58e25c0c70ee6113cefeb1c4097b2566da8473402c71de0870ee99099ce52850187d5eb21356945a50e1dc0794ec7bd984333f96384f01386751e2ec504766f7b68ef263d93eba1c64f5bd6d82596b3e470c605e0f60cea684b9651d30bd3eb33f1dca4e54283f06997c1f5b5016c412e59ec02ae7d882323f9628fb0294732951b697280732bee3875a63375e74ec96c955f055a2bb983f103f9095207bcfcbc40409bc4a847d3a96b0006a43857508c03a3f53b3e4b81596cb354c19b0c95954f0f607f04a28e1b501f0166d32597a16c0575a9fc50c14479a8d1b53a17c15a02ccbc4049ebe321b2fcb9415cea442b71740b780121d3f59200748e3d752e904309567621e7a891cb4d53ffea43425cda8b3a93016028c0b2931660969eebae8c5312c1cb604a016656a4ae2a6e1d1860374fbd66fb91af7c9004b41f36d717da2f46e0e428892acb27c114059918902a4afa725ac6e67287393d5f42680cc5d99098bc4ca616fa599d022c950e600944bec98e953fb9b77a4681fa542bb2fc8ec4ba9277d2ff4cc901c293a176aad928d415f4c13608f55f5012d8e1d588d01b4fdead71fc6bdb2733140b98c12251fe8f5eeef92dca7860c5b1f2a6c5b036cd599e899f6d38d05fba549474e76a5c23a1a1421cb6dc44a3a4c4a86f57b60ad2b28b1f662deb9e33c020b3c1b5ed6bd0d96e94305a4be750315f6238035afb469be19e90429b2f9660ce05c65134ed20952643877023857db84b32096388b01ce3536e1ec174b9cd500e7fe36e1ec1f4b9c27039c0750e2e4ed5935e0b51773172f91e1ea4285ab3da8301d68cf7cc7beb16c629e066cef209b60c671f2e8e900e6c136c124ec7c238379068079884d3009978390c13c13c03cd42698fd6208f32c00f3309b6012767f90c13c1bc03cdc2698843549329817039847d80473600c615e02601e6913cc41318479298079944d3007c710e66500e6d1b62c0721ad6592cd6a7b9d25511e630bca8258a29c0aacf2585b50e6c712e57fc02a8fb3736d0d61c59d6c6ac23280f5787bd6371016416453b5b60099fd04eaa909dea931856ca9a44186ad1515b686c0024fa4c4d687851fecc5be8b483ae0fb3415fa9380c59e64cf24ec3856e68f03284fce4465deef6e18849e946c2f8c22e0124eb10926a16592c11c05609e6a134cc2ae3932987007e4d36c824958f72483d907c03cdd2698845d73643087029867d804338e9b31f50730cfb40926e1103019cc1d00ccb36c824958652783d90dc03cdb26988443c064307b0298e7d80493b0838e0ce68e00e6b99980892d72d167c0116673b2f96fdb0398e7d90493b0002283792e8079be1ddb42106670b26d21ce01182fc8c414d73ce131537d8f638eecc623ecf724b3ca5e00e7859438b762de7ecf452cb939133e7219bf11a2bd4017dc45b601252c84c8807e0a2cf462ea49d8de018dea180ea565015c976462a9befbad1a751c23edd0fb2d9ef10ceec446ec2bc92c711a407ba93d1b4a10f660928d52ee0e505e46ff7d7a778b936a96fc1653863637e94105f06400f0f2cc0ef356635f0b8c4175a705c076851d1b99f05173fd934584dd18649f2cea0d2a3e57dab4133fe9c200b28e8ca9c052afb20927e9278bc8701e07705e4d89b3b3ef8cefdda88c126a8208ea7c90e5afb1112a650f2615d47900eab53642a51cfda182fa3ec8fed7d908957214880aea7b00eaf594509b392715ce6dbe3f2bfca066fcea9f6d01b21bec99e84a383a4ed6846c08fce48df53938e14549ba3e8d0ce6e1c02e6fb20926e12418329847009837db0493707a1619cc4300cc5b6c8219c76eb7c300cc5b6d824958512783b91f80799b4d30099b926430570298b7db04338edb352f0230efb009661c3f18530560aeb50926e13200329847029877da04338e4bfd8e0230efcac417f306b04df38b794b01c8bb33f56937253543f0c826648d00f0eeb167f95e1c373639167469dc9b890cdd7f13cdd08b814daecbc4327d35098b77ecae020ba137ada958d3817dde4789b5a5c4ea2e8eae00de7291131d32705954e018b0c7fb333ded6086c3a3d08976a9a80aa9e32827389fd7b1922d92d3624887cbc8361dbd0ed8e40399f8fa99d92609a70a36a342d70058e583367e3780748f18b2ef06ec082cf2211bb19276b791617d0958ebc3f539fb32fecbf7ba02948fd83b0b8e102dd92cb87701da476dda819db4f38d6cbcfc2380f3319b70e6c712670b5034adb70967412c718e00381fb70967bf58e22c07389fb00967ff58e23c18e07cd2269c036289f34a8073834d13b249e77590d541678292fd299b70e6c712e78900e7d3b6ecf14a3a7d8bac97f35b80f2195b50e6c712e52ec0673e6be776b9849365c8d6f84e0116fa1c25d67c167eb3d222e7378f007fc972716549e6362d7d822a090e0496fd7c262c1b6e4331c509ce058e679bda7614bd8165bf60cffcf838cea8fb03a07c3113536df8126bef4ae14d6740793e80f9923d931ce2f8f9b055c073be5c9f2833b654701615ca1b00ca572851f6d0ea010b02d500369d6f531f0a80bf4a09bc0d28f5b99079425086bc2859e97e1df0a2afd93b0d82b0778a6c1ac435c0325fb7676f9a38aeebd81958e91b99a838c1aafde89ad9787012597cf74cca0630dfb463a8b958f84f6ebb0b84b84a5a3b7d940aedfe20cbbf95c99de64a7c4c6f8ce3c79d7200d0b76d034ad80425033a09007dc736a0719c80db08007dd736a071dcadb30300fa1e25507e52e968cf1f8f5fc5bd1d28c5dfcff4f6297e7af1098b1bb25efc8701d40f6c841ac7a191f500ea461ba112163b6450ef01503fb4112a61d14306f57e00f5231ba112ee634306f50700f5631ba1128ee29341fd0540fdc446a871fce4ed1700eaa7364225dcdf860cea3700ea67364225dcb3810cea04d046fabc7ebb96e33ef67915b0cf2f6c9a924bba010659b3340b58e69736e1cc8f25cec100e75736e12c8825ce7d00ceaf6dc2d92f96380f0038bfb10967ff58e23c1fe0fc3613a39cfe66da91cebe271b322e0530bfb309661cc7df870298dfdb04338eb3408701983fd804338efb2a0e00307fb409661cf7551c0460fe64e33619a44b6ec8b6c92801587fb6112be9a23032ac3fb324d65f28b16e6bc06a9ec734563e92b1efc84ca182db15d8ecff6c864b589d2283db06c0fdd566b884851819dc3f815bf8cd66b884d52d32b86f01b8bfdb0c97b0c94a06371fb8853fec9898cb673ceb7b40118e4291ed013517a0fd937a9bcce4f6ad45ce71bec3a29c4d701e29a70347b688a115c8f07fd9d4c547bac5065917df3f00e7df36e124ede423c3b935c8d6ffd884b320963827039cffda84b35f2c7156029cffd984b37f2c711e0570b2cd2cc2392096386f0238139438b737e0f45bdb84bd5484437aef50419e032037880364c2d95064904701c89bc5013261b70a19e4bb591272c3384026ec5e21837c13809c1507c8845ddb64903f07901bc5013261173719e4750072e3384026ecd52283dc0c147c4de20099b09e4c06f92b60c94de30099702c970c722f60c9cde2009970251619e4ce0072734ac8c136a425740a648bd4df044ea1852d28493b1dc950ce0456d9d21694a4dde1743bfb0094ad285136774ee63377ff8952e761779bae1246b891420f2a68db82acdc9a125afa1b22c771d9ef6a80b54d264a74b52f0a0fcc1faf627cb0daff1673844d59b2d1d99120c36f1e07c871fc9c614f00b96d1c20c771b3c44e00f21671804cd8bd4806b92980dcce96aa16e93a57b2aad6ff40f1d6de1694a46b5cc9508e0756b96526509630f362f68c4dcf24db7dba145865074a946d254a6e75de0de633b42132d94cc1e90061c7faccd8501ca935922d277a0ea0dc8a12659e56a6a7f34d9471ceef72c796a7384279e433b633fa8354f82b805fed4489bf9173b252cc8859212e90a1caa642b539b0d4ce99f09bb53fcc1177bfb91b40d8851261bb3a4a71a52969a69d4d857124c0b875fd163fae2877671fc2262559a6ae02fe6f1b4a94b95af113ec531c9be6c7b8d600f8dbd6a71d676c411b59a5fe5a80323b138513fff841a5289ce6898f2064ac7022ebf8381678d5ae9408b30dd658970380c327a4999d6c08e50a60a1dbd5ef100a1498a1d980640bdc0f0556bb3d25d6f6126b3fe727b9786d3cdb543e1557024076a304d933544da0507c926b99739ec1e6e7d354d08f074e6187faecd6f376a410ce8e22eb485900ec77474a946a939bbc5acdd34dc7198c0730bb53c26ce29c2c9259be484e2323c345b64ca819c09553bfd938ee0dd22b01ca1ed415f995cecd6ae7366c684e643333335987cc1a3b02843b5122545b24a892bcccf811386c202e8e1f32ba1ea0ed99894a7cd02a3ce99c3cb24afc40500dea652356d209b86458bf03d6da3b138b81f126e7746d3a0361d1d4820ae75880b38f4d3849375224c3b904e0ccb569a93ae94e7f64a57e02f8d03c9b7092ee474986b30fc0d9d7269c05b1c4b907c0996f13ce7eb1c4b902e02cb00967ff58e23c05e0ec4789b33babdd7ef74ea7e52da74ae73fff9bf780ae1022939fd72e16d43230e3693815ec9d40b9df9f12367fb577882e7e8372db0058036c99424b5a7d276bbbbf06500eb40565412c514e01fe72902d28495b4164287f075639d8ce957571fca2de2a8075883d339409778e221b58db1c64f69d2951b666c981b53251a7acccd4401ad9bca45d801d0eb567aa22e112986c2a94a7023b1c46897273969ce951ed997794115b249b817426b0c5e199286ad4b81047565e737b535bc15104ec72174aac5d0d599c4762b9b0d0256c57d158ac4ad9554c0898aca3783360b723ec992413c70fbe4d062847da348441bac095cc32f7053847d9849374912b19ceb300cec24c4c5ca87b06b2db1de7fdb603e1fe0c642b8fba8042aac8ce1176428b251b616f0bb08ecec4ece302b669ce3e9e07b2fe189b3c695fcaec4ee64927029c636dc249fa6957329c07019ce328716ee19ccc332e7a291602ab9cc7e609e1f16b7e6e05208ea784d899e9d3127931e30ad9d41a9f9b810268d74c14400aeaa294e343f12b80de01d6b99b2d20e33845f6060072822d2009f7ad2303d91164ed89b680242cbdc94036062027d9029270508d0ce4700072b22d20e3b8076d0f00728a2d200937502503390b80dcdd9e615ec2cc4d5693fc1b94db53a997fc5538b74bd862a79dba82b635433665700b806b5a265a33413bd4e2d89df614805a6c2354c2f91b64509f0050a7db0895b0724e06f53e0075868d50092bea64506f0550f7b0112a61c70619d45b00d49936428de3ae333703a87bda089570150619d4c700d4bd6c844ad8422283fa28803acb46a8846d2532a80f01a87bdb08358eabd51f0450675342f5bf392aa16d926d8e7a21c0b84f26ba44f0a1dfb80f651c0850ceb167f23661e6cea6427908e8a89b4b89927f75ab44eecbc5a76c55d4dc8a5f975c1b607ff332b9910f2f4656b1192cb95d792a7b24ccda64f67801b0c7f99468f99c946a5625666d2c727e57b051021b9fb8153f6c5d80459650efcee5dd5c6fba23b9544e7e99c0dc397015312c545a0284a594083b69999a7bc355b296e8cdce19eae2984985741ac8cc6576cc1b2e164079ed72811057495b6e3f4a85f6048076813d6b2f080737c84af38520e397db38059b74013559b3717b60a10b6dc44aba5b0219d61781b52ea25ef59b9cf23a413cb898c57b07ce0e00debe366dcf433a9b9d0ce72700e7629b7092ce6627c3d91278cc0a9b7016c412e71880b3d2269cfd62897321c0b9c4269cfd6389f3708073a94d3807c412e7550067954d0bab48372d255b58350794ecfbd9849374d352329ca7019ccb6cd997ab6f2c67167f095056db82b2209628f7063e73b92d28f36389726780724526f6e272bf12cc412ad94b623b9c9600597aa59d5bed110ea5916db53700605d9589c52cfe0a9df865ee7b01c8d5b6808ce3bc8d3b01c835b6808ce312d44700c8fd6d0119c725a80f009007d802328e4b5037009007da02328e4b501f07200fb20524619b9b0ce4b300e4c1b6808c63dbe61900f2105b40124e342003f9320079a82d2009574e92817c01803c8c126423c6c7c04b84ee7c5e5bfcfac53b035487dbb3109fb0ae48d64df13640794426fac4f3c46f757423339ab9fbafab3d2fd54ec3f19b1c380ce03cd28e652584a533d9b2928b00c6a3ec590b41d8aacea642b91a74e21e4d89726b8972395be8dce6a36dfe27ab12f6fb904d563d0fd8e83194607b33efd4ea054ea00a216c190a39f98de971ceef722749a638e2c40412cfd384e01fa402bf0858f4b194e0d5a719788d7253fa34c3a9c0728fb3679a35612f3a59f569304079bcbd8b0108d192f9d765209b9f4089b65728ff3ac1f9599579efba9e0afb7e00fb8994d83bd459f5f23a87387ecdaa00c03cc92698715cd2d21fc03cd92698842d2c3298dd01cc536c8249d82b4f06330fc03cd5269871fc6a503700f3349b60c6719fcd1d00ccd36d8219c7bed26d01cc336c8249d82f4506733b00f34c9b60c6f1c30ced00ccb36c8219c736fd9600e6d936aef1259d4d4cb6c6772cc07a8e8d58492bf264587f6249ace7dad10355c86a7fc68eb0264af619bb4260b1e7d9b49a8db42e4a366aff2fb0d4f36dc2991f4b9cdb00ebbcc0269c05b1c4b93bc079a14d38fbc512e71280f3229b70f68f25ce1301ce8b6dc2392096386f06382fb1659120693b9e6cdae21ba054bfd4169405b144390358e565b6a0cc8f25cad600e5e5d45b47aae98cde2d2433344b84acf5930f32f615762e60251c2b225bc07a00c07aa52d999c74749d2c93ff08505e650bcafc58a21c07fce5d59958c5c1516d8a9f96df15d8e4359900d9771305390e80bc9612642ed3b723e79b50782772fd5f9b04b61cb883eb32d1a9ace0cf1708cb6a3ed598baf1498896ace9791e407b7d261cc4e04dd44114030771831d4b6d085b4a644b6dce07186fccc46cfafe6cd39a4d7f360078933db3e9e33829b10ca0bcd9a60dfa486785906dd03706e0bcc5269c05b1c4792dc079ab4d38f36389b302e0bc8d1227d7804f46a896d51f5e912f929313e2577f6c0eb0dd6e4ba707a97f24ab41be0250de610b4a52df48867237d0aa596b0b4a52bf4886f237609577dab3b9451cd765b402567957269a88799eb6b6ba9da1160edd2a3660917767a237a8ae2d04c6ca07e0b810696fd0142ab40301da7b323171db5fe391748631999d5e0160de6b13cc38faceab01cc7536c18ce39ab6cb00ccfb6c8219c7356d970398f7db04338e6bda2e01301fb009661cd7b45d0a603e6813cc38ae693b1ac07cc82698715cd3760c80f9b04d30e3b8abc73500e623f6ec4e475865cf26b34bd0427f9412656766da7e72aa10b654b4d8379d4d28f704f6f91825d4d6002aefde28176df68c747690ada7ec07e0ada7b7c8d135bd4585624cdcb5bdc502e328b14def622992cf2ae21fa12f8d619f666b00f5f14c4c32c8dbc426191c0f003e61e3e269d20a3b5d6607c5cf933662255d134486f56b60ad1b6c1a29279de74e36523e17e07cca269ca4d577329c67009c4f53e2ecc16ab785ea9a490c3f455f28fe5a09a8910e72dc4605fc0400fc994c0cc37917176c2ac3703300c667eddde983b07b846cad5b73500f78cea6e5d5a4136bc8e6287d082cf5799b7092f68492e16c02acf3059b7092ce5522c33904e07cd1269cfd6289b30ce07cc9269cfd6389f32080f3659b700e8825ce0b01ce57ec6ce113b6a1c85af8bf8212fe559b9aa4a45ba391354967039cafd9849374860819ce9300ced733b1c6121bedf45a66fcfaed7b00906fd802328e93bab70320dfb405641c37f6190440be650bc8387e243c17807cdb169071fc48783500f98e2d20e3f891f03d00c8776d0119c78f84af0020dfb305641c3f12be1c807cdfce2dd0088b1eb22dd02601ac1f646232a2df2e0ec296385907c70700e6469b60127e628c0ce64600f3439b60c6b1ebed4600f3239b6012b6c4c960de06607e6c134cc202880ce6ed00e62736c1246c9193c1bc03c0fcd42698846d2032986b01cccf6c8219c75ddeef02303fb70926615b880ce69300e61736c1246ca193c17c1ec0fcd29e3d3ee2b8b4fa2f80f2ab4c2c76e11bee2aa9199a5248b6f9e3de00ded799989989f51415d70025b441328c17008cdfd8b32090b0cccea642793498aff16d26fa2ebd5bf6f0086f1adbe3f60536f91d25c84eccbb85339f09bc4af6517aad13f65b12766890adab9c086cf3fb4c4fc09ee1f02874a25d2a3ca83a8e7282f3cf8eac647cf1c00a46bce178172ab45703b43f6422db0fda44b3fd1a90ed7fcc44518495e8de9a651c77f3180d50fe4489726ba66f7be63fb313f6659265f68301d89f6d051b472fda1d80fdc58e1542c5c2937207b14088aba475068f52a13d0c1450ffcbc40af602b669ad603f1dd8e6aff6144c71dc7fa61ca0fc8d12654be7c4fb51bbe47615d5319c78d00880fbdda6b515a48b00c87a311b009ff8874d3849d7a593e1cc0538ffb40967412c71ce0638ffb20967bf58e25c0970fe6d13cefeb1c4790ec0f90f254e7eb24856cde387a92928b1ffb571f91ee98a72b2e57bed81f5fd672356d27d0fc8b03e2dacb57196267c4c2de185c283711f5622e2efb654fab0b1a2725d26909438e71344b7c57236d70132cbf91f2c2d663bff4dd713622c73345bcdaac4552eaf54c8ae74eef29855b3bc9db839386a346a2e4d2327c1ff2a910d021ecb8a9a74ce49f0aaf54af1ec0a79a59973a5c2b9c277b09be1b9d304dc511f7acc11c82a6bce7898058e74de2bbb1773f717c9496409accbe4be7839428f79e02b9c9cc56206f7d0c949b415315bc6f8178792fbec14396f9ea985dcc2230dde2b16c4ab1c09f3406c55fc78922744c39d335ce23c3191f19d23f9dd79e258ecfccc17e99ddbd3099618e0fc72bba2fad47442f591bba954ca3375bd6e993c8d534be3d16d9430e7f18ac8acb32e8ddc0cc59f5f2052b04c481d5fa7a675eb875b7a8b14a992db8ba7c5a6ac7f039eee32d9859976109978ba93f2a5d294273b814b45a4f8bfacff078595aae408b50300 serializedProgramBytesString: - serializedSignature: 131837eb073f509f8c63b7ea5e38bee44bc60cce9fdf631b23753eee5d8862c39c573f5bbc04dfb1787d2bc603a486e53e2d850074aaa8cc335c9d993309c505 + serializedSignature: 857bbd365d0ee283b0a5c67b1b1b062581a4d05953a09f5251a95a758e8e70ab0d08830d9a5688e043f3a6b2f5284b1dfd057795cb88b55e74634ccba6051904 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/3053cc98f03a13041a10e0650d9b6e24.asset b/Assets/SerializedUdonPrograms/3053cc98f03a13041a10e0650d9b6e24.asset index 5a7fc19..c1cc708 100644 --- a/Assets/SerializedUdonPrograms/3053cc98f03a13041a10e0650d9b6e24.asset +++ b/Assets/SerializedUdonPrograms/3053cc98f03a13041a10e0650d9b6e24.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5a5f6f1b45109f737cb6e338b4a5405a28100aa8416d739756e28107a4366921a24da23ac94b851227be44063bb662178a105f80cfc017e18d473e1452f8cddc5eb377b79b8b939c4b426de5cefb6f767ebf99d99dddb6e0113ece1d3cd6e919cdd32cad5193bab4875ff37877f00d4b51fd0aede3bd8b67036d77683a63247f6e39d7f05c44a94f038c7c41db78b7a4bd4e017e2f626c8012d7eee02f402fa788416bb440cbb44453cebb1922d665505fd5398ccba9e0f9907e416b204af1249e344de151474b5fda3a503aeaf79cbe17581db46d63cc3eb521734b2456fee6b182297a5189ebb5b2a3feb87e5c2b339a3f12fd5cad0f69fd786c5595c7b47a7e1754fb44a25c53f2fe52f565831e25bdefc1c1c13fae232c7f0bdc0dea91c7c29c2f8670876864b623889e0505f4964c3b00e53d083058634d6c3da0fb74cf688deb4e4dd37b5e9e0df46889509e2c31c59fa92958b936be81e64a7dd47f239ec8ced442cb2c3dc19b476dd21c9ce37942ca3aa66dc31d035ac5b327f236a176ba67162476bbe4986790194645073511a13d94dba2615d9e3f89a68168bf88ba81c4e81ea2f421de2f65b634f67dfc36cdb9aa2833eb680e0e5b7d18829199168086b5f7c4a7df58e4755884a92f4daa302c7ab2aafc9eb2c41b0ec345c6954d279431172ed1b1ba7be471d1a9a7181c1e631aa1d9bf97a1d90f2a468e4263e6860d7e57301cdad88d83ba4f1e6f12ce8d0c504751caf2660ceb7a96f2ae5bf459c524f58e897ad9e25647483db775454a037d87279f69bd9d203fcdbe5f52dbf78ce44dc3aa60a3b060a0d07755f6927289f184525cb2081e33d9a632eab008fbb5a4dff0961997a424ce81c3cbe40a0a0d0c61b5a665df99a65fc9a7df2c76ab5a1c3f4b3d9bd58a36ab4d9cd26aaec96a92286ee66ab5284bac231df80e6d0df40f64cbe17a9dee0732c36166191f71b43d6bc759e6c4609362b0cfb49cf7b49ad94c59b299f2ad539ab26c12cc0178c9e4d5572d5ebd07ea0602a9213ed94ceb50b5eb50b1e970d9a4c3d7afe88e53b7447c94fb598cf8a38a9659dac077575a3690fb75e1642c48c7c03d4cf26ca61b06d9b80dd91513b2af2cc8d6247cda724069a92061ad17f1eb9071aed11d5adf2e936df19d601844551ba2b74d88beb420b2711bb75753bcaba77a2dc9ad4190c2a2af8ec32099b021b96af33adbaca1d68fc5f33a1892e65bef7d7c2b9d1459cd86ec1d13329ff8aa644f1d7f1fc96c2d39332de06f0b9d22844fe4f666183f5bc708fb6a50c6d771d80e8f648bd8c7c81519c1a53e79e26c3e1dff4a81e7ee401ff6ed5540dc121fcfbe60e00b22db05c34e6a4b3be959330b45781ae2f13b7221119d5f4ce8b231d9cfd56585289205a625182e1ad2f7d8aad1fd58c193b0b87d426fcad682f3b6d298d98786cfe94201d19ae7f0febf21c31be832c8969f7558ba2b02a263d819dca9b1533d00314dc9a1faf8f287433c21fcf19979d9c992f8743c5c9215e825d4eb0ab9014024e28333bdff9ce6d774ff9e49f9c8e1f26a5e167d5e5eafffcf573e9ff9799f49a8440b85cf0bc507794673552cb5a122e5053af1d6e927e739cd25ca782cbecbc701719218977f2d7043ca6ee449d984a2aca3266e4896982b696e5ea41534d23e7c1da4cd9d43d24a1a691fe5495a4d91d652ff60c827a4edbc7d6d322fda5c8db68f47b1a6c58f3a395256cd8bb2b246d9f42828ebc64e50e77145238db24ff2a4aca228e30c6717549d4fba8a1a5d3747e1613bb1bb89f318946374610e133e2ff69f52f8df2954e870a67e4561e1ede62905b2f534c5640d2d6bf7f8c657bb583bde31f66899d92935df71bf3a6a246cd03e331b9cc531c184f4344786da1156f1d8d8171affe749379d92a4720d960f8507b48cce4d518a3feebf8d048bf718260000 serializedProgramBytesString: - serializedSignature: dc37097e81476201330c30fabd241bdc5a8ede935b80d11eebb160525c24f82b6159fe26333a38bf19d9a8a6a116eed002d7a1b061347958cfb7f62fa4892406 + serializedSignature: 65b061db76297496860e26123537bafd62412ca01b4d60944576e1716c79238ff80256b83bc706ae9ec0b9a53987cf7bd48d4892034fbab232f4db312f085508 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/325baefe0e659934e9903e4b8235c861.asset b/Assets/SerializedUdonPrograms/325baefe0e659934e9903e4b8235c861.asset index e6a634f..f13e666 100644 --- a/Assets/SerializedUdonPrograms/325baefe0e659934e9903e4b8235c861.asset +++ b/Assets/SerializedUdonPrograms/325baefe0e659934e9903e4b8235c861.asset @@ -12,9 +12,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} m_Name: 325baefe0e659934e9903e4b8235c861 m_EditorClassIdentifier: - serializedProgramCompressedBytes: 1f8b080000000000000aec7d059c1447f376ef2d6ec125d811ec20010e97900497040b169240b03be090e37277589424c48d28c421ee21eeee4edc9db8bbbc916f7aa66bb7a6b76b77667b7a99e1fbc30f667b7ae6e9aaa7ababbd27af07b3fec476b3fe9bce26b3e1ac3b9bc68ad872566afd1a6e5d97597f9d10dc9fc4caadeb42ebffb956dc6e2c3fc39bfc4fe75873ebffb156a882555a6fae60f3ad6b891d3f85155bbfc75aef165b217e7781f5afd87a2a56c57a691a1bc126b209ac59ac490688e9f64b15e25e8ceb15ab61fd3f8cadb1628b6da178223deca866d67f53ac980a3b6e9925343c77209b65abb5cc8a9b6fbd53ce965a98f36cc41a032e67f60fe65cfa886b5f71ed6dfdab297ec7c5ef1ae2377e9edfe7dacd4cf36c3ff42c60f6b7fe55b5fefd21c2039c708d11223cd009c71a4b18b510c62071dd5d5c078beb1ed6bf6a56f2ff79903f5d5c7de71a7bcdc1abc250d80ac4463832e6bd299edf535c878aeb5e48d661e23a44dcb3de3b749db8375c5c4709fcb7447a3114e6d7b7c5fd3c14e6d777c4fd380af3774726d33a57e8c280dffa4836d0f30d49cf371c3df33689e7464bcfbf2b9eaf82c2fcfa9eb85f553c3f16dde7d7f7457c3514e6cf8d49ca7bc8d912b77b8beb3e0a6ec13654dc8e1369bc2ed2ac8ec23cbe81b85f4384c78bf80f107e0371ef43f16c4df40cdcc7fcd572f35765a9240bbc07f95c5bcae78f245e3f12d737c5fd3a286c3d137fced139feaa73ad02793c417a1fec2786c2fcf72485ae1f23db598fee21f92d6fe6e0d595ee0f46611e5f4fc8d74ac4efeb4ecbf25e89b436823f988c9e9164635325be7792f8fec69d9781e631e4412d14b6d2ac3647c281f73e11cfd747617edd86d2067d3e4ddeb3e3e11ebf7e26701aa0304f770091eee752ba9f8be7a68beb3411df508adf4fca3b397e86b8dfc85b9e731760c7efef84874e92f2b2ad9b6f7680b8b666a9fe09b86712f77fbb9f4bd44507ba7548c4cf72ebc01a3938d5f34518ea9c7a488683c4b589b8ce66099b5d0b76956d3d33c7c1a90e3604feac36f356070b5bb49a31e99f4f87217c90d53ac81ea38ec3638d45699eed879e8574e63bfa33e0b1b7c8df2f92cfd8bf630ebe9d778da5fb55c5fd26d2fd6ac4fdeac4fd1aeefb095ff12592e54bf73bb1af98db277ce5c859ab48c2f89ab9fd5055090fe2eb4aef7d23ee37453ae1f7be21defb567aafbaf4deb7c47bdf49efd590defbcefd1edc4ff8802f99cb07d4dc4dc41739e15aeb3dd852bab805229d1f443acd50985fbf17f79ba330cf8f5f9cf46b7710380b45fc8f12ce8fe9716a8f4923630973b7638b256e7f926ce52781b95ec8f614b2731eff3373fbc762741fe3b570e3d511f507b429f36a33779b6cb15bae447c5d297e304a17c78b3cc86bc65c6d953cc1615e4322bd2552bc9c1eb495164af1cbdccfe53517f13b4be19669f246b6f35fc43bad50d8d2a35e7e06ee4a337007f1417107781477104f71b7dcfd5c56dc81ae2d58d26f57916cf27781d31a3d0bf779187c742d14b63076029baf2ae1fdcadc6d985fddb8793bbbe3f3409f964846e0ba55f25e5e4b748f5feb089c3628cce53a4c605493e4fa5392eb4f492eb087b6288cfc4d22bd7c29bd4d34ff800d366587918fad07beb1cc1f97ac3c952b5681eead10d74a740feaaddfd03d6c03a25dd4778b883b58c4fd917cde7e17d9861d876d76a53fee5d7a2c54e8b14aa107d4a37f29f4f85f1a3dfe467afc859e8738acc76a71ad2ee1ff23e9f18f428f351ef5807afd5f851effd17af06184841effa2e7210eeb7188b8d670e3e7c5dc7ad8e16cf510d87979a97ae4419950e95125f97c5e1e7a1ee2b01ea26d9af045cd50d87ab6d118e939683fd644615c0e01a7851ba731f435a47ccf837627155fc31d9f079cd494e4a829c9514bc4b773cb9f5247b54572c07b387e17497ff055cd5098eb57263d5757920ff85e22e1b470e33481feab6c57f5249ee4f89d249ec418405e7d490e781f7882b10099278887bab52d9203dec3f1c0935407e63562ee3ab09184df9825fdb6ea7d886f2fee1f4a3cd7444aa789944e53494f6887f23aad267a86df3b9c25ca565368ab67db363f5260b791ec06ead6d6ccd5a6b6c3966e4d45fbb7e9430267ad886f2be1b4cd80b32d8d8c473177dbfc08e62e23f9ccdd3ec977309bede6bcd70cfa73d05e6be7b635c0cb6b27e1b570e33517ba25da97fd99bbbd77b42417c4d795e207a374713ce4c100e66e5f8ab2963790486f89142fa707edcbb552fc31eee7f2063177fb12c23edae679bb3057dbdc0e5b7ab4b82f0377eb587aee203e28ee008fe20ee229ee8e753f971577c7b9ed8f9dc092f5a7d0879d88ee81fd9dc412e57ea0188364c78b74db279fcf035f24c6e6f23a08993aa0b0c5d3ce73d2c878b2b8026f50563a32b71fef28e24f55a47f1ad201daa5a7a37b023baf13ba07e9744eeada4f8c13b053445c014aab137a1ee2707ec1d8453509bf8ba447178f7a403b08eb21b0f3ba2af4d8358d1ebba1b4baa2e7210eeb7186b85697f0bb497a74d3d003da18dd157af448a347214aab3b7a1ee2b01e678a6b0d09bfa7a4474f0d3da00dd64ba107cc93aaf4e883d2ea859e8738ac471509b72f73d7ef302f0bf57b3fe6aedfe5f7211e743ccb1dcfce56f0704e5297365eeafa7471208ff02b79bb0b79764261eb993667a7c13a575cc1970f66eefa79b0c010f35f6dabb8d3ce13f3c089faf95c741fe3b570e3b5853928a8638631b7cfdf80ee63dca1e2b98e52187c37b425f714f7190af374b7b99f63e789eb46f17c4329fe7c291d39fe02711fdaa05eea5d90ad835bb67ca81f2e94f2e6a2a4cdf02a9a5fdb6d93b0c166f792b0f712d8d09fbb58c2be2489ddf504021beadd2112f61007bb9d982b659b24eccd49ec4e23246c2adf2f75a74de67f27292ce7ff7029ff870b59b747fe437995f28a417f4eeea75c24d21cc15cfe29613fb0e6007ec3b3fc3a8ab9cbef2807b793341f9248630c73fbf03112ee58297eacb88e463288350b797b4b9cefeda4ddbe86936efb3952de8f93f2fe32741fcb0873e01da5704b07b7e38752deef23c9b18f2347c713c47397bbf94ce443dd0cf2c17b83a5f8ba52fc12243f8a074e13ef8f97f21fde5f2ac5cbf85748f601f8900f1398bb5d3d41e24dd6e74a291ed283f617e4c324c9162649b6b22f73f5eb13f85749f1807fb5fbb9bcc9ccd52ef75d462713f1721995f59a22e93545d26baa5baf04cf53ddb829f93b12e52ff7dde0df293fd08e05e743360b19600d82ec43a6b364f99d8e9ee5d7fd98db87ece7e076857259554a637f89bffd25dc03a478e8e3cc4032cc1057584fc050d80a741ee7a4db196c0aca28ac33907dc82c49c639cced43202c7c485798af041f32539263a6234797e7c473d7b8f9247d882c1fbc37588aaf2bc5830fd9ec8e074e13ef1f24e53fbcbf548a97f1c1874c93f0211f6633b70f992df126eb73a5142ffb10c887b9922dcc956c651e73fb10c0bf4a8a977d88782e6f3ed3f321f38978ca87805e45925e45925e303f093e648674bf91fbf944fe4e47f9cbdb511b91bd99f6219708191630b50f59c892e577217a965f1731b70f59e4e07687be7d55298dc5127f8b25dc25523cb4494b900c25e2ba94b9cbee5227ed5dc5f8e7aeb00e05ca68a964d397a1fb58c68399db874058f890ee30ce0d3e649924c732c1018c975febe693f421b27cf0de6029beae140f3ee412773c709a787fb994fff0fe52295ec6071fb240c2877c28636e1f5226f126eb73a5142ffb10c88772c916ca255ba9606e1f02f85749f1b20f11cfe555323d1f5249c4533e04f45a21e9b542d26ba55baf04cf2bddb829f90b6b15840fe9fa2eb2b76c7d883cf6b08ab9c71e5639cff4a89f06eb3ae6f627ab99db67ac1618631cb97bac75a79db786b9c71eae43f7315e0b09ef17e62e5f8748f6b801ddc7b8873277f987b0973177cad782ee68ce28c12da47b3873f9dfbcc3d07d7e85f1f55a286c61f4ad646e5f0b786b253b5b2be11e25c51f25ae472219ab4b98c748ef1c23611eedb6dd84dd1c92c4cc3b1adde3d775e29dce286ce9d5b3ccfd3ccc7d93cf6f42f2e3f7ae67ee720ae511743a56d2e9584927c8ffb66e7c7683081f27d9e78dccede78e77db42def1e83d7e3d41b2df131c7d7adde77e2e313e73a278be0085f9f52471bf8924df49929c5ddcf7ede76abadf011d6c5db10f05dd06a330b673f9fda335df3f56f3fd4335df3fccdffb89f41a6578be5d86f4ea67f9fea19aef1fabf9fed19aef1fe97e1fca60a28e037e441d5728ca80561d07bef914962c07d0d63855e0344361ab6cf65b2a3d770a73f980bc5324b94f93ecac12dde7d793457c5709f76409bf8ba377bf53dc388974241c78df5e2f84717695e20f46bafb5dab7e9ac4e3e9cc5d4f9dee70d6bfc091bdff1cf1fca9227ebd9b3bc0cb5b2fe1b590f036ba7118ce3f95bc90de99529e9ee9e00df8417aee6c294f617e05b83e4bb2b1d3d17d7e3d43ca5390733c8a47610636b21b73f30078e748bc9e23e4fec2fd7c42be73dd36073809dc0d92fca7a2f7b07cf2f3620dc74028e3a72bf4c236083899f2279d8dc158d2468401e99dc752db54620c38ef7ce66e539d87eef32bb4d56ba1b085b1bb580b936853011e8cf5d647618c7bb1142fe661f22e4132427dbd29792fef12748f5f2f14386d50d8926bd06302a39a24d76629ddcd925c9732771b06e65f4e92d2cb97d2fb41c201feab263982b884dd9dc75c3e7ae061e85dfedcf11a76007db59b3430b620ac7418f03cb4fb6fd648f31684e5254dd8df77ab469ab7212c2f698a3a81ddae91e61d08cb4b9ae0ebeed448f32e84e5254d588771b7469af7202c2f698ab517ec5e8d34ef43585ed214eb3cd8fd1a693e80b0bca45928ae0f6aa4f910c2f29226ac47795823cd4710969734c51a14f6a8469a8f212c2f69e68bebe31a69b613d727343060bdee931a187c9f0aaf5b07787816d60bf33921dc1e83f9c4cbc47dd86b0aed822b907c706f0bba07b8574ab85bd07d7ebd86b9db083c6cd58dc34f9070e0bd9b99bb2ebe595c6f4169c3b808f2ef79b7a07bfc7a0373b7016e70d21d56e670377c0e91feed52fab78be79e16e13b447c3714e6d7dbc47d58277619bacfaf5789f81e288cb9bd89b9dbe937099ef2ddf22670af90d26defbe9f684f5cc1dcedd82d52fc16e66a6f0cbd5ac28175918ddde9b38e12be181761cfb8e3d9b32cd1e6b9f00f09b3504aabb3b85f43ba0f6337606b0528cce30bdcef25f21438afc9dc9c77926c1ec6f0af26ca82caeeaf25ec1ec6c709bbdf7bb58403efdd29d9dd9dc1dafdc8454e1eec3dc98d9fd1aeaf73db7522df61fcef2eb75ddbdc62bd20bebd94ee73cc3d1e0ff79f17e17b2479449b21ef6e71bf270af3f75e60ee72d40b852dfd4783bf79515c61fff71d49fb1c0cfbf73b23d971dec0dc0dcc8540198231d2d6288ce3e5712ef97d88171cb1ad441edd2b7172afb8de27e5d14be83ebfde2fe2aba1307f6e4c527738e724611fc0ebcb22fc80c4eb03c29ee11c8557245eef4a62ef0163d1a0cfab22fca0a4cf83e2fa10b27928eb8f209b7fc8497b0cc80abef0e1649a63608fc478290ee7ebc3e2faa8943f8fa0fbaafc97f5784cd243b44df2505bc3fe6dc93c16fad860af4f24651e0bfde697a538f8cdaf4f8ab460fdeed5e83ebf3e25d922ec69055b7b5a6d8b89f7211e6cf135c2169f9174167e3fef59b72da670f59cf49e582b92f73ccaf3d71116c4f1eb0bcc3db7f482073bce50df8dd824e2df10d7379dfb83a15f24ea7fdb7fd744bfb9edc399406f093bc7fd31d53b3cee1e542e609de5dbeebc48c80a754c6b291eeac3eba4f86bd17dec970a50189709a82b5aa1308fbf2f29e39e620d0683b39c807bf059355118cb7e93847d93887f0061c33aa174edd7f7249d5f14b81d50d8ca8b7130a6fba1b8c2594ee8fca0f1b057f023717d97a56f8343daa0d35629edad4edae361cdd72752da9f227c389fe6b3a43cdc44ed7bdb3cc85315a533d5e3f31d8838ccefc7924dbcc4dced9697848e570b4ce017ece065b71d005edecb125e0b37de04f075a0cb4719f2a2b384ff0a73b79744fd93f72a4b6d2fbd96bc97f72abac7af701e570314e6f2dde5c6cd281ff0f7067a0e3882f3826aa267e03ebfc2f95bb550d89261228c597496dea3747f5ba1fb3b48f7b7d13d7e8573d31aa0304f57f850481fd24d940338ef4af8d009cf317f5ca5b3c74f253ee10cb75a286cc938499cd33709ca34700d67bad574e3e5bd2fe1b590f0c0b7823d6ecba003f08bcfeefa4ce2e943e6f6171f8ab4c4f92ffb3696de1b9ffebd7dc5fa756813257483b3aeeaa330bfe27c00793f4edecbfb08dde3d74f98bbeff0894817d68200c7db088e851fcbfb14d90792372f93bc9f29e4fd1cc9fb19bac7af5f48f6fb8523efe44a376ec6bc04debf64a96517ce54aa899e81fbfc0a6725d542614b86a9b0864fb6093823a9030a5bcf4f11ebffa71448ef8dcff01ed4cf05927c14c7df2a38fe0e71fc2dbac7af70f6501b14e6fa415f1b78823390649e600e04ce36926de2c70cf2fea490f76724ef4fe81ebfc2593a0d5098cb2bfabf902f205f225fbe642e9f36f904b71c196d289d4f93d784fec6dc3ee83747c66930ff0eb2c3393635dd3879bf4b38b550985f7f45fcfc2ab037bab1135870de497d1486f7aab1e4ba4c38a70595476d1ee00c955a286c2538bdb19307d3a1bd037cfc45f0f19784d742c25be74e977d91410799a3ff491c893356f2d0f92b09dbfc0771ff37bac7afff327759fad7916fbf0efee483f453c650e0bee82ff1c7715f2b0e79f91f738fa1fc87d2457d4bddfc8dc7dcf96b87b9bea2fe9b01fd25c1773c4f9dbff13c09af851b6f06f4f5a1eec67edc43fe3228fbe9d661a6d31bceaff82a43bae930e05ca5af353084ef6670eee8f7084bf859f6034bf43fe6409fe93b87c7fd4f71eeefbf294d5a3fb9f3d8de7328f0da4c4af31ec8086d899f1532828f4923e30185cefd0346a449ababc84f4853f8c5c4fa26bf32c3b8f5ef0a99e1dca774326f1332ff9126adbf9c67e6417b5694e57815a14b7314b6fe1d08fa3743f76ba2dffc1a47f7e2e23dd1af895775731487b51a62dd49bc9a88ef8bc23cbe39c2e3f1fddcf87c0b90fd1c8ca5c27952f2180dc58338ff29b12edf675ec562e20a67530b79e270de11e8013e0fe5651cd6eba6c9cb995b9cfb331fa36589c115c6fab624f176df24e2aabae563b7249f190c678a0a596320d76de819d13e89413b0cd6d4f9e50bce7c86b39cc157d770f315037bc77c41da69f89af5a1737fd62fb42c3131ae1a83b6a18a2f385b197cb48a2f387b18cea155f105eb98b3e50bd28235aa888f18ac1d4ec3c7413f38f76757a1d38a417d02f35f7e658473429b2964847a268d8cb345ff7ff6d5745a31584b0473707e6584b32e617d109611eae53432ce11fdff39e3e8b462a29d057b5a7cfb7d68277cef5ce3fc39dc4e682dc5c3d967fd5198cb0abe50f485626d51983f2fe6f163f9281d1e6e97e424f1ee2e491d0ebb8d90a3b624476d478eb9c0219c1780fa7d4a1efa797c2e1d875d840c70ee1a43e12ace31cf76bd07fd5e215bac7d8634bba0e738ee404df960cd3343612edf26211fcca30077702e6306f9e2f504ee2014e65738ff6d7714e6573837ae390a5b72cc9f24bd0fe7bf0d4661ea7d7edd2929affd9b639eedc68c7540f11c630f14f6a2b3179ee15c3a86c256a0488c7f1489350131318f1cebe8d10e604dc19e9af23596e46b2ce413e3df455b25f93a7b940fd6360cca523eb96f05e7eeb540614bce62b1ae47eee3c4e11cbefa28cce502bde10ce06e28cce30b58c2df14c39cd854292e0b7d625d1dcca9623cde1e57b0e45f50dfb9bf20dddc85ac1b9c1b2c748bed8aee4b7e3426fa9c2a3f9a78be1b73f5abd3ead19dd043cc232ef8260d86ac079ca50b7af440f7653da09ca8f480e7e1ec292f7af452ebb17093737fe16d6930643da4f39063bdd17d590f485fa5073c0f675079d1a3bf5a8f4562fc6fd1616930643d5a4a7a403d2dea9a18f47d5a31575b39de32554ff8e6884acf040efad6440263107a86a7d1508a87f3acbc70b3879a9b9275cefd928d6930646ee05c4de046f8ddd85ee20af5129c9b590dbd2773d3360d3780938f9e078c21e819cc0dc40ff5c1cd7035378b3739f717a7b1ff18b4093a24654ce1ab9dc497e8bfc746ba31e270de6435f49eccd72e69f8021cd47e4a608c42cf60be207eb40fbec6aaf95ab2d5b9bf645b1a0c999b0e1237e21b4b31f18da5d818f11cd4f1d5d07b32371dd37003389dd0f380310e3d83b981783867c80b37e22c2186f2203651cdd732f85605f447646ea0dd501f85f9f3fb26f55b3623b34cb62cfc7d5467c7c4f78f6293d13348f7443c9cfde345f7a9ccb5363926cecb61f9e2fa5e32fdc45ae8f7d13d618b0ce6552dac71d0df127bf2e35d50fe41fb05ef9910ed9338dad310df15dde357a8e31ba0b0951fa5bfb8716370b64823e9bef83e51bc0773b79ba0ceeece5ceba0e270ed9ad46b398c9f1c20c5c16f1c57c85cf37f76d89277b9e8d3c5840dc4f697f8068e05af7168137442611eaf1a9f6bed9625de4b92a19790616b1abb80766b1b856ef8db4ad05787f66d6fe66edff676d23a18ec0cbecf04f90f6d848128cce31f4aeab5d710f1ee81d2bb5087ee89c23cfe11f42ef89099d2bb50f70c42611eff58f2dd21d0b785b22d748dc3b990f55198a7017d04b95e8378b9ce077befc352ca00436525a50f019cb540618be372aa0fd1c72d6fc2a7f443790bf943f89444bcec53c0a6f654608d42cfa8b0a47a2b717f16715f7c432b0e67247743617e45dff48bef95ca23e0c4a14dc650d80a548836666cb6f4bc744674429eb9849cf332c8392029536c0e4a03e2f815ce6dee88c244798fcd1757984ff33ba6b780b9f7a5403ba558a43d84b9fdc71087afca34f36ef06ec2668732f79ce2508131c649bb72ad781ef485b64e4d499661125e0b09ef0bf13c7c9b6991f4fe08e66e8bc07c8cc7798e58895bce04ee70812bca5c6c31baaf4abf63e6f4131c429b88df13f32bb134e3e0b1654e78d9431ef27eb994f7edc47d713e547ca494f7231d9e57d6a1b1e15d98b78b8f62ee71cd510263a6f4fc920ccf8bb99b98986b8b1d2cc90afea41a0afbc95b71fe40ac227bdc842eed509e557ac8b3153ef26c959467f9e2bef8e64d1cdac21d50d8e26f551aec98d8df123bc48d1583b37bacf456439b459c491313df96888f95f8199b869f954866e0e7700ffc1ce1831f182b007b82b35b3ba0b0c5c76ad1d7891d89f449332e96c005bbde47c21567b1ae117ac4d67ac0ad8a9e3fcae3f3e9e6d0818363240ee03cd70e28cc65057f091c1c9d8103c0050ec64bb8e31ddc43a08caef5805b153dbfcee3f3633273c01a0a5944df2d762cb24b2e2b9c253b400a43db41cc19c6e1ecd866286ce11eba48c29b84648635a2e29c80d871ccd5064ac49f8f3054f17ece6086f6d5be4939ecdf5c5631ff7d28cc7f0fa19f3dac8ac497e0230e67d00e90c23017087c411bb1190a73dc8d12de540dbef622e2fdf025fc587c5a528e583bf7358ece9295d76dc13389755bf06ddb6e28ccaf70e66c4f14e6ef897d30713817b6170a5b7c1dfe0521d32c24ef74b54c897eee6c492668dbc2d9a9a27f1b3b1edd074ec0a75b7673c4e592ec629f407c8e24fb1c4776783e45f6b93e649f2fc92edab9f17992ec27a0fb6964077f7024d8f789e8797edd9fb9eb31d1278f89f6701ccefa1d2085657f01f9d90c8579ba1b25bc99b4fd277420ec3fb60b11efc3fe63509f9f84f887bc3919a5238dc7a52d53622d45bc88b9fb58450e076b611e4e9cbb135f8038806fe9e2b375b08e10bf1ebdab8a1767efc44e23e2e12c24a91f6ec7832c504e8a253d8a1d3d8e620e274701ef2a4e66a7e2c6ce4aa3f73919f43e3783de1b32e80df677b63a3ee5dbdc608b0b15b29e8fe254695d904116f11d88143f0ff11731cf760c675dc61789778688fb303e53e2cec3848d2e49ea653f633d70f40fd2bb7076ef5027bf8f01df71098aaf89f078dc26718573911a4af19b256c391ece2d827cb85c927b294b94c9dd615c4becd38bc3b9bcc3a4fba548cea5929c9749722c95e45c46c4cb725e29c9b91cc909638de25c8878992427dc4767b2c5974b725e21c9b15c92b38c8897e5bc5a92b33c29e760685b8b7df9f10a494eb85f89e42c97e4bc4a92a35c92b3828897e44c8cdfc1d9b9c3a5fb2b596ab90419ae61ea72b559c294e3651960cc73952403dc5f9d46866b33c8b0caa30c629e31be469201ee1f924686eb32c8b0c6a30cf9e2f9432519e0fe61696490cf62956538d4a30cedc4f3874b32c0fd236819ec7ddce96438dca30cd07639529201eeaf4dc3c30d196438d2a30c307e7d94b83f42ba7f741a196ecc20c3511e6580feee31920c707f5d1a196eca20c3311e6580f6e5b1920c70ffb834326cc920c3b11e6580f56a70deef48e9fe096964b839830cc77b9401e6b94e946480fb27a591e1960c329ce8510698a381793f3893b4150a5b6d87733e14cfc973347046697d14e6d75391ec305f745af25efc54748f5fe1dcd006288cd205dc943916b80ffd3f68237743617e3d03a52ddad9f1f5e81eac5585baf5ac645cca9c2ca409fdbd73a434457b380eedd5ee28ccaf70d6e7709416cedb5bdd799788df2cbd2fc75faa9613ced0886f90e414edeef846494ed1de8e9fe79633c5066fcb6083e711f1949c62bc2b7ebe2427b4d92f40f925dae971380b730421e3ed1964bcd09f8c319887bd4892519c2d1abf18c928ce138dc3b71e9864639bd1b39738f67eda37447a974ae9893341e397218ccbc4751373b5fd4f17e926dafe9bd03b9b25bee05ca68652fc66095b8ea7f882fd3f974bf2c3b8cc154816b1ff207e25c1d7d5e8d92b1dbed6b722d2bb464aef1a71bd166188f34be2d0ee157cad87b58e97a0f89a4806cc179cd5d3508adf2c61cbf1325f303600ed3e597774eebbfd0cd77d9bf4eef5921e7f487a5c8f306e90f4b85b92f306498feb89784a8f1b59aaff47e7c0c66f44f7f815eaf506288cfc7fec5e773e277841e7bcc61e606a1b14e73cc5c1af7643617e053fd61d85f9159d851617e79ec5e07c4e8bdf4bc04ec4b9157174166bfc66895f385faca114bf1961a8e2297ea19c8e42617e057ba4fce1432cbd3fbc9388a7e480f3d606a230bfde9d418e8733c871b74f3980dfd128ccaff76690e3910c72dceb530ec8c73128ccaff76790e3d10c72dcef530e280b8350985fe10cb491841c8f6590e3419f7280bded89c2fcfa7006391ecf2007653f72fb36ddf89b6a9ef0091107eb64a1ed047632168579fc532ce10f36c37c9d38db8c8d6069e72495f72649e9427eec8dc2fcfa68123b26ce428b3f9ebc67c7f3eb13e27d9003d6b5a0f360e34fa267f9f529f14e2d14b67cf1c6fb246c78ef69e6ee0308d963e23cb5389cdd26d6d726ea8367910ccfa07bfc0a7356e350d89261c3430ed71bcf26d27a9eb97dfcf3529a70a6db7814e6ba8d713f1f8773bf26a030708c71264a38925cf1ad4847184b9c98de2e80d7c45c359cc127ce0ad950c5ad53263ce53df13dcd389c97d50c852dfcf30a9cb4ce9b24a53539435a802b9fd3057cbfc252db05afa27bf0dc9b88b7371126bfbe26d9e76b8ecce7af936480f7e0bcab49288cd38733b9c6a330c79b8964c6f901e761d573e3c561ac6a5f77fa89f7de64ae7c3cef7249af5724fd3a48fabdebd62f535e24e4c67a615ca1e705e00f3de671fc55377e1ccee7ea2aa587f3da4bbebe2de5ebdb8e7c17c219b67ef3f51d295fdf11789324f9d1b97671e098caeb37a43c8733cd7675cb46e5f90587b9713296a774f517ec517f2e0b0ce004af8f071f2a9d691687f3054127383ba91dc280fbfcfaa1948f1f3abc5fd2cafd7c02ef2337c709393e96e4f808dde7d74fa4743e71d2b9f8170907e4db269e6f2dc503eea7eef8f836749f5f3f63eeb1b1cf447acf11e97d9e21bd2f88f8f7a4f8f6c4fb9fbbe3e1be9257cbf62e3adb8d9f78ee3de9b9746b24e12c5f589ff52573fb942f455e8bb50d31519fc6e08ccf4cb8628e2efe9584fb95c0fd503cff824f5c185bf85ac215e7a76d82fd232ffac4bd52e048e7a5c5c579699b443b3856e813579c2110ff56c2fd56e0c21a9bdd7ce242b9ff4ec215e71c6c1e229edfea13176ce97b09579cdfb619e6f05ff288fbb2b7e794ef825fff21f96e4ceca78fff98bc17176714c57f62eab60a3af72dfe337a965f7f616edff38ba3e7657f4bd8f01e9c6f561f85b95c5097c2d96a721bf97724c36fe81ebfc2596ae350d892e152eeb7ac727cd9ab445a706e593714c669c2b967e351b80ac213cfc7d1fefc389c1f24d621c4ff16183d5098a701f30cff88f8fe285c2555e6f8bf280d71564f2cc3b72c80f3844dfecc5cfeed52d81f33d51b9efb5ed5987dcece1856cce6b232d6c33ef8878fd24eb7eaf2e1ac3b9bc68ad872566afd1a6e5d97597f9d10dc87377763f919deb1cf27e3fff13f9ded642bd91aebd562e7ac952956a0c2ba556c3dcf31c65aef54b2deac978dbdcc8a9b6fe1945b3eb584cd632dec337720f5e1f6ff73ad274a6cd0c9555292b83b25092edc52eb6fb1f55aa5f52217b2c2ba3fdaba536afd2bb7eecdb7c2e3ac2b7f6b0eebc90eb4feba51a65bc92e652bacd054ebff321b6f8e2576ea9399549a65dd95df996c6196dad22db3ee00a1655678a92de114fbff95b6a4c5b6f463ad7b95d63daecd4236ccbaaeb6534bd5bddcfaad4a73aaa04c2de32c5ff763f6114b904d232c6db8f43d6c5bfcbf1cd91e39c2a9af36b98a530cabf4b07bdf27a5e4c4ff71e83819bec163acc0e869531673ddebc57ad8fbd126a730e85fc7540dd5f6edf0ddcfea38a5d345cd0ccfee96b606c91cde7de15bdf8d39fb865faaba55ebcd7a54e3aab5caa05a3a62395e817d22971f15aa56ad52c80595e98fa9e8b78f779b9243fa9de74aece7fc674035bbf27367807dacda54ebc76aebdf52bbf495585568b1f5ca78eba152ebdf425bdc941c2ae470d56d9253abd04c825234e7a968b6775b4fdd2e567e60060fa726ba46428b24d13dec7651f334e648a5653798f244ab090acc9be3fbf4dfbd70e0e6aaea7ca965e74b36a951391357e54cad5c1780cc1e3f5dbed44ee895cc17fe47cd611dc2b633c940315845c560eded63db5cf6ec6c9b1fafd64de250cd5fbdb436984e028ac1aa2a06ed319669396470a225e162d14ecc8ec39d3c7358dfe6b0458a765e64a058aca660b190b3d84025564d492cfb982f3570750ab8a126700d0ab89126704d9541d5cd7591e471cb6d145ee1fa3727be036557d9ada9eda9095126338b4059532d55de700a9b2aa59233a7099d39b529e466bac87528e4e6bac8755506658fc6e7be959e5d1dc97d4d33cf75e4ce2c5d23db6f0d594fc59e3d3733d3287ba98347f06b98f5ee228b8795f688c00aeb7dd560537a465b7af6f6ad6c36f3996a08cc9f4414c33ba92c9fd3de9aca76d9f877a68dbfbe0a9ca7d8c68b9b6e45033750d9859dda12a37631cdbae70cea8db4634bec91a024e6723b5c8aeae0746f705b186f5d8b2c09b92ce9ada62d53f4216c22f840b059c9b8055663e24f75a28bd1ce3656f3c250a6dc9072e2bb289c78cc8f136f4421b7d7ad1e1a5325a483660969420177d4046e4a71d149978b66147267ddfc6bae7217b6b9e476acc619fee038feab613eb3d236c51fe70f5597c52e8c1a86492f0355b65a5079d355376f76a62aa05d03a8805aaa32de2ecd2546331e6adf296c04dbc71251e5fa2a5c636bf8f7480bb5dcce94644d0e48e98d844f59b7567066f3a634946eb6a17463cca0cc9451b5a2b2be7b0059df9a02ef1100781b0abc3000f0b61478cf00c0f329f05e0180b7a3c07b0700be0b05de2700f0f6947febabf06fbe6ab50e14723f5de48e2a64de47e613ff19abf87a3470270a788026706715306fb60ff402dc8e062ea080076902775100f7b01b6d7ca77d2e2b10ec76d58e7998a561859d32fc7250926f4eb224996bc95c9c45d5b2bb8a496595c2d78614d8279f6e0f2da8caa6abca44781b901fc59adab05214c52eb499ec4a15f23d750bf96e14f25ebac8dd28e421bac8dd29e4a1bac83d28e461bac88514f2705de49e94e18d08c0f07a51e0230300efad02e7ee9def8cd3ad71fba8c0f9d8f1e8c4c349f0ffac3f29e07568f0be94e4631492d7f429793fca54c62a4cc5575fa83fc5c9de0a4ed6aac44ec3c9000a7c1f05f87a9fe00329f0710af04d3ec10729c07bd8031c47b1dc8e02ab971d8eb634e3a9e139b8d4ca0dd69d4db6ae0b6c29f87d2e45e6e58ae9abe6f1097ed0c8a03d4e3392795f3c695e0bbee1ab963db4a46e38f0cd56052193996a4eecae32783edfc977c0a4aca9e1c3b4b3993307c2d32fb5a3265929f0dc1c2b063f53ca4475ba4c0ca63cdcbe0a0f17f3e9e1f65015387b78ae74bb16383e36cc176d56d8bf578aec9d6aa79d5c5aa45394f8a49cbf019429b6d1f6f260b441484f99e39e94ff9daaf0bf87c5fcf9dfbd285be78b2c32f6aed218f110aa269daea8497d35ba865222efa72a9ecef017f42ff8a8285ee8966f4faf5558d7523b96ffaeb07ef1f5dd736df422ebee4af47e19eaa174f7c5c8308a9119ba8c0ca72c647f85857ce1d34246a8c0f96cc3015e2c24cd6cc3489527b287f3cd0ee07a9fc10a7692ef40155f4abf3393c1c0ad3959296f334a95dddcf666b1d49648216f89f033a4f26cb967db72774f23b7aa52f72f798a954da4ad6c345536e628cac6c63c7f65630ce58ae66a7acfb114f03c958fe3835ca3ec0502a569fd55be6d2ff9f60e9672613783acf0a15617f9705ff2ed4db13a5fc1ea9b3e59dd8752be48a53c77abc36de597daca73475e695d17d8465424a99bce99e7db55746aec3c7bc3cf12ebce2adbe12c45a9acb20d7489cfaa601c55c88aa942b62051c81666740e532d8978255761bdc5a55b66b8888d5769c3dbabfc845eddb1840994a595282cad43157f963691aadb166bd66d9354c0bc6e5be20578260dbc2f45c752051deb7dd2315901dec39e1ecee582b6a1f674232f78fe67d297a9e855d6b1a54cbd982d7dea54ad3945952d9cb9e55ef2bb94ce92a9aa2cb1e7d573b9bc41aeaefd654a99e74c3998a99736644a9fca9669949f2da7fc2c3fac598c63f8f080d3a91aab52556371d738dbfa5b68fd5b66dd5a6d879c5a8a378ffcd424fb5129af50a55c3f25e5b196cfcf3ef51954ea2b55a9d745a9cfb6476c782de4e472b9af74f7a7bce02a85172cabe6cf0b1ea002e779c60f5491ab33e5e8759aeaec40ca22d75016794856163993ca99435539d3d06517b8839cbd6dcca224384c254163976d704f55c9c8dd693ea43888b294c3159632a2ba3f4b99ad02e7cd8723bc78fd34cd873994d4472aa43ec5a7d47355e0bc6cae659ae310f328e4a37491e753841cad22a4863f428a28f06314e095b5fc8117abc0b93759a7f026fc8f1f6fb24005ce9b99c77a31c034cdcc8554e13dce0b709af2b84801dcc35eca97cb5d5d78c76a76bbba8e57f1a06cd3f0237d54bbbabcc840b56b4a288b3d5161b1336afbb3d8c52a70fefc492cb58aea612ff4cb6ecf9a7d68ba38208075b7fe544fade2d2ece75a4295ac5314252bcf67c95a4a819faa008ffb045f46952e7eac7b4ad5c8070b54e366306e932f0cc919abaeb4872ecaa5c655be3d4052c9ba59d705d6ffce0001af4ef3ad7f305fc1117bda880bec62b4cc7e8f633bc3053cbe97153fc8baf6b6aeed7c15fd52caae4e57d85521b7abf57a06b29ca2f90c15cd7302a1397b32f958d222e1db9c69093e7ab554e0f2b3318ac49444be78bfccc65d684bc1a72dfc654719e543ce54f89099f5fdf9908355e0dc4b9ce5a5fe48d31f2ea780cfd604ae5001f3327c8e17e08369e04a05700f7b05f3be295ed35c8de7e55412754d77ae4a7f654dc73f8c50106b92a255da833b08d656a8b283b3c64f44ab295ba7caff6ea0b3642565fae7294cbf43037fa6bf8a92fc7c85e4d57d4abe9a92fc0285e4dff8947c8d0a9c4b78a1ca5f3295e869fccd2194e8172944bfada13fd10fa5c02f5680d76fea0ffc3015386f0bf02f04e836e10fa7c03705007e0405be3900f02355e0bcf371a9178f99a6f3b196b2c3cbbc00a731c1a3282bb95c6125bff8b492a355e0fcf92b18d1bce187606a346f8ea168ba4a555cf93c8adfe60daf8cc2d8925c47517d3545f5357a541f4b517dad8aea7981511d9dd6e47154d1ba4e51b46aececaf681d4fb9b1eb0370632750e03704007e22e5236fd4f49127a98079fedca4e9234fa632728bca47faccc85354e0bcf57eb317a9d3b4de4fa5806fd1043e8db28e5b03b08ed355e0bca9789b17a9d33413d7539978bb2213ef6be92f13cfa0c0ef5080af6be50ffc4c0afc4e05f8b8d6fec0cfa2c0ef5280376fe30ffc6cca52ee0ec052cea1c0ef0900fc5c0afcde00c037a8c0b9ffe14754a7549d7c9784dfaab3525483b0a2d34ffbc45f25b791d2e57e952e3c22df95aa9fb4cea3d27a4095169e3e9b9fb23630fb49bcf329291e5449e19e46749a11cea45df6125c4049f0904a825a0c4f23ee675b46a5cf1af042ca4b3cac7241f9febcc44554597b2480b2763125f9a30ac9aff629f92594e48f0520f9264af2c71592f32f68f8917c3325f91301487e29659f4faaec936f183c50f8b259966f3850f8a141a2f9eedc9b615fbbb13dadff47229f35df06e2cb0ff9b47899756f91ed5f56dbc381c5f6dd229f3eed324afea754f2f3ad31498960176f7e42a741429f598ac171c767cb5d9165f613156222cce9d438fa55306768738dfda61f9d2e57e9c40de4e94484d43fb4bfb5559d397fba3b7ffc7511afa08cec59859155f169645752e0cf29c0abfa04bf8a027f5e015ecd27f8d52a704ef40b2af3eae0a978383ddc1ed6b58fb8e7149543595ff16c3f9fcb99afa10ce645ca60b66a1bccb5549a2f5169beac9de6755456bf128027bc5e05ce9fe71fa7d09941b98162ea358a29fb935d553153fe78ba91e2e98d0078ba89027f3300f02d14f85b0180dfac02e7472ef14f8e915bebe404bad109dc4225f04e4009dc4ad1f36e00f4dc4681bf1700f8ed2a70beb68a7f664c6b6dd51d14f207bac87752c81fea22df45217fa48b7c3785fcb12ef23d14f227bac8f752c8db7491efa3903fd545be9f42fe4c17f9010af9735de40729e42f74911fa290bfd4457e5885cc3beafcd370baa7883c42817f1d00f8a314f83701803f46817f1b00f8e32a705e11f0cfc5e956044f50e0df0700fe2405fe4300e04fa9c07927ffc7c4c349f03e43fd75f29f5681f3c632fff49c722b025fe8bedade86c0777c2fb5470d9d4f41f9e93a3c4329f5b342a96dc3fd29f5ac0a9c9fd6c6bf9ba7735adb73145bbfaad8e22d303e8ac74712938bf2a730e7486a3ef6004b7cfc30f73c25c36f2a1978b31e46f6bcc9c29f2eb79ff423d50b0aa97ad86742e6fe50777e1e91ff055bfc3b878d24faf288255bfcdb87f491ee54fad4a2ad175539cacbc29f8ab2b06e94bfb2b09502ff4b01be76b43ff09754e0dc4afea7b24579bff58ac4d65af7f6e20a649583c4885805db238bfdd62fabe4e356f9b722b363a9d07fd0d0af50bcfea3e0f55d9fbcbe4af1faaf8a57671feb72b68a8d138b13f8513e6b7c31f51aa5ce7f0a75c6eced4f9dd72975f872b81475ba4866c2cff1775659f831135e00f9a0ef1e622ccc0f196f5064c4628ac97c9f64bc4981e729c0d7fb047f8b028f2bc01ff309fe36055e4501be711f7fe0ef50e055559cfb047f5705ce779c558be9ed387b4f05cc1b10d563fa0dbff729f01a01807f4081d70c00fc432a336b2932b3689cbfccfc88caccda9a99f93145499d0028f984a2a4aecabe7d52b28da2a49e26259f5294ec1400259f51e0f50300ff5c05cefb2f0d629a43035f5062370c40ec2fa99c6ca499935f517c34d6e5e36b0ab9892ef23714d34d0360fa5baa40365314c8cafdfd15c8ef284e9aeb72f23dc5498b0038f94105ce1b4a3b7bb1be342daa1f29e096aa1660033b986ce9f196dd5c2bb426eb65413f5199dd4ad52ef299d93f5359d23a802cf98592bc8d42f2e607f893fc572a5bda7ac916deefe56b932ab3ce96df28e5f215caadf6a9dcef54b6b40b205bfea024df4521f9733e25ff93ca96f6aa6cd949ca9662d16fca2e4bfea214eba050acc681fe14fb1fe5163beabac5bf29b13b29c4fec6a7d8ff50f9d159951f7b90f9516a0f07ad489c79eb2ced59650f822c12fb099ce53bc5f6823f7711e3cf387ddc45f6c06b91ddc7e54b384bc59e063e3ce627afffa5482b5090d661a63fd2fea38a5f97008a1f1f3850ce78778d0533e31d5325c0a9d955d5d7f5494d9e0a9ce7d36e2a7b6a9a624ff05d215cc6b33b90304ea9d94da1e6173ed5aca202b73f66a4b080984f0ba84a49de4321799d59fe24af4681172ac00b7d8257a768e91940c1a84149de4b21f9549f92d7a424ef1d80e4b528f03e0180d7a668e9aba0e5299fb4d4a18a733f5571de394d71ae64abed75aabac5ba2ea56e7f55a3f1207fead6a3326a8022a3fc1e20b21325f94085e4837d4a5e9faa350605546b34a0a4df5d21fd1c9fd237a4c0072bc0d7f9046f4465ea1e0194bec694e47b2a247fd3a7e44da8d2b797aaf4d5974a1f9f3759cecab26e2e37a5541ba250ad60b63fd59a51993234804c694e493e4c21f9613e256f4165ca702f1d4bbee5658558229f5db6ec4c293742d53df3a95c4b2a5b4606902dad28c9472924cf9fe34ff2d654b68cf65256e060e76c33a50da5da18856a653e556b4ba93656a59a3dc6c00a50ef89f7c5baf852279f52676f853a7de6fa53a79d0a9cf7f4f7d11c07de85e2699ce6105f7b1530efdb8fd7eddb775021f345671362aa45676bf7f2b3e8ac23053e5109ae903c0d78270a7c5200e09d29f07d03002f5080f7b03fc3ca8f78cbfd5726c63367e063327386539ce193f280bf3531595506942b80a6c4f82809ff449e6989a955435da8823c951a24e4fbe0f8eeb7158eae925c7eca7a57caf54d53b8be3f54c53d8debdb95029fae6a982cf007be1bc5da7e2ad638027c5bd30f3fdda854665095115e95974d8add29d2f65790f6904fd27a50e00728c0472cf4075e487175a08aabaa768e40f3d00f433da97466aad2a99d9227d9a4d98b226e9682b8137c12d79b023f483502b6c81f781f8aadd95439e13e9df7a4fcf0d3974a658e9772924d8afda8b6fbdc00daeefda91c99a7c891493e736400053e5f01fe8b4ff081544614a932a226caee02313ce5afed3c884aaf58955e13965cc4bc401c8660391aeb9fe328b33f2661774a8e052a39f01708740d71b0aa81956f056307b0dc7d463bf96969e7fe347bb1b2fc0969782a7de369a1e7c6d322bbf1d4c67e327b69a886d11e544129511494a525fe0aca9e14f8620578fdc5fec0f7a2ac7189ca1a79df6a9cc5fd5c7b16d1e12abbe1e22154ba4b3395821576aad997bfa154cacba8712255f90316a6595632ce57fac3a84e6ba96ea775386528cb5555bf4f431941819729c0872cf1073e92ca9383292b74be3b916fe703f783d959e1282add726a700a6cc19925e7ef646f89a3a9d42bfc58a2c304f0e027fd31546fbe3280defc58ca5e5628ece52e9ff6b23705be52013e73a93ff07da86c5995c918a1baccce18c751e9aea67ad7600e906ef6a6389e4a7b8d7f539c2aa4f193fe04ca291ea2eb142752a672a8c254bef0692a9328f0c314e08397f903df971a8f3d5c733c763295d947a4f37a3d03f27a53a8d48fccdcfe750c6ca8f5006f0ff2b54d7e529e4ae5d65a456e6df5995bd328f0a314e0ad4afd814fa7383b5ac599f3ed4967e3e558abfdea87a3fda8948ec9e484708ad96de89c4151b84e41e129cbfd51b83fa5d8b12ac5fab14c9f2a85b3fbe6dade771e738eefa5368be58b0f7ce627b68a395bc47613c725f9a1e9008aa6e314341595f9a3e9400afc7805f8269fe03329f01314e0effa049f4565f08994e5a66e4e866150dfdf2ea3d23e4995767345a951cb905d399a4dd17cb26a34bbc21fcd7328554f51a9ea7c6ea8d82e1df3ede78b524a069c175a20ca84bf619db9943ca7aae4714edf1cc59c8fedf2b2ebc834d4fe556e97e415f6bd0a5f52cca3a4384d25456b57a5e64d9aec4c613e650aa7ab8ab34f5328a20636d72b06366d217d0c6c1653e06704306aba80a2e54c052dcff9a46521057e9602fcd54a7fe08b28433b5b6568bb59c1a929c7f056a002e99c29bfd27ea5c47ec659efed3e66235f547bfc00cb6cba36251425e7282899bac21f258b294ace5551b2abed919c05f0f3c512787e9a6599adf802e6ac8d2c4e438543a29ed75a4211b241d5d4f149c852aae86c54149d1a3e8bce324af2f314925fe853f2524af2f30328f4cb29c92f5048fe944fc9cb28f00b15e05b56fa033f98b2f08b5416de2d8b42ef9ce5d0cd6e7af0149cd31c748b7d3945cac50a526aacf2474a0545ca252a523a13c59e521cbb03e76eb154f4fd10514911b14941c4109f44aca0c0372bc027f9045f4995c84b032891ab28c92f5335547d4abe9a02bf5c015eb0da1ff81acaf8ae50195f2bc2f8dcede04a711a52f6667608a5f2950a95bff1c9e7a194ca5779198e4a23f56194895d1d80891d4e51728d8292393eade0080afc5a0578994ff02329beaf5399180f269778f9a17f2d95cef5543a7cfc6d923dd7eb279da3a8746e50a553c54e67855d14fca4723495ca8d9a567a0c65a5370560a5eb28a9b750dc4c101f8df0a3c2b1542a3753a31407a27189a96c061bc70631ea5beffc746f3fd21c4749738b4a9a3a8c9129fb49f5782ad55b55a9d67495aa6e59b8e413a8f46ea3d24b96ae6cd23b914aef766a144c95c7c973ddfda47d922a6d9ec41d5eca5e9a098b9329a5eed42cd4a7500efc2e558579a43f077eaa0a9ccf54dd9d88488217f22db7f75811b56c1e52d29948a7731ac5cebdd4881c1fa4870de1a576d434f49939bec8898f3b2db497f438f7fc907a3a25cf7d2a7960a1552feb5f728fc7d844bf23fb89a6f5941cf7abe4802fe2f0692ef7972fb297e00c4a8207e8b149478224131398b3f42c7b29cea4a478907209c9b1c9698a8f1dfa49fb2caa0c3c44958187b32a0367abd26969051f51a4d3a39d151443d3785599b382cd699c1f28d69dc9076a3e6ae1f1f935fb8fe2530527d0329e43e5c363e9ca4561e0e5e25c4a8ec7d3958bc200cbc5064a8227d2958bc280cbc5464a8a2733950b9eda4231269f5ddae751e5e229aa5c3c9d55b9389fd2f1997479dd27c0bcbe8092e0d97479dd27e0bcbe9092e2b94c75c17cbba15d6997399defb35d4449f07c662fec2c7b18ee92c44fda175369bfa04a9bef4358a93d257a0995e68baa34f99efd6ed65f3f296ca252d8aa4a012f245962ddd059c2bd994af92555ca78d9e0cac4edec53bf944afd6555ea751596945d63f9322add5728beb9e5f0ea7564e2bc89e1e29ebfd9d5cba966faab8a66fada63fc35d3afa0d47a8deaa1a5aae547992b29655e578d4baef3a7cc5594326f509dea54659c4ea01f95aea6547a53a1d2569f2a5d43a9f416a5d25c7b92a3c4ae3ef071f37e54ba964af56d55aaf63a68bba1bc32eb14afa3527c87aa204a455580534c3610fda47d3d95f6bb54195889c60cfc7f50e0062abdf754e93548b08ba7679dcf4164a7ef8d54faef532e74ae9db3ce9ac39176a7d959f2e5ef73873751e97e4055c4705848f6696ea1d2fc90b22be72cb8f9b665254f86cb66c7d1cd54da1f51cdae0a458a5313a7d03967d0f991e0164a828fa99c8623279cc10f7e0e5e360b9a6fa5d2fd842a51d86b75b74b979ff46ea3d2db4635b3dde905f38995db29293ea5cab55b0add4f0adc41a5ff992afda629e907b75dfd4e4a92cf5592b44c9124f90502274f9cdd76bcec0f175d33eefd97fa92e92e4aa62f681b095e8abb2929bea47d2f6606caa7df1cb9874af72baad12edb263494b23988e65eaa89f4b5a28934e24c7f4da4fb28d5bed11c1fbf9f9af4fa368049af0728a9bfa30c0116cb8ed3ca8a07a974bfa79c84bc583735fdec56673e4449f2834a92562926598c1a053059eaac23e5db729d22eb7f9bc4c394543f7a2b287ca418460dfc1f10fb0895fa4f542f3335f5c90c0eeff693f2a354ca3f538db3d4cacb6f03e9312acd5fa8c6993bcd22bbaa9a9b5565fd3895f6afdef4adcca259f404e5067f53b8c1a9e7fa73834f52f38fbf6bce3f3ea502e686ff8717e07634f0d32a60be3afccf18ff2a8a1bb895cabf6ea0c19f5181f3e05f317e08be1bfcfed125b3fe1b50f8694a0255e9049ea50ce87fe906a29c7edc527bdba2d373f4dbd67d8eaa95fe0ea0567a9e52ea1f9552712b38d26e24fa51e0052a8d7f556954b5d3c866a8e9452a9dff54e970846cb6116fa552e127b12ab5c9ce3fbf44a513a3d24976e1fca4f332954e9e2a1d1ec1674997d87bc456f9f4c1af5065349e975a46dfb9f1d08963f738ab859f32fa2aa54c1595323048ae2ea3fe066d5f53a5cc9d40d53ccd2dbdaf53e5bf5a9e7ef97f8312bbbaaed86f52c8357491df5220f7d885978c12b63d4ece9b6ab7494aadb71788bd4dc19e995733cf43b5bb90e6eb6d554e70be6a6902bf4301d7d6047e5795c3ed790e2fde2e393c5accc84eb47a1f8b99b3ab20d83caee385b1d93463ef518eafae17e0347eed7d0ab89e26f007945bdb2900b7f621055e3f00f08f54e0dc3a1b6866e2c754c3bba117e0340def4fa8ae42232fc069ba0adb5405b5032fa80bb64b413557401bab988a494cd9676f35c9e3676f7565f4c1a53a525267727daaca629e134dbd6431979900fe8caac79be9d6e39f5356d95cd32abfa04a7f8b004aff9714f8ce01807f4591dd5297ecaf29dfd24ad3b77ca302e623fcadbd00a75940f82d05dc4613f83b0ab8ad26f0f754eee5ebe6de0f14723b5de41f29e45d74917fa290dbeb22ff4c15c10e0114c15f28b13bea8afd2b55043b6916c1df54c07ce4b0b317e0fa34f0ef14d1050110fd074547174d3afea4ca7757cdf2fd17c5f3ae9a3cff8fe279b70078fe9ba2a39b261dff50c0dd3581ffa578eea1c9f37f14cf8501f0ccc7ff9474f4d4a4234601f7d204ce5301739e7b6bf21c5701db5f1a0b80e72a141d7d35e9a8aa02e69ebf9faee7af46f1d13f003eaa537c0cd0e4a306053c5013b82645c7a000e8a84581ef1e00786d15381fe418ac391a5287b2bd3d746daf2ec5c79e01f0518f3291bd344d64270a788826707d8a8ea101d0d180021f16007843caf6866bda5e234aea110148dd98021f190078130a7c5400e04d29f0d10180375381f331c4319a6388cd292b19ab69252d283af60e808e9d55e07c4bfe3e5ea49e4903b75401f361b1719ac362ad28e0f19ac0ada99a60826e4dd086429ea88bdc96429ea48b9c4f21efab8bdc8eb2e7c901d8f32e94d85374c56e4f893d3500b13b50624fd315bba30ad9fefca16667bf13d587d94fb30fd399227a460044175074ecaf494717aadd748066bba92bc5f3819a3cef4af13c33009e77a3e898a54947370af8204de0ee14cfb33579ee41f13c27009e0b293ae66ad2d193029ea709dc8be279be26cfbd299e8b02e0b90f4547b1261d7d29a9170420753f0a7c6100e0fda906ef22cd06ef00aa895ea2d9441f4849bc5853e24114f0124de0dda976c152dd76c1600a79992ef21e94d1950660747b52622fd7157b2f0ab94c177908857cb02ef250caeeca35ed6e18055ca1093c9ce2a252978b1194d9ad08c0ec4652e02b03001f4571b24a9793d12a64bed063b5976c4cb3d0630cd58c5ea3d98c1e4b8d471ca2391eb13745f2a1ba24ef43211fa68b3c8e2a85876b96c2f194391f1180394fa0aaef2335abef89141d6b35e9984435ee8ed26cdced4b497cb4a6c49329e0633481a75054acd3a4622a25f1b19a124fa36cf9b8006c793a057e7c00e0fb518ee3045dc73183f2fb276afafdfd29bf7f92a6df3f80f2fb276bfafd0329924fd1257926857caa2ef22caaac9ca659560ea2ccf9f400cc7936e5f7d76bfafd39141d6768d231977276676a3abb7994c467694a3c9f023e5b13b888a2e21c4d2a8a2989cfd594780165cb1b02b0e58514f8c600c017518ee33c5dc75142f9fdf335fdfe62caef5fa0e9f797507eff424dbfbf9422f9225d929751c817eb22975265e512cdb2b29c32e74d01987319e5f7376bfafd83293a2ed5a4a39c727697693abb0a4ae2cb3525aea480afd0045e415171a526152b2989afd294781555fcaed62d7eab29e46b7491d750e5efda00cadf2114d3d769327d28057cbd26f061141d370440c7e114f88d01801f4199c84dba26722455756fd1acbad75255f7cd9a55f75154d57d8b66d57d346577b76adadd3194b3bb4dd3d9ada3cce2765db3389612f90e4d918fa38ac99d011493e329f0bb02003f8122fb6e5db24fa4c4be2700b14f5281f379ef7bbde4649a79ef9355c0fcab03f779012ea5814fa1e8b83f003a4ea572f101dd5c3c8d12fbc100c43e9d12fb215db1d753623f1c80d8675036f288a68d9c49f1f1a82e1f67517c3c16001f6753e08f07007e0ec5c913ba9c9c4b89fd6400626fa0c09f0a007c2305fe7400e0e751e0cf04007e3e05fe6c00e01750a6f29caea95c48213faf8b7c11d5a07c41b3417931d5a07c51b34179890ab88315dcea0538cd92f14d14f04b9ac09ba966dfcb9acdbe4ba9b6f52b9a6debcb54c0fc30c757bd00d7a3812fa7cadf6b0194bf2b28f0d70300bf92027f2300f0ab28f0370300bf9acaccb73433f31aca2bbdadeb95aea5f87827003eaea3c0df0d00fc7a0afcbd00c06fa0087f5f97f01b29b13f0840ec9b28b13fd4157b0b25f64701887d333588f3b1e620ce2d5445f3896645732b05bc4d13f8368ae74f03e0f9768ae7cf3479be4305cc05f9dc0bf0c134f09d94c45f684a7c17c5f39701f07cb70abc8d15fcca8a6894029e02fd070d7d0fc5f4d79a4cdf4b017fa3097c1fc5f4b701307d3fd52efb4eb35df600e549bfd7f5a40f5244ffa049f44394c83fea8afc3095853f0590858f50fda29f35fb458f5252ff1280d48f51b9f8ab662e3e4ee5e26fbab9f804e5957ed7f64a4f5254ff1100d54f51e07f0600fe3405fe5700e0cf5046f23f4d23799692faef00a47e8e92fa1f4da99fa74cfb5f5dd37e81aa06fed3ac065ea44466714d91b752c8315de49728e43c5de49729b38bc7f5cdee15aaa95725aed7d47b956aab57f5029ca6adfe1a055c4d13f8752a07abebe6e01b540ed6082007dfa4c06b0600fe16c5492d5d4edea6b2b1b66636be4301d7d1047e97e2a2ae2e17ef51c8f57491dfa78c63a7008ce303ca77d4d7f41d1f527c34d0e5e323ca381a6a1ac7c71470234de04f282e1aeb72b18db28d2601d8c6a71478d300c03fa3c86ea649f6e71470734de02fa85c6ca19b8b5f5244ef1c00d15f51e02d0300ff9ae2a4952e27df50c8ad7591bfa50ca48da6817c4701b7d504fe9ee2225f978b1f28e368178071fc4881ef1200f84f14d9ed35c9fe9902eea009fc0b958b1d7573f1570ab9932ef26f1472675de4df29e32808c038fea05a355d345b357f527c74d5e5e32f8a8f5d03e0e37f141fbb69f2f1375558ba6916967f28e0ee9ac0ff5239d8433707ffa346090be3baa3847ccc4439b0d4d30b1b690696622a60ce462f5d36f254c8dc9e7b0760cf714aec3eba6257a190fbea22575521f32fc3f7b322da7a21a40b0d5e8d02ef1f00787515381ffa1be0c5fad28c11d6a080076a02d75401737f3748d3dfd5a2cc63775df3a84d210fd645ae4321efa18b5c9742de5317b91e65cf7b0560cf3b51620fd115bb3e853c5417b901853c4c17b921853c5c17b911853c4217b931853c5217b909853c4a17b929e593466bfaa46654e3608c66e3a03925f1584d895b50c07b6b02ef4c01efa309dc92021ea709dc8aaa02c76b5681ada9f6d78400da5f6d283a266ad2d196a26392261df92ae07c2bb8af17e0453112b81d45c5644d2a76a1a898a249457bcac54dd575711d282ea66972d191e262ba26179da876c67e01b4333a5374ccd0a4a380cac1fd7573b00b25f2019a2277a5dcd18101b8a35d55e07cb060a6e660c16e14f02c4de06e540e1ea49b83dd29a2670740740faaa93147b3a95148f13157978f9e94eb98a7e93a7a5122cfd715b937855ca48bdc872adec59ac5bb2f25f2025d91fb51c80b7591fb5396b148d3320650c0259ac003a9e2b758b3f80da2245ea229f1ee54fdba3480fa753005be2c00f03da8a252aa5954f6a40c7ab9ae41efa5426e6c05cbbc883c98061e42897cb0aec84329e4725de461543d5811403d389c02af0c007c045518576816c69114d92b75c91e4521afd2451e4d91b15a938c3194c86b74451e4b897c88a6c87b53221faa2bf23e14f261bac8e328e4c37591c753c847e8224fa032f048cd0c9c4889bc5657e44994c847698abc2f25f2d1ba224fa6443e4653e42994c8eb74459e4a897caca6c8d328e0e33481a753ad98e3355b31fba980f964f70971ddc9ee19542bf744cd56eefe14cb2769b27c00057cb226f08194299fa26bca3329914fd51479166571a7695adc41549bebf400da5cb3299b5baf697373a81c3c433707e752449fa949f43c8ae8b302207a3e45f4d99a441751449fa34b7431857cae2ef20215323f7f66831732d29c3fb39002dea809bc4801dca3a3158ccdb1fe9bc2d6b00a71bf3b9b6ca1975aa1122b546c8587b3e5d6af322bbcd40a975b4ff3ff575ae1f9d6af0aeb8929d6d3e5d653a56c211b665d57b339dc095a7fa75b68c3ed2746b07dacb8b9d6f31cd3b93fc9429c6ba5cdf186da29ecc6f2459cfb8d59d65f1ee796944b566efd3e4fc54e4c62a7b09a153cdf7ab220d6c17e3218c9aa128c9750d67781aef52da6aa800b35ab80259467ba48d3332da5802fd6045e465171892615a5942fdd14802f5d4ed1b159938e328a8e4b35e9385805dcc80a5e6645b456d0a1a4a41b9d403945c9e59a945450945ca14949256521570660212b28a9afd2947a2525f5d50148bd8a92fa1a4da95753525f1b80d46b28a9afd394fa104aeaeb0390fa504aea1b34a53e8c92fac600a43e9c92fa264da98fa0a4de1280d4475252dfac29f55a4aea5b0290fa284aea5b35a53e9a6ad9dca6dbb2398612f9764d91d75122dfa12bf2b194c8776a8a7c1c25f25dba221f4f897cb7a6c827a880f9bcde3d71fd79bd1329a9efd594fa244aeafb0290fa642a17efd7cdc553a816d3039a2da65355c0bcc7f4a017e0346b674ea3801fd2043e9d22f9615d92d7ab90f9ccec235e444e33337b0605fca826f099d438cd639ae3346751f6f6b8a6bd9d4d55824f0450099e43d1f1a4261de752eee8294d77b48192f8694d8937523c3f1300cfe751743cab49c7f9141dcf69d27101e5349ed7751a17525cbca0c9c54514172f6a7271b10ab8ad15dcea05780abdc8fa128ae4977449de4491fcb226c99b293ff78aa69fbb94cabd573573ef322af75ed3ccbdcb29895fd794f80ad56874272b185bca4c8e464fb3ee9558b16bd8483bb6c4fa9f630eb5d228b242cbad77975bbfcb6d2c3ee29bf98df1d6bf222bc4a5493f4afd86e751ea37ed51ea42eb976989a9d1eb2ba982fb966ec1bd8a2ab86f6b16dcaba982fb8e66c1bd862a06ef6a16836b55c0bc18bce705981b09017c1d957befebe6def554ee7da0997b3750b9f7a166eedd48f53a3ed2ec75dc44017fac09bc85cabd4f7473ef668ae46d9a24df42b52d3f0da06d792b55fe3ed32c7fb751527f1e80d4b75325e50bcd927207651e5fea9ac79d94c85f698a7c1725f2d7ba22df4d89fc8da6c8f750227fab2bf2bd94c8df698a7c1f25f2f7ba22df4f89fc83a6c80f50636f3f0630f6f62025f54f9a523f4449fd7300523f4c49fd8ba6d48fa880f9a9e3bf7a014e77ea3805fc9b26f06314f0ef9ac08fab8079f00f2ba2a52203959958954ee009aa66f933809ae5490afcaf00c09fa29cc8ff749dc8d354e3e36fcdc6c7332ae0d656f01f2fc01b68e06729e07f35819fa348fe4f97e4e7a9b612aba2d7567a811239564553e417a9c298572598c2b85595005f5417f7c2499a45752f519c54d1e5e465aa8857ad12c0b1e31478b500c05fa5ca4c752f64a72933af5164d7d025fb750ab9a62ef21b2a64fe31d55a5ec848f331d537a92cac1d4016be45f9903a9a3ee46d8ae8baba44bf4321d7d3457e97627aa700987e8f02af1f00f8fb14788300c03fa0c01b0600fe21959b8d7473f3234aecc60188fd3105de2400f04f284e9aea72b28d12bb5900627f4a81370f00fc338a9316ba9c7c4e89bd7300627f4181b70c00fc4b8a9356ba9c7c4521b7d645fe9a426ea38bfc0d85dc5617f95b0a395f17f93b0ab99d2ef2f714f22ebac83f506df8f601b5e17fa486023a786993a4190af8892a8c1d03288c3f53e09d0200ff85cacdcebab9f92bd5532ff042769a9efa6f54e7a08b66e7e0770ab8ab26f01f14c9bbea92fc27d5cade4db395fd172572375d91ff477567ba6b7667fea6ca498f00cac93f141f85ba7cfc4b0d2cf4d41c58f88f1a03ee653ddd59028e9d6207f9ceb469acc85ef7e0ac915866ff1e6baf9ee06b241658af386b24c6269e1cc9565a77f81393ad2b8f2db1ef94b3ee6cb6f5778a1d5b6421aeb0573470dce43b23ac2bec932b62a3acb7e6b265760acebbc95510ce9a8c127b45823bc691afb7a5e1ec345af0b50c2bacdf1528f5a9f69a10c074a34eb7de2ab170fc0c90f3213225ebbd55ac0f65d4ea8c896c1e5b6cb35929585ccecaacffc732be6e65a9bd5285bfc5633223c89af1152dcbedb51b73ad67fde817a3f4eba3d26f7752bfd1229753f55c6885b8c495b625945a322fb0d7be2c4ba3ebd49467fde89447e9d457a5537f52a75429dc1a9559b1e5c2ee4ce912a774e9a7d26510a90bac905a6e874ab763ee54a134eaafd26870d61a2d545824ad93ca7efd685595d26a804aabae3efc04e8532a244ce745fd485c8d9278a04ae23d19235375e41c256c61aec23fd19e3e9d57cb56b3ea946683549af5cabafccf678bec158745b62dae48f801754de647831a9406bbab3418e3a38c0cb5f428b76b674797f976fd5d9e466ebacca443f7a36d4d4adbc12a6d3b4a96286b04b933ce9669a1f57b5140b9528b92730faa2da04e13d7ffe3ec965185656b8b6c5b4b970f74fe04d316a84de9b7a74abf61becbcd683b6786274a4d3636a757f7d4a134dc4ba5615f8dd6ce5cfb9ed36e9e62b7881704985375293d86a8f4d843b2442cb55c7aa608f9bd59613aef9d4d6bbb1ea5d750955e7b792a61432d198aec3c2cb13d957e09cbce7bec44e9364ca5db88347986b51b69f5fa57d8af39562acbeace21af7997bd65d6a7b41c4ed5bd5e2d737446cba4f5f3a341034a83112a0da6f968c9418f8fc7a6e69a975e5f2e7b860d291e46aa78286666c71b2ad9247bffc642319e30ddee7b9558ffcfb3b50ba6c5998dcf6a44f1348ab297ed332e939e217d1e1a533c8c56f1d08ff4ddd9b5503361f9d1a409a5c9189526037cf830ffbaa8d1fc68d394d266ac176db095e86ba346f3a34d334a9bbda9f110d5f95cd3ecd6c052d12a707688cdb67d738578bd44d13e35e3679b531aede3a51fee4e17d733d3ec118372ebd90956ec42bb5fae6e01b93182d3ac05a5d9389566fb786acd8db647dce60a2f09bda689d6ef644b687bf6a176a6741eafd279789ad216d4a84ab29c0535bed292d27182bf5e149f2998673d04ba8eb3ebf791b6bc2abf1274cddd8ad263a29716b91ffbdc9e16d99ad272924acb42cff5b2dff67876bda63694f4fbaaa49fe2bb35aeea3f85ad25de96e260b2973e55ba1adc6f1e66eb31f2290da6782969a95ed15bdf97f68fe9dabed9e7533b4acba9d4f859667f32c57a781e736667e6933578aec63076a1349ce665dc299d25fa1b770abaefd29ed26b3a350beacd47fad38acead6c74ea40e9b45ff6a3d5994a5c2eebb58e947e33bcb42ecdcc5f999ed9ea44e9bcbf4ae719db5967d36c74a6d83840c5c6288fb50a353eb73d6b96024ad303559a8ef45496c7337eda07af5160fd09dd43cc55fdd285d273a697de93ec7d87db9aa6e61eee1179b91fac5fee4ae938cb8b5f4ed531d9df186bcf8b55dad6c547076569a75abfcbecfbdeb4cb6e8466574abf83a8f51de9f4736ad0e40bdee73782cdb5dd28ad66abb43a3060cba4ca9fdfe783e5a41bc5c91c152707307323df4e3f4667862098b9a3ee142373bdf4d486dbba3a7a412f75aa75cfdbe870301eb807a5c1bc6c4aef587b3ea298adb6244d9dffa6ac3778ad0a29ade6abb4ea9e412b6e834e2e5528ec8a1e6fcba68cf5a4242fd2b7a89eac5f1616c5dff2a3412f4a8362effd109ea6ff7e88a31f753fa8b6596f4abf052afd7a6a97795a87ecca461f4afe852af90b18bdea074ee3c3eb60e08cbe54efeb785efbbc391fd2f6a5a45de4adcd9f4cd5ff280b7e3b5d4c309af6a3342df13666a6d634d37ab3ec74ccbef4f4a7b45ceca5c5afeed978e9c1e572a46200a5e392ece684bcad6bcaae8f9a6d5f7c20a5e3526a3406cfcbf6b64225764b61b96255694562de16aecebbc977f09799dcfe87cfe8426cd0bdf24194cecb543a8f31aeb3d30a1ec156d87ecc8b17f3a3edee94b6a55ed677a4faa3b1760bbfd46a179624ea93f4de28a87c1b4c69b2dc4b8dadd66482f5c2841cc9bf07257f994afed11e6b066f3397b9ae1ff6a4743d98aa057351c6a0ad1354d9da8bd2b29c9aa3f533a36e7a1e7d08257d854afa09521e01f7136c6657d923d24b5cf59dc3f9442baed4ce097a8e56b52e9b3fad4a8ffaa69f1fcd87529a57aa34f7b3eb87f7014cd4d3c3288957a824ee28f98edcc9399c9273a54ace0e19da85a6a41c4149b94a256527494ad5da2d53928ea4245ded25df53eb0c53728ea2e45ca39273bf9cb52379698591447e6abab3bad66965cdb747842aacf7f8b87b7075df688a8b43545c8ccd699b7ab2ad4f91a2cd96bdbe63287d0fa5faf6b9d1779cad5159809a8ea5343d4ca529bdaa89da030b3bad5259e09e711273ef5b56cf1199def5b737c5c1e1548f31280eb69fcefb503a1fa1d27966c2c2b7cf8c09e6c5ebf801bce3879571142b47aa58915740438a7ec687d533a194bed997f3f194666bbd8c56fadd41a4bf12237b4d27509a1ea53f4fd18ff5f1d58749bee54783899406477b9fa7e069fa9fa770f4a3ee0795439328fd8ef132eaa15e394acfcb7b9bb3f423ffbe94fceb54f2ef92b12c414f5e5de6d3fbb1ead6df58acb6f573a4ad27df6531c9ee393b354c8fce5694dd4f872fca835feeeef2e1c9fb3ced65968c3c6fa7263c70f2fbf214c2b196f2d5f298f3a7333fcdc536342e7a6c81c481f3e6521b3939cbc1f7be8cb6eb8a62dbabcfb7c2e3ac2b7f0bbe9194490b555dd41dd54658bbcc3ac11793f8c93ef3edf1005e7ee659b95f5d68045816d37c426a87d3f4389eabfd45aee6f5e05f0688ed9aa5356596e2789e5a5c6d43cd5298c5b5bf4a76076082188989f10fc243437ab875b3ccfab5c26e7e4e66ce76c5623b549e39655c86552977b301a0e466849b869c940aae856d6ece344b3973a6cdea173356bd6a5e21cf91134cd2d600d1c66727cbecd667b9ed5d865af9e9b4dca24059873d92949d689ab2d9a88096dab50177cb1c72ac68d84781b2caea49ca4e3249591b9bb2d9ac50f47dca2c219c198049b6300b6c22f9af2231c6b1dcae60c1a34681ccdb2a92649e6c92cc562e32653bc4e48eb11b6f45ccf9586185a54c14885cdb3549e429e60b321039d17a2d394a93dc1d1805ca06cc4c5276aa49ca6aa3ea629cb0323e18b92612349d3d2449d369e12ca23d2341e41fed92449ebebd9a27c921b42850b6657092b2f5dbcbab2547d3a340599ffd93949d6192b2a664f324491dfed46d14c82b5a9524ef4c93e4ed2491576a8bb050f477a3d2e11ad23449d759b92b9e49fbe2933fbc684eb30ae9b8485036b52449d9d9a66b53a804f6b78b61a5bd8e3639439aac0ac6da7312ce7ac5a8b4de7e989124f29c5c8d91c8fdd512317c7c08e39db028d0f607eabd9e9b2bda920596cf4ef35d63c56c49621c350ab42d9a97a46d8349daaad99e8ebf3ed76eb145819c564393e46c34494e135751e4c9afb4c73a56d85655299a1fb0fe2f0ad42dda2b49dd7926a96bee893af762ec2810f8cb9e4902cf374960435713c4d9f99a5cd199a4300aa4b1b549d22e30495a7d647543193e74375afd82dbf64b1276a149c21a23c2c6d86ba1dc270124d77d544482b88d687ee1a25c1147599a674d4340dcabd392c45d6c92b8bacc3d38c981a2358efbd4ee49aa2e313d8e3bdbb52871ae5d7f46c3a2ae5e90a469532e3aeb3d233f43b0685692b2cde11cfaee1d092207774a127969eec6d564db2b8d4827fd940392745d6692ae16cc4baf40deb418050adf451dabcbb7c7d0a4d34380d5e951a0ac6c7192b22b4c52b633cbd4c8552d67884683772dea8f5e69ba3faa1e5f8b5e27fea9b949d2aeca5d6175570fd16acd0d9e9da4ec6ad35d788ab22879b78d072509bbc6741324b9192baaf304b7a179826b4dd2558fa58eabf135941c942f92890259f72d4d92759de90170f59c3b2f8aab22b8ba68cb8a2475d76fbf765a94e60c362d49527643ae868692844569146dd2902455379aa40acf76aa1aaf63199cb51705dade44b4dd6492b65a4c1e51739aae5120e943b4db604bae5afaa923b4c36dca2a22d23d9a8ac66a6f36edee93f301b025238a0b5dae470b5d6e3149595396a95b1ebde6451dd41dbfd5fcdcc0487b9cc2d94115a53d2d7c3324d074dbf6ea4d46caf9a3eef7eda64768d3cf0844751142e5d1490aefc85d0f13b7fc2b23337a31605192ac3b4db7f99364f1a66cd416255f5e2b49d55d26a96ae6a26a84dd0177cef877ceea5b868aa673d65b14e8bbfec8247d77e7b2ed1fa5e258b63049d23da6eb4bbaed3f95cd88c8b2f7c16823cfbdb96af7276d2b8a3398654549caeedb5e93224e93222a0b91df447b9feedf1e2363d11944dc3a9f5355bdaa042e9f7294fd591dfef8a54f15e1d32923d96a065b18f9040ac746a78cf0a33b4327f90355d029210569fa87051ecf4628f030b354e063b74a4186b65e81874d6a055a9b7675deeeadf5762feb6dafc36a051996481678aaa40b3ceeca4dff5c7224abc0d752e102df833b0559afd228c86aaf4181cfcd1d0559ae5d2ac830ab519066b77e818f61fe82949d3c05bed62817785a3b5fe0719cb3406b3b6081c7edd1e99f9b8298c8bc4c2f3d162e7dde969b16785ac8903ed5e40a91f46860d9059e17e9b82d2bfd7639da82a164786b03bbd34c7ffa530139535390665574ea5bd0c72bc8382823e704b5e7977ecebd002fd37349f6322d4828d03e98a7c0e73c7e81efbdf605590c4e1478dee25490e5a864f2603edc804b1ea857c80fe67bb0caffdf67e615f233f31ee224fc277a2f4e7fe6e15c8cfa0db0fe717be2bfcb6c6fcd1f90526b9592da642ba34b197c4d0aaa3055ba355d3d9b9dbda8924defe67b96ec083e629238700525b688a5d643de4f299ecdfa99a376a6296a17c493d43e6a92dae60a6a31a0fbb0556ebb297b2182a3b389293adb233a1f0b139d032349e75044e7e361a2b36724e96c9397a4f38930d1d92b92740e47743e19263a7b4792ce5588cea7c244679f48d27921a2f3e930d1d9379274be84e87c264c74f68b249ddf233a9f0d139dfd2349676dd4507ace249d7890dedbd0297fbadc7e327a1dcf275992d6e77361a50b493bc5e2f3e6bcc1ce661d53742e8b25e97c214c740e88249d33109d2f8689cebe91a4b336a2736b98e8ec13493a7f43bef3a530d1d93f9274ee81acf3e530d1d92f9274b64174be12263a7b4692ce95a8b0bf1a263a7b4792ce37109daf8589ce5e91a4f32c44e7eb26e984695a8a4cf797f47aa57e8c2438320f3645e6ada8abf94698c84cf96c4404c8bc0691f96698c82c8c2099972332df324966d30c64baebf3be111cf8688286e7de0e0b95bd2349e5d988ca77c24265af4852391e51f96e58a8ec1b492adf4754be17162afb4492ca1b1195ef8785cafe91a4f23054837f10162afb4592caee88ca0fc342e5804852f93ea2f2239354c23ae2f9cc59f82a7f4ede11ddf954b9c1de4e555344be8206dd3e0e0b91067b3ac6887c0611f9894922db31bc861caea36c802236cc16a7122d91c5abd67330f1dbca14c11fb124c1db7261a9fdad7fc5f686202eaa7bf63cca4bb72f41447e6a92485898408f64e2218ea1acdca6748d594f5adf14ada588d6cf4cd28ab776712b5c283666e5c0268d8d135d8fc8fbdc2479785759c90e53a44f43f47d918b22bdd47a68a9a84c2aec9d170e23743bd3609d6e8cd62b5037f24b93b4267758f2a2bcd2deebb542d4d751b6cb52d428fa2a17936654eb12c3719a7b59b5bb313aab9ba2f37144e7d761a2b3309274de88e8fc264c74f68c249d77213abfdd9ec31b329dd1a3f27d44e57726a984add83d455bb23c57554ea929ea4e454da1ef73d10cef27d9620ec8ab678abc6711793fe4a21d898bb07a576f0ed767f0195623b4ee8a462b7f0c23ad3d2349eb47a879fe532e8afa80dc1775634df3fb5115f3b349f21a6768fc80a6466bea0da6685c853ce62fb9a8a90b77989aba1c51f7ab49ea60a195b7e6b7d1a5fdc65a8c835071fe2d4c6446b127b33b22f3f73091d9278264f64564fe1126320dce7b1b23732022f3cf309169b0fd688ccc9e88ccbfc244a6c1edcec6c8ec83c8fc5f98c83438f1608ccc6e88ccbfc344661407d30a1199ff8489cc011124732f44e6bf6122736004c91c82c8fccf24992d58ea1111d439ca513e1ce2569624942ff5da8e53100e143fc4c4e8dc7717535456456396319354e2818d15f643391ad858143344dd6054acf3b6a715ba0779a3b87fec0e34c41b3749255437b0b00590a9b14a83641a1bab7c1515e92a26c96c6f93e9e510fcd96c894dfb30fb0ce0252209be98b5d87a3ae543de1138f6a93baa82aa9a2419c6d5f9d46d72992a44e7c8871a6b1aad4534563349635d44e38e7030f3cf88b8ea2689cb57543eeab946fefd03fead03f709ea46e77bde8c1ba2f75ae4436be4825ea890e63167613fa670ac6daf3bd28acbae88de9ab928f6853b48b1ff0615fb5a2689935700578a35e8bcc338968d50da6374b747fd80ecb1b6495a615d3aaf862a187ccf21475669ac313401f584eae4a227e46db4288a43c2bba3025ed72495305644752a53cf5d373a2c6ccc367f4145bb5ed8083568a1e6ce0f4684ee143642a37882f05f88d0fa6123d4e482415384fe81086d1036420daeed3046e83f88d086b968aef7de419aebffa1dabc9149e2bc7f3e69aa4d266f3c2db0e196996d282d3445ed5ba8cdd9d824b5fc336b8b18feece950bb2764d0331adbbc5c03d96393ed415a14777c5747a435ddbebd9ba8cf36764085b6592e872f7865321dedb7a5a7cfa27896e59fa87e6e9e8bfab9d70e523fff8e8a760b93c4c11741f9b8cf3291f85c7b382dea33386310853be7a2487bd90e8a0f19317ae0e209a6683d06cd88b70c23ad464f5735466b37446bab5c78cabe3b88a76c846aeed62689f3ffb55283fb788cf5a80b518ddd264c741afdbc91313ac7203adb86894ea3df943046e72ec84be687894ea31f413046e73e88ce7661a2d3e8273a8cd1b90ed1b94b98e834baa5d4189d37213adb87894ea3df323346e7bb88ce0e61a2d3e8d7a28cd1f91ba2b36398e834fa2d336374ee841a4a9db6e758265ec1d6d3e4a09bb11e513dd423ea9c8b35ebde96ff1b3d54ccd808e6f9c82e0bc244a6c1426e8ccc0d88cc2e6122d3e088913132cf4164760d13990617121823f34c44e6ae6122d3e0ba216364ce4764ee162632a3f86dbdd988cc6e6122338af391331099ddc3446614f7460e4464f608139906b7e21b23f35244666198c83478488431322f4264f6ccc5645a9f1d6432ad26ea3af632491c7ce30496c12c4ed30b8fe23eb28f9005f6de9e5bf0ddc319061b40c6a86c8006dafa8485cade91a4f2444465dfb05069f448656354f64554f60b0b957d2349e5b388cafe61a1d2e8061363545e8ba81c10162afb4792ca95a8061f18162afb4592cabf90550e0a0b95032349e5cfc82a770f0b95032249e51388cac126a9dc99a51e7e37944d6793183ff68e0b3ed23e9ea4d286c8c1f177c62671bf62494af73049694d2bb0d2ee71175b0f815ed1b3c17c44d89eb939dea1502ad63918ae68678abea7d070c55eb918e7e9bf838cf3b444c40dc9c5227eff9f6035388b686c43dee5a8380fddbec77fe2e346a27834ed38d4661c6692ca3a4cde103a9cc1d7448dd166ec035a5590050ecf8547ecb78378c466c8238ec8c5723e18f9763eb6baa39d9bfa166a5c8fccc529949427044d679b5c49b1c1148dbf231a4785e73c69837382c676783f84a81c9d8b0956bac9334d1a883046661d5364ee8faa99316122d3a0651a23735f44e6d83091697055a43132472332f70e139906fb33c6c81c8ec8dc274c641a5c496e8ccc0988cc716122d3e04a726364ee8dc81c1f26320dae8a3446e60044e684309169b0e7638cccfe88cc896122d360ffc718997b22322785894c83135ec6c81c88c8dc371764f247545bece41d8b513c6cb61f22737298c88ce251c8c3109953727da69097efd3f7324aaba9efd3ff83c6d0a7869156a39b488cd1fa0ea2755a2ece4ec50b0726d962f0b96f3e495161433a67f54f150ce5600181b141ba879123989e8bf9f0c2c408fc0a96b323ef8c4d626c41f4ed978b5177aa524a8eba1b6c28191b757f1acd05cdc8c5e18bdc0a77acc3177f4096b8fff66c1ec933e106073b8c91b909d9e3016122d3e0309c31323723320f0c13990607888d91793122736698c8343875618ccc4b1099b3c244a6c13adc18991722320f0a13990687e18c91791122737698c88ce287b4ce4764ce09139906fbe2c6c8bc009139374c641a5c88608ccc4b1199f3c244661417b05e86c89c9f8b0585789468ac187c2bb187364ad821d6fda25c8c0c191b229ecb927416e5e2d359c90f7494dadb4c56337a0354144f09dc8846318bc34668148f7c688f085d609250fead24f78af50a737419db2b511515e88526e9ea20d95f05c3df009f6e3133dc52a0c8ae8ae03acc8ae314c3387b39337c7a462b5334f741cb5e17e5fa436fdec9353892648cda3d10b52526a96da7a0563dbd36de166d91c555b1f0b2e5f63fa31e754accd4e812227871d80936d8063046f06588e025b99ac94c5e4789b6c01857653616b50f8cb7578db5068e47d5dbd2f07c793c8ae3a2fb212a97e562a33eb414965911abeda25eb183b5556f436dd552f3948eb3821c6224e3fb7b97dbfe72894df5302b66bef5db01e40ea1d8022a324769375394b64456badc24a50d58f28b7deeb66c4ea68c8d35a7daa10193b2dceef8ad480c98446f60a40eb2bb83c3f125e7e116c8322bd5e576a8d4ae920c4e7bcc3445ed12e425cb4d525bcb0af026cf3c8b8185f6cbce92aee815e226c81a2b7231eae97d976514d7bf2f443eb1324c740e88249d93109d2bc24467df48d25915d1b9324c74f689249ddf22dfb92a4c74f68f249dbd9175ae0e139dfd2249677344e79a30d169f41b29c6e82c4285fd9030d1d93b92746e45741e1a263a7b4592cef588cec3723139974da7d2fdd17783cb67db99a2f94734fe7e7878fbee06d73219ebbb6f45d41e6192da9d04b5bd2582733014678cbc49a8f81f6992bc969eedd2bd71d0e0823063db065f43a3496bc348aac1626e8cd45711a947859154830b1b8c917a2b22f5e830926af203c7a648bd05917a4c18493538356c8cd44d88d4756124d560abd418a99720528f0d23a9067b54c6486d85483d2e8ca41a5cdc688cd49688d4e3c3486a148fb7f8140df49d1046524d1e17648ad46d88d41373f161c5427b1dd372b6ca5e7cc3c14aadd7d6e46a9588b1954b1fb0249127e582486a5d9d237a4ffb007483c5fc0f5344be8c883c392c441a2cdac6887c0111798a49225ba3a20d1bbdc6d82bebc65b9c2cb53929b3573481ce152cca5bbeee46c49e9a8b317d6f4b68f93e9028ee887f085541a785894ea3df523546e75644e7e961a2b33092745e83e85c1f263a8d6efb3246e7ad88ce334c6f464c2e5d1c673db83082cb161ba3aae64c93743562c9d92227712e6c72bb4b949be6c5c8e6ce0acfd7afa278e2d74034b0717698bc61af489ec5f03cb2cc73c244676124e9dc82e83c374c74f68c249df7203a37e4f2d36315cc391964c7dadbf6325af9b1d1fca29a2996fe65accc7eacd27a21f965dfedb6c7cd588f7c37d44c3a2f9c074a477165c8cfa8b63f3f3ce72ef58c64d3e93c64a3178489cc281e967a3e22f3c2309119c5c3523720322f0a1399513c14602322f3e2309119c5d1a2631099978489cc281e967a2c22735398c88ce261a9cb11999bc34466140f4b5d83c8bc344c6446f1b0d40b1099978589cc280e815c8ac8bc3c178b11f86203fe191d678bcb8e3306bf19117945ae3ea0939cff89fa1934b3117d57e662d710a70f507344de0653e45522f2ae0acfc7ea0df6bb8d7d07eb01348679752efc61df1dd41f5e846cf29a5c8c58c2d83a1f9b5c65efa67418d9b1c6d8cf422396d7e6c23e7bb21d7339eb67c83eaf0be3887aaf486e613915f9cfebc348abd1114c63b47e868afd0d2669ad2b68e5092fb04905ec12931367554d1573868af98ddbb36994b3cda9071ba31215ed9b4c52d95641a59fd3e20df6c38df57f6e46e46e0933b906478c8c917b0322f7e630936b706cd318b94b10b9b784995c83cd7d63e4ce45e4de1a66720dce171923773922f7b630931bc5cf9f2c45e4de1e66720dcec11b23f72c44ee1d6126d7605fcb18b9e588dc3bc34c6e143fdd733522f7ae30936b70059e3172372372efcee5f73a9c3157e7584077b7171f1568b01a2b3545e91b88d27bc2fb15af28b6106e46635af7e662eb5721dbf1b67ebdcf9224de175efb8ce290cc2c54f4ef37496d3d966eccd5e027266b99a22e0f59e503b958a2e36d4362df48ae773a12d9e1836122338aeb9d8e42643e142632a3b8e3e35044e6c36122338a3b3e0e47643e122632a3b8e3631522f3d1309119c51d1f6b10998f8589cc28eef8a840643e1e2632a3b8e3630522f389309119c51d1fcb10994f8689cc28eef82843643e95eb75501499eec13883def30453b416a131a3a7c348abd1c93a63b4ee84687d667b7e33dbfd091f835ed4d8077cfab02495cfe6621f481febdf4aebe6528b899c6d653076d0c55d88bee7c2fb611e839669ecdb323ba342fe7c2e4ebba17ce730ebd5e58cef11e19f82e69f3f31795ab7293a1ba31afe8530d139309274ee89e87c314c741a5d9567eee3e4a8b06f0d139dbd2249e75e88ce97c24467ef48d2b914d1f97298e8ec13493acf4174be12263a8df6dd8dd1f922a2f3d530d1d92f92747e8de87c2d4c74f68f249d555043e975937476b4e99c64270c6b392a6c10671fe824eb353ee80103753bda998b852c49f41b61fab2f140935372c606464a62493adf0c139d032249e75444e75b61a2d3e884b1313aab213adf0e139d7d2249e74fc877be13263afb4792cefec83adf0d139dfd2249e7ce88cef7c244a7d10d33e66a7654d8df0f139dbd2349e72b88ce0fc244a7d113498cd17906a2f3c3ed790284bba01b5ca2686cb3413bd493ff282c54f68e24951b10951f8785ca5e91a47239a2f293b05069740db2312a3f45546e0b0b957d2249e5c388ca4fc34265ff4852b9168d787e16162afb4592cae188cacfc342e5804852f931a2f20b9354765050e975a5927b69a2c1e98e76a6687e04f9d12f73798e68ea4e61ca7ea3788ee85d88d6af72412bddc9c427e3617b35b821a1be295ad7b124ad5fe7c2bf82b596a4ed6c1a2cf8c62cf44de45fbf09d3b70e8dae6032b621e14134e6f96d98e834ba82c9189d2f223abf0b139d8591a4f32a44e7f761a2339adf9bb905d1f983493a5bb2e4d12a0bad1b9c4e7e4e38071c69d7e5fcd5e1f64a11e7330f4ec3aa328215d24da86eff31174d264cea24eb710e385634fc4bec1d1fce57648b7241abb16536f310ad3f85e7e3e551dc0edb1035ea7f3649259faca960cee13ef3ad1b936d01c65bd165e668ab678ab64ec8027fc9c5c657fe4d8545f622c4227b3962f90e7420d53988cc5f73f5211f5ca8a3fc15a41188bcdf4c92d74fe10b9dd3bca65842ec63093d9d95d816b95c31aa5461aff2acb0427075de4dbe036b43b96dcf36d9841a6c2a2bce40ddcfdfc3f395b97e913c28681e6a8ffe112632a37850d02244e69f6122338a0705cd4164fe152632a37850d05c44e6ffc24466140f0a9a85c8fc3b4c6446b167741022f39f309119c58382f64364fe1b2632a33854b73f22f3bf309119c5a35217233259b5109119c5a3520f4664c64c92e9efabb206eb72635f95ed843a937926a9844191feb91f14316687f7213b8c9b246f17967ec3eb54c1c976dbea6acc3e7bb224c555b66751973f816a8c4a635f49bc178dc157cd45511fb8038d7f3e898a7a3593e4e179cbd99610f36d16f857b8a7a0698de962922dda136c9fa3c25ddd24a9f511a91509af19f513e986219bac6192be76ccbda46bb9ed0ba9b59ea3c56b6e8f69b03b39db14c11f21826b86a7f231d8643756f9f440edcc5a26a9d4fb1a4c143f73fa39b2d2dab9b0526f5dcb288e6c8e4515529d5cf4d2f1429a91762dcf451e6edb63a97d37baab927a2332eb9a24b34506ef997a6e622f933ed4587dff36f2a1f5c246a8c141396384be8e08dd296c8446f104b07b10a1f5c346a8c116a8b943a711a10dc246a8c1e93663843e85086d1836420d36998c117a1f22b451d80835b854c118a12f20421b878d50830b698c11fa1c22b449d80835b8cccb18a1af21429b868d50838b108d11fa1222b459ae0747d4837853ed5151decb5f60c32d33dba35f688ada77d0e048f35cd82a8c91ce477d780c9c54c128a1c67af50bd02c528bb0116ab0456a8cd05310a13b878dd0281e20300211da326c844671bffb3444682b9384f2cd5bc58951d071d6830b4585b43082b57a2396a4ad752ea68cbdcc1eb93fb4678c5463c758fc8beaf3366124358a6783e4a102de368ca41aac868c91fa1bb2d4fc30926ab02a3246ea5f88d4766124d560f7d318a9dd51f1df258ca41a1c2431466a2f446afb30926a7028cf18a99d10a91dc248aac1016763a47645a4760c23a906a7968d917a1222b5934952fd7fd2348a4b1ffaa211d2ce61a2736024e91c87e82c08139d3d2349e76054d8bb8489ce68ae739a89e8ec1a263a7b4792ced3ff5f79f7015f4595fd01fc46441141292a8222a2206023bdd803848e20012ca01892904402092441b08b0d7b077b170bf6baf6dedbaa6bd7d5b5f75557575ddb7fee9d37ceefa54060f777df39f9af1f1608ef0d2f5feeccdc39f79c7381731b499cd92a391f03ce6d2571e6a8e4fc0038b793c4492d8da571a6c19d7d7b499c792a39bb01e7601f09e12d71e2e1a673d36d69d9f5cfc3a99e2e0953630dfcda30323324616aec0276198ccc4c49981abb80dd07985992303576013b0830b325616aec02763060e648c2d4582b570f98b992303576019b0f987992303576019b0b98f99230357601ab03cc0226e6a6ab80999cc5449c242d66b15e0aac3b4864a5ee034b63cd00d61d99ac7d9a615d957618c49b14ad1dc6ee80bb93645ce2748a869b0fb83b4bc625dec468b83d007717c9b81abbe4bc0d3979bb4ac6253eb2d2706b61e4ee261997185ca1e14e07dc42197577434de32d2da8e3761a8bf622a01dc2a4ed6cb0666458f0f38cc0a222513d4283a37573b27b09457043d970b526dc0cc5bed5f6c1ab375127511a1cad53e8d600374cd2ca67becaaaf981b0be542489b340256711700e97c499a192b30fdc5e4648e2d4d9226338708e94c499a5927301708e92c499ad92f31ae01c2d89334725e7abc039461227759f2e1ae7f7c0395612679e4ace4e30511a97ca6eb6f1470ff782a751d2fa365443606e7726e596cd8cccd6863770cd899887d797857c049cfee3352013334769c80700f2040dc8c445121af21770b9d843033271b18486fc3e204fd4804cbcf1d1907f02e4620dc8c4056b1af20f803c490332711985863c106e7c933520131f3968c8fd01798a06646266160d796f40de530332b18e85863c1290f74ae58645c90fcfc48b02ede17903a0dc5b0a25351c4ea33c0d28f79142495da8a151ee0c9453a55052c3e034cad781729a144aea020d8df23aa0dc570a2535fc4da33c08c2dffb49a1a42eccd0287b03e5742994d464201ae5db40b9bf8f6a958a1631db52e3cd6b4dcc5ae2e39928ea546e5f6cdf5e6becaa57ebb7c724060369099587c3cd69860664623090865c05c8a51a90356ef4ba1720976940262ed0d090470072b9945903b52d226dd6b00d50ce944249ede147a3bc02282ba450521b27d1280f05ca4a2994d4de7d34ca6f80b24a0a25b5ab248df209a03c400a25b5671f8df21c78589d258592da4d9246390328aba550523b98d3283f02cad9a9cc6bf556703e974539c9c494739894dd129476d455baacea3263f3abe7b9afd6ba9249fb521a21ad3cf77820acf191b4ded268c4c3d1b718a635497a1872a16a257152178c699c2f01e75c499ce92a399703e73c499cd4cc101ae7edc05997ca495132a7c64e7def00653d937283955046df293530bc94c5f80ccc2d1b988c031ce3c8e0b775665ca050ed146adda468a2fb30b600adc17d35bc044c37b31cfc90e03da5c1afc3bf6a78f07379f0ca321e36ad406d304c9de6b377c3b5df7b98b8589c88aa97ba8fa12f357100b01de863d29ed1e626ed8703e102df3d239b4fa16ddc778fb840bce11a24d66de1eab950222bb5fa94c6fa3e44340ff2716f6f69d619dfdb895324dabdbd014efa83533bdb0c0f55cd9e26d13a44ad0527fa214cca5e09ca7497c9549e18910dc1d16bdd9bea83b7c727be7de53cf72a7d93a1db61741e9acad1e9ad47292daa79375c2f0f6352f6338db33be299e5aaa5d068ccefe80b1781c399cc9bb7fa6e5f18189539d8e2a47f0a22efebed48bc5702ef11a9cd14c5037a2a1ba7f5353f0b022547fa787aca0e7ecc4efce525ee26e6e9e989166b3a11081731093704c2b833e928f7205a6e16f882a4ad642e817bfe514cc8de0e72ac8b36d507574c7b0adb174f327b055f4d59648906bb29c01e9dca25e2e4c0b2c63dc8a601e5314ccaf5e164c77bbd87137c0e0b6f22e01deb63ff9cf426a1bab673b53c14308f636276087e5395985f0e33614dbbbe07ca8ec0b538b5d740ede18ead60c2737caac31d85c183e50477ffd61ceeb81346e7094cd2be401aff3cdc1da0cc3d8ddb43c7a8c90f8e7460dad3f987007ca28fc7471cb3538217da9b4e4df0c1eb82039607ffcd0ade30237111d03b6e7f01d693f853f6c6e33686c5711abdc9032c6d9eb908aeb127fbd841240adac50f96431de99c2637304c9925863c6813a74f81f614266dcf662e05852e905ce590dbcab5f533b8089cca04ed92002d087ecc0fbe683342bcc58f68d3a98781ef34893b365253676991cd0658f6385d222b354991c6ba2db09ee123e7b3e538fce4a45b5101f359aa138bb3146e46674ae2cc57c9391a38cf92c499a392330d38cf96c499ad92f33db8d32f91c499a79273308ccea592387355726e009ce748e2cc50c9b93f9cece74ae2cc52c9f934709e2789335325e7b1c079beaf8073140499e03e4694f255e70e59e2fe820926dc37345a22d61b197d00802ff01114c94a455084c67707f05de87b8d290e2b0f7301ba1213d51d791891b438d300b8bf5f24693fb17c6626086d84664242e2c592380b54728e06ce4b247166a8e4ec0761ba4b257166aae4dc13382f93c499a5927331705e2e89335b25e7fdc0798524ce1c959cef00e7959238735572fe0c9ccb2471e6a9e4ec0213a5abe4ec63ab3113646d7822ba9adfde229932b91ece26dbcc0efeb3bfb6255c0dee90457f26e34c726a515884885dccc2ded9c4d8d74869f9470d2dd3c66d17b8a25e2b85921a56a6511e0794cba5505243ca34ca2ca0bc4e0a2575dd9d46f914505e2f8592bae64ea3bc0a286f9042495d6fa751d6c3ccf3462994d4b5761ae58f302a6f924249cda0a3517e07a3f2662994d4ec391ae56d40798bccddb8887b6dd376e3bac6c4acb7f2d7da9befa2187d976db173e276007c9b9cc6a9f93c4a5addd110b831ddeea3beddaebb97bb113adb57d202add3521d8cc33b7cc493a2a2ad1926acdb4cae286adbfb690d829bd59dec76a9361b6446205061c6062fac48dcb82a145e2bbbc118fd8b8f1e0c2d858f93af9559cc7d366957cbde1040be4b12a6c6d62a7d00f36e49981a7bc96f0898f748c2244ee069983d01f35e4998c41d5d69986b00e67d923089bd9069989d00f37e49981a378df819a6460f48c224c6926898bf01e6839230353e950f82d3fc214998c40df36898db02e6c332f68621dec797b218ff0dcfdf8ff868a3b22ae582c4db0fad24eb6a18978f4a03d558e3760f803e260d9478cad3401f07d0c799a07d4cf30d7a879a6af7b5142e62d016df7ac184e90989bbc564324374b4dd626e80dbd49312593354b27e05eb444fc99991e6ab0c239f0dd7d5a725616a0c232f01cc6724616a0c239f0e98cf4ac2d418463e03309f9384a9318c7c2a603e2f09536318f934c07c4112a6c630f2f180f95749981ac3c8a700e68b92303586919702e64b9230358691cf01cc977d64cad9063fd151b56f5e7214e0fdcdc79e592b4edace75dbec106f36ed59902f4078e3151fa9afd827a96980ce437fa4ed5894379b98f2555fbb13c53f8f48b4408b6b7e35b73ffb1a305f63620e32c9a9b0334db86b415960623f8a2df86f3051ffaeba664f7ffb8d79dac8713d16f8e510907b9d096e3752aa3561033fcc37d67713da0cc6e81b3a36c6253e5cd212b54f825bd49b3e22f011b39d1e55c06e302dcf40353e662e8213fe2d1f3bc4e014aaf5639618f5a48dd89f80f66d1fcd519136bce35bbc3966b4eb0352bbc2c5648da90eede0cafb8e9c0d493546e8a700e5df7dcc5a5b57fb96a77221ee21b855bd2b0953e3c8bc0f30df9384a971ede801c0fc87244c8d6b477701e6fb923035ae1ddd03981f48c2d438a9bf1d303f9484a971ede84ec0fc48d2961105cc050fdaa47d1ec4ec3f96c4495d3fa2714e03ce4f2471e6a8e4ec0a9c9f4ae2cc56c9f9ab89393f93c499a79273188ccecf2571e6aae4dc0638bf90c499a192f36038d9bf94c4492d30a471be099c5f49e2cc54c97909707ecde4ec6f9aa638eced16326c3cdef6582a74bfae81ba0efbed14051fb6ca7ddd4b02046dcdfe0b80fea7ef15a5e64b65861adb16bdd645efa3a40862c4691a8b761f5851fac6c71a68726ec970778032b740670f9ddc278c3e62690b756fc388fd56e61eefc42b2e6d8ff709305abff3919d67531bcbffcc7b1ae5c66ab95960b4a7399e05e3f35f926602052aeb8f67c2b4ff7b499cd4121a1ae778e0fc4112678e4ace76c0f96f499cd92a393f806be78f9238a96b9e34ce4c189d3f49e2cc55c9b91170fe2c89536767915238d9ff238993da6391c6f90270fe2289335325e789c0f92b93b36b8233c33db77bdfcd9db6f5f8a300f89b8f4cfbd5892c253fb7135371fad29821e1e17726f3262639d3bedcd18507696b79f685100cf9c347302442ad322dd52a4d67469568c190d700d2fe738980249671d3206f02c83429901af73bfa0c26f16b4881d4b891eebb00d94e0a24f10e4e832c82537b4d2990c4293b0db22740b69702492c3ca0415600e45a522089e53034c82900b9b6144862833f1ae4b900d9410a24b1da8d06790840aec384dcaa11a44da5695c27dcb6372b7b0a9ecc3b32a9a3805ca9694dc1ab0d166bac397a08e69beb4ae2d4b98bcc8bc0d9491267ba4ace6b81b3b3244e6a5493c6791b70aec7e45cb5dd5d355611e7c11d7f7d266514204e4e439c12bcd42676d59871c10ffbabb8390b3d0991867a308ccf2efc69d40413f65e0a274475ee2061e7b0616e825462a2665729db2381b68e946962eaae3ec6efaae67b6accf65c1b2e0add24a21263f434d43501b5bb4454e24c8086fa335c693790884a8c94d250bf06d40d25a212579668a85f01ea4612518941141aea9780da43222a319a4a434d831bd5c612518991551aaa01d49e1251890faf34d4dfe0f4ef251195b82a4543fd155037f1115c693953547b12c40d26a6dc9449d9254199675290234aab3ebe1ff87aa736cc171eaadaa1124f6a5a986427586dda8c49196d4d91d108d4c338a4956a17c138ecc3c45bfd7d3889776fda8691a7c098dc5c226b864ad64f60a6d9379557cd644ce255732eebc47f1428b7f09157b2e28990dd17961afcf88905f938406e29059238a3a441de0590fda4401203c734c83de1e6d35f0a2431584c83fc0346e4564cc86ec16f6ce297ed046227e2f3828f5b1bfc3a5ce91c6bc26e21d50a1f133b9b98700093b09749cebab3539e0313018be451e929da3e87457a3a8cca814cd2ff6e2b148d9bf7dc0eb48398b43d5772e51c12bcb5c65d0aec45214c0e23aeb6d3c21c8be056b4b53450e24a3b0db40a40b791064abc9ad240c703e8b6d24089d3781ae83800dd4e1a28f1a644032d06d0eda58112a7f534d03d0074b0345066588e05ba3f80a64b032506e768a0530134431a2831ef83065a0ea099d24089391f34d03200cdf211896f5dd507f1198996513fdbc494d94ccaee265ebf0cfff251a6adf49e7d1f107398883d567282278fc76ce643266d444e83933b5712a6c6d3fb00c0cc9384a971cbd2bd01335f1226715244c3dc07300b24616adcff752260ee20095363e5e624c0dc5112a6c6fd5f7707cc9d24616a2ccf9e00983b4bc2d4d86c720460ee220953e3feafa3007357df29872d6126970b6aac6d2b8125e1dd24b266a8645d0f580b7d2731b47ef72de2b49e96d25d011782213e1ab2b436d649dd378616e9dc1038874ae2a4ee6a44e3dc0d388749e2a46e2541e3ec0dd7d122499cd4bd0f78a31338874be2a4eecc41e39c0d9c232471529fe4699ce703e748499cd42dcc689c7f05ce519238a99b44d138bf04ced19238a95b98d1383bc244690c93b3b769ba1174a1297516b6ec00b7cf8dbe6b0f1dec684bc59f9a1876ac8f71dafa6d4a898f9bb4eda26ad262ce719238f35572ee039cbb4be2cc51c9d91938c74be2a42e19d3387f826be704499c792a397781d1b98724ce5c959c9b03e744499c192a3917c0c95e2c89334b25e7ebc039491267a64ace0b8073722a7b81249fe81ab746d9089edca748a1cc5249b90428f7944299a992723fa0dc4b0a658e4aca0f81726f2994d40c641ae5bd40b98f14ca3c959487418473aa14ca5c95944380729a14ca7c9594ef02e5be4cca7ecd50aedeeeedc4dccfbe2ce60be13aba9f8f2655767963a69997f8f23063fb298580ba2bdf7221e8319d091935e2cd484503541adfb3c0b73f932fea1e6bffe299ee648f8e3d27f1121a1e2de738b0fb13afc447726ccb210decc8e969eb872e2cd60380750693d59e55656e3c960406d5c19bc30394bb17d85fd7047fd3245399f868956e5d5de35e5a1b0369a98f0600511fbab065b9dd09ae6df57f7f19a649653e669cadd997983a15a2517e0653a1721f81e152d3daed7235d6083f0a77f4999238a99d3e689cd7036785244e6aac9dc679277056fab86e625a57bc25e9a4848887442eda3dbd3f5056f978846cdd0a90be1bd07b00798014488d77f25701729614486299350df24780ac960249cc22a641fe0b20674b8124b6a4a041fe019073a440121ba5d0207f01c81a2990c404181ae45af0d8582b0552e38a4f3b809c2b0592d8ea8c06d91120e749812436e0a341ae039075a95cce4d7ee6d6d8fd685da0acf73126335cd0377ace2e724b11f64ddad7193bc27dbbc1471c28ddfd7ff473f8618a4cb53b68d49f831ebca0ede26237768b38e7fbe87dd4bab01a35bf8d76928f83b179a0244c8d6d212702e60249981adb428e01cc85923035b6851c0b980749c2d438311a0e98074bc2d4d8167204601e220953635bc842c03c5412a6c6b69045807998244c8d8df18b01f37049981a1be34f01cc237c3c50461944e1616adbd8dae327909075646a6346e1a1ec933a75f5919658b023502e4a2565f236f3444ada36f30f40f8ed281f5d8cea4d65f0c775a6a55a8a492e0067afa933ddc166734ff70a16ec5813c31eeda34c25ba7ad698031de43c13ed065c6c8699316648f086bae0ebe1d72698b0bac2beae30f824555ce6f3da91982be152708c8ff280743786e3e42c0f2163da757424dce18f65e26d02782566e5adcb34c7e1e703ea714cd4b0737671f0fdd79a5af7b2fae00df15575ba99e5308738f25989030f0f7eb6a555c422015acbbd6de09abad847394b3c23b5e331ccd21c155c4d9b9b99e69a6cee35b43d8bf531b8861ecf64ed9a60b553f83a38f53d9df2b46de94f8053fe041ff3d1d6a660eb7be82c8453fc441f75402d4ded9bb61fcf623ec5d3ae995fc3c97d923450628c8906fa15809e2c0d9478cad340df03d053a48112efe734d0b700f45469a0c420090df463003d4d1aa8c6ded91f00e8e9d240892bef34d0cf01f40c69a0c4bc101ae867007aa6345062d6126ff701003d4b1a2831a78e06fa05809ecd8f33b5a60f5273b17be28c9416bb7f139ee797f868d913f63eaaf11b0ee16dd26462bea53ec37436a97b8aebe7d1e0185b5eaa234eeb694b75cfc1097f8e8fa58e9c46a7bd8731494be72e863179ae8fcc90d6556c64a84cb3298745e3f324616a4cb3990398e74bc2d458683003302f9084a9b1d0a014302f9484a9b1d0605fc0bc4812a6c64283fd01f36249981a0b0d2602e625923035161a4c02cc4b25616a2c34180f989749c2d4b8b2be07605eeee3a9bc3598d80996dacd70318bf51860bd42222b75224f634d07d62b99ac1b04bfa94bcaa12b0f3ec644f7316a5c24c9aa84e93634c6f5588cfd4dccb88c9dda556bc2ded9e56ef4c58cf663db6e0b0b1466736e018057c988b20f358d771ba0369a9ac6a23d124ef1ab7dd417b57645285fe512f076101ebe461267814acee1c079ad244eea133b8d737338d9974be2cc54c9391a38af93c4a9337de630e0bc5e1267b64aceeb81f306499cd4b62a34ce3780f346499cb92a397f00ce9b2471e6a9e4ec0c13a59b7d24cbe49b68d79630cb4377b2cc8326e6bb2595b543f147272f64d09ed5cb206deb5626e58e2639efa8d6c4c5d4c945d759b0a543d3e7f6ba3f8bb2938bb3e3f74c483a323186bf13eb1fe534b83cdce6e3f290998acb036d4cdf069787db53d9ea22f9f2a071cf82ee70dfbf430a25b5208646790a50de2985325325652e50fe450a25b5c91f8df225a0bc4b0a65b64acae54079b714ca3c95940b6002748f14ca5c95946b00e5bd52280b5452fe0a94f749a1cc5749f90450decfa4ec66e26aa14a17332a73d1236f7b17d09682679a98f0011f4934abbe4f3531819bb64ff5f5c0faa094939c5af2423bc907c084e8212994d4062a34caf380f2612994992a291702e5235228a9ada369949f03e5a35228b355523e02948f49a1cc53497916cc2d1f974299ab92723fa07c420a65be4aca0f81f2492665b4679ba52a771d63ed478df389b5afee1c6662c8a77c4066b451c84300f2691f391d2dada2e3e1c275748df5958fc04afa339238a9e98534cebf01e7b39238d355725e079ccf49e2d4594c7d07703ecfe4ec14fca6a5eeeffa6e39bde196f302bb426d45f3c9e83ba5e6072d65313e0d73c9bffaae9f6cbec02ab9555426b507ec1aacf51d78067f51222bb5229dc6fa26b0bee463c25ed04627ec8be1eaf932ffa633dfd8e2d49aa45b0eb19eb72f8b6d20b0fdcdc7f86be9a6834b63c41399d60fee17b8edbcc2848cf6bd8a7285cbdcf82b315155f98af66623c2d2f6145a0f605f65c2f66b049bbca14898483d39f8601639fa7948f06795ee7250957835b99b076dcb917ec0fc1a93794023e66a3776ed99591a1c36ecf86a77170ad3109a8f737aba58d0ba285c0d77fdd77d370168fd4826f6f9a08de301308edf60d2464d4d6d28393aaaf649d421f0e4fea68fcca3ace0c7ecc45f5ee2f6c3f244480b7e6c01846fa5b2fc2a3996a4b1f7e65e26a67c9b4d699f8266065f68085e52effacc8491a5f050e5eea5f6d735c1dfc97bcc6451f600ca7798941d83df541bbb65e8d8a4fbbabe6b615f20fbbb8f27239b8569efbe61a15e919be2d4186fb998dbb1200d5c11dff5115d6f39177372d25a790173eed889c5391d38df93c499af92731470fe4312678e4acedfe1aaf9be24ce6c959c6f01e7079238f354726e0f27fb8792387355727603ce8f247152d782689cfbc1c9feb1244eeaae9534ce2781f313499cd405601ae791c0f9a9ef9865eb1b9712776ca155abfd0e31cbcf98b49d4db876690f629fcb2d6649f032bb3a54a630acb1258cc9cfd98bbe769cd9038c4a8cc5618971a78f6d5d60fb82c9d6ddc431f2f02f6f3b09071f01e29752d2ffa9131f1a6567580efb4a0a2575d243a33c1628bf9642499df0d0280703e53fa55052a34234ca2781f21b2994d488108d7219507e2b85921a0da251ce8169f7775228a991201ae5b7302aff258592babe43a3fc1446e5f75228a96b3b34ca5b80f2072665af6628b16b6b7237d6c9ee30d4ccb5ca3412e9e640faef548e4e3c1cb5990e2dbd6507b866fe28a9ea8cdaba84c6f90c2c46fc2489335d25e78dc0f9b3244e9d3b9cdf059cfff151dc67b389e23a9fe88fb56757569898f1171f8b10f5a632f8e3ba1697204624de905c8b46bcb34f67d10e07da5f7de4fe66b6b9dcdf5d81f037993592c46b27ad46f23b9828fdce648d3afe67981474fca7e55fde02a3f20f7645841d730b8c4d9b8e8ba7e2351f7d8f907d00cf74f074df8eb380e3abbeeec5b27780318dc9d8c3acca6c92ba4334affb0b60ae210953e353f8ab80d94e122671075e1ae67380b9a6244c8d6d745e04ccf69230895b79d1309f02ccb52461121bd4d3309f05ccb52561129fbb6998970366074998c42e0634ccab01731d49981a6396df0266474998c41c5f1ae60f80b92e13b38f891f246d50cd628e74eb8fe312c5cd55a6d665fc2657e8daf7cc73afe7458858b8f7006e2726ee96e67fd3238678d7a775d6f805c2709d352013e7a934e47701793d0dc81a7b1dbd0cc8eb6b4026ce6b69c8770272170dc8c4e8150db917a4e374d580acb1a5544f40eea6019918eda2216f0cc8dd352013e3b334e4750079030dc8c4273d1af26680bca10664626c8286bc09206fc4445e791e6a78a8b0c12af1f6466bb07a0250f66052f634abdec58138366995f25740aedfc6d2408957541ae83200ed290d94380fa0811e04a0bda4811267af34d04301741369a0c49b120df43000dd541a28315240033d09407b4b03d5d80fa71e403793064a8ccad2401b00b48f3450e25a020df44000dd5c1a2871058c06ba0040fb32413731f11a6efcf34477b01a57d453e41e38ed8bed37e161ed96b671ca492646dd8289bafafb7511eff7b4a2891be1a97e4b89ac192a59bf8655ad7ea98c3b256312a7f8735927feb340d99f49b9b5699a5e84d5f959cd3412ac0b5e111561c4bfc2a6ecc4392bad14a80bdcc0b66292479554b926059554b434a37be1563580c917ed2d63effb96abc2d4f9c25bccc2ab04bc81be264f51025c7c0a8f0ade3cc1d84da7169a28a3506fe2db9670420ff2710dc5dbd1ffcf6be85c98586dcd24ffeff6eed29803b011d06ee36372d5fc2522fa3e3d5c186805978fc1d5765bb9a354e3d2f31418a5dbf16f64457f36f118ead8c2e7fd590e7d8809f74a0c0f393cf8b93c3814b193336dbcae0fe3757b266a5738f5931326bc4caf68a3720f98090cf651acd1724244f2be731a2b5fae82533c5d12a6c6ca97eb00334312a6c6daff0b00335312a6c6daff4b00334b12a6c6daff2580992d095363edffb9809923095363edff7180992b095363edfff1809927095363edff5180992f095363edff318059e07bc5b325cc4217edb4c16672b30f5adc7e1e2cd3ed2091354325eb2060dd91c96a377b8a1bca454b1fe5c1cbf50539ecb26284b613136dd5b792d658a8500b31a39d2571e6abe49c0a9cbb48e2cc51c9b93e70ee2a89335b25e77fe0dab99b24ce3c959c436174164ae2a446dc699c5b03e710499cd496d9bc022f38d9874ae2cc52c9f906700e93c4496d2c47e3bc08388b7c34d5b6546d6f338c138071b88f74c4cc46cfe79ad7cbc703de08df0932addfce9c1888a36d673e0a421b23d9b91c252e03beca9ddc710a979730c74e2cc041303647f9b8ddb474b31912bcb5c6d84aa392e04fc9db00d29264bb436078b4244eea069534ce5ce01c238993baf9398db33d5c2dc74ae2a4b6d3a671ee029ce3247152f793a7715602e7ee9238a9bb77d338cf00cef19238a9fbcad3389f03ce099238a9e90834ce4f81730f499cd4fde5699ced60a23451e6ca39317a445b39cf86515aeca3ad45d45f71ce9f71a39653673466214d86713a495274b340652fb059b09431591267be4acec9c0394512678e4ace0ec0b9a724ce6c959cdf9b98732f499c792a39f36174ee2d89935a4640e3dc1438f791c499a192b3164ef6a99238b35472be029cd3247152f70ba5719e019cfb3239b7304dbb274c701f232aedaf73870c77171be64aac4b9c548d7b9aa77755a0b54a7f0488f76312f733abbf689cfc844f2cd8eacb627e181e48a73399ed5f8d4d00ea1462758531b93f136b43b3e25d1a939fdc6990b416146bc264a9440a2431404783bc0a46e40c2990c4441a1ae44e00592a059218e1a441e6006499144862d51a0d721f802c9702499ce2d020c701e44c2990c4a71e1a64354056488124f6efa041ce02c84a2990c4ae3234c8650059250592d8eb88067925401ee063fdbce5f81076db4e2ee9a7b17661b12e02d6594cd6ad4cf2faf90cd3b40164dbde68fa0708645433a9d31b5137b40859b79a9124e2b49f161a7904f867a7b2bd4ad33c7a7dd94cdf4178648e244c62ac8986f93d60d648c2d49867f70a60d64ac224deb26898af01e65c4998c4a9160df375c09c270993187ba2617e0c98759230894ffb34cccf01b35e1226310645c3fc27603648c2243ef5d330bf01ccf9923099db95b130bf05cc037deca8113d8056ad70294e63c4fe1d78985ce0235ba9a5b01e1e2ec4d45874703f8ccc859238a9759a34cee781f320499cd4cd9d699c5702e7c19238a935ee34ce9b81f31076b3d36a77dfae75b1cd92e025f60e4edc128776efee6762b44353b9d568f218d4b837c1c6503278988f8653981a3b3691083b2778e342a37953b1c761441eeea3e15446f0233aaaa76e5d4b5978a702de114cbc2d9b198323833fb449270dc15bac49adbb2a4e741fcd3ee33498283dbbcec708a55d33ef03e42399c8b9cd5c3393f7c38c9b51355d58ab733bb7d505bf8b7e0edfdb7c032b6a549ed6c46a57785e5ae4e339be7553a83c95db3e1d0313a8a324616adcf6e958c03c5a12a6c6a9d59180798c244c8ddb3e1d0d98c74ac2d4b8edd3e180799c244c8ddb3e1d01988b25616a0c87d401e6f19230356efbb410304f9084a971e3dbe300f34449981a37be5d0c9827a53680171eca3ef35357d86985d78be161f2641f39f5367812778cb71fd83e972ff01585a285f0ca4d0c794a2ac72466d453c7e45c16e5d310543e9549d93df84d392c66149a29aedf428dfbd045c147b2c9dcf6edfa02761bc1783ccd478d07464587067f581bfcaac17d9c890ed99ee6f34c1876a3c7418bd348ac03e1d6733a93b59769dc23b1dc1c98281c483ee13d1513cc618dd413e1743f43ce959338cba45d397bc0ddfc4cdf7b6fb4bee288384a6915471fc0897f968f89527e1b9d282d871bd3d93e4ef7d63d09698c1d8d01ca254ccade09cafae054ae3275ab74b213616927fbc970b22f950a4b0c1dd360a7c2883d472aacc682d8c9007bae54588df7fd1d00f63ca9b0c4a77c1aecb9708d3d5f2a2c71e198067b26c05ee0a38d7febab363354d614df014f55174a03d558f17e13805e240d54636df1b1007ab134508d95ef4703e825d24035d6189f0aa0974a03d558017f22805e260d5463adf1c5007ab934508d95f0e703e815d24035d61c2f07d02ba5816aac885f06a0cb98a05d12a039c18ff9c1176d5d88b7c21b1adfdd26e6bb8a5dcbb9d03d93db2565dbedaed0fdba061aaee95fb1ef099c57cb5918d1986db72f505ec3a4ec1cfca6d25d05cbdcf5705e3006a3253be29e07b416966b01dcb592362acd5719e8c8821bcc72499c052a39c700e77592387586e17684c49beb257166aae49c0a9c3748e2cc52c9793270de2889335b25e783c0799324ce1c959cef01e7cd9238735572fe0e9cb748e2a4561bd138bbc244e95626a7fd4d55e2195c1fd33a2666ba2d951d11939fb8a9f76bda33f70e30e66e9784a9b1c26d1860de210953638f8f3cc0bc5312a6c61e1ff980f91749981a7b7cf407ccbb24616aecf1910198774bc2d4d8e3a30f60de230953639dc6168079af244c8d3d3e3a00e67d923035f6f8d81430eff75125dc1acce47de0886374318bb518c2190f4864a56665d2583b38d6b5db373af8f026071fea6238368a536ae2fe9bdb9b11c62ecd963b92d2e0f7634d957bd7fe01c8d4e0bf55fbb7d837f8afb9afa7b936ab456681a9755fb5c72b73c79e1dfca9fd6475267debe0250fdaa1d131313406ba1ecbb6f8a069a3ca810ea3ce846509a58e63605aa7e06bf6b53382af5604df4b4df0ff1589cf1bfe695c3fdaf84f3b34f3de81691d93be6abfffb0c3eec055689530d0e517d8a3cc0c5e1df645b51d004adcbf45685aeec66fb17b476df08e5e4dded1dceb2699cac450a8748a65c13b572735c40ea1b4b4ae895163bb078f33e5ee7b2d73df6f49f03745dfe7e06d8297b9a6a461d1c8f67f968b6c9f683f3a3bf1bbe8eb2b3fa61d332b3eda437660a4357fcda8fe9f8df6957d47e1096adf3fd3fdeb95bba38e5ae977baf2efafe533a7d30afe55066f6bff2ddaf2f7ffb0fd774ffcb3bb61dac35d142607fff2658953717cf0e2b09586fd5ffbff03e7f6d2dd55260800 + serializedProgramCompressedBytes: 1f8b080000000000000aec7d079c1445f376efed91832051e2a1840309470645c9490191242a48ba038e709c7747120366cc593083398b39e79c31bde68c39e7acdff44cd76e4d6fd7eeccf6f432c3f7871fccf6f4ccd3554f5757e79ebc1eccfa13eb6afd378d4d62c35977369515b365acccfa35dcba2eb5fe3a21b83f915558d705d6ff73acb8aeac20c39bfc4fa75873ebffb156a89255596f2e67f3ac6ba91d3f999558bfc75aef9658217e77bef5afc47a2a966fbd34958d60fbb009ac59ac49068869f64b95e25e8ceb15ab69fd3f8cadb6624b6ca178223deca866d67f93ad984a3b6ea925343c77209b69abb5d48a9b67bd53c1965898736dc49ab32f63f60fe65cfa886b5f71ed6dfdab257ec7c5ef9ae2377e9edfe7dacd48f36c3ff42c60f6b7fe55b3fefd2ec2039c70cd11223cd009c71a4b18b511c66ee2babbb80e12d73dac7fd5ade4fff0207fbab806ce35f69ac0fb13852d9d63231c19f3de10cfef29ae43c57530927598b80e11f7acf7d61c23ee0d17d75102ff4d91de5f28ccaf6f89fb7fa330bfbe2deeff83c21c6f6432ad73852e0cf86d8064033d5f97f47cddd1336fa3786eb4f4fc3be2f97f51985fdf15f7ff13cf8f45f7f9f53d279e9b4d22cc9f1b9394f790b3256ef712d7bd15dc826da8b81d27d2f89f483386c2fc7743713f4f84c78bf8f7117e4371ef03f16c1c3d03f7117ff9f96efef29748b2c07b229ff3ab49f9fca1c4eb87e2fa8678be3a0a5bf8f1e71c9de3af3ad77cc8e309d2fb603f7fa1307f6ea242d78f90ed9c8eee21f92d6fe6c85343ba3f0885797c4d215f2b11bfaf3b2dcb7b25d2da70b2b837093d23c9c6a6487cd792f8feda9d9781e631e4413e0a5bbfabcf9670e0bd8fc5f3b551985fb7a2b4419f4f92f7ec78b8c7af9f0a9c3a28ccd31d40a4fb9994ee67e2b969e23a55c4d795e2f793f24e8e9f2eeed7f396e7dcb4edf8fd9df0d089525eb675f3cd0e10d7d62cd53f09ee13fe09b8ffdbfd5ca22e3ad0ad43227ea65b07d6c8c1a95120c250e7d447321c24ae4dc47556d266d7d614f7b2ad67663b3835c086c09fd561deea6091c7563326fdf3e930845d59ad83ec31ea3a3cd65c98e6d97ee85948679ea33f031e7b8bfcfd3cf98cfd3be6e0db79575fba5f4ddcdf41ba5f9db85f83b85fd37d3fe12bbe40b27ce17e27f62573fb842f1d396b174b185f31b71faa26e1417c0de9bdafc57db0dfead27b5f13ef7d23bd57437aef1be2bd6fa5f76a4aef7deb7e0fee277cc017cce5036a7515f1c54eb8f6e91e6c295ddc7c91cef7229d8628ccafdf89fb3ba230cf8f9f9df4ebb417380b44fc0f12ce0fe971ea8c4923632973b7634b246e7f946ce5478179ba90ed2964e73cfe27e6f68f25e83ec66be4c6ab2bea0f6853e6d561ee36d922b75c109fb005881f84d2c5f1220ff29a31575bc50ef3eb8e447a8bddf129e9415b698114bfd4fd5c5e7311df580a837f56e50df87bc88b9fc53b4d51d8e2ae7e4106eeca327007f1417107781477104f71b7ccfd5c56dc81ae3bb1a4dfce976cf23781d30c3d0bf779187c743e0a5bbf77009baf26e1fdc2dc6d985fdcb8792ddcf176985f5b221981eb56c97b763cdce3d7ba02a7390a73b90e1518d525b9fe90e4fa43920bec018791bf49a4d7424a6f23cd3f60834dd961e463eb836f2cf7c725ab48e58a55a27bcbc5b50add837aeb57740fdb806817f5dd2ce20e1671bf279fb7df45b661c7619b5de18f7b971e0b147aac54e801f5e89f0a3dfe4aa3c7df488f3fd1f31087f55825ae3524fc7f243dfe51e8b1daa31e500fffabd0e33f5a0fde0c49e8f12f7a1ee2b01e87886b4d377e5eccad871dce560f819d9797aa471e9409951ef9c9e7f3f2d0f31087f5106dd3842f6a88c2d6b38dc648cf41fb318ec2b81c024e23374e63a9cd95d003da9db589f89aeef83ce0a49624472d498eda22bea55bfe943a6a272407bc87e35bb9df4ff8aa8628ccf52b979eab27c90775ed6209a7911ba709f45f65bbaa2ff124c7ef20f124daeb790d2439201f8027180b90798278a85b774272c07b381e7892eac0bc46cc5d073692f01bb3a4df56bd0ff1adc5fd35c4734da4749a48e93495f4847628afd36aa167f8bdc358a26c3585b67ab66df32304761bc96eda886b6be66a53db614bb7a6a2fddbf42181b356c4b79570da66c0d99a46c62399bb6d7e3873979102e66e9f143898cdba3aef3583fe1cc4b773db1ae0d9f7315e23375e73a15ba27dd99fb9db7b47497289f8840f83f841285d1c0f793080b9db97a2ace50d24d25bec8e4f490fda976ba5f8a3ddcfe5edc6dced4b08fb689be7edcc5c6d733b6c71b7d37d19b83b86a5e70ee283e20ef028ee209ee2ee58f7735971779cdbfed83a96ac3f853eec04740fecef449628f703c518243b5ea4bb4bf279fb378f13637379ed854c6d50d8ca9b16b3d3c87892b842bb14ca4a07e6f6e31d44fc298af44f453a40bbf434744f60e77544f7209d4e495dfb89710226c69af30a515a1dd1f31087f30bc62eaa4bf89d253d3a7bd403da41580f819dd745a1c7ae69f4e88ad2ea829e8738acc719e25a43c2ef26e9d14d430f68637457e8d1238d1e4528adeee87988c37a9c29ae3525fc9e921e3d35f48036582f851e304faad2a30f4aab177a1ee2b01ef9126e5fe6aedf615e16eaf77ecc5dbfcbef433cb423ce72c7b3b3153c9c93d4a58d97ba3e5d1cc823fc4adeee429e5a286c3dd3e6ec3458e78a2bf8f241cc5d3f0f121862feab6dbe3bed3c310f9c2fe1d9f7315e23375e5b9893863a661873fbfcf5e83ec61d2af0da4a61f0ddd096dc53e0fd89c23cddadeee7d879e2ba41e0d495e2cf97d291e32f10f7a16ef552ef0ad912be5dc85600f5c38552de5c94b4195e45f36bbbad1236d8ec60097bb0c086fedcc512f62549ec2eeb086ca8778748d8431cec76c0c946097b5312bbe308099bcaf74bdd6993f95f9021ff874bf93f5cc8ba2df21fcaab94570cfa73723fe52291e608e6f24f09fb813507f01b9ee5d751cc5d7e4739b81d218d6a521a6398db878f9170c74af1629d41de68248358b390b797c4f95e4edabb88f1b35d664b793f4ecafbcbd07d2c23cc81b795c24d1cdc0e1f4879bfb724c7de8e1c1dd689e72e77f399c8871a19e483f706b9e313ef41fc62243f8a074e13ef8f97f21fde5f22c5cbf85748f601f8900f1398bb5d3dc1cd5b8a3e574abc427ad0fe827c9828d9c244c956f665ae7e7d02ff2a291ef0af763f973789b9dae5becbe824225e2ea3b25e9325bd264b7a4d71eb95e0798a1b37257f47a2fce5be1bfc3be507a09d11840fd92464803508b20f99c692e5771a7a965ff7636e1fb29f83db05ca6535298dfd25fef697700f90e2a18f331dc9305d5cc57a8244d93dd049bbd33827dd4e60535046674a367d19ba8f659ccddc3e04c2c2877481f94af021332439663872747e4e3c778d9b4fd287c8f2c17b83dcf189f7201e7cc826773c709a78ff2029ffe1fd2552bc8c0f3e64aa840ff9308bb97dc82c376f29fa5ce98e4ff121900f73245b9823d9ca5ce6f621807f95142ffb10f15cde3ca6e743e611f1940f01bd8a25bd8a25bd607e127cc874e97e3df7f389fc9d86f297b7a336207b33ed432e1132cc676a1fb28025cbef02f42cbf2e646e1fb2d0c1ed0e7dfb6a521a8b24fe1649b88ba57868939622194ac575097397dd254edabb8af1cf5d611d0a94d132c9a62f43f7b18c0733b70f81b0f021dd619c1b7cc852498ea58203182fbfd6cd27e94364f9e0bd41eef8c47b100f3ee412773c709a787f9994fff0fe12295ec6071f325fc2877c28676e1f52eee62d459f2bddf1293e04f2a142b2850ac9562a99db8700fe5552bcec43c47379554ccf875411f1940f01bd964b7a2d97f45ae1d62bc1f30a376e4afec25a05e143babc83ec2d5b1f228f3dac64eeb18795ce333d1aa4c1ba8eb9fdc92ae6f619ab04c61847ee1e6bdd69e7ad66eeb187ebd07d8cd748c2fb99b9cbd721923dae47f731ee1ae62eff10f632e64ef95ad01dcd1925b885740f632eff9b7728bacfaf30be9e8fc2d6efbe55cced6b016fad64676b25dc23a5f823c5f50824630d09f368e99da325cca3dcb69bb09b4392987947a17bfc7a8c78a71d0a5b7af52c773f0f73dfe4f31b91fcf8bdeb99bb9c4279049d8e95743a56d209f27f27373ebb41848f93ecf346e6f673c7bb6d21ef78f41ebfae93ec779da34faffbdccf25c6674e10cfef8cc2fc7aa2b8bf8324df89929cbbb8efdbcfd572bf033ad8ba621f0aba0d42616ce7f2fb4769be7face6fb6b34df3fd4dffb89f4ea6578be6586f46a67f9fe1acdf78fd57cff28cdf78f70bf0f653051c7013fa28e2b2a64497f8bd3f153c7816f3e9925cb01b4354e11380d51d82a9bfd9648cf9dcc5c3e20ef64b73c79a74a765685eef3eb4922bebd847b9284bf8ba377bf93dd388974241c78df5e2f84713a48f10723ddfdae553f55e2f134e6aea74e7338eb5fe8c8de7fb678fe14117fba9b3bc0cb3b5dc26b24e16d70e3309c7f2a7921bd33a53c3dd3c11bf0bdf4dcd9529ec2fc0a707d966463a7a1fbfc7a8694a720e778148fc20c6ca4a3c403e09d23f17a8e90fb73f7f309f9ce75db1ce02470d74bf29f82dec3f2c9cf7774f27120b4f94e53e8856d107032e54f3a1b83b1a40d0803d23b8fa5b6a9c41870def9ccdda63a0fdde75768abe7a3b0f57b77b17e35d1a6023c18ebad8dc218f762295eccc3e45d826484fa7a63f25ede25e81ebf5e28709aa3b025d76e8f098cea925c9ba4743749725dcadc6d18987f39514aaf8594def7120ef05f2dc911c425ecee3ce6f2d1030f45eff2e78ed7b003211fbb49036333c24a8701cf43f9b85923cd5b10969734614ddcad1a69de86b0bca429d637b0db35d2bc0361794913d6c8dda991e65d08cb4b9ab00ee36e8d34ef41585ed2146b2fd8bd1a69de87b0bca429d679b0fb35d27c00617949b3485c1fd448f32184e5254d588ff2b0469a8f202c2f698a3528ec518d341f43585ed22c10d7c735d26c27ae4f6860887e277b520383ef53e175eb000fcf423b8dcf09e1f618cc275e26eec3f81bb40bae40f2c1bdcde81ee05e29e16e46f7f9f51ae66e23f0b0f57bf83a0907debb99b9ebe29bc5f51694368c8b20ff9e770bbac7af3730771be00627dd61e50e77c36713e9df2ea57fbb78ee6911be43c47742617ebd4ddc2f44bcc27d7ebd4ac4774661cced4dccdd4ebf49f054e09637817b85946e6bf7fd447be20ae66ec76e96e23733577b63e8d5120eac8bacef4e9f7590f0c5b8087bc61dcf9e658936cf85274b985da4b43a89fb79d27d18bb015bdb1985797ca1fbbd449e02e771e6e6bca364f330867f35511654767f2d61f7303e4ed8fd5eab241c78ef4ec9eeee0cd6ee472e74f260af896efc8c767d9ddbae13f90ee37f77b9ed9a7594f482f8d652bacf31f7783cdc7f5e84ef91e4116d86bcbbc5fd5d5198bff7027397a3ae286ce93f1afccd8be20afbbfef48dae720d8bfdf09c98ef306e66e602e04ca108c913643611c2f8f73c9ef433cac91dc42e4d1bd1227f78aeb7d521ebd84eef3ebfd229ea1307f6e4c527738e724611fc0ebcb22fc80c4eb03c29ee11c8557245eef4a62ef0163d1a0cfab22fca0a4cf83e2fa10b279f0a78f209b7fc8497b0cc80abef0e1649a63608fc478290ee7ebc3e2faa8943f8fa0fbaafc97f5784cd243b44df2505bc3fe6dc93c16fad860af4f24651e0bfde697a538f8cdaf4f8ab4bab96dc9becfaf4f49b6f894646b4fab6d31f13ec4832dbe46d8e23392cec2efe73debb6c514ae9e93de136b45f29e4779fe3f840571fcfa0273cf2dbde0c18e33d47723368af8d7c5f50de7fe20e81789fadff6dfb5d06f6efb7026d09bc2ce717f4cf50e8fbb07950b5867f9963b2f12b2421dd34c8a87faf03a29fe5a741ffba59d51189709a82b9aa2308fbf2f29e39e620d0683b39cc0ff83cf8aa33096fd2609fb2611ff00c2867542e9daafef4a3abf2870dba0b09517e3a06df181b8c2594ee8fca0f1b057f043717d87a56f8343daa0d31629ed2d4edae361cdd7c752da9f207c389fe6d3a43cdc44ed7b5b3dc8530da533c5e3f3ed8938ccef47924dbcc4dced9697848e570b4ce017ece065b71d005edecb125e2337de04f075a0cb8719f2a29384ff0a73b79744fd93f72a4b6d2fbd96bc97f72abac7af701e571d14e6f2dde5c6cd281ff0f73a7a0e3882b39ae2e819b8cfaf70fe563e0a5bbff781318b4ed27b94ee6f29747f1be9fe16bac7afef48babf23d2153e14d2877413e500cebb123e74c273cc1f57e9ecf11389cf77256ede75649c28cee99b08651ab88633dde26ebcbcf724bc46121ef856b0c7ad1974007ef1d95d9f4a3c7dc0dcfee203919638ff65dfc6d27be3d3bfb7af58bf0e6da2846e70d6556d14e6579c0f20ef47c97b791fa27bfcfa3173f71d3e16e9c25a10e0782bc1b1f063799f20fb40f2e66592f75385bc9f21793f45f7f8f573c97e3f77e49d54e5c6cd9897c0fb172cb5ecc2994a71f40cdce757382b291f85addf53600d9f6c137046521b14b69e9f2ccad2e442e9bdf119de83fab950928fe2f81b05c7df228ebf41f7f815ce1e6a8ec25c3fc85be009ce40927982391038db48b6891f32c8fba342de9f90bc3fa27bfc0a67e9d441612eafe8ff42be807c897cf982b97cdaa4756e3932da503a9f066d69c8cb5f99db07fdeac83815e6df616c00ceb189bb71f27e9370f251985f7f41fcfc22b037b8b1135870de496d1486f7acfb897599704e0b2a8fda3cc0192af9286cfd9ed6d8c98369d0de013efe24f8f853c26b24e11de34e977d9e410799a3bf248ec4192b79e8fc95846dfe83b8ff1bdde3d77f99bb2cfdebc8b75f7b7ff241fa296328705ff497f8e3b8af6587f973ff31f718ca7f285dd4b7d4cddf78cc9dbf7698eb2beabfe9d05f127cc7f3d4f91bcf93f01ab9f1a6435f1fea6eecc73de42f83b25f3bcd3be9f486f32bbecc906e3a0c58f3f7950686f0dd0cce1dfd0e61093fcbbe6789fec76ce8337debf0b8ffc9cefdfd37a649eb47771edb7b0e055e9b8969de0319a12df1934246f03169643ca0c8b97fc08834697511f909f386c22f26d637f99519f6e1fea69019ce7d4a27f35621f3ef69d2fad379662eb46745598ee70b5d764461ebdf81a07f3374bf16facdaf71742f2ede13fd9a783537477158ab21c6e4e3d5457c0f14e6f1cd111e8f2f72e3f32d40f67330960ae749c96334140f621d7c625dbecfbc8ac5c455f88c9890270ee71d817ce0f3505ec6619d629abc9cb1d9b93fe3315a96185c61ac6f73126ff78d22ae9a5b3e764bf29941a25f10139cc740aedbd033a27d1283f614aca9f3cb179ce30be7eb0a1f18afe9e62b06f68ef982b4d3f035f303e7fecc9f695962a2fe8ac1bc8b8a2f381f15d64da9f8827333c18fabf8da51932f480bce53427cc4608d7b1a3e0efadeb93f2b9f4e2b06f509cc7ff9955194d118ec45c232423d9346c659a2ff3feb6a3aad18ac25823938bf328a353a31581f8465847a398d8cb345ff7ff6383aad98e82bc19e16df7e1fda09df39d7387f0eb7135a4bf170f6594f14e6b2822f847361dba2307f5eac878815a07478b85d9293c4bb3b277538f436428e3a921c751c39e60087705e00eaf72979e8e7f1b9741c7616328873d7a03f1117e7aef1ad8a76bd07fd5e215b6c970c697646cf715d7b6bca574f92af9e906fa3900fe651803b389731837c71383fae0f0af32b9cffd61785f915ce8ddb11852d39e64d94de87f3dffaa130f53ebfee9094d7fecd31cf7663c6daa3788ed11f85bde8ec85e74612cfe2ccf362d1ef2e16ed899898478e75f06807b0a620dd9a182ff23596e46b2ce413e3dfc55b24f93a79940fd636a43bb3c64fdf0acedd6b84c2969c25625d8fdcc789c3397cb55198cb057a8b3380137d455177c40a59c2df94c09cd814292e0b7d625d1ccc29623cde1e57b0e49fdfc0b93f3fdddc85ac1b9c1b0c6798ee8aee4b7e3426fa9c2a3f9a781ece9ef2705e49ac3ba18798479cff751a0c590f384b17f4e881eecb7a403951e901cfc3d9535ef4e8a5d663c146e7fe82dbd260c87a48e721c77aa3fbb21e90be4a0f781ecea0f2a2477fb51e0bc5f8dfc243d360c87ab494f410be2536505cc1f7b662aeb672bc65aa9ef0cd11959e091cf4ad8904c66ee8199e465d291eceb3f2c2cd1e6a6e4a8f71ee976e4883217303e76a0237e29b43b1c1e22afada71383793a1f7646edaa6e106700ad0f38031043d83b981f8a13eb819aee666d146e7fea234f61f833641fba48c297cb593f812fdf7d84837461cce9b64e83d99af9dd3f00538a8fd94c018859ec17c41fc681f7c8d55f3b5788b737ff1d634183237ed256ec4379662e21b4bb131e239a8e3197a4fe6a6431a6e00a7237a1e30c6a1673037100fe70c79e1469c25c4501ec4f651f3b514be55217f8f06b88176436d14e6cfef9bd46fe9f4cc32d9b2f0f7519d1d13df3f8a4d42cf20dd13f170f68f17dda730d7dae498382f871588ebbbc9f4136ba1df43f7842d329857b5b0c6419f5fecc98f7746f907ed17bc6742b44fe2684f437c57748f5fa18eaf83c2567e94fdecc68dc1d922f5a4fbe2fb44f11eccdd6e823abb3b73ad838ac3385b97a45ecb60fce400290e7ee338386fb20d0a5bf22e137dba98b081d8fe12dfc0b1e0350e6d820214e6f1aaf1b9d66e59e2bd24197a0919b6a4b10b68b7b651e886bfad047d7568dff666eef66d6f27ad83c1cee0fb4c90ffd046e88dc23cfea1a45e838788770f94de853a74000af3f847d0bbe0436648ef42ddd3078579fc63c9778740df16ca36f007e742d646619e067c4f50aed7205eaef3c1defbb09432c0505949e94300678d50d8e2b882ea43f471cb9bf029fd50de42fe103e25112ffb14e87beea9c01a859e516149f556e2fe4ce2bef886561cce48ee84c2fc8abee9171f9cca23e0c4459b2cd157ece7f05729da98b159d2f3d219d10979e61072cecd20e780a44cb1d9280d88e35738b7b92d0a13e53d364f5c613ecdef98de7ce6de9702ed941291f610e6f61f431cbeaad29c7f02ef266c762873cf290e1518639cb4abd68ae7453b200e6d1d092f3e4cc26b24e17d2e9e17e7c4c4164aef8f60eeb608ccc7789ce78895bae54ce00e17b8d0ff5e84eeabd26f9b39fd0487d026e2f7c4fc4a2ccd38786ca9135efa9087bc5f26e57d3b715f9c0f151f29e5fd4887e71575696c7817e6ede2a3987b5c7394c098213dbf38c3f362ee2626e6da62074bb2823f6128ec276fc5f903b1caec7113bab4437956e521cf96fbc8b395529e1588fbe29b3771680bb741614bf89569b063627f4bec1037560cceeeb1d25b056d1671264d4c7c5b223e56e2676c1a7e562099819fc33cf073b80f7e60ac00ec692f890f7176eb2ad1d7891d81f449332e96c005bbde5bc21567b1ae167ac4d67ac0ad869e3fd2e3f3e9e6d08183a3250ee03cd73628cc65057f091c1c958103c0050ec64bb8e31ddc43a08caef5805b0d3d7f8cc7e7c764e680ed2864117db7d8b1c82eb9ace22c5998c74984453d0ddff18cc3d9b10d51d8c25db350c29b88648635a2e29c80d871ccd5064ac49f8f3054f17ece6086b9837d9372d8bfb9ac62fe7b0dcc7f0fa19f3d345fe24bb4a5e270066d2f290cf3a7c017b4111ba230c7dd20e14dd1e06b3011ef872fe1c7e2539372c4dab9af717496acbc6e0b9e49acdb826fdb7642617e853367774561fe9ed8071387efcc7645618bafc33e27649a89e49da69629d1cf9d25c9046d5b383b55f47162c7a3fbc009f874cb6e0ebf5c925dec1388cf96649fedc80ecfa7c83ec787ecf324d9453b373e57927d1dba9f4676f00747807d9f809ee7d7fd99bb1e137df298680fc7e1acdf5e5258f617909f0d5198a7bb41c29b41db7f4207c2fe633b13f13eec3f06f5f989887fc89b93503ad2785cda32257c41bc98b9fb58c50e076b611e4e9cbb139f8f3810efc6f0d93a5847883f1dbdab8a1767efc44e25e2e12c24a91f6ec7832c504e4a243d4a1c3d8e14b67524f0aee264562a6eecac347a9f9341ef7333e8bd3e83de607f67abe353becd0db6b84021ebf9284e95d605196411df8148f1f3107f11f36cc770d6657ca17807faca30875eeacec3848d2e4eea653f63e5eb51df4befc2d9bdbb3bf97d34f88e4b507c2d84c7e3368a2b9c8b54578adf2461cbf1706e11e4c3e592dc4b58a24cee0ee35a629f5e5c9ccb9b3f48ba5f86e45c22c9799924c71249cea544bc2ce795929ccb909c30d628ce8588974b72c27d74265b7c9924e715921ccb2439cb897859ceab25392b92720e82b6b5d8971faf94e484fb5548ce0a49ceab24392a24392b897849cec4f81d9c9dbb87747f054b2d9720c3354c5dae36499872bc2c03b4eb574a32c0fd556964b836830c2b3dca006325ab2519e0fe216964b82e830cab3dca50209e5f23c900f70f4d23837c16ab2cc31a8f32b413cf1f26c900f70fa765b0f771a793e1308f3240dbe5084906b8bf360d0f376490e1088f32c0f8f591e2fe9ed2fda3d2c8706306198ef428038c7b1f2dc900f78f4923c34d196438daa30cb086fc584906b87f5c1a19366790e1588f32c0ba7238ef77b0747f5d1a196ece20c3f11e658079ae132419e0fe896964b825830c27789401e66860de0fce246d8ac256dbe19c0fc473f21c0d9c515a1b85f9f514243bcc17a1efcdc54f41f7f815ce0dad83c2285dc04d996381fbd0ff8336722714e6d73350daa29d1d3f1ddd83b5aa50b79e958c4b99938534a1bf778e94a6680fc7a1bd5a88c2fc0a677dee81d2c2797bab3bef12f19ba4f7e5f84bd572c2191af1f5929ca2dd1ddf20c929dadbf1f3dc72a6d8e06d196cf03c229e92538c77c5cf97e48436fb0528bf443b3d0e6761ee49c8787b06192ff427630ce6612f926414678bc62f46328af344e3e25b0f29edf84de8d94b1c7b3ff56b22bd4ba5f4c499a0f1cb10c665e2ba91b9dafebc28d95897a0f85a4806cc179ccb54578adf2461cbf1145fb0ffe772497e1897b902c922f61fc4af24f8ba1a3d7ba5c3d7e9ad88f4ae91d2bb465caf4518e2fc9238b47b055fa7c35ac74b507c2d2403e60bceeaa92bc56f92b0e578992f181bb88ed0fd0624c37542f7add2bbd74b7afc2ee9713dc2b841d2e36e49ce1b243dae27e2293d6e64a9fe1f9d031bbf11dde357a8d7eba030f2ffb17bddf99ce0059df31a7b80a96d509cf31407bfda0985f915fc58210af32b3a0b2d2ece3d8bc1f99c16bf17c3bc9e38b7228ece628ddf2cf10be78bd595e237210c553cc52f94d32128ccaf608f943f7c88a5f7877712f1941c70de5a6f14e6d7bb33c8f1700639eef62907f03b1485f9f5de0c723c92418e7b7dca01f9380c85f9f5fe0c723c9a418efb7dca0165a10f0af32b9c81369890e3b10c723ce8530eb0b70128ccaf0f6790e3f10c7250f623b76fd38dbfa9e6099f1071b04e16da4e6027c35198c73fc512fe6013acd910679bb1112ced9ca4f2de44295dc88f1128ccaf8f26b163e22cb4f8e3c97b763cbf3e21de077c58d782ce838d3f899ee5d7a7c43bf9286cfdde3051c286f79e66ee3e80903d26ce538b4b67b7c5e1cc4ea817e00cb791286ca5b7fe1df7f37198c71a85c2a037c619edc6d950e8962b8ece7e8b8b3930b64ffabc025d13f3c7702e9ed847b43edfad53263ce53df18dcb389c3bd71085b91ef739696dd82aa53529435a800b6799c9b6b085a5d6d52fa17bf01c3ad72afe1ac2e45738972b1f85addfe737976480f7e01cac31288cd38733a746a2b08577def748669c1f70565a4d375e1cce031beb4e3ff1de6bee7c3c6f80a4d71649bf36927ee56efd32e545426ee0f4150957e8793eecfff398c7f197247961dcac7d9abcf692af70f6563e0a5bbf2f04bfeb375fe16cb291286ce15db05592ff4d24d39b19f2fa55775a7138dfac835b362acf2f68e0c6c9589ed2d529b06ffcb92c30203ff0b96ae043df66aeb21b87f3114127385bad25c280fbfc2a9d6b1617e7905dbcd9fd7c020fce35ab29c9f1be24c77be83ebf7e20a5f38148679d8403f27d289e6f26c503ee47ee78fb79b8cfaf1f33f778d5c722bdd9447a5b33a4f70911ff9614df9a787fab3b1eee2b79b56cefa242377ee2b9b7dccf5db891b69b189caf0b6ba63e656e9ff2a9c3c925b0274cd4793138773313ae98378b7f26e18a3d2597c03ac1177ce2427fff7309f773812beaf7d88b3e71af14385f48b85f38b81b854f4cec69f48a2bf6f5c7bf9470bf14b8b00ebbab4f5c28f75f49b8e26cb78db00e6c8b4f5cb0a5af25dcaf1ddc4d20e74b1e715ff6f69cf25d7156631c9d071713755c1cedf78f8b73e0e2700e9cec1bbf47cf7e8f9ee55738f32d1f85addf97b597b0e1bd1f99bbdd2ace1a8a417df21373b75be10c21a8cb7e66eebaec6727bd4bff763f1f47e7a3c57f413cf02b9ca9d61985791a301e0f67b2f544619c869039fe3b4a03c67d327cf3017848d8099c0f217cce26380f748a373cf7bd6a31fb3c9a31ac84cd61e5ac877d400ed7729a55bf0e67ddd95456cc96b132ebd770ebbad4faeb84e03ebcd995156478c73ec78bffc7ff74b293ad62abad574b9c3349265b814aeb5689f53cc7186bbd53c57ab35e36f6522b6e9e855361f9b9523697ed649f4d03a90fb7ff9f633d516a83ee959f92c4dd294970e196587f4bacd7aaac17b99095d6fdd1d69d32eb5f85756f9e151e675df95bb3594f76a0f5d78d32cd4a76095b6e85a658ff97db78b32db1539fcca4d24cebaefcce240bb3cc966ea97507082db7c24b6c0927dbffafb0252db1a51f6bddabb2ee716d16b061d675959d5aaaee15d66f559a5304656a1967faba1fb38f22826c1a6169c3a5ef61dbe2ffe5c8b6c8114e7df5bdf29d6298dfc3f6c227a6e4c4ff71e83819be1162acc0e869531673ddebc57af0a0bdb14d57c7540dd5f6edf0ddcfeacca4d345cd0ccfee96b606c91cde7dc19bdf8e39fb869fabb955ebcd7a54e7aab5caa05a3a62395ea17d72951f15aa55cb2fe282caf4c754f4dbc7a04dce21fdce73a5f673fe33a0ba5df9b933c03e7e6c8af56395f56f895dfa4aad2ab4c47a65bcf55099f56f812d6e4a0e1571b81a36c9a955682641299af35434db3dcc29dbc4ca0fcce0e1d444d74c689124ba87dd2e6a9ec61ca9b4ec06539e6835418179637c9ffebb170ddc544d9d2fb5ed7cc926352a67e2aa9ca99deb0290d9e3a7cb973a09bd92f9c2ffa839ac4bd87626192806f3550cd6d936b6cd65cfceb6f9b449378943357ff5d3da603a092806aba918b4c719a7e690c17d2c0917897662761ceee099c30636873ba568e745068ac5ea0a168b388b0d5562d592c4b28fc35203d7a08077d404ae490137d204aea532a87ab92e923c6e998dc22b5cffe6c4776aec2abb35b53d3521ca646611286baaadca1b4e6153a55472e634a133a70e85dc4c17b92e85dc5c17b99ecaa0ecd30c73df4acfae8ee4bea699e73ab2054bd7c8f65b43d657b167cf97cc30ca5eeae011fc1a66bdbbd0e261853d22b0dc7a5f35d8949ed1969ebd7d2b9bcd02a61a02f32711c5f00e2acbe7b4b7a6b25d36fe16b4f1375081f314db7871d3ad68e0862abbb0535b6cd42ea65af79c41bd91766ca93d1294c45c6687cb501d9cee0d6e0be3ad6bb125219725bdd5b4658a3e844d043fd0c9ac64dc02ab33f1a706d1c568671bab79612853de9172e23b2b9c78cc8f136f4421efa25b3d34a64a487bcd12d28402eea009dc94e2a2a32e17cd28e44ebaf9d75ce52e6c73c9ed588d33fcc171fc57c37cd6b76d8a3f2e18aa2e8b9d19350c935e06aa6ced44e54d17ddbc69415540bb065001b55465bc5d9a4b8d663cd4be93d908b6b725a2caf555bac6d6f0ef91166a859d29c99a1c90d21b099f9e6dade0cce64d6928dd6c43e9c698419929a36a45657df700b2be3505de2300f03614785100e06d29f09e01801750e0bd02006f4781f70e007c670abc4f00e0bb50feadafc2bff9aad5da53c8fd74913ba890791f991fb097b18aaf4f0377a480076802775201f366fb402fc0ed68e0420a78374de0ce0ae01e76a38def48cf650582ddaeda310fb334acb453865f0e4af2cd899624732c994bb2a85a765731a9ac52f8da9042fb84d06da10555d9745199086f03f2ad8aa90d2b4551ec4c9bc9ae5421df53b79077a59007eb2277a39087e82277a79087ea22f7a09087e9221751c8c375917b5286372200c3eb45818f0c00bcb70a9cbb77be9b42b7c6eda302e763c7a3130f27c1ffb3fea480d7a5c1fb52928f51485ecba7e4fd285319ab30155f7da1fe14277b293859ab123b0d270328f0bd15e0a7fb041f48818f53806ff409be9b02bc873dc07124cbed28b07ad9e1684b339e1a9e834baddc60ddd924eb3adf9682dfe752645eae98be6a1e9fe0078d0cdae3342399f7c593e6b5e0874ed6b68796d40d07be01aa30643253cd89dd5506cfe73bf98eb79435357c98761673e64078fa6576d4442b059e9b63c5e0674a99a8419789419487db57e1e1623e3ddc1eaa02670fcf956dd302c7c786f9a2cd4afbf70a91bd53ecb4934b8b748a129f94f3378032d936da5e1e8c3608e92973dc93f2bf5314fef7d0983fff3b98b275bec82263ef2a8d110fa16ad2698a9ad457a36b2825f27eaae2e90c7f41ff828f8ae2856e05f6f45aa5752db363f9ef4aeb175fdf3dc7462fb6eeae40ef97a31e4a775f8c0ca31899aecbc870ca42f65758c8e73e2d64840a9ccf361ce0c542d2cc368c5479227b38dfec00aef719ac6027f90e54f1a5f43b33180cdc9a9395f236a354d9cd6d6f264b6d8914f196083f6b29cf967b962d77f73472ab2a75ff92a758d93eb4958da6cac66c45d9d890e7af6c8ca15cd11c4def3996029eabf2717c906b94bd40a02cadbf2ab0eda5c0dec15221ec66372bbcc6ea221fe64bbebd2856e729587dc327ab7b53ca17ab94e76e75b8adfc125b79eec8abaceb7cdb888a2575d339f302bb8a4e8d9d6b6ff8596cdd59693b9c25289595b6812ef659158ca30a590955c8e6270ad9828cce618a2511afe42aadb7b8744b0d17b1f12a6d787b959f80a13b963081b2b45285a5b5cff76769fb5075db22cdba6da20a98d76d8bbd00cfa081f7a5e858a2a0e3749f744c5280f7b0a78773b9a06da83dddc80b9eff99f4a52a7a95756c19532f664b9f3a556b4e56650b676e9997fc2ea3b3648a2a4bec79f55c2e6f90ab6b7f9952ee39530e66eaa50d99d2a7b2652ae5672b283fcb0f3516e3183e3ce034aac6aa52d558dc35ceb2fe1659ff965ab756d921a796e2cd233f35c97e54cacb552937484979ace5f3b34f7d3a95fa0a55eaf550eab3ec111b5e0b39b95ce12bddfd292fb852e105cbabfbf38207a8c0799ef143a2e5ea4c397a9da63a3b90b2c8d594451e929545cea072668d2a677674d905ee20676f1b3329090e5549d0d8651bdc53553172779a0f290ea22ce53085a58ca8e1cf5266a9c079f3e1702f5e3f4df3613625f5110aa94ff629f51c15382f9b6b99e638c45c0af9485de479142147a908a9e98f90620afc680578556d7fe0252a70ee4d8e517813fec78f3799af02e7cdcc63bd18609a66e602aaf01ee705384d795ca800ee612fe5cbe5ae2ebc6335bb5d5dc7ab7850b669f85147aa5d5d5e64a0da35a594c59ea0b0d8e975fc59ec2215387ffe44965a45f5b017fa65b767cd3e5c5c1c10c0ba5b7f6aa4567169f6732da64ad6c98a9295e7b3642da1c04f5180c77d822fa54a173ffe3ca56ae48305aa713318b7291086e48c5557d943171552e3aac01e20a962ddaceb7ceb7f67808057a705d63f98afe0883d6dc4f976315a6abfc7b19de1021edfcb8adfcdbaf6b6aeed7c15fd32caae4e53d85511b7abd3f50c641945f3192a9a67074273f664f2b1a485c2b739d3127cf46a89c0e56763148b298902f17eb98dbbc096824f5bf8cb8e72ca879ca9f021331af8f32107abc0b99738cb4bfd91a63f5c41019fad095ca902e665f81c2fc007d3c0550ae01ef60ae67d53bca6b91acfcba924ea9aee5c95feca9a8e7f40a030d62445abb4077710ac2d576507678d7f8da0966c9d2affbb9ece921594e99fa730fdf60dfd99fe4a4af2f31592d7f029f92a4af20b14927fed53f2d52a702ee1852a7fc954a2a7f1378750a25fa410fdb61dfd89be8602bf5801dea0a93ff04355e0bc2dc04fd2d76dc21f46816f0c00fc700a7c5300e047a8c079e7e3522f1e334de7632d65879779014e638247525672b9c24a7ef6692547a9c0f9f35730a279c30fa6d468de1c4dd17495aab8f27914bfcd1b5e1985b125790c45f5d514d5d7e8517d2c45f5b52aaae7064675745a93c75145eb3a45d1aad9c25fd13a9e7263d707e0c6d651e03704007e02e5236fd4f49127aa8079fedca4e9234fa23272b3ca47faccc89355e0bcf57eb317a9d3b4de4fa1806fd1043e95b28e5b03b08ed354e0bca9789b17a9d334134fa732f1764526ded7d25f269e4181dfa1003fa6953ff03329f03b15e0e35afb033f8b02bf4b01debc8d3ff0b3294bb93b004b398702bf2700f07329f07b03005faf02e7fe871f279c5275f25d127eabce2a510dc28a4e3fed137f95dc064a97fb55baf0880257aa7ed23a8f4aeb01555a78fa6c5ecadac0ec27f1cea7a4785025857b1ad16946389376d94b700125c1432a096a333c8db89f6d19553e6bc00b292ff1b0ca0515f8f312175165ed9100cadac594e48f2a24bfdaa7e49750923f1680e41b29c91f57489edfce9fe49b28c99f0840f24b29fb7c52659f7cc3e081c297cdb47cc381c20fed269aefcebde9f6b51bdbd3fa7f24f259f36c20befc904f8b975bf716dafe65953d1c5862df2df6e9d32ea3e47f4a253fdf1a93940876f1162474da4de833533138eef86cb92bb2d47ea2524c84399d1a47bf4ae60c6daeb6dff4a3d3e52a9db8813c9d8890fa87f637a96a30e74f77e78fbf2ee21594913dab30b27c9f46762505fe9c02bc9a4ff0ab28f0e715e0d57d825fad02e744bfa032aff69e8a87d3c3ed615dfb887b4e5159c3fa8a67fbf95cce7c0d65302f5206b345db60aea5d27c894af365ed34afa3b2fa95003ce1f52a70fe3cff8086ce0cca0d1453af514cd99f9daa8699f2c7d38d144faf07c0d34d14f81b01806fa6c0df0c00fc6615383f72897f9e88dc5a2727d08d4ee0162a81b7034ae0568a9e7702a0e7360afcdd00c06f5781f3b555fc13525a6babeea090dfd745be9342fe4017f92e0af9435de4bb29e48f7491efa1903fd645be9742deaa8b7c1f85fc892ef2fd14f2a7bac80f50c89fe9223f48217fae8bfc1085fc852ef2c32a64de51e79f29d33d45e4110afcab00c01fa5c0bf0e00fc310afc9b00c01f5781f38a807f724cb722788202ff2e00f02729f0ef03007f4a05ce3bf93f241e4e82f719eaaf93ffb40a9c3796f927d1945b11f842f755f63604bee37b893d6ae87c0aca4fd7e1194aa99f144a6d1dee4fa96755e0fcb436fe6d399dd3da9ea3d8fa45c5166f81f1513c3e92985c943f99394752f3b10758e2e387b9e729197e55c9c09bf530b2e74d16fe7485fda41fa95e5048d5c33e1332f787baf3f388fc2fd8e2df046c24d197472cd9e2df06a48f74a7d2a7166dbda8ca515e16fe5094856346f92b0b5b28f03f15e06b47fb037f4905ceade42f952dcafbad9727b6d6bab7175722abdc4d8c8855b23db2d86ffdb24a3e6e957f2b323b960afd3b0dfd0ac5eb3f0a5edff1c9ebab14afffaa7875f6b12e632bd938b138811fe5b3da1753af51eafca75067cc5efed4f91fa50e5f0e97a24e67c94cf839fece2a0b3f66c20b201ff4dd438c85f921e3758a8c584c3199ef938c3728f03c05f8e93ec1dfa4c0e30af0c77c82bf4581e72bc037eced0ffc6d0abc9a8a739fe0efa8c0f98eb3ea31bd1d67efaa807903a2464cbfe1f71e055e3300f0f729f05a01807f4065666d4566168ff397991f5299594733333fa228a91b00251f5394d453d9b74f4ab65294d4d7a4e4138a921d02a0e4530abc4100e09fa9c079ffa5614c7368e0734aec1d0310fb0b2a271b69e6e497141f8d75f9f88a426ea28bfc35c574d30098fe862a90cd1405b26a7f7f05f25b8a93e6ba9c7c4771b253009c7caf02e70da5165eac2f4d8bea070ab8a5aa05d8d00e265b7abc6537c70aadce7a59d08f5466b752b58b7c66f64f5496b40e204b7ea6246fa390bcf901fe24ff85ca96b65eb285f77bf9daa4aaacb3e5574ab9028572ab7c2af71b952ded02c896df29c9775648fe9c4fc9ffa0b2651755b6ec20654b89e8376597257f528ab5572856f3407f8afd45b9c50eba6ef16f4aec8e0ab1bff629f63f547e7452e5c71e647e94d9c341cb1367de3a4b7b56da83200bc57e0267f94e89bde0cf5dc4f8334e1f77a13df05a6cf771f912ce32b1a7810f8ff9c9eb7f29d20a15a4b59fe18fb4ffa8e2d73980e2c7070e9433de5d62c1cc78c75409706a7655f5757d5293a702e7f9d455654f4d53ec09be2b84cb78760712c62935bb29d4fcdca79af92a70fb63460a0b88f9b4806a94e43d1492d79de94ff2ea14789102bcc827780d8a969e01148c9a94e4bd14924ff129792d4af2de01485e9b02ef1300781d8a96be0a5a9ef2494b5daa38f75315e716698a73155b65af53d52dd6f52875fbab1a8d07f953b73e9551031419e5f700911d28c9072a241fe453f20654adb15b40b546434afadd15d2cff629fd8e14f82005f8313ec11b5199ba4700a5af3125f99e0ac9dff0297913aaf40d5695be0652e9e3f326cb5879d6cde5a6946a4314aa15cef2a75a332a5386069029cd29c98729243fd4a7e43b519932dc4bc7926f79592e96c867972d2d28e546a8ba673e956b4965cbc800b2a51525f92885e405b3fd49de9aca96d15eca0a1cec9c6da6b4a1541ba350addca76a6d29d5c6aa54b3c7185821ea3df1be58675fea1450eaeca550a7cf1c7feab45381f39efede9ae3c03b533c8dd31ce2db4505ccfbf6e375fbf6ed55c87cd1d984986ad1d9dac17e169d75a0c0f751822b244f03de91029f180078270a7cdf00c00b15e03deccfb0f223de72ff9589f1cc19f898c49ce11467f8a422e06f4d4c529501e50aa0c9313e4ac23f91675a626ad55067aa204fa10609f93e38befb6db9a3ab24979fb2de85727d5315aeef7755714fe3fa76a5c0a7a91a26f3fd8177a558db4fc51a47806f6bfae1a71b95ca74aa32c2abf2b249b13b45dafe0ad21ef2495a0f0afc0005f88805fec08b28ae0e547155cdce11681efa61a82795ce0c553a7552f2249b347b51c4cd5410b7ce2771bd29f0835423600bfd81f7a1d89a459513eed3794fca0f3f7da954667b2927d9a4d88f6abbcf09a0edde9fca91b98a1c99e833470650e0f314e03ffb041f486544b12a236aa1ec2e14c353fedacebb51e995a8d26bc2928b98e78bc3102c4763fd731c65f6c724ec4ec9315f2507fe0281ae210e5235b00aac60ec0096bbcf68273f2deddc9f6a2f56963f210d4fa56f3c2df0dc785a68379edad84f662f0dd530da832a28a58a82b2a4d45f41d993025fa4006fb0c81ff860ca1a17abac91f7adc659dccfb167111daeb21b2e1e42a5bb245329586ea79a7df91b4aa5bc941a2752953f6061aa6525e37ca53f8ceab496e9765a875386b24c55f5fb3494111478b9027cc8627fe023a93c3998b242e7bb1305763e703f989d158ea2d2ada006a7c0169c5972fe4ef696389a4abdd28f253a4c000f7ed21f43f5e6ab02e8cd8fa5ec65b9c25eeef2692f7b51e02b14e03396f803df9bca9695998c11aacbec8c711c95ee2aaa770de600e9666f8ae3a9b457fb37c529421a3fe94fa09ce221ba4e711fca54d6284ce5739fa63291023f54013e68a93ff07da9f1d8c334c7632751997d783aafd73320af37994afd88cced5fc7c0865a0ff0f6205fdbe427e529546ead55e4d6169fb93595023f5201deaacc1ff8348ab3a3549c39df9e74365e8eb5daaf7e38da8f4ae9e84c4e08a798dd86cee91485c728283c79993f0af7a7143b56a5583f96e953a57076df1cdbfbce65cef1bdd466b102f181cf82c45631678b5857715c921f9a0ea0683a4e415371b93f9a0ea4c08f57806ff4093e83025fa7007fc727f84c2a834fa02c377573320c83fafe761995f689aab49b2b4a8d5a86eccad12c8ae69354a3d995fe689e4da97ab24a55e773432576e998673f5f9c5232e0bcd0425126fc0debcca1e43945258f73fae628e67c6c97975d47a6a1f6af0abb242fb7ef55fa92622e25c5a92a295abb2a356fd264670af32853384d559c7d9a423135b079ba6260d316d2c7c06609057e4600a3a6f3295ace54d0f29c4f5a1650e06729c05fadf207be9032b4b35586d6d50a4e493986b7121548e74cf915f62ba5f633ce7a6ff7311b05a2dae3075866d3b529a528394741c994e5fe2859445172ae8a925d6d8fe42c809f2796c0f3d32ccb6dc5e733676d64491a2a1c12f5bcd6628a90f5aaa68e4f429650456783a2e8d4f459749652929fa790fc429f929751929f1f40a15f46497e8142f2a77c4a5e4e815fa800dfbcc21ff8c194855fa4b2f06e59147ae72c876e76d383a7e09ce6a05bec2b28522e56905273a53f522a29522e5191d28928f694e2d81d38774ba4a2ef87882a8a888d0a2286f824623905be49013ed127f80aaa445e1a40895c49497e99aaa1ea53f25514f8e50af0c255fec05753c67785caf85a11c6e76e075789d390b237b3432895af54a8fcb54f3ed7502a5fe565382a8dd487522676750026761845c9350a4a66fbb482c329f06b15e0e53ec18fa0f8be4e65623c985ce2e587feb5543ad753e9f0f1b789f65caf9f748ea4d2b941954ebe9dce72bb28f849e5282a951b35adf468ca4a6f0ac04a8fa1a4de4c7133417c34c28f0ac752a9dc4c8d521c88c625a6b0e96c1cdb8d51df7ae7a77bfb91e6384a9a5b54d2d4658c4cd94faac753a9deaa4ab596ab5475cbc225afa3d2bb8d4a2f59bab249ef042abddba95130551e27cf75f793f689aab479127778297b69262c4ea294ba53b3509f4c39f0bb5415e611fe1cf8292a703e5375772222095ec4b7dcde6345d4b6794849671f3a9d532976eea546e4f8203d6c082fb3a3a6a2cfccf1454e7cdc6981bda4c7b9e787d4d32879ee53c9030bad7a59ff927b3cc626fa1dd94f349d4ec971bf4a0ef8220e9fe6727ff9227b09cea02478801e9b742448323181394bcfb297e24c4a8a072997901c9b9caaf8d8a19fb4cfa2cac04354197838ab3270b62a9d9656f011453a3dda594131348d5795392bd89cc6f98162dd997ca0e6a3161e9f5fb3ff283e55b08e96f11c2a1f1e4b572e8a022f17e752723c9eae5c1405582ed653123c91ae5c14055c2e3650523c99a95cf0d4168831f9ecd23e8f2a174f51e5e2e9accac5f9948ecfa4cbeb3e01e6f5059404cfa6cbeb3e01e7f5859414cf65aa0be6d90ded2abbcce97c9fed224a82e7337b6167d9c37097247ed2be984afb0555da7c1fc20aed29d14ba8345f54a5c9f7ec77b3fefa49612395c216550a7821c962eb86ce12ee4d54ca2fa952c6cb0657246e679ffaa554ea2fab52afa7b0a4ec1acb9751e9be42f1cd2d8757af2313e74d0c17f7fccdae5e4e35d35f5534d3d71eedaf997e05a5d66b540f2d552d3fca5c4929f33fd5b8e431fe94b98a52e675aa539daa8cd309f4a3d2d5944a6f2854dae253a56b2895dea4549a634f7294dad5073e6ede8f4ad752a9bea54ad55e076d379457649de275548a6f53154499a80a708ac906a29fb4afa7d27e872a032bd09881ff0f0adc40a5f7ae2abd860976f1f4acf33988ecf4bd914aff3dca85ceb173d6597338d2ee343b4bbefc7deef0262addf7a98a180e0bc93ecdcd549a1f5076e59c0537cfb6ace4c970d9ec38ba994afb43aad955a948714ae2143ae70c3a3f12dc4249f01195d370e48433f8c1cfc1cb6641f3ad54ba1f53250a7badee76e9f293de6d547a5ba966b63bbd603eb1723b25c52754b9764ba1fb49813ba8f43f55a5df3425fde0b6abdf4949f2994a9296299224bf40e0e489b3db8e97fde1a26bc6bdff125f32dd45c9f4396d23c14b713725c517b4efc5cc40f9f49b23f750e97e4935da65db8486523607d1dc4b3591be523491469ce9af89741fa5dad79ae3e3f753935edf0430e9f50025f5b79421c062d9715a59f12095ee7794939017eba6a69fddeacc872849be5749d22ac5244b50a300264b9d75a47c5bae5364fd6f93789892ea076f05858f14c3a881ff03621fa152ff91ea65a6a63e89c1e1dd7e527e944af927aa71965a79f96d203d46a5f933d53873a7596c575573b2aaac1fa7d2fec59bbe5559348b9ea0dce0af0a3738e55c7f6ef0496afef137cdf9c7a754c0dcf07ff702dc8e067e5a05cc5787ff11e35f457103b752f9d7f534f8332a701efc33c60fc17783df3fba74e67f038a3e4949a01a9dc0b39401fd956e20cae9c72db1b72d3a3d47bf6ddde7a85ae9ef006aa5e729a5fe512915b78223ed46a21f055ea0d2f8579546353b8d6c869a5ea4d2f94f950e47c8661bf1162a157e12ab529becfcf34b543a312a9d6417ce4f3a2f53e9e4a9d2e1117c9674b1bd476ca54f1ffc0a5546e379a965f4ed1bd7ec33768fb376f253465fa594c957290383e4ea32ea6fd0f63555cadc0954cbd3dcd2fb3faafc57cfd32fffaf5362d7d015fb0d0ab9a62ef29b0ae41e3bf39251cab6c5c97953ec364999f5f67cb1b729d833f36ae579a87617d07cbda5ca09ce576d4de0b729e03a9ac0efa87278179ec38bb6490e8f1633b2fb58bd8f45ccd955106c1ed7f5c2d82c9ab17729c757cf0b701abff61e055c5f13f87dcaaded10805bfb80026f1000f8872a706e9d0d3533f123aae1bda317e0340def8fa9ae42232fc069ba0a5b5505b53d2fa8f3b749413557401bab988a494cd9676f35c9e3676f7561f4c1a53a525267727da2ca629e134dbd6431979900fe94aac79be9d6e39f5156d95cd32a3fa74aff4e0194fe2f28f01601807f4991dd5297ecaf28dfd24ad3b77cad02e623fcadbd00a75940f80d05dc4613f85b0ab8ad26f07754ee15e8e6def714723b5de41f28e49d75917fa49077d145fe892a82ed0328823f536277d015fb17aa0876d42c82bfaa80f9c861272fc00d68e0df28a20b0320fa778a8ece9a74fc4195ef2e9ae5fb4f8ae75d3579fe8be2b96b003cff4dd1d14d938e7f28e0ee9ac0ff523cf7d0e4f93f8ae7a20078e6e37f4a3a7a6ad211a3807b6902e7a98039cfbd35798eab80ed2f8d05c0733e45475f4d3aaaa980b9e7efa7ebf9ab537cf40f808f1a141f0334f9a849010fd404ae45d1b15b0074d4a6c0770f00bc8e0a9c0f720cd21c0da94bd9de1ebab6578fe263cf00f8a84f99c8604d13d981021ea209dc80a26368007434a4c0870500be23657bc3356daf1125f58800a46e4c818f0c00bc09053e2a00f0a614f8e800c09ba9c0f918e218cd31c4e694958cd5b4929d283af60a808e162a70be257f6f2f52cfa0815baa80f9b0d838cd61b15614f0784de0d6544d3041b726684321efa38bdc96429ea88b5c4021efab8bdc8eb2e74901d8f3ce94d89375c5de85127b4a0062b7a7c49eaa2b760715b2fdf943cdce7e47aa0fb39f661fa61345f4f400882ea4e8d85f938ece54bbe900cd7653178ae7033579de95e27946003c77a5e898a94947370af8204de0ee14cfb33479ee41f13c3b009e8b283ae668d2d193029eab09dc8be2799e26cfbd299e8b03e0b90f454789261d7d29a9e70720753f0a7c4100e0fda906ef42cd06ef00aa895eaad9441f4849bc4853e2dd28e0c59ac0bb53ed8225baed824114f2525de43d28a32b0bc0e8f6a4c45ea62bf6600ab95c177908857cb02ef250caee2a34ed6e18055ca9093c9ce2a24a978b1194d92d0fc0ec4652e02b02001f4571b2529793d12a64bed06395976c4cb3d0630cd58c5eadd98c1e4b8d471ca2391eb11745f21a5d92f7a6900fd5451e4795c2c3344be178ca9c0f0fc09c2750d5f7119ad5f73e141d6b35e9984835ee8ed46cdced4b497c94a6c49328e0a335812753541ca349c5144ae26335259e4ad9f27101d8f2340afcf800c0f7a31cc73a5dc7319df2fb2768fafdfd29bf7fa2a6df3f80f2fb2769fafd0329924fd6257906857c8a2ef24caaac9caa59560ea2ccf9b400cc7916e5f74fd7f4fbb3293aced0a4630ee5ecced47476732989cfd294781e057cb626703145c5399a549450129fab29f17cca96d70760cb0b28f00d01802fa41cc779ba8ea394f2fbe76bfafd4594dfbf40d3ef2fa6fcfe859a7e7f0945f245ba242fa5902fd6452ea3caca259a65651965ce1b0330e772caef6fd2f4fb0753745caa494705e5ec2ed374769594c4976b4a5c45015fa109bc9ca2e24a4d2a5650125fa529f14aaaf85dad5bfc5651c8d7e822afa6cadfb50194bf4328a6afd3647a0d057cbd26f0a1141d370440c76114f88d01801f4e99c84dba26720455756fd6acbad75255f7cd9a55f79154d57d8b66d57d146577b76adaddd194b3bb4dd3d91d4399c5edba66712c25f21d9a221f4715933b032826c753e0770500be8e22fb6e5db24fa0c4be2700b14f5481f379ef7bbde4649a79ef9354c0fcab03f779012ea3814fa6e8b83f003a4ea172f101dd5c3c9512fbc100c43e8d12fb215db14fa7c47e3800b1cfa06ce4114d1b3993e2e3515d3ecea2f8782c003ecea6c01f0f00fc1c8a93277439399712fbc900c45e4f813f1500f8060afce900c0cfa3c09f0900fc7c0afcd900c02fa04ce5395d53b990427e5e17f922aa41f9826683f262aa41f9a26683f21215707b2bb8c50b709a25e31b29e09734813751cdbe97359b7d97526deb5734dbd697a980f9618eaf7a01ae4f035f4e95bfd702287f5750e0ff0b00fc4a0afcf500c0afa2c0df0800fc6a2a33dfd4cccc6b28aff496ae57ba96e2e3ed00f8b88e027f2700f0eb29f0770300bf8122fc3d5dc26fa4c47e3f00b16fa2c4fe4057eccd94d81f0620f6cdd420ce479a8338b75015cdc79a15cdad14f0564de0db289e3f0980e7db299e3fd5e4f90e153017e4332fc007d3c07752127fae29f15d14cf5f04c0f3dd2af03656f04b2ba2510a780af4ef34f43d14d35f69327d2f05fcb526f07d14d3df04c0f4fd54bbec5bcd76d9039427fd4ed7933e4811fdbd26d10f5122ffa02bf2c35416fe1840163e42f58b7ed2ec173d4a49fd7300523f46e5e22f9ab9f838958bbfeae6e2139457fa4ddb2b3d4951fd7b00543f4581ff1100f8d314f89f01803f4319c95f9a46f22c25f5df0148fd1c25f53f9a523f4f99f6bfbaa6fd02550dfca7590dbc4889cce29a226fa19063bac82f51c879bac82f5366178feb9bdd2b54532f3faed7d47b956aab57f3029ca6adfe1a055c5d13f87f540ed6d0cdc1d7a91cac19400ebe4181d70a00fc4d8a93daba9cbc4565631dcd6c7c9b02aeab09fc0ec5453d5d2edea590ebeb22bf4719c70e0118c7fb94ef68a0e93b3ea0f868a8cbc7879471eca8691c1f51c08d34813fa6b868accbc556ca369a04601b9f50e04d0300ff9422bb9926d99f51c0cd35813fa7727127dd5cfc8222ba4500447f4981b70c00fc2b8a9356ba9c7c4d21b7d645fe863290369a06f22d05dc5613f83b8a8b025d2ebea78ca35d00c6f10305be7300e03f5264efa249f64f14707b4de09fa95ceca09b8bbf50c81d75917fa5903be922ff4619476100c6f13bd5aae9acd9aaf983e2a38b2e1f7f527cec1a001f7f517c74d5e4e36faab074d32c2cff50c0dd3581ffa572b0876e0efe478d1216c5754709f998897260a9a71736d20c2cc554c09c8d5eba6ce4a990b93df70ec09ee394d87d74c5cea790fbea22575321f32fc3f7b322da7a21a4330d5e9d02ef1f00780d15381ffa1be0c5fad28c11d6a480076a02d75201737fb79ba6bfab4d99c7eebae65187421ea48b5c9742de4317b91e85bca72e727dca9e070760cf3b50620fd115bb01853c5417b921853c4c1779470a79b82e72230a79842e72630a79a42e72130a79942e7253ca278dd6f449cda8c6c118cdc641734ae2b19a12ef4401efa509dc8202de5b13b825053c4e13b81555058ed7ac025b53edaf0901b4bfda5074eca349475b8a8e899a7414a8800bace0be5e8017c648e07614159334a9d899a262b22615bb502e6e8aae8b6b4f713155938b0e1417d334b9e848b533f60ba09dd189a263ba261d85540eeeaf9b839d29910fd014b90be58e0e0cc01dedaa02e783053334070bba52c0333581bb513978906e0e76a7889e1500d13da8a6c66ccda64611c5c71c5d3e7a52ae63aea6ebe845893c4f57e4de1472b12e721faa78976816efbe94c8f37545ee47212fd045ee4f59c6424dcb184001976a020fa48adf22cde2b71b25f1624d8977a7ead72501d4af8328f0a50180ef41159532cda2b22765d0cb740d7ab00ab9b1152cf722f2201a780825f2c1ba220fa5902b74918751f5606500f5e0700abc2a00f01154615cae5918475264afd0257b1485bc5217793445c62a4d32c65022afd615792c25f2219a22ef4589bc4657e4bd29e4437591c751c887e9228fa7900fd7459e4065e0119a19b80f25f25a5d912752221fa929f2be94c847e98a3c8912f9684d912753221fa32bf2144ae46335459e4a011fa7093c8d6ac51cafd98ad94f05cc27bbd7c57527bba753addc13345bb9fb532c9fa8c9f20114f0499ac00752a67cb2ae29cfa0443e4553e49994c59daa697107516daed3026873cda26cee744d9b9b4de5e019ba39388722fa4c4da2e752449f1500d1f328a2cfd624ba9822fa1c5da24b28e4737591e7ab90f9f933ebbd9091e6fc990514f0064de0850ae01e1dac606cb6f5df64b69a558afbddd9240bbdcc0a955aa1122b3c9c2db37e955be12556b8c27a9affbfc20acfb37e555a4f4cb69eaeb09e2a630bd830ebba8acde64ed0fa3bcd421b6e3f3182ed6dc5cdb19ee798cefd8916e21c2b6d8e37d44ea12b2b1071ee37665a7f799c5b522e5985f5fb3c153b31899da2ea56f07cebc9c2587bfbc96024ab46305e4a59df05bad6b788aa022ed4ac0216539ee9224dcfb48402be5813782945c5259a549451be746300be741945c7264d3aca293a2ed5a4e3601570232b789915d15a418792926e7402151425976b52524951728526255594855c1980852ca7a4be4a53ea1594d4570720f54a4aea6b34a55e45497d6d0052afa6a4be4e53ea4328a9af0f40ea3594d437684a7d2825f58d01487d1825f54d9a521f4e49bd3900a98fa0a4be5953eab594d4b70420f59194d4b76a4a7d14d5b2b94db765733425f2ed9a221f43897c87aec8c75222dfa929f27194c877e98a7c3c25f2dd9a22af5301f379bd7be2faf37a275052dfab29f58994d4f70520f549542edeaf9b8b27532da607345b4ca7a880798fe9412fc069d6ce9c4a013fa4097c1a45f2c3ba249fae42e633b38f781139cdccec1914f0a39ac06752e3348f698ed39c45d9dbe39af6763655093e114025780e45c7939a749c4bb9a3a734ddd17a4ae2a73525de40f1fc4c003c9f47d1f1ac261de753743ca749c70594d3785ed7695c4871f182261717515cbca8c9c5c52ae0b656708b17e0c9f422eb4b28925fd225792345f2cb9a246fa2fcdc2b9a7eee522af75ed5ccbdcba8dc7b4d33f72ea724fe9fa6c457a846a33b5ac1d8126672347aaa75afd48a5dcd46dab1a5d6ff1c73a89546b1155a66bdbbccfa5d6163f111dfcc6f8cb7fe155b212e4dfa51ead73d8f52bf618f521759bf4c4b4c8d5e5f4915dc37750bee5554c17d4bb3e05e4d15dcb7350bee3554317847b3185cab02e6c5e05d2fc0dc4808e0eba8dc7b4f37f7aea772ef7dcddcbb81cabd0f3473ef46aad7f1a166afe3260af8234de0cd54ee7dac9b7b3753246fd524f916aa6df949006dcb5ba9f2f7a966f9bb8d92fab300a4be9d2a299f6b96943b28f3f842d73ceea444fe5253e4bb2891bfd215f96e4ae4af3545be8712f91b5d91efa544fe5653e4fb2891bfd315f97e4ae4ef35457e801a7bfb2180b1b70729a97fd494fa214aea9f0290fa614aea9f35a57e4405cc4f1dffc50b70ba53c729e05f35811fa3807fd3047e5c05cc83bf5b112d1519a8ccc46a74024f5035cb1f01d42c4f52e07f0600fe14e544fed275224f538d8fbf351b1fcf50ed837f34db07cf525cfcabcbc5739401fe1790013eaf4a802f2463f97a0bc95ea03889e56b72f22265d679f9fa66bd85028f0700fe920abc35e7da0bd9eb69e09729b2abe992fd0a855c5d17f9551532ff80680d2f64a4f980e86b5416d60c200bff47f9905a5ea44ee3435ea788aead4bf41b14721d5de43729a6eb06c0f45b1478bd00c0dfa6c0eb0700fe0e05be4300e0ef52b9d9403737dfa3c46e1880d8ef53e03b0600fe01c549235d4e3ea4c46e1c80d81f51e04d0200ff98e2a4a92e275b29b19b0520f6271478f300c03fa538d9499793cf28e416bac89f53c82d7591bfa0905be9227f4921b7d645fe8a426ea38bfc3585dc5617f91baa0d5f901f4c1bfe5baafbdbce4b9b244df7f73baa30ee1c4061fc9e02df2500f01fa8dc6caf9b9b3f52bdd30e5ec84ed33bfd896a5976d46c59fe4c71d149978b5fa8267ca16613fe57ca363a07601bbf517c74d1e5e377aa33bdab6667fa0f6aacafabf57427093876b21de43b90a6b2627b7edb990b5f6aff1e6bcf92f3b9f0f9d62bce5cf8d8c49323d90aeb0e7f629275e5b1a5f69d0ad69dcdb2fe4eb6638b2dc4e5f6cc35c74dbe33c2bac27ea86236ca7a6b0e5b6aa7e0bc9b9ced76e6de4bed9967778c235f6f4bc35969b4e073d6cbaddf9528f529f6dc3f60ba51a7596f955a387e0642ffa458efa6627d28a366e1f76173d9229bcd2ac1e232566efd3f96f1f5094bec1509fc2d1e931941d68caf5c5866cfd1cfb19ef5a3df5f947edd55faed4eea375ae472aa9e0bac1097b8cab684324be6f9f61a87a569749d92f2ac1f9dfea674eaa1d2a93fa953aa146e8dcaadd80a6177a674f987d2a548a5cb6ea42eb01266991d2adb86b9f32fa5514f954683b2d66881c222699d54f6eb47abff28ad7aa9b4eae2c34f803e6542c2745ed48fc47c705729716f95c47b3246a6eac8394ad8c21c857fa23d7d3aaf96ad66314ab33e2acd7a655dfee7b185f6cab262db169727fc80ba26f3a3411ea5415f9506637c9491a1961e1576edece832cfaebf2bd2c84d979974e87eb48d53daf65369db41b2445923c89d71b64c0bacdf0b03ca957c4acefe545b409d26aeffc7d92da34acbd616dab6962e1fe8fc09a62d508dd26f804abf61becbcd683b6786274a4d3636a757f754a7341ca8d2b0af466b678e7dcf69374fb65bc4f303cca91a941ebba9f4d843b2442cb55c7a260bf9bd59613aef9d4d6bbb26a5d7ee2abd067b2a61432d198aed3c2cb53d957e09cbce7bd4a2741ba4d26d449a3cc3da8db47afdcbedd71c2b956575e790d7bccbde326b535aee41d5bd5e2d737446cba4f5f3a3411d4a833d551a4cf5d192831e1f8f4dcd352fbdbe5cf60ceb523c0c56f150c2cc8e3754b189f63afd05623c619addf72ab5fe9f6b6b174c8b331b9f558fe26908652fdb665c263d43fa3cd4a77818aae2a11fe9bbb36ba166c2f2a3c90e9426c3549a0cf0e1c3fceba246f3a34d034a9be15eb4c156a2af8d1acd8f360d296d4650e321aa7398a6daad8125a255e0ec049a65fbe64af17aa9a27d6ac6cfee486934d24b3fdc9d2eae67a6da230615d6b313acd80576bf5cdd02726304a759234ab3512acdf6f6d49a1b6d8fb8cd115e127a4dfb58bf932da16dd9876a4ce93c5aa5f3f034a52da8519564390b6a7ca509a5e3187fbd283e5330d77a08741d67d7ef236d79557e25e89abb29a5c7582f2d723ff6b92d2db219a5e55e2a2d8b3cd7cb7edbe3d9f59a9a53d2efad927eb2efd6b8aaff14b696f84e1407e3bcf4a9d2d5e07ef3305b8fd182d260bc979296ea15bdf57d69ff98aeed9b7d3eb5a4b49c408d9f65f62793ad87e7326776661e5983e76a0ca315a5e13e5ec69dd259a2bf71a7a0fb2ead29bd2652b3a0de7ca43fade8dcca46a736944efb663f5a9da9c4e5b25e6b4be937c94bebd2ccfc95e999ad024ae7c92a9da76f639d4db3d18e62638a8a8d511e6b156a7c6e5bd62c3b539a4e55693ad253591ecff8a90ebc4681f527740f3157f5cb2e949ed3bcf49e64ef3bdcd63435f7708fc8cbfd60fd727b4ac7fdbcf8e5541d93fd8db1f6bc58956d5d7c745096768af5bbdcbeef4dbbec46683a50fa4da7d677a4d3cfa941932f789fdf0836d73a525aedafd2eac0802d932a7f7e9f0f96934e142707a8383980991bf976fa313a3304c1cc1d15528c1ce8a5a736dcd6d5d10b7aa953ac7bde468783f1c09d290d6664537ac7daf311256c952569eafc3765bdc16bd585d26aa64aabee19b4e236e8e452a5c2aee8f1b66ccad8ae94e407e95b544fd62f0b8be26ff9d1a02ba5c12ceffd109ea6ff7e88a31f753fa8b659374abfd92afd7a6a97795a87ecca46774afe392af90b19bdea074e5dc3eb60e02cb654efeb785efb5c311fd2f6a0a49debadcd9f4cd5ff280b7e3b5d4c309a16519acef33666a6d634d37ab3ec74ccbef4f4a4b42cf6d2e257f76cbcf4e0723952d18bd2b124bb39216feb9ab2eba366db17ef4de9389f1a8dc1f3b2bdad50a9dd5258a658555a9998b785abf36ef21dfc051eb7ffe133ba101b74afbc0fa5f30295ce638cebecb48247b0e5b61ff3e2c5fc68db97d276a197f51da9fe68acddc22fb3da85a589fa24bd370a2adffa519a947aa9b1d59a4cb05e989023f9fb53f22f52c93fda63cde06de632d7f5c3004ad7c5542d988b32066d9da0cad6404acb25d41cad9f1975d3f3e8bb51d22f55493f41ca23e07e82cdec4a7b447ab1abbe7338dfc78a2bb373829ea355adcbe64fabd2a3bedde647f3dd29cdcb549afbd9f5c3fb0026eae94194c4cb541277907c47eee4dc8392b35c2567fb0ced425352ee494979b04aca8e9294aab55ba6241d4c495ae125df53eb0c53720ea1e4ac54c9b95fceda91bcb4c248223f1ddb595debb4b2e6d9234295d67b7cdc3db8ba6f28c545958a8bb1396d534fb2f52956b4d9b2d77718a5ef72aa6f9f1b7dc7d91a9507a8e9704ad3152a4de9554dd41e58d86995ca02f78c13997bdfb27a8ec8f4aebf1114072ba91e63501c6c3b9d47523aaff2327ae5774789fecc7cf6163e8ad274b5feb8753fd6c7579b36f9961f0d46531a1ce27ddc9aa7e97fdcdad18fba1f540e8da1f45be3a517ac5e4948cfd37a9bc3f223ff584afe4355f2ef9cb12c41cf2ee90b543e422d610deb6f2c56c7fa39d2d693afba9f68f7a41c8fd3a3931565f7dbe04bd230b309df28592a42709fa7bdd49291e7ed9444cb23f95d690ae1304bf9ea79ccf9d389ef84b70d8d8b1e9b2f71e0bcb9c4464e8e7af3bd10a36d2f5762b7e0e659e171d695bf257fa99bd242359bcbefaab4cbac137c29859ff432cfee1ff2f233d7cafd1a4223c0b298e61314db9da687f35ced2f7235af073f113cb66b96d694598a23786a71b50d354b6116b7f455b23b001344cf3cc63f040d0dabe1d6cd72ebd772bb39328939dbd74aec5045e694711956a5dccd0680929b116e2a72522ab89d6c737386dd2b98338dd2a084b11ad5f28a788eac35495b43441b9fad2ab75b2315b677196ae5a7b3f6210a94b5df2349d991a6299b850a68995d1b70b7cc21c78a865e1428abaa91a4ec289394b5b1299bc58a445bb8dc12c219119e680b33df2692ff2a167dde6576050b1e350a64de569924f3689364b6729129db2126778cdd782b66ce47ca2a2d65a240e4da2e49228f315f9081c87dacd792bdf6e46eb1285036604692b2634d5256075517e38495f1c1a9d591a0e9ec21499a8e0b6711ed1909227f6f9724f2f86dd53c490ea94481b2cd839294addb565e2d39ba1a05cafaec9fa4ec04939435259b2749eaf0272ea3405ef1ca2479279a246f0789bc325b8405a2bf1b950ed790a649ba4eca5df14cda179f0ce04573aa5548c74582b229a549ca4e365d9b4225b0bf5d0cabec7595c919b36455c0d51829d6af45a5f5f6fdf42491a7e46a8c44eeaf968ae1e34318ef844581b6df51eff5d45cd1962cb07cb692ef222a618b13e3a851a06de1dc246da799a4adbaede9f8eb73ec165b14c869353449cee926c969e22a8a3cf915f658c772dbaaaa44f303d6834581ba858393d49d6192bae69ea8732fce8d02813fef9924f04c9304eee86a82383b21932bfc9214468134b63649da5926496b80ac6e28c387b046ab5f70db7e49c2ce3649586344d8187b6d8c7b67784942cfca4810b701cd2f9c932be2284bf3ac6908887b756a92b8734d12578fb907273950b4c6719fda3d49d57ad3e3b8b35c8bd4e6d8f567342ceaeaf9499a36e4a2b3de33f233040b6726293b2f9c43dfbd2341e4a08e4922cfcfddb89a6c7b6511e9a49f7c4092ae0b4cd2b513f3d22b9037b14581c27750c7eac26d3134e9f41060b57214282b5f94a4ec229394b560991ab9aae50cd168f0ae45fdd18b4df747d5e36bd1ebc43f352749da25b92baceeea215aadb941b392946d34dd85a7288b9277db705092b04da69b20c9cd39519d27b80dcd135c6a92aefa2c755c8dafa1e4a07c914c14c8ba6f4992accb4c0f80abe7dc79515c19c1d5459b9727a9bb7cdbb5d3a23467b0717192b22b72353494242c4aa368138724a9bad2245578b653d5781dcbe0ecb528d0f606a2ed2a93b4d566f2889ad3748d02491fa0dd0657e7aaa59f3a423bdca6ac3222dda32968acf61ad3ee3e391f005b32a2b8d0e57ab4d0e55a9394356599bae5d16b5ed445ddf1ebcccf0d8cb4c7299c1d5451dad3c23743024dd76fabde64a49c3fea7edf607a8436fd8c40541721541d95a4f0c6dcf53071cbbf2a32a317031626c9bac9749b3f49166fca466d51f2e5b593546d36495533175523ec0eb873e6bb7376db5254349db3bfa240dff54724e9bb39976dff2815c7f20549926e315d5fd26dff296c7a4496bd0f421b796ecd55bb3f695b519cc12c2f4e5276dbb69a14719a14515988fc06dafb74fbb618198bce20e296799caa1ad52470f994a3eccfeaf0c72f7daa089f4e19c95631d8c2c8275038363a65841fe5183ac9efc847a78414a6e91f167a3c1ba1d0c3cc52a18fdd2a8519da7a851e36a9156a6ddad579bbb7d6dbbdacb7bd0eab1566582259e8a9922ef4b82b37fd73c991ac425f4b850b7d0fee1466bd4aa330abbd06853e37771466b976a930c3ac46619addfa853e86f90b5376f214fa5aa35ce869ed7ca1c771ce42aded80851eb747a77f6e326222f332bdf458b8f4795b6e5ae8692143fa54932b44d2a38165177a5ea4e3b6acf4dbe5680b8692e1ad0dec4e33fde94f85e44c4d619a55d1a96f411faf30e3a08c9c13d49e5ffa39f702bc4ccf25d9cbb420a150fb609e429ff3f885bef7da1766313851e8798b536196a392c983f970032e79a05e113f98efcefcffbfcfcc2be267e6ddc549f843f45e9cfeccddb918f51b60fde3f6c47f97dbde9a3f20a5d62a25b54956469731f8ba105461aa746bb97a362dbca8924defe63b96ec08de6392387005a5b68865d643de4fad9dc5fa99a37686296ae7c793d4de6b92dae60a6a31a0fbb0556ebb297b2182a3b389293a774174de17263a074692cea188cefbc34467cf48d2d9262f49e70361a2b35724e91c8ee87c304c74f68e249d2b119d0f8589ce3e91a4f34244e7c361a2b36f24e97c09d1f94898e8ec17493abf43743e1a263afb4792ce3aa8a1f498493af120bdb7a153fe7485fd64f43a9e4fb224ad8fe7c24a1790768ac5e7cd79839dcdbaa6e85c1a4bd2f94498e81c10493aa7233a9f0c139d7d2349671d44e75361a2b34f24e9fc15f9cea7c34467ff48d2b907b2ce67c24467bf48d2d906d1f96c98e8ec19493a57a0c2fe5c98e8ec1d493a5f47743e1f263a7b4592ceb3109d2f98a413a6692932dd5fd2eb95fa3192e0c83cd81499b7a2aee68b612233e5b3111120f31a44e6963091591441322f4764be6492cca619c874d7e77d2338f0d1040dcfbd1c162a7b4792cab31195af8485ca5e91a4723ca2f2d5b050d9379254be87a87c2d2c54f689249537222aff17162afb4792ca43510dfe7a58a8ec17492abb232adf080b95032249e5db88ca374d5209eb88e73167e1abfc39794774e753e5067b3bd54c11f90a1a747b2b2c441aece91823f21944e4db26896cc7f01a72b88eb2018ad9305b9c2ab44416af5acfc1c46f2b53047fc89204bf930b4bed6ffd2bb137047151ddb3e7515eba7d0922f25d9344c2c2047a24130f710c651536a5abcd7ad206a6682d43b4be679256bcb58b5be102b1312b0736696c9ce87a44defb26c9c3bbca4ab79b227d2aa2ef835c14e925d6434b44655269efbc7018a1db9906eb7463b45e81ba911f9aa435b9c39217e515f65eafe5a2be8eb25d96a146d147b99834a35a97188ed3dccbaadd8dd159c3149d8f233a3f0e139d4591a4f34644e7d630d1d9339274de85e8fc645b0e6fc874468fcaf710959f9aa412b662f7146dc98a5c553965a6a83b0535853ecb4533bc9f648b3920afbe29f29e45e47d9e8b76242ec2ea5dbd395c9fc167588dd0ba2b1aadfc228cb4f68c24ad1fa2e6f997b928ea03725fd48d35cdef4755cc5726c96b9ca1f1039a1aada9d79ba27125f2985fe7a2a62eda6e6aea0a44dd3726a9838556de9adf4697f61b6b31ee868af3b76122338a3d99dd1199df8589cc3e1124b32f22f3fb30916970dedb18990311993f84894c83ed476364f64464fe1826320d6e773646661f44e64f6122d3e0c4833132bb21327f0e1399511c4c2b4264fe122632074490ccc188cc5fc344e6c00892390491f99b49327762a9474450e72847f970885b5992d0dfb7ed148403c50f31313af7ddd91495d5d098e51fb91ad8586e3f94a3818d853143d40d42c5facf6d6985ee41de28ee1fbb030df1fe958bea0616b60032355669904c6363952fa122fdb7493277b1c9f47208fe2cb6d8a67d987d06f06291045fcc5a623d9df221ef081cfbd41d5541ffe4625c9d4fdd2697a942748e7ca8b1a6d15a44e3bf2669ac8768dc1e0e66fe0911f79f49e20a14958f7aae917fff807febc07d82bad1f99e37e286e8bd16f950be99c038bd5021cd65cec27e4ce158db5eb7a715975d10bd3193f4e22ff36c0fc5fe6b54ecf34c1227af00ae126bd07987712c1ba1b4c7e86e8ffa06d963dc24adb02e9d5743950cbee79023ab34d6189a807a42f926e9839e90b7d1a2280e09ef8e0a78359354c25811d5a94c3d77dde8b0b031dbfc1915edea6123d4a0851a23f40744688db0116a727d9b29427f4384d6cc4563a8f776d218fa0ff9ca5a2689f3fe719a293699bc6a9a6fc32d355b0d2d3045ed9ba846af6d925afe11ab850c7f5472a8ddce3458908d6d0dad89ecb1ceb6202d8afb696b20d2ea6edbb663d4e772daa3425b2f979d435e994c43bb19e9c989289e14f813aa9febe7a27eeeb59dd4cfbfa1a2bd8349e2e07b8bbc57bd54243ec71eac88faf8f8184461835c14692f9bedf0110e468fb35b678ad6a3d17c63c330d26af4ec4a63b47643b4ee980b4fd9773bf1948d50cdddc82471febf0569709784b11e7511aab11b87894ea31f8f3146e71844679330d169f4c47e6374ee8cbc64d330d169f488796374ee8de86c16263a8d7e00c1189dc7203a9b87894ea31bf68cd17913a273a730d169f44b51c6e87c07d1d9224c741afd168f313a7f4574b60c139d46bf14658cce1d5043a9d5b61ccbc4eb837a9a1c7433d623aa8f7a44ad4d52092b82bd2dae367a6493b111ccf3915db6091399060bb93132d72332db86894c832346c6c83c0791591026320d6ec13746e69988cc766122d3e046676364ce4364ee1c2632a3f8e5b25988cc5dc2446614e723a72332db8789cc28ee3c1b88c8ec1026320d6e743646e6a588cc8e6122d3e0167c63645e84c8ec948bc9b43edbc9645a2dd4752c34491c7c410296c12c4ad30b8fe22e9df7900576cec57006559cddc319061b40c6a86c8806daba8485cade91a4f20444e5ae61a1d2e881b5c6a8ec8ba8ec1a162afb4692ca671195ddc242a5d1fd10c6a8bc1651d93d2c54f68f24952b500dde232c54f68b24957f22ab2c0a0b95032349e5f7c82a7b8685ca0191a4f20944652f9354b660a9478b0d65d3d844c60f15e3828fb40f7fa8b2217270b898b149dc2f5992d2de2629ad650556d83dee12eb21d02b7a36588008eb939bcdf34552b1cec170453b53f43d85862bfae6629ca7ff7632ced31211d72f178bf8fd7fe0d2e02ca2b10d7997a3e2dc7f5bd6ce186e56240ffe1c87da8c034c525997c91b428733f856a331da8c7d9e281f59e0c05c78c47edb89476c863ce26eb958ce0723dfcea72cb7b75329ff871ad7bb6f5b4fe840395b930d4e6619db9afc10a272502e6606e9ba7aaad4833646665d5364ee8ffce31e6122d3a0651a23735f44e69e6122d3e0723e63648e46640e0e1399061be2c6c81c8ec81c1226320d2e813646e60444e6d03091697009b43132f742640e0b13990697f31923730022737898c834d8643746667f44e6883091697009b43132f744648e0c139906676a8c91391091392a1764527bc3e4ad76513c83b21f22737498c88ce209a9c3109963727d188eb7af819ba4d5d467abff4183bf63c348abd1dd0fc6687d1bd1ba572e0efdc433de136d31f8a42d1f5dafb4219d23bca708867230f36d6c90ee61e408f6cec5446e5162e87839cbd9596dc646df3723fac699a4cffba7d60d3694d69ba2f1693489313e17a706722bdcbe4e0dfc1e59e2846dd93c92a770a3f8c9f58dc81ef709139951fce4fa2644e6c4309119c54fae5f8cc8dc374c6446f193eb972032278589cc287e72fd4244e6e4309119c54fae5f84c89c122632a3f87d9df3119953c34466143fb97e0122735a98c88ce227d72f4564ee172632a3b8f2f23244e6f45cac84c3a34463c5e05ba93db451ca0eb1ee17e76264c8d810f11c96a473ff5c7cf329f96589327b7fc42a46efdc89e2f1761bd028e6016123348a6715ec82083dd024a1fc233feea5d695e6e832b6c8bf1a2ad0334cd2d55eb2bf4a863f0d3ccd6266b8a540b15d15c1759815c7298671f60a66f8d88756a668ee8396bdceccf517cabc936b7024c918b57b206a0f32496d3b05b5eae9b5f1b6680b2dae4a8497adb0ff19f5a89363a6469710c1b3c24eb0c1368031822f4304cfced54c66f23a4ab405c6b82ab3b1a87d60bcbd6aac35703caadee684e783c4511c17dd0f513937173bcca1a5b0d48a586517f5caedacad7a1b6aabce334fe9382bc8214632be317599ed2f17db540fb362e659bf1d40ee104a2ca0627394763345694b64a5c526296dc8f007dc715b362753c6c69a53edd08049496eb7aa5626064ca237305217d9ddfc707c8278b805b2d44a75991d2ab3ab2483d31e334c51bb1879c90526a9adcd7d86f563aec5c002fb65674957f40a7113648d0b7331eae97d976514d7bf2f403eb1344c740e88249d13119d8bc24467df48d2590dd1b9384c74f689249ddf20dfb9244c74f68f249dbd91752e0d139dfd2249677344675998e834fa710f637416a3c2be2c4c74f68e249d5b109de561a2b35724e93c1dd179702e26e7b2e954babf566e70f96c3b53347f8bc6df2bc2db7737b896c958dffd79446da5496a7710d4f69608cec1509c31f226a2e25f6592bc969eedd2bd71d0e0823063db065f43a349cbc348aac1626e8cd45711a92bc248aac1850dc648bd1591ba328ca49afc32af29526f41a4ae0a23a906a7868d91ba1191ba3a8ca41a6c951a23f51244ea216124d5608fca18a9ad10a96bc248aac1c58dc6486d89483d348ca446f1788b4fd040df616124d5e47141a648dd8a483d3c175f042cb2d7312d632bedc5371caccc7a6d75ae5689185bb9f43e4b1279442e88a4d6d539a2f7b44fee3658cc7f3745e4cb88c8b56121d260d13646e40b88c8234d12d91a156dd8e835c65e5937dee26489cd49b9bda20974ae6451def2753722f6a85c8ce97b5b42cbf781447147fc43a80a3a3a4c741afd08a8313ab7203a8f09139d4591a4f31a44e7b161a2d3e8b62f6374de8ae83ccef466c4e4d2c571d6830b22b86cb131aa6a8e37495723969c2d7212e7c226b7bb44b9695e826c6e5d783edb14c513bf06a2818d13c2e40d7b45f22c86e791659e18263a8b2249e76644e74961a2b36724e9bc07d179722ebf9955c99c9341b6afbd6d2fa2951fa7985f5433d9d2bf9c95db8f55592f243f49bbcdf6b819eb917745cda453c379a074145786fc846afbd3c273ee52cf48369dce43367a7a98c88ce261a9e72332cf081399513c2c753d22f3cc309119c54301362032cf0a1399511c2d3a1a91797698c88ce261a9c72232cf091399513c2c751922f3dc309119c5c352572332d78789cc281e967a0122734398c88ce210c8a588ccf372b118812f36e09fd171b6b86c3f63f09b1091e7e7ea033ac9f99fa89f41330bd177412e760d71fa003547e4ad37455e1522efc2f07cacde60bfdbd877b01e40639817e5c21ff6dd4efde145c8262fcec588258cadf3b1c995f66e4a8791ed6b8cfd2c346279492eecb327db3e97b37e8aec73631847d47b45720bcb29c87f6e0a23ad4647308dd1fa292af6979aa4b59ea095273cdf2615b04b4d4e9c553355cc192ae6976dcba651ce36a71e6c8c4a54b42f3749655b05957e4e8b37d80f37d6ffb919917b4598c9353862648cdc1b10b95786995c83639bc6c85d8cc8bd2acce41a6cee1b23770e22f7ea30936b70bec818b9cb10b9d78499dc287efe640922f7da30936b700ede18b9672172af0b33b906fb5ac6c8ad40e45e1f6672a3f8e99eab11b93784995c832bf08c91bb09917b632ebfd7e18cb93ac702babbbdf8a84083d55899294a5f4594de14deaf7845b18570331ad3da9c8bad5f456cfbdbfaf51e4b92787378ed338a43323351d1bfc524b5f559ba3157839f98ac6d8aba3c6495b7e662898eb70d897d23b9dee9086487b78589cc28ae773a1291797b98c88ce28e8f3588cc3bc2446614777c1c86c8bc334c644671c7c74a44e65d6122338a3b3e562332ef0e139951dcf15189c8bc274c644671c7c77244e6bd6122338a3b3e962232ef0b139951dcf1518ec8bc3fd7eba02832dd837106bde73a53b416a331a307c248abd1c93a63b4ee80687d705b7e33dbfd091f835ed4d8077cfab024950fe5621f481febdf0aebe6128b899c6d653076d0c55d88be87c3fb611e839669ecdb322d50217f2417a7dd50be7398f5ea32c6f788f04f41f3cf9f983caddb149d8d510dff6898e81c18493af744743e16263a8daeca33f7717254d81f0f139dbd2249e76044e71361a2b37724e95c82e87c324c74f689249de7203a9f0a139d46fbeec6e87c11d1f97498e8ec17493abf42743e13263afb4792ce7cd4507ad6249d1d6c3a27da09c35a8e4a1bc4d9073ad17a8d0f7ac040ddf676e662114b12fd5c98be6c3cd0e4949cb18191d25892cee7c344e78048d23905d1f94298e8343a616c8cceea88ce17c344679f48d2f923f29d5bc24467ff48d2d91f59e74b61a2b35f24e96c81e87c394c741add3063ae664785fd9530d1d93b9274be82e87c354c741a3d91c4189d67203a5fdb962740b80bbac1258ac6361bb4433df9ff8585cade91a4723da2f2f5b050d92b92542e4354be11162a8dae413646e52788ca37c342659f4852f930a2f2adb050d93f9254ae45239e6f8785ca7e91a47238a2f29db05039209254be8fa87cd72495ed15547a5da9e45e9a6870baa39d299a1f417ef4bd5c9e239aba5398b2df289e237a17a2f5fd5cd04a7732f1c978d85e0d6e4868608ad6635892d60f72e15fc15a4bd376360d167c6316fa1af2af1f86e95b8746573019db90f0201af3fc284c741a5dc1648cce17119d1f8789cea248d27915a2736b98e88ce6f7666e41747e6292ce962c79b4ca02eb06a7939f13ce0147da75397f75b8bd52c4f9cc83d3b0aa8a60857413aadb3fcd459309933ad17a9c038e150dff527bc787f315d9e25cd06a6c99cd5c44eb67e1f9787914b7c3ee881af59f9ba4924fd65432e7709f79d68d49b600e3ade87273b4d537455b4764815fe462e32bffa6c2427b1162b1bd1cb1623b3a90ea1c44e697b9fa900f2ed451fe0ad20844de5726c9eba7f085ce695e932d21f6b6849ec64a6d8b5ca61855aab45779565a21b83aef26df81b5a1dcb667996c420d32951567a0eee7d7e1f9ca5cbf481e143417b547bf091399513c28682122f3db309119c58382662332bf0b1399513c28680e22f3fb309119c583826622327f08139951ec191d84c8fc314c6446f1a0a0fd10993f8589cc280ed5ed8fc8fc394c6446f1a8d44588cc5fc24466148f4a3d1891f96b78be2a6bb02e37f655d98ea833f95b2e0645fae77e50c4981dde87ecf07793e4edccd26f789d2238d9665b5d8dd9674f96a4f88ff07c25d1605137f695c47bd118fc9fb928ea03b7a3f1cf275151ff2b57f396b32c21e6d92cf0af704f46d31ad3c4245bb427d83e4385fbef5c9c48c749ad4c78cda89f48370cd9e43f26e96bc7dc4bba96d9be905aeb395abce6f69806bb93b34c11fc2122f8dff0543e069becc62a9f1ea89df95f78bf0613c5cf9c7e86ac9455df8647a4babb96511cd91c8b2aa498492aa1978e17d28cb46b792ef270db1ecbecbbd15d95d41b91996792cc9d3278cfd473137b99f4a1c6eafb37900f8d878d50838372c6087d1d119a1f3642a37802d83d88d06a6123d4600bd4dca1d388d0ea6123d4e0749b31429f4284d6081ba1069b4cc608bd0f115a336c841a5caa608cd01710a1b5c246a8c18534c6087d16115a3b6c841a5ce6658cd05710a175c246a8c14588c6087d19115ad724a1de3f2d31c51e15e5bdfcf936dc52b33dfa05a6a87d1b0d8ed4cb85adc218e93cd487c7c049158c126aac573f1fcd22d50f1ba1065ba4c6083d1911ba43d8088de201022310a10dc2466814f7bb4f458436344928dfbc559218051d673db84054480b2258ab376249da7634491b4c197b993d727f68cf18a9c68eb1f817d5e78dc2486a14cf06c94305bc71184935580d1923f55764a94dc248aac1aac818a97f22529b86915483dd4f63a47647c5bf591849353848628cd45e88d4e66124d5e0509e31523b2252770a23a906079c8d91da0591da228ca41a9c5a3646ea8988d4962649f5ff49d3282e7de88b46485b8589ce8191a4731ca2b37598e8ec19493a07a1c2de264c7446739dd30c4467db30d1d93b92749e86e82c08139d7d2249e7e388ce7661a2b36f24e9fc18d1b97398e834ba35d6189d3154b3ef12263afb4792ce1d119ded73b1209ca213c3cd32bbdcd6d8eafa175051ef102632a3b807be06b2cc8e6122338aa7805d8a2cb35398c88ce22960f723320bc34466144f013b0491d9394c6446f114b03588cc2e6122338a7be5aa1099bb8689cc289e02b60291d9354c6446f114b0831199ddc24466144f01ab4464763749662b1f64ba5731196c24ad3345eb26446b8f30d26af43bb0c668ed89682d32496b5b05ad7e8ec3305849193b0e630222b76798c9fd7fe5dd077c5545f607f041441141a9222822020236484f144b80d011a4a9804248421209241042b1a0a2228abd606fab62c1be96b5f7babaabee5a5757575d7b5f5d716dff3b73dfe5fe5e0a04767ff3cec97ffdb069efddbcf7cddc7b67ce9c3943ec4ed1707301375d322ef12646c3ed0cb81992713556c9790b72f23225e31287ac34dc2a68b959927189c1151aee74c0cd96b1ee6eb0a9bda505b5dd4e63d15e0eb4394cda3606d78c0c093ece0c2c4a13ab476870b46a4e762fa1082e970d5765c2cd50ec536d1dbc0526aa244a83a3550add0de0f224cd7ce6aa5c35df17e697f696c499a792b30038f791c499a692b33bdc5e064ae2d45922632870ee2b89334325e762e0dc4f1267a64ace1b80737f499c592a395f05ce03247152f7e9a2717e079cf99238735472b6868ed2a05456b38d5f7ab8173c8d9256b7a10202738399943deb69998d0d6fe09c13310faf070bf93838fd87684026668ed2908f00e4020dc8c449121af26770b918aa0199385942437e0f9087694026def868c86b0179b80664e284350df97b401ea10199388d4243ee0b37be911a9089430e1a726f401ea50199989945433e1490476b4026ae63a1210f07e4313e06cf0dc5229207cfc48b026df0dc11280f9442490d87d328cf02cab15228a9133534ca7d81729c144a6a189c46f93a501e2485923a4143a3bc0928c74ba1a486bf69944742f87b82144aeac40c8db21b504e9442494d06a251be0194937cac56296d10b32915debcd1c4ac937d8c89a24ae5f6c1f6e955c6ce7a357e7b4c6230909650792cdc9c0ed6804c0c06d290cb01f9100dc81a377a3d04900fd5804c9ca0a1210f03e429527a0dd4b288b45ec3ee4039550a25b5861f8df21aa09c2685925a388946790c501e2685925abb8f46f935501e2e85925a559246f934504e974249add947a3bc1006ab33a45052ab49d228670265a1144a6a05731ae57b4039339579adde169ccf63514e3431651193b27d82d2b6ba3297555d6c6c7ef57cf7dd2ab764d23e9446485b9e7b0a1016fb485a6fa835e2e1e85b0cd38a243d06b950259238a913c634ce9781739624ce012a39d70067a9244e6a66088df32ee02c4b65a728995363a5beb781b29c49d9c7510e0fbeac366302850aa750e5eee6e3dd8bb12ba76adc77c3b63bddcc76f88382e714059f87bf6a68f0b1247864310f9bb6b2aa3fdcf38f606fe36adf7b98713721110e2e722f435f4e5d1f609beda3b799d6e47a9bc7026185ef6287f5e77ed62e18479cd9ecb41989750f1852ce91c84a5d3649637d0f42717399ac1d37d05d8ade29f5de7e01eba4af8193be32b5dda4f050158e9238f14b2b6db4059ce8554ccaae09ca012e05a724d1226b82a357b9272d089e1e9ff8f691f3dda3f47586ee82d6392f95add35b714d5a38ee3eb85ece6752f632b5d312e29ee5c6e57e684c4ce80117816a26f3ce8dbedbe70746c50e7642d29f82c8fb7a7312efb5c0bb20b5298e78404feb9d6905b9cf83117e8d8fd15366f06f4ee29717ba9b98a7d1132d48b212081732093b01615c5273841b889698c5be20695370abe09ebf8809d9cd418e76d1a605c115d39ec2f6c113cd21c177531659a2c1ee08b08b5339b7991c11d5b879d634a05cc2a4dc164e76bcd77b38c1e7b2f0c603de913e367e19502754d774ae96c700e6514ccc96c117e589fee510132ec6d637a06c055c47a7f61aa83ddcb12b74788e4975b8233f18588e73f76fcde18e7ba0752e6592f600d2f8e350778062371ab7878e5193078e7460dae8fc03003ed6c7f011dbece4e081f6a65319bcf0eae08025c17fb38327cc4c5c04f4b6db9f80f5387e97bd76bb8d61b19d464ff2004beb672e836becf13eb6be888276f1c072b0239d5be70686b99ec49007ade3f431d02e63d276a9e75290ef02c9e50eb9a95c5b3f818bc0094cd0b609d0bce0dfc2e09b3623c45bfc88d69d7a0cf84e94b8d52035e79316d9ac81698f9324b252b3eb68ac7b00eb721fc98a0dc7e12725dd8af29863a9d62cce22b8199d2c89335725e748e05c2189334b256733e03c451267a64ace77e14e7faa24ce1c959cfda175ae94c499ad92b323709e2689334d25e70c38d94f97c499a192f339e03c431267ba4acee5c079a6af8073140419e75e4694f255ed0e59e87ec138136e78194d11eb8d8c3e0cc067f9088a64a4222842e3bb1bf8cef63dc714879587b8005da189d61d796891b438531fb8bf9f236923ac5c662608ad85a64342e2b99238f354728e04cef32471a6a9e4ec0561baf32571a6abe43c18385749e2cc50c9b902382f90c499a992f321e0bc501267964aceb781f322499cd92a397f04ce8b2571e6a8e46c0b1da54be46cc0aa3113644b18115dca2f6f914c99bc1ece26dbcc09feb39fdb255c35ee9005eb9271263ab5282c42c49ec0c2ded7c4d89749a955470d2dd3da6d5bb8a25e2e85921a56a6519e0c945748a1a486946994194079a5144aeabc3b8df259a0bc4a0a2575ce9d46791d50fe4e0a2575be9d46b9007a9e574ba1a4ceb5d3287f8056798d144a6a061d8df22b6895d74aa1a466cfd128ef04cad532b791226e124ddb46ea0613b35ec79f6bafbf8a62f42e9b62e5c43d01f87a39153f737994b4754783e0c674838ff5ed76debdc4b5d039be9216689596aaa11ddee8239e142dda9a69c2759bc92b8a9af64650fde066b5865d2ed56683cc0c044acde8e081a5891b57a9c26b657b68a337f9a8c1d050f838f95a99c1dc209276b5ec0601e49b25616a2cadd21d306f9184a9b1087a27c0bc551226b1034fc3ec0298b749c2246e454ac3dc0c306f978449ac854cc36c0d987748c2d4b8dbc18fd035fabd244c622c8986f90b60de290953e3a8bc1f9ce67749c224eef446c3dc0330eff651ff6363d6b911af9bb4b544d703e83dd240352eceba1f40ff200d94d8e7a4813e05a0f73241bb9bfa2bcb0e3615ee7b298cbed3668dbac29dfe3e89db9ca433634bb46d4e6e81f8e6fd1259d354b27e01131c0fc8e94ae5aa8c7f9e0fd7d50725616a8c7fae02cc8724616a8c7f9e0d980f4bc2d418ff3c07301f9184a931fe7926603e2a095363fcf32cc07c4c12a6c6f8e72980f9b8244c8df1cf3300f30949981ae39f1700e693923035c63f2f04cca77ca478d9ca34d151b5efba7102e03ded63b3a7f5671b67bbfd6188379b162cc8e721bcf18c8f9c4d2cf0533740e7a1b0cf9e2ccadb4d4cf9acaf6d75e28fc312b5bbe2c5aa9aeb767d0998cf3131fb99e41cce59262cb75fdce086f7754f7ffbc63ced40b80d0bfc6a08c8fd91096e7700aa3261e5394c94d57713da09dae8f33a7674250e2e6919c6a7c12dea051f11f888d9768f4a611b93867ba01a8799cbe084ff938fad4db00bd5f8364b8c7ad25aec5aa0fdb38faa9e481bdef12dde5c33d215b0a85aef64b2c65487e670e57d51ce4e9a1a23f49381f2251fbdd6c62ddaca513911f728dcaa5e9684a9b1653e08987f9184a971eee861c0fcab244c8d7347f702e62b923035ce1ddd0f98af4ac2d4d8a9bf0b305f9384a971eee81ec07c5dd25e0779cc090f5aa77d3ec4ecdf90c4499d3fa2714e03ce37257166a9e46c079c7f93c499a992f3671373be2589334725e710689d6f4be2cc56c9b93b70fe5d12679a4acea3e0647f47122775651c8df34de07c571267ba4ace2b81f31f4ccedea66e8ac3a16e22c3c6e36d71a07cf77925acebb06fa72078b1e5eefb5e12206873f69f01f47bbe6794ea5f2a33d8d87ade552e7a1f254510234ed358b4536046e97d1f73a0c9b92543dd018add049d3d7472812b7a8ba54dd4bd052df603999b9313afb8b4cdc9c7416bfda78fec3c9bda58b22eef69846bab2566b1d19ee6781eb4cf0f25f504f254ae3f9e05ddfe8f24715297d0d038c702e7c79238b354723607ce4f247166aae47c1fae9d9f4ae2a4ce79d238d3a1757e2689335b25e776c0f9b9244e9d95458ae064ff421227b538208df3cfc0f9a524ce74959c2b81f32b2667bb04679a1bb77bdf869cb667f61300f8b58f4cfb4d892c258fdb89a9383d68cc90f0f00d937907939c695fe2e8c28334b53cfb7c08867ceb231812a1969b86d62a4d67469568c190d700f25f522089cbb86990b701e4775220356ed4f30974e2bf9702a97107d87700f2df52208977701a64019cda3f48812476d969905d0072ad1448e2c2031a642940fe280592b81c8606391920ff23059258e08f06791140fe240592b8da8d06793440fecc84dcb516a44da5a9bd4eb869efb2f52c8ccc7ff111902b328d59f06a83c51ad71c3d0afdcd5f2571eadcfee425e0fc4d12e700959c3702a7fd2d6238a9514d1ae79dc0d98cc9b971db926a5c459c0377fccd9894518038390d7172f0509bd85569c604ffec677171167a12220df528689fcd99a861376a9c096b2f851da26a7790b072d810d7412a3451b1ab94ed91409b474a3731f5e63edaefc6e67b6accf6dc122e0a2d24a21263f434d4cd01750b89a8c49e000df547b8d26e2911951829a5a17e09a82d25a212679668a85f00ea5612518941141aeae780da4a222a319a4a436d0637aaad25a21223ab345403a8ad25a21207af34d45fe0f46f231195382b4543fd1950b7f1115c693853547b12c42d26a6dc9649d9364199635290234a5b7dfc10f0b54d6d982f3c548543259ed4b430c940986d6ac7a48cb6a648ab05eaa11dd2966a17403b6ccfc4dbf47d3889776fda869167409bec2091354d25eb47d0d3ec98caab663226f1aa398f75e23f01949d98948ddb93c6ee0b4b0d7eac65413e0590db498124f6286990f70264672990c4c0310df260b8f96c2f0592182ca641fe062db20b13b27df0854dfcb295406c477c7ef072ab82cfc399ced126ac1652a17098d8c6c4845d99845d4d72d69dedf22c4a042c925ba5a768fb5c16e9d9d02a776092fe775ba168dcbce72ea0dd9149db650357ce41c1532bdda5c05e14c2e430e26c3b2dccb10c6e45dda4811267da69a0e500ba933450e2d594063a1640bb4b032576e369a06300746769a0c49b120d740280f690064aecd6d3400f02d05da48132c3722cd01900da531a28313847039d0aa0bda48112f33e68a02500da5b1a2831e783065a0ca0bbfa88c4376ed507718c44cba89f6362ca3e4cca0e269ebf0c7ff908d3546acfbe07887d99889d37708227b7c74ce62093d622a7c1c9dd4f12a6c6d3fb08c0dc4d12a6c62d4b0f05ccdd2561123b4534cc2980b987244c8dfbbf8e07cc3d25616a5cb9391130f79284a971ffd70301b3bf244c8dcbb3c701e60049981a8b4d0e03cc3449981af77f1d0198e9be530e1bc24c5e2ea8716d5b214c096748644d53c9ba0db066fa4e6268fcee5bc46e3d2da5bb142e04593e0ab23436d649dd378616e9ec049cd99238a9bb1ad1380f00ce1c499cd4ad24689cdde03a9a2b8993baf701af7502679e244eeace1c34ce39c0b9b7244eea489ec6790970ee238993ba85198df345e01c288993ba49148df373e0dc571227750b331a672be828edc7e4ec66ea6e049d6f8a9c855d7680dbe746efda43053bda54f1c72686dddf473b6dfc36a5c4e1266dbba8ca6631e70192387355724e01ce7c499c592a39db00e720499cd429631ae75ab8760e96c499a392733f689d43247166abe4dc19380b2471a6a9e45c0c27fb50499c192a395f07ce619238d355725e0a9cc353590b24f944d7b835ca7630721f2185324325e52aa01c2985325d25e5e140394a0a65964aca0f8072b4144a6a06328df201a01c2385324725e55288701e2885325b25e520a01c2b85325725e55b40398e49d9ab1eca4ddbbd9d98fbd983c57c195c470ff251a4ca4e6fcc32f313df1e626c3da51050f7cab76c087a8c6742468578d352510095c6f73cf04d60f245d563ed2f9ee54ef6e8d873130fa1e1d1728e03bb7578137d24c7361cd2c08a9c9eb67e68cb623d0258273159ed5955ecda63616050113c393c40897b80fdbc32f84d134d59e2a595b979758d7b696d0fa4937d140088ead08525cbed4e704dabfefb8bd04d3ad8478fb331fb1253bb4234ca4fa02b74888fc0709169ec76b91ad7083f0177f4432571522b7dd0386f06ce299238a9b1761ae73dc039d5c77513d3bae22d492726443c2472d1eee9bd81729a8f2164e36680f4dd80de05c8c3a4406abc93bf0a90874b81242eb3a641fe0090d3a54012b3886990ff02c81952208925296890bf0164a1144862a1141ae44f0039530a2431018606b9050c1b8ba4406a9cf1690e90c5522089a5ce6890ad00b2440a24b1001f0d722b809c95cae9dce431b7c6ea475b0365a98f3699e682bed138bbc04d45d827699f676c05f7ed321f71a001eeffa38fe18b293015eea0517d0e7af082b68b8bddd82de22cf751fba87161356a7e1bed241f036df30849981acb428e07ccd992303596851c05981592303596851c0d987324616aec180d05ccb992303596851c0698959230359685cc07cc2a49981acb421600e63c49981a0be34f00ccf992303516c69f0c98d53e06945106517898aa2636f7f80124642d486dcc283c941da953671f698905fb00654d2a2993b7992752d2b6997f18c26f0b7d54315a60ca821f579b86d6524c7401387b4d9de50e36877bba97b260479b1876918f652ad1d5b3d22c7290f34db41bf00433c48c328382275407df0fbf37ce84ab2bece3f2835752ce65beb83989b90c2e058b7d2c0f18e0da709c9ce521644cbb8e0e873bfc1226de0e805768365cba4c731c7e21a01ec9440d2b674f08de7f95a9720f5b103c21beaa4e37b31de620473e3b71e0a1c147bbb48ab8488056726f77b8a61ee563394bdc23b5ed31ccd21c115c4debeb99669b4cee35b4058bf549b8861ecd646d9760b55df86a38f53d9df2b46de94f8553fe181ffdd1c6a660eb1b74e6c329bed4c73aa086baf675cb8f673047f1bcaaaf70721f2b0d941863a2817e06a0c74903259ef234d07701f47869a0c4fb390df46d005d260d941824a1817e08a0274803d5583bfb7d003d511a2871e69d06fa31809e240d9498174203fd0840974b0325662dd1403f05d093a5811273ea68a09f00e80a7e9ca9317590ea8bdd137ba4b4d8fd9b309e3fc547c99eb0f651a5df70086f932613f39dea334c6793ba27bb7a1e358eb1e1a93a62b79e3655f71c9cf02b7d4c7564d53aed3db4495a3af7046893a7f9c80c69dc8a8d349569362530697cba244c8d69367301f30c49981a171acc04cc3325616a5c685004986749c2d4b8d0e030c03c5b12a6c685063300f31c49981a171a8c07cc7325616a5c68301130cf9384a971a1c158c03c5f12a6c699f5830073958f51796330b1122cb59ae10a16eb49c07a8144566a479ec63a00582f64b2760cbea84ecaa12b095ec678f7322a5d24c9aa84e93634c66d588cbd4dcc78113bb5abca84b5b34b5ceb8b19edcbb6d516162bcce6dc05002f9611651f6c6aef36402d34358d457b3c9ce297f8585fd4d819a15c9553c07b4278f852499c792a398702e7659238a923761ae7ce70b25f2e89335d25e748e0bc4212a7cef499a5c079a524ce4c959c3703e7559238a96555689c6f00e7ef247166abe4fc1e38af96c499a392b30d7494aef1912c936ba25d5bc22c0fddc9328f9898efda54ae1d8a5f3a79228336562f86b4add54cca7d4c72de5195891753272fbace802d1dea8edbabd72dca4e5e9c1d3f675cd2918931fc81ac3fca597079b8cec7e5213d1597075a9bbe132e0fd7a7b2d445f2e541e39e051de0be7f83144aea82181ae5194079a314ca749594d940b9460a25b5c81f8df265a0bc490a65a64aca354079b314ca1c95948ba103748b14ca6c95949b01e5ad5228f35452fe1b286f934299ab92f269a0bc9d49d9dec4ab85ca5ccca8d8458fbced5d409b0a9e6562c23b7c24d16cfc3ed5c4046eda3ed53703ebefa59ce4d4252fb493bc0f7488ee9442492da042a3bc1828ef924299ae92720950de2d85925a3a9a46f92950de2385325325e5e340f9072994392a29cf83bee5bd5228b355521e0e94f749a1cc5549f90fa0bc9f4919edd966a94a5cc558fb52e37c62edb33b4b4d0cf9800fc8b4260a7934403ee823a7a3a159743c5c388fae717de5e33093fe90244e6a7a218df3afc0f9b024ce012a396f02ce472471ea5c4c7d37703ecae46c1d7cd150f5777db79c6e70cb79ccf7c2bffa570625d7384aa7162fdd8cc4fa330c1e1f97c84a5d4a4d637d13589ff0d1d3cc6ba23dcd1570da3fc9bf5a2e3476556565d2b592b810b5078bad2fb03de5a3fd3534fac6391de2894c2b64f63d8cbd9f6642461b364549aec5aefd159a6839f4fa361523c2d236c3d906609f61c2f6aa059bbc134698013c2978611639fa3828f85999bb1c94271e4d2e4341db2ba317303fcb64ee538bb9c2b55d7b661605870d4b95da6d71c2f9f3fa03749e2e16b4e5ffd7c35dff39dfabd71bdf9289052a68edb80fb4e33f3269a36a9c36061a1d557b27ea6818723eef23652623f83727f1cb0bdd464e9e0869a3f65d80f08554ae1b4a0e82682c1a79888929ffc4a6b4a3a059c1376a82872c700552c2904878a812f750fb7965f03b79c34c166567a0fc3393b255f04585b17b5d8e4ebaafebbb16f600b2177d8c8c6cfaa0bdfb862bcc0a5c17a7d2784b22dc930569e08af8928fb070c3498493922679f3987dc7d62ccee9c0f9b224ce5c959c2380f32f9238b35472fe0a57cdbf4ae2cc54c9f937e07c4512678e4acebde0647f551267b64acef6c0f99a244eea5c108df37038d95f97c449dd6e91c6f90c70be2189933a014ce33c1e38dff41db36c7cc54de25623b465566b2166f937266d1b13ce5dda83d871b9c52c0c1e666787346e3cdf13dae45bec495fdbceec014624dae29044bbd3c7b635b0bdcd64eb60e21879f8cb9b4ec2c13f01f1ef52f2d6a91d1f1a651b980e7b470a25b5d343a35c0e94ef4aa1a476786894fd81f21f5228a951211ae53340f99e144a6a448846b91a28df9742498d06d128e742b7fb032994d448108df21b6895ff9442499ddfe1f52ba1557e2885923ab743a3bc03283f625276ad8712cb8d2697119de40e43cd5c2b6b4622dd19483f4e65ebc4c351abc0d0d25bf6866be62792964b516b6ed038ff0893119f4ae21ca092f356e0fc4c12a7ceadb9ef05cecf999c1d4d9c4d14aff3897eac3dbbb2d4c48c5ff898845860ca821f57373805312cf184e4b568c43bfb7416ed50a0fdd247ee6f7a93cbfddd1f08bf92b9469278eda4ad91fc163a4a5f3359a352f5692605a5ea69f9977740abfc86bd22c2b6b9c5c6a64dc78ba7e2391f7d43c8ee80f7adaffb769c051c5ff5754f96bd0d8cff623276361bd39ba46e6dcc2b5b0298df49c2d4380a7f1530bf978449dc3a9686f90260fe5b12a6c6fa2f2f01e60f9230897b50d1309f05ccb592308995d56998cf03e68f923089e36e1ae6d580f91f4998c42a0634cceb01f32749981a6396df00e6cf92308939be34ccef01f317266677130f246d50cd620e77f38f63128b9bcb4d95cbf84d5ea16b9f33df3d9e172162e1de0fb8bf32717b9aff4d8d18e25d9f5659e32708c3fda60199d84fa521bf03c8a6a502648db58efe02c8cd342013fbb534e47b0079330dc8c4e8150db92ba4e334d780acb1a4541740de5c033231da4543de1e905b684026c66769c85b01f2161a9089233d1af24e80bca50664626c8286bc0320b764226f380f353c54586095787ba315583d1528b7625276311b5fc581d836692be5af815cbf56d2408957541ae86a00dd5a1a28b11f40033d12405b4b0325f65e69a0c700681b69a0c49b120d7429806e230d941829a0819e06a0db4a03d5580f670180b695064a8ccad2406b00b49d3450e25c020d741180b697064a9c01a3812e06d00e4cd01d4c3c871b7f1cef0e56e916f514b801a77db07d131ee66e691ba79c6662d48e4cd44ddfaf8b78bfa72d9ab81546f59d24b2a6a964fd1266b5b64b65dc291993d8c59fc73af19f07cace4ccadd4cddf4225c9d9f514f21c1eae011d1228cf8332cca4eecb3d29602b5851bd8f64cf2682555b649c14a2a5a9ad10370abeac2e48bf696b1f77dcb556aaa7de1ad60e195015e575f9da728012e3e8547044f1e67eca6534b4c9451a837f1ad279cd03bf8b886e2ede8ffe735741e74ac766492ff777b7769cc01d80e68bbf9e85cd57f8988dea7870b036dc1e59370b5dd496e2bd538f53c195a6977fe8dac605d118fc18e2d1cefcf76e8834cb8576278c8a1c1c792e050c44aceb4f6ba2db4d79d99a8ede0d44f4e98f0d2bda2b5ca83a027d08309182dd66838212279df398d2b5fae83537c1749981a57bedc04983d25616a5cfb7f2960f69284a971edff9580d95b12a6c6b5ffab00735749981ad7fe5f04987d24616a5cfb7f3260f69584a971edff2980d94f12a6c6b5ff2700e66e923035aefd3f093077f73de3d91066be8b76da6033b9d8072d6e3f1fa6e9f690c89aa692b51fb0eec964b59b3dc505e5a2a98f92e0e1fa821c765a3142db8b89b6f15b496b5ca8500531a3fe92387355724e05ce019238b354726e0b9c699238335572fe07ae9de992387354720e86d6992189931a71a771ee069c999238a925b3790bbce064cf92c499a192f30de0cc96c4492d2c47e3bc1c3873989c51516d4bd5f436c3381518737da423a6d71a9f6b9e2f1f0b7879be13641abf9d39311047dbce7c048436f666e77214ba0cf8727772c7295c5ec21c035980fda06deee3e376d3d0cd6650f0d44a63571a15063f256f03484b92ed0081e1819238a91b54d238b381735f499cd4cdcf699c2de06ab99f244e6a396d1ae77ec0b9bf244eea7ef234ce32e03c40122775f76e1ae739c0992f8993baaf3c8df305e01c2489939a8e40e3fc1838074be2a4ee2f4fe36c0e1da5213267ce89d123dacc7926b4d2021f652da2fa8a73d7c58d1a4e9dd198853409dae95049d1cd3c95b5c066c354c630499cb92a392701e770499c592a395b02e708499c992a39bf3331e748499c392a3973a1758e92c4495d4640e3dc1138474be24c53c9590527fb18499c192a395f01ce03257152f70ba5719e039c63999cbb98bad513c6b997112dedaf76870c77171be29658173aa94a379aa75755a0954a7f1c88c731897b994d9f344e1ee113176cf560313f0603d28398ccf6576311806a8558eda04d8e67627532ebdfa53179e44e83a495a0d81c3a4b13a44012037434c8eba0454e9402494ca4a1410e04c849522089114e1a6416404e9602495cb546839c0290074b8124767168906300f2102990c4510f0db202200f950249acdf41839c0d9053a44012abcad0205703e4542990c45a4734c86b01729a8ff9f386e343586d3b79493f8db52d8b7519b01ec664ddd524cf9fcf34750b4036ed8da6bf8540c6e14cea01b5a86b1a84acdec44812b1db4f0b8d3c0efcd353595ea56e1ebdbe6ca66f213c3243122631d644c3fc0e300b25616accb37b0530674ac224deb26898af016691244c62578b86f93a60164bc224c69e68981f026689244ce2689f86f92960ce9284498c41d130bf02cc524998c4513f0df36bc02c9384c9dcae8c85f90d6096fbd851231a8096af772a4e63c4fe4d184c1ee1235ba9a1b01e1e2ec4d4b8e8e0216899b3257152d769d238ff049c159238a99b3bd338af05ce399238a96bdc699cb703e75c76b1d30a77dfae72b1cdc2e021f60e4edc128776efee6562b4ca546e359adc0635ee4db03d2c19acf251700a536347271261e7064f5c62346f2af614b4c8793e0a4ea505ffa2a37aaad675010bef4cc09bcfc4eb594f1b1c1efcd0269dd4044fb12655eeaa38debd343bc6a931517a76b58f164abb663e08c8d54ce4ec7aae99c9fb61c6c5a8ea4eac55bb9ddbaa83afa28fe173eb2f60458dcad38a58ed0fe3a5053ec6f18deb42e5a8dcf6e924e840d548c2d4b8edd372c05c28095363d7ea78c05c240953e3b64f2702e66249981ab77d3a16309748c2d4b8edd3718079a4244c8de1906ac03c4a12a6c66d9f9600e6d19230356e7c7b32601e230953e3c6b72b0073696a0378e1a1ec989f3ac34e5b78bd020693c7fac8a9b7c193b862bc7dc1765cbed857148a16c22b3131e471a96c9398514f6d93f35894cf4150f978266587e08b1298ccc837935dbd854af7a20b82976493b9edd3f505ecb683f6b8ccc71a0f8c8a0e0e7e58157c56e35ece78876c4ff3f9260cbbd1e3a0139a9158fbc2ade704266b5753bb46628959945838907cc27b5a4c3097d55257c2e97ea29c2b27b19749bb727686bbf949bef7de68fc8a23622ba5ad387a1f4efce53e3a4ab94db4a3b4066e4c27fb38dd1b3712d2183b1a05942b9894dd12940b8253b9dc546fd4c94e84a59deca7c3c97e8a545862e898063b155aeca95261352e889d04b02ba5c26abcefef0db0a74985258ef269b017c135f674a9b0c489631aecb9007b868f32fe8d5fb599a6724df1dd30aa3a531aa8c615efb701e859d24035ae2d5e0ea0674b03d5b8f2fd44003d471aa8c635c66702e8b9d24035ae805f09a0e74903d5b8d6f80a003d5f1aa8c695f09700e82a69a01ad71caf01d00ba4816a5c11bf1a402f6482b64d806605ff1606dfb4eb42bc2dbca1f1dd6762be8bd86b3997b831b99d52b6d5eef2dde79550704dff8c7d17e0bc58cec488c66cbbc380f21226659be08b3277152c76d7c3f9411b8ca6ec887b1ed04a586e0170974adaa8345765a023036e309749e2cc53c9390a382f97c4a9330cb70f24de5c2189335d25e754e0bc521267864aced381f32a499c992a391f01cedf49e2cc52c9f92e705e2d89335b25e7afc0798d244eea6a231a673be8285dcbe4b45f9427c6e0fa98b63231d3ea5456444c1e7153efd7b431f7ded0e6ae9384a97185db10c0bc5e12a6c61a1f39807983244c8d353e7201f34649981a6b7cf406cc35923035d6f84803cc9b24616aacf1d11d306f9684a9719dc62e80798b244c8d353e5a02e6ad923035d6f8d811306ff3b14ab83198c9fbc011dbe80a16eb040867dc2e91959a9549636de958b76c51ebe043eb1c7cb08be1d8284e9189eb6fee6586193b355be2488a82af479b72f7ac1901c8d4e0bf8dfb5b1c16fc57dff79bb932ab0566b1a972dfb5c72b76c79e13fcd4beb26a3360b7e02177d8a6d12ad134faba1acb76f141dd42957d1d46b509972514398ebecd5a07dfb38f9d197cb734782f95c1ff97265e6ff8d378fd68ed9fb6ace7b97d9bb54afaae7dff6185ddbe1b512aa1afcb2fb04799153c3aac8b6a2b0014babf45685ae2daef04f78caae0195deb3ca3bec74d346589a650e6148b83676e4a6a886d42cd9ab54bb41a5b3d788c2971efb5d8bddfc2e03745efb3ffeec1c35c51d270d1c85eeb968bec95283f3a27f155f4fd0d1fd3b699f51fedf7b66134abff9a51f13f6bed1b7a47e1096a9f3fcbfdf54adc51476cf09d6ef8fd357ce6b45ecf5fa5ff1ef66fd194dfff9df6ef9ef8b3bb66dad95d1426057ff9e2c4a938367870584ac3feafc5ff01fda62ff6b7190800 serializedProgramBytesString: - serializedSignature: 18a36b1271b199a82e03b6313dcd41f1fbcb2885e269647a2e7677c20e7f30aefb9afbe630da5f9cc5ecaf21f20bbef541f083c53c899c3afd08871cbf266704 + serializedSignature: d8160425fdf2849e57277ec4bf09134bd19764eda05e8404780cff330910285bc6b25945978171169ceffbcfdc440252d7d1dc90778283f858ab25dbe773c901 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/33324f447d661da40b534c9fa93c0ec2.asset b/Assets/SerializedUdonPrograms/33324f447d661da40b534c9fa93c0ec2.asset index 4e410a4..401c8cd 100644 --- a/Assets/SerializedUdonPrograms/33324f447d661da40b534c9fa93c0ec2.asset +++ b/Assets/SerializedUdonPrograms/33324f447d661da40b534c9fa93c0ec2.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5b5b53144714ee5998bd08089a80788b9a18c5083bab58e62d55a2a8245e08b754c54a2d2b2cbaba5cb2bb467dcc53aaf28ff294bf911f91d73c9b73bee9819e99ee1946b6c110678be99dbe9c3ee73ba7cf39ddb3e43c4197334eb72531276e8bb25814ab62536cd0b7db54aed3c77f0aea67458bca6774af51dbb8389f3292afcbce28dd67e8a92d3a34f29558a1b281f67951a7ef3334b64e4f5cbb467f75eae5f4d2a04571473c168fc409673885c41206b5659dc3723945ba4f89b7d45a07533c8987a613749ba79636dad689e9a0df13f113c45aa7b6151ad3124da2f914148b7ff358c884222fcb5ef9bd4f79e6b2204b57b6f7cbe71cfd95989efcaed272e5f837097d03fa3db22cc9f10386f623b2fda87c2e2ae3d4f641dd9cae034ddc276c6a624b7860e24a06930946a61b0b93cee77c7cc96a78da0ea9658b086834b6087be88849715dabb1934ebfc2f76ddc6bd4a301a243f129fe884dc1cc35e95357ccad4df5f760ad6c700d6a298b0754f2a865718d0ce84984ca124ddb2493ad8b05ba6f81de32b11def9926129b6674cc1cd1f457ce3ad504806ed173131ccee3fe0b38ad83fb19aaeb601d6fd04a9ea2f20d668bcbdea2efba391724647a1ef50bc854ef2fd3404d77481ae6de83ed7ed4c8416884a1cf0fc965d8ebc19bfc1ed3c4470c7d27e32230f934aef9a12154775d78fce8ccc510cc2e635c42bd7dfb78df14371265d123c3ea3e0d0976347ce9cfbfde4dd5fff9cd0d8b36293c84ad3329a22501cbf4c69c91188564115cb7b7c28c46e17774f0230ccfef23fc7ebf06fa6557401e9129ac0004dc2068ce8be7d4d02256cb629a98a881eda6647211223511e61ab26e0ae3eae2aef49e9be235848be9b3929769cb9826e0a68965524a4ea794e27e2b25dd0b2529a5b82dd78e52f8d22358322098c68309c11e1d82c8deda56115ca43a3f5d9a466b035654a668cd51ba464f5348abdf6e5b581b7299c6dd423d8f0c62f7438c7f05de9235c049ea598d06cc5ae88316bec6cad94f394c5aecd56991c57296ad6a3148bae729bbfa8eda6ad4bf8e08cef5b344b1467333bd5b986127510f8f48d60f27db1311fde8f53200bd5c54b6107be5cc84b8ab431cbbb4857df43cdcb6092a6c69d97d0f6fdbae462d5f0fed20a01d8d0997ce8209c2bc06c20a7bc3218d477c47975b8a30c67eca40bca0d34fff7e4786c724fe0be1ef28b26be7d8aeedfeb8212aa4cd6f524d51871ece007edd177f92b6f1bf87cca41e922f98d7f7b2cc51b0f39ba3720d5c70fd8a4c1793e74ad6cc27dbf8ec68c6c319c8b4d8fdf1857d293e256e72b0906158c84442c45ac0c91bef79d720e57a629c0a90084727bd758e60ee0f0b1993e59774968fd3ab6707920f2d49e919edc9cc1a49b662f6173d512b66e7eb5c4db093bd71749e93aa9d9bc162466131f6b83069ff884efbec869d1707a2fdef698e1a666ca1c7a60cb1ddb381933a1be070e29413d0ef065f114b483287533007db0c998ca24f97a7707e715a68b6d3df6cbbb97022f948f0bb84d798f7a5dcea9645953ecfd052150fa86d0584d4f4947be8e89912d9589254302749fd26c9cee824bb135902aa73f625d9240eaa84f4cfd0465322cf2da671492de1b6709e9945ca019394677552fe60d09f096f5ff27bd061b0c59ba5b22d8f49b8867be82d31699b681e15767e59b0386ac2e2331d163f76018b392a3bca76b6db58e8567e1644064d889cd321b262f441f1f4a92c6d98d1885a046ff357336013d678162ca2eb68896a1b34b71ea3027d1c873dde34825b8b46ce62043fb58587ccb7922195e3b9d7695df3da5d20ee9e620da727681c0f4c6fecd662c1f87d5fdea449e11faaf1f835bce10b5e08e8a4dbfda622fea2aa20250a6811d29cbb1f3a492fa85acd79c341b2f93ed694cec5e73c5b8fde86b21f42fb041ec9ad89c3894915c3f9c4bc934e3f6d333e0102c11b8d2ebca466a3ba45c0ac22d5698b367028b8b90ae3fe854d700a00875fdead4a8ff45f80e701e029b811e277bbb608dfef654edc5d0cc241bfc16eb8057aab51f7c19bee0f8ef38beaf21f8b2da1318dddec44247d24a97044faf27f1e2c2a1c2c2e31087d816fc51abf6c738d0f405755ac9e35ea52dda6cdf94564b6bdbcc82d8556bebb1b51f6ea1cc76c023722815b919617dd06a9cc5745c51e94255b50e61528afd884f28c84d2cf4f376085bbcba02dc23a6a0bd69202eb570769a1e18dba45288fdb82b2a04079d526947ca4c86184599c26061ad206ad4136680b3257816cdc266417348bba856df42b6c6cbf95bfe43b6c5e33a7003c6113e03e506b21497989e4313869b1065a9f2dd07a14d0ca36411b14a674674376b1065ec116788e029e6713bcb312bc8e780e6f688ad2f15334ab4b79d816b04505d88a4d60cf697c6596c3418be09eb205ee1105dc6b36c1654fbf153be5b606d8802dc07ac5a139d7a8706a7a9d95ee48a58f258433fff0e09894937f1bf01079444d1e2fd49483048fb1766e8a6c8791c934d377f993aa2811fd34bba69f6e9c5ce824ddcb29467f82563cde421d6af96f08ff1fa370b1999e80192f2a275f8fa9f32a98e2cbfd17cd8c331253370000 serializedProgramBytesString: - serializedSignature: 96b81528799b8f946e30bec1996d04624a7daa323796782344340b25d04a55b7f26e01230f0adaaf1278a9740fabf9070b309a303f73f4eafc4918d6b20fda0c + serializedSignature: 2c6ca1dc67eb5377b77c5963e77c2a088ffffda75d767e92be6fdd29994ba18083555c8f286295544153c734116351ef52f0403ef8ce45be0dd56aa7a1845103 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/33f4fef732b9ee049a250a214c3249ac.asset b/Assets/SerializedUdonPrograms/33f4fef732b9ee049a250a214c3249ac.asset new file mode 100644 index 0000000..9b4b8f0 --- /dev/null +++ b/Assets/SerializedUdonPrograms/33f4fef732b9ee049a250a214c3249ac.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 33f4fef732b9ee049a250a214c3249ac + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cc5f5f8e76ccbddb8771bcb5d6e926cc9b201e32a17e18a249b621b5b96645b58b2858a1bc5f4de7befbdf74e4212124802a92481040849482084249090040284ffbed919ddbbbd7977b7b77aa759ff7ff2c75a6d7bf3e63b6ffa9bd97679c2f9894c767ead11a56281c815ab4595d821b63b7f2d708e75ce3ff74c5f5f251a9ce316e77785736fb2c84ef226fc8c8f0c727e9738678da2c979b359543ac71a79bf4c543b7f9738ef563b677075b3f3bfda792ad2c17969b528162bc50a3130d23f898835f2a546752d02f18a74767ecf177b9cbbd5522908244fde1ae8fc2a73ee34ca7b758ed2fab9b562bd8c569d73afd279a741d43a323749899d67e50af987700ffdd571803af673fe77517fb7577f77567fe3e7b3d471608acf0f42ef75417f03a19b13bc3f581dffe1fcefe8fcb91b9dc3bb1fa9f321aebc765b13c81aa68ec3d5f14025734f0afa7752c71149e29b48463692950ab3ceea384a1d472a7df7a619fe189751e47a240f8eff44fa8c42617741f7e1383a40dc753a7eea49c74fdd746c77b54abff7d4f5b1ea385e1dc729d9ce337d5f55d772d4716812bd26b8ef8999226ab34e98edebd5f944759ca48e93d5f1df4ad7e3d179505d749a4e51c77fa9304e305cd7cfc3fd13d579ae3ae679d22b5f3d77923a9f9aa23ea9d89fd6e93f2a8c7de8dce1d8616302593add3ff3a4fb67eadd8b5d8e1d9ef6c407db9f49ee3425efe434e2f1b9271e9fbbba64e5789e4ba683965fa08eff55724f41e720f7729f71eba0de7b5c9d178ae4655bff14eecd70e574d6ac67bae174ece75eef384bc4da7251123d75da7ee149db2f94dc5a2557c7ff20f73ca2e58f4072e0fd533d72bff4c8fd52c9d56584b6f1647a1eac8e87aae35c759c235af2f19872754d3398ad8e5f89d832e02b753c24faee00cd33556e89d2689e27ad87aae3ff92c8d4efcf57c72e293eaf9f591040e76275ec9a62985dd571618030bbb9b6d0f9638f2dcc4c227391cbb77313d2c191d34597bf8bd571893a96b8c74824d60ee479323b48a6cb614a1781d2c0d1a56b2f75be541d97c5ea22967b743aad1575fa5ac93c1d9d47dc3fe5f533d039e8baca0da7eb4beaf915eab8d2a3f32a469d0f77dfebd11dd9462aef25b2af52377eddf25dd9dd74f950e6d1ad38aa77e762f4aed62395fcb05ab168ef61dc5ee9a0d9aef13c77263a8763bb6878f26fe7ddeedab606a3ebf0ee59e81cee97a7a8eb9122de66410e6ad74754bbbebb2affbb5fac9e3d4ac4e73dd3bb70ec80aea9fab0fb5beabda3457c3da69f83b89d8dcee1fe1129c66dad413f47468fb909de5d2762cb9ff9517be8f413756dbdd2a7a388c95bf21cee6747df89d4aa6bc7b8e73db52e1bd43ba8ef20ff76f43b40dbe24675ac12e67a7613e2a0f2a3d33f6c097bb84ed38a046155a967aa3df12e8dcae93648e9aecbb1cd2236cf789f856b5bd4719b3a6e57c7bae8b3e374fa1fab8e8a5544b791751d5d83aec3b18bba7f0e3a87e7b64665f7d7f5c80e8faea6f4d4fd061d77531990c8ce8e739f1dabfb610d2edb9ed72b6e2f7974d82012db6f6f7554edcb485715df73d1b923bf97d22dd24ddd3f4fbdd788aec3b1bbba7f3e3ad7e1c0f50b5c3db53cd1c7137e0f4ff83d54f8ba1c6842ef296e2df7faaa772ff4304ec62011ef5d6e182dfd00dd9ed4fdfe3948763fa5f30151dd5ada863bd13d38d76dc4661153a725d445f7dd7b24894f7ff41c1c8f0f10ff44f77419a4fa8d919e22a66f24cf9db4eb93c8aef7b99c06e936c3c9ee3b7d35b753dcfbbd6f56e7ba9dafdb52bd901de8b6bd6e1ff446f16e56d7faa06baa5f1ce91bbd16d1e5cee9e83d88d3459efb672019a6fb67221d4cf7cf52d7551fb6efc3eafad99eb8347b74ed2362ca23710e0aa70b7a06877d898fb4d4f9ae9f272dfbb9e9d2af570259e799d3b27fb63a3fdf93961778d2b2bf212d555e8e0c40e9364e5dc3e3873a7d07210e3a6e171169a9ef5f8ce49aee5f827430ddbf34362dfbebfec065445a62fd715a5e1e1f57f90c0efbd214d2f24a75bc421d4dede3abd43147c9bd2c05b957abe3d60472077be45e9e82dc6bd5f19a0472af23f44d273c6deb6aac26a2c710f6a173c76e077c994096aa6fbdb63e48d7773788585bbf51c4dafa10116feb37a97b78dced10756d9888b7f5e1c84e86a87b37a367b0adeafbb720b9a6fbb7221d4cf76f1331b63e48dbc2edc26ceb587f6ceb77c4c73532cc13b6b6df446979a787b3e6abc7e7cf40e7903edef19f9345e2baf12e577e8e1eabbd5bc91ba1e45f89cee198ed0937db0d77f02c57ce103d46d45d5d2f57d755db41dce39e4fd0ed8d7bd57327789ebb4f3df7863a7fc0c3ff418fad8c8ada5b4b5cee47f770dc468bd836c943eafa189456a3d1359c56badd998cabaeef1ef1f01ba9e45d85cee1b9c7a2fa4fd473318faae3dee8bddedef67577a4c7e3665b91baa234f3dd46d2717e22499cfd944963456c9934d6b583a1172790f58c7ae6f104cf3ca78ecfabe3b34abeaefbce41e770ff05753ede735fcfad5c13653f6009d243cb8677ae4ea08f8eff37d5f14575fc860a4797ebc7a373aa8e48b71d9beebd4d4aa709b1f623cf9d7418aefbc9da162b92d8c7b7d4f1dbea58a9e44df430d0734e89c6bd928595205e72421c8f35e839adefa8f349eabeaaaf23b99ee7f53c93ea8b46a6789ecff73c9faf9effae3acf8b7d5e7c0fc981f397a3718be879b757d0353dbff5fd289f11afab7b5363c3163f10b1fd3bdd87d37344d7a2f730037d5fb54b22059e3815aaf3ebd1391ca77be4eaf99f973cf7b5dc228fbe3f54c71fa9e36bd1384e3e1dbd83788a57636526b4e997958c19ea9d1bd0b963d3d989dafffa5d3da676909271233a07194b5c7db3d7d1b222077bf8cd44d7e1a8db2f37a17390fd7002fd5e51cfcef2c46d967af7a314de55f34091d99eb8cd76658c54f3e423672690f56375d463423a0db5cd82bcb986749d8bd213cee7281d6e46e7a08396fb5361b6ed433defdf12fbfe283d56f63375fcb947b7792276ccec17eaf84bda26c5af3cbaa3b1b116fd5ef7e8a7e7a3b4de0b54b8b7223df47538168bd83a4a8f3ba8365264a1e7be1a4336cec927ca237acc4a8d9d451629b9b7a9eb7dd5f525eafaede81c8e8bd5f53bd0f3707ea7e7fd12cffb25ea7858ecfbf25ccb85e35275ff2ea41f1c97a9ebaa9dd73276a7e68822cb45ecd89d9e2b5aa1aedf83e4ebeb705ca9eedf8bce1d3b1aa3e63f461f49c4d3c4788e92b14ac4d6a9ab94ccd35d996354db55bca98eb345e2faee371ef9872bf9f7a173b86f1a33d6c7dfc6ca88c9b77a3c198d4fb7d8beb6a977d0bd77d5b55fa3f7e0fc6d149f64e382896cf45d61ec9f8ef5f67f1a9270fb9d30f647c64df629e7f722b6bff29e88edaffc411d75bff18f8a4b9987c39fd47534e7142943d74c7d9164ba99aed52999ab45ac1dae76e33fbebbabff7855afb7d8616d92b0d4739135e8391d169e6b7a5f5d3b12c5f308740d8e4729ddee47e78e6e39177be41ead9e7b00850dc7b5eafa83e81cded363f1ebd4fdbd1e79c7209dd6a93075bff6034f18eb45b4cc85bea76e13bf89ee77417aea6b5a061e33a84347b8fe904a8325b161264d03d3b53fabe3ddfedf8d6c10b16d3f3ddfb6d1633b1b5d561354fb6782eeab6a3bbd3771d85aaef8509d5788d8767585baff17240fee276a1399c2d9e489cfa6d870a5fc64edc9c7d451b5a92255ea9d47d0391c2b519cffaaae55239bd07da0cdea7ddde7d736ba053dbb053d0bc7ad22b60fbdd5e53f798947b67eaf463dff183a87b0fea6ce8f55f775ff5ae7d16d488763d13538d6aa779e40e78e0e9396b93630399b084bdbf893e81c87b95ddd7f0a9d83dcd7639f8fec50cf3d8dce35632ce79958395ebd22f5288eda6e1f4d62af7a5e760a3a87b0d458d6445d4ebd9f9a3ce3b5d7d4f1ef2a8ce33cdc8e53f75f4d43f63b4a468388ed2fa839d729badfaacbfeb79384a1e4093d5ffc8992d7a8e43f8bcee1d824626c3ea2e73eb5edeb31debde8bc83ebe6192367a747ce4e4fbaec52f79ff3bcb70bc50bee3fefa65bae1e837c07dd4f996d5644fa562c11d5a242d48b3ce944022326a9bae0eb37933bdf4b7f15f8053fe365b04d628ff36ab5c9037eb5f4af6f1205629ad1037eb09ccbd6a12f90bf2b9c276aa4d0172271413c1317042857ebfcab46eefb8dcef5c5d2fb1f1cf86b9c3bb962997384b7363acdabb5cebf58296b9c606b9d8652b528777ed74b791b1db5e39f4c162570f5f7be53eac8745722d4395734d07ae7bc566a58267fef949a564bed4b9c6b4d725dc476b145cc778ebb6568f1716f70fe368559ae909975342f48a0aebbcb1e7432153bb101edf3a42dfe5f8ab4458a00fa8e903fe0a7439ef4ac3a372e25fe8fa15bc8c0804889923155228bc45c9b26f2a49f5b691c41ff718c8fa1d9be5dde45a230615ccc6420b987ca1844537874d663d77778e18843b362a35620f2e434c8b024514b0416e4e5c8d9723f51c8caea900f8a7af1474cf8e5729eb20ce2779fab91cff94f808eb2f28b4d00399c5dee946aab50e5b95a2a5f2b55f346a65caadca494c8158bd40ab86ae7c90a19241cb74b4975ce537b6564e3d2371f94e9249328be024e164d2a91da9912498e5794b7491ea196d0254ea6ce2db18826539e6c550d4a60cc5458b2b9d54eb5b974767bfe8995dbcb2ff9f0bd2c73ba7495e9924e6854cab437a54cd74c679fe4f545a274e9d612af68bac08f996177c2b693e94011ec6022d82dd3b60df776482990c7fd330447c449de22c80cf000c20893ab4021cc3220cc07843d0d5a89ac2e1ead402142724753e2746f9bca393de386d9bc811e0459a471f74e58b7fa35ed4e267ad26575232b3ddd672c733a074b9d7b15cef3d5b2010ad75739122b9cb041de3c1942b49f19fb4662b2304734c54bd648b5afa43a06f580836a4611ef6c209e0ff6dacf6006b28cf36686de7466e84265b3fe41b359574af280a092bb5192070695dc9d923c28a8e41ea66c23bdcad76524db44875af45ff39d77b73a91d929fbcfcdcefba6a199c4d96570cad96588cc2ed9c23460e44f232a9b1c604a3bb838d4a4a437e986d049d793123c2ca0e05e94b50d0f6a6dbda922e3c0562832fa50c247188477f529bcaf299ff4e4af5e6225173bef5438cf6c779e71fb4f952defef7042d8257b4f958eb57af346e2fc922d0cbd05690663e26297be0e2301af391b8e6aa9b55a2b302a3bf6a3ac64742b98607f937030b53122bed9ffb5f31327bc3b2d7c00a5f95883e69f94b4f3a5f9402acf8f0b9ae7075192c707953cd894276511734a86eb2ef3d4c26235a6b1d269b61e2bdc31611dee0e391e0c1ae9b1e552e7b8596a01d7418be453128973758e2957cb5272a1b1be6bab58c0744d3b590c4c94c500cc38ad76aebb53210b650ad4c890728dda4008d4f39ac572011b1635cbd4ce220aa1493274bbd850c5d810aaa4996c2869de301563094a9aa154969d1234cb0e3349862c9b6bb0d57cb055f0beed2a1b2b71e14ca2c3196e2a1a641dbeb74d8b06b76f0bf236cbd93e57de0a017b6eed92a6bacd31e09dca70ca9d671a9c30aa959107290c607679b877d044b83fe6ec30556687d9296407ce585119e0409325c12000b852c70d50432554eaf47917880d321b1e272f032537756be4a330d05c21f4c45d9cbd75a2ed6d84491be85b814376d2b6785f5a703625b830a0e091541e9f1e348f8f324986d2061cc983b6b046536acf08aaf618aa449d692851bf8cf82b51c752c20f32087fbe9d3fe1e3a8ac70702a3692c0aac753820f31e53188e302399e9a2ddbeb4d72f4ae42e6fe6c5919464b836c27afd7387f41853d193dbfc379c29d28f7a3678e494f308a59418d6202956e871ad2ed539fe93691123edb207c497b7fc227516937c7947650d643bdb15df6a5dcba2db634cc962e0bd9d24ba5598e0b56c9946b94e99a2d8e776a98139d23f4cbb2653d502bef65cb2d281b6459eb274d2753facf35e9df15e9bf0a69e827c42954b935cf506e457c965bb926e1f0fc7c41347c601982ff864f1e85add8840d9a490b9de60bb45c9be5f365d200aa5bdaca55ad5441e61bf4ca937df1eda22d1b64d05b009f9e46f977b489026147e78e8334bca03fe16d78e91f73c30b1658e4c8256199d09e6a604da50ad5c5864235e2a7509d46e58525545e28492b2f14986c4e0ed1d4b7a9cdd139aa54ca869c17bcc10fcb78da7b7bff720ca93005cb6a2d1d27c9ed9a1ae516c32eb946284c617a6713da4bd8852fb384394f2c957922939a53f9a290aab597196aedc7b3fcd5dad34d262bc7e61adad4648ba5844c98ed7293d9ca31c4a21412bf35f51c215d3f1b65a15aa50a55b7e81e21f7a76a90d566b5731d0a5e7c7f92dc670ada4b8b24ef3a355edd20c7b2ab49235f218d3cd3f1a40cbd88aa00561a2a005fadea1954165a65c8425ffacc423329b50f0faaf64194daa506b54fe8e84fed8329e16506e1cb3af9137e88493814cce0f613a487388b120c0bdbe29a9bd0c5d6fd844a4f4f7193ec2be8fe5f95bcb2c7f95deb5cab9422b2a51baff659f0a3e5a114db3506b6bd7cb29d4d21382220db3926c1609e47a62238c1fcee5c9360687f1d2588f6172ca5f3dffe9a47615f6bc07eb34fecf34dc2219baf0b9acd175092d707955c4c493e26a8e48594e40d41252fa21271a32111c16dc74f222ea68457188497fb14bec4241cf2db2653d9345640473fda4875bb4fd1718d0ab1594a6970fedea9eadcaa98f11118f3a8519d663ff9bc84d2b3d2a4a7bb6a083cb3a04d5121c7d020c495629baf500fa3d05719d09fef13fd524a78b541f8073e852fa3786d36f11a94245daba4434ff4ea54e7aa1f8ecb296db698b481d368baf90967058574ab01e9f55dfd215d4945a2c61409a8115c7c073bc856c801bf0ab5e269a7acc6fd635c456970ac490328d996b5340c56a5d92c389c42bacd80f4759f484ba912b93668895c46a95d672a34bbf953bb9c527b7b50b5579b2443ab6387205a1d304ae3bfd5b1860ae7382a9c86b4c2398222d51894d4915402371912786e777f097c1425bcd920fc049fc28fa684ef34087fc9a7f0b594f05d06e1c37af813be8e12bedb20bccaa7f0f594f03d06e157fb147e0c257caf41f8dd3e856fa08cfcf8a046be9152fb0483dafd0ef0a77605a5f68941d5de64909c271dd132b906c9ebfde46f99066cb09d9a77346c75615a7f942c7c6a48a9d2942e50439f6c52c947555e4559d329066b7acf6726a8a6849f6a10becea7a96ea6849f66107eb64fe15b28e1a71b84f7eae94ff8562a31cf0898983594e03385a12d38595ae70e99c7b2e547096131ef76f50d44d850a15a4e5c57284f673de0a427ae617578b6b2de0665d3b58eb5e73a57fd687d2ca5f55926ad61e6150671a3ed66b72be976434c7e85d962bc6a758ff7a5d736ca06ce36d8c0e33e0dac968af439016da0ce54ce4aa7c71ad67296f2232d9783f7b09bc366692975bebd4e1397c9e7a65c269f27cb647056e0d3952abfb79b921bdad6e70ba26d0d9bf277953bf9fb695bef308503367ba1c1660b7d965bf594f08b0cc28ff429fc384af8c506e1a7fb14de60120ecd1af8a440a0664da329bb4937e0ccee4ce0168020c77fb306be6530c20b419c3cc79c8d2e13d4b6018975a0b24693296d202de1130241571f3553c5ec15018bd99d94e02b4d95963b76af47cedc419ef53eabc95d5406b9ca90413eede52f83eca6845f6d103eb9b73fe17ba8c2ef1aaaf0835d99fd0f2cec35850379f7ba54123bc1bccff194e0eb030a3e81b2a21b029ae78994e01b030a3e89caad3719726b079fb9751f6585371bacb0bc8f3f2b3cd9241cea805b44c03ae0144aed5b0d6a37f954fb544af86d06e157fb147e1a95336fa772e61d69e5ccd32973842d88e34a4bf06edce0fc83511498c5de223ff75e2dfd6177cb3bf5b253024d7d3fb67b06a5c55d262dfab66891effcae13ee2c88eb8792be0e67523adc6dd2a18fd2a1c0f95f29db01f0ce6ee777fa1a9c4569708f4983ce282d60b50a348cfd84763665bef71accb7aaaf3ff33d8732dffb28f3bd3f2df33d972af41e30147aed7d167ae751841e3410caeee78fd0f994f0870cc2e7fa147e0125fc6153dafa147e2195b68f5069fb685a697b11951d1e4b54344d6be5a2e9624a8bc713174d535bb168ba84d2e189444553612b164d97521a3c99ac683a4286e7cfb3fe32ca7c9f32986f7e7f7fe67b3965be4f53e6fb4c5ae67b05850c36b10dd2d0bb92a2f39c81cef33ee95c45d1799ea2f3425a74aea622f10d4324fa0df017896b4cc281e83703a2bf96d2fa4583d6b53eb5be8e42ff2d0afdb7d3427f3d1589ef1822d17da0bf48dc40097fc9207cb24fe13752c2bf6b10becaa7f09b28fcdfa3f0bf9c16fe9b29e3840fe890d55a412b576bb7505a7cdfa445b45a9bd68ad5daad940e3f30e9a0abb5e9ad58addd4669f04393065d44b45a5b28a75676f874cfb9dd141e18f0ab06031e36c89f01df4119f06b9401ff282d03be938ac48f0d91b8dc6724eea284ffc420fc539fc2efa6921bbe0315a45eb887d2fa6706adab06fbd3fa5e9370181e81af4e051a1eb98f52fb7583dae7fb54fb7e0af62f4c790b46eb133be0953b8fd64b17b92db2dc6990fea9ee3aab2a39b5b94ab8bb5fba6b742b9cab5572f5ee5679aecbcd0ab1494d3c4e95138f7a7def1ee16e84962d47c7ddcdcdb385bb65afbbea7b9bbcd2289faa4692cd539b356a8a164f86faf5a37d804aa05f1a12e87a9f09f42025fc5706e12ffa14fe105518bd4115466fa655183d4c45e2d7264243fc45e2114af86f0cc24ff629fc519370c8ac6fa552182518ba7ecc20384fee52d336f3ccf1bb07b5ee3cf3db265ec60932f81c47e279e6e0ba5293698f53b6f45b536ef3694b4f5055c4bb41ab882729c9bf0b2af929aa7ef87d2af69fa0d07cda20384fee9eb4b94dec3fc8be5e892dff0f295bfe7bd2f22726b0fc60bb8f9953e219ca78fe18d4789ea58ce74f018de7392a9bbe6fc8a68386f9cba6cf535ac337e1e29a44b0ac7f9eec6855cba515a64539d9b2b994edd37fea054a8f3f9bf4807d41fcc9ff0625ffc380a9f34d2a75fe62489d8b7da6ce8b94d61f51a9037964ab6a22eaf4a86ed9b3225defb66f5191fcab2192970ff717c96f5391fc9b29929003b56f84db9e8d7535f413adef5021ffdd1432b408ddcf6fe4b5ecda9dd7b2b1cb4a27435409bf8b635ea234f8d8a4c140a306cbe45f4de8f31ee9ad7dfa2ea5cb27265d86a6a84bfcb6ce7e74fa9e492730bc7f180ceff103fd19decb5484ff19b04c788512fc6940c1dfa704ff2ba0e01f509cff6de0fcba4fce3fa484ffc720fcea11fe84bf4a21f92c2092d74c82a1f4f93c15c1093a433f3209867ee87f5b6e78faa15f8874faa13fa6b07f69c05e3fd21ff69f5091f88a8ac4ffd28ac44fa9487c6d88c4c33e23f1334a386c3ce615fed6287fc27f4e1926b45ee28a5358e7562af0562755b28dad0bf21c31415678dbd5ef584ffa6c79e6563f93e5160e0db2d6778bdc46512b377968147829b33ba8048b72eb3d2d031d0e0c26b955ece696e23c5b16e6553edd115fa758b433b180ed79f07e696e2b335ac1469715ef921ad68ae86a58573fd039998469ced37e571ffc823298f6068399ecd3607e4965a90e11224b6545d2c952bfa222d1d11089553e23f186493810ed644a697012370f91ae5583abb07a037a17ee363b89d23427e1dd09d285d61d568dda756c0ed8212d430fa1c6de6b9276d564c8459ba4867a87ffa8ec1daa77eac7bedea4e87536d18382ca8ff45f53d2bb98a4c30d379fe5a5b1d2fc379491753518d90763fc19d95b94f06e06e1c563fd097f9ba2d43d12ac41f10e25b84740c1bfa5701c60c091e313c7bb94f09e06e1f7fb14fe3b4a782f83f04f7d0aff3d25bcb741f8ac71fe84ff814acc3ea6bcd42452dbcb21d8f491db1ddb10332165f764d27b5412f53524d1329f49f4472a89fa99920866d2e3e7f3fc44e64fa6f0a0feee4fd5df03d2aabfdf3785038ba307a6528eeca3057f40011b640206d54f9e2f407fa6e40f36c9ef2a84d1a2fd84f82115e2105388038c26b05c5abaded2267ac79fa5ff85d264a84913900063fa7e6b828f0ca1e4c93dfc6117964c2d304be51bcae6d9836111688cc4c290f9c33883303c023308fde36296f053c304b9bf9ad2074e0f8cc47f0af9b0e5a774ba7ed86bede292268b4e9abf510630c26400b0b325f8f5b8057cadf397fe427d8d4fc3fb3b156eb629dc9e64b8db5525e027ec8f4de63822d3e6b84036dd1bd230c7910ea2b11e44b984318e228c3151e894317e62e2960d173764901bfeb47399dc15b2c6b9b2527688dcee55631a4c4747fc6ed43d46921d1d17f374f5a3a8ffc39453606a706c24e0d4e03f29c9e3824afe94923c3ea8e47f9924bb5f4a0efe7d917f5385d284805da1ff503c2606e5f11925795250c99f5392270795fc5f4af294a092bfa024e70695fc2525392fa8e4af4c92c196f2031addff2895a70655f96b9364681b4c4b45e504df25121142e582a02a474c92015e6140caed2895a70755b93d25b928a8e40e94e4194125675192670695dcd124196ceea08036d78952f9e0a02a77a66cee908036d785123c2ba0e0ae148b4383b2e866920c93f5b323a68d3b0cc22fa38577a784cf6905e13d282673833239c024597e73a815da323d29b5e70755bb9749323cbf2015eb4b3003dddb2458ee95958ae0f768c17da8fcb230607ee94b095e1450703f2af516074dbdfe54ea2d09987a03a8d42b09987a0329c88705843c8812bc34a0e0c154ea2d0b9a7a43a8d45b1e30f58652a9b72260ea0da320af0c08793825785540c10752a97778d0d41b61909c37d2398dc0fe8199f7b76e8def29271e56294d252d26d2c4b2a9b4280b9a16234d92218394a7a2f279b4e051945dae0e6897a329c16b020a1e43e5fd2302e6fdb154ea1d1934f5c6512c8e0ac8623c25f8e880827328c16b030a9e40415e1714f2444ae5f501559e44093e26a0e0c954277143c04ee2144ae38d0135cea534ae08a8711ea5f1a6801ae7531a5706d4782a25b82aa0e069148aea80280a288d3707d4b890ea196e69859ee1740ac7d680388a281c350171cca08ab8638316713329d0db5a01f44194dab541d53e9852bbae15d43e84527b7b50b56751927704957c2805a4be1580cca6d43e2ea8da7328c90d4125cfa5327963c04c3e8f12dc1450f07c4a707340c10b28c13b030a2ea604ef0a28782125787740c18ba86cb2a715b2c96253ef7694739ad16da48ba53fe12691de36d27b9d388c3470902c8c6e00c747cc5b4927d3839aee5f62a2085e0691d519a4a83f685b26b70bda9e06c91322864ff98e81780c8e8b472aa10d6b4906733a9c28d3213dd9545a9498b20ba4c54986c8e543e49096de9c030a12e11c660a0772cebe44e6e80de0783a80a5540027b75200cb4c01c00ccc2991e03330cb29e1a7b682f015149ad35a09cd4aaa8e3f3d681dbf8a927c4650c98753836367061c1c2ba56ab6b302d66c6594e0b3030a2ea706c7ce093838b69a4abd7383a6de1a8ac57901591c41b1383f208b2329c11704147c1405f9c2a0908fa6205f1410f25aaa8d76712bb4d1d6513c2e09ca633dc5e3d2803c8ea1caa2cb0296451ba8e18acb030e576ca4205f1114720505f9ca809037512cae0ac8a2d2d49c1deb9c46e0d354366cb1b55635635b6fd2eb6a133363a3f51ad968cd137eb6d94a475faa815b654a76489d6b5349f66be8464fb549309c5e17895fb7a07ffcac5bd84c9592d7b74229b985127e432b08df4a950e37062d1d6a4c92e1f99b5249cd04ce01c79a04c3fa9d9b53113c9c36936d94e05b020aaea520df1a14729d4932743b6f4b45e504cbdcb6532adf1e54e51d5466bca3953263bd2900e80adf990a937768c1c751b0ef0a08bb81827d7750d88da60a6f9cc8f0f80d5e84a22b0c7fe337f7a45c89dd4b8cbca4a203f94135aa04beaf154ae0662af1ef0f9af83b29b51f6805b57751c21f6c05e1bba996e54311c37abc62795aea184b9928164b5b76da5a2160afb35d3281b7a9a4cf952bf74a9cfb2b9d3bdba549c31573fbc5e492044f63d302c3df21dc25e8fe3e97b1878ae5c3a6589ed912cbd54e4b0a329d9b41ebe4df256a5ff506b9d4ddcda0252d4f2e6cd9dc2e76fb9c06c5a34cb89fa95d209a65bc406e2cbda80478de9f1e94a472016bfeb6c8bbb14c7166f5f25ee3c8f1bbbe732f45fa11ca9e70886e9c0a9c775c5a3b9c427183631b0d32cdddd896ab0d05bdda46dfa5afb7963d1d4fc5f251532c677b628999bbf15c24dc4fb65618ac3e3685f09d447905bfe527662750317bcc14b33929a5df3cb951448dd0eb2083a75cf48e9fb89d48c5ed7153dc8a3c715b2e5367ab8a199ced6eb3989c44c5e409534ccecf7079167d07b64baa75a4ee11b041417417c6461f568ed9d1b180baa459363370a9070dacd62bdbf651d49f34519f9752de5826dc2f85d850aa9d4cc5ef2953fc96315a155c3d4e0603b1729bc33532e81ab157549025493aa97a0a15eba74db13e3461ac694d4b655cdc6dc3dc38eada18ae562a42f1f922fdd43c958ad733a6781de5bb655726efc4b6ed4c12dc6bab5aca8106a73e80ae4e9096603ae97c1ac5e359138fa519a9b3b96bf3d3a9383f47b553fcd980b661d886a6520ac2e9ecd722fcc4ec0c2a66cf9b62763011b3d5327fd6aab689dbd5d6bd96352a1757c5a5064f1fe54c2a462f9862b488b1f4d5a9eaeeb2e2bab2c453483fa6675131fd8629a6b304354a6e2a29626380373503264b642a37c8de50a553e3ee69c5589d4dc5ea9ba9f40962c3c52d84d532151a9c67211f6e4950fbc5ca68bd989d43c5ec4553cc16242d3953eb15d06568a23e6bba25e5b9541cbf957edb6ea16cc354a8f225ded632d9b63b8f8adfb74df19b46e639ed56159bcfdc6fed4129e1b6f8614b52fd647c0ab9a923e7a77cc4e07c2a06df49cd0aa3a1e2342a96a5036ca9465961f4bd44775a278e1750717cc914c799642ae9beeae696f6b4dec6b1dcf9aba4657429d5f8a4d74bbd908acd774db1c9f5a458b16c476f11f03d8546594a543a47c8df9072bb640c2b5bfae3d1ada95ba3ad7811a5f9f74c9a5733d6c56e2b7b951cfcdfa2facf6b644c6b5aeae6d619314a87d3c514a7974d9c563373a2c72112130acee1128ac32b260ef3c97c0ba5e726e7215d53badb3b266e7f9a25b5764a5f4ac5f0fba61896f88ca1fe04b63945da22be9751f1fd8129bea58c96dd28fcb7c65b83c0e514811fb6562bdd2ddbe6a1363a7facaea062f5aa29568b7dda71f49bb736d8f095545c5fa3dab47e5370917c22de1abde56bea72fdc4ef2a2a7e3f32c5ef9000fdc82659f3c20e8e9bd5a80f1dabf2b867fdc4e96a2a4e3ff697665efbc49f494b96cb386bca6ba8f8fd848a9f9f112437ae8b559b297ab75cb624fdb402d2ed475e4bc5efa7a6f88d49d28f84d63a8796d7515afe2cf148bf9f54284b2b15386def7a2ad63f37c59afe082ad507d6b35b0b546f2b3ea7a5d78fba81d2fb7593de078964e32f25d25300e6226ae52749168a3ab94b6dfc0845a214487f2ce2462a3ebfa05acb89f3088c8dad922dc846431b2295994568796d6ec518de44c5f097a98c559847934aa4edd933a2743315c75f51e3d5a98c0aa612cbf44a8cf4637a0b15d3374c315d92526a7ae77ddd7ca8e3dd96e97a2b15db374db13d3269baf2ce9371cfa0dd46d1f835e50f63ae334a85fb6913e815ea31b90a793fd1681baf17c9ed54dc7e438d36a63f3ea76bc985b23d502f4beaf87e8377d1ae9fd8dc41c5e62d536cf23cb1f1861cab35b4c39ae4cb65d2be76c8b48c9fadc78bbffde87e27a5fbdb26ddf303a584eb89d09aa3a57751dabf934a6d8799f9991fc2ef25bad33a29743715c7df9ae258e089e30219037754a729a66d9fca987b6bcd2edc43c5e15d531c0a538c4322da89e2976e4adc4bc5e277a9789852d696cc0f2b3d6b4bbf16be8f8ae5ef29ff0673bd13bf8eacad4636eea762f4076aae20f928592a2dc754c6dafc8fc7a59fb20f501cde337198e883834e53fd6d9cd66a033d4869fc4793c6e392b608a35e43d5f22acc54b64e8be6214ad33f99349d41b28db7f458cdeb65ed199d5be2c82f0f5371793f95728eea5f25f349c874dfea112a961f505e79feca39772c30fe6e7cdb4d7fa68b4ecf7829f3e4783f8c6ff989f3a3549cff6c8af3584fca46c3e4ce4d8f517a7e48f98c50bd31afce8b95cea9b678d29d21789c8ac15f4c315827f866f1f49874a2797c6c81a9e63cfd8e1f2a4f50543e4ac5534d87e8a75489c68cca71ad539a3c49c5ecafa6981dddc6e9ed279dd3cd014f5144fe96ca289ddfb656f0719af4d3fe692aa67f4fa5b4a27a37ae151489c224f1339564f0969f183c43c5e0e3d47d10214cff3e886efca8ebad9542cf52f1fb849a754adca2897e65cfaba3feca219dbfa82ff425ca93e9d5f6cf51b1fe473ab31d6eaa96c91ea7db77ab146dbdaeee792a86ff4c25e79909a7d74e48dec3e9e4fc8b4460d1f74229c59d3bda21df815661de78e7961c61736b86dc96123f37a676885e87f0eb9cd4803c51de52b6c3a2f7c4123e75e0746c27dc9ff1ea1bbb6e8518d9ec61e4be592b2557226bcd9584dcf53730ea97ebb4026be45b7a7b8064b130d572b9a89ec3b14b1ea7f5c472ff48a4938a9196e590ce01d2fb5b4cff05a9aa77836c973701e238294d6b4aaec5bf21b4f6661b8adf9a14e70e93eeae80156af42002bb3b6d90c1b85f76a717b7250dd9fba1116fc853a400dd1e4c2a6e352a024ce2064b737307901b843bb0f79623b35356bb7c4891ff7062830d318a65bbafde01e77aa5ea3a8702d8180a843040a5117ec689b09773a2bbb54ba4b3090870272c60da68a5d8160a600f778e02fb9c13583fe17e273b5f44fd45c30cae57b728b8ff7282eb63000702b73b2f814b49b370272ac3006da38842fb82dbda62b3e722e7778df24cd63e6baed585015c4ef728b82f39c10d90edd1c694ab8530c0bb1c550a5f71c2eb86b2eaca98119830602a1e16c5f43f4e4c5d10a6a83b7a18103d3c208ae86b4e441d25a2a80f4418e074e8118523da31c219e49cac6c69f3eb892ed789ab5416facd0296ea4031bf4a0d058501e05b280346380176461910d484b9bf3000faac7714503b4e405d94852d10d16dbdc2d1c2ba1dd9507b4e449da40d353bd2aa14a030e0f97854144f874c6531bd74300c805eea1b0594c50908f6f48d7a5cee96b16e6e695682af71956c7496ca0c5825b363ad13601820c28f86d89113227c8700c383113070a3ac6ed95ebb2ae46df77e684cac1327ca1eaac8d7f6b647352856cbee751850bd888afece9ca870e71afa8a787a59f717c3d470fdac53145c174e70033ce0f0bae279b2bb0d333ed115d4618077021a07ebca09af3baa51a34b47dd45cd6100f5166abc76e3040543d3cb65f6dbe6d9170dbcf01b64486100b6b15d1458f74c9567ee6061acc34c55c8cab35a34a6df83139c3b340d4d89621974981b1aaf6445a11dc06d6d0be5845ab30c3cba316174a3ca46a70d57e384170670ef21703d39c11d80b269582740c06b43c3eac56d657a66dc5d7215ee7ec02c6465bdb907174b1d680b44ea7bfc8601e0d9b291db29cb23dceb4e99be738b3feab41b4e4fe1f669ebe5d52655ffc6b8e5c08a13eb34efd30eb9d5e4a43dbe9193b49ccb49794a38c7f7745e4e9abe213929b53a73020e58e4f870f8c9f15504e6a4dc96c9f15581e7a4559ee4f8ea62e7f86ac0e6a4e4ba92e3cb5f23c777cfd6a4333d439f13371f9693b03b98639ce1c8310ecae610d39139096673738809829c24a34839694d5de518c6daa33ea266dfce7cf011eddbeeff6ff7cd7c70dfec0710e01342f0e3b61ffa73b71fc06a5c6f5d28d313ef6435d5a9c53d3a0c8bd321f66b5cba9d60d2a64b4c4be2805422984e6ba21372a9186013ce69a1c43903e11c6813ce8250e25c87700eca04ce2d2450acfe06315d14f1e1ecce85f34111c539d8269c85a1c4792dc239c4269c334289f3f708e7509b70168512e78f11ce6136e19c1a4a9c87239cc36dc259104a9cfb10ce036dc2392d9438ab10ce119c38fb2b9c95aa5be95d6f8dd7f2e6f381cce202f95704329bdbe3470f4aa43a4004cf37c867c3d7945f80c08ee4043b42e011a3d4474cc30c7724823b8adbf12551b7138b839a9e0d65272e945f2194a33951f654288b3c40ddb14478287c76782f82372613f066661ede3b5cf01e43f0c672c21b98a40e8fcdc4ac7d73b66cfc3704739c4d30678410e6df11ccf136c12c0c21cc0f11cc1c9b604e0f21ccbf2098136c82392d84303f403027da049371ea820de69f11cc4936c164ec95b3c1fc038239d9269861ece1fc11c19cd2b69d455794bb3f21a35d5ec685b21b9a9fcce5443951a1ac751eaa9547f347d0fd7c3a8915795f2ee41b10f23c4ee45d25f2add2fbc7f546da22e185af57de1d65f8fcb6ccf0b1db58325adf3e2e94c721eb9bca89727c5c86af90c21609fde5aff9ce7fb0ce9d72fcb25924da819215365b459587604fcb84dda656eb8711e581a80828e04479a0a1084875c77a56b4e771a11d89acb4b06dad34eccda94664a5d3b951ce937eeb3b94b72eeccdaabfeb0d7ebdda87d9f50c0f5f9ddf01a12ce25f3a08733d1be40508bc42e84f8d65603c9eadcc3c11219c91098433f63b844f2184333911f615d1495f7df47e8638ac93bb4f208807d9e453cceac8c586b327aaaf0fb60927abe7111bce5908e72136e164f58b63c3598b70cee2de5cc2adb7f3333f873e840bdf6ba8ac3cd41e4798834258770f4396383b1328b127dc32a711be582daedbecbcb43b1335381bca66649573f8a72ff068e506b14da29b2f97ec6d53a21639c76a4744dc5e0b21c8e23d10ccb99918ca68924b801b5b46d7f57a467d340dc44de59c0066437b1d423b2f13d36ca93a6533969f6c2ed9872298f36d82393384300f463017d80493d169860d662182596c134c46772e36981311cc8536c16474346483791082b9c82698615c133403c15c6c134c46a71936986310cc2536c1649ce761833904c12cb10926a3a3211bcc0908e66136c164ec01b1c11c8b602ee584992de2c78ffc396f31d6ef6cce5b45684c69595bfa717a078b194b51b6a1e21c64abcb6d82c958bfb3c19c8a60aec8c4b83b8c76ee14fa4bb5199ae865c33708e15bc9896f30c217ef1307c2a24ba5c33c73fe3202ba2a13ce07f9fb9df3c10908e1e1994058b4df213c04212cb5bb39c438aac9d61cda849a436599728f894eb1e15922f6c935b6498be3918d96dbe3251cc6d594b310cad599aac593ed601b66d7ad9908e81a9b76399a1ecaa18e7b10ce236cc2c9ba44950de76508e79136e19c114a9cbf45388fb209675128717e0fe13cda269cac1b3db3e13c0ce15c6b134ed69d89d9701e8770aeb30927ebbed96c38d7239cebb95b9ea97d49a254aa06dfb2606c792ee5025a80801e93899db80a3cfdf70c0c7bb02de9ab43f03670c21b2a525d2d19bb749ad11de13d2ea847a2c18e8d364265ecb1b3413d0241adb0112aa34b171bd4720475938d50196b7836a86310d44a1ba132ba2bb0411d8aa056d90895712a980dea0004b5da46a88cce0a6c507b23a89b39a11688f851fad8751b0b44f42b546e4462bf6915fbd1bbe8c7c2ca658b560f573326c254ae44803dc775226cb167755c18f797ed8bec796b5b2e7b2d574cca648f8bd997e9c40813ce2508678dbd8bba187deed8e6477f8232fdb1f6ec9dc8ba79005bb63f03c1dc6613cc306e2b7d2682596b13cc306e2bbd13c1acb30966181d214e4730b7db04338cdb4ad720983b6c8219c66da58f4530eb6d8219c65d11572298c7d904338cdb4aaf42301b6c82c9e819ca06f32c04b3d1269861dcc9e62204b3c96e2fe630eec8fd35c2dbcc89b787c2eb6e0a542b7bf1aeec1ace9d6cd8be352810b89d99de9437f5618f30ee6433048d27edca9427f3723940bccd33805cecbcd620430cb327f35064abbb39811e90309337f2a1ebca85ae1d42b7a72d1728847fe380fe08e5de4cacd284cfd8ee3fab344b11bee3edd805de9d8cab9716eb4eb3b15a26dbc71beb518573824ddba0b27626f9b62f47384fb409e7b450e21c8b709e6413ce8250e25c8d70eee3c4395ac4af935b28760bf0046916da5379a5f37a95806e64a904eb7ec1a036332dcede5c90fba1caea649b3ceca787729fbafb10ce536cc2c9fa1557369c57229ca7da8473462871be8b709e6613cea250e2fc01c279ba4d3859e7d6d9702e4538cfb00967412871ee4238cfb409e7b450e23c06e13c2b53639d65b255d9ec489e27e09b596bd40aba2ab982ae3ad4639d1b10d0b3ed71930da3bb4267d4533a2713f3987a5b35774de726d9d5d40f857d37a64a6497e766624d671b7c19860dde6c04ef3c7b3d8c192b20b6c9b63b10daf3edf9a038e3bc25db173097a1f2f2824c64f11999cfe26c76f828b2c30b3301efa0fda87c7c15c1bb88bfa6de6ad8edabcc6152292a95429be5de0b308a19be16643704f3627b3d3b18c7ded932797f54425e62cf767f6174cc9e84acf4523ba6834d1f056744cbb683c831c84a2f6bcb2651b1ccec9b54938831c31f1fe11a7c43282fb769ee92d51996ad6a3a10e1bcc2269cd342897325c279a54d380b4289b319e1bc2a13e345a90dbd4d0be52282f508e6d536c10ce322820a04f31a9b6086711975198279ad4d30c3b88cfa6804f33a9b60867119f54204f37a9b6086711975298279834d30c3d85b5f8060de6813cc30ce4b16239837d904338ccba8e7219837db04338ccba8e72398b7d8d4a1649d9b64eb507645386fb509276bf3880de74108e76d36e164f58463c3b911e1bc3d139f289b2ef6b74f945d23a208efc8c45a8ce49318f16bdae639421be4627fd6d56dd7708dc157213bbd9313f27005b9d679080057abc52ed1252eb1c500f6de6404cbb6c8e55004f6ae4c6c4da1c1ea6f678298e80c7ca2e654185ba69310debbdb72b238631bf8eee342f93e2a67efe1443952a22c81e103090c16feef54af47ad7583fa32dc7cb96def36757f9173ac76c432ee06c2d616e88200df6b8fd77118b3fdbf11cafb3851f64b8252c79475e67d3857adbf0d959ef7dbbd6f12e3e828dbbe495311de07ecf548669cac637312fb132a001ecc440140d5fbd10280b11c652b003e42181fe2ded96b95ead1eb551b25d23221db87af2eef85c03d6c8f473c6325c4e611df1d95928f64222be7b764e72ad9b777f75808fbd63f4f228b7c947b8c1e8015cb80dbf4e37a2bb8604e47301fcb44f6ce4fd0630ff7f0dd2b08e5e39918012ddcef4640b722844f6462700eac71a16cee344b259639af54ca4cbe52ec92639e0d52ad1a27dc30af032e42609fe4043b4c78473d21b3d7cbf2d33b2817ebd0cdd8aa6473e85e8c6af4a7ec59c11146d7af1264a14f6762c55ba1a7b519e626510382f78c3d6b34187d93d8b2f40a94a59fb569478fe99c7d1eb61d3dee4496f99c4d380b4389f37c84f3799b70ce0825cedf209c2fd884b3289438bf89707ec3269cac3bc7b2e15c84707ed3269cac5b9db2e1dc8170be68134e56ef4e369c6b11ce6f656203f302b13f6d605e8cf07ddb26f743d60f30b2e1ec879aeddfb10927eb422c369cb311ce976cc259104a9cdb11ceef72e2ec2c0554cb0f7d3708d79f337cae841d51d9f83d4e5ce3859f2facc34071b31489bfa40ed432e061b4880b763e82fd7226eaf1a9b2d1b3bf6c36f50ec2f74a265c5ff4c8ba3b75e66ea55fdab255e9fee451bc08959adfcfc4841acc062d9640611e688b84db10ea799f939175fec01e4fcc306e41310859e30f3951c297a156c9eaa54a685f61caf980f123626cd9ba33b2c957ed75160ce38e725721b4afd9f3add58250eeecf13a82f9239b6086717af70d04f3c736c10ce3ce1edf45307f6213cc30eeecf17304f3a736c10ce3ce1edf41307f6613cc30eeecf11282f9739b60867121d58b08e6eb36c10ce3ce1edf46307f6113cc30762cdf44307f6913cc30ee6df86b04f357762ff463ec13b12df42b4083206f700f82241a4f72552f925e9c8cd5511617c81d08e49bfc6bd06341baa39930d0b15d1c26a734ea133a2884f1fbeaed5141f06b7b5cb3c3d8ddcc43287f6393e3cc74ce2a8acd321f4738dfb20967612871de8870be6d13cea250e2fc05c2f98e4d385997efb3e13c0ae1fcad4d38599bf76c38cf4638dfb50927eb4ef06c38b7209cbfe3c409277a5784f04dabf544987e6f93d54de71c2466b3babb10ce3fd884b33094382f4038dfb309e78c50e27c0be1fca34d388b4289f35b08e79f6cc23935943817239cefdb849375be920d673dc2f9814d38593fecc086731dc2f9e74c6e33011c9a85699309ef0202c6b14c362fceff21ac1f72621de7c1ba49c47bc6a5ee43c7889aada95f83c6e5ff92099fe399627fdbc4e75964ad1f65d223be51da1f14018b14bcfdcd237e26b2cebfdae3ce1d46b7af3e08e5dfecf542669c24662b437f840a80bf67622b9fa91e5bcd40e9c9066f0e82f7b1dd0e0c8c3e756c0e0cb928db7f9289063fdeefd094c5c35dd77f1f59eb3f38718ef1d4f5b5022fd0327fbc64b17a39635f2c98c8857904b2da7fdae3cc104607b1e5c8623fcde4674a20e357791676ed7f5dd57f22bcffb269e300d6e13e369c5928e3ffdb269cace3536c3827209cffb10927ebe8291bcea310cecf6c1a3d9dceb9468e6df4f46154767e6e13cec250e2bc1ee1fcaf4d38678412e77b08e71736e12c0a25ce9f229c5fda849375ff2f369c6508e75736e1645daecd86f31484f37f36e164dd4e8d0d6735c2f97566f6586a833151b63efbdb081f2cec601f508680370b77972557f676f548f8e04510bc0827bcd4966ce94a267c936f07a0de4e3b5b40867116f35fc822dbdb02927132830de4c1c8223bd802927120830d64210299650b48c6597536909b11c88eb680645c73c906722d02d9c916908c4d6f36904d0864675b40327a75b081dc824076b10524e30c241bc85d0864575b40326e9cc206722702d98d13a43f6fb830eedb154128bbb72d4a5794fb0131c64639db577e9723943db8072ba21b9183a28d92c316b93f2cbc163eef3798aad4f00ee084a73f001af5ca34fb1095cb413340bb590aabe3ed739fc705763b02db9313ec68e175d4727ddfa22ed920d0fdea6fa252348c7bcc4d4159bf172764eff217bc177c892836d6f3e1dd2ba91a61ed9d89ca2935efb7306edc371e15037d38516aaf775ccfa75ec232a2652b610f4756da97136d5789b651d6f1f5e20859db573ad5181bb2515cc8fa226becd796adcef07f89fa30647dfd3359f5d4384aac11d1afb261e11973bcdec765a17508eb804ccc3c4edf8fa66def46d97b2027bc8149b2b7b7de0ee32eb1d391250eb20966181701cc453007db04338cdfc99888600eb1096618bf93310dc11c6a13cc306e5c3a1ec11c6613cc302e98ce413087db04338ce3eda311cc036d8219c6ef648c433047d804338c6398c311cc6c9b608671b86d1482399213a6ffd5908c5510db7ab31e08e7289b704e0b25ce4310ced136e164fd90181bcead08e7184e9cdac91ffc3676a2a1b78c6c25c1866fbe88e21bcb89af9f80bd882bd47e71206abb1c3f6f90b33eb1df570d1fc62c84711c27c61122bac1893bf3b8c151b7d151a752f200c7847902f63a80d99e0a35ba5e25c2fc39e57204773c27dc1ece097c837a97800d4e1639521b9d73f753f38ce0d85cb5fa207039dce0563bb2eaf71370bd11b8099998b04d6f9b32c66e239bafd14d08ed44ee0a2751f347c794758a6c38d7cce3b1a8d933891363b601a3bf0dcb18c730d9362ccb477827db5b00304ea9b11500bf4405c0144eb42325da25d23e4b05cc8757ab06529514a5bde1b6c904003bae74fe76c52f728ed58ed8aa103697ba22c0b999286129c7ad05d26299f7241ec555c27e8c30e66562480e37e975ff28da630a77137e2082999f090f630c337911105eb00b11d8a99c60f5ced905627fdb39fb0a84709a3d8eae61744a5882501670a21ce50365991366adec88ae74fed2634c8dbcd5d218ae6ae91384b89013f16011eb72582f07e8b626b4d9304ebdad414dfde999188f4f7d3bbd307e01f876649f4536e12c0c25cef310ce1936e19c114a9cbf423867da84b32894389f43380fb20927ab17081bce7908e7c136e12c0825ce6d08e72136e19c164a9c47239cb332d1d5cc97bfdd23cc719609b73f1fdede7a054278a83d7b2784d1657b206ab6cfce9435badd4d10b45b596206063edee342f834b2c6396de98954ae9894499caea71c1bce13b97ae625c822e76662dc1d2cb2ba652b0a7d3becc371df4056392fb3536ffbfb076d0623b4f3ed9dd50ce3172c2f47681764a23a9ab6df8dc38f43088b33e1c9099b3567dc9393cd65211be15b9889f9cad4a631a6857222e3360473914d30c3d854bf1fc15c6c13cc30aeaebc05c15c6213cc30aeaebc15c12cb109661857575e8a601e6613cc30aeaebc19c15c6a13cc304ef15e8c602eb309661857575e82602eb7096618f797791ec15c6113cc30ee2ff30282b9d26e9f78c68ccfd6c1ec88c6375765627c736a8bbd56c96139d7712bec2b2e9f41567ab84db392d3394b50b659c94710ce529b70168612e70d0867994d388b4289f3670867b94d3859d70eb1e13c12e15c6d13ce8250e23c15e15c63134ed6c63c1bcecd08e7119c38f5b6a5d33cadd030cffed42278476662e900cc9e170bd87ea2de69a257ab56a6bb60a05a0aac9002f0c6148da1f63e1a8d101f65d3ce33ac53be6c38dba3fed0d136e1641da463c3998d70aeb50927abf32b1bce5508e73a9beaf6e99c33456c75fb03a8ec5c6f13cec250e2bc1ae13cc6269c334289f37708e7069b70168512e70f11ce8d36e164dd40920de70a84b3c2269cac3b1eb2e1dc8d706eb20927ab0f081bce8d08672527ce09c2bba01a3a9f550e0ff028d6f18cba7153d373f39cbf1ae48c12ab17f2bd5c7ef28da8655ac5095c7f89959af38c2d59d940b2ed52370a596eb52d20192d920de4000472b32d2019bd96f83efb8d406eb10524a32f1d1bc82908e4565b4032d6ee6c20cf45206b6c01c9e877cc06f22404f2584e90f99e665233b956885eb2b5c079a2ced167873c83a866a8d1740d57a3a912359ab665c2512cd5d151c6893ab6b1518160d6da0493d1eb8e0d663b04b3ce2698611cb5ff072a65b7db0493b17fc406f3530473874d30195ba46c30ff8360d6db0493b19fc406f33304f3389b6032b64cd9607e8e6036d804338c9fd3f92f82d968134cc655c46c30bf40309b6c82c9b88a980de697086633274c7a0be945ceef1ae17e50a7dc110082c3bf85f41108ec4e4eb0ee47ece1033b95d2b70e2f8c69b36df8d996cb74425877d9b3d75718d7bc77415dccddf6ee5bc358dfb3ed5bf310b2d23d76af9963ec35b115029391e5eee5c4db17555a3b65a504fecbeed7df32b4626e1f17c44dc8468fcf84c303aef9a9ea8abdbe67b3c91108e70999284de3b37c2ae569187701eb85b2fb8999a8f3a9d9a6d83a3f8c1b604c46567a52269afbe9d4f98ce3f56c367a2102bbcf56b061fcb0d93908ecc9b6820de32723e722b0a7d80a96b175ca06761a027baaad6019679ed8c0e622b0a7d90a368c0dac6108ece9b682651c5d65037b1a027b86ad6019e700d8c0ee4160cfb4156c1847aed620b067d90a9671b4950dec6a04f66c4eb07a1fe6e9a20df66166c3b717e13bc79e318030ee8eb70ca13cd7a625e1acbbe7b04df40d46a353e7d9849375bb17369c7310cef36dc2c9ba19111bce0689b3539647f8a238e10b646421ba9522ba314bae582cc0d5dbddbaa5d2395f266beb26b1d1c9ae6b9d7ffed260bdf3cf743d2277df5928768b7a7915e45549d975ce5dd0ac51e4c3173c2e0093e8ac4c224796d6f31ce64dce33f0296a087d8f2813eec6332b9ddfdabba05922c991db2046bfff0d21c017c1b78a0619e3d88d6972229d2527f77330102f0098a374d59f882951f5448d13e70aa94983f34c07198e6b4239911ee84c4f2095c8564ea3d40aeeaf76e25e2fc359e41c1b25e93a19a67b1fe64c7619ef43024722bd559a427c964b16150e830a792c6f09356f92f358a4c8f9e5b6b7725b5a5ab9cac1bf4e9de9ebc965428a26967621245bc49c936b5bcd1693c5c8cd3ef0fe66e910512da596248d69f2f8d176dd3d41aae4c170fc7e1dff8b20dd55b24b331d18e9a64cdd150e1f006a70fe06a53e296927b2fe1f273e66684e3f0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/33f4fef732b9ee049a250a214c3249ac.asset.meta b/Assets/SerializedUdonPrograms/33f4fef732b9ee049a250a214c3249ac.asset.meta new file mode 100644 index 0000000..e8c753e --- /dev/null +++ b/Assets/SerializedUdonPrograms/33f4fef732b9ee049a250a214c3249ac.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2e7076316d58ddf489ce4dfe6210070d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/35313354a85954a4083bc4777e80dd0c.asset b/Assets/SerializedUdonPrograms/35313354a85954a4083bc4777e80dd0c.asset new file mode 100644 index 0000000..a6e7549 --- /dev/null +++ b/Assets/SerializedUdonPrograms/35313354a85954a4083bc4777e80dd0c.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 35313354a85954a4083bc4777e80dd0c + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec5d077c14c5f79fbdd07bef48e8919610ba025242539a10b08042200944428849688a8a8a0a8abd2b76ec0d7bc3deb0f7de7befbdff7766676edf6ee6dddddcdc5c76f9fff023cbeeed7ee7cd77debc9979f36626924dec3f563ffbafb96416194f069039a490ac2065f6bfc6dbd7e5f67fce9d783e9354d8d725f6df05f66ffd48669c2fe99fde563bfbef29f65d25a9b2bf5c4916dbd712f6fb6c5264ff7b8afd6d917d479f16dbff17d96f59b5ec8fe6903c32834c276dadd67120e6b28f2af9338be6cbaa67ff3d8eacb57f2d6242d144b2d94f6dedbf66dbbf54b2df96db428bf7e6910358b696dbbf2db6bfa920a536e6228658aff064c2fe419c4b1f7eedcbafbbdaffd7e7ffcee0ffaec7ff0ddfafcdaffd127cbf3ff8ae3ef83765e8e218df0f70ae915ef6b58efd787f704fbffd9abf97ede04596c6c01ac8afb9fc3a8863ce4b40febafc3a384e7e63610c01588970568f5f87f1eb502eeffc24d31fe170646d017894cbde409e6120edfae077fa6cb846de453966f9ca31cb29c7c839bcfc3ee6efefc6af23f975778e6dbfd3b2943f1bc5af3971e41aed7cc7e4173a6ba79951ceeff7e0d731fc3a96cbd687cb7a00b8d7954594e9388eb92b4fe340c973f13efd7d01bf1fcfaf79bef29ac0df5bc8ef2726284f22fa2764eacbd32800f7368fb516c6c012e5decf57eebc0c6a9de2f058eb4e5f7e80fe49712771bc4549e4a3bf2f1ffd1d596a6779df8b2b83c09fcc710670dcc5e09ee29ea198b75afcbb5bf9fd1412dfb6f549e0b7a90e4e3dc1f534279d3aad9ce775445d13babc571c3945d966fbca369be396725c91ffe9cebd25781e0c70e8f7853edc1c1f6e0ec7153662628272cee0d759fc3a875ff349b41e57f232247bf3eb6c9ee640e2b501a20d99e97edb665f45de6295d15c5f59e7f07473e3608aeff7e1d7fa09be2fded95743e6fdf8b541826936e0d7fd35d26ce8e842bdef7dba302d0ee63c87df7a5540061ba7fe3a7e2fda565ede84dbe5c8109f1e88b63c961ec493650197858032b06569d08cdf2fe4d702af2c64914fa6a2d4c914117da262704faf83f9f325e09eca3ad349a7c1231c93db3e22eab29019ca98629949b1f35de346403712f92e967e2d71f2d730c7c16e98cf9f8b7a2964dbcf95bb5e1ef856c891487d38887331ccc7f1302e83e07699efbda5e09e5e87bae9b17fdbdf3612ba35003ca7df96807bfa7b4982b22e27d57596e28c00698fe06973fbdfe814fe6e19a95ef764dfd22be86bb27f53bcb7f9772b48f5764cbc47f37610b8a7bf972698b772897c76ba8dc7c4f8f660e2b53ffbb8fa50f779feac82cbb31bf1d62dd1c71de27e6389fe64a573df54c8c2af11d1f714ffb6e56b22dad395fcba96c8dbd9d580075effc81a37ed4e42de5531d212f5fa105fbe97b8380ddb71d9851d3b9478eb8cff5dfa4cd8dff5fc7a34bf1ee5bebb52c87704bf1ec9651b493cb6991c0e9ed3eb28fefb32704fdf3bccc56e2d7474834f5659791ee3cbbbcc06c4d2b3639d77ab449ac739dc36ddc2797bc427431589adbfbbf07c8d265efd1fcd717f76709b8de1ef6fe4d713f87b7b80721663a1e3dd3c8d116dec26805b1ffc3b111963f17192934eb49f7e32bf0a7ef201361f1745c6b8f245fb6e2782dfe83defc391cdc4d3e6c494e5547e6d1c273f7dc07bf47a9a46fe63fd56875fcfe4791b4bbc6397b14e1937ff3806d6590e4fed7af0fbb39d6f5afccceff9d8bbb9e0ed5c90279ac63897eb66a27e9cc77f1b0ff2bd993fcb03cf78df3f32c17d1611e3abf37de553eafb7d0bc090fd7e019041f6fb85fc396fb35acee4cf2ff2e565b34fd63ce2b117c23f05f31ac9f3a55da6509697f06f27faca72a2532e2db7c5c0ba545e96ad1ee0f797f9ca72abaf2c2749caf272fedb64506ebbf3675324e5bb27e06112ffed0aa42cc5ef57025cd9ef57011964bf5fed2dcbd69df8f36b90b284f2c3b2bcb67a5ed93b30ed150994e5f5fc7a1dbfcafaaf3710d78e53dcf204706fe4d7c362e00ef0e11e9c00ee4dfcba2d06eecd88bcc9a427745df85cf6225e5da7f7b6deb6d91203eb1622d5f5b682f35b8957d76f235e5d9f4aaaebfaedfc373836e07621329d54d7f519404fa6f2dfee00ef405d15bfdf097065bfdf056490fd7e37f1e87a3bd12ede43e4ba0ee587babebd7a5ed93b30ed8a04caf25e1fcf825f91bf25e0de2e9f76423ed13f3a1bf02a4be73e077ff503fcfe7e8eb737c7af04f7f43acb97ee2c9eeedb0e4e7b314e68c49ff3fe4f7be14f7b80a7f737bf7fd079af7d27df7b0f39f76b9ee6f78ff8f87fd4a72bc09f14cdcbc3e03798b739c4db27798c3f9f0bca6a0e7806cb4af40be3f1fa38bfeef0f1379be355817bfade93aefc6b45dffd097e3dd5fdadb9f84d946f2320c753725d61b2823253ee23893c3f1d27cf2a36691fe2b549fb387ad0312706d6f3fc9dfc18efbcc8af2ff1eb0b1c7f5fe21d8708bbfb32bfdfcff7bbf0ab6d73b96ffd39904360d36f56c69047e4ff157e7d95e3efcfbf5d05eeedbc75dad749abd3427e1572bee6c379dd95ebd0f5be6ffa25208f89df56f3bccc235e1b31cfc95be74ce2d5dd5571f4e90d7e7d935fd770bcf9c4eb0f147ec3587eac7869c5c857e440e2f51d08bfda5bfcfe00febbc8ff42dffb0bf9fbdc364616f8de5fe47b5fccabbcc3ef0bbcef9377010ebd7fcfcd5b448cc3df07cf781d231fb8fc74e17dd3c8626fdae443e21d0f8a315f217f6f0df80e72207e5fcbef8b7c792ae6f787807b7a5de2c31536f96ddfef0277a94fde8ff8f5537efdc4cde3a1af836f009fe4632f664c9d7e8f6394f06f0e05f7b64e77793f0686f856f80496718c75e0dec6c8e43e9bcc18f53652eae3ef20f09c5e97f3df0f03f7147b7d0cf9b8ec91325fdecaf8b7db13f896f7d723e5bebc95730cdefe77ad1703eb337e15f65594a1d0598a57212957d126f3f177e4602ec3e1e0de96a1ebc5fcbd2f885cb757f8be3fc2fb7d37d1e7fd925fbff2c95649bc3eb06ff8f55b5c27c9773ed9abdc77a2f27ded934ff82385dc2b79baeb811ce239bdae22de368db73584fb9422ab7dbf0bfb229b638f55475af3eb0f24691b4b7e045889f87edaf0eb4f1a69fe0cb01249b32dbffea291e6af002b9134858ff6378d347f075889a4f927bffee5e840b71da07ce9f50f7ee57df808b5dd548f8e04f7a24cb91e7517f343fff0ebbfb1b1236b39e651e01ec38c9117fa4f768df0abe57e3f98fbe62dfe8dc5e3aa58e4187f6708f77558bcff6af1ba69d50538dc7f6289f6f6102efbd1e05e94bd909deb9e25e6635b10666b7a71992287728c0dcefbbd267b6564bfd707ff16e5ccf17bf036cf6ae8dcf7e3be078b8fcb7a099b26fa62ffc5d60d8bfb5aad2631f2df945f9be15c47fb6371d28ba99f9cab2c3e168cac239eb6d16ace391e097e17b682de1fc6df3f06dcdb78bd79bfde6ac1af2df1bc4a396ac5f18e046547efd77bf581c52252f9b681df855da1f747f1f78f05f7f47a347f7e1c48473ca7d70dc45b67c458d9af17b59d2684c9d20691b16d92321e299751aa9bede4e5172daf9fdd6fbaf3f4adf6fccafd053d847fea37febca3fb4d7f51773bf077c45cad28ff8ddef2ef3bdff7bef0fb1f4ebcfd82c37def77f67e173982bfbfc9d18f08ffcee27345a80da1f554fcd6258e0ec27733f9b51bbf7675dfedc7c74156777eed81ebb4d593c4aebf30cd5e24be3de8ad80c7e74bad5d63e0f551c0e331b5d600e7f920dee7b1781fdbe231b156362fb36388373642cc334ac694564e1c39e8b38171f20365cd05750cb61b5ce765ed46cc366f10d0038a732cc73d1edcd3df25ed5c4c5c61c37b11d7768bb83a18c7cadb140bfaa6546d3cd7afc826e2f5256ce2d78dc43bdf4aefedfcf42f74f2d37f03908b5ec7f9be2b00f7f47a9c2b6b84cf09f7dfc6b1445b3dc48b1901f3b4234bc133faee5080056d0dc7ce115cf23a173995bf7702b887729fe093fb040767001f1344eb7587389ccbcaaba7f7b7c8693cadcd92dfe9f313c17bf47a227f7e12b8b765cb16f691e35a3c26c4e27126168fc1889c4ebc75ef749e9e641c12b59d71f21995ed648e7d32b8f7ebb0d0b5937cba7612cfc79d8e0ca2cc2c3ebf658d94e7c71ae5cbd7fad4e5cb1aedd537a167f1f42447f4f77af2df4f51d41b611f84ee8bf99753c13dd48525e09ea6ffb723f740912e8f75b0c678398ce22be884bf8eb37bfaed818a3ac3f3608d057a01e788c4efe3883b47049f8ff7e91cd441a14ff5c1bf6d5e7217f2b484ad3e1dbc2370f3c03b32792600796c5e72453f56d8e1c9def765b1b7d6245f39cc06f2245a37c5d8e514491ec682df401e52557631db2da1e35392c788b6697b6a6088be6bb6465e2c8095c8589ef7492d8db868ab2ec04a24cd8efcbba91a69d6025809a469d1b962d8cfe3fdba689b26e2580e03f7761a43c47ca328df3871ab169fefb5f85cae35cb7ddfe2f352d66c12ad1bebf8fca5b5b793ded01e8ae9f179486b2ebff218f3c899c43b07c2c72ab1e640e2a51593dffd1cccc185409fe8ef628c7416f18ea9cf72f23b4cd8061e6f6a89f55e32fb21fa0bb1fad507c8cbd98a13436f1d887cc7fd4291b37df2f3788761dc276df1b9166b610cd90a9cfbdec39deb88c9beb4f8b76cbd154ceb1c27ade1625cb1280e0ee72772ae0fe75c0767c418fe1e9fa3b144dca85f3704766df00db7f356b18f2f6cdc741ef1b60fe7e17a682d49a07c856f20c6b849c83c9cc78c5925c9e9444c7d5f26c78cda93f37ddc9fef70bf9b18c70a9dc6b887f5f2a038babb3c01decae2f046bfe1be84c816e2eda36de1b2ffee7dcfe23148d60ae26db3c5ef62be84cb17b569f1f2c3e76d2c3e5f618958880b88d7a65da0cf5dcc325e45a47d696b65f298a29f1ced0b8938c8d3c1bdcdf548d10e88b191988b3983cb34d38b17b988ff7e26b817df25d2260bdfd0d038efc7e26b0dc04a24cdce4e5e47893ac17df896f0f35dece2b07fd36f64b1cfb16412f38d9710af4e5fc2d3ae72b046895837a137c07f2ed5513e876809dfddd1bef2b8d495333af6bf94bf7ba48b1dd529104bbffe01fe6c3de0556089184161672e03728a679703fc0d3e192ef7a61bb98278c7835738bc8cc9f4e5877f17b99278c77557fa78be8aff7e16b8b7f146f3f8afd11f3bd73db82d89d683ab413efc695ecd31cfe6df707fec1e7cfdcf1e7cced4e2b6d612feabe37c785b2565b235856522ec5b1cdd6165467f1b07eec19846e43bfafbe5e077ca211fef59dc6764719f97757c7af31bcd87b051624e2ad935f0c2ff780df1d6d56b9cf21e9be9a43f4ec8c67d6196f02b5dc7bf3b873fe7e36a4bf8a3aef7f17c3df88e5eaf255e5fdcb53cddbfbdef59dc4711b991bf7f2eb8a7d76dfcf9793ef9b6f9e43cdffbdc02e37ff18dc803e306d601f17c1cb887e362187feaef6761df6e8993b6f0398a39ba4db1f53ceab310bc5e00ee6d5ef3f8dcaec5712d11e37f137fff42fe9cfb49acd3c1eff47a33f1f42de3ea81681be3e9c10d3e3db881cb5b2b7c7a101171e3b2f154baf440d8a51e205f67255866e7e895d9843bc35766d13e888821b6cb6c79559c6f132db32e0e2fb3c478ed5c5f3e6f43ca41ac29badd570eb783efe8f50e5f39dce1a437698cf7bd6839dce92b07515e7721e570974fcef3bdcf536a437ddf476e51f85e32368cdc0d64532cc768daa726f7bd5f0f982cb01c6e255effd7ad4eb94d16eb1dc53cd43dc43b0f750fff7d980fe718702fe417793fdf57a6f7213ac7f312b9dfa773f783efe8f5019fce3de0c83ee556ef7bd1bc3ee8d3b907f9f52144e71ef2c979bef77960744ef6fd764d9d7d58436745da49ea6cca75fe619f1edcebd3d57b1dbdd94bac11123aff884fe7459d18160347e45fb48b99fcd963ee33f66f9adeef0ef7531b817ccbdea5d747c1b3479defa7723fe0d4a9205dec5db1df8be86bbfc465bfc89767f1fc628e2d7c69bc0f67f1be59e4f1eaba1fd941e4f599a71179c2abb3ec5e7c47af4f126f7d7ed2917dda06ef7bd1727c8a78ebf353fcfa3491d7e7a77d729eef7d9ed2fe175fe7634dc731d35dc787703db1c4de0ccf909da78e3fe3e8ca0ce18be463f2787d54eb627ebd845fb9af263a1639c0a743cf223acec7c491e77c7af01cf88e5e9ff7e9385fbb3473a9f7bda88e8bb544e7827b7a7d11d1f1177d729eef7d9e521d17eb5767e298e9d6f164c7ba41d3e784c758c2e7e3ebbf47dba8dbddefabf5d9459fad00dcdbbab864b30f5b7cf7b257c688582327fafe4bc03d1d6bbcee94c9acf79deb9242ef77d1780a9177313ef5732bf296ac0eddaef9fdcb7adf331e55ead5cb5e9ce858c96773a273ac77fbbebf1b7c67817eca46706f974ffedbdef7a23647f4f5cf05f75602633321a7c2d8ecff5bd9fa638494ed84482f593bf5b2e6f7b76b7e7f9bdef73b5bfea3755dc488bdc27f3f0ddc5b7c6c5b1ffcdbaebf0bc778d340c7d3623e25de78fa51e2b5137cecb05f2def7b61184f477dd037b998d16737032e05ff79e0fdffb545f8f75d35e5bf59edfb6a6de1c3888e5fc17f7fc4f7fd23e03b8b8fa7a18ef3b1f8bccfbdef45755c8c15cf05f75602634c21a7c218f3ffbb6ea9ea8627be35d6fb982d16e9fdaf2daa19feba6a7effff9c7fcf98118caf2c119b71b5f73bb47f700dff3dc9fe41410fef7b61e81f887605ee63f8ffda1e8398ff688c3fe83bfdaf6e2ae6dfe7cfb1ae029c42dbe9f72f62fd1bb1475e92fd9bc21ddef76aa27fa31dc3f0bf3a9a7c0cc7ffeaa377dc7dbbf77b4f7c03f5598a78e289fc1acf0f1b2b1655c4a088d895575dacc8ab403e95f8d61b9c77978bb501371256cf97f2f324962ec4312c11b7d82346da9b381edfff78a958efc0ed97c5eba6c5e72ca363ebd7388f45e09efe2e8bd58e953fb1fe46c418cae22e637d7f97f3aeff5c8d12beff7989881d15f110dcc7698939d47789c73e47de8d910f11b7735b6c1db1843ff64d50fe6f3a721d24d651721ead3bc0ef548ec3c13dbdbe0130dee018e5be6fdfe2df1e0aeec5fbf4f941e09e5e5f0798af73cc477c986ff36f2f00f7e27d88c9bf2f1571ef7c6edce27d4aeb019e5fd99ac3fbbc654fc4de8867fb7e1775ff74f9efa28dabe6b310df5f02f2067f7fd0fb5e54172ef1e9822cb6ee0e90a668b344ff95db1ceb11f7bb72110f2ddae5783a04f1a92cef70d956817bcabbe83f3c9ac2b41fe35731b7bddd2b4b5447045feb7d7c69d49d98f1c3621dc18dc963586703ac04d630584f7a7530f21ecf7301b8b7cba14ce8b4e81f3dc3afcf7a71229f12afddfc3401ce76c4292f115ff13ec75e02eea96c6b1cdc3251c79fe3d71831c4aa69c3d8cfc8875c8e43c03de4e003e2edff7de27bff138ed99ddf7fece3fc63275f2b445d7c9e546f23c57bf5c1bfe9f523f0ec238eb30dc805d3fd8878fbd8e27dde4646d703c4e1c8832b6cc50b3e0c592ca898cbbfc5cb9f25e26116aac91153cf5f967068e7b57c879713eb2557ce72de2658aff87e8b979618cb7ce6d3d7cf9c340fce72f00f166ba0842e3e1c07dfbff6ea738e7f3ab8a7f817134f9d8ef699f9daab0ac1ffabc4b3b6223a4ffe05f18edd8682e7f4faa54f6fbe74d28de2bee6c5adb687c3d7c45b3fc43e80df0039a13c62bf41b13fc7a5bee79d80debdeefbf62bb73ca36b48bef2ca6589b1a86837793fc27a33b97cc45c5b13af8c65cff8baebc8b73e7dfad6e1bd92dbbf4a5eee16ef1f91d9b1d3b2def1e17fc7f12f03f7f477b0ae469c9362f1b6d0fac08be1d9dbf2488ef3bdfb7d747f486eafacf7dddf8e16639eb7c177f4fe3d901fd0b628db800f9d74fc7bbe570999c41809ec9523e5ed2307c7bfc7f7ca4c451cbe964cec016e7deadc8b3dc02dd14e883d26f83ea2911fbc3c5862cee74737bdc80fe0197dd7bfbf771cd9a4cf8ee2983ff9f4f02727ffb4eb46e55f25fa31420f8f8cc383e8cfff0cde136981bd28a376ef57f759e417f08c5e7fe3b26d05f7b66cab37f8707fe7ef5d08d2a6d73ff8f3cbc1bdb03df4fe4ffefb7c1fdedf40a63f799aa2adf9c297c65f1c83afc15e2dd6c3bd057eaf0fe414cf0486f816a4cfaef4f915bc0c467ad38c5706d27211fbc1deaffe6de41f2e4f31b8a7d77f7dbaf3afc3d59a918edc6bc47a72a1a70fc64e5be05adca647fee3f8abc13dfdfd6b8007c61989e6875e607ed83d48d7126d41ac3d9745ff86b75b1911fecd95e09e5e2d37cfd6b7fc5986fb8cfd4eafb588a79d163a9a511bbc5b1bbc4baf7588a7afc9eeeddf0e1de9c316dfd5251e7f5306df2bc5e26d43463dfe3bf70b8b3a9a511fc8500f3ca3d706fc9babc1bd2dc321631c1d38b415925643fedd69e01ea6d988ff7e0db8a7b83bbcef6734e6ef5d0bee05c710e73a2f8e5fae8c26208f4d78193c115b5f05afa20fc1ee81bf6eed066f9ee2e1c56cef44fb29f69ee5ed5c4653e2f109b17bfa7ba2be2dde2e597c4fe38c66be7211673880f189f25858f49734f63fb67e75f23248ecb931855f7f56c7b4f85c524673e2b15fecded68d757cffafc3c4fa64b15f27b7db16ef2b6474f4721fd55dd087cd10fb0bfd0e9e89beff1fee334bd8be3fdd72db20f6b810638abd63e755e4cbfa97a7d3c257967cafd88c964016be3f46462b1f17ad1c2e0eafe7c872848861e63638c2ed5bc472e53d265f2e077d9561972272b6f6c9c9f7e8ce007b5d67f0bd5f33dafbe46ccfe5dce6953322da945a5e79035f66097061f1f38933c0bedc519d06fb660bce22b5c177a01ca2bfd70118b2df45bbb1dcf75cb4051d7c32770065531ffc3b013e62da113156abaf8e11e17b57b3bd06e83dd8efd3e2fdae8c5ddc72dcb4193ca3ef8bf6a633cfab38d74bb4d35d001ef73164640239c57b5d01275d0126bd7623def6bc9ba3db472ff4ca1efdae3bf1b6e7dcef91d18378eb480f07e7a80780ac804f760fc6be4c6e988f9efcf763c03dc5ebe17075f47044be5e5ef9a2bf67fa7e1763755117c17e9fd5307b7bbf1158d1bc64124f1b1c956d304813c3ee25c78ec78348238a03ca5d3c8bcad7d52bdf91f9de32617b5ca8b667ef738c2ce2995b61f7543ee1cbe06312ebbdd86908bc08ef4b45787f2863578e7f03b8a7d73ec4d377cd10f555e87c5fe21967b17b5bae0ddb7d38fd7c38e28c11c15d7fe2994f8d7e27f6f912feee1b1d6e373cefcd4fbc7c4bed06ef4f45c47e567c0c69713b9f318078e615d83dfd5d8c2d639c9bc6da4efa4d367fb712dcd36b0ef1d6e31c87b763f8fce7b1223eb839bfb6f0e18a339cfd6d1d3847396328c84f7df0bbc86b026d5d742c4f62f31b117d0d91bf815cbe2a704fdf6beda671bcd8775df4d7737d9ce43a9c1ccbdbffe384bf56b451ed403ec538bcbd4f8ec13e39447f5de22b8bb4f5f226fc6219c389d78f23e35aa4b71b7826ec531cfe33c47ebd3afc772009e53bd2c94de378b1e705ef13650c0232f1bdbb33c459ed4bc0bd5d261b0bbdefc5958fb783915d2465d6c527fb309fec625e76272b33294f8d7cf28ab3524f07f736ff9b842f54f8bb1aba726cfade8b1511e3f1731465c9246e9da532097fc848e2f587081f56375706ba15127bd695b8755c958b4ebe7447fbd2e5e74e678c02ba24fa49e03ceb0cde5fcf18e3e341b46163c1bb63c1bbf42ad64f15807b9bffcd8ff8b0c577e389b7df369ee741f846f288dc0f3301c890079ed1eb44e2f5c34c7464386187c3f5e62d485a9388b7ef3ec997e664e2f5c34ce6799be97d3f630af1fa61a6008e21ce753e1c9f5c1960cf62f66f617b62f96138afd17ec258e2e9639de0ab2ff1f0a47ac6e71932c0dec44c97e933b07770065fcf9e21ce4df5eb11587bcffe2ddea5d7193e3d9ae1707472960f5b7c27ce553d15dc53b9f8be0919e25c54bf1e817d8033f606cfe8558c01af06f7b60c273573b8a4a16bd2b4f27d7a94ef4b539c637a0db8af05f0443f189c6b9a3117704eafe21cce6de09ea621fae7fbf2df0f03f7b5aacb9cb11f48839f9dc96c502c1d9beed3b1e95e1d3bd197df7878de67b52db687f46452440a4839c966ce0adabb9d4b6691f1640099430ac90a5266ff6bbc7d5d6effe7dc89e7e2cb7e2433ce37cc4fcd5a1dfb4f6f966c15596b7f5ae49ca333dbbea9b41f15d9ef538c29f637556410c965d8cbeddf16db3815a494949045a43d3b3743a43e9efd5d60bf51c2406fcaa896c45dd592a0c295daff15d99f55d91f52212bede793ec2765f6ff15f6b3c5f6fd54fb4abf5a48069279f67f5e94b976b2a564a57d976fff5dcef016da62577f335e960eb09ffabf9965639631e996db4f04a1e5f67d29937036fb7b1593b488493fc57e56653fa3b959622bcd0ab286a5563def15f6bf6569e673cae4321ea0f4dc625bd38b62cab37343a5cf66baf8bf12a98912a1d4d7b929c3a986b5b29997f2f86a25f13f0e1d23431d985338c6404699e579964bb2998f73563506d5f3583d8772fd76f81e4a06c7cc8b9c195adc1d590edc12befdce48e6eebd7a5e5bdb9bb541249bb9673bc5c95a2c62295e163b3d4d250bb56bd7caa182fae9b764f4b369b4d969a4df79af84bda75e007558e3e72d00b65d7cbe6dd56682c6730e13be9489e6cfcc045bf022f684fe9a673fafe03693125b6ebf5d05dea956ae395488baac68aa37bcf1b287154e445638cc4f9f5f2375635e1cbb282f9e7ad15cb8c593cd7a53ed6228319616eb66d5e27d2d51cd0edf34cc2aee7259fdd79e58d8fac2ee739a6cbf6d4659fea95f7e5c5b5e4e0d583925933a565219b2926a90ee6a14bfdd88554e0da3f972cb89fe9173d808d1f57832600cd69231d830ddba4e7f5bc1500aec77d539a44ef6be7e532427b009a284f145c028ac2da1308752d8542215a95ddf2715150841ae232b9c4635d34827a7dc74c4dbd647416d54b99bc76c635555bbae8c3d361db3d0287b62ec38db6ecef6b27f2bb0df2f621d51fa7ca68d5860a74df1c6b214dcf1a6f78bd8ccd2798afe7e66a5acb664acf60023615dc930c6eb4918cfa1fada4aa206ccc6f92b4373bc32d4c7aa596bdd6ad600436ea38bdc10436eab8bdc08436ea78bdc58566dd8ece5fcb4541bd7e522fe35cefe76a99d99556c1cbdd2fe5ee6a2895d5dda275c5d3ab0ea9249648e233589b06ad2445676f461479990fea2eb80175d530cb8932670334cdb3aeb6a5b734ce45d34456e8189dc4557e49698c8999a22b7c280bb6a02b7965569a62ce91d6d3a43318aa3de93a0f3045d12ee267727d89030b60c58956d232b1a6a8369b3aadbb2b595154fb374174f1eb3648b922c1e3a85d155c2035e44bd90228a27075644ed64454495bc37a639fe22ea8e17517bacfcb35250fe1d30f05d5300de11a3a54f0a68e924d35c66d29719d5dc39f633677a6402fbb584f9d45dcc15ec9ea6263c0ab1bea0fa3bcdbe16da125259626b7adf689e815f85b53634ccc1ac643cb8cbf9531771b3f46715cbbc305845ec2cd338daf2d2b02ead9677170c395b17b90b869ca38b9c89210fd445ee2a43a6835e1ace55cd314bc76633ecd29c653f2a61a3b8c2eaa9d5c553eb8619a941293052dd31f0c12900ef2103a7bcd2102b9d6e554f99f563bdc37946ad9f77183f88b59905f6db05e05f625ed13f841f14c7ba0d955937d631ed42fc0e04d594872562bd8633eba59f18669d7a61da3042531b7a633abc5b0a74380bb322bbeb5a915d31b147a640ec3e3270ea6e19157dd905ffcffe530dbc110ede17937cb444f2fa13234a92f7c308df4397f0fe18f2185de401327bc4c67e47a6c51ec50bb09964678ba636c3eec51f449c59beea5d11116131cbbe163329e8f3c5a42881c09cd8b66dacccb6b191dd04606e6a3e17343c2ac28ce178660c69b9621d339934ea1d39b929ce63a9078b1bccac6763966682c4d2bc2e3363312c4d0e566527ea56d98132645a652749743587ea2a8df96cc09aa16ae9e4e1e9e4ca4c03f33b1c52a3a6c199d9a178c52ce6cdc19b6e5fabc86aa6aacbc0f47fbefd4e859d4691a7c54fce18d0d8dacefe4e3271fec8abc39eac3a8c4ea03a98cc15560106c93489f6e769e067b5d1007596cc22336de405ac1a1ecc1e53969cd22d61af969043583fcb095f53192d0c964943671668f86ddc5e564b1c7808063c4d1378a80c98d6f1e9ba757c980c995a1b1a9aacdbc31a8e893d5357ec119845dd5b6251ffb6d42cea6e18f82c09f8f6881af8ee5855989d888ec4d0ea911870beac8ed1e1e178164d9069ffbfc2fe823a330b58edcf648da16b0d32edba4e439f6883dd0fbcbfc27ec3091755917314a6147374956234566e7325e5f6b362b9ed8181ef23019f9ca1063e062bbb7d6565379038ad22ed962ce56d9bd71a66b29167268bd55ec9fd29b4e42a59b9669243ed5ec361f6b5ca7e3b93b503a5ec37fa6f5ad2d4d6aa94e9584cfefd64f23700f2cf0412aaa4380eb35bfb4bec96a568b7c6cbc069c7671e413a3e74f659bde39387d176808c36eaba9c60775f68cf75257b7f365380a2685fb930450de404895cd96c0aa38cd464878c8e1668647ba52736339fa5ed4652ea74bce8620f7fc74bfc9177bc1610daf1ca25f13b5ea9901eeb604dc48cea428951b5548cea241932ad0b05585d5894545d982cd33936b3555ea33a87d7a8590c9bd63cfd0eff623b8f19fed13f9b7a1b9c8066a54ac6be16350af4fdc59cb94a6a4cebb3425dcb841ecf264029f9ac4ac8eb4421ab13e9941cab1753b056bb48d26adf5a5badd5de53a6b26c4ab3a24655368f21a4436d8b656acbe65d872650f8a994b30b9b43aa6446b5901b55c77477b1a81d742a5991fd9c1a5ef87b5f8b8ed0687f6922e37b39639ee6af808d7b31255fc2943cddf9c4147d2fac01582a6900947ad553b12a5422a9427f2b56a16998d807e98a3d1d137b9944ec7575d4c49e8181974ac0a7d655039f2903a78699eecea43342dc1b03a6bdba6add4d3a3329c6098b7d23c5456cac20c67f85ecc95afbef52fbd9620691c916b389885d15296761dcae9070db4c91dbd91805e59adce6cb80a97a1e9c08708c99bb3932e0d6cca221fd2fbac98c7aff6b2e467b9584f68b1569df07abe62b75abf9be18f22a5de4fd30e4d5bac8fb63c86b7491e7c9906921ae9514220d5a5729c4f918f82112f07c45f003b08a79a8cc36f5b46fc7824eaa337c72fd1a0576cfa48a599e4c5b119c36b7d0e31f29669126cea059a59e1f88c9b94e26a7b3769eae4ba07d8a02e643a329ceb05b2195541760d41f26a17eb322f50b31f0c325e09f2b8217607c1d21e3ab5d9c722d64e1eceed381f653151e1761d2ac9749436fdd725349673146e991124ab73450a3b410cbc451b24cb420a219dfcda66c3a73f815f075ffab5833ae4e631126c1d13209a8659b1aed18cc4cb25b508c51ba4142e9cb8a942ec12cf231ba16792926f6b132a3d9504dec124cece374c53e48864c7b1d1b09d2ebd84492e9752cc3d2391e4be784a4d229c598daaccbd472ac804f9414f098466a055c86819f24015fa708be02033f5902fe88227839067e8a04bc536335f08331f05325e0858ae01518f86912f07314c12b31f0d325e057298257614a7e86ae92afc4c43e532276ab266a62afc2c43e4b57ecd512e46c16019eceb52bfee827b5b52b74abdac4d606d28dc8646b56e2a58fb994d6c8ca85b6d0e7ca445268cad762da749e449b3e56ac048760e0e74bc0e72baaeaa118f81609f84645f07518f80512f0664dd5c00fc30af342cdc23c1c03be8848fa82fd9876ae60758c76e78bd8963665ec5f656c5bb12236715dc074df753889896bba475226d75eb1174ba9ad5003eca72a521f81497db14c6a6a32a813d7ed373b43496718228b2bcc24bd79afbbb7925ceb311db844a203b72a2ad89158a62fd5d481a3647696ad8729316a67b138d27ce6bca77b9a15334d599ee2555697256c93b7329b4ca3aacdc98ad9efa365c54dfbd69713a46f7d85fd7f032ab252df7a03a6b3574a7476b0a2dd3a0603bf4a02beaf22f8b118f8d512f00d8ae0c7c9c069b7866e90a9d5add988897dad44ec7ecdd4c4de84897d9daed8c7cb90e9fbd727627e62b8c84fc014fd064cd1e9fef1ea83c8cd98fddca6693f4fc480e9b9d7d2f0a979519798e3bd3940b1fd3b0953a19b252a7486a20a9d8c81df22017f5a11fc14acb06fc50afbb6a40afb544c5b6fd7d4d6d330e03b34814fc7b4e84e4df53c0303be4b13f84c19302d7b7a3eba3f888f02a804f19d8569e13d122dfcb9b99a169e2d03a756929e78a16525cfc1c4be572276ab166a629f8b81df27011fae087e1e5633efc76ae60349d5ccf331757c9048ac255d1ebac0fe8f4ea2d0e9e92564260f5d29b17b92f4977236daa07d7815dddd8249f1904c8a96512972ecbf9713677ac30930495e860b30191e96c9d082cb30c8fe7f31eb4fd36fd6d87f272fc18598048fc824a807ca822e43a13d5e95d42ec2d4f75189fad66aa9a6be1763eafb18a6be8f27a5be9760466f87c4e865281abd4b31869e9030f48022439761e04f4ac0df5704df8a813f252bdb566ae0976365fb3456b6cf2455b65760d5e1d958a62937c5a6e94a4c8ae7629ba68129344d5761323c1fcb340d4ea169ba1a93e08578a6691f969e5ac8fc3598fabe2851dfe715d5f75a4c7d5fc2d4f7e5a4d4f73a8c327afe824e47ef7a8c9d5725eccc6fadc6ce0d183baf61ecbc9e143b376299784392895b1533b10da3fe4d4dea6fc2a47e4b2275a3366a52df8c51ff3646fd3b49517f0b9689772599b84e3113b762e0ef49c09f5604bf0d037f5f02febd22f8ed18fd1f60f47f9814fd7760caf91189d1ac0d4a71b3762726c5c73229dc662d3785cdda5d980c9fc86410cdda9014366b7763127c2a93a03e719bb5096cce648562dccd3d98027f2651e0ed6dd514783ba6c09f630afc45520a7c2f96892f259918dc4e2d13f761e05f49c0cf5004bf5f064e8b8b1ef9a9d32e3c8049fd8d44ea5aedd5a47e50064edd23df124df7c84398d8df49c4eea728f6c318d9dfcbea168de5881d59976fbf5ace62df9630bb53c1024f9d0554856cce72267136757716df16d84f0bd9b2dca5ec5ed8cd02b288cf280e64338a62e1ee5ae2ecef9bc966f49db37b32d96c52215fcebd8c3da9646f150164f99c65099f7b85b39caa01b28f6005f483a480462a16d0a318f88f12f0858ae08fc9c0a931fa0933463f27658c1ec732f18b8ca10e6a99d88181ff2a01cf54047f42064e2beb6f8918a318aeeb2725c0d96cdbc39a9940aebe2d506a27907f97f1259d40a6a78dc69e40d697159b407e0ad3a53f65b54d51979e9681d326e22fdd26e2190cf96f5de467b1f6e19f44f43f86d17c4ea6ff99f461718de8bfce865db135ffdf8435ff3fa6f97d6268bedeb662f292781e531eba898496f2bc80298f65e929cf8b5835a5c784fbabe99d1dd5aae94b98d41996a44b445bcbb16ca055c4d64cc856db64b2ee52a66260d4cb981cb56472d00d3fd4f05fc1f06b6b96ceab18701d99e0547fe846b8f9ac4fb88c4c644a4cfb654b957b62afc952a67a5157a217333ba9e9c5eb58b6ea69f2f50626757d89d4859dd5a47e1393ba01561822ccc2e91a7bc31155b2f51696724359cad471e01c54971d3dd7263bbaf9cb0cbb6e1512d505346f6312349249d0562ac154f6af2ab652de194024b73eea1d4c96c632593a26284bf5834f54647a1753bc2612c5dbb08b9ae2bd8765b8a96675791f036ea609fc0106dc5c13f8438ce716129eb72af2fc1106de5202beb48b1af8c71825ad3429f944064cad4feb4480638cab3e9501d346ba8d850c69db5ac90c693fc3686f27a17d4c5735da3fc732d11ecb4487a432f10596898e924cac57ccc49718782709f875ddd4c0bfc214b3b3cc9cd2c5f8b308dc0ea59075d78521cf22bbb206af8cffed8db6cf64774ef3d38f6df3407f1126b79245e36732c3ec2e7776fc5374e16e39f1c6c68b74a85fca69628ba3e63c9319f342c5c8c6af312e7691714177ec847baa391d56b78175971eaf6612961277c5ac231f95391e42aefdb6ea0a856f3085e9225198bf15b5f15bac4a656255aa6b5255ea3b2c13dd2499c854d4faefb192ee2e2b69ba2051ee6d9dc7fdb47485071da8385bf1c42ad3ac98bfeecaa2711d0fadabd7de1ab0826986f0c67a7fab627a5525a9458b98842b802fd7c15ec107ba2afaf5838c3d7af44e0f4bffe89d1f31f09e2900ff49064ef5a497a5bf65edcf1878ef1480ff2203a767696559043fa0ca9f402f3c815fb104764d5102bf6105db270505fb3b06de3705e07f60e0fd5200fe2766e7fa4becdccf3dd4ecdc5f18f80009f83645f0bf315ab225b43cf3f4d3a35468f907933c4722f9e49e6a92ff8b810f9480375204ff4f064edd80b9ba6e406221620f9288bd51516c4b06ce8e2a4a81f58a60e04324e09622780646cb5059ff5891965a3270aae4c35250f76b63e0c353005e07a365848496e71569a98b15e86e29d0967a18f8ee2900af8fd13252424bad5e6ab434c0c047c93c908ae00d31f0d112f02a45f0463270762e90aed56a8c893d46a6878a6237c15465ac44555423e29b62928f9335cd8a9237c3241f9f02256f8e499e27f365f55693bc05063e4102be5d11bc2546cbc414b414ad30c92749245f97a526796b0c7cb204bc9e22781b0c7c8a049c9e7da602de1603df53d6802a4ade0e03df4b023e5851f2f618f854999e2b8277c054715a0a6a6847ace99f9e82a6bf1346cb0c092d531569e92c01cfee6adf5a74bfd174ed8c33873887110db2531787bcaaed8e3353e2afca66a781b6af968f4452dbdbc6ab47e12869dfdba476ea63d77dfbffedf6ff8dfa126c33e859161dc4279726168ab00ba600b3250ad0aa8f9a0274c1c0f325e06314c13331f03912f05245f0ae58a59b9b824ad70d03df470abe7e0f15f0ee182dfb4a68394591961e98a1db4f62e8228a86ae2726f9fe12c96f5594bc17063e4f02febe22786f0c7cbe6ca4d0570d3c0b033f40029ea308be2b56a0074a0ab4966281f6c1245f20913c5f51f2be18f84209f89d8ae0fd64e0d4cf5d20f3fa53df270d0b5bc6423756b3b92637665b7de7d3fe58ea8b64a9d3d5172292c7995fa3dfa8a43700a372b16cb8a8486536a6618529e81be560921749247f5b51f2811878b1ac27dd4f0d3c17035f22011fa9083e08035f2a013f43117cb00c9c6e5e5662251047700e0e3c0493fa2089d42ff757937a28a686cb52a086c330c94b6523976c35c98763d660b9cc1ad88368607b0ad9dcdd6236bf5718dd4b8e5e57b14f4ad88c9f7b1c9b3bebec047957d8fd4c154b320293b54c26ab73c2ee8aa8f5524969372ca515b2949ab2f7ca581e4b6c0ea88da47de3bdd9cfaa9134bb63c55d2e29ee46396ac53d12cbd8c1b28c75f51477ec82f4c71716101136a092f951987c1558d3e84c7c8b983abdf8b9d118f59512eaf314a9df0303af92804f1ea8063e06e36da58cb73e9e729dca4aae8a388baf2a58d9d112a4eb312a5934ba888116a5ee2d69b7b2ab703d1693781556c5dc03e764954d25ed7158daab312d734e0f5e90929310c663a9af91a54e07e474f92bdd74279e14f4bd0aa21ad79b87c9b356264f2b204f51b444a6f380a7e417054fc0a4384426454320050d3677754325cd8958953c5452259fcf55ab9293b00cad9365282b4e9594573d5ad83406682d3f1a75198bc029e76db10a1593312a0e9350b159918a2958f7e8f014748ff6948153fd38c2d29c31da0b137b7d0ac49e8ab9698e4c810f681ac6c951ba9c4c9721d3f78f4ea47f1e23ce7706a6801b240a387f889a02cec4c08f91807fad08be3746f6b1ba64cfc2c83e4e93ecd918f0464de07c19308dcadc14fdc1179579bc954c54e61cac404f9014e8d2a16a053a17b3dc9be35b6ee740f2debc0b2cd6c23b2310115149632cdd284d2776129e81acd699d90793f644ac2395cf3aecfe9397931927ed8b59c893526021f7c3caf86449196f572ce3fd31f05324e0cd86a981cfc38ae454599138eb94848a880d0c4a41e34eef17b15eaed3d75329a2f958464f93790f14337a00067eba6cc0a4087e20067e86047c9d22f8020cfc4c59d74f117c21562dce92540bd5898c024cf2b32592bfaf28f9220cfc1c0978d67035f0c518f8b912f00d8ae085589d3b0f1b55c5ab738bf92431358eeaf5ae08cbecf992cc7eaf98d9620c7c8b04fc3a45f02518f80512f05623d4c09762e0174ac0872b829760e01749c0f755043f08ebe65dacdbcd5b86897d89ac3415c52ec5c02f9580db5d1825f0e518f86512f0a98ae06518f8560978b922f80aaca37a39d651bd22a98e6a396696aec47a6762df39d16b4cdea5723096f655b2b49b10d7a5e2f462692c4c6952fdc20aace8ae9614ddc8ddd58aae12cbd635b26cd1a273bbe7ab49816f15bcb713ac66e3ab3049ae9549426fc746fb712ae9acc4fa13d7a5a09bbd0a2babeb2565758a6259ad968153616e4864a0d91f075e835172630a28598b51b24dd60b1aa546c92198e5b909b33c372765790ec5daab5b74dbab7598f7e0564defc16198c8b7e98a7c3856a2b74b4ab4d368b5123d0203bf43d6c42a82afc714fdce1428fa9158f5bc4bb37a1e85497d770aa43e1ae3fb1ed9d84db17a6ec0c0b74bc0f3150bf3180cfc5e09f8b63dd4c08fc5c0ef93809fa1087e1c067ebf04bc50117c2306fe8004fce2316ae09b30f00765a34e45f0e331f08764daa2087e0206feb06c38334e0d7c33d6777944d677a1a79a9748665d6928f04a1e13409776273b1b7c22662f1e95d80b4bd15e9c2401cfa6b327698d14875bbd251729fe98a48390dd834823c51349ed711baf4e5de2fc19e0fca98b4487efb0e4d1e189a48345879f8c15fa132968244ec1c09f4c810fee54ac663e25a9990bf3d46ae66958cd7c5a5633dd580ee1c72a620a5bc52785dd397a7712793553e752300e72ea2e1d6296b0381ab5da7b3a26f133d840d33fc13d8d501fdb52b6bba14aca67609de967b1cef4734975a6cfc4b4e9f914d8a7b3306d7a41e6709ba8a64d67637dea1775fbd4e7609cbc94024ecec5387959c2c98e496a9c9c8749fe4a0a6cc3f998e4af4a245fb7a79ae45b30c95f9348aebacef4024cf2d765566dba9ae4176235f50daca6be99544dbd0863e8ad14307431c6d0db1286f2f65663e812cc8abe23b3a26d89373613ee4eea4c33fb7d5b2a76f5524c967731cfd6ac68dba192ce655869bd9782d2da8a81bf2f01afa5087e3906fe8104bcae22f81518f88712f0da8ae057624afc9144897b14ab29f15598e27c2c531cda0997c5bac9362c4d5dacdbd518019f480858bf488d806bb0a2fb340545772d06fe590ac0afc368f95c424bbda56ab45c8f99ff2f30f3ff6552e6ff062c135f49323158311337627da9af75fb52db30b1bf91392914c5be0903ff5602feb922f8cd5885ff4e56e16979c66eb5dc31083c2e44a57adf8249f43d361a99c28f35a227e6d11f6844f1145b26d556f3568ce81f24446795a8117d1ba67c3fea2adfed3264fafe4f969e3fff0eac247e4e0438d6395a1817bfe87271175684bf4a8a305fb108efc6c07f93806f5304bf0723fb7799dab722fe937f9cd373caf8820fc78977085175056cc7a4f84326053de16c2c8b92f4f702e6b2bf4bd8a2235519eec568fe5342f3f6656a34df2703a7fd98bf640d19f5cefd4ddd6c148afee13e367f82d4bd8624783f969b7f24b9218ab979006b96ffc59ae5ff926a961fc4d4820eafaba905656d3c5bc725cec05812ed160e887ab18a99db75396f27723dc74ad12783945b8e8730aaad4875aa7f56a4fa61cc6645229a36eb11cc7e6744f4ecf7a3181fb5247c9497aaf1f118065e5b02feb522f8e398bed591e9db688f315ccc7e28258b083d466c191b8288ed9c973333b59ccd7fd0d1b5e3615d630f431c17b8d39381c79c2d222ba3c317ef76d5aed6aae8e80e4c8deaeaaad113981ad5d354a327b1514bfd88be9fff2919389dae6a10a19b8757079726b0004fe0694c4f1b4af434b34c4d4f9fc1f4b4914c4fbb11d7d7ef9f7773d66c8acda1e9bf0702ed13714feadb453c8b49d8582621e5a584f79cdd532d2a95527c0e23bc8984f02d8a843f8f81379580efbb420dfc050cbc994c55cad5c05fc49aeae611a4a96e1149a6a97e09abad2d53505b5fc6186a252b5b45865ec1246f2d91fc3ffb8f8ae4af6292b79148beed6035c95fc3c0db4ac0eb55a881bf8e81b793809fa308fe0606de5e02dea8520dfc4d0cbc8304fc7945c9dfc20c5b479961932a7aaca38a30f44e32f4ba51c39e9d84897e07a3a9b384a6b715cbe05d0c7c1709f8f02a35f0f73096ba24d2e58875a610069ca909fc01464757091d9d14e9f81003ef2601bf5811fc230cbcbb04fc7345f08f31f01e12f09c956ae09f6085d9535697aa48bc338ddd0164f2e7183b87792df09c8c1cec538d3fc58aa897a488c62816d1675811f5961591b3a998ff606995cc7c8e7586b2b0ced0ae497586bec0f2d547962fda4a642be5e34b0cbf2fd6bb96299e4a8a5f6129f693a5d8465a52d398425672cf8cfb8b9a427e8d49d25f260945a08176aa06fb1b492ad93ded5b6b6f92bee0bf7cfb8efa08d483fe0644e8b9915e32981a4bc3f4b223344caf75b59cc54a1f0bcffb56563ef43627420f14f38ab4e7b423eb6ee9f44ca45ad1d4c68be63b4c0106ca14a03121d10d6e8aed877485949329d560d3ef314b982bb1848f1caa66097fc032354896295a527473c7a5bc71107361306acf3d6a4c25933f62720c96c9d1142557f8be54d2fe09f3510dd1f551fd8c0df186a66070fa8b0c9c9db111d1df92e5574ce9864b94ee94756a4af71b063e4202beee3035f0df314dda4db32ffd870c989ae6dd1301a6a60e01fe53069c69df8e4c04f83f5ce2bf302a46c92a15d5783796a52cc9d0f8bfb13447e3cda4fa8acd7f30caf6d0a4ec5f4cfc3132f1e95e6bde43ecfcdb94a8f576fec32ac65849c5e877b85ac520110938355ee3341de6960c98e672bc668d8b60c079b2c2a0a6527437dd3d80758a2343963e3bb243364c3c42ad386a61999b28cb9c1b89e28698b9034278a8a738ded019c6a964b73626d124ac2f201660cbd6da24bf10bc0e26c7e4587d81812959845e174b7b0a663205074e604032cbcfeb6169ee294b13ee68284f3bb97d15ebcba4a0fabb570afa2a0db09a345552937e5faf56931a62924f4b81e48d64e0f4fde98918b7186b4e1b4b80b3e94190691de939710b15498cf46644e8e1a2defc0f40c6793391715eacd4b1715e13196f74a7676b411a7973de733c0ab3d9ae3b25f693196c2593b3ff6c65129cee1d6b1258caec2cc66cf76a394f563e8cf5a6988d9a2db3517495d73c3292219732f451f6606382cde820420f66194c46db77b3ecff66d8ff8f24d9e0cdd136434e4b378fbb3e0f20c9eccddc0c93385f267127a9c439f67fc3d9df39b65c4ee7a2bab42a5235c70ce11c9943fe583543d802cbf25cac4b21f7dfc2d3c2ab773654b2db12cbee3e92ecae57cc6e2bac43bbaf6687b6b50cb88b7dbb5f22c07fe0c06d303af697cd271fa746475bacf4e7c94a3f9390a839744eb3f6bb6fe41d4db8b5b68a26b4c3a49b8f858e38d58d9ee854c8529dc34c572933d37ec3ee387d677383e76c8146bf5191b03d563807c866b5150ba703067ea0049c6c5403ef885584059a15a1135611166a5684ce181d05123a666e52a363174cd516c9546da8a2aa4de0f17315fc49191b7594322574fadf95e0df7a03d02e184d8b25346d57d49a4c0cbc50023eff7835f0ae984a1669aa6437ac3f5eacd91fef2e03a6b74b24f307af5eb5e7cfede67df1a1cafc410f2c81a592042a379df6c9bb6d16cf5349a027a6f72532bd171ba8c92728d462e07ac952a683e383743de8bd31e465bac8591872a92ef2aed87874790ac6a37db0422ed374b6f5c5f858a1cb473f0cb95c17b93f867cb02ef2000cb94217391b43aed445cec190ab749107624ab75253e972319157e98a3c48864c2765572722724b1c783026f21a5d9187602cafd564792826f221ba220fc3900fd5451e8e21afd3451e81211fa68bbc1ba673876beadcee98c847e88a3c12d3b9f59a3a370a033e52137834c6c551ba5cec81f5598fd6ecb38ec13a041b52d021188bf1718c2e1fe3303e8ed5e463bc0c38d3be3d2e11e018b3b77998d26dd454ba0918f0264de08958e91daf5b7a93b0d23b41b3f42663a5b759b3f4a660249fa849f29e18f0499ac07b61a577b26ee94dc54aef14cdd29b8695dea99aa5371d23f9344d926760c0a76b02cfc44aef0cddd2db5b829c4d4fdeb10e2226e7a8e6f005f16bc984e85a648a2973f3d3d91fec7d311f358ded70e778ae62cf5c9d9948598cc7199b8595c559ba65315b86bc8b7d7b7622226fc581f331bd3c47532fe760c0e76a02cfc5eafe799a757f1facf4ced72dbd7d312eb66872b11f067c8126f0fe181717ea72310f43be4817793e46c6c59a641c80015fa2097c2036d4ba5473a8b50093f8324d891762126fd594b80093f8724d891761125fa129f1620cf84a4de0428c8aab34a928c224be5a53e2626c68784d0a86864b303aaed5a4632946c7759a74946026ee7a5d13771046f40d29207a1926f68dba629762626f4b81d8cb31b16fd215bb0c43be5917790546c82d2920a41c13fb565db10fc6906fd345aec02af9ed9a95bc1203be4313b80a03be53137825067c9726f02a0cf86e4de0d518f03d9ac06b64c034547a7b447f71d05a0cfcde14801f2203a70b2deeb37fe82a019726d00b4fe0504cfafb5320fd3acc3c3d9002f3741866441ed435228763c80fe9221f214366a7824424814f3242629d3684e9ca2329d29523315d793405ba721426fd632992fe684cfac75320fd060c7c470ac08fc1ece2139a76f1584cea275320f571582d7a4ab7166dc4909fd645de84213fa38b7c3c660a9f4d81293c0113fb395db137639ef7e7353def276222bfa02bf24918f28bbac827cb903bdbb72f2542c63938f02918cb2f6bb27c2aa675afa440eb4e938067ef6adf5af38949bffe5c1b6d3c7b238fec658b38c0bed2757605e05ff9f617749b9632e6a577be10efc7f6ddbf6ae72ac3c74c365dc26165b2677a693767c86e7421418e6c7a2d4257b2a422456c0dcbe958a3f2ba66a3720656ffded0ad7f676222bfa929f25998c86fe98a7c3686fcb62ef23918f23bbac8e762c8efea229f8715e07b9a05783e26f2fbba226fc1903fd045be0023e3434d322ec444fe4857e48bb006f063cd06f062ac01fc44b301bc04e3e2535d2e2e9521d3d6f2b344448e117a7f19d6667f9e82367b2b26f5179a525f8e49fd650aa4be022bc5af744bf14a4cf1bed654bcab3091bfd115f96a4ce46f3545be0613f93b5d91afc590bfd745be0e53bb1f52a076d763e03fa600fc068c939f7439b91113fbe71488bd4d064ebd00bf24a27d318e4ab8096b0e7fd56c0e6fc6807fd304be052bc1df754bf0560cf90f5de4db30ddf83305ba713b06fe570ac0efc038f95b97933b31b1ff4981d87761f5e55fcdfa723726f57f2990fa1e0c9c9ee3a70bbe1d2b492b43b324efc59023bac8f7618464a48090fb31f05a29007f00e3a4b62e270f6262d74981d80f61f5a66e865ebd791893ba5e0aa47e0403af9f02f047b1926ca05b928f61c80d75911fc73aab8d1229c6189dd51d18d38d53c0f41318789314803f8991dd5497eca730b19ba540eca7b10ad95cb3423e83f1d142978f67313e5aa6808fe730f05629007f1ee3a4b52e272f6062b74981d82f623ad25653475e9201d3a9867619d5bdf539d45b2f71b4fbd3a33e7624bd9731b3d55ed36cbd8279d03a24021cc383f62a2671474d895fc3864f9d12018e317c7a1dd3f1ceba3afe0686bc8b2ef29b1872175de4b730e44c5de4b731e4aebac8ef60c8dd7491dfc594aebba6d2bd8789dc4357e4f731e49ebac81f6026bb570a4cf6871878ef14807f847192a5cbc9c718f2aebac89f6084f44901219f627add5753af3fc3f8e8a7cbc7e718727f5de42f30a607a480e92f31b1b375c5fe0a9b42c949a40c634ca17c8df13130057c7c83499dab29f5b718d1837489fe4e864cd72a0e4e44e4ad38f0f7582d1ca2590b7fc080876a02ff2803ceb46f8725021c63ade24f58e90dd72dbd9f312e466872f10bc6c56e9a5cfc8a01efae09fc1b46f2485d927fc7481ea549f21f982d1a9d025bf427c6c71eba7cfc85f13146938fbf315b3456d316fd2303a68bc7c625021c63f1d8bf18c9e37549fe0f23394f93643ab920e562822617960c982ae844cdc62f82014fd204ce9001d3dbc919d5b747147faa25501b4fa0962c015ac1a7a4a082d7c6c0f74c01781d193855ecbd7415bbae0c99be3f55d387524f06dcd3be9d9608708cc372ea63c0d335811b6024cfd025b9a10c997ac0666a7ac01a6122efad2b7263ac32ce4a51656c224b80ee2c3c3b114e62ec2cdc5406ccb67dd734d5cdb0529ca3598acdb1529cab5b8a2d3091f7d114b9256636f6d5341bad302ef6d3e5a235c6c5fe9a5cb4c1b898a7c9455b0c78be26703b0cf8004de0f658e91da85b7a1db0d25ba0597a1d3173b150d35c74c2daa902cd76aa33d6d35894829ec62e18f8e2148077c1c00b53009e898117a500bc2b065e9c02f06e58ad59a25b6bba63157da96645ef81895ca22b724f0cf9205de45e1819cb34c9e88d01976a0267615c2cd7e562570972765ffbd69a436ae60ca5797c859ada79496532862d1f0f6c75d98a0cbabaac7db5dc252203b69eac0f6615ca536015fa62857fb06ee1f7c3c4ae4881d8fd31f0ca14800fc01aeb2acdc63a5b064cf76b5c9908f0781c38072bc555baa53850864cdd73ab35dd73b998c86b74451e8419cab59a867230c6c5219a5c0cc1b83854978ba1982aafd354e5611817876972311c93f8704d8947603de523347bcabbc98033eddbf58900c798ddd81d538b2375d56224e65d3d4ad3bb3a0a033e5a13783406bc4113780fcc05754c8a5c5063b0a6ead81434556331f0e352003e0ed3bf8dbafa371e33d19b344d741e56c98fd7ace41330e01334812762246fd6257912e6cc3851d399311913f9245d91a76095f1e41455c63d317ff0299afee0bd30c94f4d91e4533103789aa6019c869990d3536042a663e067a4007c06a68767eaeae14ccc3e9da5699ff6c6ccc8d99a666416067c8e26f06c8ce4737549cec7ecd3799af6690e26f2f9ba22cf953934fad9b7d62c923e87c658fb2d7ae4fcda245c195b1276655cc05c196daae52b76ea9813631fcc105c980243b02f56e017e916f87e587b71b1667bb13f36ccb924437288621ebb75371f1a47e8b19f45643aa127d0ae66fc2fe3eea501ecb8c529f6ef33ec5fca9896d127f24318644736d0b76199535d5cc1b4b640f1acdb79582e2f95e5f2d8682ec501a94e9d59cefe3d85d5269a9b62fb13a7ce4c89be39c1ae49ce21a9b3582ee8f192abd8db03787e8ad8c9c2e3eda468be28ae973d1781beaf260786448f67adb0b92e62a89053e810f4f33dd7c629513c017b3ec6f465983ec1149d3cd123d31db656d8766a81ad1b15accc9ddce693a5acfcfdd2badfe2cf53a54f0760b9dc2acbe5685f2e21e74e3e27b2125bcef2e897d25b42f0975875057ea592b303b19c5d2ecbd91e0995df585b870a599d2f619aab5f72ee2f2a795b80e5ed0a59de86faf2368d95ce529e337ab7a6c672b210cbc995b29c6c4eb33d73bfc9b3afa5ac8da647424f64edf5729642e25a0eb9c37341db9295ac1700ad1eedf3a4ceb61560ac5f25637d6c4275632a63a33210566d1196bfab65f99b6a50abe8d383593234574e0fb584255d420e61f5506e499229d5c558aeaf91e57a54cc5ce392ce6279a1474b55f13c8ad6983e5dcc19aa5e2f922fcd422c5fd7caf2b59f72cf6e36fbc5dbb7932138cf6646ed4085dd1ed0d1874e4f3099722ec2f8b84ec6c75e6969b34db7e6c5589eafc7fa296a3a207478aafddb620604cb5955235472b604cbd90db29ced86e46c0eab9fa5bc6fe28c7ec5a8652eafc585d54ac3cc18652996a31b65399a68d0fa8a52a5ef14d8792d65ad77ea725a82e5749b2ca723eddbc42d85370705ec99933bcac96456ca156c34b4d86e71d7a630570761b9ba29913181375dd84398c34aa1c27e97d6c325315a3f2f46ea72b60ccbd9cdb29c8d8f6b39131b15e03634d69835594b598ae5f116591e8b0cf7a8ab6ceb483d704b788f792ed38092686d4ccd183199567439c6d3ad329ee6d4d8c8233643fa3c94613cdc26e3611c6ac3e8086991fd92a81b5359a9c76e71e448a92ee915580e6f97e5708a620ef7611a5d8694484de4b71ccbef1db2fcce32a8d99549b4bfa960e0608c813b53d52e3bb66d2c6895cde7aa02cbd55db25c4d52d4e3096c166205efedd6b40e576279bd1bf350a896e044f646756df4dbd7c47155f25785e5ef1e59fe76d7e83956b196b7ccce5f311fe7e1b9caaff6ae4a9e566279daae56667efd1ccbfc09d4aac41ba5986d295761f9bb37911901acf73881f9870af8d8ad7a3f3eb9de63f27de4d5582eefc34a516564ece47c12ef19babfd2799dd87de054f58fd760f9bb5f96bf1e24b6ef931e676242cab598940fc4f660aa94c2eca44ac1640d3b04cbf583b25cf7472d487e3446005ac2e2a8d79ef670564a7bd7c9cd621c8ac9fd904cee11712dc31436034a7daca5b665afb0f346e31ce25b8754d98075587e1ec6c604b1eb081df3cf64fde44a494f29911913dabf2c4e610e0fc372f848229e00f90cc814a67bb1ad793a67410ec7f2f828e6874ba4bd4a2497e96eb38ec072fa982ca793132a4dff7c96530f45be6bb25cd763b97d5c96db7de396ab59ffbfe9998123313676c8d89886b6196256bc383a2aa22d62b9444e4746c77b95cc2ff86f2af93e0acbf713587c4362f996c703a4376f4763797b5296b7e18afd80956c84e3ccf2507f84788b8e33f258cf40ee9b84bfa9e46603969ba764b919a2991b2752c1396acf793f55a5720c968fa7938f1a8837fa49a75d3d16cbdf3389b497503b600e67b3a7ce28dcf116c9e608bc7a87ff921a8d3c0ecbe9b3b29c0ef6e5743ccb81e3e7abf28c83704b102b17c9eae3462c17cf25320fae12a1179cb67f1396e7e76579cef5e5790e90c98d3a8663f258795b8062a9e4e0782c072f60b16b89b55be3d938968e937268845c1a5aa913b09cbc28cb493fe21da30f8a1e892aae536d392a89df7f97eab1ea664cea9712f1ef242ab5c08ead4fb191dda36255f2772296bf9765f91ba698bf590c7105b37e6395ea4b32fe9093b0bcbc22cb4b4edcbcb88cfa4bcbf537a4ce569d8c49ff2a66ab9293def10d14391b4bb059a85833182a393805cbc16bb21cf456d4a5f19cd5ea332ec9e8caa998acaf27d2324086745b8664d93e0dcbc11bb21cec1f653bf5f396c23f9d7ce4426a18391d63e4cd44661caacf0925d6e74e6efc9ebc9d3803cbe55b98f746de2310ebc156b0bb32892653b965339c5e5d564757c9ed99586edf96e5b6abaf4cfd39a236c49128553a771626df3b89f8d2aaeb5c75ebecea5ff528e174ebded9586edfc562a613b59ab3e35a4d93d14de760f97a4f96af9e71b4cc8d8e2d623582f6bb53d31b3d1793f37d999c13482263b8693c3abdc4bea3366e31c1230dd3b5cee53c2c9f1f601ead44f52c319b161f4d2537e763b9f93091d993ea368c965bf576c87d2fb1e7a9ed7b6fc1f2f8513273602abea074e9e405580e3f4e24ce37feace53eb69528616fcfb6735f20ed999b990fba10cbd927b29cf5417b1478544d199f494ed52cc64598c49f62be2cb5b19298bb5b1eb58925bca5492c9ecbc448fd622ccf9f6131502aa32b272a5b45f654588d4bb03c7d9e5c84b9fedc1cb496a9d1d54bb13c7e9148b40366fd693924da02a4d6d25f86e5e74b6c054ea223849a8ac4db8ae5e82b2cb63d51fb173b0620115ba21e3f9a7c3b7039c6c3d7321e7ac5ad8de6fac15760927e83792d13d51bafe4e5cc8be1ae2c30a17d576279f9166bcbd4ea93e39da9fe6bf5d1643e714e54353faabf0acbf377b23ccf2735ebbb82bc24da1b13dfa8b07235c6caf789f430458a2abe2b3767981ea4c6b25c83e5ec8744e68a55ed6a4d7a48aec572fa63227e656caed8d1f1a164709cfcc96c2bfd4a2507d76139f829f1b8059aa67adc82933fec79aa4ae87a2c7f3fabad76a91e09545283a3d31bb05cfd824540c76ebb67f3914f75ad1acf66f92b62d842f7db192c0ed719b7c7defb23b976e4462cd7bf2652dbe4e927378b93ece8601b9683df306d8c353aa0f215dabfacb199af1eff8b8d0fe2db105c1bebdaff5916ddeb6c027bd3895d5ec198a07d8c6c1a760ee65a07445be6019e56dc7d4e535f6e4b446b777eb40da67bbdc546f8dd26ac4e84387f7a5b946c7144bc55ece3cdf9b294212f061a3a8095bbb3af051df50f888e92c54e78f17221eb8d0c00fd1198bbf8793a00d9aadfb2eaf21c092c9be90194e99d2da77fd052cde5a51ac9cea679ec9ba436c597e24f9a5a865c87da566316d67999ec0ec074eefbb2e8798733d970420c2b1c7785b35163dcd4602d95a5d69f0188be5b5c38189024836bcf54cc710b551027b87b7e4f42ead68ee4d052f8cb24550dec1b1a993985b7bcd40e549265a12069eb2097a4bf4d924471c3a33b5b87bab4fc6392167a5ae802569b9dca86efcd1406dadeaee5d2f6af49dadab32a57c13aec3389b3c582e8ce6104568682c28f2d97c2ff4c52d8ccbe119ea3c9cc625180023696a3b1e6334262c1b6d5730923b50c12d68a55d5052487b89b1f8499b8660d5de22c93c4b5059a46e711bd15760af321acf0cce48781beace52e7d1193f4b590e81d05a4013774e1e54af6b43014a42d242e6919e9220dc6f58a7183184d8481b491a35cd26a99b670de2661a2fdb7b3057b617439bc63e9c2405c562397b8dae9b27074ffb335f6bf6476cddd5b360cf46d2877e9ab63923eba6d7ef58621dc5de133403faeae49f2da03dd9bc060e8cac002de1999cdaee576677925d3bd3051f8403797c27a26296c081a8b199e69b830d0f4714797a6fa2669aa0f687277940a034533dbb814353049511366c984abb18cd9ae196cdab790b5a26120abd35297ac8626c9aac3f4a932545d8a5a8d5d721a9924a79d7d3323ea16f2fb60a9b95fc9348cf6ca66f2e9c53010785d2797c0c62609ac07ac15159346bb8481a0739abb043531dd6915043922f8074773790fac989490b08c304796b8f43535495f6bd0eff21357c9aa6801730695d99faf0d05754fefee52d7cc74478212339eb80bf2c3a15d55c07a354f97f512bbd08681a0c2962e412d4c12d481c061cf1a96eb95d1e10d5da250c8aa62182b22fd23486c6992447a7e20248fce3fd11de769755cc9dd3ee11e86b7aae552d9ca24958db94d13fab696f7d5e690ca90f4fb4f01b6adb5f971a4380f49c4cc8481a2d747ba14b5499727760aef4e887060e11d0bd3b0e9f7ba2e716d4d12d705b49b736ccc42debdd8b93c63a7f470e96c67da330bf5106e8a3e96f96a61150e471f6e1d98f76c6f92bc464017dd7daf9d1dd94341141889763049140d4598c6acd932df314e79f6eb152ca53010b630e212d6d124610d40b58467b68581a4f9835d923a9924a9364b7a117b211cd49c31c2a5a6b369cb24f4c75d4de4081106a29e073ab48b49a2681881775b301a9c5cdddd1306d2fe067efd2e26496b4a60ec450123ab2874d3205b407c4f66bafafa4ed48577f15f61c8fafaa52020afabe9cae98c23f358d261f653eca8ed92d6cdfce0db5f39c340d1e7635c8aba9bae901358c0f04a96b87b6ea87b8e6c25dbffa43c14c47d0c74ab8769dd1296ccb1595561d12db00ca2a7498a9a78280a6710275d1f27c8ea65ba228ac5112b184cb89dd1234145ec6d92b8e6049f9b1c4fc49ec361a0ac10785cb34c574c67192df54014b1d923d749188e1efe1a3081bbab49b25a824e847302907fde284c6be0f286b8b4f531491b8d3374fb5c135898b0132716069a762c7169ea6b92a6768ca699b6a572bc5b07b3e5e4e137ff1bd92448ddda3e70ff0622c92f8256631d5fae4d07f0543bcbb9efccb1849ee5dbb40f1038c9fbd502cbafb3920e11c88adb4bcb4a78514e9672707b56928b1bb31272a36769cef96729ac58cd52eac065253c9ecf521aa16525654fb294a660b3949c385909adbdcc525a7098a53c552793195fee93552d5a372be6fc569634fe324b1ad79485449667c508cccf4282c8b2e20462642515589b95e42a8bac14cc4767c5d98a210bdd7f200b199067a1f34759316706b214fa7d5960c17f966f2a262b6e673b4b31ba322bc1114f16127be2b5e7b1d60b66210eb4ac189dbbacb8cb02b2129e68c84a226c37cbb33e2db115b8590978f1bdb889ad7b7377e0811d0a77e79c1cba034fff5affbf37c7c9a19be30ca024eccffbd84eaf3bdbf4243c2def416408bb3a7b22d1fae5581dfa9a2fcd4ed5d29cc52b9a73389de84dcb52afefe96f77482443c9f4b9bb8229f91cd383162f6db1b6805b4086dbd9304667135374b6cf70e91c18243a478492ce7180cedc20d139309474ee0e2afba020d1991b4a3a4b009d838344e7a050d2b909d0392448740e0e259d5b009d438344e79050d2792fa0735890e81c1a4a3adf02740e0f129dc34249e7b780ce11e91805d10ed0ce330a9a65b9f4ed6692bea62c69d7f1e8770f55db2e2204e451a797206ff77454e525686586e2d331cf5073743632456777a08b238344e7f050d2d90ad0392a48740e09259d8f80ca3e3a48740e0e259d37023af708129dc342492701957d4c90e81c1a4a3a3f02da393648740e0c259dc580ce7141a2735028e93c19d0393e4874e68692ceb580ce3c9374b621b147e4de8a3ec41c95cd4d51791f188d4f080a95834249653f300334312854e68692ca1780564e3249656b4ee5621e6ae03fabcd11dd39072cd71c91b54d11d90310393928440e0c2191dd0191538242644e0889fc168c7bf634496467e2063d251afc49dfaf60ef86cfafbe2fe814ed6592d84e245e1f133bd7da60c5df6199ea20017d9d6a92d6e6444c570cb4ff5e45c4d97bf4591a262c8cb5e5750181d34c12d8324ae002f68203e4840da68944631317b70312a7a7a372e7b0bf13090f0eb3cd9c06689d619256183baeb28224cce40e050dd2cc9a1c0f4138a38d505d53540e04bdcfbd4d522922c587a67fc6dc981e3e08f470563ac81b9e7ef2fe3045de9380bcd926c9136b21b0718fb7121b9d4233568dc782e6263f48640e0b2199e30099738244e6e01092390a90393748641af45e1a23730c20739f209169d083698cccdd0099fb06894c83b197c6c81c09c8dc2f48641af4641a2373382073ff209119c611ce0840e6bc2091393c84648e0764ce0f1299234248661e20f30093643a3b249470224bec8fa81f88be1e3e7f650fe29276603a7c3ff8648437f2327cfef3f380fe2da859379a03459dbf46e71ebb9ba2720d70a32d3449651f4e65a9fd5229bb8a4d6d66daffd3c9306752c2d9676036c9237b9171cc9f5ec49fc1f7c6da529598a5bca529caff01941798a4bc7d5c43503d2ed360db6e2cf6ed51600e16058d5083edbb31421f03842e0e1aa1061b2c6384de0d082d0c1aa106fd49c608bd17105a143442c3183f7c3f20b43868841af4c51b23f42140e892a0116ab0db648cd06d80d0a54123d4a07fc918a13701424b8246a841bfbc31426f05841e1434420dfae68d117a1720749949421b304297b25d179d1d3e6978ac412f93b1c80e5a1682b2d29a748dc08057a3e3f4734c51793218a72f3749651346a53f3e930a4c770e5d1342075d6fa0856526a973238469f07fda23848d55e3b381e55b619240ba33abb377f058fb6f67876f771fe2bd1999f4fff051980974b0dc2485223e5878369d9513cefa8a29244fea7b0fefaa9f3dc092be834dd2da9bf81dc6050cccdd6d779cfd3f6db3e9a295156c5fe958536d619c4f2f004d508549b2dded717377a248cdd680be4a93f48935e67089807c57e93047afef008d5295493ac582bf81c8e46fd897ae1c0f9aa695e9e8a427168c10460b390850b92a1d1632970c4bbf8534469f052ce46a93f4ed42aa0f17e710e74487b5ecb402c79951c4965615306d2d6670cbcd6ae65653d4ce06d4aea9d94a1ef62085bf41255f9bceae7c892dc45c30a8c41d1c06bbf2c61c1c934057fe1093b48a98b81ca6a594ce52fb257aeac4b2e84b696ad38d59d23b40e7e850d3d57d2c3bdb6a053fd1c7598aeaac9ea47d4d71ce91737a54f8fa99b540755f67daf921fa99cbc5908b8ddcc3ae8d67000a0f4b0785c3763a0a9f05141e6e924278ec5439f11e4a9526128db5dc5d81553c225d24bae7475512e79cbd706f63f234d0c4f5e9706360733ad54ff93118ea628cce9ea0db736490e834bae3b5313a67003a8f0a129d46b7193546e744306c3c3a48741add17d3189d6580ce0d41a2d3e8aeadc6e83c09d0794c90e834bafb81313aaf00741e1b243a8d6e6f6f8ccec7009dc705894ea331c1c6e87c0fd0b93148741adddede189d7f023a37d5a443d81b1a68d073692cbe685730ac3c3e1d54629ae9a5d260d0aa312aef045a794250a81c144a2a6b8391d0e6a050991b4a2a9f025a79a2492a7b127f94917f974c67f1a938f65a5c65b147062da9b150849701d127858568837398c688de0c883ed924d1ee197f393b51a0c2c7c4a5ef949ab4ad106e412877ef980e34f1d4745009b71b9f4a669049642613a6d8fe684d3a3cf3c6a8dc0cb4f23493543a33e87069ca02becff0383e8fee404db4af45364461082d646340e6e926c98cbf5b3b141feed66eb0e1a187981aa1b533182b9d61925611e25565b7d7b46d5769d18df6528d69ec2180da33834aadd161a9316a6f00c6e02cd3dda53cd61815b05ddcab6c80f09feadb1cd077b649fa5ac5e92e899c2e30b900353b626a0b3e30a23fc77cfbae7238b231328dade69d0574f2dc209119c63d8f660032cf0b129961dc4d660a20f3fc209119c6bd8ef600646e09129961dc45663a20f382209119c63d8ea602322f0c129961dc3d660420f3a2209119c6bd8db20199170789cc30ee1a331a90794990c80ce39e46bb01322f35496626a93e9054db0bd660fb6e6c2fd8a5c0177f593a74158b09f187d818b4a2c6026c46015ddd1a24320db6efe6e2900199979b76c08959a29d67039ffe80be2b4cd2d71ed0577d8b140ae69ee31be609e0f700a1579a24b4052074e75ad1763aa0f0aa9ab48ffe39f4301e5cd702b4dc570789cc301e5cd71690794d90c80ce3c1754d0199d70689cc301e5cd70c90795d90c80ce3c175750199d70789cc301e5c570f90794390c80ce33652b50199370689cc301e5c570790b92d486486f1e0ba7680cc9b82446618435f770164de9c8e41e4d09d6e103993b814de629242b563ec0c6aa3b1452e9783f0c15b83ed5b3768398df9d60908debacd24bdb2bd0d138fcf34385e37165e7835b0a3b79ba456ec049b4b76ce9d609f0026e08e7478d907da9672e75915f43ea0ef4e93f4c1eda5dca52c703586f1452cc674f034d0a2df958e163db11e6618bd457b032aef4ed7ac8fd0c7c9ac1577677c6804fb0cbe4a28ac5b9f4d0384de930efb98cb0e6648b37d3416bffe07b08fdb4dd22776f0483c7e3d8c9145bb003aef0d129dc34349675340e77d41a2734828e9bc0fd8cafb8344e7e050d2b915d0f94090e81c164a3aff02743e18243ac37934e21b80ce878244e7c050d2b900d0f97090e81c144a3a8f05743e12243a7343496705a0f351d3c34a3a369f69ff4d41e8a902f4f302f6fa21cced56c2de98c54473164c1b23b4d014a19301a18fa5c3e541c7e9cea627ce70b2884c641f39cc847984fe1fa0f27193543625e288bab48fcfb79a22ef2840de0e93e47524891ebfe43dd6c6e0e4c47fa648dd0dccfb3c1144520d86bb1a23f55730e3f364104935e82e3646ea2f80d4a78248aac1f05763a4fe08487d3a88a41aec811a23752e20f59920926a301cd618a9d300a9cf06915483c187c6489d0c487d2e88a41a0c8f3546ea7840eaf32649ed4bbcbbc42e662b281d61f661d42e658133f0687a31610c13de1996b3de02487fc124e98348f579796ffcd278fbefe5f67ff4df4e46a85fa0986d3d49859d4ee8e075354b6299adfbab48117b2b9f8dcdc404b5c142d8d35421e412b7105e4c87a700f363798323c2b8626e02d0e7974c52e9c63a0d4dbfafa0bf29fa8e04b3a52f9ba44f6f1fcf308633be08a87d25a8d40e0c25b59f02fbf9aa496ad5962f183d1bce9805dd02c87c2d48648671cdf10580ccd783446618d71c9f08c87c23486486318af47c40e69b4122338c6b8e0f0764be152432c3b8e6f80840e6db4122338c6b8e0b0199ef0489cc30ae392e0264be1b2432c3b8e6f84240e67b4122338c6b8eaf0064be9f0e0f52620b66c378ece3c9609cfe81492a133fd5c06067ddd8aa903c1020f1a1491ac52a2595d8d1306ec6bf16e8e5474123348c47451c0e08fd386884867153fee580d04f824668188f8c2803847e1a3442c3b8397f0520f4b3a0111ac6a3235601423f0f1aa161dca47f2920f48ba0111ac623244a00a15f068dd0306ed6bf0c10fa55d0080de3c29b5240e8d7e6079c34586c8dfd21157495fdf262b0e0c6ddd33b7ce3f6eec4a5f11b93346612dd8dae0c364cc636ba1a04026bbe35496f634eaf737873290b6470b04b88c113876b9b228e00bdfcce2471bb126f5863158b459acd0168986215abe42af1200635d55834c820e079fade24e15d50439058a88dc1ee943172db00727f0832b961d4dc9680dc1f834caec16e963172db01727f0a32b9613c49bb2d20f7e720936bd00d688cdc5e80dc5f824cae41a7b53172bb03727f0d32b906fdadc6c8ed0dc8fdcd24b97abbe386d1e24e02e3b1dfd3e186a1bb4b4c634b1b96f996e2e4d99f55b014c3bcc7440e7109fd23ddba2a5fd397cfdc313466a598c12d274697a06f3545ed306006fe3449ad5894435dd5695f9463acaab70255fdafe05a51833100c6a87d1550fbb7496a9b90585ead4a73d43530455d04d8cb7f4c52378a78fd5ab41ad3754d0ec078a67d54289a81523b21ef125e47e812225cdc74972977596f21d9f996f46e073afdafc98289b7d576f88f4cef0374fcbf74345c745fe89de77cda25803eea600f40976a3ca18bcccb99c63a26c3a866fe618ada26a04b6599a4b69d84da58167378280fa26e0ee88c04894ea387b319a37308a0332348741a9d743146e770d0a2d70a129db9a1a4737f4067ed20d16934c2ca189dc7013aeb0489cec1a1a4f35c4067dd20d139249474de0ae8ac17243a878692ce37009df58344e7b050d2f939a0b381493ae9107916779cd0cde2ca1880738653f868db85b8b43534495b7752fd08ac09640da1fbecad24c2a734c3febc90d008bf594c1f0b19c1d41795860911630195bb02921ba5a3aa277eae53185747750161be8d8344e7f050d2d91cd0d92448740e09259d0f80cade3448740e0e259dd7003a9b0589ce61a1a4f31f4067f320d139349474be0be86c11243a8d869019a37321a0b36590e80ce732f28d80ce5641a23337947456023a5b9ba4b307a3738afdd24c42a7d60af9a75464ff42b305fcc8e0716c77e765fccd89f6b5c80637b8ccc7d890340bd0dcc624cdf1f670f6da53838bca8d0d3c1f044e91b641a1d2e8fa7c63548e011371ed8242a5d1fd9b8d51f909d0caf626a98401b7f46cbc2a9b89725b186a51e712e794bc42664b8bd2e15f326631ab80c5ec6092d0e6446cd59e5b13e135dd4d11580bb8403a9a24b01723700203a0b97774af90c1d0c306f3580c5e005a776354b706badac924d5dd8837d8b198d0d87a0ae75d643ec8fe9b125e10bde6dba0cb58c7cb6844d36ba6368c3b0dd8d7ce262976f68384678bd698be1a6bac3a007dddc57cbbefcc25390dd2ce46657b4065979aec424138a307bc19dba57424a8e29926a96c09ba5079f6032a2a8d05cd675b732c0b75b7694fd0ea77356f271d1257b16e123da379119b73172fa5a90b654c23d780caddcd24994d0199695e97648cbcd980bceee908ef4eeeb0a030ae4abe1054f21e41a5369c0bbe6f075adbd374233495e5db697a56b0a8107a961df58f56a463b32d638d500b4062af743442d81a236fa76868284f5cba1954f6de4122338c272edd02c8cc0a1299613c71e95240e6ae4122338c272e5d05c8ec132432c378e2d2e980ccbe4122338ce3f24b0099fd824466184f5cda0cc8ec1f2432c378e2d26980cc014122338c272edd03c8cc0e1299613c71693b2033c724999d48f52508eed0710629b60799050c5e4cc78579d1c14fc4a575603abced891d6465b08b648cca338186e6d6ecc48503451dc746a93436fd7b2898b818948ed80f9580d9301e66753cd0cdc14123348c87599d00081d123442c318367b2c207468d0080de36156c7014287058dd0301e66b511103a3c688486f130ab4d80d0114123348cdba71d0108dd2d688486f130aba301a1bb078dd0301e66b501103a32688486f130ab6300a1a34c07d44ce1dea512fb131a7e485f76f7f63446de7053e4f5242e79a3d3118d342cfdd148c6e23a9e00e4ed5193ee8e19f6270711ba4348955977c739a6a87c05b83bc6a4430f47ec445171af033d1c6b923cb1676cae2ddece43dfefa00119677e926229f39dd34f9dbd909c652d2bed0f1773818ad92201ba994ff8c2b41a025d1c9fee0d78550209c3d7dc8c0336322f1dcd4d629369618ce51803b4744230b689969dbc6190daada6a8fd1b68e9c474ac5bf36e945649125d30687cc6d2d8dcd00f407b27a567192b6defd3be8cd5d83ce51ad0e24f3649604749f5c73aee6349052374add98abfc33244ea43a0e24f0922a9069d1bc6487d1a90ba67104935e8243646ea3640ea5e4124d560efd418a9770152a70691548353c2c6487d11903aad66bbfc610fa8e906dafce935e9accb6383d0459c4a8355bd97292ad703ad9c11a41db9879b0ca431770c24d831696690e81c114a3af70574ee1d243a078692ce59a0b2cf0a129db9a1a4f33040e7ec20d1392894749e0de8cc0f129d46633a8dd1792da0734e90e81c124a3a9f0774ce0d129d4617c018a3f36340e73e41a2735828e96c003a4afba6637116be5ac33b9f14c6956e1700dddc2f48648671a5db4d80ccfd83446618f7fa381390392f48648671af8ff30099f383446618f7fa380690794090c80ce35e1fa703320f0c1299618c0f5905c85c102432c3b8d7c76a40e6c2209119c6bd3eaa0099054122338c7b7dac04642e0ad280d2e80179c60694ddc080727190e8347a7ca3313a27023a0b8344a7d15d388dd1391a54f6a220d169b4f36e8cce6580cee220d169f4083263749e00e85c12243a8deea5608cce0b019d4b8344a7d1b35a8dd1f900a0b32448741adde4d4189d6f033a0f0a129d46cf6a3546e74f80ce6526e96cc1e91c62ffbf9c275ec0161f84fd54826dc4a5b0b426030d5dd19d6507c6a834b6b8e0141068b8dc24954d88bb0066acfd337db18a84f9a0918300756526a9eb2eb18bf26559e36d90e576aa2bd81d7d3b4d81dafd4d91bc1558cb156120d9a09bce18c9970292cbc340b2414b6b8ce40870901c1c06920d4e851823f92ba0c9156120d9e0e49d319247034dae0c03c9068709c6481e0948ae0a03c906a34d8c913c1590bc3228c73f1b75581b1b48dc032cefaaa05069d4bb6a8cca3e402b5707854aa37e7f63543e07b4728d492a3b13efb9c445640da1ab3a67d81f14127a9c194eadc121833162570062d79a2436d3476c29d8ccdfdd9228d66c7f1803270e00f41e12141360744998314d7d0450796850a834ba7ec91895d340c3b42e28541a0d1a3746e5d7402b0fab4917b677374683b6d2d86e8c83811ff67093547665544eb15f9ac5082bb25f5ac53f779ba31a3be1dd98a3bb3e71093ec224c13d7d6d7d151b6efefff1c37e038cc2fa746c8d39904d0ea6796b4c6336753d300447d6ec813e61ef7ff6019a7894492a5bc5a152e4d4e8ec5576c494e5041da6a34dd2d890ddac60792fb681c6daafaf25f434edf035375d4073b3211d434ba87bcea6acb3491ed98bb5e095f68bceb3996ce8b996d0b1fc585b8212b3defb96a6e85d0caaf631e9d84db48a2cb57fae246a3bde1aecd41bdbf3f65ba0b9c7a6c36a629d7ad76a1a6c7c8c59cd6f403b7e9c491a1bdb3733795059017136b99ac2349356fbf059ce6640ff3606e77048834b678df5252f033ab8293887431aec0419dbcb6e2d68708e4f8755cc895ac642366c74f7504ec3e8c658e57e0654ee134cafa5a384e5b1848bd8a705ecd543c096d4b3d8af74eb7f83b17b4b4c91b9272073733a827073d8dfce7596fd6309a336cce18f9b0085279aa4b011a0d06121cc0738ef0b1a969382730c8fc186c598e3f722d0b09c9c0e2a7362cc3f863ba2fe7d50994f314925f5254f65d68f0294b1e6a53284aeda4e80b053d3d1800c263bdb2a8ec30085a7a523368356df096cbcbc920931d5fe6431ebdacc20aba3ba489d15e5a16e99f702c49e9e2ebb584456116716269f3121bcdf69d1d105a6a87c0ab4d667a4e7b0b29cf4cfc8985beb06e83bd3247d9d887fe69092e61cb433c51ec9c89c1343994d3518e55edb580507d30a67a5635b15aa93931899d3edbf8b58449b7b5a5165a83be42b818e9e1d9c83cac2b8dfdc81a0e139271de7620ede896ce57180bc7383737a46183d8eb541953e2f38a767186c6a8c9d9e711418639f9f8e0e103dea36ed67b719d3c4df41a5de928ebd13123d3f7d84c98a6decf4f4f6a0625f10243a878792ce8680ce0b8344e79050d2790fa8ec170589cec1a1a4f35240e7c541a2735828e9fc0ed0794990e81c1a4a3a5f04745e1a243a078692ce7980cecb8244e7a050d2b901d0b93548741add7ad7189de580cecbd3310aaa9113ac8db936f603f45d912e7fa503223f4b3dcc43ca3f009957a647176bc0cdf68729fa3a0187c65541dacd70b84997afb1aa9d05a622ae0e129d234249e76c40e73541a2736028e9dc0b54f66b8344a7d1f3848cd1590ee8bc2e48740e0a259d67003aaf0f129d834349e75580ce1b8244e79050d2f924a0f3c620d139349474be0fe8dc16243a878592ce7f019d3799a4b31e0370a2dbe86714397c412e75884bd7cdc1d9313b8c3b5ff5009366b798a4b2b7844aef0adaf184ee80b19cfd9b06b6ae64901390484c83641b8bbf9c00f4f6d6f4ec8891bb13c514ed0d74f5b6a06cd8647482c258b5bf1d3438b707854aa39313c6a8ac059c1c7704854aa31313c6a87c0268e59d41a1d268b881312af7015a79577a42fd47a4bfa931465f43a08977a76b45ad13934ed7f12c61c1fe1524cceb76ce069d9d7b82b37fd57073541a8b44df1368e3769354b626740b11dadd2ee41fcd26d8927983eb1c8d55eb7a4027ef0dea6e4146db6e63bb05ad009df3fb824aadd1ceba316aaf055a7bbf496abb81c6683173a88d671496b1e6682af12e749ec61aa6a5365cda568c1b6bacee04dafb403a623a125b3635c8e43914c69aabaf81be3e182432c3b80aed7b40e6434122d3e0010ac6c87c0790f97090c834b8f5a23132bf02643e1224320dae4c3346e65b80cc478344a6c1c3e98c91f93620f3b1209119c6cd935f05643e1e24320d76e58d91f92620734790c80ca35ba41fe8b43f1124320deef66b8cccfe80cc2783b147bac176dcd86ebf9d80dffd299334b627ea0ba90c5672638b55f6037af974d0083558d18d11ba3f20f499a0116a7050698cd0c980d0678346a8c181a531426700429f0b1aa1061d72c6089d09087d3e68841a74ca1923740e20f485a0116a7090698cd0dd01a12f068dd030aef11d0d087d2968841aecd81b23740f40e8cb4123d4a093ce18a11301a1af04fb6024836dbeb183918a40ccc8ab26e96d49aa9f0940778acb67b42e4b470c93b178910e40475f0b8e87697828a785ff0664be1e2432c3382dfc2f20f38d209119c669e11f01996f0689cc304e0bff05c87c2b486486715af83b40e6db4122338cd3c23f0032df091299619c16fe0a90f96e90c80ce3b4f0d780ccf782446618a7852360e4f37e90c80ce3b4702d40e607c13984d3a05e1a1b4c6e0595fcc3749c10248e0fa14baae9226a2a323deb624d0c62c3b8863d13ccb97f647a794cfc6583ce492c069b216327b14c01447e1c14220d6aa431221b03223f3149641746643ecff90c524ca612f7443fba61e402ee82a35ecec5f6bf1de889f6b5c8862c3447aeb1431c288a20f7d374ac34aaee384e64ad91414788b19546a780d6fe3393d4769550eb3889297965644fb6fb4779cc898f30ce736600ddfd3c38c73385d1699707a8fc221ddd7cd19d7296c7ee5c5da8cea0c1fa323ddb050cf51980342c1f34663709b09b5f056983f211a10c51ec0d464a5f07894ea363786374b605747e13243a878492ce1da0e1f93648740e0e259db7023abf0b129dc34249677d50d9bf0f129d434349e797403b7f08129de15c7c5006e8fc3148741a5db4658cce73019d3f0589cedc50d2b90ed0f973ba3d4b73ecabb321ef0406437f2be29ba296b351bcb30daad17571c60e2ad90f0c307f31492dbd99499c4da1c337906c0a34f0d72055e811a10cdaee043a43bf05894ea3d148c6e86c0ce8fc3d48740e09259df782cafe4790e81c1c4a3a2f0374fe19243a878592ce3f019d7f0589cea1a1a4f33540e7df41a2339ccbb1e6033aff09129d46b79f3246e73180ce7f8344676e28e93c18d0f99f493a9b1371d0035d7695f633568dcd475aa0a7498f7ba9b1cda3c31f727004989bb44c52d98978e7c9290f2b095d59e99f2df71fda649056633bc6e6025a2326696deda3b52446e841184f2ae80a3c43194121328c311c97038dac950e9b89c5167935d2e01a366354be029a9fda26a9ece5d3c945a47a2061e2218706b5d698c7b32ea8fe754c529d53ad79c288ac54f0c68fb5dfaf601b0618b5befd4dd13f0ad05fd724fde2a093e164017b40132f60fbcaa7a9af6a2c10f105e25258cf248562d648687025d35adabd9ac8c92bdac99ab483409356bf268701106e41289765e7012a1ba4b3492be17d04dad55fcc34546e5b2771801936e441f67531eb5718d4daf1a6a8ce0636b5a149aad5b70a1a11ca3d403b03dd6d143442c318e8d00510da38688486710fd09680d0264123348c7b80b60184360d1aa161dc03b43d20b459d0080de31ea01d00a1cd834668181dd5ff01a74b8ba0111ac63d40338086b60c1aa1619cd66b00086d153442c3b80768734068eb74b84e923b8fd3607b6fccaffa00b0a66d824aadd1edd48d51fb1871a96d9b0eaf54627be284d1c17722d0d27626a94cfcd419837d5163a7cecc021ea7f6266914cbb787ed54d1263f830adda166ddcc0e542923d5a023a4bb292a8f062d7ac76075917243e9fb2c0616b253d0080da3ef730920b473d0080da3efb30010ba4bd0080da3ef731120b44bd0080da3ef7331203433688486d1f7590408ed1a3442c3e8fb9c0f08ed163442c3e8fb3c0010da3d688486d1f7792020b447d0080da3ef730120b4a749429b12b14664e7d9702d9fb8e4f532495e26d13d3ccaa06e1a3b3c6a2118c5f7ae4987883718cce0e8e81c5354b600aeb92c9354c273b84a99279e0295315d4c9383ce58755f076ce5ae26496ce721d1d94959367111ee88e50f80f5ec930e77f120fbbf9da7f1e908ac63df744cad556f7c12995c33d8f018a3762aa0b69f496a7b106f9472a9fdea12b61c8152b7b34728ef0d68ee9f6e0d96939bcfcc010d152f6670cbcdb6f75b4d513b18b4f703d2615b07b2253569b6adc69aa6f7404b9f5d938b1821dc82501eddb308b4f23926a96c2ba9e438954637173246e65050ad070689cc301ec4371c90991b2432c378105f4740e6a0209119c683f806003207a7c3af24fa9fb4f35e486612e7700941224c6267d834a337e8770e49c7381ed3553f9946f7633446672ba0ad438344a7d1f06e6374ee0ee81c16243a8d6ed1668cce11a0b20f0f129d4627e08cd1390fd0392248741addf1ce189d1b019dbb05894ea3e32363749e0fe8dc3d48741add1af8ffbabb13f0aa8a2b0ee013290a8aa0b8564411954651203bb8873db224901054dc421612480812123637dc976aa5558a5bd5ba2b68d55297da5ab76add2d2aeead2b626b5daae252b53373dfe3fd93bc07a15ffff3cee1e3fbc8fa6e6e7e997befcc993973689c7703e7419238a99bafd2385f05ce83257152b706a6717e089c87f0d78294d82fbbe8fcba9513e92a694a5b35dfcb24400f0dd13e3bbeedbfc6e5897b4310f930499c835572ee009c859238f354723e0a17fb50499cb92a39ef00ce6192380b547276828b7db824ce7c959caba1758e90c499a592b31638474ae2cc51c9b904384749e2d49916b3003847a773d96ceb0b9d98b2454bc97e008698455228735452ee0fd31a874ba1a42612d228df86563926cce2ae4d296be33db83f8e0d91f2e27e708d6f87f163cf8c7d8bbea5091980372e449d8441fe795d6de6240dc145b8731406dbc6c208677c888228a93b3db89218779227aeed783c83c47a21b0168748108c2f9d89f6a1a9336dabcce0e346e3de48bbc373bb24c405dfb1dea43ec8c3e0a93d410aa4c616b90f404e9402495c004b83ac07c8522990c499481a640d40964981d458f1e83c809c24059298ff43833c1120cba54012836934c8650039590aa4c6a0c562803c420a2431a18a06793b401e290592b8a7210d7239401e25a7ac93c6bcb43ca09c1222fbc77dcb86f325f398774a1ae62c08611c2d0993f8fca6619e0098c748c224f62a69985300f35849981a4be15501e6719230353e80ca01f37849981a13a327036685244c8d89d1230073aa244c8d89d1a300b352122671fc43c36c02cc2a49981ab739990398d572aab1680c025f01943572ea60109fe4b445068b605c3e4dd676b9052aeb60bc026db3561aa8c63a18af02689d34508d75305e00d0e9d24035d6c1780940674803d55807631580d64b03d5b8e0ff65006d9006aab10ec653003a531aa8c63a18cf0268a334508d75309e03d059d24035d6c1781e404f6027058c302da6da9f62512c2052675f5c61dfba97d1f06819156e8b8f38de6c39851a88ed9056a8611b586eddc4a4ec6dda164ceef88ed8c467fa752cd8d3a18dce61c2ee69daeee91e1570186966c7bec51dd0a54fad3f0eaa71b2e33888373587aa90117f1b9dca58d3bee808394788b6c3d1c3f0506a099123146fb351fb8cd2ae8accf0a401e67c93cb6da59d59ac9de01e3b57ceeeee1a27e40e82bbea3c26e52e70c1c7d3014bfdc166d9f6e976dc726db62c26a33931702d90ce975b1583d85a697d808fe1f1b4204cc5a1416d8803244eefcfe2eb067c0b43f0b9c2c9c1f97e60f17d034ff313d3394a1a6e5c71a6a9b1794de213bc1f8b7201b4c49342768c5c7e6fb9cff46df678a9079f4456dae0732be8189d1c626784345cdeb4aed003f0dc3e8589e7861b6d4739e37c67a7d6be88b8f1288d6e0fa03b554ef1902c95cbba66c3bd7191244c8dcbba9a00f33449981a135baa00f37449981a135ba601e61992303526b61c0998674ac2d498d87234609e2509536362cb24c03c5b12a6c6c4962300f31c49981ae77a8a01f35c49981ae3e86580795ea86df5ea4cfbc507818acad396228c8720dbf9926aac0c663ecb6933907b4144e8a7923887a8e41c0d9c1748e2a4f634699c8570d7bc501267b64ace06e0fc9924ce1c959c1700e74592387355725e039c8b257152b79fa0713e0a9c3f97c499af92f30de0fc85244e6ad2158d732d705e1c62a9c16013dfc2399ad80d320aa2cd8f7f69127c97a473855bebd4008d7bbb1e0f03ca256116bda4a125d22ee4c9d0127f29a5ec07357a496b89f7c13d71a914ca1c9594bbc138fc522994d92a299f8156791993727bfb4189fda0d97e5bb53fd44cfbedb566b67ff4d499053e8659e73fd2779fec0cf7c9cb998cbb9bf60ba98b5c2cc5af5babf3996985f660557e0570456c996095d19c475107b85748b9dca9ab8b6897fbc370b95f298532472565213c847e2585325b25e51a689557f173264afdcb93279e6c6a45e177867be7d5618acd15b469ad01c63fb496791a0c1faf61f26d0bcff5221365f194f9d4d319aa9fdddd00f0d721d2a11209d1e55663983de92adfa78cbf1d6abfb9d6bea8c5f7359bfd9c39b5eb4e9b2bbf1868af954a4b1dabd368ef84bbe6754cda3e70d9af3f11badcff5f676afcc34877877e05b4dcebd983cef5759de2bf2935df67e06624c62ed003bd21442b45c6e816506a3b51637c77c98deaa3cf9518b767c27cdf5e0bed19d4196a11a6ed58ad742af44a6f947a7fa576f869f7d70fe0067093545aea089f470b8fae9b99b499a6756ea57b4ccdb5177fb58f3e458771a7df620f5109c1bd4dab9ae55b7093b885c9bd87e71eedefb4138d4b53ad8e85fbaafca1e23bd2a469004beb2b6c09edf956393b736bace17615dc759785e876a59a561ee6efb5b3b9977c09abdbb5355cf2cbd359c12d50b1ef2b3b9120cba1ff7a5b98b9f9ecf0b1295a68ef0bb89c6f0fbdd34cc7bb51c43b25ad1375235ce2bf09911cd37a5fa4686e34315baa7bb4bf1f3cc1ef08b12722626eb8c3a417f62880bd33d4767dd14152eddaa5f97eda0beea77731397b9af8f652c7f94fb81f5ee15b6c20425a1edc326891bf95b3359fc6dd168e01ca154ccabe1b41596a7fa63bc81c536cdf8b8fe89bb8fdcf89ac8e7c7778caff2ec42edcf150c92c1f0ea95d6f9bd59853fc3980de1d6683befcf01d7ada067d7d81ef9e50b34eb888ac23c13bbddda5dbe1f97e6f88ee524737dd1fa2b2cac6cec0799f24cec12a39b704cedf4be2a4d66da571ae80eed3fd92387355725e059c7f90c4a9b342d147c0f947499cf92a399f04ce07247152b706a2719603e79f2471e6a8e43c15381f94c499ad92b311381f0a11a6c3b5796e94541a1b31e91d09b500e1c3e999398a168ee5d8ffdde0b262dddb327bb019a6da0f3589ad73152ba6b412c6f08f3069fb99d631a5a9a6fdd4dbc62c23d337495702d3c78f4a49c0a13ef1692b435640abfdb3144aead39e46f935503e268592faa4a7513e0e948f4ba1a48edf6994e3e15ef9172665af249da689fe508d7eeebd6d5a83e66ed44208d93d11ba7a565bc861fe593e334ccf94d64ef381f4c9103dd3f59146eb462aece915fb9bc2fc10b4b4d9a5b940fb543aefa6ade739356ede5f040fa6a7430d41a3f97977a079b18b5c7335ad674d82f099100f245cde90bc4c5eb0025034d4efe0127f36dc36d455c6ed31922890db14aa75d21e434f00e473a12e70ac8b59e10fa8f9493e10089f0f916ce008abd755668f7f59fb8aba17e13ef9d7b09972c9ef92a3622f0876b71cc6a21d00b42ba526215247eeb4d05c195cfc2f48a5a586ea68b4d743ab7d31c4a3c9053d36ad55ca0702e14b61f6c449c39ea0b4bcf83ce05bc5e4db0e5a607d92b891e642278fc01df2e5306d30b7cda85c335f29f0bd122241ab638906d92a530dee830bfa5549981a63430f03e66b9230351676bc07305f9784a9b1b0e3bd80f986244c8d851d6f06cc3725616a2cec783760fe4d12a6c624ac1b01f3ef9230351676bc0930df9284a9b1b4fd4ac07c5b12a6c6d2f62f00e63bfc10dbfa961ba469cb29dad4455fa07d57c6f694c4fe266d7bca11b0e6e8bdf42e38880e55ef29892374dad61467c18283f74364aa6f4c820bf151444b22c883f8d16a69a0c4c7110db400403f90064a0c7dd0400701e81a69a0c4c7110d340b403f94064a7c28d140b301f41fd24089a1631a680e80fe531aa8c654c14c00fd481a28311c4203dd1740ff250d941846a681f607d08fa5811243c934d00100fa8924d06ca5f7d03e30f4fc34c442852863c82994fa43cd329a97c116417bfc4c768d0ee20389b616e900689dff4e678ca9f5725862777e298b721708d77d1e7237c49a5828b9caa4cebad49873792db4cd2f42dc39f3d3b1cc9016f3fccc24f8be94bbbd393114425b3d7735b4ccb5212638b2d64dc6b9cd257133c9002d9496fffb1cb4d0afe4b6508d558c1e8316fab5a43d9386a89ceee807bdd06f24710e56c9b923707e2b89334f25e763701ffd8f24ce5c959c7701e77792380b54726e0e17fbf79238f35572ae81d6f983244e6ab9471a670370bac56662387354722e05ce0c499cd4159f34ce85c0b91993339e2a88fb284cf427d16cea8dee3d91c6c003a81313b18749e45b064e14a42d935d042df0474cbc6463f4e43b28b8a5b30df6a736fa8fa225b4c4d8fbd72cdac32160dc99491baf50e42eeee1f69b1aed714b0c962a715bf2ba0356f8032c8082254d212e7d5a846930b4decd433c8e523d8c86da97361ab780b6c207eea83536689cdda0c56e2189935a0186c6990d9c5d24715277f6a0711640ccb3ab244e6a1e1c8d7332706e298993baaf318df364e0dc4a122775435e1ae752e0ec2689935aee89c6791b706e2d89935a5087c6f932707697c4492df744e35c0d9c3d24459586a8cce4e80301916d24710e56c9d91338b795c499a792f32193e0ec2989335725e772e0dc4e1267814aceef81737b499cf92a39df06ce1d247166a9e4ac04ce1d2571e6a8e4bc10387792c449dd408dc6d90c9c3b3339f731ad57c8cff2931e55f6045c7a41fcf74c6c718e3f0c7f54a17d6fb6cff3a0aea06fec4402df0702cc3f6682c7eb19549ae41b06b51e33e99b42de0ebaf8bb4881242e68a0416e0390bda44012278f699005702fdd550aa4c62ca3fe00d95b0a2431739806790940ee26059298d34e831c0a90bb4b8124f63769909bc1c3a68f1448e25e4a34c86ba045ee210592b8430d0db23bb4c8be522089c9d634c82e00b927137227b3a19179eb9ea4c62ed02d80b997244c8d1df35b01736f26667c47858e8d70343e766e00ca7e4cca7ea675bc68aa699f05bc3175b168d4b47ce1611029fa09937a501beae69490a94be8b55f001e285047ab2d9c01fc9921eec01d5fa7ac6fb5482eac16d947122631f249c3cc07cc7d25616a5cc7d40f30fb4bc2243eb268989980b99f244c62cc8986d91f30f79784498c84d230f703cc0192308983001ae6fe803950122631224ac31c009883246112635034cc8180992509931819a5610e02cc6c26666fd33ed37db4dfdb73a4fdbfce3356d9dfb7d11fd8256e07c97ea7c1d69b046c0e13765713d5396ab4dfe4f288718bd4b4d538a26d9cba05b0e686581a962acc8787a3ef344fdb66606fb8fcf3989cf1bd3edd7e20c17769a0454abb025f3e93afbbff6ddcdd72863fcd26af30cd6f18e05ea42ff2b93d5cc80521e2f5a99ee2ad2f648dd5860f8656389849b9f19bf1ebdc27f14b980019220d546395adb5007a8034508d55b6de01d003a5816a5c23ff2e801e240d546395adf701f46069a01aab6c7d02a0874803d55821e60d003d541aa8c62a5b6f02e861d2403556d97a0b400ba5816aacb2f536800e0db1abe21c536b5c01f28d59c7444d32a48de79703ed30a9b4d4ec621aedfd26413b3cc48447c7629e05cc7e292d58f21eb4d3119230897d521ae66ac01c2909536318ef35c01c25099378cfa461be0e98a3256112fba134cca701b3481226b10f4ac37c06300f9784a971fef241c01c230993387ea7613e069863256112e79068986b00739c244ce2fc110df343c01c1f62b2b86399721ab70b580a94c54cca780dcd5490f1df94ba08d1ad15a4304e80cca192f42e5f880e55ef29895d755ac1dc3360f9c20459514e9d750997c1253e511aa8c6e50bb70168a934508dcb17ae04d03269a01a972f5c0da093a4816a5cbe702380964b03d5b87ce166009d2c0d54e3f285c5007a8434508dcb179600e891d240352e5fb814408f9206aa71f9c2e5003a8509dac7b41f7446b3eca566b819e3f3899aec37469fc38ca3427b0675869a8c4dcb2d3a1606a2473379b1ea6b8b4f7f712520a7c6c6f06edf647a4acc5216e25c93403c269d819162fb92e9f63db7f534353042a3dc01624cc7f243c8957e918cfbe1ee440bed4be6dbf72a37917ca37ed02e8f0b91388889aea9b233e9e9adb47b652e701ecfe4ec9584b32ce6506c6a2c6d853f78a9ff01b342a0f663a17e01a81561b231b3dadc433567637e0edda3a9219620b6ef1e7564112271b049bb7b1e0a5da3ca104ff58ecd666a5cff5108177955881d17fe9785b2c4283dad8d5e0db0d5526189f34934d8cb00b6462a2cf15640839d04b0d3a4c21247f234d851005b2b1556e57eb5005b27155663072b0b60a74b8525ce3bd1602f02d81952618933a434d8f301b65e2aacc674af1900db201596b8ea84063b1d6067868e0f24df52bdcc075bdc40b7c61fae81db93bd8ef6f8825075638899290c078eb76fe7d9f7dc69b7c422ad737c5b9d6946c6a259d5210283b4c8d64a886ccd62f26e6d3f98e8f76374d37bc5f665aeb5c6e7a66870b45d187bc3257f4288886a5e6c4aafde4a049bcca3dd311703df6c26dfaea675798a3a7b12e5c0987a628f383ca54dec95c1ddb2494e3455639a4d05b4d03921a6f5524d37b7afe0a1b186477f6899cd923887a8e49c049c2d9238b3547296c02cd45c499cd92a394f00ce7992387354722e01cef99238735572de029c0b24715293c2689c4f03e742499cf92a39df01ce13257152b3e5699c9b4347e9247efc2811154abe842c4d551368f123370e8cf39ecce4ed6e12e139377aaf0f1502a1b5cc9320f4764a887d1c525de8adc7ead42e126db4fe03dc354f9584a971538c1e70cf5c240953e3b6805f41cb3c4d12a6c66d01bf05ccd325616adc16f013c03c4312a6c66d013f05cc3325616adc16f04dc03c4b12a6c665e1ef03e6d99230356e0b7827609e230953e3b680ab3ce6169ddb1c7c64bb830ff38108178aa834f1f5174df6f3a38c4b29acf61095f6e3b1a6cebfea78cb31c5fedbb8bfc031f65fb2cf6764f4b06734c2ccb3a7e73eeb8e57e58fdd60bfeaceacc90c1a64bfe55cd720bac71a44a69f232db4e62eb171a2a9f63f7dbe7d9d3be72abf04225ea0b2d99364fa9dcd4aece79a8d5b24e17e824b93acb55f75bf719d5900eb4f3233ba78a76ad31213708099b1736d3151b265b214cb4ccf5d120bef64faa519f18fe20b32dceb26f9b3c8f42b1086dbf76afc99d51b17cf7067e5149afd77bb63ba84c0b1be6db93371e5368bfdd957db63bbef4844463233bac6be37fadb447fc1a6d899a45e249299d1adddd7dddf342ae99999b195bf7e1afd6f5b632d1289a699193dedd7a2df27f1d984d204bf18a0d9ff8cee49ce6d9cffebd5da6357f9069b91b16dac8dbae3445fadb05fabf06fcbd69df140b7f83623dffe17ad7f1bb06ee55bd4a61becbfe8a3f8e7377c4cd742d77fb4f35c33cc487e5faaffbf5d5b1bfa8da2db817b7d8d8f7655fba3166df037ddf0ef97fa3aedb69ebfcac06cf7b7d8947ffff3dddf3df667f7cd74277f494cb27ff9e8e0ee92996ddf7727d575e466a6f37f01cc9ed362a5ff0600 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/35313354a85954a4083bc4777e80dd0c.asset.meta b/Assets/SerializedUdonPrograms/35313354a85954a4083bc4777e80dd0c.asset.meta new file mode 100644 index 0000000..67bf513 --- /dev/null +++ b/Assets/SerializedUdonPrograms/35313354a85954a4083bc4777e80dd0c.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 64b944aa389fa7c47b81d40171cbba55 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/360dacfd7d8116a4f83ee743378f5c71.asset b/Assets/SerializedUdonPrograms/360dacfd7d8116a4f83ee743378f5c71.asset new file mode 100644 index 0000000..a44ed30 --- /dev/null +++ b/Assets/SerializedUdonPrograms/360dacfd7d8116a4f83ee743378f5c71.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 360dacfd7d8116a4f83ee743378f5c71 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e7aeb8142d52a0042984e249b096522068d16215da422009a4046902145aea46dddda8bb1b75a3eeeeeeeede5ffbeecccee49edbcc73777b936733c3fba79fb2ecdeee33cf7ce7197f6626de9f797f627dbcbfe6b019ac90f563b359315bce9679ff2af4ae4bbdfffc3bf57c3aabf0ae8bbcbf8bbcdffab09c345ff23f3d63edbcbf277a77956ca5f7e52ab6d0bb9689df67b212efdf13bd6f4bbc3bfeb4d4fbbfc47b2b56c7fb68361bc3a6b1a9ac6d6cab3422e6888f2ae5b3188f57ac81f7f768b6d6fbb54428c503e92f7e6aebfd35d3fba552fcb6d4535abd3797ed25a2b5d4fb6da1f74d052bf7642e10121b8c9cc3c43f987fe920af1de5756befff86f2df5bc87f3790ff86efd795d74e19bebf0df8ae21f83727b421c5f79dfd6bec2cef5a8fb1f8d9e09e7ffb8d7c2fc797175f9c42565779ed26afdda5cc7332d0bfbebc6e9b26bea964f400b23261d6405e73e5b5a7d4f7dc2cc3dfce67143b1fc8e32ccf06fae482b01b82dff9b35e067157e9784e201dcff1d351dcf3f4fb44bedf5b5efbca6b1f29db7ba7f51af9ac9fbc7649a3577fff3b3694256cd60b738b15f27e80bc0e94d73ca9db7952d7f3c0bda92e2a4df3a5cc736518e76b9eabf7f9ef17c8fb02791d1448afc1f2bd0be5fd900cf5c9c4fe944ee7cb302e02f71ec73af353c852e97e4120dd2f90df9eec73acb331101f607f5ab943a5bc0d59c4e3c2403c2ef475a99b9bfc5e5a1d94fc6152ce4552eec5e09ecb3d3d64dceac8ef6e93f7dbb3f4655b870c7edbd197d340b11ee18753afb5ffbcde70966ccbc3d3e8a9d27643206d3748b9e552ae8aff4efe7d4c71d816c8e1df5f12907b7140eec552ae2a23948da7d373a4bc16caeb38791dcbaaf2f1e017e4b3d1f23a468679094b2e03948ea312dfb62d0ec92d551a8d0fa4751719eea56964aaef27c86bc30cdf57ef4c34d07967796d9461988de4759241988d7d5b68f043c01646a49139d9e7db6025d0c193d3709dbc9f22af53e5759ae47f45c00eaec8c00ed2e9325deac2401a78ba346a2eef7791d719c9ba78adbe649d2ead399d6297499997817b7ebd5c3ebf1cdc735d651c1a6d923267c9ebec80ce73e87466bbfadf356d026c2393ef52d9d76e7efc1a0ff0653756f1da3da0dbce09bd1b8c01df2a3d32c90f73258bab028caf923a28b67b06debb02dcf3eb9589f0c4bfbd6f9b28dbea0c9ef36faf04f7fcf73d32d4756f56dd66b99c6b40d8d7c8b065f9dfe464f9ee3c563defe9bee5d7abc1b3aba5bc77e477f359f57a4cbdc7e37615b8e7bfef9561dc8a34fa79e1361d99e2db052cb9fc9990b087faaa4e5928f5b99625e7ad6be5ef3d12dfc4cae5b362ffbe99d2a5447e731de0729dafdf96aa3e2d95d77d98be9e5d0c38c8fce8f50babc2eef4877cb62845582a6f2e09c47bb7849cc6eda4eeaa1c5371ea87bccb9f2d95d77de555c5bb32f1ee3095af54bbbd42ea763d4b2a9bbd1e6fe239bfde207fbf1adcf3f7962564b751edef55015d75e9b93a10775d1990cacef6f3df1daae2bec667dbec7cc96d5340871296da7ed7caab9207d379ff34e9ec85db5cb6ff9a07db7fe9c23d405edb6bc25d9741b8c7cb706f0b19ee812ca94c630727c2d841b57f0e9261fce03f6fa1e27688bc1e2aafa312df56ab77d2e97198ffdda0e303f690eebb54b671a42fb3aacf7294bc1e2daf6381ecadfd6becc6441caadab14780dff8bdb2cbc35952fd9b5297f5f2da344d7c3a80f7f8f51883f8a7faad9ebc4adeb19b58723fee263fcd5bfe9042d6093ea7f6aacf7fa2ff0dcf02e2fe24fff79693e5bdaabb8e9161dc9c60dd42fd768afced1610efc3e5b35bc1b3e3e4b3db12cf843cfedba981f4b926f0fb694086eef7d3810ebadfcf90cfaff5756f2ddb12eccc405c0e0fe87a2b4b2a3bd959d5e32ade81615f17222d55dfeef6405ade2ed3e5de14b2ced1a7e556cfc8fb730369a9ea0795967768d252d603b13b41baf591cf366ad2f72ec0e10ef9db05e01d9816eaf70b815cddef17011d74bf6f484ecb36aa9ebf18494ba83f4ccb4baac735b63110f6f519a4a56ccf3055a6e8ca54d9a615652b977b43067255df60590ab99d03726fcc40ae6c1fb22b53c8bd9ae9f5cd263c65eb6afce96e966cebfcdeb3dbb657a590750dd3da7a3bd50696b65065eb2a0f2a5bbf8755b775d53eba3791fe82057f761fab6eebf7033bb947fe76037807daaafafd462057f7fb4d4007ddef37b3245b6fdf5a3ebf85e96d1dea0f6dfd56562daee21d18f64d19a4e56d01ce8aef032cb9eff6809f3eed957eaa6d70224b5d37deeecb1f315fdecb3c1f7b50cabf19dcf3eb4381701f92e17ee1cbd9fa0b29a789ff9c3719c473f93dbb5386a7dabf1be57bb981f7eef2ef77526df97b02fc5539ad6ce59184bd55c5e56ef01b8cdb2696dc2651e9f22848ab4de0194c2bd5564bc7f57e797d20c0ef6129ef1670cfdf7b28a1ff4e2a2cc5627de2b7966ade4ca56f13a0c7c37a5b11ba82340bdd4652717e84a58e739832e931965c263de6db41c7e129643d2edf999fe29d27e5f529797d42ca7f9c25f7c91e97bf3f2def9f08fc2ebf636a8c83d77bbf003d946cfecdad19c45fb5119e95f29f94dfde06eebdb8753a44bef79c1f269f76117d99f5f2aa7e7f3e20f785849ea373107df8f71390dfa0ae14bfc9f1e5d8532cb9fc78ca8ff7364a2f65d78b586a5b7b515e5f92d73229ef69963c6e2ad33765bf2b5d5829e2157b96258fb1c8f4652fcbfb67e4efb7cbfbe703efab747c45de3f1778ffc5c0fb2adeafcafb1792df67af0139fcfef544dc62ca56de00cf54ffedcd049f1cf95eeca5e4b0d95b2cb9afa8fa832fcbf7ee00df4106eaf73be5fd2b8138bd2aef37827b7e7d2d20f79500abd702725f0fe8fbb6bcbe27afef26e2387a0df806f064ef24cb4c69d3f2dbd81bf29bbbc0bd67d35d1aa490a1be7d535edf9232ee06f75cc6485fdf2eb37059b1b703fcde04cff955c5e91e70cf65a76affbd21df7d3710b777e5b79f64f0ade41e7b3f10b7f77d195d3bfa71eb3a2085acf7e5f583401a2a9be5f23ed4a4eb87203df9fd0752877bc13dd74195f31f32bd6dbf17f8febee4efbb299bfc485e3f0ee8f6114b1e2bfc545e3fc36d927d1ed0fde3c43b55fa7d12d04f85abf4fe44867b3fd0433de7d74f59727da7f492edb7d86781df95be3a5f845479a485bc7ec9b22e63d957405626e342dff8faf554e3c1dfca6b1bf07d1b19afcf59727df4b99faedd37fa32b6957d59f69dbc7e2faf6acce747f9dd972c799ee94bf9fb2886d73b5fa789cf4f321e726c8dfd2caf6dc1776d65785f04e2f1851f8f6d0f91f1506d177555f1f8555e7f238cc7ef2c79dcf20fff7eb49a5ff9334339a9d25cb51bfe3290d1525eff3690f10f909589adb662091bcd36ccff01599984a9fab43f1b84f92f90954998fff9699eb767fa778517a3f76e3795c7a40dc6783900eb227eefbd9b2be7ae723f90cfebca6bfd6439b17a0179dfb2e4b6a22a2752d87a2c963abec27fd2fbae87eadffeedebd84bf6c962aadda57c1252f876a50d4b5dbf66c979ff6b19e63a5f6e2f55a6cb79ea989cb78e3525e410bc7e93783fb6254b8cb1c0779ac9eb77f2f707c0bdd2ab61b28eb1ef0336f1bd1ff7edd6f87af756dc9b237afd1042af9f027afd24afff02192d026c653e89fdc792cbd5ff0818c3b8b444e2d22a4d5c7e04327ef459f6dee4ebd747b6d362b2fc10fec5c1b8423b526584491ce3f2fa73c0c67ff675ebf74ce03d75fd2545baaa7754bafe1660f11bd0bf61725c62bf07eced775f8f3e72fcabaf6a5fb641f4fa35845e7f05f4fa0bd84ed0deda82dfbc2b1705ed4ddcd7545ae8e2d20e894bfb3471f907c8f847a66981af5fbf0df2b96ad32a7b837185f6561379aa43b2feecdf84ac9e4ff8d7fe75e43b722c2ed6496373bf20dfebf22dfc6e1ba6cfb7ca9f06b3559816bf066cf57270efe9deff745f9f01d2266239f2aaea852ec0e66b3a3f774d8e9768bb283eb3103e7f84e083d9d99f40866a6f6e059e759357d8f653f6d61dfc06e60caa7e57fe2ecf22bff7008c74bf2b3ffb6b03cfe53c5bec7f8138c9f65e52dee925bf55ed60f51b6f8b7c20df91fef8dd559ac976c2c04dc9dfa64d43e92b1f53f37c7dc3db4bac1f4b6e0f66683f29db8dd2ef3ed8f6ca3b4286755d202c96262c990ef1184bca47e2de939b2ffd1562b25e8cc735b63310fca64bfbbc34b6918fd886f4cb8fd749b68db82c9be25b247451e55392bd0f4afe0dea1e57659f2e6f0e968c956fd45f3e8b0295aecafe54df506787430361d70561cbb6bbe8f3cbefbaab3508ca3ed3a45b4cf9c76f8fcb8aed20afc399b6af91b28c4b6737a96c14f1891f24e7bf06cd97ef291fc39d52e8a38bfb4896dcd74ed5276b937c8dd703f192be5d71b07628362a608baa8d237dd8e30d03b6a8d2b40148dffae0199ccf0eea027dbb651b22de38842e4d03bac8366a1ccc97c5657d1757edb0ab4038f079aa39f7b1f2dd662cb98c68e6a72b37599e1e4354595e28bf1b93da86626303f29b4bf90f827bfebbc65f31364e5e2726cb481a3b95be8cf11689efabc61fd5b823f0452c94f6101b03bee3f7e3417ce09c6ad87cb133d3fa1b0c9dcf92f2bef05d4cc56d12d3ce2f0fbd2aa41ce9b7afe69f635359d2fc734cf9ed1f2eefa5df795cf5bb543f6fba7c0ec666e22dc133dddc721addb4cf2aa5ccd6013b6cedc77f989c3f1ca6fc1f941d56a4e120df8b83baa32a2c309e5a559683b1c9781bf08c5f551fe12170efe9b6439380dcf6f2bd8741d8fcbab57cfe08b8e7dfc9bc15ef207f3f37200fac1915ef78616eafe64a760984d19125c6bd3d5edbabfe6521f8bd21d0533d5332a00f4825b8f2e7b21f3d6c537298e9d240fbec602943b5872f07f79ca91cffd841cdc5c8351d31b59643d6e771d5f6bc3470ff68c0260f4a632772fd456c6e403fb5d6ea1670cfdf533ef29e8e3babb6c5de816f7302dfe6c8f7e603bb93edc77817204fcd0f1605e4750dc8537d918540de3cf95bb784bc494abfe280bcee0179aa9f500ae4497ffdf8b640de2b4067feceaec0a6543f6437f04cf62f62bb03b925f2ba4742ee18e9c31e9be3dbc08eaa0c54655eba345c1c885f8f40fc543f4657e72c02b60cede8bc80cc5c10af9ee099ae1c4ca3af360e65f2b73bc27f1befc592e68fe3b24f15df8e25e7b1ed7cbe23def119ec5427a0f7c6d4612bb9b17de47d6f9634871f57fdab25401ef015c9383ecadff332700fc215f2d3cd75cbb25aad1389ab7eca63e09e5ffb02db946b2be2fd415acb3e627c80fc5ef9d0a8b27b2078772078975ff35892af90b8f7988f7a27205b7da7fa4c4f807bae97f4eb8c17c8df9f94cf55dd3508e850009ef1ab5aeffc14b8f77418f9816f03a36e43c21ac292dba1430261aa75c54f837b1eb7c5c9efc787c9f79e01f78a3194f36c404e40aff8f6208eaa7ff4601a7b55ebd4f3c13d0f4bae1f19a9cabd4e99c94bd90e546b69d49a1be99f12df8125952771d97fcbb45f24dabe5cae5cef131f1e4817e577f64ef6ba5795b37f86971193fe4ff11d59d2f8b2b8f7d2b150f94fc976886877a72acba5bc985ab3a4da4223a4fce7c03dbfeec492f2655cf53b55fe1cc992da56e2ded36bccd0809c510139a302b6335afefe7ce0bbd1205efcf717fc341da3e66f26b08ce2ad65b1ab0ca3902597e385320e97f9618d9d2fdf57f568609e2c3e2bd906abf2f0ec844e5561cd493c8babf6c32af04cb5975683676acdea7eaccaa6272bbf1f35f600e46ae32aebe3b8ea8f5d0eeebdb88e95fb1f8c535c95bf8c8aebda1071dd8dd56e5ce5dad8f8d8405cc7fa711d27e73fc7a9f6a08ae3fefa3856dd3f1a528f3de4f7e3027a8cf3f5182fe7b3c73f28df3f20a0cfba10cc5558b5c55c853fb1bacdc70e04ef80b1ccaadf0f62c963f7eab96a1b4e62c965b25caf1bdf19c441aefd8f4f00cf26f89c27f649961b9facb1d529e099b49fd821e03ba8b7fafd502043f77b305ebb07e2352d102f35563015c4612a122f7e05659ef8b717d79ddb019df9f3e9d5e315dfa57afc63878177605cd4ef180bf57b30aeeab98aebcc405c657f333e03c4610612af0cec4f6b936a0c662f79556d551587c7c03dfffd4860ff6a3c44ad5fdc338bf08f92d7f981f0770b84af58ad4f843f4dcda5cbf596a2ff1936fc63e4756120fcdd03e12bbb3c2e11fe2eaafc3f565e176411be5a1f591a087f8f40f8b2ec889d98087fa61a6b3c415e4bb208ff247955637372bd744caead8ecf957adc0fee553908fb9d3ad972ad651cd885b01ffe0cacf38f4bdb8befcdf4fd1b90aef179e05d7e9dcf92fb37fcdecbe353df08c856df15b1e4fe4d91d44baee98c2f60fafe0d18e7882f00cff8b59825f76f8a7d1da63ce8a7d3d49b90b04a58727e2f098459ca92fb37a5326e3725bf1f073ef8f1458039bf2e96325e04f73c0cb946355e267fbf07dcd7a9ae737c1f1086ea031f91dade14f3aaf6eb3c96d4f799a27c013a65264f6b63722d6d7c09b03139b7182f073aab7cb514b1b165e0dd65e05d7e5d1eb0b1e53ea35d860764abef56046c6c4520ddf7456c0c8c65c6f705cff8558d833e05ee3d1da677f759eed21a096b65c0c65606c25c15b0b155326ead93df8fc3b6d06ac09c5f5559f022b88736b62660636b0261489de36b4118b22d2dcaf65436a6d69be6837b6063d394bd77ca4c9ed6c6ce90b2f7073626d75cc70f003acbb6697c1d62630782770f04eff2ab6a1b5c04ee3d4633370464abef0e0ed8d8c181743f04b1b143810e878067fc7a58c0c60ef3759821e73f66ae41c23a3c60638707c23c22606347c8b8ad497e3f7e24d04dd513aabf7154c0c654bb41d9d8d1011b3b3a10866a63ad0761281f8463d3d898dac3221fdc031bdb45cd7374ca4c9ed6c6ce94b28f013676a27c06e4c5655b23aef61608dad8f1e0dde3c1bbfc7a42c0c64ef019cda91390adbe536b1f9f00f730dd4f426cec64a0c349e019bf9e12b0b1537c1d66c97507b3df41c23a356063a706c23c2d6063a7f972abe42939a703dd54dd21db8071b5efc28be01edad899011b3b3310864aafb340186a0f8613d2d898f239c807f7c0c66629ffd14e99c94b7e563726fcc227b01256c456b0fec249a517cb7c1b5ef565fa0d7885af8ef098647c275e1eec4ab6d6fbb444b70bee6cb1c7ee4a2fd679da5d70db8b7ebe0abd50fc5de4bd512684be14af16c45dd582e0ca957bff95802d7c2bbde7e3c50ec07c13df32ef977e6cb277e55fcd6703d95cefbf642973bc60cbd92aef6e96f7f70a216fbea776f537d345896ff71bfc668627d3df8d78a9f744015de1dd970b0d678abf570b4d4b84f613bd672bc5dec8cbd82236dabbae11a1558f7b85f76f5d98b32432bd8efa4d89b1e7fed6c72a99c678b1e1daf717b6f87f29521b29c2d1d77b49e6c33abed7edb1d552e2ff18fa850c779c9b28650c14c86249cff2587fe15b37a31ac1f071ac1e43bd7dfbbc07b3829471d193e1c9dd41c42091c2a7ef31a7fff1af76eb5937396af9ac7f3d1eb58e69a2960a2c97972bbcf6c344a16edd3a03b8a241fc311d7ee1fa363342fcfe7b65e2bdf009504f547ec90920dc3f6779a5da745079cef1fef6959b2da2512e940c466baca766918858b98cc614f1158fc80ab658482aa97a3a47ec68bf1fab96d203b85af5456255af8ad345184baeb82eb9787520dc64a2cf2dd886faa913ac41552c1209d65fb4afdaa5306b2c2cd1f0aa235b5f2ae30dffeec78fcf3be1e84f5e7bf1e7d9e5933ffbf5dedba72d9b75ca579fd4d5a75323914ed9848ea5d416ba946a1475c64a5f93a44aa7c655f14aa413ffa367d804b1f5743a6004ebe808368edad6f96fcb859422efddf00cf9946cef60e1a407b8256284e955c010d6d5201cc01136d368c5ea360c68c5154224d7d3254e93daa9b6b3336eee97dc3680a02e6adc2d52d6ba614dbbbe8e9e98bc9f4f4a4ff526677add8649de6f45defb25a269ca9f4ff7241679617379a34408891e68f217a9c972afe1be41b25aaaad04d5eea06f6caa1946bc8186f8006eafad356620cab8606668816786865836dbca349b35c224b73195dc1893dcd65472134c723b53c94d75d986bf2f2643e9b34d621046fd6bb4f7ed622f32ab45cf7a95f7bd6ed0267576699f7176d95a64971ca61b4a0aa711964db6d4a51d7fd841a76430e9b6c693ae1926b8a3a1e0e698b57532b5b6163ac9bce4de261395ebe3825b622a773655b9154639c790726b4c701743c15b6182bb1a0a6e8309ee6628b82d26b8bba1e076bad24de49b7d484bb7d9de337f8877acf8b54cf66fc78b5e70099be63564f661fef8212f4bb0f7557936451cc6b64a6892bae4db36e392af8728f9b8eb17a5b658a9d85e97e43c657a6692e43df024df5a2758f4a39879aba4834e386f50f462d5bb75ff797faa096f820bef8869be9d46f35f16c44369de092b207b9b1690db6092fb984aeeaccbbda2723a9434f7663aa9a4cb1f2a5c7f448b6ba466156678d752a1057fceb5483f19953aaff7ade203c67c44153b96653e35461f0b5ec6341259565f12f51725915d3a63e5560e56020cd094006fe88a97142540172c2b0d34cd4a5d75927956cad3d8d0006e437c1eb791a85aab85d31f0fa79b2ecb8ac6d9feb59a65fd31052eaf54ccbffaf2a6327e12ea7e223b2df12ab3d5d2706679ef54786194c80acf2493f2b5449d828355ccffa3cf0e83447618914176a08c159601baeb2c89b7ccf9ec40b52903de009bc1a67b92e7896cb8af78cc29f9a95b265e2d63fb7b5735951aa6ddbfad4e1bdea7e5cb71d236235ae1827b6082871a0aee89e5f161a6793c57279997367ca99769cba717a6f60ea66a6f8795a8c33525ea3fb170256a6f4cf88e1ae1f7c6c309ef8365851199d8480aabee8b09de4997c7781e2814e3d839deffcbbd2ff8a86991c8fd39a2324c9406395e5e2ff3fec51bef7dc0fbcbbd377cd785307af6c38c62a4a951f4c7d26d9426dd7e09996e0330e1a335c2276c114ef8402ced0a7569c7dfe6f5066f962c96755b726998239c487284dfd02a311e5b2c52ae52a46b0e3bc08bce81de75a5f7768ea807cac56f39e260f00a51d68649d33c4cff313afd1b01fda7030dc384988f955b6335e5562c64b955a013ce1b3ee318d2f0e18b51c2377c0661d826e8b07512b15b235aaeabc4fb3385019454f59b8b6ba8821cacd1abbf18d35ac66ab341c6470eb89755a5f877a289c2c34ecce19b34bcf822b560c34bfdd137bcf8f2b25cb1295714da630dac2158a13a4953a8c6c214aa43b1bc3019cb0b53b2ca0bc3743627863b57d4aacde1396a8690cd739e79839f2fe6db22d82b1763b2051958564de9d85b6c80ccdf5f28c955f2c2944fab2df0d4e64a178ac90c0e5f64097d9e9826f244949a63f9627bacd69eaea9b56fab1baed6de4167b262bcbba2564d768c901085d9eea2335b31303f3883c4af493d3b0b67dc4a51a816cb42d52fba3b8b5dac2b44b559e23de7052ffcbdb758adcfdb4be304efa5823c8f5f91e8f762463e431879d4f1c40c7d385601ccd45400a15ad53b62596896260bfd13320b8dc0d49e6daaf64e98da73346aafab174eed9198f05d35c227d70f277c944e382f98f96a60931ee2684c305fe65badb9c9c76c543f6161a0a7b840f41554ffaf583c59ebfd5dee3d5b2844e408b74de52b1246cb428ced1e1ab6cd43b21d8321986bc876ac4e3037cf3d33119c6236729c4e306f7fedc590f6175f241cbefd351ec33e4f837d4348ec13b06c3edf349b4fc42417994ade1993bcc054f2244cf24253c99375927922166b1291bb4b8549c42998f0128df05921854fc53266a9ae6cda96f1419d4423d5ef3e25c6358abccf568a9227c7abeffd3ab738697c848f7994c94e73987c3e0dd373914e4f7f1d17f788e36d8a223186c6439cc696840a753a867eb106fdf121d1ef82092fd308ff22a4f01918af7d74bcdaa549d762e14895783ad07b1a86e34c4c9b253a6df86d22ddc284330b435aae417a7ea3704867639158aa8b049f47f3f16def219b2a06fc8ae41ab4d5a21a0f8f710ea6c1329d06bc649b5cd530989e65b360570ce9720dd2574222dd0d2b91579896c8bb636aefab2b341b87537b0f4ced0a53b5e7ea24f3564725435a1d7c40207cab634f2c9c555838abb30a672f5d389cd47ea6a4f6c612788d268147360997c0f330e16b35c2d785143e1f13bebf46f8a690c28b30e1076884776c1a4ef8024cf83a8df0e290c21762c20fd4083f3ba4f0624cf8411ae15785145e8219f9c1a6465e8aa97d8846edd65b86537b11a6f6a1a66a2fd648ee2fdc3ba35cfb15f4840cb73c866f4792996f26df5044b7ee2b5df8d89052992e5d780d7d844ea51055f93e98351da9b1a64f4266822598f0a334c2f70c69aae598f0a335c2d78714be1413be5e23bc79b370c2976189798c61622ec704f385f7d5da827d84752e17798c37e74bc4f2ea65e25fcbc416172562e2ba48d87e62c0494d5cf3f5fa39d27a2ba44d977bd6decf7b1a46eb1598d6c7e9b4e633af7c1037d16ef6bb927e3744e75798c37aca5677cf507aed8bd9c0f11a1bb82da4815560913ec1d0062a3582fb0b67ed32d27216f3299f2506eff9fe1aa5c25296d6b0bffc891997c927893299bbe6d0e98a95df2b75c9cddbd62733a46dcdb7256ac4550ed5b65ea50b87dbeca91a9b2d08596eadc6849fa611be5b48e1fb61c24fd7083f22a4f0353ae1bc59c33758326ad6acc5d43e53a3f63f21d5de1f2b24ced2958c3c3ed33cdb9c28caf032d1c7f727cfc2941f0760113a5b13a195cdc345681d16a17374116a222254eafd6716a503b1289dab89d21b21a37410665ae7999ad6c13ac97c85cdf99954112956d81c82f1b840c3a3758b703c0ec592f8425d1273dfd17160f857b9c195c932373149cb5b207e495be23de9cbd41e237d4539bc4cd64be5b2e60a631e8761382ed2e0981c12c7e1188e0d9924620aad8fc0045face3cca333b76ae8d61f65dc2b643bed488cd3251a4e1b42723a0a137ea92e8f86147eb44e38af7d2f6348ed7b39cb66646bbd2e1c9ec3afc824b1534c3c1e8309bed250f0b198155d65689ec76182af36147cbc4e304f7bbed779d0d9940b08e36c7a026685d76aac902f1208638527ea84f39a829f6c6a54539c84a97dbd46ed9c906a9f8c09bf41237c4c48e1a76039f3462c67de9455ce3c1533c79b99a6b4e4ae8ef3bcfff8a02f77a358c4a68b963e77c85e237e59217ac5bcaf19c6764fc3b4b845a745ab2a2d06787ff31e1a9f86f31da1b2d7e1744c875b753ab4943ae47bff2f94f56c89c760a5810667601adca6d3a001480bde0ce43db330a19d8999efed1af36dde3a9cf99e8599ef1d98f9de9995f99e8d157a1b3585de16210bbd7330427769083d1392d0b998f0bb35c2bf0929fc3c4cf83dbab4dd2a9cf0f3b1b4bd174bdbfbb24adb0bb0ec707faaa229af868ba60b312d1e485d340dacc1a2e9224c870753154d053558346dc03478285dd1b4ab082fdcd28e8b31f37d5863beef8434df4b30f37d0433df4d5999efa518b247995943ef328cce631a3a8bdb84a3733946e7718cce1359d1b9028bc4939a483c1832125762e89f32447f15a6f5d31aaddbb50da7f5d518fa6730f4cf6685fe1a2c12cf6922b1316424aec5843faf11fe4648e1d761c25fd008ff27a4f0eb31fc2f62f85fca0aff0d9871becc52546bf9355caddd8869f18a4e8b44b5965783d5da4d980eafea7450d5daa01aacd66ec634784da7414396a8d6c68ab9bdb003aeb76006fcbac6809f6817ce806fc50cf80dcc80dfccca806fc322f196261223db878bc4ed98f0b735c23784147e874e384f2e7e4c8449bd7027a6f5bb1aad9b6f1d4eeb8d3ae17c78e43d66383c7217a6f6fb1ab5878654fb6e0cf607babcc56767537b80cef25e5d217c34178972a7423848fb0bfd8ac5dcfa74e66f7beb2f122ff29efae3e68bc5bd2a378bd80239f33d50cc7cab91f5b5ccdf013147789ef8e71de48859cf62b9edc012f1a452bc550224ebe7d6cba48f009c8d0febc87d0f96401f6a126842c804ba1713fe9146787948e1f76185d1c75861f4495685d1fd58243ed511ea102e120f60c23fd308ef1352f8833ae13cb37e9e49619462e8fa218de0fe62f3b8da7174a8be7d55cd3a3a7ca1e3a57574f892a5737430d71573747818b3a5af74b92da42d3da213ceab88af4dab884d98e46f4c253f8ad50fdf6662ff290acdc774f62ff6372cad15fba7db12f3bb8c2dff7b61f9dba5b07c8aad301fc78ce70753e37902339e1f0d8de7492c9bfea4c9a69b3a86cba64f615affcc344d22beb3c228d1d12a116b7b74abc27244732927a403dfd3981ebfe8f4e01bd38493ff0c26ff57c3d4791613fc9b4e716e3fdcef27e11d512876bb5e26da8fe15a62cf6176f1bbc62e86760a6717cf63c2ffd0d50d2185bf8031fbd330315ec4b4fe4ba3f5f1db84d3fa254cebbfb194563e1c7ebb3bd927374cb45ec642fe4717321f95f04f0eea5f75ac40ffaa1d90a67919b79885f5bb7905d3e07f3a0dda6a35982cfeb5526c17e1f74eb25b24f82aa6cbbf3a5d3a64a84bf57de7c3e8f41a6678ff690cefbacee10cef752cc27c832e93ecf20626386628f84d4c70dc50f05b18e72d629af9cf909cdfc684d7d1083f39279cf0773024750d91bcab13cc4b9f7a99084ed1697b4f2798f797ebc790fe72835836fde5f731ec0d35d817770d87fd032c128db04834ce2a121f629168a289c4552123f11126bca946f82bddc209ff58279cdbdb96314d71ca9713cf60704fa062d1175005792eeb255d42fdbf93979ce4883bbffae923f63ae1bfa822b792958bdd502a195cf3ef0f7ef1d5eb2b58f20211150e1ff4f2abd8d2aae23c4714e6c521dd263fc15834d3b1e0db10c28d05fdd670a2824dacbfdf4f6858ce12cbc67dfdb8cee924e4796f875da6f3296630cd3506d33da4c17c8665a91658966a995596fa1c8b442b4d2426848cc417584ab7d6a5345ff6a41fca9d2b0781f93227de0bf2f7a34a95a6b9297fed255c7dfde1df845d27e780e5c232d4506ff26f2b855dadd4e4a20542c3e560a0d897ad8e830c635f5f62f4b632acccbec204b73114fcb54eb0382e2a66d8efff0633d3761a335dd93d9c997eab13bea578d1ac72ff0ed37a6b8dd675b60da7f5f7582a76d0652e5e74e87b4a4559edb2f103167a475de8fc36d11b0f13ce8f58389d74e13410e1f041bbec42fb094bb06d3409363c6482fd8c9959674333fb05d33a47d75e0fa9f5af580274d125000fd574f9c96f58885d752136ad4a72d3707fc73076d3e5d61ee130fe8109efae11de3aa4f03fb172775bd372f72f4c720f53c97f63927b9a4afe07939c6b2af97f580eee659883ffc5046f6728f83fccec7a6bccae416e38b3633104741f53d0314c725f53c9719d64fe7e3f43d25b6082fb1b0aaea3132ccee7d1246141c824ac8b091fa811be31a4f07a3ae1bc00ced315e47cb7d5e0a10ffa558fdcffac48764b8bc5c7aa311feceae6c866fb4ab954966ffd5952e5c1b57d5247374c55511fc396afc1b62e24b60698f0028df01f420a6f88091fa4ebb4f60a27bc1196e0837509ce9d0b4779373cc9784f6f2d92e0e1266c1a63111ca289e0832123d8048be0505d0479819568732f039b3d868950532ccc61584b7b69566ddf2db170b6d785c3471cfc8397e679b936398f65e723d90c0b7f075df8bcc0e43e997c25587a3df89b152cec8c5073cc9486ebf24aef70a6d4028bee8ebae87602a6a4c6b43229da06862eda5a627a8dd0e9d50698c1444fab44b76ba2714e6e8569b2934e93ce1a83c844a3ec4ca335661a2375edaa3ee14c632b2ce2a3b024d0f7eccd0bd3365834476ba2797adf70d16c8b45b350174d3ee1ba5c8cbff9a37945625adfacc7d70ed3608c4e830e015bd7856e6ef5ed319dc6ea74ea8e587de6ba6567ff5b6386314e63186bfa85338c0e98f0f11ae19b420aef88099fa0ebe5f70f27bc934e38dfd36f62269d80c371c1db6056b1b3ce2a9a2555ce09d797c4c13e61d2ba3316f6245dd8edb415b34e87ec2c2f074bbfc99af47b2364fa75c1a23a056bdf99e3ed8a4568aaae9531205c84bae984f3b1e069553f04a691a6c7b29946ea8e81db056bf927b61328931e8efe697dd92fead916d361864e87b6c04efdf653395bc0b8dbfe123655ce6f66af4b0f4c97993a5dba067459966456930384a6883cb358b46bb2d7b027a6e1ac74b4468959b9a05673987f864ca9d886285c9d978be9325ba74b0ed0259c4ed99538bdb00c3a47d7d91f182e836e8709df5523fcf890c27b63c277d3b552f3c209ef8325daeeba44eb23de0b3640b0430ff854fc6ccd16fbfe28cf423949cc4fac5b117252b52fa6f51e3aad79f4f9a4b3aee91426d47e5842ccd52444bb9009d11f13bea746787948e103b00a642fac02d93bab0a6420962ef3525520036ab402c9c37498afd3614ba0835f7d641f723e167211d6155221cf106f2f172d8f60f1174683024c83055857285804a7d224bb82771066d80b754379f9e10c7b3026bc5823fc8590c28760c24b749d8c8270c28762c24b35c28787143e0c13be48237c7d48e1db6346b6586764ed65e1db3754c511c6c076c0225ba689ecbd21233b1c13be8f46f88690c277c4842fd1086f3e289cf01198f0728df0c92185ef84d9c052ac273bb5c686b34662115ba689d88a90111b85456cb92e62dc53050ed84c0bb955ce682cb415d868bd6e9888879a5dd95c8885bfaf2e7cc6342c53481f8349afd049e73ff82dc4fe5978328dc58ca2526314c543c219c5384cf84a5d151652f8788cd2aa4c469b52209980095e6d28782286633f0d8ecb42e2d81913be46233c776838e19330e16b75454748e19331e1fb6b846f0c297c0a969807e8f2d24a96d9895c667b30f86b85e625edea60f78e0c53b1245aa749a2274226d1342c890ed42511df8ea6faa6186122331debd41d8475ea0eceaa53b70b16af4374f1e2b544ff50f19881c93f54273fe102bb3d30e3ec27e66762a11fa60bbd13d30d80f0f5d4ab3dc39c29873a7826d2197118bd66617a1daed34bb4ed0d439c8d658e237455e88ee132c71c9d703ef47e64ccd0176c579d64fefe51995473295cb676c3041f6d2878774cf07a43c17b60828f31143c17338d6335a6d1717838d3d813d3fa3843adf7d209e6ef1f9f89e02f71c17b63384ed08dd585c4310fc371a2218ef9188e930c711461384ed675c043e25880e138c510c7420cc7a986388a311ca769703409598e9660384e37c4518ae138c310c722ac223b5357917561fa933374952e3f39630e2b64397208293b2fd0c558729da549ae374226571916f9b3b15a5cd7a80e139d7db010cfd185d886e95aa15344635b4ddc247e09d7b25a826972ae4e132e817bba84ed8c966b42e9dfd1bb8df143a7a33a80719677c78f990b7ff8e27931be7a3b1986c8a6b10003b113d0f931be0062ab6a314b153eb6bfcf525dfaf0db0b627cf959b24a3b4f39b4fef91d9f8d574b9aba78d22cc30ce0429d01f025406a14ab54ccc3ac94910adba45f8ee5e88b740dd9d1e172f40a2c521b7491e229c5f7625a2c3bbeaa502ba97232c9fa183f4c8f8b757a3443e12e93bd86306157e8f25ca7a8f39cef5d5191459ebb24c617552523ea87e4b84b911c972a742cc755eab86dc3b9cd8b909bff9e5fb6cff424968b8a751af0caaccc82e96531be9a33d08f937ff4642f1764bb558b79b6faa1871462c5c1159ae260e8d870c5c12a2c1b5e9949b329451e5bad13ccebb5ab3211cceb0944f07e3ac17c2af8ea4c047f8f6bbc06e37c8d8673f771e138afc5385f8b35265633ff24b530d0f7c742b90e6baea9bdacb3755e3e008376bd06dad9e3c3415b8745e7065d74f8086162d149f2666bd939451e88857f23d6164df8cf61bea6d9b9661c846972934e13e81462ea34743016f2cdba90a1875e2a0db29bee3b04d3e5166ca455f97726ec22fb3438140bfdd6542d161ebacacad9877d1816f66dd828afa29fc96a85ecf53a1ccbfeb7ebb2ffcee1b2ff11d858c11d86630547eada317ce94e8c1f8d6ec31ec573655ba5e6766bbd53c74cdbaed928da357c4285565facbd7314665377696caadda4703675346653771bdad47a9d606e53f764227823dede3906c371af2e8b85c4712c86e33e431cc76138ee37c4713c86e3019d754c0e87e3040cc78386384ec4703c6488e324ac6278585731f02d98e7b2e1a2d5572eb2e48eac9b9755477b81e47b5f16b011dedd0cefbf69deffc3597ff0e6082f8bfb1dfdb9e0a45a7fd3b23055c6c998c68fe834eea8d57880f7df50f1f7004f2f7fc8b1bab661b43a051b4cdaa4194c6a31e7d4255d8f5857116630e9542cda8fa66ac1e907932a4345ed345dc83c133c16ab7e4ae17fde9f6ac2539c52783ac6ed710db7e1dffdf8f179271cfd49186e6760013ca109605db30523ce69fb65af30019c8905f0a42680838e19122bed7c69c330019ca50b804f1d3f15339c3a3e1b93fcb4a9e47330c9cf984a3e17b3c66735d6c8ff84b1c6f3b04cf69ce168c6f9188fe74d795c80497ec154f28598e4174d255f84497ec954f2064cf2cba6922fc624bf622af912cce85e3534ba4b31955f3355f9329d643e81f17a262ab7c2055f8ea9fc86a9ca576094df34a47c25a6f25ba62a5f85497edb54f2d598e4774c255f83497ed754f2b598cdbd676873d7612abf6faaf2f598cd7d6068733760823f34147c2356bb7e5403b5eb4d18e88f4d41df8cf5bb3e31ec77dd824d167c6a3859702b96829f19a6e06d98e0cf0d05df8ea5de17a6a97707967a5f1aa6de9d58ea7d65987a1b31c85f1b42be0b13fc8da1e0bbb1d4fbd634f5eec152ef3bc3d4bb174bbdef0d53ef3e0cf20f8690efc704ff6828f8012cf57e324dbd077592f9dcc3cf99a8dc0317fc10a6f22fa62a3fac93cc9759fe9a89ca27e1821fc192ef37c3e4db8409fedd50f0a35816f9c3308b3c86a5de9fa6a9f738c6e22f43164f6082ff3614fc24c6e21f53164f6192ff672af9690cc6bf86309ec104ff6728f859ac79cfe266cdfbe7308d6399084ea1f1f398c671438d5fc034dec250e317318deb186afc1226b8aea1e0973114f50c51bc82695cdf50e357b11e5483b8790fea350c4743431caf63381a19e278032be21ac70d8bb83731d04d6a00f45b98da4d4dd57e1b537bcb1a50fb1d4ced66a66abf8b496e6e2af93d0c488b1a00f23ea6764b53b53fc024b73295fc2196c95b1b66f28f30c15b190afe1813dcc650f02798e0b686823fc504b73314fc1926b8bda1e0cf317bdbdad4debec024773095fc2506a3a3218caf30953b99aafc3526791b53c9df60e3249d338191629ce45b8c728e21e5ef7482f9cea85d32119c621fd8ef31c85d4d21ff8041ee6608f9474ce5eea62aff8451ded690f2cf98ca3d4c55fe05a3dcd390f2af98e05c43c1bf61907b1942fe1d83bc9d29e43f3016bd0d59fc8909ee6328f82f0c725f43c87f631af733d4f81f2cf5fa9ba6deff3016030c59fc8b95f6030d4bfbff30c1798682f9008e5670bea1e0984e304fbd02d3d48beb24f3f707191adc1698ca834d55aea393cc0d6e88a1c1d5c5926fa861f2d5c3200f33845c5f2798cf696c9f89e014731a0db0d4dbc134f51a62a937dc30f51a6190773484dc18833cc21072130cf24ea6909b6290471a42de12537994a9cacd30c9a34d2537d749e6b3688599c048318bd6022b2fc61896172d31c1630d05b7d209e6b368e332119c6216ad35967ae34d536f2b8cc50443166d3016130d59b4c504ef6c28b81d06799229e4f618e4c98690b7d609e6439e536a60c8b303c663aa298f8e188f69863c3a6165d174c3b2681b8cc52ea62c3a632acf30543907133cd3507017ac2530cbb025d015d378b6a1c6dd308de7186adc1dd37857438db7c534decd50e31e98c6bb1b6adc13cbd37b18e6e95cacbc9f6b58def7d209e653957b1a4e556e8715167b991616bd31c87b1b42ee83b19867c8a2af4e305f6f383f13c129d61bf6c30417190aeeaf13cc6f17c4ab2fc3527faa055017473200abb417d640a53d10135e5c03c2f330c32e3135ec7cacbc2b352cef0a7482f95ace4599084eb1fbcb204cf06243c18331c865a6908760ddd67d0cbbad4331959798aa3c0ccb8ce5359419b7d705c0ed6969264c52ecd6b80356542f332caa8763a9b8dc301577c4527185692a8ed048ee9fe3ddc666b3dad9ae4b6d13116e6bae7d758463010e62eb8a8a38dfbaa27db5d865a203b61dc54e58d15e590345fb482cf1579a26fe284ced5535a0f6684cf8ea1a105e8831d9cf94c9184cf21a53c96331c96b4d258fc324ef6f2a793c26f90053c91330c9eb4c254fc41a2c071a365876c6543ec854e54958c571b061c53119637188218b2998e0430d054fc5201f660a791a06f97043c8d331164718b2d805137ca4a1e01918e4a34c21cfc4201f6d087916d6685b6fd8689b8df5168e31ec2dccc146478e351c1dd915eb5f1f67d8bfde0d137cbca1e0dd31c127180ade03137ca2a1e0b998b99d64686e7b62dda6936ba8dbb41786e41443247b630dba536ba041370f137e5a0d089f8f1577a79b16774558097d866109bd002b95ce342c95166282cf32145c8c413edb14720956a79c6358a794622a9f6baaf2225db7ba8b771b9bc1a2eb568ff2dee2fb75aecd66cffe8c3bd4e78b0e759b6af14a1d3ad6955e8c150417d44041508625f885a609be0f36587591e160d512acbed85043f54539565f5c6c585f2cc552f2921a48c96598f04b6b40f872cc4c2e33359315587d71b9617db12f56ac5f6158ac576082af34145c8941beca14f24aacbeb8dab0be5885a97c8da9caab7592797d716d4694e3a8e0fdb07c725d0de49335188feb4d79acc58ad31b0c8bd3fdb1e2f4c61a2a4e0fc08ad39b0c8bd375584ade5c0329792026fc961a107e106626b79a9ac9c158717a9b61717a0856eadd6e58ea1d8a09bec350f06118e43b4d211f8e15a71b0d8bd3233095ef3255f948ac38bddbb0383d0acb27f7d4403e391ae371af298ff558717a9f61717a0c569cde5f43c5e9b15871fa8061717a1c96920fd6404a1e8f097fa806849f8099c9c3a6667222569c3e62589c9e84957a9b0c4bbd9331c18f1a0a3e0583fc9829e453b1e2f471c3e2f4344ce5274c553e1d2b4e9f342c4ecfc0f2c95335904fcec4783c6dcae32cac387dc6b0383d1b1b757e36aed9007e8cb89dc10ad94c36864d62a3997faafd54c60fcdd94f0cb62c911e0dfdc456f113bddfa779bff00337fc235df48771e80ef6e66fc3011e3ef0b45c0c51f1438cc20c819f83c5f2395d2c8faa8ae56c562c06bdfc01b2a5e2df13c5d0198f4da9f7893f4036b1eacdc4b14a33442cf8d6f8abc5dbfd647c4ac49185855e503c5e5c6e32bde48399c2e981499ac5f8313a8bc4afc94ca10f4a90f71c4f4ed85322cfc5483f8fd9130cd18f133ff3c1a7c58f099ae7d9468548733fb6b3e42156416d13dfe2cf6bca9ecec362f9822e962302b184ccfd788e1329b654c431a865720ac15f52e515f85598989d8fc5ec455dcc76ca28fd467936542c0fdb5a5e232997f8254cdc2ec0e2f6922e6e8303719b225267b18c19bf5b536b31b9108bc9cbba981c1f717996f8660ce3879bf101797edcdd387994170f21732b87ecf058f0ba6415e343feb0d4e3131c3557b65d84517f45477d54467963b2a0516945a9b6018bdfabbaf84d26b42afe745f110c8f953f1d9538a8af082d49b249d58bb158bfa68bf58e29638d6b3a43c4851f31b652c651d5c6fce94249a87abec83e352fc1e2f5ba2e5ebb876ed9cd14bf24b7ed7412fc67d3abca810aaf3ee0538d262dc16cd2f9528cc71b3a1e9322a9b3a96bf3cbb038bf89b553c2d980b2617e98fd422108a673588b0813b3cbb198bda58bd9f648cc668bfc592edb26fe54b7eab5cc91b9b8b85a6ad0f451aec062f4b62e46e3084b5f95aafe31e60b987fbc7acdc5f44a2ca6efe8623a9c61473eea4a8ae4181489677eec38930922952b446f881f86bbb60663751516ab7733e91324870b5b08b3452a5478eff27cb82845ed972ca3e662763516b3f774312b4c5b7266d62bc0cbd0547dd66c4bca6bb038beaf8b6309718b7aa5573a72779b45b2c53c47584059556eac993e6236b5e8b518a70f749c66d75acf233521730ed7611c3ed471188d9661bc87b4c07b49e58dc922d553d7387a49359dd2d76331fc4817c3892163b8abb0e865488ad4467c6fc0e2fbb12ebe33082dbb328bfab72608dc8811f8a4a6ea65bf6c1b056a65fa58dd84c5ea535dacc687b4e3b1c2e570b96cedd6b60ddf8cc5f5336c84226c0a8e136f54b7c660f99ab9dc30f1bb058bdfe7baf8ed60d0725c296ade655efc4a653f0f8fd5ac6aef8689d3ad589cbe08976641fb1c25c61378a992ae97425b53de86c5efcb4c6604b0d6e358313e5424fb6ed5dbf1d9b51eb36f23df8ec5f22b2c15c3f48cfd988f972dc3c4af7c5e27751bb8a6dac77760f1fb5a17bfee2cf5d8e72c8f32859677625a7e937a04334c2acccc2a152873d8462cd6dfea62dd172d4166552d0880256169d5a83d6fe1acd2b6aeb39bc5b80bd3fb3b9ddec3d2960c13c50c281f632df74af60a2f6e7c5143fad2a1a6ca80bbb1f87c8ff50952e711dee79f2edac9959a9652263326bc7d595a8331bc078be10f998c04e86740260adb4b5d9a47390b722f16c71fb171b84ceaab4c6219759d751f16d39f74319d90516a06e7b3fc7ca8e25d9be97a3f16db9f75b1dd2d6dbad28eff53cf0c3c80d1f84547630f46d7db55ad9aecc7bb705a61883c8811f9159b51d0d7a26a31dd7271c7e35d5b3d8b87b018fd868dd5a5efa56652a665d2d70ddf1fce3ee73f8c71f85dc761bb101c549a2e932da49aca9d8f601affa1d3b847dab22a314f57229e723f969a69c36dc234fd53a7e990146dcfa0a5276bbe42940889b15d8afcf2281697bf74711984c6c56ca4c8bc3ff018168fbfb199ee7025995f6257ffb5baf7c22cefdf2b64bec8348cc422de30717e1c8bf33fba386f1bc8318930a9f3cb13989effd3e99917d0135a4a50e7f152e74c5b52d9d6934f6231f85717833d6bb9e5002d30d31684fa260c95a7302aff6532fbab420c33c295881996e36aa6f67c1a8b19db2283fe50d8b683798b38fb983e83c534a68b69306f160a9bf5ed732518e7f26d7c302b0855ee27be0a138367b118c47531d07b28f230c3d8218c1ff6bca652e8392c7e5be8e237396dbb68a617433f5e411d0b45ffb52245a991f8769a1865f2bd18527bb66657b73d8fc5ba8e2ed6e9c695fc549de9bdbc80f97d9185acb63db35fc0625837939ca7279c5dad986d8bfd452c06f57431189ea6fdc1f52bf67e59e3d956f5f1bbc4db61cb133c5dea7bffc5627cadd258f1a63ff6b85c90e02dbbfe5d793938a0aa36ef57554bf74baad113cf79e84b3d8d784e9f55551ff38d59524ba8bf857f0eb7f8d333c661af94955aac9405b77c2914f2cb65ac551eec27d2ddf74be59bd8f4f35a7265e22bb56d4dba58e85a26fd40db04c62e7d9cf64276778dc5eacb1829591ee96e9cf4e616d3063c55bbc9548df7e71344b1de595a537a2d1a6ee1673c9d0db5ad4616e6799deebe80a9b28f1fe3cbf478f61a20336a99480ee5f25d923e3c984f75e1f51502544b2eadb8d92073ebc4b51746e6bbdb55307f78b6632e63f5ebc607f074684409ab9580c5d364ba081cf7907701db3b7512d81a5362e39b458f111d9b151e38dfd14d353b3080954e20e4876f2b844d281136f76e543f7e8298d9e5028a44eb9cfb534d634b9c0076538304b0a694c05a8372ad723300d7bc7102dc9694e05a6ac07181cbbc8ff8fced2af1b4d80968f359025a33ea5a54654fbfebecef30e837712a9c80b5ae67025673eaac995c968df3fe2e939ea1ca9bc6cfa22e80cb6d9200d782121cdf2392bb85645a87ba00ef745083b6a484d718946bd392c6635dc0f443c704a65694981a024c89491e1710edd93681a83525a27a0251a55365549da609385b51c2e13bf14cabea20a9894edfbd648628f45731be548217f3d3e5d0a90b005fe99400d88612600396dc21e773bf2e00baac6502505b4a402d92da5a1572c4c25fb0eb5689f545b704b276d485fa34315b99d87bc68d16fcf920dbb58f2adba9e55c2e005ad13a01686b4a405b836c3796ad11b15e55d5d4e49e91c5a2213a435858b1b0b7722f401720f23f0a6207ea8ca8204ef15ee3c8dca8ff1a80de61474a445e864fb22f3ecaca57b7f3126b95ec23badde5690dc65d3b51a26c2a8b7d9525d7ca76d86c3184e302aa8da0f8df26aa3109dec5863e3aaa9bed527bff8ffa09709da9c7242038b81c769418a5e053b08985bf2ec05b07c65a7328e135018d8e849fa5ef61e902a8f5a0cddf85125423a626dec6307f1b2ddeca77a371f103a839bb52cf114d1165d492c02e4763bcd72b44482e00e3c74d2960dd28816d1528bbe630bea1ce7eda7970374aaed37b24d075a72eb9785674d56560565e02d4b6d14e7624bbff163bd6b0280713b83de8e7211345becb2dfe27ea26a0f5a49e87e42dfe44dfb2502e5d5ce44c19f6474102562e75d61c2b5c4d5689c013fbfe25f681acf4f09579e1b900ee136065bda29aed76d535803b7f2a58dbd13ba2f83e63cb8518b7472f86032beb4d3d9334c38356c832df42d70580eb45d7bc7edd80f0e05a93ec7d64c351c7bd799b317f246e8578ba52365692bc7bf9d233eb34ef03bd7373b31eb8ce4d5bcee566ec2c951bda7723374bafc9dc8cba81b986c3acb9215c6173431581b91937fc724355e0b9599527b9a106067343b5f6733372eacc0de5c9981b7a3c4ea733ee8e955bcdf92137e52056ae763a3b573bdb968bf89ee4a670ddc945a63673d38c7de766e5a7909be1dc736ec891855c645e28b904d2f915e6a22363b9693dfb735376e273d3f625128b6cf48b6306f045367dff3f5fff3280d743fd3884b32505bfe5d49f7a2090a77c3e1b24aefeb2275eabf976ce5f0b84d9b15a98c9c76aab16912ef486496da6ad33895036eda6a381a7e000ea866732b6d4fb0d0ef4a24186734b2a9cd7019c036dc299e724ceb700ce3c9b70e63b89f3478033df269c054ee26c0da6540a6cc239c8499c8500e7209b700e76126731c039d8269c439cc47934c039248a76266f006d3eedcc775902dfd028ac71116a8f50fd796c9897bdc97036a1c299036af26136e11cea24cefa00e7f636e11ce424cedb4066dfc1269c054ee23c17e01c6e13ce214ee2fc1ce0dcd1269c839dc4f91cc039c2269c039dc4b92bc0b9934d38f39dc47920c039d2269c794ee2dc07e01c45ed019faa53999cd107d1a16c4185723fd0a11c4ded90cb512e94333fc19d327dd5fd5d180be840d6a502792668bc17da02927088830ce41900e4185b40e63908126ebf31d61690031d04790a0039ce1690031c04b914801c4fbdd054f94764eae1c3dfaf10efba372c3c113488265082ed21c1967b2ff1c6d002ef21771ce138970bb79a79815dd4d575b4e64dc27a9e6c08f944d0609a4889ba33833e3e997b17ba6cc73d811def5c9b0d7b288eb4d2aa4f85f21250d64ea244d94ca21c1cfd3c510f2a7807033b9c1c05bca1d1c323cbc41b01bc2994f0daa6692e256762d25177b26c5c0f64e3a936c11ce220cc4600e6349b60123684c860fe0ab2f9749b60120ec391c1fc0dc0dcc5269884031f64307f003067d8049370388e0ce68f00e64c9b60120e8090c1fc02c09c65134c177b38df0398b36d8239d441984d40d3688e4d30873908b32980b92b25cced58f2705c3953ab24a77bfff383974ac090dc4c36864d62a3c53ac012f90cbe37cad3aa8c7668b91515f25e60586e37faedaa168b8587fe42c8454c730c8003fdf426a0fcdcbd3607db928f0323b4bec3a9507e0732fc1e94283b0632bc3f79e14f714cf4b2f7e635f1b627c8d47329b1f6ac568e160961e3e4205c8976fa02afb65c6c9bbe006c78cf6896b0e6453feaf93d15befd00bebda2284d336b40b96889dd41c5b477149698c786446f895f52e15b082c711e25be6d34f57aa6c7dd935ae64954681f0668e74759cf97794a248e654dd57c22ace7c99a4f25a09e2fa22e3b47893d7196cb9d40f8f1b17c2e7d99dc1d48ed8fe2ef3ae35ea3be0e283b17d0efe1c8ed6d9e78c0032f122d51fe3482f293acfa390e205c1805c2219b1dc24701c2624a84ad58c249465d47f9650a73dda9eb1100b1c4a6a5d3a44b5ac870de0deaee529b7092aec120c3f93ec0b9c8269ca42b84c870fe03702eb60927a9db0c19ce6d408bb2cc269ca44ba9c9708e0338f7b10927e96255329ccb01ce2536e1245d4a4d86f33480b39c12670b8193ef14587dd344f4cc59077cdaf9ba130570691493bf99cd040d7472306326b0c66536c17471626d1a80b9dc9e95be845e71642b7d1703942b2851761528d36f8d3b8f2d11c8478b7d5b97c800c6896fca59b5a3061ca8885a827274df6876e71ab0194d5c3c04f05544b1ce526d6badb34f97478e18e84c56dab38cca4557aefb00ca9551a0844b56277b75f878b98d79a9f7d19a28ac920ce5e1207bafa26f1841e7ac5aab6ac89aec4d01ccd5514cf2ae14872d54b230eb7b491b4a6468af0668f7a344ab4e7fc04a4f1553d27d3cce8f11615c00da9b6ba2e80765bed726194cb21d8f0a814daeb50926a1af3b19cc9100e6fe36c1245cb94606737b00f3009b6012aea92483094fae5b67134cc2d5be64307702300fb409a68b5beeed08601e64134cc221623298db019807db04937088986e137200f3109b601236dac960f607300fb509266147920c666f00f3304a9839ac7a4732dc923fc2fa9d6cc9dfeb6068eef0da5cb21a9c45272c45c9868cfb015b3dc2269884f53b19cc2100e69151cc03f141e3d560794024dec374ce5b00df5194f8da037cd597fc716189ad215d76c77e1d003d3a0a8ff6016c73f3683f16205c6fcffe08a4e70691c13c08d4dcc7d804d3c54dcd0e06308fb509a68b9b9aad03308fb309a68b9b9a1d08601e6f134c1737355b0b609e60134c173735db1fc03cd126982e2ed75f01609e64134c173735db17c03cd926982e6e6a760880798a4d305df4843b14c03c358a4ee4e0cdae13398a25109e66f780306176271b10ee033c8e4ea7c4db19c59b89575c1e652d4fe615b70b807b46d4bbca640e97b0074f86f60f50b29e19cdb2816101c42e1feabd1bc07756549b4d245cb4a19731b9733619c46340d574367df62e149ff0f8fbdb958ef5ee2bc447b5e6aa4d56ebb70068cfb1676738174794460394e752a2ec00b2ba6e7590af3acff4cbc45397570b7d0da09e17d5749b2a3f2788966862aaad44ecc3b5c469a02300d0f3a3a8cff3c40eaf9b4b7d3e0fd4e717d8b9c91ee1d406d952ea534103fec2a81bf0fa6d210b3d214bbd50978bbb65022de17032d9c2d5f500ed4551ece791f95217179d10b70605c0069b700e7512e77fa03abad8269c839cc4792dc079894d3849cf1722c37932c079a94d38873889f34380f3329b700e7612e70300e7e536e11ce824cee900e71536e1cc7712e77e00e79536e1cc7312e74280f32aea8110dee799eefdcd85e08779cf10aaadf29e130e844ca3023a0c00bd9a12a83a46393ffa6110b2b3062a01bc6ba218eb4cdf5f4f1e04219c22263ba5650ee8a95f6b2354c2f94b32a8b900ea75364225f4912783da1640bdde46a884f3476450db00a837d808957060990c6a2b00f5461ba112b645c9a03e0ac6406fb2112aa10f3d19d47b01d49b6d844ae8b14c06f54e00f5161ba1127adb9141bd0540bd95126a0f963c07ba8055f7a9cbdcfb8eb0a4259b6e3e18545fb751a2ce67d5dd7392d1faf3a14bc5bf131e26a5c2138a2b3b95718788fd44104bc08ef3b358e21458527b1f449508dd5822116e8f62242b331f29bebfb28b8bc54e06c5c71d9438b766d55d7a52f9f6b9bb7bed97c042ef8cc28b0f1b694db65017977fdf06ac736334fece83a31f1824c33701e0bb2b0a479eecb6fe75d113ff0390c9ef8ec232f3d9d0e82d73638c08df71c032efb167bd1de9798574ebed802dde6b134c1737c93802c0bccf26982e6e92b13f8079bf4d305d5cd2b00ec07cc026982ef67b9603980fda04d3c54d325600980fd904d3c54d326603980fdb04d3c54d32e600988fd804d3c54d324e053037d904d3c54d324e03301fa58499f9d931842d4cb2b363168231f9c7a2589218c6edd6c54dd20f073df3c76d03eae216fe4701a04fd806d4c5cdd28f01409fb40da88bdeccc703a04fd9bdd91061894ab6d9d06500efd394789b4abcfe2190e5623cde975d46b91d465d2a700c34919ea9cd89b4c81c6fc996743705cda467edddf08ab4294f3617341dc07dce66b8849d4e32b85300dce76d864bd83625835b0fc07dc166b82eee831707705fb419ae8bbe785d00dc976c86ebe2b9c68d00dc976d864b388d4706775b00f7159be1120e0792c1ed06e0be6a335c177d9e2603b8afd90c97d089870cee4400f7f528f7325b095cc227b23181aeaf1f91c162db38c202816c0ce11880f58da8f7320bb3d3b37b167b0f18d77a33aadd20a7086b5d1258e030c6fbac4284e8f26e905d5802e85b76ecbb378b710f533e075b2ac42d65a4cb79c9b648e80a8a81b7a371d71d18401c81bb2ed92ceb6a90d5dfb1b7147571f0f06f80f65d4ab45bb254b3039574e81a51a18b83f2f2bd28e607307f14f78f46ef0050be1f45f9c8db939bcf39b4bb017c1fd8517317b2ea3be6125a26d98eb9db839afbc328d67b629380d58f9b76f1c0e9ab4175f3914d38f39cc4f914c0f9b14d38497da5e80e1800383fb10967819338b70465e7a736e11ce424ce1d01cecf6cc239d8499c3300cecf6dc239c4499c87019c5f50e2ecc6aaefe43096ad61dc3f6a1553fb914ef33e2f66dc776f8600cb0f6be1e82319a26b4105990f0328c85f4661b3999fdf40383a4fd7ed04f5fd5736e11cea24ce3a00e7d736e11ce424ceeb4066ffc6269c054ee23c13e0fcd6269c439cc4f911c0f99d4d38073b89f36180f37b9b70923ae290e1dc05e0fcc1269cf94ee25c0b70fe6813ce3c277116039c3fd5e6ca92e48c4ee81446d6233a10743b7f8eca0b841f83b1d223b1c2536619536731f279cc2221de652f9012609bbfd8b5c1a58b3b409c04fa44bfdab31ba38bdbbc5c0f50fe16c5fe0f03e424b17fe2cd023144a75e8a68ca980c6619c8e6bf53c26c06606e2e1b5b8e01f0feb077634b173de86f0568ffb4679397c14eeecc980b4accbf6c82e9e2ce8c7d00ccbf6d82e9e2ce8c3d00cc7f6c82e9e2ce8c3d01ccffd904d3c59d19bb0398ffda04d3c526fbb600e67f36c1747167c6ce0026ab63114c17fbe55d00cc984d305ddc99b12f8019b709a68b3b330e0430b7a084a97ae64336a39ef91d2c01af0e25bcc4891df3183f0789fb1a9547352a44d6fbde02d85e5d4a7ce1b6bc226c47926d79f51b40592f8a6c3c2cfa6c4c66870f826c5c3f8a6c9c571b2772932d5ad90bd85e037bb231616d4c968d2781f9c586f44d9bc5620b4afe29b73e2eaad8bb5be57db8502a54eadd950b4756f7e6161b836cdd8812a6d93a5e17b752bb0364f9c65164f9cc9ae02e8e000d0456da246a2bcd7c1f0442b464fb207402a569d3283a8ac9c73d2e170af3231ecbc5646e24073d9265f99f819d6e490933b8654f5995cb8bbf781aaff109c72cc96afcc3818d36a3c41a7ec52f61038aacce7f0c544ccd6dc299e724ce2f00ce1636e1cc7712670390d95bda84b3c0499c8301ce5636e11ce424ce9d01ced636e1241d5927c3b906e0dc2a8a51a5fcda185b276b6f1e0baa9e365134de337365cd7372ca8c015b6c6b134c17a7ccea0298ed6c82e9a2d3e0bf209bb7b709a68b4e83ff01985bdb04d345a7c12f01cc0e36c174d169f05b00b3a34d305d1c32fe14c0ec64134c179d063f0330b7b109a68b4e831f03989d6d82e9a2d3e02700660e254cdd0904fa99a1f1f293e4717742b83da8e036068df82e36c3252c06c8e0d60770bbda349244ba4a8d6c24e926501074b3092769c39e0ce73b0067779b7092eed64186f36780735b9b70926e1c4586b31d283b7bd88493745b33329c6300ce9e36e1245d494986b314e0ccb50927e9b66664384f00387b51e26c29710e62f3c4031e7891f055727d6b892b5902e1769408d54eb0e91bf2dcf52bf93482519e500e98ef074b387fb43146351907ecb4b70b9009bba46490770590fbb80099b06b4a06b91f80dcd705c88463aa6490770790fbb900997016800cf26e00727f172013ce5b9141de0b401ee00264c2563019e43d00e4812e4026f40d20837c00809ce70264426f1632c8e500723e25e4705bad12160a645bad2e03280b28517662c9eb4d4ae4e91ed3983ad303474bd8022603fb1e18af1d4409362700b65cac365d29c424d69ba69ab775710afc198077b03d4500a1a32599a51e078a802151a05cc8f4ab4c239b91255b66d60958e5504a945d04ca89de4b3304307ee0ee6af97922e3cf634b04f0d1defd42efdffeefe3bc2bdfd7a4d8c191dc862c01781825e0c456308302d9dfe551dcf1c03eb7afcd52d3fd0ae83c8072074a94add3a05431251d8d253b057e10a87c8647d14c8218fddd2366b2316c922823f946f9feb3e9a219b556b44b47791a94d10eacb4a2b2d2978095ee4889576d7b00d7e6f3ea698ea86cf613aa970932fea90afbcb56a9bb672afc0daaa21151a0cd6ebf70c21629d9a2b46ec06a778aa26cc55aa489b295b08a222b5bcb01c69194189b7a37d3a5a7803a5361a2b04c5ea2ba97b59b83ac3d2a0afb1b506583c5b294e4ff8ec867800ce32680713425462e80031b23022e6115a09a29aac23943fcca37da22ac6e6650c1dc01c02caccda67b644ee964bdf49f40b938260a9403520ccbb9ed16f406b0cab19428956755c166e759b50c201c17c5083cb7c6b1a2b9b34a2831d9fb64a1282fa7790df565a2fcac146dcd154e37d08703b0e3a3182bcaab8df390c81ae1bb8352720225bee04e647ef9e87722277a75ba6ebc7db0280808fd49ea52615d02063c26d6e6687bf2109c8bebf0a7810cbe33254ab51b7341f4d99b6edf1c006f5214a523dfca7a35d860d0ed4dd5ff05f82653e20b7b78ee30ca2639d9e1b9ad416533c5269c439dc4f93bb0cea936e11ce424ceab00ce6936e12c7012e70900e7749b700e7112e7db00e72e36e1243d448a0ce7bd00e70c9b700e7412e7648073a64d38f39dc4b90ae09c65134ed2cd5fc87016019cb3a3e805e5d7462f886e2f5b806f4e34f86aa10f4ee6c77e24e8f5ec1a4566c6b272f50d5c08c783c8acf1018073379b70926e734986f3038073779b70e63b893306067ef7b00967819338b70338e7da8473909338c7039c7bda8473b093382b01cebd6cc239c4499c67029c7b53e26c200494784d74df8b884b26c345b6a2a71e4be09a4789ab27ab3ec798ec9c5ac8f8e2d3a5e2dfdce9609510395600e6d19a25a845b01060672ad88301ecf951f481068afef6e6b224e51d80af88125fb8857c84831964d97e1e282517d88292745c880ce51900e5c22832755e6d1cf54c76567129e83a1653e2536e81dcf16a3ce31e43dc9b6d91f01e8ae42048b226cf89a05c2ca9cdcc0cc5916eab4656c5dc05acb19412e5568caf83e00d9b62f9d14c8679a3573a582a360036b9881264e66b1e09973791adcb3909542e8b29316e2930f2e6f542ed41b9eeb95db50516584689ce64d11d6993870ced74504aee632b5ad2863919dacb81d52ea144db9685f1f9cd77f228b35700cc729b60bae842fd2a80b9d426982e1e65f61280b9cc26982e1e65f63280b9dc26982e1e65f63480b9c226982e1e65f62c80b9af4d305ddc46e76e00b3c226982e1e65f614805969134c17478d3e063057da04d3c5c39c3f013057d9317244588f938d1ccd062347ab2931b667e17dd30933399d773a18f4d8cf36a084199d0ce85400748d6d40093b956440c701a06b6d034ad8b124033a1100dddf36a084037264407706400fb00d28e1a01c19d04900e83adb80127632c980ee08801e681b5017974d8d00400fb20d2861c39e0ce84800f460db80120ed291011d0b801e4209348799ee2b4c58e793ed2bfc0ac07ba83d8323439d9cd12c03300fb309a68b339afb009887db04d3c519cd5900e61136c174714673118079a44d305d9cd19c01601e65134c17673467029847db04d3c519cd6900e67a9b60ba38a3b90b80798c4d305d9cd15c02601e6b134c176734970198c751c2dc8a65b2d8cadf1097b0bc24db10771898d33c9e12e4361a90997b1e1336dfc9fc8e7f00367a0225da2e1ab4fec22b0e6f19db59acfb5d9172a4c9c58165ce53013e316adbd59ff63b8b5588a5fe95ac54885bca4837773e890a6d0f502c9c448936dc3ed92ef6e207012b3d9912656231ebe080b5babcd5f302508a9e42892ffc56cf2e7a886c07709e6a134ed2762819cec600e76936e11ce424cebb405979ba4d380b9cc47919c079864d38873889f32780f34c9b700e7612e76b00e75936e174d3f7731ec079b64d38497de6c9701e09709e6313ce3c27712e0538cfb5a3af5ec8968b6191e5e28ebf4dba2c816cbb9fb5a0af7e1e255a7ea30e9a75af23d90c58e0f93665e8614efaccb5013d9f0b6cc2493aa34e86f30f609d17da8473909338af01382fb209678193384f023837d88473889338df07382fb609e7602771de0f705e62134e37bde1a7009c97da849374f70f329cab01cecb6cc299e724ce0500e7e59438830723730eab185f4c501cc01adce59d702e9d6cc3d34b4173fe0a4aacf01cf431de8389b26f9ed8a5b344aacf57692c134f5dde49f62f60af575282ed11b0d705acba1b4de60e3784364cd6c3cf0703215751a256fb1e0f65f3c403ff2c33beeb7144478a91392b3c01acf5ea282aabccfc3ef8c257175dbb4f05a5ea35518c7aaacc5f29b233afaac6495b2cd13a2e923b7f91ed86fc26407b2d25da741ea02aa6f368976793ed6a73322835afa304196eab7317d718dd0a6cf2fa28b27b769bf812aed224abdbdf0315d30d946833dfc28ad0af932cb31f0232fb8d94189533e210b6399db8fa0fb0c29b28f185df2820cfc91dc0d68012f366db80ba38cf7e00007a8b6d405ddc01ac1800bdd536a02eee00b61800bdcd36a02eee00b61c00bddd36a02eee00b61200bdc336a02e2ed49a0d80de691b501777009b0b806eb40da88bb34a7b03a077d906d4c51dc08a00d0bb29813663ea5cd6cd67cddb589680770f25bc1c66ba7d1aa16d926d9ff63cb0cd7b6b73c4739af7c93edebf16b2958c7471ebe15428ff0750de478952cd170d10931c4542906e74d3ede9b73741c6bf3f8ae1397e06cce6536e1e01acf18128c6dfab979b998cc01396996468bf01681fa444db9d25cf64963378a2b07e25c778f97172794ad853ea4185f94180f9a1a82d38f32d2d08ab2ab22d2d72c0d4c7c35194ad03857fc8e652b6ee0a2cf391281a4d997986b8b879d54c50cb6f8aa279afca525e111507cec8defc5c19cf0696fa68146d52ac791f8449ea0e4e86f31a80f3319b70928e3491e17c03e07cdc269ca4def56438bf07389fb00927e9422f329ccd4023e9499b70922e4324c33912e07cca269ca40bbdc870ce07389fb60927e93244329c47009ccf448133f315f12e4e1b770555d1b336e1243d4a820c670380f3399b700e7212e7ed2c81f3799b70163889f33c80f3059b700e7112e73700e78b36e11cec24cee701ce976cc2e9e69190bb039c2fdb8433df499c87009cafd884d34d77c52500e7ab518ccc633093333aa12b2dd9a2c275a047f41a25cac41c512df82d914d6cbc002cf1754a7ccae98b075c2aec50c95e265f710f5e0cc07b83125e66479aa86cec5e26be11741cdfb405a48b4baccf0520dfb20524a1f30c19c8b701c8b76d014938624906f25500f21d5b40122ec2220339003474deb50524a1571119c8ad01c8f76c0149d88b2103b91300f9be2d205decc30c04203fb00524a19b1619c8d100e487b680245ce44f06721400f9516d0e504071a40d20b24ee215a001f43125cab62c8c17e620ca92920c665b00f3139b6012d6df6430db01989fda04d3c533035b01989fd904d3c55db9b602303fb709a68b15500b00f30b9b60bab83d644b00f34b9b60128e5692c1dc12c0fcca26988463e864309b01985fdb0493b0ff4306b33d80f98d4d305d5c3cb50d80f92d254c3ec738566ca2cb559c288196791f177957fe19193cb2457cdc9558c1fbae367be2c92b7509eb6eb29d0ffe0276f83d254ab5617e62afd7ccd7e912d6e364eb7457021bfd81126c37165c69ee6f2b91d8319b0be4de18a9cb51171b4bcf01ebfd911272f0140d1f285fcecfcbd431da91cec15e9f9d146b5d2aacfdc148e74f5194af99d5f42eb640fb8262e0674a94663b2110a2252b619b032bfd85126d629799019b9197db2a5076fe1a053ebecf6be4f8c88eab9d0ff0fd1665d553e62931076c458eb74709ab1eb2f6e81090a97fa7ee17cd13ddc7c86d926c25e441a0b2f9238a1e7a663394039d1ceef81064f03f6d82e9e270c74700e65f36c17471c2f76500f36f9b60ba38e1fb1a80f98f4d305d9cf07d02c0fc9f4d305d9cf07d1ac0fcd726982e4ef86e0230ffb309a68b13be8f03987c14ca1a982e8e61de0f60c66c82e9e270db2300663c0a98fe88907f9dc8aa9f01ecf299bf3100730b4a98998f5d167a42967aa12e1777fc6dd2f51664a3476781618e3a9468c36fee48d85422b3d4db81a5d6b50927e9d9566438df0538ebd98433df499cbf039cf56dc259e024ce0ea0ec6c60134e52bf62329c6301ce8636e11cec24ce3280b3914d38873889f31480b331254e354bc937bb8ffca45f324fb9ffb104be2651e0cbab0d7c64d63701e06b4a892fdc9e442e6e1eb11464e42d2951f293cfa77b37ab183ff28b8b5ae6bdbed87b7db9e852ee2f1c5fcbc49d7b1659175864334a8c9d596280c3f773e3031c959e3a0b050fee513c8af1031878ffbcc813c0ab9a62a7073cf600709bdb93dd5d5c2c7d14c8ee2da2a878f8ece3e6e3c9310774195b4631f49670cbcefc0030d28a88ac49743dc8e4ada2b0cc7c362c7acb24c37702b0ccd6d4f578aa3252c594d4cfedfc1811c602503e6e458931478331dcd9a884e3eb6467a3be08acb40d25de0e026fa12823578a3666b96808f1f2718900cf012ff4feed8b1ce75d4bbc378a1dccfaad41c9d9d6de4a89b0b94486f63380b61d25da2e02ed0491e96730ee295c221bf3c542945a27544bb64bd6a06a0400b78fa2dac296b4140a8bada0adb62ea5aab62a40b9ba3525c6749b498df23eac1055156dfd1f2702b908d4ff1d6c0149e8f14106723500d9d11690841e7264208f04203bd90292b0834906f27400729b68c6dcf336a30ee69ea08ae91cb5d751e6ed4cc2850364687f056873a2f28e5383c76a243e3136eff66031dfd040c1ec420933fbb5e784a527d9daf3fd41e9d99512abda9002da68fa7e91bbf63a09d86b374ab02d991af79c271ef0c08b04e288a683c9bc8b2f0508bb47313f847522a138d2aa880ce55480725b4a945d43a09ce985c985ac64d3bc7fa949e24ada2ee6e5547df54a50dbf7a044dc3e5041ad1033ec8b53daac8b2b35b6025553cf68668e0647dfb0df48658feb813de646e11997f939bd84d648765e5a7380b3974d38873a89f31750216d67134ed26d4cc9705e0170f6b609678193388f0238fbd88473889338df0238fbda8473b09338ef0138fbd9849374453019cef100677f9b70e63b89735f8073804d38f39cc4391fe01c18c53852f212eb4a4f8c3f58e7ee50dc2280308f12610f96dc335fc0aa4f64643ee54138ab4936e5b102f4d9f3ed71e976f11cd5bd01ca025b509296a164288f07280751a26cecdd4cf35ee62a167b2f2c64e4bbbef7a082d60e949a83a39a195a0e0682f9aa36bda7a7db8b04e3602469486d66ece42162177793db08500e8daa71b450da64095b231b461158e3f754081f03d97c981d0b0c083d8ac916181c0aaa98eda3c0c82db1a4eaa011f5b3eb53becf006bdc215a9f77fd0e48e3e507916df54c569f77066887dbba9c80b47d4956a30f00d5d08eb6a225ed0591a1bd0458ed88286af8bccdce8da60f40b853346b836b61530ab2b56d3d00be91d1e02b88de0d816cf0ed4f806f54144eb0993971e539e9c675038039da26982e761e6f04300b6d82e9e256e4170198636c82e9e256e41b00ccb136c174712bf20b00cc7136c174712bf20b01ccf136c174d1c1f5740073824d305ddc8afc0c0073a24d305d3c8ce9260073679b60ba7818d3cd00e6243b46d8091b456423ecfb8211f6c951acaf08e3f54698c9c93c8b7600a396536c034a98d1c9800e0740a7da0694b05349067430003acd36a084652819d02100e874db80120ec891011d0a80ee621b50c2413932a0c300d019b60175d17fb837003ad336a0841d4d32a0fd00d059b601251ca02303da1f009d6d1b50c2413a32a08300d039766f764a5800904d085f0bf0ee5a9bfe9bc93e4984cd27b2e3e71b823efd6e51ccad0fae0dd704b291a5af5802dfeef6eedd45d85322f33bfa0564f23da218b41b58350aca170e281f78d74f74791c58e85c3bceb49c2560f2c1e652216e296dd9791215daeea0ecdcd3deccefe2f6d07f82ccbf1725da8602ed52c6570a4df15e2b667cc367f780b501d97c6f4a60bccd3ccdcbb8a59bc512abf600db3c9b964a0f737242a317c8b6f36dc239d4499c0d01ce229b700e7212e79d20b32fb009678193382f063817da8473889338bf03388b6dc239d8499c2f029c2536e1243daf850ce7de0067a94d38f39dc47918c0b9c8269ca4de726438cb01cec5f403c2898ee2e677e6552b80b28c1265339658ee17f1522bb2e1e00a006f1f3b06db0a3d214bbd50978b3bfe36e99ccf975468f701836d4ba2d83f9b2fef1fc3f8b6272bd87481ae580ae1fb7171814542003c5eb992b9bc4b572f60bde551544a589534dafb94ef365322868989174e93e1bc0af4de97da849374ad0619ce2701ce6536e124dd24920ce75700e7729b7092ee574c86b309a89e56d8849374376d329c4301ce7d6dc249ba5f3119cea90067854d384977d326c37910c0596953ef7d98933ef11d4155b4d2269c439dc45917e05c6513ce414ee2bc852570aeb60967819338cf0138f7b309e71027717e0a70aeb109e76027713e0970aeb509e7402771ce0238f7b70967be93380f00380fb00927e9263f64384b01ce7594387bb1e0798115620669955838a0e299d8411606068382078513f69b2aa80e0a1f01fa4d074671e2fa42a6dfd422b964250349b69d7e2eb0dc836c01e9e2b9041d01c8836d0149b8e28dee800700f2105b4012aec52403990f401e6a0b48c2da9d0ce4696018e4305b4012ee014206f26c609187bb73781361bd4ee67c53041a484750a21e1040bd0a05896fcc5fddb324a2f629d981cd7d01fe23a3d8742dd36912429f3cb24992cb41f97b944d300937b6228379258079b44d305d9cbe3b0bc05c6f134cc22a8b0ce63900e63136c1246cfc93c13c1fc03cd62698845d523298170098c7d90493b0134006f34200f3789b6012764dc9605e04609e60134cc25d18c8606e00304fb40926e1e67f64302f06304f8aeac8517ec4131f34992036ab1ae7fd5d2630167bf15d2e04f315216e9f80bd174b803d99126c470176b2f7c242b14001eef9556bab95c87602ab0fb09e12c58c2836c807c5916f5549b67ee93090fd4f8d623730bedc30f2e55f64c3772500df69f69c2bece26946370094a7db7ba0a38b1babdd07cacc33ec395a628893e7c18d06767aa64d305d3c0fae10c03ccb26982e96a03b019867db04d3c5f3e0460198e7d804d3c5f3e00a00cc736d82e9e27970db0398e7d904d3c5fe4f1e8079be4d305d3c0f2e1fc0bcc026982e9e073706c0bcd026982e9e073705c0bcc88ef3e008fb3e64e7c1550077990d769f7240d84c221bdb7c1658e9c594785bb1c458fc6a31fcc6f7b65920c6e023dafe9cec7c83c52c01f1922846340b04c6884734c93ce24e043678a93d276d107621c92cb10e282d2f8b62aa024ead61f341e4136a64a5e3b620635f1ecd54c5c0cd68aa620f90b1afb027631336cdc932f67090b1afa444d95293b1e15694e49999cc1abf0599f92a7b4fd2201cd220437b33c8e8574791d133eb38ba38d49607acf49a289c63b2999324ec8f93d9e8f900ecb5b68275f1189db300d8eb6c054b581490811d07c05e6f2b58c2410f32b04301d81b6c05ebe2d2c20200f6465bc1bad8c0ea0ac0de642b58426f1032b0a700b037db0a9670dc9e0cecd100ec2db68275d1b36e4f00f6565bc112fa3291819d0bc0de66c7b90aba434c095bb26487987606a357b747318e3a88d5c201d06496b91e58e61df4eb3a123b3694794acc0118f13155c26e00d998ea4a609577da336ae5a2e7c80c60a11b6ddafb9bf42034b2855c0f81f1d4bb6cc2497a721719cecf01cebb6dc2497aae1c19ce2d40b9798f4d38498f3825c3990770de6b134ed20378c9704e0038efb30927e911a7643857019cf7d7e6caf7e0d49e8bcda4b900e60336c1747155dc0e00e68336c1747155dc2c00f3219b60bab82aae2780f9b04d305d5c15d71bc07cc426982eae8a6b0f606eb209a68bae3a1d01cc476d82e9e2aab81600e66336c17471555c4b01b37edd80f071d584178a1e0aefa32c6489f385fbb1f1ac444c4070100bbdfbc9ac4c7c35dfc331d7fb2f5c0aece5fda77b1e13e7738f656bd80af194cb2b16b2977abf72cd2ad900ee83fd38378806d22072c578ea288ff94aef9d19ac4484be96cd64fef9c9d3bcbfd5fe4eab04925cb1466abaf76c15e34b787808cb3c4d16b30a11e3e4f39573630d04a712b65a12e00073a5aeab99bf0df14439925be6c5b9486852e1bd534784e3f7fb72634dc19d5aeb3251cc9c550aad1a7bbf736d2732ffdce785405213f15ba9f75ff55f79d2c6622d646af2984c11148abcf78ac475565578fdf986d7b1c1de5ffeec5dbfaa79bb7e7273e5a5f24e3d4f2f93a7656a694ff0048be97370798d5961ba18f919877f5f2a36a32a115227a68d69faf8e116dd2445aaf4efc9d362738eff933cdd65b20b336d2b8c7cb697f2bef012cfa82b84337905fb65419cd5fd7f2318b0a9a44c0500 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/360dacfd7d8116a4f83ee743378f5c71.asset.meta b/Assets/SerializedUdonPrograms/360dacfd7d8116a4f83ee743378f5c71.asset.meta new file mode 100644 index 0000000..5efc0c8 --- /dev/null +++ b/Assets/SerializedUdonPrograms/360dacfd7d8116a4f83ee743378f5c71.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dd39382f5cd123e48b0686d1b2809381 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/373d5e0b020b21e4f9e1ee01818fdf80.asset b/Assets/SerializedUdonPrograms/373d5e0b020b21e4f9e1ee01818fdf80.asset index 479b2f6..01b0f1a 100644 --- a/Assets/SerializedUdonPrograms/373d5e0b020b21e4f9e1ee01818fdf80.asset +++ b/Assets/SerializedUdonPrograms/373d5e0b020b21e4f9e1ee01818fdf80.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed58dd76d346109e752cc96e43d2d036294d5a02bda84b0109e8e19e04daa6a7104e12e786f6242676a85bdbf8d80e27ed23f48d780b5ea1afd01768bf1949b62cad241cbc0102f2b17ef66776e6fb666777b6e0122e7515b75ddaa275ba4e55aad353eae06d1dcf367efe5758fe907a783ec1bd86baabb49ad393afafd567b86fe0ab4f03f43ca2033c9b52bf4d0dbc6fa06f035f5c7a887f03ad54119daa749736e9012da94f7344ec4aa77e50a6d82e55c27d8dfe446d4394e2415ca95ac26d1b357da96b43e9b0dd23fa55cc6aa3ee007d7ad482ccc722b1b4c27dc5267938c1b3807f99ebf9dd52a2f98f9055a32eb95ca9be9900e2b0673eb82cda2ef8fa00651e760033ba10a0b1b02af80de816ddd45a7841cd46f45e977b0d2d9a22b4941ce279620856ae855f23424f1fe53f08bb4c501335d7e9673cb9d73edd00e08f625276316c0b14376807f7aec8db87dac99679263195f13e5b90e97b5a1b2521a05d7cb744c36db93f134d1ba2fd06ca06e2f71d78fe1a9ec7325ad2f61ede7563ee0490e975d43b5c5ab9efd6214d77610d6befceb09bbd67e47530c2d0dba5601a165d9e23eaef0413ef31f4838c2581dc9771c30fa5636537c9e54fb5954070721b9316eafddbc7fb367d97698b1e19a67b592c1831fc577179f9c5fe3fff5ae3a6dd22d766d356724ccb0296e555d4624242b6099655f458d138fc4a07bf2c6bdba708bfdfae29ed2627c09695699c0059fe76f0728c7f0b8defa0b82ef16f9d7e43b38e44bf16e2202bc8f331c19567074b7c45b398e6a99c0678410778e9b401cf8f3059809786768d00e74b8f603905c13c1dd2109cd120e8314d1fe8fc40f42ac7f4e2d629d28b3a7ed8047568949f2acafc8dd63da96d8a7f728faef8d920080769ed426eeecb36f74834c866f143d8732d06979ec15961f08a6cc7a7af651acf968e09e658fd629489e4963b7c5b435f8e1dcf248e1ca1bf6e8b9e8dfab997467d4e505fd5260e93699486b0ad4398dd42fdf15a7c3d94f954be79b430199b9ed7cf0f6d1ee1efb2832b37c3bfa7a3d947bc4f0cb689e4587ada178476f3caa43985a30baf1cf1cf6ba2fe7fb812d195a3a5e5e0a7143bd33d51b107a51e62f8a67cf5c9e589a03cad77ebd362e6b38d7581f3991d68f058ccc84f923fa6f4243919d34f9a2fe559e1af75dcff5092ea700faeb32edfa6f4dcd0092c0a6501e939fdeaf5765bfa09b31a1cc550c19569fded09bd295f0b3e7cb267f43e34f9ded017f0404ed0208067fd9e74afa1c9205ffe2664fc1ef0a6937f4d048449c414ce85d8a9ee0098ba44913e7e7e0473ac98f0efa7e665274b1092f3615e22d0b184cb9ec8abc7e70787e5374ef3c5a87f57123e320aaffab0e871785d7ac7239fc7918f8f9e878733058ffde182c9d9ccabdf9361521916c74679950380f2d8ec765ec68493ccf01999e13e609f9b04ec9cb8f69e0c7c88267b43d94da8630c38cb147014016ed924708b017007c1541de03d2a30aafc1e79e6a02c9b82d28940b96212ca4b0194feeeb4235ec84a0c24a7ead04fc129fb5903b81001f80b9300cfa74ef2ce5b1b215504bc2f4d4748cef1bbb2ac8c9f5ff6cd01b7600a383b02dcc5d35b8b378248690cb0595380152380ad9a048c2d381a1e228c7b9a31d8e64cc166d19949523c4e527895b28b01f595949d66bc3cf4fa4a26b9959c20e3e71b0b01721dc8bc2fcb630d9ad6e439ca3d5c6ea66ed364c978b6ccfcc4e0324512a618e3ada9313e8d644767e9ab243eb319acb87c6a77a6edff8ac60e551d6b49d2e22a98f7853768138deba2145fd6ffc347f2e4f6240000 serializedProgramBytesString: - serializedSignature: 016c4e14d9e634fcc2426fe1c68d1527ea4460bc80c2a0e6e449357b1a1bda87ae658f982725eaa094235be91907221a67e89a4449541d7d72370dbb2064cd0c + serializedSignature: 8f2154e332ee3f34c109c8b6f2da893723ac80443f92a68adb437bc06a47cebfc827e137b7ee5697d90855f705e74939568aaf75fc57581772e2b62aff40920c programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/37ebb0e047669b84098b26e3dc0c7fb6.asset b/Assets/SerializedUdonPrograms/37ebb0e047669b84098b26e3dc0c7fb6.asset index 3c09446..48d3136 100644 --- a/Assets/SerializedUdonPrograms/37ebb0e047669b84098b26e3dc0c7fb6.asset +++ b/Assets/SerializedUdonPrograms/37ebb0e047669b84098b26e3dc0c7fb6.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9de95f14c919c76b90e110f0165050f11e0f18c45b514440445111c475d58d228cca2e088be06ab29bcdb1d9241b936cee3b31f7e6dedcbb3937f7b52ff207ec8b7d9997fb22ef937aaaab9967aaebe9839ec26e77e133d3d33d55bf7eea5bd753d5d53d0569c6ff125bf9db59d6cbda5803eb67436c8cdde09fdaf87694ff5b7bf6f11e36c1b7d7f8fb00ff6e2babf388097f1b13d5fcbd8befdd64933ce6141be4db61f17d1fcbf0cf5d3c6e86efc1d1abfc95e1a112853c523f6b67a7d849569558ea21715644ba298f25205d8912fe7e98dde1df6684517092b4f8aa8abff5f16f6e8aef46b9d176b80bec1191ac51fedd208f33c146b8e615a15872b782890fccda2c96db42b95dc05fa5f2f37cb95dcf5f45fc7502ed43f86efe4af2d7903cbe04c583f027e57e81d42c919ff17997caed3c745eb7f09572bb41b16983b4e97569d37f5db4ec746d5434365a1a89759646a2d9235db6ce2679fc94127e334ad3661416b65b659c1eb4cfcf5dd0ad68dbf1ea65f8d3681fb60de81c369b343ad6808ec1b651eaf4a27d38ef3a175eb60d55681f34fa24a7eb1e3c36b9c4c7fa2985afcd711b7396c92dca39b6a1e32e7ce75c5674ec784d0adf14f1fd19e57815da474c0a5ef4b037c572edad54f45328be9df66a19a6df25afec7ab250b16fa1c2dc2dee1214c74f9d5c26b78b7c865f24b7db51f8ed56fe14deb3f8250b596e3a2ae476874cc759b40ff1de50c22d71094f9c3b794feed7583614db79502bb77b509cbd52f721f49d7d1cb63be5f7e7d03e3e871d7eb907b33932de4b92cbebf278d267fc050a0fdbae8773ed2ab2ed290aa86b97af5d8aee2ea9fbbcdc2f0ea8bb426e772bbabba5ee7fe47e894fdde54a7ee9c2b89559990fc5872cf6c5769b679fb336603eec53d2b54feabf22f7e706d4b5f361bfa2bbdfd22da996fb650175ed7c6856749ba5eeb8dc2ff7a95b9b877c80ed01749e03d216bbcf57591f506c3f20b72b3d6cf563c741a471d0b2a3f449226f0e2a761c94db5579b0a30569b45876ccc53e1dcecb16c58e16b9ad0b6187cafc903cc779b40f36bda684c3fee63cb96d65b97e59ab8cfbaa126eb50c7741eeaf61a26e96db6dae1f7bedbc39acd87bd83a67d95d259ccede36c5de3619f749e66eefda19d86be761bb626fbb75cef266259ccede0ec5de0e1977ab87bdeb02d86bfb3d4798de37ee447675a2b0b03dca727db7a3967d15b7156d3b5e17cbf5ddbae4f69892ce6352a74709771cd9725c6ebb95b8dd4a5c3b9ccac8b6a90aed23bfb0fc191dbb64428c148ff2b1db001b67690113bc66bf435a3ba6f76016a48be00dfe368ad34ef261e33817d08c28fbc57875927b484dda11e5b24439b2bb4dbc0ff010c342f4a2f3142f3b4e01c68df0ff0c1a0edfe4c73bc5681a06c4c3fc9b069e01c322d665ee6a5fe0ffb92a67f96947f8903ac31de8297e2ad0bbcccd7686f44a120c9dd538bd5cd31ad98ff22336d071be3f222cec13efb784a519617d173f3629e6196eb06bbc311963b7c5d99c699fe09f75e73c2391e96dd40ff0a9e3d634829d4ded3c35607d5af41d6fe5c8fdc811405f745156c3c2b4e8a99f73e4c45b0cad4626291a6b4b639b4096c839d6c4d2623cd4eb20183c8dce14eacbb7c57b171f50baa5454f06b2bb46a4209bc33d4f4df55fdc70e2d9646ed2b6b3b41892d57a24cd0d2ce8a512950e05f7242493858d60a88a3fa1c32f86777db388df0a372cc205cf8022d133e56680989e3dc33fdce6af11798a0161fc20af5f20dcc7a34ff14f60ac239f1a41b458a07676a45ee652b00b74b04b661bb677ebe206bb643a5d59d8f0a727584a10f4b2812238474750787b676691207c3726540678d8e00c613a608bca500fb04c00ac7624cedb040a61a10ee1dcfbd3e0ceac0882975ae5bb0856b8b697410b6052474f4cc39c374acf1e07f47187ef38ff6e8087cf08a7028e5b0d5a76bc901bca9d268c0feb159a7a92f305c995682433136b28b2451ab28d407681cec052c540b08d102ea6841786142ea1841785142ea5841787149e4b092f09295c46092f0d295c4e09578614aed009039f2a4deb02dd8e43bc82169fa76b2544522ece4a2b919d2db03f1de671aff3f4dc124340707b74b30bee2d45b5ef9662996829ea986ece239845546b315f4758e4e9634609f7f363d67c4887f876580ca2b39a63621fce665fb7778b01544f88750053c21677fecb7df3af11fce12ab1597ba9dc594055ae5aaaeb0e50b91652e22bf220be48270eed31747b4e9f4d552ea39517eb94a10b59c59c1ef5fff89f43bc94165f4231a9cb0393a53a7168cd56fb698397d1c295ba4a2cdacee18854e2fc56e035be2bf05a5181eb0355e07c55de2aaa2cadd394a544c0b254ad13070f0d96213906f1707d187ab561b1526a8c0fe8cfb16eb6cf6330ff08070189bd26a73433d383f53a81e309be1d14e0ac0232c243d509df74d29996623a2dcba8b66243d8b662b94e19c26ff453e35cbc9e1aaa114a691aa175498dd52e8d502d65f5a69056afa04ae4664d892c0858225752b9b8256c2eaea294b78655aea394ebc32aafa6ea6783ae7e82d0255903db843707b52cc36b6b907ab4862a94694da17c6d6eb042b996126fd488df2d0b26be8e12dfa6116f2e0f26be9ecae4a6b099bc8152de1e567923a5bc23ac724aa70cd57aa79fc6a58616de44352ebb348d0b0bd8b86ca6c477e7417c0b25be270fe25ba99cdc1b3627eb75cae0f5edf393936b69e1068d705a0c14afb2fbe14e9e6257d8a3ccbaf09a5f4772bf8e94d691841524a90414431356522e645a97c5901307fc6471339dc58d54a93c18b6546ea32a534b1e2a531355e40f852cf2db291ead6179eca0940f8755de4929b78555de4529b78755de4d29778455dea35386f047fc140d17a7792f25dc1952781fc5e2685816fb29e5aeb0cacd94f2b1b0ca0728e5e361950f52cadd61955b28e51361950f51ca27c32ab752caa7c22a1fa6947bc22ab751caa7c32ab753cabd61953b28e5beb0ca4774cad0c3c2a5fbb03d6c2725de9f07f1a31493b3619974e994c1318015f5611c836394c9e7c29a7c5ca70cb3c10ffb31d96536b89b32f97c58934fe894614202d6f93a2635f631fbb255ee85eb7e315c1811ce31dc110a83824bfcbf8b7fb2a2c334251cc14e3b76afd5ef7217710499323949a5e8a22e454719e5fe3b67915bb9930ff7d2de91a903bbc1f1576dcf2e9fb824a68082aa0749ed292ab58fe852bb9ee50ef6d414c10415e445b7b0e91aff7cdd257541ececa1ec7c9bcece56c5ceec392d3bc73839cbca9bfcff8c9c5e73cb073a7ff253ea4e53e9bba44b5f93923e5c13d43ce99479e2370d582b480a7aa9145cd6a5a08fac37f8fc38b73ad8e33cea806c25eeb8d48ddc76c14f987ce5621fc56040c7a0c557296de52ddf906c19c7f2524a675603cf5069bba24bdb810025b4cfb384fa6df5cf7242c301a7c8fba9740dead2d54896db76febac2035d93a9ea66f0ec84207dd64cac3f4b593fa4b3bedd5789eb1493510322cc44245ac787a8546674a96c20bc0cbc842eb7bfea107da9ddaa78c50d62f939caf2ab3acb8fb8d41a9c435da2c439db43baa499f79b1ea6527a6de63db4aecdbf5f65f03c95beebbaf4b5f94a9f9f7c9ccd345ea0d238ac4b63ff743db39794e11be82cfba005b9ca06e4547fd774c80e764bfaadbda22466f8296e89d0d93ee1060fdbc64f7553f8c9a3288e9a627cd740b056b598ff27c4c5d60eb968e10ef735c784d624d7488bf5568dd329f5bec510ce3dca6b18e4c0199ef22b2227bc6f387c94d1371c3a2fb2ccf4de33af54e872ad01e51b4e9d779ae8fbec8a658a6c2d4e5a2c3e7bd0520a4b268be6c95c2d488b35705b66589abcad1881b3cdd197a1e0f7da580227193cfd890bc035af4b22fa000f32e9adaf5efe52f5eb85807d43561eeeb1854265b9cb13cc1adac15f71b2a011b88f9a84335fc081f98ad339ad792bdf1b12a5360eb85e2acde2ba61125705816b377438b140f5424916d59849548b05aa4b1c0bbc436f8917dff5f048309282cf71c0761b55c871f315d21a5ae69631b8d4bd2726a5ec8db9595c8f9bc4b5d4b594b5294b3ae380ee0554d2264ca29b4796b4f8b466875039bb6912d6021256bc7aca7b6559609326815973c0d624ae35fd10073c2385593c5326f158cb647bc569015187985b1c8b496f588e30dd9a3d27a24718705534ed4744151ce1516010f4582cb035236c4f987722accaa7828a4f65ac2bcee2ba6d1257f97465b4020dc5ac3afe7b4e16d41df32e8373f81327d7b4518c158b938ab83a859dafc7247911a6a79aa01277f0823f2e8e82de903af5246e208c9ae56f6768ea28e5987e49051819a602faf729d7aa9c72e97555abdcba9a94c6b949f96873531ed30729cffa95f2315f63abd08e7dcac72033e5cbe3cdce42eb678f1b41e41deccd3d41dc0813c4f0a8c8a2131282d5523f65b2a5ae96a5d9ba1e0033ac6ed75a2e8975e38a0d619e48559ad38e97f949e04cda72b85a6f777cef8c12cea658e23c86703e6dda8fb07a047cc32e3992ce1fbaf9a6d0952074ef32890e1a9321d1350d883b6e2665773626ae6eda2da6318015a600162280ef360910baa4abdafe39cee5af1ce17b8f497c95b2251c943db3ba4823f792b66348903f94c5a650562394ef8d52a7027733c5af533984703e63ba64aa153bebe0c37230cba4eb02ea500cdbc80a84f27d265156c992798d2c9bd87c2899c660969a82b906c17c364a300db699c660d62098ef8f124c836eb83198eb10cc0f440966530c61ae45303f6812668da637f7b386df60dbd96c0a6a1a417d2e8a500db6a1c6a03620a81f3209b55e421de18100a8f5002c752e7526777019055f630a7c0a81bf6b127c85046f4d2d037a5b7bd8a43f9a34058e21701f3609ce1e295973f36e73ec365ec732cf188ce16b11ce8f98c409973a46e5ecd130b37e7642378be458301583e1e61c04f1a326217a4d84c4dfa95f8c503e6f12e54adfbdbcb3f3318a76ad29b44d08edc766a3e5f43fc764d01f3556e9f7239c1f8f12cea658e2ec40383f611227cc5a3baf0369979fc6a0ff2e42d83e69129bb58c21333db709ada2c5227e739a0b11b44f9984b680657d48bbcc65c49171b1320582c5afaa2e43f83e6d125f25c32e38b5846516dc6f63285722949f895227020f6e8b1fce3684f3b32671d6b2dce98c293910f4ba1ddea8e768ac93d983b07e2e5aa574470c4be94184f3f351c2d9144b9cdd08e7174ce25cab547a083c21263326a7abbebd748ffe7919a34dc03253908f23c85f3409199c3ea77b4e2cf68e41db598cc07dc924386b15f22d66ff4885cbddae31286ff310b62f47a98d8487f0c6af8d6c4538bf6212e76a0d4ecb3987b6ef063bc6acdf897ed0e62d0b10e07b2601970ac083ccf526e3185c009b8f807dd524b0354aaf3d2e2a72e64d30e1db85107fcd24e2a50ae261463f7ec9204863f345db10c8af9b04b9520139f8c097d17a84f61bb3d1cf537349d985d8719e4faa4338bf391b38fdbb4d06177219c3d98c707e2b4a389b6289f328c2f96d9338e7336ad1cb0d19c4183c63b7082410bc174cc2c3172d726f388df34297e508df774ce2b39d21aa2acfd21a7663ced06604f2bb51011947af721302f9bda88034b876dd18c82308e4f7a302d260ff6c0ce41604f207510169f0928431909d08e40f4d8284d920e76c79fc7ae72402f62393c082dd4a6ab07f36e627ae46285f3489120a83fea6e6f85ead2943f07e6c125ef0f1f3ce180ef85a10ce9f98c4398f2c8b715dd83717a1fba94974cb3525f1c15cc6b21721fd9949a4f8b14eea959a595afc676cc2b61241fc79b45a488365d2580bb90fe1fc4594701a6d358de16c47387f69126719d9e1c4af5d2c45d05e3209cd1ef651ce77dca7c6aa10c897a302328e53634b10c85f4505641c6774562090bf3609d27eac83dfee654f0c3b975d08e66fa204338e4bf5772398bf8d12cc38ba3deb11ccdf4509661cef44dc8060fe3e4a30e378c97f2382f94a9460c6f159a95b11cc3f4409661c6f1b694430ff182598719ce8dd8e60fe294a30e3f8f4ca1d08e69fa304338e773eec4430ff321b30a905a6f645b1382f2f5d8560fed5244c6b061d2e3bd84fe5875fa278309e3abd0041fc9b4988d61d615302a3c74f17c5a0ec2d42d8fe6e12db425491e13955f64d74b374e5c6d82d754b11c07f980418fcca4d1c67830eb307e6377d1aa1b9fd27148932592452019ed796f2f9fb002962b592f5033acee3f60fc7b8df116cfdf48cf37bfce334f4c59a94e7ca81948f752e295f0ff84f057e5ab8f553370b6589bac1c39f108ec300ff6e406cb33f7b938639f3044c5106f9b96c774d284fee6aff824293d0b7232379ab09f9f89d1d5d4abdd347d7aa72975c494353fb40a7ff55c87799eda29856894ad6cf73de128787e34e884661428449fe1f9d43b36054c70000 serializedProgramBytesString: - serializedSignature: 202e4ecba4138284c14fd2328634e5f6be3669bd230c5e72c176becc968f6116b122b8467481744cee88abd9cae376d3d6b4777faef571bf725697a6e922be07 + serializedSignature: 9d4b8ff2f2953a6d4bb9acf11aa53729dd058dffb1b7c0a1aec7eeebbcd4e04e31213ee8995cbcd1a5bc9c8b902252f88d7fb52944435c50f652780efb35bf08 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/381387c4d58aa934db02cb81cc9bdae4.asset b/Assets/SerializedUdonPrograms/381387c4d58aa934db02cb81cc9bdae4.asset new file mode 100644 index 0000000..417cfc0 --- /dev/null +++ b/Assets/SerializedUdonPrograms/381387c4d58aa934db02cb81cc9bdae4.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 381387c4d58aa934db02cb81cc9bdae4 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e7827b718700018294285ac3a5455212680bb41092008184a4110a7577a16eb4a5ee4edd9dbab7d4dddde5577977666772cfedcd73b9bdcd7399e9fba79fb2ecdeee33cff39d67dc523298f32734d2f96b219bcfa6b0516c012b66156cadf3af29ceb5dcf9cfbd53cff35895735de9fc5de8fc3692a5d6f325ff3334d4c3f97b967357cd6a9c2f6b5991732d15bfe7b312e7dfb39c6f4b9c3bfe7485f37f89f356a8a9f3d1023695cd637359f750d77a442c141f55cb67216e57a8a5f3f764b6c1f9b54428c503c9103f7577feca777ea916bf953b4aabf716b3bd8559e5ce6f45ce3755accc91b95c486cb9750213ff60eea597bcf696d79eceffade4bf9bc87fb794ff86ef3793d73e71bedf177cd70afc9b13da1ce3fb7eee35b483736dee5cdf04f7fcdbafe57bfd5d7929ab62c81a20af03e5759094f9561cfab790d7b47aec8d25633090150fb396f23a545e87487ddf4e30fc612ea3d026208fb3dc11e8331484dd0afcce9fa507b05dc5e34e9e78dcc98dc7947364fc7d2cdf1f2eaf23e5758494edbcd335533edb5e5e53ebd16b94fb1d1bc7c23eeb84d9a452de67c8ab929b2575db45eafa0eb80faa8b8ad36c29736719c6bb9ae7ea7dfefb7bf23e475e733df1355abef7bebc1f13a73ef1f89fd269a20ce30370ef706cba2c862c15ef933cf13e497ebbd1e5d8f44e8f3dc0ffb472c74a791f2660c7648f1d935d5d9aa547be57af0e4abef4abd01429f72370cfe59ee1d3b6a6f2bb2df27e3cab3f6f53baec20af13e455a56de7fbac1ef2593779dd49ea3955eafd31b877c26f3e2e46784a460f604b77f99d4ac32aeea779e27e9a7cef4457afe6d2ced074f9de27e05ec9e1cf3f95f72a6da8f4389145a681cf5cb92d96c8e79d3df1aff4f93c529fbaf727c9eb14799d1c66d8b9583e9beae1302dfccec8ebe288a719eebbad959c995287cd52f7ad2c325f995e8fcf28d6333cac6748b9bfbb725ba6caf767b9f721e5f369086b2577a647aed4b7a5ca43c7c4a9e7aef23a475ef3e4755e985f96caf367cbeb5c19e62c16991fcf92bfef16feb6471f9fdc62c5d1ee2c32dd4976a15deb91a9be9f2fafade27c5fbd931f40e702796d1d6798ade575418030dbb8bed0fa408f2fccac47e642972f57a14e07474e1b955fef21af7bcaeb5e92ff1c8f1f285f8ae507f5e9b2c8fdaed589200eb82eaaaeb4585e9744eae2d4b42375faa2e1740aedc622f3c3dde475b67cfe25b8e7babeed86d356a5a97de475a947e765743a3b4d2af15dfb73806fc4f35d2cff5aeedad7f65e69dffbf2799147b782b0dead5e00df2a3de2490f2592c53c0fe379ae0eed14db159ef7be02f7fc3a371c9ef837ff56f9563ff09c7ffb35b8e7bf17c7a9eb2a16edb35cceee20ecdd65d832ff6fafe2b39445a73dddb7fc9a079ee5b9f2daab3c71358b2ec7d47bdcb66fc03dff7d659cb6add1e8c7c37d26c6b7652c32ff990ffc41a5db72a9cf7c1699b6545e3d38fc4d48c95bebde7754ba54c86f403e1d92f94507556753e5620dd397b35580c33279ad0e87dd4fd533f68d11d6f7f29d5a8fddcbc372da5ee65eb753f9d83a169966bceff267fbc9eb01f27ab0bc1e147e375bb1d95f5e65de1f2a60117933db009ef3eb02f9fbb7e09ebfb73e2cbbbb2ac30ef1e8aa8bcf433db6ebf280587e7698fb6e4f59176487bb6c3bcef4c8ad60b1fdf608574eaed2eb482967a34f3947b97246ab3ad031ee7d27a5cfd1f27aacbc1e27392e641179393b5e3edf03f8cd42f08cbffb9d876f7dbac5e228ebf2756dad93e4f564799d0764f7947aec198eabba3adf09e0377eaff2c4633df6c5d2e514796d578f3dbdc07bfcba3180fdb17e6b2eafa749dbf66291edcfbd5c5fe97c550c59a733ad9f7651ede633dcdf3b3795f767029b78188bc2aceb7ce92cf9db6260f764f96c0978267d2db437f0a545f2b7b33df1f3bde7f773805cddefe7021d74bf9f279fffe0eadeb58b7c7ebec7966359b4fe209f619ba26d0d2df184fda38fb8bc407ebb8f272ef771e3a56b4d0c5917eae3b2db91f2fe224f5c6ef6c4e5524d5c5e2c7f5b06e26d847c56a889cbe5e16721553fbc04894bf5fba540aeeef7cb800ebadf2f8f8ccb6eefcbe757207109f587717965b4ade21d18f64f71c4e5d5f2aad29daede7b8dbc6e2fe5fe1c87dc6be5757d0cb9fd3c727f8943eef5f27a5d0cb93720fa26129ef275d56f52c4227d9ddf3b3eda63590c593732adaff754f5a39b58a4afdfcc227d5dd585a17fdc227f2b09c73f536da3152cdad7419d33a4ea55b78277a0afaadfb700b9badf6f033ae87ebf9d45f87a4f556fbd83e97d1dea0f7dfdce685b432b3c61ab723c565cdee5e1acf8ae6291ed9c556efcf4f2d67f0e67b1cbc6bb5df9a355bcde23e5954af9bf827b7e5ded0977b50c77b32ba7f76629a7ad7c7ea77caed2946c0b7aeb5bbddef7bc771f8bac4f3de0e1ffa0c757cac2fe5667cbfde037685b398bac933c249faf0571550e9ee9ea5cf5717d585e1ff1f05b23e5fd06eef97b8f01fd553ef1a8bc9e12feadd32b9ef86d0bf4785cef2b42571067beeb48cae627eab1d94f9e54c122f3a40ad70ffac4caa79f76dfe9db23c63bcfcaeb73f22ad36fa89245b65f948f3c2feff7f5fc2edb6f22cf56ed9beb801e4a36ffe6f738ec7f515e5f9257d9c60955b1c83eb12a16ce57bc6544a2f5d8447f93ba84aa23fd47dc3bf1d04fe5b5ca17f7adc73f5e9657e5c3d5525e8d8781aa83c5eacfaa2fac187685d6b1c83e04d5b67e55ded7cadfff90f7eb3defab3cea3579bf9fe7fdfd3defabb6f6ebf27e43e4fb6c1b90c3efdf08db16527d046f8267b26dcede0af319a0c6b20e880c9bc9bec5baf69d6ac31d28dffb137c0719a8dfff27ef0ff2d874b0bcff0bdcf3eb211eb90779581de2917ba8475fd5fff0bebcbe17b6715c17f00de0c9de8d9419d3a7df90320e93dffc0dee1d9f1e10abfeafbe3d5c5e8f9032fe01f75cc675324e1ec465858ef4f03b1c3ce7d7a3e4efff827b47f6c02e31f453633c477b6c3b5a7e9b17c7b7c7c8abaa5ffd03eeb98c635ddb066e8a214be6e94c8df1aa38543ecbe51daf89d7e3417cf2fbe35c1d5218b8777418a4c6d03f627adf3ec6f37d28f2fbb489f27d35def98947b71358645fd867f2aaeac21a9f64aa2ea1743f31fc4e9d7e9f7af453fdbf4aef93a4be29400ff59c5f4f66916594eaa351f9f2299edf557f8a6ede43ac34d2517ebf51ead304dc737eb2cf284dd54f641f7add9c9e78cb2ed9c7cc549d59375efb9d7b3fe4c81872bc7a9fead1fb5457efc1535d5983d57897ea87fdc1a7deaabf41b555757affecdea77f1e438e57efd33c7a9f26f5fe4b32507eafda80bffad45bd63999aaafe8f4fec3bd1f166bae92d25ba5dbd35964fde07457ef215b5c594355dfb92c1398caa7757a4b164ce68b75eddeef3dbfffcdc2ed344ccfae529f333cfa9de1ea37b440eaa7f20199d7d5d54f54de7b368bac9fa8be3362fd43674a7f680aee43eeebe27a168b2c23ce72ed4a97f356422adf4b49126fafac31016479e79f9dc322e7319ce3da3aac876bcfb089f2f9b92cb29e722e9003e747a83a6b7716ae57a9b0e5fc1adddc10313314cc2d08356311f39942b29d1392f30e432aef87735ce2b559f5a1be09ee9df087b77575182ef383d0f91e9bcf476c56756760739daddd0087561e1b5b47da58975fa93162249e436d1388e74d1e9b37b936f3228ceb34428ec7852ef4d87c61fc3687d4b8816a47eae2b9bdbc76887c3774018bcc0b647fb22e2f0d6d27af1d63bcd3c9c3bab387752c66def95117b1c8f95117b9ec46aa3e23955fcb7c31567e1052f3a390fc40cc628e376ebb445e431783b8e8e191a3de5175a24bdddf539a817b7ebd443e6f0eeef9757358b6caffebca81cb6384dbd513ee959e7055dff5159e70af90d7cb80eccb802e2a6df16f549ea0daa1bd3def5fe5f12dd5bfadf31b195fa1be916185aef6c8b83a860c95e6fa033df9fd351e19d7e03244da01f948e85a696b4b70eff860a66ae7a4caeb80c8ef43d779c2bc0e0f33343052df3a19d77b380f02cff9f5064f1837e061d4f9f98d2cb2ee70a36b4f869cff9aa1c6de75feef4d9f37b1c8f47953249b287b6ef6d823fbd843b7c8e7adc03dbfca7a56e8564f1cdc2ac3513e32585e87c8f01a2a1f6806e259ce99ad9b3f118bb10a032b47fce435badfd4dc9e2d9eb8dce272c95ae2ea95a5dadec3e477602e90b67e36c223ff36c9bd35b8e7bf6be65f8464bf7628235246445b59cdcdb83dfc7d5d7b53b53347857f1baf640f07dff1ab2a03d5bc25d5568db7df4cf6e184eef0f0bbc3e597bd49daf6a887df81f5f093ef85ee04efa9b0ee0a3f0bc9366be86ef0ec2ef08c5fef91ecdb807b47b7dc548fdc7be57b6d41d8fc7a9f7cde0edcf3ef941fdf2f6d7fdb23ef41a0d3fd6e9839aacf39cb13c6032cdc3e7778e5bcefe1f00090752f78a664c0f1a583c095ebdd5ec6c1b6c830eb8b036dbc3cc422eb560fc9ebc39ef87f583296f19fabfa0394bf1d594ffc2bb92a7f7c8445f6a3aab1931c208fdbda0197a90de7518f3d8f7ac2cd61f5f61f8654dbfb1eff3cc5d80e97315a5e1f97766c07eef9f5b1b0ec906c9f84c0984b48c9d92abf57f54ae5a34f82779f04eff2eb532c72bce52937eec66ef3c856df3d2dc3e804eef975acbccab18f1459c6d5a5d167810ecf8067fcfa9cfca60bb877741823fba8c7de8484f53c8bac8b3def09f305f97b5770cf6d2bf6bcffa27caf1bb8578ca19cee1e395ebd5e0236aaf19c47ebf175c9b5ae2ef0a48c8f775ddbc7a446da549f3ced33b9d628a4c6025ef67053e32fef2620dbd357d5a06d7c8a7a4003b6514519cbafafb0c87ef5575cff18aff26a958f6f5f8f2f2879e3e555aef909bd2ae3ab07b8e7d7d758447a0fc9b194ba74ff3a8b289bc4bda3d784133d72b679e46cf3f8e41bf2f79e9eefde0076f1df7bb93e3b61b3c79e7aec8e7cd62c24fa5266b21256c82a5986e8a4e204e35d0eacbeac7f213017dd5c8c22706822d81ab6c1f9b444b71a778158eb5bc3721c2ebad5b83d85cfa8d0a788bf0b9d374a85d0de295141dc15150457aeccf9af042c25ae769ecf102b91f962e252e797516cb673e55f2d63596cb1f35fa494854eb065acd6b92b70feae14f296396a47bf599f497cd9b1f79bf98e4c775574b9f34401ad74eecb8486f9e2ef7542d312a1fd2ce7598d58a3bd96ad742afc156cbd082ddaf62ae7dfba300b2432bd8efac5d1d8737709b68aa6a98e355cfb0ce18bff17238d11231c7df3de321d36cd10bddac747c5c4ff317433195e68cf9232b204b250c4b36c9621caf5f95104fddb186da1debf5dde63586e4c5bf4647874f716168463f883fc9b0feb34ebfb9b9a459a96c33244f75a9f7a4c8b0596cb4b17350a3f26346bd634932beac51fd2e117dd32f949c4efbe572adef31f01cd45e1171901a2fba1c0c9d5f240e1b940285f2654f31a532054ae914a8c62739d7f57b2498e1a45ce9b55a220dc50f71637342a6e33b9222d44f44417bef5998845508a2e8244ff5741a3a40f6c2b8fd851d4b2ce8a701465881a558f188e8c8525aa5a4d647d4b25b5afb69c90f9fbc43515f7de366f6dc1a95f7edc4c1f3fad45fc24122a16434d7431d43ad949a8fe322356fcb4a9b32b1c3ffc8f9e615bc4c7ebd30123d85447b04db27d9cff5621a4143aeffa67c83bd84678b3213dc0f68813d6af0286b09906612647d841a3156bd6caa395e864d34b6eae8b9cb68d534027e6dcbc37aabb074133d4b93bc62c5ffdba760b1d3dd115bb8c949e6a37e63b0d84dd9cdf0a9df74b4425943fcf7324163a617379934408e1b666e417b1c9f23eb4edbd64b5543b0baa69a0151c54338c784b0df14ceeaf5d346e20f2386f62e8882786565832eb1a3499b5c624770b2ab90d26b97b50c96d31c93d824a6ea74b3662e6c292a4249b70778bfad764e7db558e31eb441b9ad70875dd33b1934bcfb8934b2f915c5299aed3c89f46583269af8b3bfeb0b74e496fd4f5c2a3ae0326b84f40c1db61ded637a8b775c454ee1750e54e98e0fe010577c632b9d406c8e4ba605a0f08a875574cf0c08082bbe9b20be188c9ac824f15c970b990e3bf96c2e7740cd0c49c883d6d2691c6f4d5f0faf4c0b284ee58021b1c3481f5d049e6f1332496d1de00d2f0007a62e9616803a4875e3ae1a21dc9a25b4dff3a7fa284b7c585f7c6341fa6d13cb53cc597e67db0181d1e3446fb6292470495dc4f979645de7f18695a8e77746686d8a4b584cd7352d26ae676abab702b44973ad74875cfcf77ae2b8416fc79914c91b1c38a9d4f8cace303ba524409368dc53fc6446f051f334b11f9d428914ff1bf1738cfddd1a46922064a4548a3b4daf010b0f7158b398cef3f5b2b62bb19d2e1932142378b0d9603f7c7729a4c4d4eb34d978dc5c86952b1249b1534c90ed049e649365be3ab99dc57f9c494d6a2408f0a27030f67a02e6b1075acfd1b356b70bb06b8bc15a29fd8953797f12d94f713aebac671e075d2710a9c77aa9c304aa49307c90cf8e49dbede3e27557e6a93c368911c768e2339505a852580413a4fe27d287c9643541f3faf56cc67798ee4a52219ee2b1e734a6eec968a574bd9fece558d7d46f95b0bdcdfd274daf0a6299fbf536f7db5332e783026785c40c143b0343e3e681a1faa93cc731b3ec723680d2b1d537b87a06a0fc372d41d3539ea5f217f39ea704cf84e1ae1f7a6f8133e024b0a3bc7e32331bc7a242678175d1ae3ae3a457447a73aff57385ff00645a148fda9a2300ce706a94e5a2f75fec50bec91e0fd0ae70d77ae811f3db7c79c626250a71885c5db244dbcfdec33de3230e19335c26736f1273c138bbb29bab8e3053b2f3778b564952cdb2273c35431eb23554cf4a915ddaac522e6aa45bca6b2039c100f72ae35cedba9a21c2813bfa58a1305aa445eeb274eb330fda7eaf46f0df4cf031afa09315b1722273c4d936f857ce65b393ae1bce2339d21151fbefbb1ff8a4f2e866da60e5b5f61dd7a5173ad15efe70b0728a9ab2b17375001395aa35786e89b5acb1ab342c65b0b7c5a54b5f877b88ac2c30e0fc107a978cd62d1152ff5475ff1e27b34a78b99d9c9d01eab608dc132d5dd34996ac84fa63a164b0bb3b1b43027a1b4304ee773a2cbb2b2517d0e4f51f3856c9ef28257f8f94a9726ded6bfe857cd8dc3b31a4ac711621570b53831c62557cd33533e3ab61c1c0de3c21749429f26e68934914ccdb174311e2bb5f334a5f69666fe4aed093a97157dd6558deab253858464b8edee3ab715fdcd63e288fc86d4b3bf983d5b2d32d56299a9ba59777f31a5be4a149b25ce739ef1c2df4788e5d5bcbe345df02e17e42bc4dcb095a20aaa77f2f9c2c9936d27e6e83b608e9eaf71f49f7d3afa8e3ae1dcd10b34f19fd95d40278c0eafe6f371cd77d269ce4728f876d00d3142b133563c2ec48ac73d122a1e77d185c3736bbe7f715455912bc0bd4e4dba28963d29d5b2ab534cb4f051219ca8cbe9c4e84f72a793bad5a4c406e2f612cee78df14377d1a7ee450c9bef195b072c7d4ec2d2e7624dfa1cd7c25ffa9c8c39079f5511a44f610a26786f9dd70d12b9224cd8c50ea12a8fdff136a69bb053453fc22ae10fa962e6bc9a22e447c7a918d97d346497f8243b0dcb3f963650fe315d1700cf2197b180bd2133302e851a2ec7fae43213537b7950b567616a1769d46ed9d29fdabb62c28b35c2b7f914be1b96584a02a6c2d998e015ba54c89d4df5ef14797af8968bf4a7faed8ac5930dcedf65ceb3222122f174380763bb52c376934fb6733104ab02b29da713ccddb3341ec131e6aee4e904f3727935432a067c675dff1583dd31ec651aec235bf9c33e1f4be6e54193793e26796d50c90598e48aa0921760922b834a5ea893cc23715f4d249ed8da5f24ee8109afd2087fdfa7f03db18459adcb9b063326d7deb89d0b6e5d2adc1f5de8646935b23eb04eb6958a23fab5795f75a9ececf493cef7c2f4acd1e9e92e98e5139279ddb4508c7df010e73989d44fa88b30f4b51af43ddaf843bf1813be4e23bcc6a7f02518affd74bc7ad413afc5621e6bf86996f3d40fc7bd316dd6ebb4e1b7e178f313ce3e18d20d1aa4e96dfd215d8a19b1bfce083effc1c537c14136570cd414cac5beeb4431ee1fe3324c8303741af09c6d765dc5202fc16a412186f4400dd2653e912ec772e48382e6c84598da07eb324d9f6a17636a1f1254ed129d645eeb389421b50e3efbce7fad630516cee15838472414ce4a8cd4914149adc222f8284d043fd3ce5f049762c28fd6086fd9de9ff0d598f06334c2f37c0a5f83093f5623fc2a9fc2cb30e1c769847fef53783926fc788df0b40efe84afc5849fa0119eeb537805e6e4270675f24a4ced93346a6ff6a9f6be98da270755bb4a233943cc054f6677a377d6aabfee46be97797c8b82f8ce8cbaaec6fac2c7ba1aab75f1c24be853752af928ca6b306f3a4de34d953ebda916137eba46f8e73e85afc3849fa111de653b7fc2f7c3849fa911bec9a7f0f558649e153032376082f966e15175c191c23b2b441ae3d5f912b18fc55af1afb5622fa11231e1a850f87eb8c3494d38e21ba3a44aefad923e5de6e830ca79ea47ebfd31adcfd169cd67ccf0619070bdd96d4abacd10dd7cf0543654d6ba87fad2eb00cc07ced5f8c0449f3e702066f479017de0205d3e2b96c59492e6b3d8fcff0231cac7870956084f29f7bd5a20769e7c7edc79f2269127f3a98a74ba62f9f7c1bae8e675eb0b1852b7e67b89b7169b5afaa95b1f82f9ec451a9f7dd0a7cf1e8a09dfac11feb14fe18761c22fd608dfaea33fe187eb84f36a0ddfb13b50b5e6084ced4b356aefe953ed2331b52f0baaf65198da976bd4deec53eda3b1bced0a5d86ce6b20f1748aa48a44592b0a285ec4e43177f30d77fcb1d0795a2c66bfae12f7792269f29ec5e5a20070f7175a2a3a3f568a490755ce53355b7603735765a78aea98bbdb5aaac80a8ae51cea35e249b578ab0484a32f704a65c1098b28bfbd9bc7605174a5268a6ef21945c762517455c0e2e7384cf0d5bab8e7b3d00a9c9bca8878f113def158c67a0d96b1f2cde0fd775a9c80d9759dce2e771280ea2975fd776f9fd5a213b1f8bf5e97b374f217ff2761c26fd008dfe853f8c9589cdc88c5c94d09c5c929ba7078a677733c4e1c639c6f2326f89680824fc5bce8d680c9ee349d601e457c7b79efd4792ec0cfd4f9d33167b94de32c7776f6e72c6760c26fd708dfe653f89998f03b34c2fff229fc2ccccdefc4dcfcae84dcfc6ccc69eed6653d7c7af552e73f3e36512632555514963ab575fe4ba568d1f162cb8f879d8369718f4e8bce755a643a7ff302920f21b9b3fd12d7e15c4c877b753a74923ae438ff1789360bff66bdf377e21a9c8769709f4e8396202ef8124d5e81f113daf998fbdeaf71dfad5dfcb9ef26cc7d1fc0dcf7c184dcf7025d385caf87345953139f59d38518a18735848eecea8fd04598f04734c22ff3297c3326fc515ddcfa147e3116b78f6171fb7842717b09961c9e889535653770d67429a6c5d6d859535603664d97613a3c192b6bca6dc0ace9724c83a7eacb9af610e1f95b4e7605e6be4f6bdcf78c6efedcf74acc7d9fc1dcf7d984dcf72a0c193f14224875ec6a8ccef31a3aa9ddfdd1b906a3f30246e7c584e85c8b19f192c688f53e8db80e43ff7240f4d7635abfa2d1fa059f5adf80a17f1543ff5a42e86fc48c785d6344650f7f46dc8409dfa611bed1a7f09b31e16f68846ff129fc160cff9b18feb712c27f2be69cfc700bb458cb69e0626d0ba6c53b3a2dc2c55a7603166bb7613abcabd341156ba31bb058bb1dd3e03d9d06ad58b8589b26c6a52a7c7628dd8139f0fb1a073eb4a73f07be53279c3bf00798037f989003df8519f191c688df7d1a713726fc638df03d7bf9137e0f16dd9fb060e5c2bd98d69f6ab4deea53ebfb30e19f69847fef53f8fd1892cf752980cf1488dd9d1edde11aac6bddedde34bb33fd012c82bed04410dfe8cf4f043d8809ff52233ccda7f087b02ce32b2ccbf83aa12ce361cc886f7484faf833e2114cf8b71ae11ffb24f4a84e38efadfd2e9e2c23466fed631ac1196213c8c6194a8fded8ae6187d2bfd7f1d20ea5f383ca620fa507d7151b4a7f1cf3a51f75a9cda7a33ea113ce475c7f6201475cb762927f0e2af949ac7cf8251eff8f91693ea5f37fb14fe98a46f1ff205b4ec6f6fc5fe3f6fcdf84e70f8fe1f9c136c6d4c7c4d398f3fc1ed4799ec19ce78f80cef32c964cffd424d303fbfa4ba6cf615af3d353a3aa447ccf9549a2395422568fe8d61da58aea52aacf2962cf637afca5d3836f59e54ffe0b98fcbf03c6ce8b58ecfca3899d9f7dc6ce4b98d6ff62b1c3d3c82a594554f15152b79d52a213f85ec68ce49b8745b582faf933f215cc481ecd5146f214a8a603b8f5d9c8d9947ecc7a150b394517326f93bb935f32eacee3c8a8db736c9e93208a99df4917af611a34d169d05dabc16cf1af1ab123885beb4f6c79d7eb982e4d75baf48e5397e8031bfce8b40d73bc661ac7eb91eacff1dec00c6e1e0a9627bc89096e1150f05b98e0960105bf8d716ea5e13cce27e77730e1ad35c2fff229fc5d0c499b8048ded309e6b94fdb7804c7680cbdaf13ccdba1ed42483bb47d289176e807ba7038f60e1aecaf0cf487fd43cc88ed30233a2664c44798119d34467419e4cf888f31e19d35c227a6f913fe09e6985d74d9295f861ebd3b4c38234f67c34481b756fe1db9582055dcb9c5cf48b14b459528f5dd2cb75a2c264815197378b5b6dba9c4d71d577a6a062a1cde99e416b12beab2f354919917fb9c81f729c6a2ab8e05df60136ee5e9d632c3056c78e5f47e42c33206e7b6ae1245506abd12b29db7fd2eb0f80c73986e1a87d9e8d31b3fc79254772c49f54828497d8119d15363c4169f467c89c5742f5d4cf31578fa2ed2c5b273952f50e1ad0b7707b858719a1ef3d76162d6a8dbad1af6ebc81450213c4375a146fe5623fcaa46938a960b0d2b4007ac2bbb42b64efdf8d75758d4f4d644cd4d3e33a4afb1a8e9a38b1abe1a7531db51643465c2bc9dd82027d985ffdb5973c4ec8e8ee385bfd859408f9632cef93a978d96520a183c84562741bde16ecf5f2adee58af2ad024b4473937fbb4e3e737bd8dd2f52eb46cfaa983a12dc5f0df41b2c4afa6aa2e4739f51f22d1625fd7451926f4d94f801fc1d06b8bfae6de913f0f798f0548df05583fd09ff018bbd01bad82b3132f6dcde46da24f4231609033591b0d96724fc8445c2205d24cc363812fc20fd19439aa62b287c22fd05133e58233c75883fe1bf62f13544175fa546c6d714a64e2b5ee0540f6813cf6f58640cd544c69e3e23e3772c32d2759191674164f841fb07867698ae70f089f64f4cf8708df06d3e85ff0f8bb711ba78e3fdc26a13e17cd90957246aab413b50ffc2f4188975a0f229457c2143e436ea894f6afa1bd3607b9d069d8106ca8374f5177f5322fec1a27a9426aacf19ea2faaffc50cccd019c87787e649af481be17e8c62214db85ccfcc50f4628314a6312ac66283904e382796a5213633dd1fb1149d706e69b68e58179138f6130d43b8b9274f18bc49c78fd72a15fff2e7144d3013733426ae1fe6cfc4a698f05c8df0637d0a6fa613cefb214663fd106312ea87688e8533160b675c42e1b4c0fc61bcce1ff8f6c5decdc1555aaa105d0b7ebca0a52e6cbe1fe084906ebfedcd13a3842fc285b7c2bc60078d17940df7e705adb1d8d9118b9d9d128a9d3658ecec1cab08c96ec022a42da6c12e3a0d3a6a8a90701584fb8bdf6a483b2c1a276aa271d9087fd1d81e133e4923fc329fc23b60e426ebc8b907177abbb88b455ae35d6aa94e45d0edda9dc0a6b3f1ec2087ad1f8edb61a64ed198bad5a7a91d3153a762850a3c51a0b86e5b1dd5035922e7cef86b0c74c24c9ca6ab54fa34b13396e2a763297e464229be0b66c44c5d8b66a43f23ba62f1344b174f7c384f25e254a6e65c158bde5bbf597d372ce45d636564590d989175c734d82dfe8ccc9d6bc6b3b31adf559e1e58f8b375e1b765e156099f53040f70f7136a4f2cd439585b286cb53e74fe7b15f3db16ea85b9f55c8d5bf3d318fdb8756fccc8793a23f93c912251eb77cf67aea933d56d1b4c0894cff6c10ccdd3183ad5a7a17d314377c78a147dcb56a5e560a6f6c34c9dafab67fb34b53f666a3e96554dad2b2b8399958a9955a031eb2f9f660dc0cc5aa0336b6484593cdf5de16988b9a3bc152c7ae44d8dd4a9d2d40bc50f9281189285ba4a58863f248330247b6045c354c77d57784e580f625e9a4e03ded4d933c4a24e6af9f3e0d5f7d69cbe6a97a800d2f0000663fcf6d2f1cbf4c76f08c66f918edf508f4b2d67ee71bd258264742b7f3f3961a03c6210d73d1a248795fb4c5b4331108b35201ef509221d03b1042b062008656899ac6904337418a6cbde3a5d18d3581a43fa704cfa3e3ae9fc07774e4846021bbf8fc0a26ca926ca1eccf217652331e1cb34c2fb64fb13be3d46a930146cf2db284cf0f2808233301c45ba5a924f1c993ae17c67e4e278b4de880bcec27094e8bc913b7b862f2ad998fc153af9eed982dea58773446fbe3a5d22fc8bbf3a7c0ea6c94a9d265c021fdaf2eb05b95828ab74a1889a8966d7413f218ed68498c177c00df1238292b569768173c7b706f6bf61766988cfc58d04235adedab535ab437c08af6b9465b1c2470f4fd6c515bf5d13e2f3922255da75ce612d36f57936252a6a9ae15133167386329d33f0110ed5405be13c5cca6aa451a53e5d7d1c166eb92edc0e68b86be5d4483f618fd7b963bf64bbe31451fc5725e08e6b437c364024a25188335620ce182b74cc1927e8b8f5e7dc9626919bfb9e9bd1e68bfa64a9f3649e982ae84e3cac4e806965c8efe9eafb0ab283a22c4f543ff4f85c5d4a1107d586022e9adb11935c1d54f24e98e49aa09277d649e6b592da50f4c8a8883c1f23a3bb6099d2ba8015af89188ffd82f29884495e1f54f2644cf286a092a76092f70f2a792a26f980a092a761920f0c2a79ba4e322f680f8ac7e93ae38267602a1f1c54e59998e443824a9e85a5c04303a6c05d31950f0baaf26e58fc1d1e30fe66632a1f1154e53918e52303529e8ba97c545095e761928f0e2a390f937c4c50c9bb63928f0d2a793ee673c705f4b97c4ce5e383aa5c80f9dc09017d6e0126f8c480821762824f0a28780f9d60be21c5c9f108fe0d17bc2756393aa5012a477b61aeb131a86b2cd249e6ef9f1a0f8f188b3d1763a04f0b087a09e61aa707748dbd31c1670414bc0f167b67068dbda558ec9d1530f69661b17776c0d82bc4209f1310f2724cf0b901051761b1775ed0d82bc662effc80b15782c5dea680b1b702837c4140c82b31c1170614bc0a8bbd8b82c65ea9ae4726d5b90df1933893bfb5916ee7bb86dde268733c71310a27b61a8b8b8b83c6c51a9d649e402e8947e54db8e032cc2f2f0de897e598e0cb020a5e8ba5fdcb03a6fd0a2cf6ae081a7b95188b2b03b2d817137c5540c15598e0ab030aaec6205f1314720da6f2b50155aec5045f1750f03aaca1757dc086d67e98c63704d4783da6f18d0135de80697c53408df7c734be39a0c60760826f0928f8400cc5ad01511c8469bc25a0c607632dc3db1aa065780886e3f680380ec570dc1110c76158167767d02cee700cf45d0d00fa084cedbb83aa7d24a6f63d0da0f65198daf70655fb684cf27d41251f8301b9bf01801c8ba9fd4050b58fc3243f1854f2f158227f2860223f0113fc7040c12762821f0928f8244cf0a301059f8c097e2ca0e05330c18f0714bc11f3b72782fadba998e4ad41259f86497e32a8e4d331c94f05957c0626f9e9a092cfc432ba671a20a33b0b53fbd9a06a9f8d79f473013dfa1c4ce5e783aa7c2e569b7921606de63c4ce51783aa7c3ea6f24b0155de84a9fc7250952fc01ce395808e7121c6e2d5802c2ec258bc1694c5669d643e97eef550f4c203f5c7cfc2838bb1dee36d017b8f2fc1347fa38134bf5417009fadfc663c9ac798ad7c19a6f95b0da4f9e518f3b70332bf02d3fc9d06d2fc4a8cf9bb01995f85a5f9f702a6f9ab31c1ef07147c0d26f8838082afc532930f836626d7612a7f1450e5eb31bffbb881fcee064cf34f026a7e2306fbd3a0b06fc2247f1654f2cd18edcf1b88f62d58005f345000b7626cbe0cca660b26f9aba0926fd349e679f1d7f1b8608cc1a1db31dffe26a06fdf81b1f836288b3b3195bf0ba8f25d3ac17cd8e9fb7804c71876ba1b13fc4340c1f760907f0c0af95e0cf24f0121df87b5177f6e80f6e2fd188f5f82f27800e3f16b401e0f6229fbb78029fb21acbdf17bc0f6c6c318e43f82427e0483fc6740c88f622cfe1790c5631ac119039cdbd01a66c6d9688be57488869b42f1978e59c8c34c2c71f93bc497b8f0dd6468f545cf48d3453b8f9d7fe28976ae3d22f8099d607efb6f287a599dfa13154033dcafb662b924dfad2f682ef924263cd400c29fc27287949480b9c3d358c3b5494ab086eb333ac17c7969d37804afc6dde4594c70b380829fc320370f0af979ac8ddd221e9563b4b15fc0546e1954e517b1c4d82aa56112e34bba00f8114aade361f2032ef8650c769b80b05fc160b70d0afb555d813790e71d0b58e3ace1540586bff59aed7484b58558fb145e88f58cb22e1e1db082e9352c07eed00039f0eb58e46f1734f2b7616a776c00b5dfc084776a00e16f6235cbce299ae5e253c5ed7cc759f2d954b65bdd11697399bb190d8fe03532ea478985e5b39cdfe739bfac152ecd9fe8eb2fba09aefc6de85adcf12b98da94d24f35f72dccca2e3a2b8faeb352edfbed26d072f1ef59cc3db6be4a9ce0e226d059756f4eab3b95307253c82ac9235ffc5aec48ac157671b991f4c212f8fbfef4c0241530be247da5f83592294cac5ede0b1d397eb71f781b23dd15f32718a26b538ef38d4babc2c914973abe5125e2dcb5b640eeeee3d536fc2dfebca1fce91dccca6e3a2b77f6580999bb764e1731562e6cf46a191943f0975869057ee5c7b27731cbbaeb2cdb25aef89b244e3f2a656a997ef0980bffe2c7b6f730db7ae86c1be3b16d8e889d55d2327eb7bed12c791fb3a4a7ce9213939c9f85bf89dc723a7c7c66b50f2f87ec702b7859522baa1930d7e315ac86cbdb3ec0a8f7d2519f1457da98cddc5dcb4cc8d53ec4ecebadb36f36a157f1a7fb8a60b8556e75387c9241219a932412ab1f6156f7d159bd534cab714ddd7d93ddf3de5c1b55691cbd4f6ec3c4e6c7985d7d7576ede6f156b8736c2c7fe567d14d1371c54579b58fdc7f16ffa5a16cfe04b3b91f562efbabcdaa38e3fb75150941792cbced62b8be1629cf7d06df9c241a7b7e2cfb14b3acbfceb2bd7c5b962f7e89aca9fbb12548bd3e9154fb19c62355c7e364434ac07c21c1dd3bdd4f19982f9fbaa9a5714bc1cf31f203122f05c33988eb418d590a7e81d937309e7c93a66e4f5debff12b37990cee60948eea24ec7726bfa6ec795ea03582863b7384a679a16ff579845693a8ba613e60faacc70b7d4734bbc680a895bfa3566e9609da53b326ccc499753475a50289eb9d6712633452c5789be8522a73e109d6e13b7ea1bccaa21f1b4b023c38539cd02110b55cebbbc2c5c19a32e1929a3e12cfb16b36ca8ceb229f5e62ff1b5b163952d780f50a2f9c977988de93a1b67a03ec94bcfe5ce4bca56779fd469e208800a594bc1f312bdcc86ae897c8fd93a4c676b09714da4c6a99b55094a6e5b7ba1f0f6d2ba9ca7617a9712e1f403c669b88ed38246abb1c526149cc38f1887113a0e937da60d1352c44f9885237516cef269e11ec2a3d72231d218f6fe8cd9bbbdcedef9849e5d9d405da32108fc821118d5507510376f9b046a20f456fd8a599581b574fc5a355dbc111d43de3c277eb97eecfb0db32f5367df0e016a8e35a234e21bf4ae90ad21dcaa82a877fdd8f43b665396bf38f3e63d9344af578938a7a53ecfa32c3dfec0eccbc6ecf3d38be3da3a43d623c2bff2f1c3d8b5c386aa39fe89d997a3b32f8dc5ee5d2870085368f93f4ccbdcd83de57e62213fa158a0f4bdbf30ab47ebacde1e4d5bea6cabc83c6245dde8d014d137acab8b25365af637a6f7189ddee3eb6d71cd1223edbc2fbf4cf67f978b4dc8a3dbbfb16220f116e43f983d63b11a64ec34c25bc379a25655ad2957e31999e3b591150d68e1bf9885e3e26923ebfb186709df33a79f914f58d5da381eeba18aa71f201e2b13cb3112b73484593a4167e9ccb862d3df385432e33505b376079db57bd61bafb4fdc7d43dcb4d301a3bfaab8f45d72d95bf97cba3208ac45778bd92a69fb92966df4e3afb721ba83ed6d0256433cc8a9d75562c62742d58656be27d58b84ffb21d21c23b20b16af30d429c256d7ae1a50178d35ea1dcb3f133d45b60566c5c478ca186c0e40be78eab6e9dcf6b8aec739b1b1ff442d6d89593a09eb718ec7d2f8661e267b96432bccd6c93a5b47b258f3d82639da458f4453c4506b4ceb29d818a33e1f8f5e19d5587d0d6d308ba6623dda7ecb367d5d2e9ef22d9965605b8cc3341d87e13e38a8385587913554ada41da6f1749dc643eaada385e7059588a73c7d354cc9dc1ed374864ed3b128db684f8fd4dc3d9b3d3c0242915e3a60b6cc8c676e38d6e2a96fee48b25b3bdb6156cec2e68ff8cbe7dc1a52f4afd1b9b83a17118fcf682993c4d82aaf67fab1b92366f3ae3a9b077b62361c26756aea84e9b99b4ecf6c8f9e307ff2ea3c43ea1c6ffb32d17a6967cc82d93a0b9634724d1d7a60bc294f7de3874a178cca9c78668ba810fde42a61cbb014d730b94957ccb2b9f1d4e0fdd62c82f713246e6937ccd279f1a44dacc5e5faf81896ebabbd15feca8f05dd310bf2e29f19c9c3f43f33d2b50f7bde5031d403b36f776cd42376f91d3ec4d3aba33a4415cf35b0034063e53489956d3d31abe727d2dbeea7059dacd544bd300bf3e349797ac289958af5d7e75b38ff85427cd1ee3421c51dbba810dff03a50063f3736945957ee8daa2bcf4645947de1e73cfc722736789a28a82bb9f8a2e5d8120a52dc5d05c49fa1f2d07037fb0fadf03072bf2c13928b80b78e1284dc19f7bc07739453e729155fa9e5ddf559a12bc34781521c5a57bf4d7b23cbb543a116d22225cb21cd075fff73962ee0b13a40c66a4a06afaa864624e84df56bb19087d644ef43dda3c8c2d4a1d3dd153057b695435caebbd340bd92bdc70a79256f2f04a8da4dbde2168024ae13d753b8933b65b58ab903396d1dd42d9aa56472e27b5062e19b162d15f4f344e0f89a2d1bb0bddd348c6d4f4a6c7c9f87a9a2b25fe980732750aaa21803586d0542be504e21dc8b12e176ce8d6adbce14233f5c40a1a8b1f2797af3d81a2b80edd83a0c6c1125b02e22a92e65992c3cb5d166709bda86c12da604d749038e0b5ceb7cc4677ad48aa7c556405bc6c2d096507b5b64f29ceefc5d2a27d1aaa964aed7d9006e4bbb30b8bda9f3b5c8758e4be57ae74a590cc461a101c0b60e0f03db87125837c6db35d57197a336c03b0394a24b29e1b501795b81f870a548b6555660ba6c6418d3b264619a17d19d6b03a6abfa86311552621203d075bd610b1ca936e0791434969653e26905bc28bcecce06445d7a84111551226a2d327377742d9c79db51e215a48521155342eaa0a922a869e07c3a891db9d25f23c2b84a28713517c9aedaaaeae6c6f661382b28e138095b94686ef78d9ab8e04e939d2feaefb58c2f10e435f63c39d86103c089fdc2005752026c093275ae269fcb6103a0259dc3805651977af3c4607978fa9f1d8de596c0874a93e5436a45ae0d80d2bb8601ada604c4b7d556bd09d3d87a61756d5d8b8e2f5728168d96f9c2c38a85bf953901da0091ff5110d75042e45b824378bcb79eef345252b7c37db1e5cde62ea0ffbe8c12653b99a7297fdb204bcc05d674cfa481bcad3c591d81bc9b06ce7f525d3536d5cc8e6c1506b796ba5f0b8283cbf527899e2e3e681fde98c006782d412f6a0525bcb6a0440daf3e77f7bcb001d444503baba4ee6e9e2392df1acf8686539dd7ab44483600e3dd7f0ad8bec91dd8889cd1596c597ef63bc8cfaae887d1785562aa08dae68ac6d6666168d5d4de364d8cfad48ac0c37ba5867717ad76ea70a596f4b556b60883aba104d71e24535b076bf9c43b05ab967e6a803b8ba74288b1bb1db023489eeba87bcfe63bd0a6b0f8b7d9b60160175128b468e611ee9d119ff8fc447fd4f199941d98dba6ad144f6b64f91b31b3922f38334ef3fde0ccc8f484fb37d2ebcde7d2e39ebe92ee7b243d3dc1796ce971d53ad3037658a4fb989c98ee2b0b4c8fbb2e93eeab004f4f283f49f7d5c44ef755814d8f6b9a5dbaafb965e9be5bb63a9df1d944e951033ee9319b83e9da2efc746da76c3a32869b1e6386403ad2039e5e4f2f527a426333e9e8106a3a98c39cae19aa4f8f6bea517a1ca38fe931a69584971ce8970a64f22507ebff3f5f0d9099e63cdac021f013c5f81fb72eb33f755d86c799bbf883972fb137e6cb726a141e1dfa44e91079389faab3e8b4691551ab691f8f8189d46cf2c0ccaa034cc2996d25cec300ce034dc29963254e38efef209370e65a89730bc079703270ae448142f597b2f16c0c1dceb65438bb009c879884739c9538ff64619c879a8473b49538ef00380f330967ae95382f04380f3709e7582b717e01701e6112ce3156e27c16e03cd2249c5956e25c04701e6512ce1c2b711e06701e6d12ce6c2b7196039cc750e2ec2a7116c93e24ef5e3daeeaee3e309974209b51811c032af0c7524f3554fd7ff1f64cf3f7abc4bbf63534f381871e4709b63f835dd5f10fd5d80c7708807b3cf58cbb589d22501c2fe9c950b6a042390b640027502f515a2a6a979140dd410cfe927df0ee017e786232e08d4b3ebc1fa8e03d06e09d4409af7b3d65786422266d9b9379e2af00e6c926c11c6b21ccdf01cc534c82996b21cc1f00cc8d26c11c6d21cc9f00cc534d82996d21ccaf01ccd34c824938b04606f35b00f374936012b6cac9607e0a609e61124c1b5b385f0298679a04739c8530ff07609e6512ccf116c2fc0bc03c3b19dd1818ccc8f3680813791a15ca34d08d710e25cae1126599f35299b8aad9bbf000b1a5be8e2123ed3aee4c85fc2180fc5cea1d80968a1dcb8be5045ded7e6416f45bb60509febcc6ecb78cdc9c9fd0fb3652a1bc1478dff99428874625f842216c3a53e7e94e76fee7deb94ef4acd7b258fbea93c2262ba83600d89b1ab3a0b21fe52090055c4089b29f260b88f7d42952b49ba8d0ae015e7a61e37aa92bcaad4e11a25c44857222f0d28b1ab3a08aac9912768c90d54c6f065eb9991ae524b1daa642ae05e28777f001e0b5727da05a21e5ae3bb3affad41478e5c5c9d8df3bcbf9bf5c065e286a9dfca9cd23969301c24b928170ec7f0ee19300e1a5f42769b8333bd4759250c13d85cbe6191c4f00889799b4ac8574b62619cebd402173b9493849a71792e13c1ae0bcc2249ca4935fc9709e07705e69124ed2b91e6438ef0738afa2de09ccad0665267fde512f2a7cef81a2e76a73260fda3880b11c78e235c94009670fcf76da3433e44e082b9c8fd627a3424486f258e095d7d20facc17ef4a56c8d403759ec69b0468a9aee5cf9960e511b635990c4db0198d725a393ad46ecd7525d37eea3367c50575d177136e5a41932b4cd4192bfde54b45956a2bd1278ed0dc9185b8f7f6d3a194cb215423300cc1b4d824938eb830ce65400f326936012cee12483391ec0bcd9249884b38bc960660098b798049370de3b19cc4900e6ad26c1b47189ea0e00e6169360124eef2283390cc0bccd24988483bb6430fb0398b79b04937078970ce62800f30e936012b680c8600e0730efa48499caa2bbe6fccdd8242cdfc9666c1e04daee7735e6e46d6f3f3c612e4ad60bbf3df0d5bb4d824958be93c11c0360de938c210dde91bc4e4cdbe6db2927694a0219bebe00dfbd94f87a027cd11361b9b0f0ce1d36cff1780300bd2f19d36432ff73d3644e0508ef4f06c231ff3984bb01840f985d1d22ecd524ab0e1d0aaa430f529f0db8c0f9a488a95dd1f3e55005dff9c8be818aaec02f1f4ad60cb8f0b02f1cb9241ff02583b811407cd89c351536ee8ab00b40f948b2aa3ff51d8161f3eccc9900e8a326ed5638deca3ea2f6a0a079cc249ce3acc4f90bf0cec74dc239da4a9c37029c4f988493742314329c67009c5b4dc239d64a9c1f019c4f9a84738c95381f06389f320927e9d94164387707389f360927e9613764380f00389f310927e9514c643857039ccf52b78be23b28d13d3c8e1fd548d82e9a4705741c00fa5c32f67bcdf174cbd9dc9b792080f73c25bcde2cde9d0f22b741219c65f41b15d4bb41d3f20513a112f6279141bd0b407dd144a8843335c9a0ae05505f32112a61094f06b504407dd944a884b390c8a02e03505f31112ae10c0f32a88b01d4574d844a3807890cea1e00ea6b94507358f41852e472ac292c7cb0b16b48e431c99167ba87cfc22e10355a3598421809a3a92261200b47c2ebe6ac27b6f1148325c09fb799bbb89070ee27d970f343c04bdf3067e35ed2ed56c8fcf46800f34d9360da78dac67100e65b26c1b4f1b48d0d00e6db26c1b4715ec9fe00e63b26c1b4f1b48da500e6bb26c1b4f1b48d6500e67b26c1b4714bde2500e6fb26c1b4f1b48dbd01cc0f4c8269e3691b2700981f9a04d3c6cdaace06303f327b36bd8dc7414c076df78fa967d3abc9b52b045c25bb9472b32ab2239819f0cb4f92bd23bc9fedaaecebf428063ef969b22686cf113d9a6b3c3d9e539dcfaa4488364f0c4f05befa9939fbc213b6d4d3a850de027cf3734a94ed63e697d574e85a53a14b015ef845632e9db17f2f905e00e597c958789dcbfe4b0baf97037c5f99719a8b3b1057293cd61d6223f54cb2e3c15f02f9e3d7266d1a4dda2e27f3d4b900e73726e1ccb6126705c0f9ad493873acc4791ac0f99d4938498fbc25c37913c0f9bd4938475b89f31580f3074a9c8358f4fae2696c3de373946a999a433fcff9bc98f1fea2f902ac7bb85359729a961da920f70455a91f4d5afb31deca8d51b7033efb934938c75989f337e09d3f9b8473b495386f02387f310967ae9538cf04387f3509e7582b717e0c70fe6612ce3156e27c04e0fcdd249ca453bcc8702e0438ff3009678e95380f0138ff340967b69538d7009cff4bd6905bbe68f3d43a9227317ed8ed42b9f2b858ac3c2eb17ac8ad0200fdcb9ce50536ce9a2b006da2bf93319d46ed32ebae8577472bd54bb66f4e590dfcf29f64ac856f843308e753c1db11c0fbd7d4852ea40510d99c8fce2091b32686a225ad7992a1bd01786d8812adbfe98863ac5c433400f8698a49306d5c433408c06c62124c1bd710f505309b9a04d3c63544fd01cc6626c1b4710d514f00b3b949306d6c0df506305b9804d3c63544dd01cc9626c1b4710d510f00b39549306d5c433404c06c6d124c1bd710a503986d2861aa4e8fb1c9eff4206b3e3ecac2f0da52c2abaf2733695b546da442f932f0c376c9f0c3f1c9f743b244fc2ef0c3f6f439e22acd0111f90e93225624155a213644e513b8ec1b9e680360764846775b62abd708ab4164f9e55290c8b74b467e195fc96d63c331137869c7647ba97e9d4681c83fd78ae4cfc595d3a2dd4485f641e0a59d1ab3548f5c124898e0d3a8505e015076a644e97fc90b61659dac685a057076310967b6953837029c5d4dc2996325ce6b01ce6e26e1ccb512e7730067f7647473c4374d26dbca3ea3ab00cc1e26c1b4b1cfe86a00b3a749306d1c353f1bc0ec65124c1b47cd2f00307b9b04d3c651f39301cc3e26c1b471d4fc1400b3af49306decfc3811c0ec67124c1b47cd4f0230fb9b04d3c651f3e301cc549360da386a7e028039c0a40625e96457b206e5ee00e740937092568fc8701e01700e320927e9aa35329c67019c6926e1245d404d86f30e80733025ce4e12e768e7ff721978a1d8ebc3f6f540d7b130c2219408d52629f50fb14d61deadd0263942abc476bba49ba2fd1d2282fc38f0d3a19490fb4ac865ce4b1c7089dc85661e537bcf446603615348c192ed3e730c009b4e0936d503b64ccc0ea91162c2f34362d54e6dace8d702bcc31a732a43d2ce7c239bfa9509500ea7443940a09ce5bc345f00e3fbc5ae939f87bd75295b2380f34dcd8b9c7fbbbf4f77ae258e58c2fdb8c9ea02ad404136a2312734d89fec7701be3a921265977a502a4b49e785aca62af59f0518b74f46e1143dc72ede930b083b9bc94e2ed81fe01d65ee8a61c2b14fb2298c1f82bc342319190056ee873300c27c942c03180d3c349312233f5b234fb6e8d58615b38467f2646f5f59be1df0bfacc6ac77464e4e24f4c1342a943b0194d9c948ca9975388b45dbdeddfcd4f61de3b7028c39d4431e1cd85411700973f7a0e1afee2f76457271ce17bff2e507847b23916da33201c0cc35674511611d93ac597925286246270365668cce0fbb7b42df045e3926199dc9b9ffb9cee4f500e1d864f473726f9c264aee5aa1c46ce79322915fce63fb89eee32ae7375e6daf6436ef26371d801d67ce9a221b67cfcd0628c727630d66aea7084a4202275b3574108037a171fdd01545be6a681115ca96a0e4dec19c05588433e5c8da38d703943b2663543dfe3308083d936c2fd85600e74e26e11c6725ce1f419eb9b34938494f7521c3792dc0b98b493849cf1c22c37912c039d1249c63adc4f90ec039c9249ca45b4a91e17c00e09c6c124ed2d304c970ee0a704e310927e9f1776438d7019c534dc2493a139e0ce72a80731a254e75a86d0efb2f1d6a5b00f04d37696e7116653f1119ce7d402b688649384917ad92e13c16e09c6912ce1c2b716e023867998433d74a9c0f039cbbd2173d5c963b3ece3f7307732b654fa78df335ba83a267374a7c2d858012a7d47647c6b964325c64b3d69b035cb329710d65d1bde89173d7dcb516e5e2df7c20ad56889c260073b30a04b5244c66dd950af668007b4e326a9559a20afe5fd9757314c819e72663549c0fe9ce607c98960fe6ae14e3e255560fde1e0e3c709e3933d36ddce1a81078631e25caae3c8088523a9f6193b1aa2d2c825a029fdcddd4c9d3a4dd186493a79b011f9d6f2a5ad2fe4b32b41703afcd4fc6c613f14d83c9b1724fae5701cc029360da38abe83500738149306ddc93eb250073a149306ddc93eb1500730f9360dab827d77300e69e26c1b4714faee701ccbd4c8269e39adddb01cc4526c1b4714faefb01ccc526c1b4b1cdfe3a80b9c4249836ee4afc0980b9b7d96bca09db44646bca0f006df77da8fb976275d5b9aa8f118b07088ba36654205f04209726a31324da4fe3e906b1f138efcb01da65f43bc944a275fbe039bcb56c57315a5419732612a1ef92cd436a02f2d8424ac09d05e0fdc40b6a0b9e02a1448dc849f91a60bec2b7900e621a15c41e00e2727356acd9d81d920b50169934cd703c65158a2c79f703f967b14938c75989b309c0596212ced156e2bc1724f61526e1243d5f880ce71500e74a93708eb512e77700e72a9370929e4b4d86731bc0596a124ed26dcbc87016029cab4dc249dad74486f31880738d4938490f1423c35903709651e2e4376a3738fbba373a004ce52679dd78ca114b32af6b07aae76b4dc239ce4a9c3f03efac3009e7682b715e0f70569a8433d74a9ca7039cfb9a8473ac95383f0038ab4cc239c64a9c0f029cd526e1ccb212e71c80b3c6249ca453bbc870ee0770d69a8493f4f44a329ca500e73a4a9c7d58e4c92c9c432de35313bce7b17897aa128e4d92ad25da1554e7f7a3c43ac48375398b1e3d8f7f9c9d10355943f469807a7d3256be8d63ffb5fd609f0199c08664cc0251de5a2dfc8f6701d325bc12ed041b7b4fbe3a1c78e7fee62c2ab47186fc4280f20073176c11cea723cb43ef0419c0819468d566bb591e5fb539f79c0be01d64f65c4fc2e50764733dd781647f70322afc70eb7c5d12b7bbac7f0b78eb21e6cef824f454ba65afc0530fa5449be6a9469531b80383feb4d619f2e3a41dd1388a0a7329c07c983953166d5ca6b017c80c0e4f06ca4c51add24d9d4d52be9a4685721a407944326a012af1f39cb3d8b309c67faf43654790e88fa4c4db5a58e3da9d2f8b237e3aab7dc55117e0914799b4f71c693f3e9907ce031e78b44938493b9ec97056039cc79884937458840ce7e900e7b126e1241da127c3792bc0799c493849e78f90e17c1de03cdea441bbf194bbd8900ddaf502384f3009e7382b71fe032a4a279a8473b49538ef02384f320927e99ec764382f02384f3609e7582b717e05709e6212ce3156e27c11e0dc68124ed2d30cc8702e06384f350927e9767f64388f00384f330927e9e1106438d7029ca753e20cefd1fd5f1a28de1e54dbcf48c6283b0f7885f044257bad7cc53e7821e07b6736fe963faa90b16f46d29ec00bcf3205a48d53bb760620cf360524e1b83919c82301c8734c0149d8cd4606f26000f25c5340124e352403791f00799e292009f744220379260079be292009abde64209f04203799029270aa2b19c8ad00e405a680249c3b4406721b0079a129200937de2503f91a007991394b046cdcf77d0e40b999126577e6676ae0682b0f1ee900605e6c124c1b0f1ee908605e62124c1b77da6c03605e6a124c1b9755b505302f3309a68d05500a8079b949306d3c78a40580798549306d3c78e46f168679a549306d3c78e45f00f32a9360da78f0485790ccaf3609a68d2b7aba0198d7508f3186cf9f9e2581963a1ff31357f96764f0c8564cb407c9fa5a4a787d997785b97ed15e01ab12f37eabd90a21ac9c76a86c1315d88301d8eb28c10e62de9591ee3adef0f6125c209f42103bf1db58c2ef0792fef5c9dccac705ca979ff28c60aab67bcede23729e00586f3067b9a98dd5a691201bb831d96bcfe3cf6109d192e5b0b7012fbda9313b91a732be667239e34b5648137c1a15ca4b00ca9b93998f963a4a2c64fce0fa5ae6dd072969cbf63752617d1e60bd2519b3df46277fea20d902aa2341ce796b32da48f18d116559d9e03c1078e2169360dad8e03c04c0bccd2498360eb9550198b79b04d3c621b71a00f30e9360da38e4560960de69124c1b87dcf60530ef3209a68d436e6500e6dd26c1b471c8ad1cc0bcc724983676c8ad0030ef3509a68d7d472b01ccfb4cda9183b408226b50e6039cf79b8433db4a9c47019c0f988433c74a9ce7009c0f9a8433d74a9cf7009c0f2563dd2e9f8abd0ef46426656b47327cf35918dfc394f8f88e7d79ce8d7b2e0617b5d6797d95f37a8518bcd85f8cad978a3bfb303603181fa1c4d89f85371b754725973aea563bea14091e7cd2c224c677cbe423418572b0a298a925d33516c22d06701f4dc6d05a229be3675bb9ad736b907b3e662a5ad2e62619da6b80d73e4e9db3c62ae795a5a4436bab4344189f011efa0425c6540d467f271010f67d929d40b01ee0dd6a6e06403814479601bc0f32802729d10e1068670aff9ccff8387a89ac09140b516a4ad81a1101dc8f8b9c7fbbe2a73b57be4d79b185f582d600f05366670d84a39f6459c3b9206b783a19051836396c8ac81088cf70aba02ac0c6038ccf24a3a714360d543b2bdcf2b2bb29d00724f96793318b19c2ac3f87b517ec0200f6394ab0eaa4c11cf65f3b69f02a80f0797326d3da3857640a40f90225ca813e50e63b617221356c9ef32fd557554d5b2ced4b552c4d00c5d28b94887bb2c899a095a2a36f554c9fb57144f44e00f4a564f4ebc7bf0f3c214eb2fd389b029c2f9b84739c9538bf0739ea2b26e1245d714c86f36a80f3559370e65a89f34480f33593708eb512e7db00e7eb26e11c6325cefb00ce6d26e1249d3a46867316c0f986493873acc4590b70be6912ce6c2b7116019c6f51e26c23acd11d174a062d8d0a5a3700eded64f41e658abfdd2b9ffe90cfdc2e3a7b3be0f60508dfa144d81ef8dd14d185c13fe713c1ca841fda37d0d611a07bb731d70727ad6c26dbaff30dd0ea7eaf315146f607d9b8446b6f80f2fd64e58945324197b0f5323f4c428ffa6f54089f0209fb83648c40728425751bffa89f6d1f98780160fc30b9733cf41b53cc901f246de1ff282ab4fd00da8f4c9d3e435a11272bd53f07683f36152d69294f86761340fb49328aa6ecffdc60ef0880f0d3642c3be08785257dd901d9dca2c100df67e6ec8b986de568f9e500e6e726c1b4b1da7e2b80f98549306ddc59e15200f34b9360dab8b3c26500e65726c1b4716785f300ccaf4d8269e3ce0a970098df9804d3c67944e70098df9a04d3c69d15ce0530bf3309a68d7bcb6d0130bf3709a68d7bcbdd0660fe908cf9977e261510d635c9066e4780fef61f4d034a58df24033a1200fdc934a084ed7432a01900e8cfa601b571ae462a00fa8b694009ab4b64400702a0bf9a0694b0994906743000fa9b6940099b9a64408702a0bf9bbde697300320eb97df0de0fd83126f73e766be08b456cc7ab36f108d8f6d29547f26637242565d8ba8989532b5feccf60da89e0618ff67d2f4d5f1946d74b2fcb10f48c07f9984739c95384300e7df26e1243d0e8f0ce7dd20b1ff6312ce5c2b716e0638ff3509e7582b717e0370b2a606e11c6325ce9701ce90493849b79322c3b90fc0996212ce1c2b711e057036310927e9d81019ce4a80b329254e750256b6a7759e8436105953721e80d78c129edaee84cf739fcaf8aa9f4a96c74a6493d2dde4a444082c1402e0a6bcd5cce6e555e90071f36424772cb1476fb14fd8f34e8673366817b5300927e99c0f329cab01ce9626e1245d124d86f35480b39549384977e720c37923c0d9da249ca47bc790e17c01e06c6352cd73bc95d3143a019c6d4dc239ce4a9c7f808a523b93708eb612e7cd00677b9370929ef64286f37c80b3834938c75a89f33380733b93708eb112e7e30067479370929ee34686730f80b3934938490f1e23c37928c0d9d9249ca4cbb1c87096019c5d28710e63de0d7479c75db1c383ef9ba0ec0c6f56010383414d72fe5525662991eeb5d03e8508f8aba0a2df95127857167bf94164ce4a06926c939fa1c073bb9902d2c6dd927a0390dd4d014938ab930ce46900640f534012ce372603990d40f634052461e94e069281c2a69729200997659181bc0078646f4a90999e6a522dba6d0fbe31d514e78d72479f0a71c74d4d52a5e9ef1011fec7801ff7a1c4afd66cc6db774f38c981ace77e0680d9d72498840b60c960ce0430fb9904d3c631a51d00ccfe26c1246c1f91c1dc09c04c350926618d940ce644007380493009db496430270198034d8249583325833919c01c64124cc2f61219cc2900669a493009370a20833915c01c6c124cc20dfdc8604e03308750c2c48f0c9deefc5d2a30163bf65608c1f61f19ba9285c10ea504db47809dedbc5024e625c3c5d68d76aa35d912ec16006b3a25567f5bf0dbb8fde40290f48751a20cb6853461794fb664e116e0a5c393514461fda3915e3ad6ca0d7cc7023f1d61124c1b37f01d07608e3409a68d39680e80b9bd49306ddcc03717c01c65124c1b37f0cd0230334c8269e306bed90066a649306ddcc07718809965124c1b37f01d0e606653c26c2e04d48805afb5acdac29176de2255a8722851a5b2a05ba311163864edf2f9c0137329f17666e17ea475a29f882fc75e2efa8f92b4dbd7462a8855c0474753421c10d847b3acf4d24781978e311d3061e94e06f87c0078ace9806ddc82f24200781c25e0412c72c25891e890e36a70950b249105cebf8b3c15aba9a2f34ee5c8845e9c4605f93200793c2564b516040e8a603df9e44321643e9b068ab509c9e8688ece14e2e96ab6f1acc245c0537748c670487cad291b5bf959c04b77a444a9464213190e219cca48e6a36701b03b990a9670c22d19d89301d89d4d054b98159081dd1980ddc554b084ed2f32b06301d889a682256c169081cd016027990ad6c60ad6000076b2a9600907a2c9c01e0fc04e31152ce1740932b02b00d8a9a682b571524f09003bcd54b084d328c8c0e601b0d329c1aad3e247b346382d9e0cdf2900df0c73fa006c3cc3734f807266323afee25f2866e38ad022d03b35cb249ca4bb8893e13c0ee0dcd5249ca47bdc93e1bc08e0dccd249ca4c7ad90e17c0ae09c4d89b3be6539deae681be73c3f0260ce3109a68dd374ef0530e79a04d3c669ba0f0098f34c8269e334dd1b00cc3c9360da3880773b80b9bb49306d9ca67b0d8039df2498364ed3bd0ec0cca784d99f454edae19d56556c9df85b4dd9f9af4dd6d92ce0b668e6113e3d4af81451c9e68616b1f0b13da3d80cc6e734b907fb1439f7b345a75b0d5be6f8da62e73f7f31b2b7f39fee79489ccd348dad6795e22997572c64973bbf72cdaa59e6100e8c3b482be920e9a2d36592c3bcc679871f09cc43dfc0f2997b2cd13ce76fb57eba5620491727e2e639cf6a45f4f310d63a9aac6255c2e2c8638bd2432d05a712e924eea65fe952d775cc9ded354b76f7943a36170a4daa9c779a8a70dca64b7aa81db853f3716789ceca6aa1556be10baed7e4cbeeca22f10bffd29d47a6ffbd8df8b244c64195e3b27cf1329f8bcea33d14ea28639a5b3947102a74c8148a6b419d2e197c5fcfd018e72fb73375545d37ea28b9b159b9bc53cfeb97c9e339b6b4053c3243fad45ed6601e5a9f456ea2e2dfaf100bc14b84d459f55a5abf7db8b7b78d112b19fcbca9ffb4fd0b79bca7c8784fc9e09b1487b21ac0f7ead7680f187243972f785234deb7f3987ba05b89c87b3704f2edd622af83f24a45b819c3cdf4eb86b37d4f989fa5648c48d4affd6bb417a55fbbd2dcd1368fec197158a78f07afcde1b72a6529a97cc14de5ab18dfb7bc7e127d459d009736c9b95b296c2d1552cb99fac3cb4b5e0fe5d9d1224a9eee405b25836727ce17582aa5f397fc5f8ec1c3cde439c6e2884495c913d592fff3f606f276fe5f7751702d70be75cbd112a7de5ce5fc9bcb4b2d4f61cdfe1f5cf05ddb31010400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/381387c4d58aa934db02cb81cc9bdae4.asset.meta b/Assets/SerializedUdonPrograms/381387c4d58aa934db02cb81cc9bdae4.asset.meta new file mode 100644 index 0000000..115caad --- /dev/null +++ b/Assets/SerializedUdonPrograms/381387c4d58aa934db02cb81cc9bdae4.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2ee7a84e218c5e34bbf6105d967cd16c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/391e1d5503d04f14dbf432f746c81f59.asset b/Assets/SerializedUdonPrograms/391e1d5503d04f14dbf432f746c81f59.asset new file mode 100644 index 0000000..4372fdd --- /dev/null +++ b/Assets/SerializedUdonPrograms/391e1d5503d04f14dbf432f746c81f59.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 391e1d5503d04f14dbf432f746c81f59 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c94c7f3f0f7525c8a6ba1040f9a90046b81e252b468851642122025401ac1ea4e95babbbbbbf75777777777f7f7d97d767373cfed5ceeb9cd5c7679fff4531eee91d999efceba656433ef4f64a0f7d74236974d6083d90256c4d6b235debf2678d7d5de7ffe2f757f0e2bf7ae2bbcbf0bbc670359660d5ff23f7d231dbdbfa779bf2a58a5f765152bf4ae25e2f93c56ecfd7b9af76db1f78bdf5deefd5fecbd15a9e77db4804d64b3d92cd621d2ae06110bc54715f25e84db1569e4fd3d9e6df49e160ba57820d9e25107efaf79de930af16cb5a7b47a6f0fb6a7306bb5f7acd0fba69c957a329709898d1e9ecec43f987fe92cafdbc96b27efffc6f2dfdbc87f3792ff86efd797d72e49bedf157cd718fc9b13ba20c1f7dbfbd7c8eedeb501631953c06ffeedd7f2bd6ebebc8c9509647597d71ef2da53ca9c9a84fe0de5b5570df62692d11bc84a86592379ed2baf7da4bed3520cbf9fcf28720e90c759ee01f4e90bc26e0c9ef37b5906b6ab785c1c88c7c57e3c669c21e3ef63f97e7f791d28af03a46cef9d36efcb7b83e435b306bd06fbdfb1112ceab35e98db94c9dfd9f29a23af43a46e7b495d7706bf4d7551719a2b65ee29c398aeb9afdee7cf67c8df79f29a1f88afa1f2bd99f2f7b024f549c6ff944e4b6418b3c06f8f63bda50964a9785f1a88f7a5f2db137c8ef5ee08d803fc4f2b77b894373b053b0a027614f8bad4cf8a7daf461d947ce957916552ee1cf09bcb3d25a46df5e477b7c8df2359cd795be7249e8df2e53452ac47fbe13468ebdf6f308ac5faf28e35e8a9e2b63010b785526ea994abec1fe3ff8e28cebd801cfefd2e01b94501b94552aeca238625a9e74ef23a5e5e27c9eb44569d8ef332e5bd71f23a418659cc62f38062f97c6cf4dbf64f87e496288e2607e25aea15595e834cf5bd64259e27f3be7a67aa81ceaa3c6a9264984de4756783309bfabed0e8fb802f8cae41e6749f6fa34aa08327a7f17ef2b7ca67553eaaf28892801f9424e10735e9325beac2401c78ba3469297fcb7c84ed12ab8b57598dd509fe36d429b242ca9c077ef3eb4a797f3ef8cd759de387d3e46129537ec7e607745e40a7b3576f16df356f067c2399ef12f9d722dfbea639beeca6ca9e5d03ba4d8beadd6822f856e9914c7ad85db2581560bc4aeaa0d8ee11786f01f8cdaf7b47c313fff6be6da67c6b7b709f7fbb10fce6cf774b52d73d59bccf7239ab41d8ab65d832ff6f76827c772f169ff674dff26b29b8572ae5bd2dbf5bc2e2cb31f51eb76d11f8cd9f2f4ed2b6a51afdbc709b8f4df06d018bcd7fa644fda1e1f3f2de32a9cf1a169bb6d6c8e7bda3df54eb5ce8ff6ea1742992dfac055cd6fafa6dabca53553695307d39bb027090bec35646c3eeda56de5b9e202ca907537ea3ec5e1495d3b4a3d45de563d23fabd34cf05d7e4fd9adeae415f25a1e7d77e815f2de5a79dd47ea56c662f266b606dce7d77de4f35dc16ffedeeaa8ecf6f5e43dc55be9aa8bcfaa80edba3c20919fadf3dfcd5765fc7a9f6d8b7324b787033a14b1c4fe2bd336db20ed2b97f6ee067ef3e7ad819cd6f259058bcd732a7c5d5a66f9bab45475d08df2baaf7caf527e27f32eb609dce7bf65791aa962b1f9bd623716b00fe6f735d93b2cc9f712c5c1817ed8d56d8383e4f560799d08647792baaf8bea5c5d5f3c003ce3bf65bd91ed1f6b77425d0e91d7e635d8d319bcc7af871ad89fe85903793d42dab69ec5b697a4bfb6de3581ac237d4e1dcf90bf37fbdfb4513e7f94ffbc95f2afa3814d3c8c0d51d62d7f97cf8e91cf3602bbf797f736817b87cb7bfb46ef4564da60c706e2678fc0f3e3800cddf3e3810ebae75be4fdc5beee6d545a3e2160cbfe015d37b1983c8a9d186f6b6453206cd547904c5c9e24bfdd2f1097fbf9f1d2b657025927ebe3b29dea8338251097a706e2727f4d5c9e269f1d00e26d80bc77a0267e0f021c14bbd391b854cfcf007275cfcf043ae89e9f151b97ed543de66c242ea1fe302ecf89b755bc03c3567d4b89e2f23c793d575ec7b2f83cf47c791d24e52e4942ee05f2ba3a81dced0372972621f72279bd3081dc8b117d53094ff9baeae73998c5fa3affedf96d879609645dc2b4bede3153febe94c5fafa652cd6d70f61f1be7eb97c06f3ebb1f2de612cded70f077ea2ca862bc03bd057d5f32b815cddf3ab800ebae757b3185fefa8dac3d730bdaf43fda1af5f1b6fab7807865d90445c5e17e0acf81ec162eb2b47c8f851faa9bac16696b86cbcde973f5cc5f30d52de9152fe32f09b5f3707c2957ed149b67f3babb67a33797fa5bcafeae037caf05e96bf6f92ef9d1078ef66fff7884be4ef5b03fc6f0bf8cad1517fabb6e516f00cda760c8bad93dc2eef1f0be2ea18700fc695aa9bd5c455b5c9ee0cf03b4aca2b04bff97b7747f51ff1b9bc7797bc82b4d4eab040fc36037adca3f7151688b3d0752465f3bd35d81c264f3a8ec5e649c7f97eb0dd2509643d28df793cc13b0fc9abaa6ffc4fca3f9ec5b67d64fd853d227f6f093cdf229f5f1865df7e31d043c9e6df1425d047d9ff98bc2add1f95e19cc062fbd354d93a96c59711a9d663537da6fabc4e8cf51ff1db8b87aeca6ee58b35f5cd3e21af4fcaabac03474e0a303829018341498695c0aec8292cb6ff41f5cb3f257f9f2c9fcb7e84c86981f7659d8d499d22a706de3f23f0beca8f9e91bf4f8f7d9f3d0be4f0dfcf456d13baf07bcf837baabef742944f37996744ce8c0d9bbdc862db77aa0da7ea74cbc17790817aae7ce0ec804de7c8df2bc16f7e3d3720f7ec00ab730372cf0be8fb92bcbe2aafaf446ddc710ef806f0642fc7ca4ce8d3cf4919e7cb6f4ac06fcfa73313d5ffd5b717c8eb8552c6dee0379721eb0e9965b8acc845017e1780fbfc7ab17cbe0afce6b21f4ea09fec97895c12b0ed12ffdbee2c896f2f95d7cb02b65d26658cf06deb3e2381acd7e4f5f5401c2a9fe5f2aed0c4abaadbc9ba41e472a94329f8cd7550e35e6f30bd6f5f1af87e75ecf73dd458c99bf2fa5640b72b596c3fda3bf2fa2eee93ecbd80ee5745dfa9d6efed807e5705f45675cf35400f759f5faf61b165d435f2fbf7e5ef6b03cf651d543b4e9f288da83eb1eb586cbe7f9dcfafa7eceb666dc0fdc68177649e1ab99ec5a6efd681fbaa0f731090994cdf8f0afb0616dbd77d830cff7ddfde5e2d03e1de18b0e9c6c4727ae527d045c9bc497e5b067ef3ebcd2c76dcf6662973332e33720bc24bdd4f95d70752cead2c76cce4565fa7de2d7d5ebd55dc7e28af1f85f42135be721bd04ba6d7c8edb1b645541dfe53e03feade67e09eac9fb3cf814c65ff1751bd7694e9217207c250dd57fdde89787d25bfb933c0eb4e9f579fb17e987d547f979a7f1596d79752ee5d01bfbc4b8673850c47c9f8465ebf95d7b1d17012d613bf93d71f62c3653f45bf9facbe57f9e38f5297bb596cfdec6ef9fcb0e8b7ad7e8f951bb9477e530e7e7bf6f45579bcaa3342fffdd997d55f951b89fabcdb82ef7e09d8f46b54afc189d8abb896ba47ee0dc4f5bdbece59037d5959aabefb478a71fd9b947b5f20aeef93e1c8fec32ce54b7fcaeb5ff2fab77cfffe407cdc1fd217fe09e8a3e45504ee3f20efabb18c7fe5f5bfd870c57bfcfa208b2dbf1e4ce0272a0cd5862a07bf3d16fdd41893269fe33fb9ac816a1c5467a3fa0ef8492412083b23aad7907a096405cb9c8780cc877c7dfbcbfe8ffe45205cec5dd5de5079e5369241959421d348a41e789e6abbbb9594f170c0e71ef67519b021f6bdeaf71f017ad767d13e31f88e6cd3471e93cfd781dffcfa2890f168408f45013d54fb40ce2f8d340261f3eb132cd6e7555b5297f6dac9771e0fd8fcb81fd6403526a7747b12f055df3601cf403f61f5f3a60126eabe9c7b11793ac044d9f75454df810fc87b721c2bb2ad81cdc9f8c033011ecff83c06ed17fb5ef5fbcf82f86b81f880ac5f459e0fd8abda13b02dfb5c408f45013dd4374a76231036bfbe18e0f162021eede53b2f046c7ec10f6bf041f2b7aa1bbc047c407ddb043c833ea09e077d40dd573ef04a80c92bf2fa7254dfc1b23d1751798bf281546c4ec6075e0df078d5e7917d817cef5779ff35c0437ddb16bc0379a8e7ed101f515cde08f078435e5f073ef27a40cf45013d7f96bf3b047c44ce9f88bc15e0a5da763a5e4ac69b01266ffa61e5c8bec8886a9fbd0d98a86f9b806790897a1ef411755ff9c8bb0126b28d197927aa6f8eeadb51fd57ca4752b139191f792fc0e33d9fc710e5ab19f2fabec647b603efe87ca40be223725d44e4c3000fd90e897c007ce483809e8b62f5cc555c54f9aa7ca49bbc7e1ce0a5fa1374bc94ac8f024c3e9261c9fedc48a6bc7e0298a86f9b806790897a1ef411755ff9c86701269fc9eba7517df3d4bbdd033e928acd3a1f91f379229f07387cee73c893f59f3c35f746ad2d99c012d65d22bd02f2bf90f2d783dffcb966fe53a4b7bc66c5ca88e96f5273a3be8c7e5fdd67a3fa6afa469f4d53bed2137cc7af7d803d70ec286cdf733fa61d57cd976353d5ed9bf53570ebcfb4e368f9c1f1bf9ae40c6031e36c91412c669c2da2d69da871b6c1f2fa552c87885c3b12f93a1a5ee42b704f378656836eda7baa9df04dc00fbff1ed1ffabaaf3f373fc60ff7a981837c2ff22d784f85f51db049d5c9bf07f7be03f7f8f507a9db06f0dbfb6ef8e280dc1fe57bbb83b0f9f527797f23f8cdbf93eb26223fcbe7d302f27e053afd2cc354fe9c1308e31716ed2be47ed425c0e11720eb47704fc900fd8c2a7ca6e6db6d9271d03636cc9ae2401b2f720d9218bb0dfbed6f2cb6bf49b5fb7e0ff8ceef3eab1172fdc788e0fa8f9b6af01d25578d6dfec162c783647f41240fc8e3cff70d69cf9f017bfe0c849bc76a1e07917d3711d9af19f95b7eb31ff8cdaf7f81f81f2aafff807bb24f22f2affc5ecd87503efa1f78f73ff0ae77e5550338f62b7e7bfc776c1b902dbfcb88c8f70f00bff97399c765a8ba869a4b24d3680668376764807bfc5a4f7e7310f8edfdbf839cb3bbc3d74858aa2dbc0efc86613690cf0f06bfb9dc0b62dfcf6828df3b04fc568ca19c430372027a65340236aa7186bb6af057c9b57a2cfe3f19965c13327271ac4d35c9d3de536d9de152b7c6016e4adecb29c8fe54ca68c262d2b1f8cdfde86ddf8e516a3d9aba8e94efb5673175a1eadf6a6e85aa73a8fadaa204bac8ba7946d3802e725dce2839ff6594aa3bef40a88bac1766340fe8d2dcd7657466e03dd5a62f04bff955cd29f1f4de498dcded18601ff8b63a3f016b4d94bcc898a8bc9dd5fcfd5181b0d4bff9b55540ff5652ff5b6275aad6453153e5e84e1ac6fcda81c5d45932545b6cacfcdd91c5946bd5bfd5dcd47181705b26c140f58f8465a0dad2f3c16f8fc1983b10069d6a6020dbb0199d030c54bd54ae09ccd82ec040fd56fea8ca44d8ced1f862b51dca4fd6077cac65e0be1aa793f96c6482bcbfad7cef08f01be6b7ca578e8cf5959ddef7398ded18fb5d466b16535e65c8fe1f556e55cbdb1c2b6fec0335f89c6abf24eb73936af0b990bcd57b19703c45e54d6d594c3f7e350bd5160f94dd195d813f7605ef42bf9c057e7b7c264f0dc856dfa935ad0780dffcda2de0dfdd7c39e3e4faf771aa2f70b286ab2ebf3cdcff6e7266209c4cf9bc0cfc066935a3b77cbe1bf8cdafbd02faf5f2f51b2fe73f8cc7e4f509c8eb93401ebff604ac7bca30e4fa97f12fc786a1d6b564f40d84d1177c0fc3906dd88c1e208c1e7e183c79f130268c08d821c7aa33b202616481ef6118b2bd90d11d84d15d865124c338271086f2957e8130fa81ef6118529e8adb886cf764f40761aaf81e18886fd97ecd5073dfabc06f7e1d14086b901fd6c49cc07bfd63d35044f5a3607ea9f4191cd047b69fabf305957f4c07f7613e00fd5cdd57f939c8372233809e2acdf36b30bf87e500bf62f9fd51013bb20376c8f67e468ebc3f05fcf6f84d5a8aa4c721b172aaf328755fadf195f59e8c5c10c7b952f6df01997901dd643b2b233fa05b3e9003ea524aaed2559541302f55f999aa338bdfa0ce3cae6340ef768130543eb9417239018481bd9f4cbeafbb27fb0b32d45e18f3c16f4f87a94f07de1b16f06db5e6bb6fe0f9d181e7aafd302bf679b55cb5374545ec7791d981e741b96a8dce1c44ee0879bf3cf0dd1181e701b911e95b91b988dc91f2fe3181efe6059e07bfdb41de3f36f0ddfcc0f3e0773bcafbc705be5b1078aeec5818fb1e53fd47c7fb3e35f57df97c11781eb6cf44c5f92829bb04fcf67c679aca6f543f519fc461287911f59dcaeb474bf95bc06f7e1dc362eb676302beb8138be9fb12bf3dbd76ce0ac8191b903336d66733c6c9e72704be1b07ece2cf4ff4d9ee3c2a604f0d766b59485b32c6b3d874395eda20e77fec7c8f7c5ff5358eaa81b1aa0b83bef6eab02646ef65a83aaab275b2d4e324f09b5f2705f49be4eb377d6ce0bd09f1b2c5957fbb29701f93b959dafc31909984cdb1f7ea470483a9ac9815b032962d3a7b786d22d9add0d497356f8226fa9a448f15774a116c25dbe87d5aacdb896c81d8e7ac92e5797ea7db89ac9318e351a14f107f17786f9408a12767c40571675c105cb952efbf62b08d5a85777f8ad8858d6fa456e23d19cc667857fed5523684ede1fd172b65a1176c29abf27ecdf7fe2e13f2967a6ac7bf5993497ccbb5e037733d99fe8e70abbd3b0a6899f7bb5468384ffcbd4e685a2cb49fe6ddab14fbd3ad612bd878efba4184166f7bb9f76f5d98f32532bd8efa8de1b0fbfef6732a9a267ad670edb3852ffe5f8cd4458c88295327cb74582f5be48047c7c5c4ff31f43319dee93c4dca1822904562eee5b26cd12f3d378e60781be32dd4fbb7cf7b18cb4f688b9e0c8feeed8405d118fe75d3cd5b0e78bfe311f5634dcb63d9bceb5ccc3b48645a22b05c5e9698c512c684faf5ebe5704583f8233afca2fb7f5e1af1fbef9588f7c247400351f8c54680a812cef772b539a0f05c20942f15aae98d5145f104b6d21355e2898f8bc11c1e5c431109f1456c4d8660d190a18b06318232bf4e5201b65969e28868546d453422b245bda9630277c5c21215aa0c59ab5209ea9e5b67af997fe2971fd7d7c74b13112fa98486c5cc36ba986992ee0452738990285e9a56db158d17fe47cfb019e2db35e98011aca723d834ddbecd9fad15520abc77c333e4c3560382998c1ee0b68813d6ac0286b0be06610e47d842a315abdf38a015570891dc401739cdeaa6f84dcdb9f9584d870082faa873b74a587a8675ed863a7a6202f552527aaa5538cfabfe4ff79e1578ef178b2a26bf3fc79358e085cde58d1321445b92b15f2426cb47a30605c96aa9b611547b8136aea96618f1461ae239dc5fdb6adc40e471c1c4d00a4f0c8db164d6ce349935c124b73795dc1493dcc15472334c724753c9cd75c9468cd52d4e4bb28976a6a87f8df7bee535be75a2855ce57dafeb7c499c5c3a259d5c3a8be492c9745d42e134c292c9b6bab8e337b7d329198cbace78d4b5c004773114dc12f3b6aea6ded60a53797b43955bebdc58002a4c63ee9f07a4ad155d3a3c9c8aea3c97cb2960aaeb2798dfe6d5e0d4dd9276ea4ce1d47de3ca0053fd30176f83394c775387698b49ee612ab91de68a3d0d5db13d26b897a1e00e98e0de86823b6282fb180aeea413cccb32ee9aa63584ce3ae1a2d1c9e29b58ff797fe28437c3856f8769de4fa3f9a45919a134ef8239757f53a7ee8a491e602a797b5d062b0a8a83d392c1d6345033459c5553cc667b4d84bd99dfc31e9fd5a99efab9de75b9d082dfe75ad43cc09338731e58cd07f4b788e26e12d3d52deaca0a3e8d25431412834521c1ff5ee0ddf707962689182811210dd66ac343c0de572c66327e0c4f9588edfa48ef50b608dd2e3658f1d60dcb69723439cdebba6c2c414e938925d921a649b6bb4e324fb2b91a5fcde1becae7c73411f9795c38d978383d745983a8906daad3acc1ef47e0f2968bb1535fde2cc64f925a2f5c7595e7c0eba4e3ccf7de29f7c228964e6e9219f0f9445d831d54ccffa34f0e43457218934472a0b40a4b003d759ec43b5cf804a0b8ee7e5e9d98cbe67892978864b88fb8cd29f9b15b225e2d619b405d33cedf1ae2fed64ba70d6fc7f26943355657dae0827b638247180aee83a5f191a669bcaf4e32cf6df8d422d31a5616a6f68ea66af7c372d4519a1cf5ef48b81cb53f267cb446f83d19e1840fc092c298647c2481570fc404efa44b63dc552788beeb4cefffb5de17bca7b440a4fe4c51184673834c2fadf3e1335e600f04efaff5def0a71d84d17310e614634d9d6230166fe334f1f673c878cbc6848fd7089fba4d38e13958dc4dd0c51d2fd879b9c1ab252b65d9169b1b668a09209962ce4f95e8832d12315721e23593edeb85b8bf77adf4dece14e540a97896290e562c17796d98381d82e93f51a77f13a0ff1ca061981073752172c29334f9562464be95a713ce2b3e931952f1e11381c3577cf2316c5375d8ba0aeb36889a6b95787f9e7080e2eaba72512d159043357a658b3e9a35ac2e2b64bcb5c0674855887f47ab283cece838bd49c58b4ffe0c56bcd41f7dc58b4fa3cf120b65d3a13d56c11a8665aad335996a244ca63a1c4b0b33b0b43033a5b43042e773a2f7aeac4e7d0e4f5173856c9ef2cc2bfc7ca2fb36c1d6bfe861cc4fc2b36a4bc7016293ac0a7170ae4fae8267a67c286d193821d7872f92843e4dcc1669229d9a63e96224566acfd194dab7d40f576aefa07359d17b5b5ea72e3b51484887dbeea2735bd1cd3c2c89c8af4d3dbb8989b41522532d9299aa9f757713bbe0948b62b3d8bbcf335ef87c80d8258dd797260bdeab05796e5f8168f7624e3e573879baedc41c7d47ac0098a7290042d5aa47614968be2609fd1d32098dc6d45e60aaf6184ced851ab5f76b104eed9d30e18b34c267340c277cac4e38cf98f94a179316e2384c305f3a1357dde4bd24aa9d501868292e136d05d5fe2b1277367a7f977af70a85884c31295acd0f09a3e5788cedee1ab62d43b29d8021d8c390ed449d60ee9e8b93119c60086c924e30af7fedc990fa173fe8287cfd6bb22e1c8e7d8906fb0521b14fc192f952d3643e15935c602a791a267999a9e49d31c985a692a7639158a489443e452a4c24cec084176b84cf0f297c26963097ebf2a6de8c77ea442ba97ef329daaf51e07d5629729e4cafbcf7cbdca298fe11dee751221bcd61d2f92c4ccf153a3dfd35587c169c3f33a25c7c53e4559057850a7536867ea506fdb121d1cfc1849768847f1e52f82e18afbd75bc3ad610af4562f254f4ee10ef6e188e73316d56e9b4e13fa3f116269c7918d2520dd2739a84433a1f3362b5ce083e8ee6e3dbc143364b74f815c8f563eb44311e1ee3024c83353a0d78ce36a3ba623027c56ac1420ce95a0dd29743225d84e5c865a639f2ae98dafbe832cda6e1d4de0d53bbdc54eddd759279ada38221b50ede2110bed6b107164e1516ceba94c2598c915a6f4a6a4f9d641ec11b34113cb659b808de0b13be51237cbf90c29760c23769843f1c52f8524cf8be1ae15d9a87135e8009df4f23bc28a4f06598f0fd35c2cf0829bc10137e8046f815218517614e7ea0a99317636a1fa451bbedb6e1d45e8ea97db0a9da2b3492b3c564c574aef70ace7e0ab724866fe398dca45dbea1a36ead574de1635d4a2b75f1c24be8c3742a8528ca4b306f3a5ce34d1f874c047b63c28fd0085f1cd2555761c28fd408df1c527829267cb34678cb16e184afc622f328c3c85c8309e68be6e3ea82038577ae15698c57e78bc5d2e835e25f6bc4f614c562e0ba40f87eb4c3490d5cf3b5f699d27bcba54f977ade3ed8bb1b46ebb598d6c7e8b4e623afbc13375a6ff69b927e334437af3093f595b5eebea1f42ac37ce0588d0fdc12d2c1f6c18c3eced007ca75f9ac98bb5d429acf62f348e78bce7bbe37c672e129ab43cf3a4d9c271f9f749ebc45e4c97cca0b9dae58fe5da18b6e5eb73e8121756bbe255113ae72a8ba7525e6b327697c363f64be5585093f59237cd790c2d761c24fd1083f2ca4f0f53ae1bc5ac30f6335aad66cd02537b19a6117d2e4167ec3107df2e1a7dc360e00c864d8048bd345126a176759c27d3510721bb1083f4313e1c7b60c17e19bb0ecf54c5d99c2d743a86e2d7fb2d66a718d767a1554f7cdf8255eec3cf530f9f3be584e70169613f0c375c3b7b2f7c3089ca323e00fc6c52f1b0b63d9fe5888e71a1669076082cfc34cd9a33a3afd48db336495e440cc37cfd7f866a356e17cf3204cf8051ae163430a3f1873af0b31f7ba2825f73a44170ecf272f4e26b2138cb11d8a09bec450f06198175d6ae89e8763822f33147c844e308f7b7ec471705e251710665ee59198175ea1f1c295adc379e1669d705ede5ec90ccbdba330b5afd2a8bd39a4da4763c2afd608bf26a4f063b094790d9632af4d29651e8bb9233fb4392eb7e4b3fa9678fff12e483e6360059b23ea057ceef106f1a44c340079b32a8cef1e876971bd4e8b36d55ae4787faf66fe88933fe727751d8ec774b841a7436ba9439ef77fa128fcf8371bbcbf53d7600ba6c18d3a0d1a81b8e02b837823244c6827e842e3ee7b93c67d37b409e7be2762ee7b33e6beb7a4e4be276199dead9a4c6f9b9099dec918a1db3484f2db8623740a26fc768df0f921859f8a09bf4317b721859f86c5ed9d58dcde9552dc9e8e2587bb13654db9b59c359d8169714fe2ac69482d664d67623adc9b286bcaafc5ace92c4c83fb6aca9a1689f0c2b50dcec6dcf77e8dfb4e6c17ce7dcfc1dcf701cc7d1f4cc97dcfc590f1e3ac4d2a7ae761741ed2d0793e249df3313a0f63741e4989ce0598118f6a8cc86a1fce880b75c239d1c70cd15f8469fdb846eb83426a7d3186fe090cfd9329a1bf0433e2298d11991dc219712926fc698df0b121855f86097f4623bc28a4f0cb31fccf62f89f4b09ff159873f2e36dd0622daf968bb52b312d5ed069112dd6726bb158bb0ad3e1459d0eaa581b5a8bc5dad598062fe93468cca2c5da24318cb536e454a86b74e171077e59e3c0391dc339f0b59803bf8239f0ab2939f0759811af698cb822a411d763c25fd7086fd4299cf01bb0e8e6a78e9b940b37625abfa9d17a4348ad6fd209e7dd23fc4c6fa3ee919b31b5dfd6a87d4148b56fc160bfa34b5b7cc82bf164c7f9deab65623ae20a91ef948bb9c0fe9ab622318c3c87f9bbbafaeba10bbcbb4562a5f44af15be59b056c991ce41d220679d55aea8dccdfe02f538c48f8dbf2678a01be22b9c27e95b85321de2a0692f5c3c82572381c0e3c879db37c2b1641ef6a22e8869011741b26fc3d8df097430abf1dcb8cdec732a30f52ca8ceec08cf85047a8733823eec4847fa4117e4a48e177e984f3c4fa7132995182aeebbb3582b3c5ae667533a61fbf5353ed8ee97fa2e3a51d90e40735261ed337d7151bc0bc07f3a5cf74a92da42fdd8b15119f9b1611f76192bf30957c3f563e7c998cff27c8341fd0f9bfd8786f799df8bfc91e6a893dffaba43dff6be1f9fd1378bed94e6ffa987810739e6f4c9de77f98f37c6be83c0f61c9f43b4d321dd8255c327d18d3fa7ba6a912f18913e34443ab582c63d12d80ca14d5a5cc9073d51ec1f4f841a707df83259cfc4731f93f1ac6ce6358ecfca4899d4b42c6cee398d63f63b1c3d3c84a594554f1515cbd3f48aa33099fc08cfc4563e4155dc319f92466e4af3a23790a8c9dea123bad338c594f6121ffa60b99b7f6fd8363b2ab77a3cfaede4467b697208a58d885484f631afcaed3a083568319e25f9562c701bfd69fda3ab367305dfed0e9b25d92bac46f571e46a767753a71c7fb53e3788f6f1fcef19ec30cfecb304f781e13fcb7a1e01730c1ff180a7e11e3fcaf86f3e72139bf8409ff4f23fc9a6ee184bf8c21e11b759920794527d8df3edfac31f4aa4e306f8766449076e8369154daa1af61d8eb45e2b11fd63d1cf6d73123ea63463448c9883730231a6a8c7838a4116f62c21b69847fdf239cf0b730c76c1cd164a77cd1e85c06b7952912756c959167b17ea2c05b23ff8e5db590297ef9c5cf40b15d46b928f5fd2cb782958a0d352a185c36ee772af105d065819a810a877726f945ecf2eaec3c5364e64521a723be8db168a263c1778c837bd3f9b5cc68011b5dc2bd5e6858caa22b8f7dfdb8ce3549c8f5de0ebbd2e31dcc619a6a1c666c488779174b52cdb024d53ca524f51e66c4b61a238a421af13e16d32d7431cd57a8e8bb48f7909dab7ca50c6f5df85b1a258ad3ac844ffb8929b47eb76ad4af6353c05ae119aa0b35f659a5f0ab4a4d2a5a26345c0b3a607dd96b65eb348c7f7d80b9404bcc055aa5e4021f622ed05ae302f9bdc3b9c047980bb4d1b9006f7bcf923578de48e17de1e177d2f81833a8adc6a0a7431af4894eb838fd2962d867f0a94672b6383681af3c4c7fbf506decb19fb87fa87d3295a7c138b1cf7471c189753014fcb94e30dfccad633282136cb7fd05e63d9d4cbde74b4ce5ce862a7f856543db61d9509794b2a1afb154db555712f509976abfc1846fafcb12420aff16cbe3bae9f2b8edc57b6bc0ee41b13b9af9395f25f30f8828aa2e645259c4f21d6676a6c6eca97dc399fd3d6676779dd9dc31544d2d682038473784713f60c6f5d018d72ca4713f62c6f5346c49fe84a5d35e86e9f4670c476f0d8e5342e2f80513de4723fcfd90c27fc590f43544f21b2638cb50f0ef589ed80fcb13fba79427fe81611fa0c13e272b1cf63f31e10335c25f0f29fc2f2cfd0cc2ea7dd17e5c983786495a7f63610ed685c9879d52dd49f21f0c5db6065d59bf70e8fec5ccc8d199d1894527a6f8adde2cd99eed2772da0da2ae6692cffe87e93344a70f3fd970b61785b12b2f27013dc284cd2208e85c0de87b42828e60c2f334c21bf50f273c43279ce73df98679cf3698e0a18682ebe904f33d6d862523f8505c707d9d601ee9c3750ed4563a907e63b74931558730aed400d362844e0bde8ae07329f90aae64b5e1eff37f851b69698879e1485dd57440382f6c8419bd83cee8ee8c813cc2ef39e42d45de5f58287a0f4b453ea206d9fce76a4b45d51317c6f8c63afd7841ba2356908e4aa9206d827118ade3d08e4527d296881d34783eb642e467bce59afa84dea6981e63747aa809bd39e2b8aa02d19714aeb6d90c0b6f275d78ad4178f1e1a6e6decd31f71eab71ef07068673ef6d31f3c6e9ccebcda2b58cd871e2812c76607cbde8482965c17da9cbab6184cb7b5a607a8ed7e9d9a6861c30b5a2b425a6c3049d0e5d92ccffa2baa4e61ead30f798a8718fe70785738fd658ee3209cb5d26a794bbb4c18c98a231e2e1c1e18c688bc5db545dbc7500f1562ede5e2bbe82b1967af6d50ed3651a5635853e3417d127f532bd3da6cfce3a7d7a68b2b7e4f54acdbf3b60ae315de31a3f6787738d8e98f933b0528d261a3a61e96c2696ce66a594ce3a6330676b607e9e130ee67618cc3989d2d9109274d605d365179d2e1d934e67a9951c5d316de66295c870a9ccb40cd91e738b791ab7e8981bce2dba61c6cf4fd478a9ed28c8c452d8022c852d4c298575c7502ed2f5a9e68543d90343b9ab0e25631ae90910f5c4a4efa693ce1ff875c1ec14b629ef8561da5d83e99690987a63c2f7d0086f991f4e781f8cd262c37eedbe98e03d0d05676138f6d295a02159f7c3842fd108df1092757f4cf8525dd327a4f00198f0025de7d5d070c2076291b94c97962a5972070198ad87f3e7972e89596167f7eab841581415eacaa5905134188ba222ac27217e81621863b2b112a8182b8196a75402e56076add0d9c54b89ec50760cc1e4afd4c9f74f238b77bc3021e6622196e8426caf8da999313b38469f8473c83c4c93bd759a70097cce48d80c3b5f170af7835591f8dd39857f04859f8e0b1faa13ce7f9646f88c8458e13bcf3cb8e1395d9ec9880ba03e1ec0308cd16a1d23deefae2aadcbbd9b4b58a5dc3c34ece0d5702cdc35ba705ba0e1ae91d95998b0476061afc59a3ed1ec3e389561850c7f2dc84ec3e83212d3a54ca74b2b915aa2fb1cf3b432bbfaf0f00a31ffae2c54f83b60e1ef83a5569c05d7623d4bf538f31d759af00ca95c537c948d0e577c8cd209e7cb382a92a9ae7d8a0b1e8da5feca64042748f9637482791753553282b7e08277c2627c1dd6c28bc6b8bef2a0aa3b61627b2ca6c57a9d16fc4c6335b7798da800f91d0daa035b1df119bfe046cd93e6e77bc78eea14cab5622b58718ccfa6928ac661bebb41e3bb9563c2f9ee780cd5461d2a7eea23ff51213025036d9e78abdc7b5a57f82660896893a608dd12b2089d88e1db5787af5d8cbfd7a6c74fc2f4d84fa747df388faf92d1e50fcec4465385a8c257cabf2b44c49788e8e011cba36a63285d2763baeeafd3352bc0ac24502e54b2e0cefcc1a6d13cafb9c29da64cd6f8c2cd1c9f82b9cf01baba3a9f087360844f8aea231ef88704cf6313d974314b367ecf013e9fd87f6f8e480aab183f3d237ac4b0fa36bee29fc02da7624a1f84297d70442d1a0fa734745d3e31992fa031547e9a4e799e851d1289dfe7f33fef4f9cf004fb7cee8c39dfa13557cfd40867f4509168cec4ffbd3c64a29d8ee972984e171e4b70295198906660211dae0b89cfd758cefc53b683f369d5986fa5ccf3639f85edfb9ba9d12b9b4fea8df0c30bebe2e8a73de424fb7067251ca14956d9ddb81d9de2ec4826b4233d790d783f03ff3358fd69889c71be59a4ddd442c2b673988579cc513a8fe1730e8b44b35a79c4ac149a4eb3b1847fb426e167e84aea04097f0e66d0313a83449782674e74a83e8c21bb60861cab31a47e4843e662861ca733a4913464262b909e11aee1340f33e5788d290d429a321f13be4523bc6148e10b30e1276884370a297c21160927ea22611463312357d16c344b669aa3e53cd381e2599ebc935f7d67a8bc334cdee1c52bff3d5cfe5e21323abfcec37bb2f8b31162de6a98c85e84597592ceaa6dc57bb1b5b154cf8ddd55571064f20c349d87e54c908d95f005c0c911be362016d060647f9e5322faa37212858e65d3bbe9b875e7dc96a4919bff9e5f299a278a00de52982d5678fa73962b52607a6a84af578a65aafee8c99e26c8f68cb33c55fd30eabbebd2092f034f8f18ae3cdb03937c86a9e4c598e4334d25ef8965b46769325a1632a3dd0bcb92ce8e980d852ec1789c63ca632926f95c53c90598e4f34c252fc3249f6f2ab910937c81a9e4224cf285a6928b31a7bbc8d0e996632a5f6caaf20a9d643ea27249322a2758c9b01253f95253954b30ca971952de1b53f9725395576192af30955c8a49bed254f26a4cf255a692d7603e77b5a1cfadc554bec654e532cce7ae35f4b97d30c1d7190a2ed709e6834bd7272338c1e0520506f90653c895188b1b0d595461826f3214bc0eabc2dc5c0b5598f518e85b4c416fd049e6efdf9a0c8f043b696dd409e6cb186e4b46f0d7b8e04d580cde6e1883fb6282ef3014bc1f167b779ac6defe58ecdd65187b0760b177b761ec1d8841bec710f24198e07b0d051f8cc5de7da6b17708167bf71bc6dea158ec3d60187b8761901f34847c3826f87f86828fc062ef21d3d83b5227998f7b3c9c8cca0976bbd98ca9fc88a9ca47e924f34eff47935139c19c8da3b1e87bcc30fa8ec1043f6e28f8582c893c6198448ec362ef49d3d83b1e63f194218b2d98e0a70d059f80097ec650f08918e4674d219f84a9fc9ca1ca2763829f37147c0ad6847ac1b009752aa6f18b861a9f8669fc92a1c6a7631abf6ca8f11998c6af186a7c2626f85543c16761285e33447136a6f1eb861a9f8335a0dea88506d4b9188e370d719c87e178cb10c7f95816f7b66916770106fa9d5a007d21a6f6bba66a5f84a9fd5e2da87d31a6f6fba66a5f8249fec054f2a518900f6b01c86598da1f99aa7d3926f96353c9576089fc13c3447e2526f85343c15761823f33147c3526f87343c1d76082bf30147c2d26f84b43c1d761fef695a9bf5d8fe5fd5f1be6fd37602a7f63aaf28d98e46f4d25df843587bf336c0edf8ca9fcbda9cab760f1f78361fcdd8aa9fca3a9cab761947f32a47c3bc6e26743167760827f31147c2706f95753c87761927f33957c3796c9fd6e98c9dd83a9fc87a9caf76292ff34957c1f26f92f53c9f76398ff36c4fc0056e5faa716aa5c0f625aff6ba8f5ff30d0ff99827e0893cce7d61a497e18931c3195fc884e327f3f23c3acd7fd514ce56d4c557e4c27996f33532f1995136c05f938a6727d53959fc09cb941322a2770e627b1e86b68187d4f612c1a99b2781a8bbec686d1f70ca6721353959fc5283735a4fc1ca6723353959fc7283737a4fc02a6f2b6a62abf882592168689e4252cfa5a1a46dfcb188b56a62c5ec1a2afb561f4bd8aa9dcc654e5d7b0aa6ddb64544e50b57d1d53b99da9ca6f6094db1b527e1353b983a9ca6f6189a4a36122791b4b249d0c13c93b188bcea62cdec5a26f3bc3e87b0f53b98ba9caef6389a4ab6122f90053797b53953fc4287733a4fc11a672a6a9ca1f6389a4bb6122f9044b243d0c13c9a7188b9ea62c3ec3a2af9761f47d8ea9dcdb54e52f7492f9c48c3ec9a89c6062c697985ff435f48baf30c1598682bfd609e61333fa252338c1c48c6fb0d8eb6f1a7bdf622c0618b2f80e6331d090c5f798e04186827fc0200f3685fc230639db10f24f589f4e4e86799fcecf188f21a63c7ec178e41af2f815cb8bf20cf3a2dfb09a40be614de0770cf25053c87f6090871942fe136331dc90c55f1ac1d97ca7edc82a5617a716c66ffca1b611a8bd730b47e8984502ccc4eace91197c7527dfee90565f6cd5e7dfba68e7b1b34332d1ceb54704ffa313cc7fee9811bf0f9ffa1317407ddcaffec572c951b5904bfe87091f5d0bc27957b4367718639a3b447492f9fb3b19d68d337482f9fb6393119c605f9c6d30c1e30c05d7c3208f37855c5f2799d7e62718d6e61b602a4f3455b9a14e32ff39a9961263235d007c41d7e464982458d0d518833dc51076130cf65453d84d31c9d34c2537c328ef6c48b939a6f2745395b7d548cee69b19d451e90ff702f57756abfdd27f46d2a5ffcc1a4bffdad1172bfd5be8e29dd7ac6719d6ac5b6282671b0a6e8579ea1c534f6dad93cc8bfc5d6aa1c86f83a93dd754edb698daf36a41ed7698daf34dd56eaf93cc9b270b0cdb311d30c10b0d0577c4042f3214dc0913bcaba1e0ce98e0dd0c056f8709dedd507017cc99f7a80567ee8a095f5c0bc2b7c732bc3d0d33bc6e5812dccb340966ea248b632d935139c1ccbdee98ca4b4d55ee81492e3095dc1393bccc54722f4c72a1a9e4de5875b0c8b03ad807135c6c28b82f2678b9a1e02c4cf00a43c1fd30c12b0d05f7c772a3925ac88d06e884f3cebcbd0d3bf3066279c62ac33c6310964a4a4d53c9604ce5d5862a676382d7180acec158ac3565310453b9cc50e55c4ce57d4c55cec3542e3754391f53b9c254e5a198e44a53c9c3b04ca3aa16328de158ad6e9d61ad6e04c663bd298f9198e40da69277c0246f3495bc23267993a9e45198e47d4d258fd6f5e2f4f27e46d2b9a535dcf132b52dadf74bba6766ff0cfdf6d3c9e880f5b68cc152ef01b5907a77c222ff40d3c81f8ba97d502da83d0e137e702d081f8f3139c494c904ac5a78a861b57022d68e3cccb01d39096371b8298bc9188b230c594cc10aa42333343b374f143fa307348c67fec181b3183fde60bd489fabaa4fcbe067634df39e47cf82e277f47daaba134df8db3067e0f9d65ae61f57b82654e93815b372b3ceca23aaad5487d1f8f9eb6af1ef69d52734f36311fdfc755af59b93aa0fb09f2bac2896c72f964b1ef3c4d3224f6295b08bcb8da51795c0df0fa70726693ee3fb43af104f6399c2bc36c87ba12727ec096ad330d24761fe0443f46dcaf3bef169adf5cab4259e6f948b38f7ad9d2f8ff8096a1bfd16bf5f5bfeb43366e5d13a2bc704ac84cc7d3b27cb7187028dd7c7c6107c9228adc0afc258361db3ec189d653b25157fe3c4a1a2254ced996d1e73d127616c9b81d976acceb66101db668ad859292de3bf36d4992533314b8ed359726c9af3b3e83713bdabdad7bfc8f3f27299cb5784f072c80eb782972555a29608733d5e3faebdbc6d1646fd781df57149a58d1982468515b9da6cccbe2d3afb66107a15bfbb8f08865be5b7664a44d0256c934887fa9c2495589d83597d82ceead109adc6359d2b6ce123c595d246551af3bb8592507cba483d3677c1ec3a5167d76ea16b76f3c493d8ba9d4e823aa32c7abec738d15235a909a612cf73311e27e9784c4f4b994d5d9acfc36c3e19aba784f301e5c3d1d38e603c87f5883096cdc72c3b4567d90e88650b44fa2c957513bfa744b55a16ca545c14171b346d94059845a7ea2c9a4c98fbaa58f5cf315e26ac89a790baa50b314b4fd359cacf404a3ea788b5207a747cb1603235eefcc9dab36a1166d5e9c9b40962c3853584052216cac5d168c5e26467acf48b95517b96ed8a597686ceb20935e69cc9b50af03c34519b35d59c7237ccc633b1d417d627a7089f8c9f691eb460be3c431cef2b899711c6d2dd314bcfd259da1fb5144f75eaf4f3da8a9b3d308dcfd6695c4cdcdaa9f44a2ede93be42b666168ad459529d53d64efb3d951ace628cd3393a4e0beaac5598989039873d310ee7ea388c473d9cb75e97792fa97c6b8688f5c4b5819ad34a6d58b81766e1793a0ba785b47091f0e835488cd485bd4b307bcfd7d93b97d0b32b52a81bd50681a518810b6aabcee4e76de3408d89deaa02ccaa0b75564d09e9c793bc582b17ad161b7c781966eb4558ef51d8189c2cde88f7c660fe9abcdc30f61562f65dacb36f47835a7dfcc9edb855f173fbc3d85484d97449b8380bfae738d1d7c373959a5a90b425653166dfa5987d61daf3b0de0b9ff2d1a8c435f7daaa392ec7ecbb4c675f2f96b8c776be479842cb1598969727ee770d130bf3528a054adf5b89597d85ceea4168da9a5f3d0b06e611cbabc71a78d95fa5ad77a636f65282e97da54eef91aca6d6f034316ecb7b864bbd3cafdcb36db5385f36be6f22510ca4debadf1bb3e72aacb69c388df09e8a39a20659a1a9432433cec36b5ecb6bd1c25598855727d37fa11fb799267c8f8f5114c8fec3f8f84ae7d84d2966e33558ff45327d34c958995a8e91baa5ab314bafd5593a35a9d80c8ec2f9e950d95d97f1ba06b3f63a9db5bbd618afb4a316d4e3196b311ad7eb68cc0c9494799a9eb38aea372a41cfaacf6a12db207c3ef659f8712ef3b2b20cb3fb8670adbf78fb634bcd15c8d81b4d8b611fccaa1b93a9f7848dcd052296ea3e2ecb31ab6fd2599d97526d4fc56789f76e746caef672a50acc869bb19934a9db5024ac28936fcdaae5bee54acc925b7496e41a5952069e4fd3b4d353ab8f566116dcaab3601662013ec6ebb7df4ce670528d01afc32cbf4d67f9ee8cae5750b571531f17c0cbce3044d663446ec746c5532b27d2d703b301b3e80e6c4c23d9d1aac435dc64fa04c3f71ba69ee36ec438dca9e3d0a7c67a6074e646b1b8cb6736d64e7eb409d3f42e9da6c3d1188bf79b606e5a20e605ab963d85f7ed8bd9727732b399b156d524cb5a54fb6156de83cd8c0a976b6023dff1b3dd5219fb1e277af9792912c6e6fd319befd5d9dc3b10b3d130a953d301989ef761f513ac1c09ea3c45ea9c6c1b36d532e940cc82fb75162caee3521a7a60b2294f7d1386ca4118950792992da4420c93ab442dc3525cede4260763963d984c4f54d872dabc2f22754b0fc12cfd5f32697382f059df3f2bc10883efe3c3587e0df6e9d22dff2a8c058762163c94fc8c761e66183f84f661f76b2b860ec3ec7b5867df50b464331b5f36ef33381cb3e39170752af3f91ee6b61c81d9f2a8ce9649b558db98264a93958ccff82d9275c79ae738cc4fb186712466e763c9d41db17cb0a6d495ee3c703366e5e3a9af89492e07494ffffb51987d4fe8eccb0999f2a8d3dad198f64f626b5b92ad3dfae3c9c9c64c6ddb750c66d7533abbf299691fea4cf1855ff3ac3ddf3a16b3e2e9daeb7be4a3cb0be45c131e3bfceddab3e038cc826774168c48d902f86c8a2873f9887e11abdd7509c763d63c9bda3c77f3b1b668aaabadfeee2d988dcf61632e896d9c277ab54b34164e1063a9e509f48e7e3b5bcc78f0c76412af0d4dad2c3e01b3faf954e638f8a5d43cefe565ccef092d6475bdb6f944ccc21792698be809a7d64f90aa679e8459f0226dbdb036faa0f47636f4fe8b44f8fe1f93c45bfecc98b5420aaf8f66f36e255167f073c0c1d53d1983637a3da2f7b99eab3dafe3f9dbfcea3e0bbe3f4e62092f65f847708a3f7d231c7fa53433b29c05f7df9920e497ca3c48a5cac182a03f06c4f7151aecd5614ac4576a27a19aacd0f5de0c06fd37d0ba9a6dda13d919281269282d52b23cd2bc437cabb3f4651eabdd65ac6664f7e5360e48d19b6ad6e2151eda367a1fea104716e6023add7d016a3437c2b7435c228299231a66f842ea1a4386e5a72ee44142804ae5358a5b00b23a9db84ec2ddfcc56ce5cc9f46f4b627b361fd8c1c1e23af5262e39b164d14f5a1320f9cbfe64695ad18c00a2710f2a3ed14c2d72811b6f47ea8aafe545121f5a788940b81451e8b554e00bba15114d8eb94c0da8aa4ba84e5b0e86a1897c1b56c1a05f70625b8d61a705ce01aef233e61b64adc2d7202da521685f626b5b7c526cfc9dedffe3e8745d533f27daf73015c56b328b8b728c1b517f5d18aa48b0517e09d020a85b729e13505497576ccc8a20b9876ed12c5f40e25a6c600537430c405440fb78f227a971e5149757bc0ef2b7001d1ebbda288dea344d48aa9babf9f95ab1c69523534574ac5467da2c8dea744d64020ab70aae4abd73c0ae7034a38fce4b2d9d52d49354dccef8c9d2baa125562b893571ee6c8ce6217007e0fb2f50f29013602d93a5793cf9c730150b3d651401f5167eab3c560727463523772a83b800f7d4c89a8a1f0a12a4f5a9104e4029e2b7a46f17c92ae24a6a65fb800e8f53651409f5202e2c793aa761f5f87c5adaeaaae1af0f57945a26a305724c022911c4bbd005d80c8ff28889f5142e447784078bc5f956f7b565c7d686191e32dc2b6a0a7f5734a94cd6596affc6da3ac50f863eb2ea07a1964fd5fa4abcb86f740c0c9b8aa17c2a58aebef0da3e0bea4eeb281e0e05e3ce344270e6f1245771d7201de7ea077f52b4a78cd40891a9d6ce54fb37201d4f7ada2a0bea61ef0982992dfaac0aabf89deebe522241780f11db114b06fd2db051dbbbca0c8b1fcac148c147d4b3fe0c1ab121345d02e57341eaf1f85f61d25b426001a9f74a0b27b1720d503cda7efa993e42431965d25028fae718fae53ae1033bdcb9c00f731f0ae1f28c16d0bf23257c71ef9842905eb47fa916e7f52ca5a21c6edc6d228e0653f515731f43dfafe862aae78dacf7da3c07ea604d6c2fbe1cf4fe41ea63a14e1ac67177075e91fc5f50b750fff5c0fcf0496fc51212e00dc2c5a9a0deb078407d748a63e6f311c757c86650be6772c9589bb95b2121c33e332cb7bc53acd7f853326b352ee64ccaab11ccd4a7ab64f56e8991a59294efbcb4aaae99765d86b9815622e6756a822362be9064556a80a62564af94956a87eaeac50adc8aca4662566859a8a9715ba7b49a7333ef92a2b6e503a2b619f4c967698314b3b329285cc34c94a3051270b19a5cbaaa12b372ba5f1e32cb4dd96a5190acb42a68564253917222ba91a565612d58ae81205fdd2821cbe44e1b7ffcf570fe4f0d503bf7308532405bf8ef307651d677be9d9be8ff07227f9e5284bd8b0a03e5de2f4893d435ad56b749a358ea9f97c9a8cb1a9d47efa810ebd3fa9ab8f41b45060700df808cf0c329cdb52e11c0570fe6513ce214ee25c0be69efe6d13ce5c27715e0870fe6313ce3c2771de0970fe6b13ce7c27713e0570fe6713cea14ee2fc00e064db5884739893381b80923d6213cee14ee2ec05706650e26c2971f20a502c56bf91c95f23c337980adf672c8a6f9b7478e30ad41fa1fa4bd848ca5650332a9cfd405e59cf269c239cc4d91ce0ac6f13cea14ee2bc1524f60636e1cc7712e7050067439b700e7712e7770067239b700e7312e74b0067639b700e7112e74280b3894d38f39cc47910c0d9d4269cb94ee22c01389b51e26c277116ca91a1e03ea5beeafe3ec0397420eb53811c0a6a9ccd29417665d1b1cf64c7a1f9fbe5e25df7dae95381876e4b09b61b8303d3c94fcc70196e1f00b70525dcf62c719f1214c74b7a32940da95016830ca02525ca1612e5b0f4f72691f9e14dc00f5ba503de88f4c3231b41bf1bc06b4d094f4d3cc2ca70652969023e9d0a633e48c06d283176a801636c5e48dac541961bfe077cb2ad4d30873b08b33ef0cc7636c1cc7710e6dfc033dbdb0473a88330ff05303bd80433d74198df03981d6d824938bc4b06f32f00b3934d30093b37c8607e046076b609a68b0dc56f01cced6c8239c241980d40d5a88b4d30473a08b31180d99512667f09b3d47ba9545cd53a1db84a21ec21ed84396b1b2ae4bf01e4db5322f717aaac144b5ffca5382b986685a9037d45cd40fed9ad2efb2c638fb722f4be43a9503e06bc2f931265dfb804ef9fac355976ba157bc9bb5878e73ad1ab5ec5129d20440a9b2c773d1dc0ee9e0ebf4daea87211654f9005f4a04499fc72acf813c749d16ea1427b14f0d29ed45e3a4eac345e2bd757f28392f830db1ab9e65aad3af5d7f2ba5750d5035eda8b12a55a743ec4fb7fb50cbc4094effc6e1a8636c812fae10061ef74201cbed521bc1f20ec4389b00d8b8e9fabeb38a1827fd6b5cbe3e4f702887d6d5a7b413a3d9b0ce724b0f622cb269ca4530cc970ee07caec7e36e1249d134786f33280b3bf4d3849676cd2e59d00e7009b70928eac93e17c01e01c68134ed2a52d64383f073807d9849374f10019cee6a0641f6c134ed2a52d64387301ceecbaeceb8c5d874138bade8a0ae5188032273deb7d73d23fc9b03315be575814df107b660abb38cc7620287272d381122e1598c166b3297293b3e5de471bd2d12e2743b93ff0ca3cfae15f3870b684ad12e8c68b6dc956495193bd6bb127226ea75b0792787300339f7a1eb1da8a8fefcbc6c5c001dd041b063b80b123c038341d8313956247cb8aeaf172b5f59dbaea86d67229cb7032b4bf03b4c36c454b5a3d22437b3e403b3c1d136992dfcf830c26d9aacaf100e6089b60124ef12283b9138039d226988413b6c9608e043077b00926e152023298d900e68e36c1245ce44206730c8039ca26982e2eeb1f05608eb60926e1846dbabdb900cc3136c1249c5f4406b31b80b9934d300917b990c11c0c608eb50926610b880c667f00731c25cc4c16dfc3196ea63b61f94e36d3fd3cd0eb39be2e576a044786087351b271a141c05727d80493b07c2783390cc09c988e9121de1fbf4e2c77e107cea469822119beae00df243bb69f202c7ec8b69f9800f2c7c994183b012f8c5f87c18545378d7279e2eb73c02fa7a463ee3007ba75cd1d3e0c209c6acfeaca914e2e5a590412f8b474f8e3b0adce1fc7027fdcd9ee2a3a614f3b5915fd7ae0a1d3d3bdac2af90136c2d60fd9f0dadb00ed8cf4cc3e1a99fed9476409bf2fc037335d8b58a25366e0ac0ff2c932643e7828c83d67d9b300d5c57d8fc60194b3d35559afe964509717588d0640e7d8b1a277028b3f6091b093986c7bc83e60e2eb2ee998929dfccc0e17fbdc7b81a268ae4d3849cfab24c3c900ce7936e1243d738d0ce7f5201f9d6f134ed25de4c8709e0a702eb00927e9996b64383f063817da8493f44440329c4f009c8b6cc2497ad62f19ced900e7ae36e1243d9c960ce73a8073379b70921e9d4c867319c0b93b759393b779e6787f7321f8c91773856a55de7dc226e76c2aa02300d03d2881aa3307eae0f84fb26da2ca01bcc594f0b663c9b6d763b7e3239cb5f93515d4ef415b684f1ba11276d59141fd0e40ddcb46a88433dfc9a07e0da02eb1112a61094f06f5580075a98d5009a7d590413d14402db0112ae18c3932a80700a8cb6c844a383f840cea4600b590126a1e8b1f9e8b1d7df7873e568b7ffb86f026c072b1d29d2b3b8bf151a6f52288555e34ac63fe00c97c51a355e354849130942a127ab0682414d9b3cd858b474055017f2e4ecf94873a38128f0cdf8fc01397dbbad63dd7c9c938d9c03357d88a768893685f055ebbd29e19a3a4fb7a9265010700982536c174f110bd6301ccbd6d82e9e2217a9b00cc5536c1747132d97e0066a94d305d3c446f0d80b9da26982e1ea2b716c05c63134c17d77fcc0730d7da04d3c543f41600986536c174f110bde300cc7d6c82e9e2ee9ec70398e576af5172f1c0bc15a0ed5e4189b7b9c4eb6f945a2a5af1beec1246b82d657d2a700cf865655df66cc6f6d41336250fa542f919f0c12a4a94fd58ecb179fcacac32a63b6a6ceb3e946c2258c2b08e12787600389ff354aac1581102f938efef7291f792c29f9941047f5b007fbdbdab425ddc74f51090916c48d732b2996250645560106fa2f759b908d1e5656499a090db480974db84b5830a3a744da8d06500749bea7275a8fb7bdc750628f74dc7c8673edb9a36145a04f0ed67ef5a5042cf245b0b5a0e0a9cfdd331271f6b04c49f63e8e2ce613b80aad10136e124edd423c3590abcf3409b70e63a89f34480f3209b70e63989f36680f3609b70e63b89f35180f3109b700e7512e73b00e7a136e11ce6244e064af6c36cc239dc499c3d00cec32971f664f1fbe5f0e3a478777315530b17677b9f17313e143257802d12c75195a6a7f383ec8443dec9a3201f61d382db914e9eeed11be4a847da84738493382300e7669b700e7512e78d20b11f6513ce7c27719e0d701e6d13cee14ee2fc1ae03cc6269cc39cc4f92cc079ac4d3849672f93e19c03701e6713ce3c27716e04388fb70967ae93380b01ce2de91a149e27da3c559ee471dee7456ca1dceea5486cf752ecf4a07011007a823d6b3a5d9c105e062af127a663a6a83a2ac5df806899e808512fb9be9bfd4ae09727a56303a29c8077ba0c6f028077b2ad6b38490b20b25949ad41223fc556b4a4354f32b49703af3dd59e99f6c39c5c1e3b10f8e96936c1747179ec6000f3749b60bab83cb6078079864d305d5c1edb13c03cd326982e2e8fed0a609e65134c175b43dd00ccb36d82e9e2f2d8ed00cc736c82e9e2f2d82e00e6b936c17471796c0e80799e4d305d5c1e3b04c03c9f12662301937f1eddb09a0c5726152e7e96a3c275413afa8886a7bf8f88acb57d178077a13d4b5e09eb8d644b5e9f07c9f6a274f8e1d6747ae1cbc00f2fa62f4056b2f8f3e1e6794c0a59a15468b9d8b49fcf77736f34a729807989bdcb51096b8d64f9e5fe20915f5a974b00632b3a2eb6b37380975e66c71a36dd66008468c93603f81578e9e5364dcd26ddaf862c3fdd0c705e6113ce5c2771de00705e6913ce3c27713e04705e6513ce7c2771be0e705e6d13cea14ee2fc19e0bcc6269ca47d436438bb815542d7da8473b8933847009cd7a5a3df32b9796fb94e7602df0f92faf536c174b113f84100f3069b60ba380de65a00f3469b60ba380de66e00f3269b60ba380de66a00f3669b60ba380de61a00f3169b60bad83d77258079ab4d305d9c06731580799b4d305d9c06732e8079bb4d305d9c06730580790725cc6e1a98fa5ef829f293b41d573a980a6e36685ede69335cc2028a0cee6000f72e9be112660b64700702b877db0c97b00023837b13c873efb1192e6123800c6e1ef0dc7b6d864bd85c25833b04c0bdcf8e31fb092c7edf5942bf25db77360ba0bddfa69e7dd2bd94c87af67702381fb00927e9aa4c329c15a0c87ad0269ca4dd7e64382f0638ff67134ed2ed55c870de05703e64134ed29dbec8703e03703e6c134ed27de8c8707e04703e62134ed295c364389b8092fd519b7092ee4347867310c0f91825ced612e750efffd532f002b103adebbbd45cc8a2081fa744d853e391c9b68ad274c6d648aa33b6fe06b9e81375b95229aa3a71659e6c17e47120c93f4989b22b8b3d2bae586e333d9ba9cda571b4843e4a06f652e0a34f5182cd0c802d15eb992a8598e88aa644a3552e0efc9d0cf03e5d978b6fd2d6054db658b11e40f90c25caee02e534efa5b902183ffd6d9dfc3ceaad4bd82a019c1fc85be8fddb7f3ed9bb167b6209cf9225ab5635067582672901b7f37ef0adf9e78acfd70a31f024e34942f562a1182148b215771d00c8e72841aa93e286881a6a9a17d692f9e11700dff375596d72bff8d90be4992f50a26c5b034a6529e9d0f2e95418b701b5cf172931b611184bbd170ac556bd30579c27da4c9552987bc9ba0d48d62fa5a3a6097dd15fe23d8f4d64d345895de1bde8df8388c7791a94d00ec6b5a1c27b2648ea2fa7639c33b5fd3d0917369095e7ef02cf7d251db92856898fe6a2848511592eba01607c95126373efc71cd9d3a9b6979e263c93277bf772ce9600dc6be9f0bf9c6a1f2c12858ebfcf92eb2710df0730be4e3d0997039b28022e66fe36e7fcd54d60dbaab9e229dfb28570fbfdb95430770030dfa0aea4735c7ecb5bc18b6d22c232dcbd92fb4b80f24d7b36b422aca893f5113d0d2a416fa503654e829e4cb747889e075ef9763a06d9f2b7ba41b6d500e13be918b4e0de3849d41cab841233aa1b92b3d97a31ac56ce2a44b5bd8cb97cf6cb8e00ecbbf415a272a6efa774bd45de16607c2f1dfd94b975715809d9f4d751a0b079df9e8dd55c5ca03d0b78e2079428d54694f95b517ff97a00efc374cc2e4afe8460c23a24d9496ddb8364fd914d38473889f34fe09d1fdb8473a89338af01383fb10967be93384f06383fb509e7702771be07707e66134ed2031fc8703e04707e6e13ce214ee29c0e707e6113ce3c277156029c5fda8493745b0b329c4b01ceafd2d11acf63fe29aca51e89b475b691b582a6017c5fdbb4c66208658b9c0ce7c1a015f48d4d384977a023c37939c0f9ad4d38f39cc4791fc0f99d4d38f39dc4f932c0f9bd4d38873a89f31b80f3079b70921e624b86b315987df9a34d38873b89331fe0fc8912672321a0d8ab63fa5360b864325c640ba41ab028ae9feb729427b6fdede25ab305205ffc857e054f74ad194fae1bd964ef5a225a3bbe428913372160ba29d62069ff4a09b8afc6576367014f607c35efeaeac95a5542e424911970b3e60b6a69585bb13315eca12063f82d3dab7c72d33f6a49b62fd7a700dfeff62c8e26ec3922cb57878164ff473aa66af1591c53189f3bc46718ad1093b5ca9d9e51b41978e39ff6ac3973f14c8d7d4129ff17f532d239a23829921fcd63d864eb0a07937523e0937fdbbaa287b4af9d6c45cf5700ed3fb6a2252d8cc8d09e03d0fe4bbdca22f95971794e9e02f30c80f99f4d305d9c64f81680c9ea5904d3c553609e02302336c174f11498a701cc0c9b60ba780acce300e63636c174f114982701cc7a36c17471378e8701ccfa36c174f114984700cc0636c174b1cdfe3680d9d026982e9e83f93e80d98812662633dde884b04d44b65cfa6cd0bfd498126f6f163b8a5428daf07c6fb729de475bff992f99a05bb9893d99c208275bf2b380d736b509a68b2df9390066339b60bad8929f0e6036b709a68b2df91900e6b636c174b1253f19c06c61134c175bf23b03982d6d82e9624b7e2280d9ca26982eb6e4270198ad6d82e9624b7e2e80d9c626982eb6e41702986d2961b663c9cc511a26b6ad20cc2feb53816c089a92ed2841ea0e614c7ec49db0fa4e36defe24f0d1f69468bb6bd0fad3bd38bc356c6731c7b32ce0b9b12b33097d976c5d26e7a90077a0041c6e9b1f179b9af90065474a94e177aa212c9ec83c731048fa9d6cc2495ada93e1ec007076b609e7502771de0912fb7636e1cc7712e7a50067179b700e7712e72f0067579b700e7312e79b00e7f636e1243d71800ce75e0067379b70928ec893e13c1ae0ccb40967ae93384b01ceee9438fbb0d811f8652cbecd9eec61a2a48d4fb23d6627838e931ee9ee38491e2de1e81219dade006d4f4ab4fc873a8ec4bdfea51620b1f7b229ef1c49e97564796777d0c8ec6d134ed22162329cff00efec6313cea14ee2bc0ee0ec6b13ce7c27719e027066d98473b893383f0438fbd984739893381f0338fbdb847388933867009c036cc249ba8c8b0c6715c039d0269cb94ee22c00380751e2ecc262dbec9c4315e3cb108a0258b7861d979683eafce0baee0a497ea203216ab2866804b4d7b32951ab5d6e46b0aded40b2ff814c20271dbd49ca5b2b84fff12c60b28457ac9de1443e4b846cb3960b40463084126db80d845c9c435f0950e652a2e4b3ee74478b6e10bd9eee1f2cfa1b48ee79e948eea96d2044b89c8bac30ca043e9a6f2bda214ea2bd1d78ed504ab4ea2cb82181fc340d253c19bc8900de304a78999a6228dcda63c245346439ea6920d90fafcb523e767531e15cd043a950be01508e4847fb1e1ed5accb2dddaedabf0012fe484a9cfd586cd5bed27bb54c3b28bc758fcc4f00cdd11dd25103486d4903612e4b56883d02b2861d29d1f60af8722983bbd96eedfb3b1c09308f4ab707ebe1ce17f92f5ffcb05c885b4d5bb86da142db12640ea329d146f7061f91fe5a2c5961d60778e6987454b3925b72e3e212c6b9a05eb013254ab51e34b97ea97c27d72f6d0792f5589b60bad8cd371cc01c67134c17b7cae804608eb709a68b5b6574063027d804d3c5ad323a0098136d82e9e256191d01cc49e9e8de532d23deac2c0a9cb6b0f58de6ef01ea9d93d3d12785f96a1026e9e45c329c3b026f9d62134ed2096664385703ef9c6a134ed219516438cf0738a7d9849374be1e19ce5b01ce9d6dc2495aa127c3f938c039dd269ca40b1bc870be0770ceb00927e9d471329cf540c93ed3269ca40b1bc870f6043867a50367f26bec08b707269bebdc1f24f6d936e124dd6d990c672b80738e4d38494f8727c3791b8be2dcc5269cf94ee2bc08e09c6b134ed2d3e1c970fe0070ceb309e7302771be0670ceb709e7102771ee0a702eb00927e9898864388f043817da8433d7499c7b039c8b28710e60d8c934ba0934c94fb521ecb3279b6ab33d683bed4a093d3ad5a60e268c93353d3f013ebb1b253e35db9e07bc9cf933477dd96be42bee0dc74500bcdd29e1a945b578fe09a7238ef3c4948bf9f6a4497a738408eb4cd0e0dc83126babea24cd277f479728a4693238d932850c00703125c0e4f6ad57354e329064ab3ad701907bda02d2c5e5b17b02907bd90292706e1219c88b00c825b68024ec732703790e00b9d4169084f338c940fe044016d8029270763119c80700c865b680246c879381fc0f802cb40524e1526c3290ff029045b680245c854106b20be8a428b60524e1f16664205b0390cb294186db66c5c52503252071afa044d997c5f656ae153d95b3d97ad10f19ddb82ad98d0308db3f642df201c06f5752c256b3e0935bd136d4c9b3b4db02cf2db109a68b6769b70330f7b609a68b0b045b0098ab6c82e9e202c1960066a94d305d2ced9b0198ab6d82e9e202c16d01cc3536c174718160130073ad4d305d5c20d814c02cb309a68b6769b70730f7b109a68b1b51740430cb2961f2890693c46eb35cc569126889f731dfe3937f46068f6c47243efd43c1aba8cb6e8fd85d8f08cb6eb27de75e017e584989b22b0beedcb9754fc4aa003e5a4509b6270beedae56fea17dd5a9a0be4b33712e7a32e56964e05debb8e1272701b7f1f28df1a8de7a913b5ddcac3bc363b29d6fa5458ff0158d7a7237f4daea477b1063a1064031b28519aed2a4788962c87fd0278e9c67426fe124f8985dec3528f4870e3feb4ed83485623a80ffae63751d74c97880afcd6b355df0d20b9ef9b8e3652720372439c6c709e0412f87e36c174b1c1791680b9bf4d305d1c72db02601e60134c1787dc4e00300fb409a68b436ec7009807d904d3c521b7e301cc836d82e9e290dbe100e62136c17471c8ed6800f3509b60bad88b74108079984d305decf0380cc03cdc8e0e8f092cfe8c0dc2b29dec8c8dbea0657e0425daf0fb711296ee646b7dc7039c47da8493b4b24486733d48f89b6dc299eb24ce4b00cea36cc299e724ce7b00cea36dc2497a5a0119cee700ce636cc2493ab7930ce7a700e7b136e11ce624cea6a0643fce269cc39dc49903701e4f8953ed29c39763ad03036c69d97e820cdf1416c5b785125f4db395a2aa13777b90ad771b0b3cf18474246c7e4ae614c66779cc1389988b8b3d075b6de2534987936c19d636a0d839311d6d756ccddb34efd7d6b5c3477fe0a92751a26debfd98e3fda8627c992017b586f10dd0ca45774709dbc4a267b9bb9777d60779e7c99418bb8104ef4feb5ae2a95be1a9532878f009b4e3183fed85f72c1578024a45569086e44f06773700f7947494eb7c7c32ed733dc872cf9f00be5329f1650672cf15deab5bff79acb781c2e9b474144ed199c9c99f279cebe489c28d01dad36d454b5a4325437b31c814cea02ef71355f695a5a489ff742a8c19a0fa74663af2568831dcfe0b8423496445d719200338cbde0c8070d2225906f03ac800ce4e470680cd9d8f660084f9285906300578e8399418bb0b8c5345329f2b2a4cc5b2ba5f2444a98533ab046c9e1d147afff6c54ff6aec5a229eb5ee5bf09f0d373edce6109a7db92e5b0b700ff3daf2eb38109225f2da7ad079c1221c2b82bc0787e7aba9e73d3df44255b223306e0bb201de57c7c224fa6a4279c024e56cebf04d05e4889b6178b6dfdf356fe7ad0770a73ccadaf1fb52d68085c4489999704b3bd976778af148ab127087612db203a5b8a29cb7a325f6d0fcafa8b2921aa098eb017557549473ba9ddee35ed02605e4209b35f20e1f3dd1acab4f967f2d31e09b300b2698fcd401670292570b54501f4de9a1b06ee7af2cec0932fa304db5a82cdf3fe5f2d032f1088d334b64f36dbf95c80f0724a84e156cabbb8a66e2640790525ca1e2150ce63654248a5573728636a1cb58236273d8daa35b51ba8b35e4989b853a0e82a1383d02b13faac8b2b47be0540afa2041afea462429c6427c6750638afb609e7082771fe0172d46b6cc249ba332319cecb00ce6b6dc299ef24ce1300ceeb6cc239dc499cef009cd7db8473989338ef01386fb00927e9125b329c9301ce1b6dc299e724ce3280f3269b70e63a897309c079733a3a4272c4dffe95cf32e593cbddee4b5a0e10de928e8e90e41639b838e4d115f477de5a972863dbe72e6e2db40934286f4b57c2f6fb95b8a00d3251a7a187f36b2a840f80847d3b25c2b6006171f586d5eab1eb1dc58f028c7750628c9f71b7b54f14df1ea0bd33bd68c34c1427444b3670fc01407b97ad68494b7932b4a701b477a7a368caddea06df060084f750228cae5faa8375c96453147b037cf7a6075f7ea0bee932becf01befb28f1a94935c90dfde63a39f87b258079bf4d305d6cf55c05603e60134c1737543d0bc07cd026982e6ea87a0580f93f9b60bab8a1ea1900e64336c1747143d53301cc876d82e9e2b4982d00e62336c1747143d5d301cc476d82e9e291125703988fd904d3c523256e01301fa784a9a61386192377711c7247305cf1846d4009f34e32a0e300d02729816632d345ae8478c9ba40d600bc4f51e20d770e27610708d9a95b1f02944fa7a3a73dde5393e96b276c7492f5b43f0bd03e4389568d600ea92ef78b5809538b065cdfc6f24150da3f6baf87bab867c827c0439fa3441b7e1901214eb2527f00c0f9bc4d38473889b30dc0f9824d38873a89f30e908fbe6813ce7c27715e0270be6413cee14ee2fc19e07cd9269cc39cc4f906c0f98a4d3849375723c3b927c0f9aa4d38f39cc47914c0f99a4d38493b97c970ae02385fa7c4a94eceae83adaac83a93f701f0dea084c737bef337452b617cf724be51fa064fa07bcdc65600d99be96e9127bfe70c61cf26d99e338dc01a8cb728d1aacd28f8acf789c217cb3c9f2c967d47fe1614c54260811000b7f3af602eaf18ca02defb763a0a1face8893fcd9070ec880ce748e0b1efd88493747a3619ce55a0d3e35d9b7092ce0821c3791cc0f99e4d3849d7ff92e1bc11e07cdf269ca45b5190e17c18e0fcc0269ca41ba590e17c13e0fcd0269ca45b5190e1fc1de0fcc8269ca41ba590e1ec0e2a4a1fdbd4e9319272749dacd3230b78e72736e1243d949c0c674380f3539b70921eac4b86f36616c5f9994d38498f7d26c3791ec0f9b94d38490fd625c3f90dc0f9854d38498f7d26c3f922c0f9a54d38873889731ec0f9954d38f39cc47920c0f9b54d3849971292e12c0638bfa1c419dc86bf4cf4d217793cf86c636567749f1a18180c6a9cf7af7231ed9b749b95fd3388808f06eda66f2981b7638997cec4b699c84092edef351f54f1bfb30524e1783b19c87900e4f7b680241ced2403d917e4a53fd802d2c5adfbb603207fb40524e1726c32904700903fd902927093003290b900e4cfb68024ac6f92819c060a9b5f6c0149b8a10a19c8938047fe6a0b48c26d7ec840ee023cf2375b4012aebd2403391b80fc9d12640e8b6d4a56a1ebd8f07d3be367d8a5a9613992aa61f917c0ff07257eb52743f213c1dc1bdd5c0960fe69134cc2963a19ccbd01ccbf6c82e9e2b8fbee00e6df36c1246cb193c15c0c60fe63134cc2361219cc2500e6bf36c1246cb993c15c0a60fe67134cc2b61219cc020093d5b70826610b9e0ce632003362134cc2361319cc420033c32698842d7932984500e6369430f113ae278bf5701c639167ef5a21d8fd13ae17b328d87a9460bb08b033bc170ac5422db8c3d712b64a40e47b80157afff6854ef6aec5de5b457458c9f6fd6a08b0d6a7c41aee842217b797de0724fd069428cd0e2f7171dfaf4e006d435bd1924e0d23437b2dc8001a51a2555baa615dcfca52d2c47f3a15c6a9c0431b53639cedbdac2fa02609c58b855a84c5119937b603ded8241d7551cc1b638ba3e14e9ec4b103f0c9a636c174f1248e9d00cc6636c174b1aa3402c06c6e134c174fe21809606e6b134c174fe2180660b6b009a68b27710c07305bda04d3c593387201cc5636c174f1248e3c00b3b54d305d3c89632c80d9c626982e9ec4311ec06c4b093393999e734058be93f5779e02f0b6a3c4db8645fbe7d789fe77beefd732d12f9fa6fde3c94e3858c1a210dbd765a771ec61118495773294ef027fec4089b2bb71721f42d9d4244bf07f02c01d6d07ec628efa1a00dcc976c084ad2832c0ef03c09d6d074cd8b222037c3b00bc9ded805d3c5cea0e00b80b2560b55e1e4e8ac046f2c9a74290e1ec05aa5f5d2971aad3de73c5394869de9e9a6ca86e34f0c6ededa9bd12b6fcc96aaf8dc14602ddd2312e1f9f732633324f5828918d846e005e9a4989b615c833cb0239641a9239592ef92bc825bba7239927d72be5623ffe1080b2473a2635a632fd86b0b38f2c919f08c0f6b415ac8bc7f01d03c0f6b2152c61564006761200dbdb56b084dd2864608703b07d6c054bd8f824039b07c0f6b515ac8b35d4ee006c96ad6009a79a91813d1880ed672b58c209916460f70560fbdb0ad6c549e47b00b0036c054b387a45067677007660ba3b58f4bb96cc173d02bca1bb5c885b4d5b93dd4285b605e8bb1a948e5ed4a1722640a947226d7300c83cf310e09983ede95e7171fed42e0065763a8647925d804b7ab22cd94ad12340cf698e4d38498f4225c3791dc039c4269ca407f592e1fc1fc0996b134ed233e3c970be0a70e6d98473a893387f0038f36dc2497a663c19ce76a08e39d4269ca413cdc9700e053887d5e54e25c1213d176b9d7f80a43edc26982eceda6f0f3c73844d305d5cb7fc23f0cc9136c17471ddf22f00e60e36c17471ddf29700e68e36c17471ddf25700e6289b60bab86ef92d0073b44d305d9ceff4318039c626982eae5b7e02c0dcc926982eae5b7e51c06c583f207c729cf009a2b9c71b7c85427fbfef7c309bc28ac5280e0751e8fd9ec14ac4574b3d1c7b78ff858b813dbdff74f72391169e4693d8065626ee72794542f66aef29d7ac82e56479af8ce50ed1543a4496e8eb1fe731aff4de99cb8a45e81bbdefb8ce4562db23b5b96195409225b6439ae3ddab627ce1040f618da7c94a562e2c2e619bbc67cafeac4823c1a998ad930438c02ca9eb3ae6efc13f4d8e3294783617084dcabd77ea8970fc467456a439f8a51675f2ef16082db2224dbce713c4006489f7f51ca1cd06115698ed9bb2c422d2446f6f1036f8efb693efce1571b756dc4f24bb6d8def47a573978b8899c28af04c113b05deb302719d5fcd219b9fb21719e6fde50fcd0eae1e941d2c4f3c582d7fa9fb35cbe43e9658da38ee48117dce525a6ba9a3268ba655335ecef80e91c542eab41a2dadd93e3ca5354b102bd9fd795c6ccdf68fe7f12ea35db8698708cf4e167831ef0b2ff69cbcdcfbb770e95919acfeff036e1ccf4b4bcc0400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/391e1d5503d04f14dbf432f746c81f59.asset.meta b/Assets/SerializedUdonPrograms/391e1d5503d04f14dbf432f746c81f59.asset.meta new file mode 100644 index 0000000..e6e43f3 --- /dev/null +++ b/Assets/SerializedUdonPrograms/391e1d5503d04f14dbf432f746c81f59.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 828c89840bf26bd489855de8babbd0d5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/39c8fe87733eaad46a45adcb37d7a3c6.asset b/Assets/SerializedUdonPrograms/39c8fe87733eaad46a45adcb37d7a3c6.asset index d0ef759..0284aab 100644 --- a/Assets/SerializedUdonPrograms/39c8fe87733eaad46a45adcb37d7a3c6.asset +++ b/Assets/SerializedUdonPrograms/39c8fe87733eaad46a45adcb37d7a3c6.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed574b53134110ee59d8242810f185961ef4a49614bb80c55dc00716af22840b6585403656aa9298ca460b6e9efd2ffe00ff9407abbc78d1af7b7721d9ddec18619142b295999d99ee9eafbf9e999e352cc24f4da1d8a64d5aa4692a5285de53136f8ba81b78bc56d0bf416dd4ef50963136450f349afc7ba4eea05c46cba50e343fd03eea9a8c17c8c1fb32741db4b8b78abf0329350ca5222dd13aadd1a4baa531b12d4aaedfa7d82f9543b94087187504144f62c9d0248a02465c196b007420b7436fc5ad06c6f6a1d3a63a6cee89c59cd085bfa904dd6bc897a94596c1fd4f06a031d0d413c8a6330691cf244fdb01d4160cc47851148e3a3447b3b15edc55a35db817a52c43a2264687a2537c8d4cc1e0ea789cae10b8e87f2511e420d430324d2ba8596b976640ea4ec8ca36a6ad238c0e6da16c89bd5dc08e4aea5ce27085753661d35b4d0df40484b6d0ae0bc282941f05a923e897d1d791b5ddc4ea5e407d20b3457d6fe33d6ece2d9fb2788cf18baa5fbfb77483302dc11b466f717c2e23f24f22c2d46786fc6d386cf11e519f2391b8e4d03b644c39ac3d1b334299eae99b258b9b6a33c2e0e03e463d8c5fdf1edff3f42cd197786638dcf7c483e308fffcf1e5dbafb1ef9fcc5ed7e6c8cab06bf735ae2511cbf61eabdb110bc92e98e6b0cd40c3f4ab38fab3dc593843fa3db99ac80d1e808c64a6de00a871345720b087e79056d1e90a3036d1441d898ccd66b2426e3475ea00f6a3d788a33777d6f4eacf93247a73477e1dd34bde3d2786c1913e0cea309866168f5257a1f94224dbd0df80444d5a2e596c5ad9035ca4184103b639036e01fb9e30a9bf565d49b856554f2dc3eabcf0f862fdaa5cc382533bce3bbd4ffd6f1359dfa3c0169866022e9ca7bcb2327e50296b86e2fa32a59bd39f1e6dd1b8e465271c001ef7b2bd4a384eecd2b9433edacb73b0a9e337a3cd9b7aec3fdf6f36efb7f1ee4ba461318beae95f1e767a78f9eed9b45f8ebaa5e0195893cf7e18e07896f070f6a842a47464bb0630a1d94e72171a11538184793a1fc11c9fe7c05911fc2e1e6f211b36c7e45a9ac43df489f3525e53a863101d30d246fb8dffb157ea99a6dba512d9e9113c9216c14617c11369129cefbb329bbe486ae465d3224ff9c7ec05486836278aebd1fc31e1fbc217f755d90f65e896a53ece25169f3b6a7ec03333d9a6fe24bdc17055fc7aad9fabe415e7e94912d96842542c4e6717daff9be1653a29d79c2222ef1977681dc21501c53ff337e13cb35652170000 serializedProgramBytesString: - serializedSignature: 14aa814004eb95d721e9822fae73811663fd644803e3f3909325a3aea342a4f2e5ccb7d9aceeff5ef735b51faa7cf57fc2cae7fe23236dc64bcfc712463ae00b + serializedSignature: 01fa81872105a34eb1cc06f6e5b9a0c6c3ce8f6ff1cce38d88f0f9e0df47579534add5d7be4cdfd980aa90e31d872e22f0461bd9db0753c26b3b876cb9237f05 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/3b7cf818728abba4d82a9eb5d6725c29.asset b/Assets/SerializedUdonPrograms/3b7cf818728abba4d82a9eb5d6725c29.asset index 96da6e6..613eb46 100644 --- a/Assets/SerializedUdonPrograms/3b7cf818728abba4d82a9eb5d6725c29.asset +++ b/Assets/SerializedUdonPrograms/3b7cf818728abba4d82a9eb5d6725c29.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c15c7f6f8e70221b895e01228120a2421094e5b24581b0ac55b4a21901028411aa0a5eeeedebebabbbbbbbbbbb7eff5f5b5af6eaff6df999dc93d3b77cecd6e76cfcd2cff5ff890cddad973be73e68ceccc6ca302e6fc248638bfe6b3d96c12cb67f358055bc7d63a7f4d72b66b9c7fee9e3a3e8bd538db2ae777b9736e08cbade34efe3330d1c5f93dddd9dbc0363a776e62cb9ded2a717e0eab74fe9eeedc5be9ecf1a32b9cff95ce558926ce4df358299bc976629d13397588982f6eda208f25b85d8966ceef896c1fe76ca5508a3fa4409ceaecfc9ae39cd920cead719456d72d628b85596b9c73cb9d7b6a58b523739990d8ecaa914cfcc1dc4d47b9cd91dbad9cffcde5df8de5dfcde4dff07a7e9c5bb75b9a6b3b816b954cae7596f3ff57b9dfc5dd6fa4f6bbbafb898e9a8c16404637b9edaee9dec3f9dfd4f973820ffdd39debe9ea30f274b9df4e6e0f96f227827d874142e9de5b6e0f01baaa7bfbca6d2f296392767e6b70afe97c3fb9cd45cef797db3ec8f901f27869483603657ae9e9d392f9f39b16729b57c7f5e964b494db412164b472d3ae718f34d77602d7aae76ce3da2fae53f9856f0f05d71c2ab74d24f3c9daf12c797c8a76bc29723c1b39de4c3b3e586e0f03ba1ca6dd73b8bc672ad877f4cceaa2c938425e370de80ce5a9f3d3b5fb8e94c7770036c1fb8e44ee3b4abb2f5bbbef28e4bea3b5fb9a69f71daddda78ee7807d7e7e47d7c6c61fc9e343dcfdacb0f9255f6e8f95cf2903fb7c7b8c3c3e03ecf3f4b84a3eff2d79bc406e8fd3e41c57879c3fd2e8388c7963ef508dedf19aaf1cefca6c5aeaded7747f96f473be3d415ebf9326ef044dde4cafbcecb3e57eb1dc5e2eaf9b25f78b34bdd4f9e9daf91cf05c785ea5c1cdf2f8ce609f6faf439e57a29dd79fd70ba40d3c3f5cbbee16797eb6b63f274ddab4d66c3e51de3317ec3bec9abd5607bb1175b053e7a362a7e461ecd4798cdd48edbafab053b6deca927150f9a8f2c953a49c79e05a759c6f2f645edfbfd095d142f97c9626ef2479fd7cb00fe5dea69dbf4d6e6f073a2ad6778063b783637c7b8594b300ec73bd0ae5be8ab74aafd3b4e79ea6e9a5fc6121d887f1463d6f17ed79ca0f4dfc95ec1cb00f626cb32fe4f15101598e31b01a0b8e6d2bb7e3c03125fb64700cfa4073f79ac20a796cb4dc9e0aae3f59f38d5399d767b70bc81edaa138433bb637d8a1649f6eb0e38c34769c09ae3f1d5cafce413bc6cb6db626ff2ccd8eb30c764cf06987927db6c18e73d2d8f10f70fdd9e07a750edaa1eae7cd34f9e76a769c1bc20e25fb3c831de7a7b1e30270fd79e07a750edaa1f2b48a456560dfc983adffd0aebb8879cbdf8b98371f2a3933bd72da3c86a4fbc51a2ffdfc25daf94be4f6524d8f4b353d2e93e777d5f4d7cba885400f751f3cbf48bb5fc5aa32b0efd8d7b69f76dd959a7e57ca6d892667a626e72b2ded1587ab340efaf9abb5f357cbed359a1ed7689cae4538a9f3aa6c5d08f450f7c1f38a935e065ecfbc65e0f59afc1b58326e9bee57e7551fc024e4ba1bb5e7dca83de726cd4e751faf673607d7f0ed64569bb7da7d248fd5b76eaecaf6bb34bfb94b6eef64de3af59dae6ded65fdb7fd46795cb591eed6e4dc5d871c15c74c3a4e67debab9dec6bb8779eb27f748991fb9f77550ed399516f732afaf4d01c7a1bc995e795ba93ca1ea972f336f7d6f074d2f757eba763e073c179e57fabfc2bcf5cb57e4f655e47925da79fd79aa7e394d3bbfa376dd6bcc5bbf54fb41eae6f7316fddfc3e975dc7f575b02bd3e4e8ecd4f9a8d82979183b751e633743bbae3eec74ff9bc592795cd9b33338a6f2d66c569bef4b547c55be7a3fb8fe7eb9553a3c20755a0cf69db4c949171f543aaabaa3d2f541e68de30fcaed7cc3f3178063aa5eba101c53b21f02c7d4731e4eda3a4c95792a763e02ae7f085cafcec1f45275f6a69afc47353b1ef56987aa07413b94ecc70c763c9ec68e27c0f58f81ebd53968872a17b235f94f6a763c19c20e25fb29831d4fa7b1e31970fd53e07a750edaa1cae1669afc67353b9e0d618792fd9cc18ee7d3d8f102b8fe3970bd3a07ed68a2c97d9179cbf71799376ebdc4bce5bb7ebf3aafea11bb69e7171b38ec9eb4a58b6a4fd6b71ea0f4592ab7af4b7d7607fbce355da7a591b5446e552c7f8379cbe737a48c835d9dbbdea53dfb4de62d9f9780e350de4cafbc6ed7c97d55c6bcc7bc31bf1c1c8772df95d7e9fb2a6eb691dbb7e4f189609f3ff76cedbae572bb4c5e3f493b5fa13d473f5f298fa7eb6fd5cb5da5db62e6d1adbbca032b349bab923ed3e336b93d5b93ad7cf66d4df6db52b6b263a5267b555276ff71886c55eebea3c97e47ca7e48eeefa1c95e9d949dfbab261b4bf76aedd958fa2fad23fddfd7d2ff7d57d71e0d91fe2abfea69d59a99db295572fb01f3c627e53f1fb2645cf9105ccbb71f316ffefdc8959b7b9fdccfd29ef109f3c6f04f34b99f6ae73f95db8f810e1fcbed671af3cfdc67f7bccf7d6e2fc541a5fd3fb5b45f038e431dffcdbc795eedcf71e5e6aafe2195269f6b7a7c2e198c93fb6b359e2a1d543981e9a7eecbd1ce4fd7ceabfc52a59dff50bbff5f5afaabfb7b69e775f9eb34ff50e7553a7cc1bcf56a55ce286eba3debb5f34a9eaa23a974f852f3852f35bbfec3bced7a257f4fedbc925fa35df715f3d6cb83e6d1af90f37a1ed5edfa5ab3eb6bcdaeff6a767dac1d2fd5aecf01fb2a7d1d3feda9e23b1607543d238a18b25a6ebf61e618f22d4be6df6fc1b57cfb1df3c690ef5cb9fc55bd2786a867fca0f1fb4193fba376fe47b9fd1ee8f0bddcfec4bc79f727f7d97c18027f6e5f95062a8ffec2cc31e4174dc7ff316f0c51fb3286f453ef2b95cffcace9f1b3ab47bf83e5fe068d27164374fdd47d39daf9e9da791543566be7bfd5eeff554b7f757f2fedbc2e5fc5906fb4f32a1d7e63de18f29bc64db767bd765e8f212a1d7ed77ce177cdae3f9837af29f97b6ae7f518a2aefb93858b217f22e7b118a2ecfa4bb3eb2fcdaebf35bbbed78e976ad7e7807d1043faa83e8c4cc49055ee96ff698a218904abcdbfe26f752ddf36629e1822f61db983949d59da33d49893f9601fcacdd2cecbfb138d810ed2ce4453e6c9bb62df913740f67f0e50ef2f641e4da8f1285a0c4934d3746cc93c31a4765fc690416a4c8ef49944b6a647b6ab479eea3750fdb075c49014fdd47d39daf9e9da7915435679cf2ba6b5f737d7d25fdddf4b3bafcb5fa7f98792afd2a105f3c490440b8d9b6ecf7aedbc1e43543ab4d27ca195e62b8ae3424dfe9eda793d86c8eb126d58a818527bbfdf18a2ec6aabd9d556b3ab9dd7ae5aceedbc7253d23701d297b7f3d47be1303144eb7b48b4679ebe07b1cff3fb6369646d621eff4f7460de98d141caf8c3d57b9b12efb3135b316fdfc326701cca9be995b78d7adfa4f25747cd1fcbc17128378779f3bfdaf7d3e78ec55a657b27963ae6433db733f3c4df4427709c6fbb68dcbab8320af3a49c2c4d5e37cdcfba6972bb6be7e578d5445796daefa864f6d4eee9a9c954635c559e547ed3312933d1c3cb3da1c69c96837dc7ae21fdbcd7ab77dfe8f57381fef0bebd98379faafca86ceaadd9d45bb349a5ff42af7cb6b7dccfd5fc73b3dcaa38d7c7eb0b625fddc7b77d35ffedebda3374bdf73a15e7135bcbeb97817dbeed278f4fd1f4eb07e4f0f3cbbdc7c575cdbdf7281b84ad30862adb72c03ef473fdfe1e21efef1df2fe9c90f7770a767fedf34aebb87ed73a9e37bf9ef7e784bcbf77c8fb7b84bcbfabf77e95076bcb38c5479671dba87ec330659c8acd0358321f8c91c7064a396560dfc99bc372b5eb06304f0c10fb50ef3ccdcfc681e37cdb5f9eafd0e4f6d7e42f77ed1e36de2ba7f6399a1c75bf182f04e5546ae74703db838e555763fd14c741cc5b4e0d92ccde73752f52f7a934dec6cb4ec913c7a1bc995e7945655e39e25d513a1bd4f38668693ac495577c99765dbe96a66a4c9f62adc6a22a1f5b088ef3ed602d4d959e83c179b02fece6d7afd03828796a2cea54b0cff53ecf7b7dad7e855e9f53726ae50ed3f49f0fee83fae9d7af70d3b158d5f954590fed823ea8e4d4953ee97c4cd6bd124540867a5e314bad53c93a5ea28479eb54c5e038df0ed7980e77650c57ef18b334792399373e8dd4e48ed2cecb31a40998bf543b098ceb4b8c06c7f8768494b300ec73bd543c6daae935567bee584daf71cc5b87517163b6f6bc5db4e75da6c951fcb3928cd4b95abf2b067ec7c74314827bf9753343f8c13e324d46f9b856ce2d4a6cc7bced73391e36b1ad3c3e03ec3b368f38dc7dc68897bc72981c5b9dd85ede5705f6f9763c48cff1e99f3152c93c406ef74dc384cff552f61ee8e3fabab81cc43cf947bc739369dab5898ffb3de7b212a20f679ad3ea2d776abc05bc03484468bfd31dd59d754f74147d4dfc17ff19281ebbd17188f58e00c36cc379622ee346a7f557649c6dd855f427a8a74f12bfcb9d2b5609a12b13298fb83be5115cb96ae75f25982ab9c1393e55ccb4e49325573967f25999b3e5772d65c3d822e79f57ca7ce7b1d54e63a492cd757eaf17f2963a6aa75e5997497c5aa57ecf6c47a63beb738d7344015defec570b0de788df7b094d2b85f6d39d631bc51cd4b5ac8a4d74b69bc5d3526daf71fe363d73ae4466d6d13cf9133bee4e3155c954ea58c3b52f103ef97f29d21029c2d137e5f983ff34291011e3d89494f83f866e90e185d5742963984096f01c2b6205a28e313b8560701b532d34fbb7cb7b042b496b8b990c4feeeec282640a6f3eb47fef0e9b4b77cbf29a56cc0a4435a5471da6a503cbe5e589565f1013b2b29a14724575fc09137ed1c5352783f8ddeb5689eb8227405351f8791340349be7f29470fe578bdcb74a4cc55fe744ba758ef0d56c82f3bbda89a3e5ce632ba40929e955c885670be4a9056a5d6a63d01b99a08b772e731bc4e7b1e507d2636f566b45127b81a8817549e39cd8b344f5a9b1ac43a9ec73e24b2fecbdcfd87dd6be35a364e4d8c2d1176799d3a785489ffa3c154ba1c6a6146a91e96c517739902e7d5ad6da954c1ffe6366d80af1f1ba74c0083631116cd9303ece75af9f8ff34eb3a11a4333bf36697d309d0618c12c1341f1c66f5e0609ce7434dc43d61eebc7b0ad6f86ed04c3ae29d6f9d101a3d8d440b190536c6f52abb9a616d708119c8d09ee105270334cf056210537373954eb4c67497e6e9d90c20bdee0eec4dbdc83f5b066f6a71c244fd6ad02e64d2d4c69c31176326aa5274e0e9e382d31c99dc34a6e8549ee1256726b93438977fe99afbbd7af8ce4b1a6b3ef32b21b4b57f50e5a42b631d113231f7623a597daa5a4fe9ae8dcbbd2e1b097e827d8e4dc6fea824a4fb4bbef68df43d0cc65a68eb1601a6184db9a3c9f63ef8925bbeefcdd70e76f6712ce9fd8cb4f98ee810b6e6ff20bf1b4a519f18b39ac94ede89c2b77aeaf142d277e7c9623b1dc79369737413c219912de3bd2fb476fdffe912bfca31ff08fb09a617ed201f3933e11f8c95698f0be1108ef6812ce0ba9ad596ae5ff6fe72745782b5c780ea6793f83e689809a77c24aa5fe86522911a454ea8c3119606072b049ed344cba60c2071a849f1c5078574c789e41f845018577338515116b0ec94858a9ebadc754b1b863a5a7b2af9ebb4e7455738d54b7f76c67bb4268c18f732dea7e5b923e300daae503ba33446498cc4c45544359c1c700b410c587396c0e1661d32e9db1c0dbdde4f0bc61c50720a474e971675d222b5bfcf96bc5a959ce13786af2e3fc4d554a9ec8c6f3440f539e10017b6d83e689c9ceef4da222c9ffde4ba6c05cf1ec647763186fe7231f7a1a0a1f510019fd2a5ff855910fbf8a427bcc637a6221b2c01022fb258285c85e5881576828f01a072cf07a9b8473971e66083c853cf0142573bafe9cc1f87372b13c556cca531d449e9ae9104fed209fe778778573e9465305364daeea63ca55a2a692c98e2bd8395fbf8eab125389202a45a95d547e9e2647d6b83fd948f81ec1cc7d607e1e80659abe984b8c34b9448e7089258ed32f717655f69d2ede92f0f729fc1c1f18e0aec61cc431b6c6f41885bba6abc74acf5b9afa6bd00fd360b449838e46123bc9e2b2fe5af4c7b41863d2a22dd0823fadca49f5fa3f7b00f6ecb1a667b706cf5e228afe2a394e40bc2d0bf0dc8158e01e6708dce31b050bdc7926e15c773eb8285417d7204cf27661256f8301d9de04a4713020834dc27949369e856f740ec1349f60d03c2f2b98e64331cd2746a079be4178816889ae4a09b851964cf364dd741f5137aa12611cca4cd6b279584f77352f976630beaafc26a147fa128ccfeff0d7d9c247e7e789f1b074ba62c553011692269bd40f10730a4d8279509fe247f0085cf03093609e03a61a7240aba6c172409149b83b32cf501f11bd1df57b65c66770346dc2dc9f7ce7273bb5a299e67552b1494f5ea1ddc1a0a7a8d0f2e1af8d84bb950977cb4fe36ea6466970870b52712e31d9c323cf0c43e4691430f20cc77c9c0fa54f2976cb842ba502c865fb394e7d80b3752b83958ea9fcef75ceef1aad70ce151de61b9d80bace69af0f1555050eacd23993accc7089c384c4152276ad11f771d92e5a7ebec8393fc6d9163bdb3e8132e008cc95679a5c84bbf2ac703e3912c3bcb309f3d24830d71f662edbdba9d9ba054aae56c7cd15630455f32b57debf9ea92fa1f0226743c0e4188585add986b0d5ae65b0b035da54b68aeed24cbe0c9ce05c55235e07046fefcdf15d5ace65e61781e99f8e957f634cc9d285b9d343ea2ca6e6e24932d69424a2933993a398f4081e2c51e6fb4e9405cc3c82a9aee763c932ce444ff4a2ef9c417a7ec6d89ac92df44d6e17412e27c5aab4c350116adb9a9c9953e373aa9a6bea949a4ad15d7087de0e0b608b0c01ecad80016c7b4cf3dd0c9a6707d47c3ca6f96283e617b50aa6f904acd4dbdd54ea3193ea694a8d8998ea4b0caaaf6c1d4cf54998f0a506e18fb50b26bcd4249cd7e8ca59f8b6e4644cf8b208844fc1842f8f40f85493705e98559822862eb814173ccd24987b56a51fc1695c703ae6252b0c5e7255fb605eb2834938bfbe8a219554be9464884aea8e18a655a6ecca1b08412ba9bc30b2b13d5086a1de0343bd3a1cea1918ea6a13ea6591a18e4f9b60272c6bad3164adfb3a06cb5a334dc279185b1b41189b85095f1781f09db118b93e648c9c8d79e49e2163e41c0c478d01877128501a1c73312fd9600ac039c1bc649e49386fff6cf483244dfb673e26785348c10b30d67b45e07a0b4dc2f9f57bfbd13a4d1d74172c11371b12717da76089b82b267c1f83f0519d83095f8409dfd7209c8fd10a227c374cf87e06e1cf0514be18f394fd23f094dd31e10744207c0926fcc008842f3509e73d1307f9f1f105b8e07293601e350f6686029f7717062df037cac2bbaa1eb5aa6045f332cc96434cb6f013b99ea70679d672ec59879a9e055f8c2f4f792f54ff97d31598168799b4800304d6c8ca4fb9605f7f0d2a310d0e3769d082c1d7e30b84676c0c586eafc0c2cf11a6d8d63d58f8a93209e799f8c80832f14a4cf3a30c9aef1650f35598e64747a0f91e98e6c71834bf2ba0e6ab31cd8f8d40f36acc3f8f33f9277f4fb948c6b2c54e6c5824e3d018d9e8708f2d14dba16c3be7f76410b3960b41d5ce5f7ce0cf7ae7d84a115f368b4ecc4a71b422604c5b83e97fbc497fde819dd4480de3cfadb5698cb467b1e1c58c1bb3f506d41a71c5063990ca6d8ab9f6b9df785f2726125404b269adc926ee2027d49ed05ab5e2dbb0d9ccfdc9777f82356cd7614e7692c1c99a0474b2f598f0930dc2b3020adf13137e8a4178d380c26b30f73ad5e45efd7c650fb75d5ee06c4be43137abecc786cb6b4738db200eb3017398d33087393db4c36cc49e7906f6cc33433f731396d467451009f73209e75548fea1933055c8bd3152e760a4c4e74cb320a9609c36639cce8d80d33e26e1bcac3b8fa59675b923829575fb629a9f1f81e6fb9984738c17f849e15c5cf0fe5894b8d01425780caa9643a283160d07607c2e8a80cf8198f08b0dc2830e583908739b4b0c6eb3796430b739d8249c8faabc94851c5579884932efb7bbcc8fcfa4e9b73b14837d790429791826fc8a08841f8ec1be322cec230c920bc49c1e5e07b66138a51afa16dd90caab4c7e647cab7e35e36fd5f9e0465a7db137f1479ad29db7dcaff19315d28c7e3c0a137c6d48c1476382af0b29f8182c0b5c1f360b1c8b49be21ace4e330c93786957c3c26f9a6b0924f3049e671ece608e2d88998dab78455fb2493641ec76ef5e37757e3824f3609e6e5e26d7e04a7a9319e8281be3d02d0a76238ee0889e33493609ebfef0c99bf4fc738df1592f31926c19cf3dd11703e13c3714f481c676182ef0d29f86c8cf37d21399f6312cc39df1f01e77f60381e0889e35c4cf08321059f87717e2824e7f331ce0f47c0f9020cc72321715c6812cc233fff0e76a8c87f11c6e3b108785c8cf1783c248f4b30c14f84147c2986e3c908705c86097f2a02e1979b84f386f9d37e90a469c15f81f9de33617def4a8cc7b311f0b80a7391e742bac8d598e0e7430abe06c3f1420438aec584bf1881f0eb30df7b29a4ef5d8f69fd72045adf80097f2502e13762c25f8d40f84d98f0d722107eb3417881582784bf34cc7c9f4614f3e0d2f768bceec74bcb7062b760eeff4648f7bf154be7372348e7db4cc27947e15b7eb44ed35178bbc981c4b2252b1ac481e81ce76d13296357d83b8c7785f119ef145a621d6077989298a7c4bb7e92f81d3c89ef3409e67502fe3da7507582bb30c9ef87957c3726f983b092efc1247f1856f2bd5800f8288200701fa6f6c761d5be1f53fb9308d47e0053fbd3b06a3f6892ccbb7d3ef3935dd274fb3c6412cc5bb39ffb119ca635fb3006fa9f11807e04c3f1af90381e3509e635e82ffc084e53837e0ce3fcef909c1fc7387f1901e727301cff0989e3494cf05721053f8571fe3a24e7a731ceff8d80f333188e6f42e2781613fc6d48c1cf619cbf0bc9f9798cf3f711707e01c3f143481c2f625aff1881d62f61c27f8a40f8cb26e1bce2ffb31f24695a08af9804f3c6da2f7e04a769d3bc8a69fc6b488d5fc304ff1652f0eb26c1bc5ef03f16b25ef00626f9f7b092dfc49cee8f089cee2d4ced3fc3aafd3626f9afb092dfc124ff1d56f2bb98dff1f9e061fcee3d4c7022a4e0f731168d1221597c80b95de34478b7fb1013de2402e11f614cb2c232f9d82499af3cd8d44f32a659cdfe1393605e8dcef623384d35fa539360de81d3cc8fe0341d389f61909b8785fc3926b94558c9ffc47261cb90b9f05f983bb78ac09dbf3009e7bed4da8fd6698aef7f6338da84c4f1a54930afdcb5f523384de5ee3f98c6ed426afc1526b87d48c15f63283a8444f15f4ce3ad426afc0de6cb1d23f0e56f31e1391108ff0e0b1c9dc2068eef4d9279dcef1c32eeff6012cce37e979071ff4793e04ee2c27071ff270c72b7b0907fc624770f2bf9172caff40899577ec5dcb96704eefc9b4938f7a55e21e3feff301cbd43e2f81d0b76b92183dd1f98c67d426afc2726b86f48c17f6128b60e89e26f4ce37e2135169f9937f972ff087c3981091f1081f04626e13c700c0c1b381a9b24f3b89f1732ee373109e6717f50c8b89f6512cce3fe3621e37e530cf2e0b090b331c943c24a6e6692ccb3c0d09079a539e6cef911b8730b9370ee4b0521e37e4b0c4761481cad4c8279b01b1632d8b5c6342e0aa9711b4c707148c16d3114252151b4c3341e1e52e3f658f61b1136fb75c0248f0c2b792b2cff8d8a20ff75c4488f0e493a07133c26a4e04e188eb111e0e88c091f1781f02e988b6c1bd645ba6245f776218bee6e58d1bd7dc8a2bb3b56748f0f5974f7c0fc6e4248bfeb8905bb8921835d2fcc2d2685758bde98caa52155cec5b2c9e408b2491f4cf8940884f7c5604f0d0b7b6b4ced6911a8ddcf249cbff79eee2725d3bcf7ee6f12ccd7c3dbc18fe034ebe10dc070ec18018e81582a96854dc53c4ced1911a83d08537ba7b06a6f83a93d3302b507633e322ba48f0cc178ec1c96c7508cc7ec0878e463c2e74420bc006332372c93424ced7911a83d0c133e3f02e14598f00511082fc6842f8c407809267c9708840fc75c65d7b0ae320293bc28ace491588572b79015ca5158857271c80ae56893603e647c773f82d30c191f83095e1252f058acdab73464b56f1c56b72e0f59b7de16f3b76561fd6d3b4cf2f2b092b73749e68b4d55f8819166b1a9f198ca9561559e80a5df8a846191a3e3c52eff22affa1e2ffc1a6ff29bcb2b9c5bdcb928d36baf4caed0c73f10c9cfae12476a58be5817738e385be148dc24669170b9c97b4a9d6d352b97ebee4d916b7656ca8f5cc29927f013a8de33ae7ec58e854bd25891fc2eb1f9abc4faf3e63b77ad0ab8e0d3448c7a9589fa0486cd8881f3615c8aebd87af1f56b3e3fa85acc08e277f133754bd02de33387d6313e7786af8e18c4be49987d2b4df655127bd54636ab76f1fb729162e5c243ca1ddbb975fe3d281dadfaf84129c6699589d3bc06cb7de90985e73019e3b08789032f8eccf93af9652dd7aae5c2929a141d6124c0ce246505b1640a66c96a9325a3344ba07f85b7c52c2d883553316baab13865d60cc6a632e6aec13c57aeba9ace1e7f76d63f4e4dc3ec5b63b26f1a1a875397e8aa5fea05971ec4dae998b56b4dd66e1bc037dd28eb3725a38ea23b6076adf393e7602c0b9fe7ccd28258b32366cd7a9335dbfbca73131ca215c2b356092f0a9fe7926782d85686d9b6a7c9b631b5e5dd1ca7feb763edcacef3841dd5d21e77c6f31251ebd9206fe71e942e1a461741666016d5982cda4e4b2def73618af148c06b29fbb09d185fb1ba1c4d3baf8ce82cdb09b36c83c9b2fe9a657a4eaa9211a24c44b02ac657098fc6a766627a6e34e9b9a3affc3255cc1e2f97f5295552cd74fe9eccf6740471710d596ecdc26cde64b2199f519fda7e50e9b456b6afd2c5b7201aef8c69bc9749e371014a5aafde552c75210cbc64352d9b11c4aad998557b9bac9a94a6e471ad98224a9b35c2f3ead72a49e6bba8526e0e66e366938dc3d194e32df865ce45cad632d1229b2cf43595b151d712e66276ec63b2a334449c68c8c8300fb3725f939585be5b5253ebace14511cbe763daef67d2be28400d35a8fef58d080b300bf6375930274064763d2e59feb8f7f8edd9c964efcf428cc1017e52315d7d3c682ad637e6ed825970a09f58911ad7f1b4f317e1d3f5b7d43f9d76c5ac3cc864e5445f11718e73f132a16db9f0aa866d6f2cc22c3cd84f8b379d27066bf146dd5fb61b66d72126bbc6fa8ef2c1acc253ab3e362dc66c3ab4fe7d4d75e5b84c96ccbb63f61de627a604290ff05a147d7b780966e5e17e5a63143562ff56d7b7b4588ad97c84c9e6850d6c33358d728cc691261a537c969dd3457dc5aef2731966e951264b27fb8a5833185fad8e979beafd1ddef393a952743966e7d17e5ab97a193349589a9a7ab0e5eae778b4a54f0566e3317e4a9f541b93ed42ae27bf8e7b177fefa66b3bd7f97bbd38eecfbafaf52a5762f61d8bf5bfa4b3cfad27246ff05fea449b6a2b30ab8e3359b52862cfc4f25fd0eba36552853139dec4645746f74ed96dad8579f71eb44d9eedfc4b245a32265ab91b45fff92cc190ef6d6005bd9c53a2d7c3b539bfd6967c8fddc9e3fcf96b9ce7f212626eadd67cedd1f4124e706037e55fd3e23f03133ca136ca8c6e58e17592905f2d6d73a3fd06b1ac6fa528f76a444990cfcae4972bd56aae7559614abf7c9082d0baba6d52ebbcf2b131cb451d859750cb1c6fcb961629590ee9de9cf49666e9893c555bc9546d5490cb6d1c5c4f6faa5b8b93f8d31a9b7da8730a5998734cbabb0276923dde89f68cc96a958b6dad88093cb37091d36577519d4fd557e4d59f3a540850655c9de2e681606812d755b89afb3ab386b90309f29c6c969dd5a890a7c6c994c87a30f81d671ddd3ce72915b2cc9fc6e0f7643738c6c4016449ff24c853ec04392c1620afeb9104792a2548f7dbe6339dcbe78b7a42a573297fafc23f420931c6015ad9c824b4d328a1b5f5781fef18d73f0a1d075c3fb64be23a9d12d756ce8e7abbaa170fab646b7c5fc647e5c601db75a0b03883125b3b8f974d622b85ddab1d7596cbeac98658002b199104762625b0a60298db52ae8949d5a3198073969d2566712c407e9b9b04793675f057d12cbe516c258862e750e26a29fc6eb268a46d128f8f53cb8037f415a67f50626aedc99eb363589d5898c551656769c2f5eef9fa37e083f1c5bb1a78069ecc368b216035425e85def5d0c7b9c43acdcf855d07796932569ecfa6799e8f589617a0f696578717e7f9a838e7856ada85b9bb38d4dd45cedd7afd23cf57152ecf771b2cd93769ee532ce47d93e7fd7fde6d58c8bb0dcfe710f8c444fee346ef0b28a3772f99ce6e2ff15a31b6d7efe8d3256c84ae4f8f147dbc1ff05271dca459734fa42ff5636c7da23d9f19ad0ac60b29d17631a0c55fbe2ee173efe970e650e1bc0fd4332eb20967512c717e0e705e6c13cee258e2ec0532fb2536e12c8925cef100e7a599c059850285eaf3d8495814b5a2c2b90bc8ec9751e2ec5487777a510ea743d98d0ae5bd00e5e5b6a02c8e25ca6120935f610bcaa258a26c0e505e49893247a21ce9fcafac1d9a325d34f42ad966716ebd68dcf11be2077215c8de5765a2b3192f78b0196729af67a3c3da8e0aeb0880f5ea4cbd77e45e58c5874b67c6271750c1db0bc0bb2653afd3566d31597a01c0776d431633501c6936cea642791d40791d25ca3612e530998d6b32e58573a9d0cd07e8aea744d751a25b2e7b2af5c1c1ca52520fdc850ae3f600e30d99f0c0c22dc603c700743736641cf40e5c2f8c6189bc3da86edf9489cc3ccc53dd56a733e49164c5c934e0913767c223b198e82d99093d920c657780f216eac10a2b3d6ff626886a76cae8db18b44a9a0168b73604b43836e5b201b4db32d142f6539d86ed63d21e9c1154587b8222e5761bb19276d792617d1278eb1d36bd97217d9140f65ee60d80f34e9b7016c512e7cf00e75d36e12c8e25ce412086de6dcb0b8561945523b24eb31b8067de630bcae258a2dc0678e5bdb6a02c8a25ca378157de67e7db99921856e9d702acf7dbd3433e3a86edf0ff00940f50a2e46345bc4d4a3e6ed2a54186ad0d15b62600db8394d83ad799b1bde37d087d906cb4cf7600e64336c11c154398a300cc876d8249d81a2783b90d80f9884d30094b6d32980301cc476d82393286308701988fd904338ec34d8700988fdb0493b0bf9d0c661700f3099b6012be262383d919c07cd226988483f4c960f604309fb2092661d70619ccae00e6d3998089bd0bd7bb8209b3395947702700f3994cf4ab17b2e4d731b8baa9337ff95535e28af8e1cc03389fa5c4d955e2ac762eaad606a1e2fdebf1ebc72c025dc2cfd9069430c39301bd1f78e8f39440f990116fb75bca0a4331e8f0cd02b85ea0c4a5667dbbb3fbd5768af443ef0a01de4924c4b192cc136702b42fda33a68db0b788ac2fbd3f40f95266fbd237604bf0c4a0b46e05b0bd9c89cc0d2be5fe9774206cf19452a1fd11a07d2513f54aff1d1b716c404e07385fb50927e9920e6438f701385fa3c4d9dd77c6f70ef52784fa0e15d431a0aafeba8d50093b3bc8a08e0650dfb0112a61a3920cea1d20fbbf692354c2862519d4db01d4b732d152f7b694cceba1c5b97db42f00fab63d638d085fb391b58fde0328df69c82e632f4ad291ed64302b01cc776d8249f8369d0c663580f99e4d3009c77990c15c0e60be6f13cc38f6295500981fd80493b01a4f06b31cc0fcd02698840d4d3298cb00cc8f6c8219c7e9d03b02981fdb04338eabbecc00303fb10926e1786232986b00cc4f6d8219c7d9163500e6679430d5b27723d896b9ecdd6a00f2734a90707d36253543f0c8d6241a07e0fd33135e387c0bf5c22a00f25f9420d5f43e352c86f755ee0d26506d5983638682def62f28b1aa6f5bf007af1060956cfecd0632705954e018f0c77f53826beeecf04f91f329a4c9d561c880e552016b0f807d49094cadce66f634c221592da8d03502e8fe9389d8e7a75fdcbbac0e611705d9fa2f7f01ac5fd98895b4e7870cebd500ebd70d39ca2dfe53523a0294ffb577b81621da522ab48700b4df64627c1196f953177f22ec07221b587837c0f9ad4d388b6289f32380f33b9b7016c7126707d0caf9de269c25b1c4b92dc0f9432670fa1fea1ac7c9fa3b81ccfea34d388b6289f32080f3a7861c45e4f54cc2b11a64bd438f03943fdb82b22896283b8398f94b261a9bc19727237c334e365bad0c78e8af99c00a67f3a6ff9e6f9c67f50e02587f6bc88cef7d1319c7b11b2f0394ffcbc44b5dfe3d00ef8cb52de72dd0ee00e6ef0dd9b7e4f5cb380ed0ea0b50fe9109bf84917372ed1b4af8622dbe23d7b70230ffa484a94fda5feee3bd641c577365a0baf4976d40098b2132a00300d0bf6d031ac737e71f802ccfdfd05905348e0b9f7c03802628819ae6a8f9691fc5f133366703a88d6c841ac746e779006a631ba112c65332a82703a84d6c841ac70f329d0ea066d90895703a2019d4a700d4a6364225ec1f2583fa1c809a6d23d4387ebce12100b5998d5009a70992417d0c406d6e2354c2a92f6450fb81e6690b4aa8c187e3104e7e21ebbf7f07f8684b9b7016c5126736f0ce5636e12c8e25cee100676b4a9c9debc0a9f7e2c77109807100661b9b60c6f1a5484700b3ad4d30e3f8e63307c06c6713cc38ce5a6f0360b6b709661c67adb703303b50c2acff841ac2363cd9cc8fb100eb563662251d854786f55996c4da91126b6f0356f32c90a9f2968cade1594605f7370037c766b884d52932b85f00b89d6c864b588891c17d05c0ed6c335cc2ea1619dc9b01dc2e36c3256cb292c16d01ea095d29e1869bd648d8395d4a85b63b40db8d122d5fcf21b9ce48a9b35de6b0a8729c661de5f2043da8c0b50119bebb4d5d7ca4739ac8baf81e00387bd88493b4938f0ce77700674f9b7016c712675f10257b51e2dc3a4401041bae84bdfc5753411e0920f78e0364c2f7a66490bb01c8b971804cd8d222837c1288be7de20099b0c54506f90800b96f1c2013f67691417e1040de3a0e90097bbdc8209f0a20f78b0364c2862e19e44f00e4fe71804c584f2683fc08803c200e90095fef90416e02aa7003e3009970cc3619e41f8027e751420eb628086150209ba775134039c81694a4fd1064280b41d6dfc61694a43d6464287f055e393813630f82afaf12c7b92e1b01d62199289cd42c577e31bf7d3de3af62e63b64263906548822496d273a37f2952ef672aee373626b685b6564ef1eba823030340e90095b6564901b03c8f971804cd8534606f97b102e0ae20099b0a78c0cf2c70072a12db506d2793264b586e701ca61b6a0249d234386b20f88af459940b99c999766cad8e0a30554289702af2ca644d941a2e45ee75d322c430b85955221dc19202c69c88c0dc5917a23d960f9cb01cae199f0c6d405ece2ee8d5301c21194083bd6111b95a5a49e48f631ad6d01c6910ddbc6870233f4e6956c7e411f8075142556f58db212b6657ea36c090039ba21ab40de42278e5f091f0e508ec9c474b7c2944267cbf1cbc900e6584a98cd9c9d55f28d52a97c7b14bfd1812d00ae7199189eae3a312a8daba262cdc4382e9a782840bbad8d3304495f7e9095e06d41db7b3b1bb192bee924c3fa04f0d6ed3331eadaff774e083b87c93ecc3111e01c6f134ed249ec643857029c136c9a13403acb9aacd47f0be09c68134ed2b500c870360245d2249b7016c712e71080b39412e74096dab4f4be4e730787ad117ff341639b84c8e48afe7305b50cf478e653c1ee0142c1645bde0a9196f96415feeb01ca29b6a024fd882119ca3c1002a6da8292b4ea4486f225e095d3ec1c2c16c795513700acd3ed79e94638af8facfff3df00e50e9428dbb264ff67a5a826adc9547f27d9fbf3b100de8e99c8deaa038f23abaa3dbda5bd08ee010aa0324aac7d0cd9dbfd32141fb4b596ed20ea9cebd3b6e9e3f8b9f7c6c06f67d8f3fe288eaba2f6032877b2a9af89749c1c9967ee0670ceb477c51ec271c9a554683f056867d9d9774fe8b1647df75f02ac3b67625043f1163aa861310039dbae484a98ddc922e92480738e4d384917ec26c3b907c03937131fe348beabe711d215b2a555f4df0550e76522762aa8abd2f67fc62f76de0a40ceb705641cc78d1c06402eb005641c3f03fb2d00b9d0169071fc40f18700e42eb68024ec342603d909f42aed6a0bc838ce804f00908b6c014938e79d0c643100b99b3daf31083337594df23510251737e4b7f2b0ce8d38766d5c0ca0ee6e2354c2176e64502f005097d80895b0b64906f5340075a98d50096b9e64508f0650cb6d844ad85227837a1480bacc46a8719c58782480badc46a871fc1ad4b9006a858d5009abfc6450ff01a056da0895b0f24f06f52c0075858d50e33827e94c00b52a138d53fcfd51dc3b953703942ba917b6f0ce2d9ee748ae708e708165cc7d6d5c1d4384ad01c2559408bb316f9f131ff3b1b7cccc5eafcc504d742e15d2c1a0f7690f7b068111769490f53e4d00deb9dac6a135a4a3e7c98aa0df01d66a1bb1924e9521c37a15c0bac6a61973a4036dc866ccdd0370aeb50927e9401b329c9f019ceb6cc2591c4b9c5d4029bfde269c25b1c4b91dc0b9a74da3ea48e7c2938daadb1564f61a5ba61a0e8be5cbe48701ca0db6a02c8e25ca1290c937da82b2289628b702283765627a217ff00a0152c95e2b2f895fb33201b2f45e76ce1e26ec8e239b3d5c04b0ee9d89f14bfe0a9df865ee5300c8cdb6808c6307f10900e43eb6808ce3a8e37300c87d6d0119c751c7670090fbd902328ea38e2f0220f7b705641c471d9f0f401e600b48c2363719c8cb00c8036d0119c7b6cda500e441b6808ce3175dae01200fb60524e1d862329057029087d833a180b00244d6f6be05a03c34131dbd85e2b7dabaca4c66ee3a496ad909b53a4dfc061b8c06380fb367b00161ab9bcc337301cac333f1c5027f997c582c973f6b09fa278fb009661c87c1b406308fb4092661ed920ce6df209b1f6513cc387ee5a519f0cca36d8219c725cffe009e798c4d30e33871f54f00f3589b60c6b1d2fe0b80799c4d3009fbd2c960fe0fc03cde2698715ce9e82b00f3049b60c6b105f45f00f3441bc705938ed5201b17dc1b54924eb2112b69459e0ceb33c05b4fb6774953c29a682915da2ce0b1a7d834b895b42e4a36b8f575e0a9a7da84b32896387f02384fb30967712c710e0499fd745b46659256edc9de13dd083cf30c5b5016c712653ef0ca336d4159144b94ff025e7916f53469f3a79833b486365985281f203cdbce11c384ddc7642386f70658cfb1259393be7023cbe44f0394ffb00565512c51e682a2e7dc4c0c9be1a8b6c42f0f4c013e791e25c896cece72a7c8e15171b5c3813f7e937329e1880e32681d00b4f333e17dc3b650ef2b05202fc804c8d15b28c85900e485f68c318ae3e0830100e545764d738ee3f7d6c6039c17db84b328963857009c9750e2e416f05ef20d324ef29ef452d96b1ebf0eb49600dba5b654bd4933345951732d4079992d288b6389726bd08ab9dc1694a471910ce58bc02bafb067f87f1c070cfe13a0bc92126547063f8bac2ae5c92ffb66a44a4e86b10060bc2a13efbe373aadeb55cea5d89befa9f206d83b493a67bc8c0a6d31407b75264614f96bed90464e323fdd1fc0bc26132b087b67fbcc16c2d689ecbfe5ccf99907a05e9ba94fcbbb5f46df90a9c849366aa810c0bb8ede2327d7163d7c6cd026e97bab05c689cea5bcbfd21539c5d9f235842b6258416a0ba05e6fe30837d217b764beda0a54e16fb0112be9280d32ac8f026fbd91fab5c45ece09de0dbc8ecd722ee2d8f8fb7032683da8a0b503d06eb2a9ab8df4752d5957db2280f3e64cb483bcef18b79476d06c80f1167bc700134e0628a5427b1b407bab4da32c497b36c93a89ef02386fb3092769c3920ce7fb00e7ed36e124ed2c26c3d91ed434efb00967492c718e0038efb4b3e21ec74f7cbe0032fd5d76d5410907fe93d541e7029c776762800cd6d30951c6719dad0301c87b6c0119c79197070090f7da02328e2b08f70220efb305641c5ffde60090f7db02328e93504a00c8076c0119c715840703900fda02328e2b08af03201fb205641c57109e03403e6c0bc838ae20bc2700f9882d20e3b882f07a00f2513ba7eb11163d64d3f57600581f6bc8c576f45e22c2b60e591fd11500e6e336c1246c8193c1bc13c07cc2269871ecbd3c18c07cd22698842d7132988703984fd904338e5f893c06c07cda2698842d723298c70298cfd80493b00d4406f33800f3599b60c67145a2e301cce76c8249d8162283792280f9bc4d30095be864302f04305fb06726501c57bb7e15a07c3113a3d8f93a074a6a86c6bded42056f2180f752267a8abcd3a8b8c25bc6da064301c8972941769320ab9d8b7866e68303f7963d42deac9da1cfc0924d4fe90f06bfbc9209df1cb585fae626e09baf52826c0f32f97a961ca59e2180b95400f703005fb367e192382e5abf3540f93a25ca9e4c9f703adfa131c951ba42c055db89cec57c8d413ebf824facaaa1ed1f229b57d11b807dc356b084c51019d86e00ec9bf664fe387ecc6b2440f91625cad6ce8e77e1d0e4fcc90d317c61d614807bdba661d5a4e37fc95adf6f039cefd88493749d4b329c4d4145fd5d9b7016c7126701c0f91e254ebec32fe673cfe287a939c8c4efdb383782744214d9dc88af01d60f6cc44a3a6d8f0ceb25026b7696267c4a8af0492282f118b65ce8efd605f3d954517da91448963bfb65a2f2bd912d75802c72fe054b8bc5ce3fd3f184e8e59ccc36b3f5e22897572164af71ce72cd36b0c23ece251f72d74848d7c84b33439d1b9d103d035cca5ae76933185f2ea5dcb9b65c6ce73aff97098b0bfa3a9725781ab84d8afcdac644be9c0ebb46eea9e375cbe456a697f61134454b9feac8d2a72e8b5c97e2f7af10cb79540aa9d3ebb4b46efbf0b46e9526550a784b7d8bb6ff639eee32d9859b76166e3ccf497957385f85aa46b8748db826ebff01dd2143ca0bad0200 serializedProgramBytesString: - serializedSignature: 5d97e049ff5634898ab1198e071768e71b8c0305e66f7d69b4848e86494626bc5e9f6afa8d9b214c419d739ce0e7560e470a47859f85f1216b0bc3301ad42e09 + serializedSignature: 4b8dceafbe7fe8057a685b747f5f1bde02199f0250a6e644f1e9d027639fcf1c8bec3711adde1b1234a6473f931f2004d4945adc371fd60735a0bc849fd5ea08 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/3b915252c12161a4084ba3b6c6d98363.asset b/Assets/SerializedUdonPrograms/3b915252c12161a4084ba3b6c6d98363.asset index 1cd30c4..ab34e15 100644 --- a/Assets/SerializedUdonPrograms/3b915252c12161a4084ba3b6c6d98363.asset +++ b/Assets/SerializedUdonPrograms/3b915252c12161a4084ba3b6c6d98363.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9c59571bc91580ab0149ac06bc203018b0b1416693309e89333399f18217c6c6306c59ec192cb30d1eb6419a64fc36734e9ef292bf919f90fc93fc89bce53527b9f776b555aabed5ad96544290918ebad5d5dd55f77eb7eeada54b6a480b783993b05917cbe29198166b624b1c8943f8f608f607f0768fbcf4257102fb5dd866e1dca4180eb9135f634e2f6ce7e12827f270e70f6213f67b747e456cc3f779b8771b8e3075073edb7095d30437ad8939b1285e8aa47325248b75ba2927d31cd4cb6986ed43f11ece6e935058489a4e2561b302677274ee0084f6ae7b25be26b50ee0dc26dc7322f621cfb794637353a3a02fc2dd25e4be59ee2fc0270e9f21e518b5b8079f187c5ecbf4b8dc77c2a745f98ee9c3f2b8419e6b96dfd5f2bc7bbae43dd795632cefef9a5cde7543da75ff94c7ad52be7f975076b7cceb86728cfb36b9bf28cf8f28c75096f3995b86f36799de28f797147dbc3c2e2b6997943435ff9b5afe7f0b90dd93b147de7b4b4b4fcaf451e518f7ed72df2bcf8f29c78e6488fb3e793ea594e3a5e3feaa3c7f5b1e77c87d4ceefbb5fbaf2ae9b8bfa2ddefc93da0c9ed31bd26d3c79563359f09edfa41edfa412dff498e6dcc210f7d063e9315c7224db051c252438977677810c1ace3b8c1d718159b07773d860c184f5ea3389117b3e20eebc97d4ebb22f723da66e18a3dca74ca5fc43f7c45a070fbf0de56c2500ed29f5214c340b40767a6c50bd8e35d6fc40c0496575a2eeb50ec3e84b26db10adb63caef0d88edbf324c250c59fa3dcb90a71b510f20c5037a0cc7fb24e10a6dff48926e93f4f39096a7f87e0811fe21ec7fa4d2fcba9fc077aecc55898c97910faca674377c7b669a036d50fa34d5d95f2c721a1641f4f129e9864d698a7e7ff159e217866e90c1e03e2ff39821644e51da1d91a6f8bfec23185d47bf867cfd76797f2cee06eac2934173f79306050bbfbb31fafa3ffffafeafb162d566459aba380321aa0581c5fc524e8f2f87601562b1a60c0aaae37738fcd4a559a9217ef7ba3dba2eba01a807a219c0c1aec42a1cbe25e1f26201be1fc2679784f4d92583992408adbfe10c13cf04b78183db5c6bb8e1d124086ef307bd0a70f1c5136c31100c93c144b09123483de0775609ae419adbed794c67f7a8adc456334bb92f82ccef649b8afa98aef7282ed020eb07922498370e39a634de3ceb36623d2d8455694d9669e22cd35afbc0e17ae57e482bc4b3c6eeee90bf6edfe7797718a343b00c268231866006095e60c5fae98b588b26164a64c83cce998786916fad9ac71bafac40c7f4398858c8ed882a199693a3ce105eb744797e47dda1c268c7bb37d8789d253b4a17196e54198155433a9359139c59318a763391f4bff0f299b5c56cd666ceac341affb926660d1bba7211c78fd81bbb2cc37e87a4c0f44de93fc16505578a8b1ff81418a76956e1b1287d006e5f0b9cbc6945778cf155f63255d9fa92d954e15bb83a8931ccd93d9536fa396cdf7f98d6ac6eeb8c1345d7b4fa951722a047d443969c0868a52b93d764955653184a326108e73ba384a136cee49db56efcf56e4db4c6bfb7e4f6a3cfd0f087956f324d3b47afebf41c665dea8092cf56d96170c6b6510fc8344d1be4129549348cdee86da0dbc45bb53fd4312b93c264fd0ece31d1fa030caa4c77912af42de6f3d47eb3a75ee0ea1ab592ab35f4543c7744b9e0203cbaafe23cfd84de23e6cd3a4866edf529172e82c9609d1c427afab2732aee6a6fec395472481c26cae301ce6363ccd9c5b90e56e6eb6cfdd0dd64d0ec26dd9c8de9c9da9b9af4abdd41c543103e27438f3b00d98794f794df032a411f86787704dbf546c9761d21bbde14fa50a97cc94cb6bc68b2e5cd4a6d7989cb19136f7118f48c87cd195f36653c5a61c6574c4dc25858932037919a841e5369291ba52539cf22854f6706ef2b28234b259ed01547b235a85e14bdcd604c13f4a0b9ba6ac8a5d9491a8b75f471113679580d814ccedf6baa821336aa609fa9b4491ba55d35953665a3b47e5369d3364a1be04a43674e73a5f5f84b3314396e2ef21a173f28a8ec9d4afc581527d483cc891daaf007558e1e19516a5b3d432e3c15e0c295cb6a72e041ae22a055ee70e2ebe69e319b7b88cb18a7546705f3906f4e08b6d3f152e0b4cc9f48a1efe4f4fcb4d880f73c9c5f8433eed2074ce17170d36978b56ab4e221854fcb8459cb61939677392d3f319a5895ced56f8e2ab65ba9df07e817a4d73adcbb0755208a46d74d1a7dc46974dfa8113e263c868b3c7d9e9225dd29b239900b2d67d6aa782aad7af6ba61d2ee634ebbcf23d7ca5d3ab3215ec0b94dca48ed60e3155c7ea6ae7814cd464c9afdcae46f2a517ffd3b020936c026df53ef615fda48b74471ed339fa996fd6e9ab4bcc769b912c1dfccfa96e277d17db37c06b74c0c7ecd31b867a8c3a63aa77aeb12489823bddc5ea39946f10c5b146d464dda7cc269f36905da2c837479ea098769c3f598a3e83466d2e9534ea7acb1967272a8b575811a77d40717a105d5562ea7d26c69c3e629139fcf383e6b463ec512944746d756f5517541800d0eb74d1c7ec3717855068707d07e6e95e1c1a75737c64d4c3e37c583d2fb7dc56d74ded7a936ebe3ef8047d169c2a4d3179c4e8f8c3af9a57035ca498d8ecb8cd7d5e8374e9a74bccfe9f8a46c1d4f2a8ae2d1344dc0db71f019e9631a8e9ec09d4b7487bbbe244dd31f990f6d52f8c37d2cfb006a24b6fc85458de18fec1f08f3ef03fc0f2fca5d2a1ea685bbf40fefdfa1df1378cb8f39ed4a5f00e25f169f901a797901699afa396f9a3e54adda90a609a789326b53b8141857e28d7c1d8abe54d6cde0a58cb20ece636cd0ed59b8241f9e7fd833f729cac05b3f5d859fc460a5729bc31332678e3824620d19e43e67134e82e0e0eab32d1991ce029e63c2938869993fa99a1396b774dc1f2e3a2940ff48cddf09e5b7a5870f9a5dad37c91fabee9ff2b9508aa9378516896f4932d8223df93f6f2c32d8583c4508435e6c251f7f66d3c747c8561b7072133e1be43f599ae57247d1a5f6c432ba6495fcc4a4a5284af497a2763991e28a1248e76d421e35427607f7d1ba8216518fdb423da0a0fed226ea710df5be614633ca6c8c55e423b690772bc89fdb443e2891bbc38b43c25eea20c92ada195b68af29685fd8449b9468778be0aa59aae25b85d9620b66ab0273c126ccfe92eb69f104f81d7b50876d41bdac407d598f5067ce20d44b0ad4c57a846ad1fdad41ed54a02ed984da21a162c13b84d4cb1b67d2ac818bd9022714705fd904d723c16dca3196fec8f4ec37410905e5b24d94030ccaf33bbe6a57b0aed4026b78bc3c0f587b14acaba7e9f8356b7cfa6ca16c5350aed944799da9a128441e88e0d8fe4bf92f3ae72db2362880d7eb23b2ea6bb42c62edb185b545c1fa5b9b58e3945be15f4caca16ab385aa5141f53b9ba8b07f5998d89b93d3ce38dd8193c8d6c075d802d7a480fbbd4d706d45e09e51877c577c6bb3b659831653a0fda116f12e7a97c7e27486b52e4f9f82f5557d34233a568b131ad6b07628585fdbc4da294c63ef4379893578095bf01c05ded736e1b56b6db0fab730d6b075d9c21657b07d63135b658f252cbab3b5c712830ada8dfa6c7cce6294ec55b0bea94fac77cf20d67e056bb61681200f7d4aec9447fbc995c5e1a1b5314fb382f6ad4db44325d7d8f3b39421a9c0ddb40937c9c035ff14c72acc415b302f2830b7ea09a6c586ca1acc2e05e6763dc1b438e4b406f3a20273a73e5bfdd933d8ea5f15e766756e0621e13fa6c59b64d548f9e64b5321d382a980d9af54e0c8cf5d52db2db9616e0b744d562ebacd2acb6bd3f4bf09f85be1284bf483f30c5ffbfa2da27178afd9af9abdabb19e97d3b492b5bded015649d31f4a9c67fdf17f31e2d2ec544d9354c9d744613df8225cbc4542e12bf63f860aecdfef680000 serializedProgramBytesString: - serializedSignature: 8e1e6c163a4bdf916b344602e9e4d06f0d3d44af946bb5561716864dc73d0e20f88fc059f7523f2548ecb66d8e15903e282ad085801b3f9b5925aee8cb51bf09 + serializedSignature: da4c4083dd87264b3b72273072e66061d269d7447feea71812a6396ebdf6eb7d8a25c37c187b37bc9b87d89a4176ae1a53649b2a66d56ac1145d68129b60cc05 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/3bb52ac58e382bb4e981b9cf13af249f.asset b/Assets/SerializedUdonPrograms/3bb52ac58e382bb4e981b9cf13af249f.asset index 9aa8df6..d43446b 100644 --- a/Assets/SerializedUdonPrograms/3bb52ac58e382bb4e981b9cf13af249f.asset +++ b/Assets/SerializedUdonPrograms/3bb52ac58e382bb4e981b9cf13af249f.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5c49531b4714ee01b401422c06818d139ccd726c23018e9d38b1133663d91828045c5c295b0681e5202062f1724aaa5239e457e447e490fc9fe496432ad71c92f7def4a0d64cf72c420d8878549ad1cc74bf7eef7b6bf70c34a5196cc635d8adb04536c986d9325b63db6c0b7e4dc2b1041ff3ccbabec0ca70dc807d1eee5d63431e3d71bb6cf4c33e0b67bb6c0f7aeeb3553816e97e8e15e07716fa16e00cafaec3b700ad8c16e8b4cca6d83c9b6349a3d783c40a75dae5d70c94cb88c27e82bd86bb05620a0749d3ad24ec72706797ee958069abdd63f6358955827babd0a7cc3681e633a218fd13f606c94487183fb6f263377cc3f0ed11ce518aeff879483862bb73fcbc991fdb6cf77bf9793b3fefe3f77ee6d7e3fcd8c18f09de2ec9cf9b388f51fe5be4d96b4cb7be9dbc7dd447db167e0cf36f7f803e911afa4403f4b130e8e27d06647d420659e27db08d3cdb6169227285f97719aba7b7b320e930ee70bb4cc3ee8159ee000189c52e933fecb131362ab5d801a35de07b92f679685124a2e79d43fce6180299db844f4170b75db83e43de8a0e57843bc36c168ed8eb291b01077a6ca3b202c36e82cb16d812ec7788de5360dbd9d24b24744d7b9f45a069468e125cb100dd81f34de23047fb03e2b440dc67e1da1ec5b12d886413707c45a339652fc36fd9984b1c32398ff200a2ba6e86294b4d53200d729f26db7cab9193d008421f3ecfddb0254d91e5278726de626806194c04594e63842033aaae8db234e5bd450782c165744a28b76f13ef9bec86ab2c726450dd1748828a86fff97be6f73bb7a6ff08558b36c6d298368c410fd1dc80457a29a3cf41c15d8450a825838cdae13764f0631a3572c708bfd9ae48ed822b204c99a95a0194a8a6a0013671682113e6c5424a9226bd985141d92483327adc507ac70e3728a3877255a0c44d8e604c81a0170f2a049b650852ed55d28ae0325c338b9c69ba5ba4cc38ccc6e97a0990d823ee51163f6dcd2cfb882610fbc48f3bea381db86e435d8e781b218e51533fcf2a2db5c8b444339acd13d2d23ef08cfce7e0bb0fbd5779e8f4eee15f47edbe7514271d655c75541f8e551a0ac93444f3b6a5638c4413147d37a94eddaa2116e124f5aa3d16c9214f10e4fd0ee1bc595041189641883660bc3861239f24ce77ea6ee09dbe0dbc8bd01ef665e0b573abd24c44a2990c6aa65b2640cc2600f2ae201c5511ee3922e1988c308e764e926dff85cd413ca626de2a33545ae7f95eaba1fa5dcc98a175bf029b07677bc1cc59a835ee3619007264cd6617e1b84e5ce0752b2aba8fe56ed6bd87f854304ed3fad734f3bf24a35f0a2ce89b32d6629cbb7bc9b87173300b8b6af7923b773f8d7ebab0518582369963617c1890cd08503a5ce398a7a9d596d385236a2f6b978d845e765e625e1934af0b87fa1c244487a4885abf26a0db7320704061709fd76df6f6a0333bcffd6a9ee32a9e2faa787e07beadc86ea0713a64110833b2f1e64423903907417aebb48c69d29b63b8f8ff923ce21bf093036e9f4bd0a60c6314b82f1d25e6bc8b204b6651b8c9bd6e886ce4ae0fafd32995cacf122a3fbb24f3334c564b30ea6b360b5457819f028c16c4db3a5509f33d49c28c1acc49dc256176a984795f25ccde9184e9968d8791eb0326ab6fed94136aca3d2a493e94493275685c3936c51e8233e5c1740a36d331973d86d913f8642958bee4cbc478459e606409005b8bce515d8907c1ef9c4aca8f6452deb5859cea714db9b621e098b2e449b388c086300976e7bd7e92f5aa24bb2c936c5a5910d8a7fcc39c47d4abc59d9d6b71912b88b42b70af18d003fa5472a66472ce1edaa915a4c410250b7fd9c39695c0b7487658005e0fa8b589095efd96864179cc6453a4a18bec8d8b05d422755225f51599d43f6a943a4777d780e23e498474550903db07e3c34fea71b3bda323ddaf42fa6319d2f75cfc48b62c6362b800ddf3d07e9e5ae6a058dbe66879d1b266c0f590744025e95599a4b76b8a184ba49b0dd25cd9236e049128021fc3c0c4374df6819177817ae0d92e4b53d6cff82881aceb387609720e462bb4b66714b5bccb1c7c7d45f5d47c9dd5eb016a6d855c562a9dff82d4f9b038c225b26801d254029d3549afa356c35cab4d692abbaed6684dde5ce0f43cdc2cb7a1e08f944c0273bc8e32503ff729fdae913a2a00e605d5788e6a5f1e70204604ac678d75787d044d6d1c785ea359d02e7cfe822b91505306b591d609194e42ad188d11779b6a5b338e238c8d00d68251012ba313ac84009638ad692cb87e10e01ad109977c42db0810fd2a4034aa13221ce00945a5291a5a5558370268bf08316b4c276871c10dad45c9c672c141b2af48c846fc5edd4a8bda5e13711641092a3b5fd18a7499e8add98b225a4d396d9cdf108b9a946f374bf92c21521e3698f2ccab291fc924a588a0951981bc92cfe08ce013f6ff2ed633a8c99b08420f07c18c4cb77446a63eb2b327d4c47c83de6d1698b18f7f94d7db6255512be247b85a22579b10e43fd509a5fda99336a812baa00a09507da613aa24b7ba0dbe26b045eb962249917dad7617d30566a700e66d9d608e495c58c7c29e46250ce9524287a084cf752a21ce958003af93355bb48bce0aaf7ec0857401c704e0be38c904d4f88120264079e7f4e4f2d106cce55d0294777542892916632736903f2cd0065e5c17782d02785fea04af5d00cf2a86ac6723da60ebd2055b5880edabe382cdfed8461b6c6dba606b16601bd709db251ef5c44ab24c250bbaea167bc0ff6ceeaca5952601e0099d00c705bbac2c0c34ae434704e026752711794db8c59b345e063604f0a6748217ac9819694028130294d33aa1ec101c585c956b5c178e0ad0ddd309dd3bdc0af7d8735adb09f6629cc6b492d4056dab00ed8c4e68ad3520d50a90fded348d606a5b50eb16c0bcaf13cc8b0e3bad5e0152bf7dae35760eea02362e009b3dadc06ab4586dc0b6b333f39c2f838f511ea07184b871a45ce758291fb3fe6a0af6c96dcaa3564e79a662f3415917471bff6ae6114d65f2d0264fc7ca43b334bd2f8d0f8c82bcf8e44ed3fb89d64304d4907b9bf3af824ff2299d4cd2a33cb16b77d14a9adef03ecbf2cf8a7a6f4ad39bde2375b03d6f8e1eb120fffaa8be0fed4e9f46cdffb2b6432d91cda35834d67ad5f48a346e3a793aadb97eb2cf555b737fadd61c9ca3799dd66c52332b151bed191fd2c9f56097b9d26a87ec41fc9f12051a1efff6d41b898b34c757531b87b30d92b548544bccda2221eb93a4974a96a1af194f700656666b440fb7d07f9c486247c8500000 serializedProgramBytesString: - serializedSignature: 04348431da855fe301824f16a92762b0046df70083f8fc7c6e09e12eb040b090837075375fc7645f050f394f4eb80cb0abccf8ce4382abc2adcd46302732ef00 + serializedSignature: 27a9b87b9a3aaafdaf0f0d313dd8fdde9e04819fe78c1d2f296a126c86f92bd978e010c8e133815a7531bba2aea080e69124feab80cbca95ee96cf3d9e95e700 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/3bed6d9b99cd8fb4198c4739bb4e8e4d.asset b/Assets/SerializedUdonPrograms/3bed6d9b99cd8fb4198c4739bb4e8e4d.asset index 5108d43..8e8f13a 100644 --- a/Assets/SerializedUdonPrograms/3bed6d9b99cd8fb4198c4739bb4e8e4d.asset +++ b/Assets/SerializedUdonPrograms/3bed6d9b99cd8fb4198c4739bb4e8e4d.asset @@ -12,9 +12,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} m_Name: 3bed6d9b99cd8fb4198c4739bb4e8e4d m_EditorClassIdentifier: - serializedProgramCompressedBytes: 1f8b080000000000000aec7d07b8144513edecdedd0b971c05247811246750114572522483280672bc04c9280a2a2a6654cc09cc39075454145450544c9815c580193180f94dcf54cdf6f4f699ddde5efddffbbe071fccf68453a7aaabab7b3a4dbcb5e3fe89b570ff1be10c717a38ad9ce1ce7867a633c3fdd5c33d4e77fffa293e3fc899ed1e27b9ff8f71afb5708a333c29fe348ed574ffefe7a6e63873dd27e739e3dce314effa506782fbbb9ffbec043725ce4e74ff4d70ef8a25dc87863b3d9d81ce00a746ac7a068811de4373e85c4ce8152bedfedfdd59e45e9de09112425a7b976ab8ff0d75afccf1ae4d7749f37da39c633db5a6bbd7c6b9cfcc764a5cccb11e62e975db1def87e31f26d3710a1d27b9ff8ae87701fd2e4dbfe5fbc579a1dd3111f74e95ee65cc69eebfa4fb6f0fa54bfc74b98d949eeea763d5148c3212c60c3acea4e32c3a9ee0fe2b741fdf9905ffa86bb37d0e9f24283d878ef3e838979e75ef7971079d9befa7bb6ca3f402df3eb195945e48c74500c33dc6aff0af1534263d7e94d2e2d884ceef92d289d473ce8974bea9f27c533a36a3f33f4969f17c137a7e319d6f9ee2163f84ae9dac5c13e74e92ce89630bc2ff594a8bfb4ea1744be57acb087b76a67b5a293ab722ce9fd17d4bc2f73b4b53582f8fa47387facf1494a634eb5441d285b98e0ecb735ad1718c727e8c8f996c43bc0e506c7e001d5b2bfc5bfbcf252a51fac0f07381bc5395ebbf28d74fa3f3bf2ae74fa7e73ad2f5dd525a1cdba574f67e8b67c64a765846d70e92ce31f659d2351da7e5743c035c3f9b8e6782ebe7283a9d4bf23a69b89c2f5dd3615d40c7f3c0f50b3370592171717d29d9d309c723d966ecff20af0bd9ef2e52ee6fe304beaac68de45a4a5f4cf7b64ddd9bdc42d72e51ae31a6b8b652ba26e9175cbf54b1f56574e45872794ade735c269b497e239edd23a55dcea5fad37d57d2f983251bd1b3ce55d235d9ee7cfd6a85d7351a7fe47bafa7e32c8085fc95afb3bf5e0baeafa2e375e0fa6a856b5b3a0e96b8de4047b611d7073711b7f6293b97ba8daeddac5ce3dfe2da8da9fb87727d75101d7b4a726fa1e3fe74bc35f5dcd1c5748ee50da6e3eda97b3696a3737748d8e27867ea9e0d4be9dc5dc4b103d9e33729edea5c9aea15e76ebafe3ba53bd2f587287d0f1defa5e37d74e47afd0f45defe8abcfd09ef339f5f11eb703f1d1fa0e3830037aa4dc0f1fa1027ecfb87f8328b46924cca5787757a948e0f4b79b3868e8fa46cf9d23b111c58dfce8abe9d7dd965d7d17d8fd1b1351d9f48e12f613d1ef79f29338cd26b95679e947872ac784a3ac7b29e4e619f50da3f063c384e74516cd58564ef0cdf17dcdf5592f38c132e5b7cefb3746f77275cbf75a763b71486f79be51649bfc5f150e91cb50fca2e07bc7a48bcd6035e1be8de5e0aaf5e7494ca6641cf080e6cc3e7e8f83c1d5f70c23ecb36e476f38b74dc94ca977ddf8cf029f68797fc7b8bb80dc8f55b5949e7a8e7cbd0717386fba330cad2f1650b8c72befdca7d1b71ef54e95e96f38aafbfc375f424ca8fde52def4a66b09b2fd9fcaf9249dff4b395f08ce9702e74b87cf735d5cd047e2d227fc4c415f7ae66f29edf2acb043c1e847f7fd237196f1e8baa01c7aee303a1f9374929f3b0c3c77b8f25c29e5b9c3c173fd95e74a2bcff50f3fc7e7f91dd04b8beb715fc7f25c87bceaa72bf27b65aeef86af919c014eb8ad37808e4790fc0229ede647c585249febdcd7e9fa40056760069ccd111cdf74c2efd2dc4e64db0e527c65908f59a99aff5c256ebfd17b6fc160e29008e3150c0ee31526c37895d9565c6f4da1fbc8779cb7145e7cdd51aecf92e4cad7390fe6d1f952525a1c6701795b95ebaa3c8eb1af2bd7df0edf57309fae9756d251b1abbca2f3107aa68c94766d5785db0fc876ef38d1b6e3ebf9b21de321dbf17564bb77c3f7e5643bd67581938adbaa4f0e279cb2d2bd7c5e1cc73961df1fe76354639f4f2a784309af9c949671172ad7a97fa76091c4916d7d62ea5cc122e99c384e259cf2525af062fb152abc8e54e41ea9f0627fa820a5e578c3f22a2af21a62fb337610631738a1185b85dbb3ef99d9d2f920dd56ce87d2b98fe9f891748e63cd30e99cec03d4f6e9d481aebd4fd7464879304cf18d118acf6e33b37d488fd7357a7ca2d183ebd1911a3d8e8ad0e368498f91d2fd7c4dd6e3533a9652f047297a8cd2e8b13d4b3d387e1ca3d1e3d8083d8e93f43846ba9fafc97a705f5f6905ff78458fe32df4e078345aa3c798083da47e20ef59be9fafc97abce18463d12e29ed96c11a9b95fbc63ba1fad74bcbe5907082fa97706a721f839aef13c2f64abb3e51b1e7443a4e52784c52784ca6eb95c2fcd3eaa80a120f7e4ebe5e59d17faa62278a55357f56ee9ba6f09b46d7b78671023b114e2d7ef755fdaa44b1937a7dba62a7e9749ca1f0e0710ab6d34c6027bece756b0589073f275f673ba97520bd1b0675e0090afe6c2715b775cff3f52a74fe7370df1c45ce1c45ce5c454f6e877ee1a4caca5c3af7a51394adbdb9ad9e6bdbfc2bc25eacf80d8f6b9ce484dbd427f9bad5a6f66f6deee3fa9aae9face09c9c01278ae3374eb86daebe9f9de284db27a710e67dc48def67df5a12f635c62b5812c60b7c9ef0eaf2fddcbea47ee0a0bdf7adc28baf3bcaf559925cf93ae7c1654eb87d49fdcb059703795b95ebaa3c6e5f7ead5cff2e7c5fc1154eb87dc96993b6f9527aa68c9476ed56af6b06db7d9fc1767c3d5fb6633c643bbe8e6cf743f8be9c6cc7fd50ec9fbb9c54fd49fa383f49e7a86c393f3b41b9efccef103c76766aea7eefb7b8c6e31734ee5558554a8bbce136828e23f7d571bb94cbcae94e388ed3d8993736adcaff4dd281dba5bf4be7b89c2d93ceb19c3352ba1ecc718ffb07cf94642d93eee76b727e713f75a1827f96a2c75959eaf189460f6e972ed7e87176841ee748b2964bf7f335590fea3f0bda1f8c7faea2c7b9167a70d9394fa3c7f9117a5c20c93a4fba9fafc97a703f5d6905ff42450f1e6bcc450f2e8b2b347a5c14a1c7c592ac15d2fd7c4dd643ad432e71c2f53b8d3306f5fb4a275cbfabcff3756e47fc1dbeeefc936e07713ae8b7e6f7c95cdb01c42716231957129f6a52dabda741cd08ac4d74e4587e9513ae9faf228c413ee706cbc3b20b681c33a89f3749e725bca07e26bc863c56c675cc2a2714f36371e9bc8c7b3ddd575d49b3cf709bf21ad2638f9416722787ef8bb10d0be8fe5f94ebc9b09cb4eb85749e636f36f52e710b623b73a3fa21c6f18274f6e64691cf345a46c7c90a36fbecb50af6b53ef67ef43e172b52b0cba4b05b9703d85cef5ea7605f47d854ee626515ec7229ec661b156c94efe5c3b261feef9521ff572bf9bfdae7dae87f91ff20afbcb4e63d25c6b1f00627149f02ffe1b171fecdf78ae34d4eb8fcdee4e336a318cff57720e316271cc36f51706f55aedf4ac79b250e3c8e7f9b62f3db7cd98dcff3e536e6b60be7fd1d4ade5790cecb1c693c3d28f39c66dfe2fe027efe7685c7ed6403d22156316ccf201f9c0cfcf8b959ca7547b9be55e22f5d679b06cfdf19ceffe0f91794eb0a7e8cc7e86f50f0391fee72c2ed6ad687eda6e813abac5c673b144a7a88ebf728be708fe22bf7d2f50a0a7e15e53aeb53357c5fc17d4ea85d6e5c46ef03d7d532aaea75bfa2d7fd8a5e0f84f50aecfc4018372d7f6f94f257c43e6effa338c0ed8c7cc410d6e541471f431e7252e5f721e95e717cd809c790877ddc56dcbf9154643caad8ef5105778d729dda3d058f481c1ea1e3634eb8ec3ee6cb6ebec597db82c7efd9a79f507cba82745ee6f894138e219ca618d28ac72bf9f9c7151e349fa4d520c2e5f1d54c3144e5c7cfcd52ae3bcaf5ad127fb98c3fa43cbf369cffc1f32f28d715fc20863ca8e0733e3ce98463c8938add147d8218f254182f286b9c0f4f2bbef0b4e22beb9c700c61fc2aca75d6a76af8be82671cbb18f20cb88e6208ebf1aca217cfdf61bdd687f50aecacccb349cbdf87a4fc753936af23f9dbbf1d43b85f6883a38f21cf39a9f2fb9c74af383eef8463c8f33e6e7bf6cfa42263a362bf8d0aee26e53ab7075f9038b0cfbfe884cbee8bbeec36d4ffd986fa9b8332ba59f1e90ad27999e3ab4e3886709a62483beec3e3e75f5278bce4f36847e316b1ea617bc218a2f2e3e76629d71de5fa5689bf5cc69f539e7f399cffc1f32f28d715fc20866c50f0f9b9579c700c7945b19ba24f10435e0de305658df381c7facb4969d9575e73c23184f1ab28d7599faae1fb0a786c3fd718f23ab88e6208ebf586a2d71b8a5e6f86f50aecfc6618372d7f9f93f257bce78d96fc2dd718a2f63dbc45cf5693d2a2bcafc458b1bdc2fe5fb0d509c78cad84b1d9e7dd2111965df036c94c84f10ade0ee3057d0f84d781d7a870f97a47f1c7b8745ec67dd709977f4e67d3e78e622debfe9e9336e72390fbbe138abf05ef49e7c5f103c56e1ff81807f1daa3a482f791e2671f29b81f2bd7a91fb8401e5b2ea5607ea23cf38982b92decbb81dfbc93c2f4ee91ec5ef0293d53434abb7aedff73f87e1efb46f71fd050e22f3de7ad2c93cb29e73febb45dd189e5b04eef867562fc18f5b7157ca6f8672d3a729cfb3cec0b059f4bcf89e3178aff7ee1eb7360d7f07d41ffcc97747f4d292d8e34fec2f32d037e3b149eb5c2e7bdfb8ac2cfb00e9eae720cad15f6732f2dd729eaf3db2c9fdf6ef9fcbb96cfbf67f63ccbe3180defaf94415eb91c9f7fd7f2f9ed96cf6fb37cfec3f0f35c06833a8eed43755c078aed56751cc7e6af53e5c09b7323ce7d43f9b94b4abb65b3d34ee53e1e8b4c486999f7b7613f713e92ce8be357747d6f05f72b05bf96aff7c195c238811c05879f773e54706a2bd7df9774379dabfe9b62c7ef9c703df59d6fb383ef22ee1ccfb8bdfc7dd8768c57f07d182f888f8477489d308e375614a503cbdba9e4e94e1faff35ce5be5d4a9ef25a49b6f58f8a8ffd2e9d17c71f943c659e5748d7a5b4a7b7b8bf8e13b603e3fda4d8f527e25d12be3fe0f773d8e71827c0fd45e1bf477a4ee6a7de5fc7cfc7cedce6e3f54fb25eb20f324ea6fc89f2311e2fff55c26079322efb10e7ed1e27dca6da2d9d17c7df149bfee66374a1757ac1183be3fde184e3d31f0aee9fca755e5bf197c491d72bff9d3a57f097744e1c7f279cf2525af0ea4b18850aaf7f14b9ff847909b3c86d182f2d9eff59915751913757d18fed9f4cd988af057eb75bf2bba4bf5c397856dcf7a3851fec47c705b963c4f696b0a230f8fedae4071db3e0476b7262752c74cc06bfdebf843f84f08b2decbb2f1da93d1eabef1f13e4b78575a5b4b8dec0097cea657a178fede7a7fb513d186be478fed86da77fbe7b02f388350ecb8d354de11f493123d644ba87dbbecdc2cfe9d6a6c69afb3a046b3ea36c798ccfb9fb0625ef5a64b0ed68ffb91eab284deb531271b25f819416f7257c8e3df87db745f8982848c98bf19e05bf86ef89d13af104affdda2da5c53191c2482424f945d2ef2c744b70dfc88f525a1c790dd92e292d74dbe6ebd693fb68d618c811c722b2593d29ede2f6ec48b883c0fdfb4869712c9d92e7fd16188b0983ebc1c1d275399f4a67c739b24cd1dad518adc9d69699768eb6ccf46ae89fef1515bf7a13e7627a96d667c7681d6dac434adecc6cd66146e972201d3b46e872909f5e372c0bbc83e97848045e67bd6d7a77f5cff78e90133b948e9de8d82585ffdcc2f0356e9324b82fb6be9476e5f5613fa6f5bd89b2741fc54c5e971deb1abe1ef45df0f56e4ef83db3bbcf67185fefe1641da762b4a637d63bc27e34973821af3565597da47b745cfb86b94672398c8e874770e9475cca6bb8f497eed17139c2800bad5d8c0d8ae03258ef577daff0cff7bd0bcb89d11a4b799f83d810e99c386af627880d35c85bf2ebd870ac03f78f262a10ee6f52dad5a5df3aba8fd639252aa6f87abfc53dabe81eea930bca41451f93e71205f713666c84cfe55adec3264a175a9f141b19911f47f9e9ee340fc68bb9aebcc39af8e70fa3bc0cea91464e744c66db54526c53897097122e8d2b272a3be1faadb28423ecd080d253b3941f1563d9a78fb6c0207eb151f63c125548f73d52dab5d1e1545fc4683d54ec387a4eb74f92ae9cd03aa818adab8a8d4e3df7298d09c5c6d0716c846f8c235e559db4b811ecbd4273c4d5b8c17baf78cfeaae2f2719e3c1f555747d02b8beda09c7f38924af5a04d75919b856cbc0755206ae93b3e43a85e4558fe0ba15609d253d1bc5752ab8ce5ca765c995fa4a127b45707d2103d7bd32709d9e81eb8c2cb9d2fb74a206e61a9b9981ab3af6a1723d015c67aeb3b3e3aab605507ea7b505a80d9890c620827be748f7e8b0e62af6126bbee536d07cba9fda6609ee7bde574a8bfb74edb9056159418cdb3bc533b608d880d64227ea38e17729ead74bd4261e0da5b4786e618ac7fa6d849945ec4ed475c27157a4ddb83b98db4234073b46ebbdb28ebbb4cf5d8cf6c58b2d493db79ddfa397d2f1543aeada17ccb39ec2b39ecf7308d7efa7d1f97d245fe0fa13c511be7e96f4acee3afbfbe9e0fa2ababe0c5c57fd3d2a5fc6915ed7f87618427919a37530b133713ec4488f18f33d9b7c65bf2ce472df8db47625ebba9cdb9d37a69e8d9d2b5d2b5264dda8b946e7623c07b93e716f44e7cf77c2e593f7b4e3feef4d297bf05e3f315a6bc273508cf7031a12e694280e73f2d26e5e8de0f94ad42e4cec2be945fd4289064ed87f1bf8cf0edb19be2fb8bfa184f18ce23fcafe4f89464e3856303fa98f32b19f24b748fa2d8ef5a573f57d5ec397035e8d255eeb012feab34a34557835a56313495e93080efcfe3335ddae098ec3cda473b487e770b629e7df0ae9ba9c7fcd40fe153b69f549a2be927fc4f1c8c5615f38b2a794d6d95bc8fb398c1dc890f23c63fd80f29cfa1883fa81f657e4f17ff6c3e09d8a381d79882287f767046da7d8c512bf64ca0e69cfafc9e2f94ce590f345ee03637fe43d51f74869579f917dc3f705f7b776b22f57bc5fe46e292d8e6da43c6d23c92d927e8b634be95c4be2b50df092f622cd58ae3a28bc68dd4e42da2331d11e73388afbbfb95c49768d51190dca0ced2b58d8584a0b8cfed2b3f27d05ca7d3ca67e9384afca92e281f1fb23f52bc42ec90183f75eb935f56cb047f150096fb2749fd0ed0045d7037c5d8fe6fd9f8f93ce1729f7707b4aac8776cbcdb435616c596e4cdd87d4b4fe621e074a3c0ef4798ce298c77bfe1c265d97c63413dcdf7ab993731ec5b8bd477ba1eada79096ea7f338f330e9bc38d2bea53c77d04bbb7a1cd7d509f972682f5aee7fa17d710ba9ae51f715e6eba6fb0a2778ffcbdd525a1ca5bd5ebddf2ecf634a7c7d8f5916d62fad6f87fb0b696fd804ed7359d8544a0bbd69ac3641fb4a163693d2e278289d6f2ea525fc4457bade424abbb8c7ae54eea77e4c87f705a27daa63b47633768d745d3c477b5106e374d457ad6daf5eeba79747ed9b2edb49e07523fc56525ab247ec3a3a5e1f21779593b1df30b69a8e3744e0dc98057f2e031cff685d90b60c70bfbb5a067ad091fac88332d0d3d77df446ba9f6389ae0cf472c27d90bde8591ef76b153e267aa73062b738da7210e378c8efe5bba5b438f2fe830da5b414cf12d4cfce7b4b78690da7d86dd2739a721abb1df0a3358289fe0a3faebb0e4fe998a03183c461d2398e89dcefbf4b4a0b9e83f4f715b656ee5b18be2fadccabed40d9f67786758b719b98eb04ddded4517e78371defc17e18f4c3739b91f6770cda8c037cbdc674f59f1b335a796e5686e796619e31deef98c7950cc70e63f7d1f17eac5fec01473bee32b6927f7e6cc3087e0ffaf79c3f320b2eb44e27f67084adb95f87f6be0cda140389d34dc489e701a879c3cfd5579e8bea9b7944afff38d27f5c84fece00e928f175286fc7f33c38d5a70739299fa6b58069ef36dccee731aadd525a1c799fc836525a1ca53dc613c39c707dc83194f7446c2ea5f959c181edd8524a8b23d5635ebd29aeb7559e93f6d24bd359ba16e3358bf4be347e5516767adc0997fd27c279105b9bf2a7e72946c6684d5e56e37b4fd1f169ec9fb175f40ccf4fe07dff0aa4b4b8ef99d4b3134ab2904def58b1f511b237f8e9bb691e5c8cd6ac24462a1c46fabe37610bc9a777c1d8f31a3f8f787e621dccdbd38fedc0f9f38213b28d6ecff8d84683fcd844c717236cf2924627c19dd6bf4cdc162147edcf3aca09bfdb1de5634de2b910bc071fb75deaa7f8745be61f279728d82f13d6d10af6d13ef6649eb34debbc62afd2b1690a3b6d9e15638e523047115f9a071da3f13cfe6680962fc79ad714f9d9e8b6229a07df1f7b3d038f4c7e406bba62dc8fa9f303dea797df8f8e517c9ac73bb74a3ef94116b2698fdad87b11b2dfd7fbe09441fef929e323e4f4269ec5f42c63d07aac98b47e28c66bab3e4a7198d524029b75a03210fb2442874ff53a4ca5f59f5323e4c4b6d391f7bed27c4f2246eb65b22af79fd3f10bcc3788bfbc8f28ff169cf97de44b8d4e7c9fec1bf4dcb47211dcd47e01da8734e817388e30ae09dfe73dc7f9b743b181fa8c5af71d2f3dabd47d91f6fb8a8e5f47e437ed399855bb8de3c97711f9c1ef55a39df07bd5685fc712ee83e17e894cf32c5836cd778fed8cd0e547bdef9650fd57f2199613e37df0e4778c5dfe739b6eca821ff55dc7e81d2c46f3d113639cf07bff9808dba96d58de1bb6be9476f5991e31ffc96b378b7ba88d30fd1d7c6fec57bdbdbcafd9b9e76744ed83affae878c96ebb151fe5ba85fba2273ae176ec443ad23c8ea01d3b818ee352d8de6fd9bebcef6c4b292d64d2fb4e82e65b04fd39937d1d67f2dccfdf7c5d2fe7799334477f66c41a27e6c032623f291ca638e1b6f6143af21eb3cda5b4a40b6a6b07f294b676ec0f9ffbe3f46e11a3751259c5565ecfc87b5b49eb26b88f2dc67bb089fa6545664c315dd97b8ed645c9df8989f19aaaa7d2e5a47d2726939c18d985f7f42d967450e426a669e4fe93a3dcb8842f8e11dfce39a127e146c4d5381f1361dc4409e9d54e4a8bebba39061c6f797ecc6f525a1c79bfe10229edca9b4d32e349475f37a2e7a2da19cc9ff730e6ef51715f67b7541e78bfc5bd34df2a983fc2e322dc17c6fb155795d22e8f79a3897fa12453a44ba76cb4741d9da3f5d68939925fccf171e670fea8f14cdaa33f5ee468e3599cfbe768afdf209ed1dc8e84b49e26b1208203b57de3bc4748b7940e734b037e274bfcca017eb4ce29718ac28fe6a024164a5c16fa5c585ebc42449ef11ed0fb4a6939cf4e54f2ecc4709ea5e9b2c4c9ded64b155d96d271b1a4cb62d2e5036c57c8e55403bb9eae70e1f18fd3242ea729feaab32bf76367b22befa95d3fec3ff3b6847164ec7845e91a9fab24dd2770e62a72b93ed1cd9de2d8d74be24ffd258ef40da2a07d3c5fb2c5749fef7cee0be3fed0792939f3797ec556e51a63f139962178c7c3321da9ff3ae8fb3f42736e80e69cd41e8d57f6391dc5fd9597f8fc1714fbe7177450e44a6dfc38ef6b3a30752ea8efa4beac38cf7da53a3bce63181ccf784ea52bef74ae87788f19a91f2d5ec3bfe745eaa388d774c26d57b56db9d00997512aff0bb91e8b8a8734e72fad5cd01a40180fa56f9c244e94e4ca3148173705af5524ab0ebee7c404e02ec5ca8c6d53142bcf70c26d539a77965826f950445ccbd8b7bbd4d1c7b5b314b93c27ef4c49ff33c9fe34e731417bdb177690d2ae6d16fd09784a312f34aee2facf89a315ff99a5c8a81a9611dc1f9507cad84d9cfb1723c66ee2dcdf4c7db2f17aa97b9647b4d583b61bad3d8b171307ddfb17bf93cadf29d1c5058abf9163316b345851fc28f6c61bd8f3f3de6185cd972be7a4b672bca1744fbe74a0b974f146113a707bf56c27dc5e3ddbf79fc5dc166aec3fb778551672a94d1a6f9a27db49760ae621d1bee3c17caa737dbe275f11be2fb85fde53fc19275cf6d5f954b4677850f6690e67e2fc1446e27c496e91f45b1ca5b9a9de6f97d7296d00af0b255eeb012f9e4f7591c28be6ae255648f256600e4be89d3ade0c7091f61f8f37d77389f37bfb4a850bcfc790e737a9f8974af8ea1a5dc6e771fdcb15fccbe97899a417ed712ef7c526682e92b62fd6b0fc38348e95e0f1fc5d525ad893d6bf2d59a7e03f9e019f71798f735e871aa3f3574bfa5c299d1347de83bca29476b92c6de87359da33fc1cef27059f5b6cc87d6a96f745c5077ea7e1f907bc87f8fe525a70dbe3eb746a4de5b936d1cf9d46fdc5f1b6fef387713fe9d1741f7f3b7a8f94769f3b95fa23e3edf4cf05cfaf92fcb87dd88ff99e38d7f5ab153f5e4dc7eba43cbe4ee25124fd8ed1bb72849d039becef84742b94d3c2263cd6b1c610f7003a1e287115f807486981cfe3fe530df13b2af8d72bf8d7fbf8a73734c3cf56cf483fdd4bf1d31b15dbde4847debbba404a0bce3b141cf6db9b149c9ba2719615936fd1fb4a5c5e83a6b32dcba36f8c276e26dc03a5b47896fac613b738e1b6e32d24778582d7294bbc5b15bc5b096f9b8277709678b72978b7f97867b451f00ec912ef7605ef76c2e3b697a19d13bc777a47854fe7b0fc04cfa73a484a0b6c6ec32b7ba807b1fbee148f04cf15e3fdcb13d2b37c5e1c697ff2601cec5e5fc7333f5370f839de9bb793941647de4ffc60292d70447defc6c83369fd4f807bb7f23cefc3de2e2c4fabb38b73c69f0ace7d74fd10292d9ebf42e15735ccef2c5e139e655e06780f48b6be5b3a278ebcbf7467292d64adf2b99fb5d14c26e3c6695d68e1a111fc22e25482f6382fec22a563f44e26eee36f2eb6cd8c15f48948639c41db40fafe63f0ae1523998f908c6a52dab5cdf2b5be6d96ff1c7e2ec1fbacb797d2b2cf335ec530ded935237450fb54d628beb1863068fcffec59ca73b3323cc7e5557d977e2c6597b477e943c3d8da79906c13a94d15efe2dfd3651bddc3fdd5f258ca933eaf7378cf13dea322265d177a7495d2e2b856c2584b183cd786f73c2f0e63269e92ee9731e97b8c892724cc277c4cf13a14c2e0fdd2db4b69715c47e7bb4969d917785ff91a0afe64055fb61ff18b7793ae8923ef6d5e574a0b0ccd580e3fe3f44de13a3c56f88c137e2778c6e774decef07df1ee1296b8ff17e57a8fb0bf04e7b91dbfc109b71ff95d70bd64eff5e9fa07fa3ea7f07c8e78f2dc06f63db64b7be5f9e795f3cf4ae725fc206f189fec1027fc786f05f705251f788e5a543ef493f281fb38e5bc97edcbd7fb2af68d6aeff5a3e361980b8fe75f80fa3637a63866ec63e4bddd774b6971dc44b66923a5c5f3c353d8719a071e39bf5ae5f69203e35410f7e5b9a0d9d605dc87447bb7077d489b7d5b5d584dc11ba8c1cb341ed0cb09c5a538cf95cf626c3d7e041d793eaaae3f8ae6725c48eb5f2ee4311cd586af601bc6792eaee99cf72819997c688be243c43bc1fbceb791d2e2f8b293568602b9af4b7233f5cbbfa9c8a53ecac41b8a5c9a2398784df25d5a8f101f2c5d1347de77bd9d9416f7f1fc695e17ffb394669dc4f16de5799aaba78d292c93f7daed2ea5c591f7182e90d2ae7f5cf490f23cef67de434aa3e7c5f19d941dbcdf02734f1833982bf30e617490d21c83d8963ce79c6c1097beb11e9c93e206cb88733917f32d47132ef7ed48653bcef3a6798f804da9e782b57d5cfe79eff6dfa4b4abdf253c9ea0ced5e37d90ab4a69713fcf7352fd53faf67768de9dcbe5121ec3a4b52c978cb6c0603b1c99ba3732bed09c85387dd35d1b5fa2e2e6c78add3ef675b894c7dfb6919d9a496971fc84ce3797d21cc339ce8aeb3c7f89eaae95b3a4ebe2a85b3be0725f497dffda7152eae7e2b6b6768c88bf51cffb5069d60104b6ce10ffe3346f3888f7a4cba59ccfbcaeef53272dbec58f95eed1b51178ce28c7f1e39dd43c2ef7785989c451c8d8ee84cbf676e2729b7fffa5fc8df201d2f5a2f0bd97750c7308fcf333c93f1f0bf3d2f9657c7458569a8d25fef13159e4d95849f70c7eaff3e938cd8d8b537f63645990e318cd2d8caa3b033f94db4113fd7bb2d95b2d589fffb9e4235ca6e87b03419ff0977e3e5dbe237c5f70ff0e09e319259fd4f124da8f3ca82b69fe6fe22bc92fbe92e41649bfc5f10be9dc173eaf2b96025edf48bc328d277da7f0a279c4896f2579df620ed7f01eac6a5f00ef75de554a0bcedbc2f727780fedf67e1e5ec17d04dba5eb682c49da5f39e35815ef29be5b4a8ba3f4ddebc42e4507de57bcab947675b82a01f8fc62c067b7c2878fd2bedf097a36b1336ca3abb8ff63bb749d9ff9413a278e7b9c501f4ac0f50fe919dadb3b4ef374137f2adcb83f4efabe7182e6e45e45e35f57dd25c9d3dd2b8ef2379355db49735de39381eda6f847313d52e6e7a50586f47de204cd274d48fb917bbf5dce578f94f8807b02bfa63a2e194bdde3fd1638d4ff794d6947ab5352da3738ce7b93a83ad15cd86442d1897c2c5920c92dc05c02bebc4f8614dfbcdfe21e5eabac1b63e779cff237ac7571545d97c5e5bc919416b2c80fe25cefd0dcd7a00f8cf763db69287f4d96f745d501e4abc9a4136a73796997fb758a2de5b1e2f80c3fcfd5b9e9d7ae536c9b697c59799775fa84d3d9be27c7795fbcdf0de573bb95f2237e02c9d5d5d5a6f53fcd918ccf89c054f64f4d163aa1f7002feddaf5fa440407a5dd942c2d7150f6cc0bda79344f3149fb1607e58de6b226799fe286525a1c8b52d8493ecae38a2a1769cfdef87cc085fa739315152e14ab93152499344735a9d99738905929754ded97e0ba225959c2a439d8718a0b491e83a82aa55dfbafbe4d922d8e75151bf1bb03e725ed1bc9df31f1d2026755f87edeeb2c497b3716f694d2d2fdf145e1e792c5747f2fdf1fbcb4b8ef4445c7a4847152c4b5c511d74e8eb8760ab8e61e6fd8a9d87809a56b2a36aee9ebcaf7a7e5a9b40f637c29f0a353e95e651fc624bd7327eb2bf9559f8ed2b71592344e14a7bd0993b5149eb58827f519c74f4fd7fd861d0a16bd3b266b2b58b5098bdf37ce0058921de367d291e65a72fb31497bf1727f4f92e7f86afa7be234b61b3f5b92278e3cdff767290d309c0e923d8a9c906d6e5c1bce73aeebb4b6e4bc2f927e27fce5cb72598b9fa3f84d6f29cd65a548fa2d30f8fd29ca9732cca387be545b92571b70e0325f24fd16bcb86d4ffd6c411cd9574aebe2485529cd71a948faed62df4cfd893c7f3e594fc1e671d0add2736aac1347691fe2f8b94a5ef0fc41d71f5e1824dd2fe4538c8cd3de8f2f70bdc86d0ddeaff33729ed3e776be930ce2d148be334df307e61843ff3ba05791d01af09a3f221afbbe2313279dd95d3958ed9aebb6a4f3ca90f347e5118276d0e70d25f72ecc57b4d9b4637e6a06de7f01e7cbf1326d759d44f98dcd709f5c7786961df9e126f3e5fa4dcc336bf24832ec826dc96e2fdd8d472d7202533d35e89c9fd9c70b9a3f9bbc9864e2886c72f95ce8b6323ba5e574a0b5c5ddb8bfa0a938d9d507f879776ed717b25a04713298f18a3a9944797e9758bd3bccd24bf13ef96d2e228ed8be9e18967ae90ae49fd75c1f52bf5b202aef23e81996cde4ae145f34f932dc3364f721f2aed375e48e529ce733d687ea6b67f9cfa1f93ad153f6d4d36e76f2d8f95ce1785efb9a398e4f0b82dcf83bb36256f5dc4f769033fa5b986c936527e560e1f936da57cbd5eb11fdd135f45f7f2fcc7dd525a1ca57d22935c3ff37e907ba4b4abdb9d2580c7fe063c0e5478d0dcafa4b4b76192e732aea67447e5998ee9b689d3be6af11ba56be2c8fbfcd595d299ca1cefdfb7474abbfadfbd0de82fedcf17601c6260934315fd682e4ab2b364135e9f7493744d2e737cfd664516fb7457c5a7bbfa3addb54ef1e9ae92ccae74ec229deb42b6e039367de97c37c906fde85cf774bbc46f919e93fbf8f9faad1286eefa6d8a7e7cfe7692d953b125bfaf48f56fb247845e94c7719a7717cc4f352cbfce681fef1ebe57f90e56b2574a76a6ef6025fb283a514c4bf696f8539bd3dbd328a24f21c976ff514a8b23db7b979416fcdff475be87d740ad3190238ebcd6b09e947671ef6de1e3dedb13dcbf8f94ce425e642ca5b98c71f659c24c1eee846303cfd588582f9ee4f90cbf4969579ffb28cfe23417317e4f0456d47cfd71293de3bc775d3792c5fb01ee2ba5856d34eb4de33cff92db569a6ff7c4694fbba8fda6e2b4b75db01e525e2b2a38287bf22569dfb60769ec421d4b4e0e54eea7fde5eea7fce73d669352fb33b887eb1fddb82fcd0b7990f556e61826072972071126f33c42b9af207cdf03d4c7157f908ed4b6d6f695baf67a90f5e67740699f2fefb7c0ec4af70c90cecbb2f93e1e8355db4ff2debecafe36719a5b0ac774658eaaad785fbcaa525af0f856e12bedb7cff70498515c95f1d2f823e17cd58d3fc779de29bf3345ec21f1e072d28f7c21ce313c2acf50b9d4ac8d8e3fe6e3f39a61f6bd873806d03cb838efafa77b2fe4f9b659ecf51aa7f9a049de8bb0af94167217fa580fb1be340734fe34966f1c43d751de9c1d81c93192f6460c62e4709fe7c34d08eb1927dc1f1e558f926d1f3ec697f5f0ac886758fe08453eef3148f3ae1dfe8613bd132479ffbe0e525ac8e4f6df51e1e793478571d0f38ff07aa86795bca639116b5847b5ac48e30299e6952569ce78d036604e345782e7772539ae4afb7da5957bde63afaa9476793eba537a561c47d37dfda4b4c0a1b90449decfaea9949671e4fb8bc2e7926352e7e2eb817da4fd8833cd7f4b8e57ecc31cc729f621f9f2bc2c8f4b2c3c2f2bc9f32674f3b20684f3353981643493d2b2ece6614cb6afe9dea1c911527e1549bf05171aff5cc36d9f2395bc2e50eedf46fa6df09f7b2c621faca0ce1ca560517e3f467d4b8f3594ecc3d78b947bfb6239f1e7c27eaa9dafc9fd51729b20aa5ca9f5e5f33e5e36f369921349dfc3a4b4b84ef3a892cade5a49de5b8bde6b9334761ec48bc9be0d1e1f29e148f8f1177c6e4f448db3719cde487a705db0c9e0599ad7ec4c48d929383751b2abc22f327e53ac7b82bed3fe449b8867d4fc9aea645fce69efa7a09c535b31c97b5db591d2e23825c24f6638d9c7df598a5c1e4f98a9c8a57d4992d353d849deb7a699941647debba9b99496e24092f79d6929a50527aecfa6d091f7bd395c394fe3fcc9790a0e8dbbf27e18491a13e53de0bcb49b976b798c40f7de375d922d8e0b14193c9ecafba8f497d20293fb831629b217f9b29f8ca8ffe32fd171b3228bb9f0fe4ad5a5b4c0d2b465580f876336edcd5278849476f93cb52e2cc3a15890e47d3e3886739f16cdf54d9e4cd70748f7f37971a4fd548218710ac9e3b62ced771b7f15eb10f4db4b6537bec5bf077ecbd8bdf6d49b1a9dd86765bb28e587e76fb2df659abf191937d432b9d4c93e16f07736764b69713cd50997c953e928ed37935ce684cb248f8f9eee84cb248dad0665f20cc5cfcf08e74192c696e3af39a13269dc0ee7bd8073ed97e236f2994eb88d7ca6ef5febb91c52dc5ecf7ec26d8ce5922fd19af567f8bd5ccdb3b3a47bdfd0e7599c7d8df709d92da5c551da1f23c9e3ac67a7747e661b902ded239269dfa5a4b28f4892c6f592d23e22c9f315d9fc5bd888df6bc81ecf2e059c56489cde029cb82d7eb1c2e9623a5ea4f8308ded25797f12d726cfee01f2a53d3f32d66b972af2792c6ba5227fa5225fe8f0b6cfe3e943a46becfbec430283ca4efc1dff7e7e3f4a2e977c8efbb5a8dd1e7f377c6f56ed08c90fd3e6dcd03a84f5d40f147f2f0b7c2e4bdc0f25bd53c578cc53daff24b06d57e91e4d7c54bfa31ea77db1f91b85411b577e878be247fd9e49daa3a590c7df798cfe8af0f9e4e5d27971e47d4fea4b69d756cf916de2bc4fe0878a3cdec3a4ae9416d7757d06774a9cd87f78cf539e23b129f55c36dfa98af17b3e7f3ba88f72be7af87cfc633b790ed9cd91e658047925cdc508eee3327eb562dfab7dfb3eafcedbaba9c195e6b6c4b759da6b6dba9cf8277698f14f353cb75bda99d79e4a768ef3f73de579339f59cae1722de55dfc734bccdbe9582c617ea1e8656a63ae9ba53962715e5354573a47df2671a46fd9c669cd42d0176aea33fc2ede318519c45bdaef27183fa5fd7e368d979e11e7af4d7fd6f43bcb718e23b9e60b8d9b393c7f80f7cda926a505f7a87e531983edfb95132aebc6bcb89f9bc77aae5778d17e3b2f2e8dc0a2671d696e4b0897b97e6dc995be49f712b783bea1f3f45e9a5c4579f673385dc8e34edc4e584df7ed92d20277ad827783a40f7f5b84c767be55fc86af27250cddf5c2b05f65d457f0b831c5c3fbed72d89cf0edb699d77f3c12712faf47647bd1984df226c55e942e54744ef258ff2e292d70bf55f06eb1b0d7c379b0178dadbfcc7314e4ef20709ea8ed82283cdad72549fb17057186f62f7aa598e4d0b70992b74bfad3b3711ef3b942d18fae3be74bcfeaaef3dcbf1ff4d7e33f86edc3eb951c694e87b39464f09c863d525ae831c8b7c92b1c377536599a8e1b677fd0e81d7cbb1ce97d5606bd9747ebedaca2eb3f81eb5cc6397eb38fdfa1c9a35fa46b3a1bff1acd254eef2e693eced7f738d9fb30bf37f33e481ceb7e0f6326ef72025f56f78449f21e4b4394f3f7a4744f929c38aff7fa2dcc3db8fe671833edfa5f61dd92dc36e7fda67629bcef9738d01e545b7628cfde47fc87fafa6d210ef17fa4eb45129eacc7df0acffb153dee03d7153d82b9100f109761caf907357e441c44966afde0cf3066da759503cf8d7e48e1c0e71f8ee010cbc0e1a12c39f0dc7ade7f69b872fed1080ef10c1c1ec99203cf435aa370e0f38f457028c8c0614d961ca8ed957c5ce1c0e79f88e090c8c041ddab0671e07120de73698472fec9080ec90c1cd666c981fbf89f5238f0f9a723381466e0f054961cb82f7f9dc281cf3f13c1a154060eebb2e4c0fdf3bc4fd210e5fcfa080ea5337078364b0edca7bf41e1c0e79f8be0509481c3862c3970bff4f3c4e148e5fc0b111cca64e0f07c961cb85f69a3c281cf6f8ae0503603878d5972a0778ce48b4a5ef0f997223894cbc0e1c52c39d0de2fc9cd0a073eff720487f219386cce9203f7adbea270e0f3af4670a89081c32b5972e075475b9c707ce0f3af4570a89881c3962c39709fffebc461a472fe8d080e953270783d4b0e544725696fa6a05cf0f9b7223854cec0e1cd2c39f078ce5685039f7f3b8243950c1cb666c981e7a2f0fe494394f3ef4670a89a81c33b5972a0fc4fbea770e0f3ef4770a89681c37b5972a0f964c90f140e7cfec3080ed53370f8204b0e3c77e523c51ff8fcc7111cf6cac0e1a32c39f0dcb56d0a073eff4904871a19386ccb9203afa1fc54c90b3ebf3d8243cd0c1c3ecd92038f9b7ca6d881cf7f1ec1a156060e9f65c981e7eb7fa170e0f35f4670d83b03872fb2e4309aeedfa1e4059fff2a8243ed0c1c7664c9610cddffb5c281cf7f13c1a14e060e5f67c981d7e67cab70e0f3df4570a89b8103ea1b513944f58d445c2be035bd3c0f9dc769dcf79eae0dedb01dda83a1401ad7309d4fe134228ce2dc310aea4b5851182c93fa8e0af6b590d940c2ca4626d9bfa061ee3283f11dda4f26e8afa4fd64b6538c2ca0f5b0319af3a61b4f888d9630d5f1a31f14fc1f089fe64815509ec5aa60fcc8b12b9a8be348fb6c84ef4fc6bcfef1bece04b79ccf725a7b1bbd377544eb6888d3c369e5b6d4c63b339d19eeaf1eee71bafbd74ff1797eb285539ce119af2fc6fb02a8fba7b12776aeb3c87d7482131375da503731c73d35c1bd5f60f4739f99ebb477da79d8d3dd6be35c9cd94e8933c58d07b562e524de3dbcffc7b8774cf1408f2a4c13f1589a0841aec4fd3bc17d6caefba02039c73ddfc73d33c3fd37db3d37ce4df7778fe2a9d14e5bb791304a4119e18a2d71e6b9a961eeffb33cbcd12eedf43b33a974ac7b567d66888b39c36337dd3dc3069de5a64b3c8643bdffe77b4c2778ecfbb9e7e6bae78436939ceeee71a1272d5df7d9ee6f9dcc6164323dc7638dcec762a5a56ceae96a23d8b7f6fcf4ffe7c8ff2247bcee48513ec49f446b6f74ec9cb49cf8ff36f4838ce8b4ec47186d3d93c542e7da39adbdf1c321691634d7315d43bd7ffbf63ec0e910a98bde3222bb6b7b1aa472b8f4a5570dde5ab1e7ec6458b5f64e6be125b13a19548b32acc06b12db2b0d215a856432d1461055cd1fd399dfdbde66e87f687effbe29de7de61950e8557ee10cf0b69e1ae6fe58e8fe2bf1442c72e1c73983dcd418f7b7a09a963b6d045429cfc0e9d5672692c8c4719d8945088f0dfb9f78f8a80cd14d6fe4d281162923b7f6da3f35235c11c9f21a4b05d462e2c2f2fe3d270decd7f9925aef1cd1e1c083db1cb43aa9cf9f325efee42215e550812e87cafcd7852073d48fca9fb2815ea9fc117ff4362c077c3c130764c184ce8265ff373e2eb8e7e6e3a2bbbca56243bdfd2a44fa60140364c1a4ce82de3afae1ffa10507ba0ca7525b31371b56ccda86953c1bd64ad32e1b0ec88a851a2bb629476f6b69b48a145ade92433d7029045cc512b83402ae6a095ca473a8f2ff759114d7667a2863dc7bcddd49f4923757c39ade9faa8332999902f2a632babc1126dc4bcb4acd9cea3873ca22e41ab6c8e510724d5be4f23a87f276a8fbef5beab9d59122d6d4c8ba8edcdb896a689bd6901574d6f3fa208ff957ad97de81c4bfbabbcf4e76ed30dfeb1598e73eafeb708ab668edaca37d1dcf9ac58eae1bcc8c11b270459de70bb3d745d9ae3affded8f92be9c085c47ad984e93a18b83202dec712b80a0a04c5b681a02a42aeaf418e992057d315924aff9b10d3d67d95300f31a257be6a9aafe98b4483c80083e423f7afaecb1561bb867a4a6ab634c0d9b2972e5b3cc71dfc1f664b7737257e9b678a1852a89c5d23a2919727d5d3d48a128e72a4060a488df310906aa242d8c4b678d742c84d6d91f7d6f99117a7a6fc2775e050a7a773b84b318536d3eb031772e6783db453dc3a66827b56feddcb459ded6577aa3662a468bf13cbc0eb6af2d98121a1b9e77e2d1de75fe48cdcb536caf716b6f95e0721b7b445aeabf328af7efa6fbb2ffd5ec1929ca293d8a8719fac5ba5ad1dd43b19cd01e57a3d5dde080bb641b4d4ec698db3671f04de360fe0c5c8abdad97a557d84dcde16795f9dbf7aad9ea3ffc308d8dd253fc7c3f4cf0ff7bc448d147c57b4f776083492fa85bdb648bdb4286626576c0cdc3826fa66e779f7c53c07d1978a03bc52612b119591063a7f10b926f69b295294df5fe7c60760976888c03be6017c3fe4c907d97a722384dcc916b931423ed816b9890e59b463c5dac2f406a28adc082337d5218ba69e981165dbd46ba60317af8862ab679b57c4e608b88b25700b04dcd512b82502ee6609dc0a0177b7046e8d8a778f6c80238a761b04dcd312b82d2a7fbd6ccb5f3b84dcdb16b93d42eea34136ea92e88090fbda22ef8f90fbd95ae3001db26876893565e9cdae555d4d9a5d0722f0c3b5e04bbb9880774436e96f6b938374c822f68bb55d56b1bf930e5974bc88155b761d2f0723730cb475be4374c822de0dca267a44c4bbce0878b025f0a1c816436c5da30b421e6a8bdc15959561dab2b2cea82076437e37dcdaefba23e811d6d03d10f491d6d03d51111f695bc47be990455d2b16d9d8b6d17b23f0a3f300de07818fca03785f047e4c1ec0fb21f063f3007e980e5cb4d7c52e93b6edf5c311f8f17900ef8fc047e701fc081db88884631ccb483800218fb5451ea8431631769c63dfc73408818fcf03f8606493091a9b18d5ee4374c822124e742c23e150c479926d3e0ed320b7f6469e8467ffafbac6e4e9a2dd3c09b9759389d523d90d948ba19026b1864ea6aeacec99a16eade1c8b9a7e6c1b94720f06979003f12796189ad178e44c8d36d918f42c8336c918f46c8336d9147a14c9c95874c3c06d13ec196f6b10879b62df27108798e2df2f1c8d473f360ead188f63c5bda6310f27c5be4b10879812df23884bcd016793ccac44579c8c40908fcc43c804f44e027e5017c920e5cb459c59a4cdb36eb641db898b9797270730afc1ff74f1a78390c3e05313f45c3bc8c21f3a9c80f9768fcd0a8fd370dd964a9c6264b75b4236c5282c04fd580af30049f8ec04fd380af32049fa1016fedcdd211d4ffcb3998fa85bf7d5ccd843479067cfaac0f5ef939c43d4ef4584cf056364dc862c1707423f5f4c03ed258ae37d1a897a39bb7f9bfd26299cba68cd755a86f429fe18826f4ff5d9c51237ca6cee1c56a83331dcdaa36f10e77bce34f1014f267789706b9282237c5f929ee31ad4c94c26562168a706769225ccc30c29da02b70defcb219ffd302d7cbfd5f2c9b9ee3fd9e4fd93bcc939d5ae0675394c44ea76653bfcef69cb65d164e9b0ff6c81d67a3f87b8e26fe368c99c5df3908fc5c0d785f43f0b9a820894dde330e3c4494907908f87c5d094d78f79997c3f9c83617686c33d2d0360b74e0a2a5213eae61d5e25d8868afd0d03ecf90f62264f98b74961715794ff7c75c8adf135cc72f76067b1745012df6d6dc8f717f4df40ae974a3fc3911297ab146d12be2668a9e8414bd44a76891565113651623792b75f24472901b3dfc986222e76424e7529d9c32819c9e5e964d739f99e9669a89c45390c4cb90258ba9272d37b75882dce2728d5b7c66e8164b75e0622cf58a6c425ac458eaa9c84a57eaace4373a8e77218fa722e4f73a1eefa5c7b8bfc6185aed3424ff2a9dfcaa24bf8df77f0faffe9aeb5e9ee26d65125ad06fc0e174c4e16a1d873a210ed97011d7677ba5d484d5321d2b11d9ae71d2dbe66d44dbfc5a27680cab72cec072ce40da5fa7d3be9aa7fd405747d670ac2376069ae61c4dcde35e4193d444db33118beb516995fdaf9bfb6f9291bcb390bc553a7955a43c17cbd266b871b6c4d2f3972306abb1dd7d06138296de007a59c99dc5d988c50d9958a4db3f7716e7201637ea58ec152a81e2156c126d59e47319effecd35169c8b4add4da8d4dd9c53a93b0f697c0b8e7bd1a56ea17143f37cc4e1d6a832d0368f65e002c4e0b628ef6b9be732702162717b2616f92c032b108b3b742c6a45968121def3333d1be55a122ed2f111ed993b9df4f6cc8aa4597be6621db8e86b10df9db0ed6bb80481dfad01770cc157a26cba07175c3960a61a97b9bbcaa588c3bd3a0e9542ae32d46b88d834742f438e719fc6315a149a39c6e528efeecf43de5d81c01fc803f8953a7051733ce8809a437ca3c3bce6b80a65fec3bacc97ebcaf9c1a240b5759a9b1b5e8d983c92a928b01b8ed03232e1700db2faa3c8ea6b72b2fab548d7c774bafa53bc447d3dccb3aba8a97b50ad39c931eb74ba4e23b9b5b77ef6bfdc0e48def22cb7ed801ed764486b6fa569fac63fd948135f64a18d161da714e8ff179f3dd1ed2c948d00d4317a3d72852775ae50ddd135dcfb79cd27b1275deec56f15e2f1948e474589c718afa932c742f66a24fb699decf24e5463c544ee0d3ab9a2ee59e7a4d73d1b4a99d53d37eac04597c7338ee55cb99b10f2b31ae4f4f1dd08e49b11f27a5bceb720536fd098fa4f4353dfaa03176ef29c63d90d7d1ba2fdbc8676716933dab723da2fd8d2be03d1dea8a1ddd390f69dc84936d93ac95d3a6451fdbee880ea577c2827eec566f1c9992631b1dc6e388d922cf23a8f26797159545fbab15811a9d1fd5cd51ce11ec7bb2245a59734aae6ef46fabc8cf4111fad316f4edc83e4bc8ae46cc949cebd3a3922be8a6fe4a4c569e142c7bb2fb223823d52453d29ea07b38e85fb745245fb4f7cd9c67661d8fdc8746f20d3bd9993e91e40a67b4b67ba320e0fc70bc7146dbd095eabcfc46c0f22b36dd59acd6cb1de4328c0bcad09302b8acc02ccc3c856e2f3393623ae8fe88045c015dff4b10ab88f22caefe9b2572c281ae0469562e9254ab418c778f32e2679ed98626f8ab5185d1ce3fdcfcdf062f7de89de98e34c1a7d9c426ed2c27b669afb7b96d74817b1acd8439fe86288f8951aab4c75f999d86f0db2dffbb6f67b0cf9d3071a7fda69e84f8f23da1fdad27e42872cbaf43ecac65323d611ad45f6f858638ffe65ccecf12462bdcd92f55308f8134be0a7512cfb541bcb34e6888865eb10f8762d7857a340f90c0a0c9fe90283bfe045147b11fde7780d92316e51154d8ff14645f55924f7739d5cb95f07cbcf6de4713d62f2858e4959c502fea52986da6f4032bfd4c9ac06b44fc9ce4df3e7742c44db628703da16e2db51e66d8be791b65febb4f53b70b9878c8f25f40aed6f6463a2e50b3ae9a2cb4a7c844aed062dd095cd886ed08d280e7eab89839f95358b839b10f3ef34ccb5512582f98b08fc7b0d789121f84bc82c3f68cc52a99c995936ebc04564125fa7b7aa2e5f46c83fda22bf820cb24b6790f26606791581ffa401df53c10c7c0bf2939ff3e084af69c05b7bbbe6fdbb1b2346bd5287a73e9bbe8047f70a8befc565b71a527c41cedf10f1dfe38aba7c5f47f17ab78ebe41287e43072cdc634f36c06b31f09ba804fca629011f54342b016fe9c0c5fdbf3be9d5646b6f67c6dc36f7175f1f2c4c38fe9f56ee9f52e9d56cc4c6f75b5149fd535352e38625f56de413e293876975b858acafebce2a764e725b31277baf8b6240c29fc139d77bbd14de2977948b17c979eeef96de0b654bafdbde1f4f2a7652430b02b1ad8738d12bebd3bde704b6effbe27a3bf77a27f7d8de3dd63772d87750d6ffadc9fa3622ebffb1cbc3779199c5b48034338fce8b99733766b1b3c0994c01b858992653ec886f7d8df77a0726502f8078bb17b8933c1673dcbf66d9f11e2ae6b1587a31df56cdac98bfafab8bbc5d42ffcb3db8bb791bd88a16aff998633c966ded5210d3efc01d2d1dd5171fe8b245582ea123a46689e002803fd46589b7b7ea7fb9cbadda1f6f9629c9ac33a530a6dfe136937c942d1fe9ac572c4efe97bb9767f3ad3cbde54a656db9d231fde6e5919f930356fb58e7ccc26a45b1f4ed777ed5d5a2a5b1436f4301ac8c2680dd56dd2c807d829897d5302f65c8fc53c4bc9c86f9acbdcc986f47b55e795dade7e8a847d41a9f21ea1534d43bd630a3fe3902afa8015fb9b719f8173a70d1a2ab14b37ff7fa128157ce03f80e045e250fe05fe9c0c55b63d56cea9b5f31f0d7c80fab65031ce182df202fa9aef19285b5cdbce45b1db8b87faf1868a4d688593552bf4366aaa92bae62072cd346aaa88cfe6f7c1ff81e99ba1632f5de76a6fe0199bab6ced463f366eaff77de0976a2a2554753b4ceab6756b47e4461ac6e1ec2d82e045e2f0fe03fa118b98f658cfc197964b1658cfc0599a3bec61cdafd4c22ccf12bf2927d7501781f332fd9ad0317ef3f0d2cdf7ff620e08696c0bf215bef9707d7fb5d075eec261b65c33aa20dfa07cac4c69a4cec5a6c96897f22f0261af0d2f5cdc0ff42e04d35e05b0cc1ff46e0cd34e0d7ec6b06fe0ff294e679f0142706c05be4013ca603f73f2e97851b1662378ceb8045606ba5ab93c5b6e1a675f25caa5f79a68d49c3c7acf62c40bab4d6e9e285f9905413590924ab8d4e963ce83d2e6da823f7b9dc49c4a2ad8e85bc14763ab54ffc1950b93328440cdae9189471e4d9e4477a9e31d7b06a2da5932880dbebc24f43b308511a15e20e7928c44588f9fe1ae62df633635e06313f200fcccb22e6076a982f37645e0e31ef9807e6e5917f1ea4f34ff1d58c5114cb8e7563c3288a439de8bdc03f37d23bb6740e75ffef25c5ac711e5089e3cf039ce59e9becc597855e3fe304efec78c3985601f1efa4e32f3e359062c45bc716073a75227d047ff53dc98fd9ea3bce74ef8e39c10cc799ded9f18ebf1b8b78d759e4984e97aaa8d34938c8c1e8c5f310f1e2e98d1c39fe8ba7f1bb6725e4649d354e963074b2ca08fc500d78d210bc0a02efa2012f3404af8adcababcebd1a66553cfc57e7d6eeb1039df38bca49cefe74ef01eed1c461aa2187e9861ca6bbb5c35447327b20993dad65ee85b2ba571e22610dd484ec6dd984ac892cd507594aec0a5698942d6566a75ac84efdf260a7bd75e062ded46131cb7953b5512d7ab8a6161ddfd5ac16ad8368f7b7a55d17211f618b5c0f210fb045de07210fb4452ed6218b05598362960bb2ea23e4c1b6c8fb22c71ba271bc8dddcc1caf01aa42865af6a13544c0c3747593081743bc66d704af4bd69f1b261a3f9d83d75313e9fb219b0dd7d8ec1d439b3542ee39c2d63d1b23da476a6837e96e46bb09f2d091b61eda14211f658bdc0c19e4688d41461b1aa4b90e5c4c7a18a5abfac4a4f36362b94c3a6f81fce5585b7f69890ad971ba42e6af44efef162dff5da7aff786d1cd4df93329e61815b15648f6f13ad9351db9ef208a436e0b085aebd8888e9bd1d9c4b1a86f3c220f1ca3f1c03f7b9a79605b64c3b1a8ff45decca238872508ed903ae334ea94eb65a64e7b043e5e035e6208de01e5f004cb1cde1f014fb4043e00014fb2043e10d979b2ae456068e78ec827a7e87c52bcb20ef14aaebf6ed9c4170f426a4cd555d2866a74426f19d3f2f0967130625ea2615eb3b719f34350064c4741dddfd3474c5e13ddf3b3bd505a1cb4a14cb2a433526c86ae0162a8d8a1087ca6067ca121781794dfb3f290df5d51969ca0cb12b1b74e6ac71731c232c5ebd593b387e703e6de77df0d719aade314deba71b834f721b51594cccf84497794af7334f95aba8f59bef6d0818b46da5cd4489b975323ad27f29ff979f09f5ec8420b34161a6968a1dec81116ea1ca10a8c1725e410228c2f3272803e88c1221d03decb587ce65aec8dc617722f0a7d91fc1375f2e58da1c24541344b17b8ffe76a877ec8874eca830f1d867c68b1c6873e33f4a1c391054f4616d4fb90df1498e9dd28c29ef79d03030bf6473c4ed1f1e09deddad32bc31c271fdb7b1d81382cd171a807bd6990c7c9ff48893f40636b9d01e83d7ba9ed7bf640e45ca76a9c6b565f33e71a840c7a9acea01542ce35ce33dd046f765e6fe38d760723b54ed7a8b5d450ad21087c99ae401a820f45d5de19a8da3b33a76a6f1852e22c8d121dfa9929311c65fc72d444f19353a48999a9e64938d69875568c406a9ead51739da19a4722f07334e0e2bbc726e023910dcfd5d950000d7393d33cdbf1def8b3bd986362afa3904ae76954aa64a8d2d13a70f11e737e36efc511df541885802fb0043e06015f68097c2cb2f30a9d5f1e6e66e7e390eb5c847ae85285ed0827bcc392b84d44e231eef5450eefb864e252c723552fd6a8bac750d5d128832eb1cca03188f54a0deb3afdcd588f4519746974ab6b6e30a1036f8a659235e350657319aa6c2ecfa9b2198ff4bd42a7afbf79a9d8cb37e59643021734d16f824eae686a5fa9d34fbcbe5f150bef71ab0a8bd800602232e6d5c898d7e464cc49c898d7666bccdcf6189c8c8c791d32e6f5b91b730a32e62a64ccd53919732a32e60d3a6396d518b397f7e66162c869c890372243de94bb214b90216f4686bc2527434e4786bc355bafece5bd2ecd340c613390316f43c6bc3d7763ce44eff97768def3b5cb5b23def367a19cba13e5d45d39e5d40928a7eed6e554c520a7e44678ae5babcf46b9750fcaad7b73cfad3948d1fb748af2471b44dfd41c2f408a6772ef4d988ba4df8f5e7ed5bdfae56d614d24cf434d9707344d977283cc9a2ef311f8831af0be86e00b10f8431af02d86e00b51e17d380f9d748b506e3fa2cb6d6f2cd0f177d1eb9661a0c024e74f442c1ed5b1a8eba4efe997894d6e83f427a156fa1acb56fa62e4308f691ca6e3603387391959f371f41ad5cdfd39deebdfcbff6bd42948d527743d7586aa2e4119b4d632839622d64f6a58af34647d2acaa0a7b27d8d1a136498cd6bd469a8e67e1ad5dceb72aab94f47fa3e83bad5fc9a3be59683bc16d6445a1b2dd7e2664dd865a81e7f16d5e3eb73afc7cf403eb441d75732c4cc87ce44367d4e67d3e68e431f489de0ad82f23b2d4f7444a7db0cd7b2a2ef5a14731132fd202a5667f86bccfde23fc7eb9ae30d63537b569b58ff2ce46fcf237f7b21277f5bae91d3babe9b8c9de8fc2f3f219efa06fb446f9cddc71be095ed05de1bc4b4d0c7b9fdafaf88abb69f16df184bffb4788c9c5abf2fd0a69858be7ba8f7c4ff4e2bb4d3d0d9c8fb5f444d64d11173829714d619e8329b41f96bde503d47275d0c6bbd14b31cd63a17216fb6453e0f21bf6c8b7c3e0a73af68c2dc5d43cdc2dc0508fc555dcbda10fc4204be4503feb321f80a64f0d734068f9b18fc22e4fcaf47bd1fb6c9d3fbe1c548fa1b3ae9951df9fd50eeca130140cc5f30fd5af7253af9a25fe6cd98e5e4e49508f92d5be44b91a36dd538dae2a3cd1ced3204feb606fc2143f0cb914ddeb1b5c91588f6bb3a9b8c32a37d2572d2f7744e2ab69c9557d6e6ffa3d557e9f888d920efc7ec3f727035b2e407ba37ac63cd2c790db2e4873a4b8aa69a6ab962b2abb05927ef15927bf1f9fb27e6cb65ae452a7fa45179a9a1cad721f08f35e03b0cc1af47f6dca6b3678b2cec29564c177b13c1fc164db1e3afa9f6f7c2e067267b6d78ff597f65b889bd5721937ca231c91e4393ac46e09f6ac0db1c67067e03b2f7769dbd9b6461ef19de5bb798b2253a96c67957c6079695bfe663de59722332c5671a53743534c54d08fc735da13104bf19d9f90bd4e9947dc435ff60f92d88cd973a36fed7cce40fcbf6f0ba104d7769b91549dd81fa75524d23bdf4dcba2d6f433cbecad4409c9287e988b723e95feba4870710fa38a96f4e9b7fe2f70e24f91b9de41a21c998416e797027e2f2ad8e8bbf534d78a4dbb4617c172adedf698af7c6d166c5fb6e04febd06bcf41833f07b90ad7e40a57598b2cb13e79789bdee452aedd4a8749ba14af721f01f756d0843f0fb91bd76656baf5cfceb01a4d24fba3680a14a0f22f09f35e01dc69a813f84c07fd180cf35047f1865c6afbacc28af755ed19d2f1a0b26d9f108526ab72e3b0c957a1429b50729c50371a918362c871ee23548ee6f3ab9ba4f9ba5cbcf2d7e3f8698fcae63525689dfb965e9e348e61fd9d419b9c4c0279013fda971a20de3cd9c682dea3bf8cbb6efe0491db2a8cfff0e2e280309ffc4721948780a99477c0346354f359d1211e6791ae5762c9e6514f757a59b7de7731d5229ae516990a14acfa01c2f885be6f8b3887642437b8521edf5282792ba9c28eda4d67be492031b902a851a555619aaf21cca8152b639f03ca25d5a437b9b21ed17107891067cd84433f08d285a9489836851369e4bb4d8849428a751e22643255e443e5a5ee7a35535d142deae26b7c5d62f21052b68147cc850c1cd08bca206bcc32433f09775e0626ca2523c7d3026663218f30aa25d5917980c69bf8a6857d1d0361a43da826857d5d0fecc90f66b08bc9a06bcd26433f0d71178750d788921f81b087c2f0df85d86e06fa2225c435784eb688a706aa87d8677637168ae656e85fa2da4724d8dca3b0c55de8aaaa35ab6d5d1db3a64313f71efb8dd5e25ef20e0da96c0ef2243d7d118bac9143343bf877cabaeceb7c480976e639e6267703045422c5f150f94e4f439f9f791b2f534ca763454f60304be8fae941a827f88f2bfd832ff3f42c0f52d813f46856c5fdb42b60d19ba81c6d0df1a1afa13e4b20d752e2bf4e156775f6f79e8f81c03dea748a9fd344afd69a8d47604de4803de7faa19f867a821db1835649be4d490fd1c29d154a3c435864a7c81b2bd197aed150dd712c79f843841ca7e934cff12a9d45ca3d216439576a07c6981f2a5654ef9f21552a29546890fa69929f135ca97d6ba7c29ebd52063bc76c704afe6c82557be410ab5d1c5174385be45e06d35e02d4accc0bf43d66aa7b356652f784d73db72b35c4b89a9910bbd40d6cdb5d7fcc08a2696fb1e5526ed2d2b931f90d53a68ac769ba1d57622abed8fac363cf4d12bbf7522fe8d7772d94cf047a4dc011ae5d6182ab70b811fa8012f3ddd0cfc271db878cbef18b79f40f433627e9086f96443e6bfa03cefa4cb73ff13ae7e35ef4f139a14a4fcee7c3105434c18eae496a3f686d3867e458a1eac7bd73154743752f410e4dce963163d9d79de887b2e9bedec41f23bebe48b450f78ec44e591db18ca6fc8dc87eac2fb0c3373ff8e5abd5d6c5bbd7f20da5d752170a619ed3f515ba11b6a2b74cfa9adf01752a287468972b3cc94f81bd53e3d2d6b9f7f5098eb958730e7c481497a6b4c32d7d0243104de47e7eb86e07104de57d79439c10cbc0081f7d3b5f60dc1133a7011320e43ad4a1ec60cef156212769248a1c3755961a8502102efaf015f37db0cbc940edcfbf6816d4c2b8df26140362536c2d845087860a65a6fa823be683acb5b2134d77db51beed63353dc5f6623d86590fc41d9d67a98476eb55e591d2331c96e705c7c6639cc289e0edd00439743ca0e3135b6e837f617559aa8561ec91f9aabb1533c7233760564ec611a63c78c8c5d11410fd7406b4a63047425144446e82ae7f96641a432023f52f71eb2c00cbc8a0e5c54d0233515f43fff2c5962524157d5818bb6d151a86d74744e6da36ac842a37463768616aa8e2c744c1e9a307ba10278ac6518af814c729c6e68d7d0243511f8f11af00d86e0b5904946eb62521547f7dad5cf8d44dceef097d89bd86e6fc4608c8e81bcd976364c728b8bb591178ed57b6157132fac83f2739c263f979d68969f7511f878dddb9721783d64960979289cfb20e61375bd0b86cc8b91934dd23999d720a5c595c5927b99b8507da4ce64dd848c93ccd4d917814fd1802f37046f806c3555672bb15d48eaa5c3b68bb121526c9a46b13d868aed87c04b74a34b8bcdc01b21ab4dd759cd7b295756f00c0bd69be5bacf5663a4e00c5d643154b009029fa9ab860cc19b22ebcd424df394cff1af12fa3e6a2e7ed70c2977826ec07d899972cd9172b375caf94b7afc85343dbc8ec4d9e426e66ab54092e7a0de6375298f8e416e756a4bc4652e2a207a0ea93916e6f6688538ccd371a893d11e2a971c3f668558cd47cebf883ecc3ecf19eb886d57fccf94b77616789dcee3dcf06122bf0d92bf4027bf2824bf95c7a0b591bcb6a8b02dd415b653cd0a5b3b04be48033ecb10bc3db2d489c87fb88d7a5428c7ba79bf674a9d25626e5a2f6fbba6b9c69b617640ac4ed2b1dacf496f419bb2cbcdcff7473c17a346d87c6f1fbaf1dec63625b4b59289c40390c49375120b446ded36f93a18c9385023a3f5be6e3276acf36f6e971446f6eff3df7918758c77c6df7a4a6c1634ddfd3dcecb3f61cbb119363d3a256ebae9d192b8d8f4a87e9ad6b970435b17754439ba14e5e802f79ef946397a1092712a92d1c5bdafb3918c4e48c6694846236319072319a7eb6494f2f4486d2f6126eb10246b1992d52867599d75254ef417c606ff8725ce6fa4cfcea1649de1f2df4f31496750a6cef4ca54f534bda2a4a3b27328aa1acfd2548d5bce36ab1abb20f0e51af09f0dc1bb22f0b335e093cf3503ef865cf71c9deb8a0f0089be81315e75e8ef27294ffb1deeba5c7f6ff86d0ced1528dc8fa75d984db8e88e989dab63266f652c98cdf2aaf1dc7722e881a49f87aaeb5463798877ff18c335d23d91c4f3f12b82ba03414a726e8d945ec8d52ed0b8dacef3cc5cad3752f042d4d24fa923161f8d0f1c2c3787ea83e4afc06fa2be61e705ef37397eb30d49be0869aedbf78c0b9e6f0313f9fd50b65eacc9d6c5e79b65eb6148b94b5049e11d04e4617a13750e47eaacd4a8d3e4023375faa381a44bd140d265390d241d8194b85ca3c4b00bcd941880f2e40a34b0a1f6c7d97e86642052ef4a8d7a6b0dd51b84c0afd280f7bcc80c7c30b2ddd5a8db48fe6c576ac36bd13819afcc85eb64381d6508e2728d8e8b504a481543e473bcd7d5dca40e45e6bd5663de91179b9977181a46b92e0fc328c311f8f579001f81c057e501fc4864f3d51a9baf30b4f948047e8306fca14bccc08f423e7aa379acc9ed2b3d4723f56ed20dfbad34536f1402bf5903bed910fc1854d9dc822a9b5b73aa6c8e4579741b1ad5e20608bf3ce6def8390ec9bedda4f1e34fecce655f98e35106dea1eb13bdd42c034723f03b35e06d2e33031f83c0efd2801f63083e1681dfad012f31041f87c0efd180af33041f8f1cea5ef46288038ef997ac2620d5eed3a8b6c750b58908fc7e0d789dcbcdc02721bb3d808280ff9de1795e91ebe64cf49e9a1dbc8798586d3292fd20929dfa3a8bdf1f9ffb7aa72948f6433ad9351ddd1762741c727bc59e8ad83c8cc69b8ef796aa0a0fe6d55f26f2a621798fa0ea39157e55b9b9695c822ab9475125b726a74a6e3ad2f431dc65c3135d729be6320315d7c735c575f9b566c5752632db13c86c6b7332db2ca4c493ba8ae03a33254e4079f214aafc71acce65c7f7d948b9a7751591a172739072ebcc5bbeb97d09702e62f00c62c021adbf33c6ebb34dc9ede1cd249963f8b1e97988c1b33a06ba098c514c720b38f311a7f53a4ee523ad6222770192bb412757b70361bafcdc2cb050c744f4683e174fffee9b18d74c038ffaee9b6e04aaa19b8c0d77febb11a8e18ebfa34d7b57fa281a71321b897a5e13475bef27f4a895a64736d25e70f14a0b3861b465ab1da78dfbaf9afbafbffb6ff26a1196b5a35c1bbd51aedc64a2d1ae13912b6e4245407c05cfcf03b1d57b4f2f4c4d714c377b3f09c97d5127b7ac77df0caf4d55e285c2e21c7ab71723992fa14e32798be6e21c0bfbc948ea66247588c36bd1fb7be5618a9732b3ef2948eacb285fc53c9669dec6f30bbc4f72e5a6ed1214505ed10494b86140598a947a15bdd0e17839cc1969e83ea722e95b74d26b6515b57d16b9c5eed390a95fcb43ec3e1d29fbba4ed9622f2ef02a2bb1fb84ffb9b7f04a2cf9836f433dcf9ee7952ff3b95ccb90ea6f6854770c553f03a9fea64ef5aa9145a7d8694279dcd448c1335173f42d4d73b4c38d66cdd1b390825b750a5677c2031773bc7a7782d7bd57ec7d8ecdafa3c71b0f1f2c474abead5172a1a192672325df416157ceb571b4e793a94ae7e8a48ae6f4bbf1f47962058ea377cee658c0b9c866efe9de246f36b3d97988fdfb1af64e0eeccf47ec3fd075c01bb2bf00817fa8014fdc62067e2172a78fd0ebcb102fa0cf0ed658a526bdf811305c8ea6e7b0c9d80aa4f0c71a85c71b2a7c1102dfa601bfcb10fc62d465f109eab2f834a72e8b4b9012db7511e65633255622f0cf34e087dc66067e29f2b7cf75fed6d449ef32409fa4179f6e8afe8e75e71ce6cc5c86f87e91a96986beaa6d22fd7224fdcb6c9b6688456e4db32b109f1d9986b2e628b2731b4abb12c9ff0a3561527db9fe009a3ca0965b9e5c858ac7d79ae271dfed66c5e36ad400fc46d3002cadaba5221a80d720e6df6a9817df61c6fc5a1db878fffa2e6eb9fdc67528d3bfd765ba4098415fbf32c9d6eb91941fd020496a5b067f8b45fe9a1907a519def93e5edb6b9e61b7ed2ac466a78e4d7d4dc1cf96556e816035e2f7231ac49914481ce0157bb3dcb901b9ee2e5da1bbd3cc756f44cafca453a685a64ecaee63ebc5deda2c5d26e45233dd8458ff8c6aa6948bc8999f5b24be1949ff4527bd9a2612239b99b0b805b1f835930df23145fa56247d77a691c5e90eafd4b3cb85db10833d99c73647047d8eea2c631306b72306bf651afec886496ec1e90e142c7ed7048b6d779b058b3b11f81f1af0cdf79a81df85acf9a7ce9ae2c542f4538b9d7dfdc506c28a273afeebbdbc0358831ce2cbdd48d1bf348ad6bccf4cd17b90a27feb146de526bb7b85b598169f36f6dc426c6c39d93ba6bee0daca4d15bb4dfec9f46dd739eeaf995e879c08c033a8036f72e0646271a18959ee4566f9476396c58666b90f818b3e15157c9521f8fd083ca601df6008fe00028f6bc0df34047f10bd56171480d7ea44412eafd50f21af4c16c009143c973fb709140f23b315ea32fc0133b33d82c04b69c0fb3f6806fe28022fad019f6508be06657811caf0323965f8634889b21a2576182af138022fa701aff39019f813c855cbeb5cb5aee348538bb9df4eae214a684e9be8f99eed8d518bd0e97f1bc5c4a1d722a52b68946e61a8f493ba8177f1a19ed82ce7df1c781fe1a2f5f006a4c77bd7196d3aa5862a15706abdc310c79f4058e29e69e1ed261485143d5c5fd1b5608162c1d68d85f61dbc73ff0dc7e6def25d717f6ab8dca9e1bde28d75690bd2a94f303b0e1cf4af542006fdff4be668aac053c8652b6b5cf61a43977d1a95d32aba722a7a7a7a4b234fc55ee5925b495c87d4aaaa516ba7a15acfa0005d0d05e8ea3905e86791127b6994a8f9889912eb11780d9d851e3503df80c06b6ac037af31037f0e81d7d280973c6606fe3c02df5b03bed610fc05045e5b033ef27133f08d08bc8e067c9921f826045e5703bed210fc451db8e8bfae57a05b5ab5f46993a5552f21e6fbe832f44933e69b51802bd605b8fda89ef63fb92637409a785d4013dd5f63bd7dbde4cf14cc719a06a1f02457662e9f2f781959b8bec6c22f6feedfc5c4c2af200befabb1f0d2a7cc2cfc2ab270039d853b39e1690de3695a19bff98e094de1e7159adc249ce5b534e67bf5eb3c7a7ff673ab85d7349ce90d98f0dde25e6e389ae4c51664ae861a73dd6468aed75046efa72d4a1af0888c7e1d316fa461be709d19f337504637d665b43c043148c936bfad2f3072df99f54dc4a6898e8d6e08225b56b9f5f2bd85f835d5f1ab9e95b572595eb715f168a6e351cfc84e769f617f1b396b738db3965e6fe6acef20f0161af08e86e0ef22f0961af0f186e0ef21f056ba7e3043f0f711786b0df8a00d66e01f20f0361af086cf99817f88fcb8adce8ffdd9dac22353fd096266b6f0d209de3ca089defcde54b56ddafffc1152b69d46d9630c95fd1881b7d7b5ce0dc1b721f00e1af0f39e3703ff0481efaf01df6608fe291ac43fa0c072107f3ba27da086768717cc687f86c03beadee00dc13f47e007e9de120dc1bf40e09d34e03d379a817f89c00fd680af3304df81c00fd1802fdf6406fe1502efac012f7ed10cfc6b047ea8aeec1b827f83a268175d14154ba04649cd757f4a75a7e015495ea771ace194dd6f1193ae68304327d544e277c8b0dd34863de46533c37e8f7a9cbaa31ea71e39f538fd80ccd6135583c73beaa7c5e50f2f8a01dab1eecd93a4669d895177223ebd5033573416dbb9ff26049354fa798bfcc512e6dca71afc8878f4d6f19077d038de5b47201a0693688f6e53c7da85f2be0fcafbbe39e5fd4f3a3962425d3f9d1c3199e130f782e8cdf6fe944a17b6160bfb1929753852aa7f4e4afd8232ee085dc6f11c910eee3f7faed2781a30c9dd757e450c06e818549318a45c98278de5ce6237623130ca0e623bc571def0c15c27b507406e0cf6200683321721bfaddd23c4c444f66f48f6609d6c714114d5d4d69626b27e47f5c010dd7be716b37ae00fa4c85034a0c2469ce69e5864917d7f22c9c37492e5c966f383d3b94bff0b491fae935e5ee33ca9cb2672ff467247e8e48a646a2e8e899c7f909c237572dc9b9d96ee5f13094e01903012153feefbb49f341e43b28fd2c9ae9151f6402f30cef67a6e4d97d7c41197a35128602ee69f5c2840b246e964959364d97ce82181a41e83ca4a58aad7ab9483dc24927b6cf61e36c011db0d8d352e3f8548f6713ad9626906f7dc0b5dede59742f28f47d5eb1ce57563ace37fff265706a51183d1283e33838141c4cabdbbbc08491f9329ef65e963bc0e60d349b86590ecb1e89d45175d787ad000afb658e08df54ccba94bbc2ce2330e0d64a4f3e9e53671c4fc4c5ebfe06f54960b9b7288cd78f422cc6cc4863be3bc7683597e94471227a0360a4beceb4a2c099547b3dd682a20c91351bc9da9d424acb389d48a48ea249d54b1e9c52ca98b21b7f7e24a48e66414e3fd3d75c2fbec982f4ead8ce44ec171d6979bcad3414e787f5a13f95590fca928cecc97ba974409f7879d7229495591ec69289f17789399e63abd3d7b0fcd611a533524b30495a5c9548652fb36e7e661d591e4e958f204a5f4e6b677f45e48f20c548ad9c7d8c2b9e46e0d247526f22c7ffe3c7f0981b745cc45764d247b168e9862a0699a7b72acd741916bcbbc16927c028a23731dfe525f4f27bcbbb589dcbd91dcd999e5dac48fda48ee1cd44a9aecf996bc3d127743ccf64a9a89f43a48fa5c5ca6c67843e2f3e88331c2d78ece617d675d24791eb2f7146fb1b9addc7a3ab9ded7ad349d214d3e31eb0cd947072eacb6a0c07ebf98621db830cc42dbc1c0fa0879912df2be3a6451099fe85ea89c11b911466e80904fb2456e88acb1d8d61afb21df3b59e37b75b69bf95e23047e8a067cb12178631db8182d5b5290c5b7baa760e026c8d84b6d8ddd14513ed592723344f9345bcacd514c3c3d1bca1141af05025e6609dc12019f6109dc0a19f94c5b23b746c867d922b7d1218b76d9f26c8c510703b745d5cad979a856da217b9c636b8ff628449f6b1ba23b20cee7d972de1f219f6f8b7c008a471758c6a30311f08596c01d75c0fbb8c915d90017c620f0413a60e1ff176503fc2b66dc09015f6c097c302ada975816ed4390bfadb4f5b7ce08f9525be44311f265b6c85d10f2e5b6c85d51065e619981dd10e52b6d297747c5ef2acbe2d703d9e26a4b5bf444b6b8c6d616bd902daeb5b4456f54b55e9787aab50f02bf3e0fe07d91b157d91abb9f06b9751337199be6fc9bcb7a535fb8eee55d9de2bddca730fd977d218d779f8e7a424c703ac2eb509ee771895eccbb5ae74731c566de42d91b0ac44259b126e5dfe58b96c71ea6cb77e127376653142226401d8e806fb204ee8f806fb6043e0215815b6c8bc000847cab2df240847c9b2df220847cbb2df26014c7eec8431c1b8268df694b7ba80e59c4b1bbb2f13b51ce01f0301db0e83db93b1be04a98f17064e87bf260e811c81cf75a9ae34854beefb32cdf23919defb7b4f351c8ce0fe4c1ce4723733c68698e5108f8214be063909d1fb6b4f3b1c8ce8fe4c1cec721733c6a698ee311f01a4be0d1c8ce8f59da790cb2f3e379b0f358648e272ccd310e45feb5b6917f3cb2c79379b0c704648fa72ced3111013f6d093c0999635d1ecc3119813f9307f029a87ff959cbfee5a9c8f7d6dbfade34648f0d79b047097291e72c5d643a027ede12780632c70b7930c74c04be310fe0b390ef6db2f4bd1310eb17f3c07a36027f290fe07310f8e63c80cf45e02fe7017c9eae4f436c671f9beafc2ffa34fa38fefa9981ce5867aae34fabcc6f8fc62bd978e9666cb1f9c8fd5fb574ff05289fb7e4219f17eac04597e56bd9b08e180158a473a066c28126fe4f1ce8df739cd7b3ee0a7bc3eb0a1346f83758c24fc9e9b2589078339b2c7e03bfc79e84da046fd9b6091623e4adb6c82723e4b76d914f41c8efd8222f4101e0dd3c0480a588f67bb6b44f45b4dfcf03edd310ed0f6c699f8eba7d3eb4ecf65986de663fb27c9b3d0319fae33c18fa4c648e6d96e6380bb5a03fb16c412f4776fed4d2ce67233b6fcf839dcf41e6f8ccd21ce722e0cf2d81cf4376fec2d2cee7233b7f99073b5f80ccb1c3d21c1722e0af2c8157203b7f6d69e78b909dbfc9839d2f46e6f8d6d21c9720d6dfe581f54a04fe7d1ec02f456f083f58be215ca603162f6b3b2ddf692e478c7fb4647c0502de65097c256a17fc64db2eb80a21ff6c8b7c3572ba5ff2e074d720dabfdad2be1621efb645be0e21efb145be1ef9dd6f967eb70a01ff6e09bc1ad9e20f5b5bdc80dceecf3cb8dd8d08fcaf3c80df846cf2b7ad4d6ed6218ba95eff64938d1153bd6e41cd68f1b1799b66f4ada80327960d704407ce6dc8c8f184a5916f47c805b6c877a05298c8c61811a5f04ee4cec984bd3bdf85aaefc26c584754df77237394b234c73da871573a1be088c6ddbd88719125e3fb1070194be0fb9129ca5a9ae201c4b89c25e307912f97cf832f3f84c02be401fc6114382ada068e4750dcaf948db123e2fea328ee57b68cfb6b50dcaf6219f71f4346ae6a6be4c71172355be4275059a96e5956d62277de2b0feefc248afb352ce3fe53c81c352dcdf1340a76b52c83dd3ac4786f4bc6cf20e0da96c0cf2253d4b134c57ac4b8ae25e30dc897ebe5c1979f43e0fbe401fc7914388a6d03c70b28eed7b78cfb1b51dcdfd732ee6f4271bf8165dc7f1119b9a1ad915f42c8fbd9226f4665a59165597919b973e33cb8f32b28ee37b18cfbaf227334b534c71614ec9a5906bbd710e3e6968c5f47c02d2c81df40a66869698a3711e356968cdf42c5afb56df1db8a90dbd822bf8dca5fdb3c94bf7790a5db595afa5d04dcde12f83d648e0e7930c7fb087cff3c807f805ce4005b17f91055dd075a56dd1fa1aabba365d5fd31aaba0fb2acbab721bfeb64e9779fa06077b065b0fb14b9c521b66eb11d51ee6c49f933544c0ecd4331f91c8177c903f817c8d85d6d8dfd25a2dd2d0fb477a071efeed9e464c4b8f7573a60f161ab1ed90017e0c5d15f2373f4cc8339be41b9d8cb3617bf45b47be781f67788761f5bdadf23da7df340fb07e423fd2c7d6427b2c761b6f6f811d9e3f03cd8631702ef9f07f09f904d8eb0b5c9cf88f6803cd0fe05810fcc03f8af087c501ec07723f0c17900df83c087e401fc37e42a436d5de577843ccc16f90fd4a01c6ed9a0fc13352847583628ffd2018b29e34766031c3165fc6f043cd212f81fd4ec3bcab2d927c6e7b56deba32ddbd631043cca1238ae03168e7c8cad2317e890c52bd7b196af5c0944f9385bca491db2d808e7f86c28476c8453a80316bb888dce06386217b152c816636c6d511a218fb5452e42c8e36c91cb20e4f1b6c86575c8a29a9a90876aaa1c029f9807f0f2087c521ec02b20834fb6357845843cc516b912429e6a8b5c1995f26996a5bc0aa25c624bb9aa0e59c4dee9968d826a087886257075043cd312782f043ccb12b806023ec112b826728bd9b66e510b058d3979081a7ba386c15ccb86416dc47a5e1e58d7416d83f9966d83ba281717d8e6623d84bcd016791fe4d28b2c5dba18513ed196727d847c922df2be0879b12d7203847cb22d724354064fb12c83fb21ca4b6c2937420570a965016c8c6c71aaa52d9a205b9c666b8ba6c816a75bdaa219a2bccc967273149ccfc843706e81689f694bbb25423ecb16b915425e6e8bdc1a39f4d9960edd06513ec796725be4d0e75a3a743b648bf32c6dd11ed9e27c5b5b7440b6b8c0d216fb23ca17da523e0021afb0453e10215f648bdc11bdad5d6cf9b67610a27c892de54e88f24a4bca0723ca97da523e0439f36596cedc1951bedc96f2a13ae4aa6ef20af7c23ed9d454ad3178170d78ebe66e3236d4f93777ba0923f7f4be1fe67f4b4cec1c33ddbd36cedb25a6c4451b9b610f9b2b5d1dea6bece0d922a6d8c2dbcbe6aa84d8cba6469a869978a05d6abaa2ccbfda36f3bb21e46b6c91bbeb9045cffcb5d99484882efc1e282a5c6719157a225b5c6f6b8b5e0879952d726f54dfafb6aceffba0f6eb0d7968bff64551f246cb28d90f19fa265b431f86bcee664baf3b1c01df6209dc1f19f9564b231f818c7c9bad910720e4db6d910722e43b6c9107a11278a765091c8ceae5bbf2502f0f41e077e7017c28f2bc7b2c3d6f980e58b426ee8daaa25501a27606028623b3dc9707b38c409e72bfa5a71c899cfb015be71e89901fb4453e0a213f648b7c34427ed8167914427ec416f91884fca82df2b108798d2df27108f9315be4e3514179dcb2a08c46949fb0a53c06b576d75ab676c722ca4fda521e8762dd53798875e351163e6d99851310eb7579603d11555ccf58565c9310eb67f3c07a327291f5b62e3205d5b71bf254df4e4576792e0f7699a603afe6269fcf26370fc0c025a8b0bf6059d8a7a39cdc689b933310f2265be499c8182f5a1a63167a037d290f6fa027207b6cb6b5c76c44fbe53cd09e8368bf624b7b2ea2fd6a1e68cf43e05bf2003e1f81bf9607f005c8e0afdb1a7c21427ec3167911aa7bdfb4ac7b4f4494dfb2a57c12aa78b75a56bc8b11e5b76d299f8cacfc8ea5954f41b678d7d2164b10e3f72c192f458cdfb7647c2a62fc8125e3d3905b7c68eb16a7235b7c64698b65a8a9f4711e9a4a6720f06d79003f13817f9207f0b310f8a779005f8e5a90db2d5b906723fffbccd6ffce41c89fdb229f8b90bfb0453e0f15f32f2d8bf9f988f20e5bca17a062fe956531bf10d9e26b4b5bac40b6f8c6d61617215b7c6b698b8b912dbeb3b4c525a85c7f6f59ae572253fc60698a4b9129765a9ae232648a1f2d4d713932c52e4b535c811cf9275b47be12bdcafe6cf92a7b15a2fc8b2de5ab11e55f2d295f8328efb6a57c2d42de638b7c1d42fecd16f97a84fcbb2df22a54b0ffb02cd8ab51f9fbd3b2fcdd806cf197ad2d6e44c87fdb22df8490ffb145be59872c7a1f9ca47defc32d88b6386745fb56841cb745be0d2117d822df8e9013b6c87768905bb770fee3596a3d9cc92efdd9eef9637398a5964c6a8ab576765a61523f3b2d937c343bed4e54044ae5a108dc85c04be701fc6e547b16e98c69507bde835897c903eb7b5139286b5b0eee43b4cbe581f6fd8876795bda0f20da15f240fb4144bba22ded8774c80ddc6425f7dc7e69b4d3a0cf8c43e88751af48e5a47dafc823c822556c2df2282a8f552dcbe31a44b99a2de5c750fbad7a369423da6f8fa317b3bdb2018e78317b02d9a286ad2dd622e49ab6c84f22e45ab6c84f2133ef6d69e6a7912fd7b6f4e57508b88e25f033c8c8756d8dfc2ca25ccf92f27a947bfb58e6de06f4f6549c0d70c4dbd373c8c8f56d8dfc3c32f2be96467e010137b004de88626743cbd8b909557ffbe5a1fa7b11b946234bd7780999a3b1a53936239f6b62eb732f234337cd83a15f41f66866698f5711ebe67960bd05b9470b4bf7780db16e9907d6af235bb7b2b4f51b8875eb3cb07e13d9ba8da5addf4221afad65c8db8a80db5902bf8d80db5b02bf83824707dbe0f12e42dedf16f93d847c802df2fb08f9405be40f1072475be40f11f241b6c81fa1a8d1c9326a7c8c281f6c4b799b0e594c693d24999f29ad9fa080d7390f01ef53047e681ec0b723a377b135fa67c84fba5afac9e78872375bca5f20e4eeb6c85f22e41eb6c83b90997b5a9af92b44b9972de5af510ddedbb206ff06d9a28fa52dbe45b6e86b6b8bef902dfa59dae27b44f9305bca3fa056c7e1d9508e6875ec44c0fd2d817f447e7184a55fec425d1103b2018ee88af809b9c5404bb7f819b9c5205bb7f8051979b0a5917f45461e6269e4ddc8c8432d8dbc07197998ad917f43c8c36d917f47c8236c91ff408e71a4a563fc89f26fa465fefd856c7194ad2dfe46b638dad216ff20caa36c298b390d5a2b1f6369e5980e58503ed696725c872cac7c9ca5950b10e5e36d29279095475b5a3989288fb1a55c8890c7da2297d2218bb1dd7149fbb1ddd2c839c65b3a4711623d210faccb20ff9868e91f6511eb4979605d4e075ec54d4e76cfd5d5806b0534c702caa3cc9c6299991510f3a979625e1165e834cb0cad844c52626992ca3a60d1ea9e9e0d7044f3bc0a029e61095c1501cfb404ae8642df2cdbd0571d219f608bbc17429e6d8b5c0321cfb145ae8990e7da22d742c8f36c91f746e56fbe65f9ab8d282fb0a55c07c5a28596b1a82eaa5c16e5a172a987c04fcc03f83ec8d827d91abb58875cc64d2e4ef2cd196897c3e0f5914d4ece834df6453639c5d6260d5099596259661a227b2ccd833df643c5e654cb62d308d55ba759d65b8d510e9e6e9b834d500e2eb3ccc1a608f80c4be06608f84c4be0e6c82dceb2748b1688f1724bc62d5129393b0fa5a41532c73996e6688d9cf95c5b676e83cadf7996e5af2dcac1f32d73b01d02bec012b83dcabd0b2d73af03cabd15b6b9b73fb2c54596b63800015f6c097c2032f2259646ee8880575a021f844ac8a59625a413728bcb6cdde260947b975be6de2108f80a4be0ce08f84a4be043915b5c65e9165d50ee5d6d9b7b5d11f235b6c8dd74c86278e9da6c8c1131bcd41d015f6709dc03d9e27a5b5bf4448eb1cad2317a21575e6de9cabd912d6eb0b5451f648b1b2d6dd157072c367fbe291be088cd9ffb215bdc6c6b8bc310f22db6c887a38ae456cb8aa4ffff69ef2ee0a3b8ba36800f5a5a68a15083d2961a4d950841ea4890162b526f694802a4049226c1dabe75777777772f7577777777f76fee9d1de6d9646fb2cbee3339878fb73f5e48b23bb9f3df3b3357ce3dd755e42bb22df2e8544736ade52bdb65df5a1ee32af655d9167bacebc857677be471ae235f93ed91b7731df9da6c8f3cde75e4ebb23df204d7adeefa2c6f75135d45be21db224f721df9c66c8fbcbdebc837657be41d521dd94445dedc2efba8c81d5dc5be25db62efe42af6ad3928f6ceae62df966db177711df9f66c8fbcabeb72b923cbcb653797f49d3990dedd75f0bb7270f0c9a90e6e5a1e77a743d244cb630f57a917e4a0d4a5ae83df9383834f71d5927bb3ac2565ae52df97835297bb3ec8fbb3fc202b521dd84c363fe07f6fcd14a54e59f22602daa7ba581ecc01cb34d7c11fcac1c1a7bbee540f677ba7aa7415fb911c147b4f57057f34cb0a3ec355eac77250ea2a57057f3ccb0a3ed355ea277250ea592eeb27b3b4ae7695faa91c94bac665fd7496d67bb94afd4c0e4a5debba533d9ba33b559dabf4cfe5a0f4f5ae833f9f8383cf761dfc851c1c7c8eeb36f862b6b7c1b9ae62bf948362cf731dfce51c1c7cbecbe4956c4df64e75643338f16a3ad76613a318fbb88afc5ab645ded725fd7a0ea4ffe73af81b3938f87e2e9337b335d9df55ecb77250ec035c4f9db7b37cea1ce82af53b3928f541aea7cebb593e750e7695fabd1c94fa10d753e7fd1c3d750e7595fe831c94fe305705ff30db0a7eb8ab0e7e94651d3cc2e5f1710e3c8e74797c92adc751ae237f9aed918f765d379f6579dd1ce3fa083fcff2233cd665f145b616c7b92cbeccd2e27857adfb2a07b5ee0417f4d759429fe82af5373928f5492eeb6fb3b43ed9c5f15d961ca7b838becf01c7a92e8e1fb2e4382dd581cd24d08fedb29f043add75f09f7270f0335c07ff3907073fd37513f925db9bc859a98e6c935ea7f34936d1c43edb55e4dfb22df239ae23ff9eed91cf751df98f6c8f7c9eebc87f667be4f35d47fe2bdb235fe0aa1a7f6759352e7415f99f6c8b7c91abc8ff6659e48b5d45fe2fdb225fe22ab2d73ebb225fea2a72abf65916f93257915b6759e4cb5d456e936d91af701db96db647be32d591ed73391d8c5fdd07beca75e0f6591ef8ea54073681324ba573e0260265ae497560d396e990ce819b68cb5cebaa704b6759e1ae73558b65b2ad16d7bb8edc31db23dfe0c2e89425c68dae8f6fd92c3fbe9b5c255e2ecb12df9ceac05dfc2f3bfb07eed6a8cdd5e8d06bbb0f7d8babcc5db22cf3adae322f9f75996f7395b96b9665be3dd5814dc865b7740edc44c8e51dae12af906589ef749578c52c4b7c97abc42b6559e2bb5d255e39cb122f709578952c4b7c4faa039b1e4ff7f6d9f778ee7595ba4796a5becf55ea557350eafb5da5ee9965a91f70957ab51c94fa4157a957cfb2d40fb91e826b64fb107cd855e45e5916f9115791d7ccb6c88fba8abc5696457e2cd581cd48cfdaedb31fe979dc55ea75b22cf513ae52af9b83523fe92a75ef2c4bfd94ab7aac976df578da55e4bc2c8bfc8cabc8eb675be4675d45de20cb223fe72af286d916f979579137cab2c82fb86ed01be7e006fda2abd49b6459ea97521dd8a463e9d33e37e9585e76953c3fcb92bfe2ba7d14e4e0f6f1aaabd4855996fa3557a98b7250ead75da5ee9b65a9df705d8ec5d95e8e6fba8adc2fcb22bfe52a72ff6c8bfcb6abc803b22cf23bae220fccb6c8efba8abc6996457ecf559d37cb41757edf55eacdb32cf507ae526f9183527fe82af5965996fa2357f5d82adbeaf1b1abc85b6759e44f5cd0837200fda9abd483b32cf567ae520fc941a93f77957a6896a5fec2553d4ab2ad1e5fba8a3c2ccb227fe52af2f06c8bfcb5abc823b22cf237ae228fccb6c8dfba8ebc4db647fece75e46db33df2f72ee651fe91d76b70e456c7d82fc77b43bc495eb9ddc233d8ee73a6fdf748bb11a8d9ee73aaff9660bbcf910b5f59e2cdf1bf635e31deffdbfcb4d27ea7d6dbc49becff37c1feb4dc3fe26cbb09a7396ef49ea1fedf55fe51e7fb7f977bc3fc77957a33ed6f08de1b6ddc196c2f5a69b7174dfe4950be22ff0c2737711625fe9fd99ed9ec33faed13edf6a6e131938fbabdffae4aff3899d4c11f5ceaa353a96fb9507d82efb0ad37d8ff519dff8331fe9f7a6faedd927446a27481e534fb93c9de28ff6765f640e316ead5da57a43a5ef03d7ce520bb916b2667f6a3ebccc6a43ab34d1d6736c9abb71bc856dabf836d634da947faff0ade6ec41b7e1263bd29de9eb66ed537fa99d968b6da335bd296fa4e999cd14fae331a9bea8c0a1d67e4b28dce6b927d5dadada5e6d5b93b839f5d67302ed5190cf13ce7f51494b6da2ff964bffce5fe7fc12764ae9bf4afc3e49fb87f96c939fee23ac7ed529d6305f93e56ef7fd2668be36989fb94f9d5e6ac4afd1a6a3ec1f4ad9aaad38b72e7f9d5e5343e95d3a416bbdf372d94bdc36f2e8709a91c76263a0ccfbabeb86b4c2622bfbb4426a61219e47f39c9fffde6fa9f6f9f99d36c792a927e3fde2f467a665bf02abb117865e2136efe08b9bb0bfee13abf49a9ce6f68c6cf5c730f1febff64d6c2676ceab31b9e68b970cef24fd7596e9fea2c4711ebb5f9ee5ef6d798b30ab681af4c3cbbf7f6ff763d3716e56afecb75d63ba43aebe384b46227d82354dbd767d28e9d90f86e706768d996ecdf2ef91d53c9f76bd0b6885ae483fc73adb532816399b5ab6d54466cc3bb7e121d2b9333f9c775263ba53a93010dce04afe6eccf25f5d132399b7f5d67b3b3eb6e9eba6478071f65af853abf0e4db7f7a5a6ce27bdf35cf4fbdc7faef3db25d5f98d703ead82eba5c65e2fc115b2689f5ee647cfe46c4d1c69cab3dd35d5d96e9141dd0c5aabe97e92b96e8db6729dd76ee95c737887ccfe9a4b7db44ccea6b5eb6c764f75365ba575cd35d7cbcafc9a8b7e92c9b9b5719ddb64d78885fb3ac7f333d78d69ebceb72dab694db40b928f91bb3b495bd799ed91eaccd66d70660deb5d34f252616b52bd7fafcccd27d0ce55ced254e5dc36adda35dc2f7b8535372d98f0be3ed6ff77896dbb99c3b5e45dbebdeb9ca7a43ae70d32e893849fd3ac446b3c57e3104bb94a5c96aac49b67f05c4a2ef734472f22fd3e472667d5c17556e58b368234ccde9b67da9ab7686321d17597ab4f6e69d73956a43ac762e72767daf853fc1785e73acaf6eb4b6c79533d9172fd4c5dc6751e535dfddc45bd4fb4e49da1a3eb2ca7a53acbfcb4fb1dc39b6d0fe5e25edec955fae9ae31e574db7399967f51ef08cbbacea032d5194cc8e0ce1cd4b8e8f913bc27ddd1a2384794967319ec99cea7d854eb35d34f7151ef799d5d6730239d7b856b6620d56797fdccc0a27f4e5d5c675995ea2c07a775479ce0bf788a2d6da9ad552ddb3a5fde758633d3e91f36551333eb1fe67a94beabebbc66a53aafcdd2becb677656ee4f6b51cea99beb9caa177d64a6b92b2ece27f30aaef3ab49e79e92c9f3c0dd8ae2cf0aafe83acbbdd2e98d315ac4e99ff5a23e2d56729d736daa73deb185cf99adb1b24ba32e95c6b0349f9d236d7b45d6f37315d799d6a73ad392b4ee58a3fd1757d9e7663827e81ef989eb29dadd759eb3d3e9e5367cc60cb167daf8d3c39e6b3adfcfedd3a787eb1ce7a4f3f4697c8e51bfd094d3bcced42e332fd6b0b413fd7fd7d8efa777768b3606bbaaebfce6bac65f9a3abfa09d10bd21fda74e6e3fb59eaeb39a97eaac76c971cd745d7f99be3eb726abb94ce6a73322cd791ae5e6c9b2baebccf64e75667dbd4589380bc7112bfdd78eb6efa8f7c2b885dc3c35d6709dc53eaeb67b7667d1f0fe931c8b919b73eae53aa77d539dd3264d9ed324bf64550dcea3c43363bee133bfb9f76652f2355d25ff5f3acfb6d4cff074da2a71f63cd6729de37ea9ceb1a0c1390eb16d8f209623ec7b4cf4bfd75c2ba3c0eb97a3f6c7daaef2ef9faafc3b396a973b4229789a255f17995c73d944342dca1d7e1d97c701e98caf65fe793655fe45fb44d7759dc181a9cee0b0859f683c7149c9352539f632b372b88e34d1ceed867737e648516f97f441a9a4b7f61ace4fcfb7ffcaf4ee16becff5dd5cddd9d6739dddc1e9cdbe373ebbe6c653e23ab33cd7991d92eaccc6647ccf1b9ee29e97d95d8cb552627dd7991f9adef841140398f9f801c60fba7f92abcf7803d7991e96494bb0b9cf3888300dee79419463d0276d3aca72a8ff93d98928eb4cce6943d7391dee6aa3a7f36c6aca1f4bdad4279ac9596ce43a8b23d29bff495d079b8b138cbbfe6dec3acb23b3b9d2d29b015ab4735dd4cf7313d7991ee51a27c836c63daef6e3a27ffa7d5c2647a732e9d3649fada9f55bee75698b5ef67c57d98f61dd659a1ecf58b45a59e03a8b63d38b1e4a7dfd35bffe2cce2bafd0758ec72dda6854f0d995a51c8d8a779ea3c87566c7a73ab3759abc7e70cc23758cc3a296b2afab9427a42ae5f034eb587a714f713fcf8a5de77a623a7705575d33236795760cade9d1cf5c9d453fd7599cb46833a8258916de0ef69ed038ea36bd59b330ee32587f579746247226e7dcdf75ce27a73342d5f89c47da73aef0e6f957fed48c3eb7451bcf18e02aff29a9cabf61b3e5374fa321f6aaaa6d22a2b3f12b3229f34057994f4d27862453f3b0acdc99ca4d5de7749a6b1cba69cf458b3a0b8f9349c9377395fcf474e236c3df18b5bac6d8156e53bc54e3fcd16791abeb777357e9cf4855fadecdd625de6a812d5c253d735162de267a6685c638ab5997b2d5d47cce0d332ed9f87a59f4cf624bd7199e95ea0c8b72d0366e2afe72d15a8d5bb9cee1ec54e790e7b9a268c3f18ee45a559ff86eae4abbb5abb4e7a4d38f76af0b6f7ec42aeee8ae41ae333d37d599ae99c673aed67e16b96aed0e7695efbc54e56bb8eab6716b776462fe74aafd493aa386b9921ee23a93f3d36b11a53a9331fe1bc6c454fea1aef25f90aafc239ab9cfa61e3f93b31eabc475b617a633233709ca946ddb038f95c9190c739dc14599aebc087b1de1e7d2b8dfc4b9370d779dc1c5d9cf72373d97ed9effcea4fc235ce5bfc415abee9e8b746795186fafa120c630f9a968be5b9698b76cfc992dfae732d2755e97ba7ae5a99fe5a3ed594cf7efc5615c52952d53e3762c631c6b1bd7595c96ea2c0664d822094653aa16b64c825296d97fd5dbd665bd7fe09a9c9dcdb6aeb3b9dc35bb98de6732c48e03cf6ca6a42d391e39ca75e657b8ee73e99df920ff9e966a8428f76730da750657663337d5fcdaa478c7f2c6b8cef2aa54673932cdb3cc24ba3ade7a39d675be57a73adfadd2ae97e6eb792d7c6ee35ce7764d7a631b99c62bb9a23116ad65b49dabf4d7ba4a9fc9fae74cda468b12ff33de55faebd2199949959f22180dc87da6c209ae925eefeabb2d7a5c6cb91dc3ae49bc6a8c97db5c07135d6772836b662875eb91eb3dc955ca1b539572fd26bd71fe8a55deed5de5bd297d551cb9e394720757296f4e55ca759b7d6eb1cab9a3ab9cb7a453cec6fdbdeccbb994ff5fab561dfd7f96d8cf2a1859adb6efa9f78fd36763ff47f6fe1ad4b94d16f67c3649eafb44df37bfdf8c819b3b9889b80c628436f27a3573845b7d82f6adbde07febb5327ce6666e16e9b49ada40227867953d7214ed62f2f29a9e7b100f62da199bf8f7fb4afbae3d7cfd5dfcff9a3b8b54f1a4e6bba9ceaef973dacdffcfbcca64bd2bb3bd26d3fe99e2d781a51267141ecb973613238bdd99de663ed5e1894fb5751f13d06267e216a536355f8adbcd6f6b93ba0eaddc4816af8e54650f0e103ea75a99adf3cc05966fff7f927fd4f2c464fc76f67a357fca1337e5667f375ecba97ef7c6f600e12ab5660f870350a90ed7dd56b82048a5d60b061bf6adf2bca5dab5ce379fc91d4cb84e16cedc0b6678150be7f76bed67aa01eae59111d49d4c28b3bb53d858324346355e10ee31da7f4b793a6727006bc0a008eb2e26d6f2b6564577b1595e9059beda1e7264a237a081ecf78e11d9dd4cb29e4977b0867478471b61bb1ee5f6b16326590b5540b6ed13412e60422e0b17ea087b1f2bb7176ca9fff77c15548fef1c51ddc3bea74d5ed835d4f9a4dc759f08eb5e26d6aa16cb3c1f839ceb4312736ea6ae99b982f9767c5aeda36142c4781fbfc131d632565a9e6a3bf063862335406d7d5e0475bfcc0742810ac87d7b47900fc4d7370896b60ef2ef73e5b6c336dae295dacbb85605dcc7e322b80799709dbde44ed52c5b846989beac16ae877b445c0fc5d195326f9996a84fe6105aee6c0b4a23a88799505d929a1de1df55897aa5a7e971c6be11d823fcee54f21d6c82ff06531033d0344c4d776ae88888ec5126d932962cbcfca2a68606a471c746488f3191cc3e976157a961e73c0a9531fd010d6cfb768ad81e67dfbf92f7ac89563a4e48f40334803d7c4b04f60413ac2bdcbfea3cdd6368fbc218da93fce644f24d3fd8a571860aa8f28a08ea297e7362825d805c639724cfb32dfc726f8e17a678d200e6c198ffd34cb0f616ccbc3d88a3d380336aeb08e799b8ee55e1651705aa4cb068f54a6ad4b86722b46799682b79e1a04ed4b10ef62934eb04ccb8048e96e9684ef4bd2ac27b8e7fa30f920a9a7b551090aca71931eafe08ea79fe70b5a965a6935d6a9f8458af3460f5823ee30b4c2cb39377944ecb844ad7d8179bc091a8b95ae7f3552a199f781d1e012ff2475e5d23fdd1587f38bb14f52eeb54407ebf5304f992cc21ec221590f76f1041be1c77a3648267b23c058f0c4d1da8af4b22b45798681dbc2008a1ce1620d8ca5403d0cfd74640af328196b240b3e132d4c0b3f9ad11cf6bfce64678d1e14340cf10f5f34323acd7e3c02a508c7500dc99dee05f78dadaf9e700cf9bfc79c7b136c2347ac6696be91f7379c4f5163be0a9614485ae80a7bce323aab7d9438561a748730840deb611d83bec5e64530dcf51898683b987e9a86b1b0d8fe8de8dabae4517a6bebaf6f13611d87b71c74f84c1011aa0dede23827a9f3fb71d06cde99adb5eb07784f4415cf1fa5a076aae81819a0f9958ab34739b0f9aaa0671b617ae73d2007807dcec3fe23f27a3c4bec15331aa6f88a9a3ee758085351fb35bfbe185aa37f86400049f7c12776b3f9895d432957bc4c911d5a7fc51d3e40685d6b093795323b4cff8d1d2a67e856daf2989a9b69ded6dbf22b118594bf375dc2e11dce74cb88e292ecc20d3b006a6034e8b98bee0dfbf1ab6f24bed66433a2ec5115322aa2fe30e9bd3da945d05d6b47d15f76a0fcdddef2a18eaf99a7fff3277ac3adb54ad50b54ed764c10899bee15f94e64938d4fe6a575a410d68075c1fa17d1bf7d08ea658d6cfcb23a8eff850a6911aa49832f52bbce56b80aad93382fa3eee6e50896732c5562bb9b11f000b497f605275f7522563c0e81badf1ad0f3f1711fec85e28d35ca7689e9a67e5c4dd23b69ff81769d8163377356d8b47f33a47543ff3e7bc87d8e6a9de6c3c870c8eb87ee1b7f2abed0519ac5b732778d600b7352cc5fa959fc5c21dd4b4ddc2356dc32c65d5c23b9d06c6bfa7478cbff13b4b4316ae2faa52d54abb6146c4f43b7fa632ec479ada56a1a62eed3b3e42fa835d97a209903ab8043530bdbe55c4f467dc31d0b86b7898475e035acf9911da5ffcb591c968e19d4ad3f4c7fd9511d8dffc956cc923150dbb4e83fc3ea7f9255a02370f80a7e23f71853c355c73a469b867ded6066ca9760d0ede709faa45cfff9a99b23b53ade935989e67c86c66cbcdb12173ad19181557f27f31f36c5e1343cf7969a692cc4b238c202f837c1779cdf45df3d2488e9497550aaf6cde5d94d5bb0b139f48ea36495ea3e5e379695df77919ae48cc6bd55cc6d5bcb4f34ae4a5d1bdce6b76bd47f40ad72287bc1491fd79291b2ea9166fe565186d9bb748615b79696613cacb30a629af5553a984f3d20a87cd4b2b403b2fa339bed4af761fdbd565c9cb220164725d4e35859b97d5a2d3d45742ea57369d1e352fa3f88fbc0c0646a3fa912abe37f54fcde3a5dade0b9a8e1a48fdeee8ced3542a95bcb4c384f2326e1ce66531dc929756db3d3cb7d43346794d8c5384c76f3a6f4ac3aba7e9cceaa9ef75a93a6979ce20e6f02eebce4a1bbec29d08203cb7a653cce5399384e535b3a626f5cfa328bcbc268281c24f2c7506d4d4478e26b6f2d2581c9597713a8ebc946b65f3d29eebcecb683c362fad045ae1b31497a78676a97365a4ae7da9e6b6f216714e2cda90031bd9d1461af966438efffe9fef95916ff6ca301b98b4ffbe5d8010f43ccd4b693dcfd5139f7ca53ded595e55a24dde78d3a9e0b46a124fa759f639d8af61797a362acf78bf2accf2c2dd08c3de67aa922d9dd43ffd359d935d943eea7b6da24e7d6b266d37b8a8caed0d277987b81a7bd3332fa621f661216edf3a426cc3440c5bea583ff180c9db8a4df60634ce80913bce15599c43db469c6d25710e54c9b90b70b693c459a0927304dc31db4be22c54c9f93fe05c4a1267914ace4b80b38324cebe2a395f05cea5257116abe46c0d8fa2652471f653c9b90a707694c4d95f25673e707662729a01a332db0732bfda14336576a3dc91f56391ade54564cbc65103a739eb2016df34d589bdf14e2cce875b459ccb49e21ca092f37ae0ec2c89b35825e778e0ec2289b3af4acefec0b9bc24cefe2a39cf00ceae9238fba9e49c0b9cdd247116a8e4bc131a4a2b48e22c52c9b934d4ce15257116aae4fc186ae74a4cce95bda63b9218b56930fbf330dbb722617e09ddc8952561126b260df365c05c451266b142cce701b3bb24ccbe0a319f04cc1e923089436f34cc870173554998850a312f04cc9e92301bed28ad00f374c05c4d1266be42cc530073754998031562fe04986b48c21ca010f31bc0ecd59298131287329369e4cb9c160f57df2ec25c531226f10144c39c0d986b49c224368d6898f300736d4998c4463b0d735fc05c471226b13b49c3fc1f60ae2b099338d041c33c10307b4bc2240ec1d1300f05ccf5246112078769982702669e244c62a39d86790a60ae2f0993d89da4613e06981b3031576a063379b297f8f8e9c1a2ac87a8e10da55016a9a4fc1928379242496d14d1281700e5c652288b5552ae06f7ca4da450f655495903036f7da450f65349791fd4ca7c2665f7046595ff22c3685e5a6e9b3ec98da2e8a09399e3984bb1409707d00226689067a2ce0b3210a4ce8d43e35b9bc537c88bf80a997c61c2a3fefe9f0a6f8e17aca93005368cf3bc98d697d32eec6520daad8809196405996ef3bf4cb059714cce0af3f6300f0f0d8fb6aaa7146a615f265e982acd1d2a88136583bc5a5b1fe7db5e0e8db50b8bf575602de6d7c92071449001a820ae0b9a36dbb8325cd0fdd88d9ea90d5242e14365acbd5bd6da43a648e2aae0213304ea617f26a5c9d733dbfe70bc3d40a957638fdc680782dca1f564a16d086803f80d9be0e2ad5c6c9ec77f00df40265f0faf719f2548b134c11bea6deb0d4e646a0bbe172c22a5e621a22d24fd15ba819bc611d05fe60539b2ea9becb598c526c469065acf650e6424da4c12677f959c8702e7e69238fbaae41c0e9c5b48e22c56c9390d38b794c4499da2a5716e089c5b49e22c52c9390038b796c499af92f34de83a0e92c459a0927369a89d8325710e50c9793e700e91c4395025e735c039b42527c71a72eaa3dc0866bf4bf8353379b78bc9de0ccb3b383104171cccec906072a937daed4dc1a8faba5ec4398cc9192432afb2031df5f650668accb14b978230ab5d006e38130e771929b543bc310dbbb5618d9aff0e742398749decd16a1319cf4d52fd6989599d690a2fd5ad806d641c3335fd1a3c4a62a873bd59786bc363639bb82ed7d98981dc582e57da906e31f454b665d2857b8bb8da8283fd7f9b7f511b2eb41a78295cbea35a92313c532a6307d6c3e303601c1dc7859cbfd83c77df06ba317184d9a7d7a9a366fda3f543dac35d71ac244c8dfde36501739c244ce20a441a665bc0dc4e122631169786d90e30c74bc224aedaa661b606cc09923089abb669986d0073a2244c8d11e2df40d36892244c8d43b4df01e6f69230896b636998cbc165be83244ce2da581a6637c0dcb165e7618243050b8d35e6061adf36a2dc298e454a99e495265ee8b4dcbd653047b8b33450e2c54e03ad00d05da481123b9634d0c900baab345062e79206ba0780ee260d5463fef35200dd5d1a2871608e063a0540274b0325369b68a03b00e81ed240899d4d1ae88e005a2a0d9438484703dd1940a74803250ed4d1407701d0b23896cf9bd0833a2f5a1c1a4df8ea5eaeb715f4decbe39afa5d3c6238fa005d454b0e7c24e798d698fb7c0044124d8d238ec35cce51368cf0c731d548da50dc975ec4382d8e8bb968b1b998bf858b797acb66c2c003c6940963018bb502582be5ac7928541ad3b132dc27f794c4a97335631be09c218953e76ac66581b34a12a7ced58caf421f67a6244e9dab197f07ce5971f4c15dcff7c1fe5babed2c65a9ffd360011e712e88b676e27cc800582d0d94385b49033d0f406ba481125b9f34d0fd00742f69a0c47e3a0d741f00ad95064a1cc7a4811e0ba075d2408923ed34d0a300b45e1a28713e9d067a3680ce96064a8cf8a0819e09a073a481121bf634d0730174ae345062c4070df41c009d17c73072e162338cfc1a8c77ce67d285c9438379499389da1c48fb6ce4e95ec4b7771c536ae90d79685c7d510d94fbc8ba2b52e3dc6977c56fdb46a0fb4a03d538dcf13580fe4f1aa8c6e18eb701743f69a01a873bde02d0fda5816a1cee780f400f9006aa71b8e31d003d501aa8c6e18e4f01f42069a01a873b3e02d083a5816a1ceef802400f9106aa71b8e333003d348ee18ee2c566b8e31d18ee388c49176ebe65ea5bb9dd64a6d4ff7bbe3d4c30f4a1afdeede845788733f1ccee3cd3ed455a6e2fd75a1b56388dd9e0a16dadd501d08e6809348dfb912d056847b6ecb05a7028bd4bf46f00caa35a32e87fa86716a34c4950123b8367b52551be0fcfdda3e378eef65d6c9ebb7de1b97b0c93aeab174d33ccf4c24d23a779fad74adc0a17f2b14c42b306cefc52f3a6f95e989cdb5cbcf50aef7f5b03db7171ac93c874950475ff79da3a890f2074fa7889ac052a598f06d613d88f983afb960afbad615ef2bea2fa7a27abc2857e621c4fe7fe8bcdd3f91ea03b298ec0fd74476806a81c9f190dedc4932571ea8ceed91d384f91c459a092732c3c624e95c459a892f320e03c4d1267914ace5b81f374499c3aa70a3e05ce33247116abe4ec008fa23325715233b5d138d704ceb32471f657c9d90f38cf664f35845b6acdf0cfabd44e349811237de3436b7811da392d39d510153dd8809546490b86ee0a83bce7c6114b6ea8ca3db3eb6230e6134b2f9c56135787f5dee7c53180d16fb119c0f8176adef94cba959b79902467b6a2e61da0e5b63a181e231748c2243e9369980700e685923089a3e334ccfd00f3224998c438471ae63e8079b1244c6268000d732a605e220993183245c39c0098974ac22436ca6998a300f33249981ad37e8e00cccb256112d727d2304f04cc2b246112d726d2308f03cc2b5b12333962927a99d37ae22f01e6559230890f201ae6078079b5244c62d38886f921605e230993d868a761ee046943ae958449ec4ed2307707cceb246112073a6898658079bd244ce2101c0d732a60de20099338384cc39c0698374ac22436da69983300f3264998c4ee240db31a306f6ec9854ec913b9c456266d22772f881aba450a65914acaaf81f2562994852a294f01cadba45016aba4bc01ba91b74ba1a426b4a151ae0a947748a1a46e3ac84ba6084ff03b99943d129455fe8b0ce32c5fc200967bf39a40258e64d248af86da79571ccbf4dcbb44e1283b2ed4230e76d0f213748678a3bb5bf2a2c7c34d6636db69cb9a2f80a7fa02f6b2e6e4fc1843bcea84068d6d39169b3964c8764f1cf74aac81dbfb1e43fc030df5b6f506fb2facf35f187c6f92178413126b222d88f07678fcdcdbb2f74a2c3ede2b898fa0c75b9358e74358eb7d4cd6d513acf5fe655ee9bf74f2c23a596e43aec3bf07fb2f36378239feab82fd71c99dcb9eac1afb00d0de2f9596dad9a4d17e0e4ff807a4d252479768b46540fb20937669cfb32f30bfd8ec9b3bcc7f11f159df9b05b6123ceb1f6282ad6aeba24956678e67d2d48df65f6c56584cf666d85a3a38b1e62738a40135ab2fca15a2e601eac3ecc55266cb83f9fe1bcabc51fe0b0d6005138db6c26c3b407ba465fb3d3861a171eee709e8993f1ac7dc4f7aad4d6ad3bd130bf344a8978f49c224d64c1ae6fe80f9b8244c6224070d730e603e21099338ec46c3ac03cc27256112233968987b03e653923089314634cc7980f9b4244c62c4300db30a309f9184491c7ea361ce00cc6725611223866998b580f99c244ce238100d7326603ecfc4ece565328531ce0bd2490419d46bfc77519fef952cde6da183f9421c75b5cc4b9dd8a461721d8d1b6bed0975f54549981ab77dbb03305f8a234f4cbeff678e4d703bdb8b2d11388daf078c9fbfcce45ba1d9ba38dffe8bfaf8a10d001f038caff00780cdbc8d1949af86cd60f4d5bddde1d27d958916e6f13797ee4c6f71cae35f0f84afb5e4a3040f47ce0d4cc3bc0e2ee2d72561125b8c34cc1b01f30d4998c4b14a1ae65580f9a6244ce2283a0df36ac07c4b1226b1e143c3bc0230df9684491c11a2615e0998ef48c224f6b269989701e6bb923089bd6c1ae6e580f99e244ce29c380df356c07c5f12a6c690ffdb01f38338067ec3753e2608b0d40bb6201c6507d26a16c3b1ca5e30f0fb219337ccaa9e6f272a2a6c5d35c5adb41aa5f64d7b7b26d2cdbc2ad8524e1fe7d35ec4f91193730dcf354d915e9835f156408b057e17eaeac79271890f2d1aee8b80fb89645c62f38a867b12e07e2a1997f808a3e11e0fb89f49c625765969b81700eee79271352e6e391570bf908c4b1c06a4e13e0eb85f4ac6250e58d370ef04dcaf24e312a75668b8cf02eed7927189938034dca700f71b266e772f793cc1bcd1cce937953544e3464ebf424e866fa5816a4cc37220807e17c7f0210ec98cb0235ae5fe6d208c40a9533d2073320c1f7ecfc4ece035cc1852c7e3a2e5aa69e7455c3fc4b1927dd11e3d1a9feaebc183e7c796cd188207c48c21c4e7f90216eb217081ff14c700767a932da659af71ee6a1578f8fc2c89933aaa4ae36c0b9cbf48e22c52c9b91c70fe2a89335f25e73b9012e837499cd40cdd34ce3f80f37726679066adce0bb284444d75731813eb5cefbfd434d7e7da43984d9703231a292df1c5582f22fd8349ba8e97dcb934996b8cc31cff87e1222ff3c6c67577718802580bdaa67f32994d8a43f34b6bbc206550435a7d746b420dfd8b49b7ace72dbce487d95fbf975da164be26ae0ea15ddafd00eeef38ba9af9f6ffc3bf8725c68f4624f5d947c298127dd0833682f403d0fe1347e6a5f49eeb1a83c9ff0794ffb2ef8cc170c804dfa0ce3ec9cd573b5b5ae2b39b76679c0274ffc53130ec1aee68bc0cb63f33fe89063a0e72ce7a1d8481121bec34d0b100da4a1aa8c6c5da5b03686b69a01a1be65b01681b69a0c478261ae830006d2b0d9418c344031d02a0eda481125b9c34d06d00b4bd345062ac120d7424802e250d94389349031d03a01da48112e73069a0a3007469266867ff8b1afb6bc3d974ff066ee7d4cdf74cb1f58d23557811de324cbc6eb63606e131d1e87baa04e834445a7e9ba36116bd2313310c390cc7d9cb926a5fb8238c7b0c49e34ae5ef6074bd13bf8606239c3536742b585d576def8eb164c2a15de61361726d5926621815974ef08cc9d9ad31dfc8d7f0c0594e12a6c614199f03666749981a53647c09985d24616a7cf07c0c98cb4bc2d49822e353c0eccac46c7e522d3854b09d09b103497b963f03cff26e4ccac6db38d62d4c3aa0af9b68ce26645b81c9962a387b52826dbe57620f5369672587f8079969db9ab3124d786aaeee5f59b4974360e18a4cda20cb6c650273a8fdf515f600510a0c7d35b30c6ae64a4cbe65fc2f4c0f7b8a2f30cdbeb9d41e8a46465b0eb00590adccbe07d678519af2095eb08aa28cc9b6368b6d05605b85c9b6b6973c5011a5e42db10316e68d432cab29d6e2b5026d2968ea7467228771c1e96f37a67123887b6170ad87244e6a1791c6790970ae2a89b35825e736c0d95312675f959cf9c0b99a244e6abc068df378e05c5d12673f959ca5c0b98624ce02959c577811672f499c452a39ff01ce352571527377d138df04ceb5d8711a6604689c9d73acf7df9e3ca451ea85b390e36dd166fbdf270ec075694302bd07c62dd78e73963c18239a63ff3f5cccd7d4a030711a8d36287c30743ad7918c4b9cbca0e1ee05b8eb4ac6250e97d070b76c1be1f6963b2e4f5ca1411b97ef06b4ebb123e326db865332b0e6bddf7ac1a4461e136fd5b4ebe558ffcd7bfa7f9779e499a297586d807f01757d89a8c4673f0df51f40dd40222af1994f43dd1b503794884a7cd6d350e703ea462d1905923c78428c7aa7cd321d02bda98de3a04c95e730da5f537396c3d361586f1326658f1497ba7b77ec309c9b78f7ecc7223d195a9e7d98a445292ef4e44c8841637ea6fd777022a63735d5e6a831854d4ef653627b5be655136ddb35acf1c4bbed13ad481fc21150aff3991fc28a69dd6dcd7d965a9b696113cbc1bdb6400a24b146d2203b0264a1144862939f06d919208be218eb7787d3626cb201d5b808612670f695c4495dd5ce4bfb039cc59238fbaae41c049cfd247116abe41c0f9cfd257152b7e1a171f600ce0192388b5472e603e740499cf92a39ef823ed0a692380b54727e0f9c9b49e2d4b9f8f534b8d83797c4395025e7a5c0b90593d36c57122da431fb1b4fe371d116d16cee455c5bc63184ec0a174bae7dc4d1785acd3b152636b68a2388a1f1c29ac5353e643b184ade9a496b5244072b92ea93562991b3d26cc882eb0197f720490f977eccfcb1b44b7c6f78b80c96c4494dc74be33c12388748e2ecab92731be01c2a89b358256725709648e22c54c9b931700e93c459a4927353e01c2e89335f25e7a730a831421267814ace4e503b474ae21ca092f342e0dc4612e740959cb700e7b671f4d4ebbde99ed99e69f1df79bd0a684749a52d50497b103ca246c7918b2efdbebcbe5bc0315e8439461226b166d2308f05ccb192303566963d1230c749c2d4b8f9d85180b99d244c8d536b8703e67849981ad3f41e01981324616a4cd37b28604e9484a9314def6180394912a6c61dad8f03cced25616aecb71f0f983bc4b174c02c0da858b81ac81438dada368675edb485839da02bb9233f596fb070300a9689898fd6133f00eae14e71e454c8b7031dc15163c2ebd08a84f72ee0eddcb211471816a3310bfcad6d23ca5de2b81f162fa6f7c30e703fdc358efdd83249ea476cf6d012a7f58461e0dda481129b3e34d0d500747769a0c461361ae8f2003a591a2871a88d06ba0280ee210d94384541035d19404ba581129b4b34d05500748a3450e2b01b0db40d80964903250ebdd140db0168b93450e294050db43d80564803d59811b90b804e95045aa8b4d9d41b560d4d9306aab161bf2e804e9706aaf1925f1d402ba5816a7c28fd09f7d03da5816a6c367d03a033a4816a6cd87f09a0554cd09e5ef2525693e274ae5d6f19882c5ebbc2fd0077d2994cd65e5e264926c779d1de8683fc125472792b59bceb01ef2cf62ae130d9e9548b5bbff0dcca7970ed5870e67f215c754b4ec9256737268e31b567cd6e16c0945c4d1c29a3c33b67b55f13a7da8bbae9ddae352eff9f0b7b6fec2567f94ba1df3fd2182dd705ee93b592388b5572f600ce3a499c852a39ff86b667bd244e6a539ec6d91e6ae76c499cf92a39ef86da394712a7cec0edaf81736e1cbb6a35ee11a5b760901833420b533c06daa2f324e312239c68b80702ee7cc9b8c4013d1aee38c0dd5b322ef19e4bc31d06b8fb48c6254e96d0702703eebe927189132734dced01f77f92718913d134dcf980bb9f645ce2a4340db71c70f7978cab3131c6fe807b80645c62142a0df77f807b20137769ff8b9aa499a85a664665da2cd4442f023b28eebd8c33492fa4af2e6e0d635907c731cf8ffb1d4ef0356abc1afba67affed26e377993763e144a0c65d0f7bc2baa743e218cdcab7ff3fc4fff62ccf6cae37c30b76da9e650f576debb05ece8d80f35026e7f209ce02ffcf6cfba2e00031adc3a30d07ae04c38187c5b12ed9009a258cc16327263eda3ce97df0e8393c8ef89270f2b9cc5ed0a63073ecbfccae9ac9c3d583fd8355db2968f373ea3434edf2fe039a42473079bb5ade300ffdf65e98de7f9cffa7ceabb426e69ea9af864e821a7aa4dcc691c6d1fe42a89d47b56410cf50cb3825116f42ecad9fd596445901f12647332997f39a0a24abe3d12dc3aa85ade1023f268e7c37ae5a983c3f5aac3279d01d500f8f9584a93179d05d80799c244c8de9536f01cce325616a4c9f7a1b609e20095363fad41b00f34449981ad3a7de04982749c2d4983ef532c03c5912a6c6f4a9d702e62992303546e15d0498a74ac2d4983ef512c03c2d8eb573e9609ac9b4dac41827758bf1052cd60761eee77489acd4901a1aeb4c603d238e5123573c73f2c2598d8b66a77b11e599714c5ef4f526dbf1f62a5f22b6bca0bd597c1703df59710f0d4ff2ffaeb4bfa3c41ec6fc2c98999c69a77ccd57c17a6462cdfc95453b102ef2b399b4ab79c9f342350d262c16b78589cfc098fb395261898d281aec1ed0883a378ec004d7d3bee1bce50026276de6726ba8a7e749e21ca8927327e03c5f122775b5078d73103c9e2e90c459a892731fe0bc50122735b9108df33ce0bc4812675f959c4f01e7c59238a9a34dbc9824e0bc4412673f959c5de0c97ea924cefe2a393706cecbe2e04c3731db4095a92def87f8e2cb25710e50c9790d705e2189933af34ee31c0b9c574ae2ecab92b31038af92c4d95f25e7a9c079b524ce7e2a396703e7359238a9eb83699c577911e7b5923875e600ff1738af93c459a892f37de0bc9ebfeeb2ce3f845943142d7c29f1e6d9df50660f5c6e27e9cafdf30e84f44d6f8c03d01b5a32e02639e16a5f66f82c2de56a39cc15dd28099318d84dc39c0c983749c22486cfd2308703e6cd9230890f211ae650c0bc451226317c9686b92560de2a0993184347c31c0098b749c2240e19d330fb03e6ed923089f14934cc22c0bc4312267101210db30630ef9484495cda4ac3ac02ccbb5a72b57af2d811b1ff43db55e6509802be5b0a257587581ae5ef40b9400a65a14acad780f21e2994d4f5c134ca35e15e79af144aea58118db21e0212ee9342d94f25e50b502bef8f6341967b8c1d1b44b8248bd833efc262fdd68b581f883b9969facb60a8d36cb4853057429d7d50322e71b493867b15e03e241957e312ae15e1c1f5b0645ce298130d7725c07d44322e71749486bb32e03e2a1997d85aa0e1ae01b88f31717ba4c075ef283bc91e869afcaf1f8bf421207d5cce0e5f05dc887a5a3a8c1990d2f709499cd4887a1ae7bec0f9a4244eea6c138d7373e07c4a12a7cedc37db01e7d39238a92b39699cdd81f319499cd4959c34ce3ec0f9ac24ce7c959c774208f8739238a99d501ae737c0f9bc244e6aca0b1ae7a970b1bf2089939af28297d50e385f8c736b09d3a90c684d4274d3739f9de8b1bba65388c37bb4c9949ba0d3f9521c9329b8b351b0ad44bd2d769052a8d4be796fcfc4da6bde90e7192f627d99c9dacdffa2d43ffb7aff25c3fc7f55fa2f9be2ff6d36889ae87f6f90b7bdcf6c7638d287d817105f69c939d3e43ba9c6acb5951014f12a93b2b3ff85593a33d5d6ca2affcddbd92481e680c1e09cbe81b97ca887afc5117f6736879a6ef32f947b261343ad2db4619de7c5946d91f6c0f1a0b5f93abb26463bbf4597760c78b4ad76f600bc379878aba6b823363fea4eedffd02eefbb61faf84d89a8c476250df54e407d8b9f93b6ce0b566e8ef5e6daa9b55abfd1631e4075b625a9afe933061e396fc79193b6de7fe054fa2fcd64b332ea126dda3df447e850be239596ba5c9b46db0d68df954aab731ff74a78f2bfc7a45dd6ffa2d69efd60ffff4d77b2dc1be1999c60333ce2be70b43b6937b893becfdf3b3368bccfb48df7523bd011dbe6b8b4bab70fd4bd0fe2e8ffa437a2d94fe506663b02e6879230356e60b63b607e240953e30666e300f36349981a37309b04989f48c2d4b881d928c0fc5412a6c6a1e0d180f999244c8d1b988d00cccf25616a9ceadd1630bf9084a9710be72980f9a5244c8d5b389703e6572d3b13191c2ad86087f82ca765a0ab808083aff929fd32cbdf49bcd06939120b60d0ed1b69a0c48b9d97ff1840bf9506aa318be7ba00fa9d345062e79206ba1e807e2f0d9438284703cd03d01fa4811207e668a01b00e88fd24035eef1ba0680fe240d94d8d9a481ae09a03f4b032536ec69a06b01e82fd24089037534d07500f4d73822e5fac71f29479bf65d07025e7f6bc91e7b72ce448d59664b80f2772665274b39d746b1d77bc3ec0bcd014d6097be1ab88317b1fdd1b269aaf08031a5a95ac0629d0143717fca595e55c8ed4ad2463657848bfb2f499c852a395b01e7df92388b54727604ce7f2471e6abe47c195a94ff4ae2a4e69da371fe0a9cffb1430bc3457e41314d58e12cbb5ad22cf0d3db481a008d246fe918fa3885363ab3da2ea68a292eb3370bef6ac06bc5c4ebe2454ba9cc414aed8162e2a3d5bd07a025d99ac997591751e30e059bc3a46e1b26e5865ef222fd321bd46f8a618a1cadfe696a61d538ff9da6ff635e37c82f57a5475dba5fc9aabf9b027a5b267a38e0864bf707f91ae59e595531ba51ac3b79d13e2dce7d17b821b4638286cb57f08690c902167db49b4143be7d1cf7da745b9efa5a9df3e1a9bf1493320cecc2cbbec4af89c1bd7688172544a15ff2b4d5e8d300b3431cf750571b60b067965899b02e73370d0640880f255aa3ea3b58f7bbb42450938a8fd8b4a281de064ff965a48112e3e568a03703684769a0c4673b0df41200ed240d54e33df462005d561a2871ce88067a39802e270d94d806a5815e06a09da58112879269a05702681769a0c498631ae81500babc34506244270df44600ed2a0d9418734c03bd1e40bbc5011a8d99369fca94f850a2f5e51f8631a615a481129b4d34d02f01744569a01a93ed5e04a02b490325763d69a03703e8ca4c50139a58b170ec7394ffc2698978bb690a1f3d5b7a11db2a4cb654190f5d339f1898487cfcd0f6cfdc15ea627789a81a3725dd03507b4844253e8668a81301755589a8c447110d754740ed291195d847a2a11e03a8ab494425f6e469a82700eaea125189e34d34d44300750d89a8c451511aea1180da4b222a71fe9386fa39a0aed9b2a138c1a1f4e6b2b9df8b28d76ac908d2a1b67f3f2541496c3e9dd596d52685d1d0b59994cb795154d354afd20be2973487818f81b0c5759874e1aa8e7447e607a80cb8d9016ae2ba923807aae49c0e9cbd257116a8e42c83a7f77a92387546d79d039c7992388b54723e0a9ceb4be2a466a2a3717e0f9c1b48e22c56c9b91c3c8a3694c4494d8a4ae3cc03ce8d2471f657c9b919706ecce4343bbc246fd168e633cd86a13af7ca2af022b84d9870cb7b51d771b67d517080983a90b415451d601d7b9f385614b92e643cdc64eef2025e0610b88cf325616accbb3d18300b24616adc79e80d684d164ac2d4b8f3900735b34812a6c69d875e869ad95712a6c6ac34af0366b1244c8d8bad5f00cc7e923035ee3cf42260f69784a971e7a1a7017380244c8d3b0f3d07980399983d33c04c0e8825369268b93aff03d64d25b216a8643d1e583763b2ae91827592ff77a5fd1d25f630e66715def0c45b925359111f524fb370ef01dccd25e3129b5334dc6b00770bc9b8c487180df734c0dd52322eb1b945c39d0db85b49c625f6ff69b8cf02eed671b413c27571c1287e53c90227255e41acb3fd58ac47c018d5a0b8f3d9a5aeb343fc83ccf47f6bb5fd2a5890481c64f99545fb04d4d8c1ecc9ba68e1e150ffef29bec5b4c412441a1c2d11a009bf0ce186489a341ea032cd45095ce24325710e54c9b92b709648e22c50c9391aee92c32471eacc69b31f700e97c459a492f30ae01c218993bacb2b8df36de01c2989b35825675b78146d2389b39f4aced580735b499cfd55721601e72826677bff8b2ad5e189bdbc886a744baeb78c8a6eda931a1352cd8340c5314ccaae5e14e969368b3087311beccc8f2bd6934638b4554438b625a78d1bce141127e268db9eac0bc9cec749c2248627d2307b02e676923089e39334ccce80395e1226b1b143c35c06302748c2243ec369986d0173a2244c8d5b337b803949122671fe9c86f937f469b69784499c7ba461fe06983b48c2d4b8bdde267099ef280993b8408b86b92160eec4c45c3b0566bab3e218a448acb126213105f92f180cde590332b126d390df05e45d3420135b0534e40980bcab0664626b81863c129077d3804cec79d1900f06e4dd3520137b6434e4ed0179b20664e2e8160df93240de43033271d48b867c1820976a4026ce20d0901f07e4291a9089330b34e4db01b9ac65974a06870ad2b452077668396f9f80ee73b9244c62e78286f90a605648c2d4988df935c09c2a0993d859a061be0798d32461129b5234cc0f0073ba244c62e39f86f90960564ac224368d68989f01e69e2d99c13e39388d7891d322abeaa09539430a25f57e49a3fc1128aba45052d78cd028af06ca995228a911f934ca8e70af9c258592ba568446391ca203aaa550521736d028ef815a59c3de02d5240c2ef77f58ed8db6cb174afdb756f86fa0b1d1d6219b5cbe21db5e71a41c98e6ac838bd3867d2b4278796d1ce399612607f362f3f61acf44a684b91bcaed2866f8f760ff8dd3fd03ccb135d8e47ea04ee4d1eaee3bf04cafd3804c1c4da2213f06c8f51a9089e39f34e4db0079b60664e2883d0df952409e23a5b145dd7d89d6d83a1628e74aa1a4c6b4d2283b4117609e144a6a967c1ae5c7502be74ba1a46e1144a3dc187a537b4ba1a46e5e45a39c0317f83e2db9ee39b6e483b490f556d0abda9749d92345ad6c3e371e31f086961b6f105ce8ff8b6329b9b990a7db4193723b6314dbb641b41c783f7911e17e71a4d4705de07838d3b2a40ee4d17290d7417283fd2571523394d0380f00ce0324715247ec699c4380f340499cd4b9241ae76ec07990244e9d1b08ad0d9c074be2a4cebfd338fb02e7219238f355723e04cdf743257152036d689cbf01e7619238a92984699c67c0c57eb8244e6a0a611ae7e5c079441c49d7f3edff877f8fb31dca3a6b11980cf3bf362b3ac2defa645bd47a85c18a2b02ed912d3938975c5335ee1eb6210c191fc5a45cd74b9e78abf1aa6c78433000e21e5b1a07af1be4bfab923bc359c9821e01e34c476b8126d6681a747b186e3e8609dd2bc5cd21335e62d43d8d7700f01ecbdf647dba451ce4bfb02c518021b6d5506f1f66553c405a1ad83dbc08f0b838069c0b16bb01e72f80f0f8389a56f53e60a5ffd2cc629d889375b4189193a0697582545a6acc088df61ee8ae9ec8a45dc16bba7f35d8ffb7f917f5f9de9bc578095cfc27b5246378a654c60eaca9e4f780f1643663b9ff8fa93668bcca7f73d0019d90b89ccbc0435f70c3fac0784acb76457111a2c635f093a065792abf65190c94d4db669059bc501f57b3880708cfeed3e2de9a32fda737358a89f6f42e86fefbe9927189090c69b885807b86645c8db1f53d00f74cc9b81a63eabb00ee59927135ae6fca03dcb325e36a5cd7b436e09e231997384a4ac3dd0070cf958c4b9c59a5e1ae0fb8e749c625c643d3700b00f77cc9b8c455d134dc8d00f782961c2d485e0aa171938ec130717d615c5bc0cd4c4a7610d37801ad36ee0a03d217b56cea033c604c39cc17b058cff322d68be5c4511572ef99b4089595e042bf441267a14aced6c079a9244e6ade3c1a6727e0bc4c1267be4ace576008fb72499c052a397f03ce2b989c2b2638fbfa7f2afc867a902fdc14d84cfdcd8baba9449be67b029ee957c6353735d92f689d2dc84c7b8018427669514f8f405bf3aa386aa201ac4b31c5acbd26ce03c8ab99909dbd287c6ca6ffb2f2f8f068b123eb03de352d998a20f9f1421c27a23d5a0e843be2b54ccaee5ed3431983fdb756dbb087527b8f2ce0661ca1dd215782b1a1eba48112279569a02b02e8f5d24089436e34d03fdb46a0374803258e14d1407f06d01ba58112278c69a0ff01e84dd2408993c434d07f00f46669a0c489611a681b7828dd220d9438194c036d05a0b74a032536ec69a0ed01f43669a0c441381a683b00bd3d8e1e7bdf06ac31f4d869786bc2f8fa1d716cf263c68d9257cb2d3ea3989f7911e69d4ccc0efe17e6c56653c9a15eb081a4bebab70c70ddd5b2a345dad776dc0c9477b764e0cb503b243c2541496c929fd5964459094df20571acd00c130944f33a432ce2ac46f5343a196ae406edfe380c1e36f7c411109369380c35291b2d20e62560bd57222b35fd158df52860bd2f8eb97277f8d6a4a44b7f20f311d589c5791bcc0ddd2f8973804ace0b81f301499cd4b1771ae760e07c501227754d1c8d733de07c4812677f959cc702e7c39238fba9e4dc0d381f91c459a092f3222fe27c541267914acebf80f331499c852a399f03cec7999c5d129c45fe9f39fe37ab7c09fd215d6bc2bdf289386a63bad3150354cefe8c81d1a52725710e54c9b907703e2589b34025e73818f2785a1267a14ace3381f319499c452a39ef04ce6725715257a2d338bf02cee72471ea8ceb581a1e45cf4be2eca792736de07c4112677f959cfd81f34526e77296b3ce3fc42cff6513bc325b0433af39cc33e10afa7a4043bd88eea5960c53481e29d23801bc3c74265f6652ae97823239f98999639fe9cdb4ff2ef1ffccb6872c5938071fecea11fc42ea6cfb912cecbda0debe22658b5dea0827adde564353e9552994d4d14d5e8c1c50be2685923ab249a33c19285f9742499dfea5515e07cda337a45052a77e6994dd81f24d2994d4794a1ae56910d9fe561c5bed34dcd3c8bcd81c34dcd2cc15eca5736faeefa1a6be1d67a46799cd9a50eb85d19ed3edfc50326ff45d22ed61ad49b4b700ed3b2d9bfa0c53f161502271755b17568d5d01fa4fefcad9988fb87a9db71b27349ede8b63d59059f85261c79166c635294c4b0ef98e17e1bdcfdedc0437d8c34d4dc6dabe7aad3d9c593f44635c9b55075704c60fe27c00cd4990557be1e6a54d2d8821aee2a02d88391e9a4e1f4add678bda83a7a535bd03929e7d249596daa3a7d17e0ccff78fa5d25287f068b41380f61326ad096433f7d629bec0346f94ffc26989d6e93485f3469bc123ead338d607bb263f925b9c3a93993e0a989f49c2d49820ed35c0fc5c122671ad1b0df321c0fc421226b1974ec37c1830bf9484496cc8d3301f00ccaf246112f377d1301f04ccaf25616a1c3ebe0930bf9184496c9ed3306f07cc6f25616a1cdb7c0330bf938449cc1b4bc3fc0830bf97b3033191923628f71ccc0afd10e778a73990196d0fc3ba9a1eef243e8c68b447c078e78f716495cb64492bf11e4a5b36f8358c17fd240d9478f1d340bf03d09fa58112fbec34d04f00f41769a0c47e3b0df43300fd551a2871bc9306fa0580fe260d9438e64903fd0a407f97064a6c36d140df06d03fa4816accb6f03e80fe290d9438fe4903fd1040ff92064a1c03a5817e04a07f4b022d54dab07f17e241fe9106aab1ebf93680fe2b0d5463b3e92d00fd4f1aa8c686fd9b006ad2788b02d5d8f57c03405b4903d53838f23a80b69606aab1d9f41a80b69106aab161ff2280b69506aab1ebf93c80b69306aa7170e459006dcf04ede5359ef90ce291277843bd6dbdc1fe0bebfc1706df1be745eb4106f925a8f426331b51952cde21301bba149337b359fa012a436bcf815e7d0749981a436bcf07cca525616a0cad3d0930979184a931b4f64cc0ec2809536368ed9180d94912a6c6d0da1301735949981a436b0f06cce524616a0cad3d0c303b4bc2d4185a7b1160769184a931b4f652c05c9e89b9b4ffc56cfb434c204003a32d62ddc08bc0ba32c1d6f05c3df2f4d6b5136b230d775908a1ed26199778dfa4e17600dc1524e36a5cdbfe398c24ad281997d816e5e56400dc9524e3127b4d34dc1f007765c9b8c4fe3d0df72bc05d45322e71248a86fb17e076978c4b1c33a5e1fe02b83d24e31247f769b8ada129b6aa645ce23c140df75fa8b93d99b82b7a515ac1c9fe79957a33fc6f0fb19ce640d5967bb22d1871d7055ae2a1de3036b01a1332cc201aae1535eb44a72dfcf1e296f3f67d487bb93a937503e7c51fcce917257660a8b13536c8845be7bf224c4c18fdabc4abb5f539c83d4623df9045fe12dc6fd76092afee244fe77eabb19dd006eeb6bde2b849b8437ef08031a5195ec062ad857bef9a4cd6e4cd82b6b31ba69a3fe5898ce334ba7e2cba615e44b716936e9d468fad32eb6072e2861152e68d8d670e1a6f55a9af75b0115cf86b3399d74c714f0d9a54e6ae39cbdbc66e1c54d364fc9fc6d8bf36508fd7610237b7e95572934b6300d0be40b92e9332dc80da74094cd3a92af1088a25d7382db3c97ff030ea1dc78c6b3a4f78b30da0c6e9ebf7a12dba9e244c8dd3d71f02669e244c8d01bc6f03e6fa92303506f0be0b981b48c2d4f8fc7e1d30379484a93180f74dc0dc4812a6c600de9701736349981a03785f05cc4d24616a1c667e1e30fb48c2d418c0fb2260e6c73161178e29557b53fdffcccabbc53771661de0163071c37de6d35d353a5065329827a0b75e2889931a214de3bc19388b247116abe4dc0138fb4ae2ecab92730be02c96c4491d4fa2719e079cfd2471f653c9790070f697c4a933cddb535ec43940122775b5098d732da89d03257116aae4fc1e6ae7a62d3b5f893d22e27827ad47d415d2be6c1677bcd224ffef4afb3b4aec61cccf2a52848a5177a5fd95453b0fa2ef3667d21679ae0d7f319a2efb783c628f9f168fd7097afc5bc411349669c818b57d400b1abb0eeaf69671443e17796643f53989ba6a0a6ceae7bcb8021e7ab020ff8347d95671d4cf7cdb3aa8b077d5a0869a68bcf1fe77ccef29f5bf3fda3f48b97da0d103ca7bb3588f8206d7d6921a5c0355a62fbc1b380749e2a4e6e2a1715e0c9c83257116abe42c01ce219238fbaae4dc0038874ae2a4cedbd3388f03ce12499cfd54724e06ce619238752626becc8b38874be2a4aec2a771fe0d9c23247116aae47c193847c631d0971ea6c6351ebd6020649b3806fac2d1a820155730e4918c3ac42e4bac4d1a0e21d2b66f47a2bdaa6d44bb2d9376d506b415162e38c8e2b676f97c18611a15c70853885ad98032f919af6f84692e408e960249ac9134c8e10039460a2431f89606790b408e9502496c1ed1202f06c8715220890b1568906f02e476522089d3c934c8470072bc1448e20a391ae46f0039a125431c929b3f1a2fee8320c4612293b28797c9ce3641d20bea838796f8e234e8f14c8a6398c31d8083fd1cb3bfa2c6d5487b410ddd5e12a7cec55dfb01e70e9238fbaae41c0c9c3b4ae22c56c9b91370ee2489b35025672fe0dc5912273547338db308387791c499af92f33e98addc551227755f5a1ae72fc0b99b244e9ddb589d0e17fbee923807aae4bc0c3827b7e46c6532a7c6cc217360f8630f26e56a9672827ffe355e8d7d9989841fe5ffabcc9be1ff6486851e6c332ece481c7698ffb749b856ce83e5655af622d8d2b8f2d305f394c1228258c2b569cb098e814b7c8aa46da7cd3d9398a38e1696b00040cba4816a5c1b772f80964b03254e69d0406f03d00a69a0c4673b0df476009d2a0d9438574403bd1340a74903256654a481de05a0d3a5816a0c3ebc01402ba5811283ba68a03702e89ed24035461adf04a033a48112074368a0b7026815bba339ddabb6fd71d36f2fb58b57cb610d7b9dc27e7ab117f1cd8c235cbbde47341b4864b28b4ca1ca5dbb76859a394b2a6d814ada1a189faf8e23123e9d11505c5ea031d742058c85d64844258e3bd150a700ea5e125189cf7c1aea0e805a2b1195d832a5a18e02d43a89a8c4fe130d755b40ad97884aece5d350b701d4d9125189635134d4c9803a47222ab19d4a43dd1d50e74a44d5b891e42e803a4f222a71f68986ba33a0ce67a2aee0351da233d8ffb7f917b56ed2f2813d071dd3bde308cd710fefe1e09ec665b0dd81729f968d720a0ea537f9ea9e6d23ca7d650d3a17aa8c266905437bff9306aa319aa43580ee270d546334c91f70f7dc5f1aa8c66892bf00f40069a01aa349fe01d003a5816a8c26f1e01e7a9034508dd1243f400d3d581aa8c668921f01f41069a01aa3497e06d043a5816a8c26f915400f93045aa8b461ff053c940e9706aab1ebf939801e210d5463b3e933003d521aa8c686fda7007a9434508d5dcf4f00f46869a01a07473e06d063a4816a6c367d04a0c74a03d5d8b0ff00408f9306aab1ebf93e801e2f0d54e3e0c87b007a0213b47302b4a0c1245d0ccbbb69f1cbfb4337f344265e2f2f935481e3fc9f9b1006b38e7e905f824a6e7c68258bb73f04339cd49253c763fdb7ece9ffabccabe74e1db76f45a2ec0953c727c79168b5e97006b35c811a09ba36ab4ede0afb229c220592f8e0a141de0c90a7f253b6049945262fbc378ef1cc7690666bc8a97ec1e6f8dfabb43f9992880fa1ef65485b0af6273c944e9393a5a950693acb6ef0103a5d12a7ce7496ab01e719923875a6b3fc0f9aef674ae2d499ce7269a89d6749e2d499cef239a89d674be2d499cef207e03c87c9d9d5f3ec0a63b36bb6690ed5fac5adf1ff5d6a0f38ca0b76d6aee211d2a29197f522c273e348ee1f6e3831cbffe6dc94db9ac5b436ae0dab6bf91ddc33cf63f7886aecaf0d57bed7f967579bc8b538ce33991b2aad8cb909d02069e1dde55037cf675fde26d5c554ff1bb3fd97d443f28b095e9052a0ccff4a5fa7725320bc208e5c0d8d07e4d2c9d6407cf8d0c63a87c0657e611c23efae818fc1fe5babed63c93ca082c611310284d64f7f0406402e92064a8c51a2813e05a0174b0325ce5ed2402f05d04ba48112efa134d0cb01f45269a0c441641ae885007a99345062639e067a31805e2e0d9418454703bd1e40af90064a8cf3a4813e04a0574a03254e0dd340af00d0aba48112e33c69a0d701e8d592400b9436ec8f82e0856ba4816aec7a1e09a0d74a03d5d86cda0b40af9306aab1613f0b40af9706aab1eb3917406f9006aa7170a40e406f9406aab1d9b43780de240d5463c37e1e80de2c0d5463d7f32000bd451aa8c6c1917d01f4562668270b1afc5a0367c217cafd22d7328318fab1d8467a11db6d71c4c5a7175643ec5ad2426a0e06cadb9994eb78c9f1207576130a33fb5eee0df35f54e5ff372511cad0f4c5aeb139bf020c89dcc1645eb9993b67728dedcbecbdd3eaec598079a7244c8d37800b00f32e4998c4e7390d735bc0bc5b1226b1b549c3dc1b301748c224f6856898bd01f31e49981a77db1e0898f74ac2248e23d130bb02e67d92303546c87703ccfb2561121bed34cc57a177fe80244ce20c110df335c07c9089d93303cce4bd8e346ecc731f44253f2491b540256b15b03e1cc7de1ce1b0c86cfbc2e0204ddd0434de4fabe116f08844548df7d53301f5517e3e863a6f86ffc31a5b88397640ce2c9409930944ab91f40dd1edec45908fc5bd746692ff77a5fd1d25f630e66715de10ff2033fddf5a6dbf32afa6eec9f52b8bf66fb89b3e1ec732d874e78d06a89c791f0497fc139238a95b99f32e7ce07c521267814acea170b13f2589939a419137450c9c4f4be22c52c97921703e2389933a7847e37c05389f95c459ac92f34fe07c4e12673f959c5de1c9febc24cefe2a393701ce17d8d14a41f6b95aff3063fdb795d81125f3067d6c455ec4f6621cb530dd94bd03999d495ac2de475b459c2f49e21ca092f306e07c591267b14ace89c0f98a244e6a0c088d732070be2a89b3bf4aceb381f335499cfd5472ee0b9caf4be22c50c9b9001a4a6f48e22c52c9d9116ae79b923875eeaff509d4ceb75a321a2439197fb1ca74fca7429cd2db923089415f34cc9300f31d4998c4410e1ae67180f9ae244c6270020df368c07c4f1226317c8686791060bedf92bbc124b73489eb34685990f78771f60fa45016a9a4fc05283f944249dd709446f90c507e2485b25825e5ea70affc580a25754d1b8db216667d3e9142d94f25e503502b3f6552aee12507c056fa2f0f377e0a835d9b9a9fd4b8c4fa48c0fd8c89dbc1ffc224330ff2c58ff61de6f1b868e9ccbb7811d7e771ec7b697ef1545b1bc363cf4abc8486470bba6e05785fc4b1eac23db4863d1b5c7741bc84bbb0585f01d62f99aced3db39346a9dd41c32442d177b75b05a8be8a631f17ac7fee9d57838c329399ab7a6959657e8486ced7713474cc868cc33d13e632d1337b004f4bfc3b1089610b46da4e2e2fc0464ddff0a71eeafc43988528a97771196bb31dd5dac396331f37b45d5d06c3c5fead9c6dc40ab8cd70dad37b36d4ceef2471f657c97930707e2f8953670e9961c0f983244eea48108db31c387f94c4491da3a471ae0f9c3f49e2a48e9ed338fb01e7cf9238a9f934699c2f43c8cb2f9238a9d36434ceb6503b7f95c4394025e779c0f99b24ce812a39af04cedfe358b01f8ea6d7dac394da03a41a4d9f90f8ae194fa70ec4d1faef87c150c81ffca412e9861ae89bf1d90ea674ff940249ac9134c80280fc4b0a2431589006b91340fe2d0592182848839c0490ff4881248ebbd3204b01f25f2990c4a06a1ae46e00f99f144862a83f0d721a407a1d85406a0c782907c85652208959da69903300b2b51448e2de0134c8e900d98609d95c345b721f5c63e2e68d81b22d937235af7134db586fae6792e2354ce8d838e993bed88ec32092ad9d54588dbb546e0fb0eda5c26a8cbd9c09e3454b3161bb24608b6cd447bdff6d7320f39d1a1b42635ea68fef5598b6e8c0e40b0786f3edff877f078529b175d0bccc143f86e8a336ac85526f7911e7d24ccee53d13461804b696fa3f1ee905595c2bed7e5695dede9ecee0c2ae00b80c137059ff0b932fb82cf18b87d8090b73087347a4c1d182aa3702b88e4cb870bd637a333c3a2337b686bb622749981a37531a0498cb4ac2d4b899d200c05c4e12a6c6cd943607ccce923035f6c93701cc2e9230356ea6540098cb4bc2d4b8f9c73a80d95512a6c64d3f3606cc6e9230356e273b0c30579084a9713bd9e180b922133358565ae7052b7f46d80e6339ac00aa53d8ef9ee045782bb1072ec2f11f5c07a97d206d01d4be955b7676074300898d1f5a08e03418d25d8549d9ddcb3cb725f13143cb1f781c84ab7697064a7cd4d0404f00d01ed24089c31a34d0c300745569a0c4a10d1ae81100da531a28714898067a3480ae260d546352db6301747569a0c4610e1ae854005d431a2871a883063a0b407b4903250e11d3406b00744d69a0c49e120db41640d762828659dd90334cbb536ec794c2bf07fb2f9feebfcda4290b12a198f861e2e54f9b513f1c42b6d6968c4b7c58d1700f00dc7524e3126f0b34dc1300775dc9b8c487180df718c0ed2d1997d86da5e15e03b8eb49c6250eb2d0704f06dc3cc9b8c4f1011aee8d80bb7e4b8eff27ef37a07153917630febf0193324c711ac6ca97d91a688a11c421bba755346656980935744326ebfa0d58cdd28379fe21c234d0c1420477264f7cdd20bf4c955cf04a16f836508f376282afd300bc1ad67b2cfecc5743bdde388edb857b54010f88199189eddc052cd6e930a1bd491c2b43d28b4d29f49b5e1a03775780258b7d247116aae4f480335f1267914ace6580b3401267be4ace97605cb6501267814ace5f80b3881fd91704a785e71f53601aadd9ff133cc7fbc631e9e26a1c355ec63d8019fc438bf49b0fedcd6269a0c4f0341ae81c00ed270d5463b281f100da5f1aa8c62403db01e80069a0c4213e1ae824001d280d5463e2968900baa93450e24c140d746700dd4c1a28b1114f03dd11403797064a0ca0a4814e07d02da48112a7f068a0bb00e896fc6ee674ff9fc90bc7c65bc272ffd0faf076f222bcad9878cbf95f98498c0a6f86cd7c63ea1deeb9a58fae27d06d1dc7d4717aa3451a5727cf06ca41b2ee89452a073bde8439ccc1d240350e76bc01a043a4816a1cecb81b40874a03d538d8710780964803d538d8710f800e9306aa71b06301800e9706aa71b0e311001d210d54e360c703003a521aa8c6c18ed701741b69a01a073b9e06d06de3c89b6ce6d4a7da97995ebaf6742fb77911df28265f37e0dbcb57a8b0870a37bb8f0591b6ed7d3f084d18ddb2031f18dcad3167ce594039a625971f0cb54371533c7a9cfc596d49945bc19d712c7f1838c8e23ddefe72f36099e3997458c105aeef921e01f7c5714cbc15e0be38dd0b52b099432c1e69f9df83cb79bb3822de8a1b5cd431e0f566e1ad05c1ace3e3c8aa98ce7280605a4cdf88fa0380394112a6c614950f01e64449981a93f4df0b989324616a4cd27f3f606e2f095363bcfa4d80b983244c8d49faef06cc1d25616a4cd27f3d60ee2409536392fe1b00736749981a93f45f0598bb48c2d41806732d60ee1ac792e87430931744135b9cb425d11f01eb6e1259a90d791aeb71c0ba3b7f2cbdce0b12f787f90fa678661fb819fecb66fb2f9be2997c083444daeec2a3bc0871729c49536627a622dc8926c2c90ae29d94369e79170c06efc1645d3dc5253fc90b36759cef95d8c3989f55d89d0a67fabfb5da7e655e3d99d94bfa95457b075cf6a5712c924e774a57e78295915053a748e21ca8927337e02c93c449edc5d338c7c0c55e2e89b35025e701c05921895367fcdb95c0395512675f959c1f02e734499cd46d4a699c4bc1a368ba244e6a8e591ae7eac059298993bad30c8db31838f76cc920aea8e8e4d1795a1fbe1aa23e66c4119369a8e6f8dfacb28185da8366d600beaa968c814bae89c4a90d5a4dac8527f84c2994d4d53f34ca6f81729614ca429594670365b5144aea06e334caa521d7418d14cabe2a29378406d05e5228a91b97d028cf805a59cba4ecea45d1c3e17c5038e5abbb11f421e4caac8b8b70baedc194dbbe4c6d5c84b4898917bc88b0be65138ae3660e38d14b0c31ecc2625d059ae7b3f935b3ca7f41a94dac832976744ff26e0b35738e94470d35ae9d467924b425e74aa1a4a634a151768406d03c2994852a29df825a395f0a65b14aca75a02db9b714cabe2a2967c305be0f9372452f1a97acb02b214d5147dab6a5d94328a696250df273787eefcb84ec91a24e361fa045ac9bb400adc17099ff2f0ed230ee2db95eba2e78622836ad965e0a97fb7e715cee058be9e5fe295ceefb332197f5bc85c31813fdde7850807059340d8e96cda03fc01d2067ff9402ee8c376d39403d8c091d2889933ae34de33c10380f92c4498d16a2710e05ce83257152a385689cbb03e7219238a9919634cedec079a8244e6aa4258db318380f93c499af92f34918533f5c12a7ceb5e6bf03e7119238a94b52689c67c2c57ea4244eea92141ae715c0791493b393ff458d97bc3a72672f586f4663ebc962dbd88bd88e8e63095fbddff3aef45f3a79e1f05ab9c50bff1eecbfd8cc98cff15f15ec5b418e6da3d17e0b35f218a9b4d458371aeddff0283a562a2d35b895463b15688f63d22eefe17af3b1de5c7b07ad5db8f23c3890be18a3d170473d3e8e248fee1514f3edbfa8e3ecb43c854530d97b0293b15706cda3215eb0babcd47ea7cebe83cabb7f6bd620323c9c4e8c6bd7e899fecbcabdd8d652d0a62e36857be44971d4cdf4662ac33ba7b98b0ef24b50e951731f54b278978729b693a53edda92134b4a77b355cf6a748a5a5c6ccd1680f879bc2a97124bd3733e88b5bd2fb7701f1b43866d7072ea6b3eb3f7a11e4e971b4425dcda7a8154aec0dd15aa127407d3c83c9b886f3499fce1db39899f09976c79c05d149674ac6d5f838da1370cf928c4b4c7c46c3dd0c70cf968c4bec9ad270fb01ee399271350eef6d01b8e74ac625a6a8a0e16e0eb8e749c6254ef0d1702700eef9927189432e34dc12c0bd40322e716d270d770ae05e281997981f9986bb2be05ed4921ddd2116b4963b1f70186b3e600b1818bc98c9b89a97bc52a4dcd6be526b114ca7244fbe0407d6bbf76025d4cf4ba4c2121b5b34d8176096e052a9b0c4ce2d0df61080bd4c2a2cf11e4b832d03d8cba5c2125baf34d8fde11e7b451cb0f9f6ffc3bfcd93bfc2c6019a8d4acd6f32d4a361b2db14b45ee1f0771e0c7f5f197782fff45bae1adbadebc0cde0aa96cda383078c298f0e6dbb949fa01d7bb59ca8ea42ffbeaa714fceee1085758d24ce42959ced80f35a499c452a393b03e7759238f355727e05f7ceeb2571eadccff82fe0bc218e61bfe456e948ff4d837c937aff8d518ab709894653593c2d535eda7fc0bdb12513ab27d7558d5b45efe74594373129bb7b996ee6d38f79e1d3eae6a6d01dbd591a2831968506da17406f91064a1ce2a381ae02a0b74a03250eedd1405706d0dba48112a74d68a0ab02e8edd24089d32534d0ee007a8734508d5bfbac05a0774a03258ee2f376a801d0bba48112c74269a07d00f46e69a0c49e120d743d005dd0b29d4e9cb22352d2a6ec9e84fefb3dfcb09d20d7a321adf38205e72312df8b8646ea14d6c8536082eede382ef17c3b9354616b644437da5ed8a5f627b5718c2bd1a6e57606d0fbe21803754fcb61f1cd423562bfa8138bf316e0bc5f12e700959c1700e7039238a92b4d689c5b02e7839238fbaae45c17381f92c4d95f25e7a1c0f9b0244eea101d8d7327e07c441267814aced3bc88f351499c452a397f05cec7247116aae47c16381f8f3b707192ff77a5fd1d25f630e667150b734705992267d91e14717693b601e00a6d23da27e2a8a98dc31a825c27db7ba5f68de5aa0319ee829afa243f6f69b53dc0c8440d1dea91f396d2d83a02db534cb60e1ea6290c6a1e8d8b9657a704b89e6ec991cbe4860f71549db7cf368c5c3e2365eb346a1b9246390be2379f9542496d3fd2283f01cae7a45052db8e34ca1381f2792994d401361ae535d0567c410a2575708d46b92c50be2885923a1244a31c0dd3b82f3129bb584a732c93563078db282fd8797b62c243dfd4ed642fe27b59de3e9dc41a496b9ecf808bfb1526a9f9a2ca4663d428ecf41542cd7bb525ef817838ea3a495ad0ffe9d0c8798d7f0f9ce385a102136d9294208440ef3d707ba889afc731be182ee547c84063714b3fb11b3c9ddf90b30a8dbc768276a1cf85e18a372571f657c9793870be2589b3af4ace11c0f9b6244e6ad25f1ae774e07c47122775b7041ae746c0f9ae24ce22959c0381f33d499cf92a393f808096f7257152f7efa0712e03b5f303499c0354725e009c1f4ae21ca892f33ae0fc288e34a726da22da1825fc714cdba2d0185ff422c68fe3ddff287554d0f0c41bc6fa87d8d33359e4eab963984fb368af01da4fa46e2d459ddca52d4ab9192efe4fa5d252277b69b48f4323ea33a9b4d4e80e1aed10a0fd9c49dbd58b36449b99f8e5c15a34ed8fabb581f00bfe28bda9696688d9c455ce8e8f8f365fb41af07dc9e45bd9cb2ca199c63451e7c3f3fd2b49981aa7df2e00ccaf2561121347d030cf06cc6f246112d39ad030cf05cc6f25611293eed0304f05ccef2461125342d130cf02ccef2561121be734cc1300f3074998c490051ae62980f9a3244c8d239d1702e64f923035e620be1e307f6662aee925c7299920c3521ba964425d4d07d2ec8fd1745a288d891f3f691b01ffd2b2218918f8a53125d4e140f96b1cb98c3259a04fbc93d21641bf01c31fbf490325de4d69a06f01e8efd240893d771ae80b00fa87345062ef9d06fa2280fe290d94f850a281be04a07f4903258e7cd2405f01d0bfa5816a4c75f21480fe230d94d89ba7813e0da0ff4a03258e82f292f100e87fd2408923a134d0e701d4fc1631a0e49daf78f75008b069250d5463d7f309006d2d0d5463b3e971006d230d5463c3fe31006d2b0d5463d7f351006d270d54e3e0c82300da5e1aa8c666d3c300ba9434508d0dfb8700b48334508d5dcf0701746969a01a0747ee07d06598a0bdbc4c72d58cf37f6ef65837bb650cf24b50e951733554b278d7872c221d99bcab7aa972c18eb707abb6ab944aeccca779b139891832c2b6694542fdcd8b503b3151d7b2a813fcf3aff16aeccbeafd378cf5e67ab36ccdacb34b156afcd7ccb0a08313b3f8c12f18e6ff5de1992d74f4cddaaf07c4cb32899b9bb54f5ef645ec47b567d5d6f561d67e3926e5065ee3701dbcc316a5c8b05d077b1445ff2af17f45adfd45d498930d59b5f72878a87566922fe77f51e705998fcdbdd61cb5d43fc468ff2d869246d79b45371e2efc2e4cba9ef0c09a6d9ffce36c21c2655d755ec39dd8352fb439176ae4f24cd6cec01ae411ab8b0b6f010bef25a8935d997899ad94376b413406e32e0f6dd26e92388b5572ae0a9c2b48e2d4192afe0fdc295794c459a4927329a89d2b49e2a48e3fd138ef83dab9b224ce02959cdf01e72aec6e664d624c694aa297be73a21f34da1e728a873d7a1a252d99c026d048eaceeef3d43468aa63ce5a1a1d2dae7e2ad0f588a387ee1a03fdffd3435f0e72d8aeca244fb5fd58fa794588d3ccb41b410f186fea19470fde3d4582071c646bacb9ff4e664e36d33aa1b320a46c3526abf9d5557632a45eed6e5a6bc31d757526d6b2f668e1eab9a1f6b22db512e692d6f7285a0de0d6907b5f2446dcd1ee8b7de0bed8ab25a734865ac6295eb01091f88839ab2d89b2169ede6bf267354b1666591c62e982f9cb169a72a36dbad3192efdb598a82b7ac1868dc1ac66f8eb71b47d92fffd727b1fd5b8f3e56e00b9761c73eee192eee0820f0ed2546f5d633a8c6be1eeb90e13354c3a904e9b72b2d22d279e86fbe7ba92303566707816307b4bc2d498c3ee71c05c4f12a6c61c764f02669e244c8d39ec1e06ccf525616acc61f728606e200953630ebbfb01734349981a73d83d08981b49c2d4d8685f00981b4bc2d43857792f606e12c7b87aa6a3ead4a495b471f5e72140a18f44d60295ac87036b7e1c03c9f97626c84c00a717314f5f7e401b5f5a1d66820ae2880149770d1275e31ede3a63e02c94c449dd568ac67913701649e2a46e1849e3dc1e38fb4ae2a46e674ae3dc0c388b25715237dba5719e0b9cfd247152c7e5699cfb01677f499cd40d23792959bc887380244eeaeeb034ce55a1760e94c4494da34ee3fc0a6ae7a64cce70c34843b5f86d18f933306e1647588d3b223e38143dac8616fcb52a44c36f1ec722c1c206032231d4435af8cc1a30e0b145dc9173a9b72e6d1ccc4d4d62f12b8b7653a0dd328e078febb1d3703f84012a7744d8a26dc4b99524ce812a397704cead2571523725a5716e0517fb20499cd46da4689c7b02e760499cd48d9e79791480738824cebe2a399f04cea192388b5572fe049c259238a9e10b34cecef0641f2689b3bf4ace0d8073b8cc9976e238126da6fd24b8e847c4d1f10c971b4cf3cc0a6033d31e8d25b9836e34c62fe543c8cd4849239e035526a07e100690b791c4394025e7b5c0b9ad24ce62959cdb01e728499c7d55721601e768499cfd55729e069c632471521720d038e700e758499c052a396ff122ce7192388b54722e05b5733b499c852a393f84da399ec9d92dc159e0ffd9cb57a8b0870a92a8c434cf4e4ba9f23ad4c909fcf400ee79f6e47e90be89e22e0039510a2471e08306f90b5cd693a44012e7d769903500b9bd1448e278110db21220779002495c3d44833c1920779402495c1b4c833c0920779202496c43d2201f03c89da54012f328d020cf00c85da44012b37bd0205f05c85da5401273ced0209f04c8dd98904bfb5f04dd42f3a75c6d76cd75006cf7960cb94e6e786bbc1bee0f21d793e348fd1c4ede96d9647ba618a6c813bd3085e9303ba93bd31be51fa43178c340048d6108bf4318c21e2d9b9f1837174bcea44063edc262fd1a6e0aa54cd61e5e261b3986836fc45e10ed3e7b2fd4d4292d993ea571dcbbbecb7e0b0893299384491cc3a4616e0998e59230353e90f200b3421226712c9317640898532561129fe934cc4d00739a244ce2d39c86d90730a74bc224f69b689885805929099338b649c3ec0b987b4ac2248e26d1308b017386244ce218270d7373c0ac92b3dd5d81d27c9c7bc268d34c499cd4052d34ce7d807396244eea62401ae766c0592d8993ba1890c63906386b2471521752d3389705cebd2471521752d3383701ce5a499cf92a39ef80a0c23a499cd4241434ce2f81b35e122735e30c8df378b8d8674be2a4669ca1715e0c9c73989c5dbc284f973948b0235b4c91ecb44ee5955ec43797c9d7d18b36fd36c9c7272c24d417a8b032a0cd6bc9dd2b932f618d3b09d5c0a0c67c2665772f39e62334682a6f21f17e48cb5bb8032cd3df9bbddbef64ffc773ece56cde6876431fe57fc784cee8bb13ee0a17f53e4cb8e5bc689386e097c7f410a1dd0f47420b71df38726516d80b38386a4c781d5a91f0fe847af7bf38ee8099e4b9d6984bf85a6811ee270d9418e04203bd1e40f797064a6cf4d040cf01d003a4816a5cd47c11801e280d9438714b03bd0a400f92064a9cbca5815e0da0074b0325f67368a02702e821d24089c18234d09301f45069a0c480411ae829007a98345062d0200df42c003d3c8e6822dc4671bcffb739ba19b31cedbfd50c76c4b071626f16662fe8b31f1147a6cc7abbdba419ec0817a394db8989f0efc1fe8ba7fb6f9ae3bfaada2ec822672ceac9a2fd19eae9915269a9d98b68b4a380f628a9b4d4b46534da2ab8211ccd1e38aef7c23596e3fc179a6421f5167096c21177535542b863e2d8bbca35a13bd8ff773027491c14a13d909e81fa776c1c4ff7f4e6c5fb33fbefb469b5f980799c244c62df9d86b937601e2f0953e3846f1d609e200993f8cca661d603e689923089fd751ae64cc03c491226b1af4ec3dc0b304f9684a931c66d1a609e22099338cec95bf70398a74ac224ceb5d330ff0798a749c224ceb3d3300f04ccd3f9a1ac7e2fc17f4399b7bd17846e55fb2f98edbf608a6702baf445216de3457c67b46c542606116adcfcf8d0b611e599b2a62e8a55c6248d8371cbb3a4816a8c499a00a0674b03d51893341240cf9106aa3126695b003d571aa8c698a4d1007a9e34508d31496301f47c69a01a6392b604d00ba4816a8c49da0a402f9406aa3126696b00bd481aa8c698a41200bd9809dacbcb24d3eb382f5a6939c82f41a5474dba57c9e2ed07cb032f61f29a5f1d0e88046fa261d156b0996b2ec4ba348e24f8263eaec22e003445350536e348f33cedebd99e07c8cbf86b28c37ab75d835dd26870b424cdc301eef2961c82c364e2d421b8f6ad4894bd6108ee0a3969220abdbe2a2777bbc283e44a499cd476248db327705e2589b35025e7bfd08abc5a1267914ace0e503baf91c499af92f369a89dd74ae22c50c9f93d705e17c7e62061ca9359fe37e726f6564986c5fd5688036f6d588da52fe082bf9e49ba8cff85e9e34cf5bf31db7f89dea6baa10ac96e90d354274eeed29aea7da1a97e631c8b521a8f01a5b32c857861d316a5e4c3857d531cbb9517798bdf6ee5f7c2a57e731ce3420316d371a1952040eb963856fae002d491fe5ba211a218969ed2c629e7427dbc358e4c5ba63ece5e2c2ee5bb81eeb696dc6d32b929ae31427d1fa0bc9d49b99ab7e84b4989a159b467f6867097bc432a2cb19d49837d046aec9d526189b7021aec99007b975458e250070df66880bd5b2a2c313086067b08c02e900aabb1c3390b60ef910a4b0c36a4c1de08b0f74a852586c5d260af03d8fba4c26a4c88722dc0de2f1596b8d480067b0ec03e104710a26be8b9f1b6b4052ab7f3fe0672be3f280d54e396dedf02e843d240356e9efc06803e2c0d54e306ca6f01e823d240356e3cff0c803e2a0d54e3e6f3cf01e863d240356ea6fc05803e2e0d54e386ca5f01e813d240356e44ff0e803e290d54e366f41f01e85392400b9436ec2f6a1b813e2d0d5463d7f37c007d461aa8c666d3b100faac34508d0dfba301f43969a01abb9e6700e8f3d240350e8e9c00a02f4803d5d86c3a07405f9406aab1617f1680be240d5463d7f33c007d591aa8c6c1917301f41576eec4e4152013fc979b629868e7619ed9c980c6474bbe3fd08bf85e8d6317f562ffcf1cff9b5536a259fb2eea9703df6b2db99866a89d189ee205a9278917b2792270229b60c8e3753911ce1a93f31e04b5f20d761a8be9f601526e6b5ead57b270f5471d0fae0b0bae3dc0bd19c782d7749fced40d996977c7b1f06c7e4b12e740959c5380f36d499c3a4730c7c312c377247116aae43c0b38df95c459a492f32ee07c4f12675f959cdf00e7fb9238a969cd699ccbc0a3e803499cfd5472ae0b9c1f4ae2a46e4e42e31c089c1f3139cd17e6c5d4b11f1ad3d25ec4f4711c7bb8b86a5d728f9bfabca6f5b91f833af789244c8d1be2bc02989f4ac2d4b825e88380f999244c8d5b823e0a989f4bc2d4b825e87d80f985244c8d5b82de0f985f4ac2d498aaef6cc0fc4a12a6c6842bb703e6d79230356e095a0a98df48c2d4b8256815607ecbc4ec990126e6e42c64d6d1052cd61b61b0ed3b89acd480561aeb5460fd9ec9baaa979c3fb6de466884f9e8928183830661074454da8e97a536ec60a9760d0e3eacd1c187d8813173a265b6fc41f0c026de70cfcc775758df32ffeb515ea57dd71e7e2ddbc5ff2fb34f6237ffbf54df6fd5aab35fa2126f9e5f3cf35d73bc727b6cb36fab29599d979fefbfe40753317a242a465eabe5fdffafb1276be296a658a04a5bfe527be4bded71f2ec4c7eadfd6c06fbff5fe9ffacdc1b61070367f847ceb3890953e5bf9de0050909cae0d3cc6b6546966637fa795eab8e0bbf3fde7a94faafafb17641094afdd795253e982156d86899b3cb6bd5c99e49b0bbcd14fbca19decef635e6c82b35f1d3d1f67705bbdbd6d9540b35fe3b5c197df3ac74f24f1a6ed0119436f935a3fcdf667e6be0692a5395f5ab49943d48da58eb976fac5faa127b37aab667decd9ef96cffa7d5de30ff5f463f3c8789fef70679db7be3ecabf36c18d5742b526e7f63a92d4539ece55b97285d9d176c2e32ccfee620b5a9f97a7e839f4ff48f175c0ce171f35a758512059794b19b65eb8c29cd84c47bf3d28a8a0b8e97fcaaa8bcc935a453e29553fcef4db367382db195d434ffa71d52fc34fa2483ef4eb0b7abfa85478bf291363c5a277bc1d75ae98a463fed686f82731696d3d458a33ddfde2e5ad92b2b74186d3f5bf3d352fbf7447bad997b459f02ff65ad4c5ac820b5c7260b937a04779499fe7fc157e1f79b3fa6b93f347db41fcd4da055eaa74355ceee6ccd9d515473a6268cebec779b3bd3e6cfcf7d97ecd4c4a7d2a7d07c168bf3f9ff643ef7ce89cfbd759f2273be0539a87bcd97e867f39b5b93da23ae6dcbf1d621be960777f0e069678a994d2d3777bce4e355dadfdba7afcc1a9ebb73ff05ef6cadfb142f6a0dcfbc44bf326b7870b4200b5483630f4fe3ec527f0e0dcf397a558dad0fa50beb4270bd9be77f791a12abd9d696fb6883fcafa6d973adb4479de985ff334f4ed3833137a6df989eaba471c7186b1b06b5f6b0e54bee20c11d24dfdc417e4fbac8f2cd45f6c792da9fd3daff27d373b9a4dadfec3295ffc735fdafc635fdef25353da735fd1fa66787a49a9e724b9effc7b5fbdfc6b5fbbf25b53ba7b5db5b36b6fb78300865fe942fa9e90d6aba19d16a50d35b333f99ff8735bd0dd333a3fd90ff1fd7f3b68deb79bb25f53ca7f5bc3dd3d3359235c6aff1e114c592da1ed6f6a51ad7f60e4b6a7b4e6bfbd24ccf6e49b57d5c83e9b925753e559d5fa6719defb8a4cee7b4ce77627a2e9f54e7c77a7313d533acfdc18196d4f7b0be2fdbb8be2fb7a4bee7b4be778eaf4583f5dd4cf5d7d9deea92da1ed6f62e8d6bfbf24b6a7b4e6b7b57a6670fcf35af14c4c8d5fb2f35a73cd71ec284ef04816e4bae80f00ae8d6f80a5861c91590d32b6045a66777c71510842606d5d7dcf34b3c93146849fd6f58ff576a5cff575e52ff735aff57617a764caaff18f4b9a48e8775bc7be33ade63491dcf691d5f953def14d67013f66a8e6a0a38da9ee292bb7954d37b36aee9ab2da9e939ade9ab333d3b27ddcd477841003c06d32fa9eb615d5fa3715defb5a4aee7a8ae9bff56b68d8b49fe7bcb132b18c6faaf2fb7c7fbcfff5fbbff0338adf44b0c0e0c00 + serializedProgramCompressedBytes: 1f8b080000000000000aec7d09dc55d317f6b9f7bdf7adb759838af0a659694622cd13699e489ae75173a642144208211421842484a8148a9029332173861232f69d7dce5af7eeb3ef7ecebdfbeecbfffb7ebfaf7e75ee3ec3b39eb5f6da6b8f679f6803c7fd13a9e7fed7d7e9e9b475ea3b7d9ce1ce2467a2fbabad7b9ce0fef5537cbebb33c53d8e72ff1fe25eabe714a67952fca915a9e4fedfd94d4d75a6b94f4e7786b9c731def55ece08f77767f7d9116e4a9c1de9fe1be1de1589b90ff571da39dd9cae4ec5488534107dbd87a6d2b988d02b52d4fdbf8d33dbbd3ac223258434f02e5574ffebe55e99ea5d9be092e6fb0638033db526b8d786b9cf4c71c6bb98433dc4a2b1cf1def87e31f46d3710c1d47b9ff0ae8771efd2e4abfe5fbc579a1dd5921f78e95ee65cc71eebfb8fbef00a5c7fbe9125b293dc14f47ca2b18c5248c89749c44c7c9743cc7fd97ef3efe6d06fcc3ae4df139ecea44e9a9749c4ec769f4ac7bcf4bf5e8dc0c3fdd7217a567faf6892ca6f42c3ace0618ee31bac4bf96578df4f84e4a8b63753abf474ac792cf39e7d2f91acaf335e85893ce7f2fa5c5f3b5e9f9f3e97cad24b7e8c974ed02e59a38779e744e1c6b13fe0f525adc7721a5eb28d7eb84d8b305dd738ca2f331c47937dd372778bf333789b57d299d3bc57f26af28a559a752922e2c7770509e5baafce310e5fc101f33de907835566cde988e7515fe75fde7626528dd24f85c42de45caf51f95eb17d3f99f94f397d0734de9fa5e292d8ef5933ae7f13343253bcca36bc749e7f8bef9d2351da70574bc145cbf9c8e9781eb57283a5d49f28ed770b94abaa6c3ba9a8e0bc1f56bd270592471717d29dece09c623d96675c3f33a9ffdee5ae5fe7a4ec257d5b8115f4fe9ebe8de6393f7c677d0b5eb956b8c29ae2d96ae49fa25aedfa0d8fa463a722cb92929ef797ee618c96fc4b3fba4b4cbb94817baef663a7f8264237ad6b945ba26db9dafdfaaf05aaaf147bef70e3a4e0658c85ff93afbeb6de0fa323ade0eae2f57b836a2630f89eb9d746c4c36e2fa6005716b90b473919574ed6ee51aff16d7ee4adedf8bebab13e9d84e927b0f1d8fa3e3bdc9e7ce2ca4732caf071def4bdef362773a77bf842d8e0f24efd9bc85cead228e0dc91e3f4b6957e7a254af380fd2f5fd946e46d7d752fa213a3e4cc7d574e47afd17455e23455e23c2dbedf32b2841f73f42c735747c14e086b509385e377382be4f3a14f4279994af0eebf4041d1f93f2661d1d1f4fdaf2e52a211c58df13157d4ff46517df48f73d4947f695a793f873588fa7fc678af5a6f47ae59967249e54b739cf4ae758d68624f63945fd638207c78993145b9d44b27f0ade97b8ff6449ce262758b6f8dee7e8de539c60fd760a1d5b2431f25a48720ba4dfe2d85c3ad79cecb800f06a29f1da0c785159c86badf06a4dc75692bc56211cd886cfd3f1053abee8047d96dbb8dc6e7e898edb92f972f45b213ec5fef0b27f6f01b7d5b87e2b2ee91cf67c313a6e4f737f1846713abe628151c2b75f893d21f78e95ee6539affafa3b5c478fa2fc6823e54d1bba1623dbffaa9c8fd3f9df94f3f9e07c1170be68f03cd7c5796d252e6d83cfe4b5a3670e48699767a9af158cf674dfef1267198fafffa13cd781ceff29e9243fd7013cd75179ae88f25c47f05c27e5b9a2ca739d82cff179ee037a6971fd2f5fc7925c87bce6a74b73bf32dbbee1eb24e75427d8d63b958e9de9fcdf52dacd8fd2b3483ed7b96fd0f5d3149cd3d2e06c0fe1f89613ec4b733b916ddb45f1952e3e6699f2fe7365b8fd16a3eba7d3fdff04f1bcf332dec120de216c2baeb746f8f709d7f1cebfadf01aa1f8025f9f2cc995af731e502ccc8f4869711c0fe4ed0c5e4f91c731f60de5fa3bc1fbf2a6107e544987c5a9928ace5de9999894767f97e5f603b2ddbb696cc7d773653bc643b6e3ebc876ef05efcbca76aceb542719b7638a4ff6209cb8742f9f17c7414ed0f707f918e5d9e7e30a5e37c2cb97d232ee34e5fa343a4e9738b2ad6724cfe54d97ce89e348c22922a5052fb67fbec2ab9722b797c28bfda5a89496e30dcb2b50e455c7f667ec448c9dea04626c596ecfbe6f664be7c3545b391f49e73ea1e3c7d239cedfeed239d907a8edd39cc63b9c0fe85a4f290fba2bbed153f1d95d66b60fe8f186468f4f357a30466f8d1e7d42f4e82be9d15bba9fafc97a7c46c7220a7e3f458f7e1a3d3ecf500ff6dbfe1a3dce08d1e34c498ffed2fd7c4dd683c7fa8a2af803143d0658e8c1e5e52c8d1e0343f4385bd2e32ce97ebe26ebf1a6138c457ba4b45b062b6e57ee1bec04ea5f2f2d9743c63918c4a9c4630c6abe0f09da2be5fa50c59e43e9384ce1314ce1319c9ee3be00f157eba8444c1a223d275f2f1e7c9e6355c24e14ab2aed57ee1ba5f0a3367ca2ce629c83419ccadcf755fd6ab46227f5fa18c54e3477923756e1c1fd0db6d3386027bece756f5189073f275f673ba975e0042758074e50f0273ac9b8ad7b9eaee7f3b8c917e0be498a1c651e266fb2a227b743bf74926585db275f3989b27518b7d5b36d9b7f43d8b314bfa1b997bc994eb04d4d63ad8753fbf7701ee3a2be75de6c0567761a9c308edf39c1b6b9da3f3bd709b64fce25ccd5c48defe7f6e279415f63bcbcf314bc8341bc23382fb97d79ad136cefed5178d1f5440ce3eb9325b9f275ce83eb9c60fb92c7b1af07f27606afa7c8e3f6e5b7caf5ef83f7e52d7682ed4b4e9bb4cdcf77826df3f37ddb1dd92a8ded7e48633bbe9e2bdb311eb21d5f47b6fb31785f56b6e37130f6cf7d4eb2fe247d9c9fa5733c6eb5df4994fb16dc87e031b30b92f7e7d1bca34363b4791712a792525ae40db711741c69bc26d12ee5b232c709c6719e4b3ca091ffbba403b74bff90ce712c9c2b9d63391725753d89fa090e8ffd5c2cc99a2bddcfd7e4fc52c66012f897287a5c92a11e9f6af4608c791a3d2e0dd1e33249d63ce97ebe26ebc1f54f11057fbea2c77c0b3db85dba40a3c7e5217a5c21c95a20ddcfd7643d28fe27da078c7fa5a2c795167a705b60a1468fab42f4b85a92b550ba9fafc97ac414dc6b9c60fdce73a55cbfd3dc68a27e579fe7ebdc8e50ea28e760aa1dc4e9c4b835f727b36d07109f488464d05c677e2929edde53ad5208d6363a722cbfd109d6cf371246779f73b50541d9793739c1fa799b745ec63b18c4abce73655cc72c7502313f1295cecbb8346f9a5f5a49b33eacfb1292bb4f4a0bb9a383f745d8867974ff8fcaf578504ecaf57c3acff54326f52e714bc476e646f54384e305e9ecad8d229fa9398f8ea3156cf6d99b15ec9b7dec1ad49f8b1428d8c592d80d4a006cae776f51b06f21ec4584555cc12e91c43e66ab828df2bd645036ccff324a5acd7f9eebde27a56392fcff32ff415e79694d3f25c2b190e6e3393e25fce70e271957ee90ee15c7654eb0fc2ef3718fa1d8c8f57742c69d4e3086dfa9e0dea55cbf8b8ecb250ecbe9b842b1f90a5f76ad85bedc5adc76e1bcbf47c9fb52d27999e37d4eb0cc733a8f7c6bb892f7772b3cee261b509c8e940eda33910f7fa4e1c7cf4d0e5ee7e712d7774afca5eb797728cfdf1bccffc4f32f2ad715fc08fbfeed0a3ee7c34a27d8ae5ea9d84dd1277248f07ac20ef94a3edcaff8c2fd8aaf3c40d78b2af86583d713fa940bde97b7ca09b4cb8dcbe82a705d2da3aa5e0f2a7a3da8e8f55050af849d1f0ae2a6e4ef1d52fe8ad8c7ed7f100712ed8c5cc410f2f5bc871d7d0c59ed24cbef6ae95e717cc409c690477cdcfa3cbe1157643caad8ef510577ad729dd68ce4ad9138d09a95bcc79c60d97dcc975d77872fb71ecfdf73197d42f1e952d27999e3534e3086709a62487d9eafe4e71f57783c4e36a031f5c4badd743144e5c7cf4d0e5e4f9409bebe53e22f97f1d5caf3eb82f99f78fe45e5ba829f88210f2bf89c0f4f3ac118f2a46237459f440c794ab143bea487b8feb4e20b4f2bbeb2de09c610c62f1bbc9e1243e8bebc671cbb18f20cb88e6208ebf5aca2d7b38a5e1b827a25ecbc21889b92bfaba5fc7539d6e5f553ff450c21acbc8d8e3e866c7292e5779374af383ee70463c8733e6e13f6cfb822638b62bf2d0aeef3ca755a3794b759e2b0998e2f38c1b2fb822fbb218d7f361cef04cbe856c5a74b49e7658e2f3bc118c2698a218d790c8f9f7f51e1f1a2cfa331cd5b78ef49641243547efcdce4e0f54499e0eb3b25fe7219dfa43cbf2d98ff89e75f54ae2bf88918b251c1e77c78c909c6909714bb29fa2462c8cb8a1df2253dc4f5ed8a2f6c577ce51527184318bf6cf07a4a0ca1fbf25e75ec62c8abe03a8a21acd76b8a5eaf297aed08ea95b0f38e206e4afe6e92f257f4f3064bfe966d0c51c71e5ea7674b496951de1763acc8a141ffcfe3351507a4b4c0d8eef36e1a0bcace7b93eeff278897f7a682773088d794df51e1f2f596e28f51e9bc8cfbb6132cff9cce64cc1dc55ad67da793b2e62321f71d27107ff3764ae7c5f15dc56eeffa1827f2bb477105ef7dc5cfde57703f50aef31cf07b4ecab86302f323e5998f14cc0f83be9bf09bb79298de3d92ddf33ea6670e91d2ae5ec7ed0fdecf73dfe8fee3ab4bfca5e7bc37cbe4729aafe8f489a2d3278a4e6f077562fc088db7e5ed52fcb3321d99dfa7415ff0d2fc9c387ea6f8ef67be3e27b40ade97189ff99cf89495d2e2b89b707e53f8ed0ef2cc2f173cefdd57107c8675f074956368e5a09f7b69b94e519fffd0f2f94f2c9f7fdbf2f99d66cf27e4fd147e3fc75e248f7dd1f8f9b72d9fffc4f2f90f2d9f7f2ff83c97c1441dc7f941755c538aed56751cc7e62f93e5c0e118f515c9db23a5ddb2d9fc27e5be2f9d400cf0d2326f9e1be5fae063e9bc387e417ccb2bb85f04f1bdb22be647ca04711272141c7edef948c1a9a05cff40d2dd74ad3aafc1663b7ee304eba96f7c9b9db48ab8f3f8205fe779dc7f827879df2a78078378275709e2787345613ab0bc3d4a9eeef1f15a4c53eefb41c95365be3bef7bc5c7fe90ce8be3774a9e32cf25d27529ede92dee3fd409da81f17e54ecfa23f11e1fbc3fc1efa7a0cf314e0277afc2ff80f49ccc4fbdff503f1f5b709b4f5df3aee89dc049973f613ec6f3e5f27c3ccb93e7e3b9edc87db1fd4eb04df5b3745e1c7f516cfa8b8fd192e723e20ade6f4e303efda6e01e50ae33ae3c2fcaf74af3a279bf4be7c4f157c22922a505af4e8491aff0fa5391fba7c2eb2f27d886e138b45f9157a0c89ba6e0b0fde3491bf1b584dffd2cf95ddc7f5d39f1acb86faf851fd0bbdfde7ba55962440e93b0c230f8fec3c90f9a65c08fd6c845aa58e89809fe91ff127e4fc22fb4b0efd174a4f678a42ae5ffdfbe5fe45794d2e27a3527e153db69fd7aa4869feecc6df89a8ee78fade9fde53631cc23522b2837522789df8f6246a4b6740fb77d8f093ea77b3735c2ef44efc7f213b63ccbe7dc86df2be5bcabe784db76b0ff5cdb6594e675ddff90ecbfa5b4b82fe6736ccbfddd7ac1639eb43e21c2ef4fff14bc2742ef89c728b6f0fb7e5e3ae28755c6f07eb3fc02e97706bac5a284ff9d9416471e6bd923a5856ebb7cdddaf19a94750672c491de65cbaf24a55ddc76cd08b73bb8bfb29416c798a47f8c30ce270cae077b48d7a57c8ac532e31c5aa6e8ddd508bd93ad2d338d1d6d99695fdd3fdf3e2c7e7520bd2936469ad091dea38d344dca9b94c97b9861ba9c40c76621ba9ce8a7372cc9008fde818d9c1c82d7426f9b0eadfcf31d7a6339117a1737d29c8e2d93f85bd607af719b24466380f9874b69575e47f6637adf3146ef4ee6735b96daf59156c1eb89b10bbededa09f633dbf87c7af3f5b64ec6712ad29e8e1d42ec476b8963bc4645e6d251ba47c7b553906b28177aef30725a0897cec4a540c345be47c7e574032ef45e4fa47b08971e7abfeab4c43fdf69159613e94ad7da25f588f494ce89a3667f82482f83bc25bf8ef4c13af0f8688ce70f7e96d2ae2e9d37d27df47e504c7a97dafb2dee5946f750dd9e2807c57d4c5e4b94b89f30237d7d2e4be766a00bbdd713e91f921f67f8e936b40ec68bb9aebc536bfbe74fa5bc4cd423359df098ccb6e1f9d99fa5b4c09d4bb834af1ce371dfefa434e3083b1c41e9b119ca0f8bb1ecd3675a60d0186564803d8f5829d27d9f94766d741a8fafd37b4491b3e939dd3e49ba7232888ef43e526470f2b9cf78de78081d8786f8c630e255da49891b89bd57783da1123778ef15ef59dd755a2f19190eae2fa3eb23c0f5e54e309e8f24796542b84e4ec3b54c1aaea3c075e63a3a43ae6348de21215c7702acf9d2b3615cc782ebcc755c865c69ac24563684eb8b006bbef46c18d70969b84e04d755aed49f8e95c35c2393d2702d9786eb39e03a739d921957b52d80f23ba52d406dc058f9541d2353a57b7458d3147b897791e53610bd93ec50db2c56c109b4b5623c5fac6bcfcd54f4e5187768926764b6a3b701ed5b17abe404fb52dc07a1f9a8fc23a5b4786e5692c7e690f797d5d81de339887d52da8dbb3d38eed11aec08afd1cf34eed23e77117a072b3227f9dc67dcde994bc78be8a86b5f30cfc3149e87f93c7b72fd7e319d3f5cf2057a16c611be3e5f7a56779dfdfd12707d195d9f07aeabfe1e962fc348afa5be1d7aee226c7a7f247219ce8708e91161be9793af1c95815c1ebb91def9c8b82ee776e75dc96723574ad70a14597769aed1b908af41ae4adc0be9fc554eb07cf29e76dcc7db96b407eff513a17735780d8af17e403d839c6255829cbcb49b577d798c9eda8531797c8dc68562473941ff3dca7fb6f74fc1fb12f7174a189b14ff51f67f8a1ded0463058da1c5aa2631bcdf2cb740fa2d8e4748e78ef079f55900785593786d06bca8af11aba1f0a2f1d75875495ef5100edcff199b6ad718c73fa90d1ca3fe531fe6c3f9b748ba2ee75f4d907ff2f86b1989939c7fc4b1dff9415fe8d74e4aebec2de4ed0f62276448799eb67e40795ecb09d60f349ec9f3ffec87893e1571ea77b22287f767046da7c87512bf78d20e29cfafcbe0f974e590f3a5b6935aae784fd47d52dad5a77fa7e07d89fbeb3a99972b1eefdc2ba5c5511a8b8bd593e41648bfc5b18e74ae0ef1da0578497b91a62d570d155e34be1793f6488c35c01ccee0f16f2e57925dbdf16eb9ccd0be82f955a5b4c0e8223d2bdd9718b7e4fb784e7d8584afca92f3d5b4ff48e30a91ebb3c0e03d4bee4d3e9bd8a3b89784375aba4fe8c6fbdbfe2da55d5dcfe4fd9fcf96ce1728f7707b4abc77e7969b71eb82d8b2dc88ba0fa969fdc53c9a483c9af83c0670cce376d6a9d275694e33c663b9373959e75184e74d682f545d3b2fc67bf4f27c6f6fe9bc38d2bea5bc76d04bbb7a9cddca09f872602f5a1e7fa17d71f32946aafb0af375d37d8563dcb7d82ba5c551daebd5fbedf23c6bbcafef59f382faa58cedf07821ed0d1ba37d2ef3ab4969a137ad298fd1be92f9d5a5b43836a7f335a4b4841f3b99aed794d22eeec0c5cafdbc3f11eda793cff363b7d271a9745d3c477b51f23c5d8cc6bfb5edd5dbfcf4fc65213e24db49e0b520fcda525ab24784de718bdc112277999376dc30b29c8e7786e0dc95017f2e031cffee76701968e9e8cb404b3ab6728265a095affbe0ad743fc7125d1968ed04c7205bd3b33cef573f788c497b3e46ee71b4e520c2f190c7eef74a6971a47984445ba4ad138867b1f6743d26a5359c222ba5e734e534721fe047ef9ec53a29fca86d10eb98d43146630fb10ed2399ad388f17cc01e292d7876d7df975f47b96f56f0be9432afb60365dbf3fb703c4ec16d62ae13747b5387f921bdb7167908fb61621c9edb8cb4bf63a2cd78aaafd79056fe7343062bcf4d4ef3dc3ccc33c2fb1df3bc92e1dc6164351d1fc1fa45d638da7997a165fcf34343c64f228ffaf72c5c9a01177a872df25888adb99fc07b5ffe2da505a715c489d701a87943cf25e60af9b9af4374785cafff30d27f58d8f85157e928f17568cfc6e1bc0e4ef5e92e4ed2a7f97d36b56fc3ed7cda232f515ea90e8af13e91c74869713c3d891debee04eb432ea3bc27620d29cdcf0a0ebc2f5f2d292d8e72bd2caed7559e93f6a04bd1591adf883c29e9ecda78f8b20cecf494132cfb4f07f320b23ee94fcf536c8af0bb6999ccefd1fb67910dd83f231be919b617cf1ffe2da5c57d9b92cf8e189f816cea63453687c8dee2a71f6c45697a9f2bd65be1d0dbf7bd113b483eb55d232f68fc3ce4f99121fb8e7bfab11d387f5e7402b6d1ed191fd96a901fdbe8f852884d5ed6e824b8d3fb2f237785c851c7b3fa38c1be5d1f1f6b14af85e03df8b8ed5235c9a7f53cff387abc82fd0a61f555b0fbfad8a379cdf6ab74a4f79712fd42dd3a2bc6eca760f623beecfb3b88cbdd217c39d6bcaec8cf44b745e13cf8fec81b6978a4f3037a3729c2e3983a3fe07d7ab9cfd15ff1699ee7de997c766b6106b2f9fd94f743647fa0f7c131ddfdf3638687c8e940b6e3b5428c41ef2945a4bd2923bcd7c9c7490e936b67a0039581c8a7213a7ca6d7612cbdff3936444ee4733af2de579aef4944f87d9a4ccafd1774fc12f34dc45fde47947f0bce54d747bed2e8c4f7c9be41cf8d2b11c24d1d17e07d480f486981b134789f23d75f5f2b36385b7946adfba475046add176abf6fe8f86d487ed39e8319b5db389e7c1f921fdcaf3acb09f6ab68dde6781e83e1718974eb2c5836f56d223f61d991bd7adf1d4ff5dff8dd584e84df4390fa39917dfe735b43da8c097e9497115a531f61bd073ac17eff40cc3fa50d4b7bc326dab0e4271342d63f3934de3e81da0813dec5f7467ed5dbcbfb9a9d7b7e62d83ef8aa8f0e96ecf69be2a35cb77019a13d6413ed585a5f121be204dbb143e83828891de3752b6cdf614ea07d1aa3f528fc5d9818ad1d498ce70cf7759cc46b3f7ff775bd91c71fffa0ebac9f4677e6c032223f2b1c683d4aa2ad3d828e239d605b7b645017d4d64ec853dada913f7dee4ff2ba2b7a1f21a3d8caebc4796f2b69dd318fb145788db3a85f16a5c714cb7dbde7e8bd28f93b31117ea7ead9543929df894927274276a1b536893af39f54b9b1511ab907b3941b95f0c531e4db39e7b423dcfe1837cac7581037466b84f2eb4969715db7c680e3ed1827186fc7d091e7a9fe96d2aebc2924331a77f475237a2eac9dc1fc790f639a17e275b94eeb641e78bfc5bde3e9de2a525a5ce7b130deafb8a49476794c1f4cfcf32599225d3469a3b91be91cbdef139b24f9c5241f672ae78f1acfa43dfaa3058e369e45e91daf18eff5bb574a8ba3f42d82d8d4100ed4f68df21e70ad933a4c2b0af8cd96f89500fcd866e72afc78ae749ac4659acf85e5454b85e419ef015d454acb793643c9b319c13c4bd1e53c035b9fafe8c2f3ccb39218de6fa1cb87d8ae908bb4af6c5abbce51b8d0deb0b10b252e172afeaab36bdb0cedca7b6a1f2ea505f68e208e8c1d2d2d5de37365a4fb04ce64452e8d536ad74e71ec6b2ff1a7f112471a374eb48fa748b618e3f39dc163613c1e7a4e52ce0c5e5fb153b9c6587c8e6508fbff1594e99c26f1e0b1ffd335e7ba6ace49edd1e8213ea73378bcf27a9fffcc42fffccca68a5ca98d1fa57d04bc3a5cadefba4bf7f15a42aab3a3d4e64ac4335e1be7cabb98627d94f79891c6d8a215fd7bb6cda5742527d87655db96fc6d929252dad56d96b2fe581b0f796d9c5a2ea81e86f150fac6496c8624578e41bab829782d235955f03de7c600772956a66d9ba2587991136c9b5e44c7b9920f85c4b5b463bb28ae5da2c8e53956694fe818adf18b725c9845cfd497d2ae6d66ff05784a312f30afe2facfb98315ff99acc828199491b83f2c0f94b99b288f2f86ccdd4479bc99c664a34726ef991ff29e51a2ed466bbaa285c441d7ffe23ea9fc7d0f5d5ca8ea2463a0c0d2cdc5acd36085f1a339f868357b7e0ecfbbcd53ce496de56875e99e5ce940fd9a68cd101db8bd7aa9136caf5eeafbcff9dc16aae53f77feb20ce4529b345a2747b693ec94588744fb8e27d653cdf7f95eb024785fe2fe0512e6262758f6d5f554bc67f85e292d8e972731bcdf2cb740fa2d8e9749e72ef3795dd810f0ba52e2b519f0e2f5545729bc686ff0d84249de42cc610e8dc1468f015ca4fdc7a375f55ca2dc075aa470e131e76b247d54fc6b257cf51d5dc6e71879bd824fdf4d8e5d27e9c5eb66a5b1d8187d77413b166b587e1c9ac78ad1371512f3ea8bc99ef4fedb9c8d0afe5369f01997f738a77e19ef231593d63079f7f03971a43dc8790f8318ed413eb7bacf656ebbe073bc9f147cee7c43ee6333bc2f2c3e709f86d7fed17a897c392db81df075baa892f25cc3f0e72eea1ed4c9eb6f86704de0d27bc7b19b155cda77fca29559e2d277e5a3b4462dc67b8f3794d22efec5dcb71c6b88df54c1bf55c1bf95f0479be167aa67685e1faae4f56d8a6d6fa323ed9d9e18df58ea73bea49e82c33addaee0dc9e0687e67ab8cdefb5d9c36ccbf2e85bdc31daff38bf919416cfd2f8726c99136c7f2d23b96f2978c76788b75cc15beee3cdabaee09d9021de9d0ade9d84374dc16b9621de5d0ade5d84b73d3b3bc756105e6385cf8941f9b17be8be26525a60733bf86e27d807e5f827ad9d8dd13c716c25ddfb8ff42c9f17c7fbe8fa0129edea78596d05879fe3bdb59b4a6971e4bdc48f93d22ecea5622ec08d6f97eef28f09dc7b95e769eff4c4f8e3dd213a0bbc560a0eef757ebc9416cf2f51f8950cf2bb8ce7b733cccb04de2ac9d6f74ae7c491f7273f414a0b59bb7deef34b98c98cc97d70811bb6ff43489c8af1dee2274ae908f56bc47df4dd3e1eeb0f1dcbbf457a466ddb4adf1e4cf45722247335c92825a563fe6b5dc2360b9a059f8bd1dee6dc7e883da2f83ce3152878bcfe5ba7833a2eb146f18d3584b19838ad559e9b9ce639a5bf9de88f3e9ab44b4a7fb479105bbb96906db23689133dc9bfa7e52eba87c73d9e90fcf3099fd7e5dc0ee27d1e22d275a14773292d8e8f4b18b49ffae534ee17a37749127d968ed279be5fc67c9c8e8f4998b457fc15ed140cdecbfc58292d8ebc97f949525af605da8b9ef7134de0af52f065fbd1fa9a680be99a38f2bee615a5b4c0d0cc87f0334e27c9ef796d1aed9f9e68573fed735ad834785ff414094bdcffa3729dd723ffa49c6f45cfd17ee689be048d8fc6e479a9679c14fd13fa6e50786ef0795ec97ec5bec7763956797ea3727ebd745ec24fe4cd86a01da2ade9d846c1dda4e4c3a60cf2a1b3940f3c4ed8d6d1db97aff3bae90cd63844c916d10e980bcf895fd5292827110b9e4b724c3b4eb745c95bee2b535f3a314eb7999eef93c48ef27bdc616b94556ecf3b304e25e2be340e9c715dc0f5e30b4e701ce605df5657f757f0ba69f0d28da9f33a761e73e2f5e619cc4f473bd391f7aed18de90c25aeabfdf3d7f07a05d5865bb10da3a765902799ac7f9065a4f3a197141fa2758db16d8a0f6da3e38b4e4a194ac8dd2ec94d37b6fdaa2297d61ac65e51e4f2bac29725df259b474f97ae8923efbb5e4f4a8bfb780df20e92f98394669dc4f175e579fec6b72ea6b04cde73fc64292d8ebca7f9df52daf58f450794e7793fdf16521a3d2f8e6f24ed10a37dd0af3d398899586f42fba627c6de79cda3f4ee6c94d775900da2d27c50e29cb49e96654479ddb458474b7d81c4f88854b6a3bcf698dfb3df967c2ef17e1c977f7ef7ff6729edea77dd60ba4f5defc6fba99794d2e27e348ffeaee49ff2da3597cb75721c11182b2c30d80efda4b212165f68ce201ab6875358dce43dbc7f96d2ae0e8bb9aee57de2ab4b6971e4fde16b48698ee11c67c5755e034475d7f56ba5ebe2a85b7fef72bf7e2be9a39b6b6419bcffb36e9e85bff3ce6b8a346be913b64e13ffa3bcf696e33de9b298f399df8dfbd049896fd133a47b746d045e77c9717c80935c0be51e6f582d711432688ffd44d9fe88b8eca1fb1d893f5f2f08de7b83f22e77c23fa56fc407de67007e193d2b282bc5c612ffe8c00cf2ec6c49f7347eaff3e928ad2f8b0e76d29705398e0da173217567c20fe576d050ff9e4cf6274bbce3fe89e4235c4f7d4ab6de27a5dd7cbaa95ef0bec4fd9f49189b947c52e764789df25e292d8e9f4b7ef1b924b740fa2d8ebba473bb88d716c0eb0b8957ba3999af145e5fd1f14b49de9798c3addca755c702684d72a28ff8b57fff92eac1fb63df38c9be859b874b788ce073e93a9a8ff94ef28174f33ddf2b7ad29ae3d81e49a73d8a0e3f283afce0eb707327c0e747033e7b153e7cfc49e243cfc6be0ddae8662eef9f4bd7f9996fa473e2b8cf098ca124b8fe223d4363a2515aeb1afb55e146dfb28eed979ed94fb6f89038fd24c9d3dd2b8ef21ee0aaed0e48b61b0e6cc7eb5eff50f8d17edc3169ffee18edd51d93f633f77ebb9c6f592af101f724fcfa4c3affa774cf9f8443e39fb77671f43afd25e93412e844eb4963bc6ff05e292d8e7f4b72ffc65c127c79af0929be79bfc53d3ccea19ba7e6bd0ee5ef40ebe2a8fa6e1397f34229edca5aca632fdc3e1a43cf334fded3ec5b43f9eb32bc2fac0ee036d74127d8e63ae873bf4db1a53cdf1a1debe7b9babefbb658905fda395aa52feb8d5f49e94cfbc951de536fbfa17cce175a1f1b9d40727575b569fd4feb0ca3934230953d48c5b261b91fe0a55d9bdede298483d26e8a47250eb40631654d19adf58bc79c40798b53fec5e3c4e348292d8e7949ec38c98f47241bab5ca439c7e814c085d6f0c60b142e2ca7a82493e64ae3f921328b25afa9e3125c57c4a57d613dfe8207cda1c54b2b7950dacf83657b24d9e2a8ec8d1757f3b20cc93e28a505ceeee0fdbc5f589cf695cc3f454a4bf747a7079f8bd31e75f92d7d7f88f378d00c45c7b8843133e4daac906bb343ae9d0baeb9c73b9b2a36a6fdf9e265151b97f575e5fb53f254da7331ca6bfa543fa23d03e3872a7e447390f1c395fca2757df14a922ff01a05da4f305e4ee159cee7b97c17dd372755f73beb295873295d41c1aa403a737fe3228025d931ca6b1269bd22b71fe3b4a69ac77be2fcae9d66bc27ca6bc12e95e48923ef07fc839406180ee7abb4df27db464c21cb79ce759dd6969cf705d26f81d12e58d6a297297ed34a4a735929907e0b8c0f33f0a5346bd1a12f49f399f10a800397f902e9b7cb6b05b7ed691e201147aa48694d1c49d88df590f606e618b582f7936a2df9a08c4d3ec9fd5e6dac13c752928de62b79c16bf05c7f7861b174bf904f31327a395de7f97b6a6bc4798df3cf52da7dee9e2e419cbba98d16a5357b51dedf51e7cfbcf65f5e8bbf30583ee47797788e4c7e77c9217fcaf8dd25dad7ea6e1a038d5e15c4495947eb1eef219fd6b56974730eda76ced54eb29d2330d74b761347da3392c763e2343674cf0289379f2f50ee619b5f93461764136e4bd11ac2947227edb9986ebfc138ef5fb9574a8be3914e208647af95ce8b63215daf28a505aeaeed45f38bf1aa4e60bcc34bbbf658d91be871b494478c512d792eaaee35c83185d63ec66b28bad19865bcba9427b45e39ba58ba268dd725aedfa09795e05ad3c0e6b5155eb48e25aeecf118e731d4f2749e624d94f68f8bd21a47edf8388dbbc5eb287e5ac7b7f97dbcbe76a874be40b987d68045797c8cd7c1dd9c94b721e4fddc849f52998b4b7b2926f6d0e5f82deddf18bd55b11fdd13a57e745cd9bf314ef3c4f17a920e5c3fd7577caebeafdbfdab018f06063c1a293c68ed57bca1c483ec1ca5757bf1c6ca338d536d13a5b579d13ba46be2487bf825ca1cefe11756e678ffbd7d52dad5ffc1ea8e5effe39cd43277bc814d94bdf3e25407c7a5bdf3e2b4ae2aba4cba269739bebe5c91c53edd5cf1e9e6be4eabb84f3c543a5f20fd16c713a573b4e7de2ac6a7be5ffc24c9069de9dcc9a97689de293d278ff1f3f5bb240cddf5158a7e7c9ed6abc54f516cc9fd9516920e2db05e9cc7d17b089fd7a71a965f6730e1f1bdf582c778cba4ec74df928ab75674a298166f25f16f45cf486b0774fce26d08eb3b292d8e6de9fc1e29edf27f88de297ba855d01e19c911475ad7c1df8df2d2027732e12e00f75796d219c80b8da5b43e30ca6bab695e33cee33b15a5b4b81ef2ce75bc83136c2376f0f57998fa11d1fbe8787f0856d89af761493da30fd039ce6f1e7faa22a5856d34ef6c4679cd15afedd27cff264afbdf85edd9147dc84f27de2994dfb7141ca81c27dae89d7c7b3ccaed53652e39de59b9bfb37fff6a6e139f2d9d2f50eee1fa4737ef4beb42d6f0189bb2c630aeecbf17a7fdf71e619ea707ef4bc449be8fe25c94d76c3217dd58a96baf35dcce64bf97de4f8dd3be748f505f97e704e3cabe7789fb780e566d3f496d6f758f9828afd34473ba3247d5565d145b7521db3654f84aefbe26ee41ed6b99ab325f1a5d13cc57ddfc73f451ba87cb68c83e0c6b68ff2ff685e8da0cf20c954bcdfbc5d1c77c7c7eef967def518e01b4d6324aeb38b5fd429ab3ce64bfd428adbf8cf39e7f6da4b490bbdec77a94f5a57599d1a7b17ce318cadff3b83c04936324ef59f8b3947679aee5716c837df9d8b66b97f9b2d6ae0d7986e57757e4f37e87b4eedae1fd64b88ddd93aed797d2aeccc7687e24de2bf87cbc5710073e4f7380d16795bca63eed131ca3d5b222afed4bb3ae2ccefb59ed95d2e248eb30787d579cd6eac4e598a9967bda0b3051ee692fc0279a4acf8a23adc3c86f2ba5050ef57de2bc975e35292de3c8f71704cfc5a57dafa21b807da4799374ebdfe2672bf6e1fa85f7683a26285f5e97e5718904d765c5a93dad5d97d53598af715ecf5f5d4acbb26b0431d9bea6fb6fc6bb4bf95520fd165c68fef309b64f3fe9ba5cd7d0fdebb8fdb0d17feec9907d201375661f058bf27b1d8d2dade3b2dc55ba5ea0dcbb10cb896e0afaa976bd268f47c9fe1d56aed4faf239d23783f534f1c164ff76525a5c277f890f09e69f9716d7a98f16a7bdb012f18262dc934b251c093fbad9e7f654d83c1bc7e92da407d705cf1b3cfb02a54724ed94383752b2abc22f347e53ac7b6a30f19816f28c9a5f527c485bce473ac1723e928e239c6039a7f50971a99d9d2277b49379fc1dabc8a5364c7c8c22770c1d4725b1e3bc0f5275292d8ebc97520d292dc58138ef19534b4a0b4e5c9fd11a9138efa3d45e394feb19e293141c9a0be63d25e2343fcbfba87969372fd787bcff94c0a6b9eaf8398a0c9edba5f9d6fc0e525a60d23b5bf1a98a6cdaef637d48fd1fe575b45b1559cc85f73f292da50596a62dc37a38ec2fd3e9d98e52dae5f36c2c28c361bfe3fd903886f3f8cc36ba4efba5e47792eee7f3e2a8ece711a7bd369ea1398b28ad1f8fbe8c75488cdb4b65374a6d63f83d60f7dab3dc679990fa7cc02e4af9e1f59bec77e9d66f86c60db54c9eeb641e0b947d55e2b40e247e9e132c933cdf2bed5312bfd00996499e6bbdc0099649fe061c97c9398a9fcf09e6419ce6a8a3bcee9efb31a6ed705abf9ff5b814b74de63ac136f25cdfbf9ee3f54714b79f633fa175bb71690f9a28bdb3be91fb556a9e5d24ddfb9a3ecfa23be8de4b953ce3f9df7952de507f397e4952e74dd581eccb24d969f62e8a2f5064f39894b4ef467cbe229b7f0b1b71bf86ecb1690be07485c4e975c089de1d882f543851fb287ea5e2c334f718bf3c6993e74e06f2af7232afd7ae51e4d3bc5bfc6a45fed58a7ca1c39b3e8f67e74ad7d8f7d98704068d1347dff2efe7fe51fc62c9e758271abb8bbe1dbc37a37684e487296b6ee83d84cdbccfc1ce0cf0b92cf138d440099fd7a92c7252e263a495748f263eaadf228fbee373e1effc25dab892bc507e347e18bf96eccd6319bc4ee0bae0f9f8b5d27971a4fd5178efb938ed85b6856c13a578137d4f91477b9924c65579de5f3766f080c489fd87de9bc8f65b4f11fa468c4363dd3c0798385f21783efa819d3c87e7142b4af9c279257f8393efe3fe36efcd72b89476edfbfc2a05a39206b7b2642f5e4b92adbdd6a7ca897e648719e5bd5f659e9fd8613afc8d01c9ce515e3b7098746e97a51c2ed752de453fb5c4bc8f8e8512e6678a5ea636a67ebf237d0b32cadf1f95d63344797c5ffafe6294d61a26c6424d7d86fbe2cd929889784bfb0025e64f691fa0ad2ba567c4f99b529f35fd567174b765be50ffc3e1f61eeff7534a4abbdcb7858d9bca186cdf2f9c405937e6c5ed43da232e7eb3c28bda1adbb68460f137dea4f51f015ce6faa525d7937c2e2f713b88de4f7178cd2aed459458bbc77b13f17bb83ccecaf3e47ba4b48b2bba3801bca5923efc7d0eea8745bf56fc86afc7250cddf5fca05fa5d557f0b82dc9c3fb2db876f2edf632bffff178c8bd4b157bd1b791e2b72bf6e27d88f2829ce37728f6bac3c7ddde50c15b6661afc77260af96c46b2ec9fc8630aa4979a2b60bc2f078fe7eb9138c33cb7d39aff01a1c9ad789df25e94fcf46794e6d89a21f5d77ae929ed55da7766ff43bfdf528bfcb44f6e1f7951c691d8243f688dfa9e841fb26bd42fb9fbcc271536793b9a9b851f61b8dde89ef7f23bde73be17a2f08d7db5946d77f04d739cf387ed331be4293477ba56b3a1bef4b9307d4b74df171bebedfc9dc87b9df7cb7ff0c7f3f33faabe293f738095f56f78489f31e4b5d94f32b93ba7bcf0bdcdfe8f84b907be2fa812066caf5df83bac5797dcc7d4e206624783f2071b8cff7bf1df59467798fa7d37dfd76b422597f4ad70b243c598f3f149e0f287adc0fae2b7a24d642ac222e5d95f30f6afc8839fce5e8fde0401033e5baca81e75f1f5238f0f9874338fc9d86c3431972e031ddd5c4a19b72fe91100effa4e1b03a430e3c16ba46e1c0e71f0de170300d87351972e0f1e3b50a073eff18e6208a78280775af1ac481fbcfbce75277e5fc13211c2269383c9e21075e8fb34ee1c0e79f0ce1104dc3615d861c789dfc530a073eff740887bc341c9eca9003cf49f23e495d94f3cf847088a5e1b03e430e3ccff9acc281cf6f08e1104fc3e1d90c39f0b8f446e2d04339bf2984437e1a0e1b33e4c0f3d2cf291cf8fce6100e45d270782e430e2433be45c90b3eff7c0887a269386cc99003ad1789bfa070e0f32f86702848c3e1850c39507f24be55e1c0e7b78570289686c3d60c39f07820ed8594880f7cfee5100ec5d3707829430e3ce6bf9d38f454cebf12c2a1441a0edb33e440fbcfc4696fa644b9e0f3af8570289986c3ab1972e0f99c1d0a073eff7a0887526938ecc89003af45e1fd93ba28e7df0ce1503a0d873732e4c0eba2de5238f0f9b743389449c3e1ad0c39f0bce94e85039f7f2784c3216938eccc9003af5d7957f1073eff5e0887b26938bc9b21075e1ff5bec281cf7f10c2a15c1a0eef67c881d7567fa8e4059fff288443f9341c3ecc9003adf38a7facd881cf7f12c2a1421a0e1f67c881dfa7daa570e0f39f867038340d875d1972184cf77fa6e4059fff3c8443c5341c3ecb90c310ba7fb7c281cf7f11c2a1521a0ebb33e4c0efe67ca970e0f35f8570a89c86c3971972081b1b09b996c77b67f03a749ea771dbb9adaadb613bb48e274f9e63335c4fe1d4248c2ad963e41d216165322f5b9b9e3bd242e65112562632c9fe798516b6e2f91d1e4fdb27a5ddbed36783494655ca6b5a4fa69b4f880c9630d5f9a36f14fc6f087f23e1d3d85ba42cc60f9dbba2b5398ef44e7cf0fe78c41b1fefe48c70cbf964a781f711c83a8e681df574da3af5dd96da70679233d1fdd5d63d4e70fffa293ecf4fd6730ad33ce3f5bdbdaf68ba7f6a7962a739b3dd4747381111c37ab989a9eea911eefd02a3b3fbcc34a789d3d8c39ee05e1be6e24c71c63b63dc7850395242e2ddd6fb7f887bc7180fb4577e8a882753440872e3ddbf23dcc7a6b90f0a9253ddf31ddd3313dd7f53dc73c3dc7417f7289e1aec34721b09031494beaed8f1ce7437d5dbfd7fb28737d8a59d7a673a9506ba67d5677aba98133d7613dc336cd0c96e7abcc7b097f7ff0c8fe9088f7d67f7dc34f79cd06694d3c63dcef2a4a5ea3ec5fdad93d99b4ca6e738d0e87c245254caa676ae36827d03cf4fff7f8efc2f72c41b7e12e543fc8935f066c7ae48c989ff6f433fc88841aace84d1c833592470aeb1d3c09b3fec996241731d5335d4fbb76fefe39da6a1bae82d23b2fb704f83640e17bde1961e3b4bb79b120faad6c46920bc2452258d6a61861578b52387a62084ab108fc71a0aa2aaf9233af37b9fbfedf51f9adfbf6f8c779f7906e47b955f3003bcada77abb3f66b9ffc67b2266bbf0c39cee6e6a88fb5b504dc99d8602aa8867e0d4ea331d4964e2a8cec4de8ac1deff130f1f9026bae98d5c34a145d2c80dbcf64fa5105744b2bcc6521eb598b8b07cf0d079dd3ab7b8bef2bba7373de1a486272e8febf3a798973fd948453994a7cba162ff7521481ff5c3f2a77842af64fe883f7a1b96003e9e8e03b2604c67c1e2ff1b1f17dcb3f371313c7aac6243bdfd4a85fa60180364c1b8ce82de5e677dfe430b7673198ea5b66276362c9db10dcb7836ac9ca25d261c9015f335566c58827a6b29b40a145a8211002e8280cb5a021745c0e52c810b740e55f2bf2e92e2da240f65887bafb93b8951d1ba6a58d3fb53055026d35340de544c9737c284876a59a9995301674e71845cd116b90442ae648b5c52e750de8ad2ffbea59e5d1d29624dc58cebc8c39cb086b6690d594a673d6f0cf2ac7fd57aa90348fcab8dfbec68d70e33bc5181e9eef3ba01a7708b1e9e71b4afe259b3d0d10d83993142162eadf37c61f62350b6abce7f1876fe323a7021f1c84cc274150c7c08023eca12b82c0a0485b681a01c42aeaa418e982097d7159232ff9b10d3c8ed4a98871831ba5c2ec5d7f445a25a688041f291fb57d0e58ab05d753d25355baae16c3954972d9ee3f6f80fb3a58d9b12bfcd33a586cbf290cc1a1135bd3ca990a25698709423155140aa958380540915c2dab6c5bb3242ae638b7c98ce8fbc3835e63fa9037b39ed9cd35c8a49b449de18b89033d51ba11de3d63123dcb3f2eff62eea142fbb93b5112385fb9d78cdf5084d3e3b3024d4f5dcef58c7f9173923773d1ce57b3ddb7caf82908fb5453e42e7515efdf4df0e5ffaa382e3b38a4e629386a3326e953670d0e864380794eb47eaf24658b021a2a5664f039c3d4721f04639002f445ed5d8d6abaa22e426b6c847ebfcd56bf59cf91f46c0362ef9a91ea67fbe8fe7256aa4e0bbc2bdb7694223695cd86b8b1c9912c5cce48a8d716b45c4d8ec74efbe88e720fa5271bc572a6c25a232524de70f22d7bc3d7615e58fd3b9f1f1d825aa23f0663900af813cf9445b4fae89909bdb22d742c827d922d7d6218b76ac782f31b581a822d7c4c87574c8a2a9275644d936f58ed1818b2ea2d89ed8a68b581701b7b404ae87805b59021f8b805b5b02d747c06d2c811ba0e2dd3613e090a2dd1001b7b3046e84ca5f7bdbf2d7182177b0456e82903b6a908d86249a22e44eb6c8c721e4ceb6d6385e872c9a5de29db2d466d7b25626cdae1310f8695af0b92d4dc09b219b74b1b5c9893a6411fbc5bb5d56b1bfb90e590cbc8837b6ec065e4e42e6e866eb7c27eb9045bceb9e49f40889772d10700f4be053902d7adaba464b84dccb16b9152a2bbdb56565a351416c8dfcae8fb5dfb541d07dada1db22e87ed6d0ed5011ef6f5bc4dbeb90455d2b5eb2b16da37740e067e600bc23021f9003f04e08fcac1c807746e00373007eaa0e5cb4d7c50ecfb6edf5d310f8a01c807741e08373007eba0e5c44c2218e6524ec8a9087da2277d3218b183bccb11f63ea8ec087e700bc07b2c9088d4d8c6af79e3a641109473a9691b017e23cca361f7b6b901b78334fc2b3ff574363f272d1d69e84ec86c9c4db23994d948ba990da91ea4ebaa1accc99a161ad3ec8b9c7e6c0b9fb22f0713900ef87bc70bcad17f647c8136c91cf40c8136d91cf44c8936c9107a04c9c9c834c3c0bd13ec796f640843cc516f96c843cd516791032f5b41c987a30a23ddd96f610843cc3167928429e698b3c0c21cfb2451e8e3271760e327104023f3707e02311f87939001fa503176d56b1b7ba6d9b75b40e5cacdcbc20717312fca0fb2705bc04061f83985fa8615ecc90f958e48773347e68d4fe1b876c32576393b93ada2136198fc02fd2802f32049f80c02fd6802f33049fa8016fe0add211d4ffcb3598fa177f3bba9a0969f20af8d4551ffce6674ff738d26331c27bb36944062f0c8737522f49d8479acbf5161ab57774eb36ff575acc73d914f3860af54de84b1dd184febf8b336a844fd239bc78dbe03247f3569be8c30d72fc058242fe44ef52771745e4a6383fc63da6948922b84c4c46116ebe26c2450c23dc39ba02e7ad2f9bf83f2d70edddffc56bd353bddf33287b7b7bb2932ff8d91425b1d3a9d9d2afcb3da76d9c81d3e6823d72c72928fe5ea189bfd52366f1772a02bf5203dec9107c1a2a48e2e31769271e424ac874047c95ae84c6bcfbcccbe10c649bab35b6e96f689b993a70d1d2101fe6b06af1ce42b41769682f34a43d1b59fe5a9de54545decefd318de2f708d7f10b9d1ede4551400bbd77ee87b8bf467a85748251fe9c8b14bd4ea3e892a899a2e72145afd7295aa055d44499f391bcc53a7922d9dd8d1e7e4c319173019273834e4eb1849c765e968d739f99e4669a89c40b91c41b91250b69242d3bb79883dce2268d5bec36748bb93a703197ba2493901632977a11b2d2cd3a2bf98d8e412ee4202a42fea8e3202f3dc4fd35c4d06a1723f9b7e8e49723f90dbdffdb7af5d734f7f2186f2b93c00bfd061c2e411c6ed571a812e0900917717d8a574a4d58cdd3b112916da993da366f28dae6e27b00d41856e55c8ae55c8ab4bf5da77d794ffb6eae8eace15047ec0c34ce39939ac7ed134d52136d2f432cee40a555f6bfd6eebf5146f2e62379cb74f2ca4a792e5e4b9be8c6d9f1969ebf0031588eedee33189168e975a5ce4af62c2e472cee4cc722d5fed9b3b802b1b84bc7e2d04009145db051b46591cf65b8fb37db5870252a752b50a9bb3bab52b710697c0f8e7be1a56e967143f32ac4e1deb032d0288765e06ac4606598f735ca7119b806b1b82f1d8b5c96814588c5fd3a169543cb404feff9499e8db22d09d7eaf888f6cc034e6a7b6651dcac3d739d0e5c8c35886f27d88e355c8fc01fd4803b86e08b51363d840bae1c30938dcbec5de506c4e1611d87320157e9e535446c1aba3722c758ad718c7af9668e7113cabb477290774b10f89a1c80dfac031735c7a30ea839c47721cc6b8e5b50e63fa6cb7cb9ae9c917829506d9d66e786b722268fa72b0aec867db58c4c382c45567f02597d5d5656bf0de9faa44e577f8997a8af7b7b761535755baa35473966834eb76b2437f0de9ffd2fb70392b73ccb6e3ba0a73419d2c07bd33475e39f4ca489af80d0468b8e53048cff8b4f6de87616ca44001a18bd03b9c2333a57a8e0e81aee9dbde693d8932efbe2b70cf17856c7a3b4c46388d754996a217b3992bd4127bba413d65831917ba74eaea87b363aa975cf96226675cf5d3a7031e4b1c9b15c2bb702213fa7414e9ddf0d41be1b216fb6e57c0f32f5168da9ff3234f5bd3a70e126cf3b96c3d02b11ed1734b40b8b9ad1be0fd17ed196f6fd88f6560ded7686b41f404eb2cdd64956e99045f5fb9203aa5ff17196a8179bc5674e6a47c4eb767d689664b6377834ca8bcba2fad2cdc58a488deee7aae674f738dc15292abdb85135ff20d2e715a48ff8508a7973e22124e73524674756721ed6c911f1557c9725254e0b171ae47664fb26f64815f5a4a81fcc061656eba48af69ff89a8aed8b618f20d3bd894cf75656a65b834cf7b6ce74c51c9e8e178e29da7a23bc569f89d91e4566dba9359bd9cb7a6b5180794713601615980598c790adc4275b6c665c1fd7018b802bbe236315709f4094dfd765af78a1a8ab1b550aa54e9468310ef1d65d8cf2da3185de126b31bb38c4fb9f9be185eebd23bd39c74934fb3886dca49ef7cc38f7f764af912e6259a1873ed2c510f12b3957991cf233b1df3a64bf0f6cedf724f2a70f35fef493a13f3d85687f644bfb691db218d2fb38134f0d798f683db2c7271a7b742966668f6710eb5d96ac9f45c09f5a026f40b1ec336d2cd3982324966d44e09f6bc15b1905ca4d2830ecd60506ff851751ec45f49fea354886b84555343d861b15d5e790dc2f7472e5711d2c3fbb99c7cd88c9973a26c5150bf897c6186abf05c9fc4a27b33cd03e293b3bcd9fd7b1106d8baf1dd0b610df94316f5bbc80b4fd56a7ad3f80cb23647c1c4f5d687f231b132d5fd449174356e203d8ea30689eae6c860c836e4571708f260eee2e6e1607b721e6df6b986ba34a08f39710f80f1af00243f09791597ed498a54c0933b36cd7818bc824beba65555dbe8290f7da22bf8a0cb24f6790926606790d81ffac013f50ca0c7c07f293fd3970c2d735e00dbc5df3fedd8d11c3bad4c1a5cfa61df0f05161f15dfaccde86fcd5e10d11ff3dae68c8f70d14af7fd3d13708c56fea80857b1cc804783d067e0b9580df3525e0c3d26625e06d1db8b8ff0f27b59a6ce0edcc98dde6fe7fba4fe5c71cff4f7df74f91d46a3664e3fb9da8a4fea529a951c392fa0ef289bf1d4d1d2e5ed6d70d67153ae7b9ad980bbceea29890f057704ef3ba97c23be58172d1919ceefe3ed6eb501eeb0ddbfbf349854e726a412036f210477a657d82f79cc0f67d5f5c6fec5e6fee1e9bb8c7aa460efb2ecafa7f3459df5064fd41bb3c7c0f99592c0b4831f3e09c98397b63163a339dd114800b956532858ef8d6d7706f7460048d0288debdc01de5b198eafe35cb8ef751318f44528bf9aef266c5fc035d5de4ed12fa5feec1dddadbc056b478cde71ca3914c6b97bc887e07ee70e9a8bef850972dc272311d21354b041700fc912e4bbcbd55ffcb5d6ed5f178b34c89679c29f911fd0eb7e9e4a36cf95867bd4271f2bfdcbd3c936fe5e92d572463cb158de8372f0ffd9c1cb0da273a6716562b88a46ebff3abae162d8a1d7a170a60c534016c6505b300f629625e5cc3bc8821f3cf10f3121ae6930f3563fe39aaf54aea6a3d47473da4d6d88da897d2506f56d18cfa1708bcb4067cf16166e05feac0458bae4cc4beeff515023f2407e05f23f0b23900ff46072e7a8de532a96f7ec5c0df223f2c9f0970880b7e87bca482c64b661d6ee6257b74e0e2fe4323a0915a3162d548fd1e99a992aeb88a1db04c1ba9a232fabfb13ff00332756564eac3ec4cfd2332f5e13a530fcd99a9ffdfe913fc848a56154dd15a78a459d1da8bc2d811390863fb10f8913900ff19c5c8a32c63e47ee491859631f217648eaa1a7368f7330931c7afc84b8ed605e0a3ccbce4371db8e8ff54b3ecff1c40c0d52d817f47b6ae9103d7fb43075ee8266b66c23aa40dfa27cac45a9a4c6c556896897f21f0da1af0a255cdc0ff46e07534e03b0cc1ff41e0c768c0971e6d067e10794add1c788a1301e0f572001ed181fb1f97cbc00df3b11b4675c022b0d5d7d5c962db70d33a791ad5afbcd2c6a4e163567be6215d1ae874f1c27c40aa89ac1892d550274b9ef41e9632d591fd5aee3862d148c7427e157602b54ffc1550d933c8470c1aeb181473e4d5e4fd3ccf986658b516d14914c04d74e1a7ba5984288a0a71d31c14e202c4fc380df37a35cc981743cc8fcf01f3e288f9091ae60b0c999740cc9be5807949e49f27eafc537c356300c5b2816e6c184071a839f50bfc73fdbde3b1ce29eeffeda59835cc031aeff8eb0027bbe7467bf1659637ce38c23b3bdc30a69542fc9bebf88b4f0d2419f1d6b185099d9a933e82bfda4ff263b6dac799e0dd3135b1c271927776b8e3efc622fa3ab31dd3e552a5753a09073909753c4f161d4f6fe6c8f13b9ec67dcf32c8c95a689c2c66e8648720f05334e07143f0b208bca5063cdf10bc1c72af563af7aa9e51f1f0bbce0ddc63533ae71795f39ce3e8dee3dda389c394470ed31a394c1b6b87a98064b64532db59cb3c146575fb1c44c28aa809d9c1b209590959aa23b294d8152c3f2e5bcacc4e95919d3ae7c04e87e9c0c5baa9532396eba60e47b5e8699a5a74782bb35ab40aa2ddc596f61108f9745be4231172575be4a31072375be4421db27821ab7bc4f285acaa08b9872df2d1c8f17a6a1c6f6b6b33c7ab86aa905e966368d511706f5ddd24c2454fafd935c21b92f5d78689c64f8b44f7d4447a0d64b33e1a9bbd6b68b39ac83dfbdaba672d44bb9f8676ed3666b46b230fed6feba17510f219b6c8c720839ca931c8604383d4d5818b450f0374559f58747e56249b45e7f590bf0cb4f5976351213b5b57c8fc37d1bbb845cbefeb74f27a18addd94bf9262aa5111ab8f640fd2c9aee4c86307611cb27b81a0818e8d18b8199c491c0bfbc623f2c0211a0ffcab9d99073642361c8ac65fe4cd2c0ab37805a131526798469d12edcdd46982c0876bc0c71b823745393cc232878f43c0232d818f47c0a32c814f40761ead6b1118dab919f2c9313a9f145dd69e5ec9f5df5b36f1c513911a637595b4a11acd512f635c0e7a192721e6e335cc2b7530637e32ca800928a8fb7bfa88c56b62787e8a174a0b136d28932c6981149ba86b80182a760a029fa4019f6508de12e5f7e41ce4772b9425e7e8b244ecad93dcf145ccb08cf146f5e4ece1f580d98fddb7469ca6e83805b76eec23ad7d486e0525f33361d206e5eb544dbe16ed6896af6d75e0a291360d35d2a667d5486b87fc67460efca73db2d04c8d85fa1b5aa8037284593a47280be3c578720811c6671b394047c460b68e01ef652c3e732df646e30bd917854e48feb93af9f2c650c1a2209aa533ddffb3b54367e443e7e5c0874e453e74bec687761bfad069c88217200bea7dc86f0a4cf26e1461cffbce818105bb201e17ea78f0ce764da8cb30d5c9c5f65ea7230e73741c8e84ded4dde3e47fa4c49fa0b1b54e57d4cf9e6bdbcfee869ceb228d734dee64e65cdd91412fd619b454c0b98679a61be1adceeb60bcd16e0fa4d6251ab5e61aaad51381cfd3154843f05ea8dabb14557b976555edf5464accd728d1b4b399127d50c62f404d143f39465a98996c9e04638dd960455fa4e6e51a35371aaad90f815fa10117df3d3601ef8f6c78a5ce8602a8b79b1ce7d98ef7c69fe2c51c137b9d81545aa851a98ca14a67eac0453fe6aa4cfac521df54188080afb6043e0b015f63093c10d97991ce2f4f33b3f3d9c875ae452374c9c276ba13dc6149dc2622f110f7fa6c87775c3271a94148d5eb34aa1e30547530caa0eb2d33680862bd58c3ba4a1733d6435106dd10deea9a9658d08137c532c99a61a8b2b9115536376555d90c47fa2ed1e9eb6f5e2af6f24dba65cf840b9ae83742275734b56fd6e927baefb744827bdcaac242360018898c792b32e6d2ac8c390a19f3b64c8d99dd1e83a391316f47c6bc237b638e41c65c868cb93c2b638e45c6bc5367cce21a63b6f77a1e26861c870c791732e48aec0d391e19f26e64c87bb232e40464c87b33f5caf65e77699261089b888cb91219f3beec8d3909f5f3efd7f4f3b5afb786f4f327a39c7a00e5d4aaac72ea1c94530fea72aa7422a7e44678b65bab4f41b9f510caad87b3cfada948d1d53a45f9a30d626c6aaa1720c533d98f264c43d21f419d5f75af7e795b5813c9d351d3658da6e952a2bb59d36506027f5403dec9107c26025fab01df61083e0b15dec7723048371be5f6e3badcf6e6021d7f17bdd669260a4c72fe5cc4e2091d8b239cd43dfdd2b1c96e92fe3cd44a5f67d94a3f1f39cc931a8769d6c3cc612e40d67c0a75a35abb3f877be37bb9ef465d88547d5a375267a8ea1c9441eb2d33682e62fd8c86f56243d617a10c7a36d36ed4904486d974a32e4635f70654736fccaae6be04e9bb090dabf93577d22dbb7b2dac91f46eb45c8b9b3561e7a17afc39548f6fcebe1ebf14f9d016dd58494f331fba0cd9f4799d4deb3a0e7d207584f716943f6879ae2306dd26ba961563d7a2988b90e90751f17686ff8eb95ffca77a4373bc616c72cf6a13ebcf47fef602f2b717b3f2b7051a390daabac9c8b9cefff213e2c96fb08ff4e6d97dbcae5ed99ee9f520c6053eceed7f7d455cb5fdb4f8d648eaa7c523e4d4fa7d81b645c4ebbba7784ffcefb4423b0d5d8ebcff25d444160331e77849619d6e2eb38994bfe60dd52b74d2c5b4d6cb11cb69ad2b11f2765be48508f9155be4ab50987b5513e656f5320b735723f0d7742d6b43f06b10f80e0df87e43f045c8e0af6b0c1e3531f8b5c8f9df08eb1f36cc51fff03a24fd4d9df4431cb97f280fe5890020d62f987eadfb7a9d7c312ef356c47271f26284fcb62df20dc8d1766a1cedfc33cd1ced4604fe8e067cad21f84dc826efdada6409a2fd9ece2603cc68df8c9cf47d9d938a2d67e5376b73ffd1ea5b747cc46a900f22f61f39b81559f2435d0f6ba0992597224b7ea4b3a468aaa9962b24bb0a9b35f7ba903c8acfdf3f317f5de636a4f2c71a95e71aaa7c3b02ff4403feb521f81dc89ebb74f6ac97813dc51bd385de4230bf4553e8f8ef54fb7b61f033a3bd36bcffacff66b889bd9721937caa31c90143932c47e09f69c01b9e6d067e27b2f7e73a7bd7cec0de13bd5eb758b225069686795786272c2b7fcdc77cb0e42e648add1a53b43234c50a04fe85aed01882df8decfc251a74ca3ce29a7fb0fc1ec4e62b1d1bff6b66f28765db7a4388a6bbb4dc8ba47e8dc675924d23bdf4ec862d57221edfa46b208ec9c172c4fb90f46f75d28313081d9de437a7cd3ff17b3f92fc9d4e72c58064cc20bb3c780071d9a3e3e2ef54139ce9366d18af42c5fb7b4df1de3ad8ac783f88c07fd080171d6206fe10b2d58fa8b4f6567679e2fc32b1d7c348a59f342aad3454693502dfab6b4318823f82ecb52f537b65e35f6b904a3febda00862a3d8ac0f76bc09b0e35035f8bc07fd1804f33047f0c65c6afbacc28a9755e319c2f1a0b26d9f13852ea375d76182af50452ea00528a27e29231ac771623c4eb90dcdf7572759f364b959f5dfc7e1231f943c7a4b812bfb3cbd2a790cc3f33a933b289814f2327fa4be3445b869b39d17a3476f0b7edd8c1333a64519fff93b8a04c241c8c643391f02c328ff8068c6a9ef23a2542ccb301e576249a6114f7df4a37fbcee746a45254a35277439536a11ccf8b5ae6f87388764c437b9121edcd2827e2ba9c28ea24dff7c82607b62055f235aa2c3354e5799403456c73e00544bba886f62e43da2f22f0020d78ef9166e05b51b4281605d1a278349b68b10d295142a3c40a43255e423e5a52e7a3e534d142deae26bb97ad5f460a96d228b8d650c1ed08bcb406bce92833f05774e0626ea24c34753226623219f32aa27d882e3019d27e0dd12eaba16d3487b403d12ea7a1bddb90f6eb08bcbc06bccc6833f0371078050df87843f03711f8a11af05586e06fa1225c515784ab688a7072aa7da277636160ad657685fa6da472258dca5f1baabc135547956daba37774c8627de26151bbbd4ade45c0875b02bf870c5d4563e8da63cc0cfd3ef2ad2374be2526bc741bf3143a3d124b24c4ebabe281f1597d4efe03a4ec911a659b192afb21023f4a574a0dc13f42f95f6899ff1f23e0aa96c09fa04276b46d21db850c5d4d63e83d8686fe14b96c759dcb0a7db8d5ddc97b3d74789601ef33a4540d8d527f192af53902afa901ef32d60c7c376ac8d6420dd9da593564bf404ad4d128b1d450892f51b61f83babda2e13adef117218e90b2df24d3bf422ad5d5a8b4c350a5af51bed443f9726c56f9f20d52a2be46890fc79929f12dca9706ba7c29eed52043bc76c708afe6c82657be430a35d4c5174385f620f0461af07ae3cdc0bf47d66aacb3d6215ef01ae7b6e526bb96124b23677981acb56baf19092b9a58ee07549934b1ac4c7e44566baab1da4a43abfd84ac761cb25a9fc047affcd689f837dcc96633c1bd48b9e335caad33546e1f023f41035e748219f8cf3a70d1cb6f16b55f40b41f313f51c37cb421f35f509e37d7e5b9ff0957bf9af797098d4aa4fce17cb104432c186aee96a32686cb867e458a9ea4ebeb182afa1b52f464e4dca97316ed9ce9de8c7b369bed1c40f25be8e48b971ef0dc89ca23bb3994df91b94fd185f78966e6fe03b57a5bdab67aff44b45be942e02433da7fa1b6426bd4566893555be16fa4445b8d1225269b29f10faa7dda59d63e0751986b9f8330e74481493a684c32cdd0241104de51e7eb86e05104de49d79439c70c3c0f8177d6b5f60dc1633a7011324e45ad4a9ec60cee15621276e248a1d3745961a8503e02efa201df38c50cbc880edcfbf6816d4c2b8af2a16b262536c4d80508b85bba5aaf9723be683ad97b43689adbb5ebe3d63363dc5f6633d8c590fcee99d67a984776b55e711d23b1c8ae47547c6639c8289a0a5d0d439740caf63435b61837f65faa3451ad2492df2b5b6327796467ec52c8d8bd35c68e1819bb3482eea381d694c610e8322888f4d555ce33cc82c82108bc9fae1f32d30cbcac0e5c54d0fd3515f4c18373e69854d0e574e0a26d74066a1b9d9955dba83cb2d000dd9c9da1852a200b9d958326cca1a8000eb40ce3159149ced64ded1a9aa412021fa401df62085e199964b02e26957574ddaece6e24e27687ff8abd89ed0e430c86e818c89b6d67c224bbb87838f2c2a17a2f6c65e28555507e0ed3e4e7bc73cdf2f308043e5cd7fb32043f129965440e0ae75188f948dde88221f342e464a3744ee63548e9e5ca42c9bd4c5ca82a5267b46e41c67966ea1c8dc0c768c01718825743b61aabb395d82e24d9e9b01d62ac8e141ba751ec80a1623510f878ddecd2f966e03591d526e8ace675ca9537787a27de37cb769fad5a48c189bac862a8606d043e49570d1982d741d69b8c9ae6499fe35fe3e9fba8d9f8dd3148b9737413ee73cc94ab8b949ba253ce7fa5c77f91a6ad37903885dcc45cad7a48f254347aacbecaa363905d9d7a2ce2320d15103d87e41a0b737bd4471ca6eb3854496b0f954b961fb342ac6620e79f4d1f669fee0c75c4b62bfe67ca1b3833bd41e7616ef83091df10c99fa9935f10905fdf63d0c0485e23246f16aa8c6778fb910df73638194f5bec98486c8c24ced649cc1351dbadfa9b1ac968a291d1e068371919e8fc9bdbe60491fdfbfcb62fa30ef1cef85b10894d6326b8bf87796308c29643d36c7e736ed474f39bf3a262f39baa295a67c30d6d61d314e5e8f9284767baf7cc30cad1e3908c0b908c96ee7d2d8c641c8f645c8864d43496710292314727a388a747729b013359cd90acb94856cdac659da82b7162dc28d2e33f2c717e636d4a1625eb22977f0dc5242d4099bad82b531552f40a938eca4e73d4d8b944d3d8297fb95963e724043e4fd79232043f19815faa015f758519780be4ba97e95c577c0846f41187787becf9fb0acacb3ffbb82ed7c59b8619427bc609f7e3e977b389f75310b3f93a66f296b682d964afaacefe8df49648fa02545d271b4d3dbdfb8718be2bdb0a49bc1c3715d537d19392b36b94b546ae7685aeffbed0ccd5da2005af442dbea43ae22594e10907cbcea1da22f90b718fc437ecf4443b373b676a87245f8534d7ed7fc505cfb78189fcf6285bafd664eb46c36ced8094bb0695147e935c9eae3551a723526791469df15799a9d3094d285c8b2614aecb6a42a13352e27a8d124bae3653e25494278bd100b73a2e63fb398ad3907a3768d473ae3153af0b02bf513712b8c80cfc7464bb9bd0f081fcf9a6e4c6c7a271325c5913d5dc70594257c465898e8b504a481553a553bdf9e8eca47643e6bd5963dea5d79a99b73b1a4ebf2507c3e93d10f8ad3900ef89c097e600bc17b2f96d1a9bbf6568f3de08fc76dd00f37566e07d908fde611e6bb2fb5a4b5fa4de328d7a7bae3753af1f025fae012fb3d80cbc3faa6cee4495cd5d59553667a03c5a816637b801c29dc7ec1b3f6722d9779b347efc05bed9ec0f320065e03d9a0c5c6b98816721f07b35e0d36e30031f88c0576ac09719829f8dc0efd380af36041f84c0efd780c76e34031f8c1cea01d431c401c7fc8b4643906aab34aa9d6ca8da5004fea0067cb021f83064b7875010f0bf373bdd2b72ad9d91de535312fd1013ab0d47b21f46b2935fe998ee7517b27fef650492bd5a27bb92a3fb52888e43765dec9188cd2368de6190f7caa2f0607e0bc844de28246f0daa9e93e157959b9dc6a35125f728aae4d66655c98d419a3e86876c78c14376cb1dc6a2e2fab8a6b86e5f6a565cc721b33d81ccb62e2bb38d474a3ca9ab086e33536202ca93a750e58f6375363b7f4f44ca3dadab886e37536e12526ebd79cb37bb2fc24d460c9e410c38a4890fc08b31dba4dcb6de8a82a9861f1d3e07317856c740b7902d8c497601670ae2b441c7a964a8554ce44e457237eae4ea76a24b959f9d05a6e9988811cd4dd1d4ef7f8979cd14f090ef7f4dd7cd40557793913ece7f3703d5c7f1773669e24a1f40334e663351cf69e268831a428fca297a64226db38b5754c009a36d5de638d3dc7ffddd7f8bdc7fab9689b0ac9de5dae2cd72652713cd76cd40aef83c2a02e26b687e1e882dbfdb79616a8c63bae9f74c24f7059ddce2de7d13bd3695ff45f4c22c46b76721992fa2413279abdec22c0bfb6c24752b92dad3e17792bb78e5618c9732b3efb948ea3694afe2d59471de06e433bd4f3365a7ed7928a0bca4092851c380723e52ea65d4a1c3f1b2b7d3dfd07d2e40d2b7eba457ce286afb2cb28bdd172253bf9283d83d0729fbaa4ed9422f2ef0db36621702ffb35fc13772e40f7ff5f23c7bba57bea6197bd95ca4fa6b1ad51d43d52f42aaefd0a95e2eb4e8143ab5298feb182978316a8ebeae698ecebad3ac397a0952f00d9d82159ce0c4c554afde1de10def157a9fe5f2ebe8e1c6d307f390926f6a945c6fa8e4a548c9b750d895736d18edfd63aad2653aa9a239fd7634759d589ee3e89db32e16301fd96ca7ae27b9c2cc660b10fb7734ec9d2cd85f8ed8bfab1b8037647f05027f4f03dee96e33f02b913bbd8fba2f3dbd803e25f1ae4d72d18b1f0183e56842169b4d2d440a7fa05178a5a1c25721f00f35e03f19825f8d862c3e4243161f673564710d52e2135d84b9c74c8945087c97067ceebd66e0d7227ffb54e76f759cd42103f46972f1099ff0ef19b7c862cdcc7588ef67e99a66e8ebca26d2af47d23fcfb469865864d7345b8cf8ec4e37953555919ddd54da0d48fe17a809a37e675d9e50cb2e4f6e44c5e34b4df1d8bfd2ac78dc841a805f691a804575b5544803700962feb586f9f0fbcc98dfac0317fdaf6fa296db30dc8232fd5b5da60b8489f41524936cbd1549f90e4d92245fcff7b7dae3af5a71509ae89defe8b5bda61b0edb2e456cf6e8d854d514fc4c596517086e43fcbe479338a31212bb7ac5de2c776e47aefb83aed0dd6fe6ba7720657ed429534f532765f6d1ed42ef1d1d5d266453332d43ac7f423553d245e4cccf2e122f47d2f7eaa497d7446264331316772216fbd2d920174ba4ef42d27f4e37b338c1e137b6ec72610562b03f1d83417441d486ea2a631306772306bfa49bfec8844976c1e91e142c7ed5048bea0f9a058b7b11f86f1af0320f9b81af44d63ca0b3a6e858e83f50df5cd909aa5a16f1e53ea4e8ef1a45cf3254f47ea4e81f3a45ebbbc9365e612da497106b796e2136381ced1d935ff2acefa60add26ff68fac6e754f7d7246f404e04e0893480373ae164e2e54213b33c80ccf2a7c62c1b0dcdb20a81ffa501df6d08fe2002ff5b035e74b519f84308fc1f0d782543f08751b7fa20ea568b3128f36ef56ae495e2153cb08082d7f267b780e21164b6689e26c31f3133db1a049ea7015fb4c60cfc51041ed380af35045f8b323c9e07323c3fab0c7f0c295144a344bd47cd94781c8117d5800f36047f02b96a81ce558f701c6969318fdbc935c4785ad32646bea77873d42274fadfc83071e87548e9621aa5271b2afda406bc81f8604b64b2f36f4ebcf775d1da7a13d2c3bdeb8c368152bd940a38f9be434fc75f4038de3d53cfdb55260c297cbabeb86bc13cc5820d6a09ed9b7ae7fe1b8e75bdd777c5fdc9e972a7a2d7c51bead216a4939fe2751c38e95f224f4cfaff97ccd15281a790cb96d4b8ec2e43977d1a95d352ba722a467a3a48334f855ee5925d495c8fd42aad51abe95a33b59e4101ba0c0ad0876415a09f454a94d52871d663664a6c40e0e574167ac20c7c23022faf012fb3ce0c7c1302afa0015f6d08fe1c023f5403ee3c6906be198157d4802f3504df82c02b69c0b71a823f8fc02b6bc0df35047f41072ec6af0fcbd3bd5a357783c9ab552f22e687eb32f41933e65b5180aba20b7035a89ef63fbd2537406a7b434023dd5f43bdfd9de4edeaa73a7512a1f03c576636dbd86f43163e4263e157b677696962e19790858fd458788ba1855f46163e4a67e1e64e7059c3705a56c63ddf218125fcfc86263709277b2d8d195efd3a9dfacf7e6ed5f39a8693bc0913be5bdccb0d4793bcd88ecc55a831d7d786e67a056574556d51d2808764f4ab88f9d11ae6eb3798317f0d6574355d46cb5310dd956cf3dbfa0223fb1d3a772036d5756c74531099b2ca6e94ef75c4af868e5f858cac95cdeb756f201e35753c8e34b293dde7b8df44ce5a4be3ac5d9e3373d6b710786d0df8f986e06f23f03a1af09586e03b11f8311af0a29bcdc0df41e07535e08b0dc1df45e0f534e0a3b79881bf87fcf8589d1ffbabb5854726c713c4ca6ce1a523bc754023bdf5bdc96adb74fcf97da46c7d8db2cb0c95fd008137d0b5ce9f3703ff108137d480ef3004ff088137d280577fc10cfc633489df38cf7212ff1344bb8986f62c43dabb1078535d0fde10fc53047e9cae97f8a219f86708fc780df80243f0cf11f8091af0d85633f0dd08bc99067cbb21f81708fc440df8f06d66e05f22f0e6bab2ff9219f857288a9ea48ba2e215a8015273dd5f52dd3cd14592dfd31868b864f76bc4e4643499a1936a22f11b64d8161ac3cedd6e66d86fd188d32968c4a96556234edf21b3b542d5e02047fdc4b4fc013e31413bd4bd7994d4ac3331ea1ec4a7356ae68ac66263f7df88c42295cede4bfee215e6ec971a7c8f78b4d1f19077d018e4bd47201a06a368af6653c7fa01e57d5b94f7edb2cafb1f7572c482baf63a3962314307f78218cdf6fe144915b61e0bfb0929d51129d5292ba5f6a28cebaccb385e23d2d4fde7af551a4e1326d9bbce3ec4e0541d83f21283a40bf3a2b1ec59fc8c589c166607b19de2306ffa609a93dc03203b06fb11832ee98b90dfd66e1b606222fb1724fb749d6c714114d5e4d69626b27e45f540575dbff335b37ae037a4483734a1c2461ce79e986d917d0790e4ee3ac9f262b31989d3d94bff1d49efa1935e52e33cc9cb2672ff40727beae48a64722d8e899c3f919c5e3a39eecdceb1ee5f13097f2109bd51f1e3b14ffb45e37f23d97d74b22ba695ddcd0b8c53bc915bd3d76bfe415cfaa250c05cccb7de3f8864f5d3c92a21c9b2d9f0dfc90352fba3b21294eaf52ab2901b4172cfc8dcc3ba3a62bba1a1c6e5278a649fa9932d5ecde0917ba1abbdfc3c247f00aa5ea72add8da18eff1d946c19c41083b3507c6606dd12112bfbe1f238923e305ddecbd2877803c0a68b70f391ecb3519f45175d78795057afb698e9cdf58ccb6a48bc08e233084d64a4f269ef3671c4fa4c7e7fc1dfa82c1b3645119bc1a823cc6cc4863bc3bc7683597e14208943501b85257672258e0f9447b3dd688a21c94351bc9da4d424acb389d4e248ea309d54b1e9c564698821bb7e71092473388af1fe9e3ac17d76cc5f4e2d89e48ec071d6979bccd3ee4e707f5a13f9a590fc9128cecc908697921f87cfa6249546b247a17c9ee92d669ae674f0ecdd2b8b654c6590ccd1a82c8da63294dcb7393b0f3b04491e83258f504a6f767b47974592c7a252cc3ec616ce2677cb21a9e39067f9ebe7f94b08bc2d6236b2cb23d9e371c414134de3dc9343bd018a6c5be61590e409288e4c73f88b6ded9ce0eed626720f457227a6976b133f2a22b993502b69b4e75bf2f6483c0c31c52b6926d22b21e99371991ae24d894fa70fc6085f3b338bf73b2b23c9e7207b8ff15e36b7957b984eae68644cd10c868cdf65361872b80edc2b1d79f6fbc554d1817b8e683b197804429e6e8b7ca40e5954c233dc0b87a445ae89918f42c8336d910b913566d95aa32af2bdd91adf1bfc9999ef1d8dc0cfd5806f3404afa60317b365e7e565f0cde63118b83a32f6f9b6c6ae81285f6049b926a27ca12de55a2826cec9847248d0ab8d80e75a02d741c01759021f838c7cb1ad91eb22e44b6c91ebe99045bb6c5e26c6a882818f45d5caa539a856ea237b5c666b8f062844cfb70dd10d11e705b69c1b21e4cb6d911ba3787485653c6a8280afb4046eaa033eca4d2ecc04383f02818fd3010bffbf2a13e05f31e3e311f0d596c027a0a27d8d65d16e86fc6d91adbf9d8890afb5456e8e90afb3453e09215f6f8b7c32cac0c59619d80251bec196f229a8f8dd6859fc5a225bdc64698b56c8164b6c6dd11ad9e2664b5bb44155eb2d39a85adb22f05b7300de0e197ba9adb1db6b901bd476939171cebff95a6f1f6f87e7692e7e7befea18af739fc4f43bfb421aef3e1df68458e074ba37a03cdde312fe32ef6d3a3f8a2836f35e94bd3d4fbc282bde49f977f9a2d7633be8f25df8c91d9914859005501d11f0324be04e0878b92570675404eeb42d02a722e4bb6c914f43c82b6c91bb20e4bb6d914f4771ec9e1cc4b1ae88f6bdb6b4bbe990451c5b9989df89720e80bbeb80c5e8c97d990097c18c7b2043df9f0343f744e678c0d21cbd50f95e6559be7b233b3f6869e73ec8ce0fe5c0ce7d91391eb634473f04bcda12b83fb2f32396763e03d9794d0eec7c2632c7a396e6188080d75a029f85ecfc98a59d07223b3f9e033b9f8dccf184a53906a1c8bfce36f20f46f6783207f61882ecf194a53d8622e0a72d81872173accf81398623f06772003e028d2f3f6b39be3c12f9de065bdf1b85ecb13107f6188d5c6493a58b8c41c0cf59028f45e6d89c03738c43e05b72003e1ef9def396be3701b17e2107ac2722f01773003e09816fcd01f86404be2d07e0e7e8c634c476f691b1ceff624ca3a3e3bf3fd3cd19ea8c75fc6595b91dd17829132fdd8e2d3605b9ffcb96ee3f15e5f3f61ce4f3341db818b27c2513d6213300d3750e748c70a091ff1307faf71ce7d58c87c25ef386c28411fe0d96f05372ba2c1624766492c5afe17eec4cd42678ddb64d300b21bf618b3c1b21bf698b7c2e427ecb16f93c1400dece4100381fd1de694bfb0244fb9d1cd0be10d17ed796f61c34ecf39ee5b0cf5cd49b7ddfb2377b1132f4073930f4c5c81c1f5a9ae312d482fec8b2053d0fd9f9634b3b5f8aecfc490eec7c1932c72e4b73cc47c09f5a022f4076feccd2ce97233b7f9e033b5f81ccb1dbd21c5722e02f2c8117223b7f6969e7ab909dbfca819daf46e6f8dad21cd720d6dfe480f52204fe6d0ec0af453d84ef2c7b08d7e98045676d8f659fe67ac4f87b4bc68b11f00f96c037a076c18fb6ed821b11f24fb6c83721a7db9b03a75b8268efb3a57d3342fed916f91684bcdf16f956e477bf58fadd5204fcab25f06dc816bfd9dae276e4760772e0767720f0df7300be0cd9e40f5b9b2cd7218ba55e7f66928d214bbdee44cde8bf2c9bd177a1019cbf2d0770562023ff636be4bb11f2415be47b5029746276a5f05ee4cee27b7db6eebc1255dfd14c588754dff72173e4599ae37ed4b88b65021cd2b87b00318e5b325e8580f32d811f44a62862698a8710e3a2968c1f46be5c90035f5e8dc08be500fc1114388ac72c03c71a14f74b6462ec90b8ff288afb2533010e89fb6b51dc2f95097048dc7f0c19b9b4ad911f47c8656c919f4065e510cbb2b20eb973d91cb8f39328ee97b38cfb4f217394b734c7d328d855b00c76eb11e3432d193f83802b5a023f8b4c51c9d2141b10e3ca968c37225f3e2c07bebc09811f9e03f0e750e0a8621b3836a3b87f8465dcdf82e2fe919671ff7914f78fb28cfb2f202317da1af945845cd516792b2a2b475b96956dc89dabe5c09d5f4271bfba65dc7f1999a386a539b6a36057d332d8bd8218d7b264fc2a02ae6d09fc1a32451d4b53ec408c8fb164fc3a2a7e756d8bdf1b08b99e2df29ba8fc1d9b83f2f716b2747d4b4bbf8d801b5802ef44e668980373bc83c01be500fc5de4228d6d5de43d547537b1acbadf47557753cbaafb0354751f6759757f88fcee784bbffb0805bb132c83ddc7c82d9ad9bac52788f289969477a162d23c07c5e453047e520ec03f43c63ed9d6d89f23da2d72407b379af73e25939c0c99f7fe42072c3e6cd53213e03cfc72f497c81cad72608eaf502eb6b6cdc5af11ed3639a0fd0da2ddd696f6b78876bb1cd0fe0ef9487b4b1fd983ecd1c1d61edf237b74cc813d7e40e09d7200fe23b249675b9bfc84689f9a03da7b11f8693900df87c0bbe400fc67047e7a0ec0f723f0ae3900ff05b94a375b57f9152177b745fe0d35287b5836280fa006654fcb06e5ef3a60b164bc5726c0214bc6ff40c0bd2d81ff44cdbe3e96cdbebf50dbbaaf65dbfa6f04dccf12f81fe4c8fd6d1df920ea729d61d9e512d3f35aca67da528ee890c546380332a11cb2114e54072c76113b2b13e0905dc4f2902d06dada228690cfb6458e23e441b6c8f90879b02d72111db2a8a686e4a09a2a8ac087e600bc00810fcb01783164f0e1b6062f8e9047d8229740c8236d914ba2523ecab29497429447db522ead4316b1778c65a3a00c021e6b097c08021e67095c16018fb7042e878027580297476e31d1d62d2aa0a031290741e3501db8b7c3be65c3a022627d4e0e5857426d8329966d83ca2817a7dae6e26108799a2df2e1c8a5a75bba74154479862de52310f24c5be42311f22c5be4a310f26c5be4425406cfb52c835511e5f36c291f8d0ae0f99605b01ab2c50596b6a88e6c71a1ad2d6a205bccb1b4454d4479ae2de55a28385f9483e05c1bd1bed896761d847c892df23108799e2d725de4d0975a3a743d44f9325bcac722879e6fe9d0f5912d1658daa201b2c5e5b6b668886c7185a52d1a21ca57da526e8c9017da223741c857d9223745bdb5ab2d7b6bc721cad7d8523e1e515e6449f90444f95a5bcacd90335f67e9cc2722cad7db526eae432ee72617bb178ecaa4a66a80c14fd28037a8eb2623bd9c7f73a79b20723beffb61feb7c4c4ce3113dc6bc3bc5d62c6bb6843d3ec617383ab43558d1d3c5b44145b787bd9dc18137bd9544cd1301d0fb44bcdc928f36fb2cdfc160879892df2293a6431327f732625216408bf258a0ab758468556c816b7dadaa235425e6a8bdc06d5f7b759d6f76d51fbf5f61cb45fdba128798765946c8f0cbdccd6d01d90d72db7f4ba8e08f84e4be04ec8c877591ab93332f20a5b239f8a90efb6453e0d21df638bdc0595c07b2d4be0e9a85e5e99837ab92b02bf2f07e0dd90e7dd6fe979dd75c0a235f1405815ad0a10b53310d0039965550eccd21379ca83969ed20b39f743b6cedd1b213f6c8bdc0721afb645ee8b901fb145ee8790d7d822f747c88fda229f8190d7da229f89901fb3451e800acae39605e52c44f9095bca03516b779d656bf76c44f9495bca8350ac7b2a07b16e30cac2a72db3700862bd3e07ac87a28aeb19cb8a6b1862fd6c0e580f472eb2c1d64546a0fa76638eeadb91c82e9b726097513af0f26ef2b94c72f3780c3c1a15f6cd96857d0ccac92db6393916213f6f8b3c0e19e3054b638c473dd01773d0039d80ecb1d5d61e1311ed6d39a03d09d17ec996f66444fbe51cd03e07816fcf01f81404fe4a0ec0a72283bf6a6bf06908f9355be4e9a8eedd6159f7ce40945fb7a53c1355bc6f5856bcb310e5376d29cf46567ecbd2cae7225bbc6d698bf310e39d968ccf478cdfb1647c0162fcae25e30b915bbc67eb1673902ddeb7b4c55cd454fa20074da58b10f8873900bf18817f9403f04b10f8c739009f875a909f58b6202f45feb7cbd6ff2e43c89fda22cf47c89fd9222f40c5fc73cb627e39a2bcdb96f215a8987f6159ccaf44b6f8d2d2160b912dbeb2b5c555c8165f5bdae26a648b6f2c6d710d2ad7df5a96eb45c814df599ae25a648a3d96a6b80e99e27b4b535c8f4cf183a529162347fed1d6916f405dd99f2cbbb23722ca7b6d29df8428efb3a4bc0451fed996f2cd0879bf2df22d08f9175be45b11f2afb6c84b11f26fb6c8b721e403b6c8b723e4df6d91efd0218bbefc1fb11cec8c8d68ff694b7b3942fecb16f94e84fcb72df25d08f91f5be4151ae406f59cff78cd575b67b44b7f8a7b7e60166bbe0eeac2a776ad9713d7aff54a271fadf5ba1b150171ceb608dc83c0a33900bf17d5457971bbba6825621dcb01ebfb503988c72dcbc1fd88767e0e683f806817b1a5bd0ad12e9a03da0f22da05b6b41fd221577393c5dc73355268a7405f1c85d00fa33186e271fb3186d5c822256c2df2082a8f252dcbe31a44b9942de5475137a774269443ba396b5137a74c26c021dd9cc7902d0eb1b5c5e308b9ac2df21308b99c2df23a64e6f296667e12f972054b5f7e0a011f6a09fc343272455b23af47942b59527e06e55e65cbdc7b168d051c960970c858c00664e4c36d8dbc1119b98aa5913721e0232c819f43b1f348cbd8b919557f47e5a0fadb825ca3d0d2359e47e6a86a698e1790cf1d6deb732f224357cb81a1b7227b54b7b4c736c4ba460e58bf84dca3a6a57bbc8c58d7ca01ebedc8d6b52d6dfd0a625d2707ac5f45b63ec6d2d6afa19057d732e4ed40c0f52c815f47c0c75a02bf8182477ddbe0f126426e608bfc16426e688bfc36426e648bbc132137b6457e072137b1457e17458da69651e33d44f9385bcaefeb90c502d1e3e3b95920fa010a7827e420e07d88c09be500fc2364f4136d8dfe31f293e6967ef209a27c922de55d08f9645be44f11720b5be4cf90994fb134f3e788724b5bcabb510ddecab206ff02d9a2b5a52dbe44b668636b8baf902dda5adae26b44b99d2de56f50aba37d2694435a1ddf22e00e96c0df21bfe868e9177bd05044a74c80438622be476ed1d9d22d7e406e71aaad5bfc888c7c9aa5917f4246ee6269e4bdc8c8a75b1a791f3272575b23ff8c90bbd922ef47c8dd6d917f418ed1c3d2317e45f9d7d332ff7e43b6e8656b8b03c816bd2d6df13ba2dcc796f21fc8ca7d2dadfc27a2dccf96f25fc8cafd2dadfc37a27c862de57f9095cfb4b4f2414479802d65b1a4408b7c962d7244872ce67607c6ede776a33a70e11c675b3a471e623d2807ac633a70e11f832dfd238e580fc901eb7c1d78593739d43d7784065c2ba02e16500465e630cbcc2c8a980fcf11f30294a1232c33b41832c9484b9314d7018b56f7a84c80439ae72510f0684be09208788c25702914fac6da86bed208799c2d7219843cde16f910843cc116b92c429e688b5c0e214fb2452e8fcadf64cbf25701513ec796f2a128164db18c451551e5323507954b25043e2d07e09591b1a7db1afb301d7231373923ce37a7a15d02831f8e6c32330736a9826c32cbd62647a03233dbb2cc1c89ec716e0eec71142a36e759169b42546f9d6f596f55453978816d0e1e8d72f042cb1cac8680e758025747c0732d816b20b7b8c8d22d6a22c6175b32ae854ac925392825b59139e6599aa30e72e64b6d9df91854fe2eb32c7f75510eceb7ccc17a08788125f0b128f72eb7ccbdfa28f7aeb0cdbd06c816575adaa221025e6809dc0819f92a4b233746c0575b02374125e41acb12d214b9c5225bb7380ee5deb596b9773c02bece12f804047cbd257033e4168b2ddde244947b37d8e65e73847ca32df2493a6431bd745326c608995e3a19012fb1046e816c71b3ad2d4e418e718ba563b444ae7caba52bb742b6586a6b8bd6c816b759daa28d0e586ca57c7b26c0215b29b745b6b8c3d616ed10f2325be4f6a822596e5991744094efb4a5dc51872c5acb77c5ed5bcb9d10ed15b6b43b23e4bb6d914f45c8f7d8229f8690efb545ee829057da229f8e42dd7d96a1ae2ba27cbf2de56e08f9015be4ee0879952d720f1db25815f9603c077b6023da0fd9d2ee85683f9c03dabd11edd5b6b4fb20e4476c91fba2e2b2c6b2b8f4fb3feddd077c1455d706f001690a0a6247546c182ba9143b251405418a5d3124012281c424347befbdf75e5e7befd87befbdf7de15bb7e73efec30cf267b935d769fc9397cbcfe7821c9eee4ce7fefccdc72eeb92ee95b7220bd93ebe0b7e6e0e03ba73ab86979dc960e49332d8f5d5ca5be3d07a5ded575f03b7270f0dd5cb5e4ce2c6bc9eeae52df958352efe1fa20efcef2839c98eac066b2f91eff7b6ba62875ca923713d0bea78b655e0e58ca5c07bf3707079fe4ba53dd97ed9daadc55ecfb7350ec0a57057f20cb0a5ee92af5833928f56457057f28cb0a3ec555ea877350eaa92eeb47b2b4ae7295fad11c947a2f97f563595a4f7395faf11c94bada75a77a224777aae9aed23f9983d2cf701dfca91c1cbcc675f0a77370f05ad76df0996c6f837bbb8afd6c0e8a5de73af873393878bdcbe4f96c4d1a521dd90c4ebc90ceb5d9cc28c64c57915fccb6c8b35cd22fe5407ab6ebe02fe7e0e0735c26af646b32d755ec577350ec7d5c4f9dd7b27ceaeceb2af5eb3928f57eaea7ce1b593e75f67795facd1c94fa00d753e7ad1c3d750e7495feed1c94fe2057057f27db0a7eb0ab0ebe9b651d3cc4e5f15e0e3c0e7579bc9fadc761ae237f90ed910f775d371f6679dd1ce1fa083fcaf2233cd265f171b61647b92c3ec9d2e26857adfb3407b5ee1817f46759421feb2af5e73928f5712eeb2fb2b43edec5f165961c27b838beca01c7892e8eafb3e43829d581cd24d037edb39f043ad975f06f7370f0535c07ff2e07073fd57513f93edb9bc869a98e6cb35ea7f34936d3c43edd55e41fb32df219ae23ff94ed91cf741df9e76c8f7c96ebc8bf647be4b35d47fe35db239fe3aa1af3b3ac1ae7ba8afc5bb6453ecf55e4dfb32cf2f9ae22ff916d912f7015f9cf2c8b7ca1abc87f655be48b5c45fe3bcb225fec2af23fd916f912d791ffcdf6c897a63ab2792eff970ec67cf7812f731dd8eb90dd812f4f75601328d3269d033713287345aa039bb64cdb740edc4c5be64a57855b229d0337975bda552dda75c8b25a5ce53a72fb6c8f7cb50ba3439618d7b83ebe8e597e7cd7ba4adc29cb125f97eac0ddfc2f97f40fbc5c9336579343afed3ef4f5ae322f9565996f7095b973d665bed155e62e5996f9a654073621974ba773e066422e6f769578992c4b7c8babc45db32cf1adae1277cbb2c4b7b94abc6c9625bedd55e2ee5996f88e5407363d9ee53a64dfe3b9d355eae5b32cf55dae52af908352dfed2af58a5996fa1e57a957ca41a9e7b94abd7296a5bed7f5105c25db87e07dae22f7c8b2c8f7bb8abc6ab6457ec055e49e5916f9c1540736233dab75c87ea4e72157a957cfb2d40fbb4abd460e4afd88abd4bdb22cf5a3aeeab166b6d5e3315791d7cab2c88fbb8abc76b6457ec255e475b22cf293ae22af9b6d919f7215b97796457eda75835e2f0737e8675ca5cecbb2d4cfa63ab049c7b27e87dca46379ce55f20db22cf9f3aedbc78639b87dbce02af5465996fa4557a937ce41a95f72957a932c4bfdb2eb72ec93ede5f88aabc8f95916f95557910bb22df26bae22176659e4d75d452ecab6c86fb88a5c9c6591df7455e7921c54e7b75ca5ee9b65a9df7695ba5f0e4afd8eabd4fdb32cf5bbaeea3120dbeaf19eabc89b6659e4f75dd09be500fa0357a937cfb2d41fba4abd450e4afd91abd45b6659ea8f5dd563ab6cabc727ae226f9d65913f75157960b645fecc55e4415916f973579107675be42f5c471e92ed91bf741db934db237fe5621eea1f79bd46476e739cfd72ac37d89be055d82d3c83ed3ea7db7f8fb01b819aed3e27fb6f09b6fb1cb1e095a5de2cff3be61563fdbfcd4fabec77eabc4dbc89fe7fe3ec4f2bfc23ceb49b709ae346ef19e2ff5ded1f75aeff778537d47f579937ddfe86e0bdd1c69dc1f6a255767bd1e49f04e52bf2cf7062336751eaff99e999cd3ea3df3ede6e6f1a1e33f9a83bf8efaaf28f93491dfcdaa53e2c95fa960bd4c7f90edb7a83fc1fd5fb3fd8ceffd3e0cdb65b924e4b942eb09c627f32d11be9ffacdc1e68cc02bd3afb8a54c70bbe87af1c683772cde4ccbe719dd9f05467b6a9e3cc26780d7603d92afb77b06dac29f508ff5fc1db8d78e34f62b437c9dbcbd6ad86263f331bcdd678664bda32df299333fad6754623529d51a1e38c5cb6d1794db0afabb3b5d4bc3a7767f09deb0cb6497506833dcf793d05a5adf14b3ed12f7f85ff5ff00999eb26fdeb30f927ee9f65728edfbbce71db54e75849be8f35f89fb4d9e2784ae23e657eb539ab32bf869a4f307dabe6eaf4c2dc797e70398d4ce534a1d5eef7cd0b65eff0a3cb61542a875d880ec3b2ae2fee1a9389c84f2e91ed52890cf4bf9ce0ff7e73fdcfb5cfcc29b63c9549bf1fef17233cb32d78b5dd08bc2af109b77c84dcdd057f769ddfe854e73724e367aeb9878ff67f3263c13336f5d90d4bb45c3867f98beb2cc7a43acb91c47a6dbebbb7fd35e6ac826de0ab12cfee7dfcbf5dcf8d85b99a7f759df5f6a9cefa0421add871f60835f6f599b463c725be1bdc195ab7253bdf253f36957cdf466d8ba8453ed03fd73a2b1338965bbbba2665c436bceb27d1b1323993df5c67322ed599f46f74267835677f2ea98f96c9d9fcee3a9bf1aebb79ea92e11d7ca4bd16eafd3a34d5de979a3b9ff4ce73e1ef737fb8ce6f42aaf31bee7c5a05d74badbd5e822b64e13ebdcc8f9ec9d9fee93adb1d529ded1619d4cda0b59aee2799ebd6e85faef3da319d6b0eef90d95f73a98f96c9d9fced3a9b9d529dcd56695d732df5b232bfe6a29f64726effb8ce6d67d78885fb3ac7f333d78d69ebceb52dab29cdb40b928f91bb3bc9bfae33db25d599addbe8cc1ad7bb68e4a5d2d6a406ff5e999b4fe03f5739774d55ce6dd3aa5dc3fcb2575a73d38209efeba3fd7f97dab69b395c6bdee54d9874ca73de2dd5396f90419f24fc9c66245ae3b91a8768e32af1eea94abc7906cfa5e4724f71f422d2ef736472566d5d67b5c7c28d200db5f7e6e9b6e62ddc584874dde5ea935bc2758e13539d6389f393336dfc49fe8bc2731d69fbf5a5b6bca99e48b97ea6b6739dc79eae7eeec2de275af3ced0de759665a9ce323fed7ec7b016db43b9b8977770957e926b4c39ddf65ca6e55fd83b4247d71994a73a837119dc99831a173d7f82f7a43b5a14e78852279741453a9f6273add74c3fc585bde72de93a83ca74ee15ae9981549f5df633030bff392de53acbc9a9ce72505a77c471fe8b27d9d296d95ad5baadf3ceae339c924effb0b99a9859ff30d7a3f45d5ce73535d5796d96f65d3eb3b3727f5a0b734e4bbbcea96ae147665abae2e27c322fe33abfbdd2b9a764f23c70b7a2f8b3c25d5d67392d9dde18a3459cfe592fecd3a29beb9cab539df34ead7cce6c8d655d1ad353690c4df3d939c2b657643d3fbbbbce7446aa332d4deb8e35ca7f71b57d6e867382ee919fb89ea2cbb9ceb3269d5e6ee367cc607ba64d3f3decb9a6f3fddc3e7d96779d636d3a4f9fa6e718f50b4d39cdeb4ced32f3628d4b3bdeff77adfd7e7a67b77063b02bb8ce6f6fd7f84b73e717b413a237a4ffd4c9eda7b6a2ebacea529dd5ae39ae99aeeb2fd3d7e7d6642597497d3a23d29ca7516e9e2c2bbbceac21d599157b0b1371168e2356f9af1d65dfd1e085710bb9796aace23a8b99aeb67b7667d1f8fe931c8b919b73eae13aa759a9ce699366cf69825fb2ea46e751ea9931dff099dfd27b3329f9aaae92cf4ee7d996fa199e4e5b25ce9e474fd739ce49758e058dce71b06d7b04b11c61df63bcffbd965a19055edf1cb53f5673957f6eaaf2efeca85dee08a5e069967c5d6472cd6513d1b43077f8d55d1efba433be96f9e7d95cf917ee135dc37506fba63a8323167ca2f1c42525d794e4d8cbcccae13ad2783bb71bdedd982345bd5cd2fba592deda6b3c3f3dd7fe2bd3bb5bf83ed7777375675bd37576fba737fbdef4ec5a1a4f89ebccd6729dd901a9ce6cbb8cef79c352dcf332bb8bb1564aaced3af303d31b3f886200331f3fc0f841f74f72f519afe33ad383326909b6f4190711a6c13d2f88720cfaa4cd47590ef17f323311659dc939adeb3aa7835d6df4749e4dcdf963499bfb4433398bdeaeb33824bdf99fd475b0a538c1b8ebdf7aaeb33c349b2b2dbd19a0853bd785fd3cf35c677a986b9c20db18f7b8da8f0bffe9afef32393c95499f66fb6ccdaddf72af4b5bf8b26fe02afb11acbb4cf3e3190b572b37749dc591e9450fa5befe5a5e7f16e795b791eb1c8f5ab8d1a8e0b32b4f391a15ef3cc7c6ae333b3ad599add3ecf583631ea9631c16b6949bb84a794caa520e4bb38ea517f714f7f3ac8feb5c8f4de7aee0aa6b66e4acca8ea1353ffa99abb3c8779dc5710b37835a9a68e1ed68ef094da36ed39b350be32e83f577f56944226772ce05ae733e3e9d11aaa6e73cc29e73a537c7bff22767f4b92ddc7846a1abfc27a42aff862d96df3c8d06dbabaaae9988cea6afc8a4cc45ae329f984e0c49a6e66159b93395c5ae733ac9350eddbce7c2459d85c7c9a4e425ae929f9c4edc66f81ba356d7767685db242fd5387ff459e4eafaedeb2afd29a94adfbbc5bac45b2dd0cf55d2531726e66dbc6756688cb19af5295b4d2de7dc30e3924daf9785ff2cfabbcef0b45467589483b67173f1970bd76a1ce03a87d3539d439ee78aa20dc73b926b5543e2bbb92aeda6aed29e914e3fdabd2ebce511abb8a3bb36739de999a9ce74cd349e7375f6b3c8556b777357f9ce4a55bec6ab6e9bb6764724e64f27db9fa4336a982be92d5c6772767a2da25467b29dff86ed622aff96aef29f93aafcc35bb8cfa61e3f93b31e6b2bd7d99e9bce8cdc042853b66d0f3c562667b0b5eb0ccecb74e545d8eb083f97a6fd26cebd69a0eb0ccecf7e96bbf9b96cf7fc7726e51fe42aff05ae5875f75ca43babc4587b0d053186c94f45f3ddf2c4bc65d3cf6ce13f97c1aef3bad0d52b4ffd2c1f65cf62aa7f2f0ee392aa6d999ab66319e358435c677151aab3e89f618b24184da95ed032094a596effd5605b970dfe816b737636a5aeb3b9d835bb98de6732d88e034f6fa1a4ad391e39d475e697b8ee73e99df940ff9e966a8428f76730cc750697663337d5f2daa478c7f286bbcef2b254673922cdb3cc24ba3ade7a39c275be97a73adfadd2ae97e6eb39ad7c6edbb8ceed8af4c636328d577245632c5ccb685b57e9af74953e93f5cf99b48d1626fe67a4abf4ff4b676426557e8a603420f7990a47b94a7a95abefb6f071b115760cbb36f1aaedbcdce63ad8ce752657bb668652b71eb9dea35da5bc265529d76fd61be7af58e51de32aefb5e9abe2c81da794dbbb4a795daa52aedbe2738b55ceb1ae725e9f4e399bf6f7b22f6747ffbf366d3afbff2cb59f5530b25a63dfd3e01fa7cfc6fe8fecfd35a8739b2ce8f96c92d4f789be6f7ebf1903377730137119c4086de4f56ae10837f8041dda7ac1ffd66b63f8cccddc2cd26933b99144f0ce6a7be428dac5e4e5353df7201ec4b43336f1eff755f65d7bfafabbfaffb57416a9e249cd77539d5dcbe7b4bbff9f7995c97a576e7b4da6fd33c9af031d1367141ecb973613238bdc99de683ed561894fb56d1f13d06267e216a636b55c8a9bcc6f5b22751d5aa9892c5e1da9ca1e1c207c4eb5315be7990b2cdffeff04ffa81589c9f8ededf56afe54246eca2dfe6ebc9653fdee8ded01c2556a2d1e0e07a0521d6e155be18220953a2f186cd8afdaf33ab66f9b6f3e939b99705d2c9cb9174cf32a17ccefd7d9cf5403d42b2322a85b98506677a7b0b164868c6abd20dc6394ff968a74ce4e0056ff8111d6ad4cac656dad8aee6233bc20b37c8d3de488446f4003d9ef9d23b2db98643d93ee608de9f08e36dc763d2aec63c74cb216aa806cd72782bc9d09b9345ca8c3ed7dacc25eb065fedf7355503db14b447507fb9e367141d750e79372b77d23ac3b9958ab5a2cf37c0c72ae0f4eccb999ba66e60ae6daf169b58f867111e35dfc06c768cb5865796aecc08f198ed40075d8f911d4dd321f08052a20f7eb1d41de135fdf2058da3ad0bfcf55d80edb288b57662fe33a15709f8c89e0e631e1ba7ac99daa19b60853127d592d5c8ff488b8ee8da32b65de3225519fcc21b4dcd9e6954550f731a1ba25353bc2bfab13f54a4fd3e3acfd22b0fbf9dda9e43bd838ff0da62066a069a89aeed490e111d9034cb2a52c5978f9454d0d0d48a71d17213dc84432fb5c865da5c69df32854c6f40734b0edd725627b887dff4adeb3265ae9382ed10fd000d6e9d608ec61265877b87fd57bbac7d0f68331b447f8cd89e49b7eb04be3341550159511d4a3fce6c438bb00b9d62e499e635bf815de2c2f4cf1a401cc8331ffc798601d2c98797b1047a70167e4d611cee371ddabc2cb2e0a541967d11a94d4a8d39e89d09e60a2ade885833a51c73ad8a7d0ac1330e312385aa6a33931e7aa08ef49fe8d3e482a68ee554140b29e66c449f747504ff187ab4d2d339dec32fb24c47aa501ab17f4199f6662999dbca3745a2654bad6bed8048e44cdd57a9faf4ac9f8c41bf00878863ff2ea1ae98fc6fac3d9a5a87759af02f2879d23c867650e6117a9807c608308f2b9b81b25e33c93e529786468ea407d531aa13dcf44ebe4054108f5b600c156a61a80fa5f1701bdc004ea688166c265a881e72018b57891dfdc082f3a7c08e819a27e614884f5521c58058ab10e823bd3cbfc0b4f5b3bff3ce079853fef38da469846cf386d2dfd17ae88b85e65073c358ea8d015f0547d4244f51a7ba830ec14690e01c8db36027b9ddd8b6caee13932d17030f7301d756da36111dd1b71d5b5e8c2d457d73ed926027b33eef88930384003d43b7b46506ff1e7b6c3a0395d73dbf3f68990de8e2b5e5feb40cdb53050f30e136be5166ef34153d520cef4c2754e1a00ef849bfdbbfce76494d837782a46f50d3175d4bd4eb0b0e63d766b3fbc50f5069ff487e093f7e36eed07b3925aa6729f3925a2fa803f6a9adca0d01a7632677284f6213f5adad4afb0ed352931d5b68bbded572616236b69be8ed93582fb8809d739c58519641ad6c0f4c8e911d3c7fcfb57e3567e99dd6c48c7a5387c5244f549dc61735a9bb22bc39ab64fe35eeda1b9fb5d0d433d9ff1ef5fe68e556f9baa95aad6e99a2c1821d3e7fc8bd23c0987d85fed4a2ba801ed91eb23b42fe21edad114cbfa454504f5251fca3452831453a67e85b77c0d50b57b45505fc5dd0d2af54ca6d81a2537f6476021e9d74caa55bc54c91830fa466b7c6ba7e723c26fd80b655aea14cd51f3ac1cbf47c4f62dff220ddb62e6aea66df1685ed788ea3bfe9cf760db3cd59b8de7b04111d7f7fc567e8dbd2083756bee04cf2ae06e89e07ee067b17007356dbf604ddb504b59bde04ea781f1efa911e38ffcced2e005eb8baa55b5d26e9c1631fdc49fa90cfb91a6b655aaa94bfb8d8d907e66d7a56802a41e2e410d4c6f6c1531fd12770c34ee1a1ee691d780d6737a84f62b7f6d64325a78a7d234fdf1405504369fbf922d79a4a271d769a0dfe734bf444be0e641f054fc2dae90a7c66b8e340df7ccd9da80756cdfe8e0439b1c7cb0b770f95f33537667aa35bd06d3f30c99cd6cb9393664ae3503a3e24afe3b669ecd6b66e8392fcd549279698411e46590ef22af85be6b5e1ac991f2b24ae195cdbb8bb27a7761e21349dd26c96bb27c3c2fadeb3e2fc31589796d5acab89a97765e89bc34bad7796d5a5aef11bdc2b5c8212f45647f5eca864baac55b791946dbe62d54d8565e9ad984f2328c69ca6bd35c2ae1bcb4c261f3d20ad0cecb688e2ff5abddc7767559f2b24800995c97534de1e665b5e834f59590fa95cda747cdcb28fe232f8381d1a87ea48aef4dfd53f378a9b1f782e6a30652bf3bbaf334974a252fed30a1bc8c1b8779590cb7e4a5d5760fcf2df58c515e33e314e1f19bcf9bd2f8ea693eb37aea7b5daa4e5a9e338839bccbbab3d286af70270208cfadf9147379ce2461792daca949fdf3280a2faf9960a0f0134b9d0135f591a389adbc341647e5659c8e232fe55ad9bcb4e7baf3321a8fcd4b2b8156f82cc5e5a9a15dea5c19a96b5faab9adbc859c138b36e4c04676b49146bed990e38fffe77b65e49bbd32fe34085fb50f10829ee75fcc9ee7ea894fbeca9ef60caf3ad1266fbae954705ab589a7d30cfb1cecdbb83c3d9b9467ac5f156678e16e8461ef3355c9964cea9fce4fe76417a68ffaf61251a7fe6ffedc67705155d81b4ef20e71b5f6a6675e4c43ecc3421cdb3642fc278e0516583ff180c9db8a4df4fa37cd80913bce15589c5bb78b38ff95c4394025e78ec0f99f24ce02959c43e08e6936d812c359a892732e70b691c459a492f322e06c2b89b35825e74bc0b98424ce12959cff02673b499c7d55722e0f4ff6f69238fba9e4dc08383b3039cd8051b9ed03995f6d8a9932bb51eec8fab2c8d6f222b28e71d4c029ce3a88c5374d75626fbc0b8bf39136116727499cfd5572de009c4b4ae22c51c93916389792c459ac92b31f707696c4d94f25e759c0d94512675f959cb3817369499c052a39ef8286d23292388b54722e09b5b3ab24ce42959c9f40edecc6e45cc96bbe2389519b06b31f0fb3431b12e6e7d08d5c561226b166d2303f01ccee92304b14623e0798cb49c22c5688f914602e2f099338f446c37c043057908459a810f33ec05c511266931da515609e0a982b49c2cc5788791260ae2c09738042cc1f0173154998fd15627e0b983d5a13735ce25066328d7c99d3e2e166b48f30579584497c00d1306b00b3a7244c62d38886590798ab49c22436da6998b30073754998c4ee240d733660ae21099338d041c3dc17307b49c2240ec1d1300f04cc3525611207876998c702e65a9230898d761ae60980b9b6244c62779286f92060aec3c45cb105cce4c95ee2e3a7078bb216c25cd7954259a492f207a0ec2d8592da28a251de0994eb49a12c5149b912dc2bf3a45016aba4ac8681b7f5a550f655497917d4ca0d9894ab2428abfd171946f3d20adbf4496e1445079dc81cc7ecc802ed0ca01b3241833c13f55e908120756e1c1adfda2cbe815ec4b711932f4c78d4cfff53e9cdf2823515a6c086718e17d3fa72da85bd1444bb6dcc840cb2824cb5f95fc6d9ac38266785797b98878786475bd55306b57013265e982acd1d2a88136503bd3a5b1fe7da5e0e8db51b8bf50d60edc3af9341e288200350415c17346db67125b8a0f3d98d9ec98d5242e14365b4bd5bd6d943a648e2aae0213318ea610193d2e4eb99697f38d61ea0ccabb5476eb20341eed07ab2d03604b4427ec326b878ab1699e7f11fc057c4e4ebe135edb3042996c67943bc6dbd41894c6dc1f78245a4d43c44b485a43f4037b0388e80fe722fc891d5d06cafc52c36214e33d07a2eb32023518924ce7e2a390f07cebe92388b55720e05ce7e92384b54725602677f499cd4295a1ae786c039401267914acebec0b9a924ce7c959c6f41d77133499c052a399784dab9b924cefe2a39cf07ce2d24710e50c97923706ed99a93638d39f551e6c1ecf756fc9a99bcdbc5446f9ae51d9418820b0e66764830b9d49becf6a660547d5d2fe2dc9ac9192432afb6031d0df650668accb14b978230ab5d016e20130e771929b343bc310dbb2dc11a35ff1de80631e9bad8a3d525329e9ba4fa5312b33a53145eaa5b01dbe038666afa367a94c450e77ab3f0d680c7c690b82ed7998981dc582e57da906e09f4544a9974e1de22aeb6e020ffdfe65fd4860bad065e0e97efd0d6640ccf94cad889f5f0f8101887c57121e72f32cfdd77806e781c61f6e975eaa859ff68fd900e70571c21095363ff7869c0dc4612267105220db31d606e2b0993188b4bc36c0f9823256112576dd330db02e6284998c455db34cc2500733b49981a23c4bf85a6d16849981a8768bf07cc319230896b636998cbc065bebd244ce2da581ae6728039b675e7618243050b8d35e606daae5d44392e8e454a99e495265ee8b4dcbd93608e70bc3450e2c54e03dd0b4027480325762c69a0bb03e80ed240899d4b1ae81e00baa334508df9cf2702e84ed24089037334d03200dd591a28b1d94403dd01407791064aec6cd2407704d05da5811207e968a0bb02e86ed24089037534d0dd0074f73896cf9bd0837a2f5a1c1a4df8ea5eaeb715f4def7886bea77d188e1e80374135b73e02339c7b4c6dce7c51049b4671c711ce6728eb261843f8ea946d286e2bef222c6b2382ee6a245e662fe0e2ee649ad9b09030f1853268c792cd64a602d97b3e6a150694cc70a709fac90c4a97335631be0ac94c4a973356367e09c2c8953e76ac6cfa18f334512a7ced58cbf01e7d438fae0aee7fb20ffad357696b2ccff69b0008f3817445b3b71366400ac92064a9cada4819e05a07b490325b63e69a07300749a3450623f9d063a1340aba58112c73169a04702e87469a0c491761ae861003a431a28713e9d067a3a80d6480325467cd0404f05d05a69a0c4863d0df44c00dd5b1a2831e283067a0680d6c5318c5cb8c80c23bf0ee39df54cba307968302f6932519b03699f8d3cd38bf81ae298524b6fc843e3ea8b1aa09c29ebae488d73a7dd15bf681781ce9206aa71b8e333009d2d0d54e370c76b003a471aa8c6e18e570174ae34508dc31d6f02e83ed240350e77bc0ea0fb4a03d538dcf10180ee270d54e370c7bb00babf34508dc31d1f03e801d240350e777c08a007c631dc51b2c80c77bc0bc31d0731e9c2cdb74c7dabb09bcc94f97fcfb58709863ef4d5bb9dbc08ef60269ed99d67aabd482bece55a67c30aa7301b3cb4adb53a01da21ad81a6713fb28e807668eb0eab0587d2bb44ff46a03cac3583fe87786631caa40425b13378463b12e55bf0dc3d3c8ee76ef122f3dc2d86e7ee114cbaee5e34cd30dd0b378d9ce2e95f2b711b5cc8473209cd1a38f34bcd9be67a61726e73f13628bcff6d0d6c47c5b14e22d35512d4fde769eb24de85d0e9a325b216a8643d12588f613f62eaed5b2aedb7867ac9fb8aeaeb9dac0a17fab1713c9dfb2d324fe77b81eeb83802f7d31da1e9af727c6604b4138f97c4a933ba6717e03c411267814ace6de11173a224ce42959c0700e74992388b5472de049c274be2d43955f011709e2289b34425673b78149d2a89939aa98dc6b91a709e2689b39f4ace42e03c9d3dd5106ea935cd3faf323bd160468cf48d0fade1456867b4e6544354f46003561a252d18ba3b0cf29e19472cb9a1aaf0ccae8bc1984f2cbd705a4d5c1dd67b9f15c70046df456600e35fa8796733e9566ae141929cd98a9a778096dbea40788c9c230993f84ca661ee0798e74ac2248e8ed330f701ccf3246112e31c6998b301f37c4998c4d0001ae624c0bc40122631648a86391a302f9484496c94d3308703e645923035a6fd1c0298174bc224ae4fa4611e0f989748c224ae4da4611e039897b6266672c424f532a7f5c49f05cccb2461121f4034ccb701f3724998c4a6110df31dc0bc421226b1d14ec31c076943ae948449ec4ed2307702ccff49c2240e74d0307707ccab24611287e068987b02e6d592308983c334cc32c0bc461226b1d14ec3ac04cc6b256112bb9334cc2ac0bcae35173a254fe4125b99b489dce9103574bd14ca2295945f00e50d52280b55529e0494374aa12c5149793574236f9242494d6843a35c09286f964249dd74904679323cc16f6152f6485056fb2f328c337c090358e1cd69069538924923bd1c6ae7ad712cd373ef1285a3ecb8508f38d841cb4fd015e28d6e6bcd8b1e0f3791d96ca72d6b3e0f9eeab7b3973527e7c718ecd52434686ccbb0d8cc2143b63be2b857620ddcc1f718ec1f6888b7ad37c87fa1df934d7c6f82178413126b222d88f02678fcdcd9baf74a2c3ede2b898fa047da9258674258eb5d4cd6d513ac0dfe655ee5bf74e2823a596143aec3bf07f92f36378259feab82fd71c99dcb9eac1a7b2fd0de2d9596dad9a4d17e014ff87ba4d252479768b4e5403b8f49bba4e7d917985f6cf6cd1deabf88f8acefcd025b119ef5f732c156b575d124ab33c73369ea46f92f362b2c267ad36c2d1d9458f3131cd2809ad517150a51f300f53ef66229b3e5c15cff0de5de48ff8506b09289465b61b63da0dddfbafd1e9cb0d038f7f330f4cc1f8863ee27bdd626b5e9de85857932d4cb072561126b260df340c07c48122631928386390b301f9684491c76a361d603e623923089911c34cc7d00f3514998c418231ae61cc07c4c122631629886590d988f4bc2240ebfd130a701e61392308911c334cc3ac07c521226711c8886391d309f6262f6f23299c218e305e924820ceab5febba8cff72a16ef30e8603e1d475d2df7522736699c5c47e3c65a7b415d7d4612a6c66ddfee04cc67e3c81393efff996513dccef4624b044ee3eb01e3e7cf31f9966fb12eceb5ffa23e7e6803c0c701e3f3fc0160336f6346d26b6033187d756f0fb8745f60a28579fccda53bdd5b94f2f83700e18badf928c1c3917303d330af878bf8254998c416230df326c07c59122671ac9286793560be220993388a4ec3bc06305f9584496cf8d030ff0798af49c2248e08d130af02ccd72561127bd934cc2b00f30d4998c45e360df34ac07c531226714e9c86791b60be25095363c8ff1d80f9761c03bfe13a1f130458e6055b108eb40369b58be058654f18f87d87c91b6655cfb7131595b6ae9ae256598d32fba67d3c13e9665e156c29a78ff3192fe27c97c9b986e79aa6482fcc9a782ba0c502bf0775f53dc9b8c487160df70dc07d5f322eb17945c33d01703f908c4b7c84d1708f05dc0f25e312bbac34dc5b00f723c9b81a17b79c0cb81f4bc6250e03d2701f05dc4f24e31207ac69b80f01eea7927189532b34dc6700f733c9b8c449401aee1380fb391377152f793cc1bcd1cce937973544e3464e3f414e862fa4816a4cc3b23f807e19c7f0210ec90cb7235a15fe6d208c40a9573d20732a0c1f7ec5c4ece435ce1852cfe3a2e5aa69ef455c5fc7b1927de11e3d1a9fea6bc383e79bd6cd188207c48c21c4e7f93c16eb6170817f1bc700767a932da659af71ee6a4578f87c2789933aaa4ae36c0b9cdf4be22c52c9d905387f90c499af92f30b4809f4a3244e6a866e1ae7efc0f913933348b356ef055942a2a6ba398c89756ef05f6a9aebb3ed21cca6cb81118d9496f862b41791fecc245dc74bee5c9acc35c66196ffc37091977963d3babb284401ac0e6dd35f98cc26c5a1f9a5b55e9032a831ad3eba35a186fecaa45bdaf3165cf243edafdfdbae50325f135787d02eedbe00373f8eae66befdfff0efa189f1a3e1497df61130a6441ff4a08d20fd08b4bfc5917929bde7bac660f2fd81f277f69d31180e19e71bd4db27b9f96a174b4b7c76d3ee8c9380ee8f3806865dc31d4d97c1f663c63fd140b7819cb37f4a032536d869a02300f42f69a01a176b6f0aa07f4b03d5d8301f00a0ff480325c633d140b706d07fa58112639868a05b00e87fd240892d4e1ae81000f53a090325c62ad1400703681b69a0c4994c1ae870006d2b0d94388749031d0aa04b3041bbfa5fd4da5f1bcea6fb97879d5337df33c5d6378e54e94578ed9878cbd9da1884c744a3efa912a0d31069f96d8e8559f4f64cc430e4301c672f4faa7de18e30ee31248d2b95bf84d1f50efc1a1a8c70d6dad0ad60755d8dbd3bc692098776998f81c9b58e4cc4302a2e9de01993b35b63be91cfe081d34912a6c614191f01e692923035a6c8f80430979284a9f1c1f31e60769684a93145c60780d98589d9f2a45a70a8603b13620792f62c7f129ee54b33299b6ee358bf20e980be6ea2399b906d19265baae0ec0909b6b95ea93d4c959d951cec1f64ba6d6bce4834e1a9b9bae7b3682f85c0c2ae4cda20cb6c55027388fdf595f600510a0c7d35b31c6a663726df52fe17a6873dc9179862df5c660f4523a32d07d802c89665df036bbd284df9382f584551ce645b9bc5b63cb07567b2aded250f544429794bed808579e360cb6a8ab568ad406b034d9de598c8615c70fadb8d69dc08e23e185c5b5e1227b58b48e3bc0c385790c459a292731be05c511267b14ace7ce05c491227355e83c6792270ae2c89b3af4ace32e05c451267814aceff7911670f499c452a39ff01ce552571527377d138df02ce9eec380d330234c6ce3936f86f4f1ed228f3c259c8b1b66833fdef1307e0cc2a510ae85d306eb95a9cb3e4c118d12cfbffe162bee6068589d368b441e1fda1d3b9ba645ce2e4050d771ae0ae211997385c42c3ddb45d84db4beeb83c7185066d5cbe2bd0aec98e8c9b681b4ec9c09af77eeb09931a6b31f1564dbb5e8ef6dfbc97ff77b9479e297a9ed506f81350d796884a7cf6d350ff00d47524a2129ff934d45980baae4454e2b39e863a13507bb7661448f2e00931ea9d36cb7410f4a6d68b8332559ec3687f4dcd590ecf8461bd3c26658f1497ba7b77ec309c9b78f7eccb223d115a9eeb33498b525ce8c9991083c6fc74fbefe0444c6f6ab2cd51630a9b9ceca7d4f6b6ccabc6dbb66b58e38977db27db903e84a3a05e6fc0fc105648eb6e6beeb3d4da4c0b9b5806eeb51b4a8124d6481a646780dc480a24b1c94f83ec0a901bc731d6ef0ea7c5d86403aa7111420d706e228993baaa9dc6b91f70f691c459ac92732be0cc97c459a2927367e02c90c449dd8687c6d903380b257116a9e4cc07ce22499cf92a39ef863e50b124ce02959c3f006789244e9d8b5f4f838bbdaf24ce012a392f05ce7e4c4eb35d49b490c6ec6f3c85c7455b44b3b91771f58f6308d9152e965cfb88a3f1b49a77324c6c0c882388a1e9c29a45353e64140c256fcaa43529a28315490d49ab94c859693664c1f580cb7b33490f97beccfcb1b44b7c0e3c5c3697c4494dc7cbbb6302e71692388b55728e02ce2d257196a8e49c029c5b49e22c54c9b931706e2d89b34825677fe01c2889335f25e76730a831481267814ace2e503b074be2ecaf92f322e01c228973804ace7b80b3348e9e7a8337d533db332dfa3baf4f05daa152690b54d21e028fa86171e4a24bbf2fafef16709c17610e978449ac9934cce3017384244c8d99658f06cc6d24616adc7cec18c0dc5612a6c6a9b5230173a4244c8d697a8f02cc51923035a6e93d1c30b79384a9314def1180395a12a6c61dad4f00cc31923035f6db4f04ccede3583a609606542e580d640a1c6d6d1bc3ba76dac2c12ed0951ccb4fd61b2c1c8c826562e2a3f5c40f827a382e8e9c0af976a023386a4c789dda90f0de03bcf1ad1b718461311ab3c0dfd02ea29c10c7fdb06411bd1f7682fbe10e71ecc79649523f62b3879638ad270c03ef280d94d8f4a181ae06a03b4903250eb3d1409705d09da5811287da68a0cb03e82ed24089531434d09500745769a0c4e6120d746500dd4d1a2871d88d06ba0480ee2e0d9438f446036d0fa07b4803254e59d0403b00e84469a01a33227703d03d2581162a055d0b560d954903d578c9af09a093a4816a7c28f500d07269a01a9b4df3e11e5ac104ede9252f1434092467dbd56c81c8a2b5e7d6b7504f2b99acbdbc4c52f88df1a29de306fa25a8e2f256b178d706dec9ec3598612ac9c916b761c1b955f0e0dab3e0ccff42b829ad39e1919c3b96d883efc09a3bda18263ca6c6919037bc73d6f83571b2bda89bdf4b58e3e2eabd6167832a398b0b0abd6295b148cbc07d722f499c252a395706ce6992380b5572fe096dcf6a499cd4a63c8db31dd4cee99238f355723e01b57386244e9d61b1df00674d1c7b1635ed11a5b71c8b38234f0b023b0adaa2b5927189f12334dcfd01776fc9b8c4013d1aee48c0ad938c4bbce7d27007016ebd645ce264090d7757c06d908c4b9c38a1e18e05dc99927189d15134dc99803b4b322e31968f86bb27e0ce968cab31edc0be803b47322e31c68f863b1770e7327197f4bfa84d9a89aa63e6aba5cd428df722b07de2de293693e42dfaeae2e63096b56f1cf3fcb89bdc385fa3d6abb56f6a307d14ff5fe5deb40513811af794eb09ab4af68b63342bdffeff60ffdb333cb375d9342fd8c778863d5c8dadc37a393702cefd999ccb26380bfc3f33ed8b8203c4b4ca89361cb8220c071e10c7aa4f03681688058f9d98f868f3a4f7c3a3e7c038e24bc2c9e7727b419bc2ccb2ff327b16260f570ff20f5663a7a0cdcfa9d3d0b4cbfb67680a1dc4e4ed6e79c32cdf3b7861f2f431fe9f7aafca9a987ba6be1a3a016ae8c1721b471a47fb3781da79486b06f10cb18c9312f126c4defa19ed48941321dee45026e5325e738164f53cbaa558b5b02d5ce087c5914dc4550b93e7474b54a666b919eae1e1923035a666b915308f9084a93139e5f58079a4244c8dc9296f04cca324616a4c4e7935601e2d09536372ca6b01f31849981a93535e0498c74ac2d4989cf24ac03c4e12a6c628bcf300f37849981a93535e009827c4b1762e1d4c3399569718e3a46ee03c8fc57a1fccfd9c2891951a524363ad02d693e2183572c533272f9cd5b86876aa17519e1cc7e445b137d18eb757fb12b1655deccde2bb14f84e897b687882ff7795fd1da5f630e667c1cce4743be56bbe0ad623136be67c166d095ce4a7326957f392e7856a1b4d582c6a0b131f8731f7d3a4c2121b5134d85da011757a1c8109aea77de379cbfe4c4edacce5e6504fcf90c4394025e704e03c53122775b5078d730b783c9d2589b35025e76ce03c5b122735b9108df31ce03c471267b14acec781f35c499cd4d1261ae7afc0799e24cebe2a39bbc093fd7c499cfd5472ae0f9c17c4c1996e62b6012a33823f00f1c5174ae2ecaf92f35ae0bc48122775e69dc6391a382f96c459ac92b310382f91c4d94f25e7e9c079a924cebe2a396702e7659238a9eb83699c577b11e7e59238756e9df22f705e2189b35025e707c079257fdd65bd7f08b386285af852eacdb1bfa1dc1eb8c24ed255f8e71d08e99bde1803a0ff6bcd809be484abc5ccf0595acad5c930577495244c6260370d730fc0bc5a1226317c9686b933605e230993f810a2610e04cc6b256112c36769985b02e675923089317434ccfe8079bd244ce290310db310306f9084498c4fa2611600e68d9230890b086998fb01e64d9230894b5b69987b01e6cdadb95a3d79ec88d8ffa1ed2a73304c01df228592baff268df217a0bc550a65a14aca9781f2362994d4f5c134ca55e15e79bb144aea58118db2160212ee9042d95725e5d3502bef8c6341967b8c1d1b44b8248bd833efc662fdce8b58ef8a3b9969facb60a8d36cb4853097429dbd5b322e71b493867b19e0de231957e312ae65e1c1354f322e71cc8986db1d70ef958c4b1c1da5e12e07b8f749c625b61668b8ab02eefd4cdc1e2970dd3bca4eb087a126ffebcb22bd17481f90b3c3570137a29e960e633aa4f47d50122735a29ec6b90f703e2489933adb44e3dc12381f96c4a933f7cd04e07c4412277525278d7315e07c5412277525278db30f703e2689335f25e75d1002feb8244e6a2794c6f92d703e2189939af282c6792a5cec4f4ae2a4a6bca0715e029c4fc5b9b584e95406b42621bae9b9cf4cf4d85dd329c4e13dda64cab5d0e97c3a8ec914dcd928d856a2c1163b48295466dfbc8f6762ed356fc8f3ac17b13ec3645dceffa2cc3ffb06ff2543fd7f55f92f9be4ff6d36881aef7f6fa0b783cf6c7638d287580c88cfb6e69c69f29d5463d6da4a088a788e49d9d5ffc22c9d996c6b65b5ffe6ed6d924073c060704edfc05c3ed4c3e7e388bf339b434db5f9172a3c9389a1ce16dab0cef162cab6487be078d0da7c815d13a39ddfa24b3b063cde6eae80f722136fd51477c49647dda9fd1fdae57d1b4c1fbf241195d8aea4a1de02a82ff373d2d67bc1cacdd1de6c3bb556e7377acc03a8deb624f5357db68347ce2b71e4a46df01f3855fe4b33d9ac8cba449b760ffd0e3a94af4aa5a52ed7a6d12e07b4af49a5d5b98f7b153cf95f67d22eed7f5167cf7e90ffffa63b59e10df74c4eb0691e715f38da9d7439b893bec1df3b3368bc4fb78df7323bd011dbe6b8bc6deea1eebd1947ff27bd11cdbe2a3730db0930df9284a97103b33d00f36d49981a37301b0398ef48c2d4b881d904c07c5712a6c60dcc4602e67b9230350e058f02ccf725616adcc06c38607e200953e354efb680f9a1244c8d5b384f02cc8f24616adcc2b902303f6edd99c8e050c1063bc467392d035d19041c7cc24fe99759fe4ee2854ecb91b8290cba7d2a0d9478b1d3403703d0cfa4816acce2b92e807e2e0d94d8b9a481ae07a05f4803250ecad140f300f44b69a0c481391ae80600fa9534508d7bbcae01a05f4b0325763669a06b02e837d240890d7b1ae85a00faad3450e2401d0d741d00fd2e8e48b97ef147cad1a67d7b41c0ebf7add9634fce99a831cbec40a0fc8149d9c552ceb651ec0dde50fb42734013d8a5af06eee8456c3fb66e9a2a3c604c69aae6b158a7c150dc4f7296571572bb92b491cde5e0e2fe591267a14aceffe099fd8b24ce22959c4b42edfc551267be4ace97a076ce97c449cd3b47e3fc05387f638716868bfc82629ab0c21976b5a459e0a7b791d41f1a49bfc7d1c729b4d199357631554c7199bd5978d700de1ffc3516c1522a7390327ba098f86875ef416849fe29a78ba8718782fe30a9fb179372432f79917eb90dea37c530458e56ff34b7b06a8cff4ed3ff31af1be897abcaa32eddaf62d5dfbe80fe771c036eb8747fa0af51e1995515a39ac4ba9317edd3e2dc77851bc23f712c5fc11b42260b58f4d1f68386fcbf71dc6bd36d79ea6b75ce85a7fe7f710476e1655fead7c4e05e3bd88b12a2d02f79da6af42980e92d19c33dd4d50618e499255626accbdc4d830110e24389d6a8fa12d6fdb691046a52f1119b5634d01be129df561a28315e8e067a1d802e210d94f86ca7815e00a0eda4816abc879e0fa0eda58112e78c68a01703680769a0c436280df42200ed280d9438944c03bd14403b490325c61cd3402f01d025a58112233a69a0d700e852d2408931c734d0ab00b4731ca0d19869cba94c890f255a5ffe011863ea220d94d86ca2817e06a04b4b03d5986cf702005d461a28b1eb4903bd0140bb32414d6862e582b1cf91fe0ba724e2eda6287cf46ce9456cdd986ca9321eba663e313091f8f8a1ed9fb913d4c56525a26adc94743740ed2e1195f818a2a18e01d4e524a2121f4534d4f180babc4454621f89867a14a0ae201195d893a7a11e07a82b4a44258e37d1500f02d49524a212474569a88701eaca125189f39f34d44f007515266acba138c1a1f4e6b279c08b287bc441e9aa9f436cff7e528292d87c3aa31dab4d0aa3a1ab322997f1a2a8a6c95e9517c42f690e03df0ec2167b32e9c2551de98eccf7571970330e6ae26a923807a8e4ac00ced5257116a8e49c084fef352471ea8cae3b0b387b49e22c52c9f91070ae2989939a898ec6f90d70ae2589b34425e752f0285a5b122735292a8d731de05c4712673f959cfd80735d26a7d9e125798b46339f69360cd5b957568117c1f566c22deb455dc799f645c10162ea40d25614758275eceb3101c31545ae0b190f3791bbbc8086f90f3cb3f324616accbbbd25dc13d79784a971e7a157a1666e200953e3ce437f03e686923035ee3cf402606e24095363569a5700736349981a175b3f0b989b48c2d4b8f3d07380d94712a6c69d879e00cc7c49981a771e7a1a300b98983d33c04c0e8825369268b93aff02d64289ac052a598f05d62226eb1a295827f87f57d9df516a0f637e56e90d4bbc25399515f121f50c0bf72ec02d968c4b6c4ed170ff07b8259271890f311aee2980db57322eb1b945c3dd1b70fb49c625f6ff69b84f016eff38da09e1bab86014bfb964811312af20d6d9be2cd6c360f474009335553ebbd47576b07f90e9fe6fadb15f050b1289832cf359b48f428ddd943d59172d3c1ce2ff3dc9b7989258824883a3250234e19721dc6692268dfbab4c7331102ef1cd25710e50c9b913706e2189b34025e708b84b6e298953674e9b7d80732b499c452a392f03cead2571527779a571be019c03257196a8e4f4e051344812675f959cab00e760499cfd5472f601ce214cce0efe17d5aac3137b791155696baeb78c8a6eda931a13523540a0e2502665772f8af4349b4598c3980d76e6c615eb49231cd226221cd69ad3c68d678a881371b46d4fd68564e7c3256112c31369986b00e6084998c4f1491ae68a80b98d244c62638786b924606e2b0993f80ca761b603cc919230356ecdfc2f34c34749c224ce9fd330ff04cced246112e71e6998f30173b4244c8ddbeb6d0cf7cc319230890bb468987980b93d1373ed1498e9ce8a639022b1c69a84c414e4df603078ac0664624da621bf05c8e33420135b0534e4d1803c5e0332b1b540432e05e4091a90893d2f1af28180bc830664628f8c863c169077d4804c1cdda2215f02c83b6940268e7ad1900f01e49d352013671068c88f00f22e1a9089330b34e45b0079d7d65d2a191c2a48d34a1dd8a1e5bc7d18bacfbb49c224762e6898cf03e6ee92303566637e1130f7908449ec2cd030df04cc899230894d291ae6db80b9a7244c62e39f86f93e609649c224368d68981f02e6a4d6cc609f1c9c46bcc869915535d0ca2c974249bd5fd228bf03ca0a2994d4352334ca2b81b2520a2535229f46d91eee9593a55052d78ad028074374c0142994d4850d34ca3ba0564e656f816a120657f83facf146d9e50b65fe5b2bfd37d0d868eb904d2edf90ad2a8e9403539c757051dab06f05082fdf2b8ef1cc30938379b1797bad672253c2dc0d15761433fc7b90ffc6a9fe0166d91a6c723f5027f26875f74d78a64fd3804c1c4da2213f0cc8d51a9089e39f34e49b0179ba0664e2883d0df962409e21a5b145dd7d89d6d83a1a286ba45052635a69949da00b502b85929a259f46f901d4cabda55052b708a251ae07bda93a2994d4cdab6894757081d7b7e6bae7d8920fd242d6db40afaa8149d92345ad6c39371e31f086961b6f33b8d067c6b194dc5cc853eda049859d318a6ddb205a0ebc9fbd8870561c29355c17381eceb42ca90379b41ce47b437283d99238a9194a689c0702e71c499cd4117b1ae720e09c2b89933a9744e3dc1338f791c4a97303a1b581735f499cd4f9771a672170ee2789335f25e7c3d07cdf5f122735d086c6f91b701e2089939a4298c6790e5cec074ae2a4a610a6715e0e9c07c591743ddffe7ff8f718dba1acb71681c950ff6bb3a223ecad4fb4456d5018acb802d01edc9a8373c93555e3ee61ebc190f1214cca75bde489b75aafda8637040320eeb1a531f0ba81febbaab8339c552ce84130ce74a81668628da641b785e1e6c398d0bd52dc1c32e32546ddd3788b81f770fe26eb532de240ff85e589020cb6ad8606fb30abe601d2d2c0eee9458047c431e05cb0c80d387f098447c6d1b46af001abfc976616eb449caca3c5889c004daba3a4d252634668b4f74277f56826edf25ef3fdab41febfcdbfa8cff7de2cc6cbe0e23fa63519c333a53276624d25bf0f8cc7b2192bfc7f4cb641e3d5fe9b830ee8b8c4e55c0e1efa821bd607c6e35ab72b8a8b1035ae81df1e5a96c7f35b96c14049836d0699c50b0d71358b7880f0ec3e21eead29d37f7a53a398684fef7ce8bf9f28199798c09086db07704f928cab31b67e35c03d5932aec698fae501f714c9b81ad737ad0db8a74ac6d5b8ae692dc03d4d322e71949486db1b704f978c4b9c59a5e1ae03b86748c625c643d3703702dc3325e3125745d3703704dcb35a73b420792984c64d3ab68489ebb3e3da026e7a52b28398c60b68b5713718903ea775531fe00163ca613e8fc57a8117b19e2b278eaa907bcfa445a82c0f17fa7992380b55727ac079be244e6ade3c1ae752c0798124ce7c959c6fc210f68592380b5472fe0a9c17313957487016fb7f2afd867a902fdc14d84cfdcd89aba9449be67b129ee917c7353735d12f68bd2dc8747b8018427669514f8f425bf392386aa201ac4f31c5acbd26ce01c84b99905dbd287c6cbaffb28af8f068b123eb03de65ad998a20f9f1421c27a23d5a0e863be2e54cca55bce6873206f96fadb1610f65f61e59c0cd3842bb437683b1a12ba48112279569a05d01f44a69a0c421371ae82fed22d0ff4903258e14d140bf03d0aba48112278c69a07f00e8d5d2408993c434d0df00f41a69a0c489611ae83f007aad3450e264300df42f00bd4e1a28b1614f03f5a0d974bd3450e2201c0df43fa8a137c4d1632f6ec41a438f9d86b71a8cafdf18c7263f66dc2879b5dca2338af9b91761dec4c4ece47f615e6c36951ce2051b48eaab7b4b01d7cdad3b5aa47d6dc72d40794b6b06be0cb143c2931294c426f919ed489495f038b9358e159a612281685e67b0459cd1a49e4627438ddca0dd1f07c1c3e6b6380262320d87a12665a305c43c0facb74b64a5a6bfa2b11e01ac77c43157ee0edf9a9074e90f603ea2bab0386f87b9a13b2571f657c9793170de2589933af64ee31c049c774be2a4ae89a371ae079cf748e2eca792f378e09c2789b3af4acedd81f35e499c052a392ff122cefb247116a9e4fc0b38ef97c459a892f379e07c80c9d92dc159e4ff99e57fb3da97d01fd2b526dc2b1f8ca336a63b5dd15fe5eccf3630baf49024ce012a397703ce87257116a8e41c09431e8f48e22c54c9793a703e2a89b34825e76dc0f998244eea4a741ae7e7c0f9b8244e9d711dede151f48424cebe2a39d700ce272571f653c959049c4f313997b19cf5fe2166f82f1be795db229879cda19e0957d0d7031ae245744fb7669842f24891c609e065a133f90c9372bd1494c9c94fcc1cfb746fbafd77a9ff67a63d64e98239f860578fe0175267db8f6661ef0df5f659295bec52473869f5761a34959e9342491ddda4517e0c94cf4ba1a48e6cd2284f04ca17a45052a77f6994ff83e6d18b5228a953bf34ca1580f2252994d4794a1ae549b054e0e538b6da69bca79179b13968b8a5992bd84be7de5c5f414d7d25ce48cf729b35a1ce0ba33da7daf9a164dee8bb44da43da9268af07da575b37f519a6e2c3a044e2eab66eac1abb3cf49f5e93b3311f71f53aede23f0d1a4fafc7b16ac82c7ca9b4e348d3e39a14a625877cd78bf0de606f6e821bece1a626a36d5fbdce1eceac1fa231ae4d6b2a01e39b713e806625c86abc70f3d2e616c4105771d016c41c0d4da7b7a4eeb345edc1d3d29ade0a49cfde964a4bedd1d3683f81e7fb3b5269a9437834da7140fb2e93d604b2997beb245f608a37d27fe19444eb748ac279a3cde011f55e1ceb835d931fc92d4e9dc94c1f03ccf725616a4c90f63a607e200993b8d68d86f930607e280993d84ba7613e02981f49c22436e469980f02e6c7923089f9bb68980f01e6279230350e1fdf0c989f4ac22436cf69987700e6679230358e6dbe09989f4bc224e68da5617e0c985fc8d9819848491b947b126685be8c73bcd31cc88cb687615dcd8f77121f4634da4360bcf3ab38b2ca65b2a495780fa52d1bfc06c68bbe96064abcf869a0df03e837d240897d761ae8a700faad345062bf9d06fa39807e270d9438de4903fd1240bf97064a1cf3a4817e0da03f480325369b68a0ef00e88fd24035665bf800407f92064a1cffa4817e04a03f4b03258e81d2403f06d05f2481162a6dd8bf03f120bf4a03d5d8f57c1b40e74b03d5d86c7a0b407f9306aab161ff0680fe2e0d5463d7f37500fd431aa8c6c191d700f44f69a01a9b4daf02e85fd2403536ec5f01d0bfa5816aec7abe0ca0ff4803d53838f21c80fe1bc7f243e40ce291c77943bc6dbd41fe0bebfd1706df1be345eb4106fa25a8f226321b51552cdead6036f43f39b3f4fd5586d69e07bd7ab3b18c184c8da1b51702661b49981a436b4f01ccb692303586d69e0d984b48c2d4185a7b3460b69384a931b4f664c06c2f09536368eda180d94112a6c6d0da2300b3a3244c8da1b59700662749981a436b2f07cc2599987eefca2e5eadf63081000d8cb68875032f025b8a09b686e7ea91a7b7ae9d581b69b84b41086d67c9b8c4fb260db723e076918cab716dfba73092b4b4645c625b9486fb11e02e231997d86ba2e17e0fb85d25e312fbf734dcaf01b79b645ce248140df777c05d56322e71cc9486fb2be076978c4b1cdda7e1b685a6d872927189f35034dcbfa1e62ecfc45dc18bd20a4ef4cfabcc9be67f7bb0e53407aab1dc136dc188bb2ed0120ff586b1811598906106d170ada859273a65c18f17b59cb7ef40dacb1599ac1b382ffe604ebf28b10343adadb14126dc7aff156162c2e85fa55e9dadcf41ee311af9862cf267e17ebb12937c7527793af75b8ded84ffa036af1cc74dc21df283078c29cdf03c166b1ddc7b5761b2266f16b4bddd30d5fca948641ca7d1f565d10df522ba1e4cba759a3cb6caad83c9891b46489937369d3968ba55a5bed6411e34b3566532af99e29e1a34a9cc5d7386b78ddd38a8b6d9f83f8db17f4b403deec9046e69d3abe42697c600a0fd8072352665b801b5e91298a65375e211144bae715a6693ffe061b47a1c33aee93ce1cd36801aa7afdf82b6e81a9230354e5fbf0398bd24616a0ce07d0d30d79484a93180f70dc05c4b12a6c6e7f74b80b9b6244c8d01bcaf00e63a92303506f03e0798eb4ac2d418c0fb0260f69684a97198f929c05c4f12a6c600de6700332f8e09bb704ca9c69becff6756de2dba8933a703eefa4cdc709ff974578d0e50990ce649e8ad6f2089931a214de3bc05383794c459a2927347e0dc481267b14ace2d807363499cd4f1241ae705c0b98924cebe2a390f02ce3e923875a6797bda8b38f3257152579bd038d782da592089b35025e70f503b0b5b77be127b44c4f14e5a8fa83ba47d298a3b5e6982ff7795fd1da5f630e667952942c5a8bbd2ce67d13640bc523193b6c8736df88bd174d9c7e3117bfcb478bc0ed0e32f8923682cd390316afb8016347635d4edbe71443e17796643f55989ba6a0a6ceae79cb8021e7ab020ff834759bf38ea67be6d1d54dabb6a50434d34de58ff3be6f794f9df1fe51fa4c23ed0e801e5bd59acc74083abbfa406d70095e90bef01ce019238a9b978689c9702e7a692384b54729602e76692388b55726e009c9b4be2a4cedbd3384f00ce2d2471f655c9391138b794c4a93331f1155ec4b995244eea2a7c1ae7dfc0b9b524ce42959caf00e7c03806fad2c3d4b8c6a3070c840c8a63a02f1c8d0a527105431ec9a883edb2c4baa4e11022add79e447b59bb8876309376d546b495162e38c8a2b676f95c18611a12c70853885ad58832f919af6f84a91e204ba540126b240d7230400e9502490cbea541de0890c3a440129b4734c80b0172b81448e242051ae46b0039420a24713a9906f920406e230592b8428e06f933406edb9a210ec9cd1f8d17f70110e2309249d9c3cb64679b20e905f5c1434b7c710af47846c531cce10ec0c17e8ed95f51e36aa45aa8a1db49e2d4b9b86b7fe01c2d89b35825e7d6c039461267894ace5d80737b499c852a397b01e758499cd41ccd34ce02e01c2789335f25e7fd305b395e1227755f5a1ae7afc0394112a7ce6dac4e878b7d07499c0354725e069c3bb6e66c6532a7c6cc217530fcb1139372354b39ce3fff5aafd6becc44c28ff4ff55ee4df37f32cd420fb21917a7250e3bd4ffdb245cabe0c1f2322d7b11ecce71e5a70be629834504b1846bd396131c0597f82e4cbe4cb79d36f74c628e3a5a58c23c00dd551aa8c6b571f701e86ed24089531a34d0db00747769a0c4673b0df47600dd431a2871ae88067a27804e94064acca84803bd1b40f79406aa31f8f07a002d93064a0ceaa281de04a093a4816a8c34be1940cba58112074378c9ac00b482ddd19cead5d8feb8e9b797d9c5ab15b086bd5e613fbdc48bf82ae308d76ef011cd061299ec2253a872d7ae9da0664e964a5ba092b616c6e7a7c411099fce08282e2fd0986ba10cc642a74a44258e3bd150f700d42a89a8c4673e0d751ca0ee251195d832a5a10e07d469125189fd271aea3040ad96884aece5d3508702ea7489a8c4b1281aeaae803a43222ab19d4a43dd05506b24a26adc48724740ad95884a9c7da2a1ee00a87b335197f79a0fd119e4ffdbfc8b5a3769f9c09e878e695d1ca139eee13d1cdcd3b80c7615a0ac6fdd28a7e0507a93af4e6e175136c81a742e54194dd20686f6664a03d5184dd21640674903d5184df207dc3d674b03d5184df21780ce9106aa319ae41f009d2b0d5463348907f7d07da4816a8c26f9116ae8bed240354693fc04a0fb4903d5184df20b80ee2f0d546334c97c003d401268a1d286fd97f0503a501aa8c6aee767007a9034508dcda64f01f46069a01a1bf69f00e821d24035763d3f06d043a5816a1c1cf908400f9306aab1d9f421801e2e0d5463c3fe03003d421aa8c6aee7fb007aa434508d8323ef02e8514cd0ae09d082469374312cefa6c52f1f08ddcca39978bdbc4c52058ef17f6e4218cc3afa817e09aab8f1a1552cde22086638a635a78e47fb6fd9cbff57b9d7c09d3aeed08644b9324c1d1f1b47a2d5e6c319cc72056a24e8daac3a7903ec8b709c1448e2838706791d401ecf4fd912641699b8e0deb89d67b683345b434ef60b36cbff5e95fdc9a4447c087d2f43da52b03fe1a174829c2c4d854ad3592e0b0fa1132571eaccbff80fb4374f92c4a933ff6247a89d274be2d4997ff105a89da748e2d4997ff127e03c95c9d9ddf3ec9258b3cd73b5edf74cf08f5c61f727aef4467ac156d0d53c425af8ecd25e44785a1cd9e8c31d12cc3eefb353eec315d362ae25587da1afe19e793abb095f6b7f6db854bbde3fbbba4472c0319e4935506565cc4d8006498b47ae80ba7906fbf236b91926fbdf98e9bfa401b2358cf38235f0e5fe57fa7a419b02e199712417683a82944e7a01e2c3873638b7155ce667c53154eceaa90ff2df5a631f4be60115348e88210bb48ee5fdd0633f5b1a2831a88606fa28809e230d9438dd4603bd1040cf95064abc87d2402f06d0f3a48112473d69a0e702e8f9d240898d791ae8f9007a81345062d8170df42a00bd501a28313091067a2f805e240d9438974903bd04402f96064a0c4ca481fe0f402f91045aa0b4617f04ccb65f2a0d5463d7f37000bd4c1aa8c666d37400bd5c1aa8c686fd5e007a8534508d5dcf7a00bd521aa8c6c1911a00fd9f34508dcda659007a9534508d0dfb0600bd5a1aa8c6aee701007a8d34508d83237300f45a2668170b1afc5a0367c2172abc600f781a1b6dfff7115ec4765d1c81dce985d510bb96b4909a4381f27a26e53a5e723c48bddd35c1ccbe577843fd1755fbff4d4a8432347fb16b6cce2f034322373099576ae1ce995c638b99bd775a9d3d0d306f9484a9f106700e60de240993f83ca7619602e6cd923089ad4d1a660360de220993d817a261f602cc5b25616adc1eba08306f9384491c47a2617601ccdb25616a8c905f1a30ef9084496cb4f3566f40effc4e4998c419221ae68b80791713b3670698c99bf368dc49e61e884abe5b226b814ad6a9c07a4f1c9b4984c32233ed0b8383347713d0783f9d06b78079125135de574f07d47bf90904fc4fd1ff61ad2dc42c3b206716ca84abdfa3d548fa86e876f122c8fbe25e3a33c1ffbbcafe8e527b18f3b34a6fb07f90e9fe6fadb15f99575337919acfa2fd1deea6f7c7b10c36dd79a3fe2a67deb7804bfe01499cd4bdb7699c3b00e78392380b54726e0d17fb439238a929ff7853c4c0f9b024ce22959ce703e7239238a9837734ce1781f351499c252a39e703e7639238fbaae45c069eec8f4be2eca7927303e07c821dad14a44babf30f33da7f5ba91d51326fd0c756e4456c4fc6510bd3cd313b80d999a465987dac4dc4f99424cefe2a396f04cea7257196a8e41c0f9ccf48e2a4c680d0380700e7b39238fba9e43c17389f93c4d95725e77ec0f9bc24ce02959cf3a0a1f48224ce22959c9da176be288953e98650503b5f6acd6890e4ecf125cc38255afef813214ee9654998c47e390df338c07c451226713e9d86791460be2a099318f141c33c1c305f6bcd1d37921b47c4a505b4c4bdfbc2d0f0eb52288b5452fe08946f48a1a46eea48a37c1228df944259a2927265b857be258592ba0c8b463903262ade9642d95725e53d502bdf6152aee125c76c56f92f0f37d709e3339b9b52d3b82af850c07d9789dbc9ffc2e4df0e529c8ff21de6f0b86819b8bb7911d77b71ec2d687ef1645b1bc363cf48bc8486478b136e0378efc7b150c03d1a843d1b5c2a40bc84bbb1585f05d60f98ac1d3cb3f94399ddf4c1e4eed077b75b19a83e8c63eb11ac7feedd2d83242813990b51698950be8186ce47713474cca677c33c139931de33fbac4e49fc3b1089619b3bdae623cfc2de421ff347cbebfd4398b513a9371e196d13f4d4d9c356301f37b48d4806c1c5fe899c9daf0ab8cd70dad3bb1e6ae7a79238fba9e43c14383f93c4a933edc910e0fc5c1227752488c659019c5f48e2a48e51d238d707ce2f25715247cf699c25c0f995244e6a0a481ae72b10a5f1b5244eea34198db31dd4ce6f2471f657c9791e707e2b8973804aceab81f3bb38d69887a3e975f63065f600a946d3c725be1b6c564f1c88a3f5df0f81a190eff97910d20d35d037e3330aa6747f900249ac9134c88d01f2472990c460411ae40480fc490a2431509006b93d40fe2c059238ee4e83dc1d207f9102494c4b4a83dc19207f9502498c4ea7419603e47c29901a035ef604c8dfa44012138bd320a700e4ef522089e9ee69901500f9476b46b325f7c135e61a5e1f28ff6452aee6358d661bedcdf64c1eb7c639089be629d217db711044b2fd251556e3c68a6300f66fa9b01a632fab60bce81f266cb7046c918dfa68f0bf6d0e64be536b4368cccbf4f1bd06d316ffc631309c6fff3ffc3b284ca9ad83e665a6f831441f2dc15a28f5b61771fec7e45cd633618441606b99ffe3115e9078b4ca6ec154e5ede3e90c2eec0e805e6722e0d2fe1726c56d79e2170fb61316e610e68e4883a305556f04706d9870e17ac7f4667874466e6c0d77c5b6923035eeff331030979084a971ff9ffe80d94e12a6c6fd7f3607ccf6923035f6c93701cc0e923035eeff5300981d25616adcaf621dc0ec240953e33e151b03e692923035ee803a1430979284a97107d46180d99989192c2badf782953fc36d87b1025600d52bec778ff322bc2e4cbc65bd681c08d7416a1f489b07b56f692660cbb33b1802486cfcd04200cb6148771926e52a5ee6e918898f195acabbe3215cb5ab3450e2a386067a22807693064a1cd6a0811e09a0cb4a03250e6dd0408f06d0eed2408943c234d06300743969a01af3b01e07a0cb4b03250e73d040ab01740569a0c4a10e1ae80c005d511a28718898067a0880ae240d94d853a2811e06a02b3341c3ac6ec819a6dda9b0634ae1df83fc974ff5df66d2940589504cfc30f1f2a7cda81f01215bab48c6253eac68b807036e0fc9b8c4db020df778c05d55322ef12146c33d06707b4ac625765b69b8d700ee6a927189832c34dc2b0077f5d61ca24e4e89af71df8b363044bd069332ccc219867397db1a688a1184caba47fe352efe9f0235b4179375fd46ac263a7e8e7f88305371102bef4e3689af1be897a98a0b5ec5021f0af5784d26f83a8dc06b6049c2a2cf7c39d4ebb5e2b85db83bbe78404cda4b6c8acd63b14e8539d7b599ac9965b529f45b071a634bbbc3aaba75247116aae4fc170667d695c459a492b313d4cede9238f35572be08b5733d499c052a397f06ce3c7ef059103f159e7f4cb153b466ffcff01c5f3f8e790157e3a8e94ae3feccf8145a305a3db4373790064a8ca0a281d602e886d24035ae871f09a01b4903d5b80e7e5b00dd581a2871888f063a1a40379106aa31b7c87600da471a2871b284063a1e40f3a581121bf134d0b1005a200d9418e347039d04a085d2408951a834d009005ac4ef664ef5ff99bcb669ac25acf00fad0f6f672fc22b66e22de37f6126312abd6936398ba977b82d943eba9e405712c7d4717aa3451a17d0ce04cabeb2ee89452a073b5e8139cc7ed240350e76bc0ca0fda5816a1cecb80d40074803d538d87133806e2a0d54e360c71d00ba9934508d831db703e8e6d240350e76dc0fa05b4803d538d8710f806e290d54e360c74b00ba9534508d831d8f01e8d64cd030b5af99539f6c5f667ae9da3392dcee457c03997ccb01dfdebe42a53d54b81f7b2c88b49dd9fb4268c2a0d61df8c0e06e8d695dce01cac1adb9fc60881d8a9be4d1e3e4cf6847a2dc0cee8c43f8c3c041a2e9b1f6979b078bd9d4be227181ebbba487c37db19489b73cdc17a77a4196307388452373fcfb70390f8d23e2ada4d1451d035e6f16deea10cc3a2c8ec47fe92c0708a6c5f48da8df0b98c325616acca2783f608e9084a9318ffcdd80b98d244c8d79e4e701e6b6923035c6ab5f0f982325616acc237f07608e9284a9318ffc3580b99d244c8d79e4af05ccd1923035e691bf0230c748c2d418067315606e1fc792e87430931744135b9cb425d1ef03eb5889acd4863c8df518601dc71f4baff782dcf261fe83499ed9aa6c9affb299fecb2679261f020d91b601ee482f421c1f67d2949989a90877a28970b2827827a58d67de0a83c11398acaba7b8e42778c1be8373bd527b18f3b34abb99de74ffb7d6d8afccaba9dbdacfa7d1c265bf431c8ba4d39dd2d5b960a5146aea8e923807a8e4dc19387792c449edc5d338b7818b7d67499c852a39f703ce5d2471ea8c7fbb1c387795c459ac92f33de0dc4d122775274d1ae712f028da5d1227350d2a8db30770ee218993ba190a8db3003827b66610575474f2e83cad0f5f03511f7bc6119369a8667966537b1358a83d68660de02b6bcd18b8e49a489cdaa0d5c419f0049f248592bafa8746f91550964ba12c54497926505648a1a4ee814da35c02721d544aa12c5649b91e3480264ba1a4eead41a33c056ae5142665772f8a1e0ee783c2295fdd8da0f72057e6d4b808a7da1e4c85edcbd4c545489b9878d18b08ab5a37a1386ee68013bdc410c36e2cd695a179be17bf6656fb2f28b3897530c58eee49de6da1664e93f2a8a1c6b5d3280f87b664b5144a6a4a131a654768004d974259a892f275a89533a45096a8a45c1dda923552288b5552ee0d17782d9372052f1a97acb42b214d5147d8b6a5d94328a696250df20b787eefcd84ec91a24eb61ca045ac9bb400adcde132af8b83348c7b4bae97ae0b9e188a4daba517c2e55e1fc7e55eb0885eee9fc1e5dec0845cda7c5289618cf17e6f3c2840b82c9a0647cb66d00fe066cad93fa5803be34d5b0e50076342b324715267bc699c0703e76c499cd468211ae760e09c2389931a2d44e32c07ceb99238a9919634cedec0b98f244e6aa4258db31838f795c499af92f3291853df4f12a7ceb5e6bf03e7fe9238a94b52689ce7c2c57e80244eea92141ae7ff80f340266717ff8b5a2f7975e42e5eb0de8cc6d693c5b6b117b11d14c712be06bfe75de5bf74e282e1b50a8b17fe3dc87fb199319fe5bf2ad8b7821cdb46a3fd0a6ae4c15269a9b16e34dabfe1517488545a6a702b8d7632d01ecaa45dd6c3f5e6a3bdd9f60e5ab760e57970207d3146a3e08e7a581c491edd2b28e6da7f51c7d969790afbc064efe14cc65e19348f067bc1eaf232fb9d7afb0e2aefbe6d49bc45f0703a22ae5da3a7fb2fabf0625b4b419bbad814ee9147c65137d39ba90cef9ce62e3ad02f419547cd7d50c5e25d1aa6d88e92fa74a786d0d09eeed3e0b23f5a2a2d35668e467b24dc148e8923e9bd99415fd492debf0788c7c631bb3e60119d5dffc98b208f8ba315ea6a3e45ad50626f88d60a3d09eae3f14cc6359c4ffa74ee9825cc84cfb43be63e109d7482645c8d8fa3a9807ba2645c62e2331a6e5fc03d49322eb16b4ac32d01dc9325e36a1cdedb0a704f918c4b4c5141c3ed07b8a74ac6254ef0d1707700dcd324e312875c68b8a300f774c9b8c4b59d34dc0ac03d43322e313f320d7737c03db3353bba832d681d773ee010d67cc00018183c8bc9b89a97bc52a4c2d6be326b114ca7244fbe0407d6bbf76039d4cfb3a5c2121b5b34d8a76196e01ca9b0c4ce2d0df620803d572a2cf11e4b839d08b0e7498525b65e69b073e11e7b7e1cb0f9f6ffc3bfcd93bfd2c6019a8d4acd6f32d4a360b2db14b441e1f0771e0c7f5f107782fff45bae1adbadbde0667061ebe6d1c103c6944787b65dcaf7d08ebd484e5475a17f5fd5b827e74a108575b124ce42959c4b00e72592388b54722e0d9c974ae2cc57c9f935dc3b2f93c4a9733fe33f80f3f23886fd925ba523fc370df44d1afc374629dec6251a4de5f1b44c6951d61d01f78ad64cac9e5c57356e157d8017515ec9a45cc5cb74339fbecc0b9f56378ba13bfa3f69a0c458161ae826007a953450e2101f0db43b805e2d0d9438b447035d1640af91064a9c36a181ae00a0d74a03254e97d0409703d0eba4816adcdaa727805e2f0d94388a4f035d05406f90064a1c0ba581ae0fa0374a0325f69468a06b02e84daddbe9c4293b22256dcaee31e8bfdfcc0fdb09723d1ad27a2f58703e3cf1bd6868a45e618d3c0d26e86e89e312cfb7334995b6464674a3ec855d667f5217c7b8126d5a6e1700bd358e3150f7b41c16df2c5423f68bbab0386f05cedb2471f657c9791170de2e8993bad284c6b92570de2189b35825e7bac079a724ce7e2a390f07cebb24715287e8689c3b03e7dd92380b54729ee1459cf748e22c52c9391f38e749e22c54c9f91c70de1b77e0e204ffef2afb3b4aed61cccf2a17e48e0a3245ceb03d28e2ec266d03c06eed22dafbe2a8a94dc31a825c273b7865f68d15aa0319ee869a7a3f3f6f698d3dc088440d1de291f396d2d83a03db034cb64e1ea6290c6a1e8d8b9657a714b81e6ccd91cbe4860f71549db7cf368c5c3e2465eb346a1b9246b917c46f3e2c8592da7ea4517e08948f48a1a4b61d6994c703e5a35228a9036c34ca2ba0adf898144aeae01a8d7249a07c5c0a2575248846390ca6719f605276b394e65826ad60f0b6915eb0f3f6f88487bea9db895ec4f7a4bc7d3a893592d63c9f0217f7534c52f345b58dc6a855d8e92b849af7746bde03f170d47592b4a0ff53a191f30cff1e38cb0b4305c6db2429410881de7be00e50139f8d637c315cca8f9081c6a2967e6247783a3f2767151a79ed04ed429f0dc315cf4be2eca792f358e07c411267b14ace6d80f345499cd4a4bf34cec9c0f992244eea6e0934ce8d80f365499c452a39fb01e72b9238f355727e08012daf4ae2a4eedf41e35c0a6ae76b9238fbabe4bc10385f97c4394025e71dc0f9461c694e4db445b4314af8e398b645a131bee4458c6fc6bbff51eaa8a06189378cf60fb19767b2c83570c7309f61d15e0bb46f49dd5a8a3ab94b5b9472035cfc6f4ba5a54ef6d2689f8046d43b5269a9d11d34dac140fb2e93b6bb176d88363df1cb83b568da1f576b03e17bfc517a53d3cc10b389ab9c191f1f6dbe6835e07b9fc9b792975942338d69a22e84e7fb079230354ebf5d04981f4ac224268ea0619e0b981f49c224a635a1619e0f981f4bc22426dda1619e0e989f48c224a684a2619e03989f4ac22436ce69982701e667923089210b34ccd300f37349981a473a2f06cc2f24616acc417c03607ec9c45cd34b8e53324186653652c984ba9a0ea4d91fa3f9b4501a133fbedf2e02feaa75431231f04b634aa84381f2eb38721965b2409f7827a52d827e13863fbe91064abc9bd240df06d06fa581127bee34d01701f43b69a0c4de3b0df42500fd5e1a28f1a144037d19407f90064a1cf9a481be0aa03f4a03d598eae46900fd491a28b1374f037d06407f96064a1c05e525e301d05fa48112474269a02f00e8af9240c93b5ff12e7908b0992f0d5463d7f32900fd4d1aa8c666d3e300fabb34508d0dfb4701f40f69a01abb9e8f00e89fd240350e8e3c0ca07f4903d5d86c7a0840ff9606aab161ff2080fe230d5463d7f30100fd571aa8c6c191fb01f43f26682f2f935c3563fc9f9b3dd6cd6e1903fd125479d45c0d552cde75218b88f91069bcab7aa972c18eb507abb1ab944aedcca779b139891832c22ed18684fa9b17a1b661a2ae6551c7f9e75febd5da9735f86f18edcdf666d89a596f972ad4faaf996641072566f1835f30d4ffbbd2335be8e89bb55f0f88db32895b9ab54f5ef645ec477560d5d67561d67e0926e5065ed3701dbcc316a5c8b05d0f7b1445ff2af57f459dfd45d498930d59b5f70878a8b563922fe37f51ef05998fcdbdd61cb5cc3fc428ff2d869246d79b4537162efcf64cba9ef0c09a699ffc636c21c2655df55ee39dd8352fb4391b6a6407266b57600df288d5c785378f85f732d4c98e4cbccc56ca9bb5201a8371bb429bb49324ce12959cab00e792923875868aff0577caa5247116a9e46c0fb5b3b3244eeaf8138df369a89d5d247116a8e4fc1638976677336b13634a9312bdf45d12fda051f690933cecd1d32869c904368146d232ec3e4f6da3a63ae6aca5d1d1e2ea27035dd7387ae8ae31d0ff3f3df44e90c3b61b933cd5f663e9e715214e33d36e042bc278d3b271f4e0dd532478c081b6c69afbef44e66433ad133a0342caba3359cdafaeb693210d6a77d35a1beea8cb31b196b6470b57cf0db1976d99953097b4be47d16a00b7bcdcfb2231e28e765fdc10ee8b2bb4e694c610cb38c90b1622121f3167b4235156c3d37b45feac66e9822c8b832d5d307fd94a536eb44d77bac2a5bf121375052fd8b03198d50c7f3d8eb64ff0bf5f61efa31a77bedc1d20578e63ce3d5cd21d5cf0c1419aebad6b4c877125dc3d5761a2864907d269534e54bae5c46370ffec2109536306872700735549981a73d83d04983d25616acc61f70860ae260953630ebbfb00737549981a73d83d00986b48c2d498c3ee6ec0ec250953630ebb7980b9a6244c8d8df6db01732d49981ae72aef04ccb5e31857cf74549d9ab49236aefe0c0428ac2391b54025eba1c0ba6e1c03c9f97626c84c00a717314f5f7e401b5f5a1d66827ac7110392ee1a24eac63dbc85dbc0b99e244eeab65234ce9b81334f122775c3481ae70ec0b9be244eea76a634cecd807303499cd4cd76699ce703e7869238a9e3f234ce03807323499cd40d23699c4f7811e7c69238a9bbc3d2385785dab989244e6a1a751ae7d7503bfb3039c30d230dd5a2b761e42fc0981f47588d3b223e38143dac8616fcb52a44c317c4b148b0b0d180480cf590163eb32a0c7814c61d39977aebd2a6c1dcd42416f359b47d81b6288e078febb1d3783f84fe2a774418d02ee22c96c4394025e778e02c91c449dd9494c6b9195cec7d257152b791a2714e06ce7e9238a91b3df3f22800677f499cc52a391f03ce0192384b54727e0f9c9b4ae2a4862fd0383bc3937d33499cfd5472f606cecd65ceb413c7916833ed27c045bf451c1dcf70b9c114cfac003633edd158923be84663fcd2061072b3a5a411cf012a13503f0403c85b49e2ecaf92f33ae0dc5a1267894aceed8173a024ce62959c45c0394812673f959c6700e760499cd4050834ce59c039441267814ace5bbd88b3541267914ace8e503b874ae22c54c9f911d4ce614ccee5129c05fe9fbd7d854a7ba820894a4cf3ecb4942a6f409d1cce4f0fe09e674fee07e99b28ee069023a44012073e6890bfc265bd8d1448e2fc3a0db21620b79502491c2fa2415601e4482990c4d54334c8530172941448e2da601ae42900b99d1448621b9206f938408e960249cca340833c0b20c748812466f7a041be0690db4b8124e69ca1413e05906399904bfa5f04dd42f3a7426d76cd75006c5c6b865c2737bc35de0df78590ebf171a47e0e276fcb6db23d530c53e4f15e98c274a89dd49dee8df40fd214bc712082c630849f200c6142ebe627c6cdc5923329d058bbb158bf819bc20e4cd61e5e261b3986836fc45e10ed3e7b27d4d41d5b337d4ad3b8777d97fd000893d9491226710c9386b92960ee2c0953e303691dc0dc451226712c9317640898bb4ac2243ed369981b00e66e9230894f731ae68680b9bb244c62bf8986b90960ee21099338b649c3cc07cc89923089a34934cc02c0dc531226718c9386d91f30cbe46c7757a0341f67158c364d92c4495dd042e39c0b9ce59238a98b01699c5b006785244eea62401ae776c059298993ba909ac6b934704e96c4495d484de3dc0438a748e2cc57c9792704154e95c4494d4241e3fc0a38ab24715233ced0384f818b7d2f499cd48c3334ce8b81731a93b39b17e5e932070976648b29929dd6a9bcca8bf8aa997c9dbd68d36f937c7cdc02427d810a2b01daf4d6dcbd32f912d6b89350350c6acc6052aee225c77c8406cde52d24de0f69790bb78765fa35ecdd7e27fa3f9e652f67f346b31bfa48ff3b267446df9d7037b8a86b9970cb78d1260dc12f8fe92142bb1f8e8016e2de71e4ca2cb0177070d498f03ab521e1fd09f5ae2e8e3b602679ae35e612be165a84f5d24089012ebcdc1a00da200d94d8e8a1815e01a033a5816a5cd47c2580ce92064a9cb8a5815e05a0b3a58112276f69a0d700e81c69a0c47e0e0df424009d2b0d94182cc84baa03a0fb480325060cd240cf02d07da58112830669a01700e87e714413e1368a63fdbfcdd1cd98e528ffad66b023868d137bb3307b419f7dff38326536d8dd26cd6047b818a5c24e4c847f0ff25f3cd57fd32cff55357641163963514f16ed0f504f0f904a4bcd5e44a31d0eb4074aa5a5a62da3d156c30de120f6c0718317aeb11ce3bfd0240b69b08033148eb89baa12c21d1cc7de55ae09dd41febf833949e2a008ed81f42cd4bf43e278baa7372fde8fd97fe7456302e6a19230897d771ae63e807998244c8d13bef58079b8244ce2339b86d900984748c224f6d76998d301f3484998c4be3a0d736fc03c4a12a6c618b7298079b4244ce238270d732fc03c46122671ae9d86b93f601e2b099338cf4ec33c18308fe387b2fabd04ff0de5de0e5e10ba55e3bf60a6ff82499e09e8d21785b48d17f11ddfba51991844a871f3e383db459427c89aba28511993340ec62d4f9406aa3126693c809e240d54634cd208003d591aa8c698a46d01f41469a01a63924602e8a9d24035c6248d06d0d3a4816a8c49da1c404f9706aa31266920809e210d54634c5229809e290d54634cd230003d8b09dacbcb24d3eb182f5a6939d02f4195474dba57c5e22d84e581673379cdaf0e07448237d1b0682bd8cc3517629d1347127c131f576917009aa29a029b71a4399ef6f56c2f00e4b9fc359461bddbbed12e6934385a92e66100775e6b0ec1613271ea105c873624cab56008ee7c3969220abd629593bbdde041728124ce42959c7f43b3e742499c452a393b40edbc481267be4acee7a1765e2c89b34025e78fc079491cbb5984393a66f8df9c9dd80c2419163708218e142dc17aba7f0a17fca54cd2a5fc2f4ca37cb2ff8d99fe4bf4b62d0d554876999cb625713692d6b6cc87b6e5e571aca2683a6891ce3a0ae2854d5b45b1115cd857c4b1bd7691b7e86daf7d1f5cea57c63190d17f111dc85811228afe17c7d2145c3139c27f4b34a411c35a49dac0da6ca88f57c5911acad4c7998bc4a57c0fd05ddd9adb232637c5358654ef0b94d7302957f3167eed23319688f6ccde10ee92d74a8525b63369b08f428dbd4e2a2cf15640833d1b60af970a4b1ceaa0c11e0bb0374885254672d0600f03d81ba5c26aec70ce00d89ba4c212a3e368b03701eccd526189719c34d8eb01f616a9b01a33785c07b0b74a8525c6c6d360cf03d8dbe2889a730d3d37dd47b540e5fed39f4392f2dba5816adc83fa0b00bd431aa8c6dd7e5f06d03ba5816adcf1f75500bd4b1aa8c69dd21f07d0bba5816adc2dfd4900bd471aa8c6dd7f3f06d079d24035ee00fc2980de2b0d54e3cee9af03e87dd24035ee9efe2e80de2f09b44069c3febc7611e803d24035763dcf05d007a5816a6c361d0da00f4903d5d8b03f12401f9606aab1eb791a803e220d54e3e0c87100faa834508dcda6b300f43169a01a1bf66700e8e3d24035763dcf01d027a4816a1c1c391b409f6427fb4b5e0132ce7fb9298689761eea99d4fb343e5ab6f8015ec4f7541cdb7e97f87f66f9dfacb611cddab7fdbe12f89e6ecdc53443ecc4f0242fc89548bc90cd13814279000c793c2327c2596336d943a0563ecbcebb30d53e402a6ccdabf34a17acfea8e7c17563c17500b8e7e258f09aeed399ba8330edeeb82d3c9b9f97c4394025e71ec0f982244e9d2398dbc112c317257116aae43c03385f92c459a492f376e07c591267b14ace2f81f315499cd43cdc34ce0ef0287a5512675f959c6b02e76b9238a9bb69d0384b80f37526a7f9c2bc983af643635ad28b98de8863d31157ad4bee71539fd7b43ef78350e7de9484a9710797e701f32d49981af7b09c07986f4bc2d4b887e50380f98e244c8d7b58de0598ef4ac2d4b887e5dd80f99e244c8da9face04ccf725616a4cb87213607e200953e31e96bb03e687923035ee613915303f6262f6cc001373721632ebe83c16eb7530d8f6b144566a402b8d7512b07ec2645dd54bce1fdb602334c27c74c9c0c14183b003222a6d8bc65d6dd841c7f68d0e3eb4c9c107db813173a2e5b6fc41f0c026de30cfcc77575adf72ffeb915e957dd79e7e2ddbd5ff2fb34f6277ffbf54df6fd3a6ab5fa2526f8e5f3cf35d73bc0a7b6cb3d1a82959bd979fefbfe45353317a242a465e9b65fdffafb5276be2962659a02a5bfe327be47dec71f2ec4c7e9dfd6c06f9ff5fe5ffacc21b6e0703a7f947ceb3890953e5bf1de7050909cae1d3cc6b6346966636f9795e9bce0bbe3fd67a94f9afafb5764109cafcd795273e98c156d86899b3cb6bd3c59e49b01dcb24fbca69de2ef635e6c82b36f3d351f67705dbb1d6db540bb5fe3b5c197df3ac74f24f1aef28119436f93523fddf667e6be0692a53b5f5ab4d943d48da58e7976fb45faa527b37aab167be9c3df399fe4f6bbca1febf8c7e780ee3fdef0df476f0c6d857e7d930aaa956a4c2fec6325b8a0ad87cb63e51ba7a2fd80d63a8fdcd416a53f3f5dc463f1fef1f2fb818c2e3e6b5e90e250a2e296337c3d619539a7189f7e6a51515171c2ff9555179936b4897c42b27f9df9b62cf704a62efa329fe4f3ba5f869f44906df1d676f570d0b8e16e5236d7cb42ef682afb3d2954d7edad9de04672d28a7a9b1467baebd5db4b15756e830ca7eb6e6a765f6eff1f65a33f78a3e05fecbda98b490416a8f4d1624f508ee28d3fdff82afc2efb77c4c737f68fe689f999b409bd44f87ea9cddd95a3aa3a8e64c4e18d7dbefb674a62d9f9ffb2ed9a5994fa54fa1f92c16e5f3ffdc7cee5d139f7bdb3e45e67c0b7250f75a2ed117e637b725b5475cfb6ce3ad437c2d0feee0c1d3ce14339b5a6eee78c9c7abb2bfb74fb1cc1a9ebb73ff12ef6c6dfb942c6c0dcfbc445f316b7870b4200b54a3630f4be3ec527f0e8dcf397a55adad0f650bea4270bd9be77f451a12abd9d696fb6803fdafa6d873adb2479dee85ff334f4ed3833137a6af999e2ba771c7186d1b0675f6b0158bef20c11d24dfdc41be49bac8f2cd45f6ede2da9fd3daff1dd37399a4dadfe23295ffc735fdfba635fd87c5353da735fd47a667a7a49a9e724b9effc7b5fba7a6b5fbe7c5b53ba7b5fb97f8eee3c12094f953b1b8a637aae9bf36ade9f317d7f49cd6f4df989e196de0fbffb89effdeb49effb1b89ee7b49effd91a2359dbf9353e9ca2585cdbc3dafe57d3dafef7e2da9ed3dafe0fd373b9a4da3ea6d1f4dce23a9faaceffdbb4ceffb7b8cee7b4ce7b4b133d974daaf3a3bdd989ea19d6fee0408beb7b58df4dd3af517d6fcbfc7cfe1fd6f725989ec92d1aacef66aabfdef65617d7f6b0b6b76b5adbdb2faeed39aded1d989e3d3cd7bc521023d7e0bfd49cf26c7b0813be1304ba2dbe02c22ba063d32ba0d3e22b20a757c0924ccf551c5740109a18545f73cf2ff54c52a0c5f5bf71fd5faa69fdefbcb8fee7b4fe77617a764eaaff18f4b9b88e87757ce9a6757c99c5753ca775bc2bd3d3cc3b8535dc84bd9aa39a028eb2a7b8f86e1ed5f46e4d6bfab28b6b7a4e6b7a77a667d7a4bbf9702f0880c760fac5753dacebcb35adebcb2faeeb39aaebe6bf956ce36282ffde8ac40a86d1feeb2becf1fef3ffd7feff00412ce3cbbc020c00 serializedProgramBytesString: - serializedSignature: 12a44de6d8cc3f05f9da56db0998b83f6bbfe41b49863410d5d4e33887b471c11c43174307bfa3d1d49433cf117f9d9dbad91b0a6c97930ca46908a4642e0c00 + serializedSignature: 98b6ef795385526302eae15f0dda50581bb060f7ec80287ddd88714567f079b73bcb30446ea7d05cb4b4ec3e208a2f8d762aed9534cb92d3fc43b693a32ff108 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/3cf0e44a28eab27479c00abf7d27d6cb.asset b/Assets/SerializedUdonPrograms/3cf0e44a28eab27479c00abf7d27d6cb.asset new file mode 100644 index 0000000..a829a2e --- /dev/null +++ b/Assets/SerializedUdonPrograms/3cf0e44a28eab27479c00abf7d27d6cb.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 3cf0e44a28eab27479c00abf7d27d6cb + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c14c7f5f8e7e8bd63ba11fd68929040e00e886aaa91c0d818839004c808102a34e3822beebdf7de7befddb11db7244ee22476e2c44ee2388eed244ee2248efddf999dd1bedb9b77777babb79ae1ff131fb4daf6e6cd77deb437655be431e72736cef9b58c2d61c52c972d65156c33dbe4fc55ec1c373affdc33757d31ab758eeb9cdf65cebd712c27cd9bfc6754acaff37bae7356c7ea9d371b58b973ac12f74b58a5f3f75ce7dd4ae78c5f5debfcaf749e8ab5725e5aca66b0456c21eb13eb9d46c432f1529dbc16e3f18ab5737e4f673b9cbb9542291e489eb8d5c7f955e2dca913f7363a4aabe756b095225a1b9d7be5ce3bb5acda91b946486cf77c3e137f30f7d04b1e7bcb634fe77f7bf9774bf9773bf9377cbeb53cee93e1f37dc07bedc1df9cd0f529deefeb1e63fcbc8d73dc03cef9bb9fcbe7fab9f25aac4f216b803c0e94c74152e61919e8df561ef74d13df543206035999306b278f43e43147ea7b6696e10f7319c5ae06f238cb56409f2120ecf6e03ebf363444dc553ab6f6a5a3b4811697cbf4fb443e3f5c1e47cae30829db79a6575c5e1b258ffdd3e81577df63539867b34e982d6be4f968791c238f63a56e6da5ae6781f3b0baa8341d2765b691619cadb9ae9ee7f7cf91e7e3e531d7975e79f2b973e5797e86fa64627f4a27a5cb79e0dce1d86a750a592adddbfbd2bdbd7cf77c9763abc77df101f6a7953b41ca3b3f8b7874f0c5a383ab4beb78e273697550f20ba49c8e52ee05e09ccbbd3860dc5ac9f71e96e7852c7dd9d62b837b45ae9c768af564379c36bddceb6d0e6489b63c298d9e2a6d3bf9d2b693945b2de5aaf84f71cf638af3be400e7fff429fdcce3eb99da55c5546e467a8e77ef2a8e277883c1ecc1af3f1c8f7e5b503e4f1201966179658067491f7f7f7deeda3f866ca2d551a4df5a5757f196ed73432d5fbd3e4b17d86cfab67a687d0b9581e3b64186607799c11224c99b7da7de5b385c96964ce74f9b6ab073a3872daef92e7b3e471b63cce91fc7bf8eca0470676904e97b9521706d2c0d1a54337797ea83cce4bd485cdf7e97451d3e914eb26655e0ccef9b1bbbc7e0938e7ba2e76c3e9f0b294b9401e17fa745e44a733933a74ee046c2393f752d9d7616efc3ae6bbb23b96caeb4b7cba157b7ab79b01de557a64921fa4ec582f1fe35e5207c576a9efb94bc1393f82b6bbf8db79b793b2adbee03a7ff73270ceef9764a8ebe12cd966b91cd00f88c9f6552759fe775275f472969cf774eff2636f70adb794f7817cef08965c8fa9e778dc2e07e7fcfeb20ce376a4463f27dcce5353bcbb8225963fd33c7b68fbaebc7694d4a70f4bcc5baa4f34d87b27562dafad74cfbb2a5d8e96eff4055cfabafa7551f5e92a792c67fa7ab60c7090f9d1e91536863d48eac956a708ab423ea38e2ade8779723af695baab72ac9225e619ffb3fcda5a793c461e37ca63b5f7ec68a997d397758f1ba46efd5842d9ccd683ebfcd85fdebf029cf3e7d679b2f79165aae8ee435d75e9b9d917775d1990cace6adc67e339f27c8bcbb6ebd592dbcb3e1d8e66a9ed5796a1b1012cb1fc1820e57eedcaeda6f8d5ca639d3c4a1b8ba9fef059e03c5dd99c4eb7ee52d6409f6e035dddbac9f67fb76fe5f30d3eddb612ea969fe173a9d272871b76631f63a73c1e2b8f0703d9b2ac8d291f026c776e07f7f8b96c7fb26d2ca1be4ca98b6ac3744e139f5ee0397e3c2e44fc53dd537dd81365dc06b3c47ed760d7067a5c9f42d66e9753df8fe4f949ee3b3def97e727bbf7bb2bfb3905c4898791e3b1ee3e55de3b55de1b02e2bd4d5e833e8e13e4b561de35218fdf3bcd973e57faee9f0e64e8eeab3ecd10e4fe19f2fa55aeeebd54dbe64c5f5cb6f9741dca12ca3a761608a73d780686adfc4199a4a5f453c486fbd272b89b2ebdaa53c83a479f96bd95dd9eeb4bcbf37c6909fc2e8df1976d8bd848906e23e4b5519af48d030ef23976019296eafe8540aeeefe454007ddfd8b13d3b2b7caf397206909f58769792908a73d7806867d4d066929db474cb601b565a80a53e9706d067265bc45bd8ac9edeb937b5d0672957d5e9542ee354caf6f36e1295b57fea2d12cd1d6f9b963b77d96a790752dd3da7a5fd5afbf8e25dafaf52cd1d6c7b0645bbf41de1beba5bf60c1af8d63c9b63e1ed889f26dde089e81b6aaeedf04e4eaeedf0c74d0ddbf8525d87a5fd596b995e96d1dea0f6dfdb6e4b8c6c6f9c256cc52a5e5ed3ece8a6f2e4b6c8fe4bae9d34fe9a7da062701aeba70ee70e58f5d2ccfef94f2943ff60670ce8ff9be70f365b8d2ffdd5fe54de943eb77bfbcae7cd577c9f094bff86ef9dcfbbee7ee71cfc7a936fd7d3efeaafe54b652e0d95b635cee05f760dc0a59629be401797d2248ab42700da6956a9ba5e3faa03c3ee4e3a7fcbe378273fedc239efee35458ca7fbacbbbd7fd4d5ffa76027a3caab715a12b48b3c06d2415e7c7d2c43948993489259649935c3b18f0790a594fb9cf0cec96e29967e4f159797c5aca2f62897da82279ff39793ed9775ff6c94599adfa5837033d946cfece4d29f451f17f411e5f94c7e76538535862bf408df1e8ea886cdbb1d9de2b933aed97683fe2dc49874177b3445b5c9dc63e5e924755a6ae91f254597d1638c7188cca30ac14f18a1dc812fd18caaffe8a3c3f40de5775c5c1bee70f96cfbf2acf0ff23d3fd5f7fc54f9fc0fe4f92189cfb3d7801c7efeba17b798f2e7bf01ae29ffff0f3d3e39320d62d312c3666fb2c4fe9deac34d97cfdd02de830cd4fd5be579b12f4e33e4f96de09c1f67fae42adffaabbefb4aee2c9fbe6fc9a3f255bce3c531af1d7807f0646f27ca4c69d3af4b19b3e53bb78373c7a67352b5ffd5bbcaa73e57cab8039c731937cb34791c97153bd4c76f0eb8ce8ff3e4fd3bc1b9237b48a714fabd219f9def8bdb7cf9ee9c0cde95feefd8425fdc164a1927ba711b72710a593f92c71ffbd250d92c97b75893aeaade7e5b9e2f923adc05ce1d1d86aaf1cd9f30bd6d2ff0bd7f77e2fbc35419fb9e3cfed4a7db612cd11ff7737954fd1e8d4db25ff8745fe23dd3a8dfcf7cfa295fbcd2bb44867b0fd0435de7c752965847299ffe2fe5f952df7de96fd78ef7a7ca23cae7b58c2596fbcb5c7ec33b253ed7f8fc7290ce1f30af1d0d9ffd503e7ba4bc7f2f38e7c723e4f5fbc0397fef57f2ba6af7e9f4ffb53cfe461e3f9247e5833b9c258edd1c9e82cf6f41b8d9b6791497153e8e2b5c8e2316273ed7f8fcca001c57f9384a1f7aec681f47e97f67bf4b139f8f7d0cd558b56278948fa16a9feb18fe3ec3305331fc830cef812cdfffa37cffc12cdfff54beff5096efff49beff70c0f7651b23b6da673bab5ddb19d5ce653d4ab5bd3e93c783d2b0fedc27bf4cca7f049cf3fbba718bbfc8e357893212ca7735a601c6651acb485936b22fc13d350ef367f01e3fff02c4279dff3815ffbf32ad1f23aefc188adf9634dcfec6b4fdd6f8fd01e5fc9d25f66bffc112fbb55fcba3f22ffc537229f771f897bc5ee185279e51d7747dd674bae9aec9f650ac9225da61a51bffd172fc63b46aeb283bdc90262cf95c6c2d784e85b50e5cfb465e5b0fe2b90e5ce3c72aa9dba3e0dcd16d6c2f9fdc63e4738f81b0f97183bcfe3838e7ef0d91e7d5f2fe993e799b804ed56e98639e97cffcdb17c646e6d5cd0eaf31aaedf119b8df1ee8a9ae2919d0b7540d8efcfa13320dde4c0c336d1ae8aefd471eef0cfe6e6c334bec23c871c6588dcf766a64fac8bec95865f3ca4eef4e1db692cbfe2bcfb7b0c4fed71679ff5b208fdf7f32607c6a7df1a94d0c57c84fd7ef90e52afb9f94512fdf790a9cf3631d88f377f25a03b009399e18db2adf7fda67a3dbc0b3dbc0b3fcb89d25fa5ab6bbfc73dff4c956efed90cf3f03ce7958dfcbf39df2bef2b1a83c7a2cd06127b8c68fbbe43bcf81734787f1efba36907b3312d6712cb17d739c2fcce3e5fde7c1398fdbf2c4e7636a1ceb0570ae1843392ffae4f8f48a9d08e278a2d4e5e134f6aacaf271e09c8775b61bf7f1aa9cfa263379da6bef48d94c1e77fbb8ed96cfbd9d85ec2fa50ce547bc1d9c3b8cf254db4695fd5fa40943c98bc9630b793c59ca7f099cf3e3292cc1e6636a8c54d9fea92ca17c16e78e5ef9a7f8e49ce693739a2f5d4e97f75ff6bda7c642bf90f75f71d32dfff2c4f8a48d77c2b5d631312f7d0eab6465ac86e50908a359e6cb40d49be9178070d16df82ffe334a045bcf7638af56ea56612c156b3cea59212bd0aec2e827e6c7aad08bc5ef32e7892a21f4d55852104f2405c195ab76fe5582252475cef5d962050a5f4452e5dcc965f39d237f6b359bc05638ff12a52c7382ad660dce59a9f3bb46c85beda89dfc64ba28f1e526fe77963832ddd5301b9d2b0a688d735e2d342c11bfb70a4d2b85f6739d6bf5626dce26b68e4d778edb4568c971af75fed685592a91e975d42f8ac1aebb4b6f5432cd7062c3b5cf13b6f87f29d21c29c2d1b77935e666c356796255ca994929f17f0cdd42863bcee64a191304b258c2b50296c74f85132d6c1c9363a8b76f9777119b98322e7a323cb90788187829bc62ffeeff39e3bba9fd5b2746ad90e589e1b28169a2960a2c971717b3518344a175eb56f95c513ffe980ebf584e5412217ef7b92af15cf00468232abfc40410c37ca54ea9b618549e4b85f2d542357f644a9c271a1c714af5d2c63b331db56b6449b951aea4e4c1e4b285ce5f358d4f26a5753e57acad48aee4ca385d94b1046ba14b30e187296d96fc822de94c9d64ed1a63e125599e6861f54d61d85858a2e9d552b6bf54d6ab7ff82fe377e70fbdfbe947166d2abde0b34f5aebd3a783489f6c42c552a8a52e853a449da5d2d721a9d2a76363bcbcf4e13f7a869d101b4fa70346b0958e60c7a86d9cdfdb2ca49439cf0667c827b18ef5174b7a805d10234caf0286b0b506613e47d855a3156bdddea715570891dc4697389d9aa7c2ceceb8f92c933e3e04ad51e3ee9eb2be0d6ada6d75f4c474e7d5a4f4543fb2c4e930cc73ee9539cf578a4629bfbed89158e684cde54d1321787dcfc4375293e5f3fdc7fbc96aa9f6145487835e7158cd30e2ed34c4f3b9bdf6d2988128e3fc99a13b9e19da63d9ac77d86cd60193bc4f58c91d31c97dc24aee8449ee1b5672675db6112b5e8f8a24db78ee17f5d774e7ddf54e64b68a3e356f39eadc35a9b34bbf8cb34b7f915d7298ce89144c232c9b74d1a51dbf3840a7a43fe9fae349d715133c30a4e06e98b50d0a6b6ddd3195f70da9720f4cf0e090827b62855c4e131472bd74c279f9348425b712bf777e928477c285f7c6341faad1fcbbe92d0269be0f6622c3c29a481f4cf2f0b092fbea8a3a918976475cd4e9bdd3b3c5e644956c91d3ca3986b96e4515ee66e152e41a29f7e412e7b85668c1af732dd27bb553179a2398a6eb28ca8299dae2b1b96231d2d1a68528bc4789c29bcfe35fea5c77bde933450a54899072b5daf010b0e7158b0562dfa50691daad910e6e5c846e161bac12ea879534a33525cdfbba622c4549d31fcbb263c266d9013ac9a2a3a5b1d57c6eab7c60aa8328cf93c289e3e10cd4150da2b2dad9ac4583db15e2f2d68a012357de42c6b70edb264c758363c05ba5e1943acfd43a61544a230f5318f0854483fc7d6ce6fee8b343aec80e0767901d2863856580413a4be27d46beca24c9c7c9ab8a254e17a998ad12d9708bb8cc29b9a95b251ead623b9da31afb49b2b7b6b8bdedabd38637c5f99ca8b4cd959eb8e0c198e0092105e76079bc206c1e1fa293cc4b1bbe9e286c0b6b28a6f6c4b06a0fc34ad4499a12f5db58b012753826bc4823fce916c1848fd009e7c63a39131b4961d52331c15374798cab512cdc6f39ceffcdce1bdcd95326727f8ea80cbdd220c7c9eb55ce5fbcc21e079edfec3ce18eb506d173146614fb85358a38966efb6bd2edeb80e9361a137e8046f89c96c1848fc1d2ee405ddaf1d284d71bbc59b25ed66d89a5618e18f5ce11131d1a841ba942a45c9d48d71c76ac53d41de71ceb9da773443d502deee5889d346b45591b244dc762fa1fa4d3bf03d07f31d0304888e3b072eb604db9150b586e8dd709e70d9f4318d2f099cab269f8e462d8a6e9b0f14a940fdaf1966b8378be44184065635bb9a2892ac83c8d5e79a293bf893567838cf716f8b4903af1b7d744e1617b438e611a5e7c1599bfe1a57ef40d2fbe5e2c2e56ec46a13dd6c0cac70ad5199a423516a4509d80e58599585e9895555e28d0d99cf0ffd434abcde1396a8990cd735ef8063f5fcdd7d2dffb170eaa8919585653e93856ecb85a27764a76c9d5f1c2948f06ac015b22bbf04596d0e78939224f44a939962f0ab15a7baea6d67eb875b05a7ba2ce6485e3afb6594d7686901085d91eaa335be19d2cca20f19b52cfc162f6609d28542b1ae7aef09fc1625bd85a516d563ad779c10bef8f15db9cf2f6d22cc17ba320cfe35726fabd9891cf13461e753c31439f845500f3351540a056751196851668b2d0b701b3d0644ced8561d59e82a9bd48a3f6ae36c1d4de0f13be58237c7edb60c2f7d709e705335f5e1ba68778002698cf70486a6ef25eb0ea2794fb7a8a6b445f41f5ff2ac4951dceef6ae75ab91091236682aa21ee205a1e88b12dd1b0ed1690ed411882d2906c0fd609e6e6b93413c12986c00ed109eecadc4d36b5ed2fbe4a3878fb6b2a867db906fbf501b14fc3b2f91161b3f9744cf29161251763925784953c03937c5458c93375927922aed424229fe51124116761c28fd6082f0d287c36963157e9caa6118cf791bd46aadb7df2fc1a656cad9052ebfcbd55d6b91509fe11eef3a8929de620f97c0ea6e76a9d9eeec2133e9187b729ca840f8d87b8886d0814ea5c0c7d9906fdd901d11f8a095fa311fe6940e1f3305ee53a5e7dd3a46b8598ffe15d9de05c0dc2713ea64d854e1b7eeaa55b90701660482b3548afee100ce9422c126b7591e06e1b17dffe0eb285c2e1572617cd6c15d578708c8b300dd6e934705ba1aa61b038cb66c1620ce97a0dd2f702223d0c2b91abc296c84b30b58fd1159a1d83a95d82a9bd21acdaa53ac9bcd551cd9056075ffb1dbcd5b1140b671316cee6acc259a60b8793aa094bea702c81b76812786aa76009bc1c135eab11be2ba0f02330e1751ae12f07147e2426bc5e237c60e760c25760c21b34c22b020a3f0a13be5523fcf280c25762c2b76984df1e50f8d198916f0f6be4ab30b57768d4eed52598daab31b5778655bb4c23394f4c718b72c98a7ff653b059fd7c3f82cc26d3f21d0a74cb55d2858fb994d6e8d285d7d0c7e9540a50959763d674bcc69a3e0998092a30e12768841f15d0542b31e1276a84ef09287c2d267cb74678b7aec184afc312f3a49089b91e13cc3723486a0b8e13d6b959e4b11cf16d45be047193fc94235f935f2906aecb84ed7b0e273570cd1718e748ebad95365ded587bae733588d65598d6a7e8b4e623afdc89ebb59bddaea4db0dd1cd2bcc61a364ab7b5420bd8ec16ce0548d0d3c1cd0c03660913e2da40d546b04e78909bf55a4e52c368fb45438eff986006b85a56c0c3ceb3475997c7ac665f21e5126f3f90474ba62e5f7465d72f3b6f5190c695bf3c5fd1db8ca81dad69b74e1709b3d4b63b31303965b9b31e1676b842f0f28bc06137e8e46f82901856fd109e7cd1afed58550cd9a5a4cedf3346a4fe9164ced3aac90385f5732f2f828e74c62591da4fca8c7c2bc4017261f8e7697a8abb222a82fa1010378a106e07b01016ec5227351eac8148be6983b29244864b661e15d1cb254df8e09be4417118e6f45a32db83ea595016be51d58ba5caa4997c5dd83a5cb4e4cf8651ae17b020a3f56279c97b59733a4ace57be305f763ecd285c38b8a2b3349ec14c34cc76182af0a29f878cc8aae0e699e276082af0929f8449d609ef6fc1323fea9855c4090a985bb312bbc4e6385f7f708668527e984f322fa7a16b2ca391953fb068ddaef0654fb144cf88d1ae15f07147e2a96336fc272e6cd59e5ccd33073bc85694a4b3eb56b95f38fbb56f8a0f93ab658b4ebf8f4dbede24e8de803f19e4510db3d1dd3e2569d163d1bb5c8777e6f64eea08b3bed257b1df6603adca6d3a187d4a1d0f95f2e5af9fc9dedceefec353803d3e0769d06ed405af0c531bc1d1e24b43331f3bd4363becff70c66be6761e67b2766be776565be676385dedd9a42af65c042ef1c8cd03d1a42bb7a0523742e26fc5e8df0ab030a3f0f137e9f2e6d030a3f1f4bdbfbb1b47d20abb4bd00cb0e0fa62a9a0a9ab868ba10d3e2a1d445d384262c9a2ec274783855d134b1098ba68b310d1e4957341d2ec20b3691ff12cc7c1fd598efd9bd8399efa598f93e8699efe35999ef651832be2b649886dee5189d273574faee138cce15189da7303a4f6745e74a2c12cf6822511330125761e89f0d89fe6a4cebe7345abf1650eb6b30f4cf63e85fc80afdb558245ed444627d9f6091b80e13fe9246f89e80c2afc784bfac117e7740e13760f85fc1f0bf9a15fe1b31e3e49f5942abb5c226aed66ec2b4784da78557ad153461b57633a6c3eb3a1d54b536a909abb55b300dded069d09e79d5da4c3192b339a007ef56cc807fa831e0ed7d8319f06d9801bf8919f05b5919f0ed5824ded644e2ab8091b80313fe8e46f8e27ec184dfa913ce938bef8e1fa65eb80bd3fa471aad9f0fa8f5dd3ae1dc3dc2bffb15ca3d720fa6f64f346a7f1a50ed7b31d8efe9f216f7dfa79eef57ea3c5a2366e4ad13e54ead980eeb2eebaa1023a98b99bb37a3bb24b8ccb95a21160baf17e7aadc2c636be438e70431cea99613ef60ee365d39629e81bb1d778e18e3aa908bcc37882b75e2a94a20593f925a254784e1d86bd069bbf76109f4534d027d133081eec784ff4c237c60ff60c21fc00aa39f6385d1fb5915460f6291f8858e50c0483c8409ffa546f80701853fac13ce33ebaf32298c52b8ae1fd108ce137bf934cfb076f266454d3bacfd818e9776589b7fcc2df5b076785db161ed47315bfab52eb70d08664b8fe984f32ae23761ab88c731c91f8595fc04563ffc3613fb4f51683ea9b37fb1ddd4da66b1ff30db88a5b6fcdf656cf91f0bcb1f93c2f2c36d76a64f89a730e3f924acf13c8d19cfef431acf335836fd83269bd60f0c964d9fc5b4e65f4f4c6a12f125d9d34447ab52ace4d0ad01ca11cda59c80d3b59ec3f4f854a707df862498fce731f97f0a993a2f60a9f39926753e0f983a2f625aff194b1d9e47d6cb26a24a8fcac62d32b29d4cf71216c9cf3591fc6a50b048be8c45f22fba48f21ca8e646b8edd9ec67cbbc8285fc852e64dedb773f1891d7b8a7745ee33e328b9c0c51c182ce9f7915d3e04b9d067db41acc177fd58b45f76eab3fbba5563fc074f94aa7cb800c7549de7438884eaf6186f7578de1751b1cccf05ec722fcb79065c21b98e0bf8714fc434cf0d72105bfa913cc39ff43c3393f20e7b730e1ffd408ff3aa0f0b73124ff0a89e41d9d605efa7c9389e0149da1777582793ff4df8d377cfd50fe65cee0fdd01f61d8ffabc1fee69060d87f8c45e25b2c12ffcb2a123fc122f19d26129d86068bc47b98f0ef35c2a70c0b26fca79861f24dd4928a53bef86d09833bab548836b62ac8e36cb4a8f036c9df8913f773c4995bfd8c133b46d48a5adf2d72ebc4c4fe1c51307b2ba75da7125f035ce36b19a870b833c9ad62d73616e739a230af08381df167188b988e05df81056ecfe6b632bd0ad65bc5bc4d6858cdbcc5b7ae7e5ce774120a9ca7832e76f83966302d629aa1a480d6f83e96a55ac6902cd52a964d96fa051689d69a48dc1d3012bfc452ba8d2ea5f9b471bd8b748574aef2c522bc77e1eeea932a4de329ef8e1653685db7aa67d7893960b3b00ce5424dbc572fecaa5e938bd6080d370307ac2b7bb3ec9d06b1af5f69e8e589cda3a3fdd89abb2087cb09beccae6d8cef149598d04c58978f83f002b48b615f3f4bad03d6bfff00b3bff63afbe34399fc3b97f54eafb6821d23ca4a375dbd65f68d5f6f0b908e1f625a74d069c11745f1413c3e7530536df8f3b52c6887e7d758d6efa8c9facb8707cbfabfc122dd491769bee59b37baa20a6fd597dbc12a195cad164fd80489672ecf3554a7798f8f4b9789ac5fe164fd20883ec262d159170b2e211b03f9ad2e149ed1bb6872cff7df9f90fcc50c9e7110e1bfd3952203a32e456688b6c79a2c4b91ae4ef486684a11bc24e9869424e9f4c04a928fb1bcd25d9357ae1e112caf7c8259590f9d95750256c6dd6f304a41aceef7ba50b961f4d4d3fee8fbefbffc415200dd70cbfb0366d6bdb04a218059ff1113debb09847f8a09dfa70984ff0913dea709847f8699525f9d2969a5a730993f63d2fbe9a4b76d2cd4f3b2d80ce7732cc7f5d7e4b8ea51c172dc5f30e10334c25f0b28fc0b8cd2c0583827c49798e04121057f85e1d857d7090888e3af98f0c11ae1f9f160c2ff8609cfd108df1e50f8df31e14334c29f0f28fc6b2c3187eaf2523dcb6cbba970534e5c17eeaa84492c664f40f9079644c33449f46ec024fa279644c37549c467df25cf010a12997fe9c2e37dfe11589f7f64567dfe6f74e1f0b6d2a84cca915db8e07f63c0e23a60bcfac90b04e83f98fcd13af91d18d35a749010ff8b85384617e23e5a1358202c5dedbae7dd0966e9df629a8cc5ba22bc651eb426f89f26943cf19921be975b54bd85541fb44fdd531817e39dfb4418227f687b09e3452fa17752cc52858ff510bed3a50f3fcd8df16645a24a872ed8ddf6ea816fb5484a9ad678d27c8f19409ece00f8e6dbca2db0d6b9b88ad5cb485505343c1643c2cdd785db150d7793ac0482841dd3849db76fd4e6582cdc7db55998e384182fbc1311e522c658801863aad031636ca1e3263ea3b52a426eee736eb157227c3655ce9545c289eaba64ebb2605a180bfa2d918982ecb0a49867ab1f46bda52ea7f0e944936221a713b5c224178595dc1a933c39ace4363ac9bcb5352516fe13686db14269bf905da176188ffdc3f2688f493e20ace40e98e403c34aee88493e28ace44e98e483c34aee8c493e24ace42e98d14d0d69745d3195a78555b99b4e326f1b4ccf44e5149f4eec8ea95c1c56e51e18e5192129f7c4549e1956e55e98e4596125f7c624cf0e2b791f4cf29cb092fb60363737a4cdf5c5543e34accafd309b9b17d2e6fa6382e787143c0063b1202c8b8198e48561250fc2602c0a09635faca9b1b8099a1a83311e8785e591a393cc9f5f92098f1493ca86e804f3e74b3211fc312e78289682a52153701826786948c1c3b1d45b1636f54660a97778c8d41b89a5def290a9370a837c4448c8714cf09121058fc6526f45d8d41b83a5de5121536f2c967a2b43a6de380cf2d121218fc704af0a2938174bbdd561532f4fe7dfc8714e637ca7dfe89750e906389a762955592669310a27968fa5c59ab06931412799ef525c9e89ca7b70c105985d5684b4cb424c706548c113b1bcbf3664de9f84a5debab0a95784b1581f92c5644c705548c15330c1c78414bc1f06794358c8fb632a578754f9004cf0c690820fc4fa709b42f6e10ec234de1c52e383318d6b426a7c08a6f196901a4fc534ae0da9f1344c705d48c1d33114f5215114631a3784d47806d633dcda043dc399188e6d2171ccc2706c0f89633656c4ed085bc4cdc140ef6c02d07331b58f0dabf6a198dabb9a40ed7998dac785557b3e26f9f8b0921760404e6802200b31b54f0cabf6224cf2eeb092176399fca49099fc304cf0c921052fc1049f1252700926f8d490824b31c1a78514bc14137c7a48c1cb307bdb13d6de0ec7543e23a4cacb318fc799213d1e47e804f389e467c5524cdb0f3091fc485d007cbedad999689e62beda0a2c15cf099b8a4761a9786ec8545c89a5e2792153f1682c15cf6fa2545c85a5e20521537135968a17864dc532ccb5715148d7c61acc3c2e0e691ee598e04b420aaec05c1b9786746d5462a97759d8d45b8bb1b83c248b75188b2b42b2588f09be32a4e02a0cf25561211f8341be3a24e40d5843f49a26688856633cae0dcb6323c6e3ba903c366165d1f521cba2cd5867f386909dcd1a0cf28d61216fc120df1412722dc6e2e6902cea3482f38638a731fef54013f63c5c21871f9a6ec8e2161d33ed04cd5b637c82661e0bb2ef6136fa621337eb75c9ce53e7b64c92fd56bccdd3a013cc4f6f8f254f0a573f4126856fc54ac93b9aa094dc8609bfb309846fc74a87bbc2960e3bb026f2dd219bc83b7582f9e2887b32113c1e37936331c1f78614bc0b837c5f58c8c761adf9fb43b6e68fc7547e20acca276099f1c126ca8c27ea02e01bdb3e9409930f71c1bb31d80f87847d1206fb91b0b04fd65578439dd3d852d63c2b105485116cb5c1a31957628f894aac5f52ec32d101ab984ec14ae0c79ba0043e154bfc27c226fe6998da4f3681daa763c29f6a02e17bb096e5d331cd62a719e27489632c256c069bd7b8f5e142c6371ed9261278834cfa5cb12c6aae737f9173679330697e45df7ed14d28e14f43d3e286bf99b9eb7b837dbfe80c2c96cfe862795a632c973a2d299ee9dc0cba51fc3d577ee8a256ac237633e8dcc6276736ee369ab89f59ade451c2dccf941733777f1b2e37919e27813f1f4c0f4c5229e30baad689bb894c6166f5f35ee6c809ba78ee4c8cf4b3983dc110dd38153aefb8b4363b8522df15484c0892b12d953bbcfab5f5dec5af37953d9d85c5f2395d2c0ff6c5123277e3398bb99fec2ed3587d620ac13ba9f20a7c2b48cccec662f6bc2e668764947ed3c42afc2aa61699854f39ef4e90b89d83c5ed055ddc8a7c715b205267bd8c193fdbde6c3139178bc98bba989c1d7179e6bdc3f7af531b5755806d71eb0258396487c782d7250da299014b3ddec06abab2ed3c8cfa4b3aead332ca1bf399fbe926134ab5f3b1f8bdac8bdf7c42abe257b7886078acdce6709508ba8aed14f9505f926493aa1760b17e4517eb8352c61ad77489888bbb8fa31b47551bf3abe5925072bec83e352fc4e2f5aa2e5e47046ed995883b896d3b9d04f7da62e66d60374d7475c2b404b349e78b301e3fd0f19817499d4d5d9b5f8cc5f935ac9d12cc06940d7b3b34c2740e6a114162760916b3d77531db1f89d952913fab65dbc4ed6aab5ecb32998b2b925283a68f722916a33774319a4558faaa5475b7b07037da4ba6907d4c2fc362fa435d4c0f6498975c575224c600ee18c599cc11a95c2b7a43e54e8dbba30963753916ab3733e91324860b5b084b452ad43acff27cb82e45ed9728a3e962760516b3b774312b4e5b7266d62bc0cbd0547dd66c4bca2bb138bead8b6325718bba5eec54c6f74d725bcccb84055435e6c6a6e92366538b5e85717a47c76969b3f53c52130acfe16a8cc3bb3a0ed3d1328cf790d6380fa9bce1ee9695bac6d14b6aea94be068be18f74319c1b3086ea2be4fa14698ef85e8bc5f7c7baf82e21b4ecba2ceadfa620701d46e0274d552fbb65db34502bd3c7ea7a2c56efe962353ba01d7b9f1d36c1866fc0e2fa53cc4311340567892792add15fbe662e3748fc6ec4e2f7335dfc0e08d172ac17352fdf106badece7e1b12a4d7a36489c6ec2e2f4f36069e6b74ff8a5ba74b98cb2a6bc198bdffb58fc82f419ddb8ce966d26ef2e1ff148dd3a6caa96e32d58fc7ea18bdf7096da2b58ea10a6d0f2564ccb5fa6f6ed05498592ac5281d2f66ec362fd2b5dacf1efd0aaede713cb08efbb40bcee6fd0b63bb3f3efdf8ee9fd814eeffdd2f6b8e68ab141ee7dac165f8599c9368a4dff92fbbfa95220fb1ee41d587c3ec45acba9f308ef0d2f162dc83a4d1b2293b104def25adb8431bc138be1af33e923ebc706e60adbe37ef032e9a34a4eaf28c707eec2e2f81bcc4395891f209358665762641fd3bbb1987ea48be99c8c52d33fd2e3e64315efe64cd77bb0d8fe5617dbe569d395d6334eed33bf17a3f13b1d8d2309fb81aa5593bd2708a71584c87d18918f754426faeca358c475ab6c897aad1cf81997201ef66c3fff723f168b4fc2c4027ea92b95a6c9e9e4bd1724160f60b1f8bd2e1605815b3455e22b721572e49e7feb0d7e73ab2962f02016833fe862501830067522e7f1cf61ad278cc343581cfed814edca0a32bd1fc6f4fe54a7f7a4807a37883eb03b0e486b438f60f1f81336faa78f47f22a8be6f2023c8ac5e833ccaf9edea394492b2b13bf5470df55f66d91c7300e7fd671181380834a53b52d7f53b5171ec734fe5ca7f1c8b4ad276f4cbd525ce52559d3f42a9fc034fd8b4ed3c92972bfdfd21335af116d146f1c8622bf3c89c5e58b4ce699627d919986f5439ec262f9253667255839e7b63093ef26cf43525f08c1d33359ca34e11be7bea020717e1a8bf357ba388ff0a5ac1726756e7a06d3f3af584b0c6be1fa759e2d75ceb4e7976dbbfe592c067fd3c5e0a866eee9400bcc34e7a9778250790ea3f2f74ce671a81083942a5eccb01cd734a5c9f358ccbecec47f13b46511be079f7d4c5fc062fa8f4cf226d6d7736dbc884d0cd45ff5de0a128317b118fc33f3b9c63ccc207608e3875d6faa147a098bdfbfb0f188d4f5b7f7391bbf8eea734278a9817d0a275549935dddf63216eb6fb2f183bba95a227c0c6e4fa59c35f71a8b57b018fe3b939ca7279c5dad98be3ddfd6f9178b890f620829eea8c266f10e6f03e5f12f28c5f21bebbddcc6fa2c37a1eef3aef3f0373aa9c1f3446963cdc51740a696f01f074e9b16ccfd19253f66e716ffb1b5ccbfc0b258c8af96e58db2d65c41c89d8bcd178ee63a6d9e2af1965a2a9a2e16ba3a3c17d4e23076e9e3b41259fa1913dfc985b21cd27c5874af8be97f79aa0e91a9da228f37556363b3b4a6f45a7ccb436ba9b7a1e4ef82c3dca1d3dd15b050f69563dd65d722b57b276da8feedc2fda18e979f947705a415b714647f9db87ec2d4dc89a6b5cc1d7eb9dce981b76ddd229fa7c6ff2891f1cd5156899471bf3a8baf0db101db07ad3c6cdf5162e3ebc967888e408d03ce9de2a9aa690c609d1508f9388342f83d2542be507d560a4fbe0db0de1fe1c1622d0861f1af0a2b27c11c31cda544c0aa15022b1c161bac00767f3b0f588c12582fe67ef0349f7933556d06d7ada307ae0525b81e1a705ce026e7253e99a5415cadb002da6ae6416b496d6d89d97396f3bb4a3641d46c39d7ea6c0017efe4816b45098e7f9a9b4ffbcab40eb501dec5a0066d4d09af23c8aa8b12fc973660ba7ea087a90d25a6f600933711de06449dfa7888da5222ea2462e2b6bbf88c6c3827c40650170ff740b5a304d546d8529d558579abce1e9cf69470f8b6a78b1a7b926a7cd59d67b744d48e0d8cafa6e2f5e162e993b501e094411ec00e94005b816c680398f9c33c301d29c1b403453857938fc5db00a8b48707a813751d6767177a39f07475a646b4488c077bfb74d9d18d61a0fce9125536534b5f6d0094d3cb03d4951210df8556f5f3660acf55b953a7a9ce099f2b5f21ba2e4b848555087bab7602b40122ff5110bb5142e43be84278dce9ccb7b9a86cdc10bac2f21e602fe086ee4e89b2b32cd394bded90adada5c2496303aa81a06ceb11958b867b1ce0141fe575b0a955ff4d5b0f5c4f6a170d0407d7c54f134e1b3e2eeded006003bc5dc09bda8bba63ad6a546fe9b3bb28df0650534003b637f500c70291fd36f876f29ae13c5e2b42b201d8ea161eb07da27539274e5aacb0ac3cab0623437de807387853628608dae686c66bad3d687da9ad6da618c36e10817b5be9795b2bd6396db82a273c1bc07d02c0f5a304d70564535b87d1f8dc3205ab3ffda0ad3b1965b31063773fe040606503a83daf4b1c68c52cf35d696d00b8073472075202ec2a04a45a946903aebec297d6b6b54fb87f8e7cf633168331c6e7567665ae0ba0465cad97cd9584b9967c099a719a0f6a01e64ac6b37607c5d3560bf18ce761c4038fa1c7b39cbd16cfa8911e0fe9df89079892180f5463c4336efac503b577e25915bff1401e8978a0f67e3ca3f962f14093a4e2811d013a9df16931f1a4b1d578cade735c3b2814d7fab0e3c81c80788a29147164c0209ec6e916cf6a18349e30f6174f39201f4f3b75329e417d1647c68ce219cea2f69625e89713e4f36509fbb6f8ff7bc540fe70e7d2600e817fc188ffb86d991ceac620b769778108af71526fab37c16963f8741898a443e2c7c0542b46a74dfb84764e974c2298555b07ccb21a6212ce022b71ce0638879a84b3d04a9c5500e7b02870ae438142f557b149ac880e67272a9cf7300fe77093704eb412e7e500e70893704eb612e75f00ce9126e12cb212e79b00e72893704eb012e76280336e12ce422b71ee0038479b84b3c04a9ce500e7184a9cbd25ce72d9adf46ff1e1aaee6e1f914f07b23515c8ef00c8b1d4d3b794cb2453f7157fbe563c6b5f537e3a003b8e12ec6006fd5999fb736d869b03e08ea79ec594aadb09c5f19a9e0c655b2a945d409733977aac6c95685d2602753d9dfc21fbecf06e60877951c09b123dbc0fa9e03d02e0e553c2eb93a60e4fccc4a47d73b26cfc198039c12498932d84f96700b3c02498132d84f91180596812cc4916c2fc04c09c6812cc020b617e08604e320926e1d00519ccdf00984526c124ec9593c1fc258039d9249836f6703e0030a79804738a8530bf0630f73309e67e16c2fc2780b97f145e4cee23c2e60745e00fea162302f93b00f2004a906324c86ae7a16a715413fce097015705fabe20a9e3b82795ed6e067ea30329917710c8d78b3973ee1cbe75029e7ddea24ec04a0f6a4eaf65e28ede84d6b78b0ae591c0fa0ea644392a29c3970961b398fa3ce674e73fb7ceadc2afdec0526dc64d0a9bac9a3a04c03e240abbcdacceb711e52050044ca544b9afa608c8f45335a468f750a19d00ac745af35aa92bca6d5411a26c47d59cfa2db0d2e9d428a789d51e9be51c77be4d3d1fb3dc24d7bda899ffee7a0afbeafc56006571141bb04e70fe6f94819789a612bf1ac13811599979024038230a8493f73a844f0084332911f6645e47531da70915dcefcdd83ce9e0310071964973dd49271892e11c0ceaebd926e1249d114786733ec039c7249ca4f335c9706e0738e752ef2fb8d079a586b953b5dc2f739101eb4f05ac07281d0fa5def2c76de8e4473f19860cdf3b00df3c7366b4d9e8558f83ac3b3f0a94704aeb7ca7d7325baee1753f381e4193870ce53660950be8477ba07b7715db20d04d176b6f3748517cf9325f529cb4038e0559bc3380b9300adf4fbdd869a0ae7138422d4c56479de77202e54c0e32b4d700b48ba21895cc74750561f949b6b6e2400073b1493009c7cbc960ee07601e66124cc2d96f64300b01cc2526c1249c9749067334805962124cc219c36430a70098a526c1b471715f1180b9d4249884b3dfc8600e03309799049370608c0c663f00f370936012ce182683190730979b0493b0074406733880790425cc1c96ec3f0a36db8db07e279bed360bf8948e6cce69af7eef3a61294ae65b1f056c7585493009eb7732987097e5a3a2f0bb736fe75631e595ef5619d1c83819be3e00df4a4a7cfd00bee449845c98b7e781cd530d5e07408f8eea8bc37bd76c8de301c25551202cdaeb10ee0f10ae36bb3944e8d5246b0ed582e6505954f389bc2136384a443eb8463668711cb0d135e64cabb67159f40100657954b578ba8db26d9eeb361900ad3069bbb24956ba3a6e07382b4dc249bad69c0ce7b900e75a93704eb612e7af01ce7526e12cb212e70b00e77a937092eed84e86732ec05965124ed22dc6c970d6009cc798849374037c329c47019c1ba85b9e997db06689508d7f3287b0e539870a6801005a1dc5967a85befe7b046e0fb23590d500de464a780358a6cb4b13d79a134e47f8980aea7ae0ecd8642254c21e3b19d47500ea6613a1124ee922835a01a0d6980895b08627833a1140dd622254c2e90a6450c702a8b52642251c0a26833a1240ad33112ae1640532a84300d4fa28262b70d772aaaff445e05626db58e20fcc83d94009b390250f79242e822966deb7f9dc88247ee92ff143a5de071e4b45f740f9fe092d3a97caa2078244d86ace52431b77dd1e0a0a876de62ee9229c7147363afa6360a5dbcdd9689274af05323bdd0a60ee3009a68dbbc36f0730779a04d3c6dde1eb00cc634d8269e334887a00739749306ddc1d7e3d80799c49306ddc1dbe0ac03cde2498366e22b910c03cc1249836ee0ebf08c03cd1249836ee0e7f1a80b9db249836ee63733a807992d973986ddcc0bc1be8bb9f4c89b7b3c4eb6e09542d7af1aeec2aca7d6cc83e19ca805d9e12f51ec699bb3d6cdcc7660cb0c953a39ac7bc40783437f83c9e339cd76a458836cf63ee0f6cf5344aa05d5266f23a3a741da8d0b500e84e8f6607c462f180eb67b72ff37607c0f634e77a0efbf759e805509e11c5a256fef9eebd6751eb6100df99667c65c01d6eab1116eb667052cb24fb68ed89a0863ecba46d76497bdf6496da1be03cdb249c0556e29c04709e6312ce422b71ae0638cfa5c4398c252f2b9c296680948baf63b813bb1739af5730deef5e22c0ba5fc8a88ea689de9d0a724f50599d67d2828449566eeb7707c079be493849bf5e4d86f33c80f30293704eb612e7c700e78526e12cb212e74b00e74526e1249d8c4086f35080f3629370165a89b316e0bcc4249c0556e25c09705e1a9573b844b42a1b1cc9d318ff26db32b9e0b0422c388c64363259f3fe6800f4b2a8b6aadabb26747f0a105e6ece5c621ba7c8f4039dcd2ba25a68b0557839f92a62f723e0ea21dbf7ff5a03ecf2ca28561137c3b788c8e01d04e05d65eeac76c23a9c6c8ce83680f6ea28ec7272f4764906ef6100ef1a73be9f4e38d180ecfbe9bb4165736d1476b8df5e543ebe0decf03afa9a7abd667fb9128749392b970aad15bb7d7047b07d8df08e00e6f5e6ce26221cbe202b2f47804c7e83391b4cdab818600cb0d21bcd18512f15e5e72691fdb9b88db468c9f6acd904acf4a6e6acd56788cceef68348337c37aadef8d100e5cd260dff924ec026ab9a7201ce5b4cc2596025ce6500e7ad26e12cb412e74900e76d51f88b3273bd1558b970650d8079bb49306d5cb8520e60de61124c1b97ee1f0e60de69124c1b97ee1f0560de65124c1b97ee970298779b04d3c6a5fb4b01cc7b4c8269636f7d098079af49306d1c972c0130ef3309a68d4bf7170398f79b04d3c6a5fb8701980f98d4a1241d9b24eb500e00381f34092769f3880ce75c80f3219370924e2624c3590d703e1cc564ad496c6ffb28de55cc43f84814cb59d20f621433ffb2c0698ed05ab1c104e902c15ba97cf0f5c04e1fa5843c4842ae761ee2802be57a216f955062310027c01282255b27b400807d2c8aed501458f5b5562ec61b814fd59cb2b1657a00c0fb78730e1647b66534d9e49a6f4039fb0425ca2102e55cdee315c0f866135be5eb9eb5ae92df229c2ef636de20eff32da6f94c64c21d68c8da02ed01e027cd99756c63b66f0bb2fd5394287ba541a9624a3af23e9eaad63f16607cdaecbdba08bda3647b754d03789f31774632e1601dd924b17f81b2f4d9280a00acdef70a00c27294ac00f81fc0f81cf56e728b658f5eadda982b2c93677bfbeaf26e00dcf3cdd9ee4c9cfe45688364d3bf7e0f50be104556ce6fc45921faf6ee3615b6ef9ef438c0f822b58f9e039b21026ed6cf39cea3823911c07c290a2fa8bb6875a32821792dbe77adb7fc23c0f9b2394b60089bec64bdf455a04df94a1428f353f892ec762cbf01acf2d5287cf313f73adffc3a80f00751b88db935ce140da106a1c47ce7957251fd2c62db8437be96d5895e504d142526dd966800ec6be62c82b171f6dc1c80f2f528160d4ef4554136b72ab700786f98b419ca14cada9b6c33947f009c3f3409e7242b715e0f70be6912ce8956e23c13e07ccb249c93adc4f97380f36d9370165989f35180f31d937092ee614c867326c0f9ae49384937dd25c3b909e0fc9149384927c992e13c12e0fc71145be917b2bd692bfd6280ef2726cde224fd762a19cee1c0e9f69e493849d7b391e15c0870fed4249c8556e2dc0570fe8c12673b21a0527c54be96b9d362ed9b91d906948d3fa7c4358a25bbd612e765b8f388378abfb957b341889c2900f368b9633f114cd42aa6829d0760bf1f453d3e41347af6963dbbbe04f87e11d55eafb319f79973cffa3a3148516bb527fd2480f097e6ccbab471bb8951a0a2f91525cade8ccf16e265600553f382b18906841fa923ab82da019bfc208a8f78f26cbd374c24f81500f7a1b9332a6ddc76ef0a80f6d7e67c04b9d0caed4f5e05307f63124c1b07707f00607e64124c1bb73f7919c0fcad49306ddcfee41500f37726c1b471fb93e700cc8f4d8269e3f6272f02989f9804d3c6d566f70298bf3709a68ddb9f3c0b60fec1249836f6c87f0a60fed12498366e00f93300f353b3574312f689c856431603efd19fa8bd47a91c71aeea45629e266175d49a0ae40900e467e67e7bc0c60fddac0468ff4cbf0742225ad729c7e16d62878ab1a09a94333b086d976c5e474b50c67e6ecebc761b7bf2b900e55f4c9a713489b2f627b3cc0701ce2f4cc239d14a9cd7029c5f9a8473b29538ff06707e6512ce222b71fe04e0fcab49384977e320c3b91ce0fc9b4938493ba264384f0638ff6e124ed20f3b90e15c0b707e4d89939fa84d4eecebfb740598fe6192d54da21cce20b3ba5b01ce7f9a8473a29538cf0138ff6512cec956e2fc05c0f98d49388bacc4f90cc0f96f93704eb012e72c80f33f26e1241d5927c3b919e0fcaf493849bfd342867305c0f92d25ce812c714b67cea181f19121ff46cefe852c84ae61b289da5d81effd7f945847fab0ae61c98317990f7310a2266beaef00a8bf8b6259c114b6b7ed7cf4342804be8f62104e596b9db03f5e04cc92f02ab5e39bf66e993f0758271f303264c5868d1314070194314a94e1e6cb134e67202b43df0505400b4ab46a5ba9093e5b8da0f42483773080d792125e8e268b079b6a4338fb936caacdc120dbb7a2c40bb72f559b44eab2b8dd75fd0f81b5b68ea214cd6ec20da1a5921504cb81a5b6a1443bdcd78caa667079abfe334fb3e5cb917ddb651415e63c80b96d144daacca6ddd8384b743e280cda455175298be5d9bdc2b72c76eff302b40296da3e8aaa0b6bfc27ef5c43e8ab22c3b90fc0d9c1249ca4ae3f329cfb019c1d4dc249ea9826c3590970768a0267e643ce840b65c91cd3f781aaa9b34938275a89f34a80b38b4938275b89f32b80b3ab49388bacc4f916c0d9cd249ca45bfc91e15c027076370927e99e0d643877029c3d4cc249ba632219ce0a80b327254e6f1bb566703793f5d9bf00f87a45e1abe701af1596a8646f928fd8072f06e0f5a68497d9ba4d55c9d837aeb92fe8edec630a481b0788db00907d4c0149e87d2703792800d9d71490848e0c32903300c87ea680249cb04006722b00d9df149084ab83c9406e002007980292b0e94d06f2140072a029200927cc9081dc06400e320524e1082419c8d301c87d4d0149b87b1219c8d300c8c1e64c34b471f3be1e00650e25ca601b514db272678fef9907738849306d9c02cb80650e3509a68dd9fcbfc032879904d3c63d3abf0530879b04d3c63d3aff0d608e3009a68d7b74fe07c01c49ed2ff73e77335702ad725ee61f78e0af91c1239bd2da05c01b45094f7d13dd5b73a19fc65a2ac66d38dab542d8465ab7ef1e2ab01b01d83825d861cc3f57d89dd9ee2db8e202f97058eacc6f63397a10682e8da684ec5fdcea02e513b279413043dbd5b477cfce0680758c3913b06dac9c468262606cd4ab31322f6109d19295b065c04ac735a7436406e38b5ad68809aea419be5b8c08e51100e5f828cbd12a478965ccfb902d141ed942965d54167a1cc09a1bc54c8e497bd134983b41c99917451f29337fe7042bb7de9f0e2c31df2498362eaa9a09604e3009a68d1f1f9b0260169804d3c68f8fed0f60169a04d3c6818d220073a249306d1cd8980c604e3209a68d031b0500669149306d1cd8280430279b04d34687dc3800738a49306df41d8d0730f73369fd2e691544b67e7720c0b9bf49380bacc4390fe03cc0249ca45f6725c35903701e18c5a2293e0f6e2b70bd45b2eb1119be69ccc3771025be5e8c6f9b5f26b736e5a236398faf771edf2cbced3bc560709538b30f636b80f1604a8c8399b717973b8cb6ca5197a763b9e0c147d9a731be770c1fba2893def50aa6d6abd55b08b704c03dc4dcfd0d6ddc99eb0680762a75f64f5519a998920e588ca71a07da092aa16966ef7448e85122dbe9702ac03bdddc0280708083ac00781f1400c594688708b473847d2e617c74b25256571542949a68b3412400b7e372e76f57fc2ce758e988adb0b0f2ea0000cf88a284c5e684140b8b25deccbc80aa848d81226066140e12d8c052ad55affd6a77836a1f6093b3a298bc0861a62f02ec053b03809d4d09566db95fc8f6b62df72f0308e7983387cec621e2d900e55c4a944303a02c71c2e442ead922e72fd5e3afa3ad962652554b2d40b5742825e27e2c7102588d7097ac4f69b3360e84ac0540e799b4a5d4142bbfc4fe775004cc370927e9fa23329cd7019c0b4cc239d14a9ca7009c0b4dc239d94a9cef019c8b4cc2596425ce8700cec526e1249de24086732ac0799849380badc4790cc0b9c4249c0556e23c02e02c89a2e79e2f7ebb473e8057c25cf788bdce8fd50061a9391badd8381f7918e8052d8dca1addde3b17b45d5a62047ea48fa9103e09ac7159147e778eb0b27195bbba6dbb3bee7980f1f06887def6f6cf35f50568979b3baa69e3a76f2f05688f88a2fc2cd8ebfcf02300c223a39857c7b7228f7c5e1dd99485c100df0a7376aa29b07220e34600f3289360dad8b6bc09c05c69124c1bd7ba5d04601e6d124c1bd7ba5d0c60ae3209a68d6bdd2e0030579b04d3c6b56e1702986526c1b47188770f80b9c6249836ae753b03c02c3709a68dbb7ddc0c60569804d3c6dd3e6e01302bcd9e134f98f1c93a987d808b786d14fecd098df65a21dc72eec42ddbd7bf3d05ac749d49c36893284b50b261b4fb01cef526e19c6825ceab01ce2a93704eb612e75f01ce634cc2596425ce1f019c1b4cc249ba148b0ce7e10067b549380badc4b91be0dc68124ed2be1119ce4a807313254eb5276781af516ff360da06006f73142b31f86484198cefad50e3f4782a65a3dd5d7f51290496090170d7853aab671f0d05886b4cda568574049d0c672fd0bddc62124e529f2719ce7c80b3d6249ca4935fc970ae0038eb4cc249ba0e830ce7a90067bd494d25d28f91913595ee025551834938275a89f3128073ab4938275b89f37380739b49388bacc4f91ac0b9dd249ca49b4d92e15c0070ee300927e9ee8864381b00ce9d26e1249da144867315c0792c25cefeccebc72f157df372d163e75ba5cc607c2f24be5d4aa9241341bfbd5d8c08e99f00d25d94484733ff0e0adc3d52e1f0e04b08543cbd751bd878fc34e7af5a31844cbaece0312ae02783c6fe7194c0d587c5b1490e8995151948b20f8b0f01967bbc2920092d920c646f00f2045340124e53240379220079a229200927cf92811c0740ee360524e1fc783290670390275182ccf7d5ee0de89a367c6961b1f3c446479fcde28c4735a2bafe56aababe0ed4f5274731a131533f29e108289997b43b80798a493009678792c1ec09609e6a124c1bfdf72d01ccd34c8249d8aca7dbca1fc03cdd2498840d293298ed00cc3d26c1246cde93c16c0f609e61124cc29629ddbedc00e69926c1b4f1233c1d01ccb34c8249b8da9d0c662700f36c936012ae762783d919c03c871226bed5f92ce77795f4dd973a02b860fbb73a5fc63cb0e752821d28c0ce771e708740e002ae66fb5c04d9b2aeb600eb79e66ca266e3de0cfd41d63fdfdcfd9508eb7bb2fd951e00567a81d96b3b097b4d6485c081c0722fa4c4db13545a5b45a5c42786bbdf8c8b6865e72e2a8865c0462f8a62ea03acf9b1ea8abcbe27b3c97d01ce8ba3284d93b37c26e5a98dbbd5e580ec7e4914753e36da9458e7dbb851cb5860a59746d1dccfa6ce27f4d793d9e8f900ec65a682b5f1037c6701b0979b0ad6c64f9b1e02c05e612a58c2d62919d80900ec95a682251c7922033b1e80bdca54b03636b00600b0579b0a96d0bb4a06f65400f61a53c1128e0190813d1680bdd654b0367aae9602b0d7990a96d0db4a06b61480bd9e12acda2f7c126b86fdc2c9f0ed02f86e30c70760e32e8ef300ca1b4d5a1c4eba2d11d940df68e09dbac9249ca4fbe890e15c0470de6c124ed25d9ec8701e0f70ded29c9325fcbe531bf70cdf0260de6a124c1bb7b93e06c0bccd2498366e73bd51c06cdbda277c5692f06251a6f152ad9c791b5be5b2d98cafe870b7be2a77cee78b46793d5bede058e1fc0b96022b9d7fbaeb31b17bd94cb69dd588ab5c5e8590bdd1b9cb35ab63f9239d476ee706d14e1a445c34caa639cceb9d6796b04a11fa0e56c2dc8dbb1639bfd524a20681242e76e55dec5c6b607cf89b87b0c9d1643dab15314edcd82b1e6b2738b95f27e3f1e200e35257f5c5b2b9b23958e5c4b94c6852eb3cd34a84e3d614f1586770a6c689e78ace4c9dd0aabdb0cb7a27f6c582882b195e77b71f73f5e0091a8b759769c8f55f20e25ee6c4b98cb90b9c552879fc335cb122e797db8dca6dec40e5ca753b1be599ba9e5e264fc1d4d2eee0c914d3e7dbea26b3bd743172b30b7f7fad98e75429a4ce4d1bd3f4f1c3edb8538a54c98bf3b4d89be37f274f7799ecc24cfbc43a3a7f2d7552de15cebf3f57ebfccd95fa6e7a0bd6faff01545172ea565b0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/3cf0e44a28eab27479c00abf7d27d6cb.asset.meta b/Assets/SerializedUdonPrograms/3cf0e44a28eab27479c00abf7d27d6cb.asset.meta new file mode 100644 index 0000000..6706636 --- /dev/null +++ b/Assets/SerializedUdonPrograms/3cf0e44a28eab27479c00abf7d27d6cb.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a69a9e42b91f3864e9136cd1aa196500 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/3d024fda64377514ab33fa3baefec378.asset b/Assets/SerializedUdonPrograms/3d024fda64377514ab33fa3baefec378.asset index 4a16c88..542798c 100644 --- a/Assets/SerializedUdonPrograms/3d024fda64377514ab33fa3baefec378.asset +++ b/Assets/SerializedUdonPrograms/3d024fda64377514ab33fa3baefec378.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5cd95bdb46105f01c69823dc6008108790e01c6003b99bb6014280e6a25c3dd294cbe6e8c7553034bcb5af7deabfd3f7fe59fdbe7466b4b257f2ae2c192f8ad3e00fadb59266677e73ecec68a122c1e0c7b803876536cf26d9305b622976c0f6e1db24b47bf031cfacfe397604ed161cd7e0da1d162bf024fe0c1a5138cec2d931cbc093276c03da1dbabec0d2f07d169e4dc319f66ec26f1aee32aae0a125f68cbd61af59a7d15e80c4323d74ccfb0c94cba881e3043b83ab69620a0749d0a54e382cc09563bab6074c5bf7bd65ef48ac3db8b601cf1cb15da0b94e146b9a2a187d61667399654f59847fafe26da5d057c95b789a55c36faf706ef05fecef13e889fd57f8f790d087bf31ecfbf0e1c3bf0e7ec2c2d875bcad15fa6a791be174ae0ae72427efef17e889fd163ff5bc6d50f0d3c5db4b02ed267eef357edec6db56de3fc0cfbb857e6c9bf9f5eb021dab1fdb46c7f54b423fb6edfcfa0d078f3dbc8d0a3c4679dbc99f19e4e71d8efeb8452b6490b5ce80fdacb1439620c5de64deddca7ab2b043910d55702319a4613360ba87404062d54be4331936c646a556dd65d40b7c4fd2710deed821a238986388bff38640e676e193165cf218faa7c9a3d12977e0ca307b092d3eb5ca46c0c9de3aa82cc3b0bbe0d669b608c743a2b70a6ce7df594824745fe733f340d38c2e7bd063017a08e7bbc4e1021d4f89d334713f0b7d198a75fb10ed26a07d4fa3e5cb7e04df65632e72c8e43cca838caadf0c65969a9e8134c87d82e2ca678d04a11184befa2677c3aa0445fd3ff334f1194333c8e0c435cb698c106486ad6f9425686e4be521e85fc67c092dfb5e64af78fe8272a4e14a067af0a96ddebf043e829a4029968082190655775bf2cad14393182229735610b28b3dc612388d183d05c476031de9c50d9c894a2d5e28549544219cea3364eaa3146141abfaec94cdfb76e83e3763942ba7da8b7292d53cf7894b66d642e3abd0ab90a187d1dd58d58a9e95552cc0f4f102aeadc1fd690a51d83f0714d7606ca4374e23e43211fb13eeb8d678c63542b80e0839d2793953215e29439c52bd9d0b447c8c53dbe7f7ef728ad664bd43ab93239bbc33e4a14e79c70ae8a0d6b30eea480743793a2825af2aad5449b49244add4cbd88f38d847ce1584433275d38ae78f0b5177a1547f9a56ce6958d6aeb35f788e668d7b40f9197264e57af3d06e1217d8bfc12701f7b1dccda3218b4f0edf04ad12a77c2c58f44b810bb80a32d34632d398943bebdb04d0dc86b14e29df3d819164238442724768a2113e2ef9558e532d731c9ca59a69416857ac814bf0151a1f4324f288281dd1222f93756aa7a3e7f95b58ed6f61193f78dae2c591436ac2352a415bbd1076e13822238c11a24de21a49748df6ac2d7690a50c3326245053140d7648ebc352cbb0275cf6fb2dbf7c4505aa13d200d8a9539e26b53cb5b28847b599f75a239e9b4485a68edc74a1a23207967a4605bd0d388ae8b8c7b74ecfd35f9474f9c44597ba2551f9789dcc4251a35d5e4c3faa36957a95e977ab4c1f6b8ab518817d9964836c1c74c99e6082d425998b1093a701b988170975b847af67f7e823f778ecea1efaa450b946a34c93a4dead4034b9cc433ca23be63bd0bbeb0aebec95ce548d00b8eda295f3718469967050244c31b20d7d5ca8b4df24d33e755e6cedc15cf7ef32f742985cabf8b6e58a43ab04b514e97ea6aa3fb8f3a042b0591699d17fae498c2dd96833066e11ceb81b53c7dd16d968a8af0115084ee2fd6ae2ad2a51aeeb10a54d361a4e9d37545327be3632b3c638b316da2a2758a4308a75fa4d52e29ee69cb15de648641bbf0634215a5995f50af7391517b6e05cc73488a5fb5e89fda91df116e9f09eeb74586a19544edca1b2c5db2a5bc477fcb571a9cdbb5849a7cac3867478585425d5b04aaa44515275c9c6c16430c93c64d77d6ac2dd32c2c8c88834dafdfed44fb4bb2c238ea7a35eb8765967f7a8601f53c17eb728d87b65e360ce8e3e95b72698665631c6aa241657911c8695c50a381bae2b56e8159c751dfb65756455ddd9cf7aa34f25eb7d99acf71db216e2c42e538a028e25d96b5e7ec03bc4d027beaff023c91595240f64923c62e27b28f7b750a614c75c8a0cbfd78d6fe7b565a0869af7234f4c25cf43993c4b59cd58453ab14467beb245bd6cd21a08a59ccdde390553a259069ca75c380dbc9ed2ddc35c12bc9a028a272411d2cd3da31b87ab2a1c1ec9709861aa69cf7b89c46eb55b9232195e978f222baaf991b65f25ed6399b4eaf29e8c0fbb5cfb25f6bf6b2acebf9071ae4e3117b3e99b3d76a4e1d10c10b0aee7f39d5b67f8e17b40c5f713550454f1ed4c8ced1298bdbf511d22e56241f6f5a81f49aeab24f9521531bc70604a7100717b05e2e309696187a2f899ab0ebcc9a703871b2a1cbe92e1b0e81231bc548d4c7c30193ee556793eb9dd92733f280caa50f85a86c283a2ed1a5f231dd37326b73a341a57c9f25426cba46f598ecf298bbf792e0c1fc3c0fc748a5bd319641c074439033412548c486667f4c22ff970ec3d88f468398b20e17ab6dae24e619ca9f7686eb2526dd72b24852c3b1916f213513aef2f95f3b72686b944162d409a2a339f9aa413a8d52aaed58a04d5836e17694d85b9406fabae94db90ffdd4826016b6d60e0f264259bce7a4bdfc46548417e9c2f3f9dfc0c11016b5f5b09b631a3118e03bf29aaee1cc3077fc2a18a24eae9994e30c304266eef4c4157c68b3c1f013c312307cf944e788a7bb9570e10fe2340f85c2784d122dcb51c00fc8b5c341c72107f5eb289a3b82da3f9535c2339c97b4a648e885eca39e55141fd63e37c5a9cb2e2e70efbf1a22c312e8990f122c3422ec793e76649ccf166fee7e957b295926300a1d7ca5628467da33346d5933e57e8012482eb810d5ab98d3ac73acf76f7882d2ad57911a498c85429240f2f8281ed813ed81a75c1562fc0f652276cf8a6c55f1492ce8aa58334aa0bd23a01d257c158e2843ed8e2ba608b0ab0bd0e06b6bbfa600be9822d2cc0f646276cf83673c3d394bf40a01e512a8265a4f2b3c51e01d4399da0e2c6664c17b062ba40343151d50658bf2ec0ba05c0be0dc67947f4c116d1055b8500dbbc4ed86a396cf6f7121a21d366692d02640bc158daa3328c686d026c8bc1c076bf0c73b95a01b6a560601b2f436beb10605bd6095b03872d9ddd8591db4d93d4075c581770d50270df05059cc669411b700d0270dfeb042ec6fcae63f377b8955f75a54a80f7079df0a204db0492d5656d492bbfa5d96501b41f83993cc6cab0241512607bab13362cba7a5bd16a03b14f17885d02883fe904d15a59e02a36b75b44e3dc1bd30559a300d9bb60dc55236cdaa21c1360fb59276c2d1c36b77d615a21bca50bc27601c2958b70567b19402364daca004d0264abc138ebc3329c162e09b0ad0503db3d7db075e8822d22c0b6ae13b63a0e9b7357a5c62599b6f9b455006d2308d0ca31096916404be9042dc2413bcd6e172ecf857f8d0058faa2012bc712932100b679d18069dc59a2cd253bd927b3e72d899926fed70d618b99f755705cf1ba32ee52b5899fe3bdb1b975ac99e38cf903fe5922de636e4a5b13b69125e80fac737f96e96d73b73bcdc27bbcb6114a43ee3fbb25b38f52ec5b93497a9e3d6cf52e5a49d01fa17fcaf2e3bfa1ace66a2733ed24175862b9fd926fd811af02e34fe83ff373288cb95f0000 serializedProgramBytesString: - serializedSignature: e4f41394afb30545a205aeaf8077e53ebc5478d92540799ba78c895cf5ba42f8b2e51d29b72889414eda02fddde94cff768add0fc56c4327c4d256997887780b + serializedSignature: b1b2283527644ab904b8f8e07d71dc2cdd6d570338c1f5e100d442c2aaae7ec4385d5daf6dae51c28fa453b4e8947da2c8d2071efa260d674eea091b11df4a01 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/3e3a985dc1775fc47b7a4c8a485aa989.asset b/Assets/SerializedUdonPrograms/3e3a985dc1775fc47b7a4c8a485aa989.asset index 8e54c5b..cd74815 100644 --- a/Assets/SerializedUdonPrograms/3e3a985dc1775fc47b7a4c8a485aa989.asset +++ b/Assets/SerializedUdonPrograms/3e3a985dc1775fc47b7a4c8a485aa989.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c94c5f3f0f7422f4a51a40a5111a29400a189a8f422559a082a04124224404c028235d87bef15152b362cd87befbdf7de7bf767799fdd673737cf733b977b6e6f2ebbbc7ffdc0f1b4d9d9efcef6ddd99c7ce6fd17ebe9fd358b4d6323596f369315b1e56c99f7af91deef52ef7fff4add9fca2abcdf12efef42ef594f965bcb97fcbfeeb176dedfe3bdab4a56e57db9822df47e4bc5f3e9acd8fbf778efdb62ef8adf5de4fd29f6de8ad5f73e9ac946b1296c326b1b6b538b8859e2a34a792fc6e3156becfd3d82adf69e160ba57820f9e2515befafe9de934af16ca9a7b47a6f2edb47446ba9f76ca1f74d052bf3642e10121b171533f10fe6ff0c93bfc3e5ef6ede9f26f2dff5e4bf1bcb7fc3f7f97d1ebbbd93bc3b02bcab648ef4fe34f0fefc21af47f9d74d46c9ebd1fe756ccb908ca640c618f93b56fe8e93bfe3bd3f0d19cbb92205fd933ddbddd761e117f27a07ff37b69f947f25b8f618c4d47b1342ef2f916178b2862a4e13e5371706758f95c5df8ddd249f4d0a3d5332f9b3c9e019d7e9aad0f329f2fed5f27a47f97ca9bc7f0db8f6f4c919177c8fed217fa706e5d73c9f16929f2fe52d0b315a26e5abf456e1ec0cd273bafc9d21bf592e655c0baef96f39f84686e7e5aef833a8a77a3e0be8e9b1add73cc836a0c79ea167b3e36932ffd814eca6a5d465ff10e3fd7d06f50e963adc2adfdf4bfece95bf73e2e12d78274978ca96facadf7de2df0dbb4edeeb297f0705d383ed2b75aa00f11ee4ebd7e083d0b7f2375605de9d174a77f5ee7cf9ee0af97c3db8e6bf957119e2dffc9bc1406ea17cb612dc53b28b40bac03456cf8bc1b7bae78be4ef02e47989fc5d883c5f1c8a73a90cef8024ba8eab45d7036ad1753fe4b9d275498abaf602cc61beacf4d3bcd103c006f8fd55209d56f9ef34ac0ac95a9d18efd881e0bbd5e09e92c3c3be2e2477ad94a1caf89d588d1d379a28ef9569eca2572d76a19e6376a19e2bd64b91e78af532e439c2ba8653b27ca3de9dcf92e79b8300d7835862deededb36cdc495ecbb2929533bc4c51bc61fe1b91285bfc9bcb1e2adfd9df97334ea55b85fc55f651190fabcb54792f5979b9c27fb7dec4a00eac19d02bd9f74de5efca5ade4f26a399fc3dc04046739f5393c549de1d01de55e1acf2e32fdee3d7bb49ee07833438583eab2fede3fad0fd06f2fe0da1fb0d91fb8d90fb8d83f76bda1e87005d0e097e133b547e7323b8f6f46c56149271987cef26a03394a79e6f087d572defdf0ce204bfab46be5b13faae51e8bb35c8778787be6b1cfaeef0e077ea7e4d1bee10f9fc163f8e4d5599bcdabf6e766a0ab694ec99caff47b260597ea4fc3d42debf155cf3f4f8c50fbf79572947a5df512139472597d37c5c121d0f65c176fc8121b647876ce56829f354a9db13c0cef9f363e4fbb705e589fb50dec6a0bccd3e91ef57cbfb97c8f76e97f70f0be9a59e6f083d1f07c285cf551aac97f7ef00d7fcf74a24bc35a1e7e1f00e0769039f1f117c2f769d7c7e67e8faae2469b35928cec7ca6fee06d71ebb16b9b5b03bb21676ea79a6d82979183bf51c637754f0bdb4d8a9b85ecfe2e576fd904d9e20e5dc03de55f7f9ef792c68fbe7f9325a2a9b6f1092779c7cff5e700de5de107aaecaf21b818e8af54df17bb11bc13dfebb9605db656ba55eb00e817a9d140af7a4905eca1eee03d7b0bc51e1dd1f0a6f2dce5fc9ae2963af678132b6457ff9fce8682cd9b189acd871e09e4c3b763cb8a7ea2d780fda806cfb0c54f59c2aab4e0469707cc8364e0cd9ec89d1d807e2a1d20dc643bd077556f5e8c99a789c92241ea782789c0cde57cf603ce47355f7d6c83f2d148fd334f13825c578a87afd744d3cce48128f33413c4e07efab67301eaace6e1c927f56281e6719c443b533ced6c4e39c24f13817c4e36cf0be7a06e3a1da30aa2cba125c7b7970cb71a1f7ce6781fa575cc37ca8e46c0cca69d31249f70b82bc129e5f18e229c7c7621785f4b828a4c7c5f2f90341fd13eaa8fb801eea3bf8fcc150fcd78638ad95f12b0fbd776948bf4be5f33521391b8372b61a8cd8d565214ee1e79787385d2e7fd785f45817e27405c2493d5775eb7d400ff51d7cae3885ebc0ab58b00ebc2a24ff6a162fb775dfabe70fc9fba721ef5d130ae79a5038d786e2a9daa1a08c88c9714506ca88b6aaad9e6edb5ce6ffd8cd21bb917d89d806166c536ff0e3d656b67fdb2a7d553ebe2524e7965ae47c9244c77358b06d7e260be6915b59b07d72ab2fb35d4fffbb76aa3fa7dae6b7056d4dc98bdd1692b73128af7db57c5ffec69e66c1f6deb921bdd4f30da1e7e340b8f0b94a836758b07df98cfc7d16096f4de879383cd5be3c3bf4fcbce07bb1e758b07da9aea3b4cd37b260db7ca3cfaec33db5b03b3f2427cc2e547e1bb353f23076ea39c6ee82e07b69b1537328ca9e2f66f1fa53d5c797807b326fb1b5ac26df0f91730e4cd62bb1dbe3efc7545c2f95d777489d1e06d75eda749c9f4447598ed6b44b555eb99305cb71196fb64e13fe15200eaa5d7a25b8a7daa577817b2a9cbbe3711df4837ca6ea8c7b40587781f7d533985eaa3c6f18927f6f281eaadeaa2d1eaa1d04e3a1daa5f769e2717f92783c00c2ba0fbcaf9ec178a8f1d74621f90f86e2f1a0413c54bbf4214d3c1e4e128f4740580f81f7d533180f55ef350ec97f34148f470de2a1daa58f69e2f17892783c01c27a0cbcaf9ec178d40fc97d9205ebf727e57355bf3fc582f57bf87bf55cb523ae0d3e67eb351cae8bc7a58bea4fa6db0e50faa83ef1f3529f47c0b5f74e973393c852f363aa2c7f8105ebe717a48c677c9d73eb07c38ebdc882f57325b80fe56d0ccacb5573b4d5f2fe6b2c58e6df00ee43b9afcaf71e0d5dabb27b7379ff2579ff1a70cdc3fd24f81e53fd9c1be5fb57859e6f0885137eaeda602aafa752ef2add1e0eeab68daa1f54bb55a5cdad719bd98ef9bfdb7e1292ad6cf6e590ec97a56c15cf503ab18d71d93d8e4564af91b25e09c97ec597bdad9ae7be3d24fb8eb8eceea342b2b174bf3318369afe8f85aec3e9ff7a28fd5f97bad645fa0fd3a795b8d6f553547bfb0d16289f6aece74d162f57de04eff2dfb75830ffbee5cbedaecaee06a130de61c132fc9d90dc7743cfdf95bf6f031dde96bfef8598bfe787ddb5b11f6ed7f9a1b4ff2094f67781fb50c78f5930cfabebbb7cb9ddd4fb2aeddf0fe9f1beaf4737b5aee2ee20cf9a74d8508b7eeabb71a1e71b42cfd700fdc173c5b4e6fb0f43e9afbe3f3cf43c2c5fd5576f84e4ab74f88805dbd51f85b885e3736fe8b90a4fb5bf543a7c12b2854f42b6f2290bf4eb6be4df177aaee4df1f7c2ff6190bb4cb23e7d1cf90e7e13c1a8ed7e7a1787d1e8ad717c178d570fe222837217ddf04e9cbcb6e55be63e5c003f23a1365884afb2f99be0cf98ac5f3ef57e05dfefb350b96215ffb727ba8b9f306a130be0df1fb3624f7bbd0f3efe4ef3740876fe4eff72c9877bff7c3ce9be8879ba7c69aaae5f31f43367d17b80f75fc8505cb10752dcb901e6abe5295213f84f4f8c1d76347d947652aad6a2b43c2faa9efc6859e6f083d5765c81dc1e78a69cdf73f85d25f7d7f78e87958be2a43be0cc957e9f0330b96213f87b885e3736fe879b80c51727e0dd9c2af215bf98d05cb1025ffbed0f3701922df8bfdceccca90df91e75819a2e2f547285e7f84e2f567305e359cff0cca4d48dfaf40faf276941a27ca4619a2daec7f317d19f23f16cfbfff03eff2dfbf59b00cf9db979bafe6381a84c2f837c4efdf90dcff42cfff93bfff001dfef17f73180be45d71ed85dd538e7ff6546b68abe5f31ca62d43c47da0638e5afff268e85a9621f96a4d8eb4999c58480fc9365fcd5b3c18e489952109faa9efc6859e6f083d5765c8c6e073c5b4e6fb7aa1f457df1f1e7a1e96afca90bf42f2553aa8754477806bc82d1c9f7b43cfc365884a8786415bc869188c578e5a77745f48fe7da1e7e13244be97a3d627a55986d47c9f6a19a2e2d52414af50deca691a8c570de7a641b9e1f415d7a00ce9a1d6e6999421a1b1879c662c30f620aebd77fab44c224b8d9b48fbcf69ce0265468e5cebd6679caf779fea60d8394adfdb82f272360bc9db1892f70b0be6afcd43f67803b80fe5b660c1fcafae531973c7ca5a15f7962c71cd870ab7150b94bf392dc17dfedb3ac4adb52f63a05a2bd920246fcb909d6d1992db26f4bc8dfcdd82258c3bd6c86c1bfaa66d48e65641dbadb19bcde332c53b807b4e3bf9cde3e0da8b57bff2e0fb6aee1b7d7f2dd01f7ef7300be653951f559cda87e2d43e142795fef705e53395073a84ec538d8f2a791d83b620aed577fcb753c87e3bf9f129b827f89e2ae773b696ef3f01aef96f6779ff86907e9d437a3e19bccfc018b1fa46c541c41596a12a6ee3c035b4f3f0f75b197edfdef0fb1686dfb78cf67d4d7857d7f2fe03b584776f9adfb730fcbebde1f75b197ebf45f07b95076bda308a8face3fae6b178790bc38952c7a9b23997c5f3811c43cad946cab9125c7b79735059e8bd5c162803c435d47bdba09db0e3c17dfedb453e7f2a24b74b48fe937ebc079d189453134e488efa9e1d1792f374e8f93120ee51d7aaabbd718ae3762c584f6de7331b9ce7eb3e78be7c5ff6f173ba06d92979395d43f23686e49d1b9423e68a92c54185d72d94a6dd7c793bfd107a2f2f94a6cad614ebee211bbb12dce7bfdb87d254e939093c07d74cada77986053928793b84b8ee20f5fe22f87e8d7e3b066d4ec9a991db23a4ff3af01dd42ffcbe9c231aa2f2e6959a78411b54726a4b9f643676a994d513c850e1f562896d2ab9162ba7370bb6a97a81fbfc373fc434df9731b49d94d32024af2f0b964f7d4372fb859ef793bf054047b98635a77ffc9e78aeeef1df3e52ce75e0dad36b67555e360ce9352014ee80905e0359b00d33507ebf3614defda1f07e08c951fc1bc419a9673576d78b05cae82107836ff97b1719d881b2a58906321e03b292c950ef3f2eed60700aef7693bf4fd4223b998c2781ac54f453f9fa2983309f06b25209539585cf1884f92c90954a986abfd37306613e2f7ffb00192ff8e93be98314be4ff6ec65f9fb8afcd5ed9393fda59ab24beda57d185c7bf96eb7f949c27bd597c9b7388b6b3577fa867f7fb26a9ba8798ad7e37a4c4965fe32d93339279203f7f9a97ae01df00eec6fa9e76a8e31151dde93e1eca409e77df08e2e9c0f2284b38ffcdd0a84f361308d22ef414cf64cee95661fb1f46d58c5f3630319724c817d62ae47ce10161cffe4d79e0d8f506df1cfe4af9c6f4b794fba6ad77c2a7fbf8c7f57b42ea8438d2e70efbd1a535776f0b57c67284bb429b51e35bcef573d2f06dfea9e2f92bfdf20cfd5bedf6f91e78b43bacab9b39c5d92e83aae165d77a945d7ef91e74ad71f90e7615de51c5cceae49745d538baebbd6a2eb4fc873a5ebcfc8f3b0ae724c3007fa2409eb7a3822ab187c9b4cd75f91e74ad7df90e7615d7f97e10d4ba2eb3d88ac62f06d325dff409e2b5dff449e87755563d7c393e8fa1722ab187c9b4cd7bf91e74ad77f52d4355c668c003aff8bbc2be7a17246c9e7ebc135ff1d199721feed957f63a70665f07f26cbb7b11808db2be3c6cd40f41d1d0f2b96a3d73726cbd09cb1217da57f9b9c3140df31bebee1f06af445f26e405ffeef82901cd5a719976813b1fae01d9dec0621d949eaa198ea0bb562c9eb32f5be5a4bdb58ded7d547bbca7714a3dda53ecf826b1ed7bffdefc62b5f09aa7db726f4ddc3e09aff8e07fcc7fbb2c6cbf98ff18b43b2c681f7a02cf59d1a0bd2c539accfc4900ce93b68f73e88ad4d02b6169a7faa492be9ef2047f9075a0faef9ef6410d7c920dc26e0dffc7702b83741eaa55874c2df99f00ca2fb1e40f7e688ee6a0e6946487769c339d3e5fde7c035ff9d9668d335e1ce02e16e8e84db42be3b3b14ee6cf9bb67285ce94728672688bff253a4c2557e959e05d79ccf23889e7b013d5bb140d93351f5efc236a8c278381846cdfbc9d20086c1af5bcbdf364cdb6f89817928950f850f2f995727abf5a8c9f2ba9c038aa97868f2ba70c306fb53c9e4b5f7df9d914ab924e76d621df1b0b57e5376f2994e9a2fbfefc4823e52928529e782629d9384b96f6298b12e32dd9395252a8c5cffdd5dff48e15d355706dab13973a41d3c0fae55daaab2973f7fa176f9c2d716b4cfb92c689f737d9653d4baaffce06fcede80c1362c985795ff313546bf2f0be655c931679fb88c1cd59f046b77b5fa2bbdd53880f2e5f330b8e67a1fe9b316bffcfd3e29c8e7ef27f3a1a7d2467d0fdbedafcbf0e7b3e018f97ca9cf37be7c9eed31f9b1ede46fd790cc4229f345708dd9a8fa46f9d77a49de57f3c94580f902708fff2e64c1b1cc85beee5365d936f589e07735f3cad877df2489ab1a8f547d5d9d7f37159762c07907796f5188f3223fcc69d785be2d49fc36d60dbc03db50eab99a9fb83a745f96d539a52c68cfa5f2773160bb3851f71cd55e0ff92ecc91be0ba7cd0ebda7fc8abdc482712a0bdecf5902ee43f98f87e42bdf122a3e3b86e42adf5b2f836bccce547ddc03e8ac6b8ff60cb14c96af94afaede49c255ed996580abf46b385de5ddfe49def926a85f4d7dbb3cfe6ead6d0fe553703db8e6bfe52cd8f650fbd3d5b84903dfad62a00c01632a3155c626f37918d61bfa080bb71374e594aac33a69eeb563c9cb5e954eb22c8d299f87c9c66bd7483d95cfbb57c0b5971e3393ad7f92eb5366aaf548e1b8039f6e31357fa4d24cae0599a9d691ca3e554ced29937ed47294afb797c1351627f50df471a66c63007847970f0602fd3c99b3427ace3a98d51ec7daec52f9315c0fae95bed02e5726da5e42b8d0f7e0a050b8edc02fbfaf7c68a632f6aae4431f85b5c54bf9125a0faef9ef41a17849df3139d0276238dc4341b8b5f56daa43e156cbdfc342e14a7f5039d03f9b9cf38aed049ef1df352c5897cbfc111b22afd518daabe05ac589ff1e11fafe8824f62afd48e61c19d74bfcdbb3b7d9aabd3a18dc076959f39edac322db5db1a17878b15d58adfd811a0ecaa7d86be09aff1e1dd2e3685f8fbd6684be3f56bef73ab8c6bee7bf470106474999e70665c67605cf617ff02816cfab2a7d770ba64b6c1890afee0d07f754186acccce354a8f6cc876df43886976bc9cae591f277540a36017cde887f7b3ce6ac0dd9c4f12196ea3db5767f740a3631a6769b8829dfd1322f68eb3d594ece5576abca62e5eb29ddb2985f6beae2a49c659b35363e09e714ebd9981cd74a56e747d52f61ae54f9b57a185c7b2cf74ed6670ddbe44940e7503b23e1dd53c0bb13f4efc6d4d895f241b51e5cf3df53e332c4bff92ff491a5fa1ec0974c8ef47395738694f906b8863c94bf8d8de0dae3b16f59e87db5f645f9977a135c83f7639382dfe528ff1a6ff94c73941f99c9219d1b001953923c9b9ae4d91e499e4d4bf26c3ad38e1de5281f57fc1de5037c2678c67f953fab17c13596ff67c9df3d812efc57f9ac7a155c633254bf48f939db2bfe4ea16acf0df0d3649eecefc7e604758663624caee1893a2616a97d733ee0a8c656c27940f6577294bfadf5e09aff2a3f5d6f806bfebd5a9faef659aab19324f3eeb17d59ca634f4cf216e54893d03d5946e7285f60af806b8fff7cd556d7f529d4bdf680cdbcda754faaabf26903748d295fee1dc0bdf966e1c454789d814c3506b935b8375cdeeb02ee15ca7be3d20b3b614e45f9597b165c7bec17ac92d7ca8fdaf3e01ac841bf7f20180eec37c6d498cf2ef237eada987e7e180b65ff3db690c5f33bd7612d0b9607ea5ad5a76a9ce152161c3bb954cabd2924efb2b8eeea5bb53f2956c482ed02f57c0390a17b1ec59741325b92e33b35f9e1b138cba16bcd64277d26fb5331382696eeda95cb258b6bc0b5970e4572dd634ccd3fc9fd8e5a9bff12c80cb5e172d685e4aff3e517abf24c8eb9a93d6bb5e7a9063131773a8e15b34256cef2c5e6453e1296ea5135eacbda0fa91173cb625725e3a7d5f060abd86aefd362dd493133c5393455acc0cb23ba9362da8b7eaa0a7da4f8bbd07ba354087d372721883b1382e0ca9579ff1783636e2abdfb63c52939fca09b52ef496f36d1fbe55fcd677dd95cefffa094595eb0656c857735c3fbbb5cc89befa99df8666d51e247e284bf99e6c9f44fec59eadd5140cbbdeb32a1e174f1f74aa169b1d07ebc77af4a9c1fb48c95b011deef2a115a62dc2bbc7febc29c2191e975d41fdc83ddf78f0752c934ca8b0dd73e5fe49fff4b91ba48118ebee1bb321fd6cf172b278e4f4889ff63e817327ce1c87829a3af40160bdcebc7f2c59afe690904a3c73131867afbf6790f64fd93c6454f862777471183780adff9c3031b965e7462f706c1a815b07cb114a6532d514b0696cbcb13b3e651a2d0a041fd3e5cd130fe980ebf587e333d8bf8fdf74ac57bd113a0a1a8fc820920860e6678ff58e5fd2913e5db724f247f3cd5fb53e809e2ca26a44f1f2eac91409c5881d6a6260639470759ac6d9a5127368e1d15971c73e39a58c431e78bd654bb24c68885259a4bf5649b496597b76f3868caf85dce68ffc6a4fe8376eeb3d3a50df4e9d354a44f3aa16229544f97424db39d0d6a2ff793a54fb39a78c5d387ffa767d81cb1f1da74c008d6d7116c563736ce754fcfc6f9844caf10433dbfcd93da60320d30820d7404c568d1cc2c129ce269b89f6c2da6c7b045ca0c5b0a86ed1362978a0e18c5861a8a7d38c5563ab59a84d4e21a21821b61825b1b0a6e8c09dec25070139d416d96ed2cc99f2d17520abd77a39b131f83ec112ed6f4f6d406c993b5ab805953535dda70845b69b50a274e1b3c719a6192db9a4a6e8e496e672a79339d41091f21d96faba75747f2b2a66dca75640796aca91db586dc5c474f8c94ed4d4a2f710849fd6b84f7ed628fc34a312eb0c2fb5e37e4949c68c7944bfb4e82662ed30d8445d30823dc4267f91cfbd658b2878dbf036efc2d75c279889d5329a63be1825b6182bb180a6e8d1504b9a605c11698e46d34926351246fa9cb242deba688e9eb7525a217317c2df21609b6a6cf12db252d60b0f031f36fa34b15ceaeab5ea570b26c8727cb56ba641186bb471693451d751e3d51b6f7b46c955a23a29b48933609d14a163896226db102a97b060aa4765826cc33cddeed31c93b984aeea0b323514e9566a50e9cce46b1099e8a7169cbc528380fa7528cd1967a754cb17717fe7bb427b5422477bc36529292db1d5ff8bcb5269d195a24f410e6d78b31429d3173ed88a57b4fd374ef8449ee652a796b9d4589fa29bb0398fea860595aa5135f86de25e556693ec3462793eb80a57a675dda70827d30b5c2c9938f274f174c78df0c08cfc5acaa9fa9556d83492e3095bcadce5e45ab674e164bc0119ef29542a67f7fa6b0927049a1de4a6ebdfd6b6204c685455ba4734229162d5cbed4aabbd828bd42bc171306a2cf150345ae300d11cb23dbe9ec81a71a5fe5da2414f9013a331e889b44574cf8e00c08df1eb3e49d4c2db91b267988a9e4ee98e49d4d25e7e924f3762c5ff19ad8400c4bee864bde412799f7e2f83a26935edc8e98e05d0d05f7c004ef6628b827267898a1e05e98e0e186827b630637c2d4e0f23195471aaadc072b3446a522384981d117cb22a34db3483f8cf2180de548a3060598e4b1a6e9d71f933cce54f2004cf278531a037592799b8b6f01486c733d302c4a9b6b10a6f60453208331c9134d25ef84499e642a79082679b2a9e49d7592f9d0015fbf6f3a743014b390a95a0b89d62adf052b99f6302c9976c5b49e9601ad77c3784fcf00ef613ae17c6e6946cdcb71e1ff79ff25086f8e0b1f8e693e53a379d3889a8fc00c7c96c6c02395522331267b6a9854ebd44ec26414267cb646f8a911858fc684efa511be36a2f0311ae1f962f8750dcbee2c917e71f2582f663c3438479f382ea556a74ef37e17092df87dae45ed8b9a93f736e7d4f001bd4d31ce3a9aa5bec49a3e167c2b4e53d17ed3f757f99c5f9e653a63bddfb13a83e7eb21f87e20edcabb79cc9fc2e0e12f93abee968bd4e4f74bbddf843cd108cf13e3b0126e5f4d09178b58c28dd7653831b6beac4e33dc68ef6fbeb4bb52fc7ba54cde1922ecf8124493acc47744451b9c9e2f8cb65f0a469b09ed3173dc1d2b7f0b35e56fd758b4f27702267c8146787944e113b1da74a1a6368dd45c9c846591224d166111b3c8642cff17ebf27f0b91ffe7793dd47922218b84a9cd139b492a44191625ef4fc1c25ea40bbb25087b9ec88e5535e5e624a94b94d0a7ea42e7b57189a61aeac3aba1c5f1723f1ccede78387b60b12cd5c5722b19cbbede9f9535333e705d73fabca7619aeca7d3a47380f70891b58bbcd69797358456cbe4df5560662ab0fe3a8266d3b1b45882a545595a69314357218829d16cce75a7b2b7425fac73674ae151e34e6891be8ce9a7bb936e4140c8cdc46c67b9ce765a01db29cf88edcec2c22fd785bf45c076797ba944ee81e25aa46ba57b62f5c7fe9afaa34fbd68f5c76cac94afc84029bf17a679a546f3b511359fa313ce3172b743b50e0a24e13d1713bc4297e6bc5f38d933c75c506e72fb2e14add41291dab96226a8cafb2d147fabdc9debbdbbc8fbbb5cb664734569c7dbb23dc5374bbc7f978bbccff376ae90bec893b1c20bbc4a7ce75bd402c637552e8914cbbdb1b459a9499b3722a6cd3e3ae13c7772b74e4623befbea24f3f60edf406ed4de998725fb6a5db2b716595dbf05887748e6c80e549424998f6970a04e838e81c2a6764df85b15c20ca3e854a8d38957910731a48ae41eaea257910bb0b81f82d39f1a327f15d3d1351dc528315da8d1205fac2ecae66609b8212cbdcd12876a12265facc349dc16914a68d26398ff5f2364eca19ae9f75da4120056f7176126b14667126d407628aee91e8e97edc555066d80624c8fc371d3f4f5582c6a81226914e96bb008d3e0089d065b6a494c967d96f4b528c1b43852a705ecb3f1d04abc544f3fecc558d847e9c2de8c256b874509b7142bfe8ec68abf63d22afef6c3e277ac2e7ead6a29fe56451e0f5ba20b9f177ec7e9e2c94b93e343c54238b06a3cb0320cea0918d413d382ba14837a920e6a7301758628ae4a64c34d218e82721986f2640ce529e9a35cae0b8cb7e24e6589adb85f1a456bc59563fc4ec3f8295eb9c21473d9eede2f2ffca3f0db1f8bd2e99a280d6d1c2d4a1598f03334c2e747145ea913cefb52dc499b695faa0a137e9646789388c2576058ced66039312296953ae1bc88e6fecd8c9aec076092cf3595bc0a03729e0e489368405663c2cfd708af6a164df881989d5c9001233c48233c5facc4a65d6c3f53768b578bb67d892853a0ccf864156f60267b9bb790fd61db15428fe46d69eecd2eb5ad68dc879cbfc89e4e57aca17c30564e5fac533f42517c884e30378f4b52115c8d0b3e542798e780b59a1c30bb79b41c70984e387fff52965801e78bd5fee96d18e77eda1ad667fe7fbdbdff34757792cdd4d53a3d7933e8728d9ea219b4cefb9323cced0a616ebd93989b6e6e37bac145696eadc14a9e2b35254f4ec492e7704cf8551ae1f5220a3f02cb40dc5b5e4243874fb9e9e8e67ac5631f2fcfe4ca3e6fb1c791ff9b8f0772b2b00fc21b482bbc7ff7122380bd448f68996874e6b2789f8d4bec2b242e1205e352f19ddf402d150dac833c4d0f6143bcdf02ef779b48b9fb482c9f5ca3b33f9e4fae3533f8a330cceb7598e7670473fa3073bde6c562595be586baf2b96c85988e2a14e1e4caefcb85dc12a145a5f77fb4e4385a47879789d769cac4bd5b452b138fd108cf17db74b2b90976b8d841c63b08d187b5aed75539daaaf806a6df029b3c74ac723d56972c9cdc8d3a85c24972039e24c7e992446c6ecae636b370f5102d516e4a39513630fd16b3dac2c792e5785db2f06afce6549265199e2c276082f9c9e6e149d08b74154d12e1276279fc564d1eefda3a5a1e3f09d3fc368de68d226a7e32a6f9468de6df44d4fc14ac62b85d5731309dea490ad65331d5efd0a87eeb16d1543f0d137ea74678cbb6d1849fae13ce1b3d7731f3bedc1998f0bb3320fc4c4cf83d19107e964e38ef85de9b4adebf08177c366687f7a5223889099e8359c9fd1a2bf925a2959cab13cedf7f8021edb80799513bee3c0cd343baecca977a456dc7f1dacec626f3f918ea8731d48f98a1be0043fda80ef5828ca176a7d97c2196b51ed364adc61da365ad8bb062ecf10c14631763c29fc880f04bb032f249c332722d66914f1996919762389ed6e0d0ee684982e332cc4a9ed115c011ade4729d70de457836152449ba08eb30c1cf190abe0263fd7c064cef4a9d70de0e7d2115ad93b441afc212f1454d22ded3295a225e8d097f4923fcc8ada309bf0613feb246f8c4ced1845f8b097f4523bc5d9768c2d76396f26a062ce53a4cf86b19107ebd4e38ef5fbf9e8a196ec005dfa013cc0b367ed64d429dcc77b746ad93ab0293d0d11a3ed16acf1bb1b8bca98b0b7f901b08354a58376161bda50b0bae625998307592fe4a920d98166febb480ab7996caf689bfaa337d0d6ec6347847a7415306d7b2ec292ca32a62d57a0b5642bcab2b7eb6895642dc8a65e2f73290896fc3347f5fa3f9d51135df8869fe410634bf1dd3fc438de6f5b78da6f91d98e61f6540f33b31fbfc58679fdcb9c35c5996ede3950d7365393444f60bfc7bb3c56f2fb6abf7f7685066f94b56cbe4dae672efde6251beac120399c5e26e51c432ed2e4cff4f74faf35df1718d94d79edc9a380d91f1d94733bde097d9e13ece52f14665cdaaede5e26e91283dfc41d9d5e2cb2871ba5b17276e209fd63c08753c3ff3fe346cc4fcff7afbff45eb7bde8319d9e71a23ab1fd1c8eec5847fa111de20a2f0fb30e15f6a84378c28fc7eccbcbed29957d794b287df75cef77efbcb7b7e5639880d90ef0ef47ea318cc0398c17c8d19cc37c606f32016e6b75898df1987f91096d4df67a0247c58279c3721f94961264dc84730523f62a47ee2a41a4052d1383d8a71fa39039c1ed309e7ebb0f8898a46ebb01ed749e6b5e8af2cb116fd6068b45af4094ceddf4cd57e1293fcbba9e4a730c97f984a7e1a93fca7a9e4677492f91a667ec09ed16ea06731c9ff3395fc1c46e36f531acfeb24f3dece3fa9142a499cd9bc80e5957f3579e5815da3e5951731adff33d4fa254c309fe83311fc328623164bc4d169b768385ed109e715594e4cd308e04d8c69a2fdb75a78ce885291bf8a45a39e261ae511a3f11a26bcbe46f8ba88c25fc752b68161cabe8169dd50a3f5b111b57e13d3ba91a1d66fe904f31ab871ccbc067e1b13de2403c2dfc18cbda9ced8d5266ceef78f3b13500fd21f3079170bbf992e7cb8116c1e9b09269cf81ec903bcbffd2b9e11a3edec780f83dc3c0390dfc722b9992e926aa77981dcd459c932b1d3ed034c87cd753a7446414f153af9be82fc5eb25ffa2d179faa3343a368f62196e55b68b2fc27c3a265f98f74c2795ddf326658d77fac93cc77c6b54aa53049e2abf3134c706b43c19f6282b73014fc1996825b6a52b0ff886829f83966b86d7486db4e5caacdfa935870ab3e7f8d1b6da1f79cef64f2b7ee4731d62fb0a86ea5896a59c4a87e8925505bc304fa0a63d84ec7b099c8fc7c0979255b2178a5e386eb6b5d985b89179125f01d62e9ec04fc068b5b475ddcfceda353bcf8c4ad645a8d454489dfb7ba707925d049173fbe1770eb58da7b01bfc36076c66076490be6f718ccdc5461f2c5a9bc7e8a662c3f6030b7c1606e9b3ecc1f75817198db6130bba605f3270ce6f678ae0bc21c2d2afe28207fc64076c340764f1fe42f18c83c0ce40e6981fc1503b963aa56193fdf240accdf30983d30983dd387f93b06b31706b3775a30ffc060e6eb6036d7c0e46dede55e93300aca3f31947d30947dd347f9972e30de98efa769cc6b574b2769ccff0f4ba7022c9dfaa7954e7f63e93440974e2d6ad2693af38fc2e3936c23e5045689aebd9024b5fec1526b20965a83d24fad7fb1880ec6baa025a2d9c63df6ad103e94968bfaa6920df75e9c2af27994c8fe8785bf932efc0e2cde33aa5d8ff41cf3b018a2d1109d46d05950a1587f522ae63ca12128ff6ce9f71f63984e3beb74da8a61fd47d85288eb1745931c4c93a151ed25be5f324af8f5b0f07749d75ee27aa4672ff5318d76d56904bd5e568ad65a95916534c042df2dd910926f19d01a78acd3a95a1aeac217078818f69a1ae904f3bede704d5fef9171d1fa7a8d316a23b06a38e8be24ee212e0aab26ba50f980d3c898b953fca6589446e9a2d41a64ccb8198cf74c52791af1175944895e334c83d1b5159ca968925ee66c8ee934a6b6e22aaecb28515016b27486d736c3c21f9b6a7185eb911e91cd318dc661cdf9444d66c8fd9251c26d81853bbeb62a0c0f3f3d022db16cb8bb3e1b0e8b920d5b61d19ca08ba6bf0631d87f8f5a02b7c60aca89ba79ac89d10aca2d74c2f9a4cd24c3499b2db144989c81b2b00d86648a06c9b08848b6c2844fd508bf29a2f0b698f9ec916ac5948e09b5c3a2344d13a5072246a93d267cba46f837118577c084cfd008ef39299af08e5862ccc4668ec29ee3726b7cc7e5a6e93cb31316c1599a08ce8f18c1ad31e17b6a84af8d28bc33466f36d620494e2fbaefbd2e58f4f6d2352123462f17133e4723fc8788c2b7c1d8cdd5b16b246a91b1a222f4cfcc8c42695b2cacbd6bebbf04c34caf32de0ec3b88f06e3a8a9d13076c5a2b62f36061cf7b3079d4e4789d0f65884e66922d4728f6811ea8645687eb2b4e2cb057823ba5ccc11a7dfd7ec8e855e88b76da0af50eebb3b5ac5948785b8002b81e32126869c9e85ee8025e8424d825e372d5a82ee8845b008eb9fc4a3c38794f832f999debd896c08531b9fa244ae07167eb12efccd01e01535993e3d63ea8985bc28cac0051fb2e0b3873e8328e1f7c292b54493ac5da7474bd6de58e41663394535db60c113253af958744a75d199112d3a7d30e1fb69843f1351785f8cd512bc90e69efafddd24e9d1ea878559964a2f2d1de7b50518c2a5baa6d6cc6808fb63d15986cd56f8037ef0c0047f8364f412640016f6727ca6c4cfc755a0179f5e1932100bbb3cfae0673a631a83b0f0f7c74c376846ca8ca384391833a40a8d214d9d1dcd9076c22254a98b505b0697fbe482c53ddce1545168b86a48c486d4104c972aac2bdc93a9133f4ad30e75670cef0a5d573822dea1589456eaa2c40fb21f296610f9244d59cdb6b778913784256e695ee6ddf70f44894f464501b00b06e0000d80172202d8151bf559a51df5a9de2dcaa8cf6e98e6ab359affb15734cd87619a1f9881f1aae198f08332207c0426fce00c081f89313f44c3bc684e34e6a3b0ec722856bcc2d2c89f5d8bba166a3416a1c334117a256284c660c2ab35c23f89287c2c267c8d4678a7b9d1848fc3841fae6b0146143e1e4be72374e9dc2494cec5919769ed8e45e6484d64daed1d2d3213b0c81ca58b0c9c5fe1ebe7b9d1a6b75c6a2216eed1ba7075f32b89e1a7d7619ea4d1243fd7bb8c65f3bc9f99cc3fd6b6c00b3dbdf37e8ea989471c5cfe363c1e895ead5309ed584f5e632e8e439bba2f637fefc3d807de9f76debffbefcbb0e3878f8be98f004a254ccccbe764cc5a8ec7ac74b827d74f834a2f9c5122dbf9ce55a2d8c6142cdc13b0229dc7d1dfeb520a463ba28439150bf344ac21094ffaca4d333fee81857a1216ea34a6dcb74d64fed9bb5591f94ec3423d194b57befc658968351e209cc6a517dbe958917a8aa6483d78df6845ea0c4cf8a9ba3a39a2f09918b1d374c4dab0c44686dfede1eefbf811827ec95514b9e3310b8be4e9ba4a695eb448ee8945f20ccc18e366902b0a141ee1a8519a8d45e94c4d9486468cd25e3ae17c16e9ac5892a3b2c301f4c0039883697fb646fb23236a3f174b90737409c227dc552d3dbc9645865112686f4c8b73755a706f09e136436ddaa4d782d807437f9e06fddef3a3a1df17137ebe46785944e1f330e117e872716134e1f331e1176a845747145e8809bf4823fcef88c21760c22fd68daa2c88267c2166c59760835673036b89668bd913fd399ffb442cf28a305dd662ed1b7db851c22cc6e05eaa81dbbc281adc453ae17c24f5b298a12388129d643ec37479cc7cd3ef628cc93a0d931f223229c5845fa1113e55872589f0fd74c27943edca98e19ed9253ac97c40feaa98d952dd322c25afce404a2ec5785c63ca631926f95a53c9cb759239c0f5a9904ee223b81c4bc2eb0c93707f8cc5f5a62c2a30c937984aaec424df682ab90ac37c9321e6153ac1dcefd586540427f17bb512b3b89b0d2dee004cf02d86825761a977ab69eaadd68d3f6deb5dc6f871bfd93f4bcfe4a0b0e42354b7e9d2403b86b4518c21edc8f063cdcc8e33d3a7c481ba34e629717b2ac6c37546041f8419cf1da6c673305697dd9981baec104cf85d19107e28c6e46e532687e932149f9d8c2da9930c9578e0a31afecc5cd6ba27e5ac75afc85af949b25666f4c53259b52eddb99ddc974a26abc6937d0d26f87e43c18763821f30147c0496051e34cd024762921f32957c1426f96153c94763921f31957c0c568e3d9a8172ec584cedc74cd53e4e279997638fa76277f7e2d5d1f13ac1bc8ff7442a829338173d0103fd6406409f88e178ca10c74958fe7eda307f9f8c717ec690f32918e76733c0f9540cc77386384ec3043f6f28f8748cf30b869ccfc038bf9801ce6762385e32c4711626f86543c167639c5f31e47c0ec6f9d50c703e17c3f19a218ef3b092ff75d392ff7c8cc71b19e07101c6e34d431e176282df32147c1186e3ed0ce0b81813fe4e06845fa213cec7c6df4d05499241f4b598edbd676a7b97623cdecf008fcb3013f9c0d0442ec7047f6828781d86e3a30ce0b80213fe7106845f89d9de2786b67715a6f5a719d0fa6a4cf86719107e0d26fcf30c08bf1613fe450684afd78d6974f52e63fbb1ba18d3d09d6495d9118d2f53b1d22b7062d761e6ff95a1f95f8fa5f3d71948e71bb0f1eb6f0cc7af6fc4c636bf351cdbbc0913fc9da1e00d5815f7bd6915773326f90753c9b760927f34957c2b26f92753c9b761f6fc7306ec7923a6f62fa66adf8ea9fd6b06d4be0353fb3753b5efc446317e371cc5b80beb9cfd61d839bb1b03fd670640df83e1f8cb10c7bd5883f07f860dc2fb30ce7f1b72be1fe3fc4f06383f80e1f8d710c78398e0ff0c053f84716639669c1fc638c772cc393f82e1c84945eb24381ec504d73314fc18c6b9be21e7c731ce0d32c0f9090c4743431c4f625a37ca80d64f61c21b6740f8d35883b7492a489234789fd109e67d8fa6a908be0217fc2ca67133438d9fc304373714fc3cd62ed82cc7b05df00226797353c92f6246d7220346f712a6764b53b55fc624b73295fc0a26b9b5a9e45731bbdbc2d0ee5ec3046f6928f8758c451b53166f6066b75506ccee4d4c78db0c087f0b63d2ce94c9db3ac97ca15efb549231c942bd77b06674875404276946bf8b8d47744c457092f188f730c89d4c21bf8f49deda54f207582eec6c980b3fc4ccb94b06ccf923acface35acbe3fc6706c6388e313ac71b7ad61e3ee534ce3ed0c35fe0c13dcd550f0e7188aed0d517c8169dccd50e32f315bee9e015bfe0a139e9701e15f6305c70ea605c73758b9bfa361b9ff2d56eef7302cf7bfc3cafd9e86e5fef718e45ea6907fc024f73695fc239657f20df3ca4f9839f7c98039ff8c95fb7d0dcbfd5f301cfd0c71fc8a1576058685dd6f98c6fd0d35fe1d133cc050f01f188a818628fec4341e64a8f15f982d0fce802dff0f13be530684ff8d151c434c0b8e7fb0727f67c372ff5facdc1f6a58eeff8795fbbb1896fb7cd4560b795753c8314cf26ea692737492791618669857eae90473731e9e0173aeaf13cecbfd1186e57e030cc748431c0d7582790c471916768d308d471b6adc18133cc65070130cc55843144d318dc7196adc0ccb7ee34db35f734cf2eea69237c3f2df840ce4bfcd31d2130d49b7c0044f3214dc12c3313903385a61c2a76440786bcc44a69a9ac8163ac9bceadec3b0eade52279857ddd30cabee363ac15c91e98655f75698ddcd30b4bbb6586137d3b0b06b8799c52c53b3688fa9bca7a1ca1db06c323b03d9a423267caf0c08ef84c19e630a7b6b4cedb91950bbb34e389ff7dedb70debb8b4e7067ef729f5404df800bcec570ec9b011cdb60a938cf3415b7c5d49e9f01b5b7c3d42e3455bb2ba6f6820ca8bd3d66230b0d6da41bc6a3c89447778c47710678e461c2176540f80e18931253263b626a2fce80da3d30e1a51910de1313be5f0684f7c2842fc980f0de98f0b20c08cfc74c65a9a9a9f4c1242f3395dc176b502e376c50f6c31a94e5860dca029de06dbdcbfd53119c64c9787f4c7085a1e00158b3afd2b0d937106b5b5719b6ad0761f6b6c2d4de06631970650632e04e98f00332207c08c6649529939db1dee26ac3dee2502c0f1e68980777c1041f642878574cf0c1868277c3041f6228781826f85043c1c331c187190a1e81995bb5a1b98dc472c81ad31c324a2799bb123b3c159593b8121b8db138c290c5188cc591a62cc6622c8e3264310e53f9685395c763928f3195bc3b26f95853c91330c9c7994a9e88493ede54f224cc9a4f30b4e6c998ca279aaa3c05b3e6930cad792aa6f2c9a62aef81513ec590f2349d607e78cda939e687d74cc7849f9601e133b0543cdd301567625a9f9101ad67610979a66142ee89697d5606b49e8db13edb90f55e188e730c71ccc1709c9b011c73b17c7e9e693edf1be371be218f7d7482b9dbfb0b52119ce49cf97d31d3b8d0d034e661902f32853c1f937cb1a9e442ac737c8961e778012678ada1e085188b4b4d5914612a5f66a8723166ca971b9af2228cc53a53162598ca5718aabc18137ca5a1e0522c5b5f6598adf7c3205f6d0a79096670d7181a5c1926f85a43c14b31c1eb0d052fc3205f670a793956415d6f5841956315f60d19a8b0f7c7acf946436baec070dc6488a3124bc10da6295885a97cb3a1ca2b306bbec5d09a5762a6716b064ce300cc346e33348d5518e78d869c5763386ecf008e0331adef30d4fa204ceb3b33a0f5c15822de65988887605adf9d01ad0fc558df63c8fa304ceb7b33a07535c6fa3e43d66bb0f2e37ec3f2e3704cf00386828fc0043f6828f848acf47fc8b4f43f0a93fcb0a9e4a331c98f984a3e0693fca8a9e46331c98f994a3e0ecbdb8f1be6ede331959f3055f904acd4783203a5c68998da4f99aa7d1246fa6943d227eb04f303109fc9c9cc0188a7609a3f6ba8f9a998e6cf6548f3d3b03ae079c33ae074ac447dc1b0443d43275838c6cec980636cccb85f3235eeb330c92f9b4a3e5b27999fb1f64a8e7ab9162049ce583b071b9678d57058e25ccc3e5e33b48ff330c1af1b0a3e1fcbe46f1866f20b308b7e3303167d2196c1df32cce0176106fdb6a9415f8c497ec754f22558c5f86e062ac6b598e1bd67687897623cde37e57119a6f207862a5f8ea9fca1a9caeb30c91f994abe0283f1718ee640d213c5e5343692cd6445c27fb1efeb78a9f8b77fdc3cf775cc0fbaf67d1d8faf7973b4380498bf318d158ba7feb1c015acb7380678ba785ae4495c21bc1373b9f16ff881f2eaf8d32236c6fbcaf7875c29bf8d7b34f67d2b970a6fc8c127be7e055e0ce7258905f7a3bcc2fb7725087d863c70dd9719943acbfbaa34e231ec5762d43fd1511f52437dbac761021be13daaf41ecc6455c2c774a9f8f53d4b73edc67bfff23fe77a85f5851ea4c3cfb82feae58cfb8a2ef4e21a2546576131fa5417a362623baa6253857fed1269273c686e13855edc79ec52b79964b4d249f9ab314e9fe938cdacb3fc969c9039876b300e9feb380c67d8e969307dfc782d67e5220f700fec65c2e77aa98c4fed1232971faec5e2f7852e7ea3d1f8259e0de7c772acb0f2c4a7e118c083d6530d214a3cd763f1fc5217cf3984f63cd638dfe3393f0a91eb30225fe9884c8f6cd9a3d9fedea785b2dc5f9db26567d3faafc7187cad63c03b4cfa7a7ab8973a15a2d6f7092c14e5544582a6b066c79ec4654589c90d584cbed1c56470282690ae795cf4d2a2c4e6462c36df62a5ae5e33688f13453eadf44a9ac5c24e92c527b578a66f773761f1fb4e17bf71114addf4522fbaf428b1dd80c5f67b5d6c7789609b7e1b2ad594cc741be9662c5e3fa492e760996e9ee7f4d2a2c4e6162c363fea62b35b4a796eb847b448b6fb976724cfc59f4489dbad58dc7ed2c56dd750dc82f91cc68fe71b5e73af6693bda725debfb198066564ae24b90d8bd9cfba986d1f8a59d8ee4a647e9a28f27b89f7efc5194a818d989ebfe8f49c9092758d15e70115cab6982ad7a778ff8eb73deab294bf1d8bf3afba38e3879a27b6b0543a2d93a30bc94a83281adf8169fc9b4ee3a1917b034aef1296784a145e0fe9ce948a12ab3bb158fdae8bd5c824e5b41f8b31a26c5e2a2c2fbd1e7a3cdf652ae5eec2e2f8872e8e03d094e3e3570bbc97545c278a5eca68a1afae46ca749d7a37168f3f75f11865504ed465c9700f16cbbf74b1ec9372bf636cadeda14c94e5f762daff4fa77dbf08edb9a8faa75b22dc87c5e0ef546290ace5163506e9e6f7fbb118fc934a3e492cd3f03e7b6aa55bb2118af4f3c903582cffd5c572444aa5c174efe50542db42613775db327d108be17fa9f48d925962b4be51a6c74d1fc2e2c5ea69e2b573ca255cb458e1a9954e9c1ec6e214d3c529b55189da725c366ba547b0f8e5e8e2172e53a28c03e22d08fa19a047b158d6d3c532dc13a1680da61eeb746b8bc7b038d7d7c579761dc7999ac6e3188d063a1a6352ac3bc78bf6b35df5e713584c1bea623a3aa5126b12e3a7f4f27a53cd5be1a31ed9aa459fc4e2d94817cf700f2f5cc78c14314d4c3dd86b4be57e666b9fa7b038364ea5f6498c63bc4fc4f5e4ef71ebe2f355f8dc5c6ab14b6ffcf1692c7e4d74f11b5a4bfcfc7642fc83d46b9dcca6da3358ac9aea623537c39689e5bfa8ef6796c9b31893663a266313ca5fbf94e4e561f45e3efc3ad9934c95c0cf61716dae8b6bff505c478a52d59f3d56adaa19debd64ba26af31e3df4589c5f3582c36d3c5228f61a34b336ace9e87a381ea44fa4c69fb02a6ede6a9d406987dd53697919e65a51bc717b138b6d0c5313ca391d886f12d6da1b64597ddd6d94b58cc5aea62d695e9d79ca9d51b15de8bc94666d2d5f2654ccb56e9f1cf448b3a33317b058b59eb54728fbecd984adb389b3ddd57b1386e915a09a1ef01d45e42a4d3fa4f371d5fc3e2b8a52e8ee1b52d89a5205fadc9d362917882f56f28ead0d7b198b4d1c5a46f4a3199ec7d30394bfabf81e9bf954efff06833d606486d543c33fdab37b118b4d5c5605c4a6542783d8e3df3b66f61b16d974a7acd4c327a19757660669ae9f5361683f6a9e498e416d7970d8c1083f83751f47f07d3bf834eff3e687b533f9b99b939cc46deffb15833ef9fa3453cf94a90a9e20b7e55c9f2b7f71e09fdfcf648ef9a55a2bd032b4ae3f779d84b3d7db8e5cea8590fda93e5d622a1633dff887bf15ff718875a25bbedb145a1f4f5bf2c1392e333207c553eb7cf6522ddf9b84e6f8f57a9f86abe972673bdff6b8b856e652cbfab8b5ded71dac7fb9fbfc5f7382c14ed23de7658e0594623192325cb23dd8d93ded462da89a7ea8e325573f2bbf338f648d39a6ad762eb7afec0a0ce86da269085ed129deebe80c972ed86c824f364837ca42cf27907b0a8f69060fed485d44b0850a354b58a8385aa4e5c7b615e7e63ae4256526f4c62ac51839c3e3c053a53626a2e30f19cbf8415cb92b84aacbd287302d496c3e3a0ba5082e25b30d500025f685fcefcc19f49de2745a9c4ce0258efec1287954b09ab95b0aa7899b54c549ebca6e222c7cbbad30564558de3c8b6a144d649209bc7fac82e4310dd4c2f942239d8384e946545a292a9f084f6730264758f38c86de94bb429deebb3444baad87b75a2689b973b01eadc797150dbd969717d9d00f9c7b671905d29416e1900e9cf040df77a0145a2fd3749c02b1495478513e0168f8b83db9e125c8b0038dea5e22a94c8a6b12bb886b58de3ea968db61affa444da1317e14ac976e4c438a8eef4cd8f60869cee7dc015e1ddb031ce343fd60d8b23cba344c6fd5ea8e66db89d562a47d10f64ae749ffe00adb61d28b1b5069656e978ef2077d738b41d29a13514d0f8e78562c4cf05384f0c8dc3e94109a70dc8887ce970b9d8d6c231557a1c0e9083485e252d1644b9806e31e875f6b4b3415be004c8a1dde3207b65ab548bd79fcb3d6bac10438f2e956a77ec1687d69b125a23016d05b03217f0b45c10c7934f3d7e16b7293822eb8fd1ba00eb4c5043f6c906acbe0ec37a05c0ea4b9ff1a689605733bea8c8053c3f003cfde83bd953c4ec4cbc088736e502ae5bc1a8580125aecd58e2f0e134d19a2ff2c4ba80ea95597154fd2951f1b3e75553d5e5f1ae0bc11cd200eab67db276d544d970e0659823b6065a5703e98774a632dfd7e1023107be84cd61fe8effd16c9533433a55606a7750b6b267bc2c732f7bce06d97370b6c75795c5b900ea5c306ebf1325a876b594637e5b6cb9582fa516c1b80070e8b038c021f41d6cbc345323172e4063a03cdb99bef68c3b70f5ebca78c9062db0d209747f007b1b4add07505581bba3fab78251fd5db2dd07e022dc19ae1e3c278e6a57fa65764154a3c5d8aa0b98d6ce8d63da8ddea2c24d8b42e162d88d0ef82b60f27658b65753b8dc7cfd00345f87d367c5d162c1f10a11bc4b0bedf8a275856944b60bf7b8bf3117500ddb3b8e6a243d2a951579abdeb5b539eb9ac5518da21f651d294a277757534f0583d2a3a9cbaa7883b492ed2176d6543a5256cd008b01c6646b0827bc1880af69e5bd461780fd2280356a10121e767593fef6996894f18d3e3c1bf3c1448599778db86cb0f1877b1bb04ef3b170e34e5e92a6405e8a6bf3f352e833e645583596574b659297c262d03ca325cb265f17187ddd4fa688bec0cb4b580f959752becf8bb854282f56db1696bc9497b3e5a550dfe5d53ae51f7f039be7ced34ceee6a5bc3c252fe2844b5e5a039b79292e37cd8b388095174bb6372b2fa5e1fdbc94e6e8f222f5b9f46fe3b2938daaeb9ff24270b9b0d8e4dde6bc94c751f3529c3fca4bb26d30af96a961fdf3e92057e36325fa6fe3bd12c549bfab252f8539fe3ccdfaa4f86e6258c5c57701f7e1bb89c7fd7fbed1b70fdfe83b9e43b84252f0db7dbb53b6fb3acb1ce6efeb5ec6ca58ea6766cc6303c3fa744ad0679a6708cb987284a4da7e3acd9a045a8717a512d9745a88ffc5e24dea09d40bdd55e15524b24ad09d60b9c8aefc653288f9541047008813b3310108ed130a0c9f3ed13771856de670b6a1c2791ec039c9269cfd9cc4f912c039d9269c054ee2fc1be09c6213cefe4ee2ec9613c739d5269c039cc4b93bc0b9874d38073a89733f80739a4d38073989f34c80733a25cea6dec542d1caac90cd73ed02fecc211b48856c5b164736231b165882da20549f978f84fd9de654380b40ed3dd3269cfd9dc4d909e09c6513ce414ee22c0438f7b409e7402771ee0e70ceb609675f27719e08aaa2bd6cc259e024ce0f01ce3936e1ece724ce6b01ceb99438b762c99beac18c3e800e65073294a0dcdcdb1694054ea2dc11f478f6b105653f2751fe04ac725f4a94ed25ca32ef258e71a19cd74ee6cbbd0f1dd04654404f07b6392f1bfb2f07797f8a85c369ae2a5798635d95adf91f32cbdc08aa9ef9f4ab1df9ec72a55879e2af5de19fab1975f7c68406017885d97053833783b0a39b13fc2e660e6b4b2aac4702ac0bb2e54c9067e112b9aa280b197a0315bc8701bc85d4eb71578887d3848042562e2427acf2ce1cb44e54d07600d08aa857e72a8b2bdd642a912b00bee2ba6c29061b3684651f59c3e64ad0525c44dfb30eae2b9dc79608bc23e45a375f185f8b58ec0949d89fe7400dbd3db0cc926cb95f2a14f56f9632f50d54e8d601748bb385ceaf50b2848e6ce2eb4580ae341b1b1f17ca5593e1c3ef544c49cbc26554184f0018f7cb96a3b94d23f31e0bd02da144d7b6160b0cd6c8a433856475f27f0066994d30073908938106ce529b60f67710e6dfc03297d904937090960ce6bf00e6729b60269cd6e200cc5f01cc729b6012ae3d2383f90780b9bf4d305d9c3af81ec0acb009a68bc3153f01989536c11cec20cc18681a55d90473270761e600982bea764cd217e51fd84c586292ed119b0e265b5766ab1fbe698c043d0fcac703ead20a830708135a21d9c4d60a90a157656350ad6f60ca5f3dce924592958b67038b5c9d8dcc5cb0c964e6d701ba03eb76ba1f0accd2747f3515d62500eb41d9b0c87e9b8c456e01cac483b351bda4d66274b15b381658e121d4eb261607dcfdf00c5c4239ca43b652a7318076685d40737179532300edb0bacdb4aef74c9a80f2af9abeeaf02b0de82f47c5d0bd353b3b032b5c43898eef9ae081f28f567bf1f2092c17eeb0dcb3b88100dbe1d96803466d01922e90afa6c2da160c311c612356d2dd3064581f04e5e391d4e563a5f8a458dc1a233cd69531e535cdbd95631d41463f8a125d13efa29cf94ee686337777fbef02801d6d93bf09d21dab64f67733c8bac7d88493748b2519ced701ce636dc249ba01980c6733505f1f67134ed215666438fb009cc7db8493d4530a19cec900e70936e124f5454186f34880f3449b70927a4a21c37931c07912f5a05995e8c1f026f80cb9c58df7c4ddeb77776171682767636d446a13a9a45e4ac9a6522f0416788a4d3009c7c0c9609e06609e6a134cc2b1713298d500e66936c17471c5c4c100e6e9b638f020cde464a3e55781eee319b6a02c7012e5b6c02acfb405653f27513e05acf2ac6cb424e3476a903bed20dbebdf8bc5a19d6da7d30ec2ad4864b3da7703ace7d8e303c0c5a5cb9f826c7d2ef5d46c7055c5483131bb8cb28bb83915b6fac002cfabdb8c0dd587199bb015795c8c08eb24608de7534f84f1178267609101eb4665875b013bbc80125847a60e3ae3f2e0616b75e6c8830c6a1e807aa13ddb3908b719910da55d021ae01765a38f9daaf356c2ba9acc75ebfec02e2fb60926a16592c15c0e605e62134cc2b53f6430f70430d7da0493b077430673028079a94d30095d8090c1dc1bc0bccc26982efa0edf0bc0bcdc269884d30f6430470198eb6c8249d87124833912c0bcc226988453b674e781009857da049370dc9c0ce66800f3aaba74b4105ed04298cdc996b38c0030afb6092661054406735f00f31a4a98d011f14ab1589f3b81cdd27e58327c8f017cd766c34700668b2aa6a4e52399e3cd9300c6f594185b032b5c2a032f14338caebb599803105e678f2f9f9d9c74c0b9104c415c6f134c171d7016019837d804d345079c7301cc1b6d82e9a203cebd01cc9b6c82e9a203ce9900e6069b60bae880734f00f3669b60bae869650f00f3169b60bae880731a80796b36f6e6f4116343c5022657b754d028141f1de8dd2f126ff90e1fdceb40ae64719cb751e2ecc2129719ccf2788cf4d42e12f6aa7e4778aff3455a2bbd777dc723bc534998f1c9565e9e0f161e6ca4841b3e05917fa84e5ac2560013667eb2f5bf3d01d0db6d034a68a164406f07a5e91d9440b9e3ace0cacb4a3a5c646b7e1b80d2f24e4a5c9d8d4a4bc25e3a5959b907c8da77d5ed625628102e66251c49aaa6c2fa1bb0d8bba91de2f040b934be32732af33dbcf0972b9d6c1a6d03d0dd938dccde47fcad7ec7c84a675ca0d41ccfe0198ac4ad4eb26ae72280f6debaf508087b442e8e21cd0428efa3f708c85fdf544e331e0cd0dd4f896e0b90c1cbbdd72a652772b998b6cdcabc0fd9e2ea61a005f94076f7ee54d6f4c7ddb3bde6c0f61ecc764b72a6c4b69a8d16624a45061ee909592aec935f2d136525e1d8e54554686f0016f910b5452a4776dc1ea19f54326cdb5161db1258e4c3d918584b7d2dba8bebd77a012b7cc4269ca4278291e16c07703e6a13ce414ee2dc17e07ccc269c039dc43906e07cdc269ca4ee9ac870ae0655d11336e12c7012e7ab00e79336e1ece724ceab00cea7ec6dba13ee87246bbaf70383c04fd3ef244f056dd02f16e108d1c61811d4fe00ea333642255c074706b500407dd646a884252b19d49b4033ea391ba112ae8b23837a2380fabc8d5009172290413d10407dc146a8848b11c8a0ae06505fa484da82f9531995f243ff080f3563c987f2dc1b501ec2e2f05ea284d7416391fed284e96c149b205cf0547a2faae50a15e20dc24c4e76c04709a8e35fa65e1cc327751778044ad844efc512075770f40016f88a3d0ef15cdcfff31a28095fa544d994c5a730a6781fedeebdca3f76affceb0dacef354a649b791765a28cabf2ea5fbe3a88bfca7be03c0b9381eb4105ae0300f7ba3dabd3490f3122cbb8fb01986fd804d3c58d7b4b01cc376d82e9e2c6bd1200f32d9b60bab8e86a3180f9b64d305ddcb8570c60be63134c1737ee2d0230dfb509a68b1bf7160098efd904d3c58d7b4500e6fb36c1249c282383590e607e60134c17ddcf1f01607e4809b38d8439d0fb53cc56327faa36b8a43f0b6b81c996f5df01407e443f80eb2fa85652b3048fcc07d1f100dec7753b7ce68bf21d7e13761cc9d6a49f00066e3fc946861eb08966e85b814d7e9a8d4d796abf2d9fd03a001cceb169edbaed0eecf333eab14ab54f6c9100ab649732c243111a508163c01e3fafcb323238d94a5846929d95570a6cf00b7b1d3f90b628c9a6c24e0170bfb4192e61df870cee4900ee5736c325eca593c15d0ee07e6d335c17fdc1ec0de07e63335cc2914f32b85500eeb736c3251ca327835b01e07e67335cc2d92432b80702b8dfdb0c9770de930cee2a00f7079be1bae8b4e73800f7479be112ae2521837b2880fb93bdcea65cacceaac0faba9fb3e1470e3a91e4ee53ca59b9f8a8cafb9caff75c28cfaf74d58de4132c0ef4976c6c31f47d248d14fe4066787f2f61fe2eb86542dc7261c3eee27c0ee0fc9512a77f1e815ace384b0c0b167baf4f65412f35eecd010c05087fb3b7f47471746b2f5031fd4eef720a1bbe267420d9940a5d0eb0ca3fb231a192ca1a79e8e3b01f657d5e4d85f50f509fff692356d25e3f19d6cb01d6bfead24d9ffb67030e0319ff7ff63a0d20444be6346039b0d2bf29d16ecd8293d489aefcf065148460c99a50ab413dff4f361af558a99a78d09d8b47dd1d0decf45f9b70f67312e7f300e77f36e12c7012e7f70027ab6f11cefe4ee2dc06949d319b700e7012e7388033c7269c039dc4b910e0ac6713ce414ee23c1ee0ac4f89731b96782c096f7fce10424ac41073452d885d3c72b902544e0db261afa9fba6259c1325eb8ce6039c0d6dc2d9df499ced01ce4636e11ce424ce790067639b700e7412e75880b3894d3849d79390e13c94c57136b509678193385f03389bd984b39f9338af06389b53e2ac6d834430a313ae6d22dba47337283737b305658193287b83fed1e6b6a0ece724cacd00ca1694286b3f260fee8182739d848bc7c90e763c1f949b2d29b1ea1632a63e3d47da64229ba01b0e6cb695cd705d9cfddc05c06d6d335cc2813d32b8bb02b85bd80c9770750919dcdd00dc2d6d86ebe22168c300dc36d96827c015cefeead1aa9ae3f94abd97f9c7077acf8b6a56f4b9b830f700d04ed8aa2e5bb2501c69938bccebced3a07fd59612a57261d4d7fb133c40723cdb541c755c07ecb21d254ce879075a6716e091ad67fe12c06b4f098fbbe3a810b11fe1fd5deabdc48f77e6d3734b18e16a66b2d2700b00ae0325b8d6200b2f1559b8b066ae332b1997ccf61a8252b063364a416c896db04219e8a4f7e5ae0066279b60bae87db91b80b9b54d305df4bebc0d80d9d926982e7a5fde16c0ec62134c17bd2f770430736d82e9629fa63380b98d4d305df4bedc0ac0dcd626982e7a5f6e0b606e67134c17bd2f770730bbda04d345efcb7900e6f6753ba4e68bf2376c11d6e5641bb6e68041df6e7589326ba76692b9c71c0b5076cfc6f8393ecf0e0566699ebd9a0aebb72c8e358f126b4b161fa7e4420a8520d7877967037c3bd893c109ab1db20c7e00c8e03b52a2d4b9001aeed128627cd7f0a484d14ce2a931b291cc4f806df6a0046ae670c545a7ace5a089d4331bd93eb5f6a68bc31d538095f6ca46d31d66fbd13547048c6471cff6e4599eac3ada0dc0ec9d8d3254ed7b5bc86a3f1880d03ac980fe05327abe6d4009db9b644073412ddfc736a02e1e5df106b0d0beb60125acdbc9807e0980f6a304ca9da9f981ae1037b2e6e28f6cf9417f50fd1450a2ebc852ef0d059da99141255b097f3ab0c7fe364275717bc1d900ea001ba112564564508f075007da0895b03a22837a32803ac846a884eb92c8a03e04a00eb6112ae1fa2432a88f01a83bd90895709d1219d4bb00d4213642255caf4406f53e0075671ba112cec19341ed0c7af643eb764cd4f569e35d817dee42dd055563a28b44d7334b1372dda8d0edc3e2e876a54417dd452ae1a41c598f7e23b0c4dd6cc2d9cf499cef039cc36cc259e024ce76a0ca196e13cefe4ee21c09708eb009e7002771ce033847da849374592219ce6300ce5136e11ce424ce7500e7684a9c6d6bc1195ec2e0e2fae33200738c4d305d5c7fbc14c01c6b134c177760160198e36c82e9e20ecc2500e6789b60bab803732080b9bb4d305ddc815908604eb009a68b4b1237073027da04d3c51d982d00cc4936c174710766630073b24d305ddc81d914c09c420933fda31f091b49d554580700ac536dc44aeafd980ceba360e8780f4aaca93be71b2b3f09ee3d22aca4aea082fb33803bcd66b884cd2932b81f01b8d36d864b588991c17d06c09d61335cc2e61619dcf500ee4c9be112f6ffc9e0d607ed8459d96827a88d0b2bc48b6a8be274368a4d6023bc972bbd97d5b645ff0d429b1d4885f51c80754f4aac66e71a130eb290b9f0fd0e1407b329d172b794c5355b134779bf0b3c16256ca2f749091d38b2edb27c999102b7974d5377a4eefbc9a6eed6023b9c63134ed28168329c2f039c736dc2497a8014194e062aa0bd6dc2497a962119ce1d00ce7d6cc2497ad22619ce0900e7be36e12475a34a867319c039cf269ca4276d92e13c0be09c4f89b3a17751e63d5ec896307e04847ba872591c5521252ae5eabc8fe842fa6eab96791fac66ae3baf7a1b205c4089703b4de64db5ab0847ee095733dd1b2382dc1764e9852e40265c7f4706794b00b9c805c88443cd64908f03fda4621720130edf91413e0c405ee40264c2e93e32c87702c8252e40269cf623837c2280bcd805c88443d26490df01904b5d804cd82b23837c0f80bc9f0b9009d7b79041fe17405ee20264c2dd006490bf0590cb2821473b8d9eb05020eb3c5f03502eb50525e98c0119ca3cd07b5b660b4ad2b92c32941f02ab5c4e89b2b977518838cd766f82ba158b632ba7c456fbe1029b929bad0701d6fdb351a7ab253efc65fe7939ab62517c91137666c96c770b507a56b80099b0334b06f91f50ae56ba00d945affadf00c8552e40261c602483fc3680bcc296c616a97324b2c6d6c300e54a5b50927af22143b913a8c40eb00525a9fb0432941d00ca55d940b990e9fdf0656dfd3fd99144d7b338cad59428d51a036e758b455faa48ac65c9da71ea646ba62f01080faccb8c0dc5915a23d97ed54b40757310254affa836ff9312d9a79f234741a7cb97dc5b30b413b0c483b39199fb6e7299f92c80f0104a846ab55f1ff1f758c64f639aeefd5d26ab13be644d6dd2213fad896cabce9b00e7a19438b7aca5a65631252d179751619c01301e56b7558c2fca773c4cd80327733cbc27683b5653a26c053278952811d5916c592921c9000e0775f49abab4c5aced6c266b7c8f02b6787836ea6b6e8b4b59f8f4cf2c5823d958cfa7a0643ca26ea735a0c02cadd1aba6c2ba10603d92126b1b89b5bff727be1f74bc685116b355d9b24fb2a18a4a00f2a8ba1caa08760e5d744d3817a03c9a12a5f20cd527a177b3e9d8e51900e63194301b7b17fc65bef66894ec61bbd7b36e0a701d5bb7d9d8f506784bd07e3c8e12a5f2dea0a6c08ab527216323e32e1e947a30407b7c361a43519b42a42b8ec81a434d4033fd041bb1922e2f24c3fa00b0d613b331d48637dd6706b2fe00ca72b53915ceed01ce936cc2d9df499c6d00ce936dc239c8499c7300ce536cc239d0499c2301ce536dc2d9d7499c2b581ce76936e12c7012e70b00e7e936e124f5e24c86f34280f30c4a9c2d25ce02efcf4aef669947a2385b431d64e7253e0bf09d990d6bc46c31d1351be1301cd950c82da0ea39cb269ca4bec4c970be05709e6d13ce02277136077df5736cc2d9df499c8300ce736dc239c0499c5301cef36cc239d0499c47019ce7db84739093382f05382fa8cb498e6087d2c591f8bf581ce5859428bb6b500677f7f0c98ea5defffcdf7cebff0a217274cd64c80c412d0bab86e753c11e0f605f940dbb4d6dbf0f615793cc6eaf00add18b6d41493a084286726b509a5e620b4ad2011032944f02ab5c6b0b4ad2690d32941700abbc941265fa6e00089d5491b9017800544197d5a5854271a48e2ec996797d0c32fbe594285bb0f8322f7fdfc5d26c8d7592ad283e0ed8e13a4a787cbf45392b135996af8c9bcefc1de30b193fb867a5b8c7c5f1d5726418b7a3c2d80660bc8212a35aa354c5167b8f2b131aefc9fd1fb8e801e17f00ed959468f9740cb73e78ae4c89fcdcbdbe793f80ed2a4a6c6af16b6aeb880b9c3c31fe0300f36a9b60bab82cfb7300f31a9b60ba7862fcbb00e6b536c174f1c4f8f701ccf536c174f1c4f85700cceb6c82e9e289f1ef0098d7db04d345a71177019837d804d3c513e3ef07306fb409a68b43195f019837d90493d0e91319cc6f00cc0df6c01cec640f68221864bbd926982ef680260398b7d804d3c51ed07800f3569b60bad8039a0060de66134c177b404301cc8d36c174b107340ac0bcdd26982ef680760230efb009a68b3da02100e69d36c174b1073405c0bccb26982ef680a602987753c24cdfd711a18d565361fd87c5b1de438955f93af25d3ecef06ef39389470a8be58296b3ac387b249ba3fc0880bc371bf6a93c7bf8cef5d4e34dcd29ee5660c9d67d9458d5620498e9535f8e40d8d9245b8c3002a0bddfce1295b0db4956a2fe0c0a820728b16ea3b158bff4e436b98ced2e56bb97875007f704131609643b82eb01c00f52028ee655cec5f1a66900e5439428d5e66a5efbf37549653283bbed0d764bd0267d98125f74273e844d7cb28cbd0bc0f9884d38fb3b893317e07cd4269c839cc4b918e07ccc269c039dc4390be07cdc269ca4675591e13c0dd4e44fd8849374be9d0c6723609d4fda8493f4cc2a329cb703eb7c2adbbdf8540fff263db992eccc960380a53e4d89b68005c79df8f0076fca2ff7b0568801bc8a9a2193e96c149be0452311b257f0d77c374b2b81b04bda832a114e064329cf64632825ea400a69a5564d85f51360dbcf6663709afbfeda141df1af07e5ef733655670328cb5cb2ea6c076097cfdb84b3bf9338b702385fb009e7202771ee0370be6813ce814ee21c0d70be6413cebe4ee25c05aaa2976dc249ba33890ce7cb00e72b36e1ece724cecb00ce57b331b7941a4c17a7e9ce067da2d728517664e1a34e78bfc717b2a92d8778155446af67a347a4a0968650062b22f77a44d703906fd802d245677f8700906fda029270513819c8af00c8b76c0149588793817c13807cdb1690842b99c840b60435f83bb680245c664306f27fc022dfb50524e1ce4d3290bd8045be4709b203c35683fa531b23bc172bbd17d50ad10af1066169497648fd6280f4fdbaecf1041be72e6e387c0e64f30f28516e2d504ef7e25f2e26d72a189f58e35ebe16b225de93250234b7517eed8b1de3fdf27577457460c9d6d6f3d35114d80f29c1c2658ac5604e322bb33f64b3937b01bbfc281b3df1a8b3932ece4d5e00a07e6c23541777239d0ba07e622354c28e2519d49300d44f6d844ad86c22837a3880fa998d500907e5c8a0ae01503fb7112ae1001d19d46a00f50b1ba1127abd21837a1680faa58d50097bf76450cf0450bfb211aa8bdb114f0350bfb611aa8ba7b79f0aa07e938d41137cd6ddf5f9a347591ce5b7753bfee48be26721905a25d976c4956028ef3b4a94eaf088be21a02e1f94bb0864e9efebd20ee1c930a47648760ec70c60873f50a26ced5d2c16a70e16896c5be1a95beefdbb50089cc8fca5dc650e968a9b8152f1c76c4c74a81923be4fe300593f07ed324b9dcb1ba8906e0facf2274aa4669e44084798c83c89ec0cd0fe9c8db273214bc523838b6eaee6838cff0b25ca747712911ea2574d85f55750bbff6a2356d2f38cc8b05e06b0fe968dcea5aaa65688177d219bda1acf05a034fd9dba19cff7b77169fe4e37ae2a3cccccbdaa6847507efe91ed5a3ef59dc684639e643b8ddb00bbfc93126dd403c74937c2902d6a3816949d7fd9849374e70619ce1700ceffd98493745f1119ce1f00cebf6dc249bac5950ce776a0ecfcc7269ca41bb0c9708e0738ffb50927e91657329c8b00ceff6cc249ba019b0ce78900276b407ccaabeff1b3c21333c5fb2cee48c53d6c03581c5b8c125b74271584cd75b2fd9783410d9e6313cefe4ee2dc1ae0ac6713ce414ee25c0070d6b709e74027714e07381bd884b3af93384f065551439b70929e924d86f33380b3914d38fb3989f31680b33125ceda962a0433ba8b1b0a6f03e566135b50163889b207e8f534b505653f2751d603289b51a26cec5dc4fd784ef238ac7270cea725280f9b53e252ebde78c08b84dd29d9cbe42beecd36c600bccd28e1d57e0a0c5cf996a55d172da9b01e06b06e4e89b5a177c1d75dae607c3fba8bbb7bdb01542de851f9478f0c6784878c91adf0dd15a06a49894acd6eabf51615424ca110a0d65604575dc0c5d38419960ced4c50e7b6a244ab7c74a4d6a876aff1720c6852b7b605a48b3b23ca00c82d6c01e9a267ad5300c82d6d01e9a267ad1300c836b68074d1b3d63900e456b68074d1b3d61900645b5b40128e299281bc08806c670b4817c76ece0720dbdb029270270419c84b01c80eb6802474aa4306f26200b2635d0ecc4271a40d20b2c1b2eb00ca4ed998c8f24f4b57bfbe32a3452f9bbfe6af25273f339d6c4bde312c8e736b4a9cad181ff9f1876d0bbdc7e399bf50bfd4bbe21f1cc8dc1c3a6b0d0076a604d89645d9783780b2e626cbdccd41e6ee62134cc2f62419cccd00cc5c9b60ba784c775300731b9b60bae8a5b51980b9ad4d305d6c10350030b7b30926e1382519ccc60066579b60bab88bb61e80b9bd4d3009e774c860d60730bbd90493b03f4e06737300b3bb4d305df497d102c0ccabdbc10d38034e58fd90cd80978319f01dea1265d00316214a320f585300ca1deb76511514e8bad3e5652c8eb50725d6cdbd0bbe9caa982d11e3453c5367c52f06d948512780ae673632776a958e8b8da1c900652f4a945bb0f820f0fe1e8562214a1d3693953329c88e9d790940ec9d8d46506a93127d9d6c513600d54dbe4d305d6c51360230fbd804d3c531f53f41f3bcaf4d305d1c53cf0196d9cf26982e8ea9ff062cb3c026982e8ea9ff0e60f6b709a68b63ea3f0298036c82e9e298fa2f00e6409b60ba38a6fe198039c826982e7623bf00300767638c28fa08918b87c8b4078da49d6cc44ada9027c3fa08b0d6219458bbb2c49d67958c3b05e3befc8b6a863f6a3f8d97b084251b162906d6bb733636f841eb4ddd7d2d61839fcc7dedbbc082876663ed26563024baaf256cf2930d286f003877b109673f2771be0270ee6a13ce022771c64039ba9b4d38fb3b89331fe01c66134ed22588643827029cc36dc239d0499c9500e7089b700e7212e74500e7484a9c2d254ebeb16aa5d889c1e738b334b34986ef6916c737ca163f58a48377643bd7ae068da2d1b6a02c7012655790a9c7d882b29f93285f0456399612656b165fff113ce6304b6524595ffc2050468ea3f6d8c63f2e14b15f28c786dc3ee2281fc01b6fa7c736c2d975328f6d8f00acbbdb524292ae47222b21ef0725e4045b501638897230a8b727da82b29f93285b019493b2e15082a3f28f20e6aa8e67fe197babb2557b93813c13949493b301b2ef260af27400720af54131caf3e502efef856c099b236774dc6b00f504d8a666c3df2f6f802ff55ee356e7bacdbd05e0ed918dccbbd3269a792f0620a75182dc9a0567c48b44dfc5efd12c17e38cc16507be607f1f1ae1c218b27d6887807a7abaad605d74713b0d809d91edc5056a6d867ff2bdfa1de1bdce8736560ae42bc4d006e1f218b22a6912403bd3ce0d7f847df26a2aac7f823276963dbbd65cdc89310ba0dc9312657bd0682a61c502e52c163f63828f63168a27fe3826b1f332b22cff31003adba6438d0653564e64871a958231a3bd6cc249eafe840ce77600e71c9b70f67712676b8073ae4d380739897336c0b9b74d38073a89733780731f9b70926e7321c359016af67d6dc259e024cec701ce7936e1ece724ce7300cef9f66e1120dcfa4fb62c6128e8c517d28fc72f1702c64ba4a3a8c7e3c956bc350316b9c096394ad2aa876c50791da8c917da8292b4da2143d91164e6225b5092563964281f0756596c0b4ad28e24dd8135c02a1751a2eca041b969ee99dc07202da144ca2fcac412ff72076be902504b2fb6e71810171df17c00cac3524a945bb2f8587a7c0e5d3dced20c3a19c6838145ee978d9e4c155bec3dae44fb3163e5074107a48465e2155468ab01da25d9459bfa442f69139d6cdee77780b62c1bdba3f8eab74d677bd49300df527bbc5f933a3b212b416f023097d904d3c55a7d0380b9dc26982ebad7bb01c02cb709a68beef56e0430f7b709a68beef5ce03302b6c82e9a27bbd0b00cc4a9b60bae85eef2800b3ca26982ebad73b05c05c61134c171d8cdf0c60aeb409a68b0ec6ef04300fb0e7c81ac2fe0fd98af6c3c0d0ef2a4a941d99ee3cde6942d8723130b7e99cca7b39b0cfd59450b71550a77bf12f17b3e115dee7956c0a3b400cc65578ffe6634ae5de3b4b04d01172e79a1fc018efb7d813ece2b9bddd01e203ed396a89b008203b6a695f50041c94adcd807cf8ad8455666b30ae9a0ade21c00e0fa684b7a3c60ee16c6481660d5125d83610ffd768c6b7b42c1703c8848dfc1e54c84f05f67a88bd9bb0088749c846e64703b487dab9098b70288fac90f8011412875162e54197896509ea942bf716236c07605553c2da4c48ab904da251a1adabee35e5b706e0d6d85b2e12f6dec9cac559a05c3c9cbe9734ba66a1c24881cdef0fd551139e6c21570b60af47d878ce00e980325965d310d8ea91366225f5a44986f55eb062e9a86c94ae70f76f2a3d7cf2e112b2befc53a02038daa6ed2da4a7a3936d6fd91958ea3136e1ecef24ce2e00e7b136e11ce424ce6280f3389b700e7412e70c80f3789b7092fadd24c3792aa88a4eb00927a9ef4d329c5f009c27da84937412990ce76d00e749d958351ff4bfb9a9ac9a5f0b309e9c8d098f7ea17e92cb4efb4a4085738abd9ba70917dc906d9e5e09d09e6ad3292ca4db0cc8ba9547019ca7d98493746d1d19ce3b00ced36dc249bab99a0ce7d700e71936e124dd154c86b31318f53cd3269ca4cecfc8708e0138cfb20927a97b29329cf301ceb36dc249eafc8c0ce7b100e739764e7110762faba9b03e01aaa4736deaad939e5149d65bef03709e67134ed21354c970760038cfb70927e919956438e7039c17d88493f40455329ce300ce0b6dc2497a363a19cea3591ce74536e1243dcc9b0ce71b00e7c536e124dd4d4c86f31a80f3926c9c00836de68228093772910d26df0740aeb505a48b27b3dd0b405e6a0b48c231783290e300c8cb6c01e9a29bbee100e4e5b68074f1b0e42a00729d2d2009dd5690819c04405e610b48c2e60f19c8c301c82b6d0149b82f880ce41a00f22a5b40123a9e2203790f0079b52d2009f7029381bc1480bc86126413ef627fe18e8fff297276b75a5700ec5a3b8f9227acabc98e923f17605d9f0d7729a94e9811760ec9a6cb8e006393d7d9049370c8820ce69100e6f536c1747122773f00f3069b60120e5d90c15c0a60de68134cc20a880ce63200f3269b60120e6190c1dc1fc0dc60134cc24e2319cc4a00f3669b60120e6590c15c0560de62134cc2ce2319cc8300cc5b6d824938a44106f35000f3364a98fcecb17256263a8b7c4739ffbc5008736ff8824b51d036da73428b8beec79f05f6773b25cacd59dcdf811f7896f6979159e17bc00aefc8c6fe327ebe85929a2578cba8e05d09e0dd998d4a04fad9e0ee48cb45b551c526799f1649a0c49e35ba51c17c06c0bc2b7bbeb4a6327e30672973d797566700ee6e7bdc350f72f28c95fea02ab9c726982e9eb13200c0bcd726982e3672fa0298f7d904d3c53356fa0198f7db04d3c533567a02980fd804d3c533567a03980fda04d3c533567604301fb209a68b67acf400301fb609a68b67ac0c04301fb109a68b67ac0c02301fb5e78c15c286115967f220b05df9316af7df959e8065de4bfe47ee8d7bb76771588f6763295ff06468ae301ff559e5fc28e48100e413f69c90429881c94e48990d32f09394283b489465de4b1c23f76775805ccc17840a17f811b622c98e48ea02903e658f7512367bc8ac737f80f2697bfdfebb7852f912d0087a261b95d1e04db4327a085446cf66c373259cd519ef7db2875867ee37d5ddf5943e11607c2e1ba5666a3d1c17c784f600289fa744b9b54459253cf557462a33093b8e6465e62f00ec0bb68275f1109a1f01d8176d054b581490812d04605fb2152ce1240619d8e900eccbb682251c3626033b15807dc556b02e36f8c700b0afda0a9670d90219d8ef00d8d76c054bb8b8860cecd700ecebb68275f12cd43200f60d5bc1122eba21035b0ac0be490996ef4ee6c3278bbc1b2bbc57aa3c010b851a7c78851f9de8e29acebe00df5bf68c01b838613c0fa07c9b7a79ec62b119a548cc635680233e2be9c0916dcf6f08c0bd63933f6b52c7cb64c37ab78261e6776dc2497a4c1219cef700cef76cc2497a881719ced6607ee97d9b70929e2749867308c0f9814d38494f3b25c33917e0fcd0269ca4e74992e13c1ae0fcc8269ca44b12c9705e0e707e4ced4fab527c522c6eb9ea4fab0f8b03fb841218bfe02f937602c9ecaa09c0f4695d6eb50f4f04bbb83f6d2dc8a49fd904d3c5fd699701989fdb04d3c5fd69e702985fd804d3c5fd69e701985fda04d3c5fd698703985fd904d3c5b5484700985fdb04d3c5fd692b00cc6f6c82e9e2feb43500e6b7369eb4477a966e3515d6cfc108e5773662253df1990ceb85026ba30621e16312848f14430b7c706121534e4a2abdfb63199f93291648167ad71359a9f86abe0764aef77fb4b4d8c7fb5f773f261cf78c66ab58b9b8cbe51509d94bbda75c33af1f9ce7bdf23d378d16d234f262ad18f7d4c523cb6734170840be93954221f94021274fcc365588b419e1fd5dea3d2b62e3c470ca124f729ef0f8b54268334dc4a4d0935a2e629d2734e373a6e5824411f3e7a8a6cb09e785de755eacb17c678177afc463b4dcfb3b2fd69cc5fd882d908e60e630ff4c763f4c9f568958975d019e35055f4ef1eeedee3de1547d6d38ef4211cb85725423a88d7ee4232fa5d95f5feb705c4a649ae609332a13e4cabdabcd05576e6a2b84c587dddcf8d2fcb5e515322ea345a6e2a9cc0d3326d290a734dfa23749bc59e8855f287e678854e55699bf83f75a8c0fb2f84b017ad72c02e82d4fbb5f2aafd4fdda65724b4c2eed076e6e317d495496b13c545b8cfc6ccfbf5f24aca858481d5f6b4c6b8f1f9e1f9b274995fc1d795a6ccaf1ff91a7bb4c7661a66d45769de9a57c91740538c57bb94828c5ff6bf0ff00b1fa0e96c6700500 serializedProgramBytesString: - serializedSignature: 455d0b33547a01605da240b705fd22044d767ca54d57a202c6782d0debc8de39f3762d7abc386dc898ee1cdb977cbce3ea2f682b8bf96b8e47f2fd9191811e0d + serializedSignature: 871334729870422771d4284d4a7c4ee7cc4d130fa0f89efc22e772d6e62093e44b73bc3e39c89f1c9c1f92c0fed28efbbdad4fac9a1490a7fdf4b3081bcfc908 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/3e7bf5842a194484caeed37a5d21a9b0.asset b/Assets/SerializedUdonPrograms/3e7bf5842a194484caeed37a5d21a9b0.asset new file mode 100644 index 0000000..0133e63 --- /dev/null +++ b/Assets/SerializedUdonPrograms/3e7bf5842a194484caeed37a5d21a9b0.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 3e7bf5842a194484caeed37a5d21a9b0 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1c47f5f8e76ccbbdf76eb99fab6435db899dd8969bdc23c98e13dbb165155bb16c292a2ee9bdf7de7b6f0448209000010224210d08102009a91092002104089090ffceec8ceedddebcbbdb5bbdd58cff3ff963adb6bd79f39d37fdcd6c871ce6fc44a63bbf36b05256cc66b2f5ac8ad5b33dce5fc5ce71b7f3cf3d53d7d7b146e7b8c3f95de1dc9bceb253bcc97f2647863abf4b9cb326d6ecbcd9c22a9d63adb85fc6aa9dbf4b9c77ab9d337eb5c6f95fed3c15e9e4bcb49e2d666bd91a3624322885880de2a526792dc2e315e9eafc5ec40e3877ab85523c901c716b88f3abccb9d324eeed769456cf6d625b44b4763bf72a9d771a599d2373bb90d875c24c26fe60ee61803c0e94c7feceff6ef2ef8ef2efaef26ff87c963c0e4af3f9c1e0bd6ee06f4ee8d624ef0f91c77f3aff3b3b7fb68073feee47f27ca82bafc3ce24b286cbe308791c2965ee4d43ff2ef2382a457c93c9180d64a5c3acab3c66cbe318a9efbe0cc31fe7328adc08e4f1e3bf803ed920ec6ee03e3f8e0d1077958e9f79d2f133371d3b5c2bd3ef5d797dbc3c4e94c70952b6f3ccc053e5b549f2382c855e93ddf7d81c16b35927cc8e0df23c2a8f53e471aa3cfe47eaba1f9c07d545a5e93479fcb70ce380e6ba7a9edf3f5e9e4f97c7199ef49a299f3b419ee7a4a94f3af6a774faaf0ce34470ee70ecb42d892c95ee9f7bd2fd73f9eea52ec74e8f7be203ed4f273757ca3b2983787ce189c717ae2e5951cf73a97450f267c9e3ffa4dc93c139977ba5cfb87592ef3d2acff358eab26d401af70a5d395d15eb22379cce03ddeb9de7b1785b2e48a1a74adb2f3d69fba5945b27e5aaf8cf76cf238af3282087bf7f4abc5cfe27942bceb95c5546281b4fa5a7caf787cae361f2389fb5e6e3092aee87c8a33c8f44585c1920cef9ffb9b17787d4f9e4962c8d0ef7a4f530196e871432d5fb0be4b15b9acfab671606d079913c764f33cceef2581c20cc1eae2d74fdd8630b4529642e76f9766d063a3872baa9b260893c2e95c765927f96c70e54fb27991da4d265b9d48581347074e9de579e97c8e38a785dd84a8f4ea7b69d4e918e52e669e09c1f3bc9eba78373aeeb3a379cee4f4b99abe471b547e735743a3bad6bf15eaf9ec036d2792f997dad73e3d723d795dda35c5e3fc2a3dba298de5d178377951ee9e48732c9a28b877117a983625bee79ee0c70ce8f9d63e189bf9d777b2adb1a02aef377cf04e7fc7e699aba6e608936cbe580f246fccdc396e57fcf4be5b347b2c4bca77b971f411d29fee6f25e93ef6d6489f5987a8ec7ed2c70ceefaf4f336e4769f473c2edb520c9bb47b3f8f26741cc1ebabc2caf6d92fa7467f1794b9583a363ef4494ed6f76cffb285db6c877804d456419d85bd5a7c7c8e376a6af67b7010e323f3a5de0d6b047a9f6c6d6246155c9672a3df15e1793d343f6c5faa8724cbd330979965fab96c75a79541c76c59e9da4f281aa1b8f95baf564f1edf41de03a3ff692f7cf06e7fcb99a98ecc177ca6bbb3dbaead2738f27eeba3220999dd5bbcf4e94799035b86cfbdc28b93dedd1610b4b6abf91de1ebbea2d8f7d587c79d2c70da76f27379cbeaa9c3a4e1e1be53159599c4217d6e4be37fe41792eed37d217d8526f708d1ffb493dcf01e7fcd85f5e3f179c73fddf45e4f495cf9fe7ead04f95d9aa5daafaf9baf8a9f27100d073809477be4f0639693e97cc460eb8fab5f65d54ff4ff5efe603d9fda5be0363f16a6dcfee07f7f8b9babe8fc5d5c34975516da35e29e233003cc78f2705887fb27baace92ba8b7135d09f8bc8fe7dffcf92c83acde5344cf50d4e77df19a8789fe1deefaf6c48e555d9df8c0c8eb1ee77adbca7ea9d2120de72ac460c1faa6bb29f13017df3881a1f3bdb933e1778ee9f0364e8ee9f0b74d0dd3f4f5ebfd0d57da02a9bcff7c4659f47d7a12cae0c65178070ba816760d817f948cb0be5bbc33d69395ca6cbd349645da44fcb41afc8f38b3d697989272d4768d252b659222341ba4d90d7e018a04adfd1b16b1135be78199296eafee540aeeefe154007ddfd2be3d37270aebc7e159296507f98965727c63532ca13f6c569a4a50aef1a79d495b3d7c9e32429f79234e45e2f8f3549e40ef1c8bd340db96a1cf48624726f42f4cd243c65eb727c29a2c6734f04e78edd0e792489ac9b99d6d6873e25cf6f61f1b67e2b8bb7f56c9668ebb7c97b6363e92f58f06be358a2ad8f0776922defdd0e9e81b6aaeedf01e4eaeedf0974d0ddbf8bc5d9fab091f2fadd4c6feb507f68ebf724c6553c03c356f936595adeebe1acf8aabc7c3a3877d26798d24fb50d4e67c9ebc6fb5cf951d526bf5fca9b28e55f0ecef9719227dc4932dc8f5d39c3d538494ff7faf0aef2fa33f2fa03323cf5dc83f2b95ccf730fb9e7539e92e75ff1f057b6ab6c251ab3b7d6b83c0ceec1b84d61f16d92afcaeb53415a4d01d7605aa9b6592aae5f93c7af7bf84d96f2ae00e7fcb9c762fa4fed24afa9789c18bbd77f82277d7b023dbea1b715a12b4833df6d2415e76fa688b39f32691a8b2f93a6b976303259bfe609f94cb2f1e9efc8e377e5f149297f3a8bef9ba9f98defc9f3199efb6adee38618fbc19f033d946cfece9549f451f1ffbe3cfe401e9f92e1a8f994fde05c952bde3a22d3766ca6f7b6499d72e2ed479c3be9305ad9a9b2c5ad29ece387f2a8da5815529e9a63d90fce310693d20c2b49bc22792cbe1f9b27efff489ecf62f1fdc402cff305f2f91fcbf37ccff3459ee7e5b811fb893c2f8c7f9e3d03e4f0f36763718ba8399fe7c0b54279eda7313ed9aa3d3e3b3e6cf63c8befdfa93edc1cf9dc55e03dc840dd3f4f9ecf8d971b39449e5f0dcef9f1508fdcb91e56877ae4cef3e8fb823caa31909762719c5e07de013cd98bf13293daf4b352c67c16dfe7e7e78e3d67276bffab77e5bc4ee47029e31a70ce657ceeea3bb62f2e2bb2c0c3ef30709d1f17cafbd7827347f6d8aa24fa3d279f5de489db22f9eead69bcabc64a177be2b658ca7855c6eda324b27e268f3ff7a4a1b2592e6fa9265dd55cc88bf27c89d4e13a70eee8304ef5917fc1f4b65dec79fffaf8f7c7ab36b4eab7fdd2a3db32163fcef76b797c15b749f61b8feecb63cfb4eaf72b8f7ecb3d7a97c8706f007aa8ebfcb882c5d7516abee6b7f27ca5e7be9cbfd1fa1124cb236a5c6c95c78e56b9fc26a8319edfc9a31a2fd771913cc4f89c1a338ac687d37a0fd36bbe0c7f358baf87564b7de4f8ff04550fbf2e8ff352c8fdbd47fe1a29ff4670ceefebc686df94c777e265c4d9ba1a375e9b84cbdbe09e6afbbe01dee3e76f81f8a41a4b4b96aeef326d9f6ee2f3f25cd5e30d29b8bdc7b46df849037dcaf9038b6fe3bfcfe2dbf87f9447d5d7fa93e4b2cec3e10379fd8858789175e09aaefd9e4a37ddb55d5266298bb7c35219ff4f5dfd27ab3ea3b2c3635384259f8b9481e75458e5e0da87f21a98678a94836bfcb841ea76133877748beef7c83d523e7733089b1f37caebb78073fe5eb63c3f8ac5fb8629799b804e47c930555fe5234f1847b35839c5ed48d9e3ebe07e37a0a7baa664c07ef62e70e4d76f9569901b1f66ca34d05dfbb33cdeefffddc86616df5eda2c8f5b3cb6b3c5653545f67fa728deca4e1f4c1eb692cbfe22cf8f61f16d513557f757208fdfbfcd677cb67ae2b3353e5c213f551bec317994e546a442be733b38e7c76d20ce7f93d7b6039bd8268f95f27d35e6932daf578167abc0b3fc58cde2fb9dd52effe9b91ed9eabd1af9fc9de09c87f5893cdf21efdf25afab3cba13e8b0035ce3c75af9cedde0dcd1615a816b03d3bb22611d2bdfbb079cc330551eb8179c73b94fc63f2fe67ef973f78173c518cab93f5e8e57afc86e1047359ff9680a7b55edd769e09c8725e7a1a6aa72eac3f4e469afbd248f7f9761ecf17053f3aa2f6620fb6d29a39ec5b78dea5d4633d43cb32afbdf4a118694c73e95c77f48790d52fe03e09c1f8f6371361f5173aad9f2bc91c595cfe29cebf5be474e93474e93275d9ae5fd073def293f81b7e47d394e37438d8dbc0deea7cd362b22fc7c96b36a56e1d4cc39dc094d8cc0a5eb6aafde4ced64cf4577e6bff8cf64116c333be0bc5aadf3745f2ffce89b593ecbd37aba0f1373ff2af462f1bbc279a256087d389210c4b71282e0cad539ffaa819b7e93737d99f0f2e78efab5ce9d996c9573e46f6d63b3d826e75fbc940d4eb075acc5392b777e370879db1cb5139f4c1525eed2ef7da7d491e9ae38d8ed5c51401b9cf33aa16199f8bd57685a2db42f71ae358bf50f7bd80eb6c839ee17a125c6bdd1f95b1766b944a6d751bff000bbee2e6f50c9b4d8890dd73e47d8e2ffa5487ba40847df99e70ffed329478c249e9f9012ffc7d02d64f820428994314b208bc45dcb6339c2bfb13481a0ff3826c6506fdf2eef225690342e7a323cb9478818c452b8e9bccbdf7b6370e5a6acf8a8e5b31c3175303245d49281e5f2a2c233c14f14b2b23ae57245bdf8233afcc235b22c44fcee73b5e239ff09d059547ef10920a627cb9d526d1da83cd70be5eb846adec8943bd71b9c005c25eac4d232fe4e420ae6f2e0ba884448ac625345044b860eba64102dd4f276c905d862b8e409d1b53516b184c811eda6a149cc150b4b34a83ac85695ca504f3eb6764ff9651fbc9ba54f97ee225d32090d4b998eba94e91e7606495d23244b971eadf18aa50bffd133ec89d8762a1d30829d74047b846ddbfc5ebd9052e13ceb9f2177cf9be62d64f4007b2346985a050c619606612e47d847a315cbeae6d18a2b8448eeac4b9c9eed53fd6666dc7c5e6a880741166adcfd92d69e7e4dbb8b8e9e70e4dc464a4ff50acb9ce6ff4ae75e85f37cb56862f2ebeb1c89154ed85cde421142ac2719ff4672b27c26678697ac96ea00417502e8e306d50c23de55433c97dbeb408d198832ce9b19fae199a11b96cd0605cd66dd31c983834aee81491e1254724f4cf2d0a0927be9b28df04bdf1c4ab6890da6a8bf1639efee7422b357f4905b9cf775832fc9b3cbb0b4b3cb70915db2996e48c89f465836e9ad4b3b7e71844e496fd20dc793ae0f26786440c17d316b1b15d4dafae924f3929b7b1f27f41bb46546175c7a7fac401ad30605d2009d705e9664b3c416dd97ce4f82f09eb8f08198e663359a7f52d2c197e683b0e41c173439076392c707953c44572c09833f2de462493f2ebc4c6cbd52cdd63a2d9263993ba0a7c2ad1783795c23353058ea1c6b8416fc3ad722f57872f2026e02d374ef44be5da22dcada2b16131d6d3a888276922868b917e27ae7ba3b8ebd44a440ad0869a6561b1e02f6bc62b15aec2ad322523b0be98c4e16a19bc506ab308662254d5453d2bcaa2bc6929434c3b02c3b2568961dae93ccb3ec548dade6725be55342dd453d9410ce643c9c11baa241542cc7b76bd1e0765bb8bc1a3155e3ca5bc3f8e8d53e61aabb1c03de2b0da7dc79a6d109a35a1a7990c280bb1c8fd2559e0ceb7acd10d9e1b034b20365acb00c30126b25ccd4b51278762975ba33c56cabc886c7b9a3bece9b6eead68a476bd9f1ce51cdbaf869558cd269c39bcddc1b2965336b002e7834263837a0e031581e9f15348f67eb24f3d2867b3a076d618dc5d4ce0faaf638ac442dd094a89f47fc95a8e331e1851ae14f76f0277c824e3837d6a2746c2489554fc404cfd6e531fe74b1182acb76fed73b6ff081990a91fbb34565182b0db29dbc5eebfcc52bece9e0f97ae7097796d38f9e9330a39813d4282663e93657936e9ffa4cb72826fc108df0e51dfd099f82a5dda1bab4e3999ed71bbc59b253d66df1a561b6986fce162e062d62c8a74aa45c9348d76c768253229de41cf92c4cb6a807eac4bd6cb14f60a3286bfda4e9544cff793afdbb03fdd7010dfd84380d2bb7e66bcaad88cf726bba4e386ff81cc690860ff7e7f7dff09981615ba0c3c6abad254ef385b75c5bc4f365c200aa5bdbca556d5441ced4e89523fae27b587b36c8786f813b643489bf634d141e766c5a3048c36b214b6c78a91f7dc38baf98888a754161688f35b072b042b55853a846fc14aab9585e588ce5852519e585593a9b1343340ded6a73788e2a15b279ce0bdee0e7eb593a7a7bff620ca9200dcb6a2b1da7897d9b9ac43eb02eb9265e98f291fbed60c35717bec812fa3cb14ce4893035c7f2451e566b2fd7d4da8f66f9abb5f375262bc6e61adbd564170b0961986d89ce6cc51862511a89df967a8e117e7b4da250ad9285aa5b748f111b45358a6ab3dab9ce0b5e787f9ad87c89b797960adebb05791ebf0ad1efc58c7c8530f2b0e389197a015601acd45400be5ad58558165aa5c9429ffbcc424598daab83aa3d1b537b8d46ed133bfb537b0e267cad46f8aa2efe84cfd509e705335fa814a48778082698af7c4a686ef28eaaea27547a7a8adb455f41f5ffaac49503ceef3ae75aa510912d7c30d574b41f2d0fc5d8966ad8f6f5c9761e86a02c20dbf93ac1dc3ccbd3119c64eaee309d60defe5acf90f6175fc7e5bffd753886fd480df65b7d625f8065f38d41b3f9424cf25141252fc2241f1d54723126795350c98b759279226ed62422f7c8f093884b30e15b34c2cb7d0a5f8a65cc637465d344c6b7f98c3552ddee536c5ca382d508298dcedf7b659d5b15373ec2c73c6a65a7d94f3e5f86e9b955a7a7bbe4833bddf03645851843e321ae65bb7c85ba1c43bf4d83fe429fe84b30e1151ae1effb14be02e3b55dc76b688a74ad12be1ab1abb39cab7e38aec4b4a9d469c34f63e9e6279c5518d22a0dd21bbbfb43ba1a8b44b52e127cd8c6c57788836c8d18f0ab90cb55f68a6adc3fc6359806353a0d78c9b6aab561b02ec366c15a0ce90e0dd2577c225d8795c83b8396c847606ad7ea0acd1efed42ec5d43e36a8da653ac9bcd5b18b21ad0ebe32d47faba31c0b673716ce9e8cc259af0b8793aa0f4a6a0396c00d9a045ed0d35f021f89093f4e23fc449fc23762c21b35c29ff629fc284c789346f8c85efe841f8d096fd608aff2297c1326bc4523fc5a9fc23763c2f76a84dfeb53f816ccc8f70535f26330b5f76bd41ed8db9fda5b31b50f04557b9b46728e70440b737989d7fbc99f073e778149cff195efc3ac5b5a922a7c6c48a942972ebc863e51a7928faa7c3b664d2769ace95d9f99a012137eb246f8669fa65a85093f4523fc5c9fc2ab31e1a76a84f7ede34f780d9698a7054ccc1d9860be6d49425b70bab0ce7a91c7b2c597e3f84acc3df243757c357cb598b8ae10b61f1b705213d77c696fb6b4de4669d3758eb5cf74aefad17a27a6f5193aadf9cc2b1fc48db59bddaea4db0dd1f915663b8d11b7d53dd9975eb5980d9ca9b181477d1ad8b158a4cf0a6803bb34827384d3632d69398bf991968bc17bbe14bf4658ca6edf5ea7c9cbe4b3d32e93cf1165329fe7a7d3152bbfeb74c9cddbd6e732a46dcd77e4e9ce55f6d5b6dead0b87dbecf91a9b2df0596eedc1845fa011bed1a7f07a4cf8851ae167fa14dea013ce9b357c6ff840cd9ae330b52fd6a81dedeb4fed46ac90b8445732f24caeefdb2b17245582c786e1fc942c4d58542fd544759bcfa8366351bd2c6079d882697db946ebaefdfc69bd17d3fa0a5d024d1505b077dd7db6b8c20bb60ae9dc9e2d5e6914955c9598cba9760a5a77d792269603cef8f8e5585f38f6611a5f1990f37e4cf0553a143c0136b50e25baa35e5b7cb61b0e60297bb52665eff599b2c763c2afd1087fd3a7f01374c2796d702d436a03be97aaff91961375e1f0c2ecfa74123bc944d84998e01b020a3e19b3a21b039ae72998e09b020a3e552798a73ddfa2d1ebfcc805f8717e3c0db3c25b7485d7007f5678ba4e38af146f65012bc53330b56fd3a81df5a9f69998f0db35c257f9147e169633efc072e69d19e5ccb33173bc8b694a4bee7cb6d5f9c7c767f8b4fe0ef191f26ae120bc5fdc6910bd34def7f163bbe7605adcadd36240ab16b9ce6fde63e0d342ae634ee63a9c8be9708f4e87fe52877ce77fa5a83e9b4575d81c4083f3300deed569d015a4055fbec37b0a7e423b1f33dffb34e63b74a03ff3bd0033dffb31f37d2023f3bd102bf41ed4147a1d7d167a1761841ed2107ac527a18b31e10f6b847fea53f82598f0afe8d276903fe1976269fb0896b65fcd286d2fc3b2c3d792154d796d5c345d8e69f1f5e445d3ac362c9aaec074783459d154d08645d39598068fa52a9a8e14e1f95b6a701566bedfd098efbb3ecdf76acc7cbf8999efe31999ef351832be63649086deb5189d6f6be8340cf647e73a8cce13189d2733a2733d1689ef6822f18ccf48dc80a1ff6e40f437625a7f4fa375f6107f5adf84a17f0a43fffd8cd0df8c45e2079a483ce53312b760c27fa811fea64fe1b762c29fd608ef34d49ff0db30fc3fc2f0ff3823fcb763c6c93f4783566bf96d5caddd8169f18c4e8b58b596d786d5da9d980ecfea7450d55a611b566b77611a3ca7d3a01b8b556b4bc45c53bd4f7fa5bb3103fea9c6805ff669c0f76006fc3c66c02f6464c0f7629178511389e5c3fc45e23e4cf84b1ae1f7fa147ebf4e384f2efeb5a820f5c20398d63fd3683d74b83fad1fd409e7c323fcfb488186471ec2d4fe8546ed053ed57e1883fd8a2e6ff131fde41e89ee76b1ab4419c8cb9d46e1b0eb2e3cab1273bdeb98bbd3a3bb68990f595789e5cc3bc5b92a372bd87639133b4bccc4aa05cf0798bbe957b6f08470b7eace1643e1557219fc2e71a5493c550d24ebe77a6be59c359c1df6eb58fc152c817ea949a0753e13e8114cf8af34c29b7d0aff2a5618fd1a2b8c5ecda830fa1a1689dfe8088df01789af63c27fab115ee053f8a33ae13cb3fe2e9dc228c9d0f5631ac1396243a0f699784fdc4ea96d27de5fd3f1d24ebcf38f6a249f780fae2b36f1fe0dcc96ded0e5369fb6f44d9d705e45fc3e6815f13826f9cda092bf85d50f6fa563ff490acd6febec5f6c5b55d32ef61f64a3b3e496ff76da96ff8eb0fca9492c3fd8766cfa947802339e77831acf9398f1bc17d078be8365d33f68b2e9f323fd65d3ef625aff91699a447cd1f842d1d1aa166b4d74ab94b2457329dba743d9f7303dded7e9c1374af127ff294cfe9f02a6cef7b1d4f940933a8b47f94b9d1f605a7f88a50ecf233b651351a54775eb261e99bafbfd108be4479a482e1fed2f924f6391fcb32e923c072adf8878cf1dd7f7d24fb47e8485fc175dc8bcb7ef7e4c22a77587ea9cd69d6ed63a19a28af95d2df4634c83bfea3418a2d56095f8ab596c0be0b6fa335b0cf6134c978f75ba8c485397c42d8cfde8f40c66787fd318dece31fe0cef592cc29f042c139ec304ff3da0e09f62823f0d28f8799d60cef91f1acee7fae4fc0226fc9f1ae1abb2fd097f1143f2af80485ed209e6a5cf67e9084ed2197a592798f743ffdd7ac3d30ffd0fcba41ffa330cfb7f35d8278cf387fde758243ec722f1454691f8051689ff692251e53312af60c2bfd408bf74bc3fe1bfc40c936ff396509cf21574a50ceefd5225dad8aa208fb229d21bd2fd1dbfb4205b9cb9d5cf74b1a745a3a8f5dd22b789d5094fc92606d776bb834a7c957283a765a0c2e183496e155bd35a9c678bc2bccaa73be2af3016111d0bbe930bdc40ce6d65c62ad8d83aeb7d42c33a165b1eeceac7754e2521cf79daef728c5f6306d321a2994af2698daf6259aa6304c9529d229964a9df6091c8d244a2934fabff2d96d29d7529cd7dcff543a49be4e02a5fcec27b17eebe43c9d2349af4ee14e142eb0eabc6ec3a3e07d40bcb5043a8f1f79a855d356b72d176a1613d18807565d7cbdea91ffbfa1d96345d3449f399cfa4790db3afae987d75cbc8be5ec74ca0bbce047881e807d11b98f41e3ae9fc865b58e464b07fc0efb1e4e8a9498e9727f84b8e3731e1bd34c2a74ff427fc2d8c52ef48b056d1db98e03e0105bf83e1e8abc1d1d7278e7731e1fd34c2aff429fc3d4c787f8df0d77c0aff03267c8046f88449fe84ff114bcc81babcd4ccd2dba123d81c98dba7dc1a37ab66f68cd8fb58120dd2245181cf24fa139644837549c4dd01122725fd44e603ac92188255124333aa243ed48533443c98463972022ef8230cd8701d305efde4f802f4674cfe089dfcee8c692dda4f887fc1421ca90b71b0d604560b4b571b15c5eef8b3f4bf629a8cd269c225f08909bf35c1c79a5072c4b737f8263561ed8690ce678df55320a323bce5140f43e40fed34c898089f06199410b3a45fff45c8fd4d973efc343b92f875e215ab4feb72e3c8173a24244d169e349f6006305667007cbf52ee9ce416f075ce5feaa3f17e9757fe1d0b779c2edc3e68b87b6425e027ec4f75e638326c732c16fd8fc60ccc71bc8368a207d14cc4182720c6982c74cc18ffa1e3263e69b235446ef05bcc6562afcf5ae7ca5ad1ab73fb884d19309d18f1bbfdfa2441767c42cc33d50fa3fe4f5d4ee1f39b932301e737ff85498e0695fc1926794a50c9ffd649e6adada991e05f8df90f56284d0bd815fa2fc6637a501e9f6392670495fc0526796650c9ffc324e70495fc25263937a864164124cf0a2a39a293cc6d292fa0d175c054ce0faa72479d64de36284847e5245f9bea84a95c1854e52c8c725140ca9d3195670755b90b26794e50c95d31c973834aee86493e24a8e4ee98cd1d1ad0e67a602acf0baa724fcce6e607b4b95e98e0c3020aee8d413e3c20e43e18e4054121f7c5582c0cc8a21f26785140c1fd3116c541590cd049e61dd5c5e9a8fc0e2e78a04e306f752d698356d7208cc7d2a03c06eb24f3e797a5c323c984ff100cf4f280a08762465712d0e88661825704143c1c4bbd9541536f04967aab02a6de482cf556074cbd5118e43501218fc604af0d28780c967aeb82a65e36967a47044cbdb158ea95064cbd7118e4b28090c76382cb030a9e80a5defaa0a937512339477c64966fe518be7b7b5b7ccf3bf900d08674d262124e6c12961647064d8bc93ac97cfbbb8de9a87c0e2e388ad9e55101ed720a26f8e88082a762797f53c0bc3f0d4bbdcd41536f3ac6624b40163330c1c704143c1313bc35a0e01c0cf2b6a0907331952b02aa3c0b13bc3da0e03caca75519b0a7958f695c1550e3024ce3ea801a17621ad704d4b808d37847408d6763827706143c0743511b10c55c4ce363036a7c08d633dcd5063dc343311c750171ccc370ec0e88633e56c4ed095ac41d8681ae6f03d087636a3704557b01a6f6716da0f6424cedc6a06a2fc2243705955c8c01696e03208b31b55b82aabd0493bc37a8e4a55826df1730932fc304ef0f28783926f84040c12598e0e3030a5e81093e21a0e09598e013030a5e85d9db4941ed6d3526f9e4a092d7601db5530276d4d662944f0d48791d26f8b480828fc03a6aa707eca89562a97746d0d42bc3589c19904539c6e2ac802cd66382cf0e28780306f99ca0908fc4209f1b10f246ac5a3daf0daad5a3301ee707e57134c6e382803c366165d18501cba2cd58d3f9a2804de72d18e48b83423e06837c4940c85b3116970664b14d37fc3ac6398df00fde98b0bbce263998da7603b097e998693def2e8f7017b51ce667879d4cf4453f4fa64b769e3a57a493ec5c7b44f0769d607e7a6524d1db57fdf8f1f6adc44ac9abdaa094acc2845fdd06c2abb1d2e19aa0a5438d4e327ffeda745233c944d50e9d60eef57e5d3a82c7e066b213137c7d40c1b518e41b82423e5627992f0eb9311d95932c0ed985a97c535095ebb0cc78731b65c6ddba00f8166ab7a4c3e4755cf01e0cf6ad0161d763b06f0b0abb4157e1653ba711fefddcf6702d5715863f37f2dbd3aec4ee1095d8b084d8a5a30356311d8795c077b64109dc8825fe5d4113bf0953fbee3650bb19137e4f1b086fc15a96f74634ab58168bd352c758cad862b6b275939d358c6f73b44f24f02e99f433c57a9712e7fe5ae7ce1e61d2fc8abefda29b1ee74f43d3e2865fcfdc859bfe76cadf8bc5f23e5d2ccf6e8de57aa725c5339d9b41778bbf4be496ca8d6281a89b414b5a9f5cd2baaf55fcce198d924719733fd959cc5a44bcb8dc787a3109fc797f7a6092ca195f29b343dc8d670a33ab97f706478edf5551fb30d2f763f6044374e394efbce3d2aa770ac5ad8e6db8df5673635b2ef712f36a1b7b17bfde56f6b41f8be503ba581ee6892564eec673a9fc7c6585c6eae35308de499657e05b7e6276008bd983ba981d9e56fa2d14cbab6b995a3d143ce56277fcc4ed782c6e0fe9e256e489db6a913a3b65ccf8d9fe768bc909584c1ed6c5e4c290cbb3d83b7ca714f559cb2ab0015b930f2b87ecf058f0baa445343360a9c71b586d57b69d8851ff8a8efac2b4f2c62ae67e24c08452ed242c7e8fe8e2b78ad0aaf8d5e344303c566e73b856045dcb8e671568499249aa9e8cc5faabba58cf4f1a6b5cd352111777c720378eaa36e6572b25a1c47c91796a9e82c5eb6bba781de5bb655726eec4b7ed7412dc6bf0f3b60b455727484b3093743e15e3f1751d8f95a1d4d9d4b5f969589c1fc5da29fe6c40d9b0fe33c67e2dc24fcc4ec762f6982e668720315b2ff2679d6c9bb85d6dd56bd920737155426ad0f451cec062f40d5d8c961296be2a55ddbd09b63377cfdeb68be999584cbfa98be93c868d92eb4a8af818c0ad803893e522951b456fa8d2a9710fb461accec262f5783a7d82f870610b61bd488546e7599e0f7724a9fde265b45dcccec662f62d5dcc8a53969ce9f50af03234599f35d392f21c2c8edfc6da767e4a3637decb8455c2bbbc5f9e3c0e6d15bf73b1f83da18bdfdc94695822461b787ba64eec68b884ed16fb4324e6a864b1c9dc26cfc3e2f364f2b6aa9ff42acb28bd284757cec762fd1dacd6d3979c8925e662e6b6b5f920b39b86a9df6c8b185d80c5e8bbba185513f7649bc5d66f7c232ab7a7ba4194bcb5adb560db8ccd64c2e9428cd3f7749cd61373c27bfc7e727f261c2ec2383ca5e3b008cd01dcdeb73b0fa9f2ccdd7e2c794b2f9c1c713116c3efeb6258e23386ea3bb3fa14698ff85e82c5f707baf896125a7613f3dfee6d0b029762047ed856ed61b76c5b085ac3f4b1ba0c8bd5d3ba582df369c7b10f4b9a60c3976371fd11d67af49b824bc51389d6e82d5fd397eb277e5760f1fbb12e7e8706e8b1358b9a97ef305623c757f05895273ceb274e576271fa89bf34f3da27fc1651aa5c4659535e85c5ef195dfc26b0e4a3d5e58e0614fd92ab312d9fd569897f93aebcd599025a53ec1b01bc9668d1b650329b81b906d3fb39ac1d929c2eefdfaf13757393a6744e677684d769356dd8c3ba168be14fd3e9f5eb673b4a445af191fd0a39ea96d85f0c73c6e33a2c8ecf63636ee98c6ca413cbccfa8c99c7f47a2ca62fe862ba3cadd4f4ce5db9e3002adeed99ae3760b17d5117db8d29d39576ac9f7a16e0468cc64bfe460d127d92dbabeebe098bd1cb586f38dd7190e439389dd6a4ff1667e6767e33c6e1673a0ef8772df1f698da9db8ad6cf1164ce39feb349e943267c666a0aac555eea1d13635fcad98a6bfd0693a3b49cbc46be9f19a37885a3f367a42915f6ec3e2f24a3a5e59583db7c4b03aee762c96bfc46678fd9573eef87de2ddc4597bb5513a9e9e8952168a1e2d1f69f613e73bb038ff4a17e7899e948d85499d9beec4f4fcb54ecf3c8f9eb07cf2eabc4cea9c6eab22d33ef05d580c5ed5c56033a31ba752f348c946aaa105a69bf3d43b7ea8dc8d51f94d3ab39e2a443fa54a2c66588e6b9bd2e41e2c66bfd5c5ece8764e6f3fe99c690eb81723f2bb747a4b7edb5ac1dbcb99a7fd7d584c5f4ba7b42a16a9eaa66033183f71ada08815a4889fae24e36ff989c1fd580c5e4fdf579187e92767c2f861d7db2a851ec0e2f70636ff9bbc4513fbce815747f59d093c7f61df4848962733abed1fc462fdfb4c469ddc542d731edecedcbe5b256b6f1fed87b018be994eced313ceac9d90ba87d3c5f91789f005444b8414770caf5ebcc35b8539639d5b91dcd69a61666b893f33ae76885de7e1ef765283e789f2d6b29d2fa04a2ee12d074ee70eccfd992cbf72e45688911ae65da0552ce4d7c9f24659eb4c41c8f5e5e40bcf663aadc05af1965a6a962a16ba5a6e26a8e760ec52c7690bb2742c223ea0086539a4c771d2075b4cdfe6a93a52a66a871cfea196c8b40cad29b516eff0d03aea6d68480259983b74babb02d6c8d18308df2960ab08c6fdb61eee289d3264ef06aade90670801aa3d9852dc7a5004e8c40d13e6e63aab353277c0f335476697ac0eb93c45dea5c4c617572e16edbe06079ceb77a1ea1c0c60931508393685f03d4a84fc7380aa5bbb5cb87d7101b18fe5ae65bbac00f648d718b03f50021bc8dc2f95e5b2984784cde0faf68881fb2325b8fe1a705c20ff303a9fda6b1157abac80b68dc5a0bd4f6d6df1d973a9f3bb56fadea85967d7ea6c0017ed1903f7274a7083457bb429ed6ac1067857824ae1034a783d40565d1b37026303a6cf46c6307d4889a91bc01473b8b20151d59018a28f28117516889aac2aa33af58ac1f933251cbe5bdbdad636bf9ae87227d34b45a1cfbf88bd4714f3ebe450900d002f1d1503f8174a805d4106e46af2b93f1b003dd83f06e8afd425d45a31d81edb22c28e16d64660431f876543cafbdb0640fb07c600fd8d1210df004d354197b0fd22d62daded26eed454255a55a5c2c2aa84bdd53901da0091ff28889f5042e41f5186f0f8100f5f6159ddba176195e58dd38160d0e7ef94287bc9324dd9db015963ae17fd471b503583b2edd3b07a8fbc3304e74f5587c8a696d9675d62e0fe41dd7b84e0e0d29085a23fc9a734628b606c80772218e8f92725bc9ea0468d79ffbbeb526c007529689dfd8b7aec75b5c87ebb3c9b482c761e6f1421d9006c5b8718b0cfc21d0d8bf708a9b2ac3cab0383d6ffa61f7be54d097721b3cd0d8d67b262d0fe436d6d4bc48c518b083cb68b4b6c579f26a70d57eb846703b87701b8ff5282eb0db2a9ad23fcdc2d41c1fa9c7e3ec99dfaad1762ecee07cc0356f60525b8217156e6be5627ce5d9742de2b757711ae61eeb63636e0bb737c0cdfffa8071f4b1d9b2b66e9ef276703c073451fa14b9647b8d7dd3273e7177fd471379d3ecc1d126810579b65f325ce6d6782f388719a7f09dd6ea2190f0f45535613d1b4a78ca3bea7fba219fa8e44d36ab447038ef7447d3804457dd520d1b49b82515fed9f6846e549d4d70845d457fb3f9a966b4bd4973f47d4f7c0804e677c063f9a305f164dda9b8e6a6740a2da31ed28325d194d32db1b452610a22906e1a2194d6d4533a8d2633ea67adfd05cee63ca3afcffedfe992bdc3f3904be9dbd0022da171d3a10b72fb855b9debebccc4fbed7c32ca796f7e830324187f82f43a876844e9b6e712d8ddee9443093d6460fe092d1d1249c7956e29c0f7076320967be95388f0238b3c2c0b903050ad5dfca0a59111dce9e54381f60319c9d4dc2596025ceab00ce2e26e19c6d25ce3701ceae26e12cb212e7330067379370ceb212e75a80b3bb4938f3adc4d90270f63009679e9538b7039c3d297166b3585fdb5f4f97bfd5289e20c3db850a6f33c0db8b12ef2089b752f6dabdcbe1e152eb5c3a90595420ff0640f6a604394a63a7a9c6e742b050b29ed24200b60f25d8310c0ed8a53f606d33dc31006e5f4ab88359f25e3d14c71b52f695a411d0a3ef4789b28f4459e401ea0ee5f287ecb3c307811df60f03de9cf0e1bd4e05ef31006f0025bc2129eaf0f84c4c3af441968dff02600e3409e66c0b61fe15c01c6412cc020b617e04600e360966a18530ff0c600e3109669e8530ff08600e350926e1cc1019cc3f0198c34c8249d82b2783f93a8039dc249836f670de0030479804738e85303f0130479a0473ae8530ff0e608ea2843955c2ac731eaa1347fde763fd7d4e98b0641d4085bc3718ee184d89bcbb40be53f8b2b9be753b98c665dc82418e9ec04ac7b4e7605bfca6ad84d6770215ca3dc0fab229514e4ec8f01542d852a6becfb3c8f9cfad73af180e6e61c9f65b25854d56ba1602d863c3b0dbf4aa2a1b518e0445c0384a94a3354540badf6720457b0e15dac9c04ac7535be942b174a05e3a4cf3ed73d5c745b96bb57223779df3edaba83a012b9d408952ad2299e5fcdf2d03af10f53bbf1ac2983c59463f05209c1806c2d9071dc26f01849328110e60b1895f75f47e0bd1d609de6f0288934d72db26f59523c339085432519370923a7791e15c04704e310927a9eb2119ce5a80732a25cebeadf5766ef8f3e8c3a9f0bd04caca69e638c3d83820371a58e2f43050426fb8554e237c995cdfc87d34f787518393a1dc07ac7206fd40311c62dbca7609748bc4aac85d5214ffa077b5232261b7100bb2782f00736618fdef66b10abba97548582d195547dde8d12cca496032b43701b439614c68a4ebf74e587e9279bd1f0a60e69a049370aa8d0ce61c0073964930091d67c860e601987926c12474e92283190530f34d8249e86c48067336805960124c1b975d1502988526c124749c2183390ec02c320926e13c0f19cca100e66c9360123a1b92c19c0c60ce310926610f880ce67800736e184b55214a7f1e4784f53b99c7d13c30a674487b7acc79078b094b51b2a1e249c0560f35092661fd4e063307c09c17c6b83b1feddccbd4c784439ae825c33718e09b4f896f18c097e8c8c585c5964bdb3c73fe2c007a5818ce07b9079df3c1c900e1e161202c3ae810ce05081798dd1c221cd5246b0e6d05cda18561b9c7c4a6d8e02c11f9e41ad9a4c549c0461799e3da6ae38aca4300cae2b06af1549b08dbecba5504802e366923a9422b873aee06389798849374992a19ce8b00cea526e19c6d25cedf009ccb4cc2596425ceef009ccb4dc249ba973619cee5006789493849377f26c3590f70ae300927e9d6e4643837019c2ba95b9ee97dcca354a8c63f2742d8f25c4605741600ba2a8cddb8f23dfdf710863dc8d6a1ed02f05653c21bc1d25de217bfde9770eee71d2aa8ebc160c71a13a112fa7890412d0750d79a08957018840cea1100ea3a13a112fac991419d0aa01e612254c2661319d4b1006aa98950097d40c8a08e0450cb4c844a38bf4e067508805a6e2254420f1032a80300d4f59450f359e2d447fc62986216fb7a9a1b91f86fb1c57fcc31f611bc72d14d507300848930832a11b8c1a944d860ce92431b37ee1d0aecf94873977611f6bec866497f0eac74a3397bd5916e214066a7fb01cca34c8269e306d3670398479b04d3c60da61b01cc4d26c1b4d11d622f80b9d92498366e30bd03c0dc62124c1b3798de09601e63124c1b37f45b0d606e3509a68d1b4caf0130b79904d3c60da6cf01302b4c8269e37e36e70298dbcdf665b67133e98ea0ef5e4989b797c4eb6e0d54277af1aeec5acafd6cc8be3ac8805d5685bd9f6cfac31e36ee67930d6cb23a2c7fe6d56244739767c473b1f35aa308d1667fe661c0566b2881f64e9ac99be8d075a742d701a0dbd19ecb14ecdf3e600040b9338cb59afc83b607cf5acd75005fad191b98bbb3470dc262dd792152cb24fb8ce36e50e11c6bd266a8a49d49324bed0a70ee3209679e9538a7019c7526e1ccb7126729c0b99b12e77896b85a6e09dbcfb8eb420b53feca6b9dd7f987ed1b85e7720573bf6350174e8bb31f15e4fea0b2da63929f7da195bbd5dd0b70d69b8493f47bae64382f06381b4cc239db4a9cbf03388f330967919538bf0f70369a8493746e9d0c6709c0d96412ce7c2b711e0770369b8433cf4a9c9b01ce96b0c63acb44abb2c591bc90f12f676d90ebe8aac43aba6aabc73ab700a07bcdf1ebb4d15da127e829ed0b631e536daee6aeecdc2eba9aea21dbf764aa0076b93f8c959dedf07d183278f300bc03e67a1813564064936df700b4c7876197b3c3b74b32788f02782784016fee4194a95f04f04ea4af5e766a36aa2a739854b24aa9508dd836800fbdd9d7ece901609e64ae3b02e1803159261f019a41279bb3539d8ddec45380959e62c61ca6ee23cc8468c936bfd804acf45493668948dd0ec9cad30900e76926e1ccb312e72a80f3749370e65b89b311e03c238c9e797a831c7956ba6b1f09609e69124c1bddb58f0630cf3209a68d0b56d70298679b04d3c605abeb00cc734c8269e382d51500e6b926c1b471c1ea4a00f33c9360dad8c55c0e609e6f124c1b67804a00cc0b4c8269e382d5a500e68526c1b471c1ea3200f322933a94a4b340641dca3e00e7c526e1246d1e91e13c1ce0bcc4249ca43e47743e1d00e7a5617c12aa901d6c9f84ba81c5105e1686d77bea91f7c4d5430b1da18d625935e93aa2cb23543e1ec04e2fa7843c4a42ae731ee280abe5b282d86282f86200fac91182255b4e500cc05e11c626000aacfa5661fcb471b2e6948d2dd35900ef95ed39c319dade9e2750a1fc1094b35751a21c2b5096380f950a607c89f55ef97acc5ab7ca2f712d123b7aee92f7973ac76a472ce1be0b646d816e00f0d5e6f877da98edff03505e438972600a942aa6a4fe2163a86afd9da0f4bcd6ec1d6a084747c976a8990df05e67aeef27e1641d9967d36ba000b83e8c0200abf763050061394a56007c0c30de40bd87d23ad9a357fef125c23279b6b7af2eef0bc0dd1886fde5b6da6095e890ba4bb06ddf19e47180f126ea81650e6cb108b85dbfc0b5820a663e80797318edcbdc24dd4cbbc79c9e03286f0963d8aee0a01bb6ab01086f0d6344895be3125147b70825f8e7c62b45265fcbf68981ba46dee4754434309b97091600b0b799e3d46da363cd3280f2f63016c114787a4136d7dd0d00de1d262da79e43d917275b4efd3ec079a749380badc4790bc0799749380bacc47926c079b74938675b89f31580f31e9370165989f3eb00e7bd26e124dd05910ce76280f33e9370926edb47867337c079bf493849fde7c8701e05703e10c666bcfc43e307cf66bc8b00be074d72f022fd981819cee1608ee7219370922e7521c3b918e07cd8249cf956e2dc05707e8512675721a05a7c65b591b91e73f6396b750665e32394b826333f9fb7e5a39a2d4224fc8c2da716820fc7222ad83301ecaf86518fcf128d9e83650f9ab701beaf853145c1c7d797313e66ce47d67788498a46ab47d24f0708bf6e8e43968d2bd147818ae6514a9483187724a896f3e0aecb20369d4bf8d516b22aa82bb0c9c7ccf519b27137a4eb00da6f98f371bb7c2b17f8ff04c0fca649306d9c87fc2580f9b849306d5ce0ff2300f35b26c1b47181ff8f01cc6f9b04d3c605fe3f00309f3009a68d0bfc9f06309f3409a68deb29be0b607ec72498362ef0ff1e80f95d9360dad8b1fc1580f93d9360dab8c5d96f01cca7cc5eef43d827225bef33170c827c9f7a1024d97892ab7a91703724ac8ec8be505d0740fe807e296a3c487734930f74ec612bc4b87b43d259741b3f68db1114043f34c787d8c6eee60c80f26993bc3b0a29ab2832cb7c04e0fc9149380bacc47923c0f9639370ceb612e77b00e74f4cc2596425ce9f019ccf98849374513419ce2301ce674dc249da5b22c3791ac0f99c493849f7d726c3590d70fe9412273f516bcded9ba5ec03303d6f92d515528eb99359ddad00e70b26e12cb012e7f900e78b26e19c6d25ce5f039c2f9984b3c84a9cdf00385f3609e72c2b712e01387f66124ed2e95f329c7b00ce9f9b849374bb7c329c47039cbfa0c43992c5efacc939b48806ad773f4defa201c2a16132a7d80e60ecfd154aac933c58b7b34447c3f45d1209519335f56b00ea5f86e1c23d871d6cbbcc3c090a815f85e12eabacb549d81f2f02964a78d5da49387b772e3e0c58e7afcdf18eb7d18bae1f40f9aab94edd8473ee6465e8cba000f84d185bf8ccf2d8aacd1f019f0fe0fdd66c7f10421745327f900290ed7f1746831f6ec8a7cbe276d7f53f05d6fa1a25ce099ebabe8ec1f56efa4f422c932f87b60ffc242acc1381d5be6e8e6f888dfe762b81c5be11e6c71f78c6aff2ac933bf8baaaff02787f6fd26601a4c37d74df270019ff4d9370928e4f91e1cc0138df320927e9e82919ce0d00e7db268d9e16522e39241b3d7d08949def9884b3c04a9cd7029cef9a8473b69538df0138df3309679195389f0738ff60124ed23dbfc8701e0170fed1249ca4abdfc9701e0038df370927e9166a64382b01ce3f85b3af523b8c8992f5d9df02f83e08634099075c232c51c9de231fb10f5e04c0fbb0fd57c0a94ac6bec9b781a0b7f39129206d9cc5fc37b0c83f9b02927032830ce40260917f310524e1400619c84300c8bf9a029270569d0c642500f9b129200997b09281dc0840fecd1490844d6f3290c701909f980292d0ab830c641500f977534012ce4092816c06203f350524e13e3464209b00c87f98e30d67e336685900e53f29514e65897e1cee1701a187915f4f24c2ee249927d26680fc5fd4831ab14dcab9a24d82c30eb12d2f7fcd3e2f393ea5a9e07d16c6972c63de9b7a5fa37231b8c6d1d60861bb69fbe6e75081ad0360ff4d09767c4241e0fac8c55cb7b940f7f3b5c94a5b1bb7f6cb0759ff3f612e93718172af395e102cd6b607ecdda26a3bc0fa5f73bce46cdc2f712228063e0fc33b1e36add22f6109d19295b06b80957e1166e6af7594d8c062dfcc82c24373913d810aebb100ebffc298232a3c8826d8ee07d9fdcb3076f44caf2735cbcaed51e7004be4bbfa1903d34677ed4301cc8849306dfc40c44c00b38349306dfc40442e80d9d1249836eed8391dc0ec64124c1b97b6ce0030b34c8269e3c86814c0ec6c124c1b3f103105c0ec62124c1b4791c601985d4d8269e380c77800b31b254cffebd608ab20b29541fd01ceee26e1ccb312e74280b387493849bfa04586b31ae0ec498953b963f319f683e773f50b580c5f2f4a7c0319df35b642eeecc545ed711edfe93c5e2f8688e18745edc3980530f6a6c43886c5b6a270e77eb63aea3aa58a18eead1553c30b195f95cec7db2b1c013c8357319bbf235c0ae0f6a1841b6c7b1fc2463cd9dcfb6d006d5feaec9fac325231259db0181321c2b8035442fd2831666b30fa73af211c512273af290278fb9b5b00104e70901500af8202600025dab102ed72619fa58ccf4e56cbeaaa4a8852de21bb4402703bae74fe76c52f758ed58ed82a0b2bafee00f0c0304a58cc91a158582cf15e9e13a84ad84f01c641610c90c006966aadc6daaf7637a80601988329618ed2c04c5d04d80bb618801d420956ed389bcf0eb61d67af0108875222f4e7f865e314f15280721825ca713e509639617221cd6cadf397eaf137d1564b93a8aaa57f00c4c329110f63f10e600d62b86467529bb57122a40c34f54784313a9aee661573acfc10e91f807d8e340967a195386f0638479984b3c04a9c67009ca34dc239db4a9cbf0038c79884b3c84a9c5f0338b34dc249eae24086f3708073ac4938f3adc4590b708e3309679e953837029ce3c3e8b9e78adfee914fe095317778c4dec18fad00e184307aeee9f930d9e88f3c0cf4822686658d6eef9d0bda2f2d318471a477a8107e1b58e3a430c6dd39c2ead6a5d9eab6edc3714f018c93c39d7a3bd83f043104a08d9a3aab495a9b93cd6a7e00d04e31152d69339e0cedd500edd430aaa6bc836e8a630240382d0c9745be7f6ce82e8b64de20a301bee9614c05a737439467e51cd11d00e60c9360dad86cbf13c09c69124c1b97115e0960e69804d3c66584b70398b926c1b47119e1e500e62c9360dab88cf00a0033cf249836ce9e9f0760e69b04d3c665849701980526c1b4712395bb00cc429360dab891cac3006691d9cb0d6cdccdb33b187d9f1dc6d0f1ac567bad12239eae4f9ced4b0b9f00563ac7a419ca42ca12946c86f22b00e75c9370165889f37a80f3109370ceb612e7bb00e7a126e12cb212e70b00e73c937092ae7223c3b901e09c6f12ce7c2b711e0f701e66124ed2be1119ce2a80f3704a9c6abbd33c4fa3dee6c9b46301bc05612c72e17e1e8b19dfb6a2c1e9f154cb46bbbbb4a55a08ac1002e086164d563b768d0588178691ddb1cc9eb89f12e1201d19ce2ea07bb9c8249ca4639e643827019cc526e124f52b26c3b91ae05c4c89b38710e03e5e274a465e5296502ef227ab84fa81127289490da242cad94ab206d17d00e7529370165889f3128073994938675b89f3f700e7729370165989f38700678949384977eb24c3b90ae05c61124ed2ed25c97036019c2b4dc249ea874486f31880731525ce29ccbb5f02efb157393cf8820115cfd82a0d6c8a78a1f357a398d5245d6470478408780368ceafa604ae3e508acdbbc797ac6420c93e509a0d2c778d2920092d920ce4400072ad2920093de7c8409e0a40ae330524a13f2719c86900e411a680b4f143f7170290a59420733db57b0bbacc0a5f4858ec3cb1dbd1a75e9cf1a88654d75f4e55d76f03757d59183e76e98e84124eca918d83760230cb4d8249e8b04806b33380b9de2498368ed0ff1394b21b4c8249d8ac2783f9198079a44930091b526430ff0b606e34092661f39e0ce6e700e65126c1246c9992c1fc02c03cda2498367e72e77f00e6269360122ec02683f92580b9d92498840bb0c96032d0cedc420913dfd87ca9f3bb96b91fdd29770470c1f66f6cbe1e58e9319460dd0fddaf721ea8147e74704d51bb7d1c826ca5511780752b2556f5d928356052eb28512d59d408808d492641ecdc4aba2f280cb651c2f5b71f9d8d7b31f402282b285106db4f89b03145b69fd2574111b09d126db6c64afdade524ec929295b079c0722b29f10e002d82bda2c6e78ee0eee7f7425ac9790215c46dc046abc2708280cd2aac2d40de9822b3c95100677518a56962964fa73cb57177bac120bbd78451e7635379f175be8d1bb34c0556ba238cbe5426753ee16408998d5e0ac0ee3415ac8ddf32bc0080ad3515ac8d5f893d0c803dd654b084ad5332b0b900ec2e53c1124eeb91819d0ec0d6990ad6c606d6700076b7a9600987aec9c09e05c0ee31152ce1040b19d81300d87a53c1da3872550ec036980a9670b4950c6c19007b1c2558b53f78216b87fdc1c9f09d08f0359a330660e3ae8d2b00caa63006fed27735b3d1a7740c189d6a360927e9be39643897009c2d26e124ddd5890c673dc0b9b73d3d51bc63a7364e3e1f236076c9f2085f9a20bc58580eb79d4a16db2e68265bc6f8fcbcbba150a573be4a347d9ad936a7ecdbe4fcf397025b9c7fbaeb11b127d412b69f3588ab5c5e9590bddbb9cb356b62b9139c47f67183e8220d222aaabe850e73be694729ab16a11f6065ccdd0e69adf35bf9c1b4082451b1d7e93ae75a0be3938c3c843d8e263b59a38871fc7649d14857c1c9fd9c168f17071895baaa4f6c95c84ab7d6897385d0a4d179a69308c7cd8fd1482f70a666e34a4493b14968856f42c2132f12e927d38bebba5adcaf70ee55886379abc49c89ce639122e797db309dd9da249d299799ec9667ea7a6a993cb5924bdbcf9324a2cfa3756d6667a962e4660dfe7e8d70cba916524b52c63475fc709bed99245572f8f7ba0eeaf81fe0e92e935d98e91061c6eb9d947785f38fa3350a079f46f649490796f5ff00b5d1f671082d0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/3e7bf5842a194484caeed37a5d21a9b0.asset.meta b/Assets/SerializedUdonPrograms/3e7bf5842a194484caeed37a5d21a9b0.asset.meta new file mode 100644 index 0000000..f9ea9de --- /dev/null +++ b/Assets/SerializedUdonPrograms/3e7bf5842a194484caeed37a5d21a9b0.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7012c809caad29b49b7c0f75bd7ea194 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/3fe3bf7f70138de40ab6efee2bad0543.asset b/Assets/SerializedUdonPrograms/3fe3bf7f70138de40ab6efee2bad0543.asset index 8e38950..188e929 100644 --- a/Assets/SerializedUdonPrograms/3fe3bf7f70138de40ab6efee2bad0543.asset +++ b/Assets/SerializedUdonPrograms/3fe3bf7f70138de40ab6efee2bad0543.asset @@ -12,9 +12,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} m_Name: 3fe3bf7f70138de40ab6efee2bad0543 m_EditorClassIdentifier: - serializedProgramCompressedBytes: 1f8b080000000000000aed9d07781cc77580e748800041b0800209522c22c506361c0836516c020190044990209a58051e5148900408a1b04894622771e292b8a73bcd717aef71aa529de2244a9c38cde98e93384e5762a5daf3666771ef76dfdbdbc5de3bdcc1063e606e6777deccfbdfcc9bb2b37b73924aff2476e87f3daa4335a93ad5adfad55d35a23f35e97058ff3a476e7cbb1ad3e10dfd3fa5cfed50ebb2a4849f2d8915fa7fab3e1a57133ae5a4ead3e19039dfa906f4e7569d76401f41eca0fe1bd057254a74a26ed5accea9b3aa26b12c8b881e9368dcc62540af44b9fe7f4c3dd467074ca12093a43955a3ff75ea33e3e6dcb02eb47bdd6575d5a835accff5e93463ea8e9679dd482cff5885321f941394db70befe2bd57f1fb0c7736d5cb9fd8cafadb061adfe9ba7ffaea163d0b8dfca7ab3e7faad56a6fb19d2a642e45762c31d28fd021bee44713b501c84db6d1ed7d1b19665aca2cb973863e3e7d9b08e909f447175288e930fe13694669bcdf381cdf3151b5f6ac37a22cf5d28ae1ec5b9f2709eaefc8f0770acb4e17e24b7cc86fbacbc3e748d1b0fe153f67c3f3ad6f9cd3de491e3a6db6daf1f40c7101e20f47c1ac51d4071101eb47206d131e45bcde47bc893af5bbec336fe063a86f008cafb88caac8baecc85e818cedfb4367c5d65d64b37dc8d642eb269863cd72cb6e15e7bfe163a86700f92b1c7860d28ae81b19b6baf321b7f3bc0f6ae8ca38ced8f06dbbeec758f1c37dd33f6fa3be818dbdbb5e970a64d4bdeeb702d7bd5c62f51996d84b3e15235e5b7ca5d3dab6cd888f46db4e1312b674465b6fb264ffc31140fe163f6fc5d7b5ced91dbe249df62c3e5a87caeaf5966c36654be661bd678388e7aceaf50e9ba84cfbb9c8fdbf8e73df1276cfc184a0fe14a4fba51cff9c7155d8757d9f094caacc3a76cd86ae3c7d131842791ceaeacd559cab08629c35a1bb679cad066c333282f97fd691477c2864fd8f09c9533818edd3410b67bceb7db709d0dcf7bce9f473a4378d69e9ff4d874bde7bcd7e64f7af4f7fabd667bfe9e279ef15d735fb3f1543fb154a5db10a4b91f702d15b7dc861b6cd869e53c40c71076203b6cb461178aebb061b7caf44f6e1bef41d7f6a06b217c5665fa2c38d675a6e28147b69bee82caec372ed870930d2fdaf30f55a62fbb84ca7011c54178d9a679011deb32cc7fe4d8a0a29dc9eb8acaaccb573c795eb5e75f44c7a05b89e7fae7ec758fd0b1cb18cb79c923c75bae5ea463af4afb2f378eaa032ed785e818d5bff2573c3a659347c5b9693773694b13668c77525b35a55b54720e5cb455859f22b829b34f0e40f43cf8073f5b4cb613bab28c6a01c408bddb8cff27f448a1811ca1af4c54a2723799ff297dc59011fab23f8b0ffab280c2ddd1bf03687a31aee34f98d9094c3086f4993aed14874caa6b7a687959ff664ae9d1d9ded1ce6a40579a499d15c8bba68bedbf329b4a3015f1a6e9d0329d99d2b08e71818eeae33ba6849de6ff3d53d20153fa561d3761e66d237a18704c870f4c6e7eddc7f4672acf2e8b8c2e233d61e2e29d69996ba666ad0d943e69eae7e72d32131601f4f35eb6cdb024693ce25b7d96f83c43c7c9c0c0bad5cad865902532e21a54d28cbd3b7c04a3ebe8d790aedf0eef7d7ad213a40b4d06ccbdca6890b6f064c3473e7afc433b379566aab65b25cdb07f7516d582c082bcdac4729f8460154a4b4beaa1a05efc090abf19e675e611bf73dd90b92eba01e6999e29d30009e88e9bf587ebfaf0863e016b62f795cf1ef590b8cc20f57798d98ac5419d434135eb495d3352a7b925b960ace5535aa4b126cd88674540e5e3f232c3a339768ce4368fd7de34fadae90deff874296d970a6397e9e4c659662e65998a7c57f7ecfe3dc82e0ba6f44adb057e6886954cddce56068e600945d08c89af8812f40f84dd4fc774da9b9ac43d33ba99d4e9a9817330539830ecf430a5792e323cd791c3f96825e208971284eb81f062aa90f33d8584f23182e751a633d3da5ba2a6ebd671ce1ca2c59c1d32034f1882a68cf473babaddb2035400c55def1aabcddc899834250936eb92d066ad3266853576c9d272262fa32c6326b1b767c432aeccbbe61872731d6dee6cb394ea5ea0f626920156c84dc9dc3555f353c6f43ed5a64ac81786ab14e544a5a887be6a19d1017c46fff87c4125ef0be673c29713c2a1078e22bc82aacee6dec31bf3dc47d00b2c5453f6dbd29d6177e870d09402e2a114d9176682ab7e0d55f5cd7d8716b25f99292dc0ee15e0199916b2d2b490c22a33d79a165075b22adf233f6fe7116de4f778e8ee6c1533eacb963f47af92a2673c78fe67e9d31b35c394bb26f4a8798d0a9a64471d332fa49c2dd05b4b142a4139db35bcb35d4409870105dc5cf24d8ba1c6c3d21f343b18988ed926d7ae2f4869559d3d20befccbf8fc1773f9afa3f2872adcab7febf55ff672c09563e6aa28255ac2f56deb89beedd592687d5b15251cae7f926a9c5ec155bce0a59ce00d31053f46b55d1399cfd5083877d74849e96ba3b75fb855b7dddb7ee9c6bb49d1cb06d98bc035e06aae466d266ad46869b41ab58c120eddd59630860f98ef2da70c6f541912357cf8e1726e6714b5a1bbc7ada686c04e2db9b27275a986323778b36d94bf74eecaa77d62143fb882cb693b95d3424f4e6da695a4b49651f35dc9e5bb83caf731db23ecd27f387fd8d2d86be25276b36494323cce95612755864a5fafd469fd02d1e202725dc5e55a47e5ba0ce5cae53ebd1e7035578e649005f6e4d4026bb832d4536558e0b34097f1d3d1f25ccbe5b98bcab39ae5efe63d3dfa4f70a568a04a0133f175ea91fe73737d5a7f8e92df3a2ebfdd547e1553f9a56b59d41cd77339eea1725c8c3883c71cd4b94ebf5e3dc9e5bd97cabb0ae5edec736ecfa8e14e69a2e4bf81c83f69fa70d87595afe154985baf742f097b35e77b30994104d953c20eae5ae3a9c2e7cff57c1b29cbc1216cedf4de41fde4fb3ff1a9777db8f90d3ed394f2a6d9c4558d0354d55868ab064019d491bdcaddd832a41d5f942ab199ca17fa14d84f1c67e8be85137c30a6e05a4a30f403b073d93fccf64adec44bde4a350f33121d146d1edcd04ceee6c261ca0664233a621a118cef244ac935b76d9c8d8fc6b5f1764ef2337125efa02443ed690c53e18ff0827772828fc5145cc7096e8a2938c9096e8e29b89e13dc1253f02e4ef0f198821b289f62e651d7457d8abbd2dca9999fd6e752fafa01b3930be2f140a2d1e4e0defd71ce67a60af6252742fb9293c6976c562aa7a5e37cc86ecaa40bcc61bcb5893d946030e9a930824ff282f75282a1273c1d46f02a5ef03e4a302cdac1067f726539c222ee7e4e785b0e843fc5b9ebb371ddf501aec59f8bd9e29fe604b7c7147c9063713e2e8b435c53e988d9540e53822b95f344439c41e0110e72574cc847b9dadc9d83dafc0c213c6996baaea942ea0ca6d711f450e8c98e009e2da94d6c54d13b82a89d402357012fc4ac80c728539ad5c39959a0ee32cb11b03f7ed0986338c733868ba18d7b49655ba08e5f56cedc4d94b9c12a97c398fb126fee66ce435e89e9215bb8125f8d59e2e39c237b2e078eec04251c56197ac3943a6039e22457ea6b3928752b273c9503e1a728e1e040ae87411230783bcdb1ee8bc9fa0c27b83fa6e0360ec5404c1467b9120fc62cf1394ef08d9882db39c137630a3ecf091e8a29b883120ceb8db7c208aee6057772826fc714dc45098643789cdebb36ebfe44599bede6fcc6700efc460f277c2407c29fa584c394019ec88f3565b84049860e71348c35033ac48b946058c47f3e8ce0fdbce04b9ce0b198822f7390c7e342be424906473a11a6c8018ef42a57e4c9b8457e8e6b8cf772d4187ba90cc03bdc0fc3642b2ff81a25181c253c01efbb03d3acdcc94be644e4ac821b75f7cd98f5b67dfeaacedcab69d5e7cfe933ce93ab10438f78a97da6bde616607a5c9eb91d288a7b4f715a3ea4b484b50cba94b8748e7ef0c4dab89db73c0cd02f48af1e9d36ea1daceb9c462f501a7546d0e8ae7666bdfa9ae775d294b941381141b3e8da4fdfaa7d1c83172906d07c71be8d6613234cb41dbd6f983adcab078803a6e4137ab4e22d6b7a37699472f673e57c4495b3d153ce749ed83e674cbd1bd7c3809b861b5f523e3e577618e0f47b89d2afc1a31fae1b5e9b9cb03609ab0396154583414e8397290dba23b7a65673b6f05bd40d8ec317501c0eb11cfc9bf132dbd80dc6db87ef1ba2687593d3ea0d94564743b5bf46ddaafb4d599d3734c46f7fd3f32d439c6e6fe46aaed37fbbcf62e027319c12403f3da8527655ae75eaca163d98716cd9616c00bb2eee99abebac2e70b6df6c0f079d406e3a8d575bfca4762efac35b1c872fa4385c12e4e0f8acccb746f6988d5343faff75d32ea3d0986eadbfcd11f9228ac8c9086dd9eba5fb8cb5c7b2f8e9e8d2a3687b87d3f68b296d8f33e3586e017e3afd5214f951341de6347d13a56973406f9b6dbcc7a50b3a93ab9e6884d3f24b282d0fb2b597ea3b32fba209dfba3c5f5bfd6bf85174bacbe9f4a5944eedac4efe52a43d30789ed4d4c339513409b25c2e3cf428a7fd9b29ed07847baa781e3a6cfd9f0ea7e7394e6fe146d3513c4d66dda7368fc71f938c711abc95d2605f2c0d600c363ea5c759dbda83ac174593714e93b771b6c0b93699dae8d43cd7eb74e9b870f397dcd86282d3e0cb280d9a3c1a606e5146bf7c6b091ae94cd74a939c8e5f4ee97824ab8e8eddfa7412bf15a6d70f4e57b37b9c666fa7343b1cd0d77b47309d594730923eee3ea7d73b28bd4e4d7908f775e829e5ec2c4899d4ee4a23752efa8aa3cc1cf401a7f13b298d4fb37d3f37b3761fcdf59e1df7d9cb7d10407e4cfe90d3f95d94ce57047bfc307332cc25acc772d344a1f20247e5dd61bc959b6394b17b5a33ae1ee466ccfe22a7d97b28cd8e0778ab306b6733393b79c469fadef8e3827de6b1bea8e3024815458397380dbe82d2805e93863ca3d443ac1f171fdd4265fa37611e476c3172c674fa76d32739fe2f699e2cad9ff22ed9df79022518d6c421e7ae29ff90fd4d265fa9f897fbfa9fa599ee7b5eb3694179ca3ae42bb176e1df8be37fa76d99d5c895a5499ba769679ba65f05569d6bad3a27699ed4dd3ecdda94bd145f8d73cbfa8268dc3751657704b8b322f36c7aaf1d2481ebc92a3fdbdb67761a016e4f9283f75943a572261763cab9c1050f189595cea907ee5f2309678919738deaac9d9163fa615bb01d00eb2f0a600a01fbda7c02c353f50e9decbe4e5e0cc0de678095957a847bc727b97a337736cabcc75d6cfab80766643e66e4f57b3db07986bfd04afe75b816d6866a68b53e5fe54f47d5b7f46080eec4eb6130f0becff17eba1efae9af0708d7dc6ecd788b6f90f416eebb33fa2c40ef401d0f02ebbdb9c779fdf6fc0c0f521a46b5e978918dc8ed7ea324c89516e41d7dd11dd344d2af1ee1d6720481ae91027a1201fd2649a0cb2d5067c23062a0f20b00bbe4509649a13c87507ef34ca2cc9cc70ad6ca555228f72294efcf074ace5f66d64a419462b5721142f92d9228d712b532fc5d5141b497a4d01e43683f2089769da7331a33e3b05ecf422eff9a7551bc8ba4f03623bcdf2a89b7c6e2bdc17ad4ee8c7e5eb073aa9482b904c1fcb64282295833c560ce4730bfbd9060361421cc6a04f33bf20193ebebbd9b71046be62629988f2198df290933dac0696f110e9c1e4728bf4b12a5fb1ec0dd9ee153fa3d8062f0b64ac15b8ee07db724bc552aeca833735674400eea1129a84710d4ef2944a84f1521d4a711d4ef2d44a8fb8b10ea0104f5fb0a11eabe2284ba0b41fdfe42842ad8cb8b41ad47507fa010a1ee2942a84904f5070b11eaee22845a87a0fe502142159c7c8a41dd89a0fe702142155c6b12838a3793fc482142159cd98b41dd8aa0fea824d4ed2a73b1193fbd32aea23d7197ded12c0afda414f40604fdc724a1675b9bf2de1d151c15882da86c42307fbc90600a765c6230d723983f51483005875662309f44303f5848308bf186f31308e64f1612cc62dc53b20ec1fc294998c1dffa517c1bc51402f7d392e0160582f3edcdcd1dba0a29747310ba9f914497ed1e52f1df282e47287f561265f8cd37ce7656fcd8a1285ab13b4cbd08edcf49a2dda8a8cd37ce8432da53af8298aba4303722ccaf48628636e8a06d32751376a43b30c78a10db3c84ede7f3e143c36dab2dc6c1f97984f2172451e2efe3cbf37d78b17a5885e0fde24cd6c3bc2d158bed496e43287f29df7d79f89d9e82b31cb19d9e8710da5fce472d0d37652cc675a11a84f257f25d4bc36ff716442bb6ddbb05a1fd9024da2742a39d3de3ccc308eeaf4ac25dadf8db1bcecbb9b0f83c4d40c51eef3a8eb0fe9a24d60da1ebac7f029aa7bb44d552903b11e45f9fc9eeabf81ffc5a8050fe463e50869b3715e33afc1984f2c39228370578d468b78b45413f2b05fa1904fa3725415767a9b3aea6a29380fd52182f218cbf950f8c9c174d6314ac8d621837208cbf3d931e346ffb98c43aa35308e5ab33d9af677646821bc2c53aa3d508e5ef48a27417f1f6cca245bccd08deef4ac2f3bef402c4a494f7a5d5c53f343a8d807e4412a83b34f22fe57d6eec9fdb8340ff9e24e8650468ff3cbe78df7bf31c02f9fb9220d71320a1101366797944f7899366f63edbeed4cf45803f5a387d7d31eef35c8950fe413ebb2b48084bccb3adbb3a8b80fe613ebc681ae8ec5a0ddd8f40fe9124c8cd1e90d795ff46ddec7e79cb0584fa8f2551c3801faf3839ef286c57ce7ebcd454826282578ae0fd8934bc5e333b9f3db3a5a508dec70aa727177ce18058c7b316a1fcd37cd443ff26da117b49f1c14b20787f968f5e3b78ee23feea2ab15efb2802f9e78502b218873ffb10c8bf281490825b12c5407623907f59282005b7d488816c4520ffaa50400aceb9c540f620907f2d0932da7df362dc41d78e507e5c12a5772792f30e76e72bf75a55f32c5bc1ec4258ff261f3534dcb0bc181f0a5c8c507e421265bc3d9e8268c5f6783621b47f9bcfc60f0f0ba6bf0a6ab66debba82b0fe9d2456788c15af06b5995a99325e55f03922b195a01204eeef25c1b933f0bdb36825680b82f7494978158a5a83147cf6576c2b6b1942f60f92c8c2ef652bc64d581711c64f49628c36d8117ceba1d860671542f98f9228ddc1ce84baa9e03b8666ff33171508ed3f49a2751f68a17608a7bf4c7c76ddb43d81e0fe733e7aee86fcf7dc62c39e6508debf48c20bf77d59c5bb76be1081fcd74201598c6be79508e4bf4982acf7f8ca49766300df4535a9d9f6885507c2ffef92f8dd974a71e3d2d9f02511b508e66b850453d0c38ac1dc8660fe4721c1145c7b1783b91dc1fccf4282297897520ce65308e6a70b09a6e00d3631980711ccd70b09a6e04bf7c5603e8b60fe5721c1145c2011837919c1fcef428229f89c9a18ccab08e6ff48c28cf7929f62dc11bc1ba1fd5f49b4d1d6448bf195682b10caff2b1c94825fff2486728d415956ea117edc27bc494def0beaa3f1e7bf601e96f95ad40333ab1f33f2fa8d6cf485f3a0cbffe3ea509be57e686d88ddf3b589a0373302ba44a2cad21ad1656e5303e68a7efd0761979102dc92e0f312b009d1717475532eaeceae580cdb23373ebb4c60152ced33002441b78f3b39b372368d9c8a09e9816a9fa97c109b4dd3ecfaf135a632c02a4958929fd5fac3feeb79d6eca69ad624e0e532dddaf28e70b88333a63f43a1e0a7f4b38791d1deb6ee0000 + serializedProgramCompressedBytes: 1f8b080000000000000aed5d797c14d9717e030809210eb180603916964b5c9a415ccb72ad90040810085dcbb96240120824a1d5c19138b19dc489e31c8e13e7762ec7b9ef3bceb9399dc3493671e2dcb7e3248e736fe2fd2f79f5fab5a6a6bbaaa77b7a6a3433b6f493def4eb7ef5aabeaa5755eff5eb9e7949a57f127bf4bf7ed5ad5a5593ea5383eaa11ad79f5a7539a67f9d23b7be4b4deaf2aefe9fd6e7f6a84d395ac2cf8ec41afdbf431f4da969dd7246ddd1e58839dfa386f4e70edd76481f41edb0fe1bd2572516e8467daa4d5d5217554362550e12fda6d194ad4b805c891afdff947aaacf0e19a6a093a439d5a0fff5e83353e6dc9866dabdeebaba69c41ad3e7eee836936a54d3bc6d28d64cd42af34139458d2d17e9bf2afdf7017b3cdfd6d5d8cff8da5a5b36eabf85faef263a0689072dad777aaedf6969ba9fa1ed2b21fa5b60cb3da8fd625bee45757b501d94bb6d1f03e858d3325ad1fc252ed8fa85b66c22e827515d13aae3e843b90bb5d965fb7c62fb7ccdd657d93245f4b90fd5a5509d4b0ff7e9d2ff58008e75b63c8ce856dbf290a5770b5de3d643f9823d9f46c7babff9c73c74dc76fbedf5b7d131944708395f447547501d94472d9d3be818fa5dc9f47bccd3afcbdf715b3f888ea13c81fa3ea1b26dd1a5b9041dc3f921abc33755b65dbae57e4473a96d33ecb966992d0fdaf377d1319407108d03b66c4675cd8cde5c7d55dbfa7b01ba77699c64747f3258f7d56f7ae8b8ed5eb2d78fa063ac6f57a7f7b375bae0bd0eaed5afdbfae52a7b8c703a5ca166fd568d2b67bd2d5b90bc2db63c65e93c50d9e3bed5537f0ad543f98c3d3f6a8f577ae8b67bdab7db7235e2cff535ab6cd986f86bb3658307c731cff9352a634bf8bc8bf3695b3feea93f63eb1fa2f650aef5b41bf39c7f56d136bcce96e754b60d9fb36587ad9f40c7509e4532bbb4d6e7e06103c3c3465b767a78e8b4e505d4978bfd795477c696cfd9f292a5f32a3a76db40d9e539df65cb4db6bcec397f19c90ce5457b7ed2a3d3cd9ef35e9d3fef91dfebf7daecf9294f3de3bbe6bf61eba938b14265c610b4990eb896aa5b6dcb2db6ecb17466d03194dd480f5b6dd98beaba6dd9a7b2fd933bc6fbd1b5fde85a285f56d93e0b8eb5cdd4d67968bbedaea8ecb871c596db6c795565dbd75595edd3aed9f38fd0b1ee6fd1d779aebf6eaf7b8c8e5db9319d271e3a6e5c77f9ba8164bfa1323ec5ada3f4e2caba041d239ba879cd23532e7a549ddb763bd7b62a61f2aeb3bad7b4f60cc97970d14e153e6d775be64ed881f442f8073f3b4cb7d33a359ed00488acb9cfe4e4d33a7a379359f3da441de2bbd5fc4feb2b460cd1a7fe2e3ee8eb02981bd5bf4328e59fd2f567cc8c0192fe117da6493baa11d3ea964ef7aeebdf6c2afdbadb513d9886b4d1cce8ae80de2dcdb6ffca5c22c1f4c0dba65bd374662f63bac60574421f8f1a0e7bccff4786d321c37d87ae9b3673a9713d3c4ee9f289e9cd2ffba4fe4cf5d96b21a379a427315cbd335572d5d4a6a501ee93c63e3fa391b9d00840bff0a91d860b922672bfcba789cf60e8381948763b2c8d7d06b244565db34a9a7cb8db87607419fd12d2f6ede07d484f448264a1910175af331264343cd3fc918f9efed0de6d55d9a2ed5749938aafcf215a10b040af31b1da47215884aaaa052960d40b7f8282dfa45e3d4584dfb96ec45c175d010b4d64ca564002c2719bfe705b1fded527609deab1f2e923058dab0da4fe80998b2d0ed47914a8668da7774e6c9a5b260b86b566568a0cac4993f1ac09303eae2f931ecdb339923b3cde78c7c41be7b7bcfb5355b45e6a8d5ef2e98dd3cc7c4a33b5c536f7dcfe3d482f8b67e5cae8057e680ceb18dbcec50387e0020a419313df1045d09f08bb9f4ee9b6f734128f4c7633a3db53897330a63061d8ebc194c673a9c1731399ce47e38843b88a403805082fa3985ce46112f863082fa45467a68bf74555d7a7eb9c3944bb393b62124f4841d386fa256d6ef76d820a4071d7bbcaea347707660c27c16a5d1e5aadf546adb0ee2dc92da7f26a4a336612fb604e34e3d27c688ea137d7d1164e372ba8f002d69b480668a1309cb9eb9ce6a79a893e2b8d49c833c319450d6114298855ab8800f07ffac7e70bea785fb08823be9a200e11380af15aca9ccdfd80b7173946d00b2cd450f6ebd29d6177eb72d87001f5c045ee859960d36fa04cdfdc0b6827e3ca5c49017aaf05cfc88c90b566849416cfdc685a4cd9647db1333f6ff08896f93d1b3a9cad63b2be5cfd73e8d551e8190f5efc597a7e59334cb91b4267cd1b54d0243b6acebc8472b680de4682a904e56c37f0ce7629451c120ab8e1e39b1683c5c3d21f0c3b484c27ed90ebd217a4b5a8cebe0c5fffd57cffcbb8fe3751fd83090fe8df94fecbcd075c3969ae8ac2d1722eb66d2662dbeb0ba2c5b67a8a385cff3c3538bd84eb79c22b38c25b62127e861abba6b298ab1170eea1a192d6d7461fbf70fb6cb777fcd283779ba2970d72b3c00de0959c456d272c6aa22a9a45ada28843b8da1146f101f3bdd594e28d2823a28a0f9f2e177646d1183a3cee341602bba7e478e56ca981523778b35d94bf747617647c62143fb886eb6937d5d3124f4f9d6694a4b59451fb5dcbf5bb87eaf7191b11f6e93fdc3f6c331c307569bb81310a0fcf723ceca578a8f345a51eeb17881117d0eb3aaed726aad755a857aef7fc22e07a8e8f6490060e1454031b381e52140f8b7d1ae8357e3a5a9f1bb93ef7517dae64f177fbce0ffde7382e9a292e6026be49bd45ffb9bdbea83f47e96f13d7df7eaabfdad9fe325616b5c7cd5c8f07a81e97219cc1630eeb5ef3b7abe7b9be0f527dd7a3be9dbdc75d5916ee7013a5ff2d44ff4913c3612754b1d2a930b75ee92809fb271779603249041929615755a3f154e1fbe722df564a737008db2dbd77503ff1fe8f7ff23d1f6e7b9b4f3555bc6ab671a67184328d25d6340094615d39a0dc8d2d23daf1453189ed54bf1053608f6f9cd47d0747f8684cc28d14618803b09bd89f667b296fe329efa48687c94487458707979ac9dd5c384ee9801c4427cc2082fc4e824b6eb8ede2747c32ae8e7773945f8a4b790f4519aca7258cc19fe009efe5089f8a49b88923dc1a93709223dc1693708a23dc1e93f03e8ef0e998849b299f62e651b7457d8abbd2dca3313fafcfa5f5f543662717d4e344a2c5f4e0defd71ce67b70af6256742fb92b3c6976c57aaa0dc713e643fa5d2c5e630dedac4018a30a8f45c18c26779c20729c21009cf8721bc8e277c88220c8b76b0e99e5c598eb0887b9823de5900e22f70eefa625c777d841bf197628ef81739c25d31091fe5b0b81c178b63dc50e98e39548e5384eb94f394419c24f00407726f4c904f72d6dc57006b7e89209e344b5db754290583fc02413f053d1908e0798fc6c456153d10440d022d9c015e896980a728559ad5c3b959a0ee35cb11b03f7ed8a863acc03386aba1957b4de55aa08ecf2ba7ee564adda095eb61d47d8d57771be7216fc4f490ed1cc73763727c9a7364af14c0919da188c32ac34018ae039623ce725cdf2a00d71d1cf17401889fa3888303b91d069280e4ed3c87f59d98585fe0080fc624dcc9413114138a8b1cc7c33139bec411be1b93701747f85e4cc29739c223310977538461bdf17e18c22b79c23d1ce1073109f75284e1101e05f7aecdba3f51d666fb38bf315600bfd1cf111f2f00f19729e2306580a7cc634d19ae509421204e84d1664040bcca398f57633a8f6b1c169371b1b8ce19e054810cf006d5018c88e93098ece409dfe4bc083c0deebbebd0a614997c5f547073eab1c9d31ed8678e9accfd890e7dfe923ee33cad0935749647edad1c30b7bd32b968f61698282eed154eca479494307fa7b9c4dc39f2c1535a5336577f1a205f905cfdba6dd4bb36039c448f29897a2248f4500fe0017dcdabba69dadc149b8e205974e9f3d7ea2d0e83271406307c71bf2d66e31e4c2e1db9ef1a1b1ed049d190e17c5a47682faf991d9451f84c737c3ea5f86cf1f099e913ebe782b1bb291dfaee19dc784ef9fa42e9e13627df6751f2357be4c3b6e1d5c919ab93b032605a5124b8c349f0d994047d91475387395bfa236a90c3e12d140ec7581cfc1bd0b2c7d85dc6db878f0d51a41ae2a4fa1c4aaa93a1c65f8bc66ad0f0eabc9520fef8cbcfb70c73b27d2e67b94efc769f3fc04f1f381c409c1e5669bb12d5317b65bb0e968e2ebb8d0e60a7c1237375939505ce0e9a2dd12013d0cdb4f14a8b9f4e2e443cbccbe1f0560a876b8238383e2bfbed85fd66b3d088fe7fdb8ccb2868e46bf5f73844de46217236c258f67ae93b46db9339fc7474ea51a41de1a47d3b25ed69268fe5169df3894b51e84791f43e27e9e75192b60544db5cf91ed72ee84ca122d1034ecacfa7a43cca5a2f153bb263d1b46f2d9ab756ffba751499463999be8092a98b95c9cf45c60383e749cf3e9012459220cd15c2438f71d2bf83927e483852c5f3d061ed3f1f9cc6399cbe90cba6a3789a6cdba7364cc7cf491e72127c1125c1a15812400e36352bc7453bda83b4174592094e927772bac0bdb61a6b742ccff53abdba2edcfca530ba789593e08b29095a3d1260dca264bffc6809ca74f2d5d22427e3bb28194fe494d1d1db1dddc4af85fce260be924d71927d0925d9f18058efcd607a726630923e6e9a93eb4b29b9cecd7a08f7b5dc69e5dc4d4f9bd6ee4a23752efa8aa3cc1c748693f8cb2889cfb3b19f9b59bb8fa37acf4ef9f4e56e7e97cfc91f71327f3925f3e990992ab7963297d9ea634ed277c78f1387cca34d51e304b48a22c1134e82afa024a0d728a1cf28730a2c1f571f5d43d5fa37611ec96a37742675fb2ee3a39cf190344fd7a5667d4aeef73e0007631a71e8b9773643ccfd3687f728fe05a7fee709f27dd7652e29a85cb90965cb58baf0ef06f1bfd7b3da4ae4d2d2489b270a2b4dd2af04adceb75a9d97344f2beeced39a7273f155b8b79c2fc9c57906c5bb43c0cd9213ce37143841135c4f4efab9dec0b1d71070234c01dee90b46e5249b93cab9e1010f595457cd4b01eeef950467b989c113ba6b2793c83c7008ba03c006cb02308500fbea620286a76eddbad963ddbc1c007b9f01acbaca43dc9b9f14eaedc4b950e63dee3213e39e984c6dd2d01bf47a60f31c73a971fe35d80a1b430db4469faff2b7a3ec2d930cd0413c05c9c0d77e9ac7e914c4697813fec29b6e5833dee2eb25bd85fbfe803b16406fa28e93c094b7f738af205e94e541aac288968f17d98adcee374802b9d60239aa2f1a354324f3fa056e6e2f08e8062940cf2240bf5112d0d5165067c2306e40e597b0f6c941592d05e52504e5fbe612caec79aca055ae9382f22082f29b8a0125e72fb3ad52104a31ab5c8aa0fc66492837125619fe2e9920b4d7a4a03d85a0fd164968377982d1a4c9c3063cb7f2f8574d8bc2bb540ade3604efb74ac2db60e1bdcb7ad4beac382f189ceaa4c05c8ec0fcb6520253d032c5c05c84c07c7f2981d95c8660ae44607e7b31c0e462bd777386a0656e9302f31904e60724c18c96381d2cc3c4e95904e5774842e9be0b6dbf277dcabc0b4d0cbc9d52e0ad46e07da72478eb54d8ac337b5674440ed41352a09e40a07e572982fa421982fa2202f5bb4b11d4c36508ea1104eaf79422a887ca10d47d08d4ef2d455005a3bc18a82904eaf79522a807ca10d42402f5fb4b11d4fd65086a1302f5074a1154c1c9a718a87b11a83f588aa00aae3589818a3793fc5029822a38b31703752702f5872541ddadb2179bf1d30c532ada1358991daea2a09f9502bd1981fe2392a0e75a9bf2de1d15cc0ac41654b621307fb494c0140c5c62606e4660fe58298129985a8981f93c02f3c74b09cc72bce1fc1c02f3274a09cc72dc53b20981f9939260067ff341f96d145308b89f92046e692070bebdb98583ae560aba7908ba9f96842ed73da4f2bf515c83a0fca02494e137df38db59f16368a2d08add61ba81a0fd194968b72a6af38d33a18cf614a420ccf55230b720987f56126618830eb4adc6366147ba03e66419c2b610c1f673c5f0a1e1b6d59663727e1941f9f39250e2ef242bf27d78313bac47e0fdc25cda61d1968ac5f6247722287fb1d8b13cfc4e4fc1598ed84ecf6308dad78a61a5e1a68ce5b82ed480a0fca5625b69f8edde82d08a6df76e47d0feb224b4cf8586b672f2cce308dc5f910477bde26f6f382f6bc2e48b3401157bbceb3482f5572561dd12da66fd13d022dd255a2905720f02f9d7e6327c95ff835f8b1194bf5e0c28c3cd9bca711dfe0282f24392506e0bf0a8d16e178b02fdb214d02f21a07f431268f7cbc9b9e1ef4a2a0ae3612918b720187f732e877ed136e08879d17308cadf9acb8094ed450577328b79d1f508cadf9684d25d7d3a5041ab4fdb11781f9604cffbb606209356deb7ef967f4c3f8f00fd9d62c474ff1ad4a7c7c6af0308e8df95047a1501b47f025abe2f6cb98e80fc3d49203713400213d3665d745cc7c41933edacb45bccf311c0af974eac2fc70d8a6b1194bf5fcc70050d616db4d2c2d54504e81f14c38b6600adac65bcc308c88f4802b9dd03e46de5bfc354d96f1db982a0fe4349a821e1c74b25cecbf5ba94b3912c3ddba09cc0ab42e0fd9134780366765e39b3a51508bc8f964e24177c525e2cf06c4450fe7131ecd0bffb73dc5e527ee02510787f528ca81d3cf7117fe79258d43e8980fcd35201b21cd39f4308c83f2b152005f7d28901d98780fcf3520152702f8818901d08c8bf28152005e7dc6240f62320ff5212c868377ccb71eb571782f2af24a1f46ea1715e1eee7c7758876aabb015cc5e04eb5f17c342c3a5e5e5f834db3204e5df4842196f73a220b4629b135b11b47f5bccc10f4fb965bec3a8d2f6235d45b0fe9d24acf0fc255e0dea345699365e55f00118b195a00508b8bf9704ce9d811faca095a01d08bc8f498257aba83548c18756c5f6605623c8fea174a2b4e07be6c4a2f43a04e5c78b11a5a7d53d05dfea52f9bbdc6b11b4ff2809adfb0801b52733f375be9575b7f10c02f79f8a11729a8b1f72c4e2f52a04de3f4b8217ee1b8aca77d1770902f213a50264392efad62120ff4512c894c757ceb077b4f91055790fb57423f83f2909bffb1a1f6e61ae125ecbdf88c0fcd7520253d0c38a81b90b81f96fa504a6e0a2b11898bb1198ff5e4a600ade5e1303f30504e67f941298827786c4c03c8ac0fccf520253f035e76260be8cc0fcaf5202537081440ccc6b08ccff960433de9b40ca71f7e57e04ed1b92d0465bc62bc7f726ad4150fe4fe94029f81d3162506e5015f3dde52990e57fb13934e6b8f7d41862a7726322e8f56dced785d75bb4c635cf9d6ac85ce17cc9785a65be3a3c093e2f011bbe727db337fe06ef609a805530b54f0120097a7c8c164ccb85f8ae724ad2dcf2f1165317a09524ac2257b4fc6f82deadda8d9936986fb5efd39a7788c34d8749fd1998829faaff07517ee64b73e70000 serializedProgramBytesString: - serializedSignature: d9e8685332edb17d456a0af1513e0dcf94761e2b1644f2f917a6c05e84277ea91a3d973c45fc3fa76ae73b67a4e9a9420714d20b963616eb12dd9860a9039a0f + serializedSignature: fb8b259d04b816ccae25ecc1ec9c7f3f780b366dd326de0529d8c4b151f5d8e28e499193f97eabf3077fab35c78fa6c5764a582cfc36b8ec8a482ee6842a990c programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/45acb4c58d6dcf2409b587862862df34.asset b/Assets/SerializedUdonPrograms/45acb4c58d6dcf2409b587862862df34.asset new file mode 100644 index 0000000..f2125df --- /dev/null +++ b/Assets/SerializedUdonPrograms/45acb4c58d6dcf2409b587862862df34.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 45acb4c58d6dcf2409b587862862df34 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d097c5d45f5f8e775dff77da1e9fe4a97a4699ab650a0e91eba92a4a5504a9b26691b9a36214b69cbbe977ddff77d1115111415151515155c5151511050104151501050fef7cc9dc93befbe39efbdfb6ececddcfe7fe9a7b9b9dbb967be73663f33d3215f383fb169ceaff5a24c2c1233c43a512deac56ee7af45ce7197f3cf3dd3d7d78a46e7b8ddf95de9dc9b26f232bc093f9363c39cdfa5ce59936876de6c1155ceb156de2f1735cedfa5cebb35ce195cdde6fcaf719e8a75725e5a27168b3562b5181a1b9c41c47af95293ba168370c5ba39bf178a7dcedd1aa9147c245fde1aeafc2a77ee34c97bbb1ca5f5731bc52619ac5dcebd2ae79d4651e7c8dc2a25767bd341159361928701ea38501dfb3bffbbabbf3baabfbba9bff1f39dd5715096cf0f46ef75477f03a13bd3bc3f441dffe1fcefe2fc598bcee1ddb7d5f950575e871d69640d57c711ea3852c93c290bfdbbaae3a80ce14d27633492950db36eea38461d0f51faeeccf1fb635d46b15b913c38fe13e933067dbb3bba0fc7bc0061d7f1f89e271edf73e3b1c38d2afe5e57d7c7a9e304751caf643bcf0cbc575d9ba88ec332e835c97d4fcc15099b75bed9b1419d4f56c7b83a4e51c77f295debd079505d749c1eaa8eefab6fec325cd7cfc3fdddea7caa3a4ef3c4d774f55cbd3a9f91a53ed9d89fd6e9dfea1b0de8dce1d8694b1a593ade3ff0c4fb07eadd2b5d8e9d9ef48407db9f496ebe9277720ee1f8d0138e0f5d5d3ac73dcf65d241cb2f50c7ff28b98de81ce45eeb336c9dd47b8fabf3992273de36208b7b45ae9c6e9af56cf73b5d06b9d7bbcc17c9b63c2b839e3a6e3ff2c4ed474a6e9d92abc35fec9ec734e751480ebcdfe491fbb147eec74aaece23b48d67d2738e3a1ea68e47a8e37cd19a8e272c57d7e6a9e3e1eaf88948ce033e51c7b98977875ce9935bba383ad213d7c3d4f1bf1964eaf78f52c7ee593eaf9f591040e71275ec91e5377ba8e3c200dfece9da42b7773db6303b83cc452edf6ecd4807474ef7d3d4f962755ca28e4bdd23fc89ed409e67b2834cba2c53ba68590b5c5d7af453e7da264b937511477b746a6e439dfea764b6a073387eaaaeef41e7a0eb5af73b3d9e51d757a8e34a8fceab18755eedbed7bb17b28d6cde4b675f6bdcf0f52c7065f7ac50d7d77a742b49e8dd6d317a57eb914d7a28532c3a243396e7a083665bee79ee14740e47949ee5dfcebbbd34df21e83abcbb179dc3ff63b2d4759d48b55990d3097d5b955fbd54fedf4bc7e77a919af64cefc2b123bad651c97b49bd77ac482dc7f47310b67de81cee576419b60d06fd9ceff65e90e6dde34472fe7354c21ebafe545d3b5ee9d35924a5ad986e438d4ebcd35ace6c74cffb6a5d4e50ef74415cbab8faf5d1e5e92675ac14e6727633e2a0d2a3d892f8f6a817d5b513d37cab5a3db3d513ee3509393d8729dd753e562592d38cf759b8a6e5ea724fb7714e4a3c3bf180bab65d1d55bd20d6552497d1dbd07538ea3af47e740ecfd524640f7e565dd332b4aea6f8d475751d76531e90cece76bbcf0e53712aea5db67d9ff2c83d41a4b7db0657ce649596c5c9ae9c7e9d7cca6974e5c47579d3ec9ef7d3fae87a992e1374fed45d24e5e542e747a81e10eb8eaec1b3a77af866d22d1dc77dae9eadf57b15bf427f633e92dd5fe9a1f3645ce7db8beec1b9aefbb578c2974e175d7fe89d213c03d073703c3d40f8d3ddeba28e67a9b0f512496d1e79eed8c9805169649d2d8c763a50b73dcf71eff7d7f6772e0a137c43b3c0b6749ebad707855be7877dd1b533d5b57e896b31cdec7c4ffc9ce6b97f019261ba7f21d2c174ff80ba7ebaabfb409def5ce4094b8b47d7be22299f1117a786553e83bf7d868fb8bc44bddbdf1397fd55bcbc9946d6a5e6b81cf4a13abfcc1397977be27280212eaf50f706a2781bafaee17e411dbf8311071db62bd133382ef4fdab905cd3fdab910ea6fbd724c7e5605d8fbb96884bac3f8ecbeb52c32a9fc1df3e338bb8bc411daf574753bdf746759ca8e49e9585dc9bd4b1268ddc211eb9676721f71675bc398ddc5b8559df5cbea76d5df5c1c474df40033a77ec76c80b6964dd268cb63e54f71bdc2e926dfd0e916ceb4345aaaddfa9eee1fe34d59f181b2e526d7d04b293a1eade5de8196cabfafedd48aee9fe3d4807d3fd7b4592ad0f5ba0aedf27ccb68ef5c7b67e7f6a5863c33ddfd6656cbab87cc0c359f3d5fdee7bd0b9133fc3bcf59f7a91be6c7cd0951fbf549d3fa4e48d52f2cf41e7701cedf9ee68f7bbc355ffd708959e852a1b874f73af0fd7630c0f0b637d6b7885e7b9cf88e4fad4673dfc3fe7b19531097b6b0dcb23e81e0e5b9e48ae937c5e5d1f8be22a0f5d33d5b932717d541dbfe0e1a7c71fce45e7f0dc1791feba1efd983a9e96b8d75ff3d0f1db0be9f1b8d956a4aeb8dfc16f1d4987f9890c61f693278d13c979d238d70e46a6eb9ffd8a7ae6d234cf7c4d1db59d7c55c9d765df7e740ef7bfaece2778eeeb31939b13ec87e4213db46c78e7bc2cc2ff4d757c5a1dbfa1bea3f3f53a744e9511b9d66373bdb759e93429d97ee4b9130fa375db58dbe28919ece35beaf86d75dca2e44df630d06349e9fab3327d2b4db8625344721fc21475ff3bea3caeeeab3a726caae7793d7ea4fa9462877a9e9fee797eba7afebbea7c5af2f3e27b480e9c7f3f11b6d6fe8767d135dd76f84182cf189dd7cd48feb6f8a1486edfe9369c1efbb900bd8719e8fbba9e5fe009d34c757e009dc3b1d023578feb3ce3b9afe5cef2e8fb2375fcb13a3e9f08e3d402f40ee2299e4b9699d6a6bfaf6414a9772e42e78e4d8f4957ffd7efeabeb26225e36274eec8c8cb73f5cd2ba265c5e678f8cd46d7e1a8eb2f97a073907d208d7eaadc88cdf3846d9e7af7992cde55e33bb1c33d613b5cc9f8c40ddbd87e6964fd441d755f8f8e436db320ef0843bcea31a5e7d4f97ca5c3a5e8dcd161ec83eab99f09b36d1fe679ffb2e4f7c7e931c19fabe32f3cba1d2992fbc27ea98ebfa26d52fcdaa33beaf36ad5ef058f7e7a9c49ebbd407df772a487be0ec712915c4695a8f7559f636ca1e7beea1b368eb5a74b23bf5172ae48f36cbaf77fabde4f576ea57bff77eafdab727cff25f5fed539beff7bf5fe3539beff07f5feb53edf5763c7b14522b9bc8573c76e27ec75e370c29deaf997d5f17091be2cfca347fe6225ff3a740ef74dfdc4afaae39f926524a569dd87bc44a4a60b951ec4ebe89eaebfbd82de83f3d7507832f5199aae291fa4d8520fbfa52ebf894faab0bde2e1579b819f7a2eb60c3da7bfb51c5dfbb3ba569ab8165b8eaec1f168a5dbf5e8dcd16df27c8fdc15eab91bd0b7e1b8525dbf119dc37baa8d135b2592fd9bb4bc3548a755ee3727e9b2ee0dcf37568b443ee2f09aa4c7eb5f46f7bb233df5352d03b7834f4247b87e938a83f793bf99310e4c65e85a915c2751e38ab1633cf17f8c62ace27fb28e7f5d973c39fdb7b55ca178c5ca44727d4f8d3d8abf207970ff665aa6f13be59ef094277f57cacf54cf794b1d1ff2cf53b641e1f857f5fd75ea7bb7a07338e2b140d55e8fad4736a1fa0763c7aaf775df96b6d10de8d90de859381e2792db85c7b97177e8fb1ed9fabde3d5f3b7a173f8d63bea7ca3ba7fbbbaaed3281a3391cfe86b70dca4deb9039d3b3a4cf9d0b59f439f23be75a27aef4e748ebfb959ddbf0b9d43d8ce4a7e3eb6453d77373ad78cb19c7b3c723c7ac52a51182b952e8fa5b70bcdb5b59dbe417d6b971bf6293a9ffa7376f28cd79e57c7bfa96f6cf570d3e3a2cfe5205bf54fc6aa44721db8ca6534558f7febbcffb50cdfd0fd9d7f5747e52b13ab56f2ef45e770ac1149361fd37dc9daf6b789a4fc599e3b7a4d7bc42367bb478e1eafd5f1b243ddbfcff39eee3f794dddbfdf8db7694f7bc29329dc49d73ac7a44fc17251232a4583c897ce12d06aced65d5cbf99d9515cfa65c02ff8992c3fdb2cf639afd698bcb5d7495ff066314b141abdb587cb313afdf545f277a5f344ad14fa402ce5135f49f9042857e7fcab41aee64dcef565d2531d9ccd6b9d3b33c44ae7086f6d1133c546e75fb294f5ce67eb448b7356e1fc6e90f2b6386aa73e992948e096ee7da7cc91e97acdef72ae68a00dce799dd4b05cfede2335ad91da973ad79aa50fff6eb15d2c748e7be5d752c3dee8fc6dfa66854266d6d1ec3c4f5d775df475342d764203dae74b5bfcbf18698f1801f45d207dc04fa77ce90d71714a4cfc1f43379381467ea9923153228b255d2b14f9d24fa92c85a0ff30a686d06cdf2eef625194362c663210dd2365081231fcc6071f94945e78f1f19d9383364be4cbaefd511982960e2cc88bcb51493f41e8dcb9530128eac51f33e1976e4ce521e2779fab95cff98f802eb2f04b8e00d94558e1e46a6b51e1b94e2a5f2755f306a6dc79a2c511a755af68bda3ff2a970ac2fd95ceff3dceff3ae7af7ae793d522259e0b40a9ae32aa520be24cc1a522ab8329b2647f5945bba4156ada57fae8ead61a8a4474e5cbdad5b034464d7d4b56bb3aaaba974e76cd8fbf33fdec82718f3cf5c49add1557bdf57a6773fcf490f193cb57a918ea688aa11e6127a7cce547baf8e9d91aae44fcc08f99612fc2c633e94011ec6422d8336c1b877bf5524aa5f3ac7f86e0d835d59b259901f6218c30b30a14c2ce06840580b0af412bd1b9bb472b508890dcc51439bddaa7b0cecdb8612466a8074167d2b8fba72d6bfd9a7657133de902b885959e6e43963b8d8515cebd4ae7f91a592185eb6b1d8995ceb7415e89fc42a2dd99fc467ab2d09f3fdd4bd64875a0a43a01b588836a4611ef66205e00f63ac86006328ff32686fe7462e84e25b3c14193590f4af290a0927b5292870695dc8b923c2ca8e4dea66403cfcb2e48fe6493e87ad17f2d74dedde104668f6c4f43add1d455933eb90ccf3ab98c90c9254f983a90fc694425933ea6b8838b234d4a7aa36e041d757d29c1a3020aee4759dbe8a0d6d69fca320e69832c63804938a4f63122b5cef5a9f39322bc172d7c20a5799e41f30f1676f0a5f9200af8d8a0c0075392c705953cc4947148933c3be48cc3dccfbb4c2e075223d63875869384db41a7bf5b2f3be74023ddd157e61cb7492d6a54333473ff70fa2c68bc3034c464ca5a62cc6cda2b145053e820b3c289322b04efab75ce75b75f7a898c815af9a519466de00bd4f39ac52a012b9db4c8d8ee4c341727c9afdbc586cad2875239cd64434ef3a2291b4b93d30ca3926c3c68921d6e920c49768ac1560bc0566188a7872c2952be3389fece0853d620b3fefded9a35b80d0b90b74d0ebdb8f2560b58ace71469aa3b1d03dea30ca7c279a6d1f9468d32f2209901b8698ef6b65885fb634e0ed3647238328be4c0192a2a018c345912b4c0c0bf34a5b7102cbacc69702c129b65323c595e064a6eecd6ca476bc57ee7a8475152ecad2b6d6fa34cda40c516f2b28c15a181b4e0d194e0fc80820fa1d27841d0343ec62419721b180c085ac3caa3d42e0caaf6582a479d65c8513f89f9cb51c751c28b0cc29feae04ff878937030d6d9d9d8481aab9e40092e36a53128bc17c9ceac3ce77fbdf306749d54cad49f270bc3446e90e7a4f55ae72f28b0a7a1e7eb9d27dc514b3f7a4ea48c624e50a39844c5db5c43bcbdef33de2653c2e719842fefe84f789c8abbc34c71074913ca0da896ec50655b726e9827c78ff3a4cb408bec94a99631d724e3354f9cea641ca73bc766e7e93c590ed4c97b7972edba4699d7fa89d32994fe879bf4ef81f45f8b34f4f3c543a97c6bbe21df8af9ccb7a69a8443c5e70841547ca0e0f55ff19946613bca840d4a97254ef5056aae2df2f972690035ad75e5ea362a20a71bf4ca97cde5dda23d2b64d05a00078b26f977a28a02df4e0ce005a9782d10a9152ffd63ae789508a878158acc15afb6d09eaa60cda032d585864c35e62753cda7d2c2222a2d2cce292d14986c4ef6a234b4abcdd129aa4cca869417bcc20fedd88eded6bfece629cac2b2da4ac7a972cd9426b936a94bae093253e85bdf8a162175e1cb24614e134b659a0853732a5dcca44aed658652fbf1cefe4aed4293c9ca1eb4c67635d9c552421866bbdc64b6b2a7af388bc86f4b3dc7483fbc2699a956b77a89c0cf18b9b04ba32c366b9ceb90f1e2fb53e5c21f505f5a2a79ef92e4217c95b2dd4b1979a934f2b0c34919fa2caa0038da5000f8aa55175149688521097de23309cda6d45e1954ed624aed5506b54febe24fed3994f0d506e12bbbfa133ed7241c3266980813a485388f120cb34452aa9bd09ed4ed842a4f4b71ab6c2be8f65fb5bcb2cff95de75cab9222f2a44fa51e30f6a3e56114db630c6cfbf9647b3885a02c20dbf926c17d84bb6a5f90c1b5234c82a1fe552188fa17cc75f15fff3a92c2bede80fd4e9fd88fa292f9b14193f9024af286a0924b28c9c70595bc90927c7c50c98b4c922112371a22117c26fc44e2624af80906e1153e852fa112e62653de345140c32b5149759b4f897e8d4ab14d4a6974fedea3cadceaa4fe11e8f3a8558d663fe97c29a5e789263ddd291ce01603758a4ad987065f5c2376fafaea320afd6603fa4b7da25f4e09df6210fea64fe1a514af4a13af6119e2b55a7a5324aece74aefae17834a5cd569336709a88373fdf594121ad3220bdb5873fa42ba940549b0201dd362ebec31c64ab65875fa59a7eb24716e3fe31aea234a83169e056e774c5606d8ed582d514d26d06a42ff844ba86ca91b707cd91d7526aef30659a3dfda97d0ca5766d50b5cb4c92a1d67192206a1d302bd07fada39cfa4e1df59d5d397da7c2f41d20b53b28a9755404d71b2278412f7f11bc9e12de60107e9a4fe1c752c24f36087fc6a7f00d94f04683f051bdfd093f8e12de64105eed53f8f194f06683f01b7d0adf48096f31087fd0a7f0132823df13d4c837516a9f62507b501f7f6a9f48a9bd37a8da9b0d92f3a5334e981340bcde4ffe7ce46195e3ec5c53c159c634f923d3f7a92ea52da6788112fa54934a3e8af24aca9a4e3358d3eb3e13c1564af8e906e127f834d52a4af81906e1077c0aafa6849f6910deafaf3fe13554649e153032b75182c1ad33a52e384d5a67bd4c63797237339859b95b6d9e06b3db6be4c075a5b4fd4487931eb886a9ba79ca7a1b954dd739d63ec3b9ea47ebed94d6e798b4869157e8c44dd49bdda6a4db0c31f915e689c9aad63dd9975e3b281b38d760038ffb34b05a2ad0e705b481930c82f3a55f622d6b3e4bf99156c8ce7b985abf4d5aca2edf5ea7e9f3e4f3b3ce932f9079328ca7f3e94ae5df3b4dd10d75eb0b0551b78695b37a80cabeead675a6ef80cd5e64b0d9229ff9d62e4af8c506e11b7c0adf4d09bfc420fc3c9fc2eb4dc2a15a036b8805aad634506a5f6650fb399f6a9f4ca97d7950b51b29b5af30a83da89f3fb59ba8bced4a53860e55f96c3a45f264a26c91051414316b853b05d4f59582b9e6d5d28b6a873c5f2b9326f42c6e9505803be37db3ecfcd82ec7121b9dabdaeb6a9f70e706e5c9ea98bbfe479ecc0aaa952fde4e79a5493e5583be632e706a55c1898b28bfbd9bcd54145d6588a2093ea3a8858aa2ab03163f7b28c1d798e21ebc192a9c9386a478f1f3bd53a88cf55a2a6385e50afd775aeca5c275bd295c6e37bfee2975ed7793cf6ad13e2afe6f30e52c3ee37f3f25fc4683f04efdfd093f958a939ba838b939a73839cdf41dc8f46ec9c688d38cf39d4e09be35a0e033282bba2d60b23b93127c7b40c167990443dcc3aa765edf4e10e0c7b7f36cca0aef3458e1b401feacf01c4af85d06e12b7d0a3f97127eb74178834fe1e751e9e71e2afddc9b53fa399f329afb4c791a78c06d76fe41574e9dccad75195bebe48e70a7413615a13cf4636117505adc6fd26260ab1605ce6f2879616ccaf50eca5d870b291d1e30e93040e930cbf95f251b43f0ce5ee777ee1a1ca03478d0a4413714173087086a467ebe761165be0f19cc77fe407fe67b3165be0f53e6fb999cccf7122a6b7ac4903575f499355d4a11faac81d0873e095d4609ff9c41f8b041fe845f4e09ffbc296e7d0abf828adb47a9b8fd424e717b25951c1e4b973515b671d67415a5c517d3674d33db306bba9ad2e1f1745953511b664dd7501a3c91296b3a567ecfdf7c876b4d5f03f3fd92c17cbb0df667bed751e6fb65ca7c9fccc97cafa790c1329441aa63375074be6aa073ad4f3a375274be46d1792a273a375181f8ba21106ffb0cc4cd14fa6f04447f0ba5f5370d5a2f1ee24feb5b29f44f53e8bf9513fadba8407cdb1088d77d06e2764af8770cc23b0df527fc0e4af83306e1719fc2efa4f07f97c2ffbd9cf0df451927ec0943166bb3dab858bb9bd2e25993168962adb00d8bb57b281d7e60d241176bb3dbb058bb97d2e087260dba8b44b1b6440e78d5fbeca9ba8f32e01f190cf87d9f067c3f65c0cf5106fc7c4e06fc0015881f1b025137cc5f201ea484ffc420fc399fc21fa2a21bb6170a522e3c4c69fd3383d6f387fbd3fa3394f09f1b8457fb14fe0885e417a61400bdfae9fbe9537b7283f5d9bbfda676f7d27f968aa0170c11d4ec33823e4709ffa541f88d3e857f9eca327e456519bfce29cb78940ac48b264223fc05e20b94f0df18846ff029fc319370e806fe6d3659469a6ee02f1a04e7cb157eda678c3e75e5a5b61da3ff9d8997718c1ef6d5483f461f5c576a8cfe71ca967e6f4a6d3e6de909937018ca855dbe020de57e8992fc7250c95f364986bcf0956cec3f4da6f9a4c9fee5ca53dbdac5fe83ac8996def2ff98b5e5bf2a2dffd034961f6ce536734c7c85329ed7821acf5729e3793da0f17ccd241892e99f0cc9f4dd91fe92e95394d6b051514a9508e69797c8e6508d9c96629ad09427ab4b793e7dcfbe4ee9f186490f5853c59ffc6f50f2df0c183bdfa462e72f86d8d931ca5fec3c4d69fd16153b904676a82aa28e8f9ad6f53e72f50cfc1615c8bf1a025937da5f20bf4d05f26d532021056a3f03b73e9beca6e92758dfa1befc8ee9cbd02677bd6af25b979bce6f5d14678d9320aa855f6f8e67280dfe66d260a8518395f2af66b982805bebcf6dded877295dfe6ed2656496baa4ae47ec47a7ef5186f7aec1f02e3dc49fe17d9f0af03f02e609cf5282ff1950f00f28c1ef0514fc438af3fb06ce8ff8e4fc234af8bf0cc21bc6f813fe1c85e4df01913c6f120cb9cf07d9084ed318fab14930b4433f6cbde16987fe47e4d20efd0985fd2303f6e563fd61ff2915888fa9407c9253207e4605e2bf86401cf019889f53c2ff6710fef8387fc27f4119e6a7c2909dc27cb832819789a996756c9d91c7c51459e0ed56bf936721e4c933b7f8992697bf6894a5be9be536893ab9404693c0d3c0dd4e2598d0dce0a919e8ef4067925bc46e6bcdcef364665eedd3b5ef058a05ac8e67dcb009af35e7d63213056c624af62952c33a819d6677c822282fa38442e769bf33377e49190cd44853067c7c1accaf4cc2214975881149aa632c9724f56b2a109d0c8188fb0cc48b544c7736c53438939bbb4837aace5598f902ad0b7789a274711a4f7b778a744775bb5513769d9c02eaa565e82ed4e47bcdd2ae9a0da968abd4b01e75c0bab2eb55ebd48f7dfdc6402f5fae5f1cee1e6ceeec229093c31e6c3158f62a39a28534000f077763b418b5315a7a1da8f6fd6f4d0447854d70b1cc77b7e648b09bc364ac81204db13b4131931e14c5df995231d8610f2a72538c3c461af94b94f09e6d20fcf794f05e6d20fc0f94f0de6d20fc652ae7ec63ca39cdd2e99ce5154a7a5f937477a22d94b1f939acd0f147aa80e96728605e9ae0af80799512dedf207cee447fc25fa3280d88056b4cbc4e091e1850f09f281c830c3846f9c4f1679370c8650667a3f57e5af01b148e21266b0463cff745e54d4afe50937c583332752877952cc7f53240893bfe864bff426932cca409488012c6af15bc457d65b8e92b3d84304e0ff3f3c5bf1abe982fb720807561c22a67b3d976d85cc68e8841a9990c46d6a48de5eb4859be0e4e0959dadd7909726f9be20a4e47c552770f3e7ad5d95d6f1df57c8794a8e94c47cd3b94318c361903ac3f0a7e3eae27429df397ded4bdd6a7a9ff8dfaee21a6eff625bfbb5b3535fd7cfbef26733c246c735c241b098d3998e31807d1440fa2198431e611c698eeeb9431be6be226b7e5d81c2237bc0b72b95cbbb3d6b9b24636bdf43ef5fe998e8df95d4e7d9c243b3e25e4b9ea4751ff8729a5c020e4f858c041c87f5292270495fc1e25796250c9ef9b2443ad64522cf82e30ffa232a5c9012b5effa678c483f2f880923c25a8e40f29c9870695fc1f4af2d4a0923fa2244f0b2af9634af2f4a0923fa18c6e4640a3fb2fa5727e5095ff67920c7583826c544eb37bd4a794ca3383aa2c6204e5c280946326c1a0f2aca02a77a024170595dc91923c3ba8e44e94e4e2a0923b9b2483cdcd0968735d2895e70655b92b6573f302da5c374af061010577a7041f1e50700f93606842cdcf46f0abb4e09e26c1501f38a20dea03bd28d33832a869f4364986e78fca86479af1e23e14e8050141f7a54ca324a069f4a3042f0c28b83f157b8b82c6de002af616078cbd8154ec2d09187b8328c84b03421e4c095e1650f0102af696078dbda154ec95068cbd6154ec1d1d30f68653905704843c8212bc32a0e09154ecad0a1a7ba30c92f3f39cd318aced17be77745bec1c9dbe6b62753671319126369a8a8b3541e3e2109364584d716d362a5f400b1e43d9e53101ed328f125c1650f0582aed97074cfbe3a8d8ab081a7be32916eb02b29840095e1f50f0444af0b101054fa2206f080a7932a5f27101558e53828f0f28780ad5d0da18b0a17528a5f10901359e4a69bc29a0c6d3288d4f0ca8f1744ae3cd01359e4109de1250703e85a232208a024ae3ad01359e49b50cabdaa0655848e1a80e88631685a326208e222a8bdb16348b9b4d81dede06a08b29b57704557b0ea5766d1ba83d9752fba4a06acfa324ef0c2af9300a485d1b00399c527b5750b5e753927707957c0495c8eb0326f22329c10d01051f45093e39a0e00594e0c680824b28c14d01052fa404370714bc88b2b796a0f6b6986a4eed09d89c5a42b13825208ba5148bbd41592ca354de1750e5e554436d7fc0865a2925f8d480828fa6209f1614f20a0af2e90121afa48a9233daa0285945f13833288fd5148fb302f25843a5ecb303a6ecb55475f19c80d5c56328c8e706855c46413e2f20e4728ac5f901595498ba1cc73aa731d8b8c286054936aa0ec4b6eb74bcc0c4cce80775610cdc58f2859f454972d197f28f5a678a76889d03d9443b684f085e6f120ca717c5527d2ff58f1fdfcb63a95cf2e236c8253750c22f6903e1c751b9c3a5417387e34d92e1f9cbb289cd3483331b4d82c107f9f26c048fa4cde4044af01501056fa2205f1914f28926c9e0aa7f55362aa771d5df4ca97c755095b75089f19a364a8c95a60fc0aa53d766c3e4255af0560af67501615751b0af0f0abbda54e08d734e63b087687b38faea02c39f53ef0d59176237ca426c784ae8b2d1812a986aa81cf8a636c881b751917f73d0c8df4ea97d4b1ba8bd83127e6b1b08afa56a96b7c50c730a16cbd332c758cac562b1a2755d92d5025686394546f04e15f533e4ec8352e7fe1ae7ce6e69d270c55c7f310d09c3d3d8b4c0f0eb853b99d9df12e02751a1bcdd14ca0b5a43b9cea94941a27313e82ef977a95a2bb6514e9b76136869eb934b5a97024a5e6ca051f12817ee86888b448b0c17c84da6979000cffbd38392542160dec276793799294eac5edeeb1d397ee7a8eca448df41d913fea21ba659ce3b2ead7a2753dcecd846a38c7337b4156af925afb68977e9eb6d654f755428ef3485f2484f283173379c4b85bb3960a5c1ea936308df499756f05b7e42b68b0ad95da6901d9555fc95c825076a859ecb113ce61277fc846d3715b6bb4d612bf6846d958c9d1d2a6470b6b7dd42524f85e41e53482e0d393f4bbc038b4bd43952f70998d69958b3aac9879563767428a02c6991d50c9ceb4105abedf2b6068afabd26ea2559a58d95c25dfddc865ced642a7cf799c2b792d1aae0eac9f233102ab73a5c2b3f5debd4ee2bc99c2497586da4427dbf29d447a40d35ad69990c8bbbc88a1b465d1ac3d52a4528355de41e9b4d54b81e3085eb38df35bb727927b96e6792e05e5bdb9a0f343ae501347582d4047389e7668ac783261e2b4229b3b94bf3162acc0f51f5147f36a06d1826b9574941389efd5a849f90eda142f6b029648711215b27d3679daa9bb84d6ddd6a59af5271754a6cf0b4514ea142f41953889632e6be3a56dd99e2eee236a914720fe95e2aa48f98423a5f50bde4a69c22390478370160b25cc672a36c0d553925eebe360cd53e2a549fcda64d90fc5d5c43582763a1d17916d2e1f634a55fb28cb60bd97e2a649f33856c51c69c33bb56019d87a66bb3e69a539e4a85f1f3a6302e236d126abc5b9d877458dde53f12fbbba4cf4bcc32dbba243c8d0aeba3a6b0d630b71e9ae52e1d40c96d1dac97d65edb9af3b44d7b38174ea7539cbe60e2b4aedd5a59e90905e77006c5e1311387853ed3860d29e24c2a845f3485b0d46708f5a685e618698ff09e4585f7715378cb182dbb2987ba465b10389b22f0445bd541dcbcad04d540f843750e15aa2f513d147e43b5543e911a43de3c277bb97ec2772e15be2f9bc27778809a63b32c8d60dd996daa9d4787aa22e5593f613a8f0ad393fee2cc9bf7e06d2432591e67e9713e15beaf50e1f3d36674c3ba4cd523127761c4237dedb0ad6a8e1750e1fbaa297c1344fa5ec10a8730879617525a7e2d7ddf9e9f5828cf2916386def0015eaa74ca1a63789aa681daac7794462d16e280f5b8c75b1dcfaf72fa2f4feba49ef79195b5ca5726c107a1febe492cd4bc42eb9b6566afb375d0ce4de82bc980acf37a81a64fa3402ade1b5b256d5642857b3194b80dac8b6360ce1255408bf994d1bd93c36502a6d0ffac12b551f556a7c85393e702915c6a7a91eaa6cfa01b209656e3946ee21bd8c0ae9b74c215d9e556c7a477adc74a8c3dd9ef17a3915da6f9b42bb2163bcf2f68c73f7995f41d1f80e354aeca7ccd04e5feef2ebd01e02bb80d6419d6c2d561aebd689a5dafd84e44a2a24cf503d926d1d12a883e225d2bd21c3f7fc84ec2a2a64df3585acd077b95e2b373aa856e3d7b01d817eb2ade2e66a2a04df33856096cf1034c9b639ecdab583310cd75061f87e5bd4aeaad9f4be96d2fb5993deb37deadd225b82ee6818af0d5d4785e307d41898391ca9730ddaab2d7c3d15a21f523dae99fbcbb2a96b64d3ebe6bf672ef712f9068ac38f4c1ce82d3ee9fe0dbd06745b959a37521a3f67d27852c63a446264b9465e859cac6dda5637519a3e6fd2744e9ad4efb5f464cd1b64fb24d143cf915e6ea6c2f2e36cbc2da91af912cb6ae3b750a1fc09e5b9e12f9f737b8f52efa67ae3e8e5e8e9f84c955222c7fea047c44f986fa5c2fc535398277a6236f14deed4741ba5e7cfa89a18557ff7eabc4ce99c6dfb27d73ee5dba910fcdc14821304df5888eec54c371a8a2d30db94a7dff143e50e8aca2fb2f166d05ff493ab244246a5b8b6c94deea442f6822964c7b7737cfb89e75c53c05d14915f66d3afe3b7ae15bc659f7bdcdf4d85f457d9e4568b64acba31d88cfaeb5d2b28164519c267cac9e02d3f21b8870ac1afb3f741866ffa4999387cd4f5b68aa17ba9f0bd488d53a4afd1247693f0eaa877f3a0d317b51345ba34995b697f1f15eadfe4d23feec66ab9ec5971db6e55a2bde75edc4f85f0b7d9a43c33e1dcea09995b385d9d7fb1184c0c5c22a5b8a30df5f21da815e6c30626b182d69261466b8e3f23a974485c87efef726203d244456bde0e1323d34bf89d03a74b07e1fe4c56bb57b905626c9bf04ebc5c24e5d7a9fc465beb0c49c8f5d18609a5339c5a60ad7c4b4f21cd140a532937039573387499c3b48998121a939be261590e69182e3de842fa12c4ea5815ab1df2a1f21e9b9aa33565d6e2f7f0b58e661b326d0b9a481d26dd5d01ab55ef41acbf6a6ca5eff0caf855ef42c0deaf4e9702745d30a3b87528f99bc40d97a6e63aa0360a7758a69b636a5d3b772880d8f8032732583465b38c99b5f2e3f49c9128607ba95302dbcb9cd8609ef96259556e70c0b9ee90ba98a600364502e1ebb104c2573811c204f6a569c636a2006bf9f804ac3f72c282edbf75b7c972e9fe522ef0bed46bc4ce48007bb45b02d8ab9cc0060977bfc10291f0ea8c32b87e3d13e05ee30437c0000e04c2a02a38b9b4c8abd59180b64524a0bdce6d6dc9c973a9f3bb565541b4179d6b75510017ef9500f7274e70b0172fb883655b864601deb5a804fd3327bc9e28a9ae49eae18b02a651a31298dee0c4d41d614a4c7d8a02a203431288dee444d44b86c4ad7779bd64a200aa1baa87fd85135417694b4d91cacc3bf54ec0798b130e2c87baa6b525a9479c5dffbb32593ab608987904e5e15ad5271b05808fa39ceaaf9c003ba164180530cf8e4b80799b134c379485839ae09d1005403fed9f00f40e771917cd26f4b328ebfe1b37a23572c434b17e57349a31a7a1fce7ef6125333d4d340a806e1d9800f42e2720589d56b7f396c89eab2aa74cd38d13f0a1af964d97326961d5d2deea9c0f460122fc6888ffe084082beb6278d0e90ccb5fd4b42e145d1df116e020d40dfd4f4e94bd559ea6ed6d9faa6dad939d3451407523cadbde0bab8b067a1cb0138cee758852adfec3ae0970ef7377d16070780e7989ecb48171e9c46cf928c03b0df5a6fe8bbb61ad4bd4c4946877218628807a1c5560ffcd3dc0b14a26bf9d9e15be163b8f37ca2f4501d8960e09601f84dbe59cecd6571db1fcac0e8d0c7dc83fc0015589c5f2d351ae683cdb3901ed3fdcd6b6448e61b7c88f2796d84b2cb9d8e4d4e16a9def4501dceb08dc47dca3dc78a5eb280ea3816f9986f531ffa0adeb8c522fc544bb1d301f59d927dc3daf650eb44522fbd56aa300f000aae4fe9713605f2920dd34d548e0927d695d3b7b847b7de473f758f4c798f6adec2bdc2e800679b5595557927c2d61529e759aff2f867c25e3397707c533160bf1acfd30e2bec7d0e3397aafc5b3aaa4c703f6efc47db824c67d9518f1acab7e715ff59d784ed96fdc578f44dc577d3f9e95bf58dc979354dc7747804967da2d269e32b61a4fdb7a8e1b0785e2c63eec38e103104fe3421127060ce2193adde2390d83c693c6fee26907e4e3195d27e35994677162cc289ea51775625a82793a41014c4bf834f6fff78c8182091070074017d8d948fe2deb32b10ecc9541b0697782089438e997db9be9d4313c3a8c4ad1217993305d8b3169d33da99ed3279b00e652d7e982bcac3ad884b3309238e7229c1d6dc2392b923837219c9dc2c0b99d048ad5df2c668b623e9cbdb8703e2c12383bdb84b3289238af4538bbd884734e2471fe09e1ec6a13cee248e2fc1ec2d9cd269c3323897335c2d9dd269cb32289b319e1ec6113cec248e2ac44387b72e21cac7056a966a577890f577577f988023e909db940be8d40f6e204395a24ba4cb2edbe82e71be5b3d1abca2f40607b73821d23707f56f6fdb951867b0882db8713ee1091bed989c54149cf86b22b17ca4f10cabe9c28fb2a94c51ea06e4f273cc4066f0417bcc710bc7e61c09b1b3e3c36cb7b0ec1ebcf096f6886323c3911b3b6cdd960be83600eb009e69c08c2fc1b8239d02698451184f9170473904d30674710e65b08e6609b60164610e61b08e6109b60320e5db0c17c13c11c6a134cc656391bcc9711cc6136c18c620be715047378187d45d012a7bc30426875778f3181fc2d02398213e4a10a649df3509d3c9a7766f7b3bb1b6bf7dc402edb5d8b0684477222ef2191ef909e49aea7d476092f7a7d43bd90958e6acfbea1e4759319ad6f3f17caadc8fa4673a29c9c92e02ba5b0a5426f4eb8d0f90fd6b947f65eb688744b1eb3c2662ba6a621d8878461b7d995f95144391265016338511e62c802b2dd228515ed055c680f41569ac76da525d211bc5eb9bfc20ad67a0f797094d54ec1aeab75f40aaa4ec84ac772a2d47302663aff77093d80ba5dd546a3dc857c2642382e0c84730e3a845f4608c773221c2812ad237df46eef1dd5f1c82710c40936b9c1b2fa1eb1e11c820a998936e164759661c3391fe19c64134e56572e369cdb10cec99c38fbb596db0507d1b0ef6b28af8cdbe3bb312f822807234b9c12064aecbcb5d2a9842f53b3d5dccd864328c1d950b620ab3c94bfc71d77b16d163b25ba857296d94e250a26eac1e4b994b51e22e016d31bc19c1a46fbbb59cea96d6aed12d653f0f4d1d47b349373cc920ded8d08edb4304686b2f52366cc3fd9bc880f4330a7db04736e0461ce413067d80493d1cf830de64c0433df26988c1e486c302723980536c164f48d6383598c60ceb4096614a7b11421988536c164f4f360833916c19c65134cc6711e36984311cc229b6032fac6b1c19c8460ceb60926630b880de63804b39813669e48ed3ff2e771c458beb3791ccd427d4a73dad3f5d0db59cc988bb275154f44b63ad726988ce53b1bcc1908e6bc30fadda1b7738fd0fb798734d0cb866f30c2771827bee1085faa2317084bccee8df240c6f711d0c3c3703e2838e89c0fce4008e78781b0f8a0433817213cc2eeea1063af265b75a81c55878e0ccb3d2631c4864789d807d7d8062d4e47367a943daead519c00380fa15c1056299e6949d828bb6ecd46404b6c5a98677624bb3aee433817da84937556251bce4b11ce4536e19c13499cbf463817db84b3389238bf86702eb10927ebdac46c3897219c4b6dc2c9ba982e1bcedd08e7329b70b22ef5cc86f37884733977cd33bbad19caa46ab0390463cd73291750bc3f5269188b47cdf2b4df43e8f6609b87761282773427bc9122db297ec9f37d19dd115ee5825a8a3a3b56d80895b1c5ce06753982bad246a88c2e5d6c50c722a8ab6c84ca58c2b3411d86a0aeb6112aa3bb021bd48108ea1a1ba1320e05b341ed83a0aeb5112aa3b3021bd41e08ea3161382b40d772bafda8c2984f146382f93b918059c6097396481df2489e04b3482476a1720392bca755f2967c89adcc2a64f340f7fd335af4342e8b1e8122a1dc9ea986515c5fb62fca1c2aec9dd2c5e871c7363afa6364a5ebec59ec8f75e900363bdd8b60aeb7096614d7413e1fc13cd62698515c07b909c1dc6013cc28ba41ec41308fb3096614d741de86601e6f13cc28ae83bc1dc1dc6813cc282ee4b712c13cc12698515c07791582b9c926988c7ea16c302f40304fb4096614d7b1b910c1dc6cb70f73141791fe1fc2bb85136f6f85d75d12a84eb6e25dd9b59cebd8b06d8e2710b8cab0d791cdbedb238aebd80c45fd495bc3f2635e257b34777a7a3c173baf35ca2f46d98f7918b2d52a4ea07dd226f2263e743db8d07540e8aadb737a42f4970d188050d684314713f65d3d78e668ae41f8b6d9b170b93b7ad4202dd61d1762b5cc97b8d056a20267bb4d8ba0b23626d92cb523c2b9c3269c8591c4598470d6da84735624711e83709ec48973bc489d25b7443a3454c9bd0b5c3fe535ceebd5029a916512acbb7f415d3835cefe5c90fba3c26aa74dfef5b323b94add0308679d4d3859b71d65c37919c2b9cb269c732289f38f08e76e9b70164712e73711ce7a9b70b28eadb3e15c8e7036d8847356247136209c27db84b330923837229c8d61f57596cb5a658b23b944c08e59ebd5fcb96a397f2e14e75ab6eafd09086853582b2f1d5cfec9bf47089bed718d8da2c74757d4d86c09cb6f7e8fece58449b1eebec2faa1a82f67b505d9e59e3026c51e4c5beb1c8ee09d62af93366319ce365e792742bb370cbb9c13be5db2f5bd7f11c1db1706bc79e1c363b3bce711bcfdfcc5cb0ec31a5fe50e932a5125b4bb28acb800bd97d1ab39f644304fb5d7a383b1cf9dcd4e07a06ad069f62cf2174587ec38b2d2d3ed180636ed5fcd88966ddd9035c84acfb069a08dd573932d3f1d87709e6913cec248e23c1ae13c2b8ca66476adf2c248ba68af4630cfb60966145db4cb10cc736c8219c549aa4b10cc736d8219c549aa2b10ccf36c8219c549aa2508e6f936c18ce224d58508e60536c18c629be82804f3429b604671c862018279c02698519ca47a048279914d30a33849f54804f3629b1a94acc3166c0dca5e08e72536e164ad1eb1e19c87705e6a134e563f23369c9b11cecbc2f0e3982d0eb6ed9f6e1609849787e1e99eb9ab3875c6508923b4514ea5669d3b742197b3cc3a64a75770421ead20d7390f01e01a359520318120391bc0be718c60d9a6101c86c05e19c6c47f0d56ef4b983cce99ae3a15c59a691ce1bdaa3d87e4425b1c753f17ca3fa37cf66a4e946325ca52e7a132090ca655ef51af27ac75b3da756ba15cc573a7ba0f8ba9829322e35a0b6c7581ee08f035f638244631d9ff0ba1bc9613e5a00c287548591d1a467295fa27a0dcf33abb57a561ec1d655b956606c27bbdbdce8a8c83756cae38bf4219c00d61640054b99fc80018f351b60ce0af08e38ddceb26ad552d7aedd05d2a2d13927df4caf27e08dc4d61d85f41ab0d56cb06a93bed3aeaab817c0961bc99bb6319802d961f6ed7ddb64ab960162298b784d175e74ec2da259335143d07d7fca19710ce5bc3a8ae17a469b547bb0bef5984f2b6307a418b0eba5ed01a84f0f6303ae8c01a97c82a4f8b5402766aaf9279e61a718aecf76c74ee417db3218c64ce5604cd4260efb0c7a93b8a7e4a4b11ca3bc3980453e4695446b92a74328277974d33d26773766db0cd48bf1de1bcdb269c4591c4792ec2798f4d38e74412e7cf11ce7b6dc2591c499c5f4038efb30927ebca876c3817219cf7db849375a93e369c7508e70336e164f59f63c3b901e17c308c05786153f1836701de1284ef219b1cbc58371063c339128df13c6c134ed6a92e6c3817219c9fe1c4d94d0aa8915b81360ad7c52b7ade455d50627e8413d764e1670f56e8376a9122f15eab402d04a783122ed8d311eccf86b526d73201dd6ad0f9b65df6633646bab3ad1e21fc9c3d2e30519cfb3b08e5949fe7443958c0d06d8d1a79749db4a80134c6bd31d8f2d06ec8261f0d63ef2048d607c300d96f10b82fd8ebde12c59566ae43681fb367efb559919c8bfe5d04f38b36c18ce218cf2f10ccc76d8219c5b9e8df41309fb0096614e7a23f83607ec92698519c8bfe3482f9659b6046712efab711cc276d821945d7ffa710ccafd804338a73d1bf8e607ed52698516c91bf80607ecd2698515c8deb4504f329bba7a630b689d8a6a614a0dea3af73f71ea5eb8873552f96ae5c8cc511db06ca5b10c86ff0cf9a4c06e9f61c4147c76e71b4ec716f483be01bc5fd563ba28ce09bf6f86746b1b9390da17cda264784d99c45149b657e0ee1fc964d388b2289f31684f3db36e12c8e24ce9f209cdfb10927eb8453369ceb11ce676cc2c95abd67c37936c2f95d9b70b2ae5dcc86b31ae1fc1e274e38d1f378a337acd61761fabe4d56379bb39398cdeaee40389fb509675124715e8470fec0269c732289f39708e70f6dc2591c499c8f239c3fb209e7cc48e25c8c703e67134ed6f14a369cbb10cee76dc2c9ba14391bcee310ce1f73e21c2592572d040e2d02fadbbd6b157afddb19fb32d9dc5fff8bb0fe8413eb240fd6ad22d5332e7b1f3a46d46c55fde351bffc4fc370d69e2b0eb62527be8aacf56761f8776a6b6d92f60759c05205afc6386a14dd55616723ebfcb93d7ef05174fbea8e50fec25e2f64c64162b63cf4f3280378218cf53c667a6c35ca9bdace47f07e69b70303a34f1d9b03c35494ec7f15d662677a752e53128f7659ff0364adbfe6c439c153d6d7093cb3cdbcdcfe32f572686b6c4fe4c23c0a59ed8bf6383344d141ec6864b1bf0973617d48f8d59e1971075f53f59f08ef6f6d9ad7cedaddc786b3134af8bfb309276bff141bce6284f3259b70b2f69eb2e13c0ee1fcbd4dbda7b339e7c8b1f59e7e06e59d7fb00967512471de8070be6c13cee248e2fc21c2f98a4d3859170062c3b916e1fca34d3859e717b3e1dc8770be6a134ed6f594d8706e45385f0b63b1b499edd189c7d6c87c1de17b3d8c1e50f8f03669895af66ef548f4e0c510bc3fb5ff1c235dc8446fb4a827aa9effd91690511c767b1f59e41bb68064ec7d6703390759e49bb680646c79b3819c8940fec516908cc3c06c208f4520dfb20524e3244136902b11c8bfda0292b1eacd06b206817cdb16908c6e086c20372090efd8029271c88c0de40e04f26fb680645ce9830de47604f2eff6b86f4571a1298150becbddc24eac460c8a36490edbe5f2a5f05af47c8c604048c3fb47189b82257cdfcc9e1a15b2a707d06e93c276f136142fe002bb1381fd2727d8f1c2eb0ee37a18251c5f41a0de119d4efa515cc9eb5094f4df0b7392810b147c8e2023586c2c9ca2bb22cd7a84f57d7b7c8ca2b83cda04940dfc2b0cdf625cce679fc332a265cb6117232bfd779889bfd651623ddacd050b0fcdc1703f17d61311d60fc218b0987d108df63c8492fb87612ce0975db57e66245743cc4796f81f9b6046d1d9b510c1fcc82698515c0f7e2282f9b14d30a3b81efc6404f3139b60467181bef108e67f6d8219c589811310ccffd904338add746310cc4f6d8219c5f5e0f3104c58dfd41a9851ec451a8e60c66c8219c50e8f110866074e98fe67fd3016416cf32afa239c1d6dc25918499c87239c9d6cc2c9ba610e1bce2a84b333274eed1b0cc3bd07cf46ca478904be2e9cf806095873b352ad8b04a2763b8fef701eaf975dc47803c6e861ec8c3076e5c438462426f2bb633f9b1d756143ec2ac90386864b04cce985fef64a470024f06a11e5fd568f4170bb71c20db6380a63259e6decfd5684b63b77f24f5718e990b20e58c036e72c1837a242a80727c63c03467fcba430f628b12d93321de1ed696f06c038c0c19601fc146500bd38d18e9568974bfb2c13303a59a38aab6a294a7b87ec941100765ce5fced8a5fea1c6b1cb1d5112cbc7a20c0bdc3c86129478645d262995742cce3ca61ff8e30f609a3830457b0746d35517f8d76856a1082d99713e66803cccc594074c12e4460fb7182d5eb75ce1207db7a9dd72384fd3911fa73fc8ae210f11284720027ca713e50963bdf0421cd628df3976ef137f1164be3b88aa57711e2819c88878b6407b006d95db223adcd4671206419aaea0f0aa37734fb457ca2b8efe06dc83e07db84b3289238cf413887d884734e2471fe0ce11c6a13cee248e27c14e11c66134ed63179369c47229cc36dc2c9bae53d1bce1d08e7089b70164612e7b108e7c8309a9a05f2b77b8411a772e1b6e7a3db5a3f11211c154653333ba79b283ad0f643d5f6d16159a3dbdc04417b952586d0f1f12a17c22791351e1246473120ac699d4bac6f47bdffe81b08e39870c78a0ef675df8720b479f60ec34571a3a72b10dab161e49f85075dc7f17884705c188e6033dbc3118c6d8c7d34c2373e8c01b6ecfadd0b23d9f37e378239c1269851ac5bde83604eb409661427675d83604eb20966142767dd85604eb609661427675d8560c66d8219c5c959572398536c8219c531c90308e6a136c18ce2e4ac2b11cca936c18ce2f214f72298d36c8219c5e5291e4130a7dbedc4cd98f0d91a989d5117f18c30fa3767b6da6bb5ec96733d8da23e61eb2bc84af36d1a469bcd9983b20da37d16e12cb00967512471de8470ceb40967712471fe08e12cb40927eb6417369ceb10ce5936e19c15499cfb11ce229b70b256e6d97056219cb33971ea550f0b3db5d0288ffed42278c561f8bac3e8f96201b3d71b3cdb2897cbaa7aad1c194a9ed7de146977993c84788e4d0b57b00ef9b2e1ec80da43736dc2c9da49c7867312c239cf269cacde9a6c3857219c87d954b6cfe61c29622bdb1f4479e7e136e12c8a24cecb11cef936e19c13499caf229c47d884b3389238bf85701e69134ed6f5e7d870ae40388fb20927eb82696c381b11ce0536e164f50161c3b909e12ce1c43942241a9eeb6463b24a363161f584c50296478115142a1499101a9a5d634c48ff80902ee4443a45782755437bbedae1014eda3a9c09cf786ac4b3c4f9ab510ed2b13a76dfc805bc1a55f6177102d75bea51c3c8c985151b48b62df5c620cb5d6c0bc828ee713d10815c620bc828ee717d1602b9d4169051dce3fa500472992d20a3b835f32508e4724e90059ed2bd859c35444fde5ae43cb1cbd1a75e9e4150432aeb2fe42aeb2b50595f1a86cb58b6fda48c43766cbda49f225b3eda26988cfe776c3063c83257d804338afdf7ff4096b9d226988cd57a3698ef2198ab6c82c958916283f96f0473b54d3019abf76c303f4030d7d80493b166ca06f3430473ad4d30a3b82fc77f10cc636c82c9389f980de6470866994d3019e713b3c1fc18c12ce78449af7ebcd4f95dabfaee2b1c012038faab1f5720b0159c60ddddb0573a0fb84320788a4cbbad20cf3671a62bc2bace9e65aaa238fbbd1b6a62aeb777051bc6f29e6d059bfb91951e6bf7ec39c656135b26300559ee064ebc0351a1b547164ae0c9ec6e2315d2dcb9fd5c1037231b3d2e0cd7075cf253c5157b79cf6693a310cee3c3c84d53937c36f96914d703eb8d92fbc630ca7c6ab429b9cc8fe252185390959e1046753f97329fb1bf9ecd462f466037d90a368a7b729d87c09e682bd828ee76780402bbd956b08cb55336b0f908ec165bc1328e3cb1819d8ac056da0a368a15ace108ec565bc132f6aeb2813d1581adb2152ce318001bd85310d86a5bc146b1e7aa1c81adb1152c636f2b1bd83204761b2758bd22f36cd10e2b32b3e13b0de1db6e4f1f4014d7c92b452877d834399c751d1db681bed1a877aad6269cac0bbfb0e15c2a7176edec11be3445f8221958086e9548ac2932432c13e09becae3a52e59caf94c54bb3d8e2d8d746e79fbf38d8e4fc335d8fc985639688bda2415e0579d552f62ee72e68d6240a26398f9c0426d14599445c662f250ef366e719d8f617bebe4f940b77cd9435ce6f3d1cde2291c4e50a7e89bd96e10bb0fbf20ed128439cbca64a3cd64d72727732817001c0b8d255ef6e52aa32b65a27cc95529346e7994ef23bae09c563bdd1991ef12895c532680111148bf5577102faac9261a974c25029dca977faadfcc9ce63b162e7975bc0cf682dda67288ff25dea4c5fcf2c136224bdb49d803d664e89756d664b9942e49a3fbcbf4d8ec0d748a9a519439a397cb45df64a132bf971888b8339fc7510ef2adaa5990e8df574fe5ae7c4bc2b1cf69e6974fe06a53e58d84174fe7faf5776dbeb220300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/45acb4c58d6dcf2409b587862862df34.asset.meta b/Assets/SerializedUdonPrograms/45acb4c58d6dcf2409b587862862df34.asset.meta new file mode 100644 index 0000000..dafe874 --- /dev/null +++ b/Assets/SerializedUdonPrograms/45acb4c58d6dcf2409b587862862df34.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a0288be4f9dfceb44aa57b3f068e483c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/4715e20276be3b141a6a216230cab4e9.asset b/Assets/SerializedUdonPrograms/4715e20276be3b141a6a216230cab4e9.asset index b13f49b..3aa9b4b 100644 --- a/Assets/SerializedUdonPrograms/4715e20276be3b141a6a216230cab4e9.asset +++ b/Assets/SerializedUdonPrograms/4715e20276be3b141a6a216230cab4e9.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5afd72db44105f3996bfd32440088502a52dc4853452da19f88f99346921434932759c7f3a8ce3d44a30d8a927361086e105185e88b7e2019809bbab537d92ee2c3bf63538d41a4bd67decc76ff776f72e4939801f6b056ffbf014366015aad080177082bf36f0d9c6cb7f0bda77e1149fc778af63df0adc4c98499f65eb1dbc6fe15b177a38f327788ecf26f757c0c3df5b38d7c3376a3dc2af87a3ac344eaac226ecc0362c598b0924f6795257b459a49795c3fb43f8157b3d168a9838dcb584b70af674b9af8d4207e39ec177ac561bfb9ee39c536821cd43a698fb9be6b24ec10332f82d46de4bf8b5cfcfcfff11edb678924679e9373d67c49c59f19e92da2df1a5fe6b91f7b9088f8278e6251ec13317e19195da037a328f4c94876db135be467cead0018785bc3b82db0433931d8648675202cc6566db43d3749080c26a55f6891e3c80fb4aab5db74a92dc1b7cafe3882613256611167fc55890702dbc3cc9e5bad8fe157b2c395d137b56e1093e69d601aca1133d8b50d947b62d745b0ff6f0de617a0728767c64924ae49ed1394f91a6bf7adad81200dac1f7164b58e1fbcf2ca9c7d26f615b8fd7f209aee687f83c636e71dd4ff1b78ae79e804c2da37a11e9dafda51a986913b521e91d5e03af2d721916e1b0342f9661dae168f547cc12af31f4838ccdc9c9a7b1e6a78750db7d7038071cc4101c5dc7b886817f0781b5822be81becabe3788fad44edbb48b18ebc89de3a73e807e3f08c404f356ae40af758bbbef5edb0ba0fc0a1f461dd48507710d844af6cdd9172ccb86ad976da25e1a3e6b254e6e21459316aae30e51dd4f90711d206399fda2899618ce26644ee2f2b3269127f1d7a29157ab9578d9e3faec9e346472fc7a546183d8b8abadfc085df71da2316dbe3c10d0db0790db049a2e9809d5100eb6645a517b3753e22120dd4104eab08d36b7118c2b69eb0ad235c1a93704607c5ec985064558473a2128e794421e411675c44b23f4439e6f51c733a55e6c65425af037f7e4cf00b3ac20b63122eeac07f4305fe972f334138aa6f03edfe7ee105f5a35866ab50c3eb987b6a5806bec0054784e45c412354f4745965142397749abda9d2ec0b8d663a497cedaa3c661de9f77847f33dbb6285df82a298c6c9c1681f5b9b233aecac4e97b754ba7c7e215d024b35b860ef8851db7cc4e0c5b49003ea289a5cd369b2a8f3371d575feac7ec736dc67b908ce11e39cf4e4ab3399d666fab347381ce554ec41ef811736bf2c66913bf873828d0f0091ff544a51ca4c1600fcbe2657162f513ea29cedce519f4d6058783980bc39f2b10ef36ca431bc23d54f1902b89e453064ad3ba53862398d48633498bad9765c511afe16013a3d22e5927fde63a2b340a6821d21cd5af9aa674cc989911564d399c603ebba037254b715de6967852955406fa04829867d14aa88985e1f1692b1924914b52157f8f0904fbae091caf916bad233c0dae8dbb78d1276ba75c42ff5d93102d3044bedde4ac172ed6a701b2b204d97b26219bd742d6af66a701b03f19b0ac1d21fe7862f1ec62bbcb78e49de35c7786e2516b4fd468a148ccc5e27f4df21bb2179635d1a83ce4122c0fe577fde2409dd45d12e2fdff79de76296f7f4020148334c751e3439351a3c4d6f3eddf65fb9db0d2355cb1115ee39cf8e54371c31e46918bc48ebc146c6f9a842d2760abe3806370f1d79a39b8b2a6e0ca49707d6412aea280ab2d18d7795b5843e0a60f344b02edd66580368d9e969140bb6d12b48200ed28b481370859de14645909b23b9793020cc2662c05a425d83e36091b9dbf245547f2a1d8f441694b507e6212ca450d94fd0272ba812c48402e5fce523698698dc106126c6593b0c5abb9692c4c6624b8eebefa1c6b10326339360557e6acc1a5b5ff29f8ffdc27960e6dba17842e1408be058f8342834d569736e00eff29a8ff179ee1ce5307d34cde1dd3f96dc6527b696b623698c48e5fa5e938bbffd200ab38fcc7acabacff4ad44d9778b35345cbfbc43dd8c1c10d168a3ef6bfe62e7530ce2c0000 serializedProgramBytesString: - serializedSignature: a1fdffd5b7cdb802f5c14dd359074893c918e9048121a4831369c1f0e10f1c72f77ba35f8a24485aa42c19676fdb52606e5c6b87491381748170ea26b88ae009 + serializedSignature: b2a817fbe6ddd2dbab0a03b8e8d254c9a5a3dcfaf9b6d5f8a9af23ff1bc22099f45d4c5bda1798464779dcc7ee973b479b7a802a1ad3f5b371c177e7a66ff207 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/471c284666debf04982ed08687881498.asset b/Assets/SerializedUdonPrograms/471c284666debf04982ed08687881498.asset index 32e3039..5d7c260 100644 --- a/Assets/SerializedUdonPrograms/471c284666debf04982ed08687881498.asset +++ b/Assets/SerializedUdonPrograms/471c284666debf04982ed08687881498.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9c59571b37148035c62b98c5606c48d29474c3298bcdd2746f1396b4f4d084c3f6d0b4071c30ad53db706c8793bef7a9a77fa8e7f4a5af7dea4fe87b7f447bef1d0dc81ac9c3608bd834e3339a4dbabaf79374a591060259069b350dc12edb64cb6c96edb04376cc2a70b60cc732fcec2be7fe06abc2f17b08f3f06c9a4d78a4c46dd21a83700dae6aac0e299fb3033816e9f9162bc0f91aa42dc015de3d82bd00b1ac2024da612bec317bc4d2d6a887885d4a54e3f72cb4cb8a42b8c47e82a705520a33c9d2a334045bf0a446cfcaa0b413ef09fb8ecc2ac3b3034853652590f9942446f7038c4e987d08f1630f3ff6c11e867d54b80e72c062bc303fc6f9794ab8c6633fec31e11c8f0392ec015b36fb9b5f07f9715048ebe41711e2a08cb4f43ccaef8fd9369de9ebc81c52c88c79c8ec1564e27580a789f27315bf84646382f3fb5dd267b8451b2faacf88a4cf882d3fb02ee9936c379f9045b5ff4ba88f7976c2b2a4e05d76f166eaa4f46ea0283a8c016e93946d1d9ac2090850b4921d6a8375b6c0e695ad64dc8a0b7a2f5398871845123aeecee2375716a85c097e05a189d7e0fe17e421b09117e1c92c5b8723a6da6773d0689f48527621db12b88902db86f084e4ed83daee985e26a13b90d36c824cdb5b95e18e03f404ae4ba4e11685a7a46981b45f837b75f29d15f09e4b707c41b9b96dafc2b92acf6d8e4cada3da69e9eedbaed129a615b006b5cf52dd7c55222fa344107d789c37c360963ccb2fae9278c5d07632e8a8d7b88c39426635dc9b6759f2e59b2e82fe6d745ba8aedf36ef7b6cb1a92d6a3258dc37c982f312fef38f7f7efe35feecc750a3690b2c4bc3875b1ea635038bf23256ca25a1b909a15030878acaf82d157eea8eb7ae10bf1daf48f1fc1740987aa6c6022040db70f202f61244de80300fc94bdccfad43e23c74aa2b10d6617795542ecc0726194557eaa5b00e7740853b7ad5b8bdfd4b33dcd133bbce71e3a62618d310f4d24147b0474590c66bdf1a25e81e8839674b90f60720714abdeb7348af1ab835678a03ca1989a99a671ff19c500e27fd69a4231c5410ce21e1b84ac998a424eaa7111c5209c6dad4afa851ffc2e6121ed30b0fab8463f31d5079077cd13a913cc232f704257a4776e51dd1e71dd1e53da8cb7b0f7e73b01ff23cf11a07dbf69bb99fbca3babc875479dfe079e728747ce043aaf36589002638f38e3e348ae9344a34a3916b0b8d5e5ddec3aabcfb95342e63739fca2b9132db57e8d7f1d93149c9435cff9e1d5f91a764cfae7643497243632ee3bc55d0b99db80a61df55778d8f41c367cc7e59f20f70f4c26e3ca5e916bdf2d7d1ebd739ed748b4e7b4025186bf698b2b2c892937ac9833a95c75b54794827f8468b82133a16375b6531ac53f9568b2a8fe8547ead5595933a956fb7a8f2a8ce87bfaef2e10f184e3457f824d52a35f022cd6c884d69963cfc31b8883d905aa6bebfc8a7b6f089b7048c2536d54647e7a7af48e9ec9b50d9f70d73467aceb84d9c00b4c7d0e8ec8e68aa0e9dddda59cc557081f6ccfc26595100bb4e29b6cd03e780ead2aac02ef5bb45089f9275b2dde29b8ffc4ce4e587485a47e48e8a48c12091ad9689e878c8a97621872268e587d3988ed31b2a4e3b86395520ee32648516a1dcf3347eea4c730e11f859163a8b55925c85941b9402af6a2c4ba3861c53bd0da927d731ef32940bb6ddedb332f59e6a7f93e9a7da8f5cddf865675dbdac5095daac506ea275de36e9679823dc22471690a611c675b3f42d2cd51e5eaa812c0d76a62e599bbcb5785bcccd73b9c66b8ec916f0887c1408c0518fd72b9d679e5ec3cf1912e04c4fb661c5092bda03d0f790c6cf35f8ddb7188b8402392c8b774c020b3500eb0634b83968264da2e96d4083c703aa43dd00e92faa3f919024fc61db3cd7e5a6aedd3e76907ab517a01ede457987b2cfa557a44ed33c23d6bc8cd48c3217f243196d0d3beff0d51d750e3bfcbbfff3be38877df1bb0861d4e9bac8274c99f40929664f96d943af0a446a36d8cdc9f9b7b2e4156bf01aa98b187719cf1117dcebf455a03ce075b1de74bc6c1065c414cab08072c6244a670a17333ea23ae9c82eba3bf5f6810b99022776f1b326c1dd5634e7c6b745fd6ad21e18640c6d9f29b44302daeccb6cdea2f2469b77cc14ca908032671225ae6ec9eb74dd57f37a045c739ddba8e7ba10eda08076be73fa6c83fed1589f1d15502e746e2d5decc25a9a14d02e9a447b47811695a813bc0afb8a7f2d7add3aa48000f8bdce710306ebaa3137d02ba0bcd7b96e60a10bddc0b080f67d93689d8f6adc6f45151ea5fbeaa525c0fba0739ab8c1419331941101e5872651e28c8a3c7c773eafeabee61b14b07d64125b5ae119f5df1e18edb193a660f609303fee2498061bb431980302cc4f3a09a6c1f72063301302cc4f3b09a6c1218f31982302cccf4cc26c6d3469d0831aeb8efa05b49f9b44eb6f4064b0961a1b10c5d8b55933ce6194fb4c5820cd286751334d0767f6326c82db5f012dbe66057ae27ca37fbe249ba5ef6df155d1cf5733cd657aaf97e2779f614b5de34b6d2bb776ac01ab2c6d653d38dea454b2f489f275b67f89d97f7a4f1b56d3347d2db003256f0bc7cf76abf4df22aa1427f41f588a614029430000 serializedProgramBytesString: - serializedSignature: 94a99f51a512670487854b697050298718fe92d9f575b8ec0658329f7bed00fbcdc4b9026dd8113b1ebf234b998da6369ac454c1eb5acb5ce2414de348608f01 + serializedSignature: 269e2d27be516e93d2af424297ae9ef08463e55a112721f5c7d81632c911fc0f82bcbdcc00555b2f1fdab4fc6540fb33f19d4beb519e6ef28ef560fe6dcc0c00 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/47cd8e57b43f0b84cb9b143e25962856.asset b/Assets/SerializedUdonPrograms/47cd8e57b43f0b84cb9b143e25962856.asset new file mode 100644 index 0000000..1e4e0bd --- /dev/null +++ b/Assets/SerializedUdonPrograms/47cd8e57b43f0b84cb9b143e25962856.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 47cd8e57b43f0b84cb9b143e25962856 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e702c1b5409142091e342109414a5b1cd2628540bd1048809400690469a90b15ea46dddd5beaeeeeaebfbabb7bdf9dd999dcb37bf3dceddee6d9ccf2fee9a72cbbb7fbcc33df79c69eb18c1c66fd890db1fe9acfe6b0896c189bc74ad92ab6d2fad744ebbac2facfbe53cf67b32aebbad4fabbc4fa6d08cb4af125ff3320d6c5fabbc8baab6635d697b56cb1752d17bfcf6565d6bf8bac6fcbac3bfe7489f57f99f556acb1f5d13c3689cd623359e758a71422e68b8faae5b3188f57ac99f5f704b6cefab54c28c503c9113f75b6fe9a6bfd522d7e5b6129addedb93ed2da2b5c2fa6db1f54d15abb0642e12129bcd1ecbc43f987de920af1de5752bebffe6f2df8de4bf9bc97fc3f733e5b593c7f7b706df3507ffe6842e4cf27d67fb2af037b1aecf827bfeedd7f2bd2eb6bc8c6549647593d76de4b5bb94f99c07fd9bca6b8f14f14d26635b20cb0bb366f29a25af3da5becfa7197e6f9b51ec5c208fb3ec0af4c902613707bff367bd02c45da56337573a76b3d33163934cbf8fe5fb7de4b59fbcf695b2ad773a5c2a9ff597d7ae29f41a607fc746b1b8cd5a6136aa94f7d9f23a505e0749dd947dbc00ee83eaa2d274b094b98d0ce345cd73f53efffd25793f445e87bad26b987cef65799fe3511f2ff6a774ea21c37805dc5b1c1b2f4c224ba5fbb6ae74df567e7b92cdb1f11daef800fbd3cacd95f25e4d231e2a1fbd02ee2d5d32b39defa5d441c91f2ee56449b9af817b2ef7349f716b2cbfdb2ceff358eab2ad8387df46d8729a29d68576384d3adacf9b8c654e5b2e48a1a74adb5eaeb4ed25e55648b92afe23edfb98e2dc03c8e1dfbfee92dbdb25b7b794abca881c8f7aaa7cbf9dbcee20afdbb3ba7c3c20573e1b23af9245ac0f739601aa5c1a1dff76eb937c724b96463bbad25a96bdb1be2964aaefc7c96b738fefab77c607d07982bcb6f018660b799d1820cc96b62d34fbde650b8529644eb2f936ab013a58729aaf97f793e5758abc4e95fc07b8ec6080073b48a5cb34a90b036960e9d2a29dbc2f92d79d9cbab09d5d3abd517f3ac5fa49996f827b7eed2f9fbf05eeb9aeb3ed705a3c22654e97d7192e9d67d2e96cb5aec577ad5b01dbf0f25d32fb9a6dc7af65ae2dbb65b17cbe8b4bb70971bd9b4d02df2a3dbce487b992c54017e3815207c5b6d8f5dedbe09e5fb3e3e1897f5bdfb652b6d5193ce7dfbe03eef9ef733cea3a9f25da2c973318843d58862dcbff562a3d776589794ff72dbf0e02cf0649795267b61b4bacc7d47b3c6eef827bfefb3c8f71db5da39f156eeb7149bedd8339cb9f71717b682acb0aab3f66eb338439f3966acb6d1bff2656219fed65dfb755baec2dbf190ab80cb5f56ba3d2701f795dc4f4f5ec42c041e647ab0b5c1776779927d982246195ca7716bbe23d3b2ea7a5ec8bb555e598faa63ff22e7f5626afe5f2aa382c8fbf9baddaebaa6edc57eaa6dabe8af752f09c5f73e4efef817bfede92b8ec4e4fc8672b5cbaead273a52beeba3220999dadb2dfedb297bcafb4d9b6bdc725776f96dc6ef7b3e50c5a28efab6c39ed1afb94536dcb19acda40b5f67d3ba58fb2c1d5f2ba4672546d7065376be5f3e1c06e72c133feeeff5c7c53e9968ce3feb69e75edfb03e455d5e5db03d95b493df2e26955d7e65b077ee3f7aa1dbcda15bf64ba1c28afad53c4a703788f5f0f0a10ff64bf3591d74365dcf299b3cf936fdbca56dd93c83a8c69edb4832ab70eb77f6f2fd39d1d01e2c4c350ed60684b47cadf4680784bbb8ac1fafa10f96c64fc9990c77f3bca953eefbb7edf0064e87e3f1ae8a0fbfd18f9fc035bf70ef27d76ac2b2eab9953d742e62867d87189718d15bac2fed0475a6e94df8e72a5e528992e9f279175bc3e2d3bfe2eef4f70a5e589aeb404edb3baf8cb7a3d3606a45b5ff96c3b4dfa8e051c46cbdf4e46d252fd7e0a90abfbfd54a083eef7d39c69d949b5e34e47d212ea0fd3f28cc4b8c6b67385fd9187b4dc24af67caabaedd7b96bcaa36f7c71ee49e2daf4b92c8edec92fb8907b9ca57784e12b9e721faa6139eb275d50edc9e396d9ddf5b76bbf52b49649dcfb4b6de59e9750173dafa85cc69eb3bb0445bbf48feb6633cfd99b4b1d8389668ebe3819d287fc3c5e01d68abeaf74b805cddef97021d74bf5fc61cb6de659c7c7e39d3db3ad41fdafa1589718d8d7385adeaf1646979a58bb3e23b8139fb3913ecf4e9e26eff54b2e475e355b6fcc1aa7d72b5943751caff14dcf3eb2457b893ec70bb4aff57373506d24a3e1f623fefaac618ae61daf656d762d77bd732677bea7a17ff1b5cb632256e6f7571b90efc06e3369539db2437cae7d3405a4d05cf746dae545c6f92d79b5dfc264b799f817bfede66a0bfd487dd22af07c67f6b3fcd95bead801eb7ea6d45e80ad2cc771b49c5f9b61471f65326153167995464dbc136c9fcb377c97736267947d9c7bdf27ab794bf1373f65f943fe83e79bfb3eb77e91f1265b62aabb3801e4a36ff26599b41c5ff01797d505eef97e14c674e9f98f2fde8ea8874dbb1e9feb650ea34c3693fe2de4a871eaa6fac6c71410afb78485e1f96d712296fa68b81ea5727f367a50a2b49bc62b399d387a07c4dd247149b257fff42decf71bd3f47beffa8bcdfc5f57eb1eb7dd55e7a4cdecf75becf1e0772f8fd13f1b8095df8b327c133e9eb624fc5f9f4bc56fe36cf19367b9a39fb77aa0f375fbef725f80e3250bf7f25ef7775c5693779ff35b8e7d7dd5d727775b1dadd25770f97becfc8ab1a9f7d2e1ec7615dc03780277bd62933a94d4b1f456c4ff9cd37e0deb2e99ec9f2b2fa56b689627b4b19df827b4b465696ad6f56012e2bb68f8bdf5ee039bf2e90bf7f07eeb9eca393e8f7a47c77a12b6e0be5b78f78f856e5c945aeb82d9232feb6e3d6ab5d1259cac7a3c663551a2a9be5f24a35e9aa7c5c6aac6ab1d4e17b706fe9d0eb4af9de4b4c6fdb25aeef7f707edf5b8d09aa71de575cba9531a72f4c8e453235b6a6b149a6da124a77e017abd3ef55977eaa9fa1f45e2ac3fd11e8a19ef3eb32e6aca3545da9f264b9eb77e507d48db527cb23ede5f7fb3267b9bfafcdaf0fb365f551ed2ce94367cab72c7dc74ce9b18239c72b947f3059f9fe164b5ebe2b5ffc72f09e6ca309ff2f2cab96cbdf3f88bf5bf7ec43f04cf94b3f023255ddf631487315eff73deaea85f54a17eb9536ebbed2ffdf5785f5a98bf5672ed6552ed6551e587fe291f52af09e2a2795feaa8df913b8e7d7fde4f39f810c775aa867302df64b332d52c525595a28f95fd4838cafeac126aa5d36516ddb44ff9f9defd5bd5f03c2fc96c5fbb1f05d559fa8fef32fe09e5f6b411ad4ca6fbe89f31ea0cab2ef5dbff989e7f652fe1a57fcd6d8f11bb05086a5ea3a597eb3b129c2fac9257fad94ff2bb8e7bfebc64314d3df9c321c75971a2b5917ffbeaefc97e53efb35fedb683567e347f01dbfff05c427956f5cf74c965db1fd5dfcf6b7f9655f28e3a6c66314bf7d53f053f5e401e03d15d67af04cd5c707c69fc5d68367fc7a90d4ed37706fe936a8af4beec1f2bddf41d8fc7a887cfe07b8e7df65c9fb4399731e9f927738d0e9503bcc81aa1e778771188bd79716af81cab7f503f8bd39d0533d5332a0bf6739b8f2e77fca3478c71966ca34d0b5158f60cefa4c8e11c48e74a5ff9192b14cff412afd55395f953c6c259729e6473167bf468d19fc09e4f1dffff2199f0daef86c70862be4a76acfab30aff6cf93a9f6dfdf32fc636478f09e5f8f06b2ff91cf8e0536a1c6408e93dfcb77ea6c742378772378975f8f674effc7f176da0d7dc7255b7d77827cff5f70cfc352f727cadfff93cf551e3d09e8702278c6af27dbdf6430706fe930e47ddb7e866e46c23a8539eb8e535c619e2ae5c6c03d8fdb32e7fb3139ae909101ee156328a7914b8e4bafd8e9208ea74b5d6e496e178a6b9d3f6aa38cd38b76dc87a872ea7b6ff2b4cfd49c689926b1335cdce47888a83bfccafe40ca389339cb80336d46c32eb5e391a3d2565d559a5cc29c3e17799fa1c6bd5559f83e73cc07d1eaf29194b1c9a5cb265b971c39ff2747d97206a12e722c3076b64b97b3a52e9fbbde3b9739fdb172ac267616ababc7f354ffd4cddef56d5d799209ec51c96b12973746e593c6aeb0d4bff9f57c97fee7dbfae7ae77ea54a78b62a8eab8a61ac6fc7a2973f60fd478886cd7c5d4f8c77bcefb8c4c79dfdc15ee791e189c9726838b5d0c2eb6190c3f046170790a0697cbeb152e066aac46cea98c5de96270a5cb1e557dfa3e4b5ec6a878283bf915dc4376bf827b2e4bf62162720e5eec1c197e13700fcb5b692b194dc1bda56b9e1c3bca7bdff95dec02e6a8afc43d9797e592d7cc292f5fb5c7319b6be5d3e65aa7b0399fbcd57bb10bc17baa6cba48ca5436a6585ce56451c700b42b62578377a15dbe02ee2d5d47b773c956df5dc39c75f735f27aadcbbeafb5e5142cb4d3ad408e73c7da68b8eacacb4cfbbb519fbbc2b98e39fbe6725cac2eafde2cbf6f01eef9f526977e37d9faf169173c9c11a31079b7b8e4dd92441ebfde0858df28c32895619ceb0c23d6565e37bbc2d80cbe8761a8b1bd1b401837c8309eb0c3e0d3491c61a874bcd515c6ade07b18861c8b8c5d0fc2b8de0ea3508e7f1696bac2507df6db5c61dc06be876148797569ab7c86b78330557adfe94aef3be5f50ee6f4c5c8b99fb1bb5c61c971b6c2df5defddeeca436a3c05b34ba5cfdd2e7dd4989c2a1754381dc173582e403b57cff95595f7aadce804f454799e5fdde53dac07f8152bef5bbae2718f2b1e72ac3176af7cfe2cb8e769958de4c7fb9c72eaca28f55cf99965bb27763f48e3fba5ec475c321f70e9f680bc3ee8d2ed412007b4a5eae4aaf691aa832e6409e5605d9bf96ae66833e7bfefd2fb625718aa9c1c67bf3f7a371006f63e97f73ef3df3e5675ea43cc3916f290d4c1d5d7173e9964612879720d664cf9441f96b6d20adcf3eb23cc59c7aab1972c79ff2873f82fc4bda5d798cd2e398fb9e43ce64a83c765f8ad5ddf3d0ee2c57f6f63331ff384333e29e3ad6bd7a876c813cc596e3c61c761bb2c3bacedd45c05d8d64b16967aef4960732aaca7c033354ea3daa4cfc838b605f7fcfab44bbfa7a57ecfb8de7b5223fb2916f7e3c0e788ccb172fecb769540a697383b9e65c6c4fbd358192b61952c4774940632efcbb2d597a9176473d14d44cf9ff195d93cd81ab6cefab44cb72a7a9e58735dc3f2599e76557457d1f653a14f147f97586f940ba1ed321282b8332108ae5c85f55f1958d25d6d3d9f2a5684f345dde5d62fc3d874ebcabf5ac886b33dadff9c52e65bc156b05aebaed8fabb52c85b68a99df866aa28f1e5dfee6fe65832edd5e92bac270a68a5755f21349c2bfe5e2d342d13da1759cf6ac45af9956c299b605dd78ad012e35e65fd5b1766b144a6d751bf481d7b6e2f8557c934c98a0dd73e47d8e2ffa54843a40847dfa49dcc878d73448fe7d88494f83f867621c30bfc222963b84016733ccb6339a24e989340d07f1c1363a8b76f9b77212b481a173d199edcdb8818c453b8e4ed169b3acf38f4e64c67d4f2598ea80abba7885a32b05c5eb668c1f889426666e35caea81b7f4c875fb820e68688df7eaf5cbce73f019a88cacf9900623965b155aacd0695e73ca17c85504d1f1955154f64cb2c51e596787b8f94b556c0096999cb036e2a9223b1b24d15252c41327409227c38c50d921fb02d54922749b3ba58c4932447b4a0ba24315c2c2cd1b4ca90ed2b95b5eeb975d6cae293bffc38539f2e2d44baa4131a96328d7429d322ecac92ba6e48962e2debe2154f17fe47cfb01562dba974c00836d6116c19b66df3df56092925d6bbfe19f24eda607771a307d80631c2d42a60083335087339c2b61aad5866739756a203a997dc449738ad1aa6224ecfb8b9c7afb30b41266adced93d6a37e4dbba98e9ee8ce2f24a5a7fa8773ad8ec0ced66f25d6fb65a2b1c99fcfb6249658617379e34508f13ea5f38be464b99f72a89bac966a0741b52fe8ed06d50c23de4c433c97db6b478d198832ce9d19dae399a13996cd3a05cd662d30c95b0795dc1293dc39a8e45698e42e4125b7d6651b3152b25728d926ee5651ff9a607dcbdb7eab455fb9d6fa5ee786499e5dba7ace2edd4476c9623ae7903f8db06cd2469776fce1363a25dd49d70d4fbab698e0ee0105b7c3acad47506b6b8fa9bc6d4095b7c2caa29ef5501675d009e7c548164b6cccfd67fd4910de0a17de11d3bc9746f34933337c69de094bc9de4153726b4c729fa0923beb4a2461eb87865c22e99dc353c55e9d656c96d518d997d95e3d15ee2ae1d1e31a29efe01cebba4468c19f732d523b9593976d7d99a66727b2ec646d29d650b1e867699321cad8fea28ce55ba0ccb39edbceecc92205ca4548c3b4daf010b0f7158b19621bd25a91da99483f748008dd2c36585dd1052b69b23525cd1bba622c4949d315cbb2038366d96e3ac93ccb0ed2d86a2eb7553eeed64294e709e10cc0c3d9465734883a65ff062d1aec1e0b97b7448cd7d8f26632be93ee1a61aacb2d035e2d0da7d87aa7ca0aa34c1a7990c280cf8be8e1ee0a33fb8f3e3b0c15d961070fd98132565806e8aeb324deb5e3a547828b91679739564f66225b20b2e17ee231a764a76eb978b59ced6f5dd5d04b82bd35c5edad874e1bde62e6c3fa299b2b1d70c1db628273030aee89e5f1e141f378964e322f6df85645415b58bd30b5f383aadd1b2b510b3425eadf317f256a1f4cf8088df07b32fc09efab13ce8db5d08b8d24b1ea7e98e091ba3cc6df9e28bc6459d6ffabac2fb84fa644e4fe2c5119c64b832c2baf73973dafb08780f757596fd8439d7ef4ec8f19c5a8a04631004bb7d19a74fbd967ba6563c2c768844f6be44ff8402cedb6d3a51dcff4bcdee0cd9265b26e7396865962d0394bcc33a815de9e529172d5225db3d801568974a075adb1dece12f54085f82d4b6c2c5f25ca5a3f693a08d37fac4eff1640ffd940433f210ec6caaded35e556cc67b93544279c377c766048c3876f5ae3bfe13314c3364e878d575b93ade60b6fb9d68af7e70a0328ab6b2b97d65305394ca3578ee88baf640dd920e3bd053e2ba35afc3bde44e161c747048334bcc6b3c48697faa36f78f1ad85b2c5c67e61688f35b072b04275a2a6508df9295473b1bc3009cb0b93d3ca0bc37536275c34950d6a73788e9a2364f39c17bcc13fc58a632377ef5ff8900a3c58567de938582c0aa9160787d8e4aa7961ca9df68bc00921367c9125f47962aac813616a8ee58b3cacd69ea6a9b53767faabb5f375262b7c73550d6ab293848430ccb64867b6c28758e821f1eb53cf9e62f25eb528544b65a16a17dd3dc54aa12a516d9659cf79c10b7f1f2c56daf0f6d214c17b8520cfe35722fabd9891ef248c3cec7862865e8055003b6b2a005fadea1158169aaec9427ffbcc428598da3382aa3d12537ba646edf54dfca93d0a133e4b237c7a537fc247eb84f38299efc415a487380613ccb7d64a686ef28eaaea272c76f5141789be82eaff958a27ebacbf2bac678b85882c3111538d44fbd1723b8ced1c0ddb763ed98ec510cc0dc8767b9d606e9ec55e04271902db412798b7bfe631a4fdc53727f3dffeda11c3beab06fb853eb18fc3b2f96e41b3f9784cf2ee41254fc024ef1154f2444cf29e41254fd249e689b8972611f9640c3f89381913beb74678b14fe153b08cb98fae6ceac7f8b910f146aadd7d8afb354ad81221a5cafaf76a59e7963afc234bc43454bbd3ec279f4fc5f45ca0d3d35ef7c1e7dbf0364589f0a1f11067b1e5be429d86a15fa841bfd127fa224c788946f8e73e85ef84f15aa4e3d52545ba968a691af1a7c3ada77e38ee8c69b358a70dbf8da79b9f70a663484b3548cf6de10fe90c2c1265ba4870b78d8d6f8c856ca670f895c8352bab4535ee1fe34c4c83253a0d78c936bdae61303bcd66c12c0ce9520dd2577c229d8d95c8cb8296c8bb606a97eb0acd96fed49e83a9bd6f50b5e7ea24f356c77286b43af8567cfe5b1dc558382bb07056a615ce3c5d389cd4aaa0a4e663095ca949e071adfc25f0ae98f0fd34c2d7fb14be1b26bc4a23fc119fc277c784576b84776fed4ff81e98f01a8df0529fc2f7c484d76a846ff2297c2f4cf86a8df02b7d0adf1b33f235418d7c1f4cedb51ab53bb6f1a7f6024ced7541d55ea8919c2326a285b9b2c43dfbc9dfe47b3e05c6db9c57be899e6e5549aaf0319752892e5d780dbd5ea7928faa7c11664d076aace9639f99603126fc208df0bd7c9a6a2926fc608df0a37d0a2fc3841fa211deaead3fe14bb0c43c3460622ec504f3bd2013da82438475ae12792c4b1c35ce9763ae94279bf325f16562e0ba44d87edce1a406aef9fade2c69bd55d2a62b2c6b1f663df5a3f5324cebc3755af39157eec48db79bedaea4dd0dd1cd2bccb21a2376ab7b802fbdca311b384263039b7d1ad8be58a48f0c6803cb358273c4a4c772d272169b475a2c9cf77c3dfe1261292b7ccf3a4d5e261fe5b94cde20ca643ece4fa72b567e57e8929bb7ad8f6648db9a6fedd982abecab6dbd42170eb7d96335365be0b3dc5a89093f4e237c379fc25761c2376a841fe15378a54e386fd6f0cd4c03356bf6c3d43e41a3f6333ed5aec2d43e31a8dad598da2769d4eed8ce9fda3558d976b2ae40e76f7b718a64894c592b2a285ec5cc66f6da527bae5489f5b454cca25a26ee678bacc93d8b8b4405602f935f209c1f4bc5586295f554cdba5ac7ec454759a239666f1a92258a825239176fb978522dde2a03e1e82b9c725971c22acaaf77b3164ba2533449d4d76712adc692e8d480d5cf1a4cf069bab4e7b3198aad9b4a47baf8096f2d56b09e8e15ac7c2f5bff4e8b7558bcced4c58b27d39e759e52db7ef7f6d92cda1f4bff4dba92c567fa1f80093f4b23bc717b7fc2d7636972369626e7a4952607eac2e185deb95e8c38c938df4198e0f3020a3e18b3a2f30366bb4330c11704147ca84e304ffb0b59e2dc4e2ec0cfdccec3302bbc48638543b6f267858763c22fd6089fee53f81198f04b34c22b7d0a3f12cb3f9762f9e7b2b4f2cf5198d15cae2bd3f80cb805d67fdc4954214a6b55c7965ba530ffa5527415797de8c7c236605a5ca1d3a2439d16b9d6dfbce6e56353f6eca0f475381ad3e14a9d0e5b491df2adff178bce10ff66adf577fa1a1c836970954e8366202df81a22de32f213dab198f95ead31dfb11dfc99ef7198f95e8399efb56999ef46ac68ba4e533435f259341d8f11ba5e43e8779f844ec084dfa011dea5a33fe12762c26fd4a5ad4fe12761697b1396b637a795b62763d9e1966445535e3d174da7605a6c4e5e340dafc7a2e9544c875b93154d05f558349d8669705baaa26957119ebff50ea7eb42e3e67bbbc67c9b75f267be6760e67b0766be77a665be6762c8f886d5419a639b303a776be89ce693ce59189d7b303af7a645e76c2c12f76922f1b5cf489c83a1bf3f20fa7331ad1fd0683d696b7f5a9f87a17f1043ff505ae8cfc722f1b026121ffb8cc40598f04734c21b77f627fc424cf8a31ae1d93e855f84e17f0cc3ff785af82fc68c936f488d566bf9f55cad5d8269f1a44e8b78b596578fd5daa5980e4fe97450d5da887aacd62ec334785aa7417316afd6268b01af553e3d55976306fc8cc6807ff669c0576006fc2c66c0cfa565c0576291785e13898a2efe22711526fc058df0677c0abf1a4b6e7e2640907ae11a4ceb97345a8fedea4feb6b31e12f6b8497fa147e1d86e4155d0ee04306c9fdf4899edc603e7bdb6f6ab697fe7a2c815ed524508dcf04ba0113fe9a46f8269fc26fc48a8cd7b122e38db48a8c9bb048bca923d4cd5f246ec684bfa511be9b4fe1b7e8847337f0db5e8a8c246ee0cd1ac13962efa08619a34fdc79a97ec7e8dfd1f1d28ed1f30355928fd107d7151ba3bf15b3a5f774b9cda72ddda613ce8772f951e08186726fc724bf1f54f21d3ac9bc2cfcc08bfd272934efd4d9bfd8e16a4983d87f903dd1925bfe879e2dff2361f98392587eb09ddbf4297117663c1f07359ebb31e3f924a0f1dca313ccb3e9a79a6cfafd36feb2e9bd98d69f314d9388af2f1f2fba436562598a6e415396682e65f99c7b761fa6c7e73a3df89e2afee4df8fc9ff2260ea3c80a5ce979ad459d6dd5fea3c8869fd15963a3c8f2c934d44951e6575fb7da43b33f0212c925f6b2259d1c35f241fc622f98d2e923c07aa7906767bd6394dd34fb41ec142fe561732ef93dbb36a72eaf6b1cea9db14679695214a99dfd91c8f621a7ca7d3a0b35683e9e25f35620701bbd59fdebab1c7305dbed7e9b28d475d12373af6a3d3e398e1fda031bc8ddbfa33bc27b008ff18b04c781213fc5340c14f61827f0e28f8698cf32f1aced7fae4fc0c26fc578df0ca9efe843f8b21f92d2092e7748279e9f3bb17c1493a43cfeb04f37ee81f753fb8faa1fca43bfffdd01730ec7f69b04febe50ffb8b5824fec622f14f5a9178098bc4bf9a481ced33122f63c2ffd308dfdcdb9ff05730c3e43bc22514a77cb1dd1c06b78929156d6c559067b381a2c25b29ff76ae42c8127776f533446c7f51256a7dbbc8ad661562838c6a069781db4e25bea0b9d2d53250e17067925dc52ea92bceb344615eea736adfab188b988e05dff405ee3567b732e3156c7c49f61aa1610583936697892a282ba5843ceb6dbf2b375ec30c2623a619f0f16930afeb84f32cd5288664a9c6b174b2d41b5824323591c8f6198937b1946ea24b693e4d5def22dd533a57f9ca17debbb0b7284a96a6d9497f1d28a6a3da6ed5b85d3b73c02a6119ca85eafcad46d8558d26172d121aae020e585bf62ad93bf5635f6fe9e8f1de69d358c0dee9db58a237d324faf43efe12fd1d2cd19beb129d9bb49d8187d565daf4dbf0ef6261b7d085cd47186759a1e9b70498ccd4eed47ebde2ef615ab4d469c15374bc28b86bc5c3f8c1747ec2fc1f96a4ad3449fabbcf247d1fb3c4d6412df1038de41cb10b3b5f2216be2fac3ece0948ee136b13f3d060ec8f13fb5097169c58db80823fd209e61bd2b5f32238c996e11f63d6d33ea8f57c8249de2aa8e44fb1ecd441939deee8eb2f3b7d86950f1d75e5438714a5d45a61987ecba8cfb10876d244f0887efe22f805962e5b074d972f3123ed1cd048bfc254ee1254e5af3195bb0654f91b4c70b78082bfc5ec731bac069f2a6aeab9a2e966db62ba9beb7c8785dd5d17365fd9cbe7a5f0d9f0c975e06f55f96e4f7cafd3863bde7a78417c002ef8072c9adbeaa2c998c6e492a8fd2326bda74e3affc16e82e5a4b103d34f584192a529481e19e0af20f91913de4b233c2bdb9ff05f304abdbd246e1224bf6282fb0414fc1b86a3afaec7e913c7ef98d6fd7446c36d32c797f27f60f2fbebe4f3ad7b1367d4cc10dd29b51b5bfc177f75df9f982603749a7009bc19e937b1fec242c9d685d28231ed2a5d3f21fead0931471c78c3f7fe0a6b93192f47c6eb9bc60363bc93e804231c1ada21e341318eb25342cc929eac8e90fb479756fc76702cf1e4f79d661cdaf4dceecf6624244d269e34ff62c63044670cbc125715d612ebe102d1f3e0912af769eaff61e10ec5aa727db82b65bfc84fd82c86843d4c1776670627d8f1655dabc58fe5c2afb25486bf0af4cbfce812c374c9d1e9d25e64c6f86e183c2bccaa3b62a65a78752a7d859f81859f8b157e380baec51a96eea1378d749af0d267b8a60e1995ebaf0e69ac13cea776e579a9f9dec50567ea04f3a22ddf8b605e5420829be804f366658117c11b708d9b62293e027345c5535c3f6153b9c7fca476334c8b429d167c3371e5315f29bca3f6e472355f003faf5679dff92930f6ae48dc17522afe6dcf40e0d519b4d974725173cc76476a6c77ec707fb6db0243354a878aefc9cc6faa05262fd0e68ab7aaac5f1b0a5f4b2c138dd654bcc2b47d64a45618be313a7c9d1cf65e9f16df1ad3633b9d1e03122cbe562697edcb7726137fab9cd5c8bfab45c2978be4e009cb936a9d2f5ddb60ba8ed5e99aed6256eeaa176a12f66f724f409fcb960ba3a9940d687fe3116d31f3d9beee073024c59b683b8826da00f1033c2a3e5f3b93953732d5f1f0352cbe45b6fbd8f87ccd085712c36c87a9bd23a6f638a1767fdf6acf16397839e35bc30554ba3da6f4784ce909313583d29fd230c7a9a3d0022abf954e795ef24e8c252e4dd71e679decac6c2ccf4c4addaa54434af11df3e2052afff7129f654d474c97c93a5decb382e3e3ea7e42ea848534451712df257009b38f90711e7fe13e70cffd9b5fefcfd61abd72c4a9a661763927caaad57f97736a8cfb379cf886211dce6948873359e85887b3b38e9b38b4754188dcecf7ecbc3057d802afd76689516ebbecad4e836951ccefc9753b09b27d12629eae7ee8e9d7ba5c248e268a0574f277c5244f0f2ab91b26794650c9db60c5f44c4d312d12cf4731dd1d2bb06679e9572529717a603c6607e5b12d267997a0927b6292e704959c85499e1b54722f4c727150c9bd31c9f3824aee8319ddfc8046d7175379d7a02af7d349e6febfddbca89c6410af3fa6f2ee41551e8051de2320e56c4ce53d83aa3c1093bc5750c98330c97b07953c1893bc4f50c943309b5b10d0e686622a2f0caaf230cce64a02da5c0e26785140c1b998e0c501050fd709e6c324a55e047f840bcec3da0365f5d01ec8c74c634950d328d049e6ef2ff5c223c9d4fc1118e86501411762a6511ed034466282f70d287814967acb83a6de682cf52a02a6de182cf556044cbded30c82b03421e8b095e1550f0f658ea55064dbd1db0d4db2f60eaed88a55e55c0d41b8741ae0e08793c26b826a0e00958ead5064dbd893ac97c2ae96a2f2a27994a3a0953794d509527eb24f3e1bab55e544e325c37054bbe7501936f2a2678ff8082a76159e4808059a4084bbdf541536f278cc5810159ec8c093e28a0e0e998e083030a9e81413e2428e49998ca870654791626f8b080826763fd91c303f64776c1343e22a0c673308d8f0ca8f15c4ce3a3026a5c8c69bc21a0c6f330c14707143c1f43714c4014bb621a1f1b50e3ddb00ed471f5d081da1dc3b131208e3d301cc707c4b12756c49d10b488db0b037d623d80de1b53fba4a06aef83a97d723da8bd0053fb94a06a2fc4249f1a54720906e4b47a00b20853fbf4a06a2fc6249f1154722996c9cf0c98c9cb30c19b020a5e82093e2ba0e0a598e0b3030a5e86093e27a0e0724cf0b90105ef8bd9db7941ed6d39d6033c3f600fb002ab542e0858a9acc0205f1810f24a0cf2454121afc2205f1c10722526f8928082f7c352efd280a95785a5de650153af1a4bbdcb83a65e0de6e2ba22a08bab16837c6540c8ab7582f944a8abbc084eb2686d0d06f9eaa090d7626e9d6b02ba75d66106776d4083db1f63715d501607602a5f1f50e5f598c3e886800ea30331c13706147c1006f9a6a0900fc620df1c10f2215893f6967a68d21e8af1d81c94c761188f5b03f2381ccbd9b705ccd94760c5e7ed018bcf2331c87704857c1406f9ce809037602cee0ac8e2688de09c9ed66d8c1fb46cc256cd7bcaa988f5b741c7dd3a66da698bf7c4f8b4c51ce667bbe674f4c5a6331ea34b769e3af77a4976ae3d22f8589d607e7b5f2c7139a4fa931040266e57c761a5e4fdf5504a6ec4843f500fc28fc74a870783960e27600dcd870236344fd409e66b091ef62238c93cff9330c18f04147c3206f9d1a0904fc1dac68f056c1b9f8aa9fc7850954fc332e313f594194fd705c0176d3ee9854992459b6760b09f0a08fb4c0cf6d341616fc2243f1354f25918e56703523e1b53f9b9a02a9fa3abfdb35883d5fec5090bdceabff67fde73edff42cadabf7ef4c56aff73b196f58b015bd6e761825f0a28f87ccc525f0e6aa9176055fe2bf550e55f88a9fd6a50b52fc2d47ead1ed4be1853fbf5a06a5f82f563de08d88fb91413fc6640c1976182df0a28f8724cf0db01055f81097e27a0e02b31c1ef06147c1566ccefd583315f8d09ff5f3d08bf062bf0de0f58e05d8b65c10f8266c1eb7492b9ebff432f2a2771fd5f8fa9fc5150956fc0247f1c54f28d98e44f824abe0993fc6950c93763cdc1cf0236076fc1047f1e50f0664cf0170105df8a09fe32a0e0db30c15f05147c3b561a7d5d0fa5d11d9833ef9b80cebc3bb132e3db8065c65d582ef92e682eb91b53f9fb802adf8309fe21a0e07b31163f0665711fa6f24f0155be1f53f9e7a02a3f80a9fc4b40951fc454fe35a8ca0f61927f0b2af9615d6fba97751b9bc71a66c9bfea8dfa5bdeffbbe71ef21fa287dc3521765e74c07abd8f6045ef9ff550f43e8a25fe5f4113ff314cedbfeb41edc731e1ffd483f0273026ff0665f224563dff17b07a7e0a6bcfb38c60edf9a73116b18c802c9ec15864785139098b67b1ee5ea30ccdc63193c46d7ce31f7596d74cc6b7cd5923f2e7f2bacda3f8569145d6eff1ad11f913bd6f4bb7c1177f1b960cbcdc5ac5ec034056faea7b3e87c5b2b12e9647d5c552edcd6697af2bc4bf8beace7de0478dd8e56b51dd9b93eb8ecf731ed0532579cc15bf965a126b45bcb85c27bdb804febe3f3d3049c58c6f40b354fcea640acb5a37eff9961cbf1b8a3e8f91cec4ec098668c729dffac6a6b5caaad3f8cedd554cedda5d65c5c5def1cead6dfc5bfc797dd9d30b582c9be862b9832b9690b91dcf29d2ff5ba2b17a670ac15f92e515f8959f98bd88c5aca92e663b7a4abff1e2989e72a636e5099e72f15ffcc4ed252c6ecd74712b74c56d86489d653266fc6e6d83c5e4652c26cd7531d918727916ff861fc8a436102b05e73c56fbb072c80e8f05af4b6a452b11967abc7d5c7f65db2b18f5163aeae33de58de98246b511a5daab58fc5aeae2379dd0aaf8d3fd44303c56766fa65c045dcef667f1ad1feb23555fc362dd4a17ebed93c61ad7748e888b7d30991d47551bf3a78b25a1c47c917e6abe8ec5abb52e5ebbfb6ed9cd15bf38db763a096aefcbf84682e3454f35484b309d747e03e3d146c763e750ea6ceadafc4d2cce6db1768a3f1b5036ac3f7bc8af45f889d95b58ccdae962360689d93c913f2b64dbc4f694a85ecb7c998b4b135283a68ff23616a3f6ba184d212c7d55aadadbfa2f62f6d1e0f517d377b0986ea58be95886cda0d09514ce1894886776ec38936909db31d75facdec562d5c14b9fc0192e6c21cc13a95065bdcbf3e1d224b59f5346fdc5ec3d2c661d75319b98b2e4f4d62bc0cbd0647dd6744bcaff6171eca48be354d426798b7791f5928aab7d56cb645625bcaf5529ca12bdccfaae09dfc7e2bab52eae65c4bd871aab26a81294ecdec17c61ede575254ffdf487d3e1f401c6a9b38ed3bc06eb652527149cc38718872e3a0e137ce60d1372c447580cbbea6258e43386bb0a8b5e89a44843c4f7632cbedd74f19d4368d9d569b435ea83c02718816deaab0d62976de3410b843e569f62b1ea8e7928fcc66a8a78233185dc658e77b97ee2f71916bf1ebaf86d17a0e5987858061eabc479bc7ee2f43916a76dfda599bbec192ffc093ca7a5eaa5d0d61e5f60f1eb89c5cf4f9fd18eeb54d98e88ffca473c92b70eebabe5f82516bf2c5dfcfab2e45ec1628b3085965f615af64aeedbf3930a73d34a054adbfb1a8b756f5dac87a279abb86ea6052c2396d4f9b3797d58ab6d8ba5e7dfff06d3bb8f4eefd1297b5c45626c907b1f2bac328f9f0abd421c9290d8ff4d9602e9f720bfc5e2d3176b4126cf23bc373c5bb4aaaa35f5aa97b104de1a59528f31fc0e8b613f2f7d64fdd84091b03dee072f913eaac4f40a737ce07b2c8efd310f95173f809758a65762a41fd31fb0980ed0c5749aa7d4748ff4d8f950c5bb21d3f5472cb6d9bad8ee96325d693de3d43ef39f301a03fdf50c12d7763b6b0f7564a93b0e342de79fb1580dd2c56a2652ffe32301760b2cc84c1faa91825fb0980fd6c57c0f46d7d755add4f4bd5db8f5fb21f22b4664083676929e8587d787fa0d8bd150cc5397dacfe2a58ef2e2adf1efd149bf24ff1de3304cc761900f0e2a4dd541cff555dafe81699ca3d3b87fcaba273e2259269ef2193bf5d326ff13d33457a7e9c8247d09b7a53b3587a7c352e597bfb0b80cf7324b0f6bc94d36ac15f73716cb3c6cc4df5f396797e7bac333dd715067cee3e9992865bc1833e2f59e9f38ff83c5395f17e77eae948d87499d9bfec5f42cd0e999e7d213964f6e9da74a9dbdb69bd3ad45ffc36230421783bd1ab85d012dd06bce53dff8a1c2a7d06ba9147a19055721fa2955e231c3725cfd9426312c6623bdf47efdb62c82f77fd28f690616d3515ef2e64461b3b67dd600afa66de385ac2045fc74f9967fe527068db0188cf63e539387e9c70e61fcb0e7f595428db1f88dd1c56f045ab3059bad10dc3f9b89c5633b7f6daae0e3aec1e3d2048bcb585d5c26d7636ba348d426fca8f90a4b67bbed987aacb138cd1646532c9edb7b693b62e560aadc157619d80c8be50ee9cff5f6568284e3f36b8ec56f47ac8cf73f1e14efd1c47f2fd28c1da7d7826c81c5601c561ffb1d0bc6725c7db4eefdc4b42516d3f1ba98e6fa2c25a9cbc55698f613b091c7e47dcdf841df6eedd441eb780b173b243c59ab38bd52b23516eb89e98c78d9e5c75cebe545ccf6aa2d660dbd9aaa0d16c3495e5a897ac2e9f5e0d2f53db5c5623099b6c6a62b3f9a5affc5627cc5f164f1963d4eba4a48e12d859cded64fa284b04bee61757dcc618efe68fc39d773856575bc9629aeeb4df215f9c9254cc9b017438a3f03621c7f8d8c666c0973aff89f28e457c85247e5ca6182a03d9ec0773218669558e5e22bb57741aa58e8fad5c340cf1ac62e759cf646f62288c59aca18295916e93e9cf49616d3a93c55b364aa66e4f0c92cb1c1695a536a2da6f1d01ae96da8730259580ae874b705cc94b57d8c6f84b34004335b3499f1a55b29438635a62ee4a14280cae529c5cd03459d4e5c57616ef6f4f92a660f2abf63c96c9a9991cb53a488121bdf736092e81d565ae0ec59c9aa6ec500564702219f13ab10ee4489b09d75a39ac6d344439a0b2811ee123ef975165b1e096037368b03db99125847915517b05c169f2f1c6570ed5ac6c14da704b795061c17b8d2fa884f9faa154f4b23016d218b439b416d6dceec39c5fabb5cce4c57f3336dab8b02b8ec5671703329c16dcdeb1eeb15afd54214e09d062a855994f0ba80ac3a8bd9ebc5792b888b83fe95c96cade81f4425db36ee1f07389b12604b17c0f8a059143075ef1ec7b40b25a6e60053dccf1f0544476f1d47348712511381a83a52857ce3d6713873a9cba959759d263557c59ef13947d49ab562cc85d793b3a5773a0a0037830c584cdd81f256d0ab0e7d548afa07fac511cea344d80c20e46af219505100f442fb38a0f9d485fc2c312818df382d1a36b41e64c35dc3b221354e1c0540e7768803da8d12103f304a758378a393c7bab6aeedce172f948ad2698eb0b052616f1556805180c8ff2888bb5342ecc198031e7733f27d47caea4e6f298d7807a923703cee4189b2b52cd394bdad938d8e79c2871105549b40d9b667581e0cde2187b30655a73c4a8ddbdf9bc6c1ed45edc180e0e0e2fdf1c2a7c15b65f16d0aa2006f3d7036ee4d09af15a851e3330dec39065100b519b4cef6a1f6ffcf10d96fb96b41d524ebf52a115214802dcc88035b10ae47d6390fba3462e55905183859483dc6c9eb4cfdf67c51732516f48d632ba11f36e12db04922e828b7cf9ec88c435b449d49278bc1de5a1178dce6e28b42abc524d5ca4880fb18805b4c09ae0d28dda23a38c767142958a5f443c1f6ac8d55424cb4bb4f6381959551826b6bddd8f3d13830e51282d54114704d03a3494ba8ed2c59cd1935dfec13bde3e096528f0fccb1604d64de77f18e02c0a3451fb469a64bb87b9957fa13fcfc51c7a722b665b6cba9523cad91cd63c7d444beead338cd97c1a985d969bb1fb353d6a7d99ea7c564fb9ed2909de6fcb86c4f9dc2ec80fec46c1f931eb37d55b5d99edbccd9be1a8ad9699527d9be3c60d9befa97d99ea6ef65fb9ab396eddbf1a4d3199fa5949d30a49d9dd45b93ad1d61cbd68e996423330ab2934cc8c84606a8b2533879b3d31a7dcef6559967fbe83467a739989b9dd66c9f6c0f6db8f8fc7ffdbcfd5c3effbffcfff3a9f9b97c6afebe1c023ffc8cffb1db45cbc398df65afc4e07555f2f599c3add6894b87ee093a388f8154ed1f9d36cd1d2da4365e22984e2b6928982e576112cebc48e25c0070ae3009677e24711e0a70ae3409674124715e0b70ae3209e78848e27c14e0aca41e7f5a20ab182756bb41c55f23c3d7810adf472c8e6fbf30ac71296a8f507d6e8d8574385b51e1bc06e0ac3209674124719e0e70569b84736424717e0a70d69884b33092381f07386b4dc2393c923867019cab4dc2991f499cb500e71a9370e64512e72280732d25ce4e12e762e933726fdc64ab6e6f8c964b0732930ae43f00e43aea59c4ca5be8d5abcddfaf12ef46af27341e80dd9f126c4f06dddcde8779a20cb727807b00f564da64bd76288ed7f464289b52a1ec037aeceba9276f2c10adcbd0fbebdda8e0dd02ecf0c030e08d0a1f1e99e53d0be01d14c6d61b581dae624a9a8107c58830b60419f8604a8c9d5360749685a42e0e329bfc01d8e42126c11c1941983f0298879a04b3208230bf05300f3309e68808c2fc0ec03cdc2498791184f91e80798449300907d0c8607e06601e69124c42e70619cc7700cca34c8219c58ee2bb00e60693608e8a20ccdf01cca34d82393a8230ff00308fa1843948c2acb05eaa1057ddec4a7fa70092ba8dc9262a1c013a9dc752226f21902f131369ed89bd4b9966a14f047c96ad80951ed7903e4be7def884d6770015cad5c0fa3652a21c9090e14b84b0294c1d9a3dc1fa9f5be76ae155af65c936ee27854d56bace05b08f0fc36ebd55555144d91d14012750a2dc565304783d829114ed062ab49381959e486da5e3c5baa55572b5063f9f800fb3ad942bb8d41a167b6550f42aaac6c04a4f0a6367e7e1d6ff2b64e025a27ee74fa33cb471084078721808476e7108ef00084fa13f43c11e3f57d7f14205fbf0bf288f93df06209e6ad2ec76d239716438b70795cc6926e1249dc445867331c079ba493849a71892e13c19e03cc3249ca443c164386f0438cf6cc8feba732e31e108517b2a948f03949bc25915941bfe4419324b7c1fd4e2679933db2d8aaee2b1c012cf0e03259cee3addea1e4e95cbfe97581fad0da36d49867235b0ca73e88730a0f377015b2ed04d108bee974b5153ac6b19e3a707476f22616b00f3dc303c4335627392eabac10ab52381baeafc9aa4950f19dab300daf3c2186af3baf282b0fc245b77b11d8079be4930090781c9608e02302f300926e1942e32987900e68526c1249c6c4806331bc0bcc8249884d360c9608e04302f3609661417fe8d00302f310926e1942e3298bd01cc4b4d824938024906b30b807999493009a7c192c11c00605e6e124cc21e1019cc3e00e6159430b358a2ffc8df5c38c2fa9d6c2edc1ec0a7746543cee574fbdd094b51325f677f60ab57990493b07e27839903605e1d86df9d7b3b578b09b17c83db90a62090e1db1ae0bbc68c05aa84d50fd902d5b6a07cbc36ac534913676a7261f16d25a23c35e6096097d78531bb28778b9b5d743040787d18080bb73884a301c21bcc6e55123a87c95a9515a0d4bc319c31f3d1e18f9993cd076e02f0dd14d6f4c1f8402f1cab241fe2251b3a3b0864f19bcd99fa1fc515e76300ca5bc26a04a53ae121ca535b0b01d0cd66aca598c8f85efe95c286ed4322489d6fef52a1dd0ccace5b4ddaab90744f6c32f7dbe5c0526f330927e90e0964388f07386f3709e7c848e27c03e0bcc3249c8591c4790fc079a7493849cf6221c3390de0bccb249ca4878790e15c0570de6d124ed2a36dc870ee0970de43dda8f77688dd1ca11a3f468fb0513f950ae87000f4de30f6d36c80c343c85c1ecb01bcfb28e16dc3bcf6889c5b4d10ce37fa880aea81a02f74bf8950099d216450d703a80f98089570ce2619d46900ea83264225ace1c9a0ee08a03e642254c2016132a86300d4874d844a38d7830cea0800f51113a112ce4622833a1c407d94126a3e4b1c00712eccb29dcbf641b176449cc7ce3acfdb8e9f535c2c5ab46a2480301186522502373895088f8531256cb81c16d11d661cd2a83dd9b0f2d700e6e3e6ac258ee25ef185a07078229c11fa06383b830cdfafc0129f3477c92be18c64b271fbe701daa728d1b61441f3fabd56f8a2260a80e58c707f4e3268ed01b4a7cdd9929774a724b2ccbd0ec07cc62498513c47e32800f359936046f11c8d1a00f3399360467156d31a00f379936046f11c8da500e60b26c18ce2391acb00cc174d8219c57d8b6700982f9904338ae768cc04305f36096614cfd1d80060be6212cc286e8e763480f9aad92b3aa27866463fe02f7a8d126f6b89d7de67ae42b83e6cd9e5949ba3919d51cd805dbe1e4626cfdd821dc05f02986f50c21cc89c6767f00df32b99eebc812dfb6482a740b67f9312788e0b3877c855683056fb403edefabb4ad83e29fc176244f0cf01f0df0a7b958877377314f755dc01a07d3bac154d3344c9bbdc35da3949b89c6b849546774553575032bf4309b44dd2f641351dba1654e83200ba771b72a162f4b7b1ea0050be17c6a86601db92f60c990df0fdcfdc6589849649b62cf17450e1bc6fd2f906a47e28324b1d04707e6012cebc48e2dc13e0fcd0249cf991c4b93fc0f9914938490f6f26c3793ec0f9b14938474412e78300e7279438fbb0c4dd1c26b3b58c4faaad656ad1d72cebf352c6bd53730458fb1cc28a70fa4364a7c66c059a529f9ab458714424f7f4be12e0fccc249c0591c47902c0f9b94938474612e7db00e71726e12c8c24ce0700ce2f4dc2493a698c0c6711c0f9954938f32389733f80f36b9370e64512e75e00e7376179e2e78a5665ad25793ce3275fcf979b11948acd08ca22ed89df1b00fdd69c4532519c87370cf494be0b6bec7eb57020f3ed311689aea67a29ea5bae9600bbfc3e8ced311ae0144dbaa31f01bc1fcc5d6f445801910d055f04d0fe68ce2c3cd2a63b999d760425e64f26c18ce202854e00e6cf26c18ce202853600e62f26c18c62c3a80380f9ab4930a3b840a11580f99b4930a3b840a13580f97b18adcc91e1b732e9f64e064da13f28e1f562b0896e5ff9a8cf1ca69fb7cc478dcac5d3d248f7cdbf0280ff0cc33a1be05404b286fa7300de5ff4e5e432cdbef3732d268bd962a9d012b155251fa98c9e25b60430ff36776e3161154466a7a34115f48f39074f44b1d13e1058e9bf664c48d4adec20444bb6b2e37060a5ff9934a98674f92159795a0470b24606e1cc8b24ce6a80336612cefc48e2dc0470669884b3209238ef05381b51e2ec9c02a7bb868fe22af8750066639360467115fcc10066a64930a3b80fd80a00b3894930a3b80f581580d9d42498511c665b0660363309661487d9ca01cce626c18c628f7d0980d9c22498511c665b0a60b63409661487d94a01cc5626c18ce2305b1980d99a12664f0d4cbd636eaafc24b4733bfa53c1bd07c06d63325cc20a8a0ceedd006e5b93e112160b6470ef0470db990c97b00223835b09e0b637192e6127800cee0300ee5626c325ecae92c1bd0fc0ed400937d8be2284764b3665e73680b6a3499e7dd2c9e0649efd7c80b393493849fd54643817029c5b9b849374e92119ce2301cece26e1245d054f86f37a80b38b493849f76820c3f904c0d99512e75612e708ebff154cad2ee33b8c447d8ddc392c8eb01b2542b5354b3a0da590b655e55e1012c8c7003bdd8612720fe6dcd3b64cee7d338ba91d6f9cc5403c2aa460c9f6bc290160bb5382cd7281ad1053756b8498f864dd645ed7283ab06701bc3d28f1a69a571a9a2be5002a94df8372765b4a94bd04ca22eba5390218dfa576b5fc3c6ead0bd872019c1f1db0d8fab7fdfb14eb5a668925dcf59eac2dd01c00ee196651b0d47a75cbf7b3ae0245411625def8e99d235ced852837b37e01d6d92b8c92d4db5060142ba5eec0127b53a2ec9802a58a2969861e44d5263d0960ec1346790931fa3bbd86d04b4a766ec83c80b76f180ee8f4b6cf209c714ab6dae9755096f60ba300c05aa5f10280b01c252b00fe0618fb5362e4e72bcd96fe26b5c55091b04c9eeda3d7d26c07c00d08c3fe72eb6cb054b431ed5d6ca3bef5ffed006336f5ec280e6c9208b88cd95b5df157f7179bafd938e7885ff9f25ac265de3b51c1cc0730073664fb32b49e0e594ffd0c50730f0a03656e127f52b49dcb4f02ab1c1c867fbe608bf3cf2f01088784e13ae6d6385934776a8512d3ad4f168bf272165b239c1a55ac5ab4352b599437c62800608736a46fd3d9238fe2429ba900e5304a946a8f9182f03d4364765805e0e5843124ec7573df5194b537d9e6be8d40ed9d6b124ed2933bc8705e00ac73b8493849cf9521c37904c0996712ce9191c4f932c0996f124ed29decc870de0c7016988493f4c438329c9300ce1126e1243de28c0ce70a80b3d0249ca4ebe9c870ee0e708e0c6340379f6d4907974e00f84699349373386517920e2768b68f360927e9d6176438f70538c79884333f92384f0538b7330967412471de04708ea5c4d94c0828b3aa1d7bd4874b26c34536c9b509a86ab6a79f3a189fd9c66d6c1d9b625dcb45ad6d2b94dc220947c2c9ecf142608f3b50021ec0125dc1ced91af6dcf715e2dfdc0b5f2b444e1616cca3552ca885307d6b0215ec61c09a770c6722615ef8ee62b279981f027ce31a72a037b4fe3959b9fa18c8f6e3c3189de4436b53191f2ee3836a4bc5f86455a407d12a81354e30675a6b1437a5dc0e58e3444a949d189f8ec5ab9352a69605609362aa2398ad9b019b9c64eecccb28ee337f06403b398c0dadbc8d99e74772afcfc700cc2926c18ce214845700cca926c18ce25e9f8f0098d34c8219c5bd3e1f05308b4c8219c5bd3e1f04307732096614f7fa7c18c0dcd92498515c95762f8039dd249851dcebf33e0073864930a3d8b17c15c09c6912cc289e76f0268039cbec5593847d22b25593bb0227c86c4abcfd9873a863b1e8c3f39d0fa632bfcbf9a3b8b3e77500f42ed4dea6d46ee44231a59b10642615c8d300c839610cce4190b6db987b9456b29dc4585165d2994a8480e92674831277ae39eb34a2d8af1f0a50169b34836e04655b80cc326f0038e7998493f48833329ce7029cf34dc2393292387f063877350967612471be0070ee66124ed23d3cc870ee0a70ee6e124ed26e2919cec300ce3d4cc2497aa62119ce3280734f4a9cfd99b31bba88250e157bdf4d9eb0794fb69bfc33a0ffb45718a3f5d06ebda3251c2c21437b0b40bb3725dade2c3ebf495d67317b4b153e95918b851eaac9222a6542d1d248cf7ffa021414fb5022e6376a0fa5e8cd1b690b302d30a97a1a4599b1c9aaa7e620632f3409e78848e2bc1058678949380b2289f3588073914938474612e76b00e7629370164612e7ad0067a94938874712e76480b3cc249ca4f39bc870ae043897988493f46868329c7b009c4b29717667ce7e3ce7502b1c09ee4321b684f5727d41fb735943bb47bccfb927444dd6733a01a02e0f638dd228b6a5eda078372804f60dc3c3a4acb55ad81f2f02a6487865dac90fd13d7e672f609dcbcd59fe15c569e2b900654518559572d2c5f7f774bae8d60acf68d41d749f80ccbfc2dcc5608473f5c8aaa61b01da959468d5ae9fc35d454008951219bced01bc5566cf23255cda40368f740e284d2bc3e847c13dbc75593cda4da8a780b5ee478973a0ab095563bd5aa91d90dbb247459f04f65b15f6a8a8f78a8bb068202b796b00da6a4ab47d5db65cc1e09e0f5bfa04f38900738d19e3fac5a2fce5537b9708712b18e934de0d5468cf03686bc3d9416754f84d2fb2738f3201bed5e64c288fe26aa89d41bb604d18ad585596f28aa8d4b58bc996e767ed0a2c75ad49db0e928e5591e11c0c70ae330927e9e00a19cebd01cefd4dc2493af44786f32080f300937092ce4221c37931c0b9de249ca473a4c8703e04701e68d2c0f408caed8ac806a6af050da7834cc249baa13019ce4d00e7c126e11c19499c9f039c879884b33092389f06380f350927e9510164387701380f330927e9ce796438f707380f370927e9c90b643817039c4750e21cccb01d4c747e4eef1e514247099947f41ad03a3d321c8f68030c4693f9ea3f00367b541823f93ce0257280cf96bd52be123d1f680cc0dbd0f03be9a89a3d7a93c9f240263eda1490519c95b70d00798c292009878ac940ee03401e6b0a4842ef1119c8dd00c8e34c0149384b940ce47100e4465340128ea193813c04803cde149084fd1d329017009027980292703a2d19c88d00e489a680249c944006f26a00f2245340126e1c4c06f22a00f2647356774471dffa0100e5299428d50973ca2bb44a788466b135c2df135f2fe775f23761ff876cf2f71d00f6a994b03b333f13bc4644f2949a0c00f334936046f1949aa600e6e926c18ce26eb60cc03cc32498515c7e180330cf340966146bfb7f591ce626936046f1949aff00ccb34c8219c5536afe0430cf360966144fa9f90bc03cc72498513ca5a619a880ce35096614d765b40030cfa31ed08d1f4e5e2481965b1ff33364f96764f0c81608b601d9fa7c4a783d98b79d18568a00a2bf59ea5b00ec0561808defc5b0654f7fa900602fa404db87b997b4da2bdee3fbdb70817c224cf252358a4da75d40997a51987b89d940978a4c5fc426699dccd13d3fe95880f56273566346b13dda0f14039798bbe49a102d5909bb1658e9a56166fe724b89f9a24d50cbdcbb8785b649c00154584f01582f0b63e2e188f0676d9265f7ab4176bf3c8c1e93b7e1b9e191ec7ece079678854930a3d8fddc1dc0bcd22498511c809b0e605e6512cc280ec0cd0430af3609661407e0760230af3109661407e0760630af3509661407e0a60098d79904338a03705301cceb4d8219452fd23800f306936046d1e1311ec0bcd10c87c74496b8012561dd4eb601e5ad00ed4d266d9f425abb930d7d8c02386f3609675e24712e02386f3109677e24711e0f706e360967412471de0070de6a124ed2a98964389f06386f0b63713f5fafb11af8dc43d9bb9b0cdf3816c7777b18d6c8a7334c657cb472aeb03c2eaed431a52184490c648b0bbe0138ef08a3cd89ade42862eea3a5e07aa328ae5bbf1d64f43b29d17664fc30dd1279421717b592f1ed53aa44b3bd9ced2facb65cdc452fc367020bbd8b12634f90e1ede9090b2c75ad6e9918912c17d3c2c633be412fef219558022a58d4e730cd0170ef0e67a79991e18f5992752b1b832c7e0f25be2c57e9b9d47a75cbdf747f39c07b6f1895537aa71d45f1d888f340c6bf8fba724ad6a8573125b550b2cdf74f04167a7f180500c4e86fe92ba1db8eac755a0cf03e606e0140384384ac00781114000f865100601315e3050061394a5600b40316fa1025c65e02e33491cde7885abd4cb6494b8528354b79b980cd8b83c5d6bf6df153ac6b99e86f45af85da02d8e9c36697b084739bc84ad8fd80fd3ed290c5c04451ae129f6b3c8daa18d81a607c9412635fe6ec08f006ff1ae0468176b9e5b9542e02981f0b63b819fa02946325ee6a8976dfbf1328591fa784a93f0551d794dab24f413c0b58ef1361adc453d69bbae5105d4b9e082cf9494ab0ea54f97cb6a59d2a7f2640f89439eb96a238c3790a40f93425cade3e50ceb5c2ac1065eb2ceb5f6a34a09ab624dd89aab9d51994a4cf5022eeeaaaba2ac550cab2a4361bc5797c0700a0cf8631aaeaf5d484519438c94e4df80d1401cf998493749b17329ce7039ccf9b84b32092380f07385f3009e7c848e27c09e07cd1249c8591c47913c0f99249384967e893e1dc11e07cd9249cf991c4590e70be6212cebc48e2dc0de07c358c9e7baef8dbbef2c93d7c4e5fb49d1f0b00c2d7c2e8b963f6185a5949e65e7e04f4825e6f4894ce0e651457268f0428df082b63db8e102e68adccd421b8e43ea2427827c8d86f863134c71196d5ed7ea77e8eba67f37e80f1ad70e7906ce9f3f33a03b46f9b3b3d87102dd9f49c9300da77c2283ff3b6b8218dbe00e1bbe1cc6d6e808536643343b605f8de0b075f81ab5114e5754a1f037cff0b63aa82b701b5bc480ea95d0260be6f12cc2836cd2f05303f30096614370d3a0dc0fcd0249851dc34e86200f32393604671d3a05300cc8f4d8219c54d834e05303f31096614271b1c03607e6a12cc286e1a743280f9994930a3b86dea6500e6e726c18ce2b6a9d701985f98bd728330e393f5cf87000ffb9761b88787d7d96ba9f06ada5308a3be9fc85dc04abf32694097f4dc23b201ddeb01ceaf4dc25910499c67039cdf988473642471fe04707e6b12cec248e27c06e0fcce249ca44bb2c970ce0738bf3709677e24711e0070fe60124ed2be1119ce5280f3474a9cea7093bcf04783c8fa42fb02783f8531520e2dd1fbaa4ac27e10d9aaca9b413fe8e730965bf169329318df5cadd2ea4c96c9fe90bdc8aa4c082c1102e0b66bd52cca530c7b01ebfd258c92142b4713774f26f47f92e11c082cf657937092ba93c970ce00387f330927e90c77329c6b00cedf4dc249bad88a0ce7d900e71f26e1245d0a4886f37e80f34f931af5a49b519335eaaf0235fb5f26e124dd2a9d0ce78900e7df26e11c19499cff0338ff3109676124713e0470fe6b124ed24350c8704e0738ff330927e9a91d6438ab014ed6d8209ca473e9c870ee0370c62871ba77f7aa14ae91528b075fd8a2e2195f4d844d73186ffdab4a8ccc932e86f9234604fc61d032cda004de89259f3be22c59c94092adc2cc0296dbc81490515cceda11806c6c0a48c2d99f64200f0520334d01493827990ce46000b2892920096b7732905b81caa6a9292009d76f9081dc082cb21925c85c5733a9165db28aaf1c4e1cb20ba9d1740f55a3e96860c7cd29f1ab09b75ebda38423f464bed1fe00660b936012ce5e2683990d60b634096614bdf65d00cc5626c124ec1f91c1ec0660b6360926618b940c660f00b38d493009fb496430b70530db9a0493b0654a06b32780d9ce2498513c74370bc06c6f124cc2dd18e8a68301985b9904937037063298bd01cc0e9430f14321a6587f9733fb30d3624b00171cfd4321e6b138d88e9460bb0bb0d3ad17168b999fcea3a11be83c2eb265874d01d64e9458fded9118c5bd437240d6df9a1265b0edd308eb7bb2edd3ae0056da9912adf7d30d092d94ec74c3f6c042bb5062ccd264767f4bb8093b9f6465e96c80b72b25de0ea0ee5f2dea76be48c13ec03ca405dc0750415c08b27a374a88bd02db28e97205322bad0556ba8de980a3b893c30600b83b256035f3097601b0762b79c39f0c670f5020f408a3599568af5e1a5651dc95b60058eab66134feb16695b3f11fc51dc506012bed1946bf3f9dc63fe1c01d998d1e07c066990a368a27c61f09c0f632152c61514006760700b6b7a96009fb5764607301d83ea682256cb192811d02c0f635156c141b58dd00d87ea682251c662103bb1e80ed6f2a58c2c14032b06b01d801a6828da20bbb1880cd36152ca1539b0cec5c007660d8fe01fdc4de62e17de51ddd2542dc0ada96ec062ab4e702ffc0204ab4eacc9011ac018e5c21b3cc0381650e36c7bd12c59d9c7702288784e153f53ee3348a53cb27818c3dd4249ca47be991e15c09700e330927e94e8f6438cf0438734cc249bae930dd96d800672e25ce54f3fbdc5efe281e5d75058039dc2498513cbaea4a0033cf2498519c7e761980996f12cc281e5d753980596012cc281e5d75098039c22498511c68be14c02c340966148fae3a0cc01c6912cc281e5d759480d934d3257c4a82f089a251cd9bd58b597c47e5616c2a2b13ee330e62b1753f5df82f6bd8420bc79ed67ffe52606feb3fddf398d8917c325bcb2ac5532eaf54c85e61fdca35ab66b9fdac57467183682a0d225b3859c65bcc6bac77e6b03211fa3a3697d93b46cfb2fe560b2f6a05926c319978b6f5ac96f1696e3c84959626cb589588b17347e9ec5833c1c93eb0bd4a3a15b3a5aeea10f722e9de29b7e25c2234a9b2de692cc2b1bb2ad9b1d6e04e4d0a2d127edf6aa1554b110f4ebe5678da260a2f70b92589275e2cd65ea617d7758688678915bf12712dae9398c34f218f155a7fd9dee561757ee561725f8315f24e3d4f2d93a7567269a37992c4f479b4a2deec2c558cecacc1bf5f22d6819409a94529639a3a7eb8cdb64a922a3903785a6cc9f11fc3d35d26bb30d3cec28ce759296f0b2fb3326095f56faed4a499192cf3ff01837fe2ce79e20300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/47cd8e57b43f0b84cb9b143e25962856.asset.meta b/Assets/SerializedUdonPrograms/47cd8e57b43f0b84cb9b143e25962856.asset.meta new file mode 100644 index 0000000..1447116 --- /dev/null +++ b/Assets/SerializedUdonPrograms/47cd8e57b43f0b84cb9b143e25962856.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 43895b49be0f4f34e809dbc4c6312513 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/48f8a7528456bda4fb4810a74ea6018c.asset b/Assets/SerializedUdonPrograms/48f8a7528456bda4fb4810a74ea6018c.asset new file mode 100644 index 0000000..83b6088 --- /dev/null +++ b/Assets/SerializedUdonPrograms/48f8a7528456bda4fb4810a74ea6018c.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 48f8a7528456bda4fb4810a74ea6018c + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec5d077c14c5f79fbdd03bd21524f42025f422454a289116201405854012888462129aa282228a8262c78e8a1d7bc3deb0f7de7befbdb7ffceeccceddbcdbcbb9b9b9b6397ff0f3fb2ecdeee77defbce9b376f7a249bd87facaef65fd3c91432927427d34821594a96d8ff1a695f17dbff3977e2791e29b3af0becbf0becdfba92cc385fd23f9dace6f6dfb9f65d39a9b0bf5c4ee6dbd712f6fb545264ff3bd7feb6c8bea34f8bedff8becb7ac2af647d3480e994426926656933810d3d947e5fc9945f5b26ad87f8f20abed5f8b985034916cf65333fbafa9f62fe5ecb7c5b6d0e2bd59e410a6d662fbb7f9f63765a4d4c69cc7106bb43c83b07f10e7d29d5fb3f9b59bfd7f4dfeef0cfeef1afcdff0fdaafcda23c1f77b82ef6a827f5386b6c5f8be97738d0cb1afd5ecc715e09e7efb357fafb78317591803ab2fbff6e3d7fe1c737902f257e7d70171f48d8531106025c2590d7e1dc4affb7379572499fe108723eb028047b91c0ae41904d2ae097ea7cf066be82ef2f1005f3e1ee0e463642bcfbf8ff9fb22cd61fc7a00c7b6df69c4bf25c3f9b54f1cb94638dfb1bc13366ba799b18cdf8fe4d71c7e1dc5651bce655d09ee756511793a9a630ee369ac923c17efd3df57f3fb31fc3ad6975fb9fcbd23f8fd8109ca9388fd099946f0348e04f7368f55e6c6c012f93ed297ef23f9b75b1c1eabecf4e903ec4f8a3b8ee3ad49408faefcda05608e77d29d786602df4fe4d709fc3ac9cdff893f7b7f8be470b98e02f7b69e55d7fbf4db2f8e7e22ed2e4007f1fe647ecde3d729ae3c93d6268099efbc5be3017e3fcd91b15a4be77935510e844d4f8d23abc8e351be3c1ec5712b38aef03bd39d7b2b8bb83e55e0d0ef8ff6e18ef6e18ee6b8c2f71f98a09c33f8f5607e3d845f67bbfce555e1cf0ee2d7593ccd31c4eb0b44399ce97edb74ae226fb1f2e850e2adcffaf074c726683773f8b56682ef8b77e66ac85cc0afb5124cb316bfced348b3b6630b357ef7d9c2b43898f31d7e6bac0132d8383545392de4d7227e2de6fc0bbfb312dcc7b38378b22ce0b2087f3bd791a556737e2f6ca0c42b0b39cc27d331a9932922ea93b5e09e5e0fe4cfd7817b2aeb4c279d5a4f73cc45fc5aea9379b1399959a86e7f57b731b08d44be8b655f4b1dfd6a0f70b06bcfe6cf45ec20642b70e5ae311e7c2be448a43c94712e26f8389ec06510dc96fbde3b16dcd3eb78373df66ffbdb3ac2b67a81e7f4dbe3c03dfdfdf004655d4e2adb2cc59904d29ec4d3e6febfce56feee0a52b9ecc9bea5d789e0d9448e2762c495a4723d26dea3baad07f7f4f78a04755b2591cf4eb7eed818df8af84cf89f39ae3d547f9d3fe3b159248f78cb96a8c707badf58a2dc1ce9dcd717b2f06b6432e065b2235fbd1efc1d1e7b9075445ecf1e0378e0e591ac75d36e29e43d3a465a42be637d7a2f75716a6772d9851fe3b6162d33fe77e933e17f4fe4d793f9f524f7dd299bf8b313f87523976d0af1f866b2013ca7d7a9fcf7e3c13d7def7817bb89b05191869055969f9b7dbacb7c402c3b3bc57977b278f75487dbfadb396f4ffb64584362dbefbe5caf7ce2b5ff7c8efbb783db40d8f1167e3d83bf07fc6484972572baabd33051c79e06706b827f2722632c3ece76d289b63bcee1579127b30176379eee7457be68ec7616f88ddef3188e9c493c754e4c59cee5d7ba71f4e90edea3d7f334f48ff55b357ebd90eb368378db62339c3c6ef8750cac8b1c9e9a8bf6d0c5ce377bfdcdefb739bf3714f67109d089a601eae606a27c5cca7f3b08e8cddb549183c1331efb4766019b99c97fbbcc973f1b7cbf6f0718b2df2f0732c87ebf823f3fc191bd91787ea54f97337db21e4c3cfe825c5559d7c8c1beb485df4a242fafe6dfcef6e5e56c275f1aed8c81758d3c2f1b3fceefaff5e5e50e5f5e1e22c9cbebf86f87827c3b803f9b432ae7ef5cc083684b5d8fe4a5f8fd06802bfbfd462083ecf79bbc79d9a43d7f7e339297507e9897b754d63532c797f6c604f2f2367ebd955f65f1ebedc4f5e314f7a40470efe0d7e363e0f6f2e19e9c00ee9dfcba3306ee5d88bcc9a4276c5df4211510afadd37bdb6e9b6e8f81753791da7a33c1f93dc46bebf712afad8bf625b48ffbf86ff3ddfc27dc2f440a49655b2f0276c2e355723f7807daaaf8fd01802bfbfd412083ecf78788c7d69b37e0cf1f26725b87f2435bdf5559d748a12f6d81152b2f1ff1f12cf82d26def64ab1933fcd05a6888f2e26b1ebc6471dfc23451beb318eb780e36f06f716ef1b81e92ee4e97eece0b410ed843afc398f7f5adcc39f3fced313f1c513ce7b2ddafbde7bd2b95f23dae14ffbf87fc6672b87b9f616d5e529f01bd46d11f1c624cff2e7a520af16816730af8627c8eb73fcfabc8fbf128e770ab8a7efbde8cabf46d41b2ff0ebb9ee6f0d455c2ff2b70e90e325b9ad3059419e29c74842e797e3e8ace2931613af4f5aecd8c13e036260bdcedf991de39d37f9f52d7e7d83e32f21de76c812fefbdbfc7ea9ef77d18fb0d3e5bec9f7400e814dbf393501fddfe1d77739fe32feed16706febd672ae9356cb85fc3a977ff79e0fe77d57ae635afabee993803c267e13fd4a8713af8f38dcd1ad9568130bdb3d3a8e3d7dc0af1ff2eb5a8e5746bcfd81bc0f27663f56bcb462e815a920debe0331fef411bf2fe7bf8b36da0adffb62ec90fbc6c872dffbab7cef8b71a94ff8fd4aeffbe4538043ef3f73758bf07e2af2397826dae65fb8fcb4e63e26b2da9b36f99278db83a2cd77047fef74f01de440fc2edab547fa745ac3efcf04f7f47a940ff7481f5747f9708ff6c9fb15bf7ecbafdfb83a1e5301be017cb2f16b8019d3a63fe318c7f06fce02f7b64db7fe3c0686f85670b08e639c0dee6d8ccc4c47decc18e53672ac8fbfb5e039bd1ec77f3f07dc53ec586d232e7b64bd4fb7f5fcdb5d097c2bfce5069f6e1b3806afffdb348881f51dbf0aff2af250d82cc53b5192af4237defe8e9cc065d80aee6d19daf03624f981c86dfb78dff7e77abf6f2b62de1ff9f5279f6c1b89b70fec177efd15b749f29b4f76d0d71695ef679f7ca24d20e43e99a77b1e90433ca7d74dc45ba7891886f7294536fb7e177d6bb2b1f65865a409bffe4192f6b1e44f809548df4f537efd4b23cdbf0156226936e3d77f34d2fc17602592a688f7fe4b3e4dfacf285602695a117ecd706ca0edf3207fe9738b5f79df5f84c6b2d48ece07f7224fb91db5e3e343169fc364558b8d1d3995635e00ee11cc98baf0b264f1714faba6fb7d9fc1fc191fb3b2787fa255c77da72fefebb0eaf12bf763567d80c3fb4fac865cd62d5cf60bc1bdc87b213bb73d6b2ffe1bbdda7c76e432454ee318bcffb0639e5746f67b4df06f91cf1cbf3d1f2bb31a39f75d79df83d598a7237c1a8fc5ac38f3a32c5ec6ada631f4e7e5c36a8e732de2b178e9c52c139cab2ceecf22a7134fdd68b5e01ce780df85afa0f767f0f72f06f7365e271ed75b7bf3eb3eb8ae528e5a72bc7340ded1fbb3bdf660b5e2f2ed04bf0bbf42efb7f2f7b7817b7a3d973fbf04a4239ed3eb79c45b66ce43ecc2be7616e5625f44c6d649ca788e5c46a96d66caf32f9a5f7fbbdfb4e375bdd5865f797f417bd13ff51f7fdecefda69b28bb6df93b837cf97f29b8b7f3bf4ba1ef7d517e455fd3b9e01ebedfc1fb5de42cfefe658e7d44785c657524b17d082da7e2b74e716c10becbdb55d67efcdad97db7eb5cfe8ccf69b2bae2366df1b8022dbf304de15f63f9836c053c3e8e6af58c81d74b01af37bff6739ef7e6318fc5636c8bcf4bb5faf33c3b9f78e746f0ba4cd6a6b406c491833e1b18471f28ab9813ea2b83d13227a93762d67983801d501c3186b31ddcd3df25f55c4c5ce1c33b12d7778bb9759dc03351a73426c9fb785e5622bebeab88f0d91711ef782bbdb7cb64b752479f6e9b805cf43adaf7dd91e09e5e2f746565ffa6583b3996a8ab87783123db5cfe06578067f4dda1000bfa1a8edd4370c97d47e44afedee5e01eca7d894fee4b1c9ceebc1d1d2dd76de3702ecbaf0ededf2257f1b4ae90fc4e9f5f09dea3d7cbf873786fcb962dfc231f0fb286f1eb707e1dc1dfbf9a78cbded53c3d493b24ea3be3e81995ed728e7d35b8f7dbb0b0b5ed3e5bdbcef578c09141e49935925f73e4fa58a37c7a9d4752a69735da6b6fc2cee2d9490f11ef75e0bf5fa368372d81dd50dc4b39ceb5e01edac23a706fa7dfb38a23774f1e27587c2ea735d6cb61145fc126fc659cddd36f5729da0cd7c1ca057601c788c4ef623ede09bee7e37c36b703dc0b7baa09fe6d73d24b8c6fb4017ad6f4e18e07efc8e49900e4b179e925e2583e07cbcaf3be2f9b7b6b4df2e5c32c204fa26553b45dae90e8900b7e033aa42aef62d65bc2c627278f11add3a66860b4e018fd3574a909b012e93f106d198d79d12c76115889a42962d67c8d34eb00ac44fa2ce85c1c18e7f1b82e5aa7517f07fb47e9bd6dfb7dc578a3c8df38f3562d3ede6bf1794e16986f63f171294bccb7b1e559cbcbb77590935ebfae8ae9f13918d6a1fc2ae64b5c4bbc6320dc0fc71a038997564c7e0b1ccc3ea5c09ee8ef2256dd41bc6dea1d8ebefd856fe0e3ebd67c82fb0f112fc48aab8be4f96ccd8dc36331f21def178a5ce793ff3a2e3fef93b6f8f8adb530866c25ce7da761ce75609e2f2dfe6de47a5f5ad73b690d10ed8ac3e2e0707e2237f8706e7070068a3a958f6147e7b5fa6d43605705dff0b9a9d6121f5f58bbe946e2ad1f6e44d2a2df2c4d207f45df408c769390798068c71c9e9c4dc4b4f7723966d49f88395117837b9bfbfd453b56d834c63d2c9765716c777902bcad88c31bc56ec465bd997863b49b1dd9a96af03d4bd4c162fc7183ef77317628e6040b9f164f1f3e27dbe231aa25c6026f215e9f768b3e7731f3f868228da5ada392c71471723416ba95eb741db8b7b91e2cea01d15617e38bd77399667af122b7f1df6f00f7e2bb44eae4b640c764f95a0bb01249b395a3eb105126b8bd5962ccf276172722e6ebc9e63ec79249b4ffef205e9bbe83a7bdc6c11a22e6ba09bb392eb60e16b7758bdbb625e6dd89fc00f342a26d7fd1c7bed1c58eda1418df5b2fe204d1a7b91660f9d66446ee04728a677703fc4d3e19eef6a61bb98778db83f738bc0c1373315a7abf8bdc4bbcedba7b7d3cdfc77fbf11dcdb7843f9fcafa15ff3bc23c45b0eee077af8d3bc9f63dec4bf39dec13c80afff39e07dfe9c8f4f5a7c7cc93ad5877797244fee4a619e08ff16c7762262bee768700fda3442efe8ef7783df2987bcbd67f171234b8cef887ef134e91bd543f8a8e3b89c49ae85b7ce70f03deb2bed7c1e9ee93c1f2ee6adf1324ac01897b48c8a39989c17eb6c57877c6eafd6593c8df53c0d1eef5be738f7d6d76a6992fdbc79c7ee41de92ce3c3dd16728c649c45aa203134c27168f7c1cc212fd4a0fb858ecdfc9f8d1f39d77c76ce3f717387a8ce0f37c473c8f6358bc0d40dac748fb34076f641de7f948d18ee2fdaf168fa32c9e7eb43fe441e28d2f1fe4bfcb628258fa5d42bcb6bc96542edfb1bebfc279d7bf7e7be4dbcef31c113ff3be518bf73f5abcbf24f238f1c6368fc7d083dba275696c1bb144bfd22e90ffbb1cb97244ff37e7d1da0e7e877364c43ce58701c6c31ce37ddfb78f10ef3ca147c0fbb02ffe617e7d08603ee4608eeae3c37c947f7b33b817ef434cfefd68ae9725fa2f791f9bc5e32b69df96681b8bbeef59c45bdf88df7999b6ae97ff6e8975146d90efaf06bac1df6ff4be17b5855bc03dfd5ed626de0ed214fe5ce05ec6afb7b8df8d13edd39b13b421884f65798c78e7a53ee6f03e468c17df9ac2b4450ccb633f51562ad9ace0eb3c70af597662c6ad623cf582e431ac3b005622fd5762fd8788099e20deb8ed09271fc68a1853d463223ebbcf8b13799e78fda6f0dfb138db195b568bc70391278937d67e92cbf6b9839b2bca385fab613d90bab4591d237ccad3c43b6fe0691f074f116fdcf59cef7d3147bf1dbf7fd6c7f9b38e5eb97c8eb8f520a95c478af76a827fd3eb33e0d9330ece8199402e98ee33c43b4628de176d401177c6e1c8832b7cc5433e8c3bdc3c18c3e7d85adc5f8bba57f06789b8f408353962daf923120e6d5dc78979ff9c136b972be738110f3feafb2d5e5ac2bfbee0b3d717789a7cffa371c23e852dde1c07dfdfc67f9178dbf82f3af8e3c59cd7d1e03bd0c61f2ff87f8c7862f8687cff127f5ff8dca1e039bdbeecb39b9779ba02f7712f6ea5b1c25789b77cbccaafaf0139a13caff17b310e7c9bef794b60774ff8be7dc5cdcf685be515af5c96e8ff11f5db93fcfa54727ac46cc3c5cbe35876f52c91b6632670ff3751e4bbb0a7a7e3a495609b62a2e807167eccd7a6889b4eac3aaf868fd3d789d717f2b537135ff7bec7be4ba42f48ec2d21d6cc1c05ee6ddc4939c0b612c1adc2bf136306cffbf22456fe8975557c8f020bacbd3a61187fc6cb98f53297f32d579e085f5b84b637e93b6fc6919fb7bf236f13af6f7adbd12baf8f839b27dae9bcac9059b171add77cf8ef70fcdbc13dfd5db2b78325c68ddff26278e6e36fe438efbadf47e7b4f3b6b4f5a6fbdb097c8f02eb55f01dbd7f03e803e214e5b2c8db5ffe75aa9345df80686f9f1a87b7771c1cffbac4c96f2be2bcebe088758bd6fbcebd58b76889755c62aeea079c97f7bc3c587ccd53e47d6077ef8167f45dff9ac438b2499ff13505910f7c76f881a3ff14defe9f22ea1461871b63a725de8b7c08de13697de43e8bd6a11f033d3f02cfe8f5132edb1de0de962d7f980ff753fede4e9036bd7ec69fdf09ee81af897c4ebcfd5a02ef4b20d3e74e9a53858d7fe44be30be2aea5a8ea6cf7e6e1e10b80f529782630c4b7207d76a5cfefe279f0bb37cd787910b3dc88753a5ff9f2fd2bceedad4e9ad345f915f92f64ff86786313cea9f509fffd5be2ad93bf05dfd1ab58837529b8b7d39db6c5fb9e687347bee7efdf0deee9f507fefc1e9f7c3ff8e4bcd7fb9cbd57d3fb4d5407310ff326eff368ffc0675edd62b56fd06fef8b93b6e853e0659bd52bb1f2ba8d8fd79bc1bdcdeb4c518f7cceaf5ff2df7ff496198bdba4753df89d5e7f225eff14cf0ebe4ad00ebef3d9c1778ebc33b67adf0b831d44c4ba30593f4e9aec40946bd84e167ddc71f34ce449927976d0f8f0e559945759bb5837cf5a3bbc143dc07fffd6a7e7af483ef0f59091df7cf9f01bf88e5e7ff7e5c3ef4e7a07bfec7d2f9a0f7ff8f281afb98afc89e4c39f3e39eff53e4fa90ff57d1ff959e17bc93c8d085817a89a8fd1b4af4dee7bbf1d44fef2e5c32fc43b17ed1727df668bfe9e0efcf9dffcbdcbc13dfd7d900fe762702fe417ba7fef9531f21f6273bc6c513702f385dd8befe8bde5b539766fcb7ec858ef7b42d78c88d7e632f8dac28c0cb9cd6564f8e4bcd7fb3c303627fbfe1f3d9bcda8a261b322ed246d36d5369f21c65e84cdffebb3d57f1dbb9923e636739bcfa8eab579760f6d5e8623f417f56226ff16ac3164ffa6e9f1f91273b601bd65efd26b35f0ac1aff9eef4333e77d902ef2ee5c318ec0ebe48cc65c76b1875107dff3071cece8773cf6b2785c9101fa44a2e5a526919767a1572dafcd66d402dfd16b6de22dcf7c6fdf82e6def7a2e5b90ef196673e4f37a32e9197e7ba3e39eff53e4f6579ce106354d371cc7497f1bea2fdc4f776cca847f69c325ecfb195f984e3887ec878312aafa72c119f88b846b44556fa6ca83e62e3dc7f6634f0d94103f01dbd36f4d978432ef7dfdef7a236be97cfc6f91aed8c46888d37f2c979aff7794adb18620f8a993866ba6d3cd9b66ed0ec39e1b6b618d3f0c5efd13aea37f7fb4a31bb88d98e04f7b62d1e99e9c3e6df6534f1ca98c1d7e14763ff75e0dec629e6eb1f8bf9fecf47fceefd4eacc389eabe01e156e896ac0dfda6f77d54ef24bf8f8eb5255a7734f1e244db4a3e9f135deff097f77b11e347db54224eb914dcdbf9b37099f7bd687c2462fdbbc1bd9540db4cc8a9d036fbff96b7fef57aaa7e229a5e927ec65f8695fddc6f9adfffaaf7fd9ea67fb4acf3f59a194df9ef3bc03dbd5a6e1912eddcf297bd69a0ed695e0ee3b6a7ab116f6c52cd49a774abf7bd30b4a7a37dd03fba98d1673f012e05ffe3c1fbffab8bf0efdb68eaff93daf7feba90b5e56536ceebbc689b7d15b817dfd16b759f8df3b6f8d235def7a2362eda8a77837b7a8dd7c614722ab431ffbfdb96aa6d78d69ac77a1ff3c522bdffd545bb87bf369adfff3fe7dfd36604ed2b4bacf7f8d7fb1d1a1f88fa9f78cb57a2f141c54eef7b61880f44bd02cf14f97fed8fc11a85e87e1b2076fa5fd954fbdedf9f6389bdeafc7318fcfd8b487c438b0efb3dc9f866d56cef7bbb23bed19ec3f0bf329af41c8eff9547eff7a24f333ac718ce6fb0792ef29d2d1ab71f56b606c2e2bf3da6fe6d46332ecf5a704fafcdf9f375e09ef6d9beeec84d9b310c7338bf3e113b6d811b1175730b8e7f1ab8a7bf67003cfafb161c539acede3e7df6f6a61b113141ac7dd05fe4ef0a5f276cfa41704faf609f9e88f08faddc67197c4fa08c7d89c7d78a3ef38cd6e0ddd6e05d7acde4df1c09ee6d798e7edd872dbe6be3b53b764fe5aac6efdbf2dff9da1831073503ac9bc9680b9ed16b7bfecdc3e0de96e1283efff8e81b91b43af0ef76807b986647fefb2e704f752bf4be9fd189bff708b8171c439c477d383eb932c07ab40cb107c00b71ec95f32aca2dbb07e5f6a84caf4ef1f062cd4b8d54e757b11ee17d9e6667e2a9bbd93dfd3dd175c062ee9ad05dacb1d801eee97b5f272fbbf05b917867f1c6d2bfaea34b6fb10f0e3f773a12ef3c53d9382b8f2933ba10afffeae2d8c65abefe69dd309e06dfe33ac2c73b23625cb3af97fba8edf603b6c4f7058ad407cffaf1670ddc6711be6777a4a19b6f278afd69b8ffb4e0b97631f48af0f64446575f5ef2b50019dd802c7c6fdb8cee3e2eba3b5cacdbeec872acd8739ff70147842f6eeecabbb18e5c8e88a83f36207266fbe4e4fbe366f40072f2bd52327afbe4ecedc879ec789f9cc2a7efe39537f079960017163fe72fa32778266cba5765ce222dc177201fa2bfb70218b2df45dd7482efb9a857faf864ee03f2a626f877027cc4f423223eca54c788b4e1e96fe4f7a04eb3f8ba828c016e3e6ece01cfe8fba2deebcf757d8ca725eae981004fd435fb0339c57b830027830026bd0e26defa7cb063db1bfef6ca1efd6e08f1d6e77c1fde8ca1be323294e3cc06b2023ed93d6cc7edefd3439c8f7831b8b7f18e7fc0e16ac3cb887cc3bcf2457fdfdff7bb686f88b2381c70e9c71ceefd46604575d99f78eae0a86c83419a18f63039763c1e441a511c90efe25954be415ef9d67fefcd13b6ef4cb2e543e65ff8b95f192378ba67817b5bf613f85e02623d0e5b7f16cb5f71bc08dfd32422e2b0911cff71704faf39c413d766f8d633668ce2bfaf00f7b65c2756f87046fb7046fb781d433c6daee87763805ef4f7271cde4f3cd1ab4f3cbda53ea523bff29833c2e75745c4fcaab13ccdf3c0bdc5eb0bfa3cc639871131cf3097bfbb19dcd3ab18bb5f07ee6dde36e63bfa6d14f324782c1be9ecc315e77efbeb41b01f6a461ed0a726f8dd4abc1e8cae638b73ae4b643f9f7ee3b87ca7807bfa5e57378dcde20c41be877f8638477e1db8b7393969a1f3fec9623f3d714e90a85bf3802e3d7c724cf4c921ce6f97ac138d74f7f226d6846688b3c0c51a2119d7223db0376c86382b3c0eff19f929e0bf67627a477abb699c22ec839f3f903101c834815f27f9f2649293279b5a7adf8b2b1f8f29227d2579d6cf27fb649fec93f7cc3c93f2d4ce27ef34aec775e0dee67fb3e8331173f3daba726cbeca8b1511fd02b72aca22d69cf07647b4af643af1f695f03d8323035d19b688711c117f7549828bdebe7467fad2e5eb4a3266005b12b1098853d9eff42ae2677f1f0d587b9e310bbc4bafb38937a69bedf0bf658d0f5b7c7708f1c6747c9fe368bf89380fdadf4703cec4ce38143ca3d7b9c4db4733d791e1d4b59ceb7c24ad02e28deb0b7c69ce23de3e9a795cb71adef733e6136f1fcd7cc031c479d487e3932ba310e8c8fb8122a0bd23eda3e1bc46e304d1c6e1f1d729bbbc3ac5c393da99b0832260473c9ecb28063217f3eb02c48e168277178277e9b5c46747250e47a7bfefc316df1de6b3237ed66f44e49d38ebd76f47e0acdf8c45e019bd8ab3691f06f7b60ca7f1fd544edf89a425ce98dd01ee619ae28cd95de0be0ac0e3ef672c03b22d039cd3ab385bf549704fd3103625ce463d07dc57a92c73463948839f191a194062db98d85b6334b80736769ae817199c189ef759558b9d273796149102b28c64b34e6a1acd4d2753c8483bf69f460ac952b2c4fed748fbbad8fecfb913cfc5975d49669c6fd818391bddb3ff7462c95690d5f6a745ce196653ed9b72fb5191fd3ec5c8b5bfa920bd492f86bdd8fe6dbe8d53464a490999475ab0bdea45ea23d9df05f61b250cf4a98c4a49dc5929092a5ca9fd5f91fd5985fd2115b2dc7e3ec67eb2c4febfcc7e36dfbe1f6f5fe95773494f32cbfecf8b32dd4eb6942cb7eff2edbf9731bcb9b6d895df8ca7d221f653ff37536ccc254cbac5f61341e832fbbe94493895fdbd82495ac4a4cfb59f55d8cfa8360bc808fbba8aa55659f732fbdfb234f3396572190f517a6eb1a3004536e5d8da50e9b3992dfe2f4776478eb0e1a7a7329c6258259b452f2755ca89ff71e838193aa896cb317a32ca2ccfb35e249b8dbb4da9c4a0ba8e953594dbb7c3773fd227a62e72666876efc3347073b8fd299f2d987cf4c2ce55bdaaf526d92c546b1947b558c452bc2c765a9d8a0a55ab56e94105f5d36fc9e867435753d348bff35e097b4f3d03aab1cacf9b01ecd8ba7cdbabe581ca731a13be9489e65786422f619e50fcabc8fe6a94ad4e117baf1cfd25c7c65e6e0b4949a894df3da870d5599655ae90e3a98d655a4496692c86cfdf2d6566561c7f29cfb61a512ddc6ccb665156f318c68da5c5c2afaa3c0613c5efb2ff861577f9f8aba6476fec6f15b7beace66b4fcc6d7251bb69f5eeb96dd292fcd3befcb8aa3cbf6ab1fc4a460a2cc7326439562bddc52c7ebd122bbf6a47f572f38bfe91735807b1f97832600c569131583bdd364f7f5bca500aec77d539a483e25dfcae4a4e603dc408e38b8051585542610f4a617d8954a46a4d9f54542004b99a2c73eaec9e4a3c39e3a63d7dcd7c1454458dbb61cc3a58d5b4abcbd8635322e71a654fb42da7da55d838fbb702fbfd2216a8d2e7793662819d36c51bce5270dba3de2f62334be76074f3332b65b51163b53d6829eb4a86315e43c2780f6aaf8d2566c07c9cbf3034c40b434dac9835d12d66b530e4a6bac8b531e466bac87530e4e6bac87565c586cdfc999d9662e376c9887f8db0bf5d682bb382b5b397dbdfcbba7062179716091797bd5971c924b28e253589b062524f9677f4e13e3221fd59b7379e75f531e0969ac00d306b6ba56b6d0d3191f7d514792f4ce4d6ba2237c244ced414b93106dc4613b889ac483363496f6bd46992511cf548828ebdb54e384c6e47b0a6616c19b022db549635d407d36a55b7666b26cb9e06e9ce1ed8de56cf9e0ed44c253ce059d411c9a278726059d45c9645d4c83b6196e3cfa2767816b5c0f23f2b05f9bf3706de3905e0fb60b4ec97025a5aca2c97b9f445462d779afdcc193e19c57e2d617dee2ee652764f53133d0ab1bea0f63bc1be16da125259625b7a97a8cea07f85d536741a8d59c9f84466e74f75a49ba51b2b58e685c10a622b99c5d19a974e31d1aa79f7c590b375915b63c83d74913331e49ebac86d64c8b4d14b87ee2b75dcd2b6d9243b37a7d88f4a582baeb0726ad5f1d4da624eaa770a9c543b0cbc4f0ac0dbcbc029af740a954e58d541e6fd587438cba8f7f336e37bb33ab3c07ebb00fc4b8c3bfa9bf0bde378b77e32efc602d3d6c4df81a09a72ff44bcd700e6bdf413c3bc5347cc1a066a5a4327cc86f74f810d67615e6490ae17e98c210fd645de0f2364480a08e92203a731339de38f06a2fe043ae20974c5123820450974c3e81996027abacbc0693fd7f0e8cb2ef87ff69f4ae07570f06c4cf21112c97fcb8d2849de03b3c791baf6d81343ced145ee2541ce668dee7524bd5d66f2994f636cb5686a93ece6d361c499b252390614535fa6d8d7622645111f968d3f632a76a5328a482a15d6a41e45129fbf655e0b3a6f2dc26a21ba5a22cba2a5088b8865d2a847d0f23a702c4b3d58dc60f5696fccd3e44a3ccdeb323716c3d3f4c18aec81ba45b6af0c9916d971125bed416d952ea2a8c5eaff4ae98cc5d3e92749279b75f81cb15b5d8333a446f18ad96444076fa27dad202b99a92e027331f2ed77caec348a3ca15672ce802e7468e56f9d88fa535a1c26b2e2303481e260522bac00f49759126d48d1151e959a61b4976a0ac9b391e7b06278387b4c597272b784bd5a428e6001ae33af50a5993640260d1dd2a1eb3ae286b78d70e08118f0644de0fdb1323e45b78c0f9221d761c54e3fc21a8c899daf2bf610cca34e9378d4bf2d358f3a14039f2e01bf27a2067e0056146624622331ac7a18063c5356c668bb7c249bc69169ffbfd4fe82f62217b0d29fc92a43d71b64da65bdc4fe17adb0bb82f797da6f38f37855e41c8e19c541ba463102cbb78325f9f6b362be8dc4c06749c0c766a881e76079375b96773d0989ce075cc8eb36af37cc644dfe4c36897e39efc8a23957cef235931c6937218eb2af15f6db99ac1e2865bfd17fd39ca6be56254f4761f21f2293bf16903f0f48a892e268cc6f1d2af15b96a2df1a2303a781cf1c82043e73493281cf588cb602196db4cf78941dbed0c875397b7f2a3380a268ac5c98a20a32572257361b3b5a42766740465b0b74c94139fbb71ba2d0b4dda9ac3a81175d4de60fbcc41f79e045d7a76559bd48fcc02b15d26301d68198532d9438554bc5a98e9321d3b250849585e2a4cac278ccbf2e90f8573adb56c5bf4e9019341baf5cb65b0d1a2fae5318362dd6faad09bac42cc3dfb5c00654fb2460b6a992b18b453d0e7d7f3e67ae9c7a6a3a656d9e2d36157a241bd6a6e4b3f2262f7025acc0a55372acd04dc44cf63089c98e5534d94932706ab28b24b9d9636f56cc9509f6cb5382cb93272b426ce0bc6cb716a11c86908e62542a2b466c74bf5f02c6984a395bb391ca72568314f21ac4a9a75a5bd4e997b118a1c87e4e6b19f87b17ab2e2b42e5760055c610a7b220b0cc9665018bb7e5856e312b74e9d6132b7893b182b74452f05e572c785364e0d4d097ca0a5e4b46bac1ecf04bbe18977c2a16042c9304014a2dab7c8cf0c3258457a9a646f8344cec325db1a76362974bc45eaf28f60c0cbc42029e5f5d0d7ca60c9cbaf7e544af97e0200c98eea954a9c941a70588b6e27c5f6fc13c5204fa000ad993d5f6dfa5f6b3f90c2293ad3415d3e555a43c18e376a584dbe68adccec22858a5c9ed6c193035cfd58900c718363f44064c63f023081283d39d1fd463f04331dad74868bf4a91f63932705acc8fd22de67331e4a375910b30e4637491e761c86b7591e76399b84e9289356aaa656221067eac047cb62278910c9c96b7e364bea903a123f56ea8eb34a1ddbead02bb215ac13c4fa6eddc9c50a4d0d34756cca679391d272ae5bc189373bd4c4e67630bba2888d6ed05ac1f95a638c98ee455525d80517fbc84fa3315a95f88816f90807faf085e82f175828cafe671f2b590ad25719ff6b49faaf0781826cd893269e8ad9b6f2ae92cc228dd28a1747b2d354a4b31254e92294167de3af4ed6f53369175fa16f04d3956b06a5c9dc6c5980427cb24a09e6d7c3430c84b322c588251ba4942e9db8a942ec53cf2665d8fbc0c13fb1499d3acad26f6e198d8a7ea8a5d2643a651c71682441d74ef7df5a8a31c4be7742c9d33924aa70263ea4c5da69663197c962483c7d651cbe01518f8d912f0f58ae02b31f07324e04f2b82afc2c0b74ac0dbd755035f8d819f2b012f55043f02033f4f02be4d11fc480cfc7c09f88d8ae06b3023bf40d7c88fc2c4be502276cb7a6a621f8d897d91aed8c74890b3d9f28b742e1cf3cf80535b3846f7904e6c61ee36225f30162f7daca76dad2c5f680d7d894c2485aa7c1d664d974aace96bc542702c067e9904bc50d1548fc3c0b74bc0b72882afc7c02f978037afaf067e3c9699576866e6060cf84a228905bb32eb5ccaca180de78bd87e534bd8bf96b03dff8ad8e4850266fb6e879398bc403730cbe4d65bc66dbad4b6f6eef65315a94fc0a4be4a26357519b46fdb8d9b9da6a4d30c91cd2dcd249d78d4dd4949ae13311bb85a6203f7281ad8464ce96b346de024999f658bd14a8cfa596c2e713eeb44a71b0e16334b599ce2258ed726ec9377309f4c9732989315f3df27cbb29bc6d6d71124b6bedefebf16155929b6de84d9ec0d129b1dace8b73663e0374ac0e72a829f8281df2401dfa4087eaa0c9c86353713cdb0660b26f62d12b1fb345013fb344cec5b75c53e5d864cdfbf2d11f713a38bfc0cccd06fc70cfd0e924c23f24ccc7feed4f49f6761c0745f55e914ba59d12e31a7f7e610c5faef6ccc84ee9298d0058a26740e067eb704fc6545f0ad5866df8365f6bd4965f6b998b5dea769ade761c0f76b029f8f59d1039ae6790106fca026f08532609af774b371ff444e0aa03291f322cc0a1f9658e1df0dd5acf0621938f592bb88a697dc8689fd8844ec967ba9897d0906fea8047c9822f8a558c97c0c2b998f2755322fc3cc911ed953c95bd2b5d973ecffe820241d9e5e40f2580445273baf62bf2c63ad0d1ac3abd8ee764c8a276552348a4ad1c3fe7b317186379c891ec9cb703926c3533219f6e232f4b6ff9fcfe269facd2afbefe425b80293e069990435405ed0a54834e25549ed4acc7c9f91986f9d466ae67b1566becf62e6fb5c52e67b35e6f49e9738bd0c45a7770dc6d00b12861e5764e85a0cfc4509f8e78ae03b30f0976479db580dfc3a1938cddb97b1bc7d25a9bcbd1e2b0eafc6724dbd52ec9a6ec0a4782db66bea9942d7742326c3ebb15c539f14baa69b3009de88e79a66b0f4d4964ddc8c99ef9b12f37d5dd17c6fc1ccf72dcc7cdf4eca7c6fc5287b87e8057ab761ecbc2b61a7b0891a3bb763ecbc87b1f37e52ecdc8129f18144897b1495d88951ffa126f57762527f2491ba715335a9efc2a8ff18a3fe93a4a8bf1b53e2538912b72a2a710f06fe9904fc6545f07b31f0cf25e0bf2b82df87d1ff0546ff9749d17f3f669c5f9118d55aef14576b0f60527c2d93c2add67aa5b05a7b1093e11b990ca25aeb9bc26aed214c826f6512d4246eb5368a8d992c559c77f33066c0df490c7857333503de8519f0f79801ff9094013f8229f1a34489c1cdd594781403ff49027e8122f86332709a5df4fc729d7ae1714cea5f2452d769a126f5133270da3df22bd1ec1e791213fb3789d87d14c57e0a23fb7759d9a2739762cfaccbb75f5dc6e6be2d607ea78c4d3c75966115b231cb3ce29ca8e02cc02eb09f16b2a5d90bd9bdf09b05641e1f51ecc94614c5e2edd5c4d95c3b938de83b076b65b2d1a442bea47f117b52cede2a02c8f231cb123ef60a47395527c83e8d65d01f920cca51cca06730f03f25e00b15c19f95815367f417e68cfe4eca193d8729f18f8ca1bdd594781e03ff57029ea508fe820c9c16d6ff12714631baae5f940067b33d4777cf0072e5ada1523b804c7725486c00d9b2e20d20ebcb8a0d20bf84d952c4929436455b7a59064eab880c4bb38a780543aea28bfc2a563f5495e5a782d37c4d66ff99f461f16eb17f9d4ddbe21c9a96b0e5576796bf5f0ccbd7db5a4e9e13af63c65343d778dec08ca7a6a6f1bc8915d35a9262fac03e6ac5f42d4ceada962424a2b5e570d6d02a626b2664ab6d3259b894a93831ea6d4c8e3a3239e8a62f6af8ef60f8753573e75d0cb89e4c706a3f7417ea7c16132e22a39911d3b86ca17224f69e2c656a17f5257631b3a59a5dbc8fa9d54093af0f30a91b4aa42e6da526f58798d47b619921a65938a1b1773aa28a5a1f61293792a54c3b0e9c5324b3a3874a654737009a6497ad42a2ba80e6634c82c632099a492518cffe55c156ac3b0d88e4d6477d82c9d24426cb3e09ca52f9d42115993ec50cafa9c4f036edab66789f610a37d32c2e9f63c0cd3581bfc0805b68027f89f1bcb784e71d8a3c7f8581ef23015fd65a0dfc6b8c92969a947c2303a6dea75522c031da55dfca806925bdaf8534695b5bc93469bfc368cf94d03eb68d1aeddf634ab4c194689b94123f604ab4932871a2a2123f62e0ed25e0b7b65503ff0933cc0e32774a37af9842e0b624852c5c178e3c8b746615de12feb777b67d26bb73aa9fae6c9b07fa8b70b9e56c367e2673ccee7267a77f8a2edc5d46bc73e3453ab45fcaa9628ba3ee3c9339f342c5998d3f635c74947141b73986fbea3901ab5bc1ba4b8f5732094b89bb62d6918fca1c0fa197fdb6ea0a855f3083e92431982a8a06f32b56a4b2b022d539a922f51ba6c47e1225b21495f81dcbe92eb29ca60b71e5bdadb3783f2d5de1411b2ace0e45b1f2342be6af9dd96c5ca787d6b56b6f0958ca2c43f4c67a7fab607655212945f398844b415fae83bd94377455eceb0f197bf4dcabae96feb9577f62e0dd5200fe970c9cda49774b7fdbe2bf31f0ec1480ff2303a76766f4b0484aceccf8174ba0678a12f80fcbd85e29c8586221e0bd53006e61e07d52001e9181533fd757e2e7fe6eafe6e73230f07e12f09d8ae055305afa4b6879e6e9a787a8d05215937c8044f2bc0e6a9257c3c0074ac01b2b82579781d36ec0fd75bb016b60620f9288bd4551ec9a3270fafee01478af5a18f81009b8a5085e1ba365a82c3e56a4a50e66e407a4a0ecd7c5c087a500bc1e46cb70092daf2bd2521fcbd01129b0960618f8c8148037c468c991d052a7a31a2d7b61e0a3643d908ae08d30f0d112f0358ae08d31af3546d76b35c1c41e2bb34345b19b62a6922b3115d519f1cd30c90f9455cd8a9237c7241f9702236f81493e5ed697d5494df2bd31f00912f05d8ae0fb60b44c4c414dd112937c9244f2f5596a92b7c2c0f324e00d14c1f7c5c0274bc06b7456036f8d814f9155a08a926762e05325e08315256f8381e7cbec5c11bc2d668ad3525042db6155fff41454fded315a664868c957a4a583043cbb8d7d6bd11d79d3b533ce34e21c48d5db4e5d9cb0acb63bce4c497f55363b8ab745253d1249ed201b8f1e30c0569bfe6e93da7e3fbbecdbffefb2ff6fdc85607b641f6cd1beb3e4d2444f62c50c6096c4005aeea766009d30f0d912f0b18ae05918f82112f00a45f0ce58a13b3405856e3f0c7c8e147ced012ae05d305ae64a68d9aa484b57ccd115481c5d44d1d175c3249f2791fc1e45c9bb63e0f325e09f2b826763e085b296421735f01e187891047c8022784f2c438b25195a4531437b61922f90483e5b51f2de18f84209f8038ae07d64e0b49fbbc492f4fad3be4f3a2d6c119bbab1928d35b973b6d5773eed8ba57e982c75bafa42cce471c6d7e8372ae9f5c3a85c246b2e2a52d91fb3b0d214c4460330c9174b24ff5851f28118f8125924dd550d7c7f0c7ca9043c47117c1006be4c027e8122f8601938ddbcec702b817904db70e02198d46512a9dfeea626f550cc0ccb53608607609257c85a2ed96a920fc3bcc1729937b01bd1c0f714b2b1bbf96c7caf30ba971cbdae609f94b0113ff7483e77d4d999e45d66c7992a9e643826eb0a99ac34a6cdb13da6f05e2a298dc0525a294ba93e7b6f09d3b1c4e680fa481a1b4f663fabcea4198965f72a497637eea196dd399862ab658ab5f16477ec8cf4cf2f2c2062da808af2a330f98ec0aa4667e05bcca9d39b3f371aa3fe4809f5e315a91f8381af9180e7f554031f8bf176948cb7fd3cf93a9ee55c0571165f95b1bca33948d76394b3d9e8620eb4c8756f4ebb855d85eb5c4ce2a3b122e61e3a282b6c2a691f88a57d0c6665ce09d273527212c2382cf5b5b2d469839c2e7fa59beec49382be574654e7f58ec7e4592793a73190a7289a2313f984a7e417054fc0a4385626456d20059d6ceeda864a9a13b122799ca448bede4bad484ec2145a2f53282b4e9194173d9ad9740ed06a7e3cee2236036719af8b55a8c8c3a8385e42c5998a544cc6c2a30d29088fa6c8c0a97d9c60698e184dc5c43e310562e763dd341b53d007340de3e4245d4ea6cb90e9fb2727129fc798e73b0333c04d12032cecab66803331f0cd12f09f15c10fc2c83e4597ec8331b24fd5247b1606bc451378b60c98ceca3c2dfa836f56e6e95632b3320fc132f40c49862eeba796a187629efbccf89edb3994be130f81c55a78a705226654d23996ee2c4d67ee243c075b2d989983497b161648e5b380dd7ffa7632eda4b998873c3b051eb200cbe3732479bc4b318fe761e05b25e0cdfbab81cfc7b2e45c599638eb948489880d0c4a41e54eefe7b128d789f554b2a81053f43c59ef81a2a24518f8f9b20693227831067e81047cbd22f8020cfc4259e8a708be102b1617498a85ea40460926f9c512c93f5794fc300c7c9b04bcc70035f04518f82512f04d8ae0a55899bb146b55c52b73f3f92031758eeae56e31a6ec6512657f5754760906be5d027eab22f8520cfc720978cb816ae0cb30f02b24e0c314c10fc7c0af9480cf55042fc3c2bcab74c3bc724cecab65b9a9287605067e8d04bcc6fe6ae0cb31f06b25e0f98ae02b30f01d12f0558ae02bb140f53a2c50bd3ea9407515e6966ec0a233b1ef9c881a93ef52598da57da32ced7ac4ed5271a2583a17a634a9b8f0082ceb6e92645dce20b5ac3b1253eb66995ace71c2223c5f490a7cabe0bd41b09a8f5f8349728b4c127a3b3c1ac7a9a47314164fdc9a8230fb682caf6e93e4d556c5bc3a46064e85b93d918666371c782d46c91d29a0641d46c94e591434448d926331cf7327e679ee4acaf31c87d55777ebd657ebb1de837b347b0f8ec744be5757e40d588ede27c9d1f643d572f4040cfc7e5915ab087e2266e80fa4c0d03762c5f341cde2791226f5432990fa648cef87656d37c5e2b90903df25019fad98999b31f04724e03b0f50033f05037f54027e8122f8a918f86312f05245f02d18f8e312f0ab86a9819f86813f216b752a829f8e813f29b31645f03330f0a7647e65b81af89918f8d3b20c55043f0b73e4cfe83af2b3b1bae759cdbae71c8c8fe7247c9ca9c8c756acce7f1eabf35f48aace3f1753e245599369849a12e7614abc8429f172524a9c8f29f18a4489ed8a4a5c8059e6abba96792126f66b12b17f5614fb220cfc7509f8cc916ae01763cd983764cd189a9f705210dc16cf19df2863cf9c1d2adc1d7f551a3cdb3089dec45aaeb97c67727ae805fd814e0ac8b5652a95b98118295f8211fd96ac35a448f4a598f1bdad6b7c97616ef11d4db7b81dcb897713018e75f013c6c57bba5c5c8165e1fb922cdca598855762e01f48c03373d4c0afc2c8fe5066f68d897ff36e6703ec257cce96332beb08a2daab713526c5473229e82105c3d940a77fd2ca74f677099b37a82ac33518cd1f4b68ee3a5a8de66b25e0d974368595ce956370ebd7e4568e7d22a977b3db533d2aafe24a24b54f6dbc6a9430faa7bbfda73ab254ec334bbe542c9144b0a5623bb01cff5c92e3cb46a9e5f875327076ca0816ba7c9954e8723d5674bec2ea2d7fa19940e860d342b6cdaf4a81b9016b707f2d6970ab0e39de88a9f58d4c2d6a8123d92c5cb183319d16ee78aaeed1896cc5ac902ce621422fcfa100f4496fe5a0e126cc82be955850a1a2cfb819abaebed3adae6ec1aaeeef35abee5b313e7e90f0f1be221fb761e03fca1abe63d4c06fc7eced2799bd0df5d483f3d90fa5b6a7a18740d0d1dd25446cc6b79815367aa84405ebf7a7fe891e66b38cfb2c2788858754cc23cb899868e9dd6cd0b55a151bbd0333a39f75cd682786fc8b2ef29d9881feaa69a077613eebb7147412de2d036f6edffe6ed14d492b834b13988f27700f5602fe9094802d63d54ac0bd5809f8535602da127797e7c564395fa3318f385b04d27f8b4d03e9bf7b02bb16e361eacb08efc324fc4b2621e5a58437c7dcdd8ecb9552bc1f23fc6f09e17572d5087f0053e71f993acd993a95172154a63fb9c5110f62aafe2b51f57145551fc2c0ff9319ee816ae00f6391160d3aa49196154926d2da85f98e4844df773c823194119158da3835861ec524af2291fc3ffb8f8ae48f61925795489e395e4df2c731f06a12f0558ae04f60e0d525e03526a8813f8981d79080af51047f0a03af29011fa608fe3456add78a6856ebcf60d57aed885eb5fe2cc6471d091fcf2bf2f11ce65fea62fea55e52fee5794c89fa12250a27a929f10206de4002be5d11fc4519383d7fa061849e4ce463a825a1ab4de8d1c1b4bf969eba96cffb3a08fb859a9a37f885bf77b1ea12c282ead1bc393795d784ce299512ce17e392bf84d1b2978496b715697919339c4698e1344eca705ec1028926114920414954090c5ec5d09bcad0e90f4e5c989d4484f71a961dcd24d9b1354f2d3b5ec7c09b4bc07f56047f0363a94522ae2dd6394518f0de9ac06f6174ec23a1e375453adec6c05b4ac0674f56037f07036f25f3658ae0ef62e0fb4ac0bf56047f0fcbccd6b2b25441e21d95e9f66c257f3ca67346cc1ccf819bc13e2cf37d2c8b322559f4b762167d8065511b5916397bd5f8cf2b5551e643ac92688b5512ed92aa243ec2f46a2fd38bd612d94a7a7c8c654a0759b999a696299fc8c0e9fb1d250d184b56c1c568c07c2a03a763339d643940bb9ab3ec1faa512ee89feece9fea9573838e5920697e8629d439056dc9cfb1acd84f56d1cd50cb8a2f303bea22b32377db0751f4e917f4c486d5bc2b542ca2779dd94a36d2554adc29d34ebf863bc6afe62ebec44a5857ac84754baa847d85e569f71418e9d7589e664bf2f4aa83d4f2f41b4cf21e2990fc5b4cf29eb25060969ae4df6192f79248ae3a06f53d26796f89e40d0e5593fc074cf23e12c955b76ffe1193bcafcc0314a849fe13569efa61e5a97f52e5e9678ca1012960e8178ca181b2e8b7508da15f311fb9bfcc473623f16637f9978ca878bfdf305906c964a1b753a27e56259ddfb1dc1a9c82dcfa03031f2201afa208fe27063e54025e5d11fc2f0cfc0009785545f0bf31231e2631e29dabd58cf81fcc7086cb0c87c64bb22d6464e780a66e0b997f310246480868bc428d80ffb0ac1b9982ac73c7267ce0392900b764e094c651b2ac639b864b1a812a1911c1521c2d4bb12991b59a26303329e766e0fea216ed6560928c91494211e8dc29d5ce932a9254b23bd8b796dddc4cdb7cae7cfb8e4e24509fc73536424fd0f692c12a68e9e4abdc089d7cd5a49266b1d2c7265d5595e50fbd3d3042cf1bf58a74e08475d52f68f94ca452d654c5b3a61a6600e36406403b93c51e66c5f6c339ac694295521d40ad2e4b971d3c21f145738f51f3453530a526c894a23945f7ef5dc83b6a4434015b5bee69922a4ad6c4e4982893a33e4aae9820a392762d59da74b06092eeb8546dcc19e7a5a0355e47064e99991c49c1314a98d14d91185dd7b56a46570f039f2a016fbe4e0dbc3e6649f99afdda0d64c0d4354f4b0498ba3a04b8a10c3893c2252431de19b41746c50c59a1a216efc6554b929ceed1084b73265e4daa2fca6f8c51769026654d30f10f96894fb7d3f49e53eadf894a2dda698a158c599282f1b862c1682603a7ce6bb6e62079738cb343344b5c0b0cf8505966505729c24d779b779decd81bcb8e3992ec78fa58b5ecd807536eae4c3977a592dbdc710767e0b9cde2045ba7b1a4a26e4b4ca2022c16107b6cc8e68f25bfd7472b4c8e79b162819e29d967645f2cedf998cb141c380b4792d961a4359666a12c4db869ad3cede4b6cecdc46295a214c42a6db092542c294967ae572b496d31c917a440f2763270fafec2449c5b8c6d05dacb5a7af4acdfb4b6f49cc50d6549b4f44a22f4407baffedd9176de61483b2f56ea583baf838c37ba99bf35278dbc39ef393d0a53d9c66a25f693496c04cad962bc3c094e174562cce796325bca986d5749f364e5434fbfc27cd4626c746e1619cc904b19fa10bbb131ca66b437a1676ff52143edbb29f67f93ecff07936cf0e6509b21a7a69bc547ee0e21c96cbfdf099378894ce29652897bd8ff0d607ff7b0e572828bcad2aa48958539c2a51247f8f2463547d8195379191652c8e752b84d7859b0a1a2ee7e98ba874bd41d70929aba5db080b64c33a0ed2a036e6ddf9627026ce1ad8b6e181d15123af24f56a3a33b96fbcb65b99f4948d41d2e65a1a2bffb461e68c2d313542c211b936e854cbab644c4f2f4d0be4296ea34e6ba4a999bf63b76a7d3772a7778ce2e97f41b15097b6099b35292390f28da6a4f0c7c956c444531e77b610561b56641e88d158423340b421f8c8e232574d4d8ac46475fccd4d6c84cad9fa2a98de28beccaf89325acd551ca8cd089bfcbc1bff51aa0fd309a8e92d054b1498da6fe18f8d1b231ae53d4c0076026798ca6490ec4e2f1b59af1f8fed8f8c13ac9f8c1ab571df873f3595f7ca8327e30084be0584902e51b4fffe4dda6f367a9243018b3fbe364762ff6c8940f50a82d671b82f5a0afd7ed411f8a211faf8b7c0086bc41177918d61e3d2105edd1e158269fa8d9d93602e363a32e1f2331e49374917330e49375914761c89b74914763c89b7591c760a6718aa6698cc5443e5557e45c19321d3add9288c88d70e00331914fd315791cc6f2e99a2c8fc7443e4357e40918f299bac81331e4b374912761c867eb22e76136778ea6cd4dc644deaa2bf214cce6ced5b4b9a918f0799ac0f91817e7eb72310d8b2c2fd08c2ca763d5f68529a8b667607c5ca4cbc74c8c8f8b35f93848069c69df6e4bc836f0c6dfc198d15da26974b330e04b35816763b977996eee1d82e5de76cddc3b14cbbdcb35736f0e46f2159a24cfc580afd4042ec072ef2adddc9b87e5ded59ab9371fcbbd6b3473af1023f95a4d928b30e01d9ac0c558ee5da79b7b0b24c8d9f40834eb30627224691adfd670351915dd568c62ca3ae3e9180df6be18359ac0765873fa97628f2f5d9f485e8cc1195b88e5c50dba79512243ded7bebd31119177e0c08761767993a65d2ec2806fd6042ec5cafe2d9a657f31967bb7eae6de128c8bdb34b9588a01dfae09bc0ce3e20e5d2e0ec79077ea22976164dca9494639067c97267005d6d4ba5bb3a9b51c93f81e4d89576012dfab29f14a4ce2fb34255e85497cbfa6c4ab31e00734818fc0a87850938a2331891fd294780dd6347c38054dc3a3303a7669d2713446c7239a741c83b9b847755ddc5a8ce8c75240f43a4cecc775c53e1613fb8914887d1c26f693ba62afc7909fd2453e1e23e4e91410b20113fb195db14fc0909fd5453e112be4cf6916f28d18f0f39ac02761c02f68029f8c01bfa809bc09037e4913783306fcb226f02932603aa1f99588fe129e5331f0575300be45064e9743bc66ffd046022e4da0239ec06998f4afa740fad331f7f4460adcd31998137953d7899c8921bfa58b7c960c99ce05793b52792e889490187341cec66ce59d14d9ca3998adbc9b025bd98a49ff5e8aa43f1793fefd14487f1e06fe410ac0cfc7fce2879a7ef1024cea8f5220f5855829fa58b7145d84217fa28b7c3186fca92ef236cc157e960257780926f6e7ba625f8af5bc7fa1d9f37e1926f297ba226fc790bfd245be5c86dccabefd3a1132b6e1c057602c7fa3c9f29598d57d9b02abbb4a029eddd9beb5661393fdfad36db491ec8d1c32ce16b1bb7da5abe10ac0bff2ed2fe8c6864b582fbdf385783f76dffd7791ca5bde66d3851656267ba697764386ecce0124c87139df47e87a9354a488ad34b91aab547ed0ac54aec1cadf8fbae5ef5a4ce49f3445de8189fcb3aec8d761c8bfe8225f8f21ffaa8b7c0386fc9b2ef28d5806feae9981376122ffa12bf2cd18f29fbac8b76064fca549c6ad98c87feb8a7c1b5601fea35901de8e5580ff6a568077605cfca7cbc54e1932ad2de9e6683a13e4efc4ea6c2b43bfcebe0b933aa229f5dd98d4192990fa1e2c17ab6468e6e2bd98e1554d848f1886771f2672355d91efc744aeae29f20318700d4de007314f573311e0189eee218ce45aba243f8c21d7d645de8521d7d1457e0443aeab8bfc28865c4f17f9310cb9be2ef2e398d135d034ba2730911bea8afc2486bc972ef25398776e9402effc3406de3805e0cf609c34d1e5e4590cb9a92ef2731821cd5240c8f3985d37d7b4eb17303e5ae8f2f12286bcb72ef24b18d3fba480e99731b15bea8afd0a1685b5d28cc25ec5f8d837057cbc8649dd5a53ead731a23375897e03436ea38bfc2686dc5617f92d2c0c6ba71986bd8d89dc5e57e47764c87456698744448e31abf45dccd975d47476ef61c09d3481df970167dab7590901e3b34a3fc072afb36eee7d8871b19f26171f615c74d1e4e2630cb8ab26f02718c9dd7449fe1423b9bb26c99f612e3f3b052eff738c8f1eba7c7c81f1d153938f2f315fd44bd3177d8571d15b978baf31e43ebac8df60c6d13705c6f12d06de2f05e0df619cf4d7e5e47b4cec012910fb0719381d241f9888f5c53870e847acbcecaf595e7ec280076902ff8ce5e060dd1cfc05431ea28bfc2b661b4353601bbf61e007a400fc778c9361ba9cfc81893d3c0562ff899597119ae5e52f4cea912990fa6f0c3c2705e0ff6039394a3727ffc59047eb22ff871132260584d0011529f8d814805b3270ca49ae2e27114cec03532076860c9c969b719ae5a60a26f5f814485d15039f9002f06a584e4ed4cdc9ea18f2245de41a3264fa7e9e665bbf26c6f4e414305d0b039f9202f0da18d95375c9ae83899d9f02b1eb6205729a6681ac87f1315d978ffa181f3352c047030c7c660ac01b629c1ca4cbc95e98d807a740ec46988dccd2b491c632603a136f7686e4fc763a994d320fcd9f1e6d2721e935c1dcd6219a6eaba90c984e30393411e06d38703319303b3b2811e0186bf49a63a63857d7145bc890d931019a0db3bd312ee66972b18f0c989687f99a03042d31e0424de05632607a5b945179af48f1a7520255f104f6c5fc49710afc496b0c7c410ac03331c35ea86bd86d30ef51a2e93ddaca803bd8b78725021ce3e4a07618f0224de0f618c9a5ba2477c03ce9624d4fda11137989aec89db0c2b8344585314b9600dd667959229cc4d866b933e6aa0fd774d5fb61b958a6998b5db05c2cd7cdc5ae98c8159a2277c3dcc6724db7d11de362852e17d918172b35b9e88171b14a938b9e18f06a4de05e18f0119ac0bdb1dc3b5237f7fa60b9b74633f7fa62eee2284d77d10faba78ed6aca7fa6391c6312988340660e06b53003e10035f9702f0fd31f06353003e08033f2e05e083b152b35eb7d40cc10afaf19a057d2826f2065d910fc0904fd0451e869171a22619c331e08d9ac023302e4ed2e562a40439bb8b7d6b4d23bbe740a9597c21a0dae15127cb18b67c3cb0457c9b32e822be1695b44b44066cd95e0ee61536a7c02b8cc232ff14ddcc1f8d897d6a0ac41e83816f4901f858acb23e4db3b2ce9501d36d314f4f0438c6ee910762b978866e2e8e9321d3b935672622728cb935e33191cfd2157902e628cfd6749413312eced1e46212c6c5565d2ef230533e57d39427635c9ca7c9c5144ce2f335259e8a45ca176846caf932e04cfbf6c28424c6fb18a661667191ae594cc77a572fd6ec5d9d81016fd3049e89015fa2097c10d60575698abaa00ec6aaaacb525055cdc2c0b7a7007c36667f97ebdadf21988bbe42d3451f8a15f22b350bf91c0cf82a4de0b918c957eb925c8075665ca3d999310f13f95a5d91e7638571478a0a6321d61f7c9d667f701126f9f52992bc18738037683ac005980bb931052e6421067e530ac04b303bbc59d70e0fc3fcd32d9afe6911e6466ed57423a518f06d9ac08b31926fd7257909e69feed0f44f4b319177ea8abc4cd6a1d1d5beb5a690f475680cb7df2ab315589d4457c69d097765dcc5ba329a56d22b76ea5827c6e19823b83b058ea00ccbf07b7433bc1cab2feed5ac2f2ab066ce7d1992132573d8adbbc7d30842cf402d2213093d8e7725e37f11ef5eeacece9eccb57f9f64ffb28459197d223feb427632067d1be639b5c5a5cc6a0b140ffe5d8e6979bf4ccb0d512dc569b14e9959ccfe9dcb4a13d5a6d8fec42933b9d13747d925c93931760ad3829eb5b982bddd9deb53c48e591e692745f5a2b85ef65c04fabe9a1c18123dabb6cce6ba88a1424e6187a09fefe9364e89e271e02b30a61fc0ec09a6e8e844cf8f77d85a6afba939b66d94b13c77b4cd270b59fefba575bfc59fa7ca9e56625a3e28d372a84f4bc8b9a3e76896638b998e7e29bd39047f895556e0572a9aadc2347b48a6d90109e5df70db860a59992f6196ab9f73ee2f2abaadc6747b58a65b3f9f6e1358ee2ce49ad1bb55bb4d9323304d76c934d994667fe67e93635f4b591d4dcfc71ecdeaebc52c85c4ad1c72876b41eb92e52c0a805e8fc63ca9f36d4762ac3f22637d784265633c63a33c105e6d0da6dfa332fdc61bb42afaf470960cd5ca89504b58d225e408560ee59e24995c3d0ad3fa3199d643626a8d4b3a85e9424ff0aae03a8ada983e9dcf19aa5c2e92cfcda331bd1e97e9759072643795fde28ded6408ceb3bca81f28b3eb03dafad0890493c9e763303e9e90f1312e2d75b6e9da7c2da6f393589ca26603c286c7dbbfcd6740309f552d4245b37598664fc934db1fd16c1a2b9fa53c36715abfa2d5329d97e2c24ab961a68d722ca6d1d3328d461bf4be2257e93b05b6aea5acf64e9da6c7619a3e23d374b07d9bb8a7f06a50c09e39da514ec6b25c2e63ada1f9768dbb3a855aadc7b47a36913681375d18214c63b95066bf4bcbe18218b59f1723759a1d8f69f69c4cb391713d6762ad02dc87c66ab326eb2937603a3e2fd3b1c870445d617b47da03b78047ccd3990594444b636ada88c9d4a227603cbd20e369da6e6b79c466489f8713311e5e94f13002f561b48534cf7e49948df12cd763d73872a454e7f4464cc397641ae62a6a388359f41224477687be2761fabe2cd3778a41cb2e4fa2fe4d050327630cbc92aa7ad9f16dc341ad6c5eab4d9856afcab41aa368c7a3d828c4521eedee6e1bde8ce9fa1ad643a19a83a3d91b95add1ef5f13c755d1ef144cbfd765fa0dd2881c2b58cdbbc4d6af98b7f370adf22bbdaba2d3a9984e6fa8e599df3e87b3fe04ea55e2b552ccd6945b30fdde4c6444008b1e47b1fea102de76ab1cc727173d261f239f8669f916968b2a2d6347f3313c32747fa5e33ab163e054c5c7a763fabd2dd3af3d89ddf7494f8d3121e5199894efc4eec154c985a949e582c9127626a6f5bb32adbba11e243f3a47007ac2e268af3d8d70964ba3ebe44631cec2e47e4f26f7c0b89e21978d80d23ed652dbb397d9bad1790ef1bd43aa7cc0d9983eef636d82d86584b6f9f3589c5c2e8994121931a1f165710a353c07d3f083447a02e42320b9ccf6627bf3748e826cc574fc10eb874ba4be4a44cb74d759e7629a7e24d3746c42b9e91fcf72caa1d07b77e6eb7998b61fcbb49d19375fcdf6ff9b1e19381f63e313191b13d03a438c8a17475b45b4465c2691d391d1e9bd4ae617fc3715bd2fc0f4fe149bdf9098def2f900e9d5ed424cb7cf64ba0d508c0396b3168e33ca43fb23c45bb49d91c3220379df24fc4d459b8b306d3e9769d357531b67a68273a2a1f37eaa72e5624c8f2f929f3510aff5934ebfba0dd3efcb44ea4b681d50c3a9eca9d30a777a8b6463045ebbc37f498d455e8269fa954cd33e3e4d47320d9c7ebe0a4f3b08f704b1b448d61e2fc5b4f83a91717095197ac1a9fb2fc374fe46a6732f9fced3804ceeac63d8268fa5db1c144b4583ed9806df6273d712abb746b2762c6d27f5a0ab8bd2504b5d8e69f29d4c93aec4db46ef1d3d79565cc7db7294137fff5daadbaa5760527f9f48ff4ea2520becd8f6141bd93d915745bf2b31fd7e90e9d75f51bf290c7129f37ec395ca4b32fd215761bafc28d3a5475c5d5c46fdb9e5f637a4ce575d8d49ff13e6ab9293dee91b28629e7b091b858a3582a1a2c13598063fcb34e8a4684b2339ab95475c92b1956b31597f49a466800ce9d60cc9b2bd03d3e05799060747d94efdb8a5e89f4e7ee6426a18b90e63e4b744461c2a8f0925167327d77e4fde4f5c8f69f93bd67b238f08c47ab0a5ec6e89c492a9dcb2114eaf2daba3ab687b03a6ed1f326ddbf8f2d4af11f5218e44a9b2b91b31f9fe4ca42fadb2cd55f6ceaefd559e259c6edbbb09d3f62f6cce74a25e736a5caf697276d3cd985e7f27b7aec73f2231c38ebc4bd8db53ed325120ad75cdf4f5de8269f64f7273f8f47b3fdd9c4f559fe6ad988effca74ec10c747b8739b8b9824b4d5949ab6c46d989cff2532ee55d997d1fa69358bf3fcf2418ecdc5dbb763fa902ac85cec44eb8add3527e30e4c234ba6d13454232c96c04683129925a43e932879afb113e32122e3613f051e449e2ee163cba9f20177621267c824ee18d7cf99f302776192569149da1fe5b6b2a57b255fc622707756ac89f27237a64b55992ea348227d8a13f86aa912fb8e9691f9049ff9aede97985c9edd83e9594da6e70085b827b1183b3e9a8a36f762da549769e38f09b07a28d13a283d75d37d988e35643ac69b93a13236912e9bbc1fd3b0a64cc37144b5bf48d4588ba3e5b024a627f1d744267a2b1fc074ae25d379505c9dbd3d4cceca1415d95361a90f623ad5c6f2512d8a727a672aff5ab935994f9c9379ccb7ea1fc274ae23d37936d9bd7d579097445b6ce21b15561ec658a92b63c5df0a1529aaf45db99a6176909a787217a6593d9966feb162d5687a77f6903c82695a5fa6a9bf5f191b2b766cbc1fe913473f59bd42bf52d1e0514c8306320de4f316689aeaf3161cfdb0e7a9caa1c730fd1acaf4c357bb549e0954b21ba381c731adf69269353e6efb672aaff52b5bd54836ca5f16c317badf4e62f3709d3829f6de1fc9d5234f605a374aa4b4c9d34f6e1427d976eb9398068d316b8c158b53f90aed5f56d9cc579eff8b45def17d086e8dd5edff2c8b9d15ccde74e62e2f654cd018239b4e3b0763addda33573774f2dee3ea7a92fb625a2a53b3f5a07d3bdde622334b109ab1621ce9f4eb4c38688a306ad621f6fce97a50c793eb0d0ee2cdf9d7d2d68c4db3d1a218a9df0e269218b46ba8378046a175fa74390adfa2dab3ad74860d94c77a74cef699a36a5b9da9be76a243b9bead825496b8a2f45339a5a86dc869a556216967999ec0ec044ded365d1f30ef358978ce89a713ad39d8d1ae3a6064ba92cb56e0c40c46e71e1e08424195c0b66624e93a88c3893bb0b3b1052bd6aa407cd85e626a9aa65dfd09999b9bce6a57ea0dc6e738581a41dbd5d925a982489e286c77676f47369d9db242df4b4d039ac343b850ddf9b290cb4bd5dc5a56d1f93b4b56045ae8c05ec79c4d9624184731881e5a1a0f063cba5b0a5490a1bd837a2f77d2cf35814a080b5e5e85cf34921f1603b6bb884b5324958635654e7901ec4ddfc20ccc435afed12b7af49e29a014ba3730dbc053697f5212cf58c9c8481bead635cfa5a9ba46f2f89dd51403ae1862ebc5cce9e168682b4b9c4252d335da4c179bda2dd205a1361202d67884b5a1bd31ece5b258cb6ff76b6602f8c2e87773c5d1888a35ba60be2daa6cbc3d1fdcf56d9ff92f935776fd930d0f7f3812e7ded4cd247b7cdaf5c31843b143e13c471ed4d87c2c2f6463118ba32b080072353d975991d2c2f67b617260a1f6feb52d8c12485b5416531c9330c17069abedec7a5a9a3499a6a029adc1da5c240d1cca62e459d4c52548f7932d1d5b884f9ae496cd8b790d5a261206bd30897ac2c93645563f6541eaa90a24e5d979cce26c9696edf4c8a760bf9fb60a9bb5fce2c8c4665797c78310c04dedad225703f9304d600de8a8a49670c8681a06d0d5d82ba980e5a05418e08fec6d1741e81159312129616e68e912e7d5d4dd2d704c45d7ee2ca59112d609d414beccf578782ba9707b9d475331d485062461277417e38ac6b0df05eddcd8f0b88fe8b02665f45d19e0c0a1a26cbda39c1a52d3b5d4e5f6cde1b06824a1bb904f53049d0de04b6165731ad97475b8574f55721f36061f45ff48f20b1a74912e9b18b903c3a6c4737eaa75e6c39ef2d0b77ef059dcf23a8ec6592cababc2a10f6b69a87b8d398bf0b03555b4195d0db7cf35b1c2325a61a8581a2f707bb14f5495707762e8fc2c42c6ad1a918a6d62601639b7d4d12d71ad49bd36ccc421e95ed591d8a5bdbbb74f633dda10ded10ee253f9c7571c3221c8ed0773d182eee6f92bc3ac016ddedc29d8dec43411468c00f3049149dc1318179b345bed3af72ecd7cb584a61206c6ec4256ca049c26a8162098fba0b0349857d5c92f63749525596f43cf64238a8b960a04bcd20d39e49d88fbb08cb11220c44bd0e6c68b049a2e8ec0bef6e6a744e77e55eb23090560a3a14879824ad3e9175f9846df4a8ce5897aea1e98af59dc92ade359385218bf52b40ac7f80e9c2e9b4237358d261eea7d85ad5256d98f9c6b7bf708681a2ef87b9140d375d2047b179d6cb59e2ee71abeef1bbe56c6ba965a120ee6b605b234cdb96f0648ecfaa088b6d81d523234d5254cf435138e7bed2658582ac1cd30551ac2959ca60c2dd19dd1214c45126896b48f021dd91446cd51c06ca4a418feb68d305d3597d4c7b208ad8e891db49188e087f2d18f71e63922c38a8eb1c9ce41f370ad3d2c1f17d5ddac69aa48d4ecf7463ae516c76b533bd2e0c340d00d3e9724dd2d49cd194677b2aa777eb70b60a3ffcee7f4b754a60f5aa3e70ffbe2bc9af1d57631d5fe54e1bf0d43a97f1be33c7137a56bdd3182070921f5805ac5acf4a7a8a4056dc282d2be1b54c59ca6b02b2925c139a9550377a96e6987f96c242df2ca5002e2be1f67c96520b2d2b297f92a534049ba5d4899395d092d52ca5759a59ca43753299f155525995263967c51cdfca924e5bcd92ce6bca4226e467c558cf9085ccbdcb8a3311232ba9f9c859492e4ec94ac17874569c1d2cb2d06d1bb2900679163a7e94157364204b21eecb02fb2464f98662b2e206db598a9352b3126cf16421734fbcfe3cd632cb2ca4032d2b4670971577354556c2030d5949cc76cef22ceb4b6ce1725602bdf85edcc4960b66294c0875373982c187bb39510fbac9d1b82affbff71fea41f71f1a4f49a8e0f1b813a14f303d604ff3b037e9cbaeceb65334d71c0f455ff3a5d9b2529a5378a174ceff1391b72cf59a9ed8bc5b220a25139fb703c3f7134d3770bcb4c5da656f0e1960ab618cce7aa6e8ec9ee1d2392948740e0c259dd3009d7941a2b36728e9cc07857d7290e8ec154a3ad7013aa70489cedea1a4f31240e7d420d1d9279474de0ae8cc0f129d7d4349e71380ce6941a2b35f28e9fc00d0393d4874f60f259dd540a034231dad201a00a5bd15b4b729fabe212e7d334dd2579f25ed7652fabb922aedc81102f21a01f20e4a47515e801666283e6df3f43347671d537476b25c3a0f0e129d034249670b40e7ac20d1d93794743e0e0afbec20d1d9279474de0ce83c244874f60f259d5541613f344874f60b259d9f02eb9c13243a7b8692ce8580ceb941a2b37728e9dc02e82c08129dbd4249e79180ce7926e96c4a62b7c8bd05bdaf392a1b9aa2f257d0b9313f2854f60e2595a341c7466150a8ec154a2a6b022a8b4c52d98453399f4f35f01f87e788ee1cb5d6cb1c91554d11390814efe2a010d9338444ee0f885c1014227b8490c8aa80c88526896c45dc894c894e14a5ef97b177c3d7af3e1704452526896d49e2c598f2c3b88d16fccf2c530d4bd04e3fcc24ad0d8918aee869ffbd8288e30de9b3340c5818abcbeb0302179924b05194c039ec0507c899369826128d0d5c5c06482c4d47e1eec1fe4e642a71987de63440eb6293b4c279e62aab4dc24ceefea0425ab23bdb4310ce682554dd14956340d0b4d42495625679bff48f981bb3c353811d2e4b077903f620f29e00e41d6e923cb16e026bf7780bb1d1213463c538175437654122b37f08c93c1090591e2432fb8490cc5180cc8a209169b0f7d21899630199cb8344a6c11e4c63648e0064ae08129906e75e1a23330790b93248641aecc93446e63040e6aa209119c616ce7040e6ea2091392084648e03641e112432078690ccf180cc234d92e9eca650c2892cb13fa2fd40f4f5f0f557b6272e696bd2d1f7830f4678675e86affffc3b607f47edde6e34078a76fe1a1d7b6c678aca534037dad126a9dc8f53596abf54caae62039c3cfb7f3a18e60c4a38fb0c4c2539641c19c1fad38bf833f8de705baa12b39437324579333093e3189394b788eb082acfcb3458b71b9bfbf62070076b8346a8c1fadd18a10f0142d7058d5083159631426f05841e1b34420df6271923f43640e8714123348cf387ef0184ae0f1aa106fbe28d117a3f20f4f8a0116a306c3246e89580d00d4123d460ff923142af01849e1034420df6cb1b23740720f4c4a0116ab06fde18a1370142379a24b416237421dba1d1d90d944e8f35d8cb646c7202cd0b41d949bbb36b044e7835da4edf668acacb41d7c8c926a9acc7a8f4cfcfa402d35d465785b083ae13b0c24d26a9736708d3c9ff699f216cac18df013cdf669304d25d5c9d7d8687db7f3bbb81bb7b164f6664d2ffc3476126b0c1534c5228e6078b9e4d67e584b3be2297e448fbdec3bbeae720d07b79aa495a3b117f877101037377e61d61ff4feb6cba686529db833ad6505b18c7d357822a688b49b2dded717ba57fa6a631fa9a03fa4e33499f58630e9708c877a00ef3ecf59da0523add249d62c15f4f64f037ec4b574e0755d319e908d2139b8c10460fd91f5079663a3c642f3bc9b47b4863c3bf7580873ccb247dfb92cacdc569c439fd61353bd9c0e9cc28624bab0a98b51633b8c5662d7387296a4b00b567efde421ef6490a5540c5734e3a43f9125b88e9a051897770180ce5b799a2b50084f25b4dd22ae6c4f560564ae92cb55fa2a74e2c8abe94a63add5845b41dd8e8b9a68bfb70760ed6527efa8fb314d5593d49634d71269273d254f8e2cc2aa04e3fcf74e7878833178b42c15aee61b7c60b0085e7a783c2fe7b1c85af020a2f3049213c5e6819f11e609526128dd5dc9d8157bc305d24ba674d9513e74cbe706f63f232b0c48bd2d18d818de9543ee5c7e0541763740e0561cfc541a2d3e88ed7c6e89c07e8dc16243a8d6e336a8cce02d06cbc2448741add17d3189d1b009d9706894ea3bbb61aa3f31a40e76541a2d3e8ee07c6e8bc0fd0b93d48741adddede189dcf023a2f0f129d46e7041ba3f32b40e71541a2d3e8f6f6c6e8ac0702a52b776787b0776aa0c19e4b63f38b7a8266e555e9a012b34c2f950627ad1aa3f21b50c8af0e0a95bd4349656b50c0af090a95bd424965045079ad492a3b10ff2c23ff2e99cee25371ecb5b8cae61e19f4a4c6a622340144ef080bd106c7308d117d29f0b3d79924da3de3af47fa272a589621fa5e242e7dd7ef4edf0ae1e68472f78e42608937a4834ab8ddf87832898c21794c9862fba355e9e8993746e599c02a6f3449a533820e97a6cce1fb0c8fe0e3e80ed468fb5a64431486d043d60564de6492ccf8bbb543f1e16eed062b9e834d79ce0ea0ad74b3495ac514af0abbbea675bb4a8d6e344a3566b1c7026a6f092ab5469ba5c6a8bd1d38835b4d874b39ac322a60bbb857d800e13fd5b721a0ef3693f4358e132e094de7985c809a1b3144e354d03abadd7cfdae7238b231328dade69d0e6cf28e209119c63d8ff201993b834466187793190fc8bc3348648671afa39180ccbb824466187791990cc8bc3b486486718fa38980cc7b82446618778f1902c8bc37486486716fa3de80ccfb82446618778d1901c8bc3f486486714fa3a180cc074c9299492a3724d5f6823558bf1bdb0bf668d017ff603a6c159b13e29f6263d08b1a9b60331cd8ea434122d360fd6e8ccc0301990f9bee8013a3447bce063e3d017dbb4cd2d702d057798b140ae69ee31be6e5589f01421f3149e85e80d03d6b45dbf980c24777a77ff48fa187f1e0bacea0e67e2c486486f1e0baee80ccc7834466180faeeb08c87c22486486f1e0ba4e80cc27834466180faedb1790f95490c80ce3c175ad01994f0789cc306e23d51290f94c90c80ce3c175ad0099cf0689cc301e5c970dc87c2e48648671ea6b5f40e6f3e96844f6dbe31a9133894be10b2629543bc6cea0351a5be4f227983ef862b0fbd60d7a4e637deb7b83c95b2f99a4970ebecc603f8b69d8ee9e71c668eb688ab6aea080bf6c9236d99690894f6b35d8cd616c56e6fda0fa79c524b56203dd5e64cfdc40f74ee0395f4dc7e0444fbb8249fb622a6315cf4980bed74cd20777e5725700c1452cc6d7fe18b3c1f3809f7c3d1d8150628179183bd90e0254be91aec132618f6359f0e30e94d189ff93f8e2aab0ee18370d10fa663afc632f769ec59e726ec09bc03fbe65923eb1f149e2d3fec33821ab0da0f3ed20d139209474360274be13243afb8692ce8781af7c374874f609259dd7003adf0b129dfd4349e76f80cef7834467384f947c13d0f94190e8ec194a3ae7033a3f0c129dbd4349e72640e74741a2b35728e95c05e8fcd874b392b6cdf3ecbf29083d8c817e5ec05e3f8275bb95b037a630d19c75e6c6082d3145e80440e827e9e8f2a0ed7467af18a739594446b38f1c66c2dc42af0e82f84f4d52599f8893fdd2de3e37d6f5361bd8e16726c9db87247a6a95f734209373302d532bcac170d9e74124d5e42c6153a47e0c467cbe0822a926bb8b4d91fa1120f5cb20926a72d6b02952df07a47e1544524dced134456a2920f5eb20926a7216b12952e70352bf0922a926e76c9a22f55040eab74124d5e4ac6253a41e0448fdce24a95d887773ddf96ce1a923cc0c46ed423671a6824c66b392e8ff62c01826bc27ac02fe1990febd49d27b93cae3f2def94b23edbf17dbffd17f3b8ad07e8162b66327157622a18dd7957cead828b28214b1b7f259db4c0c501bcc8489a632a11f7133e18774f41460fd58dec911615c68380bd8f38f26a974e73af5db83fa0a66818e969f4cd2a7b7fd6918a7333e07a8fd39a8d4f60c25b5df02fff94b3a0a7d6f32600f2af4bd80cffcd5247d6a8b668c9e4868ee646b608bbf0589cc30ae74bf1c90f97b90c80ce34af7b300997f0489cc304ec2bd0c90f96790c80ce34af70d80ccbf8244661857ba9f00c8fc3b48648671a57b2920f39f209119c695ee8b0199ff0689cc30ae74bf0290f95f90c80ce34af7eb0199a46a60966987f1b0d1cf4037876592cac4cfd23018ac1b3b4be35030bf24629246b1c84b65ea6d188f803802d86546d0080de30125470342ab048dd0301e05510e08ad1a3442c37850490520b45ad0080de39110cb01a1d5834668180f2c590108ad113442c37834c4124068cda0111ac6834b9602426b058dd0301e11b10c105a3b68848671ddd2e180d03ae61b9c74aedd2afb432ae80afbe5f960bd92bb937cf8daeded884b635d93346612ddedd50c564cc6b657cb0563ecf54cd25b97d3eb1c195ecae68138d825c4e039d7554d1147805dd637495c67e29d155ac166754ce500749667052be42ad3690c5aaab1d9201340cf53039384b7461d416233950c8653c6c8ed06c86d186472c368b93500b97b05995c83619631727b02721b0599dc309edfde0390db38c8e41aec063446ee10406e9320936bb0d3dadcdc51406ed320931bc679cdc301b9cd824caec1ce6c63e40e03e4363749aedececd61acce0e018ddd16e9e8e3a23b9f4c6033f017f99689e5d89f95b114c3bcff491fe212ba77ba6d55bede349ff575d10941c50c6e3131ba3dc20e53d44e066e601f93d4ba6b477afa280ef3da9166a0a8b70cae173538c1c218b56f016a5b99a4b61e89d565586e8eba5aa6a88b007fb9af49ea86106fa7212dc674cd9d033092591f158a2a506a27e45d5eee085d42c4f801dd01cd5d725e48f6bce5e6ff009b6e9d8e8996d8ac55efd8571887babb031bcf4c47c545f72cdf738e9c5e0ae86b138c906a24a11b202c6316ebb80ca396695986a8cd0221555b93d43697501bcb630e08e5d9f21d019ded8244a7d1f3168dd1391ed0d93e48741a1dd13246e72450a37708129dbd4249e7e180ce8e41a2d3e8f43563745e04e8ec14243afb8492ce9b009d5941a2b36f28e97c14d0d9394874f60b259d6f003af70b129dfd4349e7bf80ce2e26e9ac61df8c66b3fe2a18d012fbe5f0d145e78f09baba9aa48bf6284ce1fd4c74dfc7250cc0398e2d7cb4ed0b68eb6692b676a4f26976a3c82a42b7cc5c4e4417dc24fbf34242679b4e61c5b790114cbbeed2307e646c726f374072f77478c6c48f680be34abdf660ca797690e81c104a3a9b003a7b0489cebea1a4f31150d87b0689ce3ea1a4f35a4067af20d1d93f9474464061ef1d243afb8592cef78075f609129d46a7331aa3b310d0d937487486734b83cd80ce7e41a2b35728e95c0de8ec6f92cef68cce5cfba53c4247220bf9a75464ffa2c739fcf4ef116ca3f645fccdd1f6b5c80637b8e4cc5893340bd03c201d9314309bf5fa538333988d353cff007d48038342a5d1bd228c51793018b7dc3f28541add8add189575009583d2353f991e73596133b1cc16867ad4e9c439f0b290f9d2a274f42f19f3986b80c71c6c92d086449cbad06b77cc466a67cc2241ab688849023b3202473100aabd637b850c869e1b9ac3a62c06a0763746751360ab434d52dd9678e7861613ba1481c279373ce86dff4d092f885ef36dd0452cf0323a01ec7b539b175e056afd034c52dc8c510c8f09de6df66aacb2da1bd8eb30f3f5be3396e454487b1a952d0095c377670805e1cc9ed5688aca29a0888f304965231042e5d80fa8a874ea6c3e1b305e14eab0690aa8f5479af7930e892b5898448f5b9fc7a6288897d2144219b3c8b5a070e79824b33e2033cdcbb88c9d553f0990372a1db3e1933bf72b8c2be4cf03857c7450a90de7e603f701ab1d63ba121acff476aa9ea56c56083d9692f68f96a563e3376395d05e80c4b1e9a884b02559dea0a85f284fffba1d14f6dc209119c6d3bfee05641e182432c378fad7f580cc714122338ca77fdd08c81c1f2432c378fad75580cc094122338cedf2ab019913834466184fffba18903929486486f1f4af6d80ccbc209119c6d3bfee03644e0e1299613cfdeb0140e6149364b624959720b84dc749a4d86e648a6530ce705c98171dfc455c5aa706e75035832192312abf02169abf7b072e1c28da716c944a63c3bfa781818b69c13a7fa14f280f56db026c737ad0080de3c16aa7014267048dd0304e9bdd04089d193442c378b0da6640e8414123348c07ab9d02083d38688486f160b55301a1b382466818779b5b07089d1d3442c378b0da0640e8214123348c07ab9d00083d34688486f160b59301a1734c4fa8c9e5bd4b25f62774fa217dd9dd0ad51879034c91d781b8e4cd4dc76ca4fee99f8d64ac43ee31405ec1eeecee98647f7218a13b845498edeed8668acaa660a9cbbc74d8e1c0f4dba1b1f9452f003b9c9f8e2d767bd9e2ed39c5f80d5081149a1fa458c8facee9a7ce5e48ceb296e5f687f3b940c56c9100ddcc277cd3b46a035b2c0aee46fb613c946f26e8122ede9d9b927b07d3c23897230758e98260ecaa2d3ba8c420b5c60e2af91258e9c274ac5bf36e94564e125d30687cc4d2d8d8d01fc07a4bd2b38c95d6f7695fc66a6c9c722da8f10f3349e03e92e28f05eec349192374b5d982ff996588d40c10c22f0a22a9063b378c915a17905a1a44520d76121b23f50750452d0e22a906a35363a4fe09485d1244520d0e091b23b51128fe4b776fc81ff60935fb813a7fd9eeecaccb618dd0799c4a8345bda3292acf0645fdf0206d603ec0e4441a635d26a340212f0b129d034349e75240677990e8ec194a3a1783c25e11243a7b8592ce33019dcb834467ef50d2793da0734590e8343aa7d3189dbb009d2b834467df50d2f932a0735590e834ba00c6189dbf003a570789cefea1a43313044a47a4e748f1dd30fbc3d8f1a15d81351e998eb56df86217ef705c18170ade02c85c132432c3b850f04140e6514122338c5ba55c0bc83c3a48648671ab941b0199c70489cc306e95723e20736d90c80ce35629570332d70589cc304eafd904c83c3648648671ab94cd80cce382446618b74a390990b93e48648671ab94930199c707a93d6ef47c4163edf1dea03dbe2148741a3dfdd2189db3019d2704894ea39b981aa3730628ec2706894ea3c1bb313a8f03746e0c129d464f703346e76580ce938244a7d1ad288cd17907a0f3e420d169f4a85b63743e09e8dc14243a8dee116b8cce4f009d9b8344a7d1a36e8dd1591d044aa798a4732f4e675ffbffc53cf102b67623ec873aec242e85a7eece799aaee8ceaa0d63541a5b9b710398a7b9c52495f588bb7e68b8fd337db18284f99c963240dd6926a96b27f18bf2556d236d90c576aa4bd91d7d3b4df3dcbb9922f92e50f99c1e06920d76d31923792720f98c30906cd0d31a23b925a8f7cf0c03c90687428c91fc0ab0e4b3c240b2c1c13b6324cf04967c76184836d84c3046f27440f2396120d9e06c136324170392b706e5f46ca31dd6c61a12df03cf7b6e50a834dabb6a8cca1c6095e705854aa3fdfec6a8ac0aa83cdf2495ad88f758e722b28ad045b193ec0f0a093d0d0ea7d66093c118b1c783e27e814962337dc49682b310dc1d9d628df68771e24439a0f7c2a0b800a32bea8c59eadf80ca8b8242a5d1e55fc6a85c00bce9c541a1d2e8a47163543600546edb9d5dd8decd2c0dfaca6da6a81c0cfa612f3149651b4665aefdd21446183d797905ffdcad8ee6f0e3c747d8f7f3ed7f3bbf8fb6af45366c61083bba6b1297e04b4d12dcc157d757b0e6e6ff9f7ed8d7405575593a9688f56483837bcac6ac070347b07df79e8714f6f87338b0c4cb4d52d9380e954253a3a357b9114334b603b5fc152669accd6e9632dd8b6da0e1f6ebab093d8c3c7cd54d6b50dd5c998ea625b43d674fdba924878c633578b9fda2f32c8f353d5713da961f6e4b5062b6f7be91297a5783a27d553a3663ad200bed9fcb89ca86c146837a6315d087a002ba3aa8d41a6dc51ba3f657e014ae49478584b597dc0ac960bd6eac42aa020affb52669ac6bdfe4f1f97a05c4d97e2d975926f5a8e1ab941a00fbdb119c634b0dae4a36d6f5f13bf092d705e7d85283f1a5b15d164f05c5f9fa7478c51e51cf58c85ae4eeeede6968381a2bdcaf80c27d83e9658a94b01c967011fbb480bd7a04d82c7d0afb951e4a61705ae4625364e601326f4cc7fce61eec6fe73ac5feb184511be699a5a7010a6f3249611d40a1c342988f169f0b2a969b83734094c18a659b292a6f0315cb2de9a0b2478ca1dd702f56f81c14e65b4d5249bbe9c733ef470196b0eaa53c84bde02d0161b7a5a302e943f6b40532c7030a6f4fc7b4175a7c47b1f6f27226c478fb93f92cb4994456466d9176562c0b75cd3c15107b47bafc621159419c01ae7cc6841858488b8dce3745e5dda0b6de999e63f47aa47fb0cb98259e05e8bbd3247d2d897f509692e61c01956bb764649d13fd984f35b880a0aa295a8bc088cd5de9d8b186dae41846e644fbef223659d03d47ab3cd401f951c046ef0ece117a61dccaaf18543cf7a4e3c4d63ee9f795c6c8db08c8bb3738e7ba84b1c7b12e28d2f705e75c1783558db1735db68236f6fde90880e821cc693f55d098251260890fa4635b0a7c44669a674c66a0c9825dc7149dad019d0f0689ce01a1a4b321a0f3a120d1d9379474de036af0878344679f50d27909a0735790e8ec1f4a3a7f04743e12243afb8592cee7019d8f0689ce9ea1a4f36040e76341a2b37728e95c0fe87c3c48741addd5d8189d2b009d4fa4e7589cddd00a32d60d5c00e87b325dfd950ec832bb0dbe9c1197e67940c69a941608da9f4a8f2dee866e3663ddbd6d4187c6d341da287280c92e5f6345fb003014f14c90e81c184a3a4b009dcf0689ce9ea1a4b31814f6e78244a7d1a39a8cd17902a0f3f920d1d93b9474ee0074be10243afb8492ce87009d2f0689cebea1a4f30540e74b41a2b35f28e9fc1ad0f97290e8ec1f4a3a1b8240e9159374d66000ceec36fa19450e5faba71a71e97a35389b91877153b1aea0fdfd9a492a3b49a8f4aea01d49e8e6228bd9bfe9c4d6e50c72143213d320d9c6e65fe602bb7d3d3d9b8df4da83e6147d0de87b23287b61191da03056ec3f03f5f79b41a1d2e8e084312af70575f75b41a1d2e8c084312a09a0f2eda0506974ba81312a0f0754be939ea9fe03d35fd518dbb4a101f08fefa66b45ad33279daee359c026fb979130afdbb918d4d6ef05676bb001210c7ce6026b7cdf24954d08dd428486db85fca3a9045b326f709da331af5803d8e40741dd2dc86818646cb7a09f4043f2c3a0526b342c3246ed4a40ed4741a5d6683bc818b5b70087f0b1496adb827a7e3eebab1cc9285cc26afaf1c4bb867c02abf317da70695b8c6f2c0eb81c58ef27e9982e83af048271406f93a7a7188b047e06f6fa6990c80ce302bfdf01999f05894c83c77e1823f31340e6e74122d3e086a1c6c8fc0990f94590c834b8e8cf18991f0132bf0c1299068f543446e6c780ccaf82446618b7fc7e1790f97590c83418ca1b23f34340e6374122338c3d4e7d40d0fe6d90c834b891b23132fb0232bf0bc6cefe06eb71637df2fdc090c6f726696c41d4d7a8192ce4c6d601cd0476f943d0083558d08d117a0820f4c7a0116ab051698cd03180d09f8246a8c186a531422702427f0e1aa1063be48c119a0708fd2568841aec943346e80c40e8af4123d46023d318a14300a1bf058dd0302e9f3e0010fa7bd0083518d81b23742420f48fa0116ab093ce18a1a301a17f06fb382f8375beb1e3bc8e04d371fe4ac7dc3a3a0531ed73eb8c6d363e10d0f7b7e9d94c62fb8912debb54627f4ae730d18fd234b26e6cf2c233a098ff6392c846a4f2b11f7433c87c56bc17a5639aa2b91d140089ff06a7a7734028a727340245fbbf209119c6e9094d009974c95b60c80ce3f4849a804c2b486486717ac25e80cc4890c80ce3f4846a80cc8c209119c6e9093500995582446618a7274400995583446618a727640032ab0589cc304e4f6801c8ac1e2432c3383d611f40660d9364aa9db36bd02e8d3526ff008dc99a26a9148780891382e8ae09749f042a323dce66550c62c3b84dc5fe60ee472d93c48a3ea3d816ea1cb664b01a3276d8d27c4064eda01069d0228d11d9091059c72491ad1991f95cf349a4988c27eea19d744fd839bc0b8ef6b6cfb7ffed408fb6af453664a139728d9dd3425104b9754d922b56bc551ec04864cd9bc18e10639dc65780dabe9e496adb48a8753a8929794bc8816c839f653107e0c238de9e016cb77e3ac2a9c462d33076da8d0554364847982fc2296705fc9e1542f5071556439364ba3b82f44bffa8a531fa6a03bfb99749fad4cfbe0ae354d96ea0a5d42848741a6dc31ba3b315a0b37190e8ec1b4a3a9f01154f9320d1d9279474de09e86c1a243afb8792cedaa0b0370b129dfd4249e777c03a9b0789ce702e825906e86c11243a8d2e1e3446e74580cebd834467af50d2792ca0739f74f72c4db3afce9edba3180cfdad88ef7bbc8cb5e29d9d8e8daecfa4272e19a1b61c34305b9aa496dee41167dff7f075c0d50716d82a48057a6028170f64826068df20d169743692313af70274b60e129d7d4349e7bda0b0670689ce3ea1a4f34a40679b20d1d93f9474fe02e86c1b243afb8592ce97009ded8244673897051e0ae86c1f243a8d6e83668cce13019d1d824467af50d2b912d0d9d1249d0d8938cb852ebbfabff6ce043eeae28ae3b358aa828207552bd282078d20928b1cdee10844c044025845c590832c2421260401efabf5aab5dea8285aeb51a1de5a51eb7d5bb5daaaad774fb5ad557bd8d6ab33b3fb677fbb4920517eb3eff1a97cccb1f9efec7fbffb66de9b37ef08de469976a0b629589adf0a714ede3369d4187270019c4de63051ee60d2cfc91d870ee3327c334fcb33fbb211b1d22a174f02acbb8688958bb0c6d7127aa0b119c99ee0191a2105a4c6188ebb4122476633b6285d2289396c34941f83fad98d897278864cce319d03097b1e7248945a9ac773184cff514cd4b99dd4537720db7be18d2fb3d7b7f9c215d4d597566fe120c0bf3b137fd4cba8c4ccf60fb817af3173c3d9aab440c45f9b14c2d1214e8d22096ef752ebccabf224bcfa0d4ca59d002a2d379bdb001c6eb6cab4ec4300655e4895164fda08ced4aff512daf5da3a313940a51d729e718d561772a576220b7505aca9f94cd4bd2f5955aab216ed0090dd02694035063a6c03400ba501d5588bf613d8308c910654632ddacf00689134a01a6bd16e0c53be581a508db5683707a025d2806a7454bf0753be541a508db568df07a07b4803aaf158ef4300baa734a01a6bd1fe1380ee15c275f2c5fac212f53dcdaffa10a0dd5b2a5a6a597f1ada674c0aed3e726ae26874f0fd01a4745f26ca9e773f22daa2b4ee474de071da2f44fa76f106156df2094ce8b2ecba9913433579a84447c84e2c94cb60573456968994afd2f7391f56c871d2806af47d3603d0f1d2806af47d3600d009d2806af47dce05a0e5d2806af47dc601e844694035fa3ee701d049d2806af47dd600d00a694035fa3ee700d0fda501d5e8fbac03a093a501d5e8fbac07a0539840079a28472478c1b56616bc6926056f2a13de50f3659b98116593d6c46c11ece20fc8a643243d188cb83b5ac142b91bb8e62a9928b10f5793f7c4bb815abc2c6a6f66760aac955521d2131310139594bb3ab8d01db1fc0eac9e07867017179882f0ca87e62e1e0aabe334b905a8898a8736d1e700da6a26da9d4d7a947293bd74ae4f4770e836f408e5b980797a0863be3bfd9e9909eaf298356683b681969f21a372d874bfbebad8fb063f5c33d7805ac9427b00a09d194259e5f91ca50da5a1eee9603a1d24a7e2bcc65e48f3c06cfa76888af3dd1f13a717efd7d8d9b00aa6f5c192606aec6c380d601e2209a6c6ce866300e62c49303576369c04300f0de1a88b0c7ab71baa335526d1ad2382b836db53a3ddb90f18f28731f1ba5659e37cc05793bd50df9e7d04e8eec34378907abae3a15602a5c9dd4898d6b325e1a42616d0705602ce2324e1a41607a4e13c1056c51a4938a947bf349cc703ce399270526b2dd2705e01386b25e1a46e2469386f019c759270528b52d3703e0638eb25e1a496fda5e17c15703648c2492d4a4dc3190343692effe0a2cafed99d0b452f9fb566bab47c8dc12605b45152e15f9d450172c0db1e9784b34425ceed01e73c4938c7a8c4f9244cf6f9927016aac4793be06c9284b35825ceafc2646f9684b34825ce77413a5b24e1cc5389733ee05c200967814a9c1702ce5649387526641d0b388fcc66c076fa4427260bd24e8a3e821d7b9b1494052a514e84dd7abb1494d414561aca7e8072619828b82ce40bd1c210de84f5b12344b2957be1062f87d1d82dc94bf4c18b01bc45213a74e47a7d5d6f1676e9824bc05da8d0d9361d7638478568c5d3bdd18331ecd8c3801804f3a71809eb0d8075718868f628c6285101296e32fb1ba1bad15895ab1494cd921013be67d6a43e9033c1965c2a05a44689dc0f401e2d052431529806f22400798c1490c493481ac86300e4b152406aecb5b502401e27052431518a06f25c0079bc149044671a0de4d300f2042920353a2dae0590274a0149cc3ca3817c01409e240524b19a260de4b300f264390dc53426f04d0694a78448937297ac3bb1740c73a5a4c15c0c2e8c5325c124ea6f1acc2500f33b926012ad4a1acc5a80f95d49303536616c0298a74982a951011d0e304f9704536306f96c80798624981a33c8a702cc3325c1d498415e0930cf920493b8ffa1c13c1a607e4f124c8df5608e019867cbe903a4d109fc01a0fcbe9c0e2c444d4e0b32b808f6e5e7c82ad45cacb203cb2f40367f200da8c60e2c2f00d073a501d5d881e549007a9e34a01a3bb03c0540cf9706546307966700e805d2806a0cf87f0e805e280da8c60e2c8f00d08ba401d5d881e531007ab134a01a3bb03c0e40974903aab103cb1300f4127652c004b3c8d4fb5bac483a44e2f6c935f6bb7b1a0d1ead52bb2bf111c1bb544e8b10a21cae60a11c01e1d69731510e3199adba7b5e3a9ca8d369a5c3cf04195dce04bb93c9ec2690681d526eda9297b8015dfad4dafda01a0f3b3ac0df7479a8de2cd1f7c4ad4c319ddbdd90738478e5cc40295d11224708714eb37f7428ebed4f6ed0057ef04abfea2e518df569c0ba2204d66829484cfb44365b8519dfa5dfbec81472277f5f16d621a0baae94d35d40e339e77ea0acae62a2dc1e267e946559ed076bb5f2e90a9939999d9e24a339dff27340fa43b95d5988d24a33ad5e03ad7f75981662b9198843e4a3c748f8b6047c3f0a81cf75420f8e8fa6cdfb01be6bb2b9f91c6f5cb7b539c9e362a2061fce42790ea0bc36a461e4d2a667fa04ea0e0faffb3d3d11eb0a16d65dc030ba2e44c1892c4c6f9a723903f4f6f54c786e81cadc3c4ef5c64ea37d12b19e2bcd8a1c06e87e2ca7794d9eca68b9d3606dbc41124c8dd172a703cc9592606acc175a0a30574982a9315fe85880f913493035e60b2d0098374a82a9315fa80d60de2409a6c67ca1f900f366493035e60bb500cc5b24c1d47884560f306f950453a31f7d1ec0bc2d54b5c2b8e91cd3e1fe1660174e8bf098094766b74b6a5d53c2d4e5349fe55ee011ba4312ce5295388f009c774ac249b53469380f8555f3a79270e6abc4790ae0bc4b12ce029538af069cab25e12c5489f31ec079b7249cd4aa1e349c3f079cf748c259a412e7db80f35e4938a9b96c349cfdc150fa59885083121355c64e1cec06d905d1cec73f33297cf76533c22d3de34263c9dc46d850de1f26e8250b92489bc8b341121f90d24d85eabda449e27ba0621e9482b24025ca12502f0f494199af12e55700e5c34c9483ec2f55f6970ee342fddd502df6f246d3e6554fdc2cf53eccb8ff4ddf3ad917d6c9479818bf693a075257d8a794f9b8b5b84ff82bb383d5f908e09a6498609dd19c477124c07d54ca74a74617d1a6fbc7a0841e9382b24025ca59b0723e2e0565be4a940301e513fc9c896afff4ae134fe67bd463ed63b5f6e7c4c0e5f6bbbb92189b494b47d90ed6ce27c3f4f02bce90d600fb1f9a649e06dbc7a798f8b604bd5e6112593cd37d46ef7cd5ba7b10007c3a443a542acf7ca6a531cede749db729a3ef63edc58df6498bbcadd9e1cfcca9a63bedacfc6240fb73a968a97b751adad5b06a3e1326d3ac34fcaa198b91f0158095f92c13df505835d79e9e3fd37f8d9b06afcb75ef87ae8289ff1c7bcfbe36cb337aa7d474a98a3e248c3b82d5f98b10528a18132b68b5b541277b6bd33945128f551957c9638997d7327b0771436d0db6354b4a17c322f0bc54f544dd2fd1d4d32f610178412a5aaa838486f67dd0fcbf64a2cd31e9a9a94e4d1d65277fbd77de258671b7bfc80e510bbed10dabc7ea53b048fc8a897b98c73dc9afb4aece4cadfd3fe12dadf343457592b2b4ffe765ad833cbf28a75ebcc6ce82ff8055f72526cafec9015abc9462c6babe508691207f2f87b055bb0b6518e715541b779d9cc7b255778675f2d7d96cc658669fd8e6ed532ac8d51b9140b682d1ff9b30f120f9e177f6cdace9fc3cac81af84ae6ed473db93a85e6896e7bd30c55f0d9190955e8b2ba16e5227f4ba5d24b9a0765e0b51de1461aedbcad40b760e807d3d54e5cdc420dd558a0bb09ed28ee77682f5f40d26cead4ce4689eed1f702f5ee3253610425aeee56d20916fca2907a9b1c2473da07c8b8972c75ea0acb6afe90659682aed4f911ba49d6b7f36b10cf95d40cbff364441fdc8bfd4ea7d488d6b95598d79ecbf05a0bf0b73545714dea0a7599d2301dfef431dd561e0624f3c9e7acda5cb40bfff2184b9d4d3fe19a52a1be67c0370fe5112ce1295380700ce3f49c2496dc14cc37937984f6f4bc259a812e70ac0f98e249c3a9b8d7d0038df9584b34825ce6701e79f25e1a496a3a2e13c0870fe4512ce0295384f069c7f9584335f25ce0ec0f95e08371d0634ba5d527572c7a47727741c20fc5b764e8e12d17605f6abdb5cd6acf93edd0e36dfd4fbad26513adf67f99406c199e6fb4cb4c34dba4f698ee97cf4d69bd83b7dee927980fa0329495f548d4f0ba779113c4f1f4a4149d5f634945b8154fe5d0a4aaaa6a7a1fc1ca4f21f525052f7efbcd22b2095ff64a21cdc85d114f5127467ef99b9209acda893c165f7afd01ddb32418ef3babc258c654a93d37d00e947212cd3b5214dc48dd4d8db0bd80173140bedf180f6dfd95c4dd3cf3935368c980d8ae93fa1b6a089f37937d0e2e424d7dc00ef259342f8df100a09c31bba6ecd18ace9180dea2090cb8fc3953eaf33aeae4daad7757b28e9a4a9a1d5b0567e126a82632fd61a3fa0664d5e0c083f0d916ce010d67b1bd3dd6af467ed1175afc13af959d8f4c2ae57c989c927045b2d27b2d0e603dacfa5666e529d2034d7dcbb30f9dddc108996ea14a1a13d14d0c6a4a2a57a41696857c182d0878936d2face9fb4610580ef0b083762224c95b8ca42895f5a9d8652c0f71526bead41029bba70c9690ea3bd1556c8be6164b030c3e1a1b9ccf4c180efab4c7c51ee5bcf7238f25566713c08137a63493035badd9e02989b4882a9b14febfd007353493035f6697d0060f6930453639fd69b01667f493035f669bd0f606e2609a6c6fcb61b01e6e692606aecd37a13c01c200926b1541a0de62b0073a02498a50a61be0a30b7e0bbd8d616c991a51268b453a11d01ed964cb43d2f974ab43769e552674338d7564c8ceb8ee5480cd5e4511277e8b4aa1f97c199f9d64c94511180dee40e1155112d3f630ff01f0d920694a88e6840f704a05f930694e8faa0012d00a0db48034a544734a04500745b6940894a8906b404806e270d28d1754c035a0a40bf2e0da8c62cccdd01e8f6d28012dd2134a0a301e8606940896e641ad05c00ba8334a04457320d683e001d220968be52c3be18b69edf900654e3d6b308807e531a508d665321001d2a0da846c33e0f800e930654e3d6331780ee280da846e7c82800ba9334a01acda6110074676940351af6390074176940356e3d8701d0e1d2806a748e6c0f40bf152202395165c151a8f643b51acda98307c2463387896fa8f9b2cd2089d39d96645005d2b96b360f8fd3530889e6fc0a16ca4238871f1162e58caa7d35246344ea3290e2eaa9b14ecd5d209b2343ac9cae7e7cf0fc215a30c37f4d0adf6e2192033baf9c3d490f246e346959457780648e0a11b994b726cace15e4c702fc9ab38b5e0609dd5dae846a6c977b3f48e86826dadef737d0e84c1e095668ae249c252a71ee0038f324e11ca312e7d3b08ee64bc259a812e79d80b34012ce6295383781c95e280967914a9c7f06e91c2309679e4a9c2d80b34812ce0295382f029cc592705253b968384f049c25216a8060edb969fe263a4c93d15d47b61a14502913e240932aa412b802082dff6d1648e01ea1f7e85d579d733971cdf65517f8df5abc74127defb118096d1d388cf764a28dbababac93dde5eb4c08e5b65b0bda36b63e206acf1032c35a9268fed21a63ecdc3b41748ef5e21d45177ca68ac7dea02e332e36abce38eda979086736790d8bd25e1a476cda4e1dc1f70ee230927b5641f0de701e0f3dc57124e6a810b1ace56c0b99f249cd432a8349ccb016799249cd42626349c3702ceb19270525be4d2703e0238c749c2496d42ca3bd9049ce325e1a4b6c8a5e1fc37e09c20c9ab54aa324e7e383844ca25e12c5189735bc0395112ce312a713e6a52382749c259a812e74ac059210967b14a9c1bc164df5f12ce229538df02e99c2c09679e4a9c7301e71449380b54e23c1b704e9584935a1999867329e03c80897307931e21ef38741897bd911923dfd9f3a96f77f41bd81d5532b1ee9a81b5d59f25d5591e2e6b237a9fa96e5bf862f85265f6a7369f3e434d4c386b2312f071e0b7af62028f5aebd59aae0baca66f45f59dcc0f0663ea4029208971223490db01c869524012d7521ac83d4145554b01a931796b34809c2e0524b164000de4720039430a4862a9001ac8720039530a48a2194f03d90f94cd41524012cbabd0405e0f12f96d292089a5a96820b701893c580a48620e3b0de41600f21026c86dcdba1c1ee996a44613e87380394b124c8d86b90127c7a1210a55f46c87a351ed3c0a72791813e57093ee2f9a633a2757f7a68f300d352d0dfb30f0141dce449d6b323d9edd81ecbe9b7be7b8fa408eba512cfc8301ffec102b70cfc3bff5b999a7c00a7c84249844cf270de65480592309a6c6f0b0bd01e61c4930359e26ed0b306b25c124fa9c6830c702cc3a4930899e501acc7100b35e124ce2268006733cc06c900493e811a5c19c0030e74a8249f441d1609603cc464930899e515e8a21c08c33610e319d0b084cf22553cbedd7b8c75867dfef023fb0cb870f5254800676a149819dc78f659a622fa8f5e9d95879366b3d6169f5683706acf34344dc75e7e6c3e1e89db968d51bf682e9dfc4c4199550756556369ce21703015f3313df00ff6edc6a39dfdf66bba730d7d761704fd2e7f91c0413b92584bfbe3b2d9e3e9189a63a4d0aab410a173051f6be7999cef2936fc30148ab34a01a9b97fd05801e290da8c6c63baf01d036694035a61ebc0e40dba501d5d8bcec4d00ba501a508dedf57e0f403ba401d5d878e72500ba481a508dada15e06a0474903aab179d92b0074b134a01adbebbd0a4097308146c52a179a46fbe7f65ec53151733769fbf9558076a954b4d4a46d1ada874d0aedd1210e3c7ae6f32c66daa53467c9bf404e8f9104936893d2607e04308f950453a31bef7700f3384930896b260de63b00f37849308976280de61b00f30449308936280de65b00f3444930359e5ffe0a609e24092671ff4e83f922c03c59124ce219120de6a700f314493089e74734983138e13c35c46171cf32e534960bf82bc8e5779828a3d6a4dd818cde293508b1a20f09e37cc81cfa6e76c317124335799444539dd687f81298dca7c9f272ea6cf778254cf1d3a501d518be700d003d431a508de10bcb00e899d2806a0c5fb814809e250da8c6f085e500f47bd2806a0c5fb81c809e2d0da8c6f0857301e8f7a501d518be701e003d471a508de10be703d01f4803aa317ce122007a2e13e850d379d3993865af36e3cd649f4fe4aa25271ec38ca3327b0771434dc6a6e5162d848de8794cbcd84c77914f7f719d35e724f7f0ae6e323d2566050be2f12605f1fc101945851e63e08c225aac4709c8e005d9f42b55daa7ccb33fb9cadd54bf124d1247838bee42be07bed6c718b91777375a669fb2c4fe54bb81a46b0d87697d5188bc4bcc13ee2eb9959e1d4c53352580f36226cec15de09c9ee450691a2cda1a3f78b57f81d6105087b3a07e0a5097854966cddb8054cf85605d5e122282b3b375d993184ee25e9d86760668f54b4368f59e1d066b0c9f990093fcb210052bbe489c31f1908326a3d701d8e552c1128fe36860af02b0974b054b5c0a78c55301ec1552c1121d2134b09301ec0aa9603596fb9d0860af940a56a3813506c05e25152cf1d88e06f66200fb43a9608907cc34b0e701d8aba582d5982dd70e607f24152c31688706b60dc05e13da3fd07545fae9ded9e236ba0d7eb866ae25bb92667081abfada10077be80e3cc07e5f6c7f72b7bd28e9695de865b5c59427bd59f5211c83b498e787c1b3751d13efe6f69769be9ca53b1dadb44f73d21a1dedd1c0d18a580e81297f7d088fea98e48968932511ec2c94b6622e037c3f66e2cbec671cb737311330767fb047dc9eae60616d81d5f20639de548d594a7190d095218ef5ba3b6eeedc0045630b94b12099ab24e12c5589b31970fe4412ce3c95381be114ea464938f355e23c0f70de240967814a9cab00e7cd927016aac4f910e0bc45124e6a4e1d0de7f380f35649388b54e2fc1be0bc4d124e6ab1011aceedc050ba9def3f4a7985ba0e21cb52d3095efb6893c27b0713ef009372cfb9dd7b532817084d324f05d7db9d21ca607437d1d3f7ea541389b65bff3a4cf39f4a82a9b1a6c8ae00f32e4930355655fc10f4f96a4930355655fc3bc0bc5b124c8d5515ff0830ef9104536555458079af24981aab2abe0e307f2609a6c6b0f03700e67d92606aacaaf838c0bc5f124c8d55159ff33037ee9b317879a7c1c77947847345d49a28fea2dd3e3ed1b894c27a0fa2d6fe3ec5c4fdb38eb03866d97fbdfb040eb3ffba7a3c161b68ef6882596c6fcf3deac6abf36337dbbfba3b6b37b9b9f692079c406c9114881c7f465a6699bbc4c669a6debffa12fb3c77cf753e0422eaefd9e191e4f8c27055f6b10ee38224dc2bb834c946fb57f78ee36629c49fe4c436f19ceacda2240107302779af8b4c22d9b2ab14cb1c8fbb2ae9dec9f1a119d16f5140867bde0c7f17393e0261bcfda9c1df599371fe0c77578e4287bfda8de91202a778d97277e2ba9556fabbafb763bb2b529e919cd8a6c96b139f4de2136c4fde49f7412239b1cd3afddd7da6898ea839b1fe7efe2cf0efb6c1b248259ae6c4b6b27f4bbc9fd4a3294a07fa60800eff1a03bab8b7a9fed36bb463d725b997aff1ec44afd0d73e3a2ee99a68f7621d8b6d9994647745628c1a3b428dff3e7dcdfb1a9d672f8b15d92f8928b9ddd7c4c72524bfd9fe4bfc163dbeee319d1caf7db4079db0c6ba5ebd9ad6db0c5cd73b4a2c1aeef90dde2756ef47ad58e73b5df7fbeb7e366fb6964f6574befb2c36e4f7ff90fbdcfb243ff73ea30bdcfbcd5b0fb2b7ee3b7a185f797debcbf4e9275e9eabfc9adeeaaf74b7f965e4b99f5fbf71bcb87fddd185326579fdbdf747700deb337acc1795e5dedfd1a34c594e8c96089dce187b620fde5dd79f43e67b4e5dd59ad4fc912ca0b65b378921decee97eb432fbdb5cff5ee37ed46613fde774a4b3a5dd12f41893677f58f0ebd3e2fffebf4e38dbd5ad138fa74da55c37959ef8bf8caf271977ffb6f56238c33e37a1319dfdda667f76e37d54d1c7f4fd1f2962807968380700 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/48f8a7528456bda4fb4810a74ea6018c.asset.meta b/Assets/SerializedUdonPrograms/48f8a7528456bda4fb4810a74ea6018c.asset.meta new file mode 100644 index 0000000..4a9dfa2 --- /dev/null +++ b/Assets/SerializedUdonPrograms/48f8a7528456bda4fb4810a74ea6018c.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8e9a21dbd59f2524a8a0e1fe67b76c39 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/49ba99e73d9ab4349871a10f182ee457.asset b/Assets/SerializedUdonPrograms/49ba99e73d9ab4349871a10f182ee457.asset index 7241bee..020e917 100644 --- a/Assets/SerializedUdonPrograms/49ba99e73d9ab4349871a10f182ee457.asset +++ b/Assets/SerializedUdonPrograms/49ba99e73d9ab4349871a10f182ee457.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5b5b53db46145e19cbc6d860201093344d69d314a74990c169daa6b7844b52a6699ae1f6d0b4e31830291d73191b68f2d8d73ef7cff4bf75869e737665afa55d49c65e1368f0586bad76cf9ef39dab5622e630f8b3eec0619d2db37936cdd6d816db677bf06b1eda5df8f033b7ff39ab41fb0a8e65b876874d86ccc4bf296b028e4b7056678730f3886d42bb43d75758057e2fc1dc0a9c61ef367c2b30ca8ac3a435b6c07e62cf58ce1a0f21b14e93eaa2cf42b9ac7e38ceb13770b5424ce1220e5dcac16105aed4e9da2e30ed8e7bc17e25b176e1da26cca9b12ad0dc208afdbfc0d12299a8c9b2c6294b49bf2df14dc07704bef6c9c9c9bfa26f58b431698e2ddab8d417176d9fa0332acd93fb2f79e867449b9668a5459b1273c6a4736c07449b14d7c73db486a4b143a21d14632f4be78491e8cf4934dd7e1713790df77cc295c3b648f3df832ecaec803924f0ad364cd49d196e9c483a11134a9ba2650fc10c0e8080c242d6c8fe0e5991cd2a2de48a9591f89ea7631946ec10515cccb3c43fbe2590b92a7c2a9279d7a1ff0979071af80e5c99664fa1c5592fd90c18ec0b0f957558b60a2e5261ab703c207a2f816dffc83091d015bc73968126f7d45de871013d80f32a71b842c763e2b442dc2f41df21c58d3d881c73d0bea6d5fcb2d7e0b76acd5501999a47b5c3eafa795870d5b400d220f70efad33b8d9c894628945d116e187728f2fde5d3c43b0c7990b12911721a333cddb4f4cd3287f2c9cf3e04db97d12fa16bdf6e605d010ffa01ae95617c85b484fd6bc46f3300b78e7265532385eabf4b1235356eb78a58640ea60ceb5a8888410023bdbc755dca2ba711c5b6e30564d8ab164ba5164a857ff6442d6139f209956f15a8ad36d8ef22b8b9ebee5360438edc20b90ced367181fd9b02d1e0b582959c68e0d354b24325c2621b99debc14a8b2582121ea97bc35a9e4cefd3507347f83b58e29511cc14aaa156cdb67ceb4428a5678bbe4d7d9774c65df5422968cdaf71af4f17a6a91aeee90943ce46340adc0d843922b6864b06d0e440940a4b13469ec06635de24b87769f0a6d2ada578ca2dd4a998fdba17141294b8d6a2632aa8384aabffe0e5b5f875e5c851edd12edf53045163d123c85b165f0397e86e5849b5f9a631660cc1ff0ab2ac67ab3503104f3a1c8986709f3595f3634c3b54e53b6425305d4d4b04a9094471094414338a132814caf1d480ed3ed3bd04864658e6a1c286c7d9d5a922ab560f8b914452d837ab5f4eb088f754838a5233cde21e1011d61dc0699f210b6d0ff106834981a013d4980e33ed4247bd0d6ca699d6fe43af48d8c8ef044878407554e479dcb3d74bab05bc12097c37bd29c0701fc53bbdd5572bbcb3ed98239d039dd904e2def75a896ac8a309e5e8b42d8d6131e5611464f7c3f0ae1b49ef088cee9aeab9cee4d2389b9e9469fc0c293179add342bc1c79dc96f08b147754328df34961a67bcb4960b6b6e14487d9b3609d1a8971a2317c1d479f1be4cf1ba02dc1dd3685c5736af7518bf03b3da0925a33a3c3f50e1f9a80d3ca394031ccd570c37ed4b245f1d16aad259ab6c329576e4bba4936f5225df7da62bdfb124774b77ce755d707d287a8338ee86a6c674927ca892e4a1514d2d369258b7f434ae93ee239574f39ec02aafca39dd878451628f80f32dd226dfad0dd65154ed9d56c6cb3a196fe864ec8506dd87615e299ba9aa1d19733a193f56c958f4e8719eb4c4a39beb67abd017a48d269fddd2d3844e869b2a190ada98b100df0d18f44aca1a7efee54abcbd3891848f6561b25c240c6a30f339cdc0b33a73a86e28b0e89b48b8f62ef083cf395641c40d2ab9c2b7863e61fa8767dbbe22e8b4cf51c2a450e5d1692993cad245dfb4f43f334a0a895c5a80341552174dd229d46a9fd06acca19aeef629ad299c8bbcbc5ae803d8b00d204ee099d814b5b0262fd1f432859650fa61f7c7778980fb50a10bcf8bd1a878baaa913aeb8443d28e1510f75b26c1192570b8c6fc19a69929ce03687f4ba07d6a12b4b140d056e8ad944dc1d47900ee1e0197b43dc41f772da69d6e03d91f7db394ef5ed3638d1ad1dbf24663ba497cdb38bf2d5b63de1791f26d59543eb2d3368b0475722ff08da9ff77fe2ea051dd451046dc74471164da6404c990064b3481db017f125702aff5acd5c9c3ed544becc84611e434f1232d055ec7246c299286df733f66f87e6015d8300658da1460c3126005938025859d1d898da88239b06c5360c9b5d08c49b0060458ad779c33e6201b340559bf04d9ac49c8d202b25db1709936198cdad9a829d01212684593a08d349c52f7ba885100fb4d01684900de3b9bec69d0598d65cfb804db67bd8f6f060b0e63f12d254176df246448973fc4397f79332b81f4f9d9b863f11cbae39004db1767039bc1e06faca48d49b07d6912367c60127eeb1be5a9c8f9b3cd8c04f283dea70a8376692c552425c8beea3d640623a031c80624c8be3609d9cd00576eddf3ba98ee6c4b407f6312e894b0cde3c6a34ba3a5f25553800d4a807ddb6bc0ce63f4eb63176667bf80b7cddf3169b33a2f95e779cdde20df021f11f26281f523ab50b1b5055f6c9bdbe10ebd1085f713ed3ce50ca619be57fd1045b2d4765ced9a9ebab1ffae92b493bdf84c80561c7a79eb22cb8fefd32584dac94c73b49bb6069ae7c4f1ff796ae2d543fcb3ff036d079e8ea73f0000 serializedProgramBytesString: - serializedSignature: c6bcc818aacdaceabf717cc2656b160c9123ab42fed91dbe2ff1a063b860907f879ac67c0c209306637aa7178a4c47db1beaf03c72ea2018ac570b1437401c0f + serializedSignature: cb8d22d108f291e6052989feacef45af7cb16edc150925321180678fece817999a075685f6c54baf6cc211fb1bc80e08933c19ae6b20e66ed78f7b4d077c700b programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/4eb7aa2be7d95324ea25c03bf1cab34f.asset b/Assets/SerializedUdonPrograms/4eb7aa2be7d95324ea25c03bf1cab34f.asset index df9a310..87ec2ce 100644 --- a/Assets/SerializedUdonPrograms/4eb7aa2be7d95324ea25c03bf1cab34f.asset +++ b/Assets/SerializedUdonPrograms/4eb7aa2be7d95324ea25c03bf1cab34f.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9df7571c4712807b915608814119e52c010aec020a4846208284b08c02c9f2f97c3222db2061822c9f4f67fbf2f972ce39e77c3e5fce67bf77f7c3fd3ff79eafaba6475b3bdbb5bbc34e0d1e09f6b1bd333d5353f5757575989edda284d27fb1c3fa6d40f5a87655abfad5b0baa96ee84fed3a9dd22f67cbdd7f59cde8744cbf0feabcc36a578e33e1af2ab649bf77e9ad5935a7cf9c57433a9dc0fc5e35a23f77e97347f416ec1dd5ff23faa8d8727d52bfea5097d4455519db9043c4009e346bf6c5c0aed84afddea69ed5b923a8145c24815995faad57e7cc62de9456da3dee31f5389a35a5f386f439336a52cbbc8e1257eed23ac5d026e70afa7f85feef309f9799b4c8ec3f4b8e73f79bd331ff1cd906c9e3667bb9c9ef24db90c64dda64f2cf131d202d3669b3d9d765b6579ab4c4a42d26ff21b35d6ad23293aef29cbfcaa467ccfe0b66bbcd6c3f6cb6dbcd76b7d97ec0a4e526ad30e96a93ae31e95a93b69af32f3ab6228ff8ebafbffe3f937fdaa4eb882ddb091348371b1997ccf64ec204d22d9efcdd8409a45b3df9674cba8f5c732fd907e936cf399bc9b55c99ee71906e30c75f36dbfb094f48377ae45511be90567af25b4d5a67f65f21db90d69b3469f27bc836a447ccfe5e8fbc63667f1fd986f4b8498f7ae41d35692d23efa4d9df4fb6213d65d2468fbc4693263cf20e13bdddebb9c7417ad01c3f60b66bc87eaacf2673dc23a45c5cfe2e67f73848d77bca6d9d67ff5565fc351ec3e8755ec7934135ad1258f16b54fe61d63d337780c558036ff05785979dd3a16c5a0bb044b97e8ca173aa41fb842dca6d8e9511bddbf17d501f318142e1629e4bbc927109506e52bf4648889ed5fb3b31c243909ed039b53a684ce0594f68377d4cbfd2a50ce8cb4eea303fa29d6f5e5f0ae43da1d5ce3c32974910cebde7f468994e6b33a5f7b840a7f5f6246ad88befb750d311d4be4bef9bc3b6ef866efdda747a1baf9669fb8cfe6cbb669f4166d7d1dee870fb9da6cd2da60e6d0d689fc0f667a94416a34400fd8a474d355c9ec016fba58c925862e80419e8c874191975882c96b6af5e25b0afd39741d0bf8d9916dafd1bf26ea294417d6c367bec74a0c80fa115a95256f174bb1a5402fb6adb72d8958d2ac8abc61eb55ffde3f1e549d0d2cb3f66e19f8c9b362dd3a4128f49b0c5482ee22417172a7999cd67b0ff3b26ea33fd7a9fd3189ec5dc098ca0b5ba4b3ca2f7b9830ca0cf1de9fa4b371e3b8f3a64f72c88f5db3db0664ca8c970b024145a09fac821a584f4e53c69b9ad5470f4d11b624dee45ddc7508eff7a0c839d9d5ed764499722e9cc8e562e1d3882715b8d01826576b55a322a4d295f6956d88a0707353d21164fae862d5be1c088b232efc229c7c2d998615b760db8a229b6150dd0abb028055e945134e57cd1ace4ca7d35e78e3ecabd8413bec62afc055f4eb58ac3b2962b2b1f584a39e1eb02105ec6095f6f115e51e54ff8031cf30d01146839277c6300055ac109af0c40f3d59cf04d0168be8613bed922fc3fff7ed897f0b59cf02d0168bece223c8135eb9a5a8cee0c0c3fa0733fa28f9dcbda3d8023b3c76c98fd3ae2e1638fd7d02dae8ec1ec5a307a71917cbd8d36869a70bb297338f486e3fcb784dbf3a6ba43715d94ecd7e7e86db05504a0b7d3a692b712ece02bc1464ef0ae0205577282771728781327784f8182377382f71628780b27785f8182b77282f71728781b27f8408182b7738261babdca2338f6a0debc6e86d8a7b4473ea792ea8e4ee55f7e6cda618b6c656147b64b9ad493ca996ef41fd9aaf38e6c354c64cb757d2eb2ede43ce2a0cd23e0eedd04120cd71f82f0935d364bc14f0ee553a96a78c1bb3984876d08e1a6dda8deb8a977858dd10fae3d1cae2305e2dacbe1aab5e182fb6fb3a4d59605e607d03e0e50a24040fb3940491b2038fa96a9f850dd1b0a42e407c0010e405d8100aa3800f53600103b9fd61f07f1d819ec1b43bc0e0b433587a1a1400c351c86a3360c10de9a30e44fa21f9cd63578af01b04735931c074c9ddedfa47d35b5bfd997d90739b38f1568f6214ef0f102051fe6789eb0f184b12fd03ba5aeeae3ee20b1d4e7fabb9ffd303bc299d658a069b59ce093050a4e70824f15283869130c530bd0e92c74c6a58e13de1480f07a4ef869abf0e7dbfd086fb0084fe0bc1ac80a7f52a4fd6e7408f6fe0e2c4d5ae66195c0293ef099e0b581e8e87d8bdb7bd8b02aaa5a480dae177e94f3a9330138ec314e786b00c28f73c2db02a80d276cc2a136b45bdc27599e59c4a69cbd976ce12fd9c8d9d31100ac939cf0b301083fc5093f1740493cc89544a7584934d92e099bb004b4a01be9a76d9257e1661e8dda365e70b34d30dc5d8155a785deba69e1caf782a57c2b5ffe6fa39ff23d63130ec7c33ad78cbe1148489a979ffe4f2be745ddac17bdf6eaabcde40d6f32f8f1a236cb251378bb6771164dc09aedd4502dd846f5a2856202ef3e655b1651984650af5b526f4c9b0aab76b32fce284c0bae5d6db7953ede327b72514aff8a659c1aac0f5cb6f900dec7abcd423f08bd3c9e90cd1daea03b482bc439450717eb7a6cb1ae5eb94b987bf5991774410f6aec50d9e0118c67f0ba4f99c9a95a754dbfc630e79a963eabf5193485348379b4d0d257aff989a367390b7a6d169c6139c3a290697dd09cd1bc133577d6497568dd9ed1f9b0df7e76fa7aaae0ac3bc759d767b3aedb5391d3afebd875535b790d35bda1759d50ee8a6010d28afbb26b9f3d2f28bb3b39bbfb6d76f3c1b407af3c8ce12bdd236fdd3dddab355dbbe547e7f39cce03369d3b3d6545af4a4baa13ebb25bfffbd4b895343d3b5b4e50e5d3c5d9fa88cdd6161fe5e3ec19b3689b5ab6c5efe772fcd8f61067db559b6d6d81d8b6b0f25ba8a75ee02c7cd466e13e8fa7a6a83a56f5690be962824c2d53797eb47c98d3f24d362d9b161003201f1e198498ed9edbab6bdd38d6b5912cf13ebd8be6c7aa6eceaac76c569d588055d00d9bc388e14476de0a5bcfc28f2d17395bde6cb3e58e0f5b52d34ae775890c2cb8be8495c3114ed9e187eb258eebe336aecd192d49aabe3934cfa1065358d6d96a677a0ebd8d1e549dbecc59f6169b6557735ae6f463867c5a56784e3034ae7034aed9681c60eb4fcacbbc9120a816a387d3f4099ba65d79f66dba717402716a1a97660c79a2d6e2b590bd9cbd83367b1bd992e9468bc6d5e8dd1ec04d1c5a0f63abe9b4a4d92d0da247d3c759733d183fb3d5888571efe7341d0a46d3eb81693ac0693abcb04816448c5e484e3091ec118ec6888dc68545a6118ccd57399b476d361f677d15962af7296749b363fdacf1d639b3373b81f4bc014d0e7ab4764b8af52b160325cf622499d1675ec633606b562570257a52e5ffa83a5c7b0a97464e6a2b06f527f799a7ec1260ca997b707d5479272417fa0c732e2b9c780ae78faa41f25caccdbadc36f1cf6b171b8b5c599a34ae42bfd72c1da7a55a94c0b5e28716e84db9b59880ab2db3fb90ff05ef8e808b0abed9460b70fa61936680d4afa50e9bcf39af946b01ea1114e03ee51bc0b736807bb56afd8671d83aab5fd331a58ae3454928812725311523a6f988e1813f88851ee1e702ab8e0b7bd62333705460a8beadd583bd206fd81b48f0b989379ae64fd140506df192ea2c152cd54ad95b9724b45293f77903928406640a2074b8f1166bfb0dc9dabe0acbec9a678c72dc7b9d42bee0a024adf697e663c44222c049950a90372591ad34c806f501632a298bab460ad741826b5a125799c1e5cccdcee1cce0107a59bd1cb616296c0d04dbd392d8561b6c53784a17428391074c6fdf427c49397ce552f856107c3361c4b5d1b47167831cb21d52c8f61264b3d271cd1936a646b9d1f3b066826b4e125785b23f9a1102bc2b52f0da09bcf930aae738828249d5dbb2114dacdb514e90dd0a03597a4f4d30a28921ab27c89e918e68e93db5ba08f6d476115cb7c3c355275b21c5701d22b89e95c4c5776c8f46b063fb20c1f656496c6b0cb6596c39e7d50cb947d88d62a2d910541080cf85d110a4776d05c7a0625ddb1a82ec6d6144b6593cad5ed6c3c47055125c77c2c3d520db6e8ae1da4670bd3d8c0a99de33136c04c462d83182ecf9303c2cd53313c425d6d5384070bd20892b7e37e447b36d4c12502f86054a306689813a4a40bd232c5082f3b062a01a09a8774a82727bf9a9c70ba23c5bb196607b571801dee9422423dae3da4070bd3b3c5c7511ed716d21b8de2389cb3e048a22b29d04d97b2591a5ee2741f4821508f7c2fda46282ef7dd21e97fa66b310e6f8c59a801682ecfd615452778e3fba533b0f10642f85d10ca486452722382c3a42707d4012173f032bd8146c93c2b68e60fba024b65283cdfbacaf60d58c4b415304da8716039aa0a789418b11681f5e0c6882234e31684504da4724a1e55ef913c5998d9504df47c3c1071ddd90174e89e12b21f83e265d6567c929217475c506576708b48f4b42b3df018862358d13649f080359fa105ef02e809897ed27c83e2989cc361519dd41d51a82ed53e157ce284e7ad711649f964496390e15c425360edd43707d26fc58263874178b658709b2cf86e161a91519519cbddd4a707d4e1257f64553d1bd1fb59a00fc7c78fed610d1fb519b08ae2f48e282e186fbeb38218c00c406ed4d04d817c36802d23b19824d8058953c45907d298c2a99ea641c8b6027a39ae0fab2242e7eb25bf01900b1e5c62708b6af48634bff099910e2d925296c6d04db5725b1c1837af33aa34f39df5812bddb29a709aaaf8511c7524b5da2d895dd4c707d3d3c5cc24f9988e1da48707d4312977d6c29381c1743b69b20fba624b2dc4b5d042ba8d852973282ef5bd22da6bda311c51542ab08b66f87e375dc6d3bc14a2b86af94e0fb8e749c1b52ee97fc85d04713ebdab61264df9544566c3cee2905df552f5a3d4ba4602d23b0be17463b9a3e408fe29cd97282ecfb92c83207e8517c1e7807c1f583f07009afe116c3554b70fd303c5cc2cf648ae14a105c3f0a237ea58f030467ccc4c6015504d98fc30ff982c8c442fe7182ec27e1867cc1c945b14ab98fe0faa924ae12e55d9111cdd98cf504d8cfc28f625144b65ddd335f389a84c9ac9f43b1c74cb15767ccff3adfe0b9c6580763db6e35829303ce777c0eaad4b7792680307e3fb69f6f09ce2e136ccb2eed17d4004fa94c06562a417c7da8cdd2dcf6f1255c96a5541270cbf89eb6ff9750eec5a6dc8b12308f1dab0bc0f7726bf42bc57f616d3877e0df78e57a59c1af154de391a066217e0d8d45babc09bc6e62cb1bd3a783b3fdd734961525b62ed4a7fd6bf4b2a44f3bd2c611bf4776671ed6d9cbc16b73eaa869f407ba506a042f0fbfe9989bc4f618348bbcb456bd3586b64ea0d429e5fe15e3af3214252114fd4692671edfd8792fd7123e42242142bc9256899250897ebbe4dd817af7ef2479e6f9c8f57dece1bfcff4f03f2c7978a01efe47499e793f6b751ffbf89f327dfccf4b3e1ea88fff453a8ae7715ff73ef6f0bf667af8df963c3c500fffbb244f1f2b4cef632fff47a697ff73c9cb03f5f27f49f2f4fd7307f7b1afbf9ae9ebaf2df97a40be0eaf4aec3ad35f18bba48f1f4679f017ff3f86dbf21d0ab70000 serializedProgramBytesString: - serializedSignature: 67d53bbb7b52db077e7837dd94cbe11b0bc6be5e05e1ee6c1c0c328d93f70372d0d01f06621a09724eaae2123b35bbe31837e78fa7623d36f06bbba15504f50c + serializedSignature: b4bf77db168380e992792fc772026ae5c12ee15f7d5c4ee9073e37bb481198a93b627c0b338669d40784ef2b27d98d0c8b0594de1fd38399aa2efd16db4b3f03 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/4f06f9d2e68d8114ab22a62bbf43f319.asset b/Assets/SerializedUdonPrograms/4f06f9d2e68d8114ab22a62bbf43f319.asset new file mode 100644 index 0000000..fbdc207 --- /dev/null +++ b/Assets/SerializedUdonPrograms/4f06f9d2e68d8114ab22a62bbf43f319.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 4f06f9d2e68d8114ab22a62bbf43f319 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e7525c8a3b94e0411392602d5002c15a24c52ad0424802a404482348dddddddd5da8bbbbbbbb7b7f757d776667b2cfeecd73b77b9be732cbffa59fb2acdc33cf7ce7197f6626239b597f62c3acbf16b1796c0a1bc116b252b68eadb5fe35c5baaeb1feb3efd4f32256655d575a7f175bef86b1cc24bfe47f06c5ba5a7fcfb4eeaa598df5cb5a56625dcbc5fbf9acccfaf74cebb765d61d7fbac2fabfccfa2ad6c8fad14256c8e6b239ac4bac5312118bc48faae5b3188f57ac99f5f764b6c97a5b2694e281648b575dacbfe65b6faac5bb3596d2eabbc56c7711ad35d6bb12eb3755acc292b95c486cf6cd0c26fec1ec4b1f79ed2baf99d6ffcde5bfb792ff6e26ff0dbf6f2caffd7c7edf1ffcae39f83727746182df0fb0afb162ebda84b18c91e09efff61bf9dd405b5ec6aa04b2b2e475b0bc0e9132737de8df545e8726896f2219c3802c3fcc9ac9eb08791d2ef5cd4b31fc1c9b51ec5c208fb35c0ef41901c26e0edef367d921e2aed2b1c4938e25763a669c29d3ef13f9bd7ccf545c73a56ceb9bce2a8df3e5755012bd46d9bf63639963b356985b55cafbd1f23a465ee577b132a96b3eb80fab8b4ad3715266a90c6394e6b9fa9ebf573a6e2bafdb79d26bbcfc4ec561824f7dfcd89fd269850c632cb8b738365a9640964af7959e745f297f7ba2cdb1d11d9ef800fbd3ca9d28e58d4b211eab3cf15865ebd238cbfd5d521d94fceda59c7229775b70cfe59e1a306e8de4ef36cbfb492c79d9d6c7c7bb29b69c668a75a11d4e938ef6f326e399db962727d153a5ed9e9eb4dd53caad907255fca7daf731c5792890c37fbf9d47ee6a8fdcd552ae2a2326f8d4739abcce94d759f2ba23abcbc71337ca6733e4750719660573970115f2fd74e7b7dd1604e496288d667bd27a900c774d1299eaf773e4b5b9cfefd5377343e85c24af2d7c86d9425e770a11664bdb169afde0b185c22432e7d97c9bd5001d2c39cdf795f7f3e555a5e942c9bfd26307aaee486407c97459247561200d2c5d5ab495f73bcbeb2e6e5dd8ae1e9dc6d79f4eb1b552e60470cfafebe4f389e09eeb5a6487d3e211297337795decd179099dce566b57fcae752b601b7e7e97c8bef6b0e3d752b6995a2a9d967a742b72f46e56087eabf4f0931f8a258b2a0fe32aa98362bbdcf3ddf6e09e5ff772c213ffb67edb4ad9d600f09cff7612b8e7ef97f9d4b594c5db2c975303c2ae9161cbf2bfd589f2db32169ff774bfe5d76af0ac5aca7b47fe6e058bafc7d4773c6e05e09ebf2ff119b7951afdac705b4f4af05b554eabf2678e630f4d5f90cfcaa53eb5cc9db76ae5fb61ce6feaea973dedfb364a97d5f237eb0197f5b67e5babfa54fdb692e9ebd9b58083cc8f6c9d13766fd52f5893202cd52e5576a3e2bd8723a76557a9bb2ac7a47dd6e519efb7fc994aab0df2bab7bc6e72be2d5036b75e5e659d1ddbc05c6533ab05cff975a37c3f19dcf3ef6a1cd95d8f95cff6f1e8aa4b4f5557a8b8ebca804476d64eeab189b9f3fb269b719b4b6d596d33e5f7fbc9ebfef27a80fc7e5fe62a4bd981f2f9c120ddf605cff8b7533cf15bcd12e78df6f2f77b7b74dddbd6b5ad2cffdb3e83e87a10a2ebc104ba1e62eb3259b5090e95f2f601bf1be0d1a7d013b64cffd87ef2fd54706fc5b7bd4a93c3e4f5283bcc81cbe4bdb223affdf27f1f2d651dc4e26dfa18e6b669a5c7211e6ec769b849c6ec70f0ec10f9ec08f04c3267473ae1e75fe9e1b28f0c4fb5998fb7bfdbfe01797f82e430c37ede5ed5df7ed348f6f7c6a970dbb9afb1fdc1ef4f92ba4cf77c7bb2fcf640f97e06b8e7d703e4f399e09effae3b907d8abc9e06de2996b09da7d89eea30eba8ca4995ff93c539515920c73deafaa867c9ebd9f2ba23909d29753ad4d1a5aedf720678c7ef65ff859deeb19f44ba9c23afad93c4a70ff88e5fcf0d11ff44ef9ac8ebf9326e873177bf9ddf5bb6d8f18304b22eb039f590ecc458a3f59b4eaa8cb848a6a9e2733188130f43e529eb9b0e07ca7797c877206f31d9c78d1d099e9d2e9f1de53c13f2f8bb4b3de9b383e7fd6540aeeefde54007ddfb2b989377f83895eaf35ee989cbe91afd415dc9ae8a8fabf80686bd6380b4bc5afef6684f5a1e6da74be76b13c8ba469f965dee91f7d77ad2f23a4f5a1ea349cbebe5bb6341bac9f1e0d8719ab43c1e705065f60d485aaaf73702b9baf737011d74ef6f76a76557d566ba05494ba83f4ccbcdf1718d1de7095bd949a2b4bc4d5e6f95575ddfed7679cd977267fb90abdaf33509e40ef0c89de343ee5df27a6702b97723faa6129eb27535de780273dbbaac43bb9d9940d63d4c6bebdd55bd792f73dbfa7dcc6deb27b2785bbf5fbe3bc9497f26ebd6d8c92cded64f0176a2fa700f806fa0adaaf70f02b9baf70f011d74ef1f662e5befd1483e7f84e96d1dea0f6dfdd1f8b8c64ef684adda9789d2f2310f67c55795cb13c1bda56b0fa59f6a1b5cc812d78d8f337d9bf534297f2eb8e7d7d33de19e2ec37dc396d3f30d29a7957cfe837caecaa027ecfb296a2eea49fbbb9e5d3ddf3d25bffb5bde3fe3e1ffacc756ce74ecad2e2e4f8377306e6731779be439f9fc6c9056678167babe4032aecfcbeb0b1e7e67487945e09e7ff792a37fe124f9ec45793dc779d7518d31a9f46d05f478596f2b4257906681db482aceaf2489739032e91ce62e93ceb1ed609b610964bd21bf294af0cd5bf2fab6bcbe29e59fcbdc7d70c5468ee9c4cef3bc3f4fbebfd361dff513a08792cd7fb3938ff8bf27afefcbebbb329cf399bbbd2fdb9ada3a22d5766caaefd4d8eb056efb11f7563af45673dfca1693cd117c20af1fcaeb3a29ef420f830b1330c8f719568278c52e66ee7130d5e6fe48de5f24dfcf93f7977abe576de78fe5fd259eef2ff77c2fdbca4cda4fec32f7f7ec532087df7fe6c44de8c29f7d0e9ea9b6f9170e9fbeb21f1cbbc21d36fb92b9fb7799f2bb2be577f3c1ef2003f55e728f5de589d3d5f27e21b8e7d76b3c72aff2b0bac623f75a8fbe5fc9ebb7f2fa8d13c7695782df009eec6bb7cc8436fd9994719dfccd22706fd974df44ed7ff55bd566bf41cad819dc73199fc834f91d9715bbd1c3ef7af09c5f6f92ef7701f796ec7e89dac79fcb6f557b7d11b8e7bf3dd2c76f6f91d7cd9eb86d96321eb0e3d6ef9504b2be93d7ef3d69a86c96cbbb4d93aeaa5dffb5bcbf95b9c7c06eb575e8afc69965db22ceb66ff1fc7e57f7ef07a8318b1fe5f5278f6eb733f778eecff2fa0b6e93ec578fee7738dfd4e9f73f8f7eaabfa1f4be5386bb1bd0433de7d7bb98bb8e52fd8adfe4fddd9ef7aa4fa1f3174994477e67eef9ac44dff692612ef6f16d6f79fd83a55c76b33f812c3f63447fc9ebd13ebfef60dbc840394e31508db9ff2baf7f2791a3c611ef61ee3af31e5b2e9f4ee7720765a526b74efe7de0fb64e3940f30f738e503f27a3f738f53cafe19db46dedf2bdf2fd13c57f7fcfdeef25ed5df0f02ddfe93cf1e02cf541df2b0f38c3f16d747c0b34799bbce517daac73c6c1fb3d966a931f4b73cbf7b0be8c09fef01eef9f571a0db3ff2d9139e309e9061fce0f9ee49f9dd5270cfaf318f9c656e3983bff1c8791bc45bb65d63efcadf16837b7e7d473e5f0eeef9f53d8fceefb9c3aafbee710f07f5fc41f9bcc4f3fc59cff7cf7af8a93e73a9e7778fc8e7ca6fada77cfeb47cbe02dcf3eb53f2f94af03d2c5bdabbafb16700b3ad3c79407d23fbefb1e73c79e0391017fe5c968bb10cf9fb119ef7e5f2792ff9fc794f1c647f2ff6823b0e75f2c679de2b79de7cfd22f39faf5ff6c4e965797d89b9f3f54bf2776a8ee115e6cad74ac75863cf7b4cc75703e8f8ba47c7d7e5f5358f8e8ad3d59ef7e59ef76a2cfe29cffb876d5b1fa6e6efa5bf6cec0d5657f70d53e3c6cd3cef208326e09d26fc98fafe11e4bdf42daacb63eafd83b67ec33bca7b59b7c6de74f41beea913eade41f92dc13b28bfb587d3dff2fd9ef23ec5fe7a1d8ff799bbbffebe8ccf3bb8ac587ba6f7b7f840ca2a00f796ac11ca27a703d3fb7860bf53762cfd0855bb45f8bbf3abb2db2e0eebf16a2ca8b39421e7c146246aff77b4bfcd566df46ecc35f71a53e3e2cacf52cd31947bdeabb2606bcffbee6e7d45dd20f51d78a25b86caab75e9ec0d43e5a3369ef73d3c723e74db89b8573a3491732b565839ca6e7bf9d0b127d04de900c31a9f202cfebb4e36e79c6132ec4909d2c45b277cc4fcd7099f3077d9a4fae71f33779d20fbae4cb1fb94b9ebbb4f6d7d47aa31bd6d6cbd07a87a57b67b63999e787fc6dcfd8c3fc0737efd9cb9dbf3b28f26dac08ab9f40fcb556d752f0f3546e087c7571e1eb22f1efbd2c3e34bc043c9eee32f8e2a6e7171f0591ed595ffaacf3f16dc5bf1c8adc065c506307d79f40d73972bdf4859d2a7243690e9cb23ec772add0731777924cbf7985c8b92a83ccacbb29fe7259a3797e551be923b84b9cba3c1f23bac3c52ef5579d4d7f37ea85b5f6d5e9732d0f24885a1caa37e9ef7c33c72be654e79c4fd43547d3ec2872ec3810e2a2c28733cb857b260b91364fef83b8ffd7d27d3e21b5c562c1bb1bfef3d76f4bd2d6b941ceb89e520f687fd4ee681d8488ffda97546aa1d94c0fe46c9feef2835b79dc0fe46abf19b7c8ffda9b53398fda9f76abdc3e19ef7a3dcfa6ad33c2f89fda93064bab1233cef477be4fce0b6bfd172ec2736d6872e63800e2a2c28733cb857b2f8733f73decafe545efdd1637f3fda69312651f9371eb1bf9f3c76f49394a5cabf0988fd61bf53e5df448ffd297fe1ed92dbdf5859fe8df551fe8d53e55f81c7fe2625b13ff55e311de7793fd9adaf36cd2725b13f15862a37b6f5bc9fe291f33fb7fd8d53e5df541fba14021d545850e67870af64f1e73ee6a163d3e47d67793fc3097fba9a23576dca9fa55ce5333c1d3ce7d75fe4fb3c706fc9d8ae99278c5fe577caa6551df03b73da1dbf836ff9f537e6ce17bf21b2d5effe90dfaf01f7fcfaa77c2ee7c0eac6acfe92cfd779e2fca7e77da53b9c3a1bfb5dbe976b02b755e92efbc1ac4b02bedd3c5cbc7cbd0cf2c0bd2563fc2a4f184a172f5f301619fbdb1d8fd83f1ebeff20b2d5efc2f2ed06bed7f15565ed38700ff86e77a10fdb963e20bceb5c17ef2ee019bfff4fcadd0bdc5bf19ea0fcd1a51d6464b8d326c3339e9421cb72d57710f75c8ef47f9850e4095fb5d9d77ac2d9ca23af0adc2bfd9a837ff3ebbfe0d9bf76b81355f92a396734f6e8dfd8a37f238ffe8da4fed2ff63629647ff261efdbb81e7fcdad4a37f534f3805e05e17077eedec3cf33dce21db7c19cd986bcc54dc732eb2fd33d13bfebf43e2b062b33cf29b4bf9d5e09ebfd7ac2b88499faf58915b866bfe4cce5d65b4707e5f3707a5e69ee63aefa6abba6147f03b7eaffcc87660aeba21f05cfa4e4ceb27364995b76a5ef78424dce4ba38af5fd0a4a28072e63397df506c2173f90dc5d41cb1f21b9273a4192ddd1c6272de3303f8d764b404cf60bd99ef4f37edb34d52666b8f1db6b6e35f20dbfe056a0d9eb2c38d49c292df656c0dbe5361b5719ed5957d6d413cdb8067fcaac667f602f7966e93377be4b697df1582b0f9b5837c5e03ee6199d291b9eaab3a79205f67c8b6dee46552ef5d3c617462ce5809f701536ddc7fc1fbe6404ff54cc900e32c2a7ca6d6c7d4ca34a8708799340d74f629e7a2d9a1c17f9bd145ea3301dcf36b578fed74b5594d91ebdfa6a8f5cfca4e9f4c1cb6921b93f3d019dda4fc79e09ebf5f0ce4f1f7eb7199da70ba7be2d3dd1dae90cfdf27f2eb90731b6abe2d43cd196d00f7fc0ac7aae47871462f6013726c2f43cd697ada441960be39a337f8965f3399ab4d24ee2dfed32a3cb2d5effa30579b284395a5721e35438dc3a8b5382a8ff6033af405cff8558d652c03f7960e53e55abc6985485803986bcc2f638027cc81f2fd2670cfe5feeefe3e6390fc6e6f70af184339fbb8e578f5cac8027154f321704e4c6747caaf601cb8076dc0c2cdee382593a77da6fab4720e3463b0879b1ae7fa3ab8ec981a6f55ccd5be30fb827b8bd5745517aa763af08f9bbeca234bf93f27180fd0ea22fbf61943e5ef17817baec307cc55aec6d4fac424f2626a7e5cd9e730297f3f70cfaf6a8f990a700ff3e108e6aa2bc4bda5d78c1b3d72b23d72b23d369223dfefeff95d0e88177f7f80cd77c6239ef82489b7fb59e39818639fc1ca5831ab64d9a253c02dc6ef9651ea97c9378b12fd0fd16b617cd7281e6c8d5591555a02343b362d14fb41d5b03c96abddb1a99b98a754a14f117f175b5f940ba10766c40571675c105cb90aebbf32b0dd54b5f57cbad8ad8a6f38556ebd19c1665957feab656c245b6cfde796b2c80ab682d55a770bacbf2b85bc6596daf15f268b12df9acafb9b79964c7be7ac35d61305b4d2baaf101ace177faf179a9609ed675acf6ac43e5e6bd94a36d9ba6e14a1c5c7bdcafab72ecc0512995e47fd065ad8737b9b2e954c85566cb8f6d9c216ff7f8a34448a886efb81321f36ca16bdd7a3e352e2ff33b40b193ec83053ca182990c55ccf7259b6188798174730781ce363a8b76f9bf768abd19c282e7a323cb97b88183829bcc3ec839a9edbf3d98cc6eea8e5b16c3114d23349d41281e5f2b2c428489028346edc28872beac51fd3e117c332f3d388dffeae5c7c173c019a88cacf9d00621a778155aa1581ca73a150be42a8e68dcc2cb14be34a11056ed91556c4e0b3b894cce1c1361589115fd5268b10961c19bae410a32b0b1a2437609b3b264e906675b17012245bb49fba26305b2c2cd1b0ca90ad2b95b1eeb975eeda05277df549637dbab410e9924a6858ca6ca54b9916e9ce28c96b8644e9d2b22e5e4ebaf03f7a86ad10db4ea60346b0918e60cb74db367fb74e4829b6be0dce900fd50df516367a805b2346985c050c61630dc21c8eb08d462bd6b8b9472bae1022b9892e715a354c359c9a71f3f1cb2e1e048d51e36e97b0160d6ada4d75f48493e632527aaa7738dfea06ec68bd2bb6be2f134d4dfebcc892586c85cde51588109c1ea5fb1789c9f211d4e15eb25aaa1d04d5fea0af1b56338c78330df11c6eaf1d356620ca386f6668876786e65836eb14369bb5c024770e2bb92526b94b58c9ad30c95dc34a6eadcb3662bc7d495ab28d33a8a2fe35d9faed2a2b32eb454fb9d6fabd6e10267176e9e63bbb7417d92593e986868269846593ad7569c71ff6d029e94dbaee78d2b5c104f70c29b82d666dbdc25a5b3b4ce56d42aadc1e13dc3ba4e00e188b4c0d8b5810161d31c97dc24aee8449ee1b36fd3aeb4a0b6187ab494b8b85d6337b0874aa785b2ec6cd1c99ebc43d0f4df52912fd829710b3c5d6fab54297c465493fa6e949892cc287b8693593934cf69fa648476b8028c2e895c10ab82e3a73e3463150432e87931be48996d70207e016d8556781a258294e4b7d65378df2ac7f155a71aab1fe77fe552824a911de624bd2a6b846555e126bcbd2599b28dd06306f932e8c1683fd58d6106159f51b306645dd7456c41376a8ce8a38916149ac68086e45dd7556248afaf40eb9d9a3535c4ef0ce169fa8ebed7b246104c346c912eb8025570f5d72f1662a2f87bc8dffffac3f411aff3d75c923eacb65694c1e6ecfc5d6376bad6faa45082575bf5f6785b041d87d89d534f42652e284cbd165715167f78f8b5dea3a88b5087a5bc865aa8b585f816156d24b67253c21f374999a33104b1ae26c2517b7956d7441f0ac3c0acb1f5ee12370e1bd75c2f948035fc590b459d914179c89659f319aeca3d53a41f6e9a313cebbbd6359fce0a3366fb6c285f7c5341fa7d1bc60729b038368de4f279cb75cb9677da8966b7f4cf27661250fd01556a2a17c106961e5d79561ba38f5aa8ccdb54af33d993d071ddf205473d9f3aceb0aa1057f5e226b85c461252eeec6eb8a3bd1669ccafc3b64d0c7823bc56588f271a2281f79b180358f75da046f4eeb4be7ed45e866b1c1caf781ba5cc54b9a499a92e60d5d3196a0a4198465d982b059364b279967d9c9ba6a89db2af73c6ed15d5b376d8f8733585734881eccde0d5a34d823ec5cde0ae15d64cb9bc3f899741b84a9aeb60c78bd349c05a22dbf52bc0d5b1870efc35edeb10d66ffd16787a9223b4cf4911d2863856580215803812fdf8a9b10e7493f8f155992978a6cb89778cc29d9a95b2e3e2d677b8b8696dd8f0ad2aa18aad3868ff072e7c4a4cd950eb8e06198e01921050fc7f2f8ccb0797c844e322f6db8d367d8165636a6f68e61d5ced149e625ea2c4d89fa772c58893a12133e5b23fc9e8c60c273b1ac30c78f8d24b0ea3c4cf05c5d1e1b204a6b3eab9b293a3235a2535b2c727fa6a80c9dd220d3caebe5d6bf6ae44885fa7e9df585ed981744cf7ccc288ac21ac5282cdd76d2a4dbcf01d36d34267c9e46f88cad82091f83a5dd7c5dda8d6476adb8567432edbacd5d1a660a17c94ce1155b2b66274b45ca558b74cd64fb5819683febca3bac99a21ea810ef32c511ad55a2ac0d92a66331fd17e8f46f01f42f021a0609711c566e2dd4945bb180e5d6b63ae19d997d3299b6e1c39765056ff86c8761db45878d8f124cb59a2fbce55a2bbe9f2f0ca0acaead5c5a4f15e4788d5ed962e4712d6bc80619ef2d701fe26af16fa789c2c3763cd8c234bcf832286fc34bfdd137bcf8a2a02cb185453ab4c71a5813b04275b1a6500d344b3611cb0b4bb0bcb07b4a79617b9dcd8901e8ca06b5393c47cd13b279ce0bdfe0e7cb77b6f2f6fec5e071be0fcbaa2f1d878aede9aac511dc36b96a5e98722793e5e0ac6d1bbec812fa3cb154e489746a8ee58b4958adbd4c536b6f6e1cacd62ed099ac1894af6a50932d1412d261b6c53ab315a3d9a37d247e7dead95b2c35a916856aa92c54eda2bbb7d89bb04a549b65d6735ef0c2f743c51e85bcbd344df05e2307f2abc4207f196ae4cb8591a73b9e98a14fd6d8a2a8004a341540a056f5142c0b956ab2d0df01b35021a6765958b5a7626aafd0a8bd6f93606a4fc384afd4089fd53498f0e93ae1bc60e66b29c3f410676082f9a63f71cd4d3e15a0fa09259e9ee272d15750fdbf52f16493f57785f5ac4488c814cb8694e764102d67626cf7d4b06d1b90ed0e1882d521d9eea813cccdb3c28fe0049e55b3748279fb6b0d43da5fbc8d1ebcfd351bc3be4e83fdc280d8e760d9bc326c369f8b49de2bace4224c725558c93b6192abc34a9e8725628d2611b9f37090449c8f09afd5085f1050f8022c63aed7954d03189fde701aa976f7c919d728b64af91a51f2645a02ec3ab7d4353ec2c73cca65a739483e5f88e9b941a7a7bd4a99fb87f33645b11843e321ceb5ca9b20a12ec2d06fd4a03f3620fa9d31e19b34c2bf08287c178cd7de3a5e5d93a46ba9702b769e8eb49e06e1b82ba6cd3e3a6df8ad936e41c2d90d43baaf06e9b92d82215d8c45623f5d24da33558d6f6b219b2306fc8aa503da7a518d07c7b804d3607f9d06bc649b55d730284ab159b03b86f4000dd2570222dd032b910f0c5b222fc5d43e485768b60ca6f6324ced83c3aa5dac93cc5b1d8730a4d5c1370e0adeea588e85731816cee129855382913a222ca9522c818fd424f0a456c112b80c137e9446f8be0185afc0841fad11fe4840e12b31e1c76884f76c1d4cf82a4cf8b11ae1a501859763c28fd3083f33a0f03d31e1c76b845f1950f86accc84f086be41598da276ad4eeb87530b5d7606a9f1456edb51ac9d9c213329dfecb5eefa760fecbfcc0127f6bb4f8b1b43adfe564e163434aeb74e9c26be853752a05a8ca2b316b3a4d634d9f04cc047b61c24fd7085f12d054ab30e16768841f1950783526fc4c8df0b66d8209afc112f3ac9089598b09e627d4c6b5058709eb5c27f2186fce9789cd43d68a7fad151b38958989eb6261fbce80939ab8e6bbd1644aebad92365d6159fb08eb6910add7635a9fa3d39a8f68f3415ca7dd6c7725ed6e88ceaf30930d92adee4181f4da80d9c0b91a1bd81cd0c03662913e2fa40d6cd295b3c229bc9cb49cc5fc481788c17bbe7bd40a61296bea79addbf9becbe40b4499ccddb7e874c5caefbd75c9cddbd61732a46d7d91f57f0bae72a0b6f53e98cd5eacb1d9fc80e5d6be98f04b34c27709287c3f2c435caa2b05f8923ca7276df79abd2554905cb33f16fa6558e8f34518bc0c2c1065e622d7d056b03c7b0016fae5bad039713569369fd9abbb4b02867820668f5760f6c837900eded73b088bd95558cca6893cc8e3e64c6f0789d9c158ccaec662764d4a313b44170e8fc0b59accf04edb6099e1500cdb75216b87c330adafd768ddac7d30ad0fc7b4be21a4d64760826f0c29f8488de0ec4cfe70056b88ca32cce28cc4d5e44d3a52da6a929f049d25ce89a2d012ab208fc20cf3168d6116b50b66984763f6b339a4fd1c8309be5557bc71a653c4b61c8ad24a516915cb26f83aabd991bc09ab3c4507c96a2f58a3f6588cf36d1ace4706e47c1c56f6de8e95bd77a454f61e8f45e24e4d247202966227e884f321107e9476a821901331b5efd6a87d6040b54fc24cf11e9d297209aa0d11c47c4ec642b957170a77e6596afd9763fdaf42e3f75581db67a760e8eed3a01bdf2118ba53b148dd1fb278380d13fc808e96bdad989ae252c543b1c8feaada51d36fbc7a09a2c9e998260f868ce21998e0877451e429b6b86e06d12ebf760f385c7026660a0f6b4ce1c480a6701626fc118df027020a3f1b2b1e1fc58ac7c7522a1ecfd185c3cba5c7fd247602ff977331c14f84147c1e66454f8634cff375827912f1b3a1bd4b13b880204b132ec08ce5698db1fcd03198b15ca813ceab217ee25ea86ae8224ced67356ab7ed144ced8b31e1cf6984e707147e0996819ec732d00b2965a04b31737c5157a8f1cd2178adc62798b9d3dd4a56246a38be7c67a3785329ca74deac0b62bb97615abca4d3a2439d16bcb6e5750577dab0dd6653d7e1724c8797753ab4973ae459ff97888e0fffcd46ebefd435b802d3e0159d06cd405af0c5b57c1c2f48685762e6fbaac67cf9de6241ccf72acc7c5fc3ccf7f594ccf76a5d385caf373485de56010bbd6b30426f6a08dd1390d0b598f0b734c2df0928fc3a4cf8dbbab4ed124cf8f558dabe83a5edbb29a5ed0d5876782f51d1945bcf45d38d9816ef272e9a46d663d17413a6c307898aa6fc7a2c9a6ec634f83059d1b4b3082fd842c05b30f3fd4863becf0434dfcd98f97e8c99ef272999efad18b24f59b886de6d189dcf347476e91a8cceed189dcf313a5fa444e70e2c125f6a227163c048dc89a1ff2a24fabb30adbfd668ddac5b30adefc6d07f83a1ff3625f4f76091f84e13892b0346e25e4cf8f71ae14f04147e1f26fc078df06f020abf1fc3ff2386ffa794f03f8019273f871aadd6f2eab95a7b10d3e2679d164eb5965b8fd5da43980ebfe87450d5daa87aacd61ec634f855a74173e6546b538527c8ba80dec48f6006fc9bc680efe81ecc801fc50cf877cc80ff48c9801fc322f1a72612393d8245e2714cf85f1ae1270614fe0426fc6f8d70becf6510e14fea84f3510c7e2678a8518ca730b5ffd5a89d1550eda7b12cf09f2e0b7067b1c46efdf10703658aae69ad701de00e5345cc3ed9c3def9a3d87a5a2a867d57897b55bc15b3e5ae991f3517b449ba01640a7742fb88b64c31cf542af792592d9e548bafca8064fd6c53b974fc822e564157e73c832510df02c49b40630326d0b398f09846f89280c29fc3ca0c7e72bab6ccd82a964a99f13c1689463a42bd8245e2054c78638df09e0185bfa8132e8e488e851b087e4923385b6c0eda30de6bf17b12d6efb47c531d2fedb47cb35832efb5f0ba6293f32f63b6d45c97db02dad22b5815d12216b28a781593dc32ace4d774927959d8ca8ffd2728345fd709ceb46e5bfb117c332ef80d8cc5d66159bc89b1681392c55b98d5b5d558dde66d8259dddb98d6ed629a1a9e6ff35c209af7657272367ee56aa6a8fd3303fa63bc83e9d15ea707df3c2b98fc7731f91d42a6ce7b58ea74d4a4ceb0dec152e77d4ceb4e58eaf0626e956cf1a8f428abdbd8295517f00fb04876d64492e7d32091fc108b64175d24790e5413e776f32c756fd78fb090bbea42e67d4cfb4cccecba03b6b2eb763f9b6b658852167405e9c79806dd741a74d16a304bfcab06788ca6b640f8134c97ee3a5d7af8d425fe04a6203a7d8a195e0f8de115f50966789f6111ee19b24cf81c13dc2ba4e02f30c1db8414fc25c6b9b786736540ce5f61c23335c2f3fb0613fe3586a44f4824dfe804f3d2a76fc8b6fdb73ac1bc5bd50feb56f54fa95bf51d867d80067babfec1b07f8f4562201689412945e2072c12599a48cc0a18891f31e18335c2370e0826fc27cc3087e88a53bee1c53c06f7032b159d25559067b1c1a2c25b2bff762f37cb147776f5c33b3b95e28d2a72ab5985d809a99ac1fd3eec3112be734525f37ad6dae1f0b111bb8a5d51579c678ac2bc34a0afdaff301643752cf89eb9705351bb95e954b0cede1b1b848615ccd932c2d68feb9c4c42aef575d0257a3f6306334c63304f04b4c65fb02c351ccb522352ca52bf6291c8d644e29b8091f80d4be91c5d4af355b7fa11bfc572ac902f71e4bd0b7b2fba44699a95f0ed60e15f698f123a76edce01eb8465a81141f7bb1a6157359a5cb45c68b80e8c27dab2d7c9018620f6f53b96342335497369c002e90f2c697243d6947f6282f3420afe0b139caf3326becbe562365e148d15224126b07e564191c3c68abf73d844d9621d6fb5549daf265aa61144abbf31ad46858cee3f3ac199d6ede890831eff621a8fd171644c635709d4fe4f279ddbe1d858f8f3c4580c517d9c4e752e618ecc7941a210d384922d8e4be2fba2a56b538605d61d5f7a1e7c43866d637c0cd20d43d40bda21d4edc4106aa7b898250a1f1b12cdd0911367412d4c2339386ba3cec70c4670bca68ecdeecfe3d12d2e1e7e429b60c96bc2e784f99f11ea0f765ae3449122a98584a5cc5658ced95e9773f8add3690f92771a61e14cc2866fd4521827bcd416c334d685cc0b9e024dc193a12bd512143c4d30e19335c21b0714de146336054b1b67b3b220849a61e114eac2e196384f7cb54e7c1d24a4e618aea91a5c4d02e26a81099fa611de34a0f09698f0e91ae1cd020a6f8525c00c5d02883111d97c9c2d47d2828e28b6c6429ca90b91af28c6db4c63459b6985f5ccee7065894ed6b656c6cdb3ee784134580c2ff3ddf32ae581191344d78a7f932fd667396bb6f89b3cd79b52d1b1b537edaeb064f12ff25df233356db5787db99ef9f2ff89968c51a223e81c05c3bb7ba3a5fe63aceb60f164acf5af702dc1ad31d63b846c09b6c104ef1852705bccd867698c9d0534f6763ae199d6edec90edd7f63ac13cb3ccd1f5588707eb1675c084cfd508ef3f2298f08e98f0228df025018577c284efa4117e6040e19d75c2f944e9bc58c889d22e9899cc0f69265d7582795b74816e008537ee16f2565a2366ff910d346f80bc6d8604d80d4b80459a047826600274c784efac119e931d4c780fac80d945574b0cd5d612d344393dd92a47275b2567219b6a5d17b2e99a32d5ae3dec013a7be02d53d405c17678ed89e9bcab4ee701f5a2732a3bd1f6c2126e374dc2bd1230e1b6c1842fd608ff242798f0de98f0251ae1334606139e8925dfee584fde4e821681e0f7c1a2b087260aad728345a12f1685a521abe57e98e0652105f7c7cadae29065ed008cf3720de77d03721e88092fd108df1c50f8204c78a9ae311150781626bc4c23bc6d5e30e183b1fa6d0556bfad0c57bf0dc162b34ad77a09189ba198f0728df007020a1f8665a83d75854d075157cc6473acda616ebdd557c3311d56eb7468add52195fa670406b6420376567e30b0d998f0351ae17f07149e83095fab119e3f2a98f09198f0751ae1150185e762c22b35c24f0c283c0fcbf77b61f9be2a5cbecfc76253ad89cd3b0163330a135ea3113e697430e1a3b13c57abcb734318d6469c66b50d4759ff4d643bb30236cfca9554adda3198c6eb751af7af078d532953c66289b641d7d3099868e330041b43b67eb6c5046f0a29783bac59b577c866d5788cf33eba66d598609c2760c2f7d535ab020a9f8809df4fd7ac0a287c7b4cf8feba66d5d860c22761c5eb0158f17a60b8e2b5008bcd41ba6655c0d84cc6841fac6b5605143e05cb5087f81f36e05dee3cebbf5c966f154a53ada26a9ed5e0994756c016623a1fea7fd820a8cea914b153b1843b4cd76c1b172ce1a661c20fd795df01854fc706958fa88741e5193ae16dacdb23fd14b50370c13331244769900cdb2e18921d74c2f9290f47fbd1fa145cf08e98351fa3b366fec2b6c8ec142c721646e858dd58caf6c108cdc6841fa711be2aa0f03918a5e34356fc7331c12784145c84e1385197fb03e2d809137e9246f80b0185cfc3849fac11de755230e1f331e1a768842f0b287c019698a7eaf2520df3776859b815cdb683da52d71a69b3d7372fc492e8344d1255064ca24558129dae4b22ee6f13bfc43c486476d685c77d70cfd0b505b90fee99b1547c7077c1e275962e5ed633ab000f128f5d31f967ebe4db3be9c71b5e901077c3423c471762676d4acd1606a98e5874de0433c8c59826e7ea34e112b89359d0027b892e147e7b5e8caf4e7287b2c3ec839a9edbf3d98cb8001ae301ec8e45e37c6cf8507951adb01e2e6535d29baf3c20be3db0702fd085db060d57ede71d24eca59ab0b3791b2ead7e98f6dee4552978115e18e3ab6bdc8846205e9817c5f45e988942c77cfd96e9b80de4dc96a6919bfd9d9d79e78bb3b6cbad27738507bded8f5f9d02d38b637cdd5c7c2782ffd193bd4490ed1717f354f5c3a817eb720a7791b83416d245623926f9b2b0924b30c99787955c8af502afa8875e601956285d19b2ddbd02e37155581e2b31c9578795bc0a937c4d58c9e598e46bc34ade13937c5d58c9ab31c9d787955c8119dd0d218d6e0da6f28d61555eab93ccdb0637f951b9032e781da6f2cd6155aec428df1292f25e98ca9bc3aa5c8549be35ace46a4cf26d6125d760926f0f2bb916b3b93b42dadc7a4ce53bc3aabc01b3b9bb42dadc464cf0dd21056fc258dc1396c5de98e47bc34ade0783715f4818fb6282ef0f29783f8cc5036159ecaf93ccbf7fd08fca0976133840279867aa87627cf7061fcdae11b8f00375c2f930f6c37eb44e308c7d1096828f844cc183758233addb47fd084e30337b08a6f16321353e146b373f5e0fede6c330837e22ac411f8e19f493210dfa082c059f0a9982476229f874c8143c0a13fc4c48c14763a9f76cd8d43b064bbde742a6deb158ea3d1f32f58ec320bf1012f2f198e017430a3e014bbd97c2a6de8958eabd1c32f54ec252ef9590a9773206f9d590904fc104bf1652f0a958eabd1e36f54ed30dd60db26e637bb286d8db53373554bfbb7bbee1272d26e2c44ec7d2e2cdb06971864e323f25fc2d3f2a5f800b3e13b3cbb743dae55998e077420a3e1bcbfbef86ccfbe760a9f75ed8d43b1763f17e4816e761823f0829f87c4cf08721055f8041fe282ce40b31953f0ea9f24598e04f420abe181b90f834e480c42598c69f85d4f8524ce3cf436a7c19a6f1172135be1cd3f8cb901a5f8109fe2aa4e02b31145f87447115a6f1372135be1aeb197e5b0f3dc36b301cdf85c4712d86e3fb9038aec38ab81fc21671d763a07fac07d037606aff1456ed1b31b5ff570f6adf84a9fd7358b56fc624ff1256f22d18905feb01c8664ceddfc2aa7d2b26f9f7b0926fc332f91f2133f9ed98e03f430abe0313fc5748c1776282ff0e29f82e4cf03f2105df8d09fe37a4e07b307bfb2facbddd8b0d46f3ed97c20e46df878d7ac432c28d7adc8f699d510f5a3f800da16fe547eb0443e80f62a9d82823642a3e8415a38d33c217a30f636a3709abf623587e69ea877482fcf228d6a269e647708216cd63188be661593c8e25618b7a48c22730b55b8655fb499d64be0f632b3fa4f9aa3c44f053ba31b72c5e76cc67e973902b14eedbcb859ce08e70ad2d067d344927924feb08b775067784eb1217c3647a600e6f4feb280ee614d3b9d9e3022973be38d76f6d0a24db64f0a3aadc24b3f96260cd168c7e42eb59970cfa74689ba1dfded18f6c2c2d9ec16ac376216bc367b1a2a37d3d141dcf61b5618790b5e1f33ac1dc343b6ad23a87a73548346f383cbd90705ed085c30b924e8972675c118807f02296ae9d43a6eb4b582ba74b3db4725ec6d2b56bc8747d05d3ba5b3d68fd2ac6ba7b48d6af615af7a807ad5fc758f70cc9fa0dac01d52b6403ea4d4cf0362105bf85b5cc7a876c99bd8d59466648cb7807d3b84f488ddfd509e6b38a7dfd084e30f9f61ed6daeb17b6b5f73e26b97f58c91f6092078495fc2166ca03439af24798c50d0a69711f63f579563dd4e79f6065d1e09065d1a7580a0e099b829f61293834640a7e8e091e1652f01798690c0f691a5f62a631a21e4ce32bcc34b2439ac6d79869e484358d6f30c923c34afe16b38ddc90b6f11da6725e5895bfc724e78795fc0306635448183f622a8f0eabf24f98e4316125ff0f833136248c9fb1cc3dae1e32f72f188f6dc3f2f815537bbb7a50fb374cedf161d5fe1d537b423da8fd0756014c0c5901fca91bd0e1dbf6c49630ca019d4596b429e28b42b6a3e8ed1432bef74031f8d702eb177c37037b58c4fe85fa3ef1f0cef6bae19d613c5699e259b8b0db09c9ce3a676cd0679218f4a98f10b121a0bf7466c153af4037e6c1016874f75acb247c68e26fccc627d7838dff8365cd2961b3e6bf98e4c2b092ffc3244f0d2b99cf97699df1a6f9c9f1099cf1623ac15ce5e96155ced049e6d631a31eac632b9d706eea33694cbd11866987b0981a639876ac074c4d304cb3683035c530cd0e8ba91926794e58c9cd7592b9cbef5c3f592b81cb6f0b9d60de402b0ad9926b8909de29a4e0565829332f6429d31a4bbdf961536f6b8cc582902cda602c168664d11613bc28a4e07618e49dc3426e8f41de2524e40e58e1b76b3d147e1d311ebb85e5d109e3b138248fce5859b4246459d44527980f33ef1e7298b92b06798fb090bb6190978684dc1d63b12c248b1e3ac17c43a4623f8207e0827b6282978714dc4b2798df9664c46f5aa5fec405d0180f601b2c8397d64306ef8d092fab07e1999861af086bd87d7492f9f72b43f6defbea04f7b56e57f9119cc05ba61f26b83ca4e0fe18e43dc3421ea093cc479b57871c6d1e88a95c1156e54158665c534f99314b17401feb76ad1f26cdf0641c8cc15e1712f6100c766558d84331c97b85953c4c23397b384bb35314dcdb2cb51370ab7469a71dd9aaced0bb33f9d1011bcb1a8e95ed35f550b68fc012bf366ce267636aafaf07b57330e11bea41f848acb9b53143b3cd632153c398f6a0e464666f683b87f1437b3788045e2d937e84d81072a6f57e6edd099cfc897e3db16ef531ff1a9a1637fc75ccde46776da0b65f2e16cb4dba581e5e17cb85ac54643a3b83ae11ff9e29b22e8f0ddfaed7cea033ebbe9c2a3601e65fcc13b12893db0257491ef3c5db524b62ad881797eba6e748e0df07d30393b480f1ad24578ab76ea630b37a792fb2e404dd36340f23bd37664f30443b4e7c837d9bd63aab505c6ad9867d36ac1ddb056263ccb571da3abfc59fd7973de563b1dc4717cb899e5842e6763ca789145b23e2e8d5d29d42f04da2bc027f152466a3b098edab8bd9f6bed2af406c765dced4f69ae153ce7913246ea3b1b8eda78bdb684fdc668bd4592563c6ef3636584cc66031d95f179363d35c9e39bf2964f6a9d09b18dfbdd939e8bd3a80954376782c785d522b9a19b0d4e30dacfa2bdbc662d40fd0512ff0953766091ad546946ae3b0f81da88bdf2c42abe24ff712c1f058d9cde172117439db5be4437d49924aaa6e8bc5fa205dac27248c35aee93c1117be4b4a8d8ca3aa8df9d31249283e5fa49e9adb61f13a5817af5d03b7ece68b37eeb69d4e82fdaca8ae1ca8b2ea03ded509d3124c259dc7633c0ed1f1d8312d7536756d3e018bf3a1583b25980d281be67bf4970841309d835a4490984dc46276982e66db22315b28f267856c9bd85d6dd56b59247371695c6ad0f451b6c76274b82e46d3084b5f95aaf6e6fdf6fab0780aa9c7741216d32374311d6fddfa2f29dc318007b3702633442a5789de508955e36eaac7581560b13ad24f9fc01d2e6c212c14a950657dcbf3e1ca04b59f5b46fdc56c3216b3a374319b92b4e4f4d72bc0cbd0447dd6544bca29581c8fd6c5713a6a93bcc5bbdcfa48c5d53ebd64aaa55395283f1397257a99f55d131662713d4617d721685cf17ca70efda8afd4998a697c2c5636fab1c0992216bc9d592ceb80f8f220352b4c3daf4dc3627a1cd647f59b36d501d2a63eac6c3a1693e3753159d8607d546a0e33300e27e838ec46c861bab080225112ad947df145a26e29afabe783d080361684c84c8cc8893a22f99edc3c45c4d58e97b26dee363b5f6aa98b45e2b6b5f3bb20b1d8018bc549ba589411db77b874f5cb2a15fbdf11e374b28ed3e48035ab09f5e92c2c86a7e8623833600c771629b9d6471e4c577c6763f13d5517df798496afeab4203d95fa20300723705a7df560ec3c5d00fa2ff4b19a8bc5ea746c7c3368aca6892fe253c85bcbf8971b247e4558fcced0c56fbb10fdce1a510af383c456c851223c560be2be0d12a79db0389d192ccdbc654f81188db4ebd8649647d97a9a87c5ef2c2c7e41469cdced22e72d9f2f4ddcb7acaf9ecd7c2c7e67ebe2d79f259e53b0db41f5afe5024ccb7312cf0c044985f929a502a5ed2dc4627dae2ed6c3d1bca5f6f77197112bea66c3787d58abed8ba4363bb808d3fb3c9ddee358b2def24ce159c0e72e2aac32afca8adb1a715862b2de727df58977c6e2733ed6824c9c47f8585a916855556bea553f3391bc35b2a21e63b80b16c30bfc8cb0e96716fd8c6ea4737671572c8e17eae238c3571cbdb3a7b675aa3837646c77c3627b912eb6bb24cd83b4b34dd4f3508b311a17eb68e47868148a7eec4a2bd475e219778bac16ba702bd8209894d47966d833ad35227fd74f7f6709a6fd25fe461f9df10568bbf319df7bcf6e29daad7cfd28381cd5c0dfd4cf98c6ee584c2ff537d2af8f69f291fe74c6710f2c8e97e9e2989b525b46d5f195e0fd4c4dbf27b5fa7d291683cb7531e8eb49a5f85e8bddfe5dc0eca59f5e1dd5f3201a2ec334bcc2cf5c980a11dad0d4243599a3bdfe697d95ebc558ccae0cd6f3572edfebc4dd5ae6ed41ae44bc20687ac6cbb1585da58bd51c244fe07e02b68585f103a6f22328c1627e3536169d7a69506e7d3b5bfca2a68e42fd586529168b6b52f74c4b96e3d2d99a2ac3e2772d362b967a2a958a745225f79c7a9ec95c81c5e43a5d4cc6866a09a9184d1571a9140ce2eb20efeeb34162b3128bcdf57e6672bc21bbb5e6631935e2c7b359b9e87b968b18948832b394c5fbcac1fd8c83c46215168b1bb016819ff9283c1f246a61a7d62228c7627023e6c388e953203c15b8e5c35119bf79bfbe671af6c4e275536a9e27e17b510e9ffa2a11566371bcd94f7b34af6eeb20e75a0efa13b6e7903b67d5f778530516835b743118e04925afc5393e85658225f7b9af1f3dd7607a6ef693cf13e592e9497349fdcc9cafc562702be6c39ad8569ceda6dc23476b44fdc7eda83c61bb33512b2d516841e2bc0e8bf36d9867567dc539f16c1b455c2bb1b8deae8bebe21065819a3955e1048951902fc3d7017b614ceec0fc88fc7a44251e27f563f1c1e7db536f0357611ceef4330713c436ec160dffa65ccc4bee6809dc14d042ea2bd6d558acefc2fcbc53eb6fa76fc6b6068bd1ddba180d4cdaa6a1ab2f6b314defd1693a06651fcfcb3b4a562c5678aa160905f5f5585ceed5c5c5bb2e359ebabf3e726a7395a9e7960d582cefc3da07c1728bddce897f1bdf1783236f7ec3705a5541e2bc118bf3fdba382fa92b171bc6bf121b914c640fa98cc06ec2a83ce067ce22685d197e6629759bdf1b8be983e17befa3597e0abd77feab2031d8078bc143fe47ef7898c147efecf861cfeb2b85f6c5e2f7b09fb217b3c564314cb71dee87c5f211ac7d96b886992ffb23f13a4e11b3dd55094a10e7b77385a786ddc64bbcea3ab5d2777f2cd68fa6e29b11646634f8f8736aada003b0183ee6a77cd1134e6dd420f9085353ebbf584c6c3d2ca4d89e2eebc46f782d9dcdcf1312f3eb6a336a55b78d70d583ce731efe1a2b35789e5850578b399b5363121ecfb08f72147f06c53858b5b76c6c858791fdcb0a21b90458eb0841c89e31e27d9511561bb75cfccabb8138160b5d7d3e02d4e83076c9e3b43bb299512cd654c648c9b2486773d25b5a4c9fe0a9da57a66a463637a4d8d014ad29b9164ff2d0b6d2db50fc69863077e874b705a8f99c18dfd071a908a648743ef0a5fb494386f5892ee4e142806ac52515b71014013a71dd84b9d94e1555cc76807ac792d9b471460e4f91a728b1f1edbe0a450bb7d20267afab52750e06b03a1208f919460ae1d39408db5a37aaeb3b434c4d7201b6bb129fa09bcb564702d88dcd1c60cf5002eb28b2ea529603c62da30cae6d4b07dcb394e0da6bc071816bad1f7107d85a39251c0568cb9803ed396a6b7367cf696224d45e5ba43cec6dab8b02b8ac560eb8e729c17516edd16adfd54214e09d0a2a851728e1b5045975ae6bac290a983ed8c6c1f42225a6e60093b3a9421410cdeae6207a291d8846460e51e61807d1cb94889a0844d5912ac61bb576e0bc4209a7ab7533b7ae5ba4e6666ccf9979a25eac657c3d32af098be4685914006eeced007c9512603350467135f9745514009ddad101f45a3a008d8c18a0cc5c07d0ebd445f85c3135e56c7c1b8d56fa2490c9dea044d454d850ad25ad54028a029e3b063878de4c5719a436908802a0659d1d406fa5ab0c8a12a00bf31d406f5302e2078e380ee41b45ac6bebfa6e7ca165292b934d826231f8b2d612b4291210f91f05f11d4a88bd1873c1e3c3ccdc3f9f17e7b5724421da1de48e60e0f95d4a94ad659da8ec6d936c922e64d51129fc9780baf13dfa1ea0da155bcdd94501d1b1a07e7c3f5d837c7ccc0a3af4a871ab28f50e7f6fea80fb807a900f82833b141588613f6873d168b4ee0bc6e33fa484d78a39ad3267c31d7b9baf2880da087a881fa503d4c888823a71b803ea63eab9c4d9a29c5aed597ecbddbbab44485100c6178c2b609fa47776c7edcb591ab182bf024cc27e4a3f97c81b158522e828375a9f68ec40fb8cdadaa60a0f885a11b8b34fbeb316bedaea0f945be14501dc2700dce794e0b606d934aa33d61c9282f505bd7f84edca64af0b8f769f723cb0b22fa97dc09495799b1973d90a70605114b07d023a4f5f51cf10cdb36c6d0af37f524f14001e293a514d1b7b847b1747a4eec4198c3aee6eda86d9c34a95e2698d6cb6b8dc4f475a9f18a7f9d7d07d342be521c6aca4d543966fd7a7acc06e2b5929fa4066f96aac67851c33cc0ae0d89a15a8e6c8f2dd04cc0ad4eec94aa93cc90a34849315a8dd9fe5cb45332b905f6256e091139dceb8275a569c534356c2e1862ced34759676e2280b71bbc94ae0b594854c62662519c8cd4ac9ff200b19f3ccd2cc136605a8f6b3128e44646967b2b3b4734b59885f8eb36243bfd22287afd8f8e6fff8628a1cbe98e25b0e61a4a460b772bea36ee5f0f4b2d7cef09a27f18e1023adb68647879e713ab84ffe56ad199d36cd5ded9dadfd44309536cf7ae0e0f8bd4938732389f30280f3079370e64512e77b00e78f26e1cc8f24ce5f00ce9f4cc2392a9238db8141ebff51fb62709c15d6471c25ef165588865ea2ed7273e8908ea0427a2fb0d09fa9274e96ca5adb6da9768b937f4686af2915be3900df2fe9c8e02bd12c0ed55fcac6b1d174385b51e1cc01387f3509e7d848e2ec0d70fe6612ce5191c4f9087370fe6e12cefc48e2bc06e0fcc3249c632289f35780f34f93708e8e24ceb700cebf4cc239329238770738ff3609675e24711e0b70fe6312cedc48e2ac0438ffa5f6e64cd44f7767f4517428db51a1ec0dfae8ff51a2ec245196c8f176efa663b6eaf6c66a843df3c654209780c63bdb8a78cd849a53f23bbfc7bfaf12df466f14692ec8ec314ab03d93969dd846f723e9b04e8c1161ed0aec3583126b6f06e751fdfb1144d96687039bdd8a126eb20a0a8a23b553b221bb0a60a78d285176d094abf61cfb0aebf38de9b047328847037b6c4c0d113a34382e018ed3807699420432752700b10925c436d21247a77fe49d0cde93005ed374c01b9b7e78cda8eaea9700bc6694f0bab0c48d747775423a8e495616fe0560363709e69808c2fc17c06c6112ccfc08c2fc1f80d9d2249884031b64307f03305b9904333782303f01305b9b0493d02d860ce64f00e6d626c1241c762383f91180d9c6249851ec6b7f0c60b63509e6d808c26460e0a29d4930c74510e6560066fb861d508bba0be1010065074a944398db2bb382a9454ef088e96047979322ef4085bc0b9864eb4889bc8540be4aac1bb287d9560a78d11b2f6a05aaa24e94c8b8a3ab3bf63b8b85775c9c5a0144866f0815beae005fe7862c2fdd67491166de53a8501e08cacb2e942807c59597c5429833723ed9fa9f67eef5628aac96253ae28a1436593d7f1980dd9512b65aff3cb2aee1c4056d64f65c791a068b6fa642f80fc8faddd291f5fdb53ba3688d4300caee9428b7d194a27e4f7925457b0115da334046ef416da50562a380757279343ff48dbb1dac955b26a845e3f652fce835951a012bed99ae32738d0cbc58b430d354669265f45301c25ee94038668b43f81a40b80d2542b5abc448d9a55c19e7a511658c7d41b9d83b5dee2eea5a2054b08ffa8db2fbd52bc01633292106df038170c69c0ce77ec026fb988493d47b9d0ce74d00675f937092aead20c3f929c0d9cf249ca4ee316438ff0538fb9b849374112a19ce4c30f43b20dd5d4838b29e67fdcd7d328bebae7c83a8d5ac4c96a46468276550cd0901b4031b728cd3bd0a881025d92aa0c600e5204a94dd98d3ea2c4bb0a5619a9af16440db8252348b7afac2ee0de5786c340df8ba53e1fb8639f8069bb9e687d0c1906ccdcf24609543cc599612458784a300caa1e9400997a5ccb2ac72fa16b338e57490d987d13bcac079f1a5560388a39b2c366c5c2d454db3ae7c03a9b86dd4235072b606308753c2eccfdcb395fcd33596ec0a6185656c36738f6e6e5933431f82ec3f221dcdfa1ae194505dd7a8579b86aaab6e6a3897b22d4a66c13b03b4d9a6a2256de693a1bd1e140e39e97049f4bffd19194cb24d28660298234d8249e82c4b06731a80996b124cc2a52f64302701987926c124ec3391c11c0d60e69b049370b92019cca900e6289360467117a42900e6689360122e7da1dbca14c01c63124cc2de1119cc8100e6589360122e172483390ac01c67124cc21e1019cc9100e6b694303359e2e9b8e40b5d08eb77b2852ed782befb760db9e6cd3b794c588a924d1de7035b1d6f124cc2fa9d0ce6040073423a26e4f878fd7ab1da8d1fd695a6f94c327cfd01be89e99a208e5f00c385393b1a46d9cff3330074fb74781c73a05b96c7f17900e1a474201cbdc5219c0e101698dd1c221cd5246b0e3d0a9a43931bc6f9cbcf6406614b936c2ae35580764abab785744f2193cfbc93413c1764ff4273960a4671bba91900e5544a94d9cc3def5ecbd4e992ab444554a9cde2fe0b03c29e12991dff010a8369e96a9d263bff36ca0b680a81354f4f8713b8ff89e2280ee10d05f639c3249c632389b33bc039d3249ca4c73492e1bc0764f61d4cc249babd1f19ce8b00ce1d4dc2392692387f0038679984737424713e0f70ce360927e9f1e0643817019c734cc2497a9e3519ce4300ceb926e1243d6d9d0c6739c05944dd2fe21dca22eb6f2e043fd5659e50ad965550f68b965201dd1e00dd8912a83ac5a0010e5f26dbf2671380378f125e0fe6773725f7ee748443cc64bb7db5052b37e79b08957070990c6a1b007581895009dd15c9a0b60250179a089570d8990c2a035017990895d0e59b0cead9607c696713a112b645c9a09e04a0ee62225442774632a8c702a8bb9a0895d0558c0cea1100ea6e2642259ca223837a3080bad8dc7d7008ed956c1f9cbf00da259468f358fc2cbe7b62790ae38bc0d7887fdb11e1e3002bc4ea7aaeec1cc6e743378820565b16be5e60afb118f16ead9a5125b4efa954f63d983989b0bb395b6b44f180be83803defd1903b902d904ce68b61176237f2b654c5c3d300e75273d7d347d109ed5190e99735a487be3bd393ee324a96ed0f00308b4d8219c573390f0230979b04338ae772ee0760969804338a8e92fb0398a526c18ce2b99cb50066994930a3782ee77a0073854930a3b841d6620073a54930a3782ee7120073954930a3782ee7310066b94930a3b80de64900e69ed4cb6addb19fcc2ae4ae8db358548fe9eb06f0ad367bfd5d14cfdd5c0b863e2a28f1b69678ed0d592bc420882dbb9c11ee22da980a1c0376b9a6214733d3e64b42767ce4603043bf9612a57df66bfc9a793264649ba7f700d6b72e5d0bbbed5a9a0bda120e81ec024abe4a4a84de434bf9e02f9fafdc20e62dff6f1ceffc0e80bd97b9cbbca3b863ed31006d55ba5676ce16197fb567b6b2d0fa59950831ca2b3b0781b2b5da5c5b25ec0b91d9ea17c0566b28d16ecd12b536abe9d0b5a0429701acb2b621372288fede8b7d00caf5e9d8e82a9f6d491b5ded01f06d4877f9a877feb29d6a2a85c5daee32a496d92c4684360bf4843636a45f47fc7e7651dcd1ae1a54379b4cc2991b499ca7039c7b9b84332f92381f0338f73109677e2471fe0870ee6b12ce5191c4d90c5445fb9984737424718e0038f7a7c4d98fc5efbf3435c13192f30458be1f13479f969e3bd9a8682673201f60d2daf871913cd7630428510f3409e7d848e2ec05701e6412ce5191c4792fc8ec079b84333f92382f06380f3109e79848e2fc11e03cd4249ca32389f30580f330937092ba6b93e1dc19e03cdc249c7991c47918c079844938732389734f80f3c88674ad71677442d71ab21e5136e8761e95aec961beb5558d45a2d25266ada5cc22b9c955a9584d5c16e9c9e1d5c0368fa604da336956878e5f0596982ae12942baf5c544aa898f3cd0373ac69cb5c1515ca3b101a03c361dcedbea181f7b37bbe562a84e7d14f5d33fd681ec7e5c3a76b3cbf1586794e1ed00e01d6feeb26ac226129923cded00ed0994683b326797c50ac6cff42862b6534d39db18f9ec3d0e9495279ab3d065742457a72f02304f3209661457a7ef02609e6c12cc28ae4edf11c03cc52498515c9dbe00c03cd52498515c9d3e05c03ccd249851ecf9140298a79b04338aabd3470398679804338aabd3c70098679a04338aabd3770530cf3209661457a7ef06609eddb0036fb6283e7a44ba106b0415ca9700ca73d231563426fd634564031a2f3207deb9e62ca726b443b2e5d4cf013b3c2f1d76386e0b1ab3fc1ad8e1f994f09a31b816dd3e2e377a65de3600d70594b8d419c37c21ca9676c4f81100e285f40d9a552cfe34d6f91693125622155a214e1fe2dec0d19ba06d09605e64eeea5dc25e0c591d7d38a8582e6ec825a8ee867714c77dc6002bbdc48c35940b44f9b956647f2e6e0d2d5ab233b43a0397974b4d5ab842ba7d1959797a02c8f4979984333792386f05382f3709675e24717e07705e6112cefc48e26c04cace2b4dc2392a923887009c5751e2eccfdc5b4c95898e6525ab168dfb02d1b4af15f5bbed7f09032b146dd2e572e08d70aa626baae31b9e0285c0d5e91810f6e73c981bc9d1f53700cc6b4c8219c5d1f53701cc6b4d821945ffa2bb00cceb4c821945ffa2bb01cceb4d821945ffa23b00cc1b4c821945ffa23b01cc1b4d8219c571a6db00cc9b4c821945ffa2db01cc9b4d821945ffa22b01cc5b4c821945ffa26b00cccd94307b6b60ea8793a7cb9fa4ed5cd6895470df05706fa584ab0ebb55bdf875755b44cfb4d4c197a61242255b98fa38807a9b49234da4eb81c8469a36019cb79b8493b4414f86f33a80f30e937092ee8f4086f37d80f34e9370926ed54386f33780f32e9370926e244586b32318a5bf9b12a73a4b63d416e7c174277310de938edd0d93b73fa730ef96d0708f04c226d3002ac83d819dde6bceb62884599eacf5b90d40791f25ca5ecc3b3167efc43997a9fd37b7ac66fd2da06aba9f126ca607ac72a4e5621cb7c6443dfd280e9a5c04f03ed0901e7869ebd59379c9ef00503e4889b28f4039d3fa689e00c68f20592f7fee58eb52b65a00e7c73ff1031bedf7d3ac2b9fcb273c208fac59d51cb4091e32674b9f2866fb3260ab0fa7c7cb3e678b6ba3f603101f49c79629983daa98923a816f1723c2d817349d1e4d470d1fef5feff7a03cc2d94fb283f2ae0056fa98b97b2645f1f0b16f4185f4783a0a00acf1e414008495115901100316fa0425467e6270911c6152fbcacd1496c9b37df41a446d81fd3d69ce526bc24a886cd9e1fdc0069f4a4756cea9cbcea562acc93e4523ea27b9bd0a2cf269ea39780eac50045cc6ecad22f9a77b0b9f641be73cf1962f3d24dc19763915cc0200f3197356b013666fb2bef903207b3f9b0e9439094690a2ddebf91c58e573e998dcc8dfe23a8e3500e1f3e9182ce6d63855b41c6b85127c738012515e3a8786578b667b258bf25eda9301d817cc594f1c4577ee8500e58be9d8f323df53054539831f0ae0bd44096f10f34e5aa88c0d872fe0bfb73cc7af8740ddfe723a9c17fc9fd146d854223b2b230be07cc5249c632389b313c0f9aa4938490f1125c3790728595f330927e911b76438cf02385f3709e79848e2fc0ae07cc3249ca49b9c92e17c06e07cd3249ca487d793e19c0770be65124ed2d3d6c970ee0370be6d124ed21547643857029cef50e26ccb9c0348d68bbe522d4bdb9812d9d04711c0f7ae492edca4c7dc91e13c0c34dbdf330927e9e60064386f0638df3709675e24717e0d707e6012cefc48e2fc0fe0fcd0249ca32289b33f70e8fa8812673321a0ccaac5ed09602e397ae3974d40cdfd713a1cb430ffb73ceb6f3e775e5c775d60095bcdca644949867612d53e5e4d80257e92aeb94a7b4e880bdac86ad2d5aebc99ca3a8f04d6f969434ea9b9fbdf519ca86809aa99cfd2312b0451ba7d31a730be966d8df8379f18ae1522a78a9294476b81a096060ff7dda8608f0776fb793aba93238565a67906936c69e00c60ab5f98b334907060832cdb67804ae8cb745442dcdb633ae31e1cf621102b99bd2c30ba7e1d1782ccfc95392b7fa2b81be79120637f4d89b213e3ced6bc3a29656a6d1ae6a7591dc16cdd0cd8e437a6aeab201d0a265b57f10b40fbada968492b2332b45701b4dfd12ffc5b211b4065b2455926c4acb3c2d820b27f8985950c622e15c45e00e2f794105b5837d3ea104e11b6b796b20627b3bbf600d90fe9d89ccf9f67665e24f72d7e1bc0fcd124985174747d07c0fcc9249851dcb7f86100f37f26c18ce2bec54f03983f9b04338afb163f0860fe6212cc28ee5bfc1080f9ab4930a3b817c7cd00e66f26c18ce2bec50f0098bf9b04338a6345ef03987f9804338a27b77c0860fe49ddf3e6cba2f9046eb9702628155d47674e922bcf8f648cde40704700f12f33b6dc216c0c91edb8d10f4c49fc4d89b11b0bee584dd8ef21735edd098caaff631a50c2be0f9daf3a00faaf694009c78cc880ce0740ff330d28e1b81119d08500286b641850c27e1019d0990068cc34a0515c51310b00cd300d2861b3890ce86c00742bd380128e2391012d02401b5102cd6461b77e24acf3c9b67ebc0ae06d4c89b793066fbc13d768e11e4b583535a6023908f4979a5082542e5ce3d896b6e7511b608b4d2911e25eee7ebc3a083b9f6473ebf701b4cd28d1f6d1a0b55d0a39bcb56c07e1475c99b0aa8a62cb94f354809b53020eb6ad54142788b703285b50a20cbe590fe1a0329965e683acdfd2249c6323897320c0d9ca249ca32289f30990d95b9b84333f92386f0138b73609e79848e2ec00327b1b93708e8e24ce4f8175b6350927e9d9026438cb00ce7626e1249d7d27c3790ac0d9de249cb991c4590d7076a0c4c96fd4910dd1eb99b701983a9a6475e32239fe3e04d4d89d4cc239369238bb019c9d4dc2392a9238ef0299bd8b4938f32389f30280b3ab4938c74412e77700673793708e8e24ce6701ceee26e18ce6ccfa7c80b38749384917bb90e1dc17e0ec6912cedc48e25c0570f6a2c4d993b98f73e01c6ac56080f7d006ef4e7184d36a64cedc6b40fb731b4aac033d5897b3f8895fff53c484a8c93aa27d8003436f4ad4ca8161ec16e7c0f02628043229112a070665add5c2fe7811e06c05b0659de0723d2808fa50a20db6bd4f14d70cef0b50f64d8795a6b6750aa1371d59197a3f2800fa51a255de9f39e26ffb5a607dca0f77da200a02be2fa7bdb7579477f5ea0c6cb57fc3667b5b947d7c2da15b0dd9f1b5af0194032851aad3da467a80a6a16627cbd83b828c3d90125ea6c60e837921133a799379215f0a6c7350436673f731b684d99cec18dbd701caac74f4ebe131b6ba9a3cda4dfa2f40c61f9c8ec6526a3ec984999eac4c3d1158ea104ab4fd59fc0998ce96a70b2d31f6bef05385402eb68c4d973f761708843da78954984f039887a6a35fcfbb98b6773217b4256c70de0e201c968eeac99f737714b7b8d81594a7c3d3d19052999e9798a59edd66b7bcf1d2e5c0524750e26d2162a3f6ebb4aba112ebdfd1ab86da018bcc4e4783096b7bc69f8a45381142668135c002734cc2493aaf4486f31c8073a4493849673dc9703e0170e69a8493d401870ce74f00679e493849ddc3c870b6065370f9e9c0e9df17348adbaf8c04d639ca249c632389b30fc039da249ca447e091e17c8c3938c7988493f48046329cd7029c634dc2392692387f0738c7998473742471be07706e6b12ce686eacb614e0dcce249ca4e71b90e13c1ee01c6f124ed293acc970ee05704e48c7703106d39dd1091d6ac8dcbe86831ed1444a94ce118d0de0b640866f3a68b26f4f894ff97cf08057083b54b2d7ca4fa237551103d97812253ce5d28d978a7016b2c0125325bc3e68e72363445833804d165062edcee27de4ec332fa1db0c8f00dfe83c0d5e726496fa37b0d4c99448fd6de2a72a9ce895978702db9c620ac828ba6b97029085a680247492210379230039d514908463eb6420af0620a799029270f90019c88f01c8e9a68024f4d42403f92c0039c3149084fd6d32903f0390334d0119c5def69700e40ea68024f4722303f93b00b9a32920098f172303f92b0039ab2187d2a038d206105927b112a09c4d89b20b0be2c43a2a92c72bf70430e79804338ac72b670298734d8219c5ddb35b03984526c18ce252e91e00e64e26c18c6205d40cc09c6712cc281eafdc0ac09c6f12cc281eafdc08c05c6012cc281eafdc14c05c6812cc281eaf3c0cc05c6412cc28ae3d1b0e60eedcb09d495b94bd990461f543b699c42b00e52e9428b963c154b1b7115771a6b4cd72ebc7c5d695ff8c0c1ed98a33be7e40c1dbb521edd0bdb899d00ec9763b7819d8e16e94287b31ef5e46fa75e30b58955882522d9c0aaaac1f934ee05e4005766f60a38b29c1f663dec5f9f65612ce46665c2077c14a5c2545b1dd7909b0de259490d5d2fc516c4b5b9abf1d40b83b25c20e4c3908f2b1f4356c4bdab7705b00710f4a88decd4bed8ccd11f2babd503b7911dd23417b01e7d5a5e9c0ca3ddc6c984b2d9865d687b5d6bdbd0bdc5cab42829b4346d7dbed0f50352d4b47f3c95f9f288a7df53c80b29812a56e7723ff0d2842b4640da8e620f32f6fc8467e21e3bb732c979d4dca4d4d328850be00aaa79274564fe596128bac97151611ef86ba69db188aacef340058682925d68ea07ab2f7de2a62f6428172ab0d1af5c6d3d6c03acba8874254233ecd0b54c8763c380154402bd231bee9cfbf636424078bcf0796b8d22498511c2cbe10c05c6512cc28bacb9c0b60969b04338aee32e701987b9a04338aee32670298ab4d8219457799b300cc0a936046d15de66400738d4930a3e82e730a80b9d62498519cb6380ec05c6712cc280ec11d0f605652c20cbefd28611544d6a1dc1be0dccb249cb991c47903c0596512cebc48e2fc00e0ac3609677e2471fe0370d6988493d4db9d0c675730205c4b89536db6c367d2d783f1f5b40c0493e19bc31c7ceb1b72c6c7519db8b94eb6ecaf03b0c40dd4531345d68d7d822a17b5d6fa7c95f5f93a313bb9b770332c1777d1b3c8c6c022375262eccde21d10665a3f2910d363e5c27fb380f18317f8546fb19c8d2c4d871b0219dc6500ee264ab87d987b56923b6e71c925426069dd875b9a77dc3ea076dfdb9cf2348acba8734079ba0f25ca70477e46f114abcda018d89712add739618d7494b54fb14ad41a8de241360f82ccbf1f750b2051e6573125c5c8bd5849303e0930ee4f8931538331d8b99584b34764e7565e0ef01e606eb94a58659195abcf8172f540fae6d50c619ff344b3aa4cb6584b8528b5f460b548006ec725d6bf6df1d3ac6b9925b63482256c0b00f820b38b0642ff11b2a2e12d50341c9c8e0a0cf3529e220a842ada0aec22aa0a6c29c078483a4ad8782bf553c646f1b0fa1701da43d3318d074707d4508b33f812edd1807ea0343d8c12662f0dcce4955774c1ee04c01e4e0956ad91cb635bdaf2ae5b01c223d23190e26fc14c141d191700944752a2ec1b00e57c2b4c2ea486cdb5fea586abab696bfc4ba86afc65a05a3a8a127137e61e50a91463fdabb6b871d4adc1e0dfd194405b08a0d575d58e3a1f980c19d9f616dd41363f261db5b9b3e2a85aacd72c11b3a25bdeb0dec320731f4b0936f809978438c94e1a1a04701e6712ceb191c4d911e03cde249ca4dbaa91e1bc0d94a2279884333f9238cf04384f3409e79848e2fc12e03cc9249ca32389f32980f364937092fad893e19c0d709e6212cebc48e2dc00709e6a12cedc48e25c01709e968e413978861b772c9bcfec91cfe88e6bae01084f6f98890d7bfa2dcffa9b0f7c14d75d1758c256b332ea4ee624aafd42fe04cdf833d231dee9cf712c8ae7b8fd0d509e4989b2b97533594cfdf2d9f559622084305b0fa002d60564ebb31ad2f6dce396515ce77e08b0bdb3d355c9d8e3ed5cd096b03be2ebc01acf49d7e4d99685b03fb0c273d3d172c41d116d26f3054e7b852619ceb65475f3f300e7799438e1a65365751b483bbef2d19ed27d1764ecf3d3d17a4cb6eff174f983b46d8b36910aed0080f682f4a2f5ef6f44da6d24f338fa1ea0bdd054b4a40d7532b49700b417a5a3a6dff27641ce05082fa644a896bf8e640db0fc95cce17518c077497af0e57b1a4c51b6beb9a0617429253ee58de9cf492b37926e5a57005bbccc249851ec87df00605e6e12cc28ee3777198079854930a3b8dfdce500e69526c18ce27e73670098579904338afbcd5d0a605e6d12cc283ab09e0c605e6312cc28ee37771a8079ad4930a3b8e3f68d00e67526c18ce28edb370198d753c2548eff413c8808ad93cc4b632ae852de601a50420b25033a0d00bdd134a084bd2132a01301d09b4c034ad8232203ba3d007ab36940094792c8801600a0b79806947034890ce8640074b36940a3e88b390a00bdd534a0843d2432a06301d0db4c034a38b24406743c007abb6940094797c8804e0040efa004aaf6f57496483b9bf36ca9db4e3e02e0de4909379385dd1789b074259b26ae0578efa2c49bcc41d6eda944d836253bc0f12b80f26e4a946ac67d7443382c9065f43f9983ef1e4a7cdcb77d67e189c40544d7b7bd3300762f25b0707b7111f6dbc9dcb79e0159f93e4ab4ca2d7664dd6072a9b04b7bcf98a86fc1ff06b0d0fbcdb5d028eec7f911b0d00728d106dfb9238a63f3b900e78326e11c1b499c0300ce874cc2392a92381f07e5e8c326e1cc8f24ceeb00ce474cc239269238db83ccfea84938474712e707c03a1f330927e9c6e564384b01cec74dc29917499c27029c4f988493d463890c6715c0f92425ce36cc5927b4a5acd1d808e03d45094fedfeca17af16327e1859252b6265b2b76eeff95a2604160b01f098b26a16e56d51b201e2a7d391ddb1cc1e7f1c6e14f7dbac024da5674cc249ea894c86f35480f359937092eeca4586f31e80f3399370926e104986f37b80f3799370926e5f4a86b329d837fb059370926e1049867328c0f92225ce21ccedb4509b6024deff987d143705781b14082f99d4771a1749e7da6c80f36593708e8d24ce6d00ce574cc2497a7a3b19cefb9883f3559370e64712e79500e76b26e11c13499c3f039caf9b8473742471be0c70be6112ce9191c4b91bc0f9a64938f32289f32880f32d9370926e734186b302e07c9b12e760e675f7e643cfa5160fee24abe299dcf1bbc0fa5795f05626ed3755536d52390c7455dfa104de89255ed6edee33918124db3eba0568e2bf6b0a48c2693b3290cd01c8f74c0149b8fc800ce4085096be6f0ac828ee0cdf1780fcc01490848bb9c8409e0f407e680a48c265866420c701901f990292b0bd4906f23f00f2635340126e6f4106f26a00f2135340126e1a4006b20968fe7c6a0a48c2258364201b03909f5182ecc992f5cce1fa4bd86124ac7af8763324580703ac9f5362cd617ee736f1adfaa7585facb1f45927eed67af013b645c91626f600fdf52f28f1670afc85d63f975b0c568aa39a575a96bc824d635575c322ab4512f1e5dbfc2c235bf834eb5a66092d8da0db636f508d7d498957ed72e7d71182b0274fe606b10e14155f990493707c890ce65e00e6d726c18ca2834e3180f98d493009c799c860960098df9a0493b0794506730580f99d493009c79bc860ae0430bf370926610f9f0ce62a00f3079360128e3b91c12c07307f340926614f9f0ce69e00e64f26c1241c7f2283b91ac0fc1f25cc5ecc59f8c5cfd4e2e34f33c43e60d3acbfcb05c652c60f68e682f94aba689f825dc21cb03fd38f47f1fe7a89583307b7536bb01e3bd9266b4d01d65f28b1063b85388a07f66c0459ff574a946a67a65c31bcc7c7958a84122bac8f37b2a86fb67638b0c8df2831863bfa318a7b87dd0dd0fe9e8e9a1e9b1c7167f631945d4d323bdd0364f73f4c8219c5ad541703987f9a04338a07f7ec0e60fe453fc911665f5ac28c4fd664ba18e0fd9b126f07e634f1d78b1a9defe2b05c34edd354cb93ed48bb165445ff3464bbd3bdb92f61ad4e86f213608fff52a2b45d1e2a45065e213e5b237aea25d6132e8aef3db241ec2f52623598c840e65281ec096cf23f4a907d42979ba47b8c90959cddc1ec3b6b9c86d51e707004ebd1930f8990e11c0aec35468933dc1eb6515c0fbf3f28533328d1aaeac95f7b348a079c8e0556ba15254a35229a4a7f9ed0a581cc46cf06601b990a368a1b581f07c03636152c61514006761600dbc454b0845d5232b01301d8a6a682251c4a2103bb2d00dbcc54b0516c606501b0cd4d054b38014d06f66000b685a96009dd24c8c01e08c0b634156c1467a59603b0ad4c054b38214d06b618806d4d09569dfa358a35c0a95f64f8ce01f8b6a6c4d7debae12b456a80e30e1ca3e2aaf3f1d6e839ed740008db98338c42d829251b46d905a06c9b8eb153ff3ef7515c5c733418e06b67124ed2c302c8706e0638db9b8493f4280b329cdf009c1d4cc2497aaa1219ce189877ea68124ed233bfc8700e04383b51e24ce630ee9d1c8962bdde09c0ec6c124cc229113298dd00cc2e26c1241cf02083d912c0ec6a124cc261393298ed01cc6e26c18ca2a7fdff40f3a8bb49300987dfc860b60096d9c3249851740aff1658664f936046d173e40700b3974930a3e861ff1980b98d4930a3e861ffb980d9b4b147f8b438e15344778f77f84a9873ecde08369df1fd94ec83f94aacfb596242a2862db3702cb6fe0b9602bb5bffe99ec7c4d98a53d94656299e7279a542f61aeb2dd7ac9ae58cb43ee9cd0da2b534882c319a5a6031e72ebdf35899087d139bcfec6305e75a7fab35a6b5024996589256643dab65dc6f9587b0563801578918bb8f1dcc8a35139ccad87a498003cc92baae67f64e5333e5386eb915e762a14995f54d23118edd89ce8ab50677ca317ea698c8a9165ab510b6605bcd7c39955352f7c6d988698a78c743cdf23d189f25dcf3bd5f4e1131e49c37ca3838df4e11ac8ac55b676328470b7b8ba8ac5873ebdb9dc514558d786a5b86fd7cb2d0842f3d55cfb919c662eda4e571eab3a54ea522ac628b806293cd5da763a3adbfec89af1175535e23e45e5f6be49d7a9e5c26b7bbc4d232b971c5f4a54d45bde59864319a29d385bbae170b2ba8164f93c53479fcf0dcd72a41aa64e7f1b4d892e3df87a7bb4c7661a65d622dad7f2db452be546683b9d6c7a542a982c96d0e6cfcff00a3f8759c38a90400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/4f06f9d2e68d8114ab22a62bbf43f319.asset.meta b/Assets/SerializedUdonPrograms/4f06f9d2e68d8114ab22a62bbf43f319.asset.meta new file mode 100644 index 0000000..b1b8fbb --- /dev/null +++ b/Assets/SerializedUdonPrograms/4f06f9d2e68d8114ab22a62bbf43f319.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 05e1ecb531cd5334e86309a95532e05a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/4f44a12918b543cf95381db6b944c0fc.asset b/Assets/SerializedUdonPrograms/4f44a12918b543cf95381db6b944c0fc.asset new file mode 100644 index 0000000..d8b15dd --- /dev/null +++ b/Assets/SerializedUdonPrograms/4f44a12918b543cf95381db6b944c0fc.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 4f44a12918b543cf95381db6b944c0fc + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec9d057c55b7fbf0732fce18cef051bc0c2b050a0c195074c30685191b94b6c828b2b6d8dcc79cb9317777777777f94d99bbfbf69ee4243dcf3dcd737bcf4d9fdb64ff977dc6e11e79f2e49b27fe24890f64de9f583fefaf796c36cb6703d85c56cc56b195debff2bdeb0aef3fff97ba3f8b9579d725dedf85deb37e2cab9a2ff99fdeb176dedf53bd5fe5acc2fb720d2bf2aecbc4f339acc4fbf754efdb12ef17bfbbd8fbbfc47b2b56d7fb682e9bc066b219ac6dac4d3522e6898fcae5bd188f57aca1f7f778b6c17b5a2294e2810c148fda7a7fcdf19e948b672b3ca5d57b7bb03d45b45678cf8abc6fca58a927739190d870fd6226fec1fc4b6f79cd96d75edeff8de4bfebc87f3794ff86efd793d73e29bebf1df8ae11f83727744192effbfad7d8b3deb53e63f19fc16ffeed57f2bd7ebebcf8d224b206c8eb4079cd91327f4941ff06f23aa89af82693910b64a5c2aca1bc0e91d7c152df5fd30c3fcf6714db0ce47196cf017d8680b01b81e7fcde5083b8ab747c3e948ecffbe9183f53a6df16f9fe30791d21afc3a56cef9dd639f2def6f2dabf1abd46fadf0919ca66bd30ebac96bf47c9eb68791d23757b51eafa1bf86daa8b4ad31da4cc176418bf6beeabf7f9f33fe4efb1f23a2e945ee3e57b7fcadff929ea938afd299d5e9261fc057e7b1ceb2e4c224ba5fbcba1747f597ebbc9e758f78e507c80fd69e54e90f2fe4e231eaf84e2f18aaf4bbdecc4f7aad541c99f28e5bc2ae5fe037e73b9a7468c5b5df9dd2df2f724567dd9d63b8567537d390d15eb1dfd70eab7f6efd757f940d9f2946af45469fb5a286d5f93724ba55c15ff9dfcdf31c5791090c3bfff3724f7f590dcd7a55c5546e4a7a8e734799d29afb3e5756756998f673497f766c8eb2c19e61b2cb10c78433e9f1e7cdbb653446ec9d2684e28adfbcb70dfac46a6fabe405e1ba5f8be7a67ae81cef3e4b5718a613696d75d0cc2dccab78586df856c61c76a64eeeaf36d580174f0e434da5ffede4d5e7797d73d24ff774276f04e0a76509d2ef3a52e0ca481a74b63658b7bcaeb5e89bab005893ad56135a753ec2d2933067ef3ebdbf27e1cfce6bacef2c369fc8894b9505e0b433a2fa2d3d96be38aefb66e026c2395ef92d957b11fbfad727cd95ba97c5512d26d5ea077c309e05ba5472af9618964f16e88f1bb5207c57669e8bd3ae037bffe2f084ffcdbfbb689b2adbee03effb62ef8cd9f2f4e51d7bd59559be572de0761bf2fc396e57f934df2dde5ac6aded37dcbafef817bef4979ca56a4dc847a4cbdc7e3560ffce6cf97a518b7151afdbc70b71e9be4db952cb1fc2908eca1816ac3ad92fa7cc012f3d607f2796ef04dac54de5bedff6ea674d9477ef321e0f2a1af5f53559f96c9eb5aa6af672b0007991fbd5e6865d89d95dd9627094bbdb32e14efe240ce56eda4eeaa1c5bcf12f34cf85d7e6f83bc1e20af07cbeb41c1bbb3ce94f754597da0d4ed23965036b3fdc07d7edd22b9d707bff97bfb06b2b751f9fb9090aebaf43c3414775d1990ccce0ef3df9db9abfc7db8cfb6d966c9ed91900efbb0e4f67b84bc7696f1fb18bcbfadbcf709b877acbcf72948df8fe5b3a3c0bd4fe4bd8de0dea7f2ded1405e17793d26e0307ba3bc77a41fb7e6ebfdfb2d64b9c38e93d713a5dccf641aa97ef6f1f27a0278ceaf9fb3c4fae373f95eb2faa33a7ef929be972c4d4ff6c3aeec6b9c22afaaedbb3390dd4beafe45a07365fbf324f08cff96ed50b62931de4975394d5eb7ae263ebdc17bfc7aba41fc933d93f98e9d25e3f6254bec7f7de9db48cb2b92c83adbe7d44eda013bc7ffa695aa0364de69a9eceb5c10271ec65701eb1653e4b3f3e4b3af41bc655d15fb06dc93e54eecdbe05e4c8d3b9d1f4a9f86a1e7170019bae717021d74cf2f92f7d578436b79ffe2505c368574fd86259479ec92aa7115efc0b055bb3c95b4bc547efb5d282dbff3d3a57545125997e9d3b2cde1f2f7e5a1b45476a1d2f27b4d5a5e299ffd00d24d8ef7c47ed4a4ef4f80c3f7f2d955485aaae75703b9bae7d7001d74cfaf4d4ccb36efcbfbd7216909f58769797dd5b88a7760d8aa0d9c2c2d6f94d71be4555786de24afdb4bb94d52907bb3bcee9b446edf90dcad53907babbcde9244ee6d88bee984a778ab71a39f59a2adf3df9e8db65d9844d6ed4c6bebedd4d8e31d2cd1d6ef6489b6fe0bab6aeb77c967bf06e92f58f07bbfb1aab6fe3bb01335d67d377807daaa7a7e0f90ab7b7e2fd041f7fc3e9660ebed9e91f7ef677a5b87fa435b7fa06a5c63bf85c26e9a425a3e18e2acf8fec112fb5c7ff8e9d35ee9a7da06e7b0e475e343befc5dd5b8cdc352de9f527e33f09b5fff0a85fb970cf7025f4e870ba49c26f2beb4930eaa2dfd880c4f96ebec51f9defba1f71ef37fefa6cae32742fc9f0cd9ca3f81bd55c6e571f00cc6ed5f96d82679cabff22855a6d5bfe01e4c2bd536ab8eebd3f2fa4c88dfdf525e73f09bbfa7e632789c55dbe059793d2d78d6e29550fa36017a3cafb715a12b48b3c86d2415e717aa89738432292eefa93249fcf6f4eef853125972bcbb53bb24efbc26afafcbebab527e9c25e4cfb86221c745e37542cf95bc5b02f6db5c03f450b2f9372d5288bf1c8f626fcbeb9b329cba2ca10f185769a7ab23d26dc7a6fb4ce6bd78bd44fb89cbf9cfceaa3e53b6585e8d7da871103576b346caab1f62a06c2559dfa8bab092c42b2ee7a6d478465cf57de47854bc817cde52fe6e1c7a5fb537e5384dbc51e8fd26a1f7555dfebefcbd55e2fbec032087ff06e31771d5affc08dc536da42d019f2cd9e68a6f9d1836fb9825f6ef641f2ede54bed70a7c0719a8e7b2dd1e6f168a5373f9bb0df8cdaf2d42729b8558b508c96d19d257f5dd55fff8b3208ef3b3c0378027fb345166529bfe50ca6825bfd906fcf66c3a2b59fb5f7dab746f2365b405bfb98c6b649a3c80cb8a6f13e2d71adce7d7b6f2793bf0db93dd35591ce5b851bc5d286eede4b7b352f8b6bdbc7608c5ad8394b1d18f5bd7cd4964a931802f4369a86c96cbeba4495795c7e5584dbca3d4a13df8ede9d04dcd477ec5f4b6dd3ef47d87c4efbb8f95ef7f2dafdf8474ebcc12c7e5d45c8dea0f696c92fd10d27ddbe09d4afdbe0de9b76d48ef2e52df8e400f759f5fb358621da5c2967da878d7d0f3aef2b96ede3f591e51f519e86b46aeef7f06b25219cb51be21074bddbbcbb87402bff973d527e0ecd578aaaa37ba0561897ff36bb6942359aab9ec781ff06e1ff02ebff664896d939ebeddf4cc0ec956df6d27c350e9a9c292be0ff1def27917f09b5ffb021da49f51bc9f7c370bbc03ef774d0cbbb23dd58705fe181e9b1ed3127589f700e9a0f4833e17a02f54f95cb5f5c3dffd0dc2d67df70ff29d6a53633c7a011e2a4ff404f7643af492e9c045f2b8eea9e68462c837fcfe2f2c7d5b96ed9b58dc4086acb36275d29711ab0b64a592a7641d1cab6710667d202b953065fd14abce572c59980d81ac14c28c35f1eda0fb7c16945b3cedb90f02ac07fbfbf6933dcd7f3ffb09f9bd6cfbc49a25ca89350dc91bc412dba96a7e2a493b35d628791c62cdfdef7add00ecc3d3b18f2ca762b22c8ea9364f121fae6ac392edc6f80096d89e1f20c32cf6e5f691f34531653f2a4d555b8582836c53c70786741be8ebc68b472e773b39cf18db26a45b5b42ddb60af1cb09de8fa9b656a3d0bbaa8ecf6589655d2ed0ab51a28ef1c1217b1d2ce3fe97af775f952e1d10bd8644d02b2fa4579ebc0e07323a86d25df531c6b084f193f81802c6302e9d90b87466c9e302fc3ec5bf3d96fdd458b79a5feca28923b41fe57b5903b65d69e3c392a4937a57a5d38850dc46544da7ca745163c4db80df5e9cfb8ff2f51ea0c69cb210bd4646d06b7448afd1c016c2f6d3163ce357d56e60e0774d338671e98ac4a51b4b1e975180f1289fe500d9ff1920eb84986c97c67a68e20aeda826f248cf90fd370c64f596632bb15ea138d607ef283f9c70bba66ef04e2f15af6cff7777e53bf08b1fff815784bead4e67d94e8dc9f66d4cb56723f089491ff91ce5639222afa46d86012199c9de1dc8b47574cea952c63d21bdaaf15d8e49dfacde6ace538ef1c4c7b2c4ba6fac1fce20e9bb121ba4ffaef2fb7141b831e99b5a69f3ea5d55ff483fe44a9b97fe1ff1f14086f2b31f5255bef837668343e56f9527ea01d9307ee3fdf8e5cab06379faef2abfcf4f12bf7a29c66f2290312c143f203faeec5b977f864b7b506d91b81f8fc159f2b7f2fd57f6a0cb5fdb87c29e04c29e24bfff39f8aefb052c31df55676323e575142e2b26cbb9d818a66d3f272dab4cfcf3555d3b19c479b2cf70886cfbc7a7c8f4eb067eabf7f8fd7aa1efd43cd058791d2f9fefc812fc7362d26e957f4e5cfae0c577628975d24ef2bd3303062d950f992e6e6acc662a88d354a99bf48988a9b453f3b21303d97b2abd27e072864affaa98b48f9862128ee3d450383b81706459159bace7100bf3e8087e633cd4f87f56a0734cf6b17650e3103a669dfc78e5c9b1c4989a4b9d89c44bf9b6278b97f283a78ad7ced5c72b26fdf46305483ce610d960387f4d033634cd673d4c966171353fde0dfc56efc1fca5be3b2e49b8725c66d8032ca18c60601c263637c42dcbff66b86a5fab76e50c197e77f09bbfa7fccc3a54f39eec13c7e6f9e10dff4e5ed59c9d6a1bcf0c7d3f537eafe69fdb26794f85d72814b69a0f6b578d8e5297d82ebe6e23d5da8c646d10e9731993fefdf159219b52feff2780e7fcba73c8a6764e6253b2dead5c47d48305638afc77785c73364bac63a5ddc7e70036d2d6e3bbc8777b24861597bed4f1b92c71cc55ae29d8fe0e24ec79a1b0e55a8ef86e20ecdd4261ed2ebfe9097ef3eb1ef27e2ff09b5f7705b2147f3536a4be69c8aa67e7311e5181c423024325b392a1eaff1604efd6fad82e962ed5add3516557969feea30e969ce55a92985c3b129fcf12ed5ead3139013ce7d73d59a2dd2b390be5efbd58e25c899293e25c49ac505e8b10bd1645d32bd5faa7722d1e1ccf57eff5acfa5e7c81c63694ed2d0ca5956253086c4fc633be28d1f6e20bc07d7e2d6289f9b7c84fc71d7290b04b426197c8eb6210f6e250584b5862fe95eb4fc49a33987f551d570c64a93e94cabfc54c6bdff1651a5eb595979687182d97d7bd41bc168030d46f50ee8c56f6922ccf85d3664528dc15f2ba12842bd78fc44b4376a1fad3cafe564b7d7e05bfb95d28bf42d5d72b49f23ebfae0261aff2658ced972843852d9e435b94ef4f547e18e1f89685e22bd7a3c4818f49bc3c145645c81695afcc9a902d2a1f17e0a31f976b62e26be5bbbdc16f1e2f39af3d4ed9accc073165d7fbb1c4b246e683cab246ae2389efcf12cb1a355f9aa26f51a59eeba41c39efc6bafa7a8e93e31fe3659b2eb64c5e97237aee8de8b92ea46fc790be9ab251e91693b6195376d830f47c254bcc63ba7cd0cd8fcf7839ff315ef9c9aaf54ffb20f1594d109fb214f4edeeeb9b2fd73fe7ab316db5fe690da26f0581be6b53d0376abb723d4bcc8fb24d1edfc0823c24d75dc5f765fa76a5f2e1ce6209654165dfa46b20abf25e37cdbdeee05e96bcf60cddf3d262c2053e9f896a2e5a328d293dc369a1fa19a9e6d9701af0b064191a93718ded8f84b55fc4b0746d205dbb4331cad2dc4b87afa6df18a9de3a306437729d5dfca0409ef837b493835962397eb0bc1ec212cbf143e4f5804056ec003fed274bbb88a9757d4ac611a17450619f009ef3eb91a17438124973153e97a5da314acf86fe7b93d57a19b9d62f7638a2cb611175d1d419557439822594c1956daa43417ad6769beaf0908d283e87011d557b1ad8b04aeb2972fe67cae6d0bbdd34dfa76bc71b433a6e94d7a30379e2dfd08e8f09d9f131f27a6cc88ee51aca385c2f79a41fb7a9aa3c394a5e6518f11343b6b331643b722d643cb4d62f0ed77685ed5885a16c47e92fed784735b6aed67c1e8fe8725c445d74761cd605b3e3e32cb2e3134236a2e27fbcc60e6bd2364f0e857bb2bc9e026c53ad2155b6796ac836e5dad2f86921db94eb3fe32701db3cc1b7cd69aa2dacd6ddcaf5a6f1b343f6a0d2f904f09c5fd51a08067eeb6cd3bb4e53f940c62d762a12d62911c3d2d99e5a375b9dedc135aeb56d7b6a4d6817f09b5fcf00e9a6fa7f6701bb50715d019ec1f0956dc23641aaf62ac735e39ba5cc38f8edd9cf8cb13ef7196a0e4fad359e955c6eec8c90fc73a5fc4ee0377fae59ef1f53d773126524f843ab36ca79c1f7953ec5d297387676f06c815a43763af88eff3e0bc407d85ee47971b91e39bcee6fe605a1f438bc1a6ee732ed3aaf999f4594731e4b580716bb8025ac038bc175ccfcf78592cbf9891c6217c9fb1704e1c5cf07f7f8bbe1355ed5e8a6bd27db78f10b59a21d5ee8c77fd613d246a44f79a51d1e580d0755365e04de53615dccaae6bb4b403c2f06f7f8f552a95b1ff0dbd36df6b490dccb58427917570c2f97f7b703bff9772aec2b58c2184ea5bcab804e57f861eeacecf9e2501857b2607cd6e335bb4988c39540d665e09e9201c67655f8e2caeff7f565ee5c3731ccead2407b4fb61de25787d2fb6ac954ae7f9ca3ec57b5cfc37e8bf748668a8762792fd04985751f88bb9af7bc14dc536b5c2f03f7ee93f72e67956549a1da3b44d9fb91d5c45fb543af09c5f51a3fae732ef1e5162c94615d118a6b1b967a5c37b2da8dab6afbaab5ef71f0db8b6b81dcffaf40b515541caf64da38aadf75fa45d443b5e3af0be9719dafc75cb967cd5c35a77855489fab23305761d5167315fe8dac8acdc7ae01efc036837a0ef72880f7af93326f66896d16b9d63f7e138883dc33207e03b87783cf7997b18972e3b7b0aab67a2bb827ed27763df80eeaad9edf0064e89e87e3a5eeab78dd1e8ad7edf27a1b88c36d48bcf8f57a70ef7a3faebbf6638971bda36abce277568d7fec46f00e8c8b7a8eb150cfc37155f7555cef0ec555ee0510bf0bc4e12e245ea9d89faede55fb483c1cfddbf8fd52df18f8cdaf0fb0c4bcfc80e4be85f96d1d354fa1f2cda3c9c3567263caa61f94f25b82dffcf92d401e7fde3f627c1e0ac5e7a1c470857cfe3cd91a45b9276f4cee89117f447e3300fce657c03ba6ec177010cff9f531f97d787dd7e3e0ddc7c1bbfcfa044b9c1f7ac2e7bfc796906cf5dd93328c6dc16fae97ca6b4fc9e7727fe6cab2f569a0c353e01ebf3e23bfc901bf3d1d76ffccb7813dee41c292fb4957e6816743613e279f0f02bf79dc5627be1f97fb19d7c905bf1563286770484e48af38d81320ae7c859fadc65e25d7ca39cbc759c29ce5eefd12e3549d3ced3d552f4bff91f88b216e6a4fe44fa3cb8ea9bd4e7e0fd9b2dc67b8ce10f09b3fbf9b0575a2f22196e514fb2d7af855d6a5c5d288c344a9a3dcdfb8b22c92fb1bef7930f2de50f09b3f9f9046d8d2af2dfe4a286cb9bfc3827b42efa97d16e4ba8e98f2b71e127a3e2cf45cf909de1b7aaee4cafd7feb0c4ffc2e765fe87958eea5f2f7fd88dcd71359557e7756e879486eec01797d10912bf7f4ad3322f4dd43a1e7e1efde94f7b70f7df770e879f83bb5a7eac8d0778f849eabef1e0dbda7fc1ee5fa93056afdd263e07954db51636c6a5fd76dc06fcf7616aa7101d94f8c9d953c0c252fa6f68a7942ca53fbbd8e06bff955ed43da19fc86b628f738adf45f907ba116b60bc9792f2447edf9a9cac4f7e5f331a1efde07f1e2cf77f0d916f60bc5a79a786b59a8ba46d65531d9af8e497b8f7f20c3ec087ef3e76a3c20c97e463155ef81bd2d2a997d14dc8ba936dd27c13df16f7e55fb3c84eb7a309e16ff0cbccbaf9fb3c4bafe733f3d8a5e08c956df7dc112eb7ab997414ceee313977b0056a9ebbf023a7c09eef1abdaa72e07fcf67458f48a9f7645572061a9bdf0ba80df30cc6f59625dffad8cdb1589efc7bf03ba7d07d2815fbf9732c682df3c0ce58fa3f6656b077ec3303e0ad9ed472ca8cb01d7cae79f81e75edc17b54b9423ce51e0e18d0ba5f1c799b791c5a36adf468a7ff3392d6e8d8495a68d54ca23b491ca303e9657b09f61fcc7905d7c1cb21b19cf38d883429db1a1be15cf40fd539dad158f4a941303fdc6eacbc87a31b18e670a2b61856c351b281a2d7c0435d5e37bd497d51fdc23f6aa123b8f317e820f0fb6826df03e2dd19d9e33579ccd53c106b35cede939edc5fa78157abef8bbd07b6399103abe4e9520eeac120457aed4fbaf041cfd53eedd9f2c4e0ee287ff2cf39e0c60d3bc2bff6a211bc4f6f0fe4b9432cf0bb694adf17e15787faf16f2167a6a577db3ba28f16382c2dfccf664faa718adf0ee28a0abbddfa542c339e2efb542d312a1fd54ef5e85385369255bc2c67bd7f522b4aa712ff3fead0bb34022d3eba83fcc08bbef1f99a4926982171baefd40618bff3f456a234538fafae3ebf8d9b0ee40315b704c9594f8ff0cfd42862f189a2a650c12c86209f772d940b1a668761582d1e35835867afbf679e7798d806471d193e1c9dd51c42048e1d7f6dbd8e7e13f278dac9718b5c16ca0986aea544dd49281e5f2b2c5ae1651a250af5edd1cae68187f4c875f4ce3cdc9207effbd65e2bde809505f547e89092096821778a5da2c5079ce15ca970ad5c29129102a57482582dff9e24b3f1aa532a255523587abd040244cd56ab7bac8614913d7258d18092fa8959c811dba973c711a56c622489c81a22dd52e890963618946565dd9d252996cff668bc69cd5f6f33eafbdf8e3dcd2699ffc7ccfad3357169cf4c5967afa746a2cd2299dd0b194aaa34ba9c699ce44d5d71ac9d269abca7805e9c4ffe81936416cbd3a1d3082757504b7cab4adf367ab849442efdde80cf9f6507dc305911e6053c408ab570143584f833087236ca6d18ad56b14d28a2b8448aeaf4b9c26b55345a767dc7c4d70db10827aa871b7485ac34635ed063a7a6223b185a4f454cf718ed745d8c97b56e8bd5f229aa1fcfe2c4f62a1173697374e8410f43613bf484e96cf1cf60f93d5526d25a8f600fd6053cd30e20d35c473b8bdb6d6988128e3c299a1059e191a61d9ac8d69366b8c49dec654f25698e4b6a6929b6092db994ade5a976dc4b8f1fc8c649b60c045fd6bbcf7ed522f326b452f7a8df7bd6e80267976699f7276e920b24b16d30d1b45d308cb264d7569c76f76d429194eba0e78d235c304773214dc1cb3b6cea6d6d642279997dcdba6a272035c704b4ce52ea62ab7c2286719526e8d09ee6a28b80dc6a29b298b6d74858530c325a485c55cef9e3f3a3a513c5d2686d40678755489774f9d66ce3325f6a62a18a68b77d7081d921721dce7bd730816f719e57ff445490f5194705f561a7db102a6ad2ebd79aaf4d444a14445219cec3df0646f8705d04b1340791a01b4c702e8ad092037163d800e5800d99a008ad28841472ccff531cd739d30c9db994aee8c15407d0d0ba06d31c1fd0c0577c104f737149c85411e600ab92b2679a0a9e46e98e41c53c9dd31c9834c25f7d049e68d5beef566da65e889a93dd854ed5e98da436a40edde3ae1bc9332b4f2e540f8bfde9f2ac29be0c2b331cdf3349a775c118fa4791f0cf83053e0db6192879b4aeeab913c5034780f6199edefe827a5277bd1e2a1cd648bd8decc9f4d54e1ae128d03ae919a959ced5d170b2df8fd22d9a8481e56f266cf884a3e601c5934db27b2d4a7d6e963c15de7e2a2d9c59de1b2c5f6b158634aa74df4c697bed1374a846e171baca1d80f2b69466b4a9a3774c5589292a63f9665c79866d9013ac93ccbeea0b1d51c6eab63bdff1b8beabe4a38a3f07006ea8a06d1b1dcb7568b067f3c94cb5b2cfc447c793318ef8fac13a6badc33e0b5d2700abc77cabc304aa4919b1406dce72bdc3a96ad6fa40f345e648731296407ca586119204767497c54813b6e5799dae4dd9ed96c96f77081c886fbc8fe4d854cdd65e2d5656c5fefaa5c3ea28c590cd269c3c7e3b80b77b5add956b8e05c4cf04443c183b13c3ec9348f0fd149e6a50ddf16d7b4853514537b8aa9da7958893a5553a2fe158b56a20ec384efa8117e4f3c9af0e15856d829151b4962d52330c1d37479aca7c87c7c0e2ecbfb7f95f7059ff12914b93f4b5486416990e5e5f565debf7885dd0fbcbfca7bc377b18aa2e7f698514c37358a9158bacdd0a4db4f11d36d14267ca646f8943ad1848fc6d26e962eed78f9c5eb0dde2c592aebb6c4d2304b38bb6509ffc635622ea958a45cb948d72cb69f57221fe05d2bbcb7b3443d502a9ef17ff394e6656d94341d83e9bfb34effc640ff5940c32821eea00b91139ead29b76211cbadb13ae1cd85d648c387cfe2476ff88cc3b0cdd561e3c34613bde60b6fb9ae11efcf11065052d9562eaea10a72bc46af81623c7e25abcd0619ef2d706fd072f1efa089c2c30efc8f4c1a5e7c93de70c34bfdd137bcf8b6cdd9e2b0854c688f35b0f2b14275574da11a8b52a84ec0f2c26e585ed83dadbc3051677362aa6675adda1c9ea3660bd93ce79937f8f926da75c2bd7f319f342405cbaa291dfb8ac351f8fb45925c392f4cb94bc0224f6dae74be9888e5f04596d0e789f9224f6452732c5f4cc26aed3d35b5f62df5a2d5da9375262ba6eaca6ad5642708099930dbbd74662ba6c5f25248fc9ad4b38b5834502e0ad56259a8fa457717714a5499a8364bbcfbbce085cffb8a530f797b6992e0bd4290e7f12b14fd5eccc8170823cf743c31439f8255000b351540a456f5542c0b156ab2d05f11b3d08e98da8b4cd5de0953bb48a3f6fef5a3a93d0d135eac113ead4134e1d375c279c1ccedd5a487380313bc98699a9b7cca48f5138a423dc545a2afa0fa7fc5e2ce06efef52ef5e911091251680283fb7285acec4d82ed1b06d1e91ed2c0cc15243b63beb043715058bd90ce96c9d60defeda9b21ed2fbee978f4f6d71c5d381c7ba906fb0511b11760d97c8569369f8b495e692a791e267995a9e45d30c9ab4d25ef8a25e23e9a44e4ae9e511271374c789946784144e1bb6319b35c5736f5f47e8e038d54bffb148c6b147a455a852879b2bcfadeaf738b13c647f898c732d9698e92cff7c0f4acd0e9e9af37e5debcbc4d5128c6d0788833bd4c1a25d4f918fa351af4c74544bf27267cad46f8671185ef85f15aa7e3d5ae9a742d164ea0c1dd41dedd281c1760daacd769c37f06e916259c8518d20d1aa49b1b47435a8845625f5d24f83c9a8f6f7b0fd90c31e05728d7caae15d578748c8b300df6d369c04bb669950d835969360b8a30a4fb6b90be1211693156221f605a2297606a1fa82b34b78aa6f6624ced834cd55ea293cc5b1d0733a4d5c1bd38a2b73a9662e11c8a8573585ae12cc3481d6e4a6a6f9d649ec0476812786c936809bc1c137ea446f8fe11859762c28fd2087f24a2f01598f08d1ae19db68e267c2526fc688df0e288c25761c28fd1083f33a2f0d598f06335c2af88287c1fccc88f3335f2324cede3356ab76e1a4ded724ced134cd5aed0481e289caa33b96e35ecfd146d691fdfe63fb515357c235edd9ad5eac2c78694d6e8d285d7d027e9548a5095afc5ace9648d356d899809d661c24fd1089f1fd154d763c24fd508df1851f8064cf8691ae1cd9b4513be2f9698a71b26e67e98607e5e8076d7823922679588e67c89d80662a5f8d74ab1154f8998b82e14b61f0c38a9896bbeaf4896b4de3269d3a51eb901dedd285aef8f697da64e6b3ef3ca07718376b3df95f4bb213abfc22cd65bb6ba7b47d2eb00cc06ced2d8c02d110dec402cd2671bdac041ba7256ac2d59465ace627ea40562f09eef03b45858ca8a1a5ea2744eca65f266512673174d3a5db1f2fb605d72f3b6f5b90c695bf323261a8b732fa2b4ad0fc16cf67c8dcd0e89586e1d8a09bf40237cd788c20fc3845fa8117e7844e187eb84f3660d3f64c1a8597304a6f6c51ab517368fa6f69198da9798aa7d944e327fffd2548a9f2443e41b31c197190a3e1a137cb9a1e06330c157180a3e16cbf35762799e1f9310bd3f7d1c6682576b4cf09d882678bc4e38af7ef8d107552a67be8c478d0ffa435903c0a8ddf6a1b15ee5f3b64c16b0c18c2c6f6e4cf704e747aafa4ec074bd56a72b77d3d9c3e3ca1b30a5a2281fcdba7bba07ff8dd16ce6348a0d045f8cf1aaa62c8d94e1ded743d85029a580c1ed9eaa4a8812c71331a3ba0e33aaebd332aa4d18cb1b52c9154922701226f8465d223516899468527b466c5f9e8ce58f9b34f963d716d1f2c72998f09b35c23745147e2a96d8b760897d6b5a897d1a5604de6658049e8e09bedd50f0199815dd61689e676282ef34147c964e304f7bbedf6bd849960b88e2247b366685776bacf08e96d1acf01c9d70de0ae13baa1bb54236636adfab51fb8d886a9f8b09bf4f23fcaf88c2cfc372e6fd58ce7c20ad9c793e668e0f324d69c95d341778fff1c9355ebd2c61b3440f853b92af174f568baa98f791a3d8ee0598160fe9b46855a9458ef7f70ae64f1ffa0e5ce9eb7021a6c3c33a1d5a4a1d067bff17b1557299d57aefeff435b808d3e0119d060d415af0655ebc471925b48b31f37d5463be4fb48a66be9760e6fb1866be8fa765be976285de139a42af4ec442ef328cd0931a4287b78e46e8724cf8531ae19744147e0526fc695dda46147ea54e384fdb67b0b47d36adb4bd0acb0ecf252b9a726bb868ba1ad3e2f9e445d3a01a2c9aaec174782159d134a4068ba66b310d5eacae68da4584176d49ca75bad0b8f9bea431df53db4433dfeb31f37d1933df57d232df1b3064fcdc1e9386de8d189dd73474b2b68946e7268cceeb189d37d2a273331689373591581f3112b7e88473a26f19a2bf15d3fa6d8dd62f44d4fa360cfd3b18faffa585fe762c12ef6a22b1ba6db448dc81097f4f237c5344e17762c2dfd708bf25a2f0bb30fc1f60f83f4c0bffdd9871f2b360d06a6d700d576bf7605a6cd16911546bb93558addd8be9f0b14e0755ad0dadc16aed3e4c834f741a346241b53651cc49ae8ae8d776bf2e3c6ec09f6a0cf8e076d10cf801cc803fc30cf8f3b40cf8412c125f6822f15bc4483c8409ff52237cd7f6d1843f8c25373f8ec8a45e7804d3fa6b8dd64f44d4fa519d703e3cc20f31321a1e790c53fb5b8ddadf4554fb710cf677babcc5fd82927bae1678afae16bea54b44b9532606fbfd058ac5c2276016f3b71af717b7177a77fd2980a5e2b72a370bd92239633f48ccd8ab49820dccdf75364b78ccf8e7c96489d9da62b95dc27271a75cbc550224eb7d029649df06e84510d501fd092c81bed724101fce8c92404f62c27fd008ef1151f8535861f4235618fd945661f43416899f75843a468bc43398f05f34c2b74424f4ac4e38cfacbfa652182519ba7e4e2378a0d89bb3761c34aa6ebb55b30e1abfe978691d34f88968c91d34cc75c51c349ec76ce90f5d6e8b68a82f6055c49fa655c48b98e4bf4c25bf84d50f7fa762ff490acd973582078aad6317d78afd9b6c8897dcf2ff49d9f2ff1596bf5d12cb37dbb64f9f12af60c6c3376931329e5731e3e1a7429b18cf6b58368dc7aa66d3fd3b45cba6af635ad789699a447c478871a2a35522bc1b74abd9b24473292ba2e3e11b981e75757af00d75a2c97f13935fcf3075dec252a7be26757e8a983a6f635a37c05287e791a5b289a8d2a3a472b39774dd42dfc122d95013c9df3a478be4ffb04836d24592e740e51be1b767137d74a344eb5d2ce4c6ba90796fdf3ff16c60e51129032b77449ae9658862167555d97b98065be93468abd5609af85785d83ec26ff5a7b768f07d4c97263a5d3aa6a84bd53334a2e8f4814e276e785b6b0caf5d976886f72116e1a68665c24798e0668682b760829b1b0afe18e3dc42c3797844ce9f60c25b6a84ff1551f8a718925686483ed309e6a54feb540427e90c7dae13ccfba16d62483f749b583afdd02f30ec6d35d85fe91a0dfb975824da6191689f5624bec222d1411389d6dda245e26b4c78478df0b1dda309ff0633cc4ebae294efc9309bc13d828a451b5b15e4d9ac8ff41af5ff4e5c8292257ef9d54f3fb1f74999a8f5fd22b79c958add51ca19dc03c01f54e2abd957875a062a1c3e98e457b18b2b8bf32c519817477447fc1663d159c7826fdb0a371af45b9941051bacc75f27342c65c132725f3fae7375127285a76eb4787c8719ccb61a83d914d11abfc7b254172c4b65a595a57ec022d15513895b2246e2479d704eb49b2ea5f97254fd10e91e7270952f7be2bd0b7f7faa64699a9df4691fe142eb0fab06769d98035609cb5043a889cf2a845d556872d122a1e12a3000ebcb5e257ba751eceb278c5e77c3caec674c700f43c1bfe804f3fe744fd3fef4af9899f6d29869931ed1ccf4378df081e2c41dbee4dd86014975466ecd0dcdf4d625b57668263bc6ffe7dbe2d3ea8b0dd2fcae4b7a5ecef549c55a7fc793fd0f2c1b6ca72b9df8cf02e6af63288f942bfec4c2e9ab0b8797f17c1277b8f7ffdacadbe94f21ff8585de4f17fad63274eeb8ea77a11778a5aeda6f3b4ab87f63e1f6d785bb0d089797d1feb62c41c7b1dc80c03f982603749ab4009acc108309cbbc127d83f7ede23449fc8b853f50177e07107ef57af037ca58d4a10e16434ad31c5d3bba57b4d234a6132ece8d32ad04e298e45c53c97530c9834d25d7c5240f31955c4f2799bf3fd4b04b5a1f139c6728b801267898a1e08698e0e186821b61a937c234f51a632a6f6fa8f25698e09186829b6085c6284da1d1293b5aa1b135267cb446f805118537d509e7c5e3185d01cc8f0f081f46a15fa0c9fdcb0a65f7b8d8f766959d8a70973b4b761f2a44bb90cbc812ed44df436bfbb487e29b61d876d0602b8e88ad39267cac46f81b1185b7c0848fd335e8fb4413de124bf0f1ba04e7ce83e3bc1f3cc9788f730392e0d15c635a6111ccd744f08a88116c8d4570822e82bcc00a664956824d28a344a80d16e6445d985cc25ab183caba48a16c83619ba4c13661bb68d8da6251988cb5f857b055b23d1a2512edb070a6602dce25b2ad9d1f2a26d273e36c8f853fb5ba1667f57aa4d7e2ec8025eb8ebadcd0375ab276c4a2bb932eba9d416e50c383a994ce832297ce9d30bda6e9f46a03cc60aaa7d53c997ba61a17459d313da6ebf4d856630ed5eb939e596c8b99c50c8d591cde2f9a5974c1a23d13cb058953c985355e276461d19da589ee67fda345b72b16dd9db10e374cdde995059db9bd75c33499add3a40b626fd569949ec575c792608e26099e19102d097a60112fc09240efbc606e693db168ced544b3ddc068d1ec85099fa7113e2aa2f0de98f05d34c21746149e8d09df55237c7544e17d30e1bb69847f1551f8769869edae33ad7ee2bdb011615b8e0f1023b55537b8f6fb3245724a869f17b53ae214465f4ceb3d745af3e8f3291e5d7e8f126a3f2c21e66b12e2af8809d11f1b12d8d374486000a6f65e1ab567e544537b20267c8146f8fe1185e760c217ea0ad588c20761c20b35c2eb0e8a263c1733d04558134d555598a1a6572d0dc62259a489e4e688911ca213ce779e2d4e654868132e7828a6758946eb6b226a9d87095fac11be25a2f06198f025baec901b4df8704cf8528df0e3220a1f81095fa611fe4044e1db63c2f7d608ff2da2f09198f0e5baaefde068c2476119b9549791dbcb9aa67fa45a324a861e8d45768526b2eb2346760c267ca546f8fc88c277d009e7f382ab52292d929c1b3d16d37ab52ecf0d89a6f5382cfdf7d1a53f3f2133bc4ddf4c2fc5e179103b7a36b04c1e29c5c700f873df756a052b9433ea652c388e2a7005c912cfa21e5b3b5e17033e1b5c56f920e4f1531e4bc7e3271f4b860addb06ec4649880b58ed698b68e266266b9d6d02c27613cd6e94aeba1d1784cc6cc72bdce2cc7a4619681d9a9e63b3c6f083b034df9bc65b1bd81bc28e63a0533d70d98b9ee9b96b94ec592673f4df28c8d983c3b62c9b37f2a469584ce4e98b51e6068add3301c076a70dc1011c7744cf8411ae1c579d184cfc0581f9c99acc0875696ca7fd76c569889658543b0ac70685a596116963c87e906752226cfce98f0c335c23746143e1b137e8446381b164df81cccb08ed419d6e0340c2b585494e8ed9938e9ebfb4b29e38be623568099d05198096d4ccb84e6620971b4aef7103121e661c28fd108cf191e4df82e98f06335c25f89287c574cf8711ae10523a209df0db3cfe375f63948639fe3d82231155551e981e8bba16e2f8a38f54c57e871ff677f65c0cab41ba6bb63b67902669b27a6659b7be8c2e15c37c5cc37889d8f25c249ba44e07eaffe728b0ae1bf1105d79e982d9dacb1a5d251d16c692f2c1aa7e8a2315a634bc12a92aab6143e591776690ac57d3e01185851e29a8b42f99daa64a3405b80d9d8a9988d9d96968d2dc4f89daee3c737b75a25375a516b04fc7dd0797bba4c705b29f35d94d81662267286c644b6443491455814cfc4a298aa894489621196a06761097a765a095a8c151ae7680a0d16b1d028c1846fd608ffd7fb1345f862cc08ced518c1ac71d18c60096604e7e98c6084c608f2e51666cbc4c44f49680fffed4129e03b50f86ffbee70e52cec68e4af8c497fe9ef52cc9ccec7cce982b4cc6919962817ea1aaae3a325cade58a25ca44b940169254ad5f14cd52c080a6dbfbf1305ff720cffc518fe4bd2c25f8a85732916ce656985b3024b89cb7529c147a51469950265e2000b7fcd4f14922bb190afd085dc58bc67361bba0a33e92b3526fd4244935e8d45e72a5d74faa465d2b313ea593343de0733b0ab3103bb262d032bc3b85cabe3c237fe8e5ec59663097b9d26610fce8f96b0155804aed745a07f5a099b5fe959a092d63f51cf2481d760097c0396c037a695c06b313e37e9f8f007416ce77ab18c12a7755842dfac49e8ba13a325f47a2c22b7e822d237ad841e275bcc41c216c925831c09bf1b6dc06d0396c8b762897c5b5a89bc2f06fe760df8d511c1ef8781bfa3e68ace00b8df5981c30551a1ef8f41bf13837e575ad00fd085c3a790ee8e194e211d8825e73d9ae4fc6d52b4e43c084bce7b75c999a7494e957c7a77477de34e9d22a692996ffe5924971ef3431cd7889c176dbde2c15842df8725f4fd6925f421ba7038e10734bdab188bd6753b144beb0735697df8e468697d1896d60fe9d25a37e25c7d5a1754a669556f50cc45214a2a1f8ea5f2c3582a3f92562a1f81a5f2a39a548e7a02ca915859f19869597114663f8f6bece781a9d1ec6723663f4fe8eca76312fbc9af528f72db99e5d5b873bcffa2d8c3d1983d3c89d9c35369d9c331983d3cadb18778447b38164bb56734a9366dc768a9761c966acfd64caa4df2526d2a9b1629d58ec752ed392cd59e4f2bd54ec032da0ba619ed442cc95ed424d9fc69d1926c1396642f452da883d63b4f2ede824fecc1f81571b8ff5213d5f1495812bf8c25f12b6925f1c95842bcaa4988272226c4295842bca64b88ed222744505b26baaba75f3f9e8a617f1dc3fe465ad84fc3c8bca923c374056292589c8e497f0beba6fadc074aee51c23a0333a0b7350674c98c6806742626fc1d8d7036339af0b3304aff8b99b9019d8d097ed750f039188ef73438b64464bd1913febe46f8d288accfc5847fa0117e4344e1e761c23fd4f5f0220a3f1f4bcc8f7479a9a2322f610746a83dea4c0e89f0375d5d9070ec84dd47465c8025d1164d12359c152d892ec492e8635d12f1f372aa9eda112532176195c4275825f1695a95c4c558bc3ed3c58bd7120323c5e3122c513ed7b59be7444b944b31e5bf302c042fd3081ec89777c7766694fbb6254a2ef07eadf6fedd4f64a972b91927efa82faa660fb62f75f18f85e22ff660fb2ac6f7606b532556c9c2c6f653bb5c971cbcb7f2752ac9f12f9e1c576046f48dc68886174433a22b3123fa569703c4ca29c399baabb0e87ca789ce3573a345e76a2c3adfeba2c30b8e60278a7cb9a7fb1251f64eacdccf3d4ae4aec1c2ff41173edc9dad08841e846d707227a6c98f3a4d9a024d4c2746afc342fe4917725b56755fb69a5bff773da6cbcf3a5dd41e81fe19aeca2ed24f831bb0d07fd185de0c84aeb678493fec1bb1b07fd585dd19a4c22ab11bab3f0e5a28f245d50c9fbe5e37617afd861538bab65894106fc642fc1dcb93551b2fd3451b4d2de50e9e446ba3dd8269f2874e132ea1424c30453cac54170a4fe03f63fcb887c4504493292c9c578b88f0db74c2f9cfbf627c47ef44e13b4e3fa4c1e64ecfc6ab04500fd7fe768cd1df3a466a5f4dbff5cef36a85acbaa36ec3740716ee3fc9f26ad57057ca167e94b0efc4aac47f3555e203f3a3558977e984f35d78f92870b5ed926cdc14eec604c70c05dfa36b7ff2ed73625e6b2063ed4fd84553fbee466b87c6e3553b2b03f9b62c629d6cf4d0ea78f2eaf3ce15ff3340fd69504fdfb6ad1be76ddbf442c2dab8f76299a45e1cd91fad58149c6a5dd08c3432c77dba30b9bdd78f9b4f6cdc8f45a8812e42fc018fceb4cad57f5122f2001691869a88d48b189107b18834d245a4a18cc87416acb88d129587b0a834d644a57ec4a83c8c09df4a23bc4144e18f60c29b6884378c28fc512c11b6d625021f9780aba3820d62b2e518d668e9a8d54f3c1b2cef0ca9bc3354dec99377e679c521ff3d4cfe5e220a3a7f0c8cb755f8b3e1deb33e9112fb312c564d75b16a2ade4bf45186b18c12f2e3ba8a208b657820c2ef1796a55101348bf32dfa13010d4086229ac7f54311c942c78ae92774dcba726e0b32c8cd7fcf6f31cf115500efd3cd04bd8bf23498b688f3034d1299aa3f7ab22d05d9ee55629eae7e18f527b17cd24a974ff85cdc1e6c94905c2aa48f66ddbd9eff784fedc1de9743d818efd76cefbf99deffa3d840f0e6188f905f56ec214b8a3d593a4e9d4f611ab7d669dc49ab718ef7df70f1778ea797df57abaa6d14ad9ec6ba186de255bb185fde726cce6f6397af8ad2c578068bf6365881867731a2ad617b5617326f26b58d1b4ef73f87496e672af9794c727b53c92f607571074d5dcc22d6c52f6289dc3195de4992347c09e3d1c994c7cb98e4cea6925fc1246f6b2af9554c721753c9af6192b34c25bf8e49ee6a2af90dcce8ba191add9b98cadd4d557e4b27990fabf44845e5243b6abc8da9dcd354e57730cabd0c29ff0f53b9b7a9caef6292b34d25bf8749ee632af97d4cf276a6923fc06caeafa1cd7d88a9dccf54e58f309beb6f68735b30c1030c057fac13cc63383015c1490eacf804139c6328f8534cf02043c19f618c730d197f8e091e6c28f80bac6934a4069a465f62b964a8692ef90a4bc13cc314fc1a9b5c1f968ae02493ebdf602938dc3005bfc5048f3014fc1d967adb9ba6def758ea8d344cbd1fb0d41b65987a3f6290471b42fe09133cc650f0cf58eaed609a7abf60a937d630f57ec5526f9c61eafd86411e6f08f9774c70bea1e03fb0d49b609a7a7fea86ecba793f637bb3da382b53e7a858b327654e4c252d46e2c4fec2d26292695afcad93cc27d226a7a2f2665cf03f985d4e31b4cb7f31c1530d05b33892f77734ccfb319d609e7a3b99a65e5c279947719a218b3a98e0e98682eb628267180aae87419e690ab93ea6f22c43951b6082773614dc502798f739671bf6391b611acf31d4b831a67181a1c65b611acf35d4b809a6f13c438db7c604ef6228b8298662574314cd308d7733d4b8b94e30ef19ee5e033dc316188e3d0c71b4c470cc37c4d10a2be2f6342de25a63a0f7aa01d06d30b51798aabd0da6f6c21a50bb2da676a1a9daed30c98b4c25b7c78014d500900e98dac5a66a77c42497984aee8465f2c58699bc33267889a1e06d31c14b0d0577c1042f33149c8509dedb5070574cf07243c1dd7482f9947f692a8293787376d709e6bda91586bda91e3ac1dcee571a0e78f4c4b2de2ad3acd70b93bcda54726f9d647e16d13ea9c04872165136567c96d540f1d907135e5e03c2b7c3eca3c2d03efa6a040fe4fe45b13d18e5580d77efcb176f4c603b792a0ef0ae7ca96821f8d734e1d75951e90e985ff976f2d198353a265a77aab571ee4ed545bc69a20fe646d54f47b707a73bbfd6e916785ff0a5bd2b23f35de7c5aa4e88efc09e3c565929924c16760b2139f04c62884ff87a9176351122967afdb1126e836909370093bcafa9e48198e4fd4c25e76045d0fe8645d020ac19708061332017ab470e34ac470663900f32853c04837cb021e4a198ca8798aa9c87513ed490f2308cc561862c86630677b8a1c18dc0501c6188627b2cf58e344dbd9118e4a30c218fc254de68aaf2688cf2d18694c76076718ca15dec80093ed650f0580cf271a690c7617671bca15d8cc7543ec154e57c4ce5130d559e8019dc2643839b88b138c994c524cce24e36b4b8c998caa798aa3c05937caaa9e4a998e4d34c25ef88613edd10f34e98e0330c054fc3589c69ca623a26f92c53c93330c9679b4a9e89493ec754f22c2c01371b26e0ce98e0730d05cfc64ab9f30c4bb9393ac17c88e1fc5404f32e3a22b8002bf02f302cf0e7626671a1a959ccc3205f640879176cf4e9e21a187dda15037d8921e8dd30d3b8d4d03476d709e6032f9769c62e727a7a3f35c30ee1f0d6e3e1ed81a5ebe586e93a1fcbee571866f73d31c1571a0ade0b137c95a1e00598895f5d0326be104bc06b0c13b01033f16b0d4d7c1186e3ba1ac051849580d79b9680c55859728361595282a5e08d8629b8184bc19b0c5370095648dd4c53482dc508dd6248681996a6b71aa6e9de9819de666a86cb3116b71bb228c5b2e51d35902d57605adf69a8f54accc6ef32b4f155580ade6d9a82ab31c9f7984ade0733e77b0dcdb90c4bbefb0c93af1c4bbefb0d93af022ba21ea029a2d660841e3424b416b396874cad659d4e7237efe7c3a9a89cc4297c3dc6e21143161b306b79d4d05af6c5cabec76aa0ecdb0f6b573e6ed8aedc1f13fc84a1e003b072e449c372e440cc329e32b48c8330cb78dad0320ec6ca916768ca91433042cf1a123a144bd3e70cd3f430ac807adeb4803a1c63f182218b23b08cf3a261c6391213fc92a1e0a3b0d47bd930f536628c5f31647c3496235f35cc91c76039f2359a1c792c46e8754342c76169fa86619a1e8fe5c8374d73e409188bb70c599c88659cb70d33ce264cf03b86824fc252ef7f86a97732c6f85d43c6a76039f23dc31c792a9623dfa7c991a761843e3024743a96a61f1aa6e919588efcc834479e89b1d862c8e22c8cc5c7862ccec672e4278639f21c4cf0a786823763a9f79969ea9dab93ccddb23f4f45e5246ed9e7612cbe3064713e26f84b43c117e804f345ae5fa52238c922d70bb1d4fbda34f52ec2587c63c8e2628cc5b7862c2ec1047f6728f8520cf2f7a6902fc320ff6008f972accfff630df4f9afc078fc64cae34a8cc7cf863caec2caa25f0ccba2ab3116bf9ab2b80693fc9ba9e46b31c9bf9b4abe0e93fc87a9e4eb31c97f9a4abe0193fc97a9e41bb156c6df86ad8c9b3095ff3155f966acc5f5af618beb168c053f39d884c5ad98e098a1e0db30c8f13a86906fc720d74945e52490efc058d43564712726b89ea1e0bb30c8f54d21df8d416e6008f91eac8e6a988ae02475d4bd3ac1fc549546a9084e72a2ca7d58c3a8712a8293348ceed709e66beeb74a45709235f70f6066d1c4d42c1ec4526f6bc3d47b0863d1d490c5c33ac17cd96cb35404275936fb0826b8b9a1e0477582f9cf1675aa6eafadfe5409a01e8ee431ac75dbb28e79ebf6714c78ab1a10fe0466d8ad4d0dfb49ac886e6358443f85154bdb18164b4f6382db1a0a7e0683dcce14f2b358a5d2deb052790e53b983a9cacf6399b1630d65c6177401707bea940a93df71c12f62b03b1bc27e092bf8b6352cf85ec652b18b692abe8249ce3295fc2a56dc75ad81e2ee35acb6ed6658dbbe8ef1e86ecae30d4c720f53c96f62927b9a4a7e0b93dccb54f2db98e4dea692dfd1481ed8cbfb19cbe4116cf08496f48e60cbd659722cc4412c8def53477f5c5a2a3a608be1ff87e5deed6a20f7be8b257e5fd3c47f0f53bb5f0da8fd3e26bc7f0d08ff002bd1061896681f62f5f4c01aaaa73fc2b0e4d400962d58953ac8b04afd18d33ab706b4fe04d37ab0a1d69f625a0fa901ad3fc3840fad01e19f63793ecf34cf7f81755086197650bec4fa11c30dfb115f618247180afe1a83bcbd29e46fb036f348c336f3b798caa34c55fe4ed710e8edfd8ccd66996b088cf3dee2474d6f48a309303ae526c018d104d8a64abc92878e55fedf6305c10e355010fc8025f858d304ff11537b5c0da8fd13d61b1d6fd81bfd19abf8f3eb688e749b207e06db198d67fc18d4123683f1f3e5d789c45d2edb7c03c4e16f53bde733bd272b993afd5cbf11ba6edb74fe3634286ee8ab449628f4be89d20af9058be5045d2c8fac8ce55c562c32999f2157887f4f155995c766b1f7899f21a756be39d1cba625e28dd92216fcb0bbb5e2ed01323e25e254d17c2f281e2f2e37915e2081bf1f4d0f4c5201e327612e114f1399c2567a98f73c4f4ed4d3c07fc5484fc4ec0986e8c7899fe2e8d35ae515820b3cdb281369eec7b6409cebb9b28ab6c1b7f8fd9ab2a7dfb0584ed2c5724c289690b91fcf4922c556883886b54c4c21f824595e815f4589d9ef58cc26eb62b6434ae937ceb3a16291e7fdd341cd532e7812256e7f60719ba28b5b5e286ed345ea2c9531e3bfd6d75a4cfec46232551793e3325c9e05df4cf0aeea04e362cfcacb64295f1ec1ca213b3c16bc2e59239a18b0d4e30daa9a2bdbfec2a8efa8a33e2ea5bc314dd028b7a254fb1b8bdf4ebaf84d23b42a7e771f110c8f95dffc5d26825ec6f615f9505f92a493aaff60b19ea68bf5e8a4b1c6359d2de2c28f77a9907154b531bf5b240955cd17e9a7e6bf58bca6ebe2b55be496dd1cf124b16da793e0df8327998f135d1b9396603ae9cc3d72b43c66e878ec94913a9bba368f61719e89b553a2d980b2e169deb3222108a673548b8812b33816b359ba986d8fc46caec89fa5b26de277ad55af659eccc5c5555283a68f52078bd1ceba184d222c7d55aaf2770abdb8968adabbe6625a178be96c5d4c47793f532f2912635028eef9b1e34ca688542e13bda122afc6dd5083b1aa87c56a4e2a7d82c470610b61ae488532ef5d9e0f9724a9fd1265d45cccea63312bd0c52cbfda9233b55e015e8626ebb3a65b5236c0e2385717c7ed509bc46d71a5b4d69ad2b821a6f13c9dc625c47d800aaf3ce703924b641b7f9eb0d96595e547cdf46ad3a9f71b619c76d1719a5b6b7da5e484cc3934c638ecaae3301eb570dea75be4bda472f33491eac9ebc8eaf34a4dc4702b2c86bbe9623835620c771116bd124991da886f132cbebbebe23b9bd0b2cbd36831d40481ad31027bd4544bc22fdbc68176047dac9a62b19aaf8bd5e488763c514ccaac92edf3dab6e166585cf7c4c654a2a6e024f146556b0c97afa9cb8d12bfe658fcf6d2c56fa4415bb742d4bc2bbdf82d963d533c560555de8d12a716589c16444bb3b07d8e132320bc54a9ae5f455b53b6c4e2b7108b5f945eae1fd7c9b2cd143ce57334c9dbb335d5726c85c5af5017bf1e2cf938263fec8442cbd698968b928f464649853969a502a5edb5c1625da48b757f346f15543a13c0326271e5083caffbd768db9de9cd486c83e95dacd37b44b57dc4a96236938f97967a655e991737ee1051a1e9b1274b81f4fbbc6db1f89460ade5e47984f7df67891664b9a60d91caec076f792daec118b6c362b838955ebd7e3663aab03d3e725f2847d5aaa657266734da63715c828da9a53272914a2cd32b31d28f69072ca64b75319d92526a86e7a6fc7ca8e25d9be9da118bed325d6c77ad365d69c7f2a947f93b6134f6c6c6c2f57586723b5b257eadacc51666672c46cb7531ea194adfc0ed2c3c4b512234e4b3f83553eb6d8be959aad33337a427b485b0ce93a5cea9e6a574fb275db018acd0c56077463786a05ac4e98f22d60c912c8cc84a6c9e30f1803f750860d5c30013eb109ed378ed5124720f9e93c22546aaa1458973572cceabb05e6a722dd4e195aa5f572cfbdfa9ea5e132de96e589c56637933bdb94fde529d2edef66dbfe66ab9ee580cf68936bac5f3e56aefa58a849cb693f7f7862476e73fe7f9bb5893f3d28f550f2c5665ba58f58b686b2a556aba7fd313d3ba3c95318154b556b29397fb1425402f2c7e15a9e496ea4b3d1543bf1753223c3a578a5aa0a6caedde580cd6441b95aa3ac2665a62d74cbec9c6e2b7365a69505d2b6f8966a4916e7cb40f16ab75d8ec5cd454d3f7d55249b94ca6ee761887f53a0ebdaaedd1d0b579fb629a6ed0693a0c4db1aa3d8444cd578bb65f30374ad1cfe887c5655f5d5c86a271319b69316febf4c7e2b15f2a5ef7d838c744cbc6380660b1dc1f6b99472b01fd7651d5a755bd320b98bf072e6e9755a5043dbc28711e88c5f9005d9ce7d772ff0c7249d51ed43751a8e460540e4cc5d74a8518c5d6839861765033363e088bd941a98c5846ad05cdc7acd28f692e16d38353193bc91736ebdb67059889f26d3c8f0d8954e6065f4589c1602c0687a4be1e808719c50e61fcb0fb35954243b0f81d1aad6d16bdbc9d2a4aaea58cfbe616cb5640ed95c143310e87e9380c66fa9184e43391aad5c37b85813775cda5651e1687c3a38c86a41687d5e0f9548de7457aedce61580c8ec0d669a43ad63a875537d64ad9761b8ec5eb486c555afa29532cec4ba5cf0c56b31ea923b0981ca58bc910e37c4233eab63d168b8d359753f898e15ce9ebc2ed8cbf5d73311889c5e0685d0c86a71d03f86cb26817f211373e5a5893ab054661b139263def73f3b9bea0fca8a99c331a8be3b198af4bf238ce9123555563982fe672cb92e81d7c3b53785cf8def9c9576ca657af8ec1627d5c3a3e167efb698ef7f222e6cf5416b1da5e71bc0316c3e35369e3ea09a7373f98ae658ec562700236ea986c2676aa2c1fd67bb655d59705e6ab682df7a8e9320e8bd58998b744f416a61f63aeb36e042831a56aaafddac0fb2f16e3db994c14effb5e47ab843cdeae1e98ed3d8ae55496f8032a7bff0312460a82fb5ce7151e7f5e761754f6f3f9762ec9256cf240d68f33ff4fef184f047570506c310b6f14932fe497ca345625ce0061e5feea523eea3ea072d6446d76535d2c74231e03c098078c5df571da13d9c52e166b2063a46479a4fb70d2ffb5989ec453b5b74cd5f840be0c2ad6374d6baa5e8b93ebf81ba6eb6ca86d15b2b084d3e9ee0b506dde18dfc98767bd1c592c2d13c9a1166e97541f1e2c9574e1f51702542fb55a71734191a013d75e18993f955ec67cc7acba5e766e502f9ec3d3e1144a58621b23916e7cb4a580f9ebf2fd6dab5c00f5d9f000d4a994a05a09abe2c63b4b048e6f08e002b677ea06d84ea3c4d60c600bfa143bca9a8bf7275cc075cbe000d7e994b85a80b24b65c6fccace15c735d70bc905640b770a909d41898cef4f3b41f451577b36e6afc354fd1d2c8b963b81704b2c40782625c2e6de0f35fc32450c12700185a24ae03637932d7702d80d0d03606751026b0db269f97f005cf3ad02706753826ba901c705728721be88628db8eb46a5b09005d0cea1b6b6c4ec39c9fbdbdf42b4b87295966f752e80cb6e1280db4cddb80dd0b8d7b87d616400ea5c4a507c83577fdc37b5fad30578a782daf33c4a785b81326d2683ee162e60baa25380e97c4a4c8d00a6c07fca0544addb06882ea044545f202a77aa30afbb7500e7424a387c53f09995dd6fe543e8cff9cc16b5e31ac677f1e0f5e12c3927e502c0b19d03801751026cc812c7c5b85ba50b80e6b70c005d9cf9ceb73f525f2a2ccc95a6e9235302649750230b166694c9b156dfc5c5ad42bea07b80ec524a641d0132dee6f2fdddfc4dfffdf98332edb0b51b967745af00e365d4cd095e1de4b3600b713710350405fee59488c4c62d5eadb8da0bdc07e4029ed6c3023c5764aa3e545b80b90028bb7500e84a4a401d40493591ad17b15e53d907e47b06148bd26ab6c880c5223b967a01ba0091ff5110afa284c88fdf81f0f8cc11dfa09497566be4108edb1dedd6602ee96a4a945bcb225fd9db06d9faf7fded5c40d50314fdd7d0cf56263665dd6d54fc3531c0766da6465a79db0cae975163622e75ce7f6b1080bb8e7a00118283db2a8e13438adc6d29d840d20578fb834991eba987a955660dd61bfa2b0d5d00351674d06fa004d59829678209b24ce39d26371a1cc373024837524fe64e1765d4f2d01e1713bcd7cb44482e005b180f80dd449dfdb83db9ea2b560c2cebe6ccce4326ae272d76ac762c05ee02b7d0cf7a07e596cbadfd27ea05d06ea5b6b689c257678d083c583b179c4c532e5612bae110b50580bb8ddaff151e08e8a26f05776457b06ea7f7e4f1fd135709316e77c647012bbb837a3a6eb6072d9fa57ea8970b00378a2e53837a21e1e1f5f8e9fbfb47a38eaf4c68c6fc81a5d5ccf7ddf6ebdf84950adc81df3acdef842b0db2d31e64ccaeb69ccb4ed9db2c3bb2034c769a6ea7d92935cfb30d470db32378ab67472a02b3536ecb6447aac0b3d32a4fb2230dd864476ac066a7e4159b1dc915343bf238894e67dcf92fbb8a074976d2c1856cad4f40b67666241b71e0c94ee2ff948dccd2655733949b9d96b347768ab3d1d90653b0d9d5ae2eca464729b293f634b353582a91ad99d2cb4eba84273ba90f64768471e2ec14dd23b0f7c26b1882058db0d20a1622e6f0058d77fd1f5f6b98c3d71adecd21fc2c29f82dbb7ba85b763cfdfca5a5bcb64d7e60c770af7d15d2a153151d66cb3d3bfdb30b540b4ea74da384365ed35422984e3bef0730bc74af4d38073989f343e06d7b9f4d38739dc4d91658e7fd36e11cec24cea100e70336e11ce224cee900e78336e11cea24cee301ce876cc299e724ceeb01ce876dc239cc499caf009c8f504f5c2e900da044ac7eff8fbf4686ef772a7ccfb100dfa399b0c625a83d42f517b0115ef626c3d9840ae760d0ce7ccc269cc39dc4d913e07cdc269c439dc4f918c8ec4fd884738893386f04389fb409e73027716e0d32fb5336e1cc7312e7c7c03a9fb609e720277116019ccfd88473b093384f06389fb50967ae9338d7029ccf51e26ccb92772a13b7ccccf5aa2232989ba860de0eba94cfdb0493d032c960de0c60be6013cca10ec23c13c07cd12698431c84791a80f9924d300987e1c8609e0c60be6c13cc5c07619e0060be6213cc410ec23c16c07cd52698390ec2dc0860be6613cc110ec27c11c07cdd2698c31d84793780f906f55ad2643013873a085b992da850be0f50be4989b28d4459247de1c2e7bff9aafb678b11563df5a8403e0d4634dfb2052461b54306f23600f26deaed30947368aa8edbfcfd32f1ae7bb3e7fcec3c05f69d4c0cc361160ac5f1cc9e433972d4800ae7bdc04eff4789b30bb0d3280b435cb6d5c1c056dfcd442150eabdc46b773fa3fbc5013f56707d921a9fb07425abef3f06f5fd7bb5d9740a1702ee15006f8002e07d4a94cd24cabcccfb2275a0827714c8e01f6402def0ff10bca301bc0f33d1994cad2627f5ec20cbc64d4136fec826982e368a5a02985b6c824938694106f31f90cd3fb60926e1400719cc7f01cc4f6c824938694106f32f00f3539b60124ea791c1fc1bc0fccc269884fd1b32987f00989fdb04d3c51ece9f00e61736c1249cb42083d91a348dbeb40926e1741a19cc3600e6579430b76389e343a54ced1c0277465810e9707bd291a35654c8ef0723475fd36fadb9546cc6e16f0eb244c0736f14b309283fbfa9cdc1b6c4495f179d117a03ebfb96126527966c4078c27f6cd6f24380f53b4aacbdab94a38542d824390857e2959a2522d3af15d3176b44a98a575b2eb64db702b0bfcf4471905a0bc045947053c61f32b112987bb7677c00f95f2a7c9783e6d38f94f8b6d5544c7399bfa9d306b1c198bf56835329136bd3cbc5c65f65dee7a496b9990aeddf00ed4f99aca896794acc132d53be5b5db2fadf45cfce6f40d9f93375d9394e6c74b84a6eef56e689e3b3ec7cce9d6f04a736bdf3b71274af555a17949dbf50a2547b5e0ef2fe5f21032f144d297e3703e52759f5732640f86b26100efbcf217c0920fc8d1221dc57505dc7091578a7d26d97ae1700c4df6dda5f8674dd2f19ce9f41ddfd874d3849970392e1ec08eaec3f6dc249ba8c9a0ce75880f32f9b7092fa7dd0b9c3029c7fdb849374bf19329c17029cffd8849374470f329cb7019cffda849374bf19329c6f029cbc0394d1010f383734d8fb9bbb6817565ef9bee1cb5989ace7c9d0ae8f13a15d02d0c628d15637aa99b8188b709083cc39fb3ed0fe8c53a28cb6487010a52b22d988d181c02eebd804d3c59d3dd60398756d82e9e2ce1e6b00cc7a36c17471678f3200b3be4d305ddcd9630580d9c026982eeeecb11cc06c68134c17e77f9602988d6c82e9a2334d0980d9d826982eeeec713880b9954d305ddcd9e31000b349263a9318ccc4ce2461f543d6997c15a0dc9a1265b0597e4ee65d64c8e6271f6601bea694f8d47e1eea543cae6af8cc3397e728fb83418d66d4599a7fe2efd4c13d3582631e75c7d8b987b223b0c9e6b5593a42710b9c5c40f023b0ca1694287d6ff60a161c68c80f915def6085d203585fcb4c581fdc98679a97a127cb3338177b1fadcf449948667d9b00ca56f46d46b88a62015b2ed0f1452a45debf7d5193bc6b8927a2ca91ec0eec86b03580d93a13733b15e2a4e0f2ca991d75b8a6baea3cd90753b621c9d0ae01a5641b5bd192eefb4a86760a40bb8dad68497b3e6468af0705425b4ab4eac06dac99a462ba807230f8ab1811c62f4107b25d260636523f2e8c0c26d9a10d33814db6b70926e1281119cc690066079b6012ce4692c19c046076b40926e16c2419cc510066279b60127a7090c1dc09c0ec6c134c174f0d9a0a606e6b134cc2d9483298790066179b6012ce4692c1ec076066d90493b0d14e06732480d9d52698841d493298c300cc6e9430b35872afe1ea779421acdfc9769469093a98dd3361ab98e770d8c79db014259b1bda1ed86a0f9b6012d6ef6430f301cc9e9430d5dc399fea580b16ef67646d2f19beed00be5e94f8da037c5577940926835d5f2cfd2100da9b12684b00f4bfb5defc0c8030bb36cbc7f0dcb98b7b665f03262ffad804d3c53db3af0530b7b309a68b7b665f0960f6b509a68b7b665f0d60f6b309a68b7b665f0860f6b709a68b7b665f0c600eb009a68b9be99d0e600eb409a68b7b669f0f60e6d804d3c53db3af033007d904d34597d7eb01ccdc4c7422f3fe739dc8e92c40389812a13ab56a901817e2be99eb32058fcc2d6b2b607f43ec1e4d272c2bc946d31f02a3e94329f17641f1a6e6ad4958ab93d9eead006e9ecd7009db9f64706f017087d90c97b0a74406f74e0077b8cd705df434be03c01d410917df562a15b884a3a264687300daed333105c7579f677cf92ad914dc04d0d81a49896f104bdc867cb1b03abecaadaa25f2c507fadddff3bd3756781aad12bf7864c779ef97898619e97c7c3695f7fc1660bfa3281300ee6f1cac96830bbec8d7c9911502a7b300e268faf2355f7cc2e3efaf1a9e286c7015abc55573645dd91600ed184ab4d10e2371719a640640b90325ca8e20ab4f6555b709f055e7997ea5b8ebf2b601bf00a86329a1864f26aa60fe52edff4b95553750598da3840d1d76546535450cc77041beb34e09e3e76c2c77da7a7704d63b3e13add75c7104d97f65f395b341eb359f129fdafd38f5a5872e3a850f043827d88473b89338b7053827da8473a893381f0465e5249b70921e274e86f3728073b24d38873989f35780738a4d38f39cc4f916c039d5269ca41bf692e19c0f70ee6813cec14ee23c0ce0dcc9269ca4734f643857019cd3a8bb95bc373ecbfb9b0be1c7359681a191424185bf315ba8b6c6bb4fd8ad9c4f057422003a9d12a8f23f199cf94e25d9c9ac0701783332314c07b3b67e242971cb5ec2693ab29384ef032347336d844ab8bc860cea2500ea2c1ba1128ed29341bd1840ddd946a884cb6dc8a05e00a0ceb6112a61b3890c2a0350e7d80895d055870ceaaf60d0aec046a8846e9164507f0050e7da089570328e0cead700ea3c4aa866671512da2bd95985bb839275174ab4835955a787447f3d7f127985f877306fbf58f897706567303ef3b94e04b1dcb3f0b5cc9f6a2e103d3035774a68dfe3a9ec7b200b1261d74c0cb2a4e679c28faf70715de94da0b8d8cd269ca49b0793e17c12e0dc9d12670756d5152299039abbbbddff0432fc1e9448a31d5be1e2c61b9f03eb9c4f8932f08acecbfc1020999fd36fc012f7b4a9accc717245e983c01af7ca444b35bd93175c5cfe703440bbc056b4b94ea22d026817da8a96f4cc6d32b44f81f2b590126db4f5faa4676e9395ae2701988b6c82e9e2265be703984536c1747193ade301cc629b60bab87ae40400b3c426982ef6def7033017db04d3c54db6f6073097d804d3c54db60a01cca536c1747193ad4500e6329b60bab8c9d60500e6de36c1747148e44200733925ccd4cf9e236c617e453550f71598a82ba5c4a8162446711377f1c8b4f3c0a0c70adb80ba78a0df0500e84adb80ba7874da9900e82adb80ba78b0df3900e86adb80ba7884da6600741fdb80ba78c0dfb90068996d405d3c4aed5800b4dc36a02e1ef47722005a611b50178f543b19005d631b5017d7d89d0180aea5049ac54c77d5252c51c976d57d0be05d4789776b899707bc98f91b11f9b29751ee2f568f0a1cffa3c0ada704579dd357c6d6d86da242390f0c866ca04469b6852be9801d99cbc28d00eebe36c3251c7522837b1680bb9fcd705ddc937c1c80bbbfcd705ddc937c24807b80cd705ddc93bc00c03dd066b82eee499e0fe01e64335cc2315532b88702b807db0c977006800cee3200f7109be1bae89a7b3a807ba8cd70096706c8e01e07e01e4609d7ec1c0817abb34fc100cce1991830e4ebf1a68b354ecb438b7027789f9589105dde9ab83f0b801e61afadba3896300c14034752a26dca920d1696d3a16b4c852e0eacf2284a74ca090d1b2e84e2f846472efae77f00ec70a34d305d74297f10c03cda26982eba94bf06601e63134c175dcaaf04308fb509a68b2ee5f70098c76562be0af3824e9c9676d10ba537a8cb8fa744d995251eddb2d223b1c27b8d4f3acff41a46052c38ca05069421c02da80097025b3d8112b0da05829f2db256ec48b28665ec1467b21e5031b0cf1333dd034af5482152cbfc9d0aed0bc0323751a26da7410b058ef73e5de5dd2df13ee0bb950da7ac94c82cf56b80f3249b7092ce9892e17c0f8c259d6c134ed243b1c970b602d6798a4d38497d4dc9700e04384fb509e71027714e05384fb3092769ff880ce75a80f3749b70e63989f35a80f30c9b700e7312e77300e7999438bbb3aabb364e64eb19f72f5dc3d4292333bdcf8b19ef86ce1660f981961c7d46668ec8ba9dbd5800f9ac4cd86ceaa732bab8e03107b446cfb609e770277166019ce7d88493740e890ce74320b36fb609e71027715e01709e6b13ce614ee26420b39f6713ce3c2771be03acf37c9b70923a3292e1dc13e0bcc0269c6eee0c7104c079a14d38739dc4b91ae0bc881267752bf312333aa1532d598fe833d0edbc981225744ee4875b567824567bcaacf49499c7fc632e8bc5212d254e3b27ee036cf3924c64756c163ed1a581af6172d1a9e146d04cbad4269c6e6e3bf818c079596d969c89385d7404fb08a0bc9c12a5f25dca912e0cfeb1c08bc488a77a29430e0d6430d78052f30a4a98cd00cc0c9f0942066f16807725253cb3432c5c5cd0b53fc8e457d98a96b4114fb78416a0bdda56b46e2e43bc0d1408d764a26a4aadd194e7e4211633809d5e6b134c170fb19803605e67134c1717c98c0330afb709a68b87584c06306fb009a68b2b8e7201cc1b6d82e9624773148079934d305d5c71b41d8079b34d305d1c4dea0b60de62134c170fb1d80dc0bcd526982e1e62311fc0bc8d126643111b7f91963a63debd0e636716e0ba3d13b3405166cf5d5c407809b0bf3b6c03eae236d65700a077da06d4c56dacaf0240efb20da88bdb58df0980de9d89298c61999fc220ab8036820ae81e4a78c1a9f00bbc1bab848f7b69a6a6cfc8f03506b6772f25be685b5513968b645b55e7018798fb32918d47fc87b2f131201bdf9f896c9ceba9f7df99c83d0b64e30728f1f56489db4ef85d412e6cbdc8b8fa25fe93e5e789999cb0793e920af43a90c91fb4a7bc24ec699395970b01ca87e8872d968a333af8a73c9b7351c5deaf35de874552a1c5deaf52c657aab9e73cb815283f1fa68469b6b3a18b7bcd7f02cad64728d1b61168e7798f4ad83aef5fcb05687eb64c91f76f5fcc24f1b494111e8b4206b235b0d147335176a6364ee9e234d96880f2b14c67777d1d5f201a4f2b4539cac5ada045bb990aedb9a05a7a9c126d23214055473b79b7365002eb4105ac1db0c527320d8cb00d49066c1b00ecc94c0323ac81c980b505c09ea204167d2b28c28637595b31064ab8a76dc299eb24cefe00e73336e1243d5c9c0ce76480f3599b700e7112e72a80f3399b700e7512e7d500e7f336e124f5b620c3f904c0f9824d38873989f35d80f345fa21b55417e9e53ae956351cc07cc926982eba558d01305fb609a68b0b4bba0298afd804d3c585258300cc576d82e9e2c2922e00e66b36c1747161491680f9ba4d305d1c31ef0c60be61134c1717966c0b60be69134c171796b40030dfb209a68b0b4b3a01986f53c2dc9a05eefbb3c5953b0ff0f356e67aafbb3739cb27fa14b8776cea89932ea427eb897f099c06fe67134ed2762519ce76205bbf6b134ed2cd49c8706e0f70be67134ed20d6ec970ce0038dfb70927e9f6cb6438cf00383fb00927e9660f64386f00383fb40927e9f6cb64385f07383fa2c4897b5ace6113d84e9ed26ad9a8ba1678c296b312599292a15d1f27427b3040bb85126d0b56f5248bc0ef927c0b51b2467c03d0eafc9812604b0970285b206ef0c00b054ad7f713bc8505083fa144589d936aa03aef03118e1291ed10fc10b0c64f2951aa8369aa7752cd67e1b326c77942b9ad6e60a4dee9d93122c82f8132f3331720130ed191417e0440fedc05c88423f464903f0190bfc844c98bb553134b5ec2861459c9fb1e40f92525cace2c713960893c0e6c26538780fdb74e9f6e0fc07e4509362b04b654ac5eab106282f56bc9c6ef5d9c0a6900f07e6d4f1140e8704366a93f0294dfd4663b36636b7ec916aa0e01edd86f2951761528a77a2fcd16c04abc97d6cacf838c5f6b0b03c98654f83a1505f8bb4c8c5061b69a5882f2932f5c74c2b905d8ebf736e1246d4c91e17c06e0fc811267b0c3ccd050e5e4f2ce1e9f81ccfd636dd6e9ee378f5e0496f81325cad6d5a05431251d32f98aaaa3f914681afd9c89463c36823f5e34ea4be4bd59a291bf41f49ac6791a2c13e3ab64785b5159e9d600ef2f99982049ef5011c2463d59597a1228007eb5152de9020532b4cb01dadf6c454bda152543fb256801fc9e896a0b6b8f06d51661ed4f566ddd0a2cf40f4a8cdcb571969cab57c7854d1596c92b2bf7ba97cd81fdfd9909fbcba9b4c1623172bf4cfc3b4333a364185f0418ffa2c4c80570601344c025cc3fb68ebfbaaf7074f07142a75b32980ba8604e0630ffa684d94804bd48bce0f2a629ed01b07f320dccc54d533a0060ffd666bf3b7100981025d900702ee8d1b07a1940999364c6c76df79a8f8055c628512a0fa521ff390fa57d01c238254235b9cbad71a26850af114a4cf33e291235f24cb64eb81f9479cf786f667526bce7c81a385300d83a9460833d886be13059b2719f89a07f523713a5646ad30e2eae49df0358623d4a946a2bf12199b743b26c7c3880573f13550c7712284fd849d8f5aede09202b37c84449c8b7b25f2baa943599aba1c906bc1a027c0d29f1a909d8544f4819e1e4093efd00ce4636e11cee24ce6d00cec636e11cea24ce3b4175b3954d38dd3caeeb6280b3894d38873989f33b80736b9b70929e5b4a86f37980b3a94d38073989735780b3994d38073b89f31080b3b94d3849f79221c3b902e06c91895ed0e0dae805917522e7017c2d33618d982d56dd5186704c880ce71fa0d9deca269ca4db3e92e1ec09e6745adb8473b09338c7039c6d6cc239c4499c4500e73636e11cea24ce4b01ceb636e1cc7312e75d00673b9b700e7312e75b00677b4a9cd94cad2fcb67feb19d65021f07582614f7bdd594b395ef70f05f5b6dc6a76d14ee0e94b81b0a01255e93def761e392c970912d24ad0f7075a4c465b6df11e1062964fb1d55808cdfa93667cc1347925c5c987f0ce81d75a644d95b8332d1819f97ad2bd80af16fee36b346889c288a011ead02412d03ebd076a1823d1e1409db6662606490b0ccffca8ac86701be2e99c8f658f3296303c864d9fe7150826665c6656b44e62d916ccb9dbb41a9d93513ae32dcdf6d32e3ee81dc897089f0c72c73da69f01c9099bbd5666686e2163879e0d2b7c01abb53a2e4076dcf12b571b1fc680ec39699943b582a360436d923134df6f456e0ba7818fc3ec0467bda8a9674ba8d0ced7880b697ad68499b496468af0405426f5bd192fa2b91a1bd08586d3625da562c3870440d80e40b882b45332ae860ba07b10bb0cf3e9410dbb2284b07063b793ae0fb00e67636c1747125c63700665f9b60bab893d6bb00663f9b60ba783ae07b00667f9b60ba783ae0db00e6009b60ba783ae0ff00cc8136c17471cfb7d701cc1c9b60ba783ae01b00e6209b603a395c0760e6da04d3c5f3d17f04300753c24c7d6b47c27afc2baa098da7c17cd0104a8ced59f4f51984999c6e850618de186a1b50c28c4e06744f0034cf36a0849d4a32a0b301d061b60125ec5892019d0b800eb70d28e1801c19d07900e808db80120eca9101dd0500ddde36a0849d4c32a0d300d091b6017571e9e0740074946d40091bf664406701a0a36d034a38484706746700740c25d02c66ba093e619d4fb6195a33d011ddc19ec191e14ece681e076c75ac4d305d9cd1dc04608eb309a68b339a870198e36d82e9e28ce6460033df26982ece68ee07604eb009a68b339a070198136d82e9e28ce65a0073924d305d9cd15c0f604eb609a68b339aa70098536c82e9e28ce66900e654ea8531fc137f93fc99de673319f73fe65d48d89ddcd113c18592a1245b63c455542877a45e1853fd82c13cb15d3461d5538f0ae4f3a057be13f52c3bcfda3afbe3bb2ac0fbee0d6eec00b2f6b4dad91220b505056468c93ce1bf0768a753a2edaa41ebafc1e4f0567ad6cad7adaf4e3af6e9e254471d5096ceb0e7940217073fc601943333b3f83a2f64b319587c4de6ab7419c8eab36cdaad7384938e35c300ce9d6dc249da7c27c3990d70ceb609e75027713e0dcaca3936e11ce224cedb01ce029b700e7312670b90d9e7da8433cf499c5f01eb9c67134e375d6697039cbbd8849374a90119cecd00e7ae36e1243d389e0ce7068073374a9cfc873a96dbbd818d6600d3ee3659dd0827fde106801a7b0f9b7092ce9693e1ec0070ceb709e7502771de0f32fb9e36e11ce224cecb00cebd6cc239cc499c3f009c0b6cc299e724ced700ce8536e174d3d37d3780b3d0269ca43b7b90e13c14e05c6413ce5c2771ae04388b28717692384bbd973848ce610de30b058a4358c3874010ce4a927978bc09da9fc594583bb36023de09de0dae6af8d0075ffd12310d5c28e0bbbb3d6f1c802dc984eb8cb2d7655ad719f27973b23d651700d799c5f69c5540e8e74e86f21160934b2851f60ad9e42256d5492675771a42ab251b757a1258edd24c6c703edcfb7f850cbc50eccb99a1631cc9bc3c5e0535feb24c34a0527398e10bad5d5c4a7033c8fc7bdb849374192b19cea700cee5997045546569b9281d796b7492ccda25ffb11abf35283b4bed39d9c0c5956d9f012b5d9109af4e65a515ac4466fdff763dbf1db0d595b66e704eba9d3419dac381edaeb2156dae93681700b4ab6d454bbae71219da075880769f4cf8260f63ffa5b3dbeb02cb2cb36bbb955c27f7513c14002db70da88b6e374701a015b60175711fc57200748d6d405ddc47711d00bad636a02eeea3b82f00bace36a02eeea3782000bade36a02e2e2e2c044037d806d4c57d141703a0fbda06d4c5f9fb6500e87eb60175711fc55500e8fe94409b317516f67fe724ec9d5900ef00bb37a124b44db27d1a1a8351d1036b73047fa6f7c9dedebf8a181f8a26ec1d6da242391aa03c28532765977b148abcffe468a1e3634a078092f2e04ccc7ce688899042214837b2e9f6bcfc1650761e62ef262c84e52659b5f415b0d44329d1f66089d375a5deab4b84d708473797f9be791bd84421908b2d6193e5c789652a616f692415e63f01e6c33231463f48b8e764b8f144569ec600bec3e9f1a9a9649dc768b183f8ba82f2f3087b36027271abbf0500e59199d83731354f91214e6e42793e68691e65134c172df3320073a34d305ddc86ff1c00f3689b60bab80dff7900e63136c1747127ba4d00e6b136c174d159f16c00f3389b60bab80dff9100e6f136c174d1d9fb4400f3049b60bab80dfffe00e68936c174711bfe2300cc4d9998c85023467cb88d6f275de20928ae840883f82f2c8f7d0e0c759c9489a163cc56c3304977bb21c3f92db0d6936dc249ba630319cef781759e62134e521705329c6d80759e6a134ed20d30c8700e06384fb3092769839e0ce73480f3749b7092ee144686f33080f30c9b7092eec54486f33a80f34c9b7092ee144686f36580f3acda9963f7fd93067b7f17327ec691ba1678c2968b663fe901b9ebe344684f0568cfb6695fa6114eba720f056dd0736cc2497a482e19ce5e00e7669b700e7512e7132cc079ae4d3849e78ec870de0c709e6713ce614ee26c0632fbf936e1cc7312e727c03a2fb009e720277196009c17da8473b093384f01382fb209a79b4b08d7019c17d7e61283c48c4ed82322db6fe953d023ba2433eeb0b5b09688acaffe28b0c44b33b1108b07bc98f9bb2cf9b257ca57dc9bbf8c01789765625b5fbc54847eede33c3165622916e9bc655daa418e7b40cbf2729b36fbcb71d201f10e80f38ada3f075b5536ee55355f009057da02d2c53d125f0020afb20524a16b1719c86d40e3e76a5b40124e5990816c0e405e630b481777e9ee03405e6b0b4842e76c3290d900e475b68024ec6b93815c04405e6f0b48177bdabb009037d8029270791519c8cb01c81b6d0149b8e88f0ce4be00e44df4633ffe6085f2179ee1fd5aef89992384ae7670eca7270bf0dd6ccf56e52e2e587907f4686ec9c4b280d4862c863a3960d105c0bcd526982eae98ec0a60de66134c17574c7602306fb709a68b2b263b039877d804d3c50aa83d8079a74d305d5c31d911c0bccb26982eae986c0b60de6d134c17574cb60330efb109a68b7bc6740330efb509a68b7bc6f40030efa384d958c0e4e7b114307f6f2dff53f7fadf592c40763fb5efc54471ee1a5771aab4c165dec77c5504ff8c0c1ed96e834d01bc07ecd9a595b0b943b64beb08308cf660268e510e0e54d26fd658c0cac402a872b658085b413bcfbd990aecc1c0461fa204db9d8577c4f4f76f0d0e59e402b9975af2aac7c5f6652360bd0f67f26c751f28df769497a913b463eb796c082dd67a54581f05581fb167a347171bed234031f068a6d743a65ec212a2252b61bb032b7d8c7a83f19902e906365d96ae7cbfe17c8131285ddd6b85b601d6f978261ca8f9b9541977a026cbdc97827ecf1399ac7e96794acc63c1d189789b94b0fa216b933e0b32f69399f04baf059b24cbd247822cfd943d9b940d727294a83eb0c4a76d82e9e228515300f3199b60ba384f5e07c07cd626982ece93d705309fb309a68bf3e4ff8246d1f336c174719e3c0e2cf3059b60ba384ffe3bb0cc176d82e9e23cf93f00e64b36c174711cf32700f3659b60ba38e4f61b80f94a2660e688bffdeb5456f5ac1fb5f4d9c511a24600e6ab94309b327864523e531be1f1a392e632175dacf9c48c42f79a4d3b0b923685c8707e072cf1759b70e63a89b3036859be6113cec14ee21c0570be69134ed21355c870ce0438dfb20927a9bb3519cecd00e7db36e1cc7312e74d00e73b36e11ce624ce3700ceffd9bb6730215ab23d838f0168dfcdc4042f3f2e762d9899ccc889d1648e86f5419bf3bdda74840954271e7c235baffb0040f97e665c0d6ac112c9cac80216e0fbc09e5d035ddc38e77fa04cfc30136795f37121df55908f0f957bd5cd2aa17499a8bb79ed5d869c11edf2c8511d90e13fa2c4dcdafb31cbfbb186f1ad5fb9a895deeb4b05de950265a1e0c27fb987b11ec8f85b28317641ac759cf0245a2696108c637c0f04ee4c58e8092875de461703b81fdb53aabab81fc7f7a054fd24337bb10ecbbcdbd6ef54f87e0796f8a95dfb5eba386f7e3ba87c3ecb44973258d6e27728e77aca70c0ea3ade7b999f3cb95654446b3c717ca493b0f944d627da00d07e6e2bda5c27d1ce0468bfb0152d69a39f0ced4da07cfd92ba359aaca657312575cdfe2a4684f15e50cb7f9589537bb1a1baf1621d4689bc378b958a3daf794f6a9ca7c13246baf1632b2a2b6d02f07e6d6b013098b27d4a56001c0fcad66f6c459beb24daa500edb7b6a225ed5591a1fd1c545bdf51a2ed2ad04e11a5ea6cc6570f95c83e7fb110a5d60f2f1709c04bdf22efdfbef849deb5c4135bece008406300f8fb4cb40bb07e57beb0d832da764173aa79a6c74111f0436d6e6b9aa1f32fc6d4a1f272022d801f33334d929bf96114b206d44ec00e7faa9da9e4542a23c215476455510f60993f67caad560d44ab51fd609cdfed81e73ea0daf92513dbaea895c38595e5e31ca6bc93b18168178f17f90858e9af99000badb4fae693bb16bb0bb0d8dfa8775b5820ba990bc40d1e78a1409ca1397cb241e91b00c2dfedd956c5c5e5afbb03947f50a2ec1601e51c2f4c2ea482cdf4fea5a69ccb694bd296544dfa274053ea4f4ac4ed4355d46a315fbf34a9cdbab8c8eb225035fd65d339aa232871929da3da07d8e7df36e11cee24ce5600e73f36e124ddf9980ce71da082fad7269c439cc4792ec0c9ea5b8473989338bf06386336e1cc7312e7330067dc269ca4abe1c970ce0138ebd88473b093380f0038ebda8433d7499ca500673d4a9c6a2024717b019e3dfcd12677c792ca01c2fa9408cd167c115a27d982af7ea093d980126d348f661787921f03281bd626cac4a10f173758fb06742e1b65aaccf487ecb8a0f5b2bcccc0e0f1bf54085f066566e34cd4e2a93b88bbb8b3e7fdc022b7a2c4a9fc3eb84596549ec3a11ebb3ea5f126b0ca2699a8c9ab3b3e62b2fc2063bb208fa442db17a0dd3ab368a3f88212a2257365280599bfa9ad68497b476468bf0756dbcc56b4a4ed5132b49700b4cd6d454b3abc4c86f6545020b4c844fb34f73fe7dc301c58674b4a84c1facf5ad8df81cc713117e06b95197c43429d4e97adef5380af35253ee59c985aef28d749e79a7b00cc3636c17471e8e35e00731b9b60bab8b7fcb500665b9b60bab846fe6e00b39d4d305ddc5bfe6a00b3bd4d305ddc5bfe1a00b3834d309d743b04303bda04d3c5bde5af02303bd904d3c531f8fb00ccce36c174f174adc701cc6d29612a77ed283e4884d649e6e731098c0975b10d28a18592019d0a8066d90694b0374406743400dad536a0843d2232a06300d06eb601251c4922033a1600ed6e1b50c2d12432a0f900680fdb80bae8cd391c00ed691b50c21e1219d01100682fdb80128e2c9101dd1e00ed6d1b50c2d12532a02301d06c4aa059cc740f3bc202806c26f30380b74f6dbacd26ba8011369f3651a19c0d3c90b7cbc4a4705e6dcca9930d89fccc027c7d33e1d5c15d12ca3d0a45ac48aae0fab1134782ccdcaf76566aa4e27544d8d924f339fa05a0ed9f090fe4419523a0c5cc3f6a82ffdb750b7d0564f201f65aa88b9b4f0e01d5cf409b160e8e707240390f64f81c9b700e7712676f8073904d38873a89f349508ee6da84738893386f053807db84739893389b83cc3ec4269c794ee2fc0258e7509b7092eed24d86736f8033cf269ca45bf593e13c1be01c66134e52371b329ceb01cee1f40372d3bd178a598940594bbbc593f5885a01942328513663c13aa1ffca1a8d0301bced33dd53d7af16cef784acf0425d257ef1b749c7dcc94e8ffb09f4d44752a255dba1f2d5ec13183f6173359b25d0154b217c771a2e501d631a9cbde98f86baba67cd5060bda3325129615552f8cc77d2ed26c9707e0e2c76b44d3849d70693e17c17f48fc6d88493d4679eeed05d609d3bd8849374bf05329c0300ceb136e1245dad4e86730ac039ce269ca45bf592e15c0d708eb70927e966a86438af0138f36dc249ba552f19ce6700ce09360d868c70d2c57b1068284db409e770277176073827d98473a893381f6101cec936e11ce224ceeb00ce2936e11ce624ce2620b34fb509679e93383f00d6b9a34d380739897321c0b9934d38073b89f33880739a4d3849375b21c35906704ea7c4d987854fd32a1313726b841fbc8a67b0ff2c0c0c0695a18374fb501da4fb0ee837cda004ae4e242e62facd0512fb4c6420c9b6413f02d4fa336d0149380f4f06f2100072962d2009673bc9400e0165e9ceb68074f184836c0072b62d2009971492813c0b809c630b48c2c5ae64207700200b6c0149d8de2403b907a86ce6da0292709315329097028b9c670b48c2ad2bc84096008bdcc5169084ab82c940160390bb666281756aed481733f7c300e56e94287bb1c45ef9225675896094f30bc85093b9ce7e01fae3bb53a2ce09a15e8382c44f91a9ea179aa1e190ec1895a503fc7b6462afc5d4dd17dd9b937f1b141bf36d824938be4406f37f00e69e36c174d15be45900732f9b6012565964309f073017d80493b0674f06f3250073a14d3009c79bc860be0c6016da0493b01340b7830880b9c8269884e34e64305f05308b6c8249d8d32783f91a80596c134cc2f1273298af03982594303bb3608d1c3fd98d0f9b4c115bfd4df2fe5e263016337ed03817ccd773ba7d9afb3216805d4c09b693003bcd7ba1482c2f843b26d6da5a63b27d141b00ac4b28b1f6648903261542810a962fb7a7fcaf8f4c1583a191a5ae8076f194cd5d01e865ae8026ec1e90813e0080dedb15d0849d5a32d0fb00d0cb5d01ede266992701d0a5ae8026ec0c93813e0a805e9109b75f6c72118a233f5e806ccf931b40a763a54d3849b73920c3f928c0b92a131b62f31d9f32be030fd924e05d00dfeadadc9a3dd11a5d3c89760b40b94f263633aaf0aa9765ac3c62dbd5c5bafe6080b6cc56b4a4ab50c8d0ee0ed096db8a9674f91919dabb5880b6c29ec32c87397902fd4a60a76b6c82e9e209f4ab01ccb536c174b1dedf1bc05c67134c174fa05f0160aeb709a68b27d02f023037d804d3c513e8970098fbda04d3c55efb5e00e67e36c174f104fa8500e6fe36c174f104fa3200f3009b60ba78027d058079a0dde72a12d6ef64fe000dc1c8fc4194785bb1c07f65ad18ede4bb392f127e2b193a2d8cec44c50a16403cd89ec329091bef642827007b3c2413531bd09f0a730222f7a222cbde8380651e9a99a98d41999fda20ab7c760495cf61f6646cc2461159c6de0364ecc36be74445bf1e1fecfdcd8f0f28acbc4e1383c9158c789bf6b57122b4a700b44764e2445a5866c28359c8cb49b271f67a20a31f69ef799f2efae77d0cd01e95090fe974323ee1a03159b65f0cb2fd465bc112b641c9c0ae04608fb6152ce1041c19d87200f6185bc1124ec69181dd00c01e6b2b58179b567d01d8e36c054b38e04c06760e007bbcad600907f4c8c0ee06c09e602b58c2c93b32b08500ec89b682251c1920037b1000bbc956b084532764608f06604faacd2dbd12e7a15c9cb91fc302942767c246d3717124b451b2d181f300d8536c054b58aa92813d15803dd556b02e2e839c0dc09e662b5817973d4e00604fb715ac8b4bd1c702b067d80ad6c5a1ed0100ec99b682251ccf22037b22007b96ad60094760c9c01e0bc09e6d2b581717ea2c0560cfb115ac8b4bc79700b09b29c13615602b985a99efefd5cbddd3f83dc2bd7ec8b650ea06d09d9be9496dfd16c8058cbb02f13182c542dc0ada4ec0662ab45781a195f332e1573554ba4d967a2432e6304996a94f039679be3d23532e3a9bef05505e60d3c1d8839cdc84fb2fe0ad72a14d38739dc4d90b949317d98473b0933827029c17db8473889338f706382fb109e75027715e01705e6a13ce3c27713e00705e66134ed2557974c76b009c97d7e6b6c7e1d950275b9d00e61536c1747189e37e00e69536c174719397f900e65536c1747193973d01ccab6d82e9e2262fb300cc6b6c82e9e2262f3b0398d7da04d3c54d5e760430afb309a68bae623b0198d7db04d3c54d5e7600306fb009a68b9bbc4c12301bd40b099f544578bee8eef10e5f91d0df1f3b1fc026b312318bc3411479bf957bec420fc71ede7fd152604fef3fddfd58ac99a7d144b69ead1677fde9372e7b85f7f4ff7577052b0d03417456142aeaa12078f00716d4d67af05e3c552995623e20d088051b213685f857ea0ffae6ed6c2b6dda5c3c7949b29399d99937338176925db5ec5dae2fc0f2a909d1b684f0fcafbf0fcce7e0194bc6d92bc8a9cd1319e118774a29098977a7907804ad145dd84367c861c90beebeb17bf5c1d78083ffdeb58853260b434001f466eb42c2869e03eb324ce1734a4b0af0ec739ef023dabb935fa3b80286ca25b4c2f32bdb1153b092a1a48668c1c5c273a21a7677f1ee9016c5f103b82a54793dbdb7857e63f43eb1ddd4b34eef19d22b3d6a6bfdca09f7a04e89dda6c448b483ad5cf5122d564468c6c6d7b10376913ae6b984f41ce704729eab8cac4bddb10f9ef38be555a4b4109c6b5bee6bdc87cc9914b912e49e96d1e95e82cddde2107aed9d6597bd638de2998d22bd59a766fe6e6d5f9adeaefe79f7fa6735dbe45178cca8fcb3e8263819b50e1a3d6df66f7bfd1fef884af74a63f19ffdffd6b85bd899a667ee085709221f9467289e422634ea7cb627073fed205b0e3c1b0600 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/4f44a12918b543cf95381db6b944c0fc.asset.meta b/Assets/SerializedUdonPrograms/4f44a12918b543cf95381db6b944c0fc.asset.meta new file mode 100644 index 0000000..cd41c5b --- /dev/null +++ b/Assets/SerializedUdonPrograms/4f44a12918b543cf95381db6b944c0fc.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3a1d2812f7795ef40b5434458ceef8e7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/4f48a23baf4f77243ab6afd9f1b2e6a6.asset b/Assets/SerializedUdonPrograms/4f48a23baf4f77243ab6afd9f1b2e6a6.asset new file mode 100644 index 0000000..5a90896 --- /dev/null +++ b/Assets/SerializedUdonPrograms/4f48a23baf4f77243ab6afd9f1b2e6a6.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 4f48a23baf4f77243ab6afd9f1b2e6a6 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec5d079c14b5f7cfee1e557a1304e5e827f5e8201d8ea634e14014100eee8093034eeea8a2a2a2626fa8d8f16757ec5d51b137f487bd2b2af6debbfe279964e7cd6cdeec64b35976fcfff4a373333bf3cd7bdfbcbcb49724da8d58ff443a5bff9b46269311a42b994a8ac952b2c4fa6b84755d6cfd6bdf89e793c832ebbac0fa7f91f55b67929be44bfa4f874853ebff63adbb0a52697db99cccb3aea5ecf729a4c4fa7bacf56d8975479fceb7fe2bb1de8ae4581f4d250564229940f68c344e02318d7d54c19f45a85e91ead6ff8793d5d6af254c289a4837f6d39ed6ffa658bf54b0df165b428bf76690594cadc5d66ff3ac6f9691320b732e43acbe7e33617f10fbd2995fbbf06b27ebbf1afcef18ffbb3aff1bbe5f855fbb067cbf1bf8ae06f89b32b4d9e7fb7cfb1a2db6ae55adc7ef837bfaed97fcbdee365e74a10f564f7eedc5afbd39e60701e4afc6af7d92e8eb87d1176005e1ac3abff6e7d77e5cde0f534c7f80cd51e4628047b92c01f2f40769d700bfd367fb69e82ef271be271fe7dbf918ddc4f36f177f7f20bf0ee6d7411cdb7aa761197f36845f7b24916ba8fd9dd097d9ac9566ac9cdf0fe3d7e1fc3a82cbb690cbba0bdcebca22f2b480632ee0697c24792edea7bf7fccef47f2eb284f7e8de6ef7dc2efc704942788fd09994a791a9f827b8bc79c393e5822df0ff3e4fb61fcdb336d1e73eef1e803ec4f8a3b96e37d96821e8b3c7a2cb265a992e77e2fa90c027f7f8e53c6713f07f71477a3a26e39fcbb3bf8fd0124b96feb1ce0b709364e75c1f5443b9daa8dece755459913b63c3e899c226f177bf27631c72de3b842ff49f67d44f0dc07e0d0efbff0e02ef1e02ee1b8c2478c0928e781fc5ac8af07f1eb34122fc747aee5cfa6f0eb549ee652e2f6014bf9ef939d6f9b4c57e4cd2f8fa67bf2ba074fb73c09a6f8fe607ead11f07df1ce211a32cfe0d79a01d3acc9af3335d2dcc3b685eadf7a6c616212cc5936bfd52b810c164e0d91ff87f2eb6c7e9dc3f9aff0d84145003b48264b119785803cb064a9598fdfcfe5d7796e5948b147a62fd32753f4708ef915b8a7d765fcf9d7e09ecacacb74cdc738a6682bccf7c8bcc09ccc64a1fd5ded5ac036827ce7675fbc6edb23dfc6de43f88ec33cb2cd70e4ae5e00be157204290fbc0d115deee17839974170bbd8f3de37e09e5e2b9df4d8dfd6b7b5846de583e7f4db6fc13dfd7d5140599792449ba5382b41da2b79dadcffd73a93bf5b4e12cb9eec5b7a5d019eade0786ff3ef0e2789f598788feaf61db8a7bf2f09a8db32897c56bab587fa7c2bec57f89f831d7ba8b6833fe378d155c45db656f1dffb3adf44447b72b97d5f57c8c27589ae06bcacb6e5ab23ea53ce1d3982c8eb59f0ad288f648d93760b21ef2a9fb4b8ef21c25f0abd4b1d9c3d9a72d9851f3b92b8cb8cf75dfaec287e3d965f8fe7d7f5cebbeb72f8b363f8f5382edb1ae2f2cd641d784eaf47f0dfbf07f7f4bda31decc6c2464ff0c82acbcf133dbacb7c809f9d6db0df3d4a94eb936c6eeb5ecc797bcc2303280b52dc7db85e6b89dbfed772dc1f6ddc7a43f9fb27f3eb69fcbd23413e8bbc3ad5d169e853fcd92900b706f83b888c7e7cf03e40bc9d7e16bf9ecdafd30076279eee518e7cf1b6db19e0377acfdb70e474e2aa737c6539875f6b27d1a733788f5e376ae8eff75b557e3d9feb763471f75d8eb6f3b8fe2e1f2cdeb76eda96df5f607fd3e0477e7fa1fd7b7d611f17019d681aeb1caeebade7bff13184e83140efd3f9b363c1b3f3f8b3e380cdace3bf5de2c99f1f3cbf5f0a3064bf5f066490fdbe993fe7f6df70127f7eb94797d33db21e4b5cfe82fc2751d7e8b19eb47f52c8cb2bf8b7eb3d79b9dece9786b7f8605d29cfcb46dbf8fd559ebcbcda9397c74bf2f21afedb0920df06f167274af27703e041f8e96b91bc14bf5f077065bf5f0f6490fd7e833b2f1bb7e0cfb7207909e587797963a2aed1133d69ff1c202f6fe6d79bf855d67e15f93884e3fe1200f7567e3dda0737df83fb6b00dcdbf9f5361fdc3b885cde54d213b62ec65c4e226e5be7755e938b7db0ee24525bdf730bbfbf8bb86dfd6ee2b6f59349a2adf33663f41427ff1917f4d9a924d1d64f037622eacd7bc13bd056c5eff7015cd9eff7031964bf6f252e5b6f2aeac50788dcd6a1fcd0d61f4cd495bd03d3fe2d405e3ee4e159f02bf4ff1adc5bf9d354c827da471710ffba719b8d7f8ca88f1ee6786770fcdfc13dbd9ee949f74c9eeedb364e33d14fa8c59f731e9b09fb7ec4be3f56d8f5a3f67bcd5a78de7bccbea75517bb7fc2c3ff931e5b39dbb1b7b82e8f83dfa06ee710779b84b7b1a2a01d113d073c837925da85c9787d9a5f9ff1f07716c7fb03dcd3f7b63bf21f27dab1cff2eb39ce6ff545bb5ee46f2d20c773725b61b2823c536e23099d9f4fa2b38a4f3a97b87dd2b9b61d34cff7c17a91bf53e8f3cecbfcfa0abfbec4f1453be67b704f7f7f95df9feff99db7f998cf16fd944f811c029b7ef36700fd5fe3d7d739fe26feed5fe0ded2ad051f836c31875f45fdf08607e74d47aee3eff07c13a46d6be2b7d55c178fbd4579ddb1772e71dbeeaa24f6f416bf0a9f22fa941712f778e085c4f1c5d83856b2b47cf48a5e4cdc6307a2de7c87df5fc47fff9bdf5fea795fb4a5dfe5f79778dedfec797f337fff3d7e7f99fb7db213e0d0fbf71ddda2a2fff00178c6dbeae443879f9657f2df2e77a74d7611777f50f4f9fec3dffb077c0739e0bfd36102767f8547a72bf9ef11704faf577970aff070759507f76a8fbc62ee4e94cd4f1c1d4fa805be017c928fdd98be36fd3ec7b8867f1305f71640cb9d3e18e25bde3e8f5ec73162e0dec2c8e56336b93e652c7abd87bf6bc1737ae56df49c1c704fb1d7f9c8c7e7dea35b3cba6de1df6e0df0ad68d3dfe4d1ed268ec1ebff56d57db03ee3d7cf3d79286c96e2dd22c957d1c6e7f3b3d19bb90c55c0bd2543abcdfcbd2f88dcb66ff47c5fd5fd7d6bd1e615ed85af3cb2dd4adc63607c6c9888f911894d92ef3cb2837a262edfd71ef944ff41c87d3b97b71a90433ca7d73b88bb4e136d2b717fa7e7f73bf9efb23976bf32d2985f7f2029fb58f223c00a32f6d3845f7fd248f367801524cd3df9f5178d347f055841d21463b4bf69a4f93bc00a92a668cffc65db406b3106c9fb4a84b75d89a8bf685f90da6175702ff294db511b61f7dccfd33ffdb0a37773cc1ae01ec3f4d125c27d5a84fbc548ccf9be178f458a707f11e1e52852d579a7371feb8870dd227cfe345203e0705f1ce1735fd17bb8ec35c1bdc87b213bb7f788d0a10161bea63d97297a2fc7d8c37ebffd18b78cecf71ae06f91cf1cbf2d9fc38ed4b6ef3b735f19a9c3d3113e4de046fc6d2352975febf9e85f9f5f1be05c8bf658b2f47ced937395c7fb82d1fb88ab6e8c34e41c0f04bf0b5f41efefe7efd702f7165e073ec71069c4af8d715da51c719f147d08e41dbd7fd06d0f2c7a90ca770bf85df8157abf8dbf5f1bdcd3ebc3fc791d908e784eaf8f1077997904b10bebba2fe1b23445646c96a28c0fc96594dae65ef2fc8be7d7cfce376dd6f16f9af3eb3e1c4b8c4ff1fe79646fe79b2ea2ec8af1cafe9efcafebceff4e333def8b717f3e26146f176cf5bcdfd2fd5df401fe7e3ddb3ed83dfd3d97f8fb105a4e859f6995c406e1bbadf995731169e3bcdb99f78322edf8b53d6ed3910ec4bffcc234f9fca6af3fd85701af23bf76f2c1ebac80c7636a233c86a0276f8b45baf22b8f898d74e779f62871c7463cca6d40d2a78cf44822077dd633893e5056e1f33d65305ee624f5866f9dd71bd801c5798ce3d607f7f477493de78b2be6b2db13c7778bb8ba0ee099a853ea90d47d3cb7d3e893c43d96c0c7fda24f10f77c2bbdb7ca6497625b9f2eeb815cf45ae0f9ee53704faf8f3bb2b2bf29d62d1c4bd4d57ddd98d1a71cfe06968167f4dd7e000bfa1a8e9d2fea435e2ea3ffe5ef3500f750eea73d723f6de374e5310af172dd2209e7b2fc6ae7fe2dba83cbd250f23b7dde08bc47afcff2e78dc1bd255b37e11f396e643f7e1dc0afa27e7e81b8cbde0b3c3d493f24ee3b93e81997ed392e5b1370efb561616bdb3db6b69deb718f2d83c8b3089fdf8a0c96eb1319e2d62bde3f4b835e91a16e7b137696cc4ef2457baf1d97694f45bb11fe41d8fe331ca729b807b610e790db42fe9fb6dcdd79ac476418bf0e777318c757b0096f1967f7f4db8f146d86eb101901ec02ce1189df0b883347049f8ff4d85c33b7cd45b73be90bdbea3187a7d50ae859c3833b0abc2393673490c7e2a58768c70a3fbcbffb7d59ec6d64ac271fa6027982964d5e3f449f97e83002fc06744857def9d65bc2c60f481d235ea78dd3c0e0f6c0da1ca9ea12035841faf2bc8d1dd1888b8ed4005841d2146df4091a6956055801d28cd03873d8cee3edba789d46e76ce0f8289f4bea2dc6c444fe26895b8df0f9de088f6789143aef47a6f1eb54122f1b34bc813d9b62a7d7a7ad627a3c5e3e22da9e3cc63c2ae69e76817b8ae13307922c2d5f7e67d898bd8a813dd1df451fe965e2ee53bf6cebdb57f806d116984570ffc1e3bf7ddbd5b3e5f91c4912431f99837c27ece1158ffcaf70f9793d1a29e2d7b93eb2cdb3ef3bf4b3affdc778d2e2df465ff5a4f5aa9d563f3ef719294e8223da88af79705eb371fa0fe5ef95f0eb7cc436047615f00d8f4d8d2cf4f085f59b5e27eefae175dc0e23a501f297c778fbf59b84ccfdf8fc7664516a36e16bef8be598717ff28687fb376ceef713fde22549b887e5b22c89ed2e0dc05b7912de28366fcf47df24ee36da9b5cf65fddef4596f1ab5897f083e777b19e40f449859d26d347f45978ec7c44c457bf45dc3e4dccff6a70e79bc7ab88b42d1d59993aa66827c7db426f733bd90bdc5b5c0f14f580e81bade6ef35e7324d72e345dfe1bfc37bf15d903a598c11f5d3e06b0dc00a5227f358f893f97c4264ad7dbfaa3cc0b73c8e38fa2e71dbeabb367f83c6d95883448cbeb08723fd658bace3d763f8f5780fcfef39b616efd3f379e3c8710e76dc56408cfc29c2cf1d0bf8125862ae52f88f9d404ef10cccd9474ef0c8f0813bdde887c4ddcffbd0e6658828c32ddcdfb1b5bdb0bfb6cbc3f347fcf7bdc1bd853798c7960cde6a5f8788be85b0ef8f811ede34c53c3b8f918ff078e921d539969893e031a0910dfc7a9207ef7d499ebc9fc63c117e2b89edb03ca3bf15807bd057117ac77fff00fc4e3914be81c71a46784c7fe4d4ccea1bd743f89e23b99c1fe2bafbfa1611d7f8097197d54fecfc1efaab9dfef04d3c3dbef621c2c702a29f713b11e3e83c262e2262e63ef7f0fc39f88e5e3f25ee31b64fed7487bdec7e2fc2e300a35ff2f773c13dbd7ec59fb7f2c8f79547ced6eee7ecbd1aee6f840ee4544f1910cf0bc03decefc2b8526ffb09f936a74d92b4c51cb2888582f1b7b27c6de5e1b5ad9bd782cd3c1d1e231911b1fb5ff3f7c55c83689f9d0b7ea7d76f88abcd98d40e441f23991d7ce1b1832f6c7947bc1d3e3b888a1812593f29537620fc525ba0d726771a689e5da8976723cf74bf17863c8bb741446cb095678bc7a529cf5adabc4c16710c1779f4fc1ec907b156e8074f3efc00bea3d71f3df9f0a39ddee8a6eef7e2f9f093271fc4dcfacf483efcec91b3b5fb795a7da8e7fbe8b70adf4bfa7c5110efa39a8ff1b49ba6c70ea2bf78f2e13be21ed7faceceb731224655cc2ffd4adcf34ba29dd8df83530bdc0bf985ee9778f2f40fc4e678bc6bf44f8fcdfd09bea3d7bf3c36f7972dfbd853ddefc575fddb637322fee81fc4e6fef1c8d9dafd3c6b6c4ef6fd6f7a364b5d78ca362bd24ed166d36df34c176807bf7b6cf577db6e0e10eb88b9cdc7226e9b67f7d0e66538427f512f725b8bc59c67ec6f9ade0e9bfb03c478c5b7c8bbf41a05cfa2f6f7e3ead9df8f6b0bd2c5de15735dbc6cc4ea71d9db7b7416cf3b706cd166e031e091cdfcbd9c44db8f5521f2f27c39ffbdaadb666355c177f45a8db8ca33bbb7d2193fd3fd9ec8c75875e22acf311e0f11ab41a4e53956c323676bf7f37496e798a86727e198992ee3bd455b82efb910037bbe84be8cd7b46d65a29807e47df2646dd4085f1f1cb9825fc5ba02de17116389711bda03b1f1abf8efb53c76500b7c47afb53d365edb967bd250f77b711bafe3b1711e1717ab8bd8785d8f9cadddcfd3dac710ebc126e39899b6f154fbbad966cf81fb5862ccc7d37e8fd75120a63ea1cdcedb6cf13140def65b50ecc1e6dfc5eabb658c897830def68f8fdbf0b6ff641eff3499c7bf2c18e8fe2e1e27c17517f30309dc0add52b5a11ff4be8feb9de2f78c4795baa3be1b27de57f2f89cf8dce92feeef451b3fdea712ed94bae0deca9fc23bdcefc5db47a2ad9f0bee2301fa66424e85bed9ffb7bcf5c6fe28fb09915e8a7ec65b8695fddc0f9adf7faff7fdbf4dff7859e7b15fb106fcf766e03ec2fbb635c0df56f99dd3d49d06da9f167b8424e94fb3be026c9bf0bec3f4b7ddef85a13f1d1f83fedac18c3ffbc67916e77f1478ff7f7511fe7d2b4dfdbf51fbde5b17b2bebcccc6798c82e8b3c7bf8f80ef22bc3f0d6d9cf7c5676c73bf176f7f8bbe622eb88f04e8630a3915fa98ffdf6d4bd5365c71ab3eefa3be58a4f7bfba68f7f0d74af3fbffe7fcbbfa8ca07f15b98e5f6f707f87b60f786c7faaed83399ef7c2d03e10f50adc9ff0ffb53fae02f66214b1fba0edf4bfb2a9a8bf673c2722f6d9f0c63078c71709919751be8743aaed9be2cdeef77647fb463b86e17f6534f5188eff9547d7f7624c331e6b07e31be898653eff3de03c826f2c2adf6732c2f79d8c3574b0620d817c3ce623be67af1f261f5b5d2cd600df4a58395fd8d67ebeb01f8e1111fbc0b4f549fb148e57c9f1b6f16ff9de30113e7618117bbe703f116bc479fc12dcd3df6531d87efa893d40448ca12ceed2effbfbed77bde7659416d8cf4b394684ef5114116becf99ae95873e2f2cfb1e63e7a88b89dbbfd6d24c2f7258881bd5bd8df542e11032ffcedbde0776ab755c03dbd823d67d8df16c661633cdf36e5df46c1bd789feaf61db8a757b0770efb9b625eecc16cc631db827bf13ec4e4df2f127d33be8f43e4617e157b4bc8d6126e73e73d6b8f401f297e1765ff5cf9efa28e4b18b310df8b39bf7b3dbf3fea7e4fd8424e9ec71664b175f78234459df518bf725b8c3ce17c57be833f7b3ca00d417c2acb5e9cf7bfc0bdc57b59397fffc934a62dd6a63f4d5c6525c166055fd53c7c69941ddff861b166e6d6d43158cc9dc00ab23661bbdb0663bc7e157369ecdeca8725b9fcfde7f995afcb8fec70e3c4da10b7df6c1380b36792e417dfff33b637c7fe1adc53d926d9b84b44197f815f7d628855d386b19fb196dc2e22e01e72b00f71b76d5b7bdee76d4dc2b989b5f270decad66ba9f00b2f92c43a52bc5703fc4dafb9e0592ec7d900e482e9e612771b5bbcbf8dbf27fc70128e5cb8c257bce4c190c582f2b87451f70afe227cddb8f71cb16472f8daf9ab120e2d5dcb37bb3989bce2c8592eda06af797e4b96d6139c97b61e7b6d6ba77938b1f10fcff3d8e2e349f03d6baa62ed78feed05ee29be38d3a3007c47dfe36baa9609fe5f27aeb515023fd69eb8fb6efdc0737aede0b19b0e76ba71dc37dcb8debd1962fb1277f9d8975f3b0239a13c7c4f9cf8be1bfb7a9e8335f191373ddf0a3f08e489e5b9e562f905eb4dbede2ef2766a7af8aead4996c77ef583c07f27758cc8bb002b882defe457b1f64baccdb2743b5dacb97c9feb0fceed14efc73a137719e86cdb4a658e8d5129d6437fc8af621c4170da85b8dbafe28cd080edf0c8c744da7eae5ccfd3dfe4f3ed27f63bf13d9e847feee4918dc7a1c4ba723be27619ebc6ef3b817b7acd77788a7505cfe8b53bff46e4791fe2d23bfe3bf1c8d2833f17fc7404cfe9b527ffbd2bb8b740969f6aebb87cab07af0f82279e8b3db23ef3d8c7bb4ebe548872c3d73a44f8d97ab15e407fb1ff8f4fdf6d45befd7c85582f2bd6cb88b50bc256fa7a6c45ec53245b43c4ed31ee4b7b03997ae3baf896956fe5b6b6823f5f99e3636b7c8c28d6cf535efad9182bf9be5e2b459df49da7bc081bdccfc3c17e3e1c88b961d16713f585f71c4f3f79854f16ebe17f42ca4c7f8f7ce27c803e6e392322368778be1b80d823dfa7253690ff9e8fcb1ccfa75fe4f9b46a93fd7cd5161c23c263886262cf23b09fdf19ebc133f18ef08722a6198e018a7986bfdd9cc5b1ff74de153c45fe72d23b82ef3110f907605b57da4d16efac5e979c8fa8e09a9fade18dbd8b0d75e4607f8b77e9751871b75d87d95c1eb1d5832dbe1bced3e80eeee97584c7ee47d8386b3adb7aace1f67f8438f721e2fe3e2af4b3de396b337f26c60b0a1cf9a3399eefaa3adf9d2dbe13631423897b2c602497691b97e957804fafa3101b1de5c68bfb608e77443db76e71bcd1089e782ef68812fb6af1b66db4861b27caf70e8a8d21eefeac181394f4ff457ec5db3a43896b5c71b54f1989b75784fd8c05762c74d89fcbd200bc239ed3eb011ebb3ac0e6eac8851e1cf1dd388e27f664f8133ca7d7f1fcf71ee0dec25bbbc58d13d777ac5bdf23e710b73f13b81338aed8e7f02ff05ce2cfe2728bef271297df8a8abd52c55a8cdaeef7e37939c993979390bca476f5a54f5ef1bd7a62071277f93b90f3bd85eb2ffa6a62af68b1b70f821badebc1e7e7d0e4f402f7f4f7f58ebce26cbd683d7e6de8c670ed877e1cc799e27c1fdf53fc63fe7d03e7b78dfcac8c681df01dbd17f3a77c6ccef77c363f1fcacf2ff69e1374b4904994b59392f0d6d8c6f19e0b7374a1224e131be7386e77513eb72ece8d898a3dbcc5b93162fcb3d0cd4354f42d417ec70ac133faaef74c9824b2499f71b962d33c7638cdd67f1df7ffeb447f41d8e171fe6989f7620781f7445ad39d67f176e0c1ceb3d874f08c5e0fb165cbe90dee2dd98eb9c7833b83bfd70ea44daf33f9f33ee01efac9595cf70f3d78b3814cb3789ac53c7f9a7bd2389438ed2b8baf63567978381460cd00cf04066c9bad07572a775f9e07e5ee3493e581d43ec53e8a0fab7f1b9bc3e5fc0adcd36b91c7768a6cae8e2db7e53e56f4f5849d3eea9fb6c08df2bd40627339fedfe09efebe0fc00363d881f599e7d1679e3bdd281f4f8cd721325c3e7616e56db75809ffa61fb8a7d76247e7682e7f361fd804b7abd802226f0b2e04ef2e04efd26b2971d7d9a536ffc7977bb0c5778711d75c668cef79156dc5ef17f1dfc5dc99283760af23f68e7846affc1cf89cfdc0bd25c37a3eff77fc18242d7ece7b3c5e7989274d7e067bce00704f71ff74bf1f2be7ef0d04f782638833c88de3952b7638d0f1709e07cf26b157d1362a00f7a00d73dc3d6e9d92e1f9d67722a6498ceff371b79838a37b17b8a7bf079d37e57dcea89897abf0e48b38ebf8e3d465177568b49d86fe79b62e3d39e76c4f4dfabcbd3a6684c729c5c4b9d85f837bcb364ee4e31f27f2fe5e948f034679bf202afa1347b9b98fdbeed18e4c31b1cf5147f08c9ff31805e37751de9f8f7676f2ed5c319629c6aba7105f5d855e5131b6b5dc93977cdfb31838b737c6f7408badf470c1cff3de30d096e524b1369ef723a362eff09e8ebce7d592cb11e56365f1d878af9cab3c72f23a3406f6188bf133be626b3d72f2f38e37ecf2c8c9db0cd13e6e79b33ecf02701111edc135e099b0e92312398bf605df817c88ffde0f60c87ee7634e225e3afe5cf8fc233d321f09f2a606f83b001fbe7e44f4af076860f039cc530496d80b5cd40feb80ccebf83701636ca2621c89f795a24341fe88b6e5b10ed68505e0197d5f8cf11cc3f9e478f1b60068f78939b2d87ae759fcbde3810ec7034c7a3d81b8db0c27d87c9cf6ab5bf6f877fc2cdd789b81ef9916db40dce57003c7990e640579c6eee1dccd7a8f1e27f1746a817b0bef54beffdb693b10f94e76cb17ff7dbde77731d724ca3b88cb4ac03cc5fd8dc08aebb29eb8eaf9b86c7d409a18f6c972ec643c8834e23820dfc5b3b87cc7bbe53b45c406705922f0aceea07526df632e26d6dc7e0dee2df9ce10eda9d3b8fc433cdff17363c5b875ec34f09c5ef9b9af3943c13d2d13c3f8fd99eedfe3b8227e0fbe279ed3ebd9fcf7e1e09ee28afb733ce98abdc5dee7cf47f870f2337857b53f36c2ce9b0b79be4645de81b3602362fd2dfc8d5e45dc92b7af701eb089f3c0bbf42ace19fd14dc5bf97656b1075b7cb789b8c78d795f2ee6396333c6c75dce7cccf3de859efce6fb72c5f89995628c353e76cff7958af1332fe3e386177bd2fdce9dee59033de95ee24997ef1d14bbd49d6e9c337ec665ce488f3c977a7e1763cae2fcd602700fcada19a21d2ef6a04be1fcb4d86677198a8ae7977b74db0c9ed3ab380b7328b88765e80af7ef71dc2b3d65e80af09c5eaff294a1ab3c65e86a4fba57f3dfc5ba0f9f3224d59f9f7919ef9ff375a8b16b3db677ad6d0367efb4b93f47ac07e17919e579161dcdafc247f1332de3fb000abfbd05941f11770fdb8062bd8b621b90cd6ff88d1d8a7312aa827ce158f1b9153e5e2ec6c3e3732d1e5de25c71f963d711f718ca75fc2aceed8c827b212b286781fd999857b8d1837ba39d471bb92d099fc9c681fd3811eb97453f4f8cdf8bf33e47837b7a156768b604f7b09cdf425c637decde92ebdc4a0fcead1e1c1efb152fefb7f1dfdb78bebb0de8457f1fc36d6183479f247a4bb9e07bde472700fb13b649d3f69cc71913e7708a58109ff3dea37c1e2526ceecfc1ddcd3ab38abf36b706ff1765ea1addf79620d17df1b283ac983cbcf3c4be86f3de8f0c0def19635718e7dc0b216df17b84712bb3ad0a31f3f43529c8b1ee3f1e35130cf7191d8fb98cfa1c4eef67072b7cdc9f90bedf737f1be4e54cc81883999fb812e0779e4b8d7238788d795cdd74c252edee27333fcfcb704bf06b916e93d049e3d108cff9838f74f87ffe92490ded1439c342ee2e36851312f700f9089ff16bbcf9327f7d97972410bf77b49e5e363f451b17718ccb3591ed9b77a6417e716ffcbf24ccad3508fbcdb6c3de2b191db6cfe2fe475727c5fa1218e1c175eebc68a7ae32182b617c4f99363c13dbd3ecc9fef0fee23bcad4d9f1fa0a8339fb7898ab94c5147f07988f8d8ffa3fcf7398eae97e6f267b389e34b54393fc493eee39e741fe7d7c780cd16f1674f009b106df5273d7c8bbaf229f0ee53e05d7a7d9ab8fb114fdbf97cc92e0fb6f8ce735e574c9cd7d58adf8b33dcbc730edb810ccf8267f42aceb9da0fdc5b325cfca9cdf5255b91b4f81950f171aae73d698ab3f006807baa5bb9fbfdd80ee29e73107df3273c38833c381eb9622f001d790c7d14cc874a6d5d8c3f15807bd0ffb8b8b35ba76478523be3f36cb117811dcde1cf5e0232f398f3983883c76b47207e9bfd2ddea5d7573d76c4cfa2d93cc6832dbe1367ce3405f7542e3e77177b1db1a337800caf8367f4faa6c78ef8792497f1f1ffcdb9485a6f79ece82d4f9ae2ec8d01e03e07e0f1f76320ae38f60ee09c5ef9f91339e3c03d4d438c13bdc77fcf01f7398932c77682347612c707f9d9d82b1e1b7bc56d63978ab8d03ec1f0dccfaa44d8d9476348092922e5a41beb28ec4b68d4c96432827425534931594a96587f8db0ae8bad7fed3bf15c7cd999e426f986f53f59449cf54f07966c25596d7d5a629f853cc5baa9b01e9558ef538cb1d63795a427e9c1b0175bbfcdb370969132524ae69266eccc6c91fa08f6ff22eb8d52063a3e2721897b1392a0c29559ff96589f555a1f52212bace7a3ad274bacff9659cfe659f7e3ac2bfd6a0ee94e6658ffba51a659c99691e5d65da1f5ff728637c7123bf1cd642acdb29e7abf996c612e61d22db69e0842cbadfb3226e114f6ff154cd21226fd58eb59a5f58c6ab3800cb7aeab586a89ba2fb3fe96a559c82993cb384be979841d992eb2a9c0d2864adf8dd9e2ff726477e408a5beeaf81cbb18e674631eebe4849cf81f87b693a10330633946774659c4f5ac07e9c6e265272730a8ae63a28672fbb6f9ee437af9ea226786667773a68193c3f9dfe4562bbd66fe5755dcaaf524ddd810588b24aaf9114bf1f2224d1210fc55a85225279f0aeaa53f22a39f0db34cc920fdf67ba5ec3df50ca8ca2a3f7706b0a3bf0b2daf3609549e5399f0654c34af32232dc14bd813faeb24ebad222b31aa5081f557a5f5df64a654254fb4187c9190cbf954a46a2ca312abe164ca6259159565158bd02edc2d256546122f29cfacea712d9ccceac6da564d7d4c1a4b8b35ba7278cb4b14baa34eea1b99dff28a1aaf3d3da7f1a56da6d6d97ae7c42585677dbeab8a3c9f6ab27c4a25752ca762b29caa99e94295bc16f1cba73de27a39f944ff9173580bb1f56432600ce6c818dc23d3b64e7f5bca508aac77d539a4a1f69dbc8e494e601dc408938b8051584542613ea5b0ae442a52a586472a2a10825c559639b5764f959d9a71d3f5007b7a28a8821a777ddf1a57d5b4abc9d8638b32e618654ff424a75815da01d66f45d6fb25ac594a9fc30a6f184bc1e97dbabff06796ce0275f1322b65b52163b52de817eb4a86315e5dc2783eb5d7461233603ece5b18eae385a10656cc1aeb16b39a1872135de43d30e43d75916b61c84d75916bcb8a0d5b7b333323c5c61980117f0db7be5d6829b382f5aa975bdfcb066cfc8b4bb3c0c5652f565c72896c18494d22ac98d491e51d7dd85c26a437ebf6c2b3ae2e06dc4213b81e666d7beb5a5b7d4ce47d34456e8089dc5257e48698c8b99a2237c2805b690237961569662c99ed7bda5d318aa3de92a0ab165a066e26b7215897d05f06acc83691650df5c1b45ad5add9f694654fbd4c674f01f3647353cc9e76d44c253ce059d41ec9a264726059d4549645d4c83b6096e3cda236781635c3f23f2f0df9bf1706be6f1ac09b63b4744c032d2d6496cb5cfa22a3963bd57a664f968c64bf96b21176077329bba7a9891105bf2fa8fd8eb7aec5968454167f4bef14d7198cabb0da86061599958c8761d9ff54438659bab082655e18ac20ee2db3385af3d2c54e5a35ef3e1872375de4961872be2e722e86dc5d17b9950c99767a69104ec2302ded9b4db47273b2f5a894f5e28a1353ab86a7d61a73523dd3e0a4da60e0bdd200de56064e79a50bbb749a55ed64de8fb50e6718f57eee6e7c4f5667da23e7ce5f6296d1db85ef99c4bbf5917937d6306d49bc0308aa29f70de2bdfa31efa59f18e69dda63d6d05fd31a3a6036bc5f1a6c380ff3220374bdc8be32643a063030081f0d71e08e3260fafe208989e553131becb10f6f62fdf0c43ac912a3e40f4903f99d65e074d06868fc6507fc1feb9f04f05a3878174cf26112c9870f8e2a49de15339be1ba66d30d431ea18b9c2ff3aaac077b4c46bc6ab2a0a1d1965a34b589565fe43062477b2436a844d4089dcb9ccfa4a0cfe7919200c146fe1eba40e6a159ff7424709abb5f0b2a4d94b9f451cca5535bc49a973269d49ba3f20a65344b3dbbb8c12aa7ee98a71923f134afcbdc988fa7e98115d9b1ba45b6a70c9916d9fd65ae9eda2a8d97aec92ad3847446e3e9f492b906367ab266b7ba067b7e8ae2cd67717c36de04eb5a495632535d0482180aad7796596994b8da2da939031ad3b9b7b7a9cf6b50797118cf8ac3e000c5c1a4565801e82db324da2ba10b9612fa3474c86732996421cf66c5f070f698b264e76e297bb594ac61ad453b244fa5cfd347260d6d1bd1254a3a6da3be18f0244de07e58193f50b78cf79721d722f6f630ba2dacfd30b1a7e88a3d00f3a885128ffa6744cda30ec4c0a74ac0b746d5c007c9c0ab117b4fbda436e263d58331e08364658c767247b098885cebbfa5d6177448b68895fe5c56193ade20d72aeba5d65fb4c2ee0cde5f6abd6187c0aac83904338ae9ba463114cbb78325f9f6a362be0dc3c00f91808f89a9810fc7f26e862cefba13bb56a4cd9285bc6e737bc35cd67fce65f1e7cbf9a810cdb90a96afb9e408ab397ea475a5c178b9ac1e2863bfd1bf694e535fab92a72330f967cae4af09e49f04245449b1409622657896c46f4514fdd64819386df81c4a90860f5de0a0def01985d13647461b1d801d69355f68cb75397b7f0a338092785bb9384d15e468895cddd844cc12b23b1b64b4b740a3f52b5cf1a6852c6d271e54a7e15544121b5ee21f79c38b2e85ca8bf420c91b5ee9901e6b608dc19cea3c89538da838d5b1585928c6ca42494a65617f493addd8fc5cf96eb539bc44d9f1ccb4e4e937f8e75b3ac6bcbd7f3681d82b8065a54bc64e11ea14e8fbf3387315d499d66066be9a093d824de352f2599190978905ac4c645272ac5c1c80d5da0b25b5f61d55d46aed7132936513b3cb76abc91630844c986da9cc6cd9ec719f00999f4e395bb299b00ae6548bb953b55d77cb08f583cb58b54925a68e17fede29427b68b4bd348af1bd98314ff52b62fd5eccc80f63469e693d31431f8f55008b24158052ab7a025684ca2445e84fc5223411137bb1aed89330b19748c45e5b554dec0331f0a512f071d5d4c027cbc0a963a615a14e0f710a064cb7b34d686ed2f955d14f98e7e929ce657d05d1ff2b664f565bff2fb39ecd6310b96c819e883b5691b210e3769984db7a8adc4ec528a8d0e4769a0c989a676510609ff9c78364c0b4fdb59c20ed2fba61ab7afb6b3a46fb4a09ed9b15693f182be6ab748bf92118f26a5de41918f21a5de49918f211bac8b3b04c5c2bc9441a7aaf92898762e0474ac00b15c1676305f328996f6a47e844aad348b5bb4fceb84691d5a0ae649e27d72a0e769d5bec1a1f99cfe265ec4eb34a399f83c979b44c4e7b3f00baba82b6298ad8181a4d71a2552daba45a8451bf4e42fda98ad4cfc5c08f91807faa083e0fe3eb58195f4d93e46b310bca779e76b79eaaf0588c49739c4c1a7aebe49b4a3a2518a5eb25945e5c538dd2f99812c7cb9468404435be9f45d90436e057c4f73258c1aa71751a1760129c2093807ab671f186c1a4149b050b314a4f9450fab222a5a59847dea0eb910fc3c43e49e634f750137b1126f6c9ba6297c99069abe31482b43ae836bfeaad8ec5583aa761e99c9e523a4b30a6ced0656a2996c1674a3278682db50c2ec7c0cf9280af55043f1c033f5b02fe9822f8320cfc1c09788bda6ae01518f8460978b1227825067eae047c9322f8720cfc3c09f8b58ae02b30233f5fd7c85762626f9288dda88e9ad8ab30b12fd0157bb504b91b8b63cfe40a1c6ff493da0a1cba2d76b0158e74836cd9ca9b64e963434a6b64f9426be88b65222954e54760d67489c49a76291682b518f8a512f0998aa67a24067e99047c8322f85118f8660978bdba6ae047639979b96666aec380e9dee2096dc1cecc3a97b232469bf3256c9b9e25ecaf256cabb41236715dc46cdf19701213d774dfa75c6ebdcbb84d9759d6ded57aaa22f53198d457c8a4a62e830ee23aed66bb2b697743647185b9a4036f75775092eb58cc06ae94d8c01d8a06761ca6f4559a36b05ee667d9aa9e52a37e168b232d6483f7749fb6f9cc5216a779add8d5817df235cc27d3607073b262fefb785976d3b6f5b504695bd3addf6b529195dad62760367bbdc4667b29faad1331f01b24e0d315c13760e05b24e0eb15c14f9281d3660dddf05eab59733226f64d12b13bd75313fb144cec9b75c53e55864cdfbf2588fbf119223f4d064c0dfd56ccd0e95efcea9dc8d331ff79bba6ff3c0303a6fb7a4bc3a766c487c4ecd19b598af5df999809dd2931a18d8a267416067e97047cbb22f8d95866df8d65f63d2965f63998b5deab69ad1b31e0fb3481cfc5ace87e4df33c0f03deaa097cbe0c98e63dddbbde1bc447015482f8366156f8a0c40a7facaf668517c8c0a997a4bbe96b79c90b31b1b749c46ed4404dec8b30f08725e0fd14c12fc64ae62358c97c34a5927909668e8f1189b7a42b10675bffd229263a3dbd804ce21157a5564b92fe52ce7a1bb40daf62bb9762523c2e93a2615c8a7cebff8b893dbd610798a42ec365980c4fc86468c065e869fd378fb5a7e937abacffa72ec1664c822765125407794197a1d016af4a6a9763e6fb94c47c731aaa99ef7f30f37d1a33df675232df2b30a7f7acc4e9c5149dde951843db250c6d5364e82a0cfc3909f84e45f0ab31f0e76579db480dfc1a2c6fff8be5ed8e94f2f65a593ad4a05ff0734d3dd2ec9aaec3a478d1df35754fa36bba1e93e1253fd7d42b8daee9064c829793b9a683587a6a21f35b30f37d4562be3b14cdf746cc7c5fc5ccf7b594ccf7268c32ba2655a7a17733c6ce1b127666365663e7168c9d373176de4a899d5b3125de96287187a212b761d4bfa349fded98d4ef4aa4aed5444dea3b30eadfc3a8df9912f577624abc2f51628ba2127761e01f48c0b72b82df8d817f2801ff5611fc1e8cfe5d18fd1fa544ffbd98717e4c7caab59e69aed6eec3a4f844268553adf54863b5763f26c3a7321944b5d63b8dd5da564c82cf6412d4204eb53692cd992c558cbb790033e0cf2506bc754f35037e1033e02f3003fe3225037e0853e22b8912bd9aaa29b10d03ff5a02be5111fc612cbbbf217af5c22398d4df4aa4a60759a948fda80c9c0e8fd04363b586471ec3c4fe5e22766745b11fc7c8fe4156b668148a7f645da1f56a398b7d5bc0fcce3216786a2fa02a6673969388bd35bdbdf8b6c87a5acc96e52e64f7c26f1691b97c46b13b9b51140b7757137b97e25c36a36f9f4794cb66938af972ee45ec49057bab0420cbe72c4bf9dc2b9ce5540d907d02cba01f2519345031839ec4c07f9280cf51047f0a73463f63cee897949cd1d39812bfca18da4b4d896730f0df24e0b98ae0cfcac06961fd3d8833f219bade2e01eec6366fdc3d13c889db02a57702f90f195fd209647a7ab2ff04b2beacd804f273982dfd252b6d8ab6f43c5645fcad5b45fc1743fe47177907563fd01d06742ae31764f69f4b1fcedf2df6afb36197bfe547644c492d3f1aa196dfd1c7f2f5b61593e7c48b98f1c4229ac6f312663c399ac6f332564cab44128be93dcdd58ae92b98d45523922611ad2d87b18e56095b33215b6d93cb9a4bb98a8151af62725493c94137fc50c37f0dc3afae993baf63c035648253fba1dbf916b236e122328a19316d972d546e89bd81d9454d895d4c6aa166176f626aeda1c9d75b98d4b5245217efad26f5db98d4b5b1cc10611676d3d81d8ea8a2d63b58ca756429d38103fbf0bd6ef1d379bac5377f996895ad62a2ba80e65d4c82ba3209f6944a308efd55c956cadb1d88d4d647bd87c9524f264bf380b2241edfa222d34eccf0ea4b0c6ffd3e6a86f73ea67003cde2f20106dc5013f8430cb89126f02e8ce7c6129eaf54e4f9230cbc89047c614b35f08f314af6d4a4e4131930f53e4d8300fbf4ab3e950137662f225ddabd22a974693fc3686f2ea17d682b35da3fc794688129b1774a4a7c8129b18f4489758a4a7c8981b794806f69ad06fe156698b932774a7714984ce07628c5acb92e1c791ed99755784bf8ffddd1f6b9ecceae7e3ab36d1ee82fc2e556b068fc5ce6989de5cef6f8145db85b4edcb1f1221d3a2e6557b1f3e3ee3c9739f362c5c8c6af312e5ac9b8a01b93c23dd5ec06ab53c13a4b8f573209cb88b362d6968fca9c0ca187f5b6ea0a856f3083692d31983f15adf15bac48b5c18a54db948ad4779812ed244ae42a5afdf7584eb797e5345d4a291f6d9dc1c769e90a0fda51b1b7e2f1cbd33cdf5ff765d1b8f608ad63d7ee12b0945986188d75ff56c9ecaa52528ae632099782b15c1b7b29efe8aad8d70f32f6d8b94a11fd03847ec4c0f3d200fe930c9c9dab14d1dfb2f6670cbc631ac07f9181d313c13a45087ecc963781f67802bf6209744e5302bf6119db250d19fb3b06de350de07f60e0ddd200fe27e6e7f2257eeec7b66a7eee2f0cbcbb04fc1645f0bf315a7a4868796efbf6412ab4fc8349de5322f998766a92930802de4b025e4b113c2203a7c380bd758701a398d87d24626f50143b2603a7eff74d83f7cac1c0fb49c0238ae055305afacbdac78ab45495815323df2f0d65bf1a063e200de0d5315a064a68d9a1484b0d2c4307a5c15a6a62e083d300be0746cb10092d39edd568a985810f958d402a82d7c6c08749c02b15c1eb605e6bb8aed7aa8b893d4266878a62d7c34ca540622aaa11f1f531c947caaa6645c91b60928f4a839137c4241f2d1bcbeaa02679230c7c8c047cab2278638c96b169a8299a6092ef2f917c6d9e9ae47b62e00748c0ab2b8237c5c0c749c0e9096e2ae0cd30f0f1b20a5451f2bd30f00912f05e8a9237c7c027caec5c11bc05668a93d25042f7c6aafe03d350f5ef83d1325942cb38455a5a4ac0bbb5b26e237487d44ced8c3395d88711f5b4521747d5aaed8e3345325ed58d9d69da2c418f20a9155a78d5291c25ed5b8bd4161d2d9768fdb7d5faaf5627826d063d3542c736524b130b45c8c50c609ac4001a755433805618f84112f0a18ae0ad31f0e912f03245f03658a13b380d85ae2d067e88147cdd1015f076182d3324b49ca9484b7bccd1cd9438baa8a2a3eb80493e4b22f91d8a92e761e0874ac0772a82ef8b81cf96f5143aa98177c4c0e748c0f315c13b61195a24c9d01cc50ced8c493e572279a1a2e45d30f07912f07b14c1bbcac0e93877714432ea4fc73e6958d82216bab192cd353931dbea3b9f76c3522f91a54e575f88481e7b7e8d7ea3925e3e46e57c59775191caee98852d4843dba80726f94289e46f2b4ade13032f95b5a43bab81f7c2c00f93800f5404ef8d812f92806f5404ef2303a79b97954502c4115c8403f7c5a45e2c91fae52e6a52f7c3cc70491accb03f26f95259cfa59b9ae4fb61dea05ce60dac4e34f03dc56cee6e1e9bdf2b8eef2547af2bd827a56cc6cf398ecd9975b683bc9759ed4c154f320093f57099acb44d5b60794ce1bd54521a88a5b44c96525df6de12a663a9c501f591b46d7c20fb593592661096dd1592ecae95af96dd8331c52a658ab57265b77f467ae30b8b88081b50517e0826df72ac6ab427be454c9d5efcdc508cfa1512ea0b14a91f8681af94808fe9ae063e1ce36d958cb78eae7c1dc772ae92d88baf96b1bca33948d76354b0687411032d72dd9dd34e6157e17a0426f16aac883907cec90a9b4ada0558da6b302bb34f0f9e9d9693104662a91f214b9d76c8e9f257bae94e3229e87bcb886a5cef284c9eb532791a01794ae2393281073ca5be28783426c5913229f60052d06073c73654d21c8315c9a3244572470fb522391653e868994279498aa4bce8d9e73d16f3436d692d472370ca795dac42c5fe1815eb24549caa48c50158f3e89834348fc6c9c0a97d1c1bd19c311a8f897d5c1ac49e800dd3ac4fc318d0448c93e37539992443a6ef9f10a47dee13e77b206680274a0c70666f35039c8c816f90807fa9083e0523fb245db20b31b24fd6247b2a067c8a26f03419308dca3c35fe83272af3b4482a51990761197aba244317f651cbd0e998e73e23b9e7b60f24efc09bc0622dbcdd0311119534c6d289d2b46327e119c86a8d99833169cfc41a5285acc1ee3d7939957ed22198873c2b0d1e720696c7674bf278ab621ecfc4c0cf9180d7ebab063e0bcb928db22cb1d7290913111b189481ca9ddecf65ad5cbbada7924587628a9e2b1b3d50547436067e9eacc3a4083e07033f5f02be5611bc0803df246bfa2982cfc58ac5059262a13a91310f93fc4289e43b15252fc6c02f9280e7f553032fc1c02f9680af57049f8f95b94bb05e55b232378f4f1253e7a85eee1660ca5e2a51f65b45651762e09749c0b728829762e09b25e08dfaab811f86815f2e01efa708be0803ff8f047cba227819d6ccbb42b799b71813fb4a596e2a8abd0403bf4a026e356194c09762e0574bc0c729829763e0d748c0cb15c10fc71aaad7620dd5eb526aa82ec3dcd2f558eb4cec3b275a8da90fa9546069df204bbb0e718654ec562c8d85294ba95d588965dd1649d60d1ca09675cb31b56e94a945b3ce699eaf24459e55f0ee46b09a8f5f814972934c127a3b2cde8e53496725d69eb8390dcdec55585edd22c9ab3315f36ab50c9c0a736b908e66171c780d46c96d69a0e4088c92db6575f740354ad662e077c81cf22035f023b14aea4edd4aea286cc8e02ecd2183a33191efd615791dc6f43d12a67f5464fa180cfc5e09f8eb8ae0c762d67d5f1aacfb38ac4cdeaf5926d763526f4d83d4c7637c3f20e1fb5a45be4fc0c01f9480771eac067e2206fe90047cc31035f00d18f83609789922f84918f8c3b26a5c11fc640cfc1109f8aaa16ae0a760e08f4ac0672a829f8a813f26b31645f0d330f0c725e0f9c3d5c04fc71a2c4fc81a2cf428f352c9542b8dff5dce0301e87aee54a780cfc0fcc593127f1151f417674ac0bbd129938c8687c3fddd520b0f7f4ad21fe9d69648c3c383a4f6b48557956df867fdd3d5fea71a1212fe4c441e121e241d2c24fc2c2cd39f4d4325713606be3d0d036fe76025f339d9d045815ac9dc8895cce76525d309e010835725cc602bf94cb03331efcc1caf64e65c063a3f76d9a5fdca52163ca3567acfc524fe2fd6bbf4ce6a8f2774606d21dbd25025e5f3b0befb0eaceffe424a7df7f3316b7a310dfe6913664d2f49ace9cb916ad67401d6a67e59b74d7d21c6c92b69e0e4228c9357259c6c1eadc6c9c598e4afa5c1375c8249feba44f2c2fdd524bf1493fc0d89e4aa8b4b2fc3247f53e6d526a849be192ba96f6125f5ed944aeae51843efa481a1ff600cbd2b61a8c5816a0c5d8179d1f7645e744fe20ec8845b92da73cbde012d15bf7a2526cb4e6c386b72bcee5049e72a2cb7de4f436e5d8d817f2001575d73720d06fea104bc9a22f8b518f82e09781545f0eb3023fe4862c47fca2a051f23be1e339c8f6586431be1b20037d92ea5e90b70bb0123e0130901d3e7aa11b005cbba4fd390753762e09fa501fc268c96cf25b4ec5ca046cbcd98fbff0273ff5fa6e4fe6fc194f84aa244ad856a4adc8ab5a5bed66d4bdd8689fd8d6c904251ecdb31f06f25e0db14c1efc00afc77b2024ff3d3bfd672fa20f08c1095e27d2726d1f7586f642c3fcb881e93477fa061c4632d99546bcdbb30a27f90106d69a944f4dd98f1fda86b7cf7c890e9fb3f45f4c6f3efc572e2e720c03e44df8771f18b2e17f76359f8ab240b3b2b66e1560cfc3709f80645f00730b27f97997d23e23deec73e3267095fe5610fe2ad21aa43010f6252fc2193821e6b368c85467a5b01d3d8ff4bd94a2355191ec268fe5342f3c6456a346f9381d376cc5fb28a8c8ecefd4d87d92814fd878fb17913a4c36b48820f63dafc23d1e6f5c3d4b47904ab9669b7575a2d47a2a954cb8f6266118d4acc82b236822dde12075f2c88370bbbc647b1e6b361d7c5bc9ee8e13a4b8a3ee9a95c733c86511d8b2652bd5dd1701ec77c564e54d3673d81f9ef2a513dfffd24c64755091f63cad4f8780a03af26017f4c11fc69ccdeaacbec6db0cb19ce633f9491b9849e1db6887541c41ece8b999b5acce63f68efda1e615d657543ec2170bb2503cf369b4b96c7bb2fee3daa1dab55b1d1673033aaa16b46cf62665453d38cb663bd963da2fae3fccfc9c0e97455ad28dd3a3d115c9ac05c3c81e7313bad2db1d35f17abd9e97f313bad23b3d3d6c419ebf7cebbd90b35c58ed0f4efeec0fa44b093fa1e113b3009ebca2464bb16f096b373944585528a2f6084d793105eb9448df01731f0fa12f0fca56ae02f61e00d64a6a208fe32565537c4aaea462955d5af60a5b5711a4aebab18434d64795baec6d06b98e47b4a24ffc7fa4745f2d731c99b4a24df70b89ae46f60e0cd24e03b15c1dfc4c0f79280972f53037f0b036f2e01dfa508fe3606de42027ead22f83b32f0dad6edde41aabb8638f0bb18f03e9ac0ef61c02d358177623ce74a78de56a1c6f3fb5805d22a88d47e87056174b4d6a4e3438c8e36b2666fa51a1dbb303adacaead31604b64cbdfba9d00529456435b187cdbd2d4c152e3fc2a46a27938a6e8340c7c82681f427b37abe9287aaa8a5fe3146787b09e1658a847f82817790391145f04f31def264bcd13d73c4d15f90bb02d67a2b4ae0d0d9cac0fdbed862a19b12cb9f6144ec2bab6496ab11f13906de5102de74851af81758d3a713d6f4e99c52d3e74b4c892eb2d689a2125f61a6d255662aee81f2514906ca4b52daf3e26b4cdd6e1275b728aafb0de69df335bdf3b798d4dd2552bfae28f57718780f09f8aa956ae0df6316d0536601b5244e761ca1cbc5d572f907acf0f4c20a4fef940acf8f98767d64dad17ddce8114542b762329b4cb52ab462626f2be875859005b5eee44f5896f69564e9db8a59fa33a6743f99d28448d07d44ff0513bdbf44f475abd444ff1503df4f02be4311fc370978b776d66d848eb4980bb99d66a18d606f149003e25b8175e5cfa1110d6329889055fb77f757fec1b803646e4c1a3a3b304a4367dbb337d3271d1654fbbb8c799a78a42883ccf7b4fe12ad1ae7af02862436112b627b4f78f5eb9984f74181791fcc786f97c0bb8e6c18eb7f60856988a4300d5dad5698fe9481d32c1d1aa42aa53420c07f6175f430cd3afa6f8c8ee1123aea29d2f10f063e42025eac08eecc7b01706a430541281988731d9101b3933b24524f5fa3267554064e2b96519a7dec980c985ac8684d0bc9c1e81823a1e34c453aaac8c0e91cc958dd3992aa181ffb6bf2510de3e300091f1b8f50e3a33a661ee364ad14da3674ba1ef6ce4576c743ccbcda1d10f52d3d6b60728cc7c63eece0006f6370389bd518cfba3f157c7e38f506624d4caa0932a9e8bafcf4354ef7c0b27da224dbe71ca996edb530c526c9146be6caf665ecfda5f1c9cac44977f5ecaf8dc97320d643980ca470937c105b2c02fbc5b46f64eff6aa1a0f5a07936bb24cae6a719ebaa5309d5617cbf029b29af128b50caf878117cac6d114c1eb632c4dd5ac631a60c0d334811b62741c24a16392221d8d30f0e912f09715c11b63e0074bc05b1cad06de04033f44d67e5204df13cbcc19b2b25449bc5168b92ce8a2920f6243bfb39475568ad9d1d3f2a38fc501c49398f7a2c1a5735998853de43adbfaff52cb332c601ec409155acd7787b6174cd8f167147309c3a4a11e8b887dacf172705431bd8ee6c3b0700da4b38394d0c21ecf501b106f8a65d14cd940a4621635c3b268962c8bec531fe8c6da903e1565f692a5471b1987620350b3531a806a8ee93547a6171d8c511b3f6f81e11761911032c35349716f2cc5b9b2149b4873cadd4a727e5133c87d3049e6c924a108749c40d561b794a4d28d4e9a440e24995ba85d68ddd1782ef505dac596fc353c643033968e4f94b0f189c6099af9a58f9eae25cb1f7a3bdffaa1b947a4fdc71f53ede216cf4513b2a60a9e35ad300358203300da23123b90cfb71ed22dac6ca5543706688d79c285b2909ae3d53c611b4ca952ac5f444fdf59c82b07311d03575877e0d5995a4c5f5b4c8ec3b01e889c5c11a7a892763bacafbc48b7afdc5e864c73a34c128e43ff5109c7e92003a7cc2c8eeaef999d8719dd1289d13d76829ad1ed8b812f9580df72a21a7847cc92ca35dbd29d64c0d4351f1e04b8041f17eb2c03ceb56e970501a6e78f23c05d302a2a64858a5abcb3ee70498adb9874c5d2acc4ab49f52df5ba61942dd7a42c1f137f854c7c1a055240e0fed5de7da4d55a3bddb182b1523616b241ad60f4908153e7b52a08673ec1cd3d31ce566b96b85e18f01a59665057299a9bce216d3ad9d11bcb8e2364ddc493d4b2a30fa6dc5a99724e3084b31cd8e910da05d6e99639dd381575fb62121d89b505c40e99b27d9152dfa9b31f26c7517e6d81ee69d925b43f96f6d198cb141cd8e3b4a9ec0fba1f96e63a599af0c81979daa91d7c33006bab1c9386b6ca40ac241d2b294905a7a895a44158effa38ac77bd3ea5def5604c89e36513368a4a0cc1e83f210df40f9581d3f74f0ce2a17d36391c8699ee0699e95acf2ce794a76496c3b1144ec28634f655c21f8165eac9b259a733d432b54006deceba3d2508ef3e53a92331a94f9548bdf01c35a94761949f86b581bc27b0ea34204763a99f8e79c3b196d70b124baa22c5184c8a33b07aa0cc4ac75e3707655149732c96e699b234abc679579f82d91f339fb324e67387a2f91c201bc2a2e7c2647408cb5e3cbb2c8521acb32df9db7938e88a0c609d830c60f9a58e0d608d93f1b62fe56d760679b3dfb3874aa7b0f0fa52ebc944b69d9e1d18549102a71ba33e2b11a5cc9ecb986d93a079aaf261ac8fc70add79b24247b71a9c410632e432863e88b421232d467b5afff620bdc860eb6eb2f5ef44ebbf81a41b7873b0c5905d6067f0223b2ba539e40998c4e7cb246e219538dffab71ffb7fbe2597dd6b4a945645aa89984bd9249b0c3c4fcda54cc254be00eb2bc927a69cb149592f4a45dd0331752f94a8dbef7c357527633df58b347bea5364c02daddb8b8300ff89031762745c22a1a370931a1d53b1dcbf5496fbb984c4dde152d607f68e4bcb7bd0f05057154b98864977994cbad6440c52742553ad7469aa5399eb2a636edaebd8edd9ac29dce1d987efd06f54243c08cb9ccd92ccd9a668abd331f0cb25e0f728e6fcc15841f88f664138042b085768168419181d574ae8a87ea11a1d333153bb4a666a7d144d6d24dfc461197fb28435a2cb9811da030b15e06fbd91b559184d574b68aabc408da64331f06b24e06b2f52039f8d99e4b59a263907eba35fa7d9472f9201d3dbeba38913a3af5ebbff8f4d677cf681cac4e85c2c811b2409549c74f647ef3699374325817998dd6f91d9bd38ba473ef3aa169c582c4b99f6f66e8c6a4e0d9660c837e922cfc7906fd6455e808d51dd928631aa855826dfaa398b508af1719b2e1f8761c8b7eb222fc290efd0452ec390efd4455e8c21dfa58bbc0443be5b1779296674f7681a5d3926f2bdba221f2e43a6d126f70511d927fe7e1926f2fdba2257602c6fd564b91213f9015d919763c80fea22afc0901fd2455e89216fd3455e85d9dcc39a36b71a13f9115d91d76036f7a8a6cd1d81013fa609bc16e3e2715d2e8ec4daac4f68b6598fc21a044fa6a1417034c6c753ba7cacc3f8785a938f6364c0b9d6ed3341807dc2528ec58cee594da33b0e03deae09bc1ecbbde77473ef782cf79ed7ccbd13b0dcfbaf66ee9d8891bc4393e40d18f00b9ac02761b9f7a26eee9d8ce5de4b9ab9770a967b2f6be6dea918c9af68927c1a06fcaa26f0e958eebda69b7b674890bbd14991c861c4e41cd554be2bf36a3232be212ec5940df3d3d91fec7d311f359e1db3648f5cf9cf5cbd1e242f46e18c9d89e5c51bba7971960c791febf6cd20225f83039f8dd9e55b9a76790e06fcb626f046acecbfa359f6cfc572ef5ddddc3b0fe3e23d4d2ecec780776a026fc2b8785f978b0b30e40f74912fc4c8f850938c8b30e05d9ac017635dad8f34bb5a9760127fac29f1a598c49f684a7c1926f1a79a126fc624fe4c53e2cb31e0cf3581ff8351f18526155760127fa929f19558d7f0ab34740dafc2e8f85a938eab313abed1a4e31accc57dabebe2aec588fe2e0d445f8789fdbdaed8d76362ff9006b16fc0c4fe5157ec2d18f24fbac8376284fc9c06426ec2c4fe4557ec9b31e45f75916fc10af96f9a85fc560cf8774de0db30e03f34816fc780ffd404be0303fe4b13f84e0cf86f4de0bb64c0740dc83f51fd558f7763e0f4e0455df07b64e0347a3a6281b792804b13688f27702f267d340dd2df87b9a7584cdf3ddd8f39919c98a613d98a2157d1457e4086cc4e86892546994809f189327910b3956a69b29587305ba99e065bd986495f234dd23f8c495f330dd23f8281ef9106f04731bf582ba6e7171fc3a4ae9d06a91fc74a511ddd52f404865c5717f9490cb99e2ef253982bac9f0657f8342676035db19fc146de1b06313d9f91f76731911be98abc1d436eac8bfc9c0c99eeb7d624081917e1c0cf632cefa9c9f27f31ab6b9a06abdb211bd7ef64dd466692ddbd656ea1f505dd7f6a89f246b9cd2c66621e66ba75a65ae5b2677a69d767c84e7421a9225fc9b2578cae6449478ad81a9617b04aa5b966a5f22256fe5ae896bf973091f7d614f9654ce47d74457e05436ea98bfc2a869cab8bfc1a86dc4a17f9752c035b6b66e01b98c86d74457e13436eab8bfc1646463b4d32dec6446eaf2bf23b5805d841b3027c1713394f57e4f764c8b452db3788c83e11f23bb1aab5631aaad6f731a93b694afd012675e73448fd21968b5d74737117d640eaaad940fa0813b99baec81f6322e76b8afc092672775d913fc5907be8227f86995dcf3498dde71878af34807f8171d25b97932f31b1fba441ecaf64e0b4b3de3788f5f91cabfd35566bf5d3acb5bec180fb6b027f8be5e07eba39f81d863c4017f97bcc3606a6c1367ec0c007a501fc478c93c1ba9cfc84893d240d62ff8c9597a19ae5e5174cea616990fa570c7c781ac07fc37272846e4efe8e2117e822ff811132320d84fc89818f4a03f85f1827a37539f91b137b4c1ac4fe072b376335cb0d9d3c934abd7f1aa48e60e007a4013c2a03a739394e37276318f2785de41c19327d7f826663b50ac6f4c434305d15039f9406f06a18d907ea925d1d137b721ac4ae2103673be26816c89a181f85ba7cec81f131350d7cd4c2c0a7a501bc36c6c941ba9cd4c1c49e9e06b1eb623672b0a68dd49301d31981432483eaf974505d321e9ee05d62687af531b73543d36d359001d381ae999a035d0d318967694adc48064c7b45876a769f1a63363e5bd7c69b60c8737491f7c4908b74919b62c87375919b61c8f37491f7c2908b75919b634657a269742d3091e7eb8abc3786bc4017791fcc652f4c83cb6e898197a6013c17e3e4305d4e5a61c88b74915b638494a5819036985d2fd6b4ebb6181f4b74f96887212fd5456e8f315d9e06a63b60621fae2b769e0c994ab24c730a655f8c8f8a34f0d11193ba5253ea4e98492fd734e9ce580eaed0cdc12e98c82b3545ee2a03a6a186ab62e90935ec2649a01bcd9cc87c92b95d594713ba2be75ca6492959c36245ecdd4e692af6d113f6d96c63ad67745b43f53d5a57cbb2421ad1b22646235a3a26e89f1e29b128977c594e7425c66394dcc863c92826eb62a6dd24f6cd0ab6b358494abb0d1f1198f5b5311147a42b11c67077ac941ea9594a7b609dc9a3cc74267b628eec685d47d60bebf4add3ecf4f59601d39567c70401f65979d607e3fe5833dcf7c58ce8384d23ea8765ea7add4ced8f897cbca6c8fb61c02768020fc032f54433993a10e37e832ef78364c8edacdb938250e47344c2601930ade84f0e023c18071e82351a4f4943a37128067e6a1ac08761b9789a6e2e0ec7bcd7e99ade6b0426f219ba22176065f34ccdb2391213f92c5d914761a5fe6c33a57e3496de3966d21b8365c946cd2c198b95aa73d350aaf6c7c0cf4b03f80198319daf6b4ce3b0ccdd642673c7639a5ca0abc904cc6c2ed4349b8998c817e98a3c0913f9624d910fc444be4457e4c93264baddd0a54144f6d96e680ac6c5659a5c1462c09b3581a7ca8073addbcb8300fb6c37340dcbbdffe8e6de411817576872311de3e24a4d2e0ec680afd2043e0423f96a5d926760245fa349f24cac8ab9360d55cc2c8c8feb74f93814e3e37a4d3e6663bee8064d5f34076bc76ed16cc7166124dfa84bf25c8ce49b34499e877171b32617c5d8c0f82d9a03e32518f0ad9ac0f365c0f4f6b658e20907e29f8404aae0092cc00af8ed6928e00b31f03bd2005e8a19f69dba867d1836d47697e650db22197007ebf6ee20c03e07799761c0f768022fc648be5797e42532641a1d735f10917da263966222dfaf2b72395618b7a6a9301e2e4b801e0ef440104e7c0e075a86b9ea07355d7505968b0f69e66225968bdb7473713926f2c39a22afc0dcc6239a6e6325c6c5a3ba5cacc2b8784c938bd518178f6b72b106037e4213f8080cf8494de0b558ee3da59b7b4762b9f7b466ee1d85b98b6734ddc5d1583df5ac663db50ecbbded9ab9770cd684792e0d4d986331f0e7d3007e1c06fedf3480afc7c077a401fc780cfc8534809f8015c717758be389980dbea469831b30915fd615f9240cf9155de49331325ed524e3140cf8354de053312e5ed7e5e2340972b76ed66d46cf572eb4aeabac3bf749c6c3adf42876aa51246fc858974691bc19939fab9caa5c582cc9e958e5f59666e575860c9866e3db4180a9fa08f09918f03b9ac067618ef4dd3438d2b331a9dfd394fa1c0c78a726f04619703bebf6fd20c03e33fee7623c7f90069ecfc3c03f4c03f8f998d3dba5ebf4366183781f690ee25d8089fcb1aec817629ee3134dcf71910c98ce787e1a3332e3793146d167ba145d8251f4b926459762147d6186a2cbb0f4be3493de66cca97da5e9d42ec772e46bcd1cf90f26f1379a125f81017fab097c25e629bf4b83a7bc0a93fa7b4da9afc6807fd004be06f3c03f6a7ae06b31f7f293ae7bb90e33e69f358df97a0cf8174de01b302e7ed5e5620b3656f29be658c98d98c8bfeb8a7c93aca3936fdd46a692cc757460376206efbca8756afe08dca9f993756a9a2568174406ac037333e6c6fe4a831bbb05cbfcbf7533ff564cec7fd220f66d1838c9d107bf1d730e911ccd430e64c074f54a3408b0cfd96e7762b918cbd1ccc5bb64c834c0212788c83e010e77632257d115f91e6c44a86a10917d4684eec5b8a8a6c9c57d1817d575b9b81f33e51a9aa6bc15e3a2a626170f6012efa129f18358fd592b08b04ffdf9900c38d7baad1d04d8273e6c1b66167574cde2616ce4a36e10917d463e1ec1fc72bd34f8e54765e0f4fdfa41a4f689aa790c036ea009fc3806dc5013f8091930bd6d94939ed08327b18c6c9c868c7c0a036f9206f0a7b152b3a76ea97906ab589a6a562ccf62aea999a66bda8e01efa509fc1c4672735d929f9721d349ec164144f699c4fe2f26f2deba22efc00ae33e692a8c2fc812a071402d8370e21307f42226796e9a247f097380ad341de0cb980b699d0617f20a06de260de0af6276d856d70e5fc3fc533b4dfff43ae646da6bba913730e00e9ac06f6224e7e992fc16e69ff6d5f44f6f632277d415f91dd9304c77eb363299646e186698f5d6324b81d5290cc07492712b1d80e99c4307609a24e8e59f3a36f4f22ee608baa4c111bc87657857dd0cdf89d517dd34eb8bf7b1ce197dbb83073852c06e9d7363865b3f55583f4cb0feab242b19ff8bf8a0585732dbfa77acf5fb44eb9725cccae893a9d6dfa584ceb18c64ef95b2df465b48d43e275a797798759d67bd41df86794e6d7129b3da22eb1b959ee2079896dd655a9e10d7722a2966e5c02e338bd9df635969a2daccb73eb1cbccd8f89b23ad9254c2de98ccb428b1f45bc1deeecaf5a1bf16b33d4ba85e14d7cd9e8340df579303432ab4de5866715dc25021a77018d3cbf7340b87eef5a1c2f48718d33d307b8229da3af5b4beb1d95a6af9a9d9966d2c63796e6b5b4816b2fcf74aeb7c8b3f4f973dedc2b4ec29d372b0474bc8b9ad27dc65c52ba53b87e02f7e65057ea5a2d9479866bd649a0d09947fc32c1b2a6665dedeb1473fe79c5f5474fb18d3adb74cb73e1eddc6b3dc59c835a377ab769b269f609af49169726a86fd99f34d81752d63757489f5ce28565f2f662904b772c81dae05ad4b96b35600f47ab4cd933edff629c67a5f19ebc302958d718c8d8aacf06a9f61faf593e937cea055d1a787b364a856760bb59425eddefb2b1db9fa39a6757f99d6837cb5c6259dcc74b1f729b37514b5317d3a8f3394582e52cfcd2f30bdf693e975b072cb6e0afbc5ddb69321d8cf26c5fdc032ab3ea0bd0f9d96602af9fc25c6c700191f0764a4ce365d9b7f85e93c106ba7a8d980b0e171d66ff31810cc67558b50d1ec6b4cb34132cdf643349bcaca67196f9bd8bd5fd16b99c64b7171426e98e9a37c83693458a6d12883de57e42a7da7c8d2b58cd5dee9d3f45b4cd321324d075ab7c13d855b8322f6ccd68e723286e5f232d61b9a67d5b8abd3a8d57798564383f409dce9c216c254960bcbac7769395ce053fbb931d2a7d9f79866c3649a8d48ea3983f50a701fead7674dd553fe80e9385ca66389e116b5d86b73016f314f6316501a2f8de9e923a6528bfe88f13442c6d3d4ddd6f3f067489f879f301e0a643c0c477d18ed21cdb55e1265631ccb75ff1a478e94ee9cfe19d370a44cc3b18a1a1ec42c7a099223bb43df5f307d47c9f49d6cd0b22b52a87fd3c1c0af1803a3d3552fdbbe6d18a895cd6bf51ba6d5189956a315ed78249b8558ca5bbbbbdb867fc7741d8b8d50a8e6e028f646a2357afd6b705c15fdfec0f4db5fa6df008d966325ab799758facde7fd3c5cabc284775574fa13d3e900b53cf3dae730369e40bd4ab25e8ad99af22f4cbf71416604b0d6e348363e54c4fb6e89edf8d45a8fa9b791ffc6b41c8fe5a24acfd8d67c346f193abfd2791dff3670badac7ff60fa4d90e9d796f88f7d165a2c9b9092c68a4ba59ce83f82a9920b5352ca0593252c82693d49a67517d48314c66304a0279c1f1fb5a72d9ce5d2d6756ab318514cee036572f74fea19c6b219503ac65a6679f665966e34ce21b97748970f8861fa4cc6fa04fe6584f6f927b1767285a4a51464c684b62fe7a751c31c4cc329414602e433206399edf97bf34cce8254c1742cc4c6e182d45741b4cc749d5515d374aa4cd3318172d33b9f659743a1f7eeccd76a98b6d364da4e4f9aaf66c7ff4dcf0c54c7d83848c6c678b4ce10b3e2f3e3bd225a23964be4b465b447af52f905ff4d45ef1a98ded3b1f886607acbe30132ab5b4d4cb78365baf5536c072c673d1c7b96878e4788b7683fa380b50ce46393f037156df6c0b43944a64d6f4d6dec48854aeb5ebc9fae5ca985e93123f5a88164bd9f4cfad5da987e3383d497d03aa08653d853bb176e8f16c9e608dc7687ff921e8bac83693a4ba6692f8fa6239806f6385fa5ab1f847b023f2d52b5c7ba9816870699075789d0cb9ebabf1ea6f36c99ce3d3c3a4f05323951c7b04feea7db6c144b4583fa980673b0d8b560f5d608d68fa5fda47c2b15fffa2b3df6d700d3a448a64967e2eea3f7b4fe5fc4fcb4b88eb3e4a820def1bb74f7551b6252cf0d32be13546a81ed6f4ffec8d4a72c22258a25a411a6df3c997e7d15f59bcc109732ef374ca9bca4321ed218d3a558a64b7e525d1c46bdb9e58c37a4cf5735c1a42fc17c556ad2db630325cc732f61b3507e33182a1aec8969305fa64107455b1ac1594d9c7149c5569a62b22e0852334086746b8654d96e8669b050a6c12171b6d33f6f29c6a7538f5c480f237b618c94069971489c130ad6e64eadff9eba9f688e697918367a236f1188f5604bd9dd12892553b965339c6e5b564757d1b605a6ed2299b6ad3c79ead588fa105ba274d9dcde987c6541c6d2126d2ed13b3bf69718259c69dbdb07d376b14cdb410a5e734a52af6932baa925a6d712995eed925899131d5bc24a046d77a7a7359a8bc9b95426e74812a40f379e47a7975a77d4c7cd2378a461a6d6b9b4c2f42cc746b482da59309f961c4d459bd698368707993d49f46134df12eb21e7bd60cfd3dbf66e83e9b82c95393095b1a04cd9645b4cc30a9986c9d7fe79672d0fb2bc44297b7b8aa57d91b4656e663ea81da659a54cb38e688b028faa59c26792d3358bd11e9378393696a5d6571273778be33eb194d734c1e2b94cf4d43b603aaf90e93c40b177654765abc89e0eaf9187e9b432886734313707bd657a6c755f4cc75541a21d30ef4ff321680d905e4fdf11d36735e60755e667c47e15f62823f581b415457b9b652cf2b2c892d6d4cc53274cb33532cdbc1b9f8e667d8bb924710de008dec25ace5af5343768bca0774c89ce11883e33cd2ff7575e1d555353e1a133c6c311321e069264333bc9a2bec6bacaad3d8eb082d96589a4a5966a39ec8269b5169baf4a579de157839ba829ba629a1e897955b571b8a5cc3e8b9816155a7546ea6d966e988e4761f322ea117fa26c1633fdcbf95b13d2dc96c9c734391a1bb54a7d045e8c58673ebfba635aae0b52fa92e5572a63b0a656a8f6c0343d46a6a937163531370a982f11dedd5e11282f89075880ab7753fef6c4b43e36b5de91addb3c694b2eb31153bd30cd8e9369b61fdade491c11dd5d2b0f7a631aadc7da3941fb7bfe318f41fa4eeaeb6552b7d93e180fc7cb78689fd466cd8dfbf5c5243d019ba50d6a376ec9cb997f7156529ab0be7e982e27627d77b5f264fbfec45f1347cf0b897dde8bf9598cfe98ce1b643acf8cd709bb67ae0ef21274f4497ca3c2ca7e182b2705a933448a2a73758e66981da4c7b30cc0343b196bed0499890c124b9ee919a18198a6a7049947c762e36c1bef437a25d14fe65be9572a1a0cc23438158bf091a7a91ea769eb873d4f570e0dc6f43b0debcd078d7c2edd8da3f14330ad4e0f32aa5648ec9329a147739f4b99385b94e84b9261a8e83314d3e70c993ea353d487f666ca89bd7f829a774fa7aec3305dcfc47c46ea7df772f0fb5889d6a959df704c83b382f8f774e4165e9ed29b5723304dcf96699a9fa2a6a6d6851660d29f83c52ba4da17f77a0a751c15bd46627a6dc4e2004c8c659a8f4e1d85e979ae4ccf691af997cafc572667ca46634c9c878d2af9f755a7f09c4dccd5112c8a7f994f0974be9dc8d6d9da6cfaefed995abf690ca6f5f9415a97f2f4538bd24cd5038dc534d824d3a0574a755de2fe00e98e82df1fd3e28220639aaaa3b7c16274524b4145eb0330ad2f94693d2b4d799738a3125cbbccf0320ee3e5a220f383dedc1ecbda37b49d3051b2661d9bd34ede0fc46dbc9af56f2442f7e71fc9deb4d7db2f65a59b8e1375a38e04ac0fe81a1f5de9ea1a89719ed3d4175b12d11e5a617c1c859e4fe08f70b14558d528b1ffe940f77320e210e2c87c0f6ff697650cd9a9c3e8ce95a3592d63ef403bcfba173340e2f486645ac84694ba823125a85d729d662187624622d5b84602cb62ba2765fadfa6e9253457fbf05c8d76a34e3dd229456b4a2ec5a534b598dc86f64c6016d66332d96d0031c719a1870a4f6243c26268d89eaab70f17499a1a2ca5b2d4ba300031fe96140e2ea293c13563266637e596117b438299ed08a956259a4f73e1329354d5b46ee86ae2b17cf4a490f9de45a120e9ca9e0e499b4d924471c3633b57f67168b9dc242df448eed9ac34db850ddf4f3c0cb4bd9de3d0f61f93b43563456e19ebae4e22f64089e8a26004568482c25d1187c22b4c5258cfba1163656398c79ac27aafcb1860b1c545383cd82dd51dc2ae34495823565467937ce26cd81966e2eaede110779549e2f604964663dfdd05d68e7f5cea5a7d1206faac97e2f45d6d92be0612bba3803448866e16b69c3d2d0e0569738843da352649db9b10cf593474a6bfdcbada7b56d8a773d8a30df457773f3c0c542e5ce550796da6ec0f06158a2e98e8988581b446831cd2ae335d59b86bd751a488d8273016c7673dec4a230cc4e5d57288bb3e5395053dfe804e22c9aa08e768a930d037b3dca1ef0693f4d1533313ebd870f72a368226f116d3bd0a617b23190c5d9252c4db7553d8b5dcaa569633db0b1385db5a3b14de687ad848f4679d1a95c645ce0f89a7dbb6c2a1ea269354ed01ead5890406f08581a65dcd1d9a6e3649530d4093b3f77e18289ad4c4a1e8169314d5614e5f0c702f616e9e5a140d7b290b490df9e30287ac5b4d925595d95345a85a5f39b51d726e33494e53eb66627c30d23bf24f6bc6e5ccc26803964e9cd1898a3010b8a58543e0ed2609ac0ebc95588119068236d57708bac374fb5e10648be0ed474ee38dd5f9a49484655ca351a943df9d26e96b4c9c26aa97b80a56448bd810e412ebf3d5a1a06efb0087babb4c372428312388b3756938acab1278afbb33e5bdc4795d6120a8b8a143d03d2609da8bc01ee22aa6f5f2784f906ee66207b786b120d27f0489f79a1e9b85e4d1594f7a36272d8ecbf90859b8472ce8deaa82cafb4c77b7a98d097b5bcddb6a53494548dafd6702df76bff97ea438395e446a8581a2d7073a146dcdd4a0f558de9c100b09c5406298ba4dbf5673887bc024712d41bd096799fe5d838867b675e87cd0f42036b443787ce43036ac0d8b7038da706bc16cfb4326c9ab056cd13921d03ebb321444819ee8369344d10098f1cc9b2df21c784f178b2c63298581b0395187b0874d125613144b7bfedcde6f2a0c24cdece590f4884992aab0a4e7b217c241cdc6fe0e358f9af64cc27e9c7d086c21c240d40e60438f99248a465c246edf9438dc1306d25e5ee890f6b849d2ea1218a652c4c82a09dd344825882a7b22536d7d3b40c5bd6d4871c8dafa65200cf449d385d3ee4716b0a4c33c4ef1541587b4a7cc77bebd85330c146d1bea50f4b4e902399285a9dbfb778ee3014f742a7765dce5d39da2cb4341dc2e605bcf98b62de1c96c9f551912dbfa142cbe79d62445755c1485337498aeca14646d37ede0dddd1c7998701848cbad70487bceb4f712715f4b194cb847f00702eff5bc49e2ea137c427704118bf9c340593118a6feaf696f66af9ea7c336256ccacd19590d47b7681598f5de61922c7b81a1ddf2b20f98f74eb68569b96a416f87b6174cd24683339d86ea4816866e07d78581a6cd2098ee45d3de2b31dcd75b6b8681b28da0a67cc924654d99654db29cbbddbc389c6d9611fe1a73039b6cab56c503eedd022df52d1ed458c737a3a00345b44097f3315abbf2706d4e41cf16cf3ac95fce019b4be4a51c8a9297b437901778c9619ef27a93bc14976ee7059aaec9d38c2dc953588f9fa7d4e6cd0b3c6e94a734129097923fc9539aeacf531a2ccc0bb4b23c4f6939759ef294b04c667c055e5e4254789eef3c6a9e34ce374f1a3f9787ac60c8f359009287042be62509f8c94b29803b2fc5854f7969887bc84bb2d14c1ebabb4a1e32f09387ce53e6f9ce40e5293495f3c07626799e29bfbca4fd933cc528debc809dc43c24c6c9edcffd96f0e62103b5793eede1bca4cb4ff2024f68e5a5101e9ee75a321a6c7f81bc00b3456edc604b51f3020f1ee5056c3ae725595197a7b9d2ddd9110d36819c9dccf2e98e68afe4fcffdeac2c9f6e56f62a25e17dde2bb0fb09af990e4fa116da93f466d752a63ef508b69fa4af79d26c9190e664ee1aeca3d544fb5f967a0d570fa15a108552e925f404c12aaf9bee66b969f3db567d36e967a9618cce3aa6e83c30e6d0f94636d1d93f9474ae0574be994d74760f259dab41617f2b9be8ec114a3aaf0174be9d4d74f60c259d4f023adfc9263a7b8592ce37019def66139dbd4349e7ef80cef7b289ce3ea1a4b329a8d97766139d7d4349676740e7fb26e9dc474267f0d317fa9aa376af98216a2f05d47e90890e266d5b66bc83b99729cb2c8c38f47d6892beba2c696714da3b569810201402f2e808a8206f5726bce402d44f42f16977b28f393a6b99a2b31db0c58fb289ce7ea1a4b309a0f3e36ca2b37728e97c0214f64fb289ce5ea1a4f35640e7a7d94467df50d2190585fdb36ca2b34f28e9fc0858e7e7d94467f750d2b910d0f94536d1d93394749e05e8fc329be8ec114a3a8f00747e6592ce26c47fb0c35dd07b9ba3b2be292aff00c3705f670b953d4349e54230b0f14db650d9239454d601547e9b2d54f60a25954f022abf334965634ee53c1e105329a5d23e01be873922ab9822722ef094df670b91dd4348641120f2876c21323f8444e602227f3449e4dec409260c1a544ddf5fc6de0ddfeccf21c421f62793c4b620c99aeb70e10b3c31d660c17f266288d66d60c8e36793b4d62762e6a7bbf5ff15449cd84b9f6560eec7585d5e0310f88b49021bc6099ccd5eb081ece0d60c91686c0ee81e40e2af9928dcf9ecff41c2eec3ec3327025a7fcbc4100756ab43386ac1f92667c98dc5118f0275fbefd94467f750d2390fd0f987493ae18a21957583612efafd4073e9cfddd95bf7da6af8ec7429b0d3bf4c5229d607f5c97c688c313b7c14d8e1df9920af5fe6c9fbd31479db0179ff98244fac800b56e1189d2b37568c4780c610edff670d9961acbb0b0099916c22b35708c91c02c88c66139906c7d68d91391c9019cb26320d8eaf1b2373202033279bc83418bf6e8cccc180cc2ad944a6c171766364ee07c8ac9a4d6486b187330090592d9bc8ec174232470232ab671399fd4348e62840660d9364dafbe29472224bad8fe838107d3d7ca3e96d89435a4d93a489b11f7caacc1dab11bed99d8b81fded91092af161341b8a4e4d189d196f638acabbc0305a2d935476e45496592f95b1abd8ca0c6e43e35ed2379ccdf694f067f0bd619654a566296f688af23920cea8b649ca9b2575048901d806eb766341ae8f01775027db083558bf1b23f4494068dd6c23d46085658cd0fb01a1f5b28d5083e349c608dd0a08ad9f6d848671a1c04380d006d946a8c1b17863843e0c086d986d841a6c361923f4164068a36c23d4e0f89231426f038436ce36420d8ecb1b23f4764068936c23d4e0d8bc3142ef0284ee6992d09a8cd0856caf5d7b5f671abc6d7094c9586407cd0b4159539394f526eefe3cdd14d70e7fb521606f5d7c5441926dd943377077f68aa53122abcdf6f207474dcd2b815e7eb3dd394605e3e28d527991299b7e0e8c51ed6592ca3a8c4a6f183715b898d977f8464a3b0077d0dc2475ce4202ba4628e30b098cf9d30b4015d4c2248174bb707bebfe61d6ffed03369c63000e6464d2ffc247612eb0c1bd4d52289611882ac95e60652fc31a6b552dffaec5814f800a661f93b47620de91fb2206e66c763fdcfa8f369e56b07a7b391bc7c7e73cc318d87019a8825a9a24dbd9ebbd47e643664b4c35863a01fa724dd227d668c09544f2431dc2bc8ce0195029b53249a75817dc1d99850ffb0ab75341d5d43a138df460512161f490bd01956d32e1217b90be99f790c6e86b003c645b93f4c9b6d19d4aec039556b3c382ec51a512b602b38859eb7c06b7d8ac655e638adab300b5ed766f210f7bb4c8dfa090b7df9d831a05ac9d39975369706cb3bd292abb82e67b874cf68a4a2d21a681fe393e5664b057646cace879406b5e26e23cf35981a77496592fd1d3a816c55fca50f3c858a5742f6867ee6bbab80f63a7742ee56713da8bffed15c1b4d92e4e6cb4cfc10c5f933d0778ce8ea6c79144937d314fbc880d8284dd1acf031476ca04857dff7514ee0014763649213c40b39cb88fd7cc1089c61a416d8057ec9229129d93302b887d6270b8378e7a1e5862d74c8c08612dc9c4d3ff0c866f19a3731668f674cb263a8d1ed7608cce93009df9d944a7d13db28dd1b91ef4c0bb67139d4637753646e71640678f6ca2d3e896e3c6e8dc0ee8ec994d741addd1c3189d1f023a7b65139d46cf663146670c5445bdb3894ea371eec6e86c01e8ec934d741a3d9bc5189d03019d7d333d6d11fcf43f83d1c4c64effeb03a8ed6792da76c43d40bc9ccd061dce868765519cffb699cb4e80e8febb737ec81db26d70f4dd58b861273034b2dfee9c1f725369b0f81ba3f227d08c1a902d54f60c2595fb83023e305ba8ec114a2aab032a07650b954677f13246e5ad80cac199acdfbdf1eda22135d5128e564ce22a8bea345829190bf2aa0f881e1216a20d36a48c11fd0ca8b286662204ac3b9f1af97784807d4c1cfa86edde5d6d60933e8c1b549d0a2c717826a884e7bd8c2313c968abe74485996f7db42a131375c6a83c1d58e5884cf4f085f72c075dcf4236fffe6feb785e072aa602f3b14a7061eb6c7e86c6701eb164438db2ae25164471082b9fdac04e4766229e2ed8e26b781291411b9d1a31446b4bd0a31f9589e25f69358568b349a5b164b42f65cc62cf03d48ece566a8d0e9e18a3f616e00cc6986e8916b07abe889d50546901b84f2c0ae35695f5017d634dd2d788f8b74485a64643bc8dad7adb02eaf7fd33118b1c743f9030ee4957086cf2806c22338c3b261e08c81c974d6486712fba030099e3b389cc30ee94380c9039219bc80ce31e7493009913b389cc30ee9038019039299bc80ce3de730300990766139961dc19b13b207372369119c63de7860232a764139961dc11712020b3d02499b9c43f3c2cf94ef206eb77633bc95f0da639a6eece434dbcc18c06bda8b150c621c056a765139906eb7763648e01641e9489a9603a01f7efd975ae1ba06f7a267692cd27b27dbd281825b13253841a9b6a7b1f107a7026d60e5342ff5d6b87cf05141e923d2768195d60688ccc2ea0e69e914d6486f1d8dbae80cc99d94466188fbd6d03c89c954d6486f1d8dbb680cc43b389cc301e7bbb0f207376369119c6636f5b0132e7641399610ce46a01c82cca2632c378ecedde80ccb9d94466188fbdcd0764cecb2632c31855dc0b90599c894e649f7f5d27723271282cc99e43700d5aa3b1f543d780f0c1f9d93db66ed0731a1b5bef0d82b716ec9e95ed41e2330df6d78d8517e6006a176662fbf21ee4dfb97df9b3c005946666c1557f8fad66803e6345fc0340df6199dac8cf5925045763185f1f64cc0637821a7d51f66ca11fc6d1a22980cab24ccdfa087b1cc36a7167c68746b04fe4ab84c2bac9e44440e86293847621c10fc3536d3c19ecc31bf3ac9b400dbf24acc41b1c893246fc7040fcd2cc9cc2d12bf32d02630ea30ae8e197676277b0e02b36c2184b970b1a588767139dfd4249677d40e7b26ca2b37728e9dc065a0715d94467af50d27935a0b3329be8ec1b4a3aff02742ecf263ac37994f85b80ce15d94467f750d25904e85c994d74f60c259d1b009dabb289ce1ea1a4b312d0b9daf4400a1d8d9a64fd9f82d0138be8e745ecf5356ca0d93eca7e3213cdde22c018a10b4c11ba3f20744da6f653b27750b2bb93256414fbc86626cc635211d0883fc224957589384938e3fd73634739ae0776b8d62479cd49d05332dd47e6199c8e8b460c91fa1018333a321b493518e06d8cd48301a9476523a90627488c913a1d907a7436926a30e0db18a95301a9ebb29154832d5063a46e0403c9c76423a90603c08d917a0a20f5d86c24d5e0549d31524f00a41e978da41a9c863346ea3180d4f5d97b2c8ac9ddbc4d1d8bd2035457c79ba4b613714f2dcf63cbb16d610e6256bb9045e1559203d99a63fa9f883e8109ff1bd6c67f0becf90493a4f72489413eee60c811d6ff175bffd2bf6d45e890cb7cb68f2d157602a1e3022b59128b2cb7b282d97a252964dd5e11ed623013c69bca044abec884134d0fc2d8a35a4e50843d7e65874dd2d020f85bf8c224de0383301b3231de1a2c688dee671fc69579fd807b38299be834ba7bad313a27003a4fce9e8300c2b8cefe3840e529998990ee93f9f1d62ec6e8037ef2d46c2ad8f9a15c40360658e369996cbbc2b3149cfdbf830542666807fb81a676617e1874184ecfd66dd67b847221cf17c03d9c91add4760f25b59f1287da33335171f524fdfe4515d750e069cfca9e75cfdd43d988ba14d8e2d9d9446618372bba0c90794e369119c6cd8ace00646ecc2632c3b8fcec1240e6b9d9446618fbf0eb0099e765139961dcace81840e6f9d9446618372b9a0fc8dc944d648671b3a20580cc0bb289cc306e56b419907961369119c6b1a66b01991765cf4e3b060bb9b19d76ce02c31c1767c77168061bebc68e437b100cc45d9289ed0d5496e084f114af23805d5e9a6d8486f18cb9b580d0cbb28dd0309ee6b51410ba39db080de35973e580d0cbb38dd0309eea550908fd4fb6111ac633e7560142afc83642c378bad76180d02bb38dd0309e3db708107a55b6111ac653be160342afce3642c3b87e790920f41af31d4e1a73bfcafa900abac27a791e58b7ec1c0614be7e7b1be2d0786d76ef901bc6bdc60e0773ecd76522fa832e0af7dbe04d7c504132b4b1eb605343257f020770bd496a6b736a69c2f399dd0aec524b1c63c4553165930414f91b4c12b72f7147d855b28099291c80aef6a864fe532552c9a0133016a7740f18d4db6292f096a88f0d16046672ad9329725703726fcc6672c368b92b00b9376533b9065bb0c6c83d02907b7336936bb0bf658cdc3580dc5bb2995c8323acc6c83d11907b6b36936b703ec018b9eb00b9b76533b9610c193f05907b7b36936b709ec018b9270372efc8443c7e2fcb7bfe7be2f1e780b1823bb3f7349d30b6068e07d4de95a95323c6335b5ce4596d5f607db68ca518e61dfa7a1087d0bb336dabf21d510a59c1a7a16af319dc626274032f63fbf76d055ef49eccac6aea9e792f6a2ca6af2328eaf766af173518fa63cc8bf60296799f496aeb10bf11d70a73d4d534455d14f8cbfb33b183143cb6c86f5f920c5442c62657de0133005b4d923a88b807b2a96fa4132c36c00856a4a9505481322b21f7d647b6d0a5444c17d28d8f9ded908ac9bf6f2ba4df800f7e201341ead8543784a3ad8130aedfbb1f78dd07b389cc30aedf7b0090f950369119c6f57bd70332b7651399615cbf773b20f3e16c22338cebf72e01643e924d648671fddee580cc4777e7e9a5eec0b530c6a976260e958f65668474b6d5eda42d4edad6cc50c88fb1766529a0eff1ec18751a41e8569be5cc62ed0e8051cbfcd314b5878342fe44267631c33ca6b7ffd3cfa4cf3466a9e3019d4f66139dfd43496725a0f3a96ca2d368cc94313a5780fef9d3d944678f50d2b909d0f94c36d16974ed89313a1f07743e9b4d74f60a259daf013ab767139d467b43c6e8fc0ed0f95c36d1d9279474360135fbf3d94467df50d2d90ed0f95f9374d22ef2643e0d424f2359c20068d7328ce10cb4bf2768db91a9b31bcb88bd8cac2c61422e037d746393727f8149b9174c52d98624ce748e24ab083d13673911936d13adcf8b89389da1c8fa7b222bfc1909bf31b66aaf13b0d717b3e92cdcfea1dc82a315b0d997b289ce7ea1a4b321a0f3e56ca2d3e804b0313a1f0185fd956ca2b35728e9dc02e87c359be8ec1b4a3aff0174be964d74f609259d3b019daf67139d4617d318a3732ea0f38d6ca2339c7b959d0ce87c339be8ec114a3a97033adf3249675b46e758eba54984ce5216f34fa9c8dedd4c6693458c7aba21c73ceb6ffbcd51d6b5c40237b8e181b1de7d1ea0f9eddd795698db9f1a5c3f67ace3f93718fd7c275ba834ba099cb91d73c150ddbbd942a5d133968c51d91a50f95eb650d92b9454be0ca8dc99a9957253081d865b6e210f6395d334362a4ad77a1431f830af945b012a9ff74d125a9f88d3157bec8ea0af36a608ac0a46933e3049607b46e0480640b5b76daf98c194586914b0751e59d0503246756360ab1f9aa4ba35712fa8994fe8a2580aa77234bbc91d754c1dcdbe0334a076998f4cb6977e2db75ea9dc7df66aacb2da0bd8eb47d975f46a1803bdfb02dbfc389be80ce7b937e3019d9f986f95daf3ef7673e9df56d09b8182fe69f69cf61dc675466b80557e6692ca86c469e017580fa8a8347ebe906df4ba28d48dfa71a04dfa7926d617e5f3263dfdb4c87a8dc629899732d4c0376791a0707f6192ccba80cc7fcb76175301795f66ebf1d24647e78d6d77713328e45f652bb5e1dce3ee1e60b55f67661d5c8fcc177a63f41d0ceaf06f4cd7e1e398de76cdbd9445cfcdb37ea2f348cb32b1f3bdb13abc01b0c16fb3e724c53ea13cfefc0ee02bbfcb2632c378fcf99d80ccefb389cc306e9f722520f3876c22338cdba75c0fc8fc319bc80ce3f629e702327fca2632c338ac710520f3e76c22338cdba79c0ec8fc259bc80ce330f04640e6afd94466188f3f7f0090f95b369119c6e3cf1f0464fe6e92cc162471a996d3759c48e65b9dcca2ff2bef3ec0a32aba3e804f5004a5298228459a62f015219dd8430946c120cd828a21d99040209842b3f75e5eb1636fd87beffdb5f7de7befbdbe7e77e6eeb2ff4db2b0f9fcfeb3e7e47b7ca424d9cbe697b97766ce9c39e32e3fd9846bed9a3767fd64e2ac7fc839559e3844a2519e0e2df4cff4aefb8497b271772a252db7e3768819fd25eb00ca5c9527cb1f0b6df3bfd240359e2c7f1c80fe2d0d54e3f6822301d4ac210c54e3c9f24701688634508d27cb1f0da0eda4816a3c59fe18005d4d1aa8c68a9d0701e8ead240359e2c7f3080b69706aaf164f9c301740d69a01a4f963f02403b30416d3e524934ba541dbcc4666fda2f8e1f0e41c31bc9c2dbd8c4f13ab2f16c6b2c6843791d4f00de9a4cbc55853b4a8397cc36b692520337dcb18c45d91df6b1ade5a31d16b6a1a4c2d7a11d7662e2c5d2b3b283b7e79d8f56026d3508b57566f2858b14552e766e5f1a96df0bf7ac35062f2c8fbea14ab703c8163dd397a6d509da621726e63f3bcf8d3814e79d340cedb4ab8fee26b5c5348db91ca3a09576f3dd4a533f0f93484b3b0f7306f4e46b3369639b52130b4ad69b547703d3572c696b433f40eb5d87491cdfa36efb7bef7bd469eb944b60cad89d09183bde3195817b91a973a08bb937fee319acca72d03dad2b119518dca0a1ae094fd31e12518941621aea57d0527b4a44258e4e69a83f03ea7a1251894bc234d46e70fbf74aef905f7b42cd46d0e7af9fce60dd1837099d19a524deea435894f7c0adbe0193b2f5878f111369682193b97093f796c459a892f34ce0ec2389334b25e74970b3f795c499ad92f34ee0ec2789334725e74bc0b9a1244e6a4e278df353e0ec2f89334f256717e88a0648e2a46e80a1710e04ce8192380b54728e05ce413e968d73d291fd410b226f0bcfcac1fc65e3548b9c65abdc28f806606e240953e346c1af01736349981a4ba5bc00984324616a2c95f22a606e22095363a9940701335312a6c65229cf01e65049981ad36b6e02cc4d25616a2c95723360fe4b12a6c652293700e666923035964ab9113087499a8f53cf61a5cdc7a7c17c7c73499cd45382699c4700e770499cd41ab034cefde0661f2189933a78a7715e0e9c599238a9275dd2381f03ce6c499cd4521434ce378133471227f548701ae75fc0992b89935a2396c6b901f4ec799238a94782d3387380333f3d5bb652393e8c59389f757c5831d0163069bb4769f382ffe746fff132b72d46fb7123379838e1c874a6c0c6df7ab82146df8ae5c990025bc8a4ec6ae25bb38a824fdb2f6c309a4f10aa01ba2d9874835b7846b6bc6170747091b9c1bf5aebfe66bfdad31682612ce4f76098b4a5066462049486fc0e206fa50199f8a4a52147a0dfdf5a0332719589869c09c8db684026ae8bd2901f06e46d352013a70934e40701793b0dc8c4441e1af20b805c94ce0d60891309627ba54d247e8531c4282994d4c0358d7216b4cad15228a94b2a34cace4039460a2535fe4fa37c0028c73229fb45296b822fb28c11b3c8d8addba5c10b2a8c3db330392d71f64583bd1a9e9cc54cd8014d606b4cfcc48e78ddb195e5a4684cef5906bce3a43c02a8fb3e692d35031e01db4ba1a46e52a4519e0694255228a95b1b6894438172072994d4bd9e34cab78172c7742eac2456af25763bb4eab5f9b03a309e4939d05196045f34c98145822f5a107d79bc679f61e638f051c1dfcb833f879f2f0e7e8f0497ad50b8fcb2a689034ff0b1e29facad260e91b282d6aa71e7c816304cda491227351c42e39c0a9ca54cce8d4de2a0bec1d810ddff9fb5ab4da1cb9ac8841ede043a7c0361b97f3b6f9ae8e6538b8d9da0c65ed49a5c16223e2d97653ce0efec63bb7896cb66692bdbc50f8131c2a4748e5cf5cff2abe0793b9949d9631594b1ef949a6e1169c7ca69811b7a0a93b193fb4badfbde2b830b15055fbe387871b9c291687f13479bca1feaafacedd9586943c26547055ad56e881f464e8937f7ebac6ee6786895d3a403136f7b1af08900bc8b7460625e0a0df82400de553a3031bb8a067c3200ef261d9838a1a5012f05e0dda50313b3aa68c0e703f074e9c0c4641f1af08500bc87746062251f1af04500bca774606245341af02500bc977460e2fa170df852009ee123150381315438caa56644a21fc3d06251f00eaab95d1ced54bd0b2048b3b78f5d850da62af874bd69cd3170d44570da4170bd81b64c2a2d35eb8546fbad89d3cef4115a4cb632160f2d128338b4d0627f68a1e54cc62ec15f269a70177699090fd528712dd33e51f58517d786f657e1639520f9e9e098e1421ca1d2165c2e810597487a175cc24bd10f7c19cca2bc156ee74a1f4fc5112b9e8c15a6dae0998d1e96006937f7337073cf62179fb36063dc3f1c712f2d735fbac4c48fc09ce43e6b8f1a26eec89ecdc21c0f9855ec13c343aa96d7ffeb79782359789b025eb58fba1423dcafe1ef93824f56bb76a9b922c0b140389b49d8190843050f6cb45e7977e895e7a4b3574ecc3a25f6cab4acd3b7a057aef14139c224df47a2bbc8ccfb7033cf6552da44d6f1eee9672f308fdd81d032f1fa02d83c1f1d48ae696b858d0e04c25a1f7bececed3bd6051b1add9b181fbca4dc8d0b4bcdc2156dd1467ae6abee992700ec7c5fcfc5885960c224db294e22965fe7a58dce64513e05bdf53e3e723eb3a32345af399f5bb1c260bf015f1d93afaf699a186ed166b91bb8249806b614d9c977cf5462824d7b56ab7c1e566eea7d1471b76d729cc3dc29f835e296bd2adcc522c1bf54af7a40be10da68437a8f98c6bc648da7dbec0d1d4f233b24111b14797e56d27aeda3016f819ca3ce35866b3bc02dbd50ce51e7c4ae8676d4f97d30c75ee463005418fcbfc00dca1b8db7390ead25fe0e37f5621f1b0d932f674d4d58d02a64ded89d599c7de0c65e228973a44ace2ec0b9af24ce3c959c77c3cdbe9f24ce5c959c1703e7fe92380b54727e079c0748e2cc57c9f922701e2889334b25e79ec0799024ce1c959c4700e7c19238a907fdd138eb80f3103f27c5a76116440b6d4c07be437dc52bc38bcc0fe6e08d0ece7312156d4af907601ee6a72da621cc464b70ce8680c6e192ce4e1ac90cf9d26eed32588a38421267a14acee380f348499c592a398f869bfd28499cd92a39af01cea32571e6a8e47c1e388f91c499ab92f323e03c5612679e4ace0ed0151d2789335f25673fe03c5e1267814ace22e03c81c9d9d15d20cc6eb32fb357d697e41208ade03a51ee11a7c4623cb4b2905b424b3c49cef99c1a0f871802eb91ff66526ed20265e2ceeed1c6d68e9debfe6c73861bdd25c72649722562d3525bc7c123e1643fe54cb3db50bad66468ab4ba514e2a7aefdd06efb1f60e07e8a144aeaba0f8d723be88c4e9542495df3e10d9980f2342994d44c0e1ae5b54079ba9f5d1485febb1adeb0089e8f6730f9faafb22516bb17cf7543f789c19f6a5dc91b0fe576f7630ddf4740db3cd3d74ef0702f85dd7f36cb6d52a9339af79b9d69e28467c9a9ec4e2c7a47db417114dceacb98943d8dad1b64e73215d1174d36c9ea6410f7e7d29e991da14d9e2db544187560445b41df07663ee748a5a5ce8468b45743ab3d97493b083aa37217081eed08e7b9ee68bc49dca03fc1754c55c1e5bc553aa075567740eb3dcf472e52f26d56d859e530ab0cd3baabafa1bd9e2f0953e3eec9ef01f30249981a8f247b07302f9484492c654bc3fc0a302f928449dc5149c37c0b302f9684495c7ca361be0d989748c2d478acd8ab8079a9244ce2509e86f926602e9784a9312cb2390cda2f9384492cf14dc31c0e9897cb383d90d88fd34a7c1f0881e32b988c1b98d66f0024dee4b44d56d3a15d5e290d9478a3d340f700d0aba48112279534d01d00f46a69a0c489250d746700bd461a28312047039d04a0d74a032506e568a0bb00e875d24089934c1ae8d6007abd34508d7bd3b703d01ba4811207f634d02200bd511a2831484703dd1e406f92049aad7460bf336489dc2c0d54e3d4b314406f9106aa71d8b40380de2a0d54e3c07e2c80de260d54e3d4733480de2e0d546370641b00bd431aa8c661d356007aa734508d03fb3c00bd4b1aa8c6a9671680de2d0d546370642880de23fb486ee2208a7624f745c07baf8f7d4876bb96f77d487fb2f82603df7d4cbecc165a275e705cf091dae065cdb72a8c8e1ee7191ef064bfc5cae0e3d49d494b583b9386c302f3fd4cee754df3332aedc90553dc43608ed17cba4b5f883d3d20277364a4ca74efaef000785012a6c674ef5e80f990244c8de9de9d01f36149981ad3bdbb00e623923035a67baf0998ff9184a931dd7b2dc07c5412a6c674ef9f6168f498244c8de9de1da1653e2e095363baf70680f984244c8de9de7d00f3491fd5199207e93044476c97b4c9e4a5f0c47ccac789d5b1e36c6d1d3a5b79cebe655b6c65d14a603516fe3b0c421d4fb3cb5eacbad652783230b11ba29d0cfc2c403e230592d8226990f301f2597ecda529d1efbcd4549af12eecd6e02e640f3099110dc1d9987c79f0e7f0d2c5c1ef91e092153c5cdaa1a2f62a31dce7d2538d36951a22c44008ad82c8d3d0db3fcfa41dd8026d1824b678f3cc0eae64eafc952ed3695ca25b0ddaee0b4ce0754cac6c6a9e49c36150b445b8b76110f5a29cf3d635463d8ba12dbee4639e141b8f8675c3dad618f460e8f15ff653a432dfffe230ad2dae031dcf2b924e1c2c5499e23d149e92af4ae2a40641689c1b00e76b9238f354723e0e1dcfeb9238735572de029c6f48e22c50c9d9096ef6372571e6abe4fc125ae75b9238756ede9a0f9c6f4be2a456b3a1712e03ce77247166abe43c0038dff51d9a9b1afc1e9eb035d65dc67e2e123d8a67be9bc58787ef500b06d1d267df8509e67b4c5afb9789263ce54d5f04b31bb4c0f725ddd0852a37bd6c0883a10f247152d3b9689cdd80f343499c792a39ef859bfd23499cb92a392f01ce8f257116a8e4fc13383f91c499af92f335e0fc5412a7ceedac7b01e7679238a975b9699c4702e7e79238b35572d603e7177ed6c947a4639d9cb61eb91a8c34bf4ce7a95afa7336ee86b5c9af98947d4de23ab9756834762375d3d5f2a6a7b013596947e9cc07d6af7d241bc658ab57927aa0f17ccc12880c7d230552630ec7fbd022bf950249ecbd699087438bfc8e0999639a66162d32e1e163e125b0f444fc04b8d48a5414057faa731fa33e16b66255983f057e08dfb7851f02f19142fb216c0d3f841fd299ae98d8c911f715d31e2aafc088f64726e59026ed79a6699edc9d7a1a38b1d5d216516643abfd89493dc2341df12683ac6fc5029fa727f73016ff43c0ffb38f43a5479a19ee03f61f2f33f60c4f4fd35f5a3ee90b264ef88b8f704c6a69e236caa071e77c218c8c7f95c449adcd48e39c089cbff94893883d5febdd33d5c6138aa3b776a48dcde12e03dadfe59c26afb190cb2140f987cf015775f4d6b7b1ad72d7425beef9c7452f501a5c7276f07bb97b5c105b6d318bfa26e8f1ff94540ad326496a2cc9be3ab4ddbfa4816acceceb00a0ff9506aab1e0f51f309dfd5b1aa8c692ecff0550db298a02d57868c0df009a210d54e3b11619f00c6d270d54e3caec77d042579306aab124fb4f00baba34508d792cbf00687b69a01a8fb5f81540d76082c642270da6caad66b526e69fcdecef6951ff1781b683545aeaf94b34da474d9cb62393b67555f43406f84e8456ba269332f5f3e7896351daf9f3af42c4692d2663ac5e4981694be9953fc30dddc9c70d9d3ccc1c5eaac6a1120321835994f7c3aca8b3ac2152b6cad867153c21bb4803d518fbac06d0aed24035c63ecb01b49b34508db1cf0a005d5b1aa8c6d8670440d79106aa31f6390b40bb4b03d518fbdc0b40d79506aa31f63903407b4803d518fbdc1b407b4a03d518fb2c03d0f52481662b1d36ed0553cf5ed240350eecf704d0f5a5816abce5a703e806d24035764abb02686f69a01a874dbb00681f69a01a07f65300b42f13b49b89953ef05e479cb6d036cdc4f1fa31f106987f7a043ab13ba29dbe702eb4cd0dd3b9ec9198f24d1c2a2d635136c2025c7f26259ecf6dbf20bcd03cd7163d2dc3d16ef7036046348089b87e026278c2524be909ba77cd7d004fcf813e16857382ffbc773eed32487c9bc1d371908f049ae69d4f2a2934c48e8776a31f03b48399b41b99c4bd4835c197ce725b622d5d5bdf877422306fe463309fac7f6f5ae0c86e9c252e1dd38a1c3d06bdfcc6d24089c90d34d0fb0074883450e2fc9d067a19806e220d54635db3b30134531a28b1efa7815e0da043a5811263a034d02b01745369a0c475241ae8cd00fa2f69a0c4e0080df43a00dd4c1a2831fd86067a07800e93064a4c10a381de0aa09bfb9eebb73c0d9de20227b67446a5bbdc5c6e6474398bf676a01dee230a95e50a60b595a354df8398e8081f31fa72934aad26e2ec9d465961e294594cca5eab786a2652e63267ee34cc13e0b6ce9684a9b1659e0598399230897d390db30e3073256112479a34cc0300334f1226712844c3dc0b30f325616aac673713300b246112634834cc2980395212a6c67aa0d301b350122631fe4ec39c08985b48c224ae0ed1302703e6963ef2e962ebee3669a1c24c343653a96205e2ca22491ad78a22b0debe958ffca554c372d4e355699ca5d05ab796c4492d5e45e35c089cdb48e2a49eb8c8e3849b7d5b499cd49d1c34ce3381733b499cd4032c699c8f006791244eeafc88c6f91a708e92c4493de99bc6f923708e96c4493d4b99c6d90b7af6319238a9277dd3383701ceb1fcd5f589c1a76d56f28aca05668e43b67b8eca833f87972b0e7e8f0497a9e081d26a82f53171d0e2f464d287dbb872825fcb8c3d8a22f6fb94e062734c247af3d3687baf46a25d066d759c8f5b3fd5fd9a3a6b7a6f02abeddb4be21ca992b317709648e2cc53c9f91f788eee208993bab649e3bc11387794c459a092b33ddcece32571e6abe4fc0c5ae704499c592a396703e74e92387354729e019ca5923875d653dc0f3827a6b31243e28d4e9c11d16a79ff09b1a59da550e6a8a43c04269793a450522bd0d228fb03e5642994d4fc4e1ae5a34039c5cf8682b65453e913e86aa632f96205a9ec3f5ce9da61ecdaf3a25fa22f812603f0a631f17a9a78851a5baea2a1c5407188dba03024bc134c16776142f635ab1a3f629d8fa2e03275aeb6173503e9f10c12eb49c0baab8f8d81b104aff02c98eae0adb4adf3890e85ce66371ff39cd4b65f91f759d29e9fa36070bebb244eea5c87c6b907704ef7d11da5366dd4779b1f00907b4881d4f8bc9c05907b4a81246e22a0415e01907b4981246673d0202f06c8195220891bae78f36e80dc5b0a24711b200df20e802c9302498c9ad3203f03c89952203586d49e01c8722990c48dfc34c82f01b2420a24b1bc040df273808ca4335e9e3851d4b8b7b71e282b7deca04c6dce9da772c65d0701b6599230351697a807cc2a49981a8b4bec0998d59230351697a804ccd99230357640bb02e61c49981a8b4bec06983592303516971807987325616a2c2e510298f324616a2cafd70898b592303596d75b0098f37d4c2693271b680f029f0b94fba4775e1e5eca6e36a5aef0d05260ee8579791d937253d3fc109c7297af8107d9b5f6c03b6217453bf06e396473d433c9bbdbc776f0c50837ded83cb886848fe923fc061e000d3e328c5ab32d85d8d3d352ff5f07d04669a0c4de9e06fa06802e9006aaf118f0170074a134508d07d5bf0ca08ba48112a3f234d0570174b134508dfbd15e03d025d240351e03fe2880ee2b0d54e341f54f03e87ed24089517a1ae87300babf3450e2fc9e06fa3c801ec0de6835d62c3011f7164ba261bceae0c5b6c6512d739a49dba5668b7bc5f00e4c679c29f11460623ba41d4d5f0f418f839894fda2940da6cad883e95b73b215b14f5fce823d1cdae8c14cd8c1a669002f3cb2bed8d445bfc45ed06e495d79f45ee312dd3910253dc4c78ea111eed7f0f7f0ad8c77adb9c13d5fc348297ddf25adb6e1c3d0291dea63df65accd86ed33dcca5a62c6b4b82c926f72b9adb43d8bb5129eb187f9d8939eeba8daca9ef41970931feea3b74f6db553e32afc36d0291dc1a4ec0dcfcbd80ef5c9ee62f383dbdb962a0deb6b86329af7aaff06a4473249ffd9e1a0c4d64a1b424d82e7e6513e9e9b39d1feddeb7393d6323781e7e6d13ef8b24d9e7f3eda5ae61ac0774c3a279963829736062f0b93198803a0212ccadb80f2589fe34a5b72629a4b66687478c9e7ee4456dadc7d1e3c1f8ff351ac270db7376d28743ff4dbc733f1ec6cade92471821bec54052f22566ca7d10d04ba137ca41f264ff34a1c906bcce5bc0e9e8d274ac2d498cb793d609e240953e36eb60b01f3df923035ee66bb04304f9684a97137dbe980b95412a6c6dd6c6701e629923035ee665b0a98a74ac2d4b89bed34c03c4d12a6c6a5b2e301f37449981ae3e82703e6194c4cacf45a6d9ae76ed8cf695edb99082b8e67fa58c04dd62a9b1f8a4ceccb690bb8bb4344e82c499c852a398f02ce659238a9234d1ae781f0d43c5b1267b64ace2b81f31c499c392a399f00ce732571e6aae47c1b38cf93c449ad3943e36c075dd1f99238f35572f606ce0b247152f7acd1384702e785be9360523fc397484b3bc3771cd05ee4238b63a4891dd810ae997b9960d2520f7e3571be8bd3993c98b8694563adec993057bfc44f3e511a5a22ed19b91bb4c44bd3994f94d8123596bfff05c696cba550e6a8a4dc03ba97cba45066aba4ec0494974ba1cc55497903505ec1a4ec11fc6562f0974663eb19d94bcd0bbebccad4b95ebcda2c71a3c86af7377d5d4e7be872ae6432f637cdd3fd4b829714b9ecca6ab7fdb428b85885cb532f8b26b35618cd9ba5e600ee55526e776a0e1ced763770bb5f2d85324725e5a940798d14ca6c95944380f25a2994b92a295f02caebf8f1a1c9eee52def349be3a86d05c3f2e0cfe1858b83dfed571293b169bb7cd6876ee87a1fb3729b7fe97d1b00ad651e06418d1b7c048293c587f072618e91c664c2229899df288953676ee634e0bc89c9b98e890fe04b4cb8a9748a2b243147f520bd2bdcde37f3674093dc3f1ba666d9f94d6209dd34753db41d9243a1ebb9c5c7aa4fbc764cb8e633357833f6f68ffd3e2af8e2aae0450bdc8cbdd1a1536349b4bcb8f3a1ddde2a95961a3ca6d1de04adf6363fbbca0bfd0f98b66a47e21b035dd2ed4cbe2126712f6f856b9ff3a34fd4d897851510f669617f6fe2084063caf6189835ddc1a41e00bdffcaab1b4d73bf569b4ad76de90ee0dd0acfd83bd941e695cdef63df29b59546580f8439d04aeff2d14a93e57eacfa5402e25e37da20eb7c78dede2d7524400df0d146023fc003e01ea9b4d4883e8df6731864ddcba4cd6c324ab0ddd4c2e0e68fb8d5a6f032f6ed2f30e1b126b1c5bce41156e2339816c5da109ec1f731b9073aeeeddd93d64e76cb83ffc3e5bd0a77a95899c9344d75696385b5a03ddfef632d20b543a2341e277e013c751f903d5e2096c0a08d17cae151f0a08f516db208ec68d795d5719fa84b59a3da1d61d8f5908f1d9ec96ef7a2e08575ae655221375b9d04f916b4c787fd648d66fb0fb7d06200eda01d3e929eccfa5446a9c48e883646fd1868ffe363477c6231d430d52c9e7ca63b98b2390c901e65626265d98859148d4f852fc73ebcde784a18a7455a0db4cfc798a4fd4cf3f6b9ea21bedeb6ba07b4d5c77d2c525bd8f022c9aa1f6bae33db0f06f44f3039bb9bd882ca0cf701fb8f97b916eb8990d6cb5f032df2c974ee524a5c34d158b56e06503ec5a41cd40acac96eddca265594067f8ac5a0eab943fa53591dd378e8989e6612c70e838a05f7e6bb005e559b5be8db05e648cff85992cef73f47a24594b684f6f8acaf7552dce6904ab859ef70e97ae8df9ff3315c4af5ecb74295873df606cee725718e54c9d919385f90c499a792f356183ebd2889335725e705c0f992244e9d07e57e039c2f4be2cc57c9f91470be2289935a6295c6b92b70be2a89334725e721c0f99a24ce6c959cfb00e7eb3ec274984d6a674993a33326bd33a14540f886dc3257c4d6492b73b5368440def499563ed3345fcd6c4de2a3be75cf5780fa2d29fb9aa93d3e2df2f43d449ede964249eded6994db42ab7c470a25b5a7a751b607ca77a55052e7ef34ca8b81f23d26659f16064d93dca56addda7bd38d389a8751fb43c8ee7d5fb922b1787d53c8d1ae2f9fe767644a6ba72381f4031f23d3959186792365c1db2b750f85c53e6887b1681703ed87e97c9a26ae736a3c04ed48182e7de46b0a1aaecfdb0b2d8adee41ed63adb6590089f3371c28f7d744898ded0f271e3de0ed2a5a10e8776f9898f64eff0389f0a63abe01547dba27d2b9e5a27ad1b7a129e959ffabac1e329b50d2e181251dd936701e167327625133720d27625bf0603f7cf2515221aa1f294e271f084fcc247ab0cd3bb17b83165c38a4f6bcff37c057aef2ffdee386eb9ef1e177d81b73ebc98453b0268bf92ba999b1a9aa3058cb7869bff6ba9b4d4501d8d761af4f6df48a5a5c6e669b4cbe181f0ad8fb1a88d72b6ad6d095b03e1773ef292b34c1a4efca06dc52e00beef7df0e5baad319ed3baff64f1ed0eddce0f4cbe75e106ae6921ceaef980dd47a083f9d1cf2d9cebbf0dd2f8a602df4f3ef608a7368dcc56b935eb2e781efe2c0953632cfd61c0fc451226b1c81a0df30ec0fc5512a6c6a2d57702e66f923089c95a34cc2b01f3774998c4d2bf34ccdb01f30f49981a37ad5e0e987f4ac2cc5288790560fe250953e362c54b80f95f4998c47a7234cc9701f36f7e847265e959692a2a495bea1d04b4a6a388a55ee27893b6d4fb042cf5663019579da0155eaac6511267e8b4523e0f41c8ad1d933256d9a3351b02895d116dd35501c48f5693064aec8e68a08500baba345062e883069a0da0eda58112bb231a680e80ae210d94d829d1407301b483345062e898069a07a01da5816adc5abd2980ae290d94180ea1816e06a06b490325869169a0c300b4933450622899063a02403b4b02cd563ab0cf84a9671769a01aa79e8300b4ab34508dc3a6f501b49b34508d03fbf500746d69a01aa79e3d01741d69a01a83233d00b4bb34508dc3a67501745d69a01a07f66b03680f69a01aa79edd00b4a734508dc1914e00ba1e13b4bf695a2d3e7e1a4c7c0361f2f5798d493885b0f6d98b891b4bef0eebd25885c9ee52f38de6cdd63bc22c7e7d26df00f34fcf22243e4b691b6016c1adbf413a57e613b7b712e74acb5894fbc38ddedb47b7147b8a564613702a9a9062d7a4b1b2d7bbd036fbf87872da1337bcef6da3658afc68e27c7d997cffec5c42e22c9eb6e7e8436899fd7ca485d95d97610aa33dc2048f2cf1d0426955e69e8716baa1dc16aaf174f775a133eacfa46dfd89301a23f599300a1d208973a44acef58173a024ce3c959c8fc173749024ce5c959c3703e760499c052a393bc2cdbe9124ce7c959c5f40ebdc581267964ace5ae01c2289334725e759c0b989244eea3e391ae7fec099c9e48c1558c16a9d93dc9b6834354677e5ed09d0010d65227633f12a359ecbabd0962f0e8516b8a9ef397acb1511470717991bfcabb5ee6ff35ceb24c6de69d5939e8339fabf98b4b173b0edcd3d26f8a2dae0ba130d1e886b0f7eb2172c73175862e2c7e2d6fbb8f56911a62da0f56ee6a33b4ad6198d0a5e5a6becb6c33217b8a39ee44ae3dc115aec30499cd47386699cb5c0b9b9244e6a39491a672344e5874be2a4560fa1719e0a9c232471524bf4d238ef02ce2c499cd4639f689c2f0367b6244eeaa1e234ce2f8033471227f5d8661a674fe8d9732571520f15a7716e049c79e959284ee55457e64231eb54d7f380365f52c0ae50e5fe8e41106b2a90c4395225670fe01c2989334f25e74326ce592889335725e7b5c0b98524ce02959c066ef62d2571e6abe4fc105ae7569238b354724680736b499c392a394f02ce6d2471522b7ad3381702e7b64ccea1a6e9162ebb9e541178d89d1bb1ef73d59bb98a823fd5b92d34d4cd097fb2e64dd7c0bc693b2678ec40d272d37205dbc43993bed5f99ed0eb17498124cee46990dd0172941448e2ba3c0db2109ea5a3a5406adcc0350c20c7488124d664a0419e0e9063a540126b31d020c70064b11448e2789306b93a7436e3a44012ebd7d0202f8216b9bd144862ed2f1ae4dad0224ba44012f7b1d320d702c81d9890bdccaa66e68923498d43a0ab00734749981a07e65703e6781fc52a529be168ec762e03ca094cca2126315e34d334df60dd9a73ae792bec2ceac72152b413937a4413eac6a49036a93bd5dc7a4f81ba612cfe0ae02ff5f1044e3d055c5f224e1da4894d9484498c7cd2301b00736749981a53c42a007392244c629745c3ac04ccc992308931271a6635604e9184498c84d2306703e6544998c449000d730e604e9384498c88d2306b0073174998c418140d732e60ee2a09931819a561ce03ccdd9898fd4cf32202dbbbb2a9c5c1afd58eb1c265ccdb0bdb3df15e0a0bf0604d1c7677266c5f131ebc5b1b7c91dda28dd567d376e82ead266d07609dee23352c59980f2f473ffa8c56c1211f6eff3d24715223fa34ce12e0dcd347555a5bb9c67b3d11da337363e0db8bc9d7d57d37b6f399e3de66bd5398e5b66dd917e90b24f780e7e28cf49ea28d373271e643bb89f78556b8b7a42324b29456f4fc1ad693caa4816a3c6cef5b009d290d54e341519f0068b934508d5b0e3e03d00a69a01a0fdbfb1c4023d240351e07f92580564a03d57850d49b003a4b1aa8c6a3ccde05d02a69a01a0fdbfb0040aba5816a3c0ef263009deda3f44a83a90a3e5ddfaab430ea9e4dda7cfe01a09d239596ba599b467b8f89d3d6f8583f4a2de659c01c97d282259f423b9d2b09933826a5617e0598f324616a0ce37d0898b5923089cf4c1ae64780395f1226711c4ac37c0630f79184491c83d2309f05cc3a49981ad72f1f04cc7a4998c4f93b0df331c06c9084495c43a2617e0f988d923089eb4734cc1f0173818fc5e2d4361e6aacbe7016502ef471da6b32c8d8774acde98cb423313e091bb116a5377d21bc548da3240ed569473b3f00e90b8b654539759ea07925dce24ba4816a4c5fb80640f79506aa317de11c00dd4f1aa8c6f485f300747f69a01ad3172e04d003a4816a4c5fb81c400f9406aa317de178003d481aa8c6f485a5007ab034508de90b6700e821d24035a62f2c03d04399a003ccca4f8e19e5b62244a21fc30d5c45c13ba836d4bdedb4ad5a67c344f4305fe7132f70db5fec61a533a373785b869abe2566190b71b189231eee634751ae63f4bca38896eb3109dae011e98c2b95062f991dfcc91642a7c695682d711184e88ee447e0cb5d8e91fdc7ed1b2d72b7c2bce0a325a62d6cd71a02b7f5513ef65de2b6eb647b85e99bad695d4d3e701ecde4ecd302e794a843a9a90c68cbdcc527bb7f60be0fd4212cd45f00f5183f9b59b3fc773ddbb096347e87d1e5b1e9399730951c4ee25c9df6f4dc1f7af5e3d259eb3371315863facc68b8c98ff751ffe37f93674c5ce4a0b5d10b01f604a9b0cc434959b06703ec895261898f021aec2e007b925458622084065b02b0ff960aabb17af258803d592aacc601560ec02e950a4b5cb6a3c19e0cb0a74885252e30d3608f07d853a5c26adc2d3717604f930a4b4cdaa1c1d600ece93e96f39285a69b17a5a69e0042ab1ef60c04a8cf9006aab16cfa53007aa634508d05aa5f07d0b3a4816a2c9ffe32802e9306aab150f53b007ab634508d65d4df04d0737caf02b47c8ccf14b7a462c3d995ee7273b9f1aae52cda5b80f65c1fe93bb8e8b753f0fba2e04ff66d2f88aea736b811e93c531c5db38af858fea3ed6c7a09d6afce63f27609fe32c9d500b73950a5c1cb6c6b8d25f0e8bbe5ed44260677be8f75d3bc68de534d20e12de389362f5a0a7c17f00ba7c78f44ab0edec434604c9ebe431c2ad1d277de80a7e58572d64c35ee452e87167a918fe49d540749d4f2c0bc3390a0655e2c89b35025e7e9c0798924ce2c959c2740aec9a59238b355725e0b9ccb2571e6a8e47c11382f93c499ab92f313e0bc5c122775e73c8d732de88aae90c499af927300705e2989935a5288c6391a38afe2c78fe251a19613c5d37452172d7e64e78131deabd987f9c4c27376f65ee32b04426b990742e8ed9a749e70983857a70e9168b3f5ede136bf5612a6c6ca613b01e675923035d64e2e00cceb25616aac9dbc0560de20095363ede4618079a3244c8db593b300f32649981a6b27f701cc9b25616adcfc3518306f9184a9b176f237103bba5512a6c6dac93d5ccbecd0bec9c58b9b5d7cb40b44d85044b989e55fd4071f1f676ce1808883280ffe3ede54bb57ed1d704c0ffe6bdd4f60cfe0bf963e9e91d12d784763cda2e0edd98fdaeb55b86bcf0d3e6bdf59bd1991177cc96db641748d36884cb7465a1498dbf205934cc4fdeb8b83d7d9f75ce152206287a2373a924c57fe7562f0b146639324ecbf608b2154059fb5df71b55902f92799191d9d53c42c880a58c0cce87b5d60c2920a25a67921854cc73d311adec974a919b1bfc51232eceba6ba7791e93210c6047faa74efacc6d878867d5756a1d17db5bda6ddf63fdeb52dfb4eec11efa5eedd47826bdbaf8847463233d68c7e6df8b3097f82f5d177923c492433a373b3cfdb9f69788c7c66462777ffd4baefb632b0889793c8cce81e7c2efc7ee21f8d2bedec92011addbfd1b585f736c1fdf4aa826b57b8069b91b14eb48ddaeb849f2d0b3e57e67e9fb2e21d0fb7250b32ec2f6196fbe62bf2dbc3363d37f82ffc5bece3abbea66da12bbfdaedb61966b4fc5caaf93fbbb756f51d858f03fbfa4a17ed8ab8ab96acf23b5df5f797fc3eedbc929fcaf002fbb368cbdfff1df6e71efdb1bb66dacbdd1253839f7c78717bcbd4057fb66f6ad436ed4cfbff01936707415d150800 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/4f48a23baf4f77243ab6afd9f1b2e6a6.asset.meta b/Assets/SerializedUdonPrograms/4f48a23baf4f77243ab6afd9f1b2e6a6.asset.meta new file mode 100644 index 0000000..6820fde --- /dev/null +++ b/Assets/SerializedUdonPrograms/4f48a23baf4f77243ab6afd9f1b2e6a6.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b8f995e8937eb2f4b8bd57e6b76b3ae3 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/4f7337a268eb04e41b869ab81d3de2e5.asset b/Assets/SerializedUdonPrograms/4f7337a268eb04e41b869ab81d3de2e5.asset new file mode 100644 index 0000000..8311cd2 --- /dev/null +++ b/Assets/SerializedUdonPrograms/4f7337a268eb04e41b869ab81d3de2e5.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 4f7337a268eb04e41b869ab81d3de2e5 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c1547d7f0e70677285ea0042b410349d0d21697162b042a94424802a42490462850eaeeeeeeeed4ddddddddf5e9537d6adfceec4cf6dcbd73eebd7b376799e17bc38f6cd6ce9ef9cf193f339395cb9c9fd860e7d742368f4d6243d90256c2d6b0d5ce5f939c6385f3cf3d53d7e7b22ae7b8c2f95de4dc1bccb253bcc97ffac7ba38bf673867d5acc679b396153bc732717f3e2b75fe9ee1bc5bea9cf1abcb9dffa5ce53b186ce4b0bd8643687cd669d631d538858285eaa96d7623c5cb1a6ceef896cbd73b75428c53f922b6e75767ecd77ee548b7b158ed2eab9456cb108568573afd879a78a953b329709894d3becc0c41fcc3d7496c72ef2d8c9f9df4cfedd40fedd54fe0d9f6f248f5dd37c7e6bf05e33f03727745192f7bbb9c7d8ceceb1b173fc119cf377bf95cf7577e565ad4c226b1b79ec298fd952e67fd2d0bf893cf64a11de64327a0359e9306b2a8f7de5b18fd4f7a70cbfbfadcb28761e90c759ce04faf405df6e06eef36bfd42845dc5e32c5f3cce72e331eb2c197f9fcae7fbcbe30079cc91b29d67da5f26af0d94c71e29f41ae4bec74633cf669d6f36a894e783e571883c0e95bacd91bafe179c87d545c569ae94395b7ee367cd75f53cbfff8b3c1f268fc37df195279ffb559ee7a7a94f3af6a7749a2bbff11b387738365c9a44968af75d7cf1be8b7cf7249763c33b7de101f6a7955b20e5fd9e4138e6f9c231cfd5a5514efc73297550f2474839f3a5dc3fc039977b5ac0b03594ef6d92e72359eabcad731af7c6b8729a2ad663ddef34eee05e6f3c8ec5dbf2e8147aaab82df4c56da1945b2ee5aaf06fe79ec714e75e400e7fff7f3eb90b7c721748b92a8fc84f534f15ae1de571a23c4e6075e978e8b3f2da0ef2385e7e73218bcf0316cafbdb7bef763a2920b7647134c917d73de477774d2153bd3f591e9ba5f9bc7a664a089da7ca63f334bfd95c1ea785f8660bd7169afee8b385b129644e77f936ad013a38729a6d94e733e4712779dc59f2dfc367077ba46107a97499297561200e1c5d9ab795e7b3e47176bc2e6c8e4fa73feb4fa7d86e52e65fe09c1f7797d7ff06e75cd7b9ee779a3f2a65ce95c75d7c3acfa3d399cd77df6bd512d8463aef25b32f9987b518e6ca6e5128af2ff0e936d5d3bbe964f0aed2239df4b0ab64b1a78ff19e5207c57637df73ff80737e5ce47d4ffcedbcdb52d95637709dbffb2f38e7f717a6a9eb1e2cd166b99cbdc0b7f792df96f97f4b159f8b5862dad3bdcb8f8bc1b5c552debbf2bd3d596239a69e73c296c5c039bfbf7b9a615bacd1cff96eabf149de95fad6e53f933d7b68f2a2bcb644eab384c5a72d795db40be43bb172796da97bde46e95224df590ab82c75f56badcad365f2b89ce9cbd912c041a647a7b558f7edee6fca6bc549be55229f59e10b77a127a74517a9bbcac75459361079965f2b93c70a795475f335deb3c354fa568c564bdd8a585cdecc5681ebfcb84cda450c9cf3bff7f664777c525edbc7a7ab2e3eab7c61d7e501c9ecacda7db68b4cb7acc665dbe65e9fdc2296dc6e6b5d39c3a53db1b5ae9cb60d03cad9d79593a7ea40ebddf3b64a9f75f2b8411ef7931c8b595c5ece64191a0376162b06d7781c64f9f8a6d22d19c7035c3debeaf707cae341f23801c8ee24f500f65e57e7db1fdce3e7e3417861f892e972b03cb64a119ecee0397e3c2444f893dd6b2c8f87cbb02d67f16d9ee5aead6cd53d89ac2398d64edbabf6f291eefd76ca3e8e0261e2df58e1b1aeb3a5a3e5bd9520dcd2ae6265e0da61f2dadedeb598ca738e898f9fac06befbc70219bafbc7011d74f78f97d71bbabab757e13ac117960d3e5dcb585c3ec34e4c0c6bacccf76dd58f964e5cca7234b6ca1797ab64bc7c9944d6c9fab8eca0dacfa7f8e2f2545f5c966be252b6eb621520de6499135bad89df35deb5ba72ee74242ed5fd33805cddfd33810ebafb67c5c7654755373b1b894ba83f8ccb7312c31a5bedfbb68aa76471a9fadece95475dbdf77c791c28e5364943ee05f2b87712b9dd7c729ba621f72279bc3089dc8b117d33f99e62a8fa6a2a59bcadf373272e3bbd9a44d6254c6beb9d55bfc1a52cded6551f9eb2f57d58a2ad5f2eef5579f12f58f06bd52cd1d66b809da83ac515e01968abeafe9540aeeefe554007ddfdab599cad77192faf5fc3f4b60ef587b67e6d6258c533f0dbaa1c4f1697d7f9382bbeb52cbe9d53ebc64f177ffd0730d47ee77a577ebeaa67de20e5ad953a3603e7fcb8afefbbfbbadfed2afbbfb6ee20e5b494d707bbd7bbaa31861b99b6bed5b5d0f7dc4d2cbe3e758b8fffad3e5b59efd95b5d586e06f760d8fc7512d94718db0fc4d506704d57e74ac5f53679bcddc76f9d94d71c9cf3e7ee04faabb1823be4f160ef5ebbe9bef86d09f4b84b6f2b4257106781eb482acc77a70873903c69238bcf9336ba76d02d59ffecfdf299e3923cf3a03c3e248f0f48f9fbb3f8f68bacafb287e5f901befb07c8fb177aec3b65033d946cfe4e8b24faa8f0abfe87c7e4f111f99d03597c9f98aa7febca884cebb199de93edd4d841f1f623ce9d78e8a1dac6ca168b53d8c7e3f2f8843ccab642ec601f838393301898e6b792842b76288bef433854de97edd7d821325e655b3976b8ef79d91e604fc9f3c37ccf1fe97bfe48f9fcd3f2fc88f8e7d933400e3f7fd60b5b4ca5e1e7c0b523e4b5e73d3e3daf93f78e8aff367b81c5b7ef541bee68a9432bf01e64a0eeb796e7c7f8c274acbcdf069cf3e3713eb9aa9df194efbe927bbc4f5fd53ff08a3cbeec8571c426f00ee0c95e8a9799d4a66579123b41bed3169c3b36dd3359fd5fbdabda24274919edc0b923233bdbd537bb0097153bd9c7ef44709d1f4f91f7b702e75cf65149f47b4e3e7baa2f6ca7ca771f4de35dd51e39dd17b6d3a58cbfdcb0f56a9b4496aa57bee68b4365b35cde999a783d13c4273f3f43ead01e9c3b3af4927538f63ad3dbf669bef73bc4bfdf5b8d09be218f6ffa7493ed9dbabeb0b7e5f11ddc2699ea5755ba9fed3d53a7df5b3efdcef6e97d8ed4b723d0435de7c773597c19a5da3fefc9f3f37cf7553b4937d69e2c8da8383f5fcaeb04ce1bba2e0f5c561fe50bf0be3c7e208fe9965d1fcae347f27898f75e3b15271fbbe77dd319a3567a5fe0d3fb02a9f79d526f35def5893caa364dba7a7f268f9f27d1fb0bf7bc7f3aed35a5f7853ebd2f74f5ee5b291928bb5779d45701f5fe5a1ebf49a2f7b7eef980647d5a4aefefa49e17b1f8b2e12279ff074ffe2855d67def86a9df64f77a3f9557a838517e44d23f2776398baf1b5c9e24cc922353e956b5991bf8eeffccbc361e963f5fec0bd3c5f25995975c228f974a599dc1b923775b55962b9f93dfe2df637f78fa8f7e505e537e27bfa708fba120de547b48fa45c42e93fa74f1e9abae774558e567ceaace1e946f4647e6e5f7322f63d22f2176058bcf93af70790d60f1cfc7ae44c2a1aecb70c4aef6c5d3d5bee7af92cf2bdfb93fc1752c1e7ef7e9720d8b2f8baf7175ce516946d55dfe45644359d76abea7da65ff8067a01d5cc7e2cb0559d74b9606628a27920662b134e2557d2f0b9c73d63fbbdfec9f4e1ea1ecf27a243ed575159f0d5cd9231f4c2d3b26db94b126be6f359532d578adaa37cbb0c6d498b2f39d31337d3254fbb4b94f462b9f8c3640c68bf13262aa1dd0da2743d5c7647f756c2b4fc6d8429f1eaa9fba9d4f467bdfb76e90f7bb8373febe2e6f6fef0be38d3ebbbed1b5eb811fbaef0d5236e44fc3f2bdbab6bb7c6f904affbafcf426169f4e6ff2d981eaabb985c5e7a7b748d93552275956c7d47b4a37e2b410eb14af67d27c4371bad5c7f756372c83150315c62e69c8566defa6f1dfa8cb2336b1f83c42d54ba9b9a874abec334918622a0ff6e95c57be299d75b6ebd71929afd2cad71477e517962d8f2a0de9f2875ebe6754fa5779053fdec612f304e92f1deb099e5179033fdeee8bb7db7106b1de3e1dfa7acf8cfd505eebe3dad8d0cbdceb43957f47ba7d2413a49c3b587c9fcf1d52ae6cffe5aabcb69f7c6fbcc7436b27fd7df2ef94e1ee01cef97d8daf82f2c1880d8a9711d7ae54e3487779efd7b5cd549b6ca0776f3be5efb32d788f1f0780f0c03ee274f9ad9172eef6f1bbdbe5376c9c0c9bea5b53fce0589f8e9f7c2e760f784e7deb5e608b725c39761fb8762fb8c68ff74bf6db807347b7e10ffae4aafecd9ee0dbfcf8a0bc9e0dcef97bca261e9261ffc927ef11a0d343f29b728c3136c4f78d8799d796e5e30507f9383c0c643d00ae2919702c660d38f2ebbd641cac8bff66aa38d0c6cba32cbe5c937d2cb1c77cf1ff981bde3c19ff79ca0748f567ae4d11ff4aaef2ab7f9cc5f739cabed5582e90c7eff7c6656abff3842f3c4ff8be9bcb52f6b5c5947ffd0dc17932990fc4a46f7eec29f9bd3ee09c1f9f04f19f278f4f836baa1ff319f9beaa9b281b857daccf8267f9f139165fbf79ce8dbb11eb7cb2d57bcfcb6ff403e7fc28fbc5632fc8fb2aaf5169f445a0c30be01a3faa3ecdfee0dcd1a160a36b3f23e622df7a59be9703cee1375f91f70780731eb686bee75f95cf0d04e78a319433c827c7afd76b208caa3ff08e14b6aec6fc72c1396877e43f181fa654f2b4d75438651f6dec751fb7d7e5732f6520dbd7af53af6d6c827a50dd3b2352c81c995a66ec0d169f7fc83ed6d89b2c3e3f7cd3b59751d27f7b947a7e943c6e278f72de414c8db3bfcde2cae53abb7e17d899ecaf8d81390431d93f1b1b03aec9790a31e5e3ece8314ed54354befc7df2f88f4d90f77e90e7933c59dbab368a9c33111b2f8f1391b0bcc1e2f57f8bc5e7f1aafff81d16dfbfff0ed0b5b1e7bb9bb6bdaab9368ae57b520e3c77e26a8ceac35379e9ef5e58c7f48d9725eec17c37ddf2478ea5c6def7d9cbfb5287d37ccfa976fa10a987f2efe807ee072dd3d598cc073e1d3e707518dbc5f79c6ae70f757518abb84d06f783eaa0da8c4ad687be38f950ea72517c9c88fe02d526b8d3274bf525048d1325fb231f8f8f5c1db6cbd63f97950bcef9b14f061c54f9f3318bb7f98fe5b7d5b8a78aef01c9bf51276f8a3c4e95c74fa4fc61e09c1f3f8d6716536305eafc331657d715e78e5ee336fae47cee93a3c60e14a32fe4fde1bef7be00e1e2f7f3dcb81d77922f3c29c2ad65a1e60e489f129137aa7c931fbf64f16d5339ee20f2cbc6c9fd97625fc96754bd64923c7ecdbcf4aa9e53d7f9f11b79bf009cf3e30c79fcd6775fc9fd8e7969503da7aef3a3ca1b4780737e947394623ff8e4aafc7ca2bc3e325db68d62a28f703a2b6545ac92e50a483c76d29d5aafde4c3da99e8b6e2c727bc667d7f3cfd6b0f5ceaba5ba99ed0bc4bcf91aa774cfd3ce6cef2afa2dd5d72789df45ce136542e8a8ac844fdc95f009ae5cb9f3af144ccbaf76ae4f13b3faf9c4fc32e7ce5036d339f2b796b2e16c91f32f5eca42e7b3e5acd6392b747e570a794b1db5139f4c15243e85dfffce3c47a6bbc24085734501ad74cecb8586f3c5efb542d352a1fd0ce75a8d58ef60355bc1263ac775e26b8961af72fed67db35022d3eba85f6800bbee2e67a0a269b2131aae7daeb0c5ff8b91cd11231c7de351321d36cc15b5e3631262e2ff18ba990c1ffc9821650c17c86271d7f258ae181f9997403078181343a8b76f97f7485690342c7a323cbabb89107831dcf9d587daed7ddd8e97348a0f5a3ecb154356dd53042d19582e2f478c46040942a3460d877145fdf8633afc6268697e84f8dde7cac473c123a0b128fce22340549b0b9d5c6d2e283c1708e5cb856afec0140a956ba412def95ce7f922e7b33c68939dbf6a9cff09b13a8cabd044444c62b19b2a7058d464e9a2468cfe146e9694812d88933c729ad685c28b9c5c514fed92c484b16f894a560359d35289ec9b4dc70efb7dfcaa35f7de366775e1c95f7fda481f3fcd45fc64f2552c861ae862a879d489277569912c7e5ad485cb8b1ffea367d812b1f1543a60041bea08b688dac6f9bd35424a91f36c7086dc3560903f03d2036c8d18616a1530848d34088771846d345ab146cd7c5a718510c98d7591d372f314cd991937ef2be8ec43d00835ee76494bd6a0a6dd44474f38912c25a5a75a8cf39de26a67e75e91f37ca9a87ef2ebb0389b20bee0b532e3df484e96f7280df193d5526d2fa8f605eddfb09a61c49b6a888b21e40e1a3310799c3f31b4c31343332c99750c9bcc9a63923b8595dc0293dc39ace49698e42e6125b7d2251b31d6b86724c9c6eb68517f4d74de5de90466ad683dd73aefeb3a66922797ae692797ad4572c966baeea2601a61c9a4b52eeef8c56e3a25fd51b7351e756d30c1dd430a6e8b595b8fb0d6d60e53799b902a6f8509ee1952707b2c93cbae874cae834e382fc87a314d138ba775b78995ebfc57ab6ebac6bf5a2439d588ca754c52369dfcda34c1b5e98805b5773d04b51326bc4f3d08efac13cef3f9be2cb1b6fdaff39320bc252ebc0ba6793f8de67d2bb20269de154b6adb864d6a5b6392fb8795dc4d233957644607b3688b0c7d7ffe34b1446e299be3d416f7666e47acfaee1ad109cb35521dbaf39ce372a1854a45a9c70192173e39757c40135ce4a95358faa312f4a1e0632459a210e4635a39c2e3688173dd1d7f982262a04c7c69a8561bfe05ec79c56216e3abffd68ad86e8474140c125f378b0d569877c7729ac19a9ce64d5d369624a7e98125d9216193ec363ac93cc90ed5d8ea306eab7c98b4b9281713be3308ff4e4f5dd6200afd0d9b356b709b945cde7231c4e6ca9bcdf802d6fb0a535de518f05a693885ce3355ce374aa59187c90cf8f0760f7f49cedc1f7d72182e92c30e692407ca506109205b6749bc52c1c7c9b55596794e6565125b2292e13ee232a7e4c66e9978b48c6d10d51577b42c4895a5974e1bdea4e1a3e029ab7ded71c1bd31c1052105f7c1d2f888b069bcaf4e32cf6df8487ad81a563f4ced5161d5de16cb51476b72d4bf62c172d4fe98f0311ae1f76605139ea313ce8d756c3a3692c4aa076082b7d3a5311e3593443766b6f37f8df306ef342b12a93f5b14865e6e90eda4f532e72f5e600f06cfaf719e7047a783e83910338a71618d6210166fdb6be2ede780f1361813be8346f8f406c1840fc1e26e475ddcf1bc9e971bbc5ab252966df1b961b668e2650bd7905ad11d572262ae5ac46b36dbcf2961f6778e35ced3d9a21c2817f7b2c57e0e5522af0d12a74331fdc7ebf46f0ef49f0b340cf2c55c2cdf9aa0c9b76201f3ad613ae1bce2339121151feedf14bce2331cc33659878d57f4a638d5175e73ad15cfcf1706505a57572ea9a702324fa357aee82c59cd3667858cb716b8234db5f8dbaba2f06f7b43b7612a5ebc3de1af78a91f7dc58b7b26e688b90d51688f55b0f2b14c759a26538d05c9540bb0b4301d4b0b33324a0b23743627fad12a37abcde1296a9e90cd535ef80a3ff76f6ce06ffd8b8ebe82342cabbe741c24e62b578bfd7a5c72d53c33e5a32acbc0c63c2e7c9124f46962679126a2d41c4b1723b1527ba6a6d4ded42858a93d4a67b2a23fb46ab39aec6421210ab39da5335bd1693b328dc8af4f3d7b0a7fcb6a91a996c84cd5cdba7b8a490855a2d82c75aef38c17de1f24160de0f5a5a982778520cfc35724dabd9891cf16461e753831431f8d150073340540a05af5182c09cdd524a1bf0226a1b198dabb84557b3b4ced791ab537360ea6f6384cf87c8df0994d8209df5e279c67ccdcdb264c0b71074c30dfe921a1bac97b06543ba1d8d7525c26da0aaafd5722aeac777e973bd78a85886ce13bab5c058268b923c676a1866ddb806cc76308760dc976824e3037cfddd2119c642871a24e30af7fedce90fa17dfb72278fd6b12867d9106fb4501b14fc692f99e6193f9144cf2e2b092a76292f70a2b791a26794958c9d3759279242ed54422f7960912893330e1451ae1850185ef8425cc65babca91fe30d7daf92ea369fbc7e8d22b65c48a972fe5e2bcbdc92b8fe11dee751261bcd41d2f9ce989ec53a3ddda93adc218ad7298a441f1affe21cb62ad0576762e84b34e88f0b887e1626bc5423fccb80c26763bc96eb78754911af25c28fc6bb3adcb91a84e31c4c9b153a6df8a9176f41be331743ba5283f4bce6c190ee8205a24c1708de6de3e21beb209b2d3afc8ae434a3b5a2180f8e711ea6c1de3a0d78ce36b3ae623037c36ac17c0ce92a0dd25703222dc472e4f2b039f2024ced0a5da6d92298da0b31b55787557b579d645eeb58c3905a07efa5095eebd80dfbce3ed877aa32faceeebaef7052d56149ed8145708d2682c7b70c16c18b30e1b51ae11b030adf1313be5623fcd180c21763c2f7d508efde2a98f0bd30e1eb34c24b020a5f82095faf117e5640e14b31e11b34c2af0a28bc0833f2fdc21af9324ced8d1ab53bb40ea67631a6f6fe61d52ed148ce156e7f514efdf17b3f059b1dc1773848cf2999ef49a09bf693eafb589752a92e5e78097d904ea50045f972cc9a0ed658d3a70113c10a4cf8211ae17b0634d59598f04335c28f0a28bc0c137e984678db36c184ef8d45e6e12123731526f808864cf89c2f5256a9a8ce978a19b4abc55fabc52a06a562e0ba48d8bed7e1a406aef994ec6c69bd55d2a6cb1d6b1fea5c0da27539a6f5913aadf9c82befc4f5eacd6e53d26d86e8fc0ab3597f59ebee1f48af0acc068ed2d8c0a68006b61a0bf4d1216d608d4670aef0802e23cd67313fd242d179cf9750582e2ca522b0d769f23cf998b4f3e463459eccdd3be874c5f2ef4a5d74f3baf5710ca95bf31d3b9a739503d5adf7d17d87dbec091a9b2d08986f5561c24fd408df2da0f06a4cf8491ae18705145ea313ceab357cef9050d59a5a4ced53346a3f1b50edb598daa786557b5f4cedd3346a77681b4ced7558de76ba2e43e771934ea748b64894b5a280e245cc5ce64efe757da58a9cab25c28b6aa5389f2b9226ef595c260a0077dacd12d1f9b1428c2556395795d7d57ae6ce0acb16d531779d976c911594485fbc55e24ab578aa147c475fe094c982131651417b37d763517486268afa068ca20d58149d19b2f8d90f137c962eeeb93743a1735219172f41beb711cb58cfc63256be354cf04e8bfdb1709dab0b973b56a37a4a5dfb5d1cb05a740016ffe7e9729680f17f2026fc7c8df086ed82093f088b930bb038b930a3383958f71d9ee95d948e112719e73b04137c7148c18762567449c864771826f8d290820fd709e6717f194bf4ede40282f8761e8159e1e51a2b1cbc55302b3c12137e8546f8cc80c28fc2845fa9115e1950f8d158fab90a4b3f5767947e8ec18ce61a5d9ec63de09638ff78af5cb9c8ad55195be694f8fc4ea5682af2f23088851d8b6971ad4e8bf6755a0c737ef392978f4db9de4199eb701ca6c3753a1db6923ae43bff8b456388bfb3cef99db906c7631a5cafd3a029880b3e8788d78c827ced04cc7c6fd098efb8f6c1ccf744cc7c6fc4ccf7a68cccf7242c6bba599335350898359d8c11ba4543e8f780844ec184dfaa11dea54330e1a762c237e9e236a0f0d3b0b8bd0d8bdbdb338adbd3b1e47047b2ac29af9eb3a633302dee4c9e350dafc7ace94c4c87bb92654d05f598359d85697077aaac6957f1bd60f31dced67d8d9bef3d1af36dda3198f99e8399efbd98f9de9791f99e8b21e3fb8684a98e9d87d1794043e7b48074cec7e83c88d17928233a176081785813886f0306e2420cfd2321d15f8469fda846ebc99d82697d3186fe310cfde319a1bf040bc4139a407c1a30109762c29fd4086fd83998f0cb30e14f6984e704147e3986ff690cff3319e1bf02334ebe5f075aace5d773b17625a6c5733a2dbc622daf1e8bb5ab301d9ed7e9a08ab511f558ac5d8d69f0824e8366cc2bd6a68801af35017baaaec10cf8458d01ff1cd080afc50cf825cc805fcec880afc302f18a2610e55d8205e27a4cf8ab1ae1cf06147e0316dd7c8b9d30e5c28d98d6af6bb41ed73598d63761c2dfd0082f0928fc660cc99bba14c0076892f7d327f6e486ebb377fb4dcdeea5bf058ba0b73411541330826ec584bfad117e5640e19bb02ce31d2ccb7837a32ce3362c10efe9086d1d2c10b763c2dfd708df2da0f03b74c27937f007e9641949ba81efd408ce150b896d9e31fac49597ea778cfe431d2fed18fd472cd5187d785db131fabb305bfa5897da02dad2dd3ae17c2897ef5a136a28f71e4cf2a76125dfab93ccf3c2cfd2b1ff2499e67d3afb17cbdd2ddf2cf61f664db4e496ff79da96ff85b0fc81492c3fdcca6dfa98b81f339e2fc31acf0398f17c15d2781ec492e9d79a64fa63b760c9f4214c6bbea952429588cf2f9f209a43a5625a8a6e4253b6a82e6507f43d7b18d3e35b9d1e7c4d9560f21fc1e47f1732761ec562e77b4decacec1e2c761ec3b4fe018b1d9e4656ca2aa28a8fd2baf53e32f50c7c1c0be48f9a4096f70816c827b040fe4717489e02959f815b9f8d77d30c12ac27b12fffa4fb326f93abc56cd542e3b9758be2cc711244090beacdf114a6c17f751a74d66a3053fc55235610706bfd99cd1b7b1ad3e5679d2eddd2d4257125ea203a3d8319de2f1ac33b6e9b6086f72c16e05f43e609cf61827f0b29f8794cf0ef2105bf8071fe43c3f9ba809c5fc484ff4f23bcb26730e12f6148fe0c89e4659d609efbfc958ee0248da1577482793bf4efba1bbe76e83f2c9376e8ab18f67f35d8a7f70a86fd352c106247445d2078a11d3c10af6381e03bb7fb037154c040bc81096fa011bea97730e16f6286d930a6c94ef99cc7790c2e135322ead82a23cf61034481b75afe8e9f85902dcedce267b058fea24a94fa6e965bcdcac50219d50c4e03773b95f884e64a5fcd407d877726b945ecf2baec3c5b64e625015dfbdec25834d2b1e0ab71c1b5e6dc5aa657c07a53b2f7151a9633e834bb521441d92925e4394f079db9f13666308d3506d330a0c1bca313ce9354132c4935cd2849bd8b05a2992610390103f11e16d3cd7531cd6709e8bb4817c9ce553ef385b72edc258a92c5694ed2bb03843baadbadead9757c0a58232c4375a1c6dfab117655a34945cb84866b4007ac2b7b8d6c9d06b1aff7b1a869a1899abe7d8245cd0758d4b4d4450d9fa4b4888d13194db908def6ac8f93ecbc7f3b6876cd1be7d401bd377610d013a58c76de2e6023a4944206f7d5d349504fb8eb47978967b9a27c2dab52d1dce4efae95d7dc1e76f78decbad1b32aa676390d5603fd108b92569a28d93360947c8445496b5d94ccb7264a8200fe1803dc4603b83c20e04f30e16d35c2df0d28fc532cf6dae962afd4c8d8737b1b6993d06758246ca589840e7d8345c2e75824b4d745c24c83232108d22f30a41d74054540a45f62c23b6a849f1650f857587c75d2c5579991f13589a96d181738d503dac4f33516199d3591f16cc0c8f8068b8c2ebac8986b41640441fb2d86b6abae700888f63b4cf8d61ae183fb0513febd4e381fc5e8160b398af1834e325fa3b47b2cdc2e123f623c7ae81af20179fc07b3e36d7476ec08078e1d704da8ecba5dc878dbb228ae7bb94a5a9c5bd32f11ee19413b9c7fc2f4eca9d3b3b5782eb176a56c3fc897ff8b7d395bf765e57ec6a79cc4afc89cb9fbd9cf9806bd741ab4071aa8f0ea5804735ef90533c2de1a233c6cdb6046f82b16c03eba00f2ad38e6898cab047468a895aedd06e472d195e3df36af86c5af6fea196d1014bf6128fa6a504c0f88e2779d70b1015d2cfcc62e7f6884e78a1ddea25c5867a28ca9ccf63cdf56979b6a87c9fbc7f40beba4fa3e3600fe3f2c6a72345173d111b14051f3276654033446f562ff6046f517267ca046f87139c184ffad13ce93cf205de29d1657824c8d1bfd76fb98bc92c2eb990c97b8078332c9edbd84128324fd7fb0b00ed685b589c8a87832caa4dcf9178bb4219a481b1f30d2bcb1065f4086262bd486d763a116c334c8d569d04e53a8a91ca95c542682166859baef7362c334a9f94bddc640495273039d701e77c3755d5f0382c55d439d705ed1cc0b59d16ca4119c2b36415c455a3cc4ef5d9eeffca5dff176685c8d73b24cdd83989ad6aa3274b8af797e8ae2243fede2a4401427b9e2494a7db1e2a731665323343675d5c06036d54417f5628bca0511d60ca0db5a66b583919a019f5cb12166d78470a4f3b5518ebcc60d99fb33d4f969826c2b315a5847661fc162bc2996458ec1eafd731cc43a9be3ed7bb7340c9a4d36c3ac6eacc6ea1e0d989335c702b85d3a395912ad5b6059e4b89059644bacd4d85e536a64b160a5462b8cf50e1ad64d03a6f0d698e63bd643c3a20dc67b7c48de6d3124133448660644d20e4332b11e906ca513ce0bd349e920e1850d22b83d966826eb7205beb7a957df76ebd339b216ccfd22dcabf9d229d02d97aa659f0df4a80892fa3a609136451369670d0a16691db1e04fd5059fefaea96b6454893a639558b8d29d9144d55bd00983314d97a8070783d119133e5d23fca680c2bb60c2676884970414de1513be934ef89060c2b7c66c64679d8d6ccf3cbfd8e08d4baf6919df325a2e1c2f94fb50519d63d20ad119bf4c7c9edf0d624bdd30683335d0720242eb8ee5e1b342e6e13d30ad676bb45e393498d6db60513d4717d5ad92e68641a2a227f6ddb9baef7297237fddccdd40cceb150ff2f56c0ce92e1aa49f0634845e98f0791ae1dd03c6576f4cf87c5d575440e17d74c2f9e04e612cec7edb58e258103271f4c3ec68a1ce8e18d3a89dc44eb6c5a4ef8af557b9a9233783dd45fa6331bb9b266697e6068bd91c4cf8ee1ae1f706143e00a3b447c866c8404cf0a29082076138f6d4e0b828208ec13ae1bc1b7d713a5a1f880b1e82e1d84b678ddcd8730351198ac95fa293cff7bb4c9c863e4b14fa6a0b23ef4ec06dae314d96ea34e112786534a8150cc3be52a4fb4a73c6b44bdb06f9e2705d37514fe734c677378aaa9ba8d039e355b4e0dd43cb62dc57371e8cf002d6f6e9148b3e9d8e09214bf67dac2f274f1757fcb424c67d0fe255da69d6c14dceebfe5c5642d434c2a3261f338652ac22c4fbd3dd5514ca9dbf6a64a0ca029a7a01f6dde5baefb641bfbb9ab96ef241be3d02fbf60addb7d528465e3d8e628cc43458a9d3403f8aa19c70782613d4116714561094690a825747052b08466381db3b64f1354627986723abd2115c8cf78d8cd509e609bc3c1dc15fe01a6f87a1a8c0aafbfe6686dfd32d08af71d8d757ebbede413c57aded080ed3e8d81ed3628d4e0b771bb6b0dbc7ed80456865c808dd110bcc3ebac034ae8bd0e0f5e2f1d897aa745feacfbcc9a1e944e094ba19caf1cfcf96d969b01ad4042c3ba9d66427d9a38365271331103521b3934958e3ac3664e36cb24e300fe1da586207f1bfce4f900ee229baba54368bb82e3549cccea9caa02eb56f8c3b25c533188ad4a4d62135a9645fc76a525375dc7a716e4b22e4e63ee7b612e68baec132e7ca1c31e7c99d41559d01d3f531eed519cf54fde8c96e1064fb24843c53fd30ead3b0c4bb9f2e17e36b93247a2a4f7188e63bfff25801dbc1399be7fc9be3fc4ff45276f3da45603b04b78f2e48ae301dd378a34ee3ee5a8db94ff5e83a0f6d375f4ed43688563330adf6d769c54710b3594ea02fec847de100ac951dace77367ac93edc0b09d6c3331c90785953c0b937c7058c9b3b122e2104d112192718022620e169587862c31e7623c0e0bcb63174cf2e16125cfc3241f1156f27c4cf29161251762928f0a2b790126f9e8b092176246774c48a3db1553f9d8b02aef8655008f0b5901dc1d53f9f8b02aef81513e2124e54598ca278655794f4cf24961252fc6249f1c56f25e98e453c24a5e82d9dca9216d6e29a6f26961552ec26ceef49036b70c137c4648c1c598e033430a2ec1fa15ce0ad9af508ad507ceae87fac072cc34ce096b1a2b7492f9f3e7a6c323c9923d2b31d0e785045d8699c6f9214d636f4cf0052105afc262efc2b0b1578ec5de452163af028bbd8b43c6de6a0cf2252121afc1045f1a527025167b97858dbd7db0d8bb3c64ec5561b17745c8d8abc6205f1912720d26f8aa90826bb1d8bb3a6cecadd5754771afcb18dfbb3bfa056a75eb97d7ef42b5d7a41317037162fb6271716dd8b858a793cc37b4be2e1d958fc505afc7ecf2fa9076b901137c4348c1fb6169ffc690697f23167b37858dbdfd3116378764710026f89690820fc404df1a52f04118e44d61211f8ca97c5b48950fc104df1e52f0a15843eb8e900dadc3308def0ca9f1e198c67785d4f8084ce3bb436a7c24a6f13d21353e0a137c6f48c1476328ee0b89e2184ce3fb436a7c2cd6327ca01e5a86c761381e0c89e3780cc74321719c8065710f87cde24ec4403f520fa04fc2d47e34acda27636a3f560f6a9f82a9fd7858b54fc5243f1156f269189027eb01c8e998da4f8555fb0c4cf2d361259f8925f2674226f2b330c1cf86147c3626f8b99082cfc1043f1f52f0b998e017420a3e0f13fc6248c1e763f6f652587bbb0093fc7258c91762925f092bf922acbc7a356479753126f8b590822fd109e68bf2bc9e8e603eeb02117c2906f98db0902fc3547e33a4ca976389e4ad9089e40a8cc5db61595c89b17827248bab30c1ef86147c3566c9ef85b4e46b30c8ef87857c2d5615f8a01eaa02d76146f76148a3bb1e8bc18f42c6e00d98c61f87d4f8462c063f091b83376146f76948a3bb1983fc5948c8b7602c3e0fcbe2564cf21761256fc20ce3cb9086711b26f8ab90826fc7047f1d52f01d18e46fc242be532799f7327f9b8eca497a99efc2587c1792c5dd188befc3b2b80753f987902adfab13ccfbaf7f4c477092feebfb30c1ff0929f87e0cf24f61213f8041fe6f48c80f62c5eacff550ac3e84f1f8252c8f87311ebf86e4f10896b27f0b99b21fc54abfdf43967e8f6190ff080bf9710cf2ff42427e0263f16748164f6a04e772cf78e2e5ebd2df7e562d00567f63b17fe998c57cccc44481bf636af93a5a7db109044fe9a29dc7ce3fe944fbdf783ded699d607efa6f2c7166adfa49f84023dcae9ec17249bec057d85cf2594c78ac1e843f87e50e5959217387e77592f9f30db2c2f9acbca013cca786364c4770316e262f62821b8514fc1206b97158c82feb24f385189aa4a3729285185ec1546e1a56e557b1c4d82cab7e12e36bba0ff065179ba7c3e4235cf0eb18ec162161bf8195772dd3119ca4bc7b138bc5566163f12dacec6f9d8eca49cafeb731c16d420a7e0763d1362c8b77b17ca35dc87ce33d4ce5adc2aafc3e26b97d58c91f60923b8495fc2126b96358c91f61923b8595fc3126b97358c99fe8aab27d9dd35894cbf1c239a4992dc7db459746b4d5d3ae59faf573d3d101ab727e8ad5adb6ae87bad56758e4770b1bf99f636a77af07b5bfc084f7a807e15f62d9fb3621b3f7af74e9a11f4f0f51cef92e748eeb588dcf2a273adfe3b2bd3d6483a5919e69a791ec2cfd5cef4cf5c2d2cdd75834f60a198ddfe804f368ec9d8e601e7c44f0b798e03e21057f872597bef5905cbec7b4ee1752eb1f30c1db8614fc236619fdb33473cb278b536f6d7bb5d9fd6cc617dfdd5758e22a69ad43c5c2487cd99a39ce9dd5c266f9157dd783cec99d3f0dd3054fc96b985a5c298899fe070b658e2e9447d48552ede0e6e63815e2ef19222fe2a1e17bf1ba39ce8cba27bdd55be277b0ae923ce68bbb258ec45ab9ea4b858f9e27813f1f4c0f4c5221e36b72ac1077e399c2fcc5cf7ba12327e8c2463f61a40760f604bfe88689af27e1d25ae3e4f24b1cdba81271ee86b650ac30b23a415bef5dfc7a7dd9d37fb1500ed48572075f282173379c53458c558830fab58c8f217827595a816f0509d9cf58c806e942b6635af13741ec635dc6d43a25e163cebb13246cbf60611bac0bdb485fd86689d8592943c6cfd66db690fc8a8564882e24c7459c9f79eff01dcbd50a56258e9557c95cbe3a8095437678287859522bea4330d7e335c6facbdb7ec3a80fd5519f9056da98c9dc050b4dc8d57ec7c297ab0bdf4c42abe257f7119fe1a172ebf7de4e8745684e9249acfe81857a982ed4db270d35aea9bbca1b1f50a9916154a571e2c295f5139bffc3c2355c17aedd03d7ece68b3bf1753b9d04f71a5cc96e8268bb85a9096612cf7f623cf2743c768ea4cca62ecdffc2c29c8fd55382d980b2e199da6521835a449090fd8d85ac4017b2b148c8d4cecc6eddc4ed3b50ad968532159724c4064d1be51f2c442374219a4a98fbaa587597f05dc6dc8d56ea2fa4ff62211da90be938860d70eb728af81014896b6ee83893e92296ab446ba8d82971d7d763a8f8d8b13654a3d26913c47f17d610168858a8729ee5e9704592d22f5e46fd852c86856cb42e649352e69ce9b50af03c34599b35d39c320b0be3185d18a7a136c96bbccb9c875458dd75d9a7383a5589fc33795ea29759df2561032cac6375612d256e3dd438254195a0e4b60e160a6b2fabcb79eaa73d9c09a78618a7ed749c166cb656567242e13934c2388cd3719818306d9890221a6321dc5e17c2190143b8abb0e8d5488c6c8ef036c1c2bb832ebcf3082dbb3a83ba467d10688a11d8b1beea206ede3601d440e843d50c0bd578ac872268a8a68a271263c89fe7a42f3748f89a63e19ba00bdf76216a8e35a234e26b2a2f97ed3c3c548509cf0609530b2c4c1383c5993fef9920fa13784a4bd54aa12d3d5a62e19b84852f489bd10deb34598ff0eef2118fe4b5c3faaa39b6c2c2375917bebe2c79af60a1439842cbd698965392f7ed058985f919c502a5edb5c1423d5517ea2168da2aacf33d8079c4f2bafe6c5e1ed66aeb6299f5efb7c5f49ea6d37b4cca16d70c3136e86e5f39c7b93785558875e313dbbfc96220f316643b2c3cd3b11a64f234c25bc37345adaa5a53aea63396c06b23cbeb31845b61219c914e1b593f363043d81eef072f927d5489f115e5f8407b2c8c3b613d54e9f403a413cacc728ccc43da010be9ceba904e4f2b36fd233d6e3a54e1de9cf1da110bed4c5d68774b19afb43de3d47de69d301ab382d5c712eb96cade2be4ee1dc5e22dbc5e49d3cfdc190bdf6c5df8f6f1d504f29d7cd7bf95326fd5e9763682b9b55b439be8fc55c3d4f86fb0d1a2f4ac487d6182e871e332ea3ba7ef82f19ba3e357c0fcfdbc7efd5c4a3c8e75fd83c9d2bb5f52905074c5423157178a5d425bc17c4dfc671aa3f55133dc1a0bff2ebaf02f0e1d7e4afbaf4fbbe8867199878d8663f9b1dfc25d0b48b79cabef1eafee58b8e667368611be8cc3ed39d392ab0716c6426c4c545fee244e1bdd5c7d23db60215a80f5c0072d8bf575cf74cae328cbec9e1887853a0e0303705071aa366bad2f5bccc634de55a7f1b629d39be769502aae724fbcfa696bf7c234dd4da7e928946da2a5c76bee6e47eb8dd850a497de5858764fc7fb166ba14d31ac75d6070be51e98274fb07cce2dab13ef26d65ad4bed1787c264ac9ac5cee8b8579912eccfd7c31eb2f8be952533f4ccf3d757ae605a83f4c4b597fc0cbda2021d8160bc1625d08f6acab19d6ffd898ead54e363a0e2d30dd94a7de0942a53f4665af74bc5bd41783e42a5ec8b014573fb9490e16b225ba90edb199e33b483c679a0206604496a6d3cf17b4ae15bea727f3b81f8885b4289ddc6a92885537066bc0f88d6b052359418af0e97232fe5690100cc242b02c7d9f74fecd202913860fbb5e5f3134180b5f713a351acc165385306a3b1c8285b2049b99127c744e95f925a2cfa2523ea57615afaf7aff502c24a5588aca3c2495e0fe0c8d4f426635985c2c04cb7521c80f15021e139eef74fdd9d3302c0c2bb0d1dee4ed006fbf69bf8e6abf6fdc7ab0bdaa93595c6675e4e158a8576632cae8e614f39d879731b7c7a3986dee196c795808cbd229aff48433ab5d679a3fe46321d83b9d91ed42e6ce8b875f8f9f159fd89b9e58af4c252348780ab0f0acc2fc8633090fcf3b2a99eb031aaca65f9f611d8185b53c9d7a617d8415b7c7fa0de9482ca415ba900ecb30a4e17d7d9a38ff6231be46c91441c6f58b5823dee1fd15b9bc634de8e7964743ebda2243e3da2dde75fefd0a27c7e3e54e615dab83af35915cc2ea2c777934f1d33fc6a1d6c8a65a6cb98f8ffb66b990ece5a9d562abbb52e6ce26e3a3a3439db2d11d5f51ab77a40a85aefd3514b4c060e852876931b23a4d2cd6448648c97248f7e7a4b7b490aee1b19a2d63352b378787715086d6945a8b4afeb5067a1bea9c4016a60e9deeae0055bf8d75704e9688cfe806e916385f2961ee120325a9bfeddf8ad1ffed214280eaab48296e01c8d874e2ba0a837327cc5431d78da47200634d1a650de371b20f25382ed75d81c7062c07f5f1b0545162690fec897f1c9ffa6b03b6771b7ad8aa29b1f1f5c0268b1eae4a3186be5ab447dd760206b0da0a847c6d3285b08612615be7443520a78be6e67c918755c9dc6b0e5b6505b09b9a7ac06ae9b3fe256c18f3e69bd80cae6d0b0fdc5a4a705b69c07181dcd985bbdfd68aab7694974b99076d5f6a6b8b4f9e539ddfee5a752575757ed7ea6c0097d3d203b78e125c27c6db37d569170b36c03b0d140aeb29e1b50049754edc58930d98ba77f7306da0c424e61dd575a9f25abf0d7846f7f5f0ec4789a719b0226fceba0d888eeae421da4889a8b9c8a55c570f2f574a235406407ab2b707697f4a488d851d555b55ce356ce5c13980120edf7e664e5dbb51b985b90ea5f344c5a196f1e9e2bcaa30570e01d9007013c8c40fa404d814e4525c4dee296703a017db79800ea2cec6e708d7146fe14c3b6ae91b810d1d1c950da9f5196c00745e7b0fd0219480f88e2eaa193385ad13a1aeadab7bf3c96bee50c63c616125c2deca9d0fda0091ff2888875242ecc1581c3cde4dc8d79d2aaddb5ca9c4f2064e07d071781825ca56324f53f6b65e96980b441f840da8ce0279dbe151f540f00635f436548d6a9b6a66bf37f1c01d41dd0301c1c1c55b26883e093eccea2d536303bc8da0b3f0484a782d4189eaad45e2ae806403a84da076761475fffd2c91fc56f996d69cec3c5e25be640330ee0dac801d1d6d8f6abcff748965f9593918f83886beff9e5725268b4fdb5cd178b29107ed586a6b9b22461d6bc5c73dff4c6fade36aa70e576649e7e1a700dc7194e05a83646aeb2811779552b08e8fca1d658d1063773b601cb0b21328c1b5633a3f1e777975d7e9d3165bbb698887ec44ea0ec7790eae492cfd95f56d00789468173469e413ee773ccddc092f1875dc5db00d73bb012ac5d51a596589731f1ce03c629ce62741f7bf9c8cbb847252160d3969bb1ae4041e26cec9d0e72827ad8a7a4ec83e9e9c008e6439814a8d9cb4ab7f3981ea3c3919e52739817a257202d5f973d27289ca09e4079413b83340a733eef9919330469693b4059da31df5c8d1f663e720e3b83949bc04729041839c141d6f39190d67e5a0c3a839c0df3447335c9f13c8913727cdea82e747aff77f1fc6fde84ffeffdcc57d1877713f8543e09b06f21fb7ee722a75dd65899829c783cdcb93e42bd90e776a103e1dba27e810bfa1a8aaa3e8b46916578b699d4e0033ea4a016e42a7998433cf4a9ca7009ca79b8433df4a9c37029c679884b3c04a9caf009c675277342f9179623c56b794e68f91e1eb1f23c2f707f3f09d158535ae40ed11aabf848d6123e970b6a4b2c64ec01acf3609e7682b71fe06acf31c93708eb012e78d00e7b926e12cb012e7d900e77926e11c6525ce8f01cef34dc239d24a9ccf009c17988473b89538e7039c179a8433df4a9ceb01ce8b4cc2996725cee500e7c594383b4a9cc5b20bcebfa297abbabb6ad9303a908da840e6810afc25d4ceacaaf338dd8e7cfe7c9578d6be76fa1460a1975282edc960cf7efa235b36c3ed03e05e46edd399ac4f098ae3253d19ca26542817820ce0724a946d24ca91d1f7266d4d05ef0e60875744016f74f4f0c82cef2500ef4a4a789d5394e1f18998b46d4e06f33f00e65526c11c6521cc9f00ccab4d82596021ccaf00cc6b4c8239c24298df0098d79a0433cf42989f0298d7990493705c920ce6e700e6f526c1246c9593c1fc00c0bcc1249836b6703e02306f3409e6680b61fe17c0bcc92498632c84f93380793325cc811266b9f350b9382a0f5de8d718744f41c29cb53d15f2474177c72dd42bfd2c11cbdb974827dc15029e7d9d6d2d8195deba393bdbe277cf20b4be03a950be0eac6f1325cafe0909be48089bcad4a6f3139dffdc3ad78aeee05a966c130652d864b9eb1100f66d51d86d7a45958d28b34116707b144e87796cd416d4d3391158e21d94f8b6d1e4a0e9ee14496a99c752a15d07d0de499dc82788295a6be4c414be5d021f5e5b2d27aba9e93aee2428fbcaf9862091df15c5c2c0c39dff15f2e345a27ac4afda9cd00f0308ef8e02e1a82d0ee1bd00e13df44bf0bbe3e6ea3841a8e0eec867f3f8f8dd00e2bd26cdb920f58523c359090a99fb4cc249eabc4586f30c80f37e937092ba1692e1bc03e07cc0249ca423e96438df03381f8c6682d5b0e8db3a64f8be0745cf43e6b866d9d83dbc0658e2c351a084be99339d36cd34392d7fb9f3d2ba282a4464283700ab7c248a16b8ea7883bbcc168a2afa96d637f416b0d247e94784605ffa12b64ac09e28d6325825454d758ea58c6f96689f43612b60a78f4561a735625d96eabab11fb5d0833aeaba8987537a7b90a13d1fa07d3c8a91cbf467fe92c1249b7fb12380f984493009c7d4c9608e03309f340926a1871c19cc9100e65326c124f4dd24833918c07cda2498845ec56430b703309f3109a68d1300c70098cf9a0493d0438e0ce6b600e67326c1246c0f91c1ec0e603e6f124c42af6232988300cc174c8249d8022283d91fc07c911266364bec9a0be65a4858be93b9161e0f3a425eda9caeb1fe7e78c25c94ac1b7920b0d5974d824958be93c1cc07305f896248837724af15fec57c6ddf885c12c8f06d0df0bd4abdbdbdc297e8b1c98579eb22d8ece3f12c00fa5a545b906f596e32870284af478170e41687707b80f00db3ab4384bd9a64d5a18b4075e8cd68c6d1c7443f8e5e1023c2b715c0f756547e70dee02f1c64231ff6251bf3390424f1b7cd990260e3ccf31d00ca77a2aa04a5da95c1661fcdb100e8bbd1cca928883e7f24b3c7d1207f7ccfa405f5c658d9d1d60ae07cdf249ca3adc4f91d48dc1f988473849538af01383f340927e95a1d64384f06383f3209e7282b71be0b707e6c12ce9156e27c10e0fcc4249ca4bb0391e19c09707e6a124ed2ed6cc87056039c9f99849374b325329c4b00cecfa99b95e96d7de86eefc6375f246c56ee4c05740400fa45144b926e86dd81c86693af01f0bea484d78da53b513f7ed1134257ad2fa8a0de079a965f990895b03b8e0ceabd00ead726422574772583ba1f80fa8d8950094b7832a85500eab726422574e522835a01a07e67225442371932a82b01d4ef4d844ae8c84506b50440fd219a0a7eaa7d9de113f68dab3704407fa4049acf12c734e327094e62de5ed06e40e277968edff6dedb2ebc503411d4e01ea1550fa78a04bee98a8a84ff500f2ca7da7fdc6e7bee0eecf92773160cb07113883280f2bfd1b8dc6c86dd5cda51e16b0df0fd6ceee46b42df7832479c57407ef98b39cb46932e474596ccf707307f3509a68d7bbd1c0360fe66124c1bf77a590760fe6e124c1b3deef60330ff3009a68d7bbdac0230ff67124c1bf77a290730ff3409a68deb27ed0260fe65124c1bf77a990760fe6d124c1bf77a3916c0fcc72498362ee6771c80f9afd9b38d6cdcd76537d076670d08f1b69278dd7511cb452bde955dc608579c23db009c01bb8c5182d3ed4d907eb7878d2bceed036c328b122d9c32334b74c0adf2f5bd4f765eab125fb479ca4c0f60ab0d2881b64e9ac8abe9d035a7429705d035a444976a269cfd0bfc7406281b51a254bdec7cdad696b39a4221c0d738ea02473fcaee8e63560a8b754728492df3232ab4af8102a70925dae0db3ed8b86cca6280b3a94938f3acc47902c0d9cc249cf956e2bc02e06c6e124ed25d82c9703e0770b63009e7082b717e0c70b6a4c4d987252e173085ad63dc67ae96a9391d739cd74b98729e2962ee8e6de5d1b487c81c163a81aa54ab286c36fd39f036ae76dc16d86c6b93708eb612e78fc03adb988473849538af0338db9a84b3c04a9ca7009ced4cc239ca4a9cef039c5b998473a495381f0538db9b8493d42f890ce72c80b3834938f3adc4590b70763409679e953897029c9da21a279a2fda3cb58ee4098cef60bd50ce8457d3646c1e272a02403b4731d891de94021b5dbd8a409ba80b254ae503a2968e76d76658263a42d443b6af385b0aecb22b25cc3600e696b2e0df78006feb28c68d329b9d41580091392a5c0ed0768b2291a7e7e835d2cad919c3408ed9dd249836cecec807307b9804d3c6d9194301cc6d4c8269e3ec8c5c00b3a749306d9c9db12d80996d124c1babec4300cc5e26c1b47176464f00b3b749306d9c9dd10fc0ec63124c1b67671400987d4d8269e3ec8c110066bf285ae6a3a26f9993b91ddec93c78db46016f33ecf342d6f67e19c0eb1f853771dee658b1932ce10e040937873e175ca9d98864bec3a498154b85968b9563b967917dfde62d802d0e30772e1061d5872c9997033b1d4889b6bb445bee3cc4b196c825d0fc4e86ebc55f131c315562022029d6fe3122ac5701ac8336e7b496f84a908d6df02120f10f36635e46a1b0cdd52257e5e22a68d1922d2bfd08b0d22126f916934ea5262ba636029c434dc2996725ce0b01ce5c9370e65b89f32180739849380bacc4f921c0393c8a6e8ef47c39f2acec33ba01c0cc3309a68d7d469b00cc7c9360da386a7e39805960124c1b47cdaf0330479804d3c651f37301cc9126c1b471d4fc3c00739449306d6cb19f0d608e3609a68da3e6e70098634c8269e3a8f99900e6589360da386a7e1680b99d490d4a526757b206e57280739c493849ab4764384f0538b7370927e9d42a329cb7009c3b98849374962f19ce3701ce1d29716e25718e70fe5730350d892f4861fba4950b9987707c142b79a41e179ac4fceb75c1714cc20ad3df54e3984f013b9d4009b9078b1f1e2e954ba5cc616a8194f86cc00b0a2958b225524e0360275282cdf6812d179e2235428ce72b92ac766a6345ff108077d2e61c7f8f6ca3bc03a9500e06282753a2ec2550ce60d5622d24eeb75426dc6bf8eb9eb52e61ab0470be5c74b1f3b77b7faa732c75c412ae744c561768060ab2295178da0d17b581883dedc856d86e01ec73aa3993aa6dcc35e70094d32851764881528594d4f9ab98aad2f422c0389d3ec74c869157a36ae2c44e746895899cd2ad5411da69761611e0af00e019a60326b46032c0df00c03b990e987088840cf0b700f0cea603261c362103fc3d003cd374c0843d5864807f00806745d1804df4c94f77df18c20169b25aed5100ef6c73571521f48f229bf2f00ef3d0ce89a2968bf50d78b55cc24a18592d7738b0d0b99418f9ce467365afbf5a796986b04c9eeced6befb705f6b74b14f637acce064b44a7b5bbf4b4edfb75dc0330cea31ecbe7c0268b0f9732770530fee8063187c9c5394fdce573ec0857a69b4d05731480393f8a4e946149baa2ed1e977a0ea02c8c6268af608b1bdadb1b205c10c5a813b7c629a28cae154acc745e2916897c0edb570ce65539f77805a992d9bc00e5680076613493ba37c3527f64f8fa802acfaee6cceab4d1157c676089bb45b13643c11664876b01bcdda370c6497f7f0dc2de4eb2758e1b8364bd874938475b89f36b609d8b4cc249ba631119ce4b01ce3d4dc249ba9f1619cea300cec526e11c6525ce3700cebd4cc249ba121d19cedb01ce2526e124dd29930ce7748073a9493849b77624c3b90fc05964124ed20934643817039ccba2688df305d6b69c0d9ba7027cc5264d49184ed92227c3590b5a412526e1249deb4e86f37c80b3d4249cf956e2bc1be05c6e12ce022b71be0f70aea0c4d9540828758a1d77e08c4b26c345365ba331286a5652e2eacf123b7ee3fd31dc394615e26f3e64512b444e118079b00a05b508bc90a752c1ce03b0cba2f187cf8bbe7398cc567f07f8f6de9cfef091351fc9507e0772c955510ce5f2c1b2698c8f2df211c8156230b7caea11c71a608de5e6ccceb07191b4d5c01a2b28517664dce18a172725f2a5f90c737ba9b63059370536b9da5cdf4a1b97933e07a05d13c5022be98d90e75bb9f6dcd30066a549306d74387813c0dcc7249836ae3df724805965124c1bd79e7b0ac0ac3609a68d6bcf3d0660d69804d3c6b5e79e00306b4d8269e3e4ea8700ccb526c1b471edb98701cc7d4d826963c3f22d00739d49306d5c7dfb3d0073bd196b281096e364b3cbde059d1d1bcc9e5e4ad8b4249b5e7a0cc0bb1f755f52ea4ee291c23d9bb0546f4405f255007263d4f3ccdd4e61de5fb49aed2446822a93bac910022673926900f2d3fdcd99736163ab7d3840794034b37f46463fb0f60515beb120a91f6892f7db18ca8a1259c2ee0a701e6412ced156e2fc1724ee834dc239c24a9cb7029c8798849374b72c329c17019c879a8473949538bf00380f330927e92eeb64385f05380f370927e9023b643817019c47988493b447890ce71100e79126e124dd1e8f0c6719c07914254e7ea2d62db2cf93a30dc074b449563786b23f93ccea9a81d6ce3126e11c6d25ce6f81751e6b12ce1156e2bc0ce03cce249c0556e23c01e03cde249ca3acc4f936c079824938475a89f32e80f34493700eb712e70c80f3249370923a7091e1ac02384f360927e95eac6438f702384fa1c4d99dc5ef33c439d4323e72eedf5dc83f83927054926c5acbaea03a7f2a25d66d7d5897b1c4a902e94f2a20444dd6107d1ea03e2d8a4958a3d996b69ee6032013383d8a092fca5aab85fdf12c60aa8457aaf5ffb0771fb71381759e61cefc361bfde08b01ca33cd9d9645e8ee4596876e0219c0599468d56a9bc3a3f7fb20833701c03bdb6c5744c2490664ae888783647f4e14157eb8f4b82e89db5dd63f0facf55c4a9c7d7d657d398333d6f51be44e932f47b62be6402acc6b81d59e17cd2215a3a3cf53c9aa4ded00bef3cdf1eab471c2c11c90e02fa044d955533cc5b7ebd78bbfe09ed7845d26fda9a61e5c0f6cf342d38012e69564402f03402f320d28e1ec3732a05702a01747512355653caf2a95f8d606d9f23af76602bc9798b4d61ce9000919cebd00ce4b4dc249daa34f86f32480f3329370928e3791e1bc06e0bcdc249ca4ae0f64385f0238af300927a9630e19cecf00ce2b4d1a0d1d43b90810d968686780f32a93708eb612e79fccc379b54938475889f32680f31a937092ae714c86f33c80f35a93708eb212e72700e77526e11c6925ce1700ceeb4dc249ba7b0119ce0500e70d26e1245d2d910ce70100e78d26e124dd0c820ce70a80f3a668468b36c3083cd910f10f00dfcd51b82ff00f2f1796a864af968fd8373e1403f06e89c203144fca70d837a2418dd1547df04d4053f2564aac4d05d612b1e67611dbd9b944b883069915760056b869f32f38a5aa3af68d9c9702bbbbcd1490367a6ece06206f370524a1031719c89301c83b4c0149d8d94b06f25800f24e5340127a1293817c1080bccb1490842bc69181bc1680bcdb1490840d403290cf0290f7980292d0939d0ce43300e4bda68024741b2403f93900799f29200957cf2603f9290079bf3933806cdcbc610f80f2014a949d5910afe01156ee1ed41ec07cd0249836ee1ed411c07cc8249836ae431c03301f3609a68db3269b02988f9804d3c602e81fe6c17cd4249836ee1ec480653e66124c1b770ffa1558e6e326c1b471f7a0bf01cc274c8269e3ee415b8364fea449306d9cccb70d80f91425cc812c71f66e31e3fbfbc279e541e79f13660664ce056f00e44f533b174c11cba1701567481b2e735ee643bbfc353278646b23b40639e93394f07a30ff9a1dfa19e685ac4a38fc57b3e5425805ede8e4b154602b01d86729c1f649c808dc9511bc057bb840ee3b943cbfb5b152751848facf45b9389a0b94af95c03382c9da1e517bf7c47a1a607d3e4aacca4966cb9c467d09c0fa82396b26d8d800180072d717a3586a0af6d9a75f7011a2252bb8ee0456fa5214aeae794e553f7257d762aa443e06e07b39cabcb3cc5162a16800d432ff227d912dd773209555be0cb0be128507f166b049b2dcf206905bbe1a450b3fbd11cee15676971c0d2cf1359360dad85d721c80f9ba49306d1c303e10c07cc32498360e181f0c60be69124c1b078cf70730df3209a68d03c60700986f9b04d3c601e3f500e63b26c1b471c0780380f9ae49306decdbac0630df3309a68dfd453500e6fb26ad6a445a0491ad6ab40ae0fcc0249c7956e23c1de0fcd0249cf956e2bc15e0fcc8249c0556e27c07e0fc389a0ee1256c2de8c98c643d77327c939987ef134a7c7c86f65ce7c4ddb4898b5aed3cbed2797c8d18b0d82006d7cac4997d181b018c9f5262ecc9bc5d06dc01de258eba7c178962c183fb7f4c607cf95c3efa53e408e009bc84a965276a2c84bb10c0fd2c9ae54d4645dfbf4ee681d406e4909f47311a99d9c637844d4a32ffa48b81657e419d7b262bcb55484987cfc846255f0016fa2525c66c0dc6602e8884fd9b6419c09100ef57e6660084c36d6419c06b2003f89a126d2f8176bab0cf793c2d3affcbe4e6775c94f2a05b252280db71b1f3b72b7eaa732c75c4965858f6370780bf313b6b201ce124cb1a2e0659c3b751146098d3d7249121106f22ba8eaa009b02307e174d23346f0bf2001900f07d1f4567326c3da9a6a8d738b5bbb5d415e4983f44e1330f61a62ea0ec053b0d80fd9112acda29389f6d693b059f0b10fec71c1f631bdd697602287fa244d93b00caf9ce37b9901a36c7f94b75e755d396ea1ba84af5a9a058fa2f2562b5b1987296ad147da12b93daac8d83c6f700a03f4731f491fe76238438c9967d6e0070fe6212ced156e2fc12e4a8bf9a8493744901329c97009cbf9984b3c04a9c47029cbf9b84739495385f0738ff3009e7482b71de0670fecf249ca4de75643827019c7f9a8433df4a9c1500e75f26e1ccb312e79e00e7df5174840c13bfdd23777698cfdcde267bfb928a01c27f2811b616a12915022689d6387f9dbb7d71bf101bd7046907d0fd1b451f129694232b66c8d696fd023420594363d696b57142d6de00658c1225cc138b65822e65eb647e1841e7f0175408ef03093b8b12613796d8a3a95f3521b299e96450770076d98012aa1ae0e576595ab70c95ba6dfbc0c523c0361b52624c74a1d15be634f94264163a900a6d3780b651b46883782711a225ab2a9d06d0368ea250cadbe2462c7300c22694083ddfe3cd30bd80ccbfa837c0d7341a7c055b90634c73507a37a3c4a71c63d21b2fcfb372c4fc4a608bcd4d8269637be72a00b38549306d5c80e22c00b3a549306d5c80e20a00b39549306d5c80e20c00b3b549306d5c80e24c00b38d49306df4253a1ec06c6b124c1b17a0381dc06c67124c1b97e0bb1ac0dcca2498362ec1773380d99e12a6f2c10ce25840689d6483b7a34093b2836940092d940ce80400b4a36940095b4364407b03a09d4c034ad8222203da1f00ed6c1a50c29e2432a039006817d38012f62691011d048076350da88d2e5add00d0ad4d034ad8422203da0300ed661a50c29e2532a0d9006877d38012f62e9101ed0580f6a0049acdc2ae9460e33e6e4b00de6d28f136764ee6898fd63a0f103ab792b91d706f0085aa27252ae57334bcae13a484953135edd4f6a5f9ee0718b32931069f2d6963c7471790807b998473b49538ff02d6d9db249ca4dbdc92e1bc05e0ec6312ce022b715e0070f63509e7282b717e0670f63309e7482b71be08706e6b124ed245f8c870ee0170f6370967be95380f0438734cc2493a1c4c867325c0398012a7da1b704b5a196e35803790129e5ae5884f5f99ccf80cc94a369795ca26a5bbb651a910582404c0e5caab99cd5351fb01c483a248ee58624fdc7c84b0e79d0ce79ea09939d8249ca46e5e64380f023887988493742504329c97029c434dc249ba280f19cec700ce5c9370922e194586f3238073984935cf3156fa7d740038879b8473b495387f0115a53c93708eb012e7f50067be493849f7c122c3792ac0596012ce5156e2fc10e01c6112ce9156e27c1ce01c69124ed21d2ec970ce053847998493744b46329cfb029ca34dc2493a03930ce73280730c25ce01ccbf6e36efb82b7178f0e5505438bd3568e0c7e0a726387f55092f25d22554ba661101ff0454f4c75202efc892cf388aafe49381245b106d3200b99d292009bde5c840f60559c0385340dab8445f1700727b534012bac792813c1c80dcc11490848edb64207301c81d4d0149584d2203f93f0072bc292009270c92813c09809c600a48c2695864205b82eacf445340124e1024039905404ea26e5072847096c564e19a50e4285ee9a85424449788402c779eada6c3591023c2d908e09c4c8973188b6f50d6326c49487c65ce49ce13158e3e6bc4190f6a44cdcbbfa9f03f09f04fa1c4af16b448779493b0894936c6b93b8039d52498846b2f90c15c04604e3309a68da3ef3b0398d34d8249d801420673168039c32498844d4e32987301cc9d4c8249d81142067317007367936012363dc960ce0330679a0493b043840ce67c0073964930099ba064300b01ccd926c124ec182183b900c09c430913df537daaf3bb4c602c71c2bb4608b67f4ff5dd9907762e25d8ee02ec4ce7816231830376982c61ab0444be7045b1f3b72b74aa732c759e2aa1c34ab65845138075174aac6ad97d3e352bf2594764f82681e43e8f125fb07db16c5cda7c1940399f1265b8dd5d08ab4b64cbac5c0b12796114253cd65b1f6fa5a3acdc1c621ab0d30526c1b4717388e900e6429360da9883ee0860ee6a124c1b3787180f60ee66124c1b3787180760ee6e124c1b3787d81ec0dcc32498366e0e3112c05c64124c1b3787d80ec0dcd32498366e0e3103c05c6c124c1b3787d809c0dc8b12666321a04638d3d43242171a328f24de57a2502da14495cdc2ae0e4b581522eb313a1458e2524abced99d741bc5674b1f1156996898ee188163c3d900a6209b0d1224a88bd42dbe8702badf40960a5cb4c074c58ef24037c35005c6c3a601b57e1be09002ea104ac666ac281386cf4887cf88d0c672f90e39646334e347c0b1a27ea0bac717914831b89c93d9de10d1bb7ae5f01d0aea044db9dc5bb7c9748ef79bf13c37af11774e526ac01f01d9b48b0de0cb0aea46e312d712ebbd86c6c317504796319252a35089c5e4bddc6becda100e5de942895fb4c2683c0841d2064b9e48900ec2a53c11276d391813d1a802d37152c615640067622005b612a58c2929d0c6c0100bbda54b0844d4e32b0c300d835a682b5b18abf0d005b692a5842f71b32b00701b0fb980a96d0498c0cec4600b6ca54b036ba32ee06c0569b0a96d0798c0cecae006c4d141d7c23e4b854b94322b21129327c07037cb5e6f401d8e8f8301ba05c1b45cf7dfab38b6d5c46605fd091b7af49384937e921c37901c0b9ce249ca45b48d16d5d0a70ae370927e96e8664383f00383750e24c3597d3df156d6341f43580b99f49306d9c36f33680b9d12498364e9bf912c0dcdf2498364e9b7918c03cc02498364e9b791cc03cd02498364e9bb90bc03cc82498360e2d3f00601e6c124c1ba7cddc06601e62124c1ba7cddc2e603669e4133e3541f824d142e16d9462e66d293a944d637cf94877d3d162e77ca6e8b1ac614b1d1c8b9c7fc16260b1f34f773d26f68d9dc2d6b14a7195cb2b11b22b9cbb5cb36a368c6fb470283788c6d22072448fd50487798df3cc3c562abebe9ecd67ee96a9739cdf6ac5925a812427d6c17963ae738d4fa028155f58ed68b292558910c76fa99a136b2a3895b2b59200079823755dcbdc853567c8beb23227cc4542932ae79986e23b6ebb2f27d60a9c2947f919a2a7976bc12328166b27e384eb334b84a5a8ce0facb0eeaddc81ce63b191ce2fb7cf78685d6ff150b9e867853c53d753cbe431925cda611c7b4c9f0ecbebcd965285c8357ffefe72b1484aa9903a23654853870fb7cb9649622577108f8b2d39fc87f37897d12eccb473ac85f3175cd4778ef3708950aa6f45166bf4ff00011fbc6a62270400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/4f7337a268eb04e41b869ab81d3de2e5.asset.meta b/Assets/SerializedUdonPrograms/4f7337a268eb04e41b869ab81d3de2e5.asset.meta new file mode 100644 index 0000000..194bbdc --- /dev/null +++ b/Assets/SerializedUdonPrograms/4f7337a268eb04e41b869ab81d3de2e5.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 66071a7e8f84b06498b08eea351d1bde +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/50202e5b06e243b4bb51a5f88c7ad2ff.asset b/Assets/SerializedUdonPrograms/50202e5b06e243b4bb51a5f88c7ad2ff.asset index 85a8437..851db90 100644 --- a/Assets/SerializedUdonPrograms/50202e5b06e243b4bb51a5f88c7ad2ff.asset +++ b/Assets/SerializedUdonPrograms/50202e5b06e243b4bb51a5f88c7ad2ff.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d09781c4756806b64ebb265c9b77c5bbe6225b635b27cdfb125d9962fd996e538b11d59966459b6242b3a1ce7b4733bc786000b0408b0c072877b815d58204080702f1076030458ee000b0458969bdd7ad5559ad73df57abad5f326d38ae4cf6a754fd7ebf7fe7af5eaec9a82a4903f89b5f2d7697152d48b1ad12a3ac535d12fffaa97c73ef9cf3933d78f8b4179ec96bfdbe5676b45558694f0b33a314ffe6e9267436258a61c111df2d8a33e6f115df2ef2699b64b9ec1d54bf27f97bc2b3159266a150da2591c1395893919449c568986f4b504d8952891bff78987e4a75d4a297848527d54297fb5c84f86d4677d526973df59715e99d5273feb90690645af947951492cb9355da83f847358a48f93f4517e2a8ae4ff117d3e5b1f67c9ffa5faef4a7dacd0f75ed7e773f4b118dd3b571f4b2de9cbd0b579fa5882aecdd7c729e8da027d9c86ae2dd4c772746da63e1ef6d803e7325714d74279acd2d717a37470ff83fa7c893e1ed1d76fa0739073469f2f75e44d795b9f1bb933904ecb9c7ba6beaecf0bf46725fa6f9c1fcbf5f1a847ffa3fab96f69fddff59165181cf3c838e6c82828736414acccc0c0c839eec96f73ff0964e309742f1c5b749a87d0b97cf6a48d1ed926dd297dffc3e81c8eade81986cd6974ad155d83e33d5ace23e81c9e5be6c3cbe8b0029d838c4735276313c5e3b84f7a2cbfd9c3d7703c23d2fdf7a4e71967d0751fbe930f7ae49874f77af836139f3fe6b9be029d2326935ecda06fb370ebbbdc23bf19a537b6cfd036bca5cf57a2b4705ca5ef95cf2f7bc5273f4d59ba43a4e2121cefd33a3c8ecee5f30a1739320b1bf4f5d5ce79c56bfabcda93fea627fd651f5db00ec6ce3b853b66f8d9709748c551389ef5d87056ebf07947665189bebe86b0c1a4bfe94e5fb4d64717ac83d1636d081bd609b7bf9f176edf3daf75f8b8b6e14d4fba0a4fba5be81c8ee7905ee7b4acf71d59c5b5fa7a9947e6fd5ad613fabc065d377230672db7d8c4259bbd490b7348a3cb4cb19fcf7af5abd1cf7f529fd786e0bd5e1f8d2fb469594fa173a957c96c4766c94e7dbd8ef01993fea627fd051f5db00e266f3684b0c1d41353f4f182c7860b5a87771c9920465ddf44d860d2df74a72f3531c6a60bd6c1d8b039840d5b84dbef2f0ab7df5fd43abca66df8b4275d8527dd2d740ec776a457bb96f59ed6cfd83dcd23b343cb7a5a9f6f45d78d1ccc59cb9d72c4c7de6d16e6906658eb72db27ad57bfadfaf9cfe8f3ed2178efd0699fd5e73b9db453a70748bb4bdf6becdc2d82b7d974bd35b553a7b9e19366963eeed1ba3e1740bea9633b85bd1dd685fca00bdd0bc74bc2ed73971c5dcb863db24dba6ee16e27dc8daec3d156079bb42bd0396a2b4c7d27808dabf4b147b8dbac3dfa7859b8cbef656d872eff65efa3bcf0b97fda6c1f5d8c0e7bf5f1aa96711b9dc3f10ae27d451f7b3d7af7eae7ddf6dcb72f44bed78be0fe3bdd795eb9698b4cf21cfb90ce8d1e1dcc3dfbf5f19afefc79740ec77e24a35f1f1bd0359b7e035ad60be81c8e0fe8eb2fa273d0ff7b1d9bcbdf20ee7f099d0779be1fb3227d1c146e5f197474a9d8e8e85261dac2079df3699f41cf36f797a2bfe17820825e4dfab993912cd0e74d7dfd0bfafa21918ab77ecf327dd921e1eecb0e3972a7ebf6ef7463cfb027cf86911cb8fe117d5e15f0f9ae6b8509353a725046897699bb497513b488830ee39894990770407411fc829fd5eab1c332100e4801965194563546332c5b2975d65194f98932a477bdfadd2eefe851425f4e7fc4a7d21e01caf5ca7f5d680868485e3fa046906010a8477e52238ec823a4ba209b5167e53fb794d3f2b1bd32d074c94ef2887c14c8bb20d54ebf339349305ce44d7352ca7446b3fae4150374409ef72a0d5bd4efeb4ad32ea57d93bc36acc6d6fa6535b14f1e6fa8a7a5db3e28ffb63df3944666d7d13ea8455d7786ce4c3635486b40fba48a711339f241e408a02f7a5917c3c94915d55e48cb8909864e90295415802363bd4296705dab1349384d9c4c2318dec6740bedfeedf0de2c3b447eb6d8c940762f5416a472f84b1f4dcebbff9dcf7eaed06dda06915455f2a20ca6f9810579d589b96912fc4d282c9c5c0b8a7af1276cf8d570524b0ef13bf7f5a8fbc2674091aa99dc19a0009d927fdc90ff7bd5231e92e23b64d3774456a510078fca9bfbe5ff6ea5765a4ed582d862053bbd2acda43085bbc086bb24d7b833c7173fdc25a376a570c38f9d60294130930e14c1493682aa6d768e95607a43ccfcb54fa6bd2c495c575e3522d3db1a6efe4c6100669d87a99de754c5b3cada9c0ca7114578b285702d102eb32959ea5112f4230417dab24e0d7f9dcaa1f3c367d7941428fee1dd1fc673d678dddf9e57e52aafe6a5199759052a6f8a6c7903082bac5a7933a79cce9c625be64ccd7d45e0c4d4de0cad0a7bd6c010c1d2c091690619dbfd75a0f2a684ca9b9951f3a6d42619f2661665b057f80c5af8144aedd951d59e4a499e13557299cd59d5c5d60fc859a99509fe0e3b3770d8af54ce3adfd759291d28879d66a3a82e9efec0e2f1d838ce0bcc71bee2b82043480e4bb2dc46b23cf7fe986a948e8de382c01c1792fe9859078a62858da2ba98fbaee0d89ac6d0afab0c5c012d167e3db9b00de3e954b45d1235dacea0242f8d2a79a62dc79521bdac39de2aaf39a39a8dead31e3514068362ed4a7ab3e47c45384366c68ba93426ef8faa356c234a1b7f2fa90a5cca96290f8199716e8d29af9a65cb7b688f2cb71911a233309b12bc22a2e03936c1703f4c84476d2ccda584afca82f04a9b7068d5dc110449252d781e558057472dc0f329c9d551252fb04986c6c99d4160cca7052fb4090645ee0a2278212d78914d30740ad688f401932fcb9f34e1a5b4f0c536e15037c232256b95e315be9816bec4168655d47f82350c079d10b30539f3dc6b2aa881466646e4a43c5e525a74a911bfae001369fe017bdd289f14e3a4aabb1a45f0693d7e2b60495581aa3892aae2a809597184af34ecd556ad7a7a7eb1a12ab8a554a95d6f29b567129682e5536aaba8f05867098f8930e17119a5f6068bda8f86547bb92d1ea896c015d678c0e9abfe257c6390d89fa489ada0c2f3264b784e840ccf2ba9bcde6cc9ebb72687cbeb5536e190d75b2222b9c326189a4ab0002e6a53693585649b05c9dac27048aaa952bbdd526a43356aeea4d4de6151fba5906adf4501df9905e06b28cd7759347f3fa4e66b29e1bb2dc28f178513bece261c8ae61e4bd1b462f1299a3514f3bbb3c03c4961d96bc1d2591c0e4b2d257c9f45f81b2185afa74a507dd4125447a9dd60517b654938b53750c21b2dc29f0e297c23c5647f54269b28b50f58d47e2fa4da9b29e1072dc20f968613be852a9b4d59289b5b29e087a202df4631396c61726e4a3826db29e1472cc23f1952f80e9b70084147457a17a716ba38f04add1435dc92f69c5afa393b29239a2d467c31a411bb28e1c72dc2aba68613be9b127ec222bc36a4f03d36e130f30a03dc694b58807adbe8c29556d9a8ee941f0edbda61c5f433efa60c6ab11874a42c9c417b2dc2936a68ef84c8dd907d907568f6763f2c3c28f53050ce6eedd7c2644eb57ad939f8f3a97ee73eca154edb5c619672056aedd2585da39e728d7b2caef18969e15ca3810abf67a286df460addbd3674150add1109ad435d3c287f0f49941ddacd864221db4f3dfb3edbb3e7a967b7c948d9964107f81c1c723894360728c667a3323e48b9c6398b6b345484738d264af8798bf0d7430a3f4431b93f2a93c394e4b6a8928f50922f44957c9492dc1e55f2314af2c5a8929b6d926156105ee1cb3824b18c167cdc2618e203bc4b16b5b9798212de9505e12729e197b220bc85cac9eea83979ca2619eab2cb4172d26770a9d52238a966fe0048ee4728f946267b6ca4acad13189bad4ec028108796543be6b42d8b2127ae06c9e22b7416df4379656f54af3c4315a6be2c14a67b2997ef8fe8f2f7513cae45e57196923c1055f2394af20351259fa7240f46957cbf4d32f409e065c2a8437a6d94dac351d5be40491e892ab99d927c3daae48b94e407a34aeea024df882ab9930a1e0f6521787451c21fce82f04b149347a232e9b649869807efc74789799729951f8baa720f25f9f1a892afd824437fe56610183e0b9bae5a0427d582243026f76d9ef4f9f9ecb67c6ed978595b3eb04aa53a01133d7cba52ed9f5eca919e8cea487d94233d15d191fa29959f8eaaf2359b8baa656db97c89c4dbcc0d3724f84c60b77b56d85f20c9f47cca95066cf4d4dabd0bacf4ccc29916d1200ecbcf606c0a643ad78f4b89edf2d9206faf7a426ab18d3b853fd7e70273bdadb8ae14226b9a51c41fa04ac2f3514bc22025f985a8928728c92f46953c6c930cfef7529080739b163c62130cc39ab0cf46daa0e9f6d18c776762ab72f75e15b17bb453c3b06993fccb49de23a3759b9e32310e880ba3f733f74b1f61065eaf5316bd6cb36895a7f8ee95ee31a85cd7b10046f187d50071972a9ec3b2e1e3d535f55240183d1fa4f4fc2a9b9e87c81ad4b602cb6b055c83a24e6b0e9f8c457e188b6f5016bf62b3b881f0b5632a471e54f65cd5afb3a4bcad597ee2ec9d11cea2ecf9df4394955f6db372afc7ff5239e2d8744d064fc7fb602ae2947a77b8df371fe9fccd8e7d0f53f67d8dcdbe3a8f7d7e5e7a4097b5a0366059612c7884b2e06b6d16b490250f3f1fe756a3acbc4674d48334b427ba3d30c83dd9cac54729061fb531d813c84bf7ca18dfa9eb806b59f1d2b145d6c728dbbece66dbae101eda92d14383d66fa72521a813c3d8f53865d7d753f1133f11bf8e9ac95ba9747e9f64cb336f52567e83cdcadd1e2bddcfc576b6aa59f941792fd420dd6a4edeeea76e19d9b3ec1665d9ab36cb0e072a73075403de595f30385a3f34cbbf53f9fa41d6164f50367f6390da027b58d4da02cb0a63c1939405df14249af859102e9af895b6b14493a728bbbed966d781c0e52c533cf196ae5c94bca7295b5fb3d9bad1d7d6a87e38762b9ea1acf8962075b6bf15e17cd13f9fc6e28dcf52b67dabcdb623c2f40dcc1b45f87d22476b88879744bb1e64691abdb351f6109d71c693aa6e8679dcebea6e87045c7d403d06ec71066b7ab43f3fec536b8cc5eae728abbfcd66752ba3d52dead34e2971445904725369d263696a2b816c70b84d71f8988d032cf40adeb3c3a5347dacd9abbd592f48b7d9d36584b1f479cad26fb7597a1f638e3b44dcdf4b735ab590c0db2f5aeb19bf7c1f6b6fec058ac87750edbd70a302a9111cb3c40f0f4ec21d3679d4306618cb5ea42cfb4eaad609a389db3ad821f4a84a313c6a57766a9d97282b3e6eb36247642bcc9715819e1daa2ce3119decd8f411caa6efb2d9746f689f736a53b7e661a84419b9f28fbfc5f25f422d5f6f54b101fa43c7550a381b1249b56d40eda8c599df0f8667f7497d20274e8d468ecc6ffd7eb7a037484e5f2936d6bd723359618ba135288a62eb82bfab9ebe2f70b1b6c8c892a4d5360ae3cdd2ef815c2dd5b95a90543b3aac19a33765d602366c2f9a64f7a1f03b833a028ee932a65e2648ad106fd10d08a7830d19d1ab8a1ac408b83de3d3334d3dae53024cfb230b3b8683cb39437283c2193eee2c12a2b8b0a01672e5fb38d195bbd01d95884010283ca0fe8e03acb78b53b0be9f13d62c8b9fa550c5cdc7de9d9cc2f603b92b9ed0c6edd61111625cbd8a0fceb43a44db38a07b259142f73a27bae9d6e2e98e6d710076ae3405ec073981cd54c0c0a31ad4a3a9318138407b6d5a0ada0f7142ab707959936ed0a6b0c5239ec18fc1f5c3b9c3650a25eed3c501d7ab25295c3fc2896bb6a5d6c4b0e2566f7eac10c015177a84ef4f133ed6fe4138da744f06fcb451dc502360834a5ea7b767a3b65bcb37cd7f54a09e497580e8541db289511da225571dca7fbd9a64ea8b54676c807bedb7859bea40ed84eac095636ae8c13e64500b430f3f263edca302b5302af0e3006144437062e9273863a97917da1904ea5753c67ed33db01d8b4787285f9b52ea8aaee5410c1c4b84bd886af29fe0c409c5e6b2f0be46ee0e17f1c3371de1fbc95c786337e98f58fd36b5110e1bce522e9cbb10ce9fe2c4091bb3b68fee4e91a15f9c3d70cbb8c0cd44e03ec9096e6e86a8e85e9051cb87720617cafb11ca4f7d9028ddf3198c289fe542790da1fc69eecaa54d45bd36e14c930d0b67a276404ddec26df1ab5c36227c3f930b4fecd06dc561df196e464f2ce642b907a1fc34274adc27e943fd06d34f88bb4fce47207f961324ec233f249cadc47007ac4e76a8e2876d2ac2f6739cd8c2f75a18db896c382f239c3fcf89b352846b766f8b61a3bb0ec17c239f606e8d21cc5a04f317f209e6a618c25c8360fe623ec1dc184398772298bf944f30b7c4106612c17c339f60c671d4672d82f9cbf904737d0c612e43307f259f6032761bd9602e45307f359f60324e35b0c15c8d60be954f30eb6208732582f96bb980498d0d793b948cc59cad3b598560fe7a3ec164ac80d8601e42307f8313269e88bf3efa62428e06d8d8a61fee40f87e93131f4c199901367ad504e364582517c23284f0b73811c2833a5ce86026d1a1c1866d3117b60a84edb739b1859fcb8e6373671bc2f93b9c38cb857da4dc4c39c4af0a9982d07d8613dd42913e5a1e64c319c67af90a17d4d308eaefe62354c696231bd45604f5f7b86b6bd3d8e9702d57c9518327c985701542f8fb9c082b509c0cf42a510c5a8bc508dedb9cf0e0db4e3ae51f1725816ef5da78371faea95cb826235c7fc089abca1203c3bdebcc180d6f73e11d46783fcb89779ac60b0fbea4e01ad9f092371bb8422e700281fb1c27b81a0dae57de04d8a0167e306dfde3d876bd64f559b69593cd08fd3b9ce8dddfad55af3a8db0ceffaae8f26480f16cc64e245bd3fd00c2f9879c3833ad598bffe4c32284f28f38512eb1545641b7f96145fb0417daab08ed1fe7a2d0075f8e15c721df0b08e7bbf984b32e96380711ce3fc905cee00371715cf8b21de1fc534e9c6676c7e9a3e3616133143794abdefa7c2e980b10cc3fe384993eb66e3e629c9258c885ad1c61fb3c27363c290642c6c79b10eb11be3fe7c417ee4d08c685036c6f423422947f91ab68d82bcc3683ee2f82ce915fb28d27cd4630ff32173575f07624e34a74b662de8f70fe1527cea5169c61361764ecf3b08db3df8be0fe757ef92a63ab92cd573b10cebfe1c409df30e5c44f1829621cdd6443558850fd2d27aa15c23dba093743f2015568dd7b069be33e99105a99f0d563b0766390b778b355455710e4f73821aff2401e1078e3e0f13fc9318040ff1d2768b3190ed5163596b2626ce5c2b81761fc7b4e8c33847b4fa321a5489f1210e791f60604f01f72519f071f258ae37b139b10ce2fe4134ed6314c369c4d08e73fe60267f0d626e3fb666c85bd07e1fc274e9cee3dd5c6dffc643502f9cf9c209759fcd281066dcc7e7148ad391a1877b3960508f0fb9c80dd2be2f040718e4695d81662af4308ff85132174467a44fa268f71ec64ce40d0fe359fea6fd6a138b6625c8f70fe5b7ee18ce3eb7a9b11ce2fe6a2fe36bdf31e0fcc1c552f6cb1f10c02f9ef9c20977a40767c0886884f21b85fe2846ba6d96a7503297d2976dc5fe39b8350fe07274a98f035abda036ef51d037ca508df7fe6a2fa09de7d64ac7ed81a47ed08e77fe513ceba58e21c4238ff3b173883378ee2b899ce6e84f37f38719aedddd35f1be8d7b7c46f3d4702c1fb5f4e78de799f0ecf98d0786f1c7523d0ffc709da34e1a922ef2ef0f16bc29f4020ff3f5f40c6b12f741c81fc72be80647c559f0d6427020901352f4032368cd8409e442013f902927175111bc82e04b28013a4f3450839ff420eb665309310b8499ce0e60b6afac1bd7d4e8e0632d836d3a944402773020db7f49ab1e1c3d654df87501672a20c3fa8c1b83b305b2ffc12c259c489d3bc530195c9f8d968ac06e12be6c6674628eb89d7a2d8f0b1bd08350de12be1c467e6b9d78fbb79ee2d0861692ee261f061b438aebcd880704ec9279c75b1c47910e19cca89137fe9656a326cbc7c61cc3c84b18c13a3d9c56058c6c81e116e1393788e482e4168a7e5a201b47e5c3580ee42f8ca39f1c1de59bdc27c47aef315acf1eb59cf42b82a3871d1afd1a7de00cf91efb1bd0fbe10c19cce3dbe631adf4d69954bfcaa9312046e0627b829081c6c7717dfd7ef8a10b2999cc8f0377dbb6707735660d9eadae508e2ac7c6a5caf8fe5d764dd8d70ceceafa1b0387e81411bc239279f70b276fdd8703e8070cecdafc21ec7af71db897056e66256909a4288fbca891508e4bc7c0119c795138b11c8f9b9e8cb048d978c75395bb43c87602ec8279871dc02e73c82b9309f60c6b11e3f8c602eca279871dc95f20882b9389f60c67105f9510473493ec1645cbec706f31882b9349f60c6715fab1604b32a9f60c67189ca3d08e6b27c82c9f835c16c30ef433097e713cc386e287216c15c91abc55320647c6c48bb15e15b998b596dec8be37b23bb3e84761527da700b4e191b466c0b4ef723947770a25c2cbc6b2fc6b78fee406057e7d3783beb6c105b34ed4538ab73b5b4a08f78593eeecb5ae62a98c5851ee1fbd384d72ba3c1773a94fe4e14ac11078459a4d2233fa9911d7f67e9ca05e95d67e5bf7039705efeb35d4fa8b7711bc50d31a0ae82bc4e25bb4f7eea4c1ad702ee3bb14354677861a5dafa4575d5699be802a084da1a129ee8ec9dd0a55a279daa85d2aeb63ebba8e82421ba2560071727a8d58c86b31afd85387dfacc5ccf2c1388f84bbb2be1ac6ab79583deace565268b1cf783f49714f52e25b529a3a599eda3fda2cc275792d01e1ad7f6af817c2fd1f95e90846d6812ebb3e07b99355a0b4f2e608abc0197d3e45fce1e57916540dd096a46f16c80e096d7a39e9bacca4fafce9eedeb70342b482e1bab5787d7a886d3ab1d694e9bd723fb4000ebecf9e0b53975d780f287f6515f70caf865f9776700128b558f8796b6579e752b5b7b94d43e617ea0b684f61904a32427cfd05fd13b9ecb0c1d2f6a215ed4ba8a542d14a9f513be9e555fafe3e4196a65ee87d8cf37a4fbf9c6093fcfaa9f6fe2e439860dea3ec4debe39dddbb74c787b56bd7d2b27cf72c2db27e2bad7d3b7a57bfaf6094fcfaaa7efe0e45946787a9d6898f0f2512fdf99eee5bb26bc3cab5ebe9b93e74c416d5ee1dee667c2e38dc7ef49f7f8bb273c3eab1ebf3757edf580dbb57c88bd7d5fbab7d74f787b96bc1dfe55aa6f296995693bf5daa166797fa792073f855f012ba1552a78300100 serializedProgramBytesString: - serializedSignature: 20534ca2e5cc97b24f699fd359c091d2b218265349901292e728340302dd27ae41a4ec48c6b3f948486c01d140668be7457d17b55c66c6e7ff3e0da546533e05 + serializedSignature: 1b6bb916cbe16e2edec1706e295c79f16f0179f1aaa54edc92a5dc865a49261aec63a494bb0cde923a857be934d22274955c0b1148e1f3937b8b663d16d24800 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/5463afdb73b505649b857341d262468a.asset b/Assets/SerializedUdonPrograms/5463afdb73b505649b857341d262468a.asset index a74cf2a..9d864e2 100644 --- a/Assets/SerializedUdonPrograms/5463afdb73b505649b857341d262468a.asset +++ b/Assets/SerializedUdonPrograms/5463afdb73b505649b857341d262468a.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5bd976134710ed913d5ab08db113c0800910487062ac91314b9e720e60b385c5f1f6c2498490641091172411c8635e932fca47e40ff229e12455777aec59ba6734426d1c07e97846d34b75d5bdd5d5dd2539e3087a5997e8b22696c42d5114aba226b6c4267dba45f70d7abb4f5ef9a268d1fd395d2b5477499c4de8c9af8bd6045defd1535b74a8e76b51a57b03f5cba24e9fef51df3a3d71e93afdd5a99535489d56c5bc782c1e89e3d6d104116be8d4966516db65e5e97a53fc42b57528c58338a83a4e9765aa69a36e8394f6da3d113fc0ac0daaab529f966892cc679098ff9bfbc226dcb2f23e283f0ffb9ef99e93775bd68fc8e70cfd15589efcec9765cbfe6f63da7af207e4bd20fb1ff63df3fd902c1f0d950fc9f223f239ef6befaf1f53e9605b60e62e615511dbc281525fa57021af67b2f3b0e86cc6c59bbc8887ed104ddb2440c1e02afca323e6c465258327ac619fdeb770ad508b06848e4787f82332042bd7a477dde77e6d2abf03ef65076c504d513ca03bf77a2a66c9a19e84a4acd1b04d72e1ba58a1eb36e43d25b5a32d934c62570df7592299ee4cdaa0120fd06d7a6e42c3655c7f86a675687f8fca3a98d79b34b36fd2fd2d468bdadea2cfaa315724646a1dd5134a57ee4e5b8fa679b286b577e0eb1f19f9108c30f4d971390d071d449fdf224c7cc4d00d3236162a57c6acbb5404ca2e0b871fada50882e96d8c5aa8f66f17ef6be24aac2d6a6498ee53b06097e11fdfbd3bfffb5f8b7fda41d3e68483656c32c1b4386059de94752c2221de04db1e2cb1a261f82d15fc589697f7107eb75d03edd21390c5ca1424c09ac5e6a82637402fa8a245aa16c502295181da4da9e42a4c6a62996bc8b215ecdfaae227a9d43c3d75e8efb68ca65be20d8c8df05bcaca6dcd9462014e325347524645527eaf494a8e4a7124e577ecda25895f6a040b1a049374d02138a04210bbbd574611f4b66fcbe441df515d85dad7b11670f92249acd0d82cef064698d67a9e3f24b8bd8332e3d1e78deb6905fa7a0686c0c055dfb6d5bc0d3af60655ec612ffe745fb1d71b37bce99e0971a3e664049c5ce88193b488db2ac4d925ac953d8c385cb70529156a9b3ee6f0716f3aecf56a684701ed44c4b86415741066151096380a1e5144c27fe86517428a717cd208cfa9f819deeb15e13199ff52b8278bf4ec8c75edf7e39ad520697c1d3579157ac83dfcba27f124290170073b947ac03e6fdc2d9cda5823ef04b844f77568c1e5d5407cd58d15cfcc273bf8ec32e32077b220ba4f6398b7e253d226030f390a0f99c19e6f53262c16c0400323793b3a3efbaec34a3737a76bed21f11049b1d7e0dab6d5de790c63ef2f64749e5f50793eb25f1bfb6a25d5ef217a5b6339760c843d1ad9bdd9beee7074da0d2067c3ecb6e539835172903f9c8ef1da35e91d6cc55c6a8f3dcbdbbbdd8bed6ac10c75a0afd482c3ab558cd1e27b925701a62db4d8924be17be8e22aa499511398517bc38c6ea61c52cd1404c6e746678a194f889f1d2714b3a334a6e24b49d749d065ce8d75140da928e235c17af94128eac7348927ea948aa8f12851716c4d822dd3d35dc7d9b06a57ccbbd9d34291c4f97627040427ed23c1df68bdc1b8de442f8a32bd9fa3a62c1e505d1582fc41825ba8e4e9c249644b9ed36fc94774967da6b26c3ee4a1fead806bc916695026a45f818da6449e6b74fde26a8275c1534d1a2b0febac3ca3b2b2a3e14f87b76bf91d70a80be469394c4a46f44b5e1a144775289e55a1b89012459d86c11912de8c709d7a8607a3771a3b8fe8ec3ca7b2f3ae113bc3db1dbd9daab897c6da319db59fabacad6a2370f4a8529433982d5a0cf17683fe6a8450b75606d94c8345388aac516983c6566394a3b765f11abd8095b7453d17d1839fdac2e1339b5512dd1f9b78ec0d8a6a1cb95648bb678860c987a1f342ff2df97a64a7d0eb17a64956b8896beebf0eaff5be845359d7fd013efae5704e5ae4c922a4f9847ae02cbde06735e3f0090f7bd05ebc29598b2f78b401b50fa5ffa2c715f048a6013049ca086f2c6095a4d6e4e7c4919252603310e0ad757df88908bbd70dd2af862d5f9bde0fa82467674a2ced4b93306501531b71ae45d7ff023802e0e4ec90f0db7d9b8cbd7d911a0d1ba308d46fb12d68415e2d1c46f858beef34bfe80f0353111f998a995cbb2b947a652921abf83f5f3c4abc78f0afd7b2c35eacc54cffdae44c1f016765cca2756a52de91cdfb8dd068eff3638a422002d8dd98d27b1470819b3609dc31095c557a5ef850e857be2c4ae6a02c988232eb83f2924928272594ee7e75135ed8dd8eda20ac274dc17ac807ebcc87f4d060dac220948adfb3f607ca9c0fcaa2492899335e4658c50552a0217dd01864a3a620b37d903926213ba798d4ac448710e183ee7df96bda831635333e804b26013e0c69c1bccc0af6626e3ec6187443a6a01bf041376b12ba51a1dbf46cca26c6c0cb9902cff28177d92478a725781df1023151b75647736b4627f45153c0e67dc0ce9904f6ba04b6498d5c9fd4a5e5fb91ba354ac68429320a3e32ae9824e38c62f94a93bf3508eea42970877ce05e35092eb3b81df15463808d98026c501c98945389a7ec3526dd92a44f25ee30dcacce98b4967f30f510e51599f7a9f8323c0efff2c1e201d2648de36526a75faefb0d0ab1d4ec1b4bfd4829a92c7d9ff4d2700c2b0e9f6d0fb4fddf08f7bf46f162373d8ee4a33f25f9981ad7a014bfec7f0123a6142a803c0000 serializedProgramBytesString: - serializedSignature: 140fafef5c5ac87ab8b3ea50c136169582df14b43190a92ebb747c53076e92d2d795bf1f96193eb047c3308afa9bffb4766acad3a9a5f3276c7b405a8f8a7400 + serializedSignature: d6e4b9f9ff29586fc00f551f3cd440a58a13bd1db6d56742b26c6d6788c59d918d02d1d4c26fe8d69a25c63688bfdf2916e20661fe293ca7987a7ee66236810c programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/566cc00e27d5822449529a3785eae366.asset b/Assets/SerializedUdonPrograms/566cc00e27d5822449529a3785eae366.asset index ba59eee..f2fd19e 100644 --- a/Assets/SerializedUdonPrograms/566cc00e27d5822449529a3785eae366.asset +++ b/Assets/SerializedUdonPrograms/566cc00e27d5822449529a3785eae366.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5ceb561bc911ee0184106030f802186c641b8c6c0312e0dd249bc4598c6fc480bde6928bb3c15a1830bb081c4bf87272f2027982e49cfdb13ff30a7987e48d728e5355d3836a46dd1a8d462d659c958ea6a76fd5555f5557f774f7a82d2be0634dc3654b3c174b62566c8a5d712c8ee06e09c2027c9d989bfe4cbc81701fae79c89b16e9809af899b286e1ba0cb1a22841cd13b103e101e5af0b1bee97a1ae0d314cdd839f0da5ac0ea8b429ee8ba7624d0c591702486c51a5a24cb3502eab0baef7c407c8b589296c244b59437059879c22e5158069b7dc0bf135895580bc1da8f3461c02cd6f8862d73fda04dd88d34074c2ef068b5bf287e9532cde2181c6fbab4e5c7c2fe3ed3e3aede53a949e6134314cc02fc5ee31fda6bc7769267d349332bc26d36fc978ca57cea57b5da6df96f15e56dfcdc7b047969bf6c5253f2473e2e3c78fff91f9e76438c8da1a94e159597786c5319c9061bfcc9f6571c0a8ed07191ff2c93224c3f3323dcbe22a592665b99c8c8ffae88dcaf0928fde244bc77058e6cfb138f2f937191ff3d11df3b53f2fe3e33efa5764fe822f2eb126fa098907619eb0a8173d06bbce8bd722db8615b174adddddad19dcd19174275ef03345cd96a04bbd06028adeb6497db90492cc2b7bdb88d5cbf85ea26b1e4a1c10516cccd7c43f2b9a40e60ee16b33575184f447e469d0591c40ceac5881106bbd0475bd80af97ca16347b08eec6161b707d4df45e02db9525834442b7e2aff31c683a5eaf00292ea0af217e481caed3f52d716a13f7cb9056221f7c045ef81e84efa9b54ad9dfc0bdaacd0d09999a47b5f3d3a53b2ed655d37d9006b9cf92fffa5123add0080d25776437ecc8621fb1fe5aa1891f31749c0c0e98cb92c61c416679d2e64516a3d67a0582e165ac94506ddf4f81b36f651fa9268d1a1b54f80cc950d671c22bd482c8d244622c40a86a9022bd8cc2af07319f4874e490453ff4960a7a9ab26c34117acc3b262a79281b1e7c9a2ff9c0af443f87c59204e0708570c12ce8206c534098c366ba945ca57c5c61490de576957290aaf5d2a872dc09c73a8c2c4f202f0fe56df25e98fe0c28e6a16da4b7482d942729de1ad59596aaa5c790ceba4967136cfa1495339d2e3b74baec89aacb848a32467b5530f80927f4843b5546926ab6f374ca1d50b9f0fdf70c4d5dbd18587f87e80bd0e35b482ac10fd9dba16ca719e7f1b32463456820ed299d2616cae5d3e215693f0decd834f349c3841a673c794841007681a5b4c78ab0f43b82e750d64b13846e8d34b4750cd71da08dfea328d35e4178403c1c437d6c29afe4cca616dd897d9a528f28bf74daea89a4eac8cb257c405c3ea6b6f6a1cd125053f7a03ecdb011a4365d3f49aaac193d537f2dd6dcadb7e62e95357737df9a1d480e0326366a6bc6a7e771bfaf10ba016940ab9aea3ce85493d2a96630a26aba558431f19c4e5e3ff1013df11e9d7b3c1fd13df6aa08234617543e6723b2cfb1a94fa6a507707a659aea17e821ba28fdd05b2a55f64445a2ecfa933f8b9cf80b8bcd51ac40651cbf345b89429f1e85333a782f4684b74f47782822e17edd483c1c75243eaba33c1295f2808ef2a5a89407759d7a3462a73ea7233c1691f0799db7b8dc006f714147fc4a03885fd4111f6f00f1211ddee988780feb6cef6a54db1bd1e171ad01785cd211bfde00e2a33ab02722823da6233c1991f0651d1c371a00c71515718c4ed5c275155f3dae228c632cee9f548cb125117e8c7d00f77b34f9d961b379f5088b33ea0dcac5d463493b4dab6deebc7e8ac6e17c0d2377e533c30ed129d012cd6ec5885dff189dd6a9e76644f55cd5b9865b515dc3359db9de5698ebbfffb572378cb95ed7119f56f6851fbe0c437c4287c94c544c26756ccf36a00bdfd0f5b4acaaa7dd15ee8a8977f5638d6cf41df5a7ef647f9a15dbf0dda79c6db172da6ff8d3309650d1d3adbe84b1fe299d643995645f6824db14ce73f30185ce431f72bd0c775bd2c7ec520a7fd8e28ba7fe3cefba601889323a89e654127da5914887edace414f5b54abc9d1031bd5f5da4f5045c8fb0151878e5f4e76e411e221746fe9b3af9e755f2a39a37a165d4dc07f2f7fbc4b70d68d8a09f93531b5da173106174580ff7b774dc2fa8b8df88a0bdea2b3aab84028e6d27a4a50f90521e61fc92f2458346a0705b87c29d66a39017ef5b86c2b40e85cf54283c11c2c74d798dcd91f82179de02c95bc97bb974350bafd5f639bd3032cfe864fe5c25f3425d9a77471b5c832d8f388df3c0b33a197ea29261d9a7376fbb0ec7c7c0bdeb810e24bf8b901bec4f6bf7b5f5cb9bd5c9fb5395bc8b75e9ec510dbd7511e8d4da3fc3c897d3c9f733957c6bda116595787f054f148e4c4ba733faea9ea49e9cc6483ea793fc0b95e40f2b3c50b9556ec7cb84c69fe4ccc1c1a95e041a65c3f33a497fae9274d5d888d3ec31664127f72f5472df6dca1813762449c2d7b27029ff016dccbc81dacf080b8c15459656f973a73a0b3e0687ed178027b4a58dd35db7e04371bf14fa43717ba251e7a382a4704ef060fd3d9167676e54d205cba43f0b969412b9b40069daf6f8d424bdcbb5da96a54d8ddb755a533017bfc2d6dad536147e27d521b046e30c10c09dbf6daa8eeea7144c3fe880cf0c11708f0e35e01c281ad52200b34b7b9a45f8e2279968cb21ee5f9a046784c0411d54f7d14bb43a7744f3c8dd584078c7420893091f71ff80dda8239bb59ecaa87429fde4c4df037bc7649f08b0cfc5d0d6dfff1ae78bdc45642aba59a64edb2a8f6cea11298759f7fecf079d1c0e3a4b08c20dd74793afb86fd257f4923eb7a982a3e723127a1b7aa5afad28e72e531edfd05d8b20f5f8871473b10f4cc2860d143c8b2adcf88d0137600ab8eb0cb8872681eb96f6e6347c028570a69c330759d214641683ec9149c8fa2564e5436fde072b831dd598bd5d66e03d6e2578062dcf18785d0cbce55682371743f0ba1978bf36095e528257a02af1b4b40b0cac2726c1ea9260e164721fa0326a5b095370a5195c2bcd836bceac751983ab8fc1b56a122efd24f74e0c27b9430cb63593b0f548d8f081aa7cc63f9eb3b50e06da5393a0394f067cd339de4f06d71870cf9a616d05d9709ed60ee2e9d9120cb4af5a015a1c47cf1e06daf3568066f041ca1868571868eb2641731fdcf73c1b6306edaccf1464e30cb20d9390e9a71d06613336ed4832d8369bd13dfdc73c0cced58c4d3b8619685bad002d8e73b53606da6f5a019ac1ee690cb47e06da6f5b019ac1d1d31868671968bf6b05680b31046d8081f67b93a0e13b70de37ccf5a7b3e307e35506e30b9330e23b8a08d43b3acc55f4bc0c6437e7e9d41888130cc43f9804d19dfe7acfadc57101fc1283ec6b9390e9a7bf9fc770fa3bc660fba349d8cafb06b8bd1ccf7d838b0cac6d9360e1e36fd8c328fc586bfcecf01c83f6656bbaafc1498b31d806196cf9d6c066b0231b83ad9dc1f64d73c6577eb6da2064c696973a19643bcd80ecd873e83c8ecbe58241b6db1c2be3b3b8388eb0230c32db2464953bf371b4b0330caebdd6b8ffcf62e8fe47196cfb2661739c25ff638878ef9a4e32e05e99042e25ededede9cb4df1f467e7196007cd1802bcfb58719c68f48a4fe665881c82f42daabd43aa3d136af52f1370ec221370603b136291cc79976140a28cdedd391499076e1deecaef3564e96fd8f095ef30ef5855a719fcd2c17708a4a5ee3f870db38e46bc48a19234ca4b15bd55b492a53faefb94e547d93aa5dac94c8768df611334ef10b7c55328bc4b4ce127f15f14b53ffd49650000 serializedProgramBytesString: - serializedSignature: 5e8e1a40ed2127fe3da421b07e25ac24903d0c5777c506ee99e557514274f983d9ccf211290e24a530c0287e43ac16981322538e9bccbec4718f3b3ae26fc30c + serializedSignature: 9188854a1bbd406078c2d779acce2431e54f04b3e62e5f9cd562e2249de5e86522a285b654cf893d7f5217594f1782f6f50d1b51986986f4dd008be5ca29190d programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/56a9396c8ea37a246bc2050a7a964a5c.asset b/Assets/SerializedUdonPrograms/56a9396c8ea37a246bc2050a7a964a5c.asset new file mode 100644 index 0000000..4a846ea --- /dev/null +++ b/Assets/SerializedUdonPrograms/56a9396c8ea37a246bc2050a7a964a5c.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 56a9396c8ea37a246bc2050a7a964a5c + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e780e0147728c18f2209490852c3a5c50a810ab41092002909a411a4a52d75da5237ead4dda9bbbbbbbbbbfbafefceec4ceeb9bd79ee6e6ff35c6678fff45396dddb7de679bef38c5b832ce6fc090d71fe9acfe6b0096c189bc78ad92ab6d2f9d704e75aeefce7dea9e7b359a5735de6fc5de8fc36846526f892ff1918eae2fc3dcdb9ab62d5ce9735acc8b9968adfe7b212e7dfd39c6f4b9c3bfe74a9f37f89f356a891f3d13c3691cd623359e750c70422e68b8faae4b310b72bd4d4f97b3c5be7fc5a2294e28164899f3a3b7fcd757ea912bf953b4aabf716b07d8559e5ce6f45ce3795accc91b944486c5ab12313ff60eea58bbc7695572eb599fc7743f9efa6f2dff0fd0c79ed96e4fbddc177cdc0bf39a12d71beefe15e438ed6acb1737d01dcf36fbf91eff574e535581e47562f79cd94d7de52e68b49e8df445efb24b0379e8cbe405632cc9aca6b7f79ed27f57d29c5f007ba8c42e701799ce54e409ffe20ec66e077fe6c4000db553ceeec89c79ddd786cb059c6df27f2fdb0bcee20af83a46ce79df697ca6783e575fb047a0d71bf63a358c4679d301b56c8fba1f23a4c5eb3a46ebb4a5d5f06f7417551719a2d65ee22c37845f35cbdcf7f7f55de0f97d71c4f7ce5caf75e93f77949ea938cff299dc6ca305e07f70ec7468be3c852f13ece13efe3e4b727bb1c1bdde1b107f89f56ee0829ef8d14ec18efb163bcab4b4638fabd843a28f9f952ce0429f74d70cfe59eeed3b646f2bbadf27e244b9cb77549e2b731ae9ca68ab5cc431b77709f3756e95cf9f2e8047aaab89de889db89526e9994abecdfc9bd0f29ce7d801cfefd5b1eb9933c722749b92a8fc84b52cf9de575acbc4e90d7f1ac361de76c92cf541a1f27c39ccca2f380c9f2f75d22df763ad927b7787134d113d7dbcb70a72490a9be9f24afcd927c5fbd333980ce53e4b57992613697d7a901c26ce1fa42d31f3cbeb0630299d35cbe4dab810e8e9c66ebe5fd6ef2babbbc4e97fc77f3f8817a2f9e1f24d26586d4858138707469de46decf94d759d1ba3815d8689ddeae3b9d4253a5cc77c03dbf4e93cfdf05f75cd7d96e38cd1f9132f790d7391e9de7d2e9cc0adcef5ab504be91cc77f1fc6b9e6b5f8b6c57768b02f97cbe4737952e793c4e04df2a3d92490f7b4916d33d8ca74b1d14dbbd3defbd07eef975f74878e2dfceb72d956ff500cff9b7ef837bfefb9e49eaba80c5fa2c973313843d53862df3ff962a3e17b2d8b4a7fb965f67806733a43ce9934eeb26b61c53ef71db3e00f7fcf77d92b46d3f8d7e4eb8adc6c6f976118bce7f2645fca1892cb7d862a9cf2c169db654baee1bf92654269f15baf7ad952e4be437b30197d9ae7edba9f2b4485e97317d395b0238c8f4e834556bc3eea1ea52c571c292bf31553e29bbe745e4b4e8227557f958298b4e33de77f9b3fde575a5bc1e20af159177739f91cfcae57595d46d0f169537b332f09c5fe7c8df3f04f7fcbd1511d91d9f90cf2a3dbaeae2b3ca63bb2e0f88e767d5eebb5d16cafb1a976deb7b3c7297b0f87ebbda9533427db7c695d3a6914f396b5d39f9aa0e74a07bdf46c95d27af07c9ab2c2b437359545ece0e96cf0b80dfcc05cff8bb1f79f826d22d1ec7435d3d6bebf71be4f530791d0f6477967a00dfabadf31d027ee3f7e380bdd0be78ba1c2eafad12d8d305bcc7af4704b03fde6f8de5f56869db7c16dde699effa4abb1e71641dc3b47eda7e88bcdfe8fede76adbc3f16d8c4c350650af4a5e3e46f7b01bba55f85f606cf8e92cf40de2de4f1df8ef7c4cfc79edf370119badf4f003ae87e3f513effc4d5bdfd46f9fc248f2d077974dd9b45e533ece4585b437b7bc2fed4475c9e22bf5de089cb05325ebe8823eb547d5c76f843de9fe6894bd5665371b950139767c8dff605f136483edb4f13bf8b0007a5c799485caadfcf027275bf6f063ae87e3f3b3a2e3baa7adc39485c42fd615c9e1b6bab780786fd59127179bebcaa3e385dbdf702791d2ce57e9e84dc0be575451cb93d3c72e3f98b927b91bc6e8923f76244df54c253beaefa6a16b3685fe7f78edf767a258eac4b98d6d73bab7e834b59b4af5fc6a27dbd90c5fafae5f237585ec93eba50118bf5f562e02785f2b72bc03bd057d5ef5702b9badfaf023ae87ebf9a45f97a97b1f2f9354cefeb507fe8ebd7c6da1a2af284adcaf17871799d87b3e25bc2a2db39256efc74f1d67f6a58fcb2f17a577ebeaa97dd20e52d95f2bf04f7fcbacc13ee3237dcaeb2ffab5b0729a7a57c2efb8dbbaa31861b99b6bed5b5c0f3de4d2cba3e758b87bfead753be521af1b75a5b6e06bf41dbf667d175925be573559755efa867ba3a5722aeb7c9ebed1e7ecba5bcafc03d7fefce88fe23551b5cb5cd0e8ffcd676aa277e5b023deed2fb8ad015c499ef3a92b2f9ee0436fbc993ca58749e54e6fa41f778fdb3f7cb7736c579e741797d485e1f90f2cb5974fb45b57f1e96f72b3dbfab36d49608fb4e99400f259b7ff37512f63f2aaf8fc9abec8f08ad62d17d62b23da62d2352adc7a6fa5b89d4a98245a7f90a371e7aaab6b1f245905f6be53e2eafaa9da8d2c4011e06aadd1aaf3f2b515871ec0a55b1e83e04d5167d52de57cadf655e14aaf1bc5f23df7f4ade577bde5fe3797f8d7cff6979bf3afa7df60c90c3ef9f8dd816526de9e7c0b3d5f2d9f3113ebd5479b3363a6cf6028b6edfa936dc3af9deb7e03bc840fdfe9dbc3fd063932a7fbf07f7fcbade23f7400fabf51eb9077bf455e3c8aa6ef272c4c6d1d5e01bc093bd142d33ae4f3f2b651c22bff901dc3b3edd2b5efd4a7d7ba8bc6e90327e04f78e8ccc4c57dfcc3c5c56e8300fbf43c1737e3d5cfefe13b8e7b237c6d1ef39f9ee111edb8e90df3e92c4b747caab6af7fd08eeb98c7f5cdb7ab789234b8db3aa71541587ca67b9bc6334f17a0c884f7e7fb4d4e16770efe8d05bd5f15e677adf3ed2f3fd2fd1dff7517507d557f7a647b78d2cba2f4cd513948f6a7c92a9b255e97e6ce49d5afddef2e8a7dafa4aefe364b8bf023dd4737e3d9e459751aa0daffab037797e57e5e4a0882eb563edf1d2485b797d9fa59cc7b20f80ac64fa723e72f5ebafbe93f572d6117cdf51da75028b2e8f4e70e3b5af9cffd04fd59f545b45f50fa8b6a56c5b854e62d1e32827c9dfe3953b1f26b0e70bf7bb01aa8d2cebcfac13f8ae930c4ff591bc0bee1d3bfa2d9676a83cf02b8f1daabea1ca1b0a3bbe75bf1badd2c877497e172f8e557ef87d0019ede4f58700327e04b292f1cdf62ce293a986f91390954c98aa1df56580307f06b29209f37737cefba8f6931adfe2be03cb137eeff8e9c0a6eefb03657ec6543fd85f1e397f7ae49dcea2eb7baa9f2c9ebffe92c086bfddeffaabb19f1fa48e6a6cfb1f79fd97e17962b261fd26f53e8545a7df53dc30c399aedcb0ca7fff27afffc9f718210755769cead1ed54a9db3daedc41b2ee1e0a79746b40a8db6f1e7ea745de0f3564917e17f88e1c87099d217fff0ddc2bbd9a45eb183a9345fbeb99aeed83ee70f5de41c64b2803d1eb2c1f7a9dedd1eb6c793d17c868ec8977d50f7a118bceb72f22600c6d6982d8d234812d9b818ccd2ecbc1b29d1e52cf9b6b6c84fe736eddf976ad8f9f13279ed43b2a9ecef3d8769e269e54bc9ceff19ff3a5cd7fb87a0f51edb516885e17f8d06b8b47af2dc017bcfed300fcc6af177bfc47f521d72563684b4bc49656096cb910c8b8d0653954ced11a7aa37cbe9dbcb6d6d80afda80ed24848b55d545af939226b801a0b517560c5e327f08e9af3abea22aa5ef363e49dfecaaef6ee7d5f35a6fda16bffb062cfb7897496f58190aa03ab3aa40f3e62b6bb739fa5fa6d92f589787d295d3d32e3bddb8d69cbe82c39ff296b6db45e62b9403c26dd99b6ae1dba8445977d97b8e16467cafb1efaef6abfbf3412aee00c7d5ebdd3535eaf60d13e2fc727429701196afe612f8d7c55f7d0f96026d3b689846c68df65ae7d7c5ab3b8efadffaef6fbcbe3d8a7de4964df9540461f8f7d50be1cf3d1a69fbe524fe53bdf4b3b541f533f8f9fead2577f4fd85781b0af92df7d10f9aeafaa57e725e96303e475202e4bcd110a0d62dafa73bcbc2a51f8befb6ec74bb96a1ceb5d70efb0cd91f5bf1c19df21b536605c020e433cf2af91f27f07f7fc77cd5ca3905c1b10ca8e9611d52fa4e6215d1bf9beb66f45f5a964457e1ba3d80f06dff1ab5a7f308e259e77a27b26d73384aef3f0bbcee5972bfbbff2940f2b7eab12f093ef85ae07efa9b06e883cabf5e31bc1b31bc0337ebd49eaf607b877741bb1c123f766f9de9f206c7ebd453eff0bdcf3ef545ada2a7f7fc923ef36a0d35619a6f48bd0704f18b7b2485f141fef1bebe1702b90753378a664c0b1d40a70e5cf655b2f6f54749889e2401b2fb7b3e87e6d355e778727feef90f6caf8cff7e64d6b12c4bf922bd79c84ee64d1630677ca6b2e90c77fff0797a90de72e8f3d7779c2556b5ce2f49587549d04f865d2e947d931425eef91e1fd0beef9158c2586d4da8f7bc1b3bbe5f53ef9bd6a432b1fbd1fbc7b3f78975f1f60d1638b0fb871377a9447b6faee41f9fe7fe09e5f47caeb43eeefbc4a1a95461f063a3c049ef1eb23f29b10b877741825d76f8c6e8384f5288b2e6f1ff584f99894db00dc73b98f78de7f5cbed710dc2bc6504ea36839317a3d016c54e3767724f075353e9a0deeb94dafb8b68fdc106d532279da67aabeabe2f4490fb727e57b2fa520dbdb5ff99d7f1921b5feed2916dd967ccae53c46cd0f56f9e1b0044c95bcd1f23a465e9f96f19801eef9f51916956e426adeaf4a3fcfb2a83c5edc3b7aed98e791f39c47ce739eb87d5e86dfd8f3ddf3c02efe7b1337ee779ceab12781ddd1cf3242a2dd3c9595b042a734c8128980d7ba925db6acbe4cbc60998b6e2c523ce32b9779b0d56c9df369896ed5f03cb126b99ae5b21cedaae1aea2edac429f20fe2e74de2815429b368809e2ce9820b87265ce7f2560c97395f37c8a5831cd173d973abf0c63d39d2bff6ab1d31e58e0fc172d65be136c19ab71ee0a9cbf2b84bcc58edab16f2632892f8ff67e33c791e9aede2e779e28a015ce7d99d070aef87bb5d0b444683fcd79562dd692af64cb9c8ae12ab65684166b7ba5f36f5d980512995e47fd226eecb9bb545c45d344c71aae7d96f0c5ff8b91fa8811d17dd654a6c34659a2b43a2e2626fe8fa19bc9f042609a94217a031c8f86cf7258962827e6c410f46f63ac857aff7679e73b85693c5bf46478747717164462f8a3335ef8efd1ad175f90116d5a2ecb1245508f04a6c503cbe585458f881f1332321a657345bdf8433afc620b84b969c4efbe572adef31f018d45e1171d01622b830227579b0d0acff9cedfae72f38419654249af59931c350b856165d28c19e22b6e48055b2e2495d43e9d20ee5d33cb24889858cfe62a361111175b2c27321e8bba06baa813a32405f59272b0cd48e2475ed35a2b22919725ea5a5de2b8381696a884359235319508d7b75eb2cbd99dbf1cf4da8b3fcf2b9bfed9aff7dc3a6b65c1295f7d92a18fa7e6229e52091d8ba986ba986a9eee4496b85489174f2d6aed8ac413ffa367d812f1f5443a60041be908b648b7aff3df56092985cebbfe19f221a8c1de8c4a0f703bc40913ab8021ccd020cce6085b6bb46219cd3c5a718510c98d7591d3b27e8af0d49c9bf72774f620c8409dbb6ddc12d8af6b37d1d11383958b49e9a996e55ca709b1bbf35ba1f37e89a8a6f2e7b31d89854ed85cde381142a4351afd457cb27cf471a897ac966a7b41b51f682707d50c23de54433c9bfb6b078d1b883cce9b18dae289a11996cc3a064d66cd31c99d824a6e8149ee1c54724b4c7297a0925be9928d189f5f98966413e99051ff1aef7cbbdc3166b56865d738dfeb3a70e22797ae4927976e22b964325db7923f8db064b29d2eeef8c3ee3a25bd51d70d8fbad698e01e0105b7c1bcad67506f6bab93cc73eeed9351b9092eb81da672afa02ab7c7286706a4dc0113dc3ba0e08e98e03e010577c204f70d28b8b34e30cff3783116b424e9a213ce0b81fe2cb62afe9ff32746784b5c78574cf3011acdcb4b1af8d2bc1be6d403833a75774c7238a8e41e1ac95922a73a8ca5b73cd10f0a4c117d12256c965395dc9fb9bdb92a5cb747826ba47a85e738d7a5420bfe9c6b917830217ec934a8960f68a78b0c77124b7e6883de0a3e54d54094907cd03b2c866ee639cfdd418c4922064a650f8e4e1b1e02f6be623183f1ed596b446c6720bd084344e866b1c14afa9e584e335493d3bca1cbc6e2e434db63497658d024db4b279927d92c8daf66735fe5e381cd457e1e13ce103c9c4c5dd6206a0407d66bd6e0b637b9bca5629cce953793f11d86d708575de138f06ae93805ce3b954e1825d2c9836406bcdbbea7b72383b97ff4c9214724875d92480e94566109a0b7ce9378ad8d4f4489e95ae605f31ca71d3a812d12c9f000f198537263b754bc5aca0e74ae6ac8cd4f9db08f4e1bdedee1c3de09ab2bed71c17d31c123020aee87a5f1fca069bcbf4e32cf6df85494a035ac0198daa382aa3d10cb51476b72d47f42fe72d430267c8c46f83d0dfc091fa413ce9d75c7647c248e57ef8009de4997c678bc4f107d9c99ceffab9c2f788f5aa148fd99a2308ce406994e5a2f75fec50bec21e0fd55ce1bee10b71f3d07634eb17350a71882c5db2e9a78fbc567bc0dc584efaa113eb5a13fe1c3b0b81bab8b3b5e3af07283574b96cbb22d3a37cc14930d32c5fc921ad157572c62ae4ac46b263bc829a90f76aed5cedb99a21c2813bf658a0df72b455eeb274eb330fdc7e9f46f0ef49f0d34f4136236966f8dd7e45b219ff9d6709df0d64cee77acabf8f0851dfe2b3e3918b6493a6c3dc50f6b45cdb546bc3f573840496d5db9b88e0ac85c8d5e59a2276525abcf0a196f2df0d93855e2df912a0a0f3b32be1ba4e23599c556bcd41f7dc58b6f591916136bd3a13d56c1cac332d5a99a4c35e427531d81a58569585ad82da5b490aff339d1c75651af3e87a7a83942364f79c12bfc7cf3e086ded6bfe808cc4bc2b3ea4ac7c1627168953850c52557c533533ee4b2049c9ce2c21749429f26a68b34914ecdb17431122bb567684aedad19fe4aed513a97159dac95f5eab213858474b8ed4c9ddb8adee0fc2422bf2ef5ec25266d56894cb55866aa6ed6dd4bacd0ad14c56689f39c67bcf0f7c162e52aaf2f4d16bccb05796e5fa168f7624e3e4b3879baedc41c7d345600ccd61400be6ad563b024b4872609fde33309ed88a93d27a8da3b616acfd5a8bdbeb13fb577c6841768844f6fe24ff82e3ae13c63e6bb2a076921ee8a09e65b18c75437799f836a2714795a8a4b445b41b5ff8ac59375cedf65ceb3222122534cef53f308fc68391663bba7866d1b9f6cc76108f60ac876bc4e3077cfbd93111c67086c824e30af7fedc390fa17dfc4d87ffd6b22867da106fb169fd82761c97cdfa0c97c322679bfa092a760921705953c1593bc38a8e4693ac93c120b3591c8a7d2f889c4dd30e14b34c20b7c0adf1d4b9845babca93fe35d0b914aaadb7c8af46b14b2a5424aa5f3efd5b2cc2d8eea1fe17d1ea5b2d1ec279d4fc7f42cd6e9e9aef7e1b3a5789da250f4a1f11067b115be429d81a12fd1a0dfe413fd4c4cf8528df02f7c0a9f85f15aa6e3d52541bc168b493691a7c39da77e38cec6b459aed386df46e2cd4f387b60484b3548cf6bee0fe91ccc88fd7546f06e1b17df1807d94cd1e15728d72aad16c5b87f8c73310d56e834e039dbf4da8ac1ec14ab050518d2320dd2577c229d87e5c8e54173e4f998da2b7599660b7f6aef89a9bd2aa8da7be924f35a4705436a1d7cbb5effb58ebdb1702ab170aa520a671f5d389c547550520bb008aed144f0d896fe227821267cb546f87a9fc2f7c584afd1087fc4a7f0fd30e16b35c27bb4f2277c11267c9d4678b14fe18b31e1076a846ff629bc10137e9046f8953e852fc19c7c7d50272fc2d43e58a37687edfca95d8ca97d4850b54b3492b3c49cc274ae0bf2ce7ef2b774826f099ddc8ce50d4cbf262851f85897d2525dbcf012fa309d4a3e8af26598371daef1a64f7c2682e598f02334c217fa74d5524cf8911ae11b7d0adf1f137e9446789bd6fe84afc022f3e88091598609e6fb78c7d4058708ef5c25d258a638829d2fc35d294f7ce75b21948881eb42e1fb910e273570cdd775674aefad943e5de678fb30e7a91fadcb31ad37eab4e623afbc1337526f769b926e334437af30930d94b5ee81bef45a89f9c0b11a1fd8ead3c15661461f17d0072a3482b3c4f4ea52d27c169b475a203aeff93e0c4b85a794fb9e751a3f4f3e3ee93c7993c893f9dc113a5db1fcfb005d74f3baf5090ca95bf3adc79b73957dd5ad2b75e1709f3d49e3b3793ef3ad2a4cf8c91ae17bf9145e8d093f4523fc489fc26b74c279b5866fc21ca85ab31a53fb348ddacff8547b0da6f6e941d55e8ba97d8646ed0e6dfca9bd0ecbdbced465e83ce293e914c91489b2461450bc8899cddc95c1ee5ca942e769b19845b55cdccf164993f72c2e110580bb3dc222d1f9b14c8c25563a4fd5acab75cc5d329629aa63ee663199222b289673f156882755e2ad12108ebec0299505272ca2fcf66e1e8845d1599a28eae7338a0ec2a26873c0e2673d26f86c5ddcf3d90c05ce4d4554bcf809ef602c633d07cb58f99ed2fe3b2d0ec1ec3a4f67178fa605b53da5aeffeeebb35a742816ffe7eb72169ff1bf01137e814678a3b6fe841f86c5c985589c6c49294e0ed785c333bd8b9271e238e37c4760822f0e28f848cc8b2e0998ec8ec2045f1a50f0d13ac13cee2f63b1733bb9003f733b8fc1bcf0728d170e69e7cf0b3762c2afd0089fee53f8b198f02b35c22b7c0a3f0e4b3f5761e9e7ea94d2cff198d35ca3cbd3f80cb845ce7fbccbaf4ce4d6aa8c2d75aa13fc970ad154e4e5a11f0fdb846971ad4e8bf6b55a643b7ff392978f4db9b38352d7e1044c87eb743ab4933ae43aff17b155720dcf5ae7efd4353811d3e07a9d064d415cf03544bc66e427b49330f7bd41e3be3bb5f7e7be2763ee7b23e6be37a5e4bea76059d3cd9aaca9a1cface9548cd02d1a427ff824741a267cab4678970efe849f8e09bf5517b73e859f81c5ed6d58dcde9e52dc9e8925873be2654d39759c359d85697167fcac69781d664d9b311dee8a9735e5d561d67436a6c1dd89b2a63d4578fed63b9ca30b8dbbef3d1af76ddad19ffb9e8bb9efbd98fbde9792fb9e8721e31b2f07a98e9d8fd1794043e7749f742ec0e83c88d17928253a1762463cac31e21b9f466cc1d03f1210fd4598d68f6ab49ed8c99fd61763e81fc3d03f9e12fa4b30239ed018f1894f232ec5843fa911dea8b33fe19761c29fd2080ffb147e3986ff690cff3329e1bf02734ebed9375aace5d671b17625a6c5733a2d22c55a4e1d166b57613a3cafd341156b23eab058bb1ad3e0059d06cd58a4589b2406bc56f9eca9ba0673e017350efc8b4f07be1673e09730077e392507be0e33e2158d11655dfc19713d26fc558df0677c0abf018b6e7e26729072e1464cebd7355aefd4d59fd63761c2dfd0082ff629fc660cc99bba14c0477fe2f7d3c7f6e406ebb377fb4dcdeea5bf058ba0b7341154ed3382b662c2dfd608dfec53f8ad5896f10e9665bc9b5296711b66c47b3a42ddfc19713b26fc7d8df0bd7c0abf43279c77037f904c9611a71bf84e8de02cb14b59fd8cd1c7eebc54b763f41fea7869c7e8f9a1e3f1c7e883eb8a8dd1df85f9d2c7bad4e6d397eed609e743b99fb08043b9f760923f0d2af95e9d649e177e968cffc7c934efd3f9bfd8486f69bdf87f903dd1e27bfee7497bfe17c2f37788e3f9c1766ed3c7c4fd98f37c19d4791ec09ce7ab80cef3a04e304fa65f6b92e90fddfd25d38730adf9a970315522bebe7c9c680e95886529ba054d99a2ba94e973eed9c3981edfeaf4e07baaf893ff0826ffbb80b1f328163bdf6b6267790f7fb1f318a6f50f58ecf034b25c5611557c94d4eef791eaccc0c731237fd41859d6d39f914f6046fea43392a74035cfc0adcf464fd3f463d69358c83feb42e66d7277564d56ed2ee459b59be2cc72124431f33b9be3294c835f741a74d66a305dfcab5aec20e0d6fa535b37f634a6cbaf3a5dba27a94bec36d57e747a0673bcdf348eb7697b7f8ef72c66f0ef01f384e730c17f0414fc3c26f8cf80825fc038ffa5e17cad4fce2f62c2ffd608afe8e54ff84b18927f022279592798e73eff2623384e63e8159d60de0efd5fed0f9e76283f15d47f3bf4550c3bdf92cc8b7d6a6f7fd85fc38ce065b3d6087e0ea97f235ec78c68a83162a34f23dec08437d208dfdac79ff03731c7cc0869b253be9a720e83dbc4148b3ab6cac8c36c9028f056cabfa35721648a3bb7f81922b6bfa814a5be9be55689550a9922638e2c03773b95f882e60a4fcd4085c33b93dc2276696d769e2932f3629f53fbdec25834d6b1e0bb7ec1bde6dc5a66a4808d2cc95e23342c6370d2ec72510465269490e3bced77e5c6db98c334d1384c239f0ef38e4e384f524db124d52ca524f52e6644738d11619f46bc87c5740b5d4cf3b51bfa2ed205b27395af7ce1ad0b778ba278711a8efbeb20311dd5ed568df875740a58253c4375a146ff562dfcaa5a938a96080d57810e5857b63a49ce8f7fbd8fd16b190a56987d80096e1550f0873ac1bc3dbd5d28607bfa23cc4d5b6bdcb4a0af3f37fd58279c2bd326191e710af74f30addb6ab4fec4a7d69f62b1d84e97b8780ea16f2915b254365ef80c0bbdbd2e747eeb76c8382d425fe17c8e85d341174e53110eef0c4b2db42fb008eba889b01efdfc45d897989b750ae8665f615a77d6687dad4fadbfc622a08b2e0278a8da73327d44c23758885d752136a98df2f962cde61a5f617d8ba1eba64ba13ed17d876587dd836687df63927b0495fc0326b96750c93f6292b70f2af9272c61f50a98b07ec604670614fc0bc6a2775016bf622af709a8f26f98e0be0105ff8e25c17e9a24f8c6007f49f00f4c787f8df08503fd09ff13cba806e832aa5d58ec3ef7a5721023b21ba75bed5d26bad0f99bc5e2635559f536e53265b5b45a64805c46a6c86eddf9396352eee2fd0bc33650832dd327b6bf31e1618df0d37d0aff07133e4823fc099fc2ffc5227c075d84f3a963e39c1b1e65bc25b30e89707f532efe87193858636071d89f81ff61060ed119c833ac489d7225d8dfce8f412c84843954172697b03a85823ea40b85631ba6c1c68fc6f083ad0166421656192e4fa97ada100b275b170e5fdfe11e97b3c8c978a2b389d426f135c2c21fae0b9fe7f97cd2205faa94580ffe6625f33b689381456b8e2e35ece02f5a1b63e6e6eacced095283ea764a26771eee3b776e82e995a7d3ab237083698e56aa9a3c2d7056d414d363844e8fed35ee90589fd4dca219e616f91ab7183bd89f5b34c7cc1e89a582e88677619d97092d30734769ccbd74883f735b62e68ed699dbc9e36d917678707f6b85693246a7492fc4df1269949ac76d8745c18ebaa189a1fea2a03566f84e5814e8bb7a827b5a1bcccc9d3566bee2d3ccb698f05d34c2fff029bc1d267c575dd7ce307fc2db63c2c76a840ff129bc03267c9c46f8953e8577c45c6bbcceb58688f7bc4e84ed66cc0754e669f6ce75db3245b2ab9f1f4553e1b36bbc13a6f5049dd6dc7c3e74a04bef7e42ed8c45c4444d44dce13322bae884f31af6a4a05d025d31b5276bd46e99e54fed6e98f0291ae1a37c0aef8e099faacb547d0aef81099fa611fe804fe13d3107dd0daba2a9a20a73d4d48aa5ed312377d718b957b63f237be984f36949d393e912da800bcec4b49ea1d17ab94fad7b63c2676a846ff129bc0f267c962e390cf727bc2f267cb646f8549fc2fb61c2f7d0085fef53787f4cf81c8df0ad3e850fc084cfd535ed73fc091f8825e4025d42ee2a4b9aa1be4a493f093a8c193b4f636c9e4f630761c2e76b8477f1297c078ce49e3a928c69a4c7e1321893be974e3affc1ad8d64a530f63904c3b4b7ae7734d71fa6a198f07d74e9d0a7f06118a505c9e4d871906461821706149c8de1d8578363b14f1cc331adf7d3390df7c92c5fcae760f21761edb6d8458433441b4e55a223bff86bb7e5629a2cc63a59f9f8addfc8cac34229d485e29e5215bb31a19f10476842cce2b39143fce08b74edab5de0dcf1dd83fdefa9bd24c4276e4583116365da553245213e48d231c6b278e1636b5ff27571c56f8b437c803a5aa5dd661cd6e4bc1ecf3688899a0c3c6a4662ce50a273067ef29daae22e751e2e62d5d228bfe309a3b07097eac26d8d86bb92b9931cfd843d5ae78e3dd2ed8e1344ff73650aeeb82cc44746a3110d439c7139e28cf142c79c718c8e1bef500f2d4a2337f73d37a39d2b4e8de335b85962d29f5b73ab4a816969c8ef41befb0bb27d632c4f553f8cfa8e5897c38aa05d0e3b6192cb824ade19935c1e54f22e3ac9bcf2b03214bba19a883caff0381baaed8a654aab02d68fc6623c2a82f21887493e20a8e4f198e4caa092276092ab824a9e8849ae0e2a791226b926a8e4c998d3ad0ee874533095d7045579aa4e32af1bac4d46e5f6b8e06998caeb82aabc1b46f9c0809477c7543e28a8cad331c9eb834a9e81493e38a8e49998e443824a9e85f9dca1017d6e36a6f286a02aef81f9dc61017d6e0e26f8f08082e762828f0828b840279837a18e4c46f017b8e079587de0a83aa80fccc75ce3e8a0aeb1a74e327fff986478c499a7b917067a6340d07b63ae716c40d7d807137c5c40c10bb0d83b3e68ec2dc4626f53c0d8db178bbd1302c6de7e18e41303425e84093e29a0e0c558ec9d1c34f60ab1d83b2560ec2dc162efd480b15784413e2d20e4624cf0e901059760b17746d0d85baaeb84e0b3d642fc3cb4f4efcba3dbb6ad6ef7e7393399b8188c135b86c5c55941e362b94e323fc76b73322a6fc20597627e797640bfdc1f137c4e40c12bb0b47f6ec0b45f86c5de794163af1c63717e40162b31c1170414bc0a137c6140c11518e42d41211f80a97c5140952b31c11707145c8535b42e09d8d0aac634be34a0c63598c69705d47835a6f1e501355e83697c45408dd76282af0c28781d86e2aa80280ec434be3aa0c607612dc36beaa065b81ec3716d401c076338ae0b88e3102c8bbb3e6816772806fa863a00bd0153fbc6a06a1f86a97d531da87d38a6f6cd41d53e02937c4b50c9476240b6d60190a330b56f0daaf6d198e4db824a3e064be4b7074ce41b31c17704147c2c26f8ce80828fc304df1550f0f198e0bb030ade8409be27a0e013307fbb37a8bf9d8849be2fa8e4933018f707847132a6f20341553e0593fc6050c9a762921f0a2af934ac67e9e1803d4ba763f1f748c0f83b4327984f0e7f3419c11b70c16762901f0b0af92c0cf2e301216fc6547e22a8ca6763949f0c48f91c8cc55301599c8b39dcd3011dee3c0cc53301519c8fc5deb34163ef020cf27301215f88a9fc7c5095b760945f0848f922cc2f5e0ce8171763825f0a28f8120cf2cb41215f8af9c52b01fde2324ce55783aa7c39a6f26b0155be0273b8d7033adc95188b3782b2b80af3b837037adcd598ca6f0555f91a9d64dedffe76322ac7e96fbf1663f14e4016d7612cde0dcae27a4ce5f702aa7c834e3077fdf793111ca727ff464cf0070105df8441fe3028e49b31c81f05847c0bd6d7f0711df4356cc5787c1294c7ad188f4f03f2b80d4bd99f054cd9b763fd899f07ec4fbc0383fc4550c8776290bf0c08f92e8cc5570159dcad119cc577b608ad60669c95b4408e30d7dda8f4d73a66210f333151fe9b109f289fc5fc9c97948abed804fa7b74d1ce63e7db64a29d6b8f08be572798df7e178a5d9ca3fec4049081fbd57d582ef97d1de492f763c27fa803e10f60b9c38f41738707b12aec4f01abb00fe904f3456a3f2723b80877938731c1bf0414fc0806f9d7a0901fc5aaf3bf05acce3f86a9fc7b50951fc712e31f7594189fd005c09792ff990c938f70c14f62b0ff0a08fb290cf6df41613fad2bf0329ddbd03c563f2bc15481e16fd5d73f491762ff8a42ac6b8c75c9e880154ccf6039f0ffea20077e168bfcff8246fe7398daac4170b59fc78487ea40f80b58cdb24103cda2d389e2768ee32c73d944b67bed91493319dfdf658d88e01532ea8789e5a97ce3b259ce2f2b854bf327fafa8b6ece207f1bba1677fc554c6dbee4a79afb226665439d9547d75a39cfa949f144e726d072f1ef69f218eb4ab119869b40a7d5be39a9f694b2e873502a258fb9e2d76247628db08bcb8da61791c0dff7a70726a980f185ad6a3339c81426562feff98e1cbf8b985fc24837c2fc0986e8da94eb7ce3d25ae5648a8b1cdf70771d74ad2d9027c379b58d7c8b3faf2b7f7a19b3324367e52e1e2b2173d7cec922c6ca858d5e2da36308fe122fadc0affc58f60a6659639d65bb26157fe3c46928a54c2df60d1e73915ffcd8f62a665b139d6df91edb6688d8592e2de3776bebcd92d7304b9aea2cd994e6fc2cf20ddf52a8cc91ba8ef17d3f22c7e955f9f072c80eb76292d88e8f573360aec72b587597b7bd8e516fa6a33e2ea9b4315dd0a83222577b03b3afb9cebee9845ec59f1e2082e156b9d561dd86547511ab6f6256b7d059bd735cab714de7085bdcf39f5c1b5569cc9f164942b1e922f5d87c0bb3aba5ceaebd7dd7ece68a5fa2eb763a09eeb3d9b5f940a5531ef0a64e909a602af1fc36c6a3958ec7ee6929b3a94bf377309bb7c3ea29fe7c40f930df05c9dd281cc6b35f8ff063d9bb9865ad75968d412c9b27d26799ac9bb84d6dd56a992f5371714c6cd0b451dec32c6aa3b3683261eeab62d5dd4a680973b7fbab3b4bdfc72c6dabb3742786f592eb728a680b0ac533d73ace64aa88e54ad11a2a724adc757568d5079855ed92691344870b6b08f3442c543aeff274b82c4ee9172da3ee2cfb10b3acbdceb2090973cee45a05781e1aafcd9a6a4ef9116663079d8d53509fe435de25ce4bca56777fb8e8d322f0bc442fb3ae4bc28f315b3bea6c2d216e3d543b2541a5a0e4b60ee60b6f2fadcd79eaa63d9c0aa74f304e9d749ce6d55b2b2b3ea1e01c3ec53874d67118ef336d9890223ec32ceca2b3709a4f0bf7141ebd128991fab0f773ccdeae3a7be7107a76550a758dba20f00546a05b5dd541dcbc6d1ca881d05bf525665577ac87c2af5593c51bb131e4cd739297ebc7beaf30fb7ae8ecdb3140cdb15a94467c63c2a5b29d875b5510f3ae1f9bbec66ceae92fcebc79cf38d19fc0535aa2560a6de9f10d66dff6987d7eda8caead53643d22f22b1ff1885f3bacab9ae3b7987dbd74f6f563f17b050b1cc2145a7e87699919bf6fcf4f2ccc4d2916287def7bcceade3aab87a269aba076a81ee6114b6bfbb3797958a3ad8ba5d6bfff03a6771f9ddea313b6b8a689b141defb58264e939fc4cac5e6abb1eddf7831907a0bf247cc9ebe580d327e1ae1ade1d9a25655a5295793194be0b591a57568e14f9885fd926923ebc706a609dfe3fde085b28f2a36bed2393ef03366637fac872a997e8064ac4c2dc748ddd25f304b07e82c9d9a546c7a477adc74a8ecaecf78fd15b376a0cedabd12c62b6dcf38759ff96f188db08ec63e846d2355ab49bd7704a7e587c8ef189141585fbbbe148d9dd35c5f75ee3f308b76c07a7612b7cb93c9d39269ddfbef01483de5ff897118ace3b0830f0e2a4ed5610475953affc2341ea2d37840c2bc2a328255229ef2191e755387fb1bd374a84ed39171ea9e5e4f8fd6bc42e408919e408af4f20f66cbb06466756125ff24c34afd7f312bb3b011627ff99c9b9fc7fe1a3beaafce45c1e33356ca3831c6c05b5e7e6cfe1f6673b6cee6fe9e988d84499d9afec3f41caed333c7a327cc9fbc3a4f913a275bcf4ab514e55381b516e4e82c5858cff50ae881c9a63cf58d1f2a218c4a6e32a3a62a443fb94ac4322cc5d54d6ed200b32c2f99d692df9a45f0fa72ea9636c42c1d914cda9c207cd6f5cf6ad00be6fa783ecb4b609f2eddf2affc58d008b3203ff9997d3c4c3f7e08edc39ed7550c6560f68dc47affe297df91437cbc3aaa4394f05c033b00285e4e935ad9d618b37a542abd4e6eacce755e5ec2dc964a11abef19cd4d300b472793f2f484532b1513d7e79b38ff8542e2606821c5edc35b25bee175a0acdece4fa1ecda726f586d79362caaec8b3ce7e1973bb1c1d344416dc9c5971bc59730a6813b9d5dfc19280f0d74b3ffd052e65dce3441c82f93f98df2d66182903bf3912fd31ae6d4794ac5576a6156222b7465f830508a43eb12dbb42fb2d02a248e0c85b21cd27d38e96dcdd21d79acf696b1da208b9f42161a9ca23725d662271e5a43bd0f758e210b53874e7757c04cd9560ef195663c8165cb02bf94451fa99d303cefceebdef0860a01aace9350dc3c90f075e2ba0a277327745532b79bf301a7eddd24a341368f879d2961b517b0789ccc1681e373b06dc0f64ea308b65d28b1b9273e578a626d3673a717a9021a03586505423e6d4b21dc9512615311b49adfe1ae4fb30150454e04d0584a406d9c1bd52530550c21730185a2a2cfa7f9cc622bac007663d308b07194c03a808cbf6a1b00d7a64504dc784a70ed34e0b8c095ce477ca0b8463c2db602da6216813681dadba293e764e7ef5239074fcd4471bdce0670e19611701329c1f103cff9948a64cb4d1be09d0e4acd4994f05a80a43a2baab7d2064c3d7a44304da6c4d40c608a2c1fb001d1c64e1144532811351688aaaccaa31ab58ac0994a0987ef9437abb651a40609dda9197344a65fc3f8a4749ecdcf961d8b3600dc0a12e034eada3d6c84f371531b00bdd0360268374a406d41f56182f8b05a7410f1f2cfae1ceb893e1164bb5322eb0e90f10a843bf6e16eede4f6bc556a3b7ceca8b816f78f609c4e5d36ce1243a2918d61ec40b41ee45e33d2957ba9f54736003aaf7d04d04c4a40dd40529cc4d60aab6b6a6bec7c7266b1488e738487150b7f2b7302b40122ffa320cea284d893b12878bcf795afab2ea9dd81b4d8f2665107d01f3b9b12652b99a7297f5b27eb6af344cf850da83683bc6d8f74f55bf05214ce72514d719bda047f3489809b43dd6f01c1c1c589e3444f061f9a8d2cc3b401de7ad0c53897125e4b50a246d6dab92b7c6d00b515b40b0a284135676a406e22733770e2d55b3b4ace5f864520cda31e1a9921f2a8159efd75263aaf578a906c00b6b84104d87ceae4c7fdc9d6f1f0ccac08a83dd3dbab1f3d0bb4d8b2d2b10c0cbeed453f8614c9b76caeb63e911181b637b5b74d1253036a44e0919dc0223bc355392d8252273c1bc07d02c0ed433dc7076ec86be348259faca7602da01f1777e7f8ac1262ec6e55ee04bc6c21f528c01c07da0496fca69a3600dc289a4c4d323cc2bdb3e8539fd3e88f3a3efbb235737b482ac4d36a59fe46cdc6ece7bc629ce6fbc2d994e1947bcbc209f3b970d27337c2bec7ddc329ce720b27553d0f07ecfe0afb98ba18f695058693aecb847d15e0e194f293b0af0e9bb0af0a6c38a93966615f13abc2befb49743ae35369c23103d7e1b89d0b61ed506458dbc51f46e60d84e34cbb0823e329e1047d92e194c698c3498e1b86030c968513cea00ea3bd14e1b82dcdb076d2676469837e494236cf48f7fbff7cd541365f75b08843e0678ef03f6efd673175fd87fb81bbc8849749f137c21aeed4423c3af488d121faf81e55cfd169d32caa26b45d3206a6521b9a0de66e159a8433c74a9c87039c4b4cc2996b25cecd0067914938f3acc47907c0599c0e9ccb50a050fd456c34cba7c3d9920a675780b3c4249ca3acc49901702e3509e7082b71dec8223897998433cf4a9ce7009ccb4dc239d24a9c5f009ca526e1ccb712e73300e7fe26e11c6e25ce02807385493873adc47920c0596612ce1c2b712e0338cb29717694388b641f92774f20577577bf996c3a90195420f3418d7325f56457d5a7986c6f367fbf52bc6b5f437332f0d05594607b31d8599bfcf08ecd70fb01b815d4733ee3758a4071bca42743d984cc4f4106700025cad61265be07a83bf0c15f2283d78d0ade1dc00f2bd3016f54fae19179de4b005e1525bcce09caf0e8444cda362783f92f80596d12cc9116c2fc0fc0ac3109669e8530bf0130579b0473848530ff0430d7980433c742989f03986b4d824938b04606f36b00739d4930095be564303f05300f3409a68d2d9ccf00cc834c8239ca42980c3417d79b0473b485301b00980753c2dc41c22c735e2a1357fd89f37e4ead23edef6c4f85fc7680fc10fa759ccbc5cc4f7726ea3201cfbeceb69620ff3cb43e3bdba277ae27f4be0d5428cf00deb78112e5c098045f28844d66ead0c5f1ceffdc3b578beee01a166fd37952d864b9eb6a00fbb074f86d7245958d287b832ce0704a94db6bb280648f642245bb890aed72e0a547507be938b1d066955c5ec0cf10e0e3432be59223b5e8c25dca625f41d50878e991e9d82f77b8f37fb90cbc5094effca9cd7df247018447a503e1c86d0ee1bd00e1d1f45bf7bb03bfeaea3db6dcd601debb01c4634c9af54e3a998b0ce76250c86c340927e9ec23329c47039cc79a8493746e1c19ce4b00cee34cc2493a144c86f33180f378ea5d98dc6a5076faa72590e1fb0e143d9bd231b550ad5a9ec66257ccda5c8677017e78823993b46cec285e04509e980e947096e674a7713845ae525fea7cb4361d5e4986f22090bc4fa21fc0805dbf8bd80a816ebc583bbe428a9aec5c4b1c11319b165930ffad158079723afa85aac55e1a55b543156a61bdbaea7a3587534e4e20437b01407b4a3a06da925fa84a06936cb9c05800f3549360120e0193c1dc19c03ccd24988413bac8608e04304f370926e1544332984301cc334c82493809960ce64e00e69926c1b471bdda1800f32c9360124ee822833910c0dc6c124cc2f14732983d01ccb34d82493809960ce61000f31c936012b680c8608601cc73296166b2d8fe237f33e108cb77b2997007833ea5f3ea7326a7b7d79d301725ebeb1c0c7cf57c93601296ef6430f300cc0bd23180c17b3b578b5e77be1f6b9a262090e1eb0ef05d4889af2bc0173bc1900b8b2ce3b77946c7b300e896749dc3bd6d4d8a391220bc281d08f3b73984bb008417a763adf970912bf2c18935e98247d69bfe1b807789d97549c22e61b2bae45da02e7969bae707273f1244584d27f3dc4b01dacbd2359d3032f40b472fc9077dc9201e0192ffe5f4fe89efcb5e6f43c064c5525b80f60a735659d8b8b87f5780f24aea83b4e3edefefaace13fd4af1d4e659481f02a857a5ab3594e8480d9b81ee08805e6dd24e86a3adec326e0fcaf76b4cc239ca4a9cff00efbcd6249c23acc4790dc0799d493849374921c3792ac079bd4938475a89f35d80f3069370e65b89f34180f3469370929e2b44867306c079934938490fc221c3590d70de6c124ed2639ac8702e06386fa16e172577f0e21ca11a3ffa91b05d349d0a683e00ba351dfdf3b99e9ed034f4cf93ed825001e0dd9a8eae0f98b4f51b4c44ef364338e9f00b2aa83782a6e56d264225eca423837a03807abb895009276e93415d01a0de612254c2129e0cea1200f54e13a1124e4a2483ba2f807a97895009277c9141dd0b40bddb44a8845312c9a01600a8f75042cd65b10373d163f21358e4d0e3c8d852e408e5e833e223676b17881aad1a4c218c841caa48c8649148b8973212bab1d8d1a778c3d0f62ee07e1f20bdcf9c6d056c3c34626f9045dc6feef26d1ba7edbc02bcf40173f64926ddbe8acc4f0f01301f3409a68d879b1c0f603e64124c1b0f375907603e6c124c1be73fad07301f3109a68d879b9401988f9a04d3c6c34dca01ccc74c8269e366d27300ccc74d8269e3e1267301cc274c8269e3e1269b00cc274d8269e39e752700984f99bde4c6c6834ca682b6fbd394785b49bceef67f65a215efca2ea55cb04076e235037ef98cb96b956cdcb3ae10f8e4b3e99a6b3f437412aff074224f743eab1421da3cd77e7be0abcf5102dd2e6e22afa243d79c0a5d0380eef9fa5c9764ff16415d00ca17d2b11f431edb96f6639807f0bd68c6e139ee805c85f05877a88dd4333fa242fb0428705e3269e778d2c62499a7ce00385f3609678e95380f01385f310967ae95384f05385f350927e9b1b864386f02385fa3c4d997c54e4d98c4d6323eb9a686a9c9dfb39ccf8b196f95cf1160dd23c9cad253816f4b05b93328fb5f3769d1c2682b37f8ed007cf60d93708eb212e7ff8077be6912ce1156e2bc0ee07ccb249c7956e23c0de07cdb249c23adc4f911c0f98e4938f3adc4f928c0f9ae49384927d290e19c0970be6712ce5c2b71ae0638df3709678e95380b01ce0fd235b03157b4796a1cc9e3183fa279be5c325b2c96ccda7d36dc1200f443732671db3837690fd026fa281d9316d46ec9ee22ee25a22344bd64fb26ab4b815f7e9c8e45dcf570722619bc7100de27e62e27202c80c846d62f07683f35676652be95cb0972408ef99949306d5c4e900b607e6e124c1b97130c0630bf3009a68dcb098603985f9a04d3c6e5040301ccaf4c826963957d0700f36b9360dab89ca01380f98d49306d5c4ed013c0fcd62498362e27c80330bf3309a68dcb09460298dfa7a3653e32fd2d73b2797277b208bc1fd23183939f1dc3f7fbe0333acad2d52b44d6fafe15e0fbb13e7b2bd3b67fd2062a94e78164fc533a92f1e8f42763323f7c19f8e1cff405ca72cde905731d2645ac88a9ee52be5b279fa465df10440b00f31773d70111d622c9fc742148e4bf52a2ed28d0ce67ea90b27a3a5c870c6407e0a3bf9973b88e8d1d18c300cadfcd588551200aa295221fe5e2ca69d1926dde7b1b48ee7f9834319b74e13459c1540670fe6912ce1c2b719e0c70fe6512ce5c2b715e0d70fe9d8e4e8de4666ee458d943742e80f98f49306dec21ba08c0fcd72498368e919f0460fecf2498368e919f0e60fe67124c1bc7c88f073059438360da3846be09c00c9904d3c626e6b10066039360da38467e1c80d9d02498368e911f0360363209a68d63e41b01cc0c4a98febb3b08cb73b206e57c80b3b1493849ab4764388f00389b98849374211519cef301cea626e1245dd34b86f30180b31925ceb62c76d389c83811f9c229b211a12f590460734a80ed24c0116226875a06c751dabec6670b40d88212a1daf824f148d004e6dd8f6b1cab1480d731d29db9be091141be0724f49694907b4ac865ce4b1c7089dc59661653fbc944e7a3115348c192ed28732400db8a126ca6076c99980d522dc444e683c4abdedbd852aa0478b7a3c49b68c43d6d07906da042d90ba06c4d89b2b740398d5589ada3f8dca4523185867f1ef1d67a9b1d4256996a060ab236e9f0d5e45af53626fb5d81afb6a544d921014a6529e9c4af22aa52ff6180b15d3a0aa7d83975c9eef94ed85b4fb6e7fb5a80b73d25de600bac09078fc9da55ef80bcb4433a3200acdc8f640084f928590630027868474a8cfc5482d9b24b446d42314d78264ff6f695e56d80ff754a87ff65d7fa6031730f095d25fa95ecde6bfb1e80b133f54007073651045cc2dccd50f8ab078aed795c9c73c4af7c8e3c615fd32c2a98a300cc2ef559bf4cdb09d71ba8509e0df2c5aee940991da7c56e77f7dd73c02bbba5a307346f9beb015d0110764f47e71cf7c649a2ba53239498ee7ce29e493d8bad117d9e95ce6fbcae59918ede79b2e2673400dba33e7b8fa25be436ce999b0e50f6a444a9160ae6798a209bab416b00bced29e1a9f5be7c9565da4f6c216b0cfe0cf0f54ac7a06ff2bbb613567ec876cf6c0b2a3f9926e11c6525cebf8077f63609e7082b715e0a70f6310927e9b12264388f0538fb9a8473a49538df0038fb998493747f23329cb7039cfd4dc2497a601819ce6900e7009370929e704586b312e01c68124ed289da6438f70338c3e96805e5d6472b88ac113905e01b64d2d4d7e1941d1a64384b402b6807937092aea924c37902c039d8249cb956e2bc0ce01c6212ce3c2b713e05700ea5c419666aeedb04d115cc3fe6f838c04aa1b83bb8abc626dd11a06d6d265c3b50540da3c4dd540828714a7977c8974b26c3453687b831c09545896b208b1da6889e49e4ce7c2f17ffe623443542e42401989b5520a8a5616ae1142ad8b90076763a6aa1c345957d5b3954240be4a4c3d331dccbc72aa7303efec84729978901df4aab47256b8007e698334fd8c60d7bf603de984b8992ef6c385be481c54ccd64c766195559580435053e9967ee54561b77df3c17a01d413d072ef94908b956ee83f43480996f124c1be774bc09608e3409a68dfb203d09608e3209a68dfb203d05608e3609a68dfb203d06608e3109a68dfb203d0160ee68124c1b97f93d0460ee64124c1bf7417a18c0dcd9249836362cdf0230773109a68d3bc1be0760ee4a09531dd7ed67960761be4936923e04747b8c350da88d53138602a0e34c034a58e724039a0d808ea7049ac982ae3c27ec06215b797e20c03b81badf335e17b2ab7abe58ad4198936650817c1c809c988e7ecf583f4da6e7d3c633d2cf02682751a2edad41eb8e0d71782bd96e6214b3226e3e6b632da021a8564d3667759b8d9d773900e51493667a8ea6acf09379660f90f4a79a8473949538b70338a7998473849538b782c4be9b4938f3acc47911c0b9bb4938475a89f3778073ba493849cfa926c3f92ac039c3249ca4fb7291e15c0870ce34092769cf2819ce6300ce5926e1243d728c0ce7fe00e76c4a9cfc466d77665fcbbc35c0b487495e37dacabece76a07a3ec7249ca3acc4f937f0ceb926e11c6125cecb00ce029370e65989f32480739e4938475a89f36d8073be4938f3adc47917c0b9a74938ed1cc5dc0de0dccb249ca41311c97056019c7b9b8493f47c4b329c8b00ce7d2871f660d1478f700e358c8faa7b0f1cf1ae16261c56a3db670154e717506285bb71f27d8bb9aaded5c1aefa25621cb350c0b777dddbf7c05f1752821de0f1d7252c76443df9b177421f266be13f087c785f4ad46a95e628b6ad6dcafb00f0d6fdd2313344796b95f03f9eb74e96f04ab4936eec3d33eb50e09d8bd2317101ab05444f5cb071a1cc5c8072713abc34b5759b8473ecc8f2d05b4106504889566d1430926d4bdb55fd08f02da1c4a7368c1eee49ea36ef783c1ec02b327bfa2ce1222eb2e9b33520d72caecf0228fa240dc299731ba8505e015096a4a34d0f4fd2d0153676d73a9f07097fa9b9f39109133d599e7a1af0d4659468fb31ef49ad70df1afd89c353e4c7693b66743015e6a500f372736625dbb86e6e36c80c4ad3510b501ecb937bb167bf9b6dafa36f27e0a9fba7a3e8c26a01b11baa12764793e19c0970ae30092769ef3e19ce0d006799493849c79ec8709e0970969b8493741a0419cead00e74a9386f24653eec4443694d70de05c6512ce5156e26c0670569884738495386f62119c0798849374336a329ce7039c9526e11c6925ceaf00ce2a9370e65b89f30580b3da249ca4c74c90e19c0f70d698849374cb4a329c87029cab4dc2497a6a0719cee500e79a748c710eaf8f613ab20eba61a09eb9361d639c3ce0a5c21395ec95f215fbe08580efada38497dc1e36aa90b16f3acd3ce085079a02d2c67949bb00900799029270a88d0ce46100e47a53401276b391813c08803cd8149084f3e4c840de07401e620a48c2f91e64206f01200f35052461d59b0ce43300e406534012ced32403793f007998292009a71b90817c1e803cdc1490849b4793817c0e803cc29cf9ed369e5db01b40792425cacecccf6ca211561e9ed312c03cca2498361e9ed30ac03cda249836eebfd914c03cc6249836ae096a0e606e3409a68d05506300f3589360da78784e1300f3389360da78784e4300f3789360da78784e2300739349306d3c3ca73580798249306d5c04d011c03c917a8c3172d0f73409b4d4f9981f6dcb3f238347b6e687cf7f55f04eaacf9678f4ba1ec2b27b0315ca2dc00f4fa644a9b64589ac34d72f992a6095620a75155b2a8495d38e3a6ea2027b00f0d15328c1f665de7569ee2acac836135c209f8d113f1fb5b1b2540dbcf7544ac8debd925ca07cf11fcf53276a7b3aed3d3ee75e80f5b474e4afc995f436d6407700d9c0e99428752b7f93cf6109d192e5b0d7002f3d239d89bfd451623ed8d103af1110267eb21ac1a300eb99e998fd36621b9a3a780348ee67a5a38d94dc18d1702b1b9ceb80276e3609a68d0dcef500e6d926c1b471c86d1580798e49306d1c723b00c03cd72498360eb9950398e79904d3c621b79500e6f926c1b471c8ad14c0bcc02498360eb9ed0f605e68124c1b7b918a00cc2d26c1b4b1c3a318c0bc281d30b3c5dfee751a8bdd6bdbe6bdb57f6111981753c2f4bf971161794e867301f0cd4b4cc2996325cea300ce4b4dc2996b25ce0b01cecb4cc2996725ce4700cecb2971aa45d07cb3fcb46ff44c36c6fe13287aae4807be9cfac047e67d9300be2b29f1f503d520773c925783aad80431a4c645f1a4cc1373a5b67a546c7505e90780f92a4acc1d183f1ab4501e90c345ad745e5f2ef0ae14280b05177e671fc60c80f16a4a8cbd106f1d2706cc4ac53ca5718c6f4fca472c0b1d0165d6fbe89e00ee35e918024eed30071b377fbe18a0bd963af9c7ab32294b49877c793f0509c6874055e93a4a8c991a8cfece2520ec93273b97600dc07bbdb91900e110315906f01ac8006ea044db5ba09d2afc730e4f8bceffa5f240272e4acdaf5b212280fb7191f36f57fc64e75ae2882db6b0f06a0e00df988e1c169b0a3641782cf1c96dcba972d8d1200bb829ddd3c092cf046c3cd0e90280f6e6747538abbaab6a08449a0676d755bb81e47e4b3aa68343988973577bc14e0560b75282554737e6b26dede8c6f300c25bcd99956ce3fca5dd01cadb2851f6f18172ae136699e89f9ae5fc4b75a654d196f8fb5395f86340b1743b25e2ae2c7a767285e8895a1ed7676d1ca5bf1e00bd231dc323c99f4d4088936c8fd83600e79d26e11c6525ce3f408e7a9749384957c193e1bc04e0bcdb249c7956e2dc0870de6312ce9156e27c1de0bcd7249cf956e2bc0de0bccf249ca4d319c9704e0438ef370967ae953857029c0f988433c74a9cfb029c0fa6a323247a7e689523c6ed6db2b72fa918207c281d1d21c9cd57b671edd13ea015f470babcb1484ecd29616ba527a6a15bee0b2a84f7016f7c241d23441c6149ed8e36ea67db7b371f01181f4def20f1b67e76750f80f63173c7df09d1920dbe9d01d03e9e8efc33679b1bd61804103e918e89b6fca8a6b44fb4259b5cd317e07b321dc3bfc98d0ae558392e742580f99449306dac5b5e05603e6d124c1bd7b59f0d603e63124c1bd7b55f01603e6b124c1bd7b59f05603e67124c1bd7b56f06309f3709a68d23e62702982f9804d3c675ed6702982f9a04d3c69dbdae06305f3209a68d3b7bdd0c60be9c8e99467e86cf08bd936c88220c3a855f310d28a18792011d0480be6a1a50c2d61019d0be00e86ba601256c119101ed0780be6e1a50c29e2432a0fd01d0374c034ad89b4406740000faa669406d9c88b03d00fa966940095b4864403301d0b74d034ad8b34406b43700fa8e6940097b97c880f60140dfa5049ac982ae7327cc00c886e26601bcefa5632433bf3e4632c9daf11fb008bef7d3314d21d63b9399a84058bd279ba6700ef0cc0fd2314769786d9f533173775ce2ffb67d53abfb81877e68ae87dab891c5e5c0433fa244db4ca02d777e2a62339cd78a19df9ac23e601d812f7e6cd2b4ecd156f6797607fef7894938475989b305c0f9a94938498f1e25c3790b48ec9f998433cf4a9c17029c9f9b8473a49538bf0538bf300967be95385f0438bf340927e91669643817009c5f998433d74a9c1b00ceaf4dc2493a13840c6729c0f90dfd5ab6488ba7deb6ea236b11b50728bfa544a90e6eccf1b4d16dee7c5b05e07d47094fed88c457b14d647cfbe80a369b95c89e22771fa4122150edd11dd958ba8ad9bc6c750040fc7d3a724e2cdf8c3dcc8470fc920ce774d0c4fcc1249ca49365c97056009c3f9a849374d704329ca7009c3f99849374031f329cd7019c3f9b54eb1c6de574afce00e72f26e11c6525ce10c0f9ab4938475889f37a5051facd249ca4074191e13c1de0fcdd249c23adc4f909c0f9874938f3adc4f938c0f9a74938498f7824c3b907c0f997493849cf2424c3b916e0fcdb249ca40bafc97016019cff50e21cc4bc9b42578a9ecf1ac6b7f1517646f64e8281c1a0c639ffaa14931349b7fef9374404fc695033fd97127847167fa16174ce4a06b22d95e7f6079efb3f5340127a2419c8ae00e47fa680249ccc4d06f268009235320424e132033290d90064c8149084ab32c9409e024036a00499ed29dd6bd0c9b0f8f67e139c37ca1d7d56893b6e6a9acafa6fa8cafabb4159df9012bfda5420d92e67c27179b20ee769006623936012ae7f2783b93b809961124c1b87427604301b9b0493b05a4f06736700b3894930092b526430c702984d4d824958bd2783390ec06c66124cc29a2919ccf100667393601276e291c19c0060b6300926e13e2164302702982d4d8249b8470819cc4900662b4a98f8e9ad939dbf4b05c662c7de5542b0fda7b7eec32260b7a304db43809deebc5024e67fc2ad01ea6dc632d986014d00d6d69458fd1d6462e3fec87340d26f438932d81907366e1e702df0d2b6e928a2b0fed1682f253d3a8fcc4f47013f6d4709335393e4fd6dc142d80425cb51ab00def69478db831ac06a51c2f3050b4b44c99fa66d2e3650412c0109be0325c4a62cb217c37c518eafb1307fec047075accf523cfaa422c2a286ccf39e04c9b713254a35dd0656e0b15a2779b59d2c37ec033cb33325ce761a9c70a9213942b2c4fd3140d8251df5cad8f23a999aa58d6767ed09127bd774e49bc9d52b6d3c36220b7869b774747ca4d2fa211cb924f3d19301d8eea682b571bfafe300d81ea68225cc0ac8c04e00607b9a0a96b0694906760400bbbda96009c7e0c9c00e07607b990ad6c60a562f0036d354b084e34c64600f03607b9b0a967034940cecc1006c1f53c1dad887bf3700dbd754b084e34e6460f70260fb5182557b7e8f60f5b0e73719bec301befee6f401d878a6dc2c8072403afa4e939f176ae304f065a0776aa0493849f7b923c37922c019360927e92e8c6438af043807998493744360329ccf029c3b50e24c340bcfdb156de3549c5b01ccc126c1b4f1a8f23b01cc2126c1b4f1a8f26b01cca126c1b471cce96600739849306d9c167631809965124c1b8f2abf4ac06c92e1113e3946f8045175e195972216d96376189bc2f88a607717da22e77ebae8caa8668b1d1c0b9cfffcc5c0bece7fbae721b191f024b6965588a75c5eb1905deefcca35ab62d9fd9c57b2b94334960e11164dd9710ef36ae79d39ac4484be8ecd65ee1ebab39cbfd524f41a81242c4e659aed3cab617c72170f61a5a3c97256292c8ede63372c66657169ab25010e302c755dcddcb5d2d36423bad4b1b9506852e9bcd34884e35608c3a156e04e4d8d9b26ba80b8163c8242a1b6324eb83e33842d858e0d85e25a50fb5516df7d2394effce576260dabed461a26d77197cb3bf53cb14c1e23f1a50de7d843fa74585667be94c822d7fdf9f74bc5bcf71221755a424b13db87fb65cb38b192c5b731dea6edcfe1f12ea35db869e7500be75ff39c987785973889ac52cc6daa64e5250d58c6ff03bf9686ed54da0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/56a9396c8ea37a246bc2050a7a964a5c.asset.meta b/Assets/SerializedUdonPrograms/56a9396c8ea37a246bc2050a7a964a5c.asset.meta new file mode 100644 index 0000000..fd6305e --- /dev/null +++ b/Assets/SerializedUdonPrograms/56a9396c8ea37a246bc2050a7a964a5c.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7ceb2971aebf89042ab36c7c943ca596 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/57900d57d3c8cdd4cae64f9da89db8cd.asset b/Assets/SerializedUdonPrograms/57900d57d3c8cdd4cae64f9da89db8cd.asset index 59e8887..ad7d591 100644 --- a/Assets/SerializedUdonPrograms/57900d57d3c8cdd4cae64f9da89db8cd.asset +++ b/Assets/SerializedUdonPrograms/57900d57d3c8cdd4cae64f9da89db8cd.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e7824b718a97502c140b095e68714871a7a514420c8a3641abb4a5ee2d75777777777777975fddf5ddd99dc93d3b99e7ee3673cf31c3fb271fb2d9ddd9679ef9ce336e597d99f72fd6cbfb3587cd60a3591f369b15b3556ca5f7d768efbac2fb09eee4f369acdcbb9679bf0bbd77bd5876922ff9bfeeb1d6deef02efae82adf1be5ccb8abceb52fffd4c56e2fd5de07d5be2ddf1a7a5deff12cf55aca6f7d16c36864d655358ab58cb2422e6f81f558867311eae585deff728b6d17b5be22bc53de9ebbf6ae5fd9ae9bda9f0dfadf09496eee6b3057eb05678ef8abc6fcad9724fe6625f62dd6f4a99ff070b2e3dc5b597b8eee4fdaf27feae21feae2bfe86eef9731eba3d13b8ed0ddc4a997dbcffb5bcffbf8bfbbec17dbdd5e23e37b88fb55064d40732fa896b9eb8e68b6b7fef7f6dc6b2a6a6a07fa277ff0939d3c07d4c50e3cfa7837b8f41d62dc2dd80b07b3648f8e185a76089783630f826b645095f47103ef97db6f06f86f2bc93783e53dcef20f48989e7b3c03dd76f9e7037583caf23dccd06f7354178a54e3b6a74da417c3b47dc0f11f773837056b290cc6a28ee7700cfa12ef3145d6e49a04b5325bcd35928bc3524eba1e27956d56fd970f08ecbd85d79bf8bb8ee8cbcdf555c8721ef4788e77b88fb91e23a5a5c47c56d637e5df1ac99d0ff03713f465cc78278874ce787596a65360f64d6ec2feec789eb7860635c464d4566cd04325b0a99478afb09e25a00e28acba8a5c8ac9540662b21f31d71bf9bb84e64f1f4c165d45664d64e20b37520b35613713f495c2727f8664a703fe609713f35b81ff5b7b86fcfc2763b1ddc7b7ed57e4171574fb893f9a4486331909ff97f4bb7fc5a577cb300dceb64cbef1a08f77b817b7e6da8e8d850c8b942c891cfb703ba886fd92ca02fb0efcaf7b3c1b7baf732bdcf40decf15d799c8fb792c947e6458655eefdff3f70b83f8a9b559bcefa0309c0eeebdb0d75dadb8ab4efc48ae0bc0bd4e76b2f869a4e8d848c891e94932a18c9f3d92c4cffcf4c44f9d2ee27d75cbe43d0339758f15f7b25c68c052abaf48fd1624719f48860cfb5e063284add4db92c06d6fe056fa233832994fed24383706b6d158bc9379f922e5b9cc8f0b95e7b591e77590e775c3cf2bd34c13a04b93f037b1a62c9c669a067a36385191d14cb85b0c7486f2e4fb22e5bbe6e279310813fcae39f25d0be5bb3aca772d90ef5a2adfd555be6b19fe4e3eaf4c1f4d58287dd49775b445c17d837b52b0a544ef043fbf9500f39856e2babd785e02eebdf868981df8df50d605a5fead1539ad93c8599340c71216aef3ab76d446b1953642e63d42b79f819df3f76d59380f2f04cfa1bcd2b0bc46324e64bd384fb82b13cf4b15bde4fb22e57d3ef017be9771b08b78be04dcf3eb10c4bf5eca7bd53fe9be4879bf24ec2eb6ab78bf54b9df3b41dc6ca784b99df86619b8f7d8359675298cddd224ece4fb74b193f23076f23dc66eefb0bb6ab193611dc1e2f9b6ac474b9b94eda7e5c0ad7cceafbd58d8f67b05329a489bafa5c86bcfc2758bf68adc91cafb91e23a0ae828598f8e3ff3dfcb67fc9a2fe4ac00f75c2f5997acade895adf89bade825ed6125b887f98df46f9ee2df33387f29bb328f1dc142796ce345e2fdb2682cd98aaaacfc6e21f94ce663abc033596e7500cfa00d8876c720d9de91f600fa01621d807bf90edaec3ed1d887c22165c070946bc221cbd14e9a70c836b92e1c9d41383a01f7f21d0c4785b8d651e47751c221eb90301cb29c49160e59ae77d584a35b82707407e1e80adccb77301c6bc5b5ae223f4709478e4138643da387261cb2ef4e178e9e201c3d807bf90e8643d4692af3a2e9e0de4b832dd628ee7ab350f91b93f5d77c454e69584ecb6148bcf709f3aaf2beafc2b3afb8e62a7ae42a7af413ef5785f5af5246ad047ac8efe0fbd5e1ef2bf3aae9e09e87ef1cc55d7f453fd927d34b91531a96b3bd52c7ace43040e1a4be1fa8701a28ae83143d06299c06239ce47b59b6ae047ac8efe07bc9492d0387b270193854912ffbdc1622dfcbf732ff5b87b81ba6f8334cf167b8124ef11d5bcfe26945f413b20dac326db59275f5ead6cdf715b2c72a7623faf9626358b84e3d26085b2b51ff6df58d90b39f783f4e91332eb19cd64d12e8b83f0bd7cd37b2701a19cfc2f593f142e6bce0bbd6b23d27ebe613c2b626e5c52628f24ac3f2da5c23dc4b9bda8b85eb7b07287ac9f745cafb7ce02f7c2fe360210bd72f85cdc51621fef552deabfe49f7fb29ef0f0cbb8b15b270fd52de47a99b17b070ddbc2060d7f68b24ec0e4ac24ebe4f173b290f6327df63ec3685dd558bddc161fb6387b278f929c2c3368367226db1c35865badf59ea7188f077b7b8fb98ecaf3e5cdc4f143a95837b2f6edac9fe2b9d8e4788abac97cab4328985f371d9f63a4ae3ffd1200c320d1f039ec97ae964f04cfa33251ed621b2ee2bfaf86353815f93817bf90ec6970c636d45beecabdc0bdca7120e590f82e190f5d2e99a70cc48108e99c0afe9c0bd7c07c3719cb8d651e4cf52c221fb62ab130e592f9dad09c79c04e1980bfc9a0ddccb77301cc78b6b5d45beecc3dd0bdc57371cb25ebabb261c7b2408c77ce0d7eec0bd7c07c3515391bb270b97efb28c91e5fb02162edfd5efe57b598f3821fc9e9da8e170523c2c1d178967d5ad07487d4e117e2c16fa54807bcf4dc70712c83a595c655e2efb3516807b2ee3f740e7ecdcb0dfb162162e9f4f06cfa1bcd2b0bc4eb22d26cb98a52c9ce76f01cfa1dc25c2dd1ae55ee6dd8dc4f312f17c2db8e7fe3609bb63a789eba9c2fdeecafbd3157fd4f76788e7729c36957257ea56aee8b649b83b53899bb3e236d3b997b83651644b9b2d5564970ad9b23d77b622fb9cb8ec9eb720b265b95ba6c82e0b64ef28e2909dabc83e2f2ebbfb6a453616efe787fd46e37f5d92f8df5b89ffbd035d3b6f8df897e955892b26c7d6d476ca59c2cf652c943f55dacf7216cf579603b7fcba8285d3ef8a406e77d956aca5f8b18a85f3f0558adcd5ca7b512788817e86986cc7eda330df27f0bb4bffc0df2eb25c97715fa1c4fd05e039d4711d0ba77979bfb7b0ad864adc972b7a94077a749373422e0cf3ac8c87a224fac9eff295f745ca7b3917eaacf07bc9b4f2fb354afccbefcb94f7aafc8b14fb90f2653cac65e17ab5e420b9a9e1b958792ffd93f52f190feb155b58afd8ca06166ad757cabf44792fe55f1a761793ed0499e6a3a6d18dc87b358daae1da5709976c9fc870c9f684e4bb5279be47d87d65fc2e07f1cbf3be4dc0de74f980ac67a4230f394fe8b03fd3e72107b078fa3d00b8e5d70359380f393090db738390514bf16393c26f9322f760e5fdc1e27a10d041b6cd0e61e1b47b48e077ce86c0df1c398745a6d1cd8a4d5f009e431d8f60e13c44de8b3ca4a7cc0b641e72a8a2c7a1811e3bc97987978579a27988aa9ffc2e5f795fa4bc9779c879e1f731a55f22769812fff2fb32e5bd2a5fe621fb2bf2653c1ccec279886c974a6e6a782e56deab79888c8723155b90f578692b47b1701e22e55fa2bc57f310e12e763433cb438e46de6379880cd7314ab88e51c2756c385c959c8f0dcbad12bf0780f8e565dd23c0dea8f310d1ff1c3b8ee9f390e3593cfd1e0fdcf2eb092c9c879c10c8ed2be725d452fc3849e1779222f764e5bdac0fc23696e83b8c9dc2c269f794c0ef5ea2ffb3b79c1b2cd3a8b409350f3955d151dac01ae55ee4217de59c1c99876c51f4d82218c87ee4cbc33cd13c44d54f7e97afbc2f52decb3ce49cf07bc9b4f2fbd394f897df9729ef55f9320f394e912fe3e17416ce43641a93dcd4f05cacbc57f310190f672ab670a6622bb2deb552917f89f25ecd4384bbd8d9cc2c0f391b798fe521325c329ef602f7305ce786c355c9f9dcb0dc2af17b3c885fcf4e7bc97e1c933c44ed7b90e55405b8f7dce40e4b204b8efdcbfce47c16ce33ce1732d6047ae75e13f63b76010bf73d5c019e4379a56179fdb259387d5da8d8e316f01ccabd8885d3bfbc4fa5cf1dcb6b65d82f6655e77c487f2f61a1fc37763178ceaf972adc2e0d640c121c2af35a29ef72c5ce2e57e45ea1bc97df5dc6aaf43b56cabc4af9e62a45e69561dbadb49b0be3327d37807bec6af1cd7a70ef852bef9cb07b39f68dba7f06e80fbf933ac9745a5b09d3354a98ae51c27451384c523ebb5adc5fabd8a7b45fc9e6bab02df8f7f23b7ebd5eb1dfeb83f0e47f117657d93f738370bf01dcf3eb8de279a1a2df8d8a9e1bc3cf7d77f5c2dfc830f8618579a80c5b3eb88776ae7e7fa5e1f7d7187e7f91e1f7179b7dcfda1b7edf21daf795e1dd2389fb5549fcdbab9adfb737fbbe927775bfbfc8f0fb6b0cbfbfd2f0fbcbc2dfcb3ca8b28c977c4419df4f8e299994f1b26cba99c5f301397fef1621673ab8f7f2a6c16728ee6e66a13cd0bf877adfcac276be0a3ce7d79bc4fb7d15b93729f23706e11e7c47584ea53f8a1cf93d5ba9c8d94f790ffa5a23cfd53f5ae1781b0b97d3b705cc86cc0a741f22fb478f12ef6f0fb393f2fce7505ea922ef91b01c7fac2c5118a47f772a717a67206fe7f68abbbb9538bd5b617d976263c780e7fc7a8712a752cf69e03db867b24dbebfc241cabb47e17a8fd0bb45d87da57ef7866d4ecaa9947b9fa2ff51e03ba89fea5ecc7dd959d6798fd1840bdaa094932c7e12d9d8e142d6fd4086f4ef0156b54e79a878f7200bd7291f00cff9f52185e943818ce1724d612d45de232c9c3f3da2c87d5479ffa8b83e0674147d76b1c7e3cffcf7f219bf3e2ce4ac00f79e5ec3be17326a2b7a3da1f8fb84a2d7932c5c877b527c7f98e2dfbcb07fc3db2b7224ff5a7146f25da5dd3dc04279f4ce57806fb9bb430cece05a11278353702beb994fb170ffc453226c9f8870fc9e40960cffb32c9c4749db7b0ec4e173c02dbf3eafd8d6f381bfbbd65564cbef5e50e250f401c75e04bc64985e02febe089ef1ebcb8aedbc1cf8bbcb077838a50e9571f85c380e7791e3d8d72b7a3c2ddcc9fe3c9987de5855677613d0f969f14c96b99e1f2572dcea06204bca10ef62cf68e4226bfc2adfcf06dfeade236b302bdfcb357eb722ef95357eecb6203c73e4fcb244362acbb857141b7d2588b3114706b2469c9340969cfffe3a62a36f00ee6f00b7fcfaa662a36f06fe8ebc46912dbf7b4bb1d1b7c4f56d102f324cef007fdf06cff8f55dc546df15fecaf10c9d8dbea1d8e81b611b1d21d722dfa1e8f1aa62a31d34367abbc6465f4dc146e1ba853bc577af69e462362adfcf06dfeade23eb502bdf4b1bbd0b79afdae8dd116c54f6657706e16a26f47d0ff07a2f88c3d1725d6ea7046e641f7b6f8d6cb9f6ee7df0ddfbe23bd11754b9ce5de7e68904b2c55af7d1df24709388c57d2cbceefd7e165ef7fe0088677e3d396e3b1df74f41fe438afc8715f98f98c98f7d20ec40ceb3ed0aaefcb99c632ae3bc0be022fab21858eb51a9470f8dbb6e1a7739559fc53e0271f811d0935f3f64e1fce9c320fec6cbb5215d95ef3e16ee37817b7efd9485ebfc9f8aeb27e27909b8af196cffc0998ecb55e47c26dc1f0cee13c99910c8e1d3b543723e17ee67827beefe92b0bb10eb1ee29a0fee61fd5ecafe423c9f01ee6b56d521143f398aec1c45f647e1f7fe3dc87bc72e517494712be36f19b8e7baa8e91fda59a2f421ead3ac0d70ff986263ba34f1b812bea8e9e64b118e69e09e5fbf52eceaab207c1384fdb127c2eed1bd6e649e26c3f4240ba7fba7c4f569e096cbfd5af83f1fdcf3f7ba3d3be49ac0eae64da25ecb9e4be0c7f3867e883536b16f44b864b9d74e3cff9fc2fb7f01efdd2e51dc7dc7f475a1efe38c63df03b7fcfa2d0be735df22b2e5773fb0709bea1bf09c5f7f64e136d58f429ee4206d7f204b68fbd2bfcab4f73d0ba5bd8257c4fbf62c1c8ee92c148e49931477d56124c3b48085c25445b6fcee2716ae2ffe24ae3f2b3afe1cc89928e6bf4cdc145c2775097fc7649b48dac7eecafb1759a89e53f95cb68d7e15ef0f01f7fcfa0b08f32f224cb2cd93a678da4db633ef494d5ec27422d23f7bd9408658df3fe99b40bfc9ea5e62af2409ef6f2c9427b257c1737efd5dbcaf00f79e7f9365ffdf6b81bf33e47cfad753f3b7d29f3f141bfa43c817f31f267fa2f04e26f78db07cf616abccbbe64a366f0abffe04f6f2a712ef7f09bdcac1bda7d79435d1f4a9942bd3e5df8adcbf855c99afa7186fb20e3cb566c4ef649dff1f10f67f84ac114adcfcc3c2f51be96e43443f9b8befff037efe2764dda2f829f7a39b01eef9f55ff0edbfc1b7d3e43c6111af7c7b33587ff3efb9bbba41fc4fcb16eebb24708ff9a5d6759285b9a59009f663f3ffe6b264bb408439ab060b95935952c60ee03b5006f9f7fc1a03b26381ece9b2ddb6bd785e5309634de1ae7dc064ba64d825817bccaf4d1199883661562d20ab969025e7fcbf1d6693a8aea593332362fe9772be92421e3c43ac1b987186a2c3eb896567d566a13c384bf40b6729fbae65897dd766bc11f8c39365280c49fc61ef84e527ca1bb3ea02b6b25e28f2c6ac7a2c9487f9f79e5e334f8ca64fa55c19eefa8adcfa42aeecdf4891a7df0fe07d372b3be277229fca027b5165893dac66eda9c48ddc176d06b8e757b04797ff37ff56dab6cca7e4b86609b8e7ee6e08e26296cc1fba24708ff8355bb5ff646196f914d85bcbff9bcb5aad8459eee33407dcc37caa310be753623facac4640b6d8f76db6ac67c97c4aee995502eeb9bb470226b325c32e09dc237ecd91ede25499a49a9e12e509efb3906dfbebeda5ac77c5753178f69eb81681671f886b31ab4ca70dde48c1ef0f03b7bc2848ea56f4a366c9bdc6a6837b8fdddc3181acb9b2fc937d086f266123e5cabdc8f604f730cdcb3dc7cac13df7f79d88fe49792d41fcb70cfb9925f7ef5a00ee3dbf76bf44d1597e27f713db0bdcf3abdc1f6c2db8f7e4cc13f9ff3cd1fed95db61145ff7a565ba09b90c53e066e405ba8f2bdec93da43792efabeb2e45c9543c03dbfca393087827b7e6d0774106de12cd00fe3ffcde58b795a59720fa7cde0be663c6c95ee93c48f645a5986c83de344bb6aaecc0f528def04369d25f70e9a06eef9b59362e39d82b0ec21c7217754dc95807b7ecd069cb2c5b75b143f7664e13e8f1dc073f91dcc23a51cb52f1bee012cfa27d9e7e2aaebb3f982a53e16d036f073beac2b7e09e4729d3a0b1d0f53ee0f17ee44be9fd545e1d945c87d4791d71584459619727eb2baa7b07c7f3a90a17b1f652d63b6d0a39bf8e608e539ec9f957b1acb3eb8af14ffe5fb6f1499ea7bd9c725f5933694a3e8209ff748a0c3b74974c849510769a33b293ac8e73d13e8f05d121d764a5187cec27d2f4507f9bc77021dbe4fa243af147590e5411f4507f9bc6f021d7e48a2439f147510edf0ac5c4507f9bc5f021d7e4ca2436e8a3ac8722e4fd1413ecf4fa0c34f4974c84b510759a6f6577490cf0724d0e1e7243af44f5107b1bf67d6404507f97c50021d7e49a2c3c01475906d83c18a0ef2f990043afc9a4487c129ea20ebe243151de4f39d13e8f05b121d86a6a883a84f640d537490cf8727d0e1f7243a60fbd7ab3a7417eee57e9cd3c3eeb346c475f0dd7865dee2cdcab7720f4d5e0ff0cae5c5b24fe04ff0be1e9007c321fb447757de7fa3c856dfabe1e821de8f14cf8f549ec37d3155967fb1c42c4722ef551dba09f7a31196630187d101cba217946fc7845916c93ee13fc1fb7a401e0cc7df613d2bdf7fa3c856dfabe1106dc8ac710a4bf97c7c0296ffb0c42cc721ef551d645d7202c212ecd1e4bbf15896b456be2d609575c712b9e6ee4fe59d9405c3f0afc249beff067cab7baf8621513d2d51bb6e12e02bd67c644d0e73f0efbd3097ae56dcc93da5f604f7fcbd6c8b4c61f1b6087f7e3378ceaf727fab7d15b91315f9625e77e989613995fe2872e4f7ec2645ce7ecafb1b40d893b6856ac5fcf32c26b01256c856b3be7e67314ff1a91e1924bf4c7e5890df2fedf79a337e6a10f7760ddbe87d5aa23bb167b67f1ed01a8f469ef6c49e36fed902d2f7d1feef42cfc5525fe8515955bcb8b38a175cb9e5de4f09386ea8c27b3ede3fad881f38b4d47bd3874df2aefcab45ac1f9beffd84a5ccf1bc5dced67a77b3bcdfab7d798b3cb5abba4c16247e3491facd0c4f667072d20aef8904badabb5fee6b38d3ffbdced7b4c4d7bec07bb6c63fc769252bf31a44abd806dfb7aa612ff7fed6f9394b20d3eba83f40097b1e1cd324a3698c171aae7d5fdf16ff2f46b6468cf8c34747897458b3af3f6273749598f83f864126c3078a0a848c7e3eb258e8591eebebaf1798518560f430560da1debe03de0359ff8461d193e1d1ddce0f413c8677995138fdb49b4bdbd60a072d9ff5f5bbf2db27095a22b05c5e8e7ff2419420d4aa5533972baae28fe9f0fbcb756766107fe06ea9ef2e7a04d4f60bbf7004f84770ccf2fed8e0fd5fee391ee9090cd4aaf03f5c29545bceaac4512e1758c7c75cb5104da62a063a4b07daef3b9cb555ec1c3bb62f31eaba95a188a3eeebd78c5a273048cc2fbfca9425ea4d32c9bc31b9ffa09d73875c584b1f2ff5fd78a98e6f58ccd4d0c54cfd4c2781e4797ea278695019ae78bcf07f7a860d11db4ea60346b0a68e6083ad63db5cf7ead9361fd4edad30d4f36b94d00613698011aca523e88f68cfce20c1a99e867b8b9a62f518364e9961139f619b2aa14b45078c626d0dc55c4eb1a94ead7a8a5a5c2344701d4c703343c17531c1cd0d05d7d319d476994e92fcdd2a5f4aa1e736ba39f1bed79e6ab6a6b7a796489a4cae02664df57571c3116eafd54a8d9c9678e434c024b73295dc1093dcda54f2763a83f2f72aca7c3dbd7a6524cf6b5aa55c46b66589aad9514bc8463a7afeec9c3d49e955ed3e927f8df2be5de27158e7f709acf5bed775372526da2ee5dcbebd4f339be93ac1a26984116eacb37c8ebd0316edaaf1b7c58dbf894e38f7718754b2e9f6b8e0a698e08e86829b611941b626238845c9089a63923b994a6e8149ded134f36a8949ee6c2a797b4c721753c9ad30c95d4d25b7c624773395dc0693dcddd436da6292734c756ea7cb9afd049fc9aa37ec56a85ed5bb47653840d3dccf5faa56b253f14dcc2709fed5415ae37ce048578b4fc5032c276faf8b103f3f5b461a21b3bd67c150c758ffed52bf7f3c2e73957fbf12b44b127dc1a364b2772df634e4ba248ebc5ebac8f3735a3e158656b3dea944741f3fa2e995c18ca2832efd73a3e8ab2197cbc9e52ac152b3843e7896b083ce33de06e4ddd5557a1ab9fc2ad2ebe0d23b6259599e6956968d49ce3795dc0993dcdf54f28e98e401a6923b6392079a4aee82491e642ab9ab2eeff3eb458b49f33e59cb9ec9c6b089debb42cf7d893f66c59f4ff324167a7e7379237d1f64d20ede87bf4a9cd30dd6e5747efdac1b6369d5c33f18b05864007d32f00fcb3b87fa7967ba8387e594dd7426e4575317596542d5331f3e032eb526e7309f7a976a508f4abcbb2e3be0c487eb9455738361786e90a313ccdbb47cce9b699bb607267cd73408df09133e220dc27bea84f3deba91958ee3c2fff3fe5511de1017de0bd37c9446f3ac889af7c60a8ed19a822352fba80fc6648c86c9269dda0998f4c5848fd5083f31a2f05c4cf8388df00b220aefa7cb0cfd96f5c119c90c934df51aef858cfb06473daa56a4e55c9f19deb5d4d7823fe75a249f2296383b1dcf34a5b1df3f3016649c5b3f147c32657dbfbb4b9fd917f899bd5d3a63c5459ecee0797b81cfd8acd2bae02df885a2d799fbbfd27f35cdf381c76681685a45697fe46339dc444d0e178b98c3f5d72538bf5b68e5564d70bce5b9d6ef82e07faf13d13bcbf73b3e99c32429f1b9a31d34259b5fba698d76b26fb47929186d3ab4c7cc710096ff4ed1e4bfab63d1f2df815881375553e0456a290dd249e6952e3e5fd9a4d2355827981719d33579652ecf2bf90058961fa333fd18e56531d6e7a1cb76a2f79154094f011e9e2158786661e1991dcf6c23f83314f3670ee6cfdc6af9b333967dcec3b3cfd95eae52ec3de4eec778ff177b2fcbfcdc24781625fb1c86f9bfbbce7f6eeb09a69e45f07738e6ef1e3a7f9bf9e15ee8895ce80faaadf4c21fe4aafc299fd75dee5b62140d76c13498afd3a005d0a0a432cf9a22ecbffa5aec8a69b167220eb9deff22c19e4f0a5c63a0c1084c83059805480d16fa158932cf0e968ae23c8abf23b19c7a2f4d4e7d6c8d6839f5282c500b53c94f13683d1a13bc084bafbcdc5fe3d70b784e98ed4f96cef65722c85414c5ff3118b5420db50f22521b8b056eb12e70cd7d772bfdca43a1a847667b45c17a16ccc41feaddede719ca019102380e0b60912680fd6b460be0782c80c5589aaf1ac0c97effc91a83204ec08258a209e2911183588005b11433d0719e6996fb41caf62aedab44615d5ccdc0ed8605ae4c13b87722066e2216b825bac0f156c05cef55903b2d174b42aa17ac4958b0966a82d5a456b4604dc682b5b72e585cd0482f8e368a961d0fd02c2f06a3666553b0202dd304293b6290a662c2976b84e746143e4d279cc736df39dcb43f6eba4e38aff9ad6448cd8f9f9511bde637038bf4d5ba48e76d8185a2e15eee971b4b34b63dda7bc26be1cb2219c24c9d267ccec03eba10f32c439c321dfcd38c46f6c43d9b8505bb4217ec962c5edd8857bb0afc0a20aff854bfda331bd3638d4e0f58f14a5705740ea6c15a9d062db424cc2ba073312dd6e9b4680cb4e0bef1ca5ff5fd9e87f9bd5ee7b7aeeab9b4b2288ee2efee5812df8025f18dd54ae27b60e1db5717beb69a240e1b5b13427657bda43e1f4beafb61497dffea27f53d759ef132e00056b50cb8a36eb43260814e383711be8bbd515fcc5e98e4834c252fc4806cd201a9170dc8224cf8c11ae117348826bc50279c97b87c9f30d31277b146785f7f8a1caf5cd930452abdd3a3f81e6aa98dfaf25d4072627c9c8d4e57ac27b508cbbc0ed3a91f210f2ac6f2a0c353119c20bf29c152c0119a14b0b961b41450aa13cedd1fa9c939fbfad330abb71ce8289ee1d61419ae98881161a94c1996528fd6a4d41a1153ea12cc26f8716f550a34de66d2f510cbf657360ba655f2c626ff7b95f7bb5c29d6b3fdc9f36b586fef5aeafd2ef70bc132c65be2f16a1097d8cf9758eaa7f515fe775c7660fbfc7d9ef77ea877cdf7ae9d2219ec522cea8fd5447d2e8ffae3cce2706f0cf3f13acc8bd282b9fa30b3bdeada129101672bb5e3a0bb4b7656678bef57fb72cb442da72262742cc392f9099a647e64d368c97cb9ae2cf2e7f0667261d048cf55b93f8f27facce913532e5d4e62fa4541897dc7ca8b15ba68e1e44e4e255b3f098f9295ba28f167d0667245b33ac4152d524e493952b630fd6ae664fe63d1b24a47cf9f123c3d83f452d95b434feed494c99de6936b59255409b79f40a8add61933a7c6f711ada7562574a5e869b841efa313ce33b0333419d8b466d132b0724cf333359ad789a87905a6f9591acd5b378fa6f91aacd43b5b57ea319dea094a8db598eae76854ff20a2eaeb30e1e76a840f6b154df87a9d705ea33b8f99b7bd3660c2cf4f83f08d98f00bd2207c5f9d70eefe425d8ea10ade8c0bde4f27985bd645a9084e6082fb635672b1c64ab25b47b3920374c2b9fb4b185249bd941955520fc4305da64bae7cb0216a2595174636b6070ec2505f8ea1bec20cf5260cf5953ad48bd386da9d36c1c158d2ba4a93b4fab78b96b40ec1b2b1abd3908d1d8a09bf260dc2376379e4b58679e46198455e6798471e8ee1b85e83433b1b3e018e23302bb9419701b78f662547ea84f3f6cf8da92049d0fe390a137c93a1e0a331d637a7c1f48ed109e7f5d05b52d13a411df4589d601e89b76a22f18b8891781c26fc368df01b3a44137e3c26fc768df00d3b44137e0226fc0e8df0311da3093f11b3943bd360292761c2ef4a83f09331e177a741f8293ae1bc67e29e546c7c0b2e788b4e30cf35ef659a029f4f1e8e5ae0af11857759356a55d18ae653b1b0dca70b0b7f911df2358a5fa7617eddaff30b0ea917551947a9feb0f6e998160fe8b480530b5688ca4fa1cfbefa1a9c8169f0a04e83fa0c0eaccff52d634dc472fb4c2cfb794897b7758a96fd9c8525e287d39088cfc6347f44a3f92b11353f07d3fcd134687e2ea6f9631acd73778ca6f97998e68fa741f3f331fb7c42679f7cd9db7c91972df0f286f9221f1a2a1a1dc1b379feb537dbc5fb3d16e45945bea0e5de5f7ccad06aefd9123f7fd9e0776296f84f8b23e6691760fa3fa9d39fcff18f6b24d7df66578669a808cf02cdc04c9067ab0da815be8b8aca39c5abfca7c57eee1174c86ef4bf8c12a60b7561e206f254e50ba555cbcf1daf5d8705ffe2abc623346c2fc28cec198d91d58c68641763c29fd508af1551f82598f0e734c26b47147e29665ecfebccab4b4ac9236897f7f5aefdc5b320a9ecc70608b703234e89bd0c339817308379d1d8602ec7fc7c09f3f365633fafc0a2fa9534e48457ea84f32a243fb0d6a40a7915a6f56b1aadb5e30009b4be1a8b86d7b16878c3381aaec102f4661aa2e15a9d705e94bec5aa16a5670c8f56945ea713ce6752be9d4a1c27d816ef7a4ceb77345a2fdf359ad637e8847365de4d45eb04dd0e376282df33147c139696de374c4b37eb04f3be8c0f52119ca02fe3169d603ef6fba12e1df189a8fc3ccbe813516fd5f9c3d3dac73a7ff8b4cf4f58b5a77dde8659e5a71aab1c36229a55de8ea5a5cf0cd3d21d98d69f6bb46e322a9ad67762f1fc0516cf5f562b9eefc2e2f92b2c9ebfae7e3cdf8d11fb4643ec8388c4eed109e79370f90150469370efd549e69360be4dc582122cb5be0fe3f19d8647eb31d178dc8f09ff5e233c27a2f00730e13f68844f8a28fc418cf78f86bc1fc2b4fe49a3f586885a3f8c09ff5923fcc888c21fc184ffa2117e4d44e18f6229e757d394f318a6f66f1ab51f181f4dedc731e1bf6b847f1251f81398f03f34c2f79c104df89398f03f35c2374514fe1426fc2f8df047220a7f5a279c57d2f9298755da99bc1a1f5e9d224779f9b772095ab6f7d72ad1e932bc1a0b2d9fc102fc8f26c05f440cf0b398f07f75b9684134e1cf6134ffd3d1dc5e43132e0a573b7da2307c1e0b269f3655253f8f18cc17b060c66249168cad64a68bd55ec4fcced2f9dd94c17e6db95745a1df6b5651b9742e8aff2f61fed7d0f9df36e47f323df83b6e0ad1463c5ec672fb9a31c3dcfe154c722d53c9afea24f3f4503b665623780db3fb3a1abb2f9e1ccdee5fc778d435e5f106a6763d8dda75a74453fb4d9d70de6d523f66de6df21616930d0c63f26d0c49430d9227a64743f20e267c3b8df02e33a3097f57279c236c940a9204536edec3f29ec6a9084e9085bc8fe168a2c1f1cc9c68383ed009e72dd2a631a445da2c56ed16e98758489a6b42f27bc4907c8425a4169a8414752bcd8f75c2799cb54c56b0f19337e586afd52f583fc1fcdf5ee77f13162e58e54a64b85a398aef9f62beb7d2f9de86e98b559d16d52b543fc3eca8b5c68eded9239a1d7d8e05b68d2eb07c7640a20d5ad65463e38f2fb0e0b5d504ef9b88c1fb120b5e3b5df07859311f9c6c3934c1f6627ccc2a4a30bfc23469afd3849f62156fb9c04d7ea2f8f935e667079d9f8d80252ff31e6c3448c1df603eef902c05afab7c5c7ddfff87f9de51e77b7827876083acea955ddf62fe666389291ec7ead64ef19daba268f01da641278c7b5c83aa1bb8441db4ff1ef37d47ac3116f77db4ffbb88adf54b90e87eff80f9dd194b5fc1448c551ee7eaa6af1f313fbb60f11df7333df1fd13a641572c85c7358867e4321b8fe2f3cf98cfdd92fb5cd5d2a2f8fc0be673f7e4310d77aa8ae2e7af989f395868837e946062239ffe585d1bfb0df3b9075617537d368be7df31ff77d2f9cf5ff08945a5fe24a0a28894ffc0fcea89e5db4bd3928afec4fceda5f397d7a67b7b3f517cf80bf3a1379653e0211bed4f8f8d3a19f56f4c833e3a0d78936745352df61fcca7be58fa843e552f74ff627ee6eafce407b8961aa58aff74fef1ea633fc3ae0616d308f60f3032edd7896192f34d2567e924f3e6657fc34e861a3ac13c5606187632d4c4040f34145c0b133cc850706d4cf06043c17530b318626a167531c9434d25d7d349e685eece69e845ac8f091f9606e10d74c2794578782ad19860c248430cf62ea6b0b7c352f7ae86a9bb11a6f20853951b635138320d51d804133e2a0dc29b624c469b3269a693cc2b1a635289c60407fa35d709e62dcbb1a9084ed07fda02133cce50704b4cf07843c1db63b137c134f65a61920b4c25b7c624ef662ab90d2679a2a9e4b658129c948624d80e537bb2a9daedb12438c5300976d009e6bda25353119c6096f30e18e8696900dd11c331dd10473696be6718a6ef4e18e799869c77c438cf4a03e7ce188ed98638ba6082e7180aee8a719e6bc8b91bc6795e1a3877c770ec6e88230713bc87a1e01e18e7f9869c77c238ef9906ce3d311c0b0c71f4c272febd4c73fede188f8569e0d107e3b1c890475f4c70a1a1e05c0cc7e234e0e887092f4a83f03cac195e6cd80ccfc76cafc4d4f6fa633c4ad3c063006622658626321013bcc450f0200cc7d234e0188c09df3b0dc28760b6b7ccd0f686625a2f4f83d63b63c257a441f8304cf8ca34081f8e095f9506e1bb6884f7f54fafe7dbed667e97f1749c9d9778ebccd5a958e94c9cd8ae98f9ef6368fe23b0782e4f433c8fc47acf2a0c7bcf46e90c289b1b50e95631203ac359a323155348f97baeae8df101597e3e368596d8eeaca37551cc63625d2a51cc7546048fc1ea04eb4deb046331c91b4c258fc3246f34953c1e93bcafa9e4095806b05f1a3280024cedfd4dd5de0d53fb8034a83d1153fb4053b52761dd3e071976fb4cc65ab39b0c5bb35330d007a701f4540cc7218638a66135e8430d6bd0d331ce9b0d39cfc0381f9606ce33311c871be29885093ec250f06c8cf391869ce7609c8f4a03e7b9188ea30d71ccc3041f632878778cf3b1869cf7c0381f9706cef3311cc71be2d813d3fa843468bd00137e621a84ef85b5104e326c212cd409e68db5930ddb348b308d4f31d4b81013bcc550f062ac5e70aa69bda008937c9aa9e462cce84e4f83d195606a9f61aa762926f94c53c96598e4b34c252fc1ecee6c43bb5b8a093ec750f0de188b734d592cc3cceebc3498dd724cf8f96910be026372812993953ac97cfed385a9446382f94fabb06af44586d5e8d55807cec5861d38fb60902f31855c8e49bed4547205960a2f334c856b3073be3c0de6bc162bbeaf302cbed76138ae34c4b11eabdc5d6558b9db80697cb5a1c61b31c1d7180ade174371ad218afd308daf33d4787fcc96af4f832d1f8009bf210dc20fc4328e1b4d338e83b07cff26c37c7f1396efdf6c98ef1f8ce5fbb718e6fb8760906f35857c2826f93653c99bb1b472bb615a390c33e73bd260ce8763f9fe9d86f9fe11188ebb0c711c896576771b667647611adf63a8f1d198e07b0d051f83a1b8cf10c5b198c6f71b6a7c1c66cb0fa4c1968fc7843f9806e1276019c743a619c78958beffb061be7f1296ef3f6298ef9f8ce5fb8f1ae6fba760901f3385bc0593fcb8a9e453b1b4f284615a390d33e727d360cea763f9fe5386f9fe19188ea70d719c896576cf18667667611a3f6ba8f1d998e0e70c059f83a178de10c5b998c62f186a7c1e96fc5e344d7ee763925f32957c0196fe5e4e43fabb1023fd8a21e98b30c1af1a0abe18c3f15a1a705c82097f3d0dc22fc54ce40d5313b90c2bbadf342cba2fc78aeeb70c8bee2bb0a2fb6dc3a2fb4acceede31b4bbabb0ccee5dc3ccee6acc2cde33358b6b3095df3754f95a2c997c908664721d26fcc33408bf1e83fd9129ec1b30b53f4e83da37ea84f371ef4f5289c904e3de37e904f30ce1d35404273852e1660cc76769c0710b168b9f9bc6e2ad98da5fa441eddb30b5bf3455fb764cedafd2a0f61d988d7c6d682377623cbe31e57117c6e37f69e0713726fcdb3408bf0763f29d29937b31b5bf4f83daf761c27f4883f0fb31e13fa641f80398f09fd220fc414cf8cf6910fe10662abf989acac398e45f4d253f8255287f33ac503e8a55287f37ac503ea6139cedddfe918ae00453c61fc704ff6928f809acdaf79761b5ef49ac6efdb761ddfa29ccdefe31b5b7a77592f9014cffa6a2728203989ec1eced3f437b7b16cb32f8d6c0a659c67398f0581a843f8fc5625696612cbe80b56f6b6499b56f5fc4d260cd54042748832f61826b190a7e19835cdb14f22b98e43aa6925fc51261dd5460244884af6189b05e2a821324c2d7b174523f0de9e40d4c788334087f138bc586a6b1f8169608b7334c846f6369a591615a790713dcd850f0bb18e426a690dfc324373595fc3e26b999a9e40f307b6e9e067bfe1053bb85a9da1f616ab74c83da1feb84f34d27b74fc5f4126c3af909c6a395298f4f31c9ad4d257f86496e632af9734c725b53c95f6092db994afe12338df686a6f115a672075395bfc62afe3ba4a272a2bde731c11d0d05ff0f63916dcae25b4c722753c9df6119d28e69c890bec784774e83f01fb068ec62188d3f62b0bb9ac2fe09abcd7433accdfc8ca9dcdd54e55f30c939a6927fd549e6e71ff748054682f38f7fc3f2ba9d0cf3badf31163d4d59fc8149ee652af94f2c09f64e4312fc0b53bb8fa9da7f6392fb9a4afe07939c6b2af95f4c723f53c9ff6192f34c25f3fe1dade47c53c9314c727f53c95998e401a6926be824fbdb7e1b16293531950799aa5c0b933cd854726d9d649e8d0e31cc46eb602a0f3555b9ae4eb2bfef771a32bb7a98dac34cd5ae8f491e6e2ab90126791753c90d31c9bb9a4ade0e933cc25472234cf24853c98d31c9a34c2537c1b2a4d1865952534ce531a62a37c3248f3595dc1c4bdfe3d290be5b606a8f3755bb25a6f68434a8bd3da67681a9daad7492796b6537c3d64a6b4ce589a62ab7c1484f4a03e9b6588138d9b0406c87693d250d5ab7d709e7cdaca986cdac0e98d6d3d2a0f50e98894c3735918e582cce308cc56c4ce599a62a77c224cf3295bc2356bacc362c5d3a6382e7180aee82b1986bcaa22ba6f23c4395bb6182773714dc1d63b187298b1c4ce5f9862af7c054ded354e59d30951718aadc1353792f53957b612a2f3454b937a6f2225395fb602a171aaadc175379b1a9cab998ca45862af7c3542e3655390f53b9c450e57c4ce5525395fb632a9719aa3c00537989a9ca033195971aaa3c0853796f539507632a2f33547908a6f272539587622aaf305479674ce595a62a0fc3545e65a8f2704ce5d5a62aef8249dec754f2ae188c72431823b0e6658561f37224a6f11a438d47612d9eb56968f18cc662709d690c8ec178ac37e431168bc10d8631380ed378a3a1c6e3b118dc370d3138018bc1fd4c63b000e3b1bf218fddb0183cc0300627ea0473f707a62238c1f29d49580c1e9486189c8cc5e026d3189c82a97d701ad49e8a99c721599ac38d8ff56f67b0d16c362bf6b7f00fb6fb5fe1ff5de01f04c0b7fb2ff53e09b6fb2fa8743996ad6325be8b19acc47fbbd47f52cefab085decf4cff6db12771adbf513f971bff660ce307ba17b28ddeb5988df3be0ace94a810dfc637f70f8e1758ea6fb91f7e13e897ef8570618250f0cdfad77a7f5700df67f9c71b489961a973fc239e8b23a59d6918f54375d477a9a43ed3e330918d62fc48eb1236c5fbbf86adf78f135826b40b5896f96f16b249debb225fd0b44a7ae5be0b9dbce0197439d23fc8214ac8a66321dbac0bd9502464b3d91aff0089a5fe353836826b5de0fd157cce89ab31010f6050dff1832656317ed44261c4e3b86760213a4c17a2fe488830b6e1f85aeab99dcce20796a72f1433b1501cae0bc5cec6a128408f984f5f986661613a4217a6218ca1f944dcbaa6307e20c7724fdf722ffdf3834cf8011e89f39874856736169e2375e119133957e0e10bc783fe8812dd793de90be51c2c9447e94239d0c8128b7d5b5c2d5c4d11e14a149b514232170bc9d1ba904c222c3bf9d37d7c6f7898822377968a7c725fefca73512e271d65d73c2cd4c760569a38d5adf2e267a11742ae7fa1c8f393a538fab4b83b16ca6375a12c21ae17adf12c9d1f995426ea3ddceb208617fba14b9d56a2345d1d6bd803e3749c8ed3ecad567f8c92835787c37c8cc3f1588d2e71aa18e7e7df2bfcb49b9ed8ad6e2eb72716b2137421ebaa846ca4e767b99ffbaa35d3125f93356c49154de3f5f4287a2ec0f43c51a7e74845cfb89f30579ae4db608557ff5fe2e720b8a6f8f374e5487b61e13b4917be3c257cd032d438192fe224d53040595142b0100bc1c9ba10ec9a520c8df4d269b16827e84ab8e831543deb5b8485ed14ac56a3f7538d9b223f27ab5a6b4e45ffb8ac282129c442b2451792c111ec2c7a58f4d2a2846631169a5375a199c0b0e3fde4b186abfcbb95d50e5d74e951425b8485f6345d68874788bb9949f308ca5a463116aed353b14958f299dba45e5a94d09460a1392395ba42b804817921b72d5e2fdce8b701cb12d4fbc332d257469562213b5317b28929e5f0e3fdc3320b45cd5096c441fb5cb619b666b95c8685f92c5d98f10344619a09d79556a6b9ddba04d3f86c9dc6c322e48961bdcb907e84d47b1da2846a2916aa7374a11a9d811a783c774857cced8d85f15c5d1807a031c77bd3177b8e645827f96dcbb1bebebadc30ddf9f9322c1ce7a5d28710259fd89a39c3722c94e7eb42999b729d306a7dbd7a35da1598f617e8b49f19215fc37b7c924b48cd4dba627025c6e0c254da5c89ea1d51e3b0ba39c62a2c0417e942302aa59436d373bcd8d7a7d0e7bd755b5eabb1105e9c4a9d37511c45abf3a6bb47691f2c5c97602336a9e51ed14285c75675c2548e85e9d2eaf7d124eb39ce648e5f8185efb254cab52839255e3ad38f88aec14279792ab57c9abe4eea5ed0b55898afc02c375a6958e0d7a4790c17f95fa55a1aa62b4ed761e1bb5217be795b394ea9637b3d46e32a1d8d714969c838e6f167d738d7062ca457eb423a36a51c79b23f86ceeb05d2a2f19e884cd5123662e1bc2695d6a15a868ef6435a35f6608b2f95e7e92d5df7c5c2786d2aa56bd530c6db53ea6c0e55db59dedfabfde7a985ae7afd66fb61e1bb0eebb74814bea01e14ff20f55235bdb1b63f16aaeb75a19a9f66cbc4d25f54f7e9657200c6e4061d931d93d6a382d656dc4af5d61b45c303310d6f4cdfacb0406bf896c7ee5aa61bcfae5eae7810168a9b74a15890a650047336a3480af7a455efcb285c36615c6ec6caffeae9947a5f00d57ccd83b190dea20b69df6a5940e2599bd5afbb1c82e97eab4ef73d2a754fffdc1369e3d59fa3939e11f6433122b7a5d25f35da0f6b102e9973cef29ea5363e9b9e1c69331682db53a9a7e9eba3a9d4bb33d94b701816c63baa375291da4c88eab52caadb823a1c0be39d58df7794910aeaf1892330edefd269df8d251fa1e5e98882f39198a677eb34ed9224bd986b59c7fb89c51a787f8ef565f3d1e8697e0cf0bb0ad6b793f7ca8fef202fee5399c7f609e5c7f1e7dcff155efc72a2b32a73d35e2c3b89847bb2823de6fd7fdd631cde1a51d18b952a1c822f97fb92e33dda7cd5c1783fdf0fe6d31679f793fc19c56bd8223ee7cffb49160a5db9d207942c3074c9c3b4c0fbe1aef8ea9422bf8785e7678b3d0ba82342246579a479b5789b0be9bd3c56db8858cdeadb9987b16735ad29b916f771df6ae86da85515b23075e8740f04c859e8b1a6decd42806d250b16eaacf2451688ec30a9af30efd3f9dadb1720db3849c5cd0699824e5c1bdfd482c2a69c05d3232fa8cb589d5a59b93c36eea744d6d847c66306d6357713f90b5f19e6022eaf50abc4f50025aef63eae852c5754c3c39636dbf3a55874f04cf08baa623f5be00db43c27405ed3330ef241faa41a5f4d37972df1136789ef3c10eb86ed1d39298eec213b6daf9f1320bb748e837c983ecf9320792d99ab50566977e54ee05ade2a8eeb114a5cdb698b083e91bfd491d27411281e1ea544d5326459811223bd0f8a8422e184e902ba6923e2e81ea344b7bd8f6e866f5581e74b3485c268ef09e7b1cc0978bf8f8fc37b9c125e73ef46ce1155abbbf1558bae94a85deac5b13d4189adb66f73c1305cb92379d9a6e171384fd29792f11ada04bf671ae6662ee09a36238eeb293b6b67f94e805cd23d0ef2694a900d4320799f57a9efb828959059006a13c8f49fa12f312528583773b731b5a8200eef594a78cd58d59ada6c56e1e39be98f09bb6371d78022e1394a686d357534bc7aeb565dedef097188cf5397abb2aee66e1ded03d041f942e6ca556e7bb0a11e1f04d795ad2e802c9e1307f92225c8063ec8b1fed8c45adf7b973ac4f9f896c4f4127dc1c07b3bc6f85e631bbfb800ed83dde3d05ea6ef22c212a90ba85e681047f50a25aa7a3e2a35df7201d10720a77a957e6c003699e27316b82877907d3f3f8eec354a648d4209d0cda6fa33fe404a9d5a8a70752d40f5c7dba311c66706f01adc58b681adf69f068d2b65a64017cf89759abf0e47fa7312540872521c49cf49a1329b13a173322749419293c2d04d8ed13899c9d7f9465fe7795fabfd913929375373220e3de4a430f09f9364e4272761574d4ee41efd9c6ab72f7322f785e4a438009d933467cd49a1a354b58b68ad981ca4ce9093725d3527c522353ed54c3f452c974f357be3fff35960b97c16d89b1cc254412128dfdfa22edf0bd19450a57c6f5fc5bf196295c3525f9e2cc7753ed70b95f47d52094c754a7b7ee899ac1abd4d896e0791f482f9922bd97296fa9e510bd9403ab49ba9d05e118ba37d87126d6b0d5a7cdaee4236b8ea5847fa70b6a4c2c98f409538dfb509e7102771760238dfb309673f2771e683c4febe4d38f39cc4590a707e6013ce7c27719e02707e6813cefe4ee2bc07e0fcc8269c039cc4f93ec0f9b14d38073a89f34780f3139b700e7212270315a54fe91b97bc95be8aadd77484b8878e4b91e83ecb842596a1b608d5e7f9246183b22115cecf00cecf6dc2d9df499c4f019c5fd884b39f933897019c5fda8433df499cf7019c5fd98433cf499cc7039c5f67623a2806339cd007d0a16c4b857218a85f7e630bca7c2751de0d50fecf1694794ea25c03507e6b0bcafe4ea26c075a3cdf51cf858cb778467a9f6d14a33eeeb5755a8302e6fb4c2c6e1ce4fd2fa9dcbe892b5cecfdbdc17fb7da9fb9c03f70cfface01207fc8c49466bce2839d7950652177fab036a1c2ba1460fd3153cbbab91596f103b23263935ba8e05d09e0fd4409af0980b7749b49d247037c3f6fcdb2198a234dc675a850d604d59c5f323195b59f48c6e599b2c293a8d01d05acf0574a742d04ba2231cd4add66578694d4024fa3c2580e30fe96a9c9d4db8605ae00e87ea744d72a890586f341d2ee5bb29cf07f00e61f36c11ce420cc6f01cc3f6d82d9df41985f03987fd90493b033820ce63700e6df36c1acb2939c0330bf0430ffb10926e1c40032985f0198ffda0433d741989f0298ffd904d3c546e2e70026ab6111ccc10ec2fc0ec08cd90473888330bf0730b32861ca157bf9deff25a1553a196a446ea642f82e4058831261b2ceb4f0def484850e59b7eeafa033ad26254ad923d42f3466235f67c822c912f57ec0226b51624c3e6203056668c4a62715d6f9006bed4c24f4d40a1e176b977900651d4a947c443b5cdc702b2ca36c2c928d18d605d0ea6e0d682e0eb3d601d0ea65222f8c9a1392ceee21cb0baf0225757d1bb1924ee523c33a0b606d408935fa1265c22109b239404dc1c4a98636e11ce224ce1e00e77636e1249da04f86731c48ec8d6cc2493aa39c0ce70a80b3b14d3849d73b90e13c1fe06c62134ed2d171329c4f019c4d6dc249baf48e0ce7a70067339b700e7412e7ef0067739b700e7212674d50516ab135bb84c38b9b083b3dc8a6aa0e0696d9d21694f94ea2bc01a0dcde1694794ea2dc13a06c650b4ad229306428df00285b6762cc277f9b1cf3798fc531b6d9ba633ed82a1dc2a98364ddc71702ac6db766420f8ff9b838d5a01024f4769428f99af5f0f0c568b64ad020c3d6880a5b4d6081ed29b1b5f12d902ffd0cf6eb85bb05178871480e95efb53a95ad67c136b5ee55ce3b01a01d32317f28d58d1c081335d9360e9300cc1d6c824938b38d0ce66e0066479b60120ea591c11c036066db0493b01a4406732480d9c92698846b7bc8604e003077b409a68bfb088d03303bdb049370b20c19ccbe0066179b6012ce712383d907c0ec6a134cc2b53d6430070098dd6c8249d8e54606131e1ad89d12665b0173b9e788630c1458ebfdad4e69cd506227ebc56c03467c72b6e6a21475008d1026590bbd37b0cf1e36c1242cd3e9f646073077cac40a1fbe3dc40ae179a17fc299eb7deba300c29e99181dcff50ba044c7c72d14b9a98bbb502f00387bd1f768c68b9fa52cbe81133e4aee5ee1733fe859ef6d1b50174bf3dd00d03e9440f9928ef05005e19965648364b54082ee4b5d5e978ab19ce20483121918ef21b3bd1e00662e254c79005c70f6a2bc8e13893a7c925e01835bdf11173c64680f0168fb65623017ab578607735ddc05665780328f126570d6ea6a301639ca6351eafd908e3e0ea502d71580cbcfec287845655dd2bd3a634380ad7f267245d8fb93fab198845d6b9ba9d0ae06959d019468eb7b37bc104972627dfa90b5a742d61458e3c04c3408531fa875b173f71d8073904d3849f7c122c3f938c039d8269ca4278992e15c08700eb10927e9d19764386f033887da8493f46056329c47009c3bdb5b31229c8e4556317a06548c8651a2953bf4e72b8033d0674eb62bf5cdc02e8753c26b97b25d86f7c7229c39b4364655510216b98b8d5009671091417d1b40ddd546a884fd4364505f025047d8089570162619d41701d491364225ac4091417d1c401d652354c2194664501f035047db08957098970cea6800758c8d5009877ac9a08e0250c7520ff5c67b3f27790ecb1cecf9e463c812d7384a5c9d5878aa4178286306db562712fe09ec71bced805d9c2c5317ccd49c90894160acf7293c08ece2893fbb025b2dd89af334c32849778323833907e4acbbd904d3c5e393e60298136d82e9e2f149b300cc4936c17471e2cc6c0073b24d305d3c3e69328039c526982e1e9f3403c09c6a134c1737b82f0030a7d904d3c5e393260298d36d82e9e2f149f300cc1936c174714fa33d00cc9994305b0a980319dcbc2c3c2ddbe513c9cf0320676562ac9dcf76975233048f6cac7d1580373b135638601bb5c2b300c8399420e5267ab2f38df7a5af07cb56b6ad3ecdbb403fd15c4aac7c096a2aeb83c8100ea342d81d58e63c4a84d9ac6aafe51c8fc7684fd018af2636ca7358e1390c9ec13de2467a1a2ca5b55032bcbf010bdd9d7e394bb084aad4872b652ff5d42103578b0a1c0376b907253875e9e95adf0acb13d6295d6c38fe002c713e2550756f8ea0080af66b0d430d9f564586f4242aa413c188cf9e999e221be493b33d75782b485e4779cef980db3acf2d2faeca69d1920d07ef06d02ea044db8de916ab8ef620f2c907cb3cb58afc323ed85f2d7c745dfc8dcb8b57df0439ed5e94a81b252ca208d7a7d7a7429705d02dcc4497476a43be039c2ca0c68124bfc826982ef66c16009885996870a602335cde13164b64c7281e032a518b6dc44a3adc46867520c05a9489a93358d7b1fb9b43f6044552b1bdcbb608d16e262bed81959650a28d7e86aa8bfbc735004554a94d38873889730780b3cc269ca443c36438db81c4bec4269c794ee22c023897da8433df499c87029c7bdb84b3bf93386f033897d98493b4f14986f35d8073b94d38073a89f37f00e70a9b700e7212e7bf00e7ca4ce04c7d8f25174f70799fc571aeb209677f27713e0170aeb60927e91203329c8b00ce7d6cc299ef24ce3b00ce729b70e63989f35880b32213fd9e18cc7042275c9845368a390194ea6b6c4199ef24cafb00cab5b6a0cc7312e56900e53a5b50f67712e528d0bfb99e7aae273f11831f58bb7e6bccf5246bf93403c5cd864c8c5e463fca9b707d1bd929050701ac1b3381159ee232cd73ce0516b06ded3497bd00d67db766de09c5915a28d96c90daa018da2f13536bfa3175df8f6d672dc749c02ef7cfd48aa20cefde493665f60600ef804c342039bc42740e67866c916c9aeced00e7819948d8d8c499701e39d0c945ffff009807d904d3c522e75f0073934d305d9c1afb178079b04d305d9c1afb378079482616c204e537df98afc8af9ccff5aa464b7da1fcb340bcdb55f59701d243b76ec3120acc50c3926c5aec5d00eb664aac7cf1608527807771f073daca7d51bb791f7011ee25f11d00b8c328c13501493ce825e2823254ab244bce8f027c87dbbbae8db0f021abb08f05bd98476ccd99eee192dcc5eafa3060a54766a25204bbddc6566e52319ac5f756707711e04e00e6519430d5e5d6452cf9d61484d64906f438d0e576b46d40092b4364406f06408fb10da88b9ba72c03408fb50da88b1b40ef0f801e671b50c2e93164402781cad2f1944075e712a4325a495830918d567605567a828d505d1c02ee01a09e682354c2028a0c6a0700f5241ba112165264503b01a827db0895708b7d32a8b301d4536c844a38e18b0ceaee00ea161ba11256a9c8a04e06504fb5112ae1d6fb6450a703a8a7d90895703b6932a83702a8a7dbb4ea6d30e586d2647dfadb83b6d41936e11ce224cebe00e79936e124ddee9c0ce74490d8cfb209679e93380f0438cfb60967be9338af0738cfb109677f2771be02709e6b13ce014ee2fc02e03ccf269c039dc4f937c079be4d38073989b31ea8285d908951fad45671e43979c4ce93c0362fb409a68b47ec7c0d605e64134c170f19bd10c0bcd826982e1e327a118079894d305d3c64f46c00f3529b60ba78c8e8b900e66536c1747102e31900e6e536c17471bdd15900e61536c17471bdd1b100e69536c17471bdd1a900e65599581c1375690c6925896c71cc1300ebd5366225dd47890ceb3c80f51a4aac1d3558f5fbc78f179fc0d14dd2696233a9e01e0ee05e6b335cc2ea1419dcb500ee7536c3252cc4c8e02e0470afb7192e61758b0cee2e00ee0d36c3256cff93c13d1dc0bd9112aed9812884bd019ba9d09e0cd0de448996af4f8e1f0b3dc6bb2ef65894f96beacbe8c091ad02e527e1497037db34c634983289938d313502634cb7d88473889338bb009cb7da8493740b6a329c63402e799b4d3849fbf3c97096019cb7db849374476f329c5b00ce3b6cc249ba7d3f19ce8700ce3b6dc2497ab80419ce0f01cebb6cc239d0499c3f039c77db847390933863a0a2740f25cece1a9ca9362d619734e1349d3e54901f01367baf0b900927969141be1c40becf05c8847da86490db03c8f7bb0099b02f950c723300f9011720138e6391419e04203fe80264c2f12c32c81d01e4875c804cd8854d06791580fcb00b9009ebc96490a702c88fb8009970e20619e49300e4475d804c38cd9d0cf22600f9314ac8d10e6c737173af9d01cac76d4149da874b86f27680f2095b50928e2e90a12c06289fb4052569573819caef01caa732314133fa69632eee3575398b637d3a13e5bcdc65923be69faf667cbe4aeadb74133670c926685c066cf7191720133670c9209f08203feb026417379c3f08407ece05c8849d8e64905702c8cfdb526b20dd0988acd63003a07cc11694a4dbd690a17c16a07cd11694a47b0590a1bc04a07cc91694a4bbff90a19c0206cd5fce04ca22a63f012563eb06b650a13c85c551be4289b29940c9ad2e7cac6b868e3ada4c85703340f8ead64cd8501ca93592ad73ad01f2c8d728517665e19ae66aef376fcf07f618d43467b2316ca257bf2cf444958867d380bb91de574b69abf4c3a8407f0c40bfee0a68428b2603fd1fc81cde70053461770b19e8daa04ef0a62ba009bb5cc8407f09b28eb75c014dd8f94d06ba23b0e8b72941b74852af9021252dea4ea3c2f82ab0d7773251c3edb7cdd570f70585d8bb99b044acbd15b744c2ba009925ae0618dfdb9a0d858ced2540d66c6d0ff2c6f7b7eec0201498a199af643bb7cc0416fa0125d696026b7fef7f7c5576819f6796b00d99ca31c97aa84e06203fdc9a3d54e13e011777b21c0d507e4489526e24965ba5fcde76ec720380f93125ccbade0d77cc67f48d11b3f7c87091adceaa0f707d42894b6efc21db3a25dab3a1b15e7c178f8e6d0caae59f66a2048f5a7e934e3e232bc1cf01583fb3112be94c53ba8a11c0fa392556b9ea15af6fce0e25fd0194d5f7865438df00f9ea1736e1ecef24ce4700ce2f6dc2d9cf499c5301ceaf6cc299ef24ce6b01ceaf6dc249ba173019cefd01ce6f328113835975e32fc2e6255915bf19e849fa9f4d38873889b327c0f9ad4d3849b75226c3391ed43bbfb30927e986df6438f70138bfb70967be93382f05387fb009677f27713e0f70fe6813ce014ee2fc0ce0fcc9269c039dc4f907c0f9b34d38073989b316a828fd4289936fd81d781a7cc6077dc779d772ffc96ede875c54012bf5dabdebfd7efa72364d7c117441bb07978f8a49b8bf52c2edceaa0ebf85d729f1fefb15de0fff9b6f6cb0d61739b6b27f7f964f2d0393762753c1ee0f60ff66cbc206d29e27b2419141208ffddd1694a4bd4e6428af0328ffb00525698f1319ca3d00ca3f6d4149da534f86f27580f2afad3b6f09dbd080700b2eb20d0d2e0345d0dff62cc171f17ce845c042ffa144d998c5a7db94f8d5f915999a5e43362d7125b0c37f29e1f1d1053e23099e6152263e77afbade1660fb2f1353bc529b2d97efe431da2f0298aca645305d9c7cf8128019b309a68bc7683f076066d904d3c563b45f00306bd804d3c563b42f05306bda04d3c563b49f06306bd904d3c515f1e70398b56d82e9e231da170098756c82e96243f16300b3ae4d300977b42183f90980598f126617165e68a02e54ddb637596b0506ddea5362ce4e88795b5dd3d11ce06d4089b7918f77bd7050cc26f81b00c4c72fddeb02e90232808694e8f8126b9ea4e12e097210b8c453083e27c348b667c2bd00e376941865ffba4ce0bccfb2acf2f5b6b62fd395a053b81175c22ef45e2df79cacd74c53702f61b70416d998125d27567568822bb1c62faf577a08f9d483d52cd18c7842db249b0f5f03006e420938da526b173be87601289b52a28cbe2c8bb0524f6699cf039ccd6cc249baad2f19ceb50067739b70923639c9703e0470b6b00927e9f6be6438cf06385b52e2945b054098a99e9d44bae3dc662ab42341ed73fb4c54ea5399dd115ed34e68b1646bdad703acad28b1cacd7ef2d9b6b9d9cf8920e9b7b629271d4099dcc972d2b701ce3636e1ecef24cec700ceb636e1ece724ce3d01ce7636e1241d7927c3793dc0d9de269c794ee23c18e0ec4089b31d5337ace2d5a140c8b6d6fbb904549476c8444549425d9a607c8870c898aca2d4128c0f75b405a48bcb0846008bccb605a48b23964d00c84eb680249cf44506f2000072475b401296e064209703909d6d01493841960ce4c50064175b40ba7808eff10064575b40122e262003f91100d9cd1690844b5cc8403e004076a704c9172cae674bfcbef512df09173553cc812bf2d521c3d7870a1f5751e2cba1c4176db5a48bab3086004bec9189f676d4a109170726fa00a83bd90895b0ed4d06b52780dad346a884ad1e32a8d9006a2f1ba112b680c8a0b604507bdb0895b0c7880c6a0b00b58f8d505d3c2ea73980dad746a884ad2432a839006aae8d50095b4c6450bb03a8fd6c844a58f92783da0540cdb311aa8b276d740650f329a1ca6585b9fe6f790d56128df43e2c120af1a7c13c7a3298648b0f5e617198fd33d1d2c747d75d1f29ba06a01c408952ee8bd44f49f2199821771215bc1b01bc8194f0f819ace1b596b33dc9c5de132e70120ba61f2e77d0feb603080751226ccbc29dc77ceef07a51ac84937486da4464567907286a06535b2507baca73c457b7c1359693fd02670d7373d96a36b0ca219408db24a902553dee2197b2ef930ce804304566a86d4009fb3dc9808e064077b60d2861ae4906341f001d661b50c29a2519d07e00e870db8012f6ca93011d0480ee621b50c21e7932a00300d05d6d034ad873440674670074846d40097b8dc8800e014047da06d4c5e34976014047d90694b0079e0ce87000747426bae2b893e4db54b8b859da781647398612259ffe55ca82bdba8a432df5d14ceee0e55e4f520ec03796125f030637f371bba3a33980362e13c312a9cd99ebefe4d69123415e38de26982ee6866300cc0936c17471f3fc610066814d305ddc3c7f570073379b60bab837d7600073a24d305d9cb63d14c09c64134c1737cfef0f604eb609a68b9be70f0430a7d804d3c585fbb900e6549b60bab8797e1e80398d12667577e1223d5c916cbedb916012c2741bb1929ea44a867500c03a83126b47a69b46086778ccadb28090efb3edf2b4c2812c0e7726255cb3bd0e09db4c9ba9d03e0aec765626ec564ef35a0d2c36debbb96dcde1fc00c09d4d0937ea11f6839d1c166e086a04736cc239c4499cd900e75c9b70926ed44786b31748ecf36cc249bab31c19ce128073779b7092ee7b4886f30480730f9b7092f64191e1bc13e09c6f134ed22d78c970be0770ee6913ce814ee2fc16e05c6013ce414ee2fc0fe0dc2b133853df6f9bb0c949b667ec172c8e73a14d3849473dc9703e03702eb209673f2771ee037016da8493f4407b329cf7039c8b6dc299e724ce1300ce224a9cc9b6520b27741737f51b0e4af5625b50e63b89f25e80b2c41694794ea23c0ca02cb50525e9dc3a32941d40ff6619254ab98302f7b8d4072965af144edc1b7d8f81826609253c394c8c97db53bd8ff6f6fe2af2ee33b48357132aaca500eb524aac4d05d63c65a82d43675f911db8fc1600b8772600f6dbc600be0a002ea3042837854ead06e95ef1521f94d4cb6d01e9e228793d0072852d205d3c1363070072a52d205d3c13a32d00b9ca16902e9e89d10d805c6d0b4817cfc4d81180dcc716902e9e89d11b802cb705a48badeb9d00c80a5b4012aea72403d90f805c630b48174ffbcb0520d76ecdae33288eb40244d6fb530ba05c9789519bf06cf64099b1fec401ee2c98194c3e7f9d6ce3c7e52c8e733d254eb92ea888a5b217c70027974cff06606eb009a68b4ba67f073037da04d3c525d3bf0098fbda04d3c525d3bf0298fbd904d3c5f2fc2700737f9b60bab864fa6700f3009b60bab864fa0700f3409b60bab864fa4700f3209b60bab869d41f00e6269b60bab869d49f00e6c19430f9d6f71c235c10cd8f6128f5c4c067ee0ddc3e08101e428930f98c0c28d0f5d3ff6e05580fcd44af516ac9dcc5e26767807233254abed1a37e9f4cf792753700edb04c1433a9f55af673b2cc3e0af45b1e6e134c17cbeca301cc236c82e962afe56600f3489b60bad86b79048079944d305decb5dc08601e6d134c177b2df703308fb109a68bbd96eb00cc636d82e962afe50600f3389b60bad86bb914c03cde26982e361b2b00cc1332d1b111bd5bc3c523b8af01584fb4112b69459e0ceb5c80f5244aac667b1112d6443753a13d18a03d99126df4edf25c3cf4ab3158ff788a4d38873889b33bc0b9c5269ca42d25329c6341623fd5269c794ee2dc1be03ccd269cf94ee23c0fe03cdd269ca4e75f90e17c18e03cc3269ca473e3c8707e02709e6913ce814ee2fc05e03ccb269c839cc499052a4a6753e20c46d4f9697f45feb97fa3fddf451e0f3ecf830b2df6542bf27e440dce39941ca144790e3dca5417ebbbb8387a2848e4e7da8232df4994b70294e7d98232cf49940b00caf36d41497a921519caef00ca0b28513663f1356b4bfc92bad82fb333b6370c5907dc6250dc5c98892ee3e89b3e114e5720dbf4e96a80f5225b1239e9042fb2443e0524f28b6d4199ef24ca0701ca4b6c4199e724ca0b00ca4b6d41497a543719caf1a0f17819254ab91b024755c2d6b160e0acc02fcd4bd8864c95e56420378242e7f24c80ecb78d825c0f405e4109b24592c42d434abacbdb6954189f0679e49599b0c721dba83d1e0aecf1aa4c1436a92d58717152f60880f26a4a94dc6b6e87a5be13de1fe95e5f641b00eb9a4cf492a77e0a0a617e48b693ff6b00e7b536e1243d7a9b0ce7c300e77536e1249de04a86730ac079bd4d38f39dc4792ec079834d38f39cc4b90ee0bc91126757163eb498d71f8323b565b5678e4767b4178862bf9224afa33c97bc6b789de78e2f532da7adb4b7a702fd02a8b4dfe40a68c239f064a0df02a06fa6046d36ab9870192bd9a0c66b00ed2d94687976c7715588e626473a46e073afbadf00e4b1b7dad2a7495a99226bb1f70716789b2d28492b526428af05286fb7052569258a0ce51c80f20e5b5092363ec9503e0750deb9355186bbe45c5cdabf17407957267adb7343ddc4f275863a89c9301681d2fbee4cd427d778d5705e61c76a93e3c507705e07699b682615dac100ed3d9468e5dadfd4fadf4917a992d9e9a900e6bd36c17431ef3c0dc0bccf26982e6e8bb209c0bcdf26982e6e8bb205c07cc026982e6e8bb206c07cd026982e6e8b722080f9904d305ddc16650980f9b04d305ddc16656f00f3119b60bab831e4e900e6a336c1747163c83300ccc728617666e151a10a31c6c327d06ceb23423f818e90c75d80ece2f8660300f9094ac81d15c8f044e9789f139e51b8581bf806c07d92126e36abda2b1ad8ed4c36864df4ac956f105d229ec15de0477a1a2ca5cd20c8368e6e0b66ca3f4589b71dd39dd136c317b6caef39dd764e6a3b12146d4f53426d0ca0f26ee6325691a94e67b2add18a01bc6728e155ff8402c29e2832ac1f00accfd2d75de3fb29c09c72aedfbfcf052f674b8517c50e4e6be808603e4709b3650298e3bc0fca7dd1bb79efb948f740ee08403e4f5ffc8cad1ca21bcd5609160bd9323f1be0e57b91f7772092c3e5564a689d6403c98d01d41728a13605c54fb8c29f912288ac427f1d00f862268aa0a80510692f2959117426a8cabf642356d23d69c8b04e03585fa6c41a7d0d0861271fd9b4f06741e27fc5269ca47b2d90e1ac00385fb50927e97e0b64381f00385fb30927698f3e19ce3301ced72971ca8962e18d02b695896287018c6f64a2c3234f29df33006f0b15bc9b00bc3729e199adda20ecdddc4c85763b50357a8bbac619781a7cc62726c213050b58299bcad6fb38cbbd567ce03640eb5eabbd05b0d8b7335108614550d52df6098738c870d6077df0efd884738893385b039cefda849374dd11dd8e0d200f7dcf269ca4b39bc8702e0638dfb70927e9522e329c87009c1fd88493740d1219ce5b00ce0f6dc249ba3d0b19ce3701ce8f6cc239d0499c5f019c1fdb8473909338ff01383fb1b33f9eb04f89ac3f7e3ec0faa94d5d74a4c7949075d17dc8e2383fb30927e9213a64389f04383fb70927e9016464384b00ce2f6cc2497a621619cebb01ce2f6dc249ba628e0ce77100e7579438e576a9d88205889270b102d9949a8f00c8af6d01e9e2cedc570190dfd802927068830c643e00f93f5b40bab8ed4a2f00f25b5b40ba78744e1900f99d2d2009976693819c06407e6f0b48c2ea0f19c88b00c81f6c0149b878800ce4e100e48fb68024dc5c850ce42500e44fb68024dcf2870ce4c500e4cf99e8bb8c7ec81861d14376c8d80100eb2f9458e50af7d46776b8d7bfde0a7404ff6a134cc21638ddac0e00f3379b60ba38f2c300ccdf6d8249d8122783190330ffb0092661014406b30e80f9a74d30095be46430eb02987fd90493b00d4406b32180f9b74d30095be664301b0198ffd80493b02d4406b32980f9af4d30095be86430b70730ffa384196d176e17373fcd032859ad0cac0ae287874aa9195a524576d2e5312c0e2f46096f3bef662de3331974fb73b837fdaa1d009745094e76b185f77ee70a6f1b4784160290352841b665e16dcdf822a9f5a22b2d9c27c2ee35c27637d9c65037811cb1262552dd52bf6d7b13be1160d54fad4c24fbc1db68b2bf0224fbda9420e1ee317027c30c0124db526f100058871260b4a3955ddc577b38405997126507a61e40927a6e4908962cb79c0ec0d6b3152c61ff2519d8a1006c7d5bc1bab893f11000b681ad605dac38f503601bda0a96b05b8e0cec9d00ec76b68225ec3c26037b0b00dbc856b0841d7664607707601b53826dc3a20e0bbbb977c264d0286d4209542e670976d59ec4e47eb113fc3d68467a774542a50cecab4d86f375609f4ded6959b97894c95880b21975f7f2123f1917fb09ba1c6cc25be1e00cb9da005cf34c24e9d467c8b93847ae05c8215bd884738893387b039c2d6dc249ba949f0c6701e8afdfde269ca4bb6d92e12c07385bd98493742f58329c57039cad6dc249baf13319ce9701ce3636e11ce024cecf01ceb636e11ce824cebf00ce7636e11ce424ce3aa0a2d49e1227bfe18ef9b41af730d563714c1d2831259b5aa88e65bad8e6ee056c6e079b60ba787c681f00b3a34d3009872ac860e60098d936c1249c414c06732700b3934d305d9c43dc15c0dcd126988403676430bb01989d6d824938d3830ce68e0066179b60ba38d1ab3380d9d526982e1e995c03c0ec66134cc2794764309b0098dd296156ff2c40421b255ba5b12fe8cec8b1112be9840332ac7d7dac756a29c2c755113edaefc3e1bd3845befec138771f369ef1a1d912161c62d3874d62c13aa0451e90f9de4fb4b858e0fde89ec7fc255b63d906b6da7fcae515fbb257786fb966152cb78be7a407378d46c234726275bddf7c96fd628f7b993fcda1cc7b5a3ff494eb54e84bcc8935f3de14fae15cc5d6fb382bfcb72bfde910f1037972620d422ee1d13d394687fbe4c41a8524573db43727d65123bfaabb28be545dc7a58670a4f7dd46169cef94e31b129754eac74691ffaca186759988eb9c24abc672627cfc7d7d95e73359fc90d88a4aade393532684260a54f8a61cf3170a70dbe0b1369995f83158ecc771a197a20a3d0db9fbbe5d3d67b181deaf6092569fcae9597dc479562bc49d7c9e5c26b7ddc4d276e2061ad3e75dcbd396ea928528c828f8f7a53ecf125f6a41d290260f1f9e821b268895bedd785c6ccbe1ef09e33dab6f771ede7e69b0bde41af5e23e671195963c595708d5929e2f6e5ffcf25c7195af5cb9afa6897df352252c6fa9ef6fdf1c3b6d3b7d61ef1db6ed1ed5b5ede81af5a1b4ed405a309357913d3e85d0e9e3410d73dcd56adf1e0a2b6d2148e94bbcbf8b5320d1c19f83884b1be9dd95f9615dea4b5dc1e43f5e66063fadfc327fb6f76db1a8114df5dc17fbf2fef3fed5fa7f3fccf0225bcd0400 serializedProgramBytesString: - serializedSignature: 1c8f6d872ae4deb8ab9ef24fd203e0edb710fa4671e29a498cff619d50fb4725dc0be81cdcd6f74c3f61387f8548c69f7c8071a9ea202878b4f994808f0b6800 + serializedSignature: b5ffb9eb547e85e6f7df9e030b3122131204681f80fe5a29a0825137dbd191eef08ac72a53e50f2d4a59c65162054370eb9cea53f2a95ed8eb8547a4dba5750c programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/588dfd6e114e3fb4eb0d10e4d1ae5e80.asset b/Assets/SerializedUdonPrograms/588dfd6e114e3fb4eb0d10e4d1ae5e80.asset new file mode 100644 index 0000000..19b883e --- /dev/null +++ b/Assets/SerializedUdonPrograms/588dfd6e114e3fb4eb0d10e4d1ae5e80.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 588dfd6e114e3fb4eb0d10e4d1ae5e80 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cc5f5f8e7dc7bc1bd61b99fab64d9966d30e06e0bdcb064538cb16549b685654b5671a3f7667a07d37b2f31094948270924b42424210909294008252109040204fefb666774eff6e6dddddeeaad66fdffc91f6bb5eded9befbce96f665ae50be72736c1f9b55aac14f3c424b14a54881ab1cdf96b9e73dceafc73cff4f515a2ce396e727e9739f72688bc0c6fc2cf98587fe777b173562f1a9c371b45b973ac92f74b44a5f377b1f36ea5730657373aff2b9da7626d9c975689f962b95826fac5fa6410b15abe54afaec5205cb10eceefb962b773b7522a051fc997b7fa39bf4a9c3bf5f2de564769fddc1ab156066bab73afdc79a74e543b323748891dee9b28e41fc23df456c73eead8cbf9df51fddd5afddd41fd8d9f6fab8e7db37cbe1f7aaf23fa1b08dd96e6fdfeeaf889f3bf9df3673d3a8777df53e7035c79ad36a79135481d07abe31025b3210bfddbabe3c119c29b4ec650242b1b661dd471983ae6297d1b73fcfe0897516c1f9207c7ff227d86a16f7744f7e1383c40d8753c7eea89c74fdd786c75bd8abf37d4f591ea385a1d4729d9ce33bdee52d7c6a8e3c00c7ac5ddf7c40c91b059e79bad6bd5f958751ca78ee3d5f173a5eb0e741e54171da713d4f133f58d9d86ebfa79b8bf4b9d4f54c7499ef8ca57cfed56e70559ea938dfd699dfea7beb1079d3b1cdbac4f234bc7fb179e78ff42bd7bb9cbb1cd539ef060fb33c99dace49d9c4338bef484e34b5797b671cf739974d0f20bdda3cc5541ee29e81ce45eed336c6dd47bfbd5f91491396feb9dc5bd22574e07cd7abafb9d76bdddebed6689645b9e96414f15b7b15872dcc65418da552bb93afc33dcf398e67c309203ef9fea91dbca23b79592abf388822cf59ca98e3a7c47a8e3e1a2291d8fd23672a83a1ea6bed95a24e501312df390c4bb7d2ff7c92d5d1ccdf6c4f540f5dd361964eaf7e7a863c72c9fd7cfcc0da0f33c75ec94e5373ba9e3fc00dfececda42870f3cb6303d83cc052edf0e0d4807474e479566c542755ca48e8b15fff61e3bd0f581747690499762a58b4071e0e8d2a9873a3f521d8f4ad6452cf1e8745af3e9146bab649e8ecee1d84e5d3f039d83ae2bdcef747a46c95caa8ecb3c3a2fe7d359281dba7641b691cd7be9eceb68377c9d0b5cd99d4bd5f5951edde625f4ee301fbdabf5c8263d28d9b18e1ec61d950e9aed2acf7367a27338a27245feedbcdb45db567f741dde3d0b9dc3fd922c753d46a4da2cc841618da9b4d945e5ff5d747c1e2b52d39ee95d38a2bc44fe0df25e53ef1d2752cb31fd1c84ed6c740ef7576719b6e30dfa39dfed3a3bcdbb6b4472fe3327610fed5f56d74e50fa7411c9694bdbebd0c43bb16a756dad7bde5deb72a27aa72be2d2d5d5af9b2e4fd7a963b93097b36588834a8f4eabb0e9db835f55d7d6a7f956857a461f75b88f4ec8e9dc5fe9aef3b14a919c66bccfc2b58dea78923a6e55c7eac4b3a3755e52a58e5b946edd44723d7d33ba0ec7eeeafe39e81c9edb9490dde759756d9b4757537cd678c26eca03d2d959adfb6c7f651762bbcbb6fbd31eb9278af4765be7ca89eb764dbd2ba7471b9f721a5c3963755eb0c33defa1f5d1ed4ddd46516d91580f9194970bd5f688f54476d3035d8367cff5f0cda45b3a8e27bb7a36d5ef7519aeeb918723d9bd941e0725e2aaa9ceb707dd83f3c3507871f8d2e9a29f416926edf35dd5f1f400e14f77af9d3aea7cbe97486af3c873c74e0e1a9c46d6d9c268a7bd74fbe81cf77e4fdd36d571abf3b7de09d64db6749ebad707855bd9550cf7259da9aef543b6a4c376be277ecef3dcbf00c930ddbf10e960ba7f91ba7ebeab7b2f2def624f58767a74ed2b92f219b13735acf219fc6d2d3b9bb8bc44bdabdb4b7bd039c4cbdb69645d6a8ecbde9fa8f3cb3c71a9cb6c1d97030c717985ba87fb1846a96b830cf13b187118a0ee5d49c4a5be7f15926bba7f35d2c174ff9ae4b8eca3eb71d7127189f5c771795d6a5863833cdfbe308bb8bc411daf574753bdf746751ca3e45e9485dc9bd471531ab9fd3d722fce42eecdeab82f8ddc5b087d73f99eb67595c7c4741fed1e74eed86ddf57d2c8ba55186dbd9fee37b84d24dbfaed22d9d6751f2fb68f3bd43d5d57d32ce05a9e48b5f561c84e74fdeb4ef40cb6557dff2e24d774ff6ea483e9fe3d22c9d6fbcf56d7ef15665bc7fa635bbf2f35acf219fc6d9dd7a78bcbfb3d9c35dfe122b99d33dc8d9ffedefacf7691be6c7cc0953f56b587c5834ade08257f2f3a87e348cf7747badf1da0fabf066abdbba8eb13dceb03f418c343c258df1a50ea79ee61915c9f7ad4c3ff318fad8c4ed85b53581e41f770d8745ad2f58dc7d5f5388aab31e89aa9ce9589eb13eaf8150f3f9d075f82cee1b92791feba3cd37d97a725eef5d4f5771dbf5d901e5f35db8ad415c599ef3a920ef3d73284d94f9e345624e749635d3b1894ae7ff69bea99bd699ef9963a7e5b1d95bdc4c689e4f68b1ea7f88e3a1fefb9afc72ff625d8f7cd437a68d9f0cea55984ff7beaf87d75fcaeface0491dc27a6eb85a63222d77a6caef7ca944e1393ed479e3bf13044b78db52daecf601f3f5047dd17b341c99be461a0c765d2f56765fa569a70c50a44721f82d6ff87ea5c8f035da6ce0b3dcfabb10af123753ed9f3fc54cff353d5f33f56e753929f17cf223970fe5c226c5217b8f613746d8abaf6d3049fa10fa97bd392bf2d9e17c9ed3bdd862b52cf5d8edec30cf47d5d3f9dee09d30c757e253a87e34c8fdce91e56333d720ff1e8fb823aea7e829712611cff017a07f1142f26cb4c6bd3cf291987aa77ae42e78e4d0f4d57ffd7efaa3190d8614ac6d5e8dc919197e7ea9b379596153bdcc36f16ba0ec723d4fd6bd039c84ed7d6f9897a76b6276cb3d5bbcf64f1ee1c759ceb099bea57cffbdc0ddbb01e6964fd4c1d7fee89436db3204f8f5be078d5fd3e2faaf3794a876bd1b9a3c33055b712bf1066db9ee379ffbae4f787eb7255d77f7fe9d16d8148ee0bfbb53aeabe3d834d8adf78745f9878a649bf5f79f4d3e3245aef45eabbd7233df475382e16c96594ae0bfc569d177bee17abfba6b1f6746944f711ff5e1dffa0e41d99cc25a6c7564cf9f4ebeaf83b91733e2d0e72e36b84eaeb1ba1db7b7f5247d447d654061d94b8163b4ae97b033ad7efc1f91275ff46740ef7ffa8aeebf6a05fbdffacdedf97e3fb7f51efdf9ce3fb6fa8f76fc9f1fd37d5fbb7fa7c5fe75d4b45727d61a91b8fa3d4d8f5a8f5eaf9b7d4f1b00c36f2b647fe3225ff36740ef74dfddc7f53c7f7926524e549ba0f7cb9484dd72a3d8b7713f726683bf92b7a0fcedf41e1c9d4e769baa6c62d622b3cfc56b8fc46ef5261bbcdc36f4b067eeab9d8d1e839fdad95e8dafbea1a1ac78aad44d7e058aa74bb1d9d3bba8df9dc2377957aee0ef46d38ae56d7ef44e7f0de30757e8c48f6cfd2f28e433a1da3bea9cb81bf7bbe71ac48e4830eaf31bacdf816badf11e9a9af6919b81d5f8d8e70fd2e1507fb93bf99310e4c7580e345729dea78755ce389ff356e78e32afee33afe755db83efdb7b55cf10f757e8248aeafea3e9e0f903cb87fb7cff0acf584676df277a5fc4cf5b47faae383fe79ca36341cffa5bebf4e7def1e740e473c5ef26f756d3db2093d4e58a6debf5724dbe806f4ec06f42c1ccb4572bbb6dc8dbbf1fb3db2f57b15eaf9fbd0397ceb43755ea9eedfafaeeb34ba11e95089aec171937ae70174eee830ee29d77ec6ef25beb559bdf7203ac7dfac52f71f42e710b6d9c9cfc74e52cf3d8cce35632ce7118f1c8f5e3194a6622a8f967d22e96c5d716dea67d8a0beb5d30dfb589d4fbd9f9d3ce3b597d4f123f50d9d373c88cee1fe8b39c87e57c9d82a92ebf05b5d4613749d42e7fdef64f8869227fea38e1f2b79db94fc47d1391c6b4492cdc7f438adb6fd5a91943fcb7347af89d51e39db3d72b67be2a54edd7fccf35e1d0a17dc7fdc8db7896778c29329dc49d7dac6a4efd7625129ca44adc8072738d9e394adbbbb7e33b3a3bbf4b7835ff033467eb641ec765ead34799baf92beec0d628a28347a9b0f90fe0dfaebf3e4ef32e7892a29f48958ca27be9ef20950aedaf957895ce5eb9deb8ba4a73d38cb573977268925ce11de5a2f268b35cebf6429ab9dcf568b46e7acd4f95d2be5ad77d44e7d325390c0addefbce4a47a6ebf5bfd5b9a281d63ae7d552c312f97b87d4b4526a5fec5c6b907310b6894d62ae73dc25bf961af63ae76fd3374b1532b38e66e77feaba3bc54047d37c2734a07dbeb4c5ff8b9196881140df0ed207fcb4c997de1c17a5c4c4ff31743319e8a4285632264b64b1a46b85225ffa30ae4c21e83f8ca92134dbb7cbbb484c4d1b16331988ee41320489185efb8d318fde3ae1fccbdb26076d8ac89743138333042d1d589017975e097e82d0b66d9b0250d48b3f66c22f5d3c4b42c4ef3e57259ff31f01ed64e1971c01b29bbdd4c9d556a0c2739554be5aaae60d4c89f344a3234eab5eda7407de2a6f3ac7cfa5c46e01a8d25e46506af19b29905414b5324591ece52b6d9114424d564b1f491d9a429188a47c59a7ea9fc694a96fc9ca566b55e3d289ad61fffb13cf2c18fed0d34f2edf567ac53b6fb435c74f27193fb97c958aa1d6a618ea147622ca5c6aa48b9fce4de14ac40ffc981976216c3c930e14c13626829dc3b671b85723a59439cffa67082e82e3bd1991196037c20833ab40216c6b40580008bb1bb4126d3b7ab4028508c9ed4c91d3a5658ae8dc8c1bc68ffa7910b4258dbb67da12d6af69b737d193cea4eb59e9e9966389d34438cab957e63c5f29aba1707d8523b1ccf936c89b23bf90686d26bf919e2c8c804cf4923552ed25a98e44ede0a09a51c43b18881780bdf6369881cce3bc89a1279d183a52c9ac4fd064d68992dc37a8e4ce94e47e412577a124f70f2ab9ab29d9c8f9012784926c121d2efaafb9cebb9b9dc0ec90ad68a8039a3a68d22797015927978132b9e40953b7913f8da864d2cd147770719049496fd40da4a3ae3b25787040c13d286b1b12d4da7a9aac4d8663558845dc7c4779f85bb735fc1774e058dada5bcb96d806a484239baf0d16ea87a84b0f95569a9b6cca2e0fa262392f682cf7a20a8661cd5030f43609873c7db848ad597fe9fca408ef420bef43693ec2a0f967735bf9d2bc2f057c6450e0fd28c9a3824aee6f4ab032159f1972f160eec35f2497aaa914cb1d433f49b89daffabb35b2e31534d29db82b9de346a9055c2f570926fdb7d26704a385a1b92d53d6026391d252a18051e556322b89cbac04bc315739d7dd3187053206aae4972619b5812f50cf6b164b05acc2d32863bb2d91918d955fb78b0d95410ea0729a71869ce65553369626a7194825d9f14193ec20936448b2130cb65a201b16ceff4eb23e90f29db1f477069bb20699f5ef69d1acc16d3e82bc8d7258cd95b74cc042523ba5a96e710c7887329c52e7993ae71b95cac883640690a88678fb2574c16e4c0ef932391c9e4572e00c15950086982c09dad9d0e99bd2130c45c54aa759394fac93c970bbbc0c94dcd8ad928f56893db2cee28e90a5d85b7bdade0e366903cd1718dcc858dded450b1e4a092e0c28388f4ae35382a6f16126c990db807772d01ad6704aed6941d51e41e5a845861cf5f398bf1c7524257cba41f8d3adfc091f45258519d9d8481aab1e4d099e694a63a0c63cd96599e7fcaf71de80fa7e994cfd79b2304ce406794e5aaf72fe82027b027abec679c21d91f6a3e718ca280e096a14712ade0e35c4db873ee36d2c257c9641f8e2d6fe848fa3e2ee3053dc413605e506544b36abb22d3937cc93be0179d21da45176bd55c898ab97f19a274e7632de539d6383f3749e2c07aae5bd3cb9ae629dcc6bfdc4e9784affc34dfa7742faaf401afaf9e204d31781f011867c2be633df9a68120ecfcf1644c5678ec8a5e23389c236d7840d0ad1054ef5056aae8df2f9126900954d75e58a662a20f30d7ae5cbe6f236d1921532682d80f34cbdfc3b5145816f2786698354bc600e88b7e2a57fcc152f9895129773bec2d09eaa60155099ea0243a61af393a94ea6d2c2422a2d2cca292d149a6c4ef6a2d4b6a8cdd1296aa5940d292f78851fe623a47403ca6e9ea959585673e9385eae15562fd7cd75c9d543660a23281bd002b92e7c9924cc69a258a6893035a7d2c514aad43ed2506aef6febafd49e6a3259d98356d7a2263b5f4a08c36c8f3299adece92bca22f29b53cfa1d2c7b25e66aa154dbdd8f033542e7856278bcd4ae73a64bcf8fe78b9f016d497164ade5b2579085f996cf75246be441a79d8e1a40c7d1a55002c351400be6ad54554125a6648429ffb4c42d329b59707557b06a5f60a83daa7b4f3a7f64c4af8d106e14bdafb137e88493864cce0bc11a485782825189c9e52aa9bd00ad6ed84724f4b71836c2be8f65f85bcb2dbf95ded5c2b9722f2a4bfac760bf0a3e52c8a6da9816d0f9f6c0fa310ac0ac8f67093e06ec25d1931c810ea1126c150ff3a4610f52f98abe6bffe359bc27e9c01fb6d3eb1cfa192f9f14193f95c4af29aa092e751924f082a793e25796d50c90ba8483cd11089e019e327121752c2d7198497fa14be884a98eb4d79d328014dee4425d56d3e25fa35cac44629a5cef97b872a732b92fa47a0cfa34a359afda4f3c5949e65263ddde939e0fc04758a32d987065f5c2eb6f8fa6a31857e8301fd5e9fe88fa484971b84bfed53f85114af0a13affe19e2b542facc24ae4e76aefae1b884d2a6d2a40d9c26e2cdcf77965248371a90eeebe40fe9322a109b4c818012c1c57788836c99ecf02b53538b76c862dc3fc6e594069b4d1a40ceb6a4a962b022c76ac10a0a699501e92b3e911e4de5c82705cd9157526a6f31659a9dfda95d42a95d1d54ed529364a8756c1544ad037a06fdd73a5651dfa9a1be539bd3775653a4b60725758c493244709d21826777f117c1c752c2eb0dc24ff129fc384a788341f8333e851f4f096f34081fdcd59ff03594f01d06e1153e859f4009df69107ebd4fe16b29e1bb0cc2eff329fc44cac8770735f27594da7b0c6af7eee64fedf594da270755bbcc20395f3ae38439cdc7ebfde4cf411456dccece0119d6e4364df1c9f47daa4b6983295ea0843ecda4928fa2bc9cb2a6d30dd6f486cf445041093fc320fc049fa65a49093fd320fc029fc23752c2cf3208efd1dd9ff04d54649e1d3032375382cf1186bae004699d35328de5c99df660d6ec36b5b11fac5c502907aecba4ed273a9cf4c0354cc3ce53d65ba76cbadab1f649ce553f5a57515a9f6bd21a465ea11337516f769b926e33c4e4579827c6a85af7185f7a9d44d9c079061bd8efd3c0b650813e3fa00d549bf259e99758c59acf527ea4a5b2f31e964dd8282d65ab6fafd3f479f20559e7c917ca3c19fc09f874a5f2efada6e886baf54582a85bc3eae19d40655f75eb6d94cdee35d8ec549ff9560d25fc1283f0637d0aafa5845f6a107e8e4fe1db4dc2a15a03eb6a05aad6d4516a5f6e50fb799f6ad7536a5f1154ed064aed2b0d6af7eee14fed462a6fbbca94a1832ad9748ae4c944d9280b282862560877a2afeb2b55e65cad905e549be5f90a9934a16771832c00dcd50cd6c9ce8f4d722cb1ceb9aabdae760b7706589eac8eb96bbbe4c9aca042f9e26d9157eae55395e83be602a74a159cb888f2dbbbb9838aa2ab0d5134d26714eda4a2e89a80c5cf2e4af0b5a6b8076f8652e7a436295efc7c6f3795b15e4765acb034a9ff4e8b3d54b86e30850ba2694d534fa96bbf6b7d568b4ea6e2ff4653cee233fe4fa184df6410dea6a73fe1a75271b28f8a939b738a93d34cdf814cef966c8c38cd38dfe994e05b030a3e83b2a2db0226bb3329c1b707147c964930c43dac16eaf5ed04017e7c3bcfa6acf04e83154e38c89f159e4309bfcb207c894fe1e752c2ef3608aff529fc3c2afddc43a59f7b734a3fe75346739f294f039fd375ce3fe881aa96b9b52e63ab9c5c1feed4caa62294877e2cec024a8bfb4d5af46ad2a2c0f90d252f8c4db9de41b9eb7021a5c303261d0e523a4c71fe97cbc610bcb3cbf99dbb0617511a3c68d2a0038a0b98430435233f5fbb9832df870ce63bab973ff3dd4b99efc394f93e9293f95e42654d8f1ab2a6d63eb3a64b29428f19087de293d06594f0c70dc2fbf7f627fc724af813a6b8f529fc0a2a6ebf42c5edfe9ce2f64a2a393c992e6b2a6ce6ace92a4a8bafa6cf9a263763d67435a5c3d7d2654d539b316bba86d2e0a94c59d331f27bfee63b5c4b99efd70de6dba18f3ff3bdce241cccf71b94f97e3327f3bd9e4206eb9b07a98edd40d1f99681ced53ee9dc48d1f93645e73b39d1b9890ac4770d8178cf6720f6998403d1ef05447f33a5f5f70d5acfefeb4feb5b28f43fa0d03f9313fa5ba940fcd01088377c06e2364af88f0cc2dbf4f327fc764af88f0dc2e33e85df41e17f96c2ff5c4ef8efa48c13f6f4218bb529cd5cacdd4569f15393168962adb0198bb5bb291d9e37e9a08bb569cd58acdd4369f08249838e2251ac2d90035e353e7baaeea50cf84583017fe8d380efa30cf825ca805fcec980efa702f1334320aafbfb0bc40394f09f1b843fef53f8835474c3d65441ca858728ad5f31683d6b803fad1fa684ffd220bcc2a7f0472824bf32a500188c48df4f9fda931baccfdeed37b5bb97fe512a827e6d88a0069f11f41825fc5583f0eb7d0a7f9cca327e436519bfcd29cb78820ac4ef4c8406fa0bc45728e1af19841feb53f87e9370e806fe7d3659469a6ee0270d82f3e50a3f2d33469fbaf252f38ed1ffc1c4cb38460f7bd1a51fa30fae2b3546ff55ca96fe684a6d3e6de96b26e13094fb27117028f7294af29f834afe3a553efc251bfb4f93697ec320385fae3cb5b145ec3fc89a68e92dff8dac2dff4d69f9e3d2587eb095dbcc31f14dca78de0a6a3c4f53c6f3d780c6f32d2a99be6d48a61f0cf2974cbf4d690d9b13a6548960498439b2395429a7a5982634e5c9ea529e4fdfb3ef507abc63d203d654f127ffbb94fc7703c6cef7a8d879cf103b9b07fb8b9def535abf4fc50ea491cdaa8aa8e3a3b269bd8f5c3d037f4005f2ef8640560ff117c867a840fec314484881dacfc0adcf26bb69fa09d60fa92f7f60fa32d4085daf9afca645c5f39b16c559ee24880ae1d79be3479406ff3469d0cfa8c112f957835c41c0adf5e7366fecc7942eff32e932284b5d52579df6a3d3b3269dc0f0fe6d30bcbd07fb33bce7a8007f18304ff80925f8a380827f4a09fe4f40c1cf539c3f36707ec827e71728e19f1884d70ef527fc450ac97f032279c92418729f4fb3119ca631f4b24930b4433f6bbae16987c2c690fedba13fa3b0ffcf807df1307fd87f4e05e20b2a105fe614885f50818075d5bc81b8c067205ea184c70cc2f70ff727fc979461b68a19b25398c9b752e065622a641d5b67e47107529eacf1babf936721e4c933b7f8992097bfa893a5be9be5d68b6ab94046bdc0d3c0dd4e2598d05ceba919e8ef4067925bc46e6ccacef364665ee1d3b5ef57148bd62616b09c0c5e6bcead65260ad8c494ec9d52c36a819d6637cb22282fa38442e769bf33377e4d194c1b83c1b4f16930af5249aa6d8c4852ed62b924a9df5081686f0844dc67207e4bc57407534c830fbcb98b748dea5c85992fd0ba7097284a17a7f1b477c74a7754b75b3561d7c929a0465a86ee424dbed720edaac1908a36480d6b5007ac2bbb46b54efdd8d7ef0cf4f2e5fac5e1eeafe7ce2e0239fee70c768cc1b257c9112da4157b38b8dbabc5a8edefd2eb40b5ef5fa38cbbb3c1b87b8ff067dcbfa78cbb8bc9b861edaac4da1135a2d2d35a81e964b532480d328b85114f30b10972aa999b1cf45a61d0e89e2f33f30d1249a238709195f9ecc5ff031592aea690c01a6569f635f4f1ddd74ddf0503ef46598d5738180c21fc8fa6d47370d8a9074793ffd4d3dd09de3003073a05f5205250263da814f4275314c1e6363d63a9ebed15c06e3183c5194f7efcd1e9b72e4e2d8686d2a6f067ca140e6a0653f80b25bc5733087f8312debb1984bf4909efd30cc2dfa2927d5f53b2374a4f93b8ff4a49ef6792debe297bcccf611598b7a97cbebf219fdf37ca5f3eff374af80083f04f7c0a7f87a2343016acc1fa2e25785040c1ef5138061b70bce613c7fb26e1b04cc2906cb43e9516fc770ac7c1266b0463cff745e51f94fca126f9b09c6eaabbc0525957d44b4d25eef82bcc3fa034c933690212a024f36b05ffa4be32ccf41577cdc4d429887ebef82fc317f3e53617b0645258e57936db969bcbf2e10e988e1e30b2b5662cc747c872bc4f4ac8d2eeee4d90fbb729aee074642c75f7f123979ed97edfe0175aa5444d5b3a6a3ea48c6114557f045f32d7dba5daf9ab4105aacaa7a97f447d77b4e9bbddc9ef6e53dd197ebefd1f9339e6856d8ef36443b42e07731c1383e84946348930c638618ce9be4e19e3c7266ec3e0e2ba10b9e1fdd44be4fab055ce95e5b279ef7616d4e7c0746cccef92fde324d9112921cf553f8afa27a6942277e68a051ce8fe2f25794250c99f5292270695fc994932d44a26c582ef34f4399529e507ac78fd8fe2511094c71794e4c941257f49492e0c2a59c408c953824a8e5192a70695dc8a923c2da8e4d626c9604b45018dae0da5f2f4a02ab7354986bac18c6c544eb343593b4ae59941556e4f513e2420e50e94ca870655b92325795650c99d28c9870595dc99927c7850c95d289b3b22a0cd75a5549e1d54e56e94cdcd096873dd29c173030aee41099e1750704f9360f09b9c9f8de03769c1079904437d604133d4077a51a6b130a869f4364986e71765c3238d4f421f0af4e280a0fb52a6511cd034fa51828f0c28b83f157b47058dbd0154ec2d09187b03a9d85b1a30f60651909705843c9812bc3ca0e02154ecad081a7b0753b17774c0d81b4ac5deca80b19747412e0908791825b834a0e0e154ecad0a1a7b230c92f3e516b1b0ea65f81ef8cdb13b79faae89d5d9c4459c2636928a8b6382c6c52893644820c766a3f285b4e0d1945d1e17d02ec750828f0f28384ea5fd3501d3fe582af64e081a7be328166b03b2184f093e31a0e00994e07501054fa420af0f0a7912a572594095f329c11b020a2ea01a5ae5011b5a93298d2b026a5c48695c1950e32994c61b036a3c95d27853408da751823707145c44a1a80a88623aa5f14901359e41b50cb73443cb702685a33a208e43281c5b03e23894cae2b605cde26651a06b9a01f46194dab541d53e9c527b7b33a87d04a5765d50b5675392eb834a9e4301696806207329b51b83aa3d8f92bc23a8e4f95422df1930912fa004ef0a28782125787740c18b28c17b020a5e4c093e39a0e0624af02901051f49093e35a0e0a34c82c1f3e1b418e9afa97e7cf96b2e31b5a0611c3b06fb6885e78da31d906111a46d390cd99f6ec0923f12c23120251cd97c0dd1340ef89f118301ffdc645383fb4ba9ccebcca099d732aa6d7e56c0b6f972cafecf0e68ff2b2816e704657134a5f2b901555e49b5facf0bd8ea2fa1049f1f50702905f982a0905751902f0c087935552fb9a819ea25c7503c2e0ecae3588ac7de803c8ea352f6250153f6f154dbe3d2806d8f3514e4cb82423e81827c7940c86b291657046471a2a9f41de59cc6b6a4942c2db382d21a55ea365f0ff6952666c632f62a59c6e60b3fab28e5a22f551eaf33453bc4ced5d9443b684f085e6f120ca7d7c4521d79f58f1f47de322a97bcb61972c90d94f0eb9a417839953b5c1f3477a8304986e76fc82636d38cf4559a044395fbc66c048fa0cd642325f8a68082375190f70585bcd924196ac93767a3729a791f5594cab70455f9242a31deda4c89718be903b0d0ca6dd930799d165c4dc1be3d20ecad14ec3b82c2de662af0468b909b9bd82b5b1718fe9a9b77665d88dd453414b3d1812a986aa81cf8ee66c8816ba9c8bf2768e46fa7d4beb719d4aea384dfd70cc2eba99ae5fd31c30495f9f274a5632c2562be38aa6921a5650296b2da2923788b8afa49722a4bb1737fb973679b3469b862aebf98fc0be0696c5a60f835c25d7dc1df9e050d54281f3085f2bca650ae9213e1b7a904ba55fe5dac16b7ae93eb3cb809b4b8e9c9054d6b9725af8e52a77894087707d779a251860be426d34b4880e7fde941492a1530096693bc9bcc1427562fefd58e1cbf139e1a29d20f52f684bfe886698af38e4babc6c914d739b65127e3dc0d6da95a2fceab6de25dfa7a73d9d30e2a940f994279b8279498b91bce85c2ddcdb4cc60f5c93184efa44b2bf82d3f21db4985ec6153c88ec82afee6c83552aa849e18143ce61277fc846d1715b6474c612bf2846da98c9dcd2a6470b6abc542b29b0ac9a3a690ec0d393f4bbc03abe1543b52770b98239c5864afde879563767428a02c6994d50c9ceb4105abf9f2b63d14f5c74cd4e7649536960877bb061b72b593a9f03d6e0adf1246ab82abdbe56720546e75b84a7eba4aec1165644e924bac9e4285fa0953a80f4b1b6a5ad395322ceeaa506e1875690c57cb15a1d474917b6c9e4a85eb2ba6701de7bb665722ef24d7ed4c12dc6b2b9af2813aa73c80a64e909a602ef17c1ac563bf89c751a194d9dca5f9e954989fa4ea29fe6c40db30ac98502e05e178f66b117e42760615b2af9a42760811b255327d56abba89dbd4d6ad96d52a1557a4c4064f1be54c2a445f3385682163eeab63d55d76c05d91299542ee213d8b0ae953a690ce12542fb929a7480e01defe04982c96b15c275b43e54e89bbbb1943753615aaaf67d32648fe2eae21ac92b150e73c0be970539ad22f5946f385ec1c2a64df30856c5ec69c33bb56019d87a66bb3e69a539e4b85f19ba6302e226d126abc1b9c877458ddb564121b52a5cf4bcc329bbb243c8f0aebd3a6b05632b71e1ae4b64240c96d1dac96d65ed594f3344f7b38174ee7539cbe65e2b4aac55a59e90905e77001c5e1db260e737da60d1b52c4855408bf630a61b1cf10ea5d56cd31d212e1bd880aef774de15dc968d9f539d4359a83c0c51481ef35571dc4cddbe6a01a087fa8f652a1fa3ed543e137540be513a931e4cd73b297eb277c9750e1fb81297c8706a83936c8d2081631daa8da7974a84a539ef513a64ba9303de32fcebc790fdef72693e571961e9751e1fb21153e3f6d4637ac8b543d227117463cd2d70e9babe6783915be1f99c23752a4ef152c750873687905a5e58fd3f7edf98985929c6281d3f6aea442fdac29d4f4ae76daf739398f48ec3200e561a3b12e965bfffe5594decf99f49e99b1c5552cc706a1f7b15aae31bf406c950bb5a5b67fd3c540ee2dc8aba9f0fc84aa41a64f23d01a5e216b55f58672359bb104a88d6c6cc6105e4385f0a7d9b491cd6303c5d2f6a01fbc4cf551a5c65798e303d752617c9eeaa1caa61f209b50e69663e41ed2eba890be600ae9e2ac62d33bd2e3a6431dee968cd7eba9d0be680aedb119e395b7679cbbcffc068ac64b261ae33d34e62b3f057389e16e4a005b33ef4cd1d7fba61f9d6fa4747ed9a4f3b2ac7476adb644c09afc6e6dd86dc998faeabc1232dd4dbeef9d59e427e4375121ff9929e4f99e907bbf9c1c5b50176b902f97481bab912d9fd4313abc73811fddf751baffdca47ba1efda4995dc5fa6428dc24348a818c0bb97f809c1cd54087e610ac1149f21a8973d0c10079b19c3700b1586579aa38e58c1a6f7ad94debf34e93dcda7de8db23deb8ee9f1dad06d54387e458de499c3913a63a2a55af4b75321fa35d56f9cb9d72f9b1a53367d87fefb1773af57dc417178d5c481de5999eea5d1cba23757d97f27a5f16f4c1a8fce58134a8c8f57caab9093354f0bf12e4ad3df9a349d9e26f57b2d3d59f35ad9ca4a8c3370a497bba9b0fc2e1b9f51aa5db1c0b236c53d54285fa3fc4ffce5736e1f58eaddd4fa8adea1818ecf542973e40826f4ebf809f3bd54987f6f0af3284fcc26bec99d9aeea3f4fc035513a35a215e9d17299db36dc5e5da337e3f1582d74d213841f08de8e8bed87463bad802b34d79fa1d3f541ea0a8fc311b9f0cfd453fb94a2264548a6b9edce4412a647f3285ecf8168e6f3ff19c6b0a788822f2e76c7aa7fcd6b582f74fe41ef70f5321fd4b36b9d53c19ab6e0c36a05107d70a8ac4d40ce133e564f0969f103c4285e08dec3da9e19b7e52260e1f75bdb962e8512a7c6f52a32de96b34890d56bc3aea0d6ee8f4456dce922e4de656da3f4685faad5c7af9fdf43f8535efe2712a847fcd26e59909e7564fc8dcc269effc8bc5607ae30229c51d33a991ef40ad307f8c732b56d054324c6acaf12725950e89ebf0fdad4e6c409a286dcadb617a677a096f3b70dab512eecf18b5a19b5b20c6360aeff4d179527eb5ca6fb4b54e92845c4f7398163bc9a90556c9b7f444d84ca1309572935039874397394c6b8989ad31b94f2496e59086558b0fb890fe0d6275988ad556f9b081b7ec0dcfc59a326bf10e7cadb5d9864cbb31275287497757c032d57b10eba91a5be93bbc327ed5bb36b6f7ab13a5005d17cc286e154afe267103a4a9b96eb475c21d5c7a76a410eddbb62a80d8789713192cfdb24ec6cc0af9717ae64b14b0bdd62681ed3d4e6c305b7ebeac2ad73ae05ca74e5d4c5300eb2381106a6e1ae1fb9c08611afec234631b5180d50125d3bf73c282e51375b7c962e9c4532261d54981150e8b2d9100f6588704b07f7002eb2ddc2d380b44c23735cae07a744e80fb8013dc41067020709bf312b8ea34caab159180b65e24a0fd93dbda9293e742e77795aa82685f40d7eaa2002ede2501ee5f9ce0607b6a706acbb60c8d02bcab5109fa6f4e789d51525d9ed4c317054c830727307dc889a923c29498c015054417f44d20fa881351171912b7de05fee6d813260aa0568c4880fa0f27a876d296ea239599b7e99a80f331279cfecec9f2a696a41e7176bd0857cad2b151c0fc29280f57a83ed92800dc8f72aa4f3801b641c9300a609e1d9e00f35f4e301d50160e6a8277421400bddc3301e853ee322e9a4de80b5013fa336e44cbe588696215b26834634e41f9cfe76125333dd9350a80f6f54a00fa1f2720586357b7f316c89eab72a74cd38d13980950219b2e2ba58555487bab763e180588f0a3217ec10971881049f0a0d31916f1a86c5aeeba22e22dc0dea81bfa4b4e945d559ea6ed6db7aa6dad929d345140753dcadb44ab90ba68a0c7013bc1e85e8728d5ea3f699f0017e304d7d7030ecf849f233b6d605c3a31e73f0af04e41bda9ad38e17541256a6262b7bb9c441440ed4715d8d69ca0608063a94c7e5b3ceb94cd771eaf935f8a02b0f5ad12c0da84959fb95dcec96e7d1511cbcfaad1c8505b4e70ee00075425e6cb4f47b9a2f16cdb04b476dcd6b6408e6137ca8f27160a4c2c1c59efd4e1aa9cef4501dc1b085c7b4e70dd50328dea301af89669581db8ad4c3ba3d44831d16e07cc4256d691131cf4bcae74a0cd13d9afb91b058017a04a6e274e80dda58074d354a3806bb1ec4b6bdfd623dceb239fbbc7a23fc6b46f6577e17601d4caab0daaba92e46b09d308add3bc732be42b19cfb93b289eb1588867ed8711f73d861ecfd17b2d9e55253d1eb07f27eec32531eeabc488675df58bfbaaefc473ca7ee3be7a24e2beeafbf1acfcc5e2be9ca4e2be3b024c3ad36e31f194b1d578dad673dc38281437f661c7091f80781a178a38316010cfd0e916cf6918349e34f6174f3b201fcfe83a19cfa23c8b136346f12cbda813d312ccd3090a605a429756ff7fcf18288019035d0102eccf043f6e5da61b7765106cda9d2002254efa4503273b750c8f0e83537448deea4cd7624cda744caae774cb2680b9d475ba222fabee36e12c8c24ce2310ce1e36e19c12499c9b10ce9e61e0dc4402c5eaaf13d344111fce2e5c381f12099c07d984736a24715e8b70f6b209e7f448e2fc1bc2d9db269c4591c4f92cc2d9c7269c9323897305c2d9d7269c5322897307c2d9cf269c8591c4598e70f6e7c4d947e12c57cd4aef121faeeaeef211057c20db7281fc3702398013e41091e832c9b6fb0a9eaf93cf46af2a3f17811dc80976a8c0fd59d9f7e746196e1e823b88db8b295db3138b83929e0d657b2e94ad51937330f758d93a59bb4c06eaf674c2436cf00672c1db8fec704818f066840f8fcdf25e44f00ee684d72f43199e9c8859dbe66c303f403087da04737a0461fe13c1ccb309e6d408c2fc3b8239cc2698d32208f31f08e6709b60164610e65b08e6089b60320e5db0c1fc2b8239d226988cad723698bf473047d904338a2d9c3f2098a36d82392382303f4430c7d804736604617e8460c6c3e8c5843e22ca3f2884fea01e3126907f4420c772821ca740563b0f55cba376f0c3fb1eaef3b57b226bc7712f2edb3d1ef51b8de344de4922df2c7de65c1fbe4d125ef47a2dbb202b1ddf92bd96c92b7a335adfa95c28ab91f54de044392625c19749610b85defc73aef31fac7387ec576f14e916e36685cd564c4d41b0278661b7d995f95144390465019338511e6cc802b2ddbc8715ed855c6847212bcd6f592b7545b9952a46949db8aa53af232b2de0463947cef6a8513eeeb04c3d8c596e53f35eb4e7bf3b9f227a657e1b847232fffc6418835c272fc0c7cb645509ae46799ce84c84b0300c84d30f38845f4708a77022ec25120d4d7d9c235570f79b89b2d3c1d710c4a936f9bab33a18b2e11c82caeb6936e164f58863c3390fe12cb20927abbf261bce5a84733af70a366eb95d7000f976bc83f2ca19f6386845b1937830b2c49961a0c41e9a4b9c4af8223525d5dd513c84129c0de54e649587f00f5ee0deca75628b4437574e25dda244c16c5c98219bb2a04b047cdfba22988786d195d12027ced737f5aeeb79b6fa68ea889bcce998c086f64684765618836cd94e1660cc3fd9a60acc42300fb30926e3f02f1bcc9908e6e136c16474e662833905c13cc226988c6e866c30c72298b36d82c9e800cb0673068239c72698519cab568460ceb50926a333171bcc1108e63c9b60328ef3b0c11c8060ceb70926a3032c1bcc3882b9c026988c2d2036982311cc859c30f3446aff913fe72dc6f29dcd79eb10d4a7b4a825bd38bd9dc58cb9285b57f11864ab8b6d82c958beb3c1c48b061787d1ef0ebd9d3ba407272cbe18d2402f1bbe7e08df919cf806207ca93e71202c31853fca0319cf21a04785e17c5070c0391f9c81102e090361d10187f01084702927c29e12a13bda53298fb0707065d3a481558eb8723e8043b900f6440097d95d9f64ec1666ab4fae45f5c9e561f91725c628f1301bfbe824dba8cfe9c84657d8e3661dc569d28722944787550dcab47076947ddfa623a02b6d5abe6c5a24fb8aee45384b6cc2c93af79c0de7a50867a94d38a74712e76f10ce5536e12c8a24ce6f219cab6dc2c9ba823b1bce6284f3189b70b22e39ce86b316e13cd6269cac0be2b3e13c01e13c8ebbe699dd06362ba56ab0850e63cdb3980b6821027a7c184bec4df1b4df43e837629b13598de0ade1843748643bdd3479ee39a33fc79b5c504b5067c7093642656cb1b3415d89a0aeb5112aa34f1c1bd438827aa28d50194b7836a84311d475364265f4f760833a10415d6f2354c6b17436a87d10d4321ba1327a7bb041ed89a06e08c3db03ba96d3edda1742b732db42137f160998e59c30a788d4218fe45944f34462af3e3720c93bff256f5c9ad8f0b154360f74df3fa345e77359f460140915f6ccd58ce22adc7d51e650d99293b075e650229bafcc9e756770650f4b10ce8df64e3164f400651b6c7e1925fa4df6ace3c9ba94055bb2df83606eb609661417df3f1fc1acb209661417df6f44304fb2096614bd4a7621985b6c8219c5c5f7372398d536c18ce2e2fb5508e6569b6046718dce6508e6369b604671f1fde508668d4d30a3b8f8fe050866ad4d30a3b8aed28508e676bb5dc2a3b83e7c5bd476afe3c4db55e175272d54cb56bc2bbb8a735d25b61d5905b2cbfab09788cebedb238aeb2a1d8c6cb2212cb7f0a5b283788ba70379bef35a9dfc6294ddc207225b6de404da2d6d22af671cfae042d70aa1dbd192b33da2bf8c456f84726718738661b3ef0367cef0d108df2e3bf6247007e36aa5c5bac36cac96f93a17da2da8c0d96dd3a2bcac8d49364bed8470eeb109676124711e8a709e6c13ce2991c4b906e13c8513e708913ae97081f40f29977b69b86edfcb9dd72b043423574ab0ee7e1ad5e1d4387b7241ee850aab536d9aae302d92ab26de8f709e66134ed6bdaed9705e86709e6e13cee991c4f91ac279864d388b2289f37b08e79936e1641d5b67c37924c279964d38a74412671dc279b64d380b2389732dc2794e587d9d25b256d9e8489e236007b7d56a3a62859c8e188aaf325bf5fe4404f4dcb056023bb0dcbddf4008cfb3c7d3388a1e1fdd5063f3fcb0a621ec90bd9c30c7d8dd325c3f14f5e5d53620bbbc208c39c607d2564f87217817daeba4cd5886b38d57de81d05e14865d4e0fdf2ed9fade9f44f02e0e03deccf0e1b159de4b08de5efee265b361c9b4128749b928570a6d940b5840ef65f46a8e9d11cc4becf5e860ec7367b3d301a81a74a93d6b2646d1217b1cb2d2cbec1806366d4dcf88966d1996e390955e6ed3401babe7265b7e3a16e1bcc2269c8591c4598a705e19465332bb567961245db457219857d904338a2edac7229857db04338a93548f4430afb109661427a92e4730afb509661427a92e4630afb309661427a9162398d7db04338a6da28508e60d36c18ce290c52204f3469b60467192ea7c04f3269b60467192ea0204739f4d0d4ad6610bb606652f84f3669b70b2568fd870ce46386fb10927ab9f111bce2a84f3d630fc38a689036d3bb27d2281f0b6303cdd337715a7ce189ae308ad9353a959e70e5dc5e52cb30ed9e9ed9c908728c8d5ce4300b8524d25484c2048ce06b06f1c2358b629047310d83bc298f8afc1ea7d3293c739d355a7a25833cd4778ef6cc921b9d0d69a3d950be5fb289fbd8b13e53089b2d87968a50406d3aa77a8d713d6ba4e6d6236572e8aba45dd87b569c1499171ad05b6ba404704f86e7b1c12a398ec3f4728efe144d93b034a1d52568786115ca5fe46947bde6bf7aa348cbda36cabd24c4378efb3d7599171b08ecd15e7559401dc1f46064095fb890c80311f65cb00fe85303ec0bd6ed20ad5a2d70eddc5d23221d947af2cef81c03d1886fd1534d960856c90bad3aea3be1ac85308e343dc1dcb006cbefc708b6e5eb6840be65404f3e130baeedc49585b65b286a2e7c09a3ff41784f39130aaeb05695aedd1eec2fb0942f96818bda0530fb85ed04d08e1636174d081352e90559e46a9046c7c5f2ef3cce562a7ecf7ac13f5b2be591b4632672b82a621b08fdbe3d41d453fa5c508e513614c8299ea695446b92a548fe07dc5a619e9d338bb36d866a4df8670eeb709e7d448e23c17e17cd2269cd32389f31584f3ab36e12c8a24ceaf209c5fb30927ebca876c3817209c4fd9849375a93e369cdb10ceafdb8493d57f8e0de7f108e737c2588017f6683f7016e09d87f07dd326072fd60dc4d8700e47633c4fdb849375aa0b1bcea508e7b738717690022ae5ceaa75c275f18a9e77513b9498bfcd896b8cf0b3a52df41b354a9178eb5aa01682d3c17c2ed8f908f677c25a936b91806e35e87cdb24fb31eb22ddd9b61d21fcae3d2e30519cfb3b08e594dfe344d947c0d06da51a79749db4a80134c6bd31d8f2d00ec826bf1fc6de4190ac0f8401b2df21703fb0d7bd258a2bcd5c87d03e63cfde6b53223917fdc708e60f6d8219c5319e5f22983fb2096614e7a2ff10c1fcb14d30a33817fd4708e6b336c18ce25cf4ef2398cfd904338a73d19f41307f6213cc28bafe7f1bc1fca94d30a33817fd3b08e6f336c18c628bfc5708e60b36c18ce26a5cbf45305fb47b6a0a639b886d6aca74d47bf41277ef51ba8e3857f522e9cac5581cb16da07c1202f932ffacc964906ecf1174746c1347ca1ef7dab403be51dc6fb535ca087e668f7f66149b9b9310ca9fdbe488308db38862b3ccc710ce5fd884736a2471de8c70be6213cea248e2fc19c2f94b9b70b24e3865c3792cc2f92b9b70b256efd9709e8d70feda269cac6b17b3e1dc8870beca89134ef43cdee80dab7547987e6393d54de3ec2466b3badb11cedfda84736a24715e8c70fece269cd32389f3d708e76b36e12c8a24ceaf229cbfb709e7e448e25c8870fec1269cace3956c386b10ced76dc2c9ba14391bce3508e71f39710e16c9ab1602874601fdeddeb50abdfeed8c7d996ceeaf6d5067f19f38b18ef660dd20523de3b2f7a16344cd56d5af40a8ff1c86b3f60c71a02d39f134ca04fe12867fa7b6d67a697f90052c54f02a8da346d15d157616b2ce37ecf1838fa2db570f84f24d7bbd90190789d9f2d0c75106f05618eb794cf6d86a9437b53d1cc1fbabdd0e0c8c3e756c0e0c8528d9bf1dd662677a752e53128f7659ff5364ad7f0b032735ca3e5fce26aa44136418cbf7a15c38ff8470bec38973a4a7ea542df04441f3ee058bd4cba12d591ee7c23c026502efdae31b12457fbb25c862df0b739f02c8472b3c130c0fbc96ff7f11def76d5a2680b5f7946f937b94f0ff6e134ed6ee3e369c87219cffb009276b67341bce7284f3039b3aa3a7714e3964eb8c7e18e59dffb409e7d448e2bc01e1fc974d38a74712e77b08e7bf6dc25914499ccf239c1fda849375792a369c2b11ce8f6cc2c93afb9d0de7c908e77f6cc2c9bada171bce0a84f3e33096f29bdc125dcc6c6df67711be4fc2e89f870f6f9496a8656f538f440f5e0cc1fb6fcbcf80d3854cf4c6320f42ad9d4f6d0119c541e1cf90457e660b48c6b121369087238bfcdc16908c1d196c20672090ffb30524a393021bc83204f20b5b40324e616503b91a81fcd216908c556f3690350824ccb1b60224a3930c1bc80d0864cc16908c23906c20eb10c856b680645c87860de47604b23527487fce85515c06ad3d42d9861365a681b103c32de62884b32d27ce9e12a7db5d51298fdb4439c2072b184771fd6c7036d700db7102841e9fc4daeda068bde4b049da21bc163d8fcc6e085e7b4e787a0bc584a7b0d911ab54f63c02da8d52d856de647d2117d8ad086c074eb02384d7dbcdf5c74c4c130081eebea9e98aa228ae7b3819e59d1d39217ba764b94037c91cb3d829880eacf5bbd623ac9dc2a82c65e74218c5c52447a36ca033274a3d13035796b2cf6119d1b2e5b0cb9095760933f157394aac1689bdafb0f0d0fc874fe5c2ba1961edca5d9d5a27fb2e0f9cd1c7075172efc609af9f21b9a7cb39a3b8766c11b2c4ee36c18ca22ffb4c04b3874d30a3b87bc60404b3a74d30a3b87bc62404f3209b60467139d37108662f9b6046711af57804b3b74d30a3d86d3c1ac1ec6313cc28ee9e3106c1ec6b13cc28f622e52198fd6c8219c50e8f610866ff961c1d4a9dd4c75804b10d6ef4473807d884b3309238e7229c036dc2c9babd181bcead08e7204e9cda571ddc0f0e9c6de7e78804bec19cf87a0b58a1b84cad2207a260e877b3f3788dec22c6dbd5460f635b84710827c6a122b1ec893bf6b3ce5117e2b15cf280a1e13902a6ec437f7b99230012788588f2eed42508eec1610c60e4b6941463259e6decfd1684762877f24f5718e990b20e58c0ba242c182b512194c78931cf80d1dfa2528c3d4a6c8b4a4d457887d99b01300e70b065003f4719c0704eb4c324dac5d23e578a4ae9f655a596930451da3b648b8c00b0e372e76f57fc42e758e988ad8860e1d509011e11460e4b3932cc9316cbbc6e6c9c2b87fd0fc238328c0e125cc1d2b5d544fd35da15aabe08e6a8303cee30cccc594074c1ce4760477382d5ab1b4f1107daeac6d7238463ec71fc8ae210f1228432ce8972b80f9425ce3741488358eefca55bfcf5bcc5d238ae62e96384782c27e20122d901ac5676976c4e6bb3511c08391a55f5c785d13b9afd1a5d51dca5f556649fe36dc239359238cf413827d884737a2471fe02e19c6813cea248e27c02e19c64134ed63179369cb311ce7c9b704e8924ce9310ce029b70164612e77108e7e4309a9a05f2b77b84112777ae66945bebeb11c2427b266447d181b61faab64f09cb1adde62608daa52c31848e8f37b9107e0359e3d4303a8a016165d35c627d3beafd47df4518a7853b5674a06febd01fa12db277182e8adbe25d81d04e0f23ff2c3ce03a8e47218433c270049bdc128e606c63ec4311be99610cb065d7ef5e18c99ef7bb10cc436c8219c5bae5dd08e6a136c18ce2e4ac6b10cc5936c18ce2e4ac3b11ccc36c8219c5c95957219887db04338a93b3ae46308fb0096614c7242f423067db04338a93b3ae4430e7d804338acb53dc8360ceb509661497a77804c19c67b7133763c2676b6076415dc4f3c3e8df9cdc64af15b25bcef5348afa84ad6f222b5d60d330da34ce1c946d18ed518473a14d38a74612e74d08e7229b70164512e70b08e7629b70b24e7661c3790cc2596c13ce2991c4790ac279a44d38592bf36c382b11cea3c258f5b0d0530b8df2e8cf16046f4918beee307a3e5fc0ecf55acf2ee925b2aa5e25478692e7b5d747da5d663842bcd4a6852b58877cd9707644eda16536e164eda463c33911e15c6e134e566f4d369cc7209c2b6c2adba7718e14b195ed0fa0bcf3689b704e8d24cecb11ce9536e19c1e499c6f239c2536e12c8a24ce1f209ca536e1645d7f8e0de7528473954d3859174c63c3d98070aeb60927ab0f081bce7508e7319c38078a44c373956c4c96cb2626ac9e305fc0f228b08242622332f68666a71813d23711d26339918e15de49d5d09eaf70788093b60e67c2339e1af19ce3fc552707e9581dbbefe202be0d55f68fe304aeb778a48691930b2b36906c5b3c0e43967bbc2d20a3b8e77a1f04728d2d20a3b8e7fa5908e409b6808ce29eeb1310c8b5b6808ce256e19720902772822cf094ee8de4ac217af2d63ce789ad8e3e35f20c821a52597f1557597f222aebd785e132966d3f29e3901d5b2f693b0473bd4d3019fdefd860764030cb6c8219c5fefb4f502ebbc126988cd57a36989f2298e536c164ac48b1c1fc1f825961134cc6ea3d1bcc2f10cc4a9b6032d64cd9607e89606eb4096614f7e510a834df64134cc6f9c46c306308e6669b6032ce276683d90ac1ace28449af7ebcd0f95da5faee4b1d012038faab1faf46f9e7499c60ddddb097380fb84320788a4c8bad20cf3671a63dc2bac59e65aaa238fbbd3b4afad5f6ae60c358deb3ad60731fb2d2ad76cf9e636c35b1650205c872b771e2ed850aad1db250024f66771ba990e6ce9dca05b10cd9684d18ae0fb8e4a78a2bf6f29ecd260f46386bc3c84d53937c36f96914d703eb8d92fbf630ca7c6ab429b9cc8fe25218e39195d68551ddcfa5cc67ecaf67b3d1bd086cbdad60a3b827d779086c83ad60a3b8dbe111086ca3ad60196ba76c602723b03b6c05cb38f2c406762202bbd356b051ac600d426077d90a96b177950deca908ec6e5bc1328e01b081dd8dc0eeb1156c147bae5621b027db0a96b1b7950d6c29027b0a2758bd22f334d1022b32b3e13b0de13bd59e3e8028ae93771442799a4d93c359d7d1611be81b897aa74eb70927ebc22f6c3857209c67b4e4e8beb7b32f8a8bb59e2061b66feb11be3045f83c6939603be522b140cb24b14880a3b7bb844bb973be4496d50d62bd9358d738fffcc5c05ae79fe97a4caec2b340ec12b5f22ac8ab90b2b73a7741b37a5130ce79e44c308876ca20e232af9ee3306f709e813d94e1ebbb45897017a059eefcd6be058d12495c2e8798d8b81abe005b596f167532c4c90bd4c4631d2427775b180817008c2b5df55631c5aa94a872c25c2635a9739e6923bfe3a6c778ac2b3ad3c347c5b28e035a4004c5623d559c803e4b6558ca9c309409771ea37e2b1f3a706345ce2fb7b634a9a99e3449b9e76f5567fa7a66991023e9a59d05d863e67458dd6cb6942944aef9c3fb1ba53b43a5945a9c31a499c347db659734b1920fb3600ee8f09f0df1aea25d9a69bf5867e7af554eccbbc261239f3ae76f50eab3b9ad44dbff078b06c282ee370300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/588dfd6e114e3fb4eb0d10e4d1ae5e80.asset.meta b/Assets/SerializedUdonPrograms/588dfd6e114e3fb4eb0d10e4d1ae5e80.asset.meta new file mode 100644 index 0000000..44f28c1 --- /dev/null +++ b/Assets/SerializedUdonPrograms/588dfd6e114e3fb4eb0d10e4d1ae5e80.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 50749d2a9dd63564f8e8ab6dd1bc200f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/5896e31cb82659c4182c31c13343f974.asset b/Assets/SerializedUdonPrograms/5896e31cb82659c4182c31c13343f974.asset index ec3a3a4..4ca62e9 100644 --- a/Assets/SerializedUdonPrograms/5896e31cb82659c4182c31c13343f974.asset +++ b/Assets/SerializedUdonPrograms/5896e31cb82659c4182c31c13343f974.asset @@ -12,9 +12,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} m_Name: 5896e31cb82659c4182c31c13343f974 m_EditorClassIdentifier: - serializedProgramCompressedBytes: 1f8b080000000000000aed9df75f1cc715c0e71047919040a8802424a17e6adc8184405d34212424219a13cb0ec2e890b001c980643bdd89d31c277112c77112a73ac5e9c5694eff313fe40fc80ff935bfe57f48e6cdceeadeedcedbc2f24eb7c4f0e186dd9d7df3de77da9bb27b2569217f1287e4c7a818145da2498c889be28e9895ff75c97046fe5a47f6f9013127c35bf2735c5e3b241a7dee849f7d897af9d9278fe6c582bcf39e9890e194ba3e24b2f2ff3e796f561ec1d949f99795b112a5f2a611d12dae8a2ba22eb1c147c4a8ba695e9f4b805d890af9d9299e9357b34a294824ad2ed5c98f2179655e5d9b914adbf1ae8bc7955933f2da84bc674e4c4b994f288915ff2813ea1f6105ab7558a5c3fdf24fc61017d03158d12eff92f2efae3ebf46876b755823ff2aad38a537f5b96a24bb52ff5fa2ffafd0ff631d56e8f0008a6feb558be294298ef9d7d7e9f31703a453aec3838674d6a338a674368448a7ca111e42e96d0c21a75487870dfad6a138267deb1de9d8e737e930adaf5f42c71036a1b49a745811301f9d7667d07d9b097db6e8b0c5a14f8b0e9b918c661d5606d427a9c323067e5b511c13bf6d84bedb75d8ead0b7558747515a4775b87291fc8ea1fb1a097d76e8b0dda14fbb0edb908c361dae5aa43ec7d17d3b857f39aed1e12e1d9ed4f7f4a363084f20b9bb75780a9d3ba1c3d3fafecbfa788f0ecfa0b867505c08cfea7baea0635967ca5e76c8b6ef3ba7e35f45c710eed56187be3ea08ff7e9b013e9d081ce41d8a5efb9868ea50ec957842a7f65b789b4ba1d79daed48b3475f1f44c7605b8323fe791d6f081ddb8cb19c61871ca75ebdc8c65e1d560befb264734da163486bc4b2bdf49f0e9bfce4e59d4b26544f7b41f67de3b2874aab48d073057509ec3bfd9d01105d061ff0b34f25bb20bbddbb5280a1471e51fdfd826c795a8c3df2a64415d2bb4b7d8ecb18534ae8a83b89b75d498072d3f2378bdc897979be577923e0504cc92b4db2b24da9bb6ec8e6f3bafccd97322a939d962e495666fe3d9914c8bb21d576c7f433095c0fe73d8352a6e519cdc83336d0bbf2785a6938a43eef2b4db34afb3e796e41f969b3d253eb94e1b32a35b7ed73f27f539ac31a995947b383449db7dc303b9bbaa535a07d5af92befe4c8c3c811e5068eea6a589a561ed28bae9c7887a1d5c88073d3a765342b6489bc732d22ad7ca44117c1f036ba2d34976f8bf731e91c79d9622603d9bd455990cbe17fbff9c66b6d7bffbe3e996fda1191866e26d1e0639a175890974a6c7449f03621992ccd80a24efc09137e3524192a207e2bde948a173e03ca54cf949f01892dca75c8ca24b3f25493747f26b45af3eac659addab46c09e7544b7a5bc61990185c79968104ca157677a7eaa73a05bec404bea2d0e0fd5b1a2ff0150fecca81871f33c14a82a09f0e14c1152682ca4b7b8c95a0db25b3ffeb94f7de9624eeab7ef69ebcdfe4c279338561d961075333cf558a67a3d1b10ca71145b8d44418144cdc2808e121e9dd5c92d7c665fcacea41e1fc8094382ed306791d2a859c4df9777893ae0a4c7ab522bd1b918eaa19453c69209e01e26b4cca563a94053d09c165a6ac8412949862cdca1179ce1a3ff4a8ab53cae9ccc9bca38e213540e5151bb2ecb29a73bca7f4f0cedceac0995ba3321766b3f874a5b2bbdc942b6a6263b8809d005cbba3a48ccbb8e1bb0198753de8ec06ccb06b15ec7a9771fe2a50082b4c350610ae336ae5ac32b57495a9a424af8f2a792525794354c9ab28c91ba34aae3249064475415aa655b4e0d526c190abf506efe2bff2c725bc9216be8612bec9201cdc8630c2ab29249b2322a9310986f85b8208aea105af35b5372a039e2f4887ee37f3d5ab16c1b2e2aaacf04f0a6bcac2ddfada531f83329c545ac079d0c27fc6ccbb256b78c027c737adca508f083e7fc76f05ac1394a806759b6fef35ac863730e933a9ac9c5944ef656eccb7abb48b8b0cd54dd49aaa1474bf8dc23078847a32267f33f26f5e3bce903e9c8339516bb1d655f3cae99ab78e4a7f8729fd5a94fe9874256fcadf11e53842bdcbe9134683f594063b4d1ad4e4115890171622d9bf814a7d9729f5aa3cfba1845a6537accd1ba954779b52dda852b54add9c6ad36e8b47e4df94ba775a4f9076c93350729f0aa5491da5c91ebff277170d2a16cfbf9e4a7f2f4dc2e68f87356e1e595936c368b289d2649f4993ed799a04d70862411e2e84d26d33a55b8acea57e593227d4c9e86cb650e9ef37a5bf398f8d9f1e8b23d260d208fcd703415c118f01e956cad4835e15a279c92ac4362afd43a6f4d7e4a1bea046f17846314ccadba9940f9b52ae335600b7068bcbde464a9726932ed58e021f8dc30e2aedb429ed7aa2b02f15899d9436199336954a1bebc494ac5c56f71826bd5d86f4d26a44010bf2851afa0759c131bbca6a0b8c038b1ad2185d45d83893525bce82a74fb972bb4d390587b0a3c6b910736670fcdaab6f4d6e76654d92ce9a3da6ac5163b2c22f492d6e621ef6f8d43947fb64e6b40aaf15a5b0d3f27ba98a74cc549156eb6a3da7bcae69f99fbdbb602a64dfb9cf946b6ac05bc805153cb2099f6f6da64ed59867edc2bc98e2973e956b2953ae41993f6e284ab068e8ca9a563a6bf69b84838f0ffb9c22cd4a1d304986c6f9a489648829988394caa7a2aa7c8852f97444950f9b0483ab762688600f57ad896271362a8bb44932d4d97341546ea7056728c81d112137532c3aa3b268a15874456471842a17dd11cbc5518a454f5416ad148bf311591ca3ca456fc472d146b1b81095453bc5a22f228be3148b8b11599c30084eab09b8a74471ac35dacf242cdd7ae325133363cf0dfb8c530968f978f5a57afa93a66c87dcb91c24dbfbe96c3f65120c87b0cbd9e997db3f61fcf2d3a604c047816dd1467737848f7286123eb004c2cf52adc3b5a8adc339aa120f46acc41d26c1d5c2daafed2bb88516dc49091e8e28b88b823c12157237d5048f466c827b28951f89aaf279aa32be6b892a63af2901284fef0ec2c4638df28249308cfb1e1586f16387a0da513c126a5263cc3bb24d1d935267d414e294ded90e57fc25402cdcf2e76f5808334eeda3ecbb6eb22f2becd5357bbd0baf76592374e82127d54e7de821fb1ec4ec91fda6d57f0c2a2b604c7d5fc56ed2f6c02459fe0388a36a32754a7e3ea1ac73da8db73be65ff1a2352a53083b9ebf48717accc4698499d3ac8cdb2593028b406eee1e6f42d1395ca2383c6ee2f0282387dec8e5852e316188f45344de63223244b6106e3f0bdbe9be3aaff80d288bcd796f4f67d26d8a5b6a879436a71634c230b84c31183331d823f2fdee5c9a96c5b794c530ad9e55ba2e88db2edb72b38161f4bc42e979836acdcd69e216bc5f5813fdc36a6bebac87a6f4f9a56acdaf52f68d9bec6b71d8876b80334f7a759e04b561b1b56980b2e00993058f3de4f605d7b0a0ed8c7d4f182ad7282a13262a671cf96aa7884b6d8f785a46b6168ca055a0db0eaa45599a123b485976d364d9798f129bef55417be66d61be8710d47758bca54394a5d92075d37a48c42a9fb6adc3f25cee391b6ffb4cf516ee0a63c13065c164f0d613d20c530eb17dd4f9a5caa111cabe5b26fbce06ea1dacdd52609bf5b063f4dec1afe72b97bf89048c7d7a84f558d173b215bba35a23f01ad26af357e641cbe9bf4f0e529f91a509a80e3f68fbfc77bfc1b3d1d4f3c093c239f7b6d84743fdac30f5024da81fc0d605dfb1e97e0cb65c5b64cb92a4d526b7e566293ca15156a973b524adb6d21d5c6469f2d7e249486d85b90c857ffccd127045effb0cb865ca3755bf55cec34a80dd772ec183f150d4ac86654e3b9ffdb29a95274b32901b4f71220bbb2b310ef086133978d39cf0ac8db4fedb05e300ed75046d86135a998266edfa05df270e70e0c78633cb09a742c1c9df921c0740ff4180ee7002f2df2418075c2fadc8e1bacb89cbda594a6ff18f03ac1750d97a9a139679db651c103594e610cdf197277a9f701c60fd4bf956e5498770e75cc452bddcc68f303d0281b6ae473cabe673e7b42be11891a847508a4d73e82f1f8c2852ae0e3fe5db2aa58cfd602ab4b39a0aeca1a5028e1d52be352015a08b4a114d4d6ea86f1ea267d6a902fbff3d0acfc028fc1e40b8a02158edde7dce76cfeaa873a5c89da7502a1754099e75a61ee57d3c9579ed616d10d316d326ae447dec33dc20a1e24ce892e89cabc5f380193e90492e90bb11c8673941422d98f66863e25d1e57218ccf7162b49f45b4665367c5b4e7ac3b63896ce742994628df5b089454d5ce5f44634459ce85b216a17c1f27ca3a4777637646e25dc52b10ccf773c3b4b62150957c246f7986b1645672c15c83607ea0782a796b0c2b791d42f9c14294cb6028e1e982f8c1dc8b607ea898601e8d21cc1d08e6878b09661cabf94e04f3f96282d9124398db11cc8f1413cc233184d988607eb49860c6d165df8a60be504c309b6308731b82f9314e988dc23d2a37bde8947a312aab13bf9a0bef6184f7e39c78bd5f8b10bf493781c07d8213dc36b25cdaf3daf4ab91c7387bf6555c683308ed2739d1fa0d2ce33f465f8d507eaad0a534e8f322ac686bb8d0f622b42f72a285a727275cd0e0e18a5b31c45686b07d9a135bb5c08ba6b972997bb95afc5ac66a04efa542b48cc19628183b19b6258a5684f233c5db7f33baec6ca5f41042fbd987d97fe78f7fe238c9b11ea1fc1c27ca5d11faefdc737eac3d793f17e49308f2cb0fb3bcc67fe1771f42f9794e94eb7d3a28db52d616b4850b6327c2f8854260a44a640e23636964c3b80b61fc62212a76307789b144b255ec1684f295e2e9d3db62d8a76f4228bfc489d2def74695cab8ef7b3b8f40beca09329a0bcfb8eccbe6c21f4768bfcc8916e619602fefb4715336f324071bbe1508df6b9cf876184aa6f5a6706b8bd645617d97ee729bd72c4180bf523cdd511c77786c4428bfca8912f67bc38031f7740573f566db46588e907d8d13d95e5dfaa6550b392623b8bb97e01d116345676b49cf21d4af73a2aed61d91bd973d7f8197b59cb22dee2611bcaf73c3b3bfcca4c073ed6c0b153508de3738e145f32e19771bb155ea6308ed378ba7f73e1ec3de7b0b42f9ad425471f7fe8d591d257ef01208deb739e1051b895bee38e3ec502b17c83308e4778a0524a3bbc306f23402f9062748f039b0bbd3a55a48eb3df4d331ec52aa10b8ef16a24b0936d5cbd83bb34df5b62394dfe344b955a35c504f9acd932b8eeeef7b65addcdbb8c0ae4560bfcf09b641e40f1badb72058afc4ed13ddcb6c1af814c2fa834254fda0dbade3e710ad4328df2c6409853dc0b9f7622eb755f16e84f587dc2534f780fe727c82b712a1fc1127cae01b0ce2b832de8130feb878dacc383e6e5a8f50fe841325d4a9675c557a39cc539622843fe544d868a8d4e19ef161ecd5d9f01e41787fc68937d88b76e23bcd9142207f5e2c20e338cdb10781fc0527c88cc8f733ef9133e9f4f073f96d783d81f0ff9213bffd802ae544e5bf677f4c7ae0f1f3487b10cc5f15134cc692c906733f82f95631c164ecaed8601e44307f5d4c30199fc46083d98460fea69860324e31b3c16c46307f5b4c30193770b1c13c8a60feae986032bea2870d661b82f9fb6282c93835c206f32c82f97631c1647c6c800d661782f9074e98d1f623c57193e10184f68f9c68d78adc33e9f85d9b63ea987daf1cdb0c530302f8274e80e1a693e3f826ae0d08e59f8b0725e3c89c0de566b16cbe742103b9f517280e2b757148057a74261578d520156007742ae1f52e9214b9c33fa53234dccb8553a117335321df989f0af53ef394cf9629eb7b14d6eab2352b635d56778f0beb9b16c645ee3b15d2802301bb60c37ce19db74c2859ded2fe0ac527616e4da697ac4e2cc59738982cf5b78fae5f551eb99286f5bb656dffdf20df75b6ab625aa7beee6344e6bcfd25205765e49b4a29f849fe0f93ff3242f5b70000 + serializedProgramCompressedBytes: 1f8b080000000000000aed9d695b1cc711807b11cb219040080974a37b75b10b1202dde212424212e290131f415802097b41322045ceedc4b91ce74e1c27714ee7706e27cef90ff213f2215ff32d3f21cf9374d5f4686b67bae760a8f50c313c6cefccf45457bd7d551f33946585fc491d961f37c488e815ad625cdc16f7c49cfcd62bc359f96b1dd9e787c5bc0cefc8cf4979edb068f1b9137ef6a79ae5e7a03c5a108bf2ce07e2960c67f0faa89892df07e5bd53f208ce4ecbbf29192b552e6f1a177de29ab82a9a521b7c44dcc09b16d4b914d895aa929f3de24579750a958244b278a9497e8cca2b0b786d562a6dc77b4a3c8366cdca6bb7e43df3222f653e8b12ab6e5608fc22ac608d0a6b557840fec918a29f1c83155df22f2dffeeabf36b55b84e85f5f2afda8a537e5b9dab23b2abd5f732f5bd4a7da73aac52e14112dfd6ab81c401fd2e38aeaf57e70702a453a9c2439a741a491c5d3a1b42a453eb080f93f436869053aec2231a7d9b481c9dbecd8e74ecf39b549855d72f9263085b495aad2aac0a988f4ebb73e4becd067db6a8b0dda14fbb0adb888c36155607d427adc2a31a7edb481c1dbfed067d77a8b0c3a16f870a8f91b48ea970f512f91d27f7b518f4d9a9c22e873e5d2aec24323a5558b3447d4e90fb7609ff725cafc2dd2a3ca5ee1924c7109e2472f7a8f0343977528567d4fd97d4f15e159e2571cf92b8109e53f75c26c7b2ce54ec71c8b6ef3bafe20f916308f7a9b0dbc1b95b85fb55d8a3ae5f21c732bdf4db8ef8bd2ade55726cdb4de55c73c8f98f43af3e627b9f28b4bf5ef96bdb9a21c790d6b0b0daf17f386cf29357742e9dc2deefa2ec8f2665af91c548d09b04eda6ed3bfd3b68105d011ff0b31f935d945de17d2940d34b8e631fbc285b83766d2fb929554bf4eec5cf49196306855e7727f1375712a05c5efe4e912e7e419e1f400f013af91979a55516ae19bceba66cd29e92bfc5526ec864f3d24d981263f2f33ecabb29d576c7f43309dc01e73d2352a6e5adccca3336d0fbf2388f1a8ee2e743d4740ab51f94e716d1779a93de538f0c1f616a6edbe7e5775d9a630a995e47bdd3623a6fb9467636f5496b40fb2cfa10efe5c8bb9123e89a5d57d5b03c8b5ecb2bae9c788fa1d5c880c331a864b421b254d1b9769145bf65c44530bc8d6e0bf5e5dbe27d5c3a2c5eb6e8c940766f410b0a39fcafb7de7cbd73dfdf1bd3c5a61d1559e866525b7d4cf3020bf232a98d2e09de26a4d3e53950d4893fa5c38fc384d112e2b7e2cd60bcf01950813d537106a4c0ad1e935f1ec9bfbc8cdc2d055a6a2de08d734ab5bc6c09e7b125bd2be30c4b0cae3ccb41029588dddda9faa96e025fa6035f556af0fe2d8d17f8aac77615c0c38f9e60b581a09f0e2682ab7404d14b7b9a95a0db25b3bff5c87bef4a120fb19f7d20efd7b970de4c61a874c4c154cfb30679b6681dcb701a990897eb088382a99b25213c2abd9bcbf2daa48c3f853d289c1f96122765da20af1b5328d8547c8737e9dac0a4d720e93d847454cd4cc4d31ae23920be56a76cb54359d0d320b842979550825233ac59392ecf59e3877ebc3a834e6741e63d3c86d40095576cc8b22b380ff800f5f0cedcbac0995b8f990b334c7cba9ab2bb52972b38d93056c24e00aedd432993326ef86e0066420f39bb013dec0684ddec32ce5f0513c22a5d8d0184ebb55a39ab4c83b9ca549b24374695bcda24794354c93526c91ba34aaed54906444d415aa61ab3e0353ac190abcd1aefe2bff2c725bcda2c7cad49f8268d70701bc208af3321d91c1149bd4e30c4df124470bd59f03a5d7b8319f052493a74bf99af015c989a12d764857f4e585316eed6d79efa1891e1346a01e7410bff1933ef966ceb633e05be592c43fd22f8fc1dbf1530775f860dea76dfde6b0c873730e9338d56ce2ea1f7d237e63b30ed78913175130dba2a05dd6f8bd00c1ea19e4cc8df9cfc5b508e33a40fe7604ed45a4075d5bc4a73cd5b6f4a7fa72efd0692fe8474256fcbdf71741ca1de15f409a341a349835d3a0dea8b082cca0b8b91ecdf604a7db72ef5da22fba1845a6537accd1b4da9eed1a5ba1153b54add3cb66977c513f26f06efcdab09d25e79064aeef3a134693269b2d7affcdd27838aa5f36f36a5bfcf4cc2e64f87356e1e53b26c86d164934993fd3a4d761469125c23880579b8184ab7cd26dd32e65c1a9225f3169e8cce668b29fd03baf43717b1f1d3636944b6ea3402fff5601057c46340bacd64ea21af0ad1b66c1562bb29fdc3baf4d716a1be88a3783aa31826e51da6948fe8526ed25600b7064bcbde16932ead3a5dea1c053e1a879da6b4b3bab49b0d857db948ec326993d369538dda58276664e5b2bac730e9edd6a497c511052c24956ae81f640547ef2ae3b61407161cd2685d45d8cc92c16d60c1d337b9727b74390587b0cbc5b910737664f2fa6bef4c6f76654dda9c357b75598363b2d22f492d6d621ef6dd343947fbc6cce9105e2b4a61a7e5f7992ad2715d455aa3aaf53c7a5d79f9cdde5d3013b2efdcafcb351cf0967241858e6cc2e75ba7ae53d5e65997d02fa6f8a56fcab58c2ed7a0cc9fd01425583474654d87396b0ee884838f0f7b8f22cd4a1dd44986c6f9948e648829984326954f4755f9b049e53311553ea2130caedad920823d5cb556138b735159647592a1ce9e0fa272975970ce04b93b22e436138b9ea82cda4d2c7a23b2386a2a177d11cbc531138bfea82c3a4c2c2e446471dc542e0622968b4e138b8b51597499580c466471c2c4e2524416273582b33801f7bc88c75aa3fd9cc0f2ad375ed631d3f6dcb0af369382968f575f534f7f4a97ed903b578264fb9039db4feb04c321ecf075fae5f64f18bffc8c2e01f051608bb0d6dd0de1a39c35091f5e06e1e74cadc3f5a8adc37953251e895889bb4dcdce68c466a7c7c4622c2a8b5e53011c5fa602d8a74ba006c5465b97ebd70986b1ce13423366ea36b61dd4fb6fc571d53dd98e4c48a9b3386d36a37673c3157f09108bb676c58bf461c666174cf6bd4f67df94b05794ec351ebac2638d4aa15798c6dde9d02b0c3e8ed92ffb0aabcd1c412b601cf91063b72a7b6062a8f841b81b388138233f9f45eb9c76d32d7ec557bc68dd9029841dc30e9838bd5fc7699c99d39c8cdb2b93028b406ee11e6f42d1395c34717852c7e149460e0391cb8bb9c48421326822f2948ec8a8b18570fb16d44ef7d505e4378c16ebf3de9ec233b7296ea9dd52da3c4ee2876170c9c4e0691d83bda2d8d72ca469597c072d86a9e429d47551dc75d95698010ba3e765939ecf985a737d9ab4051f12d6e4f6186ee79cf3d0d47c7eb95af321937d1fd0d9d7eeb08fd600679e0ca83c096ac3526bd3159305133a0b2e785850dccb42f97e41de642d0b403df0d238785fb2f4bcba6ab2f46690bcb236ca5beda16deb983c5778d6c0db3e5d3ec25d612cb866b26032786d8234694ef5fbe412b5cf747eb97268d864dfb33afbce056a2dac1d23609bf5c057f4d6c2af25ac94bfa914f8c2fdc27ab4e24569d93dec01a017c9e20698dce39eda7faf10a43e2b2100d5b1c77dadff0ea05bc2fc4ce4b470ce3f2cf5f1383f2b745e472bf13ba875c177adb91f05ac5416d9b22469dce8b3d22c85372b5454ab5c2dcbe276a2434b2c4dfe5ac008a46295be0c857f04c8127055ed7d0bb86dc43755bf959e2328c0f6ce96e1e160286a56c332af9c912159cd2ad36539c88d694e646177662501de58aa00ef0e273c6b33a1ff96a924407b8340bbcb09ad02a1593b1fc1f749021cf8b1e1cc70c2a94238c5db329300e8df04d0739c80fc374a2501d7abab0ab89ee7c465edae336f734e02ac9749d9ca73c2d26f3d4b02a2ade50544b3fce5c9bc573209b0fe89be5565da21dc3917b15c2ff8f0236c1e81405bd72f1ee1fcdebc72251c2312dc861f37cde1f5768f47141957879ff16d9532da7e3013da59cd04f6d03201c70e19df1a9009d045650c4d4d61a8af1fa2e760a87f4ffc7f8fc273300a87570656f42b0856bbf70267bbb701d32c9422779e42a95cc4123ce74c3dca3b49aa8bdac38620a62da54d5c4dfad8796e9050716ea992e89caba5f380393e90692e907b08c8054e908de80d99db986497c71a82719113a3fd3c96359b3a27f29eb3ee8c25b28b0b6596a07c500a94a6aa5dbc78cb88b2920b650341f990136593a3bbd13b23c9aee25504e607b9615acbd2a64a3e5eb43cc35832abb960ae25301fc5a7927724b0923711942f96a25c0643093bac9307731f81f9a138c13c9640983b09cc0fc7096612abf92e02f3237182d99e40983b08cc8fc609e6d104c26c21303f1627984974d9b711981f8f13ccb604c2dc4e607e8213668b708fca752f7b34bd1c92d5895fc385f708c1fb12275eef47c39337e92608b84f7282db6e2c97f6bcb6f9f5b0139c3d7b0d17da1c41fb294eb47e03cbe48fd1d710942f97ba94067d7e80156d3d17da3e82f6d39c68e169ba5b2e68b0d9fe4e02b155106c9fe1c45627e8a269a15c165e3095bc96b18ec0fb6c295ac6604b148c9d0cdb12450741f9b9f8f6df8c2e3b5b293d4cd07efeddecbf8bc73f499ce46824285fe144b93b42ff5d78ee8bb5271fe2827c8a40fec2bb595e93bff0bb9fa07c951365a30f4adb52568ced5c1877138c5f8c4f3fcfd819b195c87682f24bf1e98c3a13d8196d2228bfcc89d2deb0652a9549dfb0d54b407e85136434df9371bd92cdf73c41d07e95132d0c9061136a5ebb9b987974ce866f15c1f7354e7c3b3525d37acdafb5b7e892b0fe11e64a9b902b2380bf1e9fee28895b13361294dfe044091b9561a453782c80b97ab3ed7fab24c8bec9896c9f2a7d796c2127640477f712bc2362ace86c2de97982fa354ed475aa23b2376117af4cb29653b655c93481f72d6e78f67f2228f12431db0c7b3d81f73a27bc68de25e33619b64a7d9ca0fd767c7aef1309ecbdb71094df294515776f3c98535192072f45e07d97135eb091b8e58e33ce0e7570813c4b40be1117908cee0e1bc83304e4f7384182cf41dd9d5e41fffb77f2ba945a02eefba5e852824df532f6ce6c53bd5d04e50f38516e532817f111a905e35299fb9f35b256eeed5c60d711b03fe404bb55140f1badc7f7ad777b0e8abe15360d7c9a60fd5129aa7ed07dc2c97388d613943f2e650985cdab85173aaeb4e5dc6e82f54dee125a78b27c253e7a5a4d50fe243e953d890ff83513943fe5440985e183aeb2b81226d8ca09c29f71226c11519faa60ec8ed8f01e25787fce8937d8ab4d923b3ecf10906fc5056412c7e77b09c85f7082cc896207e981710ad83c6e5a795b0c4f12fcbfe4c46f3f12681ae517bfd99c15269b2b7580c0fc559c6032b6b06c300f1198bf8e134cc6edda6c305b09ccdfc40926e3741e1bcc3602f3b77182c9b859860de63102f3777182c9f81e0f36989d04e6db7182c9389a6783798ec0fc7d9c60326ed16683d94360fe811366b4bd1f49dcd07590a07d8713ed3a51787095be906f028fd9f725b14d8a6c2500ffc80930dc0c68125fd7b381a0fc537c50762510e566b162decc9e83dcfa331487d5aa3864023da690093cd19d09b0db3493f27a6141c6b89b3a83191aee0da499d00b479990afd5ce847ae971c6677b8af5b2f575aa6cc17f37bb82774f0aeb75ec93a2f0e2f52ce048c18ec330ff15cb5b26942c6f697f81e293d2b726f965ab13cbf1a6779da5fef699eb57ad47ae6461c96945dbff57c87795ed584c9bf07f028ccb9cb7ff53c03519f9362a053fe9ff016d0261bab2b00000 serializedProgramBytesString: - serializedSignature: a4030873f74f63db2efa9ffe28a3c849d5dc0ff833cd98f1b24c48f9820d576647fb251d7062e64b6996f468fd558f05d6790f350a4cb260648eb72a9f1c6304 + serializedSignature: 5161be497188df3f16a816ad5502489f35ea499de87f277c172e16aad00f257633a13a12e5914c2d8e1ad6391ee56a925035c8e4efe8870050312da07f587b0b programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/58f2d44aac40dbc44a7643fb1367002c.asset b/Assets/SerializedUdonPrograms/58f2d44aac40dbc44a7643fb1367002c.asset new file mode 100644 index 0000000..cf176d4 --- /dev/null +++ b/Assets/SerializedUdonPrograms/58f2d44aac40dbc44a7643fb1367002c.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 58f2d44aac40dbc44a7643fb1367002c + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c1557f6f8efa3a43814f7123c58124208522a40d042a124a10214421220252169844295ba5137ead4a9bbbbbbbbbb77b7dddd6eb7dded6eff73efdc9b7766de3defbd79f3cee40eff5ff890c9d8b9e77cefb92ed32287593f91d1d6afc56c119bceb259092b67356c9df5d774eb586dfdb3cfd4f585acce3aaeb67e975af746b3cc046ff29fe1915ed6ef39d6593d6bb0de6c6465d6b152dc2f6215d6df73ac772bac337e7595f5bfc27a2ad2d27aa98415b2056c2fd633d23d8188c5e2a57a792dc2ed8ab4b67e4f631badbb1542291e488eb8d5d3fa5564dda917f7aa2da5d5734bd8326156b575afcc7aa78e555932570a89ad7fc967e20f661f7ac8634f79e43ab6917fef20ff6e2dff86cf67c863af249fef0dde6b03fee684b6c679bf8f7d8cb4b58e3b5ac7ebc1397ff747f95c5f5b5e8b357164f597c79de5718094794312fab792c7cc04f6c6933110c84a86596b791c2c8f83a4be37a618fe509b51e462208fb36c07f4190cc26e03eef36b437cd8aee2b1bd2b1edbdbf1d8628b8cbf2fe5f3c3e4314b1e874bd9d6333db6c86b23e4b15f02bd46daefb1892ceab356983bd4caf351f2385a1ec748dd3a4a5d6f02e77e7551719a2d65769061dcacb9ae9ee7f76f91e739f298eb8aafb1f2b95be5795e92fa24e37f4aa74e328cdbc0b9c5b1e58a38b254bcefe48af79de4bb67d81c5bdeebb207f89f56ee3829eff624ecc8b7c318be873cefe23c463a83b0c64bb977b89e2d90cf7695f7ef04e7fcd8455ebf0b9cf3f7ba26b043e93841bed74dcab91b9c5b9c32def5c8a7a57cef37793e9125ce1f952e93e571923ceec29afc7df85684610f0f0c7bb918f692c79e2e86aa4c528cbbcbfbf7203af4f1a0433f970efde4b1af4b87be2e1d7a233a7496f7fb031d945e3b7bd02bd3a557a63caab24aeac5a638fda1e9febdaefb32edb26ec8fd5d817dbafbbbb9ec76dfdfdd1537eafe1ecee72203e5fdfb002778fd7e96d82fa7d93ed86e833c9fce848fb77ed3bedefa0f795de5c55359fc34a2f22655ae5e0fce2db96d46db72db14cbe70bedf3882a9332811cfefe032eb9835d72074bb957c9e7f292d473863cce96c73de5712e8ba64be92f6c963cce91610e61ce326c88bc3f33fa6eef633d728b1747f398339f51e96a680299eafdf9f2d826c9e7d5337bf9d079813cb64d32ccb6f2b8d04798ed6c5f68e72eafa72790b9b7cdb75d3ed0c192d35ea5c745f258248fd27785cf423f503e1ccf0f12e95262bfd7f65110075c9757e5f96279dcc7a90bdbd7a5d383e9d329324cca7c089cf3e37079fd61706ee9da61273b9c0e2a9cfde4717f97ce4be874664bedf73abd087c2399f7e2f9d73269dfcfb6ec8edde4f5035cba2d88eaddae257857e9914c7a5821598c74311e69ebd051f128753df70838e7c711d1f0c4dffc5de55b7dc075feeea3e09cdf5f9ea4ae652cd667b99cd120ecd176d89d64fedf69a17cb69cc5a63dddbbfc380a5c1b25e5a97657058b2dc7d473dcb6c7c039bfbf3249db5669f4b3c2e52e8ebebb9a39f39ff9517f687b86bc26f3f2c818e64c5bb29d24dab5f29d4895bc56699f7751ba1c28dfc9065cb2a57edfca67d6ca630dd397b3d580834c8fa27b46863d40a59f2a3cacceaafc536d3f65f7b2a89c0eefdac7ce2a1f3b8839d38cfb597ead4e1ed7cbe34679dc107d76a4caa31be5f160a95b0e73e4cdac015ce7c75c79ff7170ce9fab8fcaee25f32376884b575d7c1eeab25d9707c4f3b3c3ec67b3547deb709b6d17998f7571e77f07b2f8fe7b84fdde68d5fe3e521ebb80f7545d5ab5731f06e73c6c19675d0be5f39be4f128793c5a3e9fe7641d510c742c93d5ff187954761f278f4ad7275cbc13c98bc7fe445bc7a6b6f949f278b23cce05b2bb4b1bc7456d6baa279e00eef173595f64c73347f916579753e4b143027b7a80e7f871b30ffbe3dddb511e559b249f39fb2bf26d5fe9be531c59a7db9cfaaa3cff0cfb9d1e99f2fc4cfb7e3795cf9d056ce2618c8fb2eeaaea7667cb7b05c0eee3e5b509e0da69f2dac4e835218fdf3bc7153f4fbaee9f0b64e8ee9f0774d0dd3f9f45dba5bc5feb30797d8bcb96e35dba4e608ebc895d106b6b64822beca73cc4a56a7f4e72c5e524192f1fc69175a13e2e7baa3ee38b5c71a9ca6715979335717989bca7fa44f8b5e1f2da144dfcee0a38a87e954b91b854f72f037275f7b7021d74f72f77c6652fd56ebc02894ba83f8ccb2b636d8d4c7185fd74127179b53caa76afaeae7c8d3caafadd3349c8bd561eebe3c8ede392fb6c1272af93c76d71e45e8fe89b4a78cad7553feb6ecce9ebfcdcf2dbdef164ddc0b4bede47d54f6e644e5f57750de5ebbbb3585f977dd2913da2f12f58f06b5359acaf4f037e22f360760b7806faaaba7f2b90abbb7f1bd04177ff76e6f0f5beaabe7907d3fb3ad41ffafa9d209c36e01918f67349c4e55d2ece8aef74e6acb7c8beabbeeef6ff192c7ed978b72d7f8cec5761b21f325228e53f0fcef971862bdc1976b8fd5adb72faab7a841c87e997695feff7a9bc7eaf0c4fb6d9d97df2b9d9aee7eeb7cfb3559dfd4117ff875cbe322bea6f4db63c00ee41db6633679d44d93207c4d56c700dc695aac325e22adba2ec51173fe5972f8073fedce351fdb3555c3f268fa744ef7553757e15bfed811e4fe87d45e80ae2cc731d49d9fc64029bbde4497399334f9a6bfbc1ce4be3c87a563eb329ce33d25f99e4cb64bc45f664ce368feaf3946dbcc83cd7fd79f2feb628fbdedd801e4a367fe7c538fa28fb5f96c757e4f12519ce7ce66c3fa8fe4a5d19916a3d36d57bd552a7bd9cfe1391fd72992a9d295fac4ae01faafd7b943cae93f216b818a8fed3787d6089c28a6357646fe6ec77d85bde7f4d9e2f94f7551c15b99e577da1afcbf345aee74b5ccf97c8e7df90e7c5cee7d99b400e3f7f2b6a5b4495bf6f836baa0ff19d289f415be5bdc5ceb0996cc736b5ef541b6e1ff9dccbe03dc840dd97fe1ad9d765d37ef2fc5570ce8ffbbbe4aa7cfe75d77d2577894bdff7e451d5c33f88da98fb267807f064ef3b65c6f5e9b7a48ca5f29dd7c0b9e5d383e2d5ffd5bbb23f33728094f13a38b7640cee66eb3b380b971559eee2b70c5ce7c715f2fe1be09ccb3e2c8e7e6fcb674b5db695ca77ef4de2dd95f258e6b2ad4cca90fdbf43e2f5eb7c248f1fbbe250f92c9757a189d70a109ffcbc5ceaf02638b7c21da2da559f30bd6faf74bdff96f3fda1aa1efea93c7ee6d26d1573f69f7d218f6a2e89c627d9572edd57479f69d2ef73977eaaaf54e9bd4686fb36d0435de7c74ae62ca32ae5fb5fcbf3035df7651fa9767e49bc34a2fac6d732e778e35a9bdf30550eaa7ed644fd54c98455e50aab4a86b5c2d67b58431c59ee717bd8af9b687cbc8639c7c76be4711d738edbcbb24a8c7b2bd9df31e79c91efd3c0c33d47a69639eb49b53697e1c73a9f4b387f235e793f57ca3e8839cbf98364585fda7190d55e3eff833cce4910e65f5cf2eba4fc77c039bfafebd3feab3cfecd29c39197a8fe6ed0d7da941e653a643f47ef8d55fddc3f82f7f8f94fc09e447d95f1d8fe9d69dbcc23541fb2aa271d9e80db3f98b68d3462b34739bf30671bea57e66c43fd531e555bf65f924b838b839cf313698c86176900d774eda344bae9aec9f1abc87ae6f4c3f5b6fd23aba48fa8be4be5870727084b3e1781cfa9b036806bbfcb6b1b819d1bc0357e3c44eaf62e38b7741bf5b34beea1f2b9f740d8fc7898bcfe3e38e7ef0d96e787cbfb37bae41d097492e323a35439f86f571847b0683960f11aa5e2fb0770bf0dd0535d5332603fc60670e4d73f9071b0cd1966c238d05dfb8f94b18939fb1a36c9e351f2fa87e0dcb27bb46a47fce17afe68e66c5bcb311af63fd69407e4a934f45f79045cb53afe2965aa3acdef49bea7abf33179ef9e14de3d8639ebdfc7c8e3b1cc99568eb5198d91fdec631e65ce74795ffcb09be446e4f138e66cdbc8322dd202c8e3f73fc6656ac351fd770f8173186e0b96b84eafea394ae689f29d4fc0393f9e10b53922ebad9193c035357675b27cff53e64c93a780674f01cff2e366e62c9f37dbfc73b7b864abf74e95cf7f06cef931431ed578cbe74e7f8b9c0e74380d5ce347d5bff30538b774c8b9d8f681dc5a24ac3399b3ee73a62bccb3e4fd2fc139b76d88f3f9c8d9f2b9afc0b9620ce57ced92e3d6eb1c60a3cae31f4be0af6acc301b9cf3b06eb66dcf5671f97b72f2b4d73e90b2651f56e45c17373556f67e0ab265b911398f39db6ce7d98cc66e92cfa9b2eea704612879727d4144d627236a3cee1b70ce8f5b98c3e723aa7da07cff02e6288fc4b9a557de42979c0b5d722e74c5cb45f2feb7aef72e0276f1fbdfd9f19657eeb427a1ddba6bff9361285fb98439f30735f67631f03b75bc145c93e56ce432a6cf1fb68267b78267f9f172e6cc1f2eb7f9e5dfeb92addebb8239f3872be451a5d92b993e7fb80ae87025b8c68f573367fe70b5adc338d9a79e7f0612d635cce9e7d7b8c2bc9639f3876ba56d85cee723db98337f5075874b5d72be76c971eb751db0f13aa9cb7fe3fb85e2dae4875b99237fe0d3151cf9430279ce6b1911519ecc6615ac94d5b21c5128f29236d9a563eacdc48bc64479c87ff19fe122d806b6d17ab542b772ab44ac0b6bb0cccbd3aedcea2dd6c9a8d0a78bdfa5d6139542e8f7919820ee8b09822b5765fdab00cbceeaadebb3c4aa35bef0acd2ba93cde65947fed60aab19bcc4fae794b2d80ab68a355a67c5d6ef5a216f85a576ec93894ce24bd4dcef2cb264da2be8aaad2b0a68ad755e25342c12bfd70b4d2b84f673ac6b0d623ddf3ab69a4db38e1b4468b1b6d7597febc22c96c8f43aea17d261d7ede57a2a9a0a2d6bb8f639c217ff2f469a234638fa1d79fae03f2d73446df2e49898f83f867626c30b923952c658812ce2b896c7724459b32886a0771b632dd4fbb7cdbb80e5c7b5454f8647775f614134869f5abc7cf1feaf77b82cc369da389623aa8bfd1298160f2c979725564279312123a3652e57d48d3fa2c32faa894501e2b79fab14cf798f801d45e1e78c003145bad8cad51682c2b344285f2554731b532c546e904af0fcb05404b4ce5264a315d41a9183ae1526c6c46a2e57a1958898d86237917158d4b4d0458da8b917374bcac0167cc78f9cd64d5644232747d4a57ac571612c2c51c96a216b5a2a913d78d78275c5677eff65863e5eda8a784925342c6676d0c54cdba0134de252225ebcb46bb22b1a2ffc47cfb03de2db8974c008b6d4116c17b46ff37b35424aa9f5ac77867caaf12877c6a307d81171c2c42a60083334087339c24e1aad58461b97565c2144f28ebac869df3c45726acecde75ef77421c8409dbb73dc12d5ab6bb7d2d11393d25790d2532dc522ab49b0a775afd47abe42543bf9f58596c4522b6c2e6faa0821daba74be119f2c1f291de326aba5da55501d02dabd7e35c388b7d610cfe5feda4de306228f732786ce7862688325b3ee7e93595b4c720fbf92db61927bfa95dc1e93dccbafe40eba6423f6c2581a48b28976b0a8bfa659efaeb18c592f5acd8dd6fbba0e99f8c9a577d2c9a58f482e994cd74de44d232c9974d4c51dbfd857a7a43beafae051d70913dccfa7e09d306febefd7db3aebbc4dd8514eea6dc56cbedc19ca6e716cb09e9c2fde5a23af97b059a256c563b6c4926077be614fc7f7be9d93f6be01c2fbf89480746b88796317cc69327d3a4d575dd40a4f0ab2725e2812e84a21c77bfd65a0a5e9404dc1250a2f6d040e62fa0a7a223db0e8e9a68b1e4e71703cd5dcd134088fa6eeba0078f1c26b0c7e0bed1e3ae1bcbc1dca625b3d7f5a3f31c2dbe3c27b629a0fd368fee7b4169e34ef856579c3fd6679bd31c9597e25f7d1a53891c31e459ae2921d4f9925b6e0ab600b2c7f3f90d91de12adc1ad109ce35521dea8bace32aa185ddf95391c4384cfcd43ca2890fe80211f9df0c96fca810bd157c8784162237192572133e3a16cde0678818a81421656bb5711608cee7158bf98cef2ed828623b03e9b0192d42378b0d964ff6c5729a319a9ce65d5d361627a7e98725d96cbf49b6bf4e324fb2391a5fcde5becaa749b615c56e4c38a3f17076d6650da2843ea459b306bb69cfe5ad12439cb6bcbd18df20f360e1aa6b2d075e2f1da7d87aa6ce0aa3423ab99fcc808f78f477f719a9f2539b1cf24472d82d89e4406915960006e83c89f781f041f4985e795ebc2db26a86d3d972910c0f129739253b762bc5a395ec10d1fb6e8f56c6f85b2bdcdf3275daf0a6255fb199b056d915173c10133cdea7e041581a2ff09bc607eb24f3dc86af94f75bc31a82a93dd1afda43b11c75922647fd23e22d471d86099fac11fe600b6fc28763496197647c248e57676182a7e8d21807385d7427675aff6bac3778b5bf54a4fe4c51184673834c2bad575a7ff1027b3478bec67ac29e1de045cf113a3db953ecead7294662f1b69b26de7ef1186fa330e1bb6b84cfdec19bf0d158dceda18b3b5e3af07283574bd6c8b2cd991b668a791a99626a4ea3e8162d1731572fe235931d6a95d4875bc706ebe94c510e54897b9962bfe83a91d77a89d33198fe5375fab705fa2f041a7a09311bcbb7a669f2ad88c77c2b4727bc3393db63e92a3e7cde9af78a4f2e866d860e5b7f716383a8b9368ae78b84035434d595cbd354408ed5e895231afbeb587356c8786b814f64aa177f47ab283cece8d0b99f8a175f37ecae78a91f7dc58bef109025f66e0a427bac82958765aab335996ac44ba63a0e4b0b73b0b43037a5b4908fe5af7bea32ef96def2d7f158429ba74b685c50b174e8a95674c1ee312fc9a8000b75be2e54ded7b5dcfa976bfdc742e7f7eb441eee458f09bae42cbad66a9b3539e399d522219b676afedb527ccb811ddc1d2ba2ef2f3f89449b2e1d478969f5f5e2530b36b97a5e4ef181c395e09b0a367c91dbe8b39b0522bb0952732ccb998825d8859a04fb5b86b7043b49e7b2a24fb5ae595db6504808c26df7d6b9ade8f82d4822f2d3a9e7003195b85e9457e54d5913ff1920bec750276a2415d6755ea6c1fba3c4b703785574a6e05d2dc873fb4a459702e6e48b8493076d27e6e89331472fd238fac41dbd39fa2e3ae13d99bddbaf3bfe737b09e884d1e1d67c11aef9145d1215e30725a449d4291976e6a636f7b044538fc911a315bd63ec482634b18d4a06b37fb2f94f2bc4cdf7116e9e5a2898b3eeaaf327ee7f7c45b8bb5dc4e7487a6917ed8609df4f237c078fc277c784efaf11ded2a3f03d74c27989cc378489a98a7173aa2cd865e2d264d9609e6c259b02abd95ccfda0ac789764bf29697fdd4d8a6a7daba12a27a22cf21877f4389e74ea5d63d9dcc432db3f4cfdbd2f2c15d2f55c2a93a1e3cf758ca7c76c24cc372cb659adcf2c1d6de72cbe998da07f855bb10537bb946ed296dbca93d0313be4223bc7d5b6fc26762ae5dcafc7528cec204afd4a519ded7abba95ca5c1d8b2b5905e82e2c1757365abfa3692c532c755133fcbc68391b635ba661fbaac7889b832128f7c976ae4e3077cf8a6404c799d8b2a74e30cf185731a4b9ceb712f2de5c9f87615fa3c1bec2a34bcfc79279a5df64be1726f940bf92176092d7fa95bc10935ce557f2de5824566b22f1d176de227111267c9d4678b7f6de84176109b34697370d65bc273adaf0b67bdba2dde0a556ea6810394fa65556dbed887247773aef22af947dac5ed27931a667ad4e4f7b652d9fc75c24caf83a590f5860399197504b30f40769d0cff3887e3126bc4e237c9b47e1fb60bcea75bc7a2588d77231fd357a75ac75d50bc77d316d1a74daf0d368bc7909673f0c69a306e9d20ede90ee8f19b15e67042f116c7cbc82b997181f2a95ab82d78b62dc3bc625980607eb34e039dbbca68ac1c214ab054b31a41b3448cff188741996236ff49b231f80a97d882ed3ece84dede598da87fa557b854e32af751cc6905a07df88ca7bada3140be7082c9c23530a6725466a935f526558041fa589603e69de4b049763c28fd6089fe251780526fc188df0633d0a5f85093f5623fc438fc25763c28fd3081fb29337e16b30e1c76b84efeb51782526fc048df0351e851f8839f9897e9d7c2da6f6491ab5dff4a87615a6f6c97ed5aed648ce117337835c14e09e2cebad37936f6295dc6a0ebedd986e3140a2f0b19ec775ba78e125f4a93a953c14e53598379da6f1a6ab3c7a532d26fc748df07e9dbd093f08137e8646f86c8fc2eb30e1676a84bfea51783d169967f98ccc064c30dff94dbb3f4391485915a23a5f2136bc5827bf6fcf371daa10f39c4a85ef473b9cd43c27be834aa6f4de3ae9d355621d52a627ad1b31adcfd169cd27eaf081a968bdd96e4adacd10dd34f44c365cd6ba877bd26b3de603e76a7ca0c1a30f1c8c197d9e4f1fd8a0cb67c534f64ad27c165b76502c46c0f88e47ab84a7547b5ea4103f4f3e3fe93c798bc893f96c3a3a5db1fc7ba32eba79ddfa0286d4adf9467d6dc56ea15eead687603e7b91c6677ff1e8b38762c22fd608efd5c59bf0c330e1976884177a147eb84e38afd6f0adee7c556b8ec0d4be4ca3f6391ed53e52279c2bb335994c224e47f6264cebcb355af7ebea4deba3b0aced0a5d7ececd515d4af6bc5a6739e325ef3b1a0bf94a5dc8dc84e5aed9d86a44df4ba8c76069fb2a2c6d5fcd5269371f8b59778dce3a7ec35e6655c7ecd5c05e6c3a4e13568e58b214eca65476b99eda125ebe5de50077da669b76d7970e7cf34bfdde51f175c072fce3b1d8ba2e99b41b276a4ec0045faf73039ea897342530bb7b7199c70ada89586e718326b778d4636e711226fc468df0df3c0a3f194b9a376149f3e69492e62958467d8bcf8c7a3326f8569f824fc5bce8369fee791a26f8769f824fc71ce50e8da36476f7e62867e884f30a02df63d75705e14c4cedbb346aefe151edb330e1776b84977b147e369678eec112cfbd29259e73308fb94f97a1f195127ca636ef71e7531c568b5d2e2ac4da9a0de24ead68b1f276a017f73a17d3e27e9d165d9bb4e033caab993d4466cff44b5d87f3301d1ed0e9d045ea30cefa5f264a53fe0edfff23750dcec7347850a7416b10177ce52b6f3579096d0be6be0f69dc37b78737f7bd40279cbbefc398fb3e9292fb5e8819f1a8c6881f3d1a711126fc318df0f63dbd09bf1813feb80ebf47e19760f89fc0f03f9912fe4b318f7d2a5eee9197e6dce3324c8ba7e3e71e63d3987b6cc57478265eee919fc6dce3724c836713e51efb88f0bc2da4bb0273dfe734eefb8747f7bd1273dfe731f77d2125f7bd0a43c63f5eeaa7ba743546e7250d9d137b79a3730d46e7658cce2b29d1b91633e2558d119f7a34621b86fe359fe8afc3b47e5da3f5c4dedeb4be1e43ff0686fecd94d0df8019f196c688773d1a712326fc6d8df0df3c0abf0913fe8e4678bf3ede84df8ce17f17c3ff5e4af86fc19c937fcc062dd6c6a5b958bb15d3e2039d16d1622d2f8dc5da6d980e1fea7450c5daf834166bb7631a7ca4d3a00d8b166b33c4d0588dc7e95577600efcb1c681bff5e8c077620efc09e6c09fa6e4c07761467ca63162455f6f46dc8d09ff5c23fc518fc2efd109e7d1c5bfd3e3a75cb817d3fa4b8dd6b9fdbc697d9f4e38efc1f88af9ecc1b81f53fb6b8ddafb7a54fb010cf637bab4c547cee34fa02cb61ead15531c578b7ca74ecc2fb6d7fe968ba1e985ccdeebdbde92a3d4ba5a2e36eb5823ce55be59ca56ca81e3b162e0586de7b191d9dbbe668a6e60fb032e9962d0b05c6ef2b2565ca9174f5500c9faa1e94a39c40e07b3bdce837e108ba06f3511b4c663043d8409ff4e237cb347e10feb84f3cce87b2c33fa21a5cce811cc881f7584fa7b33e2514cf85f34c2e77914fe984e384fac7f4d26338ad301fcb846708ed82cae79e609c46e1698de79023fe978694782f8a7ede2cf13f0af2b366af404e64b7fd3a5368fbef4245644fcdd6f11f11426f91f7e253f8d950fbf24e3ff7132cd6774fe2fb6d25bd52cfeef671bcff89effcfa43dff57e1f923e378bebfcd46f531f12ce63cfff2eb3ccf61cef39b4fe7795e279827d3df35c9f4cb9dbd25d31730adf9f7a4b53bdb4c150dad0ab13446b7a82a535497323dce7f7b11d3e33f3a3df83660dee4bf84c9ffc367ecbcac13cc63e7bf9ad8593ac05becbc8269fd3f2c76781a5923ab882a3e2a9ab6a84a7576e2ab98917f6a8c5c91e9cdc8d73023f96e6fda36b7fda1af9ca62f85e434eda6b6c072cb72e67589d1eb9806119d063db51acc137f35880d39ecba776a2bc8dec07469a1d3a56f92bac47e4ac28b4e6f62d1bf432436fa370df416fd6f6106b78cf84b996f6382337c0a7e0713bca34fc1ef629c5b69386ff5c8f93d4c786b8df0f241de84bf8f2169e313c9073ac1bc146e9b8ce0384d920f7582796bb05d04690db68fa4d21afc08c3de41837dca106fd83fc68ce88819d12925233ec18cd84963c4611e8df81413de59237cdb506fc23fc31cb38b2e3be58b961731e7662f992023cf62234437ca3af9dbb91e21539cd9c5cf68b111469d287bed2cb79e5589ad32ea195c106e77edf0a5cdb5aef25985c3bb74ec8e9b554dd979a6c8cccb3d4eadfb1c63d155c782efb4083729b5eb7ad10236ba38fb60a161158bae29b6f5e33a279290673ded750dc71798c374d338cc6f1ebdf14b2c4975c792548f9492d45798113d3546f4f3e8f55f6331dd4b17d37ce594bea37289ece2e46b60781ddfde802d5e9c66c5bd3b424c07b53b37a37eed4c0135c2335447a6f35e83f0ab064d2a5a2934ac01dda0b6ec1ad946f4e25fdfe8e875100ffadbfcfd5bccb7fa60bed53725dffa0e0ba71f164eff94c2f91e0b67672c9c012985f303e6ce993a77664c9358e244f78f98f4813ae9fc869df1e5a4b081c25fb0543f4893ea6767794bf57fc5840fd608bfcaa3f09f304a437cd6f07ec6040ff529f86f188e611a1c277ac4f1774cf8708df0f623bc09ff07263c4b23bcd8a3f05f30e12334c22ff628fc9f58648ed4a5a50696dc1625fe46d5ecf6f172c7389dd9636cbf6251344a1345377a8ca27f6151345a17457c8241ec30a717637ec30a89315821919d5221f1bb2e1cde3f92934c3eb21917fc6f0c58ae0e182f7e723c01fa0f267fac4e7e27c69a3cdaf9a99f549693fd81795a9eaeed35da9ba7fd57279cb7ddc7f96cbbff4f27980f27e62723f8675cf09f58548cd745051fb5d36702f68e47aaff75788208e399915a8718cde8bc44238b207a17e8f46e0b5c28d5541dc1429ca00bb1873617992f324bb5d957f48e37db5b609a4cd469c225f0d132af95891d34a1e4647277e15bef05b546b1d83ae3fb26785f9f3829c2fbe29c30440ad38ecd4d8ef0ba46f718cbe2858f8db8b5d4c50f3fdd25c2db374e95e6ce3faad5c5fd5e6a1113351978d464600e3045e700bc1da73ebeb0cabab89c3548a32a3d3ade8e58b8bb62f9b63edc75320bf112762b9d3b0e0cda1da78be6785d0aeeb85b84d7ef9d88b21167dc1d71c678a1a3df8ed77113df645b1e2037fb393bdb2b12fbe5565a5716884e0ebbcba43e05a67b44bc7ef166aa203b38c6f254f5c3a8b7c1b280699a2ca0e3ac6f2f9d77e3ed5dbd64016d7501f051fde9119fa3faed30c9857e25b7c724cff02bb9834e32afa7cd8cf8ff1260472cd79be5b3b9de09e331db2f8f9d30c973fc4aeeac93cc9f9febb386db4527987f8f7bcf084bcbf7b8bbea02e0ada5793e5b4bdd30d8f3fdc2ee8e31d92b4d4c7a60b1b9c0676cf6c4345f9826cd7b61b1b9b7cfd8ec8d69be284d9af7c19817f964de17d3bc384d9af7c39897f864de5f2798571f17272378002e78678cf53e3e590fc058ef9b26d69918ebfd7cb21e889566fbfb2ccd0661d9e012bfd9e0604cf252bf9287603096f984311453f900bf2a0fd349164dbc64548e3354371c5379855f95b330caa53e298fc0545ee957e59198e432bf92476192cbfd4a1e8d49aef02b790ce673ab7cfa5c36a6f26abf2ae7603eb7c6a7cfe562822b7d0a1e8bb138d02f8b3c4ce5b53e551e8735bbaad2d0eccac77854fbe5311eab15acf3592b28d009e6d5939a6404ff8a0b9e80c560adcf189c88093ec8a7e04958ecd5f98dbdc958ecd5fb8cbd5db0d86bf0197b5330c88d3e21ef8a095eef53f06e58ec1dec37f676c7626f83cfd8db038bbd8d3e636f2a06f9109f90a761820ff529783a167b87f98dbd425d6732ef4d8df00df9835fd5a51b8b4cefeaaec393898b5138b119585c1ce1372e66ea24f39da88f4c46e52db8e059985f6ef2e997b331c147f9143c074bfb47fb4cfb73b1d83bc66feced89b138d6278b7998e0e37c0a9e8f093edea7e0bd30c827f885bc0053f9449f2a2fc4049fe453f0de584beb649f2dad4598c6a7f8d4b808d378b34f8d8b318d4ff5a97109a6f1693e355e8c093edda7e07d301467f844b12fa6f1993e35de0f6b199e958696e1fe188eb37de25882e138c7278ea5581677aedf2c6e1906fabc34803e0053fb7cbf6a2fc7d4de9206b557606a5fe057ed524cf2857e25afc4805c9406206598da17fb55bb1c937c895fc9155822bfd467225f8509becca7e0d598e0ad3e05afc1045fee53702526f80a9f820fc4045fe953f05accdfaef2eb6f5598e4abfd4aaec6ba3caef1d9e5b14e27980f425e1b49cf20648d2e003e08b92d19cde30c42d662b0aff30bfb204cf2f57e25d761eded1b7cb6b7ebb1c472a3cfc4d28009bec9a7e046acbd7db3cff6f67a2cf66ef11b7b07632c6ef5c96203c6e2369f2c3662826ff729f8100cf21d7e211f8a41bed327e4c3b0dad15d69a81d1d8ef1b8db2f8f23301ef7f8e471249617ddeb332fdaa413cc3b78eff3d90f7a1406f97ebf908fc6583ce093c531586bf0419fadc16331160ff965711ce6700ffb74b8e331168ff86471824670ce10eb34c23fc46bc23e894be4f840fac6141ed5318bb89889e9ea8f45f874f51ce665afc454f4c5a6b19fa88b761e3b8f2713ed5c7b44f0493ac1fcf48948ecfc78f5e3657efcc95889f1641a4a8c5330e14fa541f8662c7778da6fee702ad61079c66743e4349de04cebf4d964044fc6dde4744cf0733e059f81417ede2fe433b136d30b3edb4c67612abfe857e5b3b1c4f8529a12e339ba00f8ead59793611267f5eab918ec577cc23e0f83fdaa5fd8e7eb0abca1d669a48435cf7a2c5560785b7bf55ad285d8eba210eb1d635d323a6005d3162c077e230d39f00558e4bfe937f22fc4d47e2b0d6a5f84097f3b0dc22fc66a02eff8ac095c82097ed7a7e04bb15cedbd34e56a9761bcdf4f03efad98f00fd220fc72ccc13ff4ebe05760558c8f7c5631aec46a021ffbac095c8509fec4a7e0ab31c89ffa857c0d56ea7de6b3d4bb1653f973bf2a6fc312e317694a8cd761558c2f7d5631aec79ad45f45346bde0bc5e922ab942c62856ccfa61d6a9ddb60d8655eb6581d3fc7babfc0bab34e94e5fc8abee1a69beac69f86652a2ff16b98bd5390b78fbddd8059f9b5cecae39bac2cb19a90bcb661d74caac5df73e45781eac48e4476cd644ed393339ab666766e3b5927791489bbe596c446611797eba41795c09ff7a60726a998f175f5abc55d2753584b71f35e6cc9f1ba87c28d18e96f307f8221da368db3deb169d558b5c1e5966fd48938b7ad2d96db61bbb58dbe8b5f4f973fdd8459f9adcecadd5c5642e6b69d33458c550b1bdd5a3a6308de899756e05b5e2cbb19b3ec3b9d65bb27157f53c57e5e954ced35e03fe6a277bcd8760b66dbf73adb0a5cb6cd17b1b3465ac6cf36349b25b76296fca0b36473c0f959f41dbecd6895257523e39b0045772faff7e0e5901d6e052f4b1a45fb0ae67abc6599bebced368cfa8f3aea53934a1bf398fd9d3b1372b5db31fbfea2b36f1ea157f1ab078960b855763f40a508ba921d22d2a13e27492556efc0acfeabceea92664b4bf1538c7f0e77621c7ed271d89f90c32c514f59287a7a56cb3c63b1a8c1701f58297cdb0b0d584e7a21721746e4671d917c577a9f2e6cb5ed6a9096155bd70ac586707a2be295e8f03d2f56dc8d59f1379d15bbc68d573c252e12716c6f276ddbaa6a9bfc6a99f481d87c3ff5dcea1eccaebfebec9ae98a1d4813e6c745e26a83f0ba32349f71c6217e273d31782f66e93fb018c47c6aaad8dc9e97c7d11c27d6d3b032279e77a692e3dc87d9f58bceaee901d4a2a37cd2559fbe1fb3f19f3a1b2731beade27c99f71533fbdbb3f345da5923af9658f9638925cdb6b95ec660038b7ea796b2947800b3e7579d3dfb31affd05b6473a7b0c7412ec6b0b9b6a977556dcf191033ffd0ba9f07810e3f12f1d8f3d03690952b7111fc26cfe0d6bfd7af3015572f00d44ed8d57613c7bf5082f963d8c59f6bbceb2c9886525a2dca8922d5e7be44af5852d966567b9a7b23ff552f211cca27f63a52455ad4ec5aabd3fa65d0ac65248ddd247314bffa3b3740ac3269de8720aa705704773ce64b688e53a51432db3f2e9d8d22375ab1ec3acfa23999e2667b8b09e532262a1ce7a96a7c3d571da544e19e9b3ec71ccb2ffa656fa27d7d784e7a1f14aca5473ca27301bffa7b3f1b4666b5b3afb698a84841af1bc979e9a2279d5aefb366f5fcd9318f93f75e42b88c9fb6bcd52d6c19fc238b1161a4ed3d05c937bd04aeb21951aedcdbfe397717a49e9b6f069ccc288cec2391e2ddc47c4e4ba247a1e82b2f719ccde163a7b17117abe6a9b7829f1d341e0598cc00e3a02a9d404ec343d15d403e8ad7a0eb3aaa5ceaa591efd788668f9d6c8fa7573fbf0f398ad193a5ba7a6108333c513b1dee8ae05242fd78b7d2f60f6eda8b36f171f7555bb278befefbd4ab62c71ab8a639ef562d38b984dadbcc599db3fe1e7a913a532ca9e8f9730fb5a63f67969a53a7bbea377f9c87dfcfa68baeaaa2f63f6b5d1d93784c51fdde23ddd145abe8269d956a7e5bc9462a128a558a0f4bd5731abdbe9ac1e83a62df5811a671e11fd0ce9745623e7e4a6679cfa354ceff63abd27256ce3f11e94bdc4284395f808e50c562dbe6110bfbf367d6dd6d7317b3a60b5e5f86984b7bf178a1a64bda60e91cc9838af79ad4aa3856f601676d459e86e95ebc7b8e708dfe3e3b9a5b2572c36be821ce77e13b3b193ce46f7c811d6f3908c95a9e518a95bfa1666e94e3a4b6727159bee190b763a54763767bcbe8d59db5967edbe09e395b62f9eba97fe1d8c46171d8dc9689911bb04afb96a98ef621675d55954825a145b5b8e9f829369f3786f17a5eee7ef611cbae9388cf4c041c5a9fa8255ba7cf17d4ce3ee3a8d87254c99d111a20a7195cfcb4b4f8de5034cd31e3a4d27c4a969b93ddda979ad28f5a3337b28d2cb87982d3dbdb5c8f0f4522dbf255526de4a36ada42b1d7c84d9d74b67df78d43e7f3d22fe6bf71f6376f4d6d9e19e338dd54766185617f904b3b28fceca3d3d974776db39f66eec0886fae821eeafb152a23343bcd8fc2966735f9dcd435d31eb9ead4397eb7d86e9d94fa7671e4b7e86d12c966886517ae6ea7d8e59d05f67c152d6bcb317a107269bf2d43b5ea87c8151d95947c53d7aac42f492ab442dc3525c7a72932f31cb0624d386f35a03f45f8b4fddd2af304b3393499bd82c54dbc70b58bea7d22dfa96170bbec62c1888d543f4617af143681f763d5d31f40d66df20ac4f327ef91dfd42a75b47f585543cd7c0beee192fa749ad6cfb16b37a702a7d615e66df06b5cae63bccc221c9a43c3de1d44ac5c4edae56d6bf48447c6d5448b17b166bc43bbc0e94c31b5591dca6722fbba93ccb76947dd1eb3cfc6a2b36789a286e2ab9f82e06f1250c6d610f63899fe1f2fbdc76f61f59c5dcbb244c17f2ab647ea3bc355b10b26780f2d645b655e7a9146fa9fd1e1259a12bc3b341290ead4b6cd33264ff8648a495b448c9b2480fe7a4b7374b87f158ed2f63b5454e16b771548ade94588be13cb41df43ed433862c4c1d3add6d017bc93e8d08dfae6bb90866a16882e38b1a1286ecfe30873be4314280aafd24145702b2009db8dec2ddec296e75ccee86fdd092d92aa3452e8f912c4a6c7c87934251abadb5c0d9b3c954998301ac0f05425e975408475022e49bd7aa46dc6c3114c905948aaa199f1ab380ad0d05b0da7651602329817513497539cb65d1d9446106f76a8728b85194e0ba68c07181ebac97f88063a3b85a1e0a682b5814da686a6f7326cf99d6ef4a396f4dcd68b0bd2e0ce0beed18053786125c0f511fad4fba580803bc7340a1904d09af1d48aa0b1cfd4b61c0b4d38028a61c4a4c6d00a668d77c18101dd63b8a289712d18e02517da8f2a8273b45e18ca584d3cb3a59d054e757c36ff610ff2291e937323e919b67f30b65575018006e0309308f12604fa69a4dd1d5997c556aa5251f8e535688c41996cac58343a3f8c651e26b0df22fae261fd00d03a027bb4501e55367f00bc4484c74b7a770f8502d4882e383f221b5f0240c80cee8110554400988efb0a86af033d80661756353b593cf542b17f9d322e161e5c2dfaaac00c30091ff2888132821f25e3e088ff790f165ad154dfba99787bc6edf0df4994da444d941e669cadf36ca0a4789687e8701d56690b74d0aaaf1cddb9270705db527c354b1bdb76d14dc64eac637040757a54d15cd713e22145d7f1706785340cfc52e94f0da8312353a0dcc9e00160650db40ed6c0a75d7f57c91fcd6ba76ee28b41eaf13218501d88a165160bb06db99e89c2e541eb2fc6c34e8f3df8dbeeb9a57250a45d061ae68b4df310a6d776a6f9b211ae08d22f0e8d639b18df53080bbaa7514dc1e94e03a82641ad601123eab43c19a4a3f1c678f9cd70831e16e076cca88829b46098e076dafd4b3835e130a3c59c3a278a653f7cd2eb27c6a3a4b7eebd730009c2dda00ad325cc2ddb351539f1be48d3a3e8ba913b39bfcb5e26a83ac9e3866358db01e314ef342382b292be5ee9fac84c54056d223ea599e4743b3529c5a939554a53ccb677f4e9687f952599e4a88aca4ab7a599eea375929e527599e7a20b23cd5efb3929af993e569ba4b96e786bf4e677c824356cc706256dcd672967684234bdb679d858ce666c5190ccf420608b21274b265a534f29795c2705796a6988f4ecbd54fa7cde5d37267fc7f3e633697cf989dc921f0afd1f01fbbce318bbacec13dcd9e20cdcb81f85bcb8cb54a7e970efd6274707ed14ed52d74dab471d43e3a2663602a3590b16016cb6c9370e68512e70a80738e4938c78512e7e100e75c9370e68712e7b500e79ed49dc1cb659ee8c46a97aefc31327cada8f0fdc4a2f8e605e18dab517f84ea2f67e359011dcef65438ef0638e79b84333f94382f0638f73209e78450e2fc2bc0b9c0249c05a1c4f92ac0b9d0249c6343897331c0b9b74938c78512e71100e7229370e685126725c0594489b3bbc459263b39dc1b2ec0c5fc63e9406650816c032aecc5a680cc0d21c896006409f5dc48d53f996c5f317fbe4e3c1bbe26e55e20a92fa6043b80c1cee3e4074fc20c771080bb0ff514c178dd1f501c694e4ad6761f0832807d29517692280b82eff8e84305ef48e087fb05016f62f0f0c812f17d00defef4ebaff032dc9988493b39c892f1bf00cc2526c19c104298ff0630979a04333f84307f0430979904737c0861fe13c03cc02498792184f93580b9dc249884436864307f003057980493b0554e06f33300b3d42498616ce17c0e60ae3409e6c410c2fc0f80596612cc492184f92780594e0973a48459653d54258efaef437bfb5e3861ceda950af931a0bba38212795b817c8d985769cff35c2de085af9dde1e78e9aae6ec6c73eeaf4ce87d9ba9507605deb79a12653f5782b77bd4ed7ef73956f2debe46832e0558d750621d1e938f960a613399fa0edc34eb3f4ff4eb452f7b238bb7e334a90f93155ac500766510d94172358030a21c0072d6032951eeacc95993fd6e0e29da2d546867022f5ddbbc5e6a8bb23f564e88721b15cae38097563567f95f287254f5dd77c24e924164091e78657590e53fffb05274c7fd78d52ac2f29fac5a750dc0ba8eda43a78aa58035720114ff5a001f635f271745aa6561f662bbf055f65b82c45e13c43ecb63adffd532f0525143e557c33c1bfe3480b036088413b63b844f038407d1ef62c4838dae74559f7a0e5ff1d20d60aba3ff10843de7481ddd5f9b0febdca22701c47a939656914ec826c3b91b289b1b4cc2493a83980c6739c0d968124ed2f9ed643837039ceb8359f8971bfc14ae9fa9f03d0ef2ca83cd998719c6b1a029c013370481124ec49e67b55d66c96d1e56592f6d08a2042743793cf0ca8df46394707467395b2bd04d131b41ac95a2665ac70a4b44cca6682198e2da01c03c24883eca06b155487dd368a4da25431d753dec7994f38fc8d07e0fd01e6a2adab1a1447b0d407b5810dfd9c20a266529697fe5e40811c6ab40a1747810b33d925dfe4758c2932dfe2b043e7984493009e72191c19c06601e69124cc259c56430f301cc4d26c1249cef4e067314807994493009576290c19c0c601e6d12cc30ae3e9f08601e63124cc2314732984301cc634d824938c5800c665f00f33893601256dac9608e04308f3709266143920ce63000f3044a98992cb621e96d3a3661f94e361d7b0968609ed89ccb09dcc31984b928d960c608e0ab27990493b07c27839907609e1cc4c810ef8f5f0fa668053283830c5f6f80ef144a7cbd01bed8e9d85c58742f99304f89790b00dd1cc4aca2dced6e56d1a900e1a941202cd8ee10ce04084f33bb3a44d8ab49561d3a1e54874e0f7a4140f2634284354db211a16a80f68ca0e6c645c7d7e11031f9c83a19c4cd20f99f69ceda9f30eee4311ea03c2ba80a52a20fa98479dee67400f46c93b62a1d1fca5ea49b00ce734cc249ba3d0a19ce2d00e7b926e19c104a9c5f009ce79984b32094389f0038cf370927e9b783c870ee0d706e310927e9c76ec8701e02705e60124ed24f3191e15c05705e485df34cee83868b846afc938a8435cf0554402700a01705b10becf6f4eda08301bc8b29e1f565c9ee81e05c104d38d3e3572aa81b4167c7252642256cb19341dd00a05e6a2254c2d97264501b01d4cb4c844a58c293419d03a06e35112ae14c1032a87b00a8979b089570949d0cea2e00ea152642259c074206b50040bd9212ea3816db4bef1c459acea21f36b60d717e26d9f9edf5e837ab8bc17e75a491904715097c844d45c255e62c8d0de3b70df2803f5f1dcc22ed66f84809d922edff014fbcc6dc6586611c54fe10a0bdd69cdd9049770a214be68d00e636936086f11326470198d79904338c9f305902605e6f12cc304e7c6800306f300966183f61b22f8079a34930c3f80993fd01cc9b4c8219c6bd8d8b01cc9b4d8219c64f98ec0360de6212cc307ec2e46800f35693608671dbaa6301ccdbcc9e101ec6cf950c035d1fb753e2ed20f1da3b80d99f8cb06557526e5b45f6490806fcf20e4a707d9873a7ed725621a63194ba12bb73f372425f24db5db63bf0c53bcd5d9c10c6edaafa00b4770535197cbee8d35cebea832fb45eab1321867932783f90fcef36e79b05849d1f64c97e1df0cd7b2851768c5b04d5d3a16b4b85ae05f0c27b9b73b94cf87708e90150de17c41810ff16d6f6b31c7b19c077bf195f1ab287866b85c7da83bea49e4936bc760ec81f1f3069476ed2ae0e324f1d0d703e6812cebc50e25c0a703e6412ce71a1c4b91ee07cd8249ca49f6626c37939c0f90825cec12c7611ec0cb681f1695e8d4c2d435860bdcedbef7562414229b33fe954154c5ba83315e4eea0ec7fd4a4e533e343b9bfe71d00e76326e1cc0f25ce0b01cec74dc239219438bf02389f3009674128713e0f703e69124ed28934643817019c4f9984735c28711e0a703e6d12cebc50e25c0d703e43893343e0549687af4bb82b00f56c50c31545a2fadd68499ecaf8d75617cb75c4e5621d7145a8872b0e04409fa3046a5b5361b57c08310da0c2d419607ade9c3515619ceb96055ade2f043109466d6f6a6f00600f88a987c2be2be23ae0972f06b10140337c43701115bc5d00bc97cc5d9e4258a1219b56703340fb72107e392178bf244bd4f70078af043d6456cce68bcf31d63495d6f3855a6be4d512364b18453a6446568ef70785cfabcd598e07b62a7d3315ca7e00e56b4124f149c12771b2fcf13190c45fa7ffccfc3a06275a917f669e0c5b1780ed0dfabae31acd66a54516933256c6d48e567ceb283e4e13bea65f3b00f34d736755128e2e92f9690f9037be65ce6ec5615c67361a78e9db66cc1f2a16c5ce3a91fcb9b86a5ab45ba8d01e09bcf41d73a6aa122678b27ec99e00e5bb26cdce205ddb435634cd0538df3309675e2871d6029cef9b84735c28719e07707e10440f66729dc179a15c13d900607e6812cc30ae893c14c0fcc8249861dc15e64000f3639360867157987a00f3139360867157983500e6a726c10ce3ae309500e66726c10c636b7d1580f9b94930c33852be1ac0fcc2249861dc15667f00f34b9360867157980a00f32b931a94a4a3e5640dca7c80f36b937092568fc87096029cdf98849374ae2f19cea300ce6f83f878ed78b6bd7dbc761b8b22fc2e88d566890731a633f722e8a996d03ab17711691ffc631122c897003ffd3e0c9009ab5164904f04907fa084dc9f397737aa906b261730b552d299d7c245008460c9d64aae04607f0c623b3305567dba9e8b894e738857670d63f57f21c0fb97e61c910fec230f6413bf7e0785d95f29510e1428e7b07ab1289a4fb9a9143343f8eb516f5d2ebf1e3c4d7cda61adbc3fd33af2edd008779023ab70b501807f0ae6ab03e3b7a3b975ff05f87e3667ad461873cd8e20d7fc1b25ca6e09502a4b496ba693a92a4da7038c7f377bab52c21e7cb2ad4a1703bcff30771d07e18032595efa25c84b7f092203c0aa4dd10c80301f25cb0076001efa4feacd7417ca5e27b5d66d8ef04c9eecc35715da09f8dfaf41f85f6e930f968bf6bcbd3d4fd837e17b0a60fc17f5e007075628026ed68f2e932d1b9c0460fe66ce1a22c28a115953b217c8177f0f02656e9c0e8f707731bf0dbcf2df41f4d2e76f77bdf4f500e17f82e8dbe4de384354771a8512f3ac57ca447eb9801d2cba8ceb58bda86bd6b2306f32311580fdc39ce530619c47b70740f9df20565de607df3344b6e0650380f73f7316bc104ef4225bf0d21794dc7f9ab401d444ca8a10d90650bf02cf643b1884737c2871de0070464cc249ba592e19ce3301ce1626e19c104a9c9f009c3b9884b32094381f01385b9a8493741b7c329cb301ce0c937092eedb4e86b30ee0dcd1249ca4338fc97096039cad2871aab1f1716c7bfa1acb0280af7510de98fcc46dc2d63819cee9a015d4c6249ca48b04c970ae0538db9a84735c28719e0170b6a3c4d95a08a8b0f2497bc4874b0edf0ccc1d41ded89e12d77016db4be99c4860cf1bae167ff30ee24621728600cccdb277f00a6066d12c2ad86301ec0e4194e36345a5677b99e3f601c0d791125fa29eccc0da3b64c97e2bc8253b51a25403677cd46716e323397cbc67b5183aab0bf5f8ce19c01b776a4e6f748eef84713b9489c01b3b53a2e42cec2f4fb9471ae1f666fc3a57addc3159307c5304bf011eda85122bffe4d542514a973335531d9b0643f86159b2dcb23500d99512a49fb996a45d1b6465fa77006d3753d19296f16468af0468bb53a2558bff939b80302e94fb22bd0260f630096618e773bc0660f634096618f7457a01c0ec6512cc30ee8bf42280d9db249861dc17e97600b38f4930c3b82fd20300665f9360867189dfad00663f936086715fa4db00ccfe26c10c6357c8eb00e6ce26c10ce3ceb06f009803286126bf9297b01c275bc87725e89ecba4c498a9c1e86d252f61d392ac9b6e5f80772075375de2618d0231fb9db020caa002b90d801c640a48c2ea1119c8b301c8c14174cac526f864bae5c2f88dc0f100ed104ab4033568eda1360e6f1d9b2bc6d76be3ce9623f45db2b9723b80327f6810c372c955a0c2d8b3940b500e336916e778cada2899673e08700e3709677e28715e0b7066998473422871fe03e01c6112ce8250e27c0fe01c69124ed22d79c8701e00708e32092769c70819ce9300ced126e124fd021119ce5a80730c254e7ea2763a0a5fdba713c0946d92d74da4ec9623f3ba3f00ce1c93708e0f25ce1b01ce5c9370e68712e75900e75893704e0825ce4f01ce3c9370168412e7a300e73893708e0d25ce790067be49384927ce90e15c0f708e370927e9f7d9c87056009c05d4cb0be05706388746a180fbdb02eeb596843ded640b608682a18c09945887b9b0ae64b16341c98f1a11a2266b399d0a504fa4449d1be3c118483e83feff978fec5c0cf04f0a62b5dc44b6bd6d33f91cc883270731a4ac3cb85e782dcf81674a7815dad1faf07e446719f0ce5dcc598818c6e9dfb900e594208b34fe2217c66b0365c243f579eb2c2920b00fea8ca242bd09a0ded5dc855f8413cac86a0b0f83bc76374ab46abbd4b1ae6c21cc05d51c006f77b3273b122e63209bec580492fd1ecd5958397350c2e93964fbc8d700945383e82580fbc8eb72cb70d750df01097f9ab9931e09133d5981b433f0d4e9946887b8aa55550cee35b2bd57a90a01e64273a63e8671e54811c80c6604510b501ecb937bb96b338dedafebb01df0d49926ed79473afc4286331be09c65124ed2f102329c07009cb34dc2493a9a4586f31080738e493849275690e1bc1ae09c6bd2e0e078cabd48c80607ef0525fd9e26e1cc0f25ce2b00ce7926e19c104a9c7f0338e79b84b3209438df0438f7320927e94ee06438f7033817988493745b2c329c9b00ce8526e124dd589d0ce75a80736f4a9cd1dd96b7a78190f701be45418c22f18057094f54b2d7c947c2072f02e0150531e50c4fcab05f134ec421ec37da870aeb1480b5b8f97778506577f8e68c8c038dc81253408671f24d070072b1292009c788c8402e0720f731052461ff1019c8fd00c87d4d014938198c0ce4c900e47ea680249ca84006f23000727f534012b668c8406e01209798029270861c19c85300c8a5a680241c272703791100b9cc149084fb7e9281bc10803cc09c49dc61dc767a0840b99c12654fe6651accf850ee01b62380b9c2249861f4cc160066a94930c3b8217a0680b9d2249861dc109d01986526c10ce386e81100b39cbae73cfa7dcc391268a5f532ffde167f8d0c1ed95c613e6f46c1ab30678100610e49b6402013f8e12a4a94fd997b89957eaa35fcc81e17564ddbe9bb850aec46e0a3ab29c10e66eef9ecf6ea8be852562e908f31c6cf47c358242d02debb26c85d1b6ca07cd100cf530bb50dcdf0eeed7d12c05a69ce22813096f359201b3830e81543c9e7b08468c972d83ae0a56b9bb31650c8f8c2ab958ccf1a264df083a850760128ab82cc472b2d251633fe05d846e6de7321b0c5566495ab3301d6ea20a6c78c0f7e6e11d91cf6c341ceb92e88e66672bd9d6343f9c9a805c0136b4c8219c6857ffb0098b526c10ce34773e70198079904338c1fcd9d0f60d69904338cc31ab301cc7a93608671d7a43d01cc06936086718c681a80d96812cc308e11cd0230d79b04338c1d72bb0298079b04338c7d475301cc0d262d8a262d82c81a949300ce8d26e1cc0b25ce3280f31093708e0b25ce6301ce43835889c667c1ad075d6f81eccc45866f3e8be23b8c121fff8cf342ebc4deb39b8be2bb71aeb11eaf11bded878871f54a71163e8c1900e3e1941807b0e87e71f630da724b5dabcc13ddbd9562c2c254c6f737e24317a5b277bd9ca945800d2184bb1cc03d2288b1a054b633cd0be5ee71bf01b4479a8a96b47d4486f67a80761375ce1aaf9c5796928e054d8e10613c0d94ef4705b15b1cc4e86dcf58c2ce3ab23d634b00dea3cdcd0008c78ec832808f4106700c25da8102ed6ce19f8b181ff8ad90358172214acd615a2b2280fb7199f5b72d7ea675acb0c49687b05ed016003e36881c169b6e335d782cf1075076a7ca615b812ce0b8a0a7da249f098471b7f8dd01dae383e8d683cd02d5c68ab6bac2dd0ce80592fb09414cb9853013e7aee105bb10803d9112acfa04cf38b6bd7d82e72a80f02473667e867162430140793225ca411e5016596172210d6c81f597eaa7aaa72df1a75295f8ad41b1740a25e2decc396db15674f2ad89ebb3611cbe3b1800dd6cd2ee7213297192ed2ef70bc8024e350927e90244329cd7019ca79984333f94384f07384f3709e78450e2fc08e03cc3249c05a1c4f910c079a649384927e690e19c01709e6512ce71a1c47910c079b64938f34289b30ce03c2788967baef86d1ff9b07311b3bb47c2dbf95105109edb9cabe102cb2bc9f659ba0cb482ce33679fa5302e489800509e1f54c2b63b42b8a00d325107d025f72b15c26740c2de12c4e8104758d1b46388ba1df69ecd9700c60b821d20dedebf29d807a0bdd0d4b177d28a11d9c0dbb700ed45a6a2252de5c9d05e02d05e1c44d194b7dd8d160d07082f0962ce32ff7646e07396c9e62c0d04f82e0d065fbeabbe1966effb19e0bbcc9cfde8f242395a791980b9d52498616cf56c05302f3709661897619f0f605e6112cc302ec3be14c0bcd22498615c867d2e8079954930c3b80cfb3c00f36a936086711ec70900e63526c10ce332ec7300cc6b4d8219c68da82e0730b79904338c1b51dd02605e67f69a22c2844fd63e1f03062fae37774101613d94acf36d32407b4310831a639bb28272d1176f4f7c0dfbaaf767410670a349d310c653164e64d310ee07386f3209677e28715e0d70de6c12ce09a1c4f97780f3169370168412e7bb00e7ad26e1245d254c867329c0799b4938c78512e78900e7ed26e1246d7692e1ac0138efa0c4a976e2ce0b7ea08dacb23e17c0bb33e876907ef2cc744b48b5156a8d38e34f9336317fa6427b1d6807dd15c422413eb9ab90f1cdaa6aad767a856c0fd94b032b84c05221006e6355cfc23c317608f0debb4ddaa78e74da0c19ce51c063ef310927694f3d19cebd00ce7b4dc249ba2e830ce74100e77d26e1245d224886f30280f37e936aa1e3297b3dc96aa17781a2e8019370e68712e74500e78326e19c104a9c7f01381f320967412871be0c703e6c124ed2ddbbc97096009c8f98849374bb69329c87019c8f9a8493745e1d19ce3500e76394384730f74e34bc2d5f6ef1e0eb87949dd1455bd89487a9d65f7562949e74cdd1eb11aa59a1a066fa3825f0ee2cfe3c1267ce4a06926cb1eb60e0b94f9802328cab867b02904f9a029270262819c85d01c8a74c0149383f990c643600f9b42920094b773290bb0390cf980292702d0719c8dd00c86729410e73559356b2d879735e16b8866fd0ee0a50417a8e1275ae0b75230a125f0b1f3b9c1750fdf431aafae90900fff341cc734eb6239a70f49eac1b7a0480f982493009278d93c11c0960be6812cc300e90b405305f32092661914506b33d80f9b24930092bff64303b0198af980493b0494a06732700f3559360123602c8607603305f330966183f1b3908c07cdd2498849b6090c11c0c60be61124cc24d30c8600e0730dfa484897fe664a6f5bb92d91f8e2cb60470c1e1ffccc94a1605fb1625d87e02ec3ceb8132312b14aeeb6cb6af7091adf66c05b0be4d89d5dbae9f61dcb2250724fd77ccddb52e8c0b67ef045efaaed94bbe095b4d6499c0dec073dfa3c4db15145aeb45a1c467dedb5f390e6855f2662a88d5c047dfa784d89739bb9ecb45e1c3cbf83c579e5a2892bdc24bd8d334880a6a6fe0991f3467f1e4dcaf96300f25f3cf7301ca0f8398fb046ba658758abc3e4a96676682e4fe91b9db6484718fdacec0533f0e22d16303cfce3a6918f7171b03bcf493209aa3a9d44909c793c87cf40200f65353c186f1bbdb6703b09f990a96302b2003bb2700fbb9a960095b4f6460c701b05f980a368c93797200d82f4d051bc60a567f00f62b53c112f6fe93813d1980fdda54b084635464608f0160bf31156c187b564b01d86f4d054b381a4006760500fb9d19dbc7148bbe55ded05d25c455d3d664b750a13d1af40f7c4f89567d41643c6b860fb09079e629c0337f30a77b258cfb3acf02287f3469e30dd2ddf4c8c6f8678084fd179370926eff46f7715480f3af26e124dd9c900ce75900e74fcd394fcadd2d1dc66f351c0160fe6c12cc307eabe13801b355864bf8cc18e1d34532e409b18c45f7b9cbb6cab10a5143e420caacf379a28ade605562c7b225d63f6f31b0ccfaa7bb1e11fb44ce601b58adb8cae5950bd9d5d65dae593dcbe54bfdffc61da29574882c518f986a316fb09e59c42a44e81b5911b3f7f15b60fd5653de1a05922cb1fff942eb5a23e393357808eb2c4dd6b03a61b1739fbfac486bc1c9fef86b9dac3767495dd50761e7c81a4ca56573a9d0a4ce7aa6a508c7cedcb2221dc0999ad53047346dea8556b62fd8dfe7e5d11589749631c4b59b2f2c2bb52c2a15c7e226193923adc72205d62fbbc994ddd458ca966bc8aae599ba9e58268f9ff8d2fece2321a24f955569f3ac4416d98981bfbf4accb9ab1052e724b434b17db897b68f132b39fc7bb2dbb5fdffe0f1de42c67b8b9cd1dcdeb169f0bdc41afd02434e77399021ca0195691befcf0b99bd5b6985c82737faf2e7b6225f82f22a45b83963ccf4e5f4d9fe4f9887b5c8c94ed597bd6bf42ba52fdbd2ec7e3497ec594958a78f07b7cdd1a76a6589a67cc14ed96b18df81273189fea2fcc6a54db5ce560b5b2b85d46aa67e7819c9eb883c0bfa1725cff6226fe0558783440f0f1754fc7f394534a7c8e539c56f8ec494cb13d3efffe7e569f272feaf67a49d755e62bd6b97991556ddb64e4cefac637f4e6bc132fe1f5493db8804a10300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/58f2d44aac40dbc44a7643fb1367002c.asset.meta b/Assets/SerializedUdonPrograms/58f2d44aac40dbc44a7643fb1367002c.asset.meta new file mode 100644 index 0000000..3bc82ac --- /dev/null +++ b/Assets/SerializedUdonPrograms/58f2d44aac40dbc44a7643fb1367002c.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 47a4d352499673b4bb2b6c37ca917c21 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/59ed7a5d6269dd14c8658bca5d8f46b2.asset b/Assets/SerializedUdonPrograms/59ed7a5d6269dd14c8658bca5d8f46b2.asset index a0048c2..329c7a9 100644 --- a/Assets/SerializedUdonPrograms/59ed7a5d6269dd14c8658bca5d8f46b2.asset +++ b/Assets/SerializedUdonPrograms/59ed7a5d6269dd14c8658bca5d8f46b2.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9dd95a1bc915804b80101830b6318bf1c2620c6db34860c0db8c132fd8c3cc7809db24f14cb08c85912d30110233936d9299cc64bbc84dbe2f0f9117c84daef200b9c843e42d92734e57a352a9aa5b4dab243519f4a196baab4f9df3d7a9536b435d9cc14f640cde56d802bbc726d8327bc9deb22df8740f8e9bf0b2bf39e79fb22c1c5fc17b12ae8db17e8f3bf16724d203eff3f06d87e5e0ce5db606c7345d5f6429f83c0ff7a6e01b9e5d87df14a48a34c04dcbec3e7bc21eb3ee48a7878815ba69879f8ba05d912678bfcb3e87ab29520a3389d3a56e785b842b3b746d139476d23d639f91599b706d0deec9b20cc87c41129bfe1a65f481d987e3fcd8c08f67e1b7997faee7c776214d23fcc6a5eb27f8f904ff5ec76534f1cf623eadfc7852c84795de4dc62941962323ca8fe7b82e93c277d03bd22fa53bcfd34d09df1d9978fe2affdec88f1724b917b8dc3f4be9fa24b98ebdfdfcfcb4904e3cefe4d7c48f03527e033cbfff48e906a5fc063576389c2e4a722fda72ebf6a5744392dc210fb997f8f919e13b1e3bf8f134bf3e5b42f91ee3c74e76781fe91264c93e322c3118b619d48f49e98ef174d7a4321e91ee1fe1f767a474f2fd6efab6f06377009b7b04598e8c183f5a92ce96ad7343bf94aec587ce6dfc782680cebd822c4786e3db97259d2f739dffcd0a7d4f932efab5246f9415fae8283f8ef1f3d785ef78bcc2cfdf90f21b97e45c91784cf0eb3785f4625d70ae2beb423442adc60710c7936c9bc509185a546af3e6dce9ddb0a1e8467cc39f11ca36074dc8360850b42ecbd476e5a0e64f295b9733915641ef7bf49e841469127aab388bbf176581ca65e095129ac61d38ff905a566c1cd37065827d0c47bceb3914f93378154a59816c33d0bca6d812bc6f93bce7a076714a2f93b01995ef590099762bbf09671ca0dbf03d431a2ed2fb1e699a22ede7e15c8efa1c5bd0ebb80bc77dcaadd8f62c7c56e5b9c491a9755437f6baf37697c229a6fb600d6a1fa7b6fcbb12a9468920fac65bbc1a36c4a927f687a292f88ea11d64b0719ee732260959a4e0dc148b53fbbd5044d0bf8dc516aafddbe63d0b9d3b375bd464b0b8cf9205f912b6e6b2ff88fee5abdbd142d3aeb238752dce7998e60616e55991ae2209ee2644a30d095454c61f51e1a7aec46205f1dbe9d294ce7f013452cb54580034545b820ffbf09b81c44fe13d09b767789cc33a3647e664e16c51392550688c501737a45eeaea60d7a96037551ab677747183dd7460571e36fea809366b087ae9a02358af2248bdba4f8d122cee86399feec2bd1b40628fdad65db85fd56d73678ac38c7189a99a670bf1ec577626fd69a423dca0227cac3af1f8701e8a9dd8ee923db4cd359cfaf5cfa88a1e8d0c578dd25b867376377d8eaea6a96f67d7b3091e077364895b4a77aec74bf6d276628a1313e5d14b47bb51413b81b44fa8546d9654452d3582633ac127030a6e52f907cd303dafa27fcc83dc249c4d05f49053257b480779c890a78794ae99ce479a554589c44f9752941dfaa23ca6128c8ed3598ae0985e708b4e705740c1ad2ae7a3298fa50a8676bcf696a42421adfff08e9d895139bcabbdac87bcaca7c8386f1574ded4a64278bcd23db845def7cc30f7b1971a204ef6f595dc3ef66a7a705e3ae8081e57793786c5b3acb863f95ff829f2f066bd87b7ebaa0e0eb88a8608d84aacc22b01bf395a4c5a636fe80cce7bd98b4b7eead7095deee7bd725f2567702669960e74f193fb4955eee8af1794154696dca3977c4a27b92fa8e40e5575a242cc56a5395c2828019c285b2797de64a3ec0edc8f4347b786c8a9628f689d6f973473af8cfde81e8acaa8af90035421675d9a4e1356e8aaf369956f601d1fd44519d93d7af5eed1a9ab501703b6845d3ac143010577eb045f0a28b847277838a0e033ba021c294301f6ea845b65107e56251c7b65b8d6a21c00cac2dbf4c2cfe962de95a031efbc2ae651d3f1ba2a31ef21b57329f6041aedd73c729437c68daa5c5419dbc628b64db8c4b67268ab8b651774653e1eb4ccfb5492b1cc274aa9bd637ac1fd3a95e341551ed0494e04953ca883311910c6459dca5341551ed2a97c35a0ca9754c1807a729b550906faae437943c274c921618642c2a44b48289fcebac030ac73acd9a08e35a2937c2da8644b27f97a50c99775926f04957c452519bb0bb80f2368776154251cabdaad52eaf08c5ef098aa0ed398e96555eb70796bec7b604bbd44294ee337ab84bae957176cd7e4b7a83a40bc4f01c28412ba7030aef3a4db013d6942e7ffdf2b83ffc755c27160f07da6989d48316789c9593012f71dd98b23e8aaeb345381ae3a7f90720e1cd8de486b934f01e53d4a3d7130d7919336f1aed08c4b1ade5f107b3b5dde11c525d7c22b624f50be6b05724883567e0644091da73b2a4ecb86396d41da7b90155a8472f3f7b8130ace6152c7e1ae8ac3cd030e8bec3efb08122521f714d89aa3e096a6a31dd250bb79f864df8e7ac9faba9569e1e4ad1f8ba67416dd5359f49e36a23841fb2d7dc3b2b06d7a457e8dc7e2310a5e574b538d68fc58755567d57d7f56a9f410ebeb1dbe816c4f513b0bcba41cde37adb36a4e65d56da9a12dd4c7b6e22d94985d0649daf2f118ae6249399be2fcd974782f9cd159f64065d95d6d79e1a2d7438a9edb6c83d99bf8442fcc325db758ef8bfaaeb41f0b6775163e5459f8466ba15e1bd12f7121e20bf8f40949d8a0689925ebb7c86bb740c606ddb77328cb9d195339dae6973fcae1efd774cc3e5031d3cffea2572c317b59dda6b4c3fd21c7cf9a6e37aeeb2c995759327de8d297fddcbb6cfd58714367c5872a2b2e7b5a51a8f33ba28ade5a5c1a79bff2a3ef4d9dbe1fa9f49d97e2a598ab182d1f514f1823e436b5d46b2ef1b2b046945a57bced8dc12b1269a1d0ef6cd77b4a7e89df76589c96201207fd0feffdf598ff26b47218bf970e7a9cdebbed3f66faddf6eb4c1eea1d76e3b59715aa3ee584d0ab14adf3b649bfc93cc62d726401695a8f396a963ec2526de6a55a17a7a5a1d1437a93b7168f31b77ab50ff9df686a0b78cc7b6e5464854bc99e39c8f3e8720ee324c0d98f5c86474cec91d44b7865a9407788442c5a9740f24f4ce2c121ba1381f36becf971a8ad4e18904d37e4913d3589ac554026fa550a940903a80dc1b77e6012540bcbefe6707a5ccb94380c98fe599fc7b46012d30905a630fad5df04bf5a3409ac4d016c89fa9999526cab0154ffaacba35a3289aab920bc8709d19f0444cb2611752abd29cc2de1bed012ae98441713bc2b3c81fd4b0aecb1a824fc4191f0f23c265aea735cc5a30ddcf437c7f6695635cb1b0269f4417bab6a4df34f98307ab0143d70cbb50f6595d4225a9ad86679340f96c26b2d97ae8a556217d9f21948f24378f5d03b8143f81fb2ffefd1750299fe0821c439043baafdd864548b9234a7dc24e9419e526d2e886d6da5a87e98f8d620f4c39e9904d5c51dde9e75da82446e735c0973287b4da19c10507e6a1265af103bbc63cd2a9fe22d9acb0801d23302d2cf4c22c52666476a349c550063d8da4d618b0ad87e623efa69460ae503153305ea98006ad52428b19352d89da840f53486af5bc0f7bc128dc71aefa6e45c97e00c361ec650b60b2893d54519f676f8b480f285499498f52e5d0c6f53111360ad998435acf0bbc3ef2430e89703a6507708a85f56aab1d93b58b32e7c2cd318be1e53f84e09f85226f139530298f13ab5d08eec74f1e47af9c0454d816302b87593e04e31d5b8c4e91d86b9a3d329207c55cdd65954de68146c3685f2b88072c324ca3e563ce150fac6cd5530ca18dc3153708704b8e95a863b1542b88302dcd7b50c77328470fb04b86f6a19aec1986b0cee79016ec624dc3325c35da804d0f74d011d13806e9a04ea74e5af56a32b6f6c84de2be0db32890fff2c8e3cad1bbe914fab80ebad495c038aea6b77d9719a638b7dc8ff54f251eb93d60980b74d021ef41d1f550f9f18443c630af12501f14f4d226e61e2822cae433f60695ae93606adc314b466015ad62434946bcf64866f6cde2240da3109a9adc0b33cf67a85a0156e13c0e54c826b67ba09b52d9e247c5e1711e0ed9a84e76c14d2ed9ba850db6b6c03ca5901e45e25408ab393f23eb10acc511aeb259e1440be3309d2df62acc1c9086395fb848072df244a677837558de19d317c3d02becf4de28b31b9af17be3e5e9300eb0b93b0ca33f63038716b6cec312e20fe59252263061221de77476e6fc51501e5cf2b1119278f5464ec12f0fdc2243edcd8864f9ccbffb0c518b21653c8ea0564bfacfdf868b0bb632c3e8e0a887f651271b702b12850fe8b31d743d80dbf2cc0fcb296601a6c6e8cc13c27c0fc752dc13458cd8dc1bc20c0fc4d2dc134d8a73406b35f80f9552dc134b86dc518cc0101e6d7b504733a84302f0a307f5b4b30674208735880f94d2dc19c0d21cc1101e6b7b504f35a08615a02ccdf9984891b3677699473541e8fa3ff4c7a349ee94f2091df63f1c778f15bdab1bf253dac6c3f58af2b56cbb3e02dc5033096624ed6725993b71f6c3fc9c9e35f9a7cc470f92509f924e9987fc83d4effc205ff72a39fbf2ce62e13b9bb4bc37f43dd1851d7ad4cd93ca61c4fd5ab2cf5b64fef7dad2ea512a7ff7a7394edff23963b2f7672d36e72e36528795b386e0ccdc267540a7fa2ff03e7a1a4c588870000 serializedProgramBytesString: - serializedSignature: 6acb26e5f230df5815817ca970d5efbfe6a35e5bdbcdad54d8751e66160da152c1dd739d75d652c75da622939b6c5f1356939df8166e1fc64a9ccaa9a75be10c + serializedSignature: 3a0d73ed5fb48e79b2085dcb9cf6b26444f003cb5db9955f3338205b3677564eb63a52b41cad16280b384c8c822600f2d54b968b3dc729d7b268d010321c920f programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/5a3bdac96bebc3e40a55936bdee90c68.asset b/Assets/SerializedUdonPrograms/5a3bdac96bebc3e40a55936bdee90c68.asset index 897adae..f3af3e4 100644 --- a/Assets/SerializedUdonPrograms/5a3bdac96bebc3e40a55936bdee90c68.asset +++ b/Assets/SerializedUdonPrograms/5a3bdac96bebc3e40a55936bdee90c68.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9df75fdcc815c0676d96051b178c4d33b6715f17d8a518f74237ae180397d877c118168e3bc004b0cf8ee324977ab9f4de7befbd5cda5f937f213f27ef8d24f6ad346f25ad9845720e3eecec6aa437ef7de7cdccd3cc885d9712f0133b0e2fa36248748b66312226c503310fefba219d835fe393757c502c423a0dafe390775c34ba5c893f8763b5f03a009f96c4325cf9504c403a23f36f8b0cbc1f806b33f0098f4ec15f06ce8a95c04523a247dc1437444d6c878b885179d192792c8676c5cae0b54b3c81dc8c540a0b49c9ac1a78b90d394b326f0e94b6cebb2b5e9266cd41de045cb3286641e67d29b1acbd5cc837c248cacc7483991e85bf72f37d85995a9f37c15f29fc5d313faf37d3cde43cccbf6acbdf4264abf2b79ae94626bf92e8a3cadf661ebf667ede6ea6c788eed53e6da972b1e5988b2d3b5c6ca9f6684b8d991e27bad7b9d852e2522f56fe16225b956fd952cbe45bb6d431f9765beacdb489e8dee0d3167bbdd86d6972b165a78b2d0d1e6d5967ea5c66bea76d2961a6cde635d76dc753e6f11be6e7dde47c2b1fd3b479de4df373dc4cf798e92e9bae567ea3ed7a7bfede026c69616c69b5d9b29f9c6fe563dae662cb3e175bda98fc426c69676c39c1d44b3bc9c7b4c3664ba94bbd58f98db6ebedf9765b4a6ce949916d27d635a7c8b143ccf587cdf48c993f483e637ada3c7e8b29f72c2923c99471c44ccfdbca386fa6e76c651c24655bf9985eb0b13d65637bc0c6ceca6fb45d6fcf2fc44f2e0ab59f5c126a9fbf48f231ed14f9fdc4eef3763fe964f2ddfca44b38fda45b78f7935e5b1df69a698fc8ef277dc2bb9f5cb69571d94cfb85da4f7a483ea60336b6dd36b6763fb1f21b6dd7dbf3f3fa493c2623bacb10638d8b0591928e8316790d3dad2bdd834e145d8a2ff8735816bb0ce1dd020850447e2332ae5c865eb25519f9d5c52a88deddf2751cce989142879c45bce52802959b85df0c095b97e078bf8c7a31709d819c66003723afba0743c05df8cd95320ac5ce42e89b11c3f0ba20e5dd03b59d67ba998421aefd9a21906944e07370c402ba009f67a586b7e5eb23a969466a3f00c796e5fdc03cdc117441fa5896e6b47d11deabca1c3691a9755407e2dc7123dcb7aaa907ac41ed5332367cbb46d6a246107de990d90c4b52b2177bd351136f33343a99b8ec580d192d12592ce758ab48c9b86dc841d0bf8d4e0bd5fe6df0ee80202e9f2d6a3258dd3ba505d91a7ea3e23fbb12aff5dd89e79ad6265272a86d70312d1f5894978c553b24e437211e2f49a3a276fc31157e19c2dc2e227ee3bc19799eff0a289523536e05c4f0367218de3c86bf5938b9475ef400dedd910a21642c721a7e516d2bdf516369149f90d09d43aa9be21cf6752aec65c5c6eedecfe4c35eb66257163bfea809963304dd74e008ae57119471e58b5a093a0332eb5d175cfb3290782447d98770bd2a80cbcf1427d89a6c4cd53c374a9e8dcab0d29f461ce11205e13412ae5029596e5312f56304c739c19b020a2ee5046f0e2838a1723639197aaf28ce761bbaa7ab90370ee767642881c70741e238948df23a6509d9eacdbd22bfd36df1ec745ba5d31d204e175433cef9ca545589072b15bdce7fe1c7519de57c7596abaa73e3dac41c85f5bd38d158e3b9efadca1b32f8ed7937a8e8c95580d78bdcf3aa6f9ffbe58a4d066efaef8b578471df63956b8cfca89175ff3404e994d4028f4f984157feb2f2d7cdf6153ed9ba4961d716eb55f6d66b65052e3e6c909d9eda6baaa5d7844b67ce2737aaba0becb56b54b1217678636617849e674584bd523fd4c8d19b24f8dea442d51ee44ac448117b131a89724b7bf9fdb656e5b772c5a4ce618797d2e4824f4c183fcd09c6cbeaa597155602e70d9b386fd8a9f2061c0d167206ac4528d38f076ce6ca6b5095b7437adf9848c35f06eada6815d817e3b2ed639987136fc6cab31f3db6707aec52e9b18de8815122966f7861e11a6ce534d8add260bb92c40db317295c8b4a4e8b3d7c6f6068312eeb7e2940d9dbb8b21b55656f22658fc91e71da9c87f3db0b55a9cac56e71af2254c056e9105ec50bdfae128efdde3e459f9146a3f66707177b39d57c393b387807fc74e3d7e40083eee40760b5aa6c6cd907553662d987ec1d9cbdb47abeb41a8ee8618e68b220a2b5aa7290c21115d14a497458bafd8478150e4d061c1ceb38aa4739aac70250ade7a81ee7a8361544752747b5d92fd5c27cb581a39ae2a8a60350ddc559dba2b2163f16e62bbbb9725a55e5600ba2f7998de6f061049493e20c1c790a763f83bee829487fe64b973d9c2e6d2a5de84036e108780b1f4c1a392dda555ad0017d4e868f4b90391d6828ddcb697042a5c1064187b3176400b7ecd3b7f771257670de56581bdacf957392abe15c6fc350690aae0ce66707382d4e71d676cba93cf42b3fe51ce4ca39ad2a07fb97dcfe2a6b2506e2d7a57763dd3ec8696d7ead3fc4697546a51576c8e8cdcb8ede94d64c617c0e739a9c5569b287f8b91f8df09a4579be1fdd929c6ee754bad5114ab9f564dc4c05677584d3e7bc4a9f7d0a56def52a8cd851858629796f322374de928f98563d9123e0b4b48ccacc8e09d88af29d8d3623a549d00ef5c87feb8efb99bccde0e2eea3640ca31e7dba72b7e5c7547e83b57249a5bebdba2ff2d57d9c13dc1950701327b82ba0e066ae09757b119cc7f3532ac118dfe2d628e58cb18fdbc034a7756f40ad5b38c17d0105b77238fa5701471ba7f5e5805ab7738207020a3ec1e1b8b20a383a38adaf06d4faa44a30ceda5df32238cfb2de294ef0f580824f739c6fac02e7330ae12939e555ccbd03748edfff5cf34d1560e580855b3f55fb06dccae706a1b35c9ddf0a58e7e7b83a1f5a853a3faf125e29a178d07a90177c816bb4c3011bed454ef04840c19738cea3abc0b993d3fa85805a77716ef78e806ed7cd097e6740c13d1ce73babc0b997f3e7bb01fdb98fc3f162401cfd1c8e975601c7650ec7bb02e218e0fc792ca03f5fe104df138a7b40ecbe68f74d17f770b96d51def935cbbb3de32947e35df68aec5685315692fd9a51180e66e0aec48f5d5739bbc655766584b5386e2d57d3c5ea8195f9c82939338003ecc0ca99bd2b0b5e437218cb80ae8fe4d99443ee63a8a3720e6f065eefcb01dc6e712e0d9a4387cbd5e0748de3745fc5694433275cbaec86a2d022949bbd263fa1e01cae731c26541c3a5638e4ee82e2764d19165ab326937269d05aaaa6cba49c857e2cb9c15932a9b2a435902574b91d1f89e65bbb1f0b6e72166454165ccdd32719daf6c970720e2e71f323bea5796d8385d6da2067f394cae63b1adb617fe0fe8aa7e587c82d8ec834e7c7b4d46e69ab61d7b269d9301ca3e38ff75a75f3e304fcc6621845182b668b70eda0ec85f0d39248c9dd04e9955a73df8285a5cf8146f8d0cff00a77f78d552f0bfe49b22961bff92af4a122372b541ed84c7c905ae77d9b9ef301aa846991250b48cbfd13cf9ba538db5d1a376b755d4a6ee33856a037b96bf10a96b65eed43fe1f9d300458a35cac5406ad78f9b86c9aaef2dd26089aa400eb499b557878129daa13c04cca190e5c7cc59f447c5d1ab9bfaa138efb86c628e0bab63e8b6b56272e6f1b32a280ac22914536b7161e162d5cb525595cf36be561d16a94ff96c812719bf0be551b290b7b12d039a66f9151d463b972b928e54ddac778b9bd306c9a3fa06374d231ce253d74eefc39d9e699f4e893f9cfcbcacb86aeea90338da1ebc2ff795499c6a8f2dd08e18a1584c9be675167df532d8c0d17c64dc43c9c94efa6abc55e7e906793cb73faa38417e30ae993d224ae5ad23dea2d2b1b022a3d05efb5c1dba80b5e2981b7bc967e987be39cd687725017ca3304e5439d281b4c94d39e1a7576465d6bf3aed785b59a607d540c0f9d30871afb845d6e4fa9d143b5f5941b09cad7c233e89c8e20ca0182f27178bcf24404515612944f74a2dcadf04af54e46e7aec73130491bda8bbad03611b4ef094f83ef88a0975e20289fea4459e3abc1b74412e67e02f3bd6182793282300f1098cfc204b33d8230f71298ef0b13cc288eecfb08ccf78709666b0461ee21303f1026981a03236d301b09ccd7c304338ab795bb08cc0f8609661467337713981f0a13cc5311847990c0fc7098604671cae31081f9119d30ad7f8382054fc95b494b36eec7d4062eae0b9c20e03eaa139cfa7f176903b65517b00401f6319dc0543342b93b22f97f9e39a6338ad4b6de7396a07d43275ab7794baabcd6d9f4725d28cb08ca8f17db4bbdcf5b6a44ab6ddef22841fb6631bcd4dbbc6514ef74da08ca4fe844b94d70abe3b9ff5a3b7a7d660941f8c9b5f4c6dc35728dc38fb635f25e82f2533a5116be46aeb1916b5b236f20583f5deca1c87bc0a4f17e5c5be33f45d07ea6188ddfdb2d641467303713949f0dcfa81ec529b76682f273e119923436706d43d27982f2f3e11c92347aa8b621a98260fd4278facd282ef0ee2028bf189e7e338a13c29d04e59774a20c1628695c39d716287513b45fd68976af02adf14f0111debcb8228cefc07bdee69bd611c05f094f8f1ac55d1e5b09caaf16bb1bf03e75a731c8d73675779ca0fd5a7806ab286e9fe92028bfae13252eb8dd773c2d16dd875ae204dc37c23bca6b9c69d286b68ba0fd667806a128aea7ef2428bfa513a5f59526cef5f479f394e8c18b1178dfd609cffa7e1e6e98a151a5c6e98f2a5d205b09c8ef8405a4c6f05c1bc81401f9ddb080d438c46803799a80fc5e58406a0cc5b5813c41407e3f2c203506e2da405e22207f1016901aefbbb5813c4740fe302c20354e096b03d94f40fe282c20353e89a60d640f01f9639d20fd4d57447179b785a0fcc95aa2cc5d93d41802695b93bc4c50fe5427cac2d724357aa8b635c93a82f567c5f050af8f0344afb16f22287fae13254ed53be726a3bea5703dc1f78bf07862149f25df4650fe323c237814371a5c24287fa513a5bfc7a55a23190e1d21307f1d269851dcef7698c0fc4d98604671ec4e1298bfd50933d8f298c699226de37a1f41fbbb62a3f5beb140a3d76adb58708ca0fdbd4eb4d69407d705447dc5a78a80fc4358404671c5a79c80fca34e90fe22cf286ec86a2728ff14de2149a3976a1b924e12b47f2e86977a0b9da2f82ce51682f22f3a51ee32512e8307e27fb77ede7715d513b07f0d2bd8283eee5f43c0be1556b0517c2c703b01fbb7b0828de270b58180fd7b7886ab283eec522b9e9b2feb48e3bdc43f44ce7763785919487afeb70449975dd0490ffffe3fc9fc071ee3db312a4deef370fd7581cfab8c838c719966bf2923857e49be1ad2dbd772e59789d4f34bfb27a28da95bdaecaaf9cb6a7c3587ca5277fb78dfabc8532b296c87cfb5fdffc27a37ab5dba698dfc129711a87943387e39fb22bc47a5f027fe3fe4e65f703db10000 serializedProgramBytesString: - serializedSignature: 0ae26d446019c7b19b474aef161ccf93c4cb535feb17fa54d315135a03c2ebe59974af834d14ca482231bf63849310a7b3fa3946d6e59c1f8d1117d252364902 + serializedSignature: b21caaceae53b0499825777bf7da8a3745f6a219519a891109d93a2426dcbcbf6d45fdabfcdddc0819c44b94854cc1d88f7f86aac4b9455789e576c94722bc08 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/5c0755a6f8dcdad44be6fcd9caf44379.asset b/Assets/SerializedUdonPrograms/5c0755a6f8dcdad44be6fcd9caf44379.asset index f2ea22c..e8cb7f1 100644 --- a/Assets/SerializedUdonPrograms/5c0755a6f8dcdad44be6fcd9caf44379.asset +++ b/Assets/SerializedUdonPrograms/5c0755a6f8dcdad44be6fcd9caf44379.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5be9721347109eb5bd3a6cd9b20059069c044808e6f2ca86003929738438c555befe9014085b264a64d9b1640a9e205579913c43de223c51d2dd3b6b8d667b76b5b6c607412aefecced1d3fdf5313d3b729f27e0e35c81cbb2981777c5945812ab624334e0ee2e94ebf0f59f82faa7620bca5770ad40db15712666247e2e38e3709d83a7a668c1c86db102658dda174415eee7606c159eb0760dfeaad0cb1980414be29e78221e8b92538c21b14c839ab2ce41b99c0c5cef88b7d05a25a670128f9a4a7059809626b5ad03d341bf67e267126b1dda5660cc96a803cd974431d382ab4332513120cb7e59bab2ccc25f0afe0aca33f67d289ffb645d46deab3406e5d863f23925cb213926b80ffa629993fd8e2bcf309ff342a31d8c1b96fd4f28cf588e287304b2e495ba11a50ecb5149a7a83ce3bcb734ba69d96f4ce323a33c637b49cefb86c3c975c8227e001d55c4a6f008b88b094c3718196fb4483ad5e7eb19ac17a76d81796c0201c67296c82e5be29a98612de7a49353f8be4bd70af4a811d1f1f0147f87a640e6eaf0ad2a66df84fa07e43568f83568990203abd1a817621a0cf999466519a6ad83eb54c5225c3789de0b603bdc334e2474117dcc3cd0f43d781d6a024037e1b94e1c2ed0f535715a25eee7a0ae45f1a40111e50e946f68b6b0ec5b70cfcdb92821e379e41dd954ef878b404df7401ae4de23dff9a09183d008429f1a976e38e051b4fd33a4890f18fa41c6a505d2a731ed2f511d7533c2a3983e1f4230b98c610979fbf6f1be21ae47cac22383ea3e4d12b435fceee6bb5b7ffc93fecbed14ed9af068999c88112d0a58a437e98c8528448be0ba0365645487dfe1e0c765d059d847f8fd7e35ea975c01295a993a15e01488fd15d9e5259415b85b158fa06cc0df2b6236a49f724aa60193cc021ac7a609e43e0ee4cc7e831c1f55a240ceecc8d506193f3c82590382713c9810ece710a46cef37ab082e419d9ffedca7d61aad996d9a1bf48cb305e978d408c4f111a5f7dbc44b34e2833b32b711f7a812774376390b125dfaa45d5ec93952b27d664c4631c018453923d379dd56ff858f9bd5c4400b321077398b1bda6f9f7d023ef1abccdd92fb2c6e83ae6a38f0aacc1bfc356e7e936a521c7ab98359d57717ef708b58ea3ade152217e5a4d12ecd1936561ee356ba5172c04d70970af5e656bd90e5a7cd969fe16647dd1d6720a11db84ebc60269ee50c83b6df8bfb6818d8b641543019486e1cf83ee2b26e1cbc6514c932c643c2c5b360b28e41937ec64c269b403f4326e2a51e10cf71c451f9e32c9e3ae5a299f2306756f416e827ab66157e3d13dcdd81b1bf8030af69cfbd0de3b9d739d16676b2ebf87d8aacec8ce05e3225e3c86475231cc2f47e6dcd2ac2a644415f997a97779dee1af50942fd524402b4172e4d9ac8735e84951f718ceb4e346176a251937b7ebc57f72c9816b44fb805ed9e66502a8853e2397c37c0989e0384bfc3800a854b84145b4ce3a25a3adb3a03739285f39849ca339c94e7352967c100f0b0e2ad941137a8c8dd435125536981f3eabcb6d38b247c1e37f17996e37356e3b33da7aa8b87e4c84db14821a611c1a9b9be577a386192ef1c27df4c84b5e93a792075d2ad0c2aad2412144d127cca49b0640c4026cf99a3d6b0f7c453e9ae4faf343966c2e133130efe72162c66ea5989af255c78d6e85403ed756ea7e77d588efc1dea3c495105b95e53ef29290fb6ae02c56d920be9b6c7e812ab2f8af4b665185b4b9892974c389ce770b8dd95c7ce020faba449ff5060ef1e1b178dd2f0751ccc30ef53cf2d18fb94d0c0a7a6f068012ab3490c7f5286b3afd336a70e91a702776865f1e7669f0bf3b959389dd9ed114a9c149c454e2936a94a172f93f9b8282d250a6801d2053e713bda925e40adca536fd1e7d1727c7997d614cfc524ced6cfdb50f257c73e81c7f4630520704274eee967492ddccebe193f77dc4b9cab44203873e8c131321a9c1f5eb6645a801f747f8df8f73db3c0dd9d27847d254fd1e90dbdb3dc227aabbaef50fa74d838bfa8dafe6422fb6987653e9c96312c5ffa9f47cc32464c0c26a9421060ca1860aed88c0298fee022bb2201d4b7319d6946599f7f2fa78cd98e9890ee46b8ddc48534c5051fcaab36a13c2da1f4738d0674ea2e939db607ea842d50f30aa8538711548b966a0dd4110554cf26a8c312549c788d200d68e3aec11a70ae2de084025cf920a3e552c7d6c5a20d666d4139a040396d13ca7312ca3a74420b6ca70bcfb51db6f9e5b255884fd98278588178e620ad75df2266de1694ae02e5359b5062ea1a7488dc1af50eb49c2dd0fa15d0aedb04ed2cb37623132d72de86f851feaef47d8ba17d0ac05fd804386f5cc71bb2cbd14bd71d05bc1b36c12b32d6697a096931452fd802724801f2e66101d2a23b5b03725001f2d67e00695aaf8fba45661420bf3c2c401e458b4c29407e6513c8528c6b771ebb5905b3680bccac02e6d787094c8b2e6e0dcc9c02e6378709cc992308e6a8786f4e34ca78a2f1ade8384030efa9fce3828294b3017d1ed1b6a1220f1b2acad181473fc5c04c31c9195c34cdf8f7fadfa9a268faa9f74c3fbd38abe024ddcbb9452e422b1efda8e47d961f7ff7a0fcd342da2d9119abe7604fc8889129fcb8ff01887ff3e1583e0000 serializedProgramBytesString: - serializedSignature: 7fc7148ce1a2b655a346c2482ee4fd9e245bdd3d852c6b7ff4b11f7ccfd3866d16125cf8dde351bee9f431c37077ddcb9b4077c0ce22e8716d3a625be142df03 + serializedSignature: 7c4186cfdaa466fe29fd9eec6de55dffef8c7d6a4fe9edf2c9c148bcf380656d0ee7684cc6ea2c10f77e670217f5efca004d2311330521dd9cbeb27fea380a09 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/5c19b3345b6ec1c499b2f608135b32ad.asset b/Assets/SerializedUdonPrograms/5c19b3345b6ec1c499b2f608135b32ad.asset index da5a0f6..268829c 100644 --- a/Assets/SerializedUdonPrograms/5c19b3345b6ec1c499b2f608135b32ad.asset +++ b/Assets/SerializedUdonPrograms/5c19b3345b6ec1c499b2f608135b32ad.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1dc5f1f8f7d996e5de7bef166eaaeedd968bdcb1656330c655b605926d2457aae9cdf4de7ba80102841e02092d81500201020408104a0209247448f8dfeeedeacdad76debbd3dd3cefe9ff933fd6e9eef6e666bf3b3bdbf71ae432e72731ccf9b58c2d66d3d908b694ad675bd866e7afe9ceb1d2f9e79ea9eb8b589573dce8fc5ee3dc1bc6faa47992ff0c4e74717e973867d56c9bf3e476b6ce39968bfb4b5899f37789f36c9973c6af6e70fe9739a1128d9c8796b262b6902d609d131dd38858261eaa96d7123c5e8926ceef696cb773b74c28c55f922b6e75767e2d71ee548b7b958ed22adc0ab65244abd2b9b7ce79a68a553832d70a894d964f66e20fe61ebaca633779e4d16c2aff6e28ff6e22ff86e1f9751ebb835384ed0ec22a993d9cff59ceff6fe5794ff7bcd173f2bc977b9ee8a0c9680664f496c73ef2d8571efb39ff1b3b7f1eea43ff54f7facbe30079ec24e51e26cfdbb8716fa8746e2b8fe7c97015e0dc0997b8469e0f94c7f3415cda836b50462538e7c773c133e74ab91f68320681fb50860cdfe054793e58d3fb02207bb83c0e93c78e52d666ed7a0e78e60279dccf10af2106d943e535279db38b345d2ed2185e24755771550c2f06723b806b50462538e7c70bc13317ca34ccd1640c02f7a10c155ea5f9084def4b80ecdc340c95bd42869718182a9d8618649b18d6d5def35c390d3f66de3cd79cf9f305cde4313f4df854329acb634108192ddc346af4798ab0dd4158f59e4237fe229cf281fc78290873a93c369269b945bb9e25af6fd5ae3746ae6723d79b68d7950d5d0674b94c7be672f9cce1e0dcd1b3f1a79a8c2b64b82aa03394a7ee576bcf5d29af6f037182cf5d893c7795f65cb6f6dc55c873576bcf35d19ebb5a7b4e5def0bcef9fded6e1cb3ee95d78bdcf36c95be75cd2ffbc9e3b5ccebabae95c76be4f51de0dc498feca3e4fb6f67c97ccd8fd76972ae4b23e7c5143a8e64def254f937c5f67acd56ae776536e9e23ed764114bda393fde20c3efd4e4dda0c9dbe595d754c565b43c3e22c3ed96e7a334bdd4fd6aed3ef495f0be4a8367e4f523c0393ffe16795f37edbefebe31206de0fdb15ab8dfc9fb476ae747a5489b965a9c6f94cf1c0dce1d76cd6e4ec36e5c1a76ea7e54ec943c8c9dba8fb11baf85ab0b3b15d7dfb3a41f5436aa6cf26629e71810565de7c7fb98d7f6ef7365b450369fa5c9fb990c7f2c3887729fd5ee3f2b8fcf011d15eb3f806bcf816bfcf82b29670f38e77aa9f8297fabf4ba557befad9a5eca1e8e03e7d0dfa8f71dafbd4fc937f157b2fb8273e0639ba9774c08c8729281d564706daa3c4e01d794ec9bc0356803b25e54a0ec71a23cde02c2dfa4d9c62dcc6bb3d302b287f1509c613ca61be2a164df6688c7ed29e2f17310fe36105edd83f12896c76c4dfe1d5a3cee30c443d585d3c543c9bed3108fbb52c4e31720fc9d20bcba07e331431e9b68f2efd6e27177887828d9f718e2716f8a78fc1284bf078457f7603c8632af2faa00e74e1e6cfda216ee7ee62d7fef67de7ca8e4ecf2ca69a3da137aba3fa0f1d2ef3fa8dd7f501e1fd2f47848d3e36179ff044d7fbd8c3a0ee8a19e83f7376bcf2b5f5501ce79fcbed5c23daae9f7a83c76d3e4ecf2ca69fb9896f68ac3af350efafdc7b4fb4acee39a1e8f6b9c7e837052f755d97a1cd0433d07ef2b4e7a19f804f396814f68f29f6449bf6d7a5edd3f519ecf44c23da5bde729ed3d4f6bf154cfcd62c9bcf2b43cce663579ab9dca3775ad9bcf91c71734bb79411e9f67de3af5f36edcdacbfa6ffbd9f2fa5c797c5193f3621a392a9c49c779cc5b372f61de3cf212f3d64f5e9232ef95baa9f69c4a8b3f32afad9580eb50de2eafbc8eca9655fdf263e6adefcdd7f452f7abb5fb7dc17be17d95069f306ffdf21379fc3bf2be6eda7dfd7dcaefced5ee2fd0c2fd8379eb97ea3c48ddfc65e6ad9bbfecb2eba4ca538cddc234ecd4fda8d82979183b751f63b7480b571776fb83b8f0e31296cce32a3ea5e09aca5b4b594dbe1ff996bcb6581e5f01e15f91c765f2f827a9d349e09ca78deabf32e978803caabaa3d2f555e6f5e3afcae38186f71f04ae4d95c715e09a92fd1ab8a6def37a32ae852a3f2e97c73f83f0af81f0ea1e4c2fd5dfde5893ff86168f377cc643d583603c94ec370df1782b453cfe02c2bf09c2ab7b301e2be5315b93ffb6168fb743c443c97ec7108f7753c4e3af20fc3b20bcba07e371883c36d1e4bfa7c5e3bd10f150b2df37c4e38314f1f81b08ff3e08afeec17834d2e47ec8bce5fb87ccebb73e62def25d7f5edd57f58855dafdd5060e6b9271e9a6da9375ad07287dd478c1a7529f93c1b913a67b8f14b2d6caa3f2e59f316ff9fc999451eaeadc7daff6ee7f326ff9bc165c87f27679e5f5d823cf5519f31fe6f5f9ebc07528f7df32dc29dab9f2ddade4f15ff2faa9e09cbfb7420b57268feb65f8d3b4fb1bb4f7e8f737caeba7a760ac97bb4ab793985737e5473669712e4fda4caf53e5b14293ad6cf6734df6e7aeec9eaa6c3c54937d5852f6e036886c55ee7ea1c9fe42ca566363159aeccaa4ec7ecf69b2b174dfacbd1b4bff33d2a4ff975afa7fe9eada6b5fa4bfcaaf7a5ab564e6764ab93c7ec5bcfe49d9cfd72ce957be0661f9f11be6cdbfdfb872fb9d23cfb3b4777cc7bc3efc3b4deef7dafdefe5f15ba0836aa7fea031ffc17d77ef73dcf7f656751795f6ffd5d27e0bb80e74e47fc23c5f732ec71afaa9fca2d2e4474d8f1f258336f25c1f7752e9a0ca094c3ff55c5fed7eb5765fe59772edfed7daf3ffd3d25f3d3f46bbafcb5769fb95765fa5c34fcc5baffe49e3a6c7a74abbafe4a93a924a8784d716c4398857a201f3b6eb95fc6aedbe92bfcd1b2ed19079ebe501f368cdf3e9f2a81e2f35de792c3887f152e39e2a5edf6ad74ff786af49dfaf41fa72dfa7fc3be607543d230a1f22c7f4138d99d18724b2594dfe4d6483b0fca8c6670f07e78edc41aa0e93a5bda399c6af9926b7b9765f8e83279a021dd4b105f3e4dd841cefeeff8afbde012acfca3c9a68c58c3e24d14ad3b12df3fa10752e7dc820d5b72c9f4bb4d4f468291994ca708a771a1f524b3ff55c5fed7eb5765ff9904aef7dc5b4e6f9d65afaabe318edbe2e5fa56d634dbe4a8736cce343126d346e7a7caab4fbba0f51e9d04eb385769aadb467debca6e4576bf7751f22c3893955617c4807e43ee64354bcd4fc9763c1398c979a5f759cc6b993576eadf4557328a40fe9df07d81bb50f9173c1c42c3c930f01f3e8125d40587eeccabc3ea4ab2b77a89a9790a5bda3bbc6afbb26b787765fb66912dd800e32cf247a326fdeede9be3b47f67fe6a87249e5d1de9a4d6f01d7a18e6aeedd29dab9f42143d49c1ce5437a697af472f518a2c62d54bf6a3a1fa2eba79eebabddafd6ee2b1f7298f7be625af37c1f2dfdd5f363b4fbba7c95b69d35f92a1dfa32af0f51ef53dcf4f85469f7751fa2d2a1bf660bfd355b19c0bc3e44c9afd6eeeb3e44864b0c64e17cc840e43ee64354bc0669f11aa4c56bb0375e359c077be5d64adf2e207d793b6f3db0b7bafa10adef21a1e65f9c0cce797ebf24852cd567a0fcc97ecceb33f693325e74f51ed6c4fbee849a83b1d32b2f314493b7cb2b6f986a2baafc3554b3c775e03a943b8c79f3bf3af7d3e78ef95a15f7e1acf69c0ff5de11cce37f13c3c1757eccd5b8e5ba32f27f9472b23479f99a9de56b720bb4fb05f2980774ccd6641669cf1469320bbdb65b63374393324518c03d31523e5309ce9d780dffd61b5e8d7d63e147e400fde173bb98379f36d6e2344a8bd3282d4ec3bc7152f299b4a3c468cd3e557b4cf9b9315e5b488c01cff1e358cd7ec7baf1c92df686537e3e314e86df0bcef971bcbcbe55d36fbca6e799deeb225c53ef332a0e22aed087aab8f505e7d0cef5e70b433e3f2ae4f3c3423e3f3cd8f335ef3b3d4df813d2bcefd83a3e3f2ce4f3a3423e5f18f2f93ceff32a0fd694718a8f2ce386a9393661ca38e59b27b2643e9824af4d92722ac0b993370bbed4c24d641e1f9098e8d5273159b3b329e03a3f4e90f7cfd2e44ed0e49fe9c6bbb083574ecd7b3439ea7936599373b6761fc63de85cf583348e5398b79c9ae2322bbc4beaaefa070f94f7a77ad92979e23a94b7cb2bafa88f578e182b4a1507f5bee95a9a4e77e58ddca5859ba1a5a99ab7a558176b36b6025ce7c7695a9a2a3d8781fbe05cc49b873f079c43793335ae33a5de5bbde16bf49be5b53925a746ee6c4dff03c173503f3dbcece71da9ea7c2b0cf18236a8e4a44b9f543626c7cb132540867adf1c56bb4eb544de5373048e0161d5757e9ca7319de7ca187d8d9493a5c95bc0bcfe69812677a1765fce45482c023acabea5c4fec96b8945e01a3fce9772f68073aed73c29a3b1a6d762edbd8b35bd96306f1d463e27e62dc0f71dafbd6f972647f1cf4a3252f76aec6e0ef3f8e8518dc0b33cdce2107670a44c93313ec2aaf92e4785789f2ac7549fc89e64fcc75ce0e379d5ef05e68c88bf1d26633e0632f9f5a592dbb9e05c85e7d777789f1fdb22c5fbdbc930aaaeaad60a75062ca42dd4f89f9de09ed449d49d657c8796a6789f8aaff2256a3ef689c9e7c73ee1e379c56b19e0b5cc8dcbb82e4026bf7e80c6eb00101ef252cf4f48f17ec96bdc6acd76202f351edad7c04bcd0d08ca4bbd578e9b8efb527bffc92cb5ed76f6192e850e89e592975a9f792ab8ce8f07326f9bff4057e7f1d7683a9c924687a37d864bc56b2ff3e67fd517a2cace0a70eee83861801b7ec23c4d87d3d2e8a0e4ae9072cf07e7fc78b0bc7e0138e7cfc9f1eac44a79ff42ed3975fd22edfa21409f4ef2da2ae6ad17a9f26e7532acf85b85e5c735cc5b9ead71394c3a5193ad9e5bcbbce5861c7f4fac93d72f06e78e9c89db5c9e13655fe8a483b5e7547c54dfd925e01cde2f93f72f05e7fcb8415e97ebe012aa2fed728def4679dca471de00aef3a31a9bbd029c374aea5de317d3d883e25553c6ad669e326e829e6fd3d9572a1b57f53f556f3c1dc83a1b70907e66fc07e09dfc786688777bee6525c418e96c56c6d6b0ad2c970fec8ade35bfdb13a827d36f4c20c68cf92ffe3358bc769bd338dcea0830ec0eb054ec3db08d15b202e3ee005dc578a27afb74f17b8d13a25c08bd3251eb150fd67a0557aec2f95706b636a876aecf123b23f0cd0dca9d3b23d83ce7c89f5acdf29d8af00a4dca32e7b5156cbb7356eafcde2ae4ad76d4ae1d325d94f83608fa338b1d99ee2e0d95ce150574ab735e21345c227eef109a9609ed4b9c6bdbc49e119bd94636cd39ee126fab1df72ae76fd33b4b2532b38ee6cd1ab0ebee96102a998a9dd870ed73854dfe5f8aec8b1411532b78fee03f8d7245cdfdf45a29f17f0c5d27c32b22255246be4096f05c2b60b9a2fdb8b816c1e071ac1d43b37dbbbc47b1a294713193e1c9dd5dc42099c24da7b4d8b277f947576479a356c8724513b4479aa8a502cbe5e58891f12051c8ca6a94c715d5f1274cf8c5f0c5920ce277c3958b70c113a0b128fcbc0920a65a943a7fec72fe5738810f126a70b4fc451b9d7f5cd95ae993c785650bc4b50bd0746a62901b98208bf1bad27d62e3d8f640a93137a989451273aea8317549618cd8bb4475a981ac33a9ecf2fafca2d1e3f3c65e9b654e9766225deaf2362c651a9a52a659a6cd3fbdbf4f952ecd6be2954c17fe6366d802b1ed743a60041b990836df37b6cd75af9b6df3818fe11a4333bf56296d30950618c12c1341d14bb5348304173a1a1e2a6b897563d8da37c3368261d75ab1f3a30346b1b181621ea7d8d6a456534d2d31b9df2c381b13dc2ea4e02698e0f6210537351954cb4c67497e6f8b90b2c6091bdc9cf858dd50ddad99eda9239227d3ab8059533353da70849d8c5ae989d3114f9ce698e4ce6125b7c02477092bb9a5c9a0c4bcadccd7d1eb5646725fd3d97719d98da5aa62072d215b99e8716729ba3fe9e8d5ee3a527f4d739edde470d821fa03b63bcf9bba9a5213edeedbdbf71034fb30530758308d30c2ad4d96cfb1f7c4925d37fe6eb8f1b7c1b255afb0d9aaad49328f4b6f3f05400f5c703b4ce53e06951341546e6f92cc4b48dec35bab0d66449d8d4bef8049ef1785f48e98f4fe5148ef64cae5c2762a4973f952e79adb413b43dc2d17addc64bf5fb9d830b6aaa63e85855fe4e4bfdd62ebd975ceeff962a3d9ed429fd47e60806f3f3050f801dee343af33e6293a63396350d8ccdc05f3418323f0415d4dc2456b98d56efbfde4fcd412de0217de0dd37c3f83e60d026ade1d033e24ac2bea8131196a60b2c7a4760a263d31e1c30cc2cf0928bc17267cb841f8350185f736f92151d21c47ea87fc0e6ecd127b6e9779da7aeabd6e0f1dd7488d6e2c768e1b8416fc3ad722fda0586a7f35a2860fe8c51205e60ce67f888e3e167c9a7a3351c69bbd699ef0a676e98c79dd3e58c99b6f2a79b9b1ae92756dfefecde2d622e70d3c354b645910a46cee8b79b80283874b04f470fd4c194ed49336efd30cc78bcaeda291c2ffde2193b754bc3bd9851d262bf159cb3d0d259b28dd8c465b248cb6c087d146a13d668efd4de6c0ad6ea4c137e471dfc0e777371031182d62c01d35562929159f15e083ac1b04a7ca945518c5d25b79a9657f79b8fd0d30d99fa849ef4f6a7fc18702cd5634c6049da31e2b50e7a640add717eb5a5734daea38f1fa8eb518a61c9b43d268a0298d447b2493c30cd0f1074f27beeec55f457f02330f31a47b3f466f10567c4c34151fcce4bf53140e83b1dad824436decd406c16a633958c933d950f218354f51f2ec67b22ad10e2d27b5aa54d9d15b9908eaf9525be014df163835ad970eaf2b66ad43306b9d66523f80a10e3525b768d066729c088e81d76d9c68baef642c66e671223f3a60c9330ccb913322c891c34dc27912cd341472b9a2cba06eb1138b54e484233622bb7685a1185772844949eef0661b1cde730d8339bc5c8c408981401e2730274454f2b0a8cc3544a543a36051c93709e75d177c5674a8bea2024cf2fcb0920b31200b4c40b2820129c2842f3408ffb17130e12331e18b0cc2dfcd0e267c9449380fbfbf295f7635e74b3fa3d36241512365ccce8fc19e538cdc8e36e9d996c9054ba696091fd1755b26bc10c811abdeb152ccd40140db3619638a4f2be62e4cd39d2d9f8b13c4d98e3509e7e5275fd152ab5ac833ad09401f76a41383a39da3eb75cb9ca8f2bfb738bf79e4390ed706aa9c2b7c6c6a9be3e6b7388dbbe1b2a1c76792f571feab462a97982f246e10256aa578ce9d75c6d1f2fb05cefd71ceb1d039f60d540b188799f2729389702b3e309c4d8ec7301f64c2bc3a12cc7587d987ed741a7a6e35a78f1852dcecbca942cae5d36ed73bd7b689bbeef35b99fa1820af0855074c8e0998db5a61705b1fb408e6b6261a84e78aeefa4c8ebb4f7542714bdf5d87ba1e1fe1f657d75bc9cc63eea9df8ed5f226999285933bc4a4909e242bf124996c12cc0be4557e044fc0054f3109e6dd38abfd081e870b9e8a095ee3fc6faa099e6af2c129844fc3cc7fadc1fc6f6f19ccfca7639aaf33689e1d50f3624cf3f506cdb7b50aa6f90c4c789941f884d6c184cfc4846f3008bfa45d30e1b34cc27989cd978e856d1ecdc6846f8a40780926bc3c02e1734cc2b9b33ad44fee9c8a0b9e6b12cc6df9303f8253144cf3302ba93058c951ed8359c97c93701ebe922195103e1612a212b200c3c477a3ab5509e1a183564278e969637d6f21867a2b86faf070a81761a8ab4ca8d746863a3e75befd4d8478d6aa3664ad733a05cb5a8b3137b62d0237b60413be3d02e1a5988fdc11d2472ec52c7267481fb90cc3b1cb80c338ad26058e03302bd96d72c09d8359c9729370aecc117e90a4a8df1e88093e32a4e08330d64745607a2b4cc2794df1683f5aa7a8251e8c25e23186442cee122c115762c28f35086fd13598f04330e17b0cc25f09287c1526fc3883f06bba0513be1ab394e323b0943598f0132210be16137e6204c2d7998473e776123394cbbc273168b9bc8dc1a591c12a3fc14ad0f5585c4e36c585dfe8e3796b90779561ef3ac5f42eee345639fff29cffeb6a8d11f23b7c4f842a413688161b302d4e3569d10e685129eb286b04fbba6bb011d3e0349306cd8006ab9cb2ac4af410072b5e37615ee274930bea11cc4b946379ed8c08f2daa198e67b0d9ae7f50ca6f96198e66746a07905a6f95906cdf706d4bc12d3fcec0834df8cd9e73926fbe483732ba42f5be9f88615d20f8d936d03f7da72711cce2639bf67009fb54e08aa70fee21387b63ad73609ffb24b748e9689abeb03fab42d98fee79af4e7bdea498da63937aa856755711a27e3b3d2d03feefa6cbd9d53294254cb8163b7c5e4c6af9ab91dbdbbc59341e2b4d514276e20e7d5dcd01a9f7cc7a7c6d9ccfd19e1fe046b7f1e8e19d90506236b14d0c8aa30e1171a846705145e8d09bfc820bc7140e1db30f3bad8645e037c650fb7f99ceb1c8be43537ab1cc946cab0a39c631083d98e19cc2598c15c1ada607660efbc0c7be7e5a1dfb9134bea2b22f084bb4cc2f918c3952cdc18c36e8cd45518a9ab39a92c482a18a723304ed744c0e94893705ed65dcb6a97755f8e0e56d61d6512cee7685cc742ced1381a937c7d58c9c71824e78a1538ab5926a6a22f61c56c6e4d6136425e5fe4485c230a9f2a3655bc213975dbfb44eab1c41b4cd66f1c4bbc91f1b1c4018c45a61936ce782c66823f3398e0ae31c14c708f49384fce9bfcf8811b71c1c7615adf6cd07ad3d8605a1f8f697d4b48ad4fc0b4bed5a0f5cd01b53e11d3fab6905a9f84697dbb41eb4bc605d3fa64cc95fc3cac2b3905937c4758c9a762a4ef0c49fa344ce5bbc2aa7c3aa6f22f42aa7c86c9618b858d99dd7dcb6d337039c1a778dced68dadb54921b5df33d0cdb5a2bb50e9803de8b65af7b0dd9ebcbf1c1b2d7999845fd32ac459d8559d47d212dea6c93606e51f763c9a40bbf07177e0e06fb01036c3e552608ec7331d80f86857d1e26f9a1b092cf3749e60d8b87fd24638a76d40526c17c2ced113f82538ca55d88b1f85558161761921f0d2bf9628cf2af4352bec42498537e2c24e54b4d8279b3e77116bed9731926fc371108bf1c4bc5df864dc52b0c9273c53a7bde216ac36aa574db4d045fb1f484c98e8ce5e293cccf62c7f0fa62e5e895a674e7c5f4537eb2428a251a5761829f0e29f86a4cf03321055f836581df85cd02d762927f1f56f27598e467c34abe1e93fc5c58c937607eec0f11f8b11b31b59f0fabf6cf4c92b91f7bc18fdd3d890bbec9249857985ef423384527dccd18e89722007d0b86e38f2171dc8ae5ef9743e6efdb30ceaf84e47c3bc6f94f1170fe3986e3d59038eec004bf1652f09d18e7d74372be0be3fce70838ff02c3f146481c776382df0c29f81e8cf35b2139df8b71fe4b049c7f89e1783b248efb4c82b9e77f8785f4fcf7633cde8d80c703188fbf86e4f12026f8bd90821fc270bc1f018e8731e11f4420fc119370de4efc9b1f24291a94bfc26cefc3b0b6f728c6e3a30878fc1a33918f439ac86398e04f420a7e1cc3f1f70870fc0613fe8f0884ff16b3bd4f43dade1398d69f45a0f59398f07f4620fc294cf8bf2210fe3426fcf308843f63109e2bb6f7e333c832dfa711c50aefd43d1a5ff8b1d2a538b1df61e6ffef90e6ff7b2c9dff13413a3f6b12ce3b0abff4a3758a8ec2e74c0624b670dcb04f0c88ce70be32913276857dcd785718df4687424bac03ec0fa624e629f18d9f24fe1a4fe2e74d82799de05b16b24ef00226f9bbb0925fc4247f1f56f24b98e41fc24afe23e6007e8cc001bc8ca9fddfb06abf82a9fdbf08d4fe13a6f64f61d57ed5249977fbf00dd8c274fbbc6612ec7eda205c6bf6750c74834478d07fc670340c89e30d93605e836ee447708a1af49b18e7ac909cdfc238378e80f35f301cd92171bc8d096e1252f03b18e7a62139bf8b716e1601e7bf62389a87c4f11e26b84548c1ef639c5b86e4fc01c6b955049cff86e1681d12c78798d66d22d0fa234c78db08847f6c12ce2bfeedfc2049d142f8c4249837d6dafb119ca24df3774ce30e2135fe0726b86348c19f9a048bcf1b2542d60b3ec324770e2bf99f98d17589c0e8fe85a9dd35acda9f6392bb8595fc0526b97b58c9ffc6ecae4748bbfb0f26b86748c15f622c7a8565f1156676bd2330bbaf31e17d2210fe0dc6a46f5826df9a24f30f17f5f3938c293e5cf49d4930af46f70f598dfede249877e00cf023384507ce0f18e4816121ff88491e1456f27fb15c3838642efc1f66ce391198f34f26e1bcf8de2f64f1cd5bac461c4342e2489804bb9ff90b57b96b80693c2ca4c60d31c1c3430a6e84a11811124516a6716e488d1b9b04735bce8bc096b331e1f911086f6212ce1d474158c7d1d42499fbfdc2907ebf994930f7fb4521fd7e739360eef74786f4fb2d30c8a3c2426e89491e1d56722b2caf8c0999575a63e63c3602736e6312cefdfeb8907ebf2d86637c481ced30673721a4b36b8f693c31a4c61d30c193420aee88a1981c1245274ce3292135ee8cd9f2d4086cb90b267c5a04c2bb628e637a58c7d10df3fbc521fd7e77ccefcf08e9f77b607e7f6648bfdf13833c2b2ce45e98e4d96125f7c6f24a49c8bcd20733e7391198735fccefcf0de9f7fb6138e685c4d11f7376f3433abb0198c60b426a3c1013bc30a4e041188a4521510cc634de3fa4c63958f65b1c36fbed87495e1256f2102cff954690ff8662a49786243d0c13bc2ca4e0e1188e0322c0310213be3c02e1b998891c18d644f2b0a2fba09045773e5674af085974176045f7c1218bee42ccee5686b4bb22ccd91d12d2d98dc4cc625558b31885a9bc3aa4caa3b16cb226826c320613be3602e16331d8ebc2c21e87a9bd3e02b5c79b84f371ef323f299962dc7b8249305764831fc12976029e88e1d818018e49582a6e0a9b8a9331b5cb23507b0aa6f6a161d59e8aa97d58046a4fc36ca422a48d4cc7785486e5518cf1d81c018f1998f02d11089f8931d91a96c92c4cedc323507b3626bc2a02e12598f0ea0884cfc1846f8b40f85c4cf8f60884cfc34c65475853998f49de1956f202ac42b92b6485722156a1dc1db242b9c824984f193fc28fe01453c6f7c7041f1952f062acda7754c86adf12ac6e7d74c8ba7529666fc784b5b7a598e463c34a5e8649de1356f20198e4e3c24a5e6e92cc37a43ade4f02de880b3e1053f984b02a1f84493e31ace41506c9b97d9cd304df443df3ab72963177ad0b5fcd5218f1ba9c93127c92ba17566e5f1e57febd691a8d384af02bcbbc0ee8e4049f3842a705b612e860935df19e905312e1b7505b89093f3502e187988473c4a7191239afaf2711644ae86fe38980bc6d155683393d821acc6a4cf81911085f83798ebd613dc75a93e7e8c773d3bedbe48a6f745f2e3682af4a994716b14d423ffebeea001ee44c3f25c4589cd93a2c35ce0a9b1aebb1fc7036457e28c3de760ec5db36608ee4dc081cc9464cf8791108df84093f3f02e1e598315d10d6980ec5aab817260c1bf0ef15a77c23e9a54e36e259d6cdde95e2ef1291f17986dce03ce266ef929a90c9ef422c16055c9993257788d023c4d7589688bbeb1d89db4576e47293cf143b47b5adf57a36537e2986bfc17d3699855d77e2eebbeabde3ea57e8c470558a5870f7b19df19d5a936f2f15ee4cc9f44a5de63c551ef00b148761d42f32511fc6b0ca42edddf35c96b39cb36d86bb2ead52f0f9e1205a57605a5f6cd27a5c8dad78371d5f2a0a870a119b72590470ad4a9cbfdcc7394d9d325c1caddfe385c616e1d2f9b74382c4a8128bd125a618cdd40a3b68696e1cb638b457093b2b63873b0fad91f1dc1dc04abd77a28ae9662ca6979a623a31454c93b693ccb7b5d304e635bfb1ab4b4eda82c5eb3253bc4669f14a6aa9c74a55c053c50bbb53b7dcb5158bc9e5a6988cd16202f347f8b898a50589cde1586cae30c5662a9a2e305fcd63ee37c34ae55782fcda1c1ecfbae7a72a2c7e579ae2373b8007af5bea05971e24b6d5586caff2e33d52d96630ef91aa14a88bf7d886c5eb6a3f792e95570c9ee7ccd282c4663b169b6b4cb199ec2bcf4d7588ae9765f59648f25cf24e90b8edc0e276ad296e93b4b879f3398c1fcf37fcbb83bbd902c6bf47b6068da95746749e642716b3eb4c311ba8c54cb7bb8d323fcd13f97d23e3df808b260576617a5e6fd273ae2feb9a259adaee57acab6afcfa42e7ef1935f5a77de9e5776371bec114677c731fe8b7bce9b459b663527983201a1f81697ca349e309815b164aef8dacf69e5c783964dac12b48ac8ec462f53353aca6a7ada7cf14beb952589eff9ab9b91c8b2ae58ec2e27893298e23d194e32de5b54e2015d779e29bf03384bea61229ea32f5682c1e379be2511cc24fec4bcf700c16cb5b4cb1ccf3ddee9895b63e14852f3f16d3fe5693f60501ea7341f5afab47d883c5e036530c9604f0ccaec5cd30b4dfd34bf017262a1b3c0e6370bb9f544c557b0d9a8a75f579c76331f8b91f5f81f5bf98d26e5ff6bd9c80c5f20e532ca7f9f2884b9cc06b85b66b8455eddbdaf989580cef34c570bc6f6f18ac7588c7aa2ee5d849589ceeaa7b0f463acbcc6409763216bf5ff8c97b41fc265edba0efe13d058be5dd7e5a2d143547ffb1aeab573d158bf33d98e5062b1b4b44cba0420ca996b354f57e9a343d0d8bdfbda6f89531da31ab6d6c91a8596f946352cb447f42b9f37bad885d5dad24bc073b1de3f44b13a7a5c49cf0b1bdd484c2733803e3709f89c3f27dec03a8bdc35e8cc6fd261a337c956bf3c5940a5e0b517e01ef47cb549de44c2c9e0ff8e933d06b22d3454c6b9767b01fc0cff568eb286761717cd04f1da5761c93ad6cae270fc77df33a83172b75fede2aaefb8b5ddd7ab4cfc6e2f710d69b952a7eaeb74e3ee0bf6e126daa9d83c5ea6153ac56446c9958fe0b1a3e5a26e7624c1e313129ac29abbc730bb00fa07bfb2ecb9db0bc576c9db17fb9eef592f3b038fc0a1ba330c56181d072a728630ef3943bc9be7da53b8c290f11844990989d8fc5ec516c9c2c78eacc9275a92dac5a1b6f32d72dbdd36483c4e6022c36bf36c52607ad1f7b35f0a691a9d721f92de820da5e8869fb98bfbeefe45b838cebc1e752dd89268e1761717c3c7c8a54479e221763dafe06ebfbc5c758e03456af059589b121b70d517b3e54ddbdd42598f6bf35693f27a0f6d39d2b5b04f36a999bcb6beaf87ed28c22bf5f8ac5f809538c0f09645de97ae3fcc5795f91b90c23f32456ea06f784d5ec70e7ea7c47cc46f9ec76613151e5c6cbb1383c156c2ee57c51f3dde4b46fbdfacf7052b85acc584ce72783687d05a6f5d3fe7abecd5e3ddd0ca9ba79753fbe26dbf997483477fe9c21f23b9f5191ccfdd52cb7bf734bf842b71630a2a6ef6084a79f21799d6b50e9e42afee6d21a4fc827eca796f08c03b07103e6fe0c4e70f8db6463c5f0f921e5c5ca40bead16df9c2a135651255ab3231cb2e5e229b534215d2c4cfd2523408f098c5dfa38a9a50a7c56f23a91cbb8df5deb5850b68c9192e5901ec049d7b798fe8ea76a7b99aa0d720732b994ab2ed6945e8bdff3b73534db50e75a64614f8c497757c002390722d1d6395905b06d9655f92d426489744e69dfaa7f2e4a7feb702140b5d3d38a5b0a1a7426715d85a9b9d5c62ae9667e7410656735c8e3a9f12c25b21e02d92a96277eebe8963a6f592ffb2d660b1fb59eb98b8daa9dc8c4016493c14990cfd909323f1620f7f44a82fc0325c8d61e90bc46c155d8287d274716075ccfb44be27a9edee7295cb00b802b7d1073a799c50159def824b2172891f1c24ed541f5c2a15c8eb01ec178db300ed8f6344a627b91125b476169dc9ea095950a111b05d02a59458d4b269d372689ee254a748d053ab7d7bf2a265590b74627e1fc91124e3b01c7dcf51a371f76fbb824b49729a17546dd7e9c33e45e90215fa1c4d7c937be5db169333c323609ef4f7656750b6301f2897e4990af525775554524be159009a002f21a25aee6c2ee6688de95ede2f5716ad2f31e3a85e9754a4c2d3dd9934f1b8a5be369587612d59f2951b5f264c06ae1fc794f9b1a1d8e03ac26a0cc7c83125657b4ccd48796e3566b7b0bb43cdfa444d8bf4e08bd5592f858e663939258dfa2c4da81f96999c6a7267794a8c9656769c2f55d32ea3ef2108c363e46c22b301cec5671759ba8b2686326839c20d669fe1738e69193a26291e3734c21c7475d2e2740c7534e9a523cc74737694ea83ee9304f17867abac0795aef30c9495b54e704ec9fcaa943133a2790a7c909dccaccf1dd1792e3b3df37a78ea5764e8445557200db3cf09cc75ff5f6ffe763cb797c6cf91d0e81ef1bc67fdc72f35dca72b3974c63772ac16656814e84a9bd687d151ba5ebd3a3963ede2d0b559969d2aca9a7549dea27b2752959f9c7425495e4af9468bb18d0e2333f56f1cf8dd0e1ec4885f30596c4f99e4d380b6289f34b80f37d9b7016c612670ec8ec1fd884b3289638e7039c7fcb04ce8d2850a83ef79d8445510b2a9c0780ccfea14d380b6289f33880f3a34c0c1d6130bd9639920e65372a947f04283fb60565612c51ce063ef3135b5016c412651f80f2eff4f35c56b1d18c2f15514ba94b441f4599d352e7f7b68a7e09fe40fc401e06b2f73f32314e8c173cd8be5fb5a6444687b50d15d67100eba7d4a3c6aa67865be146fe6d85ccd8e4042a78bb00bccf28e1b501f0caeb4d963e08e0fbe7be2c66a038d26c9c4d85f26280f25fd463cfab0424371b5765ca0a5752a13b10a0fb9c7ebc6f9508e26ea6806da1406881e3a8304e0518bfc88405e6d51b0b9c04d0fd7bdffa415794bbe82f8f0ee53d54280f06d5edff642233e77baadbea76862c92ac38990b2cf2cb7d5bd986023354d92ea6c29a0bb07e95898c8e1535de0a0f614627b3d03e00e5d79428fb3138a21c74649987e52ad79ac113839ef3d300e26f2811f341f64d9ee914534503b1d65acd18b4a79b0068dfee0b6871ec84c806d0becb447113b4b021ed7b242b6e8a4065e87b1bb1920e3490617d1b58eb0f360dd0928e289215332f039c3fda84937444910ce78f00e77f6dc259184b9c23810ffd9f4d388b62897319c0f9932d238bf994354db2def3274146670d2c4159184b94538155266c4159104b94ff0456d9801265dd87698b62d842da0ab036dc9716eaed391a1bc39ea3ff02948d2851f24963de163a9f8feed220c3d68a0a5b23802d8b129b5a22922fbaced630be2b2dff4a4086fad4c98626ce06001b53026c2aa4c1152d8635f931a82b7606c0b22981a925557ea79a127a3db289a61300cc2636c11c1343982301cca636c124ec4e23830977986866134cc27a2219cc110066739b608e8e21cc2200b3854d30e3b8d2a110c06c69134cc2013332983d01cc5636c1249c4a4006b30780d9da269884cbedc8600e0630dbd80493b0338d0c662f00b36d266062f385f4c107c26c4ed69cec0e60b6b3092661014406f36800b33d254cff93a6093338d9a4e9e90063074a8cbc637a2b98b396dc1d26f9d9cdf875e5b607f83a52e25383b3792cf91d18ae6eed2d90e23ce12f1fe0ec448953edee53e104aa60de254df8206dfc06c34ac0b86267db801296e164405f0116da8512289fc6e91dbba98ee1a86116c0d5951297da92c93b497aa6b443ef5669250cae5f24f6956496b818a0ed968901597f53f9093b80c94af1450065f7cc0ec856637b31c7a0b46e01b0f5c844e686ed6cfffbad1176624ca542fb3d40db3313f54aff7d9571ec139a0970f6b20927e97e6b64382b00cede9438bbfbcef8de2fa51342fd9a0aeafea0aadec746a884dd1b64501701a87d6d844ad8a82483fa0790fdfbd90895b0614906f53900b53f2554b59c54b5d4f9efe4f7b1fd7ef99910f1c90922c4eb81331860cf1456c2b174b216d3df81b50edc9743195e94a4eb28c8606e013007d90493b01a4506731b8039d8269871dce3602380996313cc38ee90b519c0dc8f12a6da887114ab9f1b31560290432841c21d0395d40cc1231bf09d02e00dcd84158eaca756580e400ecbc43a335561e7d5f19d60254ffd1a602b0695f4e19458fbb0da9574f7bb244b58319bcba63901ab45cb875f83dbed4c753428a7c57b2315dee500ef084abcea3b4cfcc51b045c25bb9c722d5016153806b27b2e75a1c33f62b48e6d627c3ec774e67eb3a75cf84dd261e08154f03a01787994f0d4d68c66ab2344d78c0a5d03802e9f121df7e87e3f0206c3c4cf071e03901664a2e4f6d30fe4ddec89b01ba3980a6b4750b414da8895b477880ceb63c05a8bf6e53c8ff8afb3e80a508eb477c202215ab2090b1700b4a33231c28e65feda73dbe338bbfd5700e7689b7016c412e7e700e7189b7016c612674f50d28fb50967512c71ce0438c7d98473642c71ae0338c7db34d92b3f960bfae701df39c1269c05b1c47924c039d1969ddef229774720eb2a7e0ba09c640bcac258a25c057ce6645b5016c412e50880728a9dfb0f12ceeb205b49b41064f6a999c00a575aba1f58d8560f575c1600acd3ec991317c79947bf0528a76762b20cdf9fd0bb9aa8fe8caeaf01308bf7ad5dbaa2dc2f52117620936dfbb80114483332b16f66a1b0bde40851866c916cbce874608b332901f664fad4ec54ddc6705098b4d3782c15d8b5c03267d9b384358e7388c7021b9d9d89c207568f923b78c05949f15d5add05c02cc9e4ae09eb7c4cea8ae39eec9d41469f631b50c2ba2619d08900e85cdb80c671dae15720cbcfb30d681c779e690c2c747ea61709fae90489e3b7fdee0456bac046a871ec59ba07405d682354427f4a06f5260075918d50e3f895cadb00d4fd6d844ab894950cea3b00ea621ba1120e8290417d1f405d6223d4387e82e93500b5d446a8847b7f91417d13405d6a2354c2cf9390411d0f2affcb6c9ad1944ff9e91cb241bacf808d1e6013ce8258e26c09ac73b94d380b6389730ac079a04d388b6289f32080f3a04c2fa3a9bf9bff1c02b0aec8c40089bf890ea49ff8261b6d5a02601e6c134cc26a3d19cca100e64a9b60c6712bdf6100e62136c18ce3a0f2400073954d30e3383d6c3080b9da269871dc98aa1f80b9c6269871dc986a0080b9d6c685dba413c18ba9b02e0658d7d9889574d50719d6f75812eb7a4aacbd0d58cdeda359f2918c6d42bd940a6e1b60b36536c325ac4e91c1fd0958ee069be112166264703f017037da0c97b0ba4506f719007793cd7009dbff6470fb029f5b6eefae2484bd0153a9d0f600680fa5deed2eb9c965b1735cebb0d8c8e6398f6ca403d7830a5c2b90e10fb3a94f9f740d3d599ffe8b0067854d38497b4cc9707e037056da84b3309638f7035e72b34d388b6289b314e0dc42897318337df310eecde8ae5b76572cf3b29c47e62059aa7bf776543d58f15dc97c26700a5b29b1f70f518d82dd2f8483d34f52415e006cfbf03840269c3d4506391f40ae8a0364c2fe0232c83f03eea23a0e9009fb0dc8205f01206f8b0364c23e5b32c8af02c8dbe30099b0ef960cf22d00f28e384026ecae2183fc1d80bc330e90099b276490ff0c20ef8a0364c2414a32c8dd41156e771c2013ce422483dc0c403ec2964deb483b28c9566b3f0d9cc291b6a024ed4d2343390b58e551b6a024ede72543d91aa03cdacead14e3b8e27507c8ecc764a270527b5df0c0fcf1ad8c0f28ba1fd65aea28c68b24759ce63cc837b5db21ba2cb7b32ada5619d9085a1eb0dd63e30099b0554606b91b80bc270e90097bcac8203705908f8b0364c29e3232c8df029f7cbc2db506d2d5b264b5860f00ca136c4149ba52960ce51890f54fdc971b34666c0add042a940381559e4489b29d44c9adcebb3b7086f661259bcd550a109e6ccf5ed5715c3f733e40790af5d74c2b9cdbebc48ee9706ec2420176770c671ab403f04ecd4456aebdd177dcb3f21c80f0344a841dd2142c2aa6a4d998ec63ee0300c6d3edd9259db09543b64bfa4a50d53983fefbcedc1a37303eff6abb5021b98532e1478ac93c621b60877bf76d471d1498a1e913c554588703ac675262ed28b11639ff93d3d84b587df99ac45a00f22c7b369a271cd924ab39ae0728cfced446f3f5f52b27b301cc73286136714ecae5b070b11c028e5f31d30ce03a37132ba5544f6499f10307585f4f1cf73fbf14a03dcfc6c5eaa423986425f82050ab3cdf46aca4d315c8b0fe0558eb059974047cfa4c353ac5a63eec93b60258ec85367dee95f443ee649f7b2d06967a914d3849b7aa21c3b909e0bc3813df32e3b54fee2bd73b81b68bac9f911a275937c71900e02536adf523dd8c86ac46fa2780f3529b70926e994486b309287c2eb30927e9579dc9708e05382fb70967512c711e00705e41897330abdd8be49dfee24ee6ae147ff31ae8762132d9895c2aa8656084b2880a763fe059afb4651607691d94ac6dff044079952d280b63897232700157db8292b42a4f86f2236095d7d839b93b8edf33d90eb05e6bcf2419c275f864431dff0128afa31e12568dcd32514daacc5443936cbedb6400effa4c646fd545c7916dacb95ddf266e158202e8064aac7d0dd9dbdd1a864f58d8cce6883ae7d6947d4c8480c97a981a02bbbdd19ea1e2387ed8600140f9339bfa3e49e7b59359e62100e74d36e1249ddb4e86732fc079b3bddb6e122ecb229bddf92c407b8b9da39e84164b36ea990065ffad99980e56584fa783ad06f6799b4d9e349f32bb9379d21900e7ed36e124fdea0e19ce4301ce9f67e28ba4c9594edc43ba42ea5bbbe9df00ea1d99f09d0a6a79caeee4f8f9cedf039077da02328e33ee2e0320efb20524e14e0b6420b341b5e817b680242c78c8407e0d2cf26e5b4012f6c193811c0e2cf21e5b40c67103a02e00e4bdb68024dcf2870ce41c00f297f68c0ac5f10ba31f032f795f26aae7413b37e2d8b5f100807abf8d5009c72fc9a0fe12407dc046a884b54d32a8b702a80fda0895b0e64906f56a00f5211ba112b6d4c9a05e05a03e6c23d4382ec9be12407dc446a871fca4ebdd00eaaf6c844a58e52783fa0b00f5511ba11256fec9a0de01a0feda46a8715ccdf97300f5314aa8dd58ba0f6671e5d507b2e2fc31ac5300d2c733d1dec787e4e2de4f7f0440f91b7bf65822cce8648b0f37815ea8df52a2ecea9cf04c0cb3b6f77b7733d82ec627e0c01064406fa4027a3cb0cd27a877a2f36ec2b2d491bcdeb9c205ce63ee2c918a1866ef9600e19399287c5417332f6276cab2db9bd133d4f05c4985741ac8e64fd9338596b05f94acb37903b0cea76d9c4947baf688acc6d90e58e8333662255d684886f5d7c05a7f67ef945ac22e12b229b50b81c5fedea6a5dca45316c9da47cf034b7dd6269ca45316c9707e01703e6713cec258e2ec0532fb1f6cc259144b9cf300cee76dc239329638cb01ce176c9aee4dba8510d974ef8381ef7cd1269ca45b0891e13c01e07cc9961d1af2633969ec7580f28fb6a02c8c25cab9c067be6c0bca8258a21c0250be928921387794681e337dc4a4be8c179d0cb2fa9f32b1d5057ff106619d4af66619247e9d740900ef554a787cd398adc0fae6899a24ef794feefc153f7c1d00bed7ecdc088870dc926c23a05100ebeb99d82a951729d03a33b44a986c70ed5400f0cf9900985fcf009e0800be9189d51bfeaae2f1abf2dc0c40be690bc838cee5b801807ccb1690715c73791700f9175b40c671cde5ed00e4dbb6808ce39acbfb01c8776c0119c73597f70290efda0292b027920ce4c300e45f6d0119c71e9f8700c8f76c0119c7cf793f0e40be6f0b48c2959564201f05203fb0673935610588acf7e71180f26f99686517d5b356f65900e08799183ff4ae9e709599c1dc5d8bd5142bf29e70b2c9ab1301ce8fec99ee4fd848249beebf118cd47c4c89b2a744b98d6d726ee3df672b15999ccf14de208455d276638ca602db1fd8e827d45f4f87beb254eeaecdb3f632f177b9f37badb0d1f8153d1d01c6bf67ea53b62ebc558ebad5d21ed7b1c36a4af0f88e201e0560fec39e49ff84ddbd64763908a0fc34d3b3d3fd7dd992102bd9972dcb4071f45926b2bbbf4a7b7e2cbf8dd109c0fca74d30e3b8caa73780f92f9b6012f61691c16c0f607e6e134cc23e4cbab91900e61736c18ce3f7305a0198ffb609661cb7e16b0b60fec7269871ec846b08607e69134cc26e0f32985900e65736c18ce3beed0cc0fcda2698716c58360030bfb171d933e98cf4622aaca300d66f6dc44a5a9127c3fa5796c4fa9dbdabc9096ba253a9d0360716fbbd4d2b2249eba2647d9f2f014bfdc1269c05b1c4f903c0f9a34d380b6389331764f6ffda84b328963897029cffb365291f694b896c1acd5320a3ff640bcac258a29c01ac927fc3d60a9405b144f93f6095094a94ed587258d8bbb95e86e62491d52ff703081b5022acfb923ec2de78b2257dbb01d686b66472d2f14bb24cfe2e40d9c8169485b144b91a143d59b6a02c8825cad10065634a946a823647551fbff05b02b277762640e6d75390b300c826990039b69e825c024036cd8497f4373f2e8e333cd60194cd285106df808c70888d6cc7ac690067739b7016c612e73900670b9b7016c412e72a80b325254e1e033eb2532d8b1d3efa532c477ae2d74bd91c606b654ba59cd43f9295dcbf01285bdb8292d43792a11c07da376d6c4149ea17c9507e08acb2edbe44e9ad4fc67192eb3f00ca7694283bb064876fb28da36e67a88543867108c0d89e12a39aaf916eb9df2cf900ec02265df0b7940aed6880b603255aef9e97eab85808db22771aac2f2b7d9703a81d29a1b60650ddf593d599caecc554f08602789de82d32b9bf259f82b55ddade6102e334cf1aca99ce917f896a7d0ccbf4d6006a674aa8ad84b4e45ade69ceef4d622bd172f11019ba1e54e8da02745d3231e2187c6a6b1cbf76de1f54d8bbda889574e20b19d63780b576b3a98f88743097ac8f6825c0d9dd269ca4a39064384f02387b64a23de41d85ac2feda1a50063cf4cb487ea367f9d70210bd9fca24b00da5e99c8f0fee7af13362fc93a8bef03387bdb8493b46b8e0ce7bf00ce3e36e124ed3426c3d915d441fbda84b3289638a7039cfd6cc239329638d7009cfded6c2111d641c95a487f033e74804d557ad2156a6455fafd01ce8136e1245da14686f3588073502666c56193b9bc9619bf1ecfbe00e4605b40c67138b81b0099630bc838aefe190340ee670bc8387ed962180039c4169071fcb2c5e100e4505b40c6f1cb16cb00c861b6808ce3972daa01c8e1b6808ce3972daa00c81176ae93242c7ac8d649ce07587329b1a6db344aefe2206c899375705c0f60e6d9049370a7573298370298f936c18c63d7dbb90066814d30095be26430cf03300b6d8249580091c1bc10c02cb20926618b9c0ce64500e6489b6012b681c8605e0e608eb209661cb782ba06c01c6d134cc2b61019cc6b01cc3136c1246ca193c1bc0ec01c6bcfeaa038eedafe3b80725c269609f0ad2494d40ccd811b47056f0580373e133d45dea5555ce1fab17d440e00398112643709b2c209c433339f28b853f60879b336ec25226c3e92adff9900666e4ccc846d8ea9a7b6b913d8e6244a90ea139e79ac7e7dc2730f0038d99ebd61e2f8f185f100e5144a94b5bf39b9cca131dd517abd80ab8edea555db85b5127a4bb20556bd01d8a9f6d8681cbf9d5606504ea344d9d239f16e2c9a5c47591dc3719dc600dc749ba6ae92ceb1246b247e0a7016db849374d91419ce16a03e39c3269ca4db8a92e19c0470ceb40967512c711e0870cea2c4c94f7860befa2c7e989a029f38dbc6e9fca44ba28aa9b03602d657622356d2857b64581f14d69a9da5099f594bf874e1c1b80f5b27f477abd623d82c511b2c1348d639e7f3445b661b5bed0059e1fc0b96162b9d7fa6eb09d1b73983ed625bc5552e6fbd905de9dce59a55b33cfed5eb39dc341a4bd3c8114fb9cd800d8e9c8da2f554e6a9c3e624d26d65e14aa970fe5ee75cad608b40bfc1426120bb9d30bcca0a7b146608f9de1a73ed50f34499b0c3a3538e58d50c439502ed9689bfcb9ddf6b456af0c44b887e0d4e63b3a3e37c116e8dc3678d3896d684cd1dec044b8c727eb92dcd11356dcc1172616fa53c53d7d3cbe4a9955ada5c9e2409736ead88ccced2c5a8a4263d3688dd5eca84d492b4314d1f3fdc665ba448955cde1f5bafe33f8fa7bb4c7661a69d137c4fc9a54ecabbc2f9be5a55a207b34a84c9fa7fb82edcf421120300 serializedProgramBytesString: - serializedSignature: a1cf4e257cf6cb3a4bed3b315530fa91a929c4b1e0f5fbaff7b30cac3266e35d658c4a71dd901fa020f5f01b9cccea88558fbcdae15d9d4602c059143b47000c + serializedSignature: 6d9c493e68d627b5e4cfcb04af8996e3ddc27682aa8fb4e46bcf3930ae324cb158bce12cd65fb889f1f4d95ebb7e1b539df5979d27ac5bda4d40bcbc1cfc9f03 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/5c320b13b077cc5498970193f8eaad45.asset b/Assets/SerializedUdonPrograms/5c320b13b077cc5498970193f8eaad45.asset index 60b6bb3..7167e63 100644 --- a/Assets/SerializedUdonPrograms/5c320b13b077cc5498970193f8eaad45.asset +++ b/Assets/SerializedUdonPrograms/5c320b13b077cc5498970193f8eaad45.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5d07781cc7759e230982007befe49122454824019000ab288a24085260170a29b18804d108114d0058a0debb254b965c645beebd48969b1ca728dd49e4c44994ee244ee214274a6f4ee2c499f776f6eeeddcbcbdddbb9bc32e6ddc879bdbddd937effdefcdcc9bb733b363aa84fc4bac915f4745a3a81395a245b48b7ed1277fd5c9b4577e9c23f7fc113128d32ef9dd2aafad11c92c77c2dfaac43cf9dd208f86c4b0bcf382689369375e6f121df27783bcb7431ec1d94ef9df217325c6c99b5ac46e71581c127313b3b390388a370da97309902b31417eef1223f26a0732058554e1a5b9f2ab495e19c26bbd926937df09710ac5ea95d7dae43d83a247d23c8b14273c3553e00fe12453553a56a57be4ff78f9ff14399652241e53c7d355ba57fe9769f7ce52e93445e36ddaf5d9e45ed3f5392a9dc15c9fabd299ccf579eafcd3ea78814a6ff4e1757e165e6fccc2ebc22cbc2e0ac8eb62952e55e912c573893cfc863a37469d9ba07e53fd2555da40645d42ce41ba4f95f90c3996ba1d534bf4965079ca7cca5ca6d2032aefdbc931a5b35c5d7f56bb3e5fa55769d79768f956a874bfcaf71c3986f4a03aff0e75bc929c87f490bafebc76fc824667bc4667bc4a27a8dfefd4ce9731e7cb353c5c1c4a099eeeb94672ae51a37358fd7e1739967a9a40f1a0f735abfcefd6f4d3a2f1d3a2f170b586bf7bddd5cf2aed7ab396af42a5d7a8b449e57f0f39a6f48e697cbae76fd6f8bc59e3f35a8d8f635a3eb7fca3c26b2747353ac7b5f2932a3d4174715ca5abc93548d7a8f416959e54b45e24c7524725af68f94ea97cef25c790deaacebf4fa46dcdb5157afdfd02db8092d79cb4f4079a6c3709afeddea4d9c06975fd25722cf91cff5d8d8eab8b7606a34e8251bb8651a78651874adb348cda54d96f6af9ba348cba547a46c3c82dbf54bbae301aff6d8211a4bb196cddfb3e408e130e6f98b6aaeb1f64ca6d25e5523b3fabe9e2acf0d613178f9784078fd237353aaeee745d946b7cb8d79f55f252f969bef9e418f27f4878db8ff9e4d8bd2ee98c7d48a343fb0553dbe6f66d6efbf5143986f6eb0d2ddf5a951e51f93f4c8ea96d7f841c537cdc725ed2ca794b1d573a72cc70f5efd77f5609afbd9f53b43f4a8e25edb21d0ecdb2c7b4fbba55fe8fa9e3dbd4f1c7c975f73ca5ff8c46ff750ddf6c7d71b54acf937ce755da43cef5a8b4979cab22e7a09c4f04c0699d4afbd43d9fd48e5f084063bd4afbd53d9f22c7900ea8f39f56c735e43ca4b70b6fbf7ebb5676ad56cea056cea04ac3fa58badd0e09afdd0ea9745878ed7603390fe9058d7ff7f805a69c8b5a3917557a492be792f0d68fcbc25b3fe058dad824179f8d225d3f643a699b4addeb9b9ce3e99fd4ae2f0a81d566958e68328ca874923aff19753c591d7f961cbbf9209da2ae7f4e1d6f513cb96dde56e7785a101e5d7fcbad6b776878dde1e03579870fad528dd69dc2ebbbdde9d098e2d2d0fb92bb85b72f9a44ce437a97bafe79724ce9e9e5dfa37ebf4c8e4186ef3bb864dcc7f50d7e7c4a3a93dfae5d773174f97d4578f885cbbefcbe243cfc4ed5f3bb7cdeabf27f411d4f20e721bd8fc1f33eadbc57b5f2aa99f24a99f2dc7cf733e5ddafd207b4f21e60f070f17b50c3e341c59ff2ff32eecb854f4967aadbc786a91f0f6bbc3dac646956bc3dcf94fd0883d1231add57c931a40f89b41d3ea4ca7add296bba8b836ea78f32653d4ae8d0faa4e84edfa68e4b547a9dcaf7451f9cdcbcdbb4bcba9ff698f0fa7125daf92f05d0c5752a9d4864e67875cf5f1f82fe76429feafe71f5fbcbdaf10b24bfc46f46bb4f19ba1d3d21bc6dc4138ac66b044f5dd61b1cb966bce953ce54e1e5e92de71e0817b1f73c29bcfdcd932a9d22d2f643fb9b1dc2dbdfec14defe66974aeb54ea8e41ea159daf9878294960a4f04639226a955e4e153207a3daa0214df7ceecc14c203d1ebee06f15163b2c3be30149c010516cc178e5b0f4c0d61b238af3139308df75f8dd2a737423d1af6616f1b58c2280b91ef9e920e1d021797e2f46532120da2daf548a033285bbce4817f484fc78a91c95c5f64847aa4334cbef01a47746b29d99339b48103ad5ef6994349dc86eaf3ce3023a208f7b90c326fcbe889c7620f70df2dc30c699fbe47076974c2f636999b20fcadfa6329b1564661ecd015eeebc134676d5b45b4a03dc57a18ff6638d8c864600faf15f55d5705c15461e9ec8d0c48f31741a19e8d01a148d750859c2736ebda8c23eaf3103c1f032664a68b66f07ef8d72b0e9278b191950f7429420ade157f77cfdc5632f9fff5e8957b41a5185dde7a22ca2f9010bf42a12733228f88b505232ae1a18d5e14f98e04757a7a988f03bf9ba315f78058cc79ec9ab8004f894cdf2c765f9df834534ca63a7534bb78319faa90662a5087166079a8d4d0ee431269027141be4ecad8a1fc8135272a541863f3382650c82d978e0101c6b4210bdc9935611cc74bfdc5fbbe4bde7241217d1962ec8fb4dee9a3fa630b458ab616ac67322e299343a91e138e2101e6742b8bcf80d8153bb7ab2f42a663cc17d5d9a61a33b7698319dccd6727f1e38044b4c08e208ecb455045be439c745afc7abdde8d73975ad52b581c328895f4e7f64a704b6d4a9882a3c0c2e0c5f1cdae34d684f1a1dbf21b7161506d07303b7a8d37dbbfdb0ed69a901bd6a406f06c75499c614f0c3109f60520d867e5b46a929e1e6d0f82b686660a39f85ca99efdb94703c702a2a33a908509c6d624b57cf2c5e3de526f54c29be7ad2be546eea9913583d7359f564e78153cf44138a18b36a2e228a70ad1fa9b4cabce13184894babf5ea6e06713e82382f43b8ec2c70104e32593858e702633f6e688426f3563e9923beb000c4a770c4171580f85413716853178b4c17fc87f22f8378194f7c1ad7f02f2940c33fdd5427b0c4fbadd689a081d5bd3847b4431c9646799b7022626eb9fde87300476e64ad51a69dc8059c6f53dea07f59feb56d690a9f34c655085abd081e1eb62f455272530e0d5c89b92958864d41b478e61a9919268307f707e63366440da0cb3f2db9ec9327bb717a6e3fda5d2bdedb22796b57bf33ea45295f2f669a788036e42a934120c7b9755630a770bc507fa525193ccee5799cc5e1b4d284d36cc4e9b4a896ff1db2963afa035f1430bb8cd7e0e181332b3b0c56b3393eae36f13183f0710e3ba076d57ee4cec11c8e8355260e66199138a4ec3d772ee6725c5498b8984ab880d2baa461e45ef63caeec6b4c654f26659fc6badba59e25801ec2943b9feb9cae35744e89909dd3021371e89c561b2a6135105a936e06f57296f1e52ce4c05b6b026f8ea1c1694695b589f3aab6e7daec2ce29a9d4a93c45095aa726f3f169b0a03afa55a647a2d9f4d1874e7e3b52ce13085e70759c7423e102de508af3729ebbbe3048e9faae5672bf95e83e3ef6ad920af959fed32f5e6d8803936ca5fe5d8c741bf96c49a09e9b06cb9e017fc1e427fc879369454756840a649d91f42330fb921b2d7a74c23897d5fb9cc714136ffc31845e9417f29a9f2b76911ef24de09a527c52d18276cc67ba1bc8b2913ac9434cba54cbaac1b51925a56d6751887588f39cac51e496f10a55843caed93dd1a2d0baef5e020e2bc47ce73c8d372d9cbd7c9ef247a828eb40e253707dc7b09514d6207d925cf0fa3e4fd889473a55f524edf03dda683799f92b54693954ac2c90a8f5ab6c83c5be4bdc0a5a331a717a23a5b2e4b032e876479ed193a7134592973011fb5197ca44be1f8d822736c5498ef93da1c52f2f72066e789dc2e866b9426daf19a13894b4a14bbf1597112f91b406f6c3003efb4e656a5ecac5b45ed5af1ee1ea4dd25396995df1d0ae10d19926d41c936b308afc79ab34ed59c26f41bfb91eb4a99f3b0f20dd39c65da7aba8e5d50b6d0aeea0c203082f6bf4ac90c75a05cde7156d5be6179d541c7b9de4d2c6804d14ad7e47644a41da98cb058010a1b3514a88c1c0a805335b630e5ca6e5b91bbc1542def12eed37ca79b6847ae2e60ae5e3cd78de8802423292ef5fabf1323b3c0e5a60c2ed33c98b9ac9132ac91baacc1dad0a0d550e06058d544e06348f9f48e069c73700758e2801a1f386d148c032ea1abdbad6ad779e18c0781cfcd1a9f35596b6d8dfc80249b11cd9da93a700edbaa7645774b06ddf45d1cdd4d3247add25203da8a6b5f83a976aa3fd5a9a75b07ae856e42efad0fe53e276942a9aebee17cbfc277d050e31c6b1e52d60734eb5520d2a1e6d04ab71020f33ae49c93c92c752df67e9b55dbd3efd17a976a3fd2ad8e5ba7c0b97146f543c6ba9244fb18464cfad0974da237dd27e5ab54bceafd30e584e37513da86a3f93ad23a3abc2d9788ebbd6855aaf7692596d2a1f2ef54356c2d0ecd5a517b3daa06426b3e9c92a52765d3b44e7835d64f6cc6b18b73f277b76ae33a31f6d1aba4d77b662a1b27fd66d24bb85cb8a826a5ad017d5707ed299cf57eb1165b825a9ff66a03f6582ece7b94c5f6aa184812f11d509aef47c9ba1199b4e49d3862e9c6b66a8db2e53694be43b50abde8ab9d45eb2f47c4932a47afaa451deabb17a5e996792a91832e2559182f3169f012ab70505fcc67a33476123ed25b63f2948dd11d5830607a2e9aad7c2e02b38c1bd56d308ceac6841cd52de71cf88d26071ea88755fe555c099b4c250085c9b284c9214b596132318cc9d87d78ccc7989a70180255f3b0a77b0a6f7ab06a64b161f40e7f6613dc22dc87c885e18f33cd959c6eb79a743b05f98169444ee30c5a388f0dd99db2a9bb3b94beafe64abe8eb3dbb016b58a2b619ba98404d68c30f42bb86a7dbda15a8f0d59adaf311187eab0dd604bee5f46015bf802aee5d0b9c1840e1ca63bbb3028ade6cad9612a07c278e7e4e7a43440e8ca200527e9a4b4ea4efc84297b8da94dc1f86a7711db94bde8f89e4521bbc51d6a30e204f09b5579aeab0b344794eb15be9dd9e9671bc6766617b6336b33d02824cf5cdbb396b38c3a9365401872009dc611a50ff7a144188ba834950941badd223348f7d6847041ba2a93b96130fdb85573739f0b354929f6cb6bcee8b2529d6f4145a49f1f7973f91b143ce10ae633ed41435a22445edc70a6526d521b84aef70a26740d1b9d840f5daf3369101f44f4155183355a477f40e66d451fde899335a4b04be7d98d31c03eacb6905747b8268ba61b026b7a1f6a7a7d86a6ed70cd59c47a934580a6f69b04d14d601f6f02355cab74c0d42ac11386461c12744891e0e1170c919d6715ad29bfc8f1965ad5530d270c3414aaddaae5daad8386766bdac470edd6064ee44326911788b413e88d58b80d72125777b4a78ec23b871b39710f1bc49d34299cb89b38e2470cc4d78424be99c3f2261396f0e47038f5b0eb0846c8bb535d6d18c4b67042351a84fa5648a1b672c49b0cc4bf1392f87526e2e007c234b2cca9593ae5f93ce56d1ce51603e54418cad7735a3e6ad2b21006be7d74b99da37e2c5b7d74eae0a018c67896e32c9d55d6956e8cee946584ab8f37700670b3c1005e9b11ce007670c46f3110df31331cf19d1cf1e306e2474212df65220e6ec909c1b825b05823bc5b52c719c429ae51392d1b13affa0f60f07d2094da779bca85597eb09d933ecbef9b6fbc717d98597ef506e25538f1a238be163763ab1ee3c1bd48a53e359fc519f4a4573ee5330b0e025ae186696784ee73d9e49ef3b9f670ed696bbe2df55e932de06418bb03756edd45e6cc3cbf551aae5e0f0ad8d0f202f2e16f01b09556306fbb4db803747bbc72fabed1a46fd04abb897d5ddd6dbcba1bb8f6ac2308619f066b1f67a19df95ae87e13658887760561d967dad0018ef0b93c091f341186f02454a97c273a1fe234785b9e1a3ccc69f07cbe1a3c62a20ccfb07a82b05ccb13be8903bab700403772c4fb0a40bc89b3bdfe3c6daf99338f813ccda385e3f8f63c393eca111ecc93f0310e8aa13ca1b899e378384f8e6f3110aec2c9a3c55c1ea54799c347c3611fbab11a0e55383935736e7990d21609f5c72c0a807dec4c8bac82d0e6bae0e39cf55ccad37a4e98948cf365edae27d7d76e3ab3239c195a473c3330067350f965132a46658d08773d79be1c71aa3b69521df464b00f5f5e3dd92993ee70fa71316763ecc6d92ace5cc1f09a828d0497851a03dd25ccb332b2f1c1e9e756937e60700b7b03e6bb84ed34a7fc7bf255fe198eed7b0bc0762b47fcbe02103f6b220eaeccfd227f57a68d03fc817c016fe79ae007f36c823b4c84a19f854dfcf48eab1a3a2ed203e9e55ce4cbe9349503a41e0e22c0084fb8cb4418daa147fc2ab75ec05d7c01e738a53e9aaf52bb39a53e96a7526fe3083f9e27e1f326c220e1134108fb0cc67b4c8421e8f96410c21379c2bd06c255b890057ac0d10bf0391b4600bd4e8c8dba9b81b9f9d36133ef933df3763261027f4f9910357676f07e8d8ac476913de067531aaeebece38cfce93c8dbc9f23fc4c9e84074c84a1ef818d7ff3ed7b6ee7b87e364fae0739c2cfe54978c844186221ef0842d8271632cce1fc7c0170bec0c1f1429e705ce4e078679e705ce2e0785701e0b86c220ebd236ccc9b57ef38c2e1f19e3cf1b88363f9c57c59be93a3fcde7c29dfc5517e5fbe94ef3651066f1bdec491afb77d0fc7f64bf9b27d2f67d41f288051dfc761f2c10260723f47fc430520fe0007f887f305fc418ef247f2a5fc1047f9a3f9527e98a3fcb17c293fc229f1e30550e2a31cf14f1480f86326e2d02dc11b29f2e9bf1ee7087f2a4fc24f705afc74be5a7c9203fa330500fa290e0fd8163d63be044c11313f2ea50b7e2a7173079841715a52ed556b2f9cbdc1e14a760a908b8e0bbcfb468551cbdb38f93e6792af43b8a308d7cba73ebe69fc1064f450a9e481658ade57501ec52948b0e0cc09cae972d309a0de2b7e681d15fd18860d83d3d31c4e9f37e1d4621927583e59279cc5e940377d8f3f42f9e3f00c87c3cb261c60d60fc70dad05f572e07341382b04c0ee83ebd94fbedc6bc5db39295f3149b9d947ca9df2d720ce9e72e46d13ce62739dd7f4d6937eb2a7a98591e6594e9a2f98a4b93e84344e9df593c5a62d3ec7c9f5aa492efd8146a62da657c105d3019f875b4f5778ddbe83c3e08b260c566a18e8faec52fa3c80ad499780a5cdbc76c3f0f93cc7e7974c7c6ecfaa2bfa68ad30bd02bd2b8c642f70927dd9245935eb21ec163099eb424ac203d80fea5c16ba5f7b27c7fd5782b574e93d590bd1d299a88591e65d9c345fe5bc353367b46f3a209ccd159ad5a668415b3b5ecedcfba57773f2bd66926f7d88967c6fd696bc30b5e53d9c045f3349a0afd72e749b1da4a72a5e5bfe2287cd4f98b0794ec3469f1be2e003fb9f8d48afba15d709c132bccba2356bfb17f48aff14076f5e7e1da8df2ad0d3be323a9b5b16ae7ebd97d3c0d74d1aa80aa401b74f6d16b0c90cdc4c375fcab4233a09210cefefe378ff4913efb51aef75c88f33ce184ed94ebfa74df6e3d4af2d0f23c5fb39297e2a98afcaf747617d555eee5cfad99738b97e3af79e29dba8a9983dd30738f97e2658cfc4eb2d7ccf949be57d9093e0759304753e12501dedc4edccba536d9d1fb7c12d3057193fc4c9f8b326196f086485d9240c6f85b98d303eccc9f67326d98e0b7b111ac762f38964f13e7f18443ec221f2f341ea24d723f07af31b9be4a6d38f7212fc8249023ddac4c55cb3b59b5e39824a987bdbf9314eca5f3449b92265b9de0d0fe8a6087e2d67ae9efbc7392e7fc9c4e5d519eda3eeb9bb7e51bde845bfda3fea1786d34f709cfeb289d3110dcf1a4fb9dead07b26f3b906e05dc3b1d8dc0996c5a3b6da1452a84eff2490ecf6f98f0dc1102cf201b39e8d63288ed6aa664b95acba738e97e85f3ccec49d7887a85a57485abb79fe6e4fbd5fcea6de163849fe138fd3513a78518c1f8c70373f3b13ecb49f186490ad8f9cb1c0f7447935ed4dd798d85e2f6731cb7df3471bb27c33acc5eafbbf9a7bb4b49147cdfcf7392feba49d2430125dd2bdc2d84c1eedc18e161f93bed651446eedcfd8b9739c97fc324f97e11c4ebcf45ee628e475fe164fe5610cf318ccca329e51738297fd324e5ae405206abbbc51ad5bdca49f85b41f4c8d5da6c31fd62d7d02f7252feb649caad6c9f012f796c16ce16f48ebc43aadf80beda1d7bb667e1bc103ee3973889de3449b431078986d559db331ebecc49f23b415a4f3b4f2e6d3fd3fc0a27f3ef9a647e5a8cd66c177866eaeee3d89e25aeeef77c83d6695e92f48628e6ed50c2595ba9fc24702fca7aa4e43ca7e9475ac3924615be4fa53a856df6178341d9b09137d4e4e6546dcfbe36e3f76419e3615b5c81da0583806a08ef0e48740a7d7d4d1dd2773761779f865562b4c1796d02cc65ab946dacf3928142ada5a1d2055f3da32fe14c244a95442e2d89741290bed224fd7dd0ea04a5d53155b873f8ea1cad293b177f00a58d35db50f897bf3b04dc177f256019d369bcddd9912c2bfd6cdbabaf4502cd8a405672d9deb43e1f8dca09840f2ad702fe4a4bc65403ee7f68131ce7b56d8ec6322311e978491c40ab284f83f6473641f3dfd82c0e50bd31230dd5b76d4215f6ad6a7100efc8a434787f6c13bc3241dfe7e756ca3840f47a220dd19f1403a275b18308f6737421fa539b10cdf26de261c09e7e07501c80eb21cdfc776c0217fc15b471806dc54480adb44423ae076573775cc361cdbbd8b0aca71edf3ed68ffe9a3338f3b8dcf8ae99a871fe6782b8cc15196e6705d39c57306d584560dfac225415af0861d715a1fbef8a2cce517adc6a1e6f56c3b8f5cfc58ff690b23a294ffd0580f09402c169edbe6bb3b59ba7acd08920f46104de2fca073bd46b3c2ccae0c1bb9d86dbbe99b829f3b480f38308984b2b084b58ddcee32f6dc239270b9cde80d23a7b5096da82f21081f2af46174a1a81abb607e5645b50de4aa0fc6b9b504e215dd085d4d492f4bbc9ad41b7c716745504babf194d2bf446d22d5a61ad2d288f1028bf67134a7092c0bba3ef98885fa59d44e0fa5b9b702d5296d715a833a1ab552c762b736dc1ba88c0fa7736615dad606d531ea3fe682cd7252716abfe2e5ba0af21a0bf558c569403ddeb165984d29a5b348340f9f7a30b65dcdda2dd04ca7fb00965f8b1cfc6188e7d9e2070fe63312c33d8d8674b0c2b793f81f29f6c42099112ef6be9ddf92cd6409b6a0bb41202da3fdb046daec8e63051f6ad5a60992d30771230ff254a606e8e21983b0898ff1a253037c410cc2d04cc7f8b1298b53104731301f3dfa304e6a61882790301f33fa204a6456fd21a985b0998ff1925302d063dac815949c0fc7e94c0b4386cb406e66202e67f45094c8b0fccac81b99180f9df5102737d0cc1ac2560fe4f31c0e462437a40c36235b716ceb88e80f983288169b103b206e63602e6ffda04335c00d8e2f8c75a6c681e81f2ff8a0165b0309b451fd31a94dd04ca1f8e6615f7426935fc6b0dcc1a0226bc0b3e32605a1c4a5a03730301331125302d0639ac81b99a8039264a60c6b1fb594bc01c1b25302d3aecd6c05c45c01c1725302d0e25ad81792d01b3244a60c6719ac14a02e6f8288119c7a9ac5713304ba304a6c58769d6c0dc4cc09c102530e338d1e07a0266994d30272b30a1e04e1c4abab4bb3317d4150eb8125bc009025cb94de01628e07a642680cdd971c27fe769ab01b78bb620ed20904eb40969b61851fc1f514c25504eb209e51291192332ef9553279c37ddf6e3519fb03c8bbdcd16b47b09b4936d421b7ed2601c03c3f71038a7d88473aa482f4d715613b68a222d4eb1d67b2f21e04d2d468b192c141cc7c1e33102e5b4d185924eabb618d4b036adba9540397d34a1f42e99b208a5b525531709943346d325f256f03886da661328678ea6557a5f4c62b1cfbecb16945d04ca5936a15c2abc639f01b5d781fee61d4a96ae4fb3e85f5a5b9fd644c09d1d2dffd2e2b31f6bfee54304ce3936e18445a7de951419dbddc4c0faca095c7347b3c389ff72e72481725e749cf3383e8c682050ce8f8e736eb1efb6e69c9f21502e888e736e114a6b157c8840b9d02694b92fd08fa3033493c0ba283a639e38ce225a4aa05c6c13cae521a0e45f596ab111d8620be26b08c44b6c42bcca00713ebb815b6c1aced802bb9e80bdb418034faebdcdf66a598b963c620bdc4e026e32cae05ab45c6be09e20e02e8bce60208ef33ffa0894cb6d42b9cc002530318c5b9bf5897dd8c20e5c710f8fc71080afb209f062e10defc18d50c92f63f7a54f7288ff7e337713605744c7b38de394eeb904ca95d19de060f14189b5090ee709b4571733ba9faefe40c889f45f694dc0fd04dc5536c19d9d012eff2a348b404eb705642301b2223a0e551c5774b41328afb109256c5da7efcb0904fbe44d87e5f8a35338af4f8b5fb59e4220bcd626840b4358230d045aec88ac05026f26a0ae8e22a871dcfeb48580ba268aa0c631647d8080ba363acfa72c3af6d65ad247089495d11923c5716dc75504ca2a9b50869f4962b13bb23693e4010267b54d38dd99ca994b65fa5496f8d9628280b7ae18e31e3eb89c1ef758ecbfad8d7b6e2240ae8f0a90711c401e2440d64405488b33e7ad01394080ac8d0a90163b186b409e25406e880a9016031ad680bc4480dc1815202d3ae3d6801c26406e8a0a9016f746b206e4bd04c8cd368184f9bb70b3133d77d7055b9c893ccb16641308645b6c42062f526c15cebbfd2eda74aead8d4c2612a8b64627161ec75542cd04caeb6c42394df0b170b7dac62f7a3399c0b72d3a81308b6eb53528ef23505e3f9a507a276a5b84d2da44ed1102e5f6e8c414e3b893d12c02e50da36995de5594160310d656519e2250eeb009e5dc2c50ea5619c7f9408f1330774609cc383a41170898bba204661c3796788c8059172530e3b810f07602e6ee288119c7be7c9080596f134c77fd9a3b172d1da0b812b731bb85c0ba275a8f5d2d0673ad05371e2670eeb50927049c9ccdf5e21c362b2370dd6813aeabb44aed6270e447608f8ea304e406db203b91a1f46d07e49956c94c3d8208b736a8858034178c8f2e61a3e0e4b606f23e5b20af2320ef8bcea83d8eaf665848a0dc6f13cac2ac03b6d824585b07bc82407cc026c410ec879591976515bf80ada80b5dfc629ce30868076d8296d43aab36710eb1387f457753fb09bc876cc20bbb2c770b77f54efc1ecf9612a00e47e7015a1cb79cb88d4079a41823f460bdf6fa58863bb613306f8a1298710c77d411301ba3f36cd2a23f69addf7e9240d964bb6369c3273dc062fc3a96f104a8669b40d5186c8edf1dc6110476d3e8c4a92fc06c432a677ac79846d181579d893196f7de789b2d25f41225b4d876cddd8d4afac51199097c4700ce1a68136d8136968076d42668f92db0b7d811595b607f2381f658b402c4717c4fef5d04ce9b6dc2e94e52e59ca4b82f2d994f80bc252a40c67169c93402e4f1a80019c7a5251504c8135101328e4b4b9611204f8ee67373bdcbb1b80199b50ee70e02e6a92881697191b23530ef2460de1a2530e3e80aed21609e8e1298717c33d53e02e699288119c7c5f3870998ad5102d3a25b640dcc9304ccb35102338e2f08394dc06c8b1298719cacd546c06c8f129816a3ecd6c03c47c0ec881298169f4b5a03f33201b3333a8f78e3b8d6e23881b22b3a0fd22cb697d61ea43d4aa03c6713ca95829f48d8245169534f8186aed0c984eb09d0ddc57e9ce17d10e7a6bb64f673f2367862d48f53b9ac0e3aad3d29ea21d0de568ce620d8248538ae159a43a03c6f134a77e7f5616981dde80407b7518bc05ab3d15d04d89ea8026b715c6f0dd86a026c6f5481b5187db206ec02026c5f54818d6377359d00db1f9dee2a8e6f62598e50969668c4f76410afc3e123b8e9ce363b0e209562af80791c1d08439b3c3e8016382ccec82a7b427ec2e17f4a7e4ce713b8a366bd1c020ee059a0d78eb47be555e04cb66320cb0035870a9fe93c153eb3f09d6bde37c1360b98173d8c602512d3153eb0d5cb41011b9e834fdd8a69b3fc773635a882b53f898df2cba98f95a99a58e999cb953e9f9d26a0e34fed76802061ae113d05d36b36894cf3d32ac90c354ed2ecf2f13632c9472b552b401757b2fc83a077a57634d3b968c62d52f30ef10e715866765ec1057f25ff0f524101edc2610100 serializedProgramBytesString: - serializedSignature: 0036fefd584c888e8dd2ebec3a88e1bf412a5a63d17389d6809195d87c1965f7d14d62e6ef7488a8ad8dbf27e2df2fe6ef2f35ac5b273cd4e0cc256c364af40c + serializedSignature: 399f759942f72bf14e4e3c29209aea3b389b9edb2930b8a61720936d2b281af0dbeff41c18fe2b945feba0a994ded77a4c7feb177a90ae62b409c8302b465003 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/5d1a99dbd27d02c4ea4a23074169218e.asset b/Assets/SerializedUdonPrograms/5d1a99dbd27d02c4ea4a23074169218e.asset new file mode 100644 index 0000000..5324b21 --- /dev/null +++ b/Assets/SerializedUdonPrograms/5d1a99dbd27d02c4ea4a23074169218e.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 5d1a99dbd27d02c4ea4a23074169218e + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e782bb1787e041139210a08596e0b45843a0425b0824404a486804a9fc5aeaeeeeee5eeaeeeeeeeeeedebe3bb333d9e7f6e6b9bbbdcd73ccf4fd870fd9ac3dfb3cdf79c62d239b393f9111ceaf45ac884d61a3d84256caaa58a5f3d714e7b8c6f9e79ea9ebf359b5735ce9fc2e71ee8d609909dee43f4322dd9cdfb39cb31a56ebbc59c7963bc772717f012b73fe9ee5bc5be69cf1ab2b9cff65ce5391c6ce4b0bd954368fcd655d235d128858245eaa91d722dcae4873e7f764b6d1b95b2694e21fc916b7ba3abf1638776ac4bd358ed2eab9c56c7761d61ae7de72e79d6a56e1c85c2624363f7c06137f30f7d04d1ebbcb2397da42fedd48fedd5cfe0d9f6f228f3d927cbe2778af05f89b133a3fcefbbddc63647fe7d894b18c5c70cedffd4a3ed7db9597b12a8eacbef298298ffda4ccbc24f46f268ffd13d81b4fc600202b1966cde571903c0e94fae6a7f8fd212ea3c8d9401e677900d06710f8760b709f5f1b1cc276158e9b7ce1b8c90dc78cd365f87d249fcf92c761f23854ca769ee9f294bc365c1efb24d06b84fb1e1bc73c9f75bed968ad3c1f298fa3e4315bea7690d4750c380fab8b0ad31c29f340f98d02cd75f53cbf3f569e8f96c75c5f78e5c9e7948df949ea938cff299d0e96df180fce1d8e8d97c691a5c2fd105fb81f22df3ddee5d8f8369f3dc0ffb472c748795ba760c7a13e3b0e7575699215fd5c421d947c197691c3a4dc6dc039977b7240db1acbf736cbf3b12c71dad62d897b5bbb729a2bd6dbb8df69dad9bdde74028bf6e5f109f454617bb82f6c0f97722ba45c65ff04f73ca238f70772f8fb137c728ff0c93d42ca5569447e927a4e94c749f238451e27b3fa78bcf5e1f2da76f25828bf79248b4e038e94f7b7f5deeda67826cb2d5e184df585751ff9dda312c854ef4f93c716493eaf9e991e42e719f2d832c96fb694c79921bed9caf585e6dff97c619b043267b97c9bd7021d1c392df695e7dbcbe30ef2385bf23fd6e707c726e107897499237561200c1c5d5ab697e773e5715eb42e4e01365aa7890da753e46829735b70ce8fc7c8ebdb8173aeeb7cf73b2d1f92327794c7229fce0be87466c5ee7b6d5a03df48e6bd78feb5d0b5af558e2bbb55b1bcbec8a7db0c4fefe653c1bb4a8f64e2c3ce92c5f13ec6c74b1d14db5d7ccf4d02e7fc789cf73df1b7f36e6be55bbdc075fe6e2138e7f7774a52d7c52cd667b99c13c1b74f94df96e97f6ba91fdb8dc5c63dddbbfc7802b8768294f7967c6f77169b8fa9e7b86d93c139bfbf6b92b6eda1d1cff96e9b4971de5dc2a2d39f699e3f347b4e5e5b2af5398945c7ad93e4fd01de3b910a79adc43d6fa7745926df39197039d9d5afadca4f97cbe34aa6cf67cb0007191f9daa6afdb7fb2a3b4be37c4bde632a7f52762ff4e4b4ea267557e958398b8e33fe67f9b53de5b1521ef792c7b5deb31395bc35f25825753b8545a5cdac025ce7c753e5fd29e09c3fb7da93dd55e523d53e5d75e159e3b35d9706c4f3b35af7d96d94bc3a976dbbb325b7877c3a2c63f1fd772b69d7692c3afd384dcafdc995db7ea97c7e9d3cae97c70df2f9b3a339d6d713e3a5cd8974eb22659deed3ed7457b7f6b2fcdffe2ff9fc469f6e7b13eab68f947506784eb264fb817bfcbb537df7ff278ffb22f7f707bae8ee1f20af4ff35ddf24bf7b96bc3f1d9cf3e3999eaee26f876187975cfb3baab443d51d0ff6c9d69577559db610d803794f04e761791fc2a2e3cda19eac41aade7a987b3e64b3efd944b2e3c5b7235d99f5f5c0a3e4f1681f17fe775769ef391a5647807b9099aaff4c4c429763e4b14d027bba81e7f8f1d810f6c7bbd7541e655e19399745d78df9b9e3639de3a56b27ba9c7a287f3bc97da78b2a339decdeef74be3c3f05d8c4bf719ec7baa3aadbc9343a723eb05b8643e402704d957d2ef4ae0979fcde69bef099eabb7f3a90a1bb7f06d04177ff4ce6c561de1674bdbc7e96cf96c37dba5ec0a2f2237676acade219f86d55c74a262ca57f462ef285e5456eb86cd53e8eac73f561d935539e9fe70b4b75546179b1262c952d9780701b2aaf5daa09dfcb00878be5bd0b91b054f72f027275f72f063ae8eeabeb322cbbaafae0a5485842fd61585e166bab78067e7b66126179853c5e2e8fba74f74a795479ccac24e45e258fabe3c8ede593bb7d1272af91c7abe3c8bd16d13795ef295f576d7a97b3685fe7e78edf76fb2b8eaceb98d6d77ba87ae4f52cdad76f60d1be7e058bf5f51be5bd2bbdf067aabc7f158bf5f5ab819fa830bf093c037d55dddf0ce4eaeedf0c74d0ddbf8545f97a0f5596bf95e97d1dea0f7dfdb6585b2357f9beadda51e285e5ed3ece8aef352cbacc788d0c1f7ffbdf4980abee3b77b8f2b918717ea79477ad943f1b9cf3e375beef5ee77eb7a76cbfeca5da295bcbebb2fda1576779fd2ef93df5dcddf2b97d7dcfdde39e4f52fe769f8ffffd3e5fb9c1f3b77a5bee05f7a06d37b2e832c903f2fa4d20ac6e04d76058a9f25c22ae0fcae3433e7ed74b7973c0397fee114fff49b20d8b3d2c8fc778f73aa97e1915bead811e8fea7d85a9bab56abf0d5a4652363f96c0e62069d266169d266d76fda0f7f171643d259fd91ce79967e4f159797c5acabf9945d773653ac0643d33728beffe2df2be4a83785a3d13e8a164f377e6c6d147d9ffbc3caa3ac4adf2dd79e0dcb1adcf63f2b9179857d6778e7d9e934775ff459fdc973c3d27dfe77be7ec24f4a3b857266dbb8d45a719b7b9b6f65561ad7cb934817fbd2c8fafc8e30a29ef76165dffbd5dde8f571f4bf4ad387645ee64d16d55325d61afcaf33be47dd5167db7eff9bbe5f3afc9f3bb7ccfdfeb7b5ea663ec75797e4ff4f3ec0d20879fbfe9d92674e1d7de02d7ee91d7def6f8f497e96ee4bee86fb3775874fd50d501ef97cfed08de830cd47dd9d61d79c067d383f27c0138e7c7877c721ff0b17ac827f7619fbeefcae307f2f8be67e3946ee01dc093bd172d33ae4fbf29653c22df2906e78e4ff79f1f47867af751797c4cca5808ceb98cc36598c489b791c77dfc1e05d7f9f109797f1138e7b2bf8ba39f6c438e3ce9b3ed49f7dd0123927857a68d1195362e04e75c46a96bdb800d71647d288f2aaf5761a87c96cb7b5613ae2acd7f4f9e3f2375d8099c3b3a0c5475bc8f99deb79ff2bdbf73f4fb835499fc1379fcd4a7db732cbacdf57379fc02f749f6a54ff7e7bd67eaf5fbcca79f4afb95de2fc8efee02f450d7f9f145169dc7a93c448e138abce4bbff92bc3fd4d3a57e4c47bc3872a83c7660f1d3d86ee0397efc3ac1f3f1647cebea37681590c5c34ab6ff0d56e548e5ffdfcba32e8fd07da7b32b6ff040296f5c9c677f90c76fe4f12710deaacfe247294fb6770f3e3c8ebc8ef2d9f3e5b3f1ca3f3ffbbefdabf7edb16a3cd82f52de77eef521aaade73779fcc327e32fa0bfe2f7b73cfe238fb09df04fe93f2f7befd5b713fe0eeef1f34279cef374d8a6aaf2f864c347f9c1bf7a3f18f2967b3d4be5732c453fe8127d8cbcead91d89b0a876ebc86b2c3a6f52ef64f8ee4ff5dd6f142da7fe7a63797c8345b77fabfcff75a08bcadb3acaf337e53bbb82f3c66ed44ee477c327c9779ac86333a03fe21f119566295e3aff788bc5f84744e9df52f39ef295b735ef350532d533f09d775874daf80ec3d336c5bb5582706a8d84936c978ebce70ba7f7e4f15d104eefba8c87c9faef7099ae44daca63fb2458cbf433d2310eebf735ccda817b90d5072c3a2eaab2543271c4b93752c6bd482779545ce2d9a0fa6182fa8bcafbba69de8be72f9d81cc86f297ee09fca507e22f3d83fbcb88ab7dacd51886de49b056e3a6d498df24fda53eed6e487fe1cf6746eb1ce9e7bd37a633fe5e7d7dac3fd3a6f92395bc012cbadf2c9eac817a59a3e4bb9141f2f82160a6fa9807837b9a7ecdc810799e8fdccff2f987baaedad33ff6f9c7c7f2f811d0259e6d2311db7e73af67abb65035d6375ede28ebd19161f1bf1d51e38555bd3b4e5928fb00f77a8e4af3545b51ae4f86cea7d5d85fe5bf9fb0e8360155560f634b5eb41e91319eac0235ae22dfb52567b6b44596ad226a1cecd806d043e511b23e1619efc9ca5f0a7c2c095971fd65a2de5f4667b9d747cbf08ba8f24d32feb27502db541bd13689fd65b4ec83c89d24df51c7c93e193a7f29f4f9cba73e7f5175ba30b64cf1e911a72c9e2bf3ff5cd9be175171715a03e8a1d28b0949f84b025971fd6596de5ff264bd22a2c6b47d06bee12f13cf64a99589bf60d169a3ac6b473ef7be1591f5f0c80c169f97ea634bc69f13c88acb4bb57d7fc9a2db47bf74b9e52b6e5fb1e8b633f5ded7f2fa62dff56fe4f5ddc0fbea79759f1f619f067f7ef7c43ad7e749dfca77f600e7fcf89dbc9e0bce1d5bc6c8f18d63549ad1cf2747f9a6ea6ffa1e7055df9c03eee9f2cfb94c9f7faa36f61f7d3ef2a33cfe007ce40757df82d6aebe05aa4d561dd5185e352eec27169d6efc14c767e2f9827aff67161b375a816752a987fceab3fb5779fc05d82dd3a1b18d5d9dc7ca7ea6886a67556322d598b3df7c76abb6837871259fc58f2baa1fa023d04bb541aaeff4f3e4d7970df393949f4c1f17f836539c7ed7844906782695f4ea4f5f98a87ce80f60fb1f6e988c93f3bfc6dde7e304c24f6b9bd2ff2f16ab7f77165fff4475957f7cfacb76a0c8df40ffbf5dfdc7efeceabf7596bcaeda841745eba9cda7778afebeb6aef2aff75e4c5de55f795ee81e79b0c1ba8a384fe0b789384776f6f18ee3a309c34c774d966732222c2a9f10e70edfad6f93b6bf27bfbf0bb0399ede8b7df233a4fc25e09cdfd78c338ea8bc6549b48ca8b67a390639a391f77e7d7bb7d2750fefde74559edd15bcc7cf55be54181d7681f3dba54c3ba66582d24985515d026e254c3b8661c2d2807296b1a8310e11d937a2c6384496cb77559b85ec4fcd681ccd2122fb41339a78dfcb680caee9c62f24d04d7b4de609194d7d7ed8d4b57fe224e923aa4d42f96155020ef2b90c38f7577dabb9772db2525e6b01ec6c0eaef1634ba9db5270eee8b6ed433eb9ade47325e0dbfca8f2d265e09cbf27ebfd196de4fd7c9fbc7640a736f29b2a0f5de5fb465be6f5b338bcb63dd8c7a12d90d50a5c5332401f8dfabe38f2ebcb6518ec1bfdcd4461a00d977279efcee0ef66b4675165d60c996e6474f0f94e0797d576b2feb39d1a73a8fcf4eef8df567223728e44464716d5379ea1dabf57037960dc45d2f674f2d9d329fabb427ea23ee447e4b3b2ad20a38b7ca7149cf36367cfe6889ccf91b115f00999a7647495ef97f97cb41b78b61b78961fbbb3a87137e2dce13f795f9f6cf59e2a07ac00e75c2f391725a3a7bc2fe3667d1ced0574e809aef1636ff9ce2a70eee8507880eb03938b916ff56151658e8c3ebe6ff695f7cbc139b7ad79f4f31999f2b93dc1b9620ce5acf6c9f1e995d10fd8d84f86c1c309fc55e53539e09c7fabc0b57d921a2fb632397971f33b350748a511b23f37a33f8b2abb67a83950c9d659de9772e53ca48c01be7019209f7b2f05dd65fd2963208b4e2706ba61306533f25c0538e7f77f4ce1db723c6cc620dfb707b9df9ef69defb9c1f2391947236a7ed420dffd4adf7dd5ae59137dbf5eee1079bd2afabd48adefbe5fae1adb5e87c855edcb15bef74ef0ddf7c98dc8395191f588dca1f2fa5adf7b1b7cf7fdef0d93d7f7f2bdb7d177dfff9e6aafa8f6bdb7b7efbeb2639fe8e798aa7bd5b8be3e5dd5c9f605f783e695b21d2463048b1a3b23ce1df9d3d5b83fd59fb47bfc6f28791135d74acea9ca1829e5d782737e1cc5a2f2820cd586af7c319b45955bc4b9a3d78cd93e39393e396abd07955e8d96f7eb7cef8d0676f1fbeb5cb63396faec496077f4b52611515f9ec9ca588953c2c9161512ee4dc92e67a4de4cbc9091a8fb88da20e32b1af1cfd6b28dceab65bad584168ab58a6a591ecbd5ae26d45db4c9a8af4f11bf4b9c27ca85d0f519319fb83de6135cb90ae75f19580aa9c6b93e43aca4c417432a77ee8c62b39d237f6b291bcd163bffa2a52c723e5be114f6cb58b1f37bad90b7d4513bf6c94426f16593fcef143932dd559dd6385714d0b5ce7985d07081f8bd4e685a26b49fe55cab156b4c55b2954ea5b18a6d105f8bb5bddaf95bf7cd62894cafa37e7127ecbabb84940aa6a98e355cfb6ce18bff17225b224444b3d97a190f1b678b94f9c89890f83f866e22c32bf7b3a48cd1025924ea5a2ecb1663768a620806b731d642bd7fbbbc0b587e5c5bf4647870f714167821fcf0a4da9c011fd58e6f126d5a1ecb16437e7a25302d1e582e2f4b8c3c09624293268d73b8a27efc111d7e51fd5e9046fcee73e5e2b9e001d054647ed101209ade8b9d546d3ec83c1739bf5de5160a332a84927eb3a6396a9608c32aa419de7bf31cf3b8915c59be705f917387438809e71cae54331154b119712273b1c0cad00596a827166f91b8822d4b183fb89ad75be10557b6285d758be3d4d8b744b12b4396bd54b4bbebe67995c5277cf151137db8b414e192cad7b09069a40b9996e98e4689f38d78e1d2aade2e2f5cf88f9e616bc4b713e980116cac23d82addbe3d59c4e70a51b6aa4c81216f441dee4f8af400db224e9858050c61130dc21c8eb09d462bd6a4854f2bae1022b9a92e705a6f994c3a35e7e62dae5d7d089aa0cedd216e1e1bd4b59be9e8896eeea5a4f454dd71815349d8c1b957e23c5f26b2337e7dbe23b1c4f936975728bee0d537a3df884f96b7558ff493d552ed24a80e0435e1b09a61c49b6b88e7707fedac710391c6f92343073c32b4c0a25997b0d1ac252679abb0925b6192bb8695dc1a93dc2dace436ba68237a94764b4bb4f19a5cd45f939d775739c6ac13f5e83ae77d5d134dfce8d23de9e8d24344974ca66b380aa611164ddaeac28e5feca953d21f743df0a06b8709ee1552707bccdb7a87f5b60e98e43e612577c424f70d2bb9932e8608f6e5a43164a173cd6d149c26ee968b9624de1e502d0a2d356c85f076772d76ec691523e68845d0eb841ef1e34e66d271a79f883bbc99974e572c5675c6c2bbbf26bc2341c2bb0b16ad06848c565b6182078614dc5527986719bc853f6c46dc4d279ce7a183596c4de65fe72746786b5c78774cf3211acd2bcb320269de037391acb049424f4cf2d0b0927be9121b911e6f224d6c92ed3599211a6d7813cd32b627739bbbd577ab4434e61aa966f322e7b84268c1af732d12f7b6c44f9c86d5f301cd1a225799c692effba1b782f7336688447284482447c5492475da044f26f549f448f175b3d860497a6f2ca519a549695ed3256371529a3e5894cd0e1b65fbea24f3289ba3f1d51ceeabbc3dbea548cf63be3312ff4ea62e6910c59ebdb768d2e056d7b9bc15a223d3953797f1ad59d60b575ded38f03ae938c5ce33d5ce37caa49387490cf84482defeac9eb93ffae89027a2c3b64944074aabb008d04fe749bc5d83f7ccc7b4bdf38cb9c8a9c64f614b4434dc4b5ce694dcd02d178f96b3bd9da3ea938cf1b766b8bff5d769c3ab8bbcd13f6171a5132e780026b820a4e081581c1f1b368e0fd249e6a90d9f6f17b6843518537b7c58b5876029ead69a14f5af48b014350b13be8d46f85d19c1840fc5a2c284647c248e570fc3044fd4c5311eee53440d26d3f95fe5bcc11b244b44eccf1499a1971a643a71bddcf98b67d823c0f355ce13ee1880207a0ec79c62dbb04e31020bb7ed34e1f653c0701b89099fa4113eb35130e1a3b0b02bd4851dcf6579bec18b25ab64de169d1a668ad1189962004e9d68ea2c15215723c23593ede364e1fb39c75ae7e94c910f54887b9962a7b26a91d60609d36c4cffc93afd5b02fde7030d837c3147f7c5d6ccddcbc59f6e4502a65ba375c279c1672a430a3ebc1c1abce0938b619baec3d65b7c678328b9d689e717080728ab2f2b9736500699a7d12b5bb41655b22d5920e3b5053e5ca946fced1551f8b7bdeef030052f3eb3d55ff0523ffa82179fbb9b2566eba7437bac80958f25aab334896aa046a331585cd81e8b0b3ba414170a743e27dac2d66e519fc363549190cd635ef8023f1f91dac85ffb17ed75f949785643e9385cac72542376a274c9d5f0c494f7582d035b4ebaf04594d0c78939224ea453732c5e8cc572edb99a5c7b739360b9f6389dcb8ab6d0ea2deab253858474b8ed3c9ddb8a46db822402bf21f5ec2b46b5d68844b55426aa6ed2dd574c25af16d96699739d27bcf0fe7031659c9797a60bde6b04f92ad1bebf521441f54e3e5f3879baedc41c7d3c9601eca8c9000295aab7c6a25091260afd15300a6d83a9bd20acda1330b58b356aefdb3498da1331e10b35c267370b267c5b9df066ccdd6a2c4c0d713b4c309f6f1e53dce46d0eaa9eb0dc57535c26ea0aaafe572aae6c747e5738d7960b119962fca31a861144cb4918db9d356cdb07645b8821d82524dbc93ac1dc3d774d46709c2eb0293ac1bcfcb59821e52f3ebc2178f96baaee3b1cfbee1aece707c43e0d8be67b848de6d331c94bc24a9e81495e1a56f24c4c724958c9b3b0405ca609443e122948206e8f095fae115e1c50f80e58c42cd5a54d83186f1af10aa96ef5c96bd728612b84946ae7ef7532cf2d8d6a1fe16d1ee5b2d21c249ecfc6f42cd3e9e94e88e283cd7899a244b4a1f12fce63ab037d750e867e8506fdd101d1cfc584afd408ff2ca0f07918af553a5edd12846ba918a3e45d1ded5c0dc2713ea64db94e1b7eea855b90efec8821dd5383f4ec96c190166146acd619c1fbd15c7c5b3bc8e68a06bf1239996b9dc8c683635c806950a1d380a76cb3eb0b06f3532c16146348d76890be1410e9422c45ae0c9b222fc2d4aed2259aad82a9bd13a6f6dab06aefac93cc4b1d7b31a4d4c1abbcc14b1dbb60dfa9c1be539bd27776c548d58525b558279907f03a4d00f3556f8204f06e98f0f51ae1fb0614be3b267c8346f8430185ef8109dfa811deab4d30e14b30e17b6b84970614be1413be8f46f8e901859760c2f7d508bf3ca0f0659893ef17d6c997636aff4fa376e7b6c1d42ec5d4de3facda651ac9d962d85f3aa755f9473f059b7972004b76d02a1f47a79b5295e8fb5893d20a5db8f01cfa409d4a01b2f29598371da4f1a68f0246825598f08335c2770be8aae598f04334c20f0f287c4f4cf8a11ae1eddb0513be1a0bccc34206660526982fe01653161c21bcb34ac4b14c310596cf53ae147f558ab522ca44c775891cb0ad1a9c54c7359ff89e29bdb75afa7485e3eda39cab41b45e83697d844e6bdef3ca1b71bd72b35b9574ab21ba7185996c882c750f09a45725e603476a7c60734007abc28c3e2aa40facd509e613098e4e46703f5cf05e3ac1bc78780c438a877cfbbf96426290e2613586fd380df6fc8051af06137ebc46f8ce0185d762c24fd0083f38a0f03a9d709e33f30d9e43e5cceb30b54fd2a83dae7d30b5d7637e7eb22e72737b54fb42747213240a6cc0be798aee9bbc471556841704fede460ce0a91a802f0504b83766cc693a633af98c29742e978a8636ff7207410cdc078bfaa763519fefce1dbc66b82f66eb9998adf31c3781f6aaa56f163ae9a0dbc818b451713f4c87b3301d9638ff783da8427e5b2dc6c3afaf15b927cf9382e8f03f4c87b3753a74953ae438ffdd769d0a27f7e3f9e36a3657e687a9ebb23fa6cb393a5dfafb74a974caceabc49177dfcef6119a23a2da2a31c320750d0fc0343c3711ad42e7bba5315a2d626ef7f00a51020ae63d9b305dced3e992097409a6137fba3a7042752096509daf49a8a6760c96501d84997e81ce743eb9693a68f7cf8c8a3eaa38e78e897473845129348e1e8c197ca1c66016d0e04330e11769841f1f50f8a13ae13c7bbc9885ccee0fc3d4be44a3f6f901d53e1c73824b59b862ed1198e0cb74dec5cd595c5f9270fd66f780d59223314e976b38fd1490d35198f02b34c247740a26fc689d709e5d5fc990ec9a6f0c1f3cbb3e46f71dee79572713d871fad98fc5045f1352f07198175d1bd23d8fc7045f1752f0093ac13cecf9de43feb1d55c4090b1d527625e7883c60b8b3b07f3c293b014ecc6b029d8c998da3769d4ae0da8f62998f0cd1ae1a707147e2a16336fc662e62d29c5ccd33077e4bbbcc7a4967c64af5788ad7272def9a270c10b1b1b4214cc4ec7b4b84da7855794e6c5205e68e5bdceeeb8bfd4753803d3e1769d0e1da50e79a2f85a2567e76d707ea7aec199980677e834680ec282cf0ee42b1a04f9da5998fbdea971dfd22ec1dcf76ccc7defc2dcf7ee94dcf71c2cd1bb4793e8350a98e89d8b11ba57432873ab6084cec384dfa7113e29a0f0f331e1f7ebc236a0f00bb0b07d000bdb07530adb0bb1e8f050bca429b78193a68b302d1e8e9f348d6ec0a4e9624c8747e2254df90d98345d8269f068a2a46927f1bd6033992ec5dcf7318dfbe6740de6be9761eefb38e6be4fa4e4be9763c89e64e10a7a5760749ed2d0b92b209d2b313a4f63749e4989ce559811cf6a8ce8dc2d98115763e89f0b89fe1a4cebe7355a5704d4fa5a0cfd0b18fa1753427f1d66c44b1a235a770f66c4f598f09735c24704147e0326fc158df0f90185df88e17f15c3ff5a4af86fc29cf37516275bcb6be06c6d33a6c51b3a2dbc6c2db701b3b59b311dded4e9a0b2b5310d98addd8269f0964e8316cccbd6a6890e92aa80c3216fc51cf86d8d03f7ea11cc816fc31cf81dcc81df4dc9816fc78c784f63c4c9018db80313febe46f84f0185df890537df063e4cbe7017a6f5871aad4b7b06d3fa6e9d70de3cf2110bd93c720fa6f6c71ab58f0ea8f6bd18ec4f74718b77b7c71ff05cec3cba560c495e29d29d6a311fc09dd75a2a8692cc67ee02caee9a0825a27b84f70cac12e72add2c61cbe4408fd162a087ea3bd8c8dcb53433c5402bb73b2553744895ca5536568b2b35e2a93220593f94a45c0e8981834f827612dd8705d0a79a003a3b6000dd8f09ff4c23fcbe80c21fd009e789d1e75862f4454a89d18398115fea08f50a66c44398f0af34c20f0828fc619d701e59bf4e26318ad374fd884670b658d970cb2c101abb5a5bc32e10fa8d8e9776ac25dfc13bfe02a1e175c5c6653e8af9d277bad816d0971ec3b288efc366118f63927f082bf9092c7ff83119ff8f93683ea9f37fb1f8e68a2de2ff61d6518ceff93f25edf93f0bcf1f16c7f3c3adf6a80f89a730e7f925acf33c8d39cfaf219de7192c9afea689a6ddfa048ba6cf625af32dc0638a447c21914251d12a1353d97493203345712933e078d5e7303dfed0e9c1d7610a26ff794cfe9f2143e7059d601e3a7f6942e7e880a1f32226fc6f5d0a1d50f84b18927f42227919d3fa5f8dd62ff50da6f52b98d67c71ae1847e1f1558da4704bbfa98fcc7c15fb7244f765de36e0eefb945dbf4d4476fdb25bf39ce853ca824e5d7c0dd32043a74157ad06b3c55fb5628d12b78e90daccd4d7315d1ae974e999a42eb1fb0804d1e90dccf11a473435f5cc608ef72666709348b8e8f21626b86948c16f63829b8514fc8e4e30e7dc5cc3b973bf609cdfc584b7d0087f2da0f0f730242d4322795f2798a73ead92111ca7eaf4814e30afb5b68e20b5d63691546aad1f62d8db6ab05f3f2018f68f3023da6146b44fc9888f31233a688cf82ea0119f60c23b6a84f71a144cf8a7986376d225a77cbe7611830b51958a12b94ac8b3d85091e155cadfd1f39c32c5999bfd8c100becf03b2ac9ad611562099e1a06179a709ba0f828deb52c7a5692fa0e6f7a72b3d815f5c979a648cc4b030e5efc0c63d159c782af2b0857b374cba45e06eb2dfab05e6858c1bcb50a5cfdb8ce8924e48a41bcc1ecf81c73982e1a87a91818cc61bec0a2d4565894ea9a5294fa1233a29bc688e3031af11516d2dd7521cd6787e91b5417cba6583eb78ed745dc45d0e2856956dcbb43c5805bb711d6f3ebe81850253c4335b846dfab157e55ab8945cb84866a1b194f7695accb06f1afaf75f4785db64724645df61b9d64beba5dcf6472b338eb8f7f8b79532f8d37dd15300dfd0e13de5b23fcb780c2bfc75cb58fce55f99cc5b9b2a6512e9b2dbc35fb82b6b9ff8019d65763d86e838319f623e6459961bde827cc8bfa85f4a29f311efd7545c4803c7ec1780c08cbe3578cc7c0903c7ec3780cd2f0387d48301ebf638e3f58e7f87c8673f4d4183715ad166f56d5af14e4e6c82be44299a9ac1df40766f4105d712ca0d17f62466785ac27fc85f9c0d0903ef037866398064771401cffe884f3c2c670acb03122a5c2c6bf98112335463c14d0081641848fd208e77b3704111ed109e77e90ad8b25fc86bb2f108f17354e2920880f6560dfcad17d8b87869a9f0797d24c7d884a23ecfba3b12638f5fd598ead858ed52b985b13099a1136c6be9c8b3580f96728ea34486d3e6213cc9df274a58da1c1dca9296668bece50be44ad7fe6b95b2953d59c52e1666b4539a44c1643d53c45f564ae78328bf9f7ec708bb0ee7b55a2b8ec4d4e1e1a0859330cd9180db209019135c784176884d70614de02133e5623fcea80c25bea84f3d4751c96ba8e4f29756d8539d5d63aa7ea8ea41bc58e13c018947a3ad21ad3671b9d3e6d987fee73aa2b00b6c1be3b41f7ddad34a948ecf7534b43da626e3551e35603870773ab769899dbeacce4ab59e90a6eaa8a1dbdd34bf0e25a7bccd4ed34a65e3e2c98a91d30e19334c2df0b28bc23163d0bb1e83939a5e8d90933628ac688ac11c18ce88c39c3549d334c66b0db2c5e465229dca1428e3e705bcbb64ce6d205c3374dd7da16302e6d85099fae117e7140e15d31e13334c2df0a28bc1be6bd3331ef9d9592f776c71c6cfba0994b11f3aa8aa9672e3d307d76d0e9d31ee803bf9f6a16d313fbfaec44341269915a46d30b73b139badae1c8602ed61b133e57d71c1330e1ea83099fa711de3ea0e67db1c8311f8b1c3ba614393231238a34461c1dd0887e3ae1bcb4b4206493427f4ceb628dd6b705d47a00267ca1ce69020a1f88095fa411de785430e18330a7d909739a9d53729ac1581ab28b2e0d51f361721a7431a721980ebb26aaeaf38b1521be9c857d79b1eecb1d993efdf62f45144483a19806bbe934e899200df76b925a3a3e4ca7136f9cde3d12b2717a38968aec11321519a113ccfb47962423b81f2e782416c997ea0afd0123f9284c78894678afec60c2b331e1cb34c25705149e83095fae11fe5940e1a3b138518a35c0c1b24b263216cfdbed27485cc8c50c2dd3b5c90434340f13be42233c3f2798f07c2c16af0c1b8bc760b17855c8585c80f128d7f0581b90c758ccabf6d479552fe66fa970db285495736d94c7b9ed157bcb0ef620fe350e3379b5c6e4bb029a3c1e4b152b42a68a5b63beb526ac6f6d83f9566548df9a80b1a80ac9622216826b757587d1c142705b4cf85e1ae1b3030adf0e135ead117e7a40e19330e1351ae1dd7283092fc4e2722d56ef6ec83c6132665a9dae292520b72998f0751ae1a501b94dc584afd7083f3fa0f06958a06cd0054a2683fbecf813d4f5ac242aa0bcd17f652926b4d331d3376a4cff2aa0e933b0f470efb0e9e14c9d649e1eee13323d9c85f1d857c363525e301edb63c2f7d3156cf38309df41233c9bd78c227c596bfa8d6c17b0a96c87fa0906a3e4f525627f73b7e2e56ea1ea8dd5e3edd0c39dfbbc92ba5e8e012c67ee3c4b6f9b376f3bd5e82fc49f0bf7bf48ec1ee0ce25f1a39f13b77f848f309920ded8321661f3e666638d1e07608d1e9b526af49883a55407ea522a3e1f4d2d45c2d3a11a61df4a616755a8868fb9981e07256a7c29124553ce5255fff9fb7cad6f3eae3a880ef3301d0ec68ac5b10d10f17449ad09623e96801ca24940e617044b4076c44c3e546732f72e5d9fa5dabd39530cef7507be578accca2d6b0431b70833f7308db933c70633770166eee13a737949b730aaaa836d931bbdf874ea9b541663c61fa131fef280c62fc4841fa911ce778f0e227c1126fc288df083c70713be1326fc685dcd30a0f09d31e1c7e8ea1501b1ec8239dcb13a871319550077d915937e9c4e3abfe13a68760ae3091663988ed79563b6098669374cf8091ae11b020adf1da3746232e5c63848f6c0049f1452f0120cc7c91a1cbb05c4b114137e8a46f87b01859760c24fd508cf9a104cf8324cf869ba36b180c297638179ba2e2ed5b2e436670db73e913b837749d48a4766af56548a05d1199a203a20601095614174a62e88f8526db10b460531660556063f0b2b839f9d52197ca5ee3b7c7cd839c9a4239b70c1ab3060e7ea80f1ec273b10a0724cfe793af9a2275be3d141beb827f6c5f3755fdc4aeb027384a7ab3daabd3bc13c7d35a6c9053a4db8045e990e9a1354e82af8bce611e13b55a76b23cc62e78c6ff7177c13cc0b237c1e79340c113fb4d5f18b4475bc4b8c65f1be8f55a0d7e8c2879f5e1ce1d3eaa255da7ecea66667f77a3a2326689ae041538939c0253a0750a369dd049e77d4d74aa3ca033a5e1596c45eaa49621b4f0996c4aec58cba0c6b0ee08b04ad92b98eaa1596893cd0ad01a6b69de25e981e97ebf46887c2ad94395d906f57ebe21c9f67155998c63807f3e6c5328e058b7b576872a9ec3edc8eee317624f3b52b1d794d79aeca7f46a99f664df471f92a119753fb1216a76b30afb85ae715bcd1b954a4f5aaaa3e37056fa8d57d93c7a06b22b1db0b64304d748bb3bd401d66d0b558058e9be3f5150431641d66c8751a439a0434643d66c8f53a439a4b43e6b012e919c14a011b30536ed098d234a0291b31e1376a84370b287c6f4cf84d1ae1cd030adf070b84cdba40e0addefac12259b2f232518e231f21eee5c92bf9f557c6c82b05f20a6fdfe6e763e5f94a91d0d5c95d824bc5bd71cebd60e3ccf7c5acba5967555bf15ca5a8be5488bc3533e541c5fbe93282be2ccd852f774fc4ea1432805b227c467234a05148d1eb56a4e815efeb5832fd3f1db74cce6d491ab9b9cfb985fc05220b2877aecc137d366e9f4c4d0a4c6f8bc4f631a91f3dd9db05d9013196a7aa1f467d7f5d3ce179e01d91901daf076092ef0c2b791326f9aeb0920fc412dabb35092d0b98d01e842549f7846cf83b18e3716f581e876092ef0b2bf9504cf2fd61251f86497e20ace4c331c90f86957c0426f9a1b0928fc49ceee1904e7714a6f22361553e5a2799d7841f4d46e53823368ec1547e2caccac762941f0f49f9384ce527c2aa7c3c26f9c9b0924fc0243f1556f28998e4a7c34a3e09f3b96742fadcc998cacf8655f914cce79e0be973a762829f0f29f8348cc50b61599c8e497e31ace4337492f9f32f250323ce8a9167622abf1c56e5b3749279c7c02bc9a8bc09177c36e618af86748c73b062d76b0d50ec3a1703fd7a58d0e761bef14648df385f27983fff6632827fc6055f8085e05b2143f0424cf0db21055f8485de3b6143ef622cf4de0d197a9760a1f75ec8d0bb1483fc7e48c89761823f0829f8722cf43e0c1b7a5760a1f751c8d0bb120bbd8f4386de5518e44f4242be1a13fc6948c1d760a1f759d8d0bb56d7d6d3cf398decc9b6c44e1bbaa10d0dbbe3c6e7c984c5089cd87558587c11362caed749e67d635f26a3723f5cf00d985f7e15d22f6fc4047f1d52f04d58dcff2664dcdf8c85deb76143ef668cc5772159dc8209fe3ea4e05b31163f8465711b26f9c7b0926fc760fc1412c61d98e09f430abe13abd0fe12b2427b17a6f1af2135be1bd3f8b7901adf8369fc7b488defc534fe23a4c6f76182ff0c29f87e0cc55f21513c8069fc77488d1fc4aa86ff3440d5f0210cc7bf21713c8ce1e07dfd61703c822571918c9049dca318e88c8cf0a01fc3d46e1456edc731b51b3780da4f606a3709abf69398e4a661253f850169d600409ec6d46e1e56ed6730c92dc24a7e168be42d93898b7122f97398e05621053f8f096e1d52f00b98e0362105bf88096e1b52f04b98e0762105bf8c096e1f52f02b98e00e2105bf8ab578744c46709c168fd7b0ccaa53c8ccea752c4e770e1ba7dfc09ab8bb24a3729c26ee373195b70aabf25b985f740de9176f6382bb8514fc0e26b87b48c1ef62907b8485fc1ee6173d43fac5fb188b5e21597c8009ee1d52f0875872d1276472f111167a7dc386dec758e865860cbd4f30c8fd4242fe1413dc3fa4e0cfb0347940c834f9732cf406860dbd2fb0d01b1432f4bec4541e1c56e5af30ca434252fe5ad7bedddf398dac645ba27d7b1173dbb4795b745e03b76c6765f0dd44a35965f3818b91e10cdf353a9c46998ca70af5bf90c9044333f8184a3a2db03195dfe8427f20db62bd1b3b3adf70a765568b27d4ca220de703c3743e30885b3c2a0efd86d0cbe709f1dc61b870076a8530a7f85697d6f0de9311c9a435717a86bec392c7916193c7efb122c4a89045881f3095b3c3aafc239609e584cc847ec272fad12173fa9fb13c2837641ef40b06392f2ce45f31c8f92121ff86411e1312f2ef18e4829090ffc0208f0d0bf94f0cf2b89090ffc2588c0fc9e26f8cc5d66159fc83b1d826248b7f31879b10d2e1783bbf56f0c49082233ac11cf2b6612167e824f37100db25a3729c71008d30169342b2688c092e0c29b8894e30cfcf26272338ce3880a658e84d091b7acd30165343b2688eb1981692450b4cf0f490825b6290678485dc0a833c3324e4d63ac1bcd366560374dab4c1786c1f96475b8cc70e2179b4c3d2a2d921d3a2f63ac13cf39b1332f3eb80419e1b1672470cf2bc90903b612ce68764d15923387bb0731a59cdb644fd57c974d7bce55f534b08345c0d78471d336d35b4485443b3195e0d6d187db18a68175db0f3d059904cb073ed11c15be904f3d3e28cd8b553d44fcc079ae07ed5154b251736402ad90d13bea8018477c752879dc2a60e3d7492f9f33b87aca3f7d409e66b08ed928ce08b22a8e05e98e05d430aee8d415e1c16721f9d645effd82d64fda32fa6f2ee6155cec422e31e0d1419fbe93e20b6484b86c9b7b8e0fe587eb734647e37000bc59290a138100bc5656143711026797958c983b1e4aeb40192bb21581096850cc22c8cc78ab03c8662925786953c0c93bc2aace4e198e4f2b092476092f70c2b79a4ae6c38c4398da473992cb88a466acb64ad4ebabc5791a15fd22a191db032dc282cf6ae6980d89b8d057e65d8c0cfc1d4ae6a00b54763c2d73680f05c2c45db2b43b39cd054711abb6cff5c06b7d575837e9458838e6f783f4f6c04a0769dd317f575139596888d063cd7e28e5fc5dc15632b0325af799895d53a2b0fadb772a153e9e091ce8da06bc4dfb344d4e5d6f09569dd083aabfec969f56bfd15092bcae40ab8d592c702e6ae0d3fc5f914b78bcb8da6e749e0cf07d3039354ccf8a2452bc5dd68a630b2fa792f72e4045d8e311f235d83f913fca26b539ef38e4babca49149738be512dc2dcb5b658aeafe8d7d67b17bfde50fe3406b3b25667e5b63e2b2173d7cee922c4d6081bfd5a468710bc132faec0b7825856805956a7b36cbba4c24f6d1aa016720a1f72de9d20b68dc56c5ba7b3adc067db1c113aaba465fc6cc316b3641c66c97a9d2547a7393df3dee19bc3a8c5e64a1d2faf96a97c4d002f87ec702b785e52278a1930d5e305ac864bdbc663d437e8a817261537660b1a3546a46a5b63f66dd4d9379bd0abf8d5bdc467b8556e71b85c7cba9cedcdbc6d841a2254b7c1acde5b67f5c4b856e39a16095b780366adb451e5c6fcea724928365ea41e9a1330bbf6d1d9b54be092dd027127ba6ca793e05e838b4e168aaa4e9892602ae13c11e3b1af8ec70e69c9b3a973f36d319bf7c3ca29c17c40f9b0b7042f0ce7a01e11c4b2ed30cbfea7b36c6bc4b285227e56c8b2895bd556b59645321697c684064d1d651266d1fe3a8ba613a6be2a54ddf5c29731771df386b3b410b3f4009da57c61dee4538a680be01e249cc94c11cad5a236b4dcc9713736a0559331ab3625532788fe2e2c212c14a1502dd6eb2e939bcbe973bf68190d67d914ccb20375964d49987226572bc0d3d07875d65453caa9988d07e96c2c232e51d78abd6faac492d12522bf2b91e50a3736364c1d31955c741ac6e9601da7855bace6119f50780ed3310e87e838ec4ac86146687fc13d26089119189143754426a3a93aaf332e731e52a985bb234dfc3c582fa9a17d7f2666e1613a0b6705b4702711669549844abaec9d85d97bb8cede22421faf49a144d21004b6c7081cd150251537b52f04e5147aab76c0ac3a5267d58c807e3c8d558bb4a8da081f9e8dd97a14d666133404a78b2762bdd19fc6262f37887d7330fb8ed6d9b74d88b274adc85bf832fc2b64cd17b7aa38e6d92036cdc56c3a265898f9fdb350b4b0f0542551bd8db6ec300fb3efd864fa48b0f2f434d16256226bb3b1359bd4cad3a9d71ae663561e87856290b682e8b28f7797f774c5af1534548d6147ccbee375f60d64f15b838b1dca145a16615a9e10bf4d3748282c4829142863d802ccea1375568f445390e2fa211a30255c51df8fc14b3875dafa466afd3ac598de27e9f41e9f30659825fa8479ab738593b2573bb6ad111baa244a1d1a2a0d5888d973325627881f47782bc87c514eaed1949492e943e2e5cb150d68e122ccc25392691bd1f709cd12be173f354f67bfd04e988da7622d93c9e457c95899ee3c6b67ccd2d37496ce4c2a34fd3d7c6e3c54766fc970dd05b3f6749db53b270c57da1e11eabe925d311a6760b5a2e4da6f1395cbe2953ca95a741763b69ea9b3756c9cfcd15fce8fce29f9548f1a5f1baf5e52f48215416cd90db3e52cac2728355b789db6d6d7faae97a45b6d218845bb63169dadb3e89494ca6cc5ac4c78ce5a616bad287f261b3a41ec8ed703c8bd59edd43e55a492cb45cc5d2bbfc4b7812b11fdcbf3c475b7850886006d3bc91e58389c13acf52776da53b467ad447abc695a0c9660569d1b2cbe24b22a7ded054b318bcec3fa2412b73d25535249a6052b782b57eaa97a09c6e17c1d87610138a83055fb4737549ebb0cd3f8029dc683139640bcf10865e22a1fafd73035b3e598a61736748e592246bbaa3a25457c29c56cb9081b09132c05705b6562efc68e6e523bd9e396c64a2914edcb3c4f0b62731966f3c53a9b07f93ccdfb26b59fadc0f4bc44a767ae4f4f1873fd3acf903a275baf48357f59895970a9ce82ddea4b2f5ba667147a60b2f54bf54e102aab302a9725333a447d3148bdc2b30c8b710d93eb9463965d9e4ceb40d03c377cfd30754bf7c42cbd2299b83945f8aceb9fb5a0d5d7f5f102969fc03e5dbce56f05b1603566c195c98f60e6df0ce287d03eec7a4385500566df553afbf252aa39a9b4bfdc79d61bf7d87036acc16cb81af3b2d46d580beecfd2f461a696875562165c838da84e360f5b90300fa31cfb5485d9752d367f24f5902915fea5c2676e0397bbd762965ca7b3243f743c9923de7073f2868b297b61565cdf703185f7a02c94bdc6dccff8d30d67413566c10d3a0bc6a56c01bc3743948778af55296bd871bd35983537a6364e347c7bb2977e3454cca9c56cbc09eb4f8d6fe30211c7cb35164e11fd05d571f4f6de9d27daccdc56b1f873ab52ab3dd561566f4ea51fcf2d372c701e5ec6dc56a2e56c4bcf0d5c8759787332653b3de1d4ea5d893db399f32f12e113d7a709296eaf68957887d7b2b3b39c5b919cfad462547d8d695454edcabbcebfbfc6090d1eef8bebeb467ce27e7c09b764b81bfb889f21110eb6565630222b987f618029427e858c9bca5b470942ee1c22bee0c128a754552ede524b1c24b242574b1c05ea89d0bac436ed8e2c59108934931629590ee9a19cf47fcdd25b79a8f697a19a91cd1b0ac562e3a97853622d6ee35f6ba4f7a1ae316461ecd0e9ee0a50e5a5085fcc6d89f8cc7cd1ac864fd04bf865ff16aafe2f8f140254fd3aa1b8852009d089eb2edccd9d2451cddc2ee4b71c99cd9a64e4f010b99d121b5fd463aa2827ac75c0b9e3ec559e8301acb10221dfe44321bc8312617be7441581678a821a1750222affbcd8358fadb602d8f5cd3d60775202eb2ca2ea1296c3bcf1de36836bdfca03771725b88e1a705c60a5f3121f2c5527ae965a016d29f3a0dd4ded6dd1d173baf3db5d80a9b47e34a6eb753680cb6aed81bb8712dc56a23c5a9374b66003bc9341a6702f25bc5620aace8beac1b001d3d43e1ea6fb2831b50098bce9243620babe9b87e87e4a446da210a95a419168bb596305aac74679a81ea044d554a0aab12a396fdcc683f320251cbe4ce8bcfaea911a7de0b6bc1589fcb18ef1d15c3c479c2f5b066d00d8abaf07f0214a80cd4144e46af201193600faad9307e861ea8a90aa827badd0ee7a386a7c9f0dc02e1ee4017b843af79b27064278cbded9517aff0814101e4d57a453f3a66d00f450170fd0639480f8fae7aa7a338d6d1056d7d597c9f970dad2fa6858222ad5958ea08d5640e43f0ae2e394105b032f73476fd48a3aa22d6d5d59791ea8272841f5662ccacb783b2b5f5ea7ac7ecf8652cb6b889d41cbeb93d4e57a1e1955c4dc28cb626e1fb40da81828793d455f4b548b3faa4e2b1b109d3fd243f474ba5ab978a30d1c27a91a6e6caa16fdd6cc03f70c752b17040717e82814ed5ed0e7ec289ded0b1aa49f4d57bee9adc1e0ae0e6203a8b740d5e839eadec979be8a91ea125ee87ca3d4aad2ffd5433c6ccf53d728e788546bb56f6dcaa9cee3d5e24b3600e3f39614b017d2dbd9113d60bed4b26ca002f449be48dfb5c68b18eefc449b8bb08f35f1a0bd4409ad2580c6d3329b4a665f8192d9cbd451729aa849d6898f7b23c9bd15956b9c2a149f0d6b03b88f8077bd4209ae2d48cb6cede5e643f314ac57d35512e315743e56d4a63ea2df723c50afd10f3e711ba9ab8418bbdb2b2680e8f83a75ff5191038dcfe64f76d57e1b001e2e6a9acd9af884fba7afa53ed43318757c506a3be6b6bda9851cdcd25cd420553e76d338cddf80834cb3526eb0ce4a982164253d402a2bf0e096ac14474a66255587c90ad9b09a1560f86b56a024302be9927156a0924e564ae94956a076aeac40d5a1aca4067266051abd9815b87949a7333e5e2d2b66c84356dc36992c6d277696b6972d0b199c9315676c5316d2a59995a0b53b2ba5d1095949f5386705687cc9429a9ab3d0aa4e5682f13959714b66d177fd3d4fdeec0ffdac8d1c3efbe3cdffcf2766e4f089196f7108b992825b167a9bba2cc443cd9d87c3f3a7f82b148d764a243e1d7ac5e810bd57a82af3e8b46911552a6a9b8c8161074bbe6312ce5c2b71de0a70be6b12ce3c2b71be0b70be6712ce7c2b7136054dd4ef9b84738c953887029c1fd00fba73b39868ac6e21aa24b601a8e1f075a2c2f713f3f07d980e6f5c89fa23547f091bcf0ae870b6a6c2b915482b3f3209e7382b713280f36393708eb112e7ad20b27f6212ce7c2b719e0b707e6a12ceb156e2fc1ce0fccc249c0556e27c06e0fcdc249ca3adc4590c707e6112ce3c2b711e08707e6912ce5c2b71ae0438bfa2c4d945e25c2e5b34fdcb44baaabb4b10e6d0816c4205720d28717e4d3dc05fb54727dbcfc29faf16cfda574f9f0e3cf41b4ab07d19ec7849bee3d166b80301dc6fa90771c76b5382e2784e4f86b21915ca234102f05d3a50f294b282619bbddbdcb6f42bf0caef2951b693280bd2df304716a5ef06f07e4807bc71e987f72d15bc4700bc1f29e1754d501c8a4e0f499b39c852c4af00cc9f4c8239d64298df03983f9b0433df42989f0298bf9804738c85303f03307f350966ae85305f03307f33092661172f19ccd701ccdf4d8249d8c04106f31500f30f9360da58597c15c0fcd32498e32c84f93b80f9974930c75b0833029a31fea684394cc2ac701eaa88d39411649705d2a663b2e68ed700f27fe86783ae12c3bbdde1e62b053cfb1a395a8328ffef966cb78cded786d0fb3651a13c0b781f6b448872484c847737a2992e5b8bca9ce85d26bc739d6859af63f136dc20854d96bade03604728612bbf4d2eabb211653f90046450a2eca3490292dd0a94146d3f2ab4d7032f6d44eda58562365d959c43c4f74fe15d6d95725ea19a59e5ce57b32fa36a0cbcb431254a35b172b4f37f8dfc7889c8dfd3d41b4416d18f07089ba403e1d8ff1cc22700c2a694083b31af0f5d1d0b850aee569b36f7953f062036a384187cee1a61ef1019ce334126d3dc249ca403b9e8bc13e06c61124ed261866438bf04385b9a8493b42b980c670730d9aa95493849e76390e11c0170b6a6c4a9466dc2fc7c0a8b9e046f739e3e0344f3369420bd498039e91f2e4356ae7c0f1489daa6a33923b9e18336b6bb5f063cb15d3a50c2f1c3b39dbaf60cb9b2c70ae7a50de988d464280f075ed99e12a5db1f045bd297b0d502dd64b1c6c66a296aba732c7344c4ac88d770307b50c16c0360764847335bad587fa8a6bee7472d40a28eba46e25ccab11e64683b8228dfd154b4a3ad447b25f0da4ef4494090d9e96430c9e6084d02303b9b049370b00219cc890066179360120e3d24833916c0dcca2498848362c9608e0430bb9a049370b83619cc090066379360da3849756b00b3bb493009871e92c11c0260f6300926614f3919ccde00664f9360120ed726833902c0ec65124cc21a1019cc2c00b33725cc4c16db34176ccc2661fe4e3666f3615077ef930e5fc50672f93b34085351b256f8e1c057fb9a0493307f2783990f6066a6a34b833724af1303b7f9f2e0691a2a4386af27c0d78f125f77802f76282c17e6addd61731fd19b0068ff740cdfe240ff5bc3b78e0308076cc9f4d1dfcd66e3b8e17d41ce3d301dfe58f09ff3c76d813f0e4ac7688ee8b58edca1d7de523c7c5f009b07217c0d700e36bba84ed8e24e5654ff0c44f821e91afceaf5acc3ce61721f25eb503b16f868963913576c5c2f613b807268ba4a988976cdb139fddc06001d968eec28f9ce5e1b9be13a80f472b84938c75989f30fe09d234cc249ba6d0319ceeb00ce9126e1245d22850ce7c900e72893708eb512e7870067b649380bacc4f920c09963124ed2edc2c870ce0138479b8493747f2b329cb50067ae493849775f23c3b914e0cca3ae1725b7b7aabb4f25dfdd95b05e34870a6801009a4f0954ad04bb05f6b7ea47056f2d803786125e3fe6d5d2f9cec5caf78a5999e889549b49abbd7ae1b2e336031e01aa990594807bb264d7ef885ecc8770a4dccf54505b808981634d844ad8604706b539803ace44a884a38dc9a0360150c79b0895b0084506f52690a66e6d2254c291746450af0450b731112ae1282532a89700a8134c844a38b4810ceaf900ea444aa8792cb6932e7a4ae114e66d16ef1a12bdf5fc5cc6fb9ad68b4fac7682611d2b134f158b12adeaad220c843caa40c8645e206c6bce9c781b3790b800f8f376e9599d610bec0443866f77806f92a9f38b7329877f930d875801d0169a8a76b495683f00e9e76473063b922eb2469604ec0d604e3109a68d5bf0ec0b604e3509a68d5bf0ac0730a79904d3c621651b00cce926c1b4710b9e0a00738649306ddc82670d8039d32498364e5d280230679904d3c62d78160098db9b04d3c62d78f60330773009a68d4b01fe0fc09c9d8e01e241463dd9b8b24d09a8adcf310da88deb2e2d0340e79a06d4c6156e4a01d079a601b571fda52a0074be69406d5ce9663100baa369406d5c87693700b4c834a036ae78b304005d601a502b07e402a0c566cf4bb671dbc7a301de859478db48bceeeade15a237c9955dce0897a46e42058eff28708bb6640f7bf48811c262d2262a947f021fdc291dfd98b1513cb94e62fbfa312f0668774ed734ef3962b8c26adff09aa9ce6bd5e28b364ff3ee03a2fd2ee988f670d393694c8d612a6255626c93cd288701dfdc951265dbb8594f0d1dba9654e83280172ede920b61d8bf786a378072b7740cefca67ffa595ea16027cbba73befd60fa175477dae151eeb8ee724f5cc6fa9d0f6039313f648c7cc4eac8419bb20a58d4b529e00b29b2526e1ccb512e77500e75293709236c491e17c1de02c310967be9538ff0638979984738c95380781ac6879ba6a3d15cc9d6b5c11d5d896a602135983db70e099a594280700946a2acb34b681f196a23aa62670cf735e2f656e9592fba8bbe17d457a6ae91da82073290a7299498b628cb772e84227e0b32b4cc239ce4a9c7f03ef5c6912ce3156e2bc1ee05c6512ce7c2b719e0270969b8473ac95383f0638f73409678195381f0238579b849374020c19ceb90067854938ed1ce3b90ee05c6312ce5c2b7196009c95e9eabd5c20ea3c758ee442e7f552b6482ec9562a96bd2ab3bacb6d19005a65ceb20036ce293a05d489d6a663b281dae1c85d2470996853520fd9be97c70ae0977ba56391c01c9f77da0caf10c0ab36751900d20c886cf84c5f10c96b4c454b5af224437b23f0da5a73266b1558b9c2c268e0a77526c1b4718585b100e63a9360dab8c2421680b9de249836aeb03014c0dc60124c1b5758180c606e3409a68db5a12100e6de26c1b47185851e00e63e26c1b47185859e00e6be26c1b47185854200733f9360dab8c2c23400f37f94309b3b27b39c47b88abbca61b1f6b55df29d6c15aefdd3d1463436fd6d4464b5ed8701bc03cc99ad46586edc4485f23d106d37a5c30fc7ff87da2a5f027e782025bcb19a0c049fcdcb7d942f09cd53c6a942d5e5e2637c2314fe890502fa7ae68e972b67eeb402b80d0a613973ff085160ec003cf920731205c2bc9c2c51180006c81e4c5f305ac56237d05de03059ce9633d5a3c2378ce2e338edcbe95b8144e2104a989d99d71bb496c54ee8b77ba4f14c10bd0f35775a3561a592ac38751e407bd8969c7f195d0fb2b1196e1488ec879b3181b05844f94a918a72716b68d1f6a342db0e644a4798340986744544b26ce97210e98f340967ae95389f06388f3209679e95387f01388f360967be9538fb82b4f3184a9cbd92ce9616c91a121795475be51c9a4184f56be0a5c7a6a30139b90188b956b6c6bf0d601e67124c1b5be3df01308f3709a68de3915e01304f3009a68de391de02304f3409a68de3915e02304f3209a68de3915e06304f3609a68d0d212f0098a79804d3c6f1482f0298a79a04d3c6f148cf0198a79904d3c6f148cf0398a79b544f279d4640564f3f0de03cc3249ca4c523329cb7019c679a8493743e3019ce8f00ceb34cc249ba340519ce96a051ee6c9370922e9c42b7002fc0790e25ce8e12e718e7ff1aa6e676f345a96c9fb87a35f3109e9b8ed5bc1237134f61fee54f0b1da1d562700369a3711155a37117e0a7e75142ee2d2157380f71c06572b9343ee8cb5d242d3a19f04c21054bb64cda53207b3a9f126ca60f6c8518bf542bc4782398e215f66dac37dd01f05eb0254789448faf23444936be6e2540792125ca7e02251f2d5f2480f135e2d7c9d73d6f5dc2560be07c14e972e76ff7fe74c647865630c2ed4cc8ca022d4046761125609e98f1652879c6a52623f025278b84226a98ad7d003b038017530254ebc88f16c5a9340f0c271bacf817c07789392bd3d898ed1c04d2ca4bd3317c1643a92c251de379518408632f50eabc2c1d85a3d8e1b3c96e3c46d8774416e1ef035e7ab9b94bab100e65201b9dfc05484baf48470280953bbd0480301d254b002a80875e4989916f8d375fb628a995bd6609cfe4d1debea2507be07f57a56bfe86eb83a5a25ca92665d9bdb5cee300e3d5d4457285d1ade1a8f5e2d302b01f15c0f120025f43dd6fc93dce9d3a58c6dc25faf8a37b8349826e0d874fcb225c3a723e15cc71c01baf3567b22061c992ac31e30de097d7a503654e9c2637bbdbdfdf025e797d3aba30f2ff735d18ab01c21bd2d1baae76b2ac1185ec32369ba97d5ee689b61f9e7ed688c2fa5a66f362bbe301d81bcd992468e310d8d900e54de95873213ffd4d6b647e5807e06da684c7db0aa29b27ea4481bcca89d8ebc4152eac94b24e4356a7ee0220de9c8ea107c9ef28445804225bd9bd2d2802dd6212ce7156e2fc1978e7ad26e124ddee8e0ce75500e76d26e124dd8c910ce75100e7ed26e11c6b25ce7700ce3b4cc249ba402419cefb00ce3b4dc249bacd3219ce5900e75d26e124dd17980c6735c079b7493849675f90e1dc03e0bc271da334f844fd75a271a38ea5adad88ac2a3903e0bbd7a401d8a3299b35c8709e0b6a41f799849374a23419ce2700cefb4dc2996725ceef00ce074cc2996f25ceee603cd18326e11c6325ce6c80f3214a9ccd858032d982e9ceb720c34536d4bf29c8b91fa6c43584610befaa8156ee049535e26fde0f5427444e1380b959c5825a1a4660cea4829d07603f929eb1c0b9ffa10e8b1f01be47d3d1a9cb7b246730decbc8fb22578a6edd6aabfb1e4f02081f336738b58dab6c5d0a8a418f53a2e45d4cf3451a58cad484136c2c518d85595073e0934f983ae297b45983ac77b225f0d1274d454bda9e4986f632e0b54f51a21d0c3223752c12a2aa44d1c81b2603fbd8a73bff79714a4da5b239d3fa05a07e3a1debcc24376026cfca25f86e01309f3109a68de38fee05309f3509a68d4bf06d06309f3309a68d4bf0dd0c603e6f124c1b97e0bb04c07cc12498362ec1771380f9a249306d9cd37b1180f99249306d5c82ef6200f3659360dad83cf22c80f98a49306d5c84fc3900f3554a98dd59f0b14884de4936de630a681879cd34a0841e4a06742a00faba6940096b436440b70540df300d28618d880ce87600e89ba601256c4922033a09007dcb34a084ad4964402703a06f9b0694b0764406340f007dc734a0360e932d0040df350d2861cb1219d07100e87ba601256c5d22033a11007ddfecd5b908f37cb2d5b91e00783f30a7563fcecaaeb81a00f3439360dad8155707607e64124c1bbbe2d602981f9b04d3c6aeb8bd00cc4f4c82696357dc6a00f3539360dad8155709607e66124c1bbbe2ca01cccf4d82696357dc9e00e61726c1b4b12b6e3d80f9a549306dec8adb07c0fc8a7ad877bc11f4aeea0562492ac2f4b20915c84c3051ebeb748c4d8eada927333a99b0f84e3636f955e0a3df50a2eda741eb8e32e6f02ad9f66212d7dab82d4d36362c739e0af0b7e62ce16763553317a0fccea4852cc65bd90fdf1b44fdef4dc2499adb93e16c0e70fe6012ce3156e2bc0b44f61f4dc2996f25ce4b01ce9f4cc239d64a9cdf019c3f9b84b3c04a9c2f039cbf9884d3ce1176bb019cbf9a849374482d19cec300cedf4cc2996b25ce3d01cedf2971f213b5298e7d35f37600d31f2679dd782b87cfb407c5f33f4dc249dab94686f337e09d7f9984738c9538af0138ff360967be95384f0438ff3109e7582b71be0b70fe6b12ce022b71de0f70b2c606e1b47360ecf60067c4249ca433d8c970d6009c1926e1ccb512e71280b311254e2e609e234badefc597f989de115d2dffa39e2083d98f0a662700b33125cc5ed2372b9c87b857720e758c0fd22ef5f9a87f2954c23e4ab255938e0275a3269458737c586b1c6195cedf1cabab76995c39b190f1ad9ef838f8258e4995cc5d34759af810ff5c199b2185466fe648887f0415fe6f01fea694f807fbf02f63b18318921fee40889aac51a5071849d28c12b55a17741cfbaf6df6f83448839b5322548371bcc4a244ac62572a56ac731fd28d73221f2b42b6bce5a3202168418936d892ab368ea43f1ba06c990e2f4d6da550c2b9486469e86c80b695a96849e7c993a17d00a4adadd391008c16e9ab6e55d034655364d30fb7015eda861265f0e9b2b956ae83b31300dad634a036f683ee0c80b6330da88debe01401a0ed4d036ae33a38c5006807d380dab80ece4200b4a369406d5c07671100dac934a0364e57980e8076360da88debe0cc0240bb9806d4c60e95ed01d0ad4c036ae33a38f301d0ae9440db31afd299e68da6c86aec939907af1b25bc4c1676112142df24abc5df0d7cb3fb966c118dee6522ac1d6da242f90540d98312a5ead7cf116d4b254290ae89ceee6e90b741c4ef998e56d0d8889f4c3b2861a4274b53af009eda8b12ed4016ddc3c45b42bdadfbfeebddced702ccbdd391b62e67c9cc4cb671a587f92031e84389522d9b915cc75dbe95d3bc87803efabe26c1b47111ac8e0066a649306d5c04ab3f80d9cf2498362e82d50ac0ec6f124c1b17c16a0b600e4847355415997879b3d4b7e7ec7f6f80e401a0a834301d7527cc57fd304947ec93e13c11e01c64124ed21651329c9b01cec126e1249d004186f34d8073884938494ba0643823206bca320927e94c51329c5900e7d074e04c7e5ab88d1dc85d41641f66124ed2a5d5c970360138879b84738c95386f671ece1126e1ccb712e77900e74893708eb512e79700e7289370165889f3058033db249c766e91b608e0cc3109679e95380f0638479b84d3ce818bab00ce5c4a9ced991a74f35f1a76f33ec0974789cf9d08ce152c17f69788c7f666ee44f0d502291f7ab3dcf9db153add3996394f955a58b9ec00b0e653625543c1f887578808ae6457ca47ec6b838f007863e87d325e0a090727c099f4846def574588b056832a65012556354c2197fd57e7c4f50328c752a24c6e430a55ba2403493651fb1c00729c29206d9cf17e200039de1490844313c8403e0e406e6d0a48c2f67532900f0290db98029270f22019c8aea0a36282292009c7c391816c0d404e340524619d9b0ce46000725b5340124e632503d90d80dcce149084e386c940e60090934c0149b8380519c8510064613a2a89c90d26b471c4f0b1a000349912a51a9799dcb4803156eedbde06c09c62124c1bf76d6f07604e3509a68db32c5a0198d34c8269e36a73ad01cce926c1b431036a0c60ce3009a68d53569a0298334d8269e394950c00739649306d9cb2d208c0dcde249836eedbde19c0dcc1249836cee6ed0e60cea684398cc5ce3fd7f53a065be783303120eb996c0feaef732891f38107d3c432d25cc559d287cb9d97f9be08fc35fb06c3f0e1200adedc2dd9f811bd26026171691315ca8f41d49f4789b237f3af6dac5f6ea298558be92a356c8510b686b6a3b71f15d8bd808fcea7043b20264d7557a0f1d68ce702f9188ef859978de5d3bb80f7ee4809d9bf3d8a0b942f9cc2d3d4a9dac6e502964f8bb50915d6ad40e654948ef435b9c2958d85fe61201958408952b76a52f2292c215ab21436037869713a237fb9a3c422516aad63fe1d39d2b64a125989a00fc0ba90ba64ba44d499d23e4c9b2cbadf09a2fba274544b93eb961b6d651dff2190bbef64124c1bebf8cf02983b9b04d3c65ecedb01cc5d4c8269632fe7fd00e6ae26c1b4b197f3660073b149306dece5bc05c0dccd249836f672de0060ee6e124c1b7b396f0430f73009a68dad485701984b4c82696383c7d500e6524a98c1578e23cc82c826a89e0e7096988493748327329c8f009ccb4cc2996725cecf01cee526e1ccb712671bd0f4566a124ed2418a643887039c659438d592137c32c13ad0309c96c9d364f8a6310fdf0a4a7c9d9d93f9ce491de3e33cb8a84ae7f155cee355a203636f3154a15c9cd987b109c0b89212635fe66d43e2f64cf2753c6a1c75960b1e7c0c4821e3ab16f3dea01247008fe0a54c2d4b516b21dc9d00dc55e988e2bc89edbfd35db107c8bfcb29f185db34dcc63d5dba01b47b9a8a96b4f1830cedb520d2afa6ce98e2159394a5a41dbd17458830f604c5a30a4a8c991a8cc1467812b6c4938df0bc1724006bcc4d00083b86c912808f4002504989b69f403b53f86711e3a33aca6441aa548852a3eafe6bcba2b50480abcc4e1a08fbe2c99286af40d2b0361d191836be6e8a4810aa6933b05ba932b0fd00c6bde89301b766a58eae2ab3996e0243b173755781bccceada553e005c9d8e2c2c3619482613231c414296857d0fd0d6a4a3cf09b60aa82616afd1c5ee56801e20bbaaa584d95b033371e9c05eb03301d83a4ab01d25d83ce7ff1af9f11281d8f66d732f0708d751220c3696dec651773b0094eb2951f60f807281f34d2ea496cd73fe52cdd435b445aadba98a54ff03d9d2064ac4dd59f498fab5a28d7f555c9fb5716c4933d0c8b2311d5d7ac9ef5e4488936c15f916c03ff73609e7382b71fe0052d47d4cc249ba5c0619ce2b00ce7d4dc249ba612e19ce2301cefd4cc239d64a9c6f009cff330967819538ef0138f7370927e9205c329c5301ce034cc2996725ce4a807393493873adc4b93bc079603a1a426053331fc4b380b9ad4df6b625950284075122e44bfff23a386c912f124af04ae67adf1dfb7a8fbe01200f4e478b1216b1d396e990ada23c1ad4ce0fd99228a31b3a6c9cc57921a8991f9aae14d26da0e38236c8d4310d4dc53f53217c1244ecc32811760608cbead70653b76d6f717f1e603c9c1263ecc01bfd822b33e40b695b1b640415da5e00ed11e9451b64bc28215ab20ee17f00da234d454b9acb93a1bd00a03d2a1d5953ee7fae17732840783425426f9cfd16984a4356641f00f01d931e7cf9bef2a6cddef727c0772c253e355826b93ef45c2b7bd14f07308f3309a68db59e3300cce34d8269e3da35470098279804d3c6b56b4e03304f3409a68d6bd76c02304f3209a68d6bd71c04609e6c124c1bc717ed0f609e62124c1bd7ae3900c03cd5249836aede792680799a49306d5cbdf34200f3744a986a5c6690c10684de49d6a19b03ba2bce300d28a1879201cd0540cf340d28616d880ce84000f42cd38012d688c8808e0440cf360d28614b1219d05100e839a601256c4d22039a0d809e6b1a501b876df50140cf330d28610d890c6826007abe6940095b96c880f607402f300d2861eb1219d00100e88594403359d8a52b6cdcb7f02480f7224abc5d58ec40d8696c03e3c36b8a185f9e720db37938ecd600e4c5942083ed6148580edd4485f25780f2124a94aa77bd604b0c4e20f3c4439987ef524a7ce156f920ac72928d3cfa1078e6659468d588ced1f5eda0a522a57467a3dbeea14f010fbd9c12633f80b18a79d3f98b195fc9abccb9c25fadad5ff627cd80fb51019e00fcf40a4ac0c167a9dbd8b8dc0be0bcd2249ce3acc4d90ce0bcca249c63acc47907484daf360967be9538cf0738af3109e7582b717e0b705e6b12ce022b71be08705e67124ed29567c9702e0638af3709679e95380f01386f300927e9901b329ce500e78d9438d5d6cdb9befabccd930caa00bc9b28e1a9d5e5788be654562d2a9af35999acb3bb6bca950981254200dcfea4c6ea36cfc100f1e67444772cb2c7ee0d47d8bb4986f378502fbad9249ca44369c9705e0370de62124ed21568c8703e0370de6a124ed2c5d0c870fe0170de66124ed2a5fac8700e042b7fdc4e89b3af06a77e99801d1d4625e233d5e2bedbb04c0897ef8f4702f71be0ab779854ac1f6fe5c0c52e00e79d26e11c6725ce7f9987f32e937092eeb24986f30680f36e937092ee014b86f32c80f31e93708eb512e72700e7bd26e12cb012e7a300e77d26e124dddd9d0ce78e00e7fd26e124dd8e9c0ce74680f3019370922e2140867339c0f92025cea1ccbf19046f152d7578f04189ca4e6f7d3af831f8a942e7af6a31cc96b4de5441556f1a092aa50f510257836b9733fd94d9e83a131948b2753df70635a6874d0149d8a34406722300f988292009c7cd93811c04d2d2474d0169e392bddd01c8c74c01493851860ce40900e4e3a680249cc245063207807cc2149084e54d3290b520b379d21490844b0790813c0778e453a680249c904d067203f0c8a74d014938458b0ce43a00f2194a90392cba2a5987ce28c2d7eb9ec2f8e4c2b5ccddc0999b9aa68a651155c5b233a8583e4b895fadc5946ce731619d88acebf818e0cbcf990493b0a64e06f33800f3799360da38a8617f00f305936012d6d8c9606e02305f340926611d890ce6c100e64b26c124acb993c13c04c07cd92498847525bad9ef00e62b26c124acc193c13c0cc07cd524988475263298870398af990493b0264f06f30800f3754a98bd9937bb83effcc26bf233c55240d39ddfe50263a9636f9510cca7cbd8bdade3aecc03fb0625d85e02ac5a79a1226a45a5256cb580c8d75c5aeefced0a9dee1cf9ba0da57458c9d6596a06b0be498935d8ce84366e2b712a88fa6f51a20cb769998debdb0c0268df36152de9d03032b4b78104e09d74e4fe58d373740230d6ca3d8f76057efaae49306ddcf3683980f99e49306dcc9c160098ef9b04d3c63d8f7601303f3009a68d7b1ecd03303f3409a68d7b1eed08607e64124c1bf73c9a03607e6c124c1bf73c9a0b607e62124c1bf73c2a03303f3509a68d7b1ead02303fa38499c9c2aee44d98bf93b530dd09f07e4e89b713f35a44d789164fbeb2cd32d1129aa6855337914578e641fc624b36d345afe24d58782743f923f0c72f2951f60b1ddd475b19e1ff0280bf321d3061219f0c702730caee6bd3011316fcc900ff0c3cf81bd301dbb8bbc7ef00f0b79480d5045ad84b8a75ed91f78d92e1ec0f4a07dfa5a37490c7f8c8670c631a0a5a6428c700cffc9e12650be704825b40eb7b64fd475b01dffbc19c922961ad9eac64fa0ff0bd1f295186db2085304727f3d23300da9fd2e1a5c93598d8d8c49c0d22fccf9428d508a754fae209dba1c87cf46c00f61753c112a6ab64604f05607f35152c61524006760a00fb9ba960099b50c8c08e01607f37152c61c5930cec6800f60f53c1da58c0ea0bc0fe692a58c2515064608f0660ff32152ce1583d32b0fb00b07f9b0ad6c611a5bb00b0ff980a96700c1f19d89d01d87f29c1aafd67c7b02db0ff2c19be63003ed6c49836001bc79fcc0328239428836fb062e34a0f1781d6a90c9370926e4f4586f34980b391493849374f23c3f903c0d9d8249ca4fb7892e1ec0d7aef9b50e24c34ddd6df146d6346d408c06c6a124c1b07423606309b9904d3c6a960ff8254b3b949306d9c0ac68067b63009a68d53c17e029ed9d22498364e05fb0dc06c65124c1ba7827d0260b63609a68dfdf49f02986d4c8269e354b0f701ccb626c1b4712ad8070266b3263ee1d363844f11d53d5ee15bcebc9d8947b1198c2f97eaee5dbcdc399f2d9a7f6bd95207c762e75fb010d8ddf9a7bb1e11db4f4f631bd85a7195cb2b15b2d73877b966352c67b8f3483bee102da5436489e6bf428779adf34c112b135fdfc8163077e7e579ce6fb5424f9d409215e9ccf858c012e79c0ff6e55fa8743459c5aa85c5d13b3367459a0b4e656c9d24c00166495dd7317721d959b2e1b1dcb1b9446852ed3cd3587cc7ad446745da8033354f66966836af115af1c09ee7d8aebeccdb818b4410f256e0f5ce153592d6d3ad8324c6b5da95b90bdb728ba3dfcb127375a28733f30574b99479d22e6e59a9d0433f52923b50447c4ff19a23ae97386f95886371bd55d9239cc72205ce2fb78360547dd7c028b908ef1a79a6ae2796c93d26beb4f6dc2d22fa74a2a2c17c3d91456ef4e4efaf108b169509a9b3125a9ad83e3cdeb48e132ad9237958fc97edefc0c35d06bb70d3ae9156ce5f0b9d907785f328512d9cbb9a559665b026ff0f5c14c2523fa20400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/5d1a99dbd27d02c4ea4a23074169218e.asset.meta b/Assets/SerializedUdonPrograms/5d1a99dbd27d02c4ea4a23074169218e.asset.meta new file mode 100644 index 0000000..ea0ab77 --- /dev/null +++ b/Assets/SerializedUdonPrograms/5d1a99dbd27d02c4ea4a23074169218e.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1642d063172289f42be77acdb807af7e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/5d99c04f17c9f9a42bdd7a08554a0eef.asset b/Assets/SerializedUdonPrograms/5d99c04f17c9f9a42bdd7a08554a0eef.asset new file mode 100644 index 0000000..1505702 --- /dev/null +++ b/Assets/SerializedUdonPrograms/5d99c04f17c9f9a42bdd7a08554a0eef.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 5d99c04f17c9f9a42bdd7a08554a0eef + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e780e01428de42097e680211684b5b1cd2628540052804122025843482b4a52ed4dddda9bbbb5377f796babbfffaeecccee49edd9be7eef6f69ecd2cff377cc866ed99e7f9ce332edb2887593f9121d6afb96c161bcf86b139ac94ad6295d65fe3ade34aeb9f7da6aecf64d5d67199f5bbc4ba378465277993ff0c8874b57e17596735acd67ab38e2db18ee5e2fe6c5666fd5d64bd5b669df1ab4badff65d6539126d64b73d80436834d675d229d9288982b5eaa91d722dcae4873ebf738b6ceba5b2694e281e4885b5dac5fb3ad3b35e2de4a4b69f5dc3cb64098b5d2bab7c47aa79a555832170b89cd371630f107b30f1de4b1a33c6e6dfd6f21ff6e2cff6e2eff86cf67c963a7149fef0cde6b01fee6842e4ef07e17fb18696b1d9b5ac7ebc1397ff71bf95c575b5ea3e509646d238fdbca637729f38614f46f268f3d92d89b48c67640562acc9acb63b63cf694fade9866f8bd6d4691f3813cceb21dd0271b84dd02dce7d77af9b05dc5637b573cb6b7e3b1d1d932fe36cbe7fbc8633f79ec2b655bcf74b85c5eeb2f8fdd92e835c07e8f8d62319fb5c26c5c25cfa3f238501e0749dd3a485d6f02e77e7551713a58cadc5a8671b3e6ba7a9edfbf459e0f91c7a1aef81a269fbb559ee7a4a84f2afea774ea28c3b80d9c5b1c9b2c4a204bc57b2757bccb386872b2cdb1c95d2e7b80ff69e5e64a79b7a7614767971d9d6d5db2a2cee792eaa0e40f9772ba48b97780732ef7748fb63591ef49fdd808963c6feb90c2bd025b4e73c5bad00ea76947fb7ad3d1cce9cbf949f45471dbd515b75da5dc0a2957d93fd23e8f28ce3d801cfefe9d2eb9dd5c72bb49b92a8fc849514f95ee7794c79de57127569f8e07d5ca6b3bc8a36411d98639f30055866c1f7bb7f3c91eb9258aa35d5c71dd4d86bb6d1299eafd31f2d822c5e7d533637de83c4e1e5ba618664b791cef23cc56b62f34ffc1e50b8549644eb0f936af053a58725a1c28cf27cae324799c2cf96fe7f203559627f28364ba4c91ba301007962e2d55795b248fbb3a7561bbb974ba2b733a45549de86e70ce8f3de4f57bc039d775a61d4ecbc7a4cca9f238cda5f3743a9daddab578af4d6be01ba9bc97c8bf66daf6b5cab565b72a96d77777e9362ea677f309e05da5472ae961b66491ed629c2d75506c8b5dcfdd0bcef9b1672c3cf1b7f52e47e2c853551df23e70ceefcf4a51d7b92cde67b99cde20ecde326c99ffb756f1b9078b4f7bba77f9b117b8d64bca7b57beb7278b2fc7d473dcb6fbc139bf3f2745dbf6d2e86785db664c8277f766cefc674ccc1f9abd28afcd93faf461ceb4a5eab8dbc5de8954c86bf3edf3b64a9705f21d55f7547f5bfa6da5cad37de47131d397b38b0007991ead26707dd8dddf94d7162608ab543eb3c465f7cc989c56b22dd656e563ea9dfec8b3fc5a993c96cba3e2b022f6ec60551f5265e3be52b77ecc91375b4dfbd8757eec2fef3f00cef9734b63b23b6d92d756ba74d5c567a5cb765d1e90c8cf56d9cf769d2fcfab6cb66def73c95dc012fbed7eb69ca1aa0d526dcb69d7c4a39c1a5bce30e56b75f6793ba58fbabe5a1ed7488e0398232f676be5f528f09b01e01a7ff64117df64ba25e2b8bfad677dfdfe00795465f94e40b66c4f4506c6e2aabeceb70edce3e7aa1ebcda655f225dd6cb639b24f67400cff1e3413eec4f74afa93c1e2a6d1bc49c6d9e41b6af6cdd3d81acc398d64f3ba836e8e1f6fdf632ded911c0261ec6e018eb7a5f3a52de1b02ec967e15190aae1d22af0d8b5d8ba876d951aef879c875ff682043777f03d04177ff1879fd615bf70ef27976accb96d5cca9eb50e6c867d871f1b64686bac27ec4435c1e2fdfcd71c5658e8c972f12c83a411f971dff90e727bae2f224575ce66ae25296eb91e120defaca6b2334f19b0738e4ca7ba72071a9ee9f0ae4eaee9f0674d0dd3fdd19979d543dee0c242ea1fe302ecf8cb7553c03c37e3485b83c5b1ecf92475dbdf71c7954e5d66329c83d571e972690dbc525f7f114e4aabec2f312c8bd00d1379df094afabbe9a7ce6f4757e6ef96de75713c8ba90697dbd8bea37b888397dfd62e6f4f50216efeb97c87bb04db1bdbc3692c5fbfa28e02705f2dea5e019e8abeafe6540aeeefee54007ddfd2b98c3d7bb8e91d7af647a5f87fa435fbf2ade56f10c0c5b95e389e272a38bb3e2abecbb079c5bf1d3d55dffa96289cbc6ab6df9c354f97c8d94b78394ff0438e7c71d5de1ee6887db4df67f6da3c6405acbeb43ecebddd418c3b54c5bdfea56ec7aee3ae6ac4fdde0e2affaef95af807ea87a5bae07f7a06d3b33679d44f547ec02e26a67704d57e74ac655f545dfe2e2375aca7b129cf3e76e03faff22afa97ee8f5b17beda7b8e2b735d0e376bdaf085d419c79ae23299bef4862b3973c690c73e649636c3fd83651ffec3df299e3133ca3fc43b65f996adf8f65cef6cb58795f9d8f73dd57fd71e7c5d877ce067a28d9fc9d4d09f451f63f248f0fcba3f4a7c878e6ec1393ed796d19916e3d36dd7b8ba44e139833cd4fb0e3a1876a1b2b5f5c98c43f543d4d95f12552de441703d57f98a83f2b595809ec8a4c66ce3e04d5bf26cbdcc82479ff29795ee47a5ef529cab23832c5f5fc6eaee7655f235379e9aecee7d993400e3fdf14b32da2fa509f02d7545fe6d3313e3daf93f7a63ac366cf3067fb4eb5e1a6c9e79e06ef4106eafe33f27cbacba619f2fc5970ce8f335d72551fc9e3aefb4aeeee2e7da53cf6823c3e1fb371f87cf00ee0c99e73ca4ce8d332ad4666c9779e03e7964ff74c54ff57efaabec66229e379706ec9c8ceb6f5cdcec76545e6b8f8cd06d7f971aebcff0238e7b23724d04ff9df1e2edbf690ef26aa03ab77f794c7bd5cb6ed2565fc63dbd6ab5d0259aa8fe725571c2a9fe5f2e669e2751e884f7ebeb7d4e145706ee9d06ba37cee65a6f7ed3d5defbfe47cbfb7ea037b451e5f75e9369f39fbc25e97c737709f64aadf4fe9be20f64cbd7eafb9f45be0d27b1f19eecb400f759d1f1732671925fb18d95bf27c91ebfe22795f37d69e288dbc23df2f61ce7cbfc4e6c7bb5cb9ac3eaa7f51f529bf278fefcbe7973b394654d99e285f7f9b25ced7956e8ba5ec57c0393f2e91d7559cb607d7f9b154de7f0d9c5b36f555f1f8813c7ee40c8f7d02e25cd51b3f94c78f09ed55fa9749d9ca17b3e5f5f2d8fb11d9ff1b592a9f7d033ca3aef3e3becc59f7dad766d06fb34b8e7a6f857c5ef9f866709d1f2be4fdb7c0397fee33a09bea13fe3cc622ef17704d3da3587c2a7592e31ffdee738559e90a53f627479621f1affab357c9fb6f3b6dacaf9796b3d85c122bdcbe2abf557ea7d8be02ce5308977d21ef2b7f5275a664f19f289d7e25c370d5ef23b2adde5fb61d07a836d9d7f2e84ea76b5c7ebb2605bffd3289de4ab7fd5cbcf693c76a8457b53cd630673aadb16d1a70a0ad4f548d53aaf6e277ce70b5e9f55b7954e915b33bd1dca464762b3b6a993ebdae8dbd1f916ddb481d73a6d7b5e03a3fae63cef4bace6631f074971cf5defecc995ebf07d7f9f100e64c3baacf1fa657d5ff9f28bd1ec8e2d2ebc0eef6b3032b5c61ae778529fbfa23aa1fc7ed07aa5d7f1073a657d5b61d0cce417a8daa792acaff14db57c0790ae18a7806e17a4e9b3f4a790723e11c2ccf7f600e3f4f391cd9a711398439d3fe21763c0cbadce63148d5a77f92c7d149fcf71797fc43a5fc77c139bfaf1b53fc551eff70ca70d4ffd478e361b1f7ebeb50b2eec47e8fddcb57ed929fc17bfcfc37600feccb49959f2a470e77f13bdce63778b31dfe1095cf287efb26e1279f8b1c019e53611d09aefd29af1d15bb1639125ce3c7a3a56eef81734bb7a1cb5d7237c8e7de0761f3a31a83f9009cc3bce85879ff4697bce3814ec7ca305519f2972b8ce358accec9fbf5549fc04fe07e0ba0a7baa664c03ed315e0c8af7f28e320db1966d238d0b5b74e60cef6eb09f278a22bfe4f94f6caf81fa6e25fe5ffd589c35672d9dff2fc24e6ec1b506342ff0079fcfe471eed39d965cfc9ce7085fc646de27fe5f11aef3c994af3ff93e19f2ac3fb189cf3e32940f67ff2da69c027e4d855448d317dc29c3e7a0678f60cf02c3f9ec99ce5e29976dc0dcf76c956ef9d259fdf0cce237670e278b6bcffa9d441a5d173800e67836bfc78ae7ce733706ee990dbd7f69fdc3f90b0ce93ef7d0ece6198e7cbfb5f80732ef73ae7f3910be4735f8273c518caf9ca25c7add785c0c60ba52eb726f60bc5b5be2c3e8339cae21c954ffd999a3ced35d5ff1091c78b5cdc2e92cf3d97866ce96b918b99330fb8d866947797ebb94b98b32ed1c8e5abeafed7aefb8a4f63e7fd7ab997caebdf38df8b3471dd77cb5563d95988dccbe4f56f5def1deabaef921b692a8fcd10b997cbebdfb9de6beebaef7e4f8dad7def7aaf85ebbefbbd2be5f51f5cefb574dd5776b472d9fbb1bcffa3ed9779aacfad35b8efd577647a1775612efb2770ce8f9f3a7d2a65b9bf4bddae62ce3ebcab6c9fcc5763c92abcdf92e8aee4c9b93291ade471a394ff3338e7c7ab99231f16e7d0c7af618e3a8338b7f42aa870c9b9d625e75ae64c0bd7c9fbbfb8debb0ed8c5efff6ac759c1214e7b92daedb896151169690a2b6325ac8ae508c718c8525feea6de4cbed08d8b6eca7ff19f0122d85ab6ce7ab54cb7da6c8e58cb56cbf2d808ed6ab36ec24755e8e3c5ef12eb897221f4b7485c1077c705c195abb0fe9581a57235d6f5c962a51d5f2c576edd19c6a65a47fed622369ccdb3fe39a5ccb582ad6075d659b1f5bb4ac85b64a91dff643293f8b23af73bb32c99f6aabf95d61505b4ca3aaf101ace16bf570b4dcb84f645d6b55ab106b1922d63e3ace35a115abcedd5d6dfba308b2532bd8efac57fd8757b89a18aa60996355cfb1ce18bff3f461a22464451cbd307ff6992234ad263e362e2ff33b433195e81289232860b6411c7b5112c879f8a4132bf36c65ba8f76f9b7721cb4f688b9e0c8fee6d8505b1186e76c3e021b73c7cefaa2ca769792c475477ba27312d11582e2f2a56c07931212bab492e57d48d3fa2c32f96cece0e10bffd5cb978ce7b043415859f3302c434d4622b579b090acfb9d66f5bb939c28c0aa1a4ceac6af15791a54ea53c2bb5245558e2d7c925df71319bcbd568262227bee84d6620163d8d74d1236abec50d923ab085ea8923a879bd15b108ca11f5a9ae09dc180b4b54b41ac9da964a68f7dd3ea3b2f894af3667e9e3a5a588977442c362a6b12e665a069d7092971489e2a555bd5db178e13f7a86ad11df4ea60346b0898e60aba07d9bdf5b25a49458cf7a67c89b3a83dd998f1ee05688132657014398a54198cb11b6d568c5b25ab8b4e20a21929bea22a775c314cbe939379f33d2c585200b75eef6094b55afaedd4c474f348a1791d253adc5d956b36037eb5e89f57c99a87af2ebb0001b2b4288b5309d6f2426cb67900c7593d552ed20a8f6056d5fbf9a61c49b6b88e7727feda8710391c7b913437b3c31b4c0925927bfc9ac2526b9b35fc9ad30c95dfc4a6e8d49eeea57721b5db2117d48f3034936b14e16f5d738ebdde59631ab45cbb9ce7a5fd7299338b9744b39b96c23924b36d3751579d3084b265be9e28e5fdc56a7a43beab6c1a3ae2d26b8bb4fc1ed306febe1d7dbdaebbc4dd8511260269d67fd35c132a0d6fa1ffb6b8290a4fa6b4a2c49ebe2b2c4bc247eb71dd3d4ba05ce7e7119b21f2de40275fba7195201cf16ae9dd9803127df1a2b0b7a65a02ce8a013ceb3f1de2cbe32fd9ff51327bc352ebc23a6791f8de6b3ca1a79d2bc139692fafa4d499d31c9fdfc4aeea24ba322e11e1a7089a0efaa9f2c76a42b6333accae0beccee6355e1ae12fdab5c23d5573bcb3a2e155af0eb5c8be45dfc89d3787f5d1a17fe3f515b8a3494157c5179239111444546c07b67e658d7eda185892206ca4548c3b4daf010b0e7158b698c6fb65727623b0bc986068ad0cd628365635db19c669026a77953978d25c869ba614976b0df24bb8d4e324fb24334be9a2bda12d6ff96a20a1017ce403c9c6d755983c89df76fd0acc16e3172794bc5e8992d6f3ae3fb45ae11aebac272e0d5d2718a45e9b64cdcf59b19f044d5c3dd1521cb657d72c811c961e7149203a5555802e8aef324deb4e64bc5e33a7c79729965b524c7b3852219ee272e734a76ec968b47cbd9fea28e61d72ce2fcad19ee6f3d74daf0160b1fc3485ac3ed800bde0e133cc2a7e09e581acff39bc6b37592796ec31721f9ad61f5c2d42ef0ab766f2c472dd4e4a8ff44bce5a87d30e12335c2ef6be44d785f2c298c4ac5471278753f4cf0f6ba34c69f1e2f7a29b3c5c048ade8132b11a93f5b1486b1dc20db4aebe5d65fb5b2eeae9e5f653d610f3c7bd1b3bf4e4fee143bf8758a0158bceda889b75f3cc65b14133e5a237c4a636fc2076271b7932eee7836c5cb0d5e2d592ecb36676e982da600648b591f75a2b7ad54c45c8d88d76c768095f1aeb78eb5d6d3d9a21ca810f7b2c5f6c9d522aff512a78330fd77d6e9df12e83f1368e825c4c158beb58b26df8a78ccb786e884f3e7c730a4e23396a553f1198a611ba7c3c68bad8956f585d75cebc4f3b3850394d5d7954b3354400ed3e895235ab495ac212b64bcb5c0e7c8d488bf6355141e766c44d64fc56b3c8baf78a91f7dc58b2f6a8f8aed6882d01eab60e56099ea444da61af192a9e662696112961626a7951686eb7c4e74745435a8cfe1296a9690cd539eff0a3f5fc2dfd8ddfa179d31f9297856a6741c2ca6eed688edf16d72353c33e583268bc13ef8367c9124f469a248a4892035c7d2c508acd4de55536adf96e5add4ced3b9ace8e7aa6e50979d202404e1b6bbe9dc56f47614a610f999d4b3a7984a592332d55299a9da59774f31afbb5a149b65d6759ef1c2fb83c51c675e5f9a2478af14e4b97d25a2dd8b39f954e1e441db89397a3e56004cd314009e6ad50558129aae4942ff784c428598da33fcaa3d12537ba646ed039b7a537b14267c778df0a9cdbc09df5e279c67cc7cbe869f16e20e98603ecf29aebac91baaaa9db0c4d5525c2cda0aaafd572aaeacb37e5758d7960811d9625aac9a09e045cb1d31b6c51ab6ed3cb21d8d2198e393ed4e3ac15b317bd3663fa3a63beb04f3fad71e0ca97ff16d42bcd7bf76c1b0efa5c17eb147ec63b064beb7df643e16933ccfafe47198e4f97e258fc7242ff02b79021689fb6822914f86f112891331e10b35c28b3d0a9fa413ced3db225dded48ff12677ac926a379f62fd1a256ca990526dfdbd5a96b9a58efe11dee7512e1bcd5ed2f9644ccf129d9ef62a1c3edf89d7294a441f1a0f71065be129d42918fac51af4c77b445f84095fa211fe8547e1bb62bc4a75bcba2689d752314d267675b875d50bc7dd306dca74daf0d358bc7909672a8674a906e9f92dbd219d8619b14c67042f116c7c3b58c8a68b0ebf12392563b528c6bd639c8e69b05ca701cfd9a6d6570c66a6592d9881212dd7207dd523d299588ebcafdf1c79774ced15ba4cb39537b567616a57f8557bb64e32af75ac6448ad83f70c7aaf751463e1acc2c2a94a2b9c3918a9fdfc929a8b4570b52682c7b4f616c17b60c26b34c20ff4287c4f4c78ad46f8631e85ef8509afd308efdec69bf0bd31e1ab35c24b3d0a9f87095fa3117eb647e1f331e16b35c2377a14be0073f2757e9d7c1f4cedfd356a77dcca9bda0b31b50ff0abf6228de41c315f26c8953deed94fde163ff0cdb2529b73ccb7c6d2adea49163ed6a554a28b175e421fa453c94351be18f3a68335deb4d963225882093f44237cbe47572dc5841faa11bec1a3f0324cf8611ae1edda7a13be148bccc37d46e6324cf0114c53171c22bc73954863d9e283ba7c716ca5fc7e2fdfa0a04c0c5c9708df8f7538a9816bbeda3a5b7a6fb5f4e90acbdb875957bd68bd1cd3fa489dd67ce49577e2c6eacd7653d26e86e8e61566b301b2d63dc0935ee5980f1ca5f181db3c3ad8be98d147fbf48115ba7c56cc1e2c27cd67b179a4c5a2f39eef8eb05478ca4acfb34e13e7c91b52ce938f1179321fe7a7d315cbbf2b74d1cdebd6c732a46ecd37586bc955f654b75ea90b87fbecf11a9fcdf7986f5562c24fd008dfd3a3f05598f01335c28ff028bc4a279c576bf8566ebeaa35fb616a9fac51fb598f6a57636a9fe257ed1a4ced53356a776ce74ded5a2c6f3b4d97a1f3a753e914c91689b24e1450bc8899c9ecb5bdf65ca912eb6aa99845b55c9ccf144993f72c2e160580bd69c142d1f9b14c8c25565b57d5acab75cc5ef4952daa63f6162ed9222b289573f156882b35e2a932108ebec0299705272ca2bcf66ed6615174ba268afa7a8ca2d558149de1b3f85983093e5317f77c3643b17552e588172fe1adc532d6b3b08c95effee7bdd3621d66d7393abb7834cdabef29b5fd7781c76ad1fe58fc9fabcb593cc6ff0198f0f334c29bb4f726fc402c4ecec7e2e482b4e264bd2e1c9ee95d988a132718e73b08137c914fc107635e74b1cf64770826f8129f820fd509e671cf373474cfede402bccced3c0cf3c2cb345e38646b6f5e783826fc728df0a91e851f8109bf4223bccaa3f023b1f47325967eae4a2bfd1c8539cd465d9ec6e79c2eb4fef14ea20a915bab32b6dcca85f99d2ad154e4e5a1170f3b1ad3e26a9d161deab5c8b57ef392978f4dd9b383d2d76103a6c3353a1db6963ae459ff9788c6107f67adf53b7d0d8ec134b856a7417310177c0d11af197909ed585d68dc7dafd3b8efe80ededcf738cc7dafc7dcf786b4dcf7782c6bba51933535f698359d8011ba4943e80f8f844ec484dfac11deb5a337e12761c26fd1c5ad47e12763717b2b16b7b7a515b7a760c9e1f64459d3880c674da7625adc91386b1a9ec1ace9344c873b13654df919cc9a4ec734b82b59d6b48708cfdb7a873330f7bd5be3becd3b7973df3331f7bd0773df7bd372dfb33064fc13387eaa63676374eed7d039dd239d73303a0f60741e4c8bceb998110f698cf8c6a311e761e81ff689fe7c4ceb47345a4fe8ec4deb0b30f48f62e81f4b0bfd8598118f6b8cd8ecd1888b30e14f688437e9e24df8c598f02735c2a31e855f82e1df84e17f2a2dfc9762cec93f5b87166b79192ed62ec3b47846a745ac581b91c162ed724c8767753aa862ad2083c5da159806cfe93468c162c5da4431e0b5ca634fd595baf0b8033faf71e05f3c3af0559803bf8039f08b6939f046cc889734465474f566c4d598f09735c29ff528fc1a2cbaf99720fc940bd7625abfaad17a74376f5a5f87097f4d23bcd4a3f0eb3124afeb52001f3248dc4f1fdf93ebafcfdeee3735bb97fe062c82ded04450adc708ba1113fea646f8d91e85df8465196f6159c6db696519376346bca323b48d37236ec184bfab11bea747e1b7ea84f36ee0f752c932127403dfa6119c2376de699831faf89d97323b46ffbe8e97768c9e7fe62cf118bd7f5db131fadb315ffa5097da3cfad21d3ae17c28f723e67328f74e4cf2c77e25df85950f9fa4e2ff0932cdbb75fe2ff6255ada20feef674fb4c49ebf3965cfff5478fea0049eef6fe7367d4cdc8339cf677e9de75ecc793ef7e93cf761c9f40b4d32fd615b6fc9f47e4c6bfe6db6b82a11df1261ac680e95896529ba054dd9a2ba94ed71eed903981e5fe9f4e07baa7893ff2026ff6b9fb1f310163bdf68626779776fb1f330a6f5b758ecf034b25c5611557c94d5eff791eeccc0473023bfd31859d1c39b918f62467eaf3392a74035cfc0aecf3aa7697a31eb312ce41f7421f31aa13dab26a77e1ff19cfa4d71665809a294799dcdf138a6c18f3a0dba6835982afeaa153b08d8b5fef4d68d3d81e9f2934e976d53d4257ea3692f3a3d8939decf1ac73b7e3b6f8eb70933f8179f79c25398e05f7d0a7e1a13fc9b4fc1cf609c7fd770bece23e76731e17f688457f5f426fc390cc99f3e913caf13cc739fbf52119ca031f4824e306f87fe5d7fc3d50ee5dfc5f5de0e7d11c3feaf06fb945edeb0bf8419f13fcc88ffd232e265cc08beaf9adb880d1e8d7805131ed108bfadb737e1af628ed928a2c94ef962bb590c6e13532aead82a238f5a90b2458dd7feed5c85902dceece26788d8fea25a94fa76965bc32ac40619350c2e03b73b95f882e62a57cd4085c33b93ec2276697d769e2d32f3528f53fb5ec35834d6b1e09bbec0bde6ec5a66ac808d2dc95e2334ac6070d2ec72510465279530c27adaebca8dd7318769a27198261e1de60d2c4965459024d534924e927a1333a299c688a84723ded209e7449beb629a4f53d77791ce939dab7ce50b6f5dd85b14258ad368c2bb03c57454bb5b35e6d7ce14b04a7886ea4275deab157e55ab49458b8586ab4007ac2d7b956c9d7af1afb775f478ebb445c467ebf41d9d64bef754cb88bfdd81dfc5bca995c69b26f4f1e64def61ded45ae74df6b24dd534a8049b6f788983f7b130dbe8c2e43d19e96e36f401866e2b0dbafcbeded07d8899d156674667e66e55f15bd52261968ac2a3dcf111432f667e8499d94e63e61f1e3de463ccccf6a9f87502ad3fc112ccd63e13cc660c47070d8e31fdbce1f814cb403afacd403ed349e69a748af8dfabfb730c76679fb0bfd008ce115bb007f329a8445fa729b6dee0e377959e3fc9d325a2d9f950ecff9e2daef90bbbbd90bc90a9ef73637b10768db83f33956e885867ed97983777f3ebcd5f610eb78d4f87fb1a4bdddb6a52f737fdbda5ee6f30e1dd35c2370ff026fc5b2c27eda12b303a8002638dac71ab8eb8f48b8aef3003b7d318b8d1a381df63c27b6a84ff10f526fc07cc55b3fdbaea8f58c6db2b0319ef4f58a4f7d645ba567a82e8fc1993de4727bd59bd4be5a4b12dd42f58ecf6d5c46ef3c1de62f7574c783f8df0528fc27fc328f5f75985f91d133cc0a7e03f301c510d8e291e71fca913cef74d19988ad6eb71c17f613806e9bc913b7b8e272a7f63f2076335eef8f943d344ed5bed3d17bbe32d1bfd07d364884e132e81d763bc7ac1bf58284375a1d89ba8c6af49f612e2ff3421e688cfd3f09dce82da52a758d68bbc6fa7332cc25bf24e30a2fb465bbfca11f5ab4e7196250a1fab49fda78b2b7e9a1be15513a74abb4e3bb4d9f9dd9f6b1417355978d4b008e20cc375cec06b5a7c72a93dfdad025436bdb6d62358b82374e1b645c3ad94fd9b5ec26ea4093b279b939e13a03bc25912d8d7e713bb659ea67f31a717b7a35b9c1da984966fc96bcae70ff39f61ea07fba4678170f3f442c2dcbd31e6158558bf51a9c878554fcef434bca1892e4c5ece8dd4d4d31a316ff5b42ccca051584d8a9b13dbf8d28b214d3143b6d71892e5d1906698213be80c692e0d99268795bd1618cd315376d498d2d4a3292d30e1a335c29b7914de1213be934678738fc25b6191b0b32e12f8b6e570e3d4d8f04b54d6d37792c32943c4bd3c7925bffe4a81bc5228aff0d63f3f1f29cf97898cae4e6ec5552aee8db2ee0df414d9ad31ab76d159b595780e761267a7bd3d6c1b5d4120be121764bd64bc18a2a84ea3001813e12d1927a06148ad642c522b49143afa19711d37f101bc850172b39fb36bdcb34511506e5d9921067eec61a49a34988e8b78fd98d37841b64f9ce5e9ea87516fab4b27bc0c9ce0b7aba21d2679a25fc9ed31c993fc4ade1acb682767a07ba50396254df1d902ef88f128f2cba313267957bf923b639277f32bb90b2679aa5fc95d31c9d3fc4aee86499eee57f23698d3cdf0e974db622acff4ab72779d64de48dcdd67777c0f4ce5597e55de0ea33cdb27e59e98cac57e55cec624cff12bb9172679ae5fc9bd31c97bf895dc07f3b93d7dfa5c5f4ce5bdfcaadc0ff3b9bd7dfa5c7f4cf03c9f82076082e7fb141cd509e62b6a16a422f8535cf040ac3eb04f06ea038330d758e8d73506eb24f3e717a5c223c16cd52118e8129fa08762aeb1d8a76b0cc3042ff12938078bbd52bfb1978bc55e99cfd81b8ec5de529fb1370283bccc27e43c4cf0729f82f3b1d82bf71b7b0558ecedeb33f60ab1d85be133f64662902b7c421e85095ee953f0f658ec55fa8dbd1d749d107dadd308dfb23cf8b599baa5fb995da3b92a95b888e2c476c4e2a2ca6f5c8cd649e60964bf54543e0617bc13e697d53efd72674c708d4fc1bb6069bfd667da1f83c55e9ddfd81b8bb158ed93c5384cf01a9f82c76382d7fa143c0183bcce2fe48998cafbfb54791226f8009f8227630dad037d36b4a6601aaff7a97111a6f1413e35de15d3f8609f1aef86697c884f8da762820ff529781a86e2309f28a6631a1fee53e31958cbf0880cb40c6762388ef48963770cc7513e71ccc2b2b8a3fd6671b331d01b3200ba1853fb18bf6acfc1d43e36036acfc5d43eceafda7b60928ff72b794f0cc8091900b217a6f6897ed5de1b937c925fc9f3b0447eb2cf443e1f137c8a4fc10b30c1a7fa14bc0f26f8349f821762824ff729781126f80c9f824b307f3bd3afbf2dc612e0591948804b74c2f9d29ab323f1ab5372f9ea14cdc21277787cbc0d09af14c3748e5f4c65ba1e807ed669847f8eb36117094d15f39f6a3d2f113a57e794da6907e745f8b4839ee2493ffa60d30d96624e787e069c7019e68417d038e1722c13b8d06726508e51ba280394f6c592cec57e93ce0a8cff2534fc2b304c976600d34aacaa7c99cfaa7225a6f5e519d07a1516b957f88ddc2a4cf2957e25ef8701b92a0340aa319fdc48e3933518a6abfd62aad549e605d335a938e479b8ca7518ff6b33c07f35c6ff3a1afe6bb03cf97a9f79f25a8cd20d19a0b40ef39a1bfd7acdfe18ff9b68f81f8061ba3903980ec4f2e45b7ce6c9eb31ad6fcd80d60761917b9bdfc83d188bdcdb6922f710cc923bfc5a72a84e321febb93395984d30d67318961fdce5333f381c6371b75f1647602adfe353e5237582f928d2bda908fe14177c1426f83e9f828fc620dfef17f2060cf2033e211f8365250f66202b3916e3f1905f1ec7613c1ef6c9e3782c653fe233659f8015068ffa2c0c4ec4203fe617f24918e4c77d423e1963f1844f16a7e87a43fa5ba711fea57513f66a57ab01333723e2c9947b4b3689de921ce665bff674f4c57a534ed5453b8f9da75289f64d78417f9a4e303f7d3a12bf4258fdc4059085fbd5e9582ef94c0672c93330e1cf6640f89958eef09cdfdce12c9d64fefcf3a9c46682996367eb04f33ebe1752119c83bbc93998e0177d0a3e1783fc925fc8e7e924f3f5c62fa7a272820d25cec7547ec5afca176089f1d50c25c60b7501f02d9d5f4b85c907b8e08b30d8affb847d3106fb0dbfb02fc1f28e373390775c8a95ff6ff92cff2fc378bced97c7e598e477fc4abe0293fcae5fc9576292dff32bf92a4cf2fb7e256fd455b40658a79120b78f80ab4bd3db3ee283942b4f1f46f45b3da4a2035621ba1a4bbd1f6520f55e8345fec77e23ff5a4ced4f32a0f67598f0cd19107e3d96a37d1ad12cb39fc0d4b8a23d4ea83e15309df18f35ac1111bc4246fd30b1374b91757f8675a752b834bfa2af37ebe649f3a7a16b71c75fc5ecfd85bd7d95f706cccacf74561e556fe51cab06cf139d9d40578abf8be4e71babc54ec676022daa7f7262fdd7399cfb7f574b1eb3c5dd524b629db08bcb75d28b49e0cf7bd3039354ccf862fe65e2ae93294cac6ede732d395e77f0b91123fd39e64f3044dba63ceb1d9bd62a2b535c68f986bd75ad6d6db1fc228a5bdbd8bbf8f54cf9d34d98955fe8acdcd96525646edb3949c4d84a61a35b4b670cc13b89d20a7ccb8b653763967da9b36c9794e26facd805bc9ca90d0efcc75cec8e17db6ec16cfb4a675ba1cbb6692276964bcbf8d9da06b3e456cc92af75961c1f707e167b87eff7ae366129059f91a9f1e0e5901d6e052f4bea443503e67abc8295b9bced368cfa373aea63534a1b5399fd41621372b5db31fbbed5d93795d0abf8d5fd4430dc2abb3a5c2e822e67fb8b74a8cf49d289d53b30abbfd359bd5342ab714d67095becef1ed836aad2985f5d2209c5a78bf463f34eccaeef7576ede5b966375bdc71d6ed7412ec6b7033a6b1a2a9e3a726984e3cdf85f1f841c763b740ca6cead2fc6ecce61fb17a8a371f503e1cdb9a0ec6b3578ff062d93d98653fe92cdb01b16c8e489f15b26e6237b555ab65ae4cc5a571b141d346b917b3e8679d459308735f15abf63e9a8b99fde5c1cc597a1f66e92f3a4bf98675a9e7144e0be007be3993292296ab456b688955e2aecba055f76356fd9a4a9bc0192eac21cc11b1502df6b12cb32cc34b3fa78ccc59f60066d96f3acbc627cd39536b15e07968a2366bba39e583988dbfeb6c9c8cfa24aff12eb61e52b6da9b234f64d5a2fbae3a495ea29799e992f021ccd63f74b69611b71e6aad92a05a50b25b077385b797d7e73c99690fa7c3e9618cd39f3a4e731aac959598907f0e8f601cfed27118e7316d9890221ec52cfc5b676191470bf7101e5d89c44843d8fb1866ef3f3a7b67117a764d1a758d4c10781c23f06fa6ea2076de3616d440e8ad7a02b3ea7f580f8557ab268927e263c89de7a42ed78b7d4f62f6fda7b36f471f35c75a511af1cd5897ca761e6e5571dcb35e6cda84d9c4b715f71067eebc077ed93d99e751961e4f61f64530fbbcb4196d5b27cb7a44ec2e1ff1485c3bcc54cdf169ccbe463afbfab2c4bd82fcc35a145a3e8369d958a7e5d4b46261765ab140e97bcf625637d1593d144d5bc5f543f5308f887d4797978775daba587afdfbcf617a67e9f4de3e698bab488c0df2dec70af115d5896ca5d8703abefd9b2806d26f413e8fd9d35467cfb8a46984b786678a5a558da65c4d652c81d7469666d0c217300b9be92c74b791f5630345c2f7783f7889eca38a8faf20c7075ec46c6caeb3715252af4cddcaf4728cf42d7d09b3b485ced22929c5a67ba4c74e87caee868cd797316b5beaacdd3369bcd2f68c53f799bf82d168a5a33122ad92529520f05bc3459a5a757aa5c7ab9805ad75164c74599057bf3b40fcc73e9de976a5fc7cc112916a1379f0c29443f062e76b989d6d52a9d3c46b3141d8a2fa23ed3e57dbe2f1e20a7fa65cd4f377b304aef36457e652ebeb98d55be9ac1ee5c36abb566ddb5a9382b56a37092fd6bc8159d35667cd90a4d6281d9ce92cd3f5b33731addba5d2a649556b253bf894f516665f7b9d7d833de720310b3317276f633a6fadd379b28f74314b485f55dfa7137c1ef00e666b079dad737dd86a8fd278b3325d1ee9b4f0dec54874d491d8016de1c5aff36aa8fea0f7308b3ae92c9a835a14dfb795b8be9d4acfb3f7dee9f47dfc7d8c43671d87411e38a838555f89cc54cdf1034ce32e3a8dfb27ad47c766579489ab7cf66166f2ca0f314dbbea341d89b28df77477fdb644ccdd55b93c457af908b3a59bce16f78c63ac553ad1b016e9c79895dbe8acdccd733e67d7f5e2efc6cf48531facc5e3335eca5831fecd5b3a5e6cfe04b3795b9dcdfd5c311b0b933a356dc6f4ec8eb518b136ac5be7c952e754fb00d21d57f914b3a087ce82f9f5f589cc8f07aa9efc443302a007a69af2d43b5ea87c8651d94e47c53da34785e82557895986a5b8cce4269f6396f5d459b67703c7b797784e37057c8111c94ea56fd36b5dcb7fef56fa71ff256669af54722bbb27c48ec15a3066657b4121cb4f629f2e27e36f79b1e02bcc82de58eb5b1fa6979409edc3ae672a86bec6eceba3b36f270fe5c9eca4e509e57caa6f30bbfaeaec2a64ce56abb79e55fd17c03355d3ff16b3a49fce923c5f96383ffd9d392ffb0eb3a1bfce867cdf36c0af7e67ce8aef312b0664aeb79e8f9ece917329785ae14f67ce821f300ba2a9f4e7a66e01bc3799393fd19d396b7ec4ac1998ca3828c558522c0fcc54eaff09b37110d616cbc48c9671d631f11891bb972e93eb2d7ec66c1e8c8db5248ed7d8a7afddf6a84f8fe371857d363b51fca6d702fd05b37a483af316ec9ac66cebe1c5ccee4f8cf5b9fa1fff4dafedfa2b66e1d0546a837ac2e9b55d93a7c666d6bf48447c815c48b16781ac12eff09e8a1cfe95b3486e7d7a1b56df0a19e668b1c4aef3f0575ab1c1f3bae2faf6466c37745442237bea8af81910e160d5869c91a5ccbd21c67821bf42e647ca5b870942f6da39defb3eac7e14c8bda33c6685aee5350cb4bda075c96d5a806cd51189349316295916e9819cf49666690e8fd5ed64ac36cae15dca606ccb9b3725d7229787d658ef435de2c8c2d4a1d3dd16a0eab911be23e04211cc4cd1018b2f4c4d1ab2fbcb85ee90870a01aa8f22a9b839200bd089eb26dccd1e76aa66f69499772d99cdb21ae5f218194e898d6f663341d48daa2c70f69a0b55e660006b428190f7512a84232811b6b34e54b57f8aa880700125a2bb80573567b015a1007653f318b03c4a601d45525dc872596c354498c1b56b1503974f096e6b0d382eb0d27a894f0ead13574b43016d118b412ba0f63667f29cc4f8ac267bdd8d9a7d6e7b5d18c0455bc7c0155282eb2ceaa33529170b6180773a28144652c26b0592ea0cc7a840183075ef1ec3348a12530b8029b664380c8836748e21da9e12515381a826547954933631383b50c2e96a9dcca8aff3abc9177617da2c91e9d731be109567f33365175f1800de0612e08e94009b8304c8d5e4f351c200e8c5f63140a3a973a819620038b6255f386a5807021fda29281f522bbfc300e8fc0e31403b53026a0600d92a8401cfa6de313cbb50e2e1fbc0ab1afa44b656585d575fade4ab864a45a573964880a52239565801860122ff5110c750426c0d7cccbd78230ca05a0f8a811a4b098a7f6c0a7a19ef2ae43b2395d57fbba234e48d9c8ea0f3701c25ca36b26c5409739dac79d943c7614075362823c707d50bc11bd5706e986a5887a986ff47b318b809d4bd10101cdc5e64ace897e04363b18d54c200ef40d0613831a84221b65b86bd474f1840dd066af993a8fbf0a789e4b7c2b5f9235f28542d420a03b0458d62c02607dbabea9ced5a1ab2fcac020c7e4ca1efc3e755890922e83057343665c5a01551426b09f231b816310c90aafac720ed4a9d24278afa7e9d083c368532b665718d55d12db7c20b03b8cdc0bb76a304b715c8cbc23a9cc6e700295853e9076fed7916ab849870379646032f9b46dd553dcb82369ea5bedb7b18006e102d8166592ee1ee0523e94f95f2461d9fd4d596d90dff2a71b55656521c93bcf8dc27e3349f0e276945d3ee2d8b26cde7a2294f30887a1e1c8ea639d3289a52d53ceab35727ea61fa58d45316184db9c217f5548047d3ca4fa29efa21a29e6af9d1942642453dcdfe897a6efeeb74c6e77b44e34657a309dbcc51ed7859543b02124506b7a309e6064491e1a66892aeb6685a03a151cdc04414ad6b3bc9b8bb98633395f5338c73f94ce519ffc72711e7f249c4333904fe113afe63d73b76a7ae77f058b3e78cf3b220f1cea8c3add2dfa543f7381d9cdf7354f50b9d362d1c3590ad5231309d5a485f30b167964938478412e75c8073b64938f34289731dc0596c12cefc50e2bc18e09c43dd2dbc50e6894eac7609cb1f23c3d79e0adf672c866f6e10deb80cf547a8fe4256c00ae970b6a6c2792dc0b9874938f34389f30c80734f93708e0c25ce8f00cebd4cc259184a9c4f029c7b9b8473782871ce0038e79984332f9438eb00cef926e11c114a9c8b01ce059438b7933897c84e0ede7795fa9ea2b97468bb4688d07e01d0ee433d7f28518bc899871684b03a7f09680d2da444d949e3a5f128ed9da1087d328b0ae47fc02717514f41551da9a976c6f3e7abc5b3e16baf8f05604be83701b0c1eabe3410e656fb8f00e2624a883d191ce2487d882fcc1eda13c05dd290c51114c70b243294cda8506e038aa3524a946d25cac2e0bbe6b6a182772bf0c3b220e08d0a1e1e99e73d07e02da584d7254945c8998849bbe1c860fe05602e3309e6c810c2fc1bc05c6e12ccfc10c2fc09c02c37092661e3910ce6cf00e6be26c11c1142981f02982b4c824938c84b06f35b00b3c22498845d1b6430df0330579a04338c2d9cf701cc4a93608e0a21cc7f00cc5526c1dc3e8430ff0530ab28610e92302bac872ac4514d55869b2e7bdb9c99b4d3b80315f2134077c77ef46be0968bd9bff66ce465025ef83adb5a032fad6ec8ce36e7e71e08bd6f3d15ca8b80f7d550a21c1097e0ed6f1b4c62ea8bf0e3acffdc3b578beee03a96683f7352d864b9ebae00766d107e9b5a51154694dd41165017c4c83acc0252fd261f29da63a8d08e065eba9ada4bc78ac556abe41213be3d3d1f1faa94cbced4c21b7b3953f80aaa26c04bd704b1b1ef70ebff4a19788928df031ab5244be88700846b834038728b43781740b82ea8d1f3d8aab01a66af590cf714843b00c4fd4d5a81413a6f930c673e28640e300927e94443329c7b039c079a8493741a2c19cec301cef526e1241d0a26c37905c07950d095f5d4a7c1128e18914d83ad06680f0eba6c87abbbc35cb67f09caf6438298000b218e67ce85f06106f9030079a83993b2091336d96ccd6340c23e2c9825aab95bd054ae8f81271e6ece7ccc308e09e5014f3c2208947056fb5436834d969b922cb55e5a1b44fe48867235f0ca23e9c72ae128cf42ab9ac3d18d135b96ac90a22659c7324b44dc1e752198eada06c03c2a885a65add83aa9a6be4ea9f6735147dd000669e14386f61c80f6e820c6d4535d0648987f922d02dc11c0dc60124cc2d91e6430470198c798049370ee2619cc1100e6b126c1249c554c06330a601e67124cc2f9ee6430470298c79b04338cabd00b00cc134c82493877930c666f00f3449360124e352083d915c03cc9249884f3ddc9600e00304f360926610b880c661f00f3144a98d92cf19045f249af84e53bd9a4d7dd419fd2a90d3969db3dc046988b92f5baf707be7a9a493009cb7732983900e6e941f4bbf3deced562e63bdf7e3ba0b94664f83a037c6750e2eb06f0c5cf25e6c262db9e8479206313007a6610f3df38d02d6bfedbc100e15941202cdce2106e0f109e1d54aee8dc583ecce3e26f037ce7985d9b24ec1426ab4d9e0c6a93e706b96aaddc7aad523cce3fb20071d6b064338fa6b272598522ac269d4735efa816203f2fa87947b1416138ae499e2d900db31d04b285f3cd590f14c66d287600282f08aade99ec5b35612eb20a01d00b4dda097654283be77e05382f3209674128715e09705e6c124ed2ad52c8709e00705e6212ce91a1c4f926c079a949380b4389f33e80f3329370927ee98a0ce71480f3729370927e9a890ce72a80f30a9370927e388c0ce73c80f34aea8a7c6a9fe09c2554e31f0125acc81751011d0e805e15c48eb00df0a52bb2bd105600781b29e16dcb52dd66c2b9e70ce17ca44fa9a01e05fa8eae36112a61070819d42301d46b4c844a38a7930cea2e00eab52642252ce1c9a01602a8d799089570be1219d4e100eaf52642251ce420833a0440bdc144a884b395c8a04601d41bcddd0c80d05fc936035806d0de4489368f619f1b536be1c6b3d817ce6d439cdf4b9fcef8b0c81a11c40af001fb62d15850032b84fe9d43e5df3c2dab48b8d99c95c761fc84c450e0cfb704b306be01be054386ef77e089b79abb409670fe32d9c8fd0b00ed6de66c3a4dba1718999fae03306f37096618bf1473148079874930c3f8a5985a00f34e936086718ace1a00f32e936086f14b31cb00ccbb4d8219c62fc52c0730ef3109661877e69e0660de6b12cc307e29663a80799f4930c3f8a598a301ccfb4d8219c65dc13600980f98bda4218c5f85e90eba3e1ea4c4db46e2b53758ab10ad785b7639e5ae6064df6067c02f1f6a98eee554ba3dc2b82b5801f0c987839a633f4d74c0ad7075184fb05eab162186798e7d37e0ab8f5002dd2a6122afa143d7920a5d2380ee514a74fd9873c917e750270a9cd2ff1305d14a90e81f0b0b68c2aa3e19e80301e8c71b723158f8b715ea00328727821837ca675bd21e0e3301be27cdf8b6963d9c5c253cd61e2826f5cc0fa8d05e0812f926933e2c41da3d42e6a9bd00cea74cc23922943867019c4f9b84332f9438ab00ce674cc249fad56c329ce7029ccf52e2ecc3e297784f646b199f7557c7d4aa9019d6eba5a2d6394b80b5bf5858114c9394ecb3135b83b2ff399356338d0ae5a6c07f009ccf9b84b320943837029c2f9884333f94384f04385f3409e7c850e27c17e07cc9249c85a1c4f910c0f9b2493849e73291e12c02385f3109675e2871ee0770be6a12ce11a1c4391fe07ccd9c2fc711ce0025abc25f0bda49af07354c375bb477ea2cc96319ff7afb5cb98ebe542cad09f7e7211700df7cc39c151d619c69d70ff8e69b414cc151bb2bdb3b3b2c169d20eaa1b06fca5a02fcf2ad207676d8923e10391ac07bdbdcc531846539d93c914b00da7782f0cb91c1fb25d908d16d00debb41c0db3e7878649ef73c80f71e7df1b25cb3efe76c8bc912b6442ab4546c1bc43b85c357ed690560be6fee4c3ac2a10c323fcd05d5a00f829c54530526cb14c54dacd9f256c4ef0f407f1816d084131bc840af00a03f32672beb302eed1a08f2dd8fcd987e532c6a0495a240e3e256d2a225dbceed78e0a59f9834224fba0684ac863006e0dc6c12ce11a1c4b92fc0f9a94938f34289f34480f3339370e68712e73500e7e74174dda5d60b3a22944b110f0330bf30096628972202985f9a04338c9bb12c0730bf3209661837635903607e6d12cc306ec6b210c0fcc6249861dc8c651180f9ad4930c3d8625f00607e6712cc300e11ef03607e6f12cc306ec6320fc0fcc1249861dc8c653e80f9a3490d4ad26162b206e52080f327937092568fc870ee0170fe6c124ed2f99d64380f02387f310927e95203329c97019cbf9abbeb37215ab2a1b78301dadf82f8bc7901dbd23e6f7e1e8b21fc3d88a585c987dcc633f78af7b196d06a31a84c3a44bc89ca4f4f057efa873953bc09933cd914ef3300ca3f2951f660ce690d657219ec0ca616bfe268097d940cec9e00ec5f41ec6aa7c05688a964b5424c6c3259a23654189ba39300debf1b729648609f51594f85f24f5064fd4389b2974059643d344b00e37b86ad96afc7bc75a1fcdc39df9b6989f5b77d7f92752cb3c4126e244856636d0100ff1bccc7270a5cc55698ab54bf017cff3367d14c1873cd0e20d7fc8f1265c7242895a5a4734173a8ea9fe7008cacb1d13bd6128e2891ed5f3715e08d50e2f5b7a086708203d974f137405eda8812adca00b06a532c03a0fc32175506f03f80b1312546bea7f24cd96da7161d1609cfe4c93e7c55a176005c9320fc2fb7de074b45d788bde352d8f755bc1360cca2c4c80570601344c00dfa59f3a95430f300cca6943055fd3237412b3ddcbd9f4f0194cd2851aa0ee4fc2dae03792940d89c12a1ea90e3de385194d1754289a9d62b4b44229fc1d6882ee36a56232a48552ccc7b2fe403b02d28c1f232aec87ab4523cc29335ac98f3255c84dba46753e16b0ff0b50c22974c6d595618e7724e06285b51a2540bb3f383ef0d224bc6d5005e6b4a78deb79524ecca20db2de97b80b38d49380b4289f32280732b9370926ed44b86f30880b3ad4938478612e72b00673b9370168612e72d00677b9370926ec14f867302c0b9b5493849f78c27c3b912e0ec60124ed229db6438f702383b52371f170aafdb92be04330ee0eb148437a63ee39db0094986737b3044d6d9249ca4ab2bc97096009c5d4cc299174a9c47039c5d4dc2991f4a9c57029cdd2871361702caac62c71ee9e192c337f3b229286ab60962fa407a0b04085754922d10580d3c715b4ab403587c27b0736e863dab7da5f89b0f5fd409911385ef72b38a05b500266b4da0f2e361c08fbb0751e31c2eaae75b4a47f1a7005f8f20062c525b2440d8f621cb51d78364bf5d10c3ba7c4c7232e3e38c7c34729918d8ad0ef5e86315f0c69e0de98dcee1b330ee78340278633625ca4e8c4fbee2c5492953b3d4b129308443ba64c9ba39f0c95ee6ceb30ce3b6bc6702b4bda92768a53e5a9e17ca8da49e0030fb9804338c930f5e0530fb9a04338c1b493d0660f63309661837927a1cc0ec6f12cc306e24f5308039c0249861dc48ea5100336a12cc30ae41bb1fc01c6812cc306e24f5008039c82498616c58be06600e36096618b7d27d0bc01c62f61a49c23611d91ac9e9a0136428752748f2decd4231c798b038caa202790100398c12e420e6dca7a31c5d2250c3928d234d15dd28c41b4e9c47358a540690e75022efa5f15dbb0399f72d55b25dc5a85155c2d94a8480c9e62a3506796fae396b35c2d8c21f0a500e3769165d0165ad80cc336f043847988493f44b1a6438cf0738f34cc239329438bf0138f34dc259184a9c2f029c0526e124ddbb830ce71e0067a14938491ba864380f0338479a8493f4d3396438cb00ce519438f989da12257c03c36d01a6ed4df2ba5194c31c645ef70bc0b98349380b4289f3628073479370e68712e7b100e76893708e0c25ced701ce9d4cc259184a9cb7039c3b9b84737828714e043877310927e90406329c9500e7189370927e588c0ce7de00e7584a9cdd9973988373a813ed03f726e4eec559843ded64d3bab7054319e38218868b8d1e255a644006926c2ef25a0072bc2920c3f8dd817200720225c8fe2e908b59fce4edd4a77913a2266bcb9f05504f0c6259cc28b6a5ed76782f28962605b10441796b8df03f5e284d92f0cab6b08c6036f0cec9e6ac380ae3cce40100e5147317ca10ce6322cb436f02194051107b210e77f96a00b92719bc9d00bc5dcd9e634738ed9b6c8e5d1148f6bb05d104851b43eb9278b8cbfaa781b74ea5c4d9d755d65730b88658ff91bcc9f2e5c03ee714a5c2bc03f0da69e64cfe0ae31ce6dd80c74e0f227f551ecb137ea96bedf196d779d20e78ea0c93b60922ed8026c3d91be09c69124ed21e53329cc500e7ee26e124edcf27c3590370ce320927e9d03219cef301ced9260d8f1450ae8a271b1eb90e94f4c526e124ddb18e0ce7d900e71c93708e0c25cecd00e75c9370168612e73300e71e26e124dd8b960ce7ee00e79e26e124dda0850ce7fe00e75e26e124ddda970ce71280736f73b60124ecab271b51ba1ad439e751a28c6d48d900bdf564ddc99f004f9c1fc450070f78a9f04325bb523e12beaeb80880b72088f94b78ae08bb88c75a62aac5600769175c4184086b2390a4f7a1c4da9ec586dfaac0f85040831a6489fa2be0970b1b7e1f86f04e001b083c71912920c338ef636b00b2c4149084c3bf6420e700908b4d0149d8574906720600b9c4149084f390c8402e05204b4d0149b8ab0719c8c50064992920095bd764202b01c8a5a6800c63dbba02805c660a48c2391b6420eb00c8e5a68024dc0d910ce47e0064b939f387c3b819ef7600e5be9428bd6d2c5910cadde05b03982b4c8219c6edcd9a01981526c10ce332815600e64a93608631cf6c0c60569a04338c1b98670198ab4c8219c60dcc1980596512cc306e601e0130f7a31e148b7d1db04802e59bf0f22d75f96b64f0c8d6fff0d9850a5e3525bc1eccbd2e4dbf8aa2588ce370b44b85b095b47de8c75081ad00606b28c1f661eea52af6ea9fd8a2542e900f8f254efc61cc47a780a45f1be496143650be1e88670413b4edf6f06e687e1ac05a67cefa9f30164efd4036b03a8875bfb00b24f51c96102d590e7b28f0d2354126fe724b89b98c7fc0b18eb997fc07b6f86f3d15d6f300d6b541cc312a087e82165972bf0624f7754154ec53ebf11c1eca8fe94c039eb8bf4930c3b81075268079804930c3d8813c1ec03cd0249861fc9ce8440073bd4930c3d81b3f16c03cc8249861ec8d1f07601e6c12cc30f6c6ef04601e6212cc30f6c6ef0c601e6a12cc30f6228d04300f330966183b3c460198879bb4489fb408225ba49f03701e6112ce11a1c4b917c079a4493849bfb74e86f31080f3289370e68712e7e500e7d141ac8ee4130b57839ecc40165291e11bc362f83698b34e378c0b574e079e780c25ca8e8c7f8aa944eeefce45555a8f2fb71e5f25062ff61763ebe5e22c7c1e99053cf2584a8c3d596cfb477b5472a1a56e8da5ce12c1834f5a18cbf84e707c24a8c412c0f3ca52a6d6f8d68610ee2c00f73873927b18276a5f0792fbf1418c52a6b73b31614e4a36c1e602e0a52750e7a489bc54594a3a2ac99b2b2418cf061e7a2225c66c0d466ffb1413761b93ad41df0de03dc9dc0c80306f25cb005e0219c0c994687b09b453847fce627c0a42992cf94b852835056c858800eec74bacbf6df193ac639925b63484f5809600f02941e4b0d86ca5f1c263893f4532962a876d03b2805383e80585755555f18f3505c25d37ed047cf2b420a6d54298c9b380f0821d0fc09e4e09567d30278f6d691fcc390b203cc39cd99d619c073209a03c9312656f0f2867b32a21a496cdb0fe529d2735b4c5d278aa62692b502c9d4589b81b73cef2ac123d4fcb13fa6c18473b8f0040cf0ea2cf3ef5cf8713e224db1cf23b90059c63124ed2957164382f0438cf3509677e28711e0e709e6712ce91a1c4f932c079be49380b4389f36680f302937092ce6322c3b90bc079a14938f34289b31ce0bcc8249c234289734f80f3e2205aeeb9e2b77de463a1b399dd3d12dece8f8500e125412f2684832079d66fde3a2aa93f165bc25630be329eb455d495aa99b904b48a2e356730398cbbc71e00505e66ceae5f615c1a330ca0bc3ca83cd3ee63e282d6cafc3280dece4fa910de0df2cc2b82181de208cbea770951b7c3de69fc20c07865b003c45bfad756bb00b457993bf64e88966cecfd6480766310f9e7882d6eb4a82f407875107392f9e71d029f934c36b1663b80ef9a60f0e5bb2a4561c6f739c077ad391ba58d08e568e56500e67526c10c63d5fc7200f37a93608671d5fae900e60d26c10ce3aaf54b01cc1b4d8219c655eba70298379904338cabd64f03306f36096618e7711c0360de6212cc30ae5a3f05c0bcd5249861dcb7eb0a00f33693608671dfaeeb01ccdbcd5ef84298f0c91a987d400ffb1d41740f0faff7d752d1ab69cfce0cfbd2eb7b8097de69d2587901650e4a36567e03c079974938f34389f35c80f36e93708e0c25ceaf01ce7b4cc259184a9ccf029cf79a849374bd2519ceb900e77d26e1cc0b25ce0300cefb4dc249da3622c3590a703e408953edae3d22f8d120b2b6d0be00de83412cb7e273392630be174d95d5e2299395767b91559910582204c05d6a6a5898a718f602881f3269472fd209086438b341f3f261937092f67992e19c00703e62124ed219ee643857019c8f9a849374b11519ce3301cec74caa2a917e0b93acaa7435288a1e370927e9e69264384f02389f3009e7c850e2fc00e07cd2249c85a1c4f908c0b9c9249ca4db4693e19c0a703e65124ed27d8ec970d6009c4f9b849374861219ce7d00ce6728710e64ee3d3d785bbed4e2c1970b283b636b34b0c1e3b1d65fd562bc937489c1871122e01b41cdf4594ae09d58e21179e8bb84a3f1646bdb5a0290cf9902328c3bceb600209f370524e104063290d9202f7dc11490615cb6da11807cd1149061dc3bfe5000f225534012ce3d26033918807cd9149084f54d32904d4061f38a292009d76990813c1e78e4aba680245c3d4406b239f0c8d74c0149b8a68d0c645300f2754a90b9ccd994ac43174be36bd6c75b4facb4f45925ceb8a901352c3751352c4f01f8df0862aa77aa2348846d22b2f1a31e00e69b26c1246ca993c1ec0960be6512cc308e6cb60530df360926618b9d0c667b00f31d936012b691c860760430df35092661cb9deeab0500e67b26c1246c2b91c1ec0c60be6f12cc307e19b30b80f981493009db4c6430bb02981f9a0493b0254f06b31b80f911254cfc4b2f93acdfe5ccfea023df87930b0eff975ee6b018d88f29c1761760a75a0f2c11d3b9e1d2d606fb5a16d982d76600eb279458bdedce19c65d6bfa83a4bfd9dc8dfb08cb7bb28dfbae025efaa9d9abde095b4d6499c064e0b99f51e2ed000aadd5a250e24b66ecaf0f07b4e67d3d15c445c0473f0f6252182cf9b1e28abcbc27f3c91e00e71741e4a6f1493e95fc348cdba00e06c9fd4b4ab4ed81a756b9fc32ccdb50be037cf3ab202a4dd8709db3d214c63dc00601945f07d15e4aa7d24438e04196c88f0360bf31156c183fe07c2400fbada96009b30232b03b03b0df990a96b07a4f06361780fdde54b084437764608700b03f980a368c35d46d00d81f4d054bd83d4d06f64000f62753c1120ea290815d0bc0fe6c2ad83076fd1503b0bf980a96b0bb9a0cec6c00f6574ab0ea531405ac01bee441866f3dc0f79b397d0061dc20785780f27793f61d21ddf18e6ca47447d0bdf787493849b76823c3590a70fe69124ed20d04c9701e0b70fe65124ed2bd6cc9705e0570fedd909377dc5dd161fcbac7a500e63f26c10ce307298e0330ff350966183f48719280d92ccb257c529cf0f1224fe3b9da1216db8272189bccf80a237b93ca25d6f954d1c6a9658b2c1cf3ac7fde626081f54f773d22f6199d68b586abc4552eaf54c85e69dde59ad5b05cbe8ef57fdc219a4a87888a3aee588b79adf5cc2c5626425fc766337b8bcd19d66f35a9ad4e20898afdf3675ad7ea189f8ec143a8b43459ceaa85c5ce2d38a391e68293fd19566e17071895baaa4fb316c9da75b9657389d0a4da7aa68908c72e29a29136e04ccd5b28126d43ae058fa08818f454fa4c13b6945836a8cf62abb77278df61a4d0fa65b73287d5b72f87c975612be599ba9e5c268f91c4d2fee3d823fa745891315f4a6691edfefcfda5621e5d99905a94d4d2e4f6e17ed93a41ace40ce571b125dbcfac9856a94db86997482bebaf3956ccdbc2f98773abadbfb952b3ca1ab1acff073d929d96c2a70300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/5d99c04f17c9f9a42bdd7a08554a0eef.asset.meta b/Assets/SerializedUdonPrograms/5d99c04f17c9f9a42bdd7a08554a0eef.asset.meta new file mode 100644 index 0000000..828d515 --- /dev/null +++ b/Assets/SerializedUdonPrograms/5d99c04f17c9f9a42bdd7a08554a0eef.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8416aaf4a8544c54d8749bb99db83d70 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/5da22fa35a4f38a45ba4ea99ead71670.asset b/Assets/SerializedUdonPrograms/5da22fa35a4f38a45ba4ea99ead71670.asset index 4be00c9..94be726 100644 --- a/Assets/SerializedUdonPrograms/5da22fa35a4f38a45ba4ea99ead71670.asset +++ b/Assets/SerializedUdonPrograms/5da22fa35a4f38a45ba4ea99ead71670.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed595953134110ee09594240443cc0b3d427b110773dca77c40bcbab80f0625931c2c68a95042a0916fe005ffc3f3ef80bfc43beebd73dbb61d99ddd25caa085ec566676ae9eeeaf8fe981824b78d40d14abb4440b74932ab44e1bd4c6d702ea165edd0afb5f5107f57b94358cdda02b392bf9b9a6cea25c44ab4b3dacdca235d40d195f261fdf8b58eba3c5bd75fc7ccc52452caad0037a492f685a9dc921b12a8bba419f62b9d408cafbf409a3be30c59bb832348d6219235d196b81e970de6b7a2362b530b686351d6a82e63ba1387291d78a4c5239415dc0afcce3fced28e1fc0968d568935c1e54d70780385c990f2e931e2e687e80326fdb83189b206090b022f8f5e80edd364a784e1d8bf0bd20650d331a427438b9c5b7c416cc5c13af1f514f17fd8f45bbaca006466ed233d4bcea2ddd02e0af635456b16d132af66905e5a6d07b0bb69333f3446255c6d72c81a6b6b4167a424037d16e0a87cb527e144e7de17e117d3db1fb362cff3eea6dd92d297b07dfa63d5702c8cc3c9a0d2ead5f9b75a8a6079086b97787d8cc8e34f23734c2d00f0f076e5874d947d49784268e30d441c69140ae69dcd2a17457df6d7225ae2e25101c5cc6a48466fbd678dfa3bb99b2989161755f10097634fc636cf6f3f7afd5bbce6ed1ee90cb66a22ee68896052cd39b5153090ad922384ed16346e3f02b13fc25ee5c3e40f8f5bc86cc1b5c01fa64daad003581e60a3eb6f16b62f23ca6aec992b66418ef29a11b8f099504dee4e199c7621ac00513c023070d707e44c90278a42fd70ec0fc98112ca72098c7431a824326047913d5b08a60057d3af57928a30d392f39ea71eecba7685db8d75970daec10c3e7927e6e091fd9688f42aab918da66a4c704e93949936df19aa695a2492ba3071f38b44736734e2133d29cee5e4ed8f5957933dae3a991219b8734041d03821ebbda7183bbfdc4e394636cb1133825bc4ab1293c14903b60ee15b66f48ab4b2e0f296f80fb078bd702e39c38ae8083777dd1b2294c64dc46eafb9698e649a1830cafafcbed254c764cd2e5cb949e84970289425a409aede9d0497a82b51adc79a9e0b217a8d9dfb4a67c2e2679b7a1bdde68f30e654de085fca90204d88babb2bc8629bd7cfa2f41e343a03713fd392110666bfb700167a39a0730eb129fba78f961178f117f64e9a2b7d74c2ce90f131281b6c1de8680eb4388987f7060fbe7383f19b5ef99848dec84577358f478e8d47f1ef93c8e7ca729720b2e781c28ced8f4e671d154553ca58e29d53eed06048aedf62737aef22e2f77f622caef7bba066eca26705301706b81e5f5f01d251865be4a9e3d28cbb6a07422504edb3e5138c35ec7e016a65a836adc1654c50854676d427535b03a9d97b6c56199891e10e9a0fd34f843e661b3c54204e07336011e155bdc9010be407eff30b006d9982dc88622909db709d944ea11d20ea65803af640b3c45872661f43861bc4091dc6a26d5ca6712b158676e9381dc6decfe5cc20dcfa849bd93c5b9cc8cba47835d6bb269e6a7586c4dfdd433a6afe6bee96b3fd24693a47f92421ecbd08acb37ce432dff25d67ba07631d369b96054a0794ddcc7cdb323ffadeec81ce717c9a14e49a91f0000 serializedProgramBytesString: - serializedSignature: 5cb0d315b2395d42ed0c2a55f4b37a62f1a82e65f00a43bd5dc49e99c4f45abaa83a43ccc69cb3e0d8cd665a2e1faeccd8054b2301e881861989b8141ace0e09 + serializedSignature: f2819f66f4ec8e8a9b1f4e483ee18f9c5b9551796bfd1c571df2715a5833c22883b563a1aac68e15aae3c564bd0463f8c9665540c151c65e62f898d11c343907 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/5f148ea27a961e1418c15d8eeed35976.asset b/Assets/SerializedUdonPrograms/5f148ea27a961e1418c15d8eeed35976.asset new file mode 100644 index 0000000..345272a --- /dev/null +++ b/Assets/SerializedUdonPrograms/5f148ea27a961e1418c15d8eeed35976.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 5f148ea27a961e1418c15d8eeed35976 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e77097e2054a2816a424449096b6b8142d042ad04220015212482314eaeeeeeeee42dddddddddddd7f7d77666772cfeecd73777b9b6733c3fb0f1fb2597bf679bef38c5ba31ce6fcc48639bf16b2796c221bce16b012b696ad71fe9ae81c2b9c7fee99ba3e975539c795ceef62e7de309695e24dfe3328d6ddf93ddd39ab6635ce9bb56cb9732c13f7e7b352e7efe9cebba5ce19bfbac2f95fea3c156be2bcb4804d6273d86cd62dd625858885e2a56a792dc6ed8ab5707e4f601b9cbba54229fe911c71ab9bf36bbe73a75adcab709456cf2d62bb09b32a9c7bcb9d77aa58b923739990d8a2fb1826fe60eea19b3c7697c7aeceff96f2efc6f2ef16f26ff87c5379ec91e6f39b83f75a82bf39a10b93bcdfd33dc6f29d6333e7f81c38e7ef7e239febe5ca6bb42a89ac2de4b18f3c664999cfa7a17f7379ec9bc2de6432b604b2d261d6421efbcb633fa9ef0b197e7fa0cb28762e90c75916007dfa836fb704f7f9b501216c57e158e80bc742371c1b9d29c3ef13f9fc20791c2c8fd952b6f34ca74be5b521f2d83b855e43ddf7d86816f759e79b8d2be5f93079dc4a1e874bdd46495d5f04e7617551619a23658e94df7849735d3dcfefbf2ccf73e571842fbcf2e473afc8f3fc34f549c7ff944ea3e5375e05e70ec7264b93c852e13ec617ee63e4bb27ba1c9bdce1b307f89f566e8194f75a06766cedb3636b5797a6d9dee752eaa0e4174a39db48b9af83732ef7d480b63591ef6d94e72359eab4ad5b1af7c6b8725a28d6d2ee669dddebcdc632af2f8f4ea1a70adbb1beb01d2be5964bb9cafe6ddcf398e2dc17c8e1efbfe193bbad4feeb652ae4a23f2d3d453d9b5bd3c4e90c7f1ac2e1e0f55cf6c278fe3e437b763de3440dddf36fe6ed71303724b1646137d61dd5b7e77fb1432d5fb93e4b1659acfab672687d0798a3cb64af39bade4716a886fb6767da1c50f3e5fd83a85cc692edf16354007474ecb7de5f97479dc411e6748fe137c7ea07c28991fa4d265a6d4858130707469d5419ecf92c7d95e5d9cd2a457a737eb4fa7d83829f32d70ce8fe3e5f5b7c139d775aefb9d568f489973e571479fcef3e874764ac1e2bdb66d806fa4f35e32ff2a72ed6b9debca6e5d24af2ff0e93625ae778b49e05da5473af16127c962928ff124a98362bbb3efb977c0393f4e8c7f4ffcedbcdb46f9564f709dbffb2e38e7f717a6a9ebae2cd167b99c29e0db53e4b765fadf4685e7229618f774eff223488f62325eb491f6b2c52c311f53cf71dbde03e7fcfe2e69dab69b463fe7bb6dc725797777e64d7f26c5fda1b92aa72f91fa4c65deb825ed17f502f94eac5c5e5bea9eb757ba14cb77a6012ed35cfddaa9fc74993cae60fa7cb6047090f1d1a92dd67dbb97ca7f9727f956897c66a5cfeea2b89cd6dda5ee2a1d5379d910e4597ead4c1e2be45195cdd7c69f1da6d268c5688dd46d3af3a4cd6c35b8ce8f3bc8fbef8373fedc1e71d95d9e90d7f6f4e9aa0bcf2a9fedba3420999f55bbcf765f2ccf6b5cb6edeff1c92d66c9fdb6d695335cf158e7cae9d024a09cbd5c3939aa0cb4c13defa0f4592f8f7bcbe33e92e30ce649cb990c9fd84ce03733c035feec073ebea9744bc6717f57cfbaf2fd01f278a03c8e07b2bb4a3d66c5c3aaaeccb71fb8c7cfc7017ba17dc97439481edba6b0a71b788e1f0f0e617fb27bcde4f13069db6ce6adf3cc767d65b35e49641dceb47eda49d5978f70ef7754fe7124b0897f634e9c759d2f1d25efcd05764bbf8aed08ae1d2aafcd8b5f8bc9720f3bda173e1ffaee1f0364e8ee1f0b74d0dd3f4e5effc8d5bd93b2eb789f2d7bfb74dd9179d2197642a2adb11d7ddffe384058ca7c3436df1796f365b87c9144d649fab0ecfc873c3fd91796a7f8c212a4d975f6cb7a5d6c01083799e7c460794285ef4e80832a239d8684a5ba7f3a90abbb7f06d04177ff4c6f587651d7cf42c212ea0fc3f2ec445bc533f0dbaa5e9a2c2c55dbdb39f2a82bf79e278f43a4dc4fd3907bbe3cee91446e4f9fdccfd2907ba13c5e9044ee4588be997c4ff9ba6aabd999797d9d9f3b7edbf59524b22e665a5fefa6c2e712e6f575d586a77c5d9517a17f5c26efed1a0f7fc1825f5bc4127d7d31f0935de4bdcbc133d057d5fd2b805cddfd2b810ebafb57318faf771f27af5fcdf4be0ef587be7e4da2ade219f8ed0fd208cb6b7d9c15dfdd98b79eb39b1b3eddfde59f1a963c6fbcce959f73a03cbf5ecadb5dcaff1c9cf3e312df7797b8dfed21dbbf36ef2ce5b491d787b9d77ba83e861b98b6bcd5a3c8f7dc8dcc5b9ebad9c7ff169faf14c7fdadce969bc03d68db32e62d93c836c2d8721056cbc0355d992b15d75be5f1361fbfa552de17e09c3f7707d05fd978bb3c1e14bfd7719a2f7cdb003deed4fb8ad0158459e03292b2f9ae14360749934a98374d2a71fda067b2f6d9fbe433c72679e601797c501eef97f24b99b7fe522aef3f24cf57f8eeaf90f72f88b3ef9a05f450b2f93b5fa661bf6a7f78541e1f96df59c9bc6d62aa4ea8cb23322dc7667a4fd65363abbcfe23ce9d70e8adeac6ca1741fcd1ca7d4c1e1f97471906b1321f03558f4dd69e95ea5b49ec8aad66de360459d765b2fe1adb43deff4a9e57f89e57f5eb27e579b9eff9b5bee7d7cae79f92e76bbccfb3a7811c7efe4cdcb6982a8b3c0baec93a3b7b2ecea7cfb5f25ea5f7dbec79e6addfa93adc9ef2b9afc17b9081ba2fd3e35895cfa66a79fe2d38e7c71a9f5c55cf7fd2775fc9adf5e9abda07545fdd4b711bf3fa8377004ff6a25766529f7e46ca5827dff90e9c3b3edd2759f95fbdbb973cae9732be07e78e8cac2c57dfac025c566c838fdf5ee03a3faaf2cd0fe09ccb3e32897ecfca67f7f1d9b68f7cf79134de55ed0ffbf96cdb4fcaf8c7b5ad6f8724b254b9f2555f182a9fe5f20ed084ab6a7b50e9c0fe52871fc1b9a3435f598663af31bd6fefeb7bff27effb5baa3e41d9c7c8def0e97620f3b68529df54f9a7c627996a5755ba1f147fa64ebf377dfa1de4d3fb60f9dd9f811eea3a3f1ec2bc79d421f27dd50e7da8efbeac536bfbda93c5918ef2fdc3a4bc5fc0791377c80397d54f8d05906dc54c957dd3cdbb3e90c70fe5f1d0f87b1d5598c87278ff3f92c8f1eb7db84fefc3a5de7748bd557f976a3750759a74f55675335517d3e9fdb97b3e303b891cbfde47f8f43ec2d5bb7fa564a0fc5ea551aadc91aede2abff93a89dedfb8e7832a93c8517aabb4eb48e6cd1b541af57d5c7ebee2f09d6bd38049eef5012aad506122e33a5371f628e62d1b1c95c466c991c9f8535767fed077ff1716afe36136fa65e58790a578fd2a8fbfc9e3eff2a8ea4c5da48d47336f3aa0daea74e125df51e32262c7306f9a778ccb7b906aa354f1e8cf3438fe9582e3df01382a5918c77464f9e20bfb2785cc7f03c8fc4ff26a24cfff27cf9bc4f914a8bec2a6be67c058b498cadf8f8dbf57b8545e63f21803cff0a3ac1bc5549be9cfe01c09f7580b9f0eadc0f7647a166be9867db6ac4b6727c9ff6327306f1c96edae09be79bc7cee57eff5ba7add894c3f164bb5bb9e24efffe6955f775dc5894ebef74f66def2d0c9ae6d83cf4c62d3f1f2780af3f6699e22df7dc2e53258a5a7feb8a4defbc9fbde10d5572cfbc863aacf5cd9723af3a659aafdd51fd79ce310a97f4cf665c4da797d2481bf92fdb34fb62e6d50f9caa9c03f1593d3c0b5d3a45d3f78bf55c7e134f9cd17803c10a7ebee7fe8bb9f4e9c1e2fdf398379eb9867b83a0d95fddf43553b797bf9deb8b8fedab0efe893afdab0ff00e7fcbea66f34b6993c76f1caf0946355bfe959f1f7ebca822adc3bc7ef8d5c2aaf7500eff1a3f2f3712c753f99ee9aac5bc6cef6f13bdbe5374cb61f0e7bc5c76f4d0a7ef2b9d839e039f5ad7381efa8b2eb79e0dab9e01a3f9e2f75fb139c3bba0dcff5c9bd403ef717f8363f5e28afff0dcea17f5ee4f5cf3a7997009d2e72bfb9954ac3bbf9be71318b979d1d5e5ba974a63db8df12e8a9ae2919b0ed772d38f2ebb2ce34ec0bef37538581365c2e65de745a96e76397f9c2ff32c95886ff7055ce52ed27eb5284bf922bc716c42e67de360ed90e1feb01e4f1fbff06b4e70a9f3d57f8bedb83a5acdbc7d4b8f8eb83f36472fc4b4c8ded51edffff03e7fc7825087f59968a5d0daea97e856be4fbfff97cf45af0ecb5e0597ebc8e79db42af73c36ec4173ed9eabdebdde77951a5ee9c1fd538c71be4fd983c5771f446a0c30de01a3fde24df6904ce1d1d72657d60c403c8b76e96ef3506e7f09bb7c8fb4dc039b7adc6f7fc46f95c5370ae184339cd7c72fc7add0a6c546df0b7a7f075c9b5aeac712d8b97611c7d7273bd36a592a7bd26cb4331397f22769b8f9bec27107947a66dec1475967a2cbfc76e67deb82efb376277306fda75871bb6f9ab5cfe052a2d90734e62fde451c5ad01f27817f3e4a1753e780ff089bbe4310b5c93fd2db1bee0da407904e3ca46a97e1995867e97c2af06cb7baa0d6d685cd66865939ca3a1c699c58620b6dccebcfadfc9bce9f19df27837f3b6fddd0d740565e0b4d367156feff585d1bd6e1815f6f73dd7d87dae5173d7ce42d94654978faa6f04d141ce1b8adde7d341f607155ee97bae99d4a185d44185ef30703fa80e72bc75ec7e9f0ef7bb3a8cecaf7fae514b70ce8f2d33f8b6aa573ce00bdb07e4b7551aae18774ae1974a9e9cab135373751e943ab702e7fcf810f3e46931d9675697b73dccbcf583875dbd461de893f3884f8eaa8faa74f751f9fdd6bef71e0576f1fb6ddc701d75aacf9e14766b59a86fab34beaf3c66c9e363cc5bdf927d58225de0d73f4822fb71a9afaadb0d95c727583c8ea8e7d4757e7c52de6f07cef951ce578a3de5bbafe43e0dfc5e3da7aef3e333f27e7b70ce8f79f2f8ac4faeea1390ed3f8d92b5f97bae358d89f4601a2b65c5ac92e58842054f0dd39d5eaade4c3db1948b6e264a428ccf30e59fad611b9c574b75b33b1788b9a3354e2e96a79dddd943d4e5d5d7278adfc5ce13654268c746099fb833e1135cb972e75f29989a5aed5c9f2a66b6f2c9a965ce9de16ca673e46f2d6523d822e79f57ca42e7b3e5acd6392b727e570a794b1db5139f4c65129fc6ea7f679e23d39d655be15c51402b9df372a1e17cf17b9dd0b454683fddb95623e6fcae612bd904e7b85e7c2dd1f62ae76fdd378b2432bd8efac9b6d875774aaf0aa6498e355cfb1ce18bff17220d112222dbef28e361931c511a383a2124fe8fa19bc8f04ace742963844016f35ccb6339a21e342f8160701b132dd4fbb7cb7b242b486a8b9e0c0fee9ec2827808df72ceb8b6df9ff8ceb94dbda6e5b31c5185eb95c2b46460b9bc6c51ba0f6242d3a64d72b9a27efc311d7e9135cf8f10bffb5c99782e78003413999f3700c454eb2227559b0b32cf0542f972a19adf9822a1728d54227e3ed779bed8f92c376d92f3578df37f6edd320bae326b84c109619dcb156b2e822b31334e653216608d740126ca3c450d125fb0a5229207598b3a2be24196234aafdd933836f62d51f46a2ccb5f2aea7dbdf198dc3fc6ad5e7bcfad73d6149df4d5274df5e1d34a844f265fc542a8b12e845a451da552e721c9c2a7759d5df1f0e13f7a866d101f4fa50346b0898e60eba87d9cdf5b2ba4143bcf0667c82b3e43fdc9921e603bc40953ab80216caa4198cb11b6d768c59ab6f469c515422437d3054e9b86c9b033736e5e93ebe643d01475ee8e49f3dba0aedd5c474f54919792d253f5c8f94e2636c3b957ec3c5f2a0aa5fc3acce4c68b2fc4eb9ede379293e57d875bf9c96aa9761254fb835a7158cd30e22d34c473b9bf76d6b88148e3fc91a1231e195a62d1ac4bd868d60a93dc35ace4d698e46e6125b7c124770f2bb9ad2eda88969ac591449b78f38bfa6b82f3ee2ac79875a24e5debbcaf6bae491e5d7aa41d5d3617d1258be91a91826984459376bab0e3177bea94f407dde678d0b5c704f70a29b803e66dbdc37a5b474ce52d42aabc1926b84f48c19db0442eab1e12b9ce3ae13c23e3cdc509152fee2f6ec52b07a928a9aa558ec831ddc8ca9f4bd0a939ae5317cce02debc1e0ae98f07ef520bc9b4e384fedfbb3c432f77fce4f82f036b8f0ee98e603349af7ab681448f31e58841b1836c26d8e491e1456724f8de41c91241dc4a2cd38f46dfd53c51292a56c8e5366dc83b98db4eabb6b45032dd74835f6ce738e2b84162a2ea5ee23489e0565d7f101157191b24e66e9f758d05bc1fb4f1a89ac90f7c7648b5ebb05ce75b76f62b2088132f1a5e15a6df817b0e7158b598caf8e592b42bb29d25c30547cdd2c365896de0b4b698669529a3774c9589294a6371665b70a1b65b7d049e65176b8c65773b9aff26ecc5622774cf8ce50fc3b7d744983c8faf76ed0a4617a5d86b84274bfb9f26633bec0eb5ec255573b0ebc4e3a4e91f34c95f38d52e9e4611203de0ddcdb9f9f33f7471f1d4688e8b05d1ad181d22a2c0264e93c89172a789f6f42c185e79df39c22cb44b64444c33dc5654ec90ddd32f16819db5bb402bb3d69418a2c7d75daf08a0d1f5594b2f0d70917bc2526b820a4e07e581c2f0c1bc7fbeb24f3d486af5419b6843500537b5458b5076229ea684d8afa4f2c588a3a08133e4623fc9e46c18467eb847367dd3a1d1f49e2d58331c1dbe8e2180f9a89a23133cbf9bfd67983379d158bd89f2532c3786a90e5c4f532e72f9e610f03cfaf759e707bae83e83904738ab1619d6228166edb6ac2ed9780e1360c13be9d46f8b4c6c1846f8585ddf6bab0e3693dcf3778b16495ccdbbca96196a8e865896123b5a251ae44845cb508d72cb68f93c3ece71c6b9ca7b3443e502eee6589f5ceab445a1b244c8763fa8fd3e9df0ae83f176818e48b3958ba355e936ec502a65bb93ae1bce0338121059f892c9382cf080cdb241d365ed09bec145f78c9b5563c3f5f3840695d59b9a49e32c83c8d5e39a2c9640d6bc80219af2df04136d5e2ef7811857f3bde811ba6e0c5eb13fe8297fad117bca6305ef0ca63a90b5ef5a13d56c0cac712d5a99a44351624512dc0e2c2342c2e4ccf282e14ea7c4eb4a65536a8cfe1316a9e90cd635ef8023f5fc7b2b1bff62f9afb0ad2f0acfad271a818bb5c2df6b370c955f3c494f7ad2c031b57b8f04594d0c78919224e44a939162f4662b9f64c4daebdb169b05c7b94ce65457b685583baec2421210ab79da5735bd1683b328dc0af4f3dfb88b198d522512d9189aa9b74f7111364ab44b659ea5ce7092fbc3f544c7ae5e5a52982778520cfed2b16f55eccc9670b278fda4eccd1476319c01c4d0610a8543d068b42733551e89f8051686b4ced1dc3aabd0da6f63c8ddafb360ba6f6584cf87c8df099cd8309df56279c27cc7ccc4d981ae2769860beea65427193b70ca87ac2725f4d7199a82ba8fa5f89b8b2c1f95dee5c5b2e44648971b56ac040102db7c7d82ed4b0ed1090ed380cc14e21d98ed709e6eeb9733a829374284ed009e6e5af5d1852fee2eb3a062f7f4dc4b02fd260bf3020f64958345f1c369a4fc624ef1656f2144cf2ee61254fc5242f092b799a4e320fc4a59a40e463668204e2744c78b146785140e13b601173992e6d1ac078453f5e4875ab4ff1768d62b64248a972fe5e27f3dc124ffb086ff3289395e620f17c06a6e7729d9eee341e3e2c8a97298a451b1affe21cb63ad0576762e84b34e88f0d887e1626bc5423fc8b80c26763bc56e878754f11ae2562344dfcea08e76a108e73306d56eab4e1a7f1700bf29db918d2551aa4e7b60a867447cc88329d11bcd9c6c5b7b5836cb668f02b965390d6896c3c38c67998067be834e029dbccba82c1dc0c8b05f331a4ab35485f0988b4084b91cbc3a6c80b30b52b748966eb606a2fc4d45e1356ed9d749279a9632d434a1dbc952678a96367ec3b7b62dfa9cae83bbbe8bec349558725b52b16c0359a001ed72658002fc284d76a84ef1b50f8624cf83a8df047020adf0d13be974678afb6c184ef8e095faf115e1250f8124cf8068df033030a5f8a09df5b23fcca80c28b3127df27ac932fc3d4de57a376e776c1d45e8ea9bd5f58b54b349273c4b0bf282700f9473f059b23c1578b4d6f68325fb75637f927d5f7b126a5525db8f01cfa409d4a01b2f21598371da4f1a64f0246829598f08335c2170774d55598f04334c28f0c28bc0c137ea8467887f6c184ef8105e6612103733526982f779b50161c26bc73ad88635962076c3ebb768ddc709baf70502a3aae8b85efc71b9c54c7359fae9d25bdb74afa74b9e3edc39dab41b42ec7b43e42a735ef79e58db8f172b35b9574ab21ba7185596c902c750f0aa45705e603476a7c606340075b83197d54481f58ab119c2346409791a6b3d838d222d178cf975758213ca522f0a8d3e469f2d169a7c9c78834990fefa0d3154bbf2b75c1cdcbd6c732a46ccd577a6dc5550e54b6de53f71deeb3c76b7cb62060ba5585093f41237ce780c2ab31e1276a841f1a50788d4e382fd6f0356643156b6a31b54fd6a8fd4c40b5d7616a9f1256edbd30b54fd5a8ddb94330b5d76369db69ba049d874d3a8d22592252d68a0c8a673173993b05d81d2b55ec5c2d11a3a85689f3b9226af296c56522037027df2c118d1f2b455f629573558dbadac0dcb96159a238e6ae01932592821239166fb5b8522d9e2a05dfd167386532e3845954d0d6cd0d58109dae09a2fe0183686f2c88ce0899fdec83093e5317f67c3443917352e9099720dfdb174b58cfc21256be0c6ef0468bfd30bbced1d9e5f6d5a89652d77f770b582cda1f0bff7375294bc0f03f00137e9e4678938ec1841f8885c9f958985c9051981ca4fb0e4ff42e4cc78993f4f31d8c09be28a4e043302fba3864b43b14137c4948c187e904f3b0bf94258eede402828ced3c1cf3c2cb345e386cb3605e780426fc728df09901851f8909bf4223bc32a0f0a3b0f87325167faeca28fe1c8d39cdd5ba348d8f805be2fce3ad72e522b556796c9993e3f33b95a2aac8f3c3201e760ca6c5353a2d3ad56991ebfce6392fef9b72470765aec3b1980ed7ea74d84cea90effc5f2e2a43fc9df5ceefcc35380ed3e03a9d062d4058f03944bc6414e46bc763ee7bbdc67dc7760ae6be2760ee7b03e6be3766e4be276249d34d9aa4a971c0a4e9248cd0cd1a427f0424743226fc168df0ee9d83093f0513be5117b601859f8a85edad58d8de9651d89e864587db93254d79f59c349d8e697147f2a469443d264d67603adc992c692aa8c7a4e94c4c83bb52254d3b89ef059bef7096ee6bdc7defd6b86f8b2ec1dcf76ccc7defc1dcf7de8cdcf71c0c195f9f3a4c71ec5c8ccefd1a3aa706a4731e46e7018cce8319d1391f33e2218d11df0434e2020cfdc321d15f8869fd8846eb495d83697d1186fe510cfd6319a1bf1833e2718d119f0434e2124cf8131ae14dba05137e2926fc498df0ec80c22fc3f03f85e17f3a23fc9763cec9d7dd46b3b5fc7aced6aec0b47856a7453c5bcbabc76ced4a4c87e7743aa86cadb01eb3b5ab300d9ed769d092c5b3b5c9a2c36b6dc096aaab31077e41e3c0bf0474e06b30077e1173e0973272e06b31235ed61851de3d9811d761c25fd1087f26a0f0ebb1e0e65bec84c9176ec0b47e4da3f5d81ec1b4be1113feba46784940e1376148ded0c500de4193bc9d3eb125375c9bbddb6e6a762bfdcd5800bda909a09a8001740b26fc2d8df033030adf8825196f6349c63b192519b76246bcab23b47930236ec384bfa711be7340e1b7eb84f366e0f7d34932923403dfa1119c2316126b983efac49597eab78ffe031d2f6d1ffd872c551f7d785db13efa3b315ffa4817db02fad25d3ae1bc2bf76316b22bf76e4cf2276125dfa393ccd3c24fd3f1ff2489e6bd3aff17cbddad6810ff0fb3265a72cfff2c6dcfff5c78fe90249e1f6ee5367d48dc8739cf17619de77ecc79be0ce93c0f60d1f42b4d34fda167b068fa20a635df203da148c4e7978f17d5a152312d4537a1294b1497b2028e3d7b08d3e31b9d1e7c4d9560f21fc6e47f1b32741ec142e73b4de8acea152c741ec5b4fe1e0b1d1e4756c922a20a8fd2baf53e321d19f81866e40f1a23cb7b0733f271ccc81f7546f218a8c619b8e559ef30cd20663d817df927dd97799d5c2d69ab961bcfa95b14678e13214a58d0d11c4f621afcacd3a09b568399e2af1ab182805beacf6cded853982ebfe874e999a62e89eb5107d1e969ccf17ed538deb15b0473bc6730837f0b99263c8b09fe3da4e0e730c17f8414fc3cc6f94f0de76b03727e0113fe974678659f60c25fc490fc1d12c94b3ac13cf5f9271dc1492a432feb04f37ae8bf75377cf550be1173f07ae82b18f6ff34d8a7f50d86fd55cc08b15ba2ce089e690737e235cc08beb3b3df8823031af13a26bcb146f8c62d83097f0373cc26314d72cae73cce637099981251c6560979361b2c32bc35f2b7771642963873b39f6162f98b2a91ebbb496e352b170b645433380ddc6d54e2139a2b7d2503f51dde98e466b12bea92f32c919897041cdaf726c6a2a98e055f8d0bae35e79632e3196c7c4af65e42c3720607cdae125950564a0979ced341676ebc85394c338dc33409e8306feb84f328d51c8b522d328a52ef6046b4d418911dd08877b1906ea50b693e4b40df44ba4836aef2992fbc76e12e51942c4cb393de1d2c86a3bacdaa71bff6c680b5c2335413aaf75e8df0ab1a4d2c5a26345c0b1a605dd96b65ed34887fbd87054d6b4dd0f4ef172c68dec782a68d2e68f824a5456cac4868ca8579dbb27e4eb48bffdb4eb3a3de58b99d83fbc676027aa294d1cedb05ac504a296270cf3d9d04f584bb7e749978962bcad7b22a15d54dfeee3a79cd6d6177dfc8aaeb3dab626a07d46025d00fb02069ab0992c50183e4432c48dae98264be35411204f04718e0f61ac0e501017f8c09efa011fe4e40e19f60a1d751177aa546869edbda481b853ec50261334d2074ee1f2c103ec302a1932e10661a1c0841907e8e21edaccb280222fd0213de4523fcd480c2bfc4c2abab2ebcca8c0caf894c6dc6b8c0291ed0469eafb0c0e8a6098c670206c6d7586074d705c65c0b022308da6f30b43d74994340b4df62c237d7081f362098f0ef74c2792f46cf58c85e8cef7592f91aa5bd62e17691f801e3d15b57910fc8e347cc8fb7d0f9b1231c0cec806b4265c985da8a45ddb2d8d3bc5c253dce2de99788e119411b9c7fc2f4eca3d3b39d782eb174a57c3fc8977fc6be9ca5fbb21a7ec6a79c785764ce7cf8d92f98067d751a74021a287b752c820d5ef91573c22d354eb8efc0604ef81b66603f9d81d91e279c97e05cebea1ecd92d5cb2c31da6703f38e14722b9b6e73461014bf63daf6d769cb6fb8a5944c9cef0f0cfb000df6170262ff133364a0ce103e1385b713f0953f96d7d5e1dd7601b7356dad687dab126d11de60d8cef99f5bf7b4bb0cad37d0e2ed66a5220571d7b9e177b2c592b4f1760efec61ece7dfc0d35ccab4a6853eb794e152f86896fae10bf6b58bc1fd61de6b5529cb9fdb3aa95ac58685e2bd60ee1922bc5176b589647bfc18182f72f2c0406254b5b46d463daf237a641b64e838e9ab4458db22817697ad074e51fecfb839311c8ab4702ff621a0c499f802a4771eb8396a5fea7fbbebbf779b872c37f58da314c9376d464074b3be29d153e6a5be9a8b5f524d96e129c2d93de603126867d77b8eebbbca9778e132eb0a4e2cf30827cbd91eeeb1c698e06e90f8382216d8c99969b8e2324d1ba894e300f9211213dac2986234fd71e1ed0c39ae984f3e7f363e1b7386b8e21290889a40586a45083e4cc80485aea84f3cacbc8b0959756188f512179b4c6788cd6f0183b24188f36588c19a34b0cf8be1f53181c6e152fbcd4880e8b52393abd92f9b75d56d9bcaebaa32b63061f28d41603b5b5ce7102826a8781da46076a180b5ec0a62868b7c7b41eabd35a9b042491de0193be2d568c7799e464b0f272472c70b7d315e387060bdccd30e1dbebda4b860513de09a3342e64a6d419133c3ea4e02e188e091a1c1d02e2e8aa13ce07974d4c47eb0370c1dd301c9374dec89d3d271095ee98fcc93af97c2fa0c4293ab3444c56cbbbc7ef042b43f5c03499a2d3844ba811b5b8605eb039f695a9baafb4624cbbec57902ff6d47c31476c9fce577e8f6ad5da22e78c675fc157ac9d16e3e318bc60c40809ed18f4e9315e45ec926059b2efa3fb6cebc28a9fee10e3edb25e9576987550f3737b3ddb2821689ae241d31b73861958658557f1dc1966e5ce5f35d2a8b280aebe05f6dd99baefb647bfbb460e210af2ed3e5832384b5755c90f960c666186cd0e9978f7d509e691684e3a82b9532282b7d409e6ee3d371dc19fe31af7c350ec885548fd15617f1f58105efdb1afcfd37dbdb378aeda531d9e24cbb161aac503302de6ebb470376808bbb1c4402c408b4206e820cc98053a639ad50568f0526136f6a585ba2f0d62f161e3e904607caf52eff3b3656212acfc30184b4e76d2d5e30a8225274330103b874c4e8662d5da5d42566b87618d13bb6a1a27fe737e82344e6ca52b49f462119724268a717b5519942416c578ff8497c170a41cb118294724fb3a568e18aee3c617018f2d89909bfb9c5b469e2f1a0dca9c2b73c46848776c6575064c778b05dde1787741b65f82e599ea8751cfc122ef125d2ac6672d268e6198ec10cd77fee5b102b69d7336cff937c7f99f387ec14d6b1781855283b72be4621a2fd569dc4bab311f6d31ba6eec869b2e276a1b44ab119856c53aad1a39a7bc6f2cc817f2b02f2cc3ea98c1dae6f3b1e6c9e5619b270b30c92561251762924bc34a1e8965112b34598488c601b288515850ae0c99638ec678ac0acb630c26b92cace4ad31c97b8495bc0d26797558c96331c9e561256f8b49ae082b793bcce9d68474baed3195d78655791c5600ac0c59001c8fa9bc675895276094ab42529e88a95c1d56e54998e49ab0922763926bc34a9e82495e1756f254cce7f60ae973d33095d78755793ae6731b42fadc0e98e0bd430a9e8109de27a4e09958bbc2be21db156661e581fdeaa13c301b738dfdc3bac61c9d64fefc01e9f0483299772e06fac090a077c45ce3a090ae310f137c7048c1f3b1d03b246ce81561a17768c8d05b8085de6121436f2106f9f0909077c2041f1152f0ce58e81d1936f476c142efa890a1b72b167a47870cbd4518e46342425e8c093e36a4e0ddb0d03b2e6ce8edae6b8edac2398df15dfda25fba4ab7b261fd2e61757c3a61310427b6040b8b13c286c5529d64bed5dd89e9a87c0c2eb818f3cb9342fae5324cf0c921052fc7e2fe2921e37e09167aa7860dbd528cc5692159acc0049f1e52f04a4cf0192105afc2209f19167219a6f2592155de03137c7648c1abb18ad639212b5ae598c6e786d4b802d3f8bc901aafc1343e3fa4c66b318d2f08a9712526f8c29082f7c4505c14124515a6f1c52135aec66a8697d443cdb006c37169481cb5188ecb42e25887257197874de2f6c2405f510fa0d7636a5f1956ed0d98da57d583da7b636a5f1d56ed7d30c9d78495bc2f06e4da7a00b21fa6f67561d5de1f937c7d58c9076091fc869091fc404cf08d21051f8409be29a4e08331c13787147c0826f89690820fc5046f0c29f830ccdf6e0deb6f8763926f0b2bf9084cf2ed61251f89e5577784ccaf8ec2c2efce90e1773426f8ae90828fc120df1d16f2b198caf78454f9384cf0bd21051f8fb1b82f2c8b133087bb3fa4c39d88657f0fd443f6771226fcc17a107e3206fba1b0b04fc1243f1c56f2a95823ec23211b614fc3547e34accaa76391e5b19091e50c4ce5c7c3aa7c26d640f744c806bab330164f86647136c6e2a9b02ccec1547e3aa4cae7624d7fcf846cfa3b0f13fc6c48c1e763909f0b0bf9020cf2f321215f8825a02fd443027a11c6e3c5b03c2ec678bc1492c72558cc7e3964ccbe14cb5f5f0999bf5e86417e352ce4cb31c8af85847c05c6e2f5902caed408cee9e39cc6563333f61f5a24bba4eaaf1beb0d1d33ed18eb37637c8c750e0bb2075126fa6263afafd2053b0f9db7d20976ae3d22f86a9d607efa762c714a9efa49f84053dcafaec152c977ea2195bc1613fe6e3d08bf0e4b1dde0b9b3a5c8f9534df0f59d2bc412798cfaafb201dc14966d5dd8809fe30a4e09b30c81f85857cb34e329fc1fd713a2a2799c17d0ba6f2276155de8845c64feb2932deaafb00df64eeb374987c880bbe0d83fd7948d8b763f9dd1721f3bb3bb050fc326c28de89e5fd5f85ccfbefc2047f1d52f0dd188b6fc2b2b8074b37be0d996edc8ba9fc5d5895efc3247f1f56f2fd98e41fc24a7e0093fc6358c90fea8a8559ce696c016b98a976aa58156c5add4f6917f57e1645bd1e09d6a5a303567c7b082ba7fc520fe59487b1c0ff356ce03f82a9fd5b3da8fd2826fcf77a10fe189654fe1132a97c5c171ffaf2f810e5d4d322e6ee74eef5ca09cef7b8ecf82637c1e2c89f69c791bf62fa29a799ea85c59b27b060fc3b64303ea913cc83f19f7404ff85e74b4f6182ff0d29f8692cbafcaf1ea2cb3398d6ff85d4fa594c306b144ef0739867f009b309535c2789d3798ea7cf6793d88cbaddf86633be229cbba4ec6ae9adc3c5da2c7cf58c39ce9d35c267f9157d355e37d6963f0de3058fc96b995a3a34889b3e8f59d94867e5e17556aa25e6dd14a742fc3d5da445dc1abe04ae9be24caf7b32be8884778bad2ac963beb85be248ac958b4f54f8e8c525f0e783e981492a627c698095e2ae97294c5ffcbc178a458383ad6cf20246ba31e64ff08bae4d7c5abb4b6bad93ca2f717ca34a84b96b6d91dc74d4af6dfc5dfc7a7df9d38b98954d74566ee7b3123277ed9c2242ac42d8e8d7d21b42f04eb2b802df0a62d94b98654d75966d9f56f88d171b6d9531b55c42f8908bdf0962dbcb986dcd74b68df4d9364b84ce2a69193f5bdf6096bc8259d25c67c9b111a767f177f8966a6a219d12b0536b75002f87ec702b785e522bca4330d5e325c6fa4bdb5ec5a8b7d0511f9f56dc98c9dce5b84d48d55ec3ec6ba9b36f26a157f1ab7b8acf70abdcf27d7c2b86623425c924545fc7ac6ea5b37adba456e39aba8b4db95b0bba36aadc387159f6fa09cd3730bb5aebecda2570c96ebeb8e32ddbe924b8d7e0825ae345dd2d4c493093707e13e3d146c76346247936756efe1666735bac9c12cc07940fcfd4ae4e17d4238258f63666593b9d655b2396a9ada3dcb289db76a06a2d0b652c2e49080d9a3aca3b9845ed75164d214c7d55a8baeb682e63eeeadff567e9bb98a51d74968e655867b12ea5f05a502caeb9d67126d344285789dad07227c7dd508f56bd8759d5319d3a81f7bbb084b040844295f32c8f872b93e47e5e19f567d9fb98659be92c9b9832e54caf5680a7a1c9eaac99a6941f603676d2d93815f5495ee27537bd716d7517479eccaa447b64558ab4442fb3be73c20f315b3beb6c2d25ae3dd438394195a0e4d60e160a6f2fab4b79eaa73e9c09a78f304e5d749c1634582d2b39a1f01c3ec63874d5719810306e9810233ec12ceca6b3707a400b77121ebd06099186b0f753ccdeee3a7be7117a767506658dfa20f01946a0477d9541dcb46d3c2881d05bf53966d5e6580b4550aba688271243c89fe6a42f37887d5f60f6f5d4d9b74d8892638dc88df8d2ae2b643d0fb7aa28e1d920367d89d9d42b5898f9d39ef1a23d81c7b454b514dadce32bccbede987d41ea8caead536539227e97f778242f1dd657c9f16bccbe2d74f6f567c95b058b1cc2145a7e8369d92779db5e9050989f512850fadeb798d5593aabb742e35651ddd8039846aca86bcfe6f961adb62c9659fbfe7798de7d757a8f4959e39a2efa0679eb63b993e65539b65588e5ab13ebbfc94220f31ae4f7983d5b6225c8e47184d786e78a5255b5265f4da72f81974656d4a3853f6016f64ba78eacef1b982e7c8fb78317cb36aac4f08ab27fe047ccc6fe580b553aed00e95899598a91b9a53f61960ed0593a2dadd0f4f7f4b8f150d9dd90e1fa3366ed409db53ba70c57da9671ea36f35f301a838295c712cb96cadf2be42602cbc55b78b992a69df957ccbe6c9d7dab7d25817c27ddf5eff5c86b75ba0d56606aed96d0a6d7e591c17a8a1a3a75ff0d633638586d518d215861c42882df31ab86603d62e13c61becf0782f7ff872f11fe81d93c14eb37d28764e234b586aa3ffe8959340c6ba50c9a5ee9f3e774d2ac28d3b5bf300e5be9380c09c04185a9da55aebe729abf318d87eb341e9832df8df7c6968aab3ca5a99f94e21f4cd31c9da6a392d4a3fc9eeed5dcdd903edeaa4d115ffec56cc94d678422568a9d6c5809f67f989523b0b43d583ae7e6e789771347b0a80d2ef1f04c94325ef497f15c2488cdff6136e7e96c1ee00bd9f837a963131fb3add5335fa7679e4f4f983ef9759e2a754e3707cdb41d36865950a0b360715dc9a1fefb0f54cb5fb21e44e881e9c63cf54e102a8d302a85e98c00505f0c92aac42dc3625cfda4268d31cb46ea2cdbb581c33b4838671a039a604446a5d31612b4ac15be369c79d837c52c1d9d4e6a355184aa1b8235a08ddbf58291ac20857dba948cbf15c48266980563d21fb7cbbf19246642fbb0ebf51542cd31fbb6c6c6b5076fdb57b96189a8ed55caa7d4d6a8f555226e8159b20de66b995b5209ee4fd7f4686696b7b7c42c18abb3203f94053c24e2232febcf9f5a61366c8bf515252f21c737cdf4eba8362dc5bd07db703399c765567a6c8d59bd5d267d146e2a31df79781973db0296b3869effd206b370fb7452723de1ccca9d99a60f6d310bc6a5d32f56c4dc59b5f0ebde39b5ae353ca4d458bdc412572a1941ec6987d9331e1b7598893d3ceda864ee08b26065e0fab4b53d66eb84744a4cf5612bee8ff56b6907ccd2893a4b7333b434fc4881e6cebf98d85d7eb220e3f6aaae15eff09a7cce96ce2da19f9b1f0daf2ba50ff794e8e3d7f9f72b9c148fe73b4575e5713e533db984498ddc4978e267508c43ad919598d80ae69f1d3f51c82f97654495230c17a9903b1785f7ad0c77f246b7655acdfd4f6585ae66321cd44da075a96dda0d59db22166b2e2d52b21cd27c09804dced2c93c54fbc8506d94c387bec48666e84da9b598c2bfd658ef43dd12c8c2d8a1d3dd15a0cab7312ed75d8622a564ff6e517ec95b0901aa8e9e52dc02906ce9c4f510eee40ea6af626e17f3818e3b356fda2897139f4a8985af0bb544d09f2b3e8ecf7fb301db3b4de2d8a65162e38be24c124d1895a2136d8da856b9c55d0c60b51508f9406a85703a25c20ece89aa074d13b5262ea058b432f011c473d86a2b80ddd8220e6c074a609d45545dc272597cd0b5cde03ab48e839b41096e330d382e90f776f33168b5e26a8915d096b238b499d4dee68d9e539cdfee824d25754557d7eb6c0097dd260e6e1625b8ae3ce1741e49375bb001dea92053984d09af3588aa733c9d093660ead52b8e690e25265115ad6b195ce048b501cfe8fe713c7329f1b4045e149fb86903a223bbc611ed4889a89548a5dcbefc78aa94865506407a62cb38a47994909a093faab62a9f6bd2360e673e251cbe9fc19cba7aa31af7e38e1c9e270a0eb58ccf99e44585b9b227c306801b41225e4409b00548a5b89a7c28940d805ee81807b4803a199f23c61ec4578fb3a394be2ff0a18551f9909aa46c03a0733bc501ed4409886f11a0aa3193d97a61756d5dd99bcfe0705be4e7090f2b11fe56ee7cd00688fc4741dc9912626fc63cf07833215f7ca5b46eb78e12cb2b389d41c3e12e9428dbca344df9db0699632e106d1036a03a13a46dbb46d502c12bd4703899aa54db5432fba3791cdc22ea1608080eae60305eb449f0dec2f85a0d36c0db1734162ea684d706e4a8f109f9ee32203680da084a67bb51b7dfcf12d16fb56f7db949cee355e24b36005bda280e6cf7685b54bd03644b2c4bcfca41c7c712faf67b31ca407cdae682c6134de3d096527bdb64d1eb582b3e1e1f66185ff0b3da29c39559d278f80900574c09ae1d88a6b6f612f1113f0ad632fa3e4977f8c05a21c6ee7ac058e065cb29c17504e0e26384dd3586ddb18bb6f8da3d83e2c84aa81b1ce739b826b2f49797b601e091a25ed0bca94fb87ffc64e663c98251c747bdb5676e3340a5b85a238b2c9e51707c4a9e719a97c2516cd919370965a7cc1ab2d31e6a901db89b383bc33147d96915d4b343b6f164071848961d28d7c84ebbf8971da8cc939d517a921da855223b50993f3bad2151d981c60165076e0cd0e98c8ffcc84ee823cb4e5a83ced6f67a646bdbb1b3917edcec24a304b2914e83ec140d6fd919756765a3dda8d960bc69b6a6bb3e3bcd02407c80b77e60762e1fe0bde2fff3b1d7b97cecf54a0e81ef85c57fdcd2c82aead2c81231858b9bcd7388e40b348e70ca043e1d7a25e8e0dd274f953a74dab4f4944bdaa563602665936960e04f994938f3acc4b937c0b9874938f3adc4791ac0b9da249c0556e2bc1be02ca76e3a5e22d3442f5637dfe58f91e1eb4485af09c057118537ae44fd11aabf848d6123e970b6a1c2d907e05c6312ced156e2fc83c571ae350967a195386f00382b4dc2596025ceb300ce3d4dc239ca4a9c1f019c5526e11c6925cea701ce6a93708eb012e77c80b3c6249cf956e2dc0070d69a8433cf4a9c2b00ce759438bb489ccb65139c7f3130577577a1a95c3a904da940f60205f8bda887a7aae6e0749be6f9f355e259fbeae9938187aea704db87c1b6faf4fbaa6c86db0fc0dd403d4a33599b1214c7737a3294cda9506e071280bd2951b697284746df9ab43915bcdb811fee1305bcd1d1c323f3bc1701bc7d29e1754b91877b233169dd9c0ce68f00e67e26c11c6521cc9f00ccfd4d82596021cc2f01cc034c82596821ccaf01cc034d82996721cc4f00cc834c8249d82f4906f33300f360936012d6cac960be0f601e62124c1b6b381f0298879a0473b485307f06300f3309e6180b61fe02601e4e0973888459ee3c542e8e6acc2d1cd71874bb38c294956cfcc7a5a0b9e308eab57b968875d74be4b0da95029e7d8d6d6d80971ed9908d6dde2d2b08bdef002a94b701ef3b8a12e5a084085f2c844d616a2fe509ce7fee9deb4473702d4bb63b00296cb2d4750d807d74147e9b5e566523ca2c90041c4389720b4d1290eeee74a4688fa142bb1478e9b1d45e3a5ecc1a5a2be74af085e879ffd01a397f4acd2071e7e5d8975135015e7a5c146bd58e70fe57c88f178bfc9d5fb5b94dfe5080f0f828108edae410de03109e40bf2abcdbf1ab8ee3850aee2e603677f0de05209e68d2a401d2c15c6438770699cc4926e1241d7d4486737f80f3649370928e8d23c3793ec0798a493849bb82c970de0f709eda90f575ef2058c21ea28e54289f06284f8b66b2556ef4233cc83cf13b908b9f6ece302d1b9b8a77029e78461428e138cd994ef570aa9c74bfc279697d14654b32947b03af3c338ac60cd50807b7422d12b59d4dad9de84ee0a567d1f70ec176f5256cb5803d41ac6bb05a8a9ae21c4b5979e22a4d160c2e6c0bfcf4ec28fcb446acba525dd70fa4167d50475d933169be4e86f63c80f69c287a31d39f054c06936c2ec6f600e6b926c124ec5f27833916c03ccf249884a3e5c8608e0430cf370926e1384e3298c300cc0b4c824938c2980ce63600e68526c1b47132e01800f3229360128e9623833910c0bcd8249884f5213298bd00cc4b4c824938c2980ce65000f352936012d680c8600e02302fa38499c5129be6820d3324ccdfc98619d6828690cb1b7298acbf4b833015256b461e027cf50a936012e6ef6430f301cc2ba3e8d2e00dc9ebc45863be726f44a33bc8f06d0ef05d45bd79bdc297387a930b8baf9160f370996700d0aba3da607cd31a71740840784d1408476e7208b70508af35bb3844d8aa49561c3a121487ae8ba61f7d4cf4fde864ded919e0bb3eaa2185f1ce5fd8c946deed4bd6e7733088e23798331dc0c659e8db0194374655084ab5e782cdc35db706406f8a227dcc130b966d2a8b3a0f05e9e3cd262dae37c6ca86b68e00e72d26e11c6d25ce6f41e4de6812ce422b715e0d70de6a124ed2753bc8709e0470de6612ce5156e27c07e0bcdd249c23adc4f900c07987493849770a22c33913e0bcd3249ca45bdb90e1ac0638ef320927e9c64b643897009c7753572bd3dbd8d0ddea8d6fad4858ad9c4105b41000bd278ae5491b60a720b289f96b01bc7b29e1f564e9ae79e05d008570a8d6e75450cf0355cbfb4c844ad81c4706f55c00f57e13a1120e772583ba1c407dc044a884393c19d45d01d4074d844a38948b0cea0200f52113a1120e9321833a17407dd844a88403b9c8a0ce04501fa1849acf12bbe0bc73da26b2f836c6ae21de4d91bd7bb0c7f7ae2e12255ad51745180823a80281ef17a202e151ea7ed0545b67c37bf6f53bfd0fa07ccc9cf9ed36ee5fb023481a1e8f668448036c4442d681dc12e07bc2dcb9c28443b9c9c68dbc0c22f993e6ac784cba10155934df0fc07cca2498366e53723480f9b449306ddca6643d80f98c49306d1c20b60f80f9ac49306ddca6643580f99c49306ddca6a41cc07cde2498362ef7b32380f98249306ddca6641e80f9a249306ddca6e41800f3259360dab8f6dcb100e6cb664f8eb1714b9271a0eefe0a25deb612afbb8c5fb9a8c5bbb2cb28174823dbbb9a01bf7c35ea5d09d26ff6b07181b45d804fbe16d50c8f59a2016eb5afed7d92f35a95f8a2cd333c7a035f7d9d1268bba491bc9a0e5d2b2a748d00ba371a72e296fdebd1740328df8ca2959dcf32da7426ff17017c6f99b10d8edb8f59293cd6eda124f5cc0fa9d0de0a329cb74d5a039eb43249e6a99301ce774cc2996725ce7500e7bb26e1ccb712e7c900e77b26e124dde0960ce72d00e7fb9438fbb1c4e9d893d97ac6c724d53235667e8ef37a0953a33d8a99bbb95879340578b2ad20ba82bcff0393e67a8cb17235d9cd80cf7e6812ced156e2fc0178e74726e12cb412e7b500e7c726e12cb012e7c900e72726e11c6525cef700ce4f4dc239d24a9c8f009c9f99849374200d19ce5900e7e726e1ccb712672dc0f9854938f3acc4b914e0fc32aa8e8df9a2ce53eb481ecff866cb0be54ce31231d3b8d4ea8e8d6200f42b73c6c0db3836693aa8137d1dc5a005b534af3bf77d996808510fd9bea26729f0cb6fa298fbde001b3792c11b07e07d6bee7402c20c88ac67fd3280f63b7346268db4723ac1e620c5fcde2498364e27e80d60fe60124c1ba7137407307f3409a68dd3097a00983f9904d3c6e9041d00cc9f4d82696391bd1b80f98b49306d9c4ed00ec0fcd52498364e27680f60fe66124c1ba7136c0160fe6e124c1ba713f40330ff88a2663e2afa9a39d938b93b581cde9f51c06b807d34c8eade2f01787f45b3cc7e03ac88481671878088fb377d2ab84ab3d1c37c87c972b65c2ab442acccc94716d9d76ede1af8e23fe64e5e212cfa9045f322e0a7ff9ab3d38b8d95c5ad8097fecf8c11ef4522fd5c23a23f1757418b966c7dd94b8097fe67d22058d249aa64e96909c0c91a1b8433cf4a9c47009c319370e65b89f33a80b31125ce6e2970fab3241b6be3c702988d4d8269636dfc3800b38949306dec8f3c0ac06c6a124c1bfb238f06309b9904d3c6fec84300cce626c1b4b13ff25000b38549306dac621e0460b63409a68dfd91070398ad4c8269637fe40100666b9360dad81f792080d9c6a40a25e93042b20ae56c80b3ad4938498b476438f70138db99849374d20a19ce3300cef626e1249d3f4986f35e80b30325cecd24ce42e77f0553133cf8547fdba7035cc0e2083b5222546b24a4eec898c8fc4bf78c77845689350d4917f179334604f92ae0a79b5142ee2d21973b0f71c0a572118a394c2d3de14d06e2a69082255b7c625f00b61325d82c1fd872d1075fe3eb854f563ab5b1a0bf07c0db99126faa0ee3c8b6783a800a655780b20b25cabe02e574562d5699e12342cac4c005fe7adc5b97b0d502385f3976b9f3b77b7f8a732c75c4122e7a4ab7d30bc8c8ba52028e6f945318fd1826b2c5769b03ffec1645544faf4e6f63aa390aa0ec4e89b2730a94ca52d2d14ad3a90a4d37028c3de853cc64187931aac623768243ab4ca4946ea18ad04fffa202fc3800bcb9e980093d980cf09300704fd30113769190017e0a00ee653a60c26e1332c0cf00c0bd4d074cd8824506f85900788b282ab089a39dd3dd4282b0439aac545b09f0f6a1c41b6ebd06c2f1516483c9df6671b459519472b1b681782997b0104656caed093cb42f2546bec9c95cd9eaafd6b4992e3c93477bfbeafb1d80ff6d1985ffe5d6f9608968b47617f5b57de9febb01c67ed47df91cd824f1e152e6aeadc41fdd5bacf6e5e274f7c1e6b39708d7fc9a4d05731480d93f8a4694dc244dd176f74b3d0b500e88a26baf6093ebdadb03201c1845af13f7c6c9228fae154acc745e592e22f91cb697e8ccab72eef1025225b37969bfd100eca0289a9af336a945d4b24091279b129fbbe593fbd91af1184f19dd45266b290b3d64fd9d5d80e70d6ec80e396f2bbd8da3e8670094432851aa05030aa28fc274fbbe007843a318c794fea60f840dc5648befb60629e23093708eb612e757c03bb7320967a195382f0138879b8493745722329c47029c3926e11c6525ced701ce5c9370922e8f4686f336807384493849f71b24c3390de0cc330927e906796438f70438f34dc2493af7880ce76e006741140d197cd5af4d67dbdb29005fa149b3394650d6c8c970ee066a41234dc249ba4c0019cec300ce5126e1ccb712e74500e7689370165889f30180730c25ce164240a993edb87d8e5cb27d0dbfcd4056b33525ae412cb1e1d73b946522e3d3b32ac4dfbcb7a756889c2c0073b38a04b50806704fa1829d07606f13cd5482bc4da87fa73188da631b722a4164d547b268ff2840b96d14bde0bc9f712ae3ddb2bcf376a5e807afb2bab3b60644e6edcc99d862e3fa720b81376e4f89927773ce15d949897c693ec3460c555b18ad5b009f1c67eeb0541bd7383e1ba01d1fc5da34e9f590e75bb96cdf5300e6049360da38e0e00d0073a249306d5cb6ef0900739249306d5cb6ef490073b249306d5cb6ef5100738a49306d5cb6ef710073aa49306d9c97fe208039cd2498362edbf7108039dd249836562cdf0430773009a68d0b97bf0b60ce3063f909c27c9c6c62de3da0b163a6d9337309ab96643373ab00de59d46d49a91b89478ae1d984b97a532a901b01c8d9514fd1771b85797bd11ab683e809aa4c3a4c861030d92099c6203d9d63ce9c0b1b6bed2300cab9260ddf1a4d99d39379665310f577340967a195386f01de39cf249c0556e2bc10e09c6f12ce5156e2fc1ce02c320927e966cb64385f013817988493743518329c8b00ce8526e124adc393e13c1ce0dcc9249ca47bb991e12c033877a6c4c94fd4223bf6f59db707987631c9ebc650b62091795d5b503cdfd5249ca3adc4f90df0ce4526e12cb412e7a500e7629370165889f37880733793708eb212e75b00e7ee26e11c6925ce3b01ce2526e11c6125cee900e7529370920e9921c3590570169b849374e350329cbb039ccb2871f662de4d7138875ac6fb2afd5be1f8e7ac11f603914d24d81e14e79753621de8c3ba8c250ece4e7f1837216ab28ae8f500754914d35e46b34d6df1c7fb4122501ac51403e5add5c2ff78123045c22bd5f6b8dbbbe9d85ec03b579833a3c8c691c73300ca95e64e84211c604396866e0409c0aa28d6371ce1f3d508524f3278e301bc32b3077f110eeb261bfc5501a2fd1e5114f8e13ad9ba286e775eff1cf0d6d551a4a289de9a4e3a4ae8a96409c1a9c053cb29d1f6f715a3ca199c7eaddf2877aa7c39b2dd31875061de1d60ae8866c585d1d1675764094027806f8d3943146d1c3d3f07a4a56ba3c8f95584e7a965896fd6fba6d78852003cb5d2a45594481ba2e956a00338f734092769cb2919cef5006795493849dbf5c9709e0270569b8493b48b990ce71d00678d49dd246328d76320eb26190c70d69a8473b49538ff0305a77526e12cb412e78d00e75e26e1245d6e920ce7b900e77a93708eb212e7c700e70693708eb412e7f300e7de26e1245d489a0ce70280731f9370922e5c4586737f80735f937092aecb4d867325c0b95f346d9d0dd03547d677f43dc0b77f14fd9afcc32b84272ad96be423f6b56ec600bc0328e1b510f04ac43a9dc56c86738970d56d325c9d01ae031b7e910a9527db37646616a86b1f640a481bc71e8d04200f36052461c72e19c80d00e421a680246c952403590d401e6a0a48c2b17064204f02200f330524e12a3364204f04200f370524614d850ce43500e411a680241c8b4906f24200f2485340128ece2003f91000799429200957dc2403792d0079b43963d86d5cf0790240790c25ca6e2cc8e0ab422b771cf897c5611e6b124c1b771c60c0338f3309a68d6b17fe0d3cf3789360da38efe71f00f3049360da9801fd09609e68124c1b771cf80bc03cc9249836ee38f01b8079b249306ddc71e07700f3149360dab8e3400c148d4e3509a68d7326da0098a751c21cc21227492d177b02c2999141675012260664bde0b703e4a753f782c7f7f69d2e7db8cc799977edf2d7c8e0914dea6b0752d23328e1f566fe59e7fa897c45ac4a8c4caf662b84b00adadec963a8c05602b0675282ed979010b8737be34b4e70817c904bf2f4d6c642553988fa6745b9bc8f0b944f49e509c1246d8ba8bdfb685c0db09e6dce1c4a1b4baa834132704ed4f3d1d34f6109d192a5b067022f3d37cac85fe628b15014b56a997f419fc8e69f1f4085f56680f5bc28061516463f22932cba5f0fa2fbf951d4a5d2eb4b1a6165c5744fe089179804d3c68a690d8079a149306dec9a5b09605e64124c1bbbe6ca00cc8b4d826963d75c2980798949306dec9a5b01605e6a124c1bbbe68a01cccb4c826963d7dc3200f3729360dad88ab408c0bcc224983636782c0630af3469a113d22c886ca193f900e75526e1ccb312e77e00e7d526e1ccb712e7d900e73526e12cb012e77d00e7b5514c87e643b6d78196cc48d67e25c33789c5f15d47898fcf859deb9cb81b3c70516b9cc757398faf152dee7b8b0ee13271661fc6a600e3f59418fbb0f88ac46e57da12475dbee2f472c183f7b48f677c0948de7d51ec08e011bc84a999e83516c25d08e0de10cd8a07a3a26f5f271bebd10aa4903746d19d96d922f9362eef7c11f0cc9ba853cf6479b9b294b4fb6c7a8c08e30dc0436fa6c498a5c1186cb01761fb265902b016e0bdc5dc0480b0bb8d2c01781524001b29d1f61568a709ff9cc7785f79a9cced4b8428355669b50800eec7cb9dbf5df1539c63a923b6c4c2bcbf15007cabd94903610f2759d27002481a6e8b2203c3462d4d140902f186638ba932b0ad00c6dba3a984e6455f42fd9cca0bb704f8ee88a23119d69e5455345e39b5bbb6d403a4987746313a19c24c9d41d90b762a007b172558b5ab603edbd476153c0720bcdb9c41b2360ea7d901a0bc8712e5960150ce77bec985d4b039ce5faa39af9a3657df9d2a571f0eb2a57b2911f760dec1b295a22d7455529fb5b1d3f81c00f4be28ba3ed2df81801027d94ab02d00cefb4dc239da4a9c5f8014f5019370924ede26c37931c0f9a049380bacc47904c0f9904938475989f33580f36193708eb412e7ad00e72326e1241d5d47867322c0f9a84938f3adc45901703e6612ce3c2b712e06381f8fa2212457fc768f7cb0c37ce6b636d9db96b41c207c8212613b614da9103051d4c6f9eb7cd8171f1762e3ea0b1d01ba27a36843c2a27264d90cd92a9e8f800ae4530d89d2dbb461e384ac7900e5d351a589cb65842e65eb657a68732fd0bd20623f4389b0274b6cd1d44ffb8f6c663a19d481c02f9f8da28397fb6569dd823feab6ed1d170f03df7c2eda21347acf9c2a5f88cc438750a1ed09d03e6feee82442b46445a55301da17a2c894f236b91ecb6c80f0c568c61e37c0f402b2f1455b027c2f4583af20fa81316405f46620f77e398a8131e9f597e759d9637e05f0c5574c8269637de74a00f3559360dab800c59900e66b26c1b471018acb01ccd74d8269e30214a703986f9804d3c60528ce0030df3409a68d63898e0330df3209a68d0b509c0660be6d124c1b97e0bb0ac07cc72498362ec1771380f9aed9f37f6c5c077e2aa860be4789b79973324f7cb4d67980b0cb96ac316d33e089ef47d1923ea22e6a978806607730b5ed0b4edc07307e60d2588cd194990dd9588c4620027f68124ed27d5dc870de0cbcf3239370165889f37c80f36393708eb212e7a700e72726e11c6925ce1700ce4f4dc249ba160219ce5d01cecf4cc2996f25ce0300cecf4dc2495a2b27c3b90ae0fc8212a7daa2a10126e893d5c2d700785f4631d9948f229ac4f840d54aa7ae5d2aeb40ee14d35221b0580880abc655339b47040f0088bf8a22ba63913d710d58c2e661ba750d41bde86b937092b6b693e15c05707e63124ed2092964388f0138bf350927e9dc48329c37019cdf9954541a43d9834e5654ea02707e6f12ced156e2fc15e4ec3f9884b3d04a9cd7019c3f9a849374fd6c329ca7009c3f9984739495383f00387f3609e7482b713e0670fe62124ed29d31c870ce05387f350927e9560e6438f702387f330927e9c84d329ccb00cedf2971f663def5b6aa44fd87af5358eb5ce12b17f2550bdd852093d5966cac2b1d0f0af77f50421eec835c299af34a04e29a3a3be31304b1914be39dbfaac4601b52e03fc788803f0880ff4909bc0b4b3e1ccc9b7d9181249b0cd31f240f7f9902d2c669ffdd01c8bf4d014938a09b0ce46100e43fa680249c664006320780fcd714908445283290c34066f33f5340124ec922037922f0c8ff2841e6fa8a49b5e82c747c318089ce13158e3e6bc5193735a242d39b5485a62b811fb3260db8bda8bfc84f38f481acc83f1ec08c99049370420219cc890066239360da5819cd07301b9b0493b07e4406b310c06c62124cc2122919ccd1006653936012d693c8608e01309b990493b0644a06736b00b3b949306ddc3d781b00b385493009175821833916c06c69124cc20556c8606e0b60b6a284896fe334c5f95dc6dcfd838b1c015cb0fddb38edc2e2605b5382ed25c0ce741e582e462bc339c30db65123d94ce2e6006b1b4aacc1d692b57139a01d40d46f4b8932dc8a8884f93dd924ee6b8097b68b228bc2da47bd5e3acaca05d546003f6d6f124c1b1754cb03303b9804d3c6143407c0ec68124c1b1754cb0530373309a68d0baa0d02303b9904d3c605d5b201ccce26c1b47141b5fe0066179360dab8a0da0000b32b25cc6642408d98065b2bd2172254643dedbc46aa5075a34495c5c2aef04598e190d5cb57034fec4e89b7138bb723ad13ed447c92f632d17e14d1a2550750412c013eda831262dfd03e4a3a5d9bcc4baf005eba39256035921eb676624d74e46d9c6438fb027fed4989532dbb9f2756ab8b78b98be954a38ffa026fec1545035c62744fa709cec62d49e600b4bda368264eaf946963ed673888e45b50a2543d44993413130ef122f3d11300d83ea682251c884806f6280036cb54b084490119d809006c5f53c112d69ec8c01600b05b9a0a96b081840c6c2e00dbcf54b03616b0b60060fb9b0a96b0838e0cec8100ec0053c11276239381dd17801d682a581b073bec0cc00e32152c61f73219d89d00d8ec289a570a59036c0a4986ef20806fb0396d0036ee35331ba01c1245bb69fa13686c9c29b704b44e0d350927e99acb64380f073887998493744570329c97019c5b99849374730a329c0f039cc32971a69aaee06f8ab6712ce86300668e49306d1c0bfa0480996b124c1bc7825e0e608e3009a68d6341ef0230f34c8269e358d00b00cc7c9360dad81b7a31805960124c1bc7829e0e60169a04d3c6b1a0670998cd9bfa844f49103e5114aa79b17a398b6f6a329c4d657c511f77db93e5cef94cd1c856c3963a381639ff8285c06ece3fddf598d8b966325bcf2ac5552eaf44c8ae70ee72cdaa592edfa56424778866d221b24523cb7887798df30cdfe1937f7d039bcfdc4d5be638bfd53cd25a81245b6c7039d7b9c6c7ab968a2fac713459c5aa84c5de4d5db2632d04a752b64e12e000b3a5aeeb98bbdcd174d9bc53e6d85c2c34a9729e6922bee35655b2636dc1991a97385d344e722d7800c5621d6598707d66095bf8b2a0c5e25854f756ce40e7b1d848e797dbcc39bcae8173b85c8aa9429ea9eba965f210492e6d14c71ed3c7c3f27af3a55416b9eecfdf5f21a6ae960aa9d3535a9ada3edc2fdb2409959c413c2c3665fb47f37097c12edcb45bacb5f3d70227e45de1a54e24ab622542a97e158d58d3ff075fcea87aa2e10300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/5f148ea27a961e1418c15d8eeed35976.asset.meta b/Assets/SerializedUdonPrograms/5f148ea27a961e1418c15d8eeed35976.asset.meta new file mode 100644 index 0000000..974400b --- /dev/null +++ b/Assets/SerializedUdonPrograms/5f148ea27a961e1418c15d8eeed35976.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9b5341f1eb2025c40b0d4b5bc344adfe +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/5f233d794fe70324a8071fd2e0e5b8f1.asset b/Assets/SerializedUdonPrograms/5f233d794fe70324a8071fd2e0e5b8f1.asset index 1af7959..eeb0c44 100644 --- a/Assets/SerializedUdonPrograms/5f233d794fe70324a8071fd2e0e5b8f1.asset +++ b/Assets/SerializedUdonPrograms/5f233d794fe70324a8071fd2e0e5b8f1.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5d675b1c4712ee450214108a086514104212b02b845040122209a12c116c2b1891246183840149f6455ff09dcf177cf97c39675f8ebee84bdfef47dc87fb017e9efb76775d353d6ced6cd7eccceed6b28bbd3c4cefccf45457bd15babaa767b628aaf42752a73703eaaaea500daa5f8daafbea9efed6a1cb49fde7ecb9c72fab695dded1db217dae4e6d4f71257cf64436e86d8fde9b51b3faca076a4497e378be578de9ef3dfada31bd07476febff315d2bb2585fd4af3ad525755155462a529018c08b66ccb108c81559a2b7edea397d760c998246a278aa526f7af599193c37a99976eb5d573751ac497d6e445f33ad2634cd61a4b8e4f552855f9453949ab2c494b5e6fb69b3bfc4947bf5ff52f2ddad0be53e734d37d907c9ffeda1ed5eb7df1c3b43f6a1ac33c77bc83e94f5a4ed7a53e7ac8726e50dce9fd3ffc5fabfc91c5fec2977936b96996bce7bea2c37e51e73fe02d987b286d0a83165353956edc1f462e69896bce2a1ed5ed760ea5f32fb65a62c36653969cbd5c74a734cd72979d51c5b61ca28a91f35e50173ed65b20fe52a53c6ccf92b641fca468ffc8d1e1c0e9af357c9be96b5e80d0f1db7fe3153bf97c80e658b39de47ead1e3fd1e7a4d1ebe5c5b71e53ee4e1eb90c3d7e2751e3a4b953f5fc7cdf10195685fab3de71ff39c5fa3ec76b9d6942755a25d9e34e50973fc71b24f717822053eaebe0f7bf47dd894aefccde6fc35b2eff5d70a531e51893eec1e83f2a8a1739dec83ad4f05c4717d0a1c2b191c37a4c0b185f0dc62ca8da66c35d7dc20fb9a6ef1acd9df64ca532aee63ae3e5c795c3d71f2b8e7c3cad3ee91a7dd946d449e36536e366587479e0ea3834eb3bfc5479ead9e73d4164e19ba3755a0781d79d11c5f64ea2c31dfe1d836158f65506e8ff352eaf25265ca4ed2862b43974ab4e72e158f8350ee30e79ff45cb782d0b2f1653bb69df0033407435eeffacd4eaeede208661767747f3fa4a654b4082a019a41d320f7cad40910902e810d7cf660b3b33ad598d2042c59483fe638b33a8a375ab3908d9132c277076e87748d71247a2bb989d7929a00e626f4df1849a166f4f16eccc020891ad7671ab4838ce355b77457755dff255219d0cd4ee8346c4c77180f745340ef96663bb9662a9120ddf25e7355d374b2c1497dc405744aef4f2087bdb87d889c8e21f73dfad82ce6a6f77476daaecb67b1b564d9a7f5775b9b7d06323b8ff6a4903beea49eae9a3ab534c07d14edf32d8dcc874600fa925bc60d174731eabf94a489b73074820c24be3d86c601842c9270ac51453137be9a846078199325b4dbb78377b34e34fd64b12303eade8c12c435bcb16af7bfa65a76fcb73851b4832a8a29fe9614a2f9010bf46a23eb9328f88b505cbc38068c7ae18fd8e0c7a1676f0ee177ea8d63bdf00a28c19e2951019175c8fe88a932accb21fd6d540b715f3dd267a06b7b64226092966240b214814eee465331cb415d64831a474e7df362e9dc64843fd84be6a488831dc53c68838f49726d61d254643227d769de7861ea8d73bb5efe4fb15d2fcb502fe9b4c66966914d33cb72ed04a9a3be9f5e96cfc915d70b7cec189631b69d8a070ec1c536047196e6862882c9e9b1fbad5d5f7b5723f110739e07fa7a5b3aed8f290c2fea3d98daf12c473cb75b93fc701c710817db10c6b9a4a74411eed7c79c0140179e1dc79809f9e31052bfa4ade229935d823c5c7d17d30b3855fa0039f1477f6560f45721fa307897e496d34c894d33385b373e2f9ae9c3f973c8f26fa3149359d6cbeac07a59837aa9f7d14be6bc725a29b5682506317dad2550fe4f7f8a977a4400e762882fb1a9bc7c7e92d6f4ba0b488f2a03771715be3967d8ce62a94d3580de7a0b5390a026a9a68257cd321b7130864a5b9608b60c23e1590d0c4464800644baac2b0c69519ddb3e49ed97f2ed2fe7dadf606b1f262307f55f4cffa7e6036a4e63ad301c95719eb0d1e209ab8a2c70fb78c20a1b71a8bfc91625bc8457f184cb39c29b3324bcd24618c4d81284f01a9ef02a5b50c0d6aee43028041993db43c256959cd9a3f76f43ef8739d83e1d7a9d9bb40de6fba02ec73433deeeb461eef80514e0aeb98ec9e9abb0898a249c7c07c28c1e56731eb8dde6816b8d071ed0ff53c4dbe0aef1201e1b32f7a3c3f8dc1a8e871d361eca92a2407ce41aa6d5b55cab3b6dad569056b9d6d38b38eb6c7c8027ece24cac1af50f5baeef879109743893fac23bc622fcea1627315cc5335c61735df4e75c0e00bdc96938f7dd6d0b5f5667ab51f6c15faaf639875bcf99dd1e3f876bcaaac355723cd4da78589ee47010adc2b6b9816b73afadcd75acbbb96da7e76c1b392ef6d9b880a90e686334541b9b6cfe8171764cd43ffc0602136899d91ddac07a9745dec92d8ce57b7d4253fadce81ee9f956e896d4dca695e921ebd06965d8e01c7b33675af536d3020ac35cdee4635c5b6cad80713558b4115b43c18a03d89a1cefebf826b7724d46fd9a6cf56c4235b9cdd62464e131959c85ffb3245c165e65230ef5e1fe4a26c9f2768e7063868477d8220ae62fb99c0c8773f7910a4c4284ef73613dd47eef28daeebf4dca3e6b9d9a05ce3b7772ba3994a16e7671849b33245c6d533a268bc3a24a77e7587b55a73aa7cf0de9fa637847168ed331761bb6e0de3f70ce275ee56f10876d0859ede108da438d5259e58eb395dd369542167434884acb7995d6d808834a8f05217c8427bcc746186cab2508e11a9e70ad8d3048088bd4ac536221669ff672c44f6481f83e1b71889927ad61c84bb989a7bcdf4619e6445a8380ed332752c78592531986927a5b28c161dc6dd150c2a55572b741da028794760c296025125c72a1a5c1a6091c12decaaba09e5e40ef088c7ea772a730b2c51987789473aaae0c9d2a6653258eac074555e937ade8f676a9a716fd15793ab022bb5191900465872f4e8d07b8a07b26c3a0dbc875423d59e8840e729dd0d94c3ba1268eed735960fb10c7f6f94cd96eb639cd06f9f897ad89527fb7b910c416ab79740e73467e3143233f62230c06702908e1769ef051ce522e676a29c76c9682d37737e72dbc6623b45e0982f8361e97161be23061743508619f99a5e35c44e9cd424439c111efcb02f19336e2d073f70781c467f4d3ca59f740a6d67dca4619e6d4e02199d4d37866136a4ead8d339cc733349c760efe273284bf8383ff5aa6f077da284352783d08cb3e4961978d3044f01b4108fb44f0d39cf6201a26cd2e372a6e5893bc86a8016fa540e737abcb111dc6206c8e62c072c22a9ca7c12cbe90258c997473123c6993a04d29a64d87dffb3abc0fea7c0402ef8c96ea2e4ac573ca1f4f3c9338c31846be339c7c8336f9da436bc85df1e2eac74fd6c1c0b4c348d8c34978cb26e1715642b77bbe8f7bc075a20ddeb1ac3fe465b2ad560c23d5594eaa219b54c758a968fb8e3c9d689d4ea2f19c8f045e39a95607f4b5e3216f409ee3241ab649d41ac8d3da340fa3c8bbf35454e69e965e1439cfc9366293ad5fb9130cee8a61fa40a0c301a486b7f1d13dd056cf5ccd2e9d303ad679157533a6257f88b51b8c2c707614d7a0814c40377e8d575afa1c4436747c81c361d486c335411c9cb894f8368a015c9630aeb7c3184bc3a091ae1f5fe41019b321b2db63f56db88e7008d37a1a8bcea3ec77f4f7bb59b2e04b1c9fb76d7c9e9ed35ce27417373de695a3dbc8e1e79561e88791f43227e91d9ba42d6c64b545f8442dcd26f56b527de0154ea6bb36999a43f7816e2fef3d3b833a8bf7fece9ad7411c9cc6751e4692ab9c24e336493a03f512ddc8d7908926f99095f572523e6593b2d12325b5b8743c2b1b71ad8f93e069cee2c2f873a21f410f3f33b7d0eca2f13bbfe81d46927e4e92094e17f1c918ef548cc3f7cc9cff3b47a57bdd014e82494e82f475615bee9779eff31827c13d9b0463c2f953667903e75dd9d0f4e31c4ef783c48d0e44c091d6b5d53e7d2c5874c88ea69fe02498b249509d22be03f77ede946e4cb8c671f98c8dcb9aacf5a78e4c6138bdce713a6de3b49fe534398b71face1e3cfb8cbe7c08d732cd861833861f57a6dfa3dee07098099237503ba1d27759240fe6f97e5699be94373929676d529e64b50d378dba31ba4d61ee36e2e9b946e6d6a1f2baee48a89369647b9293ec814db2cbac64dc3c951bd78794fb5c56985cdc4f7fd9907e9093fea14dfab373fd9ffbc2c321e5dc6872725c4762fbb9703356d998df2ad57f115caedf859c4c6b4a971123670411c595e9b1399952bf5c09d09ec4f7414c685db9bd72ea572d3d52fcab9692971ca5fbd69d5452d8f2930692a150e952cbc4bf61a8d448e4d2d248e362f08526e9b3a0d588d16a511497a2ef4fd39a5273f11cb4b6c86e43e1df33e21070473411e7eee0946ed87156dbcb4f52b699ea11a07a24e03e959785378e81a13913b1d3cab9f1011f707b0ff1d359b3bcf45e3d93ec232b312a3d8b39d834d21bf5fa0c3e67906f9cbf8dda7c6d20bb8987617bf88c41187efb9b3c42c62042be034038ed0694180494774a7a3ddc1d878e7642579ac0d433eec0b6542478d212f3f29ac94bab9626c48d3541804827767461ec70607f9724eceb0dec4e1e720fa1e733f8037250964a41d946a07cb724942b0d94cd1e40e3cf818a81b74a0abc5d04bce725c1731f2a1d31f173d66387aea4a236582505e33a02e37be6d39d1387358291b1460aca3d04caf7e6024ace221323a320946291711981f27d92506eb358e5c2eebf0f1068df2f096da581f60eebf2947dd1e8592605e63602e60bf904a6a0658a815946c0fc402ec0e4e2a777fe5010cc2629307710303f280926bc690c6ec63dc29b726338241c2ec07cb29800f662fef4de870ab0f75e4fa0fc902494eeb8e6e0021ad75411f05e92046fb30a9afa24a6e682fd74bb14a84708a81fce475005bb183150eb09a81f910475bf4a9c80a36b5ce08d8de9ad741405fd8814e8d504f48f4a82bec280eef4e900bb4b7b3cf92e47f6802b96024e11e03e2609dc5e8fb502195865665b9d39e8b3562d4796da2d05788c00feb224e0e5be963a2307dd3229e88a08741f97842e552e5af883ca5202e52724a104099c7190b38c0f16768c9bdb6c85374b544260fba4246c6e0a1f5b4029fc0a02dea772e1bec1e6d41b0b704ebd9d40f9e9f98c8489a3724128c546e5ab09949f9184729305cad44b14053b973a29483711483f9b0b48530f2b0b1dd25304d2cf49425a151852fbc24b4170c53aa63a02ee2bf3194d0bff666f0581f2f3f3d9c717fecdde1602e51724a1dcadf879a470b348a240774a01dd4080fea224d0c197cc08c228b664661581f14bf3e9fa399b97178ba22709945f9684b2c1e3fac3b870f5697c84d07961cda8f5712ffef19cf8dbdf44adb85a0afa6602fd57e6331748ecc00e176007b68140f9554928ddc992a6053459b29d80f7b55cf4fe349abe99ee1cd510a0bf2e09f40e0bd0ce6faec0cfaedd536795f373ea0b6daa791101f81bf913519b0a30a2ae25507e5312ca9d9ebc6084bc286d61af03dd4f20fe9624c4d51e8801c447e637c217fe944b94c0fc6d4998dd458d34eaf2379745c1dc2605e63102e67724c17413ad030b28d12a27e07d5712bc98c7e1c795ed41f7d1402fa3583881a093c0ff3d49f8d3bbfd2278474bec5ec15602e9f725210d97701d2dc0846b3381f207b988acc98b75ee992a85075e8480f74349f0dc9f93e5260473f4384d8514907b0990afe60b90829d8d1890b504c81fe50b90070b10c82602e48ff30548c1be5a0cc84602e44ff20548c1876bc4803c4180fc69be002938c72406e47102e4cf24810c973d16e28b2c9613287f2e0965668f6b0b422b364d779840fb0b4968d31b360a422a366cdc4220fda524a4b00e98ae31b98016e9dc34165c145e2e05dc6202dcaf24817307898716d0f4db4e02deaff3a7bb692ec0eea69240f99b5cd86163eeed50ac435949c0fbad24786efec8d961a14f562c2540be962f4016e264c51202e4ef2481b4dd22a30417c27b3ff611307f9f4f600abab818980709987fc82730056780c4c03c44c0fc633e8129382f2906e65102e69ff2094cc1992031305b09987fce273005e727c5c0ec2060be2e09a66d2e28f15767dcb25d5787df94829f72be8f8b1045fb76b1f1f76e02ed5f24a10d3784148c9f6243c83504cabfe60f94470a10ca8d6ac1bc4c3e062b4afe46cda136c5245e2df3febbda88dffb209c77bdaf3608ddd37c5e506358c37943fc908abff73d0a718efc405bb01f4cf0a709f8f853fbbb222fb0f76876226b9acdc68be66d92a6968fb792321fad44e199b2052dff3f40ef46ed68a695f89304f4c70b2e29f8b902600a3ec5ff07c7914bdf84b80000 serializedProgramBytesString: - serializedSignature: 39b9e5a6f4f7190b2b4cad071c32081cf6e28fd5fce1a2e8bde85bbb9c92fbec1b906f73ec32f7e28350d05b98bc266f71caebd2171f4b617e39971e932a6008 + serializedSignature: b457924834fb1de13f77518e136d7548649205294582825c8f8d7be30647ac88c629d805010455b8d7df0b327cf5f7b6344c43218b040a3b941e0a054d69380c programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/602b9df42b374404fa24e7e4f8948f00.asset b/Assets/SerializedUdonPrograms/602b9df42b374404fa24e7e4f8948f00.asset index bae2953..d4fcdb2 100644 --- a/Assets/SerializedUdonPrograms/602b9df42b374404fa24e7e4f8948f00.asset +++ b/Assets/SerializedUdonPrograms/602b9df42b374404fa24e7e4f8948f00.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cd959c0dfcaaab6e46ecbbd9cedf39e8b766dcbbdc996655b6ed2c992ec73395b9656b2eed44eb274f65dae91a31d2484244002a143e825d40402841e204080a3b703420ffd80a386f7bd79e3fde6edfb766676f65bef98483fed68decc7ceffbfeef7bfdcddb8a94903f896df2a357748956d1247ac480181763f2bf56791c95bfce991bde2926e571487ef6c96bdbc43a9f27e167736299fc6c976753e28e7c725af4cbe3b0ba7e5164e4ffedf2d98c3c83d041f9979177252ae5433de284e81017446362898f885ef5d0940e4b805d895af9795cdc9357334a298824a52e35ca8f8bf2ca94ba362a9576efbb2aae2bb346e5b57ef9cca41891326f2989b56f3608f58f700ecbf4b1511f17c9bf3afd7f85febf56ff8fef5fae8f8b03debf421f9704bc7fa53e2e0d78ff6a7d5cab8f3be45fb5fc1b46e795daf22a794cebf09dfabea70c393bf3c881631ae995d6b2af69d9ef3564edd2329e46e7705c879e87eb2386bc4fe8f3f5fab8ca87c51a83c16e43f7dd8edc8a4a47cf8a661dbec760b006855372e0d88cf469d6b26f6ad9ef3364ed3518ec3518341b0c5c799f0cc9e01183fd467d8fd4a9f28b75d8067ddc8764ed33d81d306c3ee0e833abc591356b42871f34d8ed43e1941c38ee4771efd7b23fa065bf6ec83a64b03b64b0db6fb0d3f22aeb43b273d3eab0119fabc71123fc300a77e5c3f5d13c71e4cbc31bf5f1a8963386cec19e8fea74fc9471ff061fbb96e8e331749f9bcec751d8311406c716adc7b8115fabc161933e9e40b266e9639bbe7702dde386c3f1a4befe0c3a97b6367cd890e33e774adf3f89cee1d86e306bd7c7d33a7c0a9d4bf9d5b50ecbea1643ce19c3b656148ee58d1af22e3bf21adea5c3ab0cbdcfeae7eea07378eee3fa7c8e71ff397dffb43e5f8cc2b1bc1943de1b861e6eda9fb7a4fd0514761e85c1b1c348fb0e477edd5bfabcdad0b7cbb0afcbb9bf76a3a1877bec41713faa9f7dd6b867b33e5ed6d7efa27338ded4e1f7d0391cafe8f0e7f4b95b0eb8baf6196cafa0706ccb8cf0da72c8605b63c8bd6830b8a899ad33ec4aeae32dc3ae5bfad88dd874ebb8ddbaf0317dec17f7cbf5da3774d816e31afcdf60e83860d8de8fc2b10d33c26bc33ec3f65a43ee25c3f64bfa395737d7f6adfa98316ccfe8e3a00e7f5e9fcf35e21932f41f44e1588f19e1d5e32d43ffa5fad82972f3c5e328ac138561df1847e752fe1cd7c7dce77c7c62f69b861edb447e5f7f12c99e67c4715b3ff33674af1b8e7518f5eaa074c64c661b72bb0dddb52fce71cfe71bf7f7e8fb5f40e758ce8be8dcd5a34e7874aa5f45c8ee3564f7eae376e12d3bdcf0261f9e9750dc970c4e53c2ab53b3c1a95278cb9909748e757e425f7f099d83bc571d79f5af1bf2dce7ae0a6f1d77551faf096f1d77cd8867ca88e7d384de6e3cd78d78ae8bacffe03ad0f5a775fa784378db5b371cd90dd77ce2db60c4676babb8f7a6d0393cf3b223bbca4dbfa06d1f4f585542f5484fcbd2a64fa65a4add04256ad0aeb3fba47fa7194457c307fc6c56d1de9115d5841460e9b9f6a87ef11dd933da69edb92e4fd423bd5bd5679fbc6358097d25378a8fe44401ca8dc8df0cea764fc9f053aad70e1def6179a549363086d553376557efaafcf54ae995d18ec8c2372333f1b48c0ae4dd946ae7dee9671274d1cd67baa44c6704615486b84027e4f988d2f0a2fa9c519a6694f6ed32ec8e1acf189355c07179bcab62cbb57d52fe6f8bb35b23b3eb681f48a0c29de10a37994e486b40fb946ac37e36451e448a00faea577436ac4ca912e9b59c94f82c43a790814e4bbb96b143214b78c2768a94ead774e5100c6f63ae8576ff7678ef11cd796db19381e45ea92cc8a6f0dc0f7ee8b5f7efd979afca6bda2e91525d9a553ea6e5030bf29289a53912f29b5055559906454dfc091b7ed5e5b85842fcce7dc3eabef00950ad6a266f022416086802666494191904790a8475a947a1dc9c50cae6a44f1a84d528c4b915a89f9a14e40a1be4da5243f62f55f241aebd6f571632fcd809d61104fd74a008ceb211542db26bac04dde6d74559cf9e95d7fae4fd19559643b8e353ee448013e6bd333fd3d9f7adca324da9c075a8b95868dc7374a356fdd454d913aa5e255431a2a392aed292746948ba068bf569b07eaea1789da1b8ea51da23abb2f9891af5ea2d614e836be34a4a9fbc979a28caef1bf36cbea1faff2b722c0916df7cdd4151653ee10e0b943b141a03e502d536178054596873013072915757d30316d01e5043c5b5988a6b49c171d552712da5e26a2c38ae3a2aae65545ccb0b8e6b3615d70a2aae9505c735c7966355d1d05dc21c9bad950acbadab6cb9558d2a2ecbb1c23faed52ecd4a3aa7ae5139b510e9542eadb7a53aa4c45a5baa8371ebbc7a9aa9be864ef5062aaef5545c8f141cd75c2aae0d545c1b0b8e6b9e25ae940aec29a137e3766a61febcc9e6cf6ab474798e1d416273275fd40fd516d9ac5cbab00828a79e6f4b10288e124fb326488f0c73c6cddad4d56135d8929539aece2136d7a27c4f40929c57eb52a6952ef9132f694b3c55d5c27827af668f0549e82d2aa1f995a19c620155bf6da5eab76d05d76f0ba9b8b6537135151cd7229bb3abc0d28fa514d6cb049f680cdccb4c8b7c432161fb988b6d2905f476504a994993a69366892d69548ca5e9c066e70fdcff8ecb676f4b7b66d4a0f0b47cde36df903fb960fdd676838c3da97609b39f59a84654f22db5251f106eb6296926dd2e3ae91a29bfd85d04bf5866130eb97f8fc81d6ff98cfcc9115e470b5f4e69beb7089aafb00907defb22f25e4909de1f51f02a8be094ca98a5ec6a78bbd2e18b4858dbb6d54c3b7ba63b28ec7d047f15a84cb6da8650e5bc2b2529c6f20d4e153606772870117658d15c23820d95851d265b63f37a207b2488d71fa6bd7ead2dc9549956cac1e70ee9544f09671232bccf1f0d9c482dc23ef0ec173f952ceb6cc902634cc78465d2c15a86d6d069b3de261d4aa4e3d64c6e4a3e484b7e84aa575a2df5ca9b1516e179ea950d36e1e0ab2722faea464a705b44c19b6c82a1263c59849af051ca474ed97c04621d12f026c20d193cacde351897deeab478205fb9b37f613c6933a5c3699b0e5013de90bf69f9174c17b87b52dd1946ab24a555bb4d2b18761c91713f2bcec940b87f4cea702f548c8f51097dc692d01521137a0b25fcac457822a4f0ad14ab733656307e05139977d594e694aacea785bbc0230cb16d54bce76df1d629ef9d541e32212ea8977bc279ea762abe0bb6f8aa94a7762b1bc3f95e13154f872d9eb9284764e32bcceb53949b7416c14dd236e15065c0dad14855c60e4a725754c93b6d929d6e7bb4627d1795c6dd4104e749c2668a454f5416bb29c9bd5125efa1285f8a48792f45f97244cafb288d9f88a8f17e0af295a8900f5092af46957c9082712d228c4354f25d8f987c8729c14f46147c84127c23a2e0a354eadd8c9a7a2d94e4bea8928f5924a7d4b011bc9550fa190cb32755bc798b5bb6d4b5f6f2e07d9264628ba02710a26849f5058fdbd218526220885bf6d349dc4af97b26a2bf9fb009869608b84ed46e4f1b257ca808c24f52f9e976d4fc748a2a67872396b3a729959f8aaa723b25f9e9a892cf509e3712d1f3ce522a8f4655f91ce576634570bbf354161f8f98c52f508227220aeea0403f13157427a5f26444951fa7044f4514dc45b1b81395c5454af27454c9dd94e499a8927b6c92611ee5d92098f3cca3f45282ef46147c8962712f2a8bcb36c9304afc5c10955b68c14f502a3f1f55e52b36c950cec10b9851cbb9ab36e15009be1084479e4af01ac5e3c5a83cae532abf1451e5276d82a16a7b3988e03c75e00d8ac52b5159dcb4484ea9d9ded22ff4808187f0333a9f23f55c94e3c4f6d6fedb45be651e54fc542bbe8fca57af16215fdda2ca99cf8d58cef4535a7f5e11b41ea0847f7e11846728245f1011c920a5f5171641eb214af86b45107e9b2a71be286289334c09864d7972c6bc4f18390af7999bd4d8f7b82c276ec88ede33f2813e95afa0070d57a8e7f25df15ef32e420863e5539495efb059d924dc097bef443c9eac77ac7567c2da54f9e85aeaf76c18cd9fa6347fa74df38d81353fa535f712c6eb66c368394269f92541bc08c71ac68bf073f9ae14cb8b46292bdf65b3f264402bdbd5b85279593a4659faa5364b0f105ed7a3da108e4dc3baa57043593ca51f87f9e3fc6543b12c1aa72c7ab7cd22e808d9c7ffa8128f4a457f29c1ee291687098ac37b6c1c36193e7c4cfa1a6ccf78cf28ffce898cd2fc8eaca84c5db34b6bc3e8f90ca5e77b6d7a1e33f4ccc689d3e89cf2c129d981beadb8d19ad2e1c54a8749cabe2f0b93c370b96ea68dbd84f7da52cc9a6a8ab2e8cb6d161d3152cc4b12a71ae48e3ea9cd3d71415e1d52eb3c9c350bf953a378697587b2ec2b6c9635e7b5ac90542a8e15d39415efb35991267354540b0a2b0f6628eddf6fd3be35507910a4e62d6599f02c65e3575275949b579d75ee789f1f473fe8a70f8a3edd4f6fbf7f679be4e9bc24d3a56a988cb47e46dddda4ed81ab0352e2b4b20be4669fc9df3af15eeb95cf422d1f86c35d8ac357d9385c61e4e0f8b67763e25e551a0dcbcf5b2a95c3d0c0757a1822f728221fb011d969787fabb2d5b1cb6db574cbb0ec6848983658f6a930163c4759f0d5360b7684b2802e656cb61556fe3c4fe9ff35d153c0a6bf7f0a84b5e06d94055f1bc402ecd5516b80427b992f50167c5d100b30d1a816149a8f5fa42cf87a9b05d0aa0ddb0b1955db440deb3dd882f6408a5583bd44d9f70d36fb4e07aaa5cd567b874cb9ecc8c083acaf5fa6acfd469bb54703597b4cd64c03bac76c6be386b7cfafb4a891bf8904bc5fdaa6ee849676a7aab5e16c4aa4d46b5be9fbb5acff6e8410fba8f42fa0da7dbf9ef4df9bf09b04bd3761eecaa542b7a9f3b3c2d66268426d066c9dbf4df4967c35da22579624adde637bd82cfd664855f705ef8a947aa56e6b81dee4afc50721b659761f0abf3d9723c05db39e8019ebec926fe7cb218ec9dc3da012c569260eea6932dfb8fdde2fdaae04b86f531461ab4ee71d24285e2675910ae3963555156948936fe10437df02ae53de0a7df941f5d8682c80a511b06fe504b6c802ccfeba4d1cb0dd44d8be8d13db6c0fb6ecd67d7180f46a6516d2b7973a339ed2179d45adf1f02a81bcea3b38812df400cbce5c78b7861c8805b48f29683555867073b2aa58bb00fb91a69b47b005529bb8ab76749954f206cce6927ab5bcdc34ff4edcdc4906ca6cf6bbccfa3119a25248866aaa24037b78922c61b3bd087beb3f0dbd88ef12ffbf1bf86968e07f374018d6109cd2eb7b384baf653ac59cfedc98ea33e79b358177e40c1da26c3e5ce729d30e0631b09072ed22aa0cbe9713e7521f9cdee1df1d7c286bb850ee45283ff420517ac7a8d27c285bb8505e4628bfaf1428fb7529692eabf27a25234a36af5c87507e3f27ca959e1acebf4eccbef11dbf52731582fa03e55509ed8921ce2710ce1fe4c409dbb20ce5efb2150f579a0bd72284eb873871c1d6177d44e3778a0fdc662e70f310b81fe604d7a8b3ed1099717b3c330f8c154b1d17cc4710cc0f97022655479b6520234cb612703d82f9114e98e11a3cbb63d8e0d98650fe08274ae8b44f89dc0d9c184bc6355cd0ea11b41fe584e6b61271b91864a69dd113fbb9a03e8ea07eb41ca136c7106a2782fa63e508957114880dea0504f5c7cb11eace18423d8fa0fe443942651c6463837a1c41fd583942656c7db2413d86a0fe2427d41516a87eef52b0fae9612ea47b10d29fe2441a6e5c9d717488ad41ff2442f9d39c281b344a8878508174650fe7ce52170f5c15173881c0fd0c2738771a7687f6c309312d9ce5b1136ad13fdc16bf2cbc11e1fb594e7cab35be1179d38807a123e8619b926845607fae14652335d811ff41b86508e5cf73a20c3f11c1586bb30dc375209c1fe7c4099b203b917ab793eed21b23b2a15bc085ae16a1fb855264ea600d1ec6de385bf97818a1fc454e94502c4d18cba5e2387a390701fb254e6010d18c08b09cb878d07671415b82a07d82131a2c7deb472fc4c6b78c9b8d90fd32273268505313aff1c55787f0fdca83ac224a36b6d8c285328350fe2a7789e75410ee7784c4d7ff6a10b44f72428375067866107fc98ab3a14ffcead80604efd738e13d2abcbd617b7d8bf7417ad81603b420d4bfce5dcd64bf9cc8fdaa99128ddbb0356c56227cbfc1896f8da59af1eea8417fdf26eba8361bda5e84f6f552d4e0c196a930d6e06c9dbccd08e56f72a20c3f72c3b82c80adccec46387feb417a66fc17dfaf45287fbb1428838de4c471a47b1742f93b9c2861fd16d5618c5f35b31461fbdd07e981255b2fc196996f2194bf573e35f6de1866e62684f2f739514257cb9983cea8e398eaf138ab2118bb8ef55ce06621707fc0092e7c5387d10fd99a3ad710ce3fe4c4b956787be2deb7b7fcd7ed30d6d86c93fefb10dc3f2a67b8715c14751dc1fd634eb8f8bdfc5135f8d62ffbdf251cdc6043b806217c831321cc75381e3922c53caef6620361f11bf65d8890fd0927b2f596eac779c315467cc6c419791c553ef8702d42a94080ff941370b83626e330065b1b732b42f9679c2861018aede5a5f8ceee5423749fe244b74498cbf5e82d2519b333dbebc52710c83fe70459d86a70c6c15eb65afb2042fa179c48f18ccec3b3127735c2f797a5a860828d48c6f1edd83308e55f71a284850378d54fb76e3f320e606ce182361f41fbeb52542d94ff39aa3bbbb333562d6fe702791381fc1b4e90e1478218ab15b691a02e84f36f39719a8315cee8248c4f3ebc2341a710dc4f73c29d27a8d78ec6f42df1ab661208dedf3df812d3698c330e99b135c6cf21907f5f2e20e3d8ab694320ffa15c4032be9dc006b20f81fcc77201c9587bb381bc8240fe53b98064ecd3b0811c4020ffb95c40328e3eb281ec4720ffa55c40324ed1b2811c4220df2c17908ceffeb3811c4420ff951364b8919f382e383d8450fe1b274aef76ebb95b9e9760e357b64ee10604f1df4be18fc1a6bae2b85df6a308e55b9c28615d93f9966b7ca7b9aa10b6ffe0c4167e088db1edc836847609e1fc4f4e9cb5162f8c5f7dbc18e1fa2f4e5ceea098b382c7d9a9b944d3586cf01a11bcff2e9fca238e7b426d4728ff87bbf298bcdf74019903315e895b89b0fd2f27b6c2a6f6e3384db01321fd4c293275b01e4a1c17d8df46286106810d2534cef0e2a72e91bb134f1cdfd19e8b0026380142d4d9c5a19d320bc7af21bd00c1aae0f636b72983bd2eeeef59af40006771020cdf1389e35bff6711ce4a4e9cee9821d53a8cfb94e963086455b9808ce394e92604b2ba5c40c671ca348540d6940bc8384e996e41206b394116d67f61f44db6fecb5584b48e136963c85a7c5f0cebf0d308e6ec7282b93f8630db11cc39e504338eadcb3482595f4e30e3b84df00e04b3a19c60c6711173338239b79c60c6f1eb9c772398f3ca09661cf794da8f60ce2f2798719c683d80602e28279871fcc2dca308e6c2728219c7fd544e22988b3861e28551e65280b8cf6d2f47101773420c370d16c73d008e20944b385146dbbf94b117c43665d183d02e2d8597065b8111c72fa94822948de535fb13c791a31b0a674d9521fc648ef056652c98db2fb273d54de29480f705338a6cbf3c3f278ff0d44d09e4aafc0d9706d7e5af2d3ca11666b589bb523d080579034af6a8bc3aae96c5a4e175fd65e012f3b54b247db6b44be65d6693ccbb823399f0dbca249967137be7e97cdfc4930cf4650c49f25b2e92c4b7ac24f37c7f7432c00ef2c980ab181cf694feae1ef637f5939689fe24b93314b86f426905fe009a9e17b0cabb4fc6dca78eddf2ef968a3705754f02be24d1a9709aee57358e878f8a517de686fbcb047fcd2f6d79c299c8b295532345cb697e163985033c3f2875ef57f420d4cf527ffbe85c5b9f275552f076f7436dff0a48779decca4d1b95d3f7c8941fd019ab43de3ca094829faaff03ef42305587f90000 serializedProgramBytesString: - serializedSignature: 572504e1f787465563a9dcecfd7848f9223f1ade317920c57cb0f402e337e5325adb7108c70f8e2943ed9bdf043a2bad47929631ddaabfd5049303e7b5583709 + serializedSignature: 841681616626c747bd0527b6b5ede80a800fa57b9552a63683869d18077d0d258e823a9afdf490c0193d06cb91f8b3aecc9c9600b63c45b31c2d270833a6f80b programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/616453d4987e26b4eb66ed8347b56e27.asset b/Assets/SerializedUdonPrograms/616453d4987e26b4eb66ed8347b56e27.asset new file mode 100644 index 0000000..7151352 --- /dev/null +++ b/Assets/SerializedUdonPrograms/616453d4987e26b4eb66ed8347b56e27.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 616453d4987e26b4eb66ed8347b56e27 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec5d077c14c5f79fbdd07b2f0a12a4452909109a0212084d5a8050141002091009c524342bd80b76c4868a1d7bc38ebdf7de5151b177c5defe3bb333b76f37f3ee6e6e6e8e5dfebff0219bdd9dfdce7bdf79f3a6cf44b289fd6375b37f4d2593c830d2834c21c564295962ff35ccbe2eb6ff3977e2790129b7af0becdf45f6bb6e2433ce97f4a78bd5cafe3ddabeab2095f697cbc93cfb5acade4f2625f6dfa3ed6f4bec3bfa74befdbfc40e6555b33f9a42f2c904329eb4b49ac78198ca3eaae0cf2caa9755cbfe3d94acb6df9630a16824d9ec554bfbd764fb4d057bb7d8165a849b416631b516dbefe6d9df9493321b732e43ac55ed42c2fe20cea507bf66f36b77fb7f6dfe7706ffbb16ff1b86afceaf390986ef09beab0dfea60c6d8af17d2fe71a19635f6bd88fcf04f7f4db6f78b8de0e5e64610cac3efcda975ffb71ccb31290bf26bff68fa36f2c8c01002b11ce6af1ebfefcba1f97f7ec24e31fe470646d047894cbb1409efd41dcb5c17bfa6ca086ee221dc7f9d2719c938e910b78faede0e107f3eb107e3d8063db619ad5e3cff2f835378e5c439def58da099bb5e3cc58c6ef87f16b3ebf0ee7b24de0b29e03ee756511693a82638ee7719c2b792ec2d3f7ebf9fd487e1de54bafd13cdc79fcfec004e549c4fe844c053c8e0de0dee6b1da9c185822dd27fad27d22fff62c87c76af7f8f401f627c515fee0fc04f410f6db8d5fc701ecaefc3a1e3c136939c14de7091d4138f19d085fe08499286c21962c93f87522bf4e76e39858e67d1799c475bc00dcdb9c557fd9c7d5be71b812714ff1e90c7910dca8f2d00d849fcaaf85fc3a0de8f67b02f21de484ad3d9ddf1fece85b638bf3bcc6369f5cd3e3e82d6c6f32f1dade6407b7663d07b7662e0f3fc3b9b7b288ebeb050efdfe421f6ea10fb790e31e4fbc79309e9c33f97536bfcee5d72297bf4947f26787f0eb1c1ee714e2f551228d67b9dfb610dc27ca5bac349a47bce52ce72e32350ea6f8be985f6b27185e8429d190793ebfd64930ce3afcba4023ceba8e2dd416750b610b07c7c15ce8f05bbb1990c1c6a9d386df97f2eba1fcba88f37f90cf0e0e4ac00ee2c952e67c576b1348032acbadfc7e31bf2ef1ca62d738bd325d943a9922d338e6c5e09e5ea7f3e71bc13d95f507279ebac2ee44997f984fe6727332dbb570f65dfd1b816d24f25d2cfbaa74f4abfb32d76f277fbedc27db7c57ee5a3bc0b7428e44f2c34acec50c1fc7331c19ea096e57f9c25d02eee915e81be1bebd9eb0ad5ee039fdf652704fdfaf4850d6c349559ba538b340dcb39cb8eb73ff5f3f87873d8254cd7bb26fe97526783693e3091f7d24a95a8e897054b7cbc03d7dbf3a41dd8e92c847e3dd1ee3dba389d7ff14037b1079e1182ecf21c49bb7445933c0fdc612759435ce7d2321cb5afecd6cc0cb6c47be064ff330c7f2eb89445ece1e0f78e0f9919ce0c6dd56c87b1c1e57c36a3ccc493ebd2b5d9cbaf738d786c28f9d4cbc79c61f963e3b855f4fe757e1d7cf74c34e1171afe3d733b86c7388c73793d3c0737a2de2ef37817b1aee5417bb85b051d1f613b2cad253c4237497f980587676ae1376f2e3fc7ebdc36da3813ccd8b7d32ac25b1ed772faed75ce2b5ffb91c773dc7ddcec38b368ca8f7ce03e93c8fbf3bdfd5294fa4c506805b1bfc9d888cb1f8b8d88927da1e12ed67eedfa2f534fa77771e2f489768dded22f08edef3f42717124f99135316ee1749fd38faf400e1e8f5320dfd63bdabc1af5770dd4a88b78dc8eb0c4d8e8f8175a5c3532b616f5739df34156ddeab9df78d857d5c0374a27100fb6e2cda27d7f277b00ec7ebefacee2a9e5dce9f95029b11f5c5cdbef4b9dcf7fe3a80217b7f3d9041f6fe06fefc0a47f6a63ff0e737fa74b9d027eb42e2f117e4a6aaba8afa7934ee2b15d2f266feeda1beb43cd44997660531b06e91a765f339fcfe565f5adee64bcb4592b4bc9dbf2b03e976007fb65892be4b000fa27e77079296e2fd16802b7b7f279041f6fe2e6f5a36dfca9fdf8da425941fa6e53d55758d2cf6c57d550269791fbfdecbafb2faebfdc4f5e314f7ea0470855ea7c6c0ede5c3bd2601dc07f9f58118b80f21f226139fb075d1b7b594786d9ddedb76db72600cac8789d4d65b89fea64788d7d61f255e5b5f46aadafa63fcdd616efa1351e72c27556dbd02d88928ff1f0761a0ad8af74f005cd9fb27810cb2f74f118fadb7127ef26922b775283fb4f567aaea1a29f7c57d6d0269f9ac8f67c16f25f1b657789ba9b5904fd48fae22b1cbc6e71cfca35ee7f7cf73bce51c7f33b8a7d715be7857f07879bb600f511fa8c79ff3facf1ea2dfec05e7fee846fcfe451e6eab2fdc4b3c9cd0fb151fffaffa6c65956b6f515d5e06efa06eab89b74ef21a7f7e3848abd5e0194cabbc04791532bce1e36f25c7bb0edcd3706fb9f21f23747c935f2f75df3516f57a91bef5801c6fcb6d85c90ad24cb98e24747e278ece2a3ee908e2f549473876b0e7cb31b0dee76176c608f321bf0a0e3ee0f847126f3b44d8e947fcfe28dffba388ebb385af3e19c821b0e937d727a0ffc7fcfa09c73f9a7f7b03b8b7756bf3bb13575be25cdb88f261870fe75357aeb5eb7ddf3c9f803c26def17a70e418e2f511c738bab57d98786df7b838f6f419bf7eceaf2770bc35c4db1fb886b8be18ebc78a17570cbd22c7126fdf8168eb7fc1efd7f2f7bc0f2c72bc2fbc681f7cc9ef8ff3853fd117fe441efe2b7e7f82373cf91ae0d0fb6f5cdd982cf4d9b7e019e78d7ce7f293c9c703232779e326df136f7b50b4f94ee6e16e02df410ec47b51bf3ec5a7d3a9fcfe16704fafa7f970455fc497bef702779d4f5ed1aef8995f7f72755cfb0df806f0497ef462c6b46981713affe656706fdb74e69a1818e25bd1577226c7b80ddc530cde67931923df46cef2f17706784eaf67f3f7b7837b1bbb7d660cf9bee561cff1e9760eff766602dff2b1ddc87a9f6ebc5fa53df74ded37c7c012fefc175f1a0a9ba5781b24e9ba01a427bd3f8fcb7007b8b765d87b080ff72b91dbf6b9beefb778bfef20eabcbff1ebef3ed9ce27de3eb03ff9f52fdc26c9df3ed92f70c344e5fbc327df053eb9451df84e2087784eaf17116f9926ea3bfff0fb8b7def459e92cd018895479af3ebbf24691f4bfe035889f4fdb470aef4cf64e3b42c8095489c2df977118d383300562271b6e2df55d388b33ac04a204e8bcf0762f3b3ec6f3b88f1d07ff9735e97b344f942cb796a4777817b91a6dc8e3af0b2cbe2e38f56ddd8d8914b38e6dde01ec18ca90bef23b41af26b03f7fb5c5e47b7785bc46ac2af8ddd307d789f80d5945fb9ad5bcd40183e5fc5e23619b994cb7e0fb81769cfbfe9c8fbff2c6e5384c66da771672e53e4328e71af13bef3175e1923a0cf33721948678edf89fb1036b5cfbeefcefbb5acd64e3c5d844fe375310bb623247c5a7bf0eb9e31f4e7e3b8565b9c6b511f8b175fcc3cc1b9da87b793229b88a76cb4f6e2f6b10dbc17be82de5fcec3df07ee6dbc2cde0760b5e3d74c5c572947ed39ded520ede8bd687f717bb0f6e6365000de0bbf42efafe1e1ef07f7f47a2d7fbe15c4239ed3eb66e2cd339b11bbb0affb084e3a2032764c52c6abe5324a6db3933cfda2e965b9df741469d1995ff7e1cf797f90c5c7a7d8b81bffa6bbc8bb5d789aedef4bff07bce9dff56f5f78d1ef7f05f1d60baef085dfd7fb5de44a1efe41c73e22bc7fdae27393501f625fbb8934eb16c70661585e1fb0f83c57ab871bb61bafab587c8ccdea89dbb4c5fb1ad1fc0be3ec4de2fb835c053c3e7fd5ea1b03af9f021e1f77b5f6e7ef793dd9e2f3542d3e3fd4e27da091eb88776e8418ff90b429ad4171e4a0cf06c7d107ca2afacb7d79309ae724e546cc326f08b0038a733dc77d08dcd3f792722e262ef7dda433717db798a7d7053c13654a6b92bc8fe7f93c7213f1f6258876e28dc43bde4aefed3cd9a39aa34f8f8e402e7a1de1fb6e03b8a7d71b5c59d9df148bcf7dec21caeaa15eccc8cd2e7f83ea816734ec3080057d0dc7ce11e5a1f08177f2700f837b28f72d3eb96f7170b2f91c8568be86e920e357965e9dbcef2262bce711c97bfafc51108e5e6fe3cf1f03f75436e11f795f83359c5fb94e169fef1bb99b78f31e2fbf64ed90a8ef8ca36754b63b38f6e3e0de6fc3c2d66ef7d9daed3cada63b328834b3843f1a2dd7c73ad0a7d79d24657a5963bcf626ec2c9e9df414f5bd4efcfd138a7623e6e809dbbf95e33c09eea12d6c04f734fe8d8edcbd4439c4e5b1c679398ce22bd8843f8fb37bfaedb98a36c375b0c4fcdfcec43b4624de8bb9f357f89e8bba92b0b9a7bc36c7eca936f8bb9ab3b483c5d51ee859db873b118491c93309c863f3d25bd46327f3eb146f78d9dc5babd0970e73d4d341940f912d121dc68377408754a55dcc724bd878bc79bcb1ca2351a64dd3c068cd3134d69ab0ba86c04aa4ff40b4db34e6455bcd005622718a3ae1411a7136065889f459d0be4a58cf1363dba24ca3752ad83f4aefedfcd7578c378af48d336fd5e2e3bd169ff76981797a5611bfce21d1bc71ec76feec101edfe38af1f1395ed63c7ee5f3ab22f712ef1848acb9107989c51593dff90e661fd1ce12f33f850fbc8f78dbd4f739faf617be81cf37b5447f8fcc7f94f26bac7af5a1f274b64ae2f0b808f98ef70b45eef7c97f3f979f8ff989b9a1d6e218b22d71eebbf071d8015ff8e212735db6fae2dacae3e2639fd6d238389c9fc8033e9c071c9c01c2e6443920e683fb6d43605707dff0390a56858f2facddf420f1960f0f2271d16f2a13485f3e4e1eabdd149559b42f5724671331ed7d951c33ea4f1ef271ff90c3fd7e4ff3f0abe3700ff3e5ca38b67b7802bc1d1187378acdfb30230f136f1ded6147f6fd2ff086b3f818b825c6ce2ff7bd1763d8dc07447d5a3c7df89c6c6b0dbfaee5723c42bc3eed117dee62a6f171445a97b68e4d1e53d493a375a147b94e4f837b9beb81a21ce0f6648931e3671c9906fee0c58b3cc6df3f0beec5778994c97b031d93e5eb048095489c6d1d5d07893cc1c7b52d3e761c79dcc589083e64739f63c9740afffe09e2b5e9279cb8073773b0068bfc2bece6e4d83a587c1ebbc5c78e2d218b488f275d39a36d7fde16b2ce70b1a33605e6d29f28f2ece980578125e69f0a3ff31490533c7b06e09fed93e1196fbc916789b73df8acc3cb90877dfaf0ef22cf116fbbee391fcfcff3f7cf817b1bef003effeb80e39deb10ee4ba2f9e005a0873fce1738261fffb64ee5987cfdcf103e7fcbe27ec1126d83f53ebca72569226c2f156922fc5b1cdb89f0765fb44d2ee6148a71dc677cef9f01efa9adf2b93e165f2b60f1b4b3c47ae034e91bd543f82831c723c935fa9658072fea80b94e3ae7f1f90f79db89278f1231e68fe551310793f3625decea3055f43d5de4c431b48df37ca868e7f2fe08eb1bb538c9bedeb463f7206dc93e3c3ed16728c63145da1d98603cb17814e389a2eff345178bfd9d8c1fdde4841d25facd2f77f41856e83c1fb610c7b044f9df3146dc1b38de551c8f976f96181b117ddd7cbc28da1ff212f1d62f5fe2ef65758258faf1f1a9a82dcbf277acef6f70c2fad76fe7573acff3b7f370629c9bf7535b62ded29bc45bb711733b63d56dae8d6d23965883f12a48ff571db9868bb4e03c5ad781f7708e0c9f471b790560bcc23156f9be7d8d78e709bd06c2c3bef857f8f56580f932c77cde87f93afff605702fc2434cfefd48ae9725c67af97c238bb7eba57d5ba2df4bf47dcf21def246bc17fdb877c8df5b621d457be47bd1f77f9deffd9dde70515b78d1670bb236f175204ee1cf79dfb625c68fee71bfa3ddaaecd9dd09da10c4a7b2bc41bcf352dfe0bc6fe2e1ef4d61dcbced64f131649157aad8ace0eb4e70af997762d65bb338c6e5c963585b015622fd5762fd87a813bc45bcf5b6b79c74182de6713cc2af7c2cc67acc8b131173932f02f7f1387b20b6ac166fdb47de26debaf6db5cb6350eee6861f7626cfe89d4c5cdca18e153de25de7903effa38788778eb5deffbc28b79dc1df8fd361fe7db1cbd0e14fd164f92aa65a408571bfc4dafef8167ef719c7b805c30def788778c5084176d4051ef8cc3910757f88aa77c185bdd341825fca3a8335eede5cf7a98cb759e9a1c31edfc590987b6ae63c4bc7fce89f58c2be718511f7ecef72e5e5c82ef0f7df6faa113e7d81c077fac28d3852dde1d07dfdfc6df4ebc6dfced1c9ffbc8685db10df1b4f1c709fe9f279e3a7cb47eff110fcfeb3cd136dd47fcfab1cf6e3e76e28de2bee0c5ad3256b88378f307e739f2299013caf329bf17e3c02ffb9eb70176f7a2efdb4fdcf48cb6553ef1ca65893e7ae13f84de2f27a747cc365cbc348e6557af11693b66fc1ae7f97891eec29e5e891357826d8af1a21f58d4997c6d8ab8f1c8fc2a5f9f44c4382c5887748aa8f7f0f236f2998bcffe8669f039f1facecf1d990b96f9f0459ef98278f3cc174ef809c20f4c00cf6bfbc2fcedc58aeeeb64cb5cc0e7ac5b6f8377f4fe5dc08d6803001f1d4dab6d2ed6a9a21ff91d5f3c1897efe3710abeb4e21ce7c5679894c35762a4b9a8d3d4f2a5d797bef4fad2e1766281371cfb2e015f4bf85873e42b8e7b01b8a7b8a23e94e81e68d5f877bc3cb53e20de3c172b7f8a35607cff1c6bbbcbefe9a26ec77da8c5d75345e01a1ade2780f627d0305fc791bf8887fb9678cb9e6f1dbd26f175f093443f0cf785ac6d12cbc63ef5e17fc7f15f05f7f4bd64ef0e4bd8e0975e0ccf7a0bb1aee47bf7fbe89a05be56c1fac27d77bab0d71de03b7a2fd66ccd219e7aa8b2affdca89c7bf0eb9509495a23f657d1cdebe7670fceb4e0b0b1571bee138dbf9fd77cebd58976af17531625daac5f988fce0e5c1e275bbc88fc0eee0331ad6bfe6348e6cd26762ffb69f7c76f893a3ff945c6e23c26f0a3b3c23765c225ce467104ec4b5d37d16f5f7bf003d778267f4fa2b97ed35706fcb36f51e1fee6f3cdceb206e7afd9d3f7f03dc035f13f98378fb2d05de5f40a63f789c7c7cddfad117c79fc45d2b43fd81e81bf904bcaf0de414cf0486f816c44fc47ab037791a2cf3c6192f0d62e61bb1eeee6f5fbaffede839ad9b13e77451d7fa895f45dafc4bbc754f9e5696e0e33fe2ad73fd07bea3d77f88b76efa8f13eff45ade70a24f25c3e2e1df02f7f41ae1cfdff6ca9711f1c9f98af7b9056d70a74f07b1eee979eff368ffcf2f5edd62b55fd16fdf8913371f5f89d6012e8a93d6ed7dbcbe00ee6d5e0f16e5c8affccae5cbc8f0e6198bdba67507784fafd588d73fc5b303b1362d8e1d50786807ec9ecadb287c7690c1cb51693f5d9aec40e46bd80f62fd99609afda59766331ef7860b439a457995f57be8a6593b879785a22fe36fef7719359174e0eb2f336af9ecab16f88e5e6bfbd2a1b613dfacb1de70d174a8e34b07bed62ea32e920e757d72bee27d9e521feafb3ea3bac2f79279381960fd986a3a46e37e32357690217c8048871ac433d790dddbe9768868db76e2cfebf3700f837bfa7e7f1fce7de05ec82f74ffd72b634623c4e6781ecf68ecb3b9c6e03b7a6de2b339bed66ef6c3de70515d9bfa6c8ecf0dca6886d85c339f9caf789f07c6e664df37d0b459b0b659d96645dc49da6cca6d5ecccb1676d0d067ab0d1dbb2912ed3661f32d7c36dfc267f3321ca1bf281733f933b09e99fd6dc73797afff99db0ae82d0b4baf600d36fb9b7e9fcfbf9f0ee2c5c26e02dcd0e79db8eceffa7416cfdfe3d8fc3b5adcb1abc5c38139ddd1fcb20791e6e7082f2b33f6f4da6cc69ee03b7a157dce0f807b5bf6796779c345d3b12df1e6673ee730632f22cfcf7bf9e47cc5fb3ca5f52f317f7e068e99ee3cde47f415f17d7033da91dd278ff3fa4d89d83f4bf433c7a9a346c495d79723220f8ab6c839def83332111b17e55d7b9f1db407dfd1ebde3e1bdfdb917b7ea5375cd4c63bf86c9c8f396574446cbca34fce57bccf536ae3a2bd370bc74cb78d27dbd60d9a3d27dcd6e66356fefa7bb48c027dd755eaeca2ceb601dcdbb678d4053e6cf15d67af8cec9e5e45dd7f23b8a76d8d1d4e9a2ce4fd90472df37e27d6594575bf1ce156e896ac0dd5d2fcbeb3def7d1b1d444f355672f4eb4ade4f339623d0babd3c3efeb81efe855d4531e00f776fa1cfa85375cd4e788bafe5be09e5ee3b5cd849c0a6db3ff6f69eb5f8fa9ea27a2f125eba73a6b7e5f4bf3fb9a7adfef6efa47f33a1fcbcc106b4a9f02f7f4dac4cd43a29dbb62ac370eac3d1d11fe3b5e7bba25f1fa09de7658dac81b2e0ced69d1079d91e162469f55035c0afe2782f0ff2b8bf0efdb6bca5f4dedfb2a656173c4c6457ab6f07ddf027c47afad7c36cedbe287edf4868bdab8682bbe05eee9355e1b53c8a9d0c6fcff6e5baab6e1d94b205678cc178bf8fe5716ed1afeda6b7effff9c7f4f9b11b4af22bc3e1fa9e7fd0ead1f88fa7d92f5839539de7061a81f8872059e19f3ffda1f8335286c1e94e5ad3bfd2f6faa7defefcf898836b27f0e83bf7f11abdf88befd24eb3787bfee0db72bea37da7318fe9747939ec3f1bffce8fd5ef4698aef3df31b689f259f5b97e83882746c818f07b2b33c14bfcdc8e2f25c0ceee9751ffe7c23b8b7f3c9d17cffbfa3c5f8471ebfbe183b6e811b1165bc98cf7f23b8a7ef1b033cfafe06457dbafaf4e9ea8d3722ea1eb1f6b9e73e2ac2f715cee8cebfd906eee9b59bab7344d4397ab8cf32f87ea519d9c4e36ba37de639206c0e084baf3df9371bc0bdcdffda021fb6f84e9c59fc24b8a77289ba4e6ffe9ecfc71773503372810cbdc1337aedc3bff900dcdb32ac29746c606d1612575ffedd53e01ec6d98fbfff10dc53dc6ddef019fd79b8ede05e700c713ef2e2f8e5ca180074e47bf6b0736462d9ab387f7104b807f9f618df5e0ef1f062cd4b8df0b23222c6fdf97cf68cfd88a7eccee0fb0c25bcce9bcf5f8df0fdb433c41aa5a7c03d0d07e65b2baf0b15fb3ac6db473d96fe7b3abae4725f69f173c52349ec95caf619a3ba0d245eff35d0b18de31a39711d27d6c189b55899fcda9e871fe1e53e6abb23812d71db88b405cfc4fe9d7bb9cf227c9f99881807b7e33f438c7d715cb6175aac398e5caf8818971de44b4bbeff6ec660200bdf6f37439c71b711dcdb5c1ccff77f3881efe315e163b711b1df646720ef4eb91c11318fe37244ce213e3987f06b1e9053709bef93339fcbf9b84f4e5196ece39537f069960017163f133e632878266c7a5855ce22fb82ef403a44df770518b2f7dd88a76f2bfa5c9471c37d320f0769531bfc9d001f31fd8848971eea1811b1c7b758a7d31370c7d715648c76d3f1dc6ee0190d2fcad0515c57719e9428a70f04787cbd6dc61820a708371670321660d2eb38e22dcfc739b67d4aa557f6e877e389b73ce763d819625c6f23b8b7714e7e1dc80af864f7b0ad33c6a747017f7f1fb8a778fd1dae4e198bc837d12b5ff4fd18df7bd1de10797112e0d28f39c9fb8dc08aea328678cae0a86c79204e0c7ba21c3b1e0f228e280e4877f12c2adf58af7c272df4a609db5748b53c7bcba7e3641ec7d3e09eca29cece11eb38457d84ae9f6ce6c3127b47bca428cbbb3e590a7db2143ab29c2aea46eff1abd873e09318d8eff9f2d2145f7e99c2b177faf44c049bcb9d31d5ab77c6546fdc19d37c3630cd89739d386f86ef7d70da0f3e596702bb13711dec8b6b26784eaf337cfacdf06247716682b868f81dbee723c03db0bdd3e6f8d22cce3985510ea67bf944f539d8f79dd0678b579f7517f8700e0238b69ceb6ef4e180fd7105dfeb78f9bf6e870f6bba0ff315eff3783ac72c8f641c89792ce21cd55bc1bd2de7e9625f3cc1dde77138e77811d17e12edaf4338fea7e09e5e4519ff12b887763887bf3f1bdcdb729d31d38753e4c329f2d99238b7fd1ddf7762df5db1aefd33275dce107baa7e4112d25b5a86f33667a40fbf8a33e4c55cdb793cce3bc1bdc5eb67f4798c7363593d967e53ccc36e06f7f45a42bc656a89c3db99031dfdce14eb7879bb34d2cf87bb88c8eb9d4b5c1e3216017d6a83f756e2f5cee8bad14eb1f98d8876b2d06f3e97ef3a704fc3ede7c671ae680ff1f6718638477c23b8b739398bf7ff9ccdb123623da9687f2c02ba0cf6c951ea93a394eb2059971d19483cbc8935d819e2fc6cb1264fc6b5886f297826f6198ec33ffb4697ff0312d33b92e7c6b19ea75964080fb310c824ea11e27cf68de0dee6eb9c6ade7071e5e36776448649d22cdf277b994ff6b2dd33cda43cf5f4c9bb8c78eb3bcb1cfecf157da1222fe4b8729c7b96172b22fa9114eb5e11deee8af03ea068dfa438377b1bb8a7ef47ba326cd8c49f893616e80f4b38fe3c5fbc15be782bf8159c591e116d9f4a90567c2fed8ce53e1e4419b602845d01c2d2ab38277a03b8b7f9df50ecc316dfad22de36144fa7683fa538f3dadf270acebcce580d9ed1ab38a3f903706fcb70de42cef540242eb15ff453e01ec629ce5afe10dc53dc1fbce133c4fed2dbc1bde018e27ce4c5f1cb95710cd091ef3d1d1912db2e04afd17a8238f79cd739d78bba5c5e6278523be36df28c35c08e78ff4cc65a20f35a7e15e710fbede83810f63810965e8ff7d9d1f10e47173cedc316df9de0b3a313b85cbc5d97712262472701194e04cfe8f5649f1d9decc870fead0e97176c42e23ac56747a7f8e214670a7f08eeab013c1e3ee33420db6980737a5dc7313e07f7340ed15616e7fede0eeeab55953903ecd59021fa6646c4b1b1e37c36769cd7c636887ec8bcc4f0bccfaa5bec4cbc51a484149165249b2d18a3bd8853c92432ccaefb4f21c564295962ff35ccbe2eb6ff3977e2b9f8b21bc98cf30d5be7cd56b3d93f5d58b49564b5fd698973bee564fba6c27e546287a718a3ed6f2a496fd28b612fb6dfcdb371ca4919292573496b7636a4887d18fb5d64872865a05f645489e2de2a5150e1caec7f25f66795f68754c80afbf948fbc912fb7fb9fd6c9e7d3fd6bed2afe6909e6486fdcf8b32d58eb68c2cb7ef0aeddfcb18de1c5becaa21e3a934cb7eeaff66928db98449b7d87e22085d66df97310927b3df2b98a4254cfad1f6b34afb19d56601196a5f57b1d8aaea5e6eff2d8bb3905326977196d2738b1d0f2b9229dfd6864a9fcd6cf17f29b22b5284525f83e60ffa532d9bd5544fad9212ffe3d071327471d9688ed1935166799ef522d96cdde2a42a0caaeb585543b97d3b7cf725b93175913343937b4fa6819bc2afec716aef8f1e229755f7aad69b64d7a0aab589a35a2c62295e163bf1584585ead5abe55041fdf45b32fad992bac969a4df0957cac2a927400d56f87913801d3f5a687bb50250784e61c29731d1fcca50e825cc138abf4aecaf86dbea94b07015e81b87f83c5b94723bfad5a44a9ae750016bb264ab5a28c7531d4bb8882ce1d8d876e12ec93733e2f84c79d2d58a6ae1265d36ab69b58a61e0585cac0a569dd7c34416bcf2bf21f3bbeef8bac5d1a7f4b3e6b7bbb2f65bcfcc697e6987290db6de396149e1d95feda82e4faf3a2cbd9291024bb10c598ad54977568b5fb6c44aafba51bddcf4a23f720eeb21361f4f068cc16a3206eba6dbe6e9bba50ca5c80eabce219da0ded5efaee40436408c30be081885d52514e6500a1b4aa422d56bfba4a20221c8356489536fd714e4c919379db5d3d2474175d4b81bc72c87554dbba68c3db694618e51f644fb72b2dd901863bf2bb2c397b0ca2a7d5e6023d2228de2e5b118dc36a9f78bd8ccd2febcee7e66a5ac3665ac7604ad655dc930c66b4918cfa1f6da4c6206ccc7f93343633c33d4c6b25973dd6c5607436ea18b5c17436ea98b5c0f436ea58b5c5f966dd8ea829969c9366eb78cf86ba8fded425b9915acadbddcfe5ed68d133bbbb44e38bbecc1b24b2691752ea94984659306b2b4a30ff79409e94fba3df0a46b8801b7d1046e84595b5b5d6b6b8c89bc97a6c84d3091dbe98adc1413395353e46618707b4de0e6b22ccd8c25bd2d52a7494671d46b12747cbd5dc2d5e40e046b1ac69601cbb22d6449437d302d56754bb696b2e46994eee4c9679e6c6e92c9438769db4b78c093a8339244f1e4c092a8952c89a89177c12cc79f441df0246a8da57f560ad27f0f0c7c9f1480ef89d1b26f0a686923b35ce6d21719b5dc29f633670865387b5bcafadd5dcca5ec9ec6267a14627d41ed779c7d2db625a4b2c4b6f4ae519d41ff0a2b6de87466b392f149dfce4f4da49ba53bcb58e685c132625b99c5d192974ed1d32a79f7c290b37591db61c839bac89918724f5de4f63264dae8a5d312ab74ded2b6d9043b3527d98f4a592baeb86a6c35f1d8f6c69c54ef1438a90e18786e0ac03bcac029af74caa24eb5aa93ccfbb1dae10ca3decfdb8cefcdcacc223b7411f84b8c3dfa9bf0bde378b7be32efc62aa6ed88bf034135e67e8978affecc7be9478679a7ce98350cd0b4862e980def97021bcec2bcc8feba5e641f0c79a02ef2be182183524048570978366be7a47fac86764c263756335896db585b031b258915179dbe4add3cebd447b2d710126b0c26163a96a1bac99299a6449e44b91caadc50af9cfe541f82a77a77cca486a5c0a47ac8c069df607e34b00bfe9ffd5305bc1e0e9e8d493e5c22f99fa3234a92e7607978846e1eee89218fd445ee25cbc0ac25bcd668064e74c6d8485b2d1adb04dbf40f25ce549faaf566316568927d9dcfa428e1c3d9f1679ac5760da364ae81b5718793c4e7bd99d782cefb8c30d77220732d341761ad089934eaad0eb9631bc3620f163798cbec8d799ab1124ff3b6cc8dc5f034b958961da79b65fbc89069961d2ff3f4d456e922d73a7b48bdfc183c9ebe9278b2590fcce1bbd435386524c59bcf26713a78e3ed6b2559c94c751198c352688729b7e328f1544f93730674f14e5b7f8b8e383ff2ec30916587c1096407935a6119a09fcc9268e3938e6b5769bab6622f0a6ce4d92c1b1ec61e53969cd42d65414bc9e1ac51e0ccc75469daf69749539f38e780c66d1234c5810760c0859ac0fb61797c8a6e1edf5f865c8fe1e9d7b00662624fd3157b10e651a74b3ceadf969a471d8c811f2401df1a51033f00cb0a0727622331ac7a08063c4396c7685fc63036f525d3febfd4fe82b6008a58eecf6485a1eb0d32edbc5e6aff450bec6e20fc523b8433ff5945ce3c999cd42866ea1ac5502cdd6649d26da762ba0dc3c00f91808fca5003cfc7d26eb62ced7a12129d47b990976d5e6f98c9ba4932d9e283e5bcf38fa65c054bd74c7284dd8438cabe56daa133593950c6ded1bf694a535fab92a6c331f9e7c8e4af03e42f0012aac43802f35b4512bf6529faad9132705af1994b908a0f5de5ac5ef119258b872a5d2ca38df6b30fb7ab2fb4e6ba9c859fcc0ca0245a572e4e5101395a2257361bb55a427665858cb616e8528d0af6b75b45a171bbd37f752a5eb48cf357bcc48fbce245d7686759bd48fc8a572aa4c72a5807624e7581c4a95a2a4e750c9617166279a134a9bc3016f3af874afc6b4e7535ff3a4e064efbace8b065dc4277080e3c1e032ed3049e8025e86249822a95920518d14b2444172a123d51e639d890f4b25dea3970bf38896153ffa9df6ca3ebdb33fc7d386ccc3c3701ff902a19bb5ad4b5d3f0f3387315b448accdcaafd54ce8616cce05259f3936b9675bc63c5b3a25c7bcdb24cc640f9398ec7a45939d2c03a7265b2e49cd9c362cfb2913ec9767192e4fa12c0bb131f6f25d9a85f219423ab251852c1bb1b9007d1330c654cad98e0da357b0a2ba9817d54e85a09d559799480963b69415e7f07d57ab3e2b0a2bec9a6a39439ccc6adb747dd302e6b2e599ae9265ba74eb8965bc2958c65b2ec978fd6ba865bca918f80a09f83245f06932709a8b56ca72f55e2c450da6b55ff24a5cf2e958c9bf4ab7e43f08237cb584f08d8a841f8c897db8aed83330b18f9088dda6a69ad83331f02325e0df2882cf9281d3b2836ef6a1d3d77308064c7719a9d270ecc8b8725afcf37c7d3e734909e8c929664f56dbbfcbec67f31844265b672d168aa848391be3f61809b7b72a723b07a3608d26b74532606a9e6b13018e316164ae0c98b6a48e25484b8aeea9a1de929a87d17ebc84f621b5d4682fc6b2f909bad9bc04433e5117793e867c922ef2020cf9645de48532649a88a7481271536db5442cc5c04f9580ef54043f14cb98a7c97c532742278eb8f568a723c4eda12cb253af92799e4cbbdc75ea39c59e9e4eda7b59cabbbf54f2f9224cce7532399d6d5de872385ab617b1de701ae3041b4725d6328cfad325d477aba346fd620cfc0c09f8c98ae04b30bece94f1d52a4ebad22ecb72f0b4a7fd5485c7a5983467c9a4a1b76ebaa9c4b30ca3f46c09a503ebaa517a18a6c4393225e89c7387befd6ccac6b3aefb22be25cd0a568cabd3588e4970ae4c02ead9c6462b060549560b2a304ad74b28ad54a4b412f3c8e7e97ae4e598d81b644e5351ec1598d8e7eb8abd52864c6b1d1710a4d6712149a6d6b10a8be7222c9e8b938a6735c6d4465da60ec712f81249026fafa796c04760e0974ac0dbd457033f1203bf4c025eac087e1406be4902be5511fc680cfc720978b5066ae0c760e05748c0fb2b82afc1c0af94808f52045f8b19f955ba467e2c26f6d512b1b7288a7d1c26f635ba621f2f41ce668b78d2b964d23f8f516df237ddf93ab125e974df6bd952c978f163dd7827c8d28596d0d7c9445228ca4fc4ace97a89351daf684d2761e03748c0ff56043f1903bf51029ed5500dfc140cfc2609f8ad8ae0a7628979b366629e8601df422475c16ecc3a97b23c46abf3256cb7b525ecaf256cc7cb123605a588d9bedbe124a6a0d0edfb32b9f596739b2eb3adbd87fd5445ea7598d4b7caa4a63dc0b4e3dcad373b4d49a719229b219c49baf05a771725b94ec76ce036890d142adac01998d2b76bdac099323f9b491f961af5b3d88cf042d6894eb7db9ccf2c65718a17f7de91b04fdec27c325d90624e56cc7f9f254b6e5a3cdc4990baf55df6ff3a5464a5baf5d998cdde2db1d9d7156df61c0cfc1e09f8ef8ae0e762e0f74ac03b3652035f2f03a7d51a7afe8c56b5e63c4cecfb25623faf28f6064cecadba629f2f43a6e11f48c4fdc4e822bf40064c0dfd41ccd01f22c934222fc4fce7c39afef3220cf811824c849c11ed12737a6f6629967f176326f4a8c484721bab99d0460cfc3109789922f82558623f8e25f6134925f6a598b53ea969ad9761c04f69026fc2ace8694df3bc1c037e4613f80a19304dfb6749d5e9b81440653aee9598153e27b1c2f54dd4acf02a1938f592f4003a2d2f793526f60b12b1b7288a7d0d06fea204fc6d45f06bb19cf91296335f4e2a676ec6cc911e1056c55bd25d0966dbffe8c0321d9e5e400a580d8a4e595fc5de2c63ad0d5a8757b1ddeb30295e9549d1342a458efd7b317186379c891ec9cb703d26c36b32199a70197adbffe7b1fa34fd6695fd3b79096ec024785d26412d9016744119adf1aac4762366be6f48ccf7aaa66ae67b1366be6f62e6fb5652e67b33e6f4de9638bd0c45a7770bc6d03b1286e6345363e8560cfc5d09f81a45f0db30f0f76469ab087e3b96b6dbb0b47d3fa9b4bd03cb0e1fc4724dbd52ec9ab660527c18db35f54ca16bba1393617b2cd7949b42d7741726c147f15cd334169fdae297bb31f3fd5862becb9aab99ef3d98f97e8299ef8ea4ccf75e8cb24f895e45ef3e8c9dcf24ecfcadc8cefd183b9f63ec7c91143b5b3125be942851d8424d890730eabfd2a4fe414ceaaf2552dfa828f54318f5df60d47f9b14f50f634a7c2751626c4b35251ec1c0bf97809729823f8a81ff20013f4b11fc318cfe1f31fa7f4a8afec765f1509bfb99c428d67aa7b8587b029362a74c0ab758eb95c262ed494c865f64328862ad4f0a8bb5a730097e9549509bb8c5da703666b25471decdd39801ff2631e099add40cf819cc807fc70cf88fa40cf8594c893f254abcaea8c47318f85f12f0dcd66ae0cf63c94d4f84d729175ec0a4fe4722f5558a52bf2803a7dd23ff12cdee919730b1ff9388fdbca2d82f6364d3b5e055f2169d91167b665da11d74199bfbb680f99d7236f1d459e355ccc62c0b88739688b38cbec87e5acc16d82f64f7c26f1691b97c44b1271b51144bf05713675bf94c36a2ef1c2b97c946938af9c60c8bd8930a16aa0420cbc72c4bf9d82b1ce5549d20fb0a964096553581b62926d0ab187844024efb4a55c05fc39c51868538a36a5632cee8754c89ea32861495780303af21017f5811fc4d1938cdac352dbdaeebb724c0d96ce7da5d33805c7583afd40e20d792f1251d40ae6dc51b40d697151b407e1bb3a53ab2dcb6a79a2dbd831511752dcd22e25d0cb99e2ef27b58f9503f11fb8fe134b74980b3d95ecaf37789fdeb6cbd17dbf21b246cf90d99e5ef1bc3f2f5360894a7c4fb98f134d2359e0f30e369ac693c1f62d9b489249b4e6fa3964db76352379555899c0d5d2bf80a63f96a9b4c565dca549c18f511264733991c74eb1e35fc8f31fce69aa9f30906dc422638b51fbaff7a21ab132e22239811d37ad942e59ad80ecc2e5a4aece20745bbf81453ab95265f9f6152b796485d6d2f35a93fc7a4de034b0c31cdc2a91a7ba723aaa8f50516f39eb29869c78173866a76f438b5ece8364e13ecbc554c5417d07c8949d04626414ba90463d95f956cc5bad380486e7dd457982c6d65b2ec99a02c55cfdb5291e96bccf0f692185ec7766a86f70da6703bcdecf22d069ca909fc1d06dc5e13f87b8ce7bd253ce72bf2fc0306de41025e2b530dfc478c928e9a94fc2403a6dea79366bbea671930cdda9db1266d97a49ab43b31dab324b46f6faf46fb2f9812fb604aec9b9412bf624a74952891b9b79a12bf61e0dd24e0633ba881ff2e03a7f6d65de64ee926279308dc96a49855d78523cf22fbb0026f09ffed9d6d9fc9ee9ce2a71bdbe681be112eb782cdc6cf648ed95deeecf44fd185bbcb88776ebc8887f64b3945ecfca83bcf64cebc587166e31f18173d645cd0cdaae1ee884e85d52d60dda5c72b998465c45d31ebc847658e87d0cb0eadba42e14fcc60b22506b351d11affc2b2540e96a57a2695a5fec694e825eb8d5254e21f2ca57bcb529a2ec996f7b6cee0fdb47485076da838db1fc54ad3ac986ff761b3719d1e5ad7aebd396029b30cd11beb7d57c9ecaa52928be632099782be5c077b296fe8aad8d7bf32f6e8896fb996fe896fff61e07d52004e2c0938b593be96fee6d31606de2f05e01119383dc2b1bf45f07311fd1174c623c8c0221890a208aac922a009bb5f0a12b63a06be7f0ac06b60e00353005e53064efddc20899f5bdf49cdcfd5c2c0074bc00b14c16b63b41c20a1e585e79f1fa4424b1d4cf22112c9bf5094bc2e069e2701bf5111bc9e0c9c76030ed5ed06ac8f893d4c2276566735b11b60de2b3f05deab21063e5c026e298237c2681921ab1f2bd2d21833f29129c8fb4d30f05129006f8ad1325a42cb32455a9a61097a600aaca539063e2605e02d305ac64a68b94a91969618f838590f641735f05618f87809783345f0d698d79aa0ebb5f6c0c42e90d9a1a2d87b62a63251622aaa33e2db60924f9215cd8a92b7c5249f9c0223df0b93bc50d69795a526793b0c7c8a047ca622782646cbd4149414ed31c9a749246fb38f9ae47b63e0d325e09b1569e980811f2401dfa42879470cfc605901aa08de09039f21017f5d11bc33063e5366e7fbaa8177c14c71560a72681656f41f9282a27f1f8c96d9125abe51e47c5f0978363b5f996ede9cae9d71a610dda351e748faabb23b523d5a57d12391d88a6cbc5a148e9276966d6b5bedff5fd8ff677625e4c6ae04db807bae45fbba938b139b8ad0153380791203d8a2982fba61e0c512f0ed8ae0dd31f0120978bdae6ae03db04c373f05992e1b035f20055f73800a780e46cb42092d398ab4f4c41c5da9c4d145141d5d2f4cf2432592172a4ade1b035f24015fa3089e8b8197c95a0a8ae07d30f0c512f09715c1fb6209ba4492a0d51413b41f26f95289e43b1525ef8f812f93804fefa6063e40064efbb90fb324bdfeb4ef934e0b5bc4a66eac64634dee9c6df59d4ff7c3622f97c54e575f88993ccef81afd4625befd312a2b64cd45452a076216569982bad1204cf2e512c98f54947c3006be42569356043f00035f2901dfa6083e04035f2501cfedae069e2703a7fb1daeb6129847b019071e8a497db844eaca1e6a520fc3ccf0881498613e26f991b2964bb69ae4c3316f7094cc1b742170bd48311bbb9bc7c6f78aa37bc9d1eb0af649291bf1730f5674479d9d49dee5763d53c5938cc0643d5a262badd3e6db1e53782f95984662311d238ba9210bb784e9586a73407d24ad1b4f64af5567d28cc2927b8d24b96fcc514beed198626b658ab5f72477ec84f4cf2f2c2262da808af20762f21d8b158dcec0b79853a7377f6e0c46fd7112ea7728523f16033f5e02fe454f35f071186f27c878dbd793ae6359ca551267f155394b3b9a82743d46059b8d2ee6408b54f7a6b49bd955b81e8f497c2296c5dca32365994d25ee0958dc276156e69c033e3b2527211460b19f2c8b9d36c8e9f257bae94e3c2968b872a23aaf772226cf2932799a01794aa229329e4f784a7e51f0244c8a536552d40552d0c9e6ae6da8c43919cb92a749b2e4b2de6a59b21053689d4ca1ac3859529ef56862d33940abf921c78bd80c9c65bc2c56a1620a46c5e9122aba29523115ab1e9d9182ead1341938b58f332dcd11a3e998d867a540ec83b06e9ab353d0077430c6c939ba9ccc9021d3f0e726523f8f31cf77266680eb2506f8771f35039c85819f27015fd7570dfc108cec0dba64cfc6c83e5f93ec3918f0059ac04532603a2bf3c2e80bdfaccc8bac646665cec512f4624982d6eaa796a0f330cfbd31bee71e46e8daf52ebc0a2cd6c23b2d1031a392ceb17467693a7327e169e66a9599624cda4bb08a5421abb0fbcf504fa69d548279c84b53e021e763697c99248d672aa6f1020c7c9304fc5645f08558925c2e4b12679d923011b181411928dce9fd5c56cb75ea7a2a49548a297a85acf74051d14331f02b650d2645f04518f85512f036fdd5c0cb30f0ab65553f45f0c558b6b846922d5407329660925f2b917c8da2e44b31f0cd12f0a715c19761e0d749c03b0e50033f0ccb73d763adaa78796e1e1f24a6ce513ddf9563cade2051f62c45652b30f01b25e06315c12b31f09b24e05b14c19763e0374bc0df56045f8181df2201ff5d117c2556cdbb55b79ab70a13fb36596aeea726f66a0cfc7609f82645f0c331f03b24e0df28821f81816f918037da5f0dfc48aca27a275651bd2ba98aea51985bba1bab9d897de744ad31f92e95a3b1b8ef91c5dd80b85d2a4e2d96ce85294baa5e780c9674f74a926e9b62d2adc1d4ba4fa6560b02abe72b49916f15bcb712ace6e3d76292dc2f9384dee645eb712af11c8bd527b6a6a09a7d1c96560f48d22a67a05a5a1d2f03a7c23c984843b33b0e7c0246c94329a0e4448c928765b5a0416a949c84799e4730cff368529ee764acbc7a4cb7bc3a05eb3d785cb3f7e0544ce42774453e0d4bd1272529ba75b05a8aaec3c09f9215b18ae0a76386fe740a0cfd0c2c7b3ea3993dcfc4a47e3605529f85f1fd9caceda6c8f7d918f8f312f09d8ae0e760e02f48c00b86a8819f8b81bf2801cf55045f8f81bf2401afa6087e1e06feb2047c489e1af8060cfc1559ab5311fc7c0cfc5599b528d2720106fe9accaf284a7e2106feba2c4187aa815f8439f237741df9c558d9f3a666d9b311e3e32d091fdd14f9b8042bf3dfc6cafc77922af32fc5947857d6641aa6a6c4659812ef614a6c4b4a894d9812ef4b9418a8a8c4e598657ea06b995760627f28117b9da2d85762e0db25e03f28825f8535633e923563687ac24941705b3c677ca39c3d7376a87077fc5569f05c8d49f431d6721dcd7726a7875ed0177452c0685ba632991b8811f33518d19fc85a43f96a445f8b19df0e5de3db8cb9c54f35dde275584a7c960870ac839f302e3ed7e5e2062c09bf9024e14cc524bc1103ff52027e8f22f84d18d95fc9ccbe19f16fdeed6c80bd84cfd97266651d4e547b356ec6a4f85a26053da4208f0d74fa27ad4c65bf4bd9bc4155196ec168fe4642f3e323d468be55029eddc9beb5d2b9720c6efd9adccab16f25e56e36ddf944b28a2b91d8beb3f16a50c2e84f0ffba726b254ec7b4bbe542c9148b0a562b76129fe8324c56b29a6f8ed58d5e547aceaf2535255973bb0acf333566ef933cd3842079b16b26d7e5532cc16acc1bd53d2e0561d72bc1353eb17995a1deddb616c16aed8c1984e0b773c558fe844b6f92c932ce655845e9e4301e893deca9586bb300bfa5562417f2b5ad0dd5871f59b6e71750f5674ffae5974df8bf1f187848f5523d5f8b80f03ff53d6f05504bf1fb3b7bf64f636d8530ece632fcae84258fb6f3ababb8488cdf816b3cc460f95a864fdfed43fd1c36c96719fe55462e1211573c97222265a7a371b74ad56c546b76266f4b7ae193d8021ffa38bfc2066a0ff6a1ae84398cffa2f059d840fcbc0a930d4fbb595804b23988f47f0089603ac48d51c90355a2d073c8ae58048449203f626ee2ecf8bc972be46632e71b608a47f8b4d03e9df3d815d8bf130f565848f611266c824a4bc94f2e698bbdb7185528c8f63845793107e9522e14f60ea5497a9d38aa95375114255fa935b1cf124a66a0d89aa730e5453f5290cbca6cc70c7a8813f8dd5b46a45909a56ed483235ad6730df5127a2ef3b9ec518aa2bb33445869ec324af2791fc3ffb4745f2e731c9eb4b24bf67ac9ae42f60e00d24e08dc6a981bf88813794806f52047f09036f24016f365e0dfc650cbcb104fc6d45c95fc18af52611cd62fd55ac586f1ad12bd65fc3f86826e163a122d9af63fea539e65f5a24e55fdec09468295162d4043525dec45c40ab1438afb764e0f45493d689a4eb101cf86d8c923d649414a851f20e26f59e9a52bf8b01b7d1047e0f4bc4b62948c46d58b6df4b37dbbf8fa5623b492a6e554cc50f30f04c09f8b6896ae01f62e0ed25e06d26a9816f9781b7b56ff78ed0d3f37c7e652fca173b709b8e72d0b30a0b790f21616f684a799b8cf07d57ab3e21ac293a8277824ce6f547e76c5789a7aac425ff08a3a583849642455a3ec6dc6d47ccdd764acadd7e8255bf3bcbaadfd2dc14eb18210cbd8b0c9dbe705a53d949b48b3ec592234b56499aac961c9f61e0fb48c0cb14c13fc758da37114f19ebe0200cb8ab26f097181ddd24741428d2f11506de5d02feba22f8d718780f992f2b5403ff0603cf9680172b827f8b25668e2c2f55927807ccbafdc1c91f2aeb9cac34db734c6db08f98fd0e4ba29e9224aa544ca2efb124ea254b22678727ff29bf2acafc801512bdb1422237a942e2474caf3e32bd682991ada4c74f58a2f495e59be96a89f233565dec27a92e5ab2022e467571a70cbc937ddb5f960274887080fda2063b179a38637dce709f3f4e6a4a489cbf600aed9782faefaf5852ec2f2be80e564b8adf303b1a28b32377b31491f5e917f49c93d57c00416c3de13ab3956c7cb88cb80b0d9cde4077668c9abbf81dcb6183b01c3638a91cf60796a607a4c048ffc4d27488244d3367aaa5e95f98e4792990fc6f4cf2a1b2aac02c35c9ffc1241f26915c75e4f65f4cf27c89e427cf5193fc3f4cf2e112c955373d271144f211320f50ac26b92503a7f96924969f4625959f22b278a85ca353c05006c6d081b2daef023586aac9c0a9871a23f3912d49bc3981fe85562adeaf3a26cb58992cf47652d4cfaac453034bad712948ad9a18f87809783545f05a18f80409784d45f0da18788104bcba22781dcc88274a8c38e7483523ae8b19ce2499e1d0fd74641b2fc94ecf4dddc64bf53002264b0858b74a8d80fa58d215a620e91a60e0535200de104bbaa9d8f0b2ac11a892108db018a7c9626c4164ada671cc4c2ab819b86fd46a7b8d3149a6cb24a10874c6a16ae74913492cd974834f6b2249df2cc842fb8e4ebf519ffd78902d7f6d1f19ac80964e593c3842a72c36afa259acf8b1a98a4d65e9436f6744e861d85e910e1cb7b6e6c6362f44aa244d753c699a610630536600b43359ecfc37df7e389b354da852aad30e9a63be68966c2473ad9a2f6a812975884c299a5274d7eb85bca346d426606bcb3d835545c996981cb365723444c915d3ca54e26e258b9b0e16ccd11dd6698d39e3a214b4c6f790815366e646f4f7aadb1333ba79b2c916c7aa195d1b0cbc58027ed6716ae06d314b2ad1ecd7de4b064c5df3fc4480a9ab4380dbc980f7b66f172402dc10ef0ccac4a85828cb54d4e2dd7ad592242749b5c7e22cc58b49f5ad2cf6c6283b5493b20e98f88b64e2d34d68bda7fbfaf76f53abed74c432469924630c395e2d6374928153e7b53811ce624c2de98c71b64433c775c18097ca1283ba4a51dd740f47d0498e2c2c3996499223ff04b5e4d80753ee309972eefa3eb7b9e30ecec0d3cec5b9cf4e634945dd7d3189cab1ba80d8994636eb32f91d72ba627254c4aa0bf44cc9ee3cddb0b82b3197293870965b25b32f4f772ccee5b238e156cff2b893db70ba075657599182ba4a369693564a7252bd93d472520e26f9aa1448de53064ec3af4ec4b9c5d88ca397aca547b72d4d6b4bcf5912549e444bef705bfe4e3efd7b20edbc2390765eacd8b1765e6f196ffb50de66a79137279cd3a330996d47586a3f99c046a09c8df92b92e0f4c8488c551052668f62cc76a8a279b2f261ace7623eea686c746e0619c890cb18fa20bbb131dc66b437a127d6e592c1f6dd24fbdf04fbff40920d420eb619724aba197ce46e1649e6d08a3e98c4c7c8246e239538c7fed79ffdceb1e5722a1755a55591aa2fe608d7481ce1d633d51c613f4ce5b55895423e97c26dc2cb2a1b2aeaf6c7d43d5636ba78969aba03b00aed719a15dafd64c0ededdbe31301ae8db72ef6c7e8384142c7c0b3d5e81888a5fe89b2d4cf2424ea0e97b2aaa2bffb465ed184678ea858c2204cba9364d2d1a69c93dde85197c52cd629cc75953137ed77ec4ea7ef64eef09cbd61e9372a120ec612e76449e26c56b4d50330f05324e09b14537e0896114ed5cc08795846384d33230cc5e85827a1e38773d4e8188699dae93253ebab686ac3f9d2d472fe64096b7594312374eadf15e06fbd06683e46d319129a662ad2341c033f5302fef7b96ae02330933c4bd32447ca80697dfc6ccdfaf8286cfce01cc9f8c19b9b0fdcd96ac6971fab8c1f8cc62238571241c529e77cfa418b793354223810b3fbf532bb173bcbca0728d416818ec17ad0cfd3ed411f8b216fd0451e87219faf8b3c1e6b8f5e9082f6e8042c912fd4ec6c2bc0f8b848978f8918f2c5bac89330e48dbac89331e44b74910b31e44b7591a760a67199a6694cc544dea42bf23419321d3abd3c11919be2c0d33191afd015f9208ce52b35593e1813f92a5d916760c857eb22cfc490afd1459e85215fab8b7c0866739b356d6e3626f275ba22cfc16cee7a4d9b2bc2806fd0049e8b7171a32e17f3b09ae54d9a35cb62acd8be3905c57609c6c72dba7cccc7f8b855938f053260da30bf2d11e01863ac0b31a3bb5dd3e84a31e03b34810fc5526f8b6eea2dc252ef4ecdd42bc352ef2ecdd45b8c917cb726c94b30e07b34819762a977af6eea2dc352ef3ecdd43b0c4bbdfb3553af1c2379ab26c91518f0039ac09558ea3da89b7acb25c8d974e8c23a94981c499ac237035d4d864737e3a398b2ce783a46838517a346e3d8be844eff52ecf1a58712498b0371c6566069f1b06e5aac942167dab78f2422f2161c781566978f6adae56a0cf8314de0c3b1bcffb866de3f024bbd277453ef488c8b2735b9380a037e4a13f8688c8ba775b93806437e4617790d46c6b39a64acc5809fd3043e166b6a3dafd9d43a0e93f8054d898fc7247e5153e21330895fd294f8444ce29735253e09037e4513f8648c8a5735a9380593f8354d894fc59a86afa7a069781a46c71b9a74acc3e87853938ed33117f796ae8b3b0323faed14107d2626f63bba629f8589fd6e0ac43e1b13fb3d5db1cfc190b7e9229f8b11f27e0a08598f89fd81aed8e761c81fea226fc032f976cd4c7e3e06fc9126f00518f0c79ac01762c09f68025f8401efd004be1803fe541378a30c984e68fe2ca2bf84e7120cfcf314805f2a03a7cb21beb05fb497804b23e88c47701926fd9729907e13e69ebe4a817bba1c73225feb3a912b30e46f7491af9421d3b920df46aace05911212eb2423cc56be4b91ad5c8dd9caf729b0956b30e97f4891f4d762d2ff9802e93763e03fa500fc3acc2ffeace917afc7a4de9902a96fc072d12fbab9e8460cf9575de49b30e4df74916fc65ce1ef297085b76062ffa12bf6ad32641afecf444c2f46cffb6d98c87fe98a7c3b86fcb72ef21d32e476f6ed3f8990b11907de82b1fcaf26cb776256f75f0aacee2e09787657fbd69a494cf6eb4fb5d186b110f9648c2d620ffb4a57c31581bf0aed2fe8c6864b582fbdf385081fbbef9eee6de3dff236bb1bd52a933dd38bbb314376e70012e490292b83ae3749458cd84a93bbb1422592a157a8dc83e5bf8c0ccdfc772f2672354d91efc344aeae2bf2fd18720d5de4ad18724d5de40730e45abac80f6209585b33011fc244aea32bf2c318725d5de4473032ea6992f12826727d5d911fc30ac00689881ca3007c1c2b001b26021ca3007c02e3a2912e174fca906969d9381191634c907f0a2bb39b64e897d94f635237d594fa194cea662990fa592c159beba6e27398e1b5d034bce731915bea8afc0226722b4d915fc4805b6b02bf8479ba3d343dddcb18c97bea92fc0a86dc4617f9550cb9ad2ef26b18f25ebac8af63c8ed7491dfc090337591dfc48caebda6d1bd8589bcb7aec86f63c81d7491dfc1bc73c71478e77731f04e29007f0fe3a4b32e27db30e42ebac8ef638464a580900f30bbde47d3ae3fc4f8d857978fed1872575de48f30a6bba580e98f31b1bbeb8afd09560beba1590bdb81f1919d023e3ec5a4ced194fa334cea9e2990fa732c157be9a6e21718726f5de42f31e45c5de4af30e43ebac85f63c87d7591bfc1eaa5fd34eba5df6222f7d715f93b1972a67d3b201191634cb3fd1ef3fefb697aff1f30e0fd35817f9401ef6ddf0e4c0438c634db9fb0d41ba49b7a3f635c0cd6e46227c6c5019a5cfc82010fd104fe1523394f97e4df3092876a92fc3b569a0c4b4169f207c647be2e1f7f627c0cd7e4e32fcc178dd0f4457f635c8cd4e5e21f0c79942ef2bf98718c4e8171fc87811f9802703a2e25e5648c2e27960c998a3d3605624764e09decdb7189585f8c13983264c0341b8cd7cc2fd530e0099ac0d5b1142cd04dc11a18f2445de49a986d4c4a816dd4c2c027a700bc36c649a12e277530b1a7a440ecba587e99aa995fea61524f4b81d4f531f0e929006f80a5e441ba29d910433e5817b91146c88c1410d218039f9902f0261827b37439698a897d480ac46e86e59bd99af9a63926f59c1448dd02032f4a01784b2c25e7eaa6642b0c799e2e726b19320d5facd9d6df0363ba24054cef8981cf4f01781b8cec05ba64b7c5c45e9802b1f7c23264a966866c87f171a82e1f99181f8b52c0477b0cbc2c05e07b639c2cd6e5a40326f6921488dd11b391a59a36d249064ca7262ecb901c684f67f74926e6f9e3a3ed2424bece98db3a4cd36d759101d31937e58900c79871932503a68b162b12018eb168711fcc142b754d715fac61b65cb361d615e362852617dd64c0343facd41c31e98e01afd204ee2103a6b7ab33aa6e9e297eaa44501d8f201bf32787a7c09fe460e047a400bc2766d847ea1a762fcc7b1ca5e93d7acb80e9514a4727021ce328a55c0cf8184de03e18c96b7449ee8b79d2b59a9eb41f26f2b1ba22f7c732e37129ca8c036411b00dd813e124c6bed3fb61aefa044d57bd3f968a276aa6e2402c154fd24dc54198c8276b8a3c18731ba768ba8d03302e4ed5e56208c6c5699a5ce4615cacd3e46228067cba26f0300cf80c4de07c2cf5ced44dbde158ea9da5997a23307771b6a6bb18899553e7689653a3b09ac6b929a8698cc6c0d7a700fc400cfcbc14808fc1c037a4007c2c067e7e0ac0c761b9e602dd5c331ecbe8176a66f40998c817e98a5c80215fac8b3c112363a326199330e04b348127635c5caacb4521867c992ef2140c79932ef2542c0f5e9e823c380d13fb0a5db1a7cb90e939695726621d4370e083303eae4a011f0763e057a7007c0646f635ba64cfc4c4be360562cfc2c4deac2bf62112e46cda55624d21bbe6c0bb197ca1b2dae176d7c94cdaf2f1c016195f9f411719b7aea25d223260cb8a6763897f430a127f0e96f837ea267e1126f64d29107b2e067e730ac0e76175e75b34ebcec53260ba6defad8900c7d8ddb6044bc5db745371be0c39d3bebd3d1191634c755b80897c87aec80bb17acb16cd7a4b29c6c59d9a5c1c8a7171972e178b3053be5bd394cb302eeed1e4623126f1bd9a122fc11aaef769365c97ca80e94ce1fb13018e3153781966165b75cde2301932f5880f2422728cc18e720cf8414de00a0cf8214de04aac47f8e114f5082fc78aaa47525054adc0c01f4d01f84accfe1ed3b5bf55988b7e5cd345afc632f9139a99fc700cf8494de02330929fd225f948ac6ff169cdbec5a330919fd115f9682c333e9ba2cc788c2c023a3cf35c229cc4189e598349fe7c8a245f8b39c017341de0b1980b7931052ee4380cfca514801f8fd9e1cbba767802e69f5ed1f44f27626ee4554d37721206fc9a26f0c918c9afeb927c0ae69fded0f44fa76222bfa92bf269b20e8d1ef6ad3589a4af4323cf0e556e2bb03a89ae8cb712eeca789b7565b4a8a257ecd8b14e8c7598237827058ee0742cc1dfd54df033b0f2e23dcdf2e24cac99b32d4372e26d3ebb75f7a01b4ae819cd25643ca1c785af64fc2fe2dd4b3dd8d9b8a3edf713ec374b9895d127f2b3786427f7d0d030cda92d2e65565ba47830f9599896efcbb43c31aaa538cddac9338bd9dfa3596ea2daccb73f71f2cce868c8e1764e724eb49ec4b4a06701af60a17b707d4ad831f0c3eca8a85e14d7cb9e8b40c3abc98121d1b3b4cb6dae4b182ae4147608faf99e6ae3d0938c55983e1b63fa03cc9e608c8e4ebded6f1cb696da7e6ab66d1be52ccd1d6d0bc94296fe7e69dd6ff1e7a9b2a773302d3f946939d8a725e4dcd173044bb1c54c47bf94de14826f62e515f8958a66e7629a6d9769764042e99767db5031cbf3a5cc72f553ce7da3a2db7a4cb78f64baf5f5e9368ea5ce42ae19bd5bb5cb34390fd3e4639926ebd2eccfdc6ff2ed6b192ba34bec30235879bd98c590b89543ee702d6859b29cd502a0d7a3759ed4f9b60d18eb9fc858cf4b286f8c656c5404c2ab9d8fe9b743a6df588356459f1ec6a2a15a3935d452167529399ce543b9274926552fc0b4fe54a6f5a0985ae3924e62bad013062bb98ea234a64fe77186aae68be453f3424cafcf647a1da45cb39bccde78eb763204e75941d40f94dbe5016d7de8d4049349e78b303e3e97f131262d65b6e9d2fc624ce72fb07a8a9a0d081b1e6bbf9bc780603aab5a848a661b31cdbe9469b61fa2d914963fcb78ddc469fd8a56cb549e8b8baba4869936ca2598465fc9341a61d0fb8a54a5618a6c5dcb58e99d3a4d2fc534fd5aa6e940fb36714fe1d5a0883d73b4a39c8c62a95cce5a43f3ec1277750ab5ba0cd3ea9b44da04de78610d610a4b85723b2ccd870b62947e5e8cd469b609d3ec5b9966c3e27acec45a05b80f8dd5664dd6535e8ee9f89d4cc712c335ea4adb3bd21eb805bcc63c955940693437a6a68d984c297a05c6d3f7329ea6ecb296476c86f479b812e3e107190f43511f465b4873ed40226f8c65a91ebbc49123a53aa5afc234fc51a6e168450da7318b5e82a4c8aed0f76a4cdf9f64fa4e3268d9154994bfa960e01a8c819f53552e3bbe2d0f94cae6b5ba16d36aa74cab918a763c9c8d422ce5b5dd5d6dc39b315d7fc17a28545370040b51d51afdfe35715c15fdaec3f4fb55a6dffe1a35c74a56f22eb1f59bcfdb79b8568555c2aae8743da6d36f6a69e6b7cf3cd69f40bd4abc568ad992f2064cbfdf131911c06a8fc359ff50116fbb55adc727577b4cbe8e7c23a6e51f582aaab48c1dcd47f29aa1fb968eebc4ae03a7aa7e7c13a6df9f32fd3a92d87d9ff4542b1352de8c49f957ec1e4c9554989c542a98cc61b7605aff2dd3ba3bea410aa37304a0279c1fedb5a7359ce5d2da7572a318b76272ff23937b405ccf309a8d80d23ed632dbb397dbbad1790ef1bd43aa7cc06d983eff626d82d87984b6f90b583db94252534a64c484d62fe7a750c3db310dff4ba427403e02329ad95e6c6f9ece51903b301d4935a41f2e91f22a112dd35d666dc134b5649a8e4a2835fde3594e3e147aefca74bd13d33622d3767adc7435dbff6f7a64e02e8c8d0c191be3d032438c8acf8fb68a6889b84c22a723a3d37b95cc1bfc9d8ade77637a5793e97d40c27acbe703a457b77b30ddaacb74ebaf580f58ce5a38ce280fed8f10a1683b239fd50ce47d93f09d8a36f762dad49069d347531b67a68273e2aa133e55a9721fa6474d991e89cd1a88d7fa49a75fbd1fd3af5622e525b40ea8e164f6d469853bbd45b23102afdde16f5263915b314d6bcb34cdf5693a8c69e0f4f3557ada41b82788a545b2f6f800a6451d9916fe717095197ac129fb1fc474ae2bd3b9974fe729402677d6316c93c7d26d368aa5a2c1439806f5641af44db8dc1ac6dab1b49d94439778a7a1947a18d3a4be4c936ec4db46ef1d3d195b5cc7da7254107fff5daadbaa8f605237c0bc7832520becd8f6141bd93d315c45bf4731fd1acaf4eba7a8df2486b89479bf3ca5fc924c7fc863982e8d64bae4c4d5c565d49f5a6e7f43ea7cd5e398f48d315f959cf44edf4009f3dc4bd82854ac110c150d9ec0346822d3a08ba22d0de3ac561d7149c6569ec4646d9a48c90019d22d199265fb294c8366320d0e8eb29dfa714bd13f9dfccc85d430f234c648731923fe1187aa634289d5b9936bbf27ef279ec1b46c81f5dec86b04623dd85276b74462c9546ed908a7d796d5d155b47d16d3b6a54cdbf6be34f56b447d882351aa6cee394cbe5689f4a555b5b9aaded9b5bfaab384d36d7bcf63dab696693b48c16b4e8eeb354dce6e7a01d36b0f995ef1d7f5f84724a6d935ef52167ab29d278aa4a5ae99bede1731cdf69469167f0e9f7eefa79bf2a9ead37c09d3b18d4cc74e717c843bb7b98449425b4da9694bbc8cc9d95626a77fdcabaa2fa3e5d36a56cff3cb07393657df7e05d367af446c0bd327515dd2a3e3ab988eed643aeea750daeeaa7927af611a65ca349a826a84d597b011af446642a9cf964ade33be8ef1d05ec6c3be0a3c88345dc2c7cf53e5e7dec024de5b2671e7b8bedc9ca77b1393b403d6ab90a8a57b255fc65a19eecc5f13f9e52d4c978e325d869344fa4dc7f11561a5f61dcd23f3083ebb5fbdbf34b9347b1bd3b313368a9468dd2eb176447c34156ddec1b4e92cd326de9c0c95b18974a5d7bb98865db0fe7cb5fe22e1cd17476db434662ef37b6913bd95ef613a67c974de3faecede1e2667658a8aeca9a8616cc374da074b47b51a86d33b53f56dd5d66421710eca32dfaa7f1fd3795f99ce33c9aeedbb82bc24da6213dfa8b0f201c64ad7445aa1224695be2b5733cc0e5253d7fa10d3ac5b2263c5aa35cd5dd943b21dd3b47b22fdcad858b163e37d496e1cfd64e50afd4a45838f300d7a243e6f81c6a93e6fc1d10f7b9eaa14fa18d32f5ba61fbedaa5ea4ca0d25d581bf804d32a071b2796c7a95f779361a968b203d3a42756c627a6895a0f636a7b113ec574ea25d3696cdc96db645e27abaacf303607a33c4649e57e3b81cd92766ab1b17766492e253fc3b4ee9d882f94c79fdc185bb22deecf310d72315f11ab878bca576cbf5965335f757636d69f15dfc3e3bea2a6fdcfb2e84e74c359486766f952c604ad016667dbafc048788f68bda987a78ee53ea7b12fb625a2beb7305a43a23bf1c546e863135623429c9f2e74a23111e7b25af37dbc395f9631e479c0427bb07477761da1ed911ed1fabbd8a7309e16b2ba620f505b84dac5d7691672908265d5e41a092c9b694af26ea7695f9aaabd79aa46b27b521dbb26694df1a5e84763cb90db50cb2accc23c2f93dd0118cffbe82c7a386c01eb4c129d4ace5087b38d66dcd8602e95c5d69d01889a755c38385d4c06d79a9998d3602d27ced4fbbf3b1152b37a2487a6427f9354d5b16fe8bcd9d1bc5e44fd4085dd220e0349f9b92e49034c924471c3633bf9fd5c5af633490b3d5a7936cbcd4e66c377ce0a036ddbaab9b4ed6f92b6d62ccb95b3e654017136c010d5398cc08a5050b8c372291c6892c246f68d183718c53c160528622d6dba126042483c58416d97b04126096bc6b2ea6c9243dcad29c24cdcad755de2069b24ae25b0343a13c49b6147b31e9ea59e319f30d09733caa5ef0093f43591d81d05a4d3a1e8b2d8e5ec697128489b435cd286a48b3438eb5ab41b446b220ca46d1be4929667dac3798b8411f66f6783fce2e866058ea70b03714fd773891b9a2e0f4777a75b65ff25f36beecebf61a06fdd1897be6126e9a3871a542d18c25d155e0fea71f9a6abc2c2f6863318ba6eb388574626b3eb32bbb2bc9cd95e98289cd3c1a570b8490aeb82c262826790340c341ddfc6a56984499a6a039adcfdbec240d10f2d5c8a469aa4a801f364a2ab7109f35d13d8a07c312b45c34056c7612e59a34c925583d95345a8aa1457d577c9196d929c56f6cd8468b790bf0f96bafbe5ccc268adac800ffe8681c0b16d5d020f3449602de0ada89874ae631808eadfc425688ce94aab20c811c1df389aca6b60f34929094b0b333fdfa56fac49fa9a837a979fb80a96458b5867d012fbf3d5a1a0ae6ca04bdd38d315094acc30e26e97100eeb6a06bcd778f3e302a2ffa288d95749b427838286c9b20ac6bbb44d4897d3175b2b8781a06acd5c820a4c12b40781adc5554cebe5d156215d9b57cc3c5818fd17fd11244e3449a2ed043ce4d1613b7a8c02f562cb796f59b87b2fe89a7941e5249354d6e74581b0b7d5bc8a3b85f9bb305095038a84c9e69bdfe2902f31d5280c14ad021dd885e9eac01ecd6b61628ebbe8540c536bf3825a2e71534c12d70e949b536ccc625e2bdbbd3a1473c08ca0a9a63bb4a11dc29dfef3581737ccc2e1a8fab6018329d34c92570fd8a2bb99bb73cc402888020df8e92689a23338c6316fb6c8773659be1dbc9cc51406c2e6445cc20e3249581d902de141846120e96f3051ef609324556751cf6501c2414dee7e2e35334c7b26613fee123947883010b5ac8f4bd44c9344d1d917debdeee89ceeaabd646120ad1ae8509c6592b48644d6e513b6d1a3abc0b4a843d255d77726ab7857b41687acae5f0fcc639c6d3a733aedc87c167598fb29765477499b63bef1edcf9c61a0e8e43c97a222d31972389b67bd9c45ee1e86eb1e8e5cc136fe5a160ae28eafe11237d7b46d094fe6f8accab0d816a894ce334951030f45e19cfb4a57bc09b28a4d6744b1a6642983097767f442e0e44b4c12d798e043bac388d8483b0c9455033daef34d674c67f531ed812861a3476e2761386af8adc0b8f7029364c1415de7582bffb85198960eee00adc9852669a3d333dd3ad77036bbda995e17069a5e1eead2546a92a6568ca602db5339bd5b87b155f8e177ff596c10a466751fb87f579ce4d78eabb18eaf72a70d786a9dcb78df99e3093dabdee9a60e8193fcd06a60d57a56d25304b2e2d6d2b2125ecb94a5bc26202bc935a1590975a367698ef967292cf4cd52aac06525dc9ecf526aa16525e54fb2948660b3943a71b2125ab29aa5b44e334b79a84e2633be4a2aabca24e7ac98e35b59d269ab59d2794d59c884fcac18eb19b290b977597126626425351f392bc9c5295929188fce8ab3834516ba6d4316d220cf42c78fb2628e0c6429d4fbb2c03e0959bea198acb895ed2cc549a95909b678b290b9275e7f1e6b996516d2819615a372971577354556c2030d5949cc76cef22ceb4b6ce1725602bdf85edcc4960b66294c0875373982950f7773a21cbac9d1a26affbff71fcaa1bd3165948433797ddca9a12f363d604fd3b037e9c3aeceb65334d51c0f4583f9e26c5325ce493c533aa7338a9ab72cf6da9eba79e344144aa67ede1a0cdf2f31ddc0f1d2166b0fc4d9a4bfad86313a1b98a2b35f864be7d220d1392094744e03742e0b129d3d4349e75c90d90f0b129dbd4249e79980cef220d1d93b9474de02e8ac08129db9a1a4f35140676590e8ec134a3adf02742e0f129d7d4349e75780ce1541a2b35f28e96c082a4a2bd3d10acab56b94696f05ed618abe11c01a57a5833e5a7f4c3b7db52d53be91b8f4ad36495f4316b5dbc7ebef89abb2a149086caf2920eff07478c205a82f84e2d326635f7374d63345e73e964be71141a2b37f28e9dc03d0796490e8ec134a3a9f0599fda820d1991b4a3a6f05741e1d243afb8592ce9a20b31f13243afb8692ce1dc03ad70489ce9ea1a4b314d0b9364874f60e259de7003a8f0d129dbd4249e7d180cee34cd2d982c4eed0f066f43e211c93ac093a338e0f0a95bd4349e5c180ca13824265af5052b907a0f244935436e754cee33335fc673d3aa23be708f63247647553448e069d6d270585c89e2124721420f2e4a010991342229b02224f3149645be2ce034b749e2d0d5fcec2866f58a204548a4e35496c1b12af8e293f85dd68c6ffde547ffb4ed04e3fcd24ad8d8918aee869ff5e41c4e990f4599867bd350304ae334960d32881b3590007c899759926128d0d5c6c06249e9e8ecc9dc37e2732133bcc3ef36040eb19266985d3f45516eb8499dcfd408174e6ae6c0f4138a385504d53544e0195a6b34c522926e5f7dd8d261c14013b3c3b1de4f54f3f795b4c91772620ef1c93e489652758bbc79b898d0ea119cbc6e34171736e90c8ec174232270032d70789ccdc1092792020f3bc209169b0f7d21899e300991b8244a6c11e4c63648e04649e1f24320d4e5d3546e66840e6054122d3604fa631328703322f0c1299616ce18c00645e142432fb8790cc0240e6c54122734008c99c08c8dc68924c67338a524e64a9fd11ed07a2c1c3d7e6ee485cd22e4947df0f3e18e19d7919befef37f80fd5dba6bbbd11c28daf96b74ecb183292a37826eb4cb4c52b92fa7b2cc0e54c6ae62ffa002fb3f1d0c7306259c6d1a26937c32860c65fde925fc190c97674b556a96f2a6a628cf0233393699a4bc755c4750755ea6c1b2ddd8dcb747803bb83c68841a2cdf8d11fa3820f48aa0116ab0c03246e86d80d02b8346a8c1fe246384de0508bd2a68848671fef0bd80d0ab8346a8c1be786384de0708bd2668841aac361923f41a40e8b54123d460ff9231426f00846e0e1aa106fbe58d117a2320f4baa0116ab06fde18a1b70042af3749681d46e842b6c1a5b3992a9d1e6bb097c9d80c239a1682b21b7665d7089cf06ab49dbed914957780ae911b4d52d98051e99f9f4905a69bb4ae0a61075d1760853799a4ce9d214c27ffa77d86b0b16cbc1578be9b4d12e86ea8b30be6b719db11663f90756f31491fdd43d8d9e53acffeedec45efee983d91d922fd1f3e0bcc0459f85693148ae9d5a263d85978e22c4f194df2a54317e15d3455093a7f6f33496b17e2ef6f2f6260eebed043edffb4ca43d7fc2c653ba0c71aa90ce3748413801bb83d1d5ed4a96ea7d98b1aa3ef735008dd61923eb1441faeb090ef7f1ee6c9ff0f003ab798a453ac97ec898c9d877de5cff9a068ba331d6d9cc4e67284d143f60354de950e0fd9cb8e32ed1e728829fade0159fa6e93f4ed45aab6b6a710e7ec91d5ec5c0da72fa884ad4c2b62d63a9fc12d366b99c65659ac0465f73dbb3693877d8e476d60a5f7a6b32a5f6a0b3115b4c9f1fe2183557963fd434782aafc7d266915530a739895523acbec40f4cc9345d140692ad38d1544d7011bbddf7476cf63a7b02de5674f392b799dc5a7b4ae294ee472ce390b5f3db31a28d3b79aeefc10f5ccc544ac2c5cb01b58e3e580c207d24161bfdd8ec2f700850f9aa4101e6eb58c788f4f4b1389c64aee1ec02b3e942e12dd93ce9c3d54c2be0bcc3bc0121f4e473706362456f58c298333858cd1990faa3d8f04894ea31b861ba3730ea0f3d120d16974975663742e05cdc6c78244a7d16d458dd1b91ed0f97890e834bae9ad313aef01743e11243a8d6e1e618ccee7019d4f06894ea3a70318a3731ba0f3a920d169744ab5313a7f05743e1d243a8d9e0e608cce56a0a2f4ccaeec10f6ceac34d873696c7a565fd0ac7c361d546296e9a5d2e09c5f6354fe0b32f97341a1b27728a9cc0119fcf9a050d92b9454360554be10142a8d6eb6638ccae300952f9aa4b213f14fd8f2efd7ea2c8316e7d78bab6c1a97c142c9d8ac8ece80e897c242b4c1e1606344df0a8aac974d12ed9e369993fe391fc606369e272e7dafec4adf0ae16687721f99726089afa6834ab8f1fd5832818c24054c98f9f647abd231c8618cca0b8155be66924a6732025c24359bef783d944f4970a046d8d7121ba238841eb23e20f3759364c63f37008a0fcf0d3058f0cc35b52a635fd0ec7cc324ad62b65ca55d5ed3b25da544375ae13766b127016adf0c2ab5465bf8c6a8bd1f3883b74c5797f2596154c4ce13a8b401c27fbe746340dfdb26e96b16a7ba24349d6d7229f4c11143342e01ada377cc97ef2ac7741b23d3d8baf2a9c026df0d129961dc7d6b0a20f3bd209119c67d8dc60232b70589cc30eeba350c90f97e90c80ce37e469300991f0489cc30eeb65500c8fc30486486711fa34180cced4122338cbb6cf506647e142432c3b87fd15040e6c74122338cbb6b0d06647e6292cc4c52b521a9b62bb1c1f2ddd8aec4eb405ffc8e74d82a36bdc63f5bc9a017353657290fd8eaa74122d360f96e8ccc0301999f99ee8013a344bbcf56523d017d9f9ba4af35a0afea6e3314cc3d513acc03c0df0042bf3049681340e8eeb5387013a0f0cb5de91ffd63e8613c42b11f28b9bf0a1299613c42712020f3eb209119c62314730199df0489cc301ea1d80790f96d90c80ce3118add0099df0589cc301ea1d81d90f97d90c80ce38e5cfb02327f081299613c42b12b20f3c7209119c623140701327f0a1299619cfa3a0c90f9733a1a917d77bb46e42ce252b8d324856a072a1ab446638b5c6a016bfc25d87deb063da7b1bef5ae60f2d6af26e9956d1399f8fc4c83ed7563d30b5f0096fb9b496ac5a6babdc8eeb9a9ee836006f1efe9e865ef697bcab4af0a3246df1c40df1f26e9833b75b94b59e06a0ce38b588c91781928d1ff4c47899e580d338cbd4587002aff4ad7a88fb0c751ac1477477ce80cf6097c95505877913b1810fa773afc632f76c6c5eee21f2f06fef11f93f489cd50129fbf1ec699451d019dff0689cefea1a4b305a0f3bf20d1d92794743e027c253d4a273074e68692ce6b009d5690e8ec174a3a7f037446824467380fe97c03d09911243a7b8692ced980ce6a41a2b37728e93c05d0593d4874f60a259d47003a6b98a453f464ba9bf494b04fe9baf3c976a0f9c47fa0489a565e18eb83ff0cf464d634492d6db1d36e8f02fb3705a1675fd0cf8b58f0c3598f66290b318989e6ac453746e83253844e04b65acb24a1707719673f19a7a55e4246b08f1c66c2dcf9510fb48f6a9ba4b221110729a6bdebc3981d4e067658c724797b92440f09f31ebe6470dca7a16588d4a56048ad6e1049353893d818a9bf8022a85e104935d8136f8cd49d80d4fa4124d5e0cc6263a4fe08486d1044520d56ee8d917a3820b56110493538d3d818a98701521b05915483f33a8d915a06486d1c44520d36408d91ba0090dac424a95d89b76d3f8f2d4e758499c6a85dc8e62455da4d38ba0293fe1763f130e2dd61a57075508f6d6a92f4dea4ea9407efd4b061f6efc5f63ffab7a308ed1798cf76f5a4c28e27b4f1ba9245b1c8b6fd15a484852a646d3331f66f3011269a4a84bec44d8466e9e829c0ba08bdf34ec2b818b1143891e626a974a791f5dd8da649fc042cb1453afa5793db22358c33455f077d582d834a6dcf5052fb33b0da56e9c8f4bd49fff4677a637b7bee057c666b93f4a92dac317a00a4b983c4812dee112432c3b81afe7a40e69e4122338cabe12f0264b6091299619cdfbc1990d9364864867135fc6980ccbd8244661857c3af0364b60b1299615c0d7f1820333348648671357c3920b37d90c80ce36af81b00997b0789cc30ae86bf0390d9211d1d70892de50ee3d9aebf806e8e8e26a94cfcbc0d839575636df2d5a05fbe93e9d978aab39ac3784cc4e1c02e3b078dd0301e62720420b44bd0080de37111cb01a1594123348c8799ac0084ee133442c3786cc42a40e8be4123348c879aac0684760d1aa1613c3e621920b45bd0080de3e126e580d0ee4123348cc7485400427b048dd0302e09ab0484669b6f70d2b976abec0fa9a02becc0f3c07a2577b7f9f0b5db3b1097c61c93346612dd2dd80c164cc6b6609b06c6d87b9aa4b73ea7d73956bc8ccd0371b04b89c1b3b0ab9b228e00bbec6592b87d88775668259bd5319903d0599e952c93ab4ca73168a9c626d32c043d4fbd4d12de0e750489cd5432589d3246ee60406e6e90c90da3e5b606e4f60932b906ab59c6c81d0ac8ed1b6472c378c67b1e20b75f90c935d80d688cdcf180dcfe4126d760a7b53172870172070499dc30ce6b9e04c8dd2fc8e41aeccc3646ee4440eefee99834de876dd091e649e3dd4dd13712346807a683be5c9bc0dd67a1cd0040dfa074ac06492e6b87b132b508503b381d3dac345b8f63b6b8c8b74831dffeac9cc518e6dd7772894be801e9b655f96ae74296f1e974b4f90c6e3131ba39c71653d496814268487a562ef54cbf17ad3445df76d0f79f175c2f6a707a8f312ffa0df0a2434d52db80c4eab0ae30475d1d53d44580bf1c6692baf6c4db654d3de34a5b987296a157a3334b6108831d7d434c113c1d78cd7c93040ff2114c49a34b6a1d80612c7b53a1a802657644dedd231ca14b89181ea41b1cba3b4a1493dd6f378906206186a7631e353629dd3bb41dc6992c3d801319919ef6d5ee74ea7c25a06f6430eaacc308dddf6419b358c76518b5ccda96a9a62bc8e4a3d2b1a531367fc5ef31fb9b1c123466a93d019da38344a7d123578dd15908e83c3048741a1db03646e72cd00c1813243a7b8592ce63009d638344a7d1d9a9c6e8bc11d0392e4874e68692ce87009de38344679f50d2f93aa0734290e8ec1b4a3abf0074160489ce7ea1a4b306a8284d3449672dfb66049bd45bc98096d881c347179d1e2ae89a64922edaa33089f733d16d5d973000e720cbf0d1b617a06db249da3a90aae7800e27ab08dd117739115d7013eccf8b099d4c3e8965df624630edba4bc3009db1b9fbdd01c985413a6468402817e27602a34a53824467ff50d2d912d039354874f609259d8f82cc3e2d4874e68692ce1b019dd3834467bf50d2f927a0f3a020d1d9379474be0de83c3848741a9dad6c8cce7980ce1941a2339c3b969c0ee89c19243a7b8592ce23019db34cd2d991d139da0e5440e8486431ff948aec5fd33c9b2c62d40f65e7302ce22147d8d7121bdce08a52634dd22c40f321bbf2b405af3f35b840c158c3b30ee8439a1d142a8d6e05638cca2240e59ca05069f4a4056354b6055416a56b02383dc5b6d26662992d0cf5a85389739e6d31f3a525e9e85f32e631d7028f39d724a18d893854a5d7ae988dd4c114818d4117c83c93047666040e6700547bc7f68a190c3d62369f4d590c40e96e8ceae6c0568b4d52bd37f1ce0d9d4fe85a0f0ae7ddcfa4b7fd9b125e14bd16daa08b58c5cbe804302bc310c5778181b812f35b0fc353c07799bd1a2bacf600f63adf7cb9ef8c253905d2ee46656b40e582e01ca316c64304e6802cbed024954d41152adf7e4045a553670bd980f1a250579ba68152bf341d5bb4e7f04a13fdb4c80e46a728884069aa4219b3c81340e63ed424990d0199695e2737c41479e300798b827af69cd14e3b63ebe42e0399bc2ca8d486736f91c780d52e4ecf12985ee9cff4c6aa433d4019bec474193e96e9ed94dc4bd9a41a7a682fed5e2e4fc7b698c6caf026c0069706e79895bea13c1bf17ee02b970589cc309e8df82820f3b0209119c6b311ef0064960789cc309e8d782720b322486486f16cc49b0099954122338cdd1a370332970789cc309e8d781520734590c80ce3d988570332570689cc309e8df81820735590c80ce3d9884f0032579b24b30da9ba82c36d3a4e20f3ed46a65845e48c668679cd0601b41e1e9c23270d56918c51f907a0f2885d3beee340d17e77a3541a1b3dbf0cf4191d19acd369724379ece4b9c0368f0a1aa1613c76723d20f4e8a0111ac659c7eb00a1c7048dd0301e3b791620744dd0080de3b193670342d7068dd0301e3b790e20f4d8a0111ac6cdfa8e01841e173442c378ece47180d0e3834668188f9d3c11107a42d0080de3b193a701424f343d1f6934ef5d2ab53fa1b337696077275963e4f537455e27e29277523a2673f54bffbc0e631d726700f24ede95dd1d13ec4f0e257483954ab3dd1d9b4d51d905ac143a251d763820fd76686c6acc7a6087a7a6637a562f5bbcdd87be8b4001729af9418a85acef9c7eea6c25e5ac0a5a6e7f388f0b349fadb1a07b21858fccbac016d705f72088301e593a1f74099fbe2bf774f70ea685712e473eb0d23382b129b9ec201d83d41a3b48e72f60a567a663d99f779fb90a92e87a4be32396c6c686fe05d67b567a5601d3f23eedab808d8d539e004afcb34d12b8a724fb63157778168cc18cffbd6588d466a00a7f4e104935d8b9618cd4bd00a9e7069154839dc4c6488d0052d707915483b55363a4d605a49e1744520d0e091b23b5232075c3aeadf2877d424d3628f3cfdf959d75f9ac113a97536930ab773645e555a08a7f4190f67fef6f72228db12e930290c92f0c129d034249e7a180ce8b824467cf50d27904c8ec170789ce5ea1a4f30a40e7c620d1d93b94746e05745e12243a8dcee93446e7ab80ce4b8344679f50d2f931a0f3b220d16974018c313aff01746e0a129dfd4249e7dea0a274797a8ebcdf9d667fb405d678453ad6b6e18b5dbcc371615c28f80820f3ca209119c685822f0132af0a129961dc2ae55e40e6d54122338c5ba53c08c8bc2648648671ab94eb0099d70689cc306e95723720737390c80ce3f49a8b0099d70589cc306e95723120f3fa209119c6ad522e0064de102432c3b855ca8580cc1b83d41e377a3ca3b1f6f840d01ebf2948741a3d3cd4189d33009d3707894ea37bc01aa3b30464f65b8244a7d1cabb313acf0674de1a243a8d1e80678ccedb009db705894ea35b5118a3f30940e7ed41a2d3e849c1c6e87c1bd0794790e834ba47ac313abf05746e09129d464f0a36b7b336a828dd6992ce269cce3ef6ffc53cf222b67623ec67623c405c0aefda95f3345dd19d551bc6a834b636630b98a779b7492a1b1077fd509efd9a06ac24613ee66625a0ee1e93d47590f845f9aab66136c8623bd6a5ec8e864ed33cf7eea6487e1a143ef786816483dd74c6487e12907c5f184836e8698d91dc1d94fbf7878164834321c648fe0458f2d630906c70f0ce18c915c0921f0803c9069b09c6483e0c90fc6018483638dbc418c96b01c90f05e5f071a31dd6c61a1216a0f2e1a05069b477d518955301958f04854aa3fdfec6a86c01a87cd424956d89f754ec12b28ad045b113ec0f8a093d0d0ea7d66093c118b1e7828ad6632689cdf4115b06ce427077748a35da1fc689136b01bd8f07c505185d5167cc52eb0317f04450a834bafccb1895cb01954f06854aa393c68d51d91e50f9d4aeecc2f66e6669d0571adbcc320ff4c33e6d92caf68ccad176a0498cb0123bd00afeb95b1ccde6a7b70fb5efe7d97f3bef47d8d7121bb638841dddb5894bf0332609eee42beb2b5973f3ff4f3feca7a0d47f361d4bc47ab2c1c1dd6589d88fc04e9fdbb5e72185bdfe390158e2f326a96c16874aa1a9d1d1ab83238668cc05a5fc0b2669accb6e9632dde7db407976f0d5841e461ebee2a61dc8c62fa6a369096dcfd9d37632c9276358095e6107749e15b0a6e76a42dbf279b604a5667bef9b9aa2f72490b55f4ac766ac9564a1fdba82a86c186cb4526f6ccbe01f404df4e5a0526bb4156f8cdabf805378251d0512d65e720b2483e5bab102a909c8fcaf9aa4b1be7d53c0e7eb151167fbb5d1cc32a9470d5fa1d408d8df6bc139b6d4e0aa64635d1f35800dbe1e9c634b0dd62f8dedb27809a0f28d7478c59ca8672c662d727777ef301f49f12ec8dc6f9a5ea64809cb671197b04f8b58d0c3c166e993d85b7a2885c1699195a6c82c0464be958ef9cd39ecb7739d64bf2c65d4867966e90640e1db2629ac0728745808f3d1e225a0fafd4e700e883258b018eb537f0c142cefa683ca9c1843bbe15eacf02dc8ccef99a49276d38f65de8f022c61c54b45087bc1db00c2b6a5a300c925bbdb0299530185efa763da0bcdbec3597b79391362acfdc93c56b5994056466d9176562c0b75c93c1d10fb41bafc620959419c01ae42c6841858488b8dce3745e5c3a0b4fe303dc7e8e5a47fb0cb5865e77440df7693f4b521fe41594a9a7304d468bb2523eb9ce8cb7caac10504d54dd1ba068cd87c948e1d6ba84d8e64648eb77f97b0c982ee395a15a1ae901f0b6cf4e3e01ca117c6adfc168182e793749cd89a9b7e5f69ac4b621a206f4770ce7509638f631390a53f0dceb92e068b1a63e7ba5c03dad89fa5a302440f614efba982c62cb13ab0c4cfd3b12d053e2233c5332633c064c6ae678acebd019d5f0489cefea1a4b311a0f3cb20d1d92794743e084af0af8244676e28e9bc12d0f97590e8ec174a3a77023abf09129d7d4349e7ab80ce6f834467cf50d23903d0f95d90e8ec1d4a3a4f02747e1f243a8dee6a6c8ccee580ce1fd2732cce2e6805191b90980fe8fb315dfd950ec832bb0dbe9c1197e67940c69a943540a5fda7f4d8e22ee86633668bad4087c6cf41da28b2bfc92e5f63748e0343113b8344e78050d25902e8fc254874f60c259d9520b3ff1a243a8d1ed5648ccef3009dbf0589cedea1a4f33e40e7ef41a233379474be0ce8fc234874f609259d1f023aff0c129d7d4349e71f80cebf824467bf50d2d9065494fe3649672d06e0cc6ea39f51e4f04d72a9415cbafe4947a331d76ecfa4bdd158db32b57b0bc8bcff06672ff730eec9d613745ffc6792ca2e122abd0b908711ba37cb62f6379d17bc9c410e4726b21a24dbd8f4d5d120db531f9086bd5a7aa53fdb1b5bcffd26a0cf32499fda0677067bd08d65fbdf81078d04854aa3633bc6a8cc06559f8ca05069745cc718958d0195d58242a5d1d91ae6a651032aaba7a3a8e9c5a60aee2e2b25de03d5a21a26e9830b929d29fd7419d402b656a29c8479d9d355a0b4aeb92b333384a3e33ac6a83436917f0928ad6b99a4b239a13bb0d0ea7631ff6832c1761c30b84cd458b6ae056cb2b6492275365b325a0d325639b7808dd6092ab546ab45c6a83d12144675834aadd17690316aef010ea19e496af706e5fc3cd6d53b8c51b88495f463897709fe3856e62fb4e1d2b69781b17ac0f5c07aeb9ba458cc36c21752c17a406f9387cf18ab09fc01ecb54190c80ce3fac87f00990d8344a6c153538c91f91520b35190c834b8dfaa31327f0764360e129906d74c1a23f30b406693209169f0444a63647e09c86c1a2432c3b863fa2780cc664122d36055de18999f03329b0789cc30f6380d0095f6164122d3e03ed4c6c8dc0f90d9d22499891f8cf07feddd077c5545f607f009c8df86605d0bb08028c682a427880aa184aa8924a0288a21051e2410131201c58a8abdad6d2d6b595756d7bad8757577edbdf7de3b96b5acbafabf33f75ddeef252f2159fd4dcec967d7cf92f6decd7bdfccbd3373ee9c39c47e9cb60ff538b8a5b10593714bd3f1143fe2494e4ba39a0aed724b69a0c4139d063a0340b792064a9c54d240c703681f69a0c489250d741280f695064a0cc8d1402703683f69a0c4a01c0db414407f2b0d9438c9a4818e00d0fed24035669f8f04d001d24089037b1ae828001d280d9418a4a3818e01d0ad258166291d878e85c50d83a481aa6ca100ba8d345095d75000dd561aa8c65e7e04800e9606aa711cba3b806ec7041d607e69894ee2449456a2f378e04df7b1e0dbae8bef3a75a00703dff6ec25b6d19652b1f82d8f58f054bbb0d63ec9d3722fda8abaa760ecb903137213d3b29497dde0b9cc9ddef38ce64df0b703c41de5dc7e2b50b9666e209cda3b49c2d4b8666e10600e9184a971cddce680b9b3244c8d6be60600e65049981ad7cc6d0a9819923035ae99fb0d60664ac2d4b8666e43c0cc9284a971cddc4680992d0953e39ab9ed00334712a6c63573db0366ae8fece1d6c36f187c23b64bda64726da0cc635246853da3aa7f762b1fbb798f7dc9b644dda2366035ee9d34091624e6fb8819b5dd42c3028ac46e885640f130802c9002496c9134c802801cc684ecef20cbe2efbcd8549bc9265188dbeef33e331e82b3d1f68ae0f3f0d045c1c7aae090953c5c5aed357b940877171f69d82d6f60b427119b1808a1058d574217359c493b30056d1824b678f3cd44b7eb5c5d9b37e034de7ceb0e6d77571fc3a9f68d4d3506edc603e56e3e86f9d1702adc96a56b0da1c64387b5bb9f6daaf2fcdfb51cc9e27b1eee138d60f275bc9ea5c6fc8d21c039521227750e4fe3ec0f9c8592387355723e0e1dcf28499c392a396f03ced19238f35572ae0f27fb18499c792a395741eb1c2b89536766661d701649e2a466b4d338cf07ce719238b354721e059ce37d4796a6061fc33a1a63dd61eccfaae29bf1d7b9597cb8fd3e75d3005aa9885360823981496bbf2831612d177d01b8ded002274a3aa187a9ccc6180483a1499238a9ab91689c9b00e764499cb92a39ef86937d0f499c392a392f07ce3d2571e6abe4fc06388b2571e6a9e47c06384b2471eaccb39c019c7b49e2a4eecd49e35c0e9c53247166a9e45c029ca54cce8d4c5460cca65d35b9f2108da6ca78ca5ea3dd8fec0523cdb2ce2c5aa27fc9c165b0a6632a93b2af49be4f6e1d1a8dcdf06d7eb7bc79ad55222b6d3bfd69c03acdc75ab98835d6c6d2038d15b2264364686f29901ad7703c082d721f2990c4de9b0639035ae4f4ce5ca4957c6a1393016994eb429bdc974939b8599b9c655aaec86cffda4de2e94f0b1d6741abdd8f499dd1a29f6f0db2a103b7350a83c7d7bb1d40a8ddd810167f3df0cff051a9d01612af8dfff27233dbdfa09fb6a2f3359320dcdfc7edb7a80537b8566bc7a94571bcaa2e36363805aec307c82902a931bf7d0e50cef4d9a5c5e263043b67aa702d34f5b5755cfc00c5c121e7061f2bdcb882d86a27b2a82be19a7aa0a4bdbfece21b8d3bcd7787b65b2e0d54e38a91f500749634508d3b7c7e0f81bf0a69a01a779aff11402ba5816adc69fe2700ad9206aa71a77903d7d06a69a01a23fe9f400b9d2d0d54e31eb49f01e81c69a01aef8f7e09a03169a01af7f1fe0640e74a2d4d9ec5ecef6971d50780769e545a6ad11e1aedd326415b236773218d01beafa095d6caa86d481c8bd26a1b1e0711a7f93ef2e0f3bbd4b29d3468850b3a37cc1c1eaac6a112032183589457c0aca84ed610294b65ec733eb4cd83a4816a8c7d2e00d07a69a01a639f31006d9006aa31f6391740174a03d518fb9c07a08dd24035c63e6b00b4491aa8c6d8e7fe007ab034508db1cf5900ba481aa8c6d86735802e9606aa31f6391b409730417b9b28d9a6ebec5cb7a749e01d22bb1a1cb16dd2aac12d8359fca19d1910495e0c469c1dad6051ee06a1b9a5be0a9ad5b848bc3dd07cd716b557853b1eae9587f9a94e98efff6a49e31b09a7f3e13ed264c33618eee89deabe8fee05df9f41e773848fd6986db2fdb7461adf0770321f2977237462bf4d3bd1ebe0443f8a49bb8d495ee45d133c74b6cbe6b0745d7d817723301fed632ed4daf0a87946b2cda727ced66959c907c320699934508d69de75007a8c3450e2959506ba14408f95064a8c27d1400f01d0e3a48112ef1ad1409703e87269a0c4993b0d7419801e2f0d9478d788067a32809e200d94785f93067a02809e2863e3df32372db5199fd5ee70b5dcb0dd4a166d0c684ff231c7cf7499f15d25e23413e6f827cb2918a5b194e90293a03cc547c1a8d6172726d7ded258987c1e9cd6a74ac2d45898bc16304f9384a9b1307911609e2e09536361f20ac03cc3c7ede1280e6a83c895a6c484c5f622c4b6c69e1aa34b9321fe792693d756ba1dedd20c6a8207d2a06889053b40dffd3b1f37deda3be3a16ee44f6b77b9705a9f2589939ace4ae39c0a9c674be2a4eeed4de39c0957c573247152171cf2a245c079ae244eea56e934ceab81f33c499cd489248df36ee0fcbd244e6a4d191ae7b3c079be244e6ad50e1ae787c07981244e6a4d191ae7ba3050ba907fe3a224f8b15d4eb37a6061e63964bbd6b822f83c3c5c51f0b12a384c250f949625dcc724402f9254b743e756543b42b4fd0f92380b5472f605ce8b2571e6aae47c184ef64b2471e6a8e4bc1e382f95c499af92731d38d92f93c499a792f33d689d7f94c499a992b306382f97c499ad92f34ce0fc93244e9ddb001c0e9c5774669a60f2894e5cca45bb53b40e4c315748a1cc5649391328ff2c8592ba710a8db20f505ee967155c2764a9d3e2468fc1f5f12a1f29fef61757bb76181d7b7efc21fad670a401de5f7cd485cb70fd75955998320417e22e54186c9b0e339cab7d54d26c7dd083a97f58398bb80866551a89f53a60bd86c9da337e80b07c4ea599b67adf4de2929891acd6b8239cd6d7fa480288966685db95c64cf3aaaed84b6bdc427722f4d1d7f9b84eb66f10ae0fb2126e9a5d2f0552638bdc13206f9002495c604d833c0d20ff2a05526369dc130072a514488d8571af01c81ba54012f3cb68901703e44d52208931481ae44b0079b314488db19e1b01f2162990c4843d1ae49b0079ab1448e2d6f734c85701f23639d57f35e63d4e07cadb7d6497d987ac391f379779a5a4612e85c8cf1d923089fd370df330c0bc5312267154c92bf20d987f9384a9b162fa41807997244c8d1d500560de2d095363e27d2560fe5d12a6c6c4fb2980f90f49981a13efcb00f39f923089f31f1ae61180798f244c8ddbe81c0998f7ca29daa93108fc3350de27a75c22b127a7adcdb81ce6e5f7cbaaaa92afb25ce2d3d0361f9006aab15ce2b300faa034508de5121f05d087a4816a2c97f818803e2c0d5463b9c4c701f41169a01af3249e00d047a5816a2c97781f803e260d5463b9c4fb01f47169a01acb253e04a04f4803d5582ef111007d929d4b31d634992af71227c40322b1e0c9e5c147fb341a1e6d3b669be112e13dc5c4dbca34af0b54e59ebad0cc692308a27191eb745876fdb49c1289c4539b56227138503ec3a4ec17a7b4add11648ecc826f6c4364adbc4fe3438ed9f65c20e6a71da87b5ff8a4c7dfc21f6803691afedd0b2c6fb47474308ef395fc515a38fe14b996c5a96fb2467abd172266f867efe791fd96ac83925f8a1a5ac0a3eb3075de00e5eecaeba8b55b33e09ac2f30593708bed8dbfd38daa84c77beda4e700d7dd1477b8caea1e1f5324c489d60c6a41c3ee5991cee55b3078b7567e8f35ff253d137a7d930ca4366f910165f26743a2fcba9afa271c9c24838c15ff13137c23cf35277b0bae0f4b65b39da53be2c2ea339e37c2de86c5e955b978ad85a6943facfe0c47fcd4fede90cffd74dda30e8156899affbe0cb32b9fef968418fe780ef8dce0c7a8c31b64cf7acf8ca0fe20068308bf2223891dff439ae8c256d21d1562c89c84a8b25e5c1b8f22d1f5bee74c2e94d1b0a1d0843a1b79978f6fade3c68b1871beccc099e44dcd19a463710e8de9153be2b53e5c2d7b3e1daf8ae244c8d0b5fcf01ccf724616a4cfd5b0e98ef4bc2d498fa7722607e20095363eadf52c0fc5012a6c6d4bf2300f32349981a53ff1603e6c7923035a6fe1d0a989f48c2d478ebb601303f9584a9318ebe08303ff3b55f6bccb45c9e657fe661164e5bacb51f04d956492ade55c0eccb6921df111011fa5c12e730959cfb03e7179238a9234d1ae75cb86a7e2989334b25e719c0f99524ce6c959c3700e7bf2471e6a8e47c0838bf96c449dda087c6f932707e2389334f25e797c0f9ad244e6a5a2a8d737318287de763a941818936b90f6fec7a9905d1ee8f778759d0bf3b73855b72f294c6ddaf6b81f27b3f8b5e3aa125d24ee44a93e0fb414a3d296af492b7730c74313f4aa1cc56493901ba97ff48a1cc5249b91950fe2485324725e54940f9339372d3e08b92e08b4663b375eca16c79a439a6def5e231b3c4858363ee2b7d5d4e0fe8726cc49ec6d8dfb45c933e21784aa15b02187369d085c1c12add62eaf2f88acb4aa33915aa0970d398b81debcf35eed0de134ef76e5228b35552ce02caee5228b354520e00cab5989461fa49a97b7aea1c9e798e7a54f0bd8ad5f99045c147fb48e232575a66cf1670edecc1a44d1484cd6fd65a354f250f8099f8ff31f936827e7d820913a2ca5c52fe3cd57df79600b836ffd4c6ad22a6051aa383175de9c694d1c751c183e7044f6a7263cd4653cf9e05d1961d5c08b4eb48a5a5863d68b477c155735d1f57cd6c33ccff55b3771a89af3f448dd663f20d80ab66db3b6c4c73ffc64cb5ebcb75cf87ae80137f7d26efa6a6ed9167f44ea99967fb76233166c3a8b3a78f568a8ce115b43418834e72a34d1b1409bf5762ec663c8b5d7b2d0c5e41cc500b266ec26aa5c7c2456003a9dd1375be44eb9ede820b402fa9b4d400098df66be8f97b3369d34d7296afeda60e0e4efe2a17bc0b0f635f7e5370880a888d76ad4df95e848bc4864cee818e7bbcbbd2daada22a82ff87d1d24a77a868abb34e9affd3c60aeb417bdec84794aa7d553434d65bed066d75631fc3aed616388c76d7da7aee297f086bd895058c9b3019d7546db5307862bd1b6a51215fe8cecac684f1eba63e26a959eed4ed2a5ba39c0a83a8cd7c0ca25a0effdb338c225e296983a887e114ff0d93364ad34adea12bbcb59cb8d9ac7bb69f013df8e64ccc7e2930d73c60d20b3b1b60b760c2e23eb0e1415adb3fcec3f59476a7291daea75b3239373651cc74a6fb86fde5e5aec57a22a46564de0a2d722b1f83f5d6469878386a1744a39c0b947d98945b7780b234f89df6200b4d71f05934a36fe08e3f97d2e2a7d0cbf76512471533a250499d0b8734af4f90dc663566b77f05a0fdfcdc75caf33fa0a775405b01df6f7ddd75c23578ed09dee91d2e5d02fd7b7f1fc3a5f616c819a6b222d640e01c2089b34025e706c039501227b5c63a8df30e183e6d2d89334725e705c0394812a7ce6a829f03e7369238f354723e099cdb4ae2a46e5245e39c0e9c83257166abe43c1638b793c499a592b30138d37d84e9706d9e9d2595c6674c7a67424703e1f69d73e7285c38961dfc6b2797e5ab3f9605079b67aadc5493d83ad358f734b7857b9a3b3069079be498d22cd3f2d65b479691e9bb49770c50ef28257f89dae3d36e25bf0391a79da450527b7b1ae520689543a450527b7a1ae58640b9b3144aeafc9d46d904944399947d520c9aa2ca96f6de7bf3b406cdc3a8e510b2cb60a2a6aae3d61c72b4ebcbe7fb1999d2dae96820cdf431326d8b345c37521ebc3c8ff55869051c97016d56675e4d93ef736a2c23510bc3a56c5f53d0f0febc3dd0a2f849ae39c3ee159320ccf1d121e1f286d4051bbd9522a3a16e0ded32d7c7cae47043f44a63b76849545e6ff0d53a69ddd05d70adccf375826385d6727740cd3df9ae4098ef23d9c01256b931a67da9d18fb5afa87b0bae93057e33e5525f25c7c59fe0ed6a3991459b05b4c3a42621528320b4d0dc7770f2ef2295961a14a1d19603ed70a9b4d428288df606b820eceaa3d7b7f1a4aeb5007c0410eee667b7a64ed8f897b6e5c030e0dbdd075f8e4b42e82a19711930ff19c1e4db044ee09a14114dcdc5a06e810e66a49f5338c77f1ba45d01df8553b8d047ea60fb5260b25426c1dc0f98a324616a8c5a3e0198a325616a2c7e7b2f608e9184a9b1f8ed7d80395612a6c6e2b737016691244c8dc56fef01cc71923035a607ae04ccf192303516bfbd11302748c2246e9a46c37c0330274ac21ca610f34dc09cc48f50b6b510a6933643a30538b606dac93e6eaab5b686237aa73399e34ddac6a94b6035dc1e9dbb14263c548da324ced06939eb5742c86d4f1f7b287424f58ad815d1d25b7683f05bb1345062774403dd1d404ba48112431f34d05c00dd4b1a28b13ba281e603e81469a0c44e89065a00a0a5d24089a1631ae870002d9306aa3189350340a74a0325864368a059003a4d1a28318c4c03cd06d0bda5811243c934d01c00dd47126896d281fd70987a4e9706aa71ea5900a0fb4a03d5386cca03d0fda4816a1cd80f05d019d240354e3dd301747f69a01a8323db00e801d240350e9bfa02e84c69a01a07f67d00f44069a01aa79e9b0168b934508dc1919e003acbc70ae470930aab50ea0e556734675e4e83896605936f80f9a5652189a73b2d47e300689d959d79f338390393389c5fc1a21c0bf7e1ab7c5c39a3cdd2aae36b442a9b91e2d553e3363ff743dbacf671e5b4dbef7b4fbfa22d66f8d924f866fbc8ad6c79e56c4f762571a249cb2aba075ae61c1f2b973257afb2b3f50cb07e8187164adb72ea5568a131b92d5463e1dcc7a085ce65d276bc3c84c660f24e300a9d2789b34025e76f81b3461267ae4ace47e13a5a2b89334725e7cdc0395f1267be4acef5e0645f2089334f25e7c7d03aeb247166aae4ac05ce83247166abe43c0b38eb25715253b9689c470067838f3d4070ebbe29ee45349a1aa37b1bde7da0035ac844ec6d121ba978de018436472f8616d8e87b8e9e7ad33e9b13571bfcd605eeabf9ae751263efeba691680f8780711393362a8a6b4fee31c1831604c72d31581dd35681b1072c770758621235321b7c9cfab4d6bb2bb4de837d7447ad7546a382a72e303633aedc05eea8651d699cdb438b5d2489935a7494c6590a9c8b257152773ca471ce8098e712499cd40d2e689c8701e7219238a9bbc8d238af02ce432571526bc0d038ef04cea59238a91586699c4f03e7619238a9355c699cef03e7e19238a91586699c06064a47488a2a0d53b94e7e3004448e94c459a092730be03c4a1267ae4ace074c82f368499c392a39af05ce659238f35572fe089cc748e2cc53c9f93a701e2b89335325e71ce03c4e1267b64aced38173b9244eeacec834cea5c0793c93b3af495e216f1d1a8dcdde68be46be65e453dfece863986c9ec064ddbe196b9dbb97541978d8ac8de87d268a95e12fc35f55187c56efd267a8890957766725cdc074f44426785499b0c2a4de6035792aaaefcefc0098399d240592b84e8406d90f204f960249bc96d220874317758a14488dc95b4301f2542990c42d0368909702e4695220895b05d0208b00f2742990c4613c0db2377436674881246eaf4283bc065ae4995220895b53d120fb408bfc9d1448620e3b0d7233803c8b09b9b95953c0237924a97108b401cccbcf9684a97160de0b30cff1b15145fb66381abb9d87e1243f974939d824c78b669996c9d51d29c34ca3a6a5612f8248d1794cea0cd33ce2d91aa45dd0ddde75f59e02754358fc3b01ffef7d5c81dbbffc5b5f98795fb8029f2f099318f9a461ee07981748c2d4b83c6c12605e280953e3dda43d00f3224998c498130db30430ff2009931809a561ee0598174bc2244e0268985300f3124998c488282f910b302f9584498c41d130cb00f3324998c4c8280d731fc0fc2313b39f69b981c078b7656a51f06fcc315606ef77813bb0cd87f7b2a9000d76b149c05ece5fcb34397840854bcfc69d673bad262c6d3fdab581f54f3e56dcb516e6c3c3d12b73adcde29c08a7ff154cce680b55bbcd8af7cd2f46b2f85e8248e90a265f2ff76eecd5729e7b990d4e61b6db87c13e495fe473533891ffec235edf5a2f9e7c221387eab493b81c4ee22b99941d2f5ea673fbc98fe0b4be4a1aa8c6e2651f03e85fa4816a2cbcf326805e2d0d5463eac1bb007a8d34508dc5cbde03d06ba5816a2caff721805e270d5463e19d1700f47a69a01a4b43bd0aa0374803d558bcec3500fdab34508de5f55e07d0954cd068b3ca85664ef0e3860ead63a2e66ed2e6f33700ed8d5269a949db34da074d82f6261f373cda17f3cc678e4b69c192b5205872b3244ce2989486d903306f9184a9318cf7055c416f958449bc66d230bf05ccdb246112c7a134cc4f01f3764998c431280d731560de210953e3fdcbb701f34e4998c4f93b0df31dc0fc9b244ce23d241ae6fa3034ba4b1226f1fe110db33760deede36671fb32e5346e17f0039ce47f675246a5495b838cde297511a2cd49a1301e0b9943ffe8dce50be1a16a1c2571a84eab43bc024eee7fca8a72ea2cf778299ce2f74803d5b87ce13200bd571aa8c6e50be701e87dd240352e5fb80040ef9706aa71f9c24500fa8034508dcb172e06d007a5816a5cbe7016803e240d54e3f285b301f46169a01a972f9c03a08f4803d5b87ce15c007d94093ac0b49c748677d94bcd1833c9e513d9dd92c3ef61c65161f00a62869a8c4dcb2d3a0a26a28f3179b1986e934b7fb1953567c5e7f076df647a4acc0a16e23293407cdc4746518e63f49c51445bebb12db4c1273a33ae541c3c656ef099ddb99b1a57a2b5c49110a27b921f81af706b8cec2fb72fb43078cae2e0b38a2e92ae35184eeba77ce45d629e706bc9adf4ec605a5753009c4f3339fba4e02c8b3b149bea80b6dc1dbcd4fd823a1fa88359a8dd6078f48c9f64d64cff5d0f6d33b45380ef591f2b385b8e2edbb386933857a75d3d2ba0577fce47afdebe9bc11a97cf8c852be7f33e36acf86fd619136f72d0dae8d500fb825458e2ed381aec1500fba25458e2a580063b0b605f920a4b0c84d0602701eccb5261356ef73b0e605f910aab7180950bb0af4a8525deb6a3c15e08b0af498525de60a6c19e0bb0af4b85d5982db70860df900a4b5cb443833d1860dff41d1f48bd237d990bb6d8896eb53b5c2d7724bb92455b0da1eab77cdcd8c370e09ec1c745c167f66537c523ad0b5d5b9d6f8ae2d1ac2a1f8141da9ae70721b2f536937783e08b296e3b4b7b77b438789a6dadd1ad3d1a1c6d13cb7e70cabfe323a29a1bbf235a134878bb174abb625e047cef32f99ad7338e052f621a30b67e638f383da5ddd83b1eae96efc989a66acc529a0f2df47d1fb7f55abbdddcb2008ac61228c5d0323f90c4394c25e76ce0fc501267a64ace26b80bf59124ce2c959c9700e7c79238b35572de0e9c9f48e2cc51c9f924707e2a89939a5347e37c03383f93c499a792f347e05c258993bad9008db33f0c943ee7c78f1251a1d44bc83aa9e8042d7e64e78111ef174cde5e26119eb3b3f71a5f21105acb3c01426f5ffad806a3b5133d79ae4e1d22d166eb3bc069fe95244c8d7b8aec0298ff9284a97157c5ee80f9b5244c8dbb2aae0598df48c2d4b8abe2b730d2fc5612a6c65d15bf07ccef24616adc55711560fe5b12a6c665e19f03e6f7923035eeaaf81c60fe200953e3ae8aaf39ccb57b343b78518b838f7681081b8aa830d1fa8b86e0fbe38c4d29ac721015c1d7934dcc3debc08063bfe0bf8efd05f60ffe4bf5fdb4b4dec12b1a6b16052fcf7ed71eafd21dbb36f8a97d650d26232b78c88fb6416c186f10e9ee1e6961606e131ba7982af7db1707cfb3afb9d22d8188ea7b363a9274b7315c49f0bd46631749d8df60d324e7043fb5ef386696c0fa93f4b4759c5395698a0b58c0f4f86b6d3261b265aa14cb74c75d120fefa4bba519d157d1820cfbbca9ee55a4bb15086382cfaadd2bab31369e615f955568748fb6c7b40981935ddbb2afc4562b2d76afbe2a38b67d442232929eb66efcb1e1df26fc0b36c45f49eb8b44d2d37ab6f8b9fd9b861551d3d3d677e7cf02f76eab038b44a2697adac6c1cfc2f793f86e42692fb718a0d1fd8e5e295edb1eeeaf3727387665dcbd68756427fa0d3d82ef8e8e87261a5cb34e4bdb28de92ed23c26394074728771fcb56bfafa1d9c1c3d2f2827fc255723baf5e1f17b6fcdae0bff0abe8fb6b3ea66dc76d1fed3fb6b1a6a5be7ad5fc6a67e09ade5178d1b0cfaf7631b12a77d4096b7ca76b7e7fad9fcd3ddbf8ab0ccdb17f8baefcfe7fb27ff76ef1bf7bb7a17679785ae6afd0f6d6fc8a7ec6dffc6bf797c9a79ff8f65ce2aee975ee91f665fe92f6bc9ebb7ee3f162eef70ecd93d9967fbdf76ed6816b58b7a1f9ff6d5beef82bb29d00ad2d87470b974e373bf6b876bcbbd47f87e6ef39f1a8ba78cf1fb505ecedd62cd1cf8d735a3f5a61f0d56cf75e63eea8b526fa9fed23ed58da5e82ba313df1825f95b4feef7f570af77b33ec95a27bd2c994614fa6b5fed7ca7fa5566effdbdc8d50a706cf0dfb4c3b82ad0f3eb7c7fb7e4237d3e3ff014a321c8db96d0700 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/616453d4987e26b4eb66ed8347b56e27.asset.meta b/Assets/SerializedUdonPrograms/616453d4987e26b4eb66ed8347b56e27.asset.meta new file mode 100644 index 0000000..8dbd4de --- /dev/null +++ b/Assets/SerializedUdonPrograms/616453d4987e26b4eb66ed8347b56e27.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d71551efc1320d14bb157e1973fad3dd +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/61c262090889c324f927f1bf91622a63.asset b/Assets/SerializedUdonPrograms/61c262090889c324f927f1bf91622a63.asset new file mode 100644 index 0000000..7729140 --- /dev/null +++ b/Assets/SerializedUdonPrograms/61c262090889c324f927f1bf91622a63.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 61c262090889c324f927f1bf91622a63 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c56d5f9f8cf8becbd3712769809240470b28702c1101045844002441288190cc5bd702fdcb8f7deabe25eadd66a5bdbdad65adbda656bb56a5b6d6dfddfe7dc73729ff7bee779dff7be37cf9b73f9ffc287dcdcf59ce7f99ee7ec715be409e72736cef9b55c94885962825826cac516b1d9f96b9673ac76feb967fafa1251eb1c3738bfcb9c7be3444e8a37e16754acaff37b81735627ea9d371bc43ae75829ef2f1515cedf0b9c772b9c33b8badef95fe13c156be9bcb44ccc16c562b1e813eb9542c472f9529dba1603bb626d9ddf33c50ee76e85540a02c993b7fa38bf963a77eae4bd6a4769fddc4ab14a9a55eddc5be7bc532baa1c996ba5c4b60fe50bf987700fbdd4b1b73af674feb7537fefa7fe6eabfec6cfb752c73e693edf17bdd70efd0d846e4af27e3ff72839b4768e17a07378f7afeab9feaebc161b93c81aa88e83d4717f25f3c234f46fa38e8353d89b4c460e92950eb3b6ea38541d87287d2fca30fce12ea3d81e240f58b643fa0c4561b743f7e1dab010b6eb786cef8bc7f66e3cb6b85ac5df47eaf911ea384a1d472ad9ce333d1e52d772d571400abd46bbef89a9c2f35927ccfd6ad4f918751cab8ee3946e1d95ae17a3f3b0bae8381daf647650615c62b8ae9f87fb97aaf309ea98e78baf7cf5dc65ea7c629afaa4e37f5aa74e2a8ccbd1b9c3b1e59a24b274bc77f6c57b67f5ee252ec7964ff9ec41fe67943b49c9db9d811d5d7c7674717569951bff5c4a1db4fc0225a7ab927b053a07b95ac7746d6ba9de7b4c9d178ad4795baf34ee4d71e5b4d5aca7bae1b4eee95e6f7d9088f7e5a2147aeab8ede68bdb6e4a6e9592abed9fe69ec7b4fcc1480ebc7fa54f6e779fdcee4aaece2326a6a9e701ea78b03a4e57c74345633a1ef95d754d33384485d943c4e7013dd4fd03bd777bebfc345d6ec9e268862fae07a870d32d9767aa63bb349fd7cfcc0aa1f36c756c9f6698edd5714e88303bb8bed0f6339f2f4c4d2173aecbb76d3dd2c191d36ea73a9fa78ef3d57181e2dfc7e7077dd2f08354ba1ca67411280e1c5dda7755e787abe3c2785dc4229f4e57359d4eb28e0a32af46e770ecadae5f83ce41d7256e38ed5f513217ab63b14fe7257c3a8b23dcf73ae9f2b9439aef25f3af12d7be0ef9aeec0ea5eafa529f6eb33dbddbce46ef6a3dd2490fcb140b9d0f5e83ce4107cd76b9efb96bd1391cfb7ae1c9bf9d773b6adfc2cfc0bbd7a173b85f9aa6ae2b44a2cf821c54cf907f43d82affefa8eb364789c4b4677a178efdd1b5fe4adefbeabda3456239a69f03dbf6a073b87f649ab6ad34e8e784db697a92778f11f1f9cf4ccf1fdabca3aead52fa0c14f1694bb74772bc776255eadab1ee7917adcb6af5ce20c46590ab5f67ed8b6bd4b15c98cbd9b588834a8f4efbb031ec81ba5c2d4b1256b97aa6c267778927a7435fa5bbcec7d68bf834e37f16ae6d50c74deab8591dabbd67476b9d8f5347c52aa6db712a6f76dabade75380e56f7af47e7f0dc464f76af77d5b52d3e5d4df1a9db0dda76531e90cccf8e779fcdd57c6a5db65df6286eaff874582d92fb6f7765578e88cf3f7294dc2f5db95db57fd4a9a3f6ad06f5fc90788ef23c55de9c4ab7ad3e56db3c59c3727cf752c94ac6f4045766635dff4475d4e5faa148764f65df504f97c6fadf0e740fce553d506c1771e556525d4e52c74e29ece9859e83e3c921ec4f76afb53a9ea66c1b26e2db3fc35c3fe99e9b44d6e92ea7beba5e7a86fb4e0fdda63ed3bddfed4c757e16b209c218eeb1eeaa599fadee8d40766f57d746a26ba7aa6ba3bc6b521edc3bc7173f37f8eeef42324cf7cf453a98ee9fa7aedfe8eade43b765cef7d9b2dda7eb481197e7880b5038edd03338ec9b02c4a5eab392793c8ecb5c152f5f26917591392e7bb554e717fbe25297df3a2e471be252f54fc4c6a078d3f68d35c4ef38c461b4ba77197a06c785be7f39926bbabf1be960ba7f457c5cf65aa3ae5f49c425d61fc7e555289c76e8191cf6cd69c4a5caa785aa0f18f35955c7133a9e6f4943aeaadb898d49e4f6f3c9bd350db9dafe3d49e4de40e89b4978dad775bfcd7811efeb70eef86cef0f93c85271edf7f53ebadd789388f7751d6fdad72788445f5736c5f2bcf8972ce05abe48f4f589c84f74ffddade819ecabfafe6d48aee9feed4807d3fd3b449caff7d56dc83b85d9d7b1fed8d7ef4ab4553e83c3d6ba268bcbbb7d9c355fdd8f770d3a77e2a7afd64fd70dce405c4de1dce3ca1f3b5d9ddfabe41528f9b7a3733816fac22d74c3ed97e3cae99fa3e47454d7a7bad7fb7da5aedfa7c2d3f58bfbd5736b7ccf3de09e8fd3fc1ff2f17fd8e72bbaef08dbf220ba876d9b22e2eb248fa8eba8dd2b9fd1d7705ce9b23e15d747d5f1311fbfc94ade1de81c9e7bc2d37f9c2e371e57c793bc7bdd747b5ac76f47a4c793665f91baa2380b5c47d2363f95c2e62079d234119f274d73fd60407d12597bd533572779e639757c5e1d9f55f20f10f16d19ddb7f9823a3fd0775fa56b9967ebbc7a1cd243cb8677ee4cc3fe97d4f165757c51857390886f3be87e54531991693d36d37b6b954e07c7fb8f3c77e26150a188f7c5b214fea1db67afaae33a25ef101f03dd7648d67e4a155612bb62d3457c7fc27475ff35757ea8baaff3f099bee7755ff1ebea7c86eff9d9bee775db56e55db159f1cf8bef213970fe86679bd405aebd89aea9be23f17d8fcf60d5a7139b131fb6784bc4b7ef741b6eae7aee6ef41e66a0efdfa3cee7f96c9aafceef45e7705ce093abfb855ff7ddd7720ff3e9fb0375fca13abee3d938e12bf40ee229de8e9799d4a7df50320e57efdc87ce1d9f1e9cacfeafdf5565526c9192713f3a7764e48c73f5cd994ecb8a2df6f15b88aec3b158dd7f009d83ec64e3766faa6797f86c5ba2de7d278d778f50c7129f6daa5f77485bd7b6210393c8fa913afed81787da67419eee37c5f1aacbb6b7d5f952a5c383e81c74d0e37bef0ab36f1fe17bffa1f8f787bea09eff893afed4a7db3211df2ff69e3afe9cf649f10b9feecbbd671af5fb994fbfe53ebd8f54e13e8cf4d0d7e1b842c497512bd4fbbf54e747f9ee1fa5ee9bc6dd93a5113d56f7bec8388f95fd555a563a7d39bf72f51bfa3e0adb89ab61dbddebc3b4de1fa8e3afd531cd723276b488cfbf8e56c79522be6c5ba9c2fdcc95395c97371faae36f8285abfb18c56f7d7adce0bbff3be1b53bf075d5b71c5ba5ee3f82cee1788cc757feede83e5cd5b147a8be13f17b75fc83cff632115fee9625f1976eea99d53e5eabdd30476cf73db7563df7a8effa3a75fd319f2e6bd17d78fe8feaa8dbbdba2e6c62ac651f8b7c4df3fb530aee7f46324cf73f26e2e52f4aee1a5fbcac415cdaa1bf1d462367bb4c47eafc4bcfc1fa9b4fb6697cfd93785e8de3ec3a0eaf42e741fc53d52f62e5be782d573a7fe5ca1895a39eff14859f2c5dffdd27bf42c97f029dc37dd338c5e7eaf88f781971e5881ec3582f12f36295078b2fbd7b79ba6cf90cbd07e75f207b52f55327cbbffe298cfd25b93a8fd675e4da14dcfe258cede3dc9b02ca51f1d6d87efeb7886f3f7fad8e3addfe4771d9e0e3f08dbabed10b2fb6015d33b58d53e966ba56ad64568a783fac74ed1f7daaf2115d67d67e5895222cf55cec38f49c0e6b13baf65f750dc98b6d42d7e058ad747b129d3bba8d6de993bb593df7140a1b8e5bd4f5a7d139bca7c64c6235eafe453e7988a77cc6096f8cce97ffe70be378e1d5011c5e63749beb5374bf1dd2535fd332701f56353ac2f5efa838d81b1f66ca38305dfb561def0dfe6eac4ec497e56a5c2e56eff39d7a153f7b5dbdc7ea715aeda7f7270fbb51ae50c70611dfced3e37f31240fee3f13d09ead3e7bb6fac28d89d4ed1b9dafb65047dd3fba179dc3518f23c2df3afc1de89aaab7c54e50ef3febf3d113d1b327a267e1b853c4f7e9ec74f94fd8eb93addf3b493dff1c3a87a34a4fb193d57ddd97a3d3e829488793d135389eaade79019d3bf2c6bfe0fac084dd4458a789f872fc345f98a7abfb2fa273b06d7efcf331ddd7f6123ad78cb19c977d72fc7a9d896cd4fd798fa7f0573d763b1e9d43586aaee8789d4ffd373d79c66baa0d196ba58e67f9b8e9f1cbb73390addadeb1b3457cfbf56c97519e2e6774deff458a30b43cd5f7185373d163e728f9afa07338ee12713e1fd363a0daf7cf1571f9b33c77f4caaff7c939cf27e73c5fbc9cafeebfea7bef7c6417dc7fcd8db7fc5df1f6a4b43bee5aab98f4f1f9a24294891a91273388d122fd651ffacdd40b3e40746bf8053fa364b0f56287f36a8569d5c532b9a6a35e148849c65517fde4bc711dfa2cf9bbcc79a2520a7d3d9610c4d30941807255cebf0ab464a4ceb93e4fae3881452395ce9d0962a17384b7d638d5ab95cebf7829cb9d60ab44837356eafcae91f2d6386a273e99ca24585ee27fa7c491e9ae7ea976ae68a035ce7995d470a9fcbd556a5a21b55fe05cab976b71368b0d62a673dc2e434bb4bdd6f9db1466a94266d6d1bc0886baee2eb5d1d134dbb106b4cf93bef87f31d21c3102e85bbf1e739361cb3c99eb9f971013ffc7d0cd64a0205ba0644c94c86271d726893c59d69524100c6e63a28566ff76791789c2a4b698c940740f90167831fcfaa2b99fd77eb2e4eb56f1a615883c59340e4c615a32b0202f57ce6a0e6242ab562df341513ffe9809bf2cb6976611bffb5ca57c2e7804b496855f7c04c8619c5227575b820acfe5ce6f57b965d28c2aa9a4dfac398e9a65d2b02a6586f75eb1631e1809cac202c712e70e408077a0989ce9c8aa77fe416809719f0f8ab691d1975838a7424045600b5304cafeefd266493fd492cee451d8b6d10a2f0af3648dab6f1247a7c29255b116aa3ea693e2dec78b37975efaf147adccf1d25ec64b26a15131b39f2966da673b69a52e4b92c54b8746bbbc78811f33c38e846fa7d28122d8d244b043b67d7ba64ce355b2beb5390386306976ac3f7b3203ec4c38616a152884ad0c08f30161178356a2553b9f56a01021b9b529723a364fc19d9973c3acf63e3e04ad48e7ee96b4dc0deada6d4cf4e4f4ea35acf4747b72a9d37038dcb957e63c5f218b38b8bec49158e6840df266c810bc3668fc1bc9c9c2b8ca783f5923d51e92ea70d43a0eab1945bcad81783ef86b4f831bc83cce9f18bad189a11d95cc7a854d66ed29c9bdc34aee4049ee135672474a72dfb0923b99920d3c2f8762f9938dd70da3ff9ae9bcbbd13166ab6c5b3738ef9bba6d9227977e692797fe32b9e408536752308da864d2d9147770718049497fd4f5a7a3ae0b25786048c15d296f1b14d6dbba99bc4dda51c9ea6dcb9c6b6ea7db1c79b752f6d4407bbb565600eac47ae939ee9e30d4d3dabb16c9cd581aa41ec9fd70ffb4fd70b0f443e85ee5d395f2d0ee9423e58474a41e94230d09eb483da9b2676813943dbd4cc2a1d81826122befdf3a3f09c23bd2c27b539a0f37685e53d12290e67d28e023c202ef4b491e1956723f539e20b3a0d3b25c0299070fe6c9be0be8a9582b8e136eafaf0e778b4c6da091ee3d2e718eeba516701db4483de8903c0f19250c2d799991ce31965acd65050c49b79079d96899974d48929799b4099e9b9973d2313274bbd850396f7f2aa7196bc869de33656349729a0154921d1736c90e344986243bdee0abf9e0abe00ced65499110ce183a9c41a6ac41965627346bd6e0b65041de7a399ee7ca5b2c6027b76dd25537390ebc55394ea9f34cad13468572f2309901acbb1ae4effa10ee8f3939e4cbe470481ac981d32a2a01ec6ff22468cac338464217341442254ecb7596582d93e1f1f232507263b7523e5a294e708e7a682ec1dfdad0fe36d8a40db49060695aca8a500f5a700e25b820a4e021541a2f0c9bc6879a24436e03cbbdc2d6b086516a1785557b3895a34e31e4a8dfc482e5a82328e1530dc2f7b608267c249514a6a5e32349bc7a1425f800531a031b67c986468ef37f8bf306f4c195c9d49f230b432f37c871d27aa5f31714d8e3d0f35b9c27dca1f0207ae6524e716058a7184dc5db418678fb3260bc8da1841f6c103e7fbf60c2c75271778829ee20d3847203aa251b55d9169f1be6c8490939721e4a83ecdd2b97315727e335479ce894172739471870cb91e54095bc97233736ad95796d90381d47e97fa849fff648ff2548c320218e37850884a71bf2ad58c07c6b824938547c6608a2e2030bed82577cf2286cb34cd8a09a04e3a550736d90cf2f950e50d158572e6fa20232dfa0579e6ce56f16cd592183d602ccdaa9937f7b551408db1b010e53f182850ffe8a97fe3157bca005922b17b567437baa823591ca54e71a32d558904c75129516e65169617e4669a1c0e473b2ffa7a6597d8e4e51255236a4bcf0157e586cba9fbff52f3ba80ad3f0aca6d271ac9c785a2737ae76c9d541660a83346bd10ed52e7c9924cc69e2309926b2a939952e0aa952fb7043a9fd58ab60a5f66493cbca8ebfda6675d9d9524236dc76a1c96d65ef64511a91df947a0e96933beb64a65aae325537eb1e2c775aae95c56685731d325e7c7facdce518ea4b7325ef6a497e8bec86df20aba066275f249d3cdb76528e5e4415008b0d0540a05af5142a09151b92d0370193d0544aed2561d59e46a97d8441ed9dad83a97d0025bcc4207c619b60c20f34096f23dc9d49c3b4100fa204c3aca084ea2634b1753b619dafa5b856b61574fbaf5c5ed9e1fcae72aead932272e434403df320889607536c9719d8760dc8f6100ac1f2906c0f350906f73c321dc14906d7a69b0443fd6b8520ea5fb0983e78fd6b86291cc07eb401fb4d01b1cfa492f9cab0c97c1625f998b0926753925785953c87927c6c58c973a9485c6d8844987c132412e751c2d718849706143e9f4a9865a6bc698480b6b85749759b4f5ebf4699582fa5d43a7f6f55656e795cff08f47954aa46739074be80d273ad494f775d10ccaf823a4599ec4383108bc5a640a11e46a15f67407f4140f48753c2cb0dc2ff1450f8428a57858957df14f15a2ea7e57857273a5783705c4469b3dea40d9c7af116249cc514d20d06a47bda07435a4c19b1d164048ca3b9f80e70902d961d7e656a4dd356598c07c7b884d2a0d2a401e46c0b1b2b064b32ac161c41213dce80f4dd80484ba81c7953d81c7929a5769529d3ec104ced524aedeab06a2f3349865ac76641d43a608b80e0b58ee55438355438c76714ce9114a9dab0a45698244304d71922787ac760117c1425bcde207c6740e14753c21b0cc25f09287c25257cab41f8c04ec1841f4309df66105e1e50f82a4af87683f0ab030a3f9612bec320fcae80c257534e7e4258275f43a97da241ed9e9d83a95d46a9bd33acda6b0d92f3e414b76cae24f2cf7e0ab6d802b659486f6e296c30615a45942a7caa4b699d295ea0843ec5a45280a2bc9cf2a6530ddef451c0445041093fcd20fc9880aeba9e127eba41f8ae80c23750c2cf3008efda2598f08d54649e1932322b29c16709435d709cf4ce2d328de5c895a0b05c77b3fab2266c99502107aecba4ef7b1d4e7ae01ad67fe728efad553e5de578fb04e76a10ad8fa3b43edba4358cbc4227ae576f769b926e33c434af30478c52b5ee5181f4da44f9c039061f782ca083555146ef0ae903d526c130dfffdc74040fa6056f360986eae17982a81ec2ce24eda5c420d5c32d14f60b0cd80b0326bd1a4af88506e12b020a3f9e127e9141f8990185d79a8443c90cfb30862a99eb28b52f31a83db56b30b5eb293fbfd494b8c11eddbf109fdd0449020d54989799c2ec264f532d8e0f12fe560ae8e5263f0808741be507bbc3fac1760adb1521b3a41d94e02b4df101a056367a81db21b22a609172021503571962e0bd8031702225fc6a83f0aedd8209df69120eb9ec3582c865e19b25c11be12799c201e7b82e9dc84e3246723225784f48c1a7505e747d48f73c95127c4348c1a7990443dcc3b6b0fe79712020c8bcb8d3292fbcc9e08553bb07f3c233a84ce6e6b099cc9994dab718d45e1150edb328e1b71a84ef0c28fc6c2a65de46a5ccdb334a99e750ee788730e496302b6bb5f30f7a1c60c4778358222be3307774bbbc53232bf06501cbb05d9416779ab4e8d1a845bef31b2ae03062e0ced9c85c8773291dee32e9d05de950e0fc5f27bb02e09dedceefcc35388fd2e06e93066d515cc0ca0e58341a24b4f329f7bdc7e0bef37b0473df0b28f7bd9772dffb3272df0ba94cef7e43a6b75fc04cef228ad00306422d7b0623743125fc4183f0e101855f42097fc814b701855f4ac5edc354dc3e9251dc5e4625874793654d939a386bba9cd2e2b1e459d3c426cc9a76533a3c9e2c6b2a6cc2ace90a4a832752654d47caf082cd42bf9272df270deedbb35730f7bd8a72dfa728f77d3a23f7bd9a42065b5487a9e85d43d179c640e7a68074aea5e8eca5e83c9b119deb28239e3318f1554023f650e89f0f89fe7a4aeb170c5a2fe91d4ceb1b28f42f52e85fca08fd8d94112f1b8cf82ca0113751c25f3108efda2798f09b29e1af1a841706147e0b85ff350affeb19e1bf95724ef8ec0159ac153471b1761ba5c5f74c5a78c5daa4262cd66ea77478c3a4832ed6263761b17607a5c19b260dda09af589b237bedb6049cca7227e5c0df3738306cc911c481efa21cf82dca817f909103df4d19f1b6c188ed018db88712fe8e41f87b0185df6b120ed1055f720b532edc4769fd2383d6f3fb05d3fa7e9370e81e816f9785ea1e798052fb5d83da3501d57e9082fd1353da826181e493d54a9d476be474b20d32dfa9957339dd3549e57218708970f77b74d7b3963957cbe54ad78df25ce79b6562ad1aa49b2807e9f45ad81dc2ddfa2b470e92bb5b7d8394cd520aac90de24afd4c9a72a9064f33060a51acec4038741e79c3e4445d04f0d11746ac0087a9812fe3383f0db020a7f84ca8cdea332a39f6794193d4a19f10b13a1fec18c788c12fe4b83f0f280c21f370987c4fa7e3a995192aeeb270c82f3e4264ccdb3075be24e3b4dbb07dbaf4cbc8cf364e0c37cc9f7600baf2b35a7e649ca977e6d4a6d017de929937028223e0c5b443c4d49fe4d58c9dfa1ca87dfa6e3ff4932cd674cfe2f37625adf2cfe1f660face49effbbb43dff23e9f96392787eb89dbacc31b197729edf87759e6729e7f94348e7798e4aa67f3424d36f06044ba6cf535ac3172013aa44b0087c866c6855c86508a6052c39b2ba941370aed10b941e7f36e9017b680493ff2225ffe390b1f312153b7f31c44efdc060b1f332a5f55fa9d88134b2515511757c5434eeef90e94cb05728233f3118b97d5030235fa58cfc9bc94848817a6e845b9fcd7c9ecc6b54c89f9a4286d6befb318abcc67daaf31a374129761244b908ba90e4754a83cf4c1af4316ab050fe552f578cbbb5feccd6097d97d2e5ef265d06a4a94be246c64174fa1ee5789f1b1cefeafd8339de1b94c15f84cc13dea4047f1952f0f729c1ff0829f82d9360e0fc4f03e7a70272fe0125fc5f06e13b070713fe3685e4ab9048de310986dce7eb740427690cfdd02418daa1ff6ebce16b87c2576683b7437f4461ffc680bd744830ec3fa68cf82f65c4ff3232e25dca886f0d46ec0e68c44f28e1b049975ff80b438309ff29e598507b49c84e614d5889c0db8294cb3ab6cec873c56859e06d56bfe3679de7c833b7f81927b73ba895a5be9be5d6c959e9393263f696fdba9d4a30cdb3c65733d0e14067925bc4ae6fccce7364665e1e703ae2cf28162d4c2c602b1bbcb7985bcbf40a586f09ee36a96195f0568ebafa81cea9244c729e0e3a53ff3dca61f633384cd7800ef3732a49b58c1149aa552c9324f50bca88d606230a031af14b2aa6db98621a66a39bbb4857aace5558e900ad0b774b9a64719a9bf4ee683985d6ed56f5fc3a3e056c919ea1bb50e3efd54bbfaa37a4a2b552c32da803d695bd45b54e83f8d7fb267ad03a6d1b0bd93afd1515e9ed0c91be6658b048ff8012dede207c4f40e1bfa63caa83c9a360a1c762d520a854fd05de4647413bbb3fa40ceb6830ace7f06086fd8632ac93c9301875f516aec7ef68e39aba559919ccc4df525a74a6b480f1c67c39bee9ff9a4fe6a39ebfa3b4e862d2a223d262961a772d930cea0285fa11156a5753a8bd50a854e8701d3282602dafdf536ed6cde0669f0574b33f504676371909c3ea5ee95a16d7c0766b05b5192c08f9a341873cb9573cacb968ae0f65ad967b96bac36aeeb6685e8e0ff9f958e73eb8f3365592548a0a15d9ba7cc9ecc35a3d62413754ef1983bed283e41bcd6311d59ffa27cabb7a99bcabb7889fac9db80b47e659c89f294d7a9b34198234d922f9b8f6973a37c1cf6a24affac62c57dfcf5cbf8f29fdfaa4cae2f4774933598af5172ad4bee96671fed033cbe2fe4a6571fd0c59dc63238365719f5046f63719090b68e7c67558bbd5c25af9e696c68d68dc4c70bdda873193ad69fe46193dc060744d40a33fa58c1e68325ae62d0154ff8c923ec824bd4d63a9919701a6bf5398f637603a6654304c9f53c2071b843f1550f81714a59c58b8cea72f29c143420afe078563a8a9aa1e10c73f29e1c30cc273728309ff17257cb841f8c680c2bfa2848f30087f28a0f0afa9c81c694a4bf522bd3db2c24d3572bbee57c74d5eb27be2d1bfa9281a65eaac0b1845ffa1a228d7144530eb3271ee571063be3185077d3da3a9be9e3119f5f5fcd7148efb01cf34f2919369c1ffa3808d330183e2272f10a06f29f9e34df2db0b61f4e820218a1811e204aa269be8028ba4a7ebad02bd3bc13c3d46699267d2042440fb276849d0c2104a9efcca16ec6e97adfd884a9d33d87525f85e44f931e8bc8a8721d387b1053551b6a07a2558962c7cf29bf0a6f881d34931a8dac5ab74d8a2d3daec19f8568b84a86945474d4bca010a4c0e003b86eb4af97ae7e26a51af8c0ada17d48a0ab790ea6a3387bb59150241c26e6d72c741d976c759b29bb73603779c1c83ca423ca20984331611ce982c74f21be4266ef21367abb3c8cd7dcecdf696ca9e41683216a386755d064ca7183a4af48f99ec5449765882e599ea477e87dc9452a0a37e5ad88efa7694e403c24a6e4f493e30ace40e26c950db3a2816febb6d1da94ce9e0904da14e148f43c2f2e84c493e34ace42e94e4e9612577a524cf082bb91b25796658c9dd29c9b3c24aee4139ddec904ed79352794e58957b992443dd606e3a2a27f9de636f4ae5796155ee43519e1f92725f4ae5056155ee47493e2cace4fe94e4c3c34a1e40495e1856f240cae71685f4b94194ca8bc3aabc3fe573c5217d6e3025784948c139148b23c2b21842a95c1252e5a15485606913540886513c4ac3f2186e920ccf2f4b874792297f234c82e1f9e5e908fe88163c928ac12343c6e0284af08a908273a9d83b2a6cec8da662efe890b137868abd9521636f2c05f9989090c751825785143c9e8abd63c3c6de042af656878cbd3c2af6d6848cbd7c0a725948c81329c16b430a9e44c5debab0b15760ea85909f3687cd8db3bfc0cd340cd1b40bddcad3898bd134b1422a2e2ac2c6c5649364e8ac5b9f8eca4936402ea2fc724348bf9c4209de1852f0542aed57864cfbd3a8d83b2e6cec1d40b1d81492c58194e0aa90820fa2045787147c3005797358c887502a6f09a9f2a194e09a9082a7532dade343b6b466501ad786d47826a5715d488d67511ad787d47836a57143488de75082b786143c9742b12d248a7994c6db436a3c9f6a19ee688296e1020ac70921711c46e13831248ec3a92c6e67d82c6e2105faa42600bd8852fbe4b06a2fa6d43ea509d42ea6d43e35acda4b28c9a785957c0405e4f426005242a97d4658b5975292cf0c2bb9944ae467854ce4cb28c1678714bc9c127c4e48c1475282778514bc82127c6e48c1475182cf0b29f8682a873e3f640ebd9272e40bc23af23194e40bc34a5e65920cb3be2e4a074692595fc7524dcb8b43362d57532c2e09cb620dc5e2d2902cca2857be2ca42baf35f5a5e438a7b10da239fa52960bb7ff04fa3d0a9ab817e5f218ac9d8d679537046c1d2be88d81c2690428d1af56e69924bb633093844f0bf24377a6d81f2a9aad27ed08270c77ba6ead7c422f126a3a1fb8c2e403308527362109fda6d0cbe709c9dce14ae90edc0a514e514e658f5785cd1e2ba81cfdea9039fa7a2a7bbc2664f6b881127c6d48c11ba9cec2eb4276165652b1b7276cec1d47b1b83e248b4d148b1b42b2a8a204df1852703505f9a6b0903753906f0e09790bd5b4bba5099a7635148f5bc3f2389ee2715b481eb5545e747bc8bca88e6a1cdc11b271504f41be332ce4060af25d21216fa558dc1d92c53653c565b8731a83ef88dab0c7eb4a550d69baaacb3d2666c6fac3bdb2fe902782ecf39a89be540d62bb29da2176ee4b27da417b42f00e936038bd3f96b81842ff04590c7102954b3ed004b9e48994f0079b40f84e2a7778286cee709249323cff703ab199ece38526c1b028e89174044fa4dde4144af0a321059f4a417e2c2ce4d3a89e83c743f61c9c4ea9fc445895cfa012e3934d9418cf3405001b793f950e930f68c16751b09f0e09fb6c0af677c2c23ec754e08d704e63cb44f3acbcd10546b05536cfa45d88ed958558bf04ebd2d1812a98765139f0b34d90039f4b45fe736123ff3c4aede79b40edf329e12f3481f00ba89ae58b31c322bfd9f234713f98c5027600d9262378938afa097239e002e77eb1dc6146efe762aebf98a668ad963bd878ae3553ee39e2ae6b0ff6bdb60b292b5f32597976a395cb9c9a14243a378156cbbf1708f7c33eb572fdbc9b4017343e39a77177e5f8fd1b6b158fa5f26eb923b141da0572e3e97912e0f9607a50924a052c24dc20efc633c589d5cfdbfd0c78b045a31751a45fa6fc0987e8da54e0bce3d282bd78563bbe512be3dcb5b654ed68edd7d67b97bede54fe743165e52b262b0ff1598999bb76ce9531562d6df46b191f43f84eb2b482df0a62d9259465af9a2c3b34adf89b21779fa81478d7a47031e7dd0962dba5946daf996c2bf2d9b648c6ce4665199c6d6f364b2ea32c79dd64c90559cecfbc7760d731bd9b5739da06bc2e80976376b415509634c86a06cef5a082d57479dbe514f5ef9aa8cf482b6d2c14eea7ea6cc8d57653f67dcf64df4246af82abc7cb60c02ab73aeceddb19bfff5ad858bd82b2fa0d93d50727b59ad6b444dae2ee5bebdaa84b63b8ba4e114a4c1799c7e695945d6f9aec3a2a70cd6ea9bc135fb7334970afe15dfdf4f6a099d7043389e7ab281edf37f1383c2b653677697e3565f35b543d25980f681ff6b6a2f5efde18c4238258760d65d90f4c961d4058b64ca6cf2a5537719bdabad5b25ca5e2f284d8e069a35c4b59f4b6c9a2b98cb9af8e5577eb96b5c2dd18b1e92cbd8eb2f41d93a5b0cf69fa3945bc0578a73460325fc672ad6c0dad734adc1d4d68d51ecaaa1fa6d326880f17d71096c958a8759e8574b82149e9172fa3e92cbb9eb2ec4726cb66a5cc39d36b15d07968b2366ba639e50d948d3f36d958c15ca3ae973bf4c17e616e8d79b9f480cac6d4d8346dc44c4ad11b294eef9a382d6bb696477242e139dc4471f88989c34c320f8316d25ae7219d36dc5de292973866494d1dd3375316fed464e18280161e293d7a331123cd61ef2d94bd3f33d95bc2e8d9751994bf4d41e0568ac07b4d552ebb79db0c542af35b751b65d5cf4d56cd0be8c7de67d66df0e1db295b7f41f550048dc1b9f289446ff4e7afe9cb0d62df1d947dbf34d97760889a63bd2c796123b8f5aa9d475b559af06c109beea46c7a3f589cf9fd137f9933552ae32c29efa2ecfb15655f9036a36beb3c5567f2eec28847f2da6153d51cefa6ecfbc064df7091bc57b0d421cca1e53d9496bf4edeb71724169666140b9cbe772f65f58726abe9ef6e97360ed5e33cc2fb0e1a94fd0dc67a6766fdfbf7517affc6a4f7b4942dae05726c107a1fabe4973ee6886ab9d96562fb37590c64de82bc9fb2e7b7546d39791a81d6f0125983ac33d421d2194b809ad7fa26b4f001cac2dfa5d346368f0d2c90be77bc5c4950a5bcb239c7071ea46cfc88eaa14aa71f201d2b33cb3132b7f421cad2df9b2c9d9f566cfa477adc74a8ed6ece787d98b2f60f266b57a48c57de9e71ee3ef347281a7f34d1389ab11da86b3599f704d1b48210799422f227139129494a517f3d39be3c85d9ce75be1e41b3a4f8c576416c798cb2e5cfd4b84166b6409ce12f69d1b698568a05b1e871caa28f4d165d9151cdae54c47f070b6aa9e9c64e10bb938d17a5fa9a59aa6f9971f7333c41c5c35f827956e2ccffe66a993e4959f457aaaf37752f473a257f3a7d25c1fb53322f1f9fa2387c62e2302600071da7fa13094d55863d4d69fc3793c6235396e8de386f85bc0af3a09aa6a5f31d4ad34f9bba6c2993b308751b8d23bd3c43d9f2593a731fa9faf11ccbeac67b292bff4ecda30896cfb9b59ec4bb897363f4d75ae8f84c943243f6d7421917c4e667299b3f37d93cc217b35e98dca9e9394acf2f4c7a4ef2e989f327bfcef394cee9b64632ad6b3e4f59f0a5c982639ab9f68d3d30dd94a7df0942e5058aca3fd2995ba0430c92ab78965129ae6972931729cbfe994e9f42d09a45f85665e696be4459faaf74d2a6fb6969d73feb515fb1ebe345a230857da6740b6f05b1e065ca82afd29fff0a6106f1436c1f75bda962e815cabeafa93ef2e4e5b7f76921bf8efad34e74ae417d9628594e9359d9f62a65f5bf33e99b756375a9f3f05ae1b654d689e69ef7ff1a65e17fd2497966c299958aa9ebf36d9c7fb198fc048c94e2f6746f91ef401d280f2aebb1fcc6726f4263793621aeecf3ae43f8d54e6c409a286d2cb9bc2f7b5312be71e0b46e21dc9f51eac3826ef61f5b2ffc8bfe6649f9552abfd1de3a411272e707c362c6094e9da752bee5ff263b6585a90c9f804a716c5d6a9b5611cb1163f29bc55896437a1490ded72cfd2fc4ea4015ab2df27285da5c2b136f4aadc5ff20b4fdcc3ed427812c4e1d26dd5d018b555b3906bb4fac96c1b89fb3a527dfa70cd9bf31bc3fe4f15280aefda414b70c65012671fda4bbb913206b853b2cf0be23b34dab16f91023df72628305bbb365adb6c601e7cea1d3650e05b02e120861184a23142d1811c2a77975236ebeeca4040165b26a0653b58ac5a648007ba8ad072cc609aca7703f0e9a2fbcd96d5106d7b58307ae0527b8ee06702070b3f3120c8037c8abe59180b64678d0f6e3f6b6f8e439d7f95da9e651ea1936aed745015c6e470f5c4b4e70f0196b982a926eb1100578bb51a1d08a135e0794548be3fa97a2802977a087a93527a67608933779360a8876f7f610b5e14754d9d81e70dbd05140347f9887a82d27a2d612515da4b2f1969d3c38ed38e1c04649c58dcd223df2e5ceca2991e562831c7387927089ea2d8b02c017501ed59e13605b9447819a3018180540ef77f30075e0cea18ae5688bb7334b342aa1bb900f75cc960fe9c54e510074570f0f50274e40b0efa0aea5cf11dba5d50d8d554b98c3532e4bbf12e961e5d2dfaa9c00a300117e34c4ce9c10070911070f7ac160617345e316a0e511afbff744fd625d38517652799af6b71daac45c269bd85140751bcadbba66ab810ded453c80aedb8c51aa997dd5c603d78dbb818dc1e195903364931b467dbc359f5180b713f58575e784d71195a8de62377719661440bd806a673db8bba717c9e4b7c9b777cb6ce7f15a19521480ad69e101eb99dd0ec3f82941e511cbcfaa50bf7e2ffeee69a84ab833b2a35cd1f86e2b0f5a6f6e6f9b2307d51a64e0dee649de665a754e1d0ea6b64701dc47085c1f4e709d51328dea2008ccdcd0b0faf20fb9b9a3e35ba49868b7030e425ed68fbbf7acc481062b4ed2dd87300a0077c94a6e9b563ee1fe2995994f7009469d9e8ad345b86d5abdd8c82d7fe3a6e68c761eb14ef3fe2dd0d49adc8cfb377253e673b9690f0be7061ed2cbcd707e486e5ab5cedc901d16b90126fde406ca0273d3aecbe4062ac07333ca4f720335b17303556073d39abe921b68ce466ee096ad49677a943e3761c02737697330d7d8859f6bec94cd25862473938ce8e6123de0b9297a9172331a9bc9254604bdb9a2e6399ef9305774408bffbfa771e6c334ce8100013e75003f6e1d6210771d6275638c41be9e7cf5e944a724f7e930304187f8af86e8ba82499b7671b589cee91898498d62109a5ab1bf4d38274512e7228473b04d380b2289b31ae1ccc906ce0d2450acfe6a315914f1e1ecc885f301e1e11c6213cec248e2bc06e11c6a13ce2991c4f97b8473984d388b2289f32d8473b84d38274612e71108e7089b70164412e70908e7489b704e8a24ce7284731427ce5e0ae73ad5acf4afbbc66b7af3f940b6e202b91faa71e672cffad11d13e97612c1f3b5f2d9e855e567210f1dcd0976b0c0bd46e9f79a4619ee1004770cf7e49764cd4e2c0e4a7a36946db850f64019c0584e945d14ca221f50b73f111e8a9e1fde8ffc705c36e04dcd3ebc0fb8e03d81e08de784d72745191e9f8859dbe66cc9f84f08e6049b604e8920cc3f23987936c12c8c20cc8f10cc7c9b604e8e20cc3f2098136d82392982307f8b604eb20926e3d0051bccdf21980536c1646c95b3c1fc3582596813cc28b6707e83604eb609e6d408c2fc18c12cb209e6b408c2fc0b82398513e61805b3ca79a84a1ecddfbe0df62d64c69cb50717f2a35177c7544ee4ed25f28d7242953bc16b838417bd4e8e8ec84ba73567675bfceea08cde773217ca55c8fb0ee044392a21c19749617385fefcd34ce73f78e756d91ddc20926decc90a9b2d779d85601f980dbf4dafa88a22cafd5116701027cafd0d5940badbdeb3a21dcc857632f2d283b9bd74869cbfbe45cdda857d5af51789617eaf9ecbecce108f5e41d51279e921d9d8e16ea2f3bf5a055e26cb77b89a853e79b6847e2a42786836104ed9e7107e07219cce89b087f0067ef5d1ff01d5a80ef03e8520ceb0695e31eb642e369cb9a8909969134ed6d9476c384b10ce5936e1649d1bc7867327c2399b7b9309b7dccecffe387a7f2e7cefa0bc728e3d9361a2d821370e79e2dc6ca0c4b3e1163a95f0796a91dd7ae7a5edd928c1d9506e475e398fbfa31877b1ad169b24ba9972d9de26256aae80ef2b5625eeb9108124de09c19c9f8df677bd5c0a5cd7d825acd734eaa3a9f76822e720301bda1b10da05d918d04877623663fec9362dfb6004f3309b60320eb5b1c13c00c13cdc26988c1367d8601622980b6d82c938a58b0de6180473914d3019271bb2c19c86602eb6096614d7054d41308b6d82c93871860de6700473894d3019c779d860f647308fb00926e364433698a311cc129b6032b680d8608e40309772c2cc1189fd47c1661c3196ef6c338e0e437d4aa5cd3963cedf59cc988bf20d64205f5d66134cc6f29d0de644047339f7be9ef893c030f11036d483591d7a233a625bca08cce0e886301e998de10be834de2af4c77fb3345ecee6857d11be159cf8fa217c89f3e14098b7ea3cca1310de40408fcad6871ef7ad391ca7208447670361d13e87f04084706536c6c8e3379670a70c7afb1ec04e97519e10f33ec2798cdd9574c6be76b64afa5654495f95ad495bdec02f1ebb64f751b6a1b493918f1e6bcf84eb28aef33d08a15c9dad4a51aafd95a39c7f4e4540d7d8b4ffd6d44876c0fd0be12cb309e7e448e2bc1be15c6b134ed6b5e86c382f4638d7d984734a2471fe0ae12cb70967512471be847056d88493754777369c87219ceb6dc2c9ba05391bcee311ce0d36e164dd209f0de72a84732377453ebdcfc69448d5e0c3358c15f9c3b8801620a095d9d872afc0d71d92854e39b6a18a6a04ef384e780344baeb78e317f533ce39fa880b6a15ea3bda642354c60e1036a89b10d42a1ba132cedb6483ba1141adb6112a6309cf06752a82bad946a88c7392d8a0e621a85b6c84ca38df830dea1804b5c646a88c3392d8a08e40508fe7845a2012073de21767cd12dee7e65c43e23f5e17ff854befcb80a5b246ab7bff1923219f2b12e0e3023a126aed59021bc58da447227faeb377a921e34c50b6f1d11f232fadb767ef44d62d2dd8fc740782d96013cc286e787e0e82b9d5269851dcf0bc1ec1dc6613cc284e84684030b7db04338a1b9e5722983b6c8219c50dcf8f43304fb009661437982c46304fb4096614373c5f8260eeb4096614373cdf85609e6413cc28eeaf742e8279b2ddb398a3b8b9792fd4763f85136f2785d7ddaaaa4ab6e25dd9959cfb2bb17d055320bf3c35dbfb1ba7dfed11c5fd9526209f3c2d5b339917c91ecd4dbe1ecfd9ce6bb532c428cf641e807cf5744ea09d9326f23a3e74edb9d0b540e8ce68ce050ad1dfcea2174279663616bdc20796f79d45af2508df59766ca8ef8e1ed5488f75c785583d93edb3a267a202e76c9b36e7656d4cb2796a7f84f31c9b704e8a24ce8311ce5d36e12c8824ce7284f35c4e9cc344e23a39d8c202a62e34083db5b6d879bd5c4033b2448275bfab51959d1a67372ec83d5161759e4d53c2a74672f7c4af10cef36dc239399238ef41382fb00927ebe79ad9705e82705e6813ce2991c4f901c279914d388b2289f31584f3629b70b24e5560c37938c279894d380b2289b30ee1bcd4269c932289f35884f3b26c751d2f9595f40647f20c011fc65bae56d095cb15741591ee3a5e8d805e6ecf34d928cefed81f353c77676358586ffae7aee95c2b5beefaa1a8ef15b60ef9e515d958d3d90c9f7f62837708827725273ce85f58eedcae94cb098ae5f2815a2900ba3c4a647f5214bf9fd51d01bccade19ef8c25381bdabb10daabed993c5314c93972ad5091734d3672c929d9cf25d93cf171e489d7daf3117bc6191d6c1fb13f0bf9e175d9f0c369fb5069fd36f2c33d9cf0a61872447a061cf82894ea30f43b5baaba4e06067b7643104b25f46d6a88a352b803c4de9e22ac43c53d634c91f1471419d7f3174f1b0dfb2a2e7598ac13eb9442ebe5b62c305e14bdc6650704f3067be7d0318e72b2155ea3518e7ba33d1bab467109cc58e4a537d931f1a65416669b65f20771d5bc68d93617aa405e7ab34d531b58e7cab3e5a78508e72d36e19c14499cc7209cb7da84b3209238cf46386fe3c43930ed7c74b96a5581a802de1ae96eae1ae95a84f5f66c7498a4d7433f29924bb736209877d804338a4bb736239877da04338a9b5794219877d904338a9b57ac4730efb609661437af588160de6313cc286e5e71148279af4d30a3d8725f8e60de6713cc284e5f3812c1bcdf2698511c982b45301fb009661437af5886603e68533b9d75049ead9d9e83703e64134ed6ea111bce6284f3619b70b24e9865c35983703e928def6c4e16fbda7736f7080fe1a3d9580197ba236e96f0af249e216a25e01dbcdd72f77275cb6d477efa1827e4410a7295f31000ae504b0c61d4dd5d58189f0de049de8c60d996161e81c03e9e8d0d813458fd01e8f8d1f864d5a928d64c0f45789f68ce81e3acedf3cd36ebe9bf289f7d9213e510897281a8936b88616648a59cc000af7bdeba5a7d8f73a6dcdd7b93ba3f57c0d49c2ace3d98d8ea02ed10e0a7ec599c10c564df1125fba73951f64c81525bca3aed662257a97f0ac2f81dbb77ab63ec1d65dbad6e0ec2fb8cbdf3ee1907ebd8268c7d83f2d2bdd9c800a872dfcb0018f351b60ca005f2d067b9f7535ca25af47a71d702e99990eca357967745fef75c36fc2fbfd107cb658354cf4a8ef62e614f238ccf73772c033077ea77b37e38721117ccc908e60bf6ac0061ac18b1b585d6a07cf1c56ca0cc4fd2628f76f7dd9bc82b5fca460f68e13ed703ba11217c391b9d73e08d736475a7412ab1d079659dcc2f8be51219c83feb645db3464479bb802204f6157b961d44718ed20284f2d56cac992bf4154151ae06d52278afd9b4adca54ced29b6d5b957f209cafdb8473722471de8c707ed7269c8591c4793ec2f93d9b704e8924cef710ce376cc25914499c4f229c6fda8493757369369c7311ceefdb8493753764369c5b10ceb76cc2c93a15910de74a84f307d9f8c601ac5adb77be71301be17bdba6b972acdf6865c3391e75babd63134ed655436c3897229c3fb409674124719e8a70fe8813675b29a042ed3ee74e3e8cdebcb7d6286ffc3127ae5182da06488f7abbb335abe5dfd0abd92045ce9180c1ac52492d0bd361e670c1ce47b0dfcd46393e51567af6952dabbe44f87e928d210ae85f9f27a0cf1c7ad637c8418ada48f7a49f8110fed49eb96d515cd43f1615343fe344095f385b22f3c072a1675f5223e38c1fc3632b82da229f7ccfdee95751dcafeb5a84f6e7f66c7b5a10c9bd12be8b60fec22698511c87fc2982f94b9b604671af84d710ccf76d8219c5bd125e47307f6513cc28ee95f03282f9814d30a3b857c2ab08e6af6d8219c5a529cf23981fda04338a7b25bc8060fec62698516c58fe0cc1fcad4d30a3b85bdc2f11ccdfd9bd748ab14dc4b6746a1eea04f988bb1324597f92ab7a919c6ec8581cb5e202790602f97bfe55bdf120ddde4ce8e8d82c0e93fdee354947d11901b38da1ef8732823fd83387388acdcd3c84f28f36cdee98cc5944b179e6a308e79f6cc25918499c37229c7fb609e79448e2fc3bc2f9b14d388b2289f35d84f32f36e1645d5fce86f32884f3af36e1646d2db1e13c13e1fcc4269cac5b95b3e1dc8070fe8d13279ce865fbd11ba5ec82307d6a93d74de5ec7367f3ba7f229c9fd98473722471de8970fedd269c8591c47911c2f9b94d38a74412e72f10ce2f6cc25914499ccf219c5fda8473622471ce4338ff61134ed6d174369c3508e73f6dc2c9fa2107369cc7209cffcac6a7c3f49eafc0a141c068907fa757ff1a0cc69e76b639c63dd150c6579c5847fab0ae1589f336d39fe1c9889aade5741242fd753666c44f15fbdaa63dcfa24ce0dfd9987dacbdb54efa1f64017315bc0ae3986674f7d45e88bcf33ff62c3688e2a4c42108e537f6ce91679cc2c09687fe106500ffcdc68e48137dbe9a85dc930ddea108deffec9e5ec338e3936d7acd4c94ecbfcd46851fef6f684ae2d12eebbf8fbc152684b0e11cee2bebab045e3e68fe58c93cf572d6be50309a0b7301f2da1827e660536da2387d7111f2d8169c2875feaa3d16127eb96fd9e1bed7546d873c753f4ebcc1770661ec5061c33900e16c69134ed6fe29369c87239cad6cc2c9da7bca86b312e16c9d0d9ce98f8b32aee064eb3d7d08154d6d6cc25918499cd7219c6d6dc239259238ff8a70b6b30967512471fe00e16c6f134ed62dd4d8702e45383bd88493753301369c27229c1d6dc2c9ba231d1bce0a84b313274e6f9baa66e813656bb37f81f075e6c4e70e2b2f50bd49de7640eeb0f2bef659c61e086b174eacba9f1e025e2f13b896bd593d123d9f8c21785d39e1a5b74e5397ddd11bd31c8a1a91dd6c0119c5c1e10e0864775b40328e11b1815c8c40f6b0052463ff101bc8f908644f5b40324e566003790202d9cb16908c0badd9406e41207bdb0292b145c306721702d9c716908c9365d8409e8840f6b50524e3c02e1bc8f311c87eb68064dc2d890de4790864ff6c4c36486f92611437ebeb83500ee044196ce3a9c991dc2df65be1c11c6813cc28ee162b90670eb2096614b7eff90ff2ccfd6d8219c589d9ff433007db04338a05d06708668e4d30a3b85becd708e6109b604671b7d84f10cca136c18ce26eb19f2298c36c8219c5dd6263a86a34dc2698519c6edd12c11cc109738c485c20b04e0ee0e2a52b4197b83066066c4b5cea10f291dcc3badec7c416281fae745e86cfe7c06b6cf0d8965f754639e9284e7883847f59a079114ba9a8957384ebc47a29ac9a7774723017d8cd086c2e27d861091981bbf8ca5b130c0261324cf2fc368a95aa1928e98fe69f28e3417681c2722cc808661b7b44a3bb95f40e84758c3dcbafa258531d85b281b19c28f5b26bdcb99c7e0ecb88962d873d1679e9b86c26fe4a4789e5c2fbb635169eb5b5972773613d0d611d9f8d597293f7a1999bf7a2e43e211b6da9f4c6922646b2613a1779629e4d30a3d8305d8060e6db04338a4373072198136d8219c5a1b94310cc4936c18ce2d0dc010866814d30a33834772082596813cc280ecd152198936d8219c5a1b9290866914d30a3d88b948f604eb10966143b3c262298536dda7282b508625bb3360ce19c6613ce4991c4b904e13cc0269cac5fba66c3598f701e988d75be30c7782bea7acbca6e726cf8660a0fdf419cf87a0af8ba4b99da321a446d761edfe83cbe4576119f2047302be559f430b642180fe6c43858787b1cba633fb078bace51679de40143c333046c7706fded658e0048e0e542af05ae8f20dc5204f7906c0c6064b66f2c63259e6decfd1684f650eee49fac30d296b20e5840c59005e3c9a8109a9e8d1d0e31c660d36b187b94d8a6d7cc467867d89b01300e70b065003f4719c04c4eb44324daf9d23f4b048c4e56a8e2aa5c8ad2b343f6b51d3fda23c0b3b291c352131966498f65fe484411570edb1a6501b3b3d141822b58bab6ead55fa35da1ea837c724e3666dc6198a9b380e8829d83c0cee504ab3f655220f6b54f995c8d10ceb367e257148788e72394f339510e0d8072a9132608a917c5ce5fbac55fc75b2c4de52a96daa062690127e27e227e02588dec2ed998d467a33810721c027a984dbb204ee5c4c9b60be2e7280b38dc269cac2be8d870de84702eb409676124719e85702eb209e79448e2fc09c2b9d8269c4591c4f918c2596c134ed6290e6c3867209c4b6cc25910499c9b10ce236cc2392992388f46384bb2d172cf97bfdd230ce02d156ef748743b3fca10c2a5f66c6215c5f9c8a3502ba8345bdee8b6de41d076e58959e847fa880be133c81b9765a3df1d1056342ecdd6b7a3de1df722c2b83cbb436ffbfa1706fb21b447da3baa19c54f8a5f85d0aec846fe39699feb871f89101e958d7975f0f58caccfab639bb29083f01d6dcf8e3693223990711b82b9d2269851ac5bde8e601e6313cc28ae75bb02c15c6513cc28ae75bb15c13cd62698515ceb763982b9da2698515cebb61bc15c6313cc280ef19e876096d904338a6bdd2e4330d7da04338abb7ddc8160aeb309661477fb7810c12cb77b4e7c14b79c1c88ba882bb2d13e2f6a8ef639db60c536e49debb3d13d3cb131b9970bf74b97f077d431ee451837d8340ac9ba0f32db28e4c308e7469b70164612e7f50867a54d38a74412e7df10cee36cc25914499c3f423837d9849375251b1bce150867954d380b2289f37484b3da269cac4d4b369ceb11cecd9c38f596a6937c6da2288f455621785bb2b19005e672cc16b035458dd360ac50957677f94a8514a83f53ef6d5a5117e9c95bc310e21a9b76a5619d80c086b31f6a9d1f6f134ed62e63369cd310ce5a9b70b2ce1d66c3b91ae1acb30927eb3216369ce7229cf5d9d8fc07e334cf923bc261542683a995f7ddbe2646b857c698e0ae43701b6caa874ee51c6367ab87fe1b95f35b6dc2c9fae54c369cf7219cdb6cc25918499c57229cdb6dc2392592383f443877d884b3289238bf87709e60134ed67d65d9702e46384fb40927eb46a86c38b7229c3b6dc2c93a19910de71a84f3244e9ca3857f670fe8772a7778c0d2166da7b79e889a2732c3f9ab564e6d60ade8efe5aae89f832afa277302ef25924fbe89cf59d94076e3f2dca1c8734fb10524a347b281ec8d409e6a0b48c6e9b36c204f43204fb30524e3a46e3690e311c8d36d01c9b86e830de48508e4199c20f37da57b03b9d6925ef23acb79a2dad1678b3c0353b354d6dfcb55d66f4365fd99d998689b6e0734e3d0325bf7736f04f32c9b6032ce5a6683d917c13cdb2698511c18698b609e63134cc66a3ddf46d208e62e9b603256a4d860764230cfb5092663f59e0d666704f33c9b6032d64cd960764130cfb70966143f0ed515c1bcc026988cbb30b0c1ec86605e68134cc65d18d8607647302fe284496fc13fd7f95d29dccf43953a024070f4b7e03f5278602fe6043b50825de83cb04ece06c50b0b9bed33266ccb0ddb20ac97d8b3b95f14f70c198c92fea5f6eefbc558deb3edfbf508f2d2cbec5e73ccd86a62cb04a623cfbd9c136f0f54686d958512ccb877bf6598a525b32773415c8b7c747736c6e971c94f1557ece53d9b4f0e4638afc8466e9a98e4d3c94fa3b88be27094dcafcc46994f8d36c597f951dc40681cf2d2abb251ddcfa4cc67ecaf67f3d14b11d8ab6d051bc50f435e80c05e632bd8287e72773a027badad60196ba76c602721b0d7d90a9671e4890dec0404768fad60a358c11a88c05e6f2b58c6de5536b06723b037d80a96710c800dec4e04f6465bc146b1e76a39027b93ad60197b5bd9c02e43606fce76ff80793e5fa9ecbb8286ee7a29ae9ab7263b980b6d2dea1fb8251b5b104e16cdb005219b679e843cf3567bba57a2b871eb4284f2369b363460dd4a8b6d0c75124ad8b7db849375ef27369c2b11ce3b6cc2c9ba33191bced311ce3b9b731e8abf5b3a8a9bb11f8f60de6513cc286ec6de2061b669e5133e3741f82c990c2121ae13defe6113c43c51216b8800629d73be5056d1ebc51a07c74ae75fb01858e5fc335d8fc94de2e688eda2465e0579e55276b5731734ab13f9b02cf56e7088b6ca2172653d6286c3bcde79a64454c8d07788a5c2dd1fadd8f9ada714354824b972f3e325ceb5060183e110c26647938da2565a1cbf7f5a6eacade4e47e43af56d59b7395aefabb7a0b540da6d2b1b94c6a52eb3cd35286e3666eb9b14ee84c8f1a2f904d9bba46ad8a1ddb75c850a1041a10a21e20f5b4823548cb9dbf2146e0b373ae76a05fb9f357890ca75a467b4c3eabad5c240995394f95c96369a32e79639cc76245522e34bd263436ba26a8b53ed5ea4c5f4f2d13e239b9b47b203263e6d45dd5641e9aca223751c1fbebe5dca80a2975414a4b53db477b7bc724b1923716e2625fb6ff5e887715edd24dfbc43a387f2d7362be5ced1155ec3c5c2e95aaa968215afd3f584666cbd55e0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/61c262090889c324f927f1bf91622a63.asset.meta b/Assets/SerializedUdonPrograms/61c262090889c324f927f1bf91622a63.asset.meta new file mode 100644 index 0000000..3fe9c83 --- /dev/null +++ b/Assets/SerializedUdonPrograms/61c262090889c324f927f1bf91622a63.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3913028c0d84d7343b35e96a71384030 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/62b9319b03042ce4184b13094e4832d2.asset b/Assets/SerializedUdonPrograms/62b9319b03042ce4184b13094e4832d2.asset index 9e1b8c5..46e6645 100644 --- a/Assets/SerializedUdonPrograms/62b9319b03042ce4184b13094e4832d2.asset +++ b/Assets/SerializedUdonPrograms/62b9319b03042ce4184b13094e4832d2.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c14c5dbc7e70e42470141ba82a206911a0845544a68d209200a08210921124820a159b137ec5d51b1f7de3b2af6debb6247fff6de7d776667ee9e9dcc73b9cdee73ccf2aa1fbd6cfbed33df79a6cfcec47b32e79fd86eceffa6b3296c38ebc1a6b12256ce163b7f0d777e1739ffba47eafc24b6d4f92d71fe5fe05cdb8d75aae149fecf2eb136ceffc7384795acca7972192b747e4bc5f57c56ecfc3dc679b6d839e267e73bff153b77c5ea3a0f4d63796c229bc05ac75ad520315d3c5429cfc578b8620d9cff0f63ab9cabc5c228fe929ee2526be77ff9ce954a716d9163b4ba6f269b2d82b5c8b956e83cb39495399af384628305554cfcc1dc9f6ef27737f9bbabf35f43f9771df97703f937bc9f9fe7a19b95e2deeee05ea5d9c3f92fcbf9ef3779dcd33d8eff258f7bb9c7b1969a4623a0d15bfef691bf39f2b7aff35f3d47ebed34ec4f75ad9f6b43d554799c2b7f07c8dffef259e79eca2a796ea0fc6d237f0725ef997aa63cb7bbfb1bdb57daf90e387658c65e95f7b590bf9d4198b791bf5dc0b9c152e75dc94c31dc43feee297ff7d2f8bc1790cf1019672aac2a8e1ab3f47ca791fc1d5ac3fda9341acbdf6101349ab8dceb744a716f7770af7acf7037fce23e9566783cee97bc47fc1d73f505f3f7b5f359f2fc07daf97ac8f9fac8f906def34e5ee35e9f096c99e97d26364b3eb3111c3b766675d03466cbfb3e0436433d75fd23edb9fde5f98f4198e073fb23cfcdd19eabaf3d3707796eaef65c03edb9b9dee7d479956f88637efd13378c753e91d747b8c759a3d3f0a554d746c9f7cc93eff9141cf3df0279fe3370cce3e37af9fe77a58eb42356a8e914a6d6e1f8511bf766defc77a4c6b648f39522a939da7daede6a96f4737ebd58deffb9574f9c877a9bbc7af5d7cafb551e7988bcef0b797eac6697bafe91763d07bc175e577170bc3cff2538e6bf4721ef1ba75dd7df371ec40dbc3ec17b5fec0479fd7fdaf15729e2a6a916e6f9f299afc1b1c3aec19b35b09b58033b753d2c764a0f63a7ae63ec2679efab153b15d6135932dfaeabf964a9d4f906dcabcef3df15ccebfb2b5c8d46aba54e96a65722efff161c43dd35daf535f2f72460a3627d72f29cb8aecef1df43a5ce77e098dbd5576ad4d3ec5aa8bd77a16697f287efc131cc6fd4fb7ed0de3703e7afb41379ec89cc93c736507137d91f4ba7c65b8d159b0ace4d97bfd3c039556e2d00e7a00fc87a5aaf05f2da1479ed0010070b34df3840f3d97dfcb1f78443952f301c8a2d0c872a47cb0ce15894221c8b4138cac0fdea1a0cc7bef2b7bea65fae85a3dc100e5527a9291caa5caf308463498a702c05e1a800f7ab6b301caa8c6fa0e9576ae1a80c100e55cfa8328463598a702c07e1a802f7ab6b301c63e47995177d0a8e9d34b815d3ee5bc93ce5af3886e950e96cd2749e44e27d959757b5eb076a3c0f94bf0769761ca4d971b0bcfea3d7fe6a65d4f7c00ef51cbcfe93167e95577d0a8e9df06d9daddd779866df61f2fa384d6793a6f31de257ab354efaf5c3354e87cbdf23343b8ed0381d897052d755d9fa3db0433d07af2b4e7a197834f39681476bfac7b064be6d7a5e5dff599e9f85dc77acf69e63b5f71ca78553d543791ba321b8879fdb9f25d2563365576debe673a5f6a99adf9c2a7f4f61de3af5296ed89acbfa6f7395be0ae4f5d3349dd36ad0599bc2c679cc5b379fc3bc69e474e6ad9f9c2e356519db42b5e754ddfc0cafaf293d711eea6df2ea6da3fa3d54fdf21ae6adef156a76a9eb1f69d773c07be1751507d7326ffdf25af97b1df2be71da75fd7daa7e59a05d2ff2de17bb9e79eb97ead84fddfc4ce6ad9b9fe9b26ba9fa873076c535b053d7c362a7f43076ea3ac66ebef7be5ab1537539e5cfaa0e06c2c340dd4ba52db69025d27ddf26f29caa979d95bc5ffccdafa9baced9d2a65fc0b11337ad54ff95c946593f4ad44b555a398779f3f173e4f572c3fb61fd46d54b978073aa5e7a2e38a7de735e32acbdaf96d716cb6be783779d0bee57d7607c2d95bff534fd0bb4705c906638543d088643d54bd71ac271618a705c04deb516dcafaec170a87a5a7d4dff622d1c17070887aa97ae3384e39214e1b814bc6b1db85f5d83e150f941034dff322d1c97050887aa975e6e08c71529c2712578d7e5e07e750d86a3aea67b15f396ef57c9ebaa7cbf9a79cb77fd79755dd5239679af335867561c5624c3d226557e934e3d40d9a3ea9937487b7e05c7ce3d6dc7a5d05275019597dfc8bce5f38d52e328d7e6b6f77bdf1dbb8979cbe795e03cd4dbe4d56b77b3bc5f9531b7336f9e7f20380f756f93f7fda61d2b965bc9f337cbf3bf8363fedeb5defb98ac9b3355f7ff43bb7e88f61efdbaaa73ff9982b15eee2adb7ef1dad65e950faa5eafe26675d2673adc2d7fd76adaca676fd1b46f91daaa3d77b8a67d44527ba72188b62a776fd5b46f95da1be47d476ada4725b53bfda56963f17eb4f7dd68fcff5543fcdfa1c5ff1daead1d3647fcabf4aac5953836b55356cb77dec93cf953c27fee62c97ce52e702fffbd9b79d3efddae6ea7f552234b7bc7bdcc9b87dfabe9dea75dbf4ffede036cb847fedeaf31bfdf7d77c7f5ee7bb753751715f70f6a717f0c380f6d7c9879d3bc3afe4afad6b95adc3fa0d9f180643044dea7da71795a3c7c54837d7afbef41ed39755de5b7abbdd715d3c4f30f69f1af9e1faf5dd7f577d3fc43e9ab7858cfbcf5eaf51a373d3cc769d7d5fb54fd4bc5c3239a2f3ca2f9caa3ccd3ae4fe81faf5d57fa2778ef8b6d609e7ab9ef34ba01b9aea7513d5c8f69e17a4c0bd7e3de7025383feed5ad16bf7781f875fcb4a3cadfb17c40d533c2c8438e92363cc1cc79c8932c997e9f04f7f2dfa798370f79cad5dd49696769ef7846e3f78ca6fbac76fd59f9fb34b0e169f9fb1cf3a6dde7dc77ef50d77def0eaaaf46a5d117349f3e069c8736beccbc79883a96794817355ea9f290e7353b9e77ede822f5981a2ba8290fd1edd3c7185ed09e53d7551ea28d4329a689e75fd4e25f3d3f5ebbaeebab3ce4094d5fc5c34bcc9b87bca471d3c3739c765dcf43543cbca2f9c22b9aafbccabc7988d23f5ebbaee7216a5ce835162c0f790db98ee5212a5caf6be17a5d0bd71bde702538bfe1d5ad16bf4f82f875fcb4b31a67cc441e22fb75636f32731ef2164ba6dfb7c0bdfcf76de6cd43de7675bbaa71a32ced1def6afcded574dfd3aecbf940b177800d6a6ed2fbcc9b76df77dfbdb3ecffdc791df3a6d18d9a4f1f03ce431b3f66de3c441dcb3ca46b27afcfc43ed0ecf8c0b5235bc5f11a2f4f340fd1ed53cfe568d73fd2aeab3ce408ef75c534f1fc875afcabe7c76bd7757d9587bca9e9ab78f88879f310755d71d3c3739c765dcf43543c7ca2f9c2279aaf7ccabc7988d23f5ebbaee7216a6cfb33162c0ff90cb98ee5212a5c9f6be152e32b2a5c9bbce14a70dee4d5ad16bf6f81f8e5ed3c35b72f481ea2f73d7cc1bc7d0f5fb8f7747d3285969c2390c84fbe64de3ce34b57834f55e376ef3ac0fbeed8ff98b7efe124701eea6dd2f4ae67def4f595e68f0782f350f76be64dffea389d3e772caf5561ff86559ff3a1defb2df3e4bfb16fc079fefb9dc6ed3b57a3979a1f9ba5e9fda0f9d90f9aee8fda75e90fb1ef59b57ec784e6cfda333f6b9a3f797d37e1375f2535633f79b9c77e91cffc0d8e9d70ed96edbd5f8d7da3f7cf00f6c3e74e66de745a4f0bd3af5a987ed5c2f4b5374c4a9f9d228f7fd3fc538ecf25f2b9dfbdbe10fb1d3cc77fffd0fcf70f373cddabbcf725fa67fe94f7ff038ef9ef5ff2fc079a7d7f6976feeb3d2fee6be87d4685418415e6a12a6c39e018fab9fefc4f019fff35e0f35f077cfe1b7fcf27def7670df7ff58c3fbbeade5f35f077cfed780cfff14f0f9efbdcfab349828e3141f59c6edba515e0f52c6a9bcf91f964c07f9f2dcbf52e75370eca4cdde5db4fbfe619e3c20f68fd79e38d3fc6c1a38cfefffdbbd5e8769ba7f6bfaffbae1ee9de7d549f0d174d4f36caa57a74e4cbb3e0584ddef5cf50a2fc7b8cc635539258e39b38daeed7d54ffa09ca7158f7bd9293d711eea6df2eaf599e4d561602e99d15ef5bebade3815c7ce7f39576bf7d5f3da1557e5868a53354f5ef9d812709effd6d1e254d99907ae8363116e7e7f5ce3a0f4d43cfb8de098dbbd4e8b07659f9a7fff895727a1db50b3bf1c3c07edd3ee17f6395a39aaceb7c4102e10ee844e4df193cac7e478791c7e6ba3de07bfed50752a391732de8479ea54f1c6e03cff55f9c44670ec68f47b51ea64697a5b334ffe248ea16e33ed7a33f9db1cd878803cd722794e5c57e7f8ef5652e73b70cced526d937a9a5ddb68efdd46b3ab25f3d461e2ea1ba685dafb7ed0de77b5a6a3f8672519a96b09bf6bcc3c7974dfbee0597e1f9cebead70fe49c25d60c689ceebe678c1ab796738612f34456266d6edb208d77a8b9496706b0536ac45b81386ee532e59f68897bba32af1fb792dcbe06c7fcfa5901ec50e5d4d9b5d050cf9e039e3d175c6ba8bdeb1cc33539f723d147e1372ed4dc8f8bdc67e6a836ad9c4b116fed32ab53071cf3eb606e4791aae7ca31c1f8b6c0be75886e5b4db7ad16576d9837df68e3c6ed800daede00d5cfdc41bbff33effd0365fec0e4dc983a2aff3231690bec87cf64a5782615db4be5ef650883f61a83f669b06d97642bfe86cc3a68cc3a4806bfb95a83148b0edafd9f79ef1fa4cacb4bd260d64eb3453d535b6632df8c7704e1ec28ed5a2fc321c3572d7d7794e1f9c5fbdceeaa3e24e7b3303837c664cb95487c6def8dafc4fb55bedc8979ca7b71bf3acf7fb7d3e2673b69dfb9eefb76577342ae728f17cb7938ec6a707f43f0773a6149877567a0dbd9b569f06eae0d8355bea2b3eeacb156cfa9711dc5fa9a1aecbb1661bda397b53886efdf8179f3f21de4fb6599b887cafbae4358ee00c2bc439ab6a6627983665f17e6ad537771eddb63ad767f57edfe8de0985fbf3e804d37b9612f53658a9c1fb36703f7fc9ebdb4b8bab18677297fd98979f38d9da4aefa16ed16244e77f6c66922bfdd8579db01bb306fbaca66de74b533380fedd9e8b5672f35c679ab66cf6d5ebbd81df2b9aed2be7ae098ffee2acfd707c7fcb9db59229f9ef3a6fb3b44f99d62d54d63d54ddaa6da427722fed90df8a77a46b56dd5f8f8dd69d821c7d8d9bdc8bdfc9c9a9ba2cad4fb91f8dbcd1b7f71d52faa7cbe3bf3fa7c77d7ee21729c9a3d207f1fd2f41fd4ded343bea70138e6d7f56fef7938d53719ebe5efc3c8bdfcdc23eef15cc56683fc7d54f3839e9a1ff494bfbd343f50e9e7b1e4bbe6aafcf27184616f8da15acf4095b9da3c3fdf69fe49664cf343e5bcb1612a5f5169fe09965e9aefc3bc7edcc7d51da6c2f71412de1c2dbcaaff284fd3dde4d51daecaeca735dd67bcfa893893eb1bd469088ef96f3f2dcefa3134cde4a9369b0a73ae16e65c695b91bcef59664ebbb949a68967949f3ec7bc795f7fe6cdfbfa336fde378079f33e3976131fa8854bad41912a5ccfb39af3821790781ca4c5e3202d1e77d7e2717737dc79aa0f43b5f75fd6f45fd2de23d7b548a4fdc10c4dfb796abc48ce7d60af22f7f273af316fda97f30aaaa5fd3d9837edcbf534e27b6abcd5fa1aa6b4afe622a8fcf44d84e95e1a53b55687ca0bd49c92dae605ef30635e305296ff23f5f21fcc4330eaaab555545fd110e62d778748fd0552ff38edb9aeda739bb4e7d6fbb447adcfd101dca798cb77c6876af13694e1beff9ee623ef233e324cf39161f277b8f6aee1297ce403c427f2349f50bea0d2d9088ddd0897dd681597322ed8479afe87da7b46326f3a1bc9d074365aad85f331ab399da939052a1e3e45c2394a0ba7fa9e5b85578db5d7d6f73f73df9b58b727d5bd9f6bf7aa77aa716c533855bfe36869e7efe0d8898f316f7aef4bdc3f86257d558dabffa9dd2bc7dde36325a346e098ffee9dd4107fabf736f4dab0f7e5dabb27c8f77d098ef9ef3879fe1d70cc9f97eb31edade2c4c4508efdc7276a1a13a586f4a1bd55ffc52419a6c6e058e9f0f34de4fd9b347dccc657b5fbd3cd27e45ca399aacdadda802a8d8f67de343e1edc07d23893edcf84df9afadfbe718f67ad96c76a1e824a23a97c33db0de7585927e7c116e7557d428d959b7c54f6353335fe20c70eeb344de3bd3f8367307d153793b5b899ecda3c4e7dbfa0e613a4135e95067e65a9f3fe541a322d26d61933adc725afc5a730ef58d514d7f6f12aedfca169c9feb8783ef3a64d399e1887eb06fc09cef1df69cc9be7aab145439e3b5ed59bd4f8e13fc8bdfc9c9c6f90d20753f08ac598b19e3041a6ff09a9d2bfaa0b4c07e1967dc4f17d34b6fbb8ba13eb7aef4bdc3f23a9115363967f7aef89a9f2623f8dbf9cbb1297ebabd5d90a1c0336099bbef6da34e94cedbe59d5c3139376c7676bef9e2d7ff74f3e23fee6bf6a7da9cf81ae3acf7fd537bd1bc131b4477ff75ceddd73e56f01787781f62eb5f6d4b7e098ff1602de4c9e2b023a85e01cff2d66de31b362696b99f63ee50b59c970a86b89768d5a874cf6d74dcc06cff2fb7604fc653f6a226f964c1379f34c701fc89b6359ae76b99ab7a4c6f452b47f62f599a75c88a9f493226dc5e4b1cadf638d58daf95d4c96777ada9b2cd7ff9abc3e85864a376abd9c4fc131ff9dcfbcedd7f9aef61459ff9fb2c6ab93d003e38735a6c303347f5463afa5cc9b0e4bbd1c13b6fda2d9a6be6754df6f83b1e758634d43adafb3111c738d4d6ef8f25723e12babae195fc4d20f73b9166635aebf580bf322701edabbc96b6fbe2a6b528539557a50f31aea8163537a68cabce941cda74d951eb666def4a0cae754e9a139f3a687162cfdf4a0d6ba94fd0bf125cc5bbf5ee2329bd6c67b5f4c8ee5c6976a7123bf818f5726f9c5d5f7e4abbcefa8b3b5f68e8391772cd3de21bf578e83ef94c5dffcb78a25f37f87c934355f2b0f5c5771dd129ce3bf72bd9e447d61857cd6540750fd316d809f28866a1d9f4fc131ff55eb057d068e9d704fcf76b5a7af61e6f01fa8855fcef38d1f04c22fd7fc891facbdfbe01adeadfa74947fa97162ddefda21e7e598aa580fd209c3be6548180ed1c27008789fc62f26c783e3876acf1c0a6c6908fee6d7566be1966921aed61efa0c1c3be1de67ad6bef3e5f693a8703ff51f6f1f3dada41e23e751ebca74e73ef7b66cc45781ca985ed48f97b14885339b6173f5a7bf7d1489ca877a87cf718ed1dc780386b08fee6d78ed3f8c9bea4b85a4be83370ccc325d7c1dd77374de77884df095a188e07e7c17b12fce47b12fea4744ed4744e04ef577e08ee675d357b543eb006705e03ee853eb3d11b9733d769b6c8e7e22749dbb3c031e6938ece7e6d5c76fb8d96e7e57ceec4b8bfaeafaeabb58adb69d74fd1de7f8a16779f320fd3fde4f8f77eb2cd133f557bbfae7faaf6fef6da75b50ed3f7e018f329ce51867fe64a8dbfaaabaa3428c7df626dc079fe2bd74e52f974357bd4da4a3f21fa6b803ef76155174cd5c6edecda3e4bf527aa38d2d6798aabb95a9da48db27c8db575df75808cf36afd1f724da3449de24c709faa53f0325e8d85e499df93b2ac97f11a6bef6af5571a67cb77827959e26f1e5ed5f7d8129c87f981bc8f37c93ce94bcdcf72de335b8d879469d7d4dffcf71c104e75cc9f31f51bcb7967b3d5f7b81d98a71f39d651dea7f7239fab3196f11e3f4f7bb79ae3a5f723731b541f8beae3536b00fd0e8e1ddbf67fd17b5f4cce1f89af65de3c59f5d35dc8bc7559b9368f9a6716576b08fd028ef97b8a5cbbf6bf1f79df45dafb2e92bf176bef53e37b3929dea7c2d79079c23a47ce3d8da97a3256bf05fc629db438eb8cc4d93a2dced6c9df4bb438bb0489b39ad2b5f2958b93e1f2ddff753bd04aa5a1ee5773891e0df0cec78096aacfaa3c458df9d6729e680cb67dd2b54b3ddb05d8b313b8d6d0fbae5897ead7623b338fcffbb65ffa506c975ad8af9ecd06f67405d774fbb3ab5f8ba9792ab5b55fceb98a81b9287efd2226e76ec4541f7c8ab98de29e86dafd2aff566b696d04c74e5a9fa7d641567353eaa6b0a9ad573bf14c562dc326e76ec4d4d85baab0f5026153f7abb05da685ed32376c85aa3c51f3515285ad9d573bf14c6dc326e74fc454da4d15b61c10367d7ec7e55ad82e77c356a4be1d55df1cf6a9c1c7da7bf5636adec8f7299e49e5dbaa3c53765ea1d979856b67715f37ccc553b5e7ba6acf6dd29e53753cd55e80ebe399ecea247f55dbfc4aa9fb2b38e6ba1ba43d7f799f8bab35d83e07c7307c4aef17afde7cb56ef8853eed94f7c7af967ed6121c2b1d7ebe550aad54fe97cb8cfda2f365f8e7bf896bc4e41c9a981ccf8dc9393ff16b98b73fe51aa961e84f890df43e9b28479c7b0a54fd42ce8949ab5f4b8e95a97c3daed6ecfc0c1cf3fb0627df53b2210ddd3dcc9c4ae4f826efca4539c9392cb1bdc0bbb92dd7699cae4bc16988f6ec0d80d35c708edf23e775c6e53aa17564bf4a6ca8572351e6710d3577b0b31bae051be53dc398b7fdd21d6837047f3bcf94aaf24f6fe3c8b97689badc8de03ed86faae671a4eaf3ccf3e10b23cd7156bace3d5f7a3bae11537b04c870c74648db6fd2e2eca6147136c6fb6ce2fb13de0693fdefb1bd7d8447ed73310e7f6722bf546bf6a9b9352a7fba0dc4db6dda336a2dbe8de0d8e1b5b019d004cfc5d51a733f6b7a39da75d9de3ee05caf6d75d4784127f9bb4ab3e357cd8e19aecec253bdcfc5d53a7f9f836343b8127d4c4aef6eef7d420fb6a9d361a6d603dc088e1ded32d5ffaa3353ebfc7d038ef9af5c1bad4e1be60ddb6ddaf5b62c2dd60b557a4e630e405cadc1f73b3876c2b0a8aff7bec4fd602dbd1ae7d6c839cf8976a85c8f2f7e2f607a2f786f43f037ff056b078abfb95d2f2276dd9fbc3736de6c574ccdc57950b34bce8d8e3f00def700782f2c43a41d8b55ddfe0a96cc5f5295e96a1e875a27ef1d70ccf506b871b778ae3cbf5edad8181c2b1d7e5eadcfd63dcdf7a7e30b0f6bbef0b06b5b794bef7d31b96f4cfc118da35c634fccd14d65cb1569de972a3f94739a626a7f13d98e8a3fcabc79b4ea5b30e5972acfd900ec50fde88f6b2c1e972c7ef3be2f914fa8fb378163fefb58525bfced6854dcee7d57e29d709eb80acf93c973358e993eadc5875cb72bfe14f3f6fb3c09ce2bbb603e26ed5cd2467b8f9a1ff18cf61e395f3cfe2c08ebb35a3836c877a83511a680f3fc3ed3fca1543e2b7d28fe1c60a6be0593ebe125be81917d0cf117bce7e3cf83f3fc57ae3f97282b5e74392cadebd5177a2a4ea632cf786fa28e04ed9275a2f84b9a5daaaef6b266d74be03cff7d45b3eb1569d71aaf3e837d20063be2727dc2a5eba5ed6a6e54aa394daa4ff155cd76d9cf137f4db3fd55709effbeaed9feba6b43e50cafbed0534ca76bd77cf6efc5d45e41b28d129773c5ebb4d38ed5b7a0ca36b536d8a7e0d8b1b56a80a607e74ccb67d57a5bb11952e30fedfa2140c374ddcfdabc9e6b5931912e47b36256c02a584fb1f002afa1a4bb5dab7ab2e68d5a45fe2356fbe0ce265e5be564a2158e8061b7d469622fd62aa796d2c7b85b6a5b312f47bd7db8f87f817347a910ed50a7da2beea9f60a6e5c99f36f31d8eab5d2393f4aec14cb377b2d75aef460e39c5ffed45cd69bcd74fef5aa4c775e5bc6963947539dff5708bdb98ed9d5efac29487c5b58fd99298ea6bb6bed22e78c025ae11c97090bf3c5ff970b4b8b85f5639c7355620fddc5ac840d737e578ab7550ffb52e76fd33ba74a64661bcd9bd762e7dd2d725534e539a1e1d6f7143ef95f8c6c8e18e1e8ebf1f4c1ffa9db53944e27548b89ff18ba990cef9c1d23357a0b6431cfb93eaca7e8bf9d528da0ff30560fa1d9bf5ddeb9ac6fcab098c9f0e86e2f42908ce19d724ffef0c8b71e9b91e50d5a0eeb29ba5d3ad410b45460b95eb6989de327085959757b714375fc31137ed105949f41fcee7da5e23eff11504f147ede0810d3fca63a7fac74fe2b736e9ee4fcbfc079bc4ce673d562a61797a92fe0562f3a6b3210c31b37e11535b9a99bc5bbb18dd253036e90084512704f51df6a93c20db177898a521d595b5209a573fe9b638e3d75fd2f6f8eefdb7ff75e032fc932c74f23113fb5792b1643754c31d428d309a0e61c3f55fc344e842b193ffc1f33c326888fd7640346b0ae8960e3cde3e3dcf6daf9389f26dc5d6368e6b7554a1f4c65014630cb4450f4274dcb20c1898e8507c87a62ed186e9d36c3668261db6aa14bc7068c623d03c55e4d648bae9a590d35b3b84588707d4cb84540e10698f03601851b9a1caa69a69324bf562e540a9c7bfdbb13efe5eca6676b667f6a85a4c99a4dc0bca991296e38c26d8d56e991d30a8f9cc69872eba0ca4d30e53641959b9a1c4af45e66be965ebb3292e735add32e23dbb154956cbf25e456267ae2bb8b59a4f4aa771ea9bf8639cf2e70382c173d02cb9ce74d9d4da989b64f3bb7ef20687662a62e307f166184b736793ec7de118b76ddf9dbe1cedfcc24cedfb85d3ad974075cb83926bc7d40e1165846d0296846b00da6dcd9a01cf3a3dc1253de21a8cdad30e51d832a6f8b297709aadc1a738d9d02ba461b4c78e780c26d4d995cb3cc6572f92c8f8d75ae1538f7178bee367e7e9ac89c5555d23de7bd337526b74bda995c76b54caeb61661995c3b53d471c25dd389ba6c3ceada9ba24e644e996c7fc03e96dab53f764d3bb2ba3173fb231d1bb0e8e9806506bb05cd0c3a9ae247e4f199af7df566b9b588193ef8b98d86e0df7fcd71d383a5aa7b61efc762653b53ac70763d0d2619a2a5071e2ddb63d2bd024b7732c5b8287b33d92b35cc39e27fd72e35f64e842149a117ef6fe6b39879d357743e231d7d39ccdc49559349981b74c61267dfa0897307cc0bfa05f6821d4dd2bc56cbe709ebb5da7f9d7ffcd46abb6044fa1b88f8aac9ed8411191098c8ce98f4c0c0d2bb60d283024b6763a8770fea7c5d310f196cf01066323b8587ec8a89ef118278379338ef74d93371730dbedd0417df0db37c2f83e5757d5ade1d8bcd2141134e0f8cc9500393d526b35330e989890f33889fea53bc17263edc20becea7786f83784fd15c3c9c65b6fbc43c5f67941332fe36d879adde5b2e2659708bd4848d29ceef7c61053fcfada8799e4fea82368f552f687b8a46ef0896feac23fa50706b1a8916a4b9cce75f08645b6633569fe86372783e50c03f55a83618cddb5273640596bf7fb1b834c979038f4d7ebed4f9ad9626eae3692207cbe1461b72b898cf1caeaf29c189be8ec59b35c18d70febf4c54f9f8dfcb65f44e15ef4e8ecd07494afc23918e86924d946e46a7dd5b386d9f349c360ceb3177ec87e5bf630df96f9798bffc3717131f67101fed53bc3f9690f8370335766aa448210330e109a614da4a945549d09d4494940ac72e106d8b039d5f3581ce8f1d03317a130df4ca7cd21b6412e7bd7993d2a197a2376f7793302f73271b0a9b5e9c1eef8a888b24912f9204afcc4c930c5709e72f114c792661cab7b9f363f7abe439def92d725ec9b396acac6ae11989876730169ea95878a6254b2b1fefd9037bcf74ec3dfbd4ea3d7b62de3dc3e4dddcdde624ca99e16c8160bed0971fef652a1444377566678ab95965194b3dedd09cbdf37531b7af96bdaf1b62cedaf763d864b0d4366099f4102c279869c809f2e2fe7282a12671de2ae1bdef81da98c330e5d94195876340f63701a9e30f489e497c2b911082b75e476096cf3558be5b963fcb476296178460f9285332168342a5a4c93855d6eeadaefb2d08522779beec6b7a63028522b9776778b115dc562c6b188d65e74526f37de4da634cc2bc39529c8e70375c786f2c05cc37a48066f5fca580b126717e7f09ab5e8af614238fb59b4bc6570aa85797b9fff470fea95fbd144e31cf6a1c96524b0d2935ee33a58ec7c40f3088d7f1293e017338be3c6bb5fa030fa7a9ced6891dc47ab1439c5f77d8acd8f157fe77b9f37feefa2572b235cf263a89691d55acbbf33bdff9ff523125abc4b9d6c9f94f3587b8626fa1385f64248bc4735cdb4d58fc7a1fe7fa20e737c7f9edec2b354cc4fcaacce057bdb84b2d0ae6209330cc8b4d98e78682b9f6303bb1154e8a7073f74e6236ce62e74d6552977fb352241a41c5b279d4c939c3754b841595cebffea263b2890ecf43ca0d7948cbc6fef29029a6824e0ca16772d074a873d752f1e181ffda6a45da45d712661e324dfd76ac30ca37450b27b7349d3263091e25534d5122261f64b209a1373afd454a65da9152c5cccd879ade8f45cb34133d31e9607206e9a5f3cd9799dcb2b4c92d17e45a550b55cacfa2106ad30dd47a716a7c5de9869a3985a6527439eed0fb6019d84a4306f6aecf0c6c0666f92a83e5f57d5abe2f66f98106cb2f6fe2cff2fdb052ef2053a9c74ca6a728356662a61f6c30bdaca93fd36761e28718c49f6ce64f7cb6499cd7e8f8b7e6411b76fb63e28785203e07135f1d82f85c93386f921e6eca3174e1425cb800f3c323d2114ee182f3302f39d2e025d737f7e7258526717eff510ca9a41ecd0255528b304cc798922b6f39f8ada4f2c2c8c6f6403186fa580cf571c150cfc7501f6f423d2f34d4d16913949808f1a475822169ad6fe92f692dc0b2b11343c8c64a31f13521881f80e5912705cc2317621e7972c03cb20cc3718a0187dfc96b8b302f39d59401b7f2e7258b4de2dc98d3d24192a2fd538e099f1e50b802637d4608aeb7c424ceeba167a663758a3ae8522c12cf324462d5b6fe22b112133fdb203eb8b53ff12a4cfc1c8378dd36fec49761e2e71ac45ff429be1cf394f342f0941598f8f92188afc4c42f08417c95499cf74cac4dc7c7ab70e1034dc23cd7e44b09572bf0f96408bf057e952cbc4b6a51abf257341f8485e5225358f8854e9eb7fa79d7c1d8bb2e36bd8b0fb0cf71feede5fc57586d90865fe12b592d1564fd58710866c53a93152d80158b64e5a740b0afbd058762165c62b2a011b0600edb47784695cf72fb302cfbb9d494b7b5f797fdacc612f1652124e2c331cb2f37583ed7a7e54760965f1182e54762965f69b0fc7e9f961f85597e5508961f8df9e7d526ffe4337967cabc6cb69337cc94f9d020d9e870cfcd10bfddd99eceff47803cab500895397f1531de3b5ee5d4e779feb2527462168bb3453ef3b46330fbaf31d9cf6745252d52dfeb754a8469900ccf6cc3c08c9b67eb0da845e28e4a39a3c46d8ab9e1ab646e87ec2af1a49f301d6b0a1377906b1317b456ad58fbbc3e73ffe9e1fee3af617b1ce664d71b9c2ccba7931d8f89df6010afe753fc04cc036e34794097b43cd86d3af7747efbca73ae371fc4fac97b739d5f3f717a2216a73761717a73e0385d83bdf316ec9db7067ee7495854df16426675b2499cd7f2f8fabf416a79a760a4eec0488915c4b320297f9c4ec538dd1502a7d34ce27c56e9dde9704a31abf47493302fe7ee61d5cbb901b9fecab93330f17b0de2b37c8a9f6912e793e0f812ea8126c19d8529df1f54f96c4cf981a0cae760ca0f06553e17537e28a8f279987bac37b8c7a6fefedce37c83784ff1d9361f0bdbbc8b1fd46ee183874d49dd385acb1799cf165bdd05b1061bbfbd008bb6470dd1366980bf685b8be5a21b42c8452fc4c41f0b41fc220ccbe3062c1d7c62b9d824ce5bb77c3dfc609fc2aec3ec7ed26077954fbb2f3189f354f894c99975e14770e14b31ab9f36587dfd407f565f86893f63105fe953fc722c3f7d36687e7a05a6fc5c50e52b3120cf1b8064efee0fc85598f80b06f1ab7d8a5f8d31793128936b30e597822a5f8b0179d900e4ccc1fe805c8789bf6210ffc9a7f8f51893578332b9c1a4ccb36ebe8942d0acfb46ccecd7839a7d934999d37ec340fbbb3dfcd1be1933fbcda066df8299fd96c1ec057bfa33fb564cfc6d83f86f3ec56fc3c4df31884fddcb9ff8ed26715e0af3ddc98295c27760d2ef19a463bea4efc490bc6fca4e7c22b90b13ffc020feae4ff1bb31281b03f3be07b3fb4383dd0d86f8b3fb5eccee8f0c761b86d953d87d9f499a0fb67c9cb8a07dcdf809abcdd78cf7637c3e35f0c9f6c9e7014cfc3383f8069fe20f9ac4790f18dffeae5aef215fc1897f0ec47b903b89f1a995ac4a8ee115882f32d5489f9fbec187b0006e3204f0389f015c8f897f6110ffcea7f8c318bd2f4df4b84febcbf8774a8cf7f1c633d7f0d757fe0816bcff1982c73fb2f413bc47b194f955e01c650366f7d706bb67f9b4fb31ccee6f02dbfd3866f7b706bbcb7cdafd84499c5751f87ed981aa284f62667f6f30fb139f663f8589ff608acb61fec49fc6c47f3488dfee53fc194cfc278378b3e1fec49fc5c47f36884ff229fe1c26fe8b417c934ff1e731f15f0de22df3fc89bf8089ff6610efe253fc454cfc7783f87a9fe22f99c479deccb75eab96dbf30f6792656585e894548b4357062e335fc602faa721a047f90ce82b98f85f06f1af7c8abf8a51fcdb4491375aab9799eed45c5e5efa61f61a16ac7f0cc1facb67b05ec7c4ff3588cf18e14ffc0d9338afc78a1d024df5d858ac36f5d837b140c46386ae3c9f8178cb24ce4bb73ab180a5dbdb2665ee397563c1bb3bdec1986419987ce793c9bb98783d8378b351fec4dfc3c4eb1bc43bf9147f1f136f60103fd8a7f80798784383f81a9fe21b31f14606f1ecd1fec43fc472b7c631645db56419014b04776ea4ff72e1232c704d0c81fbca27b98f31f1a606f1a93ec97d82e5715b6179dcd6b5cae33ec502d1cc10882a9f81f80c136f6ec2ef53fc734cbc8541bccd187fe29b30f16d0ce2837d8a7f81a58a96a654d14aa48a02f0f94f586b997d89d9d10ab3a344d432e6b07cc63f15aa1083cb558e6513d90ae66e3f5a293e2faaf065c7ff303bb635d9c187a6d5acd8f4ede14f2cf55d47fa0a7383d606376832d69f1b7c8d89b731882ff029fe0d26ded65477f129fe2d9639b5c332a7f6b5ca9cbec302d1c110888d3e03f13de6751d4d5ec7d7cec993f5eca520e5b93d7fe5897a389fe4512a4ab0a2c42774fc3c4fbfe562a5d079ac4c966fee94113ffef803067e3b0cfcf6b502ffa3e13d3dc5dafbfc0b88cdb7646872cdd5f9a26ee0ea4d10e97a8548fd0b3d8b71f239fa6e1e117429d14eb1ea4b898a6fdd3944e3449ace313e91664fc6366ba8b089383f61debf83c9fbf9d445bedeee1271c8e9247358ce8bafbfebc78f7fc612f68e86843d649cbf84fd0b9648ba608964a75a25925f4def117befc482cdabfc0d13de25a0f0ef18f66c03f6bf7c62ff0313ef6a105f3bde9ff89f98bbee6a72573e25779ce3fe054e925053f12baa759bb85f3a17d4aa61f117664f37933d3c60fafb27b002dfd9ffdf18e2dd0c889ff489f81f2c48dd4d416a6f405c2cf27dbe745e2adc7e02fc2f16e01ea60684cf00277b8bb464d63360328b9984b9d5bd4c2d9309feac8e9bc439c2de58935a5592f58ec3e1a2f3d5efa77c75b0f7f731bd9ff724e99575dc8eda55d2eb6216e5982c6a68488b95bede9785456f5f5317d8247fd15b0f13ef67106f39d99f787d4c3cd720dec5a778034cbcbf417cb44ff18698f80083f80c9fe28d4ce2bcc23010ab300caa5585a1b1e93dbc6376f7103a669b6084061b089de99350534c7c0f83385f18ce8ff85698f89e26aff429be3526be9741bcaf4ff16698f8109357fa146f8e890f35750ff8146f81b9fc30cce587d7cae5b7c102916708c4b3d3fc05a22596f18fc08a225563c99375117ebcc2d3d75c98288cf6a845b5b01566d14893450d0c45919fb76d8bbd6d94e96d7c6c29d97ed30b613fef6d8dbd77b4e9bd3cb6937c55b5d75f91db067be318ac889f1a683cb92de6b67b9bfafd66f973db7698f858534139db9f787b4c7c9c41fc5c9f9677c0c4c79bb2249f9677c4c42718c437f814df0e73a08926076a0c12a6dbc551c5dc55b1fc38d1f6588026190254778ebf0075c2c4271bc43bf814ef8c894f31751efb14df0113cf37881f35d79ff88e26719ef34d8d051c55ef82294f0baabc13a63c3da8f2ce18ea7d0ca8f30afca1de05337b4650b3b331e57d832a77c594f70baabc2b867aa629b1cff387ba1bd670981542c361379338ffcc6e763add20293eb3eb8e59bd7f0856f7c078cf31f03ece27ef9e1892b90191f4c290148480a43786649e014951a13f247db002b4301d24a9b6bec390148580a42f86a4d834ce50e40f493f2c33991f3433c9c5cc2e31987dfd7c7f66f7c7c417986a0e25fec407606e526aaa67f1152ff9f06095b1c3b8180c9716d5aa1a3f100bea01a6e8f719d44158137a21d6842eab55137a772c108b0c81b8da672006633ebc38a80fef81995d6e30fb559f66ef898957982a360bfc89ef85f9f012930fb7043ecc279b2c63f39d7fdd21fe4562afa0e25af9ee102c884b4d6d2d9f411c8a89579a32189fe2c330f12a539f8f4ff1e198f83283f8b8527fe27958925e8e25e915b54ad223b054b73268aa1b89e15965aa16f9c4330a133fd020fe9b4ff1d158aa3ba8a65457c0f81299e5e2af22b69c15c8ed806b93eac660413cd854381ee02f887b63ee7508e65e87d6cabdc6628138cc1088329f811887c5d36a3c9e92b9a21a2a86937b6bd305391eb3e27093153c3873c4c49985cee1703131c69d8254e6ebad13b0b71e617a6b2b0697ef34bfbd76239e13313b8e34d9c12bd3ee0644c5a2172b48d7ef24ccb58e32b8d6da727fae35190bd6d1a660f1f698eacfe745ef2a99ecf951a1ecdf2f134bd7bbf3f07841bcb25699c2142cd0c718023d7889bf40e71bc47b6eef1cc696b2cd39d5ce34d93139cd788ab8ca77410c3eb5eed818ffe8c54bb167274e2097d53c792e4c3bb71743325c8dbbcb54c999ffb3bde813f64ef084d7bb89e1159e9e46ca7d18f24599c473b91251889b27091e17e393af321d4e6c52e054ccd18f3738fa773e1d7d1a267e82417cfd527fe2d331f1130de2332afd89ef83e54b6bb0228f27af5291e3943b6e32c3c9a70655cb76f93aa27e72a11998152799ace08e1c24a3df17aba29e1cb48aba1fd6e1734a081d3e3331f15343109f8531392d2893d9a642a033cf0217921602e96f8dabb65c0d6f2bdfd34d1d87c64cf20c9149f6647eb6f2ad8dbd58b6b8bf29def9ccba33d3e9fb4cb1ebee1c4cf8ac80c27331e1b3030a176049e09ca049601ea67c6e50e5424cf9bca0ca4598f2f941958bb17cec8210f2b1f998d96b839a5d6252e6f9d885e9f81d4fe788f00293302fb22f4a4738c5cacba518e88b43007d0086635d401c0bb1f47d49c0f45d8671be3420e74518e7cb42e0bc18c37179401ce598f01501852b30ce5706e4bc04e37c55089c976238ae0e88a31213be26a07015c6f9da809c97619caf0b81f3720cc7f50171acc072fe1b82e6fc2b311e3786c06315c6e3a6803c0ec4846f0e287c1086e39610701c8c89df1a82f8212671de50bc2d1d24a9f63ec27ceff6a0be7718c6e38e1078acc65ce4ce802e7238267c5740e123301c778780e3484cfc9e10c48fc27cefde80be773466f57d21587d0c267e7f08e2c762e20f84207e1c26fe6008e2c79bfa3476700e6307b0cdd1a761da892fdc1e8d87d2f1d27c9cd80998fbaf0fe8fe2762f1fc7008f1bcc624ce67f63c928ed529f6b23dc9e4403b72079abf591c88ce711e4dbb2b6c83e80adb95e15d6141acc43ac04e3645318f89c7d289e20d783bf614ac4ef078d03ac1a998f21341954fc3949f0caa7c3aa6fc5450e533b00ce0e91032803331b39f096af65998d9cf8660f6d998d9cf0535fb1cacdbe7f980dd3ee762add91702b666cfc340bf1802e8f3311c2f05c4710156837e39600d7a2dc6f995809c2fc438bf1a02e78b301caf05c4713126fc7a40e17518e7370272be04e3fc66089c2fc570bc1510c76598f0db01852fc738bf1390f31518e77743e07c2586e3bd8038aec2ac7e3f04abafc6c43f0841fc1aac85b031600be15a93306fac7d18b04d731d66f147012dbe1e13fe38a0f00d58bde093a0f5821b31e54f832adf8439dd672138ddcd98d99f0735fb164c795350e55b31e52f822adf86f9dd9701fdee764cf87f0185efc0587c1594c59d98db7d1d82dbdd85897f1382f8dd18936f8332b9c7a4cc5795fa2e9d684cb1aad4bd5835fafb80d5e8fbb00e9c1f0276e0dc8f41fe3128e40730e59f822a3f88a5c29f03a6c2873077fe2504775e8f15dfbf062cbe1fc670fc1610c72358e5eef78095bb47318bff0868f1064cf8cf80c28f6128fe0a88e271cce2bf035afc04e6cbff84e0cb4f62e2ff8620fe149671b078c08ce3692cdf8fc583e5fbcf60f97e3c1de114f9feb358be5f271de114f9fe7318e4ba41213f8f296705557e014b2bf5d2819122adbc88b973fd7870777e09cbf71ba463758a7cff650c47c380385ec132bb46e908a7c8ec5ec52c6e1cd0e2d730e12601855fc750340d88e20dcce2ad025afc26e6cb5b87e0cb6f61e2cd42107f1bcb389a07cd38dec1f2fd1601f3fd77b17c7f9b80f9fe7b58bedf3260beff3e06b95550c81f60cadb0655de88a595d601d3ca87983bb709c19d3fc2f2fdb601f3fd8f311ced02e2f804cbecda07ccec3ec52cee10d0e2cf30e18e01853fc7506c1710c526cce2ed035afc0596fc3a054d7e5f62ca9d832aff0f4b7f3b8490febec248ef1890f4d798709780c2df6038760a01c7b798f8ce21887f87b9c82e415de47bace8ce0e5874ff8015dd5d0316dd3f6245f7ae018bee9f30bfeb16d0ef7ec632bbdd026676bf606ed13da85bfc8a99dc23a0c9bf61c9a46708c9e4774cbc5708e27f60b07b0785fd2766769f10ccfecb24cec7bd73d289c914e3de7f9b84b9217dd3115e820bff83e1e817028e7fb158cc0d1a8bbcf7cc6876ff10cc8e99c4b9d903829a1dc7cc1e1882d9754ce2fcfe41017da42ec663f7a03cb2301e8343e0510f13df2304f1fa18933d8332698099bd57086637c4c4878420de08131f1a8278634c7c5808e24d30f1e1218837c55c252fa8ab6c85298f08aabcb5499957284706ac50363309f30ae5a88015cae626613e657c743ac229a68cb7c084c70414dec624ccab7d7b07acf6b53409f32af3d88075eb5698bf8d0bea6fdb6209707c0809b035263e2104f1361893894199b4c5cc9e1482d9ed30f1c92188b7c7c4a78420de01039e1f1478474c796a50e5ed30e5694195b7c7504f0f0175274c7c9f10c43b634c660465b203a6bc6f50e51d3120fb8500a40b66f6cca066ef8429cf0aaabc33066476084076c1c4f70f413c1b139f138278574c7c6e08e2bb9ac45b38870571be5dbc2e5e4dba072edd0d739479411d65378c48610844ba6366170535bb0756952a0e5895ea89f1981f028f5e98879404f690de98dd0b42b0bb0f168fa541e3310733fb8010ccee8b892f0c41bc1f16976581e33217c3bd2828eefe1891c521101980899787203e10c35d1118f720ccee2521d8bd3b16974b83c6e5602c0bac0c9805ee81f1a80a81c79e583c2e0b1c8f7b61762f0fc1ee21583cae081a8f4331222b031319861159150291e198dd0706b63b0fb3fba010ec1e81c5e4c14163722496220f09982247613c0e0d81c7688cc76141798c3129f361f5d5e9f04831acbe3766f2e1414d1e6b52e65bdc1f918ec955b8f038cce423839a3c1e738ea342708e0926f11d9cc3a3d3e191627ed9448cc73141794c3228f7ece21cc6e6b24caca39fcff2d858e75a8158a5bd873caf96e0e67a43c51b92abb37b9fa8618d7c13f79846c75d513ece5788e922ee0cc7326c5598c9585c1e1f342ea760ca270455cec712fa890113fa54ac105813b0109886099f1450783a96819c1c4206b20f1683a7048dc11958e9726ac0d2655f8cc76921f0d80ff3bbd303fadd4cccea3342b07a16267e6608e2b33124670544b2bf49980f969e9d8e708ac1d23998539f13d4a9e7622cce0dc8a20063715e4016f3b064787ec064586812e6e3bb17a4239c627cb708135e1b50b818738b0b83bac57c4cf9a2a0ca2598f2c5419517608eb12ea063946299d125216446076009f0d28009702106fab2a0a0cb30d0970704bd08037d4508a01763e25786205e8ec5e2550163b102b3faea10ac5e82b9c835415d6429c6e3da803c2a4dc27cbeec75e90867e3c25518e8eb4300bd0cc37143401ccb311c3706c4b102abfcdf14b0f2bf12f3b99b83fadc2a4cf996a0ca0762d1776bc0e83b088bbedb0246dfc1188bdb83b2380463714740168762c27706143e0c6371575016ab31e5bb832a1f8ee546f784901b1d8189df1b82f8915834de17301a8fc2d2cafd01d3cad1188e0742c0710c86e3c180388ec57cefa1a0be771ca6bc3ea8f2f118e98743207d0226fe4808e22762e28f8620be0613df1082f8492671be83ed63e938e023b8f0c998f0e301854fc1849f08287c2a26fc6440e1d3b0cad253012b4ba763c24f07143e0373b9674270b93331f16743103f0bcb9d9e0b9a3b9d8d99fd7c08669f6312e783d72fc4830e5e9f8bd9fd6208769f87d9fd5260bbcfc762f2e5a0317901a6fc4a50e5b55871fe6ac0e2fc422c125f0b21122fc2ac7e3da0d5176356bf1182d5eb30f1374310bf04f3ebb702fbf5a598f7bd1dd4fb2ec394df09aa7c39a6fc6e50e52b30e5f7822a5f8929bf1f54f92accf33e08c1f3ae3688f7dcc9398c4d6694d305bccac39c23fe371f7a5fe49c2f14c3fd7cbfee79354c08d8e8d8dfbc1a5de38c800fe37c4640ab6ac14af5726cccff1aac2af451c0aad0b5981b7d1cd48daec34cfe24a0c9d763267f1ad4e41b30e5cf822adf88a5a9cf4348533761a43705247db349b8b173f8453ac25be1c2b760a0bf0c0afa560cf4ff42007d1b26fe5508e2b7634cbe0ecae40eccec6f4230fb4e9338cfd0bf35e694ba32cf2411e5bb3020df05057237a6fc7d50e57b4cca7c70f08774524caa55c831937f0c6af27d58f5f8a780d5e3fb31163f0764f100c6e297a02c1ec458fc1a90c54398c9bf053579bd49994f43fc3d1d938fc393dfc398c97f0435f9118cf29f01293f8a15847f052c083760aefc7740577e0c83fc4f50c88f63caff06557e0283c1ea0483f124564ec5ea84b00239261e0f41fc69cca3eba4832485473f8309d70d28fcac49984f50cb4a4738c504b5e730bfab5727e822e4580cd60f21065fc0c41b8420fe22c6a46150262f6166370ac1ec9731f1c62188bf8231691294c9ab98d94d4330fb354c7cab10c45fc7986c1d94c91b58c9d82c9de49e6a6972cce4e6414d7e0b33b9454093dfc684b7718477d184636bc421ff3a631a2b125d4b6e37d422f1f718d141c5bba1e63b8fb8dd506312778e60cb9d33fc8e29ac585c2d156796b21e6c8ef36fbeb85ae4282e13fd435c37f94c9ef3abbe152962239da7dc8db42be5b3c93e25b7dbab54747b79afb8f6e538219c9322147c87e2658cf74525df3e5574bb294dafea74e7a95247c70ff57730ea2d4dd4f312d4bddfc44c70feab622b448fd942699dcb728c737da27365b1e0cbcf987760366d47ae878f771d968b4ec602e7193fa17c170b652b5328c711fa163fbb44bc8687caed2a2d15af2e65073abfbc5b95eb8411b7ef61a1ded614ea932d4951f942a15cdcef274de5cbb3dc3f3677aa7a1f23dfda443e9731247718ea8475a920e3722c14ec9656b311e627d895a4969f907c8085a48d292403b490c0d41c3c2c66353fa1d98885a6ad293443d178714350ce2a9cff8f1369a1d2f1a105225f4a159ef4c259fb7cee432c7ced4ce11bed1c9a736335a4532e8e16d73af6fcabfb09ed475868db9b42bb870fdfcc17e559ba3199aaccaa4deef13116ae0ee9a4399843064f7366353fa1f9040b4d475368f64a2bcd0d75881609cf329796fed35cf28a9fb07d8a856d3b53d80621b5a769221c65323cee90a9aa3b4d977583a294b9617839c8675888b63785684f2db6bcef8531c6738202c77b5689ba62498a9a8e5723bc907d8e85ac9329643b6921d3535289cc21c6891cacc4f97b41483eb509b3b3b3c9ceb169a597516290bc40d6e0544935d1f97b84a88d72b9cd596e7d8185790753987745cb2d9826bcf1b458b62f52e56f7e2cfe12b3784793c5837d94b45ebb4b907651faad283fa1fa1f16aa2ea6500d4f51f2b8a118294a9b45c2f3d2afc99b4be6b062ee2b2c8c3b99c2d80f8d39de6a99e7dca4c23ace096b8973c75231d5a57a191b762de16b2c1c3b632df7dae6139b3367f8060be52ea650f64abb2535aac61a5e1879f9b798f5d926ebfbf8a8a1fab5bfb639c2775808ba9a4290ef2367763d2e59feb8cfe0799b37fda4734f583ef83dc660d7746231557ddc6f2cd636cffb010b41b774f28aeaf93a1e77e9f6d5c02b61c5d38f582877338572585a3962be73f33c616d81f0aacddbdef8090b61f7745abca93cd15f8b3755fcd5a62cfb190b570f53b8764f3b97f7172a3cb66a13a65fb030f5ac7d5f534d292e9325f3af58f87aa593a7f8290ff05a147d7bf8372c94bdd3698d51d488d30f756d4b8bdfb130f7c13cd75f993f46b478cac404f15296aa3d4313a77f60e1cb3185af98d18e8b54b149a2c550224712a78b7e123e26344f8e65d4ce4b82e7607f629cfa9a384d23e6848f1fa526149cc35f18877e260e3336731e409d3bfc8dd1c835d11899665d728c48ef76d527ffc142dadf14d2116995e0e39d9bcb443d52e580784f68a66a95ff62e11c904eaf8f5ee71a2e425a3df6604f4e3ae7c3ad8df14990c6300e4ca736563d8cc97e126e27bf8f7b57a121bf9eeafc5d21cea717bada8db2c4b0f00dc2fa235385cf2d97920fa45f0b0b37d6e258a87637856a66c89e89a53fbff787cba40ec664b089496f8dc97091d3b865abaa954d75ced594a7f466b921e5367531fbf730d9df2351abf08e99a99a06ff42cfdb633e42d42e55f951d3b37e2ccfc22cdfd3cf681f7c7b6dfa83c20c513d2c447ba53f36cb3dc3ffd8aceb4f947e561f0bdb90e0e924b5957888fdd8df00b37f683a23b134b5ce706a900db1900d4bbf9f4ef73a3ffd74f4bed7080be1705308f7236c39b9394a90166638e3088d3122799837fb9b679a1c8f2f1775ea32cf8aeea9f3cdea6bbffb0959132c64234c21dbd777c8dcba98770ead9fb00499715b9bfa49538cc748138f63087ddfd46be0e5eced43f06707a63455a42ee58f94fd125b61a447a5332ee5bf2698ca536a974f6e8d8560743a7d0978ff62cd7d0999ee476e8685748c29a4436a51774c6f6e5ffaaa7e42d71c0bdddee9f420987b4ad289c54c8e77b4c0c23816eb0df21b83358f56d5a41846aeb20d16ce71a670f665fa0c40771595e0334fab2bf909454b2c14e3b156663aa1f03b5eaf74fc58de0ab37c423a335efce7eacac67072f46d31eb279aac1f538d3b367f349ddc409f399aea5a58b9426b2cbc93fce4ebd80ce07cb6c07970bef36f99c71bf1b8c2efa94d5ed0060bdd6453e87aa6e98b357b5c18e9a82d66fb1493ed03d3cc01fccd28c0425a9bb868878527bf767333d3ebada9dd984b6d7b06da63619c8ae57d7ee666faa9cfa68ea1facebfb1185f72698488793eaf7d9278821f55b29e3b3b97847d6ad731d5aae8e1695724cff3772f72ece1b9d0d444cb3cb90719a630cd01532fcedc7f768971a85572c021365ff301f7c932a19cec23e1790d2fd7dcd6251f91eae1f02a154fe9bbba61a130b58f7a80961a0c5dcd61524bbde9abb0c562f565889496437a174e7a4b0be9741eab3d65acc67bf275c263dd6ae94d355bb14f1d771908930fb5ae4616a66d93edaec004d9bb10139bd68b6cbf447e9ce92dd46a7c1f4ca5a6f77517026a94ad46b96920b336c9b5154ee6668b4b99fb695f510963f5b3e2bd783ccca084c5976b513d07d345fe53ecdc0cfb74a2806bcdb824ae7d29713517be954c928b65c75fb9901c238b862820db2d9e44b61f25b2c602d91cd64bfc7fbc7323af9ff1e419054c6f8e48629a4989691b901055f22b9345c508e1676e015d14096ce7ce4d629b4589ad83c7bbf48439cd794b919c35315ab4b48a98bb646ca5139828801cb05312e46c4a90ed3c2079f5b5402e36522e1a561c2247ca4bd565a2c2eb9e89024427940988fb53426c22200e179ea672ba49c28ce59100f5dbee495073e8eb68cadbbcc0a25234e4ed9184359712560b5034544f886344ae56cc5646025a9b7949680594d0da080fe38d0d77f079b8fcb490839ce33cba8af1c973d12b59df0525eb3cfa24eaf63ff3f1cca5c2046eaedbf31f05587ff54fc22aa484d550c05239d804911ca3d10e7813e46245f4ed80f1a2ffd9ada345a9b9e43c92c0549ce92a4494fc69cda024a8f976d6fc7b4702e4cd1d92204ba8bb80922079f73637a144b63da3d205f45bb324ae0594b85a7970b9e5e354e6ce025cc8262756da9bc6a638cda828a01b509844579ab952324a0da3678726111d90b9c4e88efd45affbfa7ed07dbd3073bd66de5ed8e4229751a9dbdf0cfa64cb28b1f1fd62bdeb8226677be6cba6511480b504fdfe8b2881d513c9923fcedb92d1a889bd3a3a096771a6fa27bc7955f49ad7330a92d0ca29a16d0b32faca2d04de0600af827e180eab83a9dba280ac655112d912ea92d2dc9d03abac51e9d8993130896da99dadcc9c4880fca953126425bdff79f3bba18ee7f149badca4e54c7dce1c056c57838ec5aa4cb707a257309c393f896b1975c5162f18a2d3249f05864996676afe4f741b4e65a0e1b42253b8a29b7b0d06b9d74afad2b3a641b8e8825c0d40aea21e3c492653b848771430dd9e9bc4742025a6f6ccdf2496688d9d1f3c3989f1a0cd3f761ebd6ec9b5a07d7a3025c0a6463f8cd294a91741cfda21d435b6e4e416d82e8d56e25c332709ec50fa7174de06a814b88a23358ecebf5051980ea3ee9474f3b03cf16a6cdbab28409bb424096d75a61ae9aab519ddda59456912dbe199cbeef9c04ad446cf676525511d4189aa1163a0a5c92b16c5a2691e05486bc726211d49ed4fb0b61fbd0e9f0a50e33f2ad3395674bf636a02b01d4d89ad35abde1b1bfdaf4eea8afa7dfd2c4d5c5fc5a5f6df6afa638e7f55cabb91463815db0a71b68ab9bb507abe32edeadc629de5c7c0af44b3535445b3d3fc522e3b8d0ec86c1fb33cb26b288bb3d398ed961d686a6190a773023ddd47924a2f3bccaea194c94ed1e7949d463f6876a0cebf6c1fe345d9354e55cff631fa999d7206aef9aa9ac9a62cc1bf6bc946668aebe7938af8e793d9d566a564a798649d8d56bdb2d39a0e949dc6a7c27aead33b3eb26bfd95597680aebdecb4fa18f45c265559985dabaf4bb26b51ea66a73db9265d9bbc1ad9bee7a1782daa997b4da371d93e27d466a739f943cfe94d43a72abde26b059855f47bd26f3667a7dd2f915cf003560c920b75f4e20b7e1cfbff7c2d8e5e7c2d8ee33884b72505b7ee7c7c2686e47b3bff1549ffe7c71522d5f19bb43776a8f6c6298e732c1671b04864e6ee8da67737f4d49a3ba4139c5a7dde124b363c4ea01f5a98231ea872fe2b63a957cd1a507d1e4d78385b51e1bc028c479f6813ce8191c4f910c0b9c6269cbd2389f34c90d84fb209679f48e27c00e03cd9269c3991c4f90bc0798a4d38fb4612670790779e6a13ce7e91c4990b709e6613cedc48e2dc07e03cdd269cfd2389f33080f30cea591b6aeb8b855a2f00efa3e23d00d1c3d79225f19d99096f2c41fd119acfabedb974389b50e16c064af2b36cc2392092386300e7d936e1ec17499ccf81c47e8e4d38fb4612e74300e7b936e1ec1f499c9b00cef36cc2991b499cef029ce7db84b377247196009c17d88433279238af0338d7da84b34f24719e01705e98895954184cef72ff7d582f3a985554309f014dca8b32b1200206d39b6bf6a343d98ecc2f4105fe625b50e644126543e095eb6c41d92792283f045e79892d28fb4512e51ec02b2fb50565df48a2cc06282fb30565ff48a23c13a0bcdc1694b99144b918a0bcc21694032289f24980f24a4a94db1b50a6bf4fe69ceafb448407379b0aee4100ee5536c3251c6423837b14807bb5cd70099b9b64702b01dc6b6c865b6d11e908c05d0ee05e4bbd3e5f05733f61f04e96e693a3d5846732803da800f2e9c60ae0759400d59cf8fece7fc5898dde9373eb3334df98acf43f0280bc3e13ebf7e13d9eb0932e4309bc1915d68900eb0d995a968e7b6189980d9f119f24ebe93c19c0bb31538bd4956e3149ba02e0bb6973b68da01c6932ae4f85f228d0257733254af5b9626f998c9766ca0b9750a12b075e780b25ba4e125d99735399f8753f9af27e75976a8a21a16792cd907b0ed4206fa5ae415632d3278bd1ae41ee00fcf3364a802da57ff25b160b19af37aa9092fae1722a8c3300c6db339143f6da6272c87c80ee8e4c8c8e631ee82da74967bd9195d4fb8092fa4e9b60f68f20cc1900e65d36c1ec1b41981301ccbb6d824938584106733280798f4d30090727c8608e0730efb50926e1600419cc0900e67d36c1241c7c2083391ac0bcdf269851ecc41807603eb039fb83bcb330a33807732c68753f488992bfba32d5b2de11e8a2e00bec28580f65a285dddb3346a32e67a89948967c0b00c6f599e80de718b988bbb85d86f09179e16090fb3d9c89dc2fbda2248aa5721fe0898f50a2e48b6db99db76a51c5a162688bb0924d3612d800407b7473408be2f0697d006dc3e64db4ae5499c8090913ed7e5428f702281fcbc4007f3aa381de697d841d11dda8b0fe0c8a95c76dc44afa650e19d68b01d6276c5a868474a502b2cacf0da0bdf2a44d3849d7d120c3f938c0f9944d38493f5e26c3792348ec4fdb8493f46b5b329ccf039ccfd88493f45b70329c3190d89fb50927e9002d19cece00e77336e1245d34870ce70880f3799b70922e4b4286733ec0f9824d384917cd21c3791cc0f922f5f4e70ae65db8dfbb081e193cb225c0b98a82f712253cb893433a3b1bf07b978afba2e791bb80cad1cbf62c45d29b727e10d930d8832079bf62134cc2bc920ce67d00e6ab36c124ec3f2283791180f99a4d300967ae91c15c0b60be6e134cc2f94164308f0130dfb00926e1a01a19cc2301cc376d824938d84606f35000f32d9b60467186d02100e6db36c11c1841984f0398efd804734004613e0260be4b09733b0637614b773bb90c342e1fa142db13342edfb3653522d2929dece3e56300caf76d41991349947190e03fb005659f48a2bc0978e5465b50f68b24cafec02b3fb40525e9f73b64287704283fb20565ff48a23c01a0fcd81694b991443913a0fcc41694032389f23580f2535b500e8824ca1b01cacf3281120eaa8d711ed97286d2ce6449949fdbb96418616f3bd99cf76301d64df62cdb44d86f44f6a1caa3a0bafe05254abe7386f79b8be1cecd2e0d326c5b5161ab0b3cf0cb4cf4105539f0f89c8d3989c53ddd7de8d5ef30e7668e77b97317c7ba94ba5b836c4e471ef0c8ff65a22733fd0d0dc960926d2bb337f0d3af6c8249d82d4c06730480f9b54d3009a71f90c11c08607e63134cc20a1119cc5c00f35b9b60124ed92283391cc0fcce269851dcd76c0880f9bd4d3009a71f90c1ec0960fe60134cc2e90764307b00983fda049370ca1619cc7e00e64f36c1246c0191c1ec0560febc399774d2bfb0204ce6645d70dd01cc5f6c8219c5a594af00307fcdc4023bbc6b78b9f840854f8189fa023be7007cbf51e26b01f02d626a71a492cc2124ebafec0f10fe9e89afcfbc83138b9d5b398d02f1d0812cea03144301ce3f28717666dea5e78be497677efa33098b1fb2decc0d6030edcf4cfbeb74e746be5147399bc4dc0fff8ad9d24cf82b19ce5f81bffe4589b3ade6afa52cb9e7093e35267a83bdd3817ffe6d1b50c22a1219d04600e83fb60125cc41c9809e05c683feb50d28615b9d0c683be0a17c20d32aa0519c30b32d001aa304ca1748f48ea1574670f6461628c3e394b8d4d839ec294abfb649387441563d7a0278629d4ca0f57eb8325226f1d11e1f1dc3e07671c4354fb244be00786d5d4ab4fe16c78de2ce14fb0194599428abcf39aa4cb4e1a3d7566f02b0d5cb74be394d625b256667babdefc5620ad722e7ade5e268b1f055c22a512115daf7401db33e255ab75fb354c2cc13af4f6e0de7f62845cf33b3816736a0c4a73a39d29fb215c5c1b4a6c01b1bda8473402471fe01bcb3914d38fb4512e7d30067639b70926e864486f31e80b3894d38fb4712e7a70067539b70e64612e7eb00e75636e1245dd9880ce74c80736b9b70e64412e7950067339b70f68924cec301cee69438d56a9a353730bdabc91076766c8811412d025d722d6c844a386a4906b51040ddc646a884c99f0c6a0b00b5a58d5009c786c8a03607505bd90895708c9d0ceac9a083645b1ba1128eb393413d09406d4d09b59d01aa3b2c97cff2d85836ccb991f78aaaa1baa5e20e423f255becec6490f8db5022cd61d5c78cbc239d6e4ffd22f1b71b10deed3c5fac30c78d9dc0f8b0dc0af18a858e67abad41a78ab9a26a4219a15f77a6f2eb1f593212da5246422b4324549fe6c057de26f5e61e54de7c3700d9ce1690841e4906f20e00b2bd2d20092b576420ef05203b5082e4136ff81486790e8112368e4573b78ce60057474a5cfe964d21fcac956c0ac3eda0b2b41d254af5214c5f6dfe5c46bee2209b4cd31de0db9e125f4d1f65793d9174570c325f7c1024eb4e36c1249c414706f36100b3b34d3009bbe9c8601e0360ee6013cc28ce9a3b01c0dcd1269884354732988702985d6c8249d8714c06f3680073279b6012360ec9601e0c60ee6c134cc22e0b3298870098bbd8049370f93332982f0198d936c18ce2ba9baf02985d33d107c4fb788a13ddba63b698a6e45100e4ae94201b0935b5270bef4f275ebc940c595780ac1b25b2ad59f22b21a59a217f5b4e056f1a80b75b26126ebf2d34e1ae0620bb5382549fa1fa995a18c505cda6814eb51eb6018de2727bd301d09e9440d5eaedea43693ea160052862b6ac0ffab3c0a8782f4aac9d989f8906708994a18e05a5b478f9beef24782701bcbd29f1c245a6e6b0f1ce8dbc909a240c59cea2bc2ad213a068ea4389b0a944c85f3c5ff8a7d2e60bf79081cba202c700b81c4a70358d307aa7634571e3f8a52019f7cd443dd34dc6c3c5e7d22a314f1035cdaa4827e6cb814ff6a304196cb989286ed5300ff8682e255a350a9eb3458d823706f5cbfe94f8b64a59cc10ae21d3880a5d1c24ea0199a89aa73395056eab44ba7967372aacaf038f1c682356d2d14632ac8703ac8332512dc27acea3bf6a7b3790f077cf4491c3275e6d392b1067034f1c9ce9ca50fa6bc8107a26d91a326b00da3d28d1b631a08582fa42e30322b9d4f865a06eb9a74d38074612e7bd00e75e36e1249d584086f33490d887d884b34f2471de0d700eb50927e9c00519ce2f01ce6136e1ec1b499cad40de39dc269cfd2289b33bc0996713cedc48e29c0c708eb00967ff48e25c05708ecc04cef4d7328ce2ce945b81a268944d38074412e7df2c8973b44d38fb4512e73300e7189b70f68d24cefb01cebd6dc2d93f92383f0338c7da8433379238df0438c7d98493f4e33e329cb300cef136e1cc8924ceab00ce0936e1ec13499c47029c133331e486c1f42674c2994864d3142e0455f849b6a0cc8924cad6a07139d916947d2289f25be095536c41d92f92288701afccb70565df48a2dc0da09c6a0bcafe9144792e4039cd1694b991445905504eb705e58048a27c1ea0dc8712651703ca7427d07867cc11f6c29f1123c25c0030cfa0c40c3f514dee499d91495e64d3b27f634978fb66a229e9dd05702a531f4973d3a3bff3df5a80733f4a9c6a522cde32879fb5c0444eb86a0cd936a0c500eb4c4aac7cf1c60ae67edcc76fa8a4f4c26c2a5c6d01ae5999f042b891fc24e7762e3846164070bbbaa24c246eb2e1de6100ebeccd59358272a4099a6c49936b408b7c7f4a946a7d98dece7fdeed3dbd054e94bf0d5a01fc720e25cc9602269fb7c11372a523b5d8b97da8c3a3ca39cb8d5a2e10f365c2a397bccf0518e766c227bd5521efd794539ddf28e795d70398059b33afccd8b620645ff7ee07da37f32851aacf587a89c45d255a38d1ff8ca51f286a0aedf144c285c8c83cf140e089459428837d1e4dd88941d60e9f01d016537b690573d7dd182e80f1bf1733b85c543e4bee334d86926ca5ff9d40d1339f1265aad510b684a54dae01204b32917316b27416718ce21ac27b02940b3255b7542df2e40e3dc3597299a8e876b2ed0a609652c2548b97a9b5b60a59cdab6c117a2719d0374115e900db8012766f9001fd07005d681bd028ae037727005a661b50c2fa2619d02700d04594404ddb22a6334c41988f920d535400a88b6d841ac5b19f2a00b5dc46a884f92919d405006a858d5009f35432a86500ea121ba112ee584506751d80bad446a8843393c8a05e0ea056da0895f0330232a8e702a855364225dcc98a0cea5a0075998d500977672183fa1780ba9c12aaffe5a7088745c8fa49ef027df72b6cc2393092385f073857da849374f720329cb782c4beca269c7d2289f30380f3409b70e64412675390d80fb20967df48e2dc09e03cd8269cfd2289731cc079884d387323897309c079a84d38fb4712e70500e7619438d5f83c1f54e6136df82c9172cf263851ff0ce6349644b99a12a51a9f4f6f6a779f486efe3915f8e5e136c18ce2e69fd300cc236c8249d8994c0673308079a44d30093b91c9608e04308fb2092661e73119cc9600e6d136c124ec342683d903c03cc62698519cbaf815e8f038d6269851fceeed6b00f3389b60124e622083f9198079bc4d3009272f90c1dc04609e4009b3f6bb64115692c8b673da06144527da8895749d3932ac97016f5d4389757b0356f3d22aa3e423decfbc080ba97c2ab82f01b827d90c97b03a4506773d807bb2cd70090b3132b8d702b8a7d80c97b0ba4506f77800f7549be1123659c9e04e00f584d36c864bd8b94206f723e0b9a753c20db69321a1df92ed64d80cf8ed1994689b3a07c5890f19f39cdf790e8b1236ce79a42482234e7c9f6505ee4c4a70fee7e0112671b2b1d02b811f9e65134ed2ad78c8703e0c709e6d134ed2fd0fc8709e0d0aa0736cc2493a584286f32980f35c9b70926e274186f30f80f33c9b7092ee6c4486b323c83bcfb70927e9be5b64387707382fb00927e9ce466438e7009c6b6dc249baef1619ced500e78594387734e0accd1adf8473a0c856f8de1a40be280a900967ed9141fe01d4022e8e02e428ae555f0220af8b0264c28e6a32c8b301e44ba200997090900cf23900f2a551804c38584806f90000f9b2284026ecc226837c2f807c79142013d693c9209f0f205f1105c884b362c820bf0b205f1905c884df1090417e0640be8a12b25a8acebb4cfc28c617ed4cee9b33cd21348e656039cf47d20962adf6c10340afa604ea6ffb55c25c966c55bfe300ca6b6c4149da294e86b201e873b8d61694a4c33564285f045e799d2d28493bc3c9500e025e79bd2d28498769c850ee0250de600b4ad24e70329467009437da82927478860ce52280f2265b50924e0922437907407933254a77df1c7d5bac7cb6c02132dff9978f71456f64ab2b28b56fa1c457fbad2ca3b89ee91a96c47a6b26dae86a25737e337fbc82f1b9a6e9efa643d8394d36b9f27be0bbb745013261e73419e47700e4dba300398afb423d0d20df1105c88403866490ef0190efb4a5d245bada2459a5eb0a80f22e5b50922e8d4886b23da8bfde6d0b4ad24594c850fe0ebcf21e5b50922e8948867214f0ca7b6d4149ba582719cade00e57db6a0245d0a910ce5c500e5fdb6a0245da4930ce51100e503b6a0245d189e0ce54b00e583994059c8cc1b6866ece373b2ad8757b124ca872851b69028b9d72d1053d38b44075ec6d63825fb54f7008070fde64cd8508ed41bc9164b3a04d4271fa644d9b20694c39cbff95fa49d1b1fc68930de09f2c74728317662dece0d7e13171b2e93788940e805ebfd3a85d04bc97af0af07781fa5c4db51c3ebca54a0e5798626986f4505f666007643260aa3de5b5c61341714468f51226cec1ca821393e31b1c0b985232c8a6082ee00a03d9e896207ab4faa909226dfe55418a7038c4f5062e4021c609e7871b178b440dc7aa0f35b257acd173b7cf8d565ce79c2d99bc7514d87cd0755a1273767ad3263ab9791b571f241b1f214254a35e20e67140f17e337dc146ef664e7a858bc609a1089f2fce24b40727f9a126b2b89b5aff35f72a9a231a2d42e662b335566937567ac04209fd99cdd19de066414d7ce9f0f503e4b5d04a9a4eead416e397eb93f80f91c25cc06ce01bf997fe692c7dc4f5aa2578b6c04703d4f89ab99f4bdfeb2d4de32bced4280ef054a7c6a3141d5aa4e1629c3c56c8bc5d5f245d8634e58312743bb1fa84bbe98890a503a3d94de6f880927c2922d96fd39c0fa928d58493fb622c37a11c0fa322556b5920e3e41769a27e90fa46cfd34a1c2d910e07cc5269c032289f367504cbd6a13ce7e91c4f924c0f99a4d38fb4612e79d00e7eb36e1ec1f499c1f019c6fd884333792385f0138dfb40967ef48e2dc07e07ccb269c3991c47929c0f9b64d384937be22c3b90ce07c2713dd21398cefa2ccc781781f7b86ba43c87a93ba806afbbb99f0467c2a8cbe8e3d61c73019ce5bc018d07b36e11c18499c2f029cefdb849374db35329c3783c4fe814d3849370724c3f936c0b9d1269c3991c4591724f60f6dc2d93792387700383fb20967bf48e21c0d707e6c13cedc48e22c01383fb10967ff48e23c0be0fc9412e72eacfadc0eefd7e57c747391f32fff9bcfd85c26244724463fa70a6a19f87c606f2ad87d5912f66794b0fd7d6f4ed87a271b323e1a54a13eb7052569bf12194a06b2804db6a024ed5322437935f0ca2f6c41493af04686b22ff0ca2f6d41493ae84686b21340f93f5b50920eb891a13c1ea0fcca1694a4836d6428f70528bfb60525e9141a3294af0294dfd8829274fa0c19caab00ca6f2951d67ef543c2bd36c8563f3c9125b17eb7393d14ca91eed745f609c1c3a08ef93d25caad59f2138262d1d1b12853a396649f5a4d057ef803253c3589bb8a2d60fc9b737feb154671c5c241c02f7fa444ab3e6d49ef2ba11ccad562c912791b00f3279b6046f1a3abed00cc9f6d824938fb9d0ce6b600e62f36c124ac1691c16c0d60fe6a134cc27589c960b604307fb30926e14ada64305b0198bfdb04338acb46d50130ffb00926613d930c665d00f34f9b6046b1313900c0fccb269884cb3e92c1dc0bc0fc9b12a6da21d0cfe70384de4936457b4f00f41fdb80127a2819d02100e8bfb601256c0d9101ed0f80b22ccb8012b688c8800e044063b60125ec492203ba3b001ab70d28616f1219d03d00d03ab601256c1d9101ed0180d6b50d6814bf6ceb0d8066d90694b067890c685f00b49e6d40097b97c880e602a0f52981f2314cf7a5cbc489a16cbe905acac6390f15b028ae06bb2d4bc26b40094fad6be82e1739d539bdd0393d5cb4e0b95039cbc80291745fb501900d2941aab91e6a452f3e7e5e92b8bca52d92ff1348dc8d28b1aa31769857a63fca4ed8dc241b632f03b3931a53a2ed6c40eb26730e6f31db5be4a7fa4aefdec2298a75d13a204b68420998aff05e215ebb9c4d726ee153bbf88d5c309f25978c2643d8830ae1ce0061534a84fe568b8de258fb2480722b4a94fe579a8b62ef675b50306d6d134ed25daec870d607389bd98493748345329c2f82c4dedc269ca49b2c92e1dc0070b6b00927e9468b6438bf0138b7b10927e9668b64383f00385bda84339ae39a9500672b9b70924e6420c3792bc0b9ad4d384977a126c37911c0d93a13fd4cbd04d262d122d21b97debdb0a2dc7db723a87fb6c9743fd334e66e07b14a0075fdb7582e6151c1dc2d22168b08201cf020dba5ed5980b66d263c164bfe50cebb723c614640b672fc23006bbb4cf4dcf32527b7c41d8996831cb5bd4d05d4c0488e6f36017ed9c1269c032289f377e09d1d6dc2d92f92389f0238b7b30967df48e2bc0be0dcde269cfd2389f36380b3934d38732389f33580b3b34d38a33973695f8073079b70927e624886f3328073479b70f68924cec300ce2e9438db337d4b3dde947445b6b4e937b781cafc4e9968642aa8a51a4a6fbb287a8dccdbc0649b9d6d0149f8191719c83500e42eb6808ce2e2542782a49d6d0bc8286e383a1380ec6a0b48c289dc64209f042077b505246155880ce45d0064375b40127e404806f21b0072375b40124e3e2403f91600d9dd1690841f0c92819c05aa3f3d6c0149f8292b19c8c600644f4a90ed18f661413ecb6363d930e7c64ae746f5b1c152710761b1f30815d25300d25e9998ac9dce402f69c143d6eebe1ee497bd33e19dee6759ea7714e3b338a68a21dd42b6107c5d443ec3830c691f80b44f26fa87fc4e4388e2248455006a8e8d5009bb38c8a02e0750fbda0895b0714906752180dacf46a884253e19d4b9006aae8d50093be6c8a0ce0150fbdb0895b0938e0ceafe00ea001ba1123646c9a05602a8036d844ad8302583ba14401d642354c2f61419d4720075771ba11276ea91415d0ca00ea684aa36bdef23c16e19f38edf66497c7b50af5be334d59cdb0b1d1396390f970b53968bcd460b9d5bc8e0917dafd105c0db33137d4df8e499a88f5f9e0a50ee65d782547d22b9d2ec14902f0eb10d6814bf799b0a800eb50d6814579a1d05800eb30d6814579a1d03800eb70d6814579a1d0b80e6d906348a2bcd4e024047d806348aab7b0d054047da06348a2bcd0e034047d906348a33e28703a0a36d031ac595664702a06336e70407b89b2b69df11d9de9973c15c91bd33318f2975eb9d2fc74fdab349b642e2500072ac2d20093d920ce49e00e4385b4012d634c9409e03408eb70524611b880ce4700072822d20096b9664207b0190136d0149d8e62103b92b0039c9169084354932900301c8c9b680246ce39081ec07404eb10524611f3b19c84b00c87c5b40128efe90813c0f809c4abdeafb0231845bc4f8027c4b1d732b9cbf0b84e038e6aed545b8ea3bd98864539644382d13b3dfd5472e7ca1bd15725e86d72b3334a9700915d23ac02ba7dbbb8f0661594eb68fc60280769f4c74b36139e730e7d1729115f04c618ed8c18db0964936b7e34d00740625d046424dffc8a5328253b1da831c735f7bf6c988e2c6cb070194fbd9b85c29e9e80e9987be02face67da8895747b4632acab01d659d4b54d358970b8a863f21d85ca9d87973997c730352b337ab5cd1d41829f9d8975b8d22dbf49172c252bbd2f07a5f7fe36e1245d4e970ce70300e71c9b7092ae614886f374905fceb50927e91403329cf7039c0536e1245d12920ce77700e73c9b7092ae4e4c86b30dc83b0b6dc249ba763619ce3e0067914d3849572726c33905e02cb60927e9dad964380f0638e7dbb49ceec048ce176e0e8aa2129b700e8824ce2c8073814d38fb4512e7f32c89b3d4269c7d2389733dc079804d38fb4712e75700e7429b70e64612e77b0067994d387b4712e7228073914d38732289f3268073b14d38a3f99dda790067f9e6fcc6c29bd0a3b8c4e979a0ce59610bca9c48a26c021a974b6c4149fa652f19caff01af5c6a0bca7e9144b917f0ca4a5b50f68d24caae0065952d28fb4712e5d900e5325b50e64612650540b9dc1694032289f22980720525ca2e0694e96ef0ed9d8f443877f38c18d53a9b00f34a4acc2d9969e1f2f1ce03cb05897216e5ede8df62498cab3235ad6b92730bf73d7e2317cc67c5428a4ff4224348f61dc6f600e181d4cbeb295f9b2f92bbd25e2c6f21834736093606e01d9489d99a78a7065ceb2043ab1037a3c23a16603d98ba3c4fced65c26b0b9454c72a666b493f77600e5219bff7bb5e8ee03580adae387da02328aeb6816039087d902328afb002e012057db02328afb002e02200fb7056414f7015c09401e610bc828ee03b80c803cd2169051dc07f06000f2285b4046b15fe82000f2685b40467187f32300c8636c0119c51dce0f03208fb5671b45c20a105937c60900e57199989be1ed8d748d19c1ca84a8dbfece40af24d92212535812e7f199d8f0a337db9236fcb801e03bc19ee543099b8864cb87ce06c30c27666a98a14484688e636e259b2ebacd4a1d93a23ccc7016f0c83594185b7bf247777b596fbfa4daf8981c26d9f6c7e7039827d9b30607619f2459b93d00a03c39137e995e15a837657d920ce6c7a012748a4d30a3b83acca700e6a936c1246c7b93c17c03c03ccd2698843d426430370298a7db0493b09f920ce6ab00e61936c124ec3d2783f91a8079a64d30a3d8a5f1028079964d30099b9164305f0630cfb60926e1f83719cc0d00e63936c18c620be87100f35c1b97cb23fdf8846cb9bc5f01d6f36cc44a5a9127c37a29c07a3e25d6c62c39af2d9f2d7038cc17732ea3b885716796847641a697644e77463ae93483422ab43f027f5c6bd3d23a03282bf0649e7a2de86dbfd0269c032389f33180f3229b7092362fc970de0012fbc536e124ddca980ce77300e73a9b70e64412e7bf00e72536e1ec1b499cdb81bcf3529b70f68b24ce2100e76536e1cc8d24ce6280f3729b70f68f24ce6301ce2b2871b667d56779a45ae43e03d314c86621750305d2959998c4c5e7612e172039c40c4de222fbeeec3196c477952d9fe493f6be9379e2b1c013afb605654e2451d60339e535b6a024dde49d0ce543c02bafb50565bf48a21c00bcf23a5b50f68d24ca9d01caeb6d41d93f92284f04286fb005656e245196029437da8272402451de0a50de448992afdc59c1bc2bbde4c9b60e1936b2cd3779435861bb997aa11cd544f4eeba9ba1160dd960d92880f0163bd77a219c8f49b6d6cb2900ebadb6e48da433d8c9f2c64b4095fc365b50e64412655b50ccdc6e0bca3e9144f91bf0ca3b6c41d92f9228f38057de690bcabe9144d913a0bccb1694fd2389f24280f26e5b50e64612e5e100e53db6a01c1049942f0094f766629d0d8eaa58acaaca4df50e8245f973fc392c09f2be4c80ecbd85829c0d40de9f8989ac554e0bbc54c4e07487c670c7e822316555fd0e736ee66df4e5ce5de5e22b73e22132b2ee8dbd411df3814cac73804f285825fe225d9af1c33811c6ab419ef960a67a8992ab514f10c93c236bbf90cdc5b81124f28732915b0edc4273cb5200723df5b712054ee8ab9c5bb809cb45af65218be2b712db00680f6762d24a2edb92561eca01c5c82399fed424fd329af0d327b212fa7e50b43c6acfaa2f515c0ea20824f20d94289b3a074bc46c342ea16f7b40062e9b0a5c3b00ee319bb6201c48595b24db82b001c82d1fb709e78048e2fc0e78e71336e1ec17499c8f039c4fda84b36f2471de06703e6513cefe91c4b911e07cda269cb991c4f932c0f98c4d3849972821c33919e07cd6269c3991c4b90ee07cce269c7d2289b30ae07c9e7e0a60b910e066f28520f298bbe843f4fa861a036c2f50626bcb4c5f899937d7ca40572fd9274e1703a02fda32584b5ae09075bc1d099a922fd98292b4b02143f92740f9b22d28490b1a3294570194afd88292b4354ed7b30eba7f5fb50525694b9c0ce5f600e56bb6a0246d8593a13c1aa07cdd1694a42d703294e301ca376c4149daaf4e86f26580f24d5b5092f6a993a15c0750be4589b29d01a53ba09bef3419c7b261ce8d95ce8d6a9077a9b8831029d9f61d2701a46f534f31a864ee1a9653199f5250c81632fe25d944e7bf22f11719be1c2a7c9d5812df3bf6ec5a16c595fc1f04d5f377e927bbf07582f83646ca27f982a005cecdfcebc6a208f607ed04f0bd4789af398393fda638a7b82eff92b632d253fdae0649f97d4a805bb3e40cf322f9097286a65a91cd071a04e07d90a99dc992f324d5e50c6124cb0347038c1b333ba7dcbc34f228f98077ef3cc28a4e3e15dadd01da0fed9dae4f88962cf1b70045cf4799da2073cb595bed76e0991f67620789f4e652926e75409683fe09607e6213cc2856c9ff02303fb509661437d7fa1ec0fccc269851dc5ceb2700f3739b60467173ad2f01cc4d36c18ce2e65aff0330bfb009661437d7fa10c0fcd2269851dc5ceb0b00f37f36c18ce2f6c2ff00985fd904338adb0bc74103f2eb4ccc65f333df97d03bc9e654ee0c807e631b50420f2503ba2b00faad6d40095b436440b70740bfb30d28618b880c682700f47bdb8012f6249101ed0c80fe601b50c2de2432a03b00a03fda06348a5f4eb403407fb20d28610b890c687b00f467db8012f62c9101ed0080fe621b50c2de2532a01d01d05f298176627e66c0a9c524f824aea18e05a5023119dee3a856cc5a0f66c3fd96a9adb7bc9369163177f5ac11622612bf99072203136b9650f9ec629684fafbe69c23e79dc4405827ada242590efcf38f4ccc51e27ec947d64b5865a6c6d9c9b66b1f03fcf04f7b9783226c7c92cd00b907f8e55f999801d28f6d490b95f502a5fadff4c5ce88c4bcb9e1c2ebdc0266a1c0384c4ecc7625473abfc562a26cf4a06e0d92fb3f99d8e0239da9d9707b0fd2f14db25cf413e0abffda889574c95b32ac1700acac1ef1fa98bcb8e13967b9a7e21ebd62a71948e2314a68fe57808be2a8d136c007e336e1245db29e0c673d80b38e4d3849774b21c3f90248ec756dc249ba630a19ce4700ce2c9b7092ee9a4286f36b80b39e4d3849774e21c3f93ec059df269ca45bc991e15c0a7036b00927e9767264386f01381bda8493742e1d19ce0b00ce469438d5c783debd7db6948f0717028c8d29319afa37cd9f0ff2fea545ac82b98becb9fd4c84e342649bc5de07aaf24d3291e0b1e43ecc79b45c8c0cf15d2d88d7f120fbd4fa52d05ddcd4269ca42bcc90e1bc1be0dcca269ca49fb392e13c1524f6ad6dc249fa0d0719ce3b00ce6636e1245d10920ce7170067739b70922ebf4786732b9077b6b00927e9c2906438bb019cdbd8849374193e329c1301ce9636e1245d20920ce74a80b31525ceed59fa6b66e7b362215d20a04777fdec475912eeb694706b3f304cd8394236307c2528ef5bdbd4d73430929fc96c0d70b6b109e78048e2fc1724fab636e1ec17499ccf029ced6cc2d93792381f0038dbdb84b37f24717e0e7076b009676e2471be037076b40967ef48e29c07706e6713ce9c48e2bc16e0dcde269ca40b5691e13c1de0ec4489b30babfde09cb7b544f8c1e11931aa0a1468e177a6c4dcd039e0a1e60745a2f5ce85a2d725d20af8e50e94c05ab1d4ebd8780b203290745be200903bda02328a9b3cec064076b10524e127056420c701903bd90292b0502103990740ee6c0b48c24a1019c8320072175b4012ae9e44b73d1300996d0b48c23569c8401e0f4076b50524e197e964208f032077cdc4e80fde5c849ff97bbfb724c3da8c0a6b21c0da8d126bed76bc22ac1691ed78752a6822ee4689b4b50169eab99cd16b3e1e0a86d3badb04937091493298a700983d6c8219c5b91efb02983d6d8249d8b94106731680d9cb269884653a19cc0200b3b74d30094b733298f300cc3e36c1246c5692c12c0430736c8249d8d94106b308c0ec6b134cc2e62519ccf900663f9b6012767a90c15c0160e652c254ab75f14e0d2ee20e9265e83b4b327c2300befe94f8fcedf91bc53db1ae03280750a254eb19f29d03956a86fc7039153cbe60a7823730133334e06cf6a10e8d2ae7116ed2729117164aa451ddfff76c80735026ba82bd5bd8263f0888fa6a862301c8dd3767fee85def95b00e49b6deeb01a0af727026ba7fcb9c9b38463e236885ec3df742853dea84fd4264ab11ff0d8a9c3da82b3f95ccdd5c1efbf6870c1fd9573e1d41e2ded39ec44dd8774e96b89781c4bd57a6d7eb487f3de228ee483d06a01d9289b27cc0165a969f0492fbd04c24776c7cdcdbd689e2c6a01300ca6194283bb2da6f404f386c4696d81b81127db8ad60090b2832b0bf008fcdb3152c61564006f63e007684ad600987d6c8c0ee01c08eb4152ce1003019d8c100ec285bc146b1a6da1b801d6d2b58c2410e32b03f00b0636c054b38144706f65b00766f5bc14671139d4f00d8b1b682251c652203fb06003bce9e466c14b7bd3f10a01c4f89b2a973b0408c2b1589d1f6a560d7a24a3a706413b9eb0170136c5ac98b746f0db2c1badb4107df449b7092eefc4286f3158073924d3849d7ec22c3790be8919a6c134ed2f5e1c970be0f704eb10927e9ee056438eb83c49e6f134ed28d74c870760138a7da8493749b27329c7b039cd36cc249ba910e19ce8500e7749b70926ef34486f37c80731f4a9cfc80dfcc97ed891e26be3a8ec23463734ed7d6878da3d8e67e0bf8dcbe36c124ecbd2483f92880b99f4d3009fbd8c960be0160ceb4096624e7c20398b36c8249d8974e06f3260073b64d300947d5c9609e0e60ee6f13cc284e03bb06c09c63134cc2d17332982b00ccb936c1249ce34106f33400b3c0c60d1c48f7bf22dbc0e131d07b39cf46aca4bbb491613d5060ad9fa5898fac263e5c743bf08e874261bf3b34db838d627c34d1dd7ba5d0391ec74ac553731d20339d7ffdc5c56ce75fd3f998f8f470045bc92ac459ae5724b4173957b96595ac5757e79642ee1a0da46b64c7f85f7c0af93c877b89635bb9f3ff6c81a1922d70cecd77fee561ca8e35e6c9d5f8355eb6f806a54a4474215be890e01fe0f27d66b8da78e7ff45e22ef35ab6d9c27217f732716da8f3ce2a418cdb53e0dcebde53e12872572a9304bdefc98e3531dc9327efe151188b3597b1c6ed1ecf8ac5952279c754e7bf7922ac3d77756e8be53aff73e72bf448cc54e82117335e248fd4f99a35799ca5562be2111333a7d9b2d0bcada610b909843f3f5fc466b1501d5363486b0e1feeb94d52c44a4f9eb0b7e8f017f3786f28e33dde932f4b1beb1d82efd56cd17cfee6385129d198253f4be3ab81ab845064bf6f4f72ee2817c62d156606f1ed464ee8bc7aa5e2bd3dbbdbe9d7e185bd04e667f19e3d6aebd7fe2d5a40e9d7ae9a3ba14dd31e9546e8ccf1a08739795785f08782842fb8a97c8128536b26d1514c15c3d5863a472522aca542751153fff0f292d7267976544ac9b3169faf6ec9a906cf317af11ce3004fa2eac513d5c2ffbc3d546f2fa3e4b96d1ade0e376afccff395e72faaeef98bfff3fc503dbf9c92670be0f993b446da7f1e6ff2f88aea1ebfe43f8f0fd5e39766aa663335d139c28d9de8fc5724fefacfdb95b75756f7f6aaffbc3d546f5f96a9f67ebea7ebf03f1f573ebebcba8faff8cfc743f5f195943c9ba33efe5f0dc6e4efabaafbfb81fff97ba8fe7e50a6eaecdec19665cee5fffa67aa7bfcc1d53dfe90ff3c3e548f3f9492e7d6c0e3cd4b8ffee7ebcad70fabeeebabfff3f5907c9dffdb5a54aaa739cf16c9b1f264c391ff93f57fbc64beb239020600 serializedProgramBytesString: - serializedSignature: a08354b884394197281d06c1c747dfea7cb2739c23b0e65112da81ffd2adb5d76c8bfe03e81cd9e69215b77dbc0c857dd9cc7b22981b72fdcd144a8fad22fb00 + serializedSignature: d5dd686bd7267ca3f67cf340d6e0b0363f8d8ba32cbd8bd925141dbefc7c452d44d10387595ffce4f2d1c6facb9397ad7861511906a91834faac682df1cd1c01 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/62d157ce28de1064b8095c8cd096e77c.asset b/Assets/SerializedUdonPrograms/62d157ce28de1064b8095c8cd096e77c.asset index 030310f..1bcdce4 100644 --- a/Assets/SerializedUdonPrograms/62d157ce28de1064b8095c8cd096e77c.asset +++ b/Assets/SerializedUdonPrograms/62d157ce28de1064b8095c8cd096e77c.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d07781b47768007a4208aa4aa2d8a94ac5e2c5812098a542f96d844518d129b6cd9b20491a0088bcd2cb2ecb4bb94cbdd25b9f47ee9bdf7e42ebdd7bbf45e2fbd2797de2ef1cd7b3b4b3c2ce62d16e03e40eb9cf809836d6fe6fdf3e6cd9bd9d9455552e97fb143fa63440da82ed5a286d5989a51d3fa5b974ea7f49fb3e5eebfaee6747a5f7fa6f4b1436a67812be1dffe5893feecd35bf36a415fb9a846759ac1e3832aadbff7e96bd37a0bf68eebff697d566c85be685875ab7e754d35c61a0a8818c18be6cdbe18e8155ba53f3bd56bfa681a0b059924f150a3fe18d447e6f1d8942eb47bde0bea36aa35a58f8dea6be6d4a496790f25ae5a58a9f08b7292ab26857c6ac97748579affb7cc765c2d5dba74ae22e7c6c8f717c8b6a68024687ed54486ad0c2a7bedd2be6ab20fd22a93d78b9eeddb1e1935641b8ebf6474396ff65f33e94692d746933698f40973ed1db3bdc1a4b5e49a5a722ea4751e16754ed9abee7af25d47aeb595c54dd793efebc83e48d798bc5cd99b4cba965cb386ec83b4de5c9332db8d265d4daea927fbe0dc7b9e323d49b609dbd815b3bfdfa44de49a2673eea8d9de6cd22172ce16933e45f28dbff1c61b1f32fbaf9b742bb966bb49b7996bc6c839747fdac37a0791b1c3a43b4d7ad3c3f5a649f7926bf69a748f39779c6c43bacbecbf6fb69f37e93e22639f49777bcedd45f6bb8ce0f884d97edaa4fb194e6e790f92bc0e9af480a7bc074c9a60ca7b88c83864d2673ce726c87e486f78ca7b83e801e961733c63b65bc97e4893e6f8cb66bbd9a42d9ee30fccf611b33d69b6874dfa9c498f9ae353645bb7c9f809b3eda6274d7aca9c0fdd80b6ebb86b07a74d7ac6a423267dd69c3fe3a98701939e230ccf99f4bcb966d673cda0493bc8355e7d3a3dfc3a3cfb5ff1c8bc60d25e65b7974b26ed2379f699f4a2b9668e6c6b762b5dd6974d7a85ca36c7318f780cfb818bba05a6b4b64970d8b16754f0aedbbdb270a78d7d017cc0bffd98ed82ee1e67b5004bcf398cfdf2826a576dd69e73736c352977177ea6f41919140a9979b2786f5e1650b849fd9726ddfebcdedf8b510374fc197da445c3cbe0557775137841ffe54a19d1d94eead021ad1bd0a2ce0ae4ddd5c5ce3fb3904a102278af19d0329d08664aef7181ceeaed492ce1207e3ec492a6b1f47d7adf02c653d3da0574eaf411e696affb9cfe6ecb73c820b397d11ec870fb9d70c9ada66ead0d943e8971c3476aa4123502e857ce9b66b8228991db3bf36ae2230c1d27134767ebc8388cc86239fbda541263f0813c82c5eb98afa1ddbe0bf1beed4306aabb1135c8d630fc8be7aad5ae92387cd85a402d3fa8202f11db9427c1bff8f1f88a5628a4177dcc861e87114365440fc766504a4a9f5b3c7e807ad08b3f8f7d2b9c5683f89af2942b5c040e61950d218e2cc74511ba61c1a0f6ff97b57a596933e8d5219f79f439705ebfd6e065d3034099a6f5b76c70e1caf0c70c4a357b30db29d722e50324e009b3945c4d54db6a0263bb89c7bc26dc898c626aa32e706dd4636d1c0aa536ec25e56a6485a5465a617335e7306b3d0ac016233cce095f1382f0959cf0b52108afe184afb3088f15297c954d38b482f53683f10aaee705d772a5de1002923a9b70e0f484d5b77b25d7f092eb6d5e01b37b6b59bc42a1a15e2fcecea6735a5b7eab7463fd019d8e6329d2d81ed3018688fe7ee4c9253e59c04984d6a3820f58e5b58089c22af4670de8cf765a4be77eebd43227745e0f71bcb3a873b2e5108fdb3de626cce1f1d29ff3b1ab6df68d3b0745ed3b57b2735e06cf2b3e806b0cdc973561cde44f6c14ca9fa3b7c6460f774e89d21bd6fb9c49951e3c9a411b69511dba1c2dea1a5aee559432a1f7dd37f6039af95d79156f9c2c6279fc896f0e4c7c0b1287519a7c99b95a5a6bab25dc79a38c361e64ac6ba7fd5460da5b9176439e56be434286da3a1b35dc39f318dab61b598663dfdb0213df8ec4db4bb6ef62cbcdd5d67a2ebcda114278b58113be3304e14f70c2778520fc494ef86e8bf06263e58d36e1d042f6d8ccc72b783b2fb8812bf5de10906cb209076fb84fffaff5086fb009dfca0b6fb4098770026ec0edf7f286cd016c12705f3f2f9f263e9f269b73c236305f26e794dbb033facc9472a7c7bdcd7d1043c871bc1792f634773f39fe4e6a7f6027954027753cc74995a3fc9cb3da6cab3d7432e50d3a9d806fb2a44e19eec7ed0832698b3570407181a77f1938825b6ced0c86a50755fe78ac15c66330815387cd39af9d6de2dbd9535c7b6eb6b5e73ae5acdcc9607da55087d76dbecfa7656fb5d906f611a932b5ecdc0e7818adbb53e7b4a0ff66ccf4aedfd9fe76d312b8d526d166f6293eb428be6c9c3d6db3d5334c8bc04283654da06ce72cf53067a96dca1daab72381161f02b681b31f03b7167243aa625ac40eaed33fb2cc4e7f27d7e91f0da1d3df656b55181cddaf48ab1a317505b5d15e748df9b7b0635aa36aef9414c66a077d2c69792582ca231fccc4d071b467b95270ad7bb7cdb4a0f64f5850b56ecc51c5e8e3b5b5e3bcadede15afc49aec59f5a6af1a79150b30fa1215c900a4b10c691c094707bdf6bd306a678ce0469ef5b78c1fb384c67394cb068aaeeb4b53a7c14789acbe71c97cf79554aa8b0df960f840ab0d62a2f5400825d3ab404737f40d61a8343992f2a604870c6dd2961dccf70b97549e47680abbb6eaeee7a4ab29183b67ca08a2e2cd3c80f710af4720a5c2c4981662e9f3e2e9f4b2519790b67e4976d460e37d3669761da494b6e499c1c28e738c91b5b15374eba62b3206bef08ebdb6d63a442f973bd5eabadae6094090b9af3876e6f3997573507f8aa39cc09efb70ab7446b3ec2db38e1d74310dece09bf1182f0235c3b1ce0dae16049edf0a82d1f1885c0c2a3658d578e71788643c0739c133e1282f0131cfb9b1cfbe74a627fd2924f1267155f17f54a856ea63a6bd8d264a66a1ee7a5606ef155f4170f74f7f8503913ef43fa9c399c865f58f64d7058f9bfcd527b5883565f770b7dddb3aaf02d6249ad38cf79ca6649d0cbc1233a79bd5c359a1844dcc5f46da7396b7d91b3d6db2559eb194e97976cba8417969eb5e50b4dfd4e084dfd595b13c4b9f7e98a3641187c2d6207dd9263949077f6eefa729adadda29b5a0a9b5a5b80a61646e9b92675ce56637817e391688d7103e3ebe82816500648a525f01b50fb5d177c8a061e790916148e62ed9d51fc8480b4265c8d9eb73570d884e7e9bcf3759b6d0d3cce37f00e9bb9e06d93bb15311767a6b94fcb4d61efb2bc39f074e0ea1fc7eadfeb53fdc5968cabce4ece5fdf0fc15f7771c2274210decd09cf8420bc87eb3e5fb6759f5051ed7a735c0789c7f4d5f774daac1bc4097df084fe76447fc2cab5663cd2a63f9bf5306d4c1b669b3e724287f56318dcb7eaab8be96c2fd84a09c1c403c50413f0b05df1c1442f4763ca46238cdb61176d39c2f0053afa650d74fa2c92935be45d4cee2af24e5df879e54c7dc3feeb5a624ae70df23a3007ef7a71f70a7f173313d8c5cc2eb998b04ac6b9984bb6ba04e2afd80aebadca59be2a2f73e63fc799ff7c49e67f8533ff0529f3bf6acb1196922f0641e6b31cfd9a4d30dcc67b1844b0cf6dbc7e9b605899f26a10c1095ef0759b60b831fe2888e0242ff8864d30f41fafa9e5f71f0336e150e1af0729f5282f78d0261822a48f0a22789c173cc4e1f8e810700c73c23f2604e1239cf08fb50b2f6ac2f3a64d380c973f2e086f9f5b04cf71a57e8ba5d4ef7fdf95a24afdbc4d3838a6b72ac6337ebc2ae5fec32d5b3ee0193f41593ce359a554ee2350b607a9f8c7a83ab4639fc3cea845ddd17fce7ccf1ded9fd3d8e12ee8b812f6d3ae31fb846731fef7054eaf4fb4e905a3167b9e4e3967b4864e29613665081fb198f62929bf3ff748eee397c5e8f722a7df27d9f41b09b9de7a4dbdf9e9b99cfc8a21719b23f1361b8923cb24e1e8efacfd847744bc6ab183112d2ba30704c568f112a7c527dbb43817c85e3b7419c64c1433138abd96d616ef70babddda61b8c0aede36058afc92d47b75b6830bf128e9677392ddf61d3f24a885afa6b567c2ec5689de2b47ea74deb4b25694d75cd6fad5eeddd474678ddf36514a3f13d4ee34fb1693cbce46fdc69573ae96abb47d2b77466762a7700bd505a97ff219edd62b486a3635ae2226a0f72b3d778b9d047c5c2f058a31c874fb571389553f3d9dace5d77edb77adbd119d68cc2e07dcc736e181a8d711a7d1ae7a76c83e8dc3b5c0e6fa7ec7dfa783ff6185087bc7ddad686861739a4392ddf65d3929fc0863949ba82d7d171de7824b0c1942e3f9470ac40e9c3a8bb714eab4fe7facf52fd901bb32ee4ade7e36b347fed5f31badde774fb0c9b6ec759ddf24b91ab1178c4794fbc609794bbdab3185d26385d3ed3a6cb00ab4b6e091c3dba95f322a794721e2e0e5afea06779fd69f6098862086438029f6523d0e589f468ae34d6ebc6be21a3e6953dd6a3d7f91d0947c797391d3fdba6e385803a427f70cfb4bb51c545b5e5d5f401a7e9e7d8344d0b47030b9e97df8ee0adc2cc9227f68f09e811bfbea714ff3cc971fa5c2e3a96e2047b5fc16c401fe70640769637c5da55295a4f715a7f9e4deb6b01db412fde28481906ee6c44bffede839a81c0705a45e951c634a7f9e7db347f5b99a3646e155276de22683982ac67928dc36738d25f6023fdae3293ce5ed3ad53f746d4189e3b8a52c7f4b9c1fd52aeb5f29a6497c4d817c484417e9623ff8536f227d958c66f418743b607cb5d68a4bf5c7d5ee1f4f9229b3e677d4706d9750db9e382711cbd4deaa81aea699119a9f21ea914bde638bdbed8a657bbb28febb89ba9b93134446057741947ad5e38883fadd17fb198f348c434b683d774ae33c804e62693f8686beb52290bbfa4074a30a5fb73c87968291628bc24ecdd8a7fc76efe4bfe4a7ddd6a69eb48fbacda055fa497ff6ad91aa3912b4b93c6477adf6c9a7e09d46a8da9d5aa243e407bb0446b2a5c8a2f85dcaaed3654fceb8c1c01d7ccfc087ba3be603e859ecc684601ee4c6208af9706dece74bcbb24f73dba61d5c4ab5a81ff974942727ed5c01917432f1305381f8c67e17cb9249c46843383e1b33b3107933e192d9f4e97a471e21d029728e05bbf328bef2b24f1f9af3a8f02aa0f5467517da524aa86254b7306e55d66d8761f831cefc3765140f76ed248bf4a125df6398d2860992058be5a120bc48ed9971045010dfc83f0d623dc3bff17d6abfb0bf1e46341584fd7a31ee18cf81cca1bf3c686f87a90c7ade45fa3486c97f05848828d9712051c798234c144919e2c911780244ae875b38322fb60a61506455fabfe7f8f575a61bcf27500e19681e078a1af97f442355897509be05eeea8566f0ecb79eb7f6d8e4f6a0f52fc52fcd2769575d9df2009abcec0ca9de1382687ec8014b2e304d9374a225b6d9065d4b4cabdb9d72687ad5e0a5b35c1f64d92d8c0497b5d71d6c1677dd443ec06a2677f2304e43757c6fe8ecb614b48616b22d8bea532d83ae5b09d96c2b68760fbd6f27710ed116ca06d04d9b755c6d28ec8616b90c2564fb07d7bf92d4d109998a5b51364df21892c6e90dd930d738f4b81da4d407d67b9401d8e20a86708a8ef2a07a85444412508a8ef2e17a82836bd5d04d4f748825a87d2b26b4ff2d77c462ffa7a9ec0fb5e4978ab8c954d9b1da2b6d62485ab87e0fa3e495c7ce4d51d412bdb47b0bd4712db1a161bbc3e257a21eb6502eebd950277520edcac14b83e02eefb2b05ee44042dee0201f7039502773482e04e13703f582970511c969f20e07ea852e004271cc7a5c07510703f5c297082375846a5c09d23e07ea452e004c7a46271dc2102ee472b054e70dcb0450adc4102eec72a054e70aa5bac733842c0fd78a5c009de0d1503d74cc0fd8424387ea42ae8e16aa5b055116c3f2989adde60f33eae2de8dd6aa4a01d25d07eaa12d0042d4d0cda4502eda725a1b9336f8e8059591b8b4be1aa21b87e46ba2380e7eb1670f586f7b9f7e8ddc21b22e07e56121c54bd6b6379abac23b07ee82a01f57392a0ecb787057d98986db512643f2f898c0f320427279352d8b6126cbf50196c82c3f6ed52d8d6116cef93c4062c8a59414d1f5c8dde54f92582f5fd9258eb55eefdd3ecdb7fa237a0bf49a0fda22434775c3a667407db735fa211c538ae8180fba5caf83ec11b8162be6f07c1f6cb92d8ecc189e00c885870729820fb957234d1f4d2db30dc43a2e0c41639ec27e07eb552e004272bc5c09d22e07ead52e0a2b8ac663501f7eb95022738001303f71401f71b95022738961003778580fbcd4a8113bc5b2f06ee0c01f75b950227b83e440c5c2f01f7db92e0e0dec8ace7b55782f3716277e90708b0df9104c68f142e44f01efd0182ed7725b1d9470a820b69c4460a5d04d9ef55c6d204c35db131e94682edf7a5bb02ef03b7d997e0456fe1d62001f707d25d01d81b9ce2be0f308a9346e709b03f2cbf4f135cc72be6d3ba09b23faa8c4f13b434b19b80ab08b60f94a369c205637ac723d911a858d3ac25c0feb8dcc0a2e8cb1401f62792c0a08d3899c2cd16fa7312d1bb637a9d40fb53496890f57cce6fa388c1127b11453f81f567d2b09c213a34c968faaf2708ac3f2f27ac28faae9504d65f48c2ca5fb31645db7a92e0fa4b495cd9b095bedb3d8a77021a09b2bf9244e64e2f8e2ae745f9f4a779a2b89cb48e80fbeb4a818be2e2e51801f73792e0d62abab0740085a4f0724744f4c6983708babf9544c78f31bb22b876682fc1f67792d8dc2153b688d1ec47d713607f5f6e60518cd3561060ff506e60824b5ec480ed24c0fe5112987d8251d0c6c49cff6682ec839571fe517cbfc21682ed9f2a834df0eeb9589fb98660fb67496ceb95bbded6fd492defcf6945b1b19e25f8fe45121f6c4c6b59a34a70c981d81dcd6b04d3bf4a62824719609a7154b90f694d98424c2878b031efb750226063cf1178ff56fe3e54d0ab89213b4690fdbb24b2b5ca9d4fcbbed43eda4b465b08baff9044075391057e42260296364c70fd67391a277dd047d4c26e49213b4990fd97b48539c81c89a2b8b64ae15a4b70fd7739700d451ad72682eb7f2471b94374e7d7081695f052f7ab52c09204d887ca0d2c8a13dbdb08b0ff2d37b0283e30d64980fd5f3980cd2bf7779ba239cd1827c0de2837b0284e646f20c0e0c65305267f7a223867f634c11693c4b64e799f39c9fd5d73c1469a9282f7ac7ad3fc30602b4cfc548101ac320690f0bc752691330195b02ce74af8ac8b4b30cfce240aac404f14f993508900af92777e956f83a92568bd57f1cc94a692c234fb0b7d49783a3c069309c5fcd0b4bf4ca8237f69d55011317b4b9c0ccdbac2f849409ba685f5e32d75b54fad2477425dbc99f55f41ebbd2ab90bf43d1c82ed152e513cc6ff086539e6791ebf5a757e4d7416cf84622ec7aa61e626575e06f34dee7e3c2d3a3cdd57e65af49e522dbaf812d5485ab4236d02f17b64f706d0ce5e0f5e9db367cda23da4966cc169df703f632c00896d319811e1a575e8adfba86b06a54e29f71ff494ce5f23f6edc3fa5ac7a7a455bf3e7f0ce5c1bff88701ab33782bf2e20000 serializedProgramBytesString: - serializedSignature: f09bb4e703d0f9b51565b3dbf5f25f79740dd205fdeeae9187c3d4bbdf875fe6e7dd1a696024798e5d0f0fc9e4aee9d3cf9c1855ba6362891ced1736260e5d0e + serializedSignature: 02a74ce010eaaac380844338d6d6de557350c8577d0008b5480148003ba96183bf7f3c297591485afd0e333e27aee9d09970908dce85c5475339ef2edeb49003 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/62e225bcd54e0b64ba61bd5e6f2ec6f9.asset b/Assets/SerializedUdonPrograms/62e225bcd54e0b64ba61bd5e6f2ec6f9.asset new file mode 100644 index 0000000..fca6798 --- /dev/null +++ b/Assets/SerializedUdonPrograms/62e225bcd54e0b64ba61bd5e6f2ec6f9.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 62e225bcd54e0b64ba61bd5e6f2ec6f9 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e70e772f5e8287424908414b2981e09294042ab4854002a404694290ba97ba51a7eeeeeeeeeeeeeebfbabf3bb333b9e7f6e6b9dc66efd9ccf0fee9a72cbbb7fbcc33df79c69f99896631e74f6488f3d77c36974d6243d93c56ca56b355cebf2639d795ce7fee9d7a5ec82a9deb32e7ef12e7b7212ca3962ff99f81912ecedfd39dbb2ab6d6f9b29a2d71aee5e2f72256e6fc7bbaf36d9973c79f2e75fe2f73de8a34743e9ac7f259019bc33a473ad52262bef8a84a3e8bf078459a3a7f4f641b9d5fcb84523c902cf15367e7af22e7972af1db4a4769f5de02b6a788d64ae7b725ce3795acc291b958486c5a5cc0c43f987bd9565e7bc96b4fe7ff66f2df0de4bf9bca7fc3f71bc96b468aeff706df3503ffe6842e48f27d1ff71ab9d4b936662cba01dcf36fbf91eff575e545972791d55f5e07c8eb402973630afa3791d7cc5ae29b4cc620202b15664de575b0bc6e27f5ddb78ee16fef328a6c01f238cbcb803e8341d8cdc0effcd990007157e978b9271d2f77d3317aa64cbf4fe4fb43e5355b5eb3a46ce79d0e97c867c3e4b55f2d7ae5b8dfb1d12c66b34e980dd6c8fbe1f29a2baf23a46e574a5df703f7417551693a52cabc4286b1bfe6b97a9fff7e80bc1f25af2a2e2abdc6c8f70e94f76353d42715fb533a5d25c33808dc3b1c1b2e4a224ba5fbd59e74bf5a7e7b92cbb1e11d9ef800fbd3cadd41ca3bb80ef1b8c6138f6b5c5d1a65c6bf57ab0e4afe3829e75a29f71070cfe56ef619b786f2bb5be4fd8eacf6b26ddb147e9be0ca69aa58e7b9e134eee83e6f2ce35163cb3bd5a2a74adbeb3c697b9d945b21e5aaf84f74ef238a732690c3bf3fd423f77a8fdceba55c55468c4d51cf49f23a455ea7cbeb3456938f470f91cf26cbeb5419e60d2cbe0cb841fe9e1ffb769b937c724b9646333c69dd4f867b632d32d5f733e5b5598aefab776605d079b6bc364f31cce6f23a2740982d5c5b68fa83c716f26a9159e0f26dba16e8e0c869a6cadf4279dd595ee74afeb778ec40e5cd6476509b2e45521706d2c0d1a5795b795f2caff3e27571da89f13a1d963e9d2237499987837b7ebd593e3f02dc735d0bdd709a3f2265ee22afbb7a74de8d4e67b6bbfb5dab96c03652f92e997d2d70e3d722db95dd42a5c51e1edd66c7f46e9a0fbe557aa4921ff6922c6ef330be4deaa0d82ef4bc7724b8e7d75b63e1897f3bdfb654b6d5073ce7df1e05eef9ef7ba6a86b094bb4592ee70e10f61d326c59feb754e9b99825e63dddb7fc7a3b7876bb94f78efc6e094bacc7d47b3c6e9bc03dff7d518a712bd5e8e784db6a42926fcb587cf93333660f4d5e90cf964a7dee64f179eb4ef9fba0d837910af96c997bdf46e922eb83c85d80cb5dae7ead553d5a2eaf2b99be9e5d0138c8fcc82a6261f7ec229fed9d24ac52f9ce2a4fbc17c4e4b4e8227557e5d86a169f67bceff267aa2daee2bb5e5ed7c5de1da3d854c96bb5d4ed6e1657363bfdddd8737ebd47fe7e34b8e7efed1393dde909f96c8347575d7aaafea28abbae0c486667fbbaef765165c97e2edb36f778e42e67c9ed767f57ce0e4ace01ae9cb60d7dca39d095334eb5810e76efdb2a7d643b991d22afb29d16b997c595e54c95e9f701bbb9173ce3ef1ee3e15b9b6ec9381ee1ea59d3be97e52193655b4dfb8effbba7d4e3fe585ad5b4f90e07bff1fba920be307ec97491650e6b554b7cb605eff1ebd101e29fecb7c6f27a9c8cdb032cbecff3806b2bed7b2491753cd3da6907c5ed04f7f7762acf9c08e2c4c37830c6bac696645d107908c45bda55e461f0ec58f9ec91d833218fff76b2277d8ef5fc7e0a90a1fbfd54a083eef7cdf2f971aeee1d54da9ee689cb211e5d1f6671e50c3b3d31aee21d18f6f13ed2f20cf9eda39eb47c54a6cb1749649da94fcb8ebfcbfbb33c6979b6272d1fd3a4e539f2b7c741ba65c9674f68d2f749c0e131f9db16f00e4c0bf5fbb940aeeef7f3800ebadfcf8f4fcb4eaa1d77019296507f98961726c635f28427ec135248cb8be5f52279d5b57be19812977b620a722f95d77d92c8ede3917b520a722f97d7cb92c8bd82e9f5ad4b78cad6d558cd532cded6f9bd63b7dbbc9244d6954c6beb9dd5b8c1552cded6af66f1b6fe344bb4f56be46fcfc4d29fc9ba3ef22c4bb4f5e7809d3c2d7fbb16bc036d55fd7e1d90abfbfd7aa083ee773556216dbdcb04f9fc46a6b775a83fb4f59b58425cc53b306c558f274bcb9b3d9c15dfe7597c3fe779377dba78db3ffbb1e475e32daefc71aaed28fb329117a4fc93c13dbfbee809f74537dcae72fcab5b4729a7a57c3ec47dde55cd31dcc6b4edadaec59ef76e67f1eda93b3dfceff2d8cacb317bab89cb1de03718b757587c9b44b5715f0569f50a78a66b73d5c655e9a9da6e8adf4b52de29e09ebf07da54e3643e61f7c9eba6d86feda679d2b725d0e301bdad085d419af96e23a9383f584b9cfd9449afb1f832e935d70eba271b9f957574f7e392bcf3b8bcaabe88acc322afb3f8fecbebf2f727e5fd1b9edfdf90bfab791d5e5667003d946cfecda929c4ff297995e54ce44df9ed6670efc4adc705f2bd67dc3047dde15e7b5c21afeaf7673d725559e9bcb3530fcf376b53d08fe2b715326e6fb1f832e32d37ae3d555a2b5bdebb16fb7a5e5e551f52f665236fb3f871c5b7e5efc9c6c36a0b2b49bc22efb2f8318877e5ef2fcafb77e4efa7c9fbf73defbf2fdf97793ff29ee7fd0f3def7f28df97e558e483f8f7d92b400ebf87e5981aef790d3cfb403e7b3dc6a7972c77231fc587cdde60f1fd43d507fc58be773af80e3250bfabf6f6279e387d2aefcf04f7fcfa9947ae6a6fbce4f95dc9fddca3ef9bf2aae2fd762c8e3bad05df009eecad7899496dfa5529e30bf9cd59e0deb1e98ccc2432d4b75fcaeb5752c6d9e09ecb58e4ea9b9124df46bef6f0fb123ce7d76fe4efe7807b2efb8924fabd26dffdd613b76fdd6f7b374ce1dbefe4f57b4fdcbe9732c6b971eb5d984496ca4fca9e551a2a9be5f27ed4a4eb8f203df9fd0f52872de09eeba0fa78ef33bd6d7fe7f9fedcf8effbfc2cdfff405e3ff4e8f63f163f96f6b1bc2a5bd6d824fbd4a3fb4fb1776af4fbc8a3df4f1ebd7f96e19e07f450cff9f517165fc7fd22bfff4cdeffeaf9fd57f9bb6eae3e591ee924af9fb33a97b1ec0b202b95b1a06de4f5cb00617e0564a512666779fd3a4098df0059a984a9c67abf0d10e67740562a61aaf9c11f5d1be8abc6a45539fabdbc2a7bfb8db976743eb857692aeda8af1a435036fc7372d991dfa5cc0bc03d2633595c944dabef7f8b7d9fa5dadd7fc8eb5ff2fa67ec9d6c350fffb7bcfe2bafff807732e4b3ffa4ae7f48dd2f04f72aede537fd94ff0393bfb567a2ac1920e754237f4a1917b9ef0f38295ec788d251fd5ba5b3922fe7dc2311f77e888c7f242ac351659a6a8bfd92dc3622eaaaea044dfc238de455b5fd75ac87a5165ed23495ac329f91e1fdc5e2ebc626d23e0e07bfabb282dfff2ddfbf18dc737932af4564f91b51fae9d25ac748ced173c43569c79fffe7b1871652bfdfc1efaa5ce1df47e4fb97807b7e8dcae7978270d4737e6dc0e2f24c5471f3da85731d24fb959196888eadeaa823d3eba8b5cdd648faa9f4fa2af64d5f356ed8465edb4b596a7eeb5bf9bc5dec9bed659b23a2ca98c19ef4bf2c3efd075fe2795fcd03fcc3e2db05ff78deef10ff5de45ff9fee5ae7d446499115163255819c2f3a9d2b9532d3608df95756144d96fe7d8bb43a42d44baca6b37dca623dd59f2fc0bc394732049cb839e3ee4a9be56af24f2327cc8eb2daffde4ef6a2e58cde9f795d7fed24e1bb2b831a2a88a97a64f1919508b1efcb781b5c407ea2afb10097950e5394dbd91b4bf3a08d8018f4b2329f70a70cfdfd7d573c9ca5de58bd783c5ca6e597f887aa5aee5b9b225e95b1b6dcce2f2a7b877d2637ba9bfb26191df9285a9f2bbbc469b48b957cae743e2c38f368dc98baa36f848f00eff56d5cfdbc7bf176dc6e2fa0051a5d7b131c6ede4185364a827dce6f2dbabc03d7f4fceab445bc8dfaf06f7483e57654bad6c92d98fe29b1d204d955d0c0b20439559fd03c8f80dc84aa5edabe29e1320cc7f80ac54c254e5eef00061fe0964a5106684db352c176539a8f24c94b70bc07842548eef0f537946a56f6ef2f022d2f73aa2fcc3c7c4de8fec20af63598d1d4f50fa8c96e16df1199e6a57ef28afe3a5fead587cfe54be0449c60c6b0b2b29df0992ef3bc09ef8efb24d116dcde2daa0e2de896f8e1c3388e4c9eb44f99da64f1e9924afc9eaa17c7d3a476af1b78d4c46ec43b607a36d3cfab771f51fbe48be3f455ea726d16d9a7b3ff060f79afb804747f96db4ad27acb6322c551f4caf458ee4136de791d3ce9593abe68d66c8abf207f6da8692dd087ca37cf966b3d4da19ed597c3ba33d6e879139f1fa6b1916c86b9276468dceaaad5f58379b486aef73117b51e549070ffb0e2efb1117c8f78b6a610ff3e5ceb5d86e710adce6d5c28d3f93edfa684716379f21ee1ddd47ae897f2f22fd7823f359dc5c73cdefbbb2d85c332cd36a8b8ff203de5d5ea5af6cb4138b2fd3d4385c007649d358ad7dda23808c3de555faef46c1d85b44faea46c1d85854f56d40bd1195ed5a5dbd9134ec45f25a22e580f1b0c862f90cb413a25d346177f519b6ec6747bb796ca89b6b43a3f770658c5663154be477536bb189328ffcee52fe35e09effaef1058d2c95d7f2781971e3eed24f34da23f67dcdd8b51ab35e1efb2d5fb12a05dff1fb65203e700e3e55bb5927e5f5f4f0ebe9f21bb345c6ed110fbfea5af8c9f7a2db82f75458bd805d48bfde6806b0815ee019bff696ba5d0bee1ddd76c8f0c8556b76ae0361f36b5ff9fc7a700fcbce7ef2f77d3df206009dfab9618e5563622b3c61f467b1b17e87d7d80f3c1c401b3bda073c5332a0afcb3a70e5cfe598d29837e2c3ac2d0d74cfa26a7de9e1e09e5f333de99f2919cbf4df41f9fbabf1c5039287ade42adff1e8201637c71a557de895401e98bf4f393e6afde9e1e01e842be4d7321719517ee360ad42caf947fae746a43f7974880cef4670cfaf8363b223b25e8b6e0f6c42d9e250f9fd4d1e1bcd02ef668177f9359bc5f97e887b27edc6bfe191adbe53be6f37837bae97f4d38be6c8dfe53a989a3c0afa4fd11cf08c5f73e537b7827b47871ddf71ed67fc0d485823e477b7817b18e648f9fbede09ec7ad34fefde828f9de1de05e318672eef4c8f1e8151d0de2a8d6b302df71ad0d4aae6a2c23aafc42a52ffc8e19f171aa4d5ed23a56ad2350eb0d9e9361aab5b6fb817bfebbaeada2932f7d3c22b20e8a8ef5a48b9ac778abeebad7b4c7ea506ed5c47f831b97a11fc87bb9163bb2cebfcc88d427aad6ed1e01ee1ddb9820fd93f326c8f7e51a8b885cf71c91eb9aa393e3d9d7d8ee14604b93e56ffb8267aa0f077cdf22ca7f6bff58ba4d56ed029577808d268b57e46019ce384f5aca3e7c7447a08beccf47c77b588c7759e45de2ea3251cd7d1f22afaa5d7518d0f705bd1e914359bc8fa857cf9d3c7aee24af13809e322da2933c7a4e72f59c38cba3a7fc3d7264bcbec6a7590a2c22328f47f3c03365d3131399458e02df8174a8f97d1390a1fbfd6816d7bfaa792e7d39a3ca47f83670afd2a619f8770a3cb48c643f20aadaba67817b27edf355df58b6b944db381973f5beb24715af6952fe5de09e5fa7b3b8ba59dc73d9aa7e9dc1e2da91e2ded16bf2688f9c991e39aa4faeea8f59f2f7bb3ddfcd02f1e2bfdf236d6d96273eb5c45bcb42aef988c8f50211952f545c66b3385f98a85c5f2d6c9e3f4fe27b1d51633173e4bb27837b7e2d60f179b9c0e53645aed99bf28094237df8232779e4ce63fabcbc2bb0bb79203ecdc0ef3ef2b2922bcab16476e58d5fa1d4ef1470cfdf3b3516c60c3527aeded9d9c3646797c954e9ff3d6d827c5ff9bb9e0ee2a9e27286478f228f1e724c48db873d0dc8e3efa8feea2e2cae9fa965adc2db0d3c536337b5f08faab19820fccf4c2dde91b3017f55f6a932652ed049ae178f167bd2a4d84d93691fc4bf57ab7eca87708b26cdcef5e83edfa3fbfcad33cdb49c94df9d5a1ba7fa58bbb3f83e961ab7bb2016fe2ce96315513e53a7d421fcb33de1eee10957aeb9882e88c98e5c289f81b5eb51359eb817d3f7ed168277178277f975118befdb2d726d6ed62d1ed9eabb1216dfb72b917aa9fed662a6efdb2d013a2c06cff8b594c5f7ed4a5d1d664a5ffa59c7216195b1f8f6409927cca52cbe6fb754c66d42fcfb5155dfdd01ee156328e74e8f1c8f5ed1e5208eaaae3c2bb95d28ae3575f34216d7b79bf1b7c7ce6b91a7b533e9c7142d077674817c06fceaa38adb0ac48e2ac0bb15e05d7e55e32007817b875141178f6cf5dd2a8f1dc93192889a5f588dd8d11aa0c36af08c5ff7f1d8d13eae0ebce8e12ce7fc808455e9b1a34a4f98551e3baa92727f887f3fba16e8a6fab9e5f25a2d65dc0bee7918caff4a8dc59d03ee1b26ea1c5d0fc290fb05883228998d291fab91e01ed8d86cb5266eefd4e4c53f6b14113e44d358192b616b58967066e3a36fa96e4da8beac7d5342e13f273cd218df9d9007bb966d743e2dd3ed0c384fec3bb8960d6739da9d01bb0adf3915fa24f17789f346b9107a5f3421883b1382e0ca5538ff95816d0dab9ce753c5ae887c63c372e797a16c9673e55f2d72ba6b0b9cffe2a5cc7782ad702ad33256ecfcbd46c85be4a89df8666d51e25b207abf99ebc87477685ce93c5140d738f71542c322f1f73aa16999d07ebaf36cadd82f72155bc6263ad70d22b4c4b8573affd685592c91e975d46fd4883d77b78354c994efc4866b9f256cf1ff52a43e5284a36f7c9fcc870db384a7dd310929f17f0cdd42863beb4d973286096491b867392c4bf8f3cd4d20e83f8e8931d4dbb7cb7b24cb4d1a173d199edcdd450c62293cec96a6539f2f7aecd246f1511bceb2c4147e8f5aa2960c2c9797293c64fd44a151a386d95c512ffe880ebfd8e6b42844fcee7be5e23dff09d058547ef109205c9d8a9d52ad10549ef384f21542356f64263bcaad91e5e14ab9872f17c6adbcc4f96285f88abf5522225d2192c9fd252195b3b94a4d44422556c3b545164baaa82ea9c4284671bde4146c83e1e489d5b42616b1c4ca126dab2e494c1a0b4b34ba1ac89697ca74af3fb9a8d3797de7b5bee7d68255c5277ff549237dfa3417e9539750b1146aa04ba1e66167a6da6b8f64e9d3a2265eb1f4e17ff40c5b22365e9b0e18c1863a822dc2b671fedb6a21a5c479d73f43ee8a39d85b20e901b6468cb0761530848d3408b339c2361aad58a3661eadb84288e4c6bac469593f5575dd8c9bfb5976f62068841a77bba435ad5fd36ea2a3279c761791d2533dc822a7ab30d3f98d575965a239ca9f173a124b9cb0b9bc3c1142acd719ff4572b2dceb737b2f592dd50e826a3fd01f0eaa1946bca9867836b7d78e1a3310659c3733b4c33343332c9b750a9acd9a6392b7092ab90526b97350c92d31c95d824a6ea5cb36629ddd1ea1649bd8c08bfad744e7dbe54e64d689de74b5f3bd6ea0267976e99a7276e926b24b06d30d1ff9d308cb26ad7569c71f76d729e94dba6e78d2b5c104f70828b82d666d3d835a5b3b4ce56d03aadc1e53b95750953b602a670454b92326b87740c19d74595a184bb87d4eb70bc6e5f86f49708fd25e293793fb32ac2b985c072ccb6ea34b1a5e06f36a3568cdd659973c6dc34e9e7c51922dae63f2f4e766aae18027d10024896ad3034ba22eba24e2463e10b31c6f12f5c593a82b96fe996948ff6e98f0416910de1dc3b25d1ab0f4c0341f9c06cd7b62c287a441f8b63ae1bc21b83d4bec8effe7fc4910de1217de0bd37ca846f36d67457d699ea113ce2b36ee931ba862eb8d49ce0e2ab98fae841355ff21a4255caa138053c51863192b70ca97bd993b73a3c25d2d666db8466a0668ae735d2ab4e0cf97c8722a7958c94bcf61357cc0189d68c14c66a94f63d2c782bbc44745e93d5c94dedc9ee739cfdd09cbc92205ca454843b5daf010b0f7158bd98c1fb7562d52bb113292982b42378b0d562ff5c54a9a119a92e60d5d3196a4a4e98765d99141b36c7f9d649e6547696c359bdb2af7016d2e5aa109e1e4e2e10cd0150da289bd6fbd160dee981397b754ccc9bbf2e6307e62e07a61aa2b1c035e270d874f4c543a619449230f521870dfe59e1ec011e6fed16787b1223b8c4f213b50c60acb00037596c407e7f82284846924de8c9bcb0a1dc90b4536dc473ce694dcd42d17af96b37d9dab9a5e4fb0b726b8bd65eab4e1631e7cc940ad9dac0eb8e04198e01d030ade0ecbe3e383e6f1c13ac9bcb4e1aef8415b584330b52704557b7bac44cdd394a87f47fc95a84331e11335c2ef89fa139e85658549a9d84812abcec604e7ebf2587f11229fe7c870fe5fed7cc1bb592522f76788ca30561a643879bddcf917afb08780f7573b6fb8ee2c7ef41ca6d3931bc5e4a0469183a5db144dbafdec33dd8663c2a76a844f6be04f782e9676d37469c709f27a83374b96cbba2dbe34cc108e4519c297ac5a8cd7978a94ab12e99ac1f673ace500e7bad6793b43d40315e2b70c71806ea5286bfda4e9084cffe93afd9b03fd0b81867e421c89955b3334e556c467b9354a279cbf3f93210d1fbe38c57fc36734866db60e5b4f91473688966bb578bf481840594d5bb9344d15e4188d5e5962687215abcf0619ef2d70cf3bd72b24d644e161c77c3b8234bcb897aeb7e1a5fee81b5e7c194fa6d898270cedb106d658ac502dd414aa113f85ea0e585ed819cb0b73eb9417c6e96c4e8c5aafa9579bc373d45c219be7bce00d7e3ecadbc0dbfb1723ceb9295856ba741c2c363dad1207a4bbe4aa7861caa75d178393d05df8224be8f344b1c813616a8ee58b1db15a7b9ea6d6bea591bf5a7bbcce64c5487e65bd9a6cbe901086d9ced799ad18851f9942e2a753cf5ec241bb4a14aaa5b250758bee5e62a7dc4a516d9639cf79c10b7f1f2c76a9e5eda52982f74a419ec7af44f47b3123df451879d8f1c40c7d27ac02d8555301f86a554fc0b2d06e9a2cf4b7cf2c9487a9bd7b50b527626a2fd0a8bd7f637f6a4fc284efa1113eab893fe1f93ae1bc60e62bc182f410276382f932bc84e6261f5754fd84259e9ee262d15750fdbf52f164a3f37785f36c89109121dc75952f911f2da7606c176ad8b6f5c9762a86605140b6d37482b97996a42238c9c4fd749d60defe5acc90f6175fd0e8bffd3503c35eaac17e814fec3375c279362f0b9acd6761929706953c1b93bc2ca8e43998e4e5412517608958ae4944ee4ee727110b31e17b6b8417fb14beb34e38cf6f2b7465537fc647fa628d54b7fb141bd72871927fad2879329cfadead734be3c647f89847b9ec34fbc9e773313d2b747aba6bfbb8c7246f53948831341e62015fc0e023d4220cfd4a0dfae37ca22fc684afd208ffc2a7f07918afd53a5e5d6a49d752e168177b3acc79ea87e37c4c9b353a6df86d2cddfc84b30b86741f0dd22dcdfd21dd158b44a52e12bc4670f18d7590cd11037e25725de23a518dfbc7b81ba641954e035eb2cdaa691814d6b159b03b8674ad06e92b3e912ec04ae4eaa025f21e98daeb7485660b7f6aef89a9bd3ea8da7be924f356c70686b43af8b661fe5b1d0bb170f6c5c2d9af4ee12cc248ed1f94540996c007681278424b7f09bc18137ea046f8fe3e852fc1841fa411fe884fe1a598f08335c27bb4f227bc0c137e884678a94fe14b31e1876a849fe953f8324cf8611ae157f814be1c33f2c3831a7939a6f6111ab53bb6f6a7f6de98da4706557b85467296f0e30cd3abd6ebfde4cfab966f6797daaa05beb993ce9bb6b6f0b121a50a5dbaf01afa689d4a3eaaf29598351da3b1a64f7c66825598f06335c2f7f069aaab31e1c769846ff2297c0d26fc788df0b66dfc09df074bcc13022666252698ef6397d0161c22ac73b5c863bc395f26d67faf12ff5a25b63d291313d725c2f663034e6ae29aefe19021adb752da748563ed439da77eb4aec2b43e49a7359f79e583b8b176b3db9574bb213abfc20c3650b6ba07fad26b2d6603276b6ce0169f06568d45fa948036b04e57ce0a97f672d27216f3232d1683f77ccf95a5c25256faf63a4d5e269f9a7299bc5994c9dc5b894e57acfc5eaf4b6edeb63e8d216d6bbebd6273aeb2afb6f5065d38dc66cfd0d86caecf726b2326fc4c8df05d7d0adf17137e9646f8e13e85efa713ce9b357cc3bd40cd9afd31b5cfd1a8fd8c4fb50fc0d4de1254ed0331b5cfd5a8ddb1ad3fb50fc2cab6f374053a2f66531914c91099b25a5450bc8a2964eeee00aeaf5489f3b45478512d17f785226bf291c5c5a20270b7425928063f9689b9c44ae7a9f2badac8dc65a319a239e66e0c95218a8252e98bb7423ca9126f958170f4154eb9ac386115e57774f3602c89ced724513f9f49740896441704ac7e0ec5045fa84b7beecd50ecdcac894b173fe11d8615ac1761052bdfe3cfffa0c5e158bc2ed1c5cb9ddb5423a5aefdeee9b359740496fe97ea4a169fe97f2426fc328df086edfc093f0a4b93cbb134b9a24e69b249170e2ff4ae4cc58893ccf31d8d09be2aa0e063302bba3a60b63b16137c4d40c1c7e904f3b4e747e3787d3bb9003fbe9dc76356789dc60a87b4f767852760c2afd7089fe553f88998f01b34c2d7f8147e12967f6ec4f2cf4d75ca3f27634673b3ae4ce33ea70b9dfff840718528ad551d5bee343bf92f6b445791d7877e2cec144c8b5b745a74a8d122dbf99bd7bc7c6ecaf50eaabb0ea7623adcaad3a1bdd461b8f3ff12d119e2df6c70feaebb069b310d6ed369d014a4055f43c45b467e423b4d171a37dfdb35e63bae833ff33d1d33df3b30f3bdb34ee67b065634dda5299a1af82c9acec408ddad21f4bb4f426761c2efd108efd2d19ff0b331e1f7ead2d6a7f073b0b4bd0f4bdbfbeb94b65bb0ecf040b2a22927cd45d3b998160f262f9a86a5b1683a0fd3e1a16445536e1a8ba6f3310d1eaead68da4584e76fbdc30598f93ea231dfa69dfc99ef8598f93e8a99ef637532df8b30648fb360cdb18b313a4f68e86cf649e7128cce93189da7ea44e7522c124f6b22f18dcf485c86a17f2620facb31ad9fd5689dbf8d3fadafc0d03f87a17fbe4ee8afc422f18226129ff88cc45598f01735c21b76f627fc6a4cf84b1ae1993e855f83e17f19c3ff4a9df05f8b19e7ab2c49b5363ccdd5da759816afe9b488556b3969acd6aec774785da783aad646a4b15abb01d3e00d9d06cd58ac5a9b2c26bc56fb1ca9ba51171e37e0373506fcb34f03be0933e0b730037ebb4e067c331689773491a8e8e22f12b760c2dfd5087fc6a7f05bb1e47e8f05ab176ec3b47e5fa3f5b8aefeb4be1d13fe814678a94fe17760483ed4e5003e4d9b7c9c3e712437d898bd3b6e6af628fd9d58027da449a0b53e13e82e4cf8c71ae167fa147e3756647c8215199fd6a9c8b8078bc4673a42ddfc45e25e4cf8e71ae1bbfa147e9f4e381f06fe22952223c930f0fd1ac1596267b8fa99a34fdc7929bd73f45fea7869e7e8bf62b5cdd107d7159ba37f00b3a5af75b9cda72d3da813cea772bf6101a7721fc2247f1b54f2c358fdf05d2af69fa4d07c4467ff62f3c2a5f562ff41f6444b6ef9dfa76cf93f08cbdf2e89e507dbb94d9f128f62c6f36350e3790c339eff05349ec7b16cfa93269bfed0dd5f367d02d39a9fee9cd024e25b22e489ee50995896a25bd094219a4b193e7dcf9ec4f4f845a707df53c59ffca730f9bf064c9da731c1bfe914e7f653e0205307c94c1146ccdb65cb7db7c49ec1ece2778d5d94f6f06717cf62c2ffd0d50d3e853f8731fb3360623c8f69fd9746eb6b7afad3fa054cebbfb19456fe106ebb3bde9dd44fb45ec442fe4717326fb9bade3f5935272664d56cde53e064dc52e6d7ebe4254c837f751a74d66a304bfc6badd8e9c0ed9dd46d7ddbcb982effe974e99ea22e895beafbd1e915ccf0f8f64f093df96dfd19deab588479391824bbbc86098e0614fc3a26b84140c16f609c1b6a387fe393f39b98f0461ae137f4f227fc2d0c49e38048ded609e6a54f93540427e9b4bda313ccfbcb4d23487fb959a42efde57731eccd35d837f5f687fd3d2c122db048b4ac5324dec722d14a1389277c46e2034c786b8df09ffbf813fe2166986d229ae2942f2e9ecbe07636a5a22fa00af24c36485478abe4dff1ab2532c49d5bfd0c11db74f05f54915bc52ac4461e550c2e577707bff8c2eb352c7e6d830a870f7ab955ecd29ae23c4314e6a53e5d103fc258b4d5b1e01b0fc23df1dcd670ac828d2d1d5f2f34ac60d0b977b9a882326a9590e3bced7785c9c798c1b4d3184cbe4f83f944279c67a9f65896ea50a72cf52916898e9a482cf71989cfb094eea44b69be3a4a3f94bb400e02f3153abc17e46ea5942c4d3393fe3a48b8cdbac3bf31bb8ecf01ab8565a8a1def8dfd60abb5aabc9458b8586abc140b12b7bb5ec45fbb1afcf75f4f8a10edb44821feaf00526bc731a847fa913ceeda44b24f896c35f61c2bba641f8d73ae1fc94966e8ef0de1ae1da0006e0017c8305d03d4d017c8b256c8f3424ec7798f09e6910fe3d267cdb3408ff012be77a69cab971fdfd95733f62c23334c27fefe74ff8ff302cbd35589e7de6991dfd60f909d3bc8f46f3937c62f91913de5723bcd8a7f05f74c2f91863bf48c031c65f31b5fb6bd47ec1a7dabfe984f3f707a4a1f4fa1d133e50233ce253f81f18964c5dfbd827963f31231f9486bcff17267cbb3408ff1bc3325883a5cb007f58fec11274481aace55f4cf8f66910fe1f8665a806cb2c9f585804119ea5117e8d4fe1114c78b646f83d3e854775c279a9352c68a9d500533b47678703fda9dd50279cbf3f5c632a7e9de21b619ae7eaaa669f9a37c6341f9106236f82693e523796e553f3a698f0511ae10d33fd096f8661199d869aa239a6f9188de68ff8d4bc05267cac4678a14fe12d31e13b68844f1be44f782b4cf8385d05ea53f3d698f01d35c2f7f7a9791b4cf8789d9dfb14de1633c59dd29043dbe984f3aa7f421aaafef618963c0d96cd3eb174d008cf12a725f20d17c3dad9681e8b1dcbbe40fa24f8dbdd68a266bc2a4b1cccd835211ea98436c991d7948be3d0466fc758a9f3ff49ceff0d0733563c98619b79e747784bb56e61627e0e1d310398ac31803db6f367009d30e1537423f63e856f83099faa117e8b4fe19db14c372d0d99ae0b267cba56f8c13bf911de15c3324383e50d9f58ba6105dd4c4d4117f559d075c7349fa5d1fc6f9f9af7c084cfd608cf1cec4f784f4cf81c5d4fc1a7f06d31e1051ae11b7c0aef852568a126411bfa4cd00c4cf39d359a6ff1a9796f4cf85c8d707ec89b1fe17d74c2f93877916ed49f8f7d729fb315c27563bd986b8a3984fbdfb9b62f167ab12e7477ab10d74dc89d5fe3dff809af1f86729eaebbe8339dfa6316363f0d6da30198e6bb6834efe7d3080662c277d5b5a47d0acfc484efa6117eb84fe18330e1bb6b84bfe353f87658822ed02468a9cf041d8c09df4323bcb94fe143302c7b6ab04c18ea0fcbf658a6dd4b9769f962e022f1de9a9ac2c24f961d8a4565a1ae68f519952cac7db248db3e7962a29ff6493696c22569280f866163538b838e4de5606a2f4983dac331e0a569686de6624cca823219a193ccdf5f1a09e6513412b3ee651aeb7e25db9f758fc2842fd7082f1de64ff8680c767950d86330d87b07843d1613bc22a0e01d7482792ea8d0f4a785ffc7ca489d0ee5c312749526413ff099a03b62c5fa6a5db1ce0f6d8eb5fcdca36b0732ee65115bd2e7b6d494ef06f7e688f983b85e1af0b44c7feea5e3316dd7e8b4e5250cdfd97363c2199daa3de927ec9db012729f34949013b034aed4a4716e8ebf34cec38457e986297c0a9f8825c95a5d92b81ed1ca44d43acc0a310cc54d68a3b85f2c0676d632bf2b01266111add644f41a9f11cdc784afd3f5227c0a9f8c095faf11feb34fe15330e11b740dfde1fe844fc5b2c5c6340c994cc334df57a3f9ae3e359f8e09df4f23fc029fc26760c2f7d70df6f8143e13cb7307e8f25cd714f2dc12391ccd0b47fff96e1616d90335915d9eeb2fb2b331e107e9fac03e85cfc1841fac117e9c4fe10598f04334c26ff029bc10137ea846f80b3e85ef8c35f30e0bdacc9b8ba97db82e3547f853bb08137e846e28d1a7f0624cf8911ae18ff8143e0f137e9446f8173e85cfc71aaa9bb086ead1756aa8ee82154bc760ad33b5c98d6a35d67d53975db1b08fd585dd5a86cdb792745bb17cd6ada24eedc2ddb0a43b4e9374b78cf49774bb63d13a5e172d7e5675ac79be9e9578d6db790faaf713cd05982627e834e1b77935ed383fe1ec81b5274e4c43337b4f2cad4ed20d2b8df297567b61d9ec642c9b9d52a76cb6100be7542c9ccd750a671106eb340dac2ea3fdc12ac122713a168933ea1489c558386762e19c55a7709660d9e36c5df6d0da6d924c518a493f4727bd494d31905587d999322cd9b76892fd019fc9be14137eae46788f31fe842fc3289d97ca484f1224cb31c1e707145c8ee1b8408383f9c4b1b74e38ef0c5c988ad69b70c12b301c17e9ac911b7b962f2a1598fc8bb14a2f7103aad9a2a3a30e2f8dfde2afd25b896972894e132e81fbecf8b58255582897ea4269ce98f6500b3f21aed68498d5cbb98df02380c3f25c2a76eef8c953fe3d962e8bf045b6f1604491adf52bba3cc2fd8a3a25c42c59f8983fd11a5d5af1db2b227c8150bc4a33661fd2644b8f67a30949d3084f9a7d3063b852670cad98db9075f74fab104d693752e53e4dbd122b8aaed214458b76f25714556191ba5a17299e52dcdf603973b77853fba9948975b6ab588093bd303dae49d6434984bb8ab9ab6bfd845d8df5a9af0ddaa75e873599af4b439379bd4e3827737d24f8dcdd06cce86ed018dd9009fe8c6e2326fc465dfb35cf9ff07d314bba296093603f9d605e34df9c8a605ed42182f7d709e67b6fdd928ae01f708d0fc050dcaacb54dce263fbc1ac0227c3fba1742016e66d78c5ecbf6b7f1086ecf680c80ec6d4bf43a73ef7bf8a5f57ed9dcff257fb1f82658c3b3519e3099f19e3509d705e78dd950ab324d3ad8761ccee0e98e30ec704dfa34b0c5e54aae657cc2d2d48721c8125c7bd9ae47866a2bfe438128bdc7dbac8750399530d1bc5367285fb4ca815f7ee66ac7ea27b14a6d1fd585b408dd4958b131a794b7419e35e80bcb556f711c34d981e0f246b0b0c4bcb68e5d158d80f6245a6629027e6d9eb324e790c16e643ba303b8230f561ab9691bfe1bd63753d8f0c1672cf6392685b56d6a1e7f170842f328e873514e9773c82f43b92858ef53b8ed371ebcdb92d0c919bfb9edba72e12d385e5ce9302b1e786bb8347551d983e1ae1bb1324b624f91f3dd9c704d9be0931afab7e18f5e3b13cf3b82ecff03d3c17b07142728590bea3d3f89dec101d2ed6aee4b2f1cedd5ce7bf02e7ff712c0bbc39de21e496bc0bc0b181eeae377ef2d70998c64fe834eea1d538dbf96fb4f83bdbd1cbadec12b5f5a3d5895815f7a4a68a3b738abf2aee242cca4f61555c6d8745eb2a3f3fd13d198beed39ae8feed33baa7600dac670236b04ed509e6db063e9b8ae0af70c19b311ccfe93a62d3fce1380d4bfde775a9cf6b9ac48da46b4bfb0cb9bdabffc1f4d331ed5ed069d787a9b6255ff4562a429d278aae0a514c7b0b7677d8b3481678aeefc66a9fc72e9d8125ce8b9ac4397caabfc4391313fe9246f8fe3e53fe2c2c23bc1c30239c8d65845702668473301cafea5afad3fde1d88299da6b3a531be9d3d4f85e5d6b44bbc17db24ab4822b8411baedc12af0ef601da273314caf6b308df689e93c4cf81b1ae1b366f8137e3e66926f0634c90b74cd3f5e5c445630330e0e500b73d3b785fa5b3a66dae6e0dba23998c5fc1c1e50177db166e285ba64e7b7ef441227055ebb62c6cf5d167cf9919f49818bb000ded5045075f4299fbeb7cd92057e02b8182b3cded3151eca7d463feb50e52bb35f820d5ebfaf19bcfecff9e367f0fa526cccfd83a063ee9761923f0c2af9724cf24741255f81a1fe58839afff183fa4acc823e09383c7715c6e3d3a03caec6247f1654f23598e4cf834abe1693fc4550c9d76192bf0c2af97a4cf2574125df8019ddd7018dee464ce56f82aa7c934e329fc6fd3615953be0826fc654fe2ea8cab76094bf0f48f9564ce51f82aa7c1b26f9c7a0926fc724ff2fa8e43b30c93f05957c2766733f07b4b9bb30957f09aaf2dd98cdfd1ad0e6eec104ff1650f0bd98e0df030abe4f27988fdcfd918ae024b390f763ed813fd3d01e7800338dbf829ac6835827ebef809dac8730d0ff0404fd30661aff06348d4730c1ff0514fc28967a7c0957b0e3a1b0d48b4483a5dee358ea4553119c24f59ec0203748457012c84f62821b0614fc14967a8d82a6ded358ea350e987acf60a9d72460ea3d8b416e1a10f27398e06601053f8fa55ef3a0a9f7826e1489cfa245f666f5318aa49b8749ef18528b54d262384eec452c2d5a064d8b977492790669958aca9b71c12f6376d93aa05dbe82096e1350f0ab58de6f1b30efbf86a55ebba0a9f73ac6a27d40166f60823b0414fc26c6a26350166f61923b0595fc3606639b8030dec104770e28f85daca7d52515c1497a5aef611a770da8f1fb98c6dd026afc01a671f7801a7f8869dc23a0c61f61827b0614fc318662db80283ec134ee1550e34fb1ae61463478d7f0330c47ef80383ec770f40988e30bac88eb1bb488fb1203dd2f0da0bfc2d4ee1f54edaf31b507a441ed6f30b5070655fb5b4c726650c9df614006a501c8f798dadb0555fb074cf2e0a0927fc432f9908099fc7f98e0ed030afe09133c34a0e09f31c1590105ff8209ce0e28f8574cf0b080827fd309e6bed539d1e0ab897ec7840f4f83f03f74c2f9ca8c5c47786f8d706d00494e05fb13d37e441ab4ff0b2b9e46a6a178fa1b2b4446052d44fec1248f0e2af95f9d6471004634d10d480b24891bd07f98ad8c4d93adf05158adadec90065b89e88473edc7a549fb28a6fd8e69d0be01267c7c1a8437d409e7c5dd4e01cbc54698d613d2a075639d709e8bf282e6a2263ac93c634c4c43b1d214133e290dc29b6129991f30259b632939390d29d902133e250dc25b62663235a899b4c2604f0b08bb35a6f2f4a02ab7c124cf082ab92d26796650c9ed30c9b3824a6e8f25e0ec8009d80153794e50953b62920b824aee84c1280c08631b9d60aec8ce0127d73a6382e70614dc05135c145070574c707140c1dd30b39817d42cbaeb24734de6079cd0e981d9db2e01edad27c662d7a02cb6c554de2da0cabd7482f954d1ee01a78a3230c10b020aee8d41de2328e43e18e43d0342ee8b35bcf64a43c3ab1fc66361501efd311e8b02f21880e5ec9280397ba04e301faf5e1c70bc3a1383bc2428e44118e4d28090b7c358940564315827b88f73bb3415c17c0a12113c0413bc2ca0e0ed7582f9edf268e26a0ff5272180463892a158062f4f4306cfc284ef9d06e1d99861af086ad8c3b0164745c016478e4e30dfd067652a82936ce8331c13bc2aa0e05c0cf2eaa09047e824f32d09d7a4a272922d0947622aef1354e5515866ac4c53661cad0b80af36ad4a854992d5a663b0a27a6dc0a27a2c968ad5015371072c15d7054dc57198caeb03aabc23566c6c08586c8cc7586c0cca62278cc5be01594cc058ec1790451e2678ff80822762820f08287812967a07064dbd7c2cf50e0a987a93b1e2e2e080c5c514ac9e3a24603d3515837c6850c8d33492b3fa39b791304f7686bbd9d4ed64e7c37484231e0e6209f5e151fdd9cba9e8802d8b9e8eb5048f48434b700696f847064dfc9998da47a541ed5998f04d69103e1bcbc24707ccc2737482f954c231a9084ee25f5d80a5e2b14153b110ebb41f17b0d3be33a6f2f141559e8bd5462704ac8d8a3016270664518cb13829288b7998299f1cd094e7632c4e09c862174ce353036abc2b567f6e0e587fee868d799e1670cc73776c64e4f48023230b30c1670414bc0726f8cc8082f7c4ba8f67a5a9fbb81756a19c9d860a652126fc9c34085f84151e5b82161e2558417a6ec08274319615cf0b9815976082cf0f28b814837c4150c8655847e4c2801d91a598ca170555791996192f4e53665c8e8de55c12702ca71cd3fcd23469be3756005e16b0005c81152197a7a108a9c0845f9106e12b313bbc32a81daec2caa7ab02964fabb162e4ea80c5c81a4cf0350105ef8341be3628e44aac7cba2e60f95485a97c7d5095d7ea861dfa3bb791b92cbc61873ce72dbea5f5c63a0c38dc90f280c38d62c0619b8478250f1d1b6aa8c60a829bd25010acc312fce6a009be1eab2f6e09585f6cc03a23b74635fbb9e58bdbb94e2a16b17c36d3b10ebe8d63199bc3f88ea2eb05ff15721068a8d8f96dbaf37b81f3cb2a6165fc897ecdb66e85377f1ba639b7c5d5c26a4b7cee5dba118be56dba581e59134bb5e1a59b67568a7f4f17b989c7861fb3e0e699e9356f4eae397a66ae8805dfe96e9d787ba88c4f99d829769213148f17971b4f2f2681bfef4f0f4c12df6eb3521cffb4d6c3140edb7979cf77e4f83d6f635f8cf4ed983dc110dd38f12db05d5aab9d726aa1631bee09c46e6c8be5713f5e6d63dfe2cfd3654ffb61b1bc4317cbf19e5842e66e3ca788145b29e2e8d5323e85e02fc9f20afcca4fccf6c76276a72e663ba5947eee7100e54c6dad1e3ce562bff889db0158dceed2c56da4276eb345ea2c9731e3771bea2d26076231b95b1793e3422ecf62dff0c3682a441dcdb7f89d220fc0e021a46ee5901d1e0b5e97548b56002cf5789b277d65db4118f57b74d4f352ca1bb3048d2a234ab583b1f8ddab8bdf2c42abe24ff711c1f058b92dd472117439db57e4437d495297543d048bf57dba58ef9834d6b8a673455cdc4399dc38aada983f5d220925e68bbaa7e6a158bceed7c56b37df2dbb22f14b7cdb4e27c17d5658530e543af501ef7d046909d6259d0fc3783ca0e33133943a9bba363f1c8bf383583bc59f0d281be6c78b2e1182603afbb5083f313b028bd943ba988d4562a636b277db266eef57f55ae6cb5c5c9a901a347d9423b1183dac8bd114c2d257a5aa7b7ce562e61eab99be981e85c5f4115d4cc7316cb7765d49111f8312f1cc8d1d67324da472a5e80df1830736a631569bb0583d9a4a9f203e5cd842982752a1d27997e7c365496abf7819e98bd9d158cc1ed3c56c52ad25676abd02bc0c4dd667ad6b49790c16c7c775719c8ada246ff12e765e5271750f5e9e2cc6aad431747859a29799ee9af0582cae4fe8e25a46dc7b58ebd404958292db3b982facbdbca6e4494f7fb82e9c8ec3383da9e334afde7a59c90905e7703cc6e1291d87893ef3860939e2042c864feb6238dd670c771116bd0a4991fa88ef89587c9fd1c5772ea16557d5a1ad910e022761049e4d571bc42ddbf2400b843e562763b17a0e1ba1f01bab29e28dc414f29639a9cbf513bf53b0f83daf8bdf0e015a8e6b456dc48f815c2afb7978ac8a13def513a753b138bde02fcdbc654f9e184fe039adb65e0a6dedb1198bdf8ba9cc0860adc7c9627ca844f6dd12dbf1756b3dd6bd8d7c1a16cb97b054f4d33376633e55b69662bff2799de46de074b58f4fc7e2f7b22e7efd58f2b1cf628732859667605abe927c04d34f2a14d529152873d89958ac5fd5c57a7bb40429aef1118025e1d29a517b5eeb576b5b9c759bc5380bd3fb359dde636a2d19a68b19503ec65ae194ec954edc568a037d6b2b1dd255069c8dc5e775ac9d9c3c8ff03e7fa1683b56695a0fa9cc98f036d7d234c6f01c2c866fa43212a09f01992e6c2f79691ee62cc8162c8e6f62e370a9d457a9c432ec3aeb5c2ca66fe9623a2da5d4f4ce67b9f950c5bb3ed3f53c2cb66feb62bb6bade94a3bfe4f3d33703e46e31d1d8dd9689da166c597d6f478798db846a367ecece1bafd82ffe627de1760f17e17f36f482dde7a7f8070e3762116b7f774711bedb31d502d7a38ee2c0fefa3abb7783f235fb40cf4e375f0373fb1b9088bcdfbbad88c08181bd753811f55acde4f57aa5c8cc5e383ba7b0dd4d6fb09b35cbd048bdf87a9d497d03a600c8bc453b717ee8ea0e8e608e2ed0eff253d16792916d38f7431cdf5c4749288813bf6b536ae1f849704c96251577bbc0c8bc5c7a9cc83fbf1d033a7eebf1c8bf327ba38e778e23c0fe814f33a867df264715b88caf213832bb0187c8af9aea5566f4d12fd58de4fcae6cbb842a8a5aec462f299bf1a78aeb082523112adbc864ac4ef89ba86e597771516b7cf75711b9e8612028f415dd3e76a2c0e5fa436db1b0b159610f9620cbcdc790f9bed0db3a5740d16c72f31ef11bd0d269e165f5fa3c8d76231fa0a9babac7da62995fe6b2af355fee7b4ea5ed25f8771f85ac7613b1f1c549aae92a361e9ea895d8f69fc8d4ee30109f9cddb2f8df9649589a7bcb44f4fe97603a6e9b73a4d472569917b2d3d5ef33562cc2b36b74d915f6ec4e2f21dd60af25702b8ed82c45f133d3c8b9d7faf91f6946a18b156889f38df84c5f97b5d9cfb7b2ccddbf2a1b3b39b313d7f48a5b506736ed0d65a5de7296fc162f0a32e067b30baf975356794ccc3065a60aaa38eea1b3f546ec5a8fc2f150f3915a29f7e702c66588e4b4fad731b16b39f7431dbbd9ed3db4f3ad73507dc8e11f939955101bfad90e0e3a8754ffb3bb098fe924a6985b5f95d2b18c9726b899fae24e35ff989c19d580c7e4d7d848a87e97f84ca8d1ff63c5d29741716bfdfb059e1e42dac2227866ebcbc3a4e12231f9549f257ecdb023137e9f68692af87aa5b6d7f3716ebdfeb321be967542eacdef63d580cff4825e7e909d7ad9d50d7b6ffbd580cfec4bcd092b5c8a68bf19032b6c1b1adc459dfd8db7ecb133c5d9a38ff45227c85fb64f1a63b63bd5a90e06ddd2cde5d8964d7d477436beab1a171755eec390f7da5a311cfe9c53535165fe19f5cc25f51f76879f1676084c35e2babf9c8520f37f7cb0a213966c555e29cf132e6ae66e2bb210c75dab6e5e22bb5ff416db1d0d5dd4341ed0d63577b9cf644b6518c449ac81829590ee9819cf4d616d3bf79aa0e94a91acdcae4711c5c476baa5d8b7f78680df436d439812cccf33add5d0173e4684184ef505f28bab5aa7beb4e20bbdb73d41a1acca5bad0b6170254cbb6567170185a27aeab30317789462573a7f42f717a844d1a45b3792afc4b898a9faec7e7e3a6cbde70b1f0cb5a6105a41e593148ff5142e272edb19d1e39312cac0121167ebec342919bddcc86afc8b501db3b0d63d82294d8ba8a2c57299a7985cc5d6ca21aac18c02a2b10f293cf15c22825427ef0a51a139b264a2c2ea044f4ebb88741812525d80d4d63c01a5002eb28b2ea4296cd62cb406c06d7b6450c5c434a70ed35e0b8c055ce47dc5fb45a3c2db502da221683d688dadae2b3e714e7eff21a67a6d5c0ea6c0097d93206ae312538bef31af7ac4eb55ab001de66502934a1ae5795d54d1662b87359892cd98ac4758d53f3568baeb94d089bf68d216c4a89b00528ed0ae246c06dc0d4a3470c53334a4ccd00a6d872731b106dda2686a83925a2c602519555c57cc35631382d28e174716e0a6aba4dde310a5e82f1326a95a8290be550bc0d007f0619b02525c0a620037235b957820d805e681703d48aba842a10939d3167513b1aa9f7001b6a1d960da95d036c00b4a5430c501b4a40dde2da531b44acab6bda4ddce1b854344ce70a0b2b15f656e104680344fe47416c4b09b1276371f0f82819df0d8967c76ad921b2bb7ddf118c9bb5a344d94a9669cade36ca1a739ee882db80ea0d50b6b5a76fa0aabd3ad5cc9e0d887247c51075086b8c8277b9a18b8fea76dbd478fdbd490c5c474a70bd40bd39cf91592a9b175b5797fb8d7e319c9da8877ca01dc24d6cf2c42010ccc276b4e1f607a3b3db50c26b096c31b6278bbb13940da06e01fd81ced41326b34569b6c2b3c5285f2c522942b201183f9e4a01eb4209ac39c896703f611b20bd02e6c5bb52426a24825e2c5eb0034dcb113134dda84b26653f310f6157091b404dcb8e81ea1eee5c51bcb375a965edb00a30a5db837e6692b7a7f245d036f7219f681483d693dada260b7f8a6a11786c33edd8e6ea554ef7bcdc09cf06709f0070db52f7286367daac956d7c1b102d02b5612f4a44ade310d9e922c0dd8715ac0c7a8714d7776cb51063f728d83890117b535b99eb32cfdbf165620c36d6d5b6a371f1c3c818ac3ef41e8a6effd0dde3cd3bfa6a93bfeb3da04dd6977a7e72ae933127b1d48f87b101e0263146d6a49147b877455cdd3df9fd51c7d71cb461eeacc11ad9b572b378dc1a8441ce2bc669deaf0158439059e719a4cc5aebd2cc941df3327d3b5565d6d1433733a55196cc805342993edcae337d55b399297729327db5a333eb549e64fa1aa1cff4d58fcc4cc98138d397d76ca6ef915c9dceb89f6466824b4d66d2e1cf4cad9344a676da3b13f168ca4ce2109689f81864d6324f975927ef97cc3a7af765a661ba22b396f54499e8229a4ca4db94890e2f66261d38caf4d1a0c904ab56323d237599b5b622339129c4d82244581dc5160f66f34588fd1bfcffbd3e309bd7800338840d9282db661b48dd66e396e12e07e5f568f26de887392d278f0e3d1274883fcf5ab5cd74da348b6bbdb54e25827569c1dd059c89334dc2996325ceaf00ce4126e11c6e25ce3660766a3b9370e65a89331be01c6c12ce1156e22c063887504f362f94554c3c56b7f9c45f23c3d78d0adf5850566e4f89af8d083ad677f0b6f012561a58008fb75b15bca16164e565686686ea2f6463d8483a9c2da9707604b6986512ced156e26c0470669b84738495386f03997d98493873adc47901c0996312ce5156e2fc11e01c6e12ce9156e27c1ee0cc3509e7302b71ee0e708e3009e7702b711e0c708e3409678e953857029ca3a8bde293f5c8e333fa083a94eda8505680def8684a949d24ca257264ddbb53ababbabb0b680e1dc84654202f028df731a6801c6621c80b01c8b1a680ccb610e41a007207eac5a56a3630d59972fe7ea578d7be11cc59a0fa194709b61d532398fc9c9e754c6d0bcb9f8530864956e9fc0300ee4809b007b0ccd4e6ab6db6cb5c90e1c787b5f6d28f4b93cd70b70336bb537db639a138d21abe0915ca1b809d4ea09ec258288634b69ef99ffb801de685016f74f8f0c82cef39006f2225bcce2c79db323e13930e0893c19c09b2f12493608eb210e62e0066be4930732d84391ec09c6c124cc2112232981301cc2926c1241c252283b93d8039d52498849e446430770430a799049370b4880c661f0073ba49306dece1f4053067980473b48530770530679a04738c853077073067d5ef30862bca3d9d90b0c4ec4b85f23780723625caed24ca0ae7a50a7155abdc0a193fca7d23e3036e0be5d2912296cf66b289623cb34c3e83efe5395a95d322ef40857c2098ad9c43bdefd24271b25fa95cc8b68c91babc928d5bf2497885aca03e337cfca17384d6b7890ae558607d85614c5ba80cef4e9ab9536bd39decbd754df8ee09b0ee4c89756042395a22844d91e399654ea9592632fd3a316151cd921deb496ac364f5ff07a0d29a1b4671905a63ca46940341c95a14c642961c362afcb1f8afa8f09d0d2cb19812dfb69a8a691e7397486f14cb8a5d6fb93231355c22ac75a910b792d6323753a17d09a09d57bf99dcf646feff40269f1f669d5fee28113b083859538ab0ce276b4a95813a7f176a0bcd13fb9bac96bb3ab8de1faec302dfff41ed75e1ee20625f03bf21b0d05de9777a5c287c9156cac04b44ab34247f24b29afc588070b730108edaea103e0c10ee1ed65e6a6b58fcc624214124ab6c3a837a7b415810d535cf2d9899edde990f024bdcc3a4e5faa42b81c8703e056c724f9370922e5d21c3f93dc0b997493849175691e1ec00da910b4dc249ead24586730780739149384957a093e15c0a7096d4673f3c7e9d1a6187916cc9402f506e2e3667c91fa10f1219cabd80552e0967039eecf0c72dc91cb0df66317ca5e62c04b0d119e14990a9cbc2400957a8cd62056caadc4f73a9f3d186307a3d64280f0156b994de4906ce892f94cba6268afd2d574851539c6b992322e1c0010bb2782b0073591883bea92dd7cf6395a2d4dc483b969e1fa16aac83ecbe3c8c199fb562ebe7aa1ad718b5a7aabaeaa67b7328eb74328bdd0ba02d37152d6973890ced25a030d89bbab9942f2aa312b90d7311b37fcbbd7600df0a4a7c6a9774ac2455315d48e9eb7e3955d9b92b68b45798e3b749e84f4c36cade02a05c19863f71ea9b4092c124db8a670ac8deab4c824968996430270198ab4d8249b86e8d0ce68e00e61a936012aea82483391cc0dcc72498846b7dc9604e04302b4d8269e35e701300cc2a9360128eb293c1dc1ec05c6b124cc2e10e32987d01cc6a936012f67fc860e60098eb4c824938a44106732880b99e1266064bec4cfa5ba54658bf93ad52fb1c0cc66da8cf05abde5974c252946c0e7d18b0d58d26c124acdfc9608e0530f70d63ea974fb885be6f2119bede00df7e94f8ba027c89abd4b8b0d82e9a367b0dbf0a80ee1f86e33507ba75395e1f03101e1006c2915b1dc27c80f040b39b4384a39a64cda1edc078fb41612ff44b7d7692b0a54936b9b623407b7038ae5c63c277e522cbf8fb8286fa2161adb788f91f41171a72cf23321b3c1a949e879ab3a2dcc6adf62603948785d5beacedfc719bd702e501a08787b3443f37fcf2912c6b9f02cac723c2580e90fa4cb98d6398ad01ce234dc239da4a9c0ce03cca249ca4e7f292e1bc1194959b4cc249ba392919ce3301cea34dc239ca4a9c1f039cc7988473a495381f07388f3509e7302b7116019cc7998473b89538f705388f3709678e953897029c2750772b79dfbcd0f99b0bc14f029a2b5473bddcc9801653011d07809e18d6ba3577a59adb9d2c6353c4472e199b7be8bf00942751a254c7d90c0fbf7f4eb6cfdb3a00ef644a78dd59aa5be8c56f4d4638a6fe0315d4ddc098fa29264225f4d224839a01a09e6a2254c2e16232a8bd00d4cd264225f4742783fa2a18553acd44a8842d5032a8cf00a8a79b0895d08b930ceae300ea19264225f4902383fa10807aa68950097d38c9a0de07a09e450975384b9c228ef70099e4fcbdd2f98fffdb8d08efa22e155b577065e730de8f5a2f8258e124c33a5626de2a66b12df84913612c55220c60b14438db9c7d6b6c3cf9f26160cfe784e376530f47d892f5f9ab01be2de66e5661a343d83b20939f5b9fdef2f1999c74eb53b26c7e3880799e49306d3ce0f66400f37c9360da78c0ed4100e60526c1b4d1ebee5000f3429360da78c06d2580799149306d3ce0b60ac0bcd82498361ed7b42b80798949306d3ce0763700f3529360da78c0ed2900e66526c1b4714fd95301cccbcdd86f8eb08549b6dfdc6230b7748539fbcd11f67cc8f69b6b0e505e19c6aa0e3fbe76366e93b6148c1f5d651a501b37f12b0740af360da88ddba5ed06805e631a501b37f3db1300bdd634a0366e9bb60800bdce34a0366eea5706805e6f1a501bb74f9b0b80de601a501b37f72b02406f340da88ddba81503a0379906d4c6850af300d09bcdde8885b04425db88e52680f7164abcad245ef7689d0a3103efcae6a75a93816b44058eff51e06ea5043788c51f02be56787ac02190b562e8ce8f2303a1a592b931cc054326b75102ef851604a9f988d8087722807bbbb9fb31d97856ccd3a084bd23ac0d5c660b57b0151ed7c57ce7b34a11a2cdcbc3fa8192f7ceb06d55ef8e5bcc2ac50ea07c5d2517b79291ae1e215b3c361f140377995b0c108ea79215037900eddd94685b276d6855d1a16b4e852e0a32fc3df5b99b98fdfbcf6f0b50de1b869732dffa6aebd9ec7701c0779f19558fbb78618db058775902a9657e45857634281fef0f637f076cd824714f6f1b77f5be1db43a1f3009678e9538df02381f340927e9b03319ce9620b33f6412ce5c2b71f603381f3609e7082b7116009c8f50e2eccb12b75c9dcc3630beaeb39aa97d710a9ccf4b191f689e2bc0f22d5839fa507af1eda820f7044da9474ddacf698c95de256d4005f5984938475b893302703e6e12ce1156e2bc1964f6274cc2996b25ceb300ce274dc239ca4a9c9f029c4f998473a495389f01389f360927e9ba4e3a8f1280f3199370dae986bb3fc0f9ac493873acc4b90ce07c2eacd9cd22d1e7a97624e7399f97b2f97237d152b19b6899d5b39bcb01d0e72981b6636a1f919cfa18a3275b5af32700f80225c00102e0642180c7deb5bd5221866fca9a2f662b63fbdb2e9407a74c141b0bad90014d71ae654e00843e5064a83b01d42fd22f52841b04d71b4cb201916e00e64bf4b39cfc23555a6e6d28bb02942f9bb3ad958ddb0ddc0d06425ea144098f43cb771e4c97b39dc5c2edd6ee23a7860188af86b1985b1db1eb6eb4be588cc8ab976c3f99b30264eed72861b60130b796d30da70278af9bbacd1a694f88ccc1ab0464f2374c454b3a044286f61a60b56f525742b344bcddaa67b5986ae3bb8016323e01173b6fdbbe4aa83d80f896393b8a8cb4721bc04d20b3bf6d124c1bb7013c1ac07cc72498366e03782480f9ae49306ddc06f02800f33d9360dab80de0c100e6fb26c1b4b15f7e3880f98149306ddc06f00000f3439360dab80de08100e64726c1b4711bc06300cc8f4d8269e33680c703989f50c2ecc112fd3a635dc702b6d4e9649608f16aaec8664fce2f590ceba7e66c0b48d844a29bbb0416fa9959bb87e45ab92de01900e8e7a601b5715bc03301d02f4c036aa303cd1100e897a601b5715bc01301d0af4c036ae3b6802703a05f9b06d4c66d013703a0df9806d4c655ed9500e8b7a601b5715bc00d00e877a601b5715bc08d00e8f7a601b5715bc04300d01fc2f0021915be1708d95e0bf7b318bc1febb3c71eda81bb9ba850ee04d60aff2f0c3b1cb3157923bd05ecf0a73076a3c971d4db7af01d06cac09fe90787978b314bfe2947c645715ff76ae7c32552a1a5c2399baf4cb7cf3da605b0c55fccddfa8cb03549e6bef518b0d35feb73ffaef8490c1be7d0738195fe66c60654babd0f09d192ed7d3800d4e4bf53a2edc374bb7e54b154571191cf14914d6f7c0eacf78ffa2d086c9f29ea02cad43febb3099f2faaa6c5122561f534800ae57f00e55f26ed9e447ad81e5943ea3580f36f9370e65889f31f80f31f9370921e6b4686b327a8e5ff350927e9743019cea900e77f26e11c6125ce2a8093350cc1dd0b77a589ef29d9e83bd71ec08c9804d346dfb94e0066d4249836ae1e6a0660363009a68dab875a01980d4d8269e3eaa15f416bb39149306d5c3dd4105866639360da38f2f933b0cc2626c1b471f5d02f0066539360dab87ae87f0066339360dab87ae82700b339254cff837184f5395987f20180b3854938499b476438bf01385b9a8493742f4e329c6d4103a995493849971290e1cc05385b9b849374d372329c8b00ce369438db4b9c239cff57cac04bc4d4b0ed7b755dc66208db5222ac6dc237dee595b0c94eb6ca7230a87ada51a254e70772f7843ce767fee2da30dc0ec832f2ce005d7b4a747d35e562aaa7b6e539427936df483b8bfe768408f2eea0b4ec600364c2ae2619e4210072471b201396b46490f706903bd9009970388f0cf21e00f23661b40cb0b66a7ccb80b09d4ad63258015076a644d953a2ac705ee218cbe45165054c1d5086a3252c6dc9c07e07da0d5d28c16678c05680dd4162bef6c906fb6c1c377d07e0ed5a9f9d83f855488428c95621ed0d5076a344d95ba09ceebc345700e3878aaf939fc7acb5de769427eb42346331c0dd2901ab954ac3c468c0d6b2526939b0cf1ef559dbdb5f6a5e0950f6a444d9b116942aa6a4ddd5cba9da9fc341a369db30ea7688d15dee55c4f2d94c514656392fbacf0a45ddbf5134a6f21c0dcac5b02019de0e5456fa11b0d25e9478836d864ee88947b69aee1350156584510060cda6580140588e921500ab8185f6a6c4d8cab929941322ea2c8ee9c23279b6b7af29d416d85f9ffaadcb5d51e42b8fc81671fd0e6cb06f185939bb263b978a51a6d892c2105a976416f910b0c87e9418b9000e2c5f045cc6dce375f8abfb82159af098323298bb50c11c0f60f6a784d912d8a44bc1e64d5077025979407d968af1831984a522d960c638d0341f1806caec24436e76cfbfbf06327326254ae5c290bbd5b930ec03100e0a63749d5be364d1e0ae164acc723e5922aa9902b65eccff54f21115474428db4693d5da3b01b0db8531a496531f27b991f55ff60315ce604a7c6a33733539e1968feec615d39da6906ece67a4280808e7251b51596539a87c8650b72555769f2a60ce71fe2e131369b1dd3faaac6e14ed016c74fbfa9ce1891ff6b57195db5c505a0ea544a9f699cb0dbfac24ab6a0e00f0b2ead70e6d1fb2f80ba0ccaecf7e4efcbe3384550dd9be331150d50c0ba301c4b78e5c275a92d5e135ccc92cf13b60893994f894b77baa5bea8eb172cbe796a0ae1e6e12ced156e2fc1b5867ae4938475889f32a8073844938eddcdffd448073a44938475989f37d8073944938494f1024c3792fc039da249cc3acc45900708e3109e7702b716e0038c79a849374c13f19ce52807387307a41c3eba3174436b4311be01b17d678a52b44bf37b1cd5dcaef01cc1dc3c8da58c64edc7c8270cc92cc369f075dcaf126e124dde88c0ce70f00e74e26e11c6e25ce8e60f86d824938490fb523c3391ee0cc3309e7082b71ae04382752e26c2a0494394d22d79f8d4bb66fa6b131a8b927d5e70c4f7c77d1c6558fdd4035934f8972a00665bcf3fe24c6973daf14ffe62e31d542e46461ab3c5ac5825a08ab790aa8608f01763b398cdecf306199214fec92ad8518036c754a18d91eab74421b2522cbf6b3408533350c4bcca98fa3ecc8f633b80058e2344a7ccad332e637c41d04970987ac4aab1d02f70365e1f4facccc50dc422bb7be7f0258e30c4a949d185fdcc46be352f95111c3d6455459582a3605363993126490758ca403bf6475f77c60a3b34c454b5a9793a1bd1058edec30068553f3bb1c6ee5610d2f0398734c8269a31beb8700668149306d3cace14500b3d02498361ed6f01280b9b349306d3cace1690073ae49306d3cace10500b3c82498366e9ff30480596c124c1b0f6b7812c09c67124c1bfbec1f0198f34d8269e371759f0198bb50c24c7d972cc27a9c6c91e9143028bc2b25c6aeccbf2726612627f3769b04063d76330d28614627039a0f80ee6e1a50c24e2519d05100e802d38012762cc9808e0340f7300d28e1801c19d00900e89ea601251c9423039a0780ee651a50c24e2619d04100e842d380dab848600800bac834a0840d7b32a04301d012d380120ed291011d09802ea6049ac182ee274c58e793ed27fc09c0bb84126f071673af5157bed544b1c0ba220c071b326786b600622925c44e1a1b4df49673378922ac8ec836895a068645ca4c0149d8502203390a805c4a09b29700592c635ec096b25960c347be96addeceac20db5f864b51709751c2550e368955522a2e36848324640e369d81dd2ea744db58a0ad92366aa3075d0f6085e594a87a6bacd0ada9b99dad6233c4f28135495b9f3676361b00c07b5302f6b7c99e8d0e35a301ca159428633ef0233d366bf36a8cb340fbb282129fff1db96c9cdae80a70ae3409e7682b7136073857998473849538ef0265e56a9370e65a89f37280738d4938475989f35780731f93708eb412e79b0067a54938ed745a580c7056998493d4d98b0ce7f100e75a9370e65889730dc0591df6b851aae79f93fad37d4585763d18375a478996dfa843e7eceb48b60116b8dea40c3dc6cac9de56a0e7b3c1249ca3adc4f91fb0ce8d26e11c6125ceab01ce7d4dc2996b25ced300cefd4cc239ca4a9c1f009cfb9b8473a495381f00380f3009a79d6e5c8500e78126e1245db64a867323c07990493873acc45906701e4c89b31d539b9b7177add03777269b3bff0d003c8412606d3b22d93f4bfe2fe8031d4a89d27b5c22e7502d3243a907aa77a35242ac647b76dd08b01e16868562ce07f17539e13a21b2cc7e0940793825ca011e0b5dcc129db25277df22b45ab2f1a5616018ee084ad4d909850106b2cac7d8679ef37ea570eb26759f25db2b7101c07f24257eb557e268b6b59d4afd1868191c15c618bdb2e02a61b5bc329b22e1952529896ddcfff84b500e6faacf461714b7d0ca3d95ee05288f0eb34a2b976d04deb05a222c545fb64e95020a1c917b3bd725a25d4168b5c3a950cf0165ea3161140875db4d9170ed11596be16e50d61e4b8936f5bd4408571993ed25b20658e87194189573eda8ad6a2ce02b6085c7d76fb5e48a720f5e2674f3263be6290a2cf1044a94fe17bfe658b9ab4d01a8e74f340da88d2e388500e849a601b571579b1900e8c9a601b571579b5900e829a601b571579bd900e8a9a601b571579b3900e866d380da38853219003dcd34a036ee6a3305003ddd34a0364e384f0340cf300da88dbbda4c0740cfa404da86a919fcad6739ec341683771625bc0c16744b2042db24db12e87d609b6753e255ce3ad96280d9dd354437ba69f78cd2ebc05acf09630039d15a53194226b454b282601b30deb485126d3f163f0d52c1e0c9705bfb14c80ba04038376c0bd6c32d16c5019f8b5a2ac4ada41d31dd4c85b60858f079618cdd0f1373f621b704c8069cd703cb3c3f8cb17bcc4b2a7e4ad9c68dfde7836aea82301a55aa2ce51551a9e7acc3adcf9fef3260a91786d1a8c2fa4f5e98a4fef96438ef00382f32092769ff9e0ce71700e7c526e1245dee4086b335a8d52f310927e9ca3b329c9900e7a526e1245d174a86736780f332fac1bc42e767de5b52c1d7db7ea064add0eea0e9747918f699faaa7a1be7973a81cae80a93708eb612671380f34a93708eb012e7ed20b35f6512ce5c2b715e0c705e6d12ce5156e2fc09e0bcc6249c23adc4f90ac079ad4938ed3c0f690f80f33a9370929ef94e86f30880f37a9370dae9d7b40ae0bc218cc1640c667c4627f4b923f3a9af065dcc1bc399d6a8070707b21efa68d064bf89129ff20ee1012f1576a864af92afd837911101d9f8664a78ea0c996c5132f2f31074831de4a71a910d6b0c0756784b1820532b0fed2b0def07206f3505a48d2b88af00206f330524a1e30c19c8af01c8db4d014938964e06f25300f20e5340dab8494b53d062bcd31490841e456420ff02167997292009bb83642087028bbcdb1490367606fb0290f7980292d0458b0ce47400f25e5340122eab2603990540de579f233d501c690388acb77d0ba86eeea744d999f9f1c01c41595292c15c05603e60124cc2fa9b0ce63e00e68326c1b4f100c70a00f3219360dab87bd74a00f3619360da58019502988f980493705c880ce60a00f3519360128e5692c15c00603e66124cc2317432984b00ccc74d8249d8ff21835905603e61124c1b174ead05309facdfcea42bcadd3f8eb0fa219b7164a05ffe14254a3eef3d596cb7cb559c2e6db3dcf9b8c4b9f2cfc8e0912d86e6de080aded3f56987f10b9e09ed701315ca7c6087cf50a2ecc9bc7bbea6bedc99b04944b6dc793db0d16729c1f665de05fbeef612b1bdb5b940ee2194bc4ab2b1ddf91ea8909ea384ec3d91c305eabac24c67f9da41e3912c97166b232aacdb8342e1f930cad7d41a4d3636e6b34131f00225ca6e2cd145ab48085be3d8275f6fc66db65892b1d959eb5b80f4454aa4c1f6e820b456b24aab3bc8f82f51a255ceac7ce3d2d09d59c98e663e1554472fd76fb9697bff280ba07ca53e9bf8f98c6f1bb558a224accd0750a1fc03a07c35cc4652b9a3c47cb0793ede7322c44ad6731a01cacad7a87bf00bc59851e8252559b3e8565087bf1ec6b05c6a6e09c3ac1ce3fc0c64f0374c8269e318e78f00e69b26c1b4d1cbe36d00f32d9360dae8e5f13180f9b649306df4f2781dc07cc72498367a79bc0160be6b124c1bbd3c5e0630df3309a68d5e1eaf0098ef9b04d3c6d1f66701cc0f4c8269e3c0f07300e6879430e1dadd72cdf46f489b8e934d068f00203fa204e97fbb51c2ba9c6c41fea300e7c726e1243de38a0ce7b700e72726e11c6e25ce7660d0ed539370e65a897324c0f999493849bdddc97096029c9f87317dc637b80ffd785ab2898a6f580cdf17f5397d16539db81349b6ec6f3b50ed7c198625e6d487259265e499c012bf0ac312b17231de126ddc7f63212813bfa644c94f3e2f746eaa193fa78a8b5ae5bcbe9c558a4c5ecef6153d9e7271679f45360216f90d25c65e2cd18f68baf3499e98aa2d179ec4798c9f5fc11d604ae4cc7869181e456470f70470bfa584ab3c8a6233e45c5025b0ccaa2405808dfb183501d9ff3b7ab4450cf778dbdaf662ef02acf6fb30ea783e6d16ba0b029965ae034da41f28f1b50325ea74e6ba0f160b27ed1556979a5100f0c7304acdd8d281d4cffa233d33956c4c732140fb3f53d192b647c9d05e014acd9fa8dba3c99af62aa6a4f5fae511228c39a05eff9912638606a3bf836909dd13c80ea6fd101400bf985b00107acb911500ef8102e0574ab4bd05da69c23ee732eeea5a26fb4fa542945a92554fed52b276417300f8b7304a586c186f92b0d84ada12f611aa12f6585004fc4e89b1b62dd0f29c0f2b45a94a0af2c628d5aa755055fd11ce58684ef8fd24b2f2f25060877f86511525d6f4a9544684eeb16468bb02cbfc8b12ad72a8895f1ce88e90c6c64ced1ec4cb00d5cedf94307b6a60d65ecbdb0b760e00fb0f25d82e00ac2b045bba6af341deed4079fa2f25cef612e770e7ff9532f01261b1212124f39dbb0858e47f614ccf612d4c288eb40a2243b93340c92799c850f6f181b2c809b3428c931638ff82532384edcfc7a81af2c7810c1fa144dc95c5cf2ead11f34acb93daac8d7ec8db8266539412a8ff43680971921d06d602d8670393708eb612e71fa0446d68124ed2ad25c9705e097036320967ae95384f00381b9b8473949538df05389b988473a49538ef01389b9a849374c11619ce1900673393700eb712e75a80b3b9493873acc4b904e06c4189530d84648bbf95234e9523c61dbcb377686e6f80b02525c2012cbe6bb998258ec0fb71cab16fac7e15e874b6a244edcf25dc469fd0990065ebfa44193f1462e39e208f80be7b9bb0ca5077088f0bda20cbcf1006937f204308cad0b69408bbb3c41150fd7692a16d8e4606f5206097edc2b24bb8ed6989101842dd4e564af60708db5322ec081096d5ec14af7eb67daee82990bd3b50624cf4a4d367eea9f283d032f9702ab47d00da8ee1a2f5d3d624444bd6dadc0164fe4ea6a2256d7d92a13d0758ed3661544d395bddfc7b1640d89912616ce5513dac2e2673ee1e04f07509075faea71f64b3f52d036563574a7cca6b2e35ef8f1c2bfd3fae03b6d8cd249836f6c6af0730bb9b04d3c61d3acf07307b9804d3c61d3aaf05307b9a04d3c61d3acf0530b73509a68d3b749e0760f63209a68d9e719b01cc0c9360dab843e71600b3b749306d3ca3e00600b38f49306d3ca3e00e00b36f1843c3d8049a8ae942ca4611d91af625601eb25ffdce43baa2dc338608bb91648b5a1a0194fdc3f071f7e3b845585e9239c70c04831c034c034a58669201cd0440079a0694b07f4e06340300cd340d2861754406b437003ac834a084951219d07e00e876a601251cdf24033a00001d6c1a501b5d60bb03a0434c034ad8672703da0300ddde34a084639d64407b02a0434d034a38de4906745b00342b8cc95feed6e5522812a2d658ed15970df06553e2cb6041f79d232c3fc95c13ee04788785619d23ebc3b3836c18e40b16c3971386db56a275a6e2b845d83b2273dbea024698868731e639ac6610b9949533b50985ed271b3c0a2c34d75c0bb57163c909c0424798b43c708c9523a0db80aa68a44938475b89b329c039ca249c23acc479272847479b8433d74a9c97029c634cc239ca4a9c3f039c634dc239d24a9c6f009c3b98849374076e329c2500e73893700eb712e79100e78e26e124f55422c3b91ae01c4f89b3034b5cba3a572851cd2a58281b53900dd3e580d6e64e9410dbb0d822abad65814b35b0c00961f7d1f58b56273942563aa1ae1677ab8475128e6f7e45857639e8a3e785b1dd29cfdcf98c9f41b886150a74a55208df7d860b2c1102e0e9845561647db211a621c07a2786511d619551e279ec8453c464386f0325e9249370927ac893e17c13e0cc370927e9966864381b83f274b249384977e724c3d91be09c62124ed2bd63c970ce0038a79a849374774e329ceb00ce69267534c758e9efd91e5445d34dc239da4a9c0d00ce1926e11c6125ce5b580ce74c9370e65a89f36c8073964938475989f3078073b64938475a89f35980738e4938875989731780b3c0249cc3adc47920c05968124ed2bd40c87096039c3b53e21cc4bce711f171d0528707dff350c533b6d1240c0c0615d201a487531d403a0df49be652025727b92e61fab5eff17d26fb66959a81267e91292009e738c9403606208b4d0149389f44067230284be79902d2c63de17b0190f34d0149b8be880ce47100e42ea680245cf94606722400b9ab292009db9b64207f072077330524e18e0b6420cf002077370524e13a7632900d41f3678129200977582003f92fb0c83dc2d84129b576a48d997b2ab0c93ded39ca89b0d14eb650ab04f4c7f7a2449ded415d8d82c48f8b48f4bc0b6938e4ed08559f09e05f18c65680a9ceca13f6e4c9e6e46f06c5c6229360128e2f91c1bc15c02c3109a68dde229702988b4d8249586591c1bc1cc05c62124cc29e3d19ccab00cc529360128e3791c1bc1ac02c3309266127800ce63500e6529360128e3b91c1bc16c05c66124cc29e3e19cceb00cce526c1241c7f2283793d80594e09b3274b5c62384d6c5c35c5f9bb5c602c75e2bb5a08e62be6ec3e0f7b118b81dd9b126c0f017696f3c212b1800beeffb590ad1010f90e614b9c7fbb42a738d732e7ad523aac64bb823501585784b12b185f391cfa7a4eb2f1a6f34176afa0c4d75ac48667ef1542cd2a416199585ac83fb20f5d4760792bcd392adcc6f3b4ee0156b8cad42345493deac8ac743140bbda54b4a4aeb464686f0205c01a73ce8d19656511b005d8e93e26c1b4f148bd8b01cc4a9360da78a4de6900669549306d3c52ef740073ad49306d3c52ef0400b3da2498361ea9771280b9ce8c83cb0807e3c80e2e5b0d66d0d79b737019612d4eb663770380728359e71b90eeb940b6bae81c90c5379a06d4c6234dce0540f7350da88d479a9c0780ee67f611128478c9068bdf0578f70f6bffc4756278986fa6b6585646a16cd3bf890ae20a16837840184b5ee10c1136ad413e2f4466939900e7819438bb6b70164b0e056ca983b644082f1201847214cf002aa85f03a80785332b342cfc59a11fa8f0ed0fcac983cd3d8983b00d4a3668fc20407b487d2e4b88efb3db3896340264f243c37055a8cbd406a1af31998d9e0ec01e662a581b8fe13909803ddc54b084450119d8e900ec11a68225ec319181dd01803dd254b0362ef41a05c01e652a581b1b58fd01d84da68225f40c25037b14007bb4a96009a74cc8c01e06c01e632a581b1d741602b0c79a0a96d059870cec5e00ec71669c02522c065b784777a910b792b625bb990a6d2198f43b3e8c91ab11ac1e4e3926b3cc4dc0324fa0f7b28fad9f2f7794980f3042e105cee77b3bffe25b0b927603c8c6fc2b81559e68cea815e11800d9a8d53c60a12799b4f13fe9817d64cb6a5e04e3a9279b8493f48439329c7f039ca7988493f4fc43329cdd40b979aa4938498fe225c33909e0dc6c124ed283a2c970ee03709e46ef6d3245b62ab1e9e67a5a9a48b66dd636a0a63fbd3ed7257ba7fa6c6c36ed026cf50c9360128e3891c19c0d609e69124cc27151ba063d80799649306d5c063606c03cdb2498362e039b0c609e63124c1b9781f50730b79804d346d79d4100e6b926c1b47119580f00f33c9360dab80cac8f80d9a49147f89404e193440790770197b0d8e9d843d95456262624388825cefd2c562ebe5ae4e058e0fce72f05f674fed33d8f88d3e527b30d6c8d78cae5950ad92b9d5fb966552c9b1f72733e3788a6d22032c5f86a9ec39c6fba31979589d037b222e69efe5de0fcad76dfa9164832c572b542e75935e3eb017808ab1c4d96b34a11e3f8d3c133234d05a732b64e12e00033a5aeeb98bb49ec7496b8fd47a6c05d28bbd5999156e04e39ce4f17336955422b3e7b91effc6ba9d0ac82f17e24d78a53a8166f7399dc697b96b02dae09df4ba840685f26ce3baf043d529ee491483b99cafc9dd9824e8923af445c8b6bf4c8dace792dc2f7e07767f986d6ccef0d955be2ae9477ea79ed32791a279776014fc8883e6757a4cd3a6b8b919ba1f8f74b453fbd4c489d5e6b4c6b8f1f6ee92d93a44a163fe564ab8eff853cdd65b20b33ed1c69e1fc6b9e93f2ae703e9c52e9fc9b2bb5edac286bf4ff0030f9a77c051f0500 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/62e225bcd54e0b64ba61bd5e6f2ec6f9.asset.meta b/Assets/SerializedUdonPrograms/62e225bcd54e0b64ba61bd5e6f2ec6f9.asset.meta new file mode 100644 index 0000000..8674e03 --- /dev/null +++ b/Assets/SerializedUdonPrograms/62e225bcd54e0b64ba61bd5e6f2ec6f9.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fdb506cc8707a034699f5891f3c864a4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/633e4066d5322634b98c17bc5e070875.asset b/Assets/SerializedUdonPrograms/633e4066d5322634b98c17bc5e070875.asset new file mode 100644 index 0000000..68649a0 --- /dev/null +++ b/Assets/SerializedUdonPrograms/633e4066d5322634b98c17bc5e070875.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 633e4066d5322634b98c17bc5e070875 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d097c5d45f5f8e7b54df795ee1b4df7d785264dd2b485d2355d52da2624692994d2a649da86a60b59bab096bd40d9f71d1405151515041470434140410545446553015151414059fe77e6cee49e77df9cf7ee7d37e765a6ff5ffa696eee76e6cc77ceec67e676c863ce4f6caaf36b0dab608bd834b69ad5b29d6c87f3d722e7b8ddf9e79ea9ebe5acd1396e717e573bf7a6b2dc346ff29f89b121ceef52e7ac89353b6fb6b01ae7582fee57b23ae7ef52e7dd3ae78c5fddecfcaf739e8a75725e5acd4a58195bc506c706a611b146bcd424afc578bc625d9ddf0bd93ee76e9d508a0792276e0d767e553a779ac4bded8ed2eab9756cbd88d676e75e8df34e236b70646e1212bb6e9dc2c41fcc3d0c94c741f238c0f9df4dfedd51fedd55fe0d9fcf91c7c1019f1f02deeb06fee684ee48f1fe5079fcbbf3bfb3f3e76670cedf7d479e0f73e575d89a42d608791c298f874b995b02e8df451e47a5896f2a19b9405610665de5718c3c8e96faa68a632a79e35c46b15b803c7efc07d0670c08bb1bb8cf8f6323c45da5e3bbbe747cd74dc70e37c8f47b435e1f2f8f13e5718294ed3cd3ff2e792d2e8fc3d3e835c97d8fcd629ecd3a6176dc25cf27cbe314799c2a8fff92bad683f3a8baa8343d421eff29c33859735d3dcfef6f93e7d3e431cf975ef9f2b906793e3da03e41ec4fe9f46f19c67670ee70ecb431852c95eeeff9d2fd3df9ee152ec74e0ff9e203ed4f27b740cadb91413cdef7c5e37d57979cb8efb9743a28f985f2f81f29772738e772af0919b74ef2bdfbe579114b5fb60d0c706fa62ba7ab623dcb0da7f300f77ae7392cd1968bd3e8a9d2f6035fda7e20e53648b92afeb3ddf398923f0ac8e1efeff2c9fdd027f74329579511cac6d3e979a43c1e2d8ff3e5711e6bcdc7639e94d71483b9f2f8114b2c033e92c7a3bc77075d11925baa345ae04bebe1f2f8df3432d5fb0be5b15bc0e7d5338b22e85c228fdd0386d95d1e174708b3876b0b5ddff5d9c2ac343297b87cbb36031d1c39dd4e97e74be571993c96cae3273e3bf824801da4d365b9d48581347074e9de579e1f238f2b7cbaacf4e9744a1beaf43f29b3119cf3e3c7f27a1338e7ba96bbe1747f5c5e5f258f653e9dcb09753ed67daf574f601b41de4b655f156efc7ae4bbb27b54c9eb953edd4a3cbdbb968077951e41f2c36a79fcccc7f833a98362bbc6f75c3338e7c74f41789fbaef72240965eaa7f2dd1670ce8f5501755dcb926dd639c6405922fee661cbf2bfa74acfe35972ded3bd1b736fb75e6352decbf2bd1358723da69ee371db0dcef9afe302c66d9d463f27dc5ef353bc7b224b2c7f167af6d0e539796dbdd4a7034bc85be29cdfcff5de696dbf9de49ef751ba6c90ef281dd4df8e7ebd952d6e94c75aa6af6737010e2a3fd678618f78515eab4e1156ad7ca6ce17ef0a4f4e8f215277558ea9fa3b8e3ccbafa93e986ae7aa76dd76efd971aa1da7daca9295e865c3b2b91e5ce7c71c797f0f38e7cf6df5640f54f5bf6abb295d75e9a9da292aeeba3220959d9de23e3b44d94ea3cbb6cf233eb91b586abb6d72e58cff509e37bb72fa760a29a7c595334131d8e39ef755fac8fcc4f6cae33ec9b1334b2ccb4f95d741ff563ca3aef167958c7840dd52713cddd5b3b57d7f863c9e298ff380ec01520fd5f6866dbed3c03d7eaeda7e7b7df14ba5cb59f2d82b4d7c0682e7f8717f84f8a7ba27b9b37365dcbab1843e8f3877ece4b01129649dc7b476da5ff58fcf77eff753697a0188130f43b507a12d5d28efc1ba51be1feb09ae9d23af019e31d56e3ce04b9f7dbefb170119bafb17031d74f72f91d74f7575efafc23be88bcb5e9fae3d594239c32e4d8e6baca72fecd342a4e565f2dddebeb4ec2dd3e5cd14b22ed7a7e50055765ce14bcb2b7d69d947939657c97b7d41ba4d90d7fa69d2f730c0a18fbc77359296eafe3540aeeefeb54007ddfdeb12d372a06ac75d8fa425d41fa6e50dc97115cfc0b0551f22555ade248f37caa3aedd7bb33cc6a5dc3302c855637a5b53c81dea937b6600b9b7c9e3ad29e4de8ee89b4978cad6e5184cac3f4bb4757eeed8eda0e753c8ba83696d7db01a37b89325dafae758a2adab3170681f9f97f7067ae92f58f06b8358b2ad8371f198ac7bd85de01968abeafe17805cddfd2f021d74f7ef6609b63e64bebc7e0fd3db3ad41fdafa9792e31a1be40b5bc94895965ff671567c87b0847e8e3877d26788bffdd3c852d78d5f71e54f54fdbe7ba53c359e741638e7c761be7087b9e10e95e35fc314c79ef2fa54f7fa5035c7f055a66d6f0dadf23df73596d89ebacfc7ff1b3e5b19e1d95b6b5cbe0eeec1b88d64896d926fcaeb8783b41a09aee9da5ce9b87e4b1eeff7f11b2ee5ed07e7fcb96f03fdd5b8c903f2789677af9fbaa7d217d6f70fea6d45e80afbc461db482ace0fa58973983269144b2c9346b976303cd5f8ec23f29983299e794c1ebf278f8f4af9b92cb1ff922bef7f5f9e8ff6dd1f2defdfeab11fa4de7904c8e6ef9c1d20fe3f94c71fc9e30f6438635842bf2ba6c6b7757544a6edd84cef6d923a8d6589797eac9b0e23955d285bac4e631f6a0ce6c7f25823e58df331189782413c605829e21553eda04670ceefff449e8f97f7559b34ee7b5ee9f0843c9fe87b7eb2ef79353726cbb2d8a4c4e7d94f811c7efe9417b7989ac37b1a5c9b24af3de3f119a5cab6298961b39fb1c4fe9deac34d95cf9d0bde830cd4fdf3e4f911be384d93e7e783737eccf3c955f3404ff8ee2bb9f93e7d7f2e8fbf90c7e7bc384eba0fbc0378b2671365a6b4e9a7a48ce9f29d0bc0b963d3a352b5ffd5bb05f25828655c08ce1d19b9b9aebeb945b8ac58918f5f01b8ce8f33e4fd03e09ccb3e9042bfa7e5b3c5beb815cb771f0ff0ee4c799ce58b9b9ce7cafdd88ddbe8be2964fd521e7fe54b4365b35cde919a7455734ccfcaf3d952878bc0b9a3c3e87be473cf33bd6dcff4bd7f71e2fb63d49ce00bf2f86b9f6eaaeda8c6c2d498de6f719b642ff9749fe33dd3aadf6f7cfaa97932a5f7d132dc4b801eea3a3fce658975941a63f99d3c9fe7bb3f4fded7cdb5ebd24d3e1f9bcf12cbfbf992db87ae8cb1b9f27935963c97a52e8bffe093bf40ca3f08cef97ddd38e51fe5f1b544190936a5c630c138636bbac8f460af7af726abf6e1efc17bfcfc15109f746356ba6baa2db3c8c74fce498d9b25e3b6d1c7af210d3ff95cac043ca7c282f37fafcb6b4bbc6bb1c5e01a3f2e95ba5d0ace1dddc63fe293bb4c3e7719089b1f4be5f5cbc1397f4fb65b62cb59a27f8d92b702e8b45c86a99e79c317c631ccb363de575063022f83fbdd809eea9a9201fb61dbc1915f976334e39a13c34c9b06ba327c254bac13e59c626c952ffd57b9f19d20d37f824a7fd58e684e1db692cbfe24cfcb58627b43cd13fe19c8e3f7afc4656ac329f7c5a73c315c213f5d3dfb1779bc373c4fd107e2475907c72a64785781737e3c16c87e4b5eab043671ac3c56c9f7d5f898b2d1d5e0d9d5e0597e5cc312fb256bdcb49bd4ec93adde3b4e3e7f0d38e761bd2dcfd7cafb728cad358f1e0f74580baef1e309f29debc0b9a3437caf6b3f93562061ad93ef5d0fce619827cafb3780f34eae6b177c3eb65e3e772338578ca19c9b7c727c7ac54e02713c49eaf2406abb505c5bfb89ab655827bb719fa8caa9d783c9d35e5373507f95616cf07193f384a2ee082bfb552963234b6c836d74194d56e369aaec7f254d18525eab8fe6dfa4bc6a29ff6670ce8f9b5882cdc7641faed5f66b5842f92cce1dbda64cf5c9a9f5c95173962a5deae4fd5b7cefa939cd57e4fd5bdd749b32df179f74f14eb8961313f390cb589dd3efdbc5f2c4a42f37dba0eecaeacdf48eca627e99ffe23f1345b0cd6c9ff36a9dce5b78b5f0456e6685ac40eb2d3c54cc55a8d01789dfd5ce13f542e86db1a4201e4e0a822bd7e0fcab03aece4dcef5a5c2539a3b3bd73b77a6b115ce91bfb5d1e98eaf73fe254a59e304dbc05a9cb32ae7f72e216fa3a376f293e9a2c4dda2fdef5438325dafededce1505749773de2034ac14bf770b4deb84f6a5ceb566e143be836d610b9de35e115a72dc1b9dbf75615649647a1df5cedbd875d7455c255389131bae7d9eb0c5ff4b91f648118ebe33cf1ffca7539e988dbf382925fe8fa15bc8f04e66a994315d208b255c2b6079c25fa3228960f83826c7506fdf2eef625694322e7a323cb9878b1878293c7bdd5b97efc9398de52446ad90e589a1e51169a2960a2c971717b33361a29093d3299f2beac71fd3e1174b1f2ab388df7dae5e3c173e013a8bca2f3101c490609553aa9583ca73b550be41a8e68f0c17bd43948455629d102f25378b00b63bf77688b2b6896d75ae3427a76a3e57a18b4898e46a375de4b0a4e9a04b1a31d250d52e39035b64943a71bab6c6c24b9c3cd1961a92c284b1b04423aba36c69a94cb6fa9d6e2fdc71f7be331e79a06c47d5956fbf91a34f9fee227d3209154ba18eba14ea9eedcc93beb648953e3d5ae3e5a50fffd133ec89d8783a1d30829d74047b64dbc6f9bd9d420acff7e1197297a529fe02480fb0376284e955c010e66810e673847d345ab19c6e3eadb84288e4cebac4e9d93e557366c6cdc7fd07fb10e4a0c6dd2f65cd1ad6b4bbe8e80927c08da4f4548fb1d2e91a1ce3dcab769eaf13cd4f7ebddc9158ed84cde52d102178bdccc4375293e59e5d47f8c96aa9f61754c781fe6f54cd30e25d35c4f3b9bd0ed0988128e3fc99a11f9e19ba61d96c60d46cd61d933c28aae41e98e4c15125f7c4240f892ab9972edbf0e7c5c01d7db6f1065ad45f0b9d77b73a91d92d7acf2dcefbba8199d4d96568e0ec324c64975ca61b2e0aa711964d7aebd28e5f1cae53d29f74c3f0a4eb83091e1151705fccda4646b5b67e3a6b13f1c8660bae44a4e22621277c25c79dbe466b4a37865674a398be15974e0fcca20ed3511489763229c5d5ce35777072b1b85b2f46b4a6b1639d30aa45888de2899db249853daf48ae14db2db4084d5233e7f9b3a3bf57238c89bb9650eac543f6ff423a3ca34532532b8419457f9d51084bd9d22e46c1f7dae043a03c06856d6c0e6374e620004c49413f9a46c16c60acb0013a2db0d41fa02bb279ab813704a3b6c506ea84f366d47896dc99fdccf94912de13173e08d37c8246f397567608a5f960ac269b18b5261b82498e47953c54979145fa9e4d9a91834e972d15bbfad4b132a7863a591ab30a77a7305dae919a2fa9708e9b85167562bcaf2ec0345beacc3fa9950fc8fcc24417b3e0937ef4b1e08e9d1d44a130256dc5a0d3267cd1a02f92a68ad0cd62831563c3b092e6084d49f3a2ae184b51d20cc7b2ecb4a85976844e32cfb2791a5bcde7b6cabd54bb8b2678523853f17046ea8a0651809edaae45833b62c3e56d1633d8aebc558cefb9b54798ea36c780774bc3a9729e6974c2a893461ea530e0135a23fd4381ccfdd1678702911de606c80e94b1c232c0e13a4be2435bdc7d3869d285574215acdc91bc4164c353c4654ec94ddd7af1683d3b55b43addf66692bd75c1ed6d944e1b3e62c01d91d3f630fbe3827331c133220a1e8de5f1e2a8797c8c4e322f6db8c36ed416d6584ced5951d51e8795a8b33525eac7b17025ea784cf8911ae18f7408277c0296158e0a622329ac7a2226788e2e8ff1382e12b304b9ce7f3e1dc93bead522f7e78acad02b0d729dbc5eeffcc52beca9e0f99dce13aef347183de398511c1dd52826e924f3749bab49b7f742a6db644cf83c8df0651dc3099f82a5dd7c5ddaf1da414d346f95755b6269982bdc707285e7558b18edae1529d724d235979de6d4d4673847de5fcb15f54083b8972bb6a06c14656d98349d8ae9bf40a77f77a07f39d0304c884760e5d6424db9150b596e4dd3091fc0e4ae35ba860f77a90edff0c9c3b02dd6611b296eec152dd716f17ca53080bad6b6726d1b5590f91abdf244a773076bcf0619ef2d703fb526f1b7d744e1617b9e11511a5e7cc980bfe1a57ef40d2fbe98202e963265437bac81351d2b5497690ad5589842b500cb0ba5585e589e515e28d4d99c188ed8d5ae3687e7a80a219be7bce80d7ebe942369e84f0c991405b0acb6d2718ad86ea7496c31ec926be285299fb4dc04f61276e18b2ca1cf132b449ec8a6e658be28c26aed959a5afbfe9c70b5f60c9dc98abe7e63bb9a6c8990900db35da5335b3120511c20f1db52cf51c29db94914aab5b250758bee5162cf9c46516dd639d779c10bef4f117b05f1f6d212c17bbb20bf53b8ef6d114d50bd91970923cf763c31432fc62a80724d0510aa553d13cb42c76ab2d0c721b3d02c4ced8aa86acfc6d4aed4a87d7ae7706a1f8909afd2085fd1259cf0a374c279c1ccd70545e921cec104f3055f49cd4ddec556fd841a5f4f7193e82ba8fe5fadb8b2cff9dde05cab112272856bbaf2c409a3e5d118dbe3346cfb86643b1743b03622db793ac1dc3c8f0f223885d7c27c9d60defe3a8121ed2fbea42d7cfb6b0186fd440df63b42625f8865f3f551b3f9224cf2495125976092374495bc1893bc31aae4255822566b12913ba38549c4a598f04d1ae15521852fc332668dae6c1acff8d082d74875bb4fdeb84635db2ca4343a7fef96756e6dc2f8081ff3a8979de630f9bc14d3b356a7a7bb128efb1bf23645b51843e32196b16da1425d8ea1afd3a03f1812fd3198f0cd1ae16f8614be02e3b545c76b489a74ad156e6aded5e9ced5301c5762da6cd569c34fbd740b13ce2a0c69bd06e92dddc3212dc32271b22e12dc57c6c577a4836c9518f0ab96abf8768b6a3c3cc6724c836d3a0d78c9b6a2b561509e61b3e0580c698306e9f32191566025f2f6a8257225a6f60e5da1d9239cda5598da3ba3aabd5a2799b73a7631a4d5c1370e09dfea588385d38885d3945138c761a49aa3925a8b25708b2681e7f70c97c0c763c2776b849f1e52f80998f03d1ae18f8714be0e13be57237c44af70c24fc484efd308af0d297c3d26fc548df01b420a3f09137e9a46f83d21856fc08cfcf4a846be1153fb0c8dda037a8753bb1a53fbcca86a6fd248ce135e2dd9f4cbf67b3f85f3cbe61b6106f3f9dfcff4fed8e9c2c786946a74e9c26be8b3752a85a8ca6b316b3a47634d6f84cc047598f07335c24f0c69aa9b31e1e769841f08297c0b26fc7c8df0be7dc209df8a25e6051113b31e13cc77d1d3aea7ae1439ab4e34e7ebc402f51df21b887c93903a31715d2dfde3d580939ab8e63b1ee44aeb6d9436dde058fb34e76a18ad4fc6b43ea0d39acfbcf2415cafddec7625dd6e88ceaf30974d94adee89a1f4da86d9c0451a1bb83fa481356091be38a20d6cd795b3c2abaf9eb49cc5fc4893d7deb7ada3fe2581cbe483a24ce6ce0a74ba62e5f70e5d72f3b6f5a50c695bf38defba8baf1584695befc46cf6728dcd16852cb77661c2afd0085f1b52f82998f02b35c2cf0b29bc51279c376bf8d66e919a354d98da576bd47e26a4dacd98dad74455bb0553fb5a8dda03fa86537b3756b65da72bd07924830c8ae48a4cd9222a285ec59433776dbdeb2b55ed5cad155e545bc579b9c89a7c647193a800dc8d433688c18f2d622eb1d1b9aabcaef63177d165ae688eb9db28e58aa2a056fae26d13579ac45375201c7d85532f2b4e5845851ddddc8325d1f59a241a173289f662497443c4ea671f26f8465dda736f862ae7645742ba8409ef54ac60bd092b58f98e75e1072d4ec3e2758b2e5e3c99d6b58e94baf6bb3e64b3e8742cfd6fd5952c21d3ff0c4cf86d1ae19dfa85137e269626b763697247466972962e1c5ee8dd19c48853ccf3edc7047f2ea2e0b3312bfa7cc46c770e26f8ae8882cfd509e669ff0596ecdbc90584f1ed3c0fb3c22f6aac70ea61e1acf07c4cf8dd1ae12b420abf00137e8f46f8ae90c22fc4f2cf97b0fcf3e58cf2cf01cc68bea22bd3b8021b9c7f7c6cab4194d6aa8ead77aa137e6797e82af2fa308c855d846971af4e8bfead5ae43bbf79cdcbe7a65cefa0cc75b818d3e1ab3a1d0e933a143aff6b446788bfb3d7f99db90697601a7c4da7415790167c0d116f198509ed2066be5fd798ef9cfee1ccf7529d706e3df761e6fb8d8cccf732ac68faa6a668ea18b268ba1c23f42d0da10f4312ba02137ebf46f89001e1845f89097f4097b621855f85a5edb7b1b47d30a3b4bd1acb0e0fa52a9a0adab868ba06d3e2e1d445d3f4362c9aaec574f84eaaa2a9a80d8ba6eb300dbe9bae683a4e84176ebdc3f598f93ea231dfae03c399ef0d98f93e8a99ef631999ef8d1832fe59a828cdb19b303adfd7d0b926249d9b313a3fc0e8fc30233ab76091f8912612ef848cc4ad18fac723a2bf0dd3fac71aad4b0685d3fa769d708efe2718fa2732427f07168927359178236424eec484ff5423bcd3e070c23f87097f4a233c1e52f8e731fc4f63f89fc908ff5d9871f2cf64a1d55a611b576b5fc0b4f8b94e0baf5a2b68c36aed8b980ecfea7450d5da8c36acd6eec634784ea74137e6556b8bc584d7ce902355f76006fc0b8d01bf17d280bfa413ceede7979801ff2a2303fe321689e735916818122e125fc184bfa011fe4c48e1f762c9cdbfbe15a55ef82aa6f56f345acf191a4eebaf61c25fd408af0d29fceb1892dfea72009fe9483d4e9f3c921b6dccde1d37357b94fe3e2c815ed2245073c804fa0626fc771ae1378414fe4dacc878192b327e9f5191f12d2c127fd0111a162e12f763c2ffa811be36a4f00774c2f930f02b418a8c14c3c0dfd608ce13fbb2b4cf1c7df2ce4b6d3b47ffaa8e97768e9e7f662ff51c7d745db139fa07315b7a5d97db42dad2433ae17c2af70d16712af7614cf29fa24afe0e563ffc3988fda72834bfabb37fb113d0e676b1ff287ba2a5b6fcbf04b6fc3785e54f4e61f9d1766ed3a7c42398f1bc15d5781ec58ce7ed88c6f318964dffaac9a6ef0e0f974dbf8769cdbf7f96d424e295e202d11daa13cb52740b9a7245732937a4efd9f7313dfea6d383efa9124efe0f30f97f8f983a3fc452e71f9ad4d93a225ceafc08d3fa5d2c75781ed92a9b882a3dea5af7fbc8d433f0712c92ffd444b26164b848fe188be4bf7491e43950f919b8edd94437cd30d1fa0916f2bf7521f33eb9eb5593d7ba8f7f5eeba638654e86a86561bd399ec034784fa7c160ad062bc45fcd620701b7d59fd9bab127315dded7e9323ca02ec91bbd87d1e9a798e1fd476378070f0f67784f6111fe206299f03426f8c388829fc1047f1451f0cf30ceffd570be3724e79f63c2ffa711be6b5438e1cf62483e8e88e4399d605efa7c1244708aced02f7482793ff4d3d61bbe7ee8672c937ee82f75e170ec7c4b323ff665a3c361ff1516095e376b23d1219649249ec722d1511389032123f10226bc9346f8fd63c209ff35669839314d71cad7085630b84d4cad6863ab823cce26890a6f87fc9db80a21579cb9d5cf54b1fd45a3a8f5dd22b78935880d329a185c06ee0e2af105cdbb7c2d03150e1f4c72abd8cdadc579ae28cc6b43baf6fd0663d159c7826f6d04f79a735b995e05eb2dc9de233474b792574eb35b4515949b564281f374d8951b2f6206d34563309d421acc6fb12cd515cb52dd32ca522f6191e8ae89443c64247e87a5740f5d4a73077bfd10e93a39b8ca57bef0de85bb4551aa348da7bc3b49b8a3bac3aa9e5d27e6809dc232d4106ae2bd666157cd9a5cb44968a8bea9e1c9de297ba761eceb658c5e4f1d3d5e948791fe7b4c7a2f9d747ec3cd677919acd2ff036664bd354676e2d87046f6474c781f8df087420a7f05a3d43716ad41f12a26b85f44c1af61380ed3e0b825248ed775c2f932d6fe41b4de8f0b7e03c33140678ddcd8f34251f913267fa04e3edff13d793a67a5c8cb6a2b10ef4eb829933f639a0cd269c225f0f1bcb056f0172c94c1ba50dcfdc29297888409f14d4d8879b9fc22df2f235b2b9c837cc1593f563924c6abd04430a236d58e570e8df1f1ca8149314bf9a16384dc5bbab4e2a7c362c91f625ebef2ec2eb78cf85987a4a4c9c193e66dcc1886eb8c81ef41c8e7faddd9c806e7af6619a9fa90a6fe572cdc11ba70fba0e1ee90cdcd3061bfa333c7d1d936c745a2a1d09881398e74108df7219a8618e3e18831a60a1d33c6bfe9b889adf93764911bfcc474a5d8bfafdeb952269a5f6e63ae2903a6a36261b754ce1564c726c53c53fd30ea7fd7e5143e11313a167122e21f98e4315125bf8b491e1b55f23f7592c5b7b662d1bf04f12fac501a1fb1e1f56f8cc784a83cdec3244f8c2af97d4c723caae4ff6092274595fc0126797254c91f6292a74495fc11667453231add7f31958f88aaf2ff749279db605a1095537c41e6634ce5bca82a7f8251ce8f48f9534ce5e95155fe0c935c1055328b21920ba34a8e61928ba24aeea0932cbe5a14d1e63a622a174755b9934e3237a599116d2e07133c2ba2e0ce98e0d9110577d109e67e2d470611fc262eb8ab4e306f0f1cd506ed816e9869cc896a1add7592f9f34707e19162cea807067a6e44d03d31d39817d1347a6182e74714dc1b4bbd055153af0f967a0b23a65e5f2cf516454cbd7e18e49288900fc3042f8e28b83f967a4ba2a6de002cf596464cbd8158ea2d8b987a8330c8a511210fc6042f8f287808967ac7444dbda11ac979e2137eedf3fdf5b6f87a6ceaa1891541d2620a4e6c1896162ba3a6c5709d64bea3daaa202a1fc4058fc0ecb22ca25d8ec4049747147c3896f78f8d98f74761a9571135f57231169511598cc6045745143c0613bc3aa2e0b118e43551218fc3543e2ea2cae331c16b230a9e8075b48e8fd8d19a88697c42448de398c6eb226a3c09d3f8c4881a4fc6345e1f51e32998e093220a9e8aa1d81011c51198c61b236a3c0deb1956b741cf300fc3b129228e7c0c474d441cd3b122ae366a11578081ae6b03d08598da9ba3aa5d84a9bda50dd49e81a9bd35aadac598e4faa8926762404e6e0320b330b5b745557b3626b921aae423b14cbe3d62263f0a13bc23a2e03998e09d11051f8d09de1551f05c4cf0291105cfc3043746143c1fb3b7a6a8f6b600eb4e3547ec4e2dc458b44464b10863b13b2a8b124ce53d11555e8c75d4f646eca82dc104ef8b28782906f9d4a8909761904f8b08b914ab4a4e6f83aa6439c6e38ca83c8ec1789c1991c70a2c679f153167afc49a8bfb233617576190cf8e0ab90c837c4e44c8e5188b7323b2385637e438ce398df10f2198b029c13a3980d876838ee7e99869fda0ce8f7197903c166663824cf4c5fca32a74c9ce53e78220c9ceb5470457ea04f3d30b63c9be97ea278cef6515564a1e688352723526fca23610be062b1d2e8e5a3a1ca793cc9fbf24486aa6989c59ab139ceb9c1e0c2278286e26c763822f8d28f8040cf2655121afd349e6aefa970751793f2ef8444ce52ba2aabc1ecb8c57b651663c491700df79e6aa204c5ec3056fc0605f1d11f6460cf635516157eb2abcf1ce698c7f71b13d1c7d558511cea9f7dac095d875a2121b9a14bb203a6015d326ac04bebe0d4ae01a2cf16f889af8b598da37b681da7598f09bda40f866ac6579734cb3a6a0449c5638c652c94ad831ad7b13ac627c77883d2281b7c9a49f26561f943af7cbe4d7e41bc5157dfb453725cc9f86a6c50d7f2773173486db06780b16cb5b74b1bca03596ab9d9614cf746e06dd2efe2e95fb45368aa5936e062d6d7d7271eb7620890b8e1b258f4ae67e146d116b11f1e27213e97912f8f3e1f4c0245531be6e618bb89bc81466563fef358e9cb06b54b662a46fc5ec0986e8c6a9d079c7a5b5d329143738b6d128d2dc8d6d95dc82c5afadf72e7ebdadeca91e8be56dba58cef5c5123277e3b9447e20ac5a63f5892904efa4ca2bf0ad30313b198bd9edba98cd0b947e0bc4b2e37aa6d672444f39ef4e98b86dc3e276872e6ec5beb8ad14a9b355c68c9fed6db798346031b953179383592ecfbc77f80273f551f05ab06f4d53082b87ecf058f0baa445343360a9c71b586d57b66dc7a87f4e477d41a0bcb182b93b209b50aaedc0e2f7795dfc56105a15bf7a8a0886c7ca6d0ed78ba0ebd9a9ac1a2d493249d59d58acefd2c5fae894b1c635ad107171375a70e3a86a637eb546124ace1799a7e62e2c5e5fd0c5ebf8d02dbb4a7127b16da793e05e2b6f2d071a9dfa807775a2b4043349e753301e5fd4f138262b7536756dde88c5f96eac9d12ce06940df345ee3542104ce7b0161126664d58cceed1c5ec482466ab45fe6c906d13b7abad7a2d6b642eae4d4a0d9a3e4a3316a32fe962b484b0f455a9eaae14dfc4dcad0edb2ea62d584cbfac8be91c868d92eb4a8ac418c01dc539936522951b456fa8c6a971f7b561ac7663b1fa4a903e4162b8b085b05aa442a3f32ccf875b52d47e8932da2e667bb098ddab8bd9a2b42567b05e015e86a6eab3665a52eec5e2f8555d1c97a236c95bbc9b9c87545cdded3fbc6f3ca42e4bf432dbba26dc87c5f56bbab8d611f71e9ac54efd9c92db3b5823acbdbeb5e4699bfe70269c4ec5387d5dc76975bbf5b252138acee1348cc37d3a0e0b43e60d1372c4e9580cbfa18b6169c818aa0f97e953a43de27b0616df6feae25b4168d94d19b435da82c09918816fb5551bc42ddb168016087daccec262753f36421136564bc413c929e42f7382cb0d13bffd58fc1ed0c5efa8082dc766511bf17d6736cb7e1e1eabaaa467c3c4e96c2c4edf0e9766feb2076e259fcef2286b8f73b0f83d88c52f4c9fd18deb52d98ef0eef2198fd4adc3b66a399e8bc5ef215dfcc6b1d4a382550e610a2dcfc3b47c38f5d85e9854a8cc2815286def7c2cd6dfd1c51aff504c55eb543d2c23bc8d7b797dd8a26d8b6536be7f01a6f777757acf4edbe32a1573837cf4b1416cdbba986d177b6b25f77f53a540e63dc80bb1f83c82b52053e711de1b2e17adaa264dbd1a642e81b74636b7610c0f60317c34481f593f37502a6c8f8f8357cb31aae4f4cae6fcc045581c1fc346a8828c03048965662546e631bd188be9f774315d162835fd333d6e3e54f16ecf74bd048bedf775b15d9b365d6947c6a9c7cc0f62347e808d2cebeb8c640fdef66a615e8ac5e887d83846fa5e68901c1ca42f1bbebf9bb99d5f8671f8918e03fef12cbcd7a076566d2b5bbc1cd3f8719dc613d2e64c6fbea64e5ce5fe0c6dd362b902d3f4c73a4d67a66869f92d3d5173f7ebbcdeb817457eb9128bcb4f82f83061f5dc62c3eab8abb0583e81cd87862be7dc3e59f2dde4396eb5c9339e9ec95216881175decf0813e7abb1383fa98bf3785fca7a6152e7a66b303d7faad3b3c0a7272c9ffc3a2f953a076d55643a52732d1683a774313891d18d30aab18154730cd00283e63cf54e182ad761549e0e3247a8420c53aa7831c3725cdb9426d763317b4617b313da39bdc3a473a639e0068cc8cf82f496c2b6b5a2b797334ffb1bb198fe3c4869b548a4aa9b82cd6014ccb582625694267eba928cbf1526063761317836b8671f0f334cce84f1c3aeb7550add8cc5ef396cf42f758bc6dba3ddafa3da231fcf5fd8feeea9f26466b5fd2d58ac7f91c9a8939baa95cec39b98db77ab61ededd17c2b16c35f06c9797ac299b513d2f770ba38ff6231bedc66b190e28ee1ed14eff056611eefbec4f25b6b8669ad25feb484dac1bbcec3dfeea406cf1355ad653b5f6e945ac2af1c389d3b30f767a2fc268c5b216a3e19bd48c86f90e58db2d6698290ebf9c897694d735a81f5e22db5302b5d2c74b5dc3450cfc1d8a58fd37a64a1554c7c6a0aca72484fe4a40fb5983ecf5375b84cd50e79711ec729195a537a2d5ee0a175d4dbd0e024b23077e8747705ac92a30731beae7e8308a65c747671b7e2b421fbb7d8f4877c8410a0da8369c5ad0645804edc50616eae6b572373073c5f766476c9e990cf53e4d794d8f852c412d1eedbe580733d66549d83016cb202e11b310fe16f2811f6754e54b7769998f4e302bc2ff295b16d5600bbafab07ec454a600398fb95a57ce6f9b2d80cae6f0f0fdc6f29c11da601c705f2afaff2a9bd1671b5d60a681b9907ed256a6b4bcc9e4b9cdff5d26b4af90eb8566703b8784f0fdcef28c10d12edd1a6c0d5820df0ae0195c2cb94f07a80ac5a9630026303a611233c4cbfa7c4d40d60f21cbe6d4074609087e80f94883a0b444d5695519d7a7970fe480967887352d6dae657135dee647a8528f45b187723e6c57cb91c0ab201e0fd2003be4209b02bc8805c4d3ef76703a0e7fa79805ea52ea1cac460bbb7a1821d2dacd3810dbd962d1b527efb3600baa5bf07e8754a407cbb30d5044df54df80a6161b5c2de1a9c006d80c87f14c4372821f26d2c213c3ec4c3d723d6b5eedc576b79e3740018f4f91325ca5eb24c53f6b64fd698ab45ffd106543780b2edcfd9ea3df2ce109c3f551d229b5a661f76f1c0fd85baf708c1c1453d0b447f924f6978cb976c80773a18e87993125e4f50a37a6b54dc95713680ba1fb4cedea21e7b5d29b2df36df960b25cee38d22241b806dece0017b3bbba361891e21b59695670d60d0faaff463afbc29512282b6b9a1f1648e07ed1d6a6b5b2c668c5a44e0de9e27de1e384d4e1baede09cf06706f00707fa304d71b64535b47f8b95b8282f577faf92477ea77a71063773f600eb0b27f508f9e5538d016b1e0db87d900f08068e476c9f109f7fb0b66eebd118e3aee67d287b97dda5de26ab3ac7f13fc4e26398f18a7f9bbd06f249ef1f8463c6d39170f3ce7190f3d5f15cfd0f9211ea8d5198f3860110fe1d1120f5504c603b765e2a12af07846e5493c54173b1eaa011b0fe49b110fe590100fddb3d5e98c4f41c793267ce229bb8371ed107e5c3b281b47e6dbe229a62be3c808783ccd28523ca3b919cfe151efa898cf1d1efff9ffb92f623ef745fc1787c07722e73f6e5be1dfd46d056e21aeeb292fbf536f8f31dda9b17d3a8c48d22171537fd526d069d32da1d5d03b48043369397404fe01ef9984b3c04a9c3300cef74dc2596825ce1300ceff6403e7161428547f039bc18ae970f6a4c2f955e6e1fcc0249c4556e2bc1ee0fcd0249c33adc4f91ac0f99149388badc4f95380f3bf26e19c6e25ce6301ceff9984b3d04a9c7b00ce8f4dc2596025ce5a80f3134a9c0325ce1ad9adf42f1e860b53f3e940e650817c0b80fc94dabb470d40041d0ce2cf378a67ed6bca2f02603fa3043b8ac1d1a1e0a3a336c31d0de0b20ec44e2ea9ba9d501cafe9c95076a142f9114019a344d947a22cf60175c70df94364f08651c17b00c0eb40098f0ff65638b79bf189bab6c3359a0ad7610057c76cd8daacecdb1a59467d16c0eb44096f709a264f6299473a944106f36d0033c72498332d84f95700b3b349308b2c84f96700b38b4930675808f32f0066579360165808f30d00b39b493009677ac860fe09c0ec6e124cc2410c32982f03983d4c82696387f0f700664f4a989325cc06e7a10671d47f2f31dcf73309edb73f15f29560dab71725f2ee02f956e1cde37a176d11f0ec1b01ea09acb4777b8e0025eebb48687dfba9506e00d6d7877a10c3f55eac67e4831863a970f50796d79712d7c4a4f2b15a08f3be18bed0f9cf33f36e01b385a5da6192d436c92aa349c036fb65239b07abd96d447938b0dbc328511eae293183ee484f8af62015dae1c04afb535be902e16bbe537ad8f20d43d58730b92faef23b76bdb9edabd73b012b1d4089522d3b98eefcdf2e03af16cd217ed5e681e27300c281d94038f39043f81d80701025c2fecc9bbc5547ff370a6d9da47d08401c4c0931bce73ae1940519cefea0921962124e520f22329cb301cea126e124f56f23c35903700ea3c4d9b7b5dece3f8426775f0165e570731c5a665b88f230608923b281127ab4ad701ae14be582b8cdce4b7bb3518393a1dc0bac7224fdb83a1c91dcc0b609740bc5d2bb6d5214ffd0769d2322697f040b7c857a01988767a3ffdd2c96ed36b58ea0ab7589eaa81b3d9a4e39334986f66680765436e67f823a5713969f64aed5470398b926c19c6521cc2301ccd126c124f4e620835904608e310926a19f1119ccc900e6589360127ac091c19c0d608e3309a68d6b7b660298e34d8249e8cd4106731c8039c1249884f33c6430870198134d8249e801470673128019370926610f880ce67800731225cc5c963c7e14ce418bb07e2773d0ca07634a93dbd3c1d03f584c588a920d15c781ad4e31092661fd4e06733a8039351be3ee7cb47337539f4fcdd2442f19be2100df1194f886027cc98e5c5c98b7e4d9e6898ca700d069d9703ec83fe49c0fce0608f3b281b0f89043781440986f767388705493ac39540e9a43d3b3e51ee34db1c15922f2c935b2498bfdc0460bcc716db57199df1c80b2305bb578ba5d676d76dd9a05801665c33926f8b4858d431df7009c334cc249ba76920ce7e50067b14938675a89f3258073a649388badc4f918c039cb249ca41b3693e15c0e70ce360927e90ec364384f01388f340927e9fed76438d7039c4751b73c837dfda142a8c6bf3f41d8f25c4105b410009d938d2da20a7dfdf72c0c7b90ad43db0ee01d4d096f380bbac42f717934a13bc29b54509780c18eb9264225ecb193415d0ca0ce33112aa14b1719d4c301d4f9264225ace1c9a00e045017980895d05d810c6a5f0075a1895009a782c9a0f6005017990895d059810c6a1700b584126a214b1ea54f5cb7b188795f93722392f86daac40fd5791ff8aa122d5a355c4d9808055489c0f70e5789b0d89cd571366e7cda13d8f312735721113a89914de8fd0258e9527376a1235ded4e66a7a70198cb4c8269e306bd0700cc529360dab841ef6e0073b949306d9cb9df07601e63124c1b37e8ad0730579804d3c60d7a4f0630579a04d3c6bde7ca00cc5526c1b47183de7200b3cc249884ae8c64302f0230cb4d8269e3d62b170398c79aed766be336d1ff03782b28f1f69278dd5d6c1a442fde955d4fb9f50ad947ee18005799edad4f830f7bd8b8f5ca00309e54952dd7db956244739b6fc4b3c479ad518468b3ebed7060abab2981f64e99c99be8d075a742d701a05bd39e1ef5f6af741f08501e978d6585fcfba987ceb2c20a806fad197b6dbbb347bb84c5baf342a496f91a15da93408573bc49fb76927626c92c95019c279884b3c04a9cd301ce7526e12cb412e72a80f3444a9c6359f2c2aec56c2fe3ae0b2d4cb9d69639afd732de8dac1060dd2df71bb2d3e2ec47057900a8acd69be4123ec3ca8dd5be0c709e64124ed2ef6192e1bc02e0dc6012ce9956e2fc03c0b9d1249cc556e2fc21c0596d124ed2b975329cc7009c9b4cc2596825ce2680b3c6249c0556e23c09e0accdd65867a56855b638921730fe91a73572c957ad58f25567f558e70600b4ce1cbf4e1bdd153a819ed2e66ccc63aa7dc0dc45889b4457533d64fbf64135c02eb7646311e2a1f42993b900de56733d8c092b20b2c9b6cf03b4f5d9b0cb99d9b74bb281e36f0378276703deececc323b3bce700bc6df4d5cb56cd9e4a950e931a562315da2c56b8f3a137fb9a3d3d00cc0673dd1108078cc9ecb40f68066d376753351bbd89a7002bdd61c61ca6ee7bc18468c9f6695801ac74a749b344a46e8764e5e92880739749380bacc4b914e03c251b5dc960bdf2022bfd8b8f01301b4d8269a37f711980d964124c1b57582e04309b4d8269e30acb6500668b49306d5c613917c0dc6d124c1b5758ce0330f79804d3c63ed11c0073af49306d9cb2381ac0dc67124c1b57581e09609e6a124c1b57581e05609e6652879274da82ac43d90de03cdd249ca4cd23329cc500e71926e124759221c37922c07966363eb733831d6a9fdbb9957908cfca869b76faa1e2e4e52e0b1ca18d621d30e9c297f363546b8a809deea7843c52426e701ee280eba41fbce7fd9e580c40c72e42b064feef3301d8b3b3b16a5d8155df814b9ce74cd59cb2b1653a1ee03da73da7e4b2b619e57e2a94af8372f65c4a94a305ca525eea08607c4df06ef9ba67ad1be4578e168a2d28b7c9fb4b9c639d239670a300ba962a007c9e390e893666fb7f0194e753a21c9006a58a29a943c350aa5aff78507a5e60f6962a84a3a3645baa4c01782f34d7599170b28ecc15e7b7a00038908d0200abf7bd0280b01c252b00de04182fa2def4a75cf6e8954377a9b04c9eededabcbfb02701767c3fef25b6db0567448dd35c3b66f65f130c07809f5c032075622026ed7af1b9551c19c01601ecc46fb127e6edcdfcdb47bcce96980f2d26c0cdb151d72c3765b01c2cbb231a2c4ad71b1a8a35b8412fc53ce35229397b13d62a0ae51a855ef846bf3bab66200f67273bc906d74ac290528afc8c6aa8d225f2fc8e6babb19c0bbd2a4f5bf3328fbe264eb7fef0438af3209679195382f0038af3609e74c2b71be00705e6312ce622b71de0f705e6b124ed27de6c8702e0138af330927e9c668643877029cd79b8493d4e18b0ce73a80f3866c6c77cabf3a7ce86c775a02f0dd68924712e9e79ac8700e01931237998493746d0619cef900e7cd9438bb0a0175e2c38b8dccf549b2cf1da633c8ccb750e29ac8c27cf1928f1bb50891f0cb969c5a1666c99752c1ce07b06fcdc628261f825bcaf8b01a1f7cdb22c6311bad1e6c6b04086f33c767c3c6c5aafd4049793b254abebd7cb9c8c4b54c791561333e845f22202b43bb029bbcc35cb7021b77f8b801a0bdd39c0f36155ab906f84900f37326c1b471aae2d700e6e74d8269e31ae09f0098779904d3c635c04f00985f3009a68d6b807f04607ed1249836ae01fe318079b749306d74b9fe1e80798f49306d5c03fc7d00f34b26c1b4b163f91b00f3cb26c1b47117a4df01985fa184d99d31d92f774734ab24033264a3a890f503c8ee357b15056137926c15c51160dce8abd4e346a986e05cd58b851317610d4ef6a1daf500e4d7e817f82582740780f9d8d00eb65c8cb5ef4a39d56be3772d3b8282e0ebe67866dad843cf0328ef33c905610665ad4e6699df0038bf6112ce222b71de06707ed3249cc556e2fc25c0f92d937092ae8d24c3793cc079bf4938497b446438cf03381f300927e936bb6438b7009cdfa6c4c94fd49253fb6622fb004c0f9a64753328c7d5c9acee7300e74326e12cb212e74180f3619370ceb412e78b00e7774cc2596c25ce0701ceef9a8473ba953897029c8f988493748a970ce72e80f351937092ee9a4d86f34480f3314a9c2358e2067b9c430be3e3edfe6df5fc9eed846399648eafff0558bf478975820feb2696ec4c18dced9010355953ff38302efffd6cb869cf6287da66138f026bfd41365c6295b53609fbe345c01209af4e3b6b64ef06a605c03a7f688e07bc8d9e729d01ca1f99ebb84d38494c56867e1314008f6763278fe93e5bb5f9fbabf300bc1f9bedc040e88648e6c01007d9fe27d968f0c37db97459dceebafe1960ad4f50e21ce7abeb1b185cd3a6df197ea97c396bdb414fa1c23c1458ed93e63833d8e853b71258ec4fb3b9073ccff8b5beb570875e57f51f00ef5326ad68271dee23c3190319ff699370928e4f91e12c04389f310927e9e82919ce3500e7cf4c1a3d9d41b9ac906cf4f46ba0ecfcb949388bacc47913c0f9ac49388badc4f93380f3399370926efd4386b312e0fc85493849976493e13c1de0fca5493849775222c3590770fe2a1bdba44d6f8f413cb24ee6ab00dff3d91801e5016f1696a864ef908fd8072f06e0bdd0fe6b8c542563df6c5157d03cffb529206d9c76fb27b0c8df98029270f49d0c6411b0c8174d0149d8f32603390d80fcad292009a781c9405601902f99029270912019c85200f277a680246c7a9381dc0440be6c0a484237043290ab01c8df9b029270ca8c0c641d00f9075340126e8e4206b21680fca339ee5b36eecdf509f350be42ddc3f6f621e68a36090e5bc4c6a5fc35fb7c8c7a0378af66e373609eef9bde53a34a8cf470b49b85b0edb41dc58354607700b0af51821dcbf41f98f71c5fb940f5f16e3cebdbb8f9d944508abe9ecd45062e50ee73c40b82126de564ef8e349500eb1be6f818d9b8a3dc44500cfc291bbec5b09e0f5ec212a2252b6117002bfd7336337fbda3c41af01d17283c6b0e86fba9b0ae0358ff928d098b1987d06ccfbd20bbbf998d3d0f8335eba75bb981e45460896f9904d34667d73c00f36d9360dab885fe1800f3af26c1b4710bfd7100e63b26c1b47183be5c00f36f26c1b47161e06800f3ef26c1b471986e0480f90f9360dab885fe4800f35d9360da388a3408c0fca749306d1cf0180c60fecba47515a45510d9ba8ade00e7bf4dc2596025ce5900e77b26e124fdc61019ce8d00e7fbd9f00de6d3bd87ce279417320fdf7f28f10d607ccfcd6ab92f1217b5c3797cabf3f84e31440c3fbd681fc61c80f1034a8ca398b790df9dfbd9e0a8dbe4a8532378f0a9e1058cafe9e5e3edd58e009ec16b99cd5f5aad02703f34777314c2463cd9dcfbed00ed47d4d93f5565a4624a3a61c1372e20c1b8165442ff357b9b14c21125b26d522603bcff33b700209ce0202b007e050a808fe9bffcb24cd86705e3b39375b2baaa15a29477c8369100dc8e6b9cbf5df14b9c639d23b6d6c2caab3b00fc49364a58cc916191b058e29d100fa72a61df01183fcdc600096c60a9d6aad77eb5bb413518c0fc2c1b1e771066fa22c05eb08b0158fecd27f2fd3a0bd9a1b65fe78d00618c126138c72f1ba7889701941d28518e0981b2d209930b696665ce5faac7df445b2de552554b7f03883b52221eca121dc07689e192ad296dd6c6899012d0d4ef440934fc263e367e77f00e609f3926e12cb212e7f90067679370ceb412e7f30067179370165b89f35b006757937092cec993e15c007076330967a19538b7019cdd4dc2596025ce1300ce1ed9e86ae68bdfee91cf38f12fb4dbdd5baf06087b66a3ab19cce9c64607da5ea0d9de2b5bd6e87637b9a0bdd212b330f0f12615c2ef026bec4d8970004058d7ba9658ddb67dfce80700631f4a8cc9734587fcbeef006ddfeca20d330d67e3879eae0268fb65a3fc2c38e4068e270084875122f436896c074730b239f65c80af3f253e35c1166cdcbdc0ca91f72f0098034c826963dbf28b00e6409360dab838eb3a00739049306d5c9c75178039d82498362eceba06c01c62124c1b17675d0b600e3509a68d7392970098c34c8269e3e2acab01cce126c1b4717b8abb01cc1126c1b4717b8aaf0398232961e6b2a84edc84199fac83d9010c111f9e8df1cde9adf65a2b86e55c4f23db176c3d02ac749449d36833284b50b269b4fb00ce5c9370165989f3168073b449388badc4f97380738c49384917bb90e15c0b708e350967a19538cf0038c7998493b4314f867333c0399e12a7daf5b0c0d70ab579f6a701c09b900d5f773e7b5ec2f8eaf55dbecf28578aa67abd98194a5cd7de64b5bbcc5880786236b23b96d993b755b1f1dbd49f019c719370920ed2d15927e85e4e320927a9b72619cee500e76493eaf6199433456475fb5740669f6212ce222b715e09704e3509e74c2b71fe11e03cc2249cc556e27c1ce09c66124ed2fde7c870ae0238f34cc249ba611a19ce168033df249ca43e20643837029cd329714e62fe15c0bcf359ebf0e01ec52a9e9e1b37363db7c0f9ab51cc28917a215f17a35ab5015aa60594c0d5f7dfb039cfc492950c24d9f7dfc600cb2d3405a48d1f641e0440169902d2c60f329f0b40ce3005a48d1f643e02802c3605a48ddf11be0c809c490932df57bbb7a04b5cf095468b9c27b63bfaec14673caa59aaebcfa7aaeb8f0575fdac6cf837051dd4239c5f221bd2fb18d8f26c9360123a8b91c1fc14c03cd22498360e36ff1dc03cca249884cd7a3298ef0298734c8249d8902283f96f00f36893601236efc960be0760ce35092661cb940ce6fb00e63c9360daf81189ff0098f34d8249b8f8950ce60700e6029360122e7e2583f92180b9901226be55ef12e7773d733f2351e508e082eddfaaf7380076112558f7d3cd2b9c076a844b185ccfd16edb9d93adf2e802b09698b3a7928d4bb573c0e0c76273b75b21acefc9b65bf912b0d225662ff522ec359115021380e52ea5c4db1f545abb45a5c4dd6edd6f1e6569a1d77e2a889b808d2ecbc63c3dacf9b1ea8abcbe27b3c951006769364ad3e42c1fa43cb571f3aaee20bb2fcf469d8fcd3625d6f936eedb301558e931d968ee6752e7138ed793d9e8a500ec0a53c1daf801a90b01d895a682b5f1d37cf301d855a682256c9d92812d0060cb4c054b38f34406761a005b6e2a581b1b582300d8634d054b38ba4a06f64c00b6c254b084730064604f05602b4d056be3c8d51a00b6ca54b084a3ad64605703b0ab29c1aaed8367b076d83e980cdf5900df1a73c6006cdcd46d0540799c492b9949377d219be81b0646a7d69a8493749712329c8b04ce2e393ee14b92842f1291e5d1ad61de0618d3d852c67d93dd2d326a9cf315a27a69661b1dfb5ae7fc0b9706eb9d7fbaeb31b1cbc962b697ed1257b9bc5a217bbb73976bd6c4f2f992aae3b9497493261117c5cb028779b3f30cff462d0f7d1fab64ee061f65ce6f351dde2290c4c57673de87817908fc53c15b59a38871e20620f15857c1c9fdec068f17071897baaa4f7194ca82adde8973b5d0a4d179a69308c735a178ac173853331ea5a25a6e125a7597e134ca90aaa405b91a5438ef3527e9c5e535316fab3c9eccb1583f99b23c562b05916a8744b53856b5869d37d9792c56cc4b7fd14c98d6da409826fdd2b7cb33753dbd4c9eaea9a59dc0132fa6cfcf0d6d6691e962e46622fefe66318f5f27a496a68d69faf8e1d6dd3345aae4f12f801cd2f15fc7d35d26bb30d3c1b11ebcdde6a4bc2b9c7f6ea5d1f99b2bf5d2ca0e2ce7ff018adc475389120300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/633e4066d5322634b98c17bc5e070875.asset.meta b/Assets/SerializedUdonPrograms/633e4066d5322634b98c17bc5e070875.asset.meta new file mode 100644 index 0000000..b9225b6 --- /dev/null +++ b/Assets/SerializedUdonPrograms/633e4066d5322634b98c17bc5e070875.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 16b91e47d38a5d2448fedbbec2611d16 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/638b7ba182e1be2469240ccd8ec34157.asset b/Assets/SerializedUdonPrograms/638b7ba182e1be2469240ccd8ec34157.asset index b707951..ecf47fb 100644 --- a/Assets/SerializedUdonPrograms/638b7ba182e1be2469240ccd8ec34157.asset +++ b/Assets/SerializedUdonPrograms/638b7ba182e1be2469240ccd8ec34157.asset @@ -12,9 +12,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} m_Name: 638b7ba182e1be2469240ccd8ec34157 m_EditorClassIdentifier: - serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c5545d6c0279046476a404a508428484240ec5242559a10b0a1104808d134938060ef157bc38ebd77ecbd37ec65ddd55dddd5dd55b7b9bdb9eb3767eedcf7ce9b37e7bd7b73df79b9d7fde0974c6e3b73ce7fda9972e7762a15f25fce58f96ba958242ac438b144548b26d128ffaa906183fcef1cb9e7178a1619d6cadf55f2da58519ce649f8373aa748fe9e238f5a459b7c72ad5825c33a757db1a8917fcf91cfd6c82338bb5afed4c8bb7272e5434bc474b140cc170373faa711b1543dd4aacfe5805d3985f2f734b1415ead514a4124a5ead240f96bb1bcd2aaae3548a5ddfb0e11872ab31ae4b555f29916512f65ae54120b8bb613ea0fe104dbeab04087bde54fbefcf9501f1712e7bb10e7bb12e7bb11e73b695985fa6fac53671d1eae9ff9081d03d9adf2274ffe7c9e42d6401d0e423ae7eab048cbfd913e1ea2c3a13a1ca6c3e1fabe8f3de8ecca3ec2905daf8f7f6cdce79eff09d213c206a46f83737fce56c3a606fdec27c67ddfa6d0d3655a6ce8f9a9717d843eff537dbc1d8abb4b0af966dab961237a6e7b43b67bcf481d36ebeb3f43c7103621194d8ead9dde71f240e7227d7e071d9638e78bcfd4c73bea701492b1930e47eb73f2fe6e9b7cd876a448cc97473a3a75aed63aad4f21cb4dff1691984f5a74d8aacf7f868e216cd3e73f47c7108ed1e15a7dfde7e858c6955b69c4bbce88d73d7f14e2e3da39d678c6cc2b3b1be9e985dd7a83dd7aade766875dee9614b2ccbcb501e93cae1dba1c6de872b4a34bde584797bc293e74394678cfe7c789c47c7e9c0e8f45328ed5ba7c49c4773cbab714c527f5ce77d3ad4c87e3057f9938c1607982a37ffe7aadd3461f2c4ff4c1f26483e5c93a3c09c938c9d1a5a08c88ef14746f7922cb02b72c4fd0e1c42cb03cd56079aad6ff45ad53aaf6c8b4ed341f2ccf30589ea1c3d3918cd31d5d0a173aba14dea5cfefa2c3490c7c5c3d77d5e199869e6e5c67e9f3bf40c710eea6c3b3f5f52fd0b1b4a58b9b2fccb64eead565363ae786b8ed4d959ebbeb7030b23dd5fddbf9bc7fb0d6ff53adab97f67f0f1d6e3418bae5f35c7dfe4b740ce139fafc2fd1b18cbbeb814edc5def23e239cf88e73c1d9e6fc473be0ef734e2fb9511df073e6cbcd088fb421d5e64c4dd5d8717ebf3bf46f7b9e721bc405fffca886f2fe3bad94eee2dbcb74da374d80fe5817d743859c4cb0d847efcd32916b97efcb84b85f77ae47283fbe53abc0cc9b84c8797a073ae9ca93abcd29073a50eaf42cf5ca5c32b4462b98463995fbaff43a8fcd9a33b8acfbdde05fd0de1268b2e6e9d738da1cb353abc5624d639d7ea709a0eaf168975ced58e5e3d368bc47ac5bdef93c4fbfab97597eba7edaeeffb5a1fe78978dd01e7bfd1c76ebfee5664d326474ecf627ddc5b87b788587dd773a23eb78d71cd95e59eb3f5fd6eb7c4b5d188eb3614d76623aedbd0f3b7a3735efa936e7a55e8f03a23bdaed3e16614c76647c7be6e79d5f569ef6f0d996e7d72bd21f37a1dde2912eb933b7578973eff1b740ce1ddfafc6fd13184d3757887befe3b428f9b0c3d6ed2e1bdc25eafdd2712ebb57bd17908ef1789f5dafd3a7cc0d0ff011d3e68e8ffa0a1ff3d86fe33d0790867e9708bbeeff7e8d8b51fc2878ceb0fe970a688e5a1a19bf5b97c91583ebe71aef775db8bb0a5a5eb57784d4b37cd329526733a284d6c69f1b0c1e06191986fbf44c710ba3ec20d22d14770f3fb23225ec6e11e28e3fd8c67ef8febdbf749226d1e35f47a54878f197a99f63c6e3cf7b80e9f309e7b0c9d87f0497dfd0fe818974fb75e7ac438ff47c78e7eee58c8be3adccf43da98ed86cb70933eff27e7b92123d1fd6e5de93276db9a6d84bd5d30cf5371bb6d19955fdcb698aadb9f12896df1533a9cabc3cd22b12d8663993706d41b7658daccfeee388aa5cdecbf06d989afb9b2dc731edbccfecf1a71a136b3ff07465c41dacc793a5ca0c3f9f17886a5f33b16ea707f61cf6338cf98e947d5bd4f1be9f7b40e5d5ddcf2fe053a96fa0d72fdef74f9d0ebd8b46dccd3b56191485d6f3f879e794e87cf18763da34377ecee467dfdcfe858da55b4c5b87fb10e6fd6f7ff051de3fb2b8de79ed7f7ff5538befef3fafc121d2e25d25f86459feb6b07e8f0400ff71ea4c3833ddc7b880e9779b8f7501d1ee6e15ed7cf7f4124fad5b9c679373f2f17edcfcf545ef09aee5fa063c8cf7739f10dce25e2a3dacb678df89ed5e1b4d4f1917651eddf8b463c2f1a76dd6cc4a3f3e76037bfdaca977b0ecfd7f86d57ba59ce4b8edb9af5033577d5879067deef376f5de25cdbd69dc759a1c32a41d7bb2b85f7fcb8cab8d726af5a8735c23e3e67f311ccfeb8973e55213a07f7fe8d9075bdb0b701378844df0de75b977317e33c1507552e6f463274de1c7aaaa13ff60174fa0d75eb3e8b0f30d4f521fa1ad75c59ee399c8fbc8cd7bc84e4f443e7207c59cbfb3b3a967a0e73f3610ff41cdca7c742860d31aecf44d7bdeaf58a45af5774f8aaa1d7ab5aafabf5712f11cfaf58af2dc6f5f93ef47a4ddffb4f740ce1ebfafcbfd0313eff6fe3fc1bfafc7722b14edb8aecdd8aee85f04dfdcc7fd0b1b4b7b8de90ed3ef796beffbfe818c2b7f5f98fd0b19433fc4987cf703dfe5f3cdd78ee1dfddcf7e818e2cf35ee1be0dc077f269c7f579fcf41c7b99678fa1bcfbbf6cc45c770bd93d6d7ad7753a55b7fa41b84ef69199dd131e8f2acb6fd73e3fefd533f37c29d0b5b6dc4b7a3bedf6564ea28e31ae1faf5b584aeae8c3c42463adbeb74f8be96938f8e21fcc0c80f1f689b3eb5df97539078df76b9c67d66fa25e89697a358cc962d44956816a54a59b0d0ebf21af7c9f40b6b40743efc827fa355b46d62837cb4c6b6ba65895a3bd326268872ebea964139dd91de15ea7795bca34e092dcc498ae2b1a42840b97af9bf062dcd6995e767a9953db038a74e5e1927337a9d7a6a85182f1dd7430c294b65b4f562ad3caa94bf9b95bc1552ede43bd39904cb78cc67164999ce2aa30679c605da2c8feb95868bd5ef754ad31aa5fd1c79ae4dad796a9459789a0cd7abd8926d6f917fdbe2acd4c8ec3ada171b51e79d254d6e324d97d680f6a5aabcfe7f8a74448a00fafcc21ca718e696aadae2eca494f87f864e250395fc1c2d63bc42969370ae5c94aa7660511241ff36265b68cfdf0eef4962624a5bec6420b9b75516c45378fdf297efd8bcef31afe4259a364194aaa669481ad3528105792539039224a436212f2fb70c1435f1e7d8f0abe66f7116f13bf7d5a9fbfc2740be6afc12132007babf959012f2a75e2dedac520b43578985f2b84a0a02652b94728e92f5f27a527a9581f002853cb9414da73605bd930d7a61b6a1a7af6552412f8cd915870effec04bb1004d3e94011ec6c23a87a15cb580926bb63ee5fd3e4b36b248975aa8d5d2b9fb7b96fa999c2f0c9ce06533bcf6e8a67b1d5a9f4a7114538d746588defd46585f062e9d9ec27cd8d4b6b52fe0ac4d3aa5a53b86f89ca2990879aa50e6db2035ea7ca7b35b2d595949a7d77cfec7b28f63b23f699d7954a953c5baaa8d1b5c3595365893ce7740366a8ab75ca3ef022ab94f405b2ac1eae7d4cb086badfa53d4f2dc45fab34499d2e3d3da74b2f952eb07c95535b2a65f22d29530629d3db664017c300d09d105c604b7235b9b8a243921caa6cf0361aa435b5da4749756feae4ddc673f2f651c93b3245f2fad58c4aca425b5202f1be5e92b20f9d945d28c1fd020aee4a09ee1f5070374af0808082bbdb72b51a46adeac05cbd58b91dd54a5eb07c3dd073be2e52f97a87b4f9da8f6e54ceee61a30e356ccef20ea4eeb8e9a9abe2f4c40779263e5811df3e2d71af7a51b47bda0a0f9cdcd64be1194c179e5e94e0210105f7b6e50f155b4d87e40f67f0aa294d8ef7ef54c0fb699d0d4ea5caf81d53e48af66b532cc48993d1af37b7ce9d9c67cf9cc354e6e45183caa8dbd8f21324fb700ba732e024cd1093d1af37b76edd272f29a70da3735a1f2acae214516a72708b289e3061c2645f51f6a5a21c4146b97af56a1d9bfbcb5f94fd6c518243b79d97825a400bee4f09865a2d692c0494f7237d00257d6426a40fb455322a0b56b25632e6abbe4daa1cc1287a633bc63fa0c11e638e7fd88bf42855a48b928c4baf0255608b6c0855913a9815616287d71952ab313ab86667d6bd2b35ced1b60261a559a2680e1366f7db9f3614d941b6ac0f9973476b7a9bd97e149ded075392770a2a795b9b64e8c48c11c96374dfcb7f49c2bbd0c287d8b29aaa4a4fca4a564b37596aebd3278fc2b8b3658b64b85a6901e7418bf493aca933eed8181fe44aa87a7f06caa21d6f058c577585ee1ce1778c53c52a5c3a53857428d53e95dada27488ce5520fa864ab554e3447e2a68b1a3d27e0a71d1b662b19aa61ceeed48933ff502f52cfc3d9732fbcb0393c79147fb23d8f8c17d43c486a1da8741c6e23a89c8fc60ead5bc0935eabac80bfd7e99c5ca9e28ecff604a935e0e5e8a196d913e54b59d94f50eccb3d94cf4c684fa5583155f226da4a5e4f55f296cb5cb65ccd3fd4ab235854e2ec1ce3a7b48da062de255dcccba5656b54e9af8d957d3f316f4735dc938236dcdb5336ed6ab3a997b2a9425952297f1f216a8cf94b3f568da4e2decd167791c193d601ae430e6ff3a5cd0e940bb3bbc58529ea6cc19cc2851945990aaf1905e9858db6098616604f7bb59a2c7c3c2dbc8442b29705c9579dfc21d99142b27740243b5148f6b1229932c50f9231b6f6427527b3bf56a47db3e6f0e2f9405bc6b0d6f95344aaa51e7ee7ccc7da920692726aaa1ab43c0375f7ce54ccd36c31f74da86ba6caf6a93ab666032c040efe6bf171940e15361d0a940e8b54ced8a0fc553f719552714db7c5d55dc555a95692d4aa36aa45e5c52649db4fac65548531c352618ccdf757618ca784cfb408ff2ecf9ff0728ad72cafbce64a5aab646be487d704caa4d91693d617f8336922257c8e45f86c9fc277a184ef6b11bea9d09ff04994f0fd2cc2d7f814be2b95d2736d290d63b0f52a65e1145eb705e5a34a49f093e2bbd96287f603dedf34ab65586294247c0a2d7c779b707013e1e50bd34dccf1e326ee41415b608306737c6daa928602315d55de55c25dfaeb07d79eb678a12d87575683ba377b5146ed6f33caf17d9d36c16dd3dbdf1eed4dc5bdc816771f81db2367a3c94a156fadfedbd1c78f06fbd83480866f71ec029a8b80110c181bd7e337663ce3e8782653962eb159ea8c9454e821e978295b2b5bc105aa27d9a26add6a9fd64eb16851aac6b0b3395262aefaf1e7b9c1abbdde06a8e1055fdb2849baf829bf6d2a958607dad2303f566742dfacda573a4da3eac7832cf563279ff5630565c6c13633c0fd8471fa1a694695840389bf5838cb1857f9cc7ed3a9980fb1c50c6b69d6c8ffcb64bd0bc32110b6c2d2601f31ceb0c5086de83291dc86bed3db5f1b3a9332e7505b16f5a1f52c4af061364e30ef57ea4bfe6c4afe729bfcc4766ca14cfb5635d1edbf1d9b43a5c60a4b6a54f7f1971afb52c2ab2cc26142d88ff0fd28622b6dc4baab2aa74d5557d0243a837de3d47f3fbce652d5c02a4b3590e3b31a9847f1aab6f02a19e08fd77c8a574dc0a2b18012bc9aaa42a04752258d6a6f222ca438d5da32ad4f4efb53e6acb199236c499c42f54594f43a9b7470afe24efe5c353fdb266bd016d5a8b7c4f6ecf6a3c1629b0690830fb7e4e05c9f39b8d222bc54cd1b2f111df3f606b55d796a8fe60891ec6a96aa59ea41497678890d5ed22e0471006d8b74ef96c99f33e54f99fcc92d22671e61d3ed9276c649f94c4ba8d2d368ab658afc959ea554fe6eb2e5ef6201fd0aa7b35aacd46e50ed588d5ef87f94bc06c7c57a82b25865800deab8565df3d7da1d4099de6c31bdd2a7e90752a61f4915eda5babfd0240d6a463df86251132be27ecc3b8832afc562de893ecd3b9832afd566de50755fa32cbe55c2599b0bcbf116c93aac5899552c1f8b7bac706eb5fc5faf97e8f931fa10cae8368bd177f9347a1965f45a9bd1238d345d99d0db18abd2b531e6b217ebfaaf45f5219d4cef42f2e7521f4a21586741f0b14f048751088eb221806ef24c5532ebb5416d0a45bd6ef28b5585ee00f263e272cac4f51613270ef267e20a4af8068bf0cddbfa135e45f13b9aaa1666a86ce15404383b3959c3bfbbb49232ef188b792ffa346f1525fc588bf06f7d0aafa6841f67113e72883fe13594f0e32dc20b7d0a5f4da5fa09546d69be6e5b9c5079b8e5a841fb804eee38469449147ef2422da5d78936bdc604d22bde6a37c9caa231766dbc4f9dd758742e550bfba0e076d48a4e3ce43e55c5d0bed59db054d0dbe0197c75a044373299d18c7211eb6cb90486604f11c97eb11a823d55fe74556feaf919823ddc160fcc0b9c26022e1f39c226192ad7d36db84dc125b4e07a4af019010537502cce0ccaa2d12619eaaeb3bca8dc8d16dc44a97c7650959b6d926154fc1c2f2a1f400b3e9252796350955ba88c716ec08cd14a55d9e779119ca25e6db309869100f84c827525868f9180b514e80b82825e4781be3020e8a36c8261bcea222f827bd082d7532c2e0eca620355b42f0958b48fa654be34a8cac7502a5f1650e56329952f0faaf271546db429606d743cc5e28a802c4ea0585c1994c58994ca570554f9244ae5ab83aa7c32957cd7044cbe532816d70664712ac5e2baa02c4ea354de1c50e5d32995af0faaf21954f2dd1030f9cea404df1850f05936c1d0b0de248237ac6753a06f0e0afa1c4af22d41256fa448df1a90f4b936c1b00c0776a70fba0ce73c4aebdb036a7d3ea5f51d19d0fa024af89d19107e2185e4ae80482ea2b4be3b035a5f4c09bf2703c22fa14acdbd414bcda536c95057dfe705768abafa324ae5fb83aa7c39953f1e08983f36512a3f1854e52b28c95b824abe9282f150401857512a3f1c54e5ab29c98f04957c0d05e3d18030aeb50986c616f67b0ddad85e4769fd7840ad3753a09f080afa7a4ae52703aa7c03a5f2534155be9192fc7450c93751309e0908e3664ae56783aa7c8b4d328cac3e27526c3862fef2b515c7adb62861c5d4f35e28a5d8c9ea36ca9617d86cb99db2e5c580b6dc61130ca36b2f79119c6218ee4e9b60f04ee04b0b41bd93bb2cc24bd5be05d95c5e3c5dcdf53bd3defe17e3c0171f4658382816d69912f816846d99713a3da8f990bb6d14d59bf6d95cd6e42ea65fac96f6b7676396d72cc5ae54bdab9fbcc4c84b6c4362c9604f87d7857df99217d9545adc4395c3370296c37ba972b83503e5f03e4af89b19107e3f25fcad0c087fc0261c12feed54c5d28ce0553a82076d1140e17ac7925bcb20b7a26c67c6f33a1dcf162ae3bc1b30e33c44097e2fa0e0876d82c17b79df8be014decb2336c13081f18117c145b4e047298d3f0ca8f1635416ff280359fc714aeb1f05d4fa094aeb8f33a0f59394f01f6740f85336e1d0a0fe4404ef553d4d09ff2403c29fa1847f9a01e1cf52c27f9a01e1cf598497aa7d60c2b2adb8bb160dff1d5f8dee775b71f8629abf8d5e3e13feb717f7ab33e5773c6f4b7a582ef679ece634499f62b9d80b36e1d09dfcb908d89d7c91cab1bfc8408e7dc9261c1a34f828639096ef658ac7974179bc42a9fccb802abf4aa9fcaba02abf4625e1af339084afdb2a9d6238b9328b954efa256cee5b0efe17d87d654b586bf5f2b5aa5e4625552fc1b4a32a9437a864fd2603c9ba9512fe9b0c087f93caeabf0d9ad5dfb24986a59ebff3523a4fa605bf4da9fcfba02abf4349fe4350c9ef5292bf0d2af93d4af21f834a7e9f4ac03f054cc00f2895ff1c54e50f6d92a1a2872f09272d8986dd09ecfb4ac33b59b3d44bb9cd628d70be1c07bb22401dd026c355c2dd9b1aceda655424dc83ebb3a5f26c9dcf77d63fa22cfbabcdb23d62f55e62fdb544d5f8f5fa0563a75e07ede6c8bf9cc7412f535ffc46bf792d71735f3f16fd88b2e86f368bf6322c9a607512d37d81c6b176964ac525b1dd9e6ca4b0243f567d4c59f5779b55e7c5ac72f727c4bb13ce89bd3cb25a54e976784eeccef89e878b54dad4482b9dbd2bc6c576f08025fb15c2792709e4c69f89ef050a4bff172b094deafed6a434c6dfff32afc477c45c9ec292f85e8df69d1a3351427e4c91ff878dfc38a284e0747738d6ea323f43e53628e599ce333fa134ffa74df3d9192c098b7d96844ca4d32794b5ffa2ea68babe71ac801dc49c5ab84abd523a5f5e85574add4d1452d75999abd13ea52cfbb7cdb21ae6b2df267d5bf0d76bf5ce414b159d3ae1beb3e8bd94a7aaffdb93037e4a71facec6694987d591a90905e7f0338ac37f6c1c0e66e4302b707ea1738c1f229f5144fe6b23127f7d2a5d1d3e4bd7e1b4057eb4fc9cd2f27b9b96a38c1a0cc79ad8c2cc5569542bff5e93a46b7c8f003f9afe9cd21476bb48d274baa1693c4e5ccfced21baf38b9ad52ef394ceb4b9fcf54bdfb0bcaca1c9b95e58695ce4b914e6968d39656ca73b4a6a9eac3f6a5d31794059d6c164cf5944e33c491f2f62aeded6fe8d014fa92b2afb3cdbe891e5328d1fbf49e46f8393f56fc92b222d766c5a4a4721f8f35deeb02daabd5157b2aa5b2b1fde9f12bca923c9b25fba5b5c4c9717355abd31aab1316c8f48ae7c2d496f1dbfc6bcae67c9bcd3031418f0de08fd425d6e1eb62223295ebbea2f42eb0e93dc7635acd13f0ad2cf0909b952dab52f8cbed4ba9f6dafb35656f21953733d51b7247779cf6ad5ae6df467935b94ca6ee3fb4c713fc86b2b98bcde6bdc8bc69fb5609ee114c55671cdf8fdfaadf5056750d52ebe3855f7e6a4bfc9c1f2b7e4b59d1cd66c51e8615e6f228c78e99cad36e4833ee92ca5253ae1f8b7e4759d4dd66d12e9e2c72da63ba47e0f59a1f3b7e4fd9d1c36647455a3fdca9199d9dd8eb52d486f46858e66dfc0365634f6f36da6bffe9aa0e803de6c350e37f4bd9d88bf2abecb5df3cd586ad91fe94636b851ae184b6a04c8cf75557b4d7923f5296f4b659b2bb4f1fc36d9fbcf91899a8c1ff44d9b38dcd9e1969eca9517a410be48e2924da55171bc3a84ab88bbfa5fa3365671f2ffeb09f7e726a9f389b7db2bf5036f7b5d93cdb93cdfe7a00d9b4f6af94b5fdbc8c11e03d1aa7aa05473073926a6c89b601cbf263c1df280bfadb2cd83365598c7f3c3eb104e23ded92e701335feefe4ed934c066d34c8f2df81c6567ead18ff6b5e2edcf7fffa02c1de8af8d83d4ab14ce07bb13d3ae4d9fe51eb5fe27654911e5d5d363b4c9ab6f12c7a3e3572b942f6c1b956f5f69fa1765c5209b15737d5a61d611d09ad9560224d612ed8bc18fd5ffa6ac1e6cb3fad00ca55d6b00ebb2c3e53b8acbb6362e3b18f59099da7ce3f9ffa1f41cd2fe7162b3cdeec856fabf947d43a9f62048a9f4d272fb91efc7d2ef294b8751adb9ff92e8e6c33a3dcedcaa7c6ae7abb40b62db38662ef56052c96ad370aa8d6bbf4dd5ca2a77a7e5f97adc2b53bdee1cca92e2ccb5713875e689f8969b994b8f4e9415236c564cf6545ba41b1df15f5bb4af26ec4cd9b69d97994dca734c3767966daf3197b2727b9b95e65a99642b672a2fa441f54a33b3fea3bd252c8fb26ca4b719280ecbb86dcea76cdec166f37ca25699afea8da394bd47243070dab3c49addfb3c01676b5740593eca667969bbead3d46b58bd94c102f93f270736db71b6ed86b5640b550fc999452a1d018d76594cbbf4df8e070d1a246388b932d6b34eff5dead1124b3e7c790afe8dce01a49084cd4067b530dfe570561abb636b4ebd0c2b7b6729ffb346e55558c13c57385f15f5fa7d70db9a22386bb3cefb97c2cd97c373d45748b12c495a7d8cfa87666909a46a2f9daa9d4ad567b1c7b43337a5d7624788adb33d0fd9be6d1fafd36cba3b025c3f4b1592e562b670760577be5ae67c40366d4ce9be0fb7b31250a905a4158787d36ce206a9ece5b82d2dbaabb346ca2cc8eb540629b01327a6214998e26bec1c55f0283ffe7e7b7524403ed9250e720c27c8a2b420a7891addbc4d579dbcda48005c86008ee504d84301847a01b79fd0f75f2d054501d5b123e2a876ce6edde67e76390a98a6e4c7318de3c494af3039630a2d11c943f0cf8553ca09a75f521e32171f550867d9553472d5c24e7170659ce00a14b8b5525ab59e3b8d029ea2ee713ce3b3ed77b5a9c18b2860fa0bf2bbca3931f5f750fce2be5614d08ded1c473781bfe6f2f671ec2880fbaa5b1cdc444e700392f29ce9a2ce5057a2e49e6e44eee92e1ddb5ec65f588d02b8d93971709338c1f54a0b2e0ab860e36d17d7aed9f7edab22d2ddde5800980af20ce1e6ba98f68f93f9634b8fe841ae9c21d6ab55f82d4a5eb539c2072fef854ef3ddf0085d495217a7c443712bf1559779b93bde5328f1e9d894a418a7b35f737c49db35b70f4c5d833254d2ae719a12df4d6749a081b5125f3e4e89a54b52926638253e91609f0028838984ddffc7c7f8cb608c7f0f80f0a186e0d4ff7bf28f23ba4b8de1f59ed44b1cc7cbfad9d06148920e897b69b92d804d9b2e096dc4282f06b6a79d380735a77b850967792471be8c70ee9d0d9cb52450ac3ee4ce497c38bb70e13c04e1dc87bf4746e7cec47501e3f9501670a1dc82504eee5894f8c593323e94e3b9509e8b504ee94894896b3218511ec085b219a19cca8912be05b156218c7fc57a8e7ea1920d5b1f2e6c5d10b6699cd87aca83e614ee321bba222e74dd11ba0a4e74c5baf0d6cb9ba0e0ae528e4de277d553bb408c059acd01c2c333d3b35137aed2fd1b73555e628bcd8892adc51e8a50cee85894516fb187219433c3d4cb6175cbd90af95508e7ac30e12c8f24ceb711ced9fc6bcc12717a79f393b5d0b33949b722ac7338b10e4c934b13dd74d622cfe6a83f8e60ee1b2698bb4410e6a308e67e6182393182301f4630e7860926e3f8251bcc9b10cc796182591e4198d72398f3c3049371fc920de67508e68230c18ce2b0db3508e6c28e8499d8b56485c9d6b97c12c1dc9f1366577950afe7cff1f67cd1ebf10c44c816712283a8d7aa8b95c2d9f3840dd6602e583d11acc5d9e81e7a9b53c41b6f3016db062eac95086b657826c4768b600df81842b9241bcd89d759efdd2338e73d07c15c1a26988c39930de60c04f38030c1641cb660833911c13c304c3019872dd8604e40300f0a13cc5d2308731282797098604671d1d52e08e6216182c9386cc106b304c15c1626988c2e3b1bcc1d10cc43c3049371a8970de67804f3b030c1641cea65835986602ecf064c6aadc60f610dd17608e68a30c1646c80d860ee8e605671c21c26928739123f42e786f05e0fbc65039f156852c373ac5e67372eb49722b42bc3b3d68db16bc9b6d66d2c42b92a1b2b8abcfb9c516cdb97209cd561c2c9fa560f1bce1a84b38613e760b20e4df5a15dc666a9840be93a84743527d271227119b6bb0fb0f312669dae4ddbbbe338a37bf53517fad711fada6c540e54d5607e1e8a15e7eb5c38ef4638d770e28417ca9ddcbb4a3950e0993a6f6144776eb3178257d791ae7ea20bc5ba4693cd89aa40300f0f134c46e79e0de67404f38830c1649cec60833919c1ac0f13cc28f695a622980d6182c93870c706732f04b3314c3019fb496c30f746309bc204338aafffed8a603687096614773fd803c13c324c301917d5b0c19c8560b6840926e3722f3698b311ccd6f02c436474d9d99621de8f50b671a2eca15142c4ab15485736ec8bc0062e8f0b9c40e0d676641e4c7cb782310fb2bd59712142b92ebcd36d8cae3adb74db3108ed51dcc5dbf9685cfc03b7156ab80d1e6103378c0bdc3608dcfa8e9ca78cfe0aa46d11ca0d1d39769ebc34218a8b134e47388f0e13cef248e2bc19e13c8613671f8db34cb93e8efd4d6a4fd9e56a8aad4a4d903544d0871c8d101e1ba69973d6815fb6faf20084f3b88eeddde0ae621407d75e42288f0f4f4791d193642be41721942784a7bf13c53d0e4e46284fe49efd76dee40525dd0dccf1667a6cf07a71c1cb43f04ee284077bc1a7dac631ea20f311c893c353a019c723d90af49508e529e11dc06074cfd906303620b4a772a22d9407f0307ca021ba9bdc16205ca775e4b045a2ef18c559ee1108e5e91d8b32eabee39e08e5191dd9d44c5775e14ae16e9dc386f2552e940f20946772a2b42dabb6ef7b191fe6651d9f641beabd05213d2b4c036aac93b36c036a37209c67870967792471be87709ec389d3ddc9c85df4ef741cbdbc4bc158e8d9dea5380261dd18a65cca3a66c9964b2f4338cf0d13cef248e27c15e13c8fbbd7e36e8f17dd5e4f5784eb7c4e5c433d3b4560061e2d62ad25d93efcf108027b4147f681a2ffd59e2908e585e199d589e22adf5684f2224e943b182e117e0fd2dffb8faca04fe602fd16027d312768a8c0e161f72ba19522aa2fe7f540c82e09cf8c23e35007dba8d1f908e5a5e199a088e246e0c7219497856758388aef388e43282f0fcfb070140bf84e08e5264e943d35caf1f2076eadcdd6922bb65c3813a1bb225c4baea2b8e3e03c84f3ca30e1645d53c9867315c27955360a76d90fa6608f42e8ae0ed3401aeb8e046c036957239cd7840967792471be83705ecb8973b4c5f9495ce802b38e0df23ffc0d036f6b95c819eae31e6096b3514e1686392670c11e8e605f978d5ab4fc07538bce47e83673a2f3f7b6ed84480eb7ad4630af0f13cc28be545f8b60de109ef121c69971b6eee31308e58d9c2883adba649c7f645b757922427b1327da1116b4a0449b82d728f655ed7a73ca3e5214df89ec8400df1c9e01b928ee933512a1bc8513250cedd76988e0c4c38e820bc4516aba97f1156736700310b85bc334e8c1baee8dad48af40386fe376d7cd7c384fcd3fb6453427f647e86e0f574e8ce2871516229c7784096779247156239c7776a4cb1e7db7e77984f22eeeb61a2435aa4d49e0a1c56ae13f8c08312e2b605bae5a84c0dd1d9e6e23a3bfc8d66dbc13a1bc273ccb0a1851b22d2b3813a1bc971365b1485c8855adba87558a05f46b1c713fb4756e7720bcf785778083716308b6018ee311dafbc3d3ff8ee2668ce508e5039c28870b7a356685ca8d8d4978b3e4304de182fb1a82fb6098e62f597b466cf39767239c5bc28493b567c486f30584f3a130753459172bb0f58e0e45381fe6c4d94b507bb136ea5ba2d70ce520788f70c21b24e26b8e60d8ed08818781e76975aaa4b09a1864c62e271bd01d11d0473981f64f53572616ece8b5e16721908f850564149da13604f2f1b08064ecfdb0817c0a817c222c20191d203690d722904f860524e3f779d8403e83403e1516908c43726c209f46209f0e0b4846679c0de48b08e4336101c9f8853d3690cf2290cf860524e3401b1bc8ad08e4736101c9f82d1e36906f2090cf77ec645ad437c97b08a17c213cf3928c4e39dbbce4c508e58b9c28611b16988cc0bb14cc153012d496708e0d21db7e056b10c297c233b5cb981bd9a676cf40285fe644395224ceea34c586d2fe1776d8781f617e253cf390517cb3a218a17cb5230b7fe226a38cb9926d93d1bb10cad73851b66f9351c6dcc9b6c9e86d08e9ebd95c2ad32c6f6d55407fc84b65ee4178dfe0c4dbfe5d3219732ddbb2c31684756b98e6cb59bf42ce365f7e05c2f9669870964712e79b08e75b9c3861195a9572e6ebd4fbe5f1c6287a0d511f04eded6cd494e9db7630638e7cc89d3367ac29d9b620bd1d617d8713abf39d8a0d02defb89ee8eaddd10ae77b971999f4062c3d5830b572ec2f51e272e100092e2ef4dcc14f081a306315738bb042f5035608b120a5bdb46afd9188460becf091376b5846662955a2314e50d960b11b20f3891f5542d6d9b7abc31d66789727bdb17a1fb90135db045fc8c338b6c8bf84f43683f0acfe019234ab6fef3ce08e58fb2d133f1be92378aef39ee8b707e1c269ce591c4b912e1fc3127ce31641dea8cec4cd0db8e35ab8ac069a25a13c679e25ee64c29a5469ea9e61d5263f3398f42d07f92ed41e01fe64767ea11d24fb8ddf8e52a62e853d7ea07170afa6ba6d173e30723989f76e4605aa566b25834c74627d970bece85f34184f3a7d9f053dba40f5a276fa5468566e907b2f6e90fb62fedd621b43fe32ff6de3fca19454ff56004f3b330c18ce266f6cb10cccfc304338a1b912d45307f1e26988c733b6c300f44307f112698515ca5b93f82f945986032ae8c6383b908c1fc324c30a3b86e633f04f397618219c515700b10cc5f850926e34b026c300f43307f1d269851dc23a60ac1fc8a13e6f622717996b3a381b316b342016e538320e916c430d6a56c03229b10e4afb3311de2ed5d0cc64e26dbbb18f72194df7424cac4c10f46946c2f129c8750fe8613e54e16945ec6ee9d11d026f4d70cd1a22a09e6aff67ec685fc3984fcb7e19d7266ec96b24d399f82d0fe8e7b21043cec7e11356bcb6ed87c807e08ddef39d141e2af8b15e6acbcd1c696df3a23687f08d344f2784ea79e6d227939c2f96d47ce1925af678fa2c7792ac2f9c730e1641d0c61c37923c2f9a730e164fd6e151bce0f10ce3f87abee64747dd8eace8310cebf70e274b79fa006441251b2819cc205723704f2af610119c5fde0c620907f0b0bc828ee07371781fc7b584046713fb86908e43fc202328adb982d4620ff998dd177afae1063af87cd113a01c1fc579860324e65b0c13c09c1fc77986046d1453f1cc1fc2e4c3019fd4a36980d08e67fc204338a5bdb372198ff0d134c46ff920de69108e6f76182c9e81ab1c15c8b60c277644303338a5b48ac473073c2049371aa970de6d10866a730c1645c9acd06f35804b333274c98bb6a549761078efa48bf6cdd1b41cbe584e66f67d728ae667f05a1cceb58947835116323c3b69ae85e8432bf235126ae266244c9b69a68234259101e948ca3426c282f47280b3951065b25c438acc1b66aa311a1ed928d5cea6ded7014dfb6d81ea1ecca8972a8305f4bf59e4719478bd8f2e83e086cb7b0828d62e11f82c076e7046b7e0f15160bb6a82df4da62efa4a772a518e1b2b9521720b83dc253b346f105975284b227274aff6be1a238c9b619e1ec15269cacaf5fb1e17c57e12cc83384cf4c12ee0c57d46b57bc4e17d77162968025fe358aec2a793c57353e6d6285cc5f87c8fffed2e050f9df763e477d4b7586582f9ad5599057ad6437c8aba059ab281b296fe90d59a287ce122529d6289758b7ac2c51f198672b047ea3a944ad0a6816f4262fe6fdce5ea26df2a839b6396109b96d61494e77a5432371b5503f579574b65524ee575aa296b7a7d2d4d1a255c417c057caf3eb1589821889f8b95e4a5ebddaa517dc08b0cf91e4de03992927671b9d7f409b79aaa5046dab5458197b53ac7407795bce24f9cb7155c6c59c9471fa2592067de49e4f2f13724f6a69db4016c9b1d71af519cbf7e92c728a2a3cbf5ad36c5567d3599ade3eba0c754f912aa550c5fca0edef03e9ae935d65d381aa7a582253de110e7be0b4e8ec0cfff2fe0f4deadf1a6df30100 + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c5545f6f82740484215a40b1814350a921010bb94501504216043219010a2692601c15eb0f78e5dec057befbd63efaebbabbbeeaeaeeeba7ddd5d77fdcf993bf7bdf3e6cdb9efdedc775eeef5ff231f32b9edcc39df6967ca9ddba954c87f79a3e5af4562bea81063c442512d9a44a3fcab42860df2c73972cfcf132d32ac95bfabe4b5d1a238c393f06fbbbc41f2f72c79d42adae493abc47219d6a9eb0b448dfc7b967cb6461ec1d915f27f8dbc2baf8b7c68a1982ae68a7dc5c0bcfe19442c520fb5ea737960575ea1fc3d45ac95576b94521049a9ba3450fe5a20afb4aa6b0d5269f7be83c521caac06796db97ca645d44b99cb94c4c2f55b09f58770822d7438548787c9ff5de5ff8fd0318487ebf31fa363b06e2971df27c67da71bf7f5d7f77daa8f0b74b8993eff337d5c489c2f22ce7723ce7727ce77d2b20af5df9849671dd61bb6d73b36e5cd9661be0c977ac81aa8c3c148e72e3a1ca4e57ea68f87e970b80eb7d461b1beefe73e7476653718b21bf5f12f8cfbdcf3bf447a42d884f46d72eeef34dbb0a9493ffbb9715fb3879e2ed311869e5f18d7b7d2e77fa58fb746711779c837d3ce0d9bd173230dd9ee3ddbe8b0455fff353a86f00824e308c7d6cef39c3cd079bd3ebfad0eb777ce8f70f3ef0e3adc0ec918a5c3127d4ededf635000db5a456abe6cd53a7da975fade43969bfe6d22359fb4e970953eff253a8670b53eff1b740ce1681d1ea9afff161dcbb8babc6fc4bbc688d73dbf16f171eddcd178c6cc2b638cf4f4c3ee2883dd518e0ef9c50ebbfcf11eb2ccbc7534d2b9b41dba1c63e8728cd665a3d6e59900ba1c2bfce7f3e3456a3e3f5e87c72119c739ba74ad26e23b01dd5b86e2937a77dda8cf8fd561b9e02f13271a2c4fd4fa7fefc82ae81180e5490158ae3358aed3e1c948c6c98e2e05f710f19d82ee1d97cab2c02dcb6ebedc29072c4f35589eeae85f38d5915578400096a705607986c1f20c1d9e8e649cae7579dbd1a5c8ad7f26e87067063eae9ebbe8f04c43cf337578963eff3b740ce1ae3a3c5b5fff0a1d4b5b8adc7c61b67560df2be89c1be2b6d72b3d77d3e11064bbd7fd5b07bc7f88a37fb7c58eaeddfcb4ffbbebf05c83e1b93a3c4f9fff1a1d43788e3eff7b740c717fecc4ddbd8c88e77c239ef375788111cf053adcc388ef9bd4f8ba5706b0f12223ee8b7478b111b75b375da2cf7f8bee73cf4378a1befe0723be3d8deb5f18d7f712fedba6ed74d80fe581893a9c2492e506c262e1df3f9d6c911bc48fbb4cf8af472e37b85faec3f54886ebb75d8aceb972a6e8f02a43ce553abc1a3d73b50eaf14a9e5128e657ee909be8bcc9f3dcf46f1b9d78bd0df105e61d1c5ad73ae3574b95687d789d43ae73a1d56e8f01a915ae75ce3e8d5ab58a4d62bee7d9fa7ded7ef117decfa69bbe9fbfea88ff345b2ee80f3dfe963b75f771bb2e90a1db7abe3663abc5524eabb5e0fe8737d8c6bae2cf79cadef77477a5cbd7b1871dd9e8cab77b111d7ede8f93bd0393ffd4937bda6ea7083915e1b74783d8ae37acd78b148a94ffb341b32ddfae40643e60d3abc53a4d62777eaf02e7dfe4fe818c2bbf5f93fa36308a7e970a3befe17428f9b0d3d6ed6e1bdc25eafdd2752ebb57bd17908ef17a9f5dafd3a7cc0d0dfcd1b0f1afa3f68e87f8fa1ff74741ec2993a7c48dff75774ecda0fe1c3c6f58775384324f2d0f0627daeab482d1fdf39d7fbb9ed45d4d27256c0b474d32c5b69b27707a5892d2d1e3118b8759e9b6fbf46c710ba3ec28d22d54770f3fba32259c6e11e59a637bfd878f6fea4befddc7366da3c66e8f5980e1f37f432ed79c278ee091d3e693cf7383a0fe153fafadfd0312e9f7f47f6e1f3ffd076b86dea3e3a74c78dbcd2c66c375c8657e8f3ff749e1b7a23badfad2b5dc66e5bd347d8db05f33c15b7db9651f9c56d8b37187c37e8f06991da163fadc3393abc5ea4b6c5bafe1fe0d68b1e6d667f771cc5d266f677e565a9cd1c30c9880bb599032a8db8c2b499fbea709e0ee726e3199ec9efd84f87f3853d8fe13c63a61f55f73e63a4df333a74fb6f6e79ff0a1d4bfd06bbe52b533ef43b366d1bf3746d5820bcebede7d133cfebf059c3ae6775e8f69d6fd2d7bf47c760d778e37e37ed6fd1f7ff0b1de3fb171acfbda0efffb7707cfd17f4f9453adc9f487f190e5eaaafb9630e07fab8f7201d1eece35ed7f73ac4c7bd87ea70898f7b5d3fff4591ea577731cebbf9d97dae3df999ca0b7ed3fd2b742cf51b32da896fc83a223eaabd7cce88ef391d5678c747da45b57f2f19f1bc64d8758b118fce9f5bb863dcb6f2e59ec3f33541db95ee96f392e31666fd40cd5df525e499f707cd5b976ace6e7b5ca5c36582ae77970bfff9b1dab8d726af46872b847d7ccee62398fdf10d467ed8a043dca72a44e7e0deff10b2a836e04691eabbe17ceb722e32ce537150e5f2162443e7cde16edab9fa631f40a7df30773cd6e2030c737d88cd8d6bae2cf71cce477ec66b5e4672faa17310bea2e5fd808ec116b7dee8899e83fbfeabd3f72ae3fa0c74ddaf5eaf5af47a5587af197abde6e8b5a53bd7dd5b24f32bd26bcbf1c6f5b901f47a5ddffb3f740ce1267dfe47748ccec39f29e7dfd0e7f3446a9df626b2f74d742f846fe9673aa163696ff1b7866cf7b9b7f5fd9dd13184ef685d3f46c720670f874fb11eff2f7ec178ee5d2daf0b3a86e7d619f70dd0f23f35cebfa79fcf47c75d2cf1986b075c7be6a06390d355a7a75bef7aa55b7fa41b84ef6b1905e858ea3262922373c452e3fef9199e73fbadb5467c3be8fbddf26eea0871b9edd74a42575786d778aa97ed6e79f84073fd081d43f8a1911f3e746cda6a3171df27c67deb8cfbccf44bd12d3f4fe59f99b2a5a812cda254290bb3e97e97f7b84f665ed803a2bbc22ff8b79d8ab64dac958fd6d856d72c546b77dac438516e5d5d3338af07d2bb42fdae9277d429a1ddf2d2a278342d0a50ae5efed4a0a541adf2fc0cb5b2081607d5c92b636487ba4e3db5548c95ceedc186944532da7ab14a1e55cadfcd4ade52a976fa9d994c826544e633f3a54c679553833ce3026d96c7f54ac305eaf76aa5698dd27e963cd7a6d65c35caec3f45866b546ce9b6b7c8bf6d71566a64761ded8b9da8f3ce922a3799a64a6b40fb525507fe5f8a74448a00faaeddf29c62d8a554b51e67a6a5c4ff31742a19681c6769196315b2bc9473e5a254b59ff3d30806b731dd427bfe76784f10e33d6db19381e4de4259904ce1354b5ebafdbabd8f7e393fd5b471a2540dd90dcd609a175890579237204d82b709f9f95dca4051137f9e0dbf6afa17e410bf735f9dba2f780274558d5f6a02e441f7b7125242feaf574b4babd4c2d4e5629e3cae928240d90aa59ca364bdbc9e965e6520bc40214f6f5033a94d41ef64835e986be8996b192fe88509bb92d0e19f9d60114130930e14c1ce3682ca7b5ccc4a30dd1d73ff9a229f5d2949ac566dec2af9bccd7df3660ac3273b1a4ced3cbb2b9ec556a732984614e12e36c26a7ca72e27841748cf661f696e525a93f257209e56d59ac27d0b554e813cd42c756813d3d5baf57a695bd256579237fb1ebed9f754ec7744ecb3af2b952af9b65451a36b87b1a6ca4279cee9064c5357eb947de0455629e97365593d4cfb98600d75bf4b7b8e7a116095d2c43b5d7af94e97de2a5d60292da7b654ca74b5a44c19a4cc6636038a0c0340774270812dc9d5e4e2d20e4972a8b2c1db6890d6d46a1fc5eb5eefe4ede33b79fbaae41de991bc4135a392b2d09694407c733f49d9974eca224a70bf9082bb5182fb8714dc9d123c20a4e01eb65cad8651ab3a30572f506e47b592172e5f0ff49daf07a97cbd4dc67c1d44372a67f7b451871a366f49075277dc74efaa3833f1c1be890f51c4b7ce48dcaf5e14ed5eb6c20327b7f0537886d085a73725786848c19bd9f2878aada643f2873378d59421c707772ae03db5ce06a75265fcf61eb9a2fdda140b71c244f4eb8d4db327e6db33e770953979d4a0326a1f5b7e8264dfd2c2a90c384933c444f4eb8d4d9bf6ca4fcb69c3e99cd6978ab2d8234a4d0e6e11c5e3c68d9b1828cacda928479051ae58b142c7e6fe0a16653f5b94e0d06de5a7a016d082fb5382a1564b1b0b01e583481f40491f990de9036d958cca8295ac958cf9aa71932a47308aded88ef10f68b04799e31ff622bdad2ad283d28ccbac02556007d910aa2275102bc2d40eaf33a456637470cdceac7b9737ceed6c05c24ab344d11c2eccee77306d28b2836d591f32e7f6d6f436b3fdb674b61f4249de21ace42d6c92a113334aa48fd1fd28ffa5092fa2850fb5653555959e9893ac9669b2d4d6a74f1f857167cbe6cb7085d202ce8316992759bd33eee8041fe44aa87a7f1acaa21d6f058c577553c30cf662354615ab68e94c15d261b60c0f79b2d49218659018f0525db7eeca7a33ef8fa1f3fe70aa1d1c6b6b07219e25d25ea8ccab558e3747fca68a1a3df710a4bddcd25602950390db291a679ea35e78cff7d94b09bc38bd65fa6cc1447b5e1c27a8f9166f1da8fc526c23a89c9cc60eadc3c0635fa5ac80bf57eb1253a9e24ece2a85a99d6021d830cb2c8df2d9acec7752eccb7dd403d9d09e4ab11154c99b602b79bd54c95b224bf91235cf51af8e60f18ab3434e90d2b61515f3ce99625e222d5ba94a7f6da2ec0789796bca41d825ac833092b269579b4dbd954d15ca924af9fb705163cc9306b16a1b2aeedd6c710f3278d23ac075c8e16d81b4d9d6a60db84abb8b7457697d670b660f57693bca54587618a6b75762130c2dc09ef66a355df8385af8f61492bd2c48560644b2038564624824a3282493ac48264d0a8264b44578a9eab6e67e4d4afb66e7274b3d07da3286b5ce9f22bc9694049d9bdf914af30aaf1ab43c0b75f7182ae6a9b698374fa96b26cbf6a93ab136042c040ec16bf1524a8769361d0a940ef355ce58abfce220719551714db7c5d543c555a956acd4aa36aa45e5c526493b48ac63a90a6386a5c2d8d8355885514e099f69117e4c40e1e3285eb3fcf29a2d692d97ad51105ee32993f6b698f47d41309376a284ef6311fe4a40e11328e1b32dc207150513be33257c8e45f85785c184ef42a5f4beb69486b1de7a95b2700aaf0f83f251a5240449f15d6db143fb31d7522dc352a634e15368e1bbd984839b082f9f9a6e625e103771770ada7e36683097d8a62a6928105355e55d25dc25c64170ed618b17da72686dc3ba377b52462db019e5f8be4e9be0b6e9ed6f8ff6a2e2aeb4c5dd57e0f6c8d950b352c55babff76f409a2c1449b06d0f02d4c5c30464ae055d6e0232593284bf7b759ea8c9454e8a1ef64295b255bc1b9aa27d9a26addea80d64eb66851aac6ca73395262ae2e0ae6b9c1ebc1fe06c2e10562db2849a6f829bf6d0a958607d9d2b06ba2ce84be5975a074aaa0eac7832df563a780f5e354ca8cc53633c0fd84f9801a694695840389bf4038cb259707cc7ed3a8980fb1c50c6b7656ca9fc5b24687e110085b6109728018a7db628436f45091de86ceeb13ac0d9d4199b3c4964503683d9312bcd4c609e6174b03c99f45c9afb2c94f6dc7e6c9b46f5513eac1dbb1bda9d45866498d2ffb064b8d7d28e1cb2dc24fe8174cf86c8a58b58d580f55e5b4a9ea0a9a4467b06f8cfa09c26b0e550dd458aa81bc80d5c0be14af15165eb70e08c66b2ec5ab3664d19847095e495521d023a992e9d4de44d88fe25467cbb40139cda7cc39cc668eb025b187ea0b28e987dba4837b9574f267ab79e0365967b7a846bd25b13779100d2aa91c5c6fc9c15d02e6e08516e1a56a7e7aa1e898b744a86dd9bd3d9a0691ee6a96aad9f0c16976f8890de66c0a411c401b2f657c265dbc4219de23c37583c8194ed8dcbba49d71523ed322aaf434db6a9941c14acffe54fe3ec296bf8b0574989cce6ab152bb41b56335fa058323e535382ed61394c52a03ac55c7b5ea5ab0d6ee00caf4168be9ef0734fd40caf456aa682fd2fd8526695033eac1178b9a44110f62de4194796d16f360d94810f30ea6cc5b65336f98baaf5116df2ae1ac0186657ff3651d56accc2a9654921e2b9c5b217feaf552c020462fa68c5e6d317a7440a30fa18c3ed266f448234d97a5f43646ab746d4cb8ecc5bafe6b517d4827d3bb9082b9d4875208d658101c1010c1120ac15a1b02e8264f5725b35e1bd4a650d4eb26bf5855e80ea020262ea54c3cca62e203014daca2841f6d115e3c3498f06514bf63a86a619aca164e4580b393933582bb4bcb29f38eb5983735a079d594f0e32cc29b030aafa1841f6f117e6340e12b28e12758849f1e50782d95ea2752b5a5f95a6f714ae5e196a306ed033ab9e36851261331485e5849e975924daf51a1f44ab6da4db2be6c4c5c1b1b50e73a8bcea56a0121d40a1db572140fb94f5631b46f15297c9fc0dfe019ece852a21b99ec6846b98887d97209103fc5a6ac9994ebe8a43cdc261826024e1521d78bd453924f0b2bb9c12619eae9d3fdc028a105375282cf0829b8896271665816cd36c9500d9ee547e5eeb4e0232895cf0eab728b4d320cb09fe347e50369c1ad94cae78655b98dca18e785cc18aba8daff7c3f823daae8d536c130a8005f76b02eea0830a8702405fac2b0a0d750a02f0a097aad4d300c7d5dec47704f5af051148b4bc2b2389a2ada97862cdac7502a5f1656e5632995d78754f9384ae5cbc3aa7c3c551b5d11b2363a81627165481627522cae0acbe2244ae5ab43aa7c32a5f23561555e4725dfb52193ef148ac57521599c4ab1d81096c56994cad78754f9744ae51bc2aa7c06957c37864cbe3329c13785147c964d3034acb09d6dd886f56c0af42d61419f4349be35ace47329d2b785247d9e4d30ace8810df5c3aee8399fd2fa8e905a5f4069bd310b5a5f4809bf330bc22fa290dc1512c9c594d6776741eb4b28e1f76441f8a554a9b9376ca9b9cc2619eaeafbfcc0f6a8abd7532adf1f56e5cba9fcf140c8fc7105a5f2836155be9292fc5058c95751301e0e09e36a4ae547c2aa7c0d25f9d1b092afa5603c1612c67536c1d0d8c2b77ac236b61b28ad9f08a9f5f514e827c382be8152f9a9902adf48a9fc7458956fa2243f1356f2cd148c6743c2b88552f9b9b02adf6a930ccb85e1db34e41e29e6af40bb87dc668b12165fbde08792c7e65bb753b6bcc866cb1d942d2f85b465a34d308caebdec47b0c730dc9d36c1e09dc0c721c27a2777598497aaad1672b95279aa5a36e0cca0075fd7031fa91861e1a05858275de0f315b615cb99f4a0a656eeb651549b03e4728594bb2e7f817a4ba03d7bc9bc6e2976a56af381f4d54a7e621b9a48067b3a6c12f695507e645369710f550edf08590eefa5cae19b592887f751c2dfca82f0fb29e16f6741f80336e190f0ef78154b3382d7e8081eb4450085eb5d4b6e2d83dc8ab29d19cf263a9e87a88cf35ec88cf33025f8fd90821fb10906efe5033f823dbc97476d826102e3433f8207d1821fa334fe28a4c68f5359fce32c64f12728ad3f09a9f59394d69f6641eba728e13fcb82f0a76dc2a141fd4c84ef553d4309ff7916843f4b09ff4516843f4709ff6516843f6f115eaa36e589ca4ee8eeb236fc7772617bd09dd03f1741f78cf94204df113da8ce94dff1822de961e5d9af123767487a8f95672fda844377123e8417aa3bf9129563bfcc428e7dd9261c1ab4df88702ddf2b148fdf86e5f12aa5f2ef42aafc1aa5f25761557e9d4ac2afb390849b6c954e319c5c96c34a27f36a38f78589e06bf57e6f4b586bf5f28daa5eb64dab5ec2694755286f50c9fa6d1692f54d4af81fb220fc2d2aabff316c567fdb2619d6307ee7a7747aac617c8752f94f61557e9792fce7b092dfa324ff25ace4f729c97f0d2bf9032a01ff1632013fa454fe7b58953fb249868afe1fc2b2ba7adf44ed905acaf715b075c291aace393cf192246cb030435d999b584d0de7ec9b69db36ba84bb6df15135519026eb63caf27fda2cdf8db07ca16a11eaf5bbcc4ebd0f5acf927f398f83dbe56c3591ac9f4d1bf1b5d4fd8a8358f40965d1f7368b4a098b28b67eec6abfee9f52baffcba6fb8476e9ee6cf0b144bdc6db9a787d6d5f9def4c5bf067c78258f233ca927fdb2c81cd4bece5015e989ca1de986f162b85f3f948d0b1555bb15cb81bd4d365aa22e51e6cdd2279b62ee086129f5196fdc766d91e461a8db37652327db409d7220b131b97d1691f7c2bb19f5356fd60b3eadc8455ee569b78a3cd5989f7a056882aed07ce4adc99dcbe73be2afb35d24a671b963189cd68e0ed930ae1bc5e077293cf24b7b585b7581628094deafe56cfbc6b5e496eeebac4c392e4b6a3f64d47b3919f7e4191ffaf8dfc18cf32efa47b6a399fa6721b94896ce7995f529affcfa6f9cc2c968405014b4236d2e973cada1fa91a8d6e131c2b60333ca7ceaa526f4783ff006f47bbfb8178b72bd96b75bea02c836d12d22cab612efb6db2e582fe62adde046b91a25327dcd76ffd97722fffa23d39e05714a73c1ba7851d56477a130acfe1d714874e360e07317298113abfd0392608912f29229d6d4446faaec367e83a3c3b3ed96f282dbbd8b4dcd6a8c170aca92dcc6c9546b5f2ef9569ba26b7bb08a2e96f294df36d9a4e35344dc689ebd9197a0f2127b755eaedb3697de9f3d9aa777f4759d9d56665b961a5f37eaf531adab4a595f21cada9577dd8be74fa8ab2a0c066c1645fe9344d1c216fafd2bdc9b51d9a425f53f615daec1bef338552bd4fff69849f0b62c5ef292b8a6c564c482bf7c95893bd5fa0bd425db1a792978ded4f8f6f284bbad92cd927a3254e8e9bad5a9dd6449d3057a65732177a5bc66ff3b794cddd6d36c3c418dd93c6df754cadc3572744642bd7fd81d2bb874def593ed36a8e80cfcb8187dcac6c59eee12fb72fa5da6bef1f297b7b5279335bbd21772cc469dfaa65fe6d9457d3cba477ffa13d9ee07794cdbd6c36ef41e64ddba827ee114c56671cdf8fdfaa3f5156f50e53ebe38587416a4bfc5c102bfe4c59b199cd8add0c2bcce5798e1dd395a7dd9061dcc5cb52536e108bfe4259d4c766d14ebe2c72da63ba47e0f75a103bfe4ad9d1d7664745463fdca9199d8f0ad479d486f46858f66dfc1b65e3e6fe6cb4d7fe53551d00e3d651a8f1ff4ed9d88ff2abecb5df1cd586ad94fe94636b851ae184b6a04c8c0d5457b4d7927f5096f4b759b26b401fc36d9ffcf918d9a8c1ff49d933c066cfb40cf6d428bda00572c71452edaa4b8c6154a5dcc5df527d4fd939d08f3f1ca49feced13e7b24ff62fcae641369b67fab239580f2097d6fe9bb276b09f3102bcdde864b5e00d664ebcc696681bb0ac2016fc87b26088cd82dd3dcbe22c01fb95d5a69540bc3d63a6f9d86c94bb1f289bb6b0d934dd670b3e4bd9e93dfad1be56bcfdf9efbf94a54383b571907a95c2f9c67d6adab5e9b3dca3d6ffa32c194679f5c1e7d6ddf1e8e4d50ae50bdb46e5db579a7ea4ac186eb36276402bcc3a025a33dbbc796a2dd1be1882580d135156abb7b4597d4896d2ae358475b9e192477129b671d9c6a887ccd4e61bcfef44e939a2fde3c4669bdd91ad7467cabeada8f6204ca9f4d37273ad17eb4259ba35d59ab77f85529d1e676e553eb5f321e7d43574d949bd7ccaa691d96b19b04d734472cfd5ec59d195b2621b9b15137d95b14c630ac1cb58fbea8f02cab66dfdcc0752fe56a699a65cfb5a859495dbd9ac345798a45b395db5dd0daa2f979d5513ed1d0d2aa22c2bf1376fc36159f66c2e903f7979b0d98eb30338ace599a73c546714bf7404386d65897a23f3e7ee21fe06a913e4a3ca44cf26f327aeb79738bbc247ac84ca35901490b19b81ea0a61becbe1ac8b74c7369c120e2b7767a8f6bf46590deb2d670be703a57e3f356e5bd301676dd6f9ffe8b8f972789efaa029962549ab2f6affd42cdd0152b5b74ed54ea5eadbdda3da999b326b310a62eb6ccf43e9db29e0d261d3dd11e0ae2e5685648998299c0dc69d0fa039dfa2cd1853a64fcdeda804546a0119c5e1e10c9bb8c12a7b390d608b7635bf92320bf23b95410a8ce6c434340d53728d93a30a1e65c59f82af8e05c83dba2541eec8097250469053448d1ea498aa9cecda5800fcac2809700c27c09e0a20d40bd8b385bed70a29280ea87e189144559adbbacdfd82731c303dd33589a98c13535785c9e9d3b5c4240fc13f17ce584e38fdd2f290b9f8a3422f7b8947ae7abb53125c3927b802056e959456ade7aee280677d8f249e71b9f6bbda5437380e98daf29398c67362eaefa3f8257dad38a0dbd839896e27fe9acbdf77b6e3006e252a9a1338c10d48cb73a68b3a4d5d89937bda03f9f73b776c7b997c61300ee05ec94b82db85135cef8ce0e280ab1fc2b56bee7dfbaa9874b77b1402a6827c43b8b92ea1fde364c1d8d2237a902ba789356a15748b92576d8ef0c1cb5391d37c373c425792d6c529f151dc4a02d5657eee4ef6144a023a36251ee374f66b8e2f69bbe6f681a96b50864ada354e5312b8e92c0935b05612c8c729b174494a320ca7242712ec1300653091b0fbffe763fc6530c6bf0740f8484370eaff3df9c711dda59ef07a85f712b3b1b27e3674189aa643ea5e5a6e0b60d3a628a58dd8d68f81ed6927e0bb326e73ba57947096c712e78b08e7c45ce0ac258162f521774ee0c359c4857331c23989bf4746e7ced419e6b17c280bb8503e84504eee589478e17f191fca715c28cf4328a77424cad4350c8c280fe442d982505670a2846f41ac5208931fc49ea55f6863c3d6970b5b11c23695135b2f79d0ece12eb3a11bc485ae0742378d135db12ebcf5f2a67ab5b01a1c9bd44fb47bbb408c059acd01ba14e19d9e8bba71b9eedf98ebbb525b6c46946c2df670847246c7a28c7b8bbd254239334abd1c56b79cad905f8970ce8a12cef258e27c0be1dc9b7f8d592a4e3f6fdeb1167a3627e93684751f4eac0333e4d254379db5c8b339ea4f2098b3a30473a718c27c0cc19c132598e36308f3110473df28c1641cbf648379338239374a30cb6308f30604735e9460328e5fb2c1dc8060ee172598711c76bb16c19cdf913053bb96ac30d93a974f21980b3861769307f57afe1c6f8f16bf1ecf4084ac92131944bd4a5dac14ce9e136cb08670c1ea85602dcc45f7d0df9c22def880b1d83671615d88b02e8ace84d82e31ac011f4728f7cf4573e277d67bd718ce79ef8d601e1025988c39930de67404f3c028c1641cb66083b9138279509460320e5bb0c11c8f601e1c25983bc710e6ce08e6e228c18ce3a2ab0908e6215182c9386cc106737b04f3d028c16474d9d9606e8b602e89124cc6a15e3698e508e6d228c1641cea65833916c1acca054c6aadc64f610dd1d608e6b228c1646c80d860ee86602ee784395ca40f73a47e04cc0de1bd1e78cb06b6756f52c373ac5e67772eb49721b4d5d159ebc6d8b5645bebb6234259938b1545fe7dce38b6ed8b10ce1551c2c9fa560f1bce1508672d27ce21641deaf5a153c666a9840be91a84742527d231227519b6fbf56be725cc3a5d9bb677c76746f7ea1b2ef49b10faba5c540e54d5607e9e8715e7262e9c77239c8771e28417ca9ddcbb5c3950e0993a6f61c4776eb33782777847bafaa92e14eb1a4d36276a2a82591f25988cce3d1bcc690866439460324e76b0c19c8460364609661cfb4a5310cca628c1641cb86383b92782d91c25988cfd2436987b2198474409661c5fffdb05c16c8912cc38ee7eb03b82d91a25988c8b6ad860ce4430dba2049371b9171bcc5908e6aae82c436474d9d99621de8f50aee644d953a38488572890ae6cd817810d5c3e173881c01dd9917930f5dd0ac63cc8f666c54508e59ae84eb731baea6cd36dc722b46bb98b77b51a1a4e7e60b4420db7c1236ce0867381eb83c01dd591f394f15f81b405427974478e9da72f4d88e3e2845311ce63a284b33c96386f42388f8d12ce71b1c4f921c2791c27cebe1a6799f2241dfb9bd416bd4bd48c65959a6f6c88a14b5e82101e1fa58508ace3e86ccdcf0108e7091ddb59c43def388e55be8c509e189d7e37a363ce56c82f46284f8a4ef7318e5b46ac43284fe65e4ce0bc180d4abafbc1e3bd09d9e0f5e682978fe0ade3843752a4ae296a425fa80eb2928875e9d63a2ecc1f20cca77062862f18786d3e1af7fcda15813c353af526e3283a5bbd791542795a7487dd188b3bdbb0dbd108ede99c680be5013c0c9f1589efd6cc0508d7191d39d896eaa2c7716dc65608e5991d8b32ee2efa1e08e5591dd9d44c5575e132e16ef8c486f2352e940f20946773a2b4bd0c60dfad353939c13aaace3641712b427a4e94c62d599714b08d5b5e8f709e1b259ce5b1c4f91ec2791e274e77ff2db75be9f4cffdbc01c458e8d9de006a4058cf8f522e651d1a66cba5e7209c17440967792c71be82705ec8ddeb7137758c6fafa71bc2751127ae61be9d2230038f16b1d6926c9fab791481bdb823fb40f1ffd6d46484f292e84c9ec5716dfa2a84f2524e94db182e117e7b37e8583b2368b6b1f6b711e8cb384143050e0fbbdfb6ad14717da5b42742b63e3a13bb8c431d6ca34617209497476782228edbd71f8f505e119d61e138be995b8a505e199d61e13816f05108e5559c287b699463e57fb8b536572bdbd872e10c84eeea68ad6c8be33e99fb229cd7440927eb4a60369cd508e7b5b928d8653f9982bd1d42775d9406d258f7d1601b48bb1ae1dc10259ce5b1c4f90ec2793d27ceed2cce4fea421798756c903ff0370cbcad5222a7a94fd28059cef64e3918e6d8890b7631827d432e6ad1f29f4c2d3a17a1bb91135db077c4c7c572b8ad16c1bc294a30e3b815c44a04f3e6e88c0f31ce8cb3751f9f44286fe144196ed525e3fc23dbaacb9310da5b39d18eb0a00525da14bc46b1b76ad79b3dfb48717c93b713027c5b7406e4e2b8bbdb3608e5ed9c286168bf4e4304271ef6c19c9b78f7227ee0062070774469d08375dd1b5b91ae42383772bbeb663e9ca3e61fdb629a13fb237477462b27c6f17320fb219c77450967792c71d6209c7777a4cb1e7fb7e70584f21eeeb61a2435aaad74e0a1056ae13f8c08312e2b605bae3a0881bb373add46467f91addb782742795f74961530a2645b56702642793f27ca6291ba10ab5a750fab140be8d738e27e6aebdc3622bc0f4477808371ff0db6018e1310da07a3d3ff8ee316a2e310ca8738516e29e8d598152a3736a6e1cd91c334850beeeb08eec3519abf64ed19b1cd5f9e8e703e12259cac3d23369cb7209c8f46a9a3c9ba5881ad777428c2f91827cede82da41b851df12bf66280fc17b9c13de60915c7304c36e870b3c0c3c47b8a381b5a2260199b1cbc906740704f4094ea0fd33d495a9053b7e6df85908e4935101194767683502f954544032f67ed8403e8d403e1d15908c0e101bc8eb10c867a20292f1ab526c209f45209f8d0a48c621393690cf2090cf450524a333ce06f22504f2f9a88064fc2e241bc8e710c817a2029271a08d0de49b08e48b5101c9f8052936906f20902f75ec645adc37c97b18a17c393af3928c4e39dbbce42508e52b9c28611b16988cc0bb14cc163012d496728e0de13a2e847508e1abd199da65cc8d6c53bb672094af71a21c29b2b59b751c77d8380c617e3d3af390717cb3620442b9a9230b7fea26a38cb9926d93d1bb10ca373851b66f9351c6dcc9b6c9e8ed08e99bb95c2ad32c6f6d55407fca4b65ee4178dfe2c4dbfe5d3219732ddbb2c33684f5ed28cd978fe51ce5649b2f5f8f70be13259ce5b1c4f91ac2f92e274e588656a59cf93af57e79b2318a5f43d417417b2f173565e6b61dcc98251f72e7cc196b4ab62d48ef4058dfe7c4ea7ca762ad80f77ee2bb636b7784eb036e5ce697a6d870f5e4c2d505e1fa901317080049c9f726a60bf8c05183982d9c5d82e7aa1ab0450985ad6de3d76c0c46303fe28409bb5a4233b15cad118af306cb8508d9c79cc87aa996b64d3dde98e8b3c4b9bddd1ca1fb84135db845fc8c338b6c8bf84f43683f8dcee019234ab6fef31884f267b9e899f85fc91bc7f71cf741383f8b12cef258e25c8e70fe9c13e728b20e754676c6e96dc79a5545e03451ad29e33c492f73ba945223cf54f30ea9b1f99c6b11f45fe47a10f8a7f9d1994684f497dc6efc121531f4a96bf583f304fd35d3f8b9f14310cccf3b7230ad523359209a13a3936c383771e17c10e1fc22177e6a9bf441ebe4add4a8d00cfd40ce3efdc1f6a5dda108edaff88bbdff8f72c6d1533d18c1fc759460c67133fb4310cc2fa304338e1b91ed8f60fe264a3019e776d8601e8860fe364a30e3b84a733e82f9bb28c1645c19c706730182f9559460c671ddc66c04f3eb28c18ce30ab87908e6efa30493f1250136984b10cc6fa204338e7bc42c4330bfe584b9b5485d9ee5ec68e0acc5ac5080dbd42048a605318c7529db80c81508f21f72311de2ef5d0cc64e26dbbb18f721947fec4894a9831f8c28d95e24381fa1fc8e13e50e16947ec6ee9d11d026f4d734d1a22a09e6aff67ec185fc7984fc4fd19d7266ec96b24d399f82d0fe997b21043cec7e113567cb6ed87c807e08dd5f38d141e2af4e14e69cbcd1c696df3a23687f8dd244f2584ea79e6d227929c2f9b78e9c334a5fcf1e478ff36484f3ef51c2c93a18c286f34684f31f51c2c9fadd2a369cef239cff8c56ddc9e8fab0d59d07219cdf73e274b79fa006445251b28164db7e625704f25f510119c7fde0462390ff8e0ac838ee07370781fc4f5440c6713fb80a04f287a8808ce336669508e47f7331faeed71562ecf5b03942c72198ff8b124cc6a90c36982722983f4609661c5df4c3114cf82662646032fa956c30eb11ccbc28c18ce3d6f64d0866a728c164f42fd9601e8160768e124c46d7880d662b82d9254a30e3b885c49108667e9460324ef5b2c13c0ac1ec1a25988c4bb3d9601e83601670c284b9ab46751976e0a88ff5cbd69b2168859cd082edec1ac7d5ecaf2294451d8b12af26626c64d85613dd8b5076eb4894a9ab891851b2ad263a17a1ec1e1d948ca3426c282f47287b70a20cb74a887158836dd5463342db3317b9d4dfdae138be6d3112a1ecc5897298305f4bf59f4719478bd8f2e84404b67754c1c6b1f00f436037e3046b7e0f15160bb6a82df4da12efa47bb9528c70d95ca90b11dc3ed1a959e3f8824b1942d9971365f0b570719c64bb06e1dc3c4a38595fbf62c3f9aec259906f089f9e26dc19aea8d7ae789d2eae63c40c014bfc6b14d9e5f278b66a7cdac45299bf0e963fc1d2e010f9633b9fa7bea53a4dac11cdea2cc8ab56b21be455d04c1634f061fa4196e8a9b34489c71ae512eb9695252a1ef36c85c06f3495a85501cd82dee4c5bcdfd94bb44d1e352736272c21b72d2cc9eba1746824ae16eae7aad2ceb68ad4fd4a4bd4f2762f4d1d2d5a4572017ca53cbf4691284890489eebade4d5ab5d7ac18d00fb1c49ee3d9099f2f2fae8fc03dacc512d25685ba5c2cac49b62a5dbc8dbf226c85f8eab3226e1a48cd12f9134e823f77c6699907bbca5f5872c9267af35eab396ef3359e41455787e85a6d9aace66b234b37d7419eae1912aa550c5fca4ed1f00e9ae935d65d381aa7a582853de110e7be0b4e8ec0cfff2ff1ff1ba3f0056f70100 serializedProgramBytesString: - serializedSignature: 21bc55d1a31dc48818dae7132615b43834af6fbb3e97f852ebba6e3a16656dc047c0d70412d48099e1ed183177430191b7451c18feea0cf62dcd0acef4c2a903 + serializedSignature: a9c38b9f881b0415f46246b35fcdab43f03dcdd221958f1d91a75c366d85214715396c858b869e0e21cc1d8c38ef60706fbf64fd36c3c9b317c4fee637480704 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/6477aafbd3dd3c44b93da0cee7ff6506.asset b/Assets/SerializedUdonPrograms/6477aafbd3dd3c44b93da0cee7ff6506.asset index 0140c32..0c562fd 100644 --- a/Assets/SerializedUdonPrograms/6477aafbd3dd3c44b93da0cee7ff6506.asset +++ b/Assets/SerializedUdonPrograms/6477aafbd3dd3c44b93da0cee7ff6506.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5d897f1cb775c64a5c91b4ee9bba0fcb126549dc25a95bb2245ea2288912cd43b62cd9d24a3c448914699292a5b449ecc6b95c37e9e11caddbdaad7ba6e9edd64d4f276d9236b17b26ad73b649fc0fe42f68f1de60b86f3178bb33bb83e50c6bf2c7050733f301ef7b0f0f0f180c764e4ac89fc46ef97141748b165127fa44bf1813b7e57f2d321d95bfce919bdf2526643a243f33f2dc6eb1b9c09df0b32351233f3be4d1a4989277de11d7653a8ce77bc480fcbf43de3b208f207750fe0dc8ab1215f2a63ed12ace8b736275626501880b78d3a4ca4b805c892af9d92ceecbb3035829282485a756cb8f1e796612cf8dca4abbd75d124fa258a3f2dc7579cf84189198d710b1ea79899840993099afd26af9374ffe75abe3052aad52e7e0ff852a5da4d2c52a5da2d2a52a7d4061f590634897a9fc5e26bf4fcb7f48e55f50c7cb555aa9f21f53c773541dabd4ff54aeb95a9d1ed7cad84ee473f376a86b2f92635a7ead3aff843a5ea1d29d046b3bb9d63d07e9c3eade4b3eeabe92c84bf9dea5302e936369698977d5f12af99774e00a96b147d3fb1e91b5074877abf34f927c7abd5eb7943aff143986b44ee55f51c715cedfdc17d5f16a721da46b481daa54ba56e549d992cfabbc1a95a6c9f569956e5069832afb2a398674a34a1bd5f98c3a5ea7d2f5e43ca47bd575d708376e3ea4f5eafc75adde75e4bc9b0fd7f53bb2cc7d55bb8eb63997d77d242fa9d2fd0a67805ce3e6437a409d1f24c792f38a7e0dc7bdefa0ba7e881c43ba49abf70dedbee5e418ce0f2bb95ecf23c3bcd26448ded0708a9541bfff9076ff21956e16b9beca270715f744e136b846a547d4bd3745d6de213daae51f21f9903ea2cedf22c7906e51e961916bff6e79c799f24e68f9c7493ea4c744ae4f70f19a55fe8886d7a2e537937c489b18bc36953faae19dd4f2db483ea4ad1ade56c203a4ed1a5fed442e484f697c9dd2ce7768e71f2472407a5a3b7f5a3b7f463bdf41f2213dabd56f9b56ff4e4dbe4e2237a4e734fc73daf9f3daf9b3241fd22eadfc2e953eaaf26f93635abf1a91ebff4c369f93974c6084744ab6fe8c181729bc087a4abfa19c7b67e1200ea0e7618f28209a8362a764b8342e010c91541fc66953d2f3371823a9358905a4de2df89991570c23e898b7882f788a80ca8dc8df0112064ecafc768c2221101c9667eaa47286f1aeabb2fbb8247f73512ec862476428392083aa3bb228c0bb2aabedbdb290481032eaf7744b4c27a21d95392ea1e3f278046bd8839f77b1a60358fb0e993785f1f56de9429b657a0f4bf3ca3e21ff3795d9ab2833d7d11cd872f94ef8ecaaa9554a03b54f614cf89e4666422340fdbc31d50c2b52d046122f7834f11e878e934962e7e060d42365899cbc0691c218aedbc3607019bd129aeddbe17bbf0c7af3c9626606d4bd0e25c86af8e5cf35bc51ffe3254793b9a2358a148666eb0b88968f58c0ab4dacf220e4172199ac48434575fa1326fa71f8d35346fa9deb86f1bae00a98873d53ae02129ba63b5cf06c4332b485a988313c3daaaa673ed32b8fda251d1edda5a1a04aa4dfdbb916128153c01c9302aacaad80c21e279f02aaa6e5ca2a007ecc0c56330c16aa03c7e05c138338221bb2ca609fcc7342a3363c3b8cfd2978c50179d5942c69423561ee4a97bf4e9c02bb8375c8cf344ce6ecd19836b33c1f598649143bf5e4b45161d206ce41f596d19ee1dc18a264e4b5c12d1a02e15dba4b3113bd1089aef10857b80a1c8549138538acbe352306ed628ee13194e6cec58667d88ba665ce129ec2e9da541e130ea7668bd5080f7f2a9366352f4135dbaf0c6714f30c469106a3586a602e0dcc2dd3c4aad6c4028998c22a4d168813e5c3336681234816740ee15bdf72df6e75059ac19e0266505a5d3913a83269051bcec00c6b255c6dc01382b9ba2fc0e9d69dbe780f5a9bcdd040b40fc60bac42f5dba906a7f66a93da97943f447762db11917fbc675629447b9b7c4788354c8458a80e1c830f981844bf393a230da71bfb877e44b2192daef1edd6d622e3f579ec3abc3a735a9a6feae1c0e7ad13dee1c5ffca1f4f8f56cdf7680b4ce0e03bd71b9c4d7ab1d721c88f678f7b3bd1557c910b4d56079df20ccc6c1437ae83478dab356e4eb0ad76a3c83731117454b7c8c05e1ad8db64a81468c8a39a8dbc6a1673e09b0de02220f81293def149da64c4bccd49d4c3a894742a64cf030fe9361878e47dfe56b49e034579a052e4e0ec6fa9498bb826e26ec4b4086732f2cc6338ff34157a2ff2a0419789bcbadc86ba3c5c942e4b9786d3e83253a387d00056e47807fb7a8b5fc8b7f8e59c3bd96e70278980ee6485c9107111cd73560dd1efd3ca765c703620ce4b677e53388f99bc4361f77115a877106b01f9d7957af39795df3c7708c3cc01f4428936e1ff99ab7d2960cdd41c6c1e3bb1796c36d6cefdaf5962de906581aec6b069984a4832c39487b18468c9cf35cb9526fbc685531365b1ef1ed12ace48e2729d9233d0a853573549acfb2869bbe892f2b94eea1a3e1fbf85c74fa3e54daa2ec8b9cfc5ce6fc13049eb2f4cdf8d7add4ff45a8eda739a5b65727b10b0ef11de80fddd84c1ede509d85773e07506f037e70403af318143dc06f37bc671aa0e5ec383af318143380b2bf87c0e35600222c050632d5764bdb522d771143618297cf658100ad773e08d06f0cf7f79c78120e01b38f0bdc69abf793c08f8460e7c9f01fcedb7de7a2408f8261338ccd58247f03c0185c3ec6c94a79c4abe9ccd5c39074ce52cc0eb26a5cbc8a0db19906e63589608d15a9052b770d41d3437ca407ad9ca811f32839f0802fe20077ed8dc1602816fe3c08f18c14f04027fc8040e3131acc2d46362af36f3c4c4db4dc8e092611da7a7b7d381e7f3c03b4cc0106cc342c652c7eeb51cf8f110c0771ac053d815bd4fcc6424ef4cd000de204604eef220f7fa36598e13ff75636438204bbd8bd7971abb9f30d98231f28155a6b58963a270446b531a2e127ad8643610c134fb31f6ddbcc9ece2da674ba9ed7337e7565acd0e315008b487036f0b01bcce040ec10eac94b613eca44c2d17e3bc99596292fb8c31dce99e76038b290c30f32d2629ad46cbd42f339c3d250aad6529ad78ae59a73933ee08c18ceb39f0d321803770e06742006fe4c0cf8600be9703ef0c017c9f091cba777899a0d4ee7d3f077e3e04f0032670e808e03586923a828326df86a3bbcb567d5ba9735ff9bd18bcc551b0e3ddc9b372c8c437b0d25d22f061cebe7b42b0ef231c786f08e04739f0be10c01fe1c02f84007e8c037f2c04f0e31cf8e321809fe0c02f8600dec4813f11027833077e2904f0160efc7208e0ad1cf8932180b771e04f85007e9203bf1202783b077e3504f0531c782604f00e0efc5a08e0a739f0eb21809fe1c0fb43003fcb810f8400dec9810f86007e8e031f0a01fc3c077e2304f02e0e7c3804f04739f09b2180779bc0613617d6a47be684611ecd3c02eb9d0e1eafc85f982d9e92a91b52421e0de8e88abf2073c93d5c6d474cb57d85ad2dbf4ec1a93f3c26858053af7776cd53f0fca035a1ab5f82dfed5d6f71a5089420bae9e574336ad24d4bd1ba9954b67507ffeb94778dcb4f787cad6b2bf7550dfd2cbc1b362ccb0922631f27e36d938ca74b96312373c112b36ff566b05c47eac932487c819378cc2471ba68895bf0ffccb4a5f25205a9fd635cedc74db56f656b9f3b0fd52453d0c4fd00de826b7b1c7210291fe7a47cda24659f7027db9d8500cdf214d89b93d78ee58fcb5e1106fb934ac2665cd53995478e5c9d06f73461d8ea458e8709130ffcaa68937dba3dda28b6bc51e16ca530a6264e78cd07a9ff135cfd274df5879198b94ca7c663e8117be4c5d7c4146a35bb534031fd5a18125ee2249c3249f89a66a98d86c530fe96c2388ce42e88f16fcb1c234ed9eec4157da0647a58e5e751d59569d45225ce9535888e2e733aba63d2d1add074945b634763bd12e33ef67e53121d7a874c11bed4af4d17dfcf3cc97176d7c4d949ade5d2683878dba577e73b134e04fe1427e93326498f15d9a3b62b6f5b6a7f1a44b22b9c64f7381dfaa901d5678718c5fd4186d5e63b7ea5f0735d1049af7292de3749dae1d35a3bf1a9db14f68f8e8c9988d86c8693f77d26798fb39aed44896e489feec8dd25657b668665bbc6c9f61326d93a7dcb7616fdb7774ce5573adb725fe7e4fe4993dc2d3e6db8157b62d831290a76dbcfc9f87e938c177d7824af6e0bdde1e78a7c3c84e9b706383e3e60e2e3214de77a1fe346f467315e1942eb0f27ca1de4eaf941533d9b7cc5f167312e9a9411d10de3d83e78045f7cb433c4c9f7ac49be064d3efa2a4231fd3e871544821b9c04cf992418988e71c38cf5eb94342071ee2ecf5034c4ce19299dd99f64f724e2f90863443dccf1f4535ccf59d8929b641dfad127ccec58f42627db874cb26df7ed5d5dbfe29d0f2ab61fb8c5d5f4f952faba427a286f5f37c2c9f8e170b431145a4d47b99a7e249c9a5e0bada6b7b99a7ed454d346dfb1618f1ca74f183c4c697651297f13095821de86ed1946fe5de8b3e06852a4f0ed91f4b42f2efcf21b943f2af9049e7ba7bd69e1e5c01f13fcf6ab83425f3c55ec4e9ca52e78a6d2f95fb0eddd75b45249e46249a6f1559ad926e9c741ab739556e7a4f08d9e5d455a53e15abc404b2bb8852fedd14d757700ce09e765ce84b3373ddc9ec18658109fc60526fc3d08e06e4f19c28ec360544e0733a10257f8a94cce4903ef3f6d939c4a24077662ed57cf93e240cf3b849e176dd2b30ee90113a513b2e392307d42d65d053a821d533c687c290134562635707dc635acfd930b71cf7bddc5d8cfddc3d7b02710af5ff7c2f85a60d46afe33d4366b3d9ea8d6d0fc6a4bb0b96c5060eeccd310147ce2ff797f9d86fefa934042b7dbbda11ff9599b7e6435eaf48a0acf6ecb8bf2058332f0d46b50ca66c9d5399ea4c68f78c5789373c429ff5c94c8ac8f2199e709993f1f25321b6248661721f317a24466630cc97c9490f9924d32570522338e1e730fa1f25336a95c84453bb29f54cf1b6f89ec9a036bd42db4455d05a1eed3e5b0c2eb2af499ca3bbd6cd10a2b6d51b98950f99999a532ee0d7a1da1f2b3d1e968ea6349660b21f317a344661ce3c93642e62f4589cc38c6932709992f4789cc38c693ed84cc5f8e12997b6348e62942e6af4489cc7d3124b38390f9ab5122737f0cc93c4dc87c254a641e882199670899af4689cc833124f32c21f3d7a244e6a11892d949c8fc759b642e5564a6d580d2591cd28479e3f87c052eb446e02a5b04ae2104be6693c060d36b716cd8270895bf518e863dc49249ab7fc5e600b2da1699ab0999bf1925322d4e6d5823731521f3b7ca412637e5a6bf026d914c6b53c1cb0899bf6d9bcc5eec5a9cd587d9f576dcb7ab5a2373892d32e711327fa71cdd8fbfc9e03806e9db0895bf6b93caf5869edcdf9b72169bfb295bb4a608ad9fb349eb32adb9cf9e469e2414fe5e391ab9bf18338e8dfc38a1f2f336a95ca8a88482079148171b5e53b1465cd216718210f7fb33d9d1c43f9a9c4fa8fc83725039222f1a512f5fccae07b8ad84ca3fb449653552e94ade8515b81b43c2aa09617f544edbd35fe68bbfed35112affd82695cea263d8b0f89e3c1cb119c2acb045562521eb4fca61777e97f4c5cfee1a09957f6a93cab55a13ee9fde0771b635e5dd84d2d76d52ea0efdd2f8e9a4d9411e6cd030a87d479d1b437ade838a01ad3584d63fb349eb4643a3cf7da79ddfa6ddeaf4ee4e5bd41e22d4fe79392cb6f06445afc8dd58cca223986f8bd6ed84d637cae15be928a7f05e241629b5f6806c01a1f42fcad1f3fb9ba18c63cfbf8150f9059b54aef1f4fc4ec734dbfafd3421f42fcb619b7e9712c48fca0642e55f45a799c791caf584cabfb649e572913b63ce6f601bbf9e7c2e21f16fa2d3b4e3b846a89950f9b736a9ac3534edd23696b7d8296db545f71242f7dfd9a47bafc1726dec766b550dbb6da9e161a286376daa618b410dce881f2cfab6388d4f2ec767dd63903984e02f46276288e36b045b08955fb249e562a412a6529e412a33c2ddcfa25ff9616be4adb545de0384bcbfb749de4a913baa1ad6ecb04c0d7aa32d22f71122ffc1b6c72c66bf95dc6e297e5dd24a42f0976d12fc80709e38394f39b33350f19b7daa22947da51c9d8cbf61401c3b992384caafdaa47297a1bf0ee31ba22cfad46db6485f4a48ff47fb3dbb69bdd26d758935f2aced949020e4fd934df2cc2fb7348bb8bfdcb29610f8359b04baa111e73dcbf43686b5d0a89610f9f5a81019c718730721f2ada81069f159923522f71322dfb64964b0c0288e3b22ec2554fe7339a8e42732e8de4616fda4b51e7b33a1f25f6696cab85be54642e5bfdaa4d25d7ce34e6b4c0ad8e4734c4ce1d72c7abfc621fe8f8deb09b5ff161d2b8de336130f122affbd1c54ba569affab7de26895c70895ff119d1e3d8e56f908a1f21b36a96c345069e38b372dda73932d25ec244af86674bc6c1c7746da4aa8fc4f9b54ae2c4065dcc7f18b0891ff151522e3388e5f48887c272a445a0cf3ad11b99c10f9ada81019c70991c584c86fdb24b2d0b652b3618f8f870899df891299163b1d6b64ee22647e374a645a6ce6d6c83c40c8fc9e4d32838d92e218551e25547edf2695fa0c53f611db6c7d69a68e50fbdfe5a0961f80e67b73ce22b5d6de9c3b48a8fd1f9bd46e50d43af3a093b39ed81584d81fd824567f2f7902b39d2e69764de91d16b3e60bdfd2f0b5153f04b3a85066511be0fd93da44a1af44a9f5bdff536d111bc339dfd4b654f10e2b0e3bf14e586294c134fbad6da9cdf2b2043c5f0df2e59bf93181f5fc683f026a13e61637129abd84f1357126490bcbc7dbde823c5a49c152d1592dffbba077a57634d3d5f885827d22fb1585e7e5c54ea3829fe4ff0145910e59a8d70000 serializedProgramBytesString: - serializedSignature: 55639e37f3f48d4e5bb0c9df137ec542b4c8abcf0314db2425b91d95c7d4c2fdce75a54935da477bc01c4c425b4d5832a32f2d522e1cb1ebd18050bf22f1fd00 + serializedSignature: 2ed463ee70b7450e02e01a4482777ac27611448c7486654cd786a9eb2e0e63a1d92317d052869e82b8fec30ab8c8f2359af2101f9613510bf598bf2b9b02ad0b programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/6563634f1ad07a544ae7bdd00ef6b840.asset b/Assets/SerializedUdonPrograms/6563634f1ad07a544ae7bdd00ef6b840.asset index 4285afc..5cd30e7 100644 --- a/Assets/SerializedUdonPrograms/6563634f1ad07a544ae7bdd00ef6b840.asset +++ b/Assets/SerializedUdonPrograms/6563634f1ad07a544ae7bdd00ef6b840.asset @@ -12,9 +12,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} m_Name: 6563634f1ad07a544ae7bdd00ef6b840 m_EditorClassIdentifier: - serializedProgramCompressedBytes: 1f8b080000000000000aec7d09dc4fc5f7ffdccff2584322caf62821e1115a88b247d9b28bb26f65cb632d95a58556ed9b44544452492a44f6487b1149a5d2ae5dfbffcebd733e9f73cf33e77eee7de6e2fb7fbd7ef5e29aed7dde73e6cc99e5ce9d4f2c47d8ff5935edbfba894ea2b9a82dba8a8162941869ffabb9fd1c61ffef8620bea318633f87d87ff7b3d36a8aec0c25e57fd5acb2f6df6dec50ae186b971c2706d8cf614e7a6731c8fe771bbbec203b246307db7f06d9b9ac845da8ab68213a88f6a28c553a034437a750ae8ab364bdac82f6dfcdc4243b7590434a0ac97192cad87f75b653729db4113669c8d74b5ce2546b849d36c02e33460cb731fb3b880537fc249c7f08f731553da7a9e714fb4f21f5efb8fa7741f56f9c5fc6cbdaf5f6c93b1de505ccebec3f49fbcf2115bede0d17fd45856f70c3562982511861dca89e33d473a67ade64ffc9b28b3f1a80bf5fdacdea79ab7adea2f2dabc3e1eaee24ab8cfd8f94ae67c14b6f5620d75f3c7fe56f96f53cf3bd4f376549f3bd573565ace3ed0eb5dea79afc2efa7e42d4061f9ecafe21f4361f91ca0e21f476189774f5ad60f1b54dcdda86e8584b79e17927a5ee8d6330665ef23f907aafc4fa0b07c0e52f10b55fefb51bc7c0e56e98b5058d70658b70fa8e7831add82fde8743b46c97a52851f52cfa12a7e310acbe76cf57c58a52f21e93333a44f43f974e97332a43f92217d6e86f479289f2efdd10ce9f333a42f60ea0f7a1da6e29f5261b0d5d6a8bd867975eda4c9324b493ae8fa047d7aac0dc23c51c55d908e73fe8d39807d3f8dc2b67d271b213914a38db75d9d341d97b6884b3915d70ee1b4235cda132eed15972d840bc668ebb521274dc7a503e2525ec57544381d09978b08978b5c2e595d08178cd14178ecd549d371e984b85450719d114e67c2a50be1d24571d947b8608c4ec866214dc7a52be25251c5754338dd0897ee844b77974b8189c44ee7a2f232ff32240ff5c9543ae5d503f1aaa4e27a225e3d09af8b09af8b5d5e054b30bc7a125e3d84c717a4d229af5e8857b68aeb8d78f526bc2e21bc2e51bc1632bc7a135ebd84c707a5d2971239978abcbe64014ac365c02f5da6e29f21587d10d665c2eb97fa102c4807bf5495498731a01a930e634075261dc680539974a53f51834957f6264e63d2610ca8c9a4c318508b498731a0364997f30f7bec1d0d3eec0937dc1ce61c0bdd70e7ed2abcc80d776fadc24fbae15ca1c2cd5cfb29d25785af55f29e55ed3344859f4361996fba8a5f4eda7a286a6b35eec786a1b86bd5b339ca0f79107e0c6ce97995bfa48aefabe257a0b0e40f63e4126f7ef19448cd573ed9a3e24aa9326faaf0b1ea590cf1f49bd7425b802f783a2da3c9d901ca2f73f316f916e9523e8b04945f583d9fc990df0fa3887a3e6b8051d4d5e331657df24e477941ce736efd9d7c323c45b5e5e5e93ccebf2d171fcf2153f14915ff0289cf62e20b30f105bdf129bf341c7119ee2d131ba1caac44619b67f1520463a4caf722e28cf1207d2929374ac5bf84ea84cb8d62ca8d26e50a9072a399725790720549b92bbce5201e7cb41396e92fbb753c06fad972375cbc49005bf24b83be9e2bbc7d3f573d61fdb10a85657b2c50f2df5538d0f66309ced80c38877c38be28bceb6ef057a0db71c456c6b998259ab8e54ac03c27a1d2c7abfcabbd784e3cc65be3c53b16fc3fac6f6f13def5e14b8417a42f25e933915c9c0eba7a5078d7a36aad18bb8791378da45379304ebf40d25ff6e68b3da4d25f21e1b53e6d730ca9f30455661d0adbba2b09e300a7bb55197407e951e90ef038dd413aa7bbd5de7cf9d21dd475b648fbed04b1c92b15ceab282fc4cbe70ce1b5fd192e4629b0f924c19b28bc73d58904f76192feb07ace411c41d78fa4e36273509c7cdeae70d6a3b0e4555378fc6d8ad764227732e105f6b00185b1bf01791b893c58236af40fd8291f3b5b787c6cc9fd2a7d4d385d8ab5797525d6a138a513f12a8a83716b128ac336a0e63e0dfbaa34b0b3ab501b4c22b67115b159d8ff0aa87b4f3d60ecc6f5d8a8a9078ca3576bea718d4f3dae45f5b81ae587345c8f4dea5980e04f21f598a2a9c7e680f580717daaa61ed37cea311dd5632aca0f69b81eb0be2848f0af23f5b8cea01e30cfb85e538f1b7cea7123aac7f5283fa4e17a60df83c77ce58bca1c22f960cf6f350ae37e08386bbc3865d732ed0e7be9cb98f49b893ed59e79ec16c2e316c2e35695bec9cb3fcf18b501f18072387db3b77cca57ad4061bb7e2764937cb308bf592a7d1ac15943700e30767507d1134dbf93e849edf5c7ee223c609f1ff47437a3274887b17503e201e5703ae8898e81f70aef18782fc1bf4fa4fdb6ae3ca4c3ba752b93ef7e22e77e22e701524f9887be26d27d05f6f7b78954df3a11e6eaf99d9bbfaeb0e711bb99a79e7385774e3dd7ad5bb926aefc72a315ce0e95fe28c1793403cedd3e1cdf10deb939ec89401f992fbcf393f90a738f5bae3cace7606ebec06b6b80175b40f0d678f12ad451f9617ef992f0cef7de24bc207d29499f89e4e27468839785777ea96c2eb68a91378da4537930bfdc41d2dff2e68bad16def92584d7fab40d9d9b3f26bc73f3c75cdd5584b526a7bbb733e80ed2a3d21de071ba83744e77ef78f3e54b77b09e057b7e5fa4c74f551ff1018a537d4bec14a97e7f2ef897f794dcc7d3f99d7fcb34985f3fa1386d4161bb7c25d8ffd271dca59e302f85beb25078fd38e875b746fe1e540798977e84e2605eba08c5819c27d3753d67ae4afb50a52d46b216a1fc9086db6baf7a6611fc25a41ee0bf33d503e641b81e302f7d4ae4adc7529f7a3c8d643d85f2431aaec7c7ea5980e02f23f580f1373ff5807929de970439b0cfa8abc77348d633283fa4e17aec53cf82047f39a907ec4be7a71e302f7d5e538f153ef57801c97a1ee587345c8f04c15d29bce33b9da7bc28bce33b2d0fe960879f78d3c5a71a3d7c96aecb49b09eccef3c00f8c07b80358acfd3286ce739b9850f1670005ffe8af08ecfaf288cc92ee793977b65c7d60aeff8bc1fc563bc355ebc2ae083608cd928bc3eff73148f7137a87c5b4958c973de27c8f8752a7e3e0a4bb9777bf3892fd5f30b95ff35927e80c8a1e95fa9f86d3e3aa6e32e70dbe2e5760ab4e7d7a46dbe49db4c55f51ea3eadd041b6cf65582fdaac2eeabf27d4bb0bf4b63e79ccd60c3b8bb9e60af57d8b037f63dc1fe218d5de31782cdb5fb41af6cb6fdb793306dff4da4fd37b95cab1e8df687fe4adaca09ebd629df28999b85c73fa5ec678b48fb952d28af7c6e15defebbd5c5ad01be2d49646c135e1fbe8de06e27e9a077bcc6513a89bd4e74feba2bbbda4a576e7598bb40dbbf41dafe47148f39be2dbc7d1ec26b956dc13a18da7e07e1b143e900de13fee4d567aa1d9666e007e56692f4a5241dde937fe34d079da6cabf49da1fcacf21e9141ff65437137c6887b784775efd16d11badcf5c920ef260fe05edf00eb1857788adbc2b3cebfa14fe3c920ef83f7bf3c5de139e7979e83efa1e934efb28add7fba45eef937a7de0ad574acf1f7871f3b4ef16d4beb69d5683fecdf901986744e1437e501c760abd0fd925d2fd7717ca2b9f1f0aaf0ff9d0c5ad0d67169344c61ea2bf3d04f72392fe917ae279e26ef5dc2bbc7d77af2bfbb4bf5db935e1ec16f4d17dc4a67f44f198e367c2eb4320bcd6c5ad0deb3bf0211f131e1f2b1dc05e38ec6f64f221941f949b49d2979274f0213f78d341a7a9f29f90f687f273483ac5071fb293e0433b7c2abc3ee453a2375a9fb9249dfa106887fdc416605c075bf95c787d08e0cf23e9d487a87c31f011f9f5215c3ae743a05e5f927a7d49ea75c05baf949e0f7871f3b4ef2ed4beb69d9e06678a8e840ff94e7180ba531ff2b548f7dfaf515ef984b16f250adbb8f59a08af0f0119df11fd7d4770bf27e96aae19fb16715073db18f499f9286ccbaed3c4955b07f671a18ffe486cfa47148f39fe22bc3e04c26b5ddc7a7026077cc841c2e3a0cba3ee5a95ef57af3e591f42f941b999247d2949071ff29d371d749a2aff13697f283f87a4537cf0215f117c68879f85d787fc4cf446eb3397a4531f02edf02bb1855f89adfc26bc3e04f0e79174ea4300e77761e6437e67d2391f02f53a44ea7588d4eb0f6fbd527afec38b9ba77dbf46ed2bd779f05ecbc487d0bd873f8577efe14f374fbdb53e58bf09af3ff94b787dc65f0ae390cbbb7e1daf6ce71b0a997fb5170fbead48e1adf1e2d587739ed0bffe21f6f8398ac7b8ff0a6fff87b05f1d33f95aa8fb7f22ef990f25574261ffebe48578f9b4bc7a8b2b8c865584d7d7025edc6b67f138c14d9074c5271e1379f61d539859a44c16c184b383d027c16efe4963c693284e86e1fce0eb286c733933db9b1fde7db3f93b22feb81ceda7d01fa14e704e71190aa33aa5da7f83171fbe0f8b1722f6f987f0f8b97861af2dc40ba372f259c46bbf4ed8aecf59c3bdf9c0cfc78baafc3b50583ec1e65e20fc8e213cdff0c63bf90a79cb401d9cba621f0a759b89c2d8ce69f9a461f98266e5536d97dff2ff852b9f92b72d43fe4d19e42dcb67f97fcdcad3be10ba7cd2b07ccc5b1efa606a8c03fda831aebe5acb1a8d71ca37c78b8b743f58abe24a289c15286cf7cd73ca937cc585c7073861c4277e2cb1b35751bc7c1653e96f12dc62045fbd773fa79117272587e04079e7bc10c6798ba4bf82ea1ef6ac3a9c73003d9614de71aaa4d2d94e977b23d81f546ba3f8715edd019e138ff1d678f11ab5f6e238ef8afcea00f24a93362dede2359e4bf295216d5a86e8fa7862631fa178f92c45da1478ce46e9282c607fe56de1d503e095257a2dab78dfefcd9fe207df1dbeecc549e19e48f8ef46e5303f9aff6db71d1baff5d6db532f6c838093a97dfc6c4cbd2f8f97431820afbcc83ba7527b7bf10ac233a78a9747f1f25991e8b4a28b711eecf125095eb6f0ce15b2096e65925e593d4f421c3f507127a7e39c748893cf4a0a673d0a4b5eea3c7d6a0e03bcaa10b95508af5384770e738a2abf93c8db48e4cd2538a0ff645a479096b2bbf2c2e3a3cfad89caca7cef19d8c19faa4d827c0bf417c9abfc4ebc2ad27b55f5846fdde6a3b05dffa6d037d55a237e6adeb2e25f648f689e994aff0f95d5a4cb2cce5fff30e9aabd614e61c1fcb6860f97f919b8d4f0e762c5837181f9bd40df17a5fc19face473c8dda80c4c5e13bc2f9286cebbeb9faced38275c9a979cb5a5948269ee3437a01bdee53e970d6e11f265dc9b3924c3acceda16d8ae46d9b3c5ce767e05ac39f2b6d9b3c5c8b06e42ae74876bdee50fdc22ae6866f037bf4eb5bad1457f846733e0acbb6dbe06235dfc96359c5dd3cadb343c8ab49e4d574e5b5a8ef62b568ed83a5ceb5c66ba1b669a3e26aa7e39c7f4bccb9c88eb17f83ef46b790fcb0e69dae91a3bee58fe72039396eb99605899c69281dcb81fc357939cebfed3ce703a63a531faf43f4564761a97b2a5ac19e0be8b9aecaff0e0a039e8c7f97e09faee2d59937ab0449afa7d2df27f1f555bc1a13ad63517e4897cf3384674fc6094b1cddbd2717124ef35158ea46100e67a2765265ad92284d62ec24d867e5d5792b380f0476522fcdadd53e91f653380db0a4cce3845757bbdcb2ad13842fd396e74f44f964ba3a3b95f2d1e8db0cb8bbc6b9ef279f7a045ef1b355fa6e14cea75e4107297f0eef4982f88606846703c5b3a3d2e3401f2cf00d0d11e7962aee1c827b8e8bdb4678f359304f3f4fe5df83c2f279ae8aff0885b14d3414e9fe6ef36d03f316a85f23e1e92b71b506b4ca68cacbf8b22e4e0bb01f68cfc6a43e8dddfa5c3891c86ba269bf13501a6e3f28d35478fab91396cf662a7e2fc9df9cd4a9b97ab6f0e677ca43bce451cefb8cb754f93f267c4f24e9fb54faf92abe958aff84c4c39d499f92f8d62afe3312dfc61b1f6f8570a01ce493cf0b18bee549fa3e6f7a1cddd3e2b4b76c3738f7077ee74291eacb17c25d19b3491a60499915505ac03e67a97b3e2c750f491cee72d98fc2f2d93e2dcf526b1c2b1b7168afe22aa7393fa4be5bb04e76c38fb40dc0a78a9bf77af5aec43ac50dcfa89eb96ceade04e527e31d545d3e47615bcf6d97a3fc32fd0b6f3981be65f395a7d67056d50cf9fd30d437cb5635038c090aa3ba0186f219d6a90618eafbc538dcc1f3250a4bec1a06d8ea9b48eb34030cf03935f38f61d54258016cc4ca5161980bc21d475b50d8b6c90ed037d4fcd2aaed8f9fc2055fd189e07652b8f0eeac4d305c183f33e6f3ab33cc41a1ce9d09b7ce2eb78e6a4e689d8eeaae7c47c789040bead98560a97b9952f901ab4d9abf555778c74f3fee301f053fdb5578f795ba2a79eafba78b604fac814a87bb95567bf1e2dd08de1a2fde45d0fea07f34afd4b67f7da217b8236a0b0a4b5cd8bf6fe2e563c1dcf4400019d08e3d888c1eae8c4ea083a6e16504adaf6f9b9d45da0cee915a89c292e72cb7cd3ac19e20b419dc63b5da8be7c463bc3504ef5b9e9b7526699f5e4477bd5c8cceb0ffdfc42bdb82b9f857040fdaa237c1ebadf0e0ac40d30c780d483acc976dfd4c00fdf8f952b566156550bb55565ce0eeab15282c9f702fd72a14b63977a9eecaedd297e0c0bd57ab5118b733e06d2178b08f7ea786a3ae4e20af2f91077cfaa9f8a788fc7e9abaf72718fd50bc7c0e20b639c0e5dcbd26c181720385773f58ad7de283906c98ef0c4ec739e910279f7047d57a14b6e57685bd8e93bc723df72ada6dd33da1cf171f2a3cfbf279f85f46f8abbbbbe2c354fcd70807ebf672a2a7cb5dbeddbab87cbadd8270e413eed759edc58b0f27786b085ec8faa7e401fe086ffd443f2f4e2a7d29c19f89c2325dedb17709f2ad31f43df4de41a8f9401cee3d5a81c2d2be56917c70cfd16a14c6fa079c75282c9f23914c35d6c6c71099ea4ea01e7548be5c223397c81c43648e51cf2b904cf0d9e3884c75c74f8f05241fb92b283e9ec81c47648e53cfb148268ce11389cc89aecc9e6549be4944e62422732291a9e62ef10969998e9ee513eef65885c25226d8f5153ef9e413dd2fe2fc5b965d88ea08f1b8ec55ea79252a7ba52abb1f7185785c56e5bb18de25810fc6b6aab36d35bec5d1de96f36f89d583f0bd9ac854f97a830dcf443620f37d43e2617fe545120ffb43df9278d8aff98ec4c3fecbf724fe5c12dfc0dbfee22ce1f1090e1f9c7e364987f908dcdb311ff195f13391ce6e7475d16b3b290b6bddf749fc54e1ddb7b916c5cbe70c952ecfe4dafea9d71e127f1071c0360ee97026b79137ddd9ef91e9f0cd4963a203b8cbe22ba453bf74d843c7fd16f2e23b71a12d609f6335ca03f1f2d95ea4fd32f29ba20329d71ec5cb6747520ed623179172edbce552edf3320a433919be86a4abbb7504ac875e22f15d99f86e4c7c7726be0713df9389bf98c48f74edb12fecdf807ddc24f28e5d608bab511e6c8b60ff2b511863e79072e4de98b8ba37267e8bc83b77ba351d17bf05c5c927dc03b31e856db997ee134e9fe82b14561d22ff7622ff76f5847b61e6a3b08dd767861bb6cef1da560a6f1ab101b516b01a21ee4a86d558a4e6f3d23d629ed6b90cfe74bdcda7d2c9fd3371d5e7ac2648beba1bc66a9a967fe5642f4e6aee73139267e7bb548da3ce9866eb63207c5baab3199853e4d36652d8a79372e40e9d38bc4f88c866fa9572eb3a10d658f589fc9036d34f8d8196da57171d099ea1cda478523ddd4d78aaef74e370d7109c69afcbd8d8ab288c6d02ee1202b9f54879729790935f3eef47f5b9dfd54dff6588937c5e476ce55e140fe5b0ada87564fc3e847d9f8b3da028c1062ccee7c01d46f3090e8c87cd99f6bb9eb41f9547fbe4f522789f44edebe851f2594eda1dfade03080f38dc40f4f9008a974fb8cb71250a27d2d816bcefa07586bb17699d011fde292e43f9699d41af1a3f649da778cc253a80bb9f66a230f24f03b67879727eacaf9a4b3873115bce1032f7f1f83158a7e4d38fa5b01b9072e41ec8389cbb8bc88f0d52fb9f4360efaf21911fd28f0d567dd052ef60613e16951f039e562b069f8e7d549f73487dd4b756a9fefe33c2a1b678336f8b996c6910e817d69653889d4c51e9b0bfb898c4f766e22f61e22f65e2fb30f17d49bcba2f7618dcdba9b379a84b3e6d3e857d0629f70869a347a2b5f9a16fba6d324ccd37adf3191e73090f156fb54632e7aa38784f61e35ebb24984d0c853341dcbc59e94fc05ee43324ff34921fbe3b84bdc9c524ff74921fc6ec814c7e3aceaabe2d0631f9af27f9d518260633f9e9b8a3c61b017b9cb04ef75b6b3c24f4b6f790bfed8d5e42708ed05ae3f2b66edb8f065dd2b93bdc0908feab0b8a97cf792a9d7ccf159f8fb8cc437116f2d51b51587251e7ff879720e516a8fcbfa0306e07c0dbe2c51b5e9dd42dd3bae30e22f731950edf8df627e5215deda758173072c8bc228f8e1f273aee8ae2e513ee80db80f0a43c7cd6437d5b6ba1dfd371fa9d4c5b2852bee0fd05280efb1038dba1ecd06acfd4655186ba3c49ead20dc5cbe7625297459aba2cd6d405de4f2cd1d4654986ba7460eaf25486ba2c2575e98ee2e5f3695297a73475795a53177887b24c5317eadb695d3a32757926435d9e2575e981e2e5f3395297673475794e5397c12a6db9a62ecb33d4e522a62ecf67a8cb0a52979e285e3e5f207551f7c159e83795e2ea1b48ab0baa8bfafd93f8ca745d3e5888e2705de05cc44fde786e6cbd0c7c90dffb17d843041f0af7ca3d8dc2b65f93db1812f38a6c95ffbc80e55af01c2cf82d27d80ffccdcb290e7774aef6ca8caff2c6c75f46f1f2097782feaeca81cf5e8dda6235ca2b9f707fdd4a14b6f98fd94f3841b9b55e7b71c2f20977cecd476189d383d46135c97f80e45fc5c85d47e4ae534f7ccff635284ee655dfb0435d002b65377007a9b29b2bd606b09b26a4fdd793f65fefd62357ddeb963bc35b2ebe81b42dd4732369db0d281ecb59e99533f65b82b399e06c46f2653cbccf00dbd88af407185b08c656142f9f9b08974d0c1728f71a693bf88e05ee419b8fc21267038343ee458babf72371b8030dbe6f6d42ca41fa57def8941d6cf5da412ebcbf6d4ada1aeafdb4f0d47b9c3aef386eacb71c6d0b56bf9b4520fd8edf497076109c1d487ed0b67e43e8db1abe4bdf46b86c63b8646a6b724f5d5cdd53377e1983c3b535dccf066ddd949483f4806d3d0ef6b1bab9e10901ce97a5f4f996469f709fdb6a9407e2e513ee735b89c2b6cc09304e77f796d39de981b4549de0ee3955a7097ebf5335d5cbd7823d1fb8276e190acb27dcef361f856dbe13d579f689357d64d16f75e0eeb62d282cb160bc6e4238c11d7107942c588b34f5c9a7ab1bdcb7b50c8571b93f99721f9272ea1b8e38dc0ff5330acbe76ea2abdd6efd26e17798181fbe3186b9d5c5285e3ee10eb70d282cf36d26f25ef7cabbb22f236f2f230fcef57fec95974aff246de78ecea40c687768db7d693bbd52b563aa9fec43e57721599026650639e70e7dfd33a2e7cfd413ee4f5b85c292eb0697d7554509ce7e95ff2f1496cfcf09fee7fef857c15c0fce419e97aeaf76fe07f2bf20f2bf504fb8d76c210acb72b08e3820bc6bfa038a873ae774d57e520ee6ec5f91725fb9e526d7f196b354bb5baa1d2df8ed4e3bcf74b81b0ef64833d435c5a1b70a7f4d387cad38289bb72e21b22f4dcbbeee6008d9c93466a07691f9973369d806d5198738dcb5361f85ed7a5cad7479b5dffc5f6158ea2c64fc5b85b50785e5f33bc457ed05598d509a2cb39960f655e9df134c351788ff8030bb12cc1f18cc7e2afd20c18473233f22cc6e04f3470613f6777e2298b0c6fb19617627983f3398b007f30bc184bdac5f11660f82f92b83097b21bf114cb8afe87784d99360fece60c29ec42182097704fd81302f26987f78317d6db58d2a03f784cd4761db56af55ef7fae3dc8635983bd58299bfd8b70071ff637e2ae7e83d71a928eb3d4b757ceefdd17426564dc3091f633e0ab2f23f2c1beff21f2e1feaa7f91fcde01e5ffeb23ff72221ffac27f44befa965f4e1f53f22f0926df29c3c91f4ee4ab7e93b0bcf29db07ce2fbc22e0d283fe6237f0491affa58224ee42b7b492490fc3e01e5277ce48f24f2557f4c2489fca47a6621f97d03cacfe2e5fbf6af61aa3cdc81f6370adb759ade9ac780b2963a939b28a830fe4161893145f199abf28f26e587a9728b08a742c2b3b7640d41f5c6e94b788ea9b5028c3dd09fe12e1bf0415d49fa1524bd1b491f43d2bb93f45c92de83a48f25e93d49fa38927eb1375d6c16817d68aaeed097b8ba5fca607723e5c70b7ddd217d82d0d71dd2b9ba433a5777483f4e04af7b19d7066f48b8367883dfba52cdf5138545baff55567170a7de6a9407e2e513eec85889c2b6cc19d0074f22e5e03eb1575118732846f08aa97a6c77eb716379c20f70e13eae65282c9fe4deb1440922679557ce8deafe8b1bf733724a1239ea3bfc04dc4b06e7aefa9172c79172c77aeb9f4a5fcac82d45ca972272fff5e687b55d02df9928edc06fcd0fb673b26ac3266e99195d7cca40bb9546b6a3de5324e05eafd5280fc4cb27dc0bb612856db9b7ee2738500eeeed22ef3b52e970af1679079b50dfae27a0ff6f4078f259017157fb85898ae9b8440514279f702fd37a14b679cf1cedea6be602825509619d80e230d64614964f743f97f36f89afce3fdc549060652b8c5f5018b70d9cf5dee2c5bb29dbc5bb15f6ed617e02faac4c6cae2c910be96a4fc6827b0f68bb9c44daa52b8a97cf93bded02ef6353e5ab08afcf503cac49484727ab38f4cd84534ec6c13718765ddf8373489319aea710aedd50bc7c56255c0792f2d50270adaae15acd87ebd50cd7ea846b77142f9fa712ae8348f91a01b89eaae15ac387eb350cd7d308d71e285e3e6b12ae8349f95a01b8d6d470ade5c3f55a866b6dc2b5278a97cf1cc27508290ff7cafc47b84e41bc946fb3a6a238757edd42bf8ffbde1e2f76caaf97161ebf3e03bedff39bf3c2de0b9c51bd2e2de713f86e15c64772574d42dd55739bfafeefb6b92a3f7c5f342a5d0feb062f57ebc6b49c07a6f8f084fbb3d47bb704dc9db40785e513be6bfe0885b1bf83bb90d6a0b0cd7dd62f24bf3a4398507722c9a5442a8cf25b33bde512eace9d2ccbe59f806f8375ba20efbbf3e82289e4a8334bf08db15f5ead2cd286963ad39480ef9df6a0b07c9e8d6cef6c556758f7a8f64d34487398d59be8b9012adf2000e7e97939a7b8dea6701a12aef06dd66854cfdbbdede72bd3af3fcc524f389fedd71fc8dd45097577d11def7af3a5f2a373b1167cd3b0cd9bc752e7aa13f0bdda1e1496cfc6698c44637f1e77cd60789c17824753c2a3a97a36413c9aa832777bb152f1ea7b80447382a5ced7279a212cf86602df7948f9b708c1bf1591d94a3d5b2299ea7cb3752fe10ff1f7a9706b82a5fa4502ee33fa088525177447a375bf6b43f03ed27ac00dc3fd17d6836e38c87d3c42ede124da201dc1fcf982749cf36f1b5f364baa8f7179d4bc28e5ff107642edd5c03db109388bb405852506cc9fc0af3d84f869ea93c2055fda96e0b655b8efe61357f9cc443b82dbcec5bda7a6375f60dcb92adc9ee0b657b8f0fe734e485cd07d0782abee48ba17fc17ec19417ba8ef1bb362282cf3c339f5f90178d8b677ef76820f7c2e22f8ea7e9c7be17cc4bc7ce2abb3e0894e045fdd9393caff68303d42bb04d6378c59e42e9c84ba0be781de2eef07608c53df6adfd742c5c35d2cb096ec8ae4c23aaf5b3a2ed115c5c9a7fa4e342b8ec2121fd65eea3b726bae377f6a6d0cf9ff0e61c79837ac2b7b6878f744bc7ba038f9ec4e78ab7b6dee1fcbf086ef58d790fcf07eee9190bc61ad79b186772fc4fb6214279fbd09efdeaa9dc9bd3d19ed6c76807c36dffb02ecab58d077c0c66f54dce05b9045282cd335f3116bbe1b7e42ed01586aaf217129e23782e0c3b7235b50d8d6c583702fe24884e1971ffa866e4ffc4624bb90174fa03b2bacc744e0b1cf5ae8e64ddd3b0def93e00cf7e3c2bb1fa4c3f2c35fcce0ab33d8d62243fc255e7c2b5be9a52f6aabcb509c7cf6f3ca74c2f2d91fe9b0b28a1b8074dd1fc5c9e740e1b5ff816e1bce6ea497eb60a2fd47eba910edb48cd1a3c24ac07727cb50583e07a33aa9737909f4be273118c5c9e75052a7a16e9d1e2ea1976b91df17b79e0951a7e5a4edd499eec4304ddb0d534f72d74e02d2f1fddde0bb703f198ee2e413eeca598fc2763de7c077474389dc91c2bb37a2fa736acc2377efa4f0fa3278c3bc78bef5b475f4f0686f7d2df81df5fcf419386f0efbf568ad981885da42f9c5876b2299f2f9bc81ec9521ece345af7da4eeba4077e5582fb97916c2d8076b7674278ca5f66f76355161980f8c43f51887caa17719d66a142fc3b3d37ab94bc9b4d4f75409b47e86774373e11dbbb20b310ce5954f7817b80c8565fe57d2729e81df9d51ef0ce665ab3c6b09562e6ac7dccced98188374b40ec5c9303e37ae7463ad4f632d82f76eeaecd80bb0eedae88637c37bc14d6e7807dc5ba3e67cf3d4986ac1d90ff8165b73b7b3b555a5a9f984f3bbdb2a8f548993479da3b5d41cd7da96cef3686bf7390fceb2beeec5b376a0bc3047f65b2fe6123ef03e56ed655a6faa279c5185df8e56df61640539434bee8d4ac07bcd75286ce33c7a0b8f65bd8d74013c543de7ed0fc181abe73ba49e70be1abe3779d440c626151e41f4a0dedf662551d8d6c37c3587b7decd60079caede13deb1e87d91d967289f90182f32fb11b8337e27290befb317a1b0cca79b97eef296f5f54513451e5fb4409dffb5e0aef56128af7cc29d5ecb5038832f7a0cce65ef2658c8ff2680af9f2f42ef13ac3d282e8c2ffa48787dd15ee1f5451f0bad2f7a1cf69dc6ab3abdebe67b5cade7ac7deae9e7a33e2176acf3519f66b04d2913be11b982e0c138017def336f3e4bf5e7c464e15dd34e56755ce5c54bb58f94a9fc957888a4e1b60beb23616f11ee319b8fc2369f27c85e6aeadc147cf3b50785e553dd1d959585c2b2dc02155fc0e5f604cc1166a3f47cce5552759842ea30c5adc3c2d1de7ca9fc53d332ad2f847e3f559dfb4d4c27f555fbf78969698c04ec437c9e6e8385b027762749cb4f3dd57c59e07bc5601e355e1337411387fc8da5be47a0eb6781de23c25df802f57b5f8e6a2f24711dc2f84a78e77e6acf35713dd2ddf56e5b2d82f1e155148fdb14f2c1b8780ae127fdcc219e7b0af706e13d0b73838bfb64236fbe94aea54fedabe2c8f7208999c2bb4730536141db5f4ef2cd27f9d4bb536bbda67de13dd1f8348fc575080fd8efbd89f0b8c9c55f5c94f0b889f0807c757c78289fbb18eeadf95ad90ef8c8cf91cd496cf063c01f8f73602337131e37bb32527a867cb7b8f9b20aa2b07cdeaacaef25f9d5bd05598550583e6ff7e64fdc8ae2c14e64b9c2046f96577e2afe0e2267168a97f9c0c7abdf794fcd8dee44ba50ef0a137057d56a9407e2e513de31ad4461acabc6a41cdc5d750085edfc4f1574dbeda912caa6cf263ca03cbc135a86c2f249ee8e4aa8bba39eeaab70877a7153e5e0fe22b8f31174f82069db0750bc7cc23d585b50d896b7b42cc1873b343e20f8b3491b3d84e2fdf0eb10fd3422fa813b8dfe23f2e630b6f2889707dc2199c29b4bda6baee2f12692877c1ae4cf2ae2cdbf6c9f373ffc5641621ec93fcfcdfff432c44f3ee1ee8ebd288cf012f3154e5114964f18df8f4161f97c4cc5174361f954fb9559c55118eb4fd9e7b2d6285e3e9f20fc9e20fc160a4f1f4ea86f8f128b083f98c73f49f8a9fdcec462c26f3169c7125e5e96bad735b14478d77f4b54bb4c51f599ebd577c672fbf2675fa9fefb21e92750fe58120fe54b92786537f01b5c60afa9b10fde43abbd9b25705e458d7d09388f80b9ce48c7256e4471567a8c4ced6baa31f219f8ae0ae6dd307fd4ccdf7de727d0ef9f42bc2aab38b8bb6335ca03f1f2097ba82b51d8e6f63cbc433e89945b26bc7b91cb08876708de332edeb36aaf7c397c4ff28a4a477b8909588f3d87ea017d6b39caf71c8a934fb827633d0adb329f53778458df79eb60c17756369f9db086fcde87cf0b1a3e2b51be17509c7cae207c56283ef02d0fbcf37a5183fb12c27d11c521dc941d29dce5a508aeae0e2f6b64ad42f95e4671f2b99ac85aad64c1fb49b02fb00bb83362190acb27dc61f1350a23bb49c07d2cf45c34e0ae25b86b09eebfdefca93e0c77daa83efc6c806f46527d799df0ce07d6a93e719d379f75306d47cf834f86fb2d76a330cecb71f0e3d542616d40edb5c1e5b402dabe158ac7dce12cf47a5476bd2a0b77e85c88e27159c8a7c66ff85dbdc446926fa3cab79c70d984646e4218d2aee0f7ebc01637a3bc9bbd38429d51c982bafaeddbffa8daa309d2bbc4dc92c6b77e12da3562622b6a23f067db501c9c5787fb0f56a33c102f9f70cfc24a14b6f5b3ba2cc1817270ff023df70ee9700f043df7aef6761370d7c40684279f6f8bbc7dfe1da4e7b7519c7cc25d05eb51d8e6bd52cd7f57ce2658ef22ac1d280e636d4461f97c13957953e16f71f1a5bbf360c1fd06bfa0306e1bb84f628b17ef4575ffc12a68fbd709ee16550eceb5ffcce81dee20a0e7dad57c3f0177266c20e9bb90ded51af3c5b5c2eb9f768a94ef7811ce44cd266988bbe71c34ece7e273d05017dd3968386b44eb077728d0b3f030bf823b0c3690f48f50fdd47d942fcd25f5db93e6f112f885d9248dabdf6e4dfd60aea4ab1fdc4b47eb47ef54e88ee2e593dea900e99fa0faa9dfa078790aa9dfbe348f97ef26f5db27fcebf7b1a67efb7cea077750d1fac19d07f4ccbddaeb4d7c26b47ec1c3e5330d97ad3e5c7e67b8ec275c7aa278f9fc9ce13205c955fb2df8cc7cea77e97467e6615f73260aa331ff85bea45db02f87bd817cfaf2f5e43ea55439d8735d86c2d857cd47613926a87798abd5f76feb3790723036fcecd55bcabfae40e144ba3cdc2f12780c813b66e81802fe9cfacc438c9cf784de67c25a2b84cf5c037e0bdaf7fdb40dbc026bc5d9242d8ccf7cdfc7cee10e235a3fb8af86fa14a5973c3e13d2b1cf543ee5157216d6f1bb503f9873cd2669617ce6873ef5837b7568fde8bd37dd50bcce67423af6996a4c580b7e1feab737cd632dbccf9a4dd2c2f8ccbd3ef5fb8ba9df3ea1f799fbd4f370f8ccbf192ed47ff744f187cb67c25ce92b173bab340acb32f08dfb01957e3c0adb6dfaea5817efd52504ef6b82a7d67bd6bf3e78f2f925e24ddfb7c33d2e5b505872507707ae2f8a3020bd9037ef7ad8e354fed45277436495115a7f2b8f2da7d2b11f867b60fe4061890fbf8507ef2bd0decd7af87e7f2649c3b86adccc82bddf0c63da6af5ee3a66a967cc9b3fcff90758dbc138361f856dfe1b0f78f3c1ef56537f1f8b133c7cff8df2671b1610eedbd3bad8b092b4edf674f984da9fc17dcc82b308b88fc17b194d1f8b2508bfef451e7fb4b105e187cea46cec41f8bd81e47eafe1375ec3ef0d1f7e49a2e729e972b12c11aa0f07da0bc47709c11c05ee085a8df240bc7cc27d402b51d8d6db66fa3e05cac1fd40cb50583ee10ea0f9286ce36c52e70937a973789b4b9072ea6ea0ac135018faa40cab7b8052df16fcaaf895f0f2c93ad1cb33d5de708792ea4b9b02dcc51753eff6f3ec27fc86da4fbd7fcab39f80ef1f82763984e2d46fbe24e0dea0d5280fc4cb27dc11b41285ed7aefe84270a01cdcff03fb091d493adccf43e782e0fbff16de71478da5d284e97e42d24ac725058a93e5e01e9ef5286cf3dea2da7fabeab331281f53f917121971242386e2b08c8d282c9fe8ae21e7dfb6acadeafdd7d6294aae7a9f924c78e52615af645278f61f92d08767235c3c3e811cf57dd80ef86600be6b55fa4fc29d34afa230b2d3649617d709dbb8afc13bf27a04afa0170fda4b8cf1a667957379bdd65a934fa697f7964bc09d39ea7ead2c754f42ac88deae9285885d7545f1f209775590b97fb228b22b35f77f0df6ca41274544ca0f6e035f3f9ba4810cc911612615dfd831698c77d45e6eac185317b8c784ccf393ea5d5b12ee1721f3fc640991675cdc46ce3f258ba3bac0f9a7d9240d64d0ba14f7a94b71a62e70870899d327d5fbb224dc7942e6f4c95222cf18ba1dce4e415d8e4bf3d84ece3fa5d24006adcb713e7581734db42ef8bb7899de03c5cb27dc49b2018589dcc4ef3e728f65e49621727ba278f92c4be4aab1255652e419d3634867efaa3501f4f11db0c74dfb38dc6dc2f571959e5551787c4f9e3e5ec98b9b1a1be1be3b35366ef6fb2666aaaa4729a11d1b9327a6eb1c2b2db4636312dd7f92b297f2284e7de795ac203c6363b23c8a97cf8ac233363a615b8fef0c253850ae92578fc94a8443b6d25312856dbc3766337895095e65a403190f7aee4dca9d44ca9d44789c4c78a833af6f4e64f0aa78f152e955451edffa267cff007df894b43dbed997f038255d3e5905c5496ed92aefa5840bb92325598d60562775abeef27aab0b83772aa91ba49f26f2f8dab7aa93bad548d7edad4684478d74794706c4e1ba5d42b8d4f47249d62498b548dd6ab9bcdeaec3e0d5f6e2a5d2eb883cbef76d18f7a06e39e9babd5d96f0c849974fd64671b86e7d0897d3bd5c92a713ccbaa46e7515af950c5e3d82a77c5ab21ce1d19794ab4fcad5273cce203cd47d1eef3461f0ce2478709f079c8dabeccd9fd22fdcdda47ce28e20678f61ce8aeede88154571f209f775bc8ec2367fb91de8c90fbfaffc0b0a633d00ce3a8203b636c68b1753739a2cf03541ea710eaa474914279f7097c7eb282ce56f21f91b917ad07ed890d403700e917ac01c42dda5967572887a9c9bae8775258a93cfc6a41e8d5df9efcd22f9cf23f5388fd4a331a907e0ac553893bc78167ca711e07eed543d9aa27a4c4571f2d984d4a3892bfffd1e247f33520fb8a76336c1594770d4dccfd9bb407896fabdb32c383314a41e2d503ddaa138f96c4eead1dc95ff4136c9df92d4a325a907e0ac233803154e5b2f1efc2e4fd6293ef5988df216f2c9174407e7231d744171f2d98ae8a095cb7d671592bf35d1416b2fcf14ce3a82a3e647ce6f01213cf83d9facaa7c3de0bca69337bf3a50e355b28de2b7028525bf83de7c16ece7d97e7817ac0dfaa9b41f501ebcef1196933a4b9ebc807052f7aaec52f7ffed52ebb918ac2dd41a407bbf906a6b0b9db5d27220e7ef93e45e96a4ba9765cf5cc255dd8792550d85e5b33d9207f6d6211d976c8fe2e413ee6b598fc2b6bc0faf13a1ea01f2611f39a9ee3381df8e4baa7555f2220d3f644fc98b509c7c7626fcd4bd1ebbab84e407f2d5efb7c399d3a4da8b88815d92fb3992ea7e8eddeafdc7ee25044ffdee3b9c554d760b88b73fa49da8efc676ffedf2d8a3d603b113081fb8d7a32089efe1e5193b11e58774f984df9fdf8ac252bee6fb33c00e6ce3d388cd6d4161bb6e1fc33c57d938b73f456d2cab3aa96bd83ec0d8d84733bc1887dbc63edae9ea776f89686c6c6feb70fcc1c6f6f6553cd47b8758b9ff7d1b8b291b89a9fd01239fec37561ca76c55f9815845c45df2bd58e9e0541256776b0ad87beb25bc634d2f17775f1382d71b71853d2af5de33067b1aaf91f403084397fe958a87778e99ea2b795c92e6e1fc5b729de1ea771fec91ccf2c90bb604fa52df29252f25fa82df495e4bf40577d7ac40611bf793d104afaf81be6e67d2c3e8abb4e2a5f8c7b2913d3236ee8b076ba97e8ac37c14b6e57caaf6d5629555fc00547f5556a877f16236a91fa4ff87ca6ad2e53f1d192731e916d1cf63281db8a873da49f8ede4f9282ceba1be7ffe14da42a793a7f2e2c64ee6eb6d65f9d7db2a90a1de0533d41b385461d2e1bd87d24b4cad2f9203f3728d5545691aac58357f2e313506e6b171483f5504b761f5bd4c72905b264bdde50bdf1127077bdb3065a343d3f572f2d8edba7f0329ab7e4b3aaba6dbdefbe19cc16928bd10c2936970f601ee357e8da4d7f262e74987bd3668873a84f73091ea93f41bd0a4ba1327ab168947775b3ae531cf1cc26318e17919934e78a6e6fac3197da3fbb79c3cb6bebfa84fca8ef0eafb8bd644dfe8bea2e448528fd309cf91a41e2398745a0f18cb47292eb5493cbec3a624e15057e8edb99617334f3ae5a0ce1825af201c207e8c0f877a19385c119083d24f32977080f8b13c078bf151290eb90139a8bb969270a7492d123f9ee710ab9f81c3b8801cd4989d54df5767e590f8893c07ebb60c1c2604e4a0eeb0484e226d01f157f21c626764e030292007750f4df22ac201e227fb7038330387ab027250779b24c99d19291f736d9a4352dda3f1f5fda4acba3f037cccd730373e0da5174278b81e677979a6d26b79b1f3a4d37aa86fb39253987aa0bb2d9c3c763dbee94bca4ef5d6e39bb1a41e5311c634528fb309cf69a41e5399745a0f75be2c395d78fb27c45f27789b6820fc6d627a409b507b0bc9eb090788bfc18743c30c1cae0fc8419d034cde483840fc0c1f0ee764e07063400e6adf3e395378fb27c4dfe4c3a151060e330372807710ea7e89ac3a24fe161f0e8d3370b8392007754f4652dd5191753a89873b2ad479a7d879283fa4cb27acafb6327ccfcdc097aecf38beeafea024dc75518bc4dfe1a3b3261938cc0ac8c16f7eaddbbf68aad2d43deb317827a2be49cfaa87c232bdb948cd590ff65571f03ee76e54bfb0fb1b3a6eeafd4af2ae34ae235fc6215949f53d5412eeeb807b0ce19dc4bd28efbd28af7cc25d1c2b51d8f6d13fcd20d8500eeeba5886c292572b1556777464c17c18f6011f441c1e4071f2a9eedd80b3ea4ed8e6f0a3daffffa92f230bd6977b5018cb84fb353e47e104c203fdcc41dce6209dcb27dc6970060a4b19eaae88e45c959e44e1445ecec97948c63c64377efb9a4ae7a97714701f837a3f7e10bef7782c189e372e695972dfb7b51824fad933c01ce7a0a75cad76139d4473515b741503edd9e948fb5fcdede708fb7f3704f150b2a6c8ce50c63967ea9c2ab6ffabe6881d6b3bf3d1368025dfe574b603b976d4203bbfc4686397192bea89ba0ef6083b6d808d33c65eb70c13fdc5095651c4bbb9f3773f3bc73007f4ccac3c225ecc2342921b6eff3fc82e36d62e2849e6daf1e7db3123ed3f63ecb80176b8adfd94a5fa8ad3452ffb7f2f4a375bec707b32364874b1ff1eede0f5b569e7cd99a94a97d8b1b44c271b73a4c36e841d030a1d6d87873b0c3b3b7f8f77980e72d8b7b1e3c6da71b236434433fb39d19196b7ee63ec7feb6476512ad373bc2454bce56ce34033b5b06b23d9e738b6f87f2d72345a44aa3e4bf60ff95f22c779eb73539e96f83f1dba4e463af4360ae37447659627aeaec8717c7ea73c1a0c5fc7bc35d4dbb7abef33457ddfbae835239bbb9c5383740bffb2af7d819aef6e1f96f456ad9ec871b670cb67a89a9f62255e75ebf83c08fe55482613752451aa7e4ba77e671bb9f31154bf9b6f98932f7c036439839fb7019c9f20ed62ff63a2fd67b823628093597abd7676b691f69f210ee13c6d5447021670d49c7710cd449553744ca768673fbecb51b1f35e197c9c5ed50553b548ab3ac7991995f531484e9633658aa9791374999dedea9f754e9d06f392fa7629ecb44b7ea4712d13d7b54ce123dd0532fb7cbf762992aa57ba5de47f7a1d16656c3b13074e83099d068b1c1ddb96dcf367dbf250692da243bdfe8af9daa01f034e83499d069dd3ae5d8fa0063bd80c2f5333c5fce9b078601d96707478429eda05e1c069314ba3c53a528bc7ea681522b49c4b0df5c00538e09286c00539e0e30c810be90cea9823dd2565da2807450eb8e1cd497e97731a756b7a7b2acdf4c9cc14386b2aac6b1ba9c2e3b5ac68e394e61ba708875cc614b928875cd614f9189d4139dff51df9797afec648e96bca041e234f147ed3ecb02364319df69caf1c7b1f56ede5dd3e827f35b3cb0eb5f530ded913186797d76d37f96bb45c606f5fded166b6d06d828563c469b8b8cef2a5da2b70cd4e8dff44def84be8c0a5c48a41dc74791ef8580eb8922170490e38db10f838cec35436f530a538e4934c914b73c8279b221fcf2157d1205b6190cb70c8a7982297d5f922c7c2871e565fd4d58e73b7925b3aa9c39cfdc7dace6a7cac707722658564afe7f282e769673f07dadc240b7f1f5535b08faae6f828f9daec7031e57cd709bab67626c8413a6b35bea94fe4804f35042ec701d730042ecf019f66085c8103ae69085c9103ae65085c8903ae6d089ccd01e7180257d6791667881b79943c8b2c39d4962577fd063a88f20fac2ba3f33275523547fb62ce185cd7d79f44c74f1d6d74ff2bc06c9ed5755cdc91a2c4b9bb9374f627d744f5745a74261cf9d96b912fcae5fadad99e4ae6b1e362bc1d9fac2328c75ef9aeda68ecadc2219f698a7c8aaeef3953aa23bb91efee8c4b9cf02b347974ae1251c2aab19f9da737e6b305b743efcf8133cbaa3a0d3a53c72147c57b7511f2edc55867253428627fd540e7e9b55a6ee868f9341f9761c6936b8d6aba9e225be39c20835443bea354e7801b19029fca01373604aec1019f6b087c1a077c9e21704d0eb88921702d0eb8a921706d0eb89921708eceab38cbc6cb8e8a57a16b98e8e742cd8566147796b3b57dbc4814bce411c38c73a0968e433bdc5438b75647670ece8afcf2a3620e8039ca094b69d11b442b9d41386bde1c9f568886d9f9414ca2b56312879f0c6714a7eb9ccfb14e30afe6eac865c505a45ad421d5e51d525d9d3039fbbe50274ccebee5d7ecf99b48d7e364b5e364b5cfb7acfa3a59b26775d0c992e6d73183125bf3c2cee0845dc409eb947f6167ea841de3b80bc3edcbb374dec8d934ca3d4ade689c235122e315e8e19c0acbf7a1c1a6c25d1d377196af9b381cfc39b771b6ce2e8a0bf7da4b933dfe063ab370b6fcc6fd0f9b45f40357774d67ce7176281b181b417ed8f6100106b39e8e951e1d829ca536e4dce5c59cbbec957f77798ece7a9deddfe147c57abb09f7348b54575db56f15bdadf6d6d9aab3375dc7c714a2e316c0322f752cf348d0e1ecb091ce349c7df62379cc0a6f50e5ef98551f5d6367cbc8bc07aa8248eb2b3cb32e6debf513fa035b41f0b9f668ac6b0fe72d42b723d81ede2342f96b91feba167136ba4fcc539360f206409b587c9b0c74da24bf12b8563957e7ad65ab0cd2796b59c9c15eaed4590fe49df5799cac219caca1f996d58493358c937559be6535e5645dcec91a9e6f59cd74b2e4fa405e0561b43e68ae41ce71de8e5c7c58fb271cfae92c5ad8cbd26636f95c353ec8f8ae8e05a70f077973f9f753f92232d86c7f94d3b72a0a61c486eb632db8361b6dda662d75c872557085aeea215605ad74c6e0bcd01a71588d811bf88fd402714c6093c9754c46eee61c7ece9c619daf6ba553c4517b8b85a774f5226e19799d459c0ebace6b3cbff755668cb2a58b4effc50ccce344a6b766662cb8d66fadebfcf22db0bc6d83be5a75f853077036ef00dae8c0a5cf9aa0f159a15e5e5fc0214f34f58617ea90e559974941bca1cf5997b63a60b93d29efb1303d6fda8e03bf2a02f0f61cf8e408c03b70e0574700de9103bf2602f08b38f06b2300efc4814f8900bc33073e3502f02e1af01ce7e5fc915d32a7bfbaccdf026d9aaebf6b7db7bc5448bfd0cdcc81f3cb5d754d24b5785d1037349d6f9e6e1cf0f586c0dd39e01b0c817b70c0371a02f7e4806718025fcc01cf3404eea50396afc76e0a02ecf32eac37077cb321f0251cf02d86c09772c0b71a02f7e1806f3304eecb01df6e08dc4f072c4f8ccc0a02dc9207eeaf01ce718e430dcbe3ec8efc01b7e8b7c4efd0e94bebf2e51d54d52d79b8e8f071e58686019c1ddd6568470339e0bb0d810771c0f718020fe680ef35041ea20396fbfef70501eec7030fe518df6fc878980e583a81070c9dc0653a60e9041e0c027c270f7cb90638c7391379745ebb7127d9a3f5310f05f631b345a6b75f5131e63ccd705dd34b1b9457aed17582bc9623cc3a6104073e4703fe9ffd5f18f0911cf8231a701192f9281db8dc7c982b0c371f46ebba84739af7f00eb8de0deb7adaf36bb9ce1ed430c7cc4679feddd2461de39815ddd4ae97a133ccb36b5541d31a4e8b683bc5a30206dec3c799eb0e577046353f02a31aa36b7ae7bcf5d1394243cfb47674ca8f766264ee6676dc281bfff288fde382c0fef13191e9dccae1ab036722b99c893c1e81898cd5814b6ff2449091d8e7c8f9380e78a121f078ce532e32f5941338e4274d912772c88b4d912771c6b12402e3b852072e37f2e54f86986ee45fc5e964a9a94e26ebdc9ef335c8d1f9da4177a0285a07f7b4d0bc83723e53f1fbc4200a5ef2fc9cfb17f3126a99c8f4a543143438df79b5cec8e4ebe2678278a15cdec6aee1faddb39a7e1776a679adce809d8f83061f5603ce3bfd696363b95714c24983744c0bbbec041b458e77fdd44a21ec64ed395d3368ed68b9634735846e9266ce92b39f295c333f1f817b9daa0397173ead4865ce60434579f0691cf31734ccc3aeb3a673be7ba5c677877a097b1da79317353a99a2a3eda393eb39f09734e0b34282dfc081bfac019f1b12fc469d4770beea9b7a443c42a6dbc2cfb76b26a5e18bf3f22e9de0ba68b9b730580c5267a1248bccb78cfbfb915529fda001d0f9ccad25f21847bf16f2eefec2e5f9d1728de3e5feb73873be7186cee0e52585af08cd55b8f24bb23e6a7497f247aad5d328a735dba8b13e4f9f28c0f789999c875babf17056480f7793aec3399fc81dde5b443235bb9c0ac9bbd6739d7f8f57cddbc5919dbe0fd8a42bad1361f74f5e1570a1c79160cf99e3cd9cff5daff1bf675be1fcef2d9cad6f1001e6913e467c2b07bc51d789124ebef05de5364e379b74635348dddcce5561b3a16e66e980e52c43fec2b1d10af10e8ef2569dd66b3b3d3e7d7377b633b94cdfdd9deddc18986b3f47da169aedfc3bd7d9041aa6368b06dab1e353fb84d9cebdfbfdecde274bd70ea5933b399dbc66aa93bb381bd9a6b191a2b1703672b70e5c9e07de1ec4467cce03dfa3f3d3ced7c547e77572dea137da95feeb3a7d69bdf20e91e975b23957ce17dfab6b6e395d7d43e49da7d591f3b43785fc0551c9fb2d9169c34037e509cf3c8f95ade1adec3eae6fbcade91bab42f68dfb3967f48ece19c9cf375a89518e29fbb9956ca759b39d5fcf19a39ab7a11dbe4ad411578772390f70957f5753f9bf4356fe41aef2efe92a2f3f3269ee547eb85379e96fc7dacfc14e5b0f24d5f5f3b9d9ce3c236f6a7fd1cfd9bccf16131cbf301c4999e0d8d1e5213df643ba1aca69eafb22ef3455aa35cc34753607fe81065c84047f9803dfa9010fbbc7358703dfa5018f8764fe0807fea1063c11127c2e07be5b039e0c093e8f03dfa301cf0a09fe2807fe9106bc4048f0f91cf85e0d78c190e00b38f08f35e08542823fa601cf716e0d3992b7d6d1d12cdcc9e27d22e8bce013a1bfb12e937c6eac7f5cd734d28f7d2af20e0f130b871b1e9ee0c03fd380cf0809be9003dfaf01bf3f24f8220efc730df8c290e04f72e05f68c05786045fac039793b72f0533793b2052bb5a2126554bb84a7ca5a9c49222e12af1940e5c2e38bed67594100b8ea51ceb6f34ac4b140dc7fa698ef5b786ac9771acbfd3b06e1492f5333a70b926fd5e18ae499fe5907f30457e8e53c8419d428e09a790e51cf88f1af02ac5c3813faf039743e14fc27ccab742072e97d33f0731c01d3cf00b3a6039c5f82508b0cff47aa50e587e17f16b10609fef225ee41af1374d23162c11ae115fd281cbfcbf8bbc3e36c7b9552c7fbf5274c82e959510ee7fb5edff34d7d8f8fc82cfcb5cb3fd2134cb33f939a26e710eabce6ce17ebce46e888d75165e72f22297ea6eb5dc75eb38fbdfb5ece760fbef31ce569bdc68cbb6ffc096b1443cdd411cec4cae4638e524b6bbec97e975edf486f6b39efdac1ccaa65671adf3a7a675eac8d6f9cb4ccdab3935ffad5373df48d49c7f65ca95f05035e375f73ee5da7bb8c295bf2a3a50ed7b66abf2a31ddc210e0bb9371aae39d6703df11f4d4f2c5a3a5c4f7c45039ee3dcac77247f52a8a97374546e40849ffaffab7374daa9ff7f42ff7342fed2b989ff5a5db348cdc9976d193def7f7c93acd301bbb7380600fe84077e55d7d6cec586171dc1b60ef283b5fa968ee9eaaf6de9b8255bba749e5af9fea62ba3b5f5bae6905a4bd8420a113ace1480368964c3806fe0fa76d2cadbb7df0dd9b73772ccb334ccb5fb1d3ecc3771cc0b6898cf3e3e1cf3cddc8050d0d20c084247ddc7a16ee1a817d2501f58261cf5ad1c78610df8da13c381bfa6039793df2296f9e4771b075e3402f0ed1cf8311180bfae0397d3f662413ca6cfb47d076787c58300fb98e01b3a606925253456b2a05c382b795307eefc04a7c5ccdf4a5a46f3b7b738351da7ebaef2ee8bb0f3373918fd2f4e95dfe6545d8a5375693355bfc3a9fa789daafb47a6eaff7fa6cbef725dab8ca66badac18ae6bbdc7b9b1b211b8b1f739f0132200ff80f391271afac89d9c459633f491bbb8862caff39195c235e4873a70397baf60387bdfcd01573404dec35947a508ace3231db89c2a660761ed334ddccb3562654d230ecf0ed7881f73e02769c0eb570e07be8f033f5903fe7748f04f38f02a1af02d278503ff94b3945322b094cf38f0aa1180efe7c0ab4500fe39e7a8aaeb864e79c57cd8a173ac1a06e15c5c98f949b841ee0bae2ea7eaea2213b23d52c3c8fa92935543274b7e1fd7c7febf8efd67409e135632c53da322351b86c5018ec5693a1625118b116a1ae19e57cc3f83af380635750c0a23067d4477c732c6861c01bfe6bc442d9d0baa12ce4b7cc3f5b5da11f4b56f39e6391ae63d4e09c7fc3b8e799d08987fcf313f5dc37c7948e63f70cceb46c0fc20679ff574f6290ff3f752beec12db37f4527ea8a19abebb713d9c672d71aefd774be4b3063840f274983c4136da8e1beaf89789ce76e020277660489ff623c7bfbe8ebffc85813423b8ea373b55a786aa3e976876ff5d9f4d9722239c1cb9ea24bebba871eb972bdcadcd494ec93075fa49572769206770ebc333e5fab08070ffabedfe176e89f833a7c7b3747aac12c80edca55c8efdacafe25c9bb84a9ca1f29e19f258e52f9c66cee634d3c05833bf72321b7232cf3196f91bd7e51b45d0e57fd781cb57058d0d5f151ce234752ea7a9f3a4a6925853e1f4f407a7a72611e8e94f1db874ea4d354ebd7c93704efd2f0ebc9906bc7548f0bf75e0f23452735d43c8d3482dacfc9c46fa87731a2d754e43fe0e51deafd93ad8cff4a162f93ec8ddd7e98af678c2b8887f394ead749c4a0b77c255d7fe939ee8b611ee2d4e130d267eff713ccef79b7aca6b0fbd434cfe19088b61d0da6f0a7eba4713edd56226ff2c2c8e451b1d8be2024f80bb6a7615c3c88ee964cb7e7001d70f2ecc573f8873756cabab6359b61f7476167f639ce95073650743424f1f125caddb71b56e9faf5a277572e429a20e1a3939ce2fd6e5ef6ede8e96ff4f4af91c48cae25ae6223f6f5027726f5080e3d129d342342a6f509063d039d3823c4a6f508863d125933790d286d886917fd98539d95d75b28ff178a24e065ea808d71fbb71fdb17bbefa6351ae3ff6d0c991fdb167fe3bd6313a6172fe72b166fe32b479b8f94b310ebc97067c6248f0e21c786f0df88190e02538f04b34e0755a85033f9633e04b75065cc9c9e77edde75ebb364c5c29dc55acfc5abcb3686bffabbf9d79b0bade00762927aad55c18232fc971ebc3ef733543b2bb380e368cc4e338897d7957d2c21960fb3bce144b0f3bc496e29ab99fce40cf0fd7cca5b98af5e73cb5f44eee6f86e5fa3670982a1ecfb118c06d16b710ed440ff5c168b8397b199d2cb98c1ba859c6ad8d875bc695e5da6a906ea5d5265c5b9dc06969b04e4b051d2394b721ca094f78933f9193364427ada8465a67e504c2482da7932acd6ea8657ea35d79ae4ac3f82a75700c5a9afa58e78e817e8ef187a952054eea653aa9451ca9add581852b9d3713639de430322b6a64e638bf042cb576b42e286b23325dfe15f67ab2cb75bb48da0397c32df91aed542767d41cb9839995386f3042e30d0e5d18ce1b64737e6c6404db519575e072c5322ac8b69dcfe5a02771ac476b585b21599fcce9fb0a8dbe0bb60da7ef2a1cf8180d78fd90e0a770e0b91af01621c1ab728d39d6b031abe980e55a669c65f8f557750e79bc29f2a91cf20453e41a3a9febfc48fa913cbcdecc0ec97f873fbc3ed192e72fa902b4ce7492a53fbdee279c7392a77123fe95118cf835b9d6becab4b56b71c8934d916b73c8579b22e770cef79a08868c3a1cf8b511809fcee9648aa94eea729e77aac6f3cee818cef3d6e3684f33a55d9fd3f6f408b47d06077e5d04e06772e0d747007e16077e4304e06773ad79a3696b36e08c7086c60897750e67840d399dcc8c4027e770cc6fd2309fd2271cf3461cf39b2360de58072e776e6e09322bf2f994ff5c4e25b76a54227f202c8c4acee36cf036531b6cc229fbf60894dd54072edfb5cf0aa26c9f1f586dc629fb0e8db297f70ba7ece61cf89d1af0bb0784036fc181dfa51b780686036fc981dfad019f3c381c782b0efc1e0d78a921e1c0cfe7c0efd580571f160ebc3567e3f74560e36d388772bfa143b98053c903ba95e788702ab99053c98311a8a42dd7ed1f32ecf6ed74c0723f6c7610609f8db3f69cae1fd639ef91e174dd81039fa301df1e12bc2307fe8806fcfe51e1c02fe2c0e76ac0078e0e07de895b01ce8b6005d89933c1470d4db00b6782f30d4db02b07bc40b75f2cbb6a9fd44dcc7dd0f1a62e22ec967f37ae951fd3b4f281f1e15ab93b07feb806fcba09e1c07b703a7b42a7b38a4e30ada71ea2adc8715e6cc92cb02bd352a4cfdbca4309eeb7167257388c4e7b72cc1672ad9997595767f7799808f755c4c59cc217e97643278753782f6ed878328261a337a7b3c53a9d95645b137e1eb183f3954b18dd5dc2e96e89ce5843eaee524e774f45a0bb3e9cee96ea7427570eb9e8e66cd767c00fd886d1585f4eeed33ab9ceeb6bbb57b93fce268f9f0d726e750d23b11f2771994ea2f39acfaee178e1fe105ccf50b2fa73b29ee16b37dab9b376523efdc6004ee2b33a8985483bb60aed2d0672f29ed3c92be2d430d7b9aa447e73d649f473fce6a850320771329773be716044672a0673fdfb794dff1e3d255cff1ea203971a5b116466e0f373bf4339c7f142048e6318d7182b0de7339771ba7e51a3eb8321757d3907fe92ae21a786031fce81bfac631e127c0407be4ac77c5a38f0911cf86a1df390e0a3384b59a3ebb632989ea086319cd19c9c5774720a7ae484bf45fd0a4eda5a6ee094e7aa7345533bda1dc6e401b8d1a1a71a6338b9eb74728b0a38cf0d03595a7e18a9b99cd45775524b38529b6a86b4fc491fcb495fcfb7ac3ba4e5e7c4d7384eda069d34f7f09e3b116a6a3cc48de7646fd4c9ce52359593fdd121a7281338499bb8015cdfa261644ee4dccc668d9b297a73383733895bb96f315cb95fc9696aabe1487715373ebf16c1f83c99d3f5368dae5786d4f5d51cf876ddfece2de1c0afe1c05fd78097b8351cf8b51cf80e0df8aa90e05338137cc3d004a77226f8a6a1094ee3f6d2de8a602f6d3aa7ebb735baae725b385d5fc7a9e41d43955ccf01bfab738cf28329fc1d79d49f0cdec0e9f03d8d0e6f09a9c31b3907f47e040e6806a7c70fb80106ffa24b5a7361b435532333479e48b3ba8a2377a6aaab703fa0ab674be7be1bf33f5bb533558fb48a72e405019aafd48248db65e315940a937ffade2ec45cfbcf76fbcf945982fbe9ca0f2d79682b7ff2b8c35b3771d6bc5bf7d2e1f670d67c3307be4703be2124f82d1cf8471af089b3c281dfca7595bddcd654aedd24239d1fa493c618a68bdcc6c9fa985bb70c77b66ec6da6e6e8c63fe631c330d3babbe9d53e03e8d02bf0da9c0591cf8271af0fa778403bf83d3d8a73a8d95d60c08d17c3b7b27c7e3336e0d26658cf5bce46927f00f1d86917e17277dbf4eba741bf08562261632df18274f183e77737c3ed7f1390e69a3b9b3d90a9bd678e33fac4eeee1387ca1e3505ea3137f2ef9d3ccbd1cab2f75ac4a21cd347556aeeeeb2b6cb370cb741816f7712c0ee85854d0e826139bfc69e77ece557ca573e4778573150f70e05f6bc06784047f9003ff46377886047f889b0a7e1bc15470b60e5c0e2ddf5986a7d01ed621d7b083df5b797ff53826849efaa3bc80399c801f3402ac7c0878841370502320910f0173b996fd51d3b27543b6ec3cce267fd2cdb91e0867938f722ee4679d0bc916c2b3cacaf6bce1727fe377ace356dd2f8e1b3a71ee44a6713e3680e77355ff4553f57743567d01d768bf46d01d1fe398ffa6617ef783e1983fae03973df8f720eb729faf879ee054722802952ce454f28746256b43aa6411a7923f0d55f224a792bf2250c9624e257f6b5492fd5038952ce1c0ffd1804f0909fe1407feaf06bcd1ec70e04b399dff1781ce9fe62c458e5d2696b28c538915cbab92a12155f20c071ed3809778381cf8b39c4ae2862a798e6bc844ccbc2197732a496a54d228a44a9ee7549265a892159c4a0a44a09217389514d4a864cf9c702a59c98117d280d779241cf88b1c78610d78ef90e02f71e04534e0534282bfcc8117d5802f0809be8a33c3630ccd7035c7ba9886f52f2159afe1c08beb1a736e38f057b817402582a8c4e705d05a8ef5b1ba860cc97a1d075e52037e3024f8ab9c951c676825eb39e05286c01b387594d6a843fec07718756ce4c08fd78d9521c13771e06534e0d921c13773e06535e05d42826fe1967a27c4985d69efce59b618ef240f0bb9a7ba95abd4899a4a4d0c59a9d738f0721af0d921c1b7e9c0e5665ef998f99bdbed1c78053d789330e0af736aa9a851cb96906ad9c14d612a4530857983534b76043a7f53072eafe2ab1ccbfb32d0b98aefa4587eaee27b8beb6a27ebbada4942772168fa0436de71e98cf65bda91dd96309df26dce40aa680c64d9a3e10ce41d4ecda7706aae9a2f35bfcb55a29a6ec49e1fae12ef71e0d5755d2824f8fb1cf8a91af09d21c13fe0c06be8a65f0bc281efe44cfb349d69cbe956da90b3c9e66167cfe62135e7869e11273fdb87bb3845d4d4cdfb432ae2430ebc9606fc4048f0dd1c786ddd5aebb170e07b38f01c0df8e490e01f71e07534e0b78404dfcb819fae1bed43827fcc81d7d5802f0909be8f03afa7013f1412fc130ebcbe06bcfce3e1c03fe5c0cfd080370909fe19077ea606fcdb90e0fbb979ca599a79ca40116e9ef239f7beedec98e1fbb62f380fdb40e761e5a12e789b2bcfbe5fe444cbb324613ce5979ccc863a99f87668bdecfcbd373ec059c3391a6b28b5289c357cc58137d279bd90e05f73e08d35e01d178703ff86b3e37375f3ed12e1ecf85b8ef979ba2dc367c231ff8e036fa2dba27d2e1cf8f7dc465053c38da01f387d378b607d7390db52696eb8a5f223a7eb16bacef342385dffc481b7d4809f1d12fc670ebc9506bcec4be1c07fe1c0cfd70dbc21c17fe5c05beba6f12f8703ff8d036fa3011fb82a1cf8ef1cf805bafdc890e08738f00b35e06d5f0907fe0707de56035e736d38f03f39f0761af0a2ebc281ffc581b7d780df1f12fc6f0ebc8306bccaabe1c0ffd181cb5f7aed68831722e0b93a8f18b758f07f39f08b34e05d4382ffa701cf696407adabc5e13cadde55ddbc3f49b474528739bf662931c7391225323e8ad845e0affcf132193eafabe92c9f3954f74cbb9b779cc3d7fff47ba798cfd12aed59f5ce317956bda910ff0375e3cebe8b98c694646b77d154973daa266bca08b07402e4ce56576e67ab5bbe76b6623a3972e6dc5d371f77bf056dee7c7bea9efb1de724e6f78398b84ebaf4253d34bee4ef0de17c498203efa95bc36f0c079ee4c02fd66dca8404cfe21aa597ae51dccf82cd3f572dc055a9b76e1ab0395c950a72e09768c06784042fc475964bb9ced2275f9da53027a72f27a75fbee414e194d55fa3acfadbc229ab28675c0382ac0b7cece7181db073714704ab99629c4a06e9dee36e0fa792e21cf8600df8f690e02538f0211af016af87033f96031faa015f1512bc246729c30c2de5381db0dcebb92c82576fa538955caedb8bdf114e25a539f0e1ba174121c18fe7c04768c0efde150ebc0cd7982375638afce4a7bdf3abf1e91723eeef2ae3d7f46344fe3fb729cb798b511a6f5122a4b73881d3e468dd49803de1347922a7c92bb82d4c3947cdb5b529a3dc7159be86725f3365db33d6ec7cfc0e5639ae8a6374db697bc355b13c079eab01affe7138f00a9cfec6eaf457496b89deaf0172d10745d9ceeff50c5733a1b09fe555e4b88de37a89fcdd1beffd730df3bc3b4f7f1e277f9b3a0c9f4a1c9ff13a3ef2ad002f3b8cdc6cce0026680c60ed27e10ca0b20e5c4ea32672d3a849f99a469dc429ef4aae31f31e8ec02b9b16f61ff92b6743f2f941fbc95cbdafe2ea3d395ff5aea29323b7a1afd6c991bfcf784d2cdfbfcf780a57a96bb94a4dc957a5aa728d3955d798f0c3a6f523fc61d36a1c83697eafaeea47fcc3a6d53916d3fdf4207f6c7980fa3d31778f24ff0c4ee5185ca763e0fda165b9b335d6d96949330923bb0627fb7aee95e5f89477ee28d237528491791a27f3069d4cb9d953cbfe3f8c849a9c841b75128a218d5e6e474c3268cb5a9ce419fcf68f2b797c2a3affd26b73d26772a31bb5a4fcad3f7238b937e9e4bab787e6f785771d6e24bd59339276f93cdc487a3a57915bb8aee89dc29b7c2f5f97937d2bb74985276df81bf03052eb71526fd3492d4ca4e6e706b9fa9cc4db79631989eed70823eb0c4ed62cbe3de1cc5b2bd5010739eed57dc11046f6999cec3b3827345a598f7b6f099e29e586927c1627f94e4eb2d78abb88fc5e5c7c3627f92e5ef238a765dde13cff921b7092efe67a8f5772feee5e6cc849bd2798d4fcdd14780e27f55ececd7ba5e21b2fc3c86dc4c9bd8ff3155eb9e12f526ecc49bc9f9b9cd15635ddc43f9763f0808ec1b17918e8b62ac2c83f8f93ff20e72df3ff53e04d38590f05b3e66ea90d8530529b7203fa6ccd805ef060b801bd990e5cfaf987836cb9fafc8e4c731db0bcef6e4e10e0d63c700b1db07ca9fe482cef4b7587608897ea2d75e03238d74e2847c0772fbdaa439bc6779d9047409267df8a33a1797e336f694083edc83e62acbabe461a51b841ef7c9d64e9fb1e8d191eeb6cad439653f7f9419adae7b85a1b1df0f176704110e0963cf0051ce3c70c195fc829f9715325b7e574f184a12eda71ba5868a88bf69c2e1699eaa203a78b270d75d191d3c562435d5cc4e96289a92e3a71ba78ca50179d395d2c35d445174e174f9beaa22ba78b6586bae8c6e9e219435d74e774f1aca92e7a70ba78ce50173d395d2c37d4c5c59c2e9e37d5452f4e172b0c75d19bd3c50b86bab884d3c54a535d5cca517ed190721f1db024f25210609fe3df7d395dbc6caa8b7e1ae49cc676d01a268ec611ca2ece8eca48bbf46067276744c4472357e95a427b2472754c1e89ac25f82391e65cb9a38efd75ed2d5b654d104392cc19e0011cf02b86c003757674aeb4a3cb8e8a1d9daff6e53a88fee232e1aeeea3b5a4b54134f616dff30671cba07541807d56398339e0570d8187e8daf83cd9c67d0e6b1b77b3d19a3b395a880b6d8ab56df923d42bf6da643f50ee5bc9de28dbcd2d07a5fc5b737d60bfb0c1f10b273b39a3e0c5f980a1dc28b5d170941aa66bc626b219af3c22cd083f1904682354287d0c60b05d2fc06b93ca9fbe14ba93d3a107a9ab6dc720a572e8fe8dbf2970e36f761aff5cd4f847a3369cc95ca63319796c6f4b109319ceef095dae03963b335b63e6c74c8773e0af45003e829b396d339d398de476f7b61beeee8dd201cbfefc7a10609f6323a339e01d86c05770c06f18028fe15aef4dd3d6cbe590df32451ecb21bf6d8a3c8e437ec714793cd705df8da00b4ee068bf674a7b22d705df37ec829374c0f215c20741804bf0c057728ade1981a2afe2d4b1cb501d93b9fefda161ffbe9ad3f36e433d5fc3e9794f047abe9653c74786ea98c201ef35049ecae9f963433d4fe3f4bc2f023d4fe7d4f189a13aaee3803f3504be9ed3f367867abe81d3f3fe08f47c23a78ecf0dd53183f3fc5f987afe999c3ebe8c401f3771fa3860a88f9b39e0af0c816fe1d4f17504eab89503ff2602f0dbb8cd8a6f0d372b6ee76cef3b53db9bc5e9e3fb08f4710767223f189ac89d1cf04143e0bb3875fc18813aeee6c07f8a00fc1ecef67e36b4bd7b39d6bf44c0fa3e0efcd708c0efe7c07f8b00fc010efcf708c01fd481cb8d9a4386fbb40f7156f287a195cce6d4f16704ea7858072e7f9ce6af20ac77f0c07374bb87f2e2086bb0381a1bfd876f83ffefc0bb82ff38bb82f237870e074b6eb7ef115d13cb96f8374813ffc3bfcb99cb0d9dff990e9df338641137447e9443b64c91e773c83153e4059c0388c723f88d228e76c294f6e31ced6404b49fe0686799d25ec8ed8e14889bed8e2ce2167d058300fb2cfa9ee4145d2802452fe6d451d8501d4bb889669120c03e13cda7383d1735d4f3524ecfc744a0e7a73975143354c7320eb8b821f0339c9e4b18eaf9594ecfc746a0e7e73875943454c7720ef83843e0e7393d9732d4f30a4ecfa523d0f30b9c3a8e3754c74a8e75990858bfc881978d00fc256e8570421095f8ac105ee6d634270601f659d3ace218973364bc9a032e6f08bc869b1754309d17bcc2215734455ecb195da5088c6e1d473bdb94f6ab1c726553e4f51cf249a6c81b38bb3bd9d0ee3672c0550c813771ba38c554179b39b3ab1a81d96de1c0ab4500be95d34975539dbca64396df789d1aa4197dbef1dac64da36b184ea3b7731b38a70501f6d9c0799d53724d5325efe0906b9922bfc1f5c2da86bdf04dce9c732230e7b7b8e1bb8ee1f0fd36a78ed30dd5f10e37b9ab6b38b97b97635ccf90f17b1c707d43e0f739559c61a88a0f38c6671a32dec9d9f25911d8f22e0efcec08c03fe41c470353c7b19bf3fb0d0dfdfe1eceef9f63e8f73fe2fc7e2343bfbf9753726353257fcc219f6b8abc8feb2be719f6954f38736e1281397fcaf9fda6867eff334e1dcd0cd5b19f7376cd0d9ddde71ce316868cbfe0805b1a027fc9a9a295a12a0e708ccf3764fc1567cbad23b0e5af39f03611807fc3398e0b4c1dc7b79cdfbfd0d0ef7fc7f9fdb6867eff7bceefb733f4fb3f704a6e6faae4831c720753e41fb9bed2d1b0affcc499f3451198f3cf9cdfef64e8f77fe1d4d1d9501dbf72ceae8ba1b3fb8d63dcd590f1ef1c703743e0439c2aba1baae20f8e710f43c67f72ddafa769f7fb8b43bed814f96faefff58aa0fffdc369bab7a1a6ffe5802f3104fe8f53c7a511a8439ea9d082f78900dcd2814b13e96b6a22311db21cbafb190edd711db01cbafb1b0edd091db01cba07180edd491db034a781867697a50396ce6e90a1b32bc099c56053b328c8511e6248b910d74d8646d04d0a73e0c322002fc229fb32536517e5685f1e01ed6374e0f2bdf770c3f7dec574c067d8c1114180ffe3818b73ea1819813a4a70ad38cab4158fe5688f8e8076498ef615a6b48fe3688f89807629ce46720d6da434a78fb1a6fa389ed3c7b808f45186031f1f0178594e27134c757202477b6204b44fe4c02745005e8e03bf3202f0f21cf855118057e0c02747005e913395ab4d4da512877c8d29723637a1bcd6704259999b504e319c509ea4039647c6a70601f639327e32073ccd10b80a37ed9b6e38ed3b859b5b5f6738b7aecaad5fae375cbf54e30cf9065343aece21df688a7c2a67c9330c2db906073cd310f8344e173799eaa226877cb329722d0ef91653e4da1cf2ada6c8391cf26da6c87538e4db4d914fe790679922d7d520e734b383d6047134beaae27fe1b78583297fde6198f37300a3d48d45d17d777587ad8b3851664e73a98b7304ff85d5e1659cd47ff875675c7ef8753469e9cda91e3755bb2b82a95a7d0efcee08c0cfe086e57b0c87e53375c0b247de1b04d8e76eceb374c07297e2be20c03ef7b49dadf3092d643f385a577362f3ad6b1b70b4fdfe7e9dbeb4ddee8178e6ab394db9725dab0137063c683a0634e4901f32453e87439e6d8adc88f3050f47e00b1a73b4e798d23e97a3fd4804b4cfd381d7b383738338844f78e0269c0b9b67e8c29a72ea7834027534d381cb5fea9b1f37ffe1e1e61cf30511306fc1317f2c02e62d75debda5f4ee438e8a77ef26dcafd3a527ac1fb1677f5c37a36b25eb7a9a8f0f3763942d1b84fcc5cce29e708693c347851b4a5a71f6b53002fb3a9f035f1401786b0efcc908c0db70e08b2300bf40072ebbdd128d8dd66995d78694215191d286189117723eeaa9087c545b6ef6b9d470f6d94e072c679f4f07017e8057477b6e145b66388a75e0a60bcf984e173aea901bd8c167ed846333224fe22fd6bd88e3fc9c29e74e1cf27253e4ce1cf2f3a6c85d38e415a6c85d39e4174c91bb71bd7b6504bdbb3b47fb4553da3d38e4974c917b72c82f9b225fcca97a5504aaeec5d15e6d4abb3787bcc614f9120ef91553e44b39e4b5a6c87db8465c174123f6e5c05f8d00bc1f07be3e02f0fe1cf88608c00770adb9d1b43507ea904fb5839b820ce6b379e0413a60f942717310609f178a8339e02d86c04338256f3555f250ce365e8bc03686e9c0e50f436d0ba28f963cf0659c696c37348dcb3945bf6eaae8e19ca27744a0e811dc4cfd0dc399fa484e1f6f9aea631487fc9629f2684ed36f47a0e92b38daef98d21ec321bf6b8a9ccb29e4bd08143296a3fdbe29ed711cf207a6c8e33985ec8c40211338dabb4c694fe4903f34459ec4296477040ab992a3bdc794f6551cf247a6c89339e4bda6c85773c81f9b225fc335e2be081af15a0efc9308c0a770e09f46003e9503ff2c02f0691cf8fe08c0a773e09f47007e1d07fe4504e0d773e05f46007e03077e2002f01bb9eef99569f79ca143ae6907bfd6ed0ecb17d0f2b8a7fb57de3de165bca0993a4115ece03741268397f2c037718aff3602c5dfcc4d61bf339cc2dec22dcabe375c94ddca01ff60087c1b6783074d6df0761db23c3ffa6310ca3ee7476771947f32a57c0767173f1bdac59ddc1af217c335e45ddcaaf757c355efdd1ce3df0c19dfc3b5deefa6ad772fe7320e45e032eee368ff614afb7e0ef94f53e4073885fc1581421ee468ff6d4afb218ef63f11d09ecd75f17f0dbbf8c33a6049e4bf20c05d79e0391cb04898013fc239682b08b08f839ecb01c70c81e7e980e559c97810609f43958f72269748989bdc7c8e75d290f5028e755604ac1fd381cb5e5b20086b9fd7db8f73ac0b46c0fa094ed7850c75bd50075cc40e160e025c8c075ec439a42241807d1cd2939c9e8b46a0e7c59c9e8f31d4f3124ecfc50cf5fc14a7e7e2867a5ecae9b944047a7e9ad3f3b1867a5ec6e9b9a4a19e9fe1f47c9ca19e9fe5f45c2a023d3fc7e9b9b4a19e97737a3ede50cfcf737a2e63a8e7159c9ecb46a0e717383d9f60a8e7953ae04a76f0c420c0fd78e017b9796eb984e13cf7254ed1e52350f4cb1c788508c05771e01523005fcd81578a007c0dd79ad9a6adf90a875cd914792db70038c97001b08e033ed910f8556eee58c570eeb89e53f229a64adec0595dd508ac6e23075e2d02f04d9c4eaa9bea643347fbd408686fe1c06b4400be95033f2d02f0d7b86e53d3b0db6ce35ab296694b6ee728d736a4fc3a4739c794f20eae09eb44d0846f70e0a74700fe26a793baa63a798ba35d2f02da6f73e0f523007f87d3c919a63a799733ed330d4dfb3d8ef259a694dfe790cf3645fe80436e608abc935373434335efe2d631e718ae633ee418373264bc9b5372635325efe1bae0b91174c18fb8a5d779864bafbd1ceb2611b0fe9863ddd490f53e8e75b308587fa20377eea10fc27a3a0ffc29677b2d4c6def330eb9a529f27e0d72cef976f028fdd2726731d4ae887b9545b4df87b6d2b5ae4534e57caa797e22d32f2d9bb0e43ed4fc9c6be3d6a66dfc850e59b6719b20062fb5c1007fc9f5ff0b0cfbff014e17179aeae22b0eb9ad29f2d71c723b53e46f38e4f6a6c8dfea90e52d021d8234a0cf2d02df7196d1d1d032bee7185f64c8f8078e712743c60739c69d0d19ffc831ee62c8f8278e715743c63f738cbb1932fe8563dcdd90f1af1ce31e868c7fe318f73464fc3bc7f86243c68738c6bd0c19ffc131ee6dc8f84fce6f5e62ea37ffe27471a9a12efee674d1c75017ff708cfb1a32fe9763dccf90f17f1ce3fe868ce5d11c2de301868c2d1db0643cd090718c633cc890719c633cd8907182633cc4907192633cd4907116c7789821e3023a60e7027d532f549043bedc14b9900e59aebf8747b0fe2ecc818f8800bc08073e3202f0a29cc247992afc188ef6e8086817e3685f614abbb80e591e441e13a4d3f81c442ec151ce35a57cac0e591eca1e1b84724b1eb824a78b7186ba384e072c3761c70701f6d9842dc5319e60c8b83467cd1323b0e6e339f049118097e1ecee4a53bb2bcbb5e25586ad780237704d361cb84ee4147d75048a2ec729fa1a534597e790af3545aea04396dff94c09a2699fef7c2a72c0530d812b71b631cdd036b239db981e816d54d681cb76b92e086b9f132a2771acaf8f80f5c99cae6f30d475158ef58d11b03e85039f110178554e25330d55528d637d5304acab73e03747007e2aa7925b0c555283637d6b04ac4fe3c06f8b00bc26a792db0d55528b633d2b02d6b539f03b2200cfe15472a7a14aeae880e5b5977725ccafbd3c9d1b79ef361d79ebea90e5aaff9e20faf059f5d7e35af1de085ab13ea78ffb4cf57106877cbf29f2993ae4c276f0810464cea090a23cf8595c333e68d88c6773fa78c8541f0d3803991d818134e4f4f1b0a13ecee1f431c7541f8d74c8f2f3c1478250f6f97cb031073cd710f85c4ec9f30c957c1ec7f85143c64d38e0f986c04d39552c305445331db0dc49782c08b0cf4e42738ef1e3868c5b703a7ec250c72d39e08586c0ad38552c3254c5f99c8b7b320217d79a63bdd890751b8ef59208585fc0f9cfa74cfde7851cf25253e4b61cf2d3a6c8ed38e465a6c8ed39e4674c913b70c8cf9a2277e4909f3345be88435e6e8adc89437ede14b93387bcc214b90b87fc822972571db2dc6e5b19c427f96cb775e3805f3404eecee9e225535df4e028bf6c48b92707bcca10f8620e78b521702f0e788d21706faef55e316dbd4b74c872f9bf3608659f7d824bb9d1755d04a36b1f4e1faf9aeaa32f477b7d04b4fbe9c025990d4194edb32ddd9f33bc8d8686378003de64083c906bc1cda62d388853f21643250fe674b1d550174338e0d70c8187724ade66aae4615c37d91e4137b98c6bc1d70d5bf0724e1f3b4cf5319c6bc2370c9b700407fca621f048ae05df8aa0054771e06f47003e9a037f2702f02b74e0f225fbbb41f4edf3927d0c67d4ef191a752ea78ef72350c758aec77c60da63c671c83b4d91c773c8bb4c91277093a50f0d274b13b936dc1d411b4ee24c7a8fa1495fc999f44786267d15a78ebd11a86332671e1f9b9ac7d51cf23e53e46b74c8720fec93209af6d903bb56072c7f32ecd384e14f864de194f199a932a6ea90e5fee8fe20caf0d91f9dc651fedc94f274aefdbe306cbfebb82ef8a56117bc9ed3c501535ddcc0217f658a7c233757fada70ae348303fec6107826a78b6f4d75711387fc9d29f2cd1cf2f7a6c8b7706eff8708dcfead3a70796ee160c2fcdcc26d1cf31f23607e3bc7fca70898cfe298ff1c01f33b38f05f2200bf9303ff3502f0bb38f0df2200bf9beb41bf9bf6a07b38e443a6c8f7ea90651dff08e2027daedbb88fa3fca729e5fb39e4bf4c911fe0ace3ef08ace3410efc9f08c01fe2c0ff8d007c3607fe5f04e00f735e5024cdbde01c8eb98c3365fe08071e8b007c2e67e4f1a4a191cfe39013a6c88f724d998ca029e773e05911802fd080e7b49676d2591ccebb4ebcc82decb471a2bf8323ef0e1961a70d70ee09196ea3f5cf708b49019b7e658d1e1c5d584417ce6d260593f2369332796a988907774fc963ba26925a2ce4478d369364c508789c13503822014f7046562402235bc881178d007c11a79a632252cd939c8062110958cc09281e9180259ce32b61eaf89ee24682632318099672e02523007f9ad3c971a63a59c6d12e1501ed6738daa54d693fab43969baac727cd36559fe3f61aca0401f6d96b58ce019735047e9e53f209a64a5ec1219f688afc02a78c7286ca58c9019737047e9103ae6008fc12075cd110f8650eb89221f02a0e38db107835676f954ded6d8d0e597e337e5210ca2d79e05774c0f2dcf4c941807dce4dafe580ab1802afe3947c8aa9925fd521b7b083558350963fa7c500afe7285733a5bc8143ae6e8abc91433ed51479930e59e6af1144cd3eef1c3673c0a719026fe1806b1a026fe5262fb592115c44ceb5606dd316dcc6d1ce8980f6760ebc4e04e0af73d3aed383b4a4cfb46b870e58beb1af1b04d8e7d5fe1b9c3aea45a08e373913a96f6a226f71c8679822bfcd8dde671a8edeef70c0671902bfcbd9c6d986b6f11e671b0d22b08df739f08611807fc0a9e41c4395ece458378a80f52e1db8740a8d83b0f6b9b7f9438ef5b911b0decde9fa3c435defe158378980f5479cae9b1aea7a2fc7ba5904ac3fe674dddc50d7fb38d62d2260fd09a7eb9686bafe9463dd2a02d69f71ba3edf50d7fb39d6ad2360fd39c7ba8d21eb2f74c092c80541807ddeb07ec90de5179a0ee50738e4b6a6c85fe990cfb483ed822823ce1f4bfb9a036e6f08fc0da78b0ea6baf89643ee688afc1d379bbe2888327c66d3df73c09d0c817fe0ba76e708baf6410ebc4b04e03f72add8d5b4157fe21c473743c7f13347b9bb29e55f74c88dec600f3bae8246d35a6d77e6a7ecbf72d47b9a52ff8ddb4bb83888b67df6127ee7acaf5704d6778803ef1d01f81f1cf8251180ffc9b5e4a5a62df917b7c3d927484bfaec70fecd4d11fa0601f6bb829b5374bf0814fd2fa7e8fea68afe8f431e608a2ccffe6897fc038368da67c96f71c0830c81633a60d9e4830d6d23ce010f31044e70c0430d81933a6069cdc322b0e62c1db87367b6a9cd15e0685f1e01ed821cf8f008c00b71e02322002fcc99c948433329c2b11e1501eba23a7039ff1c1d84b5cfcaf9188ef51511b02ec6e97a8ca1ae8b73ac7323605d82d3f558435d1fcbb11e1701eb929caec71beafa388ef584085897e2743dd150d7a539d69322607d3ca7eb2b0d755d86637d5504accb72ac271bb23e81637d7504ac4fd481cb61ef9a20ac7dd631e538d6d746c0ba3c073e2502f00a1cf8d408c02beac0e584645ad270425289a33d3d02dad91cedeb4c6957e6685fffffda3b0bf8288ef7ff0fd652a09442a97b6949698b24c1ea24681b0a8540bd3424215002499360956fdddddddddddddddd4bddddf5bf337bcb7eeeb293dce5eeb37926bf7f791572b9bdb999f73e3bf2680ebabdaeadf1c372d0f87a36268767cba48faddb47e4a0dbebdb1a3f32078d6f10d57857efe551e94c27dded0df7b5f5fae81cf43acf76278fc9f64e6e68ebf6b139e8763f5be3c7e5a0f18d6c77f2f82cefe4c6b65e9f90835e6f62bb9327667b27fbdbba7d520eba3dc0d6f8c939687ca0ed4e9e92e59d1c64ebf5a939e875beed4e9e96ed9d2cb075fbf41c74bbd0d6f81939687cb08dc999d9321962ebf65939e8f6505bb7cfceb6dbc3a25ad65be973d211ed26f6dcc36d3ccecd018f4d6d3ccecb96c766361ee767c963731b8f0b72c0630b1b8f0bb3e5b1a58dc74559f2d8cac6e3e21cf0d8dac6e3926c798cb0f1b8344b1e45361e97e58047b18dc7e5d9f21869e37145963c46d9785c99031ea36d3caeca96c7181b8fabb3e431d6c6e39a1cf01867e3716db63cb6b1b57c5db62d6f6b6bf9fa6c5b2eb1b57c43b62d8f8f6a59bb73dc988e7434e1ceb15d54c3dacc76533a0d3761669b606bf8e62c1b9e18d5b046774b3a0d37a136dbded6e35bb3ecf1245bc3b765d9f0649bbcdd9eadbc95da5abe23db96a7d8a6a33b73301d4db5357e570e1adfc1d6f8dd39687c475be3f7e4a0f19d6c6bcbbd59ae2d3bdb1abe2fcb8677b1c9dffdd9cadfaeb62e3f90659777b375f9c16cbbbcbbadcb0f65d9e569b62e3f9c6d97f7b075f9912cbb5c66ebf2a3d97679baade5c7b26db93caae57cefe5e3e9c078cede7085ade127b26cb832a2e101e3bc97edf650cc2c2b53bdd68acd1523d5b6de7b65def5ba4dfff713bd16cbbcefd6ed8d30dfa0739ef8ef257fa2e9fc2b4f46d1699742c7e45d79aa93cebbd2c75c999b9ed932b2ccb049dfd3d94a5f95ed517c26cb47716654c33a0be8b3e934dc4416d059b6869fcbb2e13d6d289ecf12c56cdbdd7b21dbbb576d6bf9c56c5b9e6383f1529630e6da6edfcb59debe1a5b8f5fc9b2c7b5510debcdd7ab9d7290cfdcd6ebd7b2ec759dadd7afe7a0d7f5b65ebf9165af1b6cbd7e3307bd9e67ebf55b59f67abeed317c3bdbc77081adcbef64d9e585510df7f35ebedb29030fff8bec5fb0c8d6f3f7b2ecf9de3611793f0722b28fadd71f64d9eb7d6dbd5e9c835eef6793bf0fb395bfffd9787c94258ffd6dcbc0c7592e0307d8587c922d8b036d2c3ecd92c54136169f65c9e2605b8f3fcfb2c787d8207f912de4436d5dfe32cb2e1f66ebf257d976f9705b97bfceb2cb47d8bafc4db65d3ed2d6e56fb3ecf251b669eebb1c4c7347db7afd7d96bd3e26aa619dd1f1874ed967743cd686e4c71c2039ced6f84f3968fc781bef9fb3e47d82ade15fb26cf844db13f36bb64fcc49512dafecbdfc2d9d2e8fb5377c7254c3fae5efde5faba5bb11eb64ff82536c3dff23cb9e9f6a93bd3f73207ba7d91aff2b078d9f6e1393bfb3159333a25ad64bf93fe9c06e62293f33aa611d17ff6f3a0d77b0c7c59f656bf8bf2c1b3edb06592d9525e473a25ad6d55ada2d955db596736d5d6e9f6d97cf8b6a79b0f7b2433a5dfecfdef0f9b6e7a4e35239485e6ee3d1295b1e1746b5ac75d34ba5c3a309ddf445b6a56569afe1be290db73b4605badb29aac2e89c7dfdf41cf3f338a3b9d65adb19de477cfdf4b825578e52f3bddfe82b2679ffea776799dfd4a9fe6a9af767b279b7c26b719ed132eb76c3cf8cf4fe0db4c2156ab4f7a93235c77c83ffd95033edebc367197d78f23b7eff0abc114e6b6214a3bcffe7299dfb3bfcf652a38f0fda4c6e75aaf7a9595e3b99acbb17dba8778ea2ae8ddb53bcef9ee55dbbc8f4afcaf4a5524d50d3d59e86664382628daaf5fe1ea7b4cda0da5809f4a7f43bcdb7903a326d4da831768732efda4cc677896d7ccb448d6f33ebf8c624ee72e3715679af748f1b8c24ccf5fa3cc3d823e63431d6d246d76632a64b6d63ea1235a6a1d63135ee45f2886abd77eb1272c71acb65b6b1748d1acba6d6b104d6a91af36a6e2bde9dcb6d23ea1635a2cd5b3ca2aa0889b48f294a7e3319d515b6512d1b35aa7e19cc13c178e6267ad8d42c9a498fafb4f5b87b548fb754cafaad7e3f472764a12c627eb2cff44dcd6a2d1dd955b6912d1735b26dadf762bc194ba5e983be7ca2b1ded69adfe86b8bbcdfd5783d9f9d20506ed6c23af3b35dd2d26f3593315f6d1b738fa8310f49b99be17a3bc2eb459d59bd1b8fc9b642dbde09dbca6424d7d846b2bc6d454a6f249313cf917d1ce98daf25bb886b6d63ea1935a6d1694b64cbee56a66d6732d2eb6c23ed1535d22d52ee1ece06d9ddbfa6e69596dcc1eb6de35a216a5c239b1817eefe46a9bdbc0f9499fd9fbe1fa93d4d1e45bae36bf96ef006db287b478d323f83bb37a6d9bb671f5f2623b8d13682156df7c9b6c7a9540bbddfce333bbc5c3e67b6963319e54db651ae1435ca314bce82be4f4e81397594999d85fffbf0b5aeacb4c0eba75e83cabc67243cf5a5ae6ed9b498c9586fb68d75e5a8b10e6f62acc9e4f5bdd2fbd7cc4617dd4626e3b9c5369e556cfbdf968ca73ef1bce9e76eae61eecfeee33d29ac35737d6dc489bce533c7adb651ad1a35aa5b732291a9ef849f49bd8381175aa04bd075c2d25d079bd240b4548f92a97c352591e39a2596c97dbccd761f57b39d37a3384f510dc60f7296f9d7f77e9c66b41df5898febf5b7e9d52e579279bb6d44ab478d6858066b5ae67be3e8d63219cd1db6d1ac61d34745f70c772125e60ed57bb237d3d0cd7e8fdcf2bb75a76d7c6b468d6fac75fd6eac1dc8e51ade54eb998cf62edb68d74a4736f17c9cbd6c46b796c968eeb68d66eda8d16c95966c8ef0e6898ac43c529313d90cdfc9646cf7d8c6b64e3ada92e4e701c737c5e875eabc6bb7f3dead326b4ff44893dbc8dd1377af6d64eb468d6cfd9491a5ca5da0ad2a31cf4595f7f3cc1cdd81fb6cfd5ccfa6d5695ebac698553658ef83f96f82f77378326bcdd9f07edb98fb448db9b889f921573abaf07ee74a5bf7806d8ceb478d71b075c6d776a7e9de45c1584bbcb1567957d419fd5ae39930d71a82076de3d8201d0d4126f2d99a12f9906d947da34639d03aca6cf5032d9b431eb6f53e2faaf793adb296893e271d6b5e9c16bf476c0c364c47c7d3d49e23d37bd8d219e351db08faa5f3a4359e15d3d3c5d9e7c7e47772759f1eb38d72a3a85116a5359f4c56ba6ab66feb2b6ff53dd5e3b6116e9c8eaeb82949cc4c57dcd4fd6bc94af0846d5c9bb4fc8cd69c74c6b9063c691b5fff7476621ccb21dba6f8946dcc03a2c65ca9b8de370d09ab6155c2bb66aa3943687dd574734773637f6d89ec3f6de334308ad3143227bb9752d384b2e7f08c8dc3a0280e3bb6f233c27e7a9eb5d1c8b7d93fd359b1c7995d92ac55fb39db480ba2463a2aadb97fbc7771b559ad034f31bb9620aeb5fb79db380bd33999a6aed7c566a48def1e9e36d3f97d6eadf62fd8c638389d75bcf118c3b39ceea7be4e4b5779c47c5deafd5c6b7e9fdee85aa6af7bd136be21364b5453e3f3d7a5f003e9dbb2737bd75eb28d6a68d4a876c9b164da9ebf4cafcf2d93976d4c864531196f3df74e4aaca9be36022d55c9dabf0ab356979bf9b556859ae84c5b1d19d14e26e37ec536eee151e3deadc5e32ecff1185bd24e265c5eb571d9d4a6c56919179cf372b7c6be66ebfd6651bd1f94b5342f30cf5bee34d9afdbfabfb94d03935dff672abd37aef2fe6dea4c9cc908deb08d608bcce693545b3bae24c9236a7a5f978ea74d2ee6d1376de3ded2a693c97cdce3d2389ff0568ab76c23dc2a6a84fd5b2c9bfa7dffd9afcfd1bd79dbd6f3ad6ddaa474a426df9b9f939fa6e926ba45fbe73696af745bcc645cefd8c635226a5c3b2bde89dad7ef66a379c88d8fdfbb362245e968b08bcd58fd7105dafb52ef77e9796de466fe7ccf3682e2a81114a43982c909ce51f7a1292d7cf8a94cc6f0be6d0c23a3c630ddfabc4d4d90d5fb9ec266bc17924798db776c4f6f72ff3221f4818dd0a82842252d5a2db0772d59239347978b7978b16dd4a3a3469d97965c14a4ccc10b7326c51fda7a3b2677bd8dd24ab5acb71fd97a3b3677bddd3b67bdfdd8d6db7151bddd7ac9cad5121fc7e4314c322b9baf3563adcb9fd846b74d3a3a4d7b3c68f33acdb8a3023eb58d74dba8911636711f33f1ed9de5f55c7bd8e56a7ff8996d142551a31890e69a5be45d1375ba6dcaeee67f2293be7f6eebfb78db1db0dff96cadf62d97a32f6ca3d82e1dffc0a6479199c5b7695fba9648d797b6b14db0e9c39b3f37854f4330afd51b0f20fd4e45a35d417d13335d6e62bbbeb28d7162d41877b58e112d72f673626efd7533fbc64ca87c6da3b27d14956dd25a93f313a3ca2583a6dbcf64c4dfd8463c293dafe57037910bafe5a8d63219cdb7b6d14cb6453ca43f2b653e1e5b7b998ce83bdb884a333b7744494cfae3ca857c6632eaef6da39e9259d607fba8c31d72a5d181f0c6f2836d2c53a3c63221ab39a5f99533fdb673b192fe681bfb0ee97985d967974cbdc2ecda94968ceb27dbb876cc4c779cde5a962cb173546a4c5bba3b854c46f8b36d843b458d708346772ed5cb83174bf08bada73be7428fefefa893ef47737ad1744ea8998cf057db0877b13d45f678c9c966d789a7b3d49c15befe7464b3a3ccfecefd661bd7aee9e4b9f0efd7ccc428c69b9eb59607cdefb691ec1635924919de217fae1b634ed6d34d334dcb63f3f37dd39f6fc98cf8878dc0eefc19515b3ce6256c1645de4f33bc3f95899355ee4ebc7fda46382d6a84dbe56484f5598f3017f7f62fdbc8f7b0593832996193cfc33e0bfb2c8a4f472663f8db3686325be681a6d7331dfdbc9dd14a562762cce6188f8fe6bc1673258dffd8c6333d9db9b3f178f46fcacc0a50af7630dc1bafcf9c91fc6b1b497966fbe3686d4bbd62695b72f164fd671b7b457af13bf6fd71e6f13b2db30be834a99123a8b4c57837ef239b1ac32e2786b39d6db433d2b95f53a04fd9de2f6c2b9311b4b78da02ad3ac407ebfc3fbd2380309c782d1c1368299b6a8844cb378465b6da4c5fe75b4719815c5e1b8257bced6cd213bd9b45063aecf248b6cf209be75f3c876b291df331d7ff9e8392f1d5b619c33dd52b631ce4e273638530b5bd34f48e636b6a56dbdafcea6f7cddb0173739aec6cebfd9ca8de6f649de19a3a33e5da0f76195b9fe746f579e316f539f7beaf5d6cbdae492f27433827e1b33cd2cc8fdae61d1dd793be17532e76685d6d63acb5e5974b678ce9653368d9485b3e6b75b38d75afa8b18e4b73ac99c46cc57b6f97b58db72e1d5f02db3c3712b40d4d8f2ff93dfc5c26a3e86e1b45bdcd4fd9ae079c64fa3037422fd2d4a85adaf3e56c3d6fb0452fd87bae3371eb9e97abe8180b46ff7bd8fa3f8fe37ddbd4185a36832f6f1bc1fccc3cc5d3d5c4a5b36ee6628fd9d336ae05b61c55d98d2bbdb5351723eb651bd9c2a6a3caa374e563cc19bad6ebb59e9583cc8445891d74bab698cce3b372c161051b8745511c6609e5906edecdec79f5b6f1da3b8ad7baaa39cd4560d90ba273937b18fc3e931eae68ebe13ee9e4950bbe31934c21d1b1c5b631b57c5fb5926d64fbda3266e4cef631cf1b4b850a32ded6984f64eb1d36c5d266b632bab28dd37e362fe9ec39e158b833f72ab6d1fd2f6a743be5647455314b41263c56b5f1d83f33bb58aeee764beee96ab6311c1035863dd2da674447994555c548dfeed2541b3c895fdd46e7c0283aa522e9644f610d1b85836c518bb9a9c1223776784d1b918373f1d44c8e452e784fcd5a363a87e4e2a989874ef614d6b65138d496592d3b9fa0c08653a5020f8aec6c072d19f33ab6311f66f39fcf6ecca3951f6dd47a9ea0ebda467c7866de0b2d9b1ba33d75ed56b4dcdeedf56c633fc2e6f596cbb1dbef7dba56c4ec09f4b11138d296212cf3a86009e35cdf36cea332f3c76fcac7361d59ce85c67003db588eb6c588643e9674ef596eac007d6d233aa6e53ad0cce2d5d25f733319579e6d5cc772e756093edf1bdac67e5c7a96c9e82c8bcd5560686a46694a6e5b9649b29f6d8cc7dbacf499648bcfc4c7a02573e246b6de9f60f3078edaeb6c67646d81d29137b393ee982f85134c4c75d33eb151f54ef5d5f6bdd5c4251e39759e4cd47aed6432f28d6d233f316ae499d447f5339fe45ed236b1f5f8a474a259a22a7eb07adadfd6d393a37ada4735ed5bc4eae5005b2f4f89eae5faaa395d3cab9f036dfd3c359d7e36f60760f57390ad9fa765f644351fefd838db4acb7651f9b61e9f9eeb1e37e50797498f0b6c3d3e23aac7f67a11b65ad5fe7cddf8dd7ad3df892ab9beb8cd5ec3ad5155686370a62deabf35f38fd9ec584d3d812db1db0db651392b8a4a73b973c725f6d00bbd796e46a3fed972c76693976c69ef4fbb765dbd1f47992b7505aa896647e3cbdf00ad6831fb27ff6ef65f7297fa27ddd1f0f7fadbe7783dd2ab5ee992fbb1b15abb9916cef6802dd55ef9fff56da76137246e48bb1929dcfc4f569b96c3fa15da761dd6b9d4d6ecfede7e6e96f9d41edebddac5fbd3dc28a224b33fc8268eaef931ede6fdd157699fe272334f696bec744f62964e8c2868cb23add5786d6ea4e7e8bb9a97b8abed07e82403c6ebb425d2d47c2fced5dfd6215a86566a4416e782a8befb0d6c97d821b75bde7b310db0cd4d1c086b4c93e312936fb3df8a4f6bd4b76e621a08e6a2669bc3608ea8e65631a2e61fdeea941f1cd3a79b524b776a3f50df8df398c85637c8a6a9814b66374487f6c8b1667f5c61e4bcce6b34df099003078420cf67825cd37b116c6a8a8d4a20d8108c50f5e63bcacd721938974e482c9875e6689ac6e805c02cdc2e84790113e6aa495219e44f9ce4fd5492e465981a2deb02c40f2684102f94f9680f7202e4151b84202f62825c29096494fed0c587f98ab3427c1733f12d97844f1f817417aa129b218dcd055cdfaf1ae2ba8489ab97c1e59fc182ec8b25cacfbaa8abc295277682f54e603b66db10dba5f12d1963dad492f135acbb97b1652fd8c4a46e9b67253c55f77606db15b089be9c896d8524d92b321facf0a4cf5f0c6a9214f22e801bb87508ee8a3856d641b0cf737f659d784e88ef4a26be5554e36d72b137e7953a3fe34d9c1422bc8a89702983507fdccf8fe2029c8ef0785ecd84d353e199b6cca4c0f11f4b9d20678437c3f92a5e17a0751b1f42bb860d2df5a10c6dd8938da435383293bdb23884762d13da8a5649d326f44a934e42773f08477401de4490b8ebd8db8f68d5d364556e7ed6af463ba3fc7c03c05dcf04b7b28ad2174f304aed1a03521fb58a13e1ef55ceac9e9d4f0c01dec004b86e24c062136faa3dae50c984b298eab3e502d4bc8b43a837cad4db153801f2eb7e21c89be2db1e0716fcb6b03d3e676288f06626c2a50d420ccf7301cf0bb786786e61e2e961f0149b2dc978f330ce6bf490ba00ecef474360b732817536c0b4d3c88cc497cf7402d0cae787806e63025acdba2509d549e119c23539fbfdd810e3ed4c8c6b29542cf953bf5f6a4abb29cc3713bdfb8aa673ce0b71de119f9eaead58c03a9f1de2bb9389af8b0a4c3a7e09e906a33559e404a41d4b424877f1ed5efe6e2dc80e111870469979d0dfafb9b143bb074c3677b3adabc1e1df5d534d05986aee89636118d8a617863ee78638ef655b5d9bd3dbe910149d5a6f512294451bb55d80780aa8a1ee8bcfbfa4ad58c166c2ea7a3f135f57836f9471ba0dac13ee787a6ac7ed00d303716d42b4eb4db09eba006975d8843cc8571935a57373d59433f6e310e1434c84cb26cd667a6d75cdd5ab74b910d5c3f1d957d170933cfdbb00ed0978441f896bc3ebeef960a1391f2cdd29a5f1d18d1a6f697049668ced61301af7284f166bcd6f1b949fe63f292cc6db27c9ebf9a318d692d7c426212fcdb091bc348e5a791978d0e5353353e6a5e1389b97959377369f2ec8ead3f9dea7533d6ff23272a3cbcbc04f36cfbaf7c9b3aa66f2d29e9c53afb4bbc9e465ece690d7e203565e465e01795987afe4a5312fe765a0e3c96bb1436fea27d38f1ec96ba1c530f573e93ae2e565a1edcf6b91f3425e0b6219c2cfa4affd4dfd9e74ceb4a9df93de67b2d7e7e4e5c058901769d8cacb997f445e8421362f2deb635edafe68792d3cfc84f1c9b82d08e38a07eaf8e4c7fe8f870e0fd4a1c38f6b081775f221f83be527d82189fa9efb91e27355b54a3f03c1343524b53fab37eacf2453d240df21fd7dc17e39aa67cb24eda89f4b67b02dd9556fd8213c843cc957d9d5988ff810f5a392818b53ee608e62c12c5321cca7f86e78c9728a0da6d63c1dd6d8d12977387bb370ee07b2f9b4249cc39dc4f930e07c4612ce414ee29cd73ec4f9ac249cf94ee2bc0f703e270967819338df039ccf4bc259e824ce1e3077be2009e7602771f6079c2f4ac239c4499c9301e74b92700e75126739e07c390e9c5556a0d87dbdef241e31bbb170dede2ec4f98a249cc39cc47921e07c5512cec14ee2dc0670be260967a19338f301e7eb92700e7512e7c180f30d4938873889734fc0f9a6249c839cc479b30a71be2509678193389705e97c5b12ce7c2771be09d2f94e1cdec83698c9b98ca9eab9c5b485a86308f35d49301b25557500e6ff00e67b9260364a63e900ccb100f37d4930073a087334c0fc809f78daf7b1d0fe1ffeafebcdef6a8d7f9bfe0d0de0aa2c80cfc11abe989dffa729694cde5d0e7610e52560c2f8500aca022751ae0a1acd8fa4a0cc7712e58f20951f4b4139d849940781547e220565a19328a701ca4fa5a01cea24cae701e56752500e7112e57580f2732928873b8972386cccbf908272989328d705945f3251f64ea02c57be3b764324ca21de92338d7958ecc402390ab6425ff1533cd965120b1362413122d43216d43b60cefc9aad04f62332f4259312ced72586c42cf373e3bac6349c7d593875a44a80f39b381ef6a1deff954b8afde90efbc5ef5c576c7c0320bf8d2399a7dd38818a367cdc89dacb1e2cacf700d6efe2aa29a3a5b02a11bc15834cd2b495bf01bceff9592b7d78b3dacc23fd0ee0fb813d37ead5b9c67b0b0bceebe54537526a7006b1693490dd59207701903fc6b139aff62eaa36b2d894d277a88332f91d6cce7f8ac3066edb9c63731ae64026cea55938b7822dfacf4c9c6ba874232753f794fa44eedebe722680fd452ad8610e82dd1dc0fe2a152c51ed41033b15c0fe26156ca183602703d8dfa582252e5e34b0bb02d83fa482257ac6d1c0ee0460ff940a96789aa781dd06c0fe25152c512b4a033b16c0fe2d152cd1af9306762280fd472a58a28f270dec7800fb6f6b1aec520fb2ee1d626700caff9828b52b7a6812f1b552968ca2b9c3b6290b5b3f1562d3378786adbb0ab38195197c316946ff63a17b1bd0b563a24b3fe154d406c9c563e83960df6ccf44bb7ada68931db70b98cbcd3fed49585f02bd69078958a9911a34ac8703d68e12b10e7212eb8e80b513136b9020d7a6e50f464add18756847c2f8282c534bc5b1c20f6c332bfc03806e6926ba206a283d3b1335e89fb6412f87a097ce9260ba68b2ab0098cb488249d4cdd3609601cc2e926012b7ee3498d30166574930895b201acc6900b39b2498442d260de61e007359493089ba761acc9d00667749305dd45dee0a3097930493e81b42835909307b488249f460a2c1ac0198cb3361366fa008a337a8d6c9612c9445a0d3ecc94419544dc924ad1411282d75cfea60f1e9250d287119a2015d1b80ae200d2871fb4e033a1080f6960694b885a7011d01405764ab8443236f91d26109bab250db88775b5b85185762625c3762554fcf721953c816adca4b0948eaca728dc32e3a7fdf081ba955986897f15ee8926f0d5e7bfa6fbff41c0dd81416b0a1f0b8afda9a9bf864aba48ba9cfb602d95b2d0e9ba4769709238583b76332acd18e95cf8144ae1ec7195ddb246b52aa0b86665db723342f8733fa1a71b81fd87799d8604c2bf8c12cacdd00eb9a71c8a80d6af2c69daa2ee6a553e914c25c4b124ca264d260f601986b4b82493ca3d360ae0f30d7910493783ea7c1ec0b30d7950493e8964083b921c05c4f124c17f379f503987d24c124ba72d1606e0c30d79704d3c56416fd01e606926012754334980300665f493089c65f1acc4100338f0933483b956f4ee27eda1fd7551c7bc3f171c3386c3f36496c5c487938531a690517770369ec270d2871aea401dd05806e240d28f15c4e033a1a806e2c0d28516b44035a0c40379106d4c5a2b5db00d0fed28012b54734a0e300e800694089e7741ad012003a501a50a2168906745b003a481a50e2799d06b41480e64b034ad426f10ad303d00219e1d3a50ab37a50934fd2327b3cd631c45a1857668f39c6c728a6b33bcdc368119cdd0733d1f50074ba11df412b267cb4077a18e01bc2c4d747a5663a9eab6678974f53533d2ac55e7323d5b65ed7c719b9ac6af4608f5b723df174f4082b3f4215b8180e8d433d37d8fb3f68d575a7992120a3c3e2f0894b2f4ac8c550c023548872b8ac0d1155ef4e9b3f8f82957b5369405dd4741e0940379306d4454de73c00bab934a02e6a3a1b00e816d280baa8e9dc0f806e290da88b9ace7d01e856d280baa8e93c08806e2d0da88b9ace0300e80869405dd4741e06408ba4017551d37928002d8e432537b0cda8e446c0797da48c78ca5203539fe96798e6e670cfeff7b2f44865a0471ac544dbd57b31d320ab300f739d8911aa626e876825193bab10dae8d680e6621dcba501da98d655baf94db99b4d6635980fc7c611c23fd0fc1dfc3bc67b2b08881ea97490f47403b3c8fb6986f7a7d274b4c25c5b67ae756fb52e00c4e3e258ad0bdacc6a5d02e8b669cd8873944d6aed95ce9d4828af843de3b64c943d159a71135b03633473dd15fb7858764ae27630b0d97a303c3a9fa9c0a005482f05b910c64bc44aad7d41c37a036cc7b763620d8ad10f341ba532afd5c02eee5bc9637aec690e300fc3223481bd7eeb045165de97fb1f4a7633700f5d5f983127c6b1f5c96f335b9f0340eab667a25bb5995931ec3ace89c4b30ead72fa15b0d04c8a633739d0b863959b0ee8c43be3cce93bc63991e6f6721548e764f66eb2cec0d3e0ead40493416b8c9927a79bf463fe1c494358c142b815cc8da54c8441f1f974b5e2c39cd4899f000ff7144938dd74a67e16704e9584739093388f87cdf80e9270e63b89f321c0b9a3249c054ee2fc0e70ee2409a79be6d99561eedc5912cec14ee21c04387791847388933877009cbb4ac239d4499c358073b7389c5b06264c61b5de6565de072acddbbadbe3db84e2e37e385aeece04ba1a00d5e6098daed8a8daea124093d56f31d820698ab80d00eab438ac3f03cd835f91a4338a452e69daa32a40b80713a14e173edf7bb3de7b7ba4f7ab85dc74e1f52c60a35508ac8c092c2f62a18976b5d28fb7fe9a1aef839354a8554a7dd089da4d5a76f67361219ade9a4e3161d7f569ddc5c4b89780e49633513697fd2db5fc36d1fb77310be696e0785021092671b74983b929c0ac9404936821a7c11c0a30674882498c9aa0c1cc0798559260129db568303b01cc999260125dac69303b00cc59926012b7463498ed00e69e9260ba5805e83fd8b2cf96049398ed8006b31824b35a124c62a6031acc1100734e6bc24c8eb0a03ee6b4188b8b01e65c4930890b100de6e500b346124ce2d68806f30a80592b092671d34e83790ce41fdc2b0e87eb205dd99e4d28e05c2cf275266c8beaa4c4e8a282385f8d34ae3334b49a00c771061ef8fad60ca84a5612bb58f0eb74709a699082b2c04994bde0819f270565be93281f00a99c2f05e56027512e02a95c2005a59bc511b705940ba5a01cea24cac701e5222928873889f21240b9b71494d4fa1534949bc0be721f2928873989724540b92fdb55cb8f95ac341fd3c15453bcb62b12bf2bf17ea71ba7211cc54238408508f78b23ecb450b595b0d3c9e0e5f6bf383442fa41ad51f38d0cea8f570007d7a3246f0698fb3361faf9ffcbd54ca5cd0eb3d5e80432edf15693a0e21ebebde0313e208ec4105569d974d0a595e8a941cb9ef523603db035d76a6c8e5a1b859611e679386d1fc444d94da5666f8be1c1a6b9527704093c388e073bd094fb6bf4381586e1b725bdf969709e39248e073bac97d274d162f7509e049bf043e3f05d8f4a8b37c974468748e9ed51458a116242caa6c9e5f0949b60a37458ebaef4d8fd98129ebcd58e84f548c07a781c86b4066f91d287c6a070d214af333a4820f8b7c8bb582f63f3bdab6a8c1c93ad3fabb324763d58f98f601f31cb9b884a73ef616f80d5ff4826ba1554d3fbcff098497437e8c07ab8cf027783a35a771b8fbe1b446f379ae7c6f1b0da1f1d87d223bde5877a26eac68279393cdec7488249944c1acccb00e6b1926012e37d68304f0698c74982493c21d1601e07308f970493182349837926c03c41124c628c240de6e900f344493089eed634988702cc9324c1249ec769300f0198274b82493cffd0601e0d304f910493a8cea0c13c0c609e1a07cc72159d3c223529948b45380f0698a74982e96289d89300e6e9328201c6a738cd90e3d268be1e43c15e748654b4f94ea2ed051aa533e33068348f36392cb5803919fcc32a31770f603d4b22d67c27b1ce01ac674bc44a0d55a5619d0a58cfe1bb7ff9c6e3f966de9ca762f39ea3adfc9b80f5f2dc38bd44b4fc2d503b286d57d716cdb6e525721e48e5797198df6cbbd3d0fc463c31d1cc6fff80749ecfc4b8968af261ca646feadef6696590d10b24c375716ffa266cfb2f940c97a895a2c11d0f56f98b24c325ceb934b8cfc2b47031136ebf88a5cbf7689aac46aa6dbd4e6bf7db39deb7d518bc7a20de7e4ff99e7835f0d328a51d77f41751915fc4427e3e2c7397b0a391c252f36da96ce8312a4478696baa03b139725d221acc42f0bbbb4c124ca2d999067330c0bc5c124ca243040d663ec0bc42124ca2ab0e0d6601c0bc52124ce21a4e833900605e25092671834f833908605e2d0926f1284a83b909c0bc46124ca2d28406b33fc0bc56124ca2e32d0de61080799d24982e86c90e0598d733612eaba2aa05eb0085bd153154667716b8cd5408ee0626b8a0561bd6c21a97d024f91a231f61858a21cc906651ba1170dec8c4b94604cee4d262935558167cb4c11c03d8452c63483fd012ddc404bbae6aa92709c67212151fb49c36bbc01c7a331371df08c4c9bacf716a4e4235372ef14ef89b915ec30bcca76abcdf54704d24d52c79de1360dfc284bd3c4c147ac6ad57db1bdb7d7d3c13026da6fd0426845b990083aa98612a82e6733bb89890e006307ddc260da88b35de56032be8edd280bae8577219cc997748034ad434d1802e0b8ffc9dd280ba985971263cf27731817656a9d99aea79b86879c23aa910d7dd71bb87a79f3f846878a3650f19058ff63d7168976c914bc9ab38358c81f6585f0730ef9504d3c56dd13300f33e49305d5c709e0798f74b82e9e276e85580f98024982e1e275f03980f4a82497456a0c17c03603e24092651cf4983f916c07c58124ce23e9306f31d80f98824984493300de67b00f35149308926611acc0f00e66332420e4b15e655a45a8968b915d701ac8f33b16acbc17ca3d8a836369f79de255ad551e4fd34c3fba3951e2166f70c18dba810e4134c90eba42d9fe34dd7669ab4c0818343a55181104fede7b000578032ee49e9808927791ae03d01f053d201134ff734c02701e0a7a503269ef869804f01c0cf48074cd402d0002f07bb8567a503266a0668807b02e0e7a40326ee7769805700c0cf4b074cd420d0001701e017a403266a156880ef07c02f4a074cd434d0003f00805f8ac38c9d5cca65b4f2dd29c626f9038c53a18b05ddcb8f67925121da97d97efd7ead1b7d49aa6b2f0d1c2d91c11a00ee1526b8a076437ad1252e468ade0d285f8dc34bcaa6956d9c6c732873bea469bed6840c26af49034a5ce16940ff8305e87569405d4c09fb15007d431a501713167f0e40df940694a8b9a201fd0180be250d2851d74a03fa35007d5b1a50e2b68906f41700fa8e34a0445d2a0de84f00f45d6940899a271ad07f01e87bd2801275a534a07f02d0f75bd37f25f9d039ccc9fc10f5704afa40124c17f343cc03988b25c17431435e0dc0fc50124c1733e4ed05303f9204d3c50c797b02cc8f25c17451ef3907607e2209a68b19f2f600989f4a82e96286bc2a80f99924982e66c8db15607e2e09a68b19f27607985fb08f94ba207a8df796b6504e3496cb5aaf3bf5e61b74559b49c68aa9e3984bbcbff557d18076a7cd9b2a04fa2513686ab67b7d71903e0b6de9f825e170dccc50520be7f5af24c37531687c0f80fbb564b82ec63d2f04b8df30e1ea7aa8a989367477673167539a82ae1bcca6dfc69d7023da15ac58a596b9a0ba923fc742fb2d2427fa8e89b68bf7423fd2d33d0255e6c3beaf120d192d47494f90c6ef99c896b76c96fcb498ee6e8ea601c01fd8b3a04657af2a614929f62e77d1a9b004b0fdc8c49697c12c38cf7c8d9e0bd129b65425478c120d195358b8df82209b9f98b88314c3e99651a79607a01552bfa15d88f3674938a9ba241ace3300e72f92700e7612e728c0f9ab249c854ee25c0f70fe260927d56b8e86733fc0f9bb249c439cc4b933e0fc43124e6afe311ace6b5488f34f49380b9cc4f92de0fc4b12ce7c27713e0938ff96ab3b229e9068baa372b01afdc344bb5c026d410ae0188a9f8e65c12b06c5dbbf4c78aba52d9713bc0fefa97c231c35a4f59ff6ac102dd0afff27112af131a7415d03a0aace02a112fde768508f05ed523b8950891e9e34a8c700d4f612a112fde968506700d40e12a1123d3e69502b016a478950895b7d1ad4f5006a278950892e0b34a8eb02d4a52442257a30d1a09e0f9bffa52542257a2ed1a09e07503bc70135f05cd236505de0af48351d1fe76204fc6bf0f82fc384aa33d994275502d59d9daf2ab9d67a1ab8052a04d785096e051566579aa3fc0455e83f372d0e3509cde9e13bd0d5776562ccbdd30371b34f737a78061ef76e4cdccde55f4a368bb858afe12b90dc65992803c573b01c35241efcf492b91317255a32f73d4123d59d89b66f0adaf9898adf152945abdb32ec2700f6722ec1261e0c68b07f05d83d5c824d3cdad260af0af6abe599b03b1bd8faf2512ac8d5e8de8eb64685b87a327169735f5026ddff90fb892d570578bd98f002abbe6d6385cd4d33852d5d8c4bde14cefa2bb01fdd306ca1c4bbb08a878b16b2b03c485f6f262efd45fed2e19f892678241a128f6f10be402cf94bb3d66f0a00578ce35c6473c9497e7c5d4cc3720f3cba2bb1979169668ed32a105ff6625287d0e0f504782b33e1697fac00da78e56b95e81147f92c6c83e0f15d250e2d52b0adc6b9d0cf14ff7fa184d55f708a5955d666c7c52c60a3e1a15f8d8fb3c67cc4974cbdd94edd7c271ffd68384f62e19c0e93c1ea4c9ce957584cb5bdbbe87b37094ed36b48c49aef24d6bb602e5d5322566a99551ad62ac0ba1613ab56c7343e11959a3d6895d2e54d30f70d0d64196b36dd1c66d3b59920fba56cad74b610bb7e325d231d51f94133d2fd08b2bb0e137990fa2added958bc7d11f407ed79504d3c5aca03f01ccf524c174312be81700b38f24982e6605fd1e60ae2f09a68bdaf7cf00e6069260ba9815f47380d957124c17b3827e0230f324c174312be8a700734349305dac8bf00fc0ec2709a68b1ad17f01e646ecd3fb3463689be6bdd4dec88167721b71af05901b3341f650a19772684f8f091fcdae7e2de0db240e5be640e3dfe9b71a13bc0eed48f01e0278fd5bd7a6ee37556da012cfddc35872782c688406c4311f0e6ea3f3e157209303992083da5a99a406226e7b68e9577e052ff841d28012b73e34a0bf01d07c6940896a361ad01f01688134a044551b0de84f00b4501a50a2898206f467003a581a50e2768906f417003a441a50a2da8d06f44b003a541a50a2ea8d06f46b003a4c1a50a2c98206f41b003a5c1a5017f32afe0040376502ed6e80569b34fe0d104055ecfdad0f9d347417b1d0d5aa10dd6671b874052e33da31668101e713695b958b5684d8f5cd9958750190a8ba1c7eaa8a457c3f795a98cb6090cc2d243a1b528f9834674305aeb15b4ac49aef24d69b41ebb99544ac54bf231ad69d01ebd6ec943f1aabfee219aa1a4c1b3a0e9d06ae136bf654307b8e684d83466ce95117b350fe0e6b79511c060d6d58ab576105c2f189dda5eb068dc3619b5e2c23d3dc645399d077c7a6ee34c7742441fd18a473a444a84495070deaa700751413ea5a1150a77a3c8abd6e5718a799e0df22ef728d75be9a65ce4c756c572e9aa3c25cd8818e960c97381dd0e0ce02b86324c325ea9968700f02b86325c3256a456970f707b8e3d83b56dc5e851e23a38d0aa5daa852cad56c136d5ccb43492b6a3a538528b78923dd5fcbe4d44529dd1c0ea4dbc6914e20d097ce597208684b7ad22d61a35522436d52aa92a332890b152d9bdc7680757c1caeb48312aeb4da34b228ae832acd85f16938a86ec7ce6cd338209b5c147a2716b6e1b0ec4c90bbec103ded68cbce4cd81c4d6c4d75de488371baf2fd93892ae5ce9d4828af82157c7bbeb1d8a65226669eebc292c2f6f0804f8a236e482f2b3589c4fb75065bc8c1756de8dab0c84c8e03a63de40083b0063b19d1f60a3cd4a59260ba18d1f63ac09c2209a68b393d7603985325c17431a7c70280b98324982ee6f4d81860ee2809a68b393d0600cc9d24c17431a7c70600736749305dcce9b121c0dc45124c17737aac0530779504d3c59c1eeb01ccdde256feda608e30474d5f8b490d2f389885b51be88a76978835df49ac9f41e6e36912b152cdbe34ac2701d63d5ab3cadb94b88c69b43098035588b28ceda8580f4e5e41d081b697eb467c131a3df4802693a500727a1ce6b3421554bd9aa762d36cd2cc67078166b33c6e3b902d05af4ebe5b6b1efda09818f1117f8e85f65c982d2be2a8c9a67d91fdd4d0d352aab161aae849262dbf36b14d48d1d6070610e2344093e38d408e2be3f0f5b0adf8a9c59b8731b7fbb49a6dfb8053c20c4938873b89f33ec059250927d52b9986b31e66d6999270e63b89f352c0394b124e6a0e061acee700e79e9270163a897369983b674bc24955e4d1706e0438ab25e11ce224ceed01e71c4938873a897337c039978953fb5d95279d91469ba3a87bbe498b5488ac868d6cbef766bdf77691476186f7471f1f69c8ea59c8f60364b5713cb4e926f519ee6426c41be1ecbd97249cc39cc47926e0ac938493ea3a43c3391a70d64bc259e824ce3e80b34112cea14ee2fc1fe09c2709e7102771ee0638e74bc2494de943c3791d6c941648c2e966cae83f01e7424938a979bc68389f079c8b98387b792f7c4399be4477d437006bb3996f3fa757b5a6859f6e0410f76ecd68b5e4d992e8f14e3b895f078adf7da4a0a466daa6a12c003dd0be5250e63b895201cafda4a0a486b4d0501e0228ff270565a19328a703cafda5a01cea24ca7700e50152500e7112e56d80f2402928873b89726ec710e54152500e7312e5fa80f26026ca3e1128d3f5d14cf66e27da1e6949cc4f81588c43e24cafef77407738288667935f17d346cd02e93d947d4a8f4aaf3f424d4dfc4cf772a76589db5585100f6342cccb600a9867be464f0493549817295921328d9908600a0bf72bb00f389c89bbabd2d1198bbccbcb9dd724e5818c1e11c7fc69d76e6222f3e420411ad61e2cac2f01d623d9b2a867cf2aef7fd7657103807654dcd95fd30f6ba1e62da605b65c081ba5a3e3d8da071ba5594daa8c897b4edae6e84558688e89c32254aea2232ab1395f2e5d8c521f0e1af863d975d5cb4dc6e1608ec42d10d52bee1c16bcd930671e17c7fa8df16a13bdcb7583e31273e7ac84816d6feffd0a1543641acda5f526c07abc8cd3fbd4c4d64837959f18126e93888bd2ee2ccc47c24c7a426bea9b92675217b3d09c0ab3e88971a58e9c69fcd62b54b5993d5119e276eac88fe0f13f89bd2405b32a4a670cf068a9744f017827b3e1e9519799054927ce5d60e0d52cc99b4083770b0bdefe00ef1419a1fde34dec79a569bccc5c47f5f4e8cb427b2d2c36a7c63143a6b76d1fe264d6cd53c167f33449305dccba791ac03c5d124c17b36e9e0c30cf9004d3c5ac9ba700cc3325c17431ebe68900f32c49305d3cef9c0430cf9604d3c5ac9bc702cc7324c174519f791cc03c57124c17eb0e9c0e30cf9304d3c5ba031701ccf35b57dde637e517b921aee5b4d465a3e130790113e52a2af39835e2834e8b0b5a1af497174a034a7cd869403b03d08ba401753172ed6f983d2f96069478b8a401ed00127a8934a044a51c0d6847007aa934a044c51c0d6827007a9934a02e66d0fe1de6d0cba501251e366940ff00a05748034adcd8f3c2fd01e895d28012157534a07f01d0abd8a104b6a4f90daa44559a861abc2bdc734898a04288573321aeab5a6a168ec9657b140bf12458ebaf8943d334d0689bd01d71ea9204153139d0d0fce7ce8187fe5a26cc3554b2b7b196cc056aacd23580abbc473d558d8733aa8b8159e7770cc15ec704db53a5e6da8cae47e09eea6e6f984baf67179f4f451844b5b9f748cf076c37b4a6f218e384a8cae3c52c94df82f2f846f6431c2c35b5b01daa8d6b81a139196e010bcc4dad592730798b4e35ffd21695a9101b74b324982e4607ed00306f9104933853d260ee08306f95049378c2a1c1ac0598b7498249b406d160d601ccdb25c1245a8268301b00e61d926012ad4034987b03cc3b25c174318dcfbe00f32e4930893e1e34984701ccbb25c124fa77d0601e0b30ef61c25c5b358efc0d3595c9352b4b55721e197a04302d19c5f770c0bc378e12b51aaf6ec4d7aabbae001e04f8ee93a32d223ee8346dd13fa02dba3f8e3452812e5d9bd2ea1bd979a678df5691f85d7d0aecd47a564465084d72e702ee07e28ec09ceaf128f6ba5d61bc90837f8bbccbf5cd986f34ee7a6e9dc6548dd094761700da075bb3143d36475521f362895488f2a1b8ac95c1ea3fcad4a0d65d2e36f238d7fc96bed6d3b6520700cc87e3f0f9b02d568d2bfde633972cda1c3a11ac948f48034a3c39d1804e00a08f4a03ea62cdca6100f43169405ddc360d06a08f4b034ad4d6d3806e03409f900694b865a201dd0c803e290d28516b4f035a02409f9206946853a201dd16803e2d0d28517b4f03ba1d007d461a50a26d8906743c007d969ddb2ba85b3dc154adae57fa7039d9b8cc6a903478f358f0c6a810de7332727b951a05b35691cc30cdcde1aa43ee6d4f425b0ecedbcfc79106351db4c9a610e2a69e66049906585f8863fe0c54cfe5a057b219ee5cf467fa0280be280da88b3e4dcb814af92569405df4057d1c24f46569405df4077d0380be220da88b9e7777c123ff2a3ba030c8745cee5dd4d086321c0f05fbfc6bec2098ca25f6a212a54b9554253eeedef9670515627b9d896d3595be5b03465e123745b4623907c20cf98644a82e56203a14a0be29112a71734483ba08a0be25112a71834483ba1f407d5b2254a2a28e06f54680fa8e44a84475320deaad00f55d895089db791ad42b01ea7b12a1124d7334a8d702d4f72542253ae1d0a02e0b07cf0f5ad3a779a439d94f577efa54e29adfb91309e5a560475a1c47819d42efffa055d7cfee857076ff308efa83e95a358739e9ac78163cd61f49c239dc499caf02ce8f25e11ce424ce8b6025ff44124e373d939f049c9f4ac259e024cebf00e7679270527376d370f685b9f3734938073b89730bc0f985249cd488631ace5d00e79792700e7512e742c0f91513a7365acd53da7f2e3596738231ccd599d715a65bee61d4ad0418bf8ee354ae23e1e62780d5a889dec55aa5a131ba9e54ed7a40f94d6be667c0e6a67143b668119a17c3e3fdad24982e562eba1c607e2709a68bb55bd70798df4b82e962edd6c100f30749305dacddfa0f1c277f9404d3c5daadff02cc9f24c17431dfc26f00f36749305dacddfa07c0fc45124c176bb7fe0c307f9504d3c5daadbf02ccdfe28e23b2c14cf6ef246e920e6661ed039ba4df25621de424d65b405aff60625d2b026b74d4db98c44792d3ae1117a91759705f04b87f4a864bdc4ed1e0de0d70ff920c97b888d1e09e0570ff960c97b8dda2c1ad00b8ff48864b3cb2d2e0fe0470ff950c97a85ca1c1fd10e0fec784bb6a339bb0b0eb31452e756721bd01f6b56a1911191d8abd46e678df5a635ecd654f05cfb1d0ae0368db31d12eab304071a4f7ef748f45552254d13d239e16f6005c7b26b8ccbd435dccc97438c861074938873b89f331c0d95112ce414ee25c006b7a274938dd4cc0763fe05c4a12ce022771be0f38979684b3d0499c3d61eeec2c09e76027710e009ccb48c2492d8846c3590a38bb48c239d4499c5580b32b136727ef850e25acf12e9acd0375290b549d0a417563826aaea844d875bd9b743199dabaed4294cb3251ae17f108a7abce409d11d195712c0bf2daf06077770132d1f99606b903405ece05c8443b130df242d8def7700132d1de44833c17202fef0264e2c247837c0540eee90264a2b18406791f80dccb05c844b3090df2d3007905172013cf6634c85703e4de2e40263ab7d1207f03905774013231148806f91d80bc521c87e7e67d02c8a618dae1f94c40b9b2149454bb010de52a707a5b450a4aaa458b86723148e5aa525052ed053494078254ae260525d5924543b933a05c5d0a4aaa9d8086f23940b9861494540b160de55580724d2928a96e3e3494051d43946b4941497540a3a15c1b50aecd4499be4ff454e5fb41eba6f21343a26a576f60c13d021ef975d846eb5aefcd1aefefe6b2f09478ffea2fa2e1a4f943e7ab10e7ba4c9ceba830174ff8ef18a54b04fa78471b93b6fe696202bb46dc604eeaf44af5c35880278185763df6bc5aaf667a2f2b0cb800e2188375ba91db1255699a6bf0ae736f5e9d0cb2da278e252aa8cb34ab49d507d1a44d43b97aa710e5fa4c9441786f9575bd6f4b351c7e0109dd200e0d6820a1fa62fdf15ab3ae4ff5c8147b03a8307acfe0df22ef837a7ad099d06a4c914baae98f162ed11e76007d5d804c34fdd1207f0d5aa83c172013dd316890df06c81bba00997860a0417e0a20f79372b07573d7701ba0dc480a4a6a1a6e1acacd6111db580a4a6aa6491aca2e8072132928a9e9b769280f0394fda5a0a42686a7a1ac059403a4a0a4a6dda6a1fc00500e9482929a109e86f21e4039480a4a6ad51c1aca7ad0f2e74b4149ade744439907280bd8992382d34fa5d2bad0c989b34db9f7ca3d70d52a0457d89a9154b165895acc427929a01ccc44d93381523fae334dc06385d2a18fb11523a02580791d100e91a39f272a92690ff6d330230e8d2334d7f66063731ae64027b3946f0e8a8b614c9ccb7b2fb4fa6c8159a76b8c31ce4f4b54e3757b8ef7ba8ab9d0d0629b8be0d11ede9a9b9d64797431fb7325c8e2a64c942b3483b2c8fb59ff44d59d2f6a47c2b83fcc909bb526c660a4548c1d5818bf048c9bc7b1ed19d4e6b63dcfc2dcb8858c9482a9fe4a1a3bd10ad99785760ea82bb6948a965a1e838676113cf85bc5e101d23cdad40ce444e7045db68682f565c0bab544acd4fa2334ac4700d61112b152d3c7d0b0ee04588be2d844d98e99e1268ab8a5a76da21e861d403113a3d637e82f9d9bf0f19ce091d01970b50e73bad94e15793fcdf0fee87747a8a9092f501ad20ad6f2b435201dd9ba074ebfa96af6169fe6813c123651a39828974ba01c6c36f4bef7714c9b7bda69bd14dcb74733e1ad9bf6c293ba038d295fce2816e271a010192375934f75d8a26df26f85477f6c6bcea2b19568a1d987be0694e3f8b3688df9882f8f5a028310192dab3478b428a319b09a6fd3bae106d8604c3327ad9a5827589cb665625da999c73bd9e056c0844933b92d0b213125926012674b1acce500e678493089aa3a1acce501e6769260ba9831b717c09c2009a68b91eebd01e64449308989006930570298db4b82e9a203cd2a0073922498c4c47e34986b00ccc9926012135dd360ae05304b25c174d173781d80398509b397520afd86533544e3123af9850e9eceb5ea318038956d058a4a5111fceb767a8aed01e30e4c8cbd130f76a1f77f58073194c09874ee34901f03c81d65187b4b0dd806132aa0ed40c485675316d64a30f6ee24032ba6a52ae42a862fef40c2ba0d288677662b861b1b7f27996ecc527b2ba25f31cdccbb053ceabbb466000b3647cdbe4db3543e0e287765a25c25e2f14ef62b4eadd3490d86a6f9bcdf08f3e56ed2801217201ad0eb01e8eed28012971e1ad05300e83469408936201ad0a301e81ed28012b5ed34a0a703d032694089b6201ad05301e8746940895a771ad00b0068b934a02e96413d03805648034adcd8d3805e03402ba50125da8668402f04a0339840bbe839c5e88cfc737b705aa721a365ddde5785c8aad87af69a94ecda23bc8fe8d6cb0dc032c385e8d34e93bb3e0071661c961f9d633b39d6b2ed28899f0698b398303beb2f48682f472abf90987bb2d70570edd9ba8a36d7e3299e01afcbd9ade9548d713fd42cc39d3b91505e062b71357b5969ac3b1fe5cd83b589f971b2b33af42de1d19e1347fc44907627b43d161b499cdbe861471703177d82674368cadcb84d6636f34472e966e21191e6b7be02786dd448c44aad1c48c3fa3b486bad44acd432a134acd703d6bde2c8c5650f5e999234a30e676e9fbab1705e03dba73a4938873989f378c0592f0927d5a446c3590c381b24e12c7412e7ca80739e249c439dc4b91070ce978473889338a702ce0592700e7212e7952ac4b950124e6a0c250de797807391249cf94ee27c0c70eecdc4d92381b3c0fb7fbe090e98a72a9dd7b7ef0373e53eec1c47e985ad241f2d6948697117d780e7f0be6cc36e54dc45b461ad44918bd9d24eea3bc123be5f1c3366ba96f2614e3a1e9c0ef2f93f4938873b89f305c0b9bf249c839cc47901a8e50e908433df499c0f03ce0325e1a4864cd3707e0f380f9284b3d0499c6bc2dc79b0249c6eba140e079c8748c239c4499c3b02ce4325e11cea24ce3ac0791813675e04cee840d5628f91fe9a1aef83da8733f0232955c971c1c4188d292cdc0f02eec399b8d751c9fe231a69906b131d139bdeabba27cf4b81bbc311d201bb18b6752a48f091ade9dc98acc377d1e3e96215a23c8a89b26f04cae442f4c566b69d637ed673f13cd3e4a8254e67a5869aff8554b97d8805fb28807db48cccc7c90b5abe1ac99d73cf646565180f53c23152aab352cd7ab429e13438ca1e2b05a59b69519707a93c4e0a4aaa398f86f24e90cae3a5a0a4fa3cd150ce07a93c410a4aaabf130d6531a03c510a4aaaaf130de5a380f2242928a97e4e34941701ca93a5a0a47a2fd3506ed43144798a149454cf651acaae80f25476f0970e38acf1ded2ee3881fbc31873812eca4c7779a0f990ecae4288a73121ea11ccf7deacf7de2e3667f20683b15af991c53474abb3d08d0274a7b3d39e365f147c8af9380d630d6dcb0318cf68ddda2e5865089dc38879697ab0b0fe0c58cf9453719d98778e9619f151382a9e1547013c9d77a1d2cc8b73e2f2fb5ccc82f720c8e1d971e82875f267bd1aa7aa83837f8bbc8bb52be37ca59d15b59e92ac58a32d40eb805c9e13473e109bd922f911a7167ca03de4ab837ff2b99260ba984b760d80799e2498c4f8611acc5500e6f9926012b7453498ab02cc0b24c124a65fa1c1ec0d302f940493e8464383b922c0bc48124ca2659c06b327c0bc58124ce23e9306b317c0bc44124c170f935300e6a592601253ecd360ee08302f63abe09a52720423a5a651ebd08e84f14c7030bcbc7575457e537e463aa244d292fb5d0446892be248b69b494a00e27c490bbb7e0b1ef12ba501254a280de8db00f42a694089e7731ad05701e8d5d28012cfe834a0af01d06ba40125ea3669405f07a0d74a034ad46fd280be0940af930694785ea7017d0a805e2f0da88bd96a9e05a03748034a3c23d180be04406f940694a8efa4017d0580de149755bd56f9ae5b3159d5698a8f6e60fabd5946e44f6a456bb255bd2f0b6d0938bbde22152d35e68286762f508edc2aa38230ba7c915d17fe694fc2ba1da8ef6e938835df49acb783b4de2e112bf5304ac33a1db0dec1c4da4fd9228427ab916a5bafd3da0f798ef76d7e511e3d907aef0abf68540dfc344ad5997d83ef2a46437e116bde3d0fb65a77cab1390d73d2516c43d87add2509a68b8e62fd00e6dd9260bae828d61760de2309a68b8e627900f35e49305d74145b1760de2709a68b8e621b00ccfb25c174d1516c4d80f98024982e3a8aad05301f9404d34547b18d00e6439260bae828b631c07c388e436790426d4e8aeaae3e6d251f06201267d6512ce4b3408ffa481cfa7d5d2f2168d5f56a0903e1c4fe2813debaaaa54ae898026469f2b9234c098fc581389812aabd377463a5cacfa6984e2235ea14b0290bf121a0ea7b9c895867860c920b6055e322efa719de1f2db523d4d444e6061a485a82ca712a04f9041364cf84ac0e327369b204c632a3d264f17a98519f8c439b1f3cee1a59d592b79bda5ab9787eea04abfc53715b4bd30ff026aaf368e1dd5bc1ecf9741c07009bbf49b2b7c94027f3d2ee03309f9104d3c5cc4bc700cc6725c124ea4669308f0398cf498249d48dd2609e00309f970493b800d1609e08305f90049378dca4c13c1960be280926d1064f837926c07c49124ca20d9e06f32c80f9b2249844ad3d0de6d900f3154930895a7b1acc7300e6ab71c00cceec338c42aea994e7eec1fc0d60be2609a68bfbccd5c0e5f67549305d3c9bef0e92f98624982e9ecd9f04986fc6512c0a1720dd095f613c576d630aeed4aaa662975c0c55d43c03c06fc9700b4fb51511cf4734fdfc43a0487e9b8975bd944960a631c7157b9737781daff5bae4db39eb5324b72d143a6b00c8ef30212fafa22bc68f36d25ba25cad10bf233cfcef3201eae96bba91cc4a28bde7dbe0dd5b94b6036cefb153f5eb2fad3556f672d34850ed0de7c87a1ec4935810f70488efb365afcc1b7d8531a02583736f61d910b07dc0c4a653b9fb72b7c83cbae56a7623a7191a3e5acce6ca806f716bd6c64cb695bb189f7116a0fc9089b24fca1627887ad7d2589b91dd9cb8c9a1d9cd8f874dce47ec073e482ca0d7e7ea84375c2c8e32b40c76cf83a3ccc7ada9c14c7ee0873ae9c4bd13e8893e9104d34527ee9d01e6a79260ba18c63a12607e2609a68b61ac6300e6e79260bab84dda12607e2109a68b61ac2300e6979260ba18c63a0c607e2509a68b61ac9b01ccaf25c174d10d7b4580f98d24982e86b1ae0c30bf65c25c596596ea6fb89309a7ef8203e57792705243596938af009cdf4bc239d8499c1301e70f9270163a89734bc0f9a3249c5495070de7d180f3274938873889730ee0fc59124e374b49dca7429cbf48c249ad6644c3d903a4f3574938f39dc4f90148e76f3212f916abd48493545fe2e75868df85dc09bfc7ed03673b6e62420aaac4d2bc8bdeec1862fd432256ea3245c3fa3248eb9fec341441269a4a353ff18887ee5bae67a5f91066d4bf242d50c39d2c29712dacf77f4bc2494d3249c37902e0fc4712cec14ee21c0938ff9584b3d0499c6b01ceff24e1a49ae26838f7059caa8b209c439cc4b903e06c2709a79bc5a2ae828d527b49380b9cc4f935e0ec200967be93389f009c1d99385755e9c6a8e32193e8b3d49d85740330197762226dae82b6fbf195434009b21413e56a2ad94bbed2c8a0df485b4bd3f708a840966642ed9d027596f591a7d677a7a940ee85e082ce5240ba9828e52800b98c14902e06fc9f038f761729205d4c43510d20bb4a01e96272943701643729205d4cd9f304805c560a481793effd0720bb4b01e9624ac82f01e4725240ba9874af0cb63f3da480743115e4ea00727926c83c95be97c73cf335dad76392aa4c987feb1aa5e9214e005358b89f02dc3de3507494abe87400c9db761717a58f41e7de8b8932f04f0aa680069549e111e2998896f36322a8e35660a2dd2005ed74d5388742dbceb67006a0ee1dc784a04b93e80b7507f4dcda76dc6bae8309614526ca755498b822fcb7d4bb7c912af13ea6b3768df42e9c61d200557b8d07f9bbeacd957e9a3f1a605afab3ad00f04aec4d57508f6872e2f1d6c9a84678bfd1dfa0ebb74f32a981f4c34f0349cb1132568520578ee3a14f4f79e7a2b2a437983b5689c3b669db50251b39c805207851c570405d958973591595a02f9827dd93c389f048afd69a16cc64397431e7c25d2083ab3351e6473cd2d91c4931fde978efda0af60160727bd22d50700bd688c3889ca927bd8b7ef44701d435254225da4169500f07a86b49844adc05d0a0ee0b50d7960895688da241dd0ba0ae23112a71a1a241ad05a8eb4a844ad449d1a0d600d4f52442255aac68500f01a87d2442255aaf68500f06a8eb4b844a3c7fd1a01e00503790089568f8a341dd1fa0f66542eda792557e5ad39fedc196ba37a0d95a3f05d5605e1c2a197bd883ebbe7d7fa810e586adabddf29baa56640f009eee1f3c00fa3151aed2ac54360e15236a0068010f9f83556a2369405d4cfcf20500dd581a50e223cfcba4034037910694b843a5015d0c40fb4b034a3c47d1807e08400748034a3cedd3807e0440074a03ea6258e33b00749034a0c4d3110de8bb00345f1a5017c3c2df03a005d28012ad5034a0ef03d04226d0e554e81a8947cf189c216929064f5521bcc14c78e997d99de07d784fe57bef69bb2871e7f90fcb31a21db8eb0e918895baa1a761bd055475432562a58648d0b0ee025887b5a6da2e1926f10cbf98359ffe086abbe171aceedaa9bca952bc3179ebf30a96c3eabe2913a8d7b671262f37bef9558907bc8a878ce67fdf0bd6f4cdd8c8304664bce9c04c1eb27c16b27500d9e671c489eac7b6d8d4890d8c67535599f948858a21f683f6b8de038feb164c903dbd173ab04b5b22b595a72ec9adb644f9898189a5a06946b4654116b78c236f586002d6db9905090b7af2ba1c93fbd77f2ca42bc0aabc1513e9fa2948e71879acb7ee1e530b97c7e412368a05fa6400bd751cc1b6b8934c3f0294a8e6a045806e019bf41171443085321c8428d85c155ccce7340e7016c5b151b79d798abc8fd698254c2f66d38cde9d685fa7ed3a0f009547b134a044fb3a0de8210074a434a044cd3b0de874003a4a1a50e29244033a03808e960694b87da2019d0640c748034a5ce56940cb00e8586940891e2034a0f301e8386940891e2034a0fb01d06da401256ae069406703d06da501255a876840ab01688924a0831cddd8ff094a92f1d280ba78f4fc0a806e270da88bdba6b701e80469405ddcd8bf0e40274a03eae2d1f32300babd34a02e2a473e04a093a4017571dbf439009d2c0da88b1bfb4f0068a934a02e1e3dbf04a053a401755139f205009d2ac33dd177020b03b4894b13cda7646bc0ba431c964f9b9c6273f4bd282d6fdef1709edfb135738b27e3249ee469285f5621ca9de22ca2a61362ea96cb23a0fa8dfa91ef44f9a445be9f0b96f99d9950bbaa307d7091b9a421e1904383d697056d5b90c45de24cc51eed7b9cee7244944fda725407f2b92b13f54a192d47854cd51d6d06ed0830779304d3c5e5682980b9bb2498c4cd3c0da60298d324c1241e356930db03cc3d24c1242a426830ff86f3509924982e6611ff17604e9704937852a7c1fc0d60964b82e9628d853f00668524982e2a3d7e029895926012cdc33498bf00cc1971eb396d309393a9bb98a47a316c92aa2462a566b0a161fd1852aace9488759093584f04acb39858fba8648dd34ca3fd0c4a00cd5361d4677d337625173d47f682b976cfb823ea6cc980751ae05aa3d50fd47dc443292df74d3f403bbb35ed4aa9723acc490f927d0167b5249cc39dc4793fe09c2309e720277136c0723557124e6a163b1acecb01678d249c054ee27c0b70d64ac249d543d1707685b9732f4938073b897363c0592709e71027714e029cf592700e7512e7ee80b3818953e7d5d28e35356aba49d6e23b330407519dc4457fd738af6b3488b47418ff5321c47971c864ba596987338f96b49cb477b40b71ce9784739893382f069c0b24e11cec24ceed00e7424938a9ce0d349cc301e7224938873a89f330c0b9b7249c439cc4391b70ee2309e7202771de021ba57d25e12c7012677790cefd24e174b39ecc7b209dff63e2eceebd284fca5feb9f868257347434b7ee79806effd64c829e3c47125d676987c9ab409b79801494054ea25c03941b074a41492d5e4643f93748e54152500e7612e5c12095074b41490d33a0a1dc03501e2205e5502751be04280f9582728893286f029487494139dc4994633a86280f978272989328fb00ca23e270396c892f5cb26727d1e5702c0bf3499020e0c8380aeae92f9e6120076dcf4d5c428347f38d6fa7427847c5e16d6c57686035ad980a4bf46061bd0bb01e1dc72c1a781bcf6af2744e44499b459f84b5fd9838546ee52a9dfc1fe4a43fb4077e4b38561e1b47e9a8f4f446eec9e5de00f23829205d7cc0e703c8e3a580244660d2401e04204f900292e8a2c5f32e0290274a01498c56a7813c12409e2405243187020de46100f26429208916471ac86301e4295240baa8dc3806409e2a0524310b120de4c900f234292089b9b968204f0090a7b7a6e632f9a0e8626294e300e5194c94dab3a4dcf860e8afd6dd1c63ded2854869d868aefd0b5588ed4c26b6b555589639fc778cd24598931d5b2698bac275a671bf2aa6bbc59a2f03e7abb3e2d00425e3f53b334a559b468348723a4e5a95e1fb415acf66272e9d662e092baffb355add5b64e600b47364e437482dcaacd569c4330e2d27ec89a0e83d572ada7c27d17e0b96c8f3d8ebb98e38abf2fe4f85e71eb655e0613f9f894ddba16a951f98971aa057e27da09eb9c0d00cb38580ef82389298a567b9a1fab0d1b6e4f361f373a124982ee6775d00302f9204d3c5fcae0d00f36249305dccef3a0f605e2209a68b6a8c3a8079a924982ee677ad0798974982e9627ed75a8079b924982ee677dd0b605e2109a68b152e0e0598574a82e962858b2300e655ec73f734a3f9f15d00a779ed96a93af3b67b4ab6cd01dbd571601bd826b06d0dd8ae89035b419bc03613b05ddbba7643bf29bf161a718f48ab85360654b8d7c52181f96d4202c782045e1f07b6c16d02dbee80ed8638b015b6096cbb00b61b99d8d68d98efd2b3b32467f1a7211ec5423c01fc276e62225e4fd91d01a67a5c26ab1235d2fbf83cefa37a5929f27e9ae1fda9345dad88c37e4df3b6e80f727c736baedb18b8445db717b3507e0febf62d71448105e14aba99854bde6eea00e8a296e76f30bbde1a67cd891ab5c0ccab75decf7a1a28f61a1ca9b6f51e7f5d8ba232f1bb89aadaccb1faba115e4f6671313fd58984b91202406f6bdd18466c30a6458c5631a50f2c62b7b7660daae44831aac297b6e92a0019bd43124c1743ef0a01e69d9260ba18ec340460de2509a68b2178c301e6dd9260ba18f4b439c0bc47124c1743f1b60298f74a82e962f05311c0bc4f124c1743f24601ccfb25c17431086a2cc07c40124c1743f3a600cc07e3c82c546854cbbeff6f4c6a669af2633ca8e71e62d739a9376536754849dd1207ea30928cee424d3b83efa042880f3321aed2cce3dcb8aade30e6234d531a6f0d8ff423d28012171c1ad02d00e8a3d28012951b34a0eb01d0c7a40175b124f1da00f4716940894a0e1ad04d00e813d280ba58122e0f803e290d2851d941033a18803e250d28511547039a0f409f960694a8f4a001dd14803e230d28512547033a14803ecb3eab4f4fd8d17537f5a173a177d80c0b6dbaa7e898a44278cfc5e11216382ae873bbf64eaaf63a83be494dcba88bbbd04dc0c5e6f9785d6cb40ea94a6927af716a64a49a6e88d13c11b17662613d191efb17e270024b2f5cc5c530aa6361127831ceec4583c069b154b5d5ec4557823ef425592b7e8193aabcd91d43a02f4b03eaa22a6f26007d451a501755799300e8abd280bab889da1e80be260da88baabc5200faba34a02eaaf22603d037a401755195b72b007d531a501755793b00d0b7a401755195570140df9606d44555de3400fa8e8c4490a5aace40ad57334c7373b867fc7bdb93d04e87988e77d9190d8333be8fac5c55c6e5d34493cc135488efbdd60c39c4984eaae2ae332b68eb1278c8df8f531faa3549538d9e7e9e4a0d394c8ee424625dcc92d073401ffa0113eb062958671a93089a41a678df549108ecae6f831afd05a0d15fdc9aaeb6a9aa6717d34e7d0e0bd3879260ba9876ea0780f99124982e26defd04607e2c09a68b89773f05989f4882e962e2dd0f00e6a79260ba9878f72380f99924982e26de7d15607e2e09a68b89775f07985f4882e9624a969700e6979260bae831f20ac0fc2a8e337c3a3093d3ae10779cb4a0afce70b0fc5a2256ea469e86f56690d66f98585753a1eed3f7bb9ba68abd376b55e0d734ce6b60849a9a08557439095b5ff06afa368e4c77a15b638d6a307aa620deb344559ac61ad44c15e5e4e86e85f4ffc184f01d13f2aacd4c0861d7713a206eaabab390de0248bf9761632af61a99e37d6b8d7935d74c1bc463e9732cb41d01ed0f4cb47d53a6845ad385f94979ed82fc7753bc0e6ab0c1bf45debb5a653ddf6bb8c6cccad4a9617516ec0d00f68f71d4c44cd7f8ec66e0d87180f3274938873b89f369c0f9b3249c541d150de711b083fd4512ce7c27713e08387f9584d34d4fbdaf00e76f9270163a89b337cc9dbf4bc249cd7f47c3391070fe2109e71027714e019c7f4ac239d4499cb301e75f71641ad3baa9b94bd2aebb9d696c16e8a0fee6ebf46bcc47fc53bbd63ff9c52b46781fd5dfa25dc72699dfe883250d66190b66950a61fec3849917f160db1423f3ccd768f5c824a555237ea2b75285b1a25487dc292cdce7c183ff6f6bc62fa38e946a74a66949578269e03fb62a5a431ca7747241ade12ff15eebf483933d26e5c6d35977685c42f7145ea7dd76171859f7afa741ae6e4782bc2640565d637020d7f2381fdc756359aa6805d27ac119a91d135f730ee4c98fbb8ba9d6cf0094eda5a0a44681f2664e58843a484199ef24ca17402a3b4a41e9662d85fd412a3b494159e824caa98072292928873a89f20940b9b41494439c447919a0ec2c05e5702751f6ef18a25c460a4a6a765b1aca5501651726ca15bc17552a8c970bfc987497fdb4570dfcccf534079bdd5488b16b1c1219c6773675d271b1a6c7ef2091dd98287baa50393cd3e8d32b8c66bd2eae7337cd27e93690c665d90ff51c955ccd3878b0fd477a11ffa11ecbc23810307667626cbed226866aa33322312aae07ed0107accb4959bddd9c2b6f82f3770f2928a9e900795536617bbebc1494f94ea25c0650f69482d2cd02678702ca5e5250163a89b21a50ae2005e5502751be07287b4b4139c449947703ca15a5a01cee24ca1a3838ae240525b5cc190d655f40b93213656f15dabd2b8d1e4877759c0a0a4dc47412a7817c4685205761825c2342266dc9fd52fd88889140b4fcf28f8384ae1a87840e6aa312fa1448e86a7234972e161dbf16647275264aadc6ae55be6ba0ffa1e4ec73eea1ab07295c83892e70b0b639066273fedce8627a9f2d402fb42613676a8523bdc02c48f808db16a0f1290a636a286a5f16e29be0615f8b893808a9d681fe5a939e498c2fd5d78d16e5bb3e48efda6cf345d3d1168bcc4f54095dc4725e9d0847cb755a136330522ac60e2c8c5fc083be6e1c0f7af35bf8c63328f541a7cda1478384ae27152dd5339386f61b90da3e71d82e9b479b9c6e9a5a92e71f5646f9bb01ebfa12b1e63b89b51ab06e20112b554942c33a05b0f68d434932bc8d2a495e5321c8bc38b652b6e369b895222e4ab4add4bf104eb521fb31af37a7213f7632f049c242125880b7d2bb8eeea7444bf5b73348673f26d67e2af9b49feafa559ff6b62a396d250df92816f2fb6066dd8889dc6b5be95213b52ab6606b5a38e0fa20a71b33a105d913ed2929b7f3fed70fbd4e4c59ebfda9f6be6e8cf9b896699753546e0873ec264cc83ab78276e75e605251ea35bfda440657251efa2a07e1f50609edcf8637cdace27e223fbd38b99e98e24090bc014c78cb2b7b628af021a601a405115482f40d8c63bb6e53d8e1ea4c3cf7fcc702791e94851ad45a9218663c764f12cb4112f3e356cca56fde20e6e5a6193746c2ceb1208e2526dfd88e8263a3dbe7f001b0c41432e1add4cc0c99ecac4055bad1607e08923858124c6266231acc8f01e61049305dcc6df43dc01c2a09a68b11be7f00cc61926012b3bdd360fe0330874b82e9a2bf5c27d8a66f2a0926715f4983b934c0dc4c124c62882a0d666780b9b924982e06132c0330b790049358ec9606b32bc0dc9209732d155d6ec42f26aecb8ab7bd1ad7f36175df4a861b42a94a8ed620cea6b4588d32c0bab50cac53956f4ed34d1572a5f5f20e24aca3c07b6e04136b50272b8cdca8f76894b6c109e03390d4a2388261d20b4370b190f8bd2a4459cc44b94a33ab7ee3623843982b3f4d365f04d91c290d28715f4a03fa02001d250d2851074a037a1b001d2d0da88bcbd1ad00748c34a0445d28af0616001d2b0d2851534f037a2f001d270da88ba5711e01a0db48034ad4d8d3803e0c40b7950694789aa7017d0a809648034a3c29d1803e0a40c7b7a67e34f9d0494d02443b761e09fad1ed24c1241e3969308f06981324c17451217228c09c2809267111a2c13c1c606e2f0926718bc473dc06989324c17431f5cac10073b22498c4e3250de63e00b354124ca2f28306f37f00738a249844d51c0de602803955124ca2e298067311c0dc811d5eadbf5407fc95a972d3881fab9e1aa04a4ca2460b4a9da5428c3bc6e11b924e7ca51e4650dfc5e5b8ca3c083dd8298e0c75f6621053923c99a8f3673716ceab01e7ce92700e7312e7318073174938073b89b30870ee2a0967a1933857009cbb49c239d4499c7301e7ee927052adec349cdb03ce69927052934ed1705ea1429c7b48c249cd3847c3b918709649c2490d7aa5e17c04704e8fc369d60633ec3a665b201a3668c90206c2e9bd9c897459ef853e546a776e7d51a942df781a389a5f7c7f90c50a19e94f8bbd46e678df5a635ee9aba7312d97b40a98152093954cb47aa2d2b87403e312484726f0b9a7e4e80a12398389ad978a4ed017264d2951aea6e39b0210ab9810f33278ace799afd10ff724e5178ea86c34835253f14d61e17e00c26066b666cc46f2d6ddc5b0d79521f1feac38ca460c347f07ff161bcd7bb947a53aa18d9fecbdd29dd3123b4e613659b21a9986f86c386cee2963cd4f9e04f2bde58b1abc75262b1e6e184c04b3a5d47fa39ee169527a0a4c04d5525052cfef3494dd402ae74841e966c2aa3b402ae74a41493570f0ea6d8154d6484149356ed0508e0094b55250520d1b34948f00cabda4a0a41a3578fb4c4059270525d5558186b25fc71065bd14945437055e2a2040d9c04e9b3fdf7bb3de7b5b9f75ca945ff4a1c241a5dc4815429bd79af287cd5133d1f09252c00e723e3f39be566294ab999e04d6199d669d69c6576db827872b821c2e9055a3d5c548b5ad411617b686aebd58699f4c5dbc4137a4cb8bbab7a08c07995c14476126ada90c2b5c056fbb5ebae176c0b877bcc56ca3759263121f48aec246dcf2bcc8427b1aa0dd476e9d60225a5a2afd2e3083eecb44db5385a9f4e724bebccc78bebbfee01f02e688fd64a4e64b2d134a5cdb698517b707f783ff49c44acd244bc37a271c1ff79788759093586700d60398587b24b00ef2fe9f6f8cbdf3e29b43697bd06561193a308e73916f2d9faa66990d7d4d92957cb49151972de497c09274501cabfa40b3694a7684894522698e85eb00c283e3084e4defa44e4dac4fdb22750698874882e9a2026e198079a824982ee6ed580a601e2609a68b793b960698874b82e962de8e7600f30849305dccdbd101601e2909a68b793b74cdd100e6519260ba98b74381641e2d09a68bf6a02e00f31849305dcc5cb83cc03c967f88ac5151158075b783d4273484b4b0be0a98298f6b5db703bf29edbf418d901cc6423910146cc7c7913237930873e25c498be27d1c1eef13a40125ce9734a04f02d013a501259ecd69401f04a02749034a3c9ff302f701e8c9d2801217251ad04701e829d28012759b34a08f01d053a501753157c7dd00f434694089e7751ad07b01e8e9d28012f59c34a0f701d033a40125ea3a69401f00a067c695c234fc778cd236f3f0f4deb0c459d63fc52f72dab2be2dc03d8b0977b548b8934c6335462532ca9ce6f5c57a103140fd8f05f52d15423d9b09756d955c85552b446abccbb4be099db8ed31432e460c1d00716ce7b0f375d5a93035ca048f849fca675e2276a8c8fb6986f747bf1b3a83d19056b0908e00893d57a2175d0173fb4ff3a29b003e9fe749c44af518a161bd0374a7e74bc44a4df543c35a0e582f684ded7e324ca22265316b3efd1596a80bd9815c3a8f576aca9e09092b936eaac2748a0691165cb81e2c4a173121f6538dad9f7ea0cc646fb5dfd6eb74b14acd81580fceb6e14f615427756b75110bf9b9701cb8989d23d1975bcc3de76fb0dc93d42120a99730b1e911d4268e9fa9e549c6a920195a8922e749a419980b00e4a5713cf2c1c9694ea35a2fb6953e153ba6ea252a00691562968755ff32b68f49e592f971520263892131cbfc5c91b288d160d2bcec3706f9bd9c9d4c2050a3e8a0842a23b1b18428d092a4de01f0ae8823d564f3dbfaa61e76a2099af6b04f81b8a42be3985f11f1ffcd2dd542d0015c157776cff4c3bd89f67f5ab0f7d6b0745dcd445bd02c5a5f9ae7989ffd81e8496386f22bcae99267c195a396648ad03b5ffdeeacc4598d2adf8fb3b406b3604ab9468632267917419da9693b894b418370addc6983e829489b360e8469e3bad6d473a125813a0377ee44427935a0bc9e6f3e0ce7ce6283ce3714ce36908bcc5c3b3bd1a48e79aef49a222677a3d9b7f4de3e807a839c3ab2439c0ca1e80edbaf1b25c1743184a227c0bc49124c1783c83b02cc9b25c1743188bc0bc0bc45124c1783c8db03cc5b25c1743188bc03c0bc4d124c1783c83f82fde6ed9260ba1844fe09c0bc43124c1783c8df0698774a82e96210f9fb00f3aeb8754a3698a8fb2f603ef034034b0f588aee9688959a8c8386f517d080de2311eb2027b15e0358efe5170608ec4d1355b5c1a635f2eee936753ac500da7d924a430f7732a8fc4ef087ba5f12ce614ee2bc14703e2009e76027714e009c0f4ac259e824cecd00e74392700e7512e75180f3614938a9860c1ace6ac0f988249cd404d7bc951d364a8f4ac249cd6e4fc3b91c48e76392705213bfd170be0fd2f9781c356c34aab657c3e60dc0f8441ceeb8f929e7f318e0d18e924570fe7e524659f2c63ea3549ffbe758689f01b44fc5315bdae6ca22efa335c6ffa8cc7b975c4292167eb337f8ca3d2d0927b5b8290de79d80f3194938a925a96838ebe0617f56124e6ab6661ace8b01e7739270163889f359c0f9bc249cd4caef349ced60ee7c4112cec14ee2cc039c2f4ac2497552a0e19c00385f928473a8933877059c2f4b34fc52951f34c3ef62c0fa8a44ac548d270debedb0d2bf1a4762c220b67eee126d92dd4fc94597af0b414e5f9306d445b7af553a86405f9706d44577d9e700e81b92b4f2c39dcc377e0b1839de948473989338cf029c6f49c239d8499c6300e7db9270163a89737dc0f98e249c439dc4b93fe07c57124e6a54110de70cc0f99e249c839cc479830a71be2f0967819338ff029c1f48c249ad434bc3f90ae05cccceca586e327bf869af1bd45493f66a16338f024d3db70f60fb909d27bc293d52d875d422112591969f71238820fa88ed97546fb2cdf89941839a0bbacb41fdc412454e734953c54d05c9fc989d2fb4a9ba9ec967721a485aaa948b00e42752401295c334901702c84fa58024ea3069208f04909f4901e962958f8300e4e7524012e3286920cf01905f480149d4a6d3409e0d20bf940292b88ba4813c0f407e25052431510f0de4b900f26b292089e9a368202f0090df4801494c6a4603793e80fc9609b28b01a92fd15fad95153ae5a38b25f8e602b2efd8da9d7aaf81b9de45a989cd69d8fab2b0ad06d8be6762cb53e987a7cc335fa38354b0ac49a94ace474c9c21a7b070bf01ce2e3fc4913437bd03a28babf60560bbf9310eff36bb761c2b6d253b0ed2b0f660617d0126849f9858f3733c214cf1fa5591988fc77bd75698498278669fccca05ff73c7f016fccc2e7b16d6922952baeca94efedc166ac86c0272fc4b6b66926b1c1ce89e0d680f707afd55124ca2b69d06730ec0fc4d124c178307c600ccdf25c1246add6930b705987f488249dc48d1606e0730ff940493a87da7c1dc1e60fe250926f1e44483590a30ff960493a885a7c1dc0160fe23092651ef4983b933c0fc57124ca2ae8906733780f95f1cbaa6200e685693ba26176d965de044ae1d14e99e9836b51d36e767f27031e46f1848663b26ce5e2aacefaa4d1c0d50de39a6ac5c34991c0cfacff64c88cdd55f4b9649172bb59c0df2d8818932d079e2e3fdff759efa16fc07d2dc91790b821c7383bcff8356639a0a3ab423c17b5785f03a31e16d1c311544cbaf5d66479a4e979bafad35124eaed97a520712f67c30e62dc5c4aeddb8433dbdefbc1d0414b86f825e13a4776926c6f43324a642d5d305f13c45437b25486867b68436b56f0d464add1fd0e6d791b03f58868931a8f71e9ca4fc3d6bb68e12c4b995e628711a9cb8ba3091079a80f44e5c439dac91b914c86f5749305dac91b912c0ec2609a68b27afcf60dbbfac24982ed6c86c0f92d95d124c1793febc0192b99c24982ed6c8fc1460f69004d345ede91300737949305d4c96f622c0ec290926d14d8c06735558807a4982497413a3c15c0360aec0b639d578a36ff0dad37fa72a3f82a4017eba8059a67b349cb43a1cc35488b377eb9a4bfca6b47199eaf2308c85721c68955664a20c124c669235c9c53a45abc0a3be9234a0c4b99306743500bab234a0c4733a0de8f200741569405d4c46b502005d551a50a28e9306b437005d4d1a50a29e9306744500baba34a0c4733b0d685700ba8634a0c4b33b0d687700baa634a0449d270de87200742d6940897a4f1ad01e00746d26d020218676740c0b90b61d67c75b5508729d381c70071ae9ac545ab334d5e331599518db7b99f7117d72af3057d5992b683869aee11b83d673ddd6548660e43c5519b29885f2675086ac1787ced3863279bea49a36688ff9719018b58f24982ee6503c1560ae2f09a68b1120a701cc0d24c1743197e2f900b32f136690523aac5054a9162452b42463c5b42dc499f33f16d2eeb00ce5c959d189da78da8afe17a0dc308ee8a47cd5f6a29336851d66bfb89dbaf586bdd8eb7685310f07ff167997eb54e8f3bd6b6b8c732cf551a75932cf07f9dc288e43e5b0367aa8fc558520378e63ce4ccf5dc14507af3300e52671a0d473a61f45e4a7ad6c3b52791bcc9cfd9928d748a06cf066455d02229379936814a6cd9bcb80326e8054b0c40d130d6c3b003b502a58e2ac4a03db1ea6824152c1124ff334b07fc372952f152c51e744037b35802d900ad6c54dffe100b6502a58a29b030deccb30c70e960a96e8904303fb02801d22152cd1e24403db15c00e950a96e8e44803db11c00e8bc3fdc1a6436d9cfe929a368b66663e11f4fcc3a50175310de6e900745369405d4c1f7c1800dd4c1a501753081f0140379706d4c594981700d02da4017531fbedd900744b69405dcc807b2e00dd4a12503d83ba5820a0b06308746b69405d2c5f3108808e9006d4c555be33002d9206d4c57de8d200b4581a50174f4add01e84869405d3ccb7703a0a3a4017571dbb412001d2d0da88b1bfb1e00748c34a02e1610581d808e9506d4c5b3fc6a00741c13e8ea1140a3738896aae45ca1c4dd28add4df107088dc268ee0309b9c62737e75061753629d00e7f96d99387baa30157badf2930ce9e443b571f9f0d12c49e3c09254c244b8acf7a2cc1b7d8531bdb99f0b5c773100375e8e4bae8bc9d85e0494dbb16570a659992bcc1a5de72d3081b338315318ad02f252006e426b2e278d2bc7baa87c3b0356e78992700e7712e7cb80737b4938dd540d5f08becb9324e1cc7712e7638073b2249c054ee2fc1370964ac259e824ceb560ee9c220927356d250de7668073aa249c439cc4b913e0dc41124e6a326a1ace7980734726ce0d54729201dd815aefa732ef75a5b964aeb217f1690b0ab8bd41afb91313f5da29a8679a4b67a9bdcd29be4195352bcb2e1a87370549de998957bf98959052f7302da3424cbb3031e5a9304758a0bf9ca6c6289d0b6c92e98c9638ad02a94879bc2798dfd6992ff36b75d27388d11efa5b41c7b96b6b66c44956d55137fa3465dd77f088ef2609a68b95137e0098bb4b82e962edb8cf00e63449305dac1df70dc0dc43124c176bc7bd0b30cb24c174b176dcfb0073ba24982ed68ebb1960964b82e9626aa1db01668524982ed68ebb1a60564a82e9a2a3ccf5007346dcee5c369898c8922aa307d3d675d0265549c49aef24d6d7c096345322566ae4060debd180751613eb3a2a59eb3410b44e138dba7991f721ad749eddc8112c063d13cd25ec5ba3675aba534ae3a31b355e6cd46e5ad55b6efaef3b76f53788e62660947baf4bd42cf3a93d3c89dbc5fb93d95dd9cdfb13f5fb76ed96f37a344a2df4baa77fabdbab306dcff1ded53dab5703c77b97eca98564d38490e4b5ebeafd3d3fa10eac597223756ff3da75d65b1eefe7e9de3da9f2fa5de3fd9dd7ae4bd26f757ffd9bedbf33dffb6479e2daaac438f2da75d3ebfd12afacd47775cfabbddf2df0def1afaab65ca3bfa95ccdf4c6a99f5b3d4efc7eed9255db8c28fa7da936ad37f6580cfb52667c1af57747b750ef7dc75cef1b1abfdbb44fa4ff7ee592fe377e7f85a4f7b5c0ce37efe87bd4f8ea9593ae9e9478bfc43c3fb31252d0dc771499116b5ad1577731e30d935d8e378fc64cef9d5e8dde49feaceebd9f16d3bfb62645013dc2fb746de289f1fbae99f95259d6c47bc1fd4b566fe7b5ebdee8eea55ed115ee5dea7bdd92ee5cd4bb21b3d4777b3571d752af5d298d7bd674fbc9772cf55a5fc22a4c5b517dd58ecf7352eed4148f7505f444cf48be9ca45e995c8f75115cddcd3c7f8123b52f23e1bb2b27bd9bdc66aa6122fc54ef263e154a57787d0fb8dede534da0ca309c9ec698e6793f571ad38aff7d755e7fe799779751c9b56b8bbdab4a1363cdb4a6adff5d758dbea5d85c93d76ef9c877fd9683f6ea1377bff175baecebdee6eef78e7cbfd4b8bbfb2567f0a9f467c4c6d7fb86a6a0cd5e91d7f8ab91ef991b7e7fcfc86bc7c0dd284dcc18ab465e39d290f5cbe014793fcdf0fee87747a8a9090e997e32b48cfb942bcc5a3477c94c5292986dc69967a1ca8c6285b4ae9b62d6e76095adf38855a794f1f1e7ace0bde28421b96ec95ea22e2165c11523bdb61726a46c39f8fd04339a7a73ff267b77aecc7cdabfdbc13593959f1eabbc8999b777d277354f3a9deb912f922832f36320c37a93d5cef09fbc646dad34abbb3f2f951919f55b1fb09d7759bb21de5f7e4ab0fe4b9281f9fbb039de1fff55f0fbe6dbd4bbaaa65b9badb74eeda2f7d7d539db0f3637227f0bab3f3f23e1e3516f7edbdc489b1f9f7d6fd9ad89bb326082be176d79fcd5fabe276ebb11d3958c18e39239c1bbd89f6af47f9dfe1f1e5b63a02b7c0b00 + serializedProgramCompressedBytes: 1f8b080000000000000aecbd07941545f33edc73c312054410148405c969113080a86441499211949c94244b3422a88011c36b445c141504140594a492c18459415051413163c6fc4dcf74dd5b53db3577667b90df77ce5f0f0c9d9e7abababa3a4c4fdf588eb0ffb3ead97ff512dd446bd140f41443c53831d6fe576bfb39c6fedf0d417c5731c17e8eb0ff1e64a7d513d9194acaff6a5ae5edbf3bd8a15c31d12e39490cb19fa39cf4ee6298fdef0e76d9617648c60eb7ff0cb3735909bb504fd14674119d4539ab6c06885e4ea15c1567c97a5985edbf5b896976ea3087941492e32495b3ffea6ea7e43a69636cd290af9fb8c8a9d6183b6d885d6682186d630e76100bf7f95138ff10eee35af59ca19ed3ed3f45d4bfe3eadf85d5bf717e192f6bd7df27ef4c941730afb3ff24ed3f8755f87a375cfc6715bec10d5b6508465184314b3d67abe71cf5bcd1fe9365177f28007fbfb49bd4f316f5bc59e5b5797d3c5ac595729fb17395cc3c14b6f5628d74f3c7fe52f96f55cfdbd5f336549f3bd4736e5ace3ed0eb9dea79b7c21fa4e42d4061f91cace21f4661f91ca2e21f416189f7bfb4acefb7a8b8bb50dd8a086f3dcf27f53cdfad670ccade43f20f55f917a2b07c0e53f18faafcf7a278f91caed21f43615d1b60dddea79ef76b740bf6a3d3ed0425eb71157e403d47aaf845282c9ff3d4f34195be98a4cfc9903e03e5d3a5cfcf90fe5086f4bc0ce90b503e5dfac319d21fc990be90a93fe875948a7f4285950dc4daa3f61ae5d5b59326cb2c21e9a0eb13f4e9b10e08f34415775e3acef937e600f6bd14856dfb4e3647722846076fbb3a693a2e1d11970a2aae13c2e944b874265c3a2b2e3b08178cd1d16b434e9a8e4b17c4a5a28aeb8a70ba122e17102e17b85cb27a102e18a38bf0d8ab93a6e3d20d713949c5754738dd09971e844b0fc5651fe18231ba219b85341d979e884b2515d70be1f4225c7a132ebd5d2e85a6123bcd43e565fe65481eea93a974caab0fe25559c5f545bcfa125e17125e17babc0a976278f525bcfa088f2f48a5535efd10af6c15d71ff1ea4f785d44785da4782d6278f527bcfa098f0f4aa52f21722e16f97dc9429486cb805fba44c53f49b00620ac4b84d72f0d2058900e7ea906930e63404d261dc6805a4c3a8c01b59974a53f51874957f626ea32e93006d463d2610ca8cfa4c318d080a4cbf1dc1e7bc7830f7bdc0db78639c72237dcfd55155eec867bb757e127dc70ae50e156aefd141ba8c2d728794fa9f619a1c2cb5158e69ba9e29f266d3d12b5b5e21c1b85e2ae51cfd6283fe441f831b0a56754fed22a7ea08a5f81c292bfea0f62a937bf582652f3954ff6aab832aacc1b2a7cac7a96403cfde6b560dfe00b9e4acb68714680f2cbddbcc5be41ba94cf6201e51755cfa733e4f7c328a69ecf18601477f5784c799fbc33515e90b3c2adbf934f86a7abb6bc349dc7f9b7e5e2e339642a3ea9e25792f82c26be10135fd81b9ff24ba31197d1de32b131aacc2a14b679962c4330c6aa7ccf22ce180fd2979072e354fc73a84eb8dc38a6dc7852ae1029379e29771929579894bbcc5b0ee2c1473b6199bedaade331d0cf56bae1922d02d8925f9ad25f2c5778fb7eae7ac2fa630d0acbf658a8e4bfa37054fd621309cec40c38877d38ae11de75f72aa2db49c45626b998a55ab8e54ac13c27a1d227abfc6bbd784e3cc65be7c53b16fc3fac6f6f15def5e15ac20bd29790f439482e4e8736b85f78d7a36aad18fb1f236f0649a7f2609c7e8ea4aff3e68b3da0d2d793f0f33e6d730ca9f31455e60514b675571ac6014e77eb33e80ed2a3d21de071ba83744e77cf7bf315487750d77922edb713c4262f57382fa2bc102f9fb385d7f667bb1865c0e693046faaf0ce55a712dc0749fa83ea391f71045d3f948e8bcd4771f2799bc2d980c292573de1f1b7295e5712b957125e600f1b5118fb1b90b789c88335a246ff809df2b1f384c7c796deafd25f08a74bb121bfaec44614b7593d37a13818b7a6a1386c036aeed36ca04a037bb802b5c134621b57109b85fdaf80baf7d403c62d5c8fad9a7ac0387a95a61e57fbd4e31a548fab507e48c3f5d8a69e8508fe74528fe99a7a6c0f580f18d7afd5d463864f3d66a27a5c8bf2431aae07ac2f0a13fceb483dae33a807cc33aed7d4e3069f7acc42f5b81ee587345c8fd5c2eb8b56a0b0dd07cb1d26f960cf6f2d0ae37e0838ebbc38e53730ed0e7be9cb98f49b883ed59e79ec66c2e366c2e31695bed9cb3fdf18b511f18072387d8bb77cca57ad4061bb7e2764937c7309bfb92a7d06c15947700e3276753bd1134dbf83e849edf5c7ee243c609f1ff47417a3274887b17523e201e5703ae8898e81770bef187837c1bf47a4fdb6ae3ca4c31eef4b4cbe7b899c7b899cfb483d611efab248f715d8df7f45a4fad68930572fe8dcfc3585bd80d8cd02f5cc13de39759e5bb70a2d5cf915c62b9c9d2afd6182f370069cbb7c38be2ebc7373d813813ef288f0ce4f1e51987bdd7215613d0773f3855e5b03bcd84282b7ce8b775243951fe6976b8577bef706e105e94b48fa1c2417a7431bac13def925f058cfc89b41d2a93c985fee24e96f7af3c59e17def92584c3cccd1f15deb9f9a3aeee2ac15a93d3dd5b197407e951e90ef038dd413aa7bbb7bdf90aa43b58cf823dbf27d2e3a7aa8f781fc5a9be25768954bf3f1bfccbbb4aee63e9fccebf651accaf1f579cb6a2b05dbe32ec7fe938ee564f9897425f5924bc7e1cf6adf768e4ef457500bff6218a8379e9621407729e48d7f5cc3c95f6814a5b82642d46f9210db7d747ea9945f097927ac0be63a67ac03c08d703e6a5cb44fe7a3ce9538fa790ac65283fa4e17a7cac9e8508fe72528fe506f5807929de970439b0cfa8abc70a24eb69941fd2703df6a9676182bf92d403f6f30a520f9897aed2d4e3599f7a3c8764ad42f9210dd7234170570beff84ee7296b84777ca7e5211de6119f78d3c5a71a3d7c96ae4b55584f16741e007ce03dc00b8acf5214b6f39cdcc6070b38802f7f5178c7e71715c6952ee793577a65c73608eff8bc1fc563bc755ebc6ae083608cd92abc3eff008ac7b85b54be6d240cbebb848adfa8e2f35058cabdcb9b4f7ca19e9fabfcdb49fa412287a67fa9e261ed1664dc056e5bbddcaa437b7e45dae6ebb4cdd450ef316adc45b0c1663711ec4d0a7ba0caf70dc1fe368d9d7306830de3ee6682bd5961c3ded87704fbfb34769d9f0936d7ee87bcb2d9f67f2943fb6f23edbfcde55ae368b43ff457d2564e58b74ef95ac9dc2e3cfe29653f3b44daafec4079e5f325e1edbf2fb9b875404692c87845787df82b04f755920ebe0faf715e56cfd788ce5f7365d754fb67b560ee026dff3a69fb1f503ce6f896f0f679083faf6c0bd6c1d0f63b098f9d4a07f09ef047af3e53edb024033f283787a42f21e9f09efc6b6f3ae83455fe0dd2fe507e3e49a7f8b0a7ba9de0433bbc29bcf3ea3789de687df2483ac883f917b4c3dbc416de26b6f28ef0aceb53f80b483ae0ffe4cd177b5778e6e5a1fbe8bb4c3aeda3b45eef917abd47eaf5beb75e293dbfefc5cdd7be3b50fbda765a13fa37e707609e11850ff95e71d825f43e64b748f7dfdd28af7c7e20bc3ee40317b7019c594c12197b89fef612dc0f49fa87ea89e7897bd4f323e1edbb1fb9b2ebfee5caad0767b7a08fee137a1fb28f70fc4c787d0884950f6900eb3bf0211f131e1f2b1dc05e38ec6f64f221941f949b43d2979074f021df7bd341a7a9f29f90f687f2f3493ac5071fb28be0433b7c2abc3ee453a2375a9f3c924e7d08b4c37e620b30ae83ad1c105e1f02f80b483af5212a5f0c7c44417d0897cef910a8d717a45e5f907a1df4d62ba5e7835edc7cedbb1bb5af6da775e14cd17fe143be551ca0eed4877c25d2fdf72b94573e61ec5b85c2366ee316c2eb4340c6b7447fdf12dcef48ba9a6bc6be411cd4dc36067d260f856dd90d5bb8721bc23e2ef4d11f84de87fc4038fe2cbc3e04c2ca8734863339e0430e111e875c1e8d36a87cbf78f5c9fa10ca0fcacd21e94b483af8906fbde9a0d354f91f49fb43f9f9249de2830ff992e0433bfc24bc3ee427a2375a9f3c924e7d08b4c32fc4167e21b6f2abf0fa10c05f40d2a90f019cdf84990ff98d49e77c08d4eb30a9d76152afdfbdf54ae9f9772f6ebef6fd0ab5af5ce7c17b2d131f42f71efe10debd873fdc3c8d37f860fd2abcfee44fe1f5197f2a8cc32eef260dbdb29d6f2864feb55e3cf8b62285b7ce8bd704ce7942fffa9bd8e301148f71ff11defe0fe1207bee9caf85baff2bf29ff950722514f6bf4e5e88974fcbabb7b8c268564d787d2de0c5bd76168f13dc0449577ce231c4b110c1cc2265b208269c1d843e0976f3771a339e4471320ce7075f46619bcb69d9defcf0ee9bcddf15f1c7e5683f85fe087582738acb5018d529d5fe1bbdf8f07d58bc08b1cfdf85c7cfc58b7a6d215e149593cf625efb75c2767d4e1fedcd077e3e5e5ce57f0585e5136c6e25e1770ce1f9aa37dec957c45b06eae0d415fb50a8db1c14c6764ecb270dcb17362b9f6abb8296ff375cf994bc1d19f26fce206f5901cbff63569ef685d0e59386e563def2d00753631ce8478d714dd45ad6688c53be395e52a4fbc10615574ae1ac4061bb6f9e5991e42b293c3ec009233ef163899d6d42f1f25942a5bf46704b10fc57dd7a9fd9dc8b93924370a0bcd848707692f41751ddc39e5587730ea0c7d2c23b4e95563adbe5726f0efb836a6d143fceab3bc073e231de3a2f5ef3f65e1ce75d915f1d405e59d2a6655dbcb3f248be72a44dcb115d1f4f6cec43142f9f65489b02cf79281d8505ecafbc2ebc7a00bcf244afe515ef7bbdf953fce0bbc3d55e9c14ee8984ff1e540ef3a3f9d5d98fb33678ebeda917b641c0c9d43e7e36a6de97c72b200c905751e49f53a9bdbdf849c233a78a5744f1f25989e8b4928b710ef8ef24c1cb16deb94236c1ad42d2aba86755c4f17d1577723ace498738f9acac7036a0b0e4a5ced3a7e630c0ab1a915b8df0aa2ebc7398eaaafc2e226f139197477040ffc9b48e202d65771585c7479f5d0f9595f9de35b0833f549b04f916e84f9257f99d780da4f71aea09dfbae5a1b05dff96d037d55a235e3b7f59f10fb24734cf4ca5ff8bca6ad26516e7afbf9974d5de30a7b0607e5bc787cb2319b8d4f1e762c5837181f9bd40df17a5fc19face473c85da80c4c5e13bc23c14b675df5a7de769c1baa476feb256169289e7f8905e48affb543a9c75f89b4957f2ac24930e737b689b62f9db261fd7473270ade3cf95b64d3eaec50372957324bb5eb7ab7e619570c3b7823dfaf5ad768a2b7ca39987c2b2edb6b858ad77f1585649374ffbec10f2ea1179f55c796d9ab8586ddafb60a973adf1faa86d3aa8b806e938e7df1253c910e49bac387c37ba95e48773ac333572d4b7fcf11c2427c72dd7b630913303a5633990bf1e2fc7f9b79de75cc05467eae30d89de1a2a2c754f453bd873013d3752f9df4061c093f16f12fc5354bc3a7b679522e98d55fadb24be898a57ef65ac63517e4897cf5385674fc6094b1cddbd27e7134e79282c75230887d3503ba9b25669942631de25d8a7e7d7793b380f0476d238cdaddd3e91f653380db0a4cce3845757efb965db27085fa62dcf9d8af2c97435cf48f968f46d06dc5de3dcf753403d02aff8192a7d170a1750afa083943f57f39b40bea129e1d954f1ecaaf438d4070b7c4333c4b9ad8a3b93e09ee9e27610de7c16ccd3cf51f977a3b07c9eade23f40616c13cd44babfdb7c3bc0bc05ead75c78fa4a5cad01ad729af232bebc8bd306ec07daf32c529fb3dcfa9c3f95c86ba169bf13501a6e3f28d35278fab91396cf562a7e0fc9df9ad4a9b57ab6f1e677ca43bce451c1fb8cb755f9f712be27927458ab9cabe2dba9f88f483cdc99f4318987bb5ef691f80edef8783b8403e5209f7c9ec7f0ad48d23ff4a6c7d13d2d4e7bcb7683737fe077ce17a9be7c3edc95318fa401969479124a0bd8e72c75cf87a5ee2189c35d2e9fa0b07c764ecbb3d41ac7ca461c3aabb82a69ce0fa8ef16ac93ddf0431d03f0a9e6e6bd5ebd2bb1aabbe1d9b532974ddd9ba0fc64bc8baacba7286cebb9e34a945fa67fe62d27d0b76cbef2d41aceaa9121bf1f86fa66d9aa6980314561d432c0503ec3aa6d80a1be5f8cc31d3cfb515862d731c056df445a750d30c0e7d42b3886551f6105b0112b4785612e08771c6d4561db26bb40df50f34bab813f7e0a177c453782db4de1c2bbb30ec17061fccc98cfafce3007853a7727dcbabbdcbaaa39a1750aaabbf21d5da7122ca8670f82a5ee654ae507ac0e69fe5623e11d3ffdb8c37c14fc6c4fe1dd57eaa9e4a9ef9f2e803db1a62a1dee565aebc58bf72278ebbc781740fb83fed1bc52dbfe4d885ee08ea8ad282c71e15b85165e3e16cc4d0f049001edd887c8e8e3cae8063a68195e46d0fafab6d9e9a4cde01ea955282c79ce75dbac1bec79409bc13d566bbd784e3cc65b47f0bee1b959a791f6e94774d7cfc5e80efbff2dbcb22d988b7f4ef0a02dfa13bcfe0a0fce0ab4cc80d794a4c37cd9d6cf942067a3d59a559443ed56457181bbaf56a0b07cc2bd5c6b50d8e6dca3962bb7c7408203f75ead4561dcce80b795e0c13efa1d1a8eba3a81bc81441ef019a4e29f20f20769ea3e98600c42f1f23984d8e6109773ef7a0407ca0d15defd60b5f6890f43b261be333c1de7a4439c7cc21d551b50d896db13f63aaa7ae57aee55b4dba677429f2f3e5278f6e5f3f1bf84f0577777c547a9f82f100ed6eda5444f97ba7c7bf570f9f4ba19e1c827dcafb3d68b171f4df0d611bc90f54fc903fc31defa89415e9c54fa12823f078565bada63ef11e45b63e87be8bd8350f38138dc7bb40285a57dad27f9e09ea3b5288cf50f382fa0b07c8e4532d5581b9f4064aa3b81fa3424f97289cc5c2273029139413d2f4332c1674f2232d51d3f7d16927ce4aea0f8642273129139493d27229930864f2532a7ba32fb9627f9a61199d388cca944a69abbc4a7a4653a7a964fb8db630d0a4b9960d797f9e4934f74bf88f36f597611aa23c4e3b257a8e7e5a8ece5aaec7ec415e2715995ef427897043e18dbaaceb6d5f816477b5bcebf25561fc2f72a2253e5eb0f363c07d980cc7790c4c3fecab3241ef687be24f1b05f43cee909d87ff99ac49f4de29b7adb5f9c2e3c3ec1e183d3cf20e9301f817b3bf2105f193f07e96c96ab8b7eaf92b2b0d67d9bc45f2bbcfb36d7a078f99cadd2e55cc7f64ffdf692f86f11076ce3900edf9835f7a63bfb3d32fd7ba44bac03b8cbe273a453bf74d843c7fd16f2e23b71a12d609f632dca03f1f209f7e2c2390f586f7521e53aa378f9ec4acac17ae40252ae93b75caa7d56a3309493e1ab49baba5b47c07ae83912df9389efc5c4f766e2fb30f17d99f80b49fc58d71e07c2fe0dd8c78d22ffd805b6b816e5c1b608f6bf0a8531760e2947ee8d89ab7b63e2378bfc73a75bd271f19b519c7cc23d301b50d8967bf13ee1f4898142613524f26f23f26f534fb817260f856dbc01b3ddb075a6d7b6527833880da8b580d51c715732acb3446a3e2fdd23e6699dcde0cf145a9b4fa593fb67e2aacf592d907c75378cd5322dfff22bbd38a9b9cf8d489e9def62358e3a639aad8fa1f06da9ce66604e51409b49619f42ca913b74e2f03e21229b1954c6adeb5058633521f243dacc2035afb3d4bebae84af00c6d26c593eae92ec2537da71b87bb86e0ec7d23c6c65e44616c137097107c47dc989427770939f9e5f35e549f7b5ddd0c5e8e38c9e775c456ee46f1500edb8a5a47c6ef41d8f7b8d8438a136cc0e27c0edc61944770603c6ccdb4dff5a4fda83cda27af17c1fb246a5f478f92cf4ad2eed0f7ee4378c0e106a2cffb50bc7cc25d8eab503891c6b6e07d07ad33dcbd48eb0cf8f04e7119ca4feb0c7ad5f821eb1cc5238fe800ee7e9a83c2c83f0dd9e1e5c9f9b1816a2ee1cc456c3923c8dcc7e3c7609d52403f96c26e4aca917b20e370ee2e223f364ced7f8e80bdbf66447e483f365cf5414bbd8385f958547e0c785aed187c3af6517dce27f551df5aa5fafb2184436df126de1633d9d230d02fac2da7133b99aed2617f711189efcfc45fc4c45fccc40f60e2079278755fec28b8b75367f3509702da7c0afb5452ee21d2460f456bf323df70db64949a6f5ae7323cf2080f156fb54732f3541cbca7b071af591acc2646c299206edeacf427602ff249927f06c90fdf1dc2dee422927f26c90f63f650263f1d6755df16c398fcd793fc6a0c13c399fc74dc51e38d803d4e58a7fbad351e107adb7bc0dff6c62f2538ffd15ae3d28e6edb8f075dd2b93bdc0908feab078a97cf052a7d23e1f208e2b200c559c8576f4261c9459dff1f5d8a945ba8f2ff80c2b81d006fab176f742d52b74ceb8edb89dc47553adc5f3198948774b59f629dc7c821f38a7c3a7e8ce8b8278a974fb8036e23c293f2f0590ff5fb4f562764174354da2291f205ef2d4471d887c0d98ec52adc99a9cbe20c757982d4a5178a97cf25a42e8b357559a2a90bbc9f58aaa9cbd20c75e9c2d4655986ba3c49ead21bc5cbe753a42ecb3475794a53177887b25c5397e519ead295a9cbd319eaf20ca94b1f142f9f2b485d9ed6d46585a62ec355da4a4d5d5666a8cb054c5d5665a8cbb3a42e7d51bc7c3e47eaa27cad857e5329aef691ac1ea82eeaf74fe2abd375797f118ac375817311df7be3b9b1f512f0417eef5f600f117c28dc2bb714856dbf26b73124e665d92aff3901cbb5e13958f05b4eb01ff89397531ceee85ceb95195fef8d8faf43f1f2097782927b52e2cfa3b6781ee5954fb8bf6e150adbfc27ec279ca0dc06afbd3861f9843be7f25058e2c099b773080ee43f40f2af67e46e2472c1def03ddb57a33899f717b7eda02e8095b21bb88354d9cd651b02d84d0bd2fe9b49fb6f76eb91abee75cb9ded2d17df42da16eab995b4ed16148fe5acf2ca99f80dc1d94e70b623f9321ede67806dbc84f407183b08c64b285e3eb7112edb182e50ee65d276f0ad38dc839687c212670b8343ee458bc3b7d370071adc6dd0829483f4cfbdf1293b78c96b07b9f0feb625696ba8f752e1a9f72475de71d2446f39da16ac7eb78b40fa9dbc8be0ec24383b91fca06dfdbad0b7f5eba48d56a1b08e4ba6b626f7d4c5d53d75939733385c5bc3fd6cd0d62d4939480fd8d693601fab971b9e12e07c594a9f6f6af409f7b9ad4579205e3ee13eb755286ccb9ca26ccaeaed2da73bd30369a93ac1dd73aa4e53ca07a84353842f31e09eb865282c9f70bf5b1e0adb7ca7aaf3ec53ebf9c8a2dfeac0dd6d5b515862c178dd8270823be20e2859b01669e9934f5737b86f6b190ae372bf31e53e20e5e05b01b81fea100acbe71ea2ab3d6efda6e17798181fbe3186b9d585285e3ee10eb78d282cf36d27f25ef6cabb7c2023ef23469e3a6f1fffd82b2f95fe49dace1d9d4919d0eed0b6fbd2767ab96ac7543fd987caef46b2204dca0c72ce1dfafa6744cfeaec771cee4f5b83c292eb1697d715c509ce7e95ff300acbe701827fc01fff0a98ebc139c873d2f5d5ceff40fee7443ef82cb8d7ec511496e5601d715078d7f407158fa5aa9efb493998b37f49ca7de996bbb2a1b79ca5dadd52ed68c16f77da7966c2dc12f64833d435c5a1bf0a7f45387ca538289bb72e22b22f4ecbbeee5008d9c93466a07691f9573269d806d5198738dcb59687c2763dae52babcca6ffeaf302c751632fe8dc2da8dc2f2f92de2abf682ace6284d96d9423007aaf4ef08a63ac311ff1e61f62498df33988354fa218209feef0784d98b60fec060c2fece8f0453edffc47f4298bd09e64f0c26ecc1fc4c3095cdc67f41987d08e62f0c26ec85fc4a30e1bea2df10665f82f91b83097b12870926f881df11e68504f3772fa6afad765065e09eb03c14b66df51af5fee79a433c9635dc8b95b259b8e76b370acbe75f88bbfa0d5e6b443ace52df5e39bf775f04959171a344dacf80afbe84c807fbfe9bc887fbabfe41f2fb0794ff8f8ffc4b897ce80bff12f9ea5b7e397d4cc9bf28987ca70c277f3491affa4dc2f2ca77c2f289ef0bbb38a0fc988ffc3144beea63893891afec259140f20704949ff0913f96c857fd319124f293ea9985e40f0c283f8b97efdbbf46a9f27007daef286cd769a6cff7ef50d6526772138515c61f282c31a62b3e792aff78527e942af718e1544478f696ac11a8de387d71e67aa6c61ee8cf70970df8a09e24fd3292de8ba44f20e9bd497a2e49ef43d22792f4be247d1249bfd09b2eb68bc03e345577e84b5cdd2f66b07b91f29385beee903e45e8eb0ee95cdd219dab3ba41f2782d7bd9c6b8337245c1bbcc16f5da9e6fa89a222ddffaaa838b8536f2dca03f1f2097764ac42615be66ce883554939b84fec4514c61c4a10bc12aa1eeabeae5915093fc085fbb896a1b07c927bc712a5889c355e39b3d4fd17b3f633724a1339ea3bfc04dc4b06e7ae069172c79172c77aeb9f4a5fc2c82d43ca972172fff4e687b55d02df9928edc06fcd0fb673b26ac3166e99d93d7cca40bb9545b6a3de5324e05eafb5280fc4cb27dc0bb60a856db9b7ec2738500eeeed22ef3b52e970af1679079b50dfae27a0ff6f4478f27912e2aed66d894ae9b8c449284e3ee15ea60d286cf39e33ded5d79c8504ab32c23a01c561ac4d282c9fe87e2ee7df125f9d7fb8b130c1ca56183fa0306e1b38ebbdd58b7763b68b770becdbc3fc04f45985d85c792217d2d5dd0516dc7b40dba52a69979e285e3e4ff6b60bbc8f4d95af26bc3e43f1b0a6211d9dace2d037134e391907df60d8757d17ce215dc970ad4eb8f642f1f25983701d4acad70cc0b586866b4d1fae57315c6b11aebd51bc7cd6265c8791f2750270adade15ac787ebd50cd7ba846b1f142f9ff508d7e1a47cfd005ceb69b8d6f7e17a0dc3b501e1da17c5cb670ee13a8294877b65fe225ca7235ecab759d7a238757edd42bf8ffbee5e2f76caaf97151ebf3e1bbedff39bf3c2de0b9c51bd2e2de713f86e15c64772574d42dd5573abfafeef56159ffabe685cba1ed60d5eaed6acb49cfba6fbf084fbb3d47bb704dc9db41b85e513be6bfe0085b1bf83bb90d6a1b0cd7deecf24bf3a4398803b91fe466194df9ae32d97803b77fe71f927e0db609d2ec8fbee7cba482239eacc127c63ec97572b8bb4a1a5ce3425e07ba7dd282c9f6720db3b43d519d63dd0ee4dd31ce6f6277a6e8aca370dc079667ece29aeeaf7c813cd0857f8366b3caae76ddef6f395e9d71fd4ef2059703edbaf3f90bb8b12eaeea2dbdff1e64be547e7622df8a66187378fa5ce5527e07bb5dd282c9f67a5311267f9f3b87336c3e39c103c5a121e2dd5b305e2d14295b9cb8b958a57df03245a132c75be3ed10a61c13713f8ce43cabf4d08feed88cc76ead916c954e79badbb097f88bf4785db132cd52f12709fd107282cb9a03b1aad7b5d1b82f791d67d6e18eebfb0ee77c341eee3116a0f27d101e908e6cfe7a5e39c7fdbf8b259527d8ccba3e64529ff87b0136aaf06ee894dc059a4ad282c3160fe047eed01c44f539f142ef8d28e04b7a3c27da780b8ca67263a11dc4e2eeeffea79f305c6cd53e1ce04b7b3c285f79ff343e282eebb105c7547d2dde0bf60cf08da03be6ffc1785657e38a7fe48001eb6edddfd2ac1073e17107c753fcedd703e624101f1d559f0443782afeec949e57f38981ea15d02eb1bc62c72174e42dd85735f7f97f77d30c6a96fb5ef69a3e2e12e16584bf64472619dd72b1d97e889e2e4537d272ab72b5361890f6b2ff51db995e7cd9f5a1b43febf42d831e60debca3e1ade7d11ef3e284e3e7b13deea5e9b7bc11e286ff88e751dc90fefe71e0ac91bd69a176a78f74bc7252e4471f2d99ff056f7b3a47003fa97d4f7d219f8de13605fc582be03363e4b71836f411e436199ae998f588fb8e1c7d51e80a5f61a1217237e63083e7c3bb215856d5ddc0ff7228e45187ef9a16fe8f6c46721d945bc7802dd59613d2a028f7dd622376feade69789f0467b81f13defd201d961ffe12065f9dc1b6161be22ff5e25bd94a2f03515b5d82e2e4739057a61396cfc148875554dc10a4ebc1284e3e870aaffd0f75db705e73bd5c0713ed3f5acb42b4d372468feafc776218a913ec430c477552e7bf13e87d4f62388a93cf91a44e23dd3a3d584a2fd722bf2f6e3d1da24e2b49dbc1fef1284ddb8d524f72d74e02d2f1fddde0bb703f198de2e413eecad980c2763de7c377472389dcb1c2bb37a2fa736acc2377efa4f0063278a3bc78bef5b475f4e0786f7d2df81df582f419386faecea827d05a31310eb585f28b0fd64332e5739581ecd521ec638dd73e52775da0bb72acb56e9e4530f6c19a1ddd0963ad73f3ec6ea1c2301f9884ea31099543ef32ace751bc0ccf4bebe54e25d352df5325d0fa19de0de5c13b76750f8e1885f2ca27bc0b5c86c232ff8b69394fc3efcea877060bb2559e0d042b17b5636ee6764c4c403ada88e264189f1b57bab136a7b116c37b377576ec3958776d75c3dbe1bde03637bc13eead5173be056a4cb5d4593d0bd69b9abb9dad97549a9a4f38bfbbadf248953879d4193f4bcd71ad57d2791e6eef3e17c059d6d7bc78d64e9417e6c87eebc55cc207dec7aabd4c4bdd436ec11955f88d14f51d4696154206f81778aff9020adb7a7cf8661ecb82fbcd5f413c543d17ec0fc181abe7dba49e70be1abe3779c840c666151e43f4a0dedf66c550d8d6c323c009ee66e7ec80d3d5bbc23b16a9fbcc7d7d86f20989c922b31f51f79b5bbb4859789ffd180acb7cba79e96e6f595f5f3455e4f3450b0faa3c6a5f25e58bd43ba504dce9b50c8533f8a247e15cf61e8285fc6f02f8faf922f43ec1da8be2c2f8a20f85d7177d24bcbee863a1f5458fc1bed36455a777dc7c8fa9f59cb54f3dfd7cd427c48e753eead30cb62965c2372297113c1827c0ce3ff3e6b3547f4ec01d69ab5058d671bd172fd53e52a6f257e2019286db2eac8f84bd45b8c72c0f856d3e8f93bdd4d4b929f8e66b370acba7ba3b2a2b8ec2b2dc4215afce603c0e73847928bd807395541da6933a4c77ebb068bc375f2affb56999d6e742bf9faace30246692faaafdfbc48c344602f6210ea4db6011ec89dd41d20a524f355f16f85e3198474dd6c44dd1c4217f631d14daf5b340ef11e12e7c81fabd2f47b51792b80e617c29bc733fb5e79ab81ee9ee7ab7ad1643bfd984e2719b423e1817ab137ed2cf1ce6b9a7706f10deb33037b8b84f34f7e64be95afad4812a8e7c0f929823bc7b04731416b4fda5245f1ec907e76a371399f2dff09e68729ac792868407ecf7de4878dce8e22f294e78dc487840be863e3c94cf5d02f7d67ca56c077ce4016473127b0de18fc739b0919b088f9b5c19293d43be9bdd7c59491496cf5b54f93d24bfbab7202b0b85e5f3366ffec42d281eec44962b44f0e67ae5a7e26f2772e6a278990f7c3c8c153037ba03e942bd2b4cc05d556b511e88974f78c7b40a85b1aece22e5e0eeaa03286ce75f56d86db765a5dce7d367101e501ede092d4361f924774725d4dd51cb062adc915edc5439b8bf08ee7c041dde4fdaf63e142f9f700fd65614b6e53d599ee0c31d1aef10fc79a48d1e40f17ef80d897e9a13fdc09d467f1179f3195b79c8cb03ee904ce1e591f6ca533cde40f2904f83fc5985bdf997eff3e687df2a482c20f917b8f99f5a8ef8c927dcddb10785115ee21185530485e513c6f7a2282c9f8faaf862282c9f6abf32ab380a63fda9df115bde1ec5cbe7e384dfe384df22e1e9c34e583e17137e8bd5f309c24fed772696107e4b483b1ee3e565a96f54134b8577fdb754b5cb74559f3ce1d177c672fb0a665fa9fefb3ee92750be048987f22549bcb21bf80d2eb0d7d4d807efa1d57ed15238afa2c6be049c47c05c67a7e312b3509c951e2353fb9a6a8c7c1abeab22be54377ff79d9f40bf5f86785551717077c75a9407e2e513f65057a1b0cd6d15bc43ae4aca2d17debdc8e584c3d304ef6917ef19b557be12be2781f2682f3101ebb115a81ed0b756a27c2b509c7cc23d191b50d896b9027e17e55b6f1d2cf8cecae6b30bd690dff9f0794ec36735caf71c8a93cf67099f67151ff89607de79add1e0ae45b86b501cc24dd991c25d5986e0eaeab04e236b3dcab70ec5c9e7f344d6f34a168c0d605f60177067040ecb27dc61f1050a23bb49c07d2cf45c34e06c20b81b08ee9fdefca93e0c77daa83efc4c806f46527d79a3f0ce0736ba755f759d379f75286d47abc027c3fd16bb5018e7e538f8f16aa3b0b6a0f6dae2727a16dabe1d8ac7dcd53c3cb11995ddaccac21d3ae7a3785c16f2a9bd1bf85dbdc456926fabcab79270d986646e4318d2ae60dd0ab6b81de5ddeec511ea8c4ad6b1997565fda0daa305d2bbc4dc91c6b77e14da3562e225d446e0cf5e4171705e1dee3f588bf240bc7cc23d0bab50d8d6cff3e5090e9483fb17e8b97748877b20e8b977b5b79b80bb2636223cf97c4be4eff36f233dbf85e2e413ee2ad880c236efd56afebb7a1ec17a0761ed4471186b130acbe71ba8cc1b0a7f878b2fdd9d070bee37f8018571dbc07d125bbd786bd4fd07eba1ed5f23b83b543938d70e77fc50bdc31d04f45cbbfa1e3e0177266c24e9bb91ded51a738dd269ca3fed1229dfb106e6f7f3481ae2ee39070dfbb9f81cb4f237da73d070d688d60fee50a067e1e1ec1bdc61b091a47f88eaa7eea35c9b47eab737cd632df88579248dabdf1e4dfd60aea4abdf2f4cfde89d0abd51bc7cd23b1520fd1354bfa96efdd64d27f5db97e6b1ee2e52bf7dc2bf7e1f6beab7cfa77e709f0aad1fdc7940cfdcabbddec46742eb173c5c3ed37079c987cb6f0c97fd844b5f142f9f07182ed3915cb54ec467e653bf4ba73b33ff0a6993578467cc7f6e206917eccb616fa080be7c33b94f29550ef65c97a130f65579282cc704f50ef379f5fddbe62da41c8c0dd497817f5d81c2897479b85f24f0180277cc90f649f973ea330f3372de157a9fa9ca85f1992f80df82f67d2f6d032fc2598979242d8ccf7ccfc7ce7f67ea07f7d5509f02f33dea33211dfb4ce5535e2467611dbf0bf58339d73c9216c6677ee053bf3f98fad17b6f7aa1789dcf8474ec33d598b001fc3ed4efa3348f0df04e621e490be3333ff2a9df9f4cfdf609bdcfdca79e47c267fec570a1febb2f8a3f523e13cec37fe962679546615906be9139a8d28f4361bb4d374d74f1362d25785f113c7547b0f58f0f9e7c7e8178d3f7ed708fcb5614961c0ebb1c36174718905ec49b7733ec712a7f6aa9bb21b2d4ef44507f2b5feda7d2517c02ee81f9158525febd8a33bcaf407b379be12ee339240de3aa71330bbe2dcb30a63dafde5dc72cf58c79f3e73bff006b3b18c7f250d8e6bff5a0371ffc6e35f5f7b138c1c3f7df287fb665a1978b33862a5d6c011b9f47d2008bf4310bce22e03e06ef65347d2c9620fcbe13f9fcd1d636841f3a93b2b50fe1f73a92fb9d86df640dbfd77df825bdfc701f8ea9fdcda07d38d05e20be4b08e6287047d05a9407e2e513ee035a85c2b6deb6d3f729500eee075a86c2f2097700e5a1b08db34d9d23dda66c797b29524edd0d94753c0a439f9461b807e85f144e101c59be9c9767aabde10e25257f5b80bbf86285847e3fe157d47eeafd53befd047cff10b4cb6114a77ef32501f706ad4579205e3ee18ea055286cd77b670f8203e5e0fe1fd84fe84ad2e17e1e3a1704dfff97f08e3b6a2c95264cf71392563a2e29509c2c07f7f06c40619bf70ea5ff97549f8d41f998caff289111473262280ecbd884c2f289ee1a72fe6dcb7a49bdff7a69ba92abde9b24135eb949c52b99149efd8724f4e17908178f4f20477d1fb613be1980ef5a95fe937027cd8b288cec3499e5c575c236eecbf08ebc31c12becc583f61213bce9596a5fe4e5f69a7c32fd046fb9047cdfaceed7ca52dfc6c48ae9ed2a5984d8554f142f9f7057c546925e1cd9959afbbf0c7be5a0936222e5075f015f3f8fa4810cc911612615dfd831698cb7d55e6eac045317b8c784ccf393ea1d5912ee17d948d24b897ce3e22be4fc53b224aa0b9c7f9a47d24006ad4b499fba9464ea02778890397d52eda726e1ce938d24bd8cc83786be0a67a7a02ec7a579bc4ace3fa5d24006adcb713e7581fd615a17fc5dbc4cef83e2e513ee24d988c2446ee2371fb9c73272cb11b97d51bc7c962772d5d8122b2df28de931a4b377d49a00faf84ed8cfa77d1cee36e1fab84acfaa203cbe275f1fafe8c54d8d8d70df1d8ccdf05ecf6f6c5473683a36264f4cd739565668c7c624baff24652f15519cface2b7992f08c8dc98a285e3e2b09cfd8e8846d3dbe3d92e040b9ca5e3d262b130ed94a4f3114b6f15e9fc7e055217855900e643cec4df627e5aa927255098f93090f75e6f58da90c5e352f5e2abd86c8e75bdf80ef1fa00f574fdbe31b03098feae9f2c96a284e72536d0077d9a5b8903b52923509662d52b75a2eaf377b3078b549dd20bdaec8e76bdfac45ea56275db7379b131e75d2e51d191087eb7611e152cfcb25598f60d62775abeff27aab2183d7c08b974a6f28f2f9deb760dc83bae5a4ebf65679c223275d3ed900c5e1ba0d205c4ef172499e42301b91ba3552bc5633788d099ef269c90a84c74052ae0929d784f03895f050f779bcdd82c13b8de0c17d1e7036ae92377f4abf707793f2893b839c3d863924ba7b23561cc5c927dcd7f1320adbfce576a0277f53e19d7fc2ef62cc23382f101cb0b5095ebc989ad36481cf0b528f33513d4aa338f984bb3c5e4661297f07c9df9cd483f6c366a41e807398d403e610ea2eb5acec10f5383b5d0feb7214279ff03bd32fa3b02dffddb924ff39a41ef07b23f308ce0b046783c299e6c5b3e03b8d00f76ba7ead112d5e35a14279f2d483d5ab8f2dfeb43f2b722f5807b3ae6119c17088e9afb397b1708cf52bf77965525443ddaa07a744271f2d99ad4a3b52bfffd6c92bf2da9475b520fc07981e00c55381dbd78f0bb3c59557dea310fe52de2932f880ece453ae881e2e4b31dd1413b97fbae6a243fdc63f2030a631d00ce0b0447cd8f9cdf024278f07b3e5927f3f580f39a4ede82ea408d57c90e8adf0a1496fc0e79f359b09f67fbe1ddb03618a4d2be4779f0be47584eea2c79f23cc249ddabb25bddffb75bade762b0b6506b00edfd42aaad2d74d64acb819cbf4f927b5992ea5e96bd7984abba0f25ab1a0acb6767240fecad4b3a2ed919c5c927dcd7b201856d791f5c2742d503e4c33e7212ee33f91185e5f3020d3f644fc90b509c7c7627fcd4bd1e7baa85e407f2d5efb7c399d3a4da8b88815d92fb3992ea7e8e3deafdc79ea5044ffdee3b9c554df60a88b73fa49da8efc6f6fce5f2d8abd603b113081fb8d72349e2fb7879c64e44f9215d3efb2abedb5058cad77c7f06d8816d7c06b1b9ad286cd7ed6398e72a1be7f6a7a88d655527750ddb07181bfb70b617e348dbd887bb5cfd7e542a1a1bfba87d38fe60631f0d543cd47b875885fffb36165373f8985a5b18f964bfb1e23865abca0fc42a21ee92ef854a07354818d6c2b0f706bf2bbc02856ddc7d2d085e7fc415f6a8d47bcf18ec696c27e90711862efd4b150fefe233d557f2b828cdc3f9b7e43adbd5ef3ed82399eb93176c09f4a5be534a5e4cf405bf93fcbc977312eeae5981c236ee27e309de40037dddc6a487d15759c56b8392998dec91b1715f3c584b0d521cf250d896f3a9da578b5551f14350fd5559a1dec58b79a47e90fe2f2aab4997ff74645465d22da29f47513a705173b324fc76721e0acb7aa8ef9f3f85b6d0e964597edcd8c97cbdad2cff7a5b8532d4bb70867a03876a4c3abcf78075318c5343f3738dd540691aac584d7f2e31b5ff95cfc621bdb6086ec3ea7b99e430b74c16ecadc1b834dcdb86291b1d99ae9793c76ed7fd5b4859f55bd259b5ddf6deafce4fc5eaa2f422084fa6c1d907b8d7783b49afefc5ce970e7b6dd00e0d09ef5122d527e937a04975274e561d128feeb674ca639e3984c728c2f312269df04ccdf54733fa46f76f39796c7d7fde84941de3d5f7e7ed89bed17d45c9b1a41ea7109e63493dc630e9b41e30968f535cea92787c874d69c2a191d0db737d2f66be74ca419d314a5e463840fc041f0e8d3370b82c2007a59f642ee100f113790e16e3a3521c72037250772d25e14e933a247e32cf21d6240387490139a8313ba9beafceaa47e2a7f21cac5b337098129083bac322398db405c45fce73889d9a81c3b4801cd43d34c92b080788bfd287c36919385c119083badb2449eecc48f9986bd21c92ea1e8dafee2565d5fd19e063be82b9715d945e04e1e17a9ceee5994aafefc5ce974eeba1becd4a4e67ea81eeb670f2d8f5f87a20297badb71e5f4f24f5b81661cc20f53883f084f4fa5eec7ce9b41eea7c5952ddd191ea9f107f9de06da2a9f0b789994c3ae5a0f61692d7130e107f830f876619385c1f90833a07989c453840fc6c1f0e6766e0302b2007b56f9f9c23bcfd13e26ff4e1d03c0387390139c03b0875bf44567d127fb30f87b33270b8292007754f4652dd5191d580c4c31d15eafbb6d839283fa4cb27acafb6317ccfcec097aecf38beeafea024dc755187c4dfeea3b3161938cc0dc8c16f7eaddbbf68a9d2d43deb317827a2be49cf6a88c232bdb548cd590f0d5471f03ee72e54bfb0fb1b3a6eeafd4af2ce34ae235fc6215949f53d5412eeeb80dfd886771277a3bc77a3bcf2097771ac4261db47ff5891604339b8eb62190a4b5eed5418eee8d88dc2920bec07aabb3a929fa2b02def879fbdf993e87ee0e403480ff209f7719c82c25286babf21a9eed548bdaf7e90c8509c93f3918cf9a82dfdf61a951e52ef0de08e04f5cefa107c83f168303c6f5cd2b2e45e6c7b314c0cb26765394e05e4a8d84b7413ad4503d1530cb5678c63ed7fb5b69f63ecffdd10c443c97a223b4319e7eca773d2d7feafa62376a2ed60c7db00967cbfd2dd0ee4da51c3ecfc12a3835d66a2682c1a39d863ecb42136ce047b2d314a0c162758c511efd6cedf83ec1ca31cd04659f944acc92742921b6dff3fcc2e36d12e2849e6daf1e7da3163ed3f13ecb82176b8a3fd94a5068a53443ffb7f2f4a2f5bec687b82344cf4b0ff1eefe00db469e7cf99a94a17d9b1b44c371b73acc36e8c1d030a1d6f87473b0cbb3b7f4f76980e73d877b0e326da71b23623442bfb39d59196bfee13ec7feb64f6502ad373bc2854bce56cad4033b5b16b23d9e738b6f8ff5ae468b488547d96ec1ff2bf448ef326e6c67c2df1ff74e83a19f9e2a383c238c55199e5896b24729c7723ddf269307c1df3d7506fdfaebe4f134d7ceba2d78c6cee0a4e0dd22dfcf3bece85eabdf3eaa8a4b76a8d458eb3ad5a3143d5fc142bf16a59c7e743f0af42329968288952f55b3af53b5bbbddff43f5bbf94639f9c237409633f8791bc0f959d01ef63fa6da7f463b22863899a5d7eb64671b6bff19e110ced7460d25602147cdf907d14c543945c7748a76f6c87b1c153bef97c1c7e9555d38558bb4aa739c9951791f83e4643953a6989a374197d9d5a9c9e967366cba20a96f97a24ebb14441ad732715dcb14fdafbb40669fefd72ec552f54ab78bfc4fafc3e28c6d67e2c06930a1d360b1a363db927bc16c5b1ef4ac4f74a8d75f095f1bf463c06930a9d3a07302b5e77fa8c12e36c34bd44cb1603a2c195887a51c1d9e90af764138705accd268b1a1d4e2b13a5a45082de7224c3d70210eb8b42170610ef83843e0223a833ae6bfee92326d9c832207dcf0e624bf95a94bdd9ade9eca327d323305ce9a8aeada46aaf0782d2bda3865f9c629c6219733452ece219737453e466750ceb776fffd3cbd6063a4f435e5028f91270abf6976d811b2844e7bce9787fd8fa8f6f26f1fc1bf5ad96547da7a98ecec094cb2cbebb69bfc355a21b0b7afe868335be836c1c231e2345c5267f952ed2771cd4e8dff44def84be9c0a5c44a41dc74451ef8580eb8b22170690e38db10f838cec35431f5306538e4aaa6c86539e4934d918fe790ab6990ad30c8e538e4eaa6c8e575bec8b1f09147d417f5b4e3dcade4b64eea2867ffb181b31a9f28dc9d485921d9ebb9bce0793ad9cfa13637c9c2df47d508eca36a3a3e4abeca3a524c39df7582aead9d097290ce5a936fea1339e0da86c01538e03a86c01539e0ba86c02771c0f50c812b71c0f50d812b73c00d0c81b339e01c43e02a3acfe20c71638f9267912547dab2e4aedf500751fe817565745ea661aae6685fcc19831bf9fa93e8f8a9e386ee7f8598cdb3468e8bfbaf2871eeaeaacefee49aa8b14e8bce84a3207b2df2c09d5c5f3bdb53c97c765c82b7e3937504e5d82bcfae198dbdd538e4d34c91abebfa9e33a5fa6f37f2dd9d7189137e85268fb355264a583ff1b373f4c67c86e076e8fd3970665943a74167ea38e2a878af1e42bebd98e8ac848645ecaf9aea3cbd56cbcd1c2dd7f57119663cb9d6a8a9eb29b235ce0c324835e33b4a2d0eb8b921706d0ef82c43e03a1cf0d986c07539e0730c81eb71c02d0c81eb73c02d0d811b70c0ad0c8173745ec559365e7254bc0a5dc3443f176a2d34a3b8b39c6de0e345a2e0258ffd659c03b5751cda91a6c2b9b5863a737056e4971e157300cc714e584a8bde20dae90cc259f3e6f8b44234ccce0d6212ed1d9338f26438a33845e77c8e7582f935d7502e2bce23d5a20ea911ef901ae984c9d9f7f93a6172f62dbf302fd844ba3127ab1327ab73816535d1c9923dab8b4e9634bfae1994d89e17762a27ec024e58b7820b3b4d27ec18c75d186e5f9eaef346cea651ee51f246931c891219af408fe45458be0f0d3615eee9b889d37dddc491e0cfb98d3374765152b857519aecf137d59985b3e537e9ffb059443f70f5d674e61c6787b2a9b11114846d1f116030ebeb58e9d121c8596a33ce5d5ec8b9cb7e05779767eaacd7d9fe1d7d54acb797704fb348753552fb56d1db6a7f9dad3a7bd30d7d4c213a6e012cf362c732ff0b3a9c1d36d79986b3cffe5f1eb3c21b54053b663540d7d8d93232ff81aa20d2060acfac4bdb7a8384fec056107cae3dced2b587f316a1d77fd81ede2342056b91c1ba167136ba4fcc579360f286409b587c9b0c75daa4a012b856395be7ad65ab0cd3796b59c9e15eaed4590fe59df5399cac119cac910596d58293358a9375498165b5e4645dcac91a5d6059ad74b2e4fa405ecf60b43e68ad41ce71de8e5c7844fb271cfae92edad8cbd25636f95c353ec8f89e8e05a70f077973f9f753f92232d86c7f9cd3b72a0961c486eb636db8361b6fda666d75c872557099aeea215605ed74c6e0bcd01a73448d811bf8ffab05e284c02693eb988cdccd39f29c39c33a57d74ad5c5517b8b85a7748d236e1979c5449c0ebace6b3cbff755668cb2a58b4effc50ccc9344a6b766662cb8d66fafebfcf22db0bc0183be5a75f853077006ef003ae8c0a5cf9aa2f159a15e5e9fc7214f35f586e7eb90e559976941bca1cf59978e3a60b93d29ef96303d6fda8903bf2202f0ce1cf895118077e1c0af8a00bc2b077e7504e01770e0d74400de8d039f1e0178770efcda08c07b68c0739c97f3ffed9239fdd565c116683374fd5debbbe5453ffa856e660e9c5feea96b22a9c5eb82b8a1997cf3f4e280af3704eecd01df6008dc87039e6508dc97039e6d087c21073cc710b89f0e58be1ebb3108b0cfbbb0fe1cf04d86c01771c0371b025fcc01df62083c8003bed5107820077c9b21f0201db03c31323708705b1e78b00638c7390e352a9fb3fbef0fb845bf257ebb4e5f5a972fef85aa65c9c345478e2b37340ce1ece84e433b1aca01df65083c8c03fe9f21f0700ef86e43e0113a60b9ef7f4f10e0413cf0488ef1bd868c47e980a513b8cfd0095ca203964ee0fe20c077f0c0976a80739c339147e7b51b77923d5a1ff340601f334f647afb151563ced38cd635bdb44179b51a5d27c86b39c2ac13c670e0f335e0ffdaff85011fcb813fa4011721998fd381cbcd873c61b8f9305ed7259cd3bc4776c0f56e5837d69e5fcb75f6a046396636cef3efb636ea04c7ace8a676e30c9d61815dab9334ade1b488b6533c2c60e03d729cb9ee701967548f44605413744def9cb73e3a4768e899d6ae4ef9f14e8cccddca8e1b67e35f1ab17f5c18d83f3e2a329d5b397275e04c24973391c7223091893a70e94d1e0f3212fb1c399fc4012f32049ecc79cac5a69e720a87fc8429f2540e798929f234ce389646601c97ebc0e546bebcb2d57423ff0a4e274f9aeae44a9ddb73be06393a5f3be80e1445ebe09e129a7750ce672a7e9f1844c14b9e9f73ff625e422d1799be74888206e73bafd219997c5dfc74102f94cbdbd8d55cbf7b46d3efc2ce34afd119b0f371d0f0236ac0f9a73f1d6c2cf78a423869908e6963979d62a3c8f16e905a29849dacadd03583d68e563a765447e82669e62c39fb99ce35f3aa08dcebb53a7079e1d3b3a9cc196ca8380f3e8363fe9c8679d875d64cce77afd6f8ee502f61afe374b246a393e93ada3e3ab99e035fab019f1b12fc060e7c9d063c2f24f82c9d4770beeabbf63ff108996e0b3fd7ae9994862fcecbbf7482eba2e5dec270314c9d85922c32df32eeef47d6a7f4830640e733b7b6c8631cfd5ac8dfc42b5a911f2d5f70bcdcff2dce9c6f9cad33787949a1fcb1f67c57e1ca2fc906a8d15dca1fab564fe39cd6eca0c6fa7c7da210df27e6701e6e83c6c359213ddc8dba0ee77c2277646f11c9d4ec722a24ef5acf75fe3d59356f0f4776fa3e6093aeb45184dd3fd924e0428fff823d678e3771fe77b3c6ff9e6185f3bf3773b6be45049847fa18f12d1cf0565d274a38f9c277955b39dd6cd38d4d2175731b5785ed86ba99ab0396b30cf90b2d462bc4db39ca2fe9b4dec0e9f1e99bbbb39dc965faeeee6ce7c6c05cfb39d6b6d06ce7dfb9ce26d028b55934d48e9d9cda27cc76eedd1f64f73e59ba41289ddcc1e9e465539ddcc9d9c82b1a1b291e0b672377e9c0e579e05783d888cf79e0ffe9fcb4f375f1d1799d9c7fe88d76a5ff9a4e5f5aafbc53647a9d6cce95f3c577eb9a5b4e575f17f9e7690de53ced0d217fd553f27e5364da30d04d79c233cf67652ff056760fd737ded2f48df521fbc6bd9c337a5be78ce4e71bedc438c794fddc4ab6d3acd9ceafe74c50cddbcc0e5f211a8aab42b99cfbb8cabfa3a9fc5f212b7f3f57f9777595971f99b4762a3fdaa9bcf4b713ede770a7ad8792eafaf9dc6c679e913f75b018e46cde678b298e5f188da44c71ece8d2901efb015d0de534f53d917f9a2ad51a669a3a8f037f5f032e42823fc881efd28087dde39acf81efd680c743327f8803ff40039e08099ec781efd1802743822fe0c0f76ac0b342823fcc817fa8012f1412fc110efc230d78e190e00b39f08f35e04542823faa01cf716e0df92f6fada3a359b893c5fb44d079c127427f635d26f9dc58ff98ae69a41ffb54e41f1ea6160d373c3cce817fa6019f1d127c1107be5f037e6f48f0c51cf8010df8a290e04f70e09f6bc05787045fa2039793b72f0433793b2852bb5a2126554bb94a7ca9a9c4d262e12ab14c072e171c5fe93a4a8805c7931cebaf35ac4b150fc7fa298ef53786ac9773acbfd5b06e1e92f5d33a70b926fd4e18ae499fe190bf37455ec129e4904e21c78453c84a0efc070d78b592e1c057e9c0e550f8a3309ff23dab0397cbe99f8218e04e1ef8391db09c62fc1c04d8677abd5a072cbf8bf82508b0cf77116bb846fc55d388854b856bc4b53a7099ff3791dfc7e638b78a15ec578a0edba5b212c2fdaf81fd9fe61a1b9f5ff059c735dbef42b33c939f23ea16e7b0eacc16eec74bee86d84467e125272f72a9ee56cb5db74eb2ff5ddf7e0eb7ff9ee06cb5c98db66cfb0f6c194bc4531cc4e1cee46a8c534e62bbcb7e99dec84e6f663f1bdbcf2aa16c6a3dd73a7f685aa7a16c9d3fcdd4fc3ca7e6bf746a1e18899a0bae4cb9121ea966bceedea75c7b8f56b8f2574587aa7dcf6c557ebc833bc26121f746c335c70b5c4ffc5bd3138b970dd7135fd480e73837ebfd973f29d4d2393a2a3720c24ffdffd1393aedd4ff5fa1ff39217fe9dcc47f83ae59a4e6e4cbb68c9ef75fbe4936ea80dd5b1c03007fc2036fd2b5b573b1e105ff615b07f9c15a7d4bc774f5d7b674dc922d5d365fad7c7fd395d1da665d7348ad256c2145081d670a409b44b261c0b7707d3b69e5efdbef84ecdb5b39e6591ae6dafd0e1fe6db38e68534cce71d1f8ef9766e40286c690604a1a3eee3507770d48b68a80f2d178efa4b1c78510df88613c381bfac039793df6296f9e4f7150ebc7804e0af72e0c74400fe9a0e5c4edb4b04f1983ed3f69d9c1d960c02ec6382afeb80a59594d258c9c20ae1ace40d1db8f3139c16337f2b6d19cddfdee4d4749caebbcabb2fc2cedfe460f47f71aafc16a7ea329caacb9aa9fa6d4ed5c7eb543d383255ffff67bafc0ed7b5ca69bad6ea4ae1bad6bb9c1b2b1f811b7b8f033f2102f0f7391f79a2a18fdcc5596405431fb99b6bc88a3a1f59395c437ea00397b3f7930c67ef7b38e04a86c07b39eba81c81757ca8039753c5ec20ac7da6891f718d5845d388a3b3c335e2c71c78550d78932ae1c0f771e0276bc0ff0a09fe09075e4d03bea36a38f04f394ba91e81a57cc681d788007c3f075e3302f0039ca3aaa51b3ae515f36187ce896a1884737161e627e106b9cfb9bad4d6d54526647ba48691f50527ab8e4e96fc3e6e80fd7f43fbcf907c27ac648a7b46456a360c8b831c8bba3a16a5118b316a1ae19e572c38832f3906f5740c8a220603446fc73226861c01bfe2bc447d9d0baa16ce4b7ccdf5b50611f4b56f38e6391ae67daa8763fe2dc7bc6104ccbfe3989fa261be3224f3ef39e68d22607e88b3cfc63afb9487f9fb295f7691ed1bfa293fd44c4ddfddb83eceb3be38dbfebb2df259431c20793a4c9e201b6fc78d74fccb54673b7098133b34a44ffb81e3df44c75ffec2409a115cf59b9daa5333559f8b34bbffaecfa64b91314e8e5c7512df5dd4b8f5cb15eed6e634a764983afda8ab93349053b9f5e169727d5848b8ff3570ff0bb744fc89d3e3e93a3d560b6407ee522ec77e365171ae4d5c214e55794f0b79acf2674e3367709a696aac995f3899cd3899671acbfc95ebf2cd23e8f2bfe9c0e5ab82b30c5f151ce6347536a7a973a4a6925853e1f4f43ba7a71611e8e90f1db874ea2d354ebd628b704efd4f0ebc9506bc7d48f0bf74e0f234526b5d43c8d3486dac829c46fa9b731a6d754e43fe0e51feafd9bad8cff4a162f93ec8ddd7e989f678c2b8887f384eed749cca0a77c2d5c8fe939ee87610ee2d4e530d267eff723ccef59b7aca6b0fbd434cc119088b61d0de6f0a7e8a47139dd562a6e02c2c8e45071d8b92024f807b6a7615c3c88ee964cb7e701ed70fce2f503f887375eca8ab6379b61f7477167f139ce9506b650723424f1f125cad3b71b5ee5ca05a277572e429a22e1a3939ce2fd615ec6edeae96ff4f4af91c48cae25ae6023f6fd030726f5088e3d12dd342342a6f509863d03dd3823c4a6f508463d123933790d246d8865170d94539d93d75b28ff178a26e065ea818d71f7b71fdb17781fa6371ae3ff6d1c991fdb16fc13bd6313a6172fe72a166fe32b275b8f94b090ebc9f067c6a48f0921c787f0df8c190e0a538f08b34e00ddb85033f9633e08b75065cd9c9e77edde75ebb364a5c2edc55acfc5abcbbe868ff6bb09d79b8bade007629a7aad55c18232fcd711bc0ef73b542b27b380e368cc4e33889037957d2c61960073bce144b0f3bc496e19a7990ce40cf0dd7cc65b98a0de63cb5f44eee6f86e5fa3670982a1ecfb118c26d16b7119d441ff5c168b8397b399d2cb98c1baa59c66d88875bc695e7da6a986ea5d5215c5b9dc06969b84e4b851d2394b721ca094f78933f9193364227adb8465a77e504c248ada0932acd6ea4657ea35d45ae4aa3f82a75710c5a9afa44e78e81418ef187a9d2499cd44b74528b3952dbab030b973b6f26263ac9616456d2c8cc717e09586aed685d50d64164bafc2becf56497ea7691b4072e475bf2355a6d2767d41cb9839995396f3046e30d0e9f1fce1b64737e6c6c04db515574e072c5322ec8b69dcfe5a05539d6e335acad90ac4fe6f47d9946df853b86d377350e7c8206bc4948f0ea1c78ae06bc4d48f01a5c634e346ccc9a3a60b9969964197efd558b439e6c8a5c9b439e628a5c47e7739d1f49ff2f0fafb7b243f2dfe10faf4fb5e4f94baa00ad339d66e94faffb09e79c645d6ec4bf3c8211bf1ed7da5798b6767d0ef94a53e4061cf255a6c8399cf3bd3a8221a321077e4d04e0a7703a996eaa93469ce7bd56e37967770de7791b73b46798d26ec2697b6604da3e9503bf2e02f0d338f0eb23003f9d03bf2102f033b8d69c65da9a4d39239cad31c2e5ddc31961334e277322d0c9991cf31b35cca70f08c7bc39c7fca608989fa503973b3737079915f97cca7f36a7925b342a913f10164625e7703678aba90db6e0947d5b04ca6ea90397efdae70651b6cf0facb6e2947dbb46d92b078553766b0efc0e0df85d43c281b7e1c0efd40d3c43c381b7e5c0efd2805f393c1c783b0efc7f1af03223c2819fcb81dfad01af352a1c787bcec6ef89c0c63b700ee55e4387721ea792fb742bcf31e154723ea792fb23504947aedb3f60d8ed3be980e57ed8bc20c03e1b679d395d3fa873de63c3e9ba0b073e5f03fe6a48f0ae1cf8431af07bc78503bf8003cfd3800f1d1f0ebc1bb7025c10c10ab03b67820f1b9a600fce041f3134c19e1cf042dd7eb1ecaa035237310f40c79b7a88b05bfebdb8567e54d3ca0727876be5de1cf8631af0eba68403efc3e9ec719dce2a39c1b49efa888e22c779b125b3c0ae4c5b913e6f2b0f25b8df5ac85de1303aedcb315bc4b5667e663d9ddde75122dc571117720a5facdb0dbd329cc2fb71c3c613110c1bfd399d2dd1e9ac34db9af0f3885d9caf5cc2e8ee224e774b75c61a52771773ba5b1681ee0670ba7b52a73bb972c8453767bb3e037ec0368cc60672729fd2c9755e5fdbbdcafd713679fc6c9873ab6b1889833889cb75129dd77c760d270bf787e0fa8692359893f5345fbbf1ce9db5d30ae8378670129fd1492c42dab15d686f319493b74227af9853c35ce7aa12f9cd593731c8f19be342c91cc6c95cc9f9c6a1119da918cef5ef559afe3d7e7ab8fe3d42072e35f66c909981cfcffd8ee41cc77311388e515c63ac369ccf5cc2e97a8d46d78742eafa520e7cadae21af0d073e9a035fa7631e127c0c07be5ec77c4638f0b11cf8f33ae621c1c77196f282aedbca607a821ac670c673725ed4c929ec9113fe16f5cb38691bb881539eabce152ded6877189307e0c6879e6a4ce0e46ed4c92d2ee03c370c6469f961a4e6725237e9a49672a4b6d40c6905933e9193be996f5977482bc889af499cb42d3a69eee13d7722d4d278889bccc9deaa939da56a2a27fbe3434e51a67092b67103b8be45c3c89ccab999ed1a3753fca6706e661ab772df61b872bf9cd3d44b8623dd15dcf8fc7204e3f3959cae5fd1e87a75485d5fc581bfaadbdfb9391cf8d51cf86b1af052b78403bf8603dfa9015f1f127c3a6782af1b9ae0b59c09be61688233b8bdb43723d84b9bc9e9fa2d8daeabdd1a4ed7d7712a79db5025d773c0efe81ca3fc600a7f471ef5278337703a7c57a3c39b43ea7016e780de8bc001cde6f4f83e37c0e05f74496b2e8cb6e66864e6c81369564ff1df9da9ea29dc0fe81adbd2b9efc6fccf56ed4ad523ada21c794180e62bb520d276db7885a5c2e49f81b7099167ff79d5fe337daee07ebaf2034b1eda2a983ceef0d68d9c35efd1bd74b82d9c35dfc481efd5806f09097e3307fea1067ceadc70e0b7705de5236e6b2ad76e92b1ce0fd249630cd3456ee5647dccad5b463b5b37136d3737c131ff098e99869d55dfc629709f4681df8454e05c0efc130d7893dbc381dfce69ec539dc6ca6a068468be9dbd83e3f119b7069332267a5ef27412f8870ec348bf9393be5f275dba0df84231130b996f8293270c9fbb383e07747c8e43da68ed6cb6c2a635def80fab93ff711c3ed771a8a8d1893f978269e66e8ed5173a566590665a3a2b57f7f515b659b8653a0c8b7b381607752c4ed2e826139b8269e75ece557ca973e477867315f771e05f69c0678704bf9f03ff5a377886047f809b0a7e13c154709e0e5c0e2ddf5a86a7d01ed421d7b183df59f97ff53826849efac3bc80f99c80ef3502ac020878881370482320510001795ccbfea069d946215b760167933feae65cf785b3c9873917f293ce85640be15965657bde70b9bff13bd171abee17c7cd9c38772273560136801fe1aafeb3a6eaef84acfa42aed17e89a03b3eca31ff55c3fcaefbc3317f4c072e7bf06f41d6e53e5f0f3dcea9e470042a59c4a9e4778d4a368454c9624e257f18aae4094e257f46a092259c4afed2a824fb81702a59ca81ffad019f1e127c1907fe8f06bcf9bc70e04f723aff37029d3fc5598a1cbb4c2c6539a7122b965f252343aae4690e3ca6012ff56038f0673895c40d55b2826bc844ccbc2157722a496a54d23ca44a56712ac93254c9b39c4a0a45a092e7389514d6a864effc702a59cd8117d180377c281cf81a0ebca806bc7f48f0b51c78310df8f490e0eb38f0e21af08521c1d77366788ca1193ecfb12ea161fd7348d62f70e025758d99170efc45ee0550a9202af17901b481637dacae2143b2dec88197d6801f0a09be89b392e30cad6433075cc610780ba78eb21a75c81ff80ea38ead1cf8f1bab13224f8360ebc9c063c3b24f8760ebcbc06bc4748f01ddc52ef8418b32beddd39cb16939de45121f7545fe22a75a2a652534356ea650ebc82067c5e48f05774e07233af62ccfccdedab1cf8497af01661c05fe3d45249a3961d21d5b2939bc2548e600af33aa796ec0874fe860e5c5ec5572596ff65a073155fd55841aee27b93eb6a27ebba5a55a1bb10347d021befb87447fb2d9dc86e4b984ef9166720d53406b2fce17006f236a7e6ea9c9a6b1448cdef7095a8a91bb11f0957897739f05aba2e1412fc3d0ebcb6067c5748f0f739f03abae9d7c270e0bb38d3aeab336d39dd4a1b7236d93ceceed93ca4e6dccc33e21464fb7037a7887aba797f48457cc081d7d7801f0c09be87036fa05b6b3d1a0e7c2f079ea301bf3224f8871c78430df8cd21c13fe2c04fd18df621c13fe6c01b69c0978604dfc78137d6801f0e09fe0907de44035ef1b170e09f72e0a76ac05b8404ff8c033f4d03fe4d48f0fddc3ce574cd3c65a808374f39c0bd6f3b2366f8beed73cec336d5795879a80bdee6cab3ef1738d1f22c49184ff90527b3994e26be1d5a2fbb60ef8d0f72d670a6c61aca2c0e670d5f72e0cd755e2f24f8571cf8591af0ae4bc2817fcdd9f1d9baf976a97076fc0dc7fc1cdd96e1d3e1987fcb81b7d06dd1ae0807fe1db711d4d27023e87b4edfad2258df1ce2b6545a1b6ea9fcc0e9ba8daef33c174ed73f72e06d35e0678404ff89036fa7012fbf361cf8cf1cf8b9ba813724f82f1c787bdd347e5d38f05f39f00e1af0a1ebc381ffc6819fa7db8f0c097e98033f5f03def1c570e0bf73e01d35e0f5368403ff8303efa4012fbe311cf89f1c78670df8bd21c1ffe2c0bb68c0ab6d0a07feb70e5cfed26b571bbc0801cfd579c4b8c582ffc3815fa001ef1912fc5f0d784e733b685d258ee469f59eeae6fd69a2ad933acaf9354b8939c9912891f151c41e027fe58f97c9f0795d3d67f9cca1ba67daddbc931cbefea7dfbbc57c8e5669cfaa778fc9b3ea2d85f83f5037eeecbb88694c49b6760f4d75d9a36ab2a68c004b2740ee6cf5e476b67a1568672ba6932367cebd75f371f75bd0d6ceb7a7eeb9df494e62413f8889eba44b5fd247e34bfeda12ce972438f0beba35fcd670e0490efc42dda64c48f02cae51fae91ac5fd2cd8fc73d5425c95faeba601dbc355a930077e91067c7648f0225c67b998eb2c030ad4598a72720672720615484e314e598335ca6af24a386515e78c6b489075818ffd1ca303762eee886035538253c930dd7bdc57c3a9a424073e5c03fe6a48f0521cf8080d789bd7c2811fcb818fd480af0f095e9ab394518696729c0e58eef55c12c1abb7329c4a2ed5edc5ef0ca792b21cf868dd8ba090e0c773e06334e077ed0e075e8e6bccb1ba31457ef2d3d9f9d5f8f48b11f77795f16bfa09a2e09fdb94e7bcc5388db72815d25b9cc06972bcee24c0de709a3c91d3e465dc16a69ca3e6dada9451eeb82c5f43b9af99b2ed196b76017e07ab0257c509baedb48fc255b122079eab01aff57138f09338fd4dd4e9afb2d612bd5f03e4a20f8ab29ddfeb19ad6642613fcbabc4719bc4f512f9bb37defbe79ae57b779efe3c4efe3675183e95393e93757ce45b015e7618b9d99c014cd118c0864fc21940151db89c464de5a651d30a348daaca29ef72ae31f31f8ec02b9b36f61ff92b67230af841fbc95cbdafe0ea7d6581ea5d4d27476e435fa593237f9ff1ea58817f9fb13a57a96bb84a4d2f50a56a708d79adae31e1874d9b44f8c3a635390633fc5e5d3589f8874d6b712c66fae941fed8f210f57b62ee1e49c119d4e6185ca763e0fda165b9b335d1d96949330923bb0e27fb7aee95e5e49477ee2ad23752849159979379834ea6dceca96fff1f46423d4ec22c9d841248a397da11d30cdab23e277936bffde34a9e9c8a2eb8f4069cf439dce8462da960eb8f1c4eee8d3ab9eeeda1057de1dd901b496fd28ca43d0e841b494fe12a7233d715bd537893efe51b71b26fe136a9f0a40d7f031e466a634eeaad3aa94589d482dc20d78493781b6f2c63d1fd1a61649dcac99acbb7279c796ba73ae030c7bdba2f18c2c83e8d937d3be784c62beb71ef2dc133a5dc50924fe724dfc149f65a710f51d08b8bcfe024dfc94b9ee4b4ac3b9c175c72534ef25d5ceff14a2ed8dd8bcd38a9ff0b26b56037059ec949bd9b73f35ea9f8c6cb30729b7372efe17c85576ef88b94cfe224decb4dce68ab9a6ee29fcd31b84fc7e0d87c0c745b1561e49fc3c9bf9ff39605ff29f0169cac07825973afd4864218a92db9017d9e66402f7c28dc80de4a072efdfc8341b65c7d7e47a6b50e58de77373f08707b1eb88d0e58be547f2896ffa5ba4330c44bf5b63a7019ccb3132a10f03d4f5ed1a5c359779e904f409267df8e33a1057e336f6940c3edc80162a2babe461a51b841ef5c9d64e9fb1e8e191eeb6caf439653f7478234b5cf71b50e3ae0e3ede0c220c06d79e0f338c68f1a323e9f53f263a64aeec8e9e271435d74e274b1c850179d395d2c36d545174e174f18eaa22ba78b2586bab880d3c552535d74e374b1cc5017dd395d3c69a88b1e9c2e9e32d5454f4e17cb0d75d18bd3c5d386bae8cde9e219535df4e174b1c250177d395dac34d4c5859c2e5699eaa21fa78b670d75d19fd3c57386bab888d3c56a535d5ccc515e634879800e5812591b04d8e7f8f7404e17eb4c753148839c73961db44689a37184b287b3a332d62e3ddcd9c91913f1d1c8f5ba96d01e897c3e268f44d617fc914873aedc51c7c1baf696adf242104392cc19e0211cf08b86c043757674b6b4a34b8e8a1d9dabf6e5ba88c1e212e1aeeea3b5a40d4134f626dff38671cba08d41807d5639c339e04d86c023746d7c8e6ce30147b48d7bd968ad9d1c6dc4f936c506b6fc31ea157b03b21f28f7ad646f94ede6968352feadb939b05fd8e2f885939d9c51f0e27cc0486e94da6a384a8dd235630bd98c97ff27cd083f1904686354287d0c60b85d2fc0eb90ca9fbe14ba9bd3a187a9ab6d2720a572e8fe8dbf2d70e36f771aff6cd4f847a3369cc95ca23319796c6f47109319cdef095daa03963b332fc5cc8f998ee6c05f8e007c0c37737ac574e63496dbdd7bd570776f9c0e58f6e7d78200fb1c1b19cf01ef3404be8c037edd107802d77a6f98b65e2e87fca629f2440ef92d53e4491cf2dba6c893b92ef84e045d700a47fb5d53da53b92ef89e61179ca60396af10de0f025c8a07be9c53f4ae08147d05a78edd86eab892ebdf1f18f6efab383def31d4f3d59c9ef746a0e76b38757c68a88ee91cf04786c0d7727afed850cf33383def8b40cf3339757c62a88eeb38e04f0d81afe7f4fc99a19e6fe0f4bc3f023dcfe2d471c0501db339cfffb9a9e79fc3e9e38b08f47123a78f8386fab88903fed210f8664e1d5f45a08e5b38f0af2300bf95dbacf8c670b3e236cef6be35b5bdb99c3ebe8b401fb77326f2bda189dcc1011f3204be9353c70f11a8e32e0efcc708c0ffc7d9de4f86b67737c7fae70858dfc381ff1201f8bd1cf8af1180dfc781ff1601f8fd3a70b95173d8709ff601ce4a7e37b492799c3afe88401d0feac0e58fd3fc1984f54e1e78be6ef7505e1c610d174763a3ffc86df0ff157857f06f675750fee6d09160c9edf63da46b62d912ff0469e2bff9773979dcd0f9afe9d0b98043167143e4873964cb14f9110e39668abc907300f17804bf51c4d14e98d27e8ca39d8c80f6e31ced2c53da8bb8dd914271b3dd91c5dca2af7010609f45df139ca28b44a0e8259c3a8a1aaa632937d12c1604d867a2b98cd37371433d3fc9e9f99808f4fc14a78e1286ea58ce019734047e9ad37329433d3fc3e9f9d808f4bc825347694375ace4808f33045ec5e9b98ca19e9fe5f45c36023d3fc7a9e3784375ace658978b80f51a0ebc7c04e06bb915c2094154e2b34258c7ad694e0c02ecb3a659cf31ae60c8f8790eb8a221f00bdcbce024d379c18b1c722553e40d9cd1558ec0e83672b4b34d696fe290ab98226fe690ab9a226fe1ecee6443bbdbca01573304dec6e9a2baa92eb67366572302b3dbc181d78c00fc254e27b54c75f2b20e597ee3553b4833fa7ce3f50a378dae63388d7e95dbc0a91b04d86703e7354ec9f54c95bc9343ae6f8afc3ad70b1b18f6c2373873ce89c09cdfe486ef8686c3f75b9c3a4e3154c7dbdce4ae91e1e4ee1d8e716343c6ef72c04d0c81dfe35471aaa12adee7189f66c8781767cba74760cbbb39f0332200ff80731c4d4d1dc71eceef3733f4fb7b39bf7fa6a1dfff90f3fbcd0dfdfe479c92cf3255f2c71cf2d9a6c8fbb8be728e615ff98433e7161198f3a79cdf6f69e8f73fe3d4d1ca501dfb3967d7dad0d91de018b73164fc3907dcd610f80b4e15ed0c557190637cae21e32f395b6e1f812d7fc581778800fc6bce719c67ea38bee1fcfef9867eff5bceef7734f4fbdf717ebf93a1dfff9e53726753251fe290bb9822ffc0f595ae867de547ce9c2f88c09c7fe2fc7e3743bfff33a78eee86eaf88573763d0c9dddaf1ce39e868c7fe3807b19021fe654d1db5015bf738cfb1832fe83eb7e7d4dbbdf9f1cf285a6c87f71fdaf5f04fdef6f4ed3fd0d35fd0f077c9121f0bf9c3a2e8e401df24c85167c4004e0960e5c9ac840531389e990e5d03dc870e88eeb80e5d03dd870e84ee880e5d03dc470e84eea80a5390d35b4bb2c1db07476c30c9d5d21ce2c869b9a45618ef20843ca45b86e3232826e5294031f150178314ed997982abb3847fbd208681fa30397efbd471bbef72ea1033ed50e8e0902fc2f0f5c9253c7d808d4518a6bc571a6ad782c477b7c04b44b73b42f33a57d1c477b4204b4cb7036926b682365397d4c34d5c7f19c3e2645a08f721cf8e408c0cb733a9962aa931338da5323a07d22073e2d02f00a1cf8e5118057e4c0af8800fc240efcca08c02b71a67295a9a954e690af3645cee62694d7184e28ab7013cae98613caaa3a607964fcda20c03e47c64fe68067180257e3a67d330da77dd5b9b9f5758673eb1adcfae57ac3f54b4dce906f3035e45a1cf22c53e4da9c25cf36b4e43a1cf01c43e0ba9c2e6e34d5453d0ef92653e4fa1cf2cda6c80d38e45b4c917338e45b4d911b72c8b799229fc221cf35456ea441ce696507ad29e2687c55c5ffc26f1b0753febcc328e7e700c6a91b8ba2fbeeea765b1771a2cc9cd65217670afe0bab23cb38a9fff0eb8eb8fcf0eb68d2d29b53636eaa76670453b5261cf85d11809fca0dcbff331c964fd301cb1e797710609fbb394fd701cb5d8a7b8200fbdcd37686ce27b491fde0685dcd89cdb7916dc0d1f6fb7b75fad276bbfbe299afe634e5ca75ada6dc1870bfe918d08c437ec014f94c0e799e297273ce173c18812f388ba33ddf94f6d91ced8722a07d8e0ebcb11dcc0be2103ee1815b702e6c81a10b6bc9a9e3e108d4d14a072e7fa9ef91b8f90f0fb7e6982f8c80791b8ef9a311306fabf3ee6da5771f7154bc7b2fe17e9d2e3d6193883dfb63ba195d3b59d7ba3e3edc8c51b66c10f217338b7bdc194e8e1c156e2869c7d9d7a208eceb5c0e7c7104e0ed39f0272200efc0812f8900fc3c1db8ec764b3536dab05d7e1b528644454a1b62449ecff9a86511f8a88edcecf349c3d967271db09c7d3e1504f83e5e1d9db9516cb9e128d6859b2e3c6d3a5de8aa436e6a079fb1138ecd883c8dbf58f7028ef30a53cedd38e495a6c8dd39e455a6c83d38e4674d917b72c8cf9922f7e27af7ea087a776f8ef61a53da7d38e4b5a6c87d39e475a6c81772aa5e1f81aafb71b49f37a5dd9f437ec114f9220ef94553e48b39e40da6c803b846dc1841230ee4c03745003e8803df1c01f8600e7c4b04e043b8d6dc6ada9a4375c8b5ede0b62083f93c1e78980e58be50dc1e04d8e785e2700e788721f0084ec92f992a7924671b2f47601ba374e0f287a15e09a28fb63cf0259c69bc6a681a97728a7ecd54d1a33945ef8c40d163b899faeb8633f5b19c3ede30d5c7380ef94d53e4f19ca6df8a40d39771b4df36a53d81437ec714399753c8bb1128642247fb3d53da9338e4f74d9127730ad9158142a670b4779bd29eca217f608a3c8d53c89e08147239477baf29ed2b38e40f4d91afe4903f3245be8a43fed814f96aae11f745d088d770e09f44003e9d03ff3402f06b39f0cf22009fc181ef8f007c26077e2002f0eb38f0cf2300bf9e03ff2202f01b38f0831180cfe2bae797a6dd73b60eb99e1dfc4ab73b2c5f40cbe39eee5ff9f78497f382e6e8049d6407bf0e3219bc9807be9153fc371128fe266e0afbade114f6666e51f69de1a2ec160ef87b43e05b391b3c646a83b7e990e5f9d11f8250f6393f3a97a3fca329e5db39bbf8c9d02eeee0d6903f1bae21efe456bdbf18ae7aefe218ff6ac8f87f5cebfd66da7a77732ee370042ee31e8ef6efa6b4efe590ff3045be8f53c89f1128e47e8ef65fa6b41fe068ff1d01ed795c17ffc7b08b3fa8039644fe0d02dc93079ecf018b8419f0439c83b68200fb38e83c0e386608bc40072ccf4ac68300fb1caa7c9833b944c2dce41ee158270d592fe4586745c0fa511db8ecb58582b0f679bdfd18c7ba7004ac1fe7745dc450d78b74c0c5ec60d120c02578e0c59c432a1604d8c7213dc1e9b978047a5ec2e9f918433d2fe5f45cc250cfcb383d9734d4f3939c9e4b45a0e7a7383d1f6ba8e7e59c9e4b1beaf9694ecfc719eaf9194ecf6522d0f30a4ecf650df5bc92d3f3f1867a5ec5e9b99ca19e9fe5f45c3e023d3fc7e9f904433dafd60157b6832706011ec403afe1e6b9151286f3dcb59ca22b46a0e8751cf8491180afe7c02b4500fe3c075e3902f017b8d6cc366dcd1739e42aa6c81bb8054055c305c0460ef86443e04ddcdcb19ae1dc7133a7e4eaa64adec2595d8d08ac6e2b075e3302f06d9c4e6a99ea643b47bb7604b47770e07522007f8903af1b01f8cb5cb7a967d86d5ee15ab2be694bbeca516e6048f9358e728e29e59d5c13368ca0095fe7c04f8900fc0d4e278d4c75f22647bb7104b4dfe2c09b4400fe36a793534d75f20e67daa7199af6bb1ce5d34d29bfc7219f618afc3e87dcd4147917a7e666866adecdad63ce345cc77cc0316e6ec8780fa7e4b34c95bc97eb826747d0053fe4965ee7182ebd3ee258b78880f5c71ceb9686acf771ac5b45c0fa131db8730f7d10d63379e04f39db6b636a7b9f71c86d4d91f76b9073ceb58347e99796bb8b917645dcab2ca2fd3eb49dae752da229e753cd7313997e69d98425f7a1e601ae8ddb9bb6f1e73a64d9c61d8218bcd40603fc05d7ffcf33ecff07395d9c6faa8b2f39e48ea6c85f71c89d4c91bfe6903b9b227fa34396b7087409d2803eb7087ccb59465743cbf88e637c8121e3ef39c6dd0c191fe218773764fc03c7b88721e31f39c63d0d19ffc431ee65c8f8678e716f43c6bf708cfb1832fe9563dcd790f16f1ce30b0d191fe618f73364fc3bc7b8bf21e33f38bf7991a9dffc93d3c5c586baf88bd3c500435dfccd311e68c8f81f8ef12043c6ff728c071b32964773b48c871832b674c092f15043c6318ef13043c6718ef17043c6098ef10843c6498ef14843c6591ce351868c0be9809d0bf44dbd50610ef95253e4223a64b9fe1e1dc1fabb28073e2602f0621cf8d808c08b730a1f67aaf06338dae323a05d82a37d9929ed923a6479107942904ee37310b9144739d794f2b13a6479287b6210ca6d79e0d29c2e2619eae2381db0dc849d1c04d86713b60cc7788a21e3b29c354f8dc09a8fe7c0a745005e8eb3bbcb4dedae3cd78a5718b6e209dcc075a5e1c07522a7e8ab225074054ed1579b2aba22877c8d29f2493a64f99dcff4209af6f9cea712077cad217065ce366618da4636671b3323b08d2a3a70d92ed70561ed7342a52ac7fafa08589fcce9fa06435d57e358cf8a8075750e7c7604e0353895cc3154494d8ef58d11b0aec581df1401786d4e25371baaa40ec7fa960858d7e5c06f8d00bc1ea792db0c55529f633d3702d60d38f0db2300cfe1547287a14a1aea80e5b5977726ccafbd3c851b79ef321d791be990e5aaff7f41f4e1b3ea6fccb5e2dd11b462134e1ff798eae3540ef95e53e4d374c845ede07d09c89c4121c579f0d3b966bcdfb019cfe0f4f180a93e9a7206322f020369c6e9e341437d9cc9e963bea93e9aeb90e5e7830f05a1ecf3f9e0591c709e21f0d99c9217182af91c8ef1c3868c5b70c08f1802b7e454b1d05015ad74c07227e1d120c03e3b09ad39c68f19326ec3e9f871431db7e580171902b7e354b1d85015e7722eee89085c5c7b8ef51243d61d38d64b23607d1ee73f9799facff339e4274d913b72c84f992277e290979b2277e6909f3645eec2213f638adc95435e618a7c0187bcd214b91b87bcca14b93b87fcac29720f0ef93953e49e3a64b9ddb63a884ff2d96eebc501af3104eecde962ada92efa7094d71952eecb01af3704be90037ede10b81f07fc8221707faef55e346dbd8b74c872f9bf2108659f7d828bb9d1756304a3eb004e1f9b4cf53190a3bd3902da8374e092cc9620caf6d9961ecc19de5643c31bc2016f33041ecab5e076d3161cc6297987a1928773ba78c950172338e0970d8147724a7ec554c9a3b86ef26a04dde412ae055f336cc14b397dec34d5c768ae095f376cc2311cf01b86c063b9167c3382161cc781bf1501f8780efced08c02fd381cb97ecef04d1b7cf4bf6099c51bf6b68d4b99c3ade8b401d13b91ef3be698f99c421ef32459ecc21ef36459ec24d963e309c2c4de5da704f046d388d33e9bd86267d3967d21f1a9af4159c3a3e8a401d5772e6f1b1a9795cc521ef3345be5a872cf7c03e09a2699f3db06b74c0f227c33e4d18fe64d8744e199f992ae35a1db2dc1fdd1f44193efba33338ca074c29cfe4daef73c3f6bb8eeb825f1876c1eb395d1c34d5c50d1cf297a6c8b3b8b9d2578673a5d91cf0d786c073385d7c63aa8b1b39e46f4d916fe290bf3345be9973fbdf47e0f66fd181cb730b8712e6e7166ee598ff1001f3db38e63f46c07c2ec7fca70898dfce81ff1c01f81d1cf82f1180dfc981ff1a01f85d5c0ffacdb407fd8f433e6c8a7cb70e59d6f1f7202ed0e7ba8d7b38ca7f9852be9743fed314f93ece3afe8ac03aeee7c0ff8e00fc010efc9f08c0e771e0ff4600fe20e70545d2dc0bcee798cb3853e60f71e0b108c0f338238f270d8d7c01879c30457e986bca64044df908079e1501f8420d784e7b6927ddc591bcebc48bdcc64e9b24063b38f2ee903176da10e79e90d136dae00cb79814b2e957d1e8c1d1854574e1dc665238296f332997af86997870f7943caa6b22a9c5227ed4683349568c80c73801452312f0386764c52230b2451c78f108c01773aa392622d53cc10928119180259c8092110958ca39be52a68e6f1937121c1bc148f024075e3a02f0a7389d1c67aa93e51ced3211d07e9aa35dd694f6333a64b9a97a7cd26c537505b7d7502e08b0cf5ec34a0eb8bc21f02a4ec927982af9590ef94453e4e73865543054c66a0eb8a221f01a0ef82443e0b51c702543e0751c706543e0f51c70b621f0f39cbd5531b5b71774c8f29bf1aa4128b7e5815fd401cb73d3270701f63937bd8103ae6608bc9153727553256fd221b7b183358250963fa7c5006fe628d734a5bc8543ae658abc9543ae6d8abc4d872cf3d709a2669f770edb39e0ba86c03b38e07a86c02f719397fac9082e22e75ab081690bbec2d1ce8980f6ab1c78c308c05fe3a65da70469499f69d74e1db07c63df2808b0cfabfdd73975348e401d6f7026d2c4d444dee4904f35457e8b1bbd4f331cbddfe6804f37047e87b38d330c6de35dce369a46601bef71e0cd22007f9f53c999862ad9c5b16e1e01ebdd3a70e914ce0ac2dae7dee60f38d66747c07a0fa7eb730c75bd9763dd2202d61f72ba6e69a8eb8f38d6ad2260fd31a7ebd686badec7b16e1301eb4f385db735d4f5a71ceb7611b0fe8cd3f5b986badecfb16e1f01eb031ceb0e86ac3fd7014b22e70501f679c3fa0537949f6f3a941fe4903b9a227fa9433ecd0e760aa28c387f2ced2b0eb8b321f0d79c2eba98eae21b0eb9ab29f2b7dc6cfa8220caf0994d7fc701773304fe9eebdadd23e8da8738f01e1180ffc0b5624fd356fc91731cbd0c1dc74f1ce5dea6947fd62137b7837decb893349ad66abb3b3f65ff85a3ded794faafdc5ec28541b4edb397f01b677dfd22b0bec31c78ff08c07fe7c02f8a00fc0fae252f366dc93fb91dce01415ad26787f32f6e8a303008b0df15dc9ca20745a0e87f38450f3655f4bf1cf210536479f647bbe41f1a44d33e4b7e8b031e66081cd301cb261f6e681b710e7884217082031e69089cd4014b6b1e15813567e9c09d3bb34d6dae1047fbd2086817e6c04747005e84031f13017851ce4cc61a9a49318ef5b8085817d781cbf9e7f820ac7d56cec770ac2f8b8075094ed7130c755d92639d1b01eb529cae271aeafa588ef5a4085897e6743dd950d7c771aca744c0ba0ca7eba986ba2ecbb19e1601ebe3395d5f6ea8eb721ceb2b22605d9e637da521eb1338d65745c0fa441db81cf6ae0ec2da671d5381637d4d04ac2b72e0d323003f8903bf3602f04a3a7039219991349c9054e668cf8c80763647fb3a53da5538dad74740bb2a077e4304e027733a9965aa936a1cedd911d0aece81cf8900bc860ebc981dbc31883b29c103d7e458df1401eb5a5c4bde6cda92b539daff5f7b67011fc5f1feffc15a5a684ba943bdb4a4b44592607512b40d8542a05e1a92105202499360956fdddddddddddddddd4bddddf5bf337bcb7eeeb293dce5eeb37926bf7f791572b9bdb999f73e3bf2e8b139e8763f5be3c7e5a0f18d6c77f2f82cefe4c6b65e9f90835e6f62bb9327667b27fbdbba7d520eba3dc0d6f8c939687ca0ed4e9e92e59d1c64ebf5a939e875beed4e9e96ed9d2cb075fbf41c74bbd0d6f81939687cb08dc999d9321962ebf65939e8f6505bb7cfceb6dbc3a25ad65be973d211ed66f6dcc36d3ccecd018f4d6d3ccecb96c766361ee767c963731b8f0b72c0630b1b8f0bb3e5b1a58dc74559f2d8cac6e3e21cf0d8dac6e3926c798cb0f1b8344b1e45361e97e58047b18dc7e5d9f21869e37145963c46d9785c99031ea36d3caeca96c7181b8fabb3e431d6c6e39a1cf01867e3716db63cb6b1b57c5db62d6f6b6bf9fa6c5b2eb1b57c43b62d8f8f6a59bb73dc988e7434e3ceb15d54c3dacc76533a0d3763669b606bf8e62c1b9e18d5b046774b3a0d37a336dbded6e35bb3ecf1245bc3b765d9f0649bbcdd9eadbc95da5abe23db96a7d8a6a33b73301d4db5357e570e1adfc1d6f8dd39687c475be3f7e4a0f19d6c6bcbbd59ae2d3bdb1abe2fcb8677b1c9dffdd9cadfaeb62e3f90659777b375f9c16cbbbcbbadcb0f65d9e569b62e3f9c6d97f7b075f9912cbb5c66ebf2a3d97679baade5c7b26db93caae57cefe5e3e9c078cede7085ade127b26cb832a2e101e3bc971df650cc2c2b53bdd68acd1523d5b6de7b65def5ba4dfff713bd16cbbcefd6ed8d30dfa0739ef8ef257fa2f9fc2b4f46d1e99042c7e45d79aa8bcebbd2c75c999b9ed932b2ccb049dfd3d94a5f95ed517c26cb47716654c33a0be8b3e934dc4c16d06a5bc3cf65d9f09e3614cf67896296edeebd90edddabb1b5fc62b62dcfb6c178294b18736cb7efe52c6f5fadadc7af64d9e3baa886f5e6ebd52e39c8676eebf56b59f6baded6ebd773d0eb065bafdfc8b2d78db65ebf99835ecfb5f5faad2c7b3dcff618be9ded6338dfd6e577b2ecf282a886fb792fdfed928187ff45f62f5868ebf97b59f67c6f9b88bc9f0311d9c7d6eb0fb2ecf5beb65e2fca41aff7b3c9df87d9cadfff6c3c3eca92c7feb665e0e32c9781036c2c3ec996c58136169f66c9e2201b8bcfb26471b0adc79f67d9e3436c90bfc816f2a1b62e7f9965970fb375f9ab6cbb7cb8adcb5f67d9e5236c5dfe26db2e1f69ebf2b75976f928db34f75d0ea6b9a36dbdfe3ecb5e1f13d5b0cee8f84397ec333a1e6b43f2630e901c676bfca71c347ebc8df7cf59f23ec1d6f02f59367ca2ed89f935db27e6a4a89657f55efe964e97c7da1b3e39aa61fdf277efafdee96ec4bad8bfe0145bcfffc8b2e7a7da64efcf1cc8de69b6c6ffca41e3a7dbc4e4ef6cc5e48ca896f552fe4f3ab09b59cacf8c6a585728f9379d869ba95072968dc57fd9b2383baae5c1fa5e2d914697ffb3377c8e4d363a2c91833ce6361e1d97c892c779512d6b7d6ca7747834a38f3ddf369d76f61aee9bd270876354a0af9ca22a8c9ed5d7c9ce363f8f33da5aada99ce17dc4d7c98e5b7ce52835cffb8dbe6292f7af7eb7dafca65ef557d3bc3f93cdbb155e8b738d6655b71b7e66a4f76fa009ad50a3bd4f95a9d9e61bfccf86da585f075c6d74c0c9eff8fd2bf04638ad99518cf2fe9fab74beebf0db4b8d0e3a6833b9d5a9dea7aabd7632596b2eb051ef12455d1b74a778df5ded5dbbd0f4afcaf4a5524d50d3d59e8666638262adaaf3fe1ea7b49ebcc668c6f5a7f43b2db7903a32ad41af35baf632efda4cc677a16d7c4b448d6f33ebf8c624ee72d3715679af748f1b8d24ccf1fa3cc3e8e0673733d6d226d76632a68b6c635a326a4c43ad636ada8be411d579efd627e48e35968b6d63e91a35964dad63092c32b5e6d59c36bc3b97d846b454d488366ff588aa2224d23ea628f9cd645497da46b574d4a8fa65304f04e39993e86173b368263dbeccd6e36e513dde5229ebb7fafd1c9d9085b288f9c93ed33737abb5766497db46d63d6a64db5aefc57833964ad3077df94463b1ac33bfd1d71679bfabf57a3e2b41a0dcac85f5e667bba4a5df6a2663bec236e665a2c63c24e56e86ebed08af17f566f56e3a26db0a6d7b276c2b93915c691bc9b2b61529bd914c4e3c47f671a437bed6ec22aeb28d69b9a8318d4e5b225b77b7326d3b93915e6d1b698fa8916e9172f77036c8eefe3537afb4e60e5e631bd7f251e31ad9ccb870f7374aede57da0ccecfff4fd48ed69f228d21d5feb7783d7da46d9336a94f919dcbd312dde3dfbf83219c175b611ac60bb4fb63d4ea55ae0fd76aed9e1e5f239b3b59cc928afb78d72c5a8518e597c16f4fd500acca9a3ccec2cfcdf87af7535a1f95e3ff51a54e63d23e1a92f7575cba6c54cc67a836dac2b458d757833634d26afef95debf6636bae8363219cf8db6f1ac6cdbffb6663c0d89e74d3f77730c737f761fef49619d99ebeb224ee4ad9f396eb28d6a95a851dd9a13894c7d27fc4cea1d0c3caf025d82ae8d95ee3ad89c06a2b57a944ce5ab39891cd722b14ceee3cdb6fbb8aaedbc19c5798a6a34be7fd5e65fdfe36f9ad17634243eaed7dfe657bb5c49e62db611ad1635a26119ac6999ef8da35bcb6434b7da46d3cba68f8aee19ee424acc1d6af0646fa6a19bfd1eb9f577eb36dbf87a478d6fac75fd6eaa1dc8e51ade5ceb998cf676db68574f4736f17c9cbd6c46b796c968eeb08d668da8d16c95966c8ef0e6898ac43c529b13d90cdfc9646c77dac6b6663ada92e4e701c737c5e875eabd6bb7f3dead326b4ff44893dbc8dd1377976d646b458d6cfd9491a5ca5da0ad2a31cf4595f7f3cc1cdd81bb6dfd5cdba6d56959bac698553658ef83f96f82f77378326bcbd9f01edb98d7891a737133f343ae7474e1fdce95b6ee5edb18d78d1ae360eb8cafed4ed3bd8b82b1967863adf2aea837fab5a63361ae3504f7d9c6b15e3a1a824ce4b32d25f27edb28fb448d72a07594d9ea075a37873c60ebfdfa51bd9f6c95b54cf439e958f3e2b4f83d6863b0413a3a9ee6f61c99dec3d6ce180fd946d0379d27ade9ac989e2ece3e3f26bf93abfbf4b06d947951a32c4a6b3e99ac74a568dfd657dee67baa476c23dc301d5d7173929899aeb8b9fbd79a95e051dbb8fab5fe8cd69274c6b9063c661bdf46e9ecc4389643b64df171db98378e1a73a5e27adf3426ac865509ef9aa9e60ca1f5557e1df8dcd85f5b23fb4fd8386d12c5690a9993dd4ba97942d97378d2c6a17f14871ddbf819613f3d4fd9680cb0d93fd359b1c7995d92ac55fb69db4807468d74545a73ff78efe21ab35a079e62762d415c6bf733b6710e4ae7649aba5e179b9136bd7b78da4ce7f7b9b5da3f6b1b637e3aeb78d331866739dd4f7d9d96aef288f9bad4fbb9cefc3ebdd1b54e5ff79c6d7c05364b5473e3f3d7a5f003e9dbb2737bd79eb78daa306a54bbe458326dcf5fa6d7e796c90b362683a3988cb79e7b2725d6545f1b8196aa64ed5f8559abcbcdfc5aa7424d74a6ad8e8c68279371bf681bf790a871efd6ea7197e7788cad6927132e2fd9b80cb569715ac705e7bcdcadb12fdb7a3f2caaf783b296e6f9e679cb9d26fb155bff87db3430d9f57fa6d27be32aefdfe6cec4998ce055db0836cd6c3e49b5b5e34a923ca2e6f775e978dae4621e7dcd36eecd6c3a99ccc73d2e8df3096fa578dd36c2cda346d8bfd5b2a9dff79ffd861cdd9b376c3ddfc2a64d4a476af2bdf939f9699a6ea25bb47f6e53f94ab7c54cc6f5a66d5c5b468d6b67c53b51fbfadd6c340fb9f1f17bcb4664ab7434d8c566acfeb802ed7da9f7bbf4bc3672337fbe6d1bc1d651232848730493139ca3ee43735af8f053998ce11ddb1846448d61baf5799b9a20abf73d852d782f248f30b7efd89edee4fe6542e85d1ba1a2284225ad5a2db077ad59239347978b79f83ddba88ba3469d97965c14a4ccc10b7226c5efdb7a3b3277bd8dd24ab5aeb71fd87a3b2a77bddd3b67bd5d64ebede8a8de6ebd78e56a8d8f63f218269995cdd79ab1d6e50f6da31b938e4ed31e0fdab24e33eea8808f6c231d1b35d2c266ee6326bebdd55ecfb5875daef6871fdb46312e6a1403d25c738bbc6ba24eb7cdd9ddfc4f64d2f74f6c7ddfc67607ec773e5bab7debe5e853db28b64dc73fb0f9516466f16dde97ae35d2f5996d6c25367d78cbe7a6f06908e6b506e301a4dfa968b22b686866a6cb4d6cd7e7b6318e8f1ae3aed631a245ce7e4eccadbf6e66df9809952f6c54b68ba2b24d5a6b727e6254b964d07cfb998cf84bdb8827a4e7b51cee2672e1b51cd55a26a3f9ca369a89b68887f467a5ccc7636b2f93117d6d1bd1f6999d3ba22426fd71e5423e3319f537b6514fca2ceb837dd4e10eb9d2e8407863f9d63696c951639990d59cd2f2ca997edbb95849bfb38dbd343daf30fbec92a957985d9bd29a717d6f1bd794cc74c7e9ad65c9123b5ba5c6b4a5bb53c864843fd84638356a841b34b973a95e1ebc58821f6d3ddd21177a7c7f479d7c3f5ad28ba67342cd64843fd946b8a3ed29b2c74b4e36bb4e3c9da5e6acf0f5a7235b1c65f677ee67dbb8764a27cf857fbf66264631def4acad3c687eb18d64e7a8914ccaf00ef973dd1873b29e6e9a695e1e5b9eef9bff7c6b66c45f6d0476e1cf88dae2313761b328f27e9ae1fda94c9cac7277e2fdcd36c25da346b85d4e46d890f50873716f7fb78d7c379b8523931936f93cecb3b0cfa2f8746432863f6c63d8dd9679a0f9f54c473f6f67b492358918b3d9c6e3a325afc55c49e39fb6f14c4b67ee6c3a1efd9b32b30234a81d0cf7a6eb3367247fd946b24766fbe3686d4b8362695b72f164fd6d1b7b597af13bf6fd71e6f13badb30bfc631bc1745b8c77cb3eb2a931ec726238ffb58db63c9dfb3505fa94edfdc2b63219c17fb61154649a15c8ef77785f9a6620e15830742edac81154daa21232cde2196db59116fbd7c1c661461487e316ef39db3687ec64d342adb93e932cb2c927f8b6cd23dbd146be2a1d7ff9e8392f1d5b619c335d27db1867a6131b9ca985adf92724731b5b675befabb3e97dcb76c0dc9c26bbd87abf6754ef37b2ce70cd9d9972ed07bb84adcfb3a2fabc71abfa9c7bdfd7256dbdae492f27433827e1b33cd2cc8fdae61d1dd793be17532e76685d6d639c6dcb2f97ce18d3cb66d0ba91b67ed65aca36d63951631d97e6583389d98af7de2e6d1b6f6d3abe04b6796e24681b9a1f5ff27bf8b94c46d1cd368a3a9b9fb25d0f38c9f4614e845ea4b951b5b6e7dd6d3ddfcb16bd60efb9cec4ad7b5eaea2632c18fd5fc6d6ff7a8ef76d736368dd0cbeac6d040d99798aa7ab894b67ddccc51e7339dbb81a6d39aab21b577a6b6b2e46d6c336b2b9cd479547e9cac79833749dd76b3d2b0799098b123be8746d3199c767e582c3f2360ef3a238540be5906edecdec79f5b4f19a1fc56b5dd592e622b0ec05d1b9c93d0c7e9f490f57b0f570413a79e5826fcc245348746cb16d4caddf57ad681bd9425bc68cdcd93ee67a63a95041c6db5af3896cbdc3a658dacc564657b271dadbe6259d3d271c0b77e65ed936ba7da246b7534e465715b31464c263151b8f7d33b38be5ea6eb7e69eae6a1bc37e5163d823ad7d4674945954558cf4ed2ecdb5c193f8d56c74fe1745a754249dec29f4b251d8df16b5989b1a2c7263877bdb881c908ba766722c72c17b6a56b7d13930174f4d3c74b2a7b0868dc241b6cc6ad9f90405369c2a15785064673b68cd98d7b48df9609bff7c76631eadfc68a3b6f3045dcb36e24332f35e68dddc18eda96bb7a2e5f66eaf6d1bfba136afb75c8edd7eefd3b522664f601d1b81c36c19c2328f0a9630ce756de33c3c337ffce67c6cd391e55c680cd7b38de5085b8c48e66349f79ee5c60ad0c736a2235baf03cd2c5e2dfd35379371ad6f1bd751dcb95582cff706b6b11f9d9e65323acb624b15189a9b519a93dbd66592ec6b1be3319965ae8ace169f898f416be6c43c5bef8fb5f90347ed75b633b2365fe9c89b594977cc97c20926a6ba799fd8a87aa7fa6afbde6ae2628f9c7a4f26eabc763219f986b6911f1735f24ceaa3fa994f722f69fd6c3d3e3e9d6896a88a1fac9e6e64ebe909513deda39af72d62f572635b2f4f8ceae5faaa255d3cab9f9bd8fa79523afd6cea0fc0ea677f5b3f4fceec896a39deb169b695d6eda206d87a7c4aae7bdc9c1f5c263d1e68ebf1a9513db6d78bb0d5aaf6e7eba6ef3698fe4e54c9f5c56df61a6e8daa413606a7453168294becb8c46e7181f744cf68322a5b96d46c32702de9fde9d0a19bf7e32873a5aeb534d1acdd3ee9015aa560760afe3ad77fb18f68ff242fd1f0f7fadb677b3dd2f37ba90a329f6dacd66ea185d33d604b7454fe7f7d3b68d88d89dbd861460a37ff9335a6e5b05283b6d286151db5ddb6bfb773a9369fdac3bb57bb787f5a1a4594dfaefe6dd4e85a1ed36ede1f7d95f69e2d374fa4b63b4ef72466c9c48882b63cd25a61d5ee467a86beab7989bbda71800ea737fe95ad91a6967b71a6feb64ed132b44a13b2b8b644f5dd6f60bbc45eb0c3f2de8b69806d4ee2e8536b9a1c9798665afc567c5aa3be7513d3403083b5d81c862d4435b79a1135ff9852affc30903edd955ab24bc781fa6e9cc544b6ba41364d0d5c3cbb213ab4bc8d353bc10a23e7f55ea3f94e801c382004793613e49ade8b60f92e3687df60e91ba11acc77680a9316bb514e483891d59b43581aa31700b370bb10e6394c98bd92a432c81438c9fba924c99f2e352ed405881f4c08219e2bf3d11ee404c82b3608419ec704b94a12c8284d998b0ff3156785f8ce67e25b2e099fdeeceb2e542536431a9b0bb8beef15e2ba80896b0583cb8f500bf20c96283fbfa0ae7f569ed809363881ed986d436c17c6b7648c69574bc6d7b0ee5ec496bd601393ba6dae4ef864eeed0cb62b60137d3113db8a49b257643e58e1499fbf18d426a99e5d003770eb10dc2571acac83609fe7feca3af19c10dfa54c7caba9a6dbe4626fce2b757ec69b382944781913e11206a1feb89f09c405389de1f1bc9c09a7a7c2336d9949f6e23f963a15cc086f86f3cdca2e40eb3e3e8476051b5aea43195a6b271b496b7464267b655108ed4a26b495ad92a68dc595267182ee7e1078e702bc89207157b1b71fd1aaa7c9aadcfcac5f8d7646f9f90680bb9a096e5515a52f9e6094dab506a43e6a152702bdab9c593dbb9e1802bc860970dd4880c526b252fb16a192096531d53bc905a879178750af95a9b72b7002e4d7fd4290d7c5b73d0e6cd5ed617b7ccec410e1f54c844b1a841888e6029e176e0df1dcc0c4d3c3e029365b92f1e6619cdbe4217501d8df8f86c06e6402eb6a8069a7db19892f9fe904a055cf0f01ddc404d4dbba2509d549e119c23539fbfdd810e3cd4c8c6b29542cf953bf5f5449bb29cc3313bdfb8aa673ce0b71de129f9eaebd58c0ba9e1de2bb95896f69159874fc62c98d466bb2d009483b9684906ee3dbbdfcdd5a90072130e08c32f3a0bf5f736387760f986c6e675b5783c3bfbba69a0a30d5dc11c7c230b05d2f0c7dce0d71dec9b6bab6a4b7d3c1163a89dcc244d086366abb00f1145043dd159f7f497bb182cd84d5f56e26be6e06df28e3741b5827dcf1f4d48edb01a67be2da8468d79b603d7501d2eab009b997af326a4ee7e6aa2967ecc721c2fb980897499acdf4daea9aab57e97221aafbe3b3afa2e12679fa7701da13f0883e10d786d7ddf3c102733e58b24b4ae3a39b34dedae092cc18dbc36034ee519e2cd699df362a3fa17d52588cb74f92d7f30731ac25af994d425e9a612379691cb5f232f0a0cb6b61a6cc4bc371362f2b27ef6c3e5d90d5a7f3bd4fa77adee465e4469797819f6c9e75ef936755cde4a53d39a75e697793c9cbd8cd21afd507acbc8cbc02f2b20e5fc94b635ececb40c793d76a87ded44fa61f3d92d74a8b61eae7d275c4cbcb42db9fd72ae785bc56c432849f495ffb9bfa3de99c6953bf27bdcf64afcfc9cb81b1202fd2b0959733ff88bc08436c5e5ad6c7bcb4fdd1f25a79f809e393715b10c6150fd4f1c90ffd1f0f1d1ea843871fd610ceefe243f077ca8fb04312f53df723c5e7a81a957eacfd343524b53fab37e9cf2493bc5fdf21fd7dc17e39aa674b25eda89f4b67b0add9556fd8293c843cca57d9d59a8ff810f5a392818b53ee608e62c12c5321ccc7f86e78c9728a0da656f71cd6d4d12977385762e1dc0f64f3714938873b89f361c0f984249c839cc439b76388f3494938f39dc4791fe07c4a12ce022771be07389f9684b3d0499c3d60ee7c4612cec14ee2ec0f389f9584738893382703cee724e11cea24ce72c0f97c1c38abac40b1fb7adf493c627667e1bcbd4388f3054938873989f342c0f9a2249c839dc4b90de07c4912ce422771e603ce9725e11cea24ce8301e72b92700e7112e79e80f3554938073989f36615e27c4d12ce0227712e03d2f9ba249cf94ee27c13a4f38d38bc916d3093731953d5738b680b51e710e69b92603649aaea00ccff01ccb724c16c92c6d201986301e6db92600e7410e66880f90e3ff1b4ef63a1fd3ffc5f3798dfd519ff36fd1b1ac05e2c80cfc11afe2e3bff4f73d298bcbb1cec20ca4bc084f19e1494054ea2ec051acdf7a5a0cc7712e58f20951f484139d849940781542e9282b2d04994d300e58752500e7512e5f380f2232928873889f23a40f9b11494c39d44391c36e69f484139cc4994eb02ca4f9928574aa02c57be3b766324ca21de92338d7958ecc202390ab6429ff1533cd965124bf061413122d43216d43b60cefc9cad04f62332f4259312ced7258644b5f9b969055f1acebe2c9c3a5225c0f9451c0ffb50efff4a13eca2bbaa3bec17bf735db1f10d80fc328e649e76e3042adaf071276a2f7bb0b0de0358bf8aaba68c96c2aa44f0560c3249d356fe06f0bee667adf4e155b79b47fa1dc0f70d7b6ed4ab73adf7169656d7cb8b6ea4d4e00c62d36820976581dc05407e1bc7e6bcc6bba8c6c862734adfa10ecae477b039ff2e0e1bb86d738ecd69980399389764e1dc0ab6e8df3371aea1d28d9c4cdd53ea13b97bfbca9900f607a960873908767700fba354b044b5070dec5400fb9354b0850e829d0c607f960a96b878d1c0ee0a607f910a96e8194703bb1380fd552a58e2699e06761b00fb9b54b044ad280dec5800fbbb54b044bf4e1ad88900f60fa960893e9e34b0e301ec9f6d69b04b3dc8ba77889d0128ff62a2d4aee8a149c4d74a59328ae60edba62c6cfd5488ed6f26b66555980daccce08b4933fa1f0bdddb80ee1f1909a7a236482e1e43cf01fbe6bf71d8915a469becb85dc05c6efee948c2fa12e84dff9388951aa941c37a3860d50b9c38ac839cc4ba2360edc0c41a24c8b569f983915237469d3a90303e0acb544726c660851fd86e56f807005d2726ba206a283d3b1335e89fb6412f87a097ce9260ba68b2ab00985d24c124eae66930cb00e612926012b7ee3498d301e692926012b7403498d30066574930895a4c1acc3d00e65292601275ed34983b01cca525c1745177b92bc0ec260926d1378406b3126076970493e8c14483590b309761c26cd94011466f50ad93c358288b40a7b92c136550352593b45244a0b4d43dab83c56739694089cb100de8da00b48734a0c4ed3b0de84000babc34a0c42d3c0de80800da93ad120e8dbc454a8725e8ca42ed23de6d6d15625c818971dd88553d3dcb654c215bb42a2f2520a92b321167671c76d1f9fb46d848adc444bb94f742977c6bf4dad37ffba5e768c0a6b0800d85c77de5b6dcc4275b255d4c7db615c8de2a71d824b5bb4c18291cbc1d93618d76ac7c0e2472d538cee8da26599b525d3034ebba1da179399cd1578bc3fdc0becbc406635ac10f6661ed0e587bc521a336a8c91b77aaba98974ea54b08b3b7249844c9a4c1ec0330579704937846a7c15c1f60ae210926f17c4e83d91760ae290926d12d8106734380b99624982ee6f3ea0730d7960493e8ca4583b931c05c47124c179359f40798eb4a8249d40dd1600e0098eb49824934fed2600e02987d983083b453f9e624eea7fd715dc5b1371c1fd78fc3f66393c4a685948733a5915670713790c60da40125ce9534a0bb00d0bed28012cfe534a0a301689e34a044ad110d683100dd501a50178bd66e0340fb49034ad41ed1808e03a01b49034a3ca7d3809600d08da501256a916840b705a09b48034a3cafd3809602d0fed28012b549bcc2f40074808cf0e95285593da8c92769993d1eeb1c621d1847dcaf7655986d7c8c623abbd33c8c16c2d97d10135d0f40a71bf11db462c2477ba08701be7c26be3e2a35d3f11c35c3bb7c9a9aea5129f69a1ba9b6f5ba3ecec8655593077bdce2eb89a7a34758f911aac0c5b0200ef5dc60efffa055d79d6686808c16c6e113975e94908ba18047a810e560591b22aade9d367f1e052bf71069405dd4741e0940874a03eaa2a6732e001d260da88b9ace46003a5c1a5017359dfb01d04da5017551d3b92f00dd4c1a5017359d0701d0cda5017551d3790000dd421a5017359d8701d02da5017551d3792800dd2a0e95dcc076a3921b01e7f5ad65c453961a98fa4c3fc334379b7b7ebf97a5472a033dd20826da6ede8b990659857998eb4d8c5015733b442bc9d85585d08ada029a8b752c970468c56dab74f39b72379b4c6f980f47c611c23fd0fc1dfc3bc67b2b08881ea97490f47403b3c8fb6986f7a7d274b4c25c5b6fae756fb52e00c4a3e258ad0bdacd6a5d02e846b765c439ca26b5f64ad72e249457c29e710c13654f8566dcc4d6c018cd5c77c53e1e969db1713b18d86c3d181e9dcf5460d002a497805c08e32462a5d6bea061bd01b6e3db30b106c5e8079a8d5299d76a6017f7ade4313df6340798876111da96bd7eeb045165de97fb1f4a7633700f5d5f98314be2d8fae4b79badcf012075e399e87ab5302b865dc7399178d6a1554ebf02169aede2d84d0e34ee58e5a6033af1ce3873fa8e714ea4b9bd5c05d23981bd9bac37f034b87a35c164d01a63e6c9e926fd983f47d21056b0106e0573e34426c2a0f87cba5af1614eeac44f80877b7b4938dd74a67e16704e9284739093388f87cdf8644938f39dc4f910e02c9584b3c0499cdf01ce299270ba699e5d15e6cea992700e7612e720c0b983249c439cc4b903e0dc5112cea14ee2ac059c3bc5e1dc3230610aabf32e2bf33e5069ded6dd1edf2e141ff7c3d1726726d0de00549b2734ba62a36aab4f004d56bfc56083a429e23600a8bbc461fd19681efc8a249d512c7249d31e5501c25d990875baf079de9b0ddedb23bd5f2de0a60b6f60011bad4260bb3181e5452c34d1ae56faf1d65f53eb7d70920ab54aa90f3a51bb49cbce7e2e2c44bbb7a5534cd8757d5a773131ee2520b9d398285bcafe965a7e9be8fdbb8805734b703cd843124ce26e930673538059260926d1424e833914604e97049318354183990f30cb25c1243a6bd160760198159260125dac69303b01cc4a4930895b231acc0e00738624982e5601fa0fb6ec55926012b31dd060168364ce94049398e980067304c0ac6e4b98c91116d4c79c16637131c0dc53124ce20244837939c09c250926716b44837905c0ac910493b869a7c13c06f20fce8ec3e13a4857b667330a38178b7c9d09dba23952627451419caf461ad7191a5a4d80e338030f7c6d5b0654252b895d2cf8753a38cdd4494159e024ca15e081df4b0aca7c27513e0052592f05e56027512e04a96c9082d2cde288db02ca462928873a89f2714039570aca214ea2bc0450ce9382925abf82867213d857ce9782729893285706940bd8ae5a7eac64a5f9980ea69ae2b55d91f85d89f73bdd380de12816c2012a44b8308eb0d342d55ec24e278397dbde716884f4835aabe61919d41faf000eae4749de0c30f761c2f4f3ff97ab994a9b1d66a9d10964dae3ad3641c53d7c7bc163bc6f1c8921aad2b2e9a04b2bd15383963deb47c0ba5f5baed5d81cb5360a2d23ccf370dafe1f136577959abd2d86079be64add192470ff381eec4053eeafd1e3541886df9ef4e6a7c179e680381eecb05e4af3458bdd4379126cc20f8cc3773d2a2dde24d3191d22a5b7471529468809299b2697c3536e828dd2416dbbd263f7634a78f2560712d62301ebc17118d21abd454a1f1a83c24953bccee82081e0df22ef62bd8ccdf3aeaa35724cb6feacce92d8f560e53f847dc42c6f262acdbd87bd1156ff43db76ff894e0744372d9acbc1f1b04c1d16c7693dbd7993ba99efce827939c8e5e1926012259306f3328079842498c440151acc9301e691926012b7f63498c701cca324c12406f7d1609e09308f96049318dc4783793ac03c46124ca29f300de6a100f35849308907491acc4300e671926012fd8469308f0698c74b82493c87d3601e06304f880366b98ace7a909acdc8c5ea910703cc1325c174b1b6e94900f324195eece353bc3dc80155342785a160e838592ada7c27d1ae001aa553e2d0c4b78c36399eb2803919fcc3aa8d760f603d5522d67c27b1ce06aca749c44a8db1a4619d0a584fe7fb2df956cf7966de9cab6273fba2adfc9b80d9ed8c38dd1bb4fccd573b286d10d6a6b8f6e5de701e48e5994cac2baae677a7c148a927a64e2ca3f03f209d673131aea5a29c6f32d99bbab77d5a1564f46cc9705ddc9bbe09dbfe7324c3256aa56870c743f4fab992e112e75c1adc67615a388f09b75fc4d2e5bbe24c5623d5b65ea7b5dfe86cefdb6a0d5e3d106fbfa77c17b25af86994d21e27fa8ba8c82f62213f1f96b9f3d96134618df4f654eff2181522bca02dd581d81cb9a00e0d6621388c5d280926d1ec4c833918605e240926d1218206331f605e2c0926d1558706b300605e220926710da7c11c00302f950493b8c1a7c11c04302f9304937814a5c1dc04605e2e092651694283d91f605e210926d1f196067308c0bc52124c17e33b8702ccab9830975151656e7580c2de8a18e3b13b0bdc662a047735135c50640c8b388d4b68927c8d918fb042c5101f47b328dd0838af61e25c230267724dacc92aac673dda608e01ec429631a41f6889ae65825d57b5d693048310898a0f5a32965d600ebd8e89b86f04e264dde738353ba19a1b977827fccd48afe1f9e653b5de6f2ab826921a963cef09b0af67c25e1e260a3de336a8ed8dedbe219e098136d37e0213c20d4c804139c73086bee5a4042e46d2df00a68f1ba50175b138596fb082de240da88b7e2597c19c79b334a0444d130de832f0c8df220da88b290167c2237f2b136857959a66a881878b96e0aa8b0a71dd16b77b78fa892f8886375ada8b51f068df1e8776c916b994bc8a53c318688ff57500f30e49305ddc163d0330ef9404d3c505e77980799724982e6e875e0598774b82e9e271f23580798f24984467051acc3700e6bd926012f59c34986f01ccfb24c124ee336930df0198f74b82493409d360be07301f9004936812a6c1fc00603e2823e4b054614240aa95889614701dc0fa1013abb61ccc338a8d1a63f399eb5da2551d45de4f33bc3f5ae9116276cf80b18d0a413ecc04b94edaf239de746da6c9671b3838541a1508f1d47e0e0b700528e31e910e987892a701de13003f2a1d30f1744f037c12007e4c3a60e2899f06f81400fcb874c0442d000df072b05b78423a60a2668006b827007e523a60e27e9706784500fc9474c0440d020d7011007e5a3a60a2568106f87e00fc8c74c0444d030df00300f8d938ccd8c93548462bdf9d626c923fc03815ba58d0bdfc78261915a27d8eedd7ef1769d197a4baf6d2c0d11219ac01e09e67820b6a37a4175de262a4e8dd80f28538bca46c5ad9a6c9368732e74b9ae66b4dc860f2a234a0c4159e06f43f58805e9206d4c594b05f01d097a501753161f1e700f4156940899a2b1ad01f00e8abd2801275ad34a05f03d0d7a401256e9b68407f01a0af4b034ad4a5d280fe0440df900694a879a201fd1780be290d2851574a03fa27007dab2dfd57920f9dc39ccc0fd100a7a4b725c174313fc45c80f98e24982e66c8ab0598ef4a82e96286bcbd00e67b9260ba98216f4f80f9be24982eea3d6703cc0f24c1743143de1e00739124982e66c8ab02981f4a82e96286bc5d01e6479260ba98216f7780f931fb48a90ba2d77a6f690be54463b9acf3bad360be4157b59964ac983a8eb9c4fb5b7f150de8b2b4795385403f61024dcd76af2f0ed267a12d1dbf241c8e9b194aeae0bcfea964b82e068def01703f930cd7c5b8e70500f773265c5d0f3535d186ee6e357336a529e8bac36cfa45dc0937a25dc18a556a990baa2bf9732cb4df4272a22f996897f65ee8477aba47a0ca7cd8f755a221a3e528e909d2f81513d9f296cd929f16d3ddcdd13400f8357b16d4e81a54252c29c5dee52e3a159600b66f98d8f2329805e79aafd173213ac596aae48851a221630a0bf75b1064f32d1377906238dd32ead4f200b442ea377408717e270927559744c37906e0fc5e12cec14ee21c05387f9084b3d0499ceb01ce1f25e1a47acdd170ee07387f92847388933877069c3f4bc249cd3f46c3798d0a71fe220967819338bf059cbf4ac299ef24ce2701e76f727547c413124d77540e56a3df9968974ba02d48011c43f1d3b12c78c5a078fb8309af77da7239c1fbf09eca37c251435affe9c80ad102fdfa9f12a1121f731ad43500ea5f12a112fde768508f05edd2df12a1123d3c69508f01a8ff48844af4a7a3419d0150ff950895e8f149835a0950ff930895b8d5a7415d0fa0aaae02a1125d166850d705a81d2442257a30d1a09e0f9bff8e12a1123d976850cf03a89de2801a782e691ba82ef057a49a8f8f733102fe3578fc3b33a1ea4c36e54995407567e7a94aaeb59e066ebe0ac17561825b5185d995662b3f4115facf4d8b434d42737af80e74f54b3031e6dee981b8d9a7393d3c038ffb924cdc2de55f4a368bb858afe12b90dcae4c9481e239588e1a130f7e7ac9dc898b122d99fb9ea0915a8a89b66f0ada79898adf152945abdb33ec2700f6d22ec1261e0c68b07f05d8dd5c824d3cdad260f702fb557726ecae06b6be7c940a7235bab7a3ad5521ae6598b8b4b92f2893ee7fc8fdc496bd00deb24c788155dfb6b1c2e6a699c2962ec6256f0a67fde5d88f6e18b650e25d58c5c3450b59581ea4af071397fe227fe9f0cf44133c128d89c737085f2096fca559eb370580cbc7712eb2b9e4243fbe2ea661b9071edd9eec65649a99e3b40ac497bd98d42134783d01de0a4c78da1f2b80365ef95a257ac4513e0bdb20787c578c438b146cab712ef433c5ff5f2861f5179c625692b5d971310bd86878e857e6e3ac351ff125536fb65337dfc9473f1ace935838a7c364b00a1367fa1516536def2efade4d82d3f4aa12b1e63b89f52e984b579388955a669586b50ab0f66262d5ea98a627a252b307ad52babc09e6bea1812c63cda69bc36cda9b09b25fcad64a670bb1eb27d335d211951f3423dd8f20bbab339107a9afd2dd5eb9781cfd01e4770d49305dcc0afa13c05c53124c17b3827e0130d79204d3c5aca0df03ccb525c17451fbfe19c05c47124c17b3827e0e30d79504d3c5aca09f00ccf524c174312be8a700b38f24982ed645f80760ae2f09a68b1ad17f01e606ecd3fb3463689be6bdd4dec88167723b71af05907d99207ba8d04b39b4a7c7848f6657bf16f0e5c561cb1c68fc3bfd566382d7a90309de43006fc3b6b5a9fb4dd518a8c473f730961c1e0b1aa17e71cc8783dbe97cf815c8e4464c90416dad4c520311b73db4f42bbf8217fcc6d28012b73e34a0bf01d04da40125aad968407f04a0fda50125aada68407f02a003a401259a2868407f06a003a501256e9768407f01a083a40125aadd6840bf04a0f9d28012556f34a05f03d002694089260b1ad06f0068a134a02ee655fc01800e66025dd600ad3169fc1b2180aad8fb5b1f3a69e82e62a1ab5321ba2171b874052e33da3166be01e713695f958b5686d8f5a14cacba0048545d0e3f55c542be9f3c2dcc653048e63089ce86d42326cdd950816bec708958f39dc47a33683d37958895ea7744c3ba3360dd8c9df24763d55f3c43d5806943c7a1d3c07561cd9e0a66cfcddbd2a0115b7ad4452c94bfc35abe451c060d6d586b506105c2f189dda5eb068dc3619bbea58c4c73934d6542df1d9bbad31cd39904f56390cead244225aa3c68503f05a85b33a1ae150175aac7a3d8eb7685719a09fe2df22ed758e7a96a7366aa67bb72d11c15e6c00e748464b8c4e98006b71ae01649864bd433d1e01e04708b25c3256a456970f707b823d93b56dc5e851e23a38d0aa5c6a852cad52c136d5cc743492b6a3a53852847c591eeaf7572eaa2946e0e07d2d171a41308f4a5b3171f02da939e744bd8688d91a1362955c95199c4858a964d6e3bc03a360e57da4109575a6d1a5918d74195e6c2f8341c54c7b133db340dc8261785de89856d382c3bdbc85d76889e76b46567266c8eb66d4b75de488371baf2fd93892ae5ae5d4828af8215bc846f2cb6a9948999e7966649614778c0c7c71137a49795da44e2fd7a832de4e0ba36746d5864b68b03a63de40083b0063b19d1f60a3cd41324c17431a2ed75803951124c17737aec0630b79704d3c59c1ef301e62449305dcce9b131c09c2c09a68b393d0600cc5249305dcce9b101c09c2209a68b393d3604985325c17431a7c75a00730749305dcce9b11ec0dc316ee5af0de60873d4f4b598d4f082835958bb83ae68278958f39dc4fa19643ede592256aad99786f524c0ba4b5b56799b1297318d160673a00a51eeca76546c0027af20e840dbcb7523be098d1e7a4093c95200b95b1ce6b3421554bd9aab62d36cd2cc6707816673f7b8ed40b614bc3af96e9d79f4836262c447fc3916da7361b69c16474d36ed8beca7869e96528d0d53454f3269f9b5896d428ab63e308010a7019a1c6f0472bc471cbe1eb6153fb578f330e6769f56b36d1f704a28938473b89338ef039cd325e1a47a25d37036c0cc5a2e0967be93382f059c159270527330d0703e07382b25e12c7412e7923077ce908493aac8a3e1dc08705649c239c4499cdb03ce9992700e7512e76e80b39a8953fb5d95279d91469ba3a87bbe490b55886c4f36b279de9b0ddedb451e8519de1f7d7ca4216b6021db0f90cd8ae3a14d37a9cf70273321de0867ef1a4938873989f34cc0395b124eaaeb0c0de768c0394712ce422771f6019cb592700e7512e7ff00679d249c439cc4b91be0dc4b124e6a4a1f1aceeb60a3542f09a79b29a3ff049c0d927052f378d1703e0f381b993857f05ef886327d89eea86f00d66633df7e4eaf6a4d0b3fdd0820ce6dcb68b5e4d992e8f14e3b895f078adf79525052336dd35016801e68be1494f94ea2548072811494d490161aca4300e54229280b9d44391d50ee2d05e5502751be0328f79182728893286f0394fb4a4139dc4994733a8728f7938272989328d70794ff63a2ec1381325d1fcd64ef76a2ed9196c4fc1488c5d83fcef4fa7e07748783627836f975316d543548ef01ec537a547afd116a6ae267ba973b2d4bdcae2a84782013625e0653c05cf3357a2298a4c2bc48c90a9169cc44005358b85f817dc0414cdcdd948ece58e85d5eeebc26290f64f4e038e64fbb76131399270709d2b0f660617d09b01ec296453d7b5679ffbb2e8b1b00b443e3cefe9a7e580b356f312db0e53cd8281d16c7d63ed8285537ab3226ee39699ba31761a1393c0e8b50b98a8ea8c4e67cb974314a7d3868e08f60d7552f371987833912b74054afb87358f066c19c79641ceb37c6ab4df42ed70d8e4bcc9dd50903dbdedefb152a86c8349a4beb4d80f52819a7f7a989ad916e2a3f3124dc261117a5dd59988f8499f4e8b6d43725cfa42e66a1391566d163e24a1d39d3f8ad57a81a337ba232c4edd4911fc1e37f2c7b490a665594ce18e0d152e99e02f08e63c3d3a32e330b924e9c3bdfc0ab5d9c378106ef1616bcfd01def13242fbc79bd8f34ad37899b98eeae9d19785f65a586c4e8863864c6fdb3ec4c9ac9ba782cfe6899260ba9875f33480799224982e66dd3c19609e2c09a68b59374f0198a74882e962d6cd1301e6a99260ba78de3909609e2609a68b59378f0598a74b82e9a23ef33880798624982ed61d381d609e2909a68b75072e029867b5adbacd6fca2f72435ccb69a9cb46c361f26c26cad554e6316bc4079d1617b424e82fcf910694f8b0d3807605a0e74a03ea62e4dadf307b9e270d28f1704903da0924f47c6940894a391ad0ce00f4026940898a391ad02e00f44269405dcca0fd3bcca11749034a3c6cd280fe01402f960694b8b1e785fb03d04ba401252aea6840ff02a097b243096c49f31b5589aa340d357a57b8e790304185102f63425c57b5d62c1c93cbf62816e249b0d65f1e87a669a0d136a13be2d4c5092a6272a0a1f9cf9d030ffd154c986ba8646f632d99f3d558a56b0057798f7aaa1a0f67541703b3ceef1c82bd9209b6a74acdb5195d8fc03dd5ddde30975ec52e3e9f8a30886a73ef919e07d8ae6e4be531c6095195c78b5828bf05e5f135ec8738586aea603b5417d702437332dc0216986bdbb24e60f2169d6afea52d2a532136e83a49305d8c0eda01605e2f092671a6a4c1dc1160de200926f18443835907306f940493680da2c1ac079837498249b404d1603602cc9b25c1245a816830f70698b74882e9621a9f7d01e6ad9260127d3c68308f0298b7498249f4efa0c13c1660dece84b9b66a1af91b6a2a936b5696aae43c32f408605a328aefe18079471c256a355edd88af55775d013c08f0dd29475b447cd069daa27f405b74571c69a4025dba36a53534b1f34cf1bead22f1bb8614d8a9f5ac88ca109ae4ce01dc77c71d8139d5e351ec75bbc2782107ff167997eb9b31cf68dcf5dc3a8da91aa129ed2e00b4f7b465297a6c8eaa42e6c512a910e5bd71592b83d57f94a941adbb5c6ce4718ef92d7dada76da50e0098f7c5e1f3615bac9a56facd672e59b43974225829ef9706947872a2019d00401f9006d4c59a95c300e883d280bab86d1a0c401f920694a8ada701dd06803e2c0d2871cb4403ba19007d441a50a2d69e06b404803e2a0d28d1a64403ba2d007d4c1a50a2f69e06743b00fab834a044db120de87800fa043bb75750b77a82a95adda0f4e172b27199d52069f0e6b2e08d5121bc2765e4f62a350a66ad2299619a9bcd5587dcdb9184b61c9cb79f8a230d6a3a68934d21c44d3dcd08320db03e1dc7fc19a89ecb41af6433dcb9e8cff405007d461a50177d9a960395f2b3d280bae80bfa3848e873d280bae80ffa06007d5e1a50173defee8247fe0576406190e9b8dcbba8b11d65381e0af6f917d94130958bed45254a972aa94a7cdcbdf3cf8a2ac4f612135b6f95be5b03465e123745b4623907c20cf9b244a82e56203a14a0be22112a71734483ba10a0be2a112a71834483ba1f407d4d2254a2a28e06f54680faba44a84475320deaad00f50d895089db791ad42b01ea9b12a1124d7334a8d702d4b72442253ae1d0a02e0307cfb7dbd2a779a439d94f577efa54e29adfb50b09e5a560477a278e023b85deff41abae9fdd0be1ecfe6e1cf507d3b56a0e73d259f12c78acdf938473b893385f059cef4bc239c8499c17c14afe81249c6e7a263f09381749c259e024cebf00e7879270527376d370f685b9f3234938073b89730bc0f9b1249cd488631ace5d00e72792700e7512e702c0f92913a7365acd55da7f2e3596738231ccd59bd715a65bee61d4ad04183f8be354ae23e1e62580d5aa89dec55aa5a131ba9e54ed7a40f9795be667c0e6a67143b668119a17c3e3fd8524982e562eba1c607e2909a68bb55bd707985f4982e962edd6c100f36b49305dacddfa0f1c27bf9104d3c5daadff02cc6f25c17431dfc26f00f33b49305dacddfa07c0fc5e124c176bb7fe0c307f9004d3c5daadbf02cc1fe38e23b2c14cf6ef246e920e6661ed039ba49f24621de424d65b405a7f66625d2b026b74d4db98c44792d3ae1117a91759705f04b8bf48864bdc4ed1e0de0d707f950c97b888d1e09e05707f930c97b8dda2c1ad00b8bf4b864b3cb2d2e0fe0470ff900c97a85ca1c1fd10e0fec984dbab854d58d8f5982297966521bd01f6b57fc9c8e850ec3532dbfbd65af36a0e7b2a788e85761d40fb3713ed320a0314477aff4ef75854254215dd33e269610fc0fd23c94a3fccc99c4c87831cfe2b09e77027713e0638ff938473909338e7c39aae961284d3cd046cf703ce0e9270163889f37dc0d95112ce422771f684b9b393249c839dc4390070769684935a108d86b3147076918473a89338ab00e7124c9c5dbc173a94b0d6bb68160fd4a52c50f52a04b52413544b4525c2aeebdda48bc9d4d6ed10a2ecca44b95ec4239cae3a0375464457c6b12cc86bc383bd940b9089ceb734c89d00f2d22e4026da99689017c0f6be9b0b9089f6261ae43900b9bb0b90890b1f0df2150079191720138d2534c8fb00e4655d804c349bd0203f0d9097730132f16c46837c3540eee10264a2731b0df23700797917201343816890df01c83de3383cb7ec134036c5d00ecf6702ca15a4a0a4da0d68285783d3db8a5250522d5a34948b402a579282926a2fa0a13c10a472652928a9962c1aca9d01e52a525052ed043494cf01ca55a5a0a45ab06828af0294ab49414975f3a1a12ce81ca2ec250525d5018d86726d40d99b89327d9fe8a9caf783d64de5278644d5aedec0827b043cf2abb38dd675de9bb5dedf2d65e129f1fed55f44c349f387ce5721ce359838d751612e9ef0df314a9708f4f18e36266dfdd3c404768db8d19cd4e995ea87b1004f020bed9aec79b541cdf45e56187001c43106eb7423b725aad234d7e85de7debc3a196475ad3896a8a02e5375b3aa0fa2499b8672f52e21cab5992883f0de2aeb7adf9e6a38fc0212ba4e1c1ad04042f5c5fae375665d9fea9129f6065061f49ec1bf45de07f5f4a033a1d59a229754d31f2d5ca223ec00d6750132d1f44783fc3568a1d6730132d11d8306f96d80dcc705c8c403030df25300797d29075b37770db701ca0da4a0a4a6e1a6a1dc1c16b1be525052334dd2502e0d28f3a4a0a4a6dfa6a13c0c506e28052535313c0d651da0ec27052535ed360de5078072232928a909e16928ef01941b4b4149ad9a4343d9005afe4da4a0a4d673a2a1cc0394fd9928973128fdd34fa5d2bad0c989b34db9f7ca3d70352a0437a02d23a962cb12b58885f25240399089b26702a57e5c679a80c70aa5431f632b46404b00f33a201c24473f4f5424d31eeca76146cc8f2334d7f66063731ae64027b3946f0e8a8b0226cee5bd175a7d36dfacd3b5c618e7a725aaf5ba3ddb7b5dc55c6868b1cd45f06817b6e56627591e5dccfe5c09b238988972c5165016793feb9fa8baf3851d4818f7871972485b620c464ac5d88985f14bc038348e6dcfa076b7ed7916e6c6614c84e9a7144cf557d2d88956c8be2cb4b3415d315c2a5a6a790c1ada85f0e06f1a870748cb68533390139d1374d91a0ad69701eb6612b152eb8fd0b01e0158379788959a3e86867527c0ba451c9b28db3133dc4411b7f4b44dd4c3b003d8928951eb1bf497ce49f8784ef048e80cb85a8739dd6ca78abc9f66787ff4bb23d4d48417280d69056b79da1a906ed5b6074ebfa91af6169fe6813c1236515b33512e974039d86ce87defe39836f7b4d37a29b86f8f60c25b37ed852775071a53be9c512cc4e34021522475934f75d8a26df26f8547bfb82d67d1d84ab4d0ec435f03ca91fc59b4d67cc497472d8141888c96551a3c5a94d10c58cd47b56db8013618d3cc49ab26d60516a7d14cacabb4f078271bdc0a98306926b7652024668c2498c4d992067339803956124ca2aa8e06737980394e124c1733e6ae0030b79104d3c548f79500e6b69260121301d260ae02304b24c174d181663580395e124c62623f1acc3500e676926012135dd360ae0530274882e9a2e7f03a00732213e60a4a29f41b4ed5108d4be8e41738783ad7aac700e2f66c2b50548a8ae05fb7d3536c0f18273131ae9478b00bbdffc33a88a104c6a473a781fc18404e9661ec2d35601b4da880b60311179e4d59582bc1d85b2a032ba6a52ae42a862fef44c2ba0d2886a7b015c34d8dbf934c37aad5de8ae8574c33f36e018ffad4b60c60c1e6a8d9b76996cac701e50e4c94ab453cdec97ec5a9753aa9c1d0349ff71b61bedc511a50e20244037a3d00dd491a50e2d243037a0a00dd591a50a20d8806f46800ba8b34a0446d3b0de8e9007457694089b6201ad05301e86ed28012b5ee34a01700d0dda50175b10cea1900749a34a0c48d3d0de83500740f694089b6211ad00b01681913e8d2de8b72a333f2cfedc1699d868c96757b5f15229bced6b3d7a664d71ee17d44b75e6e0096192e449f769adcf50188e571587e748eede458cbf6a3247e1a6056306176f55e5427b49723955f48cc3dd95b1a7055b6ada2cdf5788a67c0eb72465b3a5563dc0f35cb70d72e249497c14a5cc55e569aeace4779f3605d627e9cecac0e7d4b78b467c6113f11a4dd096d8fc54612e73479d8d1c5c0459fe059109a521db7c9cc669e482edd4c3c22d2fcd65704af8d3d2562a5560ea461fd1da4759644acd432a134acd703d69a387271d98357a624cda8c399dba7ee2c9cd7c0f669b6249cc39cc4793ce09c230927d5a446c3590c386b25e12c7412e7aa80b34e12cea14ee25c0038f7928473889338a702ce7a4938073989f34a15e26c9084931a4349c3f925e06c948433df499c8f01ceb94c9c3d12380bbcffe799e080b9aad2797dfb3e3057ce63e7384a2f6c25f96849434a8bbbb8063c87e7b30dbb517117d186b512452e664b3ba9ef048ff8823866cc742de5c39c743c381de473a1249cc39dc4f902e0dc5b12ce414ee2bc00d472fb48c299ef24ce8701e7be92705243a66938bf079cfb49c259e824ce3561eefc9f249c6eba140e079cfb4bc239c4499c3b02ce0324e11cea24ce7ac0792013675e04cee840d5628f91fe9a5aef83da8733f0232955c971c1c4188d292cdc0f02ee8398b8d751c9fe231a69906b131d139bdfabba27cf4b80bbc3c1d201bb18b6752a48f0216de9dc98acc377d1e3e96215a23c9489b26f04cae442f4c566b69d6d7ed673f15cd3e4a8c54e67a5869aff8554b97d8805fb28807d988cccc7c90b5abe1ac99d73cf646565180f53c2e152aab352cd7ab429e13438ca1e2105a59b69519707a93c520a4aaa398f86f24e90caa3a4a0a4fa3cd150ce03a93c5a0a4aaabf130d6531a03c460a4aaaaf130de5a380f2582928a97e4e34941701cae3a4a0a47a2fd3506ed4394479bc149454cf651aca6e80f20476f0970e38acf5ded2ee3881fbc31873812eca4c7779a0f990ecae4288273221ea11ccf3de6cf0de2e3667f24683b146f991c53474abb3d08d027427b1d39eb65c147c8af9380d632d6dcb03184f6edbda2e5865089dc38879697ab0b0fe0c584f9153719d98778e9619f151382a9e1a47013c9d77a1d2cc8bb3e3f2fb5cc482f720c8e16971e82875f267bd1aa7aa83837f8bbc8bb52be33ca59d15b59e92ac58a32d40eb805c9e1e473e109bd922f911a7167ca03de4ab837ff2199260ba984b760d8079a62498c4f8611accd500e659926012b7453498bd00e6d9926012d3afd060ae0430cf910493e8464383b932c03c57124ca2659c06b327c03c4f124ce23e930673058079be24982e1e26a700cc0b24c124a6d8a7c1dc11605ed8b64a0ebf293f951a11252d2bdd45a04dbf288e2cb199c4b2131f745abcf05b209b174b034a94501ad0b701e825d280120f9634a0af02d04ba501251e2e69405f03a09749034a54cad180be0e402f970694a898a3017d13805e210d28f1a04903fa1400bd521a5017d3ac3c0b40af920694a8a4a3017d09805e2d0d2851514703fa0a00bd262e73709df27d8e623207d34eecddc16679ad8c9095d452cc6473705f16da12f0d2bc4e2a5a6ab0000ded5ea01cb95e46e95bf45522dbdcffe948c2ba1d04b6de20116bbe93586f0769bd512256ea619486753a60bd8989b59fb285b64e5623d5b65ea7b503ed6cefdbfc6a327a200dde157eb5a35af86994aa37fb06dfc78986fc22d6bc7b1e6cb56e96632c19e6a487d386b0f5ba45124c173d9cfa01cc5b25c174d1c3a92fc0bc4d124c173d9cf200e6ed9260bae8e1b42ec0bc43124c173d9c360098774a82e9a287d39a00f32e49305df4705a0b60de2d09a68b1e4e1b01cc7b24c174d1c3696380796f1c87ce20f7d7ec14d55d43da4a3e8c9c23ceaca358c8ab418f7a5f1cfa7d9de83f68d5f534ff03e1c47e3f13debaaab54ae898223b69f2b9234c090fc4813898126abc377463a5ca4f03984e0630ea14b0290bf121a0ea7b908958a7340ca2e2b11c6f91f7d30cef8f96da116a6a22e5000d242db3e23815827c8809b26742560799b934590263995169b2783dcca80fc7a1cd0f1e778dac6af1dbcd6dad5c3c3f758155fe91b8ada5e9472613d579b4b8e4ad60f67c348e0380cddf24d9db64a0930955f701988f4982e962caa06300e6e392601275a33498c701cc2724c124ea4669304f00984f4a82495c8068304f04984f4982493c6ed2609e0c309f9604936883a7c13c13603e230926d1064f837916c07c56124ca2d69e06f36c80f99c249844ad3d0de63900f3f938600667f6194621d75cae6ef760fe06305f9004d3c57d666f70b97d51124c17cfe6bb8364be2409a68b67f32701e6cb715439c2054877c25718cf51db984a3175aab9d82517431535cf00f02b32dcc2536d45c4f3114d3fff1028925f65625d2f65129869cc71c5dee58d5ec7ebbc2ef976ce8614c96d0f15ba1a01f26b4cc8cbabe852e7a38df49628574b9bef080fffeb4c807afa9a6e24b3126ac6f93678f716a5ed00db1bec1cf3fa4beb8c95bddc34129429c339b28107f12416c43d01e29b6cd92bf3465f610c68c9e0dc5b5836046c6f31b1e91ce4bedc2d348f6eb99ad5c46986868f16b3b92ae07bbb2d8b3a26dbca5d8ccf380b50bec344d927658b1344bd6b69accbc86e4edce4d0ece6c7c326e75df6031f2416d0eb734dc21b2e1647195a06bbe7c151e6bdb6d460263ff0439d74e2de09f444ef4b82e9a213f7ce00f30349305d0c631d0930174982e96218eb1880f9a124982e6e93b604981f4982e96218eb0880f9b124982e86b10e03989f4882e96218eb6600f35349305d74c35e19607e2609a68b61acab02cccf9930575599a5fa1bee64c2e9bbe040f985249cd450561ace2b00e79792700e7612e744c0f995249c854ee2dc12707e2d092755e541c37934e0fc4612ce214ee29c0d38bf9584d3cd5212f7a910e777927052cbf0d070f600e9fc5e12ce7c27717e00d2f9838c44bec52a35e124d597f83916da772177c28f71fbc0d98e9b9890822ab134efa2373b87587f928895ba4cd1b0be0cd2fa333b0d459089a652cd4b3ce2a1fb96eb59693e8419f517490bd470274b4a5c0bebfdaf927052934cd2709e00387f938473b093384702cedf25e12c7412e75a80f30f4938a9a6381ace7d01e79f92700e7112e70e80f32f4938dd2c1675156c94fe9684b3c0499c5f03ce7f24e1cc7712e71380f35f26ce5e2add18753c64127d96966521dd004cc6ffb565056df7e32b878012442d4d44d95b257bc9571a19f41b696f69fa1e0115480726d49552a0565b1f796a7d779a0ae45e082ee82805a48b89528e02909da4807431e0ff1c78b43b4b01e9621a8a1a00d9450a481793a3bc0920979002d2c5943d4f00c825a5807431f9de7f00b2ab14902ea684fc12402e2505a48b49f7ca60fbb3b414902ea6825c1d40766382cc53e97b79cc355fa37d3d26a9ca84f9b7be499a1ee204308585fb29c0dd9d89bba57400c9db761717a58f41e7be0c1365e09f144c018d2a93c223c433112de7c74450c72dcb44bb410adae9aa690e85f69d6de10c40bd5c1c13822e4da22fd41dd0736bfb71afb90e26841e4c94eba8307145f86fa977f94255e27d4c67ed1ae95d38c3a401aaf11a0ff27735982bfd347f34c0b4f4675b01e0e5d99baea01ed1e4c4e3ad93518df07ea3bf41d76f9f645203e9879f0692962364ac0a41f68ce3a14f4f79e7a2b264253077acc04419d8366d1baa642307b900042faa180ea82b32712ea3a212f405f3a47b7238111ee995e278a4d3f13da66a9b68327817c8e0ca4c94f9118f743647524c7f3adebbb6827d0098dc91740b14dc8255e2302267ea49efa21ffd5100755589508976501ad4c301ea6a12a112770134a8fb02d45e12a112ad5134a87b01d4de12a112172a1ad43a80baba44a8449d140d6a2d405d432254a2c58a06f51080baa644a844eb150deac100752d895089e72f1ad40300eada12a1120d7f34a8fb03d4759850fba964959fd6f4677bb0a5ee0d68b6d64f4135b86e1c2a197bd883ebbe7d7fa810e57a6dabddf29baa51640f009eee1f3c00fa3051aed6a254360d15236a0068010f9f83556a7d69405d4cfcf20500dd401a50e223cfcba40340fb4a034adca1d2802e02a079d28012cf5134a01f02d00da501259ef669403f02a0fda4017531acf11d00ba9134a0c4d3110de8bb00746369405d0c0b7f0f806e220d28d10a4503fa3e00edcf04ba9c0a5d23f1e8198333242dc5e0a92a843780092ffd32bb13bc0fefa97cef3d6d1725ee3cff613946740077dd8112b15237f434acb780aa6e9044acd410091ad65d006b7e5baaed926112cff08b58f3e98fa0b62b886375d74ee5cd95e28dc95b9f57b01c56f7422650af6de34c5e6e7cf3ab120f78150f19cdff7e0558d307b391618cc878d381993c64f92c64eb00b22171c489eac7b6d8d4890d8c67535599f948858a21f683f6b8de038feb5026c89ede0b1dd8a52d91daca539fe4565ba2fcc4c0c452d03423da32208bc3980883bc618109586f67e6272ce8c9eb724cee5fffb190ae08abf27026d2f55390ce36f2d860dd3da6162e8fc9256c140bf4c9007ad338826d7127997e042851cd418b00dd0236e99bc511c114ca7010a260735570319fd338c0b9791c1b75db99a7c8fb68ad59c2f46236cde8dd89f675daaef30050796c210d28d1be4e037a0800dd521a50a2e69d06743a00dd4a1a50e29244033a03806e2d0d2871fb44033a0d808e900694b8cad3809601d0226940891e2034a0f30068b134a0440f101ad0fd00e8486940891a781ad05900749434a044eb100d680d001d2d09e8204737f67f8292648c34a02e1e3dbf02a063a5017571dbf436001d270da88b1bfbd701e836d280ba78f4fc08806e2b0da88bca910f01688934a02e6e9b3e07a0e3a501757163ff0900dd4e1a50178f9e5f02d009d280baa81cf902804e94e19ee83b818501dac4a589e653b23560dd3e0ecba74d4eb139fa5e949637ef7838cf4f6acbdce2c9388927791aca97558872729c45d474424cdd72790454bf513ff29d289fb4c8f773c1325fca84da4d85e9838bcc258d09871c1ab4be2c68db82244e8933157bb4ef71bacb11513e69cb513dc8e75426ea55325a8e0a99aa3bda0cda1960ee2009a68bcbd1120073474930899b791a4c05307792049378d4a4c1ec083077960493a808a1c1fc1bce43bb4882e96216f17f01e6ae9260124fea3498bf01ccdd24c174b1c6c21f00737749305d547afc0430a7498249340fd360fe0230f7885bcf6983999c4cddc524d58b60935426112b35830d0debc7905275ba44ac839cc47a22602d6762eda392354e338df6332801345785519f0d2dd8955cf41cd90be6da8ab823ea6cc980751ae03aa3d50fd47dc443292df74d3f405bd99676a554391de6a407c9be807386249cc39dc4793fe0ac9284739093381b61b99a290927358b1d0de7e580b35a12ce022771be0538f7948493aa87a2e1ec0673e72c4938073b897363c0592309e71027714e029cb325e11cea24cedd01e71c264e9d574b3bd6d4aae926598befcc101c44751217fd5de3bcaed120d2d261fc4f85106be390c974b3d20e671e2d693969efe810e2ac9384739893382f069c7b49c239d8499cdb01ce7a4938a9ce0d349cc3016783249c439dc47918e06c9484738893386701ceb992700e7212e72db0519a2709678193389705e99c2f09a79bf564de03e95cc0c4b9acf7a23c297fad7f1a0a5ed1d0d1dcbae702ba856d99043d798e24baced20e93578136736f29280b9c44b9062837f69182925abc8c86f26f90ca7da5a01cec24ca83412af79382921a664043b907a0fc9f1494439d44f912a0dc5f0aca214ea2bc09501e2005e57027518ee91ca23c500aca614ea2ec03280f8ac3e5b035be70c99e9d4497c3b12ccc2741828083e328a8a7bf7886811cb43d2771090d1ecd37be830ae11d1287b7b15da181d5b4622a2cd18385f52ec07a681cb368e06d5cddece99c8892368b3e096bfb6171a8dcca553af93fc8497f680ffc9670ac3c3c8ed251e9e98ddc93cbbd01e4115240baf880cf0390474a01498cc0a4813c08401e250524d1458be75d04208f96029218ad4e037924803c460a48620e051ac8c300e4b15240122d8e3490c702c8e3a4807451b9710c803c5e0a486216241ac89301e4095240127373d1409e00204f6c4bcd65f241d1c5c428c701ca939828b56749b9f1c1d05fadbb39c6bca50b91d2b0d15cfb17a810dbc94c6c6babb02c73f8ef18a58b30273bb64c307585eb4de37e554c778b355f06ce57a7c4a1094ac6eb776694aa318d0691e4749cb42ac3f783b49eca4e5c3acd5c12565ef76bb4bab7c8cc0668a7c9c86f905a9459abd388671c5a4ed81341d17bba54b4f94ea2fd162c9167b0d7731d7156e5fd9f0acf3d6cabc1c37e26139bb643d5293f302f3540afc4fb40037381a119660b01df597124314bcf7243f561a36dc9e7c1e6e76c49305dccef3a1f609e2309a68bf95d1b01e6b99260ba98df752ec03c4f124c17d518f500f37c49305dccefda00302f9004d3c5fcae7500f34249305dccefba17c0bc48124c172b5c1c0a302f9604d3c50a174700cc4bd8e7ee6946f3e3bb004ef3da2d53f5e66df7946c9b03b64be3c036b05d60db1ab05d1607b68276816d2660bbbc6ded867e537e2d34e21e91560b6d0ca870af884302f3db85048e0509bc320e6c83db05b6dd01db5571602b6c17d876016c5733b1ad1b31dfa5676749cee24f433c8a857802f84f5cc344bc9eb23b024cf5b84c56256aa4f7f1b9de47f5b252e4fd34c3fb5369ba5a1187fd9ae66dd11fe4f8dab65cb7317089ba6e2f62a1fc1ed6edebe288020bc29574330b16bfdddc01d0452dcfdf6076bd3ece9a13b56abe9957ebbd9ff53450ec3538526deb3dfeba164565e27713558d9963f57523bc9e5473313fd58584b91202406f68db18466c30a6458c5631a50f2c6237b6650daae44831aac297b6e92a0019bd49124c1743ef0a01e6cd9260ba18ec340460de2209a68b2178c301e6ad9260ba18f4b439c0bc4d124c1743f1b60298b74b82e962f05311c0bc43124c1743f24601cc3b25c17431086a2cc0bc4b124c1743f3a600ccbbe3c82c546854cbbeff6f4c6a669af2633ca8e7ee61d73969306536754849fd6207ea30928cee424d3b83efa04288f73221aed6c2e3dcb4aade30e6234d531a6f0d8ff47dd28012171c1ad02d00e8fdd28012951b34a0eb01d007a40175b124f1da00f4416940894a0e1ad04d00e843d280ba58122e0f803e2c0d2851d941033a18803e220d28511547039a0f401f950694a8f4a001dd14803e260d28512547033a14803ece3eab4f4fd8d17537f5a1738177d80c0b6dbaa7e898a442784fc4e11216382ae873bbf64eaaf13a83be49cdcba88bbbd04dc0c5e6c9785d6cb40ea94a6927af716a64a49a6e88d13c11b17661613d191efba7e270024b2f5cc5c530aa636112783aceec4583c069b154b5d7ec4557823ef419592b7e8193aabc599d43a0cf4a03eaa22a6f26007d4e1a501755799300e8f3d280bab889da1e80be200da88baabc5200faa234a02eaaf22603d097a401755195b72b007d591a501755793b00d057a4017551955701405f9506d44555de3400fa9a8c4490a5aade406d50334c73b3b967fc7b3b92d04e87988ed7d9190d8333be8fac5c55c6e5d34493cc135488ef8db60c39c4984eaae2ae2b2b68eb1278c8df8c531faa3549538d9e7eae4a0d394c8ee424625dc492d033411ffa1613eb062958671a93089a41a678df549108ec6e68871afdf9a0d17fbb2d5d6d5355cf2ea69dfa1c16a67724c17431edd40f00f35d49305d4cbcfb09c07c4f124c1713ef7e0a30df9704d3c5c4bb1f00cc0f24c17431f1ee4700739124982e26de7d15607e2809a68b89775f07981f4982e9624a969700e6c79260bae831f20ac0fc248e337c3a3093d3ae10779cb4a0afae70b0fc542256ea469e86f56690d6cf98587bab50f7e9fbdd4d53c5de9b752af06b1ae73530424d4d842aba9c84ad2f78357d1e47a6bbd0adb156351a3d5310ef59a22a4d638d6aa68a727274b742faff6042f88209b9570b1342d8759c0e889baa6559486f01a45fcab031157b8dccf6beb5d6bc9a63a60de2b1f43916dace80f62b26dabe2953429de9c2bca4bc7641febb295e0735d8e0df22ef5dadb29ee7355c6b6665ead4b03a0bf60600fbeb386a62a66b7c763370ec38c0f98d249cc39dc4f934e0fc56124eaa8e8a86f308d8c17e270967be93381f049cdf4bc2e9a6a7de5780f30749380b9dc4b912cc9d3f4ac249cd7f47c3391070fe2409e71027714e019c3f4bc239d4499cb300e72f71641ad3baa9398bd3aebb9d69ac1a7450bff275fab5e623fea95deb9ffce21523bc8fea6fd1ae6393cc6ff4c19206b38c05b34a85307f63c2cc8b78b06d8a91b9e66bb47a6492d2aa113fd15ba9c25851aa43ee1416eef3e0c1ffbd2de39751474a353ad3b4a4abc034f0075b15ad218e533ab9a0d6f09778af75fac1c91e9372e3e9ac3b342ea17b0aafd36ebbf38dacfbd7d320d77420415e1320ff198703b996c779e0ae1bcb52452b90b6029c91fe6a4b07f2e4c7ddc554eb6700cabfa5a0a44681f2664e5884fe918232df49942f8054fe2b05a59bb514f607a9fc4f0aca4227514e0594aa9b1094439d44f904a0ec2005e51027515e06283b4a4139dc4994fd3b87283b494149cd6e4b43d90b507666a25cd17b51a5c278b9c08f4977d94f7bd5c8cf5c4f73b0d94d8518bbc42191617c6773271d176b7afc0e12b90413654f152a87671a7d7a85d1acd7c775eea6f924dd06d2b824fba19ead92ab19070fb6ff482fe43fd46359180702c6ae4c8c2d57dac4506d74462446c5f5a03de080752929abb79b73e54d70fe5e5a0a4a6a3a405e954dd89e77938232df49944b01caee5250ba59e0ec5040b98c1494854ea2ac0194cb4a4139d44994ef01cae5a4a01ce224cabb01650f2928873b89b2160e8ecb4b41492d734643d91750f664a25c498576ef4aa307d25d1da7824213319dc469209f5121c8159820d78890495b72bf543f226224102dbffce320a12bc621a183daa9843e0512ba921ccda58b45c7af05995c998952abb1eb94ef1ae87f2839fb9c7be81a400a5761a20b1cac6d8e81d89c3f37ba98de670bd00badcac4995ae1482f30f3133ec2b605687c8ac2981a8ada9785f82678d85763220e42aa75a0bfd6a46712e34bf575a345f9ae0fd2db8b6dbe683eda62a1f9892aa10b59ceab13e168d9bb2d310623a562ecc4c2f8053ce8abc7f1a0b7bc856f3a83521f74da1c7a3448e81a52d1523d336968bf01a95d330edb65cb6893d34d534bf2fcc3ca287f37605d4b22d67c27b1d600d6b52562a52a496858a700d675e250920c6fa74a92d7540872dd38b652b6e369b895222e4ab4add4bf104eb51efb316f30a7213f7632f049c242125880b7d2bb8eeea7444bf5b73348671f26d67e2af9b49feafad590f6b62a396d250df92816f2fb60665d9f89dc6b5be95213752ab6606b5a38e0fa20a71b30a105d913ed2929b7f3fed70fbd4e4c59e7fda9f1be6e8cf9b896699753546e08736c5f26649d5b41bb73cf37a928f59a5f632283ab120f7d9583f0560209cd63c39b6656713f919f5e9c5c4f4c712048de864c78cb2b7b628af021a601a405115482f4f58b63bb6e53d8e1ea4c3cf7fcc70279369485daa8ad2431cc78ec9e249683246e1cb7622e7df306312f37cdb83112768e9bc4b1c4e41bdb51706c74fb1c3e009698fe4c78abb43043263b2b50956e34981f82240e90049398d98806f363803950124c17731b7d0f30074982e96284ef1f00335f124c62b6771acc7f00668124982efacb75816d7aa12498c47d250de6920073b02498c410551accae00738824982e06132c0530874a82492c764b83d90d600e63c25c4b45971bf18b89ebb2e2edafc6f53c58dd87cb70432855c9d11ac4d99416ab51065837958175aaf2cd69baa942aeb45ede8984751478cf6dc6c41ad4c90a23371a3c1aa5ed7002f80c2475f3388261d20b4370b190f8bd2a44b90513e56a2dacfa4d8be10c61aefc34d97c1164734b694089fb521ad01700e856d2801275a034a0b701d0ada501757139ba15808e900694a80be5d5c002a045d2801235f534a0f702d06269405d2c8df308001d290d2851634f03fa30001d250d28f1344f03fa14001d2d0d28f1a44403fa28001dd396fad1e44327350910edd87924e847c74a82493c72d2601e0d30c74982e9a242e45080b98d2498c4458806f37080b9ad2498c42d12cf711b60964882e962ea958301e678493089c74b1acc7d00e676926012951f3498ff03981324c124aae66830e703cc8992601215c734980b01e6f6ecf06afda53ae0af4c959b46fc58f5d400556212355a506ab50a314e8ac337249df84a3d8ca0be8bcb719579107a30398e0c75f6621053923c99a8f3677716ceab0167a9249cc39cc4790ce09c2209e76027711601cea99270163a897345c0b983249c439dc4390770ee280927d5ca4ec3b93de0dc49124e6ad2291ace2b548873674938a919e768381701ce5d24e1a406bdd2703e0238778dc369d60633ec3a665b201a3668c90206c2e97d3726d265bc17fa50a9ddb9f545a50a7de369e0687ef1fd4116779791feb4d86b64b6f7adb5e695be7a1ad37249ab80590132398d89564f541a976e605c02e9c8043ef7941cdd4022f760625b414527e80b93a6942857d3f14d0188654c8879193cd673cdd7e8877b92f20b4754369941a9a9f8a6b0703f006130d3db32662379ebee62d8ebaa9078bf3c8eb21103cddfc1bfc546f35eee51a94968e3277baf74e7b4c48e53984d96ac46a6213e1b0e9b1532d6fce44920df5bbea8c15b67b2e2e186c1445029a5fe1bf50c4f93d253602298210525f5fc4e43d91da4b24a0a4a371356dd015239530a4aaa8183576f0ba4b25a0a4aaa7183867204a0dc530a4aaa618386f21140394b0a4aaa5183b7cf0494355250525d156828fb750e51ce968292eaa6c04b050428e7b0d3e6cff3de6cf0ded6679d32e5177da8705029375285d06adb52feb0396a261a5e520ad841d6f193e36b2546b99ae94960bdd169d69b667cd5867b72b832c8e15eb26ab4ba18a9b635c8627d5be8da8b95f6c9d4c51b7443babca87b0bca7890c986380a33694d6558e12a78dbf5d20db703c6c6788bd946eb24c7243e905c858db8e5799185f634403b576e9d60225a5a2afda561069dc744db5385a9f46727bebccc78bebbfee01f02e688f93252f3a5960925aeedb4c28bdb83fbc1028958a999646958ef84e3e3428958073989750660dd9b89b54702eb20efff79c6d83b37be3994b6075d0696a17de23817f9d6f2a9aada6ce86b93ace4a38d8cba6c21bf0496a47de358d5079a4d53b2234c2c1249732c5c0710ee1747706a7a27756a627dda16a92bc0fc9f24982e2ae0960298fb4b82e962de8e2500e6019260ba98b763498079a024982ee6ede800300f9204d3c5bc1d9d00e6c19260ba98b743d71c0d601e2209a68b793b1448e6a19260ba680f5a1a601e2609a68b990b97079887f30f91b52aaa02b0ee7690fa84869016d6570133e5116deb76e037a5fd37a81192c35828078282edc83852e66612614e9c2b6951bc8fc3e37d9434a0c4f99206f449007ab434a0c4b3390de88300f418694089e7735ee03e003d561a50e2a24403fa28003d4e1a50a26e9306f431007abc34a02ee6eab81b809e200d28f1bc4e037a2f003d511a50a29e9306f43e007a9234a0445d270de80300f4e4b8529886ff8e51da661e9ede1b173bcbfaa7f8854e5bd6b705b8a730e1f68e843bc934566b5422a3cc695e5fac071103d4ff5850df5221d4539950d756c95558b542a4d6bb4ceb9bd089db1e33e462c4d00110c7761a3b5f57bd0a53a34cf048f8a97ce62662878abc9f66787ff4bba133180d69050be90890d8d3257ad11530b7ff342fba09e0f3798644ac548f111ad63b40777aa644acd4543f34ace580f5acb6d4ee27c3242a5216b1e6d35f61893a9b1dc8a5f378a5a6ec9990b032e9a62a4ca7681069c185ebc1a2740e13623fd5d4fae907ca4cf656fb6dbd4e17abd41c880de06c1bfe14467552b75617b1909f0bc78173d939127db9c5dc73fe06cb3d491d02927a1e139b1e415de2f8995a9e649c0a92a19528729e449a81b900409e1fc7231f9c9c6637a9f5625be953b163aa5ea202905621667958f52f60fb98542e9e1f272530961812d5e6e78a94458c0693e665bf31c8ef85ec6402811a4507255419898d2544819624f50e8077511ca9265bded637f7b0134dd0b4877d0ac4255d1cc7fc8a88ff6f6ea916800ee092b8b37ba61fee4db4ffd382bdb786a5eb5226da8216d1fad23cdbfcec0f444f1a33945f514e973c0bae1cb5385384def9ea77ab136735aa7c3fced21a54c39472990c654cf22e823a53d37612978206e172b9d306d15390366d1c08d3c6156da9e7424b027506eeda8584f26a407925df7c18ce9dc5069d6f289c65201799b97656a2491df35ce935454cee46b36fe9bd7d00f52a39756487381942b12c6cbfae9604d3c5108a9e00f31a49305d0c22ef0c30af9504d3c520f2a501e6759260ba1844de11605e2f09a68b41e49d00e60d9260ba1844fe11ec376f9404d3c520f24f00e64d9260ba1844fe36c0bc59124c1783c8df0798b7c4ad53b2c144dd7f01f381a719587ac05274ab44acd4641c34acbf8006f4368958073989f51ac07a3bbf3040606f9aa86a0c36ad91774fb7a9d32906d0ee90541a7ab89341e577823fd49d92700e7312e7a580f32e4938073b897302e0bc5b12ce4227716e0638ef918473a893388f029cf74ac2493564d070d600cefb24e1a426b8e6adecb051ba5f124e6a767b1acee5403a1f9084939af88d86f37d90ce07e3a861a351b5bf1a366f00c687e270c7cd4f399fc7008f76942c82f3f7c332ca9237f519a5fadc3fc742fb0ca07d248ed9d2365716791fad35fe4765debbe41292b4f09bbdc157ee514938a9c54d6938ef049c8f49c2492d4945c3590f0ffbe3927052b335d3705e0c389f9084b3c0499ccf02ce2725e1a4567ea7e1ec0073e75392700e7612671ee07c5a124eaa93020de704c0f98c249c439dc4b92be07c56a2e197aafca0197e1701d6e72462a56a3c69586f8795fef938121306b1f573166b93ec7e4a2eba7c5d0872fa8234a02eba7dadd63904faa234a02ebacb3e07405f92a4951fee64bef15bc0c8f1b2249cc39cc47916e07c4512cec14ee21c03385f9584b3d0499ceb03ced724e11cea24cefd01e7eb927052a38a68386700ce3724e11ce424ce1b5488f34d49380b9cc4f917e07c4b124e6a1d5a1ace5700e7dbecac8ce526b3879ff6ba514d3569afaa99791468eab97d00db3bec3ce1cde991c2aea316892889b4fc8c1b4104d1bb6cbfa406936dc6cf0c1ad45cd05d0eea279628729a4b9a2a6e2a48e67bec7ca1cdd5f54c3e93d340d252a55c0420df970292a81ca681bc10407e200524518749037924805c2405a48b553e0e02901f4a01498ca3a4813c07407e240524519b4e03793680fc580a48e22e9206f23c00f9891490c4443d3490e702c84fa58024a68fa281bc00407e26052431a9190de4f900f27326c8a50d487d89fe6aadacd0291f5d2cc13707907dc1d6ee34780dccf12e4a4d6c4ec3d69785ad3760fb92892d4fa51f9e32d77c8d0e52c1b226a52a391f3171869cc2c2fd0638bb7c1547d2dcf40e882eaeda1780ede6eb38fcdbecda71acb495ec3848c3da8385f5059810be6162cdcff18430c5eb5745623e1eef5d5b612609e2997d322b17fccf9dc35bf02dbbec59584ba648e9b2a73af9737ba821b309c8f1776d9949ae6970a07b36a03dc0e9f57b493089da761accd900f30749305d0c1e1803307f940493a875a7c1dc1660fe24092671234583b91dc0fc59124ca2f69d06737b80f98b2498c493130d6629c0fc55124ca2169e06730780f99b249844bd270de6ce00f377493089ba261accdd00e61f71e89a8238a0ea66754d2eda2c978613f99f717862dad476d89c9fc9c3c590bf6120997fb1151c417d576de26884f2ce3165e5a2c9e460d07ffedd96f5d79265d2c54a2d67833cfe1387ce131fefffaff3d4b7e03f90e67fe3c83137c8fb3f6835a6a9a0530712bc775508ef3f26bc8d23a68268f9b5cbec48d3e972f3b57546c2c9355b4fea44c29e0fc63c1db64075e30ef5f4bef3761050e0be097a4d90de0e4c8ce967484c85aaa70be2798a86f64a90d08e6c096d6edf1a8c94ba3fa0cdaf23617fd0898931a8f71e9ca4fc3d6bb68e12c4b995e628711a9cb83a3391079a80f44e5c439dac91b904c86f1749305dac91b90ac05c42124c174f5e9fc1b67f4949305dac91d91124b3ab24982e26fd790324732949305dac91f929c05c5a124c17b5a74f00cc6e9260ba982ced4580d95d124ca29b180d662f588096910493e8264683b906c05c960953db9c6abdd1377aede9bf53951f41d2003f5d40b5e91e0d27ad0ec73015e25c8e89b3657389df94362e535d1e86b1508e03ad520f26ca20c1642659935cac53b41a3ceacb4b034a9c3b69407b03d09ed28012cfe934a0cb03d015a401753119d58a0074456940893a4e1ad09500e84ad28012f59c34a02b03d095a501259edb6940bb01d055a401259edd69409705a0ab4a034ad479d2802e074057930694a8f7a401ed01407b3181060931b4a3635880b4fd383bdeaa4290bdd9ca90006495f70bad599aeaf198ac4a8cedbdccfb883eb95798abeacd15349c34d7f08d41ebb97a5b2a4330729eaa0c59c442f9332843d68843e76943993c5f524d1bb4c7fc38488cbaa624982ee6503c1560ae2509a68b1120a701ccb525c174329722c05c87093348291d5628aa54f313295a92b162da16e2ccf91f0be9b2b00cad2b6745276ae3692bfa5f80723d26ca203a295fb5bfe8a44d6187d9276ea76ebd612ff6ba5d61ccc3c1bf45dee53a15fa3cefda5ae31c4b7dd46996ccf3413ed78fe35039ac9d1e2a7f5521c80de29833d3735770d1c1eb0c40d9370e947acef4a388fcb495ed472a6f8399338f89728d04ca466f56d42520329937894661dabcb91428e336940a96b861a281ed0060fb49054b9c5569603bc254b09154b0c4d33c0decdfb05c6d2c152c51e744037b3580dd442a581737fd8703d8fe52c112dd1c68605f8639768054b044871c1ad81700ec40a9608916271ad86e00769054b04427471ad8ce00363f0ef7079b0eb569fa4b6ada2c9a99f944d0f3174803ea621accd30168a134a02ea60f3e0c800e9606d4c514c24700d021d280ba98acf52c003a541a501713b69e0b40874902aa1f7817f3d917760e810e9706d4c56a0b8300e8a6d280bab8287505a09b4903eae2b6694900bab934a02e6eec9705a05b4803eae2d1b33b00dd521a5017b74dab00d0ada401757163df03806e2d0da88bf9ee5707a023a40175b11a436f005ac404ba7a04d0e89497a52a39b52571374aab4c3704fcf78ae38865b2c92936e71713703183d309709e1fc9c4d9538599c3eb949f1347e7caa98bcbe58c66f81807868f514c84cb782fcabcd157184b91fba9ab75170370a3e57890ba983bec454039862d8333cdca5c61d6e87a6f81097c9b8989ad68057b97007063db7239695ae8d445e5db19b03a8f938473b893385f069cdb48c2e9a66af84270b5dd5612ce7c27713e06384b24e12c7012e79f8073bc249c854ee25c0be6ceed24e1a46659a4e1dc0c704e90847388933877029c1325e1a4e64ea6e19c0b38b767e2dc4025c7c4eb0ed4793f9579af2bcd257394bde64c7b50c0ed0d7acd494cd46ba7a09e692ead567b9b537ca32a6b51965d340e6f0a923c998957bfa84e48a97b98965221a65226a63c15a6b40af497d3d418a553574d329dd112a7552015298ff704f3db7af3657e69497aca2bda437f2be838a7b465029764551d75a34f53d67d078ff85449305d4cf4ff03c0dc41124c174b9d7d0630779404d3c55267df00cc9d24c174b1d4d9bb00736749305d2c75f63ec0dc45124c174b9ddd0c30779504d3c54c38b703ccdd24c174b1d4d9d500737749305d7494b91e604e8bdb9dcb0613f32e5265f460daba0edaa43d2462cd7712eb6b604b2a9388951ab941c37a34609dcec4ba8e4ad63a0d04add344a36e5ee87d482b9d673571048b41cf447309fbd6e89996ec92d2f8e8268d171bb59b56f5969bfefb8e5dfd0da2390918e5deeb12556d3eb5872771bb787f32bb2bbb797fa27edfa1c3725e8f46a9055ef7f46f757b15a6edd9debbba670d6ae078ef92722d249b268424af4337efef79097560ede21ba97b9bd7a1abf79efefd74ef9e5479fdaef5feceebb074d26f757ffd9bedbf33cffb6479e2daaac438f23a78dfa9c28c93a9efea9ed778bf9befbde35f5563b9467f53b99ae98d533fb77a9cf8fdda25abae0551f4fb52635a6feab118f6a5ccf834eaef8e6ea1c1fb8e39de37347db7799f48fffdcac5fd6ffafe8a49ef6b819d67ded1f7a8e9d5ab265d3d29f17e89797eaa1352d0d2771499116b5ad1572f6dc61be6661c6f1e8d99de3b2b347927f9b3baf77e1647ffdada1405f408efd3758927c6efbb66e64b655933ef05f72f59bd9dd761d926772ff58a6e70ef52dfeb9e74e7a2de0d99a5bebb4233772df5da55d2b867cdb79f7cc752aff525acc2b415d557edf83c3be54e4df15857404ff48ce4cb49ea95c9e54317c2d5ddcdf3173852fb3212bebb6ad2bbc96da61a26c24fadd4cca742e90aafef01d7db7baa09541986d3d318d35cefe74a635af1bfafdeebef5cf3ee522ab9d46ab177556962ac999660f5bfabbec9b7149b6bf23a2c1ff9aedf72d05e43e2ee37bd4e5729dddbdcfd9522df2f35eeee7e85147c2afd19b1e9f5bea129687385c86bfcd5c8f7cc0dbfbf67e4b563e06e9426668c5e91578e3464fdaa2d45de4f33bc3ffadd116a6a8243a69f0c2de33ee50ab316cd593c939424669b71e659a832a35831adeba698f5395865eb3d6235295567fc392b78af386148ae5fbc97a84f485970c548afed0509295b0e7e3fc18ca6c1dcbfc9de9d2b339ff6ef7670cd64e567732a6f66e65d29e9bb5a269dcef5c817491499f9319061bdc9ea60f84f5ebcb6569ad5dd9f97ca8c8cfaad0fd8cebbacc310ef2f3f8355ffc5b9abfc7dd86cef8fff2af87dcb6dea5d55f3ad55e8ad5387e8fd754dcef6832d8dc8dfc2eacfcf48f8783498dfb634d296c767df5b766fe6ae0c98a0ef457b1e7fa5beef89db6ec4741523c6b8644ef02ef6a71afd5f97ff07a72e9bf8be750b00 serializedProgramBytesString: - serializedSignature: e4015a93450dfa52d182187c5d365c428a54b7ad379b1cc2da3cc6718da7cb37b8f8f20d195565b15e9ffe6c864fa002561310c4ad4d48df328ec1684ca34209 + serializedSignature: 199c10bd6c20aead92697c33532af353844db5323858292deac74ad158ba20ce595060eacf909bc17188552c619881498d1113bbba9dde1851e23c0d51483105 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/6657daa4973ee1249aae293810e8bccd.asset b/Assets/SerializedUdonPrograms/6657daa4973ee1249aae293810e8bccd.asset index a00184a..73f2f09 100644 --- a/Assets/SerializedUdonPrograms/6657daa4973ee1249aae293810e8bccd.asset +++ b/Assets/SerializedUdonPrograms/6657daa4973ee1249aae293810e8bccd.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed59dd4fd350143f77ac1b53105111303ef00646a00512dfe5432051241bdb8b316340c1990d966d107cf4d5ffc8ffcd047fe7b4655d7bb76e4023206b766f7b3fcec7ef7cdd6e0993f051b3680a94a5159aa73c1dd0091de36e057d1597f3e48d6f531dfd11da12e666692a62277fa6d504da4d3c35a8899da7b48fbe2cf339b271bf89bd369e78f4105f1bab54129bf2b44a9f698bc6d5580489826c6ab8638af552836897e907666d118a999832358e26879986cc5521b4b7ee0b7d15b5aa98dbc79e3a5540734f280e6ef05ed149ba44eb9132eefd80db2bdf18f9c652f8b266c6c5c5c51f4389961be05ba21a9942f04d1fe6f076461b8249a712ae30d3c2b609956b20a041232f5837698916b5684caa219fdc2bd296b0a22c44995980c5ef100b16ae82cbf699b281f175f10436661933f3f4113defdaa50518e74b804a016c2b70079b76d0d684de2ec40eaf8c5289cd1edc93054dc72bab18f100ade1b92212e6a43d13496d917e13634d89916344c932fa73e116d6bd8e7b1dcf1d1732bd8c7ae7ec34ee848067a65568c3d29be2a30f16f9171661e853861b8649936344fd0a59e2014327c91892f41d1a0b4e1a6d1b5b24931fd5cf1082fdeb18d6d0f3ef5e93f1bad4441b056b8fbebb51e4f13d91086289bc68cca23f1429787cdfc5a63b2f0f293deec94b7c5afe6372bd516b7d9494f8b5600913669a057b1d61b86e6ec39acda829ad6adedd32f67e83a06792ce4eb157279e6118ed7eb544168b97160eb70c3c2369b1a183c1a174c1c1d95fe5620d8e76cacebab2aceb16ea7a076671e7020eacb74c462c133eb744f1ef845e42839ec58f8f343165b1e73de649be318c4c404216b0039f011d1f567b484e65ed7c146b69c30e8ed76cb9be15e297e9cc2fd989dfb08e5ffed2d33ddff37b9e5368d8330ee5acc79eb179b972ed52ceacf8bd0dbccf64f53c1571e564f600144fc55e4cb7b5c759d1b2a4df8ec1b902f69641498f431a97526c9d35a15cc7ce6dd9c14f0d32e5506ef511d3ccbb0adfe1c3d10e34df9328898ed4275d4edc873776f88ad24267b5799fddfcdaf55e80c207cdb4ab91470b484becdc374d47d8aade4b5dc26447536fafe84dd1523c656e03bdbeb545653f8780974724bd14ddc0b0e58d9e0d12c9c55fdb745ce6848057b96fe055935deb3de0399022d1c0c51f0ef400f10f31bdd2f45ad5c251312279e85caa7f5de81d04a38433ffad937cd4efe5331d3ca5956af529d2e26dcffef32c6871167cce2024bda46131642fe28eecf0c121c0e53a67ef4c5b8c677a51e12a713e2071ee0036162760c3e2e0450d6845b2ee2070ca07dccb38811b72812bbb3fcd96dc179958614bc5051bf9601b8f13b694502b61fa88ec70d1bd035025ee4f09b6d88927fc756a2664a0990e39d5a981a3aed6ecfb9f647d095c4ad2b7eaa1c95946bda3fe0e8bdd694617ab497f290f58ab72ab0ab04ed3eb14e3a12e5631f9edec5eebff8a9c3f9bdca49636c6e5a89687e51de2fc2b555dfe13abcb1ae32fe3a454410f1c0000 serializedProgramBytesString: - serializedSignature: 9ddb7f6d844ef511bf27c8aea0b0c99eac60e704ad5cece8bcaccbe7baa5c401f672ebf7dea3955754befe7f069c171db8c1b79c916642ac37e01433e06d3d01 + serializedSignature: e0ed9e8d9012e082ea6b669d64b2db0e0502c636fc7801eef10a1430d6c32e9ef921a37c4b616ad75ebddd50ce415ef03d043d6a179627bd0fb77e8954ff6e0d programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/667c46fd2864a124ea921d98d4914fe5.asset b/Assets/SerializedUdonPrograms/667c46fd2864a124ea921d98d4914fe5.asset index 4e5754b..c3283e8 100644 --- a/Assets/SerializedUdonPrograms/667c46fd2864a124ea921d98d4914fe5.asset +++ b/Assets/SerializedUdonPrograms/667c46fd2864a124ea921d98d4914fe5.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5bd976134710ad913d5abc22b02db305484850007bc41242c8826d6c8813b66359ce0327c708231b81bc449601bf25aff986fc474e3e24effc09a9aae9b15b33dd331a5b2d30413a9ad1f4525df756757775b79470005fd645bc2cc01cdc827128c153588735fc760befabf8769fbcf48750c7fb0a5ecb9877114e47d4a4d7396b14afb3f8b4090dacb9054b78af727e112af87d16eb56f0895297f153c1525637562ac1343c80fb90b38623442c70a54d9166112e2b8dd729d8c6dc0a2b458d389c95c34b117336396f1595f6ca3d825f19d62ae62d619d3ad450e61396981ec5abc598f89611f73efc24f133283dd3bd47dcfb45fe21e999d0bdf195ef12e5b2bef46e917ed8976e8bf423bef4a4f80cf9d253227d583ca7157a50fe8878ee15f70109eb80289313cf099147b212b6c556fb11792cc3063894697d19c3bdbc9ad18e45a29309d716e861d46c034db8810214d62db1ef34e00a5c565af7a8d527e97d8baf652c5165a1a3c126fe093441cad5f05d915c7313d3efb06793735631671ceee29d6a3d864be86c8f7c5216b0d91aba7705e6f1bac1f21ea3dac1925190c88dfd75e650a6dbcb5631c52374039f6bac6191af2f59d30a6b3f8b690deef36bd8eba7f0fe9a5b0b62afe377559bf38232b58eeacea64b77bbb467a6694443da3bd46f3e5ae49d588487ac51d10dbb1dea23d69f014b7ce4d01d646c9ec45c1997dc69a429ed3238f468cd05188c8f318850eddf2edfd7e06a2816353364eee38c60d7c2336f8efdf5efdf85b77633b42be0d0b4619d888016462cc9cb5b230109e1106cbbbb408afae9b754f4d31469153b48bf5baecae5e21b20c93353b301389ef326cd223cc38c3aaa3a0e33a84499d5ae09254b0ca9c6d35c55a43dc4e732364680ee71d0e406580d4e0958b5901481455e31ed4681d39926a1324dbad3a6891e8bc24c93dec1b56b1a7aa919cc68188cd241c760978ac14ce79ddbb57d2d62a4543348e1f3a9008313136a067bb53e18ae838ec16e0583858c8892836afd3e61677c6a91461ae1b64e78bf5238c4129ed4091f6883f0944ef8a09a969b7184a7555ecbaba8f90e7a2de5adb39432968defb7b4ccbbe06742edb45976dad100b86815746e9b51d987783dac188fdee22b609f8cde3e3d2afbf4767a547980f09f831bd5c7b70e2d96c77c3ca88d33a41951a2dad799a657c51eafcdff30ca5eab8bef3b1c1d549af079edaef38a8934f2565f73785f662d287d498caee16d855b6678879f5dcb3834205a33d0fa168279141480260ade2648de3aadd4cefb36853229067bc92bd02d6c49d5826dab7d70945b78bff0ebfcbb4fe5df34e7588f3be2df4598869f31af8ce52bbceaa474399e9de416761136d708f7cea32d8f1bc7d86667259bed57331de3fdaac19e06e9e3ca29c83fd267f523fd80ca96bcbfb96cd496254c7337dd6638b7ca1e1b1c7375e53c6bb92b972dd620dcae275ab6eb49b6eb7900235aea6c3ca8b23145619f8062edf7c38ed7357bd07da035dc2b6ef7858888c76111df2b9cb30877316f8905c97e492554f2741e1cf0b194dec70ee9909d5221bbedf33b996b17c93a6ab0c8eba50afc8695ca6265bbcdb9baba6139cd79cd41591ca4591dd2d32aa4931a1bea381f179a921d7f127ba2b37c25cfa29a7e24f29ac89fb78018abe89571f01dd6e13b13c7475bc1e78e3545de22aaa096a6911dd121fb5485ece63e90fdc2625e7410db900edb67edf64a77bc2f73a4d1397cc33a7c6755f866f681ef0ea37b29461b176d85b13430f6338d734487f37315ceeb7bc259e23277f1b3c20763db62be58e798d03b5d69079a9c0ecd172a3437b4b371707e98e6e8c38d3cb605aaa89af110a5f06d59b4ce9be188a88e351f720d7ada0487a7bc428c689eda5e457d68de9947d84f76f6b1c2259c03fdf1683082dbeb4959140a77ef92ea2fb3d778a72f2a74adaf1e83a7822981c893854c67d5b1eac1469a27ab8a1f2040c2e169f7c21ebd295a0b3ab84f76a97d28fe5ebf2be0be589d5a14502f72753a9e6844cb8fda75196301def1511b7e11404e3589c43ce5c17c13dff4a22eee13ee8f4cdb75f2dcead150b03f0cf208f49a57fc7596f7d4df3f38b079df343f2ffb773ee023bbc3ab7a582cf0ceebff7ce42bd0c8474780c9416fa028d0403166b237d39ec373b1f4a0ada52a567b16ecd5fb39fccd34f5efde5640eca58f77711f77291b3749d97176ee45111bac61a1d6e2918239524f9a22754022d531492a35bdd2148c1f3c0f4c4964154c92d52f3c901a5e66fff36453846b8c38db1471201177c924712382b825315df8379164e58d76d88c292a33129597df25951d1bfb864c51d9235179c524956714130a29d1e043a7b59dadc10fcd571312c1574d124c21f3564bfb20c648cc9a22312d91f8954912a9a1ba6f13f7e0cdd1dd125dd74cd235a89da3d7441163e4a54c916749e47d6d92bcbc20af868588ba8dc0e666bcc32da3e3e3315374f749745f3749378df0af02a71807af73db1261df98248c10b81bd2fea39183475a5222ed8649d272100c73f4a7b446bbacb1d9b85f22f35b93649e1464d231156d7079e3a1b70da5ff1193516273a688ed850f6607b740e1e877e41c49e11c79ed365c5e1976e53523763e6460ca2bb658f2312263770b372bf8a65f9cdd035aa294517699efbbdbb90e1f50537815e77c235c66f45eebf720ed41fbfca4d6363f69c7feb10ae97ef692fb42ace2f061fa878c9f7e95e2f52476d31c7783125ade154e1bb175fe0f719dcbd8ff0184d773623f3d0000 serializedProgramBytesString: - serializedSignature: b64069192dcb1baedb28b43ba6cfea817fa950804a7f90341b5297bf5144d586f71a599142bfacb53fd85e1d1b80fdbf3d235b09f6672de2525e951e4fbeb702 + serializedSignature: acdc3bf33a8e7d3bf618be329b6f9b50778ead9ac647f278c22fff106baaaa2d449d68a7f1551b0203bb5eceb7c58ae9e716628381f297946eb95d282adcf20b programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/671203a1562c055419feb7a0772d1645.asset b/Assets/SerializedUdonPrograms/671203a1562c055419feb7a0772d1645.asset new file mode 100644 index 0000000..c9224d7 --- /dev/null +++ b/Assets/SerializedUdonPrograms/671203a1562c055419feb7a0772d1645.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 671203a1562c055419feb7a0772d1645 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c56d5f9f8cfcbde43f692b0c330098100222210a64c49401410421220929098c15010b728b8f7de1b37eebd77abad6d6d6b87adadd6dad6b6b6d5aaf57fcfb9e7e43eef7dcff3beef7deffbbc3987ff2f7cc8cd5dcf79cef779ce1eb7592e737e22639c5fcbd95256c872d83256c6aad966e7af42e758e5fc73cfd4f525acd6396e707e9738f7c6b0ac046ff29f1191deceef79ce591dab77de6c60a5ceb142dc2f62e5cedff39c77cb9d337e75bdf3bfdc792ad2c27969199bc916b345ac57a4470211cbc54b75f25a84c72bd2c6f93d836d77ee960ba57820b9e2562fe7579173a74edcab729456cfad64ab45b4aa9c7ba5ce3bb5acd291b94e486cf3761e137f30f7d0531e7bc923d7b1adfcbbb9fcbb8dfc1b3edf521e7b27f97c1ff05e5bf0372774639cf7fbbac7487be7d8ca399e0fcef9bb9fcbe7fab9f29a6d8c236b803c1e2c8f03a5cc0b92d0bfb53c6625886f3c198380ac6498b591c721f23858ea7b618ae10f731945ae05f238cb0e409f2120ecb6e03ebf363444dc951d3bfaecd8d1b563b32ba5fd3e96cf0f97c76c791c21653bcf74bb555e1b298ffd13e835ca7d8f4d629ecf3a6136af91e7a3e5718c3c1e2275eb2c75bd089c87d545d93447caec24c3b858735d3dcfef5f22cf73e531cf67afb1f2b94be5797e92fa24e37f4aa72e328ccbc0b9c3b1c5da38b294ddbbfaecde55be7ba1cbb1c5e3bef800ffd3ca1d27e55d9e423c0ef2c5e320579796d9d1cf25d441c91f2fe5749372af00e75caeb249b2716b21dfdb2fcf0b58e2bcad6712f726b972da28d687bae1b4eaee5e6f358545fbf2c4047a2adb76f7d9b6bb945b29e5aaf84f76cf238a731690c3dfbfd227b7874f6e0f2957e511f949ea79983c4e95c7e9f2388d35a6e3111fc86b87cbe31132cc9e2c3a0f502ca778eff654f971b2dce2d96886cfd6fd65b8bd12c854ef17ca63db249f57cfcc0ca1f32c796c976498ede47176883065f9dfe60b9f2f1c9a40e61c976f9b7aa08323a7ed0e793e571ee7c9e39192bff2d18bc079223f48a4cb7ca90b0336707469d7459e2f90c785d1ba3875c9689dae4a9f4ea29acb655e0dcef9b18fbc7e0d38e7ba2e71c369f7b294b9581e97f8743e8a4e67a7f22edeeba8ea29ed937c2f9e7f15b9f16b9fe7ca6e5f2cafaba3d26d96a7779b99e05da54732e961b964d1dfc7b8bfd441b13ddaf7dcb5e09c1ffb79e189bf9d773b28dfea0baef377af03e7fcfeb224753d86c5fa2c97733008fb6019b6ccff3b287b1ecb62d39eee5d7e1c00ae0d90f23e94efad64b1e5987a8ec7ed7a70ceefaf48326eab34fa39e1769c16e7ddd52c3aff29f4fca1f5bbf2da71521fd5deb81a9cf3fb83bc772295f2da1af7bcb3d265ad7c270b70c972f5eba4cad312792c67fa72b6147090e9d1694f3686dd5f9581ebe28455269f59ef8b779127a77d6fa9bbcac736b0e834e37f965f53e59d8a7fb53c6ef69e1da99edd248f5552b7412c2a6f66c783ebfca8da4d378073fe5c8527bbc7ebf29a6a13285d75f63cc117775d1e10cfcf6add677baf92e7752edbce4ffbe4ae65f1fdb6de95335ad56f1b5c395d5a0494b345ca51f6dfe69e7751fa6c95c7edf278a2e4388445e5e5ec24791db4132343c035feec8d3ebe89748bc771a7ab6763fdfe6479dc258fd380ec1e528f619ead1aeb7c3bc03d7e7e04882f8c5f3c5d4e91c78e09e2d3133cc78fa786887fbc7bade4f10c19b7e12cbacd33dcf59583fac7917526d3fa6937d54e3ecbbddf759b3c3f1bc4898701dac98dbeb45bdecb06f1967e151909ae9d2eaf8df2ae0979fcde393efbdce4bb7f2e90a1bbbf07e8a0bbbf575ebfd9d5bd9bd4999de78bcb769fae2359543ec3ce07e1b405cfc0b06f09604bd94f1519edb3e56869974fe3c8ba506fcbee5fc9f38b7cb654fd11ca966334b6947d12914380dd24c3488ec6beb98083f2a14bc133d016eafe6540aeeefee54007ddfd2ba26dd943d5dfae446c09f587b6bc0a84d3163c03c3567d41f16c29eb764cd601b4f55ed53fa7fce9b624e4cafa9c28d330b97d7d726f4f42ae8afff571e4de88e89b4a78cad715db3c16edebfcdcf1db9eefc7917513d3fa7a2fd56f207da1d1d7551a54be3e96c5fabab46d24dfb33f93fd2591712cd6d7c7033f192befdd069e81beaaeedf0ee4eaeedf0174d0ddbf9345f97aef69f2fa5d4cefeb507fe8eb77c7c6553c03c356368f67cb7b7c9c15df0216ddce2970edd3db5fffa9035c75e1ec73e58f5165d8bd52de0429ff0e70ce8f137de14e74c3ed23fbbffa7697723ac8eb63dceb7dd418c37d4c5bdfea53ec7bee7e165d9f7ad0c7ff219fafa8762a8ccb03e01e8cdb64165d2779585e3f0cd86a32b8a6ab7325e2aafa1d1ff1f19b24e5dd09cef9738f01fd57c86b8fcae329debdaeaa6f45d9178e3b3caef715a12bb059e03a928af31309e21c244f52e9f33270eef841bf78fdb3cfc867f6c679e639797c5e1e9f95f20f67d1ed17d547f9823c9feabbaffa39aff7d8f7cc027a28d9fc9dbb9288ff4bf2a8fa215e94e11cc1a2fbc454bd595746a45a8f4df55ea9d4695ab4ff8873c70e0354db58f9e2ba04fef18a3cbe2a8fb21d1c99ee63303d0e8391498615275e914216dd87a0fa7b5f93e733e47d9587cff23daffa6a657b3732d3f7fc1cdff373e4f36fc8f3d9d1cfb337811c7efe961737a10bbff636b826fb7cd83b1e9f81fbe4bdb9d161b31fb0e8f69d6ac3cd93cfdd03de830cd47d25f7485f9ce6cbf37bc1393f2ef0c9557d97affbee2bb90b7dfafe501e7f248fef7971cc791ebc0378b277a365c6f5e9b7a48c45f29dfbc0b9e3d303e3d5ffd5bbb27f36b244cab81f9c3b32b2b25c7db3c6e3b22247f9f82d06d7f971a9bcff0038e7b277c7d1ef6df96c912f6eb21f36ebe524de9575fbc8325fdc964919dfba711bd4258eac1fcba3aa5f2a1b2a9fe5f28ed6d8f568604f7ebe5ceaf0203877741824cb4ef613a6f7ed62dffb0f45bf3f5895cd3f95c79ff9745bc1a2fbc27e2e8fbfc07d92fdd2a7fb31de338dfa7de0d3ef189fdec7ca701f067aa8ebfcb8924597512be5fbb24f37b2ca775fd5dd7563edf1d24857f9fe6a296f3f386fe10ec172594354dde557f2f86b794cb6ecfa8d3cfe561e4ff7deebaaea7d1fb9e743bf8a23c7aff7713ebd8f937acbfad11035def53b79fc7d40bd551be80f71f4fea37b3e6c411c397ebdd7f8f45ee3ea3db44632507eff893caabc2a59bdff248f9fc5d1fbcf52ef1b93d7bb71fe90af4dd578ff2fcc6b532592a9c6c165bd99fd551eff268f6a5e817fae46327ac2714e9d9e7f4f5ecf4849b49ee25ce9cfcfd7cafbb20e1f5927cf1f03f7d5757e2cf53dafea5e65f2fae3e09c87f30f795e2eef3f01ce1d9f19a1e6b6fc535e5f1f1d3efb125c87fa6c60d1638b6adc41e7638adbbfe451f551f8b9fedbc7f53f884e5f05d449e7bf7e9d305bfb75d2d97a9a0c6f238baeff6e741967b771c3ce56acbf96c72358fcbae9373ef91552fe93e09cdfd78ddb7c2b8fdf47cb882a63d598cef12cb69c52e32ffff3eee5aaf19aff82f7f8f977203e89faf075d7364b799b7cfc36b9fc46ce957153e12b7e5509f8c9e7c4385f5b5f58e05d7e591c37836b55e01a3f564bdd9e02e78e6ea3def6c9ad91cf3d0dc2e6c713e4f567c0397f4f8dd9d4cafb17fae4d5039d6a6598b2dd1e89f8c250edf71b5c5ea354fbf76b70bf2dd0535d533260bfd46670e4d79f953638233acc8436d0d5691b58741ba1411eb7f8ecbfc58def6869ffd1fef1c286f86137ca6d268f5b5974fb4b8eb5459a0379fcfe73b84c6d38db7cf1d9e60bb7394bd8ee88a871c47b83f364aaac68298f27caf09e07e7fcb81dd85ff6b3444e02d7541fd90ef9fe0b3e1fdd099edd099ee5c79359743fcdc9aeed72cef0c956efed92cfbf08cef951cefd8d9c22efcbfe90c6347a2ad0e114708d1f4f93efbc0cce1d1d0ed9edfa4fce2a24acd3e57baf807318e619f2feabe09cc7ad8beff933e573af8173c518ca79dd27c7afd759208e67491b3c9ac0d725d7c67eb39d32ac8bddb88f51ed36969c3cedb5f7a40cd94e899cede3a6c624df4d41b6bf0e968e72f97f52afdd2cba9dbbdbe59efbbc7c4e9527df25d05bc953b69173eb22e748f96f80737e3c9745a5a3881a2b55e9690f8bcaf3c5b9a357de853e397b7d7254beae6c7d9ebcffa6efbdf340bcf8fdb75c5fc8bb353a3e09e31d75ad6544e4557359392b61352c5764723c474e7649887a33f162102eba15ffc57f468860ebd976e7d572dd8a8c6562bd473d1be7f88c6e45461f31b75e855e287e97384f5408a16f47628278222608ae5ca5f3af1c2c27a973aecf11ab51f882920ae74e0e5be01cf95b6b9de6c74ae75fb494e54eb0954e6153ce8a9ddf3542de5a47edd8271345892f3df1bfb3d491e9ae8ca972ae28a035ce79a5d0b048fcde22342d17dacf73aed58b753a9bd90636c3396e13a1c5c6bdd6f95b1766b144a6d751bf4006bbee2ec351669ae9c4866b9f2b7cf1ff2cd2141611d597b7236e326c912b6a2ae7c658e2ff18ba990caf84cd9332c60a6491a86bf92c57d4d396c6100c1ec7d818eafddbe53d818d8f1b173d196eee7e22069e85ffb7aecfb1176d7fe19b96d1511bc77245b5b27f82a8c503cbe5658b99ff41a2d0b2658b3caea81f7f44875f54fb8a3288df7dae423c17dc00ad44e1176d00318c5fece46a4b40e1b94c285f2954f347a658a85c2f95f0cee7887599dc24ee93cb9dab339d63a573afa4f16a8c9df3b852ad85a9620be244d1c58cd54c672c51d72c6e92b4822ded8c6fae368db1f0cc952b6a57bde338351696a8763597752f95ecfebc7f4fde57d336553ffdc8e2cdc5177df6714bbd7dda09fba4122a66a1e63a0bb5cb74724a5c7ec4b34ffbc67879f6e13f7a861d101f4fa40346b0858e60fb4cfb38bf572da49438cf0667c827d48ef667497a809d10274cac0286b0a506611e47d859a3156bd9d6a715570891dc4a679c0e4d5358a7e6dcbc47a2970f414bd4b9bbc62d6b83ba766b1d3d31f57a2d293dd5862c720aaef9cebd12e7f9725121e5d79738124b9cb0b9bce92204afdd19fd467cb27cddea217eb25aaadd04d5a1a0451c56338c781b0df13ceeafdd356e20f2387f62e88a2786b65832eb113699b5c324f70c2bb93d26b95758c91d30c9bdc34aeea84b366245faaa8c241bafeb45fd35c37977a313992da23ddde0bcafebaa899f5cfa249d5cfa8ae492c5741d48c134c29249279dedf8c57e3a25fda6eb8b9bae3326b87f48c15d306f1b10d6dbba622a1f1c52e58330c103430aee8665725969c8e4baeb129f306b66db876e6389cb095ee60fe29093aed00e6658a32dbe0e58e2ea819967481accd353279c171f43596c25fe7be7274678075c782f4cf3611acd0756350ba4796f2c050f0f9b82fb6092478495dc5797184456742a69624876e040f5552c76dcf178e6f6f8aa70ab456f2fd748f51c2f758eeb8516fc7aa974ebf861c54f68d98d7c40cb5e64a8b358f2c31ff4b1e08331cd44621f25123b1f265ae65c77073a66090b54889072b4daf010b0e7158b85627bac0661ed9648ffc36811ba596cb06cac1f96d38cd1e4341fe8b2b138394d7f2cc91e1236c90ed049e6493647e3ab79dc57f9bac076a2b88d0967341ecec1baac4114f9273669d6e0b654b9bcf5622ccf95b788f11ddeb60a57dde438f016e938c5ce33b54e18e5d2c9c364067c2ed7007f170863714adeb122394c4d223950c60a4b0003759ec49bf47c003ea6fb99176f4b9d166c215b2392e109e232a7e45ab7423c5ac14e748e6a582ec6df5ae3fe96a5d386b794f8d2b884b5c96eb8e04198e0f121050fc6d27841d8343e442799e7367ca958d81ad6504ced8961d51e86e5a8933439eab7916039ea704cf8a11ae14f370b267c0496142627e32371bc3a1b137c982e8d718085a27734cbf95fedbcc16be52522f56789c2d0cb0db29cb45ee1fcc50bec31e0f96ae70977183c889e2331a79812d6294661763b5c63b72f03da6d34267caa46f8dce6c1848fc16c7784ce763cafe7e506af966c94655b746e98252624648939280da297af4c58ae4ed8358b9de494303b9d63bdf3749628072ac5bd2cb1e169adc86b83d8f4104cff693afddb01fd97000d838498a30b91139eaec9b72201f3ad5c9d705ef199c1908a0f5fbc17bce29387619ba9c3c6ab63b39cea0bafb93688e78b84039437d695cbd254408ed5e8952bba4a36b3a6ac90f1d64283e83cc889aaa2f0b0bd11e130152fde9ef057bcd48fbee2c59741668bc5f499d01eab60e56399ea1c4da61a0992a98ec3d2c25c2c2dcc4b292d8cd7f99ce841ab69529fc353d45221bb41cc6608eb777c816a737feb5ff47e8d4fc2b3d2a5e3683169b94e6c68ed92abe399291fac590776ae76e18b24a14f13f3459ac8a4e658ba28c04aed059a527b7fcb60a5f6049dcb8a5ec5da2675d999424226dc76a1ce6d45d7e784248c9f4e3d078a899d7522532d6b9c5ac47f068a1dc66b45b159ee5ce7192fbc3f5aec5ccdeb4bb305ef2a419ec7af44b47b31275f249c3cd3f1c41c7d2256002cd61400816ad593b024b4449384be0d98840ec5d43e2aacda9331b5976ad4ded12a98da8761c28b34c217b40e267c8a4e38cf98f9249e302dc4c331c17c597d4c759337de553ba1d4d7525c27da0aaafd5726ae6c777e573ad74a85882c314957cd4008a2e5548ced720ddb2e01d91e8121383a24db693ac1dc3d57242338ce08e5749d605eff3a8621f52fbe503f78fd6b862e1c8e7da506fb8d01b11762c97c55d8643e1393bc3aace45998e4e3c24a9e8d495e1356f21ccc886b3546e493708218712e26bc4423bc38a0f07958c25ca7cb9b8631ded0f72aa96ef3c9ebd72861eb85945ae7ef2db2cc2d8bea1fe17d1e15b2d11c249d1f89e959aad3d35d13c4e759f13a4589e843e3212e669b02853a1f435fa641bf3720fa0598f0728df04f030a5f88f15aafe3d53b815dcbc4f41cefea58e76a108e8b306d36e8b4e1a79edd8284b31843ba5183f4da76c1902ec12251a18b041f4773f14d76902d121d7e25723dd316518c07c77814a6c1f13a0d78ceb6a0b162b024c56ac1520ce9260dd2f703222dc272e4cab0397231a676952ed36c1f4ced6598da9bc3aabd5c2799d73aaa1952ebe0bd34c16b1d4763e19c8085539b52382b30527561491da393cc0d5caf31f0b40ec10c7c2c26bc41237c4740e12b31e15b34c25f0e287c15267cab4678ff8ec184afc6846fd3082f0b28fc384cf8768df02b030a5f83093f5123fcce80c2d7624e7e5258272fc1d4dea151bb7ba7606aafc3d4de1956ed528de45c31792e931330fdb39f824dc0e45b5d2437d7996ff0a09b7c99287cac4ba94c67175e429fa2532940515e8e79d3a91a6ffa386022588f093f4d237c554057dd80093f5d237c7740e11b31e167688477e91c4c780566cc33431af3784c30df5b24a62e38467867b5486359e213987ca9ee66f9c54dbe5d42b918b82e11beef7538a9816bbef63b4b7a6fadf4e94ac7db739cab41b4de84697db64e6b3ef2ca3b71bd7ab3db94749b21ba7985596c84ac758f08a45725e603bb353eb03fa0835561913e27a40f6cd6e5b3622a7105693e8bcd232d169df77caf86f5c253aa02cf3a8d9f279f9b749ebc47e4c97c7a049dae58fe5dad3337af5bef6548dd9a6fe9d28eab1ca86e5d83f9ecf91a9f1d1f30df3a01137e8146f88a80c26b31e1176a849f1150789d4e38afd6f00d5d43556bea31b52fd6a8fd7640b51b30b52f09abf6164ced4b356a77ef124cedad58de76992e43e70493e914c91289b2411450bc8859c2dc35c5ee5ca912e76a999845b5519c2f114993f72cae130580bb85c21ad1f9b1418c25d63a57d5acabedcc5d6c9625aa63ee863259222b289373f136892b75e2a972108ebec0a99005272ca282f66e6ec34c74b9c64443039a683b66a22b42163f276282afd4d99ecf6628764e6aa2ec1224bc93b08cf52a2c63e57bf705efb4d881c5eb1a5dbcdcb11ad553eafaefea80d5a29d98fdafd5e52c01ed7f3226fc3a8df0165d8309df85d9e47acc2637a464935374e1f04cefc6649c38ce38dfa998e09b420a3e0df3a29b4326bbd331c1b784147c864e30b7fdad2c766e271710646ee7999817dea6f1c2310705f3c2b330e1b76b842f0828fc6c4cf81d1ae1350185efc6d2cf9d58fab92ba5f4730ee63477ebf2343eff6f8df38f779c558adc5a95b1154e59c5efd488a6222f0f8378d8b99816f7e8b4e8d6a8459ef39b97bc7c6cca9d1d94ba0e7b301df6e9743848ea30cef95f2a1a43fc9d6dceefd435d88b6970af4e8336c0167c0d11af190509ed3ccc7defd3b8ef946ec1dcf77ccc7defc7dcf78194dcf7022c6b7a509335350f98355d88117a4843e8ab80842ec2843fac11debb7b30e11763c2f7eb6c1b50f825986d1fc16cfb684ab6bd144b0e8fc5cb9af2d39c355d8669f178fcac696c1ab3a6cb311d9e8897358d4f63d67405a6c19389b2a6a34578c1d63b5c89b9ef531af76dd32398fb5ea513ceddf769cc7d9f49c97dafc690f1cdd5c354c7aec1e83ca7a17369403ad762749ec7e8bc90129debb048bca889c4e7012371bd4e3827fa5248f437605abfacd17a66cf605adf88a17f0543ff6a4ae86fc222f19a26121f078cc4cd98f0d735c25bf40a26fc164cf81b1ae1d90185df8ae17f13c3ff564af86fc39c936fda8e166be3d25cacdd8e69f18e4e0baf58cb4f63b17607a6c30f743aa862ad208dc5da9d98063fd469d09679c5da2c31e0551db0a7ea2ecc81dfd538f097011df86ecc81dfc31cf8472939f03d58247eac894465ef6091d887097f5f23fced80c2efc5cccdbf1917a65cb80fd3faa71aada7f409a6f5fd98f09f6984970514fe0086e4035d0ae06328f1fbe9637b72c3f5d9bbfda666f7d23f8819e8e71a03d50734d04398f05f68845f1950f8c35896f14b2ccbf830a52c633f16895fe908f50d16894730e1bfd6085f1150f8a33ae1bc1bf837c9641971ba811fd308ce159b7235cd187decce4be91da3ffad8e97768cfe2396688c3ebcaed818fde3982ffd4e97da02fad2133ae17c28977f6a32d450ee9398e48fc34a7e0a2b1ffe908cffc7c9349fd608ce151b73ad6f12ff0fb3275a7ccfff63d29eff89f0fc51713c3fdcce6d7a4b3c8339cfa7619de759cc79fe14d2799ec392e9679a64fa45bf60c9f4794c6bfe15d4982a11df1460ba680e958b6529ba054d59a2ba941570eed90b981e9febf4e07baa0493ff2226ff2f21adf312669dbf6aacb3b17f30ebbc8c69fd37cc3a3c8d6c945544658ff2c6fd3e529d19f80a16c92f3491ac1c102c92af6291fcbb2e923c05aa79066e7d367a9a669068bd8685fc0f5dc8bc4deeceaac96ddcbf3cb771539cc54e822863416773bc8e69f04f9d06bdb41a2c107fd58b1d04dc5a7f6aebc6dec074f952a74bbf247589dde03a884e6fea74e28ef72f8de3ed3d3898e3bd8545f8df21f384b731c1ff0929f81d4cf0572105ff00e3fcb586f3be809c7f8809ffaf4678cdc060c2dfc5907c1312c97b3ac13cf7f93619c1711a433fd209e6edd0ef1a6ff8daa1fc6b86c1dba13fc6b07fafc13e775030ecef6391109f67d4458217dac123f1132c12cd22b191d81d30123fc58437d708df3f3898f09f618ed922a2c94ef95ac4a50c6e135326ead82a23cf66234581b759fe8e5e859025cedce2678cd8fea25694fa6e965bc72ac50619750c2e03773b95f882e61a5fcd4085c33b93dc22767d63769e2532f3b28053fb3ec058b4d4b1e0fb26c1bde6dc5aa657c07a4bb2b70a0d2b199c34bb511441590925e43b4f075db9f173cc615a691ca6454087f90596a45a6349aa4d4a49ea975824da6a22911d30121f62966ea7b3349fbdafef225d293b57f9ca17deba70b7288a67d3ecb877478ae9a86eb7aae7d7d129a05a7886ea428dbe572ffcaa5e938ad6090dab4107ac2bbb5ab64e83f8d7af30d3b4d79866e89060a6f935669a0e3ad3f0c5402bd91491d1548ae81dce8638c9cefb3755f379be294e1dd07b63aa801e2b6592f3f6785620a51433f8013f9d04f584bb7f748578962bcaf7b22a17cd4dfeee1679cded6177dfc86a1c3dab65ea73aac16aa0bfc14cd251639255014df25bcc249d742629b2c62441007f8401eeac015c1910f0ef30e15d34c23f0c28fcf798f5baeaac576ea4f5dcde46da24f4316684833446e83e349811fe8019a19bce080b0c364210a47fc49076d7151401917e8209efa1117e6940e19f62f6eaa9b3578591f62a64eaeb8ecb9cea016de2f913668c5e1a63bc1dd0189f61c6e8ad33c6120b8c1104ed9f31b47d74854340b49f6368fbead0aaf93e7c8e7ff416b8a9cff7f90ba6413f9d06dd80060aaeae680f365be0af3a1d789ba63fd6a61990529be66f585c0fd6c59587334ba6d706390b827f8384cfaff27a2e83c4f30b2cfc81f1ac9d9f466bff1dd3200b23e0b7b69790b8958326a67fe8c2e7df9b1b1489fd88dbbe57464c8c113e1817fe4f2ca50ed6a4d4af86074ba95f62e486609d13de67c4b3981aa855a311bc6b62b2e34513d84e71be4e3447b39c6c4c75a0786f940139eaedb1e0ed41812cf02f2c1e43e3f9e0d834fae0bf310d8625ef83ee6037f7c4fac0b9cd7f303719ae7193bd2382b9c95758e446a4c34dd4a42e7a37f91a8b47b62e1e8c6928c591fe5f4cfa489d747ec3edcbcb4d6127c06f30738fd2b51cb38399fb5b4cf8688df0d7030aff0ea33426126ed0e27f98e043420afe1ec391a3c1b12f200e6fcc0008e75b65e526a3f52e5c70442798c7324fe78ddcd97303516986c91fab93cf77e78f9d32ba50a469b5dda8772758d6d71cd3245fa70997c09b2441bda00516ca385d28ed18d36e431124c4969a1073c55707f93ea099da45add839e37b4505df416d7c84f7ab478311b55bed9ca88208cf867bc4c42c5ef8d84ca7563a5bf1d30911de048856e9c885a7b6beb6ff3bcd624cd312374d6bcc1926ea9c817fe78097f6ee8ce74ae7af7a19a98a80aede060b77922edcce68b89b53a8e7b7d5b9e3804cbb63a1188ca84dc11d0f8df0ca5834a21cc4192723ce182f74cc19dbe9b8894f6faec92037f73937a32d12b54cdeba5d2c8678dc01a3ba14981e1609fad9a62982ec909898a7aa1f46bdbd2ea5f0c98e8747424e76ec80499e1a5672474cf211612577d249e6b5926991f05f9bec8c654ad34356bcba603c6684e5d115935c1856f24198e499612577c324cf0a2bb93b26797658c93d30c973c24aee8939dddc904ed70b53795e58957beb24f3bac191c9a81ce72bb57d3095e78755b92f46794148cafd3095178655b93f26795158c90330c98bc34a3e1893bc24ace48198cf1d15d2e7b230959786557910e67345217d6e3026b838a4e02198e06521050fd509e6b38f972723f8135cf030ac3e70741aea03c331d75811d63546e824f3e78f4986479c79a9d918e86343821e89b9c6ca90ae310a13bc2aa4e0d198f55687b5de18cc7ac785b4de2198f5d684b45e0e06796d48c8b998e0929082f330ebad0b6bbdb198f54a435a2f1fb35e5948eb8dc3209787843c1e13bc3ea4e002cc7a1bc25a6f82ae1362a0731ae1fbc8677e15a66e917e7a57636e4cc616a3706213315b5484b5c5249d64be6bfbf1c9a8bc07177c28e6979b42fae5644c706548c1876169bf2a64da9f82596f7358eb1d8eb1a80ec9622a26b826a4e02330c12784143c0d835c1b16f2744ce5ba902acfc004d787145c8835b41a4236b466621a6f09a9f12c4ce3ad21359e8d69bc2da4c673308db787d4782e26f8c49082e761284e0a89e2484ce31d21359e8fb50c77a6a165b800c37172481c0b311cbb42e258846571a784cde21663a04f4d03e82598daa78555fb284cedd3d3a0f6524ced33c2aa5d84493e33ace4620cc8596900b20c53fbecb06a2fc724ef0e2bf9682c919f133291afc0049f1b52f03198e03d21051f8b09de1b52f04a4cf0792105afc2049f1f52f06accdf2e08eb6fc761922f0c2b790d26f9a2b092d7ea24f3e91a174762670c6b338d3833864b30e197a441f83a4cf8a569105e8a09bf2c0dc2cb30e197a7417839e62a57847595f598da57a641ed0d5872bf2a6472df88f1b83a2c8f0aacf7e49a90bd27c7632cae0dc96213c6e2bab02c2a3195af0fa97215d62f7343c87e99cd98e01b430aaec620df1416720d06f9e690904fc06a8eb7a4a1e6588bf1b8352c8f3a8cc76d2179d46329fbf69029bb016b1dde11b275b805837c6758c85b31c8778584bc0d6371774816db358273b39cd308ffe6ab09fb9cae94e305e91b63b847c74c3bed715f844f7bcc6541f63a4d455f6c3ae4893ab373ebdc9b8cd9b9f688e0937482f9e97d91d8a9d6ea27c854eb1d582e797f1a72c99d98f007d220fc642c7778306ceeb04b27993fff5032d68c33167b8a4e305f72f07032820b7037391513bc3fa4e0d330c88f84857cba4e325f99f368322ac759997306a6f26361553e134b8c8fa729319ea50b80fbd313c930f908177c3606fbc990b07763b09f0a0bfb1c5d8137c8398d2c634d33af5f1518c1e6f03f9d7421f68c28c4fac4c42e191db082e95c2c077e360d39f01eccf8cf8535fe5e4cede7d3a0f67998f017d220fc7cac66f96244b38468a6385dea384b119bc9e6376e77cab70ca8675b85813749d3e788c546f39cfb8b9d3b9b854bf32bfafa8b6e06087f1aba1677fc6aa696e607a9e65e80c5f2255d2ccf6a8ca5dac3c34da055e2ef79f21334b56237363781ce6b7c7256e30ec3d17b18d64a1e45e26e9923b141c48bcb8da6e749e0cf07d3039354ccf832a50de26e34539858fdbc973b72822e49bb1023fd32e64f3044374ee39c775c5ad54ea6b8c6f18d5a617337b6c5725767bfb6debbf8f574f9d345582c5fd1c572aa2f9690b91bcfd9c26255228e7e2da32d04efc44b2bf0ad2031bb188bd9abba981d9194fda68b9d0c2b985aba15de72de9d2071bb048bdb6bbab84df0c56da1b0ce4619337eb6adc96272291693d77531d99be1fccc7bc7ddf7a1c4892f5fc5ed6d285317c0cb213b3c16bc2c6910d50c98ebf10a56faf2b6cb30ea6fe8a84f4f2a6d2c60ee562326e46a9763f17b5317bf05845ec5af9e2082e1b172abc3ded64b25684e928a55afc062fd962ed687c78d35aee952111777ef56378eaa348edd72263dd6bc128bd7dbba781d13b8665724ee44d7ed7412dc6b4b1af3815aa73ce04d9d3035c154ec7c15c6e31d1d8ff91929b3a94bf3abb138ff00aba704f301e5c37c4f8b522108da39a8470489d93558cc7ea88bd96424666a6f3eb76ee236b555ab65b94cc56531d6a069a35c8bc5e85d5d8c6613e6becaaaeec610eb98fbf594f4c5f43a2ca6efe9623a8561bde4ba9c223a06f023859cc95c61e55ad11a2a754adced698cd5f558ac7e944c9b203a5c58435826ac50eb3ccbd3e18638a55fb48cf4c5ec062c663fd6c5ac3061ce995cab00cf43e3b55953cd296fc4e2f8be2e8e73509fe4355ebed19d8aabbbdb8ff7d9d8f879895e66ba4bc29bb0b8fe4417d772e2d643bdf8f827a7e4b60e960b6faf68cc79d2d31e4e85d3cd18a79fea382d6bb256567c42e139dc8271f8998ec38c8069c38414712b16c30f74319c173086470b8fde8c58a429e27b1b16df9febe2bb94d0b3eb52a86ba483c0ed18815fa4ab0ee2e66dd3410d843e567760b1fa25d643113456b3c513b116f2e739c9cb0d12bf3bb1f87da88bdf61216a8ef5a234e2db4cad97ed3c3c56c531cf0689d35d589c7e15cc66febc077e9d3291e751961e7763f1fb3516bf206d4637ae73643dc2bbcb473ce2d70ed35573bc078bdf6f74f11bcae2f70a163b8429b4dc8769f9dbf87d7b41ac50949215287def5e2cd61fe9628d7f7bbab871a81ee611deb7c07879d8a0ad8ba5d6bf7f1fa6f7ef747a1f9ab0c5354f8c0df2dec74af125a859ac4a6ca517dbfe8d6781d45b90f763f1f93d56838c9f46786b7889a855d569cad564c612786d647d1a63f80016c38f936923ebc706e609dfe3fde025b28f2ad65e991c1f78108be31fb01eaa64fa019289656a3946ea317d088be91f75319d9b9435fd233d6e3a54f16e4abb3e8cc5f6135d6c5724b42b6dcf38759ff97e8cc6a7c1ea63b1754be5ef557243d352f1165eafa4e9677e048bdf9fb051f02065a29ad456c4dc6f73960bbfe7ad9f4ad11a2ed1b61d5c2b8919cb0162f2281693cf92cb8fbc50a17d8a9cc7d731b7feefb6ddf4bd93dedbf1eea427a68f6131fd733aea31de5715d4fd74e9fd38a6f7e73abdf351bdd5dc8bf58d6d9b75da3904e927ff041683bf60fdc2c9f85872339a52f3b1d4738627b1b8fe151b53d35b2b76ed4253b5ad9fc262f437ac0737685eaeafbb24939f6732cf7f1ae3f0858ec3a8001c944dd516f2e92a859fc134febb4ee3e109eb24de4875b9b8ca7393f4b4d59ec534fd874ed38971f266bfa7476bee7e88c8ebf1a7482fcf6171f96732b337b11afe2cc36af7cf63b1fc129b09122c9f737ba362efc69658ea6b16b83d63a54c176389bc8725489c5fc0e2fc2f5d9c87f92ceb85499d9a5ec4f4fc375663c0da037e9de7489d936d4fa5da47fd121683ffe862b08ad18dada85ed178a3abd003934d79ea9d20545ec6a87c95ccec081562905cc58b1996e2d2939bbc82c5ec6b5dcc8e6d627b07b173aa29e0558cc87f93699705ad6b85ef2948ddf6af6131fd2699dcaa5058d5b5603de8ff77bd60021b9f207eba9c8cbf152406af6331f836f939cd3ccc202913c60fbb9e2e0bbd81c5ef3b6cdc237e8dc6fb188d5f47f531203c7d611fb2899726532beddfc462fdbf54fadb83f48b646a05c45b580cbf4f26e5e909a7564f48dcc269edfc8b44c4b75998fb016c3e7a512ddee1b5c25cbe254f24afb164c869ccf173a24a07ef3a0fbfcab1064f13c58d793b5f68195f026bc6582be7bff819213f7ee7168891f5ccbf90b390a90f7597026fcd1184dc39dfbc0f33c7a9055688b7d492d444b1d0957239a09c83b14b1ca7d5c812d388f8a62694e590e65f9a3af062caad3a505ab5592e1f628e8c4ed19b126bd18c87d65cef43bd62c8c2d4a1d3dd15b048f61e44b85c77757442c9febdc2fd920f1102547d2fa1b8652089ebc4f511eee44e5aad65ee50ce298e3bb56ed92c8f136f4e89c5fd2439a7bf44048eaf33b101db872d3c6c2d28b1f1b5e9334575b8c601e74ea154453106b0ce0a847c5459216c4989907fa15eb5f6e78a59205c4089a8b1f2997a8bd9262b803dd0c603d68a125877e67dcbbbee0000d7a5bd07ae3525b88334e0b8403e8ac8e77a3488ab6556405bcb3c686da8bd2d3a79ce767e57c869b46a3299eb753680cbeee0816b4b098e7f819acf8a4ab658b001dea5a050684709af3d48aa8ba33aa66cc0d4bfbf87a93d25261e746163afc53247aa0d78260df5f074a0c4d3167891b740ca0644bb7b7a883a52226a277229775cc8cb9592889501905e1fec41ea4409a995f0a33aabcab9161d3d389d29e1f04dd31637b61bd518b23b436fa9a8383430be3689571596c85e561b00ee079978174a806d402ec5d5e4c3ea36007ab7ab07a82b7536be588c6379739aeca8a5ef003e7450a67c482d06b401d0b5dd3c40dd2801f13d2355336616db2662ddd058f7e633a5cb44cd7ca9f0b032e16f954e803640e43f0a62774a8803188b82c7bb09f92607e58ddb019759dec0e90e3a0e7b50a2ec28f334e56fdb6589b94cf441d880ea4a90b7f5cc540f046f50c3a909aa516d53cdecabd61eb85ed43d10101c5c293c5df449f0d1426f4db40df07680cec2de94f03a8012d55bf8ea2eb7b701d47e503beb4309aaab2814b6c8a170b776c6f791d9e6fce5edc76703b2cf8779c8fa520f792c1439d626dfd657339dc76b454836005bdbcc03d62fb39dd0d1f3d3ca2c2b022ac158517ffa210f5efb9a2982b6b96ef67a4b0fda006a6f9b25066a1b44e0dede73de5e84754eb5b7c292fed68f01b88329c17502c9d4d681353e494ac11a483f8cebceb8a81662ec6e3a4d015e9645dde1b8d48156c892dfc6d50680bb45bba0754b9f70ffece5d4e79205a38ecf7aebccdc6e801a71b55e96bf51b3e0f8f20ee3341f0467b165a7dc25949d309fcb4e7aaa4176e061e2ec14e71c652755ebcc0ed9c7931d60225976a02c303be9ba4c76a0023c3ba5fc243b50af4476a00a6c765253a2b203cd03ca0edc19a0d3199ff9911d3346961db7059dad1df5c8d6f6636723e3b8d971660964238306d9093adeb2531aceca468751b3c17cd36ccd707d7692cd676f82b77e62761e9fe03df8fff3b9d7797ceef5100e817f7386ffb8b591a1d4b511ee83ee547b5e42c4df086dac5327f0e9d03f4687e8cf37a95a874e9bb651f5924ec9443095ba491698f833cc249cf956e25c0a700e3709e7382b7156039c23a8471139ce4ae7218ed2dbd724deee197974480753215d0b906667c24337a03e0ad55fc326b10974383b50e1fc967938479a84b3c04a9cf7019ca34cc239de4a9c57029ca34dc239d14a9c1f019c634cc239c14a9c6f029c87988473ac953897029c3926e11c6725ce6d0067ae4938f3adc4590e70e651e2ec217196ca8e0fff761eaeeaee56118415f89654205b810afc58ea4981aa132ed90e51fe7cad78d6bec6e64ce0a1f994600732d8439afc0881cd700703b8e3a8e7c6c5eb1881e278494f86b23515ca9e2003184f89b2b34439c107d4ed3be70f91c1eb4b05ef51e0870599803729f3f0c83cef5d006f0225bc5e09caf0e8444cda362783f9398039d12498132d84f9170073924930c75b08f35300f3509360165808f3330073b24930f32d84f97b00f3309360120eae91c1fc038039c5249884ad723298bf06300f3709a68d2d9cdf0298534d8239c942987f03308f3009e6a116c2fc02c09cd6b4dd18b64f442801dd18d329518e62d1733b2a999a340abf37b826d0570b499177a342de0090cfa0de7c668dd8d4b84cce0bdd20e0d9d76fd90124f8c2a64cf0d1fb77137adf2e2a946703ef9b498972444c822f11c2bc59b7339cffdc3bb7889ef506166feb6d52d86405d56c007b5626fc36b952df4694034116309b12e5c19a2c20d94ff590a2dd43857612f0d2394deba5b657a7fe01bc742e35cae9620551b55c37c137a5e7a3969be55a2ab59ac45da3635f99df02a09c97897d6bc73affab54b5585495f8559b478a4e07088fcc04c289071cc2a700c2f9f43bc4bbd311d4713a73e7ecd83ea7e30900718149eb3148a71892e1cc03e5f542937092ce8923c3b91ce05c64124ed2199b64384f063817536ff3e396db7907d0ec8eef405eb9c49c295a367613e7024f3c2a1328e11ccd054e257c8e5ce6bcde79695b264a703294db81572ea51fbe80bd956bd826816e8658eebc498a9aed1cf9e2c0985d6f2c98fdd611c02cca445746bdd88ca1aeb1775dad0557475d47dc58caa9096468af05688b3331cc96ec7201c2fc936cb1c0540073994930090780c9601e06602e370926e1742e32980500e6d126c1249c684806733480b9c22498845360c9604e06308f3109a68dabd5260198c79a0493703a1719cc6100e64a9360128ef390c1ec0760ae320926e114583298a300ccd526c1246c0191c11c0e601e4709338bc5f61f059bbc4558be934dde5a08fa94d634e53c4e7f6731612e4ad6553c12f8ea5a93601296ef6430f301cc924cf4bbf3de4eb5b162c6067ac9f0f501f8d6517fd35ae18b9d13c785798bf86d1ec8780b002dcdd477870facc907a7018465994038e180433805202c37bb3a44d8ab49561dda06aa43eb33353dc61b6283a344e4836b648316a7021fdd60ce2c611bd7f91e0e506ecc54299e682f719ba76e1d0a805698b4ffd6242bbb3afe09701e6f12ce022b71de05706e320927e95a74329c17029c9526e19c6825ce5f029c5526e19c6025cee700cecd26e124fde60019cef90067b549384937c927c3590b70d6988493f4130e64388f03384fa0aec827f789a4a54235fe9126c28afc7c2aa0e301d0da4c6cb937ced71d92815e24b215929b01bc3a4a78fd58b28b4fa357a213ceeef8840c2ae83baa37112a61070819d42a00b5c144a88433e4c8a01e06a06e31112a61094f06351f40dd6a2254c2d91f64500f0150b799089570649d0c6a3680badd44a884733fc8a00e05504fa4843a8ec50e7a442f832964de0711dd88447f5e31fa6baede57308b458d56f5fe131a612c9511f80221658493cc596c68e346d223813fef30775117e19c3bb2f1d11f012fdd69cede89a49b0790f9e90e00f3649360dab8e1f93900e62e9360dab8e1f95600f3149360da3811e24400f3549360dab8e1f9f100e66926c1b471c3f34d00e6e926c1b47157c42500e61926c1b471c3f3a300cc334d8269e386e7e70298679904d3c69d6cf60098679b3d8bd9c61db97b83b6fb6e4abc1d255e7753a04ad18a77655750ee6443f6154c06fcf29c4c6fca9b7cb7878d3bd98c053e796ea666322f143d9a9b7c3d9e339dd76a458836cf64ee0f7c750f25d04e7113791d1dba7654e89a01747b9b728182fd1b07f40428cfcbc42a4dfe81e50367956611c077be19bbc0bba34735c263dd712152cffc880aed59a0c0b9c0a46d50491b93649e3a00e0bcd0249cf956e25c04705e6412ce7156e2dc08705e4c8973088b5d27378b6d637cea420353536b173baf9731de8c5c2ac0ba5f30a8cc4c8db32b15e41ea0b0bac4a429e193acdca7ee3f00e7a526e12cb012e73d00e76526e124fd5c3319ce8b00cecb4dc239d14a9cbf0238af3009e7042b71be04705e69124ed2a90a643817009c579984739c9538eb01ceab4dc2996f25ce3500e7359438bb0a9c352260d5df5ec7e6c8dbc592081940b2afb8750700afcd54df7b9168e5343892a733fe0db7e5720962995882586e75dffb5a00f43a73e619db387d661068b95f9f897175b5cd9fbb28769de8fa500fd9be3b5819f0cb1b32b128f640fa52d11100de8de6ce78272cc1c9067f6f05686f3267f2cc042b676fb60139e6cd26c1b471c2610b00f3169360da38e1b03580796bd3568b5c51ee87970913395995bd14a0bc2d1325f9c4cc97e46443bf8f81e2e6f64cc03b34f3f0c8caeaf700bc3be873c48d9a4d268b1c26a5ac542ab45eec51c307cfec6b28b60730ef34774221616143e6a763400e799739bbccda58a31c03bcf46e336621158bfc73b348fe5c5c152d5ab29d96ea8197de63d23c0fd2850364f9e91480739f4938f3adc4b906e0bcd7249ce3acc4b91be0bc2f138dc9e4ba85f3ad5c70550360de6f124c1b175cd501980f9804d3c62d273600980f9a04d3c62d278e07301f3209a68d5b4eac04301f3609a68d5b4eac0230f79b04d3c626e63100e62326c1b471ccfc5800f3519360da3802743480f99849306d1c015a01603e6e52839274dc9cac41391ce07cc2249ca4d523bad59600e79326e1249de64a86b316e07c2a139f732c6007dae71caf671ec2a733b16e2d71cf7b21f3afff9dee08ad151ba390ae04de17a1da3b0ef8e93394900748c895ce431c70b95c18b898a9e580d1d9009c9a4d08966c41603100fb6c26b6f15160d57786a3878de355a76cac99ce00789f6bca11ce8cedcebd8b0a2503289fa7443948a09ce73cb45400e39ba46c91af7bdeba467e457386d8937b93bc3fdb39963b6209774e22ab0bb40505d90be6cc88b731d97706befa2225caee0950aa9892ce0f29a02af54f05185f327b8f39c2de51b23de6e602bc2f9b3b5b9e70b08e6c66d32f405efa4a263200acdcf73200c27c942c0368093cf455ea5d1097c816bd5a51344f78264ff6f695e55d80ffbd66ce346ec242886c1af73ae083af672229e73526e732d1b677f7a3b17d9bb4278147be41dd47cf81cd140137e997331751c19c0060be9989e49d17a7c56e77f7dddb00e55b99e8011d7fc0f5805600846f67a2738e7be32c51dd69104a2c705e2915897c31db2afa3c6b9d7bbcae59c36c5ea33e11807dc79cf9f136ce513a12a0fc4126d6138df7558b6c2ebb1b00bc1f9ab419ca24ca1a25d966287f0238df3509678195386f0638df3309e7782b719e0d70fec8249c13adc4f95380f3c726e1245d9f4e86f31180f37d9370926e094d86730ec0f913937092ee614c86b306e0fca9493849a72292e15c0570fe2c135f2618c70ea42f13cc02f83e3069ae1ce99755c97016808ee09f9b849374d51019ced500e72f4cc239ce4a9ca7019cbfa4c4d9460828179f9caf65eee443fbe6bdb50279e38794b846b0d8aeb5e8d16f77b66695f89bf76a360891b304601e2d77d3d20c4c87994d057b2c80fdab4cf4b1f30ee2398c77faf2aee10da297bdd6eaaee03a80f0d7e64cceb271557a0ec8297f4389927f6c638948c4654c4d1fc4c62309bfc1469687b6013ef95b73e70fd9b833d25500ed47e6ec6938cecac5fe6f0098bf3309a68d03693f03307f6f124c1b17fbbf06607e6c124c1b17fbbf0e60fec12498362ef67f19c0fca349306d5cecff2a80f98949306d5c5bf13c80f9a949306d5cecff0280f9279360dad8b0fc00c0fccc2498366e77f62180f967b3d7fe10b689c8d6fe1c093a413ea7ee0489d79fe4aa3e41cc97232c8e5a52813c1380fc0bfdb2d468906e6f26efe8d8cc8e141dc7357187816dfc3c7d739011fcd59c49b0363637f300cabf99343da180b28822f3cc8700ce2f4cc239de4a9c37009c7f3709e7442b71fe11e0fc874938275889f3c700e73f4dc249ba409a0ce7b100e79726e1246d2d91e13c13e0fc97493849f7da26c3b911e0fc37254e7ea2d69ddb374ad91960fa8f495e3789b2cf9dccebfe0c707e6512ce022b71de02707e6d12cef156e23c0fe0fcaf4938275a89f3e700e73726e124fda22a19cec701ce6f4dc239d64a9c7301ceef4cc2493a9a4e86f30480f37f26e124fd120119ced500e7f79438fbb3e84d4b398706c64783fc5b95fa171110f6b493cd31ee05863278b73b19d6e13eaceb58ecbccde4677812a2266b39ed02a82394a8d58cf849ec40db75e659900934a344a8661f2b6fad13fec7b380d9125eb9764cd3de4da11703ef6c4e8936d862031b27250e01285b64c24b539b234f3885812c0f7d1864002d9bd64b5d51ee1e878403c3647b1cae075eda8a12a5da1d69ac0fa8cd5f5b9f06fcb03525bc2c8d1f069ba9443879966ca6d22ce09b6d28f1aab613dceb50975bda5d6d7a07786b5b4a9c437dd5a64a065762ea3f5c3247be9cb1af158ca2c23c01786dbb4c144ec9cd5ab27126e822e0b1ed3391bf2a8fe509bfccb782f3c06bf577009eda2113f92b568d8add2584b06f8a0ce7c100674793709276f591e15c02707632092769473419ce4d0067e74ce04c7ec49e70312c5947f4f7a068ea6212ce022b71de0f70763509e7782b715e03701e6412ce8956e2fc1dc0d9cd249c13acc4f90380b3bb49384977a723c3590c70f6300927e93617643877029c3d4dc249bad91f19cef500672f4a9c6a27cfb14dd1c54cd605f23f80af7726fae779c0eb85272ad99be523f6c18b00787d28e125b7d4551532f60d0b0f038dc7bea680b4717cbd1300d9cf149084634364208f0220fb9b0292b05f880ce47c007280292009e77b9081dc01401e6c0a48c2290964204f0020079a0292b0ea4d06f25c0032cb149084f38dc840ee0420079902927040970ce47900e4605340126e384506722f0039c49c799a36ee77d817a01c4a8932d8de5d05566eb8fb5fe6c11c66124c1b37dc8d00cf1c6e124c1b7740fa0a78e6089360da38b7fd6b0033db2498361640ff0230479a04d3c60d77ff0d608e3209a68d1beefe1dc01c6d124c1b37dcfd12c01c63124c1b37dc6d06aa46879804d3c669d6cd01cc1c73965311163f64cba9ca00ca5ceae15aef4361f3a46f56382ff32f0bf1d7c8e0912da7ea0472c83c4a7803987fc5a47e514a31ab15737ef92c062eac8a76d4710f15d86a00762c25d821ccbff2c75d4ce52d97e602f96c8cf8f9a88d95a59920e9e75342f66f4de102e5cbab78463053dbd369ef2edb2701ace3cc594e65630d341b6403e333b1221d96f3c9e7b08468c972d80ae0a505994cfc158e12cb99f7dd6a283c636b297751613d1d609d9089d96f0507d0d4c17b41729f9889365272634463ad6c70ce039e38c92498363638170098879a04d3c621b72300ccc926c1b471c86d3a80799849306d1c723b1cc09c62124c1b87dca60298879b04d3c621b74301cca926c1b471c86d3280798449306dec451a07604e3309a68d1d1ee301cce9266d21415a04916d21311ae09c6112ce7c2b712e03380b4dc249fa1170329c5b00ce99995868cae70e6f015d6f19d91d8e0c5f21f3f0cda2c4d79df10fdf94c8ddb4b9a8cdcee31b9dc7ab4517f1896204b3429cd987b125c0389b12e340e6ed59e88efdac71d4755ab0a2bbb7420c0d4f677cfb32dedf5ee208e009bc8ca935bef516c25d06e0cec9c400466a5bea1256e2c9c6de6f0468e75227ff7885918a29e98045418408e329a0109a97891d0b21c6603bc212f62891ed083b07e03dd2dc0c807080832c03781f6400f329d10e1268e70aff5ccaf8e864b92caeca8428353b64933000f7e352e76f57fc6ce758ee882db3b0f06a07002fc8440e8b4d6428141e4bfcfd8cc954396c5b90052ccc440709ac60a9daaa577fb5bb42d51bf8e4a24cccb88330136701f6829d0dc02ea604abbef2328e1d685f79b91a205c62cec42f1b8788e701944751a21c1c00659113261752cf163b7fa9167f1d6db13485aa586a078aa5a59488fbb0e8096035a2bb64635c9fb57120a412002d32691bbe499438c9b6e1fb046401c526e1245d194786f3268073994938c75b89f32c8073b94938275a89f32700e7d126e19c6025cefd00e70a9370924e7120c33903e03cc6249ce3acc45909701e6b12ce7c2b71ae04385766a2e59e277ebb473e8057c4dcee117b3b3fd60184ab28117612b12917020a45f391bfcea732f0b14e1b97c07605e8569bb3af978d53b9478106e471994ac8a5d20bcbd936998833d005f70915c2a78137aec9c490054758deb8aa5dddb6bd27f34580716d66472d0ff48f2df605684b4c1d1026ad089115457f0568d7998a96b4054486f61280b634134553fe01373a3402202ccbc46c4ffe51918ccff6249b483308e02b3767ffa47c2b87d76e0730d79b04d3c66afb1d00e6069360dab802f30a0073a349306d5c81791b805961124c1b57605e06601e6f124c1b57605e0e606e3209a68d130ff602989526c1b47105e6a500669549306ddc83e64e0073b349306ddc83e60100b3daec951a84099fac813910f4bed750e26de59c2c158136380f100e9791f5061d043cf1844cf4b28f6d4cda65a273d89d7969fb02d66700c65a93c6c14977d8261b077f10e0ac3309e7782b715e0770d69b8473a295383f06381b4cc239c14a9c3f0438b7988493742d2519ce6300cead26e11c6725ce9301ce6d26e1246d4692e1dc00706ea7c4a936d5cdf7b57f6c1e77ac02f04eccc4522a3e256626e3b3da6a9cc661b9acb4bb0ba8ca85c01221006e9b5267f5f4c1a100f14926ed8b443ad9800c677fd012df61124ed2ee61329cd300ce9d26e1249dbd4e86b31ce03cd9249ca40ba9c870ee0138779954559a4439e44b5655fa061445a7988493f4b3a16438f7019ca79a8473bc95382f06384f3309e7442b71fe06e03cdd249c13acc4f90ac0798649384937df25c3b918e03cd3249ca4bbc592e1dc02709e65124ed2b97164384b00ceb329718e64feed4f78d74899c3832f6251f1f4560e61d316a63b7fd58a9176d2852fcf4488809f032afabb2981f760f1e78244e7ac6420bb5279ee10e0b9e7980292d023c940f60220cf350524e16c4e32906700907b4c014938c7980c640e00b9d7149084cb08c8405e00409e470932cf57ba37a04bfff0c5ad85ce13558e3ed5e28c47354365fd3eaab27e3b28ebcfcfc4bccf64fb4809473fc97a48fb00981798049370122d19cc7e00e68526c1b4b1efbe3d807991493009abf564303b0298179b0493b0224506b30b807989493009abf76430bb0298979a0493b0664a06f32000f3329360daf805ad6e00e6e526c124dc14800c667700f30a9360126e0a4006b307807925254cfc3b05b39ddf15ccfd8656b123800bb6ff3b052b9807f62a4ab0fd05d805ce03a562c2225ce7d664df7a215bfdd61a60bdda9c6dfc6cdcc2623048fad798bb0d1561794fb6f0f06ee0a5d752afd174f3cb7af1d91cfb7a40bb0154d799bd5a98b08149965f1682447e3d25de6ea07cdf22ca6f3e7fdefd36668616c0eea282580a7cf4864c4c69809524ac6427af1a91f96416c07963260a9ed8249f4cd163e3fe87234072bf2913d5236c602eba7a64e3d63f87002fbd39132da354aa4784431b643e7a3e007b8ba9606dfcd0e86e00f65653c1daf809e7e900ec6da68225ac9d92811d07c0de6e2a58c2413a32b0b900ec1da682b5b182350080bdd354b0841dd164607701b077990a9670b8840cec4900ecdda682b5b193ef6800f61e53c112764c93815d0ec0eea304ab76a02f604db0033d19be5300be7bcde903b0715fd08500e57d26ada127ddbd896c4c7422e89dbadf249ca4db0d91e13c0ee07cc0249ca49b6191e13c03e07cb029e795f8fb4e6ddceb7bab80d9baa54ff8ec18e1854c7d55b09479bb2ce5b0398c2f3170f7612a75ce1788aa4f3d5bebe47d2b9d7fc12cb0daf9a7bb1e115b69cd62db588db8cae59509d955ce5dae591dcb1be63cf210778856d221b245d137dd615eef3cc3f7c8e5a16f6745ccdd456ab1f35bcd6a691048b2c516b14b9c6b7c94b65c84b0d9d16423ab15318ede652a3bd24670723fd8c6e3c501664b5dd547dce6c942b7c2897389d0a4d679a68508c74d8fd9918ee04c8dc6cd135546ae05375024d255da84ebb350c4a5c4894389381637be953bdc792c32c1f9e5563e731aab9d39726148953c53d713cbe416892fed618e3da24f879569f3a5443172dd9fbfbf5e4ca4291752e7258c69e2f8e17ed9218e5572f9379a0ee8f8efe7769766176eda2bd2def96b9963795738ffc45eadf337576a605533d6f2ff01feb6d31510670300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/671203a1562c055419feb7a0772d1645.asset.meta b/Assets/SerializedUdonPrograms/671203a1562c055419feb7a0772d1645.asset.meta new file mode 100644 index 0000000..9ca7cef --- /dev/null +++ b/Assets/SerializedUdonPrograms/671203a1562c055419feb7a0772d1645.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cfae0b3a570d4fe42bf4d7f8c7af95d7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/68d999abd6627d04999b5bebe2438687.asset b/Assets/SerializedUdonPrograms/68d999abd6627d04999b5bebe2438687.asset index 1c875ac..5940f28 100644 --- a/Assets/SerializedUdonPrograms/68d999abd6627d04999b5bebe2438687.asset +++ b/Assets/SerializedUdonPrograms/68d999abd6627d04999b5bebe2438687.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed585b4f1341143e53d816a48a981834f1c10713300abb40a26f265cbc101508a57d21a62cb060b585a65b15ff82ffc8ff6682df39bb4bf732ed508148806e3ab37339d7ef9c33d3e66cc2473d4753a1755aa4692ad32e1dd201de16d137f004a3687e8d5ae8f7d1ba587b4e8f0d94fc99500fd02e63e4531b94df68077d4dd64be4e17d19b41e463cbb87af875d6a1044655aa2555aa17175dfc0a222447e38a7d82e358476817e62d513a558882d4be3684a58f165ad01a5a37d9bf449cc6a606d07342daa83e7b6701c9a645ab129ea281fbec7c7397cade3e3e33f96122bde81af4b4db279413dedc3dd11a5d9d1cc3a9f0b959810b16d98d404038db565f1659be668566bed43558ce9bd28ad8b1d3561cac252227e6744b072753c5e0c2a1ff36f056906ab869569fa809ea9b66806cedf4c71a9406c1d707bb481b629fcb6a07676a7c92486354db30e9e41d435301339b489715d342c49fb5d34f544fb65ccb525070e90050be88f445ad6f616de7532374297e975d4075fb7f920c4239896600d6b6f0f7098dd20f23f1061d7e707c2341cb43947d4af0c12373e0c8a8c25453de0311394d5c4dc2cd93c545b190ff66f63d6c228bea3c25a4206bdc79a8bfd9ea0c4f36be0e84236f39b17099d629ca488ecd47b8d43614aaceba06f25cd9d235b8e934706737b399bf94daa27b133e6ac6659d6a0c3caa7e1523ab80a3c59ba50b8929c837d35d9d72bf8f4a0e4e5b04c82a25e9d382fe98815b968fc10d2afa1c869aae2d997952a2ae7218433a3b87b79878e5f37203251e1b09a0501367b949b1cd00dbe9c063e87850ce97cf2b28b4fbad910f8a52c7be6c1bf2dd787cf18ed8ac6eec909c4fbe21655305bc32e6b38e505d6cd2ae0516a04afaf25a05aa05c130a1ef964b3f6cae9e38ac5b21bf0139f8d1bd06b5b42d27ce11aee71e1da3bb7b3d76445703a30fd9e7838aae73aebcc3675bf6714428b225ef0343be0ca597a8b518deef2399b87ead93f4693598b91f86dc1786937657ac060457e998101e3530d13c3931f6c0c8851ca2a387d09d1d349991206d111740ebf3438b4e6e19e5da9c83e1efe70a2a798bfb9a01bed698f906c568c4a1d3a827a3cdb0eab5b224b18e24ba779311ee5935d22a5536af525d2e1527bfb9a5741877d772751341c2e1aa31799d945c12b40cc97c3f4408cae9293967596abe47022d3add31872cdb3dde16cb94bc1bf402786293516dac2307d94bba20b5a57fa4e42d98cab7ad1e769d39ba739dac7e2c19bc2a07ea9325867e959b2b9d803159b0bdb95b6ff5e3a4cc7a5d697817cc0dcc355a025ff99b6648ff51757ec5b982f160000 serializedProgramBytesString: - serializedSignature: 77c4d608ae3ef868f734b4b96a3d6578256f06ba58df85e80c313a6cd774489e9afad296f814cc98bcd73c61cc605882c919119606c497f17e40e8c529085902 + serializedSignature: ed541e87bfe4eda124c3f762026df4581da9dc9c374cd449ff50731b69ed535394d5659f2d63d2309d7855e95fef69dbd3a966fca836920987fed79e30395a01 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/699261d683532df468f1ed17ff8c8cf1.asset b/Assets/SerializedUdonPrograms/699261d683532df468f1ed17ff8c8cf1.asset index 6b796da..6132779 100644 --- a/Assets/SerializedUdonPrograms/699261d683532df468f1ed17ff8c8cf1.asset +++ b/Assets/SerializedUdonPrograms/699261d683532df468f1ed17ff8c8cf1.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9df7571c4712807b915608814119e52c010aec020a4846208284b08c02c9f2f97c3222db2061822c9f4f67fbf2f972ce39e77c3e5fce67bf77f7c3fd3ff79eafaba6475b3bdbb5bbc34e0d1e09edd3f6cef44c4dd5d7d5d5617a86a284d2ff6287f5d780ea51edaa56f5ab617553ddd0bfda753aa53fce96bbffb29ad1e998fe1ed47987d5ae1c67c2bfaad826fddda5b766d59c3e735e0de97402f37bd588fedda5cf1dd15bb07754ff1fd147c596eb93fa5587baa42eaacad8861c2206f0a459b32f0676c556eaef36f5acce1d41a5e02209ccaad45fbd3a6716f3a6b4d2ee718fa9c7d1ac299d37a4cf9951935ae67594b87297d62986363957d0ff57e8ff1de6f732931699fd67c971ee7e733ae69f23db2079dc6c2f37f99d641bd2b8499b4cfe79a203a4c5266d36fbbaccf64a939698b4c5e43f64b64b4d5a66d2559ef35799f48cd97fc16cb799ed87cd76bbd9ee36db0f98b4dca415265d6dd235265d6bd25673fe45c756e4117ffdf5d7ff67f24f9b741db1653b6102e96623e392d9de499840bac593bf9b308174ab27ff8c49f7916bee25fb20dde6396733b9962bd33d0ed20de6f8cb667b3fe109e9468fbc2ac217d24a4f7eab49ebccfe2b641bd27a93264d7e0fd986f488d9dfeb9177ccecef23db901e37e9518fbca326ad65e49d34fbfbc936a4a74cdae891d768d28447de61a2b77b3df738480f9ae307cc760dd94ff5d9648e7b84948bcbdfe5ec1e07e97a4fb9adf3ecbfaa8cbfc66318bdceeb7832a8a655022b7e8dca3fccba67e60eb0186be00bfe55e165e774289bd6022c51ae1f63e89c6ad03e618b729b636544ef76fc1ed4474ca050b898e712af645c02949bd49f1112a267f5fe4e8cf010a427744ead0e1a1378d613da4d1fd39f742903fab2933acc8f68e79bd79702794f68b5338fcc65128473ef393d5aa6d3da4ce93d2ed069bd3d891af6e2f72dd47404b5efd2fbe6b0edbba15bbf369ddec6ab65da3ea37fdbaed96790d975b4373adc7ea769738ba9435b03da27b0fd592a91c5281140bfe251530d9727b0c57e29a32496183a41063a325d46461d228ba5edab5709ecebf46510f46f63a68576ff86bc9b2865501f9bcd1e3b1d28f2436845aa94553cddae0695c0bedab61c7665a30af2aab147ed57ff787c7912b4f4f28f59f827e3a64dcb34a9c463126c31928b38c9c5854a5e66f319ecff8e89fa4cbfdee73486673177022368adee128fe87dee2003e87347bafed28dc7cea30ed93d0b62fd760fac19136a321c2c098556823e724829217d394f5a6e2b151c7df48658937b51f73194e3bf1ec36067a7d73559d2a5483ab3a3954b078e60dc56638060995dad968c4a53ca579a15b6e2c1414d4f88c593ab61cb563830a2acccbb70cab1703666d8965d03ae688a6d4503f42a2c4a811765144d395f342bb9725fcdb9a38f722fe184afb10a7fc19753ade2b0ace5caca0796524ef8ba00849771c2d75b845754f913fe00c77c4300055ace09df1840815670c22b03d07c35277c53009aafe1846fb608ffcfbf1ff6257c2d277c4b009aafb3084f60cdbaa616a33b03c30fe8dc8fe863e7b2760fe0c8ec311b66bf8e78f8d8e335748bab6330bb168c5e5c245f6fa38da126dc6eca1c0ebde138ff2de1f6bca9ee505c1725fbf5397a1b6c1501e8edb4a9e4ad043bf84ab09113bcab40c1959ce0dd050adec409de53a0e0cd9ce0bd050adec209de57a0e0ad9ce0fd050adec6093e50a0e0ed9c60986eaff2088e3da837af9b21f629ed91cfa9a4baa353f98f1f9b76d8225b59d891ed9226f5a472a61bfd47b6eabc235b0d13d9725d9f8b6c3b398f3868f308b87b378104c3f58720fc6497cd52f09343f954aa1a5ef06e0ee1611b42b86937aa376eea5d6163f4836b0f87eb4881b8f672b86a6db8e0fedb2c69b56581f901b48f03942810d07e0e50d206088ebe652a3e54f7868210f901708003505720802a0e40bd0d00c4cea7f5cf413c7606fbc610afc3c250cd61682810430d87e1a80d0384b7260cf993e807a7750dde6b00ec51cd24c70153a7f737695f4ded6ff665f641ceec63059a7d88137cbc40c187399e276c3c61ec0bf44ea9abfab83b482cf5bbfeee6f3fcc8e70a63516685a2d27f8648182139ce053050a4eda04c3d402743a0b9d71a9e384370520bc9e137eda2afcf9763fc21b2cc21338af06b2c29f1469bf1b1d82bdbf034b9396795825708a0f7c26786d203a7abfe2f61e36ac8aaa165283eb851fe57cea4c000e7b8c13de1a80f0e39cf0b6006ac3099b70a80ded16f749966716b12967ef255bf84b3672f6740400eb2427fc6c00c24f71c2cf0550120f7225d12956124db64bc2262c012de846fa699be455b89947a3b68d17dc6c130c775760d569a1b76e5ab8f2bd6029dfca97ffdbe8a77ccfd884c3f1b0ce35a36f041292e6e3a7ffd3ca795137eb45afbdfa6a33f9c29b0c7ebca8cd72c904deee599c4513b0663b35540bb651bd68a198c0bb4fd9964514a611d4eb96d417d3a6c2aaddec8b330ad3826b57db6da58fb7cc9e5c94d2bf6219a706eb03976d3e80f7f16ab3d00f422f8f276473872be80ed20a714ed1c1c5ba1e5bacab57ee12e65e7de6055dd0831a3b54367804e319bcee536672aa565dd39f31ccb9a6a5cf6a7d064d21cd601e2db4f4d56b7ee2e859ce825e9b056758ceb028645a1f346734ef44cd9d75521d5ab767743eecb79f9dbe9e2a38ebce71d6f5d9acebf654e4f4eb3a76ddd4565e434d6f685d2794bb221884b4e2beecda67cf0bcaee4eceee7e9bdd7c30edc12b0f63f84af7c85b774ff76a4dd76ef9d1f93ca7f3804de74e4f59d1abd292eac4baecd6ff3e356e254dcfce961354f97471b63e62b3b5c547f9387bc62cdaa6966df1fbb91c3fb63dc4d976d5665b5b20b62dacfc16eaa917380b1fb559b8cfe3a929aa8e557dda42ba982053cb549e1f2d1fe6b47c934dcba605c400c88747062166bbe7f6ea5a378e756d244bbc4fefa2f9b1aa9bb3ea319b552716601574c3e6306238919db7c2d6b3f063cb45ce9637db6cb9e3c396d4b4d2795d22030bae2f61e570845376f8e17a89e3fab88d6b73464b92aa6f0ecd73a8c1149675b6da999e436fa30755a72f7396bdc566d9d59c9639fd98219f96159e130c8d2b1c8d6b361a07d8fa93f2326f2408aac5e8e1347dc2a669579e7d9b6e1c9d409c9ac6a519439ea8b5782d642f67efa0cdde46b664bad1a271357ab707701387d6c3d86a3a2d69764b83e8d1f471d65c0fc6cf6c356261dcfb394d8782d1f47a609a0e709a0e2f2c920511a31792134c247b84a33162a3716191690463f355cee6519bcdc7595f85a5ca7dca59d2ec583f6bbc75ceeccd4e203d6f4093831eaddd9262fd89c540c9b3184966f49997f10cd89a55095c899e54f93faa0ed79ec2a59193da8a41fdcb7de629bb049872e61e5c1f55de09c9853ec39ccb0a279ec2f9a36a903c176bb32eb74dfcf3dac5c6225796268dabd0ef354bc769a9162570adf8a1057a536e2d26e06acbec3ee47fc1bb23e0a28237db68014e3f6cd20c90fab5d461f33be795722d403d8202dca77c03786b03b857abd66f1887adb3fa331d53aa385e9484127852125331629a8f181ef807b1d023fc5c60d57161cf7a64068e0a0cd5b7b57ab017e40d7b03093e37f146d3fc291a08aa2d5e529da582a55a297beb9284566af23e6f4092d0804c01840e37de626dbf2159db5761995df38c518e7baf53c80b0e4ad26a7f693e462c24029c54a900795312d94a836c501f30a692b2b86aa4701d24b8a6257195195ccedcec1cce0c0ea197d5cb616b91c2d640b03d2d896db5c13685a77421341879c0f4f62dc49794c3572e856f05c13713465c1b4d1b7736c821db21856c2f41362b1dd79c61636a941b3d0f6b26b8e624715528fba31921c0bb2205af9dc09b0fa37a8e23289854bd2d1bd1c4ba1de504d9ad3090a5f7d404239a18b27a82ec19e98896de53ab8b604f6d17c1753b3c5c75b215520cd72182eb59495c7cc7f668043bb60f126c6f95c4b6c6609bc596735ecd907b84dd28269a0d410501f85c180d417ad756700c2ad6b5ad21c8de1646649bc5d3ea653d4c0c5725c175273c5c0db2eda618ae6d04d7dbc3a890e93d33c146402c861d23c89e0fc3c3523d33415c625d8d0304d70b92b8e277437e34dbc62401f56258a004639618a8a304d43bc20225380f2b06aa91807aa72428b7979f7abc20cab3156b09b6778511e09d2e4432a23dae0d04d7bbc3c35517d11ed71682eb3d92b8ec43a02822db4990bd571259ea7e12442f5881702fdc4f2a26f8de27ed71a9379b8530c72fd604b41064ef0fa392ba73fcd19dda7980207b298c6620352c3a11c161d11182eb0392b8f81958c1a6609b14b67504db0725b1951a6cde677d05ab665c0a9a22d03eb418d0043d4d0c5a8c40fbf06240131c718a412b22d03e22092df7ca9f28ce6cac24f83e1a0e3ee8e886bc704a0c5f09c1f731e92a3b4b4e09a1ab2b36b83a43a07d5c129afd0e4014ab699c20fb4418c8d287f0827701c4bc6c3f41f6494964b6a9c8e80eaad6106c9f0abf724671d2bb8e20fbb424b2cc71a8202eb171e81e82eb33e1c732c1a1bb582c3b4c907d360c0f4badc888e2eced5682eb7392b8b22f9a8aeefda8d504e0e7c3f3b78688de8fda44707d4112170c37dcbf8e13c208406cd0de44807d318c2620bd9321d8048855c95304d997c2a892a94ec6b1087632aa09ae2f4be2e227bb059f01105b6e7c8260fb8a34b6f43f2113423cbb2485ad8d60fbaa243678506f5e67f429e78d25d1bb9d729aa0fa5a18712cb5d4258a5dd9cd04d7d7c3c325fc948918ae8d04d7372471d9c79682c3713164bb09b26f4a22cbbdd445b0828a2d752923f8be25dd62da3b1a515c21b48a60fb76385ec7ddb613acb462f84a09beef48c7b921e5bee42f843e9a58d7b69520fbae24b262e3714f297857bd68f52c9182b58cc0fa5e18ed68fa003d8a7366cb09b2ef4b22cb1ca047f179e01d04d70fc2c325bc865b0c572dc1f5c3f070093f9329862b4170fd288cf8953e0e109c31131b075411643f0e3fe40b22130bf9c709b29f841bf2052717c52ae53e82eba792b84a94774546346733d613603f0b3f8a4511d97675cfbc70340993593f87628f9962afce98ff75dee0b9c6580763db6e35829303ce3b3e0755ea6d9e09208cefc7f6f396e0ec32c1b6ecd27e410df094ca6460a512c4eb436d96e6b68f2fe1b22ca592805bc6f7b4fdbf84722f36e55e948079ec585d00be975ba35f29fe85b5e1dc817fe395eb65057fad681a8f04350bf16b682cd2e54de075135bde983e1d9cedbfa6b1ac28b175a13eed5fa397257dda91368ef83db23bf3b0ce5e0e5e9b53474da33fd08552237879f89b8eb9496c8f41b3c84b6bd55b6368eb044a9d526e8115e35f65284a4228fa8d24cf3cded8792fd7123e42242142bc9256899250897ebbe4dd817af7ef2479e6f9c8f57dece1bfcff4f03f2c7978a01efe47499e793f6b751ffbf89f327dfccf4b3e1ea88fff453a8ae7715ff73ef6f0bf667af8df963c3c500fffbb244f1f2b4cef632fff47a697ff73c9cb03f5f27f49f2f4fde70eee635f7f35d3d75f5bf2f5807c1d3e95d875a67f61ec923e7e18e5c1bff8ff0122e2aa9d0ab70000 serializedProgramBytesString: - serializedSignature: 2d1eba9726ebd5622cf440acf518a770a6479e099aed541a4c08658e5f8014e40ec5fff6472499983752144574f1f7bdf4a0a7f3d0e5c9216610d1dd99458b03 + serializedSignature: 1fef209543af2d30b07c42f07f966b5b0178dea5b18a8144d97d081496b59606f39e2e37ed6afe27d9a3e7ad5d32b4e4d8d9a9eac23602d046bfe3960f3b7507 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/69b7ebf82a40e4e47bd6530d68506ee3.asset b/Assets/SerializedUdonPrograms/69b7ebf82a40e4e47bd6530d68506ee3.asset index 0d17a51..4deefab 100644 --- a/Assets/SerializedUdonPrograms/69b7ebf82a40e4e47bd6530d68506ee3.asset +++ b/Assets/SerializedUdonPrograms/69b7ebf82a40e4e47bd6530d68506ee3.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5adb721b45109d95b5ba58be2048ec0487e0708bc9c52b2754def105e214b99465f925508a12ad4194ac2892ec0abf40f1113cf013bcf315fc049f00a77b67a3d1ee8c56723c7262229576b473e9e93ea7a767b6a59427f0726ee0b22776c4865815155117cf450bdf36501ee01ddc85f58f4407e58fb8d6d076432c278ca4d755e702aedbb8eb8a1e461e8a67281bdc5e163ebe6f63ac8f3baaddc7c7472f278d4115b1291e8a0762d1399f20628f0775659d437639395cd7c52f68f559299ac4e3a6455cca68e972db01940efb3d163fb05907687b86311dd184cca72c31f73b8d659bb848cb724a96597cf2f2bb2bcb9c529755ea1c599fc1a7a0dc93ccdf2272c3725a9195919f19799f926d243be53a8cde5dd853136de151a3f3e518348723930926d19954800998a6697b80b20d011a942bcc614fdc16b7b4285f746614bd37f85a438f060b9d8d4ff1676c0a52ae89b7afb84817f5dfb287919334d0b22abe4349a39e883590fe3822650fd336e166bed8c5b5cdf29e40ed78cf2493c89da263762033f0f603d48480b671df640dcb7c3d624d7dd67e1b753d5e7b2dacbe75942f79b6b8ed1d7cd7cdb92b21d3eba8777a537db0b4429a36610d69efb19fbe63e4341821e833b37219a63d8e4cbfc69878876110645cde4c02196b41381fa8bb253c8edf3b3104c7b7316ea1debf03bcef88af86daa24786e85e620bfa0cfffd4ffdc51f7fd55d77d0b4dbc2a36dc3b99460da306049de8ab3109330dc04d74d9748d128fc8e0e7ede2acb13843fe8d7e07ee31390e19d69900087b6eb4d74a02e7751ddc2064a6ac6182965e4e16045b3652629668235a5833537695893e3c8305873afeceac34a2f3d82790382493a98109cd221c8e7afefad22183f7085dfd631f6272071c4bbe821c6eb0e68c33125afbc19c1548f6781f15cd61e1bc7d3c884705a837029274fb551e2ffc5cbcd4714253a0cc25d1d7dd3935e000fe1603fcba3cff80b607664b2e60cce9f34bf899a8c8e1a8a51f3ba5057e4e3603fc4050bcee7c7c4fea12fc65ed6cc5e56c71e3f28ed5b65af82bae069638b5b1b7c448de368ea1732779f9f370f5983e11cbf3732c745e6f89a1056b43479424ee709c4c4fb3ac5a31417cd14e77514f3f3ecee0417e83aefd02485dc77fc25fa0174bd1edda3f4fc9d63fe2ec48c4b56c1c4cdb48e1bc2f5fc28dc14ccdc144ccb7f41b7fc2b4697541d725554f17e0ed6aa1c207cf102c36b6c228da3d66429a3f5a90e403c08f0386168c684c3a2098760ef0b773e3555d20f8afb1c16c94fb75ff5dc82f70639b01db6c2875d47dc7b55dae37378ddc0546417c9ed8f895aac9e1aa36d7b18db80243d0e59bc1d87f8df62c91d8c7cc423e8ae2b3cda939c92f654a04f26d1dc07608718d885e54f9989e4d4122d14536a29be091c37cb9064858eb5558537d5ba649bcc1995acb4289405a4e7f4dbdddb6de9456255265145caa3e38473fd98de94acc58734db94de87c67fd60a043ce0dc370450a0adca85d13feb24ce927424bbc902c207f013c8a9926b7d0d78eabc6175f1a6172df488f06f4eccd78ef7701d5f15f31c875e423daa2579f5e82aa1f3d31ba7f992eae52b064fe9875a7d882c51a8bdf43f8f82258a821f110885306894c82b2edb5cd90bcc5795bb04bf390ddb5e4bd1f95f27b9961f58fdd9518c3b4e04e094931b40f9b14d2897249481f3b7d069b413dc9a3d508bb640cd29a02ebf89a05af4546ba0661550afd8047556824a13ef33a4a16c3a2d5b03ceb5059c5080fbe434a3a5aabc551fccdb8232ad40f9e9694239b1e53c670b4a5781f2339b505ed1c44852a2c769ea96b8277fb63e6bbe9a5200fedc26c0947caa8be0f7ad323ad2d076fc01e8e4202bd8826c4a81ec0b9b90cd1bb79896ecf2f69d241d05bcab36c15bd42c687396cfeae23d670bccbc02e68a4d302f6bc01c4c5d9a7fe2b30aadb5453e2dce4ccea344390ffa3f9f92623045e320c9509456b6d0729f37c11a7ad7b8ec271c3ceae6dc11e365e386cb4cce065c530d89b0d33c31764e22c3a1b3f475b21d334358f1e8e7b5336d3f657d33927676d345ce8555c07c209c9e5e3bfcafdd0ef771ff0342a4f4e6b12c0000 serializedProgramBytesString: - serializedSignature: e9f35411a09abe8b1abbc301e8295910b37bee51ed9ab87890daca640670d535d2db992cc4f9080c7a10228c86244db501e1e81bbb33b18d23faa10968ef9307 + serializedSignature: 4578f8398127ed399beeb01256a853443f9b934b5afc21c5851b30fd3be5298ff99442ed2a9dae26077075848cfb57d2f98e847dd210a1031962481016de6706 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/6a6287356f88b584196fdbd80e1cd96e.asset b/Assets/SerializedUdonPrograms/6a6287356f88b584196fdbd80e1cd96e.asset new file mode 100644 index 0000000..4a3049e --- /dev/null +++ b/Assets/SerializedUdonPrograms/6a6287356f88b584196fdbd80e1cd96e.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 6a6287356f88b584196fdbd80e1cd96e + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec7d057c16c7f3febe6f70284e71081e3421780b14096e0102156821900029419a04ab52a76ed48d2a75776fbf7577777777fddfeeede6e62e3b6fde7def9dcb1dbf7ffb81e3debb7b76f6d9d9d9d9ddd9dd7836b3fe8bf5b3fe9acfe6b0f16c009bc78ad81ab6dafad778ebbacafadfbe53bfe7b332ebbadcfabbd07ad68f6556f325ffaf57ac8df5f714ebae9c55585fae634bad6b89783e97155bff9e627d5b6cddf15f97597f8aadb762b5ac8fe6b13c368bcd64ad63adaa81982f3e2a97bfc578be62f5acbfc7b14dd6d36221144f245b3c6a6dfd35d77a522e9eadb28456ef2d607b8b6cadb29e2db5be2963a516e61281586ffa2a26fec1ec4b96bcf696d75ed69ffaf2df19f2dff5e4bfe1fbb5e5b54f92eff705dfd507ffe60c6d4bf07d3ffb1afbcfbad6b17e86f7fcdbafe57bfd6dbcf88a0458d9f29a23af032566ff24e4af2bafb9d5e43711c62080950c67f5e47588bc0e96f20e4831fd613647b1f3009e758d3320cf1090767df09cff36d447de65b9c563ee7214f75639c6cf92e5f7b17c7fb8bcee22af2324b6f54e4ba52fbbcaeb806ae41a697f5789d9c74e3363adbc1f25afa3e57537295b8694351bdcfb954595e91889199769e4687e57eff3e703e5fd58791de729aff1f2bd5c799f97a43cc9e89f92a9964c6310b8b7fed45a9c004b95736d4fb9cbba5feb649bc75a7778f203f44f8b3b41e20d4e211f753cf9a863cb523bcbfd5eb532a8f7274a9cba127708b8e7b85b0df32679ad7d8bbc9fc4aab76d59493c9b6ae3d4535c4fb3d3a9d3d2febdce48e6d6e529d5c8a9ca52e928bce7b8a51257e57fba7d1f53f2e4021cfefd500f6e7d0f6e7d89ab6c445e9272ce90d77c799d2baf7358653d9ea9f23e4b5e67cb341b30b70d68209fcf74be6d7dbc216f89caa8c053d6d2d6c71b5683a9be9f27aff5937c5fbd33df87ccbbcb6b8324d3541ceee123cd86b62ed4fbdea30bd3aac1dcd3e6b75e0590c1c2a97fa0bcdf4b5e17c8eb42c97f638f1e344e420faa93656f290b036560c9d2a0a9bcdf475e17b965618b3d320d4b9f4cf146127338b8e7d79de4ef23c03d9735df4ea7c1c312b3505e9778645e4a27b3e5138bef766a04742399ef12e957b19dbf86393676c302f9fb328f6cbb3b72d7cb03df2a3992a90fb2aec79b7a386e2a6550dc9678dedb05dcf36b13273df16febdb464ab7fa81dff9b7bb827bfe7c7992b2ae64557596e33407693797694bfbdfe864f9aebc77d53dddb7fcda0cfcd64ce2bd2dbf5bc5aab663ea3d9eb791e09e3fdf37c9bcadd6c867a5bbd39804dfae616efb33cfd187bacfcbdfa49f196fc1dc75ab857c3ec8f926562a7fdbcfbe6fa2642993dfb404bcb4b4e56bace42f97d70d4cdfceae033cc8fac8d63b697752ef572448ab48beb3d193ef6207a7611b29bbb2639b98bbce78dfe5bfed2faf07cbeba1f2bad979375fd58383e4f510295b2be6b2cdec40f03bbfee2c9f8f02f7fcbd031cec9d15f6611e5975e579b827ef3a1b9048cf8eb0df9d7584bc3fd2e6b6c97992b7873d3294b1c4fadb51e6ab3573db8fd6366ed3919ef7dacaf746837bfefc2879df4e3edf0ddcf3e75dddf82c535e95bfdb463e1f03ee79fa1576be9a4d77bfcfba837c1d2dafc7c96fdb8367b23d8877707e13cff9b363c06f1de46fc73ae53147f9d05b6c59b84970c97282bc9e28af89daa1eacaa19b4c43d5d97ee07bcecb588fde54879748874eb165acecdb9c2aafa7c9eb1c80dd4bf2d3d1c95ba5bf7b3278c6efa5dfcb4e62ae763aa12ccabfdfa99afc6481f7f8f5741ff94ff4ac8ebc9e25f3d689b9fb7b9dec726ad12601d6d9364f6d651bc5ceb1bf69a9d238d77ede5c95b51a53395da6d1d9e1ba996aa7ce97cf3241be4f92bf7501bf9d297febeafc26f0f8b30b3ce533cef3fc4280a17bbe0dc8a07b7e91fc7dbc2d7b4b65a32ef6e4e5248fac5d98cbc6b24baae655bc03d34ec656aab2bc547edbcd5396b2ceb5fc3801d665fab26cf5b3bcbfdc5396db3d65a9ec14ccff15f2590f506ecaeef6d4942f18571578fcd9954859aae757015cddf3ab810cbae7d7b8cb7267d5ffbd16294b283f2ccbebaae655bc03d39e904459de20afd733dcd6dec8dc36736212b837c9eb010970315b9c0857b51d3727c0bd15913795f494ae8f91dc6631b7aef37b4b6f5b3f9f00eb36a6d5f536efcbfbdb995bd7950e285defcdaaeafa9df2191ceb9f297febcbaaea7a3fa027bde5b3bbc03b5057d5f3bb01aeeef93d4006ddf37b994bd7dbaaf6ed3ea6d775283fd4f5fbabe635ded793f6a424caf2010fcf8adffecceda3f5b7cba7ad924fd9c47358e2b6f1411b7fbef2c71f92780324fe6470cfafd99e74b3ed74db35b571da2b5fbd91fc3dcbfebddde7f2f7ffc9f4b6c9fb87e57bf99ef71eb1ef775763eb8f79f87fdca32b031d7dabcccba3e019cc5b2e73fb244fc8df55ff49bda37e8365a57cb8ea787d525e9ff2f097c3dc3eb31aaf7fc6917f77652f9e96d7adceb3e6aa5cd5b51190e359bdae0859a1bf6dea23a93c3f574d9e4d6c929a831a04ee2d3de8509400eb25f9ce9604efbc22afafcaebcb127f0873f7dd54dfe135793fd4f35c8d21dfec70dfba03904361f36fa62491ffd7e5f50d893f4c7e3b15dc5b79eba8dab637e5f52d793d13e8c0cbf6b5e31df2aabe79db93d63bce377b75f77ca3fcb1547de3549fad93f91dcedc7664b89dff4edef1800a9658e7de95d7f7e475bdc453be4e36b857f61aeb97559756827cc555fb3c1cdcf3e7efcbfb5de47335c634caf3be6a373e90f7233defefe6795ff6a9d987f27eb4fb7df611c0e1f71f3b798babb9d04fc06f6acef253879fccbfe5b331eeb4d967ccdd6754fdc2b1f2bde9e03bc8817a2ee751e2e33c791a2fef67827b7ecdf3e0aa39cb0f3ccf15ee048fbcaa4df94a5ebf74f2b8d781e01bc027fbc28d9950a7659f213e517e330bdc5b3add6578020cf5ad6c5fe29325463eb8e7186b6d79bb24a8b7f1291efe2681dff975aa7c3e1bdc73ecd713c8f7897c779a276f72ceaf6bcb24be55e536c393b7191243cee7755d9c004bc5677ce32943a5b31c6f96a65cd53cdc17f25ef98573c03d97e177f9deb74cafdbd33ddf8f717fdfbd967cff3b79fdde235b3e738f2dfe28af3fe13ac954bf52c93edb79a752be1f3cf2a9711725f71c99ee5c2087fa9d5fe73277bba7e6347f91f7059ee76afe4217bb90a88ec83154f62b4bd9c6b2df005632e3436a7cf6771f69fe01b09249b3b5bcfee923cdbf00563269aaf1a7bf7da4f90fc04a26cdffec2bff27d781ee99a07cf9f55ff93c665fe37cfc9beb5101b857652af5a8bbf4fd623266259691183b3e5f62ce03f70866a2bcc4640c5a4cc666c5ea38df67cb799498ac6f3139e71cabefbc9323f31493f38531392e196b0470de97bfc979caf8ee52f6f9e05e95bdfca687acd33135b726e7c37aa971ec3d24c6eef6fbbdb6b9658c8379f1b8eac7ff03f01f90efcbbedb009547394f96a56c9af4c544146202dd88c939b7588b04f997ed45ac15ceb5f2c7aa4b2fa17e4aae7a4b9f38be2773b58db19da57e6c05cf95ade0f77bc9f7f700f71c4fe98cace7b136785eb51cc93992f83ea0ecf8fdde6e7d88b59365540f3c577685df2f92efef09eef975b1fc7d2f908efa9d5f0b99bbce14227a615dfbc8bcc7da2332764851c67df4326a7553cd3579caafb2bcfe70bee92efd98582779ed22b1547b2afdd958a6f3cd0055c7d4b8b59a8352e5bfc05dfefd6ef1bcafe6061630b75fb0c0f37e57f777f185f2fd85b67ec4657c43ac1b4b6c43ac6b7f5996b1eed5e8207cb787bc4abf20d6d379b7bfec3faa79de586f5ca7637d58e2fa0bd394e35d09ed413f033c195f1b1b90002fdb004f8ebdc406c9e72aff72bc2826c780622abe750973c79ca8d8144d9f3236a41a39f86f43abc90f9455a5e9a98395754ed36e246cf386033de0384b25eedee09e3fd7b47309edae6a2b40dc85a9ed8e8db0d31b296d714cf657639d7d602a9dde35758ccabc8df481d116e854aa79a903b092f1d5e4bc7b6c948f341b01ac64d2946d466cb48f34eb03ac24d28c8d65ee7aac627a954de7be20ecfff27bcb46e7a8bea52adfdd12a71793e30fb131f29d639cf76372cc2251ecc0c08586e9a9f7e418454cce0dc58b997b8cab98a1f6a8d2a7aa26ad84fc4e96fc9e07f4893f576de032e6f69996d9f9cd9573ae31390e1193639eba3e644c8e5f25b49bd3f5e51c9b540d8f3390efa4df1f5fee917fb92dffa04cf99ef21d6725904dce6364c978f4c19b3d69a9f193159eb456c8b456c8f7665783a362924a3c382536ce60398e1a93fdfc98ead77b754361d706dfa8fecc3c965cbbb82f73b78bfbe27a189bef965fcba1f48913b58b4ae641728e24b6476a3a9150dff7d26356da93951eee57dadc0f592cdf5f500df7b05eee598dee2aff30116f7b57c31bc796be58bc94b9c7df4b6dd987e6b8df8b499f3da67cf6719ee78b99335f0a6d5a75f9299457e943c5a4bf115fc5dc366d957fee12b65363e4b58b4c6fb54c5ff54932c1ef3c2dd5862c4a313de58717fbd0cb65002b99b658fa78b1ea627313a5b902602593e6a1f23b659f1627ff4d7c8dfca610dcc37ab7563e1f00ee2ddd1daefa7f2bdddfc55639ba3359cee1a9f8d8587531bdaaffb91f73d797fdec3447283f5ac6fce629dc35c9e1c7e4fc766c3ff98eae4d2c4b52d644e527637ae3659e7c94c97c3c6fa7b98b1a039273c831395fa7ad7fbaf4644cdc2e39ee74bdf12b95f254c8df97807bfe5ccde3ad93cf97827b7e2d77b8882bacf59ebcad97b23cec7e2fb681b9623c7655364bb57ffb7b64dcc4dc73f62a0e79b3c3898a298ea9672aa6787fe6b6672a3e59377eded59677d72b924b3faee28ed5bf411daae45bae69d8f5f5e430c5f7fcf7620fb78ab311e0de927564a687db033ce92b5f598ec1c40eb2e519a67cc8e5f2fd311267a3fc2e07dc2bfb23f91af67ef5fa5e694b0e646e5ba2c68254fffc60e66ac38dedb9b20f0779f839c8e66754962df328a5d7522f629b195aaf2ac74b766189ebbbb2879b9df7e20ab78bbc57e53908dc73b9d49c9f8af1cb4cf03ebf1e0cd238d8c618adc66e0e95e5a26c4db107f3600fa6fc7e9c9ccb8ca95879c965ec088793056afcec70f9ed61400ef95dfc700ff7874bf92eb53146cbb9b8d891f27a947fee63477b643892b9ed984c2b7e1473d7339976ec1827ed05729e2fb645be738493765c72143f5ae2a8b65f95fd16f0ee16f02ebf1ee3e1fd189b97310f78b0d577c7caf797837b7e3dcec3ef711267a4fbbd98baaaf7c7799e1fcf5c76778cec37c64ef07079887c4ff5854e04bff3abc2c906f7884d5579abb42f5b98635facf77653f3e9b2dd1acb3cb29ce0295715e7ef8dc794b67b6c91e7fb133de5aff272122837154b78a8075bdaeeb15b93c3f4daee98c48dc93e6495faa93851ba9503eef97bcb1c3e8729bfe614793d9525b6e35b3c98b21cb476bcbbfb5b710fbfddecc1deec2ec3515b3c38992cb1dd913117b1d3105eaaf97efc03eef72aeba2e27f00b8e7ef2b3ddfea96337eb27cbfc493ee29eedfe32783dff9f554f97c5f70cff17563fa6a1ea13a7b266305636778645175311bdcf3e7673869355731999dedfce6293ea5dfca3a3a69578ec356d7b625f265cf04b85c26b8fea3839441c924eb547cabcc875c7798f7b45bc6f8560723aeb8381bfc26cb2e06e33e55fff35c878b85aa9d576362a7010cb9a6267e0673dbd3336c9927c835db13b6490c55b712b557aa6fb026319f9569abf51caadf7d3ef89d5fcf666edb72b67c2f517b7516c8a3cab78a39f5b657e78277cf05eff2eb79cc5ddfceb37999b4d083adbe3b9fb9db2b95970b3cfc5e60e34c543ef005eef763173a799bfebe7d9da4c68fb679f8bb90e9db26b95e26be8db9eb8bfc5edb36c97c54dab57399cbae4d54e34db26d9aa4da6ba5ff2aee6dac94e52279956b6c507b7f0e73db57c9bfcedeabb4aad3af84f5759527fd8b65fa6abeff50f03bbf5e249faf02f7fc7a89a75c2fb179992cc73127abf2bd445ee5b873c27a535a4dbea43d99a2d665c9767e4a9147b6ed52b6d5e09e5faf04f82a9f5731c716a977d4efcaae80f67fca56cff7db3ddf7b6528b6bf9b3ac62df3d496e63257dac7ab9cdfaa9357a55bf9ed76f0ad4e56f8fba5f277357e7299e7f9e5eee7e21ee28d76e725a1ddba0cc8a5d2b982e9edd6d5e0ddabc1bbfcaad6470d02f716dfd33b78b0d577d732b7ddba565eaff3e8f77536ce34d9fec72e77bf1fdbeee46dc615f6759acaa3924df1763d73dbad2bc1effc5e9665fc06e61ecb57b1e53afb25f35359afaf662efb3555cdab49fb353d0f94b1ce7e49bcd8352cb16fa9caa814dcf3f734bea5ca7f4c8d77abb144531ba6cae8465037a4cd57fd1ef10c8e79a8e76a4c240f79aeda8e9b0036ec2be9debd19bc7b9dfbdd84f990e51dbf057cbfdd938f5b3c726eaf261fdbddd7f8ad86b2a958d4db3cfa7f9bad373365dcc64ce583299d9ccd12daeed84d1efcdb99dbdedd2e9f6f76f4a6721c4faed58bdde6c670c51dabfee81dcef795b1bb5fc8ef6f759eed9d297fbb117cc7efd5fcf06ce6aa7bc63a2ad7e479d7eccd52eb88d49a8a23abe14dae11f1aed1ca6f698873a78da3d670c5eeb6efd51aae185ccbc7efd5dabc3bdd3cc4ee95bfdfe5a417bf13fcc6dff5aecfaa4636ed6f9b25e6dd1e3dbc5be6ff675bfed96a0e41e9e121d5f020df8bdf03de5369ddebfc56d95ede07f2792ff88d5fef97b2ad05f7966c73367a701f602e7b1f57dc3e287fdf0fdcf3ef543bf71073f5612bf11e06323d24d354f167f779d2f89fc41865f33547cd91dc009ed70772aadf1486fa16a42faea0ff363bc79d667565a0fd4dd9bb473ce5fd88ccdfc7765a7395cf28d774c6a4ac3135aff01c73f9fc95e5f83cc8e773f2d903e037b9fe36f620d08147e4f521566937f6513645e93618f34b94afd8a3329d47a57c65e09e5f1f03b23c26af8f7bb878dce662eef7b62cf3c6486cf97e4cae738c3d01e47d5d2f474c618f43e47cc223e713f2fa249053a6177fc623e733b69c056779e494eb2f634fbbe50d7d9925c185883be2bf3d057e533afd7455ce62cf80efe0f8ac7afe2cc0d03d579c8df7fc2e39893feb91f9595036f5c1bf93e14367475f90cf1e32ff36fe82946d38b8e7d7173d7af4a2ad47f3dfb7cb71f77a9e727c3871da0a37f6a2bc7f49e24f03f7fcf94b008f3f9f8a636ad3516b4f87837b906e4ca59b68fd9a2c8bcab9d657e537e5e09e5f5f71f21c53eb695f03652ad7dcc65f67fabed31be0dd37c0bbfcfa2673f79ddeb4f9dff37d0fb6faee2de6ee3bc9f5b131f5dedbf2b91a8753baf80e90e16df01bbfbe2bbf5907ee2d19f690f67fcf3b90b4def3e8fb7b9e34df97cfd7837b9eb752f7fbf10fe47b1bc0bde218e26cf4e078e48a7f08f2a8d631023ba0d523c96b65dfea0de6eac3ede11dcbad062fa17f2af52926f3c514ff1f31f798d947f279b231075f4a5ca5531f7bca458ef70b9f3c45d92be39ade481d23f6b69d9701dbe4bd1a3f7ed3875cb2dc62ef9863c4d4fcab9a3fdd64f8bd5c7b1d93ed50a51df984b9edc827f2f9fb4e792e553ea1aa33a9b407b29ec4d41875a279e34f1d7cf16f7efd8cb9c78c3e93dfa8f150351e5be4fe2e76560ab2cafd5de29f4bcc59e0deaacb7bab3e929ab7b925711a0a2f26eb794cd699f817127f7f70cfaf5f32976d8ecb3a5369a3bf62eeb9abaf6cb9f619e3c1f9da83a3c678d47bdf30f7d8cc17e077952ffefc00bb9cf629f0e4a79a7c6bb950f3794acf1e94d70764dadfca34e7827bfe5cf57512ecc312537ed777f2ddc9e09e5fbf676effe17b9bb7459976fe163d2e7194ee7ce6c1fd95e9fd50b5ae49bda3f2531f3c57794dc20fad1cef7ebc1abdfadc93bf1f98bb8ec8f5c631b05e997731c56faaac7ff470f2a3cdc9e2c1f6fb8592c3985c8f1ffb06e453e5e55b8f1c3f7be4506ba3373b72548edd7cede6ad729ce677e61e57d071add203eb77e36a1d4a35fcc7ff4c03ffdfb1a4f21dfb01f0bf59fe26e35ce23f0199e4faf2f82f9e32f9c52e93c2cfddef552b9f5cb71e53b8b0cc7ef6c8fe9b4776b57e7b072b332d4feadb5faae1537212ff0bbca76c3258cf2dda4efedb7f4076b9069b43e9fcee8c98f3aef8b77a975fd5790183c0bda50fc57b78b0d57719cce5776728f925cf19b598d6efcea80d64a8057ee3d73acce5778b7beb9da285763914e72069a9fdf1cbc03d4cb31e73f9dde2be16c093ef67d407b2294ee5dafb0cb55ffb81e09ea7217528a3a17c3e1bdc8334e272ad6965bbf83773cdb92a5ed573710ffceea5dbdc38f17fe473b567add2917f83d791e50f7bb06b4047966db6795a7e5e7a75a4128f5047541a71b98f4106d8c32b43adb31b03de817a23f39901f6488dffe3fe3643edb17e7072ba56fcb01b47f8e4a6f64ed951d51753bcaa7ddacbc13d7fae6c9b95febeb20d8a495e6329f4d3623f78d26dea4957ee4b9701f6368f29dec05ad50cb9d7424673a4beb400efb600eff26b4b4f7d917b5def7b8d075b7da7f69b5e0eeeb95c727c2143ed37edad2f605f908c9dc16ffcaaf64e5e07ee2d194a6e905c1f81a4a5f6722e03f7304db597f37a70cff336dcfd7e467be61acbc8680f3886381b3d381eb932c01ecd196abee5fbc47aa178add473b54fbad4f3153fbbf3541d9e56cf549d85316dd24667740232cb3d08323a237a9409decd04eff26b178f1e75b1395ad5d483adbe53fb692f07f7d0167643f4a83b90a11bf88d5f7b78f4a8872dc3cadf6d2e4b3f47d2eae9d1a39e9e347b79f4a8978d5b8927dfcfc802b26501cef9b53773dbddde320d6577d5fe9ab3c17dadaa3267803d4733d45e05d00fd3e958a647c732dd3ab672a447c7aac173ff563b26f63c99cc8a59215bcbb2c546383c77c91e49a7beacfe303ad1b68b13b9183f958e275bc136599f16eb4e849b27ce9bab608358aef644b8b662ada14a7dbcf8bbd07aa344801e925125893bab24c1852bb5fe2f06c7d9955bbf4f12a7e1f103ed4aac2703d874ebcabf5acc06b205d6ff6e94f956b2a56c9d755760fdbd56e02db6c4aefa667559e247df79bf996361da27f3adb27e5184aeb5ee4b858473c5dfeb85a4c542fa29d66f15e29cc0d56c391b675d378ad4aae6bdccfab72ecd0249995e46fd017dd8eff63180aa98f2acdc70e9b3852efeff12a98912112ef321197635ac952dbcdf63ab94c4ffe7d03632bc533045620c1494c55cbfe5b26cd16f98538541f33c56cda15ebf6dbe87b2c109f3a2678617777b9103a784fb0c7f74d7d32a261e54db9db5412c9b777dc49e4b89b29688588e972576be32c942eddab572b8a05efa633afa45b7696e80f4dbef9588f7cc0ba08e68fcdc0520b69929b0ac5a3e683ce709e14b8568decce45b6f704be9fcab4ad9e5f084ea0afaab36aed565012b80b8ae00c47c75418de83f765c6ce222a857990ba708b285c7d42681a2626909572a43fa53aa2abdf6c4e25617749bd7f89e5b67ad2e38e5cb8f6bebcba781289f5452c54a284357420d82ae22d5b70989caa76165be9cf2e1ffe9396c84e8787532600cd6d231d830681d1f27eb35f79b56a7c0211f90e9eb35337a021b234a58bd081885b53514e6700a9b68a462b5eb7ba4e20221c8757485d3a8661ae0d4949bf7a85b7b28a88d2a77b384eda7a96ad7d5b12796eb2d26654ff50be75a1d8069d6b342ebfd62e164f2dff32dc4422b6d8e3756a4e0f425dd5f2466968f89f5f732ab65b58560b53be8e5fa950c63bc9e86f11caeaf2d356a206c9cb73234c32b437dac9ab5f25bcd1a60c83bfb456e8821b7f68bdc08436ee31779275db511a3ca0b03a936ce708afad738ebdb155666d68b3ef23aeb7bddf04be2ead236e9ead24e54974ca61b14329308ab268d7565c77f6caf13d25b74edf0a26b820177f009dc14d3b68e7eb5ad192672279f2237c744eeec57e41698c8993e456e890177f109dc4a57a585b204db93b4bb601cc7dc93e063ca9d937693bb31ac2b985806accaeeac2b1a6e8379b3eab7656bad2b9ea641174f9eb0644b522c1e3e7dd145c3035e443d9122aa4e0eac88dae88a882b792f4c73bc45d40d2fa2b658f967a5a1fcdb61e0bdd300de1ea3a54f1a68e98019d9be1a231b3331b21d7575423416fb92d68979d66ff6a4ca04f1b4448cc4f331f942813ecbd2c07d993d62cfb5137b5fd58b19d6b5c8928f4b92b806f5d319796dcde92f6a0e0f24a59416ab679db0321fa02973a386b533869ced173913ab61399a1a566458c3ba60e00335e00d0cc1bb629ce4fae5a41b863cc86fdded8e1132380df6ac07063e240de03d31f0a16900ef85810f4b0378960e9c2bdbf0ca971df0ffacffaa8037c2c17b63928fd048fed5b4b891e47d303ddcc5af86f7c59077f58bdc4f839c2d7a1c87b260fbc8fa30059dfd57e9ae11369f4ba4e6a9e758d765420afefb52e977254e2b715b36b2921f30e720fa4d1358f2c116f4b9e08ba01bf0e61499b1e081d5592193196b97fb631660378d05785d675e1258800158551ae3b72a65eb9079551aabd1a11cae437cd56c03d1dbad92ce683c9d1c5d95153deefd6bb4cada63db1c6f9988e8b1f1665ad70ab64154a79596b3b65e2a4e81f54e999546b174e8fc54d2f156be3b7adb7966ffa7af0e79a23a8c4ea23a50e60aab0003759ac4270178fdad3209cdbb8b7358be85bc4854c3fdc4cf9c25bb744bc4ab256c7febaa8273aae85b5d5cdf7275d2f0b1d5892c89c19c1638f0200c78924fe0c1581d9fecb78e0fd1213712b7fe3d9fa198d853fd8a3d0cb3a8d33416f5ef9899451d8e814fd780df1337031f81558519c9e84802adde05039ea9ab63dc571f2fe65333ad3f6bac2ff8704ea1a8fd99a23174ac41a655d74bac7ff1ce693ff0fe1aeb0d3b18ce44ce5d31a598e5572946ea9079b9e56bcaed67c3721b8581cfd6804fce30031f8d95dd1c5dd9716bcadb0dee96ac906d9bdb1a668ab0c44c1189ba4ecc0b1689922b17e59ac90eb0dadc83ac6b85f576a668074ac533fe6f5ed2dcd69a94e96e98fc7375f23700f2e703094d521c83d9ad028ddd8a19daadb13a70eef8cc6388e3c38f7631777cc661b4edaea38d8fbb4db0dc17eeb9ae13efcf150a505c392e5494a60672bc46ae6c3153b19ad5a443c647c678dc6eb9f8b7e3a2f0b49d18323f8e175f02e875bcd47f7ac78b1fc092258e050a427accc1cac38cea5e1aa36a34623401ab0b0bb0bab030a5ba3051a773626e676d8dea1c5ea3e6086c5ef3fc3bfcfcf8a20c6faf5c4c3e0d4e42b3d225635f711c187f7fa964ae9c1b531edeb1c4129b0b3d5e4c0171f24595d0d7897d449d085272ac5e4cc25aed459a56fb96da66adf6649dca8ab9aeb21a55d93c811084da2ed6a9ad98901b9a44e1a753cece627947b930aa45d2a8daa6bbb3389bba4c349bc5d6efdcf0c2e77dc53ef1dc5f9a28f85e2598e7f92b14fd5e4cc90b8592079d4f4cd1a7600dc0124d0360e4554fc5aad0524d15fadbb00a4dc3c42ef22bf6744cec628dd807d631137b0606be4c033ebdae19f84c1d3837cc7c8da39f1ee22c0c98ef6252c5dde45345aa9fb0d4d3535c22fa0aaaff57247ed964fd5d6afdb65440648aa53a2a66d144ca7c8cdb120db74d0db99d8d51b0af4f6ee7e880b97aae4c06384180d05c1d30f7bf4a19e27ff1ade3cdfdaf028cf6d51adab719d23e4f07ceabf91abfd57c3e86bcd62ff2ee18f27e7e91f7c090cbfc22ef891562b9a61079d8ae4921ee85815768c00b0cc117e8c0797d5ba7b34d3d189f84709c54bbfbe48c6b145a86b842589e4cabbdb7dbdc22d7f8081ff328919d66937abe109373bd4e4e7b65308fcce63e45a11843e329ceb2cc8249aa7b63d46fd0507fbc21f5fb60e01b35e09f1b822fc2f8daa4e3ab4d35e55a24027a9d5f075abf9af0b81893667f9d34fcd6293793740a314a0fd0507a5e03334a97609938509789e64c35e3bb5894cd14037e857255f37ad18c9bd3b81493e0209d04dcb24daf740cf253740b8a304a0fd650fab221a5c598453ec4af455e8689bd5967341b9a89bd1c13fb50bf62afd02173553a8c215e07df6cd2dceb28c1d239024be7c894d2d91763ea28bf4cadc40af8684d018f696456c0a518f8160df88186e0ab30f06334e00f1b82afc6c08fd58077d8c90c7c0d067e9c06bcc8107c2d067ebc06fc2c43f0fd30f01334e057188297614a7ea25f252fc7c43e492376cbc666625760629fec57ec751ae46c11d21d64f4be37d2d72c7a9f1f7c985cec313f0a5117b55f5dfad890d27a5db9f016fa349d48064df9064c9bb66ab4e963c34ab011033f5d03bed050553761e06768c0b71882ef8f819fa9016fdac40cfc00ac30cff259980762c07c67ea2abe603fa19d6b441de3ee7cb1d8b063b5f8d76ab16952b198b82e14baef0c38a9896bbe034ca6d4de32a9d3a556b10cb07e3591fa204cea737452f399573e88ebf8cd7657d2ee86e8e20a33592fe975f73292eb604c07ced5e8c02d860a760896e9f37ceac0669d9d15ab5b4a48ed2cb666a2400cdef31d9b96094d5995e6f520e7276d932f103699c77fd2c98ad9ef4375c5cd7deb0b19e25b6fb3fe34e0221bf9d687e9d2e13a7b914667071bdaadc331f08b35e07b18821f81815fa2013fc210fc481d38776b2e653edd9aa374d54dacf79a4d5addccb7b1d2579fcb74fac76bcbe5a2b60c4c505be648fb9a8e5aa3adb0db8508adaaf098706f29a49c8ec6d4eb0a8d7a7dded44cbdb660ea75a55ff53a4687ccdfbf2a996622c154c6b118f0d53e818fc32cdd3598a5e3475a9a8f221c8fa5731d96cef529a57302a638376814a77b3333c5395107ce1b777e346315d787af8c9a08c6ca55cc60a1f56ffb8e8f6eafacfc9d3b72cb444c5fa974dcdc216a66837e2761b2de948cc624003e1903be594702a77e41e520b43d5ebab7a1c7790a56a6b768caf471c3323d1503bf5503cef75f30013f0dd3fadb30adbf3d25addf8a99873b7c9a87d331e03b7d029f8169d15d3ed5f34c0cf86e9fc067e98079d9f3b324bd61b31cc0246cf66c4c0befd56861560b332d3c4707cedb3b7e02a7aff6ee5c4cecfb35624f3614fb3c0cfc010d78a921f8f958cd7c10ab990fa554332fc0d4f17f4c632df9caad45d6ff7cf28f07842c67f9c2fbe2a1e51bc593b5a27fcf7bcd26ba7b2126c5c33a295a544a9163fdbd8ad9138a764857ea326cc364784427437329c320ebcf52e152f36f365a7fa72ec14598048fea24a807ca822ffce2deb2496a1763eafb98467d87b73453df4b30f57d1c53df275252df4b31a3f7a4c6e865181abdcb30869ed230f4b321439763e04f6bc05bb63203df8e813fa32b5b43f02bb0b27d162bdbe7522adb2bb1eaf07c22d3949b66d3741526c50b894dd3c0349aa6ab31195e4c649a06a7d1345d8349f05275a66977919ed922956b31f57d59a3beb5763653dfeb74e09cb35730f57d3525f5bd1ea38c9f13eac7d1bb0163e7750d3b271bb27323c6ce1b183b6fa6c4ce4d5826ded264e273c34cdc8c51ffb64fea6fc1a47e4723f598d66652df8a51ff2e46fd7b29517f1b9689f7359978df3013b763e01f68c0f9ee6126e07760e01f6ac0bb1b82df89d1ff1146ffc729d17f17a69c9fb004cddaa034376b7763527caa93c269d672d3d8acdd83c9f0994e06d5ac0d4963b3762f26c1e73a09ea33a7599b206629d7180e7add8729f0171a05fede5081efc714f84b4c81bf4a49811fc032f1b526132bda9a65e2410cfc1b0df8e386e00f61c5cd8f65f5d32efc0f93fa3b8dd4c3db9949fdb00e9c0f8ff083be7c0d8f3c8289fd8346ecc586623f8a91fda3ae6ef130a4c4b1ac05d6ab6b45b4e9726177ca44a8b7bd64b1484409e4337b23797bb9bb338cbd42dc2bbb59c896c839fc81620e5f0d6f6f62f69ec2f6c0b67d1650a698892a921b28ac14bf948bb78a01b23e4aa044463bc0b802d390f4c7b002fa4953406b0d0be8710cfc670df85643f0273063f40b668c7e4dc9183d8965e2371d43edcd32f11406febb06bcc010fc691d38afac7f24638c120c5d3fa301ce163b7bd64cc846d58db8d21bb2f1a78e2fed0c303fb52e71c8867f59b119e367315dfa5b57db0c75e939ac89f8c76f13f13c86fcaf5fe417b0f6e1bf64f43f81d17c51a7ff62ffd46535a2ff749bd7f2dd4f92d3fc588c6b7e9f049a4fb169ed4b98f2c4633e95e7654c793274941828cf2b3a605e4d6bc5aa56d3af3b9855d35731a96bc7342e118f54192b3a5ac56295926e7d5ba67097320d43115fc3e4a8a393836fb16386ff3a865fd767e9bc8101d7d309cef567964559810c6498289498fb652b8c3db13731bda8afd18b8a8e667af11696ad06ba6cf1a65f1dc9c6d762f3dad85f0c08948aa8253b7475a9b4645c4fcc1dcfb7b1ec36d464f70ac3ecbe8365b7914ff57817937a278dd4f7743293fa3d4ceac698eea9a812bb27e08e7736c9d6fb58ca4d74297327db3ee72fbbf2e8a0eccadda56659ea52c44c83753ec02468aa93a0b55682e9e25f15622b0ebbbf94da02cc0f31599ae964699fa42c55cf963191e9239d4c5cf19a6b14efedce668af73196e1163eabcb2718704b9fc09f62c0ad7c027f86f1bcb386e7bf0d79fe1c036fad017f20d30cfc0b8c92363e29f95207dc58bce8af1bf9950e981b977631a407df3e964a0ffe6b8cf60e1adacfea6a46fb3758263a6299e8945226bec532d1599389d70d33f11d069ea901afd5dd0cfc7b4c31bbe8cc29df39c30ed456fb2d1589de8932e459acb768f056cbbfddcb7932c59dddfcf4abf45d94c92d67a562a7997206f753b087e3f8ce006b997bf18d4a870fc3d94decb24a739e298c79916120e70f18175d755cf0fd75e1a68db67fee34b0cede061b8484a5cc59926fcbc765ae0e21d77adb7409d48f98c274d3284c41373385f909ab52ddb12ad523a52af53396899e9a4c6c34ccc42f3a70ce682f5d49f375c3fac1e50572589a2f217362a313956956c2a7bd45f0b13d20ede8b5bb06ac119aa1069fddcf2a845e55686ad11221e11a30746d63af91fd7a13fdfa55c71e3fdd282be6ff74a3df30f0de6900ff5d07cef5a44fccff9ed87f60e07dd300fea70e9c1f57d62fc6f033c0bc09f4c413f80b4ba07f9a12f81b2bd8016928d87f30f0ec3480ff8b81e7a401fc3fccce0dd4d8b9e93dcdec1c8b21e0b91af07a86e0311d38a765908696679e7e7a94092d714cf2c11ac9b7194a9e81810fd180171982d7d281f351cfa17e473d6b63620fd388fdbea1d87574e0fcfde169b05e7531f0111af09821783d8c965d74fe712f335aea634abe6b1aea7e030c7c641ac01b62b48cd2d09265484b23ac4047a7415b76c2c0774b0378638c96311a5a161ad2d204031fab1b8134046f8a818fd3803f6d08de0cb35ae3fd5aade698d8793a3dcc3213bb05a62a1334aa62ba00a02526f9445dd36c28792b4cf2496950f29d31c927ebc6b20c256f8d814fd180b7ec6d06de06a3656a1a5a8ab698e4d33492bf6c28793b0c7cba067cb121787b0c7c86067c8f3e66e01d30f099ba06d410bc23063e4b037ebc2178270c3c5fa7e786e09d31559c9d861a9a8935fd73d2d0f477c16899aba1e552435aba6ac0b3c529b27c2fe0a0f6a898c7ecd3ce0659a92f905112667b551468c6abb233793eda56c94732a9cdb3f0ea71384edae4be8c55587fb6597f5af663aca81fc3f6a5981fe30327a9a589455e74c31460778d0294f6355380ee18f81e1af0b30cc17b60e07b6ac01f3604ef8955babdd250e97a61e00bb4e09b773301cfc26859a8a1e573435a7a63866e6f8da18b1b1aba3e98e4fb68246fd4cf4cf2be18f8220df87043f07e18f8625d4fc110bc3f065ea801df62083e002bd0259a02ad6558a0d998e44b35925f6328790e065ea4016fdadf0c7ca00e9c8f7317c734a3fe7cec9347c1ad14a11b1bc45c9313a26ebeb5722e96fa325dea7cb1890a5cb2e7d7f83726e90dc2a85caeeb2e1a96d3604cc356a4c1371a82495ea2917cb0a1120cc5c0f7d579d286e0c330f0951af0ad86e0c331f0520df8d786e02330f0553a6337c00c7c174c5b56a7415b76c5c0d7a4017c24362cb2d6efb0c8284cecfdd220f668cc17294b83a3b31bc649b95f4ec6e890f9fb15317fc12c6331ed5ea7ab973966da3d0e035faf01ef3ed00c7cbc0e9c4fb76fd0745fc474fbc6582ad3ed795826366932b1cd301313b0a66f7f5dd397c5e05a30fb28db5e8c4f6a07b335d9444cda0374d2f25ac5f72cdc54e5cc4ed57c9ba43d09b30a07a6c12a4cc6caf8204d19ff6c58c65330f08335e09373cdc0a762457288ae48ec0054a5226a215ea9e8f57315da24ee97887e7405338d8d9e866574b3ae6f6d98d1e918f8a11af0030dc16760e08769c06f31049f89811fae01af37c80c7c16562d8e48430f351f93fc488de46d0c259f8d811fa51b1536049f83811fad01bfc7107c2e56e7b6e8ea5cdb24ea9cbf35090558668fd164366bb05966e761e0c76ac03f3664723e067e9c067cbaa1e4bb63e0c76bc0d71a82ef81819fa0013fd9107c4fcc8f3cd1af1fb91726f649bad234147b01067eb26ecc698819f8420cfc140df81186e07b63e0a76ac0af3004df0773544fc31cd5ad2939aa8b30b3743ae69da9fd5394d798fa7e218bb1b4cfd0a5dd58a6cd7729b4bd583ec9519a925f588815dd999aa2ab186a56744bb06c9da5cb163fb9db71cf37b042cff226efc1f526d95c8a4972b64e127e3bb6d28f3349a708f327ce49839b5d8c819f9b06f06518f87969005f8e819f9f06f01518f80569002fc1c02f4c03f8be3a70fefeb6648625fae3c02bb15a7d91a656df30dcac569762525fec53ea5518d797a481ebd51825976a28693ac28c9235182597f9a4642d26f5e5bad15343a9f7c38ce2769d51b4ba6d6079b0ed88170bb7bb42767ced1d6d568b919355954b024ac4990b1595ed5439730e87b60f855e2a9d7973d7bd4c9703def25f910cefa7e2c0e558815ee9b3402bb002bd4a37546258a0ebb002bd1a2bd0aa6bae7871ad172f9588fb35aecd87ec6131bbd878a155b07562174eb8cfbf5a41b2562a8b4981aed7e5809f53724d8c2f8977e7a09dce046cc7c13760f45caba3871f2ccb57f9dbfb3bd97e5d319b28f47a0ec87a81f54b7e0a59dd8869c2751a4dc8dbd54c13366159bd5e97d5a9cc5954be02f85d7cb78e2211333357fc5e66d150754173a6a8babc822b0fcd31061be4ee01b656ac737974b616f121d6fe7203051ecf636bdefec6a6607f8cce1b74c34486741e80d179a38ece9d80a5e4c381dc5de52137f3c4222f934c1d8865ea269d773ed22c530761e037ebfa9b86e007637df05bfcf6c10fc1c4be5537e831ca4ceccd5841dfa62be8deae2651356a6efd5e5bb9ad66a9ecb7eca2b1b2ea2dae2e260a722846c6ed1a321a8d3623e3300cfc0e0df86243f0c3b116f64e9f2dec1118f05d3e818fc4e8b85b43c7e386741c8529de3d3ac5e35191ba2376a027c58d70a6689a3768bc3013253b1acbf8bdba966a37b38c6fd1806777b16e63fc98e430ec2aa76224d3b7bfd67d3a4dd4c670de1fe3319cd9cc6467b954e4c5e23d8fd1153ddff3ef81642ad35f78b11f8be9fb833a7daf050cad89e61ea74b858f1d3e54f9c03376f8bf584aa77c61b97958971b1e82c53dcbf129f77b4ec06ae4239a1a79d618b31a7922969947759999c46ace77f4ef359e8411f99886c8cfc79a11793206feb806fc1a43f05330f02734e023c799819f8a813fa9016786e0a761e04f69c01f3604df8a813fadab19e3cdc04fc7c09fd180d7ca33033f03ab76cfeaaa5d27f19e4efded8ac3ab4c26d829cc3b06635249cec4b2fd9c26db4d279865fb2ccc5d7bdea7bb763606fc824fe07374c07c3fb0179301be00073e17eb33bde4b7cf741e56822f6b4a70a361099e8f81bfa201ffd910fc020cfc550df8f313cdc02fd481731a5f4ba6241384056ec3a47e5d23f5e04966525f8481bfa1017fdd10fc620cfc4d0df87986e09760e06f69c06f986c067e29663fdfd6d9cf5e4cdf83e23bc0574827a4aaddb4b782e20eb7bf61cecb3022ded1790653cd88b81c037f5703be659a19f876accabce7b3ca5c8149fdbece8a184a7d25a61b1fe8746338c35c5ab5c956cd3aad5761b9f950971bbedcc4de4c4aed53e96f4fcaabb182fa48e7614d372ba86b30f08f35e00b0dc1afc57a839f60bdc14f53ea0d5e8795cf67baf2e1a3c5bc37c8e714ec80367b8ec17cb4f87a2c7f9f63f9fb22a5fcdd80e5ef4b5dfe18d39452825cdc88a17fa543af5b5957b353583a7513a66e5febbc8b9966ea763306fe8d06bcdf2c33f05b3096be4dc60e27a0e4560cf83b9fc0b761747cafeb4518d2713b06fe83067cab21f81d18f88f1af0b70dc1efc4c07fd28077cf3703bf0b2bcc9f7575a9825577568e6afffc9c8f63ef9abcc875e24eb84fcbb91b2ba25f74debc6111dd8315d1afba22b2576f7a0f2c32c9ccbd5823f11bd648fc9e5223711f96af3f74f9e2ad44b6513eeec70ae54f4da114cd352b940730e1fff269041fd401f3f886bf93014e10dbf0900e980f12fd930c30e71f01fe1f46c5bfba726cc8986bd0c999e33461e9612ccdff7469720415826b92ca2318657ca1871fca1ec5c48fc511ffdcbdcdab77bd9759057f0cab18f178d58ad1b2c0ac623c8e75ff3292e12c41f7ef098cb35ac90027a0e3490cb8b6ae309a3156d94039abe4fd14c7535871d4d114479b7966c5f13496b9babaccb5039553f5499d961c6e7bad3600b6db5f93ec3e8349544f27113f8a4645b2abb19612ab512b14de40998f88fa673139eaebe450d1fc03d312cdff1c9676035dda0d01076385ef944a1cfff3589a0d7569b60469ead3e6bfda017e2652bc8049d14827450350d95275675ec452dc4997e2ce4ce73ecd105e62b93ce2c67962d668bd8449d2582789dd6895199bb39775a9f0db26717e50823b95a9330ead7b5e8767e25512a88d27f00a968da6ba6cec2415c976f14b45f5d964d15b6cdce6bf8ad9c9661a3bb9622f333bf91a96a9e69855e2c1132b64bf438d10178b5ed06ae63e2ec02493af6372b4486495aa92bb5af6754cd27e439736373e2de33e6797ded421f3d26815f71fb7ff960e9c33b373dcff8e136f634ad75aa37483179829dd3b182d6dd240cbbb98e46d35920f5f6826f97b3af02ed66dbb649cb1fb71cff87d0cb8bd4fe00f303a3a68e838cb908e0f35e0d95daddbd86c16dcc684e365188df986841de3fcac0c3707039080b34e711e70d6aa4abe12a58e058f7da4e38dd7c6d8a20079b3dfb3dbf6b962917889f5cb2cb16ec53e26a33c054e3bc7f9593f55ebb0a8c75a663305b3ddaae43c55f930d63fc6da982eba36a68f75bb808d14c8a5027d94653027588c0e627c83c8c16cb47537c7fa7f96f56724cb066f8eb618b25bc1057264706fa68e963169993ec124eeaa93b88356e21cebffe1e2ef1c4b2edbabac2aad89549f6226a59bc6a46c5b6466523ec3b2dc1debb8e98737e1a94555bb7426d9fd1ccb6e0f4d766b2d36cbee17d8b0414f9fc3065fea80797c6aaf648013c4a77e85d191a5a123b3d08c8eafb1d2efad2bfd4cebb66a946f75659f294f75359f14fb0693ae8f4e3ade0edad56d4065c4e73c61ba4a8599f61a76bbfb35571a3c7bc70efe8d8984df6285d3575338c71beaea7718783f0df8118625ff3d5611fafbac083f60156180cf8af0234647b6868e979798d1f113a66a393a551b6aa86afc40acb5c26fb07fe1cf38d880ca518e72f06f7fc37c3f63340dd4d034c690a65f74e0bc73909b4ce1260865fc15031ee413f8371d30bf1dac19a6b8e7d659ab0b4ef9f26393618adf31cd19a2d31cb563867e98c22c1af60fac5b3754d3adfbcffacfa45bf727a646c3346a94b7c24c8dfec28ccf709fc6e76fac5b37c267b7ee1f4c8d76d1a8d1ab574cfdb9cd822f3e3451a37fb10476d524507ecca99fbcbbf3d2052609fc878dba8cf43beac267a9b4c8a3fc22c730e4d17e91e33a64aeb1bba56148244307ce2bf2189f5348b5303ec6fae5a336863cce2f721d0c79bc5fe4ba18729e5fe47a18f204bfc8f531e4897e911b604a37c9a7d235c4449eec57e4463a643e903f2519915be0c03b61224ff52b72638ce5693e596e82893cddafc84d31e4197e919b61c833fd2237c79067f9456e81e95cbe4f9d6b89893cdbafc8ad309d9be353e776c680e7fa046e8d7151e0978b3618f23cbfc86d75c87c31d5fc64c848b098aa9d0638bbbb751b5bc56a625db9bdd34e85d8d2b9500ceadaa726af4af3daf2dd93e1ed729cb7f6ba02e105b887cf4e42070c784f9fc01d31a772af3438959d30cd5fe057f33b637c2cf4c947a60e98c7b5ed9d0c7082b8b62e98e1dac7a7e1ea8a012ff209dc0d2bbdc57e4baf3b567a853e4baf07567a4b7c965e4f8ce4a53e49ee850117f904cec24aafd86fe9f5c64a6f99cfd2eb8395de729fa5d7172379854f92fb61c0253e81fb63a5b7afdfd21ba043e6367ca5cf51cb6c4ce452bf22e7606ece2a9f6ece40acf856fb2cbe5c0c788d4fe041581559ebb38a0cc64a6f3fbfa53704e3a2cc27174331e0729fc0c3302e2afc72311c435ee717790446c67a9f64ec82016ff009bc2bd6abdde8b3573b129378934f89476112efef53e2d198c407f89478374ce2037d4a3c06033ec827f0588c8a837d52310e93f8109f128fc77a509bd3d083cac3e838d4271d13303a0ef349c744ccc41deed7c44dc2883e220d444fc6c43ed2afd85330b18f4a83d85331b18ff62bf6340c798b5fe4e91821c7a481901998d8c7fa157b26867c9c5fe45958253fde6725cfc7804ff0093c1b033ed127f01c0cf8249fc07331e0937d021760c0a7f8049ea703e6b1fba7c6fdc7eecfc7c04f4b03f8ee3a70be5273abf5a08b065c9b404f3c813d30e94f4f83f47b62e6e98c3498a7bd302372a65f23b200433ecb2ff2421d320fab393b5e35ac464b48a2d38f305d39274dbab20fa62be7a641571661d29f9726e91763d29f9f06e90b31f00bd200be04b38b17fab48b4b31a9b7a541ea22ac165de4b71615637c5cec938f6598c897f8157939867ca95fe41518f2657e914b30e4cbfd22ef8b15e0769f05b81213f90abf229762c857fa455e859171954f325663adefd569687dd760e0d7a4017c2d46f6b57ec9de0f43bece2f7219867cbd5fe4721d327fff86641424c12451850e9817cb8dc9002798bf58a703e68b006e4a0638c12280f518c937fb257903867c8b5fe48d584db9350d3565930e9ccfe7dc960cd309e673f6c7acd2ed3eadd2013a601e0f734732c00902460ec478be330d3c1f84a9c75d7ed5e3600cf96ebfc8876045788fcf22dc8c317d6f1a983e14e3e33ebf7c1c8699bbfb7d9abbc331911ff02bf2113a64bea0e1c164444eb0a0e1488c8b877c7271146690fee7d3201d8d29ddc36950ba2d18f82369003f06538f47fdaac7b19867f0984fcfe0384ce4c7fd8a7c3c66949ef069944ec034fa499f1a7d22a6d14ff9d4e893b096f0699f2de1c958b7fe993474eb4fc1c09f4d03f8a918f87369003f0dd390e77d6ac8564c435ef0a921a76312bfe853e233b0fafd92dffa7d2626f2cb3e453e0b6b0a5ff1d9149e8d95deab3e4bef1cac51792d0d8dcab918f8eb69003f0f538f37fcaac7f9588bf5a6cf16eb024ce4b7fc8a7c21d662bdedb3c5da8601bfe313f8224ca3dff5a9d117634af75e1a94ee12ac04dff75b82976236e9039f36e932cc267de8d3265d8e49fc914f89b763aaf1b14fd5b802538d4fd2a01a57629ed2a73e3da5ab303a3ef349c7d5181d9fa7818e6bb09af285df9a722d669ebff4699eafc344fecaafc8d76356f46b9f56f4060cf81b9fc03762247feb93e49b30e0ef7c02df8c017fef13f8160cf8079fc0b762c03ffa04be0d53e49ffc2af2ed982dfad9a72dba0353e45f7c2af29d18f0af3e81efd201f3d0fcdf92014e109a7f37567abffb2dbd7b302efef0c9c5bd18177ffae4e23e0cf82f9fc0f76324ffed97e4073092fff149f2835873fd6f1a9aeb87303efef3cbc7ff303e58863f3e1ec66c512c19e004b6e8118c8b78864f2e1ed52173439e918cc8a7e2c08f614d49ad64801334258f635cd4f6cbc5131817757c72f124c6455d9f5c3c8501d7f309fc34065cdf27f03358e935f05b7acf62a5d7d067e93d87998b463ecdc5f33a60be3fea4ec9006fc7815fd001f3a5158d93014eb0b4e245acf49af82dbd9730929bfa24f9658c8b663eb978051bc5689e0c7082518c5731e0163e815fd301f3db961955774b53ff5549a0364ec9eb983fd02ac3bf3ff00606be731ac0dfc414bbb55fc57e0bb3a46d7c5ad2b731ebd1d6a7f57807036ee713f85d8ce4f67e497e0fb3fd1d7cdafef731913bfa15f903ac32764a5365fc5097008f26eb9c0c2709a2c93ec24c75a64f53fd31568a5d7c96e2279845edead3a27e8a0d38774b0638c180f367584fa2bbcf9ec4e79842f7f0abd05f6890b37b58b7b179ac668e0b5820775a323b1aa0a78ee1988707712440af0c7e2440db2ab94b46066cfbff2fb1562e2b0daddc5758e1f7f65bf85f6362f74983d8df60e07dd300fe2d66cdfaf9b466df61b6a1bf4fdbf03d568a03fc96e20f98d5c9f669757ec444cef12bf24f987b35d0a77bf533c645ae4f2e7ec1b818e4978b5f31551eec53957fc3b818e2938bdf318987fa94f80fcc871de6d387fd131bfe1d9e0c7082e1dfbf307f70449afcc1bf312bba4b1aace83f9887b5ab4f0feb5f4cea916990fa3f4cea513ea5e603c95aa947a741ea1806be5b1ac0e33a706e9dc6f8b54e193a64fefe589f96ba960e98d7f5713eeb7a6d0c78bc4fe03a18c9797e49aeab43e6dc4df0d985aa87893cd1afc8f535c8d97c41726c0e0baedf30d67a8befecba29851ec3a4a47b0c93458f61e72af94a9c3ad65768801982296930040db1029feab7c01b61624f4b83d83be9c0f9a8c7749fa31e8d75c0bcad98e1b3ad688201cff409dc14039ee513b8990e98dfe6a7c955698e69c8ec3468480b0c7c4e1ac05b62b566aedf5ad30a6b3e0b7c369f3b63addc3c9fad5c6b0c78be4fe03618c9bbfb25b92dd67ceee1b3f96c8789bca75f91db639571af3455c60e98455de0d3a276c4245f9826c93b6106706f9f06b0336642f6498309c9c4c017a501bc0ba6878bfdea6157cc3e15fab44fdd3033b2c4a719e98e012ff509dc0323b9c82fc93d31fb54ecd33ef5c2445ee657e42c1d3277ef97272332779811e0de583d5991867ad207e3a3c42f1f7d3173baaf4f73da4f07cc87c85666688ed4cb13b773ac3ecc5c96c7a6597d237e8c62319bc9f8899e1b44ef63a59cc318200edf9b623d9f653de1275b94895ff4a75ee84ebae56fc31e0fef89ad117db642c3b343fb63b92cd5e5f2a8ca5caa0327ed1ee32af1ef29a22fc973b3ccfac4ee314ea97c7382d58fb40f9db4cffee0870dae176f0f90f9291627b58eb792e2f9e2b86ef61c04febe991c18123feeb2cce2ba58a0424ee1ac9397eff9164e89e189c20330a65761fa0453b4f3c48fa0b6d95a63f5d21759ba5126cadcce6d8138947c7515699d6ff1dfd3a54fd9582e57eb7239da934bc8b99dcf89f25498428dd6bb4b083e495457e0572639cbc172b64697b3dd922abfb1960e15893a6f1f6deebfe49c2726791b88e56dad2e6f433d799b214a6785cc19bfdb586339c9c572b29f2e27c7076ccf9c6ff2ac6ba918a1e247ec4e14a355ab440ac96b39e40ecf056f4bd6313e0606ad1e1ff14b9f6d1b84b15ea6637d6c527563ba60a33c14566d3096bf725dfea6136a15ff753f910ccf953d3e5b22922e61fb8b7aa8b724a994ea102cd715ba5c8f4a986b5cd239222ffc2caf0a9947d51af35f974a86aad68bd44b732896af75ba7ced69ecd9cd154fdcbe9d0ec1fe2dbfd20e9459ed011f7bf7e309a652cec3303ed6ebf89816489b4ddd9a0fc7f2bc01f353cc7440e9f074ebd9520104cbd954234c723602cbd9465dce764172a60e92b77d137bee47f55ae6cb5a5c54a53468fa28bb6039daa4cbd14442ebab4a95bf5368e5b554b4dee9cbe9ae584ef7d7e574a4759bbca570e7a050fc66e78e733259947299e80d2db55adc4d69ccd5482c570724d32770a70b3d8479a214caac77793d5c9ea0f57363a42f67a3b09c1da8cbd9f86a2d6772bd02dc8626eab3a66a294763793c4897c75d7de8644595b340f15191aae7869ae469372c4f07ebf2d413cd939a2f5f23ee5657e66892c851d5a7fc598191a46330490fd1493a3925cf7a96c5df04e15572a09af4b3c762b9dd9c2efb67fb666381f533b315a9f857e3b05c1daacb5531719fb4c2f22f7804c772d9e79c2f6c6849657b969e519654781a8ff174988ea779c43ce17df7c40cf9e7210fe3e1701d0fe3d05ac0c71896582fa9d665ba28f5c43e9b1e29dd253d01cbe111ba1c4e31cce1ee42a35723255213f99d88e5f7485d7ee7106a763933f760d3c1c0248c81a3740c4c322cf10922de6b8dec59d574694fc6f27a34361a66da8a4d146f542d37af254a1ed7247f53b0fc6d31cb9fb72cc70aaf84eb6a75bd475afb3b15cbdf31c9ccd4605ebde361d94ca4c7ab4fddd79a86e5f258ac144d462ca01f0c9ff2f9b6c47d9374f55ba663f93b4e97bfeed578ce0516cb1452cec0a43c3ef1c8b24929cc4da914286bd84c2cd727e872dd1fb520059591cbb01fb9ac723685b79bebb43e5b6ab34bb330b94fd4c93da25acb3045cc4cf3b1ef52d90be3fdc5eaad43ba6c403e969f93304f33711de16331f9c2fbe25a99ca4c16f75a96a53187b3b11c9e9ccc088dbeff3c45e85e626b1e64af790e96c753b0f1d164daab647219749b3517cbe9a9ba9cee516d4e69672aa8e7300a30364ed3b13103b5a26afe7e59a54fcddb88b51a396d19ed5182549ee0cf4cf23d0fcbf7562c1223b97ceb231782cddb7c2c6fa7ebf236dcb0655c27464cedf928deef536f71cf3b4fb495fa3120f8cc2437bb63b93943979b213e7363c7545458f7eafd7495ca1e583ece4c3dbea1bafe40902dc89e58fece4aa60581da01733857fc6a8feadbe3adbad90cb7dee14fd2a3917b61393d5b97d3c19e9c8e1739b0c7532a5c3d03dc1224ca45aafab800cbc539c9ccd89bc41286676e602196e7737579cef5e4791e90c9591d087ba989f2b608c532c9c1de580ecec3a2ec926bb7c68b9e1def39e458a9246ebfd2a37ffb603939df6c9e26b91638a8d8c14558ae2e483dc2334f8cbf96586fd56c84e7622c6f17eaf23628414bec9d77857588ebd312d1a2f12fa68831cae284256a9287422c0fdb300b609607e557f0f8071efb5294f6f18325580e2ec222ea529d4b5fae79836e44782996af8b31ffc1345f8966d461b91458ff5e2b2d5db273f626392dc2727a892ea7f9c63aa8c6ea0a456bbc3a61a955c5a09ec529c6727f29369a62967b353bb536e5fcfbcfe3322c8f97e9f2d8c3d30a787d0b270eb05848ce5bbbf4d892e5989c9727e30fc11ae6d71f4ad56aacc072b05d97833ea836e15670b5b427e91a7129c124be026b45fdf61e70d653f5ddf6c5f2706572316b4eaa267e4eb0a3282bb13c5ea5cbe3b0943d8554ed94495e4ab1bc5c9dca18bd49cf3c28df741596c36bcce25d12fba6e32bbdbac4758ca20c576339bc168bc9368b370c3e82720d96a3ebcc7a80d5e528583f762d96abebb108b4645ba4c4732ac9c4a598c7aea43ed6b21fc6c30d587c6ce279163a2fa80c93f4469da47b31bac82a15eb907a6c657abcaa728c919bb0b1c1f4c436575da1954a5fccf1454df25c81e5f9665d9e17d6b016405e92d506f58d092beb30566e4966dd854ad164cec2c919a607e9b14febb19cdd9acc7c85a975f63fc39b7a4e376039bd2d995e1ed6e3b0757c281b5c4dfe74169a7f6592838d580e6e4f7eee8ca7693e7766e70ffb3d5d25b409cbdf1dbafc4dadb43d5384ef5521d2ab10d6a1a2b2b6e99f99f93d745ed2fe588eefc462d6127b0773ad32b54bd25b2ae3c52c5459023be97c3b4b444ed93d99c4abe8536b630ec0727d573235519f7e6ae32da98e5e1c88e5e06ecc674f34b2e58ceecfd2446c396f9bda17530ff0202c57f7602ba4cc7d113bc75c665d8c7932fdc774793a0763b9bd179b414876d46f6eb55a986c39261e75ad6bfd1f8bf1bd9f26086c3b66708de0897b91d9bdac47b19c4a3b39a0d2f71ae0f2d39cdf79daab2c79b8fd2ea8f4b2f8ceaf8911eeb328ab1367f67fbd629cee0ae9aac4967998b3bf2c15c8ce88095f153d4994a7bdbbc152eb7eba1805ab606a5fdcea72a1f33707008f13e6aefa3ced8d9c8f118bd59539525816d3599ce91d2da7f7f352ed2f4b359edd9be7b16f8ada54bd140f64d8c719ea74a8751566a1e5d6c96e03cc94ed738c1fab962f0618d540a31db0686fdb5c6d6ab08eea52eb2f0094775e2d1c0c7bd0c1b5152a662f5e2e63f612d35b7a3256b7763c8797c283945435b06e78fcd714697db91d28672b2341d2db031c921ea22489e3464777de1ee8d0f23f4a5af8a1848b446db62b1bbe574d2468abe5d0f630256d6d45952b135db27c662f98554e394660792428fc38e650f8083585e341dcdd4ce14f57545a319b42d81b5c9a4c9e4340e1f7231d0a1fa5a4b0a975a38697270ba33f57505526008b2c2ea2d108dc50cf21ec314ac25a0a6bb788e53027de22cac4356de810f7382571cd35c471405e2979c0ce3af16b5124485bcc1cd29ea0d63677f59c68fd5d52b9fe600dd0ba281097d5c821ee494ae2f8a1267c7960b22d6b14c8db0adad5a7a8db55a57513040c5f0f52282ddb5c715d6b392febc4084894286cd3dda1f0694a0a1b026b37cb35f115099a3a3a343d43dda5b2c76fa340cbc8e10e2dcf52d2521f688fb3394714283aa2b543d1739414d511149547aaf5abb59343cef394e4b4b16e665576c8bda35fbcba71d3bd5a3810f972ea2e12047672087c8192c07aa0027231798c5714087abab943d08b41f51bb91655089f0a76c6a3e1c9670e73087b89daa4f32a193d8a9e06cec0cb41553ab5095914083aaba543d02b9404b563d02fdf2872bdaed2ffe66b4d8b4407678ed0b022a16fa55682512091ffa7487c95ba222a129d49f82850540fb89faf5152c4cfff81fac5c7f4f9aa3e6eb1d6c9b1876877a55b8251fed7a9e720793554557293f4c2e6b1f264f21602aa3e07e6ff8da0c6baf8d00d8c1055c33751f2f67fafeb10f72625719d41bb39cfc22c92eec58e3574f3790f87ceb7a8870ea11ec2dd8ec78a068347de38bb7f4681bc03c128ffdb94e43502bae86c50696f331a05a26e001da877a8232e1451b04b1e0592ce1ae190f42e752f738630f92b3d8785f005936522a52810b638ee10f61eb55629db054f068a02495bb31d92dea724a9b6487a8978211ad43c3dd8a1e6036af3adf4c75985630b1105a2eae538447d18ecc4ac7b415351c49cd552103ff11125713c69ee554d606aafd628d0b305c4e37c4c1f25c17df23c9174943bd98fd77648fb84ba324e10515eeb44e2cea961ce2972e562fdfada4810f73120eed3a0c6c26c7b55914c9e4240512670163ea3a4a8b18ba268862bf1d5208aaccfe983e3ec50e0350226dac384234145fc825acbec3808decd291683d2ce704d347caf1b863a647d491f706e779ded4dd3bdc3d3515abe70207059bf0aaa6fa826fda362c1b68269daafa92327e658f48c67c91f161c0502b788c1e8bab53de0deb5fda9af5e33631d5f67d784d9734f6b65f7dcb683ae75777c2bb3d049fe0d5c379795f2546d56b50e4756d291d459c651b05929ae4ac94a6aa42ecbe7c46296c152a32c235f242be97e57965167232b257b92653415966534169195d48a8f2ca3650e59c653263a99f1c0f6ac2ac17e5909e719b2b4e15b59daf8922c24d6322b41046f1612cc9355cd6c6f564a71795929866367a5615e30ab9a35b459e8c2d12ca46f99850e5167251c7ccc32f0fab2c04acd2ccf686f56b5ae765652b16d59a83b95854498648160e72c74fa274b33409695e2423767ab00d8803a4bfc73f85601dffe1f5fc59fc357f17fc749e8277d4adbcbfc9e7a5e8b97fe2036445cedcd1bb80760d732fe9a27cd0e55d29c23f7d6b6cfea50dea32ef5fa2efff2fe5812194ac5c77c1fac4ff981da4977d39678e7e6815636c8e86c9c4c06538a510293863f8689cedc48d23911d0f95398e81c14493a97033a7f0e139d832349e74180ce5fc244e79048d2790da0f3d730d139349274be09e8fc2d4c740e8b249df5321c3a7f0fc2cfe40e50e07e665d2afabe600e7d7f50d2d74424ed0c65783b9c559664a68fbc7654e4b500e4fd1944555e8e566628fe2236c2b28d647436a2a2b33be8f3fc15263a874792ce9d019d7f8789ce2191a4f31150d9ff09139d832349e70d80ce7fc344e7b048d2190795fdbf30d1393492747e04b493d50a119d0323496711a03316263a074592ce53009df130d1991b493a37003a3328e9dc9925ee91bb2bfa103a2a9b5151f92018dca815162a732349657330b0519b92ca5692caa57206d27b9a882dba7d5205e108516d2a22ff05ae519db010991b4122ff0144d60d0b91032348e46f80c87a612132278244be0c88ac4f496463917405ab1011152b64509173e266f4c6cd3b00a7a70125751d99139d936c1c1e7fbf8c69b6328c00b1f301b10d29896dc6d484c440ebeff54c1db5c27f0b604a82ccf169042a75234a023b00cd4c2e1a2eca7ab91ba075274a5a61a8a449c07494c91d0c2a7d634a72fb49724bad97789f670d580ea13b843ef9e3ea09dbff0ba868ff0c74379b04d18829daed86ca6ecea658026d4cd0fd242496cc06ff0b886d5a93fd780847eaec93cdb037005436a3a4b289a47268f0e1096433ecc700bbda3c08f286ef40b11d0f01f25a5092a716b860dd4c9553d20abc9d8ac6f5c0716a494963eb6a6874db42d2695f329d5c04c86c152632874590ccc580cc9dc344e6e00892391590d93a4c64124e5e9091391790d9264c64128ebb9391390190d9364c6412ce069191391190d92e4c64127613c9c81c08c86c1f2632a3d851cc056476081399c32348e6124066c73091392282642e056476aad9d1201b8a8fc9930eac75a3a2721e180dea4c49651fe61eb12c656a6b8d7ceb4fa105cdc7e117c9d5df73591e9bc6c689698e62f91b7c6fac2555092de52da8287f01509e4949795b661ecb49685bc9e2e56e06e6a04bd80825b4af6484de0608ed1a364209fbf264845e0108ed16364209fbf364845e0d08ed1e3642a318737c0d20b447d808251c0b2523f4264068cfb0114ae83691117a3120b457d80825ecdf93117a0920342b6c84128e8b92117a1920b477d808251c1b2523f47240681f4a42ed1ddb56887dfdec7d0679280de1160064815fbc2c14657d6b726804ee8b4bda4f3f958aca47413fbd1f25954ee02c8f7bdf7102675780eadb9f92401538ab8f86cbd3c6c24577b5c65f402f0750d20af761b5f7b60c2024b63f156dfb026dcca6a4ad17f38e74160ab089b22217b371d61fded8f085066bc4e6a089c6e8a33811371ae8680e25d9ce6e9bb9c147ca918dcabf0574756010ad7872b34551d4c481c021ca0d421373d9b0e0353116a38ad9049a388892be4eacaa3fb9632f16680b6ce4e09aade4519fc58c012d1d12a4a7596209311f38ec780f88d0d324eb01d5054bfe87526be858716ac41ab963babdeacd5ea8c577d5572708d8e73244af5f5e0b3443c328a9540788f03598ab64e285a22f14507792ac253f1350383c080a87ed7014be00281c4149213cd0612d731ff7101089648d4d4fd0d8ec121489ea3a5688c0c726a3bd2afd39a089bb5292687e9e00e1f42d199ddd802f39324c7492eec04546e73440e7a830d149ba3f1c199d2b019da3c34427e99a35323a0f0774ee16263a4937d225a3f36e40e79830d1491a494446e7e780ceb161a29374235d323adb803ef8384a3ae1a9804b58d5098a409c76b285fb1702a77d7c4d0eb6b9e332084785c8a67507002af382a012abe06e2a092386c8a8bc18d8ca0961a132379254c6809d9c18c43ccf40d92f0f749e87cc3e3ecd1cfa26d5a426ba671ca3b83aad2fa8d49383a012ee64389dcd6293e4a9aecbac8f3606314a4446e549402ba7505269af9a84a17f8be4f67ae3c40e9b2b25d444eb5a6c411445b08aef04c89c1ac4245972e1a9635999b09a9b68e71ee753cd907705eed0344a5ad50c798538809c8fa3dbeb22d539b9eaaa8b2e226dd3c934761f40edf4b0524bea7992517b1d300633a8dda53cd11815cac3c0e7b2e89fb4d60cd03733885e396649554e49b7c227dbcaec0fe02acdaa59af1386c0102e82269b953c0550994fef2a999cfd474626d9c2937c50bd678789cc282ecf9f01c89c132632a3b8f0791220736e98c88ce2b2fc5180cc82309119c505cfd30199f3c244661497e34f0564ce0f1399515ce83c0c90b97b98c88ce232fcfe80cc3dc244661417388f0464ee192632a3b8fc7e3820732f4a323359d5cea4d9b66584ed3bd9b665134007734110ba8acda07be33a08ad285954c7ae40571786894cc2f69d8ccc3c40e6ded463996ac22df065fa64f4f505f4ed43495f5b405fd545d11ccc396d2dcaab2c3e06842ea224b4392074c75aa87206a070714dda476f3842149740ff04a6d10ac344661477c5fe1d90b92488ca3d7487abdc3341e55e1a6e479d70bc9dcc517f1938ea4594f4ea96ec273f6f4ed807229bf6bd19505b1c84a739d0b292810719926dc17316b09dcb28e91bc8dccbf49709ade36bc9ab6a228ff6d06f3431de7a639525d11a71c7331b50acd2fd54b14aff00fd5d4e590070e9aa139a08a3ebc88312c98cc0e9a0f95a4149a2d9e63c513c966916a0b224a8aea7d2c7c9a2f577ba9dc562ab89681faa3c0d10ba6f100d54aed8466f4739a1f256d040ada4a4afabc675d23742f6b1f4fac39409a73c2ea7a2f84ad0049506ed9d26dbce9352fb1715b51dc012985541682fb7a6e345f285026aa6f56723ab10a2970866f818e914d97871ed5dca8a83b0af64ab8c760106623525c56a716bf25176519cffec04e85c13263a874792cea680ceb561a2734824e97c003853fb85894ed2932ee976730774968589ce6191a4f36740677998e88ce659036f023a2bc244e7c048d2b937a0735d98e81c14493a8f0074ae0f139db991a4732da07303f5b813ef56e65b7f7310bea56999ec1795b0fd45bfa944bc31478866af902323741f2a4227024237063126cabb9ef62a777bbca9d812817f643313e521bc5ac089df44496513a6b6ce0f7c008f6c4fedcd400ff7a724af3d4b7674c9bd0d34e1ac27d91ef07f8221bb03c2482ae10a0f3252ef03a41e18465209e793c848bd17907a501849255c254746ea5d80d483c3482aa1074a46ea2040ea2161249570050819a97d00a99bc3482a61c02319a93d00a987869154c2401c32523301a9875192da93b923a1743b7b261fb3476869c9c275ba8259d1c329a91ec4aa86ebb8a9b5279a57897fdb19e1a301cbc40e635c583e7f5ac1368824565a1abf9ed9d3d105cc39cf9054dff3a80a21873985704410e303d8e8953b668ab0e34016a3d215988e2329a974625087063f424016837a04185e398a923e7f7b8a45313afa0950c98f0e423307b1e1c16b26197ddf03cddc42499fd9321dd20351c8ace40540178f09139984159b8ccc0b0199c786894cc2e11432324f04641e172632a318407e3220f3f8309149387c4246e68180cc13c2442661b7938ccc830099278689cc28ae605e02c83c294c64467105f35240e6c961229370b12d1999db0099a78489cc289e9c701120f3544a3293df5599d0c324db55b91618f13cad6607db6c287b5765c29e0fd9aeca2783c1b6ad9454aa058a2651a151dc0c787f30c8717ad8088de256d5070242cf081ba151dc14783520f4ccb0111ac52dabd70242cf0a1ba151dc1cb802107a76d8088de2d6d51b01a1e7848dd0286e12bc10107a6ed8088de216d67b0342cf0b1ba151dc2cb810107a7ed8088de2929a9580d00b2809cd647e377523b4a8649bba35021dd10b29e9dd49d26b1f20592a02186cec124678ea616d2ae2f87f8ab86d94c4f566ee48bb0a118e0087402ac4d09d491c08a1a6928531fc0434f5224ac23ba38620b9101b423f808cdc2701b9178799dc286aee6380dc4bc24c6e14c3709f06e45e1a6672a3789ae75380dccb82205735727cd32cfbf8802211dd6cf3829f2d4f6816c8f67c5a03c8bd9c925c7ffbe946516f3b036ab707d10be3cbc6678818d1959e68fb3cebb332916294178f0f600ea15704adabfac53aba8d0b0987b1c996966f05ba7a2525b54e74f3400fc50144379359d137c1f8c055e1b5a28453806456f456a099575352db98251a1b28a7a3ae01157571602fafa1a40eee5b82394d819cea4056c157810a7e6d1054629150d13f63310b68e5754134357c0fe71de740ab6240dff5e170827835f76e314ca899645b0caf034dcd0d94d4b6d1500b01bde7d60d8fe4c9757d40a4de8d61a2937474948cce66403b6f0a139db991a47318a0f3e630d1493a874f466711a0f39630d139389274ae0774de1a263a874492ce0b009db78589cea191a4f31940e7ed61a2735824e98c0347e98ea0678f921fd7249d9a231bd9fc0de8ea9d612697708a838cdc9f01b97785995c42b34046ee0f80dcbbc34c2e615f9f8cdc8701b9f75092db8d553d9c6d02dbc8f8066feb98da207b96f57911e3717c734463c60f6be30511c8841dd9a8692fe6907c6f107e42f2070a4571f14e1730087d5f98e81c1e493a9b033aef0f139d432249e783a0b23f10263a074792ceed80ce07c344e7b048d2f91fa0f3a130d139349274be0de8fc5f98e824dd368b8cce7d009d0f8789ce68ae723e1ad0f94898e8cc8d249dfb013a1fa5a4b3ba2d37dc159d70312e598fe80dd0ed7c2c2c54e64692cace60d4f4714a2a61782d3fe2aac26262ad25cc6a4b98f9f2b0ab22661f121ce5f0da3250cd9fa024b419537b2fe7d644680ed97e3af54187f2494a02ed7def2708009e7b5bf78a040c3f332c4fc47b3ac7af2d622b05b9e3c466ec2b654213ad6bb19500e1c24732aa5b015d7d8a926a7b6732787e5d8d91496649db01329fa66f94f847ca5aee6854b605543e5393ed3b84233dda826cbfbc56c0557a9692ca16a07dcfb37e9822a73e0ac45afb95916ed3478226e9397a3b6993b85eb4e1fc1cd025626e5ebd1450fb4ea691eb41e57e9e924cef6a7b3ef5b641085c2e6ce76ab654d0a99fa49b2461023b4888ec388bc3800978216a84134e3993117e1a20fcc5a0fa546a56b4c07abd427406c60b8194571be519d062607f5fa224b4092034e0557564f67636b0b72f5392e7e7341bd2213db25575d702bd7c25acd4928ee5d32d58045afb2a25b5cefaa6dce02b3d197d7f01cd7c8ddaed9f2ef26d3bfb6b44c80d6fe7f3190fc49928292c8ea0dbdf1ce8e0eb41b8fd4b59321bb70f8de4694b37028d7c234c6446f1b4a5bb00996f8689cc289eb6741d20f3ad309119c5d3966e0064be1d2632a378dad29580cc77c24466144742af0264be1b2632a378dad21980ccf7c24466144f5bba1490f97e98c88ce2694bf700323f081399513c6de93e40e687946476605547329daee32cb6ccea64160af8b9cc9e9d8ff278e6efcca1f5234a5acd4e5f227491c84218f60063ed1f0731d66e12421bc5d3974e0655fe93b0111ac5d3974e01847e1a3642a318487b2420f4b3b0111ac5d3978e06847e1e3642a378fad20980d02fc24668144f5f3a0910fa65d8088de2f681070142bf0a1ba1513c7de91040e8d76123348aa72f1d0a08fd266c8446f1f4a5c300a1df5212aa826886ed40f3e9c73287bcef6ab2c7ee8e8e23acd8a75251f92ce8b17f1f841e8e085e0fc942121e067af80325792a2c26d7126fc78985bb05d8c01fe907875788314bfe29a7cc8ec39c6b71b25404c870819689e5307c879ae8e96243a08b3f5192099716f003d2f83aa20a11ddb69a05140d4f162b5c0e34f2674a12fd9d7910c583d03a8086e69720daece46682a21888301a54f55f83d6d2e437518be2e67f9b8096fe46496d5756758acd64f12bf9741bd91cd1af407b7fa7a4d85992cd9da6c0976493cd572e038dd41f356b49a33e5fd90b50f9674d7624f344dbbe445249d8bef7a4a2726f6039ffa2a4520527a8756d25955b56d8951bef9f138e1391f5cf7b821d41fea6a4d5fcc009c2e95fb25e5236d0d27fc244676e24e9dc0bd0f96f98e81c14493af70374fe17263a49633dc8e83c03d0c9cfab0f0d9d432249e72380ce5898e8248de624a3f34740673c4c740e8b249d3d80a3944149a773da6b0d4ca9919d13f725e809d5a2a44f056ae341b0eee1b92846bdef0faa76ed309119c5a8f743009975c2446614d7fdee0bc8ac1b2632a3b8ee771520b35e98c88ce2badf2580ccfa6122338aeb7e8b01990dc2446614a7dbe602321b8689cc28aefb2d0064360a1399515cf73b1b90b95398c88ce2badf3980ccc69464267f34997e133ec26a4f1658733a20b74998c9256ca0c8c83d0190db34cce44671fbc82301b9cdc24c6e143743ad00e4360f33b9843d2a32722f07e4b6a02497efcc962f0791b9981c48ed2f9b2fc45926f64d8e1e851d994361cb308dd1936e23493646df066864ab30d1493a644246e76440e7ce61a293f4842d323a57003a5b87894ed28d01c8e83c18d0d9264c74921e454a46e77580ceb661a293749b49323adf0574b60b139da44791d2ad3e02b3efeda97dcd45a2122f123ff0c40b45047dd44fe2b899391476a0a4b0bab06e47743b769e8c4ab208f93f403043474a2a1b336715c758eb317fb18245f9709d3d01759d28a9eba6b18bfa1ef9780b649595ea1a71c7df1e6b81f26abe89764ce9fe1811c99f80c6a7731448261c5b2223f955407266144826b4b464243706ed7e9728904c38be4f46f27f4093bb468164c2900932923b014dee16059209bb096424370524770fc2c7c57a5d6e1f97904a321ff76a60147a84854ad27154322a1b01adec49496547e65eba58cc36323ec334cbfaa088f1037a706a095d303262a7031ded45496ca687d852b03db5b3d94ba298952886ffec02e8cda2a4b799487aa9c8fb7ab9398177a2af3c829d5dbebf8522b077586c28e9c25ab2aafe35d0c53e61a19274c1031995bd4173d4b7260702038b2f215b3d5f0646b3fa05115fa21a207baf3118fc9078d49f905c32ebd91a54f9fe94e47611e44eb15e9a23b4b1583443f6e74e0bbf481e6b3eceba5f6afddb7e3ed1ba165bb0451124b83e689e0604b1a471a098560978492359f0cee1a0f267d76493147d4f330354f51c4a2a5b5643a5ca29e9b8ff762a1adf06340e0ca23f0469b4b7179ccbf2d8346123cbad17eddff2457f6913e31dd0b1960425b443782da8e81d03e8cda5a4d7df01d0843e29d9ee8ddf80a66850100600f3491d03406847c90cc05180c6c19434eec49c905cee7d724f738ad04c5eeda3e70a3505c40da9d9b6dc8622dfa88d6ccfbbf9c04a0e0da22ae75456e72231c9e16c6119e5bdbf9f071a398c7aed1d272c4f245c2c3e2d14afee0f76049d239ef2edab09a34e0aa9c89c0cc81c4e496623a093360b513eb97012e8e18ca849ab18d8322fb291a2278055dc25082a73124c53443b90f1135099770d221674f00e170b7a00a070641033925c1b2708877b9d1062baf5c952d1cccc621b44f84199f58cf7760239eb95acd59e02881d15c4905aaea0764719523b1b3438a329e9f36ef26bdb477ba3f429962ba49bf3192a0c016180576d2a5a9b81199fdd82d8c781ebe42441e64cebef62117ce0ec365f1e69a7a808e8e8989a9c3e730ffb467183ab85c05a8ea5a4521d0e3538785b49d6d41c09c81b47495e778fadb405b0bb823bfe16026702c77d7c50b673bc48de0e84e11674832097c36d0ac2769291b906d8cebc9ab59d511f666b00a89c50937d73f7d11284ee11d9d1128b40159f1884d3cecf280cfcbc18324dfc073444938258ea9aecd9ad232279b6700750b1278789cee191a4b331a0734a98e81c12493aef00957d6a98e88ce641e217033aa78589ce6191a4f33b40e7f430d1393492743e0be89c11263a074692ce3d019d33c344e7a048d27918a0735698e824dd9f968cced580cefc600e38a9815e10d970dcee80bed9418d13d920faf35ba3dca5fc17903927185dac81a161b265d0ef813ecfdc306d3e3590729a82ac6a6781f1a18230d1497aac09199d33009df3c244e7a048d2590ae89c1f263a074792ce63009dbb8789ce2191a4f37e40e71e61a2736824e9fc0ad0b96798e81c16493adb81c098bd28e9ac27008aadfe8e1d60cd91a317fa528739742d08cf169251dcbaa43770d1175252d94b43a57b35d978c6b7815a25fecdc30cd609c809425779b60a046b2ace8890ec3da9c81e0ff476ef60163ae706df9d240bd37a07d0b74f58f6de201d0226abf6e782f67b5158a8241daf24a39281b67b7130a1d62376a04afd0468800ae93591bf6e2fcee303bea516208c712b1219e051c21b23a889dd817d5c12c4821427bc9aafa3582ee2d6cb82080c2473c4cf01142e0dcf5e1a513c1cbc1768628a28a96cc5f81af06266afbbb537cbc1968f12eede4656adeb019d2c0ec7a624845b3b90ed49d01db4d3cbc2ba6b06a90b44b66bc678d0862f0f2bb5a48e3a19b55780cabf827a3a778acb39f25ace7c6155274a4f9370770d324bda05905912c4dc78724ba606b1a1116cdf3f0464ee1b2632a3b802ed7b40e6ca309149b8cf351999ef03324bc34426e1666364647e00c85c1526320957f89091f91620737598c8243c93858cccf700996bc244661477be7c0d90b9364c64123aed6464be01c8dc2f4c6446711ce90740665998c8241c042123f31740667938c69208db71b2b1a477c0d8664578b66924d448b210eb530195eb28a96ccbccd7f610da4bb2f51333c060dcfab0114aa8a16484ce04846e081ba184fd73324227034237868d50c23e3a19a15300a19bc24628e1d82619a1d300a1fb878d50c2f14d3242a703420f081ba184fd7532424700420f0c1ba1515c763a16107a50d80825ec2391113a0e107a70d808251cef2423340f107a48b84f55216cf3c94e5519073aa29b8388e3e43bc5ec385be6fe0ab4f3504afa5a3027f8505df9de6f05422b5706117e4816a0d01990785878c63a87473240e11340e6e16122338a010a9f01328f081399510c50781d90796498c88c6280c2c780cca3c244661403145e01641e1d2632a318a0f01a20734b98c88c6280c28b80cc63c244661403145e02641e1b2632a318a0f03520f3b8309119c500856f0099c75392c9fb70f62991eab86dbec2bc4c6c2351ce96890fa3b8ff5b57e6107802f5b2abea57f6da87d510da48b2c36ada83f54227868548c2969b8cc80fc0c0da49944476164416c89ccfb22af174e61c3cc7f7275c24c787f808e652ebdf36f444eb5a6c4116d1914b7666406b50dd4f0e62e955d541e164165f11f6d2c9965ef5067a7b0a25b55d34d4da23989cbcd56caad80a656dc2498d28ce616600dd3d3568ddd59f1754d503203dd1ea022a6ab703dd3d2d3c87834571b06e1cd0d2adc1ecef3134f87921b250d90781437f7a9876c71e11c960c43e80ce33c244276977938cce7680ce33c344e79048d2f924b095678589cec191a4f33640e7d961a2735824e9ac072afb3961a2736824e9fc1a68e7b961a2339acb0c4a019de785894ed2956e64749e0be83c3f4c74e64692cefd019d1750d2d99525db57c747ed4987432ea7a2b81de8b35f188ee190f16c8d18795a23eef8dba4eb35ffa2a276273096bf8d925a7e93cfec2dc9a337e2d90454f28bc2643347443202be23f0372f0e139da4b14964743601745e12263a874492cefb4065bf344c740e8e249d97013a2f0b139dc32249e78f80cecbc344e7d048d2f90aa0737b98e88ce6dab6bd009d5784894ed26dd1c8e83c1cd0796598e8cc8d249d6b009d5751c7d0d9c78cf04558819fa14a77be10f034afaec9ed7da21fe3b1100c6a5c434965074965a9f512a791f3b08ef1f8ce220fa9de23c30869258bf26c0868bd3688e044456b893638915c3fc9aafa6640e4759444f6f410b984558d924b3e9e8e906ab2d1a5b700d5d753529d53c5146044961b8c7c8eb5de2f132bdd49e399c90e636e02c6406f08e27498e1d69f5532f142b63c38bf802c14ec65e058dd18c408bdd2e072a1b5bc2973b6dfdfb1ecf024601c6ea20f12776f1fc06792ecb52013d8465622c06dc009222365a2d2936f2b40b6374329f0676f0ecfa946515c6ddc05e8e92d9454f6a8e278d9e1b5dc675d2aaabfc9a932d1f316ce0744df1a15a209572993117d2d20fab6a8101d45ffb71c107d7b54888ee29949c702a2ef08b24f5795687de7629204986541eecbec2816529d26f32cbe0354df19d693bf7229b72f22d3e27b81d3765758a925ddde958cdafb9943eddde1d8059f709119d9d29ed66044e19e2056460ddba16619fe005a786f780e11205ca3477688c062d00cdd17aebd4673237988c05ea0f1b93f6c8446317e7a0120f481b0111ac54304e601421f0c1ba1513c44603e20f4a1b0111ac54304760784fe2f6c8446f110813d00a10f878dd0280667e403421f091ba1513c44603620f4d1b0111ac550b63980d0c7c24668140f112800843e4e496813a6620303dfcb846cdc680e73c87b22dc273010ea26d9090ca3402ffec9200384e0b83de7a350001779c6e777f4b1fc4f01fd4f0511859d238ac0dea14f37b81ced60a14f81b1789a92ce8eccdef6708dd0e052cb207011940ed7d8968764e3a63d00b1cf0431eccc8f470fbc1123a3ef1de0013c1bde1d23a3184ad11d58d0e728a9edee69c04aad57978b10cbb2ff030dd50040f3f3e1d82841b70705e1a82ad9be9127026a5f08c2b60e1461c201db56b27d268e01b6f5454afafab2c49127a906b6138e119005b65f0674f6a528921ec5d5046701d25f8e22e9840d1f19e94700d25f09cfaebe513c67623173a87c35bc3e0421b5643ec4ed404b5f0be23c94e4561b0c8ee4eed3bf03325f0f1399513cddec5b40e61b6122338aa79bfd0ac87c334c6446f174b39700996f8589cc289e6ef61120f3ed20a669946fcac7b08a58bef0368b2a498449ec087b0f3040ef3b41cc1360baea2593742f21323a9b033adf0d139da4110364740e0774be17263a49b76622a37319a0f3fd30d149ea8192d1b901d0f94198e824ddc3928cce4b009d1f86894ed25d02c9e87c11d0f95198e824ddc3928cce3a607dd4c7f4c16bf9d6633e0da892afb1997fb2653eed9943e82761da27704424e3a97b80d9aa4fc344e7f048d2d91ad0f95998e81c12493a1f0395fdf330d139389274de04e8fc224c740e8b249d19a0b27f19263a874692cecf80767e15263a074692ce6580ceafc344e7a048d2792aa0f39b30d119cd757c1b019ddfd6e4c607ee8a4eb8c6942c98f775d063ff2e2c54922ed725a3b205e8ad7f1f4ce8630dac8d220b7d7c0654ea1f825858c6135e26f45061af96af446fc63206c8fb3188edbc734423c37733d58d1b91ef744a3642341ab8e53f054164724d4bf4ac6147d0b0fc1c1622a3b8b1711c10f94b5888248c372223720a20f2d7b01049382d4146e47840e46f61219270c71c32225703227f0f0b918441ae6444ee0988fc232c4412f6acc9883c1010f96758888c6267702320f2afb01049b818808cc82d80c8bfc34224e18e8c64441e0d88fc273c6738447119406340e5bf9454b660badeb60a6d290aa2a74da68fcb414ffbbf2022d6935b8b3684b2b921d3c8a30099ac4e88c8247482c8c83c1690190b1399515c7f760020331e2632a37878d06640664698c88c622bbe0190592b4c64467131df264066ed309119c5c57cfb0132eb8489cc282ee65b07c8ac1b2632093b9164641e0fc8ac172632a3b885c48980ccfa94649a9ddf41d8fc904ddbee037ae40d28a934dfe6775824cfef781be866c3b0111ac5f33bde0584360a1ba1513cbfe37e40e84e6123348ae7773c06086d1c3642a3787ec75380d0266123348a71bfaf02429b868dd0289edf713b20b459d8088de2f91d7700429b878dd0289edf712720b445d8088de2f91d7703425b5212cac3ac27b0f5ccde39738aecc597581ff39de5f96764e491edcfcd57fa2bf25ad5648fddbd0737a11e9e4a45e5c7a0c7be3325951d99f774e2e477cf246cd3c976cf3c14e8686b4a62bb31ef1ef2f6491c1359997c8503f205298907efa238423f12686f1b4a923b7848b609b56341a6b03c6d8cd250ab3f4f4a6b6d2a5a5f03b4b60dc2be2637bc1cc5698f5d8019684749653b56354669ae005b6be927df2986eb6c816426ca6b83fe0694b6a7a4d4df96cf84da4ad668e5808adf81925ae7489e1c0fc501ac9d24db28ea0de0d4770c823e7e4271e0f491d9ca07007d9d6ad2adcf63fcf4a22572228eb005ef4945e5eea022770ed2312ab184982f8e2f5b27c8c37b4b84b492f596de03b46652f7da178919f51dc73a6e01ed7697208216928b7c1f18c90890594013bb8689cc284680e40332bb8589cc28c6c08f0564760f1399518c81cf0364f6081399518c811f0ac8ec192632a318033f0290d92b4c644631063e179099152632a318033f0490d93b4c64467184bd1f20b34f98c88ce260f04040665f4a32e1f650259a29df80ce64279b001e03468afa856308783cf39e5249ba8707d9fe6f7dc1f679fd29a96dceaa4e5870718bac7f6f0c6282826c497509d0ce0194149a1fac44e869928d1b750256333b4c74e64692cea980ce9c30d13928927496003a078689cec191a4f35040676e98e8245da94e46e76d80ce4161a2736824e97c1fd039384c74922e7521a3b325f0358704315f3edcfab31ecc4e06d20b229be4e57d0045dfd09a0cd372076447712fcd59c0651f164ce4460d682259459e073471784d466eb835318adbe35e019a981161a1323792543600cdcb2e9454b6b46ef2ad9b75d66bc5026ab5f5fa0a5626ec6509db5f0cbc9588bbe855eedaa072ef4a496367a61b112ab7c4592af8e08b58c68a11223ef0562803b402d97e8f8cdce580dc9161a9eea4213164d5fd4b6039478585cadc485299092ce768faf1f5b9e2737d9cfa8e76f6691b50e1770bc2d3e4812f810711f25d2168820881a33e8692be66a0319a22677c0ac4d2aa95916e709a0102c7063175e62cf89b6fb131de12ba483842ea3ace7a7985f5d17ae120ad13b393a4fe26d9ace47180da7161a596b4574446ed8dc06a8e0f6661ca88e0ad26d9a4ee0f4033f3a87b42895c239553d2f0ffed54343e0f3ccc099434666a68b4abf85ccb499a26dc21ded5b47fcb677ccdef26ebbecc1278adf51569e8410b2a7a7703f44e0caffd2474e8c9ece757c07e4ea2a4b68ba076b2d0cf398caff529963df72201a5d6a1d7905b4fe6563500044f0ec2c26263f1e385c696d15a581e924142e387a0a19a1244841cd6508db53e2c13569594c8c9194444d6073df8a96121923066938cc82c40e4b46066867283f73cc9ece2b9a0424f0f3a5233f9569d70a115599b7e1370976604119aedde5ac29ee470a63da23d0edf07b4df3383d807492d982eacb48f73c54c9177d1341c4c8ee2b9a97f032d9d15ce2d7a080744c8b6e8e9089aa5fc20f41556feeaddfbe81a823d8021981d44881727d606c136ea09a0fd279beec804edff9c2096130cb2feac9289170a8d0d8842b25543d7038d9c1b9eddb8a2b8367d01a0b28092caee9ec6c816609da8dcd80aa249f263f73629847da6fe54345f0adafc7994347735d0d8b9569aa582f659d6bf54384e39ad5b95493550f211b0abf383a0b8fa157073a4ceea3643238c09bd9c4a8b4f025abc7b107b1e2b63b156848bad48687da3b896f81e40e81ec14ce20d0d7e2885acbfff05a8f27b06e19926bb07f788486ebadf1ed0b95798e81c1e493a1b023a1784894ed2b307e98e84600e9d0bc344e7e048d2791ea073ef30d119cd034bbe0574ee13263a874692cea7009d8bc24427e99e35647416003a178789ce4191a4f36040676198e8cc8d249dab009d4b82da60c589642eb760ec51fce88ed157000a9752cf7c4e17f9b6c3bfd75486829788b59ba516f8782156a148228a914b9d0199459464f664ee618e25acea3cbc498878f47af0adc0a45d71100320aaca4f60abc498e7a64857fb834117735958167891ba4864b3f2e780a1b8e561a192b43d27a3f21b40e58a9a3d3e1c0e104771b7e39e80ca92a05c237bee88036d946e510083c4b11811852f82d67c5f4a0adbb3aa536ffa79a1c08e7d2023f511d0f0ac0c7a4f440e617b9751de137130a0b0341c2b9008d77190ad40fa7fdddd7970d5d51507f0fbd418acb2289b083a3a8cfaacec5980713a6d0ad23252c908fa8fe368cc324402a4d92adad62ed6b682b6022e5056371417b4a5565c5a2b9652aba2b55abbd96ad5a2b855a5b6546bef3dbfdf4bbe495e02e9f8bd3927c34c7879f9bdfb7eeff3ee6fb9db39a3e10e72410cc65013ab5bd387e6fe6c7d4acd7370965c1877a5514fe67e10cf95b4b91f63807691d6455cd43b4d5af3f15da0add74a4b6d0fd1686f00da2fc6b8c287f64edf9aa63815081be204b6e885106ab4c5af45c0d71883af58a6caf695b8201fc0fd65539cda57dc87e616bd06b5af39c65aa2fd9b633cc9e42ce30700b34513a6c53ea10701f34b9a302d66c0ba0f302fd484693103d6fd80b95813a6c50c58b701e6459a302d66c0ba1d302fd6846971d6faad80f9654d981633606d02ccaf68c2b49803783b607e5513a6c51cc0cf02e6253a0628883745b4018a0218a0f81a93313485a74bef642e107499ab91c21a3a4cd2b21e7f7b34d4ccaff7ee0483a4a83aa99dc496396d357a254c30f8468c257d3d99684dbc04d126b34e866eb76f6a03255e8668a05300f4526da0c42e0f1ae80400fd963650e2159e065a04a0976903255e9468a02500fa6d6da0c42e631a6829807e471ba8c5252b2703e877b58112bb4168a06300f4726da0c4ee631ae858005da20d94d8854c031d0fa04b632d554914e64851f5cef274d75380ef0add91e289e74fda6499c1d08ebf3246ed2ced8db946b46e90f75d1bdff7d867cbf69d7133d30ee41020aa5276a75c76abdce512da12d750f2f26501e8f7f5463926363779995fe050bf2a46bffcc4d6818eaab4de86c7d633b43e0d357459ec1a9a7fce7bbe3871c4f6fb5a16ed4aa8a1cbf51efc16d3966c01da159a424f4c35d95b9f85bbd2ab35714e31c9390238afd1c459629273075ca2aed5c4596c92730b705ea78973b249ce0238d8576ae22c35c9b90b6ae72a4d9cd4fc6e34cef9c0f9034d9c4526395702e76a4d9cd4898a34cec5c0b926561b3e5f78a9286d785a6b68235c82d6321907bbce6128ce7098c1c06ecffca700719dfec0f9c4de795ae0fc8ba1d5be9e493cd0b52da68ebc1293360ff91238576ed0d15137cd1712e2c72d92df163a725a125a16ec17a15e5e1fe3d00fe7cfe97ea345bedc72a1ab4a0b0931381b5cbef9c98d31ceaeb46ee652a8bd37c4b871eaeab6e9b3ade34915d27b4f0daa4fe33c1166d3dfa889931ae583c639084e003769e2a4ae8ca3711603e7cd9a38a971b6699c6703e7464d9cd4940f34ce06e0bc4513273521098d733570deaa89939af281c6b903383769e2a42624a171ee01cedb3475d84d35b9c663347492dcae89738a49ce21c0798726ce12939cdb5c1be79d9a388b4d72de019c9b35714e36c9e9e060bf4b1367a949cee7a176dead8973a249ce0ae0fca126ce22939c5700e78f34715243aad1381b81730b93f324d731e572e8a5aff21ec9405cf23e6de1cef1cdf0adcafca3065952438dd61dfa8129e0af42bbe9c74cf0a1aefb1042eddb4cf686958f84abfe3d5a2089734568904301f2275a2089a39d34c8123897deab05d26282a7930072ab1648e29a621ae47500799f1648e26a771ae46700f27e2d90c4fb4d1a64215c6c1ed002498cb24483bc116ae4835a2089b16b689083a146fe540b247155260db23f40fecc4e5a5be29d266d5ef281304be92126f5840ed4cd5d42769d69abf364c6486d785aea9367a00dfff3186180f77fce9dbd81e4fe80f9b0264c62a7080d7320606ed38469718ac34770417b441326f19245c3cc40cdfc85264c627394867910606ed78449ec24a1611600e62f3561129ba534cc83017387264c6267090db310307fa50993d83ca561f603cc473561123b4d68988700e6af999847bbce0b633f2f111667f89fb52e895f37d717100a0e8b10a32c96a5c15ee0da601f63c28e12d8597e834a591387812acf75f3053184b2acf48f934267f8ffabfd56c47081b4f09585c0fa38ffe0c7d88abd8649ebe83b01309f88110b34c460e83b995f7740b37227936f807c9a70ae9cdf1a05b4d6bf342c7d0d2fb24737046ade93bd9b9807f36f594c4c3a0caee04fe98adf6d3336dd5e38ac7fa30dd4621e993701f4696da016e77abe05a0bfd5066a318fcc3b00fa8c36508b7964de03d067b5815acc23f30280fe4e1ba8c53c32af00e873da402de691d905a0bfd7066a318fcc6e00fd438c70564d6e9e0b59617b32e986ba5886d6fcdc0cb47fd44a4b5d2547a3ddeada68ffa427b3f664e67d29ad6dff04d4d33f6bc224de93d2307702e6f39a302df63a3d06987fd184493c67d2301f07ccbf6ac224de87d230b703e60b9a3089f7a034cc4701f3454d98c4363c0d731b60fe4d1326b1fd4ec37c04305fd284491cf2a0613e09982f6bc2244edda6613e0598afc408d9df553748ee9352a7796d64310e83a5317fefdd21e2a4a83aa124de5fd2929656c010f12e5d5d7336f36dad8743fc556da0c473260d740380bea60dd4e298fbb500ba5b1ba8c531f7d500faba36508b63ee6b00f40d6da016c7dcd702e89bda402d8eb92f03d0b7b4815a1c735f0ea06f6b03b538e6be0240ffa10dd4e298fbd500fa0e13f458d75542f2396eba3b4d161934fa0d93e7704d4799df835a475dee4a5bbd710a3444df8d9586af459618848451e7a76df828b90c97b1109b5d1be27b31566d140b63e4551b63597c7be010df1323ee2cae78eb6a99167d9d1bed909e04b5f19f4cce917938e7a60eb35d8da7ad90c2e7c81bd4c7403d8185ba1750df8fb3306b62fc437c2d8b6f151ce2ff8a9d0872ff277811db44b4e95d23e10afeef18bdf2fb375264716cfdd37090ef8db1f4faff998448ec4ca6d5d13500fb1fadb0c4610f1aec7280fd402b2cf15440839d03b01f6a8525363869b0a702ec7fb5c25a0c5c5906b01f6985b57883351e60c3bd874a58e2f0080d7629c066b4c21207f268b04b00f600adb01697d2d402ec815a6189932368b0f300f620266cbefe81fcb195e74a674b68e8d648710bb877b2b4ae97cba07fa080499bebb92a497bf8ebbc44b4be7d5acd5c0135f36026dff1ae7d3cf0104828d4cc5cc0ab9ed453e26d16ad9e6e807a5ac8841ed501bad6efc459505fb1f0d9fee517f84721911ab5bd451b9b1a019376fb31597bd63d68714efeb9702a388449d9d334e7134d46a71f0b07fc2734714e32c9793a701eaa89b3c824673d701ea689b3d824e712e0ecaf8993badc81c6f930700ed0c4596a92f36de01ca88993ba7891c6791cdc730e62721e2b9c33d2c66557b34efa5a90e070a79de33d5c6f6709b1e6d21aa19be04470049376781edaee2653586c2f6d03ccc19a302dae61de09984334615a8ce2b41530876ac2b418c5e921c01ca609d36214a7bb0073b8264c8b519cee05cc2335615a8ce2b41e304768c2b438d37433601ea509d36214a7a580395213a6c5284eeb04b3b0a043e1333a153e4d3a2a425745a5ec7f32ea33ce7dce554b93304054fadf67b95a79d5799ee36cffaf67dfc039fe5fbee73399817e8f4e7517ba7a7936945725652ff07f0d7bd6e8267cd26f322a5488416985c8ca285599370fa3ab67b86a79f7c5fe75619fabdc6cff3397fcaa5948b212d3a7dc3fd7ecc2eabff00e0bfd9eccf37f5d244de18b24e94bf2f9b3997ee254ed5a528100984df7b5c525399a67bace0963b2c29d1bebcd66fac36fb96572e17567ca5e6465b07dba7f54237b56e7427f47d8aba0d02c5b8732c31aa35952b7c29e84545eb365efab7dd9618bb69e936c6680c834b926e92799275b97cbc07db2d7d9cc11b04fb9cf50d15a5e43ba37e7fb2d0f97b2927ad1229fb1bad32b1afd76c33beddfccb47ba1560664ebbcde3429b922fd86b3b2f0b5fd569d4b4ef606534525efd5fe75edbfbbc63c26e17324e28d525b2a652f3b7675643347c9b711ea79eebb2af37f6d92f2ba7bcf70a065e45d72f5ea0b52272bfc1e57c8ff735b4b1c7fb2df2c53ea7f245381c6b54e021a97e6015f90fe967b7edf658623abfbd28e0e874f26fff9b4ee633b27eceb1325a7b1f0fa1aa99dd552eacc7d7ed27d7fbeaecf2f8775f3ad8c1f13be8bbefcf98f09df7bfab54b351d9e39540e86fab4f0d0d9dae01f879dda7dda01aee07f34a3d6e5bb840600 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/6a6287356f88b584196fdbd80e1cd96e.asset.meta b/Assets/SerializedUdonPrograms/6a6287356f88b584196fdbd80e1cd96e.asset.meta new file mode 100644 index 0000000..eaab977 --- /dev/null +++ b/Assets/SerializedUdonPrograms/6a6287356f88b584196fdbd80e1cd96e.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 30c6b867d222c9c4ca33e1c0a917f77a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/71789a061e399bc49b8d6840e55b84df.asset b/Assets/SerializedUdonPrograms/71789a061e399bc49b8d6840e55b84df.asset new file mode 100644 index 0000000..b615a55 --- /dev/null +++ b/Assets/SerializedUdonPrograms/71789a061e399bc49b8d6840e55b84df.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 71789a061e399bc49b8d6840e55b84df + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e782bb3b2dc1439140700a1448b0a28540052804122025482314ea5eda527777777777777777f75feddd999dc93dbb37cf65f7f69ecb4cdf7ff890cddab3cff39d67dcb27299f3131be0fc5ac8e6b17c36882d60c56c3d5be7fc95ef1cd73affdc33757d2e2b778eab9cdf45cebd012cbb8637f94fdf5847e7f774e7ac82553a6f56b115ceb154dc9fcf4a9cbfa73bef963867fcea4ae77f89f354acaef3d20256c0e6b0d9ac43ac5d0d22168a972ae4b518b72bd6d0f93d896d76ee9608a5f84772c5ad0eceaff9ce9d0a716fada3b47a6e115b22cc5aebdc5be1bc53ceca1c99cb85c4864da730f107730f3de4b1a73c7677fe37927fd7917f37947fc3e7ebc963af80cff706ef35027f7342e72779bf8f7b8c4d708ef519cbea08cef9bb5fcbe7fabaf2b2562791d54f1eb793c7fe5266a700fa3790c70135d89b4cc640202b08b386f2982b8f83a4be9d53fcfe109751ec6c208fb39c08f4c905df6e04eef36b8323d8aec271922f1c27b9e19875ba0cbf8fe5f379f2384c1e874ad9ce336d2e96d786cb634e0d7a8d70df63a358dc679d6fd6d920cf47caa3ba3f5aea562075ed02cea3eaa2c2748c94992fbfd155735d3dcfef6f23cfb797c7b1bef01a279fdb569e8f0fa84f10ff533a4d96dfe806ce1d8e75972591a5c27d8a2fdca7c8778f7739d6bddd670ff03faddc1da4bcec14ec98eab363aaab4bbd1cef7335eaa0e44f9072a649b9ddc139977b7248dbeacaf76e96e71359cd695b8f00f70a5c390d156b197ef5dbbad7eb2b9f52be9c5f839e2a6ca7fbc276ba945b26e52afba7b8e731c5790090c3dff7a7153bfae4ee28e5aa34627c403da7cae38ef2384b1e67b2ea783ce674796dba3cce90df9cc1bc6980bccea6c5df6d7f7c486ec9c268b62fac25abd8cc1a64aaf7e7c863a380cfab67e646d07927796c1cf09b8de5715e846f36717da1e1f73e5f985c83ccf92edf86954007474ea37de579a13c2e90c78592ff1c9f1f28cec9fca0265d7696ba3010068e2e8d5bcaf35de47157af2e6c379f4e3dd3a7536c9694d90b9cf3e36c79bd3738e7bace75bfd3f8612973913c2ef6e9bc844e67b6bbfb5eb3a6c03782bc97ccbf96baf63519ecca6ea2fc62994fb79de27a372c00ef2a3d82c487e592c54e3ec63b491d14db15bee7fa80737e047138267da9a9f2ad3ee03a7fb72f38e7f78b02ea5ac2127d96cb990fbe3d5f7e5ba6ff4d5578ae6489714ff72e3f82b42126e368d3b7e57bab58623ea69ee3b6e580737ebf38a06dab35fa39df6d3621c9bba5cc9bfecc89fb4383e7e5b53da43e85cc1bb7944f0d8cbf132b93d7d6b8e72d942ef27a6c01e0b2c0d5afb9ca4fd7cae39e4c9fcfae071c647c641be2dfeefababcb62ec9b78ae533e53ebb97c6e534e9287557e95805f3c619ffb3fc9ab273933cee238f7bc79fdd5ee9b7973c6e96ba2d649eb4996d04d7f9716779bf1f38e7cf55c565b77b5c5e53f980d255179efbf96cd7a501c9fc6c7ff7d98e2a8d3cc065dbe26e9fdc3296dc6f0f74e58c53ba1fe4ca695937a49c835d39e35519e850f7bca5d2e710793c4c1e0f971c77619eb49c1d21afef0afc6617708d3fabeadec303ea968ce391ae9ed5e5fba3e4f168798465a6ee528fdde261555de6db02eef17355c63bcc675f325db6ca63b31aece9019ee3c76322d89fec5e7d7994696f6c11f3d67916b9bed2ba6b12592730ad9fb651e9c989eefd562ace9e046ce2df581c675ded4bb22e105b02ec967e15db1d5c3b4e5e5b1abf16537a9ce20b9ffebefba70219bafba7011d74f74f97d707b8bab791fec1cef0d972984fd7dd99279d616726da2a9e81df566d4241c2f22cf9ee325f582e93e1f279125967ebc3b2edeff2fc1c5f589eeb0bcb224d589e27ef2d07e136545e5ba1095f900f0b79fcdef94858aafb1700b9bafb17021d74f72ff286653b95e75e8c8425d41f86e52589b6c656f8be3d2840585e268f97caa3aedc7bb93c0e97727303c8bd421eab92c8ede3933b3880dcabe4f1ca2472af46f44de57bcad7555b4d09f3fa3a3f77fcb6fdcb49645dc3b4bede41b51b5ccbbcbe7e1df3fafa4a96e8ebd7cb7babe2e12f58f06bab59a2af97023f5929efdd009e81beaaeedf08e4eaeedf0474d0ddbf99797cbde30479fd16a6f775a83ff4f55b136d8dadf67d5be5e3c9c2f2361f67c5770fe6ade7ece1864f477ff9e700963c6fbcdd953f5ed50bee90f2d648f943c0393f96f9be5be67eb7936cffeadc56ca692aaf4b8e9d541fc39d4c5bdeea54e87bee2ee62d4fdde3e37fafcf57d6c5fdadda96bbc13d68db7ae62d93dc27afab72bc7a465dd395b96ae27abf3c3ee0e3b756cacb03e7fcb987e2faefa0caf30fcae3d6f8bd56d37ce1db14e8f1b0de5784ae20cc42979194cd8fd460739834694fe64d93f674fda04bb2f6d927e4335b933cf3943c3e2d8f4f4af9e5cc5b7f5175af67e47985efbeaa6f5d1967df3e1be8a164f3778606b0ff397954f59f67e5772a99b74d4cd5e1747944aae5d854efa93850e5f51f71ee84c336aa6eac7c51c5414cee0bf2f8a23ccabea3d8461f838d49180c0ff8ad2476c536316f1b828a2f2fc9f3bde47dd96f16dbdbf7fcdef279997fc636fb9edfd7f7bcaa0fbf22cff7f13ecf5e0572f8f96b71db62aa9efe3ab8a6eaf56fc4f97493e587d87ede6fb33799b77ed75d3eb7bf7c6e38780f3250f747c8f303bc726307caf391e09c1f0ff2c93dc0c7ea209fdc837dfabe258fefcae33b711b271e08de013cd9db5e99497dfa3529e310f9ce2870eef874b764e57ff5eea1f2a8ca20a3c1b923233bdbd5377b182e2b76b88fdfa1e03a3f1e21ef8f01e75cf69624fac9b69dd8169f6d5be4bb0f0778f748793cca67db5152c65fae6ddd5b2691f59e3cbeef0b43e5b35c1ec8d3aac355a5eb32ff8e1d2d75d81e9c3b3a745765fb0f98deb78ff4bd3fd6fb7e0fd527f8a13c7ee4d3ed18e66d0bfb441e3fc57d927de6d3fdd8f833d5fa7decd3ef589fdeaaae3d0ee8a1aef3e3f1cc9b47a93451fa6cec04dffd13e47d5d5f7bb238d24abe7fa294371e9cd77587b970593d555fff17f2f8a53c06cdbbbe924755e63b2efe5e2bd54ef98d7bdeebf72472fc7a9fe4d3fb24a9b72cebf654fd5ddfcae37721f556efff9044ef1fddf3feaf2791e3d7fb649fde27bb7af7da201928bfff491e7f0ea9f72ff2f86b12bd7f73cf0704698355e5541936b153a4fe3b807347ffdeb2ffa7f76aef7bb153e5f313c039bf3fc627af9b4f9e4aa3ff90c7ff25e120d9b23fe551d5a3fbfbeeffc5e2f53ecc6ea5f7695ebdd59884d8392c9e479f039ee547d51ed60d9c3bb6f4cbf1c956ef9d2b9f9f08cef9f12c9f8f9ce5cae973b26b775f958ffe2d8fffc8e3bff2f94b98b7ac754966d855eb7f9e7c761238e7c7f3e5f57c70ce8f17c499aafe8cd88580f305e01a3faab6aa0270eef0e9abe28af25939162876998fb36c5b8ac5e491019bebb9c3dfc4f52c79acebb3af7e9ce32495a7aa716faafff062e6ad03aa3459f5d3f06bf540f84879aaef265607dce3efa93e9c4b99b75f3859fb583ac356fa6c75bc3d87c5c76339dfec23db04aae3cd6470ce8f327fac8e2363c0398f23ca6ec5468d7da0b64be975867c760a38e7c733e5f5a9deebd5e9c1d9f2fe34700ee3f07470eed8b9dd269f1c3586aa1390e3d8badde9faef799e53e7caefea83b14130add1a56397033fbcdc1bc6d5f1ab1b387774ef7fa84fb67a0f4bc7ae90d777f4ea5a7dbd87574eb56f5deef5aded545b8f3fdcc7a71eeed5f99be2ba6d9c47f5b56e80911c2b1193632762aa5f4a8d279c51f3b76257326ffd4ab5156361771512765703bdae06cff2e335beb0bbc60dbb81737db2d57bd7fac2ee3a9f8ed7cae3f5deb08c5de7bbdec32bb73a2caff686e500d5d6a7ca43cd938765ac4588b06ce3fbf60dcc9bd6dc205924abffa9efdec8bced2137baef0e927df683649b794cd69162eabd5b9937ef55e733937c53e51937f9be7993fce656f94d550768ed93a9beadec47d2c358db002c952eaa8dbc23387774c93d509eb793c7f6f2bd24e9743af412a3f8f93dd9462ba619f07754faa7f451dc6f91f7d5b82c95f67406f743c6df04ffbacde75fb7b98c064f4b224bd97cbb2fac6f97ef6e72190e56edda7effbac7e75fea3c887fdde1fbe61df29b5fbbdf1ca2f230c4bfd292dfaa7e74555eb853be331b9cc3f0bc4bde9f03cef9f16e795d8dab52e3beb705f7551a0e398d03e7fcbeae7ea474bbd7a7dbbd3eddeef3e9a6fa18eef7ea56add3fdf2f880bcbf1338e7c707e5f579e09c1f1ff2ea51addfc3beebedc1757e7cc4a7df233efd1ff5dd7f085ce7c7c7e4fdf9e0dcf197a1cb7cbeace20596860789df6a3cbeb2ed711ffbc77dba3fe1d35db6d7c7547bbdf28b6ee03a3f3ec5bcf127db17464ffbee3f05aef3e333ccdbfed2dde767cffade7f065ce7c7e7bcef577ff7799fbd3dc1757e7cc16b6f35a7177defa97677c5e9251fa717c0757e7c59de2ff47d57b5e5be22efcb71beb11ee03a3fbeeab3f739709d1f5ff3d9dbdef79dd77dfaf502d7f9f10d9ffcd7c0757e7cd3171e6fcaef10e747d579820a87b77ce1d01b5ce7cf75f17156edd90bc1b97a8e1f3b336ffef58eeff977bce1ccba7a9f4f5a0e7dcf27eb3d20839fbf2befef0cce9d783f52f6ff8e54f5eef77d72de07ba4339f37d7292f5ffa9f8f0817c578dedf6d7e93f64de72ab6ce7adaed3abf7fb23ef7fe47b5f9d67cbf33edef7621f336f595cc9e9cbe26571d5f69b13bf565d56e817f7c782bae05d254b3dafe6ac217e10aa7cf209f3964f3e71f98f4a56fe5565854f99b7fcf7a9fbeee85ef8bb3155365361f0b994b12b38e7c7cfe4f5ddc0397f47b1ff42de5f04ce9d6f8f5169ba1acf31d0f7ddfa71c6d5ed32320e57b7b5f8bff525f3960b54fbb6ae3dbd9b97af3857751b7ede41ea39d67d4fe9ab6505f55061bfad4ffeb63ef9baf09265b4d857cc5bb6fb4aeaf2b8d445b667c7d4d8ab19e0bb3afd06fbe47fcdbc6d7aaa3d5f33ee38a6c6930cf3caf0f411a9f6ac6fe2ef57f7b3a8fe151006056a5c512e788f1fd5fc4735ff488df708da5f2cfb7963dffaf87debf21bdbd0fdfed8c13e7e9b6be0a7e68c7e079e53dffa1e5c53edea3fc4afc5be07d7f8f147a9db6270eee8366eab4fee4ff2b925e0dbfcf8b3bcbe3b38e7ef2996bfc8fb9d7df27e033afd22bfa9fa1b87fbbef12b8be7c37cec8ff29b41e07e23a0a7baa664c032c2dee0c8afe7cb3028f07eb3a630d086cbefccdbbea1f8ffe10bff3f5c7bc7cbf01fafe2831a9b70500de1afe4aa3ef0ff49f9c3c0393f8e04f2f8fda5b84ced77fef4d9f3a7efbb23e5fd24fde631d5c77747789e4cd519541ff2dff27bcbc0393ffe05c25fe547ff806b7fc9e3bf4cdbe6c59be2d5b3e26ff52c3f8f314f9b973877c26e628157b67a2f2b8b79f2fe2cd5ce2ffba0b3eac8fb45cc1347b3ea021dea806bfc584fbeb31c9c3bf726c8f6dc895d916fd5679e3c529cc36f3690f75780732ef779eff3590de573c5e05c3186724abc72fc7a653502362a5f7830b95f28ae2adf12e72adfe263dd543af57b3079da6bb2bc1b93fdfc598d7ddc547fc1db29c8f6f5d1a6b57d398d75e4049969683b8d29ff69c23ce95f969c379a2fd3bf7c5ffe27ca53c9d2bf713ef94d99a7fc90a5e620eae62da9b2814c6bb39a316f1d4fc96c2eafaf04e7fca8ec5e05de57d795ee30bf099ad6aa7e5c9526b594725683738759c162ef73b08ea095abe6184a7db25a314fb92fab95f7fbe2797ebf34894c395e314bb5e58d02e775dda9809ef0ccab414735de5ff549cbfeffac3652fe1ee09c1f953f4f00e7905d3be629738873aed7f33e39ed7d72547bb34a6b3a304f5b5af57b1d805dfcbe9c273859d5d186b240767bafd58b89bee069ac8415b10d2c57249a3cd4822ea9a3deac79311d9147899494f15575f8672b9d88b1c111a059d16681582fa7d2a9b5e46957b4e924faadd4d7f3c5ef22e7895221b42c2be11377247c822b57e6fc2b01cbf15438d7a78ad57cf8823ca5ce9d414e61bf54bcb58c0d618b9c7f5e290b9dcf96b12ae7acd0f9bd41c85be6a89df8644d26f1a57bfcefcc7364ba2b0bad75ae28a01b9cf332a1e17cf17ba3d0b444683fddb95629d6395ac756b149ce7193f85aa2ede5cedfba6f164a647a1df50b0c61d7dd658c54301538d670ed73852ffe5f88d4468888a260998c8775734569efa88490f83f866e22c333d6e952c610812ce6b996c772453bccbc0482e16d4cb450efdf2eef116c58525bf4647870771116c443f8a545f72fdefcc595d3ea794d1bca7245b1a46b0da62503cbe5e5881ed53026d4ab57773057d48f3fa6c32f8629cdcf207ef7b952f15cf800a82f323f6f008866bf4227559b0b32cf0542f932a19adf9842a172a554227e3ecb11b94998b6ce9132cf39e39f4f08d7c15c890622681233de9accc302274b1738a2ce56582b71035b0a2f79f034acb6221e3cb9a234d531891363df12c5ac3ab2aca5a2d957371f3df8f7096bd6df7dcb9c7585277cf9713d7df83416e193ca57b110aaa30ba1c6998e3e35e717c9c2a749b55df1f0e13f7a864d111faf49078c605d1dc12699f6717e6fbd9052e43c1b9e21af3cf6f727417a80cd1127ac59050c613d0dc2c11c610b8d56ac5e239f565c2144727d5de034ad9dcc3935e7e6b5ed0e3e04f550e76e95346f0debda0d74f44433c332527aaace38dfa91ccc70ee1539cf97880228bf3ed79158e47c9bcb9b28be10af677adf484e96b7110cf493d5526d23a8f60235e0a89a61c41b6a880fe6feda56e306228df34786567864688445b37651a359634c72fba8929b60923b4495dc1493dc31aae466ba68235aed166724dac49b5ad45f939c77573bc66c14f5e72ae77d5dd34cf2e8d2297074e92ca24b36d3351885d3088b26cd7561c72f76d129e90fbace78d0b5c004778d28b825e66ddb44f5b65698cadb4654b93526b85b44c16db0442e3b0d895c5b4c78778df06d430a6fa78bd9c267325bd9746b625c4ef80205ef5ee99600f9fc89fab8dc936135c2e43a6031b7bd2e7838c15e1ab59e797ae6b884e0e989074f072c92f58e1ac93aea025ec4e935a401bfc0b9e6b65e4f16774b4593675ce67a71cebfa62a7ec9dee0c13f4bac1a5f257449ee287d98a6da2b521bdebb41ab99ecfb717f1a20b5e11ce19bf4ca60bedc49e76e3cf3ef1724816c837b5b672c926ca78924fffe7bc0bf612249174c787f6dc2a08927498477c5840f4883e6db6049fbc034e41bdb62c207a54178374c786e1a8467ebd2a6d699ce940a44316e798a9912ef77ef9ee01efce7bb7ff5917f089231d5a4071699bb634194978620eaa113ce2b4d435962d315b73a4178535c784f4cf3611acdbbafcd0aa5792f9d709ea5f2510b91b2d4de98e4115125f7d148ce1585ce83482344d0eef1a962a7991236c771c73d98dbaf999853a9fed179ce71a5d0825f5f21dd3af9b79247b6914c93b18b72f36416bc939fde0a3e98234b44f6d122b2f39418cbb775da84cfe7f549cd18f175b3d860c9585f2ca5d95e93d2bcae4bc692a4343958941d1b35caf6d349e651769cc65707735fe523741a8b4a66c277c6e0dfd94e9734885adddeb59a34b8edb35cde4a3162c595379bf17da0f612aebac671e08dd2710a9d67ca9d6f9448278f9218f0114edbf800c798fba38f0e134474181f203a505a854580fe3a4fe20dd91399a69395d7ebe6b1b98ee4a5221aee292e734a6ee8968a474bd9dea2dbd41d7c92e06f0d707f1ba0d3865711f800c12855848198e0fc8882076171bc206a1ccfd549e6a90d4f59a396b006636a4f89aaf6102c459daa4951ff8a854b51f330e1d334c2efce0a277c281615a607f191245e3d0c13bca32e8ef5165ec9fb04b39dffeb9d3778a9bc48c4fe6c9119c653836c27ae973a7ff10c7b00787ebdf3843bd82b8c9ec331a79811d5294660e13653136e3f870cb79198f0591ae1d3ea84133e0a0bbbd9bab0e3cecff30d5e2c592df3366f6a982d86dd658b919655a26fab58845c8508d76cb68f1335f7738e95ced3d9221f2813f7b2c5b688e522ad0d13a6a331fde7e8f46f0cf49f0b340cf3c53158ba3557936ec542a65bdbeb84f3e4792786147c78c775f882cf580cdb7c1d36ded232d929bef0926b95787ebe708092eab272719a32c8711abd724523f13a569b05325e5ba8128d07833c4514feedf838a828052f3e3ac45ff0523ffa82179f9c9e23867267427bac80351e4b54176a12d558984475072c2eec8cc5855d528a0b13743e27fa0e36d4aacfe1316a9e90cd635ef4023f9f4a54c75ffb17fd1bc3027856ba74ec2f9692ab10dbdebae42a7862ca87282c07fbdbbaf04594d0c789dd449cc8a4e658bc9888e5da8b34b9f6cdf5c2e5da93742e2bfa1fca6bd5650b84844cb8ed629ddb8a8e921101023f9d7a7613d3172a983ba0b65072e63fddc4fa69e522db2c71ae6f14c97cfc7e7fb19e1a2f2f4d11bcd70af2dcbe2251efc59c7c8970f24cdb89397a3e9601ecaec9004295aa0bb028b4541385fe0a198526636a2f8baaf6144ced228ddafbd60fa7f6544cf8728df0990dc2099fa613ce13663e0f374a0d713a26984fdc4d286ef24e06554f58e1ab292e17750555ff2b1657363bbfcb9c6b2b84886c3115458dbb0ba3e58e18db120ddb9621d9cec010ac8cc876a64e3077cf554104271997334b279897bf5633a4fcc5a766862f7fcdc6b0efa1c17e7e48ec73b068be266a349f8b492e8b2a79274cf2daa892e76192d745953c1f0bc4f59a40e4434fc3046221267c8346786148e10bb088b9a72e6deacd78d371bc90ea569fe2ed1a454e7cae14294fb693dfbb796eb1a77d84b77994ca4a739878be10d3b35ca7a73bf3958f2ee6658a22d186c6bf38c771fc305fdd19435fa141bf3524fa5d30e1951ae19f8714be2bc6ab4ac7ab630de15a2c06a5c6af0e71ae86e1b81ba6cd469d36fc341e6e61beb30843ba9706e9d98dc3215d8c19b14967041f73e2e21be3209b2d1afc8ae4acdd8d221b0f8f7109a6c1669d063c659b595d30989b62b160770ce9de1aa42f8744ba144b91f7899a222fc3d4de5797683609a77611a6f67e51d55eae93cc4b1dfb33a4d4c137e2095fea58817de740ec3b07a5f49d628cd4c151499560017c88268027340d17c02b31e1876a84ef1b52f82a4cf8611ae10f8714be1a137eb84678d766e1849762c28fd0082f0e297c0f4cf8168df0d3430a5f83093f5223fcf290c2cb30273f2aaa93afc5d43e5aa376dbe6e1d45e87a9bd35aadaeb359273c550db4c0ec2f48f7e0a3708936fd2146c860fdfee4937f8b2a6ef634d4a1b74e1c273e8e3742a85c8caf7c4bce9788d377d1c32129463c24fd0085f1cd2552b30e1276a846f0929bc12137e924678cb16e1845761817972c4c0dc8809e6bb292594050708ef5c2fe2182fce97880529d689bfd68945814a44c77591f0fd788393eab8e62b9c644bef2d973e5de678fb20e76a18adf7c2b43e55a735ef79e58db8f172b35b9574ab21ba7185d9acaf2c75f70da5d726cc074ed3f8c0cd211d6c3366f4e9117d606f5d3a2b661d9492a6b3d838d242d178cf57245a293c656d9a27e19c11384d3e53a4c97c5c189dae58fabd8f2eb879d9fa2c8694adf906428db9caa1cad6fb623e7b8ec66787854cb7f6c3849fab11be4b48e1fb63c2cfd3083f34a4f00374c279b1e67c16b1587320a6f6051ab59f0ea9f64198da174655fb604ced8b346ab76d194eed43b0b4ed625d82ceb3da208d22d9225256890c8a67317399bb92863b56aac8b95a2c4651ad16e77345d4e42d8bcb4506e02e14b454347eac127d89e5ce5535ea6a3373a758678be298bb6c5ab6480a8ae558bc35e24a8578aa047c479fe194ca8c136651615b370fc582e8124d10f50a19448761417469c4ece7704cf065bab0e7a3190a9d930d9e7009f3bd23b084f5722c61e5bb8e856fb4d882d975a5ce2e7754836a2975fd7749c862d19158f85fa54b594286ff5198f0ab35c2ebb60a27fc682c4caec1c2e4da94c264abee3b3cd1bb2e881327e9e73b06137c7d44c1c7625e7443c468771c26f8c688828fd709e661cf3725f38fede402c28ced3c01f3c29b355e38a075382f3c11137e8b46f8cc90c24fc284dfaa11be21a4f093b1f8731b167f6e4f29fe9c8239cd1dba348d7f67a9f38fb7d09789d45ae5b1a54e3580dfd920aa8a3c3f0ce361a7625adca9d3a24db516839ddf3ce7e57d53eee8a0d475380dd3e12e9d0eada50e439dff2b446588bfb3c9f99dba06a7631adcadd3a021080b3e8788978cc27ced0ccc7defd1b8efd836e1dcf74ccc7defc5dcf7be94dcf72cdd77b85ef76b92a63a2193a6b331420f6808fd1e92d03998f00735c23bb60d27fc5c4cf843bab00d29fc3c2c6c1fc6c2f69194c2f67c2c3a3c9a2c69ca4b73d27401a6c563c993a621694c9a2ec474783c59d2342c8d49d34598064fd49434ed2cbe176ebec3c598fb3ea971df86edc2b9ef2598fb3e85b9efd329b9efa51832be0d6094e2d865189d6735744e0e49e7728cce73189de753a2730566c40b1a23be0e69c49518fa1723a2bf0ad3fa258dd605edc3697d3586fe650cfd2b29a1bf0633e2558d111f8734e25a4cf86b1ae1753b84137e1d26fc758df09c90c2afc7f0bf81e17f3325fc3760cec9b78744b3b5a169ced66ec4b4785ba7453c5bcb4b63b67613a6c33b3a1d54b6363c8dd9dacd9806efea3468c4e2d9da64d1e1b53e644bd52d9803bfa771e09f433af0ad9803bf8f39f0072939f06d98111f6a8c28eb18ce88db31e11f69843f1d52f81d58707fcca2e50b77625a7fa2d17a6ca7705adf8509ff5423bc38a4f0bb31249fe96200ef6f4fde4e9fd8921badcdde6d3735bb95fe1e2c803ed7045065c800ba1713fe8546f8e92185df8725195f6249c657292519f763467cad23d4399c110f60c2bfd108df25a4f00775c27933f0b741928c24cdc00f6904e78ac5fb6aa78f3e71e5a5f4f6d17fa7e3a5eda3e75b9e26efa38fae2bd647ff30e64b3fe8625b485f7a44279c77e5f24d5c2375e53e8a49fe29aae4c7b0fce1e720fe9f24d17c5ce7ff627dc995b5e2ff51d6444beef9bf04f6fc5f85e76f97c4f3a3addca60f892730e7f92daaf33c8939cfef119de7299d601e4dffd044d3efbb848ba64f635af37d7a138a447c5db489a23a5422a6a5e82634658be25276c8b167cf607afca9d383afa9124efeb398fcbf2286ce733ac13c74fed684ceeaaee142e7794ceb7fb0d0e17164b52c22aaf028a95eef23d591812f6046feab31b26c9b7046be8819c997ce493092c74035cec02dcf7a87698631eb25eccb31dd97799ddc1d55935bbd6b476ef5a238739c0851ccc28ee67819d3204ba74107ad0633c55f95620501b7d49fdabcb157305deae874e9125097c46d1dc2e8f42ae6787563898eb775db708ef71a6670bd58b434e1754c70fd8882dfc004378828f84d8c73430de7ab43727e0b13de48237c43b770c2dfc690348e88e41d9d609efa340922384965e85d9d605e0f6d1a43eaa1cd62a9d443dfc3b037d7609fd63d1cf6f731235a6046b44cc9880f30235a698cd812d2880f31e1ad35c26fee114ef8479863b6d125a77c92f53c0697892916656c9590e7b07e22c35b277f7b6721648b3337fb192096bf2817b9be9be45688590ad922618e4f03771b95f884e60dbe9281fa0e6f4c72b3d895d5c979b648cc8b430eedfb1863d156c7822fd208d79a734b99f10c363e257b2fa16119838366578b2c28bb460979ced361676e7c82394c3b8dc3d40de9309f6251aa3d16a53aa414a53ec38ce8a8312227a4119f6321dd4917d27c9697be8974916c5ce5335f78edc25da2285998e624bddb4f0c47759b55e37eed8d01eb8567a82654efbd4ae157959a58b45c68b81e34c0bab2d7cbda6918fffa020b9ace9aa0e9d5335cd07c89054d175dd0f0f99c8bd85891d09409f3c6b19e4eb48bff1bafd98476ac53068cbf315e404f9432ca797b181b2ea51432b84dad4e827ac25d3fba543ccb15e56b599588ea267f77a3bce6b6b0bb6f6457f79e9533b56978b812e857589074d504c9e29041f2351624dbe88264be35411206f03718e06d3580cb4202fe1613de4d23fced90c2bfc3422f5b177a2546869edbda481b85bec702a1bb2610daf60a17083f6081d0431708330d0e8430487fc490f6d465142191fe8409efa5117e7248e13f63e1d55b175ea54686573e537b1a2f708a07b491e7172c30fa6802e3e99081f12b16187d758131d782c00883f6370c6d8e2e730889f6779d70de68d62f48f3c1b1b8e03f30adb7d3687d76ef705aff0f7388fe3a87e09b9815567b3a2f00f3dd324ac55fee48037e5d15eff9df43643bedba14da4affc4741b80b5d6f2f14b7cd6847751e1d44750fd85693050a7411ba081a2a42b2c851b7ff13716fc8334c1ff7a9f70c1ff0f6660aecec076e2396fc2070357b523b8b5f53046fe8be93118d343019ee55cde24fa48b916f3e41097f929ba1c8b69f4e09e3524c61276a7533f091f18827f20a6fb0057284f67281f6aae4c51ab088731274bf735b1e99caebd2b279cefd4c14c19a633a53b30c5dba6b356b458c5177a2d1299a8dbce532cead52b592aebc6d5c58c1fae313e3ba4f1f530e347446c85aeaf13cc47ce8c0c22f87b5c70030cc7285da37c481c0d75c2f9f3a363893395b2747126d9a6f598e663349a6fed174ef3c658406eaff3e20e2c790698c7bc4b1157840afb263a5d78ae32166b101c9752836053cce6f13a9b791986b7ca29ab8a351b65a9163215c3dd725c18db9be974e2dbc6ee10d3ed493b614282f024dbc636c70c9e90ac249197c692440b4c83893a0d5ab1c49244bcd8cb83206cd1b725f6fd49baeff39551bddd03aadfdd5d757b5df5e8d77851208c36ad306df275da3407912e3f62edaa35f6e502acbcdb573bb696824a1b4cb7c9c9bc74481abdb42da6c194e05eea0e5ee32153c9c29675db6129fd544d4a3f2c375c4adf1e336e9ace38bed1657c1d596faace4bbdab454f9b5b42d12f545fcedca1db9bd95ad95b100645072c2f988ee5053ba6941774c4a8ccd051e1fbddabcd12d391ea77c2ac9c8959392b252b3b6356ced659d95993e3f1bea60d32f22b679f222c2e15de10d6d5bb60f9dd1c6d7e777ea8fcae2b168fe66ae2d1d743c2c5a36d30963be9580e65ba7e6e376bc9adeec3e52bed15cbba5b85e8d176fb6bb3452cabacae059480502891b5835486616d8b019aa701f4f0f07080ba6180e6eb00f19dce262798a52a478960c298998d695288156e57c9a44c7d1f56f5a3e9d21dd365814e97be8c210cf8208012d9f91adc39c2e9da03d375a14e579e2ce5086dc73849c25047e7decc5d6e72a368f7519dd36189f5c492889db549c4e393c22411bd301377c14c2c1205aef5027fb1080677dc85d7f07ea14cec8d99b8abd6c403770863621f2c92efa689e485a3c245f2be588d7791a6c6cb7fc2d4787330e18bd320bc1f267c491a846fa713ce0bf0bb0769be483288ae3f16984b358159774cb8c01c80458665bac890a7cdd2dcb448a553c5ccdd0f758598b1c7d3a895ccddef2b1bcc31e4d91f8f3a23443a3756667bea4a98883410c353a4c173fbe8707806617896ebf0685d2689eab998f4153ae90daa3386dc14da040763988a3598066c1f0ed3104c788946f89690c2f3304a2b8344ac24488662825745143c0cc3b15a83a32c248ee198d6a53aa7e13e991b4af91198fc3db0325ce2dce059a26aa0f69589df095751188969b246a70997c05b47c206d628ec2b65baaf34664cbbde68982f8ed67c319737b8c4f85e58995a2ebfd039e365c6f04be5af8df1f1ec5e3022ffd24e7e5b17e3bdcced122c4bf67d6c4adb185d58f1d3f5313eb6cfabd28eb30e6a7076d767b21282a61e1e34db63ceb041e70c7c434bde0ce44e6d2f73feaa9446856d001b8b7d774fdd775ba0df5d271becc27c7b1c965a95eb52abfc70a9d5789daf6767dad7f3c590d6f2147cbd22c687eb78190c423cbd12f1f4645fc73c7d071db7ee9cdbd20c72739f7353f1f9a221b0d4b932470c14766b76152930ad8a85ddfc7ba320db33c1f254f5c3a84fd045053e6576af58c429b31331c99ba24a9e8449de1c55723e565dda3b0dd5a5022cc5db2762e16b32c663dfa83ca66092f78b2a792a2679ffa892a761920f882a793a26f9c0a89277c4241f1455f20ccce90e8ee8743331950f89aaf22c9d645ef0383488ca6d70c1b331950f8baaf21c8cf2e11129cfc5543e22aaca3b6192b744953c0f937c6454c9f331c94745955c88f9dcd1117d6e01a6f2d6a82a2fc47cee98883eb73326f8d8888277c1041f1751f0ae3ac17c0596e38308fe1517bc1b561e38210de58145986b9c18d53516630db327456c985d82813e3922e8dd31d73825a26b2cc5049f1a51f0322cf44e8b1a7a4558e89d1e31f49663a17746c4d05b81413e3322e4624cf05911059760a17776d4d05b8985de3911436f15167ae7460cbdd518e4f322422ec5049f1f51f01e58e85d1035f4d6e81a217a38a731be796be6d7f2d20d474bef9a5e1706098bd138b1322c2c2e8a1a166b7592f9de7f170751f94c5cf03acc2f2f89e897eb31c1974614bc018bfb97458cfb7b62a17779d4d02bc7585c1191450526f8ca88822b31c15745145c8541be3a2ae48d98cad74454792f4cf0b511056fc22a5ad745ac686dc634be3ea2c67b631adf1051e37d308d6f8ca8f1be98c63745d4783f4cf0cd1105ef8fa1b825228a03308d6f8da8f18158cdf0b634d40c0fc270dc1e11c7c1188e3b22e238044be2ee8c9ac41d8a81be2b0da00fc3d4be3baada87636adf9306b58fc0d4be37aada5b30c9f745957c2406e4fe3400390a53fb81a86a1f8d497e30aae4ad58247f2862243f0613fc7044c1c762821f8928f8384cf0a311051f8f097e2ca2e01330c18f47147c22e66f4f44f5b79330c94f46957c3226f9a9a8924fc1243f1d55f2a95872f44c1a92a3d330e1cfa641f8e91893e7a2323943d7f8c18720c49633cac68f858eb47cf144019b51bddeec20799d2f21a726634d145f58241b34dcfbdeb79237763caf8b9ddaf1172fc4f8f88b3ee2c9f469878dc2385317a69cfc8b419213ae2b22f82ccc595e8aea2c676345c997231625cfc122cf2b69883ce762adb3af466c9d3d0f6bac7a2d6263d5f998e0d7230abe006b537a23629bd28598e037230abe0873e6b7a23af3c518e4b72342be042b27bc13b19c702926f8dd88822fc362c87b1163c8e558bc7e3f0df1fa0a9d70de6eff4110ad93346f5f8925731f464ce6aec2707c94061c5763c23f4e83f06bb068f849d468782de67b9f46f4bdebb050fc2c62285e8ff9dde711fdee060cf2175121df8849fe32aae49b30c95f45957c3326f9eba8926fd149e6a3cdbf89e926256a84279994782b96487f1b3191be0de3f15d541eb76392bf8f2af90e4cf20f5125df8985e18f6908c3bb30e13fa541f8dd583afd731ad2e97b30effb25a2f7dd8b21f9350d48eec384ff9606e1f763bc7f4f03ef0730e17fa441f88398f0ffa541f84318f33fd3c0fc614cf85f6910fe0826fcef34087f1413fe4f1a843f862587ff464d0e1fc7d4e68bb14555fb094c782c0dc29fc49c3c2b2bba933f85258775b2a225874f6382eb4614fc0c26b85e44c1cf6282eb4714fc1c26b84144c1cf636ed7300d6ef70226bc511a84bf88096f9c06e12f61c29ba441f8cb98f0a66910fe0a26bc591a84bf8ab961f3886ef81a26b84544c1af63385aa601c71b98d6ad226afd2626b87544c16f6138daa401c7db98f0b66910fe0e26bc5d1a84bf8b9519da67452c33bc87a9dd210d6abf8f09ef9806e11fe884f3f5123b39c2bb6b846b3f906415e70fb146a9ce419c3c49a3d44798e02e11057f8c15a3baa6a118f509e683db44f5c14f31c9db4695fc19e623ddd2e4239feb3ec0d7d2cd0e129449f603f80263d23d2a932fb1b4bb47c4b4fb2b4ce59e5155fe1aeba5e91544e524bd34df602c7a4764f12dc6a24f5416df612af78da8f2f758ef5d4e10c1497aef7ec004f78b28f8470cf2765121ff8441ee1f11f2cf580a3d200d29f42f188f815179fc8af1181491c76f58ccce8d18b37fc73a7e0607119ca4e3e70f0cf290a890ff8741ce8b08f94f8cc5d0882cfed209e6ab070f0b22380717fc3726787844c1ffe804f3d3115989ab2aa99f840fd4c33ff02f16c147a62182f3763cadf05169101ed309e78e3d3aaa6367e924f3e7c7442cefd6d109e6ab8b6d1f44309f0d8608ae8b091e1b51703d0cf2b8a890ebeb24f392e8f88825d10698ca3b4455b9a14e323f9d90a6c8d848f701becdcac4204c926cb3d218833d2922ec2618ecfca8b09bea24f39cb620624edb4c2798e7469323665bcdb148382562246c81693c35a2c62db1d09b1635f45a6129fff434a4fcad31b5778caa761b8de4dc5ece696c01ab9da5ddd420dd70cbb8cdd0398676f8f0cc2c3e7cb85382754174c00609b7c5027f561a02bf1d16f8b3a3067e7b4ced396950bb03267c6e1a8477c412889db2344b541688d3c431dfb3195f137a2f11c06b64d00f128b594e77eecfa9de40845fd14febd72d02b0546cca11772deef8eb99da35284c6ad509b3729ececac3abad549b81ba1174adf87bba88badc1abeadbb1b41a7573f3959ac9fcd9ff0aea85d2e79a8ad45f299bb491c97eba51797c09f0fa70726a990f1952a5789bb5ea630b2fa792f74e4845df2b433467a3ee64ff08bae4d439d775c5aeb9d4471a9e31be522cc5d6b0bc5ba9beb12b48dbf8b5f4f973f75c1ac2cd45939de672564eeda394584d85a61a35f4b6f08c13bc9e20a7c2b8c655d31cb16e82cdb2150f84d747ca858ee1aba3e2d2117bf13c6b66d30db16ea6c1be1b36d96089dd5d232779bcedab2645bcc929d75966ccd707a167fc7bbe9d014b9835789dcd32b98974376b8153c2fa912c50c98eaf10256fad2b66e18f55d74d427068a1b3399bbc79909a95a3666dfae3afb66127a957f3bc612e11b45ccdd7138be034d3a42b53b66f56e3aabc725b51ad7749eb0852f5654296d54b971e25e77e909cd1e985d8b7476ed1aba64375fdcf196ed7412b03984514a82a984734f8cc7621d8f1919c9b3a973f35e98cd4bb0724a381f503e1cdf58108673588f0863596fccb2dd75968d412c5b20e267992c9bb8556d556b59286371714268d0d451fa60162dd559348530f555a1ea6e3cb05c58934821754bfb62962ed3593a96173e03a7145e0b8ac435d73ace649a08e572511be25b726f4ea3553998554541ea04deefc212c202110ae5ceb33c1eae4a92fb7965a4cfb27e9865cb7596e5d7987206ab15e06968b23a6baa29e576988d2b74364e457d929778973b0f295bdddd64263b3a958bf433795aa29799ee9cb03f666bb1ced612e2da43a59313940b4a6eed60a1f0f6d2ea94273df5e154380dc03895e8382da8b55a567242d1390cc438acd4719814326e981023066116aed259383da4853b0b8f5e8784486dd89b8bd9bb5a67ef3c42cfae48a1ac910e02833102a5e92a83b869db445002a1b76a0866d51e580b4558abdc2da21343c89fe604971bc6be3cccbe353afbb68f5072ac14b911df6968a5ace7e15615263c1bc6a6a1984d65e1c2cc9ff64c14ed09256243f39a3c8f32f71886d9b716b32f4c9dd1b575aa2c47c4eff21e8fe4a5c374951c8763f6add3d9d78b256f152c740853683902d3727df2b6bd30a1303fa550a0f4bd9198d51b74560f44e3566175573d4c235656b767f3fcb04a5b164bad7d7f14a6f79e3abd47d758e39a2efa0679eb639993e6953bb6ad15bba925d67f938540ea35c8d1983de5580932791ce1b5e1b9a25455a1c95783f425f0d2c8ca345a3806b3b022481d59df37305df81e6f072f926d5489e195c9fe81ed311b2bb116aa20ed0041ac4c2dc548ddd2b198a5553a4ba7050a4d7f4f8f1b0f95ddb519aee3306b37eaacdda5c670a56d19a76e331f8fd1d82b5c792cb16ca9fc7daddcd37285780b2f57d2b433ef80d9b729c8080dccaac935c4e0d4c230752b2760566ed659d9db67e544d15ec74b31fe7e8e12113e7c1c407a72fa89989e7bebf4cc4b121a7e9da74a9d83a61fa9d6c9266116ec83f5c4e8bd5d0d825c2fced6b1daab91e56316edabb368649252a35f0baf451b440926de8647614b0166cb7e3a5be6874ecd74f13e486a96c9146f32c6607f1d836129d57d126ba0e9ae134cc1ac38201d35387feac14340d75fe14d3f52fb4218aba762561fa8b37a499ac2ae22827599e1320de37250f2dee2d4bc21485e42d5d33f1db3f4609da54353f2009522973acfc6c732a42f05da11b3e19070adcd35e591ab34ed9a74adb13330ab0ed559756c75c8d4ee28c4f942c27af17c987188f3e555b74fb2764722cec4c81fa6233f1cf5a768bdd5d1ed9885d97178b09105f1100937b20086247e07bf17c6c6d9988d4760e917fc6abeb0c0f5f54a4f1b31ae295ec64fd58639980d5bb0fed120e1344b8e872cadae0fe3635b321b6673317b8fd4d93b0a8d5f6accf8caea71ad6e99b05884e1746de93058c886b16627cc9aa352697d75c36ebef3f07259275b81865aa6c6c3cfc32c3c5a67e1e0c0e135d1b131318f48b7f6f331edb7066991c162574d23cb538b51a997810a312b8f8992d6178892002fb799906e2cc06c3c36580bb9dec660712db3962ec42c3d4e67690e1ae3f43d6b6a6a6cbab4dd19d3f6786c745f907009362f2dd3f16c17ccd613a294370a44cea51f9187a787f0ad3036ec8ad970a2ce86dd086b16aa6d20f5118ae96965dd0d237212d6861535549395f5530dd74598152707c9e9e057c3e4745e2bf13be98a818b312b4fc1c68d86ed41d2f7989ad6eeba04e370aa8ec3762138a87c629d6cc14857dfdfee98c6a7e934ee93904ff87b42e9fa8d96629a9e1eaccca8ef8bafa9172fd3fdf0cb302bcfc0e66c856b377353f7c4bb8965fe42e7ef0dd2d3827e23b596dd22cce63375362faee5bc0f7209ea0fea9d3054966354ce0a32bb467d318cafc72dc3fc203d3ebe02b3ecec207586b079446df6c91763969e13a4af1b2bc3b83e3e820d0b558289bf15c68212cc8273b1b121fa6f86f143681f763d5d21b412b3ef3c9d7d3d6af4453705c1e24c2ae9c02a4cc3f3751af64c9a0ea8dc79769a4b11ab311d2f08ee25fef6b6605e9299f162a5987d17eaec9b10c8be79e25e117367179468fa1e32d596b80766dd45583f7bf292d57cd9ba9d9806e58bfa4a7912af8bbf3b478cd7755b7e92f75aa556ea5883597d7190b459fffdd4c621d51ceb1a38ff6231be70d76421c51d0dbc5ebcc3cb6eb9bd9d5ba29557ed6bac4a3c833ca5a3f875fefdb54eeac5e3436175d926bec33126e1922c773f19f1d337c6c156ca2426b6d2c7c87db34c485e01c2729020e4aea1c0fb400639b58552f1967fef68cc0a5d296f1028e741eb6ab66909b2645b2cd6405aa46439a47915e83f67e9a53c547bca50cdcaedcb6dec9fa237d5acc565fc6b75f43ed421812c8c1d3add5d012a478bf18584e73991235f44b24a91dcb80baaac135da45c4c8ddf84f9baee9b03850095b7d6286e0188fc3a719d84a3b99db8e5cc6dda693982b106f5b206f3b0b89c12581d018cf7d1d980e5c09e712c575062e12b632f15ee3a577c1c5fe8c6066c6fd78d63bb92121b5f1cb340d49f3738e060a4c30156588190efbfa2105e459d82a982fa3431982b9e8ef1e13c73d81a2b805ddf300eec6a4a606d45545dca06b3f8ec6a9bc1b56c1207770d25b8d61a705ce03ae7253ed9ac4a5c2db602da321687762db5b779a3e714518b73e7f1abd9acaed7d9002ea7691cdc7594e03a8bac010e4ce495fc4d423ab7bf90b98bdfb913ee793179b535def7576e1ce2f59410db335e39ac089cb7da00ef6490b3de4009af0948efe678ba036cc0d4b56b1cd38dd4051085c9db4f52ec44e02291bad900ecec517160375102e39fceaf6e585ce048b501cfa85e713c3753e26904fc293ed2da06445bdac711dd4289a8b148d6dd4ed678321ec02a03203dde230ee9564a485d340508ffbab9f636f89c3d308ef1364a8cf54574acb0aa905ab7591cceed94703a3a2773aa1b7dd47c55777eff3c51eaaf627c65335ece9f2bfb936c007833283cdc4109b02148ecb99a7c0aaf0d809e6f15077427756e38478c5a898fa5b5a392b32ff0a1bba8cb534b9d88b6c1f9b80bc8063c0f8316fbbb3315c5d44a8b36003abb4d1cd03dd42d0daa8986b73070abab98aa12f36568dc0ef7792202168be858e67cd00688fc4741bc971222df4a0fc2e35d202b64934c956cedb2bbdda12de814b98f12653399e42b7fdb2c0b140b58852569dbe920e9bf3f53adabbc9d0bb63fa8b62e9b0aaebf3788837b80ba61108283cbb04e1455213e7424bee0ac0df0f6051d210f52c26b0a72d4f80c71776eb80da06e0685d787a89b066789e8b7c6b749069f96582ebe6403303ecc5e017b38b3bd45fe1655bbd2b332d0a9fb087ddf242f4a14884fdb5cd078bc5e1cdaa3d4de36598ca8a8121f8fafec12dfb58877ab955ad244fd3100f71825b8e6209adada03ce877f2a588fd38fb7708746ad676ebbabcdd1732cf0b227a81b17d5d8c4a01bbed900708b28e436a8e713ee9fb993fa28d970d4f1f1bc2d1893430ed633352ac837be974fdc374ef327e1f8dc9c94db37726a4ce772028f09ca093d142127c5c18139814a9d39111b2c72428cf8cc099504e6042ecbe484cac073524a4f724255b17342156073028d5dcc0935602f2774cd56a7333e442b27a13f2c2769753047dbc391a36d94cd41babe73928c44c9413a08726a6845ca49a9eb2a07ed79ce0103c37334231c722274c7e6a43c162c27d0f8fe1c4d0f424ea0612df18936fa093283f9449ba7fe3f9f033398cf81799a43e82829b865a767a8cb4e3cf4dc294f3c3f4bbec1cb10a704e3d3a16b820ef3e47ab5eeda3baa8ca4d3a691a714d53c8881a994a41680a170cf9a8433cf4a9c47009ccf998473a895382f02389f3709e7302b71be0b70be6012cee156e2ac07da745fccc4f8589ec578b1ba852efe1819be5654f8728037be94096f5c85fa23547f291bcd46d0e16c4a857308c0f9b24938475989b32ec0f98a4938875b89f34e16c7f9aa4938875989f36280f33593708eb412e73700e7eb26e11c6125ce5701ce374cc239c44a9cbb039c6f9a8473a895380f0538df3209679e9538f70438dfa6c4d98125af547ad77ace6383e960f6a482f90e2875be6312cc2116c27c0fc07cd724987916c27c1fc07c8f7a5c693298defc7cb8850d1f706197f72951b6932857c83e20ff1aa4aeeaeefa9684a9653d2a906300c80fa8a726a89ebca03dd9fcf972f1ac7d2d9b73419efe21f53038b74b7e9de814e51db41ca0dab3c2be74b20b40f71125ba6e0c8e0a083e2ac666bf1c04e07e5c9b991014b794b270d4800ae50c90767e423d1769a91877e18ed070bdd4de08de15f8e0a794e05a481f1c91f93e9fce54f01e04f03ecb04bc519987471665df06f03ecf447d062b377a533fd216743298ff0330bf3009e6480b61fe09607e6912cc6116c2fc19c0fcca249884756d3298bf02985f9b0493b00d880ce67700e63726c1241c3d4406f30700f35b936012b60491c1fc12c0fcce249836560dbf0630bf3709e6280b61fe0560fe6012ccd116c2fc07c0fcb176db7f608f8e8d3d8db780f69f9f28516e275196390f9589a39a613697a9d9387c831e77bac87c56c066b049a2b5a8445e83cf4d74b42aa545de860af9ef00f9cfd48b7b2e153b1f15cb4964ab043cfb1a7c9b8208ff4b6d4678ef467784de772c15cacf81f7fd4a89b26f4284779b7ea7c886b712277a9708efdc28ba24aa58b2fdb94861936554fb00d8bf65c26f83e5fa36a2ec0f9280df29516eab4902f4fbd0160a4fe6b8570a716b69d19e4985762df0d23f6ad74b6d2f4e350328ff478d72a2586e60bd9c64cdf7e653dd6a7c3ab69a7aee4ee8b72fcfaf0b22fc9f99d88d6688f37fadfc7891282af1ab36f7141d0710fe95098423ff73081f0308ffa6dff7cd1dc7a18e13850aee36cc368fd7780440fcc7a409a7a41301c87096804ce65f9370928e5c27c37934c0c9ea188493745e0519ce1b01ce98493849072890e1fc02e0cc320927e90454329c2dc164fd3a9438c34d061862656de709e09b754d8269e33495e701cc7a26c1b4719aca0b00667d9360120e512083f92280d9c0249884c3bac860be046036340926e1b02e32982f03988d4c824958342283f90a80d9d82498844361c960be0e6036310926e1e01932986f01984d4d82493878860ce6db0066334a98e166f0129632c966f03e005036370525e9bc7232941d40bdbc0525ca3ce61d9650c9dc157ff93adf9baa3bd0e6c9d57bd5391c9ba416b25547dd3006c2da3cd9a4ac738137b7a40c82f83a86837d5e6d734f513d80af556d2606deb11e368eef2c06285b53a2743bdd781f7aa5188ab8504e942e4e58a8dbbe14958f635110db64c21fe1aa0833d91c3655ae08bfd279695326fa2fc9fcf13080b22d7df9138ed55ccad6087493c45aeb6ba428be3c3d5f2381d02fc9b2996600663b4a986a2057a5d8b7a22254fe4d5a882243db09a49bed4d454b5ad427437b39f0da0eb59bbbc32aa88db5f947819776cc446d3ef882cf6430c996dddb11f865279360127a2619cca9006667936012b6cd93c19c08607631092661af1119cc91006657936012b6cd93c19c02606e63124c1bd77d2d0030b7350926e11810bacd1b00cc6e26c1246ccf2483d917c0cc360926e1181032982300ccee26c124ac4c92c1cc03307b50c2cc668995c97013ac09f377b209d607830a66cf4cf82a369fcd3f64963015251b303b1cf86a2f936012e6ef6430c70398bd33d1c5c6dbe4378a4e0dbe376a86266391e1eb0df0f5a1c4d709e04b9cb7ce85c51777b6b9cff23500b42f2550b8bbf77f6b82e0b100614e26108ef8cf219c0610f633bb3844d8aa49561c3a1b1487b6a3c4db0a4472b596bbdb879911ff24ebfbd90e00ec4f3f1cc1df930e3b83c9fbd0c9201e0322f9804c74a061e548eff0181b17339d0e500ecc543148f9e3349146c68b402562b9893599f04db272e56400745026e65806ef91b4b1ada83f482f734dc239ca4a9c7f00ef1c6c124ed2edbac970de02700e310927e9fac56438cf0638f34cc239d24a9c9f019c434dc239c24a9c4f019cc34cc2493a13980ce7ce00e77093700eb512e7fe00e7089370e65989730f80732475bd88572ee73abfb9107c97b57942b52a5646592fda8d0ae8040074142550b54dd3505ff35c065a8dc856d5dc1bc01b4d09af0b0bba60a977f562c2b6cc5fa9a0fe00aa96634c844ad85f4e06f57b00757b13a1128e8b23837a21803ad644a8842d9f64502f0050c7990895706c3119d40d00ea7813a1129645c9a0ae02507730112ae1b83932a8cb01d4092642251c9344067509803ad144a884a3e6c8a0ee0aa04ea2843a9425f6767ae762e63bbfd73afff8dfae21bcb2ba52cc27e6cace66bcd36e2ff189354e30f0f9eefca94251f752dd7e848130812a10f896432a10f2cd5991c1c66d727707fe5c9099b5416a61bf6b327c4301bec994f8fa33efea361bc018a6f834ed60a39d263a7f958b6ba4d19f2fd54902fd0c007d8ab9b3e1095b0cc806f3bc0b52d6a9b53928dc9bb292aebb4896386c0130a79904d3c62dc84f0130a79b04d3c62dc80f0130773409a68da3f60e0730679804d3c62dc8370298334d8269e316e47b0198b34c8269e33e858b01ccd926c1b4710bf22500e61c9360dab805f9a900e65c9360dab844e56900e64ee6ac0766e352e98f807afa3cb3a77fd9b8ddf82c80773e25de6612afbbe6a7bbb6b22b9b2fa84a06ae1e153806a2786126da8f12fd32d85295f6b51fad043eb920533398668906e435be0e8f02e7b572f1459b6730e5005f5d98695f0dbe3b3661bd9d6c1cdf6fc05777a644db3c69fa594187ae3115ba2ce095bbd4e69c4ffb17b3ea0150ee9a890eb861ecbfb472c852806f3733d247b75f7e83f058b7c79dd433bfa742db08ecdcb128139318b09a50e20241362e11340f64378b4dc2996725ce4300ce2526e11c6a25ced301cedd4dc239cc4a9c77009c4b4dc239dc4a9c7f009ccb2871f664890b634c669b181fb258c5d4e4af39ceebee0a38f30458be5006479f91aa26d9be32dd4151aac8a4498ba3ad5cd97b20f0d9e526e11c6525cebf8177ae3009e7702b71de0670169b8473989538cf01384b4cc239d24a9c5f009c2b4dc239c24a9ccf019cab4cc2493a7a8e0ce72e00e76a93700eb512e7810067a94938f3acc4b906e0dca336073078233ae10006b21ad1bfa008bf2653bd997ccd914a87c4064719bed06a7ceb5277e7629b7b33cb806f9651026d27ac09ba013419c81c2a901d01c8b5e6cc80b37190ec4210c9d76562f49c5abadf5d5868b9689c530fd9bee2f706e097eb2961361530f9f6ceab45148683baec1bcad50960db9089f598fe4bfbb3cf00f0f634773a206159926c38d7f5006db939238b4758391db01bc8682a4c8269e374c06c00b3d22498364e07ec0c60569904d3c6e980db00981b4d8269e374c0f600e65e26c1b4b1a6d311c0dc64124c1ba703b60130379b04d3c6e9806d01ccbd4d8269e374c0ee00e63e26c1b4713a600f00735f73a60312e6e564d301ef0228f7cb4423c7c8cc3772900dc67e88c5e1ed9f0978a3330f8fac19e31d00ef00fa1471354bdc496bbec364055b21155a29568ee70306edebc36902601e68eeec49c26210999f168114f2a0da9c56e5cdb96dac388e025e7ab019f38274f32609d192cd9b3c1f78e921b5eba5b617897a0294879a344d8074ed0eb2ac694f80f3309370e65989f36480f37093700eb512e76d00e71126e11c6625ce1f01ce2d9968e608360426cfca36a35b01cc234d8269639bd13d00e65126c1b4b1d7fc1200f3689360dad86b7e2980b9d5249836f69a1f0f601e63124c1b7bcd4f00308f3509a68d8d1fc70298c79904d3c65ef3e300cce34d826963aff95600f3049360dad86b7e0c80792225cc6e1a98fa36cea9f2958ced9e359a0aeef500ee4926c3254c06c8e05e01e09e6c525308e9306db2a6904500e72926e1242dd893e1dc02709e6a124ed2f9bd6438af01384f330927e9521364383f01384f370927e9422864381b80550ecfa0c4d95ae21ceefc5f2b3f5e241699b27dd2df952c8ef0cc4cacce557351299ff9d7e0ccd0a67764337eff06d1fe2c73a6f5134679b269fd4f02946753a2dc8679376d2c912bc9cd616afd381c2da18f92813d12803d87126cb60f6c9918715729c4c4c7dc25abf1dbd878b217c07bae39490061171d99a7b602b9fe79b53986296375f963a950fe0e72fff32951761728a73b0fcd13c0f8f2f91be5ebf188bf94ad11c0f99e2f2b9cbfddfb539c6389239670bb12b2126a2300f8024ac0f12d9a87fba2bfcda5d33c906a5e68ce52293666400500e5459428dbd68052594adab4bc2e4684b12ec87c2ea6c4d84c7c9a4f3458cff61235a50af1b05b3cb22f25ec0052c24b3251be4c9c7a10744331c23e78b25568f603d1fb52731752212c6f92cdecf81478ee65994839b1f2663ce524cc80c852ced1c0432fa74e39e7caf64db546d774e1993cdadb9772b604fe778539d35809736fb2391b77021fbcb236ab8e05224d5c2e511246e7215428194079552652c5c1d5388b45a3b1bb9d83ed7b603d0a22f7d5d4836a38b002f1e112e6ae60c81fdd5bacaae9e29c27eef209ae844b942ea1823909c0bca63653ca8c0da1216b196a0cea39d76602e5e0244dc17677b1bd0ebcf2ba4cf4520efbcff552560184d767a2d7877be3649173570925663aafac10e9e51ca736be4ea49f15a206b481d9bca8733e007b8339b3d66d9c9fb110a0bc3113ab7c0ccb7c432f991f1e04e0dd64cebc741beb385d40c1fce64c8c310abe1518214eb22d19b605386f3109e7282b71fe0222faad26e124dd5c910ce7b500e76d26e124ddfa930ce74900e7ed26e11c6925ce0f01ce3b4cc249bad22619ce0700ce3b4dc249baa93719cef900e75d26e124dd859a0ce7be00e7dd26e1249d2048867335c0794f26460e0d65eed636650e898cb5189155287702f8ee3569a605e96e6a6438f700b5a0fb4cc249ba960719ce1301cefb4dc239d44a9c37019c0f988473989538bf02381f3409e7702b71b6065d690f51e26c28049438b9b8dbbdcb2593e1221bde5f1fe4dc0f53e2eacb129b82bd63d9f2199f89b656fccd7b83aa84c8c9023037ab5050cbc0a8e00554b0c701d88f64667c7a5ee6bb2dc87cb52f48291f3567560f617d870ce5fd00e563a6a024ad3a92a16c0f329cc7333947b282b9fbf2164a16ffb5316f9f011f7d22132339f83084a98c0f2de003105689b11ce5560f38380064384f9a33a3c7c6755f57006f7c8a1225df907bae8cdaee4bf3193680b0c2c2f4b221f0c9a7294136656e019d832c10238be2e0ec1b68d00e607bc6d42927a43938d994930e206a3f6b2a5ad2722619da4b80d73e473de03af888b7a1562ef0fc0a80f9bc49306d1c40f81180f98249306d5ce0f92500f3459360dab8c0f3cb00e64b26c1b47181e7e701cc974d8269e302cf2f0298af9804d3c625229e06305f3509a68d0b3c3f0360be66124c1b9b3a3e06305f3709a68d5bdc7c0e60be61c64a3084f938d97a06cd412bfb9be64ccb27f448b296a4c74173c75b94287b6b5086591b26430b91be40e5b36702d06f9bbd080f617308d9223c0700bcef50f7a6c717872a11cdc925a271cee606e5f620637a97ba43a3e62ee0116286256134af4705b221c89adecb44f37162340fd2804cd8ae44d67cfc2188e2ef53a2edae41eb76fa7278ebd88e6234d206966ce43ba1ef928d7baf0312810fe8071f563a0f54ca89fd55ce5f73d84ab0c4335cac9474d93db2becd6e00e787e64cf0b7b149792c40f99149135c465116fac9227a3b90927e6c12cee156e2bc1778e72726e124dda19a0ce75500e7a726e11c6925ce1f01cecf4cc239c24a9cef019c9f9b8493748557329c2b01ce2f4cc249dac04c86f30480f34b9370926e494f86b312e0fc8a12273f510be7da57336f01307d6d92d78da6ecde20f3ba3ea078fe8d4938475989f337e09ddf9a8473b89538af0338bf3309e7302b719e01707e6f12ce9156e2fc04e0fcc1249c23acc4f930c0f9a34938875889b310e0fcc9249ca4e339c970ee0770fe6c12ce3c2b7196029cbf50e2eccabc935739872ac60725f8779ff42f4341d8ad4636ef722628ceff4a89b58f0feb7296d8f11bbc8b9810355945340bf4beff968959c2a3d87f6dbdf7274122f07b260630c467b017c9aede29129e7f167b86fad7c93a840f0509c11fe64cc0b6715acc2e00e5ffcc9da54938928e2c0dbd0f24007f9a33b89670d802d9a8bafb8097fe458952ed4b30c40734031911991fce047ef8b7d9036609a76f910d98dd1bf8e63f99a83bc15d8674a9a5ddc5a63780b7fe6beeb84f424f254b082e039ecaea12a2edc5bc25523ec43bbef00fdf07d85dd86fb210c8c596b0a9f2e58c6d483f9a0af31a8039468959e7c17ab8852239e0431a570a716b69cb016752a1fd1aa0cda2441b6e24a88d33e87603e96c1d4a946a3a62b03ad4302b87d53603cd25754d82696395b4058059cf249836aed4f02b4831eb9b04d3c6951afe0760363009a68d2b357c0360363409a68d2b35fc046036a28499cdbc457b5e2f2af6adacf8dfeb799a08f036a6c41b7e270ec24c890ce77c80b389493849bb9bc9701e067036350927e96008329c67019ccd4cc2495a0225c3f918c0d9dc249ca4a346c970c640eda8452670061f224eb86025d9509d61c03b5b9a84739495381b009cad4cc249baed0e19cebb581c676b9370926e0a4586f33280b38d4938475a89f35b80b3ad4938475889f34d80b39d493849b77b24c3b90ce06c6f124ed295bdc9701e097076300927e9ee996438cb01ce8e9438c3edba4538ce8e6c34e8cfa0ccd98912657cffb75a181ef63d15befa005f674a7c6a6c1dfff04ae1874af63af9887dedee31108dbb50c20bb6dc9f8ac6f645e2dd8017763505a48d63e3f301c86d4c0149d8d94b06f27000725b534012b65892813c1080ec660a48c2813164204f0320b34d0149385c8b0ce4a9006477534012d662c8405e0e40f63005a48d75987300c89ea680241cd64a06f26a00b297292009b72b2103791500d9bb361b28a038d202105925710e40d98712a51ae9166cd4fa702bb76b6c0160f63509a68ddb35b60430734c8269e32480a600663f9360da3809a03980b99d49306dcc80ea0098fd4d8269e32480c600e6009360da3809e05f168739d02498364e028801cf1c64124c1bb76b6c0560e69a04d3c6c9a6ad01ccc1b55b997445b94ba110663f644ba1dc0b500ea144c9bb6b278b85a4b88ad3a56f963a2ff3fdd9f86b64f0c85640680eb29b3c4a78db30ff6a47c127e613e6e36413f3f70160875282edc9fc4b4bb80ba1c4973ae302f9688ce4e9a88d85a5cd20ea0fa384ec5f56d205cad7efe0094181b6a5d3de9d06ff0158876722730a96d3db58021d0692811194289b09942af2676c8bbb2154e0b201b89194e0a2ad1943e8936459d379207a8faadde86d7bd9b3374039ba368bf1058cafc3b55ca224cc74c822fc0700e5984ce6e5a58e120b19df2cb48af9d785cdd8da5bc75261ad0f66476e4f5d3b5a2aeae3191f094c967bdf0132a1b19968f208d6e53bc4caf6a3fd41041f67124c1bdb8f0e0230c79b04d3c61ef44a0073079360dad883be11c09c60124c1b7bd0cb01cc8926c1b4b107bd02c09c64124c1b7bd0d70198f926c1b4b1077d3d805960124c1b1b85570398934d826963fb65298039851266f875de08b320b2b58a96019c534dc2996725cea300ce6926e11c6a25ce1b00cee926e1245db6990ce7a700e78e26e1241d004b86b30968c99c418953ad6ac027aa6c040dc319d946840cdf1c16c737b336bb2ae2aa1317d7c966023d0822f62c4a9479cc3feca044089be53cb0c911e6ae313c4f8c3f2aa93e77371509b399987de396ae0541309b3208da3a27739d137713512e6a9df3f86ae7718eb394ed2de0978a33fb12857a2051984389b11b8b6fd5e40e9b59eaa85be1a8b342f0e0c314260aefe53dee45b227b398a9e5512a2d845b04e0ce3527c5b571ee250379ff4e9428a36dca68e31e5857032f9d479d9226f3526529693f3b6fb624c1580778e87c4a8cd91a8ce1f61424ec0821db53705f90df179a9b0010a6ad6409c0fb2001584089b6bb403b4df8a77f802217a5c628af1101c0fd7885f3b72b7e8a732c71c4120e65242b07340680179a9d34100e85204b1aae0449c3ce99c8c0b0e18cf9224120dee0be922a031b0f30ee92896e13581550f5aa784dcbeea27f2f10e577a584b98d0666cd29acbd60e701b0bb51826d2dc10e75feaf65aa42b78a65ac2190ac4bef5280705126aaa5c16677d838706c0140b99812658f1028e73bdfe4422ad91ce72fd53655419b2d6da4ca967600d9d2124ac49d98b7ad758368d85b9dd4676d1c1ef11d00ba7b267aa5826f974388936cd9f2ae00e75293708eb212e74f20455d66124ed2d544c8705e037016998493748756329c27029ccb4dc239d24a9c1f009c2b4cc239c24a9cf7039cc526e1241d474a867336c0596212cea156e2dc0470ae3409679e953857019cab32d1103258fc768fbce79e8f36b1bb2d691d40b89a126173618d3b74275fd4c6f9eb7c441e1fe460e3b241ad00bad24cb421051bda60e3f62477830ae41ea6a0244d13c950b6057df06b28513615287937851a6f375dfeb5c9426cdb80c85c569b1ee86d5cb371f2eb521099d7662a575e21b314ee7d9599ea9ef8950ae1e3c01bd751226c0b1096542feba76edbdecbf32cc0b89e1263e28019fdea4953e50b195b52653415da3e00ed86cca20d3e16893407272b573601e9e79ea6a2252d6792a13d0f786d7926b2a6bcff5ccff95080b08212617c5fd55a98814436506b20c05799197cc37ce5cd0ce0232ba6f703696315253e35402bd8b88d3c2b476edc087c71a349306dacf5dc0460ee65124c1b97fcb908c0dc64124c1b97fcb901c0dc6c124c1b97fcb900c0dcdb2498362ef9732180b98f49306d1cd3763a80b9af49306d5cf2e77c00733f9360dab8e8e9cd00e6fe26c1b471d1d3bb01cc036ab7a3c215e5aeb64d58ff215bb8fc6150993c901265b60665b8396984692859534721c07b10255e7768417c3312ff9a20f63573b40591fc604a74f59d9379e2a355ce03840358c89a745b03548764a2b53c311207692f27ac3892a1fd0844e04329d1aa5ec821d57977b1e83c7367edd8bee8d413c0430fcbb48706dfc585300727dbc5a52918ec723825daf0f378080bea64e329c781087f844938475989b311c0b9c5249ca47baf92e1bc07a4a3479a8473989538af00388f3209e7482b717e0f701e6d12ce1156e27c0be0dc6a124ed2f58dc87096009cc7988473a895388f02388f35092769033119ce0a80f3384a9c6a7fb6bccc0f89216b10de0ce01d4f094fadbfc1c70a17303e7767039bcb4a646ddd5d75a344082c1202e0aab015cce649528301e2133211ddb1c89eb80104614f2519ce9d40bde84493709276fc92e1ac02384f320927e91c5d329ca7009c279b849374b908329cb7039ca7988493743113329cbf009ca79a54f21c4dd9c54156f21c0c709e6612ce5156e2cc02384f370927e96e2f64386f67719c67988493742f22329ce7029c679a8473a49538bf0238cf3209e7082b71be00709e6d124ed25d06c9702e0238cf310927e9b67864380f0638cf350927e99c0c329c6b01cef32871f663fe155d79c35db1c383cf3d5776c627fc63c365273a7f958b6189a4f3d5676611016f03468a9c4f09bc1d4b3e06d99bb2da3734311778ee05a680b471a19e9e00e485a680b47127c2e301c88b4c014938b78d0ce41800f262534012e6ee64201b8266904b4c0149380f980ce459c0232fa50439d8574caa428772e38bfbe43b4fac75f4592fceb8a9192a34e550e1ff0bf8f16594f8d5c4ada06df784831cc85aee670398979b049370161c19ccb900e61526c1b4b14f69028079a5493009eb47643027019857990493b0444a0673328079b5493009eb496430a70098d7980493b0644a06732a8079ad493009eb4b6430a70198d7990493704e1c19cce900e6f526c1245cd58b0ce68e00e60d9430f13d2ca738bf4b05c662c7def542b0fd7b5816b338d81b29c1761560673a0fac10e392e1ea0ab5b6cd32d99a0b0d00d69b28b1865bc6dcc635e8760651ff664a94d196e1b57161815b8197de4289b69940cb9be3f8aaf06a5d904249820c1cd98a359d01b85b3391b7630dcbdee83dd2cae54f4782087e9b49306d5cfe74148079bb49306dcc7a860398779804d3c6e54f470098779a04d3c6e54f070198779904d3c6e54f7301ccbb4d8269e3f2a7bd00cc7b4c8269e3f2a70300cc7b4d8269e3f2a7db0398f79904d3c6e54fc70298f7d76e03872bca5dfe94b0604456997c08a07c8012657d21a0522c0750e53c6adf3824de5ea7503d48892a5be375e1568a252c5592b55a6e029ef81025de362cdecabe51b4a2f3c52a96cb489c9165268fa582b81ef8e8c39410bb47f651d2652bc8bcf43ae0a58f980ed8c605a3ff04801fa504ace618c1ce36ac8788bc8b8d0ce70090203c96890e8c447f0dd28561e33e828b81a73e9e895268b022bd8d8d20a381973e418952f5b0a7d2cd46585322f3d13301d8274d054b589f27037b3200fb94a96009930232b0b300d8a74d054b58bf2203bb0300fb8ca960094bac6460b707609f3515ac8d05ac7e00ec73a68225eca727037b3400fbbca96009479390813d02807dc154b0360e165b01c0be682a58c2512664609703b02f65ba7d20f8be34842559b27d692e06ed032f53a255bbbc0f970dda650e898c35659379e656e099af98d3bc6263e7f3ae00e5ab9968530d3eb7d3c649dc652062bf66124ed285ffc9709e0470be6e124ed26d29c870de0c70be61124ed21d92c8707e0b70be69124ed2fdbbc870b6034bb0bd4589b3a68989fe4e131bf3f537816fbe6d124c1b07957d0960be63124c1ba7d5bc0660be6b124c1ba7d5bc0160be67124c1ba7d53c0760be6f124c1ba7d5bc0a607e60124c1ba7d53c03607e68124c1b47943c0b607e64124c1ba7d53c05607e6c124c1ba7d53c2d6036a8e7133e254178bea8eef10adf0a16df426f109bca4a443b3907b1c2399f293a2a2ad93207c722e75fb81058e2fcd35d8f897d1227b34d6c83b8cae5150bd96b9dbb5cb30a36982f3af909778826d22172446bea448779a5f3cc3c5622bebe99a959f7739cdf6a2d932a812427d6d67963ae738dcf0a28115f58e768b29a950b8bbd5b08e6c41a0a4e256ca324c001e6485d373277c9cde9b21db7d4b1b9486852ee3c53577cc7ad44e7885501d4991afd3d5d74f05408ad9a0b5fe0cde7eee05065c13c21913fd1546ac2af16086ba09e2d05071e7eebd95e825d81d0bad4f35433cf530b84de71da39626dd742e138956c96f3e6a6043dd439a7c1dd2a166b253d89539c25742f72ee17896361b5adb9bc773d36c2f9e576700daaeeda1a2417315d2bcfd4f59a65723f4a2eed53ee2c317dea5196b6185093456ea4e5efaf148bbe9408a9d36bb4b466fbf0d8d43449a8e46ec7c3e2bf6cff673cdc65b00b37ed10e349c60227e48ba523cf711e76ddb8fbda2c56efff0180e0e40e19810400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/71789a061e399bc49b8d6840e55b84df.asset.meta b/Assets/SerializedUdonPrograms/71789a061e399bc49b8d6840e55b84df.asset.meta new file mode 100644 index 0000000..62541da --- /dev/null +++ b/Assets/SerializedUdonPrograms/71789a061e399bc49b8d6840e55b84df.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7814e74749e8a064498be6c586e490e1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/74b91b404f14a124c923e1071e3014d9.asset b/Assets/SerializedUdonPrograms/74b91b404f14a124c923e1071e3014d9.asset new file mode 100644 index 0000000..ce6d2c6 --- /dev/null +++ b/Assets/SerializedUdonPrograms/74b91b404f14a124c923e1071e3014d9.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 74b91b404f14a124c923e1071e3014d9 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cc5f5f8e7dc7bef05cbfd5c254bb26cc080e5de6d24d914dbd8b224dbc2b22454dc30a683e91d4cefbd83e93509249000210949484212480821845012929040e0bf333ba37db7376feff6566f35ebffcf7cd0deb637ef7de74d2fdb2a9b59ff6213ad3fab58119bcd26b395ac9cd5b06aebd76cebb8d5facf3e53d757b03aebb8c9fa5b6add9bc8b252bcc9ff8d8d0db0fe2eb4ceea5983f566232bb38e95e27e31abb07e2fb4deadb0cef8d58dd6ff15d653b136d64b2bd91cb69c2d63fd637d538858255eaa97d762dcae5807ebef2cb6d3ba5b2194e281648b5bfdad3fc5d69d7a716faba5b47a6e355b2bccda6add2bb3dea9635596cc0d4262877d16b098b0491c7acb631f79ec65fddf51fe6e2d7f7790bfe1f36de5b16f9acff703ef7504bf39a19b3cdeef2f8f5f5bffb7b37e9e02cef9bb1fcbf301b6bc569b3d640d92c7c1f23844ca3c350dfddbcbe3d014f67ac93808c84a87590779cc92c76152dfd3320c7f84cd28761d90c78fff03fa6481b03b82fbfc383c80ed2a1ebf71c5e337763cb6da27e3ef7d797da43c8e96c75152b6f54cefdbe4b531f23830855e63edf7d874e6f8ac1566eb5a791e97c771f238de3e8a54c2753d1d9c07d545c5e90479fc56867186e6ba7a9edf3f539e4f94c749aef89a2c9f3b4b9e67a7a94f3afe27758ac564186783738b639bf51eb264bcc75a25c6bb38e7ef5e6c736cf3a4cb1ee87f3ab93952dede0cec68edb2a3b5ad4bdb78e273297550f2a748396da4dc73c039977bb94fdbd47bfbe5792e4b9db7f54ee3de545b4e07c5bac00ea75d1ffb7abb192cd197f353e8a9e2b6ad2b6e65bedeae4aca55f64fb3cf638af3502087bf7fae4b6e3b97dc7652aeca23948fa7d253a5fb43e5f170793c8c35a5e3315fca6b87c8a364116bcf12f300550e1cecbcdbef629fdcbce2e808575c0f94e1a6eb8b33e5b1639acfab670a03e83c4b1e3ba5196627799c1d20ccceb62f74f8cce50b052964ceb1f97668003a58723aee96e773e5719e3cce97fc3bbbfca0731a7e904a9705521706e2c0d2a5530f79be501e1725eac216bb743aaff9748a759432cf07e7fcd8495ebf009c735d57d8e1747a49ca5c228f4b5d3a2fa3d3d9aa5d8bf7ba7601be91ce7b5efeb5c2b6af738e2dbb7389bc7ea44bb7598ede1de68077951ee9a48762c9a2ab8b7157a983625be27aee4270ce8f5d9cf0c46febdd2ecab7fa83ebfcdd8bc039bf5f94a6aeab58b2cf7239dd41d8dd65d832ffefa2e2f328969cf674eff2633770ad9b94f78e7cef68965c8ea9e7b86d1783737e7f659ab61da3d1cf0ab7eb4c8f778f6589f9cf4cc71fdabf29afad96faf46089694ba5f3839c776255f2da1afbbcbbd265ad7ca727e0d2d3d6af9b2a4f8f93c70d4c5fceae071c647ab49ac04d610f795b5e5be71156b97ca6cc65f70a474e67d916ebaeec53ef8c419ee5d72ae4b1521e15872dceb371558eabb2f178a95b2f9690375b4d7be73a3ff696f72f01e7fcb98d8eecbeafc86b5b5dbaeae2b3da65bb2e0ff0f2b31afbd9016be479adcdb6fbb32eb96b99b7df9e60cb19afe2b9ce96d3a38d4f39f5528eaa0335dae73d943eca07b7c9e376c9b10f4bc8cbd90e791df409c4fa806bfcd94b5d7c53e9e6c57197ad6753fdfe44795465f96140b6f2857e4e5c35d5f976827bfc5cd583b7b9ecf3d2e52479ec9ac29edee0397edc13c07eaf7bede4f154699baa639f0dce2d3fe935c443d6694ceba7bd551bf474fb7e4f19ef4cb561f7c8300638ac9b7c49b66363b05d2afd2a36085c3b455e1bec5c8ba9bce22cf01eb7e932d7fdb3810cddfdbd4007ddfd73e4f5cb6ddd7bab36e6b92e5bb6b1445d07b1847c869d07c2e9089e81615fe1232e55b9a1faadce06e73c5e3ef49075813e2efba83470a12b2e2f72c5a5eaf782f6ab7256955ffcda28796d98267eb3000755265d029e8171a1ee5f0ae4eaee5f0674d0ddbf3c312efbaa7adc15485c42fd615c5e996c6b6c982bec2bd388cb7df278953ceaeabd57cbe31829f7aa34e45e238f1b3de4f677c9dd97865cd55778ad87dceb117d33094ff9baeaab19ce127d9d9f5b7edbef2d0f593730adaff757fd0637b2445fbf8925fafa0896eceb37cb7b239df8172cf8b5512cd9d747033f1921efdd029e81beaaeedf0ae4eaeedf0674d0ddbf9d25f8fa8099f2fa1d4cefeb507fe8eb7726db1a1be50a5ba54bafb8bccbc559f155fe700138b7e26780bbfe53cbbccbc6bb6df91354797d8f943756cabf1a9cf363dc156edc0e77a0ecff1aa4c64064db69e044fbfa4035c6702fd3d6b70696b89ebb8f25d6a71e70f17fd0e52be31d7f6bb2e57e700fda368125d6491e92d72782b89a00aee9ea5ca9b83e2c8f8fb8f88d93f2ae01e7fcb9fd407f15d78fcae349cebd9e0b5cf10bdaabec31bdaf085d419cf9ae23299b1f4f61b39f3c69124bcc9326d97e30d8ab7ff669f9ccf91ecf28ff784e1e9f91f255dffe25e09cdf7f5e9e67bbee2bbed73aecfb65013d946cfeceb51efa28fb5f94c7efc8e30b321cd5077f3a38c7ca884cebb199de5b2f759a92e83fe2dc8a87a12a0d2b56eb52f8c777e5f17bf2582ae5e5ba18e47a30189366581e76c5f259621f42bebc2ffb886279f2be2cb76305aee7655f097b599e4f753d3fddf5bc6a737f5f9e4f4b7c9efd00c8e1e7af38b6095df8b557c1b569f2da0f1d3ec3ee93f70e4e0c9bfd8825b6ef541bee10f9dcf5e03dc840ddbf419e1feab269863cbf119cf3e3612eb96abce065d77d25f77097beafc9e38fe5f10dc7c649ef8277004ff67aa24c4f9f967d14b123e43b378173cba78779d5ffd5bb33e5b150cab8199c5b32b2b26c7db3f27159b1592e7e33c1757e9c2defdf02ceb96cafb1ba57e5b3735cb6cd91efbe94c6bbb2ef3e36cf65db3c29e36bdbb6e13d3c64a93e9e9fb8e250f92c97b74013afaa6c7b5d9ecf973adc0ace2d1d86df259ffb29d3fbf65cd7fbb725be3f428d09fe4c1edf72e9b69025f685fd421e7f89fb2453fd7e4af745ce334dfafddca59f1a93507a2f96e1de0ef450d7f971094b2ca3d438c1afe4f952d77d357ea01b6bf74a23bf964795d7fec6797ff41769bcaffa98b3337cff7701c37f37e0fb7f90fc96b1c4726f99ed3f1c2797354ae5ebefcbe7ee90e77f92c7f7987719f5472977b97cff4e57f8cb811c7eff2e0f595ef67c20e5ad70d923c76746bd29ed79df43969271a49471b7bc9e25af83b10ff15b3dcb8fc52cb1ae576c873bfa6d976cf55e897cfe1e70ce8f2b5dfaaf9472e4fc87d172fecbe88712df637f96efdd9b184e535db48839f347f8fb5e799baa43ac92efdc07cef9f12879fd7e70ce8f47cbeb0f009fb4741fb33ed16762c738be3a46ca66aa4cea09fca36362b8c297e47b2355fefb9e4b26bff69744bd04fb8ee039c54bca1a7593078bc3e47bc7bae2e558dbb6b1715bc6583596f7913cce60dee9e26397fcd552fe83e09cdfd78d6bfc4d1e3f4b94915006a9318f352c391f97f937fbd4b93759b527ff0adee3e79f007b52f571ebae6d91f2d6baf8adb5f9c5374bdb54dd57f13b3e053ff95cec38f09c0a0bd69b3f97d7d6031f5807aef163a9d4ed21706ee936ee6397dc0df2b98741d8fc5826af3f02ce61be51ce12e7e329791b814ee5324cd5f7f577571815cc29f72c5ee354baf908dcef08f454d7940cd86fb3051cf9f547651cdc961866ca38d0d5f936b1c43ab41a63dbec8affcdb6bde365fc8f77b77deabcc35672d93fe479254b6c9f54cafb5f0079fcfe7e5ca6369ce35df61c9f18ae909faa5efe4f79bcc73f4fa6f4fd970cbf4a86f71838e7c72d40f6bfe5b5adc02794cf55337dd956039ead01cff2a3ea5b391b9c5b7137e936976cf5de09f2f9c7c1390f4bf673c5545c3c21afab345a0f74a803d7f8b141bef32438b7749828fb0e27ed46c26a94ef3d05ce6198aa8ff56970ce6dcb497c3eb65d3ef70c38578ca19c675d725c7ac576001b611f9897af4bae4d65790d4b28cb27a87ceaf3f4e469afbd218fff9161ec747193639fa2ecf02bfb532963174b6cb3edb2194d56ed6295f77f92220c298ffd571ebf92f24e94f29f03e7fcb89b25f87c4c8dfb66c9f3935842fe2cce2dbdb2d7b8e4ec71c9517d8f2a5e4e96f79f77bd7732b08bdf7fc18eb76c35aff853703f6db66d6362dee80256c14a592dcbe61365454f6bbacb1bd49ba917368839b9fc0fff375604dbc0765aaf56e85617ac146b171a581ecbd5ae2e1828e612a9d0678bbfa5d6139542e88bb1a4209e4a0a822b5765fd57019646d45bd7e78b95157c7144a57567325b621df95bebd914b6dafa2f51ca2a2bd82ad6689d95587f6b85bcf596dac94fa632892fa370bf5364c9b457796cb5ae28a0b5d67995d0b058fcdd2634ad10da2fb4ae35883527d56c139b651d7788d0926dafb37eebc22c91c8f43aea177b60d7ed25252a9ae658d670edb3852ffe5f8cb4448c70f4ed78fae0ffda648bd93be726c5c4ff31b43319de29b550ca982290c512aee5b26c7e2a1ac6416d4cb650efdf36ef0296ef698b9e0c8feec1c2022786effbeae98e833e9e7d52db44d3f258b6188a1a92c2342fb05c5e5ccc74f26342dbb66d72b8a26efc311d7e3145be3844fcf67395e239ff11d04e147e891120864e4bac5c6d05283c570ae5ab846a6e635658d74b2df1dc84c9acd0badb60bd03af1659bfb882152c295673b80aed45c42417bba98cc3a2a6952e6a446f6e498ba40c6c51a277e47468b2c2899c6c51971ae0e1c25858a292d54ad6b454227bf6b1e5d525977cf47e5b7dbc7412f192496858ccb4d6c54ca7b0134dea52c22b5e3a37d9e5c40bffa767d805f1ed543a6004dbe808760edbb7f9bd1a2185a76cff0cf914d009ee8c470fb01be284a955c010b6d520cce108bb6bb4626d3bbab4e20a2192dbe922a74bcb14c9993937ef43efef42d01675ee9e9e25aa5fd76eafa327260baf27a5a75a8ac5569360b175afd47abe42543bf9755890158a109cd665e21bde64f968e12437592dd5de82ea28d0ee0daa1946bc8386780ef7d73e1a3710799c3b31f4c41343472c99f50d9acc3a6192fb0595dc1993dc3fa8e42e98e401412577d5251bb1fe674d28c9c6e96051bf6659ef6eb68cd9265acd8dd6fbba0e19efe43230ede4324824972ca6eb26f2a711964cbae9e28e5f1cac53d21d7583f0a8eb8e091e1250700fccdb8606f5b69e3a6f137654937adb4aeb9add9d3657dcad147d30bcbd512de49732d547335bc4ef36663702b1f7949f2d151b8b340a8dbc3df220a6a98f0bd07ce25b18faf149f7adb2450c4cf60872b1f57727db28377971f644f113144f4e4dfda36db2c55497893ec2f41b5e7fb113c136e110bc653d4cac78dfcad6594d51db7d183be58861620d3abf0a8ba5570a8789b5b4fc3aaf7994343537b9f33121ad8bbcbf5c344f139f98543debf9fe6225a91d1ebcb754ee3bc34481d84d3e739475a5d27a66b37092f284a78689f5c14a17f8a47db7738226eefb56aaeb25824a8de3a6597a1c599e38b8b1de386c530dc1d1beed411da41736fd405aabc3453910565ac4ca8a5eba9c97e31ec18257a97aeb8473be2359729bf45beb5f92f02eb8f03e98e6a3349a2fae68e54bf3be3ae13cee47b38005523f4cf298a092fb6b24678b283895855bb1d28f76cd9779ed72ab4d753cb3872954b835c275b9466ab8a3c83a6e145af0eb65d2e5bdc3f22e10c7324d8128bc682e4b7fcc8ede0a3e9fa995c822c6892cc2abecd469e33f6bd06750e345e866b1c1b2b101584e334193d3bcadcbc63c729a8158929d1834c90ed249e6497692c65773b8af7267e8246ad249e18cc7c319accb1a441eb7ab45b306bbe385cbdb2806a06d79cb18df626fbb70d52d96036f938ec3cbf63a51b63704ce0cf8a4e1a1ee1e3d55606b93438e480e87a7911c28adc212c0109d27f1ea161f784b1a33e1c9a588adb024af13c9f004719953b263b7523c5ac97681ba4792bfb5c7fd6da84e1b5e45e3d59d940dc5deb8e08330c17901050fc3d2787ed0349ea593cc731bbe0e27680d6b38a6764150b5476039ea344d8efa75cc5f8e3a12133e5d23fcd956fe848fc292c2c1e9f88887578fc6041fa24b63fce9d9a2359265fd5f63bd9125eaf23cf56789c2d0c90db2acb45e69fde205f644f07c8df5843d77c38f9e6330a73834a8538cd549e6f13643136f5ff88cb73826fc308df005adfd091f87c5dde1bab8e399262f3778b564b32cdb1273c32c318b264b4c9c6a149dd6e522e6ea45bc66b113adf2e224ebc8c796b344395025ee65891d67eb445eeb274ec763fa1fa1d3bf13d07f05d0d04f8813b07c6ba626df8af9ccb726ea84f3ecb99021151fbe62cd7fc567922e9cf6ccde302a091b2fb6e65ad5175e736d14cf170b07a868aa2b973753013959a357b6681ad2764ba6aabaf0d6029f66562f7e3b55141eb633b12148c58baf127457bcd43f7dc58bb740ec8e9230b4c72a58d958a63a4f93a9c6fc64aa39585a988fa5850519a585293a9f139d06b52dea73788a2a12b279ca0b5ee1e7ab1c5bbb5bffa2d9989f866735978e13441768bdd851dc2657cf33533ef6b8016c1dded8d4b389b4cd17893411a6e658bac8c54aedc59a527b7f5b7fa5769ece654573bcae455d768e901086db2ed1b9ade836284823f29b53cf61623672bdc854cb41bfbeea15af13c526ef0fe7192fbc3f41f4cef3fad23cc17bab205f23065f36892aa8dec9970a270fdb4eccd1f3b1026099a600f055ab9e8a25a1e59a24f4b5cf245480a9bd22a8dad330b58fd4a8bdbb9d3fb5a763c28b34c297b4f727fc609df0f6ccdede35480bf1104c309fec9654dde40d55d54e2873b5143788b6826aff958b2b3badbf55d6b53221224bcc2c57136afc687928c676a5866d0f9f6c6760085605647b984e3077cfa3d211ec31f9e0709d605eff3a9a21f52fbe82d97ffdeb080cfbb11aec37f9c43e134be6ab8326f3424cf29aa092676192d706953c1b937c5c50c973b0485ca789443ea7cc4f24cec584afd7082ff1297c1e96304b7579d368c6dbe24e25d56e3e39fd1aa56ca3905267fdde26cbdcf284fe11dee751291bcd7ed2f97c4ccf0d3a3ded856c7cda20af53948a3e341ee272b6c557a80b30f4651af4e7fb44bf10135eae11fea14fe18b305e153a5e0352c46bb99861e05c9d625df5c37131a6cd469d36fcd489373fe12cc1906ed220bdae933fa44b312336eb8ce053286c7c8758c896890ebf52b9086f9b28c6fd635c866950a9d380e76c4b9a2a062b32ac162cc7901eaf41fa964fa42bb01c794bd01cf9484ced2a5da6d9d99fda4598da5b83aa5dac93cc6b1dd50ca975f035e7fe6b1d255838b55838276414ce4a8c545d5052abb008aed744f0cc2efe22f8284c788346f86e9fc28fc684376a84bfe453f83198f06d1ae143bafa137e2c267cbb4678b94fe1ab31e13b34c2f7f914be0613be5323fc2e9fc2d7624ebe2ba8931f87a97da246ed3eddfca9bd0e537b7750b5d76b24678bd926612e9073cf7ef2b78688ef3591ded47dbedb846e715caaf0b12ea5525dbcf012fa649d4a3e8af20d98379da2f1a6f77d2682324cf8a91ae16b7cba6a3926fc348df0bd3e855760c24fd708efd1dd9ff08d58649e113032376182cf64c872e86291b22a4475be42ac2faf969f3ce57b7c548881eb52e1fb4e87931ab8e61b166449efad933e5d6579fb64ebaa1fad37635a9fa5d39a8fbcf24e5ca7de6c3725ed66886e5e61161b2b6bdd637de95589f9c0d91a1fd8efd3c18ec78cde1bd007b6e8f25931e7ab92349fc5e6919688ce7bbec1c846e1295b9b79f1ca3969e7c9e78a3c998ff3d3e98ae5df55bae8e675ebf31852b7e6fb2c75121f27f153b7de8af9ec051a9fcdf7996f5563c22fd4083fdaa7f01a4cf8451ae167f8145eab13ceab357c27bb40d59a1330b52fd1a8fd9a4fb5eb30b52f0daa763da6f6651ab5fbf4f0a7760396b75daecbd0f9d3e9748a648944d9280a285ec4ac60f612797bae54a975b55ccca2da2cce5788a4c97b16378802c0def7639de8fcd824c612ebacab6ad6d54e66af9dcc12d5317b17a42c911594cbb9785bc4957af1540508475fe054ca821316517e7b371bb128ba421345a37c46d1362c8aae0c58fc6cc7045fa58b7b3e9ba1c43aa94d88173fe1edc032d67d58c6ca3f20e2bfd3622766d7353abb7834ad6eea29b5fd77adcf6ad12e2cfeafd5e52c3ee3ff444cf8751ae16d7afa13be1b8b93ebb138b921a3383949170ecff46e4cc7893dc6f9f660826f0a28f864cc8b6e0e98ec4ec104df1250f0a93ac13ceef91ef8eeb99d5c809fb99da7615e789bc60b27f6f2e785a763c26fd7085fe253f81998f03b34c26b7d0a3f134b3f7762e9e7ae8cd2cf5998d3dcadcbd37838ebacff78275195c8ad55195b69e5c2fc4ead682af2f2d08f879d8d69718f4e8bde4d5ae4587f79c9cbc7a6ecd94199ebb017d3e15e9d0ebda40e79d6ff65a231c4dfd961fdcd5c8373300deed369d001c4055f43c46b467e423b1773dffb35ee3ba3b73ff73d4f279cc7db0398fb3e9891fb9e8f654d0f69b2a6d63eb3a60b30420f6b087de993d08598f04734c207f4f127fc224cf8a3bab8f529fc622c6ef76371fb5846717b09961c1ef7ca9a729b396bba14d3e209efac694a33664d97613a3ce99535e53763d67439a6c153a9b2a6a34478fed63b5c81b9efd31af7edd0d79ffb5e89b9ef3398fb3e9b91fb5e8521e3bb5d07a98eedc3e83cafa173b94f3a5763745ec0e8bc98119d6b3023bea331e2639f465c8ba1ff6e40f4d7615a7f4fa3f59c7efeb4be5e279ca37f0943ff7246e86fc08cf8bec688f77d1a712326fc071ae16dfafb137e1326fc158df0b84fe13763f85fc5f0ff3023fcb760cec9bf8a87166b79cd5cacdd8a69f19a4e0ba758cb6dc662ed364c87d7753aa8626d6a33166bb7631abca1d3a023738ab5b962c0abc6674fd51d9803ff58e3c05ff874e03b75c279ccbd8939f04f3272e0bb30237eaa31a26a803f23eec684ff4c23fc359fc2efc1a29b7f6c2f48b9702fa6f5cf355acf18e84febfb30e1bfd0082ff729fc7e0cc92f7529800f1978f7d327f7e406ebb3b7fb4dcdeea57f008ba0b73511d4e033821ec484ff4a237c9f4fe10f6159c6afb12ce3371965190f6346bca32334c89f118f60c27fab117eb44fe18fea84f36ee0dfa59365787403efd708ce163ba1b4cc187df2ce4bcd3b46ff7b1d2fed18fdbb2cd5187d705db131fac7305f7a4f97da7cfad2e33ae17c28977f3b31d050ee1398e43f0695fc24563ebc9f8eff7b649a4fe9fc5f6cd8b3b145fc3fc89e68de9effa7b43dff03e1f9e33d3c3fd8ce6dfa98781a739e3f07759e6730e7f930a0f33c8b25d3bf6892e96783fd25d3e730adf9e7ce92aa447c5fb442d11caa10cb52740b9ab2447529cbe7dcb3e7313dfeaad383efa9e24ffe0b98fc8f03c6ce8b58ecfc4d133b9b87f88b9def605a7f82c50e4f239b651551c54745d37e1f99ce0cfc2e66e4a71a23ab86fa33f27b98919fe98ce42950cd33b0ebb389d334fd98f51216f2e7ba90799bdc9e5593ddb41d7f76d3a638cbad0451cefccee67819d3e0ef3a0dfa6b3558227e35881d04ec5a7f66ebc6be8fe9f20f9d2e83d3d42579bf763f3afd0073bc2f348e77fe41fe1cef15cce07f06cc135ec504ff2ba0e01f6282ff1d50f08f30ce5f6a38dfe793f36b98f0ff6884d70ef327fc750cc97f032279432798e73e5fa523d8a331f4639d60de0efdbae986ab1dfa3f96493bf44d5d381cfb371aec0b86fbc3fe13cc886f3123f84668fe8df8296604af03b88dd8ebd3889f61c25b6984ef1fe14ff85b9863b68e69b253bed8ae88c16d62ca451d5b65e471364e1478d5f26fe22a842c7166173f13c5f61775a2d4b7b3dc7a562536c8a8677019b8dda9c41734d7ba6a062a1cde996417b1ced700b244665eee736adfcf31166d742cf8a62f70af39bb96e914b0ce92eced4243fb2b076ad2ec66510465a594906b3ded77e5c62f308769ab7198363e1de69758926a17439254fb8c92d4db98111d3446c47d1af12b2ca63bea629a4f53d77791ae969dab7ce50b6f5dd85b1479c569dcf3ee38311dd5ee5675fc3a3105d408cf505da889f71a845f356852d106a1610de880b565d7c8d6a91ffffa3516359d3451f385cfa8f98d4e386ffa768e056cfabe83a9dd45a376fe487f6aff56279cef9ad535166c5fe3df615a77d368dde053ebdf635a770fa8f5bb98d63d7465964faddfd308cf16fb3f87fb25547b751b97e37fcd6acf18df76cde5cd228b767110bd50bd62d8074bbd75c0fa97fea08b1efe51a5dee9c4fb703c6afea8132c3ef0160bbe57f6fb58aedd57976bf37dd3e0065bce47619732fef582daa6d589fcb84dbc58293701e631d4209a81d54d4f9527e4f159724dda26919fe6b2a9be72d03fe92ce11edc4feb16af142609e71e8108ff40973cb2f8c50da4c9c3efc703d567a2fc7fdab0bfce4bb5096780483863c493cda71d96acfe8c45eb402cb5fb88d60fb12c7590264bdd37c65f96fa174cf8608df0f77d0aff084bb74374e956cbc5232dfd15933e54279ddfb0ebe5d919eceaf33186e9200da6f3c7fac3f4374cf8308df00f7d0aff04a394954e8eef81e4534cf0f080823fc3708cd0e078cd278ecf75c27967e1c874b4de830bfe3b866394ce1bb9b367fba2f20f4cfe689d7cbe2179f2f48fa5a2eeafb60e73eef89b62f105a6c9189d265c022f38fc7ac13fb150c6ea42e9c4987649a99f10ffa509319b5779627ca3aab06a9725d6596d4635cb788c376313c188d6b7b6801c270ac8be499679858f157fffd6c5153f1d1fe30549a24a8b969edafeba21afb74a8a9ab678d47c8939c3049d33f0760c9f1b68cf5eaab27e3548a32a7dbafa7fb07027eac2ed8e865b2dbba7fc84fd5f9d3b8e08db1d678b8e85ba0cdc71528ce74d89882623ce38197146afd03167fc4ac74d7cb6665d88dcece7ec8cb65834472aad2bcb45778dddf9539f01d3ec98df4f30e408b223932ccf543f8cfad71aeaa2f7664ad0de9bff619273834afe06939c1754f2b73ac9bc5692df0cad61164332a5a9012b5e319d60f149aaa03c5a6192a70595dc1a933c3da8e43698e483834a6e8b493e24a8e47698e443834a6e8f39dd8c804ed70153f9b0a02a77d449e67583c303f67176c2543e22a8ca9d31ca330352ee82a95c1854e5ae98e459412577c324cf0e2ab93b26794e50c93d309f9b1bd0e77a622acf0baa722fcce7e607f4b9de98e0050105f7c1042f0c28b8af4e309f07bb281dc11fe082fbe904f3fac0e266a80ff4c75c634950d718a093cc9f5f9a0e0f8f39260331d0cb02821e84b9c6f280ae311813bc22a0e02158ec1d1934f68662b1571430f60ec262af3860ec0dc3209704849c85095e1950f0702cf656058dbd1158ec1d1530f64662b17774c0d81b85413e2620e4d198e063030a1e83c5deeaa0b1375623397b94751ae31b8d86bfa2a239be36efdd35b1269db81887138b6371b136685c8cd349e63bb01e978ecae7e282c7637eb92ea05f4ec004af0f28782296f64b03a6fd4958ec6d081a7b933116650159646382cb030acec1045704143c0583bc3128e45c4ce54d0155cec3046f0e28381f6b6855066c684dc5343e3ea0c60598c65b026a3c0dd3b82aa0c6d3318db706d4f8604c707540c18760286a02a23814d3b836a0c633b096e109cdd0323c0cc3511710c7e1188efa80388ec0b2b886a059dc4c0c746333802ec4d4de1654ed5998dadb9b41edd998da3b82aa3d0793bc33a8e4b918905dcd00641ea6f68941d59e8f49de1d54f2022c919f1430912fc404ef0928781126f8e480821763824f0928780926f8d480829762824f0b287819e66fa707f5b7e53ac97caee319b1e0731d57606a9f1954ed23b17ce3ac66c8378a30e1673783f0628cc9dea04c4ab062fc9c80c5f84a4ce57383aabc0a237d5e33903e4a273ccb3a3d3f1d1e0370b73e1a137c4140c1c76089f1c266488cc762b17851d0585c8d75c95c1cb04b660d969f5e12303f5d8bb1b834288be330952f0ba8f23aacb3e7f2809d3deb31c15704145c8a41be3228e40d18e4ab02422ec3f2a37dcd901f95633cae0ecaa302e3714d401e1bb1947d6dc094bd092babae0b58566dc6205f1f14722506f98680908fc758dc1890c5168de0ecd1d6698c7fc6cc848dd0d4ea9ce61bb8b849c74c3b97f2e6189f4b99cdfc6c869689bee847cb74d1ce63e79674a2fd66bca0dfaa13cc4f6f8d25cfdf56fffcccdfaec672c9db9a2197acc184dfde0cc26bb1dce18ea0b9c3093ac9fcf93bd3894d8f01de3a9de0e1d6e95de9081e87bb493d26f8ee80821b30c8f70485dca893cc97fbdc9b8eca1ecb7db6612adf1754e5ed5862bcbf9912e30e5d007cb7cb07d261f22e2e782706fbc180b07761b01f0a0afb445d81c7578dc6f857d15b62b1802a30fc2d0c7838ed42ec1151880d4cb22e1d1db082693796033fda0c39f04958e4ef0f1af97b30b51f6b06b54fc6843fde0cc24fc16a964fc434eb92e688d3e4d5cccb185fecbe5d44f01619f593c50aa685d6fde5d69d6ae1d2fc8abefea29b56c29f86aec51dbf86d99ba8f8fbf4c8a998954feaac3cabc9ca95564d8a273a3b816e15bf17ca3deaebc4527e3b812e6c7a726ed31684899b1cd5491ec5ccfe10f36cd628ece27213e93912f8f3fef4c0249530bef66993b89bc814265637ef55961cbfebdc4ec3483f85f9130cd1b629cf7ac7a65563658aeb2cdfa813716e5b5b22b77d746bebbc8b5f6f2e7f3a1db3f2699d9587bbac84cc6d3be731fba3c4a51aaf4f8c2178c72badc0b7fc58760666d9333acb8e482bfe0ac55647954cad070b1e73ce1d3fb69d89d9f6acceb602976d4b45ec6c9696f1b31d2d66c9599825cfe92c393fe4fccc79876f6aa576c528077b65d6fbf072c80eb78297258da29a01733d5ec16abebced6c8cfaf33aea8569a58d25ccfeea8a09b9da5eccbe1774f62d21f42a7ef504110cb7caae0e578aa02bd92e910ef5394926b17a0e66f58b3aab0ff3b41ad7b448d8626ffc63dba84a637eb54c124a4e1799c7e6b9985ddfd1d9758cef9a5db1b89358b7d349c076c7095213cc249ecfc3787c57c7637128653675697e3e66f3f7b07a8a3f1f503ecc37ca281382603cfbf5083f965d8059f692ceb24310cb568af45925eb2676535bb55a56c9545c9e141b346d940b318b5ed659348f30f755b16aef36b181d9dbab379fa51761967e5f67e90c86f592eb728a440be0578c3893052296eb446ba8cc2a717736a355176356fd209d364162b8b086b052c4429df52c4f879b3c4abf4419cd67d9259865afe82c9b9d32e74caf5580e7a15e6dd64c73ca4b311b5fd5d9381ff5495ee3dd603da46cb5b71072be2be79d97e865367749781966eb0f75b65610b71e1ac4d7c13825bb75b04a787b6553ced33cede14c385d8e71fa918ed3ca166b6579130acee10a8cc36b3a0eb37ca60d1352c4959885afeb2c5ce8d342f5b1647d8cb484bd5761f6bea1b3b788d0b3eb33a86b3407817d18811f37571dc4cedb0a410d84deaaab31abdec47a28fc5a354f3c911c43ee3c277db97eecbb06b3ef273afb0e0d50736c909bf3d6cb2dcfb77a585592f4ac1f9baec56cfaa9bf3873e73df0f355a93c8fb2f4b80eb3ef67987d7eda8cb6adf3653dc2b9cb473cbc6b87cd5573bc1eb3ef2d9d7da39877af6089459842cb1b302d7feeddb7e727168a338a054adfbb11b3fa173aabf18f5396340dd5c33cc2f958082f0f1bb575b1ccfaf76fc2f4fea54eef8353b6b8168ab141defb58253e1531976d15fbf325b77fbd6220f316e4cd983d6f633548ef34c25bc32b44adaa5e53aea63396c06b231b9bd1c25b300b7f954e1b593f36b050f81eef072f957d54c9f115e6f8c0ad988dbfc67aa8d2e90748c7cacc728ccc2dbd0db3f4373a4b17a4159bee911e3b1d2abb5b325e6fc7ac7d4767edd129e395b6679cbacffc0e8cc66f7534a611b60583977f7762b6fc4e674b9e2b66678b16dc36598784f513e793215e7eeb8e0fe72d3f36dc85d9f07b9d0d33d1f8281457b782fe53de9b5227ecb36d9b2b3fe1d128e79a7859d05cd6dd8d59f7aecebad1ae182a14fd8abcb6e51e8fa910daf0f90acd5323b907d3f33defd189f4ea8f6e3be64b3bbc7c8b6a64e95eccd23f3487a5b0a66ca7e8329157540a2b79cecdcfe7895cc28fff65923bdc8759fa479da5f919599adc326beebaf2fd9815ef3747cbc6ed993c67d6f5e367ee9b4e087eac7e00b3fa4f3aabd73653dcd507b02e1c2e0f625c3ec0c685f5a545f2fa9b96ea1f7a08b3e8cfd82844ea3ee474eadfe9f444fbefadcebc96fa30c6e1431d87f13e38a83855df5668ae9ae42398c67fd1693c2665bd9aae747f14d3f4237f75de644f4fd4bc56946bcea815457ad98fd9f2d774662063add4b986b5501fc3acfc189bcde42f9fb3f3fee4bbc933d4d4675ef0f84c969259defe3866f3df7436e7ba6216a6fb4cea9b982c3f163c8159f089ce82354da576f38fbba9b2dd6be41dc66cba1eaddef143e5498ccaa7e9cc9c5121fa49ad8e659827374f2a7d0ab3ec339d65c7b6707cfb89e74c53c0d31891cfd3e943f45b8709de8b9479dc3f8359faf774722bacefc5f6820296efabefc879cb8f05cf6216fc23fdf9ee3c4c3f2913da875d6fae187a0eb3ef0bace5e85d5370be7ee4d6517d7d0a4f5fd89793bcd26466a5e8f398d5ffcc642cc68ed562ebe10dcc6e1395b1965ee7f30266e1bfd249797ac299d51352b71cda5bffc5627c11ea5c21c51ed9aa11eff0da56f658eb562ca7a96498dc94e34f4e281d9ceb3cfcad566cf03451d294b73bdfa1c524fcdb82d3ae15b3ff8d955f5bb40bc4d846e65ee43b5bc8af92f98df2d6c98290bd1e80f76c4db6da2a76cf96fb0bbf9815ba526e3228e7a075a96d5a8b2c3f8e898fb8425916e938277da059fa258fd56132565b65f36dd3631332f4a6d45afc8787d65aef43ba4f8f3ba943a7bb2d60996c95c7f86e33eb44302b4423125f6c933264f7e6f5ee90270901aa3e9852dc4a9005e8c40d14ee664f78ae63f630e03b96ccf66d5be5f018f92f25b6ee009bd3c7b648e6317cb65d14702d18e9e0fa8a1217dfcf608ea826d75ac0ec69b7aa88c6fcad3e1208797fb842f83525c21ed689eaf159207a79b980525193e5feb69c6d8904b0873a38c0fe4709ac0fb33ff79ac39c09b15106d7a3b303ee1b4a70bd34e0b8403e8ac6e707358aabd1c8e1d63307dab7d4de96983cf97063a59c7aad2620da5e170570f12e0e38d68a101cff143a9f49976eb1100578978342214609afabb61ac287323646c4cff6822a482b4a549d41aeb63ca16f2f0a98860c7130b5a6c4d411607216d84501d1de7e0ea2369488da0944f591cacedb7475e0b4a58433c03a59ded49a544393f6e4c522513ef2e961d5a2445c213b19a300703f4880ed280176000990abc9476ba300e8cd9e0ea0f6d439d472318ce36c60158dcae86ee0431dc2f2213537360a80aeebed00ea4809886fcfaa6aeb73d90e6175635315934f222f1735a922e161e5c2dfaaac00a30091ff53103b5142e47b924278bcf390efff50d1b4537279c4ebf17d40776267ea7a3cf731e56f3b6589b95234b5a3806a1fc8dbbad05750d5ee646a24260a885e19e120ea4a8908f645f0a6359cbca09ad751aabc7ed9de01d78dba2f028283ebcc0b45ef04f4b988543a40b761774a785d40a5c359a6632fd08902a8fda002db831214efc95f2a92df16d72e607cc5429d08290ac0d6b77280f50c2b3fb3fb5613a76395472c3fab024320bd28c1f56a2a2be788a0a35c177ba5ad03ad3725b44e001a9f7c10a52a4607d09bda873a49ce1583b48d227067af4267efca7aab2d506985170570ef03efea4b09ae1bc8cba23aa8c6274e2958fda8bd4c0d6fd40831d16e4fce005ed69fba17b6c882369ba5bfed6f1400ee152d81f66d5dc2dd339a339f5fe68f3a3e13ae3bb3fb466ac5d5065949499819c7175319a7f9805660665b3ce37eb278ca7c2e9ef63483b8ef21e27886f38de26955cde3013bbee23ee6dcc57d6581f1b42b7c715f05783ca3fc24eeab1f22eeab961f4f6b3a54dcd71ca0b8efe6bf4e677cd6473c69e030eed9668e6b8782e2dacefd38326e1bf718f68e232329f114bd91f18cc6f8e248c75d1cad6fc7d39864194f3103c29908ae9fc09dc327820f6cf5fff71ced1c3e477b1087c0bf5bc4ffd93594c1d43514ee97f6947c5e6a786fa637c5aa27b8741892a443e227c0544d44a74dc784ba4ab7740ccca4bed2134c041a6212cedc48e29c0d700e3509675e247196029c07858173130a14aabf8e4d65057438bb50e1bc973938879984333f9238af0038b34cc2392d92387f07700e370967412471fe00e01c6112ce2991c4b91ce01c6912cebc48e26c04384799843337923837009ca32971f69538cb64b3d2bda9025cb09f4307b22d15c87f039063a8e7a6a96e8f74bba0f8f375e2d9e855e50b01d8b194608731d827957e9f6c94e10e0370e3d4f38fbc9a9d501c2fe9c950b6a742d91e3439c751e7a4b5a047d0defcb348b4d77986c07bf96b59ad144806723815c89ec027c75382ec2e7db2c0e59976b72f7f880cde202a788f027813c280373d7c786449f875006f2225bcfe292a4389b92169270719cc7f0298934c82392d8230bf0430279b04333f8230ff0160669b04736a04617e0160e6980433378230ff0a604e310926e1181019ccbf0398b926c124ecde2083f93e80996712cc2836153f0230f34d82393d8230ff03604e6dd92e0c5b94bd352e6122ef15a31aaa005d18059428c74b9455d64355e2a8a6e8c1a94efebeff408abc3795f76e02c8a7d1affdd82c66bdd9b3f0360978d1ebb3ec0212fcf4964cf0893b28137adf1e2a943b81f71d4c89726c52822f15c2e631f549cc59d6ffdc3bb7895ef546e6b5f931296cb2826a1a807d48187e9b5ea91f4594434016702825ca83345940ba1f2121457b2e15da71c04b67b4ac9746bd3af527e0a58751a32c14eb356ae42c75be2d381fb1ac962b57d4dc7d7b4544f4cafc3600e5e1f4eb8af908e43a71414c261555257e35ca831ba7008447848170da0187f04980702625c2decc998aa08e854205fbfb1e519e72f038805868d24c77d2e98564388783f27a96493849e7c391e19c0f70ce360927e96c4d329cb500e71cea9d67ec723be7009a90f009c82be79a333debe008a2cc029e382f0c94707ee612ab123e5f2e2add68bdb4238c129c0ce536e095f3e9872f606fe53ab645a09b2516926e91a2e659c70a4b44d21e231198b0d515c05c104657468358fa5edfd4bbae56d9aaa3ae236e0ae5683a19daab01da85610cb3a5bb548030ff245b28702880b9c824988463966430a703988b4d82493803890c662e80b9c424988473e3c860c601cca526c1249cb54906731a80b9cc2498515ca93615c05c6e124cc2194864304700982b4c824938ce430673008079a4493009676d92c11c0b6016990493b0054406732480594c09338b25f71ff99bbc4558be934dde3a1cf42995b4e43c4e776731612e4ad6553c06f8ea4a93601296ef6430b301cc5561f4bbf3dece6d4c7d243da4815e327cfd00bea328f10d04f892e7c47161ce02fe280f64bc02801e1dc6e4839c036ef2c1c900e13161202c38e0101e0c101e6b767588b05793ac3a743ca80ead0e6b7a8c33c4064789c807d7c8062df6001f5d63ce2ce1282e4d3d04a05c1b56299e6ae7e6284fdd2a00408f3369efada991eceab803e05c67124ed2f5be64382f0038d79b84735a2471be0d70969a84b32092389f05383798849374fb71329c0b00ce32937092ee974d86b306e02c370927e96eee643857039c15d435cff4bea0522454e3df7021ac792ea2023a0500dd18c6b66679aef67b08dd1e644bfab600789b28e10d66e9ae964c5c3a4d381de1032aa8eb4167c76613a112b6d8c9a0ae03502b4d844a38a58b0cea4400f57813a11296f064504702a85b4c844a385d810cea41006a958950098782c9a00e0450b79a089570b20219d4be006a3525d43c96dc4b9fb86e633673be8d661b92f8a5b5c48f3d3a1fc92b11355ad55d4d1809395491c01d4e45428d39abe3a2b859ef20e0cfb5942827b0c48d80e046e6ce9aa4f446490b599d6893eda4f5df013122e84701e82798bbf48b70661ed928ea8f41d65067ce0e8ba45b0c90650e3b01cc7a9360467127efb300cc069360467127ef0600b3d12498519c2eb11dc0dc6612cc28eee4bd09c0dc6e12cc28eee4bd19c0dc6112cc28ee9db814c0dc6912cc28eee4bd0cc0dc6512cc28eee47d368079a24930a3b8dfcd5e0073b7d9739da3b86f7747d0763f89126f5789d7de3aa84ab4e26dd99594fbdd907d279301bfdc13f6d6bde9777b4471bf9b11c0274f0e6bbef352d18dbcc5d5cd3cc77aad4e8418e5f9ce0381af9e4209b49b6722afa743d7890a5d2b80eed4965cc610fded057a0394a785b196937f82f9c059cbb902e03bdd8cbde2ed21bb5ae1b1f6601ca967be4b8576072870ce3069b354d2c62499a7760338cf3409676e24711e01709e6512cebc48e23c16e03c9bfafbd6ce960235d6237c2283f37deb900a24b2cf42fc1914487b29418e0420d53c8fb96c07e3136f1a999a18bedc7abd9cf1f67891f050fb831155e154dd7b52796b2f00f91c9316344c8de4b68077019ce79a8493f40bc464382f0438cf3309e7b448e2fc35c079be49380b2289f34580f3029370924e5220c3b910e0bcd0249c7991c47902c079914938732389730dc07971589dc6c5a256d968492e64fc1365abe482c572b160b122d29dc66b01d04bcc99951cc5791fbd4093f3d2300684d52e76f612da0da2cdae1e8afae657a5c02f2f0b6309ed81f4219e1900dee5e64ed5262c80c8462d6f0668af08c32fa785ef97ef52c1db0fe05d1906bc83c38747e6796f007857d1172f9b353b82155b4cca58995468a3d89f8177bd45afdad319c0dc67eebc0ec29e77323f1d0aaa41579bb3256014a7658f035e7a8d1983c1ba0f8713a225db656423f0d26b4d1a6e239dbf49969f4e0238af3309676e247116039cd79b84332f923877019c3784d1324faf93233792f3de2b00cc1b4d8219c579ef9500e64d26c18ce2cadf3500e6cd26c18ce2cadf0d00e62d26c18ce2cadf2500e6ad26c18ce2cadfa500e66d26c18c621373118079bb4930a33802b418c0bcc32498515cf9bb00c0bcd32498515cf9bb10c0bccba40625e928105983b23fc079b7493849ab476438e7009cf798849374ce1119ce7280f3de30bebd35951d68dfdeba963908ef0b63d67bea9ef7e4655821ed2877738c087215f0d3fb29210f6589dbf855c86505ce6282c46c00ce9323044bb69c602e00fb4018bb2928b0eaa39089c3c65ed5a928d64cf300de075b728433b49d69f750a1fc1ce4b30f51a21c2e502eb41e2a12c0f85af56df275c75bd7c94f9ecd12fbd16e91f7e759c70a4b2ce106166475818e00f0c3e6ccef8c62b26720d93f4289b24f0a94ca52d2f921e3a84afd7a80f151b3b7fa21ec1d25dbeae7608077bfb9733f0907ebc86636fd12e4a58f85910160e5be930110e6a36419c0bf00c6c7a937a35a215bf46a7efc42e1993cd947af2cef01c03d1186ffe534f960b96890da4bb0a3bec5ca1300e393d41dcb1cd81c11708b7eea6c2915cc3c00f3294a9883586253b30eecb09058cfb4455651e78f643b2e1c034af0a7c3a8b2e778b4dca3dd8df72af0ce67c2e809cd3fe07a42370284cf86d149c7bd71aea8f6340a259658af94897c7339db2efa3ef9b737789db3964579e5653e00fb9c39f3e4a33857693e40f97c18eb8af25d0dcb285787ea00bc17c2da29491de78bc49bb85b127182262bb7df03205f3469a9ff74ca7e22b2a5fe7f0338bf6312cea991c47923c0f95d9370e64712e71900e7f74cc2392d92387f0670be6412ce8248e27c04e07cd9249ca45b9d92e19c03707edf249ca47b7392e1dc0a70fec0249ca4733bc9701e0370be12c68edb79ec40da717b16c0f7aa49930f49bf184886730ce8bdfca1493849976191e15c0670fec8249c7991c4d90070be4689b383105021be5f5dc7ecd99cd19b48d80ee48daf53e21acbfc7c389c770f370a91f003e19c5a08f38be652c19e0c60bfd19253b542abb093f9edc92099ff388c711fa72f930f576c127d9975911e9ea805def8a6391307a3b863c230e08d3fa1ee615f21f2c372a6a6b662d30e083fd34496ac3b009ffca9b973dba2b86bd79500edcfccf99a655e2437a2f83e80f9964930a338b8fb1680f97393604671238a9700cc5f9804338a1b51bc0c60fed2249851dc88e23b00e6db26c18ce24614df03307f6512cc28aefb790ec0fcb54930a3b811c5f300e66f4c8219c586e5cf01cc774c8219c5adf87e0560fe9612e668166c5d5a48cbfe0750cd933b1a7487fcceec0580848d4fb205808702bcbf0f633ea777377281982c4be8a76da9406e0720dfa55e6ec5f355e8818b588d10c05761c0ebd1f3c7df827cf53dfa25fe89fe68f7bef38eb96a0b291f33aaf59c0112c52faeb70680ff60ce428228768f4c0228ff68d2cca4a994552a32cf7c10e07cdf249cf991c4791dc0f92793704e8b24cebf009c1f9884b3209238df0438ff6c124ed2cd26c8701e05707e68124ed2d63d19ced300cebf988493f4bb0564382b00ce8f2871f213b58747f446d5bb034c7f35c9eba6538e119179dd6700e7c726e19c1a499c37019c7f3309677e24719e0b707e6212ce6991c4f90b80f3539370164412e76300e76726e19c12499c7301cecf4dc2493afb830c6735c0f9779370927ed5850ce7b100e73f28710e6189bb72710e8da27de0def6d9bd7e88b0a79d6c4e7c073022f40525d6312eac1b58f23ce3f4672413a2266b399d0050ff338c151cd3d981b673d7332013f85718b3e595b7d60bffe359c03c09cfbd495f48436e640b116602effcb7398b63a23889b60f40f9a5b96b3a08678290e5a10f810ce03f616c8b36c5e5ab21e49e64f00e03f0fe6bf62c25c219ca64b3420a40b2ff2a8c0a3fdce45497c4a35dd6ff1078ebd7943847b9cafa2a0697bbeabf5c345fbe1cdae74ac651611e0bbcf67fe64cb589e274dbc5c063bf09f31b453ce197bb96c91e784dd5ff01bcdf52e21de6c25b0b0aa8d92277ad4ef2dea857ff57816c804fbf33665316d2be54325fed0e70c64cc249daf94786b310e06c65124ed2ae69329c6b01ced661e04c7fd09970393759d7f47da0606a6312cefc48e2dc0770b63509e7b448e27c17e06c6712ce8248e2fc11c0d9de249ca47b2b92e13c12e0ec60124ed29d45c870ee02383b9a849374ab4a329c650067274a9c6a1fda292dd1e14cd621f229c0d799129feaade7016f149ea86457cb47a2072f06e075a18497dea25755c844af6ba31f68ed7435056414fb88be051ed9cd1490842345642067018fec6e0a48c28e0c32903300c81ea680249cb24006b20880ec690a48c2e5d664208f04207b990292b0ea4d06b21a80ec6d0a48c229336420cb00c83ea680241cde2503b91b80ec6b0a48c23dbec840d60090fd2841fa9b6a18c52d263b0394fd2951f239c5ee0d7d9630deda6e88f8663ebf670ec201d49d14cec71db8a2f582c326b185790d253cb22985dd00bc8194f0d4a7949da9aefa895925ccfe8a3affca3317b695b6ad7d2e15d82a00761025d891cc3dfbcd9e50e8cc73e702edefa77be59e51dc06752ac83d07534276af29b281f229863c2398a32ddfa3bbcbdc5680754818e57b7a530aa3b8b7ec68900d0ca544a99612c0aa52fa392c215ab21c7635f0d283c24cfc959612ab98f3ad41283cb4f9c47ba8b03602acc3c218f3997a000d98dd03927b1625bcfe9ae4ee957346712be94380270e37096614e7b61f06608e300966143fa69303608e340966143fa6930b608e32096614778b9d0c608e36096614d701670398634c8219c59ecef100e658936046f1633a1300ccb84930a3d88b340ac01c6712cc4876780098e34d5ae9435a0491adf41902704e3009676e2471ce0338279a8493f46b83643837039c93c2985ecd47ccb781aeb750764820c3379339f82653e2e35f7359619dd8dba07151d5d6e39badc76b441731fc0873f430b60518b32931aa75e57cdf0e7bec679da56ebda54e99e0c187860b195fc2cffbdb4b2d013c8197b3287f73bd08c0cd0963d24c0e4b5cb06fef28531f566227fbc4d80700e49430468232db548ab035443689e17a8036973a1ff52ad595a5b43bc95079681d28cdf32831666930fadb5e8ab06b8e6c9ed2748037dfdc0c8070a4882c03f809c800a652a21d2ed02e10fe59c4f8306f852cf7cb852835cd668b8800eec765d66f5bfc3ceb5861892d8f602da013005c10460e8bcd08992d3c967807d9c95439ec7f01c66961f434c19aaaaaf63b0d8168d74cfb0298d3c398ba0861a6ce02a20b7636007b30f59ce475a2f3e340dbe7f82a80f090303a4672a4bfd54bff8c76c7c86f00be43cd998018c5a90af300ca19942847f840592c5af87c6ae272eb97ea79aaa72dd573a84af5af00e2c328110f64ee7d0d4b4525ff409bd67d1c68291d4e0974820be836ebc1326d83d35ff394103a59f3b404403fc2a49d67a647f20bd81f834c61a64938a74612e70d0067a14938f32389f3748073964938a74512e74f01ced926e12c8824ce8701ce3926e1249ddf4486f3088073ae4938f32289b312e09c6712cedc48e23c1ae09c1f466f538ef86b1ff9e87d31535d2651edb05b07102e68c9fd1842cb2bc9b6b6d8035a410bcdd9da228aeb3a0603948bc24ad876ef1317b48385d60ffa0115c2a740c25e1cc6b01b4758d1b4c585ba1df5def81700c625e18ebc1fe85f1fea0fd02e35775243143f377a3140bb2c8cfc33f7801b861b05102e0f63186e0a6b81f9c9645dc207017c2bc298ae90de305c6e2407e26e05308f34096614eb96b701984526c18ce29ae1cb01cc6293604671cdf02d0066894930a3b866f8520073a54930a3b866f8320073954930a33845e11c00f32893604671cdf02500e6d126c18ce2ae49b70398c79804338abb26dd0f601e6bf69218c2844fd6c0ec01ba885787d1bf39a5c95fcb45b79c3df130ead3659f065eba268c410bf71acdd9ccf9a8722828c9c67ffe0850ae0d6b8586bd1f27ef705b6afdaa1509dace354381399c0ae61f00cce34c1a299f4a59b2938d943f0070ae3309677e24715e0370ae3709e7b448e2fc10e02c350967412471be06706e300927e90a61329cab00ce329370e64512e7890067b9493849dbec6438cb01ce0a4a9c6acfed5c576333ca83bcc703781bc358e1c6abec7318df3ba9d66a8957c8c6a4bdaead42082c1502e0ae4af6fe35519d60381c20de64d2b669a4333bc8707605dd1e9b4dc249da174f86730ac05969124ed2f9ed643857029cc79b849374a91519ce9300ce2d265595a6528eaf935595ee064551954938f32389f3228073ab4938a74512e73b0067b549380b2289f3bb00678d493849379326c3b904e0ac350927e9eec76438eb01ce134cc2493a738e0ce77100671d25ce71ccbd8d0a6fcb975b3cf83a0c65a7b3f8059bd45068fdaa1363a0a46b371e895175e2819a693d2570b5b52f36532431678ddea07116f0dc0653404671f5651f00b2d1149084733dc9409e0a406e330524e10c6432901300c8eda680245c644006f27c00720725c81c57e9de882e0cc4d767f2f94c5b2d7d6ac4193735a4b2fe66aab27e0b28eb778631af29dd4e3dc2e13abadd9001cc5d26c1249c624b06b30b8079a24930a3d8d9fc35c865779b0493b05a4f06f31b00f32493601256a4c860c64032df63124cc2ea3d19cc5600e6c926c124ac9992c16c0d609e6212cc287e11ae0d8079aa493009b70ca0fbb01980799a493009b70c2083d90ec03c9d1226feb98879d6df4a667f13aec412c00547ff73112b4135e90c4ab04304d825d6036562861d5c05d7629fdc215b1bd71e603dd39c9de8a2b8c1456f90f4cf3277932ac2f29e6c93aa3b81979e6df60259c256135926900f3c772f25dedea0d0da260a253e8bd9fe806948cb10f750415c0f7cf49c30c6e961c98f1557e4e53d994f0e0538cf0d23374d4ef2e9e4a751dcf26f0048eee78551e663a34d89657e1477bb190fbcf4fc30aafb9994f984fdf5643e7a1e007b81a960a3f811d33301d80b4d051bc5cf431f0ec05e642a58c2da2919d81c00f66253c1128e3c91819d08c05e622ad82856b00601b0979a0a96b077950cec6e00f63253c1128e019081dd01c05e6e2ad828f65c9500b057980a96b0b7950c6c31007b252558b5e9fa54d6029bae93e13b09e0bbca9c3e80286e85b908a0dc67d24a66d23d74c806fae2a077ea6a9370926efa42867305c0798d493849b72422c3b94de06cdfd6257c5e92f0d9c2586e6e1973b66799cce6333ed5dbdec0a5cc3a5f224aeb06b6de4aaeabadfffcc5c15aeb3fddf598d88367ae55afab1557b9bc72217bab75976b66b5ab79e7e5b5dc25da4b97888bdcbad062de603d53c42a44e83b5931b3b79f596efd55b30b1a0592b8d8f3748575ad91f171311e42b5a5c96656272c4edc9e261eeb2038d9df7ee276718071a9abfa1ed442594e545a36970a4deaac67da88706c178ac7ba82333580b450d472ea85567c9d03dc3a749e28aa8b901d307984c6623d651c72fd970adb4b2d9b4bc5b1a429946cbe56235660fdb1eb57939b6a5693e584feadf24c5d4f2d93c7a0b7b4eb7834c5f429b7aad97c2f95457672e1ef6f1413202a84d485292d4d6d1feec75d3c62259bf7601cd0f65fcfe35d46bb70d3feb1ced6af9556ccdbc2f9d7bdeaacdf5ca9c515ad58dbff0779948b5e8a510300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/74b91b404f14a124c923e1071e3014d9.asset.meta b/Assets/SerializedUdonPrograms/74b91b404f14a124c923e1071e3014d9.asset.meta new file mode 100644 index 0000000..27f3a84 --- /dev/null +++ b/Assets/SerializedUdonPrograms/74b91b404f14a124c923e1071e3014d9.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d752af288c14ebf4cad64b1da3cb02b0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/754195db25415454eb46f7cab9b591ad.asset b/Assets/SerializedUdonPrograms/754195db25415454eb46f7cab9b591ad.asset new file mode 100644 index 0000000..945f6d7 --- /dev/null +++ b/Assets/SerializedUdonPrograms/754195db25415454eb46f7cab9b591ad.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 754195db25415454eb46f7cab9b591ad + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec5d077c14c5f79fbdd03bd21124480b35a18382948426a148b3804220094442c0245451c10a8a8abd2b76ecbda3a262efbd77ec5db1b7ffceeccceddbcdbcbb9b9b9bcbaeff1f7eccdeeece7ee7cd77debc79d323d9c4fe67f5b2ffcc22d3482ee943669242b29494d9bf72edeb12fb3fe74e3c9f4acaedeb42fb6f81fdae17c98cf325fdd7cd6a6dff9d60df55904afbcbe564817d2d61efa79322fbf704fbdb22fb8e3e2db6ff2fb2435935ec8f66923c32854c26adac16712066b18f2af8338ba6cbaa63ff1d4d56db6f8b985034926cf6aa95fd67bafda682bd5b620b2dc2cd2607b3642db1df2db0bf2927a536e67c865867c3e984fd20cea517bff6e6d79ef6ff75f9ef0cfebb0eff0dc3d7e4d73e0986cf06dfd505bf29435b627c9fe35c2343ec6b2dfbf152704fbffd9a87ebebe04516c5c0eacfaf03f87520c75c9680fcb5f975509cf4c6c2180cb012e1ac0ebf0ee557c1c16149c6bfb7c3917521c0a35c0e05f20c0571d705efe9b3bd34d22ef2712f5f3eeee5e463e45c9e7f3b79f861fcba0fbf0ee7d8769866cff06723f8b55f1cb9463adf89f4329dad01f27d14bf8ee6d75c2edb302e6b39b8d79545e4691ec7dc9bc75121792ec2d3f795fc7e0cbf8ef5e5d7381e6e39bf1f9fa03c89e89f9069388f6305b8b779ac312f0696c8f77d7cf9be0fff76b3c3638dbb7de901fa27c59dc0f15626918e11be748c7064a999e50d175706813f915ff7e5d77c573f267fed7d1719c9e35e05ee69dc57f8d2df23c1b827f3eb247e9de2c63d85c7615778ce753a8f73b48b1d113a3f0d7c77267fb61f0f332a4159663adfd76dcdef673969ab55e93caf25ec8e282b33e2e00addc9f5e94e2ec77d86e3eee2e1f777ee2d918f83000efd7eb50f37cf879be7e0d616f93f3e41390fe0d7d9fc7a08bf1eec72baa2943f3b885fe7f038c710af8d11e5fb40f7db96a26c24ca5bac3c9a4bbcf5643f1eefd804f3781ebfd64d30bc0853a021f37c7ead97609cf5f87581469cf51d5da82bca8ed0855971300b1d7eebbc0264a038eff0fb227e2de6d7859c7f61cfcac17d3c3d8827cb222e8bc8b30247967aa2de2be1d743bdb290c53e99d6a44ea688a8a70e07f7f43a9e3f5f0beea9ac373bf1d4efcc3145395ae293b9cc9ccc64a9f35d431177fd04bf8ba55fcb9cf4d5e7f55ffddbf973e1db09d9e6bb72d7b9027c2be448a43c70df2232d1c7f14447860682db4a5fb823c03dbdeeebc6c77ed36f856ee580e7f4db23c13d7d5f9ea0ac2b48559da5389340dc9378dcdcfe37f89e875d49aa963dd9b7f49a0f9ee53b780d857fb78a54adc744389ab6a3c03d7dbf3cc1b4ad96c847e3dd12e35baec751fb330fe803e79c88b2349978cb96f00d06bbdf584287d73af78d852c22af85ff207edbf235dac0c3f03c254713793dbb0ef0c0cb2359efc6dd5ec87b548cb876f030c7f8d2bdccc5a9cff3a7b12807c7126f99f187a5cf8ee3d78dfcba895f4f72c3ae127e8448ef895cb6a9c4639bc909e039bdeec7dfaf03f734dcf12e760ba1a327fb6495e5e729beb4cb6c402c3d3bd509bb52d894cd0eb78dff729e37e9ec93e108125b7ff7e0e99a46bcfa3fcdc16d3283e36ee1e14fe357ee4746a6837ce63e2839c34dd32851c79e0e70eb82df89c8188b8f739c78a2ed8073f9f53c7e3d1860f7e4f10a1f0bfa6e678377f49efb70e42ce2a97362ca723ebf368c939e5e201cbd5ea091fe58ef6af1ebc53c6d3389b76d34d3c9e3ddf262605de2f0d45a94c32dce37cd044f973aef9b0afdb80ca489c621ea51aa43a2fd7f397fb73f48f759fcd901e0d945fcd981eeb308b7d7e40af01d4dd37adffb2b0186ecfd554006d9fbabf9736e0f9bddcc9f6ff5a5e52c9fac07108fbd20d7544d6be4005fdcc21e269297d7f26f0ff2e5e5414ebe346f1203eb3a795eb6c8e4f7d7fbf2f2065f5ece96e4e58dfcdd1c906fc3f93358f644fe1e0278106daa9b90bc14ef6f06b8b2f7b7001964ef6ff5e6650bee2391db90bc84f2c3bcbcbd6a5a591818b7e036565edec9af77f0abcc7fbd8bb8769ce21e9700aef8f6f818b8393edce313c0bd975fef89817b1f226f32f1095d177d3a738957d7e9bdadb72dff8a81b58d4875bd75037e7f3ff1eafa03c4abebf348555d7f90bf2b70f39f71419fcd2755751db451191e7db71d8481ba2ade3f047065ef1f0632c8de3f423cbade5af405ec20725d87f2435d7fb46a5a23f37d719f90405e3ee6e359f05b48bced95429e3f423ee11f6d21b1ebc6c71dfc35e2bb27385e11c7df00eee9b5d8176fb1136f9b610e4e5bd14e68c09f73ffa76d73fefc49e7fef04c7eff140fb7d617ee691e4ef886cffaf87fcea72b8b5c7d8ba6e519f00ea6ad84787d92e7f9f343415e95806730af845f188fd717f8f5451f7f0b39de46704fc3bdeccabf568cc1bcc4afe7bbef9a0abf5ee46f0320c72b725d61b2823c53f691449a5f8d9366159bb498786dd262470f76df1c03eb4d1ee6f61861dee657d1a7f416c72f25de7688f05bdfe5f74b7cef451fca3d2ef72dc703390436fde6c404d2ff1ebfbecff1cbf8b727817b3b6dedee76e26ab79d5f45fdf0810fe74357ae23aff07db32901794cbc13dc2d255e1bb1d4495b7bfe3eaabb4791d8faf411bf7eccafc2562f23defe40512662f563c58b2b46ba22e5c4db7720dabadcce440ee3ef39ef914a5f78313ef509bfaff0855fe10bcfcb04f994df2ff786279f011c7affb99bb688e823fb023c13e35e5fbafc64d6e0ef567ae3265f116f7b50b4f956f1702783ef2007e23d6f9f4756fbd2b486df9f0aeee9f5701fae1887f8c4f75ee0aef5c92bc690bee3d76fdd341ef917f806f049bef162c6d4e9cf39c611fc9bcde0dee63073640c0cf1ade8ef3b8a639c06ee2906efb3c98c516e23eb7cfc1d099ed3eb7afefe74704fb13f8821df173cecd1beb41ded7cdbb15d02dff2b657e4585fda8ee518bcfeef186bee81a8e37ff0e5a1d0598a07fa8ba2f92a7ce16ff8fd715c8633c0bd2dc39e8487fb91c875fb18dff7677abfef247cde9ff875974fb61388b70fec177efd15d749f29b4ff60d6e98a87c3ffbe4137d6f42ee8d3cdeb3801ce239bd9e48bc759aa8a77ee7f727f9def3ba483a861fab8cb4e0d73f48d23696fc09b012e9fb69c9af7f69c4f937c04a24ce56fcfa8f469cff02ac44e2e4fdecf467b2715a16c04a204e8bdfb3195ab60e74127dd97ff0e7117ee5f39c22d46e513d3a1bdc8b3ce57ad489fb5b16f703addab1b1232773cc73c03d8219332d3cbd161f97b2eab9df0fe0e5dce2e5db6ac4af0ddd300379dd6135e6d7a6fcda0484e1e5d5da8dcb7a0a97fd5c702ff29e7fd399f7ff59cdf83bfaadcd7757617b4ee518e739e1bb6ef5cac8ded705bf453e0b7cded6b19a3bf7bd79bf169b6767c7d34dd834ee8b5971e67358bcbc59ad62a45fe86a1b9c6be18fc58b2f6699e05c6509df6333f1d48d565bae1f1782f7c256d0fbd378f8f3c13dc5e37d2dd6eefcda0e4fab94a3f61c4ff44df03ef4c8995e7db0f6e079d404bc177685de9fcdc35f00eee9f51cfefc42108f784eafe7126f9911f1f9f5c2be769fc7df754064cc4c52c6b3e4324a75b3a33cffa2f9f5b7fb4da70ff8377bf26b178ec5fba7987da4d7ceee37bd45d9edc4f186faf2ff22706fe77fcf6dbef0a2dfff74e2f50b4ef785efeafd2e72060f7fb1a31f11ee8f58dd486c1b625f7b713f498c1fa23a08c376e757ee17583ddcb0bd783bc812f6b037aed3561f12bbfcc238f99cd598f6204701af2fbff68b81d75f018ff7a15883f97b3e8e660de4573e2e6b89799ee711efdc0831fe2569535a43e3c8419fed15273d50d6bd411983f5862873927a23669d370ce801c5399fe35e02eee97b493d171397f7eb93aec4b5dd624e5e37f04cd429f17cb958369e97a988187f5a0beee9f542e21d6fa5f77699eccdfb697bef0472d16b9eefbb15e09e5ec11822fb6d63f569e260f51175f53e5eccc8c52e7fc39e01cf68d811000bda1a8e9d23f2b60b7f7e250fb705dc43b92ff1c97d099791cf518896eb4e713897e55717efbbc8553cae4b25efe9f3cb40387abd943fbf1cdcdbb2650bfb38925f47f12b9f5769e5f2f062ac700db8a7f149da2151db19279d51d92ee7d857807bbf0e0b5dbbcca76b97f1bc6aedc820f2cce279628d91a7c71aeb4bd7592465e9b2c679f54de8593c3de92bfcbd2efcfd958a7a23fa0284ee6fe13857817ba80b6bc13d8d7f8e23775fded6b7848d98e0e5308aafa013fe32ceeee9b7158a3ac3d3608979595d89778c48bc1773c08ef63dcff7e9dcd55e9d63fa5417fcb679e9b79dc7d511a4b3ae0f7712082393673290c7e6a5bfa877a7f0eb7edef0b2b9b796a81f453ecc01f2245a36c5b8ef159234ec0bde8134a42aef62d65b42c7a7258f11add3a66b60087f6188465aea01ac44fa0fdaf2ef34e6455b4d005622718af6d34c8d381b02ac44fa2ce89c10e8e789f52ca24ea3ed67d83f4aefedf237488c378afc8d336fd5e2e3bdd6fefc3adb0d6ff1b90c9698df60cb7394b0777c7ec9a06315e3e3f3e5adb9fc3a8fcb7f0df18e815cc331628c81c48b2b26bff339bf3b803ed1f7a28d742df1b6a9af75d23b58d88605fc5a4870fbc1c74863fad5c5f27cb60ae2f0b810f98ef70b45aef3c97f9d23ff10914fc2572f8921dba1ce7d37be5e6be8565f5cfcdbc8f5beb8aee771f176afb5380e0ee72772830fe7060767e8161e4ed8763196e9d70d815d137cc3e7a65a4b7d7c61eda61b89b77eb811d7436b5902f9cbc7af62b59b84cc43783fbc559e9c4ec4d4f74a3966d49edce4e3fe2687fbbd781fbdb53c0ef7b05c56c4d1dd1509f0b6320e6f149bf735466e265e1fed6647f6bd0ff086b3f8589c25c6f6d6fbde8b313dee07456d5abcf4f0b13b4bf4cf88f9d5b710af4dbb459fbb98797c1491fad2d691c9630a3f39ea0b89b9735bc1bdcdf530510f88be84753cdc355ca69bbd7891dbf8fb6bc1bdf82e913a59f49b8dd0e06b3dc04a24cef64e5a878b32c1f5c43a86a7e176172722e674c8e63ec792e938fefd1dc4abd377f0b8f99c98e162dc4de4f1b1b1d360f1b1344bc82ec634447edce9ca196dfbf37989d6892e7654a7c05cfa6378df84b511f0cadf0d17be96b033770139c5b37b00fec93e19eef1c61bb99778db83f73abc8c5ce74b0fff2e721ff1b6ebeef3f1bc8dbfbf0edcdb7823f8fcaf1179ce7524b725d172703f48873fcefb39e6f5fc9be339265fff3352d8733e8e62897efecd3ebcbb257922ea9e54e489b06f71742722e69ee6817bd0a611e98ebebf07bcb7e3db87f755587c2cdde23eab75467ad31b4d87b051628c3fc935f616efa3f5acafb4f379149fff306a0bf19451b6e6215619157330052fd83a5d1ac73bcef3d1dcdfb7ce76eeadafd5e2243dbc79c7ee41de92ee4e7ca3459fa118b311f365c627184f2c1ec5188d185f7ac0c58a8879b8aa76f47c27ec383e2fc1e2fd94b97cfc30370bc788ee99d03946dc7ccc24b790e3f1facde2fda296e837e57dd4d1fe900789d7bfe47388a53e41acf409dd12ba2c2bdfb1bebfd209eb5fbf9d37c0799ec7f12d6e372dde4f62897aff31e2f56d1e8b910e515e2f8dad2396e8d37c18e4ffc35c2ed1ffcd79b42e07efe11c19311ffa2180f19083316688efdb4788779ed023203cec8b7f885fb703cced1c73930f7307fff606702fc2434cfefd5861b7787bd7e2f590c5eb0e69dfd6b5debc2762adc1f5bef7a25ff706f97b4bb46d3a22df8b7097fbdedfe40d17d5851bc13dfd5ed626be1cc429ecb9283bbc1fdebad5fd6ee276feec96047508e253591e25de79a98f3abc8f9bc7c3df96c2b8b9cf67f1751ca2ac54d159c1d759e05eb3ecc4f45bc5d8abc6ba32eb4e809548ff95df27789c78fdb6c79d7c9820e67108bf4c8cb1dcefc5893c47bc7653cc978fc5d95db165b578f8c813c4eb6b3fc1651be9e04e10659cd745562c9bad1837e9ec868b3c45bcf3069ef271f024f1fa5dcffac23fcb313bf1fb677c9c3fe3a46b5f3196bc9d54ad2345b8bae037bd3e0d9e3dcd715601b960bc4f13ef18a1082fda80c2ef8cc3910757d88a877c18a0dd325e8c13f33a40d4bd823f4bb41d96abc91153cf774838b4d33a51f8f29c13eb1157ce89c21f7ed4f72e5e5cb7725e9ef7e9ebf33cceef1dfc7c51a70b5dbc250ebebf8dff02f1b6f15f70f0f3859f9b07be036dfc4982ffc788c7878ffaf72ff2f0a2fe18019ed3eb4b3ebd79c989378afbb817b7ca58e12bc45b3ef85872e455202794e7557e2fc6816ff63d6f07f4ee09dfb7607d4bb4adf2b2572e4bf495887a93ebb3f55472e988d9868b97c7b1f48aaf45f2b763268f749e4f16cf45ba9e8e1357826d8ac9a21f58d8765f9b226e3cb1ea3c3176f91ac75e05eeedb8a788755d89ee4155837fc7c711ade77d9cc59225d63bbee63df23af196e9d7797cdcbeecc7c7192cbe0ecbe26ba9226f126f99123a28ca9458d35301eec577f4fa06f196b9379c78a76ef18613be62e41d1efe16704fafeff2e7b7fae47bd727e76ddee72c5c5def37220d44ec4170bdef791eb88763ab31ea65f4dbdbe3c4cddb3fd1f6f47e71f4a4a38fd71bc0bdcdeb74e1c38b32fd1a7fff1e0f2f7c476e83ac1bc07b7a7d9f78fca0b87af07a827af0b64f0fde76e49db6d51b2e0c7a10e16bd2a4ed8f74e981d8cb02f877d61b09e699c89324f36cc61c6fb830e459b46e91f973ba79d6c1e1659eb09d6ff9d2f911920f7ced65e4635f3e7c0cbea3d79dbe7cd8e9c43773a7375c341f3ef1e5c327fcfa29920f9ffae4bccdfb3ca536d4f77de40385ef25e38b91cf806c8af9188dfbaae4bef7eb41e4335f3e7c48bc73283e74f26d7f51a78bb98c9ff3705bc03d7d3fd487733eb817f28bb4bfe3cbd3af109d1365ee6b9fce7d0dbea357b1e6ef22706fcb7ec001de70d1b47eebd3b96ff9f53b44e7bef3c9799bf77960744ef6fd179a3afbbd86ce8ab893d4d994ebbc98af23f4e04b9fae7ee9e8cd41627f23a1f33ff8745eac651c1a0347a45fd48b99fcd94fee33f69bc677a1c3fd41a2cdf50112965e7f04cf7ee4dff3f18f83be07f12261678bb90ebc4ea65534935df46975f13dbfcbc116df59dcf7b2c45af75d55753ff23391976791ae5fbc3a1bf9057c47afbf126f79fed5917d4e96375c341f7f23def2ccfb1f22bf137979fedd27e76ddee729f5bfc43c96fd71cc7497f181229cd8df0faced0c7d19ffc3d195437c7d02f17c54eb437e15fe89f06b445ba4dca7437f223a2efc9cbf7c7af017f88e5efff6e9f8df8edc731b78c34575fc1f9f8e8bb55aff223afeaf4fcedbbccf53aae362df8a0371cc74eb78b26ddda0e973c26d2cd117e7f3dfa375d4c7eef7557cf60f89b76ffc43471757e4f8b0f97719965746766f01df7f2db8b7710af8fe3f05c73ad71575bcdf45e7e48bb4af47b815694b56873ed6fb3e9aee24bf8ff61127f87d941f51a6455bc96773a2f3743ff37e2f7cfc689b4af82917817b3b7f16acf3868bda1ce1ebdf02eead04da66424e85b6d9ffb7bcf5af3351b61322be24ed8cbf0c2bdbb98f35bfff48effbff5afaa3659df7d56744f8fbabc1bdc5dbb675c16fbbfc96edf4c681b6a745f98cd79efe9178ed046f3b2cdcea0d1786f674b40ffa3d1733faec7df75994ff4920fcffea22fcfb8e9ae97f5fedfb2a75e1f7888e8b3aef07eff7a2cd2efa00587b1aeaf84f8e8e1fbac91b2eaae3a2ad780bb8b71268630a396ff33eff5f5d983addf0ac918c151eb3c522beffd545d5c35f47cdefff9ff3ef693382f695c5fd75eb4bef77a87f20eaff24fd83a54f78c385c13f10f50adc0bffffb53d06736ba3ebc481eff4bfb2a9987e5f7f8e25fae6fd7318fcfd8b987f23ca6292fe4d45a9375c75f837da7318fe5746939fc3f1bff2e8f95ef46946e71bc2f90d36cff3c4dac204c711a4cff8de0119191c7b2db8a7fdac7cfc6fc50e2e2bdf3794cc891d97f59d0fbf06c7bf1bdcd3f792b37e2c51fe7ff26278f667e57b8a66d474bf8fee71ca65b47e74df1dbf9d3ffb167c47efc578a9589b11ebbc985873337739f1f8cf2d58e9cfa3cd7178fbd9c1f1ef53bf2a4f11e7178e23b8fccdb917fbd85b628f58b14f1eb78d19b5bc3c587c7fcc0c703e2e0b239ed1b0fe3deae3c8267dc6d77d64d4f1e9611d27fdab3b3bf2afcef7e9e189b1e312e132ea8270222e7076a198539d01ce6fcba8079ed16b032edb3de0de966dcd561f6e431eee0e1037bd36e2cfef05f7f43b3e0e92d198bf3fcc87d714c8d498c729d6f9fde98ba309c758e7f0b546ec1ff10d785f17c8299e090cf12d889f88fd7aefe37930cf1b67bc3c90e68b28174fa87f9bb11b97e770704fafcd7cbad3cce1eaf0798edc876ff0e9e953b1e316b816dfaf37a339c7df04eee9fb7f001e7d7f128e298da7852f3d2dbcf15a627c35d6bee1c207e363a819adf837dbc03dbd823d8769b72d7b06f6e7cde0fbad66b4211e1f2faaa3602f9e8cb6202cbdeecebf5901ee6dfe8f9ce7c316dff9eafb0c319667f1fbf6fcbd586324cae81e4086f6e019bd76e0df3c00ee6d198e287474e0c821485c99fcbbabc13d8cb3237fff20b8a7b85f7bc367ecc9c36d07f7826388f39017c72f5706584b93c1d7a610e0b74af588f32afc05760ffc85b5621efff0c4f062d57711d1e72f9e7fc8e3ec4c3c6d06764fdf27ba6e56b4bfb97f90d1c5972f7c0e1001630dca6b0e781d1aa9993c46a48e9396febc5fc1e2739622b5d4312dde96cde84abcf6ababa31beb329db8d6893e0c517eb9fd8ef07a24439ca92cda6b4277fb025d12678282ba2f83ef811a01755f84ef3b1d69e0e6db06b1179f98037c50ecb48a744544fd22f658bb1adcd32b58ab98c1e7516574f771d1dde1627d2f4796a3c5383edfa72dc26d71a4199077955c8e88a83fd62372f6f0c9c9d7c964f40472f23d6f33faf8e4e4e7d8af7fc52727b7e991965e79039f67097061f1f3da327a816742a77b57e52cd20a7c07f221fabe35c090bd1775d3d1bee7a25ec9f6c99c0df2a62ef89d001f31ed886897c5db2b4ef22c22d6f289f34c419d6609bfafbf9b8f9b6e06cf687851eff5e369e56b29a3f5f40080c7d72f660c04728a70830027830026bd0e26defa7cb0a3dbc71feb953dfadd10e2adcf459d26d6edad05f736ce713b81ac804f760ffb4107fad2b1177f7f3eb8a778e31dae8e9f83c8b7b757bee8fb81bef7a29f4394c561804b3fe630ef37022b9a9681c4530747651b0ee2c4b0f79663c7e341c411c501f92e9e45e51be495efd855de3c61fbb4a8d6673f720c71eee366706fcb7782584b2edae93fc48e43e045c49ef1991c6f1f8eff08b8a7577166e14de01eeafc48e26967b17b2ad7073e9c513e9c513eee46134f7f4ef43bb12fafe807dde1707b82e8dff831b1744bed46477ee57e6544ec2328daaab93cceb3c0bdc5eb04d856976137e3dfe4f1b01bc03dbd8e21de723cc6e16dc376277d1b795b33c2fdd548671fae9857e4afeb2603fd9c08d25317bcb712afeba2eba3778bcd6f44cc2717e91bcbe5db08ee69b86e6e1c27f3b54e91ae3ccc381f27e31c4e36f2faff44312f4dcc0f17f5e74490969e3e3926f8e498c0d320e92b8b74f7f216ed179b44bcfd3832ae457ce0ccef0c31c7240eff195352c07fafc4d21de9e3c671326fcf46f8deba19e3814cdcafcf10e7ddaf05f7769e9cb4c11b2eae7cdc6f88e448f2acaf4ff67c9fecf9ffcd3c93f2b4874f5e7136fb56706ff3bf49f4f98879bfed41be36f7624544dbff264559b8ef1211675e88fe10711efc36704fc30d7065d82cec95f0b1ba26c1451f5fbcd37df14ee7d769409784ff01f64acee0edc90c71f6b7bf1f06eca99b310b84a557713ef50a706ff37feae73e6cf19d38fbfa2a706f81be1171a6adbf1f06f8ce19078267f42a7cfb07c0bd2dc3295f3b5c9fba1d894bf8fc57837b18a738dbf941704fd356e90d9f7108f1f6c31c023886380ff9707c7265cc0569e47b2147409b46da0f23ce22cf03f7c0c73a45ec933e3c313ca99e09df6e1ed023eeb3651400990bf8559c13ecd7a30520ec0210965e0b7d7a54e870747abe0f5b7c57e4d3a3222ed7607e5f8ce8d1422043317846af8b7c7ab4c891e134beffd9e99d91b84a7c7a54e28b539caffb20b8af01f078f88cc540b6c580737a2de5188f827b1a87b81767bb9e0eee6b549539a30cc4c1f7418ef427b1756c814fc71678756cb3e8fb189e189ef7594d8b9dc1369e149102b28c64b3ce3e5a6bcd22d3482ee943669242b29494d9bf72edeb12fb3fe74e3c175ff6229971be617389594fb4fdaf1b8bb692acb63f2d72cef8996edf54d88f8aecf0146382fd4d25e94ffa31ec25f6bb05364e39292525643e69c3ce5413b1e7b2bf0576881206fa58469528eea9120515aed4feafc8feacd2fe900a59613f1f673f29b3ff2fb79f2db0eff3ed2bfd6a1ee94b66dbff795166d9d19692e5f6dd0cfbef328637cf16bb6ac878493ad87eeaff669a8d59c6a45b623f11842eb3ef4b9984d3d9df154cd22226fd04fb59a5fd8ca66621196d5f57b1d8aaa6bddcfe2d8b7306a74c2ee3c14acf2d760c9bc8a63c3b3554fa6ca68bffcb91eac81136fc4fcb07fd57239bf5be9f582527fec7a16364e8c0c1048ed1975166799ef523d96c7ec1b42a0caaa7b16a0ae5faedf03d880c889916393334bb7767297073f8f27f4716f7dcf955cb9adea4f527d96cf8bf5d9ca4c52296e265b1931d559250b3668d1c2aa89f7e4b463f9d9ac0ce4c4917fd4eb812164e3d036ab1cacf9b01ecd8b919b6559b0a2acf994cf852269a3f3114ba8c5942f1abc8fe6a8c9d9c2216ae027d53258f73a840b5593655ad84e32515cba8882ca3d87ce019d5524e66c7b191f2acaa134d859b55d9ccb36a1d43a1b1b898cb5583fb5da2c81db971b055dce1f2baaf3f39afc5c59d6636da76c794b219a77db9b3a63c9feab17c4a26762ca7326439552fdd452a7e1d122b9fea47d3e5e613fd27e7b001a2ebf164c018ac2163b07eba759dbe5bca500aecb0ea1cd201e69e7eb32427b011a284f145c028ac29a1308752d8582215a959d72715150841ae25cb9c06d5536127a7dc7404a5958f829aa872378d59dfaaaa766d197b6c2ac23ca3ec8976e474bbc130d17e5760872f624e297d3ed5462cb0e3a678a3580c6edbd3fb456c6669ff676f3fb352569b31563b8356b1ae6418e375248ce7507d6d2e510366e3fc85a1295e18ea62c5ac856e31ab8721b7d445ae8f21b7d2456e8021b7d6456e282b366ce6ce9cb4141bb7fb45fc1a6d7fbbc84ecc0ad6a65e6e7f2febae895d5cda245c5cdab2e29249649d486a1261c5a4912cefe8c3dd6542fab3ae2d9e758d31e0769ac04d306d6bafab6d4d3191f7d01479374ce40eba2237c344ced414b93906dc5113b885ac483365496fcbd3698a511c754f82ce23e890b09bdc89604dc2d8326045b6a52c6ba80da6d5aa6ecdd64a963d4dd29d3d79cc92cd4f327bba503595f080675157248be2c98165516b59165125ef86698e3f8b3ae159d406cbffac14e47f5b0cbc7b0ac077c768e991025adac9349799f4c5463577a6fdcc192a19c3de96b0fe75177329bba7b1891e85585f50fd9d645f0b6d09a92cb135bd6734cda05f85d536741a8659c9e844945aa258d546ba597ab382655e18ac20b697691cad79e99403ad9a770f0c395b17b903869ca38b9c8921f7d545ee2843a68d5e3ab5a44a272d6d9b4db173739afda884b5e20aabc6561b8f6d4fcc48f54f8191ea84810f480178671938e5954e67d171abbac8ac1ff30e671bb57ede667c7f566716d8a10bc02f31c6e86fc2f78f63dd06c9ac1b734c3b107f07826acc8313b15e4398f5d28f0cb34e5d316d18aaa90ddd301dde2b053a9c855991bd75ad48770c79982e720f8c90e12920a42706be4f0ac07bc9c0692fd188686017fc5ffb5f15f00638786f4cf29112c9774d882849de07cbcd51bab9998d218fd645ce919951d6645d9f16331a6f8ed0383b5934b62976e3e350e24ceea8ea41894922d3ec6b3193a2880f60c69f5b14db24e7ca4c326b908e0156b2fa5341677845980d1fc36c38d545cc9f9449a3ee7fca6b90b12cf6607183d5467d314b334e6269de9099b11896a61f5664c7eb16d9fe32e416ecb6aaaee6505da553dbebb1dab34a3c63f17806c84c03eb2e5953ada6c11990a278c56cda9e8337d9be5692954c551783590b33ec30e5761c451e4725396340a7e2b7f7fbf6c4f9272f0ef9ac38ec93407130992aac000c9469126d86d0b502551a31b48f671a996a23cf65c5f030f698b2e4e46e090b5a42d630f7d09981a7d2c8192493860e88d0550a719dc36638f0600c788a26f010ac8c4fd52de34365c8d4dad01509ba1ed65e98d8d374c5de1bb3a8d32516f52f4bcda20ec3c06748c0b745d4c08763456166223a1243abf7c18067c9ca186dd5e6b2491099f6ff4bed2f681f6c012bfd99ac3274ad41a65dd64bec5fb4c2ee05c22fb54338335e55e41c8129c5feba4a3112cbb70324f9b64b31df4661e0074ac0c767a8818fc6f2ee2059def525243a736e11afdbbcd63093359833d974f3e5bc1b88e65c05cbd74c72b8ed8e1f615f2bedd099ac1e2865efe86f9ad3d4d6aae4692e26ff6c99fcf580fc5381842a31e661766b8ec46e598a766b8c0c9c3a3e0713c4f1a1eb79d41d9fb1186d7365b4d11ed731b6fb423dd7e52cfc74a60045515fb9304515e438895cd96ce4a58c54a743465b0b74727e05fbedba28346e7702a88ee3358f5475bcc43fb9e35540a8e3d58fc477bc52213de6608dc78cea7c8951b5548cea0419322d0b0bb0b250985459d857a6736c406e59b5ea1c5ea2a6316c5af2f41d7eaa6519fed63f1b311c908066a54ac69e16350a34fc02ce5c0535a675991ead6642e7b2715b4a3e2b12f23251ccca443a25c7cac544acd65e28a9b517d554abb5f365e0546517497233a72d2b89ca04fbe529c6e599242b426c64b8bc5a8b501e434847312a911523367c3d2801654ca59c1dd8505c0533f285dcc83b5549078bdae572568d5389694500dff7b4688b91fa6f6319df4b18f3347d05ac1d8e15ba4359a14b773ab18237192b788b25056fa762c19b2203a78a5e2a2b78ed18e906b3c32ff9a1b8e453315a96486869574b8d96fd3027a04ce20428b5aca6c99069f8a5446f386dba0c987a17cb08e25dd05d72d4bd8b191835e5bad4ccc472b44292a373147374162676a5aed8fb63622f9788fd8ea2d80760e02b24e0d7d756033f50064eabd59589e8628c56cf4118305dbc5ea53546e71b8866f4025f47ca7c5204ba470ad993d5f6df52fbd9020691c996ab8a79f82a52cec6b85d2de1769922b773300ad668727bb00cb811a350cf801c821990b59801392229033217a3fd4809ed7489840aedf3b0627e946e312fc090d7e922cfc790d7eb222fc0908fd6452ec432f1184926ceabab96894518f8b112f0db15c18bb182799ccc367521742a80dbc4707a17dc6ebf021baf92599e4cdb243b2e60a1a7fbb098cd1f73fa9454caf9424ccee365723abb63d0d546d4a72a605dcc34c629b697a812eb228cfa1324d47fad487d0906be41023ebe9e1af8a1185f1b657cb58e93af856c918afbb4affd5485c7c5983427caa4a1b76ebea9c4538a517a9284d2bf14295d822562932c11744aaf43df5e366593597f7801dfd96305abc6d5692cc32438592601b56cf951c7606a926ec1528cd25324940ea8af46e932193895fb545d8b7c1826f66699d15414bb1c13fb345db12b64c8d4eb389d205ec7192419afa3128be74c2c9eb3928a6739c6d4d9ba4cadc032f81c49066f69a096c12b31f07325e0ef2882afc2c0cf9380776ea806be1a033f5f02be56117c0d067e81047c8722f8e118f88512f0df14c1d762e01749c0eb3452033f0253f28b7595fc484cec4b2462572a8a7d1426f6165db1d74990b3d9ba8e74ae48f34f0e545b9176294974c5ef6544be122d5efc580fe77a59bed01afa7299480a55f9d198365d21d1a63c456d3a0603bf5202be4d11fc580cfc2a09f8e78ae0c761e0574bc0973556033f1ecbccad9a997902067c0d91f882bd98762e65658cbaf3456cd3aa32f6ab8c6d1c58c4e6751430dd773b9cc4bc0eba0b5a26d7de72aed3a5b6b6f7b19faa48bd0193fa5a99d4d464d03105d76f769a924e334436ed369374e35e773725b936623a709d44079a2beac08958a2afd7d48193647696ad722b316a67b169d633d8e005ddb5b09869ca9214af9dbc21619b7c23b3c974ad84395931fbbd4996ddd4b7be8920be353df4a21e1559c9b73e19d3d95b243a7ba6a2ce9e8281df2a01bf5b11fc540cfc3609f84e45f0cd3270ead6d0e30bb4dc9ad330b1ef9088bda9899ad8a76362dfa92bf61932641afeae44cc4f8c2ef23365c054d1efc6149d6e7aaade883c0bb39ff76adacfb331607a02a07476e1ec689798d37b73b062fd770ea642db242ab44b5185cec5c0ef9780f76aaa067e1e96d90f6099fd6052997d3ea6addb35b5f5020cf8214de00b312d7a58533d2fc2801fd104be58064cf37e07a93ac79502a8cc71bd04d3c247255a386337352ddc2203a756f231a269252fc5c47e5c2276a5a2d89761e04f48c0cf5504bf1c2b994f6225f3a9a44ae615983a3e4d24d6922efa9e6bff474738e9f0f44232957950741ef82af666196b6d501f5e4577afc4a478462645b3a81439f6df25c419de7026d8242fc355980ccfca64d88dcbd0dffe7f01f3a7e937abecbfc94b703526c1733209ea80bca0abb4a8c7ab12db564c7d9f97a86f613335f5bd0653df1730f57d3129f5bd16337a2f498c5e86a2d1bb0e63e865094399cdd518ba1e037f45023e5211fc060cfc5559de2a82df88e5ed6b58debe9e54dede248b872af41bb14c53bf149ba69b3129de8c6d9afaa6d034dd82c9f0562cd3342085a6e9564c82b7e399a6fd597c6a2b4a6ec3d4f71d89fa52d55351dfdb31f57d1753dff79252df3b30cade277a8ede9d183b1f48d8d9a6c8ce5d183b1f62ec7c94143b776389f8589288e62dd512710f46fd4e4deaefc5a4fe442275a9a2d4f761d47f8a51ff5952d46fc312f1b924110d5aa925e27e0cfc0b09782f45f00730f02f25e05315c11fc4e8ff0aa3ffeba4e8df8e29273d5114add6faa7b85a7b0893e25b99146eb5d62f85d5dac3980cdfc96410d5dac014566b8f60127c2f93a02e71abb5316ccc64a9e2bc9b1d9802ff2051e076add514f8514c817fc414f8a7a414f8312c11bb2489385331118f63e03f4bc07729823f8165f72f44af5e781293fa5789d4856dd4a47e4a064ebb477e239add234f6362ff2e117b93a2d8cf6064ff212b5b748e54ec997533eca0cbd8dcb785ccee94b389a7cef2b74236663995384735386bd30beca7856cd5fa22762fec660199cf4714fbb21145b1ae7d357176edce6423facee95c996c34a990ef76b0983da960a18a00b27cccb2848fbdc2514ed509b2cf6219f4a724832e54cca0e730f0bf24e0db15c19fc78cd1df9831fa272963f40296887f650cb5554bc48b1838dd23c00fbe4e11fc2519b8b30dbc5ed7f5cb12e06cb69969f50c2057dd352bb503c811195fd201e40c2bde00b2beacd800f22b982ed590e8d276455d7a15ab226a5a9a55c46b18722d5de4d7b1faa17622fa1fc368be21d3ff4cfab0b85af45f673fbb38c77925acf97599e6f788a1f97abbeec973e24d4c79eae92acf5b98f2d4d7549eb7b162da40524c5bb7532ba6ef605237b4242e11ad2d47b18656115b33215b6d93c9dca54cc58951ef62723492c941f7c351c37f0fc36fac993bef63c04d648253fda1db5bcf603ee162db8d28614a5dc1b7c15189f9034c2f9a4af4e26645bdf8104bd66e9a7c7d8449dd4c22f58ef66a527f8c49dd1ccb0c31cdc2718dbdd3115592b5138bb9852c66da71e01c45991d3dad2a3bba37d214bb6c1512d505349f6012b49449d04a2a413efb55c9760a701a10c9ad8ffa1493a5954c96dd1394a5ea71462a327d86295e6b89e2eddc434df13ec712dc46b3b87c8101b7d504fe1203de5d13f82b8ce776129e6b7450e3f96b0cbcbd04fc0945f06f304af6d0a4e45b1930b53e1d34db55dfc98069259d69214dda8e56324ddaef31daf794d0bea5a31aed3f6089e88425a2735289f8114b441749223e504cc44f1878570978834e6ae0bb30c5ec2633a774678c69046e0753c8dc7561c8b3487756e195f1bfded9f699eccea97e7ab16d1ee81b61722bd86cfc4c6698dde5ce4eff145db8bb8c78e7c68b7868bf9453c51647cd792633e6858a331b7fc6b8c8927141f7ed855b0e3a0eab5bc1ba4b8f5732094b89bb62d6918fca1c0fa19f1d5a7585c22f98c2749728cc9c3dd514e657ac48f5c08a54cfa48ad46f58227ac97aa31413f13b96d3bd65394d97f8ca7b5b67f37e5abac28336549c9da162e56956ccb7ddd96c5ca787d6d56b6f0958ca3443f4c67adf5532bdaa9494a2f94cc2a5a02fd7c15eca1bba2afaf5878c3d7aa0561f4bff40ad3f31f0ec1480ff2503a77a9263e9efe8fc3706de3705e0ffc8c0e90979fd2c821f3be78fa02b1ec1bf5804fd531401b1908c1d90828cb530f08129008f60e08352009e2103a7766eb0c4cecde8a266e76a60e04324e04d14c16b62b40c95d0f2ec33cf0c57a1a51626f95e12c9b72a4a5e1b03df5b025eaa085e4706ce8e13d2ed06ac8b893d5c22f6e78a62d79381b3e3845260bdea63e02324e0962278038c969132ffb8ab1a2d0d31251f9582b2df08031f9d02f0c6182db9125a721469698265685e0ab4a529063e2605e0bb61b48c95d052a8484b330c7c9cac075211bc39063e5e02fe8a22780bcc6a4dd0b55a2d31b1f795e9613735b15b61aa3251a22aaa33e25b6392e7cbaa6645c9db60924f4a8192b7c5249f2cebcb52947c770c7c8a04bc5d961a783b8c96a929a829da6392ef2791fc1d45c9f7c0c0a749c017298277c0c0a74bc0e7755703cfc4c067c82a5045f08e18f84c09f8998ae07b62e0b3647aae08de0953c5fd5350423b6355ff0129a8fabb60b41c28a1e57a455aba4ac0b33bdab716ddee375d3be3cc24ce595dfdedd8c5d1cd6abbe31c24e9afca6667fcb6a9928e44629b6de3d5a17094b4a93d08596bffbfd5febf5d4f424a7b126c6ff23916ed604c2e4e6c2a42374c010e962840650f3505c8c2c00f91806f5104ef8e81cf95803fa308de032b74f35250e87a62e00552f0752354c07b61b4cc97d0f2bd222dbd3143b74062e8228a86ae0f2679a144f2e63dd524cfc6c08b24e02315c17330f062594b4111bc2f06be5002be5911bc1f96a18b24195a433143fb6392974824bf5d51f20118f8a112f0d6bdd4c007cac0693ff7624bd2eb4ffb3ee9b4b0c56ceac64a36d6e4ced956dff97410167ba92c76bafa42cce471c6d7e8372af10dc6a85c226b2e2ae6d3104cc3ca52e01b0dc5245f2a917c98a212ec85812f9379d28ae07b63e08749c02f54041f8681974bc07729820f9781d3cdcb2aac04e6115c8603ef83495d29917a401f35a947606ab83c056a3812937c85ace592ad26f928cc1aac945903bb850e6c4f211bbb5bc0c6f70aa37bc9d1eb0af649091bf1734f2b74479d9d49dee5b69fa962494663b2ae92c94a7dda3cdb620aeba512532e16d36a594c8d59b83296c6129b036a23a96fbc1f7bad3a93260fcbee3592ec2ecd51cbee3158c20e9725aca327bb6367a47f7e610111d30654123f16936f2d56353a03df624e9ddefcb97118f54748a8bf4291faf118f89112f0ad7dd5c02760bc1d25e3ad87275ff359ce551267f15539cb3b9a83743d46059b8d2ee6408b5cf7e6b45bd855b8de1793781d56c4dcf31865854d25ee8958dceb312d730ed79e9b929310f2b1d88f96c54e1be474f92bdd74279e14345c39519dd73b0993e718993ccd813c45d11c99cc273c25bf28783226c5b13229ea0329e86473573754e29c8215c9e3244532a7bf5a919c8a25e8785982b2e2144979d1a3994de700ade627072f66337096f1ba58858afd302a4e9050f1753f352aa661eed18614b847d365e0543f365a9a23463330b14f4c81d833b16e9a9352d007340be364932e27fbcb9069f89313f1cf63ccf33d0053c053240ab86da09a021e88819f2a01cf1fa4067e1046f6665db26763649fa649f61c0cf8744de08365c07456e619d117be5999675ac9ccca3c04cbd0b32419fa846286cec52cf7d9f12d772ea16bd7bb711758ac85775a206246259d63e9ced274e64ec223c2d59c997998b4e7608ed40ce6b0fb0f264fa69d548059c873536021e763797c9e248fdb0d56cbe30518f8f912f0658ae08558965c20cb12679d925011b1814129a8dce9fd7ce6e53abe9e4a16156109bd50d67ba098d0620cfc22598349117c21067eb104fc1d45f04518f82532d76f881a7809562cb6488a85ea40c6a198e4974a241fa928f9620cfc3209f80645f0520cfc7209f84e45f0255899bb026b55c52b730bf82031358eeae5ae0c4bec9592c44e1daa96d8a518f85512f0068ae0cb30f0ab25e0958ae08761e05b25e0e72a829763e0d748c0ef5604afc0dcbc6b75ddbc4a4ceceb64b9b9979ad8cb31f0eb25e0f314c15760e03748c0af57045f8981df28017f41117c15e6a8de8439aa3727e5a8aec6ccd22d987726f69d135e63f25d2a6bb0b86f95c5dd88b85d2a8e174be7c29426e5171e8e65dd6d92acbb706fb5ac5b8b25eb7659b268d6b9eef94a52e05b05ef7582d56cfc11982477c824a1b7a3a27e9c4a3c4762fec49d2970b38fc2f2ea2e495e7daf9857eb64e05498bb136968f6c681d76394dc93024a8ec628b957e6050d57a3e418ccf2dc87599e6d49599e63b1faea7eddfaea38acf7e001cdde83e331911fd415f9042c47b74b7274ed3e6a39ba01037f4856c52a826fc414fde11428fa8958f17c44b3789e8449bd2305526fc2f87e54d67653e4fb640cfc3109f8ed8ae0a760e08f4bc09b8c54033f15037f4202be6b841af8660cfc4909f80e45f0d330f0a724e0761daa047e3a06feb4acd5a9c8f91918f833326d51043f13037f5666571469390b037f4e96a18ae06763e0cf4bc0bf56043f07ab405fc02ad01793aa40cfc512f192acfd315a2d11e7618978194bc42b4925e27c2c11af4a12f19762222ec0eaebd774ebeb0b31b15f97889d9fab26f64518f81b12f09b15c12fc6da046fcada04343fe10c1bb8c79c335850ce9e39db3db8dbe7aab41e2ec1247a0b6b064ee0db7cd31324e80b3ac23ec196a954e605c488790b46f4dbb2a68522d19762caf78eaef25d86f9b7ef6afab7976339f15e22c03188be02e3e27d5d2eaec4b2f0034916b6cb53cbc2ab30f00f25e0ab14c1afc6c8fe48a6f6cd897f276c6737e9323e01ca99e2b486a876116cc5a4f8582605ddf17f141b35f4cf0099c5fe96b04978aa325c83d1bc5342f3b163d568be56029e4da72658e95c8605f7514d6e19d627927a37bb334d47d5255189c4f6a98d578b1246fff5b1ffd546d65d7d66c9d75d251209b6eeea3a2cc73f97e4f81363d472fc7acc75f902735dbe4cca75b9012b3a5f61f596bfd04c2274e46611db3357a5c0dc88b55ebf96b45e55c7ef6ec292f58d2c59540373d99456b11d309d63ed58aa3ed15961c5ac902ce12e423fcf0efbf4497f65a7e1664c83be9568d036459b710b565d7da75b5ddd8a55dddf6b56ddb7617cfc20e163c838353e6ec7c07f94b52215c1efc0f4ed2799beede3a90717b017a5b6a5a1272ad0a1d2322276b65bc20a1b3da1a19275a253fb444f8659c66d96e3c4c2131fe693e544cc5af4eedce76aad8a8ede89a9d12e5d35ba0b43fe5917f96e4c417fd154d07b309bf56b0a7adcee9581b7b66f7fb3e8bea455c1a51114e011dc879580df2525e0f3f16a25601b5602fe9095803d89bb65f212b29c2f78984f9cfdf6e86fb1031ffddd17e8b5185c525f93773f26e19f3209d92247de1c73b70eae508af1018cf0bf2484174e5023fc412c397fcb92d39a25a7ea8cfeaaf427b7d2603b96d47f2449cddc572da90f61e0ffca145711fc61ccd3a24e87d4d3b222c9785a8f60b62312d1b71d3b30863222124d9ba8c6d0a398e4352492ff6bff5391fc314cf29a12c957e5ab49fe38065e4b02fe8222f81318786d09f8bc496ae04f62e07524e0af28823f8581d795809fab08fe3456add78b6856ebcf60d57afd885eb5fe2cc64703091f5993d5f8780eb32f0d31fbd22829fbf23c9688c69244cc99a296881730f02612f0bfa6aa81bf88d997a612fb62295ac69764e0b4eb643719fdb425d8cc7e51ab3671fef571fed5ae9a15b44b0189f3652c41cd5360ea5fc1b2a285242b6a4c57cb8a5731a7a26524e6124731bd937e4177275ecd5b2a62c198bbb66a25eb882a25eef420c7ed70bbe0d51c8fd7b0e2d50a2b5ead932a5eaf6379da26054afa0696a76d25797af70cb53c7d13937cf71448fe1626793b89e4a5b3d4247f1b93bcbd4472d52ea27730c9f790489e79a09ae4ef6292779048aeba55e17b98e499320b70b09ae4ef63e5a923569ef64caa3c7d8031d429050c7d8831d459c2d0e773d518fa08b3915d6436b2158937f8e89f1ea962fd3ec664e92a9385de4e8bda5995787662b9d52d05b9f509069e2501afa108fe2906de5d025e5b11fc330cbc8704bca622f8e79812f79428f113956a4afc05a638bd648a43fd25d97269d99957a95b2efd2546406f09019d0f5323e02b2cebfaa420ebbec6c0b35300fe0d967539b2ac2332f458670c61e87d65e8b5a3d62d3b891eb9efb00cee27c960db7354cae0ef31f0feb2f69022f80f184b0312698ac6a0e4470c78a026f04f181d8324748c54a46317063e5802be4311fc670c7c8804bcc12a35f05f30f0a112f0198ae0bf6299b997ac2c559278e784bb2391c99f0dee1c9037d773da78b04f0aff0dcba2bd657d9b8a59f43b9645c36459e46cd4e73fac5d25317f60eef570ccbdde2729f7fa4f2c5d2364e9a2b544b6523afec2f047caf0d9fed212c55389f16f2cc651b2185b4a736a1253c80aee8bb86fd414f21f4c92d1324928029d5fa36ab0ff95c492ddc5beb5f623e99bf333c3bea383cdea737d7223f46c662f194c8da51374f22274824e8b2a298b153f3631c71db801f9436fc744e8b1945e91f69db4bef685ed9e8d54c99a9a78d658b20868568e9529404342a29b4615db0fe9aa432751aa836c1159bcecc40959b3f648354b9881256abc2c5134a7e886a98b78e5209ab4b0cbcf3dbe4f259135303926c8e4688c922b2651a8c45d5316371dbbd85777eca2960c99e6c6c4147409d796815366f223fadb1cd5c1946e9244e96e3f4a4de9ea62e09325e05bd6a981d7c334698aa62f5d5f064c4df3d44480a9a943801bc88033eddbfd1201ae8b8f4834c4a898262b5454e3ddc67d599253021a61714ec7ab49f555d08d31ca666852d604137fa64c7cba7fa1f76048ffd63f6ade4e53ac60cc92148ca9ebd50ac66e32706abcf6d71c486d8671768066896b8e011f28cb0c6a2a85bbe9eeabad931d2db0ec3848d64c3c5a2d3b5a62899b2d4b9cbb9ac5ed73731b84f0a0dc224f334e25b9ad3089e660be80d8d44036c728f9cd155a63721c1ccb17e89b928d1dda60711f82994cc181b3b820992d1dda6271ce95c509770995c79ddc5ea5bb63becabc14f82aedb09254202949ed8e552b49ed31c9e7a740f23d64e034fc82448c5b8c75dc1d24c0d9f470d5b4b6f49c09f0e549b4f40a23f4ec736ffafb20edbc22a49d172b76ac9d9729e38dee9e6ecd4d236f4e38a747613adbc9aac47e32854d8370f674ae4882d3e2488c39bf52661732663b554979b2f261ac77c46cd4226c8ac86c328c219732f4e17663638ccd687f420f3b1a40f6b1efa6d9ff4db1ff1f46b241c87d6c869c9a6e36effa3c9824b3dff99e98c4253289db4925ceb1ff1bc2fee6d87239ce45556955a4ea8419c243651df21bd50c61672cc98b319742de7feb36e165ce864a72bb60c92d9524f70ac5e476c51cda259a0e6d37197007fbb62c11e00cbc759185d1b15442c7f613d5e8e88ee5fe3259ee6712123587ce09f1feee1bb9a309b7ab57d1841e987487c9a4db93085f9e9e9256c8629dc94c572933d37ec3ee74fa4ee706cfd956907ea322614f2c73ca2599d34b31737a61e015b251ed93d4c07b6305a152b320f4c10ac272cd82908dd1b1424247e526353a7230555b2953b5418aaa36862fc42ae74fca58aba39429a1e37f5780df7a0dd0be184dab24347da0a835fd30f0d512f07527ab81f7c754728da64a0ec0fcf1c335fdf181d8f8c15ac9f8c16b5bf7ddd57af6171fa98c1f0cc22238421241c5c6d33f79afe582d92a110cc6f4fe4899de8b4d09e503146a4b9e86603de847e9f6a00fc590d7e922ef8521afd745de1b6b8f1e9d82f6e8302c938fd1ec6c1b8ef171ac2e1ffb60c8c7e9228fc0908fd7451e89219fa08b3c0a43dea08b3c1ab3b91b356d6e2e26f289ba22e761c827e9228fc1cac926cd72321613f9645d91c7c990e938f2298988dc0c071e8f897caaaec8133096376bb2bc2f26f269ba224fc4904fd745cec790cfd0459e84219fa98b3c19d3b9b334756e0a26f2d9ba224fc574ee1c4d9ddb0f033e5713781ac6c579ba5c4cc74cfef99a267f06e6c35c90021f6626c6c785ba7cccc2f8b848938ffd65c099f6edc58900c718703e0053ba4b3495ee400c788b26f04158ee5daa9b7bb3b1dcbb4c33f7e660b977b966ee1d8c917c8526c98760c0576a02cfc572ef2adddc9b87e5ded59ab95780e5de56cddc9b8f917c8d26c90b30e06b35810bb1dcbb4e37f78a24c8d9f4002eeb506272586d26df0770351913dd878b62ca4626e88015165e0ca14d625b92399d6db107dbae4f242fc6e08c15637971836e5e2c9421ef61dfde9888c837e2c08b30bdbc49532f4b30e09b35810fc5cafe2d9a657f31967bb7eae65e29c6c56d9a5c2cc1806fd7042ec3b8b843978ba518f29dbac8cb3032eed224e3300cf86e4de072aca9758f6653ab0293f85e4d892b3189efd394783926f1364d89576012dfaf29f14a0cf8014de05518150f6a52b11a9378bba6c46bb0a6e14329681a1e8ed1f1b0261d6b313a1ed1a4e308ccc4edd035714762443f9a02a28fc2c47e4c57ec7598d88fa740ecf598d84fe88a7d3486fca42ef23118214fa580906331b19fd615fb380cf9195de4e3b142feac66213f01037e4e13780306fcbc26f0460cf8054de01331e01735814fc2805fd204de2403a6b3bb5f8ee8af673a19037f2505e0a7c8c0e9da9057ed171d25e0d208bae2119c8a49ff5a0aa4df8c99a7d753609e4ec38cc81bba46e4740cf94d5de43364c87462cc5b91aa1363a484c43a7908d395b753a42b6761baf24e0a74e56c4cfa775324fd3998f4efa540fa7331f0f753007e1e66173fd0b48be763527f9802a92fc04ad147baa5e8420cf9635de48b30e49dbac81763a6f0931498c24b30b13fd5157b0bd6f3fe9966cffba598c89feb8a7c1986fc852ef2e532e4f6f6ed97899071190e7c05c6f2579a2c5f8969ddd729d0baab24e0d9dded5b6b0e31d9af3fcb46cb6521f2c8445bc43ef6952e0d2c00bf66d85fd09d65ca582fbdf385081fbbeffe1b3b55193e66b2e9aa132b933dd38bbb294376274412e47c996f2374f14d2a62c496dd5c8d552adf69562a5bb1f2f7bd6ef9bb0613f9074d91afc544fe5157e4eb30e49f7491afc79077e922df8021ffac8b7c239681bf6866e04d98c8bfea8a7c3386fc9b2ef22d1819bf6b92712b26f21fba22df8655807f6a5680b76315e05f9a15e01d18177feb7271a70c99d696ff2422728cd502776175f6bf29a8b3efc6a4a69bacea487d0f26b5959182936cb05c8c6468e6e27d98e26524c2470cc5db86895c4357e4fb31916b6a8afc00065c4b13f841ccd2d54e043886a5db8e915c4797e48730e4babac80f63c8f574911fc190ebeb22efc0901be8223f8a2137d4457e0c53ba469a4af7382672635d919fc0909be8223f8959e7a629b0ce4f61e0bba500fc698c9366ba9c3c832137d7457e1623a4450a08790ed3eb969a7afd3cc6472b5d3e5ec0905beb22bf8831dd26054cbf8489dd5657ec97312f6c774d2fec158c8f7629e0e3554ceaf69a52bf8611bd872ed1af63c81d7491dfc090337591dfc4f2b0630af2f02d0c7ccf1480bf8d71d24997937730b13ba740ec7765e07460a34b227a1de3d8a6f73053dd55d354bf8f0177d304fe00cbc12cdd1cfc1043eeae8bfc11a61b3d52a01b1f63e03d5300be13e3a4972e279f6062f74e81d89f62e5a58f6679f90c933a3b05527f8e81e7a400fc0b2c27fbeae6e49718723f5de4af3042faa78090af31f0012900ff06e364a02e27df62620f4a81d8df61e566b066b9f91e937a480aa4fe01031f9a02f01fb19cdc4b37277fc290f7d645de8575930dd3ec26fb19637a780a98fe0503df2705e0bf62648fd025fb374cec912910fb77ac408ed22c907f607c8cd6e5e34f8c8fdc14f0f117069e9702f0bf314ec6e872f20f26f6d81488fd2fa623e33475840eb85401a6b327c667549d809043272048e60ef8e3a3f517129f258b8fb23a41d36c4564c0745070df4480630c0a66c880a9c64cd4d5981a3264ba0a323f119163ac82ac2903a6edad499a0db35a18f0644de0da32e04cfb764a22c0315641d6c1726faa6eeed5c5b8d84f938b7a1817d334b9a88f014fd7046e80913c4397e48618c93335496e2403a6d67a560aac75638c8ffd75f96882f17180261f4d315b74a0a62dda4d064c97a51d9408708c6569cd309267eb92dc1c23798e26c92d302e0ed6e4a2a50c982ae8219a7de2ad30e0b99ac0ad65c0f4765e46d5bd22c5bf2a11d4c423688315f0821414f0b618f8fc1480ef8e29f6025dc56e87395f859ace577b197017fbb62811e0182707ed8101176b0277c0485ea84b7226e6882ed274443b622297e88abc2756180f4d5161ec248b806eb3bc38114e3270cfa33366aa4b354d75172c179768e662572c17cb7473b11b26f2524d91b330b3b14cd36c74c7b8384c978b1e1817e59a5cf4c4b8a8d0e4a217065ca909dc1b035eae09dc07cbbd15bab9978de5de4acddccbc1ccc52a4d73d117aba7566bd653fd304f634d0a3c8dfe18f8e129001f8081af4d01f8400cfc8814800fc2c08f4c01f860acd41ca55b6a8660057d9d66411f8a89bc5e57e4bd30e4a37591f7c6c83846938c6118f0b19ac0c3312e8ed3e5621f0972764ffbd69a49aae740a9d97ced9bdae151c7cb18b67c3cb0756b2764d0756b6daaa42e1119b0956a2330abb0210556612496f91b75337f1426f68929107b34067e520ac073b1ca7a9366659d2703a63b419e9c08f0181c780c968ba7e8e6e258ac7bee54cdeeb97198c89b75451e8f19cad3340de5048c8bd335b9d817e3e20c5d2e2662aa7ca6a62ae7635c9ca5c9c5244ce2b335259e8c79cae7687aca5364c099f6edb98900c718dd988aa9c579ba6ab11fd6bb7abe66efea340cf8024de0e918f0859ac033b02ea88b52d4053513abaa2e4e4155350b03bf2405e0fb63fab74557ff0ec04cf4a59a26fa40ac905fa659c80fc2802fd7049e8d917c852ec973b0ce8c2b353b330ec644be4a57e443b0c278758a0ae35cac3f78ab667ff03c4cf26b522479016600afd53480f33113725d0a4cc8020cfcfa148017627a7883ae1e1661f6e9464dfb548c99919b34cdc8420cf8664de04518c9b7e8925c82d9a75b35edd3a198c8b7e98abc58d6a1d1cbbeb5a691f475688cb24395db09589d4457c6ed097765dcc1ba325a564957ecd8b14e8c52cc10dc990243b004cbf0bb7433bc0cab2feed6ac2f9662cd9c7b3224274ae6b15b775ba3d1849e815a4426137a1cef4ac6ff62debdd4879d3d39c17e3fc57e53c6b48c3e911fef203b0c828686794e757129d3da02c5837f9761a9bc5796cae3a3a914a7c53a656609fb3d8195269a9a62fb13a7cc4c88861c639724e7c4d8692c15f4accd152c741f9e9e2276cc72ae1d154d17c5f5b2e722d0f06a726048f4acda729beb22860a39851d827ebe67d938258ac7811f86317d1fa64f3046274df4fc7887ada5b69d9a6beb4639cb7327b533c82296ff7e69dd6ff1e7a9d2a7722c95db64a9dcc7974ac8b993ceb12cc796b034faa5f4e6107c13abacc0af54525681a5ec7e59ca4624947fa36c1d2a6465be8469ae7eceb96f54d25689a5ed0159da06f9d23689e5ce229e327ab7aada52b21c4bc983b2946c4ab33d73bfc9b3afa5ac8ea6e7638f65f5f5121643e25a0eb9c35341eb92e5cc0b80568ffa3ca9b36d2b30d6b7cb581f9550d9c8676c5404c2aaadc4d2f7902c7df906b58a3e3d8c454353e578a8252cea12b2869543b9254926575761a97e5896eae131538d4b3a8da5851e5a55c9d3286a63fa740167a86ab9483e375763e97a4496ae03953dbbe9ec8dd7b7932138cfa646ed40b95d1fd0d6878e27984c3eafc1f8d821e363625aea6cd3b5f9e1589a1fc5fc14351d103a9c6fbf5bc080603eab6a844acad662297b4c96b2bd9094cd64e5b394fb264eeb57b45a66f1525c582537ccb4518ec052f4b82c45630d5a5f91ab344c819dd652567ba72ea54762297d4296d261f66de296c29b8202f6cc491de5643ccbe572d61a5a60d7b8ab5398aaa3b0543d99489bc01b2ff41066b25c28b7c3d272b83046ede7c5485dcad661297b4a96b2dcb89633b156016e4363b55993b594ebb1343e2d4b6391618fbad2b68eb4076e21f79867310d288996c6d4b41193a9458fc6787a46c6d3cc6a6b79c466489f8763301e9e95f1301ab561b48534df0e24ca463ecbf5d8358e1c29d5397d2c96c2e764299ca098c2fd9946972139521de93d0e4beff3b2f44e33a8d91549d4bfa960e0788c811752552f3bb66d14a895cda7ea042c552fca52354e518fc7b05188a5dcdbad6e1dde80a5f525ac87423507c7b21055b5d16f5f13c75549df462c7d2fcbd2b7b786e758c96ade323b7dc5bc9d87a76a4695b02a693a114bd32b6a79e6d7cf51ac3f815a9578ad14b335e54958fa5e4d644400f31ec7b0fea102de76abeac727e73d26ef236fc252f91a968b2a2d6327e5e3b867e8bea5e33ab17de054f9c72763e97b5d96bece2476df273d28c58494a76052be11bb07532517a627950b264bd8a958aadf94a5ba376a416644e708404b581cedb5a71ece72a9779ddc28c6664ceeb764720f8d6b1926b01150dac75a6a5bf6723b6d749e437ceb902a1b701a969eb7b13641ec3242dbfc53999f5c21f194121931a1fe65710a53783a96c27712e909908f804c60ba17db9aa77314e40c2c8def62fd7089d45789a432dd75d699584adf93a5747c42b9e91fcf72caa1487775e6eb59586adf97a5f680b8f96ab6ffdff4c8c0d9181b1fc8d89884d6196254bc38da2aa235e232899c8e8c4eef55326ff0772ae93e074bf787d8fc86c4d22d9f0f90deb49d8ba5ed2359da8628fa01cb590bc719e5a1fd1122146d67e431cf40de3709dfa9a4e63c2c351fcb5233503335ce4c05e7103f277caa72e57c2c1d3b939f3510aff5934ebb7a0196be4f12a92fa176c0144e674f9d56b8d35b241b23f0ea1dfe26351a792196d24f65291de04b692e4b81d3cf57e96907e19620562a92d5c78bb0547c96c838b8ca0cbde0d4fd176369fe5c96e67ebe34cf0432b9b38e619b3c56dae6a2582a29b8044bc117d8dcb5c4eaad5cd68ea5eda41cba2c250db5d4162c255fca52d28b78dbe8fda387ad8a6bbe2d4705f1f7dfa5baad7a2926f55789f4ef242ab5c08ead4fb191dd436855d2771996beaf65e91bac98be690c7129b37ea394ca4b32fd21976369f94696969cb8697119f5e796dbdf903a5b750526fdb798ad4a4e7aa76fa08859ee32360a156b04432505576229f84e96826e8aba94cb59ad3ae2928cae5c85c9fa7d2235036448b7664896edabb114fc204bc14151b6533f6e29faa7939fb9901a46b6628cfc98c88843d531a1c47ceee4daefc9db896bb054fe84f5dec83d02b11e6c29bb2b936832955b36c2e9d565757495d45e8ba576972cb51d7d79ea4f11b5218e44a9d2b9eb30f97e4ea42fadaace55b5ceaefe559d259c6eddbb1e4bed2fd89ce944ade6f4b856d3e4eca61bb074fd9adcba1eff88c4feb6e75dc2424fb7cb4481b4d635d3d77b2396b2df929bc3a7dffbe9e67caafa346fc2d2f8bb2c8d5de2d808776e73119384b69a52d396b81993f38f44c6bdaada325a3fad667e9e5f3ec8b1397ffb162c3d7fcad2338624d2a33089af9528b1ef688dbb80e0f35ed3b5eaea562c9d7f61fdab895abdc46ad8f8682aa9b90d4bcddf8958044c0b13d5c0f468e6ed581aff49664456a567325d3a790796c27f6529ec817a81f84ca8323efa9f2a2b7d272631a981f43faab56fc578eb92a8e528e175546273f04cf4aedc85a5d992a579efb869f6b6889d99f42ab2a7a26cdd8da529224bd35e0aed8fea9a89770f96a20c598a662a94a5d8730012d14bf5f9a3c9fb8af7623cd490f1d035aeaf68ce93ba0f93b4a64cd2c1688e55d51bafe4cb582f86bbb2c084f66dc3d2520bb38b6ae5c9e99da9fab66a6b7206710e3633dfaabf1f4b736d599ae790eaedbb82bc24da6213dfa8b0f200c64a1d192bfe56a88851a5efca4d19a607a9b12c0f6229ab2b4b997fac58d5ae56670fc9762ca5f56429f5f72b6363c58e8e0f2203e2a44f665be9572a2978084b417d590ae4f316689ceaf3169cf461cf5395430f63e96b204b1fbedaa5ea4ca0926a6c0f3c82a5aaa12c55f971ebeee9dc8baeaa55b96c94bf3c862d74bf9dc2e6e13a2da5d87b7f24578fecc052dd2891d2268f3fb9519c645b458f6229688c6963acd63895afd07eb3ca66beeafc5faced1ddf86e0da58dbfecfb2d839b22ca4337779296382fa18d974da39186bed13ad99fb786a71f7398d7d892d112ddd33a27530ddeb2d3642139bb05a11e2fceb461b58449cd46a15fb7873be2c65c80b8086f661f9eeec6b415b907da22d2eb1135ebc54c8bc913ec01f81a98b9fa68391adfa2dab364f91c0b299ee4399feafa5b429cdd57e3c5723d9d9348d3d93d4a6f852ec4663cb90eb50ab2accc2322f93dd0198ccfb512c7adee154d69c10cd0aa733ddd9a8316e6cb094ca62ebcd0084ef16170e4e4892c1b5612ae6743194136772f7b62eb6875e33924373a19949aaead9377466e6045ef3523b5041168782a41a035c929a9b2489e28647776a0c7669696192167a5ae85c569a9dc286efcd1406dadea9e1d2d6d2246d6d58912b670efb54e26cb120dc398cc08a5050b8d372296c6592c226f68de8391acf2c160528606d393ad77c4a482c5893ba2e61ad4d12d69c15d5b92487b89b1f8499b865f55de2da9824ae15d0343ad7c05b6027b03e84a59eb1d330d0f7fd3897beb626e9db4da27714904eb8a10b2f97b3a785a1206d1e7149db3d5da4c179bda2dd205a136120edc2e12e69ed4c5b386f9530d6feeb6cc15e185d0eef58ba3010b7a1814b5cfb745938baffd92afb97ccaeb97bcb8681befc892e7d7b98a48f6e9b5fb56208b72b7c26f0e33a9824af3eb074533c634861a029af9d4b53a6499aea029adced90c240d1cd2d5d8a3a9aa4a8112b86a29fac8c15bc296cccb290550161206be76897ac3d4d92558be95345a8eac3c2862e399d4c92d3dabe9912edd3f07720d27a7239d330ea524ce563636120b0417b97c0ce2609ac03ac1515934ed5080341bf357509ea62dae312043922f83dfb59dc7d282625242ccda31a792e7d5d4dd2d782b80eab9fb80a56440b584f4699fdf9ea5050d76b984b5d37d38e04252697b8abc9c3a15daf005f2bcb7ca7b6687c1730fd2a8a36c329689834abc96497b6eee932fa62e7d93010b4a3994b500f9304b505566b8cddc8a6a95e1e6d15d2a54b85cc8285d17ed17f82c49e2649a4670642f2e89813dd659e5ab1e5bcab27dc4d6f3a8e29a8ec6592ca86bc2a10fab69abbb83399bd0b0355df832aa1b7f9e6b7380349cc930903454340ef6b9f74f5be4ee05e9898022c7ac4c2d4da3ca08e4b5cb649e23a807a73a68d59c8bdb2310c92ee9325bcb4e9ecba8ce4b1f667b8acdaf79d5d3a734cf7c6423d841ba18f62fdb3b00887c3f57d078c75f635495e03a08bee5ed7ce2eeca1200a34e0fb99248a4e3f98c4acd962dfd14d7976f072165318089b177109eb6f92b07aa058c273dac240d23630cb6c8049926ab2a8e7b300e1a066d750979a81a62d93d01f77059123441888ca19e81235c8245174ea80772b303a21b96a2f591848db91eb9236d824698d89accb276ca34785e35dba86a4cbd777665a7817fc1586ccd77f06f8fa434d174ea71d99c7a20e733fc5dd355dd2f632dff8f617ce3050347e944bd1dea60be418364978398bdc3d2bd43d3bb682ed8bb42c14c4e5d572891b665ab78425736c566558740b38a5c34d52d4c8435138276ed2357182ac7d4c1744b120622983097767f43060e4479824ae29c187747389d867380c94ed0043b9234d174c67e92ced812862a3476e2761383cfc37f676c91a65922c38a8eb9cfae31f370ad3bab72b406b72b449dae8f44cd7e71ac3a6063bd3ebc240d366309d2ed7244dad194d536d4be5f46e1dc6969087dffc7f5e9b1258bba60fdcbf6948f20b9fd558c79768d3063cd5ce65bcefccb1849e25dbd407089ce47935c092ebaca4a70864c5f5d2b2125e8893a53ca13d2bc9058d590975a367698ef96729ac52cd5272e0b2126ecf6729b5d0b292b227594a43b0594a9d385909adb7cc525a6498a53c542793195fe2935565927356ccf1ad2ce9b4d52ce9bca62c64427e568cf50c59c8dcbbac381331b2929a8f9c958271e5ac38db2864a17b0764210deb2c741c282b660f7f9682ff960516eb67f98654b2e23acd598a934bb3126cb964217348bc7639d65abf2ca4232c2b8693961577554456c203065949cc5acef2ac2d4b6cf56c5602bdf15edcc4d6ac65294cec7477da814e84bb434e0edd69674c8dffdf9be0e4d04d70c652129672bfdaf1b4c7991e78a779d89f0c645767ef239a6b8e85a2c17c71b6ab12e7345e289d43e884072d8bbdaec7c76e9b488292f1b3bb8261f8f1a61b2a5eda626df536970cb193618cce46a6e8ec9ee1d2392148740e0d259d53019dfb0689cebea1a4730a28ec13834467bf50d27904a0333f4874f60f259d17013a270589ce01a1a4f36640e7e420d1393094743e0ae89c12243a078592ce37009d538344e7e050d2f937a073bf74b482a80394f656506d53f47d485cfaa699a4af318bdaed6cf4772555d95923044dc86680bce9e928ca0bd1c20cc5a76d9e41e6e86c608ace2ccba5734690e81c124a3adb023a670689ce81a1a4f34950d8670589ce01a1a4f33640e7fe41a2737028e9ac050afb0141a2735028e9fc0c68e78141a2b36f28e92c01741e14243afb8792ced3009db3834467bf50d2b916d039c7249d2d49ec16b9b7a00f3447655353547e0c5ae3070785cafea1a4721418013a242854f60b2595bf00ad9c6b92ca169cca057caa81ff4c364774e7bcaf7ee688ac698ac84180c8794121b26f08891c08882c080a91392124920022e79b24b23d712732253ae193862f6761c3d7af5e009ca20526896d47e2f998f233e18d16fccf2c43b4be04dae98526696d4ac470455ffbef0a22ced8a3cfd2306061ac2e6f02082c324960b3288173590007c899369826128d0d5c5c06482c4e47e1ce617f13994a1c669b390bd0bad024ad709eb9caaa9130933b0454488baab33d04e18c5642c6067dc700a7a9c424956256f9a0ffd088f989400f0f4d077943d24f9eb142bc1990b7d8247962dd04d6eef11662a34368c634715f50dd940689ccc12124732220734990c81c104232c70232cb8244a6c1de4b63644e00642e0d1299067b308d91990bc85c1624320dcebd34e74702320f0b1299067b328d91390a90591e2432c3d8c2190dc8ac081299434248663e20b33248640e0d2199930099cb4d92e9ec8a50c2892cb13fa2fd403478f8fa2b3b1397b415e9e8fbc10723bc332fc3d77ffe36d0bf95d5db8de640d1ce5fa3638f9d4c51b90974a3ad3249650f4e65a91da8945dc5463653edffe960983328e1ec33309de491896434eb4f2fe2cf60b851b6542566296f668af2ddc0a498d526296f13d710549d9769b06e3736f76d3b30076b8246a8c1fadd18a10f01420f0f1aa1062b2c730b0500a16b8346a8c1fe246384de0e083d2268848671fef07d80d0238346a8c1be7863843e00083d2a68841a749b8c117a1520745dd00835d8bf648cd06b00a1eb8346a8c17e7963845e07083d3a68841aec9b3746e8cd80d0634c125a8f11ba88edd0e8ecea49a7c71aec6532363981e685a0ecd8eaec1a81135e8db6d32f3345e5e5a06be4389354366254fae7675281e92ea3ab42d841d70d68e1f126a9736708d3c9ff699f216cac18df092cdf092609a4bbb83afb058fb2ff3abb7abb7b0fefc7c8a4ff878fc24ca0831b4c5228e6078b9e4d67e584b3be6202c993f6bd8777d5cf0cd07bb9d124addd88bfc3b88081b93bf38eb6ffa775365db4b294ed411d6ba82d8ce3e9cb411574a249b2dded71fba57fa6a6b16a687740df4926e9136bcce11201f90ed4619ebd7e17a8943699a4532cf8eb8b0cfe867de9ca19a06a3a391d4e7a629311c2682107022a4f498785ec4706a7df421aa3af1eb090a79aa46f0f52b5b9389338a73fac66271b389d19456c695501d3d66206b7c4ac66de688ada8580dacdd55bc8c33e49a126a8784e4ba72b5f620b310b342af10e0e83aebcb10e8e39c0953fdd24ad624e5c0ed3524a67a91d889e3ab1381a284d75ba314b7a39d0d1334c17f751ec3caba5fc141f6729aab37a92fa9ae26c23e7c4a8f0f99935409d7ea6e9ce0fe1672e2162cf8085ff016dbc085078563a281cfc9fa3f07540e1d9262984c70b2d23de03acd244a2b19abb07b08ae7a48b44f7aca90ae29cad17ee6d4c5e059a786e3aba31b0319daaa7fc189cea628ccea1c0ed392f48741addf1da189d07033acf0f129d46b7193546e741a0d9784190e834ba2fa6313a8f06745e18243a8deeda6a8ccecb009d1705894ea3bb1f18a3f35e40e7c541a2d3e8f6f6c6e87c1ad0794990e8343a27d8189d3b019d5b8244a7d1ededcd4dcd028ed2a5d5d921ec9d1a68b0e7d2d8c06e3fd0acbc2c1d54629ae9a5d2e0a4556354be050af9e541a1b27f28a96c0b0af81541a1b25f28a9fc1e68e59526a9ec42fcb38cfcbb643a8b4fc5b1d7e22a9b7b64d0921a9b8a60019dbd2a2c441b1cc33446f416a0d1579b24da3de32f27fd13158c394f4f1197beadd5695b21dcdc50eede311f68e235e9a0126e379e4fa69071642a13a6d8fe68553a7ae68d517916d0ca6b4d52e98ca0c3a52973f93ec3a3f938ba0335d6be16d9108521b4900d0199d7992433fe6eed507cb85bbbc18a678e6588d6aea0ad74bd495ac514af4abbbea675bb4a8d6ed44b35a6b1ab00b53704955aa3cd5263d4de0e8cc18da6dda53c561915b05ddc2b6d80f09feadb14d0779349fa9ac77197444ae79a5c809a173144e364d03abad97cfdae7238b231328dade6dd1fe8e42d4122338c7b1ecd0464de1a2432c3b89bcc4440e66d4122338c7b1d8d0264de1e2432c3b88bcc5440e61d4122338c7b1c4d0664de192432c3b87bccde80ccbb82446618f736ea0bc8bc3b48648671d7989180cc7b82446618f7341a06c8bcd7249999a46a43526d2f5883f5bbb1bd60d782bef8fbd2a1abd89c10ff141b8356d4d818d108a0abdb8244a6c1fadd1899e30199f79bee8013a344ff9d0d7cb2017d0f98a4af0da0afea162914cc3dc737cccbb13e07843e6892d0dd00a1ffad156d17020ab757a77df48fa187f1e0bacea0e67e28486486f1e0baee80cc87834466180faeeb08c87c24486486f1e0ba3d01993b824466180fae6b03c87c34486486f1e0bab680ccc782446618b7916a05c87c3c486486f1e0bad680cc27824466180faeeb01c87c3248648671ea6b0e20f3a974342207fde71a91071297c2a74d52a8768c9d416d34b6c8e553307df09960f7ad1bb49cc6fad65b80c95bcf9aa457b6b761e2f3330db6d78d4d2fbc0fd8d1e74c522b7682ed47fe9b3bc1de0d4cc0f3e9e865ef6b5bcaffce06cf1b017d2f98a40f6e2fe52e6581ab318c2f6231a68317801afdc574d4e889799861ec2d3a0850f952ba467d843e8e67b5b83be24367b04fe1ab84c2baf5d92c40e8cbe9b08ffdd8c10cff95559335413dfd8a49fac40e1e89cf5f0fe3cca23d4175f36a90e81c124a3a9b033a5f0b129d034349e70e602b5f0f129d034249e77580ce378244e7e050d2f91ba0f3cd20d119cea311df0674be15243afb8692ce4240e7db41a2b37f28e93c19d0f94e90e8ec174a3a57033adf35ddaca46df3a9f65f0a424f15a09f17b0e06b58b75b090b318d89e62c98364668b12942f70584be978e2e0fda4e77363d719a9345642cfbc86126cc2df43ac0897fdf24958d8938a22eeded73635d6fd3801e7e6092bcdd49a2c72f798fb531383851d73244ea1430eef36110493538ddd518a9f501a91f05915483ddc5c648ad0748fd3888a41a9cfe6a8cd4da80d49d4124d5a0076a8cd4434147f2274124d5e0745863a41600523f0d22a906271f1a23750e20f5b320926a707aac3152f707a47e6e92d49ec4bb4bec02b682d211667f46ed223671061e4d2f068c61c4ff85e5ac1f00d2bf30497a7f52755cde3b7f29d7febbc4fe8ffe761242fb058ad9d69354d8c984365e57b22816dbbabf8214b1503358db4c0c501bcc847c53993080b899f0653a7a0ab07e2cefe48830ae983b10e8f35726a974e73a0dfa0f8de51f043a5abe36499fde3e9e619ccef830a0f69ba052db3794d43e0fece7b7e928f4fdc990f417fa0c538e571f6033bf33499fdaea0fa347eb19ab80ae04baf87d90c80ce392edab00993f0489cc302ed93e1b90f96390c80ce324dc2b00993f0589cc302ed93e0190b92b48648671c9f60640e6cf4122338c4bb69700327f091299615cb25d06c8fc3548648671c9f6d580ccdf82446618976cdf04c8fc3d1d1d7089ad370ee3a9992f836e8e3f4c5299f8a110069d756387421c080698ff3449a358e4a532f5368c67191c0ef4f2afa0111ac693368e0284fe1d3442c378a6412520f49fa0111ac61337960342ff0d1aa1613cdb60052094d40c18a1613c79632520d40a1aa1613ce360292034123442c37802c732406846d0080de359078701426b048dd030ae5b2a0784d63449a8d3e0a473ed56d91f524157d8811780f54aee96e8e16bb777222e8db54cd2984974f70933583119db276c1c1863af6d92de869c5ee7eceb52360fc4c12e21060f6cae698a3802f4b28e49e2ba13efacd04a36ab633a07a0b33c2b592157994e6350538d4da6190f7a9eea9a24bc036a08129ba964d09d32466e1620b75e90c90da3e6ee0236b67e90c935e8661923b717d0dc064126378c0791f704e4360c32b906bb018d913b0490db28c8e41aecb436466e6f406ee320931bc679cdc300b94d824caec1ce6c63e4ee0dc86d6a925cbd9d9bc3589dcd028ed86ee9e8e3a23b9f4c6233f017fb9689e5d99f95b318c3bcff493fe212da2cddba2a5f6f3a83f575d10941c50c6e0931ba3dc28da6a8cd0766a0b9496addb5237d7d1487f9a48666a0a8b708ae153538c1c298157d0050dbd224b58d48ac2ec30a73d4d533455d04d8cb5626a91b4ebc9d86b418d335770e402ed33e2a144d40a91d917779b923740911e30774073477c97921f9ef2d37ff02e8746b9319136f1b78efd8571887ba7b011d6f938e8a8bee59fedf393b7919a0af6d305caa5c42374058c634d631194635d3d87ad24ec0a5dadd24b5ad25d4c6b298434279487a474067bb20d169f4e04063748e0374b60f129d4647b48cd1990f6af43d824467bf50d25906e8ec10243a8d4e5f3346e70580cecc20d139209474de00e8ec18243a078692ce47009d7b0689ce41a1a4f3354067a720d139389474fe0ae8ec6c92ce3af6cd5836ebaf920195d981c347179d3f26e8ea62922edaa3308df733d17d1fcb1880731c5bf868db03d0d6d5246d9d48d5d3ecc69055846e99b99c882eb829f6e78584ce369dc68a6f21239876dda561fcc8d8e4de9e80e46ee9b08c891fd116c6957a5dc094f3ac20d139249474b60474760f129d034349e763a0b0f708129d034249e7f580ce9e41a2737028e9cc0085bd5790e81c144a3a3f00dad93b48741a9dce688cce2240679f20d119ce2d0d4e0174660789ce7ea1a4730da033c7249d9d199d13ec4053091d892ce49f5291fd8b1ee7f2d3bf47b38dda17f39063ed6b910d6e70c999b1266916a0b96f3a2629603aebb5a70667301b6b787e06fa90fa05854aa37b4518a3722618b7ec1f142a8d6ec56e8cca3f81560e48d7fc647acc65a5cdc4325b186a516711e7c0cb42664b8bd2d1bf64cc621e012ce64093843625e2d4857ed5311ba99329021b8256d12093047665048e610034f58eee1532187a6e681e9bb21880dadd18d52d80ae0e3649f59ec43b37b498d0a50814cebbe1417ffb2f25bc207a9d61832e668e97d10960df9adabcf02a605f8798a4b815a3181e135c6dfa6aacb26a0bf475a8f97adf194b722aa4ff1a956d00957b55a70b05e18c9ed5686cddc75450c4f736496533e042e5d90fa8a874eaec0c3660bc38d46ed37450eb0f336f271d12573037891eb73e9f4d511081d2e44219d3c8f5a0700f3749666340669a9771193bab3e1f90b74f3a66c32777ee571857c89f030af988a0521bcecd07ee035a3bd2742594cfd2ed543d4bd9ac107a2c25ed1f2d4fc7c66fc62aa1dd0089a3d25109614bb2bc4ed1a0509efe750728eca3834466184fffda06c8cc0d1299613cfdeb0640665e90c80ce3e95f370132c70489cc309efe753520736c90c80c63bb7c2b20735c90c80ce3e95f170332c70789cc309efe750920734290c80ce3e95ff70332f70d1299613cfdeb4140e6449364b623559720b84dc729a4d86e648a6530ce705c98171dfc455c5af3d3d1db9ed8a16a065d246354be0e347452f50e5c3850b4e3d82895c6867f4f050317938375fec280501eac761ad0cd294123348c07ab9d0e089d1a3442c3386df66440e87e4123348c07ab9d02089d163442c378b0daa980d0e94123348c07ab6d0684ce081aa161dc6dee6840e8cca0111ac683d54e0084ce0a1aa1613c586d032074ffa0111ac683d53601420f303da16602ef5d2ab13fa1d30f6960772b5463e40d31455e17e29277603a66230d4eff6c24637b729f04c83ba83abb3ba6d89f1c4ae80e219566bb3b2e33456504ac1a9a9d0e3d1c9a7e3d34d631fc04d0c339e9d862b79f2dde7f87be1f410572b0f9418a45acef9c7eeaec85e42c6b596e7fb8800b54cc1609d0cd7cc2374dab3ed0c54382bbd17e180fe59b0eba84e756e7a6e4dec1b430cee5180db4745e3076d5961d5462905a634e5153509317a463dd9a77a3b40a92e88241e32396c6c686fe00da3b3f3dcb58697d9ff665acc6c629d7831a7f8149027797147fcc711f45ca19a1abcd16fccf2c43a47e07aaa7c220926ab073c318a9bf03528b8248aac14e6263a4be0b482d0e22a906bd5363a47e0a485d1844520d0e091b23f55f40eaa2ea75f9c33ea1a627a8f34baab3b32e8f3542e7732a0d16f5aea6a83c1368e5a141dac07c88c98934c6ba4c468216d3e220d1393494741e0ae82c0d129d7d4349673128ec4b824467bf50d2791aa0b32c4874f60f259dd7013a9706894ea3733a8dd1f910a0735990e81c184a3a5f00741e16243a8d2e803146e78f80cef220d139389474ee0e1ca58af41c295e0db33f8c0dc7f506da58998eb56df86217ef705c18170ade02c85c1e243243b9501090b92248648671ab946b00992b83446618b74ab91190b92a48648671ab94f30099ab83446618b74ab91a90b926486486717acd8980ccc383446618b74a390990b93648648671ab940d80cc2382446618b74ad908c83c3248ed71a3e70b1a6b8ff701edf1a38244a7d1d32f8dd1b93fa0735d90e834ba89a9313aa781c2be3e48741a75de8dd17914a0f3e820d169f4043763745e02e83c2648741add8ac2189db7023a8f0d129d468fba3546e7e380cee38244a7d13d628dd1f936a0f3f820d169f4a85b6374660047e9049374eec6e91c68ffbf84475ec0d66e84fd50877b884be186ea9ca7e98aeeacda3046a5b1b5193782799a1b4d52d988b8eb8746d9af69c04a12e6735a2a0075279aa4ae93c42eca57b5e5da204bec5897b23b1a3a4df3dc7b9b22f96e50f99c1406920d76d31923f94e40f2a630906cd0d21a23b915a8f74f0e03c90687428c91fc32d0e453c240b2c1c13b63244f079a7c6a184836d84c3046f27e80e4cd6120d9e06c1363241700924f0bcae9d9463bac8d35243e0296f7f4a05069b477d518952380569e11142a8df6fb1ba3f267a095679aa4b23df11eeb5c445611ba28768afd4121a1a7c1e1d41a6c321823f61840ec592689cdf4115b0ace427077748a35da1fc6891387017acf0e8a0930baa2ce98a67e05a83c2728541a5dfe658ccaf9a0623a3728541a9d346e8cca7f80569e579d5dd8decd2c0dda4a639b590e07fdb0e79ba4b223a372821d681a23acc80eb4827fee564773f9f1e3a3edfb05f66fe7fd58fb5a64c31686b0a3bb2e7109bec024c15d7c757d256b6efeffe9877d1518850bd3b144ac2f1b1cfcaf2c11fb16e8e945d57b1e52d8fdcf6140132f364965f338548a941a1dbdca8b18a2710fe0305d6292c6faec66294b7bb10d34ca0ebe9ad0c3c8c357dd7400c5784b3a9a9650f79c3d6da7933c3291d5e0157640e7d954d6f45c4d685b7e942d4189d9defb66a6e85d098af6a5e9d88cb5922cb25f5710950d838d3af5c62aa0d780277a5950a935da8a3746ed0fc0285c9e8e0a096b2fb91592c17add5885f42fd0d02b4cd2d8d0be99cae7eb151067fbb5094c33a9450d5fa5d404e8df95c139b6d4e0aa64635d1f3b810e5e159c634b0dfa97c676593c19d4e557a7c32ae6442d63216b91bbbb7ba7a1e168ac70bf060af756d3cb142961792ce222f669010bba066c963e8dbda58752189c1679a82932270132af49c7fce61cf6d7b94eb35f96306ac33cb3f47440e1b526296c0028745808f3d1e205a062b92e38074419ac588cf5a9df062a96ebd341654e8ca1dd702f56f80214e61b4c5249bbe9f399f5a30065ac7aa908612f783b40d88de9a8400690ffda0299e3018537a563da0b2dbe63587b79391322dffe6401736da69095515da49d15cb425d33cf00c4de9c2ebb5844561067806b0663420c2ca445470b4c51792fa8ad6f49cf317a39e91fec3266254f04f4dd6a92be76c43f284b49738e809a60b764649d1383984d35b880a0a6295ae781119bdbd2b1630dd5c9718cccc9f6df223659d03d47ab22d40ef99140476f0fce117a61dcca6f21a878ee48c789ad03d26f2b8d91370790776770ce7509638f632350a4ef0aceb92e06ab1a63e7ba9c0ddad877a7c301a28730a7fd5441639a68014dbc271ddb52e02332333d6332434d16ec06a6e8cc0474de1b243a878492cedd009df70589ce81a1a4f37e50836f0b129d034249e76580cefb8344e7e050d2f913a0f38120d139289474be08e87c304874f60d259db3019ddb834467ff50d2791ca0f3a120d1697457636374ae04743e9c9e6371aaa115646c40623ea0ef9174f5573a20cbec36f872465c9ae701196b524680d3be233dba580ddd6cc68624f6001d1a8f0669a3c82126bb7c8d15edbdc050c46341a2736828e92c04743e1e243afb8692ceb9a0b03f11243a8d1ed5648cce63019d4f0689cefea1a4732ba0f3a920d1392094746e03743e1d243a078692ce67009dcf0489ce41a1a4f34b40e7b341a2737028e96c0c1ca5e74cd259870138b3dbe86714397c935c6a1197aee783b31979183715eb0ddadf2f98a4b29b844aef0ada5c42371759c27ed389adcb19e4186426a641b28dcdbf1c07f4f6c5f46c36d22ffd9d1d199621fa5e06f4bd1494bdb08c0e50182bf66f82fafbe5a050697470c218956d40ddfd4a50a8343a30618cca6f8156be1a142a8d4e3730466529d0cad7d233d57f68faab9abaa6aa9a0640135f4fd78a5a674e3a5dc7b3904df62f27615eb7b305d4d66f04676bb021e6a8343699fa10a08d6f9aa4b205a15b885077bb907f349d604be60dae73346615eb009d7c2ba8bb051975838ced16f4076848be1d546a8dba45c6a83d1850fb4e50a935da0e3246ed8dc020bc6b92da3d413dbf80f555e6320acb584d9f4fbc6bc827b13a7f910d97b6c5f8c6fc802b80f6be978ee932f84a20e807f437797a8a314fe067a0afef0789cc302ef0fb1d90f94190c83478ec8731323f05647e1824320d6e186a8ccc5d80cc8f8244a6c1457fc6c8dc09c8fc3848641a3c52d118999f0032770689cc306ef9fd3e20f393209169d0953746e6c780cc4f834466187b9c0602a7fdb320916970236563640e02647e1e8c9dfd0dd6e3c63652ee0b8634be3049631ba2be46cd602137b60ee840a0975f068d508305dd18a1870042bf0a1aa1061b95c6081d0f08fd3a68841a6c581a23740a20f49ba0116ab043ce18a1fb0142bf0d1aa1063be58c117a0020f4bba0116ab091698cd07d00a1df078dd0302e9f1e0908fd2168841a74ec8d119a0708fd3168841aeca43346e83840e84fc13ececb609d6fec38afd5603ace2ed3d371c4fe0925bc7ba4c4fe944ec2a11fa56968d8d8e8fb33404f7f3649643352f5dc0aba9be10ca69f8bd331cfced89ca64e80c45f82d355372494e3eb8d40d1fe35486486717cbd0920f3b7209119c6f1f51a80ccdf83446618c7d71b0232ff081299611c5fb700997f0689cc308eaf670032ff0a1299611c5fff1bb8467f0789cc308eafff03c8fc27486486717cbd3928e6ff0689cc308eafb70464d2bd01027250ac41bd34d698fc041472cb2495e2142b71c40d5df64f17fa5391e9792cab62101bc67d160682c90b1193c48a3ea3d81aea9c1664b01a32765ad02180c88ca0106950238d11b92720b28649223b302267f0944f21c5249fb8a74ed24d4de7f22e38da5dbcc0feed408fb5af453664a139728d1d34425104b9354d922b966c55ed814f64d196c18e10639dc6f3406d5fcb24b51d25d43a9dc494bc32b22fdba16659cc11a4300e186700ddad9d0e772a31df348c9d76630195754c5229dc7ce14e394bb8ff5b2e543f5061d53549a6bba5c5209f0108f34edbb581ddac67923ef5c39bc238d7b30f6829d50f129d46dbf0c6e8dc03d0d92048740e0c259dcf818aa76190e81c104a3aef0574360a129d834349670350d81b0789ce41a1a4f37ba09d4d8244673857711c06e86c1a243a8dae7e3346e72580cedd824467bf50d2790ca0b359ba7b9666da5767d3e8310c86be2be21bf72e63ad7867ab5ea30b0c8ded2f5b061a98cd4d524b6fa61267e3f2f075c035061ad82248057a682867bf7704ce50cb20d169743692313a9b013a5b0589ce81a1a4f30150d85b0789ce01a1a4732ba0b34d90e81c1c4a3a7f0174b60d129d834249e72b80cedd83446738d7b5cd0574b60b129d46f7f13246e7464067fb20d1d92f9474ae0274ee6192cea6441c4642975da5fd1c6063e391f580a7d9211de3e489696318a71c9c01c626334d52d98e78c7c9290fcb095da2ea1f2df71f2c669056635bef8e02b4764cc75c39416b498ca907613c4d6310e819da33284486710ec73d40233b55e7dc22af461a5cc3668ccacf40f5d3d924955d7d3a399f549d4898f89443835a6bacc7b31d28fe5d4c529d53a57ac288ac50e88d1f65872f673b2f18b5bec60eb99f06e8ef6a927e7118cf1032973da09117b00dfad3e4ab1a9b88f8167129ec968e5123a1c1154c6ba97b35969357f41fabd28e04555a5675360320dcdc502ecb3e0050d93d9d555a09f711a8abbf8069a8dcb68ee300536cc843edeb02e65718d4da31a6a8ce0336b58749aad5f75c1a1acacd545b00dded193442c338d1a11d20b457d0080de366aa114068efa0111ac6cd54ffafbb3381afbab8f6f80444c405446db5459eb861b42ad9c88282424220b20512d08a08210bb92421694222e0867b5bad5a57c4a582da56ea5e71e96add97bad4da57ed73a9f6f53deb5aabadb6da6566fef7cffd652341fdcd3d07f391dcdc65eeff7eef993967ce9c653b007aa834a01a8ba90e01a063a401d5584c753800cd920654a3a3fa0370ba644b03aab198ea5f01688e34a01a8ff5fe064073a501d5584cf523009a17c275f2e91a9b12f53dcdaf7a13a01d2b152db52e3d0ded432685365f4e4d1c8d0ebe5f8194163051f6bf7d0fd116a5b5ef59021ea7c210e9db055b55b4c93f614217a5d7cd1c0dd5e8a1121d21b44cf8cb6157344e968994a3d2f7d9082be461d2806af47d2e03a0874b03aad1f7b904808e970654a3efb31e804e900654a3ef7329003d421a508dbecf06007aa434a01a7d9f8b01e844694035fa3eab01e824694035fa3e6b0168b134a01a7d9f7500b48409749889734482175c5bca8237cba4e04d66c21b653e6b172ea26cd2ba702d875d7c693a1d229d83c188bba3f52c9407806b6e0a1325f6e16af49e7837d0322f8bda9b999d056be5d410e98911c4a892724f0717ba2396df80d5b32c84bb38d7e486573e3477f148581d8f925b809aa87868137d3ea09dc644bb9fe91ca5dc689fbac4a72338745b7b84722d609e1ec298ef4dbf77cd047579cc1ab3419b40cbcf905139acd2afaf2ef6bece0fd7c435a06e61a12d03b4334328ab6c9fa3145859d156d4e3c0749a25a7e2bcc65e480d60369587a838dffb3171e7e2fd1a3b1b4e83693d5b124c8d9d0d6700cc3992606aec6c9805302b24c1d4d8d9b01860568670d4c506bddb0dd598721375eb88216ecef6d468771681213f9789d7b5ca2af6015f8dcea9a56ecf7e10e8ee79213c48fdddf1502b81d2e46e344ceba325e1a42616d0701e05388f9184935a1c90867306ac8a5f9584937af44bc3d90c388f9584935a6b9186f32ac0395f124eea469286f356c0799c249cd4a2d4349c0f02ce05927052cbfed270fe16701e2f0927b528350de73f00e742fec145b97dd89d0ba5aa0ea7a9992e2d5f638449015d24a9f0afcea2000782b7bd4a12ce4295384700cec592708e5589f30998ecd59270e6a9c47917e0ac9184b34025cec130d96b25e1cc5789f34d90ce3a4938b355e26c049c4b24e1cc5589f372c0592f09a7ce84ac530067229d01db9d273a3159907652f447d8622e9582325725ca4970acd120052535859586f22390cac630517069c817a245c13d0beb635388642bf7c6755e0ee3b197259fa22f862303e02d0bd1a123cbebeb5ab3bc47175c0477b94267db5cd8e1348768c5d3bbd18331ecd8c3801804e39a6a50b06e00ac2d21a2d9e318a3a80252c274ed6f84ea466355ae3cd0db5f0b31e1fb674dea0359095abb550a488d127918806c93029218294c03b91a402e97029278124903b90a40b64b01a9b1d7d63500b2430a4862a2140de48500f204292089ce341ac8c701e40a2920353a2d6e00902ba58024669ef1cae402c855524012ab69d2403e09204f94d3504c63025f19a03c29449a947b4adf89a563992b250de64a70619c2c0926517fd360ae0298a7488249b42a69306b00e6a992606a6cc2d80430574b82a951012d0498a74982a931837c11c03c5d124c8d19e43301e61992606acc202f0798674a8249dcffd0609e0430cf920453633d989301e6d972fa00697402bf0428cf91d38185a8c969410697c2befcebb20a3517a8ecc0f20cc8e637a401d5d881e53900fa4d6940357660790c809e2b0da8c60e2c8f03d0f3a401d5d881e54900fa2d69403506fc3f0d40cf9706546307960701e805d2806aecc0f23000bd501a508d1d581e01a0df9606546307964701e845eca480c9a6c3d4fa4b2c4b3a4412f6c555f6b77b190d1e2da3c295f888e15d2ca74508510e692d42f68770eb4b9828479aaeadbafb5f3a9ca8d369a5c3cf0319bd9409765fd3b59b40d43aa4d4b4269fe20674e9539bf7836a3cec68037fd365a17ab3c4bfa34b996ebab7bb21e708d12a1cdd0e4ae9f210394288738e7dd0a1acb5b7dca0cd7ef0597ed55da91aeb1380754d08acf152104dfb289badcc94f4e8b7cf3779dcc93f8885750f505d57c8e92ea0f19c730228abb54c945f86891f675956f8c15aac7cba42664e662b936434e75b1a98f457caedca4294569a69b50d4cfcabc2b410cbea8258733efa2e60345d1d029feb84bef57460db16f05d93cecd678971ddd616278f8b891a7c340be5f980f23b210d2397363dcf2750b77b78bdefe98958697bfa51b03e5e1ba2e0441aa6376d755c00a6d03a263cb7dde8ba799ce18d9d7afb22623d579a15b937a05b2fa7794db6ca68b9b3616dbc4e124c8dd172e700cceb25c1d4982fb40260de2009a6c67ca11301e67725c1d4982fd40430bf2709a6c67ca11680f97d493035e60b2500e68d92606acc176a04981b24c1d47884560d307f2009a6463f7a3dc0bc2954b5c284e91ed3e11ed3bc0b3f1abce7374b6a5d53c8d4e5b413c802f008dd220967914a9cf301e7ad9270522d4d1aceb9b06ade2609678e4a9ca701cedb25e1cc5589731de0bc4312ce3c95383702ce1f4ac249adea41c3f928e0bc5312ce7c95385f059c1b25e1a4e6b2d1706e0786d25d21420d0a4d5c193b3ad80db20ba29d8fffdba4f0dd9dce08b7ce19171a4be6266043794f98a0973448226d222f0249bc574a3715aaf79226892f828af9911494b92a51e6827af9b11494392a51be0752f91326caddec1fe5f68f76e342fddd50cbecd3eb4dab573d09b3cafb3013fe2f7debe42058277fcac4b897e91e485d665f32d1c7ad257cc2df443b588d8f00ae4a8609d618cd7914ad00f76752a63b35ba8836dd5f87e9fe7329287355a29c074ae83e29287354a2fc04a4f217fc9c890afff29e134f1a3cea49f6be6a7b3b1ab8d4fe76cf24c666d2d251f680b5f3fe303dfc0aba48abe6f3c8f9b07d7c80896f38e8f5321365f154fa8cde06d5bafb0b00f0c110e950a93cf3799646b1bde81a6f53c6bf27d927d7db1775785bb3ddb4b24d779a6c9e01681f928a96ba57a7a1bd1b56cd87c3649a156d45ab662ee8f34798f846c1aab9f9f4fc79fedf84a9f3ba5cf77e681d4cfc47d97bf6cd599ef127a5a64b950c20611c0906fc6321a41431462b6885b541a7796bd33945a2fbca8dabe4b1d2cbeb447b0509436d0db62b4b4a3b6011785caa7aa2ee9768ebeb53b0003c21152dd5414243fb2e68fe5f32d1669acea9a94e4d9d60277fad77de45c3b8cbefb04354836f74ebeab1fa182c124f3271efed714ff52badab33536dff8fbca5357ea8b84e529af6ff345b617b90e7a7e4d48bd7d859f0f7b0ea3e1dc2eceaed54bed8afb5addc295fcb32bbf68229ff4c3afb0a066a41bf7120096403d8afbf0a13da90137e934acbd9780fa6f3b3a10bf5f4df8c22ae943423ea4e98e2bf0e915bd4b9ac5474b49c3a6cd6bddb3f1434f873212a7522ccbe0d26bd60ab01ec6f4215918c06e9ade85980f59476d2b41faca7ffcdc4b98b897da60bfd1deecdabbcc406424853491b41227f2ba7b2a1c662157580f27926ca7db60065857d4f37c87233cbde8a77f46d5cfb7309cb901f055afe8510b5e16357498b7787d46f566635a6640f0183fe77614e9df2c31bf4033348f80e0079fc9f50a74e1883d71fe79d5e73e94ad0ef2f863097fadb0aa24865ef97bd00e74b927016aac4390c70be2c0927b59b300de74fc07c7a4512ce3c9538d701cedf4bc2a9b36fd65f00e7ab9270e6abc4f90ce07c4d124e6a65251ace6300e71f24e1cc5589f34cc0f9bf9270e6a8c4d90138ff18c24d87b1796e975491dc31e9dd099d0a08ff2f3d274751e058aefdd76d2eab36fdaeb48335985abfd5244ae73b2c9f920117c8ff33d18e369d7d4a8b4df7a3b72d0923d37748570ba85f9792bf44d5f8b4c890e7c0f3f4272928a9da9e86722848e51b525052353d0de55b20956f4a4149ddbfd350568354bec54439a207a3296e8be7cedebba6356836a3ce0497dddba19b8f750559ec75f9b23096294d4e8f00a4ef84b04c3787348a1ba9b29717b099e3212cb4ab01edbbe95c4d3b9f736aec7db00014d39f436d41a3f37937d08ae4240f70d6398475d6f9bc49217c2f8442c2f0869ebb0c06eb9f45833a0ce4f22fe1aa78d71857a225d5b6b92d9474d2d4d0bdb056be1f6a82635bd12a3fa0664d5e08083f08916ce010d67a1bd35d6afcb0f688ba97619dfc6bd84cb99e57c929c917045b2d27b3d06601dabf494d42a43a4168aeb95760f27f28152dd5294243fb2148ed4752d152bda034b43702dabf87d0face9fb47505808f0784ff0853ad290dd56a6925070a00dfc74c7cbb820436f6e092d35cbce50e503e9f8491c1bc2e0e0fcd53f86d90c17f86c87deb5f0e478eca2c8e0700e6bf24c1d4e876fb25c0fcb724981a5b8efe0260ba7711035363cbd1fb01668624981a5b8ede0130074882a9b1e5e87d0073a024981af3db6e0398db4882a9b1e5e8ed0073902498c4aa5f34982f02cc6d25c12c5208f325803998093372b16d2e92234dd5bc68a742fb00daed9868fb5ff993686fd22a7f1e0be15c439818fb8ee588866af428893b745ad58fb57066be3d13655c04604b728788aa88969f7118b8df76900694a88e68400f07a03b4a034a747dd080e601d09da40125aa231ad002003a541a50a252a2012d02a0c3a40125ba8e6940c701d09da501d598853906800e970694e80ea101cd02a0bb48034a7423d3806603d05da50125ba9269407301e86e9280e628554a39b0f5fc8234a01acda66c00fa456940351af66300e8eed2806adc7a1e0c40f7900654a352fa0a00fd9234a01acda64c00fa656940351af6fb03d011d2806adc7aee0b40f764028de33ba31c7647a1c20fd562342766cd01337e2413df28f359bbc611a73b2d847b2648e77fa5f368ae738216d19c5fcf4239064e39f70ab172c6b594ea9227f0355d90e2eaa9b10ac8dd209ba342ac9cae3a77f0ec0cda51f1c726856f6f7e5cc8a76db843dc68d27236ae07c9dc27445c48f6a6182657ee1ccb9b0790505a459a174042f7952ba11afb6afe1424743f26da2daf1eaf314ae460b042f79784b35025ce918073b4249c6355e27c12d6d10324e1cc5389f31ec099290967814a9c4360b21f280967be4a9c6f81741e240927b501390d6733e0fc8a249cb92a71ae019c074bc2494d94a1e13c1d701ec2c4195758c0ca5e73fc45b49b46a3bb4a672528a0439910879954998ac0f515687bf4d920816342efd17baee9e5328e9aecbb36fbbf9679e924fade076690d02e04877116136ddc33d34dee12fba4663b6eb9c1e679ae49841bb0ca0fb0caa45ae8b58598fa34e91d07d29b1d421df5a68c26d997361b977754e51d77d4ae6f349c7b81c4e648c249ed4948c3391970e64ac2492d8846c3390d7c9e79927052cb07d0703600ceb19270528b4cd2705e0438f325e1a4b688a0e1bc09701648c2496d404ac3793fe02c948493dae29186f359c059240927b501290de7fb80739c24af5291ca38f903c0217298249c852a71ee01380f978473ac4a9c8f9814cef19270e6a9c47933e09c200967814a9cdbc0643f4212ce7c95385f03e93c5212ce6c9538eb01e74449387355e2bc00704e9284935a779686f344c059ccc4b9a7e91c21ef38b41b97bdd13546bebbe753dfeea8147647254cac0776c1dae2cf926a2c0f97b5117fce542f237c337cab89f656ab4f9fa126269c3390047c02f8ed273381c78dcbaa4dcfe52b3b6f45f59dccef09c654a91490c438111ac82f01c829524012d7521ac822505153a580d498bc7508802c93029258328006f21a0079941490c4520134902500729a149044339e0672075036d3a580249657a181dc001239430a4862692a1ac8dd4122674a0149cc61a7811c0e20673141ee6efa727874b624359a406f02cc724930351ae66f01ccd9210a55f46f87a351ed3c0428e730518e369dfd458b4df7e4ea2de9d24a434d4bc33e063c45154cd459a6abc7b33790bdf7caee1e571fc85177080bff17017f658815b8ffe1dffadccc53c1cd3c57124ca2e79306f32880394f124c8de1618500f3684930359e268d0398c7488249f439d1608e07985f950493e809a5c19c00308f950493b809a0c13c0260ce970493e811a5c13c12601e270926d1074583590c3017488249f48cd2609600cce39930479aee0504a6fa92a9a5f6df84c758633f6fb31fd8e5c307292a4003db6e526017f26399a6db2754fbf46cac3c9bb68e9bb47ab48301eba2101177bdb9f970387adfa3c12c9c0530fdab9838e312aaaecc4af0e217b4c6a53b00bec54c7c43fda771ab6583bfcc364f6189afc3e05ea4cff3b91b4ce4ea10fefadeb478e7894c34d56993783648610d13e596b786d2597ef2cf7000522b0da8c69eafef03d03a69403536de7915802e91065463eac1eb00b45e1a508dcdcbde00a009694035b6d77b17802e95065463e39de701688334a01a5b43fd0e80364a03aab179d98b00b4491a508dedf55e06a0cb9840e36295cb4dbd7db86d8be298a8b99bb4fdfc1580b6592a5a6ad2360dedcf4d0a6d4b88038ffef93c0b987629cd59f221c8e9d724c124daa434987f0798ad92606a74e3bd0d30db24c124ae993498ef00cce5926012ed501acc3f00cc7649308936280de69f00668724981acf2f7f03304f900493b87fa7c17c0d60ae90049378864483f931c05c290926f1fc8806f31380b92ac46171ff32e534960b7801509ec84419b726ed0d64fc49a94188b4c88f3ac81c3a29bde10bd1508d1e25d154a7f5215e03e10b27cbf272ea6cf7782d4cf153a401d518be7003003d551a508de10b6b00e86a694035862fac05a0a74903aa317ce12a007aba34a01ac317ae06a0674803aa317ce162007aa634a01ac3172e01a0674903aa317ce152007ab634a01ac3172e03a0e730818e32dd379dd1297b852931d37c3e91ab961cdd87194713ed15240c35199b965bd40a1bd1af33f16233dd0e9ffee23a6b2e4eeee15ddd647a4acc7a16c4d52605f11b21328af23cc6c01945b48a34792083df4ca75f69967dc9527bcb55eea6fa9568927810b8e8cee57be0ab7d8c917b7377a113ed4b56da5bd55b49bad66898d6e785c8bbc43ce1de925be9d9c13455930f38bfc5c439a2079c95490eb34c9d455be507aff06fd01202ea6816d47f01d4f3c324b36687573db493a173c1babc2044046777ebb23f319cc4bd3a6df59c045afdc2105abd7f87c11ac3678a61927f3b44c18a4f13674c3ce4a0c9e87500f622a96089c771bcc878007bb154b0c4a58006b602c05e22152cd11142035b06602f950a5663b9dfc900f632a960351a58b900f672a96089c77634b09700d83552c1120f9869609703d82ba482d5982dd70660d74a054b0cdaa1813d1ec05e19da3fd07345fa4aef6c711bdd3a3f5c13d792bd8585b6145cd5578538d84377e04cfb7b85bde52ebb23e9695dee657599294d7ab36a433806699ead07c0b3753513ef4ef68f39be9ca53b1d9d655fe6a4353edaa381a315b11c0953fe9a101ed5b1c913d1464b22d859286dc55c0bf8bec3c4d7b59f71c25ec43cc0d8fbc11e717b4a3bd84bc06a79ad1c6faac62ca5a520a1eb421cebf576dcdcbd018ac61628e34132d74bc259a412673de0bc4e12ce6c95386be014ea7a49387354e23c0b70de200967ae4a9c1b00e77725e1cc5389f33ec0f93d4938a93975349c4f03ceef4bc299af12e7db80f3464938a9c50668387705436903df7f94f20af51c4296a6a61334ff91db07c6787fc0c43bd4a4dc736ef7de18ca054293ccb3c1f57653883218bd4df4ce7b75aa8944dbadef06d3fc66493035d614d90f60de2209a6c6aa8a3b01cc5b25c1d45855716780799b24981aab2a0e0298b74b82a9b1aae2b600f30e49303556557c19f6403f9404536358f82b00f34e49303556557c18606e9404536355c5a73cccc183ba0c5eda6df062ef8870ae886a13c75fb4d9fba718975258eb4154dbbfa79b847fd5228b63befdd9b26f6081fde9e9fe8c8c61f68a269b15f6f2dcbd6ebc1a3f76937dd45d599bc9cab24fb9cb09c4ce4981c8f467a4132d7397d838c7d4fa775f695fe7aeb9c68740c4fd3ddb3d924c5f18aedcded76e5c90847b079726596f1f759f38615641fc4966c6769e53ade9481270003393d7da61a264cb9e522c333deef2a47b27d38766c47fc50119ee7573fd5564fa0884127babce5f59a371fe0c77558e42bb7fb61bd325044ef7b2e5aec4752b9de5afbed68eed9e91f28c64660c493e37fa6ea26fb02d7925bd07896466ecd8ed71f79d461d51333376f0f3a7d97fda3acb2295689a99b18b7d2cfa3ca97b539466fb608076ff1e437bb8b619fedbabb763d724b9976ef2ecc4ef30c8de5b9c744db479b1cec8189e9464f78c688c2a3b4295ff5db9e9738dc9b64fcb70798f5194dca19be2e322c96fb23fd15ff1fd7d8fe9e478f3a3dded8435a3e7d5abf1739b817d7da268d170afaff33eb15a3f6a599f9fb4efcfd7fb6cde7133dfca981cf75d6ccd9fff1efcde078c71e1e119d99f83ecf57d45f7ba771e40d2979da79f78792ef76b7a8b7fa6bbcccf22cfdbfbf51bc74bf8f71d932753963fbfcffea3ceb23cf6d3caf2965fd18f99b21c8d16854e77197b4a3f3e5dcfdf43d7cf9c7a564b52f3c7b280daae6f1223bd9dd3fb6813ed5f4bfc674df8519b4cfc9fd391d1cfee5e77cfb5af8d5613a7db5bed6d37de076503cca0ff007c028e97de2a0700 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/754195db25415454eb46f7cab9b591ad.asset.meta b/Assets/SerializedUdonPrograms/754195db25415454eb46f7cab9b591ad.asset.meta new file mode 100644 index 0000000..22f63e4 --- /dev/null +++ b/Assets/SerializedUdonPrograms/754195db25415454eb46f7cab9b591ad.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a5e7aef3eaac27d4abd6bcf414a14615 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/7542269b29ccb314cb24b62fc63c7ea2.asset b/Assets/SerializedUdonPrograms/7542269b29ccb314cb24b62fc63c7ea2.asset new file mode 100644 index 0000000..43c4164 --- /dev/null +++ b/Assets/SerializedUdonPrograms/7542269b29ccb314cb24b62fc63c7ea2.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 7542269b29ccb314cb24b62fc63c7ea2 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec5d079c14b5f7cfecd17befc8d14fda1d475740cad194261c8802c2c11d70701c78773445454505c5de153bf686bd616fd87bef8abdf7aeff4926d9793397b7bbd96cf666f8fff023c3ccce7cf3f2cdcb4bf2f29244b289fdc7ea65ff35934c23a3491f3283149215a4d4fed768fbbadcfecfb913cfa79232fbbad8febbc0fead17c98cf325fdd3dd6a65ff3dc1be2b2715f697abc842fb5acc7e9f4e8aec7f4fb0bf2db2efe8d345f6ff45f65b5635fba319248f4c2193494bab791c8899eca372fecca2f9b26ad97f8f22ebec5f8b985034916cf6534bfbafe9f62fe5ecb7e5b6d0e2bdd9642ecbd672fbb785f63765a4c4c65cc0106b159e42d83f8873e9c1af3df9754ffbffdafcdf19fcdfb5f8bfe1fbd5f9b55782eff706dfd506ffa60c5d12e3fb3ece35d2cdbed6b01f1f04eee9b75ff3f7b21dbcc89218587df935975ffb71ccd909c85f935ffbc7c96f2c8c01002b11ce6af1eb207e1dc8e59d9364fa431c8eacad008f72d91dc83308a45d1bfc4e9f0dd6c8bb28c72c5f396639e518399797df2efefe5efc3a945ff7e6d8f63b4d4bf8b361fc9a1347aee1ce774c7ea1b3769a192bf9fd3efc3a825f4772d97a7059e7827b5d5944998ee2987bf2340e963c17efd3dfe7f1fbd1fc9ae72baf31fcbdf9fc7e6c82f224a27f42a69e3c8d02706ff3586d7e0c2c51eebd7ce5cecba0daa90e8fd5eef2e507e89f14771cc75b90443e7afbf2d1db91a57a96f7bdb83208fcf11ca70fc75d08ee29ee998a79abc6bfbb8ddf4f20f16d5b8f047e9be8e0d4125c4f72d2a9d1cc795e43d435a1cbfbc59153946db6af6cb3396e09c715f99fecdc5b82e7fe00877e5fe8c3cdf1e1e6705c6123c62628e7147e9dc6af33f8359f44eb71392f43b23fbf4ee769f6255e1b20da90a9eeb72d6629f216ab8c66faca3a87a79b1b07537c7f00bfd64ef07df1ce2c0d990fe4d73a09a659875f0fd248b3aea30bb5bef7e9c2a43898b31d7e6b5500196c9cdaebf9bd685b7979136e9723037c7a20daf2587a104f96795c1602cac096a54e237e3f9f5f0bbcb290053e998a52275344f48916817b7aedcf9f2f06f754d6a94e3a751ee598dcf611519785cc50c614cb4c1639dfd5af07742391ef62e9d762277f75731cecbaf9fcb9a89742b6035db96be5816f851c89d487a59c8b413e8e07711904b7cb7cef2d01f7f43ad04d8ffddbfeb69ed0ad3ee039fdb618dcd3df8b13947539a9acb3146708487b084f9bdbff7aa7f2774b49e5ba27fb965e415f93fd9be2bdc3bf5b412ab763e23d9ab7a5e09efe5e9260de564ae4b3d3ad3f22c6b78710affd39c0d5879a2ff067655c9ebd88b76e893eee00f71b4bf427cb9dfb8642167e8d88bea7f8b72d5f03d19eaee2d77544deceae013cf0fa47d6ba69b713f2ae8e9196a8d787faf2bdd8c5a9db8acb2eecd861c45b67fcefd267c2fe6ee0d763f8f568f7dd5542be23f9f5282edb50e2b1cde408f09c5e87f1df97817bfadee12e7673a1a31b7db2cacaf3585fde653620969e1de7bc5b21d23cdee1b6e156cedba33e192a486cfddd83e76b38f1eaff708efbb383db68047f7f13bf9ec8dfdb0794b3180b9de0e6698468633703dcdae0df89c8188b8f939d74a2fdf453f855f0930fb0f9b82832c2952fda773b09fc46ef791f8e6c219e3627a62ca7f16bfd38f9e901dea3d7d335f21febb71afc7a16cfdb48e21dbb8c74cab8f1ae1858673b3cb5eac2efcf71be69f233bfe763efc682b7f3409e681aa35cae1b89fa713eff6d34c8f716fe2c0f3ce37dffc818f759448caf2ef0954f89eff7ad0043f6fb854006d9ef17f1e7bccd6a3a953fbfd897972d3e59f388c75e08ff14cc6b24cf9776a942595ecabf1deb2bcbb14eb934dd1e03eb327959367b90df5fee2bcb6dbeb21c2729cb2bf86fe341b9edcd9f4d9094efbe808771fcb72b91b214bf5f057065bf5f0d6490fd7e8db72c9bb7e3cfaf45ca12ca0fcbf2baca7965efc0b45724509637f0ebf5fc2aebbfde485c3b4e715726807b13bf1e1e03b78f0ff79004706fe6d7ed31706f41e44d263da1ebc2e7b21ff1ea3abdb7f5b6c5d61858b712a9aeb7149cdf46bcba7e3bf1eafa445259d7efe0bfc1b101b70b91c9a4b2ae4f017a3291ff76277807eaaaf8fd2e802bfbfd6e2083ecf77b8847d75b8976f15e22d775283fd4f51d95f3cade816997255096f7f97816fc8afc2d06f776f9b412f289fed1398057593af73bf86b1ee4f70f70bcfd397e39b8a7d769be74a7f174df71705a8b71423dfe9cf77f5a0b7fda833cbdbff9fd43ce7baddbf9de7bd8b95ffb0cbf7fd4c7ff633e5d01fea4685e1e01bfc1bccd20de3ec9e3fcf94c505633c0335856a25f188fd727f875a78fbfe91caf02dcd3f79e72e55f27faee4ff2eb69ee6f8dc56fa27ceb01399e96eb0a93159499721f49e4f999387956b1490710af4d3ac0d183b63931b05ee0efe4c778e7257e7d995f5fe4f8b388771c22ecee2bfcfe40dfefc2afb6dde5bef9e7400e814dbf5915431e91ff57f9f5358e7f10ff7635b8b7f3d66e969356bbf9fc2ae47cdd87f3862bd7611b7cdff44a401e13bfade179994dbc3662b693b7f699c4abbbabe3e8d39bfcfa16bfaee5787388d71f28fc86b1fc58f1d28a91afc8c1c4eb3b107eb5b7f9fd5cfebbc8ff7cdffbf3f9fbdc3646e6f9de5fe07b5fccabbccbef0bbcef93f7000ebd7fdfcd5b448cc33f00cf781d231fbafc74e07dd3c8426fdae423e21d0f8a315f217f6f2df80e72207e5fc7ef8b7c795ac4ef0f05f7f4bad8872b6cf23bbedf05ee129fbc1ff3eba7fcfa899bc7c3de00df003ec92e2f664c9d7e9f6314f36f0e03f7b64e77f8200686f856f80496718cf5e0dec6c8e43e9bcc18f53652e2e36f29784eafcbf9ef87837b8abd21867c5cf648a92f6fa5fcdb1d097ccbfbeb9195bebcade418bcfdef582b06d667fc2aecab2843a1b314af4c52aea24de6e3efc8215c8623c0bd2d43c74bf87b5f10b96eaff07d7fa4f7fb4ea2cffb25bf7ee593ad9c787d60dff0ebb7b84e92ef7cb257b8ef44e5fbda279ff0470ab957f174370039c4737a5d4dbc6d1a6f6b08f72945d6f87e17f64536c71eab8e34e7d71f48d23696fc08b012f1fdb4e0d79f34d2fc19602592664b7efd4523cd5f015622690a1fed6f1a69fe0eb01249f34f7efdcbd1814e3b41f9d2eb1ffccafbf0116abba91e1d05ee4599723dea2ce687fee1d77f636347d671cca3c13d8619232ff49fec1ae157cbfdbe3ff7cd5bfc1b8bc755b1c831fece00eeebb078ffd5e275d3aa0970b8ffc412ededa15cf663c0bd287b213bd73d4bccc73621ccd674e332450ee3181b9df7bb8df7cac87eaf0dfe2dca99e377e16d9e55d7b9efc57d0f161f977513364df4c5fe8bad1b16f7b55a0d62e4bf21bf36c2b98ef6c7e2a417533f3957597c2c18594f3c6da3d598733c14fc2e6c05bd3f9cbf7f2cb8b7f1baf37ebdd5845f9be2799572d48ce31d05ca8ede6ff0ea038b45a4f26d07bf0bbb42ef8fe6ef1f07eee9f518fefc78908e784eaf1b89b7ce88b1b25f2faa3b4d0893a5052263cb24653c4a2ea354375bc9cb2f5a5e3fbbdf74e6e95badf995fb0bba08ffd46ffc795bf79bdea2eeb6e1ef88b95a51fe9bbce5df738eef7de1f73f8278fb0547f8de6feffd2e72247f7fb3a31f11fe9dc5e78a501b42eba9f8ad431c1d84ef66f26b277eede8bedb8b8f83accefcda05d769ab2b895d7f619add487c7bd05d018fcf975a7bc6c0eba180c7636aad3ecef37ebccf63f13eb6c56362ad6c5e66c7126f6c849867948c29ad9c3872d0677de3e407ca9a0bea186c37b8cecbda8d986d5e3fa00714e7388e7b02b8a7bf4bdab998b8c2867723aeed167175308e95b72916f44da9da78ae5f91cdc4eb4bd8ccaf9b8877be95dedbf9e95de8e4a7f7462017bd8ef27d5700eee9f57857d6089f13eebd9d6389b67a80173302e66987968067f4dd81000bda1a8e9d23b8e4752e721a7fef44700fe53ed127f7890e4e1f3e2688d6eb36713897955757ef6f91d3795a5b24bfd3e72781f7e8f524fefc64706fcb962dec23c7b5784c88c5e34c2c1e8311398378ebde193c3dc938246a3be3e4332adb291cfb1470efd761a16b27fb74ed649e8fbb1c194499597c7ecb1a2acf8f35cc97af0da9cb9735dcab6f42cfe2e9498ee8ef75e5bf9faaa837c23e08dd17f32fa7817ba80b8bc13d4dff6f47eebe225d1eeb608df07218c557d0097f1d67f7f4db83157586e7c11a09f402ce1189df4711778e083e1fedd339a883429f6a837fdbbce4cee769095b7d067847e0e6817764f28c01f2d8bce48a7eacb0c3e3bdefcb626fad71be72980ee449b46e8ab1cba9923c8c04bf813ca4aaec62b65b42c727248f116dd3f6d5c0107dd76c8dbc58002b91b13cef935a1a71d1564d8095489a6df9771335d2ac06b01248d3a273c5b09fc7fb75d1364dc4b11c0eeeed340688f94651be71e2562d3edf6bf1b95c6b9afbbec5e7a5ace9245a37d6f3f94b6b7f27bd815d14d3e3f390d64c7ee531e691b388770e848f5562cd81c44b2b26bf073a98fd0b813ed1dfc518e96ce21d539fede47790b00d3cded412ebbd64f643f41762f5abe7cacbd98a13436f1d8c7cc7fd4291737cf2f3788741dc276df1b9166b7e0cd90a9cfbee839deb90f1beb4f8b76cbd154ceb5c27adc1625cb1200e0ee727729e0fe73c0767c808fe1e9fa3b144dca85f37047675f00db7f3d6221f5fd8b8e97ce26d1fcec7f5d05a9c40f90adf408c71939079308f19b38a93d38998fabe4c8e19b52717f8b8bfc0e17e2f318e153a8d710febe5d238babb3c01de4ae3f046bfe1be84c856e2eda36de5b2ffee7dcfe23148d60ae26db3c5ef62be84cb17b569f1f2c3e76d2c3e5f618958880b89d7a65da8cf5dcc325e4da47d696b55f298a29f1ced0b8938c833c0bdcdf550d10e88b191988b3993cb34d58b17b998ff7e16b817df25d2260bdfd0c038efc7e26b2dc04a24cdf64e5e87893ac17df896f0f35de2e2b07fd36f64b1cfb16412f38d9712af4e5fcad3ae70b086895837a137c07f2ed5513e876809dfdd31bef2b8cc95333af6bf8cbf7b948b1dd529104bbfe141fe6c03e0556089184161672e07728a675700fc8d3e19aef0a61bb99278c783573abc8cc8f4e5877f17b98a78c77557f978be9aff7e36b8b7f186f3f8afe1bb9ceb3edc9644ebc135201ffe34afe198e7f06fb83f761fbefe671f3e676a715b6b09ffd5f13ebc6d9232d996c23211f62d8eeeb032a3bf8d02f7604c23f21dfdfd0af03be5908ff72cee33b2b8cfcb3a21bdf98de643d828312795ec1a78e17fbc9678ebeab54e798fcc74d21f2564e3be304bf895aee7df9dcb9ff371b525fc5137f878be017c47afd711af2fee3a9eeedfdef72ceea388dcc4df3f0fdcd3eb76fefc7c9f7cdb7d725ee07d6e81f1bff846e4817103eb80783e0adcc371318c3ff5f7b3b06fb7c6495bf81cc51cdde6d87a1ef559085e2f04f736af797c6ed7e2b89688f1bf99bf7f117fcefd24d619e0777abd8578fa9671f540b48df1f4e0469f1edcc8e5ad163e3d8888b871d9782a5d7a20ec521790afb3132cb373f5ca6ccc5de12bb3681f44c410db65b6bc22ceb78996590787976962bc769e2f9fb723e520d614dde12b873bc077f47aa7af1cee74d21b37c2fb5eb41ceef2958328afbb9172b8db27e705dee729b5a1beef23b72a7c2f191b46ee01b229966334edd392fbdeaf074c16580eb711afffeb36a7dcc68bf58e621eea5ee29d87ba97ff3ec887732cb817f28bbc5fe02bd3fb119de379893ce0d3b907c077f4faa04fe71e74649f709bf7bd685e1ff2e9dc43fcfa30a2730ffbe4bcc0fb3c303a27fb7e87a6ce3ea2a1b322ed247536e53aff884f0feef3e9ea7d8edeec27d608099d7fd4a7f3a24e0c8a8123f22fdac54cfeec71f719fb374def7787fb89f540be65efd2eb63e0d963cef713b91f70e244902ef6aed8ef45f4b55fe6b25feccbb3787e09c716be34de87b378df2cf24465dd8fec24f2faccd3883ce9d559762fbea3d7a788b73e3fe5c83e69a3f7bd68393e4dbcf5f9697e7d86c8ebf3333e392ff03e4f69ff8baff3b126e398e9aee303b89e58626f8667c9ee53c79f7574658af045f23179bc3eaa7509bf5ecaafdc57131d8bccf5e9d073888ef33171e4799f1e3c0fbea3d7177c3aced72e4d5de27d2faae3622dd179e09e5e5f4274fc259f9c17789fa754c7c5fad5a93866ba753cd9b16ed0f439e13196f0f9f8faefd136ea0ef7fb4a7d76d1672b00f7b62e2edee2c316dfbde2953122d6c889beff62704fc71a6f386532ed03e7bab8d0fb5d349e42e45d8c4ffddc8abc25ab4377687eff8adef78c47957af58a17273a56f2d99ce81ceb3dbeefef01df59a09fb209dcdbe593ff8ef7bda8cd117dfdf3c0bd95c0d84cc8a93036fbff56b6fe1821653b21d24bd64ebda2f9fd1d9adfdfaef7fdee96ff685d173162aff2df4f07f7161fdbd606ffb6ebeffc11de34d0f1b4984f89379e7e8c78ed041f3b1c58cdfb5e18c6d3511ff4cd2e66f4d92d804bc17f1e78ff7f6d11fe7d474df96f51fbbe525bf808a2e357f2df1ff57dff28f8cee2e369a8e37c2c3efb73ef7b511d1763c5f3c0bd95c01853c8a930c6fcffae5baabae1896f8df53e668b457aff6b8baa86bf8e9adfff3fe7df336604e32b4bc4665ce3fd0eed1f5ccb7f4fb27f50d0c5fb5e18fa07a25d81fb18febfb6c720e63f1ae30ffa4effab9b8af9f7f973acab01a7d076fafd8b58ff46ec919764ffa670a7f7bdaae8df68c730fcaf8e261fc3f1bffae81d77dfe1fdde13df407d96229e782cbfc6f3c3c68a451531282276e535172bf21a904f25bef546e7dde5626dc04d84d5f325fc3c8925f3710c4bc42d768991f6668ec7f73f5e22d63b70fb65f1ba69f139cbe8d8fa75ce6311b8a7bfcb62b563e54facbf113186b2b8cb58dfdfedbceb3f57a398ef7f5e2c6247453c04f7715a620ef53de2b1cf91f762e443c4eddc1e5b472ce18f7d0b94ff5b8e5c4bc53a4acea37527f89dca7104b8a7d73701c69b1c63a5efdbb7f9b787817bf13e7dbe14dcd3eb1b00f30d8ef9a80ff31dfeed85e05ebc0f31f9f72522ee9dcf8d5bbc4f693dc8f32b5b7378bfb7ec89d81bf11cdfefa2ee9f21ff5db471957c16e2fb4b41dee0ef0f79df8beac2a53e5d90c5d6dd09d2146d96e8bf729b633dea7eb752c4438b76399e0e417c2acbbb5cb6d5e09ef22efa0f8fa530edc7f955cc6deff0ca12d511c1d7061f5f1a752766fcb058477053f218d639002b81350cd6535e1d8cbccff35c00eeed7228153a2dfa47cff2eb735e9cc8a7c46b373f4d80b39d71ca4bc4577cc0b117837b2adb5a07b754d4f1e7f935460cb16ada30f633f21197e350700f39f89078fb7f9ff8deff846376e6f7bb7c9cef72f2b542d4c51748e53652bc571bfc9b5e3f06cf3ee638db815c30dd8f89b78f2ddee76d64743d401c8e3cb8c256bce8c390c5828ab9fc5bbdfc59221e66be9a1c31f5fc150987765e57eef47262bdeccab992b709d6abbedfe2a525c6329ff9f4f53327cd43b21cfc43c41a28a18b8fc4c1f7afbdfa9ce39f01ee29fe25c453a7a37d66bef6aa4cf0ff1af1acad88ce937f41bc63b781e039bd7ee9d39b2f9d74a3b8af7b712bede1f035f1d60fb10fe037404e288fd86f50eccf7199ef793ba0776ff8befdca2dcfe81a92afbc7259622c2ada4dde8fb0de4a2e1f31d7d6c42b63d933beee3af2ad4f9fbe75782fe7f6af9c97bbc5fb47647aecb4ac777df8df71fccbc13dfd1dacab11e7a458bc2db43ef46278f6b63c8ae37cef7e1fdd1f92db2beb03f7b763c498e71df01dbd7f1fe407b42dca36e023271dff9eef1542263146027be54879fbd8c1f1eff1bd2a531187af25137b805b9f3af7620f704bb413628f09be8f68e4072f0f9698f3f9d14d2ff2037846dff5efef1d4736e9b3a339e64f3e3dfcc9c93fedba51f9578b7e8cd0c3a3e2f020faf33f83f7445a602fcaa8ddfbd57d16f9053ca3d7dfb86cdbc0bd2ddb9a8d3edcdff97b1781b4e9f50ffefc0a702f6c0fbdff93ff3ec787f73790e94f9ea6686bbef0a5f117c7e06bb0d788f5706f83df6b0339c5338121be05e9b32b7d7e252f83a1de34e39581b45cc47eb00fa87f1bf987cbb308dcd3ebbf3eddf9d7e16aed5047eeb5623db9d0d38762a72d702d6ed323ff71fc35e09efefe35c003e38c44f3432f303fec1ea46b89b620d69ecba27fc3dbad8c08ffe62a704faf969b67eb5bfe2cc37dc67ea7d76ac4d34e0b1dcda80edead0edea5d71ac4d3d764f7f66f870df5618bef6a128fbf2983ef9562f1b621a316ff9dfb85451dcda80d64a8059ed16b1dfecd35e0de96e1d0118e0e1cd60c49ab2effee74700fd3acc77fbf16dc53dc9ddef733eaf3f7ae03f782638873bd17c72f57460390c706bc0c9e8cadaf8257d18760f7c05fb76ea3374ff1f062b677a2fd147bcff2762ea321f1f884d83dfd3d51df166f972cbea77146235fb988331cc0f844792c2cfa4b1afb1f5bbf3a79e927f6dc98c0af3fab635a7c2e29a331f1d82f766febc67abeffd7e1627db2d8af93db6d8bf71532da7ab98fea2ee8c36688fd857e07cf44dfff0ff799256cdf9f6eb96d147b5c8831c5feb1f32af265fdcbd369e22b4bbe576c4653200bdf1f23a3998f8b660e1747d472643952c430731b1ce1f62d62b9f21e9b2f9783becab04b10399bfbe4e47b746780bdae33f8deaf19ad7d72b6e6726ef7ca19116d4a35afbc812fb304b8b0f8f9c419605feea84e837db3056791eae03b500ed1df6b000cd9efa2dd58ee7b2eda82363e99db80b2a90dfe9d001f31ed8818abd556c788f0bdabd95e03f41eecf769f17e57c61e6e396ede029ed1f7457bd39ee7559ceb25dae90e008ffb183232819ce2bd8e80938e00935e3b116f7bdec9d1ed63e67b658f7ed79978db73eef7c8e842bc75a48b8373f4834056c027bb07635f2637cc4757fefbb1e09ee27571b83a6630225f37af7cd1df337dbf8bb1baa88b60bfcf4a98ddbddf08ac685e3289a70d8ecad61fa48961779363c7e341a411c501e52e9e45e5ebe895efa87c6f99b03d2e54dbb30f384616f1ccadb07b2a9ff065f03189f57eec34045e84f7a522bc3f94b127c7bf11dcd36b0fe2e9bb6688fa2a74be27f18cb3d8bd2dd7c61d3e9c5e3e1c71c688e0ae37f1cca746bf13fb7c097ff74d0eb71b5ff0e6275ebea57683f7a722623f2b3e86b4b89dcfe8433cf30aec9efe2ec69631ce4d636d27fd269bbf5b0eeee9358778eb718ec3dbb17cfef338111fdc985f9bf870c519cefeb60e9ca39c3110e4a736f85de43581b62e3a9627b1f98d88be86c85f5f2e5f05b8a7ef3577d33841ecbb2efaebb93e4e721d4e8ee3edfff1c25f2bdaa856209f621cdeda27477f9f1ca2bf2ef195455a7a79137eb18cc1c4ebc791712dd2db0b3c13f6290eff1962bf5e1dfedb9084f21d69e7a67182d8f382f78932fa0199f8dedd19e2acf6c5e0de2e934d85def7e2cac7dbc1c81e9232ebe0937d904f76312fbb9b959994a77a3e79c559a967807b9bffcdc2172afc5d755d39367fefc58a88f1f8b98ab26412b7ce5299843f6428f1fa43840fab932b03dd0a893deb48dc3aaeca453b5fbac37de9f273a73386015d12fd24709e7506efaf678cf0f120dab091e0dd91e05d7a15eba70ac0bdcdff96477dd8e2bbd1c4db6f1bcdf3207c237944ee87190364c803cfe8752cf1fa61c63a329cb8d3e17acb5624ad71c4db771fe74b733cf1fa61c6f3bc4df5be9f318178fd301300c710e77a1f8e4fae0cb06731fbb7b03db1fc309cd7683f6124f1f4b14ef4d5977878523de3f30c19606f62a6cbf419d83b3883af67cf10e7a6faf508acbd67ff16efd2eb149f1e4d71383a25cb872dbe13e7aa9e06eea95c7cdf840c712eaa5f8fc03ec019fb8367f42ac680d7807b5b86931b395cd2d035695af93e3dcaf7a529ce31bd16dc570378a21f0cce35cd980938a757710ee776704fd310fdf359fcf7c3c17db5ca32671c08d2e06767321b144bc726fb746cb257c74ef2e5371e9ef759758bed213d9e149102b29264336705edddce24d3c868d287cc2085640529b5ff35dabe2eb7ff73eec473f1652f9219e71be6a766ad8efda73b4bb682acb33f2d72ced1996edf94db8f8aecf729c604fb9b0ad28fe432ece5f66f0b6d9c3252428ac902d29a9d9b21521fcdfe2eb0df2866a03767544ae2ee4a4950e14aecff8aeccf2aec0fa990e5f6f371f69352fbff32fbd942fb7ea27da55fcd277dc96cfb3f2fca4c3bd912b2cabecbb7ff5ec9f0e6db62577e335e96e6da4ffddf4cb3314b9974cbed2782d095f67d0993703afb7b3593b488493fc17e56613fa3b9596c2bcd0ab296a55639ef65f6bf6569e673cae432ce557a6eb1ade94531e5d9b9a1d267335dfc5f8954458950ea6bdc9ce154c36ad9cc4b7942a592f81f878e91a10ecc091ca32fa3ccf23ccb25d9ccc739ad1283ea79ac9c43b97e3b7c0f24fd63e645ce0c2deeb62c076e097f7ad0ec7959f9ff44aa7bb3d68f6433f76cbb38598b452cc5cb62a7a7a964a17af56a3954503ffd968c7e368d363d8df43bef15b3f7d40ba0066bfcbc05c0b619cbb7adda54d078ce60c29730d1fc9919630b5ec49e94b3ba5a4496b08cd0ac4db2bf16b6d37daf52d9e650416ab2e2a9dcf8c6cb225640115901315f7d7e95d48fd9716ca3bc886a4573e1165136eb51b58aa1c8585aacab558df7b744553b62f3206b5187cb6bbffee4fce617759ed160c7ed534af34ffb7257757939d561e5944cea584965c84aaa4ebaab52fcb6235639d58de6cb2d27fa47ce613d44d7e3c98031584dc660dd74eb3afd6d054329b0df55e7903ada7bfacd919cc0068812c61701a3b0ba84c21c4a61438954a47a6d9f54542004b986ac70ea554d439d9c72d3516f4b1f05d551e56e1cb39d5555ed9a32f6d894cc7ca3ec89f1e3747ba0b09ffd5b81fd7e116be0e8f3a93662819d36c51bc95270c79cde2f62334be72a7afb9995b2da94b1da058c867525c318af25613c87ea6b33891a301be7af0c8df1ca501bab66cd75ab591d0cb9852e725d0cb9a52e723d0cb9952e727d59b561339873d2526d5cb78bf8d728d6332c60382bec14cba46e9ad8d5a575c2d5a50dab2e9944e63c529308ab260d6465471fb69509e92fba3678d135c480db690237c2b4adbdaeb635c644de4353e42698c81d74456e8a899ca92972330cb8a3267073599566ca92de11a73314a338ea3d093a57d021e16e7267820d0963cb8055d916b2a2a1369836abba2d5b4b59f1344a77f1e4314bb620c9e2a1d3181d253ce045d40d29a278726045d44a564454c9bb639ae32fa2ce7811b5c6ca3f2b05e5df0603df3305e06d315a7aa480967632cd65267d9951cd9d613f73a648c6b05f8b995fddc55cc1ee696ac2a310eb0baabfd4df54684b486589ade93da379067e15d6da50ff9759c9788097f3a726e266e9cd2a967961b08ad85ea671b4e5a5a15d5a2def1e1872b62e72070c394717391343eeab8bdc51864c07bd34a4ab9273968ecda6d8a539cd7e54cc4671859553ab89a7d6093352fd5260a43a63e0fd5300de45064e79a561563addaaae32ebc77a87b38d5a3fef30be1f6b330becb70bc0bfc4dca27f08df2f8e751b28b36eac63da81f81d08aa290f4ac47a0d66d64b3f31cc3a75c3b46188a63674c77478af14e870166645f6d6b5227b62620f4d81d83d64e0d4dd322cfab20bfe9ffda712783d1cbc2726f97089e46f4e8a2849de0b237c1f5dc27b63c8237491fbc8ec111bfb1d95167b142fc8669c9d2d9ada14bb17bf9438d11195bb2222ca629a7d5dc4a4a0cf1792a204827362dbb69132dbc646766380b9a9fa5cd010a9083386a39931a4e58a75cc64d2a877e4e4a6388fa51e2c6e30b39e8d599a31124bf386cc8cc5b0343958951dab5b65fbca9069951d27d1d51caaab34eeb30e6b862aa59387a7932b330dccef7068959a06676687e22d62716f0ede64fb5a41d630555d06a6fff3ed77caec348a3c2d7e72c680c6d7b6f7779289f3475e1df665d5617802d5c164aeb00ad04fa649b43f4f833f2b8d06a8b3641a996a23cf63d5f010f698b2e4946e317bb5981ccafa594e1886ca68a1bf4c1a3ab3404370e3f6b29ae2c00330e0499ac00365c0b48e4fd6ade38364c8d4dad0f064dd1ed6604ceca9ba620fc12ceafe128bfab7a56651f7c2c0a749c07744d4c0f7c6aac2f444742486560fc580f365758c0e0f47b368824cfb7f1ace449d9905acf667b2c6d0b50699765d2fb6ff451bec5ee0fd15f61b4ec8a88a9cc330a598a1ab14c3b1729b2929b79f15cb6d1f0cfc0009f8f80c35f01158d9cd92955d5fe2b48ab45bb284b76d5e6b98c9469e992c5e7b15f7a7d0922b67e59a490eb37b0d87dbd70afbed4cd60e94b0dfe8bf6949535bab52a62331f90f94c95f07c83f1548a892e228cc6e1d24b15b96a2dd1a2d03a71d9fd904e9f8d0d967f58e4f1e46db5c196dd47539c6eebed09eeb2af6fe74a60045d1be72618a1ac83112b9b2d9144629a9ca0e191d2dd0e8f6724f7c663e4bdb8da4d4e978d1051ffe8e97f823ef78cd23b4e3954be277bc52213dd6c11a8b19d5f912a36aa918d57132645a170ab0bab020a9ba305ea6736c666b6595ea1c5ea3a6316c5af3f43bfc0bed3c66f847ff6ceaad7f029a952a197b5ad428d0f71772e6caa931adcd0a751d137a349b00a5e4b32a21af1385ac4ea45372ac5e4cc05aed2249ab7d5b75b5567b5f99cab229cdb22a55d93c86900eb55d24535b36ef3a3081c24fa59c1dd81c523933aa85dca83aa6bb8345eda053c98aece7d4f0c2df7b5a748446fb4b6319dfcb19f3347f056cdc8b29f962a6e4e9ce27a6e8fb610dc0124903a0d4ab9e8855a1624915fa5bb10a4dc2c45eaa2bf6644cec6512b1d7d750137b0a065e22019f58530d7caa0c9c1a66ba4393ce08717f0c98f6ea2a7537e9cca418272cf48d1417b0b18218ff15b227ebecbf4bec670b1944265bd026227655a49c8671bb42c26d23456ea76314acd4e4365f064cd5f390448063ccdccd90013767160de97fd18d66d4fb5f3331da2b24b45fa248fb0158355fa55bcd6761c8ab75910fc490d7e8221f8421afd5459e2d43a685b84e528834685da510e760e0874ac0f315c1e76215f330996dea6adf8e049d5467f8e4fa350aec9e4905b33c99b622386d6ea1c73fb288459a388366957a7e3026e77a999ccefa79ba2e81f6290a980f8da638c56e8554529d87517fb884fa2d8ad4cfc7c08f90807fae085e80f175a48caf5671cab59085b3bb4ffbda4f55785c8049b341260dbd75cb4d259d8518a5474928dd5a478dd2422c1347cb32d18488667c2f9bb2c9cce157c0d7feaf66cdb83a8d459804c7c824a0966d62b4633035c96ec1228cd28d124a5f51a4743166918fd5b5c84b30b18f9319cdba6a621763621faf2bf6521932ed756c2248af633349a6d7b10c4be7042c9d13934aa704636a8b2e53cbb1023e4952c023eaa9157029067eb2047cbd22f80a0cfc1409f8a38ae02b31f05325e0edeaab811f82819f26012f54042fc3c04f97809fab085e8e819f2101bf5a11bc0253f23375957c1526f65912b19b3550137b3526f6d9ba62af912067b308f074ae5df1473fa9ad5da1dbd526b636906e46265bb3122f7dcca5b456562eb4853e4f26924253be0ed3a6f325dab44bb1121c8a815f20019fa3a8aa8761e05b25e09b14c1d763e0174ac01b3554033f1c2bcc8b340bf3080cf86222e90bf662dab982d531da9d2f62dbda94b27f95b2adc58ad8c47501d37dd7e12426aee93e49995c7bcbb84e97d80ad5c77eaa22f59198d497c8a4a626833a71dd7eb33394748621b2b8c24cd29df7babb2bc9b501d3814b253a709ba2821d8565fa324d1d385a6667d97a9862a376168b23cd67ce7bbaafd922a629cb53bccaeaf2846df23666936954b5395931fb7d8cacb869dffa0a82f4adafb4ffaf434556ea5b6fc474f62a89cef657b45bc762e0574bc06729821f87815f2301dfa8087ebc0c9c766be826995add9a4d98d8d749c4eed5484deccd98d8d7eb8a7d820c99be7f4322e627868bfc444cd16fc4149dee21af3e88dc82d9cfed9af6f3240c989e7d2d0d9f9a1d758939de9bb98aeddfc9980add2251a1331555e8140cfc5609f8338ae0a762857d1b56d8b72755d8a761da7a87a6b69e8e01dfa9097c06a6457769aae79918f0dd9ac067c98069d9d333d2fd417c14402588ef6c4c0bef9568e1cf8dd5b4f01c1938b592f4d40b2d2b792e26f67d12b19b355113fb3c0cfc7e09f86045f0f3b19af90056331f4caa665e80a9e34344622de9f2d079f67f7412854e4f2f265379e84ab1dd93a4bfac64a30dda8757d1ddad98140fcba4681a9522c7fe7b3971a6379c0093e465b81093e111990c4db80cfdecff17b2fe34fd66adfd77f2125c8449f0a84c825aa02ce83214dae35549ed624c7d1f93a86fb5a66aea7b09a6be8f63eafb4452ea7b2966f4764a8c5e86a2d1bb0c63e84909430f2a32743906fe9404fc0345f06d18f8d3b2b26da6067e0556b6cf6065fb6c52657b25561d9e8b659a72536c9aaec2a4783eb669ea9b42d3743526c30bb14c53ff149aa66b30095e8c679a0e60e9a985cc5f8ba9ef4b12f57d41517dafc3d4f7654c7d5f494a7dafc728a36730e874f46ec0d8794dc2ce9ce66aecdc88b1f33ac6ce1b49b173139689372599b84d3113db31eadfd2a4fe664ceab72552d76ba126f52d18f5ef60d4bf9b14f5b76299784f9289eb1533711b06febe04fc1945f0db31f00f24e0df2b82df81d1ff2146ff4749d17f27a69c1f9318cd5abf14376b776152ec9249e1366bb9296cd6eec664f844268368d606a4b059bb0793e0539904b589dbac8d6173262b14e36eeec514f8338902ef68a9a6c03b3005fe1c53e02f9252e0fbb04c7c29c944ff566a99b81f03ff4a027ea622f80332705a5cf4d84f9d76e1414cea6f2452576bad26f5433270ea1ef99668ba471ec6c4fe4e22762f45b11fc1c8fe5e56b7682c47ecc8ba7cfbd5952cf66d31b33b652cf0d4594055c8e62ca71267537767f16d81fdb4902dcb5dc2ee85dd2c200bf88c625f36a32816eeae23cefebe996c46df39bf2793cd2615f2e5dccbd89372f656114096cf5916f3b95738cba91a20fb2856403f480a68a862013d8681ff28019faf08feb80c9c1aa39f3063f47352c6e8092c13bfc8186aa396899d18f8af12f04c45f02765e0b4b2fe9688318ae1ba7e4a029ccdb63dac9a09e4cadb02a57602f977195fd209647ae268ec09647d59b109e4a7315dfa5356db1475e91919386d22fed26d229ec590ffd6457e0e6b1ffe4944ff6318cde765fa9f491f2eaa12fdd7d9b02bb6e6ff9bb0e6ffc734bf470ccdd7db564c5e122f60ca433791d0529e1731e5b12c3de57909aba6f4a8707f35bdabad5a357d19933ac3927489686b39920db48ad89a09d96a9b4cd65dca540c8c7a0593a39a4c0ebae1871afeab187e75cdd2790d03ae21139cea0fdd08379ff5099791b14c8969bf6c89724fec7559ca542f6a4af4626a3b35bd7803cb562d4dbedec4a4ae2d91bab0bd9ad46f6152d7c10a438459385d636f38a24ab6dec652ae2b4b993a0e9cc3eab2a3e7da6447377f9962d7ad42a2ba80e61d4c827a32095a4a2598c8fe55c156ca3b0388e4d647bd8bc9525f264bdb0465a97cf0898a4cef618ad740a2781bf75053bcf7b10c37d4ac2e1f60c08d34813fc4801b6b027f84f1dc44c2f336459e3fc6c09b4ac097745003df8551d24c93924f64c0d4fa344f0438c6b8ea5319306da45b58c890b6a595cc90f6338cf65612da477454a3fd732c13adb14cb4492a135f6099682bc9c406c54c7c8981b793805fdf490dfc2b4c31dbcbcc295d8c3f8dc0ed500a59775d18f22cb2276bf04af9dfde68fb4c76e7343fbdd8360ff4176172cb59347e2633ccee7267c73f4517eeae24ded878914e053b5db59c75158539cf64c6bc5031b2f16b8c8b3d645cd01d3be19e6a4e87d56d60dda5c76b988425c45d31ebc847658e87906bbfadba42e11b4c613a4814e66f456dfc16ab52995895ea985495fa0ecb442749263215b5fe7baca43bcb4a9a2e48947b5b67733f2d5de141072ace563cb1ca342be6af7bb2685cc743ebeab5b706ac609a21bcb1dedf2a985e55486ad10226e10ae0cb75b057f081ae8a7efd20638f1ebdd3c5d23f7ae7470cbc6b0ac07f9281533de966e96f59fb3306de3d05e0bfc8c0e9595a5916c10fa8f227d00d4fe0572c813d5394c06f58c1f64841c1fe8e81f74c01f81f1878af1480ff89d9b9de123bf77317353bf71706de4702be5d11fc6f8c966c092dcf3ef3cc30155afec124cf91483ebeab9ae4ff62e07d25e0f514c1ff9381533760aeae1b905888d8fd24626f5214db9281b3a38a5260bd2218f80009b8a5089e81d13250d63f56a4a59a0c9c2af9a014d4fdea18f8e01480d7c0681922a1e505455a6a6205ba570ab4a51606be770ac06b63b40c95d052ad9b1a2d7530f061320fa422785d0c7cb804bc4211bc9e0c9c9d0ba46bb5ea63628f90e9a1a2d80d305519295115d588f88698e4a3644db3a2e48d30c947a740c91b6392e7c97c59ddd5246f82818f9180ef50046f8ad13236052d45334cf27112c9d767a949de1c031f2f01afa508de02039f2001a7679fa980b7c4c0f79535a08a92b7c2c0f79380f75794bc35063e51a6e78ae06d30559c94821ada166bfa27a7a0e96f87d1324542cb44455ada4bc0b33bdab716dd6f345d3be3cc20ce6144fdecd4c521af6abbe34c95f8abb2d969a0ad2be52391d4f6b7f16a51384adaf736a9ed7ad875dffe7f87fd7fbd9e04db0c7a9a4507f1c9a5898522ec8129c074890234eba1a6001d30f07c09f80845f04c0c7c8604bc4411bc2356e966a6a0d275c2c00f90826fd84705bc3346cb2c092da72ad2d2053374074a0c5d44d1d075c5243f4822f96d8a9277c3c0674bc03f5004ef8e81cf918d147aaa816761e07325e0398ae07b62057ab0a440ab2916680f4cf27912c9f31525ef8981cf9780dfa508de4b064efddc0532af3ff57dd2b0b0652c74630d9b6b7263b6d5773eed8da5be40963a5d7d2122799cf935fa8d4a7a7d302a17ca868b8a5466631a569882be510e26799144f2771425ef8b812f92f5a47ba981e762e08b25e04315c1fb61e04b24e0672a82f79781d3cdcb8aad04e208cec5810760522f9548fd4a6f35a907626ab82c056a380893bc443672c956937c30660d96cbac813d8806b6a790cddd2d64f37b85d1bde4e87535fba498cdf8b9c7b1b9b3ce4e907799ddcf54b1244330594b65b23a27ecae885a2f9594f6c2525a214ba9217baf94e5b1d8e680da48da37de9ffdac1a49b33756dc2b25c55d2f47adb88762193b4496b18e9ee28e5d90fef8c20222c20654323f0c93af0c6b1a9d896f1153a7173f371ca3be5c427d9e22f5fb60e01512f0f17dd5c04760bcad92f1d6c353ae1359c9551067f155192b3b5a82743d46398b461731d0a2d4bd25ed567615ae476212afc6aa987be09cacb2a9a43d0a4b7b0da665cee9c1f3527212c2682cf5b5b2d4e9809c2e7fa59beec49382be574654e37af33079d6c9e46906e4298a96c8641ef094fca2e031981487caa4a80ba4a0c1e6ae6ea8a43916ab928749aae40bb96a55721c96a1f5b20c65c5a992f2aa470b9bc600ade347a32e6311382b795bac42c5788c8ac325546c51a46202d63d3a2205dda37d65e0543f8eb434678cf6c3c4de9002b127626e9aa352e0039a847172b42e279365c8f4fd6312e99fc788f39d8229e0468902ce19a0a6805331f06325e05f2b82ef8f917d9c2ed9d330b28fd7247b3a06bc4913385f064ca33237477ff045659e6025139539032bd0132505ba64a05a81cec42cf796f896db3990bc3bef028bb5f0ce08444454d2184b374ad3899d846720ab75660ec0a43d09eb48e5b30ebbffe4e564c649b3300b79720a2ce48158199f2229e31d8a657c10067eaa04bcd12035f0d958919c262b12679d925011b181410968dce9fd02d6cb75fa7a2a453407cbe8e932ef816246e762e067c8064c8ae00763e0674ac0d72b82cfc3c0cf9275fd14c1e763d5e26c49b5509dc828c0243f4722f9078a922fc0c0cf9580670d56035f88819f2701dfa8085e88d5b9f3b15155bc3ab7904f1253e3a85eef8ab0cc5e20c9ecf78a995d84816f95805faf08be1803bf5002de6c881af8120cfc2209f86045f0620cfc6209f82c45f0a55837ef12dd6ede324cec4b65a5a9287609067e9904dceec228812fc7c02f97804f54042fc5c0b749c0572a82afc03aaa57601dd52b93eaa8aec4ccd25558ef4cec3b277a8dc9bb540ec1d2be5a967603e2ba549c5e2c8d852949aa5f588615dd3592a21bbab75ad19563d9ba56962d5a746ef77c0d29f0ad82f77682d56c7c0526c9753249e8edc8683f4e259d55587fe2fa1474b35763657583a4ac4e552cab3532702acc8d890c347be3c06b314a6e4a0125eb304ab6cb7a41c3d4283914b33c376396e796a42ccf61587b75ab6e7bb51ef31edca6e93d381c13f9765d918fc04af40e4989b61bae56a24762e077ca9a5845f00d98a2df9502453f0aab9e776b56cfa331a9ef4981d4c7607cdf2b1bbb2956cf8d18f80e0978be62611e8b81df2701dfbe8f1af87118f8fd12f03315c18fc7c01f9080172a826fc2c01f94805f32420d7c3306fe906cd4a9087e0206feb04c5b14c14fc4c01f910d6746a9816fc1fa2e8fcafa2ef454f362c9ac2b0d055ec56302e8d2ee6467834fc2ecc563127b6129da8b9325e0d974f624ad91e270abb7e422c51f977410b2bb1069a47822a93d61e3d5a8499c3f7d9c3f3591e8f09d963c3a3c9174b0e8f053b0427f32058dc4a918f85329f0c19d86d5cca72535737e9e5acd3c1dab99cfc86aa61bcb21fc58454c612bf8a4b03b47ef4e22af61ea5c02c6414edda543cc621647a3567bcfc0247e161b68fa27b82711ea635bc276375449f94cac33fd1cd6997e3ea9cef4599836bd9002fb7436a64d2fca1c6e63d5b4e91cac4ffd926e9ffa5c8c939753c0c9791827af4838d9394e8d93f331c95f4d816db80093fc3589e4ebf755937c2b26f9eb12c955d7995e8849fe86ccaa4d5693fc22aca6be89d5d4b792aaa917630cbd9d02862ec1187a47c250defe6a0c5d8a59d1776556b425f1c666c2dd499d6966bf6f4bc5ae5e86c9f21ee6d99a166d3b54d2b91c2badf753505adb30f00f24e0d514c1afc0c03f9480d75404bf1203ff48025e5d11fc2a4c893f96287197456a4a7c35a638bb648a433be1b25837d986a5a98b75bb0623e01309011b16a811702d56749fa6a0e8aec3c03f4b01f8f5182d9f4b68a9b5448d961b30f3ff0566febf4ccafcdf8865e22b4926fa2b66e226ac2ff5b56e5f6a3b26f637322785a2d83763e0df4ac03f5704bf05abf0dfc92a3c2dcfd8ad963b0681c785a854ef5b3189bec7462313f8b146f4c43cfa038d289e60cba4da6ade8611fd8384e8ac6235a26fc794ef475de5bb43864cdfffc9d2f3e7df8995c4cf8900c73a470be3e2175d2eeec68af0574911e62b16e13d18f86f12f0ed8ae0f76264ff2e53fb66c47ff28f737a4e295ff0e138f10e25aaae801d98147fc8a4a0279c8d645192fe5ec04cf677315b74a42ac37d18cd7f4a68deb14c8de6fb65e0b41ff397ac21a3deb9bfa99b8d42d13fdcc7e64f90bad790041fc072f38f24374431370f62cdf2bf58b3fc5f52cdf243985ad0e17525b5a0ac8d66ebb8c419188ba3ddc23e512fd622e6765dcedb895ccfb152f4493fe596e3618c6a2b5299ea9f15a97e04b3599188a6cd7a14b3df19113dfbfd18c64735091f2b4bd4f8781c03af2e01ff5a11fc094cdf6ac8f46db8c7182e643f949005841e23b68c0d41c476cecb99995acee63fe8e8daf1b0aeb587218e0bdce9c9c063ce169055d1e18b77bb6a576b55747427a6463575d5e8494c8d6a69aad153d8a8a57644dfcfffb40c9c4e57d589d0cdc32b834b13988727f00ca6a775257a9a59aaa6a7cf627a5a4fa6a79d88ebebf7cfbb396b36c5e6d0f4df7d81f689b827f5ed229ec324ac2f9390f252cc7bceeea916e54a293e8f11de4042f85645c25fc0c01b4ac067ad50037f11036f245395956ae02f614d75e308d254378924d354bf8cd5d6a629a8adaf600c359395ad2243af6292379748fe9ffd4745f2d730c95b4824df7e889ae4af63e02d25e0b5cad4c0dfc0c05b49c0cf55047f13036f2d01af57ae06fe1606de4602fe82a2e46f6386adadccb049153dd65145187a3b197acda861cf4ec244bf8bd1d45e42d33b8a65f01e06be87047c70851af8fb184b1d12e972c43a530803ced404fe10a3a3a3848e768a747c84817792805fa208fe3106de5902feb922f82e0cbc8b043c67951af82758617695d5a50a12ef4c63770099fc39c6ce615ef33c272307fb54e34fb122ea2629a2118a45f4195644dd6545e46c2ae63f585a25339f639da12cac33b467529da12fb07cf590e58bb612d94af9f812c3ef89f5ae658aa792e257588abd6429b69096d424a690e5dc33e3fea2a6905f6392f49649421168a09daac1fe46924a7657fbd6da9fa42ff82fdfbea33e02f5a0bf3e117a6ea4970ca6c6d230bdec080dd36b5e2967b1d2c7c2f3be95950fbdcd89d003c5bc22ed3be9a89a5bdb3d1ba95434d5f1a2f90e5380be3205a84f4874839b45f643ba42cac9946ab0e9f79825cc9558c2470f53b3843f6099ea27cb142d29bab9e312de3888b93018b5e71e35a692c91f3139facbe46888922b7c5f2a69ff84f9a806e8faa87ec6867803533038fd4506ceced888e86fc9f22ba67483254a77ea7a35a5fb0d031f22015f7fb81af8ef9826eda5d997fe43064c4df3de890053538700ff2903ceb46f872602fc1f2ef15f1815c364958a6abc1bcb529a6468fcdf589ac3f166527dc5e63f1865fb6852f62f26fe0899f874af35ef2176fe6d4ad47a3bff611563a4a462f43a42ad629088049c1aaf519a0e734b064c73395ab3c64530e03c5961505329ba9bee1ec03ac591214b9f1dd9211b261ea9561cd5b0cc8d9565ce8d447143ccdc01213cd4531c6fe80ce354b25b1d93681cd617100bb0656b6d925f085e0393637cacbe40df942c42af89a53d013399820327302099e5e7b5b034f795a509773494a79ddcbe8ab5655250fddd2f057d953a584d9a28a949bf6f50ab497531c927a540f27a3270fafee4448c5b8c35a7f525c0d9f420c8b48ef49cb885b224467a5322f470516ffefb20e3bca9c8382f56ead838af818c37bad3b3352f8dbc39ef391e85e96cd79d62fbc914b692c9d97fb63c094ef78f35092c65761a63b673a59c272b1fc67a43cc464d97d928baca6b3619ca904b18fa307bb031c666b41fa107b3f427c3edbb69f67f53ecff87926cf0e6709b21a7a59bcd5d9f7349327b3337c224ce9749dc4e2a718efddf60f6778e2d97d3b9a82cad8a548d31433843e6903f4ecd1036c1b23c13eb52c8fdb7f0b4f0ca9d0d95ec36c5b27b8024bb1b14b3db0cebd0ced2ecd036970177b06f0f4c04f80f1cb80546c741b2f9e4e3d5e8688995fe6c59e96712123587ce69d67ef78dbca309b7d656d18456987473b0d011a7bad1139d0a59aa3398e92a6166da6fd81da7ef746ef09c2dd0e8372a12b6c60a67ae6c565bb170da60e0074bc0c92635f0b6584598a75911da611561be6645688fd15120a163ea66353af6c0546d814cd5062aaada181e3f57c69f94b25147095342a7ff5d0efead3700ed80d1b45042d30e45adc9c4c00b25e0734e5003ef88a96491a64a76c2fae38b34fbe39d65c0f476b164fee0b5abf7fdb9d5ec2f3e52993fe88225b0449240f9e6d33f79afc5c2d92a0974c5f4be58a6f7620335f904855a0c5c3759ca7470bc54d783de1d435ea68b9c852197e822ef898d4797a7603cda032be4524d675b4f8c8f15ba7cf4c29057ea22f7c6900fd145ee832197e9226763c8e5bac8391872852e725f4ce956692a5d2e26f26a5d91fbc990e9a4ec9a44446e8a03f7c7445eab2bf2008ce5759a2c0fc4443e5457e44118f261bac88331e4f5bac84330e4c37591f7c274ee084d9ddb1b13f9485d9187623ab74153e78661c04769020fc7b8385a978b7db03eeb319a7dd611588760630a3a0423313e8ed5e56314c6c7719a7c8c960167dab7c727021c63f6360f53ba4d9a4a370603deac093c162bbd13744b6f1c567a276a96de78acf4b66896de048ce4933449de17033e5913783facf44ed12dbd8958e99daa597a93b0d23b4db3f42663249fae49f2140cf80c4de0a958e99da95b7afb4b90b3e9c93bd65262728e6a065f10bf8e8c89ae45a69832373f9dfdc1de17f35193d80e778ee72af6ccd5598994c5689cb16958599cad5b16d365c87bd8b7e72422f2361c381fd3cb7335f57206067c9e26f04cacee9faf59f70fc04aef02ddd29b8571b155938b0331e00b35810fc2b8b848978bd918f2c5bac87330322ed124632e067ca926f0c1d850eb32cda1d63c4ce2cb35259e8f49bc4d53e2024ce22b34255e80497ca5a6c40b31e0ab34810b312aaed6a4a20893f81a4d89176143c36b5330345c8cd1719d261d4b303aaed7a4a318337137e89ab8a518d137a680e86598d837e98a5d8289bd3d05622fc7c4be5957ec520cf9165de4151821b7a680909598d8b7e98a7d08867cbb2e721956c9efd0ace4e518f09d9ac01518f05d9ac0ab30e0bb35815763c0f76802afc180efd5045e2b03a6a1d23b22fa8b83d661e0f7a500fc5019385d6871bffd434709b834816e78028761d23f9002e9d763e6e9c11498a7c33123f290ae113902437e5817f94819323b152422097c921112ebb4214c571e4d91ae1c85e9ca6329d095a331e91f4f91f4c760d23f9102e93762e03b53007e2c66179fd4b48bc761523f9502a98fc76ad1d3bab5681386fc8c2ef2660cf9595de4133053f85c0a4ce18998d8cfeb8abd05f3bcbfa0e9793f0913f9455d914fc6905fd2453e4586dcdebe7d391132cec5814fc5587e4593e5d330ad7b35055a77ba043c7b4ffbd69a434cfaf567da68a3d91b79643f5bc43ef695aeb32b00ffcab7bfa0dbb494322fbdf385783fb6effe353b57193e66b2e9120e2b933dd34bbb314376a30b097264d3eb11ba92251529626b58cec01a9537341b9533b1faf7a66efd3b0b13f92d4d91cfc6447e5b57e47330e4777491cfc590dfd5453e0f437e4f17f97cac00dfd72cc00b30913fd015792b86fca12ef28518191f6992711126f2c7ba225f8c3580bb341bc04bb006f013cd06f0528c8b4f75b9b84c864c5bcbcf12113946e8fde5589bfd790adaec6d98d45f684a7d0526f5972990fa4aac14bfd22dc5ab30c5fb5a53f1aec644fe4657e46b3091bfd514f95a4ce4ef7445be0e43fe5e17f97a4ced7e4881dadd8081ff9802f01b314e7ed2e5e4264cec9f5320f6761938f502fc9288f6c5382ae166ac39fc55b339bc0503fe4d13f856ac047fd72dc1db30e43f74916fc774e3cf14e8c61d18f85f2900bf13e3e46f5d4eeec2c4fe270562df8dd5977f35ebcb3d98d4ffa540ea7b31707a8e9f2ef80eac24ad0ccd92bc0f438ee822df8f11929102421ec0c0aba500fc418c93eaba9c3c84895d2305623f8cd59b9a197af5e6114cea5a2990fa510cbc760ac01fc34ab28e6e493e8e21d7d5457e02ebacd64ba41863745677624cd74f01d34f62e00d5200fe144676435db29fc6c46e9402b19fc12a6463cd0af92cc647135d3e9ec3f8689a023e9ec7c09ba500fc058c93e6ba9cbc8889dd220562bf84e9484b4d1d7959064ca71a5a6554f6d6e7506fbdc4d1ee4f8ffad891f45ec1cc566b4db3f52ae6416b9308700c0fda6b98c46d35257e1d1b3eb54b0438c6f0e90d4cc7dbebeaf89b18f21ebac86f61c81d7491dfc690337591dfc1903bea22bf8b2177d2457e0f53bace9a4af73e2672175d913fc090bbea227f8899ec6e2930d91f61e0dd5300fe31c649962e27bb30e43d75913fc108e99102423ec5f4baa7a65e7f86f1d14b978fcf31e4debac85f604cf74901d35f626267eb8afd15368592934819c69842f91ae3a36f0af8f806933a5753ea6f31a2fbe912fd9d0c99ae55ec9f88c8db70e0efb15a3840b316fe80010fd404fe51069c69df0e4a0438c65ac59fb0d21bac5b7a3f635c0cd1e4e2178c8bbd34b9f81503de5b13f8378ce4a1ba24ff8e913c4c93e43f305b343c05b6e84f8c8f7d74f9f80be36384261f7f63b668a4a62dfa47064c178f8d4a0438c6e2b17f319247eb92fc1f46729e26c9747241cac5184d2e2c193055d0b19a8d5f04031ea7099c2103a6b7e3332a6f8f28fe544aa03a9e40355902b4824f484105af8e81ef9b02f01a3270aad8fbe92a764d19327d7fa2a60fa5960cb8ab7d3b2911e01887e5d4c680276b02d7c1489ea24b725d1932f5804dd5f480d5c344de5f57e4fa58659c96a2cad8409600dd59787a229cc4d859b8a10c986dfbae69aa1b61a53843b3141b63a53853b7149b60221fa0297253cc6cccd2341bcd302e0ed4e5a239c6c5419a5cb4c0b898adc9454b0c788e26702b0c78ae26706bacf40ed62dbd3658e9cdd32cbdb698b998af692eda61ed5481663bd51eeb692c48414f630f0c7c610ac03b60e0852900cfc4c08b5200de11035f9402f04e58ad59ac5b6b3a63157d896645ef82895cac2b72570c79a92e72378c8c659a6474c7804b3481b3302e96eb72b1a70439bba77d6bcd20557386d26cbe424dedbca45219c3968f07b6ba6c45065d5dd6ba52ee1291015b4fd603b30a2b5360157a62857f886ee1f7c2c42e4b81d8bd31f0f21480f7c11aeb0acdc63a5b064cf76b5c9508f0681c38072bc5d5baa5d857864cdd736b34dd73b998c86b7545ee8719ca759a86b23fc6c5a19a5c0cc0b8384c978b81982aafd754e5411817876b72311893f8084d8987603de523357bca7bc98033eddb0d8900c798ddd81b538ba374d56228e65d3d5ad3bb3a0c033e4613783806bc5113781fcc05756c8a5c5023b0a6eab81434552331f0e353003e0ad3bf4dbafa371a33d19b354d741e56c94fd0ace46330e0133581c762246fd125791ce6cc3849d399311e13f9645d91276095f1941455c67d317ff0a99afee0fd30c94f4b91e413310378baa6019c849990335260422663e067a6007c0aa68767e9eae154cc3e9dad699ff6c7ccc8399a66641a067cae26f0748ce4f37449cec7ecd3f99af6690626f205ba22cf9439347ad9b7d634923e87c648fb2d7ae4fcba245c195b1376655cc85c192d2ae52b76ea9813e300cc105c940243300b2bf08b750bfc40acbdb844b3bd38081be65c9a213944318fddba9b0f8d22f4d8cf223299d01368d730fe9771f7521f76dce204fbf729f62fa54ccbe813f9210cb2231be8dbb0cca92eae605a5ba078d6ed6c2c9797c972795c3497e28054a7ce2c67ff9ec06a13cdcd22fb13a7ce4c88be39c6ae49ce21a9d3582ee8f192abd9db7d787e8ad8c9c2a3eda468be28ae973d1781beaf260786448f672db3b92e62a89053e810f4f33dd3c629563c017b0ec6f4e5983ec1149d3cd123d31db656d8766a9ead1b65accc9ddce69325acfcfdd2badfe2cf53a54f73b15c6e93e572b82f979073279f6359892d6779f44be92d21f84bacba02bf52c9d9c158ceae90e56c9f84ca6fa4ad4385acce1733cdd52f39f71795bccdc3f276a52c6f037d799bc44a6709cf19bd5b5b6539998fe5e42a594eb6a4d99eb9dfe4d9d712d646d323a1c7b2f67a394b21712d87dce1b9a06dc92ad60b80568ff6795267db0a30d6af96b13e32a1ba3191b1511e08abb600cbdf35b2fc4d34a855f4e9212c199a2ba7875acc922e2687b27a28b724c994ea422cd7d7ca723d2c66ae7149a7b1bcd0a3a52a781e456b4c9f2ee40c55ae17c997662196afeb64f93a50b967379dfde2eddbc9109c6753a376a0cc6e0fe8e843a727984c3917617c5c2fe363bfb4b4d9a65bf345589e6fc0fa296a3a207478a2fddb420604cb5955235472b618cbd98db29ced85e46c06ab9f25bc6fe28c7ec5a86526afc585954ac3cc18650996a39b64391a6bd0fa8a52a5ef14d8792d61ad77ea725a8ce574bb2ca743eddbc42d85370705ec99933bcac97856ca656c34b4d06e71d7a530574bb15cdd9cc898c09b2eec21cc60a55066bf4bebe1e218ad9f172375395b86e5ec1659ce46c7b59c898d0a701b1a6bcc9aaca52cc1f278ab2c8f45867bd415b675a41eb8c5bcc73c93694071b436a6668c984c2bba1ce3e936194f33aa6ce4119b217d1e4a311e6e97f1300ab5617484b4c07e49d48d89acd463b73872a45497f40a2c8777c8723841318707308d2e454aa42af2bb12cbef9db2fc4e33a8d9e549b4bfa960e0108c81bb52d52e3bb66d246895cde7aa0ccbd5ddb25c8d53d4e3316c166205efed56b50e976379bd07f350a896e058f646656df4dbd7c47155f25781e5ef5e59fef6d6e83956b096b7d4cedf223ecec373955fe95d953cadc2f2b443adccfcfa3992f913a85589374a31db52aec6f2775f22330258ef710cf30f15f0b15be57e7c72bdc7e4fbc86bb05cde8f95a2cac8d8c9f938de33747fa5f33ab1fbc0a9ea1fafc5f2f7802c7f5d486cdf273dcec48494eb30291f8cedc1542985e9499582c91a762896eb8764b9ee8d5a90fc688c00b4848ba25e7bdac35925ed5d27378b711826f7c332b987c4b50c13d80c28f5b196d896bdccce1b8d73886f1d526503d663f979041b13c4ae2374cc3f95f593cb253da544664c68ff72510a73783896c34713f104c867402630dd8b6dcdd3390b720496c7c7303f5c22ed5522b94c779b752496d3c765391d9f5069fae7b39c7a28f25d95e5ba01cbed13b2dcce8a5bae66fdffa667068ec2d8d829636312da668859f145d151116d11574ae4746474bc57c9fc82ffa692efa3b17c3f89c53724966f793c407af3760c96b7a764791bacd80f58c54638ce2c0ff54788b7e838238ff50ce4be49f89b4a6e3662b9795a969b019ab97122159ca3f69cf753552ac762f97826f9a88178a39f74dad5e3b0fc3d9b487b09b503e6703a7bea8cc21d6f916c8ec0ab77f82fa9d1c8e3b19c3e27cb697f5f4e47b31c387ebe0acf3808b704b17291ac3e6ec272f17c22f3e02a117ac169fb3763797e4196e75c5f9e670099dca86338268f95b77928964a0e4ec072f02216bb9658bb359a8d63e938298746c8a5a1953a11cbc94bb29cf422de317abfe891a8e23ad196a39cf8fd77a91eab6ec1a47e3911ff4ea2520becd8fa141bd93d2a56257f2761f97b4596bf418af99bc6105730eb3752a9be24e30f3919cbcbabb2bce4c4cd8bcba8bfb45c7f43ea6cd52998f4af61b62a39e91ddf4091b3b1049b858a3583a1928353b11cbc2ecb4177455d1acd59ad3ce3928cae9c86c9fa46222d036448b7654896edd3b11cbc29cbc14151b6533f6f29fcd3c9472ea48691333046de4a64c6a1f29c50627deee4c6efc9db8933b15cbe8d796fe43d02b11e6c05bb2b956832955b36c3e9d565757495dc9e85e5f61d596e3bfacad49f236a431c8952a5736763f2bd9b882fadb2ce55b6ceaefe558e124eb7ee9d83e5f63d2c663a51ab393daed53419dd742e96aff765f9ea1a47cbdce8d822562368bf3b35bdd1f330393f90c939862432869bc4a3d38bed3b6ae316123cd2305deb5ccec7f2f921e6d14a54cf12b369f1d154727301969b8f12993da96cc368b9556e87dcf7127b9edabef7562c8f1f273307a6e20b4a974e5e88e570572271bef1672d0fb0ad44317b7bba9dfb0269cfdccc7cd04558ce3e91e5ac07daa3c0a36a4af94c72aa66312ec624fe14f365a98d95c4dcddf2a84d2ce62d4d62f15c2646ea976079fe0c8b8152195d3951d92ab2a7c26a5c8ae5e9f3e422ccf5e7e6a0b54c8dae5e86e5f18b44a21d30eb4fcb21d11620b596fe722c3f5f622b70121d21545524de362c475f61b1ed89dabfd8310089d812f5f8d1e4db812b301ebe96f1d02d6e6d34d70fbe1293f41bcc6b99a8de78255fc9bc18eeca0213da771596976fb1b64cad3e39de99cabf561e4de613e74455f3a3faabb13c7f27cbf31c52b5be2bc84ba2bd31f18d0a2bd760ac7c9f480f53a4a8e2bb727386e9416a2ccbb558ce7e4864ae58d5ae56a587e43a2ca73f26e257c6e68a1d1d1f48fac7c99fccb6d2af5472703d96839f128f5ba069aac72d38f9c39ea7aa846ec0f2f7b3da6a97ca9140c555383abd11cbd52f580474ecb67b3a1ff954d6aad16c96bf2c862d74bf9dc2e2709d717becbd3f926b476ec272fd6b22b54d9e7e72b338c98e0eb66339f80dd3c658a3032a5fa1fdcb5a9bf9caf1bfd8f820be0dc1b5b1a6fd9f65d1bdcec6b0379dd8e5158c09dac7c8a661e760aeb54fb465eee369c5dde734f5e5b644b476e747db60bad75b6c84df6dc26a4488f3a7bb45c91647c45b8b7cbc395f9630e4854043fbb07277f6b5a0a3fe3ed151b2d8092f5e2e64bd913ea03f0273173f4f7391adfa2dab26cf91c0b299ee4399dedd72fa072dd55c5eaa91ec6c9ac79e496a537c29fea4a965c875a8652566619d97c9ee004ce6be2f8b9e7738950d27c4b0c27157381b35c64d0dd652596abd1980e8bbc58583014932b8d64cc51cb750197182bbe77425a466f5480e2d85bf4c5255c7bea191991378cb4bed403959160a92b6f57349fadb244914373cbab36da04bcb3f2669a1a785ce63b5d9a96cf8de4c61a0ed9d6a2e6dff9aa4ad35ab7265acc33e95385b2c88ee1c4660792828dc65b914fe6792c246f68df01c8d67168b0214b0b11c8d359f12120bb6bd964b18a96690b066acaace2339c4ddfc20ccc435aaeb12679924ae25d0343a8fe8adb013980f618567263f0cf4652d77e98b98a4af8944ef28200db8a10b2f57b1a785a1206d3e7149cb48176930ae578c1bc468220ca40d1de69256cdb485f3360963edbf9d2dd80ba3cbe11d4b1706e2b2eab9c4554f9785a3fb9fadb5ff25b36beedeb261a06fe34a97be1a26e9a3dbe6576e18c2dd153e13f4e36a9a24af35d0bd310c86ae0c2ce09d91e9ecbad2ee2caf62ba17260a1fece45258cb248575416331c5330d17069a76b57569aa6d92a6da80267747a9305034b5854b511d93143560964cb81a4b99ed9ac2a67d0b592b1a06b2da2d71c9aa6b92ac1a4c9fca43d5a5a856df25a79e49725ad93753a26e21bf0f969afb554cc368af6c2a9f5e0c0381d7b77309ac6f92c05ac05a513169b44b18083ab7b14b5003d39d56419023827f703493f7c0169162129611e6d06297be8626e96b0efa5d7ee2ca59152d60cea052fbf375a1a0ee99bd5dea1a99ee485062461377417e38b4ab0258afc6e9b25e6217da301054d8d425a8894982da1038ec59cb72bd2a3abca14b140a59550c6345a47f04894d4d9248cf0f84e4d1f927bae33cad8eabb8db27dcc3f066d55c2a9b99a4b23eb76942dfd6f1beda0c521e927effa9c0b635373f8e14e7218998993050f4c65097a216e9f2c44ee0dd09110e2cbc63611a36fd5ed325aea549e23a807673868d59c8bb17bb9767ecd42e2e9dad4c7b66a11ec24dd147325f2dacc2e1e8c3ad07f39ead4d92570fe8a2bbefb5b3237b28880223d1362689a2a1089398355be63bc629cf7ebd8ca51406c2e6475cc2da9a24ac0ea896f0ccb6309034a7bf4b523b93245567492f602f84839a3387b8d4b4376d9984feb8ab891c21c240d40b4087f63049140d23f06e0b4683932bbb7bc240dadfc0afdfc124690d098cbd28606415856e1a642b88efc94c575fdf89baf02efe2b0c595fbf0404e475345d399d71641e4b3acc7e8a9dd55dd23a991f7cfb2b671828fa7c844b5167d315720c0b185ec51277cf0d75cf912d67fb9fac0c0571bb806e7531ad5bc2923936ab222cba05964174354951030f45e10ce2a4ebe30459dd4c5744b13862058309b7337a28a888dd4d12d798e07393a389d873380c9415028f6b96e98ae92ca3a51e8822367be43a09c3d1c35f0b2670f734495653d089704e00f2cf1b85690d5cde0097b61e2669a371866e9f6b0c0b1376e2c4c240d3cec52e4d3d4dd2d48ad134d5b6548e77eb10b69c3cfce67f139b04a959dd07eedf4024f945d06aace3cbb5e9009e6ae74aee3b732ca167f936ed03044ef25ed5c0f2ebaca44304b2e2f6d2b2125e9493a51cdc9e95e4e2c6ac84dce8599a73fe590a2b56b3943a7059098fe7b39446685949d9932ca529d82c25274e56426b2fb394161c66294fd5c964c697fb64558ad6cd8a39bf95258dbfcc92c635652191e5593102f3b39020b2ac388118594905d66625b9ca222b05f3d15971b662c842f71fc84206e459e8fc5156cc99812c857e5f1658f09fe59b8ac98adbd9ce528caecc4a70c49385c49e78ed79acf5825988032d2b46e72e2beeb280ac84271ab29208dbcdf2ac4f4b6c056e56025e7c2f6e62ebdedc1d786087c2dd392787eec0d3bbdaffefcd7172e8e6387d280907f13eb6d3ebce363d094fcbbb1f19c0aece9e48b47e395687bee64bb35da534a7f18ae61c4e277ad3b2d46b7bfadb6d12c950327dee8e604a3ec7f4a0c54b5bac2de0e691c176368cd1d9c0149dad335c3afb0689ce21a1a47314a033374874f60d259d7b83cade2f4874e68692ce624067ff20d1d92f94746e06740e08129dfd4349e75640e7c020d139209474de07e81c14243a078692ceb7019d838344e7a050d2f92da073483a4641b403b4fb8c82a6592e7d7b99a4af214bda753cfadd4395b68b080179d4e925c8db3b1d5579315a99a1f874cc33d01c9df54cd1d919e8e2d020d1393894743603740e0b129d034249e7a3a0b20f0f129dfd4349e74d80ce7d8244e7a050d24940651f11243a078692ce8f81768e0c129d7d4349e72240e7a820d1d92f94749e02e81c1d243a734349e73a40679e493a5b90d823726f451f608ecac6a6a8bc1f8cc6c70485ca7ea1a4b21798011a1b142a734349e58b402bc799a4b239a772210f35f09fd5e688ee9c03966b8ec8eaa688ec02881c1f1422fb8690c8ce80c8094121322784447e0bc63dfb9a24b23d71839e120dfea4ef97b177c3e7579f053a45fb9924b61d89d7c7c4ceb53658f1775aa63a48405f279aa4b53111d3157dedbf571371f61e7d9686090b636d794d40e0249304368d12388fbde0003961836922d1d8c4c51d80c4c9e9a8dc39ecef44c283c36c3327015aa798a415c68eabac200933b903418334b52ac74310ce682354d314957d41ef737f93548a48f181e99f3137a6870f013d9c960ef206a79fbc3f4c91f714206fba49f2c45a086cdce3adc446a7d08c55e391a0b9c90f1299834248e62840e68c2091d93f84640e0364ce0c129906bd97c6c81c01c83c2048641af4601a23732f40e6ac20916930f6d218994301990706894c839e4c63640e06641e142432c338c21902c89c1d2432078790ccd180cc394122734808c9cc0364ce3549a6b343423127b2d8fe88fa81e8ebe1f35776212e6907a7c3f7834f4678232fc3e73f3f1fe8dfbcaa75a33950d4f96b74eeb1b3292ad70237da7c9354f6e05496d82f95b0abd8d466aafd3f9d0c7326259c7d06a6933cb21f19c5fce945fc197c6fa42d55b159ca9b9aa2fc1f40798149ca5bc7350495e3320db6edc662df1e03e66041d00835d8be1b23f47140e8c2a0116ab0c13246e83d80d0c2a0116ad09f648cd0fb00a1454123348cf1c30f004217058d5083be7863843e0c085d1c34420d769b8c11ba1d10ba2468841af42f1923f466406871d00835e8973746e86d80d0a54123d4a06fde18a1770342979924b40e237409db75d1d9e19386c71af432198beca06521282ba94ad7080c78353a4e3fd71495a78071fa729354366054fae333a9c074e7d0b52174d075075a586a923a37429806ffa73d42d858353e0758be152609a43bb33a7b078fb4ff7676f876f721de9f9149ff0f1f85994007579aa450c4070bcfa6b372c2595f3181e4497defe15df5b30f58d27788495abb13bfc3b88081b9bbed8eb2ffa76d365db4b282ed2b1d6baa2d8cf3e905a0092a3349b6bb3d6eee6e14a9d91cd0576e923eb1c61c2e1190ef2a1de6e8f59da051aa3049a758f0d71799fc0dfbd2951340d3b42a1d9df4c48211c26821fb012a57a7c342e69241e9b790c6e8b380855c6392be3d48e5e1e20ce29ce8b08e9d56e038338ad8d2aa02a6ad8b18dc72b39ab9cd14b5d301b56babb692873d48e16f50c9d7a5b32b5f6c0b31130c2a710787c1aebc3107c738d0953fd424ad22262e876929a5b3c47e899e3ab12cfa529ada746396f44ed0393acc74751fc9ceb65ac14ff47196a23aab27695f539c73e49c1e15be7e663550ddd79b767e887ee67231e46223f7b06be39980c2c3d341e1a0dd8ec2e700854798a4101e3bb592780fa54a1389c65aee8ec02a1e992e12ddf3a3ca8973ce5eb8b731790668e28674b831b0399dcaa7fc180c7531466757d0ed392a48741addf1da189d53009d4707894ea3db8c1aa3732c18361e13243a8dee8b698cce5240e7c620d16974d75663749e0ce83c3648741addfdc0189d57023a8f0b129d46b7b73746e7e380cee38344a7d198606374be0fe8dc14243a8d6e6f6f8cce3f019d9babd221ec0d0d34e8b934165fb42718569e900e2a31cdf452693068d518957701ad3c312854f60b2595d5c148684b50a8cc0d25954f03ad3cc924955d893fcac8bf4ba6b3f8541c7b2daeb2d8238396d45828c22b80e893c342b4c1394c63446f01449f629268f78cbf9cdd2850611771e93bb52a6d2b849b17cadd3b26034d3c2d1d54c2edc6279229641c99ca8459647fb4361d9e7963546e015a79ba492a9d1974b834651edf6778149f4777a0c6dad7221ba2308416b23e20f30c9364c6dfad1d8a0f776b37d8f0d0434c8dd0da1e8c95ce3449ab08f1aab0db6bdab6abb4e8467ba9c634f65040ed5941a5d6e8b0d418b537026370b6e9ee521e6b8c0ad82eee153640f84ff56d0ce83bc7247dcde27497444ee7995c809a1d31b5051f18d19f6bbe7d57391cd91899c656f34e033a795e90c80ce39e47530099e70789cc30ee26330190794190c80ce35e47fb0032b70689cc30ee22331990796190c80ce31e47130199170589cc30ee1e330490797190c80ce3de46d980cc4b82446618778d190ec8bc34486486714fa3bd00999799243393541e48aaed056bb07d37b617ec12e08bbf3c1dba8ac584f8436c0c5a51630136c380ae6e0b129906db777371c880cc2b4c3be0c42cd1eeb3814f6f40df9526e96b0de8abbc450a0573cff10df304f0fb80d0ab4c12da0410ba7bad683b0350787555da47ff1c7a180fae6b025aee6b824466180fae6b09c8bc36486486f1e0ba8680cceb824466180fae6b04c8bc3e486486f1e0ba9a80cc1b824466180faeab05c8bc31486486711ba9ea80cc9b824466180faeab01c8dc1e2432c378705d2b40e6cd4122338ca1af7b00326f49c72072e06e37889c4a5c0a6f3549a1da317606b5d1d822972b40f8e06dc1f6ad1bb49cc67ceb04046fdd6e925ed9de8689c7671a1caf1b0b2fbc06d8d13b4c522b7682cd25bbe74eb04f021370673abcec7d6d4bb9fbac0afa00d0779749fae0f652ee5216b81ac3f82216633a783a68d1ef4e478b9e580f338cdea2fd0195f7a46bd647e8e378d68abb333e34827d0a5f2514d6adcf260142ef4d877dcc650733a4d93e1a8b5fff03d8c71d26e9133b78241ebf1ec6c8a23d009df70589cec1a1a4b321a0f3fe20d139209474de0f6ce50341a2b37f28e9dc06e87c3048740e0a259d7f013a1f0a129de13c1af14d40e7c341a2b36f28e99c07e87c244874f60b259dc7013a1f0d129db9a1a4b30cd0f998e961251d9b4fb5ffa620f45401fa79017bfd50e6762b666f4c63a2390ba68d115a688ad0f180d0c7d3e1f2a0e37467d31367385944c6b28f1c66c23c42ff0f50f984492a1b1271445ddac7e7db4c917734206fa749f2da92448f5ff21e6b637072e23f53a4ee05e67d9e0c22a906c35d8d91fa2b98f1792a88a41a74171b23f51740ead34124d560f8ab31527f04a43e1344520df6408d913a1390fa6c104935180e6b8cd44980d4e78248aac1e04363a48e07a43e1f44520d86c71a23753420f50593a4f624de5d6217b215948e3007306a97b0c0197834bd98308609ef0ecb596f05a4bf6892f47ea4f2bcbc377e69b4fdf772fb3ffa6f2723d42fb0886d3d49859d4ce8e0750d4b6299adfbab49117b2b9f8dcdc404b5c142d8d75421e412b7105e4a87a700f363798323c2b8626e0cd0e7974d52e9c63a0d4cbfafa0b729fa8e02b3a5af98a44f6f1fcf308633be04a87d35a8d4f60d25b59f02fbf99a496ad5962f183d1bce9805dd0ac87c3d48648671cdf18580cc3782446618d71c9f04c87c33486486318af40240e65b4122338c6b8e8f0064be1d2432c3b8e6f84840e63b4122338c6b8e0b0199ef0689cc30ae392e0264be172432c3b8e6f82240e6fb4122338c6b8eaf04647e900e0f52620b66c378ece329609cfea1492a133fd5c06067ddd8aa903c1020f191491ac52a2595d8d1306ec6bf0ee8e5c74123348c47451c0108dd153442c3b829ff7240e8274123348c47469402423f0d1aa161dc9cbf0c10fa59d0080de3d111ab01a19f078dd0306ed2bf0410fa45d0080de31112c580d02f8346681837eb5f0608fd2a68848671e14d0920f46bf3034e1a2cb6d6fe900abada7e79215870e3eee91dbe717b67e2d2f88d491a3389ee4657061b26631b5df5038135df9aa4b73ea7d739bcb984053238d8c5c4e089c3d54d1147805e7e6792b83d8937acb182c5224de700344cb1825572957810839a6a2c1aa41ff03c7d6f92f00ea821482cd4c66077ca18b92d00b93f0499dc306a6e5340ee8f4126d76037cb18b9ad00b93f0599dc309ea4dd1290fb7390c935e80634466e3740ee2f4126d7a0d3da18b99d01b9bf06995c83fe5663e47607e4fe66925cbddd71c36871c781f1d8efe970c3d0dd2526b1a50dcb7c4b71f2eccfca588a61de632287b884fe916e5d95afe9cb67ee181ab3b288c12d274697a06f3345ed206006fe3449ad5894435dd5695f9463acaa370355fdafe05a51833100c6a87d0d50fbb7496a1b90585ead7273d4d531455d04d8cb7f4c52378c78fd5ab41ad3754d0ec068a67d54289a81123b21ef125e47e862225cdc74972977596f21d9fd96f4ee003afdafc98289b7d576f88f4cef0174fcbf74345c745fe8dde77cdac5803eea600f40976a34a18bcc57328d754c8651cdfcc314b50d4097ca32496d2b09b5b12ce6e0501e44dd18d01909129d460f673346e70040674690e8343ae9628ccec1a045af16243a734349e74180ceea41a2d3688495313a8f0774d608129dfd4349e77980ce9a41a2734028e9bc0dd0592b48740e0c259d6f023a6b0789ce41a1a4f37340671d9374d221f234ee38a19bc5953200e70ca7f0d1b6077169ab6b92b6cea4f2115863c85a42f7d95b45844f698afd7921a1117ed3983e163282a92f2a0d1322c6022af70424d74b47554ffc5ca730ae8eea00c27ceb0789cec1a1a4b331a0b34190e81c104a3a1f0495bd6190e8ec1f4a3aaf0574360a129d834249e73f80cec641a2736028e97c0fd0d92448741a0d213346e77c4067d320d119ce65e49b009dcd8244676e28e92c0774363749671746e704fba5a9844ead15f24fa9c8fe8566f3f891c1a3d8eececbf89b63ed6b910d6e70998fb1216916a0b985499ae3ede1ecb5a70617951b1b783e049c222d8342a5d1f5f9c6a81c0126e25a05854aa3fb371ba3f213a095ad4d5209036ee9d9781536132b6d61a8459d499c53f20a992d2d4a877fc998c5ac0016b38d49421b13b1557b6e5584d77436456035e002696b92c06e8cc0310c80e6ded1bd4206430f1bcc6331780168dd8d51dd1ce86a3b93547722de60c74584c6d65338ef22f37ef6df94f082e835df065dc63a5e46239a5e37b561dce9c0beb63749b1b31f243c5bb4caf4d55863d506e8eb1ee6db7d672ec9699076372a5b032a3b5465170ac2193de0cdd82ea5434115cf34496553d085cab31f5051692c683edb9a6359a8bb4dfb8256bfa3793be990b89a7593e819cd0bd89cbb78294d5d28631ab91654ee4e26c96c08c84cf3ba2463e44d07e4754e477877728705857155f245a09277092ab5e15cf07d07d0daaea61ba1892cdf4ed3b3824585d0b3eca87fb42c1d9b6d196b849a0012bba5a311c2d618793b45034379e2d22da0b2770f1299613c71e95640665690c80ce3894b970132f70c1299613c71e96a40668f209119c61397ce0064f60c1299611c975f0ac8ec152432c378e2d2164066ef209119c613974e0764f6091299613c71e95e40667690c80ce3894b3b00993926c96c472a2f4170878e53c8227b9059c0e0c5745c98171dfc445c5afba6c3db9ed8415606bb48c6a83c0b68686ed54e5c3850d4716c944a63d3bf8781898b7ee988fd5009980de361562700ddec1f3442c37898d58980d0014123348c61b3c7014207068dd0301e66753c207450d0080de361569b00a183834668180fb3da0c081d123442c3b87dda9180d0bd824668180fb33a0610ba77d0080de361561b01a143834668180fb33a16103acc7440cd04ee5d2ab63fa1e187f465776f4f63e40d36455e57e292373c1dd14883d21f8d642caee34940de3e55e9ee98627fb294d01d422accba3bce3545e5abc0dd31221d7a3864378a8a7b03e8e14893e4893d63736df1761ffa7e070dc828f393144b98ef9c7eeaec85e42c6b59657fb8900bb4882d12a09bf9842f4cab2ed0c5d1e9de80572590307ccdcd286023f3d2d1dc24369916c6588e11404bc704639b68d9c91b06a9dd668adabf81968e4dc7ba35ef4669e524d10583c6672c8dcd0dfd00b4775c7a96b1d2f63eedcb588dcd53ae052dfe789304b695547face33e92943142d799adf83b2d43a43e0c2afe8420926ad0b9618cd46700a9fb069154834e6263a46e07a4ee1744520df64e8d917a3720756210493538256c8cd49700a993aab6cb1ff6809a4ea0cd9f5c95ceba3c36085dc0a93458d5bb99a27203d0ca2941da917bb0c9401a73c740821d93a60689ce21a1a47316a073ff20d1d93794744e03957d5a90e8cc0d259d87033aa70789ce7ea1a4f31c40677e90e8341ad3698cceeb009d338244e78050d2f902a0736690e834ba00c6189dbb009d070489ce41a1a4b30ee828cd4ac7e22c7cb586773e298c2bdd2e04ba796090c80ce34ab79b0199070589cc30eef5711620737690c80ce35e1fe70332e70489cc30eef5712c20736e90c80ce35e1f6700320f0e1299618c0f590dc89c172432c3b8d7c71a40e6fc209119c6bd3e2a0099054122338c7b7dac02642e08d280d2e80179c606949dc080726190e8347a7ca3313ac7023a0b8344a7d15d388dd1391c54f6a220d169b4f36e8cce6580ce4541a2d3e81164c6e83c11d0b93848741add4bc1189d17013a9704894ea367b51aa3f34140677190e834bac9a9313adf01742e0d129d46cf6a3546e74f80ce6526e96cc2e91c60ffbf9c275ec0161f84fd5482edc4a5b0a42a030d5dd19d6507c6a834b6b8e0541068b8dc24950d88bb0066a4fd337db18284f9a091a580ba5293d47596d845f9b2acd136c8723bd515ec8ebe9da640eddea648de06ace58a30906cd04d678ce4cb00c92bc340b2414b6b8ce40870901c1206920d4e851823f92ba0c9656120d9e0e49d319287034d2e0f03c9068709c6481e0a48ae0803c906a34d8c913c1190bc2a28c73f1b75581b1b48dc0b2cefeaa05069d4bb6a8cca1e402bd704854aa37e7f63543e0fb472ad492adb13efb9c445642da1ab3aa7d81f14127a9c194eadc121833162570062d7992436d3476c09d8ccdfdd9228d66c7f180327e6027a0f0d8a0930ba24cc98a63e0aa83c2c28541a5dbf648cca49a0615a1f142a8d068d1ba3f26ba0958757a50bdbbb1ba3415b696c37c6fec00f7b84492a3b322a27d82f4d638415d92fade69fbbcd51959df06eccd15d9bb8041f6992e0aebeb6be820d37fffff861bf014661433ab6c6eccb2607d3bc35a6319bba011882a3aaf6409fb0f73f7b004d3cda2495cde25029726a74f62a3b62ca72820ed3312669accb6e56b0bc2fb28146daafaf23f434edf035371d4073b3311d434ba87bcea6acd3491ed98fb5e0e5f68bceb3a96ce8b98ed0b1fc485b8262b3defba6a6e85d08aaf6b1e9d84db4822cb17f2e276a3bde1aecd41bdbf3f65ba0b9c7a5c36a629d7ad76a1a6c7c8c59cd6f403b7ebc491aebdb3753795059017136b99ac0349356fbf059ce4640ff3605e77048834b678df5252f073ab8393887431aec0419dbcb6e1d68704e488755cc895ac642366c74f7504ec3e8c658e57e1654ee134dafa5a384e5b1848bd8a705ecd543c196d4d3d8af74eb7f83b17b8b4d91b92f20734b3a827073d8dfce759afd6331a336cce18f9b01852799a4b01ea0d06121cc0738cf020dcbc9c13986c760c362ccf17b3168584e4907953931e61fc31d51ff01a8cca79aa492fa922732eb47014a59f3521e42576d3b40d869e96840fa93dd6d15c7e180c2d3d3119b41abef18365e5ec58498687fb290756da69035515da4ce8a95a16e99f703c49e912ebb584456136716269f3121bcdf69d1d179a6a87c1ab4d667a6e7b0b29cf4cfc8985beb06e83bcb247ded887fe69092e61cb433c11ec9c89c1303994d3518e55edd580507d30a67a7635b15aa93e3189993edbf8b58449b7b5a5179a83be4ab808e9e139c83cac2b8dfdcc1a0e139371de762f6df8d6ce5f180bcf382737a46183d8ed541953e3f38a767186c6a8c9d9e713418635f908e0e103dea36ed67b719d3c4df41a5de9a8ebd13123d3f7d88c98a6decf4f4d6a0625f18243a078792ceba80ce8b8244e78050d2792fa8ec170789cefea1a4f33240e72541a2735028e9fc0ed0796990e81c184a3a5f02745e16243afb8692ced980cecb834467bf50d2b911d0b92d48741add7ad7189d2b019d57a46314542527581b736d1c08e8bb325dfe4a07447e967a9887947f0032af4a8f2e56819bed0f53f4b5030e8dab83b49be160932e5f63553b0b4c455c13243a878492cee980ce6b834467df50d2b91fa8ecd705894ea3e70919a37325a0f3fa20d1d92f94749e09e8bc214874f60f259d57033a6f0c129d034249e75380ce9b8244e7c050d2f901a0737b90e81c144a3aff0574de6c92ce5a0cc0896ea39f51e4f005b9d4202e5db70467c7ec30ee7cd5054c9add6a92caee122abd2b684713ba03c672f66f1ad8ba8a418e4122310d926d2cfe720cd0dbdbd2b32346ee6e1453b43fd0d5db83b26193d1090a63d5fe0ed0e0dc11142a8d4e4e18a3b21a7072dc19142a8d4e4c18a3f249a0957705854aa3e106c6a83c0068e5dde909f51f92fea6c6187d758126de93ae15b54e4c3a5dc7b39805fb979130afdb39077476ee0dcefe5583cd51692c127d5fa08d3b4c52d99cd02d446877bb907f349d604be60dae733456ad6b019dbc2fa8bb05196dbb8ded16b40274ceef0f2ab5463bebc6a8bd0e68ed0326a9ed041aa385cca1369a5158ca9aa389c4bbd079126b9896d870695b316eacb1ba0b68ef83e988e9486cd9543f93e750186baebe06fafa5090c80ce32ab4ef01990f07894c8307281823f35d40e6234122d3e0d68bc6c8fc0a90f96890c834b832cd18996f03321f0b1299060fa73346e63b80ccc783446618374f7e0d90f94490c834d8953746e65b80cc9d4122338c6e915ea0d3fe6490c834b8dbaf31327b03329f0ac61ee906db7163bbfdb6037ef7a74dd2d89aa82fa43258c98d2d563910e8e5334123d460453746e84180d0678346a8c141a53142c703429f0b1aa1060796c6089d02087d3e68841a74c81923742a20f485a0116ad029678cd01980d0178346a8c141a63142f70684be143442c3b8c6773820f4e5a0116ab0636f8cd07d00a1af048d50834e3a63848e0584be1aec83910cb6f9c60e462a023123af99a4b729a97c2600dd292e9fd1ba2c1d314cc6e245da001d7d3d381ea6c1a19c16fe1b90f94690c80ce3b4f0bf80cc3783446618a7857f0464be152432c3382dfc1720f3ed209119c669e1ef0099ef0489cc304e0bff00c87c37486486715af82b40e67b4122338cd3c25f0332df0f1299619c168e8091cf074122338cd3c2d500991f06e7104e837a696c30b90d54f28fd2714290383e842ea9a68ba8a9c8f4ac8bb531880de31af64c30e7feb1e9e531f1970d3a27b1186c868c9dc4320110b92b28441ad4486344d607447e6292c80e8cc87c9ef32964119948dc13fde88691f3b80b8e7a3917daff76a0c7dad7221bb2d01cb9c60e71a02882dc4fd3b1d2a8b2e33891b546061d21c6561a9d0a5afbcf4c52db5142ade324a6e495927dd9ee1f2b634e7c84719e3303e8eee7c1399e298c4ebb3c40e517e9e8e68bee94b33c76f7ea42b5070dd697e9d92e60a0cf00a461f9a031bb4980ddfc2a481b940f09658862773052fa3a48741a1dc31ba3b325a0f39b20d139209474ee040dcfb741a2b37f28e9bc0dd0f95d90e81c144a3a6b83cafe7d90e81c184a3abf04daf94390e80ce7e2835240e78f41a2d3e8a22d63749e07e8fc294874e68692cef580ce9fd3ed599a615f9d0d79c73018fa5b11df1475251bc53bdba01a5d1767eca09203c100f31793d4d29ba9c4d9143a7c03c98640037f0d52851e12caa0ed76a033f45b90e8341a8d648ccefa80cedf8344e78050d2791fa8ec7f0489cefea1a4f37240e79f41a2735028e9fc13d0f95790e81c184a3a5f0774fe1d243ac3b91c6b0ea0f39f20d16974fb2963741e0be8fc374874e68692ce43009dff99a4b33111073dd06557693f63d5d87ca4057a9af4b8972adb3c3afc21074782b949cb2495ed88779e9cf2b08ad09595fed972ffa14d066935b6636c2ea0356292d6e63e5a8b63841e84f1a4828ec03394111422c318c37105d0c86ae9b099586c9157230dae613346e5aba0f9a96e92ca6e3e9d5c402a0712261e7268506b8d793c6b82ea5fc324d539959a278cc872056ffc48fbfd32b6618051ebdbdb14fdc300fd354dd22f0e3a194ce6b10734f102b6af7c9afaaac602115f242e85b54c5228668d84069733ada5ddabb19cbca2ddac495b0a9ab4da55390c8070f342b92c3b0f5059279d4d5a31ef23d0aefe42a6a172db3a8e034cb12197dad785ac5f61506b479ba23a1bd8d4ba26a956df2a684828f7006d0f74b75ed0080d63a043074068fda0111ac63d409b02421b048dd030ee01da0210da30688486710fd0d680d0464123348c7b80b60184360e1aa1617454ff079c2e4d82466818f700cd001ada34688486715aaf0e20b459d0080de31ea08d01a1cdd3e13a49ee3c4e83edbd31bfea83c09ab6082ab546b7533746ede3c4a5b6653abc5289ed89134607df49404b5b99a432f153670cf6458d9d3a330d789c5a9ba4512cdf1eb45b459bfc0c2a749baa75333b50258c54838e90cea6a83c06b4e86d83d545ca0da5ef7311b090ed824668187d9f8b01a1ed834668187d9f0580d03d824668187d9f0b00a11d824668187d9f0b01a1994123348cbecf224068c7a0111a46dfe71c4068a7a0111a46dfe75c4068e7a0111a46dfe7c180d02e4123348cbecf7980d0ae26096d48c41a91dd67c3b57ce292d7cd24799944f7f02883ba69ecf0a8f96014dfbd2a1d22de603083a3a3734d51d904b8e6b24c5209cfe12a619e780a54ca74314d0e3a63d57d3db0957b9a24b1958744672765d9c445b823963f04d6b3473adcc5fdecff769fc6a72db08e3dd331b556b9f1496472cd60c3638cda8980da5e26a9ed42bc51ca25f6ab8bd972044addee1ea1bc3fa0b977ba35584e6e3e330734547c11835b6eb6bddf668adafea0bdef930edbda972da949b36d35d634bd0f5afaecaa5cc408e1e685f2e89e05a095cf3149654b4925c7a934bab990313207826add37486486f120bec180ccdc209119c683f8da0232fb0589cc301ec4d70790d93f1d7e25d1ffa49df742329538874b08126112bbc3a619dd41bf73403ac6f198aefac934ba1fa3313a9b016d1d18243a8d86771ba3736f40e7a020d169748b3663740e01957d7090e8343a01678cced980ce2141a2d3e88e77c6e8dc04e8dc2b48741a1d1f19a3f30240e7de41a2f3ffbabb0ff02aab330ee0275214155171561c889a0691910dee105664242421a88810324c241024240cf75ed54aab1457d53a7080562d75d4d62a5aaddbba67eb1ead7554c551b5e79cef5eee3fc9bd10faf47feefbf2f03c64de2f5f7e39dff79df39ef39e97ba35308df30ee0dc5f122775f3551ae7cbc07980244eead6c034ce0f81f340fe5a9032fb65179d5fb372225d254d69abe6fb9804e84121da67d7b7fdd7b83c712f08221f2c8973a84aceed80b3481267be4ace07e1621f2e89334f25e7adc0592c89b350256737b8d84748e22c50c9f91eb4ce919238b355723600e728499cb92a399700e768499c3ad3621601e798742e9b6d7fa11353b66829d9f7c210b3440a65ae4aca8130ad7188144a6a22218df24d689563c32ceeda90b236de81fbe3b810292fee07d7fb76183ff6ecd8b7e85b9a900178e343d44918e29fd775665ed2105c843b4f61b06d1c8c702684288892bad3832b89712779e2da8e873348ace7036b698804c1f8d299681f9a46d3b1ca0c3e6e34ee8db41b3cb7cb425cf05deb4dea833c189eda13a5406a6c91fd01b25c0a2471012c0db209202ba4401267226990f5005929055263c5a373007292144862fe0f0df23880ac9202490ca6d1209703e46429901a83168b01f2502990c4842a1ae42d0079981448e29e8634c8150079b89cb24e1af3d2f281724a88ec1ff72debce97cc67de2969987320847184244ce2f39b86790c604e958449ec55d230a700e69192303596c2ab05cc699230353e80aa0073ba244c8d89d19301b35a12a6c6c4e89180394312a6c6c4e8d1805923099338fea161b60066ad244c8ddb9ccc03cc3a39d5583406812f03ca7a397530884f72da228393615c7e94aced720b55d6c17809da668334508d75305e06d04669a01aeb603c0ba0474b03d55807e379009d290d54631d8c1700b4491aa8c605ff2f02e82c69a01aeb603c06a0b3a5816aac83f12480364b03d55807e329009d230d54631d8ca701f4187652c048d366eafc2996c402228df6c5d5f6ad7b190d8f9651e1b6f888e3cd9553a881d80e69851ab682e5d62d4cca5d4cc782c95ddf119bf84cbf86057b2ab4d1794cd83d4cc73ddda3020ea3ccdcd8b7b803baf4a9b5c741354e764c8378536ba80a19f1b7d1a98c339d8b8e907384683b1cad8287525b881ca1789b8dda679476556246240d3017983c6e2bedce62ed06f7d8f9727677d73821b73fdc5517302977820b3e9e0e58e10f36c7b64fb7e3966bb3953119cd8981ab8174a1dcaa18c4d64aeb037c0c8fa745612a0e0de9401c20717a208baf27f01d1b82cf154e0ecef7038bef1b789a1f97ce51d208e38a33cd88cd6b129fe0992cca45d0128f0fd93172f9bd553ed3b7d5e3a51e7c12596983cfcda1637442889d11d27079d3ba42f7c273fb44269e1b6e741ce58cf79d9d06fb22e2c6a334badd81ee2439c543b2552eeb9a0bf7c69325616a5cd6d50298a748c2d498d8520b98a74ac2d498d87214609e2609536362cb618079ba244c8d892d4700e61992303526b64c02cc3325616a4c6c391430cf9284a971aea71430cf9684a9318e5e0998e784da56afd1745e7c10a8a83c6d29c20408b29d2ba9c6ca50e6b39c3603b92744847e2a8973984ace31c0799e244e6a4f93c6590477cdf32571e6a8e49c059c3f93c499ab92f33ce0bc4012679e4aceab8073b1244eeaf61334ce0781f3e792380b5472be069cbf90c4494dbaa271ae06ce0b432c35186ae25b384713bb414641b4f9f12f4d82efa274ae706b9f1aa0716fd7e930a05c1266d14b1a5a22ed429e0c2df19752ca7e50a397b4967837dc13974aa1cc5549b92b8cc32f964299a392f2096895973029b7b51f94d90f5aedb7d5f943cdb6dfde60e6fa474fa359e463988dfe237df7c9ee709fbc94c9b89be9bc90bac4c552fcbab5469f9956640f56eb570057c79609d61acd79148d807b9994cb9dbaba8876b9af82cbfd722994b92a298be021f42b2994392a293f805679053f67a2c2bf3c79e2c98656147e47b8775e19a6d85c6187d61a60fc436b99a7c0f0f12a26dfd6f05c2f3151164fa54f3d9da9fad9dd13007f1d221d2a91105d65358aed49d7fa3e65fced70fbcd0df6456dbeafd9eae7cca95d77da5cf985407bb5545aea589d467b1bdc35af61d2f685cb7eed89d055feff4653ef1f46ba3bf42ba1e55ecb1e74aeadeb14ff4da9f93e83372231f6801ee875215a293246b7800adb891aebbb4b6e541f7daeccb83d1316faf65a64cfa0d1508b306dc36aa533a057ba4ceafd95dae1a7dd5fdf871bc0f55269a9237c1e2d3cba6e60d26699f6b995ee3135df5efc753efa141dc69d7e9b3d440d04f736ac6a966fc04de24626f7ee9e7b8cbfd3961b97a65a170bf7d5fa43c577a449d30096d657d80cdaf34d7276e6d658c3ed0ab8eb2e0fd1ed4a35ad5cecefb573b9977c19abdbb5055cf22bd259c12d50b1efcbbb9120aba0ff7a7398b9f99cf0b1295a68ef0bb89c6f09bdd34cd7bb51c43b25ad13b50c2ef1df84488e69bf2f5234379a982dd53ddadf079ee0b786d8131131d7dd61d20b7b38c0de166abbbee820a976edd27c3fed03f7d3db999cbd4d7c7ba969fe13ee8757fb161b88909607b71c5ae46fe56ccda771b785a940b99249d96f3d282beccf740799674aed7bf1117d0bb7ff59ceeac8f782a7fcef42ecc21d0f95ccf1e19086b5b6598d39c59f03e81d6136e82b08dfa1a76dd0d70ff8ee0c35eb848bc8ba12bcd3db5dba059eef7785e82e7575d3fd612aab6cec089c774be21caa927333e0fcbd244e6add561ae74ae83edd2389334f25e715c0f907499c3a2b147d049c7f94c459a092f351e0bc571227756b201a671570fe491267ae4ace9380f33e499c392a399b81f3fe10613a5c9be7464915b11193de91501b10ae4acfcc51b4702cd7feef0697d56bde56da83cd34757ea8496c9d2fb0624acfc018fe01266da6691f539a613a4fbdadcf32327d937465307dfca094041cea139fb6326425b4da3f4ba1a43eed69945f03e5435228a94f7a1ae5c340f9b0144aeaf89d463901ee957f6152f649d2692af7876af673ef1dd31a3477a38e8590dd23a1ab6775842cf6cff2d9617aa6b4765a00a48f86e899ae8d345a37526d4fafd4df141686a0a5cd2ecd07dac7d279376d3fcfa971f3fe1278303d1e6a081acdcfbb032d885de49aab693d6912844f847820e1f286e465f2821580a2a17e0797f893e1b6a1ae356e8f914481dc9650ad93f6187a04209f0a7581635dcc6a7f40cd4ff2c140f8748864034758b7a6327bfccbda57d43d07f7c9bf86cd944b7e971c1d7b41b0bb65318b7610d03e233509913a72a785e62ae1e27f562a2d355447a3bd165aed73211e4d2ee8b161ad52de0f089f0fb3274e1af604a5e5c5e703df0b4cbe6da0053625891b692e74f200dc215f0cd306f33a8cca35f35500df4b2112b4ba966890a332d5e06eb8a05f9684a93136b40a305f9184a9b1b0e39d80f9aa244c8d851def02ccd724616a2cec780360be2e09536361c73b00f36f92303526612d03ccbf4bc2d458d8f17ac07c4312a6c6d2f6cf00e69b92303596b67f1630dfe287d8d6b6dc204d5b4ed1a62efa01eddb32b6a724f63769db538e843547efa477c14174a8264f491ca1d3b6a63803161cbc1b22537d7d125c888f225a12413ec48fde93064a7c1cd1400b01f47d69a0c4d0070d7408807e200d94f838a2816603e887d240890f251a680e80fe431a2831744c03cd05d07f4a03d5982a9805a01f490325864368a07b03e8bfa48112c3c834d00100fab13450622899063a08403f91049aa3f41eda17869e9f8658a810650c39850a7fa83946f332d812688f9fc9aed1417c20d1d622ed0badf3dfe98c31b55f0e4becce2f6551ee04e1bacf43ee86581f0b25d79ad459971a732eaf86b6f945883b67413a9619d2629e9f9904df9772b73727864268abe7ae8496b93ac40447f69ac938b7b9246e2619a085d2f27f9f8216fa95dc16aab18ad143d042bf96b467d23095d31d99d00bfd4612e750959cdb03e7b79238f355723e04f7d1ff48e2cc53c9793b707e2789b35025e7c670b17f2f89b34025e707d03a7f90c4492df748e39c059c6eb19918ce5c959c4b813343122775c5278df358e0dc88c9194f15c47d14cafd49b49a26a37b4fa4b1f000eac644dcd224f22d03270ad296c99e0c2df0474cbc6463f4e43b28b8a5b3b3ec4f6df61f454b6889b1f7af59b48740c0b83b93365ea1c85ddc23ec3735dbe396192c55e2b6e47507acf6075804054b5a425cfab408d35068bd1b87781ca57a180db72f6d366e016db50fdc516b6cd0387b428bdd441227b5020c8d3307387b48e2a4eeec41e32c8498e7a69238a9797034cec9c0b999244eeabec634ce13807373499cd40d79699c4b81b3a7244e6ab9271ae7cdc0b985244e6a411d1ae78bc0d94b1227b5dc138df33de0dc5252546998ca4c8ebe1010d94a12e750959cbd81736b499cf92a39ef3709cede9238f35472ae00ce6d247116aae4fc1e38b795c459a092f34de0dc4e1267b64ace1ae0dc5e1267ae4acef3817307499cd40dd4689cadc0b92393b3bf69bf427e8e9ff4a8b527e0d20be2bf67628b73fc61f8a38aec7b737d9e0775057d733712787f0830ff98091eaf675063926f18d47ecca46f0a791be8e2ef240592b8a08106b91540f69102499c3ca64116c2bd746729901ab38c0600e42e52208999c334c88b0072572990c49c761ae47080dc4d0a24b1bf4983dc081e367da54012f752a2415e052d72772990c41d6a6890bda045f69302494cb6a641f600c83d98903b98758dccdbf7243576816e04cc3d25616aec98df04987b3131e33b2a746d84a3f1b1731d50663229334dfb78d10cd3390b787dea62d1a869f9c2c51029fa09937a4807ead69490a94be8755e001e285047ab2d9c01fc5921eec05d5fa7ac6fb5481eac16e92f099318f9a4611600e6de923035ae63ca04cc019230898f2c1a661660ee2309931873a2610e00cc8192308991501ae63e8039481226711040c31c08988325611223a234cc418039441226310645c31c0c98d992308991511ae610c0cc6162ee623a67ba8ff17b7b8eb2ff377ac65afbfb36fb03bbc4ed20d9ef34d8269380cd65c2ee6ca23a47cdf69b5c1e316e919ab61a47b48d533701d6bc104bc35285f9f070f49de669db0cec05977f3e9333bed7a7db0f24f82e0db448e9a6c057c0e4ebe57f1b77b79ce94fb3c52b1ce5370c702fd217f9dc162ee4c210f1fa544ff1f617b2c66ac307402b1ccaa45cffcdf875ee93f8254c800c9306aab1cad66a00dd571aa8c62a5b6f01e87ed24035ae917f1b40f79706aab1cad6bb007a8034508d55b63e01d003a5816aac10f31a801e240d546395add701f46069a01aab6cbd01a045d2403556d97a13408787d855719e6930ae00f9faac63a22619d2c6f32b80b6582a2d35bb98467b8f49d08e0831e1d1b5986721b35f4a0b96bc03ed74a4244c629f9486f91e608e9284a9318cf70a608e968449bc67d2305f05cc31923089fd501ae6e38059220993d807a5613e01988748c2d4387f791f608e9584491cbfd3301f02cc71923089734834cc0f0073bc244ce2fc110df343c09c1062b2b86b99721ab70b580a94a54cca780dcd5490f1df94ba08d1ad15a4304e84cca1b2f42e5f880ed5e429895d755ac1dcd360f9c24459514e9d750997c3255e2e0d54e3f2859b01b4421aa8c6e50b970368a534508dcb17ae04d049d240352e5f5806a055d240352e5fb80140274b03d5b87c6131801e2a0d54e3f28525007a9834508dcb172e06d0c3a5816a5cbe7029804e6182f6359d079dd12c7b851961c6fa7ca216fb8dd1e730e3a8c89e41a3a12663d3728b8e8481e8114c5eacfadae6d35f5c09c819b131bcdb37999e12b3948538df2410a7a63330526a5f72b47dcf6d3d4d0d8cd028b78318d391fc10728d5f24e37eb83bd122fb9285f6bd9a0d24df2813dae5b410898398e89a2a3b939ede4abb57e601e77426679f249c95318752536f69abfdc12bfc0f981302359385fa05a05687c9c6ccee700fd59c8df939748f66845882d8b97bd4954588c4c126edee7910748d6a423cd5bb369ba971fd47115ce4b521765cf85f16ca12a3f4b4367a25c0d6498525ce27d1602f01d87aa9b0c45b010d7612c01e2515963892a7c18e06d806a9b02af7ab05d846a9b01a3b58d9007bb45458e2bc130df602809d29159638434a833d17609ba4c26a4cf79a09b0b3a4c212579dd0608f06d8d9a1e303c9b754aff4c11637d0adf7879bc5edc95e437b7c41a8ba39c4cc14860327d8b70bec7beeb4db6291d679beadce36a362d1acba1081415a64eb19886ccd61f26e613f28f7fb31bae9bd52fb32d75ae373533438da2e8cbbc0257f4c88886a7e6c4aafc94a049bcca3dd311703df5c26dfcea67d798a467b1255c0987a628f383ca54dec55c2ddb2454e3455639a4d35b4d07921a6f5524d3777aee0a1b186c7006899ad923887a9e49c049c6d9238b3557296c12cd47c499c392a398f01ce0592387355722e01ce859238f35472de089c8b24715293c2689c8f03e7b192380b5472be059cc749e2a466cbd33837868ed2f1fcf851222a947c09599aaa26d0e2476e1c18e73d81c9dbcb24c2736ef4de142a04426b99c743e8edc410fb38a4bad0db8fd5a95d24da68fd07b86b9e240953e3a6185bc23df36449981ab705fc0a5ae6299230356e0bf82d609e2a0953e3b6809f00e6699230356e0bf829609e2e0953e3b680af03e6199230352e0b7f1730cf9484a9715bc0db00f32c49981ab7057cc1636ed2bdc3c147753a78b10f44b850448d89afbf68b19f1f6d5c4a619d87a8b11f8f338dfe55d32dc714fb6ffdfe0253edbf649fcfc8d8d29ed148b3c09e9efbac3b5ead3ff62cfb5577662d66c810fb2d67bb06d12bd620b2fc1c69913577898de5a6cefff485f675ee9c6bfd12887881ca564f92e577362bb39f6b356e9184fb092e4db2c17ed5fdc68d6611ac3fc9cae8e19dea4c5b4cc00166c5ceb5cd44c996c9522cb33c77592cbc93e59766c43f8a2fc870af9be4cf22cbaf401861dfabf767d6645c3cc39d955368f5dfed8ee91202c7f9b6e5cec495db2cf5675f678fedbe231119c9cad834f6bdd1df26fa0bb6c4ce24f52291ac8c9e9dbeeefea65149cfac8ccdfdf5d3ec7fdb7a6b914834cdcae86dbf16fd3e89cf269426fac500adfe67f44a726ee3fd5fafc11ebbd637d88c8cad636dd41d27fa6ab5fd5ab57f5bb9e68c07bbc5b71905f6bf68fddba0352bdfa2363dcbfe8b3e8a7f7eddc7742d74ed473bc735c38ce4f7a5a6ffdbb5b5aedf28ba1db8d7d7fb68579d3f6ac93a7fd375ff7ea9afd39e6bf9ab0cce717f8b0df9f73fd7fddd637f76df4c77f097c424fb978f0eee2e99b9f67d77522f8ddfc874ff2f7971c7eda9ff0600 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/7542269b29ccb314cb24b62fc63c7ea2.asset.meta b/Assets/SerializedUdonPrograms/7542269b29ccb314cb24b62fc63c7ea2.asset.meta new file mode 100644 index 0000000..d6aecb2 --- /dev/null +++ b/Assets/SerializedUdonPrograms/7542269b29ccb314cb24b62fc63c7ea2.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7efb43f29c1089f4d8a062198fe0d49e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/75f3b7bb830f4324a8b2f49814f3493a.asset b/Assets/SerializedUdonPrograms/75f3b7bb830f4324a8b2f49814f3493a.asset index 4870c3b..ee33e44 100644 --- a/Assets/SerializedUdonPrograms/75f3b7bb830f4324a8b2f49814f3493a.asset +++ b/Assets/SerializedUdonPrograms/75f3b7bb830f4324a8b2f49814f3493a.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5be9521b47109e15ac0e108853e2b013dbb163028615603b97130763e290c2d805883fae14c820885c4210497699ca1ba42aef9157c88324799ca4bb77168d7667b45aa11182582aed68e7e8e9fefa9a9d9142168397710f2edb6c832db3399661fbec9815e1db329447f0b6ef9cfa97ac04e5215cb3d0768fddf01989afbbc6185c57e1aecc2a30f22ddb83324fed9b2c07df57616c0eeeb0f6003e39e86574c3a00c7bca5eb0759632467d486cd3a032af33502e230ad727ec145a73c4144e6251530a2e9bd052a6b62360dae9f78afd44621d41db1e8c29b102d07c4d14a3bb703548262aba79d9c54b9c2f0c9f417e6ff232c63f86504679d9c3c70c09f740d75873d176c6f5f2fec3c23d9671a14f98977d425d5ca8c3b29ff71b11ee71dedb2eba09de6f54b8c77280d7275dfd9dfa948bef88708fed631c9ffbbc3ec4db1097906990f67f007d64d909b3b0d1f82c80993a23fd0d14498743b64ec15271da0a98c20910905849866cb0c216d982d44ac68db8c0f7325db3d0234f44c7bd53fce99902992bc03b27987819ea9f9187a091e7a1658ead4189a376d93c18ed2b17956d98b6006e92635b703d217abbc0b6b7a79f48e80eee311b40d3f6d623a871003d81fb0271b849d777c4698eb85f85ba0ac58e22448f2750bea7d9bcb297e0bb6cce2d0e999c47b9d3aaeaedd0e0a8e9294883dc5be46b1f3472111a41e8c3e3dc0dbb2d8aacbf7934f101433bc898940c6d1af3763aaaa95b6016e59e0d0f82c165f44a28b76f1bef8710d0ebc9224706d53d49125435fcf73f7ffc75fdf75f6f99b5a22d328bd2db351fd1ea018bf4a68ca487427d114cb33b8d8cbae13764f053badb6c23fc76bf3cf50bae803065a65a0518338c9d25cd4df633349480d539b6024c6489ed02673243221528cde5cf7ca348d3942801564021b86e3ca4311e9da6c37c89302549ba7ea2a91413922926da6ec5f847a27a8a899ec955550cbee408c61408faf1a042b04b8620ade80a5a11cc409dbd645aa1d63ce559ccb859a2fe02787ec3f3b1b360578d71907c4e0f006f899bfa98f79c495dc5dca2ca3479845ede9c053ebd22a65cd17152743bd8519946b7c434d268ad7d128bfd175e66cc2508da9182b829b3bbde8bc968cdf92d3e4ea51af6db44dd8414d46bc332f4e2ed8e7ba2e105c70f1f23675df8c9b11b54c43cbff955e84564868db6372451293de5bb0d3ba136eca88af8b0ca5e02108fa9888fb480788f84b8459b095b6d342a6c3b262a59e81bdcac701763c68d84dcae926457631ee1fc59505956af0c420c14c69b8ec9a6adcda4a986bd788cd09e0b98d05a95cce232cdd04ed7c18568469f46c61bd6c8046964ba8e467468a24f16c350139332c6ddf16b421dbffa658471b66bd290e0a69c54534ea8285f3f2fe50115e58fce4b7950461933dfc74cf22078c7e5044ba04e7cac3b05e5eec0fb90e10efc0e5b6339527c051e16b15e1c535dca78f88ca8f91c52f17943c6e7928bcfea9c369fc7e0a6369765786fd1236db10ea7eafada96da941044be61957c3765f22db8e4131dd0ad93675c278dca20d20a22c1884a825b320932ca7022ce2f6a6b955a7f81e159bec1704aadfe541aebd32a4d8eaa70f84486c303250eb23457eb6559be0dfd0eee31d914d8410be548aae4b82d93e35b9745d6ce2bea11a5c50da453b60ead87f0ddd94aafcf7beb244ba924bb2393ec51131ab24f229704fd04936d1bdaf29022834835a692ea5399548f1b8a904bc0c33edfcc9369287884f48bfe11781b062e9057a827dac94b4203efcacca25498668d9f00e2ec47a021447b0b00784da8fb9f07de65eaf340ef62b0d9a3213f29aa9ba707e4efce96aa4c3a7f99d4c760112e91430b90a6a5c15593740ab5ca4fee59c8a265c54c93d6e4cf059e5487bbe436147c7bdb26b0cea38e814ff93bdc31aabbebbeb3f86d87cc1201e7d4a40507e1685a762029f10517bed0d15dc4bf6f99ad357722e2f58a04c5a1f7c01ed622bd7db797d0c2add3389f16ad7c4a6129d5502b0f91690cb533fff32898c62888bf8b0a0f3a41238d416356a7674f93be76a0710f3e3b30b87a62d6c8c256b630d96169379fe739398dd54489b14640682652f452a4b0219fd309f92487dc769222c1dec853c3bc3e50277481da27806a7522a81a2d551ba87101d4b44e50fb38a838f1010f0f366d7c62d0069ca90b38260037af13b824076e8fa7a58aebd12453f3d8a2d10663baa0ec16a05cb84828dbe6ce83baa00c0b502eea7667557e2feb032eae0bb82e01b8fb3a81bb29492ec844051029c1fd8ffcc79c57cdc94302c00f74029c50269a22efa20dbc882ef00c01bc873ac11b9558a76a874ce31a32a10bc89800e4e79d02a44677d606645400f28b7600a9cad997dd222302905f760a9097d1224d01c8af740299f2716df71989463093bac0ec11c0fcba93c0d4e8e2dac0ec17c07cd449602e5c4230130298df7412988b9710cc0176654e34d278a281c7f9c20142fd8754fb206190cb5a84dae70c9fc3b2403b4b65f550c1a29f89e0d23bc8895b7d9afe3bfe8f45715c3af2fe81e1224f3164929ee744235e472b16fd54e52acbff1dabf90b45c44cd1795706346f1347532ed1dfc14bd4c7fc0f028bcd320a3f0000 serializedProgramBytesString: - serializedSignature: 88488cc09a7faa6f3125301692a0c326ffba24e6f5eefa2a8c4cb37ebbcb8232e30387e77769275da4f08e32e2d093c114c1756e8d8fba521038097cf3996304 + serializedSignature: eb9b4cb97bd65f520e9626ce171840a9e86be9ca00a639237ec57018efd1b9fa612f3d9d774baa585880d85784ec7044158d1285a97735c36b8759922ebed00b programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/76c1ffa95bc4cc14e9b51b5345f90c04.asset b/Assets/SerializedUdonPrograms/76c1ffa95bc4cc14e9b51b5345f90c04.asset index ff12dd1..7227f53 100644 --- a/Assets/SerializedUdonPrograms/76c1ffa95bc4cc14e9b51b5345f90c04.asset +++ b/Assets/SerializedUdonPrograms/76c1ffa95bc4cc14e9b51b5345f90c04.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1545f7f7e702a18b88285d4141a320a984264a09255285800a2a842484284d42b562efbd61c7de7befa8d8111bf6aed8cb63efe5dd999db9f7ec64cecdddcc3d9759de7ff890cdeecefef6cc77ced49d9d6d90c3bc9f582fefd71436910d63bdd96456c1e6b379de5fc3bced5cef9fbfa78e4f600bbd6d95f7bbcc3bd78b75ade34afeb363acbdf7bbc4dbab618bbc2b17b3726f5b2dce4f6295dedf25deb595de1e3f3acbfb5fe9858a35f22e9acc8ad978368eb58b6d5587c41471518d3c16e3f18a35f57e0f65cbbdb395c2287e931c71aa9df76b9277a6469c9beb19adc24d63fb8968cdf5ce957bd72c64733ccd9942b1e9ef1399f883f99b9de47667b9cdf6fe37937f37947f37957fc3f0fc388fddbe49c2f6046195264fa82cefffef727f177fbfc13172bfb7bf1f6bab6934071a39729b2bb779729beffd6fecfdf94c0af6273b57e0db306e8cdcef2ab78572fba4bccfb360df6311ab90fb7dfceb072b3bbac8f32a8e45fef9916d53b025d9b9be92d52a8d558b14d3b0b9dcf6ab237c328d1672dbdf42a3a5cfa7c17549c2f60461d57d06f8f117e194eff2ed5320cc5372db48a6d973daf12c79fc79ed7863e47813e47853edb8f295a7812d4f6bd73c23af590bf63d3b1b5da5693c2bc3bd006c867aeafc3aedbae7e4f117419ce075cf21d73daf5dd744bbee79e4bab5da754db5ebd66ad7a9e379609f9f7fc98f63c339f2f8407fbfd14b29f852b27383e4769dbccfcb609f6f5f90c75f01fb5e7a6415faf7cf52f97b37b97d51d379b10e9d1392d8389805cbc15d35b62f69bef292d494ac1a2bd68de4f66519fe554def654d6f7d50af4977b93f546ebf94e15e93fb4334bbd4f975daf93c705f785ea5c12ff2f8eb609f6fbf47eeb7b3765ebfdf309036f07cb116ee5779fe0d6dffcd2469b39916e757e4356f817d8f5dd31975b01b5e073b753e5dec941ec64e9dc7d88dd0c2d5879d8aeb6f2c510e2a1f553ef99ad4791b8455c7f9f61316f4fd4f7c8de6cae7b334bd5765f877c03ed4fd5d3bafda227f001b15eb3fc1b13fc031befd4aeabc0bf63dbb9a3d24f75579abec7a43bbafe2a8ec52fef01ed887e58dbadffbdafd3e4cc25f69e7817d50c6365d248f8f0cc9b2c4c06a0f704cb59d4683634a7b3d38067da0991f26e77b796c94dcbe0ec2af07e1d539e8b36343b287f1509c613cc619e2a1b4df34c4e3ad24f1781b847f138457e7603cc6cb6d134dff1d2d1e6a0be33121c57828ed770df1782f493cde07e1df05e1d539188f3de5b6a9a6ff81168f0f2ce2a1b43f34c4e3a324f1f81884ff108457e7603c7667c1b2e865b0efe5c1cd4ed0c26d60c1fa77030be643a5b33ea8d34ac5594ff74f355efaf9cfb4f39fc9ede79a1d9f6b767c21cf2bfeca7ebd8e7a0fd8a1ae83e73fd4ae5765d5cb609fc7ef362ddcd79a7d5fcbedce9acefaa0cee6cbb4b4571cbed138e8e7bfd5ce7f2bb7df69767ca771fa1fc2499d5775eb7bc00e751d3caf38e975e00f2c5807fea0e9ffc812e5b6e97a755ef9ef4424dc4fda7d7ed2eef3b3164f75dd2496c82b3fcb6d298be7add6aaad5edfb6f914b9fd5bf39bbfe5f62f166c53ffe5c7adb5acc7b660f2f85e72fb8fa6f34f729d2d54bbd764e3de2cd8369fcc8279e45f166c9ffc2b35e748db547f4ea5c57f2ce86b93c171a8b73ea8d766b5dc97ed4b319e04db7bfb04ed8a9f5fa79dcf03f785e7651ac4b66681f6a5d8e7db76c8fd76d6ceebf753edcbbdb4f35383e1c4101b685fc6f743b4cdf99fb06d2ef63d765b2a3fc2d84dab839d3a9f2e764a0f63a7ce63ecf60d86ab17bbfd34ff9bce12795ce5c719e098ca5b652c9eef0bce91c7f697f78d25c28bbff9ff9972bf010b8c9b897d2f6ddaae4a6263b9dcaab6a3b435d69005caf1980a5f69b8ff2c1007d52ead02c7a4b618ad6da6dd272b11d73c35de28c701628dc1bd1a81f0ea1c4cafd972db58d357e349ef80fd54e2a1da41301e525b8c19ebf15063b0a67880b1d55853105e9d83f1a896db269a7e0b2d1e6a5cb03ef190da3138d6a7eeb3599278b402f76a09c2ab73301e07c86d534d7f732d1e9b5bc443b16c6d88c71649e2d106dcab3508afcec17834d274b76481fa5dec83724b8cabc3fa5dbf5e9dff481e3f30789ecd3170989b884b7bd59fac6f3b40d9335fdea383b4e763b0ef8569bf3e89d63cb95565794716a89fc5bea7d1a1a56f7387e2e0bd639d58b07e9e078e43bdf541bd8efd647855c77465c1327f01380e75b795e13ed1f655d9dd4a1eef2c8f6f00fbfcbedd83e1d842b93d4886ff543b5fa3dd473fbf481e577d8854ea5d65dbb39a6daa7e58aca5cd9284cf741e2cb7dd356de5b35d346df93ca5a3eacf2dd5b49725b4bb3f8368ab7a771b4d7b1b5fbb93aa27966bda0727b4bb1ea36963e97e48f0de68fa7f5e47fa77d3d2bf9b6f6be78d91fe2abf6a6925f64dfd9425f29edbb160ff43f9cff62c51ae6c0fc2f26d7716ccbfdd7dddaeaa1f9fa5dd6307162cc377d07477d4ceef28b73d800d3de4365b639eeddfbbcb28ffbe5d566969bfb396f68782e3d0c65d5830cfabfd37a56f291f5169bf9366c74ebe1ddbaa678c870579c6d3615d1df6a9ebf2b4f3ebb4f3d07e705e318d5fdf534b7f75fd30edbcae7fb8e61f4a5fa5432f166c57f7d2b8e9f139423bafeea7da5f2a1d7a6bbed05bf3951c16ecd72bfd15da79a57f64305c2c9705dae5a1f3682e725ecfa37abcf2b478a9f451f152cfcadfd338e707756ba5eff6207d79d9a7ca77ac1c50ed8c749421074b1b0a98b90c296489fc5b08c2f26d1f162c43faf8badd4f911a59da3dfa6afcfa6abafdb4f3b2ee8f15011b8ae4b63f0be6ddfefebdbb9de2dfb79b1a1b547974a0e6d38782e3d046f5bce6136d5f9621ddd5f34a55860cd0ec182019c8b6323b2ac8132d4374fbd47579daf975da7955861c1c3caf98c6af57cfbd5ed2ae1fa69dd7f5551952a0e9ab7418c48265c8208d9b1e9f23b4f37a19a2d26177cd1776d77c65300b96214a7f85765e2f4364b8d8106657860c41ce6365888ad7502d5e2afd55bc8605e315e73c2ca85b2b7d0b41faf2ba4eb573325186c871e35831339721c35922ff0e0761f976040b9621237cdd6c758f2ced1ea3347ea334dd12ed7c89dc8e0436c8e772b13d5830efeee1dfbb8764b8839afba2d2688ce6d38782e3d0c6f12c5886a87d598664ab3939aa0c19add9315a3250cf2d8e0ef244cb10dd3e755d9e767e9d765e9521cb82e715d3f8f563b5f457d70fd3ceebfaaa0c29d6f4553a8c63c132649cc64d8fcf11da79bd0c51e93041f385099aafecc9826588d25fa19dd7cb10192e3691d995211391f35819a2e235498bd7242d5ea5c178c5399706756ba5ef7090be9e9ff6e80cfcadbe65883ef6a0c6783f06fb5e989d2624d152cf085479328505cb8c2952e304dfee9d5607ef1d53e3bcaf06f5627b697aeb837a3babfca6f2d7de9a3f2e00c7a1ee3e2c98ffd57e2a63ee5859abe23e95d59ef3a1ee3b8d05cadfd854709c6ff7d5b8edeb6be4dc2575b234bdfd353fdb5fd39dae9d9f2eb7fb011b9b689a65da35659ae68ca0efc6fd66ef84a60803b8c766ca6bbe00fb5ebc7ade160caf9e7da3e13f04f6c3eb8e65c17caaf2a38a53b916a7722d4e2afddf0beab3e3e47e85e69fc7cbad2ae72a83be20f6d5757c3b4bf3df597e7c7afd1d0c171f9fa992e1bf04fb7c3b5b1e7f5eb36fb666e757c1e3225cb3e0352a0e22aeb00c5571cb03fbd0cff5eb67585e5f6e79fd3e96d74f0d777dfc7e9fd511fe833aeef74e3dafdfc7f2fa72cbeb67585ebf5ff07a9507e3759ce223ebb89d950fdbd471aa6c3e8025f2816a771e28755e06fb5edeccbd490b77000b9401b10382f6c4e6687e361a1ce7db6a79fe6b4db75ad3ffca8f77eedaa04efc3e9a8eba5ecc17823adf68e74781b8879dab3e4be3389705eba9b93eb3bcd9beed79ab6478550ece0bb2537ab1799ade7a4defcda08e7856942c0eea7e0bb4345de0eb15e46ae1166a69aada858ab56a1f2a1fab02c7f976be96a6cace42701eec33550f7c0bf6a15e8dc6b546da9d1d0c1fb74fb5435f0aeac475176bf65782eba07d7af86ffd742c506dbe2a43bca00f2a9dbad227998fa9e7e54b8086badf5256bb4da5da32aa4ff43608ab8ef3ed728de9725fa38f6a1366697a87b060f97488a67ba8765ef5310f0336ce90c70e4f1c8b1d068ef1ad1a0f7a17ec73bb54fc1a6b761da1ddf708cdae152cd8865921af2fd3eef7be76bf5c4d073ca3528cd4b9b8df2d658132bae021702d0fb7bf851fc83e02eb9742d893e4f6448bfba9b1d093e5f6d444fc8bc6a4707d1b9f635185bce66279fc34a0c7b7a72774471427d195e163474ac6df817d7e9fb5f23e1f26d190fd42f1ee5533f0b7777d5ff9fcb76f5719b60712966f8f06c78e96d7abb66a37cd278e66c1325cf5c18f021a47498d55f2daeee038bff6152d9c7ade7d06abfbddb1f672abca0cd5277816ec7b9afd54597a660ae9a334551c8fd3348f939a6a5e6637cd062cbc6a5b9c95820d1a67b10fdb19ca46d577385ebbe7f1fe3dfb77d6f4bad6115ecde7ef288f9fa0a5d10932dcbebebdfdd51c88edea08afc6d6ce4e21ee3d81a6cadfbafdea3e6f05efc387f96138715db23242e5e773e5563de3392f61d78064ef7d6ae5c18045f21a95d6e7033dbe5d09e27b53125d193e76220b960727cafbbc2beff37d128d0e2ce8972769697e92af355071bf20055b95a6f2bb9335cd93a5a6e2a8a71b127e57d55652f34e4ed1fce814a9bbdeb767a09a73bc7df2f0bb2a3fb83085b8f5049abadfe9f950b5ad3a04cfc7ed7856b3e32a4dafb08ef0aa0d7c510a76eb9aa7b260dbe7545f7350e760b894f386f4ed4113fcfb0e52e59eaa872fae43472f4f4fd3e27c9ad47f9719e323f4415e4f7a0fe597a76bf738ddbfc76ef769f790fe113b430b7f860c5fecc779b7336478552e9e9988b3f89b87956dc27859a88751bacdc0dfa9f04b957392348c9d25e3a7e6e85f0a8ef3edd92c38fe7bb61fa7dd55bddf4e6e2f49d1d6bac225f3b72be47695dc5e05b42e97dbabc13175cf6b583c6f94a8fc76a5dc5e6661cf0d72abea3068cff5067b543992cc9e6b2decb9516e55fedf41a6ddf7609fa7e1b92cd8ff56e5c379897bc7ce0361f9f67c162c3bcef7fd60c8df9ab6ba6e250bf64f56caed052cd817bf40ea5c8584fb410ba7da805de5360fecc3beef79c1f3621ff45186b4d574d47ca81f3526e780f420e0376c5f4dbb9efc866e40c269fc86a9b253cdf73a47bbdfbae0f138bf73c2f11d5a9a82bf2a1b2e44785e04785e04c2f2ad2afbd7827d2f7ec57afcd47597683c2f91e1d45cac9f82e1e3f1ba2818af612abfa612afcb9078ad02f15a05c2f2ede55abc2ef7e335bca5a6adaebb428b972a23559beea760f878bc5605e355aceaa86ef2fca5c0ef95dd5702bbaf04e192d9bd5a6adc2c8f5fc502f54d4cf134b4abd53de2365f19b479b84aeb5be4be6afba530f61b68e3a87a623bc331d8e64ba67baba60ffacfa22fc3b7c726e2b853cb7ade47bd3b9867b8cfca14eeb35d8af7b95d6eef94db3b129a6307cb63ddfd341e99ac1f946a9d743533e7155557aabf5558bebd96057dee5adf9e51ab346d75dd752c985764bd1dbb9e05cbd4eba54e3f24dc0f5ab865c170b5f29e3aae9735d704d352ec03ff1ea9ae33f9ac6a4b7467b57d16cce165ea59f1dd72abe68e845927e81eb9bd37892ff434dc3b95b1baee2986bf8f05c701557be1062ded6ef0d3a464831f7e0fddffaface37e4af746a9abdef354fe7813b85e95c5b732b3efde96081bbb0d84e5db5b58d0776ff1ed1efd8da6adaebb9d057d57e6cfd81d2ce89377f83a7ba8f87fe36f47afd1ae93f93276a7bcfe17b00fcfdf25cfff0af6f9f66e795caead10bb47eeab7524ae06c7f9f65e79fe0f70bd3aceb7f7c9f37f82fd46c06e557ee4817dd81ed1ca45b10ff2d21eaabf728daf3b46f50be5367673c2a7c7c879d5aa0f1f3fa7fe06f9289e8ecf827daebf52b3bb2bf03f10be960ff2fbafd5ae2dd4ae4dd6df4d9687ee97d7ff9542d8074284ddd68ff3d81572ff41b9bd43c643ddf76f6d5f696f238fab7bbe0cf63ddd716d35bd0713e9a1ae8dcfe17a486a7caa9daf011aa6f361def708d30753efc2aafaaeb51fa73dd5731df54edbc35adc1f967157e33d6a5ecd2320ee5b826350e30bb0cfb70f25ae117f7bbae33b0735e2736d1ed23454f8d532dcc39add8f027ba41d717f55ef0f7fa81ddf15d8f3a83c36a876bcc45a24baf6ee2c9e4f1b7da3d9f298c6f031dff6092aae8ae1e340b72d380635be00fb7cbb1ad8bc5aeace086ac419aed634566b69aee2acec7e02d8a338630ce1ba48cdc0f53a4365d36e066d13c3bac6f9f87dd6807bae917152e3fc8ad3932c382efd24080fc761d5f52b93dc5f8e2feea99e3da836463b10a7c7355eb03d2c6d32b6875389ef5320be4ff9b64c54f588641e53ebb57d07f65578185f75fd0949ee2fe33b51951daacd02e3bb46f303185fe50775c6372b26ded51ec52a59195bc072f84be8311efb54970f5557d6bd70a878df9dffe23f3b8adb2e62cbbd4b2b4dab774e166b832e62055efbd4b47a6707f14eb3bafb30f1bbcc0b512d44ff89d5bac5fdb56ec18d9be3fdab044b8fd678c7478a954bf9e2a3d5de99de6c8cb7e557cdf0504ff3fe0555a678b79dc3167b7ba5deef05426f866776ed907545892f53aa5f33d1d3f457519deb1d51401778fb73848593c4ef25c2d24a617d89776c9158d3751eab6243bded3271b7da715fe8fd6dba67a94466b6d1bc982a76dc5fb2552553b1171b6e7d8ef0f3ff4b918d91221c7d639e3ff84fa31c51139d542b25fe8fa15fc8f08e6689d4c813c8628163f92c47cc139a588b60f838d68ea1d9bf7dde455e45972c2e66323cb93b89182452f8ad3b8f2f7a7887e5ef6405a356c0721af3a875ae236ac9c072bd6cb1ea4b9828646535cae586eaf86326fc629afaa40ce2f7c3558b70e113a0b1a8fc820920967128f5fe58e6fd9f038c9d2f2251c1a60ab3386a7ee32aef1f37be567ae572f1260279ed0ab52eb331e80d4cd0c55a1ea51bc5e7b1e5bc93636f1a8f45027b8e682db54fe29cd8bd44f3a9a16c43a9ecd36c70cbf9a7ecfdf9c56f8e2dec3b30b7ffe559e6f4692ed2a73e77c552a8a129859a673a5bd45d0f244b9f16f17825d287ff9819b6447cbc2e1b30828d4c045b6c1c1fe7b6d7cfc7f9c4f75d3486667ead92fa60320b3082592682a2c731398304c77b161e205b8ff563b879ca0c5b0b861d6ac52e151b308a8d0d147339c52d4c6635d3cce21621c24d30e13696c24d31e12d2d859b991c6ab34c67497e6ebe5029f3c28677273ef6d2532fd6ccfeb4159227eb3601f3a6e6a6b4e108b7365aa527ce5678e2b4c094dbd92ab7c494dbdb2a6f667228f1de6ee6dbeef5ab237959d32ee53ab2234bd6f40e5b43b632d113abc1ed4b4aaff69092fa6ba877ed6c8fc312314eb0d8bbde3404959c68a7944bfbce826657661a180b671146787393e773ec5db064d79dbf23eefcadb16cb58d6db6dac2a4cce3b26d2a1540675cb80d66725783c9b130266f6952e635643766e89b195137c1d5db62eadba5437d2b4c7dfb74a86f6dcae5c277e692e6f2c9de317fe076b8385b2d7abb89f1c06af1a1a785f1f614167e8297ff968b4f46957bbfc78a0f442d16f6242f07baa75c0ef410e5001f09a2b7192b29da61396307dbccdc1e2b83764c4319d40113cf4e8378478cc94eb64c3a61ca3bdb2a77c6947bda2a77c1947bd92a6f6352169d2653160a51dc6f8b99dcdbd6e4ae98dfe5a4c1efba61e2b96910df0e639267cb647b4c39df56b93ba65c60abdc03532eb455dec1a4ccabbd3ea938750f5c78474cb8c852381b73bbbe6970bb9d4ce2bc33d92f1e3821fe9ff7534bbc252ebe3366797f83e50d425ade13739101061709d566ec8531196860b2c264761226bb60e2bb1ac4cf0829de1b131f64105f15523cc7209e23ba0447b2cc760bcdb313468a8f9a560606e5120f5778038c5ba41e4f4ff4b6b38415fc38b7a2ee590dc91b96bbc5f980c70ea267339ca53ec7823e167c1e5073513b9b9bbd83196ff6ba6533d63cce35393ceff40c61862e1277d6e9725084df7f9e3835c1bb034fcd12d9680fd389cac34ab8a186122e16b284cb376538d1a19db751331cefd3f0b91d35e2ef2532794bc5bd13cf1c6db2d2302f7e5d0c359ba8dd8c4e5b2c9c363f05a74d87f5983b1660e5ef7043f9db3d16aefc2dc47c6d84c1d758485feb83593ed260794548cb8b30f15106f163428af7c5c44b0ce26b438af73389f346065f68c9aa1dda1f531e6dab3c000332c604a44138200331f1b106f1bb1a8513df15f3f07169f0f041a6d2540ce0559396a6c9c68e821564b291235532a63ecec5975d4d6d9c6b82283b79c394ce56acc4dccd94e4bcc2ddd3647e889a797753728b11d54c3ea4861371eaf7907a62cac93889991f52a76203963c83b1ec5e6ac8ee2bb3c265f72126f1964c7e71476f498bf1eafa3d82172bc73662fe4f6fefa7495698c7d3434d76f2b6e45e063b73798b9f2f99d54024ca3e22517a27c95ba6c673f8dc552b3e83f1f80cc38ad9a98662b661c862b618cbd07c79db5a2d725e259900746587786dfbc3bcadefbb5e9b43fc3ddffbcd235f252705f37cd9553c805be4f5ace77bfd8a5dbc23650258a577a632dec0e38a79427196c8b973c575fe143b8e969fcff7ce0ff0b605deb65ba8d26638e6cafb9a5c84bbf27e763e3902c3bcbf09f38cb460ae3fccae6c299b2d8bd3aee2b9299fe93847eaf239c715deb145e2ac7ffd02a15b25aca8f1fe854b8e9158b135dd506c5ddc3c5cb135ca54b388e734999c5c30c40bc53d7d793dea941929d72965cc3cb120f9ddb1daa4c4942c9cdc4c93417a9294e149b2872949c403ae4cce8ad44bf07089529e72a25430f38cc8baee8f25cb68133df1046fcf0cd24b65cebe995c65cae46609725bd58a55d269ed08b5312667e6d4c47710357326986ad159b8438fc50ab0d98602aca245b8026c1c6679b5c1f226212d1f8f597e80c1f25e2dc3593e01abf50e34d57acc647a925a634fccf43906d37f0e69fa444c7cae417c42eb70e2934ce2bc45c7070a6d3bcea598f8fc34884fc6c417a4417c8a499c77f90f329518baf0045c782f9330f7ac85a9082771c1bd312fa9317849e116e1bc641f93380fbf88218d54b11474fd1ba953314c4b4cd995174b611ba9bc3272b13f300d43bd1443bdcc0ef5be18eae526d433d3863a3a7d82fdb0ac75b0216b8d6a1b2e6bed8f156387a4a1189b8e891f9a06f119581979986519598679e4e19665e44c0cc711061cc6290b497094635eb2c254006f15ce4b2a4ce2bc1d7f642a4892f47f2a31e1a32c856761ac8f4e83eb5599c4793bf49854ac4ed2069d8d25e2b18644fc3b64225663e2c719c4d76c1d4efc004cfc7883f829edc2891f88899f6010dfbb7d38f13998a79c98064f998b899f9406f17998f8c969109f6f12e72313a7a4e2e315b8f00293302f35f9f2ceb52a7cfe90346c85bf88c11790c3b5aac255cd07617139cd14177ea26be0ae61eeb510bbd7e9a67bf18a70baf72fd7fb5f5eeb21183fc357225928c886b1a206b3e20c93156d80157365e3a74cb0afbf058b300bce3459d01c5830ddebfe2c148f26c2d5db8bb1e2e72c53d9d6315cf1b304cbc467a721132fc52c3fc760f917212d5f86597e6e1a2c5f8e597e9ec1f2e24ee12c3f18b3fcfc34587e08e69f2b4dfec9e7614d9365d97e5ed9304d96430364a7c33fb6b7d8eec276f37e0f076556b9109ae3fdc55fe358e01d9b2dca97656210b3521cad0859a61d8ad97f81c97e3ead2261d150ef448d2859559c06c8f8ec677830e397d97a076aae0851239ffbfa5d313f7e35cc1f905d2eae0c13a7c34c71e20e7261fc84d6ab15eb283761fe4f6fff275cc7f670ccc92e363859a3904e7604267e89413c2ba4f80a4cfc528378e390e24762ee7599c9bdbaa7943dfc7e798eb72d94c7fcac7208eb23c31679db300e7314e630ab3087b9dcda618ec6ee790576cf2badef790c96d457a5a1243cd624ce9b905733bb26e47118a96b305262e9e52c482a1ca7e3314ed7a581d30926715ed75dcf6ad77537f50957d79d6812e7d3f5f8cac356d3f54ec2946fb4553ed9a09c235e9e9bc132317f78122b66a3e395596f797c82a758262a9f856c88b84362be6df08ae44ffd6e3279bff1a91f5fbc375b9481e9b20c7b26780ae682b7185c30b7289c0b9e6a12e7c9796b2ae5c0cdb8f06998d5b719ac3e21a4d5a76356df6e69f51998d57718ac5edd379cd56762e2771ac4b3fb85133f0b13bfcb545085143f1b13bfdb207e5dff70e2e76089798f65629e8b597dafc1eac103c2597d1e66f57d96569f8f597dbfc1ea9521ad5e8959fd80a5d51760563f68b0ba786038ab2fc4c41f328877dd359cf84598f8c306f137438a5f6c12e7f5305f83daaa1ebe04537ed456f952cc47565bfac86598c98fd99abc0a33f9714b932f3708e78817fa33bb60a4dfe1e63ae16732f1a59cb73535838ded9a350c5bfd31b90d58ebe50a53d2f0ecf5a4217bfdbc7bb8ec7525e6514fd97ad45598473d6de951579b84b9473d8325932ebe0617bf06e3f1ac2d8f6b31e5e76c95afc3483f6f49fa7a8cf4da3490be0173eb170c6e7dcce0706e7da3499cbf1bb02e7e427b37e045a6de0d7889d5f5de4da97ccc52c36689fc3b97f8cd809b4cb1e14f645f36c586c7e11511879c2471d0d7c8a9effa38219effde8ca5f8ab86145f393c5c8adf8289af3788bf1452fc564cfc3583f8a123c289df8689bf6e10df1052fc764cfc0d8378bf91e1c4ef3089f311bb37532978920c50de8909f38fedd41a46e54b21f2b7d7fde705e5c235fd294a61ee79175664bc8d1519fceb4ff28dfd1099f96e2c6eef9ae2c62b88e96c84c88afcc9c1ec404cc3c4ef1ecc13de3378427149384fb8178bd4fba648b545136c1ce38f771681872e61a2781f16c50f0c51bc2b6414efc7a2f8a1298a7c77787c458330917800bbcf47d87dc630be82c39290fefe20769f8f4df7e103dbd3c002e903e28d73f3c2e8fc3145186b1ec2acf9c4640d5fed2af9fdc3dcfb61cc6d3618dc66f5f8706ef388499c37e63e35142b39623db2fabd2bcabf95d5584caef77e4c0f0026e1463e8a11f8dc40a0d19ee108acc6087c612a5839812f2da2f298e96ebc31fc15b36b0c3f8e31fadac0e8e7908c9ec0acfec6d2ea3598d5df1aacde30319cd54f9ac4798dc5bfbf64d5a579caa4cc9f48f12fd5da3e917a1a13ff3e0de2cf604c7eb065f2ac4139472c337860ad0263e3ac9450d73a9be1574bf8d1e4fec65117fe19d7ba7b3cf6f662a334cf61a5dccfa9e4e02405daf398f02f96c26b31e15f2d855fc0b2c06fb659601da6fcbbadf28b98f21fb6ca2f61ca7fda2abf6c52e6e5d85f6928c75ec1ccfedbd6ec574dcabc1cfb2715bffb09175e6f12e6d5d7bfa90827991ff11a06fabf34807e1dc3c1df94b4c1f10696bf63a90827c9df6f629c1ba4229c84f35b18e786317bce6f63381a59e2780713ceb2147e17e3dcd892f37b18e72669e0fc3e86a3a9258e0f30e16696c21f629c9b5b72fe08e3dc220d9c3fc670b4b4c4f189499897fc9bc52c4bfe0d188f5669e0f129c663734b1e9f61c2ad2d853fc7706c91061c5f60e26dd220fea5499c8fb06c990a922443315f61bed7d6d6f7bec6786c95061edf602eb2b5a58b7c8b09b7b314fe0ec3d13e0d38fe8789774883f8f798ef75b4f4bd1f30ab3ba5c1ea1f31f1ce6910ff0913ef9206f19f31f16dd220fe8b413c477ce080bf7299f9318d74acfa967c4463db54bc741f9cd8af98fb77b574ffdfb074ee968674fedd24ce1f036d978ad5495e67ffc3e440e24316b3368a03d139cef62652c6a130be8271768caff24f61253600f6a72989794af4482589c5aacb66e1bf4cc2e25b3bb66d82bf31e51d6d95ffc194b36d95ffc59477b255fe0f2b00764e4301c007338c66f7b4353b6652e666f74a83d90d30b377b135bba149990ffbf4b61cf6696412e6bdd91ccbde6c16063a370da01b6338f22c71343109f374c9b76c4137c5381758726e86712e4c03e7e6188e3e96385a60c24596c22d31ce7d2d396f8671ee9706cead301cfd2d716c8e090fb0146e8d711e68c9790b8cf3ae69e0dc06c331c812c79698d5bba5c1eab698f8ee6910dfca24ce1bfe832d7b085b9b8479676d88659fa61d66f1504b8bdb63c2c32c853b60ed8262db7641474c79b8ad7227cce946a4c1e93a63668fb435bb0ba63cca56791b4cb9c456795bcceff6b0f4bbae98f0684be16e188b31b62cb6c3dc6e6c1adc6e7b4c7c5c1ac4bb634cc6db32e96152e6931a27a4928c493ee1b903d68cded3b219bda34958cce3b51cc0c9c6204fb285bc13a65c6aabbc33960b275be6c29e983b4f49833bf7c2aaefbd2cabef5d301c7b5be2e88d35eef6b16cdce560164fb5b43817139e66299c87a1d8d712453e66f17e96161760bebc7f1a7cb910139f9e06f13e58c131c3b6e028c2cafd32cb72bf2f56eecfb42cf7fb61e57eb965b9df1f835c610b7900a65c69ab3c10cb2bb32cf3caae983b57a5c19d0761e5fe6ccb727f370c47b5258eddb1c2ee00cbc26e3066f18196160fc184e7580a0fc550ccb544310cb3789ea5c5c5982fcf4f832f0fc7c417a4417c0456701c645b708cc4cafd8596e5fe28acdcafb12cf74bb0727f9165b9bf070679b12de4d198f2125be531585e596a9957c662eebc2c0dee3c0e2bf7975b96fbe3311c075be298801576875816767b62161f6a69f1444cf8304be149188ac32d519462161f6169f1642cfbadb0cd7e5330e5236d95f7c2f2df5169c87f7b63a48fb624bd0f267c8ca5f0540cc7b169c0310d133f2e0de2fb622e72bcad8bec8755dd275856ddfb6355f7899655f774acea3ec9b2ea9e81f9ddc9967e57861576a75816763331b738d5d62dca31934fb334b902cb26a7a7219b5462e267a4417c1606fb4c5bd85598d967a5c1ecd92671fedcfbec545232c973ef6a93305f16ec9c5484cb70e103301ce7a601c781582a9e679b8a7330b3cf4f83d97331b357da9a3d0f33fb8234983d1ff3910b2d7d6401c6e3225b1e07613c2e4e038f8598f8256910afc1985c6acb641166f66569307b3126be2a0de24b30f1cbd320be1413bf220de2cb30f12bd320be1c7395ab6c5de5604cf96a5be543b006e535960dca43b106e5b5960dcac34cc27ccaf875a9082799327e38267cbda5f01158b3ef06cb66df0aac6d7da365dbfa48ccdf6eb2f5b7a330e59b6d958fc6946fb1553e0653bed556f9584cf9365be5e330e5db6d958fc794efb0553e0153bed356f9444cf92e5be59330e5bb6d954fc694efb1553e0553bed756f9544cf93e5be5d330e5fb6d954fc7941fb0553e03537ed056f94c4cf9215be5b34ccabccdf3702a554a9235c5cec64c7ec4d6e473b036dda36968d39d8b89af4e83f87998f86369103f1f03feb82df09506e59caedeee465c53cc7e55e23a56734fc5fd5fc1995d80a5c61adbd4b81073a227d3e0441761e24fa541fc628cc9d3b64c2e3129730f7dc632192fc5783c9b061e9761e2cfa5417c1526fe7c1ac42fc75272ad6d4a5e81a5e40b96297925c6635d1a785c85d5a22f5ad6a2576356bf9406abafc1c45f4e83f8b5988bbc62eb22d7612ef2aaa58b5c8f99bcded6e41b30e5d76c956f34d5cdddbcdd18ff427be6ebe629cc5f3080d7a205695edce0f5185fe42d082b673b1ed79e0c5fc6c0ce22ee57e057967931853762fca57d3a2bb0e5146ec272f09b69c8c13763e26fa541fc162c47bc6d9b236ec5cc7e270d66df8689bf9b06f1dbb182ed3dcb82ed0e0cf6fbb6b0ef3429f3e2e703435ecddd2e90976486d2eff6063eb07a1776b70f29ee76b7e96efcc3361fc5ec3f6c730f26fe711ac4efc5c43f4983f87d98336db075a6fb4dca7cd4fad354fc3fd9d71230933fb335f941cce4cf2d4d7e0833f90b5b931fc694bfb4557e0483f195258c474dc2fcd9d2d7a9082779b6b41a63f18d2d8bc730e56f6d951fc7287f6749f9098cf2ff2c29afc1587c6fcbe2494cf9075be5a730e51f6d959fc6947fb2557e06f38c9f6386cfa39c2276f9f791277bed4cdec6f7fb0373c5df25f1cfd2ccf22ef1fb0325f190892feff85fe8a9f45aaf4b44e8de6cbaf76f92385be1292e16ed78ae9bb8a698f18fc3f85f6bae6023c477d2e68a3bf8d726dafef09326c133be7d055e0ca72789056f592f66fc232889bb978afe8fd20caa4ef1aee2a38a61b2cdb318f55f4cd4873086c4c32737dfeb8f4df7ac3dc80b5e26c638790f41b713c61e3b1e3cc37b6ff3455f827f932e4cfc9ec3e2f7ab297e4568fc867829b950a4ba1f53d51b4a1637ec4c422b4c4c9ec762f29b2926fdb498c0e5f0ece362560b139bb5586c7eafbfdf8d11b9b0c6cb23b3859f6c4cbf7b018bdf1fa6f88d6258dfbbf6173dea977ae1d5c3c4761d16db3f4db11d14c2377959bc28e594844ae9281d5fc4e2f5572a790e96fff679ceac1626362f61b1f9db149bdd53ca73433ca215c2b3aa8517d9e7b9c49930717b198bdb3fa6b80d88b71e2679f5f9682f9f9779f7aff472c922319ee8c7c71f45e4f695787f4d91355a45d2d2307d25c82b588cfe35c568372db582f78529c64b8232cf7b968b2f1156b13234ed821ae98bd9ab58ccfe33c5ac8716333d2755c912628c28c1aabcbf67a7c9a7d66376b206063b47a7945f468ad1d132d93a5535d578efef44ab6963d65baf61718e99e28c2fc00bf344309de6c9f672b2f22d8cc5af6316373059bc6b889a36687715abbd6e365eb39a56d90e13ab37b0583534c56a58929ac78fc508f915e732431985f753cc3573ba52ee4d2c8e8d4c71ec83a61cef91cdf402a9b88ef1e25ae58558289efed4ae63d3dd4a780b8b4796291ec516e5c4c62c19dec662d9d814cb5c34967af93db2ce165e3acaf27730eb9b98accf0fd1420d6b7f7d4b8477b1183435c56052889219efb5d7ad905a9874f9e07b188366a9a462b2f678d854ac6f99f73e1683e6a99415b5cbf5d4465cf0123e78265de9f40116cb16a6580e4da9449ce4059e29ac2d135eb571fb1b1f62316c698aa1dee34de689e17abcc9d2af3e75d94758bc3633c56b60caa57cb858e1a9559f387d8cc5a9552a792e4c7989b732e8fb8b9f60b1dc3c95de0a458b31f558d7b734dd80c5b9b529ce4342d78925a2473047cc29aa66c9dafb3469fa2916bf2d4cf1ab64b4cf4416b109a2455d259f794c11e308d5deef992276f5f512fb1cfe19c6a98d89d364624ef8b3a3e484ec397c8e71d8d2c461ef8d5c0650970e5f6034da9a688c48b1ad5522f2bb5bedad2fb1986e658ae9f094da5b63c5ec3ddece5225203e5298a956d757583cb74e6554446f930c1331ad9d7a70a42395e3e96dad7c8dc5b11d56a7258f63621c81dbc9c371ef2a3794d7a5dedf0bc4f1d46257bfa710df60f16b8f8dd7258b9f5f2f252e48bd1596de54fb168b550753aca6a5d933b1fc17367c7a997c8731e9686252c0cccf64fc6313e2732e167ab1e2b3be83a3b3d55e583eee576e1c41af7fc9fa3f2c0e9d4c71d80d89c33861e552519b1e18a853124f2f94ed30a63c4418266162f63d16b3cea698f542dbced8b8b93fa252fbac3f4fa6b49ea5c70f98d55db05148dc6af8165e30352ac5530abf555bfb795ffdbde947ccfa6db016496ad6a77b4e80593b4c4c7fc262ba6df8a732b5d3a9a61ee9948e12ed672c565d4db1ea57af12cdcf37133ceb6ab4e7ea6642c17733c2c4e6172c36dd4cb1d923641a0df38ecc17f1ad91f1a98ef781528909458c7fc562bc9d29c6fba3310e5a90da28656a71de58647ec3c86c8fd5d5a99351a56a8dd76b5ae8f52bcabc23feb58b85c7d4ee3df935a4787728441c7ec7e2d03d5c8d3656b497677bfdffa0fdc3bd14ae11f3434c7da0fa5afd0766758fd49ef426ee1a665e0ebc2ed999f4c4f14f2c8e3ba4f6d4c31cc7bae6fbd52f8ef5afddffc262b963b8b689f97936f553ecbf31ebb3eb37e320553faccf4849dd23424dbc7fb1580befcfe1a2d6e1f39d1275500dcbd9de3b25d2c0af8d7bc747f87a07460313c7f9fde77accb96f94c65b1dfc5dc8e40a3b35f01f918b9f1d631cfd22d9d1367cc05bd5a595a0f6a8115f6daf14beb1508cc4f4f67ca25a5ca5de68ad2b16a651cdde605c13c6aeee38a9375df9dcf47251d6f3da7fa6e73f4d648c949647ba3b27bda9c574679eaa9d64aa36c8e9c1e47bbcf5f1a6baade8c9efd6d0ec43ed6a9185b9c364bb2f304ece508af17732a6cbe16c9ebfcbc5c09f3f64c43baecbbcbf1243d875de5dfff0ba7ef75d84801a6baa536e32e8b498e43a0897f38b9985b242685fc25893ac06b93c557a51a2db42a04b78dc3cd9839f2f244b64e91e0564fce554856c174a649d05b2e92c974d37a09becdda542fade2851015730fff5fe1a2f325100b9ba7b02646f4a902d04c8e1a0073c558eb24401d38261094c396efa5b5e2440f6eb9c00994b0972f30048de72e52654c9da99238b02ae15ad13b8f2e8ab06850b0ef670a3a394557fde2d812c9f12d996de8eea6beb7568b57cda7a30e3237d51c0d6af41025b017dfb8dfb13f4b252215125802e949da0a864d2464509748594e83613e846880b7839363bd00c8e02aa39a0a9db8712556381ca7f7cbc30228dda73fa24e01451c26923e0989fe145adb8cf1d9480d697125a3bb4868c72d9550ccaae7e94f89ac57dae4a8c8496892e7a1410b51c9b40d49f12d1d6297bd8b2c874d44b0724e00d70b3e35410099087764d801c48ddac4de67d1385419511f1bf0dc313d876a5c4d692e1c3925100d5726402d420ea8eb9ea3645b7bbf4331880dc8ddeaf8a457b3f8a2367a38a13a076cfcc00638d97f5f8eda334a0cd1fed294c83e9fb90aa9ee4e555d4c6c436344aa01a4289aa55a0a4aa11f5207f44a7a6444601d66ad0a71c4a09ab03c31aaffadcb0a8f53057ed9e40382c535da468f5223f1c9340544c8968fb7a7959b0011b9dcc9b3b3881753825d6b62c9531d9e8f43adb8a5e67932c4d5c7f67aafeb33ac2d1c6e79ff0c63007bb401c5d249abfda7c941dbc20ce593e02ce27c94ed2f6ca4e71d241760afd82ec108f5cb2eb68e864a7f08030dbea69accdd5055657e77b57ebe3dfd975b666b2433e99c9aec7886876a892263bf4885876ca43dbd9293ef1ccae67c3263b8d55557692c913d9493b88d921467394927908233be4bcabec3a1e566523ad9d6c64a0383141d23cb13197e31ef9fff9dcc5dceedea1511c025f9d98fff86d8712ea018aca7894fd171cfdcf69d4aadc3bd7ba57f02b29aa4d60ba6bb340aba1632a11a9d75c3c966872ed41896d1b593cf8337ce7b1392cf5554fa7b3223ab413a8d03e0a86cc4653a26d6f409bec45abbcda8f00d287732b2a9c0ce01ce312cefc48e2dc09e01ceb12ce8248e29c09708e7309676124711e0d708e7709679f48e23c15e09ce012cea248e2bc16e0dcd3259c7d2389f331807362267056a140a1f9bcec246c77b6a4c2f9304be09ce412cebc48e2dc0fe02c7509674124715e04704e7609677e24719e02704ec9c4643d0c6630a3f789e050c87f00e55eaea02c8824cac5a046dfdb1594f991443916a0dcc71594859144792b403995fe951fde1ce76b20a94704dc603e48bc4c9c5b201e54f10ba20772192829a7656292335e87639fc0a8f57668fab0b6a6c23a1c60dd3753ef8a722facf27065c8272ba8e01d0be0ed4709af358057bdc964e95900dffed4f331cb59704532fec4c7e7113d705d01b8e9997863b9aff0b4e0229419f0bc9ba9005e0500ced8980d1c28475a8134a142f93d4059463d5378ba80e4572019f3c2322a749500dd4cfaa987d345107fbd676c9567420f9c4585711cc0589e090fccdd643cb004a0abd8b8e5a02fe5afbe974b87720d15cabb4147af321399392fd0d153a733e49164d5c95ec023676ddc6e1e14cc50376f1215d6d5006b1525d6ed4019a9bc34f599993c2c3799b0514ef644f14a80787626ca52ac360fb62909cb52b24200bea8579d496f0d378f38cade7a19407c00f522314bbc93e572ba71f4506d0b501d48ddbe5cc2d427c5d5d4693560514387ae0715ba1d01ba39d42f26cf0ebca231448c31d65a20320243b24d01b4b91b035a14c7b19b0068f332d16e0cdb6a247d1248d66e2c03bd9af92e62257dec4f86b505c0ba807a1532ff02f532d210f9260eef3846790cbc1bc8f007b9341f9274c6195923a723f0c8852ee1249d2245867300c059e3124ed2097c6438e7029c8b5cc2493a5b970ce77100e7629770f68924ce3300ce252ee12c8a24ce5b00cea52ee1ec1b499c4f019ccba8c725f94dd5ebe7b50730c6b37942d4b85c70045076610994cb5d9917994739c841d67cff11a03cd81594059144390f64f0435c41991f49949d00ca435d4159184994ab00cac3a847316789d37c1990248bf547a082e90e4ac5c3dd9ce45c18c1c1e1c300d623dc99eed73f828f667340b65e41bde44df0e14406462b5b51616b043cf0c84cccd8cd13cfa6cb18ffd0e6625693a979416ba8005e0f001e45bd406870c4dcb05c7604aa927600d8d199f86647aaefbc12967a646fbc0e06308f710966bf08c21c08601eeb124cc2278964308b00cce35c8249d84e2483d907c03cde25987d230873008079824b30a3b8e4425f00f344976012ce152283b90b8079924b3009e7ea92c1ec05609eec124cc255a9c860160098a7b804937004920c666f00f3d44cc0c426e4ebcf1109b3395977b22780799a4b30092b203298270198a7bbf1e2276106277bf1f32680f10ceae517e0ebef89a5d4138bb1476f28774b80ef4cfa4fe1fa6fd7cc95372f13836b517f5bf10e80f0ac4c4c55c9157576b20f7844f9a5a47e00e7d999f890167f4a388705d754c1e75944ef21ec12f0b4e61cd780123683c880c600d0732981f29780828fbf08dfff227bf09a0532f47999f8d243f045ce11d20f831fef2961700125e2b292cc13f70768cf77e77563c23174b25a7c5f807265669f69d7c46bf1e8d5d62d01b60bdcfd8c0be13810d9675c4a403573a14b0b16937ed9816c24e876e0a917b98493f4ab386438f704382f760927e9675cc8709e0f705ee2124ed28f0c91e15c0a705e4a89b353cad5129c4b495a21758f11413d1c544897b9089570fc920cea6100ea2a17a1120e799041fd1364ffcb5d844a38ec4106f50f00f58a4c2cc8a4c691f86fbe0053a5ec789a014f9170b96c012de237a810df090a832ba94796f8f0c74c8f4015f5a24c9da96af96d80475ee5ce947ec2b94564c31f5d81e75dbd311fed065192aea34106f35ee097d7b80493700a2119ccfb01cc6b5d824938b9950ce69d00e6752ec18ce290f1dd00e6f52ec124ec0791c13c14c0bcc12598843d75329847029837ba04338a0bd12e02306f72096614bf1471088079b34b30095fa22283f90080798b4b30a3f852f38300e6ad99f8485b11db343fd2763000795ba6be26a65433048f6c3aeb6800eff64c78619f4dd40b970090776462150d355ac9c7229782750a36adb96f078171a23b29b17665b587dca6783c867942c55e3619ea05e443c2fe31b85aff10cf826a5abc64df243b0be0bd8bfa6b786ae6db2c0157695753ae749045058e81ec7e3775a5c3d7162a67b3199f6acd337ad457e8df1ac0bb877aee9b5fd1705463bcc38be220a337f76d3b80edde4c9485890762f385b165426253ad6a6e0265e17d99f8a49bb92c24ccd0cda9d035009e793f253a9ef8dc1761fd5bcae0c23989d7a46098e8d5cc2703a40fb8f81104d2c516c93e82301464f2075dc44a3a9a4e86f55be0ad0f6dcc1703a2bfb6c14e00e5c3eece7027444b36c3fd7780f6119716f9261d5b276b8ffe03703eea12cefc48e2ec0eaaa6d52ee12c8824ce2900e7632ee12c8c24ce2301cec75dc2d92792384f06389f7009675124715e0c70ae710967df48e27c18e07cd2a5b7830a23b9c4e33da0a1f4944b3849271592e19c08703eed12ce8248e2bc00e07cc6259cf991c4b91ce07cd695cf79904ec5261b916f06aaa1e75c4159104994e70294cfbb82323f9228a701946bddfc5e0ae11c62b2657ba68172f3854c6085cb9a4d60f3856009dbd49637eb0fb0ae73e79db528ce72df0a64fc173331fd957f4f25b874cfa6335f6e2ef0cb9732356b137a6706e0913d1c7e0cc07b79e3666a5f8a7b27e97a086ba850de0b32f52b99f8485281c8b889a90919cac864beb80af8e2ab990098cf36adaf4c5d0d00aea704d885e9d3ba923df085930c491ff7be4205f67690b55f7367b5c228be2d3902f8e8eb9968fac0c67962bd6b38f530baab686603986f64a2c42cdac4aa9c9500e09b995c61b83c85a9af51fc6e6e312829df720d286157910ce80100e8dbae018de2e4eced00d0775c031ac555da0b00d0775d034af8dc870ce8a500e87b99a8d5fb6c62b5fae9a0567f3fd38be8a532aa4e58b3938daabf0ba07ee022d4283eaaf81040fdd045a884353c19d4f500ea472e4225ace5c9a0be09a07eec2254c2e5f6c8a0b60435fd272e42257caa4e06b53580bac145a8846d5232a88d00d44f5d844ab80c1f19d4a600ea672e42255c5a8a0cea6c00f573972670932e2e4536eb631b80f30b9770e64712e76880f34b9770164412e77280f32b9770164612e78900e7d72ee1ec13499ce7039cdfb884b32892381f0038bfcdf48a0b9beea71bee0258bfcbc413f9d4e675e6477261d3c701ccffb904338a5f237810c0fcde259851fc1ac12300e60f2ec18ce2d7085600983fba04338a5f23b81fc0fcc92598519c5fb73780f9b34b30a3f89ec63e00e62f2ec18ce2d708260298bfba04338a5f232805307f7371f539d24612d9ea734700acbfbb8895f4f56b32ac9b03ac7f5062ddd680d5dc731f292fc9d8c76df7a1823b08c0fdd365b884cd2932b8bd00dcbf5c864b588991c1dd1ac0fddb65b884cd2d32b8bfb004dc7f5c864bd8ff27833b0e78eebfee2ead4a381a40b6b4eaa100ed7fd41f92487c3fa69845fd9bc2ad4086670d1d7ada44ba3618d9d3a606c00f632ee1241d3125c3d907e06ce0124ed2a5d6c870ce02381bba8493745d45329cc7009c8d5cc2d92792384f0338b35cc25914499cd7039c8d5dc2d9379238d7009c4d2871f66270c120b5855f93f1570bf3d709e30d771e99a9b2091ffc1a8d1aae8eeefa61d7b204f6a694d8b7377871aa7d2638d64a3847ea272ac88700df6e1605c884937cc820ef0f20378f0264c2c14132c8af82e2a2451420130e1292417e16406e1905c8840f68c8203704c5c56651804cf8a0860cf2ebc0935b450132e1d82c19e41d80276f1e05c884dd1332c88d01e4d651804c3823810cf22800798b2840269cbf4d06b92f80dc861272b80f1844714da09f41f5b6a52b284987cec9502e025ed9d61594a40f75c850ee0a506ee50a4ad227106428af0128b7a64459ff6f4144718595a341b9d92e13f5bc5a9c8e07e6972f607c22c6148fcc302f0215a27657dba1de857c55fe2562f477315b48dbc1259b79b01ff0ddf651804cd8c125833c1240ee1005c884838e64908b00e48e51804c38e84806b90780dcc9955603e9ea2c64ad862d00caceaea0245d4a840ce5850065175750922e724386b212a0dc261328cb99f97309199bc55d4185723e4ba0dc9612651b96f8264af04b51195a0d986c42f10c80b0ebc6ccd8508ed41bc9de3afc12a0ec4689927f6a8bcf9259e4059a2dc64b39853962bc7491f0cae8cd7fe904e06d470f6fbe17847f7a104e371a2fbc727904e1b501f0b6cf443958fb8b79512f07a70084dd2911b6ada3565631252d036751611c0330f6d8b8d5892fe57f318fb0b7bd860ae53da09db8037589e87be32cc6a7542e162624be065513c112b135f0c31d37ee803114ccd08c28b257d51f0158b329b16e25b1167aff13afa195b04de5b3acf300c89d2841aae53e12436995b5aa1cd8a78ee2478b6e0625e5ce1bb3471decc344711db483805ff6a444c9df2f5d20b27585bc6822ab948df2f20856383d00b85e99c8d0b9b59ae09b4ee9580a60ee4209b3a9b7c303f3f946c5726e51f47caf39c0d59b12977adf5e552695c62f866e4a55cb53006d4e26da91615b91a45363c8da9193408d9deb2256d2797064589b03ac79992c08f8bccc1a74eee6a6b00ef48d006d7e26de32c53b949303a56a21e5e0464b2a4fbd1594ab052ee1cc8b24ceb10067a14b380b2289f36c80b38f4b384997e324c37920c0594489537db295f78d784dcebb968b45c59491fe10d950f0e500605f979638205d7093acbfd419d4e5fd5cc249ba2c2c19ce1100677f9770164412e7028073804b380b2389f3788073a04b38fb4412e79900e7ae2ee12c8a24ce3b00ce412ee1ec1b499c4f039cbb51e2dc91d57e12149c97ce4744e77afff8df7c3064b1904c3c552f15d43230dfad980a763e4bc0dedd9539c1a4fd77b261e61f00cac1aea024edbb93a19c038a8021aea024edb793a16c0b500e750525e9782719cacb00ca616ebec01ac56f841f05cacd627766af47f1db8cbb000f1d4e3ddd500dd2558a16e7dc4c0dd05550c1db03f8e108ea09d8b3c4e972e62f8a324704e4f33e167afbb345c63e30824df7ce00e1c84c9490ead925f7baaaf8e94deda59419205b8fa2c4dacd5042fa8bb1f2f9c4f3bc2cc27b400b923ede20044cf670a321f0db1277261f46f1bba15301ca3d5c7aec46fabd7a32cf5c03708e760927e9dbe46438ab01ce312ee1247da39c0ce7cd00e758977092be554e86f34c80735c26a67e4198a97f7389706d19b25703fb8126d47837272b127a2cd964c5de00eb844cbc4b54c036cd7789e680acbfa74b2569216576272b496f033827ba84332f9238c7039c935cc25910499ce7029ca52ee1cc8f24cec500e7644a9c9d98feea0cafbf7d914d6dcc695b50b34fc944cdaea05627796e4438264f56b35f0940eee50ac8283e7efb0d64f3bd5d0119c5f7e19e0620f7710524e1aab064200b41d69eea0a48c21a9c0ce4f600e4345740123e4b2703391580dcd71590515cac7c3800b99f2b2009677392813c0780dcdf159084ebbc93815c0a404e77679a0c612949d6b7690f50cec8448731ec60701487823f6509a8652e4225ec3c9241fd18409de92254c2663b19d43700d47217a11236e1c9a0ae05502b5c844a38e44106f57900b5d245a8515cfff0390075968b50099bf964503f0050ab5c844ad8e42783fa3e803adb45a8848d7f32a8ef00a8d52e428de2a2556f03a8075042edc8122f1e24b67005786efc54395f899ff3e72f9321259b4b7f09407a6026fafbf843e2a83ff0381ea09c9389d762f2b48c9f8199493753c17b02c09b4b096f5b161cc02b172fc6249b98085f9b21ed8abe4205f73a301235cf65b8845d5232b85700b8f35d864bd83525837b0980bbc065b884151619dc9500ee4194703bf0ace105860da8522150e5fde37bc3d932811986885e25760ea8c41652bfdb195cd17bb2a75cc1ca84e018e6cf5d9e13c146d46600614d269af82ac3f36cbd54f69082edd20c0def9551219d0fb2f922775e3b247cfa44f648af0678e76217dfef205d3d84ac5fbf3bf0d0252e62255d2a880ceb37c05b97bafba217e14034d98b5e4f008f5de6d2626ca46f7e908d42fd0b3c75b94b38495f5520c3990dbcf360977092be484386735f80f310977092be354786f32880f3509770f68924ce5300cec35cc25914499c97039c87bb84b36f2471ae06388f70e92544d225aac95e427c14349456b8849374797f329ce500e7912ee1245d8f9e0ce71500e7512ee124fd5a0219ced300cea337e65cfc60468fe26b0d59a01a3ac61594059144b90ca03cd61594f99144b91740799c2b280b2389f23680f2f84cccb7f3a7848df102fa5f22de1427875d0c2aa0133231a389df7896f04ea53d4f0689deb3a218807722253cbe64f602e07dfcf16f9978009cf88444f4f0b505f84ecac433a1f0cba013cef9205b067d08c07a322556f5813d5ea540efccd0126a64733c2e05004fc904c0bc4d0ce07900e0a99978553bb55e4df49a3caf0190a7b902328a13b75f06204f7705641457aa790f803cc31590515ca9e62d00f24c57404671a59a0d00e459ae808ce24a351f019067bb02328a2bd57c01409ee30ac8288ef87c0e409eeb0a48c249ad6420bf0320cf73056414d7e0fc1a803cdf9db593081b4064a33fbf02942b33d1cb2edcc47ad9d701801764e2516cf05569df98e1ccff669b9ae94b3e125e46857314c0792125ce2e12e72236db3b5dc3b089d4a5c233f95b16fe37dee6d2f6bd5fa2027b23007b1125583e9e0c337829f3bfe6c6fd718af8bbdafb3d53786cf4cacbad00c68b2931b603d9dd8737dd33b746fa23ff9ea0aa76a2fbd8eb4400f312775e98221ca324f3cb6280f2d24cf8656a4da2bc487e77753c78c67d994b30a3f82adf9e00e62a976012f6c5c9600e03302f770926e1081119cc3100e6152ec18ce2874207039857ba04338a2b1a0f0130af72096614873806029857bb0493f0c92319ccdd00cc6b5c8219c58f32e50298d7ba04338a3da07c00f33a17d736209d3a4db6b64139c07abd8b58491bf264585b01ac37b8bb6404614b946cc988e900ed8d2ebd584ada16251ba4eb0070dee412cefc48e2ec0f70deec12ce8248e23c10e0bcc5259c8591c4792cc079ab4b38fb4412e7e900e76d2ee12c8a24ce1b00cedb5dc2d93792389f0438ef70e5ad48d26111b219493fb104ca3b5d41591049940b8157dee50acafc48a2ec0950deed0acac248a2bc1aa0bc8712651b9698f7115c79384333e5c8fae583401979af9b2f9a123ec5247bd1f43880f53e573239e9bc0fba35b14126bfdf1594059144791e40f9802b28f32389b202a07c3013af0d705495f1150d4a441554c99665aa022203391994940f650264de260a721200f9702640f6df44414e07201fc90448deaaf42f541f0449cc22ce0048b2a18c6b00c847dd99491cc529860b00cad59428f9727efe101acfd893189fc33ed60bceb376f4b2720780ed319796642ca49c1a43b624e32d00e7e32ee1249d6944867324c0f9844b380b2289f32c80738d4b38f32389f30080f349ea2a874f70a991ad483e09a6584e78895ea3a705c0f6942b7d6cd2f291acf6fe1f40f9b42b2849cb4632945560b8e219575092968b6428b704289f750525697b920ce54500e5739428f90aabfce5e7455ea0d962a625a730072c161abd8aa623281d9f7767bd8d28be73b633f0c3b5d4afe1ab119fc4d0993a9da1f11ebad7508047be9089e9d3752d1331525e009f2c922e14b10f15daa100edba4cbc9492da501a690d4ee6a70f01982f52c2ec6a2839a7783c867942c56cb497aa659e40a53c06d7501fe25950cd48573d205b7ce72a509abe448937b818bdda4e1462f3e512e09bca123c15c0675fa66e2a2998fe1a313599aa98e8beb00be0bd42ef918985e7f9db3b8ba5ef1d28300e0dac1333c2dbf22f955744b0f1be3980fa2a25d456422db15ed150eff76cd16caf161791a1eb4c856e0b806ebd8bafef91ceac24cbe61340c5f39a8b5849a75193616d02b0beeed2b87a21e5cc21b271f5c741e67fc3259ca4d303c970ce0638df740927e91441329c37009c6fb98493749a2019ce3300ceb73331b2149c26b8a98c2c95018cefb8fb623e616f9dec05801d41edfe2e25da66de0e3f3d479ce6f389168adb1301eb41056c07e08befb9f4be23e9435eb2c7187f039cefbb8493746c930c6737909d3f700927e97373329c9301ce0f5dc249fac0970ce7c100e7472ee1ec13499c27019c1fbb84b32892382f00383f710967df48e27c08e0dce0e6701c6197926c38ae0dc0faa94b3d74d2c575c87ae8f7b104cecf5cc249ba301919cebd01cecf5dc249ba921619ce0b01ce2f5cc249bace1b19ce1300ce2f33f16a1f368d2698d1a3f7f0370f80fcca1590519c02bb3300f9b52b20a3b816cc3000f21b574046f1ebbb8500e4b7ae808ce2d7770f0720bf73056414bfbe3b1380fc9f2b20a3f8f5dd1500e4f7ae808ce2d7778f00207f7073d52cc2aa876cd5ac7d00d61f3331cb3dd50138c27122b2e1b7af00cc9f5c8249f8bd3432987f01983fbb04338a03c34f0298bfb80493b0274e06f31900f357976012564064305f00307f730926618f9c0ce63a00f377976012f681c860be0860fee112cc28aeb1fe1280f9a74b3009fb4264305f0130ff720926610f9d0ce62700e6dfeebcd41fc56f9fb603cfc9ffc9c41b937c6151a59aa109d7b3a8e055013ffc3773eb0d8e89afd15149f94e2459f6dd1e60fb2f13036cc18524b8c19bc61aacbb0290ac1121c88e12e41c2f102f03f964fea572202d5822c2c135c25e771915d26a501ec628912adfecb789fae631c0371b5082dc0264f2052cb138448600922d10712a00d8901260b87581a3f8e5e7090065234a945d98bee48ebf68c964cf180e576d832fe72f16de4a38ac46f68afe5d006c96ab6009ab2132b039006c6377323fe1131eb2ccbf10a06c428972336f27f8d9a3c4122784aff0913d676c0cc035a50417fe15be283e69ec025a96cd5cc249face3819ce3d00cee62ee1245dd1800c670dc0d9c2259ca4cb9790e13c01e06ce912ce3e91c47936c0b9994b388b2289f33e80b315254ebec303f38521a287a91968006d4e89a9fe0b9011f66dc85ecdcb03ded7da45aca44b449061fd4c786b932c4d7c442df161cc5f5ec49f0d592d3b7ebdd948d157f13fac55eeed8f113ded456c8607649af72f5c5aece7fd331d8f892741c3d932b6401ce57a15427bae77965b56c372f9ea215b70d768255d235b5ce577526731fe09b0c522e2b087951dab6b0dc46cb9c4f97c4fa9ccdbc2b564c70b0759ee85e11d2a3890385ce807fb73b54325164987a1da6aa14a817553c4dfd5deef992235b2c5639ecaf8dd829f95ca8e25fbe854760a8bb7e3611231cc8ef18ff8ce12b4ca5965dc57d45234c3c44327be3467b6183a5828f6cac483013d6c8d603a49a608a7d1d4bb829f9be9a55e9567d97cef77768cf7339788fbf947b813c7c4b02ef78a79def1b122ae65deb565625b1a6796b3a3172c56e4fdf2c7837ac747827acbb587e6ca3d75bc6e4deeb5c9d5da70d78c994bad3969cb6f75c5a8249e6ab3589948ad1a71b4ae98d61d3f3cefb64c922a39d93c2d36e5f86fc9d35d26bb70d37631fe219bc95ecafbe27c11f585d2fdf94fd6ff0375a66a8aecce0300 serializedProgramBytesString: - serializedSignature: a3ea2f7e804069a33fbb6a854a882c632a9b7db567900852e841f326cf264e3b9fbed5220e22850ecff418736ade481223a239d50abccabf42103a97fcbf6200 + serializedSignature: 056f2e77e62a5e6368752131e01f02daa7d005d91106087820af9eb7656dfff747d81fb6085d3d5045afe9b8998be10771dab8dcbd510fd39db8c513f4b4fd03 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/77a735fdd8cf6ba49aa979e0eb722c64.asset b/Assets/SerializedUdonPrograms/77a735fdd8cf6ba49aa979e0eb722c64.asset new file mode 100644 index 0000000..c695ad1 --- /dev/null +++ b/Assets/SerializedUdonPrograms/77a735fdd8cf6ba49aa979e0eb722c64.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 77a735fdd8cf6ba49aa979e0eb722c64 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec5d077c14c5f79fbdd07b2f0a12a4052909109a025242931620140585401288846212aa0d143b2a2af686bd77ecd87bef8a8a8a8abdf7aeff9dd999dbb79b7977373737c72eff9fbfcf8fcdeeed7ee7bdefbc79d3decc44b289fd9fd5ddfe673a994246909e641a29224bc912fbaf11f675b1fd3fe74e3ccf27e5f67581fd6fa1fd5b779219e74bfa5f17ab95fdef58fbae8254da5f2e27f3ed6b29fb7d2a29b6ff1e6b7f5b6cdfd1a725f6ff8bedb7ac6af647d3481e994426929656f33810d3d94715fc9945f5b26ad9ff0e27abed5f8b995034916cf6534bfb9fa9f62f15ecb7c5b6d0e2bd59e460a6d662fbb7f9f637e5a4ccc69cc7106b553b9fb03f8873e9c9afd9fcdac3fe7f6dfe7706ffbb16ff1bbe5f9d5f73127cbf17f8ae36f89b32b439c6f7bd9d6b64bc7dad613fde08eee9b75ff3f7fa3878918531b0faf26b3f7eedcf31cf4840fe9afc3a208ebeb1300602ac4438abc5affbf1ebbe5cde33934c7fb0c3917511c0a35c4e00f2ec07d2ae0d7ea7cf0669e82ef271a22f1f273af918398fe7df4efefe107e1dcaaffb736cfb9d66f5f8b361fc9a1b47aee1ce772cef84cdda69662ce3f723f8358f5f4772d9f2b9ac67817b5d59449e8ee29893781a9b24cfc5fbf4f7b3f9fd687e1de3cbafb1fcbd73f8fd0109ca9388fd099926f334ce05f7368fd5e6c6c012f93ec597ef53f8b71b1d1eabdde3d307d89f14771cc73b2f013dc6f36b777e85f6de8d5f278267222f27b9f93ca923784f7c27decf77de992c6c21962c53f87532bf4e75d3985ce6fd2d3295eb783eb8b739abfeb28fab7de27025d29ee6d319f220b851e5a13b787f3abf16f0eb0ca0dbef09c877a0f36eed99fcfe2047df1a5b9ce735b6fbe49a19476f617b05c46b7b050e6ecd7a0e6ecd5cfefe2ce7deca22aeaf1738f4fb0b7cb8d37cb8d338ee7ae22d83f1e49ccdaf73f8751ebf16bafc4d39823f3b845fe7f234a713af8f127970b0fb6d0bc17da2bcc5caa3f9c45bcf72ee2233e2608aef8bf8b57682ef8b778a35642ee1d73a09a659875f1768a459d7b185da1b7db670501ccc850ebfb59b01196c9c3a6df87d29bf1ecaaf8b38ff07f9ece0a004ec209e2c65ce77b536833ca0b2dccaef17f3eb12af2c768bd32bd385a993293293635e04eee9f540fefc62704f65fdde49a7aeb03b51e71fe693b9dc9ccc762b9c7d57ff46601b897c17cbbe2a1dfdeabeccf5fb993f5fee93adc495bbd64ef0ad902391f2b0927331dbc7f16c47867a82db55bef72e01f7f43acb4d8ffd4dbf15b6d51b3ca7df5e0aeee9ef2b1294750da96ab314e71090f6214edaf5b9ffaf9fc3df3d9c542d7bb26fe9f560f0ec608e277cf411a46a3d26dea3ba6d06f7f4f7d509ea76a4443e9aee8e18df1e45bcfea708d883280b477379e6106fd912f5d140f71b4bb451d63af78d842cebf83773012f731df91a3ccddf39865f8f27f27a763de0819747729c9b765b21efb1785a0dabf1774ef0e95de9e2d4bdc7b936147eec44e22d33fe77e9b393f8f5547e157efd74f7dd6922ed0dfc7a1a97ad90787c3339053ca7d779fcf7cbc03d7def6417bb85b051d15715b2caf253f40f85ee321f10cbcece72de9dfa38bfdfe470db6810cff3229f0ceb486cfbdd8beb359f78ed7f3ec7ddc47177f0f7455f87b7ed23452e7e44a47daeabd3309117e700dcdae0ef44648cc5c7854e3ad1fe90e83f733f186da7d1bf7bf074457b05b6dd2e00bfd1fbb9fc7a3ef1d4393165e13e95d48fa34f4ff01ebd5eaaa17facdf6af0ebe55cb712e2ed23963879dc647d0cac2b1c9e5a097bbbd2f9a6a9e8135fe5fcde58d8c7d540279a8668a7d17744ffe41afedb42a0b7e847958267a2cc1d0a6c86fb7d72ad2f7f2ef7fd7e1dc090fd7e3d9041f6fb0dfc39d7bfe9f7fcf98d3e5dcef7c95a4a3cfe82dc5455d748a92fed2b15f2f266feed225f5e2e72f2a5597e0cac5be479d97c2ebfbfd59797b7f9f2b24c9297b7f3df16837cdb9f3f5b22c9dfa58007515fdd81e4a5f87d0bc095fd7e279041f6fb5ddebc6cbe953fbf1bc94b283fcccb7baaea1a59e24bfbaa04f2f23e7ebd975f65edd7fb89ebc729eed509e00abd4e8e81dbdb877b4d02b80ff2eb0331701f42e44d263d61eb626c6b19f1da3abdb7edb6e5a018580f13a9adb712e34d8f10afad3f4abcb67e18a96aeb8ff1dfcaddfc27bc9d18a920556dbdd27d16117d9ac7c13bd056c5ef4f005cd9ef4f021964bf3f453cb6de4af8c9a789dcd6a1fcd0d69fa9aa2b7b07a62db063e5e5b33e9e05bfcb89b7bfb2dcc99fd6423ed13eba92c4ae1b9f73f08f7c9ddf3fcff15670fcebc03dbdaef4a5bb92a7cbfb057b88f6403dfe9cb77ff610e3662f38f74735e2f72ff2f7b6fade7b89bf27f47ec5c7ffab3e5b11fd0ca8cbcbe037a8db1ae26d93bcc69f1f0ef26a0d7806f36a5882bc0a19def0f1b78ae35d0feee97b6fb9f21f2d747c935f2f717f6b2cdaf5227feb0139b6c96d85c90af24cb98d24747e3b8ece2a3ee908e2f549473876b0e7cb31b0dee3effc1ce39d0ff85570f03ec73f9278fb2147f2df3fe4f747f97e177dcb075cee5b9c08e410d8f49b1b12d0ff237efd98e31fcdbfbd11dcdbbab5f9dd49ab2d71ae6d44fdb0d387f3892bd7ba4dbe6f9e4f401e13bff17670642df1fa88b58e6e6d1f265edb3d368e3d7dcaaf9ff1eb711c6f1df18e07ae23ae2fc6c6b1e2a51543afc8b1c43b76c0fbe8e4737e7f0cff5db4558ff3bdcfe5265ff0fbf5bef74ff0bd2ffaf75ff2fbe3bdef93af000ebdffdad52d22c621be01cf8ee7cfbe75f9c9e4f3819113bd6993ef88b73f28fa7c27f1f76e06df410ec4efb7f0fb937d3a9dc2ef6f05f7f4bac1872bda5e5ff87e17b8a7fae415fd8a9ff8f54757c7755f836f009fe4072f664c9b1618a7f16f6e03f7b64d67ae8d8121be3d9d5f37728cdbc13dc5e063369931ca6de40c1f7fa783e7f47a26fffd0e706f63b7cf8c21df37fcddb37cba9dc5bf9d9dc0b7bc1f1b39dba7dbd91c83fba6f6b1da3ac29fffe2cb4361b3140f8c8944f3f55c909ff4fe1c2ec316706fcbb0f750fedeaf446edb9b7cdfdfe9fdbe8368f3fec6afbffb643b8f78c7c0fee4d7bf709b247ffb643fdf7d272adf1f3ef9449b53c87d014ff72e2087784eaf17126f9d26da3bfff0fb8b7cbf8b32258b018855469af3ebbf24691f4bfe0358898cfdb470aef4cf64d3b42c8095489a2df977118d343300562269b6e2df55d348b33ac04a204d8bc703b1f82cfbdb0e623ef45ffe9cb7e52c51bfd07a9edad1dde05ee429b7a30ebc9d63f1f947ab6e6cecc8251cf31e708f60c6d4858f115a0df9b581fb7d2e6fa35bbc2f6235e1d7c6ee3b7df99880d5945fb9ad5bcdc03b3c5ec5e23619b994cb7e2fb81779cfbfe9c8cbb4c56d8ad0b4ed3ceecc658a6ce618f739ef77fedc2b23fbbd36f85be433c7efc47d080bedb3ef7bf0712dabb5934e17e1d3785bcc82fd08099fd61efcba670cfdf93caed516e75ab4c7e2a517b34c70aebaf27e52e432e2a91badbdb87d6c07bf0b5f41ef2fe7efdf0fee6dbc2c3ec760b5e3d74c5c572947ed39ded520efe8fd555e7bb0f6e636900f7e177e85de5fc3dfdf0aeee9f55afefc01908e784eafd7116f99b90eb10bfbda55d84c0744c68e49ca78b55c46a96d7692e75f34bf2cf79b8e222f3af36b57fe9c8f07597c7e8acdbbf16f7a88b2db85e7d97ebefc7fd09bffddfef6bd2fc686ae20de76c115bef7f7f17e1711fded871cfb88f0f1698bc726a13ec4be76e77969758f6383f05dde1eb0789cabd5d37db73b6fab587c8ecdea85dbb4c5c71ad1f20bd3ec43e2fb835c053c1ebf6af58b81d75f018fcfbb5afbf1dff93c9ac5e3542d1e1f6af131d0c8f5c41b1bc1c767647d4a6b701c39e8b32171f481b28af1725f198c963949bd11b3ce1b0aec80e288b99887c13dfd5d52cfc5c4e5be9b7426aeef16717a5dc03351a7b426c9fb785ece233713ef5882e827de44bcf3adf4de2e933dab39faf4ec08e4a2d751beefce05f7f47aa32b2bfb9b62f1d8c79ea2ae1eeec58cdce2f237b81e7846df1d01b0a0afe1d839a23e143e50ccb13c02eea1dcb7fae4bed5c1c9e6310ad1720df341c6af2cbf3a797f8bdccdd37a54f23b7dfe18788f5e6fe7cf1f07f75436e11ff9588335925fb94e168ff78ddc43bc654fc42548fa2151df1947cfa86c5b38f613e0de6fc3c2d6eef0d9da1d3caf663a32883cb3843f1a2bd7c73ac0a7d75d24657a59e3bcf626ec2c9e9df412edbd4efcf72715ed46c4e809dbbf8de33c05eea12d5c0cee69fa173972f716f51097c79ae0e5308aaf6013fe32ceeee9b7a2dc266a335c074bc4ff7626de3922f1bb886bbfc2f75cb49584cd3dedb539664fb5c1dfd59ca51d2cadf640cfda3edcc9e01d993c53803c362f7d443b762abf4ef3be2f8bbdb50a7cf930573d1f44fd10b953a2c344f01bd021557917b3de12363e3d798c689d162f163816466b8ea1b1d684b535045622e307a2dfa611176d35035889a429da84076aa4d9186025326641c72a613b4fcc6d8b3a8db6a9e0f828bdb7cb5f3f31df28f2374edcaac5e77b2d1ebb69cd71dfb70af9752e89968d6376f0673c2eb3dfe38ae9f178396b3ebff218b1c87dc43b0722622262cc81c44b2b26bf250e665fd1cf12f19fc217dd4fbc7deafb1d7d0708dfc0e3822c31de23f31fa5fc1aab5d7da83c9fade2383c2e42bee3e34291ad3ef9b772f9f93c87880db516c7906d8973df85cfc30efcdc9716ff36f2802fad07785a7ceed35a1a0787f31379d087f3a0833350d89ca807446c83df36047675f00d8f4db52a7c7c61fda68788b77e7808498b7e539940fef218ef58fda6a8cca27fb922399b8869efabe498517ff2b08ffb871deef7e575beb53a0ef7b05cae8c63bb6b12e0edf038bc516c3e8619798478db688f38b2ef779ef73d8bcf915b62aefe72dfef62ce9cb783a23e2d9e3e3c26db5acbafebb81c8f12af4f13fd0f0dee62e6f1b144da96b68e491e53b493a36da1c7b84ecf807b9beb41a21ee0f6648939611eef33e87b2f5ee471fefb73e05e7c97489dbc37d03159be8e035889a4d9d6d175b028137c1edae2f3db91275c9c08ef9f49639f63c97412fffe49e2b5e9279db4873473b08688f22bece6c4d83a587c7edae2f1ee969045e4c753ae9cd1be3fef0b59a7b9d8519b02b1f4c78b327b2ae0556089f853e1679e06728a67cf02fc337c323ceb4d37f21cf1f6079f737819fab04f1ffe5de479e2edd73defe3f905fefbf3e0dec6db9fc77fedbfdeb90ee5be245a0e5e047af8d37c9163bec0bf399963f2f53f43798c94c563ff2dee1fac4d3ebc672479f24c0af344f8b738b613e1f61eed933f4d3c7d1aa177f4f767c1efd45679ac8fc5d70a583cf6df12f3dd69d237aa87f051225624c935fa9658072fda80b94e3e0fe3f10fc376104f19656b1e629551311fce79b12e7475982ec69e2e70d218dec6793e5cf473f97884f5b55a9a641f6fdeb17b90b7a42b4f4ff45fc5dca8a85b0f48309d583cf2b9504bc482bee462b1bf93f1a39b9d77c78871f3cb1c3d461438cf472cc4312cd12ee818236d1e4b31e24a8ec7eb378bb71d2c3147c2c7bca3e3212f136ffb52c407cada04b1f4e3f350515b9695ef58dfdfe0bceb5fbf9d57e93ccfdbc1df13f3dc7c5cd912e3d56f116fdbe6ad187a705bb4ae896d239688217d0de4ff6b8e5c23455e701eadebc0ef304646c4bebe0a305ee518ab7cdfbe4ebc7142af83f7e1583c8fcd8dbc02305fe198cffb30dfe0dfbe08eec5fb10937f3f9aeb6589717631bec4e38ea4635b2266568c7dcf25defa46fc2ec671ef90ff6e89b1e3f6c8f73703dde0ef777adf8bdac24b3e5b90f589af03690a7fcec7932d317f748ffb1d1d5665cfee4ed086203e95e54de28d4b7d93f3cef3c1ba378569f3310b8bf7a14459a962b382afbbc0bd66d989d96ecde21897258f616d0558898c5f897eb368136c23de76db36271fc68a388e47f895f791acc7bc38910f88d76f8ab8e8589c3d105b564bcc61bd4dbc6dedb7b96c6b1ddcb1a28c8b3eca13a94b9bd531c2a7bc4bbc7103effa38788778db5deffbdee7b1e1a403bf7fcfc7398f373f408c5b3c49aad691e2bddae06f7add0e9e6de738f700b960badb89778e50bc2ffa80a2dd1987230faef0154ff930b6ba793046f847d13f13f3cd9c3feb612ed7396a72c4b4f367251cdaba8e13f53ae7c4026ddb71a23dfc9cefb7786909be77f8ec758793e6f81c077fbca8d3852dde1d07dfdfc7ff9078fbf81f727cee23a36dc536c4d3c79f20f87f9e78daf0d1f6fd47fc7d312e38023ca7d78f7d76f3b1936e14f7052f6e95b9c24f88b77c7cc2af9f0239a13c9ff27b310ffc8aef791b60772ffabedde9e667b4afb2d32b9725e69a44bdc9eb47ebe5e4f488d9878b97c7b1ecea3522edc74c5ceb3c9f28f25dd8d32b71d24ab04f31518c038b7698af4f11371d995fe5ed2d22e661c13aa49344bb87af438a7ce6e247c49a0c91079f13afeffcdc91397f990f5f94992f88b7cc7ce1bc3f49f88149e0796ddf3b7f7bb1a2fb3ad932e7f398756b1bf88ddebf03b8117d8077c1339157db5dac93c538f2dbbe74302edfc3d3147c69a539c18bcf302987afe232a1fb9d7de9cbaf2f1d6e27e77bdf63df25e06b099f6b8e7cc571cf07f71457b48712dd03ad1aff8ec7705aef136f998b553e455b6706bfdfe1f27baa68db7dc8afc297c2f5327c6d033a9e40df016b6ea4b214f2f7be25debae75b47af297c1dfc14310ef331ff6e6e1c1bfbc487ff1dc77f0ddcd3df257b7758dc4f5b5f78313ceb2dc4be1edfbbdf47d72cf0b50ad6e7804f61af3bc177f45ef887b9c4d30e55f6b55f3ae9f8d7211788ba528ca76c8ac3db570e8e7fdd69418122ced71c6707bfffd6b917eb522d6e3b625daac5f32322d61c711e2cce5304701ff9013ca3effaea9178b2499f8975423ff9ecf02747ff69b9dc4684df1476785aecb4c47b919fc17b22ad5fdc67517fff2bd0f317f08c5e7fe3b2bd0eee6dd9a6dfe3c3fd9dbff706489b5effe0cfdf04f7c0d744fe24de714b81f73790e94f9e269f5fb77ef0a5f11771d7ca507f20c6463e06bfd706728a6702437c0bd26757fafc2d9e07cbbc69c6cb8398e546f4fbfef1e5fb3f8e9e33ba3b69ce147db51ff955e8fb1ff1b63d799e597c9d1d4d0eb651d8bdf88e5eff25deb6e9bf4eba336b79df13632a1911fefe36704faf19fcf9db5ef932327c72beea7d6e01bb14df447510eba25ef03e8f8efffce2d52d56ff15fdf69d38698b7e192f1fac5e8995d7ed7dbcbe08ee6d5e0f12f5082f5316972fa39ab7cc587c0d9b7507f89d5eab13af7f8a67077f2466071996d70ed83d95b751f8ec8071447f978dd3a5c90e44b986e320d69f09e6d95f7a7936eb71ef7b61c8b328afb2710fdd3c6be7f0b2508c65fcedfd2ea316920f7cfd65466d5f3ed406dfd16b1d5f3ed471d23b78bcf7bd683ed4f5e503df8b31a31e920ff57c72beea7d9e521feafb3ea386c2f792389c0cb047986a3e46d37e2ab9effd769021d6188a7ca8493cb186ecdeceb74344dfb6137fde80bff708b8a7bfefe7c3b91fdc0bf985eeff7a65cc688cd89c28db4d7c36d7047c47af4d7d36d7d4917dcec3def7a2ba36f3d91c8f15cd688ed85c739f9caf7a9f07c6e664df37d4b459b0ce58d96645da49da6cca6d5eacbf1676d0c867ab8d1cbb2914fd3661f32d7d362fd6bfee170347e82feac54cfe0cc44067f075adf3f8fa9f79ad80deb277e915ac87667fd3eff3f8f73341bad8bb9b0137f479672efbbb3e9dc5f3ed1c9b7f47ab4976b5f87b20be3a5a5ef624d2f21c1175ac1853de04eec577f4da9678cb338fc99abfd1fb5e341ff722def2ccf7b7cc6847e4e5b99d4fce57bdcf53dafe12b1ecb370cc7497f1be7c6cc4e2fbe0666492dda78c673ab6522cf6a812e3cc71daa81171e57d8b086f3747fb226779d3cf688fd8b828bb7bfbec606ff01dbd76f0d9780747ee924aef7b511befe8b3713e7693d109b1f14e3e395ff53e4fa98d73cea27dcd00d878b27ddda0d973c27d6de1437dedf7681d55dbfdbe4a9b5db4d9ce05f7769e1e799e0f5b7cd7c52b63065f0f156dfb5f0cee695f63a793270bf938e491cbbcdf89755651dd2f47b815ba256b43b535bfefa2f77d742e35d172d5c58b13ed2bf97c8e58cfc2daf4f0fbfae03b7a15ed9407c1bd9d3f877eee7d2fea73445b7f1bb8a7d7787d3321a742dfecff5bdefad763aafa89687ac9faa92e9adfd7d6fcbe96def7bb9bfed1b2cee73233b2f8ef4f837b7a6dea9621d1cf5d31de9b06d69f8e087f1faf3fdd8a78fd04ef3b2c6de47d2f0cfd693106cdda28b57dcfaa032e05ff93c1fbffab8bf0efdb6bca5f5dedfb2a75610bc4c6457eb6f47ddf127c47afad7d36cefbe287fdec7d2f6ae3a2afb80ddcd36bbc3ea69053a18ff9ffddb6546dc3b39740acf7315f2cd2fb5f5db46bf86baff9fdff73fe3d7d46d0bf8af07d0b23f5bcdfa1ed03d15f48b27db032c7fb5e18da07a25e8167c6fcbff6c7600d0a8b83b2bc6da7ff954db5effde33911d117f7c730f8c717b1f68de88327d9be59f3baf7bd5dd1bed18e61f85f194d3a86e37fe5d1fbbd18d314df7be21be898258fad4b741e413ab7c0e7e3d8591e8adf6674e5f25c04eee955c4db5f0ceeedf27d14dfffef2831ff318c5f5f8c9db6c08d883e7e378e7f13b8a7bf370678f4f758fb19cbd2e9eed3a7bb37dd88a8f363ed73cfd7d24544bba427ffe63d704faf3d5c9d237cff8f8c6cf75906df83342387787c6d74ccbc1778b71778975ec519c4e7827b9bff75f93e6cf15d1f9fddf1bd4823a22d94cb7fe7ebbb440c6a465f20432e7846affdf8371f807b5b86b5058e0daccb42d2eacfbf7b1adcc33407f0df77807b8abbddfb7ec640fede87e05e700c713ef2e2f8e5cad817e8c8f7ea61e7c8c4b257ce6bb4dcf6229e727bb46f2f877878b1e25223bcdd19e17526e1f1ec19624dd159e09efe9ee83a6f1ebf1a1175f7205fbe88fd3f7e485e76e1b722f1f6518fa5ff9e8e2eb922768b9f691d4962af54b6cf18d56d30f1faafc18e6d1cdbc849eb58b10e4eacc5cae4d7f6fcfdd15eeea3b63b06d892d8abb32d7836863fdbcb7d16e173b391766ebe9d26e6be38ae05ce9c8da55784af05cc18e2cb4bbeb76e0668c364f03d743386fab818ea70b19eefff701cdfc72bc2e77c2362bfc9ce40de9fe57244c4fcf0e5889cc37c720a1e870339f91eb219237d728ee4723eee939397ef4857afbc81cfb304b8b0f819bc1923c03361d37955398bec03be03f910fdbd1bc090fd2eeacb2b7ccf45fd32ca27b3f08723812c2313e323a61fe1b8919eea1811b1c7b758a703ea558baf2bc838c0cdc7b3ba8367f47d51e78ee5ba8af51ea29e1e07f0f87adb8cf1404ef1de04c0c9048049af1389b73e9fe8d8f649955ed9a3df89f9bba7c03dbde6136f19c977704e7c1dc80af864f7b0af33dea7c764fefbfde09ee20d70b83a693c22df14af7cd1dfc7fb7e17fd0d61eb5301977ecca9de6f04565497f1c4530747651b06d2c4b0a7c8b1e3f120d288e2807c17cfa2f24df0ca77c2426f9eb07d8554ebb3b77c3a16f0349e01f7544e71768e58c729da2374fd64331f96d8cf22d6b9723259def1c932cd27cb3447969345db48ec3d20f646d819035bc4078ab234dd575ea673ec9f7d7a2682cde5ce98e1d53b638637ed8c993e1b98e9a4b9419c37c3f72038e57b9fac302e49a435cb97d6c1e039bdcef6e937db8b1dc51167698afec027dee751db13677b72db3b65ae2fcfe29c5318e5e0402f9fa83eb37cdf097deef4eab3e13c1fce4100c79673c38d3e1cb01fabe07b03afff37f8653ad087f9aaf7793c9d63d647328e441ccb213cbddbc0bd2de7a9625f3c5e7f589fc54e5fe04544ff49f4bf445dfe29b8a7d7b9be3c98ebb3c342fefb99e0de96ebb4d93e9c793e1c71febcb0a5f9c433c611fd6e3ed08bfefe99932fa7893d553f2709e92dadc3799f33c2f7ea8c8833e4f9fe9e19453ccdbbc0bdc5db67f4f9b531b03bf36f8af9bbd7817b7a2d21de3ab5c4e1edf4418e7ea78b75bcbc5f1a19e0c32d23f2762738973aa30ce8531bfc6e25deee8cae1bed149bdf88e8270bfd1670f9ae07f7f4bdfddc34ce12fd21de3fce58e8e364a1c3c9463efe7386e05fec792bfa1f654097fd7d721cea93e350ae83645d7664b09737b1063b6309c7106bf2645c8bf49681674b12e33f43cc6de9f03f3431bd23c3dd3436099b12fa9402994af9559ccf7e31b8b7f93ab39af7bdb8f28de0d73c499e8df4c9bed827fbe2dd33cfa43cf5f2c97b18f1b6770e73f83f4b8c858ab5d539ae1c676df46245fc638189ca22fa47220d313629cecd7e0fdcd3dfc7b8329cb3993f137d5f301e9670fac37de956fad2e5fd980c70667944f47d9683bce2e77d6788b3b4fd63a260ef62f6b778975ec539d1e7827b9bff738a7cd8e2bbd5c4db87e2fb4f47c729c599d7fe31d1c3810c6bc0337a15fb3e7f00ee6d19ce5ec8b91e84a425ce5a7e1adcc334c5bed13bc03dc5fddefb7e863823f943702f3886381f7971fc7265ac053aae25aeef893526ca798db613c4b9e7bccdb949b4e586258627b533de27cf5807ec888fcf64803da833f899be19c72276b41ebcbb1ebc4bafc7f9ece83887a3f39ef6618bef8ef7d9d1f15c2edeafcb3801b1a313810c278067f47a92cf8e4e726438f75687cbf33623698933849f06f7304d71a6f00e705f0de0f1f7333600d93600cee9559c27fc39b8a76988beb238f7f70e705fadaacc19a78334c4fe12a3e3d8d87a9f8dadf7dad839621c72586278de67d52d7626de18524c0ac93292cd168cd151c4e9640a1961b7fda79122b2942cb1ff1a615f17dbff73eec473f165779219e71bb6fe9bad66b3ffebc292ad24abed4f8b9df32da7da3715f6a362fb7d8a31d6fea692f421bd19f662fbb7f9364e392923a5641e69cdce8614a98f60ff16da6f9432d02f32aa24716f9524a87065f6ff8aedcf2aed0fa99015f6f3d1f69325f6ffcbed67f3edfbf1f6957e3597f422b3ecff7951a6dbc99691e5f65d81fdef328637d716bbea9bf1543ad87eeaff668a8db98449b7d87e22085d66df973109a7b27f5730498b99f463ed6795f633aacd0232dcbeae62a955d5bddcfe5b966601a74c2ee3c14acf2d763cacc8a63c5b1b2a7d36b3c5ffe5c8aec8114a7d0d5a3ee87fd5b2594bf5e42a39f13f0e1d27430361c6728c5e8c32cbf3ac37c966b13253aa30a8ae63550de5f6edf0dd8fe4c6d445ce0ccdee3d99066e0eafc97c3567af0bdeb3aa7b55eb43b26b50d5dac4512d16b1142f8b9d78aca242f5ead572a8a07efa2d19fd6cbb83a969a4df79af94bda79e013558e5e7cd00760c6881edd5f241e5398d095fc644f32b43a197304f28fe2ab6bf1a69ab53ccdeab407f81c20fb3ff2ab785584daae47c0e15b326cbbcaa55733c02b0ec8bc8b28fcd7017ec92d2332b8ee7946760ada8166e0666b3f656ab18668ea5c51a62d5796b4c14c42bfe1b5ad26de7572d8e3aa9bf55d2ee8ada6f3d33b7f9251da635d87ae7a42505677cb9b3ba3cbfeab0fc4a460a2cc73264395627dd052e7e0d132bbfea46f572f38bfe27e7b01e62f3f164c018ac2663b06eba6d9efeb694a114daefaa7348c3d4bbf99d969cc0068811c61701a3b0ba84c21c4a61438954a47a6d9f54542004b9862c73eaed9aea3c39e3a6b13b2d7d1454478dbb71ccda58d5b46bcad8630b1ae61a654ff432a7dadd8971f66f85f6fbc5acc94a9fe7db88b44aa378c3580a6ecfd4fb456c66e9a85e0f3fb352569b32563b823eb3ae6418e3b5248ce7507b6d263103e6e3fc85a1315e186a63c5acb96e31ab8321b7d045ae8b21b7d445ae8721b7d245ae2f2b366c8dc1ecb4141b777046fc35dcfe76a1adcc0ad6e35e6e7f2f1bcc895d5c5a275c5cf660c52593c88698d424c28a490359ded1877bca84f467dd1e78d635c480db680237c2acadadaeb535c644de4b53e42698c8ed74456e8a899ca92972330cb8bd267073599166c692de7ea9d325a338ea2d093acbde2ee166720782750d63cb8015d916b2aca13e9856abba355b4b59f6344a77f6e4314f362fc9eca193b5ed253ce059d419c9a278726059d44a9645d4c8bb6096e3cfa20e7816b5c6f23f2b05f9bf0706de3505e07b62b4ec93025adac82c97b9f445462d779afdcc994819c97e2d65a3ef2ee652764f5313230ab1bea0f63bc1be16d9125259625b7ab7a8ce607c85d53634a8d9ac643cf4dbf9af2632ccd283152cf3c26005b1adcce268cd4b03f5b46adebd30e46c5de47618728e2e722686dc4b17b9bd0c99767a69e06995215cda379b64e7e614fb5129ebc515554dad269edade9893ea930227d50103cf4d0178471938e5950630ea34ab3ac9bc1f6b1dce32eafdbcddf83eacce2cb4df2e047f8919487f17be4f1cefd64fe6dd58c3b41df10f20a8a6dc3f11ef3580792ffdc430efd419b386819ad6d005b3e17d5360c3599817d94fd78b74c59007e922ef83113238058474938067b37ece34a3650f9f694a6eb66688acbcb1de46eb2a7a2492dafe8994b1a1ac8c25970056aebacb729b66c83089863954c3e13e51fdb93f14cffd1e98698d488169f59481d331c2bce8cb2ef87ff67f55c0ebe1e0d998e4232592ff3d36a224790e569647e996e55e18f2685de4deb282cc7ac4eb8c16e444e3c746db6ad1d426d9b67f2871027faab69f4500d114fb5ac2a428e693dbf1e3ce623b88313207c1faba2349e25170e6b5a091c311e65d0e60de859622ac37219346bdf721f76de358eac1e206f3997d304f335ee269b6c9dc580c4f938b15d909ba45b6af0c9916d98932574f6d952e85adc3da4e55d21987a7d34f924e361b8959b34b5d83331d49f14a5848a78337d1be569295cc541781889602fb9d723b8d624f333539674097f2b4f5f7ec780d2a2f0e9359711892407130a9155600facb2c897642e9fc76952e6c2bf643be8d3c8715c3c3d863ca9293bba5ecd552b286750e9ce84c952eee009934f589732a68dcae41531c7820065ca009bc2f56c6a7e996f1fd64c8f5189e7e0b6b1026f60c5db107631e75a6c4a3fe6da979d42118f88112f0ad1135f0fdb1a27050223612c3aa8762c0b364658c8e698c60213099f6ff97da5fd02e40212bfd99ac3274bd41a65dd64bedbf6885dd1dbcbfd47ec38986569173984c4e6a14b3758d6238966f074bf2ed67c57c1b81811f22011f93a1069e87e5dd1c59def522241a55b990d76d5e6f98c9864b32d95284e57c1090e65c05cbd74c72b8dd8538d2be56da6f67b27aa08cfd46ffa6394d7dad4a9e8ec4e49f2b93bf0e903f1f48a892e228cc6f154afc96a5e8b746cbc069c3671e411a3e74fdb57ac3678c2c1daa74918c363ade3ed26ebed096eb72f6fe546600c5d1b672518a2ac8b112b9b2d9ecd512b22b1b64b4b740176e54b0bfdd260a4ddb0d03d66978d13acedff012ffc91b5e74457a96d59bc46f78a5427aac817500e65417489caaa5e254c76165612156164a932a0be331ff7aa8c4bfe65457f3af1364e074d08a4e5fc6ad7487e2c01331e0324de04958862e9664a8522d998f11bd4442748122d193659e834d4d2fdba59e03f78b531836f59ffadd36ba023ec33f86c3e6ce7313f00fa992b19b455d3b7d7f3e67ae825689b559fdb59a093d82c55e50f29963937bb665ccb3a55372ccbb4dc14cf63089c96e5234d9a932706ab2e592dccc69c38a9f32c17e7996e1f214c88a109b6b2fdfa545288f21a4a31855c88a118b09e8978031a652ce766c3abd8255d545bcaa761a04edacbacc448a19b3a5ac3a87bf77b3eab3aab0c26ea99633c4a9acb54dd7392d602e5b5ee82a59a14bb79e58c19b8615bce5928237a0865ac19b8e81af90802f53049f2103a7a568a5ac54efc572d4605efb25afc4259f89d5fcab746bfe0331c2574b08bf4891f08330b1d7e88a3d0b13fb7089d86d6aaa893d1b033f4202feb522f8c132705a77d02d4374c67a0ec180e99e22553a8e1d19574e8f7fbe6fcc671e2906233945ecc96afbdf32fbd97c0691c9565d8b05232a52cec1b83d5ac2edad8adccec52858abc96da10c989ae7ba448063048ecc9301d39ed43104e949d15d51d47b52f331dad74b681f5a4b8df622ac981fa75bcc8b31e4e375914b30e41374911760c827ea222f9421d34c3c4992899b6bab656229067eb204fc6745f043b182798acc3775223472c46d473b0321ee0865a19d7b95ccf364daf5aed3ce29f28c74d2d1cb523efca552ce1761726e90c9e96cf24297c5d1babd908d86d31427d9382aa99661d49f2aa1be7b1d35ea1763e0a749c04f54045f82f175ba8caf5671f2950e599683a7bdeca72a3c2ec5a4d9289386debaf9a692ce328cd23324940eaaab46e961981267ca94a0b1e70e7dfbda944d6443f7857c839a15ac1a57a7b11c93e02c9904d4b38d8f360cf2936c165460946e92505aa9486925e691cfd6f5c8cb31b1cf91394d45b15760629fab2bf64a19326d759c479056c7f9249956c72a2c9d0bb0742e4c2a9dd5185317e932b506cbe08b2519bca39e5a061f8e815f22016f535f0dfc080cfc5209789122f89118f86609f85645f0a330f0cb24e0d51aa8811f8d815f2e011fa008be1603bf42023e46117c1d66e457ea1af93198d85749c4dea228f6b198d857eb8abd5e829ccd16f3a473e9a43f8e512d04fc1a92e8d274ba63b66cc964bcf4b161bce364f9426be8eb64222954e5c763d674bdc49ad62b5ad30918f80d12f0bf15c14fc4c06f9480673554033f0903bf49027eab22f8c95866deac9999a760c0f440b62a6dc1eecc3a97b232469bf3c56cefb525ecaf256cffcb62168252c86cdf1d701221287433bf4c6ebde5dca6cb6c6bef693f55917a0326f5ad32a9e908301d3877dbcd4e57d2e986c82284334917deeaeea224d7a9980ddc26b18102451b380d53fa764d1b385de66733e9c352a37e168b082f6083e874f3cd1266298b53bcc8f78e847df216e693e9821473b262fe7ba32cbb69f5702741dad6f42c863a5464a5b6f51998cdde2db1d9d7156df64c0cfc1e09f8ef8ae06761e0f74ac03b365203df2403a7cd9afb8866b3e66c4cecfb25623faf28f63998d85b75c53e57864cdf7f2011f7136388fc3c193035f40731437f8824d3893c1ff39f0f6bfacf0b30e047081208392b3a24e68cde1cac58ff5d8899d0a31213ca6dac66421761e08f49c0cb14c12fc632fb712cb39f482ab32fc1acf5494d6bbd14037e4a13783366454f6b9ae76518f0339ac097cb8069de3f4baa86e352009570dc2b302b7c4e62859b9aa859e1953270ea25e991cd5a5ef22a4cec1724626f5114fb6a0cfc4509f83645f06bb092f91256325f4eaa645e8b99e32b44e22de9ee0473ecffd189653a3dbd80e4b316140d595fc57e59c67a1bb40daf62bbd76152bc2a93a269548a1cfbdfc5c499de70023d9297e17a4c86d7643234e132f4b1ff3f9fb5a7e937abec7f9397e0064c82d76512d40279411794d116af4a6a3762e6fb86c47caf6caa66be3761e6fb2666be6f2565be37634e6f9bc4e965283abd5b3086de963034b7991a43b762e0ef48c0d72a82df8681bf2bcb5b45f0dbb1bcdd8ee5ed7b49e5ed1d5871783f966bea9d62d7b40593e283d8aea9570a5dd39d980c3b62b9a6dc14baa6bb30093e8ce79a66b0f4d416bfdc8d99ef4712f35dd65ccd7cefc1ccf763cc7c772665bef762947d42f41a7af761ec7c2a61e76f4576eec7d8f90c63e7f3a4d8d98a29f185448982166a4a3c8051ffa526f50f62527f2591fa4645a91fc2a8ff1aa3fe9ba4a87f1853e25b8912e35baa29f10806fe9d04bc4c11fc510cfc7b09f84645f0c730fa7fc0e8ff3129fa1f97a5436dee2712a35aeb93e26aed094c8a9f6552b8d55aef14566b4f6232fc229341546b7d5358ad3d8549f0ab4c82dac4add646b23993a58a71374f6306fc9bc48067b75233e0673003fe1d33e03f9232e0673125fe9428f1baa212cf61e07f49c0735bab813f8f65373d1f5ea75e780193fa1f89d4572a4afda20c9c0e8ffc4b3487475ec2c4fe4f22f6f38a62bf8c914dd78257295b34222d76645d81fdea3216fbb680f99d721678eaacf12a627396f9c43953c459465f683f2d620bec17b27be1370bc93c3ea3d88bcd288a25f8ab89b3bd7c269bd1770e99cb64b349457c638645ec49057bab1820cbe72c4bf9dc2b9ce5540d907d05cb20cbaa9a41db1533e8550c3c2201a763a52ae0af61ce28c3429c51352b1967f43aa6447519438a4abc8181d790803fac08fea60c9c16d69a96ded0f55b12e06cb683edae9940aebac1576a27906bc9f8924e20d7b6e24d20ebcb8a4d206fc36ca98eacb4eda9664b6f6355445d4bb38a780743aea78bfc2e563fd44fc4fe6338cded12e06cb6a772c92eb17f9dadf7625b7e83842dbf21b3fc7d6258bede0681f29c780f339e46bac6f33e663c8d358de703ac98369114d3996dd48ae90e4ceaa6b22691b3a36b055f612c5f6d93c99a4b998a81511f62723493c941b7ee51c3ff08c36fae993b1f63c02d648253fba1fbb017b036e122328a19316d972d546e89edc4eca2a5c42ebe57b48b4f30b55a69f2f52926756b89d4d5f65293fa334cea3db0cc1061164ed3d81b8ea8a2d6e758ca7bca52a60307ce89aad9d163d5b2a3db384db2cb5611515d40f30526411b99042da5128c677f55b215eb4e0722b9f5515f62b2b495c9b26782b2543d774b45a6af30c3db4b62781ddba919ded798c2ed348bcb371870a626f0b718707b4de0ef309ef796f09ca7c8f3f71878070978ad4c35f01f304a3a6a52f2a30c987a9f4e9afdaa9f64c0b46877c6bab45d92ead2fe8cd19e25a17d477b35da7fc194e88a29b14f524afc8a29d14da244e6de6a4afc86817797808fefa006febb0c9cda5b0f993ba59b9c4c21705b9222d65c178e3c8b746515de12feaf37da3e93dd39d54f77b6cd03fd45b8dc0a168d9fc91cb3bbdcd9199fa20b7797116f6cbc48878e4b39556c49d49d6732675ea418d9f807c6454f191774b36ab83ba2d360752b5877e9f14a2661197157cc3af25199e321f4b6df565da1f0276630d91283b948d11affc28a540e56a47a2555a4fec694e82d1b8d5254e21f2ca7fbc8729a2ec9968fb6cee2e3b4748507eda838db1fc5cad3ac98bf7665d1b8ce08ad6bd7de12b0945986188df5fe56c9ecaa52528ae631099782b15c077b29efe8aad8d7bf32f6e8c96fb996fec96fff61e07d53004e2c0938b5937e96fee6d31606de3f05e01119383dca718045f0f311fd0974c613c8c0121898a204aac912a019bb6f0a32b63a06be5f0ac06b60e08352005e53064efddc60899fdbd449cdcfd5c2c08748c0f315c16b63b4ec2fa1e585e79f1fac424b1d4cf2a112c93f5794bc2e063e4c027ea322783d19381d061cae3b0c581f137b8444ecacce6a6237c0bc575e0abc57430c7ca404dc52046f84d1324ad63e56a4a53166e4a35350f69b60e0635200de14a365ac8496658ab434c332f48014584b730c7c5c0ac05b60b48c97d072a5222d2d31f009b211c82e6ae0ad30f08912f0668ae0ad31af3549d76bed81899d2fb34345b1f7c44c65b2c4545423e2db60924f9155cd8a92b7c5249f9a0223df0b93bc40369695a526793b0c7c9a047cb622782646cbf414d414ed31c96748246fd3554df2bd31f09912f06b1569e980811f2801dfac2879470cfc205905aa08de09039f25017f5d11bc33063e5b66e7fba88177c14cf1e01494d02cacea3f2405557f578c9639125abe56e47c1f0978363b67399d07a44e23ceb1627decd4933b2075ae64bc2abb23d5a3eaf9a589a45668e3d5a27094b48db6ad6db5ffffb9fdffd9dd08b9b11bc136e09e67c9cf4c4d244d2c14a11b6600f32506b045b15c74c7c08b24e03b14c17b60e0c512f07addd4c07b6285ae2405852e1b035f20055fbbbf0a780e46cb42092d398ab4f4c21c5da9c4d145141d5d6f4cf243259217284ade07035f24015fab089e8b8197c97a0a8ae07d31f0c512f09715c1fb6119ba4492a1d51433b43f26f95289e43f2b4a3e00035f26019fd95d0d7ca00c9c8e731f664946fde9d8270d0b5bc4423756b2b92637665b7de7d37db1d4cb65a9d3d5172292c7995fa3dfa8a4b71f466585acbba848e520ccc22a53d0361a8c49be5c22f9118a920fc1c057c85ad28ae0fb63e02b25e0db15c18762e0ab24e0b93dd4c087c9c0e97e87abad04e208aec581876352af91485dd9534dea1198191e9e0233ccc3243f42d673c956937c24e60d8e9479832e04ae1729627377f3d9fc5e51742f397a5dc13e2965337eeec18aeeacb313e45d6eb733553cc9284cd6a364b2d2366d9eed3185f75249693496d2d1b2941ab2f796301d4b6d0ea88fa46de3c9ec67d5489a315876af9564f78d396ad93d16536c9d4cb1f69eec8e9d91fef8c24222c20654943f0093ef18ac6a7426be454c9d5efcdc388cfa6325d4ef54a47e3c06be5e02fe792f35f009186fc7c978dbc793afe359ce551267f15539cb3b9a83743d46058b461731d022d7bd39ed167615ae2762121f8f1531f7e848596153497b1296f609989539e780cf49c94908f958ea27ca52a71d72bafc956eba134f0afa5e39518deb9d8cc973924c9e66409ee2688e4ce4014fc92f0a9e824971b24c8aba400a1a6ceeda864a9a53b122798aa4482eeba356240b308536c814ca8a5324e5458f66368d015acd0f395ec4227096f1ba58858a691815a74aa8e8ae48c574ac79745a0a9a473364e0d43e4eb734678c6662626f4c81d80762c33467a4600ce8208c93337539992543a6ef9f9548fb3c469cef6ccc0037490cf0efbe6a067830067eb6047c433f35f04330b2cfd1257b0e46f6b99a64cfc580cfd3042e9401d3a8ccf3a33ff8a2322fb09289ca9c8765e885920cadd55f2d43e7639efba2f89e7b04a16bd7bbf026b0580beff4404444258db174a3349dd849789ab95a63a60893f662ac2155c01aecfe33d493e92715631ef2921478c8122c8f2f95e4f16cc53c5e80816f9680dfaa08be10cb92cb6459e2ac5312262236302803953bbd9fc75ab94e5b4f258b4a31452f978d1e282a7a28067e85acc3a408be0803bf5202de66801a7819067e95ace9a708be182b16574b8a85ea44c6124cf26b2492af55947c29067ead04fc6945f06518f87512f08e03d5c00fc3cadcf558af2a5e999bcf2789a973542f77e598b2374894dda8a86c05067ea3047cbc227825067e93047c8b22f8720cfc6609f83645f01518f82d12f0df15c15762cdbc5b759b79ab30b16f93e5e6be6a62afc6c06f97806f56045f8381df2101ff5a11fc700c7c8b04bcd17e6ae047600dd53bb186ea5d4935548fc4dcd2dd58eb4cec3b275a8dc90fa91c85a57d8f2ced06c41d52715ab13416a62ca976e1d158d6dd2bc9baed8a59b71653eb3e995a2d086c9eaf2485be55f0de46b09a8f5f874972bf4c127a3b2cda8e5349e718ac3db13505cdec63b1bc7a4092573983d4f26abd0c9c0af360221dcd1e38f07118250fa58092e3314a1e96b58206ab517202e6791ec13ccfa349799e13b1faea31ddfaea246cf4e071cdd1839331919fd015f9142c479f94e4e8d6216a39ba01037f4a56c52a829f8a19fad32930f4d3b0e2f98c66f13c1d93fad91448bd11e3fb3959df4d91ef3330f0e725e03f2b829f8981bf2001cf1faa067e1606fea2043c57117c1306fe9204bc9a22f8d918f8cb12f0a1c3d4c0cfc1c05f91f53a15c1cfc5c05f95598b222de761e0afc9fc8aa2e4e763e0afcb3274b81af80598237f43d7915f88d53d6f6ad63d17617cbc25e1a3bb221f176375fe36acce7f3ba93aff124c8977645da6116a4a5c8a29f12ea6c4f6a494d88c29f19e4489418a4a5c8659e6fbba96793926f60712b137288a7d0506be4302febd22f8955837e643593786e6270c0a82dbe239f31be5ec99b34385bbe3af4a87e72a4ca28fb09eeb58be33393df482fe408302c6da3295c9dc408c94afc688fe58d61bca5323fa1accf876ea1adfb5985bfc44d32d5e87e5c4a78900c73af809e3e2335d2e6ec0b2f0734916ce56ccc21b31f02f24e0f72882df8491fda5ccec9b11ffe6ddce06d84b78cc961395b586a88e6adc8c49f1954c0a7a48c13036d1e90f5a99cefe2d657183aa32dc82d1fcb584e6c747a9d17cab043cbb937d6ba573e518dcfa35b99563df48eadd6cbaf38964155722a97d6be3d5a084d1ff7adaffd544968a7d67c9978a259208b654ec362cc7bf97e4782dc51cbf1d6bbafc80355d7e4caae9720756747ec2ea2d7fa19940e864d342b6cdaf4a81d98275b87f9674b855a71cefc4d4fa45a65647fb76048bc2153b18d3b070c753f58c06b295b042b29837117a7b0e05a04ffa28371aeec22ce8578905fdad68417763d5d56fbad5d53d58d5fdbb66d57d2fc6c71f123e568d56e3e33e0cfc4f59c75711fc7eccdefe92d9db104f3d389ffd504617c2da7fd3d9dd25446cc6b79815367aa844251bf7a7fe891e66b38cfb2ca7110b0fa9984796131168e9dd6cd0b55a151bdd8a99d1dfba66f40086fc8f2ef2839881feab69a00f613eebbf140c123e2c03a7c250efd756022e4da0044fe011ac045891aa25206bac5a0978142b019188a404ec4ddc5d9e1793e57c8dc63ce26c1148ff169b06d2bf7b01bb16f361eacb081fc324cc9049487929e5dd3177b7e30aa5141fc708af2621fc4a45c29fc0d4a92e53a71553a7ea2284aaf427b738e2494cd51a1255e71ea0a6ea5318784d99e18e53037f1a6b69d58a202dadda91645a5acf60bea34e44df773c8b31545766698a0c3d87495e4f22f97ff67f2a923f8f495e5f22f93de3d5247f01036f20016f34410dfc450cbca1047cb322f84b1878230978b3896ae02f63e08d25e0db14257f05abd69b4434abf557b16abd6944af5a7f0de3a399848f858a64bf8ef997e6987f6991947f790353a2a544893193d49478137301ad52e0bcde9281d3534d5a2792af4371e06d18257bc828c957a3e46d4cea3d35a57e07036ea309fc2e96896d539089dbb162bf976eb17f0fcbc576925cdcaa988bef63e09912f0ed93d5c03fc0c0db4bc0db4c5103df21036f6bdfee1da1a7e7f9fcca5e942f76e0369de5a0671516f01142c27ea139e5ed32c2dfbb59f509615dd1517c10642a6f3f3a67bb4a3c55252ef987182d1d24b41428d2f211e66e3b62eeb65352eef663acf9dd59d6fc9696a658c70861e85d64e8f407a737959d44bfe8132c3bb2648da4a96ad9f12906de55025ea608fe19c6d23e8978ca58070761c0dd3481bfc0e8e82ea1235f918e2f31f01e12f0d715c1bfc2c07bca7c59811af8d71878b604bc4811fc1b2c33736465a992c43b60d61d0f4efe5059e764a5399e636a837dc4ecb75816f5926451a562167d8765516f5916393b3cf94ff95551e67bac92e8835512b94955123f607af595e9456b896c253d7ec432a59facdccc54cb949fb0e6627f4973d1925570319a8b3fcbc03bd9b703643940a70807da3fd460e7421367aecf99eef3a7494d0949f3174ca17d53d0fefd15cb8afd6415dd416a59f11b6647836476e46e96228a3efd829e73b29a4f2088ad275c67b692cd0f971177a181331ae846c6a8b98bdfb11236182b6143922a617f6079ba7f0a8cf44f2c4f874af23473b65a9efe85493e2c0592ff8d493e5cd61438584df27f30c9474824579db9fd17933c4f22f98973d524ff0f937ca44472d54dcf4904917c94cc0314a9496ec9c069791a8d95a7314995a7882c1d2ad7d814309481317480acf5bb408da16a3270eaa1c6c97c644b122f26d0bfd04ac5fb55c764192f9385de4e89fa5995746a60b9352105b95513039f2801afa6085e0b039f2401afa9085e1b03cf9780575704af8319f1648911e71ca166c47531c39922331cba9f8e6ce325d9e9b9a9db78a91e46c05409011b56a911501fcbba8214645d030c7c5a0ac01b6259371d9b5e9675025532a21196e20c598a2d88acd734819949053703f717b5d65e634c9299324928028d38541d3c692249259b6ef0694d26e98b822cb0ef68f88d7af4e381b6fcb57d64b00a5a1ab2785084862c36afa259acf4b150c5a6b2fca1b7b322f4306caf48074c5857f3a2362f44aa644d753c6b9a6106305b6600743059ecfc57623f9cc3ba265429d5b083e6982f3a583693b94ecd17b5c0943a44a614cd29baebf5423e50235a13b0b7e59ec1aaa2644b4c8e3932391aa2e48ab03295b45bc9d2a693057375a7755a63ceb83005bdf13d64e094997911fdbdeaf6c48c6ebe2cd8e21835a36b83811749c0371eab06de16b3a462cd71edbd64c0d4359724024c5d1d02dc4e06bcb77dbb2011e086f860502646c54259a1a216efb6ab96241924d51e4bb314af26d5b7b2d81ba3ec504dca3a60e22f92894f37a1f59eeeebdfbf4dadb5d3112b186592823174bd5ac1e82403a7ce6b71229cc5082de98c71b644b3c475c18097ca3283ba4ad1dc740f47d0c98e2c2c3b9649b223ef38b5ece88a2977984c39777d9fdbdd712767e069e7e2dc67a7b3a4a2ee3e9844e5585b40ec4c238bba4c7e879c6e981c15b1da02bd52b23b4f772ced4acc650a0e9ce556c9eccbd3034b73b92c4db8d5b33cede4369cee89b55556a4a0ad928d95a495929254ef04b592948349be2a0592f79281d3f75727e2dc626cc6d11bcbf5359a5eb38f04389bee879ad62ea4b3d6a83c892ee4e1b6fc9d7cfaf7443a9047201dc858a9631dc85c196f5d296f73d2c89bf39e33543195ed73586a3f99c4a6b69c1dff2b92e0f4c8488ce51552668f62cc76a8a279b2f261acf7c58ac1d1d8b4df2c3288219731f4c1762f66a4cd681f428fc2cb2543ecbb29f6ff26d9ff1f44b2c19b436c869c2a74169f123c9824731a463f4ce2b53289db4825ceb1ff3780fd9b63cbe5b45aaa4aab22557fccc3ae9378d8ada7ab79d80198cac7606d157990863b36206bc5a8a83b1053f75889ba991bd5d4dd176b29afd76c29ef27036e6fdf1e9708706dbcdb3208a3e378091d83ce50a3633096fb27c8723f9390a83b5ccadaa0fe7121790b161e66a262094330e94e944947fb884e71a3676816b154a731d755c6dcb4dfb13ba3c953b9c373369da5dfa848b83f9639274932e75a455b1d8a819f2c01dfac98f3c3b082708a6641188e15840d9a05610446c7a9123abe3f538d8e3cccd44e93995a3f45531bc9d7bc96f3274b5877a68c19a1d3b0af007febf56c4762349d2ea169b6224da330f08d12f0bfcf52031f8d99e4199a2639066be89fa9d9d01f8b4d4c9c25999878f3da037e6e35eb8b8f5426260ec012d82449a0e2a4333f79bfc5fc592a098cc3ecfe6c99dd8b2d6be5331f6aab4bc76343f3e7e80ecd4fc090cfd5459e88219fa78b3c09ebe89e9f828e6e3e96c91768f64727637c5ca8cbc7140cf9225de4a918f2c5bac80518f225bac8d330e44b7591a763a6b159d3346660225fa62bf24c19329d93bd3c11919be2c00762225fa12bf24118cb576ab23c0b13f92a5d916763c857eb221f8c215fa38b7c08867cad2ef21ccce6aed3b4b9b998c8d7eb8a5c88d9dc0d9a36370f03be5113783ec6c54dba5c14612dcb9b355b96c558b57d4b0aaaed128c8f5b75f95880f1719b261f0b65c0b4637e7b22c031266f4b31a3bb43d3e80ec580b768022fc272ef4edddc2bc372ef2ecddc5b8ce5dedd9ab9b70423f91e4d929762c0f76a022fc372ef3edddc3b0ccbbdfb3573af1ccbbdad9ab9578191fc8026c99518f0839ac0cbb1dc7b4837f7564890b3e9d4857528313993348def32ba9a8c8ceef247316583f1748e067b5fcc1a4d601b1e3ae34bb1e7971e4e242f0ec0195b89e5c523ba79b14a869c69df3e9a88c85b70e0d5985d3ea669976b30e0c735810fc7cafe139a65ff082cf79ed4cdbd23312e9ed2e4e2280cf8694de0a3312e9ed1e5622d86fcac2ef23a8c8ce734c93806037e5e13f858acabf58266576b3d26f18b9a121f8749fc92a6c4c76312bfac29f10998c4af684a7c2206fcaa26f0491815af6952713226f1eb9a129f82750ddf4841d7700346c79b9a749c8ad1f196261da7612e6e9bae8b3b1d23faed1410bd1113fb1d5db1cfc0c47e3705629f8989bd5d57ecb330e4f77491376184bc9f0242cec6c4fe4057ec7330e41dbac8e76285fc43cd427e1e06fc9126f0f918f0c79ac01760c03b35812fc4803fd104be0803fe5413f86219308d94fe2ca2bf36e8120cfcf314805f2a03a7eb2cbeb07f682f019726d0194f603326fd972990fe32cc3d7d9502f77439e644bed675225760c8dfe8225f2943a6b120df46aac682480989110b7215662bdfa5c856aec66ce5fb14d8ca3598f43fa448fa6b31e97f4c81f4d761e03fa500fc7acc2ffeace9176fc0a4fe250552df8895a25f754bd14d18f26fbac83763c8bfeb22df82b9c23f52e00a6fc5c4fe5357ecdb64c8f4fdbf1231bd1823efb76322ffad2bf21d18f23fbac85b64c8edecdb7f1321e35a1cf84e8ce5ff3459be0bb33aba358caed5dd2d01cfee66df5ab389c971fde936da08f6461e19678bd8d3bed2657685e0af02fb0bba63e212364aef7c21de8f3d766f6554dd4b37bb3bd52a933dd34bbb314376630009727a552483ae3749458ad84a937bb04a252343af52b9172b7fd53234cbdf7d98c8d53545be1f13b986aec85b31e49abac80f60c8b574911fc4906beb223f8465601dcd0c7c1813b9aeaec88f60c8f574911fc5c8a8af49c66398c80d74457e1cab001b2622728c0af009ac026c9408708c0af0498c8bc6ba5c3c2543a6b5659344448e1120ff345667374d419dfd0c2675334da99fc5a46e9e02a99fc372b1856e2e3e8f195e4b4dc37b0113b995aec82f6222b7d614f9250c780f4de097314fb7a7a6a77b0523b98d2ec9af62c86d75915fc390f7d2457e1d436ea78bfc06869ca98bfc2686dc5e17f92dcce8f6d634ba6d98c81d74457e1b43eea88bfc0ee69d3ba5c03bbf8b81774e01f8768c932eba9cbc872167e922bf8f11d23505847c80d9f53e9a76bd03e3a39b2e1f1f62c8dd75913fc298ee9102a63fc6c4eea92bf64eac1596add90afb04e32327057c7c8a49dd4b53eacf30a97ba740eacfb15ceca39b8b5f60c8b9bac85f62c87d7591bfc290fbe9227f8d21f7d745fe066b970ed06c977e8b893c5057e4ef64c899f6edbe89881c23ccf67bccfbefa7e9fd7fc080076902ff2803dedbbe1d9c08708c30db9fb0dc1ba29b7b3f635cecafc9c52f18174335b9f815031ea609fc1b46f2705d927fc7481ea149f21f586d929782dae44f8c8f91ba7cfc85f1314a938fbf315f345ad317fd83713146978b7f31e4b1bac8ff61c671400a8c834eaa49c1c7a500dc9281534ec6eb7212c1c49e9002b13364e09decdb8989585f8ca39daac980693198a4595eaa63c0f99ac035b01c9cac9b833531e429bac8b530db989a02dba88d8117a400bc0ec6c9345d4eea62624f4f81d8f5b0f23243b3bcd4c7a49e9902a91b60e007a600bc21969307e9e664230c79962e72638c90d92920a409067e700ac09b629c1ca2cb49334cec392910bb39566ee66a969b1698d4852990ba25063e2f05e0adb09c9caf9b93ad31e4225de43d64c8f4fd62cdbefe9e18d3252960ba0d06be2005e06d31b217ea92bd172676690ac46e8715c843350b6426c6c7225d3eda637c94a5808fbd31f0c52900ef8071b24497938e98d84b53207627cc469669da486719300d4d3c2ca36a745f0e8dee9304e6f9d3a3fd2424bd2e98db2ad7745b5932601a71539108708c889bae3260ba68b13211e0188b16f7c14c71b9ae2976c33a662b343b66dd312e566a72d143064ccbc32acd19939e18f06a4de06c1930bd5d935175f34cf15f9504aae309e460fee4f014f8935e18f8112900ef8d19f691ba86dd07f31e47697a8f5c19303da3e9e84480639cd1d417035eab09dc0f23799d2ec9fd314f7a8ca6271d80897cacaec803b1c2b83e4585715f59026c03f6443889b1eff47e98ab3e5ed3550fc272f104cd5c1c8ce5e289bab9380413f9244d91f7c7dcc6c99a6e6328c6c529ba5c0cc3b8d8a0c9c5708c8b5335b91881019fa6099c87019fae093c12cbbd8dbab9370acbbd3334736f34e62eced4741763b07aea2ccd7a6a2cd6d2d8948296c60118f8d929001f87819f9302f0f118f8b929009f80819f9702f08958a9395fb7d44cc20afa059a053d1f13f9425d912763c817e9224fc1c8b858938ca918f0259ac005181797ea72310d43deac8b3c1d43be4c17790656062f4f41199c89897d85aed807ca90e939695726621d4371e083303eae4a011fb330f0ab53003e1b23fb1a5db20fc6c4be3605621f82897d9daed873301bb95ed346e6627cdc90023e0a313e6ed4e5631e26f64d29107b3e067e730ac08bb0e6e42d9acdc9621930ddc9f6d64480636cf85a82e5e26dbab9b840869c69dfde9e88c831a2bf166222dfa12b722956956fd1acca0fc5b8b853938b45181777e972518699f2dd9aa6bc18e3e21e4d2e966012dfab29f152ac2f779f665f6e990c9806cfde9f08708ce0d9c330b3d8aa6b16e53264ea111f4844e418e3ff1518f0839ac09518f0439ac0cbb141d287533448ba02abaa1e494155b512037f3405e0ab30fb7b4cd7fe56632efa714d17bd062be44f6816f2c331e02735818fc0487e4a97e423b1e1b6a73587db8ec2447e4657e4a3b1c2f86c8a0ae35a590274c6e2b94438893163b10e93fcf914497e0ce6005fd07480c7622ee4c514b890f518f84b29003f0eb3c39775edf078cc3fbda2e99f4ec0dcc8ab9a6ee4440cf8354de09330925fd725f964cc3fbda1e99f4ec1447e5357e40d12e46c5ab6ac29247d87da0fb3df2ab715589dc4d1f56fc9b8b57c0cb02dc4b665d02dc45a54d12b76ead87661a7628ee0ed143882d3b00c7f4737c34fc7ea8b7735eb8b8d5837677b86e410d83c76eb6ecb369cd0638b8bc944424fd05ec9f85fc44fd5eec98e8b1d6bff3ec9fe6509b332fa447e3c8dec301bfa36cc736a8b4b99d5162a9ed57d06a6e57b322d8f8f6a290e7876cacc62f6f758569aa83625f6274e99191b7d73a45d929c439ea7302de8f1b82bd8db3db93ec5ec64f4117652542f8aeb65cf45a0efabc98121d1e3a5cb6dae8b192ae4d429eb4e8ef9f99e6ee3d0c37d55983e1363fa7dcc9e608a8e4e7dec6f1cb696da7e6a8e6d1be52ccf1d6d0bc84296ff7e69dd6ff1e7a9b2a7b3302d3f906939c4a725e4dcd17314cbb1c54c47bf94de1c82bfc42a2bf02b15cd36619aed9069b67f42f937ccb6a12256e64b99e5eae79cfb8b8a6e6763ba7d28d3ad9f4fb7092c771672cde8ddaa5da6c93998261fc934d990667fe67e93675fcb581d4d8fb41fc5eaebc52c85c4ad1c72876b41eb92e5ac1500bd1e6df3a4ceb79d8bb1feb18cf56109958df18c8d8a4078b5f330fd76caf41b6fd0aae8d3c35832542ba7855aca922e256b5839947b926472f57c4ceb4f645a0f8ea9352ee914a60b3d74af92eb286a63fa743e67a86ab9483e372fc0f4fa54a6d781ca2dbba9ec176fdb4e86e03ccb8ffa8172bb3ea0bd0f9d966032f97c21c6c767323ec6a5a5ce365d9b5f84e9fc39d64e51b30161c3e3eddfe6332098cfaa16a1a2d9c598665fc834db17d16c1a2b9f65bc6de2f47e45af653a2fc5455572c34c1fe5124ca32f651a8d32e87d45aed2770a6d5dcb58ed9d3a4d2fc534fd4aa6e920fb36714fe1d5a0903d73b4a39c8c61b95cce7a43f3ed1a77750ab5da8c69f575227d026fbab085308de542b9fd2e2d870b62d47e5e8cd4697619a6d93732cd46c4f59c89f50a701f1aabcf9aaca7bc1cd3f15b998ec5865bd495b677a423700b788b793ab380d268694c4d1f31995af40a8ca7ef643c4ddb653d8fd80ce9f37025c6c3f7321e86a33e8cf690e6d92f89b2319ee57aec1a478e94ea9cbe0ad3f00799866315359cc12c7a099223bb42dfab317d7f94e93bc5a065572451ffa682816b30067e4a55bdecf8b661a05636afd5b598563fcbb41aad68c723d92cc452dedaddd5367c1da6eb2fd808856a0e8e626f54b546bf7f4d1c5745bfeb31fd7e95e9b79f46cbb192d5bc4b6cfd4a783f0fd7aaa0cabb2a3add80e9f49b5a9ef9ed73181b4fa05e255e2fc56c4d7923a6dfef89cc0860adc7916c7ca890f7ddaab6e3936b3d26df46be09d3f20f2c17557ac68ee6a379cbd0fd95ceebc46e03a7aa7d7c33a6df9f32fd3a92d8639ff4a0271352de8249f957ec114c955c989a542e982c61b7625aff2dd3ba07ea410aa23102d013964447ed690b67b9b4759ddc2cc66d98dcffc8e41e18d7338c6533a0748cb5ccf6ece5b66e34ce21be7748950fb81dd3e75fac4f10bb8cd03e7f3e6b2757485a4a89cc98d0f665490a35bc03d3f0bf444602e433206399edc5f6e6e99c05d982e948aa21e37089d457896899ee3aeb4e4c534ba6e9988472d33f9fe59443a1f7aeccd7bb306d23326d67c6cd57b3e3ffa66706eec6d8c890b13101ad33c4ac7849b457446bc46512391d199dd1ab647ec17f53d1fb1e4cef6a32bdf74f586f793c407a75bb17d3adba4cb7018aed80e5ac87e3ccf2d0f108f116ed67e4b196817c6c12fea6a2cd7d98363564daf4d5d4c68954700e2175de4f55aedc8fe95153a647625103f17a3fe9f4ab5b31fd6a25525f42eb801a4e654f9d5eb8335a249b23f0da1dfe4b6a2cf2014cd3da324d737d9a8e601a38e37c959e7e10ee09626991ac3d3e88695147a6857f1e5c25422f3875ff4398ce75653af7f6e93c0dc8e4461dc33e792cdde6a0582a1a3c8c69504fa641bf84ebad11ac1f4bfb493974ed781a6aa947304deacb34e94ebc7df43ed1c3a2c575bc2d4705f18fdfa5baaffa28267503cc8b2723b5c08e6d4fb191dd43b455f47b0cd3afa14cbffe8afa4d61884b99f71ba6545e92190f791cd3a5914c979cb8bab88cfa73cb1d6f489daf7a0293be31e6ab9293de191b28669e7b099b858a3583a1a2c19398064d641a7451b4a5119cd5aa332ec9d8ca5398ac4d13a9192043ba3543b26c3f8d69d04ca6c14151b6533f6f29c6a7938f5c480d23cf608c349731e29f71a83a2794589b3bb9fe7bf27ee2594ccb16d8e88dbc4520d6832d65774b24964ce596cd707a6d591d5d45dbe7306d5bcab46defcb53bf46d4873812a5cae69ec7e46b95c8585a559babea9d5dfbab1a259c6edb7b01d3b6b54cdbc10a5e736a5caf6932bae9454caf3d647ac55fd7e39f919861b7bc4bd9db53ed325128ad75cd8cf5be8469b6a74cb3f8317cfaa39f6ecea76a4cf3654cc736321d3bc5f1116e6c73319384f69a52d397780593b3ad4c4effbc57555f46eba7d5ac9de7970f726caebdfd2aa6cf5e89d816a64fa2baa447c7d7301ddbc974dc57a1b6dd557127af631a65ca349a866a84b597b019af4422a1d4a3a592f78c6f603cb497f1b08f020f224f97f0f9f354f9b9373189f79649dc39ae2f37e7e9dec224ed808d2a246ae95ec997b15e861bf96ba2bc6cc374e928d365244964dc74025f11566adfd132329fe0d1fdeae3a5c9e5d9db989e9db059a444db7689f523e2a3a968f30ea64d679936f1623254e626d2955fef621a76c1c6f3d5c68b84375f1cb5d1d298a5ccefa54d8c566ec774ce92e9bc5f5c9dbd234cceca1415d953d1c2780fd3a92b968f6a2d0c6774a6eaaf557b9305c4393bca7caffe7d4ce77d643acf26bb76ec0af292688f4d7ca3c2ca07182bdd12e9858a1455c6ae5ccd303b484d5b6b07a659f744e68a555b9abb7284e4434cd31e898c2b6373c58e8df723b971f493d52bf42b150d3ec234e89978dc024d533d6ec1d10f7b9eaa1cfa18d32f5ba61fbedaa56a2450e92e6c0decc4b4ca49a4f5063d997eeb4d8ea6a2cd279836bd1219678ca58dda38632c0f9f4c5dff29a6576f995ee3e3f6e0a6f2b659558d46b0588cf218fab8df4e62d1d24e6b36f60e2dc9e5e66798d67d12f189b1725375ae2dd99ef7e79806b998cf8835d245e52bb27f5965335f354a1b1bd78aefe9719f51d3fe9f65d11de946b2379d08f3a58c09da12ccee69ff0466c47b46db4f3d3d6d2df7394d7db12d11f5c105d19612dd912f36425f9bb01a11e2fcd785061c137164a955e2e3cdf9b28c21cf0716da93e5bbb3fb08ed97f48cb6e3c57e85f1b490b5197b825623d42ebe4e62c743ff5e849655936b24b06ca6b329d3bb9ba6fd68aef6e6b91ac9a68664754bd29ae24bd19fa69621b7a196559885655e26bb0330918fd559f4dcd47c36a82406979c290f673bcdb8a9c1522a4bad0703102decb870306c4c06d79a9998d3712d274e08fedf9d08a9593d924373618049aaead837347e762c6f1f513f5061f78cc340525eae4bd240932451dcf0d84e5e7f97967d4dd2424f1d9ec34ab353d8f01db4c240dbf66a2e6dfb99a4ad352b72e5ac5b954f9c8d3044730e23b0221414eeb45c0a0799a4b0917d23e60fc6308f45010a598f9bae089814120f965fdb256cb049c29ab1a23a87e410778b8a3013776b5d97b82126896b092c8d4684780bec5836d2b3d433f71306fa72c6b8f4ed6f92be2612bba380342c8a2e8f5dce9e168582b4b9c4256d68ba4883d1d7a2df207a1361206dfb6097b461a63d9cb74a1865ffeb6c945f14ddb4c0f1746120eee97a2e71c3d3e5e1e82e75abecbf647ecddd01380cf46d18e7d237c2247df47083aa1543b89bc29b403b2ecf24797581a79be499e90b034debdbb8348d3449536d4093bb69551828fabe854bd12893143560c5508c932d61056f129b592e62554018c8ea38c2256bb449b26a307baa08557d78657d979c3126c96965df4c8a8e69f80710693db99c59186d52e4f319cc301038bead4be0589304d602de8a8a4903f6c240d080262e4107986e7109821c11fc2dfbe9bcf950424a4958ba4779792e7de34cd247cfc376c35ebdc455b0225ac8463296d89faf0e057565835ceac69b6e485062461077cd7f38acab19f05e13cc0f6a8bce7721b3afe268379c8286c9b2f227bab44d4c97d317fb038781a06acd5c82269924680fe0b546da9d6caaf5f268af902e302b621e2c8cfe8bfe2748cc3749a2ed043ce4d139277a1600f562cbf9504fb8bbde74e1b7a072b2492aebf3aa40d8db6adec49dc6fc5d18a8ca0155c214f3dd6f7152958893090345abc0e8ebd4748dbe8ee5ad3011a82d46c4c2d4db3caf964b5c8149e2da817a739a8d59c45b65231924ddcd4cb4d2a6b2eb3292c7fa9fe1f26a39209c659ae9d158688770bbfa616c7c1616e170347ddb809980e926c9ab076cd1dd91dcd92b3f1444810efc0c9344d1f08309cc9b2df21db09567bf5ece520a036173232e61334d125607144b789a5e1848fa1b44991d6892a4ea2ce979ec85705093bbaf4bcd41a63d93b01f779d97234418885ad6d7256a9649a268e88077c3361a905c75942c0ca45503038ab34d92d690c8867cc2367b742588e939385d6d7d27d2c2bb2cb328646dfd7a2008ef10d385d3e947e6b1a4c33c4eb1b3ba4bda1cf39d6f7fe10c0345270e73299a6bba408e6441c2cb59e2ee89aeee09bf156cf7aa65a1206e7d0d97b842d3b6253c99e3b32ac3625ba0513acf24450d3c14853370939224c89a6fba208a05114b194cb807a31702275f6492b8c6049fd21d41c46ed061a0ac1a18712d365d309da5b37404a298cd1eb98384e168e1b702f3de2526c98293baced94cfe79a330ad7bdb097a930b4cd246c333dd36d748161aec84d78581a69787bb342d3449532b4653beeda99cd1adc3d812f2f0bbff2c360952b3ba0fdcbfb54bf20b9fd558c79768d30e3cb5ce657cecccf1849e25dbbdec570227796935b0e43a2be91081acb8adb4ac8417e2642907b46725b9a0312ba161f42ccd39ff2c8555aa594a0db8ac84fbf3594a3db4aca4fc4996d2146c96d2204e5642eb2db394161966294fd5c964c697f864550972ce8a39bf95250d5bcd92c635652101f95931d6336421b17759710231b2928a47ce4ac1bc72569c6d14b2d0bd03b2908e75163a0f941573843f4ba1fd960516eb67f9a654b2e2369ab314834bb312ecb9642131245ebf1c6bad5f1632109615a391961577554456c213065949442d6779d69625b67a362b81d1782f6e626bd6b214023bdd9d766023c2dd212787eeb47368b5ffdf9be0e4d04d7016511236f276b5d3d22e333df14ef3b00fe9cbaecede4734d71c0f455ff3a5d9a64a9a5378a1748e0a142d6859eab53d6decc68928944c3bbb3598865f6cbaa3e2a52dd6867c73c8005b0d6374363045e7800c97ce2541a2736028e99c09e85c1a243a7b8592cef9a0b02f0b129dbd4349e74640e76141a2b34f28e9bc15d0591e243a734349e76380ce8a20d1d93794746e0374560689ce7ea1a4f32b40e7f220d1d93f947436020da515e9e805e5da2dcab4f782f63045df68608d2bd3411f6d3fa69dbeda9621fade222e7dab4cd2d79025ed8ed5fa47e2aa6c4c1202db6b0ac85b9d0e4fb800f585507cda65ec678ece7aa6e8ec6ab974ae09129d034249e71e80cec3834467df50d2f92c28ec470489cedc50d2792ba0f3c820d1d93f9474d60485fda820d1d92f9474ee04d6797490e8ec154a3a4b019d6b8344679f50d27926a0735d90e8ec1d4a3a8f02741e6392ce1624f68086b7a0f70de19c642d3098716c50a8ec134a2a67012ad70785cadea1a4724f40e57126a96ccea99ccf2335fc070f3aa23b87daf53647647553441e0006db8e0f0a91bd4248e45840e4094121322784443605449e6892c8b6c48d034b345e96be5fcede0ddfb4443168149d6492d836245e1b537e24b8d182ff9da9f1f69f413ffd6493b4362662baa297fdef0a228e28a4cfc21cf5d60c10788a49029b46099cc35e70809ca8cb3491686ce2e25a40e2867414ee1cf66f2291d861f69907015a4f35492b0cd3575974136672f70515d269bbb23f04e18c5642354d51391d349a4e3749a508caefb71b051c14023bdc980ef206a49fbc2da6c83b1d90778649f2c4b213acdfe32dc446a7d08c15e389a0ba39334864f60f2199930099670589ccdc1092790020735390c834387a698ccc0980ccb38344a6c1114c63648e06649e1324320d86ae1a23732c20f3dc2091697024d31899230199e70589cc30f670460132cf0f1299034248663e20f3822091393084644e06645e68924c675389524e64a9fd111d07a2af87afcfdd91b8a45d948eb11f7c32c21b7919bef1f37f80fd5dbc6b87d11c283af86b74eeb183292a2f06c3689798a4721f4e6599fd5219bb8a7d80f2edffd3c9306752c2d9a6612ac923e3c870369e5ecc9fc1f786d952959aa5bca929cabb82488e4b4d52de3aae23a81a9769b06e3716fbf60870079b8346a8c1fadd18a18f03422f0b1aa1062b2c6384de0608bd3c68841a1c4f3246e85d80d02b82466818e387ef05845e1934420d8ec51b23f43e40e8554123d460b3c918a1570342af0e1aa106c7978c117a0320f49aa0116a705cde18a1370242af0d1aa106c7e68d117a0b20f43a9384d661842e641b5c3a9ba2d2f05883a34cc6228c685e08caaedf95432330e0d5683ffd5a53546e0143233798a4b201a3d21f9f4905a69bb4ae0ae1005d176085379aa4ce8d10a6c1ff698f1036568cb702cf77934902dd0d7576417c9bb11d61f60345f76693f4d13d849dddaa87d9ff3a7bcabb3b5f4f66b648ff1f3e0bcc0445f81693148af06a3130ec2c3c7196a78c2579d2a98bf02e9a5a0e067f6f35496b17e21f6f2f6460eebed0c3edffd3260f5df3b394ed801e6ba6328ce108c70337705b3abca8d3dc4eb3173546df67a012badd247d62893e5c6121dfff3cccc1ff0f003aef3049a7582fd90b993b0ffbca9f7341d5b4251d7d9cc46239c2e821fb032aef4c8787ec6d2799760f39d4147d6f83227d9749faf622557bdbd38873f6c86a76ae86331654cc56a615326b2d61708bcd5aa6b15516ab40dd7df7ae2de4618ff1a80dacf49e7436e54b6d21a6833e393e3e64b0296f6c7ce848d094bfd724ad22a430875929a5b3cc7e899e79b228fa529aea746315d175c046ef335ddc87b1d3d496f233a49c95bccee253dad614276b39e79585af9d590dd4e9f79b1efc10edccc544ac2c5cb01b58e36580c2ade9a0b0ff6e47e1bb80c2074c52080fb75a46bcc7a7a589446335774fe0151f4c1789ee4967ce1e2a61df05e66d60890fa56318039b12ab7ac694c1482163748e04cd9e878344a7d10dc38dd15908e87c2448741adda5d5189dcb40b7f1d120d169745b5163749e0de87c2c48741addf4d6189df7023a1f0f129d46378f3046e70b80ce278244a7d1d3018cd1f91ea0f3c920d16934a4da189dbf013a9f0a129d464f073046676bd0507a7a570e087b232b0d8e5c1a0bcfea07ba95cfa4834acc32bd541a8cf93546e57fa0903f1b142afb8492ca5ea0803f17142a7b8792ca6680cae78342a5d1cd768c51b91e50f982492a3b117fc0967fbf566719b438bf5e5c65615c062b2563511d5d00d12f86856883d3c1c688be0d54592f9924da3d6d3227fd311fc626369e272e7d2fef4adf0ae1e684721f990a6089afa4834ab8f1fd7832898c26f94c9812fba355e998e43046e5f9c02a5f3549a5138c001749cde13b5e0fe721090ed428fb5a6c431485d043d60764be6692ccf8e70640f1e1b901062b9e79a65665ec03ba9daf9ba45544cb55daf535addb556a74a30d7e63167b02a0f68da0526bb4876f8cdafb813378d37473298f554685ec3c814a1b20fce74b3706f4bd6592be66719a4b42d3392697421f143144e352d03bda66be7e5739a6db1899c6d6954f0736f97690c80ce3ee5bd30099ef0489cc30ee6b341e90f96e90c80ce3ae5b230099db83446618f7339a02c87c2f48648671b7ad7c40e6fb4122338cfb180d06647e102432c3b8cb561f40e68e209119c6fd8b8603323f0c129961dc5d6b0820f32393646692aa1d49b55d890dd6efc676253e158cc57f9c0e5bc5c26bfcd14a06bda8b158a561c0567706894c83f5bb31320f00647e627a004ecc12ed3e5b49f502f47d6a92bed680beaabbcd5030f744e9304f007f0d08fdcc24a14d00a1bbd7e2c0cd80c2cf77a57ff4cfa187f108c57ea0e6fe22486486f108c50180cc2f834466188f50ec0dc8fc2a486486f108c5be80ccaf834466188f50ec0ec8fc26486486f108c51e80cc6f8344661877e4da0790f95d90c80ce3118add0099df0789cc301ea1381890f94390c80c63e8eb1040e68fe9e844f6dbed3a91071397c29f4c52a876a0a2416b34b6c8a516b0c69f833db66ed0731a1b5bef0e82b77e3149af6c9bc8c4e3330df6d78d8517be082cf75793d48a4d757b93dd7353dd074104f16fe91865ef657bcab4af0a3246df5c40dfef26e9833b75b94b59e06a0ce38b588c917829a8d1ff48478d9e580b338ca34587002aff4cd7ac8fb0c731ac1677677c6804fb24be4a28acbbc81d0408fd2b1dfeb1373be36277f18f1702fff8b749fac4662889c7af8731b2a823a0f39f20d139209474b60074fe1b243afb8692ce4780affc2f4874e68692ceab019df464a2c0d0d93f9474fe06e8b4824467380fe97c03d01909129dbd4249e71c40674690e8ec134a3a4f0274560b129dbd4349e7e180ceea26e9142399ee263dc5ec53baee7caafd5209f11f2892a69517c6c6e03f032399354c524b7bec74d823dffe9782d0b32fe8e785ecf5356c44b394bd318589e6ac453746e83253844e06b65ad324a1707719673f19a7a75e4c46b18f1c66c23cf8510ff48f6a99a4b221110729a67de8c3981d4e057658db24797b92440f09f31ebe6470dea7a16588d465604aad4e10493518496c8cd45f4115543788a41a1c893746ea2f80d47a4124d56064b131527f04a4d60f22a9061bf7c6483d1c90da2088a41a8c3436466a3920b56110493518d7698cd4c580d4464124d56007d418a90b01a98d4d92da8d78fbf6f3d9e2544798198cda852c26a9d2eec2d11598f4ff622e1e26bc3bac14ae01dab14d4c92de87540d79f086868db0ff5d6cff8ffeed2842c7054ad8ae9e54d88984765e57b22416d9b6bf8214b3b70a58df4cccfd1bcc84c9a632a11f7133a1693a460ab021426fdc491817231e0a9c48339354ba6164fd76a330891f8125364fc7f86a725ba4863152f4753086d522a8d4f60a25b53f01ab6d998e42df870c487fa137b6b7e75ec067b632499fdac21aa307409a3b481cd862eb209119c6d5f0d70332f7081299615c0d7f012073cf209119c6f8e66b01996d8244661857c39f02c86c1b2432c3b81a7e032073af209119c6d5f0870132db0589cc30ae862f0764660689cc30ae86bf0190d93e4864867135fc1d80ccbdd3310097d852ee309eedfa0b18e6e86092cac4cfdb30d85837d6275f03c6e53b9a8ec6538d6a0ee331116b805d760a1aa1613cc4e4704068e7a0111ac6e322960342bb048dd0301e66b202109a153442c3786cc42a4068d7a0111ac6434d560342f7091aa1613c3e621920b45bd0080de3e126e580d0ee4123348cc7485400427b048dd0302e09ab0484f634dfe1a4b176abec0fa9a02bec97e783f54aee6ef3e1ebb777202e8dd92669cc24ba5bb019ac988c6dc13613ccb1e798a4b73ea7d73956bc8cc58138d8a5c4e059d8d54d1147805df632495c57e28d0aad64511d5339008df2ac64855c259cc6a0a51a0ba62905234fbd4d12de0e750489452a196c4e1923777f406e9f20931b46cbdd03909b1b64720d36b38c913b0290db37c8e486f18cf7e180dc7e4126d7e030a03172270172fb07995c8383d6c6c8cd03e40e0832b9618c6b9e0ac81d1864720d0e661b23770a2077df74048df7651b74a43968bc8729fac6800eed7ee9a02fd72670f75968b32fa06f503a56832457b4c3d8982a03d40e4ec7082b2dd613982d2ef22d52ccb33f2b67298679f79d5ce2123a24ddb62a5fed5cc00a3e0d472b61708b89d1cd39b698a27631a884f64fcfcaa55ee9f7a295a6e8db01c6fe8706d78b1a0cef31e645bf015e7498496a1b905803d615e6a8ab638aba08f097c34d5237987887ac6931a62b3e1d8011ccfaa8505481323b21efe6068ed0a544cc5ed1fdf7dc0d0f8ac8eeb7d94143e06d47a423cc178b99f6cebc8631d0a227b0f1bcf434ff77a743d12b017d2383d1a41a41e8f61bcb98c53a2ec3a865d6b64cf5ac40211f958e1d77b1f00abfc71c6072c6ca98a5f606748e0e129d464f043546e73440e79820d169743ed5189d878056ead820d1d93b9474ae05741e10243a8d064f1aa3f32640e7b820d1991b4a3a1f06748e0f129d7d4349e71b80ce0941a2b35f28e9fc02d039314874f60f259d3541436992493a6bd937a358cc6925035a62bf1c3eba68f4a2a02bdf245d7444610a1f67a2bb8e2e6100ce398be1a36d2f40db6493b47520558fa91c495611ba61eb722286e026d99f17111aeb3c8515df2246301dba4bc3fc91b1d0f21e80e429413a03676028d7897602931e538344e78050d2d912d05910243afb8692ce4741619f16243a734349e78d80cee941a2b37f28e9fc13d039234874f60b259ddb009d338344a7d1605a6374ce07741e18243ac3b9a1c6a980ce83824467ef50d27904a07396493a3b323ac7da2fe5133a1359c43fa522fb97dcce218b18f5c3d931018bf89ba3ec6bb10d6e70c1a3b12e6916a079f6ae3c0cc0eb4f0dc6cf1beb78d60563480707854aa33b9518a3721ea0f290a05069f420006354ee05a89c93aef8647ac86aa5cdc4325b18ea51a713e7b8d522e64b8bd331be64cc63ae031e73ae49421b1371e647ef5d118dd4c114818dc11048a149023b3302473200aabd637b450c869e809ac742160350bb1ba3ba39b0d57926a9de9b7863434b085d8a40e1bcdb6df4b1ffa5841746af0536e822d6f0321a0016c93044f1dd60226ebef99d71e121d5bbcc5e8d55567b007b2d4a471f0a0b998570ce060561dc027b1cb0cd62f3cd28676acea9df7737cb6c0d2cb3243887a685f1c8804260950b4c52d994b82dd23cfb011595462217b0f9f745a16e85ce008da885e9d8903d87b741e9a785f66b34e243bc94a616a9318b3c0e14ee529364360464a67955dc5053e44d00e41d1ad493e68c8e811a5b15772928e48b824a6d387712790c586d597a5614f54e7fa137d61cea09eaf0c5a6ebf0f14c6fa7e65eca6294e811bd74b4be3c1d9b601aabc39b001b5c129c4355fa85f224c4fb81af5c1a2432c37812e2a380cc654122338c2721de01c83c2c486486f124c43b0199e54122338c2721de04c8ac081299611cd6b8199059192432c37812e29580cce54122338cc3c0570132570489cc309e84f81820736590c80ce349884f0032579924b30da9ba20c6ed3a4e22257627532cca722687c3bc0486005a5707e78049834d246354fe01a85cb36be77d1c283aee6e944a63c1089bc198d1e1c13a8b263794874c9e056cf388a0111ac643263701428f0c1aa1610ce2de00083d2a688486f190c98d80d0a3834668180f993c0310ba36688486f190c93301a1eb82466818f73e3c1a107a4cd0080de32193c702428f0d1aa1613c64f27840e8faa0111ac643264f01841e673a1e692c1f5d2ab53fa1d19bf46577635e63e40d30455e27e292777c3a82b9faa73faec3d880dc6980bc1376e570c724fb934309ddafa6d2ec70c7b5a6a8cc020baf4e4c871d0e4cbf1d1a0b8dd904ecf0a4748467f5b6c5db7de8bb005420279b9fa458c8c6cee9a7cece5cce22abe5f687f3b940256cc90add5a2a7c64d605b6784a708f7d08e301a50bc090f0865db945be77322d8cb11c79c04a4f0dc61eefb263730c526becd89cbf81959e968e5594de6dfb2a48a2cb578dcf581a9b1bfa1758efe9e959544debfbb42faa36364f791ca8f1379a24704f49f1c71aeec348392374b5d982ff9d656af93468c29f1144520d0e6e1823b51d20f5cc20926a7090d818a91980d4b38248aac1d6a93152eb0152370591548353c2c648ed04483d7bd736f9c31e50930deafc7376e5605d1eeb84cee3541a2cea9d4d51791568e29f1ba4edf407980ca4313664321914f2f38244e7c050d2b908d0797e90e8ec154a3a8f0085fd8220d1d93b94745e01e8bc304874f609259d0f003a2f0a129d46633a8dd1f91aa0f3e220d1d93794747e0ce8bc2448741a5d00638cce7f019d970689cefea1a4b30368286d4ecf01f7bb53f4475b608d97a5636d1bbed8c53b1d17c685828f02322f0f1299615c28f83220f38a209119c6ad52ee03645e192432c3b855ca4380ccab82446618b74ab91e90797590c80ce35629f70032af091299610cafb91090796d90c80ce35629170132af0b129961dc2ae57c40e6f54122338c5ba55c00c8bc2148fd71a3a75d1aeb8f0f06fdf11b8344a7d1b3588dd1391bd0795390e834ba07ac313a4b4061bf3948741a6dbc1ba3f34c40e72d41a2d3e87982c6e8bc1dd0796b90e834ba1585313a9f0474de16243a8d1ebc6c8cceb7019db707894ea37bc41aa3f35b40e71d41a2d3e8c1cbc6e86c0a1a4a5b4cd2d984d3d9d7feff629e78215bbb11f633311e202e8577eeca384d577467d586312a8dadcdd802e234ef32496503e2ae1f1a66ff4c5fac24613ee66625a0ee6e93d47590f845f9aab61136c8623bd5a5ec8ebe9da638f71ea6487e06543ef784816483c374c6487e0a907c6f184836e8698d91dc13d4fbf7858164835321c648de092cf9fe30906c70f2ce18c995c092b786816483dd0463249703921f0803c906a34d8c917c0c20f9c1a09ce56e74c0da58472202a87c2828541a1d5d3546e50c40e5c341a1d2e8b8bf312a5b022a1f3149655be23d64bc98ac227451ec24fb8322424f83c3a935d8653046ec26d0d07ad424b1993e62cbc05908ee8e4eb166fbc31838710ca0f7b1a0b800a32bea8c596a03e0021e0f0a9546977f19a37205a0f289a050693468dc18957b032a9fdc9543d8decd2c0dfa4a639b590e03e3b04f99a4b23da372acfdd2144658b1fdd20afeb95b1dcde1a7b70fb7efe7db7f3bbf8fb2afc5366c510807ba6b1397e0a74d12dcc957d757b2eee6ff9f71d84f41adff4c3a9688f5629383bbcb12b11f809d3ebb6bcf430a7bfb331f58e27326a96c16874aa1a9d1d9ab83228668ec0b6af9e74dd25897dd2c65ba97d840c3ecd757137a1879f8aa9b76a018bf908eae25b43d674fdba9248f8c63357885fda2f32c9f753d5713da971f664b506a76f4bea9297a4f0445fbc5746cc65a4916da3f5710950d838d36ea8d6d19fc3d6889be14546a8df6e28d51fb17700a2fa7a342c2fa4b6e8564b05e375621350185ff159334d6b76ff279bc5e2171b65f1bcb2c937ad4f0554a8d80fdbd1a9c634b0dae4a3636f45103d8e06bc139b6d460fbd2d82e8b97002a5f4f8757cc897ac622d6237777f70ef39114ef80c2fd86e9658a94b03c967031fbb490bdba066c963e85fd4a0fa530181659698acc0240e69be9886fce61ff3ad729f68fa58cda3047969e03287ccb2485f500850e0b613e5abc1834bfb705e7802883158bb131f5c741c5f2763aa8cc8931b51beec50adf80c2fc4e3a4ee810a3e774547ca5674c1c1ba34cd3b8f95053141f0886d9de3549319d0919cf2a180ab084d5e015219c6868036c727b3aeae85cb2bbad413a1950f85e3a228ba8871cc98624963321c6db9fcc67adc749763117b648c7839685baf1331310fb7ebaaa9e62b282387388058c09317793161b2d3145e5c3a041f4417a4e2acc49ff7ca2b1f6e4a980be1d26e96b43fcf3de9434e794adb176675136fed38ff954836b34aa9ba2751da8ad3f4cc7a640d42647333227daff16b3784cf7a8b28a50f7798e0136fa51704e290ce36e898b40c5f3713a0ec5cd4dbfaf3436ea330390b7333847e7847150b70928d29f04e7e81c83558db1a373ae01c3189fa6a30144cfb94efbc18dc62cb13ab0c4cfd2b1f3073ee935cd33ed35d064c1ae678acebd019d9f0789ce01a1a4b311a0f38b20d1d93794743e086af02f8344676e28e9bc02d0f95590e8ec1f4a3a7f06747e1d243afb8592ce57019ddf0489ce5ea1a47316a0f3db20d1d92794749e00e8fc2e48741add38da189dcb019ddfa7e7e4a15dd00b32b7152fa0ef87748d573a20cbec3ef872465c9a43ad8c75296b8046fb8fe9b1c55d30cc66cc165b81018d9f82b417e7009343bec6e89c08a6227e0e129d0343496709a0f39720d1d92b94742e0785fdd720d169f4342c73519580cedf8244679f50d2793fa0f3f720d1991b4a3a5f0174fe11243afb8692ce1d80ce3f834467bf50d2f927a0f3af20d1d93f9474b6050da5bf4dd2598b0138d16df4338a1cbe20971ac4a5eb9f74741a73edfe4cda3b8db52d43f40d0785f7dfe06c971fc66def7a81e18bff4c52d94542a5778df70842b7bf59ccfea671c1cb19e4482490d520d9c6c257c782624f7d401ab6c3e99dfe626f6cc9fc9b803ecb247d6a7b081a1c413756ecff001e3412142a8dceed18a33207347d328242a5d1791d6354360154560b0a9546a3358c51792ca0b27a3aaa9ade2c5470775929f12e6816d530491f5cf3ed84f4d365500bd85a897212e6654f5782dabae6ae2ccc108eceeb18a3d25820ff52505bd7324965734237b9a1cded22fed154826dea607099a8b1625d0bd8646d9344eaec6765b41964ac716e011bad13546a8d368b8c517b04a88cea06955aa3fd2063d4de031c423d93d48abd0c9cfd860ad970c74276a535fd78e25d823f81d5f90b6db8b46d1761ac1d703db0defa262916d146f8422ad80ee863f27c1f632d813f80bd36081299615c1ff90f20b36190c83478308d3132bf0464360a129906b7b43546e6ef80ccc64122d3e09a4963647e0ec86c1224320d1efa698ccc2f00994d8344661837a5ff1890d92c48641a6cca1b23f3334066f3209119c611a781a0d1de2248641adceadb1899fb02325b9a2433f1b3270cd6e3c6b6fa1ef37feddd077c5545f607f009c85f4501b12b20201a6341d24356544209dd4412b0228414f220844848282af6ded7b5adbde3da7b59d7b26bef5dd7ded78e5dd7b2feefcc7d97f77b6924abbfc939f9ecfa59d2debb79ef9bb97766ce9d33076e696cca64dccc743cc58f7892d3d2a8a641bbdc4c1a28f144a781ee0ba09b4b03254e2a69a0e301b49f3450e2c492063a0940fb4b032506e468a093017480345062508e065a02a05b4803254e3269a0bb02e84069a01ab3cf4702e82069a0c4813d0d7414800e96064a0cd2d140c700e896924033958e430b6171c31069a01a5be85800dd4a1aa8c66be86800dd5a1aa8ca5e1e4053a581aa1c8702e8364cd041e6b75641254e446955508f03de341f0bbeedbaf8ae536a3b15f8b6652fb18db6948ac56f79c482a7da85b5f6499e967bd156d43d0b63cfed98901b98e6d5d2ec06cfa5eef49e67346f82bf0d206e2fe7f6db70956be606c3a9bd83244c8d6be68600e65049981ad7cc6d02983b4ac2d4b8666e10600e9384a971cddc8680992e0953e39ab98d01334312a6c63573eb0166a6244c8d6be6fa026696244c8d6be6b601cc6c49981ad7cc6d0b98393eb2875b0fbf61f08dd82e6993c935813297491915f68caafed9ad7cece63df625db12754bda80d5b877d264589098e72366d4760b0d0b2812bb215a01c5830172b81448628ba441e603643e1372a0832c8dbff3225365269b44ad73bbcffbcc7808ce46dbcb83cfc34317061f2b834356f07069b5d7ec5122dc3ff848c36e7e03a33d89d8c440082d687c0b74513b316907b7401b06892d5ead99e8769dab6bf3069cc69b6fdda1ed8ef0319c6adfd85463d06e3c50eeec63981f0da7c26d59bad6106a027458bbf8d9a62ad7ff5dcb912cbe97e03ed1ae4cbe8ed7b3d498bf311438474ae2a4cee1699c0381b34012678e4acea7a0e3192589335b25e79dc0395a12679e4ace75e0641f2389335725e74a689d632571eaccccac03ce42499cd48c761ae739c0394e1267a64acec38073bcefc8d2b4e063584763ac3b8cfd59657c33fe3a378b0fb7dfa76e1a402b1571324c30273069ed17c526ace5a22f00d7075ae044492774beca6c8c2130189a248993ba1a89c6b901704e96c499a392f35e38d9a748e2cc56c9791970ee2689334f25e777c0592489335725e7f3c0592c8953679ee5bec0b9bb244eeade9c34ce638073aa24ce4c959ccb80b384c9d9d74405c66cda55a32b0fd1602a8da7ec35dafdc8de30d22cedcca225fa971c5c0a6b3aa63129fb9be4fbe4d6a1c1d80cdfa677cb9bd65a25b2d2b6d3df0358a7fb582b17b1c6da587aa0b142d614880ced210552e31a8e47a145ee290592d87bd32067408bdcab331769259fdac464401ae5dad026f76652a6366993b34df31599ed5fbb493cfd69a1e32c68b5fb30a9d39bf5f3ad41d677e0b64641f0f8856e07106a373694c55f0ffcfbfaa854680b89cf8ffff23233c7dfa09fb6a2f30d93209ce1e3f65bd482eb5dabb5e3d4c2385e65171b1b9c0cd7e1fde41481d498df1e03ca993ebbb4587c8c60e74ce5ae85b67c6d1d173f405170c8b9c1c77237ae20b6da892cea4ab8a6ce92b4f7975d7ca371a7f9eed076cba4816a5c31d21340674b03d5b8c3e78f10f82b9706aa71a7f99f01b4421aa8c69de6ff03a095d24035ee346fe01a5a250d5463c4ff5368a173a4816adc83f67300ad9606aaf1fee857001a9306aa711fefef0074aed4d2e499ccfe9e16577d1868e749a5a516eda1d13e6712b435723617d218e0fb1a5ae97c19b50d8963515a6dc36320e254eb230f3eaf4b2ddb498156b8a073c3cce1a16a1c2a3110328445b902664575b28648992a639fb5d036f79706aa31f6b90040174a03d518fb8c0168bd34508db1cfb900ba481aa8c6d8e73c006d9006aa31f65903a08dd24035c63e6700e86269a01a639fb301748934508db1cf2a005d2a0d5463ec730e802e6382f63151b24dd7d9b96e3793c03b4076353862dba455833b1266f107766640247931187176b48245b90b84e60ef255d0acc645e2ed816a5d5bd45e15ee58b8562ef7539d30cfffd592c65700a7f3c13ed264c33618eee8ddd27d1fdd0bbe3f87cee7101fad31cb64f96f8d34be0fe1643e54ee46e8c47e9b76a2ef0f27fa614cdaad4cf222ef9ae0a1735c3687a5ebea0bbc1b81f9701f73a1d686474d33926d3e3d71b64ecb4a5e0283a423a4816a4cf3de1f408f94064abcb2d2409703e851d24089f1241ae881007ab43450e25d231ae8b1007a8c3450e2cc9d067a24801e2b0d9478d788067a12801e270d94785f93067a3c801e2f63e3df52372db5199f55ee70f3b961bb9b59b47381f6041f73fc0c9719df55224e33618e7fa29c82511a4b992e3009ca937c148c6a7d716272ed2d8d85c96be0b43e5912a6c6c2e4b580798a244c8d85c9c701e6a99230351626af00cc3ffab83d1cc5416d10b9c2149bb0d85e84d8d6d8536374690ac43f4f63f2da4ab7a35d9a414df0401a142db1603be8bbffe4e3c65b7b673cd48dfc69ed2e174eebd3257152d359699cd381f30c499cd4bdbd699cb3e0aa78a6244eea82435eb40838cf92c449dd2a9dc6792d709e2d89933a91a471de079c7f96c449ad2943e37c1138cf91c449adda41e3fc1838cf95c449ad2943e3ec0903a5f3f8372e8a831fdbe534ab82a9669e43b66b8dcb83cfc3c315061f2b83c354f0406959c2fd4c02f47c49753b746e45b53d44db2f90c4395c25677fe0bc5012678e4acec7e064bf481267b64ace1b80f362499c792a39d78293fd12499cb92a393f80d679a924ce0c959c35c0799924ce2c959ca701e7e59238756e037030705ed1996982c9273a712917afe20c4c315748a1cc5249390b28af944249dd388546d91f28ffe267155c2764a9d3e2464fc2f5f12a1f29fef61757b976181dbb36fe107d6b385200ef6a1f75e1d25d7f5d6916b518820b7117290cb6ed05339c6b7c54d26c7dd083a97f58398bb80866650a89f57a60bd96c9ba6efc0061f99c0a337dd5be9bc425312359ad717b38adaff39104102dcd0ab72b8d99a6555db197d6b885ee24e8a3aff7719d6cdf205c1f6425dc34bb410aa4c616590490374a81242eb0a6419e0a90374981d4581af77880bc590aa4c6c2b8d701e42d522089f96534c88b00f2562990c418240df25580bc4d0aa4c658cfad0079bb144862c21e0df21d80bc430a2471eb7b1ae41b0079a79ceabf1af31ef706cabffac82eb30f597d3e6e0ef34a49c33c08223f7749c224f6df34cce580f9374998c451250db31a30ef9684a9b162fafe80798f244c8d1d503960de2b095363e27d0560de27095363e2fd54c0fcbb244c8d89f7a580f90f4998c4f90f0df310c0bc5f12a6c66d740e05cc07e414edd41804fe15281f94532e91d893d3d6665c0ef3f287645555c953592ef139689b0f4b03d5582ef105007d441aa8c672894f00e8a3d24035964b7c12401f9306aab15ce25300fab834508d79124f03e813d24035964b7c10409f9406aab15ce24300fa9434508de5121f05d0a7a5816a2c97f838803ec3cea5186b1a4da57b8913e2019158f0e4b2e0a37d1a0d8fb61db3cd7089f09e65e26d6e9ad605aa744f5d64aadb0882685ce4ba372cbb7e4e4e8944e2a94d2b913802289f67520e8853dad6680b247664137b621ba56d627f0a9cf62f306187343bedc3da7f856661fc21f6803691afedd0b2c6fb47474008ef455fc515a38fe14b996c9a97fb2467abd172266f837efe251fd96ac83935f8a1a5ac0c3eb3075de00e5ee4aeba4b55b33e03ac2f33597b055fece17e1c6d54a63b5f6d07b886fed3477b8caea1e1f5324c489d60c6b4387cca35d9dcab660f16eb30e8f35ff153d137bbc930ca4366f950165f06743aafcaa9afa271c9c24838c15ff33137c23cf31277b0bae0f4b65b39da53be342ea339e37c0de86c5e975b978ad85a6943fa9570e2bfe1a7f674baffeb266d18f41ab4cc377df0659a1cff7cb4a0c78bc0f75667063dc6185ba67b767ce507710094caa2bc004ee4b77d8e2b63495b48b4154b22b2d262497930ae7cc7c7963b9d707ad38642b36028f42e13cf5edf9b062da6b8c14e75f024e28ed634bac140f79e9cf25d192a17be9e09d7c6f725616a5cf87a16607e20095363eadfb180f92f49981a53ff4e00cc0f25616a4cfd5b0e981f49c2d498fa7728607e2c095363eadf32c0fc4412a6c6d4bf8300f35349981a6fdd2e02cccf24616a8ca32f05cccf7dedd71a33cd9767d99f799885d3166bed0341b695928a770d67f6e5b490ef4888087d2189335f25e77ec0f9a5244eea4893c6390fae9a5f49e2cc54c9791a707e2d89334b25e74dc0f98d24ce6c959c8f01e7b79238a91bf4f06ee602e77792387355727e0d9cdf4be2a4a6a5d238378581d20f3e961a0c37d126f7e18d5d2fb320dafdf1ee300bfa7767ae704b4e9ed2b8fbf57ca0fcd1cfa2974e6889b413b9c224f87e92524f8a1abda4b54403d7c49fa55066a9a49c0894bf48a1cc5449b93150fe470a65b64aca1381f25726e586c117c5c1170dc666ebd843d9f248d566a1ebc56366990b07c7dc57faba9c1ed0e5d8883d8d71a069be267d42f09402b70430e6d2a00b828355b8c5d465f115971546732a5423e0a630713bd69f6bdca1bd179ceedda45066a9a42c07caee52283355520e06ca35989461fa49897b7acb393cf31cf5a8e07be5abf2210b838ff691c465aeb4cc9e4de1dad983499b28089bd7a4b56a9e4aee0733f1ff63f2f5857e7d820913a24a5d52fe3cd57df76600b826ffd4c6ad22a6071aa383175de1c694d1c751c183ab832735bab1668359c89e05d1961d9c07b46b49a5a5863d68b4f7c055736d1f57cd2c93efffaad92785c437106e4cf464f20d82ab66db3b6c4c77ffc64c95ebcb75cf87ae80137f1d26ef86a6ed9167f44ea99967b6121285311b469debfa68a5c8185e414b8231e82437dab44191f07bc5c66ec6b3d4b5d782e015c40cb560e206ac567a345c047a49ed9ea8f3255af7f40e5c007a4ba5a5064868b4df42cfdf87499b6692b37c6d37b53838f92b5df02e3c8c7df98dc121ca2136dab536e57b052e12eb31b9073beef1ee4a6bb78a2a0ffe1f464b2bdca1a2adce3a69fe4f1b2bf484f6dcd74794aa7d553434d65bed066d757d1fc3aed616388c76d7da85dc53fe40d6b02b0b18376032aeaeda6a41f0c4856ea845857cb93b2b1b13c6af1bfa98a466ba53b7ab6c8d72320ca236f231886a3efc6fcf308a78a5a40da21e87537c63266d94a695bc4357786b3971b359f76c3f1d7af04d9898035ac05cfd80492fec1c80dd94098bfbc08607696dff380fd753da9da634b89e6ec6e45cdf4431d399ee1bf69797b916eb899096917907b4c8cd7d0cd65b1b61e2e1a85d108d722e50f663526ed901ca92e077da832c3245c167d18cbe9e3bfe5c4e8b9f422fdf9f491c55cc884225752e1cd2b43e41729bd598ddfe0d800ef073d729d7ff809ed6016d0e7c5bf8baeb846bf0da13bcd33b5cba08faf7813e864bed2d9093afb222d660e01c248973b84ace5ec039581227b5c63a8df32e183e6d2989335b25e7b9c0394412a7ce6a825f00e75692387355723e039c5b4be2a46e5245e3dc0b3853257166a9e43c0a38b791c499a992b31e38d37c84e9706d9e9d2595c4674c7a67428703e1b69d73e7285c389615fc6b279765ab3e9606079b672add5493d83abbb1ee69a6c23dcded98b4a92639a634db34bff5d6916564fa6ed21d05d4db4bc95fa2f6f8b45bc9ef43e469072994d4de9e46b915b4caa15228a93d3d8db22f50ee2885923a7fa7512e06ca614cca7e2d0c9aa2ca96f6de7bd3b406cdc3a863206497ce446da98e5b53c8d1ae2faff53332a5b5d3d1409ae16364da1669b86ea42c78791eebb1d20a381e01b4999d79354dbecfa9b18c442d0c97b27c4d41c3fbf3f6404be227b9e60cbbd74c8230db478784cb1b5a2ed8e8ad14190d754b6897393e5626871ba25718bb454ba2f27abdafd649eb86ee816b65aeaf131c2bb496b9036aeec94700619e8f64034b58e9c698f6a5463fd6bea2ee1db84e0ef79b29d7f255725cfc09deae961359b499409b2f3509911a04a185e67e8093ff0f5269a941111a6d19d0ee2495961a05a5d1de081784113e7a7d1b4fea5a0bc07705c29dfdecd6d4091bffd2b61cc807be5d7cf065bb2484ae9211970ef39f5d997c1bc0095cd34244537331a8dba18319e9e714cef6df066957c0f7e1142ef0913ad8be14984c9549300f01e62849981aa3964f03e66849981a8bdf3e00986324616a2c7efb20608e9584a9b1f8edad805928095363f1dbfb01739c244c8de9813703e67849981a8bdfde029813246112374da361be0598132561e62bc47c1b3027f123946d2d84e9a4cdd068018e2d8176b28f9b6aadade188dee94ce67893b671ea01b01a6e4ae72e85090f55e3288933745acefa551072dbcdc71e0a1d49bd227645b4f4969d21fc56240d94d81dd1407701d06269a0c4d0070d3407407797064aec8e68a079003a551a28b153a2810e07d01269a0c4d0310d7427002d9506aa3189351d40a7490325864368a099003a5d1a28318c4c03cd02d03da4811243c934d06c00dd531268a6d281fd08987aee250d54e3d4331f40f79606aa71d89407a0fb4803d538b01f06a0fb4a03d538f54c03d019d240350647b602d0fda4816a1c36f507d099d240350eecfb01e82c69a01aa79e1b01689934508dc191750174b68f15c8e1261556a1c41daace68cebc9c0e13cd7226df20f35bcb42124f775a8ec64c689d159d79f338390393389c5fc1a22c84fbf0953eae9cd1666955f13522154d48f1eaa9719b9f87a16d56f9b872daedf7bda75fd11633fc6a127c737ce45636bf72b627bb9238d1a465153d002db3dac7caa58c55abec6c3d03ac5fe0a185d2b69c7a1d5a684c6e0bd55838f72968a17399b41d2f0fa13198bc038c42e749e21cae92730be0ac91c499a392f309b88ece97c499ad92f336e0ac95c499a792b3279cec0b2471e6aae4fc045a679d24ce0c959cf381737f499c592a394f07ce859238a9a95c34ce4380b3dec71e20b875df54f7221a4c8dd1bd0def9ed0012d6222f631898d543cef00429ba317410b6cf03d476f79d33e9b13373ff8ad0bdc57b5ae751263ef6ba7b04e6e0818373269a3a2b8f6e41e133c684170dc6283d5316d15187bc032778065265123b3dec7a94f6bbd23a0f52ef6d11db5d6198d0a9ebac0d8ccb83217b8a39675a4716e072d7689244e6ad1511a6729702e95c449ddf190c63903629ecb24715237b8a0711e0c9c0748e2a4ee224be3bc1a380f94c449ad0143e3bc1b380f92c449ad304ce37c1e38974be2a4d670a5717e089c074be2a45618a671a6c040e9104951a57c95ebe453212072a824cee12a393705cec32471e6a8e47cd824380f97c499ad92f33ae03c4212679e4ace9f81f348499cb92a39df04cea3247166a8e4ac06cea3257166a9e43c15388f91c449dd1999c67910701ecbe4ec6f9257c85b870663b3379aae916f1ef9d4373bfa14269bc73159b76dc25ae7ee2555041e366b237a9f896265f8cbf05715049f2d74e933d4c484912cf099301d3d9e091e55262c372d6fb09a3c15d577677e10cc9c4e9002495c2742831c0090274a81245e4b69903b4117759214488dc95bc300f2642990c42d0368901703e4295220895b05d0200b01f2542990c4613c0db20f74367f940249dc5e8506792db4c8d3a44012b7a6a241f68316f9272990c41c761ae44600793a137213b3ba8047f24852e310a817cccbcf9084a97160de1b30cff4b15145fb66381abb9dc7e0243f8b49996a92e345b34df3e4ea8e9461a651d3d2b09742a4e86c2675ba691af16c0dd22ee86eefba7a4f81baa12cfea1c0ff671f57e0f62fffd61766de07aec0e748c224463e6998fb02e6b99230352e0f9b0c98e749c2d478376937c03c5f122631e644c3dc1d302f9084498c84d230a702e68592308993001a6609605e2409931811e5257201e6c592308931281ae634c0bc44122631324ac3dc0b302f65620e30cd371018efb64c2d0cfe8d39c68ae0fd2e7007b6f9f05e3615a0c12e3509d8cbf86b9926070f2877e9d9b8f36ca7d584a5ed47bb26b05eee63c55d6b613e3c1cbd32d79a2cce3170fa5fc1e48cb650b5dbac78dffc62248bef158894ae60f2f576efc65e2de7b99759ef14e6b87d18ec93f4453e378413f94a1ff1fad67af1e413993854a79dc4b3e124fe0b93b2e3c5cb746e3ff9319cd6574903d558bcec1300bd5a1aa8c6c23b6f03e835d24035a61ebc0fa0d74a03d558bcec0300bd4e1aa8c6f27a1f01e8f5d2403516de7919406f9006aab134d4eb007aa334508dc5cbde00d09ba4816a2caff72680decc048d36ab5c64aa831fd777681d13357793369fbf11686f914a4b4ddaa6d13e6212b4b7fab8e1d1be98671e735c4a0b96ac01c192db246112c7a434cc1e8079bb244c8d61bc2fe10a7a87244ce2359386f93d60de290993380ea5617e06987f9584491c83d2305702e65d923035debf7c1730ff260993387fa761be0798774bc224de43a261ae0343a37b246112ef1fd130fb00e6bd3e6e16b72f534ee376013fc1497e1f93322a4dda1a64f44ea98b10f7ee46623c1a3287fedeb9cb17c243d5384ae2509d5687f84a38b9ff212bcaa9b3dce3c5708adf2f0d54e3f2854b00f40169a01a972f9c0da00f4a03d5b87ce15c007d481aa8c6e50be703e8c3d240352e5fb810401f9106aa71f9c2e900faa834508dcb17ce00d0c7a4816a5cbe7026803e2e0d54e3f285b300f40926e820d37cd219de652f3163cc24974f64774b0ebf87194705c12b88196a32362db7e87098883ec9e4c562ba8d2efdc556d69c1d9fc3db7d93e929312b5888479804e2533e328ab21da3e78c22da5a8fada10d3edd9971a5a2e0297383cfecceddd4b812ad25164088ee197e04bedcad31b2bfdcbed082e0294b83cfcabb48ba562a9cd6cffac8bbc43ce1d6925be9d9c1b4ae6638703ec7e4ecd7026769dca1c85405b465eee025ee17d4f9404d65a17683e1d1f37e925933fc773db4cdd04e02be177cace06c3eba6ccf1a4ee25c9d76f5ac805efd451fbd7afb6e066b5c3e3316ae9c2ff9d8b0e2bf59674cbcc9416ba3d700eccb526189b7e368b05700ec3fa5c2122f0534d8d900fb8a5458622084063b09605f950aab71bbdf7100fb9a54588d03ac1c807d5d2a2cf1b61d0df63c807d432a2cf106330df62c807d532aacc66cb92500fb965458e2a21d1aec62807ddb777ca0e51de94b5db0c54e74abdce1e67347b237b368e740a8fa1d1f37f6301cb85bf07149f0997dd98df148eb22d7566b4d613c9a55e92330485bf3fc0844b6de65f2f60abe98eab6b3b477478b82a7d9d61adddaa3c1d136b11c00a7fc7b3e22aa39f13ba2358184b77ba1b42be6f9c0f73e93af693de358f022a60363eb37f688d353da8dbde3e06af9819c68aac62ca55a68a1fff2715bafb5dbcdcd0ba0682c81520c2df343499cf92a39ab81f323499c192a3917c35da88f257166aae4bc18383f91c499a592f32ee0fc541267b64ace6781f333499cd49c3a1ae7dbc0f9b924ce5c959cbf00e74a499cd4cd06689c8360a0f4053f7e94880ab5bc84ac938a4ed0e247761e18f17ec9e4ed6d12e1393b7baff11502a1b5cce320f4f6958f6d305a3bd193e7ead421126db6be3d9ce65f4bc2d4b8a7c84e80f98d244c95bb2a02e6b7923055eeaa0898df49c2d4b8abe20f30d2fc5e12a6c65d157f02cc1f24616adc55f10bc0fcb7244c8dcbc2bf04cc1f25616adc55f125c0fc4912a6c65d15df74986bf66872f0c266071fed02113614516ea2f517f5c1f7c7199b5258e920ca83af279b987bd6ac80639fe0bf8efd056604ffb5f4fd94943ec12b1a6b96042fcf7ed71eafc21d7b7ef053fbcaea4d7a46f0909f6d83582fde20d2dc3dd282c0dc26364e3595eeb72f0d9e675f73855b0211d5f76c7024696e63b8e2e07b0dc62e92b0bfc1a64956073fb5ef386696c1fa93b494b59c53a5698c0b58c0b4f86b6d3461b2654b2996698ebb381ede49734b33a2afa20519f679d3dcab48732b10c6049f55b95756636c3cc3be2aabd0e01e6d8f69130227bbb6655f89ad565ae45e7d65706cfb884464242d65edf863c3bf4df817ac8fbf92d61789a4a5acdbece7f66f1a56444d4b59c79d3f0bdcbbad0a2c1289a66929eb073f0bdf4fe2bb09a5dddd628006f73b7ab7f0daa6b8bf5e7570ec8ab87be1aac84ef41b7a04df1d1d0f4dd4bb669d92d237de92ed23c26394054728731f4b57bdaf6199c1c35272837fc255723bae5a1f17b6fcf9c17fe157d1f7577f4cdb8edb3eda2fb6b1a6b47cf5aaf9ddcec0d5bda3f0a2619f5fe5626295eea81356fb4e57fffe5a3f9bd76de3af322ccbfe2dbaf2fbff8ffdbb778bffddbb0dcbb6ef37e377687bab7f45bfe26ffebdfbcbe4d34f7c7b2e76d7f43af748fb327f4b7beee9aedf78bc98fbbdc37264b6e5dfefbd9bb5e01ad66d58ee7fdb963bfe8a6c27406bcbe1d1c2a5d34d8e3dae1defaee5bf43d3f79c78545dbce78fda02f676ab9718e0c639ad1fad20f86a8e7baf3177d4f926fa9fed23ed58da5e82ba313df1825f99b4feef7f570af77bd3ed95a27bd2c9946e4fa635fed7ca7fa7566effdbc48d50a705cf0dfb4c3b825d187c6e8ff7f3846ea6c7ff033da6cc68116d0700 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/77a735fdd8cf6ba49aa979e0eb722c64.asset.meta b/Assets/SerializedUdonPrograms/77a735fdd8cf6ba49aa979e0eb722c64.asset.meta new file mode 100644 index 0000000..b51aa98 --- /dev/null +++ b/Assets/SerializedUdonPrograms/77a735fdd8cf6ba49aa979e0eb722c64.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 57f6bfc56f4d32d429acd0a2e021985d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/77f0a9070ef006445a3d34af59f949d2.asset b/Assets/SerializedUdonPrograms/77f0a9070ef006445a3d34af59f949d2.asset new file mode 100644 index 0000000..fb76eba --- /dev/null +++ b/Assets/SerializedUdonPrograms/77f0a9070ef006445a3d34af59f949d2.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 77f0a9070ef006445a3d34af59f949d2 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec5d079c14b5f7cfecd17befc8d14fda1d475740cad194ce8128201cdc1d9c1c07de1d4d5151b1a0d8bb62c7deb037ec0d7befbdf7defb7f924976decce5ed6e369bbd19fe3ffcc830b333dfbc7cf3f292bcbc24916c62ffb1fad87fcd2133c958d28fcc2685642529b3ff35d6beaeb0ff73eec4f3e9a4dcbe2eb5ff2eb07feb4332e37c49fff4b4dad87f4fb2ef2a48a5fde56ab2c4be96b0df679122fbdf93ec6f8bec3bfab4d8febfc87ecbaa617f349be49169642a696db58c0331877d54c19f59345f561dfbef3164bdfd6b11138a2692cd7e6a6dff35cbfea582fdb6c2165abc378f2c60d95a61ffb6c4fea69c94da988b19629dc29309fb07712ebdf8b537bfee6eff5f97ff3b83ffbb0eff377cbf26bff649f0fdbee0bbbae0df94a18b637cdfcfb9467ad8d75af6e3fdc13dfdf66bfe5eb68317591603ab3fbfe6f2eb008e392f01f96bf3ebc038f98d8531086025c2591d7e1dc2af83b9bcf3934c7f98c391b515e0512e7b02798680b4eb82dfe9b3a11a7917e598e52bc72ca71c23e7f0f2fb98bfbf07bf0ee7d73d39b6fd4ef352fe6c04bfe6c4916ba4f31d935fe8ac9d66c62a7ebf17bf8ee2d7d15cb65e5cd605e05e571651a66338e6ee3c8d0324cfc5fbf4f785fc7e2cbfe6f9ca6b1c7f6f11bf1f9fa03c89e89f90a9374fa300dcdb3cd65814034b947b1f5fb9f332a8718ac3638d3b7df901fa27c59dc0f11627918fbebe7cf47564a999e57d2fae0c027f22c7e9c77197807b8a7b8662de6af0ef6ee5f793487cdbd62b81df263b387504d7539c746ab5709ed712754de8f23e71e414659bed2bdb6c8e5bca7145fea73af796e07920c0a1df17fa70737cb8391c57d888f109ca398d5f67f2eb6c7ecd27d17a5cc1cb90cce0d7593ccdfec46b03441b32ddfdb6d55c45de6295d11c5f59e7f07473e3608aeff7e5d7ba09be2fde99ab21f37efc5a2fc134ebf1ebfe1a69d67774a1cef73e5d981207739ec36f9d4a20838d537703bf176d2b2f6fc2ed7264904f0f445b1e4b0fe2c9b290cb424019d8b2d46bc2ef17f16b815716b2d8275351ea648a883e5131b8a7d781fcf952704f659deea453ef118ec96d1f117559c80c654cb1cca4d8f9ae6103a01b897c174bbf963af9ab9fe360d7cfe7cf45bd14b2ede7ca5d270f7c2be448a43e1cc8b918e2e37808974170bbdcf7de32704faf83ddf4d8bfed6f1b08ddea079ed36f4bc03dfdbd2441595790aa3a4b718681b487f1b4b9fd6f700a7fb78c54ad7bb26fe915f435d9bf29dedbfcbb95a46a3b26dea3793b10dcd3df4b13ccdb2a897c76ba0d47c5f8f620e2b53ffbbafa50fb79feac9ccbb307f1d62dd1c71de47e6389fe648573df58c8c2af11d1f714ffb6e56b24dad3d5fcba9ec8dbd9b580075effc83a37ed0e42de3531d212f5fa605fbe97ba38f5db70d9851d3b8478eb8cff5dfa4cd8df8dfc7a14bf1ee9bebb5ac87738bf1ec1651b4e3cb6991c069ed3eb08fefb72704fdf3bd4c56e297474934f5659791eedcbbbcc06c4d2b3639c772b459ac73adc36deca797bc427432589adbfbbf17c8d245efd1fc9717f76709b8ce2ef1fc7af27f0f7f602e52cc642c7bb791a25dad8cd00b72ef8772232c6e2e324279d683ffd647e15fce4036c3e2e8a8c72e58bf6dd4e04bfd17bde87235b88a7cd8929cba9fcda304e7e7a81f7e8f5348dfcc7faad16bf9ec9f3369a78c72ea39d326efa710cacb31c9eda74e3f7673bdf34fb99dff3b17753c1dbb9204f348d312ed74d44fd388fff3616e47b0b7f96079ef1be7f649cfb2c22c657e7fbcaa7d4f7fb568021fbfd022083ecf70bf973de66359fce9f5fe4cbcb169fac79c4632f847f0ae63592e74bbb4ca12c2fe1df8ef795e578a75c9a6f8f8175a9bc2c5b3cc0ef2ff395e5365f594e9094e5e5fcb789a0dcf6e4cf2649ca776fc0c304fedb1548598adfaf04b8b2dfaf0232c87ebfda5b962d3bf0e7d7206509e58765796dd5bcb27760da2b1328cbebf9f53a7e95f55f6f20ae1da7b8ab12c0bd915f0f8d81dbcf877b5002b837f1ebf618b83723f226939ed075e173d98778759ddedb7adb6a6b0cac5b8854d75b0bce6f255e5dbf8d78757d32a9aaebb7f3dfe0d880db85c8545255d7a7013d99cc7fbb03bc037555fc7e27c095fd7e179041f6fbddc4a3eb6d44bb780f91eb3a941feafa8eaa7965efc0b4cb1328cb7b7d3c0b7e45fe96827bbb7cda08f944ffe86cc0ab2c9dfb1cfcb50ff0fbfb39de0c8e5f01eee975a62fdd993cddb71d9cb6629cd0803fe7fd9fb6c29ff6004fef6f7effa0f35edb0ebef71e72eed73dcdef1ff1f1ffa84f57803f299a9787c16f306fb389b74ff2187f3e0794d56cf00c9695e817c6e3f5717edde9e36f16c7ab04f7f4bd275df9d78bbefb13fc7aaafb5b53f19b28df06408ea7e4bac2640565a6dc4712797e3a4e9e556cd2bec46b93f675f4a07d4e0cace7f93bf931de79915f5fe2d71738fe5ce21d8708bbfb32bfdfcff7bbf0ab6d77b96ff939904360d36f56c79047e4ff157e7d95e3efcfbf5d03eeedbc7598eba4d56111bf0a395ff3e1bceeca75c846df377d1290c7c46f6b795ee611af8d98e7e4ad6326f1eaee9a38faf406bfbec9afeb38de7ce2f5070abf612c3f56bcb462e42b7200f1fa0e845fed2d7ebf80ff2ef2bfc8f7fe22fe3eb78d9185bef717fbde17f32aeff0fb02effbe45d8043efdf73f31611e3f0f7c1335ec7c8072e3f9d78df34b2c49b36f99078c78362cc57c8df5b07be831c88dfd7f3fb225f9e8af9fdc1e09e5e97fa70854d7edbf7bbc05de693f7237efd945f3f71f378c8ebe01bc027f9d88b1953a7dfe31825fc9b43c0bdadd39dde8f8121be153e81e51c6303b8b73132b9cf263346bd8d94faf83b103ca7d715fcf743c13dc5de18433e2e7ba4cc97b732feed8e04bee5fdf5c82a5fde56710cdefe77ae1303eb337e15f65594a1d0598a572e2957d126f3f177e4202ec361e0de96a1f3c5fcbd2f885cb757fabe3fdcfb7d17d1e7fd925fbff2c95641bc3eb06ff8f55b5c27c9773ed92bdd77a2f27ded934ff82385dcab79ba1b811ce239bdae21de368db73584fb94226b7dbf0bfb229b638f55475af2eb0f24691b4b7e045889f87e5af1eb4f1a69fe0cb01249b335bffea291e6af002b9134858ff6378d347f075889a4f927bffee5e840979da07ce9f50f7ee57df808b5dd548f8e00f7a24cb91e7515f343fff0ebbfb1b123eb39e691e01ec38c9117fa4f768df0abe57e3f90fbe62dfe8dc5e3aa58e4187f6710f77558bcff6af1ba69d50638dc7f6289f6f6602efb51e05e94bd909deb9e25e6639b11666b7a70992287708c4dcefb3d267a6564bfd705ff16e5ccf1bbf136cfaaefdcf7e1be078b8fcb7a089b26fa62ffc5d60d8bfb5aad4631f2df985f9be05c47fb6371d28ba99f9cab2c3e168c6c209eb6d16aca391e0e7e17b682de1fcadf3f1adcdb783d79bfde6ac6afcdf1bc4a396ac1f18e006547ef377af581c52252f9b683df855da1f747f2f78f01f7f47a147f7e2c48473ca7d74dc45b67c458d9af17359d2684c9d20a91b17592321e219751aa9b6de4e5172daf9fdd6fbaf2f4adb6fccafd05dd847fea37febcbdfb4d5f5177dbf177c45cad28ffe3bce5df7bbeef7de1f73f8c78fb0587f9deefe8fd2e72387f7fb3a31f11fe9dc5e78a501b42eba9f8ad531c1d84ef66f26b177eedecbedb878f83acaefcda0dd769ab3b895d7f619a3d487c7bd053018fcf975abbc7c0eba580c7636aad7ecef301bccf63f13eb6c56362ad6c5e6647136f6c849867948c29ad9c3872d067fde3e407ca9a0bea186c37b8cecbda8d986dde00a00714e7188e7b3cb8a7bf4bdab998b8c286f720aeed167175308e95b72916f44da9da78ae5f91cdc4eb4bd8ccafc711ef7c2bbdb7f3d3b7d0c94fdf4d402e7a1de3fbae00dcd3ebb1aeac113e27dc773bc7126df5202f6604ccd30e2f05cfe8bb830116b4351c3b4770c9eb5ce454fede09e01eca7d824fee131c9c7e7c4c10add7ede2702e2bafeededf22a7f1b4b6487ea7cf4f04efd1eb89fcf949e0de962d5bd8478e6bf198108bc799583c0623723af1d6bdd3797a927148d476c6c96754b69339f6c9e0deafc342d74ef2e9da493c1f773a328832b3f8fc96355c9e1f6b842f5f1b53972f6ba457df849ec5d3931cd1dfebce7f3f45516f847d10ba2fe65f4e05f7501796827b9afedf8edcfd45ba3cd6c11ae5e5308aafa013fe3aceeee9b70728ea0ccf83351ae8059c2312bf8f21ee1c117c3ed6a7735007853ed505ffb679c95dc4d312b6fa74f08ec0cd03efc8e41907e4b179c915fd586187277adf97c5de5a137ce5300bc89368dd146397532479180d7e03794855d9c56cb7848e4f4a1e23daa6edad8121faaed91a79b10056226379de27b534e2a2adda002b9134dbf3ef266ba45903602590a645e78a613f8ff7eba26d9a88633914dcdb690c12f38da27ce3c4ad5a7cbed7e273b9d64cf77d8bcf4b59b348b46e6ce0f397d60c27bdc1dd14d3e3f390d61c7ee531e6913389770e848f5562cd81c44b2b26bffb3998030b813ed1dfc518e92ce21d539fe5e47788b00d3cded412ebbd64f643f41762f5ab17c8cbd98a13436f1d807cc7fd4291b37df2f3788721dc276df1b9166b510cd90a9cfb9e439debb089beb4f8b76cbd154ceb1c27ada1625cb1380e0ee72772ae0fe75c0767d828fe1e9fa3b144dca85f3704764df00db7f356b18f2f6cdc741ef1b60fe7e17a682d4da07c856f20c6b849c83c94c78c5925c9e9444c7d5f2ec78cda93f37ddc9fef70bf8718c70a9dc6b887f5f2c038babb2201decae2f046bfe1be84c856e2eda36de5b2ffee7dcfe23148d64ae26db3c5ef62be84cb17b569f1f2c3e76d2c3e5f618958880b88d7a65da0cf5dcc325e43a47d696b75f298a29f1ced0b8938c8d3c1bdcdf570d10e88b191988b3983cb34dd8b17b988ff7e26b817df25d2260bdfd0e038efc7e26b1dc04a24cd8e4e5e47883ac17df896f0f35dece2b07fd36f64b1cfb16412f38d9710af4e5fc2d3ae74b046885837a137c07f2ed5513e876809dfdd51bef2b8d495333af6bf94bf7b848b1dd529104bbff101fe6c23e0556089184161672e03728a679703fc4d3e192ef7a61bb98278c7835738bc8ccaf4e5877f17b99278c77557fa78be8aff7e16b8b7f146f2f8af911f3bd7bdb82d89d683ab413efc695ecd31cfe6df707fec5e7cfdcf5e7cced4e2b6d612feab637d78db2465b22d856522ec5b1cdd6165467f1b03eec19846e43bfafbe5e077ca211fef59dc6764719f97757c7af31bcd87b051624e2ad935f0c2ff780df1d6d56b9cf21e9de9a43f46c8c67d6196f02b5dc7bf3b873fe7e36a4bf8a3aef7f17c3df88e5eaf255e5fdcb53cddbfbdef59dc4711b991bf7f2eb8a7d7edfcf9793ef9b6fbe43cdffbdc02e37ff18dc803e306d601f17c0cb887e362187feaef6761df6e8d93b6f0398a39bacdb1f53ceab310bc5e00ee6d5ef3f8dcaec5712d11e37f137fff42fe9cfb49acd3c1eff47a33f1f42de3ea81681be3e9c10d3e3db881cb5b237c7a101171e3b2f154baf440d8a56e205f67255866e7e895d9b83bc35766d13e888821b6cb6c45659c6f132db34e0e2f33c578ed5c5f3e6f43ca41ac29badd570eb783efe8f50e5f39dce1a4376194f7bd6839dce92b07515e7721e570974fcef3bdcf536a437ddf476e51f85e32368cdc0d64532cc768daa726f7bd5f0f982cb01c6e255effd7ad4eb94d14eb1dc53cd43dc43b0f750fff7d880fe768702fe417793fdf57a6f7213ac7f312b9dfa773f783efe8f5019fce3de0c83ee956ef7bd1bc3ee8d3b907f9f52144e71ef2c979bef77960744ef6fd0e4d9d7d58436745da49ea6cca75fe619f1edcebd3d57b1dbdd947ac11123aff884fe7459d18120347e45fb48b99fcd963ee33f66f9adeef0ef7931b807ccbdea5d747c1b3479def27733fe0e4c9205dec5db1df8be86bbfc465bfc89767f1fc628e2d7c69bc0f67f1be59e4f1aaba1fd949e4f599a71179c2abb3ec5e7c47af4f126f7d7ed2917dca26ef7bd1727c8a78ebf353fcfa3491d7e7a77d729eef7d9ed2fe175fe7634dc531d35dc707713db1c4de0ccf905da78e3fe3e8ca34e18be463f2787d54eb627ebd845fb9af263a1659e0d3a167111de763e2c8733e3d780e7c47afcffb749caf5d9abeccfb5e54c7c55aa273c13dbdbe88e8f88b3e39cff73e4fa98e8bf5abd371cc74eb78b263dda0e973c2632ce1f3f1f5dfa36dd4edeef755faeca2cf5600ee6d5d5cbac5872dbe7bd92b6344ac91137dffa5e09e8e355e77ca64e6fbce7569a1f7bb683c85c8bb189ffab915794b56876ed7fcfe65bdef198f2af5ea652f4e74ace4b339d139d6bb7ddfdf0dbeb3403fe538706f974ffedbdef7a23647f4f5cf05f75602633321a7c2d8ecff5bd9fa638494ed84482f593bf5b2e6f7b76b7e7f9bdef7bb5afea3755dc488bdc27f3f0ddc5b7c6c5b17fcdbaebf8b4679d340c7d3623e25de78fa51e2b5137cecb05f0def7b61184f477dd037b998d16737032e05ff79e0fdffb545f8f79d35e5bf59edfb2a6de1c3888e5fc17f7fc4f7fd23e03b8b8fa7a18ef3b1f8bccfbdef45755c8c15cf05f75602634c21a7c218f3ffbb6ea9ea8627be35d6fb982d16e9fdaf2daa1efe3a6b7effff9c7fcf98118caf2c119b71b5f73bb47f700dff3dc9fe414137ef7b61e81f887605ee63f8ffda1e8398ff688c3fe83bfdaf6e2ae6dfe7cfb1ae029c42dbe9f72f62fd1bb1475e92fd9bc29ddef7aaa37fa31dc3f0bf3a9a7c0cc7ffeaa377dc7dbbf77b4f7c03f5598a78e2f1fc1acf0f1b2b1655c4a088d895575dacc8ab403e95f8d61b9c775788b501371256cf97f1f324962dc2312c11b7d82d46da9b391edfff789958efc0ed97c5eba6c5e72ca363ebd7388f45e09efe2e8bd58e953fb1fe46c418cae22e637d7f97f3aeff5c8d12beff7989881d15f110dcc7698939d47789c73e47de8d910f11b7735b6c1db1843ff64d50fe6f3a721d28d651721ead3bc0ef548ec3c03dbdbe0130dee018ab7cdfbec5bf3d04dc8bf7e9f303c13dbdbe0e305fe7988ff830dfe6df5e00eec5fb10937f5f2ae2def9dcb8c5fb94d6033cbfb23587f779cb9e88bd11cff6fd2eeafee9f2df451b57c56721bebf04e40dfefea0f7bda82e5ce2d305596cdd1d204dd16689fe2bb739d623ee77ab443cb46897e3e910c4a7b2bcc3655b03ee29efa2fff0680ad37e8c5fc5dcf60eaf2c511d117c6df4f1a5517762c60f8b750437268f619d0db01258c3603de9d5c1c87b3ccf05e0de2e8732a1d3a27ff40cbf3eebc5897c4abc76f3d30438db19a7bc447cc5fb1c7b29b8a7b2ad7370cb441d7f8e5f63c410aba60d633f231f72390e06f790830f88b7fff789effd4f3866577effb18ff38f9d7cad1475f17952b58d14efd505ffa6d78fc0b38f38ce7620174cf723e2ed638bf7791b195d0f1087230faeb0152ff83064b1a0622eff162f7f96888759a426474c3d7f59c2a19dd7553bbd9c582fb972aee26d82f58aefb7786989b1cc673e7dfdcc49f3a02c07ff20b1064ae8e2c371f0fd6baf3ee7f8a7837b8a7f31f1d4e9689f99afbd2a17fcbf4a3c6b2ba2f3e45f10efd86d30784eaf5ffaf4e64b27dd28ee6b5edc2a7b387c4dbcf543ec03f80d9013ca23f61b14fb735cea7bde01e8ddebbe6fbf72cb33ba86e42baf5c96188b8a7693f723ac3793cb47ccb535f1ca58f68cafbb8e7cebd3a76f1dde2bb8fdabe0e56ef1fe1199153b2deb1d1ffe771cff32704f7f07eb6ac43929166f0bad0fbc189ebd2d8fe038dfbbdf47f787e4f6ca7adffded2831e6791b7c47efdf03f9016d8bb20df8d049c7bfe77ba590498c91c05e3952de3e7270fc7b7cafce54c4e16bc9c41ee0d6a7cebdd803dc12ed84d86382ef231af9c1cb8325e67c7e74d38bfc009ed177fdfb7bc7914dfaec488ef9934f0f7f72f24fbb6e54fe35a21f23f4f088383c88fefccfe03d9116d88b326af77e759f457e01cfe8f5372edb36706fcbb676930ff777fede85206d7afd833fbf1cdc0bdb43efffe4bfcff7e1fd0d64fa93a729da9a2f7c69fcc531f81aecb5623ddc5be0f7ba404ef14c60886f41faec4a9f5fc1cb60b837cd7865202d17b11fecfdeadf46fee1f214837b7afdd7a73bff3a5cad1beec8bd4eac27177afa60ecb405aec56d7ae43f8ebf16dcd3dfbf0678609c91687ee805e687dd83742dd116c4da7359f46f78bb9511e1df5c09eee9d572f36c7dcb9f65b8cfd8eff45a8378da69a1a31935c1bb35c1bbf45a8b78fa9aecdefeed90e13e6cf15d6de2f13765f0bd522cde3664d4e1bf73bfb0a8a31975810c75c0337aadc7bfb91adcdb321c3ccad181435a2069d5e7df9d06ee619a0df8efd7807b8abbd3fb7e4643fedeb5e05e700c71aef3e2f8e5ca6804f2d88897c113b1f555f02afa10ec1ef8ebd66ff2e6291e5eccf64eb49f62ef59dece6534261e9f10bba7bf27eadbe2ed92c5f734ce68e22b17718603189f288f85457f4963ff63eb57272f03c49e1b93f8f567754c8bcf256534251efbc5ee6dddd8c0f7ff3a54ac4f16fb7572bb6df1be42467b2ff751dd057dd80cb1bfd0efe099e8fbffe13eb384edfbd32db74d628f0b31a698113baf225fd6bf3c9d66beb2e47bc5663407b2f0fd31325af8b868e17071581d4796c3450c33b7c1116edf22962befd1f97239e8ab0cbb1491b3a54f4ebe477706d8eb3a83effd9ad1d627675b2ee776af9c11d1a6d4f0ca1bf8324b800b8b9f4f9c01f6e58eea34d8375b7016a909be03e510fdbd16c090fd2eda8d15bee7a22d68e793b91d289bbae0df09f011d38e88b15a5d758c08dfbb9aed3540efc17e9f16ef7765ece696e3e62de0197d5fb4371d795ec5b95ea29dee04f0b88f212313c829deeb0c38e90c30e9b50bf1b6e75d1cdd3e6a9157f6e8775d89b73de77e8f8c6ec45b47ba3938473e0064057cb27b30f66572c37c74e7bf1f0dee295e3787aba38622f2f5f0ca17fd3dd3f7bb18ab8bba08f6fbac82d9d3fb8dc08ae6259378dae0a86c03419a18760f39763c1e441a511c50eee25954bece5ef98ec8f79609dbe342b53d7b9f636411cfdc0abba7f2095f061f9358efc54e43e045785f2ac2fb4319bb73fc1bc03dbdf6229ebe6b86a8af42e77b13cf388bdddb726ddae1c3e9e3c311678c08eefa12cf7c6af43bb1cf97f077dfe870bbe9796f7ee2e55b6a37787f2a22f6b3e263488bdbf98c7ec433afc0eee9ef626c19e3dc34d676d26fb2f9bb15e09e5e7388b71ee738bc1dcde73f8f11f1c14df9b5990f579ce1ec6febc039ca1983417eea82df455e1368eba26379129bdf88e86b88fcf5e7f255827bfa5e4b378de3c5beeba2bf9eebe324d7e1e418defe1f2bfcb5a28d6a03f229c6e16d7d720cf4c921faeb125f59a4b59737e117cb184abc7e1c19d722bd3dc033619fe2f09f21f6ebd5e1bf1d4928df910e6e1ac78b3d2f789f2863009089efdd9d21ce6a5f0aeeed3239aed0fb5e5cf9783b18d94d52669d7cb20ff1c92ee66577b13293f2d4c027af382bf574706ff3bf59f84285bfabbe2bc7e6efbd5811311e3f4751964ce2d6592a93f0870c275e7f88f061757165a05b21b1679d895bc755b9e8e04b77a42f5d7eee74c608a04ba29f04ceb3cee0fdf58c513e1e441b361abc3b1abc4baf62fd5401b8b7f9dff2880f5b7c379678fb6d63791e846f248fc8fd30e3800c79e019bd8e275e3fcc78478613763a5c6fd98aa4358178fbee137c694e245e3fcc449eb7e9def7332611af1f6612e018e25ce7c3f1c99501f62c66ff16b627961f86f31aed278c269e3ed609befa120f4faa677c9e2103ec4dcc74993e037b0767f0f5ec19e2dc54bf1e81b5f7ecdfe25d7a9de6d3a3690e472767f9b0c577e25cd553c13d958bef9b9021ce45f5eb11d8073863067846af620c7835b8b76538a989c3250d5d93a695efd3a37c5f9ae21cd36bc07d0d8027fac1e05cd38c3980737a15e7706e07f7340dd13f9fcb7f3f14dcd7a82a73c67e200d7e7626b341b1746caa4fc7a67a75ec445f7ee3e1799fd5b4d81ed21349112920ab48367356d0deed1c32938c25fdc86c5248569232fb5f63edeb0afb3fe74e3c175ff6219971be617e6ad6ead87f7ab2642bc97afbd322e71c9d59f64d85fda8c87e9f624cb2bfa92403482ec35e61ffb6c4c62927a5a4842c266dd9b91922f5b1ecef02fb8d12067a53469524eeaa920415aed4feafc8feacd2fe900a59613f9f603f29b3ff2fb79f2db1ef27db57fad522d29fccb3fff3a2ccb1932d25abedbb7cfbef550c6f912d76d537e3656981fdd4ffcd4c1bb38c49b7c27e22085d65df97320967b1bfd730498b98f493ec6795f6339a9ba5b6d2ac24eb586a55f35e6eff5b96663ea74c2ee302a5e716db9a5e14539e9d1b2a7d36d3c5ff9548759408a5bed64d194e35ac91cdbc94c7572989ff71e81819eac09cc431fa33ca2ccfb35c92cd7c9c33ab30a89ec7aa3994ebb7c3f7603230665ee4ccd0e26ecf72e09670dddd0eb9e0da1937bc56d39bb501249bb9673bc4c95a2c62295e163b3d4d250b356bd6c8a182fae9b764f4b369b45969a4df79af84bda75e00b558e3e72d0076fc56be6dd5a683c6733613be9489e6cfcc385bf022f684fe3add7eabc04e8c66688afdadb09cee5b554a36878a519b154ed5a6375e06b1e289c88a8779eaf3aba576cc8b6319e50554279a0bb780b2597faa4d0c35c6d2621dad1abcb7252ada619b8758c59d2eabfbda138b5a5ed87576a31db74d2bcb3ff5cb8f6bcacba91e2ba76452c74a2a435652f5d25d91e2b71cb1caa97e345f6e39d13f720e1b20ba1e4f068cc11a3206eba75bd7e96f2b194a81fdae3a87d4cddedb6f8ce40436429430be081885352514e6500a1b4ba42235ebfaa4a20221c8b56485d3a07a9ae9e4949b8e795bfb28a8892a77d398adacaa6ad796b1c726641619654f8c1e67d9c3847decdf0aecf78b5857943e878ddc6896823be2f47e119b593a53d1d7cfac94d5e68cd56e602cac2b19c6781d09e339545f5b48d480d9387f65688a5786ba58356ba95bcdea61c8ad7491eb63c8ad75911b60c86d74911bcaaa0d9bbf9c9f966ae33a5dc4bfc6d8df2eb333b386f50757dbdfcb9c34b1ab4bdb84ab4b3b565d3289cc75a42611564d1ac9ca8e3e6c2f13d25f74edf0a26b8c0177d0046e82695b475d6d6b8a89bc9ba6c8cd30913be98adc1c13395353e4161870674de096b22acd9425bde34d67284671d47b1274a6a053c2dde4ae041b12c69601abb2ad6445436d306d56755bb6d6b2e26992eee2c963966c7192c54327313a4b78c08ba8075244f1e4c08aa88dac88a892f7c434c75f445df1226a8b957f560acabf1d06be7b0ac0db63b4f44a012d1d649acb4cfa72a39a3bdb7ee64c908c63bf9630afba8bb992ddd3d4844721d617547fa9bfa9d09690ca125bd37b47f30cfc2aacb5a1810e6625e3e15dce9fda889ba52fab58e685c12a624799c6d196977a07b55adedd30e46c5de44e18728e2e722686dc5f17b9b30c990e7a69405715d72c1d9b4db34b73a6fda8848de20aaba6561b4fad0b66a406a4c04875c5c007a600bc9b0c9cf24a83ac74ba55dd65d68ff50ee719b57ede61fc00d66616d86f17807f899945ff107e401ceb365866dd58c7b413f13b1054531e9288f51acaac977e629875ea8169c3304d6de889e9f01e29d0e12ccc8aeca96b4576c7c41e9e02b17bc9c0a9bb6544f46517fc3ffb4f15f00638786f4cf29112c91f9c115192bc0f46f85eba84f7c59047e922f793d92336f63b222df6285e88cd043b5b34b569762ffe40e2c44654ed8a88188b99f6b59849419f2f21450984e6c4b66da365b68d8decc6017353fdb9a0015211660cc7326348cb15eb98c9a451efc8c94d711e4b3d58dc60663d1bb334e32496e67599198b616972b02a3b5eb7caf69721d32a3b41a2ab39545769d4673dd60c5549270f4f2757661a98dfe1e06a350dcecc0ec52b66516f0ede54fb5a49d632555d0ea6fff3ed77caed348a3c2d7e72c68046d776f4779289f3475e1df666d5616402d5c164aeb00a3040a649b43f4f433fab8c06a8b36426996e232f64d5f020f698b2e4946e097bb5841cccfa594e1886ca6861a04c1a3ab3400370e3f6b29ae3c08330e0299ac08365c0b48e4fd5ade34364c8d4dad0e064dd1ed6504cece9ba620fc32cea0c8945fddb52b3a87b60e03325e03b226ae07b62556156223a1243ab8763c0f9b23a46878763593441a6fd3f0d67a2cecc0256fb335963e85a834cbbae97d8ffa20d761ff0fe4afb0d27605445ce119852ccd6558a9158b9cd9194dbcf8ae5b61706beaf047c62861af828acece6cacaae3f715a45da2d59c6db36af35cc6423cf4c16adbd9afb5368c955b072cd2487d8bd8643ed6ba5fd76266b074ad96ff4dfb4a4a9ad5529d3d198fcfbc9e4af07e49f0e245449710c66b7f697d82d4bd16e8d9581d38ecf3c82747ce8ecb37ac7270fa36d818c36eaba1c67775f68cf75357b7f165380a2685fb930450de438895cd96c0aa38c5467878c8e16686c7b85273a339fa5ed4652ea74bce8720f7fc74bfc9177bc1612daf1ca25f13b5ea9901eeb608dc78cea228951b5548cea041932ad0b05585d589c545d9828d33936b3b5aa5a750eaf51331936ad79fa1dfe25761e33fca37f36f5363001cd4a958cbd2d6a14e8fb4b387315d498d66585ba9e093d964d8052f2599590d789425627d22939562f2661ad7691a4d5beb5a65aabbdb74c65d9946679b5aa6c1e434887da16cbd496cdbb0e4ea0f053296727368754c18c6a2137aa8ee9ee64513be854b222fb3935bcf0f7de161da1d1fed278c6f70ac63ccd5f011bf7624abe942979baf38929fa3e5803b04cd20028f5aa276355a8445285fe56ac425330b10fd4157b2a26f67289d81b6aa9893d0d032f95804faead063e5d064e0d33dd9f496784380303a6bdba2add4d3a3329c6094b7c23c5c56cac20c67f85ecc97afbef52fbd9120691c996b389885d15296762dcae9470db4491db591805ab34b9cd970153f53c2811e0183377b365c02d994543fa5f749b19f5fed71c8cf64a09ed172bd2be2f56cd57eb56f3b918f21a5de4fd30e4b5bac8fb63c8eb7491e7c9906921ae9714220d5a5729c4f918f8c112f07c45f00558c53c44669bbadbb7a34127d5193eb97e8d02bb6752c92c4fa6ad084e9b5be8f18f14b3481367d0ac52cf0fc0e4dc2093d3593d4fd725d03e4501f3a1d114a7d9ad904aaa0b31ea0f9550bf4591fa4518f86112f0cf15c10b30be0e97f1d5264eb916b27076f7697ffba90a8f8b316936caa4a1b76eb9a9a4b304a3f40809a55beba9515a8865e24859269a11d18cef6153369539fc0af8caff35ac1957a7b10893e0289904d4b24d8e760ca627d92d28c628dd24a1f465454a976216f9685d8bbc0c13fb1899d1acaf26760926f6b1ba621f2843a6bd8ee308d2ebd84c92e9752cc7d2391e4be784a4d229c598daa2cbd40aac804f9414f0a8066a055c86819f2401dfa008be12033f5902fe8822f82a0cfc14097887866ae00761e0a74ac00b15c1cb31f0d324e0e728825760e0a74bc0af5204afc494fc0c5d255f8d897da644ec168dd4c45e83897d96aed86b25c8d92c023c9d6b57fcd14f6a6b57e866b589ad0da45b91c9d6acc44b1f7329ad93950b6da1cf9589a4d094afc7b4e93c89367dac58090ec6c0cf9780cf5754d54330f0ad12f0e314c13760e01748c09b3456033f142bcc0b350bf3300cf82222e90bf661dab992d531da9d2f629bda94b17f95b18dc58ad8c47501d37dd7e12426aee92e49995c7bcbb94e97da0ad5cf7eaa22f5e198d417cba4a626833a71dd7eb33394748621b2b8c24cd293f7ba7b2ac9b511d3814b243a70aba2821d8165fa524d1d38526667d97a9812a376168b23cd67ce7bbaab5931d39415295e657559c236791bb3c934aada9cac98fd3e4a56dcb46f7d3941fad657d8ffd7a3222bf5ad37613a7ba54467072adaada331f0ab24e07315c18fc1c0af96806f52043f56064ebb35748b4cad6ecd7198d8d74ac4eed3444deccd98d8d7e98a7dbc0c99be7f7d22e627868bfc044cd16fc0149dee20af3e88dc82d9cfed9af6f3440c989e7c2d0d9f9a17758939de9b058aeddf49980add2c51a1331455e8640cfc1609f8d38ae0a760857d2b56d8b72555d8a762da7abba6b69e8601dfa1097c3aa645776aaae71918f05d9ac067ca8069d9d313d2fd417c14402588ef2c4c0bef9168e1cf4dd5b4f06c1938b592f4cc0b2d2b790e26f6bd12b15b345313fb5c0cfc3e09f85045f0f3b09a793f56331f48aa669e8fa9e38344622de9f2d085f67f7412854e4f2f25d379e84a89dd93a4bfac62a30dda8757d1ddad98140fc9a4681e9522c7fe7b0571a6379c0093e465b80093e161990ccdb80c03ecff97b0fe34fd669dfd77f2125c8849f0884c823aa02ce83214dae35549ed224c7d1f95a86f8de66aea7b31a6be8f61eafb7852ea7b0966f4764a8c5e86a2d1bb1463e80909430f2832741906fea404fc7d45f06d18f853b2b26da1067e3956b64f6365fb4c52657b05561d9e8d659a72536c9aaec4a4782eb669ea9f42d3741526c3f3b14cd3c0149aa6ab31095e88679af665e9a985cc5f83a9ef8b12f57d5e517dafc5d4f7254c7d5f4e4a7dafc328a32730e874f4aec7d87955c2cefc966aecdc80b1f31ac6ceeb49b173239689372499b8553113db31eadfd4a4fe264ceab724523768a526f5cd18f56f63d4bf9314f5b7609978579289eb1433712b06fe9e04fc6945f0db30f0f725e0df2b82df8ed1ff0146ff8749d17f07a69c1f9118cdda8014376b7762527c2c93c26dd67253d8acdd85c9f0894c06d1ac0d4a61b3763726c1a73209ea12b7591bc7e64c562ac6dddc8329f0671205ded15a4d8177600afc39a6c05f24a5c0f76299f8529289816dd432711f06fe9504fc0c45f0fb65e0b4b8e8a19f3aedc20398d4df48a4aed1564dea0765e0d43df22dd1748f3c8489fd9d44ec3e8a623f8c91fdbdac6ed1588ed89175f9f6abab58ecdb526677ca59e0a9b380aa90cd594e27cea6eecee2db02fb69215b96bb8cdd0bbb594016f319c5fe6c46512cdc5d4f9cfd7d33d98cbe737a4f269b4d2ae4cbb997b32715ecad22802c9fb32ce173af7096533540f611ac807e9014d070c5027a1403ff5102be4811fc31193835463f61c6e8e7a48cd1e358267e9131d44e2d133b31f05f25e0998ae04fc8c06965fd2d116314c375fda404389b6d7b583d13c855b7054aed04f2ef32bea413c8f4bcd1d813c8fab26213c84f61baf4a7acb629ead2d33270da44fca5db443c8321ffad8bfc2cd63efc9388fec7309acfc9f43f933e2cae16fdd7d9b02bb6e6ff9bb0e6ffc734bf570ccdd7db564c5e12cf63ca433791d0529e1730e5b12c3de57911aba6f4a0707f35bdb3bd5a357d09933ac3927489686b399a0db48ad89a09d96a9b4cd65dca540c8c7a1993a3864c0ebae1871afe2b187e4dcdd2791503ae25139cea0fdd08379ff5099793f14c8969bf6c99724fec3559ca542f6a4bf4627a0735bd781dcb561d4dbedec0a4ae2b91bab0a39ad46f6252d7c30a438459385d636f38a24ab6dec252ae2f4b993a0e9ca3eab2a3e7da6447377f9966d7ad42a2ba80e66d4c820632095a4b2598ccfe55c956ca3b0388e4d647bd83c9d250264bfb0465a97af0898a4cef628ad748a2789b765353bcf7b00c37d6ac2eef63c04d34813fc0809b6a027f88f1dc4cc2f336459e3fc2c09b4bc097755203ff18a3a48526259fc880a9f5699908708c71d5a73260da48b7b290216d6b2b9921ed6718ed6d24b48feaac46fbe75826da629968975426bec032d15e92898d8a99f81203ef2001bfae8b1af857986276949953ba187f2681dba114b2eeba30e4596477d6e095f1bfbdd1f699ecce697efab06d1ee82fc2e456b068fc4c6698dde5ce8e7f8a2edc5d45bcb1f1221dea97729ad8e2a839cf64c6bc5031b2f16b8c8bdd645cd01d3be19e6a4e87d56d60dda5c76b9984a5c45d31ebc847658e87906bbfadba42e11b4c613a4914e66f456dfc16ab52995895ea9c5495fa0ecb441749263215b5fe7baca4bbca4a9a2e48947b5be7713f2d5de141072ace563cb1ca342be6afbbb3685cc743ebeab5b706ac649a21bcb1dedf2a995e554a6ad16226e14ae0cb75b057f281ae8a7efd20638f1ebdd3cdd23f7ae7470cbc7b0ac07f9281533de961e96f59fb3306de3305e0bfc8c0e9595a5916c10fa8f227d0034fe0572c81dd5394c06f58c1f64a41c1fe8e81f74e01f81f18789f1480ff89d9b9be123bf77337353bf71706de4f02be5d11fc6f8c966c092dcf3cfdf408155afec124cf91483eb1bb9ae4ff62e0fd25e00d14c1ff9381533760aeae1b905888d80324621fa728b62503674715a5c07a4530f04112704b113c03a365b0ac7fac484b0d193855f22129a8fb3531f0a12900af85d1324c42cbf38ab4d4c60a748f14684b1d0c7ccf1480d7c568192ea1a5460f355aea61e023641e4845f0fa18f8480978a522780319383b1748d76a35c4c41e25d34345b11b61aa325aa22aaa11f18d31c9c7c89a6645c99b60928f4d819237c524cf93f9b27aaa49de0c031f2701dfa108de1ca3657c0a5a8a1698e41324926fc85293bc25063e51025e4711bc15063e49024ecf3e53016f8d81ef2d6b4015256f8381ef23011fa828795b0c7cb24ccf15c1db61aa38250535b43dd6f44f4d41d3df01a3659a8496c98ab47494806777b66f2dbadf68ba76c6994d9cc38806d8a98b435ed576c7992ef15765b3d340db56c94722a9cdb0f1ea50384adaf736a91d7ad975dffe7f87fd7f83de04db0c7aa64507f1c9a5898522ec8629c02c8902b4e8a5a6009d30f07c09f82845f04c0c7cb604bc5411bc3356e9e6a4a0d275c1c0f795826fdc4b05bc2b46cb5c092da728d2d20d3374fb490c5d44d1d075c724df5f22f9ad8a92f7c0c0e749c0df5704ef8981cf978d147aab816761e00b24e0398ae0bb63057a80a4406b2816682f4cf28512c9f31525ef8d812f9280dfa908de47064efddc0532af3ff57dd2b0b0e52c74632d9b6b7263b6d5773eed8ba5be58963a5d7d2122799cf935fa8d4a7afd302a97c8868b8a5466631a569882be510e26799144f2b71525ef8f8117cb7ad27dd4c07331f0a512f0e18ae00330f06512f03314c107cac0e9e6652556027104e7e0c08330a90f9448fd725f35a907636ab83c056a380493bc543672c956937c28660d56c8ac813d8806b6a790cddd2d61f37b85d1bde4e8750dfba484cdf8b9c7b1b9b3ce4e9077b9ddcf54b124c33059cb64b23a27ecae8c5a2f9594f6c0525a294ba9317baf8ce5b1c4e680da48da379ec17e568da4d9132bee5592e26e90a356dcc3b18c1d24cb58674f71c72e487f7c61011161032a991f81c9578e358dcec4b788a9d38b9f1b89515f21a13e4f91fabd30f04a09f8c4fe6ae0a330de56cb78ebe529d7c9ace42a89b3f8aa9c951d2d41ba1ea38245a38b186851eade92762bbb0ad7a33189d76055cc3d704e56d954d21e83a5bd16d332e7f4e085293909612c96fa3a59ea74404e97bfd24d77e24941df2b27aa71bd79983ceb65f2b400f214454b642a0f784a7e51f0384c8a836552d40752d06073573754d21c8f55c9432455f2f95cb52a3901cbd0065986b2e2544979d5a3854d6380d6f3a35197b3089c55bc2d56a1622246c5a1122ab628523109eb1e1d9682eed1de3270aa1f875b9a3346fb60626f4c81d8933137cd1129f0014dc13839529793a93264fafe5189f4cf63c4f94ec31470934401e70f5253c0e918f8d112f0af15c16760641fa34bf64c8cec6335c99e85011fa7099c2f03a651999ba33ff8a2328fb79289ca9c8d15e80992025d3658ad40e760967b4b7ccbed1c48de937781c55a78670422222a698ca51ba5e9c44ec23390d53a33fb62d29e8875a4f25987dd7ff27232e3a4b998853c290516723fac8c4f9694f10ec532de1f033f4502de64881af83cac484e951589b34e49a888d8c0a01434eef47e31ebe53a7d3d95229a8f65f43499f74031a30b30f0d365032645f00330f03324e01b14c11762e067caba7e8ae08bb06a7196a45aa84e641460929f2d91fc7d45c91763e0e748c0b386aa812fc1c0cf95806f52042fc4eadc79d8a82a5e9d5bc22789a97154af77455866cf9764f67bc5cc1663e05b25e0d729822fc5c02f9080b718a606be0c03bf50023e5411bc0403bf48023e5711fc40ac9b77b16e376f3926f625b2d25414bb1403bf54026e776194c05760e09749c0272b829761e0db24e0ab14c157621dd5cbb18eea15497554576166e94aac7726f69d13bdc6e45d2a0761695f254bbb11715d2a4e2f96c6c29426d52f2cc78aee6a49d10ddf53ade82ab06c5d23cb162d3ab77bbe9614f856c17b3bc16a36be1293e45a9924f47674b41fa792ce6aac3f715d0abad96bb0b2ba5e5256a72896d55a193815e68644069a7d71e075182537a68092f51825db65bda0116a941c8c599e9b30cb73735296e710acbdba45b7bdda80790f6ed5f41e1c8a897c9baec88761257abba4443b8c542bd1c331f03b644dac22f8464cd1ef4c81a21f8155cfbb34abe79198d477a740eaa330beef918ddd14abe7260c7c87043c5fb1308fc6c0ef95806fdf4b0dfc180cfc3e09f8198ae0c762e0f74bc00b15c18fc3c01f90805f3c4a0d7c3306fea06cd4a9087e3c06fe904c5b14c14fc0c01f960d67c6a8816fc1fa2e8fc8fa2ef454f312c9ac2b0d055ecd6302e8d2ee6467834fc4ecc5a3127b6129da8b9324e0d974f624ad91e270abb7e422c51f937410b2bb1169a47822a93d6ee3d5aa4d9c3ffd9c3fb591e8f09d963c3a3c9174b0e8f093b1427f22058dc42918f89329f0c19d8ad5cca7243573519e5acd3c0dab994fcb6aa61bcb21fc58454c612bf9a4b03b47ef4e22af65ea5c0ac6414edda543cc121647a3567b4fc7247e061b68fa27b8a710ea635bc676375449f90cac33fd2cd6997e2ea9cef49998363d9f02fb7416a64d2fc81c6ee3d5b4e96cac4ffda26e9ffa1c8c939752c0c9b918272f4b38d939418d93f330c95f49816d381f93fc5589e41bf656937c2b26f96b12c955d7995e8049febaccaa4d5593fc42aca6be81d5d43793aaa917610cbd9502862ec6187a5bc250de0c35862ec1ace83b322bda9a786333e1eea4ce34b3dfb7a562572fc5647917f36ccd8cb61d2ae95c8695d67b2928ad6d18f8fb12f01a8ae09763e01f48c06b2b825f81817f2801afa9087e25a6c41f4994b85bb19a125f8529cec732c5a19d7059ac9b6cc3d2d4c5ba5d8d11f08984808d8bd508b8062bba4f535074d762e09fa500fc3a8c96cf25b4d459a646cbf598f9ff0233ff5f2665fe6fc032f19524130315337123d697fa5ab72fb51d13fb1b99934251ec9b30f06f25e09f2b82df8c55f8ef64159e9667ec56cb1d83c0e34254aaf72d9844df63a39149fc58237a621efd8146144fb265526d356fc588fe41427456891ad1b761caf7a3aef2dd2e43a6efff64e9f9f3efc04ae2e74480639da38571f18b2e17776145f8aba408f3158bf06e0cfc3709f87645f07b30b27f97a97d0be23ff9c7393da78c2ff8709c7807135557c00e4c8a3f6452d013ce46b328497f2f600efbbb842d3a5295e15e8ce63f2534ef58ae46f37d3270da8ff94bd69051efdcdfd4cd46a1e81fee63f32748dd6b4882f763b9f947921ba2989b07b066f95fac59fe2fa966f9414c2de8f0ba8a5a50d6c6b2755ce20c8ca5d16e61bfa817ab98b95d57f07622d773ac147d3240b9e57808a3da8a54a5fa6745aa1fc66c5624a269b31ec1ec774644cf7e3f8af15143c2c7aa52353e1ec3c06b4ac0bf56047f1cd3b75a327d1be931864bd80fa56431a1c7882d674310b19df30a66a656b0f90f3aba763cacebec6188e302777a32f098b3c5647574f8e2ddaedad55a151ddd89a9516d5d357a0253a33a9a6af424366aa91bd1f7f33f2503a7d355f52274f3f0aae0d20416e2093c8de9697d899e6696a9e9e933989e3690e96917e2fafafdf36ece9a4db13934fd777fa07d22ee497dbb886731091bca24a4bc94f09eb37baa4585528acf6184379210be5591f0e731f0c612f0b92bd5c05fc0c09bc85465951af88b5853dd348234d5cd22c934d52f61b5b5790a6aebcb18432d6465abc8d02b98e42d2592ff67ff5191fc554cf25612c9b71fa426f96b18786b09789d7235f0d731f03612f07314c1dfc0c0db4ac01b54a881bf8981b793803faf28f95b98616b2f336c52458f75541186de41865e3b6ad8b39330d1ef60347594d0f4b66219bc8b81ef26011f5aa906fe1ec652a744ba1cb1ce14c2803335813fc0e8e82ca1a383221d1f62e05d24e0172b827f84817795807fae08fe3106de4d029eb35a0dfc13ac30bbcbea52258977a6b13b804cfe1c63e730af859e9391837daaf1a75811f59014d128c522fa0c2ba29eb222723615f31f2cad9299cfb1ce5016d619da3da9ced01758be7ac9f2455b896ca57c7c89e1f7c67ad732c55349f12b2cc53eb2145b494b6a0a53c80aee99717f5153c8af3149faca24a10834d04ed5607f234925bbbb7d6bcd20e90bfecbb7efa88f403de8af5f849e1be92583a9b1344c2f3b42c3f45a56c959acf4b1f0bc6f65e5436f7322f44031af487b4f39a2f6d60ecf44aa144d4dbc68bec314a0bf4c011a1212dde0a6d87e4857483999520d36fd1eb384b9124bf8c8216a96f0072c53036499a2254537775cc61b07311706a3f6dca3c65432f92326c740991c8d517285ef4b25ed9f301fd5205d1fd5cfd8106f700a06a7bfc8c0d9191b11fd2d597ec5946ea844e94ed9a0a674bf61e0c324e01b0e5503ff1dd3a43d34fbd27fc880a969de3311606aea10e03f65c099f6edf04480ffc325fe0ba36284ac52518d776359ca920c8dff1b4b7324de4caaafd8fc07a36c2f4dcafec5c41f25139feeb5e63dc4cebf4d895a6fe73fac628c96548c3e87a9550c12918053e33546d3616ec980692ec76ad6b808069c272b0c6a2a4577d3dd0358a7383264e9b3233b64c3c4c3d58aa30696b9f1b2ccb991286e88993b2084877a8ae30d9d619c4a766b62124dc0fa026201b66cad4df20bc16b61724c8cd517e89f9245e8b5b1b42761265370e0040624b3fcbc0e96e6deb234e18e86f2b493db57b1ae4c0aaabffba4a0af520fab49932535e9f78d6a35a93e26f9941448de40064edf9f9a88718bb1e6b4a104389b1e0499d6919e13b7509ec4486f5a841e2eeacd7f3f649c371d19e7c54a1d1be73592f146777ab616a69137e73dc7a3308bedba53623f99c6563239fbcf5624c1e98c5893c05266673266bb56c979b2f261ac37c66cd42c998da2abbce691e10cb994a18fb0071be36c4607107a30cb4032d2be9b69ff37cdfe7f38c9066f8eb419725aba79dcf5b98024b33773134ce27c99c41da412e7d8ff0d657fe7d872399d8baad2aa48d5143384b3650ef963d40c61332ccb73b02e85dc7f0b4f0bafdad950c96e732cbbfb4ab2bb5131bb2db00eed5ccd0e6d4b197027fb76bf4480ffc0815b6174ec2f9b4f3e568d8ed658e9cf93957e26215173e89c66ed77dfc83b9a706b6d154d688349371f0b1d71aa1b3dd1a990a53a9b99ae5266a6fd86dd71facee206cfd9028d7ea322615bac7016c866b5150ba71d067e80049c1ca706de1eab080b352b4207ac222cd2ac081d313a0a24744cdfac46c76e98aa2d96a9da6045551bc7e3e7caf9933236ea28654ae8f4bf2bc0bff506a09d309a964868daa1a835991878a1047cfef16ae09d31952cd254c92e587fbc58b33fde55064c6f974ae60f5ebd6aef9fdbccfbe24395f9836e5802cb2409546c3eed93775b2d99a79240774cef4b647a2f3650934f50a8c5c0f590a54c07c707ea7ad07b62c8cb7591b330e4525de4ddb1f1e88a148c477b61855ca6e96ceb8df1b152978f3e18f22a5de4be18f241bac8fd30e4725de46c0cb94217390743aed445ee8f29dd6a4da5cbc5445ea32bf20019329d945d9b88c8cd71e08198c8eb74451e84b1bc5e93e5c198c807eb8a3c04433e4417792886bc41177918867ca82ef21e98ce1da6a9737b62221fae2bf2704ce7366aeadc080cf8084de091181747ea72b117d6673d4ab3cf3a0aeb106c4a41876034c6c7d1ba7c8cc1f83846938fb132e04cfbf6d8448063ccdee6614a779ca6d28dc380376b028fc74aef78ddd29b8095de099aa537112bbd2d9aa5370923f9444d92f7c6804fd204de072bbd93754b6f32567aa76896de14acf44ed52cbda918c9a769923c0d033e5d13783a567a67e896de0c0972363d79c73a90989ca39acd17c4af27e3a26b9129a6cccd4f677fb0f7c57cd414b6c39de3b98a3d73756622653116676c26561667e996c52c19f26ef6edd98988bc0d07cec7f4f21c4dbd9c8d019fab093c07abfbe769d6fd7db1d23b5fb7f4e6625c6cd5e4623f0cf8024de0fd312e2ed4e5621e867c912ef27c8c8c8b35c95880015fa2097c0036d4ba5473a8b51093f8324d891761126fd394b80093f8724d891763125fa129f1120cf84a4de0428c8aab34a928c224be5a53e2626c68784d0a86864b313aaed5a4631946c7759a74946026ee7a5d13772046f40d29207a3926f68dba629762626f4f81d82b30b16fd215bb0c43be5917792546c82d2920641526f6adba621f8421dfa68b5c8e55f2db352b7905067c87267025067ca726f06a0cf82e4de03518f0dd9ac06b31e07b3481d7c98069a8f48e88fee2a0f518f8bd29003f58064e175adc67ffd059022e4da0079ec02198f4f7a740fa0d98797a2005e6e950cc883ca86b440ec3901fd2453e5c86cc4e058948029f6484c43a6d08d3954752a42b4760baf2680a74e5484cfac75224fd5198f48fa740fa4d18f8ce14801f8dd9c52734ede23198d44fa640ea63b15af4946e2d3a0e437e5a17793386fc8c2ef2f198297c3605a6f0044cece774c5de8279de9fd7f4bc9f8889fc82aec82761c82fea229f2c43ee68dfbe940819e7e0c0a7602cbfacc9f2a998d6bd9202ad3b4d029ebdbb7d6bcd2726fdfa736cb4b1ec8d3cb28f2d623ffb4ad7d915807fe5db5fd06d5aca9897def942bc1fdb77ffaa9dab0c1f33d974098795c99ee9a5dd9421bbd1850439b2e9b5085dc9928a14b1352ca7638dcaeb9a8dca1958fd7b43b7fe9d8989fca6a6c8676122bfa52bf2d918f2dbbac8e760c8efe8229f8b21bfab8b7c1e5680ef6916e0f998c8efeb8abc1543fe4017f9028c8c0f35c9b81013f9235d912fc21ac08f351bc08bb106f013cd06f0128c8b4f75b9b854864c5bcbcf12113946e8fd65589bfd790adaec6d98d45f684a7d3926f5972990fa0aac14bfd22dc52b31c5fb5a53f1aec244fe4657e4ab3191bfd514f91a4ce4ef7445be1643fe5e17f93a4ced7e4881da5d8f81ff9802f01b304e7ed2e5e4464cec9f5320f6761938f502fc9288f6c5382ae126ac39fc55b339bc1903fe4d13f816ac047fd72dc15b31e43f74916fc374e3cf14e8c6ed18f85f2900bf03e3e46f5d4eeec4c4fe270562df85d5977f35ebcbdd98d4ffa540ea7b30707a8e9f2ef80eac24ad0ccd92bc17438ee822df871192910242eec7c06ba400fc018c939aba9c3c88895d2b05623f84d59bda197af5e6614cea3a2990fa110cbc6e0ac01fc54ab29e6e493e8621d7d7457e1cebac3648a41863745677624c374c01d34f60e08d5200fe244676635db29fc2c46e9202b19fc62a6453cd0af90cc647335d3e9ec5f8689e023e9ec3c05ba400fc798c9396ba9cbc8089dd2a0562bf88e9486b4d1d7949064ca71ada6454f5d6e7506fbdc4d1ee4f8ffad891f45ec6cc565b4db3f50ae6416b9708700c0fdaab98c4ed35257e0d1b3e75480438c6f0e9754cc73beaeaf81b18f26ebac86f62c89d7491dfc290337591dfc6903beb22bf832177d1457e1753baae9a4af71e2672375d91dfc790bbeb227f8099ec1e2930d91f62e03d5300fe11c649962e271f63c8bbeb227f8211d22b05847c8ae9756f4dbdfe0ce3a38f2e1f9f63c87d7591bfc098ee9702a6bfc4c4ced615fb2b6c0a252791328c3185f235c647ff14f0f10d2675aea6d4df62440fd025fa3b19325dab38301191b7e1c0df63b57090662dfc01031eac09fca30c38d3be1d9208708cb58a3f61a53754b7f47ec6b818a6c9c52f18177b6872f12b06bca726f06f18c9c37549fe1d23798426c97f60b668640a6cd19f181f7be9f2f117c6c7284d3efec66cd1684d5bf48f0c982e1e1b9308708cc563ff62248fd525f93f8ce43c4d92e9e482948b719a5c583260aaa0e3351bbf08063c41133843064c6f276654dd1e51fca992404d3c811ab20468059f94820a5e1303df3b05e0b564e054b1f7d155ecda3264fafe644d1f4a1d197077fb764a22c0310ecba98b014fd504ae87913c4d97e4fa3264ea019baee9016b80893c4357e48658659c99a2cad8489600dd597856229cc4d859b8b10c986dfbae69aa9b60a5385bb3149b62a53847b7149b6122efab297273cc6cccd5341b2d302ef6d3e5a225c6c5fe9a5cb4c2b898a7c9456b0c78be26701b0c788126705bacf40ed02dbd7658e92dd42cbdf698b958a4692e3a60ed5481663bd511eb692c4e414f63370c7c490ac03b61e0852900cfc4c08b5200de19032f4e017817acd62cd5ad355db18abe4cb3a277c3442ed115b93b867ca02e720f8c8ce59a64f4c4804b3581b3302e56e872b1bb0439bbb77d6bcd26d57386d23cbe424dedbca43219c3968f07b6ba6c65065d5dd6b64aee1291015b4fd60bb30aab5260157a63857f906ee1f7c1c42e4f81d87d31f08a1480f7c31aeb4acdc63a5b064cf76b5c9d08f0581c38072bc535baa5d85f864cdd736b35dd73b998c8eb74451e8019caf59a867220c6c5c19a5c0cc2b83844978bc1982a6fd054e5211817876a72311493f8304d8987613de5c3357bca7bc88033eddb8d8900c798ddd813538b2374d56238e65d3d52d3bb3a02033e4a13782406bc4913782fcc0575748a5c50a3b0a6ea98143455a331f06353003e06d3bfe374f56f2c66a2376b9ae83cac921faf59c9c761c02768028fc748dea24bf204cc9971a2a633632226f249ba224fc22ae3c929aa8c7b63fee05334fdc1fb60929f9a22c9276306f0344d0338053321a7a7c0844cc5c0cf4801f8344c0fcfd4d5c3e9987d3a4bd33ecdc0ccc8d99a666426067c8e26f02c8ce4737549cec7ecd3799af6693626f2f9ba22cf913934fad8b7d64c923e87c668fb2d7ae4fcfa245c195b1376655cc05c19adaae42b76ea9813635fcc105c98024330172bf08b740b7c3facbdb858b3bdd81f1be65c92213944318fddba9b0f8d21f4d8cf223295d01368d732fe9773f7523f76dce224fbf769f62f654ccbe813f9210cb2231be8dbb0cca92eae645a5ba078d6ed3c2c9797ca72794c3497e28054a7ceac60ff9ec46a13cd4db1fd8953672645df1c67d724e790d4992c17f478c935eced7e3c3f45ec64e1b17652345f14d7cb9e8b40df57930343a2c7b396db5c173154c8297408faf99e63e394289e803d1f63fa324c9f608a4e9ee891e90e5b2b6d3bb5d0d68d7256e64e6ef3c93256fe7e69dd6ff1e7a9d2a705582eb7c97239d2974bc8b993cff1acc456b03cfaa5f49610fc25565d815fa9e4ec002c6797cb72b65742e537dad6a14256e74b98e6ea979cfb8b4ade166279bb4296b7c1bebc4d61a5b38ce78cdeadabb69c2cc27272a52c275bd26ccfdc6ff2ec6b296ba3e991d0e3597bbd82a590b89643eef05cd0b66435eb0540ab47fb3ca9b36d0518eb57c9581f9d50dd98ccd8a80884555b8ce5ef6a59fe261bd42afaf420960ccd95d3432d6149979083593d945b92644a750996eb6b64b91e1133d7b8a433595ee8d152953c8fa235a64f977086aad68be44bb310cbd7b5b27ceda7dcb39bc57ef1f6ed6408ceb3e9513b506eb70774f4a1d3134ca69c8b303eae93f1b14f5ada6cd3ad793196e7ebb17e8a9a0e081d9e6cffb68401c17256d508959c2dc57276832c677b20399bcdea6729ef9b38a35f316a99c36b716195d23033465986e5e846598ec61bb4bea254e93b05765e4b59eb9dba9c966039dd2ecbe970fb36714be1cd41017be6e48e7232919572391b0d2db15bdcf529ccd58158ae6e4a644ce04d17f61066b35228b7dfa5f570698cd6cf8b91ba9c2dc77276b32c6763e35acec44605b80d8d35664dd652966279bc4596c722c33dea4adb3a520fdc52de639ec334a0245a1b5333464ca6155d81f174ab8ca7d9d536f288cd903e0f65180fb7c9781883da303a425a6cbf24eac66456eab15b1c3952aa4b7a2596c3db65399ca498c37d9946972125521df95d85e5f70e597e671ad4ec8a24dadf54307010c6c09da96a971ddb361ab4cae673558ee5ea2e59ae2628eaf138360bb192f776ab5b872bb0bcde8d7928544b703c7ba3aa36faed6be2b82af9abc4f2778f2c7f7b6af41c2b59cb5b66e7af988ff3f05ce5577957254fabb13ced502b33bf7e8e66fe046a55e28d52ccb6946bb0fcdd9bc88c00d67b1cc7fc43057cec56b51f9f5cef31f93ef25a2c97f761a5a8323276723e81f70cdd5fe9bc4eec3e70aafac7ebb0fcdd2fcb5f3712dbf7498f333121e57a4cca07627b30554a615652a560b2861d8ce5fa4159aefba216243f1a23002d6171d46b4f7b38aba5bdebe466310ec1e47e4826f7b0b89661129b01a53ed652dbb297db79a3710ef1ad43aa6cc0062c3f0f636382d875848ef9a7b37e7285a4a794c88c09ed5f16a730878762397c24114f807c066412d3bdd8d63c9db3208761797c14f3c325d25e2592cb74b7598763397d4c96d3890995a67f3ecba98722dfd559ae1bb1dc3e2ecbeddcb8e56ad6ff6f7a66e0088c8d9d3236a6a06d8698152f8e8e8a688bb84a22a723a3e3bd4ae617fc37957c1f89e5fb092cbe21b17ccbe301d29bb7a3b0bc3d29cbdb50c57ec06a36c2716679a83f42bc45c71979ac6720f74dc2df5472b309cbcd53b2dc0cd2cc8d13a9e01cb5e7bc9faa52391acbc7d3c9470dc41bfda4d3ae1e83e5ef9944da4ba81d3087b3d8536714ee788b6473045ebdc37f498d461e8be5f459594e07fa723a96e5c0f1f3557ac641b82588958b64f5f1382c17cf25320fae12a1179cb67f3396e7e76579cef5e5793690c98d3a8663f258795b8862a9e4e0782c072f60b16b89b55b63d938968e937268845c1a5aa913b09cbc28cb491fe21da30f881e892aae936d392a88df7f97eab1ea164cea9712f1ef242ab5c08ead4fb191dda36255f2772296bf9765f91ba298bf990c7125b37ea395ea4b32fe9093b0bcbc22cb4b4edcbcb88cfa4bcbf537a4ce569d8c49ff2a66ab9293def10d14391b4bb059a85833182a393805cbc16bb21cf454d4a5b19cd5aa332ec9e8caa998acaf27d2324086745b8664d93e0dcbc11bb21cec1f653bf5f396c23f9d7ce4426a18391d63e4cd44661caace0925d6e74e6efc9ebc9d3803cbe55b98f746de2310ebc156b2bb32892653b965339c5e5d564757c9ed99586edf96e5b6b3af4cfd39a236c49128553a771626df3b89f8d2aaea5c55ebecea5fd528e174ebded9586edfc562a613b59ab3e25a4d93d14de760f97a4f96afee71b4cc8d8e2d623582f6bb53d31b3d1793f37d999ce3482263b8293c3abdc4bea3366e09c1230dd3b5cee53c2c9f1f601ead44f52c319b161f4d2537e763b9f93091d993aa368c965bd576c87d2fb1e7a9ed7b6fc5f2f8513273602abea074e9e405580e3f4e24ce37feace5beb69528616fcfb2735f20ed999b990fba10cbd927b29cf5427b1478544d199f494ed52cc64598c49f62be2cb5b19298bb5b11b58925bca5492c9ecbc448fd622ccf9f6131502aa32b272a5b45f654588d4bb03c7d9e5c84b9fedc1cb496a9d1d54bb13c7e9148b40366fd693924da02a4d6d25f86e5e74b6c054ea22384ea8ac4db86e5e82b2cb63d51fb173b0620115ba21e3f9a7c3b7039c6c3d7321e7ac4ad8de6fac15760927e83792d13d51bafe4ab9817c35d596042fbaec4f2f22dd696a9d527c73b53f5d7aaa3c97ce29ca86a7e547f1596e7ef64799e4faad777057949b43726be5161e56a8c95ef13e9618a14557c576ece303d488d65b906cbd90f89cc15abdad5eaf4905c8be5f4c744fccad85cb1a3e383c9c038f993d956fa954a0eaec372f053e2710b344df5b805277fd8f35495d0f558fe7e565bed523512a8a41a47a73760b9fa058b808edd76cfe2239faa5a3596cdf297c7b085eeb7d3581cae336e8fbdf74772edc88d58ae7f4da4b6c9d34f6e1627d9d1c1762c07bf61da186b7440e52bb47f5967335f35fe171b1fc4b721b836d6b6ffb32cbad7d938f6a613bbbc923141fb18d934ec1cccb5f68bb6ccfd3cadb8fb9ca6bec29688d6eefc681b4cf77a8b8df0bb4d58ad0871fef4b428d9e28878abd8c79bf36529435e0234b41f2b77675f0b3aeaef171d258b9df0e2e542d61be907fa233077f1f3b400d9aadfb26af31c092c9be97e94e95d2da77fd052cde5a51ac9cea679ec9da436c597e24f9a5a865c875a576116d67999ec0ec054eefbb2e87987d3d970420c2b1c7785b35163dcd4602d95a5d6970188be5b5c38189024836bcb54cc710b951327b87b7e77426ad78ce4d052f8cb2455f5ec1b1a993989b7bcd40e5490e5a12069db0097a4bf4d924471c3a33bdb06bbb4fc6392167a5ae842569b9dca86efcd1406dadeaee1d2f6af49dadab22a57ce3aecd389b3c582e8ce6104568482c28f2d97c2ff4c52d8c4be119ea389cc625180023696a3b1e6d34262c1b6d7710923350c12d68255d5852487b89b1f8499b826f55de22c93c4b5069a46e711bd157612f321acf4cce48781beac152e7d1193f43593e81d05a4013774e1e56af6b43014a42d222e6919e9220dc6f58a7183184d8481b4e1235cd26a98b670de2661bcfdb7b3057b617439bc63e9c2405c560397b89ae9b27074ffb375f6bf6476cddd5b360cf46d5ae5d257cb247d74dbfcaa0d43b8bbc267807e5c6d93e4b505ba378ec1d0958105bc33328b5d57d99de5d54cf7c244e1035d5c0aeb98a4b03e682ca679a6e1c240d3c7ed5d9aea9aa4a92ea0c9dd512a0c144d6fe55254cf24458d982513aec63266bba6b169df42d68a8681ac0ecb5cb2ea9b24ab16d3a78a5075296a3474c96960929c36f6cdb4a85bc8ef83a5e67e35d330da2b9bcea717c340e0751d5c021b9a24b00eb056544c1aed120682ce69ea12d4c874a75510e488e01f1ccde13db0625242c232c21c5ee2d2d7d8247d2d41bfcb4f5c05aba205cc1954667fbe3e14d43dbda74b5d13d31d094acc58e22ec80f87765502ebd5345dd64bec421b06820a9bbb04353349503b02873deb58ae5747873774894221ab8a61ac88f48f20b1b94912e9f981903c3aff44779ca7d5713577fb847b18dea2864b650b935436e4364de8db7ade579b4d2a42d2ef3f05d8b696e6c791e23c24113313068a5e1fee52d42a5d9ed849bc3b21c28185772c4cc3a6df6bbbc4b536495c27d06eceb6310b79f762d7f28c9dd2cda5b38d69cf2cd443b829fa68e6ab8555381c7db80d60deb3ad49f21a005d74f7bd7676640f05516024dace24513414610ab366cb7dc738e5d9af97b394c240d8a2884b587b9384d503d5129ed9160692e60f7449ea6092a49a2ce9c5ec85705073c630979a8ea62d93d01f773591234418887a1ee8d06e2689a26104de6dc168707255774f1848fb1bf8f53b9924ad3181b117058caca2d04d836c05f13d99e9eaeb3b5117dec57f8521ebeb978280bccea62ba7338ecc634987d94fb1b3a64b5a17f3836f7fe50c03459f8f7229ea6aba428e6301c3ab59e2eeb9a1ee39b2156cff9355a120ee63a05bdd4ceb96b0648ecdaa0c8b6e816510dd4d52d4c84351388338e9fa3841560fd315512c8e58c960c2ed8c1e0e2a624f93c43525f8dce45822f61c0e036585c0e39a65ba623acb68a907a288cd1eb94ec270f4f0d78109dcdd4d92d51c74229c1380fcf346615a039737c8a5ad9749da689ca1dbe71ac7c2849d38b130d0b473a94b536f9334b561344db72d95e3dd3a882d270fbff93f8e4d82d4aee903f76f2092fc226835d6f1e5da74004fb57315f79d3996d0b37c9bf6010227799f1a60f97556d2210259717b6959092fcac9520e6ecf4a72716356426ef42ccd39ff2c8515ab594a1db8ac84c7f3594a23b4aca4ec4996d2146c969213272ba1b597594a0b0eb394a7ea6432e3cb7db2aa44eb66c59cdfca92c65f6649e39ab290c8f2ac1881f959481059569c408caca4026bb3925c65919582f9e8ac385b3164a1fb0f642103f22c74fe282be6cc409642bf2f0b2cf8cff24dc564c5ed6c67294657662538e2c942624fbcf63cd67ac12cc4819615a373971577594056c2130d594984ed6679d6a725b602372b012fbe1737b1756fee0e3cb043e1ee9c934377e0e95be3fff7e6383974739c7e9484fd791fdbe975679b9e84a7e53d800c6257674f245abf1cab435ff3a5d9a14a9a337945730ea713bd6959ea753dfded76896428993e776730259f637ad0e2a52dd616700bc9503b1bc6e86c648aceb6192e9dfd8344e7b050d23906d0991b243afb8792ce3d41651f10243a7343496709a0736090e81c104a3a37033a070589ce81a1a4732ba0737090e81c144a3aef05740e09129d834349e75b80cea141a2734828e9fc16d0392c1da320da01da754641332d97be3d4cd2d79825ed3a1efdeea12adb4584803ceaf412e4ed998eaabc14adcc507c3ae6196c8ece06a6e8ec0a74717890e81c1a4a3a5b003a470489ce41a1a4f31150d9470689ce81a1a4f34640e75e41a2734828e924a0b28f0a129d834349e747403b470789cefea1a4b318d0392648740e08259d27033ac70689cedc50d2b91ed0996792ce5624f688dc5bd10799a3b2a9292aef03a3f17141a1724028a9ec036680c60785cadc5052f902d0ca0926a96cc9a95cc2430dfc67b539a23be780e59a23b2a62922bb0122270685c8fe2124b22b2072525088cc092191df8271cfde2689ec48dca0a744833fe9fbe5ecddf0f9d5e7824ed13e2689ed40e2f531b173ad0d56fc9d96a90e12d0d7c926696d4ac474457ffbef35449cbd479fa561c2c2585b5e1b1038c52481cda3042e642f38404ed8609a48343671713b20716a3a2a770efb3b91f0e030dbcc2980d669266985b1e32a2b48c24cee60d0204dafcef1108433da08d53645657fd0fb9c61924a11293e38fd33e6c6f4f041a08733d341ded0f493f78729f29e04e4cd32499e580b818d7bbc95d8e8149ab16a3c1a3437f94122734808c91c03c89c1d2432078690cc1180cc394122d3a0f7d21899a30099fb06894c831e4c6364ee01c89c1b24320dc65e1a2373382073bf209169d093698ccca180ccfd834466184738c30099f38244e6d01092391690393f48640e0b21997980cc0526c974764828e14496d81f513f107d3d7cfeca6ec425ed8074f87ef0c9086fe465f8fce7e701fd5b58bd6e34078a3a7f8dce3d763545e53ae0465b6492ca5e9cca52fba55276159bda4cb7ffa79361cea484b3cfc02c9247f62163983fbd883f83ef8db6a52a314b79735394ff03282f304979dbb886a06a5ca6c1b6dd58ecdba3c01c2c0e1aa106db7763843e06085d1234420d3658c608bd1b105a1834420dfa938c117a2f20b428688486317ef87e406871d00835e88b3746e84380d0a54123d460b7c918a1db01a1cb8246a841ff9231426f028496048d50837e796384de0a083d3068841af4cd1b23f42e40e8729384d663842e63bb2e3a3b7cd2f058835e2663911db42c0465a5d5e91a8101af46c7e9e798a2f264304e5f6192ca468c4a7f7c261598ee1cba2e840eba9e400bcb4c52e74608d3e0ffb447081babc66703cbb7d2248174675667efe0d1f6dfce0edfee3ec4331899f4fff0519809747095490a457cb0f06c3a2b279cf51593489ed4f71ede553f7b81257d0799a4b527f13b8c0b1898bbdbee18fb7fda66d3452b2bd9bed2b1a6dac2389f5e009aa0729364bbdbe3e6ee42919a2d017d1526e9136bcce11201f9aed2618e5edf091aa54a93748a057ffd91c9dfb02f5d391e344dabd3d1494f2c18218c167200a0724d3a2c642e19927e0b698c3e0b58c8b526e9db8d541d2ece26ce890eebd969058e33a3882dad2a60da5acce05698d5cc6da6a89d05a85d57bd953cec410a7f834abe3e9d5df9125b88396050893b380c76e58d39382680aefcc12669153171394c4b299da5f64bf4d489e5d197d2d4a61bb3a47780ced121a6abfb6876b6d54a7ea28fb314d5593d49fb9ae29c23e7f4a8f0f5336b80eabec1b4f343f433578821171bb9875d1bcf00141e9a0e0a87ec72143e0b283ccc2485f0d8a955c47b28559a4834d672770656f1f07491e89e1f55419c73f6c2bd8dc9d3401337a6c38d81cde9543de5c760a88b313abb836ecf1141a2d3e88ed7c6e89c06e83c3248741add66d4189de3c1b0f1a820d169745f4c637496013a3705894ea3bbb61aa3f32440e7d141a2d3e8ee07c6e8bc02d0794c90e834babdbd313a1f03741e1b243a8dc6041ba3f33d40e77141a2d3e8f6f6c6e8fc13d0b9b93a1dc2ded040839e4b63f145bb8361e5f1e9a012d34c2f950683568d517927d0ca138242e580505259138c84b60485cadc5052f914d0ca134d52d99df8a38cfcbb643a8b4fc5b1d7e22a8b3d3268498d8522bc0c883e292c441b9cc33446f41640f4c9268976cff8cbd98502153e262e7da754a76d85700b43b97bc754a089a7a6834ab8ddf864328d4c20d39930c5f647ebd2e1993746e516a095a799a4d29941874b5316f27d86c7f07974076abc7d2db2210a4368211b02324f374966fcdddaa1f870b776830d0f3dc4d408ad1dc158e90c93b48a10af4abbbda66dbb4a8b6eb4976a4c630f06d49e19546a8d0e4b8d517b0330066799ee2ee5b1c6a880ede25e690384ff54dfa680beb34dd2d7224e7749e474a1c905a8d911535bf08111fd39e6db7795c3918d91696c35ef4ca093e70689cc30ee79340d90795e90c80ce36e32930099e70789cc30ee75b41720736b90c80ce32e32530199170489cc30ee71341990796190c80ce3ee31c30099170589cc30ee6d940dc8bc3848648671d7989180cc4b82446618f734da039079a949323349d581a4da5eb006db77637bc12e03bef8cbd2a1ab584c883fc4c6a0153516603302e8eab6209169b07d3717870cc8bcdcb4034ecc12ed3a1bf8f405f45d6192beb680beaa5ba45030f71cdf304f00bf0708bdd224a1cd00a1bbd68ab6d301855755a77df4cfa187f1e0ba66a0e5be3a486486f1e0bad680cc6b824466180fae6b0cc8bc36486486f1e0ba2680cceb824466180faeab0dc8bc3e486486f1e0ba3a80cc1b82446618b791aa09c8bc31486486f1e0ba5a80cced4122338c07d7b50164de142432c318faba1b20f3e6740c2207ef7283c8e9c4a5f0169314aa1d6367501b8d2d72b91c840fde1a6cdfba41cb69ccb74e40f0d66d26e995ed6d98787ca6c1f1bab1f0c2ab811dbddd24b56227d85cb26bee04fb04300177a4c3cbdedfb694bbceaaa0f7017d779aa40f6e2fe52e6581ab318c2f6231a683a78116fdae74b4e889f530c3e82d9a01a8bc3b5db33e421f27b256dc9df1a111ecd3f82aa1b06e7d3605107a4f3aec632e3b9821cdf6d158fcfa1fc03eee30499fd8c123f1f8f5304616ed06e8bc3748740e0d259d8d019df70589ce41a1a4f33e602bef0f129d034349e73640e70341a2734828e9fc0bd0f96090e80ce7d1886f003a1f0a129dfd4349e74240e7c341a2734028e93c06d0f94890e8cc0d259de580ce474d0f2be9d87cbafd3705a1a70ad0cf0bd8eb0733b75b097b632613cd59306d8cd04253844e04843e960e97071da73b9b9e38c3c922329e7de43013e611fa7f80cac74d52d9988823ead23e3edf668abc2301793b4d92d79e247afc92f7581b839313ff9922750f30eff34410493518ee6a8cd45fc18ccf934124d5a0bbd818a9bf00529f0a22a906c35f8d91fa2320f5e920926ab0076a8cd43980d4678248aac1705863a44e01a43e1b44520d061f1a23752220f5b920926a303cd618a96301a9cf9b24b537f1ee12bb84ada07484d99751bb8c05cec0a3e9c584314c785758ce7a0b20fd0593a40f2055e7e5bdf14b63edbf57d8ffd17f3b19a17e8162b6f52415762aa183d7b52c89e5b6eeaf2145ecad7c36361313d4060b616f5385904bdc4278311d9e02cc8fe50d8e08e38ab971409f5f3249a51beb3438fdbe82bea6e83b02cc96be6c923ebd7d3cc318cef822a0f695a052db3f94d47e0aece7ab26a9555bbe60f46c386316742b20f3b5209119c635c71700325f0f1299615c737c2220f38d209119c628d2f301996f0689cc30ae393e0c90f95690c80ce39ae3c301996f0789cc30ae392e0464be132432c3b8e6b80890f96e90c80ce39ae30b0199ef0589cc30ae39be0290f97e3a3c48892d980de3b18f278371fa0726a94cfc5403839d7563ab42f24080c487266914ab94546247c3b819ff7aa0971f058dd0301e15711820f4e3a0111ac64df95700423f091aa1613c32a20c10fa69d0080de3e6fce580d0cf824668188f8e580308fd3c6884867193fe6580d02f824668188f902801847e193442c3b859ff7240e8574123348c0b6f4a01a15f9b1f70d260b175f68754d035f6cb4bc0821b774feff08ddbbb1297c66f4cd298497437ba32d83019dbe86a0008acf9d624bd0d39bdcee1cda52c90c1c12e21064f1cae698a3802f4f23b93c4ed4ebc618d952c16691607a0618a95ac92abc48318d45463d1200380e7e97b938477420d4162a13606bb53c6c86d05c8fd21c8e48651739b03727f0c32b906bb59c6c86d03c8fd29c8e486f124edd680dc9f834cae4137a031727b00727f0932b9069dd6c6c8ed0ac8fd35c8e41af4b71a23b72720f73793e4eaed8e1b468b3b018cc77e4f871b86ee2e31852d6d58ee5b8a93677f56ce520cf31e1339c425f48f74ebaa7c4d5f3e73c7d098956206b782185d82becd14b5438019f8d324b562510e7555a77d518eb1aade0254f5bf826b450dc60018a3f65540eddf26a96d446279b52acc5157cf147511602fff3149dd08e2f56bd16a4cd73539006399f651a168064aed84bc4b781da14b887071d35da6dc65bd8564d75bd2bb03e8f4bf260b26de56dbe13f32bd17d0f1ffd2d170d17da1779df3699702faa8833d005daab1842e325fc534d631194635f30f53d436025d2acb24b56d24d4c6b29843437910755340672448741a3d9ccd189d83009d1941a2d3e8a48b313a878216bd4690e8cc0d259dfb033a6b06894ea31156c6e83c16d0592b48740e0c259de7023a6b0789ce41a1a4f35640679d20d139389474be01e8ac1b243a878492cecf019df54cd24987c833b9e3846e1657c6009c339cc247db6ec4a5adbe49daba92aa47608d23eb08dd676f35113ea569f6e7858446f8cd64fa58c808a6bea8344c88180ba8dc1d90dc201d553df1739dc2b83aaa1308f36d18243a878692cea680ce4641a2735028e97c0054f6c641a2736028e9bc06d0d92448740e09259dff003a9b0689cec1a1a4f35d4067b320d1693484cc189d8b009dcd8344673897911f07e86c11243a7343496705a0b3a5493abb313a27d92f4d27746aad907f4a45f62f345bc88f0c1ec376775ecedf1c6f5f8b6c7083cb7c8c0d49b300cdad4cd21c6f0f67af3d35b8a8dcd8c0f341e014691d142a8daecf3746e5283011d72628541addbfd918959f00ad6c6b924a18704bcfc6abb49958650b432dea1ce29c9257c86c69513afc4bc62c6625b098ed4c12da9488adda73ab23bca6ab29026b0017487b9304f660048e630034f78eee1532187ad8601e8bc10b40eb6e8cea9640573b98a4ba0bf1063b16131a5b4fe1bc8bcc07d87f53c20ba2d77c1b7439eb78198d687acdd48671a701fbdad124c5ce7e90f06cd16ad357638d553ba0afbb996ff79db924a741dad5a86c0ba8ec549d5d280867f4803763bb940e07553cd32495cd41172acf7e4045a5b1a0f96c6b8ee5a1ee36ed0d5afdcee6eda443e21ad64da267342f6673eee2a53475a18c69e43a50b9bb9824b3312033cdeb928c91370b90d7351de1ddc91d1614c655c917824ade2da8d48673c1f7ed406bbb9b6e8426b37c3b4dcf4a161542cfb2a3fed1f2746cb665ac116a0648ec918e46085b63e4ed140d0ee5894b3783cade33486486f1c4a55b0099594122338c272e5d0ac8dc3d486486f1c4a5ab0099bd824466184f5c3a1d90d93b486486715c7e0920b34f90c80ce3894b5b00997d834466184f5c3a0d90d92f486486f1c4a57b0099d94122338c272eed0064e69824b303a9ba04c11d3a4e23c5f620b380c18be9b8302f3af889b8b4f64f87b73db183ac0c76918c517926d0d0dcea9db870a0a8e3d82895c6a67f0f01131703d211fba112301bc6c3ac8e07ba3930688486f130ab1300a18382466818c3668f01840e0e1aa1613cccea5840e890a0111ac6c3ac8e03840e0d1aa1613ccc6a33207458d0080de3f669870342f7081aa1613cccea2840e89e4123348c87596d02840e0f1aa1613cccea6840e808d3013593b877a9c4fe84861fd297ddbd3d8d9137d41479dd894bdec87444230d497f3492b1b88e2700797b55a7bb639afdc98184ee105269d6dd718e292a5f01ee8e51e9d0c361bb5054dceb400f479b244fec199b6b8bb7ebd0f73b6840c6989fa458c67ce7f453672f246759cb6afbc3255ca062b648806ee613be30adfa4017c7a67b035e9540c2f0353763808dcc4b477393d8645a18633946012d1d178c6da265276f18a4769b296aff065a3a3e1debd6bc1ba5559044170c1a9fb1343637f403d0de09e959c64adbfbb42f6335364fb90eb4f8134d12d85e52fdb18efb6852ce085d6fb6e2efb40c91fa10a8f8938248aa41e78631529f06a4ee1d44520d3a898d91ba1d90ba4f104935d83b3546ea5d80d4c94124d5e094b031525f04a44ea9de2e7fd8036aba80367f6a753aebf2d8207431a7d26055ef618aca8d402ba7056947eea1260369cc1d0309764c9a1e243a878592ceb980ce1941a2b37f28e99c092afbcc20d1991b4a3a0f0574ce0a129d034249e7d980cefc20d16934a6d3189dd7023a670789ce41a1a4f37940e79c20d16974018c313a3f0674ee1b243a878492ce7aa0a334371d8bb3f0d51adef9a430ae74bb00e8e67e4122338c2bdd6e0264ee1f2432c3b8d7c79980cc794122338c7b7d9c07c89c1f2432c3b8d7c7d180cc054122338c7b7d9c0ec83c20486486313e640d20736190c80ce35e1f6b01998b82446618f7faa80464160489cc30eef5b11a90b93848034aa307e4191b50760103ca2541a2d3e8f18dc6e81c0fe82c0c129d4677e13446e74850d98b8244a7d1cebb313a97033a8b8344a7d123c88cd17902a0736990e834ba9782313a2f04742e0b129d46cf6a3546e70380ce9220d1697493536374be0de83c3048741a3dabd5189d3f013a979ba4b319a77390fdff0a9e78015b7c10f65309b61397c2d2ea0c34744577961d18a3d2d8e2825340a0e10a93543622ee0298d1f6cff4c54a12e683460e04d49599a4aeabc42eca97658db54156d8a9ae6477f4ed34056af73545f236602d57868164836e3a63245f0a485e1506920d5a5a6324478083e4a030906c702ac418c95f014d2e0f03c90627ef8c913c12687245184836384c3046f270407265184836186d628ce4c980e4d54139fed9a8c3dad840e21e6079d704854aa3de556354f6025ab93628541af5fb1ba3f239a095eb4c52d99178cf252e22eb085dd539cdfea090d0e3cc706a0d0e198c11bb1210bbde24b1993e624bc166feee9644b166fbc31838b100d07b70504c80d12561c634f51140e52141a1d2e8fa2563544e010dd386a050693468dc18955f03ad3cb43a5dd8dedd180dda4a63bb310e047ed8c34c52d9995139c97e692623acc87e690dffdc6d8eaaed8477638eeebac425f870930477f7b5f5956cb8f9ffc70ffb0d300a1bd3b135667f363998e6ad318dd9d48dc0101c51bd07fa84bdffd90b68e29126a96c11874a9153a3b357d91153961374988e3249637d76b392e5bdd8061a6dbfbe9ed0d3b4c3d7dc7402cdcda6740c2da1ee399bb2ce2279641fd68257d82f3acfa6b3a1e77a42c7f2a36d094acc7aef9b9ba27709a8da47a76337d14ab2ccfeb982a8ed786bb0536f6ccfdb6f81e61e930eab8975ea5dab69b0f1316635bf01edf8b126696c68df4ce7416505c4d9e46a12d34c5aedc367399b00fd3b2e3887431a5c3a6bac2f7919d0c1cdc1391cd26027c8d85e76eb4183737c3aac624ed43216b261a3bb87721a4637c62af733a0729f607a2d1d252c8f255cc43e2d60af1e0cb6a49ec97ea55bff1b8cdd5b6a8accbd01995bd211849bc3fe76ae33ed1f4b18b5610e7fdc0c283cd124850d00850e0b613ec0792e68584e0ace313c061b16638edf8b40c372723aa8cc8931ff18ee88faf741653ec52495d4973c99593f0a50c69a978a10ba6a3b00c24e4d47033290ec6aab380e05149e968ed80c5a7dc7b1f1f26a26c464fb9325ac6b338dac8dea227556ac0a75cbbc0f20f6f474d9c522b28638b330f98c09e1fd4e8b8e2e3445e553a0b53e233d8795e5a47f46c6dc5a3740df9926e9eb40fc33879434e7a09d49f64846e69c18cc6caac128f79ac62a389856382b1ddbaa509d9cc0c89c6aff5dc422dadcd38a2a42dd215f0d74f4ece01c5416c6fde60e000dcf39e9381773e02e642b8f05e49d1b9cd333c2e871ac09aaf479c1393dc3605363ecf48c23c118fbfc747480e851b7693fbbcd9826fe0e2af5d674ec9d90e8f9e9c34c566c63a7a7b70515fb8220d139349474d607745e18243a078592ce7b4065bf2848740e0c259d97023a2f0e129d434249e77780ce4b8244e7e050d2f922a0f3d220d1d93f9474ce03745e16243a078492ce4d80ce6d41a2d3e8d6bbc6e85c05e8bc3c1da3a06a39c1da986b633f40df15e9f2573a20f2b3d4c33ca4fc039079657a74b11adc6c7f98a2af0370685c15a4dd0c879a74f91aabda59602ae2ea20d1392c9474ce02745e13243afb8792ce7d4065bf3648741a3d4fc8189dab009dd70589ce01a1a4f30c40e7f541a2736028e9bc0ad0794390e81c144a3a9f0474de18243a078792cef7019ddb8344e79050d2f92fa0f3269374d661004e741bfd8c22872fc8a51671e9ba39383b668771e7ab6e60d2ec169354f69450e95d413b96d01d3056b07fd3c0d6d50c721c128969906c63f197e380dede9a9e1d317277a198a21940576f0bca864d4627288c55fbdb4183737b50a8343a39618cca1ac0c9714750a8343a31618cca278056de19142a8d861b18a3725fa09577a527d47f58fa9b1a63f4d5079a7877ba56d43a31e9741dcf5216ec5f4ec2bc6ee76cd0d9b92738fb570d3547a5b148f4bd8136ee3049654b42b710a1dded42fed12c822d9937b8ced158b5ae0374f2dea0ee1664b4ed36b65bd04ad039bf2fa8d41aedac1ba3f65aa0b5f79ba4b60b688c963087da584661196b8e2613ef42e729ac615a66c3a56dc5b8b1c6ea4ea0bd0fa423a623b16553034c9e4361acb9fa1ae8eb834122338cabd0be07643e1424320d1ea0608ccc7700990f07894c835b2f1a23f32b40e6234122d3e0ca346364be05c87c3448641a3c9cce18996f03321f0b129961dc3cf95540e6e34122d36057de18996f0232770689cc30ba45fa804efb134122d3e06ebfc6c8ec0bc87c32187ba41b6cc78dedf6db01f8dd9f3249635ba2be90ca602537b658653fa0974f078d508315dd18a1fb03429f091aa1060795c6089d08087d3668841a1c581a23741a20f4b9a0116ad021678cd0e980d0e78346a841a79c31426703425f081aa1060799c608dd1310fa62d0080de31adf9180d0978246a8c18ebd3142f70284be1c34420d3ae98c113a1e10fa4ab00f4632d8e61b3b18a908c48cbc6a92dee6a4ea990074a7b87c46ebf274c430198b17690774f4b5e078988686725af86f40e6eb4122338cd3c2ff0232df081299619c16fe1190f96690c80ce3b4f05f80ccb782446618a785bf0364be1d2432c3382dfc0320f39d209119c669e1af0099ef0689cc304e0b7f0dc87c2f486486715a3802463eef0789cc304e0bd700647e109c43380deaa5b1c1e43650c93f4cc70941e2f810baa49a2ea2a622d3b32ed6c520368c6bd833c19cfb47a697c7c45f36e89cc462b019327612cb2440e4c74121d2a0461a23b22120f2139344766244e6f39c4f23c56432714ff4a31b462ee42e38eae55c62ffdb811e6f5f8b6cc84273e41a3bc481a208723f4dc74aa3aa8ee344d61a197484185b69740a68ed3f33496d6709b58e9398925746f666bb7fac8a39f111c679ce0ca0bb9f07e778a6303aedf200955fa4a39b2fba53cef2d85dab0bd51134585fa667bb80c13e039086e583c6ec260176f3ab206d503e2c94218a3dc148e9eb20d169740c6f8cced680ce6f8244e7a050d2b913343cdf0689ce81a1a4f35640e77741a2734828e9ac0b2afbf741a2737028e9fc1268e70f41a2339c8b0fca009d3f06894ea38bb68cd1792ea0f3a720d1991b4a3a37003a7f4eb76769b67d7536e41dc760e86f457c53d4556c14ef6c836a745d9cb1834af60303cc5f4c524b6fa6136753e8f00d241b030dfc3548157a582883b63b80ced06f41a2d3683492313a1b023a7f0f129d834249e7bda0b2ff11243a078692cecb009d7f0689ce21a1a4f34f40e75f41a2737028e97c0dd0f97790e80ce772acf980ce7f8244a7d1eda78cd17934a0f3df20d1991b4a3a0f0274fe6792cea6441cf440975da5fd8c5563f39116e869d2e35eaa6df3e8f0871c1c0ee6262d93547620de7972cac36a425756fa67cbfd873619a4d5d88eb1b980d688495a5bfa682d89117a10c6930a3a03cf504650880c630cc7e540236ba4c36662b1455e8d34b886cd1895af80e6a7a6492a7bf8747231a91a489878c8a141ad35e6f1ac0daa7f2d9354e754699e30222b14bcf1a3edf7cbd9860146ad6f5f53f48f00f4d73649bf38e8642859c81ed0c40bd8bef269eaab1a0b447c81b814d63149a19835121a5cc1b49676afc673f28a76b126ed40d0a4d5adce6100845b18ca65d97980ca7ae96cd24a781f8176f597300d95dbd6091c609a0d79a07d5dc2fa1506b576ac29aab3814dad6f926af5ad828685720fd08e40771b048dd030063a740284360c1aa161dc03b43920b451d0080de31ea0ad00a18d83466818f7006d0b086d123442c3b807683b4068d3a0111a4647f57fc0e9d22c688486710fd00ca0a1cd83466818a7f5ea01425b048dd030ee01da1410da321dae93e4cee334d8de1bf3ab3e00ac69aba0526b743b7563d43e465c6a5ba7c32b95d89e386174f09d08b4b48d492a133f75c6605fd4d8a9333381c7a9ad491ac5f2ed21bb54b4c9cfa042b7ab5e37b30355ca4835e808e96a8acaa3408bde3e585da4dc50fa3e8b8185ec103442c3e8fb5c0a08ed183442c3e8fb2c0084ee163442c3e8fb5c0c08ed143442c3e8fb5c0208cd0c1aa161f47d1601423b078dd030fa3ee70342bb048dd030fa3e170042bb068dd030fa3e0f0084760b1aa161f47d2e0484763749686322d688ec3a1baee51397bc1e26c9cb24ba874719d44d6387472d02a3f89ed5e910f10683191c1d9d638aca66c0359765924a780e5729f3c453a032a68b6972d019abee1b80addcdd24896d3c243a3b29cb262ec21db1fc01b09ebdd2e12e1e60ffb7eb343eed8175ec9d8ea9b5aa8d4f22936b061b1e63d44e06d4f631496d37e28d522eb55f5dca962350ea76f508e51980e6bee9d66039b9f9cc1cd050f16206b7c26c7bbfcd14b503417bdf2f1db6b53f5b529366db6aac697a0fb4f4d9d5b98811c22d0ce5d13d8b412b9f6392cad6924a8e536974732163640e06d5ba7f90c80ce3417c430199b94122338c07f1b507640e081299613c88af1f2073603afc4aa2ff493bef85643a710e971024c22476854d337a827ee7a0748ce3315df59369743f466374b600da3a3848741a0def3646e79e80ce2141a2d3e8166dc6e81c062afbd020d1697402ce189df3009dc38244a7d11def8cd1791ca0738f20d169747c648ccef3019d7b06894ea35b031ba3f30e40e7f0ffebee4ec0ab2aae38804fa0b822b86b451451691485ec01f7b04790041282bb862c24104820246c6eb82fd56aab16b7aa7557d0aab52eb5b58a16eb6e51716fc505b1b52e75b76a67e6bec7fb27792f847efdcf3b878fef23ebbbb9f965eebd3367e6cc91c449dd7c95c6f92a701e288993ba35308df303e03c88bf16a4d47ed945e7d7ae9c48574953daaaf93e26017a7088f6d9f56dff352e4fdc1382c88748e21ca292733be02c92c499af92f331b8d88749e2cc53c97927700e97c459a892b33b5cec23247116a8e45c0dad73a424ce6c959c75c0394a1267ae4ace4b8173b4244e9d69310b80734c3a97cdb6bdd089295bb494ec876088592c85325725e5be30ad71a8144a6a22218d7215b4cab16116776d48591befc2fd715c889417f7836b7d3b8c1f7b66ec5bf42d4dc800bcc342d449c8f2cfeb1a332769082ec29da330d8360e4638e343144449dde9c195c4b8933c716dc7e31924d60b80b5244482607ce94cb40f4dbd695f65061f371af746da159edba5212ef8aef526f5411e024fed09522035b6c8bd0072a21448e202581a64034096498124ce44d2206b01b25c0aa4c68a47e702e4242990c4fc1f1ae4090059210592184ca3412e01c8c9522035062d2e02c8c3a5401213aa68907700e4115220897b1ad2209702e49172ca3a69cc4bcb07caa34264ffb86f5977be643ef34e49c36c8210c6d1923089cf6f1ae62cc03c461226b15749c33c0a308f9584a9b1145e35601e270953e303a802308f9784a931317a3260564ac2d498183d1230a748c2d498183d1a30ab246112c73f34cc66c0ac9684a9719b9339805923a71a8bc620f09540592ba70e06f1494e5b64b008c6e553656d975ba8b20ec62bd036eba4816aac83f12a80d64b03d55807e305009d260d54631d8c970074ba34508d75305602688334508d0bfe5f06d019d24035d6c1780a40674a03d55807e359006d9406aab10ec67300da240d54631d8ce70174163b2960a4693535fe148b6301917afbe24afbd6bd8c8647cba8705b7cc4f166cb29d4406c87b4420d5bc272eb6626655fd3be6072d777c4263ed3af67c19e066d740e137677d37e4ff7a880c328333bf62dee802e7daaf338a8c6c98ee320ded412aa4246fc6d742ae34cc7a223e41c21da0e47cbe0a1d41a224728de66a3f619a55d159b114903cc05268fdb4a7bb058bbc33d76ae9cdddd354ec81d0077d5794cca9de0828fa70396f98335d9f6e976dc726db63c26a33931f04b209d2fb72a06b1b5d2fa001fc1e36941988a4359ed8803244eefcbe2eb097c0b43f0b9c2c9c1f97e60f17d034ff313d2394a1a615c71a629b1794de2137c008b7201b4c41343768c5c7e6f85cff46df178a9079f4456dae07373e8189d14626784345cdeb4aed043f0dc3e9989e7861bed473987f9ce4e9d7d1171e3511add6e40778a9ce221d92a9775cd867be32249981a97753503e6a992303526b65403e66992303526b64c05ccd325616a4c6c390230cf9084a931b1e568c03c5312a6c6c49649807996244c8d892d8703e6d9923035cef59400e639923035c6d1cb01f3dc50dbead59b8e8b0f021595a72d45180f41b6f324d55819c27c96d36620f78088d04f25710e55c9390638cf97c449ed69d2388be0ae798124ce1c959c3380f36792387355729e0f9c174ae2cc53c9792d705e248993bafd048df331e0fcb924ce02959c6f00e72f24715293ae689c5f02e7c521961a0c31f12d9ca389dd20a320dafcf81726c177493a57b8b54d0dd0b8b7ebf130a0bc34cca29734b444da853c195ae22fa594fda0462f692df101b8272e964299ab92721718875f2685324725e533d02a2f67526e6b3f28b51fb4d86fabf1879a69bfbdceccf68f9e7ab3c0c730ebfd47faee933de03e7905937157d3712175b18ba5f8756bf53e33adc81eacdaaf00ae8c2d13ac369af328ea01f74a29973b757511ed725f0697fb55522873555216c143e8575228735452ae815679353f67a2ccbf3c79e2c98656147e47b8775e13a6d85c61bbd61a60fc436b99a7c2f0f15a26df56f05c2f3651164fb94f3d9daefad9dd13007f1d221d2a91105d613586db93aef67dcaf8db61f69bebec8b5a7d5fb3c5cf9953bbeeb4b9f28b81f63aa9b4d4b13a8df62eb86b5ecfa4ed07977de789d015feff7a53eb1f46ba3bf4f740cbbd813de8ecaceb14ff4da9f93e83bb911837811ee88d215a293246b78032db891aebbb4b6e541f7daed4b83d13e6fbf65a64cfa0de508b306dc36aa553a0577a93d4fb2bb5c34fbbbfbe0f37809ba5d25247f83c5a7874ddc2a4cd346d732bdd636aaebdf86b7cf4293a8c3bfd567b882a08ee6d58d52cdf829bc4ad4ceedd3cf7187fa79d685c9a6a4d2cdc57ed0f15df91264d03585a5f613368cfb7c9d9995b630db7abe1aebb2444b72bd5b4f2707faf9dcdbde44b59ddae2de0925f9ace0a6e818a7d5fd59d045901fdd7dbc3cccde7848f4dd1427b9fc3e57c47e89d66bade8d22de29699da89be012ff4d88e498b6fb224573a389d952dda3fd7de0097e67883d111173dd1d26bdb04702ec5da1b6eb8b0e926ad72ecdf7d33e703fbd9bc9b9b5896f2f759cff84fbe195bec50622a4e5c12d8116f95b395bf369dc6de118a0bc8749d97f3d28cbeccf740799634aec7bf1117d33b7ff3991d591ef054ff9df85d8853b1e2a69f2e190ba4edbacc69ce2cf00f4de301bf41584efd0d336e8eb0f7cf7859a75c245645d09dee9ed2edd01cff7fb437497babae9fe509555367604ce0724710e51c9b91970fe5e1227b56e2b8df31ee83e3d2889334f25e7d5c0f907499c3a2b147d089c7f94c459a092f349e07c481227756b201a670570fe491267ae4ace5380f361499c392a391b81f39110613a5c9be7464965b11193de91502b102e4bcfcc51b4702cd7feef0697956bdf96db834d37357ea8496c9d2b5931a51530867f94493bc0b48d294d311da7ded6671999be49ba52983e7e4c4a020ef5894f5b19720fb4da3f4ba1a43eed69945f03e5722994d4273d8df271a07c5c0a2575fc4ea31c0ff7cabf3029fb24e9344df4876af473efedd31a3477a31642c8ee89d0d5b3da430ef7cff299617aa6b4765a00a44f86e89976461aad1ba9b4a757e26f0af343d0d26697e602ed53e9bc9bb69de7d4b8797f313c989e0e35048de6e7dd81e6c52e72cdd5b49e3509c267423c90707943f23279c10a40d150bf834bfcd970db50571bb7c748a2406e73a8d6497b0c3d0190cf85bac0b12e66a53fa0e627f960207c3e44b28123ac595b993dfe65ed2bea5e84fbe45fc366ca25bf4b8e8ebd20d8dd72388b7610d0ae909a84481db9d34273e570f1bf2095961aaaa3d1de00adf6c5108f2617f4d8b05629ef0f842f85d913270d7b82d2f2e2f3816f25936f1b68810d49e2469a0b9d3c0a77c897c3b4c1bc76a372cd7c65c0f74a8804adae251ae4a84c3578002ee85725616a8c0d2d03ccd724616a2cec781f60be2e09536361c7fb01f30d49981a0b3bde02986f4ac2d458d8f15ec0fc9b244c8d49583701e6df25616a2cec783360be2509536369fb1580b94a12a6c6d2f62f00e6dbfc105b67cb0dd2b4e5146deaa23fd0be23637b4a627f93b63de5485873f46e7a171c44876af094c4113a6d6b8a3361c1c17b2132d5d727c185f828a22511e443fc68b53450e2e388065a08a0ef4b0325863e68a05900ba461a28f1714403cd06d00fa481121f4a34d01c00fd87345062e898069a0ba0ff9406aa31553013403f94064a0c87d040f706d07f490325869169a00301f42369a0c450320d7410807e2c093447e93db41f0c3d3f09b15021ca18720a65fe504d46f332d862688f9fcaaed1417c20d1d622ed07adf3dfe98c31b55d0e4becce2f6651ee04e1bacf42ee86581b0b25579bd459971a732eaf83b6f979883b67413a9619d2629e9f9a04df1772b73727864268abe7ae8196f96588098eecb593716e7349dc4c32400ba5e5ff3e072df42bb92d546315a3e5d042bf96b467d25095d31d03a017fa8d24ce212a39b707ce6f2571e6abe45c0ef7d1ff48e2cc53c97937707e2789b35025e74670b17f2f89b34025e71a689d3f48e2a4967ba471ce004eb7d84c0c67ae4acec5c099218993bae293c6b91038bb3139e3a982b88fc2447f122da6c1e8de13692c3c80ba33117b9b44be65e04441da32d945d0027fc4c44b36464fbe83825b3a3bc3fed446ff51b48496187bff9a457b28048c7b3069e3158adcc53dc27e53a33d6ea9c152256e4b5e77c04a7f800550b0a439c4a54f8b300d81d6bb5188c751aa87d130fbd246e316d056fac01db5c6068db327b4d88d2571522bc0d03873807313499cd49d3d689c8510f3dc541227350f8ec63919383793c449ddd798c67912706e2e8993ba212f8d733170f694c4492df744e3bc1d38b790c4492da843e37c19387b49e2a4967ba271ae06cede92a24a43556672f48380c896923887a8e4dc1a38b792c499af92f31193e0dc5a12679e4acea5c0b98d24ce42959cdf03e7b692380b5472ae02ceed247166abe4ac02ceed2571e6aae4bc00387790c449dd408dc6d9029c3b3239f7326d57c837f9498f6a7b022ebd20fe7b26b638c71f863faac8be37dbe7795057d037762781ef0501e61f33c1e3f50caa4cf20d83da8e99f44d216f035dfc9da440121734d020b704c83e52208993c734c842b897ee2c05526396d14080ec2b059298394c83bc042077910249cc69a7410e03c85da54012fb9b34c86ef0b0e9270592b897120df25a6891bb498124ee504383ec052db2bf144862b2350d721380dc9d09b98359d7c8bc6d4f526317e856c0dc4312a6c68ef96d80b9271333bea342d746381a1f3b3702e50026e500d3365e34c574cc025e9fba58346a5abef0708814fd84499dd58eba252564ea127a1d1780070ad4d16a0b67007f66883b70d7d729eb5b2d9207ab45f69284498c7cd2300b00736f49981ad7310d00cc819230898f2c1a662660ee2309931873a2610e04cc7d25611223a134cc7d007390244ce2208086b92f600e9684498c88d23007016696244c620c8a86391830b325611223a334cc2cc0cc6162f6351d33ddc7f8bd3d47d9ffeb3d63b5fd7d1bfd815de27690ec771a6c8349c0e632617736519da346fb4d2e8f18b7484d5b8d23dac6a91b036b5e88a561a9c27c7838fa4ef3b46d06f684cb3f9fc919dfebd3ed07127c97065aa47453e02b60f2f5f2bf8dbb5b4ef7a7d9ec15a6fa0d03dc8bf4453eb7850bb93044bc3ed553bced85acb1daf081d00a873029d77f337e9dfb247e01132043a5816aacb2f52580ee270d546395adb701747f69a01ad7c8bf03a0074803d55865eb3d003d501aa8c62a5b1f03e841d2403556887903400f9606aab1cad69b007a8834508d55b6de02d02269a01aab6cad02d0612176559c63ea8c2b40be3eeb98a84986b4f1fc52a01d2e95969a5d4ca37dd02468478498f0e85accb390d92fa5054bde85763a521226b14f4ac35c0d98a324616a0ce3bd0698a3256112ef9934ccd701738c244c623f9486f93460164bc224f6416998cf00e6a1923035ce5f3e0c9863256112c7ef34cce580394e1226710e8986b906300f9384499c3fa2617e0098e3434c16772d534ee376018b81b2844919afa1990a32fe9b521721bab58214c6099039549adee50bd1a11a3c25b1ab4e2b987b3a2c5f98202bcaa9b32ee112b8c4274a03d5b87ce176002d9306aa71f9c255005a2e0d54e3f2856b00749234508dcb176e02d00a69a01a972fdc02a093a5816a5cbe7011801e2e0d54e3f2854b01f40869a01a972f5c06a0474a03d5b87ce10a003d8a09dacf741c7446b3ec65668419ebf3899aed37469fc38ca3227b06f5869a8c4dcb2d3a1606a2473379b1ea6bab4f7f712520a7c4c6f06edf647a4acc6216e25c93403c269d819112fb9269f63db7f534353042a3dc0e624cc7f243c8557e918cfbe1ee448bec4be6dbf7aa36907ca301d02e8f0b91388889aea9b233e9e9adb47b651e701ecfe4ec9384b33ce650626a2d6da53f7899ff014d215007b0503f07d4ca30d998d9edeea19ab3313f83eed194104b103b768fbab2089138d8a4dd3d0f86ae515588a77ad7663335aeff28828bbc3ac48e0bffcb425962949ed646af01d81aa9b0c4f9241aece5005b2b1596782ba0c14e02d8a952618923791aec6880ad930aab72bf5a80ad970aabb183950db0d3a4c212e79d68b01702ec74a9b0c419521aec7900db20155663bad774809d211596b8ea84063b0d6067868e0f24df52bddc075bdc40b7d61f6e06b7277b3dedf105a1eac6103353180e1c6fdfceb3efb9d36e8d455ae7f8b63ad38c8a45b36a4204066991ad1510d96a62f26e613f98e8f76374d37b25f665aeb5c6e7a66870b45d18fbc2253f2b4444353f36a5d76025824de6d1ee981701df6c26dfcea66d798a7a7b1215c0987a628f383ca54dec95c3ddb2594e3455639a4d25b4d03921a6f5524d3777ace0a1b186c74068992d923887aae49c049cad9238b3557296c22cd45c499c392a396701e73c499cb92a392f05cef99238f35472de0a9c0b24715293c2689c4f03e742499c052a39df06ce13247152b3e5699c1b4147e9447efc2811154abe842c4d551368f123370e8cf39ec4e4ed6512e139377a6f081502a1b5cc1321f47672887d1c525de86dc7ead42e126db4fe03dc354f9184a971538cde70cf5c240953e3b6805f41cb3c5512a6c66d01bf05ccd324616adc16f063c03c5d12a6c66d013f01cc3324616adc16f04dc03c5312a6c665e1ef01e6599230356e0b7817609e2d0953e3b6802b3de6c63dda1d7c5487830ff78108178aa832f1f517cdf6f3a38d4b29acf11055f6e371a6debfea78cb7194fdb77e7f8163ecbf649fcfc8e86dcf68a499674fcf7dd61dafda1f7b86fdaa3bb366939565bfe51cd7207ac51a44a69f232db2e62eb171a2a9f13f7dbe7d9d3be76abf04225ea0b2c59364fa9dcd4aede75a8c5b24e17e824b93acb35f75bf71bd5900eb4f323336f14e35a63526e0003363e7da6aa264cb642996999ebb3416dec9f44b33e21fc51764b8d74df26791e957208cb0efd5fa336b302e9ee1ceca29b4f8ef76c7740981e37cdb7267e2ca6d96f8b3afb1c776df91888c64666c1afbdee86f13fd059b6367927a91486646cf0e5f777fd3a8a46766c6e6fefa69f4bf6dadb548249a66666c6dbf16fd3e89cf269426f8c5002dfe67f44a726e87f9bf5e9d3d76b56fb019195bc5daa83b4ef4d54afbb54affb67ced190f768b6f330aec7fd1fab7416b57be456d7a86fd177d14fffcba8fe95a68e7473bd735c38ce4f7a586ffdbb5b5aedf28ba1db8d7d7fa68578d3f6af13a7fd375ff7ea9afd39e9dfc5506e7b8bfc586fcfb9fe7feeeb13fbb6fa63bf84b6292fdcb47077797cc6cfbbe3ba9872774333dfe0b29bac19ba7ff0600 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/77f0a9070ef006445a3d34af59f949d2.asset.meta b/Assets/SerializedUdonPrograms/77f0a9070ef006445a3d34af59f949d2.asset.meta new file mode 100644 index 0000000..0f4fc66 --- /dev/null +++ b/Assets/SerializedUdonPrograms/77f0a9070ef006445a3d34af59f949d2.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1419135bdcabce14f852c3eaf20ed975 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/78b75a58aad622e40bdf6e6d713d2487.asset b/Assets/SerializedUdonPrograms/78b75a58aad622e40bdf6e6d713d2487.asset index e99d307..901bc4e 100644 --- a/Assets/SerializedUdonPrograms/78b75a58aad622e40bdf6e6d713d2487.asset +++ b/Assets/SerializedUdonPrograms/78b75a58aad622e40bdf6e6d713d2487.asset @@ -12,9 +12,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} m_Name: 78b75a58aad622e40bdf6e6d713d2487 m_EditorClassIdentifier: - serializedProgramCompressedBytes: 1f8b080000000000000aed9df77f14c715c0e70442487481101d61309c29ba53a1638a0a208c286ad8065b08e910b2258191684eb19d1ec7e9bd3b89d39ddeec7427717aff23f2933f9ffc9adf9c79b3b3ba77bb6fb6dced3bddca96e056dbdebcf79d376feaee95a584fc496c971f7da24bb48a7ad12b86c455312eff6a95db31f96bedd9c7cf88eb723b2c3f07e4b9eda2cee74ef8d99258213f3be4de84989477de1083723ba2ce778b8cfcbb43de9b917b70f4b2fc9f91572566cb9b7a459b382d4e89da448d8f883e75d3843e9600bb1273e5678bb823cf66945290484a9daa951fddf2cc843a372695b6af3b2f1e52668dc97383f29eeb6254cabca424cead9b23d41fc2daacd6db957a3b4b6f01eb1ca56f761fac39aef7d7c8ffe5f2df0b7abf4cfeaf04f9fa6f2c7b95deced6dbb4967d02edc3b9e7f4feda10b29d7a3738f46ed0b2ff67c954d948e964df7722f7bec44587fc955a177cef2a746c5d08dd97eb6da34efb3eb40f69bfa2f76bf5b609a5b35e6f9bd1b126740ccb3d992bb7acd9217783ded6e9eb3b1de7efd2c74f05b0696308fb3785b876b3deeed4ba9cd6fb77ebed16bddda5cf9f41d7dbc761bb5b9f3f8bf661bb481fefd2fbc93c74dba365743b8eefd5c77b1cc7f7396cd98be4d8e761bb5f5fd78bf661bb581fef73dc57a1b707f4f973681fb6f7e8edbdfafcfd681fb65bf576993eff80e3fe83faf883681fb6dbf4f6903e7f1eedc376bb3e7ec171fcb0c8fab07dac5a5ffb90238d1d7a7bc491c611431af6f11694867d6ca9230ddbbe567dfc61c7f1367dbcdf71bc5d1fbfe8387e541f1f40726d39f67df675b05da2afbf24fc7dce2e9bc7f43d83685f96f139f31dd7d9dbe38843bdf028d7e5898415ef3352ff6b22a51400cf095acdda77fa57b0207a0e7cc0cf1695eca4accaae4901442dd7abead04919ed1ac95a6e65623ed2bb557d0ec82b4694d02177122fba9200e546e56f0655d113f2f83155c343253d22cfd4cbc03aa2eeba28ab8bf3f237574a9f4c765456f31959f06fc8a440de45a9b6fb4a3f93a03a77ded325655aad8d3179c4067a4dee8f2a0dbbd5e74da5694669df218f4daab6cfb86cfdb4c8ed6d959adbf6ebf26f2acd1e8d8cd6916e74988e5b4d1b3b9bdaa435a07d4ad5b3afe7c874e408a09f33a48be1ec946add3cedca89d7195a4146360e64da968c06852c9173ac51a46037d1e52218de46b785b47f5bbc77c906a0972d3419c8eed5ca826c0ebf54d3f9ca7fb6bfd2579e6b5a934841b59158e3639a175890974c2c7749f036a1bc7c761a1475e24f50f85533a8bb88f8adeb46d475e133608eaa99723320b171aac285c8362caea86ee255757a4cab479fb13b9a03720b86b8f2300d0956a86c7057b27ea69832a28cca88b9c5ce08ffc8e3951173a7ecca6604fcd0042b0d04fd7430119c4511542db60c2bc15e79cc6a22b5abb323aa5eb56b5ed01bacf0ba0ad875aa218a1b2a7d6fca55d29a590ecaa92abb9119bd3675423c79c8f1514e67e93c95a53c6a98b27d3695edf38a1fc1ac223fea531dd2590aedeef5ae82233193941718438fb70e2682e51441d50dea2922413877554981c01b9ee142a9eb3627431ae022057085cb387f154c08e71008d3807031a955a5432b50c820b982ca1cf080c423d312d5ceca3406548ad7d5155735a9e8e2db122abe41ee26ea3d024b147ad5416595f3618c74d5ca85b81532b9db5cca29c08912c3d3e21430fe0edd4bb0a0396277584ab90314abc4360ffa8569e47604593e694758a61c814f15930b545211075ca086e0955eecb6471be50c45cbcca1a8ca94e472b624e79992ac654b72be29c9156c492e3025b9922dc985a62457b125b9c894e46ab624171349a6a07e498c88e988939daa4680eee16d190a6e471e2bd710245350552560f49f4fabf509e87c8d89b49a917cf290bddfa0f6c5d4f946c77e93633fad0784b2f737e4c86b749c6f72eca7d54c1dbebfd1917e638ebc26c7f9b49a09c4f73739ee6f72a4df243c1a09301d9b64466faa1f96984adbbae0a50d0c0b51daaaa9d206d57709b44a9a222e69eba992066c023705c26be48a84a4d3d589300d92f05a981c6e29e570707003e570cbdc0ee7f6b53ab3af2da35283aa1ba6dc0bea70d598246f2c54f27293e44d854aaea54a9e32e4026bc973cf4eda7fb5c87baf48636eaa9ecf0d3ddee3bcdebb8cc10a851d0e2cb4cf6f563e5f27a839d6701a99bc7b8529efb6149a772b29c96a6c942a37557664ae730ec839939c674e721595245c0f2377e4389453f802b3f0d59470e8b06e15eed1e157e58f4b78a559f81a93f06d847098b10f237cad49f87642f8732185af3309df4108bf9808277c3d55fe55b829e618e86971493ca2eb96f0e377f5814b7b4ad0e39f7ee99bca761d454f85d4a78a1c3de9f520c7d472cb4c8e7d76ba57554d0d1ad90b02bae4f6b2d2028e8316feeb48bc73263dc507b57554406c2723ee7459017d812aa80a0c2da346e537a5a5b3c9273750e102c682a1c3e19aec84a2de2f7fd3f2ff2839a9096761358fb574d7155b2accb1e52e9326cd94262b91261dba5539a24e8f88c7e505f4946b187d369a02e94e2a9096850ba49b4cc27711c29f0929fc6e53b5bb9bac7609e11ed5ee664a3804b13d44e94d43e985459365aa60ec137efdd41ee538302f7e590585b13cba0d2e6b1acdd66c31a1da4fa07afee52dbbc3a04a9a32f90091c9c959e132f91e4a3828036b445dcd39188683eac7bfdf5d6d4e72ab09d64102d67f5f7d2254736e1b5539aa366bf1d7e7e4b72a0116c6d652a58bac240e0bafe53561d7246c3765cd91088afc0e4a38644d0b617182127ed82cbc9e120e6119d6e2bac23e74c7a1fa7b4ced02b55e99ef437a022c77dd4d98609fa2b4806e17ac042ea8db9536496e2f54728349f2d14225379a241f2b54721355ca5537f1326b2937d520cea67c740377d0290cd6cde8509100822b8796a688d14ce531e4c4094a7167167798b378272518c6e7e0e199c8c7e7769902dfc90802df6e93299d1ca6eca15203ed4e51a9d1353a95a4478dbed764e0690e03f799523bc391da7e2a3598ad384ba5562d84637609cfce4431bb84ef8f627609df1fc5ec128577ad19ef010a2f786b178537126fbd974a12ca7ab728bcac1f34b94bcfebee1281bb1ca2f04243a197c21bc9a4fc6153927d6c491e3125798e2dc9165392f7b325d94a2509e5f0015178396c33097f3002e1ed26e1e723107ed424fc4204c28f51c2a1490e8f4616d4243f4e4986393d78b8d2b721b8d92cb883120c7d30783ad3d5b3836a836ed7669772d7ab21bfabb20f600dfa59fd406bd00fee82b37e32825cd19fd3a6cf5dad1ba65779c244e0224500fc07a78b975907b1dc74afd799a82cbdcf64e90065e94187a5b9e9625b21af6030f98e6c0467a4d603c27eb6d05bf7e82c3b69b2ec126559afd18b711f2e7f3fc652825d1315874e1387418a4346d8931ff674049e8cb0c6b8a0f77e593df80bbdf78ea92bdb659fde9af0e8525664a45d37d5d5f5da1e781547ee3b42fa9497c004c025d2b3f1d352b967bc68c178d288d42a0ca753264e43267fe1e4342eaf6d9549814520377b8f37a1c2399c3671c8501cf61acb8d7b46c0b26e587941bf8ad913f2f78ed4785009cc78949fdc254961ec3963b2e73265cf21a33dd64abc2bf236cb0ed8bf1d51fcc6e7c2d876d664db70b818974b1747b936e59bf0e477367a0791e16d7bd479dc65e27085e2703c10876647b41f534f648fe8d71d04e710e4bae650d6769bac1da1acdd97770985383de9a8b96949d4a32c612cea3159f40865d1eebc2dbaa662ce48008bf2f7c55e932d8f52b68cf9c41bbcf2d7b2a5477a7b7708ff0b9e63857ab45be330dcfa4cdc46296e7b4273b37d00aeb26adb09cf68549835e74cd68c51d60c1bada1f209c7a54e355b00fe0cd1c9ab051a26c7e96bb94afffd2656e314abbe3c58b5a948c6cb268afafc011389ab1409187109d2ef3ca9da9f1332725c21fb58c5ee733e68b2f21a65e589d025bd6baadef22adfe17cbcb06870de64f16394c507435b7c4cc536b0fb962b9fb2eb1238da22174c965da72c4b866a794de888edb629dff2f59049db89e96d2736b3b4441e36593b49596b7e20c41c57ed3ad5bb1f1446e77e93ce37a2d6d97bec2d8cce174d3adf8c5ae7c723d379c0a4f3ada8758eaef45e32e97c9bd2f952a8d26befe75b37e6579f461d8d074d84ee5084f6097b0cab5bb690ee9335fa808ab9bdaa3d39aafb49d60a9d7e15db26f4ed30a6e42455e8e86585fc4d2460daa55dd55830767c468d5fc1de8448a9e746d2533afb2fce060dc6a4569072cfd408a3ff92ebc785f9a589eed54ef9be3fcfcf0a6a0cb11e8d2262eb822fe077bf2bb0425b64cb92a4d5433433cdd23740aeced5b95a9652cff26ccbd39bfcb57823a4368bf6a1f0ef04b3049c12d6c306ea6dd7f61a7a6b50bd5b250bcdde2bb2b08d0a6b00d912e89bbadf63313b9400fb957311bc45145cee88d46f482d7a83aec9b3b2b8559497a52157dec489ce7ac9acf5f6b6ebf2330e70261359386fe68453ade080fb5ad332adbac338acaaabec446b1ca0c18f0ded094e68d6c4f80db49a390e785e40789ee4c4632d15cac2710fd1c601d78159595c4f71e2aa9c2a82d00ab2db2c7140741c85f0b770225aee19a5ecc6c4b81ee8bf130b781750717c2b27bcaa29786daa9516270f9b541e5651ee10ee5c7e13d52badfdc89a9bd410f3da65aff49a3a0af2869c4d6cf5b477a969fe36819ac8c9c0cd8164e82299246acda4ab6d963444c3a4d18b93219bc6c900d553b65f4af727d3d02f7dbb786d7719d3d0657c0740e8d010ac58f64efe8aa05f8f108ccb8bbc465bd2cef40b79c776654eb45b10c4b87c22de2e542dbc8b13251475fac9eb4e551c06545176b5fca343b8990b612d42f8ee6278e3a02ece932e6fc4ebb418bdb1820be50684f2e9e94519f782bd05a17c0f27ca0d1ae5a8bc08e2a3b5a627dc9c2823e06a2ec00710e0673801d76ac0c3c66a08abdf2f76f2c1ace482994430df5b4a309b6308731382f9be5282d91043986b11ccf797124cc698c906730d82f9815282d91443981b11cc0f9612ccc618c25c87607e8813e65691db5c9a740d0774bd461a507b10f20f73225f2ddcbdf820cf473156571d5c509b11d48f942254464f6583da84a07e9413ea42618d3a8eaad52fbe130d31e886ae42e83ec6890e6a8699006c3602f6714e606001ac9abaa146ab27a4b237c52dfdcc1963e45bc6056e0102f789e902c718ddd8c0cd47e03e395de018db8c6ce01622709fe204076b198d6b63a203358f0bd42c04ead3dc1ed6afc620e135b856f3da920deb49d9c09573811308dc6738c1ad17ee41dc5b6a8a33d8a305718c7b8710dccf72c2851e14ac6ceed0dd366bee19a6ece179a9eb2a22c2b4181bc2455c085720849fe344e8375f13ffa1b1d508e5e73951d6186a6110705ade38a82666eda7f1e357ace72190cf7282b45f383baa1f6087477eb30f065af8ba741c65c358c785b11a61fc42318a76b035168ced44b62e5d2b42f9454e948b85d507bea91eb4795455314e8f8cdf386105c2f7a5e9ac6472d757307a22dbfa8a7a84f2b9e94519f742bd1da1fc3227ca35447c0cf6168d38563bbb11d6af4ca787166dd43ac585723d42f9d5d2a9c119c716d90afbbd08e5d738515609abab68253f32d5ae8c5fd7700e42f6f5d28b8fcdbc9ec8d6bb694158bf513a35781c0bf55684f29b9c28170abb597e4e5f3494f39e1536746bb9d02d46e89ee744b744641fb68081338889303891fb5d62f1f3bdbb11c06f7102ac99f2bd93f222eb2d98ed5211586c8f9f5bb104c62f1e2e4220bfcd09b252d7cc6d52c8b83a084fd0c4af5e2e47c0bec309cc5e178eeb65506252c017df8e8b13eaf18f6b336e20b70c01fe6e316ae860cd6ec685cc6c51b21da1fc1e27cafcfbd88c4317755c58f721acdfe7c4ba4898a663c7f525f11b424b20783fe084675a2d0102e2d873a944e07e385de0e2384f3d1781fbd174818be3fa9c2a04eec79ce0d689dcd51363c6eac3fd7a4dd6460e5b07f02042fb134eb4e11a398c8f71b03572da10ca173851aed528adeede84d147dd2f2860f5d17d5c603723b02f7282b5df1561adda8ef342bd9508d94f8b51ac834db5323677d8da897721943fe344997fdf85116b1d17d6bd08ebcf39b15a8d216b1545119745b18dfbd42070bfe00667ad76b47c7044bfcff57191e15c83cb066e3902f74b4e70762bd2bf20cf9456e47e84f657a51723e3bab0f930c2fa6b4eacf4aaf186190df70882fb12275c9863f35b5e1a3f7c4b10bedf14c337710b73a63f517d0f82fb5b4eb835045c2c10cfe130b6320f7381dc8140feae5440327a241bc86d08e4cb9c20832fc68f63af6729c2f87b4e8cf62c37fe82a33836da9721607fe00466bf1bc5343ee9fcee61c642cc06338560feb1946032166536986904f34fa504937186870d660382f9e75282c93811c106b311c1fc4b29c1645cbac206f31882f9574e98e126c818df0dc936417614a1fc1b274ae734ee84decedca76d7622b47f2f065aeca5b95f6e6f6f5be4e5f06af79baad10e4b0559d1b2bd15fa3842fb0f4eb4ee69dd990db64ecc98ef684843b1f82738c772ed1c49c7bb5e9286f75a250deb9193c6278892819e0e4efaac9ef23edfe073be517f7d42f0d70f98e5596f5bf23eefa58ff5d2a164c805f249df87399281066e93a1de1e10e6ea06e41bb9bdf8a4cf9c66d267ea2e19f81dfec9c0af3cb1befa62892ebbe352a34e91513a5b5f973120b25f83918221dd047c6141982fd4f3960925d75bdabfa07826e8d83d1a59cc89e27b37284bfded33c7aff91eb99282283ca3edff37e4bbce76e5a6b5ea1b5af037b99c96170f29a5e0a7fcffde8a66afcecc0000 + serializedProgramCompressedBytes: 1f8b080000000000000aed5d777715c7159f1508213a02213ac26078a6e83d15ba4180240b01a2a8611b6c21d043c8960446a239c5a4278ed37b6f4e777ab3d39dc4e939271f22277ff99c7c819ce3cc9d9dd5bb6ff7ce96f7f64a6f154b476fb4b3b377eefdcd2d53f795a585fcb176c88f3ed1255a449de81583e29a1893ffb5c87454feda574efe197143a643f27340dedb216a039e849fadd64af9d921afc6c5847cf2a6b82cd36175bf5b64e5ff1df2d9acbc82dc2bf22f2b4b59b3e543bda2559c16a7448d551d40a24f3d34aef32c90cb9a2b3f8f8abbf26e56310595a4d5ad1af9d12def8cab7ba39269a7dc79f198126b54debb2c9fb9214624cd4b8ae2dcc172a1fe1176b246a7ab743a4ba775f26f8efc6b47d720cd317dbd56fe494ab3ffabafcbe45f25d0d7ff63daab753a5ba7694dfb18ba867bcfebeb751168afd06946d3ec40d792a695d1d7353aadd7b4e0fff53a6d4079f5280fd33deea27bc745b756a71b74f913aefb1b75fec91032dd1741fe4d11cadeafd346cd4ba7bedeacd32d3a6dd2f74fa1f24e3ea4bbf4fdd3e81ad2c53aff8cbede5a006fbb358db3aefc3d3abfcb95bfd725cb1e44c7b90fe93e5dae1b5d43ba44e7f7b89eabd0e97e7dbf175d439ad2e9017dbf0f5d43fa804e97ebfbe75ccf3fa8f31f46d7906ed3e9417dff11740de9769dffa82bff90c8e9b09357a5cb9e77d5b143a7cdae3a9a0d7538f987511d4ede32571d8e7c4774fe0557fe519dff982bbf45e73feeca6fd5f9fd88ae43c779ce2907e9525dfea208d639c736dbf43303e85ada78f9195739277d08e1b053f8d875b965d93e332b695f1769c5006846d850e53c191ca480f41cf8809fadaada09190eae4b0244a4e8557168425a7603192956590b10df2dea7340961856442f79ab78c953053037227fb328cc8dcbfc76152521d00dcb3b7512b861f5d445e97acfcbdf7c2a7db2da11192ab3d2406fcaaa80de45c9b6b76490481012ddcf74499a76c41e95390ea0d7e5f588e2b05b7dde529c6615f71d326f42f51fc6640fe2a84cefa8dabcb2df90ff5375f668c8681ee9c06dcab7bb074e33b54a6980fbb48ae1afb7c874b408403fe79236c3d969d5e379d6d312af63683b19d9399075db34ea1564565e5e8348c3a5d5e54130ba8c5e0969fdb6f1de2d3b3b7eb2d0c84073af5112e45af8e5eace57ffbde3d5bef27cd11a451ac286b53640343f60815eca5ae1a1e02f4279f9ec0c30ea86dfa2e057dda0ee2984df2e37acca456f80392a32e53780b56932e082671b1257d550eb9aba3daad9a3ef3883b5019982209e36cc408515aa19bc41364814534394510d3177aa1b22d8f3f835c4dc49b9720d013f348295060483783021388b4250f5d8b2ac08f6ca3cbb8bd4a6ee0eabb8ea445ee01ba4f02b05d875aa61fe4d55bf3fcaf3a434b35c28a7e7399dccf8b9a915e25eb3eba39c6ed2f9aa4979d83035fb6caad9e74fbd07b34d7e24201cd24d0afdee0d1ec3913093282f34ba1e7f1e4c08965308024b56cf142208f7ae292ae078a363b848f2badd8d210de06205e04a8f70c12c98209c434098010897905c55bab802860c942ba8c6010db09e9816af7656d631a06abca14a5cd348c5e7df9652fe0d5ad7aaf3712c71f0550bc12aefc3e8e9aa940a71336452b7b9945280125943d3a21430870dc34b90a02966755846a9039895b5dd07fde238f22a82b44f5a11962b45e063c5a4029594c70115a826f0ca2cf1caa38572bba2e5665734cf54e50ab62ae79baaac61ab7281a9ca956c552e3455b98aadca45a62a57b355b9d854e51ab62a971055a621be58c3623afc64a78a08303cbc235dc19dd87de55a02c934842a0b66acf9b8da60c1e06b5464d44ad9bd66e7ba5e5d8bc9fb0daeeb46d775464f08e59eafcfa3d7e0badfe8bacea8153cfc7c83abfe863c7a8daefb19b5ea859f6f743ddfe8aabf51f87412604933c50cbd293e2c3559dbfaf0d6068245b0b62acada207c9740afa431664bdb40591a6013ba2b109d238f272495ae5644e99044e7c2a470cb288583cc8d94c22df72a9c57d76acdbab69caa0d42372ca31735e0aa3651de542ce51526ca9b8ba55c43599e12e402abe57957279dff8eca67af4a616ea991cf4d3ddfe32eef6f63b0dabfd3050badf35b94ced70a6a8d351a4726ed5e696abbadc5b6dd2a8ab29a1ba5ec669ee3996bdd1372ee2ae79bab5c4d5509e561e68e9c8772135f6826be86220e03d66dc23b3bfc9afcf110af34135f6b22be9d200e3b8da2105f6722be8320fe7c44e2eb2913551e612aa7294f8b4be209edfea34fb1ed0c6d9075829ea20caadf647e1b28f494d77bcb143b387acb46bbda5598cd93cfa9f79a0aa6c091b366df25d32b8a0bc8072e82b77af8b74c7a121fd41d513eab8d748ad3250574f7e781b736745eea95de9416cf269daca5dc054cd7c298c2b31e09a6de2f7f33f26f845c7784bbb0e1c6dea1eaf12d1566dfb2d1c44923c5c92ac44987eef80dabdbc3e26959805e158dc2cf7d2647da4439522b9a23dd6422be8b20fecf88c4379b22e36e323212c47d22e3fd147170627b08ebcd80f5c23ec6326518fb44d050b247290e2c5d5f514e61b4809ebd479a7ab3345b4c50ed27a07ae195ad7ba240b5d5d4c80788461e298bd6c8298a3830035b253d3d2e982903530f1e1a5799ab7cc004d64102acffbcf64ca41ed7362a38aa6ee5d46fa1296ce300ec63ada1ac8b0c12cdc26f074cd46d03db4d4d73380693df411187a63942486c51c49bcdc47752c4c12dc336598fdb87113384bfa7d425a0d62bdb7d50af51e56f8d89e2eceb282e6064049b748b1a19a54d945b8ba59c31516e2b96723d658b6abc7585d5164d7ededde18e6f060cf643871b0cb42b7b052fc5c1a5c9ae1ba8368696384631ee6ee276731337528497a94b8689ae26937b3a1e837bda6512e5048728bba9da80bb93546d74dca5aaf489bb7ba82a41c04e0e01f79a6a3bc551db3eaa3698f63f4dd55625846b99062f73c4b14c839f8f6399063f1fc7320d05ef3a33bcfb2978415bcf50f0c6a2ad07a82ac1d6cf8ae26dfd4193ba74bdae2e31a8cb410a5ee8287453f0c6b2ba7dc854650f5b95cda62a7bd9aa3c6caab28fadca2354956087e744f17678d444fce11888b798883f1203f15613f1476320de4611872e399c312caa4bfe10451916c7606d2cb023b8c54cb89d220c232538e6e8197f750953ff37b727ba4e4dcc5d9363007b6ace1eadd95373f014dc0da211a6447f5e9f3e7fdb6b94b1df3113028f53084043e07af17ee530929b9ef5bb1397a41d2649fb29490fb924cdaf17cb0a6d0553be77651f312bb91e10ce213d7fdee393ecb849b28b9464bd462dc663b8c2f518530957262e1c4e987018a070c80a6789c25934c04b06f64c148cdeafa813b4307aef982cd926c7f4f6b2449792222be5baa54ad76979e0bd10f92face8535a02d3f49748cdc6c78ef2eff8a105b33ec392ab28389d34e174c9a42f9c388dc9b22db22a9008e8e69ef147a8781c3a4d385ca670d867b41befbcbd2ddd90d2827ee5b3c7e5ef5dc9f1654530eb633ff97b7ba2c873ca24cf20254fb3511e7b4bdb55298d2d075cdf89c97fe37b51643b6d922d1bcdc7e5a38bbd5cabd24d38429df3de6168f8cb1e771b9f31e17085c2e158281c9a5cde7e541d6d1ed6ef0d088f4398724d91a43d6b92768892767fc1160a7e7ac215b9694ad499902812759924ba4a49b4a76089ae2b9f331c42a2c275b1db24cb3025cb6880bfc15b686d597a245add11f42f7c8b15abd15e8ea3e0d663c2ed090ab7bd91717374004ad9d176dcd71b15274daf499a272969868cd250ed84fd52a75a2d007d06efe4d7038dd2e274592eebef3361354261d5570056adca93f16213473c3f674262944202e62dc28c3b4faafee7b8b4b0abe4186baac79c0f9ba41ca3a43c1ed9d2bb26e3969f7d47d3f1e2bcc1232689af51121f8a2c71bbf26d20f76d4f3be5760f70f4451e3549769d922c15a9e735ae3db657a642edebbc89dba7a6b79fd8c4d213b96092f60625adf96485d9af3a31d57f1c1485e7c74c3c8fc7cdb3ffdc5b149e1f37f13c1137cf4fc7c673bf89e79b71f31c9ff55e34f17c8be2f95224eb75ae0b8d8d85c5d3b8bdf18009a1db1442fb853387d52d7b482764441f503eb757f52747f438c9dea1d3af7cdbb87e1ce694dc48153b7b59217f2d0b965dda54c482b9e3336afe0aaec6455a1dc0c84cf21cbc851a3818955c41cd3d93338cc11ba3e16da8a6b70f7a773b15fa22ba2029a839c43a348b88a50bbfcddefbd2bd0a2d91434b22ad4ea3cc3449ef42ab56e8562d4bab4331db0bd4a6602e9e86da66d13a14fde55a368153fa48807af5b2b3d3dd9e54ef56d542b7f7aa34b611614f20db04036b0f3abcb2531170dedd16c3eb38a1158e48fe06d5a637189afccb12a2a2bc2c03adf2064ee8ecb7afdaaf41bb213f9300ce8b2207ce1b39c1a952e080fadacb322d7ac038a4c2556ea13509a00904da9b3841b37789e4761c7be7209300d7bdb21c5c6fe684ab7252c720cc3b413909103d877cd4339c10adf03543275a8ee999ecbb8900ef0232c77b9ce0cd9b04af55754392a4612f2a0dab28771177ef2f89ebe5c741c89afb8ce0f3da643ff9baca057a83ee3ea43a175c6a9cc3a1dac93e602a74bc4b4536c994a7a3913278be9451635311fb79a910a12837c8a20747191864bd55fc7f8f7f3230fe791b80d0ae41b0fdd6dbf99d7ebf1eee8ec9427e53071977fdc5bc79b932cfb32d0c235c21dead09858077704209664d1ff6ed54e630a0ccd6d38d8d0fc22d5c10d62008df3915da78599bf384471bf1a623466dace082b21641f9aee98532e986bd0541f96e4e28376a28476421f08ff60695680b7c8c00577101bc1f01fc1e4e806b34c043c63084d9ef972e9d0dcc4a2e30b722309f2d2530eb1308e63a04e67b4b094c46336703732d02f3b95202b33181606e4260beaf94c06c482098f72130dfcf09e63657849ff08c60bbfe4f62fe6e04f90738215f23bc03cf30e75318c3553b17a80d08d40f9622a88c9aca066a3d02f5439ca02e12f644d988da7d10380f9e8091d36a04dd8739a183c83013009b8d00fb0827602001ec5ab9a92658c725b3b7c46d7de687d1f32de7026e2102eea3d3051ca37763036e0102ee63d3051c639f910db84508b88f7302077bc98c7b13e2036a3e1750b310509fe0d6b07e356d062f0bb5bbd7366dd8cfc7065c3917700201f7494ee03608efbce36db52a176e6b7712fdde4104eea738c1851114ec2cedd0c3367bb9145694e1bcca0de5116125870dc2c55c10ae44107e9a13c2a02586e44f8dad41507e8613ca6a43140602a7e58397d55aa2731a3a79663d1f01f9594e209dd7728ee803c470e4327730cb86af4bfb5136186bb960ac42307e6e2a4c3bdcb600c67e22db90ee0882f2f39c502e11f618f8963ae8f0a40a316e8d4cde3c610582ef0bd31964f2b704306a22db96809d08ca2f4e2f944937eaed08ca2f7142b996f08fe1de6290c4b0b30bc1fae5e9d4d0299bb5aee382723d82f22ba513c119e716d98cfd0082f2794e28e7097ba868573f3cd9af4cded0700e82ecaba5e71f9b7835916d747318c1fab5d289e04934ea0710945fe784729170bae5e774a1c1bcf75cb041b78e0bba2508ba6f7042b754e4ce07c0c419f844989cc8ffc6a5e4e9de6604e0373901ac9ed4bd93b290fd16c236c908ec0fc7472d6c82c9f3878b1190dfe204b25247e65649644c65c2a18fe4c5e57204d8b7390173b632e3b80c4c4c08f806cf31715c9d58b83ee32672cb10c02f4c45840ed7ed66dcc8cce6255b1094dfe184b2f03136e3d4452d17ac7b11acdfe58475b1302dc78ee922c99b42b31078dfe304cfb45b02082471e4528980fbfe740197c475eab908b81f4c177049dc9f330f01f7434ee0d68bfcdd13a3c6f0e17dbd216b27876d00f82082f6479cd046ebe4301ee360ebe41c4550fe9813ca751a4a7bb8376ed451ef997a561dddc705ecfd08d89f7002ebbcdec0deb59de48d7aab10643f9d0ab30eb7d4cad8dd61eb276e4450fe8c13cac2c72e8cb0d672c1ba07c1fa2227ac7667c8de453185dba2d8e67daa11702f710367ef76f47e413de31e5c36e05620e07ece099cd38b0c36e499d28bdc87a0fd45e9f9c8a46e6c3e8460fd2527acf4aef1fa190d6e3302f7579ce0c21a5bd0f6d2e4c1b714c1f7eba9d04ddcc39ce927aa5308dcdf70825b4d808b09e2351cc65e663317903b1090bf2d15201935920dc86d08c89739810cbf193f89a39e6508c6df71c2e8ac72e32f984962a77d3902ecf79c8039ef4631cd4fbabffb95d188d9c0ac4360fea194c06434653630d308cc574a094cc6151e36303308cc3f9612988c0b116c60b62130ffc40966b4359d5d095cd3694550fe99134af7cae3b84e67ee01914604ed5fa6025aaca5f9df87eda44765717859f62dd5cf84dd6dacd0b2bd7bf72104ed5f39a1f5ae44ce6c60378819f3d6fb0c98c5df40395668e548b95e4f9232bc8a2965d8429b321e7a49853ad09a0ad8f0e37fbf3ee07e837e497df813f3667af60b82fceffbf163bf272715714f772af0fc412ad45c632ad281f728a5eb916ee40f3c5301cb70a980d5a654e837a5a742bfa5c3fe8281a5da76c724479d22ab78b6bf946040e4be6c200d966fc18b0ea37c07973f4db05c7f6a7f07f3b468df3d129bcf89e3db0d284983e533fbaf053ead92862ec98c96ff1fd0eebad9959ad6a8efc1c0df97715a161e544cc14ff9ff0011f861188ec70000 serializedProgramBytesString: - serializedSignature: ff05aa5c2d07026c670f70e9b35129d845d894b6fcc84276c8ed5e8f9d107375937fce5321426a0a24afe0d046248da47e0c42d1fcfb6695e87fdac4a3afbb06 + serializedSignature: 525094dd194065b5412dd193560e105259dce99246f3fe11772060885419e1816ae4b758899a65cfbc170762d58ca39fb02bd118cfe723fe27a68eedb84f4806 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/7ac7b5de662781741ae394254c55e90f.asset b/Assets/SerializedUdonPrograms/7ac7b5de662781741ae394254c55e90f.asset new file mode 100644 index 0000000..d0bf8e1 --- /dev/null +++ b/Assets/SerializedUdonPrograms/7ac7b5de662781741ae394254c55e90f.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 7ac7b5de662781741ae394254c55e90f + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec7d778014b5fbf76c3b015169d29143baf4222222bd9dd29b05540eeea847913b9aa282a262c78e8a0a020a8a8a8a0a56145050441444eca8d8b163f95adf49e6797633b9e799dd6cf6f0f7c78b423699cc274fcb939e09b770dc3fa1a6ee3fc39dc14e77a7b933ccc973a63a53dc5fdddd70b2fb9f17c3f481ce74371ce7fe9beb3e6bea64277953fc6918aaeafe9be3c60a9d22f7cd19ce18379c209f0f71f2dddf39eebbf96e4ca48e75ffe6bbb94251f7a5614e0f6780d3dfa9123a3a09c470f95221a485045fa152eebfdd9c39eed37c499428a4857c54c5fd6788fba4503e9bec128df946386749b626bbcfc6b8ef4c770a5cccd112b1d4ee771df9c3f18206103684b0befbb734fc8ec0ef52f05bcd1f83b0518af91b2bef95567e0b092d0d78ff382f8ce4b96196fb7f47252ede3d00f99a7878e1f10158cd206c0e610bc03c3905fa0f83b065127e83305a2958a9c8ac14846d206c0df4764ab3fce33d19859628784296f90a3d6d94b24b2bcf455a5b0bde518f63353d8ef5f4185e0cfadb0ff9db41d81ec21300dbcd73f45e483b11c2a649e8eae0bd17c76ae495199906f19320049a1cb087c878a0b5b312b7a505750a3a8c8c8332ba10e9985f3cef0a71a0c5c1fca8afae90af1bc4314c464f2af687344d8032ba2b71578ed1510158a8f7899ade27c2bb8b3c3946d76bfc28f647e27607bc1e69f03149e36392474bac913f5f521a101f688814006e4f252e706f32e42d0aefad83784f27b96f6b90c2b33e1e4e2994758e574e56252f1d7513b7e5de49e844dd4ed6743b19700b0017f93fc58b8750ce2d151cf17e2f0d778a863b0570d147744b91ce5321ec0fe12008073af17abc117d623f08074099531dbf0f980acffb26deadbad9506e413a1aace9ba29943b2d0926be3f04c2d229e6c73c432d681e06619914cb2c03e1708b320ff76ca1d40f9a2de424c13ccd936fa922850617a7f45c889f0ee119109e09f22fd4eca030053b4846cb08a0c55174e0d252a61cc4474278969f16e76c8da6de99a329722e60f651e2229c0ee9394a5cd03ad02ba70c96730e84a3349a734b8e66b7672bdf3ba2ac621ba9bc17645f633cfe0e6fe9611f3e14d2f334da8625e82ed5437917e948a53e8c0559ccd0643c036840798cd3f29da2c4455894284ffe76df2d8bb6759c922ede3d55898be7f929d23ac1296eb302679652f62c281bfc7fd9459077a253bcee51ef8a70a6923613f0de87f72639c5db31cc2778ebabc4c5f3f129f25640d0e7967b44978077273b7eff3324610f87ed84b42940cf6cc75fb766c3f356897742059036d58b1f85b4405f35324791cb1c8fbe23b13d85baeacc70e876b6509103d447a7285176eded90363da02cb47f942df23d2681737855a01dfd18e8345e67f4bc220d65817ef822082f4ce4dd540fd2ce87f002a0ed3cc7e79b9df39474119e0fcffb2971916f4e02bbca5f90364fa395d2e77c8d77ca0704d9d9c55ede17b01f738927dba39680dc74ff97aced5fe0bdb7a512c42f053ee72aef61fdbf0064d15f89635e115e08cf07287197b67258d72e8370610a7aba5cd3139631dff1b701284f6a5c759cf2ae786720a45fe1e55b8e367625d0b9cf4b2f0ffd26e72a08af81f06a45e72b0ce57cadf75e63f443d7016d17397ebf7391474bf9ab211f8c7146224fd72779ef4bc877038437668076ec83c338bb986fb825f17e641ea4dd9a286fe03e250df36079377b74575803f1db349c3b207e31f03b48898bf012a5ec4be09ddb13656f40b9617d4bc66b50ddbbcbc38c8f09ef867029840315ecfa40d382042df171c29dca331187fae22c717cb61d48cb32088f48c24f03259f08efb1e03fe85916842b81b74b1dff38f9524fcf95060660ddebc9a93ab6f9f779ef1c3d0ae2abbce715d156562b3c89322e4bc8ba02f6edef8767972b7c831e220b9534a813912b126911f4570f68fa19ac3d5fa36050cf1f5468a09e3f04e9433cda8f7e06d21fd67859a2d1bad0f1b54dcedae2bc46166a65635f34155d3e02ef5ea9e912fc65e59a01588fd2baac82bef5314d97385f81babc8ad0e5e3f00c7d19fa7d91760da1df6b1539a02f7f82d1253e7f52c1a59eaf5768a09e6ff0ebb20ab6754f31ba54e95775f974715e23d76865e3d8394897684bd89e5063a567213c117087a780fb1c847302708fd3704f4b01772384cf07e0bec0d09b4e7968eb38bf779de3b7751177edb65aa900ac171dd2d6ab63ff7493e3b775e4036d7d9153dcd6b7c0b3eb13fa77b0adbfc1296eeb372a768274bca4e4516d159fbface052cfb72a3450cfb7393e5baf8ee38d571cdad655fa555b7fb538af911bb4b2716e254897db3539a37c6f72fc63e39b403ffafccf7d4e70dbf89a87bf05e7567600decd807f861217e12d5ab9b778e5d680b9d49a309693036d913e0ad2b321fd75286f31c47742be855abe37bcf84b38efb74b93ff6ecd561627ec2dcecb9bca3395b7db1c7f9fe42d48c73e16e6c1345557d8bf4c26d73d10beadc9ef56c03b53898b7cef24e87f09758dfdbc65896715713c88fa2dabd0f12e6d2b92564567c67d24e4f9bd243c9bf8a43b1cbf4fbac3b3835a4b02b03e823c1b03f27c0ce12710ee037cf417fd94b878fe29c4efd49e437f56fa6cf4d543153a105bbc332205fe3f738a8f955c5e8e99e7a51f83bafe1cc22f2084b14fe42ec73fdf7a97c3b725141d38b6fe0adebf1bf0462a71979edac8e3d71ee6b2f65e587b2484f8fc1b0df740828e6d35b5771a05d0954a3f3cdd6730971a59eaf87dd6528fd76ceceb615d9aee04dbf7b7107e0721b40d91659a6e9605e8e6c414cb0ae02bb2dcf1cf9b2d87e7df43fc1e780ef3e491955a7e18cf38e04b232bb4fcf769f9ef83fc3f42fc5e7f7ee7270547c47f4ef016411f745049bb17d27e49c8e7d8a5f06c95bf6ce757c73f3ec531e86ac877b6f29e2a037c0ef3ef91fb359e1e80f828252ec2351aeefd9aacd668b80f6af4fe06e11f10fe2fc1e3b622e51d459eceef7ecc409bfe1930707c95abc45d9b3ef6fd000c7cf76108d702c66825ee62d485f5cfba01f536f28826bf879574113e0acfc72871813d3780be8390f7318db7c7e0ddf529bc0b63aec8e31a6f8f03c60f1e6ff5a201587f428873a0a843b45981f724a1571c67fd0ef1278086014adc2db71eb63d7f3bb46dafd3decff3bf5f1f6dfd1f08ffd5685beff8fc5128046198b7c95044a37d43220fd2271efbe8dba0d1fd14949bafd081e9227cdaf1b7b1301e0c812e22cf68cf719c47cd8306d591f2801b73d2f6b1a12c052b95b9281817459e75fc6dcdb39ece1a8cf7e86f00fdd610ea1cda9210fac617fdba9371912fa02d0925db3f750c603da7d1f69c475bc3a887db10d654426534da0e2f41daaa01d6f31a6dcf036d4b3ddc46b096192aabd1764409d2561db0366ab46df4686bd4116883fa183a52a3eda812a4ad0a60bda0d1f602d0b6d7c36d0ceb2fa1721a6de54b8eb65005efbd6d5057431553e429a87e411f2d54c902a30284d7a58f21f7ac22562a7e0179af6c516615052b953261dd4b6ed14db7cc6a0a560a65866a793aaf0fb6227dafb027314fa4b6e522eeda6793d95efe26d06e87c04785b2359cda1adecb8edf5ed5f91ece5eab07f310aae39063b3a6a3e0f9b110d685e701fb1d939605638ec866c75f6f374399b036d614fa1e21583b0c411b1bc2314049c8a106606dd168dbe2d1d6aca987db0ce653420d35da1a95206d3535f9bd94c81f6aec24e6ecd4bcb856ba159e0f52e24857693f8d119cffcb55e22eefcd1b79743747bd3461e87ac580aeed1a5db0df20b243c168aae91de7b0763bbe39ac08ce876552c62a2fcd185e9a27e1e55545c6af7ab26c81ed420b085b123caaf6b32373b61db7f1d702f48479514faf6bbcbd5e5c4f71bdecd4ec07e6375b42ffaf15ecdd0cb562e87ac380ae5d1a5dbb145bd0eda791f24c846f69f6f35609c858e5a535c34b9b24bcbca9c8f84d4f96add679f4b5ce068cb6101e4ff0aada5126ea483bcdfeab25b09ae038e9048dc72a893cc7c1be8310eebdc77ecdd14a1ee4eb442fde00f2cafe93cb7febdddabbc968ee0021eceb0fe1fe6103f9844ef6e26d70cf4f8af20aec33e0f8b40b94bf47d135ce9f13fb1e425dbdf89d452994d1cd21dbf636bf7be96db3357e3a25916577d011ca05c77d6f3bfe36f36daf9cb6d0d6847ad0efc5dfdf9b2857ea47ad2b98b727e47dcff1d795f7207c47c1e8a5c956c18fa01c29dbed0d74c29e06d96f456c95bf773cfe8ec7b14f1ffabdf8fbef06f0573945fede57307234fe147cf99bab77b0e7be31f6612a797cb4837d2b21dc1b8ff640d5cbbe5ad91f28657f00cfb212ef35c0b13ed6d7643606f31fa1fe3c5608e69442b0df58ef7707fab824e507d6a7411ea67e66e204d0ff09b0261f8275d510ea18f7c57ee8f87dce8701f406d1314cd3c1478a0e707d86f21dc31d9fef08e1fe778d9ff6b067b33dda0dacff85603d3484eb77bf6afcfc0a38c4182184eb44417ba5297b18a9bd3726f15e7cbf680d7f18f924218fd0598eafbe619e10ce71ef77fcf50dd674229f2a32c575b28f95b48f3d599db896a1e1338586660c0dd87ffc42a301d6bf229f2be57dced020c27d4ada3e8fae0e7d19babe74585f14a70b7dd1d71a5d5f43f89552de574ab9226f5f8d0e904f08e6f743a3fc3684ed712857b3a97c25ced49110ecf5c77659d66d5126ccff9c84fe18e6e14380191a0b98d45c701e4d5f7c6ed8803ea7a63f8c7c1b6097d8a742bbfc5e933daeed7ca7c81ee6b3220794b4039e0c3af66168f841a1a1354303f64b7fd268c0b5ae1f95f27e646810e1374ada3740d77e862e65ddac985d225d6897bf6874e1dcbfbace76502957b54ba0e364ec57c2398a10ecb5084dd0f4acfb36535f8de71c341f7bf25c2ffde4453c4668123cc37ec46f89b2f53dbb11659d2602eb70f1f3032d8197c1da7338af10f99d798e67ee8628f944f807511662fda9e9e64fe55dfd1d383f17f95b7be76f08ff526c629a9f8690ba868cf34478a6c195cfddb07e123a57c983f9d1beff51f0b13f9d0dcffe059ac62a71916f66a28c6bd72a38e2199cbd114b0aeafe0e1977ffe90cf52204672042e7d1ba0ccd566485d8caf984335628691a1f983fbed7e41fa0a58bf76e275cd70bb2d90b689bed02e79fbac01a5ee84208b19f03fbffa351c75777a2b8de18d42f3b5fd10f5517e639e458a6cb662fbd2bca6e3e3cffe210d004ebb9d190920fd64db0ee85f0acc260ed39ee7f1fa2a55f029811c75727a25066349c282b1a4e8dce405d5f46ebba1bec63e906fb5d43976bba86f468294daed8df0f92eb82607a4357d0baeeb6d64bef8eedc1959aae4b92a64b014b5d57459d5da5e4a1748dfb7b755dc3fedfe8619aaee17e896856a2ac68566a7406eafa7a5ad73d4a79e93db00f7483a66b3873122da7c915d7d582e47a6d30bda19b685df780f34f3d71cc77b3a6eb92a409cef2444b3bbe71bf8cbbb4f5847d613dd10fdf0221ae05dc5a82b4417f215a46a3ad0cd0b6dbc3edd505f22fd668bbed10d07638608f53e22e6dbdcb69f255f717e03cc8ed4a1eb52ee173dc3b39444b8736295ac1f1d72558f78c1e95282b7a94213f650173bc1217e111900e7d46a78e922ec22395f244be894adc95479f2e5a3ea47d9246bbb2f6198535d568254dff95fc98a13bfdb20edd9dc040be424b8be3869625f47f3bb46fa1bb5294d73d5a992b88325726f06fc6fab33c35fc40dfb6da217d5b9ffd5e7a0e8e05614f5bdcb7c1deb7e8b15a7d383685fa706f1279ac7148df9603ebbf3930160ae19eb82f0e014d3067193d5ab39fa33dda4e81fd6fa7cc83fc0f397efff17009d2067b2da39535da2a036dd0fe9f8aedff5a8db65b4b9036945b15c7efdbaa78b4f51ba8f150db29eedb1e51f250be0df70deabeed31c0ace5f87d5b2d086b24ca92bf5d7afaced3e8a947d0b32e093d8f33f4c099ab681d8d1ef47f55211dc79f38f79b4cc6b08730b4c12ff3d0d309bdbd82fb3b9e717cfca96735434f297a87f7f0ac6668bd661330971cad0b34f756e2e2f9f20446453c7f616a33288ff14a5c84d51cbafd80fd27d1ea8a4ed5f60374dc6fa347577fb43d38f7157a3e05f93d47c88aaa3341fb3d92f01fa71fed76921217614dc56ea14e478f71fc75ff188fd701385f43d42f7c97ab5ff1e75afd8aa763fde2ec395b292b5ba1abb446e3418dc67a048d4c9d8b3f7f9ca111eb5c038d4668ffa2f59df4eadc46085f4cc16636f9f94bb9cebda0d954b23a676173817d04982b108f643aaccb441b3abe39421977f539a80bbcb7c529deb7087a0fe7a35f8210fb1ab0cf26dacaf1d735bc0b909ae3061ae2e7ef1559c8b3f641baddea90fd8f41b0fe3b18eed9086d83e75ffc37743a307e8a3672fc75bf9147efe0555e5943609e2cf40a84d8eebffa1fd1dbd8f1f7051a7bf40e1da5e56bade0611fa58d9286ed6a81f21ed51e4f5630a8e7da7cadfe5e14efb81ca4c47519e03b30371b6dabbd03fb4da2cd12ef44f12ecd54e58677bc8d57e2226ce2d0ed21ec378b3655ca53dbc36620f79d9e8e87e17e690b1dc7cb42994d727c328b3657f88775bc28ceb3e7287197aee178b7648af680789c3dc49f33f6107faed983fe1ea75b555ef177d01eda69efc09ea0e8f1ca3bc7a72663ab3a18e4e761ff5d14cffcebf6047b94a2d0a788e2f9f2894adcd5db69d99e3d9dd6962f338e71926627b0df28da41910bec458ae2fa568e1217e5edd5f275867ca867dc0bf39af67cb0f61cf71062bb83f238999107dc711aed04cfa7249771fcdd2ef00ede85086b2bd1ae0adfa0e76837c83b56c983e922ec0ecfbb2b71572e672cd470f0bd1e907f9a1217614f4887b59fd0eb4aba882b7bf3a2bd200df7dab9fade3e5049c33cd8cf813d8d67c0f987334641fa2ead8ced09bce15bfd74e3da8c8c2b6b33a7a770263e84fbd4b201a3b75fa60ef4a1426f293c42ff2aa4ec31431a426f2b7caf52de45acd2fef2103f9aa3c91e6db98f26fbbd4aba2efb535290fd29c5657fe67a2fef489c1b7e0742dcfbf49ebfcc683fc7d7cf0cbdaff1d2dff1f71bfa29e9221c00cffb2971f13e359fa0ca49bc03f7a7853ed0f43690d1db878a7c5016cafe9eb8def625ca7e6da8f2aea6375c238cbf3707cac5bb16295bc3f5898f359deaeb1afa7c05a6e3780aefa118a4c44578aac2e3a99e4e472ee6e9097da2d90beecd71792fa8c4bf17f755da5e83e860453e49f64044876a3ce098614802238aedeb20c73f1e18e4f176f628c0d4f63e4487393eff1e857d5dd1e1907ea61217ef7faed801629c9690c58e2e90ef337876ba4223dc9d12fa42c9a3f619f0f9977e79c4d3bf82f8999a3c90c63394b2ce48220fa87f21d84f1482f3f4b8f7228a6ba39d95b8e039e8ce33f55e15ca1670ce610460172971118e84f4194a5ca93751dcaf334689bbbc9c837390b8b60fe7e44378d6ec7b8da7de4ee6793a47e309cf52a30d9f0dcf672a71118e82f4594adce56914ecff1b85fb197f38f4bc857ed4681dedf8eb0a9c6d8e8e71fc7505f77a7deef0f52257b1d55c08f33459e479b2c8ade761e4e23ada4fff9d9ee3fa1eebf0fe0bf2c4fdd778c75f5f71cc354e91018e5ff31d7f7dcdf764307a8586fd85223bb55dc0e75f3234a10f99a8d184fdee090a4d1382691a930d9870ae3fee43bed3f490491fa2b72393143d1cd478c67604f6a645f15ef4414a5c84050a06ec318b4e51e480fb487e539ea97e1b9fc3be2879c709f5fc7f0aafd4f33ffcf4c7d361ff56749a463ff6fba62ab44ef5749377ba27df3c5cdfc373637f97405d383740076877a803bc6f7a901217a1b2972c04fba7a2cafdc951ecc3fda63c536588cf391de0734e07f85cd701a6a30e666af4a33f9fa1d00af744e7bfefc9772cce99c1fe35b165c85a07b04f383a0be8c951e26ed96341ff6361cd371c82f7602f563892287bc746480b2bd85a1fc751e6fac351254d94a9ec958be27ca68a817b9a6b26ca6c826b09d53d7ac7c1fe9771e0e3c33108611f4e18f70f11fb85c359f00c745f227e07e58d771be7287111629fbeaf12177cedf3ca1b3fd48f13c753f68d25dba31ec5bb82072971112af70a47e72ae597f6d3321ee6c4c3581eeed7cb2d39b985e12e87e8854a3eb49b8b8adb48f87025bfdaaee1f3b2cabbc4f362ed1ea663bb375f93e17c08e729f29ae7c96b02ec7f9a08b6173ec26f6f2529b7f89d50c9f2058cb9a297005db395b808718f5c8e1217e102c76fc30b3c394c5c0172d8ade15c06f9e728f1009c494b417e70f74318f6d68461df4b18c69151bc57b5b71217cfe1ee83e84278de4f890bbe89b98030cca58795bd4761b8cf205c4e912de8257c64b0bc91f730ee273a4f4bc73d5d78a779b7d47083f418c6b5ea2b8af312bd52e345e8a9af920fdf2bade4c3f74a2bb4b9fa29b8da7bbf60294f5318d6c5e5f85fc495f39751d8831956f742c0f825acf8fe371a29f9f0bdd24a3e7c0fd36af9cb54efc68ee23de201776347d57b6ce16eec69783603f6ad47af75fc75e25a2fdf94b2fe7cf1fc8b1298c5ce91e05e781c37e1dd9c8394b808957b40a2d729e596567e8b50999b0f1fa3d1b158c98ffc2a3e43fe167cdce47f2f8cefdfa8d176238181b8b72969b701ee010d17d603a3376bb8371318a0bb70b69286ed7f1d8d079176ac56be48c3793657efd3b1af531b740cb61e467f7895521f44887798e21e3bb4e9864a3958e71a39c5eb5c63250de41b3e8ee0af09511f9a26e89e1f30e71c6ea6d1d63cf1de357df8f7e2f6817b387394b890cd7e7fbe8cdab56e7fa9daba4bd7b91dfd6525b5530a6301bc8bf73b18ca2edc32357bc1be7118d79f389b57fc559c96564e711b53d624e336a6ae49a28d29dffd8bdb93b2f687fdab703b251fac7b86957d1d3382eec2c3b6a70ebc7f47024bd657119ea8e451fa62f1e71dfcf6134fc77539bcf374901217e112856edc53acdc8d2b7fbb7a2e1ce5247c00d67ba5df41ea36db1f46953db9e18e0cbdb836b74ca37719844b15da9642789792067b77a3ca7702e46f9787226c0b51cecb1d7f7d5daee457fb54f83ec820de7f51f73c52fcd7d1cabb37807fcc8bfcafd2f8c7bd75ca5dc451dc77b552495b09b4fea5c963a5c6d34a08953dcbf2b7fbee0ca863e1639574f5dd15a9f11f68ebb8af6235605fa0a5e31d9e70e62a0c7b5ba27827278ead4f50d24588777dce83e7309f1d86ef7d86bb283a8039c370574506ab21ad9b92067ba8c3dd957761cd3fdc434983bd01e19e4ebcdecf42ff88e3950795fcbdfcbc857b1365f621f073947cb0973aacac1b46613f75f8d4041de7a3edf7d5caec4794d99f28730051e640a2cc4189322fc4fe5c901dc0fa7118e7801ed6ec1ef75fe3fda5f321ff60255d847847e9c51a2eae5f3daae13e0ae1630c2eaee9ad637071edea710d17bef1107d42910dee657c12f2e2f8a50ba4af57e48d7b03362869b83fe0a9441adea5181eae60a963747c7e9a824b3d3f5d29837a8e6b5b8f30cf711d621df31cd79b9e649ee33ad4102d1dee1b8ee23da18394b808f17ed1f94a5c840f29723b5bd3593ee4794ec384bdc1d1e7fd98f1f7c6c2f38dda7b1b217c417baf2b84a3145a60af4638b7b8aec3a3155b81bdcce1314ada0b9096e7c4ebd6f5d0770bc3da57f45925ffb38a2cd0f708fac01719fb6a582f09433b1986b9f2e8264d1e9b20dcace906e707e0be95e8163f3d61e81f862728b281b5eff04485af2d9086eb10ae1cae1b0569b8cef3a2823159a31bd73a5fd2e87e0942e58eb8f83b38e7bc557b07f7b86cd374afcbe815ed3dd8cb197d5593d1ab9a8cf08eb5051a2eaed7bda6e1e21ea91d1aee0e0df7750617e7ad766ab8308f197d43c37d43c37d53c385f9a4b0bab6037baec3ea1a0aecbd0d2bdfb592321569ca5a4714f6748595b58b28ec730a2bdff68bc23e9ab0f26dbf1b719c1364e330af1686bd2e619c6bc27bb306297111e29d6af3957808da3f11dfa3c9a33f61e303091bdf93828def5230ce57d2d4f2dfd6ca47be201eddabf185fb96947ba5e2efe09ce5bbda3bb0ff28fa1ef10ece4fbeafbd037b21a21f68f54697fb87da7bb0d727fa9126f78f34bef7317cc3bc66f4630df763083fd1703fd1703f657071afde7e0d17c6fcd1cf34dccf34dccf355c98670dabeb0cf05d91f0054a1aec010b2b73fd51d8071656e6faa3b00f2b3c4f49db0769f395341c2b5faca47d0e6997246cf1a6807d4bf1ba84fb9bf19e9f0bb4745c37c0be3dec778e8fedb57b78a2b06f26aadcaf1286fb48a3071cdf7820fa8d922ec2af1cff78409d6312a13a1fda1842653e340a6bff61655e53d22fd294f990380fcadc4b18f6548795ef235d8163279873882a77e484aff7f316be8128f346a2cc9b947cb04f23acec2796321069b724e8b86c23a4ddaa95b99828f336a2ccdb8932ef20ca5c9228f3129c170db29d3b157c11e2f855bb1f288afb4f7e70fcf5eb07a55c11ffd1f1d72f9ccb54fd307ca3d1e787613f4ea01f56ee260adfadd18d7e56bb53280afb69a2cafd3ff177d0cf1ed4de817356d15f887796c2b35fb577706fc56f7ef91493ebefda7bb8aefb3f4daeffd3e48a6bf70b34dc65f05cbb17278a6bfa7f69b87f69b87f33b870d63afa8f868bfb17fed570fff5e38a256e1f2ece7dab7e16f6d2f8fc2cecb7f1f959d85fe1f3b3b057c2e767e1bb203e3f0b7b42543f2b690ba5e16761be2a8c7395d0e78c85fd328ac15e8358c42fa318ce53c17c652caac9e846a2aedc5cbcaec4a2c9eb4a2ca460acd0e8867e792ca6d10dfb126259cabbf80ef4cb63da5d2231d8c3102ba5d9bd2ea3d2da7bc84b19ff7bb1329a8cf0ae87051a2ef4cb6365355c9803891da1e11ea1e11ec9e042bf3c7694860beb8db1721a6e390db7bc860beb066abf5cea46a429fd72297391a6f4cb63b836aff4cb63b08740ed97c7e07e07b55f1ec37568d37e39ac5fe0fc50aca2260758cf8ee1fd10a8efc14aba08f1fcffc51a2ecc0fc52a6bb8b0961dabc2e0c2ba76ac2a830bf343b16a1a2ecc6fc494b5dc18ec238fe1b9679c1f82359198726e380ceb5cb15a4a1aac5dc69433bac5e687ae026c6e7ee81ae6f9e94a1901f34371f932f343713931f34371de0de78762d99a7cb321c4f589f94a5c84cab71cc22b359dc1fc50ec580d13e6c16375fd98f1f7607e28564f7b0fd6d362f5b5f7701d6994420baea7e616d7b53a3f14c3f517657e2806ebc041f343b13a4afe3a8a2c42d017b5991fba1742d83ba5fa9630ac51a8be25be7e328dc8772e91369d482b24d208df125ea5d1369778ef0282b60b89b48b8877e71169f389b48b8934c3f6dec1ef91c0ba45ac01e8ed5225eeb6c5d7e13921682343ca7e49121f713b11ef09fccbd2b40bd8e71c5e0df4e1f9f1cb95b8a077bd2697f1c1f486719d02ce1e86d724e4f826cc2f84613d22a6ec2588c1f9ea45b0ff7111f8fe30ae674c80f061455758c6da4419bb70bdfca18032b08e0f4e91a7497e1a628d1d5fbb12c3b129c834866787172871f57d3c73bc5089abe5e03ef92bd2d4ed2808e10e8a5853c0c3b5f45c08619d25d6ccff3c86636338d710c373c7572971457e313c6b0cfc841f53d245d85c9347330dbfb586df5ac36fc3e0635d6be5c78feb15ce5fc4f06cf1c50a3d982ec2e3357dc0fa610ccf17ebf69207cf4fd0705b29e9226cafe1c21c4aec443f6eac9d921e8276c1c6e7c399d918ee3bc851e2aefddf58e0d5951bb1af0ff78084617d2cd57b65b19c30eec7bf464b3f17d2a10f14863de461389f1bc373ca0b34ba311ddbf042edbd8ecc7b988eed7591f6dec9cc7b987e7d0ab285bd2261dc977b83968efb71717c360f4298678b75d26898aba5e3d862bef65e67e63d4cc7b1dfc5da7b5d98f730fd168d7edc2b8bdf430e6af3aafac398b22e1fc66f260ef1e709c3bd4ab11e8ebf3f066b7031651d3f066babb1ae4a5a5708f15c758e12776dfb963e9edddeb20fcac3f6eb698d665c1f57ee8609c35d4f61b83f06ef8689e199dbde4a9cab277837cc7227b84d7946e307cf4e9fa9c445bee71265ec82f17118d61063bd14b9f48210cfc7e62871572eb78ef23016834f0ee35ae60b29c8656306e4a2dd1720f956c714cc7d01a9ca3304be2c96535c26f17b1c57f8cb8c3fd7ee718ca7e3fcd4a99aadc2ba5a4cd9d7217fbb725ebcd5e3fb363c6380eb6a9bfd7492728635d4108c7de2f71ee93287f7f02ea4f026bffcf1fea3189eebeeadc4ff2bfd004f313c873d5e898b10cfc5631f09ed19cfc3631fbc8e925f7d0e73c7f1bba692d013e4d742305f1c1b94c09077518af011258f229ff873ed1c7a3c1dfb2c43345b429b53ce81cbdfae2dddb148a3672841cfba24f43cced003fb5e62c3357a604e228667ab0b52a0e1f62434dcc1d0b024090dc31265c9dfae4c96e07e55d4b3b2bf90f4b32f41b8d5cf0759ffb6f9e953ef148bd7bfd388f7f00ea8a50e5f6f4f778ad7db97154ccca3d6df33402ef94a9cabbf580f93c823b03dc7fef40805231bd270ae67ac9207d345887ba4bb2b71575f772fd570f03dece34e53e222c4f3e1706747f855255dc4f17b712eef6fc17a7f18f61fc44629f6320ac25cc7df1ee67a74dd35cdc3b80bc7a4b817e3757f79717af1cc776f25cee942e555bc33dd7b7e37ae6becf4d3e89b93c131863a27837b91d43919dce3a1cec9e0fe0a8b3919e417e71be23c74f1f2dd89678c82fc279e15857e7b6c0c60dcaec45d1d2cada4e5577821db10c817cbd3749a0778d0a70aeff2e777600d3136d6f1fb19b4e57cc56ea0ae91df2c4a91ce307e5bba8b217e97d4f003eb30ecc58f8dd36434ce93d1b2f15e99cb3602adb037267e7f1db6bf05f07e6725ced93b450f9c558a8dd7e8180f74c0f7dfefc1fd657b343abecb0c1d313cdf7f871217e10448efabc45dbaee59e7976318f677c42669b6334979afb486b1cf2f83f89961c1ef413fbe7a9e3825bde2d9fd1c25ee96b9bc8b87bf1cf65a87d1a674bd4ed5e489776505b429ce954968445d4fd1689b02b4e1773ebaa58617c63b94745b2809da83c6faef7998fa3dde2be02eed95b8b68a77c8e07901d8d713c3b3f99d95b881ed863ff4f2e87766ae6c0ae5e3981ebfb3f64566cb8fdb1cceefe4287141077cfff35e58470def83f063cde6324587ea17b17e7ea2d8963a5ec1e7b8374cbb0b238ce7be3a31ef7dc6bcf739d0a2dddf10c3b64efd1650906d81ae62388f9fa3c45dd9de57ce93cb7de81f71bfcf57863684e5e07d0de394b82827608e31fe2edead305e898b70b6e31bb339d94aba08f12e80254adc2d73d528c087bd63e103fef2a8fb7ec378a70af68df15b369d95b8a081baaf378837bcc760bc1217e1f9907ea7c61ba6df95828e71cf0aeec1fa2141db1ee4eb7b4f26ab03ce63847f74483fb4baad97be1ae7a7f13e20f443b03f26a69dcb8fe1b9fc546d08e88fe1bd0b394adca5e3fea8960fe710c72b71112e60ec05d705704e15f76b1d7448ff773ff8bffbd1ffc19e9fb8ffcb14dfb04f2b8cfb87508fcadd1b7b70ae19bf0546dcb518fec38b9f0eeb2a717f86fce6287197bf07ca7af91f80758630eccf2ae6572df98bd3a1de3ff15ffbd5f98edfafce87709e939a5ffdc721ebca9a515efa1adcab8edf50c3efc93950cea59a4c2f0d9029aed7fc154c5b2444dbf143f8bd3cd80316c6fd67caf7f3f01ec3d8e5bccdc51626f2c7f0db581f2b79d4394f7caecd53c5d3719e0af71d0c52e222bc4229eb0a082f73fc7de9cb803f58eb8e44fcfc4562095e1e8339c94834002b151967393e1f5092fa0cb2bf4869dafe1edae7a53f0c7c45ca68f6077bb562b817a8b3124f426fe4b024b2294bdbdf5aa405f6bb45700f19657fca1d2ec5ec4fd97f1dc37bfa38fbc3e7bafd613ada1f9ed71fa4c445a8eceb8e5d9b22ff476ab65182b20eb48df2b46dacfdcb4b7f04dacb4805cd36701fdd228dde4529d07b5430bd914ab46d3c0a6d5704f69f4470ef22651b3738bc6d287be263f82d37ce36f0b96e1b988eb6a1dd2f1083b5cf98b2d73e06eba8b1eb1dbf3f817b401e5d0a7c55f6f317e89b94fb1c62d7a728df2a9aed95a02e036daf2a6d7b8fc1f79f1e83763b82f7daa0eda18e576af4ae4c81de6812d9d4a06d6f1df8ab75308e88e05cc917878026dcd78cf7dce7287141db2a0ff771e8bf47f04e1e9cab78f510d08677ec8f53e2eebb4ff4d5f22d55f0b4ef3ac83c6aff4cfb3e43ec5ee6b9768fbfcc27c265445988a5dd6f11bb5379577f07f76adca3bd03670c62ca3996d81d86725becf8c725301f1fbbcdf18f4bea28e922bc5d294fe49ba8c485dc9ff1f4f904f67d53d4671c17e533c9f1cb47b9ff238663e8bb34bbbccba3617d5b5ef7f82ea7fbf873d4d7ddcc735df7b826b88c280bb1383dde4dbc83ba5fa1bd836bfbca9aaefc8dfc97567ea720f7403f59db21fde4faa55efa06ecd3663bb49fc46f297556e24cbd8fe0f7a59606d86e1d87f4911bf01ec53a1ad6d4002cfce611fad1ba254373e03c36dafc6acd8e5743b8caf1b7d7ab3c7e9f82fd410eb4a711dccfbd2ca04c2c0bef2bb9c79f1e1fdb2ed7f2e33d259395b89aff343f2d71fc654a5cd0086d42ec4178be42898b10ef4be9abc45d5e9fc6bd38413c3d04efaed468c1f47bb5fc7877c77d5a7e4c5fa5e5c73b3d566bf931fd7e2d3fde41f180961fd3d768f9b18ff7a0961fd31fd2f2e35d200f6bf9317dad961fefbc7844cb8fe98f6af9719fc4635a7e4c5fa7e5c7fd6d8f6bf931fd092d3fdeb1f1a4961fd3d76bf9d743fa062d3fa63fa5e5df00e94f6bf931fd192dff5390feac961fd39fd3f2e39d1ecf6bf9317d6380cd42dd8fe17d217d94b8089f75fcbe40c4dd7af01c8c4d9ec3760b7d349c878d3482fc7837486725cef82fd22f36d6e8c13b485e80e74d9474a2bcc871fe72631be1793f0df70548873d6191a64aba085fd4f8d8a8a48b701383bb19d237016e33255d845b34dc4d4aba085f62705f8674f4fdcd9574116ed5705f52d245b88dc1c57b37b6287157df1bc1ef4570dff8ab09fd6d0459455a69cf445a0b254d84db35bab629e9227c4da30bf6bc392b12e5550aba1f09c68531dc0b97a3c4051fdb816658eb8dc07e7647b9a789b4c3b61a3ede0752a4c4c5f30b13746eaa07efc29ef5487b3f86a38ed7714ff0cec4fb787734de191d51d64fdec6314e1be53d116fa7f023e8eb1d20aba0bed6895e39d571ec7b9f27bf17719e1cd78b2f4922b70e1ece16dc2308dfe679b1c810e7240fe7259c8739d98b578073eb113c1309fdd508ee91c1fb57400e11b4bb3713e5c5de50d2445ebcebf2c4d46823d3e08e86d82ecd0e7779fc6f1a0a363257b3c30b82cbc27cb1dd4a3e2c4bf99653a80ba429df728abda5a48910ef3a794989bbb46ddeabe1e29d27fd95b245f80ea4bfacc4c57b689378ef49270def7d85a677a14c582f8a74d1ca78cf49f803575e9b176b7250ee5089ed55d21043f12558be836b3bb01f78d3227f99c97440eaa52b8468cfdadc76ca38dde1d90e731a6278374c1f252e42bc13264789bb32dfb2d7e35fa8df67ef3b83cb46dc089e0bc0bb65ce52e2e2794f054f3c1fc96392e5ecd3f8d9e72f57e28be7e704e0824d467a0106de57b34d898bf0e304cf11dc47f8a9625b1f43b81fde877da5715bff4cc9fb999257849fc33bdd95b82bffad7b356c7c0fef7f7955890bba500e5fc2736833e375fd2b85862f953411e2dd30af2971978697e1fb0f5bd732657d03ef0d52e26a99788fcc0e252e78cbf3e78f7d0bf95e57e228631567a786a3d11553ee0e89c11abeb33789bd825ce3fb26719db38bc7fbcbd97e9e92e105b69b50c722700f9b03fb2762780f4b67252e9ea7ba1e0cf78844f07c03dedf3248898b7cbfa74f7b7cdf7645738c108c6d62786f4c8e1277f5b8bd92960fef77c1f61cefc36da33d7f437b0e3a8cf4f33f8fe3fe0ce96ffadf8bf4d79eebb830168d0c6070f16e9971da7b2bb5e71a6e04d7290631b8bf40fa2eedbdc1da73fd3dbcb766b7f6de10edb9fe1ede6bf396f6de50ed39f231cc9f2f8463d03d9ecd6e87715e64b8f2dcd4769046ec7fbdadc44588ed478e21ee1ecda6704deb5225eedaa670896a3ef59b98242eeecbc5fda778e74f1725ae941fc23bef02f63c853ed268fd43a3f50fa0758d46eb874968fd48c92770fef4d31adae7cf17fbcb4f6bec4f255d8478cf50a112d7cb49c26b04bf15f839c4b16dc63b8ab62971f11cbf19e8dadb5e389310c1f3184abb9baa5d8423fe72b31c7fb959600fb17f13d81138fb97154aa4c5609f4a16de1ba4f509b22289bc591125af08a38eaf4f20e3eedf9d07346c7c0fd7055e55e2a1443b9d95e5907d822c654d5ce6c1341196727c7d02197769781df67fefdccc9455daf1b53d59da98230bef02daa1c4056fb3fdf9b3f04ea0d79538ca58c5d9a9e1687465955578c4fdaee160bb40b9627b22e34a9fe0f5b67e9e92e1917606eb0e1138b791857719bda3c445887714bdabc445887714bda7c4052eccfb66e1dd47ef2b71573e6f1cf0e3876b68f8985e13d23f488107e8bb6755d07880fd1059e5fd5859706f5104c6045978ffd0957edc2cbc7fe8432d1defc5b948791fd34588f70e7da4e060bacaf33e3f3df16fbc70fce21e7d3c8783eb0d1f1bea1efaad6198130fe3dcffe5863830af19f755781fd036252ec22a09be22703e2aab9a522f604e38abba43fb2ae57b38593594bc22443be9aec45d3b7b6bb1868defd572fcbe0ad6e1e3fe03d7a9745fa59cb7c83a46491361b6e3f755d91e0dbbe1fb576f4d63caaae3f87d551dad4cbcb368871217bcd5f3e7cfaaebf87d555d45c62ace4e0d47a32bab9ec223941156eea0267d157e8fad9312577cd5ae7d7e9e92e1917606720de3fcecdb86efc3f823ab3ebc9fa3c45d39ec19cae41ba7c443b0e7da9476e86f6535d0ca6e0065eff5e78bef6d1aefc96f0ff8cbc839ca73d3f91fb857240befeac955e22e0d6fc37818e7ad22ed82cb40bcc8280811af11e07fa2c445d8d8f1d56b1957eb37de6bd34989bb74ed6dabe134d1709a68b687f7d5146aefe11a00decbf2a927dbbd7d347e92f04dca02ce7366354bbc1b81f3b659cd136959b00692d5c2cf435c062d95bc2d95bc22c47b6aba2b71573eef2ed6b0f13dbc17e755252ee81a0371bc1747f771ca7771b2da286922c4bb6e5e53e22e0defccf364f9ee34a62c94f92025ae968977e1ec50e251050ff267b557686bafc85c84782fce7e25aed4992cbccf668c128f16a739eb24a50cf8c64e44f9fe38e9ff5a6a3688771a75011bdbece737199e3f2d160a89be771f27dfc975a6392d64075dd49ee1ce60a7bbd3dc19e6e439539d29eeafee6e38d9fdcf8b613abed9d4c94ef28e1c27c82fabba7f1aca628b9c39eeabf94e48b4a143dc48a19b94efe6171839ee3b45aef5b696d893dd67635c9ce94e8133c119ed540b9555e8ee2effcd75734c90a09f65152b6243b122047105ee7ff9ee6b45ee8b82c84237bdb79b32c5fd3bdd4d1be3c6fbbaa1786b94d3ca19e1fee74719ee165be0cc706343dd7fa749bc512ed9c5732663e92c37557f67b08b39455237d94d41814e73e30592c221f2df9992d27c497d8e9b56e4a6096ec639dddc70b62cad38efd3dddf5499434164348d6719a58742a51435f570b911d4b790b6f8ff35f25f68440ef53ecbf2aa61b485dc417c65314dfc7f197a4e460cb27300a3951459c897d6da6921c7e1838b49d09cc7e21cd2f6edc9bb9dd33690175a3242dd352407090d3f70f527b16a55765f1cf3b3d6c66921a74c6a26612d48b002af51a8723184601662b1684b41a82efe10257e399d33e4108adfcb3741e6335740966cfcfc0a0889aece50d7ab0d541acfe1eebf1e71c3241b0592488aade9f2d7403747ae5ba460abab9b2b4ffacfee12cb63ac00582fa6e79682a8c3a4aa8a37c4c9d8e59415a69425f7a80efd4feaca88247e925657a938170975b590bdabaa0146cd9525bb5d51e87b61b59b7bd4e84eb755f9aaf19e377e1e56d0f7f35f9e797cc094a1d77fbd3f46eba98cd4533aa5739a8a509a2a73a8ab55f27624484f87c7f94ae849fca1655896b1f5643470128c52123cfc50dbba783655a2e4ba79cd652826469be8ae8916e0918c1126278113618c10614b21c2a308aa9c58698d2a4110839c4529a7ec7fd368a767dc62e6bb8a2682186bdce503db5c53d33e8c929e9c421f55a2d2c3b1e41077d070aafb2cd7cd9f2f3ba622dddfd8891212e34fff1bc19215f3f7cd74c99252ad28a55a4f1919db52c649bc1421f196c25e2b1166207d9c5e19caf395a13457cd8eb6ad666538e4cab6c88773c8556c91cb72c8556d918fa0aa8d3ced3bf290549bc4140cfeeae6be3bde6566a6ec17ce70dfa7a66c82ab4bb594ab4b75595db21d6a22c98c22ae9a1c49e94e24d6a088d455579d57dd511c704d4be0729cb5d5b2b5b6f214b2f0dcc7a442f2613c70058ee4dab62457e4a49c6d29e54a1c701d4be0a339bf7c2ce19743867eb93247755d4baaab508e489af8f4127544c3dc346f2eb6a77c3a414ee0355786a683ddf84c8938dae925cb289231e10492bfddcffd9be7c60a92b6f1f552765af5a5d312eb0187927acec155e54ca281a54954e3801b5a0257e7801b5902d7e0801b5b02d7e4808fb304aec50137b1043e86036e6a095c9b036e66099c4d7920d9168e28510fe4efa7b7717ff570e92f72ff267ee14282de476f93c4a7348ff3a44c0bc956b8b6a38f104c4b86f55befcf61cc2c504be9aaec0be39c4f1d4a69b23790fb9f2bad8744c2f5a15c17698eb1025b510a947d92fa29ca34352a5aa7a2cc365299992d9853ecb15435173d3ab10c6fd5a3ab4b218bfe9198ddb61db7d6e3bc533b4bef549fa3fa840c50dd80021703e5f6f1cc09f07fdd3fc5c0cbf2e00d39ca4f24283f3b3f6c447923ce4c3ad89a49630ef9245be4e3289f258703f30f89cf4ab655a2b7cb96286d80db659ce8786bdc58ee54d9451414e15ab9e8608e955488744145f22d16c13eaf23e5f3e4a8a6a7e27afe7b2ec4e1d6b0748c9da463148d2dd7a5a6a809ea82a32cfc1d70da2d7796a5ffdf920de7d69b709ea60be169f6526e2cc0d334e5aa6c57db2adb8c421655b61b61ab2d85ad8a1d6a65a43f2f564e67be9ce644392de498fbbcffd4357873f2026facdcbde4e1f577c322679634d549ae01cf04c3192a5bfb71f2a9ad3310a7486b119316b28923ab434f591d3aa5501d4a922bae02b4a02c49cc6c89ade3c516dcc5d87ab033d0453e4756c37365b29092a7dd0932eb04e73cd9e7f27a5a26f3662d296ac49cb0385c9bb4bb5291076ec501f7b1046ecdd5f11cdb3ade864216de461c12b5ed61b5e5c83ed596ece3398fda97f0a87f85cc3c6a3b0ebc1f01fe4cd80cfc04ae2af44fc54602acba3d073c80aa63f5a5b716ebc0d9eedfa9ee1b62d53157d6fe6cd91826bc41b69c179b2e1beca64afea96e0e6fe39f099d27724631d0d6283a707a1b44e8eda0a1de4ee2c00713e07d2266e01d297021c32194ee5a395eab28ba25e3a16df37bc36c39a5902d77ddce90eb997952738552afd9cef9ae0fbcc00d8bdcdcd9b21d2890cfc46fa169e16b4d747a3247ff508afe320afd03150a4d4aecc4f9ad6184df329defef4c815792904cc7471c1b35eff874e1c4763a2536316bd9d3edbe889eeb0c997f883480fc785f392f430d645782ae1672ad628af35f76c8c46841ec512e94bf135d145176620f9c4dc74b1cddd03b5ef887ee7889c3b78d42ad9de41daf4c50cf75b0ba5196249cea08c2a9864c9c6a77ae2e8ce4eac25969d5851e94cdc9559669ffa9cdf1356ab0c49e2117976ced4e1c8b8ce8a37fb914d43605cbca148d4d42c22988fc63407285c2998a6d29a35db205d1dde56600217c5925e83a718eac13879272ae5ef4e45aed5144abbd2e66d66af7a24c562eb395ecea6d32a1f6900887c26c7329b395eb81ed52507e26e9ac2d8fb2144aa79a074ed573ddb543c20f4e97cd66be9b2e1caffabc49488cd0447fa99794f7642979c15fae1cf772463edac1f5e843c92767e8bdb906600cd10018f5aafb7055288fa8427f1956a11c8eec7c5bb24fe1c81e4b903d37cb8cec5339f0710478dfc3ccc0fb52e0c2318b33c13623c47e1cf00487e86e8a451d1c278cd1468aa3e55801c77f7932658efb6f819b36464264cb6349b8d7d284cafe9c6c2712b22d6728db019c082659ca7620052cccb32015e08025b04114b0e87f4d7698fe97e8a39bf7bf0673629f4a887da9a1d88770d57c9a6d351fca219f6b8b3c8c439e6e8b3c9c432eb4453e8d536211a144b1ddd84489a773e03308f0a186e06770157326e59bea3b627923d149f5864f89798d5cd7cb1749cf93ed02786d6e9e6f7e44cc794c8041b3493d3f93a3731645a7770a5aec28177d8a5c3987264a1ce0fa1b93524770a29f4d88fe6a43d18fe4c0e710e05f1a829fc5c9eb3c4a5e5593e8354f6e444ea4b672534de4783647cdf91435229ad09b4939e770229d4b8874491933918ee298b88062a28283cd78075764fde5845f2e6c5199299b717331e672145c4851203c5bdf78c760609add82d19c482f2244badb50a463388f3ccfd623e77164cfa79ce6e16664e773645f6c4bf6580a59f43a2e71985ec702279d5ec738ae9c4bb9722e4bab9cf19ca42eb795d4044ec10b090577296ba6e0891cf81504f85c43f0491cf89504f86643f0020efc2a02bce61166e09339f0ab09f03c43f0291cf83504f86243f0a91cf8b504f82a43f0699c915f676be4e772642f22c8ae74a419d9d339b2afb725bb90406e2177951fcab3d3faee27b3e3a5e22386a91d90109f4ca4ce4d272b9f9b522aa2f4225ae89b28920c9af2199c35dd4c58d37ec34a309303bf85001f6968aab338f05b09f08586e0b339f0c50478b9a3ccc0e770cabccd5299e771c0e20b40c5fa824da5754e95754c74e7f3e5e52453e4af29f282a87cb9709d2b6d3f31e1840bd7e2b69b6cb0dee960d3052e73cddd5413aacfe7a8be83a25aacbc8a49dc44bfd91b4a7ac3106a5f61b6d3107add0d8de89acbd9c012c206d6191ad8051cd3775adac085949f95876c2694a89fe5f6910e9593f7e276aab1d252261bef3a0df6c977a5ec93ef963e596ca42c395a39ff7d11a56ed1b75eea307deb65eedf328264a3bef53cce66ef216cb6ada1df9acf812f27c04f3704bf98035f41802f3004bf840217dd9a958e65b7660147f6bd04d9bb0dc9be94021775ff3e4b27711947f52a82eaa5e5cca8be9ca37a35e5cfc55984eef2743bd6ad71b2adc9857669aa5b1793fb75dc3ed5106650cc3cfd424e1cf713e21869288e2b38f00708f0ad86e0577286bdc6d6b0afe2c87e90203b5ade8cecab391379c8d2b0afe1801fa66c4f9cad1c227b335e5f6682ecf7786d60814c372bfd5a4e666b0999753494d9759caa1fb155f5228eec4709b28b0cc9be9e23fb315bb26fe0c85e4790bdd190ec1b39437a9c33a47e6e42f778f7d833a87457366ee2587b8260ad650533d66ee634f2a4ad466ea190c58e8ef5a954eb803df7b752c082900da90007ace82ee604fd142168c750d0b771e04f13e06b0cc16fa7c0c57515cfa42292fa3cf01d9ce53f4b59be50c200d7d613a76c0b7c373e9858fd12aee4e752612900f84e0ef8798a25a1a111f1652eaf3f7196e198f62e4ef51b29bbaa68a6fabb39f01708f0f686e04b297031527931fe401ba96c72d2590558c655e9cd9655fa1e0e788b25f072ce8a5eb234cf151cf0cb96c02b2960a17bf1454b7d63be0030d9987f2f6785db082b1c55c9cc0aefa3c0451b25eeeab76aa3567164bf4a903dcf90ecd51cf876027c8521f8fd5ccd7c8dab993bd2aa990f70e628be6952cc5b0a02ce71ff130bed62cbd93867a09c1511875766cb27d3e40ca218bf99d8ee1a8e8a9d141515e354b474ff152345b165c1db349a3e0d0f7234bc41d150016868e3fe1de34c85a39db3dd7fd3a7e0218e8237290a4a29ba10474bc52c9649690f73e6bb8b30df69479b99ef5ace7c7773e6fb565ae6fb08e7f4f6104e2f62e8f41ee524f43621a1a695cd24f41807be9700ef6b08be8e037f87d2ad21f8e39c6edfe574fb5e5aba7d82ab0eef07b9a6d619764d4f72547c10ec9a5a65d035ade768f830c835b5cda06bdac051f05132d7749a2ccfec18dc539cf9ee23ccb7631533f37d9a33df8f39f3fd242df37d8663e2538289ad864c3ccb31b19f63e2b3b498788e63e2738289ecaa664c3ccf1995f8aeb34d57782347f59704d5b30da97e8113fd579ce8bf4e4bf42f724c7c433051b59a19139b38f00304787b43f0cd1cf8b704f84843f02d9cf8bfe3c4ff7d5ae27f89334ef1b13ab6f56993e1d6e7658e8a1f292a12ad4feb0cb63e5b391a7ea268c0d6e7f80cb63edb380a7ea62828ed245a9f9e72bbc254c32dafaf70067c9030e046d5cd0cf855ce807fe10cf8d7b40c783bc7c46f04134b0d99788d03ff9d001717959a80efe0d42dbed568d32ebcce51fd0741f53443aa7752e06216437c2ddb6a16e30d8eecbf08b2171b92fd2627ecbfa9ba2536f6056f6a1fea669d26b79d8f937e67ba5c19f1ce2ee7c9ed42031def4b18debd17b96e6a9e5cd21d2fe3e837739dd1be255e5cf49de37897a267cbcd74de07d0b2e582721edca43249a614ca5cf90a32bdac3c01b63da91b8c4c577076710afa8750d02a4305ede6c0ff25c0b71b82bfc53923f9ed44ca198542e938a33d1c13e11021a19a664cbccd814708f0ab0dc1f752e0f2a3da21bb19e67708e016f21ee3ff66ef56f11bf932bb772b46c98bdcbb25bef51ebc77cb9e566eefd6bb9c2d1d46d8d276435b7a8f6b224a852c9b88f739e4d2b6c81f70ed439954ec3fc0697e48d9bfbc6e7bec7f62ff36776526f90a57ca965f565afe7101966f77a327ad898f38e339c2d678f671c673a4a5f17c4c018b6a7a14514deb1d63564d3fe1a82e1722ba44a251ec2a075af9f2b82275d0355b7697b20d77aa7dcad1519ea243dcb56586bf9fc3af60a99dcf38ed5424b433de503b9f73e09508f0cd86e05f7022399a12b938359be80de39e20dc3a3f01aa66e2ee11d37ee5971c3595296abc2b07a728575c9994f515575615aaac23a12ccfbde4bbc9896d9da65c7ecd29b42aa1d0aab5cd14fa0d075e8d00ef6b087e80935975cb0af42d47750d82ea51d966547fc7515d93d3346e8ff1c64afea321266c7dcf955c8b2a59cc24799f7f6d11ff3a5c8bf8457c035c679be7981e66fe81a3e0188a822a24057de5af22796b9137a24cefacfa8f1c2db5295a6aa4484bf1cf8799d0f4136778d984e1cdab6366783f730cd7b1ac2e0739e0632d817fe180eb5a02ffcac9b91e21e7a58672fe8d03af4f80e71d6b06fe3b2792069622f91f052cbfbf6439d0fe830216731c8db8398ec669cd71fcc989fd3842ec1deb9989fd2f8e89261c134dd362e26f8e89660413730d99f887036f4ecd02d53703ff9733cc16943b1517f60c76d4abe9f2e4f80d1d7923a73174e112270512271fb365cc6b7ec4286c9a7c822eb7d029909772153aead533de84a5b844659aa39f67f1ca1113955e133b36eeceb3a533cf33dc919a98bdd364d1929285b8d35bbddfd61bc1241ad8c43530b32485054ee2f6128f3e41733284d66e6ed3d3a2218a0f6130ad0883f9ddd01ac314b8a852adb92ad526ad2a15e198684b3051d3d0eaa39ca68fa7342d2e2aa0a7df47c0c4bd386d2b46aedeb588413a6d14f8b4b1dc45ed4dd927ecda5f03a64acbc0e979ffb322695745442d1a2d299caa4cee7bd85361e6c3c4be629cf4da593666591cf00996c08751c062aea6bded5c4d29ce4c4f24cc744d0333332dcdc9a30365a695c14cf1baa20170c260babc4d2c3ffee1b6818ef75d75130196e1d83c8960b34f4333360fe7d8ec48b1297c8dbfbe7597562c360d8c935df7f46e112fcbb17832c1e27e43168fe058ecc48da0fc9a14778c15c846d263cc9ba8f556ddc6b9b94c183d9263b433355a6964c6e8511ca35db861728ecbc014f04c793eb60b8dd82ac7b1d5956a301a9bb1559e63ab1b37b9d94f4e644e49e12baf264c56e098ec4e3039d490c98a9c97ec61eb252b71c83d6d918fe6907bd92257a69045fede9623ab2a1c701f4be0aa1c708e2570350ef8144be0ea9cf64eb5d55e0d8ee4be9624d7e480fb5902d7e2aa767faa896d6256b58fe1c00710e0db0dc16b73ce7120e51cc5a750f44ff95093fea2973d0e9ca87795667ebc6fac8f1cb3a1175c24d732054636747d44bbd2c1376e3471b7d99cd80611625b6428b63a1cf860023cdad40cfc580e7c0801dede10bc2ea7f0a194c2c5fecaae6ec4bb813f4f0ef2ed5779ea710c0e2318dc6dc8607d8ec1e11483c2612526fba72857f89a30d4802bf334aa4c813053de3f35cba894869cd84e27c436ad9999d81a712c9c41b120a293e32b61264c34e6ca39932a479c55f2be08788eeb78fc6e22bd9daec771e58fa0ca173e5fecac15c7ee92d321724e774cd7889a706a1d49d586e6666a6dcab17b16c56e2da536e02c572aded9fc4e9a661c5d67739d72147f8e4bd570a83d39d6aea83947c739141dc710e6909c9ef4cca2056716a308b358dbc2cc2c5a726ce772b5c0bf229a9bf136a115c7ee6882dd4aadccd86dcdb13b869b8c51b59b58f2b7b7b7361c25791425b5197b4b46517a16d79653413ea182df0d55703cc7f8584e05f41abcbda5b5e3d81c47b0d9a3b5199b2770e0e309f0f186e0ed39f00904f8d586e02772e01309f02586e01d38f0490478d53666e02771a65540995653994f3722ee830d62fd6618f179006f2c33065616c4d7f6a619cec477e4a89e4c512dd81733a7547d3729f5644e1153084534325444276e4a60aaed9440678eec6904d92b0cc9ee42818bbb9bcf4d655ae0461eb82b47f57482ea75865477e3c00b09f07d86e0dd39f02202bc655b33f01e1cf80cca471a82f7e4aad54cae63890d2c57bdd26b4c7b714cce2298141f993661b237073e9b002f6708de87039f434d661982e770e0e751566b087e0a077e3e01fe8321f8a91cf85c02bc5e3b33f0be1cf80504f84843f07e1cf88504f82a43f0fe5c7dbb88aa6fd5a0196b66d4049bd4bb011cb3f30866df37647620073e9f00df68083e8803bf98f2b92798810fe6c02fa1ba8e86e043381b5840d9805804f69fa8cc4cbf7e2847c5a51415e2c60e6fefb8b8d56fb4b43593d2867102bd8c726486021dce815f4e393243f0d338f08554cbd4de0cfc740efc0aca9119829fc169f84a4ac3750decac697c84393eded5f7baf87986974c9dc9d17815456369b0c21e72949b8e1d8ee0047e3521f07986021fc9815f4380af37043f8b93d4b594a4c41db438059289efdc9dcd957e1dd76ee913311c15e9f517cfe144bd889aeeeb6026ea511cb3d7074fbe747012bb1ebd9bcabd5d8de95ffd9bcb517203458940e8e7e4cbf1b54929a33961de48b5d386c21cc381df44800f3cc90c3c8f93cfcddcf0c57f936ba6f494cf31790bc164d490c9b114b8e816dc1a7fa0ed435d1c4aeb936f1c13b7114cb43fd98c89f19ca66ea73425560ee801a6daed45ddb5b4d2dd048eb23b28cac4a1a3c4371333b31f6f2227f82584e0f30c053f8903bf939a5531042fe064771725bbf24ab3a07e843afd8b7f2673e5dfcd59155efca3969fd8b8a66f244d9fb2291c654b39ab42c9f4968da1d854375b5e763241ae1d8a5a60b6f9712a47c1328a821a0a05a950925eb33d8d33c67b0863dcddc9cc18cfa5c0c52ce9f254262603f62b4de7805758021772c02b2d818b3839df4bb9f2ce66729e41818bfcf7858adfa92afe14030fb853752607be2a03e0b338b1aca67a8d8662994d818bef1ddc9f8a3203be77308713c9031910c9799c48d650032243919c4f818b158e0743962b1c7339613f6429ec0b38793c4cc8a36a1733795cc881af25c08b0cc12fe2fcfd2394bf2f2bf325f6a3a7fbf5e7791c4b8f122cad3164693e07fe18015eaaab19f8c59cbcd651f2929b5ca05dec2acf449948e912aeacc7b9c1bbde167b65a6d7ea2ee0aae113b6d5f052ae1a3e69590d2fe334bf9e1a507533d3fce51cf806027c9421f8424ed54f51aa16b21557f464a22a5ec1b1f534c1d66243b6aee4c09f21c00f1a825fc5c9ecd9a06184de8d4fbfb37e3557fe7354f96594ea3958e69e2a870d26255ec395f83c556245a7b843504b4ecf2d5ccbb9858db66ee13aae5ffb8265bf7611e76f5eb4f437d773e6bd8930ef1fba9b99f70d1cf86602bc6f0f33f01b394bdac24d56ea835cd5df781fc0c34fe89a1d4bbb8963f32582cd05866cdecc81bf4c80ef3304bf8503df4a80cfed69067e2ba7a06d5c554f6d6ec244358b39065fa17ab5bdcc18bc8d63f055aec553191ceab2d6d519ebfee75d9d60c2d6ed5cc9dba992ab2a5e74a65baa771960e6a67ceee0a8798da2e62847ef50da28780957f68e649208a621bd96e54ecedc5ea7ccad8f99b9ddc5355b3b6d9badbbb966eb0dcb666b29d76cbd69d96c2de328de6549f13d9c0677131a9c6da8c1e59c06dfb2d5e00a4e1e7b2ce5b192d3e0db961abc9793c55e5b59dcc7c9e21d4b59ace264f1aea52c567346f71e6174db0d8dee7e0efc7d02bc518e19f8039cfbfd806be3bb3bde5ee8e98117599838dd351c831f52a35a43061fe4c03f22c09f31047f8803df47809f7e8a19f8c39c6a3ea65423cc58ef9d245465a28eb51c539f50036643a61ee198fa94620ad7bdda1c8275af4739caf673b390d801e90e1f03f1ce419b0d3d1ee34afd8c2a55ddc6cc959e5ec7671d47c7e7417ad1d7434b422f8f73947d4151a6ae47aa130d36fee9098e822f290aa8f5c8204ad2d3d7935c25fd8a6a14fa9955d2f51cc35f530c3770129b53f22453539c868ed883e7ddd6a97ea9a220be01211bc49110046e6d3111c3064e0cdf5093f87dcdc4f014278603a9741702a87e9aeb877c6bd90f798613c7778438f61b8ae3590efc7bcae4fa9b813fc7c9fa07ceff244c6eaa236ec62f6e74e2bcd61cc2d0cc3cf4f31cdb3f126c1f30ac691b39f09f08f02503cdc05fe064fa3325d36c836a9c89aafb22c7fa4182f56c43d63771e0bf501d3343f0cd1cf8afd494ab21f8160efc37aa960d32037f8903ff9d00bfc910fc65cedcfec7cde7066dd3b169b0b7726cfe414db91ab2b98d03ff9300ef38d80cfc150efc2fcad91882bfca29e86f4a41e2ab1d6adfce4401dba9920465ff84ec377ebcc6b1f12f3764c56e5811dcf05624b73c4eb1e894eee06870c229acbb61f92625bece5946285cdc32ca9d6166193bb9b99c70d8f60b6f9c2544c2f696f026d78f8a86edfa51bb3861c708618f3214f66e0e3c8b002f75a619f85b9cbc0fcb80bcf770e0a53200fe36075e3a03e07b39999721647eb5a1ccdfe1c00f27c07b8c30037f97f33465294f234eb3278e74a81374898303dee5c3e2136385b045dddb946ee28ddee3a83a82a24af88781b2bc22f95d07f1c63097823cf86d52f2fb5cc9475225b7718a5f7434435ea73cdb2ddf5bb713dbeebd6bcd47cb14f1012ed1a5f55f13d654768bf3e58c1aae328b2b92c4d4cb74c30dce1f7006731461301b0d0de643ae1e95cb403dfa88032f9f01f07d1c78850c807fccd94d45ca6ed45e83da09ca81ad6ce9f51a3ee1f45e89d0fb3323cdf4fe29d7181e6dd918eee7a8ae4c50bdf52c33aa3fe3d67aaaa44275c05acfe714b09837a89a0ab0b8e59c01fe8233a46a942155560c698cf221a9c4a7acd237a72f394aaa734e1829b1bd5de62baee41a54c9559ce233a299bb80e36bce3c6b12e6b9ee6c33f3fc8663b416c5a8d89dd0cb513f8ee79d2da6af4ef5da2513560f70ac1e43b0baf01c3356bfe558ad4db1dac2f1beaca136a289f921ffed4989f9a3a9f051e331f0b50df1ce2c299af1beb74de792bee368cfa66817877cc5f72ca7c86d34797202c2fbb6e5f40c9d8bfb9ea3a70e458f381c3e4cce63a6fb89bb1f38c33896308cbc516686f123075e9700df6708fe13075e8f009f966b06fe33075e9f00ff7db419f8414ec70d281d8b4d53898b45a976c044dfbf706537e4dc52f1cb4db9b6c8dc03ff4a51233f4315c607096abccf5085d339e6fb1bc7f571415d38b1d9bac09900357c8a63b7e1fa778e8626c95a3e6fd9abc01d64884fb24f72fa3bde7790d2a7e57f1c2d4d295a8ed56899e2b381be9a84fa492b182fef9f4c9fc23f380a9b259396b7a94fa76ab8fc7782f4cfa6a7a5ffe468694ed192ed701b0d93d1945e1dfa8b73552d08573537cfcc55fdcdb1de9262bda143f762d44a94484bace78ec948d3f90fe74c5a71cea4755acee45f4ee06d0881bb5c1909dc0933026f4b09bc9181c0272b7d954c893c44512b44713c657b86a20853e0622cd2ce728017a180c500ef04cb015e9413477b421c3f188a23c6819f48f577c69981677166d78132bb0a329f3732c9d495148771ec9d44b0d7d690bd5214b8700d1d39d770725aaea134c74427828955e3cd9828c331d19963a24b5a4c1cced94257ca166a29cddd54f9a13acf8d880cb8c16cbafc2259816507aa2c4757378a2e3c502a3a7189ef10a45ffa119c6abb5363990966aa3d920297df66b25d453b8a406e91ed46436e159263d942486fee0c9613dc4281a277d95caa6fb22bae09a0ba21f2df997088a4d0cd3104942b7a82dddc70b633ca2d7384fbdf30700f73e4f579e3e44486c0147d9e31b2459aee122ea6c6b99cdde168a87793f90c49c359ee7fe21d3fdd98b3a7cb6b4413568b3a82d7268e53421409512affc462214d372dc56a78afb0f8b26ec9511163b45f8ed2bee8ce8726fe27da1fe496910b7d9029e028326b03bd291b10f7fc859a07483f1374699610640e7da4399434419c5194e73c590ee1c9064e32f3641538277d0a377f55fc1e3913b75c912bef54aabc7a0e6e1d4adc67a52e75267621eb63b5a1b2c910bba4bdefac9a351e95382afb5254969575738c5468be1c6d7be37d418149a94773a5f6a34a159b71272459e6f42f6ce2d76af1c30bb932b7f7e5e8c6469456a6281535a83f519d5bd6a12a9a5e9a70b94c6955a8d284571c409556b77869ee3ff33a172fb20f5f6455aece0d24ea5cdf02b33a578d031f44801f3004af4e818bc5c1c1968b8335389d0f29099dd7e4743e34759d534506e8bc16a7966194ce279ba9e5180e7c38b57364aa19786dae3b7a9a6d77349b1bd39f6e39a6afc3019f61097c2c278b336d655197431e618b5c8f73fc2329c72f2a733f6786cc39408685b073d6f423bdf5b972cfa2ca1542c75b8d0be47ce02c5fb3ebed94f14ea379d3cda25932fb965c03ae9a9c4d5493bf0cab4943ce359e63e91a1b71ae715449b8c6c69c6bcc2d31d7781cc7e0e89260b009e71bc658fa86a69ce4f24a4c72cd3883cea7a6c9a699197473cea0c75a1a740b8eea71d4dce5b96654b7e4c0c713e045d3cdc05b712299602992d65c1598581255a00d67a9934acc52db720c16940483c7730c4e2e3106db716e658aa55b39819ab51143d7d014e7bf98b5e92ad3272b6b44dde59a9118e76576f6662a2539720a659a9c4269edf0532899a49a9b4a69cf7578cea53a3c6237451ff78758731befe6175d9be1f14b79bc72a7cb2e4e7aab712772d44ce7a8c189fb5c27f3a7af3b70d414729d41a4c6fb6c025222a4314d5ab4d092bf2b68d63d3d89a3a888a2a8ae537c1ddf84b2f456f33b7234cee01639c4d73ebd23703361ca30fdeef2c95ce933a9d2d54f5e24a3223d6974e29af65944d35e30d3ac69ef4cb9d9fac2cd0e295137eb471e02e653006e69b2fb6c8c740562926d74128739dbe5a1b63e54142c934e738e749a558a71978c06cefd75e19af8f34aa289efca35f1e7975813df8d63706e4930d89d2a4d18e4059c9675f0393c780f4e7a179698f47a721da48b2c3b48bd38b7308f700b070ddd426faec73fdfb2c7df8753efc519506f0e27eb4b2c657d0a47f5820c507d2a077e6906c0fb725672196125e3679959493fce4a2eb7b492fe9c481666402403382bb9c2d24a0672545f9901aa0771e05765007c30077e35093eafb309f810ae3f750dd59f123bbd07b80def1899500823805eb0ae36d5f024fd50aeec6ba9b2c57621ffad6c99a2631847c775dc6474f1b2bd7316669f6f1bce95bb882a57dd41aceff91663b65cabddcca771b45c4fd1921d408b58b79eea4a424c9c8b0ee098f848317dea4ee7a8bb81a2aebe425d1e50970b2762bac91efe2cc75bb756ed0965586841e7191c9d37261b514e0db4e6f4293a93a3e8a6647a9d96725d4b9fba111c753753d47137b3f1b5317dca467294dd924c93deee0def56b45c381e27862e899d1b831d3c996042d1591c45b7a63a376042597aa3e1b3b90ecd62a243b3f93cb30ecd395c3b785b061ad951dce0e3f6121b7ce47245de5162458ee6468b4b4a62b4388653d89d1950581e077e5706c0f3b9ba763755d7c439687d3756f1d6cfdb9364fabdb8b11c254b294ac45e6bb54dcb1415e3b87abd8ca8d7dbcf37abd7e3394dde93014d4ee0c09767007c2207be2203e09338f09519002fe0ccea5e6e1237b10cd043eb52f5724c6fe19dcc99d37d8439fd708199394de1c6bdab2cc7bd533985acce8042a651e062abcdfd61cbad36e772643f9001b2a773e06b32005ec8813f9801f0220efca10c80cfe0aad7c354f51287957a4adfec7d3a3d51d5faca2d47d3646fd66c25692647c15a8a82d2be0ade1b7a8726e5cde2ca7b842aaf7ca043e9ef985fec3d9b2bff516e2e2151fe7079f867863359f677a7cbd4c1722c38418e294ce898c3b9b6c708d7b6f64233d7761ec7e43a6eb2a62b2c7609717a7e3a5dc6cee7187b9c60ace37c33c6e6723efb094b9f7d0157cb9fcc402dbf90f3d9eb6d7df6451cf2065be4799c409eca8040e673e04f6700fc620efc990c805fc2813f9b01f0055cb57d8e9be7eb25e755846f522bf010d912e0553b8951bb4935be94a3e5798a969ad285e0d6579596eed28114c945e6042589fd2b66cee5328eaa8d14556534c7964e7b753957e20b5c07582d115ba8749de942aef417b9f1a55a7a26dbab2b38b7be8970eb732f3673eb5772b56a73066ad555dc5cc6969298cbb89a9bac79a9c4266baee1187cb92418bc96d3d5d60ce8ea3a0a5cb452db5269df833e3dc9a9e5951253cbf55c8d7995a831d14bcc6acc0d5c4768bb6547e8464ebdaf6540bd3771eadd61a9de9b39aa5fcf00d5b770e03b33007e2b67256f105632dbd04a167356f2a6a595dcc68964570644723b6725bb2dade40e8eeab73240f5120e7c4f06c0efe4ace46dc24ada2f30b392bbb84ec65e6e483c54762fbc6bd4323772bc9b63f21d82c915979931b99463f25dae1fc731994e2f721957fa7b5c3f8e2bddb647790f47c9fb5cbf9ea32493bdcbe59cea3f20549f77b999ea5770e01f12e00baf30035fc9817f4480efbfda0cfc5e0e7c1f057e8d19f87d9cc3fa38030e6b1547f92704e5375d6b46f96a8ef24f09caa756b8a48309e5f77394ef27287fff3a33ca1fe0e66b3eb39daf59c3c9e4f30c68f3414e265f1032e9b2c84c260f7132f9d256260f7332f92a033259cb817f9d01f047b821dd37290de9a82b1d0286748f72a51d48adb4e78d4a7b8c13dcb7b4e08cb629aee32cf53bc25217dd6866a98f736de7f754dba97f2a5dbf73c4a47d7c822bf907aae4888377c39894f12457c68f5419eab73fbdb2d2db09b49e53d84f84c2d6df62a6b00d1c4b3f532c7157504e8f7770f2e10a6fbc21d0fbd86862414adc19385d4e75a67381f7531cb507296ac5f42f7de18f7ef00db79c98d0f234a7965f08b51419aae5190efc5702bce6ad66e0cf72a3c7df2c478fcf51c062abe1efa90007dcb5f93c278eff11e2d869288e8d9c51fd411995b8d11e8d7b0c1c0cf3eeab1747c6c471aa097285193ffd32d519ed4c74bc7d43c52b4a9e6585788113cc9f8460ae3614cc8b1cf85f04f8b4dbccc0377152ffdbc4f1e4cabb96f52f0978b769792713c553dc579db8bed454ce9b3951fc4388e2e06233516ce1c0ff25c09b1acaf9250edc8914076f79a719f8cb9c1245035b4c89b58d948817c4a1ca5a1baa6c2bc7789860bc688919e3db38f00801bec610fc150e3c4a80ef37047f95038f11e04def3203dfcecda66645ec66535fa380e5f7ea22f6df7cdac189a4142192670c45f23a57454a5355e414c729f639b696819f63c36af27fe7b3653b39719621c439fb6e3371bec10d8d0e8f5043a3695d4d86466f72e06549f0ad46e0bb38b11c4188e5a6a56662d9cd811f49801f34047f8b033f8a7276cbccc0f770e0e508f0b6f79881bfcd55bef254e513b75b27b66814ffdc0fde6d9db84e34f1b2d964ee5e8ee90a04d30b969b31fd0e075e9100efb2c20cfc5dcec357b2f4f0ef71541f4d550f43aadfe7c02b13e03f18827fc0195915cac8c4cac500d79806b826e69d6f28945fb99ae6bb75361f6e87319b03f99063b32ac166a595666c7ec4815723c0a71982efe3c0ab13e0bf1b827fcc29a806a52031104ecc5e145a4d4a7dc2955c932a196fb16feffe9d194f4effe0dda75ce9b5a8d28f7012d355858e375de51d7a313de2b29f2bf718ae42248e98e643e7a717f09b6f7588f4338e92da1425e5154afacb6b8ec5e77ae6b8ef8e4d53129f73e56753e5ab471f93d391de64e2179cffae63e9bfbfe46af0b1543b7e9f590dfe8a93635d4a8e47cb7cfecbabfdd3cc13e586f529c60ef66b8ec97a04937d579931f90dc7647d8ac98a8a9b1289de8c479eece98bfebf37e351e8d43162f000c7600382c172860c7ecbd95e434bdbfb8ea3ba1141f59786547fcf2dbe358e582ebefdc0c9e3384b79fcc8c9a309218f9aabcde4f11307de941ade1982ffccd58166541d104003b4bb07fabaff8e35748a0739969a53fda6fbcd58fa85036f41f59b0cc17fe5c05b12e0db0dc17fe3c05b11e06b0dc17fe766745a676046e77f5ccd6a6359b3fee044d29610c9fb8622f993033f9e001ff88019f85f9c1b6b67ebc6fee6847d82a5b0ffe1e4d19e90479f3566f2f897033f91005f61082ee6d64937d6817263e2d0e230d9e72e74fb77f9f2ab6ae22ad222a7a7fb5b0c06c7c8a6dcc4a585280ae417d6284335642fcc817724c0eb3d68061ee1c04fa6c6ea86e0510a5cd4824eb6b52046218b5ad0d9b2166471f2e842ad633c64268fc3387974b59547294e1edd2ce5519a934777421e5b0de5518603ef4159f6c366e087735ea127e5154acb7c85eedf71f2a33be6d3416539667a11cc8c3464e6080ebc37e53f0dc18fe4c0fb10e08bd69a811fc5d97c8eadcd97e36cfe144b9b2fcfc9e3546a45d0501e1538f0bed47cf12366e015399befc7cdc0604b983854aeefd631a9039538e6fa53a31543e68ee6c00710e01b0dc12b73e00309f0ab1f3503afc2810f22c0cb3e66065e95031f4c808f3204afc6810fa1166b0dc1ab73d63a94b256b1bfccbb24bcabf23134de6ecd7a7035384687514b7a868cd6e4c08753438d7566e0b538f0d308f00386e0c750e062e6fcf4547c6c4b1eb83647f51904d50bd79b519dcd819f49397043f03a1cf80802bcea0633f06339f09104f86243f0ba5c7d3b8baa6f62ff90b791b6bf5c8fa53feb58e89c2637488cb7ac7ff508da5a88ef2686a63bffcd873912570be60367a3e535fcf9b05e13f4a18bc4dba97fa0e36c5702b5f4fe10fca1ef9c3f2722ee9c6fe7047da823f35c7037d6d7a7ac4b687014c1580d644c3711c113534003ae6ee41275e3f4e7ccea4643ae6e8ca6ea86f83c43e2e3aa899aa1af7ca4bf96d988a3670cb79625a818e7268aeb37fcf31a093d0e913ac72d476635b43127fe3cca636f3413ff711cbbf914bb836574307c07a348ee412d90bb7cbd5dc1793ef675a5cc8c7719b2a112240492ed34721d444fa797ebce06bba1a81c79d271243a1ac364fe0258ac2e74d4afb3e22ed8c6ae619431126f134e02632909d492d164f750755076b479a7228504cce86acad1358ea2ab66205dbd324655338eaaf11455757c54253b279a09fa9a73f44de0bab6c56f3153e910163d467e30442cd99bd1d282a36522454b0d1f2dde3d6e031def1eb75ed2ee3d7978352641a3194d2d399a265134b969ce19c65d8a565c190554196137dadff04ea2d65c0993a912c8f62e00bd0d873e85423f2cde24b54863c77d5bceb94f259c7bcb17cc9cfbf11cf8346a6c6d08de8e93d2b9a98c5002447202073cdd12b83d278e426a89d2501c2772e045d438d610bc03073e8300eff8a219f8491cf84c027c812178474e99b3a8ba54e4a8ddbbfe706c2231e990d8072ebe582f0623796e77395b0e8cf2a5afcc570e5a88c151be7c3a1dfa25a3dd584367a8eb5d073ae740c76d9cf4aa0de30732e648e4e9b28f32c6f16e67ce962d699e6c97729d49d08399217113e5f486ad5c037c67a1b89e8a89e59ecca96836a1a29b0c55d48953d11c6ebe7ea81b99e6139f09339da9f2c43dd4e7c51f282e4fec723adf7d50461ec82b564e67be9c2e1c5f7329be442bd1c2888fae1cfe055c338186e799b84959ddb8b22ea4cad23f7ca25eb7a7eef02e30d65d778e8e8b283aca283ca76b2d3db812e751255626adb39fefb062e2895925ecc951329fa2442008399b3652bda8f998866e3434c839745ff01beac6c4d11af3aff75decd25f5a1386acbae44cca257226e5e8629c0595cfcd83f4a6f423a20bdc073534924ee937ffb025355f0b17534d8c574d1fce002ea50c00371a7b6d8ff85a641130653a2591c379ffcba885866d66deff148ea9cb39cf2266adc6438388271cbd392e6f12a021f8b786464c9ecad1b190a2e32856b853a0113629bb2f55e7c459dcd0b04358e7d46ec308a8636675ef0aa2016dd158f051ad181fa99476a58b97251a7cf1a739fe392c46d7e5ab645d4eaf24ae4ef7e3ace26aca2ac4eab6f7f9269c78ea9f8635f4a7ca1435e89a48f12d7b62f46ab2656f00c7d0b55ca741b09398e834616420c7c875042331434606718c2ca21829058ca8a7cd4c5819ccb1723dc14a96212b4338f01b08f0c30cc18772e03712e0a50cc187714ab889524247873b75db08c65527c301f4a6f2591b48691b4f391e52da418a980b16f113203e4e3a3a6f5c261a06f1acbdfbacb191b287735cdd4c7175a4cce73f06a1726952f2695c4b7b0b3514de61d6d29e4e810bea6f4d655e23e03e9233a8e6eb38e1f6279568f315f4b579ff7d21e8f64dbe4f1fdcd42da66446364bb7c96649dc6752b2f4724dd8995cb7f476a25b7aed9c3ed15ab32fc936e9968ea0d4df44a8ffdc1255bfb7102472f4704e759f79d32fcd21dd3ffe14253481a39f639c493012ebe1785748aabd7def6d3f66b029dc61bc7ebb449ac4f18e730879e0cc6324651e427b77126c45912ddd3c96f0abb767510564bbd1bb2249ee749bd759fe32bad3ed6ccedaef26acfdf8b39f2e3fbc67df0126d67e0ed79e2e25dad37fdd3f26ede928aa2a35750ef1e0db5b5d9d9ec60060994b7f7d4d06cd994a700f33f40e2a9d33e25c4a6ecd84dcce398472f3f279d572881c0208df3dc0fd85f78814a621d3e5c6ee6585946cdd629ca74b1f27f5d15c5d5b49d4b50baf382134b6f6f2d226756d0cd711bb97eb88f1131e664b887954c96278775fc472f3723e87bcca16792c87bcda16791ce7f3ee277c1ed93e04f8bcf19c921fb05c6e9bc0c9638dad3c2672c80fda224fe2901fb2452ee0901fb6459ecc21afb5459ec2213f628b3c9533ba472d8d6e1a47f263b6249f4b218b49de75a9901c70ea613a47f2e3b6241772527ec252ca451cc94fda923c83435e6f8b3c9343de608b3c8b437eca16793667734f5bdadc1c8ee4676c493e8fb3b9672d6dee7c0ef8394be0b91cf0f396c01770c01b2d812fe4b4f782adf62ee2905fb4459ec7cd7e6db29cfd9acf4979b3a5942fa680c53ecb2da900dfc8035f42018b15ad975201aecf032fe0fa892f67a09f7829671a5b6d4de332ce34b6599ac6e514b0385ef14a2ac065f98b9a177236f7aaa5cd5dc1016fb704be92d3de6bb6dabb8ad3de0e4bed5dcd69ef754bed5dc30979a7a590afe580dfb004be8ed3de9bb6da5bc4696f97a5f6aee7b4b7db527b3770427ecb52c83772c07b2c816fe2b4f7b6adf66ea6e6dd9abbd1d044e7bf58f9a176406676dd676f2abae8c44bec164e17efd8eae2560a591c1779371592efe681177376f99ea55ddec601bf6f097c3b57f73fb0acfb7770dafbd0567b4b38597c64298b3b39e07d96c07771c01f5b02dfcd09f9135b212fe5903fb5455ec60963bfa530eee1803fb3045ece0ded3fb71cdaafe028fec292e2951cc55f5a527c2f47f1579614dfc751fcb525c5ab38e06f2c815773a23860298afb398abfb5a4f8016eccf95d06c69c6b38717c6f298e073971fc60298e873817f7a3ad8b7b9813f44f1910f45a8eec9f6dc97e8423fb6006c87e9423fb175bb21fe3907fb5455ec709e4b70c08e4718eecdf6dc97e8243fe9f2df2935c25ffc3b292afe780ffb404dec001ff6509fc1407fcb725f0d31cf03f96c0cf70c0ff5a023fcbd99bd80465656fcf71c8215be4e739e4b02df2460e39628bfc02871cb5457e91338d58d4ce3436712467d992bc99433ecc16790b875cca16f9256e06af742a620e98c17b99d35f194bfd6da580c5c2cae1a900072cac6ce3845cd656c8af70423ec252c8af72241f694bf2764eca47594af9354e16e52c65b18333b8f29606f73a278a0a96a2d8c969afa2adf6dee0845cc952c86f72241f6d4bf22e4eca952da5bc9bb38b2a9676f116075cd512780f052c5678aba5025c9f077e9bd35e755bedede50cae86a5c1bdc3915cd396e47739926b5992fc1e67c9c7585af2fb9c2c6adbcae203ce94b32d4df9430eb88e25f0475c1d39d6b28eece3845cd756c81f73c8f56c913fe14cb9bea5297fca91dcc096e4fd5c25696859493ee364d1c852169f73b2686c2b8b2f38591c67298b2f395934b194c5579c2c9adacae26b4e16cd2c65f10d4772735b920f70c82d6c91bfe5f4d7d2527fdf7124b7b225f97b4e7fad2df5f703278b3696b2f89193455b5b59fcc4c9e2784b59fcccc9a29da52c0e72b238c15616bf70b2686f298b5fb91ec689963d8cdf382177b014f2ef1cf04996c0ffe396a53aa6021cf441278ee2932d29fe93b38a4e9656f11767c89d6d0df96f8ee42e9624ffc3adec748ddaafecfccb8177cb00b898532785dddd56d8210a5958740f4b8b0e7324f7b4253942210bfbe865691f510a58f8afde968e2ec609b98fa590b33821e7d80af9304ec8a7580ab91427e4532d855c9a93455f5b5994e190fbd9221fce21f7b7452e4b21cb0f5566c01d1d4180b710377884463a87ee468b36ee2fbcdda1b972cfc3547901e89462373db449b2757560b4f87d0b2dc4973a42d932cdaeecf2123971e6da616ee91a141587d3335122772cfd48ca3484f606130268290440d0ae5b8b209b29ef28cec887d81a7939ce970cb5f425e5296041c830cbee5805cead0eb774ab15398a4fb3a4b812a7bdd36db57734877c862d72650ef94c5be42a1cf2085be4aa9cc31e9901875d8dabf267954c95afce957776c994578353cb39b66aa9c9d5ab5196f5aa16e709722d3dc1319c2c46dbcaa236278b3196b2c8e648ceb325b90e27e57c4b291fcb353d632d9b9eba1cf0384be07a9cf6c65b6aaf3ee7b92664c07335e01438d152810d399b9b646b738d38e4025be4c61cf2645be4e3381d4ec9800e9b70adc1d492690d9a72e54d2b99f29a716a39d7562dcdb93a3bddb2ceb6e0aa55a165b56ac9c9a2c85616ad38c738c3d231b6a680c5eccccc5480036667da70da9b65a9bdb69cf6665b6aef784e7b736cb5d78e23f93c4b924fe02afbf92553d9db73e5cd2d99f24ee4547281ad4a3a70e679a1a5799ec4e9fa224b5d77e46431cf561627735a9d5f325aedc47172b12d279d296471e4fc9254841f7032bb0b052cbe78bb2015e0802fde76e5fa1e9766a0efd18d03bf2c03e0dd392d5e6eabc51e9c3d2e2c197becc989e98a0c88a917d7c05e69d9c0f6e6a8be2a0354f7e1c0afce00780ea7df6b4a46bfa7702ab8d65205a77255e03adb2ad0976b451659b622fdb88ee4f5961dc9fe1cf00d96c00338e01b2d810772367e53066c7c10671a37db9ac660aee7728b65cf650847f2adb6240fe5ac79b1a5350fe3dafbdb2cdbfbe114b0b82fe5f6548003ee4b398dd3de1d96da3b9d035e62097c06671677da9ac5999c59dc6569162338eddd6da9bd919ccb589a0197711627e865b6823e9b93c73d96f23887035e6e093c8a93c50a5b59e472f564a5653d19cdf9a27b2d7dd1184ec8f7590a398f13f22a5b21e773c8ab6d91c772eabbdf527de338921fb025793ce7e6d658bab9091cc90fda923c9123f9214b922771ea7bd8527d051cf05a4be0c99c281eb114c5148ee2472d299eca99c563b666318d93c53a4b599ccbc9e2714b594ce7809fb0042ee444f1a4a5288a388ad75b523c83338b0db666319393c55396b298c591fcb42dc9b339293f6329e5391cc9cfda927c1e87fc9c2df2f99c309eb714c65c8ee48db6245fc099dc0b96267721278b172d65711107bcc912781e27e4cdb6429ecf09798ba5902fa680c54ccd4ba900074ce95c4200b768e54643139c43bb3777b0930f1f9ac48f2ae177dbba3bde35b4e24b6da28c224983c85168bc6bf7654a5ee4cedaad51b1b3b69943edaccd14addc9edb059c856eb3b5d04b39e4576c912fe3905fb545be9c33feed96c6bf90037ecd12f80a0a38db8dee8826f9481ffc63f491be2ba9d28e75a3af53a5d52d5e1a53641fbec8ab38067796048357730cbe51620c5ec3353e6f5a363ed772d564976d35b98e43de6d8bbc8813c65b96c2b89e23798f2dc937702df1db962df18d1cf05e4be09bb82af54e4954a99b3936deb564e3160ab89e1b7d2f15e0693cc5b772b6f2beadad2ce6ccfb034bf3be8d23f9435b926fe7903fb245be8313c63e4b612ce148fed896e43b395bfec4d296efe248fed496e4bb3929efb794f2528ee4cf6c495ec649f9734b29dfc391fc852dc9cb39e42f6d915770c85fd922afe490bfb645be97b3b96f2c6dee3e8ee403b624afe26cee5b4b9b5bcd35b6df9544637b3f555a7d37fabdfba0b62e208790d11c1efc010efc870c80afe1c07fcc00f8831cf84f19007f8803ff3903e00f737679d0d22ed77254ff9201aa1fe1c07fcd00f8a39c487eb314c9631cd5bf6780ea751cf8ff3200fe3827923f2c45f20401dca2b553e29376dc779ffaba5ccc9138fddc5f85cea40c7f25ea4fc229b76823f815d37325475555cfd393d3837f45717ab0e4cae7a6079fa40c4b6caaf93b6abfa9663dd734fe53124de306aeb47f4ba2b4a7b8eaeec4ecabfbd31c782803e0cf70be241cb3f325cf7254473240f5731cd5514baa9fe7a88e6580ea8d1cd5599654bfc0517d5806a87e91032f9501f04d9c484a5b8a64334775990c50bd85033f3c03e02f7122296b299297b9e1d41131cbe1d4568ee4232d49dec609faa80c08fa158eea729654bfca515d3e03546fe7c02b6400fc354e24152d45b283a3ba5206a87e9d033f3a03e03b399154b614c91b1cd5553240f59b1c78d50c80efe2c0ab65007c3727efea96f27e8ba3ba4606a8dec381d7cc00f8db1c78ad0c80efe5e47d8ca5bcdfe19a9bdab6cdcdbb1cc9d99624bfc7915cc796e4f739928fb524f903ce36ea66c0363ee4a8ae6749f5471cd5f53340f53e0ebc4106c03fe644d2d052249f705437ca00d59f72e08d3300be9f13c9719622f98ca3ba4906a8fe9c036f9a01f02fb8d98766b112987df89263a5790658f98a036f9101f0af39d36969693adf50c0f5dc68ab548003760b1ce0c4d13a03e2f896036f9301f0ef38f0b61900ff9e53e4f1968afc81a3ba5d06a8fe91033f2103e03f7122696f29929fb95eca8931cb5eca418ee4ff47de79c04751bc7d7c9162435111151541118c0dd308600fa12a48c72e86244024104ca1d87befbdf7de7befbdf7de7bf9db7bd77767f68efddd6527b9cbde6ff24c5efd40b8cbdedcce779f9979e699a76c1af3967f31ddf266716ff957d32d6f1ef3967f33c9c61639908ddf4d77bd65ccbbfec374d75be5e0aeff3435be750e1affcb84a4342692bf4d773d340777fd8fa9f1b21c34feaf09c9b09848fe33ddf5f01cdcb53af2886c7c440e1aef606a7c640e1a5f22aa71c57b544cde1d4d773d3a0777ddc9d4f8363968bcb309c9b6319174896a58a7c98fbb222c69bae5b1316f792913e8ed72007a69d35d8f8b79d7cb98ee7a7c0eee7a5953e31372d0785713928931912c67baeb4939b8ebe54d8d4fce41e3dd4c48a6c444b282e9aea7e6e0ae573435be7d0e1a5fc9d4f80e3968bcbb89f78e3179af6cbaeb9d7270d73d4c8def9c83c6573121d9252692554d77bd6b0eee7a3553e3bbe5a0f19e2624d36222593daa61e58fb57be7083392725c4a7816a57f87d2810ddfb146d477289f9ff2cef17d7ed68c6abc8fff727a5407e2dac17a99bead82f16d6b9944aa320722d5dbd478550e1aef6392d71931e5756dd35dcfccc15daf63baeb5931efbaafe9aeab7370d7eb9aee7a8f9877ddcf74d7b37370d7fda31ad7b9e33bc7d4ced733b53c276ecb79a696e7c66d797d13eada1ca0dec0d4f8bc1c34bea1a9f13d73d0f846a6e9b68e31dd6e6cfab67ac6b70d30816bc801b84d4c8d37e6a0f17c53e3f373d07881a9f1053968bcd0d4f8c21c345e646a7c510e1a2f3635be570e1a1f686a7cef1c345e626a7c9f1c343ec8d4f8be39687cb0a9f1fd72d0f81053e3fbe7a0f14da31ad7e9e33bc75ca83633ddf68139b8edcd4d8d1f9483c6b730357e700e1adfd2d4f82139687c2b53e387e6a0f1ad4d8d1f9683c64ba31a5769320fef1c2f4de6d0a88695d81e9149c3cd04849699eef8c898773c2caa61a5a51f9549c3cd68e9c34d63fde8b8637d8409f23131218f8c6a5825393d3693869b49723acac4e2b8b82c469b581c1f93c536a65b3e21ee2d6f6b92b813634adc98a886953de7a4cef1ed3963a31a57f5024eee4ca917b09de9fb4ee17cdfb8a8ef53f9984ecde4a93497e1ded4f069311b9e6012fdd3638afe4493e89f1157f4279944ffcc98a23fd9c4e2ac982ca698589c1d97c554138b7362b2d8de2470e7c614b81d4c0d9f17b3e11d4d0d9f1fb3e19d4c33e2053998117736357e610e1adfc5d4f84539687c5793505f1c57a87733ddf62539b8ed69a625e152ce92b07bd4f7a9923597652296cd94ac2937f1bf3c2effe9a6917445cc915461bae52be3de72a5a9e5abe2b65c15d57237ffe5d599c0e8676e788669eabe26e6d43dd3c4e2dab82c66995abe2e6ecbd5a696af8fdbf21ea6966f88dbf26cd303bc31e603ac318dbf9b628ebf39261637c76531d7d4f22d715bae35c1b835268c79a65bbe2dee2def19d5b2bafef64c6eb9b91cf8a65bbe23ee2dd79b64f9ce98b2dc607a7c77c57c7c8d261677c76531dfd4f23d715b5e10d5b2526ceeed1c5fb15918d5b8526ceeeb4c516c169930dd1f17d35e264c0fe400d3de264c0f7230ed631a000fc51c00fb9af83f1c97ff7ea6961f89dbf2fea699f1d19833e301a65b7e2cee2d1f689a191f8f39331e64128c27620ac6c1a6e1f3640e86cf21a6e1f31467f81c6aa2f4744c4a879924e699b81273b849c89f8d29e447981eec733978b0479a783c1f97c751a611f442cc1174b449365e8c291bc7989ee04b319fe0b1a627f8720e9ee071a627f84adc2778bce909be1af3099e607a82afc57c82279a58bc1e97c54926d97823a66c9c6c928d3773201ba79878bc1597c7a926d9783ba66c9c66bae577e2def2e9a696df8ddbf219a667f85e0e9ee199518daba5f7fdce94a5f72cd3f77dc0f9beb34d8fe5c3b88fe51cd398fd28e6983dd724fc1fc714fef34c2c3e89cbe27c138b4f63b2b820aa6165e8fe2c93869b31745f68bae3cf63def145a6a7f745cca777b1e9e97d19f7e95d62bae5ffc5bce54ba31a560bec579934dccc4a7c99e9e97d1df3e95d6ebae36f62def115a6a7f76ddca777a5a9e5efe2b67c5554cbfdfd97dffbeff58a5878d47f4dbe605a47e3175c1df505ca75ea874c6837e33a758d89c98f71995c6b6af9a7b82d5f17d5723fffe5cf9d7390c3ddd4f82f3968fc0653e3bfe6a0f11b4d8dff9683c66f3235fe7b0e1abfd9d4f81f3968fc1653e37fe6a0f15b4d8dff9583c66f3335fe770e1abfddd4f83f3968fc0e53e3ffe6a0f13b4d8dff9783c6ef3235ee75c9412a7053e31d72d0f83d518d2b0570892ef114c07b4d1379c72e3127f2fb4c3c3ae580c7fd518d6bbd23131ecd28280f981aee12b3e1074d3896cc018e874c77bd54ccbb7ed8d4f0d2311b7ec48463991ce078d474d7cbc6bcebc74c0d778dd9f0e3261ccbe500c713a6bb5e3ee65d3f696ab85bcc869f32cd4a2bc49d959e36ddf28a316ff91953c32bc56cf85953c3dd6336fc9c09f2ca71213f1fd5b20a53e891c92d3713a6f08289c52a3159bc686a78d5980dbf14d5706fffe56a9934dcb583b1e1974d4faf67dca7f78a89c5ea3159bc6a62b1464c16af991a5e3366c3af9b20f78a0bf90d13e4b562427e33aa616526efdd25be99fc2d138f3e7179bc6de2b1764c1eef98e6a27562ce45ef4635ac54f2be3155f2f74c90d78d0bf97d13e47e31217f6062d13f268b0fa31adec07fb95e260d9f69b6b97d646a382f66c31f4735ac5eaeef37bc46c4f88b1c839dcd483e310df00d7230c03f3535be610e1affcc24d81bc515eccfa35a56d76f9cc9d36cc610fe4554c3ebf92f0764d2f0c16631f9d2d4f026311bfe9f09727e5cc85f45b5acce470a32b9e566ce47be36dd7261dc5bfec634188b723418bf8dfa82b5fc97c59930e962d63cbe334dd503634ed5df9b9e6249cca7f883e9290e8afb147f344d4a83733029fd64023d2426e89f4d3c368dcbe31753cb9bc56df95753cb9bc76df93753cb5bc46df97753cb5bc66df90f93dc6d9503b9fbd374db5bc7bdedbf4cb75d9a83dbfedbd4f8d01c34fe8fa9f1b21c34fe6f54e34ae31b1653e3fbcfd4f0f0980dab5389c88647c46cb84354c3eae5c81c2d8b4b447d817a90a372f0203b9a1a1f9d83c63b4535ae86e536718765e7a896d5f5dbc6d451bb4435ac54c9313155c9254d0d8f8dd9f05226c8dbc585bc7454cb3a55774ced6619d32d8f8f7bcbcb9a06e3841c0dc6ae515fa074d4893175d4e5221adea4d87fd9618ec72c493ed56fad4c5f31ccdbd6ff9d2ab4adda0cde1fefb7982cc25daabf61436fb2ffef72bfe5d9baf4f64cff73e57eebe5ba3877f0a9d4b69a2f4d3ea94b4469f281aadf05fa3df6dd75ecb094ff3df3fcbba9d765c5ab35a5c8bc8ac1a50a63836e347169dfa69706d71b0a9f4feea20a9fdbe99da900faf2a6113825ee08ec16d5b2e23135e241c74e5fb942d4b7f5f35f6e9f83a3be15a31a5fc77fb9435457cc6290fe95a39a49f21ef5956a16d831ea2bd530a1ca6ffa9d2bd135dc7977d373df89f1dc57367ddbce8c6feb6192b25d722065ab98bab22ba32bab9ad4e0dd62aac1ab991a9e16b3e19ea6257df71c2de9ab9b54e0f21ca8c06b981a9f9e83c6d734cde2157167f15e26fdba32a67ebd96490dae8aa906f736353c2366c37d4c9067c685bcb649bf9e1553bf5ec774cbd5716fb9af6930ee91a3c1b8ae49bf9e1d53bfee6762521397497f53cb73e2b6bc9ea9e5b9715bce8bda6d94f82f3b4cf198bb8dd49683eb024d76e7c42e618efffb0abd37a8f17f33bd85dd436d9454446addf3b4d6ddb349ef32b9079316bdbe6972df330793fb06a6875f17f7e16f68baedfa1cdcf646a6c61b72d0f8c6a6e9a73147d3cf009316333fa616b38909cb821c60c93735be30078d1798e470515c392c3429197bc554328a4cbac0de3175816253c3fbc46c78a009f2be71219798948cfd622a19834cb7bc7fdc5b1e1cb5380df25f7698e8d95b9c4afdabeab40126fb65e9808c97a503f5b2b44a937e35ffeda6056988692238280713c1a6a6077e70dc07be9949e93b24a6d2b77954c3ea98f950ff17eba535dc61989734c9a51ad1b6f3ff34780b34ffa4e16d8037cdff7fb4fffb71fe6fe66a2953ef4cf1ffadcc308bbce1faba6afdbb917e4b4a3ec7f9cf6e0fff67857f85ba1a9fb992c55a2db5e5fe67b2391cdfc2d4cbc3a27a79d8e25e4ef12af53808c6cc1cfdefd17a34a9deccd086463566462fbe72b83f92aaf41513752faafcfecdd7570f48f447fdb6d26fb151f74bb59b4a2f6c415d9fdd7d985a9aec5f51e7b3aed2ad225354eed2794ff5dba9f6bf391bd25b9a481f6e9227fcc6a04f45fe67025ab5fe3c35cd978d3afdcc83de4ef666e9e79f7eb7e167cdefe74a9eb632f5f288a85e6e99d64b641ef473847e6273741fd3ef32f509e16f9a1b2bf8a96c7ab6b5a9674746f56cab8c9e5fa92f4395607a8dffe4c2df64d3b75253df8e8aea5b495adfc6eaa7332bd133f56a619bf564a8a9274747f5e418cbf359f89961fecfe4114da52fe5758959be3e0b294776e65ea8b5a4516b0138eb299d2777735b9989fa3151d44b331a1b63348d7a11b3da3053ff8e8deadf18a254a977f7d45fa37a1568a8d5faababbdbde06426174f75b8a9d7c745f57a8b667b6dbed389ba2f8dfefb0d893e265763f56e458250d371d1faa739c2d4afe3a3fab563d69add24fd9b54dd2eaa05d3516d1c4db035cf79a489c709513cb6b5b266b357f351a63e9f68d253b29381a40c8ff17f57a11bc2e79cad4464d3b3d1a69e9d14d5b34d0d3d9ba2c7674d42370976bfc95dcbd4c428ae6cf234387b946d4c3d3a39aa472388b36ff2a9aa6bcafdbed6e8d53b773dddd6d4d353a27abab9ff32f39922b507e5fabda0778ac928fd94ebf46ea8c25f7117e5b057634cbd3a35933d41eaf7a28630453f853aff5a350e6736b3faa5b691bb9e8d35f5ecb4a89e95b5387366b62b30cfa1cded595b3b536e67eae3e9517ddcc0289366599c9b90d65cddf138d31d9f619a2f32792aa3752f94ee559e98179b8e91d63d99d6cbdf78534fcf34eddb327d36f5593c9b5ce820134c3d392baa273b11e7f891bae7e3b59d7766625f3655cf33d58be7fc6c6820db6c884c3411393b8a481579271b8f48a63a426b24679289d339519ca690399977fcec1134d9c4e1dc280e438d7381b24c4cf72f4ace7e63f4536f5ed36b7956c9450fa7987a785e540f4767d9c3edb544cfcd6014dbeaef54537fcf8feaef44a2642757836cf4de5c10d8de44e0825ce9c3c1dc560ada30bf573b987a756154af466629c7c3f5e95f6d6297d9d632bca3a9af17992c83d93ec111fa8aa6d2983ebf66de6e36fddbc9d4bf8ba3fab7598c1d5b835e79e7fafd9b91b0af987b35b9c9b5d9f46967539f2ec9ee99a5cb67a9b6e3a959a525eb0077a5dcc5d4bf4b33398933ed0f860bdb1bec6aeae565a6a7988d452a55570e7fabce539bdf7be66a97b79ba97f9747f56f5daff93387c93e65c65d4e33dde515cd9f1c64f31426b5ea293047d8eea65e5f19d5eb8d8d33c8e4c5be393813ce587c5aa6349cc648edba75a787e5a6fbbe2aeabe87b438338cd69e07ea6ca3c69fd9ebfcbe29ffa29667875ccd01d34dfdb9dab427687e8c285bdb78ad27d747684a999c542afd72460e7b5861eae1359958e0a24f1e33b1f4d83c7dac34f5f1daa83e8ecaa88fe9a7ab817426fbdc96bdad32f5f6baa8deeed0e218e49e46b1cfa96698685c1f4563a3b4f5a368719067f2e718ff1eea9be896b99e47679aeefa86a8bb2e6ad5aa97bc77d59ff0942d777238cbd4871ba3fa5018ab0ff3e0f7a323f632ad7b0ad5a61edc14d583e12dca8ed291667bca06903a5bced1f7afbc64ab9b95a0f453cfe6be219b7eee61eae7cd51fdac6cb19fc3745f92a72fc10913ae8081d61b36994dbf32bf32d72be56c13a55b3291e796a52129cbc17d5769cfc4b9da96942b8b788da907b79a7a80df5aa69f6660d56a00addfbc8635379fb76e44ce31f5e0b6ecec59494ff55afd6a6e93f97c668435816703996bead5ed267b566bc7df44dd7aed623b5de6a32e57a3a8d6d4d73ba2fa3a38465f8359665bffef4509efa7cc56f66c7a33cfd49b3b33b11164aa5d24dbb6bf32ec69eadf5d51fddbb0d573dee81cea4e75a67bbe3bea9e0765f94c700495b6b85ac7b503d49bfa724f6bf69f81be31c9bf78ba175843c391137fc7d2baa7d560eae1bd266fabd6cde8f6acbf8da61edd675a6533bd8bd41e292f23e5615699f3ddc77c530feecfee24d4d48360662e5b7cffcd8f21c6335a60eae103d959e89b9e369875faeccf8b5abfca2e34f5efc1a8fe6ddf640e9ce80527f1558bf7dcc1efcb129a8e621f584d1b12bfaf4f93ce497e8f9406abdac14f355da95af35dd9b0586462f150f35ed8b96391f9e96836fddacbd4af873389afcb45bfc67ba9898fcc523e3521e16aa41665d5cbbd4dbd7c2433dd387e2f277aa9399bccbd9ca0ad7f0dbad5b989abb3e9eb3ea6be3e1ad5d7dd8cb3522aedccd6fe4c5acaf4aadc4bc1be26328f9974baccc9845e94493b67106191f4d0c8755ff633f5e5f1a8bee4b7aa2faa1733139f6ad4d2dfd49e1a48bb9a79b2b9fbfd4d77ff44ae4f454bfdf932d0c095655d5d35ca537e35337dbda1419f858fd5d755e9d3945cf5ef0053ff9e8ceadfd6c6a753aadf9d03f386f26aabd36b40d0cbe1ba7f358be78ce67a90abde1d68eadd5351bd2bf632b3003577a7cddbf45bd78b834cbd783a33ffe4f05bb3df17a5f695fdbc0e36f5f41993053a5a1ac72c1e6763f5089cdd4a6db5693bb9d9711c62eae7b326cfc44c9ee8d844545cf5e2de99231cec3ed7434dfd7dce348bb6bcaf6fc97fc6e619e461a6fe3d1fd5bf6d8c729b8c8c9e91e869995e31e6e8fe66df3ba61de370538f5fc8cc272a5a825b8ae16d9dd4b6feb91e61eae58b99c5eb44f7b2e5781d9b63f348531f5f8ad3c7617aff57adf74b6ddfc7a34c7d7c39aa8fe5c6f119b5e331cfc08bb2dc3bb5dd7ee368139f57a2f88ccd4a471fa6f793b9df73e5422e8e31f5fbd5ece2a1ccf376bef2e9b320e1c79a7af29a6914b7d66f30b0eb5768eda8d65be0ffbedc6b39de3e17a703c799faf87a541fb7ca491fd55967758bf357fcbe1d6feadb1b261d3f7edf8679c1498f7a3eeaf508bdf764f7f404534fdfccc4c2959b9e6ea7a592dfd7134d7d7d2baaafdbe6a4af53f5a86bd4d6bec087acc2ff7cb9d6381a5bb01ce4a2cf2799fafc76549fb78bd167b498946abb8f5a4703ff3d4562929e9bd46adcb2a7572e7a7eb2a9e7ef9856d1dcf61ce30843eb0bbfdfa798fafd6e267e63f1fb6d6b8e3ed5d4cff74cbbbc5c4bb67a6d732c9f66eaf1fbb99ebfa27b9c9ca76df6f974539f3f88eaf3849cf7b9ade7ef334cfdff3093671ec70b34b3136386dfcf99a63e7f14d5e7a92df6d9eca515ecfd391ea0b978fa6799487c9c49ec4053ff80a6de9da1ddaea92cb7ce57bef5f69db34dbdfd241b9fed96b33a8dd6a737e5893b6eaa77b6be07e7987af06926fbbe96bcbf82139086c4fa9a895721c387f25c531f3f8bea637aeead9667a4a45dc1bebfe179a69e7d1ed5b3cdb27c7aad996be2cf20e79bfaf445667e1ad9f823d624f47afb327981a9975f46f5b220cb5ea244b6dcbfd678f25e68baffff45ddbfca69683af74dea2deac90467a5d3758c7d4d62ae4bcd085107578dd7af92bf31adffd1df90fed9b8527b9189c757d9594033e53193c8239b7e5f6ceaf7d7d99db8662b07b633835c62eae73799c48234d56b32d7627235e35c6aeac1b7a64882dc4868a57e56f55ef4296b6bedd597997af39d6995c88ddc65de9b5c48dde5a65e7e9f9db777f6cfacdad7ba67e8fd62cbe76fd9f4e80a538f7e30d9a973f5dcb2e9512e9edd95a69efe18d5d381395c116ab5052f574fec2a533f7ecacef73bfb95bee57ee4e2395d6deadfcfd9f94ab6f6398df2afc9d5b3bac6d4975f4cbbb9dc3eab96fa928be775ada98fbfda795e6372f8bcae33f5e5373bcfaba5bee4e2795d6feae3efec35ac4a7bb02d5a9cd525574fed06538ffe60af61d9f42817cfee46534fff8ceae9901c3e3b65f11c93b8b6e9d95b6b9fdc4da6fefcc5ddad64d39f5c3cb79b4dfdfc3baa9fe6b8ef6c9f9bf26069391ebfb54fef1653affe31d99673f3f4b2ef552e9ee1ada6defecb7d8635d467789ba957ff719f61f6bdcac533bcddd45bf52182ee8c56a119ba17e12952bd17d600cad5d3bcc3d4bf0e51fd8b6ff5aacf41ff72f15cef34f57b89b678aeb95f27ef32f5af635b3c577bebe6dda67e778aea77eee65cb4e2e67e94de63ea55e7a85ee56ececdbe57b97886f79a7adbc5de33ccfd88bccfd4ab25ed3d437be3f07e536f978aeaed1639dc77247758ca9231d14bc63fe5ea293e60ead7d251fd3267946ffdce31f37ee5e2393e68eaef3251fd4d3f9fce26fa359eaf6e367d7ac8d4a765a3fa64aa7715af4f2d7b5a67d3a3874d3dea1ad5a3d6f9c5a7f7288e975a367d7bc4d4b7e5a2fad6bacc90e97dcbc49f349b3e3c6aeac3f2517d48cfd0d4ba3e64139b914d5f1e33f5a55b545fa6186740732699e85cba99f806dacc38f3b889c30a511cfa7b2d659d0debff55e977553491d91f299b3b7dc274a72b9aa4af75f999e6e9392dac5dc3c863f4a4a92f2b45f5655b635f4cd9b392999ad27fdb74044df6ff3d2fb1ca66fa1da55e9deefda2acfafc94a9cfdda3fadc2f4dd2c2ef64cbd9d3a6fb5c39ea3e9bf3b048bfe7915e94978f39a2b9b579299f31f5a047540f76593c4fb74d4d319440d3dc6292da6ca83c6ba2b24a1495f46a8cc96fcc26723fec9969c4e5660e7fced4b355a37a36a21989cd64056b4b3fe7e74d3d5d2d93b1d97c26dc12afb885fe458d5bf5a96c7af082a9073d4d16bbe8efcc3e8344d03fd3fbb97a422f9afab7ba69c79ce9ec39a9c5d933d327d79a1de44ba67ead11d5af9256e9bee8f554bf3837fa765e6eab84be6ceac99a513d298ed513d50f4ebcc02ba65ef432cd04d9f742453b4cf182ca4d4aced4d5b9ebc1aba61eac15d583f48cca99f7007f3752afc42ae7a8b2c4e4b282f36ba6def48eea4dcb1581e357af08e78f5c8d9cd74d7dec63d2da7351596aa8ffb3f9da08ea37acaaea6f98fabc76549fb78e5cafd2331e05b10f816da232725e30cdea665db975bafe9ba6dead13d5bb86184f34d82f562c8eab4ac63c64fbec4ceda056998bf6b2a1f8968962df288ac3b3a468bac3f45d3b3fa7e9dba67eae6bb2e1659f01b2ded7e5822c6d9c3c90ef98fad02faa0f239bccd3e1b7e2881ea92d26c93c4052b25ebd6bea6b7fd35955eee552adb776b2d0be67eaed7ab9d32792ab137facbd6fea4d5e76f659734eddcc735ca5e76c6a4e7273cde1031387f5a338ecdc0a0e5159dc646715fed0c46483282699e6ec6bb98ea9ddd9eb23532f378ceae5981635ea49893c054df5e9323d5fd735a325879f1da7eb38263d629ad3ac5b6725fed8d4eb8d32b1f0447f7febacafaddd257c62eac1c626bf8fe6ecdca3133af2429f7cd3aa58b8c7c9ce6e65d69497f4ffefd06159ff9fc3f59541edcb5a4d429d206ca2960e9ddf3a582b062cb6060f48b11c87efab6f9fe3df911a079317db7d37f2fab4d4827f3f5d96f082ffd6eba0603724d4dc0e33d2b8059fac69e2b335403ff7b95e55e26c77c0e228e3ddfd67b5b3ff7f4bbd88b2800f001b38f6aee53eedeaffafae9ae3b752a1e73e35aea6fb12b364a247c9b67cd2ca91bdddf57413f554f3134f75894d9463025420ca4e9a5abe0b35f2ba748c96a1559b90c5311f75ef4103498b5c87e5fd176a78e527066ab0888689e85bfc3e1ca751dfb7b16e20b9b76bb1b92930b8a39aeba9852c58f08330eb7a2fdf67bf64e725f2d5732860c2eaae61a96712c4784f4a486a1257a823bb80ed9d4e21b64226b66e802d54cab7494cc8ca88e702ae372e0b71153171f5f45f0cd3bbae793eb0a08648528731c95bbd13083fe910222c66225c2165565366885a7d13287f2e00f3b60e810d64034beef747e97db46aa05c9f32aa013ace9bed04b01b960a81953081ad0c1256df0ec0adb06c086e1013dcaa00ae2cb1abac4b1998e312e7db75fa84d30d15e4965121bec14c7c2b45c89d6a5039b38ef72f6ad4efbab1a2eeee85d08630a1ad0ed0823db4b24e2fd45a5cb5fe58602f7151f2de181f42dc943de3a52e1123f4015890362828c6939cf95c0097d73504b71913dc2a9e9738c5ce4c977301de29a0c96dce84b7060cdd40eab0a461e8649d3e74dd508847dd1c62dc828971392f6a0ba63c4f6738325cefb92244b52513d5b22071e33c74107501d3f8b5424c5b31312d0d9886eb8157ebc8a6ea9ed542445bf3ed1ec1b17e832e60a61a9ae2bf5399f8b70bb8c66c11e22a65e2eaa271d53ba544745a2e84339409c797593d1b0586c7648047e06236516b65aac8c05cad878d4f1cd8b900f08ade21c032febe53ad80e3bc058933867a5d077c5e4a244ca044b8b285dae79210df3026bea5bcd473021532e402a04e2b8780863301ade885dba3b2c48e32a8fb58e3dafad82f443682addb635af6648af3bac58783759167526e0ccd57d60f318e646b626a6928f3420f363710cd83c97f147ffb939cbdea53ce04dc4075c37521aad1b626faedb59ae18645e2851e21a06dd8c6c4e4ac35dc5ba87bdde8258d37e3fc8f050ee113f560acd4435339e7b90051fd9784b82d13626f35296a88db696c2a463e582bd13e51ef4ba09afc67396ade99774788730c13672fa5dd802c2ad7840a1f9b9add1a13165ab70d8e2b770a518e652f156ac82687efa2c4262b88a27201d531b0aa6ec737010541d46109011710ad36284434ced6a189523c30c63c790ee092bde3f7254370e3d98726080eadfea5fa180565ce0d1d6e1f38639fc084d7d50b7538952d6ebabf08ccd46bec4c27407dd13d043591096a99c533d830fdd5c1ded30d5dadb228843489ed1b3456cf51b3d3eaaba95c5a75fa9b5c00b6fb1221b0c9b6dc0dd21557546f8374000d8986dd5069df280b214e61cf616a50baea94fc040ccfa976fd325213d9543aa662d4800bdff66c1523394c03ed3ec87b3c43bb51a9b8bae1bace4d40c38de1997f4d086f0726bc1e11f0ccde182ea07be68610dd8eb65cf8545ca1cb0eca5f9786d076e2430b3535976d194f740ea1ed6c4bbd5571542e6dd12f802dfa2eecf573b83efc6dd45f1e9a229b1e14bb00ee1390ae5dd9a16349c5c355176415c49784b51b3f5e2070c00bfc81dcb6c76e0e52368dedf832d18756e6055977f6d441c7ee033c425bd296ec9cd6787a6ac3d687ca6647dd1cd4dbcd0bce16e6e9771b123b8a94205f956d5cdc9def8e41ba79ad3eb6cb6b719ecbcb3828232f6b5ff0bc564603e66564b5c98b7970949745446c5e5653605ec60a5f5e560b785eabe693bcacecf879596dc9f3328abdcbcb2ae02c2f6bf379d43d9bc33bf29af86ae6356b73ce8b741fcb8bf435c8337816e735e3989d67f081c96be1342faf556e957919fa7ae5c570700a669de602f3f38cc6ebbc666d67798663bb3ce36e212f0347e6bc8c426ef332defbe6b5da889ad78a08c3bc56478825bf2d1bbfd2bc0c02e2f35a88d8c8cbda7a95d78213545e96269dbc18a1397939f0ff0873bca03212e666c957395ecaff9fa75fc957e957a62b089b770920041a7b858de0fb226fa0fe1964dd51da5430bfaacbd2be73cd26df3951a778554f41b599d4c4a3be7de9145d7dd1121974a835fafaf5707a54c9768d52d8543aa79a84a425e56f5462199be8354dc96701ee2816dcf5016e1513ee9a09b835fe45351a5a38db04196ab1f9b023d3fca14ec3ba62261d6d557821384dcd606fd253877a7329e4a67983fd6ed0702ecfc2b923e09c2909e71027712e029cb324e12c701367c71067b5249c854ee2bc0070ee2109679193381f009cb325e12c7612e79b80b34612ce814ee2fc0170ce9184b3c4499ce8ac3f5712ce414ee2dc1870d632716e14813317f9e4958d88867d721712f695ba84d8e731b1afd502f6a2c520c35219b53ee4aa844cd3d04ee84442bb1d9c1eef69c3165590c8e36ed516459b10ba7708f1d5d9985f671a67d82929469221fe8245c3d99585735dc0592f09e76027712e03381b24e11ce824cefbbc1067a3249cc54ee23c1f70ce978473909338bf019c0b24e12c7112e7cb8073a1249c054ee29c0e381749c259e424ce2300e75e9270163a89b31170eecdcf7d663693a4d6da29646e294f66c19c0546927d24c1244a260de64e00735f4930073a087332c0dc4f12cc6207618e0198fb4b8249342cd3606e06300f9004b3d041982500f3404930899e4b3498c500f320493089071934989b00cc8325c11ce220cc3900f3104930073b08730f8079281366ff0898d1357d4b75b572e556abe23f02aff3e9de084f45c234e857d3986b7d3f16ea2a38723bac2de536b5d4307546a53983bf0e727bb82498c4b59e06f35d8079842498442d9406f37d8079a42498c4399306f3038079942498c49d3b0de64700f36849308936251acc8f01e631926012ad9d34989f02cc6325c124dae169303f0398c7498249dc1fd1607e0d308f970493b873a7c1fc1e609ec08439d04b0d325451bcea1654a873834ec6914ca950e6a9b41e8bfc9f8dfaeb6a35ead480f6e63d9a89bb279afbe235b0153dd14686479354a73a3810f5005a84e7184079921494454ea25c1ddcbd4f968292aa9dd250be0952798a8d2ca4ea92b9ba99289425fe7e896ab4ebcc02391de2924e9502926816a181dc0d409e260524d1584703b913803c5d0a48a21244033912409e6163b951cb89d23f5572b7d4744896b2877467a12c80ec21673251167aa98abdba2868aca5f42cd1674d137c9241feac3afdfb5ab64a4f4be07214ecadce623e8282b44750a79b29d70d048d0c4b3c14b53faad0746a752a3b95d0ad5c1fed3536d955a56e6f5d3c915a1f54aeb3990fa0971766fdca3423e2b4c4836a5280c081cdea642f047b8e9cf3fe214e7aef7d0f527aae24982e7aef5d0230cf9304d345efbd8b00e6f99260bae8bd772ec0bc40124c17bdf74e059817da484390efa5e6c50b3da2d2b3705ada38acce427b7c8710ed454cb4fdbc700f5699a69f0ef582e4dc557a1b81fbb2e476a2de16689a76ba1decd02e6682ee6e90e120b7a3158834abea3320ad97d888be33995eb0b92032947850bd240be7e12093974ac239c8499c7701cecb24e12c7612e714c079b9249c039dc43903705e210927d5c98786f32f588aae9484b3c8499ceb82745e250967be93389f06e9bc5a12ce0227717e0538af918473b093383f81c17ead249c439cc4d917ce51af63e24cd66548964f19ef65568ccbe5c30f75e099847bbd0d0349feff530349194c0a37b4a5f359faa4e0de84500b13c28d4c94dd12284bd2805a90431abce760c0df64430ef3b5574a8d57d9ee8ccbf5a036ddcc4459eca5ba44ccd1599a03af9232bd04cdf03f36d3fff72c3da7aa53fbb0765e32d570b2d854f2a79a75d5f5f3f532a6aae0511d23688fa1bc53f8186eb1311d0cb63f1dd0e0bd01d3c1ad360ef232d355a999476973eb723021dc2609a68b6a7f378079bb249844b71c1acca501e61d926012831f6830970598774a824974cba1c1f400e65d9260121dc668303b01ccbb25c124ea9534983f806a748f24982eeed9ff0398f74a82490c1aa7c15c1186f97d92601283c669307b03ccfbdbd630e77a88c235b0137f808972032f3d4c27aab87876a5ada8c8699151ef82efe8834ce43dbdeccb0910e7565acaf6fb613a78481a50e2fc4a03fa00007d581a50e25e9e06f47600fa8834a0c4fd3c0de89d00f45169405d2c7b710f007d4c1a50a22d9406f45e00fab834a044b58906f41a00fa8434a0c4fd3d0de8b500f44969408976511ad0eb00e853d280126da334a03700d0a725012d7454b1ff0f3c9a9e9106d4c5ade7bf00f45969405d549bfe02a0cf4903eaa262ff27007d5e1a5017b79ebf01d017a40175d138f22b007d511a5017d5a65f00e84bd280baa8d8ff0c405f9606d4c5ade78f00f41569405d348efc00405f6502cdf3528ff1e6fb97567b2a22243dc59b4aefa652bcd4ea63bdf6756afa109c9abec6c4bd8cc63d4b07d48cf12f9ba91dc5eb78c868514b4af493c85e67225bc30b8318923f55a6c7d1fec7e7ea8f553549b4e96a28d821602079a32d1d2152733ab998d1e92088507a534e0468a1a3e1de0580f32d4938dd0cf71e0e38df66e25c2181b3b85d45d00d027cef30f1ad97a61ea91ba849c41dabe02e2c64990cfb6a6fcad1b5a01cbdeb126c17eb347e03b0df63c25e2701bbc033652c3727dab612334a4ba33d0cf656ef3311af9926cf41a6e6209ff3687f7fd5be8a167480d22e1fd89c266a12a1b8231212591519566bd6215c0c8cb80c16c00f6de80f8139c5b2fe40db675d0d53c04736f6599969b32e4ae2265e88f2631b92a892b9b59fe0ef2540123fb1613935edf8d36bde157063496843fb34f0c6ff541a50a24b040de82900f4336940898a120de8be00f47369405d2c75b908807e210d28f1c09906f40000faa534a0c403671ad0fd00e8ffa401253aedd0801e0940bf920694e8b443037a1800fd5a1a50a2859f06f44400fa8d34a044c7471ad0e300e8b74ca06b7b4d0f9c835b49cf9ea7aadea94ae30bbc315e756277efeee1f3c570f8fc1d1370320fa93a91faff9887b41af6fcdf3341278b0de1d4105d2473b286a92c5433747373b8d6a8f359327c3ad8457fb031eb46e5d24df594725b566b41567f6402ed9bb1ac96ea77e7c0895499b6f1abb9992ab5f358904f8343bf9f5c804c34bbd0207f05907fb6b1bc15ff3f5dde4e8629e397b63d5c71ddf56222a0fc9589325970b82863b70bb765f45400fb9b4d1f00b57198aad324357ae9de2ba94e972ed6245d1a7c007e670f7d25970d5a2aabf487177993bca05ac438ff6fa584556bcceae6dcdb8da9269328ff60a25cc90b1d81e624bebcdce620a71d4d5f0208ffb4e1b35aa09d7c5409d7287f2a4b3847b0e6cc0d60cefccb86440e6a7712f92e48e4df36969d9615fda98905473555a48d32ee49e6cab0ecfcc3c48a956f43d3a0ba0535c0dd36ffbd0db2f9af8dd9325383f56027cdd595b0ddfc4f12ce214ee23c00707a4b09c259e024ce43c14eda4112ce422771de0438979084b3c8499c8f00ce8e9270ba7972fa21e0ec2409e74027717ab014759684939ad088867355c0d94512ce414ee21c02389764e28c3a5cc664ef45fedfca885cbef8a7729798ed5525d6791ada099d48683704b44b31d1f6f1528dc6f3c08a34c57f55a981a69b8fc30e510f3b566449eebfb04c2dcdc4bb6a0b1341ba1d9ee87e46b3c4f702595d46124ce29c4a83b912c05c56124ca2eb2e0de69200b3ab249844b75d1acc8e007339493089610f3498ffc002b4bc249844658906f32f80d94d124c17cfd57f01982b4882e96266a81f01e68a926012c36d6930fbc302b4922498c4505b1accb50166f7b684999e47c745dfb94701e6ca9260ba9896e84980d943124ca26a4483f934c05c45124ca2d24e83f90cc05c55124ce2769206f33980b99a24984443070de6f300b3a7249844131c0de68b007375493089c6611acc9700e61a92601295761acc5701e69a926012b7933498af01cc5e4c982d25c0c6c334aa96493b4edb0550ae250565919328ff81d403bda5a02c7412e5b180b28f1494d4a442349443c0eb7d6d1b8e33cadb7d8e0ebaaaf2c6e99ff55e9008a3ceb316b64a739c5907c25bd661e24c26b22c4884118412ea7268cbd75e88af2f135f0f90c661fe1bea56ab358972fd81bdbc204ec8d5388c2d3b8420d76dcb19129b9bc6d4266932792c9cf4f463a24c865b29990c93a9b7d704ea1bc14cd99f89359964a528cd072e3d0f9325a0b424c0c703d0f56c0c7925a7411efa69de181fe7486fbcbe9919fe8716da983d6943fe1c5886f2f8bb71ace135cd9badd10dd5e97f66279a1ae1ff54f9142a1d94cbe500e6fa4c982b2f5689829429ea062a6ccf97b4f0d46361786fc0c4d81f8637169b98ea258bfa4dd51eee8dfaf2a0e90a9dd543416fb4a7c4d3ec470d807a431bdeef6aadafd6e002dff729fecd28994dfe8c2a4541ddb9d32683a500ed4652d1524d7534b40fc23cbb31136d81971a58105df8477560bc6e767e22d0a04c839eebcdd54b59f361332e66103f0f6ca5036c2c74a63d57b2a7d39867f1077764b97683456a93b6ddbae251888ba74a0f8244e6db3855cab4a232d10e40aba6bc1dccaf05926012259306735b8059280926d14784067338c02c920493e8bd4483b919c02c960493e8234283b90dc01c280926d17b89067314c02c910493e88b4c833910600e920493b8f3a1c1dc10600e960493b8ffa1c1dc14600e9104936814a1c12c01989bdac8b68028319185b2e7ab047fc17b682829f5efa09abbbe7767e1bd16ce4637b321ab155e7496eef6603f1a02b2bab924982ed6471c0a30b760c24c263d57c7252a2b4db97f498d5705c725ea786f813e105137e6ba87d33cb0e06f69eb1c2af973a4a74e9c4afd8beb136750aaf130a3bccae25de9bf9b7aec473e86a699ef6601eaad6c389329c4f3bd30afbcdb92ba3e4c015bdbf030c9f7a2eac8abc614c4065b40696e113f01d05226d0953cf4156d4fb9bb2f068443db728dc7e6c8e97c6930af0727c732493089aa3c0de68d0073982498442332cf810c600e97049378bc41837935c01c210926d12042837916c01c290926d15447837936c01c250926d1fc4183793ac01c2d0926d1fc41837926c0dc46124ca2b3020de64d00735b49305d0ca7b919608eb1b1892c69779bc8315e88702c1361372ff4a8570eb2aa48b9eb61326b82fc6d27fb44883857d24e84fe8013a1714cbcbd8d7833f39e27ce9d34d9adeb14c21d2f192e51726970f704b81324c325eaa334b81301ee44c970893b271adc22803b49325ce21e9f067707803b59325c176396b607b85324c325da4d69706703dca992e1122dfc34b83300eef692e112cfa26870e702dc1d24c3259e9ad2e0d600dc1d6db945247f8ef63f3a577fa4aa4959735773edec0d16859d9840d7f152036fd15527f3a269440d9756346d7990d99d998857f7d0f3a4dc5be8df48a34e6c1078f585ae66ae2739980dce65bbd888c4c769608ab67cd583936454361e5727846e6003dbb56daa2766b27cb9a819bc016877b391ae30b3a318653770f164ab10704e9384939ac599867314e0dcddf6c09fe205290c1779c37533ea77caf93ca9628dd5e70db33daa3fffdf2c0d607548f95a6e27b1e69034c416567b5a9ad75741479dcec4b78997aaa3aa8b82c6e67a98ce70bcdf44bd17a4dc0cfcf4a3e577aa1724f1525f58c4d55e69a9bb8e04edb5c226fcca047ca5b32a256ba856a816f87fabc781fbafe463a96f322f075f1ee44071b182d35500bfd265f82e567cfa02e05731e1afeb35dd648cd20b5ea9170403cdf7aa9ad96ed43bbde1e8047ac70c1b29938a3d53da2f4bdb629affc258d816cf64a2ec0e121b6651c544a07479a4edd22ef24288b3f87a7099fe48831edaca22365c0fec5aaf0db3a9d2b6182b02da6a1b433db31d9b8b71056301e51e360ce1b85bc3069bc65b0f62ba27d196a17e90b96fb634a0447b02af9a0400ad9106d4c5ac00bf8315618e34a02ee6acf80d80ce950694e86ec453e561c8d74a034a7431a201fd1324749e34a044b58906741990d03da50125ba12d1802e0540eba401251e12d280f601a0f5d280125d866840d704a00d366da89994418a3e3798e0330cd2ced7e9df07d712552c5aa1a463c086dac884bf86175aa4467b4deba105b71e002dd78fc75d8be992701e36df56d943758a35ce6b43ab29ed84ab18aca60b6c594de7353942741b623780b8b06d6b40a3696fb093d9047e02b57f912d2fd7a41d3f38799ae425137fa9a474e312a6685767ccd15e08742f1b0e1885fa94a9bd38607c000bcede325c83cafc46e6e85954bd9aab25976832e9d281847633d04ef761a25ddf4bd54eabbc855e70c61f343126f12a1b274c17e30dbb8346baaf8d8aa82dcb72ba9b10d1b0c25bff418ef7b3a193665eadc7c53cea7d60c6dd5f12cec14ee2ec00380f908473a093386f0175ea4049388b9dc47906e03c48124eea29140de76780f36049384b9cc4f92ce03c4412ce022771ee0c380f9584b3c8499c0701cec324e1a4260ca1e19c0b380f675b9ed4b63208a568f03f5ea53f9eb4d887872413f5ad35faef132d4fd358408701d023dad62e8afef8d42cab348ffc15609379a424982e8637f4009847d948c45864df227a3e6b58ef07c3fa681be79a2d5b91c6f91fdec30b2c49dc1a912c5be86b70ec718c44a8ccfaba2ca8af02d463254265d6d965417d09a01e27112a53f764413d0b02c18e97089559439205f544807a8244a8ccfabb2ca8c700d413254265d6e165413d1ca09ed436896732c9404594575a06aa9e70e679b28db8bbc15e7b0db11d007e4ea7b0b7a0c3d3cee827eaa66a75930875b48ebfa7c1cc67c1ece385304fb5518e33e9fc30dd6beacc90b9db838b99800b61b77f9a8d296050bb9d024e8229e07426ca22af691473aa94065e5073f4bf430fe7193a605cddec765e90b6437dc56c7f3a99ef05be529335fea4c71f515b184e9b8761ea3883f910d6f6d0073ac456aa335806ef28cceae744ede55fedb3b2562a99661e3c08a4fc4c39d9d50abc12274bd72d049c6749c2490d8ca4e1bc08709e2d0967b1933837039ce748c239d0499c3b01ce7325e1a4165aa0e1fc05bcf7ce9384b3c8499c5d413acf978433df499cb781745e200967819338df019c174ac239d8499cafc360bf48124e372b50ff04382f66e254b15c6834a9d746e8f4cc8f3480452c806a3b9d0478898d0a96cdeddb47b4bb5dfb81209f97daaa3591b4233597ca901e3b4a1bf29d6141bacc86e5d4ec74863328d1c18786f24038e2bbdc4e1ef412fb4e67b428e6174012af60e22b80c19dfc39520f5f95e43518dca9357f833233b58ba3489319d3276bd84a1f98a1bf6e8e8da980f6009687d9f54a49ca548993d5d4cf039c5749c249cd604ac3f930e0bc5a12ce6227716e0f38af918473a093381b01e7b5927052aba9d3707a80f33a49388b9cc43918705e2f0967be93389f034df50649380b9cc4f92de0bc5112cec14ee2fc0c06fb4d92700e7112671eecea6fb6e1b8ab9ccad436331b9f3da5d4bbe7b5f7b717a2bdc586c1a448bbee5a3698d0926bdd0703fd561bf1a299efd7dd1be627832cde2609267160d3609e0d306f970493188d47837938c0bc43124c170b0b1d0b30ef9404d3c5e3e2bd00e65d92601243186830f70698774b82e9628ae1dd01e63d926012e3eb6830cb01e6bd9260ba5887fc5c80799f24982eeecdaf0698f73361aeec35efbc90ec2935dfc3c11d4918d782e8b907dad60724682a483c44dcf9d03c94eeef14a27cd0466efb6cd20912e74b5acab679601c7e481a50e29c4903da00401f960694992d8705b40a803e220d2833a7130be84c00faa834a0cccc632ca07b00d0c7a40125aef234a0b301e8e3d28032b3e3b080ee02409f90069499c38905741a007d521a5066a63116d0e900f42969405dccc55c01409f9604b4d051c5fe09380e7e461a5017b79e8f01d067a50175516d7a14803e270da88b8afd2300f47969405ddc7a3e04405f9006d445e3c88300f44569405d549bee07a02f4903eaa2627f0f007d591a5017b79e7703d057a40175d1387207007dd5465201c489a983877aaa767255e2bdd410d979fea7a8b91669092ff70407efd79878974be0555f3c43c34db6add25dd0c075668153ff25c1bdce04d7db4bc6bb4fd317040d0521d8a3bc2a9de022a8b4d47e2ace6f0d83fe8db63c934f4dbd4edc769ecc92d3cf6180bf2927204665ab73d1b76e5bc0f996249cf94ee2dc0070be2d09a79b9e9f9b03ce776c2c4a4d95a5cc02b68826665ac0d6ba9d42b8ef4a864b3437d3e0f606b8ef49864bdc94d2e07e01d3c2fb92e112e75c1adc4f01ee0792e1ba58dae27b80fba164b844e31f0dee3700f723c97089872934b8bf01dc8f25c3251eacd0e0fe04703f910cd7c5c4042b822af6a964b8c4436b1adc3f41723f63c25dc74b2d8b151407aaf39bcca6221e5121a355c41b06f2fbb90de3a14aa1a9ecb10b9ae470b66487a5496b1db8a97d6123fd4ba10616957db4bda13ddd0bd17e6923fd4bb1af46594fff42b37495c03cfa3f1be7acf96992a966c9d17e1373f547adc923ed20701f18ea5fb54d89d64c567d17f7592780ac7e6d4b56c76a599c9d56267098ffb13afd8d2ee76ade08e6ce6f6ccb6a748de6a864d8c46debf92cb4233b8768bfb59395acc0feb2348a7570bd261c5c7fc71eeaaa81b99eaa065aa9877bd0589dae1c3ad797c36abfa9468d32e917e0dedcd90b86faf772972517cfb33e8265e9071bfbfcfc663c58267ab57af369d98385361114c144f02313eef25e737e55c4cae1cbb0e4720918f23f31d16de0a59a4866696833fd9f0d8bbdfdd4ccdae8ff56f199a79b09ca5ca7fa0e045f1924ee201e10d212777c0926939f99c8d74f438e3b2a85bcc2d75117e8615f6954b5a67a813f96fa9222ae8d8ae6e0b631a859bf3081f74b03ae38342624fbff837feb0890ec5f99a0fbc32297fc19dc4abae54a590e867b0b130b61f0056312af5cde959d071684df98a8bb6ad43875a89b556817f2b0adc8c2d61796bbdf6de44433f9baa6bac00d7432c1dca130affe2109a68b09e68e06987f4a82e9628aed7d00e65f9260ba9862fb2080f9b724982ea6d8ae0598ff4882e9628aed0680f9af24982ea6d89e0e30ff9304d3c514db3500d35b5a104c17032d7600981d24c17431c5f68e00730926cca4c38e2908283562dac56869658548a2ecc844197a954cd345d76b7c12d69c2068268c0ac0d789892ff38365759837c7ffd65afd6aae9659a264d2ea357d0b83bc3313ed6a1168b1c1a1fe476bb5adbe5c9f330d66ce9934499d0076cd2e92700e71126723e05c52124e6ac0190de77c385a5e4a12ce4227719e0d38979684939aa38786f33ec0b98c249cc54ee27c09702e2b0927753744c3f935e0ec2a09678993389785957d394938073989330f702ecfc4b9ae179ea797eaaf1fabc1556a2731f5b1453e1de5f354a57f1b3842d67b53f566b45abb37b87b967e941762ee667b239a797818f15493161eb61036a22bd8b036056e8fb5fea54a32d1b1c6f5989185e0f1b1a28db9b568b1f12ecabbd9f590b071e033ba1213675f90cc997a869ca63d92945f5de3629ce3bc3aed5453a7e7d972edc9a426082bb12334779b7e30b376b721b39926e81ce2648ae3b5610a585912cec14ee2ec08387b48c249756da0e1bc0b06fb2a9270163b89f34cc0b9aa249c839cc4f93fc0b99a249c254ee27c1e70f69484939a638757950c70ae2e09a79bb5200e019c6b48c259e824ce5ac0b9665b3ae0a466882e66bad3d272443f0c46bd5e9260121dbd69301f00986b49824974a7a5c1bc0f60f69604933867d260de0330fb48824974a7a5c1bc1560ae2d0926d1d19b06f32680b98e2498c4233a1acceb01665f4930896e8b34985700cc7525c1241ebdd1603e0130fb4982490c75a5c17c0c60f667c21ce0a5a61008525d8e4fdc48707a14edbb1c666f5427484114fcf4b44f122785691d49e8af8223e4f598e89349055a76138f463dc27fa7467f7990319786ba1f4bca5f036fa8bcb60db4099a0a92bc5017335a9a97a5406ed79704d3c59c39cb00cc0d24c1246e0068309705981b4a8249dc9ad2602e0730379204936834a1c15c1e606e2c0926d19c4783b902c01c200926d1d04c83b922c0dc44124ce211080de6ca00335f124ce2d69406b307c02c9004936834a1c15c1560163261aee9358d8e6fbf1918570167db2226d6642116e56c1be40657810aa53a6abe417b2b4ff2e625bc98958378b893773d9a7e3f405c6cc3d3de340da43ae31097279ad7f22e30090c9482b2c84994eb77095196484159e824ca4f412a0731516ee4a59aa0835a0b2a7441593b2b7d2e4116fca1fe978cf3ffadae52596e937121669dc04533de7560f91fccc48ef5442679ca5edfe8b75ceaa928bc30ceae5c37ef72b4dd3c2f043ac4a61cab9cf72aeb7898077fbcff5ebd56b992b2db7e55b0a3418e3765625f19e458a95675097856c3c6681887829ab5990dcf52dc20a4ceac988bac801b304ecb46b600706e2e092735609c86f342c0b985249cd453271ace4d01e79692703a9a7a10706e2509273551110de7cf1d429c5b4bc2494d5444c3b92c4867a9249cf94ee2bc15a473a8249cd4246f349c6f03ce324938a9191d69389f87c13e4c124e6a46471aceaf00e7f0b634f3a5e2743173f85ee08337c2c6719edaa7cfd73b727524325d9bea921759daadf30a047821cc914c98dd00667ba9fa3d0ee08db291164b99e75465aeec4a5413fd9c68c987b682413e5a2a5a6a243d0dedd320b5db30d1f681219f4d314b2b332aed38645b58e9b7b593f3bed0fe9c4a4be2f63de01b636375cf4cef2c71b2cad776b0271a2b09a68b55be2601cced24c174b1cad7e600739c24982e56f91a0e30c74b82e96295af8100738224982eeed53703981325c174b1ca5721c09c2409a68b06b922803959124c17eb1c4f06985324c174b1cef18e00736adb9a8ad135d1c538ce1b3b8528b7b7e19a984d0e46e240a7e5b93b12647307694089839d06f42800baa334a02e66623c0080ee240d28717349037a2000dd591a50a2518e06f43000ba8b34a044c31c0de8e100745769405d2cdbbb0080ee260d2871b34903ba17009d260d2851b1a701dd1780ee2e0d28d1504703ba1f002d9704b4d051c5fe0d38c79c2e0da88b5bcfd700688534a02eaa4daf02d04a69405d54ec5f01a055d280bab8f57c1980ce9006d445e3c80b0074a634a02eaa4dcf01d059d280baa8d83f0d40aba5017571ebf91400dd431a50178d234f02d0d9363ce607d9f7eea4a5b678c10be1d5d8708e2df0ffccf12f5395636b3cd74bf2ae01bbf4396d79349c9ab1dec51a1fcf4080c15c1bc37888fd61dca50309de9b308c6b6d0ce3429d55c6323e5aa2aaf76118cf93135b59e8ffefa2fbeb5418ca7b4ac299ef24ce4d00679d249c054ee22c039cf572d66c170bf67c07281b9828574ca02cd2fa628dfff622cf626c1a2db86a0500d8c80498efa566962b87fcb213fd8fa94c7313f5df41a6d9e672cb4df0290649fdeaf4ef836b895bc751b414e990eb733e13fffa69f86b13257854136a2734c6ab4eccb7d904bbbab75f1ad02904bec035e04409a7015f13802f740d38d1004d037e0ee4bc5de41a70a2dd80067c5390f0bdf8a10eb374acfca4c4d2a99aaaf45fa904c315891b9aa163e86bfcaf72cf1cb8ac17c2dcdb469607d48ddbf7d27734a87afb30d1f6d068a77a2a7bc302ff5fb3356895e3a1c2ff77d0cc08fddb1afff6dc03b932c8e8be4c901ba4cdb0358919b54a6bc1753e44f5d1057a22a8346acbed2113f346b0a8ed6763cb9ca905c23debc3e620bdfbdb38fe33591f86ea5d9f0a252bd7fb379553946883a02d5995209b0748034af4eba301ad00a0074a034a5cf969408703d083a401252e4734a09b02d083a501256e5a6940b701a08748034a5ce569404701d043a501251edad0804e01a08749034af43ca5019d08400f970694e8bd4f035a0e408f900694e8bd4f03ba2b003dd2b62d2a7a2f3fd90b2a8bd5272a35cee16e42cf67a1dd196ca647d9f0282858bca79fe1a9aca38d1aa4e50a4b348bd470f0403dda8679a4c0c3da60e3dbd181f8c7e089754cdb5a9a82a6dccdb5732548e5b1360a0327eda4eafc2928ffd7a8e1997d5e887b259acf4b09f80c1c6763eecc749d1feca4f9ae1a96a2e325e11ce224cec300e7099270163889f31438b43b51124e376df5b701ce9324e12c7212e7d380f3644938a919226838bf049ca748c239d0499c4bc35274aa249cd42ca4349c7d00e76992700e72126719e03cdd46c454515bc48dd24c1ef7c2e6f20c1b9bcb968d73edc1d1e61490ca336de46d360d726c6e1ad79181e66af338ace7674982e96212ece700e6d99260ba5806e81e80798e24982e96017a08609e2b09a68b6580ee0298e74982e962a4e9dd00f37c49305d749cbd03605e2009a68b6580ee0498174a82e96219a06b00e6459260ba5806e8768079311366ef0898d11bcb91898f583bbbdc9205b70c5c6a2e910c97b840d1e04e87bdfba592e112a7051adc2900f732c970890b180dee5600f772c970893b2a1adcab61cebd820977752facee1d4427cff4df6ef0a6fa1fa9f62a1250ab3d6bfe7634cfa63dc1f87ca54dcf264c3d335ac77c62f36147a8d3002d0bda709806ae9274c234d8490ffb5d01e7d592700e7112e75e80f31a49380b9cc4b91fecb3ae9584d3cd709aeb00e7759270163989f341c079bd249cd43203349cef00ce1b24e11ce824ce9f01e78d9270963889b307acec3749c239c8499cf980f3e6b6c9e134c91be66debdff4b0448ec9e4cfc97e63b3bdaac44c4a433ba11309ed1680f6161bf94ed55e3ed8c56346a769fa861a1c741b5b0dc2bb6e65025c290170a0374dbfa12374354a4bc60fda01c9fd5e88f0b6b63c6d4a3f0e21fa8ed082b94e85017dbb249844af261acc9301e61d9260127d4768304f0298774a82495cb769300f0498774982e96200ecbe00f36e49305dac7a331f60de230926f1909806b31e60de2b0926f1348806731ec0bc4f124c170b655c0830ef97049318d74183792ec07c8009b36f04cc68778532bf9139feb7d6ea57eaea52af4e6f3117711d6eceec4882fc2fb82d3ce80264e21c4b83fc11407ec805c8447d9506793548d8f2b00b90897a2c0db207901f710132711b4b833c00203fdab68ee6415341722caa7e4b7322fb01b488c724c1246a0b3498bf01ccc725c1743171db1f00f309493089ab3f0de69f00f3494930890b100de6df00f329493089167e1acc7f00e6d3926012cf9e6830ff0398cf4882493c15a5c1f4605bfaac2498446b150d664780f99c2498443b2a0d662780f93c13661f2f2c38acb22caba4d5b3fc265419b57a4f15fd1babcbfc2936f3741316b32fd3f09e0681352fb46569ecf0d6c9fef5b4609a3540525f948292aa75d2507604b3c74b525052c3146828cf00a97c9989b297971a3957e52df4d4a9d3384fd54a0ce64a135a1763e76e0197f0576c2c4c6151ca72dd986a26ac48db5c5e0817536c5c04785fb5e1d3ac1c6fa32b2c8c4babb3ec7af18a3eb0e6bf66634a5068d597d77841051085b3d4a752e9a96a2013b5efbd45475d9a32b50d807d5dcab2454dc34e9b5df78265eb0d2928a93b281aca8d40997a530a4a6a4a4c1aca3f402adf6acb5a35d63290d05c7ab686b890b79928d7d62847fb174dd4c0aaf402147c3c54a1daac683a2f19bb17027ec7468c9d49565375d1026ec8224d1f3d04d6f67725e1a4862cd270de0638df9384931aee4dc3b905e07c5f124e6ab8370de72e80f3034938dd4c31fc3bacf51f4ac249b58ed2707607e9fc4812ce7c2771de07d2f9b1249cd463101acecf01e727927052738ad1707e0883fd534938a939c568389705b3f267368a0015e88404968b00d18af5de0d83fbf3b6b425b97fc0310b24f10b26ca7e9e39a5656afa96a4ab43f01e1e8194fa9faaf6a8714d3499bd078c765fba029a28d134d0db740a41ff8f097ae5162687644fa9f27a302be6e34b90d7af6c1c2c23c6eca494e8844b93d22b60defddac6c1b23a52aef62f4dc29de2df8c52b1923f87fa17cff23fa48cd2b53ead3af6a11ded6079066807dfd898004cba6a380110e751da04300224f45b26c6e5fc17e3bd20035eb9ff6be5273a5a4ba61af6ee1d79289d3b09eebbb6d54ed1f1d6c5f0ae1b602dffdec650ce5f3c9c955748839e0bade5ade7a5610589fc81ed0aae800dd35f5ca53f5aae2fdd2be174a37e3b51ff36f062a6c19cce82390260fe68bb6845e66b37b5143a6dedbe10b4ce9f24c3254684d0e09e04707f960c97b854d1e08e06b8bf48864bd44569708702dc5f25c325462ad3e04e06b8bf49864b8ca9a7c19d00707f970c976844a1c1dd1fe0fe21192ef18c8a06774f80fba764b8c448671adc6300ee5f92e11263f269700f07b87fb7a501c65af94b9a7ff4136004fcc706ca7ccf1c5ae676fefc9fbd10e5bf725c28545176e220a7e1ac00c9fc4f12ce7c2771e6034e6f1941380b9cc4390c707660e24cd61b29f6da5bbd9145305f2ec14488f1a1c3b54c36ea9b18e37fa4429bafc7790b3c95cbb1ceff9d3a459de759a885433b0d1809603b32c1ae0a60551c7eb56e2af8f898c42bd7a3982f84c3e64e4c98494fbe428dd3b2271f2d94f135c0d799892fbda23216aa1eed0df3a262444bf4ac4ab43a756661ed09c1b65dd8cb4f384f96e9357d86a79216356a994c1ef9b937b0d78459724926c296826c531522a2b183b692ef04289762a25c5ea3545f9b0cb0551bc7701be9de5abd0ea05b9a89aea7976df1e981cc03661ad097c136b48c34a0c443651ad0e700e8b2d280124d6e34a06703d0aed280120f8f69404f07a0cb49034a3c30a601bd18802e2f0d28515da7013d0f807693069478304c037a2d005d411a50176b7b5f094057940694b827a2017d0a80ae240d28d1e24e037a2f00edce04dacd0b2dee96cd703478077b21bc9599f0fa78a14938f9b32c217d2da7bb74d5e27e1958397bb02deea9102bb4bdb3d1ff5860880b1a2cd75f30d3bfca3dc35c4f90d5559830939173c55e6a106d9833b4bda5643d1fe47455b6a16eb47fe95c7d8932d2a1d4d63b886e7590cad5dad65cec7ad0d7e5906ba42713e506118bd148bdc4a40f6c15b19449da60f20245437e14205f9d7d8a89437d8adf6e6562399a98f8e9de29660f18fc6bd838c544653eba08e5542f703b544d1571cf8d46b0a4721538c55cd3c6d9fa10ffcf7c7d92d9d80e56f39eb09af762e2cb8f5892b2c9e03059230ef3dd0ed31341b99df8f97358f1f33b830bd85a363cea661af7f878fb4aca895a41579634f70269ee2d09e7602771fe034b561f4938a98776349c3701ceb525e1a406d3d2709e0438d79184739093383f049c7d25e12c7112e75380735d49380b9cc4b93de0ec270927b5243a0de70180b3bf249c854ee2ac019ceb31716ee899f336363534671ec3e962be87633b85d0f36cecfc8bda62e74f3b6f9a0232bbbe1d7cede934f43ab0866ec0c4d7db0ba54f5d103414441a8df2d49968a5ce8c57ef59cf454633ea1d0d703764c2edef35b54a45db4ad19a5f959869a7fbe0835baef2c8c5ada6b12c50eb82056a231b9a40a63e26839d74d9a9824569634938873889f310c0394012ce0227711e05837d1349380b9dc47933e0cc9784b3c8499c8f02ce024938a9e98368383f069c859270bae98cbb042c45459270963889730dc0592c09e72027716e0e38073271e679c91ab5657acfa43eacf0298075fac6836d6832a3739095a9bd55ac5521ed49dc254cdc4be906921bce605bea9eef5317c035c8863b2e0e76f432295aec3712fa8fd4fa125995509b6868277422a11d04037fb00d339e4a6b6ddd8c7726cbfcb123284943dad22537f5888e6849a20df26980725326caf52250a61e75a8a5698effbffab732e235ea2687eb5954756bb2a6167c21d56cb7130b7629cca89bd918f6055a322d0f7bdad9d11f806f731b9175052d1ed6b9ed477a1658ecb7b0318f9ad4796bae0eb479743cace85b4a41497573a0a1fc1be23db7928292eae240437904a0dc5a0a4aaae3220d653e842c94da383ac6d8a5a0605abdaebe34c3bf30a8b034dcfff70c2f8806a9f75c0ea3fd1b16a2a136a294951ccef25426b199fecf86c5810c95ded804dc6abdf2577b4171552beb3c2d08ec1cc05bc6c4bbae97eae9d4a8d5f8006c61bbf76d3a1f66db614ccc7d618a4029566691a9fe9f6a4f65c92bd30da89b4b06385af43299c792e54120cbc3eda4651d627f0f45ab4ebb3ae01b61237d75187aabb289ced401b5754e2f56977b21c2916da9546173d398290669f9438f04ebd3a8b6f6c79be87fbcc1fe4c398a35531e03437d343b7659016b9a4c3d88ff54e6be195e5562314acd08e1de0cfa1660dd868955c59e8fd7525a99f8d024cf547895985883b6a35a0ae6d16d6d9c2fb5a6503a75df4fd344ffed10a21d23152dd5d047437b2f48ed581b35164c674fa9ab7f9193c554be0498db4982e96232f66f01e638493089693169303f0798e325c124266da5c1fc02604e90049398529806f323803951124ca2230e0de6c7007392249844fb270de6930073b22498443d9306f325803945124c17ed4cdf01cca99260120badd0607e0f30b7b791c531799a54e38565fbfe7f45cd1f0076d21d98c857f69a3739277b4a2d9e7630cb6fb40b9ce1efd8b696fba0a920952b7112a01d293fd22944b9930d5fbc6c32e51097285a36926dc164b7b334a04409a5011d0340779106946812a1011d0940779506946816a1011d054077930694684ea6011d0d40a749034a3429d3806e034077970694a8c8d3800e05a0e5d280ba98c4ad0c804e970694b847a2011d06402ba401259a9869404700d04a49400b1d55ec4f07079c2a69405ddc7a9e0840674803eaa2da7424009d290da88b8afdde00749634a02e6e3d1701d06a69405d348ecc01a07b4803eaa2da341380ce9606d445c57e37005a230da88b5bcf3100748e34a02e1a474600d0b936bc965534c8ff8ffa9f97c026b49689b69717a6cec0d0c3e66a2bba1c5a3b1e64769e0d99cd4f718468a9aeb2cb32bb36a0ddd3465038ceaed954b99bc6dc53d1e298ae029f923a3b39c80ad230bb5c4ae03b90ce7a392e65839d8c03391a96a70649305d8c03390660364a82e9621cc8c10073be24982ec6811c0130174882e9621cc8fe0073a124982ec6811c0430174982e9621cc85c80b99724982ec681d402ccbd25c174310ee45880b98f24982ec6819c0c30f7b519078226bb7abfb1597a1ba9125ecdd276259583a4c6ab4f439e5e328038b3d2369d67750a91ef67235f4e539348262136d4b8269abde93280bbbf64b8c49997971b0fe01e2019ae8b39491602dc0325c37531f6ae01e01e24192e71df4583bb1fc03d58325ca2858006776f807b8864b8445b160dee0900f750c9708956571adcfd01ee6192e112cf076870cf06b8874b864b3cc9a2c13d03e01ec1ce0ed972c6fd125dbe9db878756681ec0bb1fa474a0149dc1cd0402e0b208f920292b811a081fc06d2bb1f6d338bbef299523751e185a989a3ebdd4f4d5ca59a2ee2caeb089647d5e730831ec3c45c9286595dac6e4265dc2d4b5ca4bc53d28b114ef4829cbc558bbf2cf83d7e4665ea6dd054d5efebb912ff4427d6e1373c8a63d96967945ca36fd5365e6d42aa5dcf18fd39b80a1d6723ed4c89ff47e5329fa581213c4b3e8134946700cae3dba6266926baab8b7baea7c01ff0041bd54ba28ac4b4f7445e97810e71225f19abd0a8eabca08066994639c353e5621af51490d427dc03a9f6964990273141ae1d311104954b14c2b9fe32a5ea94cef39a0bc8703118a323003ed9f64c1baddd623509d5dc1c6f1ad300733e0bed3b30099cd296e58b53bd105c74cfdc1aa4f4543bd5a04ad2a4d5823ad5a50309df67e0c2719a0d7f18936d2055120739e95cf43e0cebd325c174d1b9e83b80798624982e8657bc0130cf9404d3c5f08ab701e6599260bab87ebf0030cf9604d3c5f08a1701e6399260ba185ef10cc03c57124c17c32b9e0598e74982e96278c59300f37c49305d0caf781a605ec084b99a975d128f214ee6e6db043694174ac2490db1a0e15c01705e2409e74027713eec85382f9684b3d8499c5702ce4b24e1a49a3c68387f039c974ac259e224ced701e7659270ba9975770fc079b9249cd460331acee300e7159270163a897321e0bcd2c69e28df4b8d439de2bfaad427ead6126fd10ab32f02adf3aab63d9f0c9a0aca6411ed9bb4f4702f82bfd2d5324ed19517887258a8d5afe66ae844031dedec725df06bbe868956bd18ef05c1e3ee39ca748399f15a490bcd1027b3e8ae0573e3759270529318d170fe0bd279bd249c039dc47933e0bc4112ce6227719e02386f9484937aa446c3f929e0bc4912ce1227713e03386f9684d3cdfcf83b00ce5b24e1a4261fa0e13c1070de2a0967a19338e700cedbdaf2d0779cff913dbc20cc50cd9c4417ae935930ffed14c2bc5d124ca273210de65f00f30e4930892e5c3498bf03cc3b25c1241adf68307f05987749824974e1a2c1fc1960de2d09267135a7c1fc1160de230926d1858b06f33b8079af249844e7421accff01ccfb24c1249e4ad2607606e7c2fb25c1248657d1602e01301f60c25cc74b8d4faff066f997d5e8e8f4cc035389839f1698ba1b0cfe07dbd6b3180f7ea93329ede8b718e4f5214930896b3c0de64080f9b0249844ed9306b304603e220926715f44833908603e2a09a68bee328301e6639260126d4934984300e6e3926012ad9c34989b01cc2724c124dadf69303707984f4a8249dc17d1606e01309f920493b863a7c1dc12603ecd84b9a617d6490e53f58df254759a4a9f8b7a2fcccf65c9a378140beb09e006fb8c0dace8519c59aa54a2224f4b957a13607dd606d6e8947dd8747ba8b2340f32213e67a358ba0a2618e6bf313a21a9d55eb9fec05e89f71af4e43057bfabae0ff2cfb9077665709e7dde462aeaa4bc56a74969aab7120d242d42636758a65e90029238d469204bc1e2f9223bc3b11ae233fc371afd4bda57364e157d92c4f8121363ff34799cee35cd0bdbbe33c87e0e43ff651b894fd5e2d4a075cf997ad999eaa9bcdc15febf87f93febf5efe6ead723f455967455da16a00e94aa576c9447c9d7f25c9d68686eca4640c51dd52774028b1b019ac65a08705f65c2cdf7d23556d334506fdc22a8193a3552aed4abd3e81771f586333b92f0ff0793c76b4cfc2b25f00ff6ffcc497c79b99e402c49302d61d007b0d4bd6ec3af19b7b2a9e616ccbe54c03d3ea1e1dc0b26843724e17433d1daad80f34d49388b9dc4b939e07c4b12ce814ee2dc1970be2d0967a193387f0373ca3b9270526bd1d270ae04d2f9ae249cf94ee2bc03a4f33d49380b9cc4f921e07c5f12cec14ee27c1706fb0792700e7112a70747261fdac8731316ed537b79750e3522b1a5ac6a6726eaeb01ed47364d2635fea515facc092bc88dd3b8eb74c3951a76fbb6b7fe0ef83fb6910ccbec5e8113858bf9e9f705949fd83c25a84eccbc4943b5c9e03732d1406ab804516ab764a12e0543dfa74cd43dbdec935f12bdac68f1f74b83bef09934a02e666c5c0e807e2e0d28d1779a06b40300fd421a50e2724503da09807e290d28d1879a06b43300fd9f34a0443f6a1ad02501e857d280ba58f4f44730b27c2d0d28f1c09906f42700fa8d34a02ee681fa1b807e2b0d28d1724503fa1f00fd4e12d0424715fb21b0cbff5e1a5017b79e8301e80fd280baa8360d04a03f4a03eaa2625f0c407f9206d4c5ade7fa00f46769405d348ef407a0bf4803eaa2dab40e00fd551a501715fbb501e86fd280bab8f5ec03407f9706d445e3486f00fa87cd83e80a7d0b416da5ca2607d063bc2074a2bd1f448f8023bd3f6db85834e8bc67f559812d60eaaf34b47f7a21dabf9868fb7a61c84ff267ba3ca3b3c5244f455c3524bea0de7339f8f73830b4fccd0eb56cce9122d9d369cccdebc1ac109e62287bf50f13e30a098c83fc3ff3b51b50a3672d7c8726853d400aff6d5b779ea029776bdbddd22944f99f24054bf9f3bb68e8db0164d35b561850174dd13b03d00ed280ba6846990840979006d44543df1400da511a50174dd15301682769405d3c2cd91e80769606d44533ca5800da451a50170d7de300e892d280ba688a1e0f40979206d4c5c3920900746949400b1d55ec6f01c7c765a4017571eb792d005d561a5017d5a6ab00685769405d54ecaf00a0cb4903eae2d6f33200babc34a02e1a472e05a0dda40175516dba0480ae200da88b8afdc500744569405ddc7a9e0f40579206d445e3c8b900b43b1368372fccbf8f877416ce36696e0ce3bd10deca4c787dbca6679b818fc8246f98b7ad37d4bf5025870fde43878652ff0e540e69e272d49db6be83ff530f26de8dbd54ff279581543536ce7f5da1cfe1554a58e5821364dc4dcfc3dbdc41b38b95f43600cfa75598e05b3ab34fcd0be16249ec9741865765a2dc284d868302992a01ec444f79f1356a49adf4a78a455a7eeb125893698ecd12ec62f9c2b541825763625fd76bea6056a69d772a74daf9c089b229f0a0de84ba0f0b2e6634ccd3407be8c9c49c178179a48636d2536993a66ba04ad26b1279fd958f5fa9ce42ad804f5c3c1a5cc6bd15e05e9d893be98a56ac9dd1da8bbab603ccc56b30f16597828e6c2da065979a0038d79484d3cdf49d1b03ce5e9270ba99beb31470ae6503675055a25c3714e5a9ef7616fe5fbc10676f1b4b8f4a696c7de9a1addcd7c0cadd87892f194bd2d4529049340971a0d356f5c760a0af6d43d5c7749d33b54ea9d0b5f70487a702e6756c585e4d3681f482872a5d37d1a58216187169a710685f6940892e1534a09700d075a501251a5168408f07a0fda40175b1cee97100b4bf34a0c4b59f06f44c00ba9e34a0c4036b1ad01301689e34a044a71f1ad00b00e8fad280120f546840cf01a01b48034a749ca401bd18806e280d28d1719206f42200ba91edbd7ef4367472e238b0de9ba19b9bc33d4d3d9f85b602d06e6cc30a55a00b6a5ab642d11c2a5e82b088014c7c1b78a9a69259fe9baaecf62caf61b1af4aa537365198bbdaff56d54c6048695fae145783c46e62c3952233ab3ed160423341efe68528f39928d7cc785e9dea05263dd554913e2ca161a55588be1324b4808975d516d6ff54092d66daa068323a1efc4e0a25c17471c06f0f308b24c1246aa5349847c0302f960493b867a2c11c07923950124ca2524f83791048668924982e967c3b1c600e920493a81ad1606e0730074b82e9a243ce38803944124ce2b69206b300606e2a0926f19c9306732cc0dccc46184f681629f76f63bcffabb9da4f3980d89c4dd4c553cf2af01cd99c89b75f1a5e65554ac6418df66f28ccac1b444d15f97f2b67f1f2c53fc778c9d4c644d0f92cd05b831c6f61c34062026dae074dd40268f5a07703657f4b1b9ea4991e900c76f288791248e956927052cb18d0702e009c5b4bc259e0264e58ac4a25e1a42640a0e13c1f700e9584b3c8499cf703ce324938a9fb7b1aced701e7304938073a89f35bc0395c12ce1227717683957d84249c839cc4b93ee01cd9362138a66de764bfb1d95e55425669682774621950608734ca86a4669a95c7cd7299eb819bce684938073b89b32be0dc4612ce814ee27cc00b716e2b0927f52899971512708e9184739093387f049c6325e12c7112e72b80733b49380b9cc4590938c749c259e424ce2301e7784938dd4ca13d1f704e68cb43e5d46879aa9a444bfcf61e6c37274a8249dc60d260be0330274982497411a3c17c0b604e9604d3c5fc8e6f00cc299260125dc468305f01985325c124da3b69305f0098db4b82497411a3c17c1660ee200926d14f8906f32980b9a32498c420191acc4f00e64e926012c3b768303f04983b3361f68f80191d6288396cab1295eba77b23fc776af497d771bdeafab150bf0f87c5bbb4ad0773d05410634c9d516951c6abc101dcae9260ba983b7c2d80b99b2498c4614e83d91b604e930493b83fa2c1ec0b3077970493b873a7c1ec0730cb25c124da946830370498d325c1245a3b693037019815926012edf03498f900b352124ce2fe8806b3106056498249dcb9d3601601cc1936c2b5d425c9d44099e5b321aaefb47c363742aaf5996d59bc2ad55d81b810d122df7602099d250565919328d7e812a2ac9682925a989a86f21390ca3dec24016c83a295b468f7dfbd10df6c1b153fd517cfd072986c7b6ee212f7e0750078354c78bdbd6405ae69fa82a021b546d779a3bc2a9d3860a2fff1062f28771614f1b3526366146be5de1d56ee39361422b33b171e6694facdd4e9f8766a5a80a33b92b08e014bfb5c392744d46002da09d181b0f8d44a82e9a25b573dc09c2709a68b6e5db301e69e9260bae8d6350360d64982e9a25bd75480592f09a68b6e5d9300668324982eba756d0b301b25c174d1ad6b18c09c2f09a68b6e5dc703cc059260bae8d67514c05cc884b9620266a1979a14cdd2ce9c56386229d8422e6202ccf75233cb29dfb7e862a5f5c6438c32ff8a39fefdd4ea57aaabb88327aef967b276f0ab82f1782f1bf25bd0cee4f71fb02cedcd04a85e8cd552d7c8c3442ba5bb861762da474e09727578e662cafdc340eaf6958473909338ef049cfb49c2e9664188c980737f4938a94e5b349c5580f3004938a987bc349c7f7608711e280927d5fd8086b30748e7419270524b3cd2703e0ed279b0249c543f231ace2f01e7219270528fd568383f86c17ea8249c439cc4b93a183f0e63e2ece165e350e89ee3d62100f27029208996761ac89900f208292089279334903702c823a58074b146c6d500f2282920895e1c34905d3b85208f960292e8c14103f91f48e4315240123dde6820fb81441e2b05a48b7eebab01c8e3a480249e8dd3400e0590c74b01493c17a781dc00409ed0964129a91b45174b85d6c372732213654f2fdac5605c22378c6aaad2abb275644b3b8b3c058c1827d938f32e6e6767de9d41224f6602cc4b00ccf7ff8cf4df68f07fa5ec4163fcbf2bfc8b6abcf180b5dedbde533e1bb39a486cbd978c166ae0e1a6155f5c0b709f62c3614bf968ccf72faa48c15bea7f4bb5f3b2bb0f0cfe536dc0cccc82e9e6c9e446605d3f4d124ce26e880673638079ba2498c43d3a0de6fa00f30c49308996231acc0d00e6999260baa8cef7079867498249b4b2d360e601ccb325c1249efdd060f60598e74882493c91a4c1ec0730cf950493684da2c11c0030cf93049368e3a4c1cc0798e7b7ad692e682ac8b4e562d6cc9bc1ca790113e54afe0b2591b81f1fe3a9e4270d29efb9b71fff06f6e317dab06e6653068c3857d24a2d3d0fc3fb22694089f3250de8cb00f4626940897b731ad0c700e825d28012f7e734a04f00d04ba50125da3569409f04a0974903ea62fdbfa700e8e5d28012f7ea34a00f01d02ba40125eed769401f06a0574a034ab473d2803e0240af920694b8d9a4017d14805e2d0968a1a38afd8a70ae7e8d34a02e6e3d9707a0d74a03eaa2dab41c00bd4e1a501715fbae00f47a69405ddc7a2e03406f9006d445e3c8d200f44669405d549bba00d09ba4017551b1ef08406f9606d4c5ade71200f41669405d348e7400a0b7daf04f4ee6949bef5f5aedffbbca1be60589f5cbfda6d4eb11febf92e56f9a3b0575b1aa6507c881781bbbecc370eddaad6e51dd68bde63053572aa8659e7fd2821196f74278b7b7e5697c6a364e1793413f0fc3fe0e26ca5e09942ad4400d7353bac8c95e9d9e00eabd19bab1391e3529c0f92cb0fb838cdec904dbdd0be33deabcf6558264057074b88b09b16fdaa2a4bc4354632312e8aa74830a64f3de4d2eba305e0253c0dd72f2d314faffbbe8453f0570de230967be93380700ce7b25e12c7012e750c0799f8d7d9349751aea7fb4562bf0e57aa12ae0d62c589e05743d48067dbf34a0c4e58806b43f007d401a50a28a4f035a00401f94069468cca301dd00803e240d28f14084067410007d581a50e22a4f033a10803e220d28f10c9406745300faa84deb28a6c048261398eaf329f31b1ee66deb03561bd5aac47b51a907883a002dc06177b08e3e66a3ae6bbefe3bf839c56fbb521b51aafcdb52254f94316584ff778d7e2f2876424f8d41b39eee093e518fdba8eb9a94e5c0803253631bed4b6f54f6a6129df88528b39d59583f06997dc28651bac8ffa3cc7db3b44ce2d0773ddfc84830fb3d69a3a478b1963acb25c569f8fe007c4fd990c4cc4c262e46240ff642944fcb52a48a98fea334456a3ecc92cf48034af41fa5016d04a0cf4a03eaa2416f16007d4e1a50170d7a3301e8f3d280ba68d0db0380be200da88b06bd6a00faa234a02e1af4e602d097a40175d1a0370780be2c0d28314a8406b40e80be220da88b16d27900f45526d0b5228066ee4a46d44869ae64533b85685fb3610e294ad843ad9a4346b09cc8d60073c8eb36867a7e9add7eb2ff91525f066778494f51b7cd73278001f90d1bf258e82b41d6e591667fff14f0bdd9b6e639f4a2773297180cedb76c1e65a814e9537532f5460d0f1b4f750a27eed8694ee15fc15afe363b3841616d83e14d33191fea85f0deb121932d2b425313d2a89a2ae22a41b455fc0e5082deb591ced2a4b0a71f6ab8981bf442f0027d4f124c1773835e0930df9704d3c5ea08e702cc0f24c174b13ac27900f34349305df49c3f13607e2409a68bd511ce01981f4b82e96275849301e6279260ba581de10c80f9a924982e86161e07303f9304d3455fa49300e6e7369c621126fa1c17f97f2bf7d8f2c53f958573b6579538c0204aea844e24b87b83c9e30bc97089924b837b08c0fd52325ce2ea4f837b26c0fd9f8d39167de54727ec4dd5da165aedede505a54ec9bef1b453ccd5c136ff958db3a282767e56742900fddac66147aa74d6fb7f66fa4dd4ea1baa745a369784f5ff1b1b91f099ba2cb81974b83b1894bf958473889338f7019cdf49c2493590d070ee0f83fd7b49380b9dc47903e0fc41124e37fd3b1f069c3f4ac259ec24ce0f00e74f9270524befd270fe0d387f9684b3c4499cabc0cafe8b249cd4ecdfbcdc0c80f357db8eb2991b43886869a690d180f6371b8e89833d95bf367403b3b257a73926ae0a7bf5df6d98e994f1435d1034a43c95eabc517a7857fa74da572acb527055fcc3c6b04fba2a566a9093fcbf1bfd8f5478e9ee8aa95ea044db3dcd0bb4002ca07fdaf1476e83614f5b90267921bebfda329b7278ebe4c3e31559286f8705e86f2928a941ae34944b40c6a57fa4a02c7412e5c9303ffecb44b9ae17dae083343f810dbe4cafe0aa29a5bed7e8753eeae4c86dfbfcf1308ffec7c4dcc37f31d67fa13e1026a89ae8ff6abe463b3d2559150d643f16c85501a42a784103b9b2ff62bcffa2d15329d45453aaf0c42c2da773b54c86faa77bf2d81930766062c4246a38ec4bf50966b596ca52bfb14a1d9450ee3750e3fc60af02b84b30e1260f8a0bdbf941f105b0f9ecc804ba06482b66a42bd52a7df0cec8c4ec6a092a6d6774006c3a3b31a1aeeda56e3aabbc85bae50add60e5e20bdb5bed847dc0d4dc990938bbbd13312689a6a52e002db58b1494d49c6034941bc2de694929280b9d44f92348e5524c9449db928a34b21e0c4bc3f722acea4b33f16d98b60029a3f2382f2a39ea289fd11c7d82a4eace55b670c6e462c2b5e561f82f6363d5cf8fb0e3ab627e75090d20d84105fb7cf5edaeab5515a0562dcb049c5d4d9a02ee01332f621e70769584937ac04cc3793be05c4e124eaa730e0de724c0b9bc249c54e71c1ace5d0167374938a98e8d349c7f8082b582249c54c7461ace95413a57948433df499c0f8274ae2409a79b51f35f00ceee927052234068383f82c1beb2249cd408101aceee600bedc1c499f4700a4b49076e8d53b4afd3dcc53f87fa17cff23f345f6f4095f713f9049fe699b70c48ea2a52d1525d7668681ff542b4abda30f0a9ba1deda7d6cc332099abb1cfea9b3335277b4a35d91ddc91b5b28399b92713639f088cd9d59323e66ea249e9e5b034ad2e77fe241e90d0e6cf2540275d8389767d2fd5c25f0ee7f5c312c66765b3571ece23fc7f25135eb6376fe7973b85c0d7740d38317b090df8b700bc17ff3865949e8195379f021b784f55eaa61478b57598ad1fcb508d7c76a279e5f157e5375be9e079d532a082ad257bf123e627a52d7e1d407e7b33f1aee785c781957a8250477e35fe07167863fcbf2bf46bc43ac60b0f0d93db5fb78329fa823edc87097bcd34d8a967adca3bb00d2a82d2b23f4f07ac6bdbd866984c35655a6dabe3ea0e17b1b619bb831ebc0e13638f8899161b2cf53f58a7a5930af2c02e249083c1c5a2af0dab41a1f6a16a2f6e41efc1a6615d1bfbb1a62b7e263b3262026dda7eec4518e2fd98687bc102848ee9ed3580b71c96a0fe724e0b0afd07e062d6fc2290d3f524e174b308c1368033cff68c1a5d7564cce22961acde57cde6aef57f7722a1bd0df64feb33d16282cd641c956a509958c23035b7e3a6f2bc10e6063682d20a3d738e89f1fec7ebbd6adb4b146d9794074bd4864cb87dbd54d320aeff53fc57991622224e0734c8dd41f5dfc8c60e3f091983d5467bc3bca8508b12afd8a39672ebcc9a183606ac1bdbd25b93b36ccb36577767dca930e30eb0615d4d4d3c33266dee6d6fc73103e0e476131b725b9c90c59ac4de2a88ae0eb30094eb06ada5a5a181dd0316b37c26d895bca463c634fd86deecd94448db141c0343bfc0461c60667b2c17eb92ed08280b6dc4fb9b2ca74dd31b973037acb465e95798378ba401253a62d080fe02408ba501259efbd380be0540074a03ea625ceaeb00b4441a50e29e8906f433003a481a50622d1d1ad0f700e86069405d4c76fc35001d220d28d1939506f47f007453694089357269407f06a09b49034adc29d180fe004037b7e1aaa30c79cab94c599dd41189555b3ecdfcb12f983fb660625cc7cb7cef3e495bfa955d7f9cffafe4b1493dd7747709cb1baa1cce4cb7b471045db818f30cffb299dacbc4ba8304cdf3643448ec563666d2f0f449419cd5accdc9c5e472afc04cbab59dd0b492b425cae519f40690c7521b07752dbb44a49f7f123550daf9672f90caa14cacf9110b5336defa93b5e4862112619593e00ea9d128e7b016ad5d60d12ab3b168cd346aac78fb2a348238c77665cdb12b8127ea304938073b89f32f2fc4395c12ce814ee2bc1e708e9084b3d8499c2700ce9192700e7212e75b807394249cd4e3111ace4700e76849380b9cc43911706e230967919338f7019cdb4ac259e824ced980738c0da77213cc540f3caad649dbe9df065bd2b19260ba98eee07680b99d2498c403651acc3b00e638493089ee0e34987702ccf1926012cd7834987701cc09926012dd1c6830ef06981325c1241e20d360de073027498249746fa0c17c10604e960493e8624b83f908c09c220926d1019c06f3718039d5467c47befe3bf8a9ca134ef282e02f7743bbeabc10e1f64c84cb6b84355e3287d3b844a551d544a5ff2ff79c15d605743b30d1f5f79a9e62461f0e4797721d9fb8e54056891bca69ac13cb7e7062b963db247b090e8c8b161f018747c1b5de6c4f8526523d44267422a15dae538876271b529c74b999ee35cd96934d126ef7268c5e109fbcb30dfb677a5e1d25ab655ee01f6a2da11b2d29e11570eebe8b941285d4830e5a32ad913009ec2a0525f5908386f22fd049779382927ac041437930a09c260525d56d81867213587a7667a2ece78591f04102d730c3f350ad812ef0ff56ea526a41cd209b4ebdad4589b6253d133c46cb6df8dca7d7209feaa99aa40a777a82ededecaefb34c4f58078ba2d354af9dacfd59756e9ac4fd6f3e2d2d4a843418daab0313514fc3f9d1a4681dc56dac8a2a340abe2c54a7667f94d24bd9d2bbdb13e9b1acd2608c6b128c734bc13006f555b6a0bd8dc34a6c59f16357204985b66d8b2ab06d62dd5d042afc1963476edc00a03f74284336d65cc473da0144a6d289da046d72caf4a345ea1b33ca959b8b11dccac07c3d09f6563e80ff454bc68546978d7b581f50065b59c9cbae48c3abc991470ee2109e72027713e0038674bc259ec24cea980b34612ce814ee2ac019c7324e12c7412e73fb0319d2b0967919338fb8174d64ac299ef24ce67413ae749c249ad0149c3f90de0dc53124eaa9b190de7a730d8eb24e11ce224cef5c020526f2b2151e0c0a36e35f96bd793097fe285181becd6d08df6971a99f8c038bf893dbc20b106d58d674b16da0d006da3d4f2c4d463689adbceafb034cd978a96ea7742437b3748ed021b866675823fc76b4f09da0701c28536323ca953a5f9da85b7d11e3e9abdb300f02db281af58bb46b4972a8cbf839eb9971de92bb68f8f3678ef82a5656f1b4b4b8197ea111a3a8ca7fbe3bb9e4af07240bb8f8d409bcc7640854e96aeb81366c97d25c174f174fd3180b99f2498c418641accdb01e6fe92601263906930ef0098074882498cf6a0c1bc0e601e280926316f030de66d00f32049305d4c0a7c0dc03c58124c6268220de6b500f31049305db4b33f0e300f9504d3c57ade4f00ccc36c1c5a981c62933d9dc6548a0e66c51ef786d099c3dbd6af38682ac8d8e0625a96bb3b85288fb091de3f9bf494c4f9929602702b30721c290d2871cea4012d05a04749034adc9fd3800e06a0474b034a5c8e68408700d063a401252e4a34a09b02d063a50125da376940b700a0c74903ea62a2df02007abc34a0c43d3b0d6831003d411a50a2ad9306b404809e280d28d1de49033a08809e240968a1a38afd96e0a870b234a02e6e3df301e829d280baa8366d02404f9506d445c57e63007a9a34a02e6e3dfb03d0d3a50175d138b216003d431a5017d5a65e00f44c69405d54ec7b02d0b3a4017571ebb91a003d5b1a50178d232b02d07324012d727451da1e62ddce9506d4c539740b007a9e34a02eaef2a301e8f9d280ba38876e0a402f9006d4c5557e33007aa18d547f88339b02e7d47200b4a0ad8580f7a2b674c9498d1b261a494e66a1fc04505e6c2380abc46b83f0419a8f5d17b0d35f2227cf42a1a3ceb463411a2f958493ba0cd1706e08382f9384b3c0499c5b02cecb99387b47e08c4e6031c16754aebfa64eff5e5d4f4d60318ae51bba2aece3afb09530552d43aa24d5829474a9653a296a83fffe1c08902dd39916e6ebdbb5b46cd1aa7eed0fb0af64c25ed74b2dfaa350d62514a6a4b4464bf6d4c455aae922ae4c8f60c9f4959d42cc57b1f55454eed383b9c77841baf5f17e132a15300d252d9c5bad304994573351ae9d26b1350974d9d401232e6eb43a601b81ac5e231db08b85d65607c0d74a074c340bd2009f05e582ae930e9868c8a6011e0c127c3d13f09aa0a24dd54a9a5ac6023db7d46fa4d20b0aaf36fadf37d65fea2a3c974bb09e084bdb0d6d53dc32930c63448f159ad6f02cecd86eb4552a28d8b5cdf054d99546bd4508755db773ea94c0b6e1261b11a5058b7156ea2d82558cb401ff3e0cf89b6d0ff8e8ddd6640d53d91a66e8e6e670cdd9e7b3d03e0f3ac02d3636b658117ca45e80c6eb15be32d114eecaa6f8df9d5cc6ea6d2c59b4b46f8d60f6bed5c6014c7a25db32bd2ccdf5ac150aa2a19c0f286fb3517e6da0f7ffb3fcda71b078dd2e57cd22c602d0f482b740cdbac346da0ed3796cea39839b25831e8325ec4e49309dcc810230ef9204d3c52c900f03ccbb25c174310be4a300f31e49305dcc02f900c0bc57124c17b3403e0430ef9304d3c52c909703ccfb25c174310be4fd00f30149305dcc027902c07c50124c175d832e05980fb1618ef17f5da18f453239f3776f3ba98c3e49980fdbb0da67ea8e4e2d5e457346df102c4c8f48c2492dad46c3b93ce07c54124e6ad1541ace8760b03f260927b5a42f0de71580f3714938a905a769387f059c4f48c249b56dd270be06389f9484935a349586b31a703e250927b542320de7d180f3694938a9c9dc69381700ce676c1c129ba34f82a682c4d944931cedecf22538bb7c968f72ac7f81da422aa99cadd1aa38d20affdf414323fc9feab7950e6e2ebb83543ec744d9cd0b4b4eb6977a75fb02bce765782e294f9039feb7d6ea57814708d182a4023e2968bb429981179868d7f142979a61fe45b57ebbe33df45952ceb5aac1c0f1762f7060b4e2b544f3bb2b06e97dd1c6fa6e5add877a41184e9576c0518610a201998673db4e21ce9724e11ce224ce5ac0f9b2249cd4d2d2349c8de093f48a249cd49a61349ca701ce5725e12c7212e7bd80f33549388b9dc4f902e07c5d12ce814ee2fc0a70be210927f5a49d86731958d9df948473909338d7039c6fd9da29d5fa1f9de5a97d519477fc44fd7beb815eb4641c03c1def476dbf8ca6712444bb48ad28268a781a7c83b928ccc439ccc49be0e9cc6bf2b09e76027712e0538df938473a09338eff1429cef4bc259ec24cef300e70792700e7212e75780f3434938a97ef3349c2f02ce8f24e12c7012e734c0f9b1249c454ee23c0c707e220967a19338f7049c9fb6a5f77c6a0ae241cc58385a12e23eb027fa4c124c17333af704989f4b82491ce63498ab00cc2f24c1244669d2607607985f4a82498c85a3c1ec0630ff270926314a9306b32bc0fc4a124ca227130de6d200f36b493089871d34984b02cc6f24c1246603a1c15c17607e2b0926f1208306731d80f91d1366ff0898d1bea061b2f689feab201c76baf656aed15f5ee7515307f763a13e18cee3bf6fdb506df4a4a7cea8345ffaad406e7f900493b8d6d3606e0d307f940493a885d2605e07307f920493b83fa2c1bc1e60fe2c092671e74e837903c0fc45124c1783b96e0498bf4a8249b476d260de04307f9304936887a7c1bc1960fe2e0926717f4483790bc0fc43124ce2ce9d06f35680f9a78dd213155e4ba5d7d20b541195245a81aa5d6163f91713eb465e6ac99420dbfc4cff576aa75ee973a9d03f87fa5f32ceffb7ba4a15614bbad39ae5d9c55dd34a20cd7f33b1af9f867d9ea7e23d03dc0d8bfb99bcdc9c96add4abd38f6c11d78032af0b09781e04d7fec304de2362fac006531d6e692069d9ea27c384f1af149044ed8006721280fc4f0a48e25c4a0359e48520bde5848024ce913490eb01c80e524012952a1ac84b01e412524012eda134905b02c88e5240122d4e3490dbc162d3490a48a21d9406f24690c8ce5240122d4d3490134122bb480149b47fd2408e07904b3241f6f54c05cfc6fa972cf4c6ebc66af5df0d7a179f9a8edae5c441a7c2b05f8a09b92740c6726751305d2e24b921c4172fcd049af41d491a40a67b4d2b6e655e9b8bb83fa2a1ee0ca68f6598a8f3d350371a41d61b6daa655e7a32374b96a7333b92f07f08a6be6599f85b3a05689a73ccbd79b80e16bbae9260124d7934980d00733949305dcc4952093097970493b864d160ce0098dd24c1241a516830ab01e60a9260124d7b34987b00cc1525c1241a5368306703cc9524c1249af868306b00667749308946151acc39007365493089a63e1accb900b30713662f2f349e28cf1265ea1be5ffb2de1be1ff5dad3156eafc61aa61653c6970da2a35cb0bc1aec2041bf84445579d6bb30201dd59589704acab32b10ef09a5a54c779516906b7d7a692594dcc80657a5a5006962011619dffaecb12dd1bcc82ab31d1277394984e05b039b58772b3c2e77cc0d953124e6ae0180de7058073754938a9399b69388700ce3524e1a4e66ca6e1dc0170ae29092735df3d0de7771d429cbd24e1a4e6bba7e1ec02d2b996249cf94ee2bc05a4b3b7249cd45a21349c6f01ce3e9270520b03d1703e0e837d6d4938a985816838bf049cebd870f1499ee057242c4f759eaa08d6a099a8a6eadbe101de15704edf970979052f591670709ae9cf82430fad7a5d4790d17599f892b53ecdc18e38e489c722b4e1be37d84bfbd97036cba646b28b7568bf87d5bdbf34a044cf111ad01f00e87ad28012873c0de84700344f1a5017b3337f0240d797069478224a03fa3f00ba8134a0c453511ad0af01e886d2801215781ad05700e846d28012bdf06840df00a01b4b034af4c4a3017d13800e900694e88d4703fa2e00dd4412d0424715fb5eb0f5cc9706d4c5ade79a00b4401a5017d5a6350068a134a02e2af63d01689134a02e6e3d5703a0c5d280ba681c5915800e9406d445b56915005a220da88b8a7d0f003a481a5017b79effd7dd99c546558571fc8ca148a24444949818158d3a0fc85290c8be7441845ab6a282854e3b6d196c07ecb408b88be02eb22388803e1879f28517139f8d0fbe490c4191276388f1c5e8b3e7fbee1de7df76baa9ffcb779a4966b973efb9f7fece72cfb79cef9b04401fb5063444e5c844003a9709b498cf5bbc95734e0cc523595d4f7cded3d6d75f7425b4f392582b323c67076a34679aed732b48f4f32dc124ca4a34983980b9c012cc10adf21980b9d0124ce29849839905988b2cc124ce3e69303703ccc596601265231acc2680b9c412cc101d173702cca596601265221acc4680b9cc124ca25e9e06b3036056598249b41ad1607602cc6a26cc496e70dfcfe29d52830eec65450a9b0581da6aaeaf0b6d5454945f21c40c4b5f8d29a1acb5a43f1215478876cc2fa08b2fb70634444bfb7900fa9835a0215a898e01d015d6808668c73c01401fb70634444bfb6900bad21ad0107d413e05a0abac010dd14a741080d659031aa21df310007dc21ad0102ded470068bd35a021fa821c05a0ab2d01ad0c7462ff3b2c845d630d6888a2e76f0074ad35a0214e9bae01d075d6808638b1ff1580aeb7063444d1f32a006db0063444e5c8cf00748335a0214e9bae00d027ad010d7162ff23007dca1ad01045cfcb00f4696b4043548e5c02a01b9940ef75fdcd739113ed3a57ed566aa4e5826b8db76198e0a5fe0a728e9aa6821675f933f050dec4c47b9b2b455ddea9119772febd39b676269256ed300b62c195203e934410abd971f0ea525b4d001f2d97e277d0c51bafa705bede1fb2cd7f6b71dd5c0b3cad255e86eebc998972aaeb1db3ae4b63d049f8ffb54ec2fdf7f8edf2b9cc9fa4da17d01563cda943ce608e0fc48714cdf1e16b707cd8c24f09108da2194df52740057914a1be5953007468f15d498dab0fb05af34918579b9858a7fce767ffcc209ffe6721fa62c63a60a2c04a037c1500375b074c1c7969802b60e46db10e9828d0d2005702e0ac9da0c295faa2e1a439edd6c304add512ce1941e29c0a38db2ce1a4ce0768389700cef6247062ceb081125dd1f32ad1c64e49cd5dc4b93589146c95312cc1271c4428580a624251464b4830a0c95ba740639063829de77a8bb9db5db93c615116b0ec086704eb157f29795bb5565a862b02af1f4baa92f1b08c625b929a878eb2c3469480b06fe2b6d1173fff384ccf9e4d267efecc51a47afc01fcb03aeca81e890e4334d5e335983b7432514e2c3377a8f3bb67f5c197c07c8116d3e40e688df924c2c5f4176687133086384ed2d0ee87d6b99d89f656689d3bfacc631318296973d963ae0470471223e5f024ad10831d2c0494cf252116fc9ba8504427605a27bf0060bbac82253edb6960bf04b005ab608943010dec1a00db6d152c519345035b05607bac8225da0368601703d89d56c18638437d18c03e6f152c71e1050dec7900bbcb2a58e2020c1ad8b30076b755b021c6366d07b07bac82252ec8a0816d03b02f24e19d3d90baafafea79a666c90d4ffd9c06ff9617ad01254a5a34a00f01d097ac0125ce576940bf0103c9cbd680866871fa1c80be620d28510740037a1980be6a0d2851f6a701bd04405fb30694381fa501fd1380be6e0d28711e4a03fa0700dd6b0d2851c6a7017d10a64d6f58034a94ed6940c702d07d499ba21bfc674ecf51a3c5c87fadb1bf545ec53829ae93abf33fc342bb053afffe245c761e71d192cb0e4f2231df3f9a0c7fce95f0bdc9c4778f2b6fc9efbf9c2da305c8994377accc8263e55b492c642b7af1897fde0668a303fb461167a434dfa829e01cf9b61de7891043c83742f77f270917f5e13ee9a9997269cff9767818bd6b09e7dc2071ee039cef59c219a636f40078edbd6f09676590382f00ce0f2ce19c1524ce6f01e7014b38670789f317c0f9a1259cd4009e3c091e1e45072de19c1324cebb01e7214b38a999a068381701cec349089a43eb9736b848c494a26671754bb52cf9fd2e50db1d4922c1d640adb4b7a0497dbed344cdfba08d1eb50433c46c65f703cc6396608698af791cc03c6e096688f99a2700cc1396608698aff92f98c47f64096688f99ac740cb3c69096688b14d7e829679ca12cc1097305e01981f5b821962bee6ef01e6694b3043ccd77c11607e9204cc28a07197dfb55cd0b7b0177de7d51c7c63459fc26bfb155ea52a09514a94ace205bf7db9df92572039ffcf34b7cae5f4a826dfb636f9d7c86aa0d1bfca6d4fa56ef15754e376f9cb93ad525e56cbeef4ffca9515dc8cf97e9733d22026c40d22add652098f2432bfc45095b3eff6c7c935675dbd7faff5159753a3b420496b2ae4d54e22af4a641f3943de5fc956ffef76d529ec89032fc9af746a9c722ac6668d340ee9f85a77ea59bab5520a7a4cbb1e2bd79f56dcab63454f3a351e7e156366cb710d7a156975f4c0c6d7e03964b5b4560dfad4ad7b4993281f63ab6f989c622da553b7fb63ea9441be5720a9f2f16623a2c329b9746f93fb1dd1a22e014238e218b58ae82eda95a068a556f8ef79a525758d2514627e754ab8c7ff9ad8ebceabb4d43625de13975cacb13be3962db52ae5d66918a1e8ee063b4eda45b5dfab4ddb86f018786fe950298d13513c539db6bd4c5c6719dfaf8bb53c7d81df2d35c7bf450b73a6fdb32427ea739dfe15fd2a6e1fba4ce94183977656ba49aafcb8d9f1bff5fda1ee281aaee478a1daa243926c1dea4e87bebf81c7919b07a995e912b76154dfff39a9f7b8dab5994e4edde4bfe17052ef77ceea456d6ebdc155fc0d5eba80aad7980c00 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/7ac7b5de662781741ae394254c55e90f.asset.meta b/Assets/SerializedUdonPrograms/7ac7b5de662781741ae394254c55e90f.asset.meta new file mode 100644 index 0000000..7118a4e --- /dev/null +++ b/Assets/SerializedUdonPrograms/7ac7b5de662781741ae394254c55e90f.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: abbc82eef525e6748bd66829b124d587 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/7c3b0ed380fd9ec44967540519afa935.asset b/Assets/SerializedUdonPrograms/7c3b0ed380fd9ec44967540519afa935.asset new file mode 100644 index 0000000..16ae737 --- /dev/null +++ b/Assets/SerializedUdonPrograms/7c3b0ed380fd9ec44967540519afa935.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 7c3b0ed380fd9ec44967540519afa935 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d05781cb7f3b0750e333339eca013dba1366d030e35e4860a699b38b693b871a08650296566e6949999997e65666666a66fa5957cb37b9abbdbdb9bb3d4efdf3eed7af77647a357231a51562e73fe890c75feb788cd6393d970b69095b2b56c8df3d764e7badaf9d7bd53cf8b58a5735de1fcbfd8f96d28cb4ef025ff6760a4b3f3ff19ce5d15ab76beac6125ceb55cfc3e9f95397fcf70be2d73eef8d3e5ce7f65ce5b91face470b59219bcbe6b04e910e09442c121f55c967111eaf4863e7ff93d826e7d732a1140f2457fcd4c9f9df7ce7972af1db6a4769f5de62b68788d66ae7b712e79b4a56e1c85c262436ae5fc4c41fccbd7495d76ef2dac5f9af89fcbb9efcbbb1fc1bbedf405ebb27f97e0ff05d13f03727b435cef73ddd6b6480736dc858d636e09e7ffb957caf972b2f6b651c59bde5b58fbcf69532b74d42ff46f2da2f417ce3c9e80f6425c3acb1bc0e9457c5607c8ae10f721945ce01f238cb81409f8120ec26e077fe2c2744dc553ae6f8d231c74dc7ac3364fa7d24df1f2caf43e5758894edbcd359e93f4c5eb313e835dcfd8e8d65519b75c2acb74edee7caeb08791d29751b2c75dd0edc87d545a5699e94394886b1bde6b97a9fffbe83bccf97d7025f7a8d92ef4d90f7a393d42719fb533a0d91614c04f70ec7fa4be3c852e93ed497ee43e5b727b81cebdfee8b0fb03faddc3152dea414e231cc178f61ae2e0d72bcef25d441c9977615192ee54e06f75cee2901e3565f7e77b3bc1fc712976d5d93f86dbc2ba7b162bd9d1b4ec3f6eef386aa5c51b6bc6d023d55dae6fad23657caad907255fcb777ef238a733f20877f5fe8933bc227778494abca88d149eaa9f28eb29529f25ac86af3f114558f489b602a0d47326f1920cb063621fa6db72302728b9746537d699d2dc3cd4b20537d3f4d5e9b24f9be7a677a089d67c86bd324c36c2aaf3b8608b3996b0b8dbff3d9c2760964ce74f936ae063a38729aec2bef67c9eb6c799d23f9abf2753b709fc80e12e93257eac2401a38ba346d2def8be47527af2e4e63d5abd394f4e914c99732a7827b7e2d90cfa7817bae6b911b4ed387a5ccf9f2bac0a7f3423a9d9d76b3f8ae4573601bc97c17cfbe7676e3d76c842bbb998acf2e3edd6644f56e5c08be557a24931f76932c549d360ddc731d14dbc5bef7a6837b7e1d1d0d4ffced7cdb5cd9564ff09c7f3b03dcf3df774d52d73d58accd7239e340d8e364d8b2fc6f7e827c774f169bf774dff2eb58f06cac94f796fc6e098badc7d47b3c6e3b827bfefbee49c66da9463f27dc1613e27c5bccbce5cfb4a83d347a4e3e5b26f5d98679f396acd744bf407e13a990cf4adcfb564a9752f90da85bc4df8e7e2d557d5a26afe54c5fcfae001c647e642ba361f756fa2e8f1396d483ede58bf7ce5139cd3a4bdd5539b68a79f38cff5dfe4cc55bb5c9abe4b532faee74c562adbcee2d751bcf3c65b3e8b2abe7fcba9dfc7d26b8e7efad8ecaee7abf7ca6c250baead2b3c617775d1910cfced6bbef4e536df80d2edb56e7486e0ffb742865f1edb7adbc7690f15475d846796d03be976dd0c8f6e05907f96c07f9fd6cf08e7aceaf1398b7dd3cc1d5bbcd393e39eabb49f2fd39e09e5f27cbe773c13dbf4e04f6a6c22864de32b1d00db3f5e32eabd6cfb9d736d5beefa6306f193945eaea7b8f6d92ef15f99e6f96f7d3e4ef3b817b7e9d2a9fcf03f7fcbbf6b17160fbf8c2f0f7f5b667d13e208f537df9bb6a93c0f4dbcf7d67ca16baf46c57e1939381f46c2bfbff6db7bad77685c9a5a7ffbd8ca4e7fec1d2b3cd4bf2f70334e9b9853e3d3bacf3c9c9407ab65fe9c6abfd3af7da61baf73b7620924e072548a7294007690331b213d9c0749f6cf57d101b3838980db4bb58feaeea8c44657abcfae3305766ad5fe3707955ede64220bb8bd407d451b57ddd43c16ffc5ea6333b8479dae8717539525e5b24884f57f01ebf1e1522fef17e6b28afc7cab8edc8bc7942b6e93ab58f23eb3897530fd5e63fdefda6b36a47499f554795af4e0471e261cc8cb2eea07c3827c9df6681781f229fcd06cf8e91cfe6449f4564bb859dec4b9ff9bedf4f013274bf9f0a74d0fd7e1a8bda34f76d6e91cf4ff7c5e5109faeb399a77dc5ce888d6b64b62f6cc53699b43c537e3bd797967365babc1747d659fab4eca2fc0667fbd252b565545a1669d2f25cf9db4e20dd86c867f334e93b1f70507dfaf390b454bf9f0fe4ea7edf0a74d0fd7e81372dbbaa36e185485a42fd615a5e141bd7c83c5fd8aa2f112f2d2f9157550e4e8872adedef5f2aafca3fbb2809b997c9ebea38727bfae4ee9c84dc2be4f5f23872af44f44d253c65ebaafe58c0bcb6ceef1dbbedf6541c595731adad7757fde6ab99d7d6af615e5b5fc8626dfd5af9dba268fa0b16fcd9ce2cd6d6770176a2ece23af00eb455f5fbf540aeeef71b800ebadf6f641e5befa1fafd3731bdad43fda1addf1c1bd7c8cebeb095ff275e5adee2e3acf8eecabc6da55dddf4e9a1f4536d83e359fcbaf15657fe8eaabcbf4dcadb4dcadf15dcf3eb625fb88bdd707b3677e5f4527eb3e6f2793ff7794fe567bf5d86a7fabf77c8f766f9debbd3bd9fb955dedfede37f8fcf56f688da5b6d5cee02bfc1b8edc9bc6d927be5f32520adf604cf605aa97e7422aef7c9ebfd3e7ebb4b79f09ebff76054ff998ac103f27a64f4b78e137ce9db1ce8f190de5684ae20cd02b791549c1f4e10e72065d252e62d9396ba7690bd348eacc7e53b87c479e77ff2faa4bc3e21e51733afdfa658fe2ecbc0c832dfefd2cf26ca6c555677067a28d9fc9bc549c4ff19797d565e9f96e19430ef5840098b962bfe3a22d5766caabfad903a95326f9e2f75d3a14f36f3dae2f204f6a1f2fcf3f22ac7a522653e06caf7a863302cc9b0e2c42bb282797da7329eec0579bf5cfe2ef366a4dcf77eb97cff4579bfd2f7fe2adffbca6729fbee91bdbcefb397811c7eff4a346e11e93f65af8267ca5ffa5a944f3fd916123e5f10367b9d79fb77aa0fb75abeb707f80e3250bfab72708d2f4e6be5fd1270cfafeb7c72d7f858adf3c9dddba7ef1bf2fab6bcbe158de39c59e01bc093bde99519d7a65f91322ae5374bc1bd63d3fdde8b23437d2bfdc9916a29a318dc3b32fa4b9f75ffa1b8ac488d8f5f1578ceafebe5efcbc03d97bd258e7eafca7737f8e2267dc2fdef4ee25be9e78d28bf4731b8e7327e72e336a0711c59efc8ebbbbe345436cbe5eda349d77d407af2fbcd52871270efe83060ab7cef3da6b7ed8dbeef4bbddf0fbc5abeffbebc7ee0d36d5fe61d0350f5f1c7b84db24f7cbaef177da756bf0f7dfaede7d35bf902cb801eea39bf1ec0bc7594f2017e2aefb7f87e57b6a29b63142f8f7c26afd0b7d849ca3c30fa4cfcedf0cc91739d220731af4d4bff1beb0cdee7bf2ff77daff41c06c26ae27bd6113cc3c62894bff360f0aef253aafec26cf08e7aceaf87326f7be45057b7c14b7d72d4778733afbf53facd224730afbf53d65b91c300b7c3e4f548e6ad578f74c31cb48b9b568396bad7c163bddfc5f83bd573e5ef3c9a797d9247cb2bf09389bfeb6b64fbfd9deab9f2771eeb93ad7c63ca4f340fdcf3efa0bf53c9fadc1786645adb3654fe50e9efcc51edf97836fb85c666953d1ca7b107d5269e0dde51cff9f5049f3d9ce0f21aeaf77fabef4ef2d983f2d19decb307e9778b9c08b8489f5fe4149f3d9ce2863944fabf8748fff7d0e9deef62ec413d57f6a07c713b817b7e3d15e870aa8c9f5fb6df1ed473650f67f8642b7fdde93e7b385d630f4ad697be308ef3d9c3715e7b18acfc3ef1ec41f9a575f670a6c61ecef2d9c399e039bf9eedb387b35d5ec3b7f8e4a8efcef5d983f2f39de7b307e9bb13f3689b80bff9f57c9f3d9cef86396ca3cb61d816f73a7c17ef7731f6a09e2b7bb8c0976617c8eb56a0c356193fbf6cbf3da8e7ca1e2ef2c9563ebf0b7df670a1c61e94acaf7d619ce9b38733bdf63054f904e2d9c33771ece1628d3d5ce2b3878bc1737ebdd4670f97babc469ce093a3bebbdc670fd21718b9c2670fd25718b90c70917ec9c8953e7bb8d20d33f7089743ae1c4b18b1d2fb5d8c3da8e7ca1eaef6a5996c1f45ae023a5c25e3e797edb707f55cd9c3b53ed9ca07788dcf1e94ff10da8392f5ad2f0c95fff3c03db087e16ace433c7b903efbc8753ea6d7c978bee5ca1aa9e6b17e2faf3fc8eb8ff2fa93fcee36e6f12945a4af29e97e7c5bf9fd0aaf7eac9d94773db051a5fb0de0992f1d6abf57e970932f1d6e9257e5ef9c07eef9f566f97c25085f3de7d75be4f556f95e39b877f815f8dfbb5dbea7faae2aefdd01d25bcec18adcc5bc79ef0ef09c5fef66debc77b70cb3da27477d7727f3e6bd3be5f55ee6cd7bca0f780fe0fa3378c6ef756dff5f7ccc617f47f5076e8bfdaed646e43bec57f9fc7ea9d72a700f99ddc7bcfd9afb64fc557ff3379fcebab9c9bffb7486e3bc6a8cfe81d8efc433f04eadce0ffa747e30499d0b5df905d2ff5b9b8632ed6af3f81dcc93c7f32678f5af4de38a0436b0dafd7ed4dd3ebb5c93a43cf57cadf7fdda7cfa108bcda7d06f9a289f2a9bdc09dcc33c310fdcf3eb23cc9b4f959e8fcae7eb805eea7df8bbf2a5fce17299a4fcf77ffaf4fb2b6a0be3d45cc078e5ebdf329cc798b77c7dcc4df7d172fdc06855e7ff23afaa7cfd575e55f9fa32f396afd2679674f9fab72f9d1e0769a2747d224e3aa9ef553a3de94b27e96f8efccf974ed21f1d79ca974e8f83e7fcaafcc1cf306f79fa8ccb6b8c9cff3a660b1ec75a19cf326f59abe2f79ccfa69f05cff9f579f97ba5eff71798b73c963ec2dabcfd22f3f6eb5f74751efbb837fc5af6c0bf59ab1bf06f2664ff9a8fbdf2dbbce463affcadaffbd8bf029ef3eb1bf277354f54f9b3811fa256f612afecdaf53d9d59b47c4a9437daf8f829ff6535b877f84dfcccfb3eff535cdf62deb2f42deffb9188efbbb7e5fb35ae3ee2deb1a589306f836be49d3869a1de5569f19e2f2dde93d7777d69a17c8172ae4ce47d5f1cde77e3b00da6d307202db2f43a45543ef8c8a793f4df453e04323e94e13decb240c3fd18b0f0cdbdacb513e59b8ac79448ff6d0f71c3ddf67a24dc78fac77b3751ba7fead351f9203ff1a5fb27be74ffcc97ee9fb9f118ff19a2d3e740a703119d543fe64b9f4e5fcaeb1780db17323c399e8c86fb1508d737473350ba03fd13a67b00fdb7dbd70d77bbcb9170a1fe89d21dbe9b88f1373e1d65bf3af235d0f16b57c7edb35d1db79f8584fb6d1cc6f1de4d649bdffb74947db7c8773edb5469a66cf3079f6dfee0c6638743109d7e0471ae8fa46d0379fdd9a793ea57fc0464fc24c393fe5f34dc5f000bdfdcd140b609f54f649b01f49f20c7bf261426a17f22db84ef26b2cddf7c3aaa7ed0af40c75fa58e32ff4fc0f2ffef016c13bc9bd00efef4e928dbd9913f808c3f5c1d272e95e9770c12eedf49d8016cc3fcc5bc6d18254fd7865176835df9fbf1da38aaadf78f94b9de77bf41bea7da40ff023d655f809ba4a7ddf92f78ceaf11e6f103887b87db9452af9cdaef948dcf01f72afff3e76a5caea1bc3602bff3f7ebc9f7b603f7fcf7a359747ececdbe6f1a304fdb5371c992f690d550febe09dcf3abb2a3cd5e4e5960bf07f10ebf36f672ca6a049ef36b131fa72692d3789f1cf55d531f27b9c636ab19f3f84bb2e4dac8ace6ccd3c7cb9273bf0ab35d268539ee758a2a67a55e91a648f82d7ce1cb79de592d7de1b794d75680492bc94be3f388f8fc1b59ad7de9a9d69869d23346c7365e1dd59864edf3b5def7551e13f7208f4d56fdf37fbdef897bf0de24392e1337cf7594e92ad7bf4cb93ace3741c65575dfcbb23d4bf92da7817b4787a9dd5d1da6caf7226a1ded64109eae0fdbc227bf9d94bf0fb8e7bf6bd6f245a43d44da786578fc71d2df91d53efa7dad1f4ff9ea5a83df949fbe39f88edf2b3b9bcc3c7e89c07391da32ed3cdb696abd962ac73724e0d68e69e7554e7b38a01cb97f839a7719e9c83cf32e23725ca376dea59c1790a56c46f967e4987f16b0afac0ee0197fd73fa732816eda67d25791d5c967879ddcf84fbf58da88f2b3283bdc3b010755b67506efa9b0c0be4611397723ab2b88277cc6afdda46efb827b47b71d737c72bbcbf7f60361f36b0ff97c7f700feb04b5e7c5789fbc6ca0534f37cc19ca27d2d517462f2943ee693043f9129a81df9b003dd53325437d0bc2676a8ed501320ddef38699280de2e61ba943a45b827454ac6e0b1e56566fa9ff5470cfaf7d7cb6d6c7653bb3b51bcf996aceb8b2eb3be287ade446e45cffacbe52feeee09effde0bc8e3bf6f09189f7ebef8f4f3861b5136106f1e9df4eb47b2a58c01f29b03c13dbff68fc639a2b881bda1c4effc9a23bf577385944d0f02ef0e02eff2abda4b6922b877f8cf69ed93adbe53eb5e0e06f75c2fb9775796da4f4895692aff0e033a0c05cff855edcf7328b87774982dcbcfd99f2161a9fd6d7602f7304cb54fcd61e09ecb3dc7fb7e96da4be67070af18433947f8e4f8f4ca027bc164a97ec00309ec5572ad6dd30c629eb6caac5dbc714a244ffb4cae338948dbcf527b89ec04eef97b6f06971d5176a2f621590aeeb91da97ea32cfb22ade287a1e445547e52f6a7f6273912dcf3abda37e320700f6d5fedc9311edc3b7acd7ddc2767ac4f8e2a7754ba8c93bf1fe5fb6e1c8817fffd6837dde6bee58b4f82787b9f358888beef7456c68ad93a962b3a57dc3292dd4a517d99781345d18f13bd400e4d045bcd36399f96e976325c28f649ac66f90e17dd4e865d44db4e853e59fcbfd879a35c083d262b26883b6282e0ca5538ff96816d18ab9ce7d3c42e8e7c23c672e797e16c9673e55f2d6523d962e75faf94454eb015acc6b95be0fc7f9d90b7d4513bf6cd4451e25b36fabf99e7c87477945ced3c5140d739f71542c3f9e2ffeb85a66542fb19ceb36ab1bfe51ab6824d72ae1b4568b171af74fed685b94022d3eba8df58127bee6e5fa992a9d0890dd73e57d8e2ffa5485da48870871c23f361fd5cd1433e2a2625fe8fa15bc87087cf0c2963a44016f13ccb63b9c227342f8660f038c6c6506fdf2eefd1ac206e5cf464787277133188a6f0a6db67ed39a0d1c3ab1a78a396cf72855bab7b82a8c503cbe5e588de6890283468507f0457d48f3fa2c32f5c35f33388df7daf5cbc173c011a8acacf9b00621b8b05cecd3a50792e14ca5708d5a638cf78c5c645704b2e1382dd5f360af89532a23cca5cacfb0b2f476bc0773c8459627762be95f026e7570ec3ff668c1d8ce04a371249195b5127c2812566962e31858f71419de4256ccbe4f8c9d9b83616d1e4cc15adafce718c1e0b4b34cbb264db4c65cbbb6f99bb66c1895f7cd4409f2e4d45baa4121a9632f57429d334d3d92c71bd122f5d9ad5c62b9a2efc1f3dc3e6886d27d20123585f47b059a66d9bffb656482976de0dce903b7587f88b2a3dc096881126560143d84083700447d84aa3156bd0c4a715570891dc509738cdeba6124fcdb8794faf930f4103d4b8dbc4ad83839a76231d3de1fe5f4a4a4ff52de73b9d8899ce6fc5cefb65a2a1ca9f1739128b9db0b9bc892284687fd4fb457cb2dcaf3fcc4f564bb59da0da0ff494c36a86116fac213e82db6b7b8d198832ce9f19dae099a10996cd3a84cd664d31c91dc34a6e8649ee145672734c72e7b0925be8b28d18f9da3d23d926ea92517f4d72be5de94466bde867d738dfeb5c38f1b34b97a4b34b57915db299ceb1144c232c9bb4d4a51d7fd84da7a43fe9bae249d70a13dc3da4e0d698b5f5086b6d6db022a3671a8a8cb63a5316901667b006c877fe2a74e2c0bb3bd1bf9463c85fc6e62730e45e4cd38c17e9d32ba6840f1a3237fa864cfed30869c5f716f9237c6058ee68a74b346126c5759e68854292f2f7153b9236054ec03eba041496da3f49a6c969d13799c4ec271233bd016309db1ecbeafdd390d53be884f3ac3e2099a2af372eb82356f40d0c5bf475c224e78495dc19233d280da4bb60c207a74178579d70de3e1bc2627bc9ff3affc4086f8e0bef86693e54a3f9dc59598134ef8ea5e6b0b0a9d903933c3cace49ebaa25694bf0766a4a84d3462374d1c7ae6a485d3cbdb8bb9432d2adcb56298856ba4866ce639d7e5420bfe9c6b9178a42f7e519dab2baa45313685e99a8775150b3ef69e25caf391a23ce786b1d079ee8e304e1129502e421aaed5868780bdaf58cc66fc3cb71a91da0d90da244f846e161bac36eaa5cb55bca4c9d79434afe98ab138254d3696650bc266d9de3ac93ccb8ed2d8ea086eab7cf0bfa968dbc784938787d347134eaea86437d769d1e0ba82b8bce56210dd953787f123093708535de518f07a69380b44236585f8356c61c02749f4f0fb1899fb8f3e3b8c15d961fb24b20365acb00cd0576749dc67c6676fc48cfbf026c53c56e4485e22b2e1dee231a7e4a66eb978b59c6d164d45b78118636f8d707beba7d386bb22f8b92309db6fed70c1fd31c1db86143c00cbe3e3c3e6f1813ac9bcb4e1f3c8c3b6b07230b5b70fabf620ac44dd4153a2fe150956a20ec6844fd008bf3b2b98f021585698988c8dc4b1eaa198e049ba3cc64d75b2187ec876fe5beb7cc19dddc522f7678bca305a1a648b71d64a51610f05efaf75de70e79f04d17318661493c31ac5702cdd0a35e9f653c074cbc5844fd1089f5e2f98f01158da4dd5a51d6f78f17a83374b56cabacd5b1a660b4f48b698fc5523dce8a522e5aa44ba66b37d9c10f773ae7c643b5bd40315e2b76c71426fa5286b83a4e9484cff693afd9b02fd8b80864142ccc3caade99a722b12b0dccad7096f276e91860f3f3d2178c3a700c3365387ad8730b6e8a4843207223780b2dab672699a2ac8511abd728573620dabcb0619ef2df0a972ee148f681385871d9d6a11a6e1c557cff81b5eea1f7dc38baf53cb11a75066427bac81351a2b54e7680ad5489042750c9617e66279a128a5bc30566773c26db5ae4e6d0ecf51f3846c9ef3c237f8f94cf07afedebf70ad15246159e9d2718858255a254e6077c955f1c2948f862e0347adbbf04596d0e78979224f6452732c5f8cc36aedf99a5afbe606c16aed6d74262b5c9695756ab285424226cc7681ce6c855f757412899f4e3d7b8919d555a2502d9585aa5b74f7124b1f2a45b559e63c5f2ff48efe3e442cd3e4eda5a982f76a419ec7af58f47b31235f288c3cd3f1c40c7d5bac0258a4a90002b5aac7635968674d16fa2b6016da0e537b97b06a6f8fa9bdab46ed7d1b06537b074cf86e1ae1b31a05133e41279c17cc7c20394c0f712226984fb688696e722f89ea2794f87a8acb445f41f5ff4ac5934dceff2b9c67254244b6981dafa6f804d17212c6760f0ddbd601d94ec610ec19926da14e3037cf25c9088e331d628a4e306f7f2d6548fb8b0f5d076f7f4dc5b02fd360df1a10fb342c9b9784cde6d331c9a56125cfc024978595bc2326797958c933b1445ca149443ecb2d4822cec284afd4085f1050f86c2c6396ebcaa6fe8cfbcba28d54b7fb14f56b143b28ab45c993edd4f76e9d5beaf18f709f47b9ec3407c9e773303df7d2e9e93a24f84446dea628163e341ee25cb62a50a87331f4ab34e88f0988be08135ea111fe5940e13b61bc56eb78754e90aea562fe5bf4e948e769108ef3306dd6e8b4e1b7d1740b12ce7c0ce95a0dd2739a0643ba008bc43a5d24f86c1f17df360eb239c2e1572c67d6ac17d578708c0b310df6d669c04bb659b50d83a2149b058b30a4951aa42f0544ba33562257852d9177c1d4aed6159acd82a9bd2ba6764d58b577d349e6ad8ef50c6975f0fd4e82b73a1663e16cc4c2d9945238bb63a4368725b50796c0fb68127842f36009bc27267c5f8df07d030a5f8209df4f23fce180c29762c2f7d708efde2298f0624cf8011ae1a501852fc3846fd1083f23a0f0124cf8811ae19707145e8a19f941618dbc0c53fb608ddaed5b06537b39a6f62161d55ea1919c2b66e66572c99e7ff653b0554d87b2641713f05d5674cbf512858fb99456ead285d7d087eb540a50959763d67484c69a3e0a9809f6c2841fa911be7b40535d85093f4a23fc8880c22b30e1476b84b76e154cf86a2c318f0999986b30c1fc30ad98b6e050619d6b451ee3cdf932b14c7b8df86b8dd8a7a44c0c5c170bdb8f3a9cd4c035df74215b5a6fa5b4e90ac7da873b4f8368bd16d3fa389dd67ce4953b71a3ed66b72be9764374f30ab3d940d9ea1e1848af75980d1cafb1819b031ad8de58a44f08690395ba72564c522e272d67b179a40b84f39e6f92b25c58caeac0b34ee397c927265d269f24ca643ee5854e57acfcaed225376f5b9fcc90b6353fa3ad29573950dbba1ab3d95335365b10b0dcaac1849fa611be4b40e1eb31e1a76b841f1250f8069d70deace13b9a866ad66cd449e69af0b3c4fc735ff8be0941e6be6cc20a89b3742523ef88b993439778e6a6b86eb6b98ead968afc3c4f949edcf1b54694d7414a97cd984667eb34e2534d9738ff8e70fe4b4533fe6da5f82e888efb603a9ea3d3910fa8bbdb8eecec3c5ce53c5ae8fc1d24bc7d31133857630241a73fed87658bf334d9e2fe36c1b2c5fe18a9f3e393e2e560b153c35604ac9b0ec0486dd590aa1790d4168cd4051a5227b40b46ea408cd4853a52ad414e7489cd706a00482d98a3fb202cf48b74a177d1e43a4c8bd472d8c1983e17ebf469546b3733644d1a24ac43b0b02e61e11a4a8762822fd545821bd2e25adfb7eba6dd236043f730cc422fd358e8c31d8259e8e198f0cb35c2ff0a28fc089d70de7cb98221cd177e846470d7e091ba7078ed7b5532891d67e4f6284cf0d521051f8d59d13521cdf3184cf0b521051fab13ccd39e9f50e92f84b9802085f07198155eafb1c27e9d8259e1f13ae1bc15c7cfab0cd58a3b0153fb468dda8501d53e11137e9346f8ca80c24fc272e6cd58cebc25a59c79b22e1c6e65fc5cce98d29287c3ab16eed8e6f35056b02251cdf019ed1bc52feb845b8177d683d8ee299816b7e9b46857ab05af0a7917978f63ba33c952d7e1544c87db753ab4953ae43bff9588e62eff66a3a89453d5e0344c833b741a340669c12b60deb50d12dae998f9dea931df82cec1ccf70ccc7cefc2ccf7ee94ccf74cacd0bb4753e8056d799e8511ba5743e8bb8084cec684dfa711deba4b30e1e760c2efd7a56d40e1e76269fb0096b60fa694b6e761d9e1a17845535e9a8ba6f3312d1e8e5f348d4c63d1b415d3e191784553411a8ba60b300d1e4d5434ed2cc20bb636e642cc7c1fd3982f6fc50531df8b30f37d1c33df275232df8b3164fc84d7300dbd4b303a4f6ae81c1390cea5189da7303a4fa744e7322c12cf6822f151c0485c8ea17f3624fa2b30ad9fd3683dbe5b30adafc4d03f8fa17f2125f457619178511389b70246e26a4cf84b1ae17f05147e0d26fc658df0eceec1845f8be17f05c3ff6a4af8afc38c936f4a81566bf969aed6aec7b4785da745b45acb4b63b57603a6c31b3a1d54b5362a8dd5da8d98066fea3468c2a2d5da143138ba36e004bb9b30037e4b63c05f0534e09b75c279cabd8d19f03b2919f02d5824ded544a2b447b048dc8a097f4f23fce180c26fc392fb7d16ae5eb81dd3fa038dd6053d83697d874e38778ff0239d43b947eec4d4fe48a3f6ee01d5be4b279c33fc5897b7f8406afc29b46a0f795e06f272a752cc3077574a968ac90945ccddeed95d65cf079c4ac5fafb95e25e959bdc49ee4e1d1829a60ea815fa9b98bbf367b698bae39efa912d868d4be5be0dabc4932af1561990ac9f9c502e2759c0e90c410708eec612e8134d0255044ca07b30e19f6a849f1050f8bd5861f41956187d9e5261741f16892f74847a058bc4fd98f02f35c28b020a7f40279c67d6af92298ce2b8ae1fd408ce159bced5cd4c91d8fdbfd23b53e46b1d2fed4c117ef678fc9922e175c5668a3c84d9d2b7badc16d0961ec6aa88efc256118f6092bf0f2bf951ac7ef82119fb8f53683ea6b37fb135e2f23ab1ff303bf3c5b7fc1f93b6fc9f84e50f8e63f9e1f60fd4a7c4e398f1fc1cd6789ec08ce79790c6f33f2c9bfeaac9a69f6507cba64f625af30304639a447c77be89a2a355261647e996d5658be65276c019904f617afcaed3834f6d0926ff694cfe1f2153e7192c75fed4a4ced2dec152e7594cebbfb0d4e17964a56c22aaf428abdd7526d5f9a9cf6191fc5b13c9d23ec122f93c16c97f7491e43950cd8d70dbb3dec9c241a2f50216f2bfba90796f7f81d3da2f62b9b5c754e4d64e328b4e2d0ba2c18b98067cf6568c069db41acc127f558b7d2cdc567f6aab175fc27489e874e996a42eb1e71804d1e965ccf0b2229aa99a7d8319de2b5884eb45c29509af6282eb8714fc1a26b84148c1af639c1b6a385f1c90f31b98f0461ae12bfb0513fe2686a47148246fe904f3d2a7493282e37486ded609e6fdd0a611a41fda2c924a3ff41d0c7b730df6090382617f178b440b2c122d538ac47b58245a6922b1256024dec784b7d608bf7a6030e11f6086d946579cf2a5c8f318dcaca854b4b155419ec306890a6f8dfcbf772d4cb6b873ab9fa16213964a51ebbb456e9598e19c2d0ae6e86604ae53892fab5fe76b19a870b833c9ad6297d716e7d9a2302f0d381df1438c455b1d0bbe0f61bcb9dbd18d0136080d2b58743dbbab1fd73991843ce7eda0eb873ec20ca69dc660fe0a688d1f6359aa3d96a53aa494a53ec122d1511389ec8056ff2996d29d7429cdd73de95da48ba57395afbfe2bd0b77a3ac78699a13f7d741620aadeb568ddab53707ac1596a15ca8dedfaa855d556b72d132a1e15ae0807565af95bdd320f6f5998e1ea7dd39127ec2e4e758d274d1250d17e42681eb90982a46f77894f9a28552e93b0e12b92fb0c875d544ae41c0c87d8945ae9b2e72cd7d914b354a5f6151eaae8952c38051fa1a8b520f5d945afba2344b4627d5a87d8345ada7266a8d0246ed5b2c6abd74516bef8b5a9193b7782e0c1bc5ef745af0165e76c816def75809db5b53c2e68c0c56c2fe80b1eb83994574108b4fca5c2f7e2c176557f03d607ec442efab0b9dcfbae2ad9a15ac5cfa0a8375ff7ec242eba70b8dfb3faa99fe58e770ddd09fb104edaf49d0dff28225e82f98f0011ae123f28309ff55233c571c4cc27730a98b53c295d462f1a44a7c1d7c7f848191d81d9b79fcf93f7a7f734e84ffd73b26d6a9e88679977fc3927290ae431130297fc7840fd608ff28a0f03f30e14334c29f1a154cf89f98f0a11ae1df0514fe17568a0f0b598aff8d091e1e52f03f188e5c0d8e234607c3f12f56648ed015993c54ee32ae0c5148b308d25218a96929f0094b415a0a118df0dc6c1ec785192cbfe0d1e7d801f2f1cbab3c4d1f2e971746620d65f0d0f21d798d79ea7168d78f63acf9b68cddee5ceb6fc7d8d61dbcffbd3691b1f726326c4be3025132a6a607561266e98c821bd1289d19f25c15bb7e74a2d3bf77a7b80431c77a58c8a331973abe8235aa416aab57eb63ba8cc1da6ab13a78b7900c127a032cf4b1bad0e3afe5f56a911a8d863a7db80d8fd3947bcd27072bf71a6191dd461759ee5689e72ed8a6d6c91424828db1086eab89e05b85c122d8048be0785d04f9c2a2e011688a45603b4d04b6068c40332c02dbeb22c07415451cd59b63d277d0496f548b2737854e500b0cd3049d537a6a304c2d31e11375461450782b8cd2a490a325ad31c193430a6e83e128d4e0b83f208eb698f0291ae185d382096f87099faa117e4c40e1ed31e1d334c25f0a28bc039698d37579a99a25b7d56cb8b9b1ee58f312cf6c5bb367ca76c4926886aebf1630893a6149b4a32e89a2fba9407c4122d359171eaf4567628313b3521a9ce8a20b87cf35989d4c3972182eb82b066c8e0e18af7e720301ea86f582e66a7a41daca2ddec9cf98f0228df0ef67043b56ba07466627acc7a8cb8b4158f5c4429ca70bb1a3d678678b3caaf60a8ffe122c8ff6c23499afd3844be01dc6a07558b6ae132b8ebfe5fba467aa13bbc0b9e3db2e06efbc2e88f0590f5e1822676bbb930b4577b2434ccce2858f75237bebd2472812e1433b5e95769c7d60a373ba3f9d1593340df0a4e98319c0ce3a03e04706a9becf72e7e112562d23551ed0f0fa62e1eea20bb7151aee1a597d0509bb9fce1cfb66da1c270b7f7c650ae6b86b843bdebd888623c6b81b628cf142c78cb1bf8e5b3fce6d4906b9417ff57c71dc4eb9f364ae18a776bbb15529305d1c097a02e2ee826cdf9898a7aa1f467d802ea7f019db7b44c21e828c49de33ace41c4cf292b09207612d81a56968660cc60aa5e2909db821188f6561790cc5249784953c0c935c1a56f2704c725958c9b998e4e561258fc024af082b792466742b431a5d1ea672795895f3759279db60af64548e73e07b01a6f2aab02a8fc2285784a43c1a5379755895c76092d784953c1693bc36ace47198e47561256f83d9dcde216d6e5b4ce5cab02a8fc76cae2aa4cd6d8709ae0e29787bac76ad4943edba03267c7d1a844fc0527143d8549ca893ccdfdf980cec38c3e09374cde9fece6d841fdb437f8eee7c56c8663a2af2935ab97faf18fcb5c0f9827b0cd780b359d5fbf11bd29b229ab37107f058658b67e1c26e232447bb7fd890ee66d1384f478858b37c32e6a8db27a4a3ae10b3e47dc35af2144cf27e61254fc5b2f6fe69c8dad330d20784243d1d13bc25a4e019188e03d38063472c150f0a9b8a33b192eee09025dd2c9d60befcfb906404ff840b9e8d55848786ac08e760820f0b29782e967a87874dbd222cf58e08997a3b61a97764c8d49b87413e2a24e4f998e0a3430a5e80a5de3161536f21967ac7864cbd4558ea1d1732f576c6201f1f12f22e98e013420ade154bbd13c3a6de6ebaa6dc40e736c2cfe5cafcfe16ba41ddf4ee7371523269311227b6184b8b93c3a6c5ee3ac9fc54a6539251f9245cf01e985d9e1ad22ef7c4049f1652f0122cef9f1e32ef2fc552ef8cb0a9578cb13833248b6598e0b3420a2ec1049f1d52702906f99cb090cb3095cf0da9f2724cf0792105afc0bc3fe787f4feacc434de1a52e3724ce30b426abc17a6f18521355e85697c51488d2b30c1178714bc1a43714948146b308d2f0da9f15aac6778591a7a86eb301c9787c4b13786e38a90382ab122eecab0455c1506faaa3480aec6d4be3aacda3598dad7a441edf598dad786557b0326f9bab092376240ae4f03904d98da3784557b3326f9c6b092f7c132f94d2133f9be98e09b430ade0f137c4b48c1fb63826f0d29f8004cf06d21056fc104df1e52f08198bddd11d6de0ec232e09d69c8800763c2ef4a83f04330e177a741f8a118f07bc2023f0cf304dd1bd21374b84e707fe7f6be48ec90cd083e64a3196df187c70b3a24bc2374e171f7fafdc944248e7bfd488cfd0361d91f85497e30ace4a331180f8584710c66e50fa7c1ca8fc5b47e24a4d6c7615a3f9a06ad8fc7843f9606e1276026f27858133911cbf84f84ccf8276119ff7f3419ff64cc6a9e0c6935a760ec9f0acbfe544cf2d361259f86c17826248cd3312b7f360d567e06a6f57321b53e13d3faf934687d1626fc8534083f1b339117c39ac83958c67f2964c63f17cbf82fd364fcf330ab7925a4d59c8fb17f352cfbad98e4d7c24abe0083f17a4818176256fe461aacfc224ceb37436a7d31a6f55b69d0fa124cf8db69107e296622ef843591cbb08cff6ec88c7f3996f1dfa3c9f8576056f37e48abb91263ff4158f65761923f0c2bf96a0cc64721615c8359f9c769b0f26b31ad3f09a9f57518e84fc382be5e279947f1b36454ee870bbe01cb979f87cc97376229f8451a52f0262c05bf0c99823763a5c95734a5c92d58785fd384772b66a1df84b5d0db307fdfb721fd7db7eb04f35592df2523b8372ef80ecc42bf4f8385de8925ec0f34097b1716991fd31099bb31abf929acd5dc83153f3f872c7eeec54a885f429610f7612c7e0dcbe27e2c097f4b43123e8065cfdf4366cf0731adff4883d60f61d5de9f21abbd8731bbfb2ba4dd3d82e5fbbf69f2fda35878ffd084f71866feff8635ffc7b1b46659e1d2fa092cad23c9088e93d6ffc34c3f2b2bbce93f891560f592d13a4e01f6146631f5b3482ce6692cbc0634e13d835968c3ac9016fa2cd61269944c92c469893c87216a4c83e8790c5193b0885ec0b244d33464891731b59b8555fb254cede66950fb65acea6d918cd9c4a97a5fc14acc96214bcc57b112b355c812f335ac506b1db2507b1dcb416d6872d01b9829b60d6b8a6f6292db8595fc1626b97d58c96feb24f3dda33a64a99713649f38db9fbd831963c790c6f82e96e93ba521d3bf87597ae79096fe3e968a5dc2a6e20718e8ae21417f88a9dc2dacca1f6194bb87a4fc31c6a24748169f6046d7330d46f72986a357481c9f6129981d36053fc740f70e09fa0b4ce53e6155fe12a3dc3724e5af3016fd42b2f81a63d13f2c8b6f30160342b2f816633130248befb00c9893860cf83d866350481c3f602938386c0afe88811e1212f44f98ca43c3aafc3346795848cabf602c868764f12bc622372c8bdf30162342b2f81d633132248b3f3016796159fc89b1c80fc9e22faccc28484399f137067a5448d0ff60ee8ad121dd15ff6238c6a40107f7f669858f4d83f0884e38b7bd71616d2f4b27b9bf73bb0d4d07b49e2e3cee2bd836a453a1be4e30b79af121ada60146683b1a420db1f0b6a709af1166b83ba4c1701b63c227a44178132c574c0c9b2b9a62693089260d9ae9c2e335c0e4903540730c516158442d3044536810b5c4104d0d89a8954e308ff8b490f5586baca89b1eb2a86b83a19f4183be2d66443b8635a2763ac97c238899c9208ab311447b8cfdac90ec3b6082678714dc5127986f04312719c1713682e884a5dedcb0a9d7196351149245178cc54e215974c504cf0b29b81b06797e58c8dd31c80b4242ee8155cd0bd35035f7c4782c0acba317c663e7903cb2b1b268979065516f9d60be347fd76404c7599adf0783bc5b58c87d31c88b4342ee87b1d83d248bfe1ac1b939ce6d6415ab8bed9d944cf788751e9a3a9e307d1b3ceda16316f131137b6dee99c5f7dacc658c585f74837c5db2f3d459924cb273ed11c1037582f9edd2acd8c337d43f310134c0ed2a072b258bd3504a0ec2842f4b83f0c158e95012b6741882b5984b43b69887ea04f7716ecb9211bc106fc10ec3042f0f29783806794558c8b9587f6765c8fece084ce5f2b02a8fc432e35e69ca8c79ba007a38b7ab9261f20d2e381f835d11127601067b7558d8a37415de20e73692c95387e1492aa99d3abc26e94a6c6d96fe0ce06474c02aa6d15809bc2e0d25f0182cf1f70e9bf86331b52bd3a0f6384c78551a846f83b52cabb334874a158adbe85edf93987b16e31cc60ff6dd201278954cfae1e2f8297e10f05ce79735c2a4f9137dfb45b7fd267f1b9a1637fcb5cc3d01724da066eeb6582c6b74b13cac36960b9d9614cf746e065d2dfe760fb8e6b1e1274dba197446ed9b53c4f995fc8d79221665f244cb4ac963bef8b5d4915823e2c5e57ae94525f0f783e981495ac0f8c155ea8866c81466563fef458e9ca087948dc748afc7ec0986183d3cdca5b5d629149738b65129d2dc8ded02710cd79a186da3dfe2cfd3654fdb61b1dca08be5f6be5842e66e3ca78a145b2de2e8d7d29b42f0977879057e152466db6331dba88bd90e49a5df44714e6b39538779854fb9e82f41e2b60316b74dbab88df6c56db6489d953266fc6e639dc564021693cdba981c93e1f22cfa4da173ad70a46e62fc94cda9ce576e295f15c0ca213b3c16bc2ea911cd0c58eaf10656facab68918f57d74d42726953766091a5546946a93b0f8edab8bdf2c42abe24ff716c1f058b9cde172117439db2cf2a1be244925552763b1de4f17ebede2c61ad7749e880bf7ca54cb38aada983f2d918462f345eaa95988c56b7f5dbc760ddcb29b2f7ef1b6ed7412dc6745b5e540a5531ff0ae4e9896602ae93c05e371808ec7cc8cd4d9d4b5f9542cce5bb0764a301b5036cccf522e1182603a07b58820319b86c5ec405dccb64162b650e4cf0ad93671bbdaaad7b248e6e2d298d4a0e9a34cc76274902e4653094b5f95aaee51c1cb446c6229a41ed319584c0fd6c5743cc3bce4ba92c21b8362f1cc8d1d67325da472a5e80d953835eea634c66a472c568724d327f0860b5b080b452a543aeff27cb8224eede79591be98cdc46276a82e669313969cc9f50af032345e9f35d592721616c7c374712cf09527f9b5e7a2a9eb2c71d6bcb247de0e2e73623dd911e08ee8f8cb465c429058ccc66271b82e164303c642e52a5ed2d4d47a28c2f766e6605a1f81b5ab53d15ac98ed7c24e9426d153ef82c46f2e16bf2375f1cb4b18bfa816de18f2d27cb928dff86f25d2cab09a2b480c8ab0181ca58bc1c23aeb6fc62f43c2b72177c2381cade3b01b21876922cd8bc4a0c00ad9af5e24ea89f2da3a3b088d542d631e46e418ccb661a893455cdd78a9fccaad1befddc66b7ba556faccc76270ac2e0665c4b61d2e4d9325958aed2fc0381da7e334096db5f1ba7099f3926a0dcc12b18d9fce7a49e98ee1422c86c7eb623823600c771629b92689fc97a9f82ec2e27b822ebef3082dbf8a05ef71a483c0ce188113d3d51371f3f444d00fa18fd52e58ac4ed2c56a5a403b9ee2a45aa5f0059860c3bb62713d196b3b064dc1a9e28d586bf4d7a6c9cb0d12bfddb0f89da28bdfb629c44fb51eab458db3c689df72e9d9c263b520e6dd20715a8cc5e9d46069e6b7cf89c283eab62512e532ca56e2ee58fc4e4ba63f93c84be66dff457fe563bcf1fbc3e9ea2bef81c5ef745dfcfab1f8e320bcbd47a1e59e989667c41fcd08920af3534a054adb5b82c5fa4c5dac87a1796b41ede42458462caf1dc14bb70f6029a6f7593abdc7b1443ea6196236041f6fa970cabc4a276e7c8255b5c6e3172f0552f7991563f1391b6b2dc7cf23dcff57245a90559a364432a3a7ae77207d315c86c5f09c64bc82fad1d019c2f6f8c85fb1f4cac7a6572647444bb0389e8bf9e493f17c2613cbd44a8cd4635a8ac5f43c5d4ca727959afeb16d371faa78d765ba9661b13d5f17db5d12a62bed5820f528e1728cc6d6d4e7354c312817afc0e277812e7e035922ffabd7bf3c59ea14db1f4aa5fe5e89e97aa14ed7290975f5fb8a5509c46b439e3625227d32ef132fc7e279912e9ea509e35928e2a2c692dcf1325877baede5a8c820f14afecd74d7b17b61942ed6519a9da2354c611b63ac21793614e358abb0785f828d37c42f9fd504fb623136926a5d8bfd02a5f3b8c69fe318844305c6e1526cce4aba4a83e4bc371425c36a2cce97e9e2bc63c0d27a86f05ae87d04b1330d93b3ffb065fe1a2cc697eb623c32608c795a296f1d4d6e5d8be97f05e6a30aa2bf3b4f20689914364dd66171ba329d25af2ee725c7862af7ed8dc5fb2a5dbc1785a8975349d74c5a402546e2ea74cc4a982724aead1d11483566a9b72daab0f85d838d12a49ad2751fd76a2caed72633f733c8aa1473fab835589caf4b66647e21d069a218f129ae4d4fb72d1dbfcf80c90a1283f5580caed7c5606c080b756334d3f93fd79aa696dc80c5e6065d6c06042c4fe68b3a3e3d636a1b314d6fd4693a2470dd179d91953efff1264ce79b743a1785b015dd7cb2f4f59652abb53763b1bf39b59c82a558f056482a39651f2c36b76073bbf5bd95d83d34ea6ac4735f2c46b762fdd9c4fdaf643ccac9f4e2828fd3a75e27ed8771b84dc76170000e2a4d795e5dcde2f7f18368bc3fa6f1ed58a91ddf13115d3151269ef21585e929010fc034bd43a7e918946daca57b35575e14557653e4972d585ceed4c5c5bf8a181b7749e493cef498cb81582cefc25aa5c1ca39b75513fb6bec2ab305ccdd87104fcf5829d1566190381f84c5f96e5d9cfbfb52d6df12a5cb4d07637ade934ceb19964f615bcfa9ce1c3a048bc1bdba18ec5edb26a89bb9cad00293cd79ea9b20540ec5a8dc97cc2a1d15629052251a332cc7a5a734390c8bd9fdc98c55076d59841fad4c3da68763317d20fc9cf3d1ac2041fc74f9967f1524064760317830f911571e66f01157377ed8f374a5d09158fc1ec2e65ec5afbfe74b2f692cffc9c2ef5219a7d4887e3b57cc00727b74f1772048ad6e3b0a8bf5c3a9ccf9715375bef3f232e6f654a2fdd1f07ea5d46ac5a3b1183e924cced3134ead564cdc9e6fe4fc1b89f0ed9da60829ee0caab5e21bde06cae5dd8bc888da7a6f786d7d36dc53f7459ff3f0573ba9c1f3c482da9a8b6f6f155fc2a359eea191e29f81110e566dfc1c59cefcdb674d16f22b6479a3ac75b820e4aeb4e79e89e1b53d6bb51158a258e8eaf0e1a01687b14b1ca73d908dbd22914632464a96439abb88fe73317d8ca76a6f99aa59b97c3125f08505b3a6c45a3cce43aba7b7a14e316461eed0e9ee0a9823fbca11be8feb12114c91e8dae1db58240c19d695ba90870901aaf593501c741debc47511e6e60e25553277bad95b8ecc460db246f0147982121bdffaae50b46ad739e0dc7589aacec100565981909f87a710fe8f12616be74675e2a6333ee59a0b28164d33be04682e5b6505b0eb1b47813d4909acbdc8aa4bd808165d356533b8d6cda2e09ea204d756038e0be40ba5f9c4ea1af1b4d40a684b5914dad3d4d6e6cd9e539dffbbdb9496d6aedc70adce067039cda3e09ea104d71c581b778aac904d185e2dd800eae2115150cf5282eac878c3bd2ae9fad30678a780daf3394a78cd8095cdf538e26cc0d4be7714d3f394989a004cd1d5ab3620dad22d8ae8057a4baa90d359163a524be5df36603a646814d38b94985a094c7c14848b986529ae53864771bd4489aba1c055655513a17e8b289c9729e174766ee6d676b9d5a8aabb92689e6873d530be5f046f6515494fac0d00af06c5fa2b94001b83629dabc9079a6d00f478c728a057a9ebbdb962242f3a53d18e0e4e35b0a1d72811351236546359015e3d388ae7f54c6531b57f8d0d804ee91c05f40625207e788eea20f365543cd635b59d153e19b8547465e6890c582ab2638513a00d10f93f0ae29b9410f98931101e7740f3dd39cb6acfb12ab5bc47d81eb8a4dfa244d94216f9cade36c906c542566549d9760228fadfce946f8b7b20e0dc15e585b0a9e1fa5ba328b877a85d36101cdcdc6aa270e2f001d7e8365e36c0db17b8a1dfcd946330ba7f91bbb3960da0ae068dd7f7a84786668becb7cab701399f9a5f2942b20118dfd846017b9fdeb2963b3f6d14d9ce36afc4fd03a3a03ec8eca08677da62a965057f05187bfc907e088db7b90a45d036b7c81e6f1085f611b5b54d1103ff3522f0e85109d1a333aa9cc66eb9139e0de03e02e03ea604d712d4947c4e3a57c0b661b4faa3a3b03ea186058f77b371549b4fc553b03ea59f43e14e77723df976f72ec7832cf919b5cb7a9e036d324bfe88261b001e21ba4e8d1af884fbe7c8a73e633118757c6e652bc6e46e3dee6a5fb7b1e2996bc9b774344ef3cfe15cc99c94bd663909cbb99ca4e7f9e4049e7a9093e284bf9ca4fa323921dd6039016671e6042a0273926ef8e5046aede4a4549ee40472dce4046aede724351f3127d024bc9cc0fe129dcef8b4ab9c9851d69cb84e861cedb8598ed6d59f834c9dc88933f324071976ca49e09bcc49694034276eb7374733be931367ae434e1203fc5ebafeb95d39099badd16509fae50423f8b2842ffe3f5f3130824fa4ff9243d84652705b375f51b76e78cab90b44788d137f0bf1914e1bc3a743f7181dbc47bdab568c4e9b269e764ecb6422984a5b675b3039ed6b9370e65989b314e0fcc6249cf956e23c0ae0fcd6249c0556e2bc0ee0fcce249ca3acc4f916c0f9bd4938475b89330286467e3009e7182b718e00387fa4c4d9538333f91db0c6d0a1dd1c2142fb08c8f83f518f7a2e916d4b2f62b73fc45f23c3d786ca32bb017c3f6722a3af40b33a547f091beb949c64389b53e16c0370fe6212ce5156e2bc934571fe6a12ce022b715e0270fe6612ce3156e2fc0de0fcdd249ca3adc4f93ac0f9874938475a897311c0f9a74938f3adc47918c0f9974938f3acc4590e70fe4d89b3138bdfc1f4ee209647d9073a8c0ae69fa0d5f98f4930092d930ce66f00e6bf26c11c6521cc9f014c56cf20980516c2fc1ec08c980493d0254706f31b0033cb24987916c2fc12c0ac6712cc9116c2fc14c0ac6f12cc1116c284dba5353009e6380b61b604c3180d4d8239d64298cd00cc4694303b2680e9757510b632c906316e0499bcb12928491bec6428ff02289b50a2ec205196c83971fefdc95dd5ddbdaf092b9e0654207b03904d2941f660d1598dc9cebde5ef578a77ed1b4be7079c2bb0cd28c10e90602b9c9778465fe63ce43b9a739c6bc584d725be7319d47592e64dc20e67572ad497011b6e4e89ba17b0e120f3fe6db6e301c08e5bd465a505c52da1ec3135a2423912d8694b4a94ad24cad1999f0142668777003b6c55b7e56955c2d94a6a9e3c699ba03715eadb819db6ce849d8ecdbc9d7e4305ef4160a76d32d1f9c45aa6def2927426085989f92580d9d6249884c36f6430bf0630db990493b0cd4906f35300b3bd4930097bf364303f07303b9804937090830ce6070066479360120ebf91c1fc10c0ec64124cc2762519cc1701ccce26c1b4b133f91280d9c5249884831c6430bf0530bb9a049370f88d0ce60f0066374a985d05ccb238db7ff00d0bf8ba21be7c3fba409e0c693f2aa4ed00d2ee94480733aff3a382a9dd378a18dfef6093c0ea757f4c12fb4b94c967f0bd898e56e5b44e907654c87b8371cf1e94c89b0ae42bc58616ee061b2b986677320b5c74cd8195f6ac4b57b177dcddc6f92093810bae1725ca813119be58089b2a1d7065da5122bccab2b15dba17809d9d09bb4daef6b711655f5004f4a644a95b41cc37cb714fae9e22c4f0df38954ab128bb4a6c5354e97c4e8af6242ab4bb032bed4389365ba2e5b343aa85379e0f672c777e9aec882d114d285da1b024137e7bb241e4bf80e5f6a52e04268ad6ea5ab929153f579a0f1ef3a164be7d95daaacbdd00cdbe76407d80b21f254ab553df48e7bfd532f062d17cca90359295a3c70084fd338170cc7f0ee1a300e1004a84ed58745688ba4e142af066bcddb3981e06100752420cbe751ae1782619ce29a00ecf310927e91a38329ceb01ce4126e1245d3b4c86f3548073b0493849272f90e1bc0fe01c62124ed24d56c8707e06700e350927e936166438db02ffe6b04cf7d493dfeb8b70049e6cafaf9380a50eaf4b7f9277c90ce12827d93a0f3e4d4fa1cc356729d7482bf75f7812d8e5089360dab8ffc2bd00e6489360dab8ffc24d00669e49306ddc7fe15a0033df249836eebf7035805960124c1bf75fb802c01c65124c1bf75fb808c01c6d124c1bc7db2f0030c79804d3c6fd17de0330c79a04d3c6fd175e0330c76562a5bb9a09b2579cce24611627eb4a36020e8f6d4cd97d81b41e27437921b0c96d4d41996f25cab1c02ac79b829274772f3294ef02abdc8e1265748bfd113ea4364f80798b45f16d6fce427f1b67c0ef0c2c71874ca0849baacc729a3dd3e41178eea1761998804086f210609513e8db927002f612b64aa0e3f3db4b9cbf5d51539d6b992322e644640bb2780b007322254cf778cb158c1ff6b8417ea68e609d2be6bea9c3100931920d9d750418275162ecce82ecb13d91558aca67136d03bd806ad82c024acdc9991891ac16c7c84677f348667f24d2063b59c6bf12586c61267ae4c9ee0a4f58bb93ed093f09c09c62124c42f70619cc1d00cca926c1241c462383390ec09c66124cc261343298b900e6749360124e3d2083b93d8039c32498361e4a321ec0dcd1249884c3686430070198334d8249d8842783d90bc09c65124cc2a9076430870398b34d8249d80322833918c09c9389d593d874d7c4bb2510d6ef64bb25ec0dfaee73eb720315ffe46cc25294ccbf340cd86a91493009eb773298a301cc9d32312ac47df1ebc59629352c63ab28c9f0f500f8e651e2eb02f0c56e42c18545f784b77959ea2b00e8fc4cacece540ff5b2b7b8f0608176402e1e8ff1cc20900e142b39b43845e4db2e6503f30ab6351dd2cae4a663083b0a5493694f10e6869ee9ca965fdd1b175383c4c3eaa4e06f12890fd773167c7231bf72e9e0850ee9aa90692b2c7e9a2f48c368ecac40e32ab32619b642dceed00d0dd32b1ce37f9e1351bbd484d4179b9d8249ca3acc4790bb0cedd4dc249babf3619ceb301ce3d4cc239c64a9cdf039c7b9a8473b495389f013897988493742d2519ceb900e7529370e65b89733dc0596c124ed293d6c9702e0338975137e4796fa8c8f93f17829f1b384fa856e33c276cc8cfa3023a16002da104aa8e11cbf7b94232e0a023dbedb512c02ba584d78d25bb91ae773525e1c4999fa8a076056eb93213a1123a40c8a0760150979b089570f22119d48e00ea0a13a112d6f06450970057c84a13a1124eac2183ba08402d37112ae1a40532a83b01a87b990895705a0d19d45900ea2a73773c24b457b21d0f0f07682b28d1a6f7b07bc24a8c6ce8ee1c807a3525ea7c163b74e7453bd9f9ff6ae75ffeb71b11de915d2e96cb7265e7303e02b54104b1ca294cd60b0baf660b44bf4c8d6111162563a912a10f8b26c21a73d6cadb78c4f31c60cf6bcd5df569e35489778195aeabcb79a45e2b25ddef93cc4ef70130f73609a68d4791ef0f60569a04d3c6a3c83701985526c1b4713acf6600b3da2498361e45be06c0ac3109a68d4791af0530d79b04d3c6730a1700981b4c8269e351e40b01cc8d26c1b4f128f20301cc4d26c1b47123b68300cccd662f73b0f18cec7cd077df87126f0b89d7ddd3ae42f4e25dd9e5943b8835a002c7805dee5b97fe23af57dfc6434d4e0336b81f25ca5e68164fce834458b3937990be0270f737192e61e94906f77300f70093e1da384cf22380bbc564b8366e27f82d807ba0c970093d5064707f07700f32192ea1af940cee2f00eec126c3b571bca91598b47688c97009c79fc8e0fe0d2cf7504ab8eedecd6e4fcb0d7ca59888beb7d8cf848b8d6ecb418691ec9000be9641613cccdc95f936b60a16020b3d3c532ba1678bb924ab7c734d0a9dcf2a458836af84ce06b67a84b9b64ae81824b3d58f81ad1e4989b6258be7b9aaa243d7940a5d16b0caa3ea72ef08fbb7cbec0a501e9d89bdc90ad87f696fb29d01be63325d3eea6749bb5322d7098b75273b925ae6375468f34053fed84cac2dc51cd4b15b10dab809e15850dd1c6712ce3c2b712e06388f370967be95380f05384f300967819538af04384f3409e7282b71be01709e6412ced156e2fc15e03cd9249c63acc4391834944ea1dfe4a08c6d647cb4be86a93d22e63a1f94323e93840c5e6f2a787c7f5505ef547357e4113a38c856e43d05b2f9699468fbb2d86d09a7c4b1d27922c397d61e079801071d9933b90bb0dfd34dda8167ac95272eb500367b864938475989f356609d679a84b3c04a9ce7009c679984738c95387f0638cf3609e7682b713e07709e63124ed2792264388b00ce734dc2996f25cefd00cef34cc2996725ce1280f3fcba9c3eeecde8847396c89af0f78336e7565350e65989b23170855c90a9f91f7cf3cc6a87c43a4799358e328be4369aea7c799be77f94826c7ea139bb8cd8b878763cc8e6176562559d3a05ccddd87599f073aa976c3f3c6825b0cb8be97d9e2ecc0c6fec4a066f32807789b9fbddd838b9fb6680f6d2badd852c8a1b7330cf128942bceb2399e7be3ea8eb2f336795f2682bb716ea052aa7cb4d8269e3d6427d00cc2b4c8269e3d6423d00cc2b4d8269e3d6423d01ccab4c8269e3d6429d00ccab4d826963efa82b80798d49306ddc5aa8398079ad49306ddc5aa80380799d49306ddc5aa82f80797d26faed6332df6f27eb5c3ec0a2f06e3067cb16c2ba9b6ccb96e9c00e6fcc841d8efb0ff98fde0476789339764838478ecc0ecf0376787326e6c8253ffd902f602d616af61cb7d64db49ef77e54905f01906fb1013261894a06f97100f9561b2013b645c9203f0420df660364c2de1319e4eb01e4dbe91bfcdc6bef3f407dbec3a484954885968bf317f94c65fb06909b81b6c21de66e2060e3ce7845c04eefaccb55f0de8ea98daebc11c04aef326319f702d13d5823b23f17b79a162dd929a2d96098ee6e93167b916e274c569e2e0099fe1e9370e659897333c079af4938f3adc4b915e0bccf249c0556e27c1ee0bcdf249ca3acc4f903c0f9804938475b89b327a8d91fccc4c048727343f3ac1c18a907603e64124c1bcf5c680d603e6c124c1ba7863d004acd474c8269e3d4b09701cc474d8269e3d4b02d00e66326c1b4716ad86d00e6e326c1b4d19fb43f80f98449306d9c1a760080f93f9360da38356c5f00f3499360da38356c3f00f329933a94a48b67c83a941300cea74dc249da3c22c35909703e63124ed20d04c8709e00703e6b124ed2bd6cc870de0a703e67124ed29d96c870be0f703e6f124ed2554764389b000fd20b26e124dd69890c6701c0f962ddcc024966974542b464bb2c5e0e32fe4b9468db4ab4a39cff56cbc08bc57e8bb66f2670398b227cb92e27d24455273ef3906c0396eec01a5fa9cbeea5776a783e655f9d6c72783e28355fcdf46ccf640f9798e808e5199f78b6e79e5944900700c8af99b2fb1269ff9d2cf35f0332ffeba6a024edbb93a1fc0ea07c8312650fe6dd4744edee3d97a9dd9271b484d99d0cec4600f64d4ab0d93eb015629a77b510139de81dcf276aa37b7939c0fb56ddee7f1364fab78d87f40e0115d7dba694b6a4936ac90a85ff01ab7dc71494a4536fc850e600ab7cb72efb52de0e808dcdff2ec02adfa344d95ba09ce1bc344f00e30743ae979f47abab256c95003ec9b92f71fe767f9fea5ccb1cb1a5167aa59ab028e0f7eb32dbdb5fef0f06b6fa0125caf60950aa98922ee95a48e5cc1b064acf0f33d13ac5fca493446bb54c3e2b12add74da23b30d1d1a09cb6c9d48eca4a2b80957e940937746a1b5fda789a716780f6e3ba6df807d9f892b090e84d85fa5980fa934c94b558132b5ad612565964656d36c0f82925c616ce4d911cc653fb30cf1085002f61ed6b36b506cda6cf32617f236a6db054b8a4dd2d066c3f3afa1180f173eaa1120eac50045cc6dcfdc0f9ab9b4579e8e29c277ee51b0d10ee53bf900ae63600e617e66c494458bd90753ba78172f1cb4ca01c11c73b6af7c0f2abc02abfca44737ea46873f2ddc578136739e303769b4443a94cdbd6cc085eb236e7df00efd79998fa50f09f9bfab01a20fc2613e34c3cb34f11adc91aa1c42ce79312511dcd651bc4a0326fc0f35ed33a66f3c129db02b0df9ab3398b8d6be6e60094df51a2547b3516f86a789b5b991b00bcef33319131f9f361091b4764c79e35048da31f4cc239ca4a9cd700ebfcd1249c0556e23c1de0fcc9249c63acc4f911c0f9b3493849375227c3f910c0f98b4938475a897326c0f9ab4938f3adc4590d70fe66124ed2a5b1643897029cbf53e26c2d71e633f7b4c30a8744c6fae564cdf61900df1f26ad3f223d62970ce78ea0d9fea749384977b1a1eb54029c7f998433df4a9c67039c7f9b84b3c04a9c8f019cff988473949538bf0038ff350927e9e19064383b81295eac3e21cec6424099d32872877cb964325c64f3891b828650841257b895c3846b35c9560e9f0b32761625da60cb5e6d5c55f415b0d27a9428076a507aa7164e667c85e66af1371f68ab1122a7886280476b81a09681b9c6b3a9608f02b0eb53c2565dcb91c232ff2ba777b506d9be4126b27d72eb86089d1c64d9fe2c80b2a1292849dd6f64284783665123535092badec850be04acb231254a352d86cfe998c6f83c0d3e9b638598185369f5ec8de34115d3a42eadd13b7bc3c68dcde7036b6c4a89d2bf30802bb05c58226ff8f0556d41566110368cc8e6c3dd035037a344dd81f119ed1c6ba9fc683ec3e615575958823606d9bf79263a9da9ad13b2f1d0b24b01da169468d50641c9cd8bcbb7726bfea700cc9626c1b4719ae1b300662b9360dab835ff5d00666b9360dab835ff9300661b9360dab835ff0d00665b9360dab835ff8d00663b9360dab887c27500667b9360dab835fff50066079360dad8877f1ec0ec68124c1b0f277b01c0ec4409339b85dde383b04f44b6c7c71ae004e94cdf775fe1fcbc966d909fcd15983739d71a4758a97083f085acfcf91ce7af0d6caa1c37b271e17f2760b95da8fd4b897df4a3c5422dc29abe0115c89160b0a32b25c87eccbfbbe71a29802b12648203611b806c82c3d3a028e89609375e6c499b8c238fb07f4fe6c67b18a0ed4e89b6b706ad3baac4e1ad613b8a090eeb58bc19f4844504d9fcf97aa0aced918911a8e49a5c36faa20a00ca9e9428832f81256cbf9259667b90f57b998493f45072329cf701ebcc360967819538af02387b9b84738c9538ff0438fb988473b49538df0338fb9a849374d349329c7b029cfd4cc249ea9922c37902c0d9df249ca45ba193e1ac00380750e2e4376a8349fbba92ad00a6812659dd58caf14d32ab6b0c9ae73926e11c6525ce9b80750e320967819538cf0238079b84738c95383f013887988473b49538ff07700e3509e7482b71ce02388799849374e61219ce1a8073b84938f3acc4590c70e666c2c39e1c4c1b072bde066dce119428bb33ef7826e750c3f82406ff517afecd0208b1928db7e701ac2329b176f0612dd78eb7abaa880c24d97a8e8301c83c5340dab8ce7d7b0032df1490369e937d260059600a48c25a9c0ce47100e4285340122e32200379070039da1490361edd7c310039c61490843339c940fe0b408ea50499deb3846d5c393c11a01e47895a6d193096fdd74ed2788245116e4389504d3654d65a25ec8ff780a2738bff5badce2a609ddbd6654f1d8a23ade5c9ac743640393e13569adaca76c2ea8aac0c7d1b1400db51a255c7948cf4d9aacd4739150278db53c2cbd664f1608b6208bb9b648b62ca41b6dfa12e4b50eff17884cd7bb2e3f18e06282764c20b0f8fc7abb333dcc82aa4d740c69f98890a29b5351a84999eac4cbd0158ea244ab4fd98b7455ac1e02e600b1d31eeeeb35384402eb68c4d931f7b0b04c2d6e9482accbb01cc933351b626b752c3c6a5b1f340615098895680b2589edd4b7d5b5afdf7c69306024b9d9289aa0b6b05c41e2a41e87a26c3390ee09c6a124ed2f178329c4b01ce6926e1249d2d4286f3488073ba493849272e92e1bc0ae09c61124ed269b56438df043877340927e9c445329c7f009c334dc2493aad960ce770b03fc3acbae99426b32703a197946c4f863b81a5cece84a526bfda8370d34ab299776d01ce3926e1243deb880ce7dd2c8a73ae4938494fe222c37919c0596412ce3156e2fc1de0dcc9249ca4277191e17c03e09c67124ed23336c970ee0270ce370927e976d464380f073817988493f4c852329c7b019c0b33e1a5c7607a33ba8df3f2ee026dce45a6a0ccb31225031dcd9d2951468f32ab83592364e345ad8025ee4289af0d8bb7d767a5a3121feb2403d89b0a6007502aee4a0950cd59720fe5a91013c35cd96ba8b74325b3be0880b71b25bce4b643b57779d60e201b2f3605a48d1365070190bb9b02d2c6e5593300c83d4c0169e3f2aca900e49ea680b47179560d00b9c41490362ecf5a0b402e350524618f9a0ce4210064b129206dec041e04402e330524e1f4413290c7039025a680243cef850ce4310064695d7a78a038d206105927711440594689b2130b323b789495e75d360030979b04d3c6f32e1b01982b4c8269e31903f500cc9526c1b471916a7d00b3dc2498365640ffb228ccbd4c8269e3799759c032579904d3c6f32e7f04965961124c1bcfbbfc09c05c6d124c1bcfbb6c02b2f91a9360dab8a8af1980b99612261f639c22b642e12ace9040cb9d8ff9d4e9b59403b4646b785b826cbdae2e7be2de75ba847537d9c2fd23801dee4d89b207f36f7da25f02bd80558a5512556cb910b69a76d4f1242ab055c0462b29c1f665fe75e6eeae08d17d8fb8403e9d257e396a63636925b0de2a4ac8fe2d765da07c313f2f530bb59e4e7b4f621d0826605567a27c4daea6b7b1053a141403359428758ba6922f6109d19295b0ed8095aecf64e62f779458e4fc58e110f1ef2a97b19d3bc85a04b900eb06ea96e912d180ffefccbdbc0d64f78d99e82325374634d2ca0ee73a50bb6f3209a68d1dce7d00cccd26c1b471c8ad0cc0dcc72498360eb9ad0630f73509a68d436ecb00ccfd4c8269e3905b0980b9bf49306d1c72db13c03cc02498360eb91503985b4c8269a317691700f3409360dae8f0d803c03c8812662f0dcce4778921adddc9f6896908fae6079b0c97b0b62783db14c03dc464b836ee70d402c03dd464b8843d2832b86d00dcc34c864bd83a2083fb1ca8d00e37192e616b810ceeeb00ee1126c325ec7191c1cd02c5c29126c325ec8191c16d00e01e450937f8b6d1848d2fb2cd250b414170b44938f3acc4590d701e6312ce7c2b719e02701e6b12ce022b71de0d701e67124ed2952164383f04388f3709e7682b71360735fb0926e11c6325ce3100e7899438c36d1b6da3c7ea6690f14fa2449b689e5e5475e2be12dd9e7300e5c99428d59e731cd57a30892c2307969165f2692c8aef944c582256667a2dd1c65d962e019678aa2928f3ad44390e543da7998232cf4a949f00ab3c9d12657be7a6c8b9a961fcc0512e6a8df3fa4a5629aa9e72b659d4dde5e2cebe72b2012827cfc8844b8e9f93e92e5358e2a85be5a8532278f0056113193fd78d4f0d2f7604f076662953db51565b08775700f74c53b23be9d45bb2ecfe20c8ee67998232cf4a943d4025747626fa3fa91d2e6ee359aed7820c7f0e75a514cf4a554c49577c2ca4ea460e05167a2e25c66c96fc72afc9ce3bab659f885bf35a467cc0680e15de5f81959e9709bc980324f129ee8473a2c84e715f05aaaaf3cd2d5f09ab2eb2f2f56360b95b29d1f61668a70bfb9cc7f8eab932d9462d15a2d4eae5552201b81d97387fbbe2a73ad732476ca9852dd6a600f00599a8c0b09277b2b0d84ada127637aa12b61f28022eac1b1773328500e1bc3db222e05580f6224ab46a6e34ecb0aade7fd41f607707b53bc8ee1767a225a0562cf3418e4da0cac2064466898a8d78e5726f2abcff005bbd8412afdacb04da6ae2cacb5ebbdd11d8eda59460db4ab0f9ce7fab65e0c50271860648c896455c0c105e56974375501c69954486723640793925ca3e0150ce77c2e442aad95ce72fe5a0aea22d4977a76a50f50725e9159488bbf82aaa75a2225a19d7666d5c62d619b858aea4041af4dcc2719438c9ce2dec08ecf32a93708eb512e73fa044bdda249ca45bb892e1bc1ae0bcc6249c0556e23c11e0bcd6249c63acc4f93ec0799d4938475b89f37e80f37a937092aeb623c33915e0bcc1249cf956e25c0770de6812ce3c2b712e01386fa2c4e9ee8dc77f5aeedc4e76449588093aae3f890bb56f22441b00efe64c78914688ffbb573ef7693e735d75f63ae2960384b7d4cd40473273e96d5ce63d0974296fa5443b80795d1ecb58ec4851f2634a8473edc9c6944e04a86fcb842f34b9797a369e6d7c3a4079bb2928499b4a74c7440317dd1da6a0246d2691a17c0158e59d7589d2eb38b67173cc7900e55d996a34b9031e5cd046d960cac0d0db4f54081f038da6bb2911b60708cb6a8f5c513fdb3e82f934c0784f26da9e894e0a99263fc8d896eb23a9d0f60468efcd2cda20531809d192b5352f0268efcb44f999f79f9bba300420bc9f12a15a1a3b92d5c1d258b2f9c9fd01be0728f1a91974c9cdfcc8b372eec77900e68326c1b4b16d793e80f99049306ddc78fd5400f3619360dab8f1fa6900e62326c1b471e3f59301cc474d8269e3c6eba700988f9904d3c659710703988f9b04d3c68dd70f05309f3009a68d474f6d0530ff67124c1b8f9eba00c07c921266360bbb009630e3937530b7012ee2a7ead2dbee75c411762fc9ce3e3c19a07c9a12653fe61d04765dc55c0057e4bf3ed67e0bc0fc4c26fc9db10542321e4fc29e1399bff30980f6d94c0c768cacadbc4a858fde5df862fb7e768f832aeb39732dd4c64d053e0016fa3c25dae06b370871924d496c0770be6012ce5156e2bc0764fc174dc2596025ce2b00ce974cc239c64a9c7f009c2f9b8473b49538df01385f310927e976416438f700385f350967be95388f03385f330927a94b8f0ce72a80f3754a9cad587426086cd8db3c07646f00ef0d4a786acf053e87ae90f14d7fd7b1225626bb97ee4e0b654260b11000b703ae6236afedc80188dfcc4476c7327bec8152843e26ba632740bfe82d9370920ed5d1edad0c70be6d124ed2c50664380f0438df310927e9160164382f0538df350927e9061664385f0438df330927e9160164387f0238df370927e906166438fb80855a1fd48d6f3e998139c23e12d9c0dca3c0523fa4449bcda2cdfc6ad1379ac5fc6bdd75031e191955221bfaf88e45f17e64528f7e2ce55827598fbe25b0d68f4dc2497a8c2419cedb81757e62124ed2434ec9705e08707e6a124ed26324c970fe02707e66124ed2434ec970be0c707e6e124ed2e3cbc970ce0738bf300927e979db6438b7009c5f9a849374390d19ce3280f32b4a9c83987f3b5feec12f7578f039a12a9ed115f1d84ce789ce5f9562722ee904c7b55944c047812eead794c03bb0e40fe6259c3a4eb693c817c072bf3105a48da7d07d06407e6b0a48c2d9f66420070290df9902d2c64d82ba0190df9b02d2c6a3793702903f9802d2c633e0f300c81f4d0149d8de2403790000f99329200937152003b92f00f9b3292009b7ba2003792600f98b29200957c891813c1680fc9512647ab749256c69928d161d0686377ea3443dc287ba0605896fc63699b9c7f5ae15773caa19eac3ef49d587ef0ffaf0bf53e2574bc0931db527ec7e928dd917005bfec32498844e113298a301cc3f4d8269e36c920100e65f26c124acb2e8e63003987f9b0493b03b4a06730880f98f4930099d246430870298ff9a0493b05b4a06731880c91a180493d05942067338801931092661f7940c662e809965124c42a70919cc1100663d4a98f879da539dff970b8ca562722d176cff79dabbb328d8fa9460bb0bb0b39c174ac47a39b8e5153f159e43e49b6295387fbb42a732be055185a32c1956b28db01a01ac0d28b1063b76c2c6dd6cb70359bf2125ca703bd2dbb843d3bdc04a1b51a2cdd65869b0ddf0087b4d6485c00a60b98d29f1b60395d67a5129f135c9cb446595a1850a64fbe0ad0036daa42e4b52ef968284d99d0ce5b1c01e9b52a2ec2250f2237b38ae1aa656c5cf753e2815d9ba88558a9680ab982bd8be11a8f6c0369b510255734361ab146b4a91b745c9cacb7e00677373b23ae1200759563f0364f516996834c5d6ecc9349b6c3cc6672640db3213568a8ddf7b9bf636ee603f1264f85699e8d5a7d2b4271c9623b3d17301d8d6a682b571c7d03300d836a682252c0ac8c04e0160db9a0ad6c6138ec700b0ed4c056be39ca87c00b6bda9606d6c60f506603b980a967010850cec49006c4753c1120ef591813d0280ed642a581b1dd48b01d8cea682251c542103bb1b00db8512ac3a487514ab838354c9f01d09f07535c70760e3f1563b0194dd32e1434d7ed2a38db39be702ef5477937092eed44c867313c0d9c3249ca4fb8893e13c1fe0ec69124ed2232dc8703e0370f6320927e9812b6438bf0638b34dc2497aa40519ce6e60d552efba9c00e91f28b17116545f00b38f49306d3c86ba3b80d9d72498360ee2f50230fb9904d3c663a8db0398fd4d8269e331d41d04cc460d7cc2a7c6089f2c6a5b5edf96b0e8091ec3d934c6d70fbb677c9438f7b3846fa89a2d75702c76fe0d96027b38ffea9e47c4312d53d846b64e3ce5f24a85ecd5ceaf5cb32a366298f3ca006e100da541e408dfc04431bb6aadc3be4c84be89cd67ee0925739dffab29eb3502498e3828b3c87956c3f8644b1ec21a479395ac52c4d87b82494ea4b1e054c6d64b021c608ed4753d735756cf905e897227cec542934ae79dfa221cb70d93136901eed4acc419c2a7c6b5e0091489b49169c2f5992de252ecc441ed64adbeca1deebc1619edfccff5ce0daff5cb0d97abbe57cb3bf53cb14c9e22f1a50de4d823fa7c5891365b4a1423d7fcf9f7cbc52cf932217546c298268e1f6e97cde3a44a6e2e4f8bff72fc7378bacb641766da29d2ccf96ba193f2aef03230a171eeac2cd6e0ff011e2d4274e4be0400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/7c3b0ed380fd9ec44967540519afa935.asset.meta b/Assets/SerializedUdonPrograms/7c3b0ed380fd9ec44967540519afa935.asset.meta new file mode 100644 index 0000000..042c9e0 --- /dev/null +++ b/Assets/SerializedUdonPrograms/7c3b0ed380fd9ec44967540519afa935.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 251c012400821f24688f3898f22a7b94 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/7c9a1e6d6a4af784c80478b1f1ba5f82.asset b/Assets/SerializedUdonPrograms/7c9a1e6d6a4af784c80478b1f1ba5f82.asset index 0d84506..dfe03c2 100644 --- a/Assets/SerializedUdonPrograms/7c9a1e6d6a4af784c80478b1f1ba5f82.asset +++ b/Assets/SerializedUdonPrograms/7c9a1e6d6a4af784c80478b1f1ba5f82.asset @@ -12,9 +12,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} m_Name: 7c9a1e6d6a4af784c80478b1f1ba5f82 m_EditorClassIdentifier: - serializedProgramCompressedBytes: 1f8b080000000000000aed5d59571bd911be0d0881d96c6c361b0cb6b1911790c0784f32c1607bc818e3187092711c2cb3183c621949de26db24274f799f73e665def203f29a7f901f957392aaeadbe8eaf6bdbd487d859a8c3852abef525df5557555dda545439ac1cbba061fcfd93336cb26d80a5b677b6c17becdc27107feec33a7fc29cbc3f10d7c66a1ee1a1bf1e989af31ab1f3ee7e1acc08ad0f31d5b83e336d52fb10df83e0f7d37e00c4b37e1bd01adac26e8b4c2e6d8227bc2faac1e1f12cfa9538197592897d5029ff7d927a8dd20a6f02269aaea838f25a82950dd0e30edb47bc15e92583b50b7067df22c07345f13c59669e0c92299e8709c1f93fcd80aef66785fe6e70dbcac857f17fb9c807702de5b01da36f363136f83dfbbf931219479d138c98f8d42fb530aba3d21e926ecfed6a0fdddca78f469e2c7d35ca62b024f4e391e0778fd557edece8f6778f935e11caffd3dbff63fa5f61dbcfdb840178fbdfc38c8eb278473a0d7f0bdc46fa3c4af0aa376de262df5ede3c714afcf08e778ad9cc47397c033d06ff89b54df29c9a4c2d9c1d3d1f959de675238c7e3102f9f12cef138cccbaf4bb28c48381c13dae3f11caf9fe6e7e7f9f90da1de29c7e305a97da3701da75ec4ffa646be5149be7ea11c8f1759b93d393a6b91ea6f49f42ff1f2dbc2391ec778f91d7ede2695df55e926619147fb1c7c4c96edb334290b3d4550d7ebf4f477ba48ba193ff03546972d827bdb07020acfb7427eb508da9e527abe01ab5de07b963eb3d0629b88de735fe25fae4b207339f8db10dc7601ca1f91d747c7bd0d3513ec311cb1d72b50e50bf82ba7f21c2e9b03d7bfc196e1739fe8bd02b6dd2dfd4442172ff7790634ed08b403250ea0fb709e230e97e8f33d71ba41dccf435991e2e12e44c4fb70fc485773cb9e87efaa6b2e73c8d43caa0391aedc0e778e9ae6401ae43e4db6fca3460e4323e4b6eef1dbb0294d5ef4ef2e4dfc88a1ed643098ce731a930499555636c5d2786a3d7321185e46b7846afbb6f1be0901ca4b163532a8ee33244149c35f66b21d3fbcfcee8b44b968d7599a52bc411fd1bc80457a29abd745c15b8444a229838ccaf05b2af829cd5daa21fc76bb6d6a175e01cd1499ca1560614af8041a3c85f736b15d600b348040265d7ac920912441eb0e9c7eece9c06d5081db526b70fdbd8917b82d077295c0c5971ac1560d827e3ce8106c5421d85a7bf3b4759ff3f1756a0431791e7621f8effb6a04dbb436e8cd830ec1261582c70ec7bf5666819894f649f8ad6b2db0c3d33d86b5bf840a3d1a052cd7103dacdb232a59681b1e411c4a5e952d500d5f17c1d7ef12ce9f051d84cd0a08336880c7157a25cfd22a31862ad5104faaf44323e82da3fa5981327b58f4806ab72997c66b6056bd4e94f08d40e9da3ada59a009ab77c485b71e712a695c424cadc66e52234e9f98e254a7ee1695ba514d2755511a5baf02dd4fec2114ed4145d1adffa45effad2afd771c9efe1748027b54854246abff5381f5dfe3abff6a39d5e9ff984affa8a65e65181c9971a9bb4dafee3695bad1bb592f8daa7b1944b727c427f8f755386e408ba204dcc441f90251dde2fdbc15db1758b1fda4589c5fab9e279d0adb55286360b072877253cdc035d669ea6209deefa0f71a4f82fc7b04bfb90602ebe034e920e3717345c5b14e431d2a0dd144fddb43d6d02c6503fb916be74c60ed0c9276260269a7726e759ae954b93fd4cc904a00d9f50dea5d5f978ef0d92a091f5711c6b83cccdc23bfffc2cb45bc554ffc848ef88882f86355f2e741bc5b451c4304ba4739dfb55c94bbf4944fea82d879651083b15c8820764a451cc326ae8228073a2112e21e1d26a30a4cdc943d30e9d56172518909fb2c0c267d3a4c2e2930612131e9d7713ea6e4fcdb509c0fe888a7d4b0b839f7207e5a47fc7204c4cfe84ce54ab5a632a8a37cb55aca433a40ae4500c8591df1f108880feb884f44407c44473c1d01f1733ae29908889fd7119f8c80f8051df1a908888fea885f8f80f8451df1e908885f521147678bcbf7d53adb3115711cc1e39abe6f9ee231d44fa908a394b8985f9553b9ac6319b703b8a62cf072ea5c519e52998011d92ad4e2a2c32a502d1f70639d9a8e3c340f83d2159d2c7754b2a0a98af9f62c65fdefe9da45ceff328d624a93cf5826f6294dacca3562af30325cd5c9705725c3434906f1aab6047b90e12367efd86b1ad96485a5702f9ebd6aa291f49a4ed27b2a496f682d4f3dde2cb73f5cde7f0aa4b2d0d7e65696a27c8e378c1ce33a397ea2d35878391cde17a9e512db8216458fbbc83dca93e57d4e4b83eba1249dd049fa5395a45f04b4cdc70c47de05b8d7b608fb4590fc01fb1a88389ea27a1bad5cbb699dcc3f53c97cb922ede29cc35e443acae8f8fd4cc5ef8ca4a3923f133554d2862d9797170ce61d2bd7c7a44ebe9fabe49b0d68837350fe9ebc443d78c6299d8c332a196f6a6dce8ea55b6c93cb3a4b5e04e7bf3270156f19a391e4ba4e92fbba881c4c9225b0c83cf780a66598d6c930ab92613ea0c52dd05c5a917c738ee61fb37512976fe8e49d53c93baed5d9f2c1acab1889314344b9b307f551f17d53c7f70315dfcb816d0d673edf933c7bec03d4e5418642c53a32adbd5b3a141eaa5078e08342290f77ee3bd46269b9d2cd7569b35070592b8973b775723e52c9793bb0b69f5174c6910ceadb8e6061bc4c29e68591e68e4e9acf55d28cfa446d7bd4226a42afa5305cded57139afe212a358699d4e5ea5b3392d70af50e4a5def614c66a92f067596d74fbef12954f65dbe1d2343b9f61c177a6e3b57760148579cb3288f9fa603b9237855f30fd3ef54d26af5855ba65d94f0adb46b0ff268d019d6db02ae9fc65d26fcf4e72891c5a80342d551c35497174d39ce05a6d48d3a2c9d50aadc99f0b5c1d6a6e54db50f82d9b368127940b02015c385ca5ee594aaa7ce92f028db75c6f2afae344c0d9c71bc1a31976eebb0e7f79660f16f1954c346410f70593e024091cdcb2bece23621ce0f98f00cf1393f0741201c7726679f02c92117f806f7100eb9500d6a249b0bac996f07e9ea34b97b2ab6df68d90ffc701b46901b4a72641431ffb8cc3150fdff40f8226999088cb73b5513d9e14f4f90177aceea2ece823b0b747b72faeb84bb19bd6ebeb8df35f8ab137e58a5fa9c0375acad77fa524fb4b29024229d554a788991344e2ff3b0bcc7453118070d9499ac8772c9bf41dbda4ab559ef4efd274b27e209791af5fcd934aad657ea62d887095f89ad3821b5e310925fa8afd83f1538e5f7e86ecf203599431f0064d81d72580f7bc1676b8c66fe4e291b3c3930294bf3209651f87f28df6a616d9370a66ab29304f0860feba1660eaecb27c99c628985da6c0ec16c0fc4d3d81391943307b0430bf3409663b859b3c2d96d81b323e1d541a832d690ab61601b6172661c38d4c9811961259bb6bfc2c2d2140f6db5ac4e66039e2ad18c6e68b02942f4d42d9c1a1c40b6f12900e6d9ca737065cc214704c00ee77b5b0415de8887f4a735c8072d5249428c16b38c1e1fa12d1dc30697bc66eda630260af4c02769c89033bf177229010c6df420c87769d027cd9fa091f5331b4c41101cad726a1c44c7d97acef0335fa8ae6d0f27cebc812ef6a30ffeb300561b300e1da610692f85b63bf00e5ba49283bb57ef13e5965fc7c628700ddc6e1fa44715787c174c6d8806e4c8072b37ec28bc129056337f45901ca3726a16c236a4723a03409a06dd54f4089a3fdf50a506e9b8472884399834639da096bafdde16ce01af3de1b1ac725810101d8b726813da7f09179bac5f1310bdc8067ff4ae8511b533708007f6512e02602d87e86cf184c3da6606a1560ca990e3059e5633ec6403b6d0ab47601b49d5a04986009ce740cfde07901ca5d93507631ddf4eb6e6c574e2c01bc3d93e0f5f8d8618d8285b18cf19200e47efddcd0d76378439f13a0fcda2494a3ac3c632c1ccc67cb4f8fe1b4c451cb1f870598f3a66ffd358ad57966ff7f96394acd115a7ce8dade16697cb0680cc84601c8422ded75979aee1c6cbc2c07f2a8d9eb900073b17e3ceccd1842392a40f9ce2494ad744b3816b9cceca7d08c01d66f0ab03601b0f72601eb64e59368f2cfbe1883aedb14744901ba0fa6c38cd7549a98611a9c48339661f609407eac1720e398aa9f1280fc64124867c7a22e901c85ed9f670430bfa92730e3b8fd735000f3f7f504a6c1956c6360a60430ff6012cc70f9e28d18e68b17d89179e22e83deff8f680e6ddc1c521e2b9729ed8edf54e0ed3429dfa42ee5b91d3ba5d97397d264d7298f89f294efb68b54a00d6ba900cf2bd98fed9de036826b7036a52c7fb02f2b3cc297a69f16c65f9809f37cbf374dffe7ebfe846660a9bd82fbd7e82bb5ed289e1954495acdf383ed1e5a49d38f311f65f9ff2ceabd214dbf0f3d1981edf973f42d0bf33f3543c6a10af7f7d59fa69f4a9eb01a4b47ff5d4e6f9bae9beeaf4f2b8f4ef6bf945bf940a5561e9ea3bf9ab4729bda16c12fd17e14403ab51e64994badf6c91e4a8fb4dbf73cfe3ee87a0024862839d4539b81b33724eb3651dd61ce2b9970fefa289eafb0d203f18b2ccfb3077c25fe07bcb18511817d0000 + serializedProgramCompressedBytes: 1f8b080000000000000aed5dd95b1cc711ef05964308a11b5d48e85e9963179090641d884b12922514408a6247412b0eb13697019db9e41c8ee338b79d3887733ba793388f79cf431ef21fe45fc8631ef37d49574d0f5b3b5b3dc7eef6b2430c1fdb3b3d3dd55dbfaaaeeaeaee69cae242fe445ae4c72d312cfa449bb82926c4bc9893dffa643a2b7fad2b3bff865894e97df99994f75a4493c793f07334b2437e0ecaab25b12c9f7c20c6659ac2fb2362527e1f94cf4eca2bc89d927f93b254a4423e7453f48b21715d3444b67990b8850f2da9bc08f015a9969fbde289bc3b898d824ae278ab417e8cc83b4b786f5636da2ef792b8836ccdca7be3f29945312369de438ad5972b057e1156b255a5db54daa0d2edf2af46fe45e5e53f545e99caab56dfe9f33bacb2b27eefb2952aad5065e0fb4e9546499e1b8d5d2a2d27e5773374f73074ed729524afd107ffd52aad52e95e45e39cbadea0d27d2affbcbaae57d7dd3ef86a52e97e951e50cf5ef0f16cad4a0f121ee0d91e75bdcee37e8dc7fdf51ef7ddda16b5e452f6ccfa5ef6b6cb33152a6d55f47b89aced7c485bd4fd3e8233a46d2abf9f5c43ddffb1ea2edfea28bf51951f2074213da4d2b8ba7f915c4b7a151f38da5bee682fa77b4e5db09f3dacd233eafe25722dcb94ffdbd1e6cd8e361f51e951221baabf32ad78d751a7dd0fce3aea3cabf87ba6ae632a3da6a14d75ff3991adfb906e21eda56db1ef6f72f0c3e9852d7fbbefb7ab672e936b48132a7f905c43daa1f2af3870e874c8ad8e9487f4b8ba7f555d9f50d72f90fb763ea45d8ef2e5a41efb3ed5976b1afe4e3af86b26f9909e1299faefb44ff6fd730efaa755fe75720de9f32a7fc821533bdf9669866ca211f47297a5df498a0511476181a6f875c7f693de8e184857c207fc1cc56a97a5cb5b9004186f78137dedb244bd83f5863b23eb49bbfbf033294ba490e88dec2afe9a5505346e46fe4e1257be24f32fe148009c794ade69938a92c2a7ee4a157d49fe6652b925ab9d91c38149312a3f1790de5dd9ecec925e2c81db773e332c695aa39259996303ba20af67b08523f8f9105b3a89ad1f9479cb38469a93a3a45e993ec6dab2795f94dfb93a4715647c1bf9c1892edf1a02d962ea97dc40ebe3a8cb1f496435248266eb86ea861571b4a26f6649e2230c2d2313454764d16847c82219791d220e9791e12c0483f398cd21afdf16de5dd271b9f1c22303e2de8d1ca425fc622259f7de9d77ae463359eb14711ceaeff160cd0d58a0178b6ccfa2e0ce42345a9180863ae18f70f0a3bb1c2922fc56b914960b2e804af44c990288d4a13b9f976e6b1e092fcb07af6150098dcc924ba2520d13628ce3f46a9e0edc320edcea6283eb6d4ddcc0ad5ee12b0d2efcf008d66810f46a830ec1720ec19ae2aba725fb190f5bc7230841e6be2c04ffdecb2358abd541f736e810ace0105cb73af635370d8441698303bf09ad06d6b99ac7a0fa17e5d0c35985d122a207f7e6914a52960d8e20842dcd4e0de4e1ab47f8766431e7dd041d84950c840950c08d8c5cd1b2d4381a0622d510afe28843e626ce27802d1b935ee089b828b3e6e58de5ecdaaaf4b55573da807340d346b5e1a6ccb382b001bc9bc2917b9be424a9fc590a9904b1e8cadaba700da74c1f602bdcb50626545a1d10f24ab305950626894cb554a75c359cfc41225bb9c63b45bd452fea753ac2dbf2245cab23bc3d4fc2eb75841bf2245cc71106e077b08eada9278b78ad9ef806ae4b618d778c76a951a95ed6b2479bfa3e26d3495962d9a19c6d2bf9d790eab47acebdf3ecf4dd797661e7d92f3ff36f93ae9bd4732823f433ab62b87a641d1338193122ff1ec8a7c7d5b0c6fb09ff066cb76f19ec4119245c0c58a15aac93d0464e4228b6975759427de8df170a2e9d46dfd2d98bd269f3259ddc5bab93cc26cefc8164f6f9b1ab7bf5a66fb38e70539e84b7e808efcf93f0568e300c8a0e88ec20f1bff2278b788d9ef8361df1830c71186b0421be9deb5ed8e72657a57b59b3b2d0110a3b668305ba72075671d4e0632edd27f7d680aa3a3fa27c2f3e8cbdd84c33747db781d32910fb1106a704e0d4f4f4fd96f34daf7ed0dcddf4d63f6f774b869e7547b334edb05ed376e8d4f828a3c6b703aaf14e8e38ce1888ec082f9245b95e4f791747195a020263672f020cf27673c461840d6ba36c681f2004dca3c3a499c1249bb20b268d3a51b6701629124c947b7580b7b28033c45d00dfc71187c0169c6856580c936ced22217f8304c34d9c49459ff69a5193ea7715f5126e669a1443e29e785958cb5f76bdf3684ba045f632dab04ca7b015906f8feddceb7237c5f1157c882946d73c20fcaf059be70246bd6568a1dbd14237b1adb3bff54a9ad3b2ae87387e7aa06cb5b37c54e3033ab086d2e25fe73bf673fa8d23a0a7abaadfd64426d09bc2d5798bde75014b1b8f50f75e911ef3a1426654965994754caa18321f8d86dd1a8d8c6542ebc4cafb38cafbbc0f799be44a27e1033a2b7982b392e0af86b15d932aeeb6da1bc4661ed4d5d8c5d50801fa98e47a1697e6ed5d90e95152909a0fe9dccd49dedd740771378775fefd14e3df595fe6e2df8fe8bcf069c60bffab3c98173eca11870122ecf0e10788c2fa78d69dfe16688018d3f17386e1e77245307e8ee9f839ebc24f9a955cf8794ea7d3e7389d86f5e6db8134b759a7b9e759cd7d1648735b74c4bbf96e116814d6aa237ea100c4db38e250be47e439ec8deb28f7e64b39a103a4af0080b4eb88f7178078878ef840018877ea885f2c00f1e33ae2970a40fc848ef8e50210efd2111f2c00f1933ae2570a40fc948ef8d502103fcd1107670b9b6ff375b6cf73c4c138c38e5ccfa943172b7e86230c5cc296dbbc8cca591de5a17c299fd381616d85757836b004fc9c9573f1b34d8eeac6d41b2ee985682b2f3deea69b8e9c77d25b419c4fdd12b0dd6922906cceebf8fc18c72798c2f44a95739dcae2cd1a238f21b5c79ebce5cf41b78e83618e03fd1c24bfca63cb6b59e62d14a4bd1774ed1de1dafbbab0e3273bbea1d10d17390dae944cc74c10bbc0dd14e62c122d9c9365fb64554bc8e1ac36ea82f2c1dae1277e33ab193d3aa44739a40773eac3e988cc5dcf79cafaa773e1b757c7ef4d8edf4e913993d18792b4f4c3eecba3d81bf41627bdb12a9bfbf4534178e8d3f1708be3e1a283075aabc581d56b4764f17b288f24d90aefd666ff5637574efb759c7e9ce3f4444e76cbee6530877043924aca67f9fe95b9c72b081f033a3e6eeb24169c0fbbed435872444ccb12964df2a265af0917a27f5dd471fa098ed3ab3e75f305b4964bb2af4d23f64392f301f1aa2402a40aa3a3b94bf7928ee717399e7b1c3ca7ed03e538cd9d253937abe2cfdae4cedf651d7f2f71fcf5f994693f7adad4cabcddea5a9a411d8f9fe478ecf2f083d3d2c75bbcf661af84b9ee84acc59dc7c2707245c7c91d9d87f3c7c988d4c84576ac5a781eaeea78f8946e54e247e3aee16af832daba195c6b4896889f7b41c7ef18c76fab5666a32b2b2cd4b3c10900c07772e57ea1da7d4dd7eebb5cbb477deb1aec5d7888fccccbd1318c8527645b73959169e95dd7a190e45038e51b8561f4f1107d000e832b31865f7ed2be200837433a6eee71dc1cf2f066d6e8581fb3d07b7c2babe46f2402131603487b513cc97869298e1ba312c2ff9a29d43f2bd9016f0891d63d61bf34e24e615ce8df269e12ce35cf5c5f2ccd6d257090e5ceff8a66f64bb4558a239b96441a7789ad354e613f4d6595926a591cb74435e7a84ddead8029c7ca725e8782bf586711b8aef600442ad1632ca1a90757ed499fee1ae0e8b72201fb6dcb02bc400f38f748602670c11c86f4f053152d4b00b52993e058ee145e2c9e5073156180e76e591a9efb26e1819d37dcf27de614156c3f0b036c6f44d2b04d9b844db7eb210c207d48ba5ecab46e81e34f60406485f03038cd9c1e7c1012d8fe4674eb6593b06d4002b631ef53a3c165f42b8fe4b73080354374ec1593606d461d0317dbafbaa33d159d124f49a01706d02e206855510771e74c6ea10e2ff1425a3f4684c5c101f118f71a2e22bd09e79811f77b975acb412b57c67cb1ac7153ccb736c53c3b694ceb2262017c6e2c800d8d31439d7410c5073f0908a266c5ff777c9380f8064e6fac3ca740b0ecd6bc49bbb55dc9d50a67e7703a5b1fe0279cf5e773524a4d8625abf5c35c2ed6ac95b880059350d66305f6ccc08caabe07f5f211372a2b1c787b4d81b79980f76a31f4705c7564f78567837a58650aca7d04ca45d37a08a7c2c1ea9ca585ced57163e06d3105de7a02ded2eaea61d8ede12e02e5b2693d4ce1bc251459549e3adcf6700b01ef8149f01a941eded77a66dafc3171dc1c9835a6c08c11301f961298ed2104730701f351298169d0461a03731b01f3712981d91942308f10309f9412981d2104b39180f9b41860ea064299fb798c76f37a5360ee24607eba94c034e8808c81b98780f9199360422cb0206077fb82b076c23e59b919beb0b08ac0f65993b075323a6862bbb8414370dc9410f613217ccea410603216e623d313b5d6a3e1ebee5102d9e74d42166c86f2640823f25304ca6726a1ac535042c55308a44d3b95bdb05e38e0a2a6801304b8d78aa1833aff1dfe88672b81f20b26a1040eeec90b58741a419acca68e1074da3a02d8174d020653f0e96585f42a5df827756b08845f3209e1c60c08e941f34008c6914b219c8bdc44e0fb72e978608351b5b1cedc49a07cdd2494b05c0f0516d1eecdad814ebc8e40f715d376704ed00884c61d23ea518321609d29082b09846f14a323fb5b6435d8918d45d30709945f3509e52e064aef17880d8e0c0f9b82b48140fae6ea6a67d8ddcc2102e5d74cbb197ec0d38b36337c839d8d04bab78aa185fac14ed837a23c4fa0fcfaea42493bb4c1396f631dba9d40f90d9350d622b5b531dca920a07db3741c4a18f56f2f81f25b26a1b422e8198c56a6b0d8ec1a885d6a097cdf36095fa3d2c419dc923786075f2c6187b68ec15d6b7bcc5a08b0df3109ec7ec6c52ca28584ade873e28ab0fefdea5a9bae2d23007fd774c7b7f7fd8f0b7a14d202ba232816be98663b81ef6dd37e3bc99e9a630cb43da640ab27a0bd530cbfed6fdc6870e7a331fb788240f93d9350e6364d6130b636d6a58f1148bf6f12d27aa15b449d0bed26940801ef5d93e06df3e8da45f2cbc6629bd304c81f98f6cbe9191e6b5627fc03f26a02df0f4bc7c518dc756bccc51c2750fea81850fa5b543018651bb38e0708943f2e3d6f6d105263defa2881f4bdd5d5ceb077f46602e54f4c427948644e622c215dd8bde33cd96e12f5726d4d697410987f6a126618228d639868fd9ba4653caa72494dbf3d11d62107c6a77f8d01594e80fc5931f5754ecd5bdac7286402b9d6f4354160fe79312cacbfa1545708a13c49a0fc85492861ba706945234785753abf31c07699026c0301ec97a66da59b77a7e1a4c16192b170f23001f257a5026418e3f2dd04c8f74d02d9e0610dd7c26b736d04cc5f971298617c6d2e4ec0fc4d2981697012d81898670898bf2d25300d0696c6c03c4bc0fc9d4930838d204f847004d945a0fc7d31a0f4371967502b8d4dc63d47a0fc834928ed3d1b70243ac4dfceb765f5ff72d9a8576f37056c935833a73e26e030940f4039362ae588b9eca08b69dfca8df97ee92016717b2b3de66bb926e6fb55af98e77b24315f3bb6623ece0a8b69ded88b69a2d598cb9e8798e7c6642752fcbb5a311f67edc57c9c3f651d4bb949693894b46a4b0aebe0ca2439a2320e8745e07f5e097232bb3b4dd06f776a7f04258ef0166ea6603db3106762729c7af3a7efe5eb5da41287998b35cdff9fa8dccbe210be46da0ba07bde2dfab3d09fc2ba5aef70959ea46f382c7d3e9a0ede27935e0aeb8def294d2d2f1cef1f666a7963ae5a1ebc457f31a9e516356bd4e8a07dc90777bc1c9c3ca74b2da03ea40f85b6fa3cfcffbd091f483462cca0a7d623afee23af29a43a2bec9faaa8fddb803effa6481ff83c24e07f26013df889fe0f5c3b2b47f5aa0000 serializedProgramBytesString: - serializedSignature: + serializedSignature: 0aeed4e6e4b174eb67c4022e258912feeef0a5ce6ad76d747a212d13e6940060f8dcdb3ea8a93194df44e6b3559279a8ad391c8a7ce717496d939a59315f700c programUnityEngineObjects: [] - networkCallingEntrypointMetadata: [] + networkCallingEntrypointMetadata: + - _maxEventsPerSecond: 5 + _name: ResetMeter + _parameters: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/7d9bb7b44fb4c1b4da9b7bba05f9f733.asset b/Assets/SerializedUdonPrograms/7d9bb7b44fb4c1b4da9b7bba05f9f733.asset new file mode 100644 index 0000000..9007a14 --- /dev/null +++ b/Assets/SerializedUdonPrograms/7d9bb7b44fb4c1b4da9b7bba05f9f733.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 7d9bb7b44fb4c1b4da9b7bba05f9f733 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c5547d6c0e705777728a140099a90046b2925382d560854680b21099092903482d4dddd85babbbb517777dbb65bddda76dbee6e77b7f2dd993b937bde7d73de7bf7dd775e66fa35fcc8cdb573cff9cf19b7ac5ce6fc444639bf96b1c56c3a1bc396b23256cdd63b7f4d778e55ce3ff74c5d5fc46a9de31ae77789736f14cb4ef026ff1916e9edfc9eeb9cd5b17ae7cd0656ea1c2bc4fd25acdcf97baef36eb973c6afae76fe973b4f459a3b2f2d6533d842b680f58af44820629978a94e5e8b70bb22ad9ddfd3d866e76eb9508a7f2457dceae5fc5ae2dca913f7aa1ca5d573cbd9dec2ac2ae75ea9f34e2dab7464ae12125bf79ec2c41fcc3df497c701f2d8cff9df46fedd4cfedd5afe0d9f6f218fdb24f9fc40f05e1bf0372774499cf7b3dd636492736ce91cdf03e7fcdd6fe473835c79596be3c81a2c8f43e471a894f97e12fab792c7ed12d81b4fc630202b1966ade571b83ce6487d3f48f1fb235d46912d401e67b93dd06738f8761b709f5f1b11c276158e3bf8c27107371cb3ce95e1f7a97c7e943c8e91c7d152b6f30c8f89e25aae3c6e9b40af3cf73d3691793eeb7cb3598d3c1f2b8ff9f2582075db51eafa17701e561715a68552e664f98d0f35d7d5f3fcfe47f27c9c3c8ef785d704f9dcc7f27c6292fa24e37f4aa729f21b7f05e70ec7e62be3c852e1be932fdc7792ef9eea726c7e8fcf1ee07f5ab92a3df824053ba6faec98eaead22227fab9843a28f9327e448aa4dc4fc139977b6640db9acbf7ee90e73bb0c4699bd245f9a8f29f29acd157f36f91d7babbf25bb677afb7cc8e23772769cb3469db67e09cdf2f02f21f97d724cf969552fe35f2ba7a67ba3cce60d1befb791c3d7acbe34cf9fde9f29d2fc0b9f3cd56c5f2b959f23827fafdc82e2c3a4eef22efcff6ece8abf2942ef2389779719cbffba5effecef2fadfe4795f7994b22333e4fdafc039d7f527f9dc3c799c4fa08b8ea5d2af87d467a67ce76b70ce8fb3e4f56fc0397f6f813c9f2def7f0bce1dbb5a2bbb16cae3a2e8efa9ef3786c577846111cffe9ef2bb737cf64b9f89ccf5d9afbeadec57dffa169c3bf6b751f6ef2a8f8ba3bfd7e4f6fb654d0c214ba53bc5aebe1dbacbf3a52e8bb635eef5b6e702bdf971098b9f06664b26f35874be314fca7d5acafd5e3ebfcc3d8fa8347c3b2087bfff779fdcf93eb9f35db9eda60226c9e8b99b3cee218f7bc9e3722f0c0b94ccdde5714ff9cd052c3a2d5a1027fc93e5162f8cf666d1f9c8b6f2bb0b13c854efef238f6d927c5e3db32284ce2be5b16d92df6c2b8f2521bed9cef5850e2a5d56beb03481cc552edff62f031db89cb7e579a93c96c963b9e4bfd8e7072abd88e7078974592d7551feb8c2d5a563a53c5f238f6ba37571ea89d13a7d973e9d228b58741942e60b915de5f5efc139d7f506f73b9db2a5cc7de5719d4fe74a3a9d9d3ab478af8be2d42ec9f7e2f9d77ad7be4e274afb54b9acdaa7db4a4feff6978077951ec9c487fd248b621fe3625787ce8a6dadefb97f80737e04e98ef89bbfab7c2b1b5ce7effe00cef9fd9a2475ad67b13ecbe52c03df5e26bf2dd3ffce2a3c1b586cdcd3bdcb8f20ec22329feaa2e2f806169b8fa9e7b86d3f82737ebf2e49db366af4e3dfdd12e7dd4d2c3afdd907f883aa1f6f96faecc6a2e396ca978679ef4454dcdfdf3defa6743940beb33be0b2bbab5fd723e53307cae3a14c9fcf1e0c38a8ef1ce27d7b90aa531d14e75b5be53387f9ec5eefc9e9247da49bfac6e12c3acef89fe5d78e90c763e4f178793cce7bb6f05079ed68793c56eab6078b4a9bd951e03a3fee29efff04cef973477ab2fbaaf6a6137cbaeac2f3449fed2b596c1a10cfcf4e729fedafead327bb6cbbf7f6c93d80c5f7db535c39e3551bc9a952ceca80724e73e54c982acfcf70cf7b287d4e974755473e4b725ccea2d27276b6bcbe17f09be5e01a7ff69f3ebe89748bc751b64735b61d9c278fe7cbe37220bb9fd4636f2fac1acb7ce7807bfc5cf9c7993efbe2e972813c7648604f7ff01c3f6e09617fbc7b2de5f16269db3e2cba3d651fd7577a6e8a23eb12a6f5d35e32deb14ba59fbc2ecf2f0336f16fa83225f4a5cbe5bd95c06ee957911270ed22796d95772d22f31a76852f7cbef4ddbf12c8d0ddbf0ae8a0bb7f35f3ea548eeebd547be7353e5bcef4e95ac2a2d219766dacade219f8ed7f0508cbebe4bba5beb02c75c3a5f78c38b2aed787651fd51673832f2c6ff4856599262c6f92f7ca41b88d96d7566bc2770de0a0cad7372361a9eedf02e4eaeedf0a74d0ddbf2d3a2cfb2879b7236109f587617947acade219f8ed7f27119677c9e39df2a82bf7de2d8faafde0e724e4aa703d328edc6c9fdcff2421f73e79bc378edcfb117d53f99ef275d50ebc9645fb3a3f77fcb65f5e1c590f30adaff79f2acf1f64d1befe108bf6f50a16ebeb0fcb7bfb7ae12f58f06beb58acaf57023f91f535b6153c037d55dd7f04c8d5dd7f14e8a0bbff188bf2f5feaadcfa38d3fb3ad41ffafa13b1b646d6f9beadf2f17861f9a48fb3e25bc5a2eb39556ef80cf0977f4e66f1f3c6a75cf91394cf3f2de5ad97f2ff0bcef9b1daf7dd6af95dd9feb58d2a47b597d78f95d755fbf4334c5bde1a708befb967597479ea791fff177cbeb29fe76f8db63c07ee41db6a597499e445791dd47122b5e09aaecc9588eb4bf2f8b28f5f8d94f73f70ce9f7b15e8bf555e7b451e2ff0eef550f9b60adff6408fd7f4be2274056116b88ca46c7e3d81cd41d2a47a169d26d5bb7e30f0f138b2de96cf7c19e79977e551b677b277a4fc06165d7f6990f7659f786483effe0679ff5e8f7ddf03811e4a367fe79724ec57f52ad5ff29fbb6231b59749bd846e6a52bfe3c22d5726caaf70e963a6d8af61f71ee84c32015cf942f1e94c03f3e92c78fe5f110296fb38fc1e6380c7293fc561cbb2207b0e83604d92ec0942fee2fefff2acf0ff23d2febf6ec13797ea0eff9437ccf4b3b99ea2f3d38fa79f61990c3cf3ff76c13baf06b5f806b325cd8971e9f21b2fe163934fadb4ce6638df53b55873b4c3ef71b780f3250f77f97e787fb6c3ac23dcf62e09c1f8ff4c955ed169ff8ee2bb947f9f4957d874cf63589712fd2c6ed73c03b8027fb3a5a665c9f967daf91a3a5fe1170eef8f49078e57ff5ae6c5f891c2b656481732ee3401926a7e2b222c7f9f81d03aef3e3f1f27e3370ce657f1a473fd5477c82cfb613dc77876627f1ae6c97899ce4b3ed24296377d7b6a1957164a97c55f545a930543ecbe59da209d7534078f273956f7d01ce1d1db66b2e9ffb9ee97dfbc4e8f7b39a47bf3facb37c5eb6fdb21f7cba9dcaa2dbc254994e9501343ec9541d54e97e9af74ca37e3ffaf43bcda7f7e952df16400f759d1fcf60d179d419f27d59678a9ce9bb0feb635297c6713cf1e288ec178d9c25f56909ce39bfbd5c59c3947c555751759364f32e59b664b22c24da00e47b3d553bea2feef9f0e23872fc7a9fedd3fb6c57ef9ceeaeac1cd5dfa5d2dfdf02eaadd22ec552a37724e29e8f3a308e1cbfdee7f8f43e47ea2dcbbec3951fab38a9e424a97744bddf228ede2dddf3d1f1d241958f9e2bf56d05cef9519d9fc7a2d3b0f35c7b46283d549e05eb827e3b141bd5df898c0788b46309fbf023ede5f17c169d97a9b6ce22effbfe313e2316b9d7476c95efc8b6c748c7cce8ceb2e5b317b0e8fefc0ba47e322d1ca9c6ff5ce8b3f1422047374e608b4fee1657eec83952ae6c078874924795865287196247a48bf42de54317f99e93ed89ac8f7cae0d38e7f7bbcaf3bef27e5b447764cc485261d61fc8e0c7eecccb07d518981e9a6b3dc135a92feb05aecd94c7dedeb548371635e621d25deaa7ca5d17fbf85cecb35ff5f7c68bef97f8645c92c0a72ef5f9d4a5ae4f8ddee2ea3a46c547353e2b199f52638b309fea9544b8a83a442ae1a1ae250a8fdebef0e8e30b8fcb7c2c65bbbfdfaf63ecc6fc3119bb953fca7191b9435c1d7327e2ef4454d85feed357f641c44b3373e3947f1b7de40a9f8f5c21dfdd2a755365b26b7ddfbf16f13d4d5888b0e2efc8b1ff912be53b5f8173e79b792be5f936d1ef0959b03ca8e3d4cff7adabe43b5f83737e54fd22df8073fe9e1a6b778dbcff2d3877741babf2cc81beeff4f3e918a79f2d02c743c234315e9cbf9e45e7f1d7cbe375f27a7b70ce8f37c8eb2a7fccf6dd57e3b49db0dde150796d903cdee8855944f69d446e62d16d0f37b93cf2e7453f27e228b4c93f8ef666165d97b859ca91e59cc860df7bfe3488fbb76cef880c01cf2a7d8726789f3fb31d4b7e7cb3ee5e9194738b8fc92dae2d05cdf5cf657504e72a7e066d3b517dd0b7fabe7dabfcb66cff2d50e31f553cdc33feb71ac75728f9b2af29ab1338e7f78ff378aa310c91e1f2382a5a46547d538d6fb8dd7bbfb1cea6e2e648efdee407e4b561e03d7e1c01ec4910cfb4d754bdfe0e1fbf3b5c7e85b2fdbb50b52d2a7ec726082be5df7782e7d4b7eef2ae45549fdcdde0da5de01a3fde23d97706e78e6ee30b7d72ef95cf7501dfe6c7fbe4f5aee09cbfa7c2e97e69fb073e790f029dee77bf39ee23793ec6f78d079857c775788d5375f399e07e1ba0a7baa664c03e9ae3c091eb2dcb5085df447f336118e8fcfa21169d5fc9feb1c8c3bef07f583296e13f5e85bf2aa39c1affdb8d72e5f391ad2cba2d72ab3ce60179dcd6eeb84ced771ef1d9f388efbb792c611b5c44cd3f7a3a384fd13fc265c8b94b91c7a41d3dc0393f3e0ac25fcd6f7a1c5c53fd7f4fc8f755b94af9e893e0d927c1b3fcf8148beeb378ca0dbb49dff864abf79e96dfe805cef951d5b59f91f7559d4dc5d167810ecf806bfcf89c7ca70f3877749828eb7f931e47bef5bc7caf2f3887df7c41deef07ceb96d9b7ccfbf289feb0fce15632867804f8e5faf97808daaafec9504be2eb936f6213d29c3e343d7f68985d1362592a7bda6c252ce3f8bbcece3a6c6127e9d826c7f7b4f3aeb9814731dd258f788a831f8af307dbc53fd9fea6ff52c3fbec6a2e3dd6bae4f4d3ed4275bbdf7bafc862cc747c683ebfc9b450cadb34cde3dfad9c8a0043ef9aacf275f8df6c91d6e88f6c944f2b4df18298f6fb0e876fd375c9d779465f0c63c30c1fcd5467913e451d6ff226f4af903c1393fbe151d66e21c86dddb2c2a5f8fc87eda1ddff7c979c727e71d1fbb77e5fd6cdf7bef02bbf8fd412edb1dbff7d91368de6e8b88680f9dc3ca5909ab61b9a251955b94ecf47af566e289f55c744bd1d3c3f80c7bfed97ab6d979b55c37bb7da9983b5fcf0a58be76767b1fd18ea9be3e5dfc2e719ea81042b7cd8af9c4bd319fe0ca553affcac1d4fc3ae7fa6c31b39f4fceaf70ee8c61f39c237f6b251beb14ae97fba42c733e5bc91a9cb362e7778d90b7d2513bf6c94426f169fcfe77163b32dd5506aa9c2b0a688d735e29345c227e6f109a960bede73ad7eac59a07ebd91a36cd396e125f8bb5bdd6f95bf7cd62894cafa37eb101ecbabba4810aa6198e355cfb5ce18b7f864853840847df725b190f9be78adaf2f13121f127433791e19d4473a58cb1025924ea5a3ecb15fd488b630806b731d642bd7fbbbcc73b19463c5bf4647870f7131678213cebc96fceff7dc459d7b48836ad80e58a2eb8fe094c8b0796cbcb1125a72026b468d13c8f2beac71fd1e1174d724b3288df7dae423c173c005a8acc2f3a00c454ea6227555b0432cf65ce6f57b9a5c28c4aa1a4dfac62a17cbd54c73b5fe43c5fe228e02e31b358a4a8e5ce531b9cdff39d3bae62b52265ae70de5ceb9c4f777e970839e52cc617f2b8e2ad4470c666d6899060019aa50b50d1e65fdc24f1095b4a277e90b66eb4c20bd25c5102eb1dc7f1b16f89a25933593e5351f3eb3b4ec8fb79eabaea07ee5cb8bef8b4af3e6da10f9fb6227c52f92a1642cd7421d436d3512e711e132f7cda35dae5850fffd1336c8ff878221d3082cd7504db65dac7f9bd6a2185c7f0e00c7947c6487fb2a507d81171c2c42a60085b6810e671849d345ab1166d7c5a718510c92d7581d3be6932f4d49c9bb752f7f22168813a7797b8f97150d76ea5a327babc5692d253f5cc254e856217e71ecfceca45a1955f87595f91f88257378d7e233e59de7e3fda4f564bb59ba03a04d49ac36a86116fad219ec7fdb5bbc60d441ae78f0c5df0c8d0068b663dc246b3b698e49e6125b7c324f70a2bb93d26b97758c91d74d146f44eee959168e335cfa8bfa639eff2b2df0651e76e70ded735e7c48f2e7d928e2e7d4574c966ba46a6601a61d1a4a32eecf8c57e3a25fd41d7170fba4e98e0fe210577c6bc6d40586feb82a9bc4d4895bb6282078614dc0d4be4b2d390c875c7400f0a0bba872e5a0b87c96cedd4ad867139c14b13bc0f6160d245e5c10cab0ec6d7018bb63d7561c3090ec1d4f207cf603c787a61c287a641786f9d705e3ce2835d62aafb5ae9ad70e97d30d587a541f5be98f09c3408ef8745e5e16988cafd75c2795163048badf0fdeefcc4086f8f0b1f80693e52a3f91155598134df064b8446854d840662924787959cad4bde44b6751869f2966c47d46cb1be73395be82430fb32b707417db75af41e708d544f046f115b2db4e0d74b654215ff5bf193ce318d7c402b90c87c67b2e4bbd3e8ade04355b244f29d27926faef752e7badb713653844085f8d218ad36fc0bd8f38ac57cb174758308ed16485bd558f175b3d86019d3202ca5c9d7a4346feb92b13829cdb658942d081b6507eb24f3285ba8f1d53ceeab7cbc475b51348bf9ce58fc3b43744983281eeedfa44983dbaac1e5ad167dc3aebc058cafbebe51b8ea3ac7813748c729769ea9158ddff5a113033ed662802edb6758596a82880e5392880e9456611160a8ce937889850f9a8829dff0d2d062b6c891bc4244c3fdc4654ec90ddd0af16805dbdf39aa6ede20e5a1ed74daf05a355f263a61cda31b2e78182678fb908273b038be43d8383e5c2799a7367c49e8b025ac1198da3b86557b2496a24ed1a4a8bf4482a5a8a330e13b69843f90154cf8682c2a4c4dc647e278f5184c70912e8ef118395db4a4673bffab9d37783dab44c4fe6c91197aa941b613d72b9cbf78863d0a3c5fed3ce10eab08a2672ee614d3c23a451e166ed335e1f653c0701b8b099fa1113ea75930e1f958d8cdd4851d5785e71bbc58b256e66dd1a961b618e0922dc634358816e132117275225cb3d9010eab839c63bdf374b6c8072ac5bd6cb11949ad486b83846901a6ff2c9dfe6d81fe8b808641be58a8fb22273c5b936e4502a65be374c279c1670e430a3e7cc068f082cf780cdbce3a6c03843f6c1225d706f1fc12e100e58d65e5b234659013347ae58a66b5f5ac290b64bcb6c04780d589bfbd220affb6377a204cc18b4f4cf417bcd48fbee0c5a750e58801f599d01e2b604dc412d5f99a44351224519d84c58505585c5898525cd85ee773a2b5b5a6497d0e8f518b856c1ef3c217f8f9c4f866fedabf68112e4cc2b3d2a5e348b1e8409dd86cca2557c71353deb1b70aec2ae5c21751421f2776157122939a63f162072cd75eacc9b5ef68112cd79eac7359d1085ddba42e3b4348c884db2ed1b9ad68291f9f44e0a753cf8162a0709d4854cb64a2ea26dd03c50c905a0687b0c1fb23c52a14bcbc344bf0ae12e4b97d25a2de8b3979b170f24cdb8939fa8e98a32fd538fa4f011d7d8a4e784fe6eea3e10fffbc5e023a6170f8352fc635df09c3b29b064b71cb6058a66299eeee9a4c37504da648279973e10b898769489886e5e67b62b9f9f29472f3e9baeff0cc850f518829d9663326c6e8d73b866f1051a3c437b694472135f8a5cc798a7b951b71dcb6db609587193aed789fd5de4cd767955d14a4cf6a2666fa3e3ad3b9cb07517d16e6d02b340eddbf5530879e8da9be3219b78ba3f51c4c70898e09efaf8c1e725c266aa66e7290ed5ce769a85b7cdebeb1361b449fb9983eab74fa7415785738efadf0158ef8d51ae1acbc6b2188063b631a94ea34e82235c873fe1733b72d5495202a45c4095a7fde058b0265da2810acdb761ee6a4e51a27bd26a093cec7c8add691e33dc8bcd25cc3dc0e1fd797d682a4259b6d14a3e6bc762db7952408cd0518cd351a9ad55d8fd83e08cd8518cdb53a9aad83d15c84d1acd0d15ca48d99d134ddd858151563a39f28051305b29dffaa2aecb63396f95a24ebc5f3fcb9f8a1788063cd410163e1ae18da7d7568db0443bb1843bb4e87766e8a6897397f956a8686661ee6129dbdbc38c457b90c551c2ac682a94a134cbbb70d164c4b31b5d787557b19a676b546edb703aabd1b26bc46e7baed8209df1d73ddfd74aecbfb6f558b72a9af4f619588e3aaa7a04c5cd9ecfcae74ae950a11d9220f53ce1bc4e1f6c010d46a10540644b0278680af651ea62cb45c27987b517d3282e38c7bdc4b279897ed1b1852b6e7cb73072fdbef8d61dfa8c1fe4b40ecfb60b17153d8d8b80293bc39ace49598e4fdc34a2ec1241f1056f22a2c100fd404e25e1d8205622926fc208df05b020a2fc322e6c1bab46928e31da05e89dd6d68f77ac04a9cacb45ea43cd9a2ea5929324dd893c67bc72a64f74a90785e8ee979884e4f7735025e0e5d22abbf6ec6bcd0292d04f9ea6a0cfda11af45f0644bf06137e9846f88c8ec184afc5781daee3d53b41b8968941ffded5b1016b8815983647e8b4e1a75eb805f9cebe18d22335487f0e88741d66c4513a23ba32958df34af502d1355c225752d820b2f1e0182b310d8ed669c053b6798d05834529160baa30a4c76890f25a5a10a4ebb114f9d8b0297235a6f671ba4433a0da3598dac787557b3f9d645eea388121a50ebe707bf052472df69d93b0ef9c9cd277ea3052a78425558f05f0a99a00ded23958003760c24fd3087f3ba0f00d98f0d335c2b3bb0413be11137e8646f8a680c23761c2cfd408df1a50f8664cf8591ae13f0514be3f26fc6c8df0e65d83093f0073f273c23af98198dae76ad4ae09a8f64198dae78555fb608de45c312b279393affce3e4834dbee20bf0273783922f77af9b7895e8fb58e7e321ba70e139f4169d4a01b2f243316fba50e34d53037ad36198f08b34c2ef0928fc704cf8c51ae19f06147e0426fc128df0ca6ec1841f8905e6a52103f3284c305fb53da62c384a7867b58863bc385f2eda2bd78bbfd68b85daca45a37d89f07d7fe37d36e3ab4e654befad953e5de978fb18e76a10ad8fc6b4be5ca7351fa3c7fb2abd72b35b9574ab21ba1928d96c982c750f0ba4d731980f5ca1f181ce017de058cce82b43fac071ba7456cc4fac204d67b11947c5a2eb8eaf12b75a784a55e0f949f1d3e4ab924e93af1669321f1d4ea72b967e1faf0b6e5eb6be8621656bbe71405bae72a0b2f509baef709fbd4ee3b3a706f4d91331e1d76b84df1150f84998f01b34c23f0a28fc649d705eace1cbf2872ad69c82a97d93466dbeb35310b54fc5d4be39acdaa7616adfa251bb26a0daa76369dbadba049d57da926914c91691b24164503c8b59c4dc958adc51f525ced53231de7ead385f24a2266f595c25320077f1b615a2f1638de817ad75aeaaf1f99b99bb8445b6288eb94b59668ba4a04c76ebad1357eac453e5e03bfa0ca742669c308b0adaba79061644b76982e8d0804174261644b787cc7ecec204dfa10b7b3eeeb5d839a9890a9720df3b1b4b58efc41256be9b40f0468b7330bbeed6d9c5836979634ba9ebbf7b072c169d8b85ff3dba94a547b0f03f0f137eaf46f8ca80c2cfc7c2e43e2c4cee4f294c2ed07d87277a0f24e3c471faf9b660821f0c29f842cc8b1e0a19ed2ec2043f1c52f0c53ac13cecb7b2d859405c4090594097605ef888c60b8fed19cc0b2fc5843faa117e4d40e19761c21fd3087f3ea0f0cbb1f8f338167f9e4829fe5c8139cd93ba348dcf145163f42a456aadf2d80aa71a90fa38bd2b312d9ed269d1ad510b3e528fe7bcbc6fca1db89cba0e57613a3cadd3418d562c70fe978aca107f6793f33b750daec6347846a7416b10167cb6392f1905f9da35baaf71f77d56e3bee7f60ae6bed762eefb1ce6becfa7e4bed76149d30b9aa4a959c0a4e97a8cd08b1a42c5bd8311ba0113fe9246787d40e13762c25fd6856d40e1376161fb0a16b6afa614b63763d1e1b57849537e9a93a65b302d5e8f9f348d4d63d2742ba6c31bf192a6c234264db7611abc992869da4d7c2fd8ccd8db31f77d4be3be657d82b9ef1d98fbbe8db9ef3b29b9ef9d1832be454898e2d85d189df73474be0f48e76e8ccefb189d0f52a2730f66c45f3446cce91bcc887b31f41f86447f1fa6f5471aad2f09a8f5fd18fa8f31f47f4d09fd0398119f688c98da2f98110f62c23fd5085f1950f84398f0cf34c28f0c28fc610cffe718fe2f52c2bf15734ebe55159aad15a4395b7b04d3e26f3a2dbc6c2d3f8dd9daa3980e5fe97450d9dab834666b8f611a7cadd3a00df3b2b599a2c3ab3a604bd5e3baef7107fe46e3c08bfa0773e0273007fe1673e0ef5272e0273123feae31e2e980463c8509ff5e233c674030e14f63c1fd0f162e5f7806d3fa078dd6e706d4fa594cf88f1ae15b030a7f0e43f2932e06f0615bf1dbe9635b72c3b5d9bbeda666b7d23f8f05d03f3501f472c0007a0113fe2f8df09f020a7f114b32fe8d25193fa79464bc8419f11f1da16d8219f13226fcbf1ae1770414fe8a4e386f06fe5f3249469c66e057358273c532bf4dd3471fbb46677afbe87fd1f1d2f6d1f3ed80e3f7d187d715eba37f0df3a5df74b12da02fbdae13cebb72f946c4a1ba72dfc024f3a9efa124bf89e50f9148b82cf32d9dff8b95a8573789ff87593d37bee767e948693dbf59847bfe88389e1f6e8d5f7d48bc8d394ff3b0cef30ee63c2d423acfbb58346d19898da6f3b28345d3f730ad5b45344522be7c5491a80e958b6929ba094dd9a2b8941d70ecd9fb981ead757a38d702caff0093df2664e8fc050b9db69ad0793c60e87c8869dd0e0b1d1e47d6ca22a20a0f381d3eb591811f6146b6d718f9f4a060467e8c19d94167248f816a9c4145c83516fe8a7db9a3eecbbc4eee8eaac96ddc1529b771f9c4854e8428634147737c8269d049a7412fad06f398bb79e22cd926509ee2bcb14f315d3aeb74e997a42eb1dbe604d1e933ccf1ba681cefcb6d8339dee798c15d43a6095f6082bb8514fc2526b87b48c17fc338f7d0706e3d3818e7af30e13d35c29f0f28fc6b0c49af9048bed109e6a94fef6404c7a90c7dab13dc593c88d443fb4652a9877e8761efa7c17ec5d060d8ff8e19d11f3362404a467c8f19b18dc6884f031af10f4cf8408df0cec38209ff0173cc6c5d72cad7de885dabc54bc873d87091e1ad97bfa36721648b3337fbe125e51a714725b975629642b64898bd69e06ea3129fd05ce32b19a8eff0c624378b5ddd989c678bc4bc2ce0d0be1f311683742cf85ac9705562b794e965b0de94ec8d42c34a0607cdae65eed24b8924e43b4f079db9f113e630db6a1c66e576c11ce69f58941a8c45a9212945a97f61460cd51871644023fead13ce896ea70b693e8758df44ba5c36aef2992fbc76e12e66192f4c73e2de1d2e86a3bacdaa9e5f47c7806ae119aa0935fa5ebdf0ab7a4d2c5a2534ac060db0aeec6a593b0de25f3f6341334c133487064c90fe83054d8e2e68f834fbe56cb248682a85793bb2c14eb4f3fe4d695c4fd4db0e7cb25306f4de9822a0c74a99e8bc5dc8c64929c50c6e18ae93a09e70771aa910cf7245f9aaa7e5a2bac9dfdd20afb92decee1bd98dbd67b5426665e012fa7fb12019ae09927b0206c9ffb02019a10b9225d6044910c0bf608047eaea960101ff8a091fa5113e312798f0dfb0d01bad0bbd722343cf6d6da48d42bf63813046130835010381459040c8d505c23c83032108d288ce6a8e344f975104449a85091fab11fe7d40e1cdb0f0cad785578591e1359da93de3973ac503dac8d31c0b8c024d60e40c0f16182db0c028d405c6220b022308da9618da71bacc2120da563ae1fcf9f191d8c1da594c233cce60edd698e613748592809ab7c19c62a2ce29f82ab37ca737d5d4bc498e2f70ab9cf92c7a2dc63a5008573144159983045d5b4cc74958cbad5aeb385dab2db7c334d85ea7413716bbdab2aee0146c2c467bcc0d76d039f088606ed001133e5923bc3ea0f08e18bd1d75f4f81208d14942b457f1b1300dd29bdcd541ab643b74d0d4b61366f4148dd195238319dd19337a279dd17cb58a5951fd6a2ae27873f65de3bd4dd3ea4454aa697c361d4ba276d169cd17a29e1ad12deb7de84e31c2e32c44dd15135ea415cea60611de0d0bcc69ba72cca86081d95d279cb7d64cc75a6b66a4d45ad3033362a6c688ada38319d113f3c859f192d1fc3426a3bd300d66eb34d02f5aaff27f1e4b8296017a6378e7e80ad26382e1ed83f9c85ccc47764ec947faeabec3f7f6d825126e6f8f7e58f49ca78f9eb1c2e344cffe18faf9bab4363718fa0198e60b349a5ff3e42e538268be0de6b40b754ecb9bf663f70bf037d1f3b2d366e636b027de4940b70cd128a65b84dd6db4544dacfcef3ca7d09ccfaa445ed920aeac91b2d562f04122d0408cc5221d8b82b4b250fa8e8ab221f832f3d99827eeaaf1c42d638379e2202c722e0e1939b7d508ceedef9c46f84accf47b852d6133d82e8d7dff63e4f5d86d0396cb0163eefde8b712ec05a623a41d4c561ce1cdd8db8927d3a71d36886c30e62f4b35fe32233f98bf0cc122d432acfa351f1476bdc8e10d4457fd7995a29ae5f674ac8ea998058930433100bb69001c1910c07698f0dd35c2cf0c287c1846770f1d5d7ec34d64725358a9380733644f8d21af1704336438267cb946785e6130e123304a7b259366c541321213bc7748c1a3301cfb6870740f8863b44e385fca7345325a5f800b1e83e158a9f346e79ae38741a8e462f24b74f2f9f67bb1535ae68b54432d87eedd09d654918769b24aa70997c0b39fa05e3016fb4aa9ee2b6d19d32e9315e48bf9ba4c98b757447625cd84a325173b67bc48157c85d7b2081f021b0d46d43fb4d96cb9c8667bc45816effb58265aa00b2b7eba3ac2872845abb4f3fcc35a6de9ff42564cd0b4c083a6107386353a67e025325eb5746764553a7fd54ba32a02bafa38ecbb6b75dfed847e77bd1c7213e4dbe3b164b042930c664f0e960c4ed0f9fa3699f6f5e96224466d0abebe6f848f7189663006f1f47588a7c7fb3aba93b68edb40ce6d4506b9b9cfb9a9f81251f6ab70ae2c14e35bdcd132752930ad8c04ddddbc4a901d1c6379aafa61d427e9a282d8842b1272a6c7f698e4eab09277c024d784953c592799c7f5fd22b1dd5122f0027447ed88a578b5214b7553301e756179ec8449ae0f2b792a26b921ace4224cf286b092a7616d141b43b6514cc754de1456e51998e4cd6125cfc49a0ef7d7341d6aa34a9ca6c35998f003d2207c36c6e4c0b04ce6606a1f9406b5e762c20f4e83f09d3126878465b20b96ea1d1a32d59b87a97c585895e763920f0f2b790106e388903016622a1f1956e54558a27754c8446f574ce5a3c3aabc18a37c4c48ca4b30958f0dab723126f9b8b0929762928f0f2b791926f984b09277c37ceec4903eb73ba6f2496155de03f3b99343fadc9e98e053420a5e8e093e35a4e0bd7482f944c8d39211cc473e2282f7c64ae7a7a7a174be0fe61a6784758d153ac9fcf93393e111678adc4a0cf45921419760ae717648d75885093e27a4e0522cf4ce0d1b7a6558e89d1732f4cab1d03b3f64e8adc6205f1012f21a4cf0969082d762a17761d8d0abc042efa290a1b72f167a17870cbd7518e44b4242aec4045f1a527015167a97850dbdf5ba26c16ce734c2776fcdfc8230baf5c2d2bb30cce5c984451e4eac1a0b8b2bc286458d4e32df40eaca6454be1a17bc1fe6975785f4cb5a4cf0d52105d76171ff9a9071bf1e0bbd6bc3865e03c6e2ba902c366082af0f29782326f88690823761906f0c0b7933a6f24d2155de1f137c7348c1076015ad5b4256b40ec434be35a4c607611adf1652e383318d6f0fa9f12198c67784d4f8504cf09d21051f86a1b82b248ac3318def0ea9f11158cdf09e34d40c8fc470dc1b12c751188efb42e2381a4be2ee0f9bc41d83817e200da08fc5d47e30acdac7616a3f9406b58fc7d47e38acda276092b786957c2206e4913400390953fbd1b06a9f8c497e2cace453b048fe78c8487e2a26f88990824fc3043f1952f0e998e0a7420a3e0313fc7448c16762829f0929f82cccdf9e0deb6f6763929f0b2bf91c4cf2f361259f8b251a2fa421d1380f53fbc5b06a9f8f65b32f85cc662fc0547e39acca5b30c9af84957c2106e3d590302ec204bf1652f0c598e0d7430abe0413fc4648c19762a1f766d8d0bb0c53f9ad902a5f8e097e3ba4e02b3016ef8465712526f9ddb092afd249e6232dde8b841f69713526fcfd3408bf0663f2415826d7620ef297900e729d4e309f9ff56132828bf1c6b4ebb1dceaa334e45637605a7f1c52eb1b31ce7f0dc9f926cc353e09eb1a3763923f0d2bf9164cf2676125df8a49fe3cace4db7492793bf917c904609c76f2dbb142ee97210bb977602cfe1696c59d98ca5f8554f92e9d60de02ff753282e3b4c0df8d09fe26a4e07b30c8df86857c2f06f9bb9090efc312d0bfa72101bd1fe3f17d581e0f603cfe1192c78358ccfe2164cc7e084bf37f0c99e63f8c41fe292ce4ad18e47f8684fc08c6e25f21593caa119c3bc8398dac63666caea3e658a7af37f9df3a66111f3331dde4e7089f6e92cb826cb0938abed83494c774c1ce43e73fc904fbcf78bafbb84e303ffd6f2476fe9cfa89f9400bdcaf9ec052c9ffa521957c1213fe4b1a843f85a50ebf864d1d9ed649e6cfff964c68c61975f38c4e309f47fa7b3282cb7137791613cc179d0b23f8390c72242b24e4e77592f974ebac64548e33ddfa054ce56661557e118b8ccdb3d213195fd27d40f853324c7ec505bf8cc16e1912f62b580c6f95153e86bf8a096f9d06e1af616ed226ac9bbc8e9501da26033b4e19e00d4ce57661557e5357bad89647f3a5ac6926afaadc39d844d5f63ac2da1243872c5e62e813635d323a60a580b7307fed98067f7d1b0bfc4e6103ff1d4cedce6950fb5d4c789734087f0f2bc677cdd24cc29f214e631700e20b9bd6b38d2280d7c9a01f23a6ebcf75ee2f6c5c77915fd1171675032bf9d3d0b5b8e35733b58a5d903ac5fb9895dd74561edd68a55aa5d78da055e2efb9ccdd64ba56ecb7e046d0b98d4fce6cdc432c7a97925ac96389b85be6487417e2e472a3e97912f8f3c1f4c02415333e177f8db81bcd1446563fef658e9ca08b3a7c8091ee8ef913fca26b5381f38e4babda49145738be512bc2dcb5b658eedbe6d7d67b17bf9e2e7ffa0b66650f9d95537c5642e6ae9db3448855091bfd5a468710bc132faec0b78258f62166594f9d653b25157e4562af920aa6d627081f72de9d20b67d84d9d64b67db789f6df345e8ac9596f1b34d4d66c9c79825bd75969c98e1f4cc7b87ef4aa3d64e2b039bddd505f072c80eb782e7250da29801533d5ec04a5fdaf6578c7a1f1df5a2a4e2c63ce6ae0c6b42aaf609665f5f9d7df308bd8a5fdd4f7c865be51687bde5bf4bd094249550fd14b3ba9fceea1de35a8d6bba58d8e2eecee4daa872e3d81582d3139a9f6176f5c7f2a860253ba5ffbcc6b5b3e1a2915ed9255a1eb6bc6410cb3ec72c1ba0b3ec644352bf254242b5783e48fab7445ee53ed0d429e01718f96d74e467252cf7b869e05c5103e0f1dd8d37bc6e10840f5e824d3df67c89593a50676939b18fd53b31a656acbce7e6a0cb44799ea733aba45fa4a3cc988a47fc0de394ade3b4b4c9e2627c42e1397c857118a4e3b04b4cccf0e278bcd201dfa76f66634c89b509a614f89d74c591af319bb74d2e35d0dbbcc4797c1573776f284573fad46c85f78258fa0d66e9609da5a3e2d61c8a1ceb74e97ffab5fe16d37a884eebd949864f72b5f14cfbe27798ad43938b7f143572eabafadf319bb7d3d9bc47e0129e9bf344b7de0529d38569eb4b250dfe1ee3314cc7637b8487da91cb6daf709bdf554be6325942298bd197a6ddf21f984539580a4b95bbaad2bebbdcaa5bea88a590baa53f60960ed7593a9961c31474be156d81ca55b8759cc91c11cab5a24455eaa466b165cfd4adfa11b36a4432ed84d1df8569f052110ab5ceb33cf6ae8953238e96913ecb7ec22c1ba9b36c7a923581442d85a9d502524d5fff89d9380acb3ff53ec9eb817c0b1165abbb86f64cb12d49b54c57f1b4442f33dd69e7bf305b47eb6c9d16d056132cfc3766e1189d8573035ab89b888feb110f6c0a7b7fc6eccdd5d9bb9830efa84b21ef480781ff6004f2d295a7b825a42290a3d05bf55fccaab1582b7450ab6689276243c89fc6262f37887dffc3eccbd7d9b743889200dc21d02dede35615c73c1bc4a65f309b0a8285993fed2912ad033ca6252a75d2b67efc8ad95788d917a41ee1da3a9bb9ed60de5ddeab1d3fb74f5749e037ccbe713afb86b0f83d3fc50e610a2d7fc7b41c1fbfff2648282c492914287d8f8fcfd45a3d4167f568346eb96de5e5be346275639f25cf0f1bb46d89a9f5e14630bd27eaf49e94b004cdeba70b440f53a56c27ac127b02246a4b4f578d200bb3671256828c1f4778ed66912855d569f2d564fa8b796964751a2d6c8659b87d32751e7dff6f327d1f99ec036e8ed9b883cec63949d918ac153b93d6b6c0ac9dacb376f7847190b6d590ba3db1254663c760a594d81297f2f52ab95f49a9780b2f6dd1b4a6b5c2ec9ba2b3af304da59474e71bad312b76d259b16b885cbec8a9d1704f2e11f1953f358779db8c4e73aecc97231a2a64b8aa56e264dbfb53c9efdb60f64f4d775933befdbcec3d5f3ce7ee0b99ae5e9bb6987d45583b4532bd36fe902a8dd36698d9beb57698bdd374f6ce27f6e7e4c2331d7edc1eb37b7a3a4aeb45a275915f7309f09454d7d6189daba6f685205677c0ac9ea1b37aef34a5c17521accb0c978e189799e9cb9b549da642a45cde5eb8e9cb613b6156ccc27ae0f4f97fec54d3a66ab9e98c59341b1bdf12b44ca42fff27532eca64d9a90bc6618e8ec388001c5498aa6d1cd3559aed8a693c57a7f17609cbf6de78c77271958fe8484f89ae1ba6e9ce3a4d27a06c633d3d5af31a91f379e3a128e24b77cc965d9299ff81f50bce346c74600fccca79d8689360e99c9b83c5de8d2d95a81d65f1f08c95925a0ed513b379becee6a1be90f59747e862532f4ccf053a3df37d7ac2f4c9aff36ca973b2ed12a9f680f4c62c58a8b360afc6b240fa7bee54492aded853e881c9c63cf54e102a7d302a8b92194ba1be182455f12cc3625c7a5293be9865bbea2cdbb389c33b4838a71a03fa6144162733b23468592b7c8b5bea61df1fb3744932a9d57411aa6e08d683de25d70bc6b3c204f6e95232fe56100b06601614273f2b8a7f3348cc84f661d7d31542db60f62d8d3f062fb57a7a32790cd5bc9a8198a5cbb01689f865376f776abf3d6a77703c25c176b68e97faa456aec9c6acde2d957eab2063d883f774a456221a8459b87b32698c9e706a25a2c475b956cebf48842fca305348717b01abc53bbcfc9bcbd73e8de435c6b2318d79db98a87cd0bbcebf5fe584068ffdc58db9185f9422be843db2dcb55dc4cfb008075b2fb3fec86a1f23f7cd4a21b91478eb1841c81d3dcddb5cc738e5dd0af1965abe239115bafc7c0cc8d1a175896dda1b598e231269252d52b21cd27c18c31fced23d79a866cb50cdcae5d594c8c814bd29b116cbf9d79ae97da8570c59183b74babb0216c876920897ebae249350b27fbb32bfe4d142802ad92614b71444719db83ec29ddcc1bcb5ccedfc7d7f1863ad5a64e571e27b5162e1abffac10f417898fe37372adc0d6dcc3b6372536be8ecf0c51f0af71c0b953e954568c01acb302219fe0ad10ee4389b0b373a2da35e6887219175022cae67cc4eb42b6ce0a60ed3b78c0565002eb2ea2ea0a96c7bc41c23683abece4815b4909aeab061c17b8de79898f996a1057cbac80b69279d04aa8bd2d3a7ace727ebb6bae95350eca74bdce06704776f6c0ada204d793f1627a5dd2d9820df0ce0499422925bc7620aa2e8c6a82b301d3a66c0f5319252631f0a1b17d66a923d5063c67e67878ca29f1b4015ee44d1cb301d1a77d3d44ab2911b515a994db03e6a54a49586500a421a072b48612524be1477556e5732bbb7870d652c2e1abf92e6cac37aade72774cef62517068607c8e1f2f2a2c92edc93600ec3cc803584109b03548a5b89a7c00810d8046f5f400ed4b09c8c94d35634be128c4e835a38a4479cb5d3bccedc1b7a34c9f37d603ba8e3a5f5c28ba40bd4549ec40f476b687a832539152cd52b601d0cfbd3c40559480f8eaf0aa5e38936d125637345666f864953251d5592c3cac4cf85ba5f3411b20f21f05713d2544be530284c7db5df96a1ae58d1b7f94595e63ec0e5a62ab29517690699af2b7cdb208b25434ead880ea2790b6d564aa4987b750c0512daa95c2a6a26e717b0fdc7ed44d3a101c5cc2c02d74f0ee576fb1061be0bd0d5a5f6b29e1b50739aa3723df5d07c406509d4171b78eba4364be887eeb7ccb8ccd701eaf155fb201186fcb57c0eaa93be1dcbecbf87395a6cb99b46bac899ccd733d840d996de58f1eea58665996f034c81236d0f72971df9b213e6d7359ede9161eb48dd4de3653f48437888f7b8b617bcb26d63991b5c29206eda96d3d709b28c17504d1d4d69e4b3e0a4dc1da4cdf4fee0e69a91662ecae4a4d06d1737fea16ddc50eb4e92cf93d056c00f8693b0eb0550b9f70ff40f8d407eb05a38e0f2becc4dc66811a71b55ee6bf51c30cf9cc3be3343f000e13cc49b9892827613a9793f4588e9cc0fdf039290eeaca49aae09e13b2cd2727c048bd9c4049604ed265999c4019784e4ae9494ea0568a9c4005d89ca4c69ce5041a689513b87140a7333eb42627a61332276e8d3a47dbad94a36dd7ce413aca73e20cc3c8413a11721234c4e5a4d45f9883f653e78001bd399af1103929d60e73223c1d0bdbebe48dcbd78fa7cfe3e3f20ffc7f3e643e6f8873e9200e816fabc87fdc32cec1d4651ceed9ee0c099eefc45f0772ac53d2f0e9d03f4687e81d4a555946a74d9ba8d24ec7640c4ca5c4b3048cd73ac4249cf956e2ac07380f350967819538cf01380f330967a195386f01380f3709e7382b71be01701e41dddebf426631d158ddc2117f8c0c5f372a7c8300be2333e18d6b507f84eaaf6093d8783a9ceda970f607388f3209e7442b7166019c479b84739c95381f601ece634cc2596825ce4b01ce634dc239c14a9cdf039cc7998473bc95385f02388f3709e7582b71ee0d709e6012ce022b711e03709e6812ce7c2b716e00384fa2c4d943e22c952d9afe85a45cd5dd458af2e840b6a00259004a9c27538f29566df6c9f69ff0e76bc5b3f6d5d357000f3d8512ec40063b5492ef50b4196e0e807b2af5d0da786d4a501ccfe9c950b6a242b90b48004ea344d949a21c9ff9d6a4aba9e01d07fcf0744a784325bc4ae721ee83550caef81d6c1f5fc26c8aacd9ee46e0a56764c24b2766de4bc9a2f8d3c04bcfa484d72b4161293ab5246d042183f9238079964930275808f3df00e6d926c12cb410e6a700e63926c11c6721cc1f00cc734d82996f21ccbf0298e7990493b003980ce62700e6f926c1242c5792c1fc10c0bcc024983656253f0630b7980473a28530ff03605e6812cc4916c2fc1f807951d3b617b9a2dcbd170853ccc1542867829af8c5942847b0e8268f4aa606f3c3468dff0f8d1f0f01e49750afbab6428c372f93e3f5d70878f63510b70711fed2a68cf0d15b74107adf0554285f06de771925ca613111de6de39cc5d4aeedd39cffdc3b37882e8c06166fcf0952d86419d5c100f6e599f0dbe4727d1b510e0549c0159428b7d12401c9eec6478a96acdba30678e9954deba5b617a766002fbd8a1a659198d9592de7b3f1dd5878f7f07a39c755cdf273e74eda97e7370728afcec482ed6345479cfbf1125154e2576dee29ba0820bc26130827fce110be09105e4bbf358a3bee431d8b840aee0672368fef781d40bccea43943a46339c9702e03f9f5f526e1241d7c4886f35880f3069370920e8d25c3b905e0bcd1249ca40314c870de0370ded4944d1fd163e009fb2dbb50a17c07a0bc3933732df3323feee8572a7caf825cfc16734669dad881b11a78e2ad9940098769cf73aa87b3e5c228ab9d973665a26c4986f24ce095b7d177acc176f4156c9d40374d2c65b24e8a9ae51cf98a2d31ebe4a50f665f2a981d00ccdb33d1c8562f966faa6becf751ebbca8a3ae89389f32f32143db0744f93b4c454b9aaf93a1bd0378ed9d99e85b4f7e110032986453b1e601987799049370d40719cc5900e6dd26c1241cc34906730700f31e9360128e2e26833916c0bcd7249884e3dec960ee0460de67124c1be702ef0860de6f124cc2319c64304702980f980493b073970ce62000f3419360128e7b27830917687fc824988435203298a300cc87a93749f437cd051bb14998bf938dd83c1cd4ddb736e5e06d7f9706612a4ad6a1910b7cf511936012e6ef64302702988f66a24b8337246f10c3b6f9eaea191add41866f20c0f718fde6512ebed881b05c98b7448acdc3653e07401fcfc488a3bc3fdc88a30b01c227328170fc1f0ee16c80f049b38b4384ad9a64c5a1a34071e8a94c8d89f37a2f61071c79bf2559a7c516e0a34f9b3335c0c6c9fdd301ca6732958b27dad8c5e6f19a4b01d0674d5add7092954d1ddd407af99c4938275a89f357e09dcf9b8493740702329c77019c2f988493743d0f329ce7029c2f9a8473829538ff0670be6412cef156e27c16e07cd9249ca43b5f91e15c0670be62124ed2ad9ac8701e0670be6a124ed28dc4c87056039caf51d78b92dbfed3ddb8906f404a582fda950ae8f600e8eb9958b6b409b66a22aba5ef09e0bd4109af1f4b76027ff46a1e8483659a4588a0de0daa966f9a0895b03d890cea5d00ea5b2642251c704806b50e407ddb44a884393c19d47d01d4774c844a3898860c6a3980faae895009072a90415d09a0be672254c2a1346450f70250dfa784da5140ad60706774b84739193ab2857a789545a1fb80125d018bed7e8b9e90359d793b9abb8644ef8fbe80f15ea48de213eb1c0fdec0cac553c5a232a0faa108fd770255200c0181f017736614dbb88fc17290147c9899b9ed4db0f30b19be9100df47e6cece241c3c4b36d0e14510c93f3667e563d2a57fc8fc742d80f9579360dab85d490580f98949306ddcaea40cc0fcd42498368e682a07303f3309a68ddb952c06303f3709a68ddb95ec0e607e61124c1bd7349e0f607e69124c1bb72b590460fecd2498366e57b20ec0fcca249836aef65509607e6df674041bf7d39806eaeedf50e2ed20f1ba0ba7558a5abc2bbb8272b52fb2cdc219f0cb6f33bda47e90f5beec6bf4a8003ef95da6a624cc170d70eb7c0dc6339cd76ac5176d9e92b02df0d5bfd377756091bc8e0e5d5b2a745900ddf74d39d3c8fe1540fa0394ffc8442b7b21fb234db75e0ff0fd60c61e2e6ee75b8df058b75b8dd433c916e77d0964383f9ab4ea36696592cc53e7039c3f998433df4a9c5500e73f4dc2596025ceb300ce7f99849374a35b329c37019cff3609e7382b71be0070fe4c8973308b9d8e3d936d627c48570353530e163aaf9731dec8b158807577c7aacc4c7d886c2f837ea028f51f93a6ca4cb27239d41ec067ff6b12ce8956e2fc1d78e7ff4cc239ce4a9cf7009cbf9884b3d04a9ce7019cbf9a8473829538bf02387f3309e7782b713e0f70fe6e124ed27149643877033859338370165889f37080336212ce7c2b71d6039c599438613fd11251e76970241731be5bf0323951bb4c4cd42eb7ba9fe80000b41925d060530a6c1ceab518d4899a53a2546340d4dab2eed201ab4443887ac8f625290f017ed9821266270033c3b3338aa9e04d01f05a52c20b373b833003221ba8703f40db2a13913cb9815ee3ad9c9d910b52ccd626c1b47176461e80d9c6249836cece180660b63509a68db333c60098ed4c8269e3ec8c8100667b9360da58641f0260763009a68db3337a01981d4d8269e3ec8c6d00cc4e26c1b47176c65800b3b349306d9c9d5108607669da162357146ff6201df54eb6a8ca1c80b26b261a392664be9183ace5f254e6c1eb96097893320f8fac19e31500af3b7d8ab856b3e9c3128749292b950aad168b9cf25146f679623b00b347269adb529b1744580c22f3d3329042f6cc4466935cce6d63c5311f7869af4c7ba97e3241b1483fd78be8cfc555d1a2bd9a0aed83c04b7b37ad97da5e245a00bcb44f26facb939f9741585827cb9a4a8167f6350967be95384f0238fb9984b3c04a9c57029cfd4dc2596825cea700ce019968e6486e2c47be956d46f70298db9804d3c636a30700cc8126c1b4b1d7fc4c0033db249836f69adf0e600e3209a68dbde6a70398db9a04d3c65ef33300ccc126c1b4b1f1e35400738849306dec353f0dc01c6a124c1b7bcd8f0430b73309a68dbde6a70098c34caa50920e7625ab5016039c3926e1242d1e91e1dc04700e370927e9d42a329ce7019c234cc2493acb970ce7ad00e748937092ce4127c3f936c0398a12675789739cf3bf4a7ebc44acef61fb1ca07b998770342542b5304ae21ecbe9ccbffc599123b456ac0b4bba10dacf1122c88f013f1d43097980845ce93cc40197cb95671632b5de4c7432e099420a966cc5991301d85c4ab0d93eb09562b04dbd10e30db78957d8b7b1deb43fc09bd7947dee19db16ef022a94a301cab1942807099473599d585a8a0ffdaa102394f8eb9eb7ae60eb0470befa76a9f3b77b7f96732c77c4122e1c4d5616680332b27c4ac0de6663e3323f58912caa8f00fe5960ce1c751b53cd1d01ca424a94437d99520df316cfffffb0c8feeb00f4384ad0dd13f8acb29474fc673955e9f45980717c260a51b1436b93f552c23e26322f3d04e09d60ee420184431ec8462eff1de4f91333910060e5532f01204c47c912807ce0a1932831f2cd4a16c99627b598ca5ce1993cdadb57e6ec0cfc6f7b73a66911664264639267011fdc21135139af313a97317703f16ad1126af76e066f008f9c4cddd3c981cd101f2e67eefa48fcd1fdc58a5d2ecec5e22e9f7544b86e17d9123f9301cc1d3311bdf3e2b42cd9ddccfc05403925132df5857fb896fa2301c29d32d188ccbd71a628ee340825e639af948a48be906d146df3b5ac4e94356b98cdcbf32d0160a79a33ffcdc6919e7300caa24ccc172ecc7c131c596d66398037cd9c196e369626770128a753a21c2d8b414562914837c79e291a2de630def2bec6491feb9d3af85ad1cfbe46e4e58b849a1b34cf1531beff6eb95086a7adf681ef078af1333231c021f92d2008fd986c29de0e00e74c93704eb412e77f41b230cb249ca49bea90e1bc11e09c6d124ed22d9fc8709e0670ce3109e7042b717e0470ce350927e9626964389f023877360927e9668e643877053877310927e9ee8364380f0438e7998493748e0719ce7d01cef999184c53c0fe487b0aaf04f8169834cc7b2c65ab1219cedd412d68a1493849a76393e13c1ee05c6412ce022b715e0a70ee6a12ce422b71de0f702ea6c4d95a08e00d716eef25974c868b6c047c4b90d52ca1c4358cc5361a478f2f72e76d5489bf79bf518310395300e666150b6a1918d9398f0af60400bb3833638cf3ff401d1cdf007c4b29f1f1b17c70f43b6f7587edec9e4fdad7c2de03405cd694638e325607274b3bdf0259cd6e991894c07bd46733debfc3fbd2d788fea05aabfbce4f06deb8bb39d3066c5c0c6d15f0c63d2851f214649148ffca989a17840de022ec83248bd6ad814fee69ea806bd27621b21cbc3bf0d1e5a6a225cd8cc8d0de04bc76af4cac5193dc28a4022b97ef7b0cc0dcdb2498360eea7a0ec0dcc72498362edff70880b9c22498362edff72880b9d22498362edf771b805962124c1b97efdb0a60ae3209a68d13aa6f01304b4d8269e3f27db702986526c1b4b1cefe1e80596e124c1b17307f1fc05c9d897513605b529079e8195a8e8aaf0c4902fa06508b5f63f6847fc2ca27d984ff4301deb5d40d79895be8c78b4932847eda820ae48b006405fd9a49d120dd1679dea2b49eed2cfa326be20ef422044c36ccab194871f73567e69b8df5faf100e53a9306204ea22c0b9079e65010f52b4dc239d14a9cad01ce2a93708eb312e7e320b2af370927e99e5a6438af0738ab4dc239c14a9cff02386b4cc249ba173b19ce7701cefd4cc249ba661719ced50067ad4938491b4dc8709e0470d699849374133d329c9b01ce7a73d66020ac11910d54ec0aca9c0d9428f9895a55cebe711f9d80c76d3029024fa2ecc5248bc09d80d76d3409e7442b71fe02bc73934938c75989f3768073b349380badc47906c0b9bf4938275889f33380f30093708eb712e73300e78126e11c6b25ce6280f3209370920ef722c37928c079b049384937bf25c35905701e4289b33f8bdef481736860bc17ddbfff907f3e30610f25d9fca285a0387f2825d6ed7c5857b1d88905c94f4120444d56117d1aa03e2c13b3e126b23fda12bdef8044e0f04c4c8f51de5a27fc8f2701b324bc72ed58107b777a3b0678e7119468dd9565f9c6795c5ea910133d7bd8bea6b8bec02f8f346796a68d530ef6047e7894b933e008c7cd9165404f002f3d9a12edb6cec94c5f04578bf2ba10ebb48bf37a4bfcbac313ed4b087a01c4c7346d42607bf7c655202138963e43e2913ae32b819015eba7023f3cceec11c884b38fc846201f007cf3f84cd4ede1c625ba0cc9ee62fd97c05b4fa0c43984f9771986ab84e877cb9e2d5fced816b9795498d703af3d91ba68157cd17e2f69b02f41e80bd09e64ce406f1b6729ed0c128393339175a9c4807b63996fe1963f5e83dff6c0534fa1c43bc687b72626efaf0b5856b07d5ad87500fda9992835609583d8556b097b04c83c795780f33493709276b090e1ac06384f37092769f71f19ceb301ce334cc2493a12850ce7cd00e79926e1241d274586f33580f32c933aa72751aee044d6399d0d709e6d12ce8956e26c0e709e6312ce7156e27c907938cf350927e902ea64382f0338cf3309e7042b71fe03e03cdf249ce3adc4f932c07981493849b74621c3b90ae0dc62124ed2a52ec9709e00705e68124ed29d66c8706e04382fa2c4e9ed97d004bda4644dcd5f037c1767a28b997f78b5f044257bbd7cc43e781100ef92a65f85496532f68dbcdb1bd4762e3505a48d43182703909799029270780319c8e300c8cb4d0149d8cc4606f20800f20a5340128e0a2503793d0079a529200947d591813c1780bcca149084456f32904f0090579b029270543219c8fb00c86b4c01493870860ce42b00e4b5a680245c749a0ce49300e475e6cce6b071cf830500e5f594287bb120e3e2c659b9e94e3b00f3069360dab8e94e4700f3469360dab8386f1b00f3269360da3803ae2d8079b349306dcc809a0198b79804d3c64d775a0098b79a04d3c64d777e631eccdb4c8269e3a63b0c78e6ed26c1b471d39dce00e61d26c1b4713a4b4f00f34e73660413663f643382e70294775177d77a5bd8cf95bec9e7adf1d96cfc3532786493ff3b82ece66e4a7803987f5d05fdbcca62562b8650f315abb9b02ada5ec7aba9c01e0fc0de43097630f34f5e75e7037b2bd270817c3446fc74d4c6c2d28120eadf9bc9d5bf5ca07c8a2a4f0866685b3aeddd00ea7180f53e73a6adda58021d039281fb33b16e0dcce7934f6109d192a5b0b7012f7da069bdd4f622541780f2c14ca6a3158e12cb9c9b950e11ffd269195b59e1022aaccf03ac0f656220e1b83fd028cc6341caf97026aa9bc975b78db5b2eebe1978e2569360da58773f0cc07cc4249836f65e6e00301f3509a68dbd971b01ccc74c826963ef652d80f9b849306decbd6c00309f3009a68dbd979500e69326c1b4b1f7723f00f3299360dad820b706c07cda249836b61dad03309f31697113d22c886c7193a500e7b326e1ccb712e7d100e77326e12cb012e70500e7f326e12cb412e71d00e70b999802cd47b56f002d9919597a970cdf3eccc3f762530e4f80930648cb9764d306de059ef81225caee8cefc75a227725e2a2d63b8faf751eaf16fd40fb8b610a15e2cc3e8f6c013cf2654a8c0399b7b6b6dbc1bbc251b7ce51a754f0e0e33f8a185f0b9677aa953802785a59c6d4447ec28d4ac8e0d600b8af64a29732b5dd3508a33fd9009bbb01da57a9a37fbc9454594ada95561e21c2f80c48455fa3c498adc1186ce702c2b64eb285ca0f02785f37370120ec7a234b00be0509c01b94680709b473847f2e66bcdfbc5c66576542941a02b64e0400f7e352e76f57fc2ce758ee882db330f36a0b00bf6976d240d8db4996349c0f9286b732918161c36cdc8d2188b7795c4795814d0018dfa6c4c857159bc96a45b1bf96cd6770a347fbda407b83c8fd4e261a9461b15fd5a1bc5a95ddc5fc6d00cc773331d81bc24c9c31d90bb604807d8f12acdac3b580fdd1f670bd13207cdf9c31c7360ea99909507e408972db002897b01a21a49e2d74fe52ed5075b4b97915556e3e11e4e67fa144dc87f9b7cb291175a73fda4c8e3b01d00f33d1fd91fcce038438c956806d0f707e6412ce8956e2fc19a4a81f9b8493748e3b19ce1b00cebf9a84b3d04a9ca7009c9f988473829538ff02707e6a12cef156e27c12e0fccc249ca423ecc8702e04383f370967819538f70738bf300967be9538d7009c5f66a221244ffc768fbc977e09735b9bec6d4b3a0820fc1b25c28ec29a722160baa88dd78b46e34a31a0c1c6c52cba00745f99336ac9c645f35f0515c8af9b767d1ad8b461e3a4ac1280f29b4ca589a5324297b34d323dcc40e37033aae6b6b740c4fe36137d901c6179e3523feab6ed6dec1f008cdf657694877e298ad9f2858c4df5cfa3429b0dd0feddd40134a4654ab25cfd9f00edf7a6a225cde5c9d05e0bd0fe23135953fe1faedf723440f84326261af09dd6323ed1806c74d13080efc7cce02bf495373380af98aa60b42d285bfe9489e131c9f59ae75bd96f7e25f0c57f9a04d3c65acf5500e6bf4c8269e35214e70098ff3609a68d4b515c0160fe6c124c1b97a2381dc0fc8f49306d5c8ae22c00f3bf26c1b47144d15100e6ff4c8269e35214470398bf9804d3c6c5f8ae06307f3509a68d8bf1dd0c60fe96899198418617109635c9ba70c7832ae5efa601b5b14f7c3b009435370c28616644063407008d980694b0104f067438009a651a50c2823c19d0510068334aa0d92cec9454c20480acd17811c0db9c126f4be764b1f86883f300e16822b21e9eaea078d4821295ea391fdb58de2c63154ccdf3b17d3da4b701c6969418834f4f21ac0191a58f8341046e6512ce8956e26c0970b6360927e9467764381f0291bd8d49380badc4790dc0d9d6249c13acc4f913c0d9ce249ce3adc4f91ac0d9de249ca4ab1d91e12c05383b9884b3c04a9c27029c1d4dc249daf24e867313c0d9891267b02dc3087bd10753a11c00ca9c9d2951aabdadf2333f6c8bac01a308f861174a785c807fc99d39e2ef356cad23aa480c257497e0715b84ecf3c49e0066574a986ab9133e396006e353a56ad822562e9b3adc454eca85c01221002eb85bc76c9e93360220ee96896c08cb8462772220ec1122c3390fa49ddd4dc2493ad2830ce75a80b387493849a74493e13c19e0ec69124ed2d539c8705e0370f6320927e9da3164389f03387b9b54239a44598c27ab11f50638fb988473a295382300675f93708eb312e77dccc3d9cf249ca49be290e1bc04e0ec6f12ce0956e2fc0ee01c6012cef156e27c01e0dcc6249ca4dbdd91e1dc03e01c68124ed2fdd9c8701e0170669b849374121619ce0680731025cee1ccbf802e6fb82b7314e08b4d283bbd153ea25be9bd4f15b15ad1dcbc99912e50d1218b08f89ba064ba2d25f01e2c7ed74774ca4a06926c65a4e1c073079b02d2c625a6060090434c0169e30e83170390434d0149380e9e0c642100b99d29200973773290ad406633cc14908493b1c8405e073c328712649eaf98d480ae7584afe635dd79a2cad1a75a9c7153335468fa394284ff51e0c7c329f17760de5a9c7c195397c47a29c0be56faeec06f47508253535c93edf4201cb544067336f0c29126c1249c2f4c06736700739449306dec8c9b04608e36092661c5920ce60e00e61893601216e5c9604e0130734d824958c12483b913809967124cc2223d19cca900e6589360125634c960160198f926c1245cff900ce67400b3c0249884eb1f92c19c01601652c2c4f75a9de5fcae1018cb1c7bab8560fbf75aad631ed8719460fb0bb0f39c074ac5806eb87a4293eda24e3625a115c03a9e126bb00d1f6c5cad730f10f52750a20cb76039617e4fb69cc5c3c04b2766228bc21a96a3bd9474a33b323f1d07fc7452d346795794bdb3e1ae0628b7a744d95208a817338bf896f4f6756974035178074a54d91aaf0bb6361261c307593ebe1bf0c4c99478bb31afdcb941942bf9bcb75532126764b99f0ba8201e0c7c74474a888342fbe858caaa2699975e0bbc748ae98009ab9f64801f018077321d3061219f0cf06500f054d3011316a9c8005f0e0017990ed8c692c2c500f034d30113769b9001be04009e6e3a60c20a2c19e00b01e019a603b671a1d58b00e0999480d5a407d8888db5bc92375d93e1dc8e79386765a26130d65f93691ab47127c315c0536767a22d2bb986411b77a129005e3a27133d57a9345f130e3d23f3d1cb01d8b9a682251c204906f67c00766753c11226056460a701b0bb980a96b0ee45067612003bcf54b084255632b0e300d8f9a682b5b1803518805d602a58c2965a32b06703b00b4d054bd8c74006b616805d642a581b0761ec07c0ee6a2a58c23e0532b07b01b08b29c1aacdd0c7b126d84b9e0cdf0500df1273da006cdca2722e40599c8986bfe427f6d838836f1fd03ab5d4249ca4cbb893e13c01e05c66124ed24d06c8705e0170ee66124ed2fd6ec8703e0c70ee4e8933d1340a7f53b48d6354b70a98ad5af884cf8a113e5d780ef79d52e62dba3e86cd667c29027759f652e77c9e2849d6b3954e56b2dcf9172c04f676fee9ae47c4360533d9265623ae72796542769573976b56c7f278f7cf1edc21da4987c8112589228779bdf30c5fa79f7f7d335bc2dc45e5173abfd5248e06812447ecb3b7c8b9c6077f968b2fac773459cb6a85c5d18bcee7445a0b4ee562e57f6e1707982375ddc0dc451ae6ca320cdf13a0446852eb3cd35c7cc78d8f39627d0275a606f9cd1525f03aa155fcf50b72c460c178fb1078dae408c709b667418e589adfa5ef863f7f679120a6ea0475ce7dde839848527b21a956f0ac65f3a51b96885e49ee88914817e97b9cfb7c116625ced75c39c58d747287398f45c6f31c4ad459c634d656c6c88532aae499ba9e5826f7bcf8d2f6e4ee15d1a73795698b33892c72a3397f7fb5981f532ea4ce4d686962fbf0f8d73e4ea8e4e6f0b0f823dbbf9c877b0b19ee59b97c8db2c8d834f85e628df6e25fce22cae1022d8b625ef82e62ee2621e52247d81ccabfdb8a1418caab10dfcd1d61a66fa7cff6bd619a96953b3255df0eaed13e94beed4a731bb67cb26727619d3e1cfc367b4fd5c8bc5bf9821bd3d732be16666212034449059756e49cad11b65608a9554cfdf03c939786c53a9c943c932f62fc996ef0d2284f37564645ad3c1eb54afef4f9b4fafc2a4a9ec18bca7ffabef2fdd258df2ffbd3f7d3eafbe5943cd355e5fb3346a818b13a3646acf93346a43546aca5e419afe9e24f2f575e5e11ebe5fbfee9e569f272feaf5784b76f2e75de755b11cad942e7f93221ef88aa2cd6e2ff004f7a135863160400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/7d9bb7b44fb4c1b4da9b7bba05f9f733.asset.meta b/Assets/SerializedUdonPrograms/7d9bb7b44fb4c1b4da9b7bba05f9f733.asset.meta new file mode 100644 index 0000000..3f26b28 --- /dev/null +++ b/Assets/SerializedUdonPrograms/7d9bb7b44fb4c1b4da9b7bba05f9f733.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b1d7bf2f57834ba41ad4929108da4bd7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/7e6af46cdc9943f4cb7528d8eb8790b0.asset b/Assets/SerializedUdonPrograms/7e6af46cdc9943f4cb7528d8eb8790b0.asset new file mode 100644 index 0000000..5ef8b16 --- /dev/null +++ b/Assets/SerializedUdonPrograms/7e6af46cdc9943f4cb7528d8eb8790b0.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 7e6af46cdc9943f4cb7528d8eb8790b0 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e782bb3b94e0414a421242a0b4b8b581500854680b81044809218d202d6d694b9dbab7d4ddddddddddddddfdd7776776e6eeb9cd3c77b7b7792e33fcdff0219bb5679fe73bcfb8a56532e72734c2f9b590cd6353d848b68095b035acc2f96b8a735cedfc73cfd4f5b9acca39ae707e173bf746b0f4386ff29f21a1eeceef59ce5935ab71deac65cb9c6399b83f9f953a7fcf72de2d75cef8d5e5ceff52e7a95063e7a5056c2a2b647358b750973822168a97aae5b510b72bd4dcf93d996d70ee960aa5f84732c5ad6eceaff9ce9d6a716fb5a3b47a6e11db5b98b5dab9b7cc79a78a953b32970a89cdb74e64e20fe61ebac9637779eceafc6f21ff6e24ff6e2eff86cf3791c71e093edf13bcd702fccd095d10e3fd5eee3134d53936758eff03e7fcdd6fe473bd5d79692b63c8da4e1efbca63ba94f95f02fa3793c77e71ec8d25a33f909508b3e6f238501e07b8faa6b124bf3fd86514da0ae47196d3803e03c1b75b80fbfcdaa000b6ab709cee09c7e96e38a69d29c3ef13f9fc10791c2a8f1952b6f34c1715e6c3e4b14f1cbd86bbefb17c16f159e79b8d2ae5f90879dc5e1e474add664ade21701e541715a69952e60cf98d34cd75f53cbfafdecf92c7519ef0ca96cf3596e73909ea9388ff299d66c96f3401e7cef71a2f89214b85fbce9e70df59be7ba2cbb1f11d1e7b80ff69e5e64a5d9a2661c72e1e3b767175699211fd5c5c1d94fcd1524e8194db0c9c73b9a7fab4adb17cef16799ec7e2a76ddd12b837d695d35cb11ee77ea76967f77ad3f12cda97f3e3e8a9c276b6276c674bb9e552aeb27f07f73ca438f7037238b7e61eb9733c72e748b92a8dc849504f65d704799c2c8f9358381ee7fc23afed248f13e5370b59741a5028efef1879b7fb1b3eb9c50aa3299eb0ee23bf3b378e4cf5fe54796c91e0f3ea9969719e8f2563ba3cb64cf09b2de57146806fb6727da1f90f1e5f181747e64c976ff31aa08323a7c546793e4b1e7796c75d24fff91e3f989f801fc4d3a540eac2401838bab46c2fcf67cbe39c685d58a147a716f5a753685729b32538e7c779f27a2b70ce759deb7ea7e52352e65c79dcd5a3f33c3a9dd97cf7bd36ad816f24f25e2cff2a72ed6b95e5ca6e5524af2ff0e8363da277f3a9e05da54722f16137c9628187f102a98362bbbbe7b9d6e09c1f8b22df0b49fd5b2bdfea05aef377db80737e7f6182baeec9eafa2c97b31bf8f66ef2db32fd6f7da27c7611ab1bf774eff223d047fccde5bd23dfdb8bd5cdc7d473dcb6b6e09cdfdf2341dbf6d6e8e77cb7cdc418efeec3a2d39fa9117f68f682bcb658eab33b8b8e5b323c45bd40be132a97d796b8e7ed942ec5f21d608bf8dbd1afadca4f97cae372a6cf674b0007191f9dda62f8db7dd3e5b56531be55229f59e1b1bb2822a75577a9bb4ac7545e360c79965f2b93c7d5f2a8cae66b22cfe66d96d714a30aa9db9e2c2a6d66abc0757e5c24efb703e7fcb97d23b2bb2b5df7f3e8aa0bcf2a8fedba3420969f55bbcf8e56cfd6b86cdb6d95dc1ef1e850cc62fb6f2769d75e2c3afdd84bcafdc595db7e897cbe561ed7cae33af97c4934c7900aeb5869733cddd64b597b4bd98a732fcff50e9eeb8be5f58ee09cdfdf20cff791f73b81737e5ce261b0c465d0fe0f57ff0e2a2dda5f1e0f4cc0df0e90475546507ea778b500e7017985ed2896b23b8373c78e0e0fb8723bf68e7e5ef8227fbe8b3c3f481e0f8ed61d0d634d9d36accb52f94e5770cedfd924cf97c9fbddc0b9a36bc7073c3a6e92cfa9387f883c1e9abc8ee13818cf0f63c5c7c35d99e17ae211f278a43c4e02b21503906e86eb0e9bc13d7e3e511e0f8bf69398ba1c258f6de2d8d30d3cc78f4707b03fd63d55bfde226d5bcea2ebcecbddb0ee5c1243d6712ea79e97c8f3e3dd77baa8bced04f77e27e92f4cc5d1a3e5375644587752ed1b27c97b2b81dd87c96b65e0dab1f2dabe916b2195779dec099f1e9efba70019bafba7021d74f74f93d77bbaba7751f9c7e91e5b0ef3e85ac6a2f22b76465d5b43659e6ff7f2119667ca775779c272951b2e5db362c83a4b1f96dd26caf3b33d61798e272ccb356129db2343ab41b8c9b24ba84213be6b22d7c2e5a57391b054f7cf037275f7cf073ae8ee5f101d96dd541bea85485842fd61585e54d7d65085e7dbbd13084bc5ff6279d4e53997cae33029b74f02722f93c77d63c8ede591bb5d0272af90c7cb63c8bd12d13799ef295f576d7e952cdad7f9b913663d62b1be8a697dbda76a2fbe9a45fbfa352cdad7f763757dfd5a79af2a12fe8205bf56cdeafa7a0df0135536bd0e3c037d55ddbf1ec8d5ddbf01e8a0bb7f238bf2f59e2a4fba89e97d1dea0f7dfde6bab68a67e0b7555f4cacb0bcc5c359f1ad65d165bd5a377c7a79dbc08f67b1f3c65b5df9f92a3fba4dca5b2be5a783737e5ce7f9ee3af95d592fedbd9794d35a5eaf91d773e5f5dbe5f76438b03be4735b3dcfdde99e8fdd24cfeff6f0bfc7e32b1b22fe16b6e52e700fdab63f8b2e93dc2baf1f00c26a7f700d86952acbc6e37a9f3cdeefe1b79e4597ed651d813d18d17facaa03a9303f2a72af932a1fa8f06d0df47848ef2b42571066becb48cae687e3d8ec274ddac8a2d3a48dae1ff4b92186acc7e533afc478e649797c4a1e9f90f20f64d1f56055f7795a9e1fe4b9afea109747d8775f09f450b2f93bfd12b0ff59797c4e1e9f91df39984597f7559d459747245b8e4df69e2cd7863645fb8f3877c2a1afaa372a5f5c16c73f9e97475516947585d0211e0687c460302cc16fc5b02ba4f28e96e09cdf7f519e1f2aefcb3eebd0e19ee70f97cfbf24cf377b9e3fd2f3bcaa4bbd2ccf8f887e9ebd02e4f0f35723b68554fdf035704dd5d15e8ff0e9f78bbc7754f4b7d91b2cba7ea7ea7047cbe70680f72003755ff6db858ef1d8a4ea0583c0393f6ef1c83dc6c36a8b47ee711e7ddf9447d5def976c4c6f123c03b80277b2b5a664c9f7e55ca5069e26070eef874ff58e57ff5ee09f278a29431049c73192b5d7dfb6fc465854ef2f03b015ce7c793e5fd0c70ce65bf1043bfd7e4b3a7786c3bc57d7740eb04de55f53a557f1b02ceb98ca9ae6d03768f21eb5d797ccf1386ca67b9bc3334e17a06084f7e7ebad4612838e73aa87eaff711df3ed5f3feb0e8f707aa368b0fe4f1438f6e67b2e836d58fe551f5bd6a7c927dead1fdacc83361fd3ef2e8779647efb3e57787033dd4757e3c8745e751aa7ef9993cdfeab9afea69bab6a35871e40ba6ed2b1f34d1bd3e48eac5be94c7afe4f16bf9dd73a3f98554fd34d13c4de9f8b93c7e0778ab74ea5ba9d32b52a72f62c8db248f9d59ec3c43d9ff83defec1d2fec1cafe1f3df6ff24edbdd8637fac7aaa4e8f9fe5f1fbf8f60f96f60f8e65bf94133a4fea35029cf3fbb2dd3474bebcafc6025582eb8a1fbf2fc708b18eae0e4376777518529e800e17803090edd7ec17f00ca89385efffca22753278fd3729f322793f139cf3e385916f89bf1d5d3354f9f27779fd12a08fd2f1528d8e7fc4d1f14f204f77ff2fc486bfe57b977b6c906d05a1cb58623efb2fd3fa6c86ecff185a20afcbf124619f95e3ff42d7b2689f9575f5447d965f16bf54da1ac367871e2575da8acb63b2ed3fdcce7e85d42f0b9c3bb286c93ef790d2bb51b41ea126113d769475c7901c6f16527549156f1583162c2906e16f5ec5a2e3d9552c3a9e5dcdf4f1ec6a79bc9245c733d50f720df0854de09ed2b729788e1fc158ab906c5f0ab5003264bf53488d5d71ec1baeca91cd5cbec3551d40d51d958dad23ef8cba20865fb4f1bcd736f2dec847f0f7c27eedf583762caabfc577d9bfb947def51ebfbadeb57bc40857c71105805bbcf7f8f13ac0fc3a296bbd94a5f2f3961e59d77964a9f754594f955fe28c9d557243374879a3a26d0edde8b97e23789e1f6f96f7b3c1393fca7ecbd04df27e4e3493d0ad1eb9b77ae4dee6917b9b47ee2d1eb937c9e3ed80e5ed2e93ed5f00ef20cf8c5461ace4c5e3e6e570a747df3b3dfade21efe782737ebc0be87297d46593475fef3309e817d39fd5788fbb810c4fbe2a9e49265fbd9745e749aa9dec1e60c33dae9d598a8d4a533a79f4d3a5c39d3ddf9d04e4aa671e8abca7fa1a431dc13dfede4479fe308b4ebf1f96f7132dffaa32c17d400fa5fffd75f986ba8067347c435d813cddfd6e7afe21d9471c7ad0c3ff41797c00e8f780e4ff8e6bdf28d50fabdab57b79ecd08543efe8ef271c0e3d7d8683cf36ad901ae3f5680cdf6e9da46f3fee612bdbf4428f01db1f93c747e4b36dc1b9c3255b8effcb51fc94ff3c0164281b9ed4d8f0471c1bfe04f29229533eedb151b5753e05f47b2ab68d39b25e11526371fb7aecd2f9537a02fef48cc69fb603f7a03f3debf127d5969a68bcd65d9b24653dc7a2db369f73edce95f97fae1c2318ea07748a95970cf0c87f5eca1f0dcef97dcd589b906a131b122d23aafd44f597be10793fdc06a1da1e0647ee4d500cfb83f7f87110b007f685f8cd7f3298b69f70b41c33116e1b067d795a6e4399b65f68f42b3ee50c6351fd4621198eaadf2824db56c2fd46b20c1e7ad1e3636a1ecc4b91ef855e04d7747d427174d35e5b2365beecf1c3975dfbf364ff5fde3b1e3fac88fd2df55ce815f09cfa16685f0ea759b07df955708d1f5f97bae5817347b7fc7c8fdc37e47363c0b7f9f14d793d1f9cf3f794bfabf65be691f70ed0e92df79b63641b5c28d3f38db759a4edcbe13546a5adfdc0fd16404f754dc9807db76bc0915f977347f27e88fe66bc30d0868b6a5fbe2d8977df65d16df0b29d35f49ec777de93e123dbb1c6aa3167ca4fef88e33b4aae2acfbfcfa2fb37de97c76c208fdf1fe7d39e0f3cf67ce0f9ae9ad715ab5dff41f9ac2aeb7f24dfd9019cf3e38720fc55b9fd6370ed4379fc44beafe6cd281ffd143cfb2978961f3f63d17d999fb9fc77f8c1235bbdf7b97c7e4770ce8f2a8ff842de57f371541cfd12e8f005b8c68f5fc977268073478771b2fd678727906f7dcda2cb085f7bbef98dbc3f119c73db36463f1ffa563e37099c2bc650ce648f1caf5eaadd48fdcd7579208ebfaab6f74c70cebf95e6da3e4ea553bf27264f7b4da5152a0d54ed8099e09c3ff75612b2a59da11f58743cfec16534fe09e4b929e09cdfffd6ffb743ca677ff47cfb47f7db131a7b9efb493e37559ecbb43e1c4fd4fd699efb8a53bee7be92fbb3bc3e3dfabdd058cf7daf5cd5a6320e91fb8b87957a6f8be7be476e48a51fe311b9aa7e31c3f3de8e9efbdef77e93d7677adedbc973dffbdeeff2fa2ccf7b133cf7d57b133dcf3596f77776e3c40455c79c04eefbf51dd5bff8078bee6ffc43fa8e1cab12ea278f83627f232c4fa5112accfe94f27701e7fca8ea3fe3c139f4c5bf5954b9429c3b7a4d5ce291f38f478e6ac3563efbafbc5fe079ef5f6017bf3fdb653bb1c6634f1cbba3af350989b098c94a5931ab6499a2b19a978e135de241bd197f71072ebaa9a0c3f82a0ffcb3356c83f36aa96e85850562fd861aa7249ead5d61a187a813aaaf4f11bf8b9d27ca84d03969753e71679d4f70e5ca9d7fa56079886ae7fa0cb1ba045f20a2ccb93392153847fed612368a2d72fe454b59e87cb69cd53a6745ceef4a216f89a376dd27e399c49792f0be33cf91e9ae74b1dab9a280563ae7e542c3f9e2f75aa169a9d07e9673ad46acbb51c156b0c9ce71bdf85a5ddbab9cbf75df2c92c8f43aea17bcc0aebbcb6aa8609aea58c3b5cf14bef8ff43a4214284a36f3a47c6c3c69922c73da64e48fc7f866e22c333c45952c628812c14752d9b658a3c735e1d82fe6dac6ba1debf5dde792c37a62d7a323cb87b090b22213c64c499e33f6bd3f1ce26d1a6e5b04cd1c5d73b8e69b1c0727919a265da8f094d9a34cee28a7af18774f8c51210f35388df7dae4c3ce73f009a8acc2f3a0044f5a8c849d5e682cc73a1f3db556e8130a35c28e9356b9aa366b130ac5c9a1179afd0318f1bc995e58b194d75ee7025ea84731657aa9908aaba19713c73b1c04ad30596e82b2b6a90b8822dd5143bb89a87ad880457a6285d758fe1d4d8b744b12b4d96bd54b4bbe7d6c28aa293befaa4893e5c5a8a7049e66b58c834d2854ccb5447a3f8f946ac706915b62b122efc47cfb035e2dbf174c00836d6116c956adf9e2ce273b9285b5524c1900f9618ee4d8af400db224e185f050c61130dc22c8eb09d462bd6a485472bae1022b9a92e705a374c269d9c73f3deed6e1e044d50e7ee10338ff5ebdacd74f4c4b09a25a4f454dd71be934dede2dc2b769e2f15d919bf3ed79158ec7c9bcb9b24be10a96f46bf119b2cefcbdfde4b564bb593a03a10d484836a86116fae219ec5fdb5b3c60d441ae78d0c1df0c8d0028b665d8246b39698e4ae4125b7c224770b2ab93526b97b50c96d74d146f46eef959268136972517f4d76de5de918b356d4a36b9df7754d34b1a34b8f84a34b4f115dd299aee1c89f46583469ab0b3b7eb1974e496fd0f5c483ae1d26b87740c1ed316feb13d4db3ae8bc4dd8b182d4db1638d7dc06b669e26e99689519299653e52d36dc6b7244a8624f2acf9a2d1658ad153ac4f6413e4ca391b7042ed0f2ce751a8db81f877f6d9a8094ccfb0a9fa7d3028b091d31bf4a0fea579db0a8d02f6054e8ac13cc1db6bf2674c5e8bea82070e4d6f95a5ffc6b5db0af0d88fdb5679f29d8c9ffd7baeabec6731a5e78089a7f77d309e759ef2056b702f49ff35347786b5c78774cf3c11acdd794a6f9d2bc07e6a543827a694f4c724650c9bd74e9aa486c0f214d5713ed6c9921da7a78cbce52b6af4c5bd477d78894846ba45adbe739c7e5420b7e9d6b11bf9326765a3c34cc07a4c522399ac612ef32a2b7820f3d491369f47091468f8c9146ebb4f19f52eb738811e2eb66b1c17295de584ab3bd26a57943978cc54869fa60517664d028bb9d4e328fb2991a5fcde2becac744b5eca94de547e0dfe9ab4b1a447eb97f83260d6e2d9fcb5b2efa3f5d7973185fe57e9d70d5558e03af958e53e43c53e57ca3543a7990c4807787f4f1361f31f7471f1db24574d82981e84069151601d2759ec49b43f860af3a4df63cef9ce7d4fea7b0c5221aee272e734a6ee8968947cbd8fece517565d6f1b766b8bff5d369c36b997c3859dca258275c707f4cf0e880820760713c2f681c1fa893cc531b3edc2468096b10a6767e50b5076329ea584d8afa4fc85f8a3a04133e4e23fc9e347fc233b0a8b043223e12c3ab876282c7ebe2180f9a29a26539ddf9bfc67983b763168bd89f2e32c3486a90eec4f532e72f9e618f00cfaf719e70870ef8d17318e6143b06758ae158b8eda409b75f7c86db084cf8048df0998dfc09df1e0bbb89bab0e3b903cf3778b164a5ccdba253c3743188235d8cdba9152da42522e4aa45b8a6b3039c9cfa40e7c8abcfe9221f2817f7d2c5a62f5522adf513a62331fd27e9f46f09f49f0b34f4f3c54cdd1739e1c99a742be433ddcad209efc0dc75edb5051f3e88d27fc16714866d9a0e5b1f7163bd28b9d68ae7e70b07280d97954bea2983ccd6e89529da192a584316c8786d818f72aa167f478a28fcdb915ef420052f3e68d55bf0523ffa82171f369a2106b8a7427bac80958325aa3335896ac84fa29a8bc58559585cd839a9b8305ae773a2b5a9b2417d0e8f51f3846c1ef38217f8f980d83a2db1a2f52b3701cfaa2f1d878b09ccd562532f975c354f4c7947d752b07b970b5f44097d9c28107122959a63f1220fcbb5676b72ed5b9af8cbb5c7e85c56b42a5635a8cb4e151252e1b673746e2b9a3ef31208fcfad4b3af180c5b2d12d51299a8ba49775fb1e24595c8364b9deb3ce185f7878b952d787969bae0bd5a90e7f6158b7a2fe6e485c2c9536d27e6e8f9580630579301f82a558fc5a2d0ae9a28f48fcf28340e537b5e50b577c0d49eaf517b63537f6a8fc7841769841734f3277c479d709e30f31d5282d41077c204f32d46ea143779cb80aa272cf3d414978aba82aaff95882b1b9cdfe5ceb5654244ba1836a9466ff8d17202c676370ddbf63ed94ec410ec1e90ed249d60ee9e7b24223846f7de649d605efeda9321e52fbe3188fff2d714dd7738f6bd34d82ff0897d2a16cdf70e1acda76192f7092a793a26797150c93330c94b824a9e890562b12610f900263f81380b13be5423bcc8a7f09db188b94c97360d62bc6921524875ab4f91768d62b65c48a972fe5e2bf3dc92a8f611dee651262bcd7ee2f92e989e253a3ddd79547c8c1a2f53148b3634fec542b6cad7570b30f4a51af45b7ca29f8d095fae11fe854fe173305e2b74bcbac709d71231b42972759473d50fc7424c9b953a6df86924dcfc7c672e86b44c83746b4b7f4877c58cd8576704cf115c7ce31c647344835fb19c03b65664e3fe31cec33458a5d380a76c05e182c1dc248b05f331a4e51aa4aff8445a84a5c8ab83a6c80b30b52b7489662b7f6a2fc4d45e1354eddd749279a9a39221a50ebeed82ff52c7eed877aab0ef5427f59d3d3052354149eda993cc03b85613c0135bfb0be04598f0b51ae11b7d0adf0b13be4e23fc119fc2f7c684afd708efddc69ff07d30e11b34c24b7c0a5f8c09df5f23fc4c9fc29760c20fd008bfc2a7f062ccc9370675f2a598da076ad4eedcd69fdacb30b50f0aaa76894672a6183c97cad958ded14ffe26acf06d24121b27be89e96762c5fb3ed6a454aa0b179e431fa253c94756be1cf3a64335def489cf48b002137e9846f85e3e5d7525267cb346f8513e859761c20fd7086fdfce9ff07db1c03c226060aec204f3bd32ea94054708ef5c23e258ba9839cba7375788bf2ac41213a5a2e3ba58f87ea4c149755cf3f9f2e9d27baba44f973bde3ed2b9ea47eb724ceba3745af39e57de881b2937bb5549b71aa21b5798ce86c852f7105f7aadc67ce0688d0fdce2d3c12a30a38f09e8036b74e9ac184a5c469ace62e3488b44e33d5fdf62b9f094d5f53c6fe2d884d3e42d224de6c33be874c5d2ef4a5d70f3b2f5710c295bf3251f5b72957d95adf7c37cf6048dcfe6fa4cb7aa30e1276a84efee53783526fc248df0cd3e85d7e884f3620ddf002650b1a61653fb148ddaf9edfda9bd164b244ed5a58cdc1ed538139d56fb493fd661df3c4df7cd0ee2145b89611e5b2352143fdf5f8f7dff74ddf7db8ae756087bdd5c6a9e68d158261afafc59be4197728aa912bb92a69cfed76fd1a78467e892129ef09dc9d4b0182c29731552cb12b981571533f19beb94bf368856c165ceefe824509bfa9e2594e8528764cc65559090da1f8b74676b22ddca0efe22dd0198039ea373c048931e57bf2caaa5d46dddf6dfa4b711d3602b16edf5e1e7e79b076248cfd5201de813e94198f0f334c27b77f427fc608cd6f93a5a7d4078ad138944ba18b8572cc2cced3f754762bafdaaeea2302bc43d7f4437e9f4e2b3f32e600473010fc1105fa841fc804fc48762882fd2211ecc60677569788a433ce0d1b348473ab1bc54a4987ea01f86697a310b56acde8c09be448780835f1486e0a6007bfbac161d8e85e8a59a10eddcc95f881e8109bf4c23bcc0a7f02375c27949e172861476f9be43fe1b928fd27d879708ae4c24b063f4f31f8d09be2aa0e063302fba3aa07b1e8b09be26a0e02d3ac13cecf9364edeb1dd5c809fb1ddc7e984732fbc4ee385359dfd79e1f13ae13cb3e49b0a052af39f80a97d8346ed537daa7d2226fc468df03b7c0a3f098b99376131f3e6a462e6c9983bf285f7eba4967c34fb62e71f6fefe7a3965638a54b5ea0e5f31fd68b3b95a211aad86755e2144c8b5b755a740a6b91e5fc5ecddc5e6f77dc61f23a9c8ae9709b4e878e52871ce7ff32517ee4efac777e27afc1699806b7eb34680ec282cf4e5cee33033e1d73df3b34eebbb98b3ff73d43279cbbef9d98fbde9594fb9e89257a776b12bd463e13bdb33042f768084decea8fd0d998f07b35c297f8147e0e26fc3e5dd8fa14be150bdbfbb1b07d20a9b03d178b0e0fc64a9ab2eb39693a0fd3e2a1d849d3a87a4c9acec774783856d2945b8f49d30598068fc44b9a7613dff33793ea42cc7d1fd5b8efdc6efedcf722cc7d1fc3dcf7f1a4dcf7620c19dfce204841ef128cce931a3aeff8a4732946e7298cced349d1b90c33e2198d11b9ddfd1971b94e3827fa6c40f457605a3fa7d17a8b4fadafc4d03f8fa17f2129f4576146bca83162440f7f465c8d097f4923bcc0a7f06b30e12f6b8457fa147e2d86ff150cffab49e1bf0e734ebedd149aade5d473b6763da6c5eb3a2d22d95a763d666b37603abca1d341656ba3eb315bbb11d3e04d9d062d58245b9b263a4fd6f86c69bc49f73deec06f691c787c4f7f0e7c33e6c06f630efc4e520e7c0b66c4bb1a236ef169c4ad98f0f734c23bf7f227fc362cb8f98e5e41f285db31ad3fd068bdd9a7d677e884f3e6910f59c0e6913b31b53fd2a87d8d4fb5efc2607fac8b5bbc5339f680eb22e7d14a31245ab5f1a78b3a6fad1808c387b2cc65eebacfee9a0cc5ce55b7c97aa53857e966315b2a079a8c12034d54a3f606e62e019a2ebab6dced3dd245e377895ce56395b8522d9e2a0592f54359cae4901c38f8c5efbc89bbb100fa441340f7f80ca07b30e19f6a847fe053f8bd5862f41996187d9e5462741f66c4173a42bdfd19713f26fc4b8df00b7c0a7f40279c47d6af12498c62345d3fa8119c2916536b98714575578babdf71455feb78697bb6f9a67bb1c71505d715eb097f08f3a56f75b1cda72f3d8c6511df05cd221ec1247f1f54f2a358fef04322fe1f23d17c4c233853acf7b7bc41fc3fc83a8eb13dffc7843dff27e1f9c362787eb0d526f521f138e63c3f07759e2730e7f925a0f33c8945d35f35d1347f3b7fd1f4294c6bbeeb619d22111f81334954b44ac5543add24cc74515c4af7395ef6694c8fdf757af075a0fcc97f0693ff47c0d079160b9d3f35a17383cfd0790ed3fa2f2c74781c59298b882a3c4ac36b14253b9af979ccc8bf3546ded2d79f912f6046fea33392c7403536c22dcf263f5cf145eccbffeabecc4b84ee065499e1fd2a32c30b79153a11c2ffc8a997300dfea7d3a09b568302e60e579c2e5b1b4a939cebfa32a6cb7f3a5d7a25a84bdd0d0dfce8f48a4e27ee787c2938afe3bd92eecff15ec50ce6e94b9034e1354c705a40c1af63821b0514fc06c6b9b186f32f3e39bf89096fa2117e473f7fc2dfc290340d88e46d9d609efa344b44708ccad03b3ac1bc1eda3c84d4435b8492a987be8b616fa9c17ee2007fd8dfc38c688519d13a2923dec78c68a331e2059f467c80096fab11fecf407fc23fc41cb35d48939cf279daf3185cdaaa4494b155429ec1868a0caf42fe8e9e39952ece2203af2bc51d95e456b372b1a84f35834b57b88d4a7c806aa5a764a0bec31b93dc2c767938394f17897989cfe1881f612cdaeb58f01504e1fa986e293392c1a68341b82b65b9530d9474f5e33ac79390ed3ced77b6d9c798c374d0384c814f87f9048b521db128d529a928f5296644678d11953e8df84c279c13eda20b693eb349df44ba4836aef2d97abc76e12eab162b4c3362de1d2a86d0bacdaa11bf8e8e016b8467a826d4e87b35c2af6a34b168a9d050cd2089c85e236ba77efceb731d3dbeaa5dd744f29c18eb8e7f818579374d98670cf217e65f62c2bb6b846ff629fc2bcca17ae81c8af74d46b7d9d7c8e4ac4c38057fb04c0c0ef7d7eafd35a6454f9d167ca07ea1f34db8448abb3a20ef135ce773e8c93718de5e1abcf7f8c4fbad4e386f0fe91d0ad81ef21de6cb7d02faf2f798e0ed020afe0103dd57174906fb03fd23263c5d17497c0aff0973cf7e5824f1ba6751d4549569e179177e1cf567ccc4fe3a47f569e22f988903301379bf7896e887f7ee3e997ceffcaf981603755ab4065a4c91e3038a456a54edebabbf615f1da4fb6a17f055ecebfc3acfb0fcb510fcaed3832fc331389198b70917fc0766e0109d815d59f490efbaeb51251fc07f629a64e834e9073459234a0a6eb9a3c8b9c94b3595a25c50135e354bdd4f5ebfbf30fd86c673405e3ae2996032f36affc6be3a2c5107f47e3d3907fc074bfa87074cfaffc592ae119aa4eb9d0c7f49d7ff30e1db6b84e70ff527fc3f2c6846ea82a6530249bf1b507e82858510033375350a9f068630e1591ae1e387f9139ea613ce2d1da5a3c79770f5ceff54adcf35a2aabd4c14ffdd19bc6a9c865b1de0d50475a70c4c3a77c789a835a223f380ddca85aad4469af0fbb109bec2a611862f5b83ef0f9f61d318c39713b0f1ad894eb0d8d92960446f8ae118adc1d17bb83f1ccd74c2c5ee4e410bd3cd75927935634c88603e700bec6bf9145f6b897d6d2cc5d75a610e304ee300737d3a406bcc6d7708e8b66d30adc76bb43ecaa7d66d31ad770ca8753b2c3eec14343eb4d748ce14db1ca67241b8f93245e772fc2fb93121c46b961e08dc64ed70898921fda270f174c0064274c03c6a92c6a3fec9f4e7511d75c279723f5997adc26530f8450e87b7036e08b744fb5f06a31366de148d799b7c9ad719133e5523fc0e9fc2bb60eca6c5aa0b6511d485ba629a4c8f5517ca4a595da81ba6df0c9d7e6d18ac0ba9f68d646a43ddb1efce8c1742f8f793ab0ff5c01c7196ae5169943f47ec8999b9b3ce4cbee2f774068701b94df9de95bfdd2678ff11ba1766ea2e1a539bfb34b53726bc40237ca24fe17d30e1b335c25fc9f1277c3b2c90e660be885560227d7ec9ad25de1733b35063e6ee3ecd4cc784cfd5083fd1a7f07e18c35d750c19d3488fc1a53f267d9e4e7ab370086526110603304cf3759872fd611a88092fd208ffc6a7f04118a505016b928331c10b030a1e82e1d84d83e3059f383230e1bb6b84178df6277c28267c0f8df0ad3e850fc384efa911fe894fe1c3b1c05ca48b4b352cb11d13824dda7107c12d8e9a0664f6149e115810eda509a25f7c06d1f65810edad0b223e7fb1ee2c2a3fc68cd47d8f8f9ad8277cc3336a62712899511399985d4b7476f15c22d3971d5998fc629d7c778bb2ba8ee7e78ba3b02f2ec58a0e75436a76d4aa85913bfe1c321bd364994e132e81d7cffd26d839baaff061ac25213ec42efa2bc23fbcc2cfc285e7ea84f3d3d210efa88f16bef3ec439a6dedfd6c5a9d0f34c13f301a63b43c5665c74daaca9dbf6ae45299653ec3260ffbee0add77dba1dfad90c9999f6f8fd1b5f2f0b6bd10df8da52196fd5f245b74fcb5f4acd4244599e9dc8e1e75ec48e46b658ebca63ce9e43f23d54f3364f1d47d45cb51725f4277a9c4bc6295ce2b78935f894829545ffc9c24bc61acee9b3c272a0fd55d58294d177f632cac340e336835564ae7e6447643f263c80e9821151a439af834643c66c81a9d21cda521b359b1f40c7f79c88e9829951a539afa3465274cf87e1ae1cd7c0a9f8009afd2086fee53f8442c10aa7581c03721852d7691c6920c5942dd518e571d21eee5c82bb9e12ba3e5953c79856f3dcbcfc7c8f31522a1ab95fb3394887bf9cebda1be027b1266558dce2a7775ed0ab06d5f7ad27b864dd66504fd78029acad5b5a78831a055496400b5213e56271ad048a4a17f6d48bfd675acaf63c9f4141db7fe9cdbe21472739f738b88f3451650e65c29046dc4d549305d17e24309a399aa1f3dd9f582ec803a9627ab1f467daa2e9ef03c704328e826a998e4fd834a9e8e493e20a8e4195842bb5193d0329f09ed4c2c493a3060ebce2c8cc7414179ec8c493e38a8e45d30c99b824a2ec0241f1254f26c4cf2a14125cfc1241f16547221e6749b033add5c4ce5c383aabcab4e32af241e9188ca31baf8e7612a1f1954e5f918e5a302522ec2543e3aa8ca0b30c9c70495bc10937c6c50c9bb6192b70495bc3be673c705f4b93d30958f0faaf29e98cf9d10d0e71661824f0c28782f8cc5494159ec8de5db27d743bebd8f4678262f9985f8de66a95f10a53ef7b0895d6c3d2591003f1327b758172cbcb5f2d444046fc1052fc13ce9b4a09e548c493e3da8e4a53ac9bc0df28c10c1d0c165981d6706b5a3044b1ece0a983c946291f8ec7a88c4cb311ee704e5b14227993fbf35111e31e6deafd409e60b319d9b88e09f70c16558089e173004f7c5049f1f50f02a2cf42e081a7ae558e85d1830f45663a17751c0d0abc0205f1c10f21a4cf02501055762a17769d0d0db0f0bbdcb02865e15167a97070cbd6a0cf2150121d76082af0c28b8160bbdab8286de5a5dc16aa0731ae21b07a7be60a51bc550bf2bce5d9d48580cc789adc3c2e29aa061b11e2baa5d1bb0a8b601f3cbeb02fae5fe98e0eb030a3e008bfb37048cfb1bb1d0bb3168e81d88b1b829208b8330c13707147c3026f89680823761906f0d0af9104ce5db02aa7c2826f8f680820fc35a35ee08d8aab119d3f8ce801a1f8e697c57408d8fc034be3ba0c647621adf1350e3a330c1f706147c3486e2be80288ec134be3fa0c6c76235c307eaa166b805c3f160401cc761381e0a88e3782c897b386812770206fa917a007d22a6f6a341d53e0953fbb17a50fb644cedc783aa7d0a26f989a0924fc5803c590f404ec3d47e2aa8daa763929f0e2af90c2c923f1330929f89097e36a0e0b330c1cf05147c3626f8f98082cfc104bf1050f0564cf08b01059f8b097e29a0e0f3b0b6de9729da7acfc7bef60ac5d72ec0b2b55703666b1762b1ffb5a0b1ff229d643ec8f4f54454de840bbe1873a037023ad0255875fccd80d5f14bb1d07b2b60e85d8685dedb4143ef722cf4de09187a57602abf1b54e52bb118f91e458cbc0afbdafb145fbb1afbda07145fbb06fbda87145fbb168bcf1f058ccfd761aef6715057bb1e93fc4950c93760e83fa5407f23f6b5cf28be761346edf3a0d46ed649e6ab7d7c114296d0f00ae703b211e1b7606a7f1954ed5b31fc5f51e0bf0d83f4753d40ba1d83f44d5048776092bf0d2af94e0cc877f500e42e4cedef83aa7d37569af8216069e21e4ce51f83aa7c2f569af8296069e23eacc8f673c022dbfd18e45f02427e0083fc6b50c80f62907f0b08f9212c83fe3d6006fd3026f88f80821fc120ff1914f2a3985ffc15d02f1ec354fe3ba8ca8f637ef14f40bf78028b7cff068c7c4f6290ff1710f25318e4ff82427e1a83cc271a0681fc0c16474289088e11479ec504a70514fc1c06b9515a40c8cf630ed73811956338dc0b188b260159bc88096e1a50f04b3ac1bcbfbc59228263f497bf8c855ef3a0a1f70ac6a2454016af622c5a0664f11a26b85540c1af63905b0785fc0606b94d40c86fea04f3de8db669c17b37dec278b40bcae36d8c47fb803cdec1d2a20e01d3a277b1ccaf63228263647eef61903b0585fc3e06b97340c81f602cba0464f1a14670e620e734b48a99b1dfb05a70a1fec6c175d5310b79988979b0ddd2f83cd84ce667cfe164f4c5e6c77ea40b761e3add130976ae3d22f8639d607eda23adee222ceaa7ce079ae07ef509964af6ac8754f2534c78af7a10fe19963af40e9a3a7cae93cc9fef934868c6182ffc854e305faf67bb4404c758abe74b4c70df8082bfc220a70785fc3556ffe817b0fef10da672ffa02a7f8b45c601f51419bfd37d806f2a3f301126dfe082bfc7600f0a08fb070cf6e0a0b07fc4240f092af9272c55caa88754e967ac64313460c9e2178cc7b0a03c7ec5240f0f2af9374cf288a0927fc7246f1f54f21f98e4914125ffa92bc20d764e43a95cfb0b2e0d92dcda5f990917cbb2d2f4eb7425a20356d4fa0b8bbda3ea21f6fe8d057e76d0c0ff07533ba71ed4fe17139e5b0fc2ff87a568a3d3346b244d15a7f31c6799cfa6b25dc21b69cf617c25f075228057c9a01f2916d69be5dc2f145b08aab5ddf52572ddbc1bfe3474adc962ed7177ad537f5b12fe875999a7b3f288b0956a9b1b3782ae167fcf0aaf85ced7547523e8acf093d3c21bdf44ef8e5b2579cc17774b1c89b5c22e2e379a5e44027fde9f1e98a422c657625a21ee46338591d5cb7ba123c7eff28bbc7d594b7a0ce64ff08bae4d39ce3b2e2dbe2eff62c737dc1d165c6b8bc4ba521575b48dbc8b5faf2f7f0a6156e6ebacdcc9632564eeda395d84d86a61a357cbe810827762c515f8961fcbd230cbc6ea2c9b9050f84d920bebc31d1482855ce48e1fdb1a61b68dd3d996e7b16db6089d95d2327eb6bec12c698c59b283ce922d294ecf22eff0dd90d50a7a258e97ab5db9ab7d783964875bc1f3925a51cc80a91e2f60d55fdad604a33e5e477d524271a340d0a83622556b8ad9b7a3cebe0242afe257f7139fe156b9c5e1c866c8d17bb1040dd56698d53be9acde31a6d5b8a6ee76caeeaee0ae8d2a37e65797494275e345f2a1d91cb36b82ceae3d7c97ece68b3bd1653b9d04f71a5c49536d6a9b7c493099706e81f198a8e3b14b4af26ceadcbc2566f324ac9ce2cf07940f47d615f6eee4e4c723fc58d60ab36cb2ceb27188650b44fc2c976513b7aaad6a2d0b652c2ea9131a347594d698455374164d274c7d55a8ba8ba02f65ee0649f567691bccd2a93a4bf96ac389a714d116c0dd333893992294ab446d68995810abfeac6a8b59352d913a41f4776109618108852ab10879a963199efb45cba83fcbda61964dd75936256eca9958ad004f4363d559934d29db6336cec04a017a9f2c08a769ee12e5aba4cd6a01f922c7d682a8143251cb92ab2974c0ec9a89a5937ee35ab58c6be5a855785935997cbc2366d12c9d453b04483d6a444ac157535e2ef37abcfdaaa8ceb37e6cea84d9b4b3cea6c1a84d75fbc15d8b66088beadee5f78a7c69da19d374179da6d93135854b1746932f133522b8cd77fda5665d300b0ab074da8f05d5495a501f31a32b66d96c9d656350cbf48b4b4687d032e941b15b7517ca78c563448e2f5bba61b6ccd1d9b23b6a4bb40630ff9925eef35a66b12c016e48d892449faa2f9fed8ed128c47260ff215b1d2064ebc37b7b6036ced5d9584a58fe756bb6734587db0ad966b55094c1cac2e5e1fa69a54d86534f8cd3ae3a4e0b8839e16d7f7eca36c970e8857198a7e330198d13bc8d72a9f3902a9dba9b82c5aef3e925d57748f7c62c9cafb370964f0b77131e5d81844843d8db07b3b74867ef3c42cf5669a19f1a707d10d80e23b0a0be6ac66eda3609d48be9adea8b59b55067d50c9f7e3ccd09b52a910f99e0c3e998adbb617d047e4370ba78a2ae377ad3d7c4e5fab1af1f66dfeefeecf386e524d1facd6360bc3635da5ca53f66df1e987d7e5a38616d0cdee5fdf3b1db32eaab9d630066df9e3afb06b2d87d58bc358342cb8198968b62f744f90985f9498502a5ef0dc2acde4b67f5f668dc72fb3d4b3d35b6e5e1de579e4fd66acb68c9b5310dc6f4de5ba7f75816af7d709618c9522bea2885cebd69a2d542d5cf120d81e46b5b43307bf6c14a96b1e3086fbb9d2b4a5bd59afc36919e6f5e4a595e8f166660162e4ea44557df938dd5a71baa377b2866e312ac3f259156eb44ac4c2ec548ded26198a5c53a4b6726149ade71096e3c54763764b80ec7ac5d8ab50c35643f2e750fef088cc6321d8dfc40e59535acdad35f53dfad7edb63d694e8ac5984e68078ab9faed7a97e5bfcea9bc9488c49a98e49518c5281b78742e5b615b2ee5bad7d6aae28c9a8d2424351c8c4282cd751d893d1b50da8d8907ceb209e2af82192851159a123b23089b832cd92d6f151188995fefa3d742454e9b9229c4bb823bb547b507dfb7936664b99ce96d9be6c99ea9cf989c5c984e27ce9e5623ead0fbb7330bbf7c5da88b0affa1f390edf8e75a7befc3517b375552263e4315be38d244db595a3312bcbfd8d3cc0fab453df4b9f8759b41aeb7989dfe6987c8f64d0d6cde443760cc6a142c761980f0e91d4d66da9a8af52723ea6f11a6c7c45ec3a4364dc63a9b8cae705d44f5bca584cd34a7f791956da539a578a124ba4a78e22be8cc36cd92fb1744e5f03d7954a1ab2f6bd0366651536aeb87ec6eed41d2b5ee4fc5d29634da2df98247a4f78adcf8fcde3319bab75360ff2846ce49bd4b169474ccf1a6cb4125632f7ea3c43ea9c687b47b2a5fc9d300b6a7516ecd5c0f51ee88189c63cf58e1f2a13302a6b13196babbee82755895886c5b8fa494d266296ad4ba4d5d26fc92278bb55f2964ec22c5d9f48dc9c227cd6f5cf1ad01be5fa781ecb8d639f2edef2b7fc583019b36043e2f3c1f837fdf821b40fbb5e5f213405b36f7f9d7d392c99b64538e233328ba4fe6c988ad97000e665c9db5009eecfd2f4d02797874dc32cd8888d4c4f340f9b1f370fa31cc7361db3eb409d5d798142a644f8970a1f3516bfbe6a1733304b0ed259921b389eb8330bdc9cbcfe62ca4ccc8a83eb2fa6f09edd05729c07f733fe74fd59300bb36053fdf585700be0bd19a23cc47bd3f958dafa9c25b53366cd21c9cdba09decf15493fea2be6ec82d9782836ce23b68df3451c2fd3583845b48a55c5d03bf26ea1186de0f60fc59ea99e5ceda900b3fab064c617b8e586f9cec34b99db16b68c35f44a0bb3310b372752b6d3134eaede15df339b39ff4221be0cd03421c51dada1fabcaa59e610e756282b9c5a8c0cd7984646d5ae22d7f9f7573ba1c1e37d51b86ec497418a2de1f034772166f13324c4c1d6c80a466839f32eb3a446f19782f0ae163b5897327746365f3e6aa453aa2a136fa905a3e259a1ab258e04f544685d7c9bf64616800a859a498b942c87740627bdad597a040fd5be3254d33287721b8727e94df1b538927fad91de87bad5210b63874e7757802a2f85f80ab68bc567e68ac6437cb983b85ff6eeafeefdf2f64280aa5fc715b70024013a713d84bbb99dff55cced2879c791d9ac495a160f91a328b1f125d2a68a7242a503ce9d33a1f21c0c60b51508f9fab20ae1d19408f96643aa083c5314d4b8806251f9e7c5ae42b6ca0a6037348f003b86125867115517b32c1699cd6033b8f6ad22e08ea504d751038e0bac705ee283386bc5d5122ba02d6111685b28a17511c5aa6a641d90225143e2eb2db8026d40b7757804dd71d411353a659beefc7657022d090fb07723ac0de0325a47c01d4f09aeabf4b94473541be09d0af2d31328e1b502a95c6154e78f0d984ab68b603a9112530b802932cfcc06442f748f203a893ae957750298e4c3a50fa6852b5a36a06b3f3882ee644a744d05ba6aab92f7c66d22704ea184e3f8af4899dc9aa61aaee23662ce13f9652de3d397790e395736b2da00f01f90769d4a09b03948bbb89a7c048f0d80ba778e003a8dba4e5937e572176ae4feb6ce924243fb411160a753e78685624c496454ad1d15a14740a43b2355914e2db06003a04fba44009d490988ef9fa3aa3bd3d87a61756db88cce67999584a361b1689fa870046db00222ff5110cfa284c8f7fc83f0784b2caf5e9786b7b22ab1bc22d419b4cd9e4d89b28d4cd394bf6d90450cb797da06541f80b4ed9c54b554f08a371c26a82adf361565ff681601b795baa5028283abaf4c126d17bc82145967c606781b417becb994f05a831c35b26888bbf48b0da0fee91401751e757176b6887eab3c2b364f751eaf125fb201189f9eaf809d9fda96d7e881cf2596a567e5a06fe902fa2e125e94982a3e6d7341e38926116817527bdb34d1b15b2b3e1ee92a892ca15f2dba482aad00f70900771125b8b6209adada11c7470f295817d377fbba6d1a6b8418bbeb01e381975d922a707833f67a56664966f0484604dca5d4edb4f31c685358e2dbb6d800f028513b68d6c423dc3be326f9d169fea8e3e3e8da31b731a0525cad910597a871757c0aae719a5f06c7c56524dd3094113783c848784c4786ef4ee58c2407776524545ccf08d8d293e163c45e86afbc2323e1426086af924f4652e94986afb6890c5f25ff8c84c69e65f81a7095e1bb4940a7333e4e24a34ed76246cc7a7486b6b32843db9a9d81748a67c418539081741d64c4697ecb48aa173023a19e9d0c9f3dd719be8a08193e87444506a1eb078f67f141e897ff1f1f1f9ec5c7875fc121f05d6bf98f5bbeb992ba7cb3584cbce266f33c27f6e2b4a39c52864787de757488de005a956374dab4882ae9b44dc4c0644a3b7b80814757998433db4a9c1b01ceab4dc2996325ce2b00ce6b4cc2996b25cee700ce6b4dc239da4a9cbf009cd751e2ec2771963b0f7194a5b2b05128aa067c6d4e5e458a8d38cb42c0b700c0d7d38f0872f3f068bf754b9efc31327ccda8f03506f86e4845745f814678a8fe623696e5d1e16c4d85b30fc079a34938f3adc4d908e0bcc9249ca3adc4790b8be0bcd9249cb956e23c1be0bcc5249c63acc4f905c079ab4938f3acc4f92cc0799b4938475989733ec079bb493873acc47920c079874938b3adc4b91ce0bc937e46d762f1488510832f3547589d6c420532179438efa21ea6ad3a4412ed9ce2cf578967edaba74f031e7a3725d8be0cf65625de5b6b33dc0100ee3dd4a3956335da41713ca7b7af41a4102400f752a26c2751e6a5be3589cc0fef007e785f2ae0e5a71ede3754f01e04f0ee4fc5f22f581eae2c258dc0675161cc0111f8014a8cdde2608c4e0b499b38c852c3af814f3e6812cc3116c2fc09c07cc82498b916c2fc0cc07cd82498a32d84f91580f9884930b32d84f92180f9a8493009fbcfc9607e04603e66124cc2c60d32982f01988f9b04d3c68ae2cb00e61326c1ccb710e62f00e69326c11c6b21cc5f01cca71ab635c815e5ee1d4898624e0c11a1bc1954269fa644398c450fdf2a67ba91e18b7d6d4a408abc1395f7be0b903f4389bca540be524c2d70a73ab8c3f4ed6b766b0d22fcb30d19e1a3b78121f4be4d54282f02def71c25ca217522bcbb6fcb74d97e59ea44ef52e19d6b4507452d8bb53f05296cb28cea0800fb79ea69e27c48ac9a9ce2ddae9e0c5d5f2a749d41947f2115513eb102938d5e980e50be4889723b4dea99e8d6aaa468b750a15d0c22f84b9468077b5253f76595a36398f9f8f7f5e1b9706572123129ea33a950ef0350bfdcb00982ed85fef600e52bd4282789f9196be48455bebfd07ce60e58e0535bd5345e7772b47d25d3c6206d7d35153b338c72feaf961f2f16d19f5fb57986c6b100e16ba94038669b43f82840f83afd1e48eed823759c245470b7a2b5798cd1c300e21b264d0c241d4f4c86b31864326f9a849374002c19ce1301ceb74cc2493a3c9b0ce7ed00e7db26e1241d464386f32d80f31d937092ce6323c3f93bc0f92ef5e67c2a1f77a1f1556bdc3598e0d229292a2091b526b50440df4bcd24eaacd48fdcec4985ef6d50347adf9ce1d736f65dae019ef8412a50c2f917054e9d7b865c4e6ab9f3d2fa5414d8c9501e06bcf243fa3e75d885b698ad12e8268b45a0564951d39d63a923a2ceb2ac1644f13600e647a96824ae11cb7f5587bb7cd50a59eaa8eb1d1a45395e8e0ced9500edc7a918fb91f812146430c926024e00303f310926e1a8243298e301cc4f4d824938c6980c661e80f99949300947bf93c11c01607e6e124cc279196430770030bf3009a68d33d1c702985f9a0493708c3119ccc100e65726c124ecd62583d91bc0fcda249884f332c8600e0730bf310926610d880ce61000f3db54340f67c51c0d677b6b6673d086f41d25ce7456b739cedf006dc2e212d900ede300deef1b72aec6b6b07ce93010f57f3009266171890c660e80f9632aba31783aba56ccd2e0fb50a428dd24c3d713e0fb2975dd6ade71ef5c5864bd239bc71dbd0a80fe9c8aa15b59dbdcd0ad6300c25f5281306f9b43b82340f8abd9c521c24662b2e2d005a038f45baa0617467a2c61a71b795f25591fd0d1c0477f37673a8b8d6b79ec0450fe91aa5c3cde1658360f7c1d0780fe4909b4b726fdd44f5c59c8dcd1475c540ead9f92d5d26f05e9e65f26ad003bd6ca06b91e00e7df26e1ccb712e7ff40a4ffc7249ca4dbe090e1bc1ae0fcd7249ca4ab2291e13c11e0fc9f4938c75889f30380f33f9370e65989f37e809335320827e9f68b64380b00ce90493849f70b24c3590d70a699849374374b329c8b01ce469438797533b1fda7ddbd7cf90ed884d5cd022aa0a301d0c69440d51ada0db09d1dd982136b00bc2694f07ab144ebead16b22110ee9fa890aea6ba06ad9d444a884cd1f64505f05509b99089570582c19d49700d4e6264225cce1c9a01e00a0b630112ae1902f32a855006a4b13a1128eff2083ba1a406d652254c2114a64505702a8ad29a1e6b0ba5d73d173dfa638bf573bfff8dfae21bc0ab05c4c32e4cace61bc87699df8c42a2718f8646dfe549128d1aa3e2ac240c8a60a04de0ba302a10d6520f89b616ce3962665c09fdb52a28ccc756f802d9ec8f00d06f8da51e20b36119670602dd92088f740246f4f8936de58d0e8484ebabe12999fae07303b9804d3c69d8b0e00303b9a04d3c69d8bd602989d4c8269e368a7750066679360dab873d12a00b38b49306ddcb9a81cc0ec6a124c1bd7e8de15c0ec66124c1b772e9a0760763709a68d3b176d04307b9804d3c6d5bf0e06307b52c24c6741a72ad8b8b5ceaea0eede8b126f1b89d75d48cd5d90df955d46b9fa57132a700cf865ef54347ad4f5cb449a3d6c5cfd6b3fe0937da8c78fa8e90ab34503dc2a4f83b1bbae27ffa2cdd315fa005fdd2ed5be9af8762684954db2d125cf035fed4b89b66dccf4b39a0e5d4b2a7469c02bd329d1f184ca1d2616c9b38b18dc0d665ab8e7083e635f6efe3d40da2f157d4258c9d3fea581ba0194fd53d12794cbb6a585038a00be016664396e5771a5f058b71398d433bfa142fb1dc87206a662b432d6f15b777d101b57085908700e320967b695386b01cec126e1ccb112e78500e710937092eed04e86f3318033c3249ca3adc4f903c0399412e70056776181696c3de3a3e86a999ae551e8bcee6ed8384f807537cc2b4f4dedbd0315e4aea02835cca4d94963ad5c27b917f0d9e126e1ccb71227033847988473b49538af01917d7b9370e65a89f3748073a44938c75889f3638033d3249c7956e27c08e0cc320927e9283a329cb301ce5126e1ccb112672dc0996d12ce6c2b712e0138732871aa35c360db7c626b8611b68692ad19b60960cd4d5567315f68a0c62151e928c3f7655f28971c28114b0e945add595c0c808e36675e918de33df70475a3bc540c04538b4fbb8b602c15ed4bea21dbd7ac2d057e3926158b6034c076a464f0260278f994f0782bd842e77619e3f32f0bc57ccb2a218037cccd13ad9e36eee7da09001c6bee1c37c2821119da9b01da71e60c97cdb3728edb7090e5ec60124c1be7b86d0f608e3709a68d73dcfa01983b9a04d3c6396efd01cc9d4c8269e31cb79e00e6049360da58e7d90ec09c68124c1be7b8750330279904d3c6396edd01ccc926c1b4718e5b268039c5249836ce71cb0230a7366c939b2b8ab71b91ce1d9a182242792740392d15ad446352df4a4456137f8045e04d6f483f4cd9627e9ba850de0bfc70462afc70ec36d45af916f0c399f499cb4acd0e45f31d26cbd832a9d072b174341f48685f7f4e2b007396b91355094b9464e9653988e43b37e474abe842908d75f0ed8197ee62c67c21dd145542b46453542f015e5a60d29877d20529c8d2d35500e76c9370665b89f33480738e493873acc4f900c0596812ce5c2b717e0570ce4dc5a0adf8d9d2b630686b29c0ba6b2a5a8f121b63946d6553dcb500e63c9360dad814f7108039df2498360e463817c02c3209a68d83112e0630179804d3c6c108e700980b4d8269e36084ad00e66e26c1b4b121e42c0073779360da3818e16c00730f9360da3818e10c00734f9360da3818e14c007311254cbeee265f29815724ddd50cddeaa3bb62827d55473ec05c81dbcba4060ed2c1d7640d1c7b013fdcdb249ca4e54a329c9b00ce7d4cc2493a05950ce77500e762937092ae864086f365807389493849d7ea20c3f92bc0594c89b3a3c439daf9bf9aa9699a7c1d24db27f55d0e72f3a5a958402a7efbfa14e65d267212ab128037d0b6b6774b2382fc11f0d3659490fb48c8e5ce431c70a95ca1ab90a975b9a293818829a460c956e63a15802da1049bee015b2e462cd5083191314bb16a493656380f05784b1b72784dca766cdd4485f27790ce2ea744d94fa09cc5aac5127c7cfc5c9918e6c55f8f78eb62b64a00e77b6a2c73fe76ef4f778ea58e58c2ed20c8ca022d00e0159480235b888ede86467c0e02517da5398b4ed8986ace0428cb2851768e8352594a3ab6f32c2a8c5f028cfba6226faf3b6c36d17d8708fb8cc8762a380ae05d65ee7a0a844318c846258f0468cb53910060c5a6480240988e9225001b408ebe9aba857eae6c10518bf6cc129ec9a3bd7d45a1f6005c8539b3d9083321b2d96cb781a8bc261551392b1c9d4b44d388db4b64fb66248f008faca4eeb9e4c0a68a0f9732771d2efee8fe62653817e73c7197cf28225c1fae900ae61800733f7326091246ef4d54282f07d1bb2a1528b362b41dd9dd90fc1af0caea54b4c5e76e736df1fb028435a96826e6de384d941c6b851205ce2bcb447a59c8d689d6f72ae71e2fb657329b57d4cc07606bcd992668e320d85d00cab5a998569d9bfa4636323fac01f0d6a5a2fb37f18d4408736fb2059d3b81dc7bbd4938f3adc4f933f0ce0d26e124dd9a890ce71500e7fe26e124dd388c0ce77100e70126e11c6325ce7701ce8d26e1245dda8c0ce73d00e78126e124dd12940ce74c80f320937092ee614986733f80f3609370924e1d20c3b937c0b92915430df82cf36d6767eae900df21260d821d45592327c3b90cd4820e350927e92c5f329c27039c87998433c74a9c77019c9b4dc2996b25cef700cec34dc239da4a9c7f009c4750e26c2e0494cadd58dc31ef64b8c8865b370539f79194b886b0baede8d1a386dc4902abc5dfbc0ba356889c260073b38a04b5140c239c41053b1bc03e2a35035ab353dfd64e36beed3b80efe886ec254f596d9c2cdaff0b52c96352d1b5cbfb256730ded7c87b245788cedd2aab7b208f07de78ac39c3ab6d5c6dab0278e3164a945d181f16c8b39312a6e64f60238aaa2d8cd6cd814f1e67ee08601bd725be14a03d3e152b752436e020c7ca45cc9e06304f3009a68de3379e03304f3409a68d8b98dd05609e64124c1b17317b0ac03cd92498362e62760380798a49306d5cc4ec4600f3549360da383bf23a00f3349360dab888d9f500e6e926c1b4b162f90280798649306d5cc6f94500f34cb367ef12d689c85a378f018d2067513782c46fddcc13c3b409b3a3265420bf0520cfa65f97231aa4db9ac91b3a2ad8cea20ba332e6701942c06483651a8184e01c4ac039ccbb444fa9684b2ad5acba394788591d6ec87327606dbbdb3ddc00bc7cab3913606cacf38f02fe7cae4963e9c6529613c8928701c033cf330967be9538db009ce79b8473b49538ef0491fd029370926ee64486f31280f34293708eb112e70f00e74526e124dd049c0ce71b00e7c526e1245d05890ce72280f31293709236a890e13c1ce0bcd4249ca4db8c91e12c03382fa3c4c94fd4e252f60d646807305d6e92d78da5ec9623f3bacea0787e854938f3adc4f92ff0ce2b4dc239da4a9c57019c57998433d74a9c27009c579b84738c9538df0738af3109679e9538ef0338af3509e7282b71ce0238af330927e9f825329c5500e7f526e124ddd3920ce73e00e70da918dac0677094ca4def78eda79aa57c3153b2ceb416a0107f23254cb525bdead1e41c6a191fcce0dd6ac43b1b93b08f926c8acc5c80f5264aac833d5897b2bad30e129fa040889aac56ff39407d732a2674e5b36d6dadce27408a7a0b25c2fe1e6f75a7b7f2f14b850e931a91b29608a0db5a827013f0d25b53313f89675a7ce39cc832a870b8589188f2cbc41c2677f882bdd311db01b4b7a502adf2de6a3924a7844d9751dfebb9291aef4436abee0480f67673667ada3823a404a0bcc3dc098a84e347c94a00ef80eceb4e4ab46a19df511e5f4d41de4f066f12807797d9639b09a7db908d6d3e1c44fbbb1b32058ddedf8070b0e2262a948f0394f750a2ecc1dc7d37a20b4c5c805abd615ab83520f2847dbef90f88faf7a6a25d0a6e18a1cb7eecae45bd0e70de47897320f30e0e87eb8ae8077ecf902fa76cf3d1e15498d78264e0fe5414a4608aaa875b247c960f115fcedcb1f8a429ec162ab44f00b40f9833b2dec62963852031783015edaaf1bdd43bf783b0ed9facb9fa7ce0a10fa5a2b4aad2589e55957856d0d9f65aa9a601bc0f9bb42223693f2a19cedd00ce474cc249daf14786731dc0f9a8493849bba5c9705e06703e66124ed2115264389f02381f370927e9f83d329c3f029c4f983468622ce55259648326fa029c4f9a8433df4a9c4d01cea74cc249ba743519ce5b5904e7d326e1245d589d0ce73900e73326e11c6325ce2f01ce674dc2996725cee701cee74cc249ba650a19ce0500e7f326e1245d53940ce74100e70b26e124dd81860ce70a80f3454a9c9185ff1ba0779eac16f42dc0f7522a8636f00f2f179ea86457c847ec6b830f01782fa7a20d1e8fcab0db6d9223a64a741b933612ef1b22c23a06d47d5ea1c4da814586db54829ef614751493f5bbb706005f6df8f5ee54e1c7bee1897b0390af9902d2c6719e3300c8d74d014938dc8b0ce4b100e41ba680246cfe2503590a40be690a48c271c76420df0420df320524e1e01832902701906f9b0292b04a4806f25300f21d5340128e7b2703f90900f9ae292009076b9181fc0b807ccf149084abce9381fc09807cdf9cf942366e7a321fa0fc2015b3dc131b8b39daca5db7d200cc0f4d8269e3ae5b1d01cc8f4c8269e30adc7fb308cc8f4d8269e31ccbff00cc4f4c82696306f42780f9a949306ddc75eb2f00f3339360dab8ebd66f00e6e726c1b471d7ad3f00cc2f4c8269e3ae5b5d40d1e84b9360da3885aa2b80f91575dff734b1920757719604ca67fbf23db1f96b64f0c8a6f5b705d1fa6b73e69d13e6dd9ba8503e08fcf01b4a947d9877e58ec4a79b12e6e364d34d2b818f7e4b097600f34e9876e7a04796ede102f98082d8e9a88d85a5cdc07bbf4be5027f2e503e2b9da7a953b52d9df66eb5f731c0fabd3953a56d2c810e05c9c00fe64ee827444b96c2ae075efa632a233f5fc66fa15875ae967917454bd91214642582af01d69f28b10ef160c557a1dd76b77bbc12c0fe39154360477b12099bd7a4b90da4adbf98b90c0561ba4ae693e7019ffc3515f5fcc4fa394759d968723480f99b49306d6c34d90260fe6e124c1bbb8d0f0630ff3009a68dddc68700987f9a04d3c66ee30301ccbf4c826963b7f14100e6df26c1b4b1db780380f98f49306dec36de1fc0fcd7249836b684560398ff3309a68d8d763500e67f26ad76449a0591cdf35d0270b2c606e1ccb612e7f10067c8249c3956e2bc1ee04c330967ae95385f07381b99849374d42719cedf00cec69438d512137c76c65ad0b99192d9e864f8a6b208be2694f83218b6f9d3ffa5ee8c6b80b736a5c4dd99f1bdda8be5267b5c5405e31b3e5509c4656c7f31bac9056e9fd736015edb8c12635f16d9bbc01dcce0eeab354978629918363689f145a1b9a7163b02787a5ac26cde516b2180db9c126eb0bd8a086bf464e3f2ae05685b5047ff5879bfb29434153d8b0ae31720156d4989315d83d1dfae4584cdcb642bd41c09f0b6a2c4db13a4aeea385320555becf0b474aa28a756599da63603485b9b9ba612762093a5a99f8034b50d25da7e02adeb9ff34459b45496004a84283582749508009e342c73fe76c54f778ea58ed8120b7db72500dcd6ecd496b0cf9e2cb5bd14240ded525126c0c6924e110902f146d07cff26128c9301c6f6941855fb3eac12a8fa55a4c6657715a00788f21d2861f6d1c08c9fc2da0b760600db9112acdaae9c3794ac66dbd276e51703849d2811fa1b7b6fe308a79d01cace9428fbfb40399f550a2135acd0f94bb55155d3664beba9b2a529205bea4289b8078b6e5fad140d7c2b63faac8dfdf8af00a05d2981f245b10b58297377792f745e2b123525de8a6a5fc6d31144f56e94d8921f0a4ed85442d69e7f35f0c6eea9e8cc4b7c9f22c2c84db65e7c0780b3874938f3adc4f92388f43d4dc249baf20819cecb00ce5e26e1ccb512e71100676f93708eb112e79b00671f9370e65989f36e80733b9370920ebf25c33905e0ec6b12ce1c2b71ae0638d34dc2996d25cebd00ce7ea96896833d9e7c3cc97ce6b67ddadbb2b90c20ec4f8990afa2cc5b8460ffcf3ca1046ff258e7b9635f7fd0e700e48054b46f62113b65990ed982d4ff80eae4c0864419ddec66e3fccd7d01ca41a94a21dde6622e68bd4c1d53d071f11315c2c740c41e4c89b03340581a5ed94eddb6bdffe71980710825c6ba4369f4ed9833e40b295bd9663815da5e006d466ad1fa19a54488966c94d24500edd054a49fd9db5cc76f0640388c12616433d10698e94156aeec0ff00d4f0dbe5c4fa1c8667c4d40016804253e35be28b16107d9560e3c3817f8e2f626c1b4b1687e1e8039d22498362ead722a809969124c1b9756390dc0cc3209a68d4bab9c0c608e3209a68d4bab9c0260669b04d3c621598702983926c1b4716995cd0066ae49306d5c5cf27c0073b449306d5c5cf20200338f12a61acaeaa7479cb0ac49d6eb380c5429c7980694b0bc49067404009a6f1a501bfbc50702a0634d034a98bb93011d02808e330d2861ad880c680600ba836940096b4664408702a0e32981a6b3a0b37d091300b266e4dd01de1d29f1f663d87a4bb3440995efd1e1dd9bc3bb2218619645360ee90e0078274ac0feb63e236ca5df4485f27b80720225ca6cd457bd6b83cd1142568b4e39be88953bd17adb5d2fec461004132983408d191915aec49630b8249bddabdc3dce22182751620cb6c914612241b6c9d43bc0432753a2f53f038eb0c58aacf8950e704e310967be95385b019c534dc249bac33119cedb413a3acd249cb956e2bc10e09c6e12ce3156e2fc06e09c6112ce3c2b71be0270ce340927e93a756438f7043867998433c74a9c87009c3b9b8493b4a7940ce74a8073174a9c6a9fcd6c4f3dc9e691c915005e01253cb58e129fd93195f1b5bc2bd95c562a6bebeeea49a542a06a2089acf25dcd6c9e5e3808209e9d8ae88e45f6ba3bced8d84aba00d48be698849374041419ce4a80b3d0249ca4b3dbc9709e0e70ce350927e9422b64381f013877350927e932406438bf0138e79954f21c6be5a09dde00e77c9370e65b8933047016998493747b29329c37b108ce0526e124ddfc8c0ce75900e74293708eb112e7a700e76e26e1ccb312e79300e7ee26e124ddd6940ce75c80730f937092eec34986737f80734f9370924e4e24c3b914e05c44897328f3aecccd1bee4ac452d235613b23cbb3c08fc14f4d72feaa12832049c73265a51101ff13944cf7a204de85c59e8c135d67220349b6acd50400726f534012767a9081dc0980dcc7149084a39ac9400e0469e9625340dab8625d77007289292009a7319081dc0240169b029270820d19c84c0072a9292009cb9b6420c782cc6699292009a7cd92813c13786489292009170e2203b923f0c8525340128e812703b90300b99c1264168bae4ad6326c9d447cb9ca29ce13ab1d7dd688336e6a8a2a96dda82a961f02fc2b28f1ab551e12eddf24ac1391f56ece0330579a0493b0a64e06b308c02c3309a68dfdee5301cc7d4d824958632783391dc05c65124cc23a1219cc590066b94930096bee6430770630579b0493b0ae4406731700b3c2249884357832980500e61a936012d699c860ce06302b4d8249589327833907c0dc8f1226be5ffb74e77799c058c2f846b95cb0fdfbb5efc12260ab28c1badbe616380f2c137337e07a378bd92a0191af88b3ccf9db153add39963a4f95d061255b05a719c05a4d89d5dfc63c362e58bd0844fd1a4a94bd04ca4ae0975344bac91f2e11e7335895687de2b3910ad972e75f356db4275b76a50bf0cf5a4aa8c13642212c44916d84722f40bb3615f93ed6e81c1df5c758b98fc27810f9d79904d3c67d14260298eb4d826963b6940f606e3009a68dfb288c0330f73709a68dfb288c06300f3009a68dfb28e401981b4d8269e33e0aa300cc034d8269e33e0ad900e64126c1b4711f854900e6c19430d359d0458109b324b2e690c300de4d94783bb148f3dd5ad13cc7570a592a9aed52b4c6e7262a88252c02f190866c538a5ef897b0bc4986f269e08f8752a2ec1738ba8fa2ac1d9145f80f00e0c34c076c638afa2800bcd974c084057f32c04f02c0879b0e98b0324006f86e00f808d301dbb813c3fd00f0919480d5745ad8678a75f491f79492e1ec078a5f47a5a2cba4aebf26d26962e3def12b80a71e4d89b603f0d44a8f5fdabc77775b00f09854540d126b0bb0b1c16f2488e6c752a254234d92e919251c2a4e16c9b702b05b4c054bd8764506f60c00f63853c112260564602703b0c79b0a96b0f24a063617803dc154b084457e32b05900ec89a682b5b184ba1d007b92a96009c7a490813d09803dd954b08423a7c8c01e09c09e622a581bc7f7ed0ec09e6a2a58c23e0332b0bb01b0a7a5ba8125f13dec084bb2647bd8dd07da074ea744db5ea21d2dfb5fcb1d1229eb7925f3cca380679e614ef38a8d032de6009467a6a2513af139ce362e66b01c44ecb34cc249ba491019ce5300ceb34dc249ba851519ce7b00ce734cc249ba9b2219cecf00cead26e124ddeb930ce7df00e7b994387b6b7026b6a3376159936c6ad95500eb799458e3cd7bf6f645d9585cfa19c03cdf2498364e267b1bc0bcc02498364e267b1fc0bcd02498364e267b11c0bcc82498364e267b03c0bcd82498364e267b16c0bcc42498368e2d7901c0bcd42498364e267b18c0bccc2498364e267b46c06cd6c4237c7a1de15398bb24865b4f511bef8e643358a9a8c17010cb9cf302d16551c39638381639fffc85c0dece3fddf590d85d791a5bcf2ac5552eaf44c85eeddce59a55b3ac61ce2397738768211d2243b4ab4e7298f39ad53c562abebe81cd67eec6c285ce6fb5ba4fad409211eaecbc31d7b956cbf8d060fe850a479395ac4a581cbdf17046a8b9e054cad64a021c6086d4752d7317a19d255b74cb1c9b8b651d2f43e09e2babd319a136e04c4d5b9a25ba7aaa85566da4f5fc0b539ddf5551e19011e27bc914b052d119542aec2a125d425cf30c31fa71a173ce4388df75b5e5faf2e54de689efae166e1012cf2aab670b62c5ce53c5e25814d62d73b8f358284fc8e55d5323c39d5223e532bcabe599ba1e5f260ff7d8d2aee0811bd2c7f6f27af3d87816b9918cbfbf5c2c5b542aa4ce8a6b697cfb70ef6f1d23543247f0b0d896edbf9287bb0c76e1a6dd42ad9cbf163821ef0ae74e5dc5dcb57ad694a6b126ff0f6ff0363e82470400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/7e6af46cdc9943f4cb7528d8eb8790b0.asset.meta b/Assets/SerializedUdonPrograms/7e6af46cdc9943f4cb7528d8eb8790b0.asset.meta new file mode 100644 index 0000000..cf1ab6e --- /dev/null +++ b/Assets/SerializedUdonPrograms/7e6af46cdc9943f4cb7528d8eb8790b0.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e7a99b34bc128914cba5e7a3fae26f98 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/7f85fe3ea0b1c734ebff43a1a7d05f03.asset b/Assets/SerializedUdonPrograms/7f85fe3ea0b1c734ebff43a1a7d05f03.asset new file mode 100644 index 0000000..e22db40 --- /dev/null +++ b/Assets/SerializedUdonPrograms/7f85fe3ea0b1c734ebff43a1a7d05f03.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 7f85fe3ea0b1c734ebff43a1a7d05f03 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e780e0147728c183460952da129c162b042ad0424802a4848446b0babb1b75776fa9bbbbf757f75277a7feeecccee49edb9be7eef636cf6586f71f3e64b3f6cc33df79c69f996d94c99c9fd070e7d742368f4d6223d90256c22a5985f3d724e7b8daf9e79ea9eb735995735ce1fc2e72ee0d67e971dee43f8343dd9cdf339cb36a56e3bc59cb8a9d6399b83f9f953a7fcf70de2d75cef8d5e5ceff52e7a95013e7a5056c329bc366b3aea1ce71442c142f55cb6b211eaf5073e7f744b6c1b95b2a94e281648a5b5d9d5ff39d3bd5e2de6a4769f5dc22b6b788d66ae75eb1f34e152b77642e13129b9fb203137f30f7d0551ebbc96317e77f0bf97763f97773f9377c3e4d1ebb27f87c0ff05e0bf0372774718cf77bbac790a3356bea1c5f02e7fcdd6fe473bd5c798d56c690b5bd3cf691c77429f3e504f46f268f7de3c437968c7e405622cc9acbe30079ec2ff57d25c9f007b98c42e703799ce578a0cf0010760b709f5f1b1820ee2a1d77f4a4e38e6e3a36da24d36f8b7c7eb03c0e91c70c29db79a6e3e5f2da5079ec1d47af61ee7b6c0c0bdbac1366e335f27cb83c8e90c79152b79da5aeaf82f3a0baa834cd9432779261bca6b9ae9ee7f7ff27cfb3e431db935e39f2b9d7e5796e82fa24627f4aa709328c37c0b9c3b1c9d218b254ba1778d2bd40be7b8acbb1c95d9ef800fbd3cacd93f2de4c221e133df198e8ea929611f95c5c1d94fc5152ce2429f72d70cee59ee1336e4de47b9be5793e8b5fb6754de0de58574e73c57a9c1b4ed34eeef5a62a9f2b5b1e13474f95b6933d693b59ca2d977255fc7770cf438a735f2087bfffb647ee148fdc2952ae2a237213d453c54be5df89f258c0eaf271ce29f29aca77136498535964193055dedf31fc6e17f56ea2dc62a5d1244f5af796e14e8b2353bd3f591e5b24f8bc7a664a009d1593960986d9521ee3c529968c56ae2d34ffc1630be3e2c89ceef26d5e037470e4b438409ecf90c75de47157c97f178f1da8fbb1ec209e2e33a52e0ca481a34bcb76f27c963cce8ed4c5694d46eaf44efde9149a2e65be0bcef97186bcfe1e38e7bace75c369f9989439571e77f3e83c8f4e67a7152cde6bd31ad84622efc5b2af42377eadb25cd9ad0ae5f5051edda686f56e3e19bcabf448243fec2e59ccf4309e2975506cf7f03cf73e38e7c75dc3e189bf9d775b2bdbea09aef3773f00e7fcfec20475dd8b45db2c97331b843d5b862dcbffd62a3d17b1e8bca77b971f67816bb3a43c69936c318baec7d4733c6e1f82737e7fcf04e3b6b7463f27dc361362bcbb0f8b2c7f2687eda199acb7d812a9cf1c1699b7643e16fd02f94ea85c5e5bea9eb755ba14c977e6022e735dfdb653f5e932795ccef4f56c09e020f3a3d35bac0bbbb76a9f14c708ab443eb3c213efc2b09c56dda4eeaa1c5375d950e4597ead4c1e57cba36a9b57869fcd553c15a30aa9db6e2ca26c66abc0757e9c27ef7f04cef973fb8665777e4a5edbcfa3ab2e3dab3c71d79501b1ecacda7db6db62795ee3b26d7b9f476e118b6db7b5ae9c510fc9f3b5ae9c764d7cca59e7cac957f974837bde4ee9b35e1e37cae3fe92e37c165196335987860ac3e18967d435feecc71ebef1748bc5f12057cfbaf6fdc1f278883c1600d95da41e0bc26955d7e63b10dce3e713407c61fc62e972a83cb689139faee0397e3c2c40fc63dd6b2a8f47cab82d64917d9e85aead74e81543d6514c6ba71d557ff968f77e7b651fc78038f130760fb3aeb3a563e5bd3d40bca55d8560397d84bcb657f85a48d693ec384ffa7ce2b97f3c90a1bb7f02d04177ff44797d8bab7b4715af933c71d9e8d1754f1651ceb093a3e32a9e81617fea232da5bd861679d272914c972f62c83a559f969db6caf3d33c6979ba272d176bd252f6eb427b837493754e681f4dfa2e011c941e672269a9ee9f05e4eaee9f0d74d0dddf1499969d55dbec1c242da1fe302dcf8d8e6b681f4fd89f2590966aeced3c79d4b57b2f90c7a152eee709c8bd501ef78d21b7a7476e2c7b51722f96c78b62c8bd04d13799f094adabb19aa52cd2d6f9b963b75d5e8b21eb52a6b5f5ae6adce0321669eb6a0c4fd97a118bb6f52be4bd65e1f4172cf8b562166deba0ad25e4f17b578267a0adaafb5701b9bafb57031d74f7af6111b6de6d82bc7e2dd3db3ad41fdafa75d1710d157bc256f578acb4bcdec359f12d6591fd9c52377dba79db3f352c76dd78832b3f5fd9c28d52de7229ff4b70ce8f2b3ce1ae70c3ed2ec7bf7a7492725acbebc3ddebddd51cc34d4cdbdeea5ee879ee6616d99ebad5c3ff368fad9485edad2e2eb7807b306efbb2c836891c230cad0269b52fb8a66b73c5e37abb3cdee1e1b752cafb0a9cf3e7ee0aeb3f5ab5f9ef94c743c3f7da4ff7a46f6ba0c7dd7a5b11ba8234f3dd465271be274e9cfd9449e52cb24c2a77eda067acf1d907e43327c47846d9d5c3f2f8a094bf9a45f65f541fe911795ee1b92ffb45a2cc5665753ad043c9e6ef7c9d40fc1f9547390e11aa94ef7e03ce9db8f5ba5e3ef7b81b66ce01eeb1d7667954f79ff0c87d32ace7d843107df8fb35c83da82bc53dd9e70dad6191e5c71a37debd955ecaae617da093abfa9a4fcb63a994b71f8b1c63547dd1586363f1c28a11af50358b1c8fa896f79f91e755f2feb7f2bcd6f37cad7cfe59795ee3797e9de7f975f2f9e7e4f9dac8e7d9f3400e3f7f211cb790ea73bf08aead95d75e0af3e923dbb3a1f59161b39759645f51f50737c8e7be03ef4106eafef7f27c63a4dcd0fef2fc0770ce8f0778e4aa3af759cf7d25f7408fbe6a8e57cdfbbd168ee3d837c13b80277b3552664c9b7e41ca3848bef32338776c3a3d2f860cf5aeec6f870e91327e02e75c861cff4b3f0497153ad4c3ef60709d1f0f93f77f06e75c76acf6df8bf2d9c33d713bdc7db76fbb04de557dba233d713b52ca90f3087d17c790a5e662dff0a4a1b2592eef684dba1e0dd2939f1f2575f8059c731de4397b93e96dfb08cffbbf46bedf9fc9e7e57c257bdba3db312c725c4dd9a6aa8b3536c9def7e87e6cf8993afddef1e877ac47efe364b8bf013dd4757e3c9e45d677aabfafc6b44ff0dc5775ae6ede3e561e692f8f1fb2a4cb58f6119095c8b890aa433e0e10a692f14900191de4714b00199f025989c4bda33c7e1620cccf81ac44c2546dfe2f0284f92590954898bcfdecd8606622be0bdfbbcff657e3741fbac7901aa3fa119c3b797ae087eef38354b9a4e6477ff2c8f9d123ef1416d9f650ed8c586d8f6fe2c4f767f7bd016a8c7f8babe320d5fe51e5972c9762fad5c40b4bd5b327b1c836da4932ccadaedcc16afe42962dec777954ed060a0edf79743c193cff070bf7d9e1b37fca674f95f77f07e74aaf162c42c7d0691e9b38cd8dfbe05f5cbd3314f7bf10bd4ef7a1d7991ebde4385ee81220e36f0fdb4be4f1521639077c29016318977f90b8fc1b272e6700c667b82c874c70f51ba2fa32ffc9fb4c1357684797d4431c55bbfa2c1669e367b9ba0d9f1ef95cddf367c74857f5ac4ad7733c2cce894ed7ba743cd7636fe7ba7a0c2d71e3374cfadb8542885e9b7ce8758147af0b80ed78ec2dd428d2ae429779ecedb2fa4b0b5d5c428df57109358913978b808c8b5c96c3e458d270596e87d222ed2d22aed0deea214f85d4b8878aeb97615903274bbd0e91cf4affd850f3689b0b9d8dbcafcbb7f0bd164c9b6f432de3d82a4c8b4d1e5b7d0f9c3b7c47b473f519a1e62e95ef8892297d4a28f27348cd012a069f87650d78c9734fc5fd3c1f7c303b3b1fc850f3119dc1b5ede4f142a07f6779ad2db807c6a0ebeeabbed563c87dd5a61e8adcefe08993ba2edb86a18b3d71ba9845e71dd5a653ede04f0157d92e12bef8bc3da4d2ec63d71e322778de8d9786aacfa2c654baf9b797507716d91e4cb40c8a35b6d38369db5edc9d895fcfcaf084f5759cb0543a5cce22f3d1e5aedc6c55b6293fa32b34b6d30bdcd3a57def38b6b13d621bd29f3f7495c736e47c4ae84a601bcdc1bbea5a7ae43da87b48cefbe8f266a8afb4213516f18964f1a1bcaffcfd15639d1df6f7847d35085bcef7883ea47cafff528f7dc649b790f4e9090dc4658506c9e360a6ed6bc42ce3e2d98ddf31d702a9cb351e3bbbc6659bf390ab478e9c4bacf3719a1087c3508ffc6ba5fcade09cdfd7f81b8586c9e3c8481911e339ca17e9baf0fb756322aa0c1811be374e8eaf858680f7f851f9564c60f17d4f74d72aa59ceb3dfcae77f9f16079f8796a9e5bf1ab88c34f3d7f03784e8575238bca5fa19bc0b51bc1357ebc59eaf6073877741b758447ee2df2b93f41d8fc78abbcfe1738e7ef295bbf4dde7fc523ef76a0d36d324cb99e2294e90963330b8f21f139bfc91e0e9b81ac5bc0352503cea7568223bffeb74c83f19161c64b036dbadcc122c7a3d59cdd9d9ef4bfd38d6fbe4cff7c6ff9bf364efa2bb98ad75d2c72ac5ffa6286b2813c304794707ceef6c4e76e4fb8d92cee18772847de03769970fe51f190e56be85e19de3fe09c1fc17c6248e5e5fbc0b57be4f17ef9febf1e1b7d003cfb0078961fd5dcdc1be0dc49bbb1e33db2d57b0fc9e7ff03e7fca8d6a53cecdee75d85883cfa08d0e161708d1f1f95ef84c0b9a3c39809aefd8ced8484a5da7dbf837318e6e3526e2370cee53ee579fe09f95c6370ae1843394d22e544e9f52488e393320dee8c63eb6a8e34139cf338bde6c67db41ab76e9e98bc98edb47c791c2daf4b1d434fb1c8f6a31abbd1d5c53af9b24d12527df0a73de9f2b47cee55ffba87e43ab9d0332cb2ffff8c9b06e3141f55560e8fc35bc91b2b8fca9ffb5999c669e09c1f9f6311792aa4e6bf54de7a9e4594ffe2dcd16b87428f9c173c725ef0a4fb8b32fca69ef75e04f1e2f79bb9e9b1c34a4f7ce2c43bf25a5a488c0f4c67a5ac88ad61992283f0d641a2cb9ad59bf1173473d14d4569c0f8ca661e6c0ddbe0bc5aaa5b55bc40ac59ae715a9c39da55c5dd451f59853e49fc2e729e2813429b378a0ae2eea820b872e5cebf52b024badab93e4daca8e68ba2cb9c3b23d94ce7c8df5acab2d922e75fa494854eb0e5acd6392b747eaf11f2963a6a473f192f4a7cf9b4f79d798e4c7775f76ae78a02bac6392f171ace17bfd70a4d4b85f6339c6b3562ad79055bc1263ac7f522b4e8b857397febc22c94c8f43aea177963d7dda5e42a99263bb1e1da670a5bfcbf1469881411c384cd653e6c92296ab2e3a252e2ff18ba850caf04664819d9025928e25a0ecb14f5c4bc2882fee3181d43bd7dbbbcf39d5e55acb8e8c9f0e4ee2962104ee193364c6fd27bfde1e9699151cb6599a20aea15276ab1c072791962b4ca4f14d2d29a647145bdf8433afc6208787e0af1bbcf9589e7fc27405351f9452680e83a143aa5da5c50792e10ca970bd5bc91992c542e7314e0fb8a1439776a4474dcd27296237a9278aa5654be1b9c73be33c83a1695c2595c9d662291a2abe07811c592a9912e9944abb5b0417209b63149ec846a5e178b7042658a7655b718e68c85251a5c4d64ab4b65b8f1dffdf8c979271ebde5f5977f5e503ef3b35fefbb7d4e45e1a95f6d49d3a7534b914ec9848ea554635d4ab54c75868a5f83c44aa75675f10aa713ffd1336c8dd87a3c1d30824d74045ba5dad6f9bd4a21a5c879d63f433e2534cc5b28e9016e8718617c153084691a84591c615b8d562cad85472bae1022b9a92e715a374c759d9c71f379adae1e0469a871b78f59dbfa35ed663a7a62f27029293dd58b9cef5460bb3af78a9ce74b4593945f9feb482c72c2e6f20a4408e19e67e41bb1c9f219bf115eb25aaa1d05d501a04f1c54338c78730df12c6eaf9d346620ca386f66688f6786165836eb1c349bb5c42477092ab91526b96b50c9ad31c9dd824a6ea3cb36626e7b714ab24d78f045fd35d17977a51399b5a2475debbcaf1bac899d5dba279c5d7a88ec92ce744348fe34c2b2c976bab4e3177bea94f4265d0f3ce9da62827b0514dc0eb3b6de41adadbd4e322fb9b74f44e566b8e00e98ca7d82aadc11a39c1e9072274c70df80823b6382fb0514dc452798174d7c7e3e6881df55279c97d50358748bf93fe7274a786b5c78374cf3811acd4f59d6c897e6dd31db1b14d4f67a6092070795dc53233953142887b2d416fbfa71fa6962dbd15236c769f1edcbdc0156156ea5185ce51aa981da79ce71b9d0825fe75ac41fdf8f5d8164d4f101dd69512e4e6189cf36d0c782cf7d341215199fa3ce10de170b9cebeebcc21491026522a4915a6d7808d8f38ac52cc67754ad15a99d8674f68789d0cd628355c8bdb09266b8a6a47953578cc528697a63597644d02cbbbd4e32cfb22335b69ac56d954fd1b514e5795438c3f070fae88a0651716f6cd0a2c1ed167279cbc5d4992b6f36e39b02af13a6baca31e0b5d2700a9d67aa9c304aa59107290cb85b456fef7803737ff4d9215b64879d12c80e94b1c23240bace9278e38a0fec468df6f2ba739ed35d9cc496886cb89fb8cc29b9a95b261e2d631bc5c8ae3b0be6a7e9d657a70def9670ef92b8cd958eb8e07e98e0bc8082fb63797c54d03c3e4027999736dc0322680b6b20a6f6e8a06a0fc24ad4319a12f5ef90bf127530267cac46f87d8dfc09cfd009e7c63a2e111b8961d54330c13be8f2184f9a49622832ddf95fe9bcc107be8a44ee4f179561b8344877f27a99f317afb08783e72b9d27dc59673f7a0ec58c627c50a31886a5db8e9a74fbc567ba0dc784efa4113ebdb13fe123b0b4db599776bcace7f5066f96ac94755b6469982ee6ffd385cb47ad18522b1129572dd2359dedefd430073ac71ae7e974510f948b7be9628ffc2a51d6fa49d39198fe1374fab704facf051afa0931132bb70a34e556c867b995a513ce1b3e1319d2f099c49269f86463d826ebb0f186de14a7f9c25baeb5e2f9f9c2004aebdaca25f55441e668f4ca14031e15ac211b64bcb7c0a76cabc5dfe1260a0f3b3c0d1ba4e1c5fb13de8697fad137bca632def0ca61f11b5ef5a13dd6c0cac50ad5699a4235e4a750cdc3f2c2742c2fcc482a2f8cd2d99c180a5bd3a03687e7a8794236cf79c11bfc7cbfe5c6dedebf18afcb4bc0b2ea4bc76162bd60b5f8068a4bae9a17a67c666419f8d8890b5f64097d9ed855e489546a8ee58b7cacd69ea9a9b537a7f9abb547eb4c568c855635a8c9bade2fa930db593ab31583b6f909247e7dead947f851568b42b54416aa6ed1dd472c1ead12d566a9739d17bcf0fe30b1e093b797a60adeab05791ebf22d1efc58c7cb630f254c71333f431580530475301f86a558fc5b2d05c4d16fadb67161a87a9bd5b50b577c0d49ea751fb80a6fed41e8f099faf113eb3993fe13bea84f382997bcc04e921ee8409e63b2c473537f9c880ea27147b7a8acb445f41f5ff4ac4950dceef72e75ab110912e7c62d574bf1f2d77c6d82ed4b06de793ed040cc1ee01d916e80473f3dc2311c131a6c026ea04f3f6d79e0c697ff1bd99fdb7bf2661d81769b05fec13fb642c9b2f0e9acda76092f70e2a792a26799fa092a761929704953c5d279927e2524d22728f173f893803135ea4115ee853f82e58c65ca62b9b0632ded10f3752ddee53785ca3882d1752aa9cbfd7ca3ab724627c848f7994c94eb39f7cbe2ba667b14e4f77090e776ae26d8a223186c6439cc356f90a752686be4483fe049fe86761c24b35c2bff0297c36c66bb98e57b738e95a227c61c257b39dab7e38cec1b459a1d3869f86d3cd4f387331a42b3548cf6fe90fe96e5824ca7491e0c3362ebe710eb2d962c0af482e1f5a2baa71ff18e7611aecabd380976c33eb1a0673936c16ccc790aed2207dcd27d242ac442e0f5a222fc0d45ead2b345bf9537b21a6764550b577d749e6ad8e4a86b43af8288dff56c71e5838fb61e1542515ce9eba7038a9eaa0a4f6c212b84693c0135afb4be04598f05a8df0037c0a5f8c095fab11fe984fe17b63c2d76984f76ae34ff83e98f0f51ae1253e852fc1846fd008dfe453f8524cf8468df0ab7d0a2fc28c7cffa046be0c53fb008dda9db6f3a77631a6f68141d52ed148ce146e7fa95cbee3f57ef2b7c281effc9c986331dfa359b774275ef8d89052a92e5d780d7d884e251f55f972cc9a0ed558d3169f99600526fc308df0c53e4d752526fc708df0637c0a2fc3841fa111deaead3fe1fb62897964c0c45c8509e6db5947b505870bebac14792c5d7c359daf8cad901f692f16cb30ab450bb54a3ca1069cd4c4355f6a9d2eadb74ada74b963ed239dab7eb42ec7b43e5aa7359f79e583b8e176b3db9574bb213abfc2743658b6ba07fbd26b356603c7686c60b34f03abc0227d6c401ba8d408ce141ed065a4e52ce6475a2806eff962dfe5c25256fbf63a8d5d261f9770997cbc2893b97b079dae58f9bd4697dcbc6d7d0243dad67cb7ea965c655f6debfd74e1709b3d4963b3793ecbad2a4cf8c91ae17bf8145e8d093f4523fc089fc26b74c279b386ef151da859538ba97d9a46ede77caabd1653fbf4a06aafc3d43e43a376a776fed45e8f956d67ea0a749e36890c8aa48b4c592b2a285ec5cc65ee025ed757aac8b95a22bca8568af3b9226bf291c565a20270772c5822063f5688b9c42ae7aaf2badac0dc955de9a239e6eedf922e8a8212e98bb74a5ca9164f958270f4154e99ac386115e57774730396446769926880cf24da8825d1d901ab9ffd31c19b7469cfbd190a9d933511e9e227bc03b082f51cac60e5db1afb1fb438108bd779ba78b973356aa4d4b5dfbd7d368b0ec2d2ff7c5dc9e233fd0fc6845fa011dea4bd3fe1876069722196261725952687eac2e185dec58918718c79bec330c19704147c3866459706cc764760822f0b28f8489d609ef697b368df4e2ec08f6fe75198155ea1b1c2e11dfc59e1d198f02b35c267fa147e0c26fc2a8df0353e851f8be59fabb1fc734d52f9e738cc68aed59569dc036e89f38f8fca958bd25ad5b1654e8dcfefac115d455e1ffab1b0e3312daed369d1b14e8b2ce737af79f9dc94eb1d94bc0e27603a5cafd3a183d421d7f95f2c3a43fc9df5ceefe4353811d3e0069d06cd415af03544bc65e427b49330f3bd5163bee33bfa33df9331f3bd0933df9b9332df53b0a2e9164dd1d4d867d1742a46e8560da1ad3e099d8609bf4d23bc5b277fc24fc7846fd6a5ad4fe16760697b3b96b6772495b66762d9e1ce5845534e3d174d67615adc15bb68caaec7a2e96c4c87bb63154d79f558346dc234b8275ed1b4bb08cfdf7a877374a171f3bd5763becd3bfb33df7331f3bd0f33dffb9332dff330647c9fe420cdb1f3313a0f6ae89ce193ce05189d87303a0f2745e7422c128f6822f18dcf485c84a17f3420fa8b31ad1fd3683db98b3fad2fc1d03f8ea17f2229f4976291785213892d3e23711926fc298df0265dfd09bf1c13feb44678864fe15760f89fc1f03f9b14fe2b31e3e4fb73a3d55a6e3d576b57615a3cafd3225cade5d463b57635a6c30b3a1d54b536aa1eabb56b300d5ed469d08285abb52962c2abd2e748d5b59801bfa431e05f7c1af0759801bf8c19f02b4919f0f558245ed544a2bc9bbf48dc80097f4d23fc399fc26fc4929b7f3e3a48bd7013a6f5eb1aadc777f7a7f5cd98f03734c24b7c0abf0543f2a62e07f0099ad8e3f4d123b9c1c6ecdd7153b347e96fc512e82d4d02d5f84ca0db30e16f6b846ff2297c335664bc831519ef265564dc8e45e23d1da11efe22710726fc7d8df03d7c0abf53279c0f037f904891116318f82e8de04cb19158c3ccd147efbc54bf73f41fea7869e7e83f62f1e6e883eb8acdd1df8dd9d2c7badce6d396eed109e753b9fc8b7881a672efc5246f092af93e9d645e167e9a88fdc72834efd7d9bfd8ee6e7983d87f903dd1625bfe67095bfee7c2f287c6b0fc603bb7e953e201cc78be086a3c0f62c6f36540e37908cba65f69b2e90f3dfd65d38731adf9471ca39a447c7d7981e80e958a6529ba054de9a2b994eed3f7ec114c8f6f747af03d55fcc97f1493ff6dc0d4790c13fc9d4e716e3f731c64aea93a3d06c778578a16dd0adf2db1c731bbf85e631725bdfcd9c51398f01f7475834fe14f62cc7e0c98184f615affa4d1faaedefeb47e1ad3fa672ca5953f84dbee8e7427f513ad67b0907fd185ccc70e5cef9fccba4dcd33eb36ef99e364dc12e6d7ebe4594c835f751a74d56a3053fc5523763a707b27c9ad6f7b0ed3e5379d2e3d13d4257ad76b3f3a3d8f19deef1ac37b737b7f86f70216e1ad01b3cb8b98e03f020a7e0913fc6740c12feb0473ce7f69386ff5c9f9154cf8df1ae1f7f5f127fc550cc93f0191bca613cc4b9f7f13111ca3d3f63f9d60de5ffeafee86a7bfccf73af3df5f7e1dc3ceabf9a8299ebefeb0bf8145827fc5541b89c64945e24d2c124d349178cd6724dec284a76984f3fd3afd087f1b33cca6214d71cad766ce63703b9b12d117500579061b222abc0af93b72b544ba3873ab9fe1629b0e7e4715b9d5ac5c6ce451cde0727577f08b2fbc5ec322d736a870f8a0975bc52eaf2bced345615ee2d305f11d8c45331d0bbe6b18dc13cf6d0d872bd8f0d2f17542c372069d7b578a2a283dae841ce769bf2b4cdec50ca6b9c660e6f6f36730ef6159aa0596a55a2695a5dec722d14a13891a9f91f8004be9d6ba94e6ab19f443b98be420305fa1c37b41ee564ab1d23423e6dd21c26dd61dfe0ddb75640ea81496a1867a23efd508bbaad1e4a26542c34a3050eccaae94bd683ff6f52146af4d285865f6112678bb80823fd60916dfb10a05ecf77f82496e1754f2164c72fba0923fc52477082af9339d64fe7cc7441230466be4734c70a78082bfc004770e28f84b4c70978082bfc20ac6ae9a82f18881fe0ac6af31d3e816d434bec124770f2af95b8c748f80a4bfc304f70c28f87b2c097b6992f0669f49f80326bcb74678de207fc27fc44ae8ed751527dff5cdbbd377991cc60def47e856a82bc420227fb244bcacaa416f23315d56783562089ccb481755a7eba1302ea289e8a78af809c3d647836dabcf34f919139eae115eee334d7ec184f7d508bfd8a7f05fb104efa74b70ee3c53e09c5489b6528968cfeb12dcdf50e76f5804fb6b22387eb0bf08fe8e4570802e82ee96166a5caf02ecf0e527425bb13007eac2e4a7abeb468cfd84f30716ce205d38dc3ddcfddac61227d746e6b1e47c80fec4c21fac0b9f1798dce788af7488af077fb28af91d4bfd0b33a50c5d5ec9f0674a7f63d11da28b6e6f604aaa379848d196edbb68fb07d36ba84eaf2ec00c66385a85272b6604cec9ff629a0cd369d24763108968949c69fca7d34d7c2949d7ae1ae2cf34580889f8082c09f4b307c10bd3904e131ecd919a68b61be62f9a8db06866eaa2c9a72a2a45cfd5ed0717890931d7dd91db7cb99cf3f613bdc69806593a0d7a7a6c5d177a70ab6f82e994add3690062f589eb969cfda7618691a3318c5f7c1a46534c78ae46f884e1fe8437c384e769841fe25378739d703ec5352a914ec0c1b8e0169855e4ebaca26d44e51c9e340e7fcdc14f5ab7c4c21ead0bbb9bb662d6e9909ce5b5c2d26f8c26fd0a47f84bbfd65854c762edbbe078db60111aa76b65f88cd0763ae1dc3c76c00660c7273500db1603b723d6f20f2f972d93be41ee279a92775a6f87e9b0934e87aec04eddf653395bc6b8c3eb2a365bce0c24af4b7b4c979d75baf4f3e852116156333d8466893cb352b46b92d7b003a6e18478b40ac478b657ab85ccfd70c072b13796bf3aaf23a64b814e9774a08b3f9d922b713a611974a2aeb33fd25f06ed8c099fa411de3cd39ff02e98f0c9ba56aa4fe15db1449ba24bb4e1e2396f0304dbe99a4f622dd0ecabec8ef214cbe915fe99a2353ea723ba615a4fd569cda3cfa76b744d273fa176c712629a2621cef099103d30e1d335c2bff029bc275681ccc02a905d92aa407a61e9b26bac0a24ab5e2b90de980e33753a6c077470ab8fe443de1e0b7916d6155221cf134f578a9687b7f8f3a3411f4c83d95857c85b04c7d224b982371d33ec39baa1bc6c7f86dd17133e57237ca64fe1fd30e1bbe93a193e85f7c784cfd308bfcba7f00198f0f91ae14d72fc091f881959a1cec8bacbc27784af8ac38f810dc222bb4013d9313e233b1813be5023bc974fe11918c9dd752419d3488fc16508267d0f9d747ec3ada03393d8a37f2886694f0da601b9fe300dc384efa5cb873e850fc7282d4aa4b31f03c9084cf0e28082476238f6d6e028f1892313d37a1f9dd1709bccf4a57c16267f09362a1abde67296a89754bb327cc75f77251bd364a94e132e810fc4f94dac1c2c94225d282d19d3eee3e827c45c4d8899bcaa0ff14f79a46a1bf242e78c6fb6ec7f0bf26521ee581609463444b58b8a8a437c22a77354cc62858f2d15cad3a5153f2d09710780489576997568b3f37b3ddf282a69d2f0a419851943a9ce18f8870255936bb96898d6c848f99d7cccc74a8ce59a12e3b1b1fe4a8cd158a456e822c5538a2feb7207464a985a42545a37ea96ec6cfe184c8f95d8e0aa1e6e851c36f213f6585d9eeb95ea3ce70e37552591e7ca427c223a12d14824c7ed8be4b858a163396e9c8e1b9f250d2d492137f739b736992fbe24c89ba973c0345575124c5785fc7edcb95c90ed1f15f364f5c3a8efa0cb297c187c7528a05fd6784c724550c93b62922b834ade49279997776b42d19bec89c4f30a8fb1c9dece58a1b45fc046e0048c4755501e0598e4eaa0922762926b824a9e8449ae0d2a793226796d50c95330c9eb824a9e8a19ddfa8046370d5379435095a7eb24f306d0c64454ee880b9e81a9bc7f509577c1281f1090f2ae98ca070655792626f9a0a0926761920f0e2a793626f990a092e760367768409b9b8ba97c58509577c36ceef08036370f137c4440c1f331c14706145ca813ccfb89472522f8735cf002ac3d70743db4071662a6714c50d3d85d27993f7f6c223c6278aeef81813e2e20e83d31d3383ea069ec85093e21a0e04558ea9d1834f51663a97752c0d4db1b4bbd9303a6de3e18e45302425e82093e35a0e0a558ea9d1634f58ab0d43b3d60ea2dc352ef8c80a9578c413e3320e4124cf05901059762a97776d0d45bae1b84d8de390df1cfd8a57eaf26dd567ef5bb67d3a644d262284e6c059616e7044d8b953ac9dc19f1dc44543e1e175c86d9e57901ed725f4cf0f90105afc2f2fe0501f37e39967a17064dbdd5188b8b02b2a8c0045f1c507025c6e292a02cd660922f0d2a793f0cc66501615461822f0f28b81aeb695d11b0a75583697c65408d6b318daf0aa8f15a4ce3ab036abc0ed3f89a801aafc7045f1b50f0060cc57501516cc434be3ea0c6fb635dc31beaa16b780086e3c680380ec470dc1410c74158117773d022ee600cf42df500fa104ced5b83aa7d28a6f66df5a0f66198da9b83aa7d3826f9f6a0928fc080dc510f408ec4d4be33a8da476192ef0a2af9682c93df1d30931f8309be27a0e06331c1f706147c1c26f8be80828fc704df1f50f00998e007020a3e11b3b70783dadb4998e487824a3e191bf37838e098c72918e54702523e5527982f89793411c13196f59d86417e2c28e4d331c88f07847c06a6f21341553e13a3fc6440ca67612a3f1554e5b331ca4f07a4bc0913fc4c40c1e760909f0d08f95c0cf27341219f87b1783e208bf331c12f04147c0106f9c580902fc4347e29a0c61761a9f772d0d4bb1863f14a40169760a5fdab014bfb4b31c1af05147c1926f87f01055f8ea5deeb4153ef0acce0de08687057622abf1954e5ab30837b2ba0c15d8d25dfdb0193ef1a8cc53b41595cab93cc07c5df4d44e51883e2d7612cde0bc8e27a8cc5fb4159dc80a9fc4140956fd409e6a6ff612282630cb7df8409fe28a0e09b31c81f07857c0b06f99380906fc5c603b6d4c378c06d188f4f83f2d88cf1f82c208fdbb19cfd79c09c7d0736e6f745c031bf3b31c85f06857c1706f9ab8090efc6587c1d90c53d1ac1997c07abd02a66c647ae16c969e0fa9b3afe46c72ce46126bcd9bf0d716ff64ce6e74357c9e88b79b9dfab4b769e3adf2592ec5c7b44f07d3ac1fcf4fb50f43221f51315401a6e57f763a5e40ff5504a3e8009ffb11e843f88950e3f052d1d1ec29ab03f076cc23eac13cc97cbfd9288e062dc4c1ec104ff1a50f0a318e4df82427e0c6b74ff1eb0d1fd38a6f2d6a02a3f8165c63fea29333ea90b802f6aff3311261fe1829fc2eabbbf02d6774f63a9f877c0547c064bc57f82a6e2b3ba9a34dd390d2d600db30e4cd544fed67cfd9b70edf89fa81dbb47c52e111db01aef39ac68678d8217edcf63891f6a1430f15fc0d46e540f6abf88096f5c0fc25fc2b27093469a25a793c5e93cc758e6b3c96cd7ba8f53cd667c4b9575228157c9a41f2916a7f23d20e73877c2dbafe81b463a8f41fe34342d6ef8954c6db9e4a73c79198b659a2e9647d5c57281d344ab14bba0f10cba5afc3d83b91f36af12fb7db8197446dd93e1adf722bf38532579cc17774b1c89b5225e5c6e24bdc87d09fde981492a647c59abda0511328599d5cb7ba123c7ef3aed5730d24d317b8221ba71ca75de7169f17d569738b6e1eeccedc6b6502ebcf66a1b7e17bf5e5ff6f42a16cb66ba58eee4892564eec673aa48b1d5228e5e2d235308de899557e05b7e62f61a16b3e6ba98ed9c50fab97be29531b5d43778ca85eff889dbffb0b8b5d0c52ddf13b759227556ca98f1b3f50d1693d7b198b4d4c5e484149767e177f8ae49e58ed40d8c6f9110fe7061b50f2b87ecf0584c119bf0f166062cf57803abfecab63730eaad74d40b12ca1b33058d6a234ab537b1f8b5d6c56f26a155f1abfb896078acdce6b06ecfadfa48d5b7b058b7d1c57ac798b1c6359d27e2e27e69cb8da3aa8df9d56249283a5f249f9a6f63f1da4e17af3d7db7ece68b3b916d3b9d04f7dadcba72a0caa90f785727484b3099747e07e3d156c763d794d4d9d4b5f9bb589cdb61ed147f36a06c986ff4e4ee5d0cd3d9af45f889d97b58ccdaeb62360e89d902913fcb65dbc4ed6aab5ecb42998b4ba25283a68ff23e16a30eba184d252c7d55aaba1b092d63ee0647f517d30fb09876d4c5743cc386df752545640c8ac43537769cc97491ca55a23754ecd4b81bea31561f62b1ea94489f20325cd842582052a1ca7996e7c315316abf4819f517b38fb09875d6c56c52dc9233b15e015e86c6eab3265b527e8cc5b18b2e8ed3509be42dde65ce432aaeee1678911f00c2cb12bdccfaae093fc1e2da5517d752e2de438d531354094a6eef60a1b0f6b2ba92a77efac3c970da8271eaa6e3b4a0c17a59b10905e7f029c6a1bb8ec3449f79c3841cf11916c31eba18cef019c3dd8545572029d210f1fd1c8b6f4f5d7ce7115a7675126d8dfa20f00546a0577db541dcb2ad00b440e863f52516abded80885df584d154f44a790b7cc495cae9ff87d85c56f7b5dfc7608d072ac11b511df9670b9ece7e1b12a8c7ad64f9cbec6e2d4c75f9a79cb9e02319ec0735abc5e0a6dedf10d16bff4446604b0d6e314313e5424fb6ed1edf8e45a8fc9b791bfc562d9174b453f3d6337e6d3646b297c97cfebc46e03d757fbf83b2c7efd74f11bc0628f7d163a9429b4fc1ed3b27fec114c3fa9303fa954a0cc613f60b11ea08bf508b40429ac73488025e1f2ba517b5eebd76a5b9cc9cd62fc88e93d50a7f7d8b825c30c3103cac758cb9d92bdca89db6ab1c16cbcd2a1beca809fb0f80cc2dac9b1f308eff3cf156dc76a4deb21911913dee65a5e8f31fc198be1e0444602f433203384edc52ecd53390bf20b16c70c6c1c2e91fa2a9158a6bacefa158be9105d4ca727949adef92c371faa783764bafe86c576a82eb67bc44d57daf17fea9981df311ac37434f622ec01aa564df26340382d3f44b662448663330afa5a34da25bca17a167f60311a818d5fc51f7d48a44c4b640cc3ff3847f239ff4f8cc3481d87a13e38a834551f5ca8afdcf917a671a64ee34171cbaaf03c5da9b8cafd58eaa70df737a669964ed3d131da9e5e4b8fd4dcfd9c5d78bc9322bffc83c5251b9b21f65702b8255df4dde8597ff5e9173ca6d1520ac41c03ef93f889f3bf589c7374711ee8b1b47098d476f61fa667ae4ecf1c8f9e30e77a759e26754eb405926cfdc23d98b531c8d3c5607103d7b8d00213ad79d53b7ea884302aa31299355521fa19190ac70ccb71f553eb34c262969f483fc26f9d1bbc25997c4c1b63311d9d48de9c246cd6b5cf1a303ee4da783ecb8b133f5dbee56ff98941132c066312f7ece361fab143183fec7a7da5501a16bfb1d8b858ecf644f8133e5e1dd52794f05203fbfc4fac9226b9baad2916eb71c98cc7b8a93adf79781973dbf0c5aca13d9a9b6131dc21919ca7279c5cad18bfa5dbccf9170af1e5365384147774ab52bcc3db40997d9d5ba1acba7a6f645d7d3632a2ee0b5fe7e1af765283e789c2ba9a8b2f378a2d617c23773982f8192cbf8be816ffa1e5ccbb9c6992905f2ecb1b65ad230521d7f3912fd31a59f7a961b5302b5e2c7475f848508bc3d8c58fd3dec842ab90f82a2a94e590eec7496f6b31dd91a76a7f99aa8d32f95fa161495a537c2d76e2a135d6db50d728b23077e8747705cc96bdc8882f7acf60d15f7c8f1b9e77df756f78238400d5e6892b6e01c8f83a71dd8591b90e5d55cc1d00dce4f4159aa535cae2e9b033252cf713ec3c4de68ac0711f6c1bb0bddb248c6d022536f7a3d655a25a9bcb5cf72255416300abad40c8ddb614c2024a84ed9c13d5e39d2ee60eb98022d18ee55e2c73d82a2b80dddc3c0c6c2225b04ea05cabde06c0b56b15063789125c070d382eb0c27989cf10d68aab2556405bcac2d02653d7a22a7bba9d4c770dbddbc4a9b202d6d601615853a8b366645936d5f95d26fdf194bf869b456d0097d13a0c6e2a2538fe7d77ee7890681d6a03bc33400d3a8d125e2b50aecd8918b9b40153af5e614cd32931b50098c24b096c40744c9730a21994889a0a44d55695514dda84e1ec4209876fc737a7ae83a4a6d25c078679a2d0af65dc419d17f373e520a30d0059ef30c05d29013667911d723ebb6803a097da8701cda404d43ea2ad5525472cdc25a17695589dfa8791cda22ed4e78879bdf0ee2676b4e09f02f5deec54653bb588c60640e7770c039a4309a807c87653d87a11ebdabaa626f7bd2b110dd179c2c24a84bd953b01da0091ff288873a933a282e8eeca596a49fd7704e81dee4689c8a96723ec8b8fb2f2f5d3a5755b989658dee5e904c65de751a26c238b7d952537c876d80231846303aa2da0f89f9faa3109dec586de2caa9b6d537b7f6bb330b842ea3109080e2e422c10a3147c0a36bcdcd206780780b1d60594f05a834647784d9dbb92d706509b419b7f2125a8964c4dbc4d66ee464dbc956f47e3a21ccc4eee4e3d47344b9451ab3cfbe84c761eaf1221d9006c69a330b03d288175f6945d0b19dfb2659d761edc8e92ab1d68a5ed495d72f1ac68abcbc04b9961507ba576b223d251b6c4b286453998c05d443f0f192ef26d6ef13f951686b6987a1e92b7f8c37dcb497271dc0a6bcab09a9c30acbda9b3e614e16a522b020fef2c17de69b0dac157e6846703b82dc0caf649d56cb7adae01dcf953c15a42ef88e2fa8c550a31768f5e8c0756b6947a26699e036d124b7c93561b001e23bae6cdd23cc2bdab3292f791f5471df7e66dcbdc91b835e26a8d6cac4478f73acd4df3342f82deb919490f5c67c42de732127696caf0edbb9191a4d7644642ddc08c80c3ac193e5c61337c1581190937fc327c55e01949952719be0606337cb5f6331272eaccf0e5c998e17b3c4ea733ee8e9511e5fc901173102b433b9d9da19d6dcb407c4f3262b8ee6420539b1971c6be3392f253c84870ee39c3e7c84206322f145902e9fc0a33d091b18cb89efd19313bf11971fb12e14536fac531597c91cdb2ffcfd7bf64f1f52fc51c02fffa0dff715b4e25d42d279ef2ee72275e9bc5de922ddb69bf7874e815a543e487a4540b49a74d8b8836d4768944309976d45ce039586a12ce1c2b711e02702e370967ae9538cf053857988433cf4a9c8f029c2b538173050a14aabf848d65f974385b53e1ec0b70969984738c95389b029cfb9a84739495386f62619cab4cc2996725ce7300ce7293708eb612e7f700e76a9370e65b89f32980b3c2249cd956e29c0f70569a8433d74a9c1b00ce3526e1ccb112e77280733f6ad71e8eb3588e217977a7725577773ecaa203994605320fb438aba8ddb1d52862a2e3e0fcf92af1ac7d1dcd29c042ab29c1f661707836f189219be1f607706ba8bd92630d8a4071bca62743d98c0ae5545000d452a26c2b51e67b80ba5326fc2132783da8e0dd09ec706d2ae08d493d3c32cb7b12c05b4709af6b9c3a3c321393f6cdc960fe0d60ae3709e6680b61fe03606e3009669e8530ff0030379a0473948530ff0430f73709668e85307f07300f300926e1c41a19ccad00e68126c124ec9593c1fc11c03cc8249836f6707e05300f3609e6180b61fe0b601e6212ccb116c264a0ef7d2825cca11266b9f350b9382a0757f84dc025bebe2c483aded9910af91d00f961f42b8d570a9f51d7877505d3ece068c1605b6b90e50f6fc8c1b6c86f28105adfc154284f05d6770425cac15119be48089bcad48731273affb975ae15c3c1b52cd6e70f48619395ae6b01ec235361b789555536a24c0745c0519428b7d71401897e368b14edf1546857022b3d9ada4a0bc4129d4ab930817fcd82cf0f55c8c54a6ab986bb08c6be8aaa09b0d26352b1b575b6f37fb50cbc48d4effcaacd63f2470084c7a602e1e86d0ee17d00e171f41f9170277ed5b140a8e07e96cae609de7b00c4e34df27a2775e622c3b914543227988493d4fb880ce79100e78926e124f58d23c37925c07992493849a782c9703e0f709e4cbd8132afbd75cb3ad15df12df0eae80c2a9f532801f61300e3afeb5dc25609bb9d28169dae92014c15ef9447ef9362818d7600884fa5decbce6daa676d437e47af017ca7a5c2fd55adc9d7d9a7cdedccaf01c8d3cd7124b471326309a876ce48054ae8493c93cd61d3e41e0ccb9d97d6a7c22ac9506e04567926fd241b9c9e68b0aa86acac6c03609e958ab1cb1ab1534c75dd749adafc411d7523efd9940e3464682f0068cf4ec56470e28ba9c960922d69d919c0dc64124c4237053298e301cc734c8249e8744806331fc03cd7249884eeb06430870398e7990493d0519b0ce60e00e6f926c1b4714de55800f3029360123a1d92c11c04605e68124cc239723298bd00cc8b4c8249e8a84d0673188079b14930097b4064300703989750c24c67d1e347febc3509eb77326fcd03c198d2a50de96dec9d19222c45c9c63a87025bbdcc249884f53b19cc5c00f3f2544c60f0d1ceb562d49def369c222719327c3d00be2b28f17507f8a29d60b9b0f05613367b1dbd00805e990ac7adac6dce71eb7080f0aa5420ccdfe610ee08105e6d767388705493ac397437680e5d936a37ecc42733085b9a645319e701b4d7a6ca6b333c7b0927e0c8e72dc9201e06b2ff75f4f6896f9cdf60b39864256b7b80f67a7316b3d8b887c24e00e50d94287b82acae739c7155e799be425cb5d991e66300f5c65435e8e37df3c466a0e300d09b4cda3072ac95a39edd41fd7eb34938c75889f33f609db7988473949538af05386f350927e95e3464384f05386f3309e7682b71be0b706e360967be95381f02386f370927e9e79bc870ce0438ef300927e9f786c87056039c779a8493f46b58643897009c7751f78b12fb32e63ca11aff362761bf68572aa0a300d0bb53b1e56eae67243405e3f3649b4d540278f7a462e803666dfd3e1e919bfa10facd7d4e05f526d0b5bcd744a884837464506f0450ef33112aa1ef3119d45500eafd264225ace1c9a02e03501f30112aa15f1d19d4bd01d4074d844ae8b34406750f00f52113a1127ad591412d04501fa6849acba227e622e7e427b1f0b7a5c3734be12f55cf667c2a649d086215d8a1a150b468d5640a612264532502ff068e4a84472813a1078b9e7d8a350d6def1ae40f01d247cd59196fe3b739f60445c463e6ae40b6d16de77fc04a1f37673b6ad25dc2c8ecf44000f3099360daf80d99e300cc274d8269e33764d603984f9904d346ffa7fd01cca74d8269e33764560198cf9804d3c66fc8940398cf9a04d3c63dbb7703309f3309a68ddf909907603e6f124c1bbf21733c80f98249306ddc76ed0400f345b397dcd8f8bd98e9a0effe1225de3612afbb835db9e8c5bbb2cb28172c907d589c01bb7c3915dfbf8eb6cbc4863d08ad926cd8e30a6095af98bb10ccc63ded8a00da5753b590619618815fe519a19fecbc562542b47921436f5010bc66aead12d6fd64b67a21b0d5ff51a2dd2e66e5544d87ae2515ba46c02a5f6fc8f574f6efced415a07c23155b61e4b16d692b8c4280ef4d33beade54e24af1116eb4e11935ae64754689f04e5e35b267d5882741084cc5267019c6f9b8433c74a9c6b00ce774cc2996b25ce3300ce774dc249fad56c329c77029cef51e2eccfa25d6aa6b0f58c3b85d532b568618ef33affca4c9558be50c4dc2f1696a7a66fd49e0a721750f7bf6fd2629bb156eeaddc03d8ec0726e11c6325ce10c0f9a14938475989f37a90d93f3209679e95384f03383f3609e7682b71be0f707e6212ce7c2b713e0e706e310927a9031819ce5900e7a726e1ccb512672dc0f999493873acc4b914e0fc3c557346f3459fa7d6915cc0f817dc17caa5de2562a9b7dd9fe52b0240bf3067f1818d3e75bb8146fc97a970b6511b55bb9b0f2c130321ea21dbf7b72d0576f9552a361f68808f9692c19b00e07d6dee3218c20a88ce1f04a0fdc61c8fba7c2b97c1f40125e6b726c1b47119cc4000f33b9360dab80ca63780f9bd49306d5c06b33d80f98349306d5c06d30dc0fcd124983636d97b01983f9904d3c665301d01cc9f4d8269e33298ae00e62f26c1b471194c0680f9ab49306d5c063304c0fc2d153df3d1a9ef9993f9c9ddc5c2f07e4f85076736e35f3eaa141e1de5a91a1522eb7d7f07f06d6dc8d1ca94edfb753015ca734036fe2315d978ec3634c0f62ab0c33fe92b94959aaf6ecc779814b362a9d072b1cb2c77d2b26f0aa21580f997b9cb56085b9164e5e56290c9ff36e75b4636f6bb47002bfdc78cc50385a2fcac10d99f8b5b4d8b966cafe4db8195fe9baa89b3f09e729542e12ae149cca7d0ecfe32dc17c04eff33c9399b74d13f59e5540e6c93353608678e95384f02384326e1ccb512e7cd0067234a9c5de3e0f4d6ef368e125d0660363609a68da3445703984d4c8269e33cf92500669a49306d9c27bf14c06c6a124c1be7c94f00309b9904d3c679f25300cce626c1b4b1bf7e1c80d9c2249836ce931f0f60b63409a68df3e4c70098ad4c8269e33cf9b100666b933a94a4eead641dca8500671b937092368fc8701e06706e67124ed2c55464382f0238db9a8493745d2f19cec701ce7694383b489ca38433825a78c447e06d5fa672110b236c4f8950eddd117f56884f68446e2955c0aa04e00d8c7473a96f434490ef0576da8112726f09b9dc7988032e959ba3cc616a4b94c862201c1552b0649ba21c01c076a4049bee015b2e1c1a6a8498b04b43acd6a98d0dfd2a80b71325de78b3ef29fbf61b99b7527380b23325cabe02e50c562d763fe2ee3565c20b84bf1eb6d6256c9500ce77e22e76fe76ef4f758edccb8e701369b2b6400b5091754985ad26d629b531dbef0c6cb52b25ca4e7150aa9892fa2e1553d5fa8f008cdd52513945bb8525badd3ee16033d976fbeb01deee9478953f1374bae1e5eb42515aae13aabb1f75747755d828db02f6eea9b00594a53d528136b9e5d736eec3fd1e40db3315652bd6a40a97ad84551459d99a0b327f2f4a8cfc5b1b73e56089daa26286b04c5ea2da97b5db01fbeb9d0afbcbaab3c112594a568a1127bb77e2be1760dc9e7a0a84039b2c022e6555a09a29aac3394fdce51ef484d5cd6c2a98a301cc3e0dd9744fd977dbc9ba99678272313d1528b3620c86d83d32fa22b0cabea9185ccedbe60697f70508fba562dc935be314d1dca9154acc745e71bfb43ec769a85788f2b35ab435d758dd401f03c0f66fc881b9c8c10e1bbde97605280750a254cb08f33c5590cdcda0b500de404a786a35305f8399f2efb9907506bf04f806a5623a38f13ddd091b3f647b6b76068d9fc126e11c6325cedf8075669884739495382f033887988493f4a32364388f0138879a8473b49538df04388799849374f723329c77009cc34dc249fa3931329cd301ce1126e124fdfe1519cefd00ce9126e12475e126c3b937c099998a5e506e43f482c83a915301be2c939c62b3290734c87096825e50b6493849575b92e13c0ae0cc310967ae9538af01387329713617024a9d72d29d34e392c9709139b8360565631e25aec12c7aa037d217c375cb5e2dfee663ecb542e414019847ab50504b81dfdb542ad83900f6a854d4e3d9a2d1b3adec29370264edfc544c98f1d99e698ccfe0f0799e1562ca2c257b1f91958e35c002479be3c46ae36628fb006b1c4389b233e31e42bc0c2c61cacd1af3d3a8b6b00a6a0e6c72aca9ce80a41d47b2f99f9ec046c7998a9674c4880cedb9c06a77a076d04a7c863cd7caed7b9e0330c79b04d3468783b701cc1d4d8269e3f63dcf00983b9904d3c6ed7b9e0530773609a68ddbf73c06604e3009a68ddbf73c0d60169804d3c6e57d0f0398134d8269e3f63d8f0098934c8269639ffd1d0073b249306ddcc0f40300730a25cc741674f929619f886cf9e946d0779f4a3dbe146ba8ce553d5ff8151356476954209f0020a7a5621024da4e131906b1f15bbfa703b4d329d1f6d5a075c7e039bc0ab68b982d5a13d3f783d076c93c3f1a8332768639eb306cecc9670394bb98e4933496b2f627b3cc0120ebef6a12ce3156e26c0370ce3409e7282b71de0632fb2c9370e65989f3628073b64938475b89f36780738e493849bfb74a86f3158073ae493849779021c3b908e0dccd249ca4c32464388f0238e7998493f4b3396438cb00cef99438f989da98c7be9e795b80a9d024ab1b4b39d94666755d40f37c814938c75889f32f609d0b4dc239ca4a9c97039cbb9b8433cf4a9c27019c7b988473b49538df0238f7340967be9538ef0638f7320967b6953867009c8b4cc249ea954486b30ae05c6c124ed26fb491e1dc07e0dc9b12672f16f9fd01cea196f15975ef5707bccb0409a7d5c896c14c03cdf97d28b1c27de3f80e9b5c55ef56ceaefaa5621eb348c0b7777dd127c05e9750821de4b1d7652c7a463df1b977421b26ebe13f046c78692a56c38d61dbdaf6910f026b2d4a856788b2d66a617fbc6c9d2ae1956a9d6eecfd70cec1c03a97a5c271016b05443a2ed8e8353f1fa02c36771117a18f1d5919ba191400259468d582ecd16c5bda58e55380af94129fdada34db93d56dde9bb300c05b6eb6fb2ce18a0e32f7d95a506aae68c80a2872cf7742cf39b23ddf2f062857a6a24f0ff77cd7553676b73a5f0219bfcc5c7f64c24c4f56a69e0c2c755f4ab40398f7738d707f10fd6747a7c99753f6adc1a154989703ccabccf14ab67111cd1c501894a7a215a02c9667f712cfbe22dbde40df7860a9ab53517561ad80e8adff0887a3c970ce06382b4cc2493aba4f86f32080b3d2249ca4734f6438cf0238d7988493d40d820ce78300e77e264de58da5dc96856c2aaf1fc0596512ce3156e26c0670569b84739495386f66619c3526e1ccb312e7f90067ad4938475b89f3078073ad4938f3adc4f93cc0b9ce249ca41ba293e15c0070ae370927e9fe7564380f023837988493747f79329c2b00ce8da998e3cc6e88693ab201bae1a09db97f2ae63879c0cb85252ad915f211fbe08580ed1d40092fb13d6c5425639f3bcd026085079a02d246bfa49d00c8834c014938d54606f25000f2605340120eb39181dc1f803cc41490847e726420ef07200f350524a1bf0719c85b01c8c34c0149d8f42603f91c0079b8292009fd34c9403e00401e610a4842770332902f0290479a029270275932902f00904799e3df6ee346e6bb00944753a2eccafc78138db2f24b1a6d01cc634c8269e39734da0198c79a04d3c6fd375b0298c79904d3c63541ad01cce34d82696305d404c03cc12498367e49a3058079a249306dfc92462300f3249360daf8258dc600e6c926c1b4f14b1aed01cc534c8269e322800e00e6a9d4738ce10f2acf9040cb9c97f92744f96b64f0c8d6fc70ff5705efb486ec8947aeeb21acbbc916fa5d00ecf0744a946a5b94f04a73fd92a94256255ca8abd972216c35edace3f15460d7001b3d83126c7fe65d97e6aea20c6f33c105726f8cd8e5a88d8da51a60bd675242f6ee95e402e58bff78993a593bd269efe773ee0358cf4a45f99a584d6f630b74082806cea644a95bf99b78094b8896ac84bd1658e9a65466fe3247898560470fbc454098f9c95a048f01ace7a4c2fb6dd436e43a7823c8eee7a6a28f94d81c51b6951dce0380259e67124c1b3b9c470398e79b04d3c629b7fd00cc0b4c8269e394db0600f3429360da38e5b61ac0bcc82498364eb9550098179b04d3c629b73200f3129360da38e5b62f8079a949306d1c452a06302f3309a68d031e2500e6e5a98099257ebbc7192c7aaf6d9bf7d6fe8685615e4109d3ff5e4684f53919ce45c036af3409678e95380f0738af320967ae95382f0738af3609679e95389f0138afa1c4a91641f3cdf253bed133d91cfbe7a0eab93615f8721a021f99f54d06f8aea3c4d789f16f5616c92fb7705115cee32b9dc72b456368a3f0f3281367f6614c0318afa7c4d887855b93eeb42e6f4df22dbb8b050fee4053c0f8be997c2aadc811c0cbc712ab5b970b01dc1b52313799dc57066cdc95f81280f646eaec1fab2e5731259d8be41d68128c0f833afc264a8ce91a8cfe36cc271c2c26db307f1dc07b3325de9e02ef2491c96b44d5542eca4f9ec15709f01c70b1f3b72b72aa732c759e28b130eb770259ff16734b55c2096132b46f00b4b752a2ed2bd04e17997e1e2fe09cff65f2f34d5c94f2a66b20db256b11b404806f4b45b585397e4d12164bfc9db67da9aaadb1a05cdd9c6aa7afc40b011b3fdfb409a0bd3d55c3cbaa43a07a57e1fe96dd1d80ee20bbdf910ae76f08337ee96a2fd86900ec9d9460d5871a73d9b6f6a1c6f300c2bbccf141b6d15b691780f26e4a94fd7ca09cef84c985d4b039ce5f6a84aa9ab6c62fa7aaf1c7816ae91e4ac4dd59a42ff21a31bcb732a6cdda38277f03007a6f2a264312ff1201214eb21d613b019cf79984738c95387f0125eafd26e1245df34e86f35280f3019370e65989f36880f34193708eb612e7eb00e74326e1ccb712e7ed00e7c326e124755e24c33909e07cc4249cb956e25c0d703e6a12ce1c2b712e06381f4bc54048a43768b523c61d6db2772ca918207c3c55837495a04fce5d72f45377767b387d0bc03e918a11a6c4dcbe6d5cc2b517e85e3e99aa6c5e2c6db294ad97593c05d6f83915c2fb81353e958aa9378eb0b46e632075dbf661e34701c6a7533bfbbead7f02bc2740fb8ca98e0da4cd24ba0dad40f9f9aca96849fb476468cf0056fb5c2aaaa69c6d6e2a2e03207c3e15aee0fc636229770527f3b2eb07f0bd900a9785c4663273ac9ccbbc0ac07cd124983636dbaf06305f3209a68d3b2f6c02305f3609a68d3b2f5c0960be62124c1b775e380bc07cd5249836eebc703680f99a49306df4f23811c0fc9f49306ddc79e14c00f3759360dab8f7dc3500e61b26c1b471efb95b00cc3753e11de767ca97b0ad4936ad36128c17bd651a50c2f62619d07c00f46dd380da38f13b08007dc734a084b53b19d0c100e8bba60125ec1591011d0a80be671a50c29e1119d06100e8fb9440d359d0c5da840500d930f21c80f783867457889cc9241c4426dbe2fc6980f2c3544c68e437c484065973fe2316c6f7512a662ba3337a22f39584ed50b2d9cab381657e9c0a2f90ecbaae670973774ee47fdbbefbd203c0423f31d7426ddc83e17c60a15b4c72901d4b8993acd1d41fe0fcd4249c63acc4d90ae0fccc249ca49f7c24c3792b28473f3709679e95382f0438bf3009e7682b71fe04707e6912ce7c2b71be0c707e65124ed2cdaac870ee05707e6d12ce5c2b711e0c707e63124ed2f94d329c2b01ce6fe9479366390f94b05281725bdbf0af2340f91d254af5c1bc1c4f97d3e6b1a40a00ef7b4a786a6f1abeec6532e3ebd8d6b0b9ac540e7cb83bd2940a81ead311e17d93ab99cd0b080702c43fa4a2e4c4cacde88f4810ce6c92e19c09ba983f9a8493d4058c0c6725c0f993493849d7af93e13c0de0fcd9249ca45ba990e1bc0de0fcc5a456e7582bdd6cd201ce5f4dc239c64a9c6900e76f26e11c6525ce1b4043e9779370927e80870ce7e900e75693708eb612e75700e71f26e1ccb712e71300e79f26e124fdb41e19ceb900e75f26e124fd161c19ce7500e7df26e1245d4e48867319c0f90f25ce21ccbb3d6f9518f9ac15de722a9ee1cd56606030a802e7af2ae1b648ba57c87f2122e0cf8296e9bf94c03bb3d8cb67224b563290eda92c7700b0dcff4c014968916420bb0190ac89212009ddbcc9401e0940864c0149b800810c642600d9c8149084abe1c8409e024036a60499e5a9dd6b51df4e7c3fb049ce13ab1d7d2ac5198f6a8aeafa6fa9eafa7b405ddf8412bf5a2a9be89033e1bc3cd980f30c0033cd249884eb8ec960ee0a60363509a68d53213b0098cd4c8249d8ac2783b92380d9dc2498840d2932981300cc1626c1246cde93c12c00305b9a0493b0654a06732280d9ca24988483786430270198ad4d8249b804960ce66400b38d493009f75124833905c0dc8e1226fe1dcda9ceef3281b1c4896fa5106cff7734f76461b06d29c1f61260673a0f140bff4fb8694083792c936d25d00c606d4789d5df970f6cdcf5731ec8faed295106dbb9dbc6b5f0d7012bed908a2a0a1b1f8db4d2d156ee9b3c06d869479360da98e94701989d4c8269e356bfa301ccce26c1b471abdf6c00b38b49306ddcea3707c0ec6a124c1bb7facd0430bb9904d3c6ad7eb300ccee9430d359d0add6084b51b2fe5135c0db83126f4716eecfaf15fd75befc7099e8c7a7680f26b24dd64a581862cf86ec6446ee5747d84422437915b0c75e94289537281c5fc20645c84795c8b2775f6099bd297176d0e0842be1c91192f5cd3f0308b74fc5b047740594c8c0878d1f2cdb1d64f63ea92837136b28d9d8801f09ac343d15e3f2c90cce113ad690d9e8c9006c5f53c1dab8bbe2b1006c3f53c112160564602702b0fd4d054bd85722039b07c00e30152c611f9f0c6c16003bd054b03636b0b6076007990a96d00d820cec2100ec6053c1124ede91813d0080cd3015ac8d53cc7b00b0434c054b38434ad7890560875282555f5818c51ae00b0b64f80e05f88699330660e387fc660394c35331769af8b2051bd727ad00a353234cc249ba0d2b19ce1301ce9126e124dd24980ce7f500672625ce785ecddeb1531bbd9c9e0230b34c8269a363ce660033db2498368eebdf0560e69804d346c79ceb00cc5c9360dae898738b80d92ccd237c6a94f049a2b6e5f56d310b6f333d924d637c53007723ea62e77ca6e82ed6b0a50e8e45ce3f7f29b0b7f34f773d24f6129fc2d6b335e22a97572264af76ee72cdaa59d600e7913c6e104da5416488ee4281c3bcc679661e2b15a16f60f399bb8df61ce7b75a87522b906488ef8ccd75aed532ee26c443a8703459c9aa448c23b7d9ce0835179c4a9d9e9c4b8003cc90baae65ee7609336447a5cc897391d0a4ca79a68908c76dc36484da8033e54f334374b3b9163c8142a1f6324db83eb3445c8a9c3814896361dd5b997cf7ec50bef3cbedb08facebaa8f945b39ac9667ea7a7c993c45624b1bc5b187f4f9b0bcde6c295e8c5cf3e7ef2f174b5f4a85d41971631a3f7eb85db68e912a9983785a6ccbf1cfe7e92e935d9869d7502be7af054ecabbc24b9d4c5625fc47aad829cb1ab1b4ff07aee61b7505df0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/7f85fe3ea0b1c734ebff43a1a7d05f03.asset.meta b/Assets/SerializedUdonPrograms/7f85fe3ea0b1c734ebff43a1a7d05f03.asset.meta new file mode 100644 index 0000000..7672ace --- /dev/null +++ b/Assets/SerializedUdonPrograms/7f85fe3ea0b1c734ebff43a1a7d05f03.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bb83c6cd432776a4cb741f46385c326e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/8055898f61972ba49aaef80c72d2fba3.asset b/Assets/SerializedUdonPrograms/8055898f61972ba49aaef80c72d2fba3.asset new file mode 100644 index 0000000..a6494a3 --- /dev/null +++ b/Assets/SerializedUdonPrograms/8055898f61972ba49aaef80c72d2fba3.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 8055898f61972ba49aaef80c72d2fba3 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cc5f5f8e7dc7bc1bd61b99fab6459926d30ee4db84848b231d8c69625d916962d5bc5054ce8bd83e9bdf796404212d24942e8494842125248482821094948420884ffceec8cf6dddebcbddb5bbdd38cff3ff963adb6bd79f39d37fdcd6cbb5ce6fcc4a638bfd6b232b6884d636b5835ab67bb9cbf1639c79dce3ff74c5d2f650dce719bf3bbd2b93785e5a47893ff4c880d767e173b678dacc979b3995539c75a71bf9cd5387f173befd63867fcea56e77f8df354ac83f3d21ab69895b0d56c506c400a116bc54b8df25a8cc72bd6c5f9bd901d70eed608a57820b9e2d620e757b973a751dcdbe928ad9e5bcf368a68ed74ee5539ef34b03a47e61621b1cb055399f883b98701f238501efb3bffbbcabfdbcbbfbbc8bfe1f31de571509acf0f06ef75057f7342b707bc3f441effe5fcefe4fcd908cef9bbefcbf3a1aebc76db03640d97c711f278a494d99486fe9de571648af806c9c801b2d261d6451e47cbe328a96f7386e18f7519c56e06f2f8f1df409fd120ecaee03e3f8e891077958e1ff9d2f123371ddb5d2fd3ef2d797d9c3c4e90c7f152b6f34cbfbbe5b5b83c0e4ba1d744f73d368b7936eb84d97eb73c9f248f93e5718a3c7e2c75dd0bcea3eaa2d274aa3cfe4786b14f735d3dcfefef97e7d3e431d7975e79f2b903f27c7a9afaa4637f4aa7ffca304e01e70ec70e9b0364a974ffc497ee9fc877af70397678da171f687f3ab9f952dea919c4e3535f3c3e7575e918f73d974a07257f863cfe4fca3d08ceb9dc4321e3d641bef7a43c2f60a9cbb60169dc9be9cae9a258cf72c3e9d4dfbdde690e4bb4e5a2147aaab4fdcc97b69f49b97552ae8aff6cf73ca6e48f0472f8fba725cae57f42b9e29ccb556584b2f1547a1e258fc7c8e37c799cc75af2f1d877e435c560ae0c33c612ca0071ceff1fedbd3bf08a90dc82d268812fad87c970dba590a9de5f288f5dd37c5e3db32882ce8be5b15b9a617693c72511c2eceeda42970f7cb6302b85cca52edf2e4d4007474e57956797c9e372792c96fc3bfaec40b57f82ec20952ec74a5d18480347976e7de4f90a795c99a80b5be5d3e973ada753acbd94793a38e7c70ef2fa19e09ceb5aea86d3ed592973b53c96f8742ea5d3991de7bed7b307b08d74de0bb2af32377eddf35cd9dd2be4f5729f6e8b3dbdbb2c06ef2a3dd2c90f6b248bce3ec69da50e8aed5adf736782737eece48527fe76deeda16c6b08b8cedf3d0b9cf3fb1569eaba8e25db2c9703ca1bf1370f5b96ff3d547a9ec092f39eee5d7e0475a4f89bcb7b43be77224baec7d4733c6e6783737efff834e3b65ea39f136ecff901ef6e6089e5cf42cf1e3abf2aaf6d94fa746389794b958339de3bb13a79ed24f7bcb7d265937c07d8544c9681bd942d6e96c76aa6af67b7000e323f3afdc396b087bf2eaf550684552d9fa9f1c5bbcc93d37db0d45d95635b59629ef13fcbaf6d93c71df2b84b1e777acf8e57ef9f2c8f9255ac074b6ca7d782ebfcd853de3f079cf3e7b67bb2073c27afd5fb74d5a5a7ea37a8b8ebca80203bdbe33e3b58d94e83cbb6f7333eb99b58b0dd36ba72e28a61932ba74f8790729aa51cd506dae79ef751fa28aeaa0f22fb18b15e2ca12c67b23d1deb0deca617b8c69f3dd7c737956e411c0fba7ab6b4ef55fb51e9330fc8ee2ff5e8e3a5554b9bef54708f9fcf05f185f10bd245e669d633457c0680e7f8f18c08f10fbaa7ca755516f665097d1e71eed8c911c303649dc3b476da4ff58fcf75eff75576711e88130fe3088f758b2d9d2feff503f196efc7e0d893aa9f0678d7843c7eef025ffa9ce7bb7f2190a1bb7f11d04177ff6279fd7c57f77e2abc4b7c71d9efd3b53f4b2867d8a5c9718df5f785ad64a7939697c97707fad272a04c977702645dae4fcbfe1fc9f32b7c6979a52f2dd5381f8cff55f2de60906ee3e5b5219af41d0a380c92f7ae46d252dd3f04e4eaee5f0374d0ddbf36312d07a876dc75485a42fd615a5e9f1cd7d8105fd8caee82d2f24679bc411e75edde9be4312ee55e94865c35a6b73d40ee109fdc8bd3907bab3cde1220f73644df4cc253b62ec76062c358a2adf373c76e07be1620eb76a6b5f5416adce00e9668eb77b2445b1fce926dfd2e796f8497fe8205bf76244bb675304e1c5365ecdde01968abeafe3d40aeeefebd4007ddfdfb5882ad0f9e2fafdfcff4b60ef587b6fe40725cc533306c558f07a5e5833ece8a6f0e4bece7e4b8e933d8dffe6960c175e343aefc89aa3e7a58ca1b25e55f02cef971b42fdcd16eb843e4f8d75059368b4e13bf3ec5bd3e44cd313cc2b4edad2115bee71e6589eda9c77dfc9ff0d9ca58cfde5ae2f218b807e3368e25b6493e2fafab3169f58cbaa66b73a5e2fa05797cd2c76f8c94772938e7cf7d11e8afca9fa7e4f174ef5e5f35a6a2d2b707d0e34b7a5b11ba82340bdd4652717e3a459cc394491358629934c1b5836141e3b3cfc8672e0978e6ebf2f80d79fc9a94afcacf73c039bfff4d793ed1777fa2bc7f8bc77e600ed043c9e6ef5c9646fcbf2d8fdf91c76fc97026b1c43131358fa2ab23326dc7667a6f8bd46972a2fd8873271d462886ca162b53d8871a83f9ae3c564979537c0c54fe0d1acf4a155640bc62d358e218829a0ffa9e3c9f2aef5f2ecff37ccfe7c9e7bf2fcf737dcfe7fb9ecf97cfcbfe716c7ae2f3ec07400e3f7fde8b5b4ccda3bc00ae29de2f7a7c46aab26d4662d8ec2596d8bf536de702f9dc15e03dc840dd976dd858a12f4e45f2fc2a70ce8f337d720b7dac66fae4cef2e9fbb23cfe501e5ff5e238f955f00ee0c95e49941968d3cf4b19b3e53b578373c7a64706b5ffd5bb722e24a6da1887c0b9232327c7d537a70097159be3e37714b8ce8fc7c8fbd780732e3ba8aff3827c76ae2f6e73e5bbcfa6f1ee3c799cef8bdb7c29e313376ea3fa04c8fa913cfed89786ca66b93c3026d492ae6adee51579be40ea702d3877741875bf7cee35a6b7ed79bef7af4b7c7fb49a13fc893cfed4a7db22963816a6c6f47e8edb24fb854f77309ed5a2dfcf7cfaa9712ea5f71219eef5400f759d1f97b2c43a6aa97cff97f27c99efbe9a87d1cdb507e591bef2fde52cb1dc5feef2e34d162e6bcc3af9bc1a53fe953cfe5a3e5f9cc8519c63e5ba4e9fdfc870ce0978c6e71b115bc112c7e657489d95edffd6f7dc99e09c1f8ff56c55fcddc175f948e072ac8f8b7a4e8ed98e9d12a06f3f797c53bebb52caba019c735972fc79ec398961abf75bdebbd1f7dec39ae7f973aa3ffc3b79fcbd3caaf11a55c7a93eb04e7765b7ab7cf15fe5863d4ec67fdc7cf9bcea2bce65c175f51f7df2574bf9b780737e5f378efdb63cbe972823a1cc5163dc252c39dfcafccadef5ee4d51e9f707f01e3f5775832a5f83c63475d7764a79a53e7ea52ebff1725e68fc193e7e7529f8c9e762c781e7545865e0da9fe4b572ef5aac0c5ce3c70aa9dbade0dcd16dc21b3eb96be473b781b0f971adbc7e3b38e7ef49bf8dd8f12cd1ff4ac93b01e874bc0c53d575effbc258c7bc72cee13541d9ec5be07e57a0a7baa664c07efa4e70e4d7ef9069702831cc9469a0abe34f64896da613e571bd2ffdd7bbf18dcbf48fabf45736de141cb692cbfe2ccf37b0c4f6a81ac3f90b90c7efdf89cbd486b3d1179f8d89e10af9a9da617f95c787c3f3147d647e94fe0ab14d32bcbbc0393f9e0464ff4d5edb0c6ce22479ac94efab3a51d92898e38b6d01cff263154becb756b96937f9904fb67aaf5a3e7f0f38e761fd5d9ed7c8fb725caa258f6e053ad4806bfcb84dbe731f3877749824fdff26d721616d97efdd0fce6198b5f2fe03e09cc72d27f1f9d8c9f2b907c1b9620ce53ce493e3d32bb603c451cd593e156c178a6bcb38c21619969c6f9ba8caa93fa5274f7b4dd50dff9061d4f9b8a9f9e5573290fdae94a1ca9babc1b9c3688af2a15165ff3b29c290f2d887f2f84f296f9794ff3038e7c77a9660f3313557ab6c7f374b289fc5b9a3d7d4953e397b7c72f6f8d2458d393de27baf01c48bdf97e37c5337fbe2932ade09d73ac6842fcd7256c32ad96e96cb1dbdc4084ebaeeeceacdd48eec5c7427fe8bff4c10c136b103ceab353a6ff235c257bd89cd60f95a6ff221627e5d85be48fcae749ea815421f8b2505f1e5a420b87275cebf1ae00adfe85c5f263ce9b9337cad73671a5be91cf95b9bd974b6def9972865ad136c1d6b76ce2a9cdfbb85bccd8edac94fa68a12779bf7bf53e6c874bdfa773a5714d0ddce799dd0b05cfcde2b34ad11da173bd79ac41a835d6c1b5be81cf78bd092e3dee0fcad0bb34222d3eba877eec7aebb4b0854322d7662c3b5cf15b6f87f29d21629c2d177e2f983ff74c815de1a1725a5c4ff31740b193e08512c654c17c86209d7f259aef0212c4b22183e8ec931d4dbb7cbbb881504c6454f8627f73011032f85dffdf8f297c72fb8635ec7c4a8cd60b962ea61788aa80581e5f2e2c243204c143a76ec90c715f5e38fe9f00bf7c3f22ce2779fab15cf854f804ea2f24b4c0031845ae1946aa5a0f25c2394af13aaf9235326cac36a59227245dc6b5b7d65a7bbd66c8b5cbcb54b46b04e22484aef3cae5c679164c91572aa686389d64e9768625cafa24df20cb63c2d38d9bab4c4c24bb65cd1ca1a1c60dc5858a2f9d54eb6c154f67be6a9925d1557bef756477dba7413e992496858cab4d7a54cb76c67a7d4f54750ba746f8997972efc47cfb00762dba974c00876d011ec9e6ddbe6f7ea85944ae7d9f00cb933e0647f91a407d80b31c2d42a60083b6a10e67184bd355ab18e5d7d5a718510c99d7489d3a36d2aebcc8c9bcf140df221e8881a77dfc0ba36ac6977d6d1136ea39b49e9a93e64b9d35958e1dcab749eaf110d527ebdd49158e984cde52d102178fdcec43782c9f2b1fba97eb25aaafd04d5b1a0471c55338c78170df13c6eaffd356620ca387f66e88b6786ae58361b10359b75c3240f8c2ab93b26795054c93d30c983a34aeea9cb36c20b7d4356b28d37f4a2fe5ae8bcbbdd89cc5ed1266c76ded70dd504679721696797a122bbe430dd0052388db06cd24b9776fce2309d92fea41b8a275d6f4cf0f08882fb60d63622aab5f5d5599b88473da9b5ad71aeb9036d4bc4dd5a313a93aa0fc253197b5359da2ab1c944b390116c9347a66d9323854d72379dece88d59ee11bad412c691ddeeabdb87ab63c163217aea3c678f4caa8b7216e8c98f62585f3258078c603fac8a1cadaf22cf085345f6c7848f6985fa77804e38af3ac7b2e40ecc67ce4f92f01eb8f08198e6e3349a8fddd12e94e683b0d26b7cd4d26b3026794254c94374394d14966766b916d64f9a2c137bffd4b012c7d64f96a58e0ab75e942c5c23356aee964e3522ffed125aa49e6c09cec5f1163e603443144f4bb435775bc5824f44b51325c92451924c0b28c375da842fb9f5e5d86411ba596cb032722856d24cd19434afeb8ab1809266189665a746cdb2c3759279969da6b1d53c6eabdce7b79b6876258533190f6784ae6810f5ca296d5a34b8bd742e6fab98c774e5ad667c67ae7dc254773806bc571a4e85f34c8313468d34f2288501f75f1be11ffe61ee8f3e3b4c17d9616e1ad98132565806385267497c38833b93270dbdf34aa8cc69ec2d629b4436dc232e734a6eead68a476bd929ce51350d93ecad336e6f2375daf05e226f8fa6ec55f4c305e760820b220a1e85e5f1c2a8797cb44e322f6db80b7cd416d6184ced9951d51e8b95a8b33425ea27b17025ea384cf86c8df067da85133e1ecb0a47a5632301563d01137cb42e8ff1382e1223c339ceff7ae70ddee4af14b93f4754865e6990e3e4f55ae72f5e614f01cfd73b4fb82e0061f48cebf4e4463127aa514cc4d2ed184dba7d1832dd2661c2e76a842f6f1f4ef8642cede6e9d28e97f5bcdee0cd92edb26e4b2c0d738433468ef0bf6916239cd522e51a45bae6b0539d1ae634e7d8e43c9d23ea813a712f476c54d920cada30693a05d37fbe4eff6e40ff52a0619810a762e5d6024db9150b596e4dd309e7cf2f6448c3872f6e08dff0c9c5b02dd661e3cda4254ef385b75c9bc5f3e5c2006a5adacad5ad5441e669f4ca157df15dac2d1b64bcb7c0bd951ac5df5e138587edcd82476978f1fe84bfe1a57ef40d2fbe6c252e16c565437bac81351d2b5497690ad5589842351fcb0bcbb1bc509c515e98a1b3393144b3bb4d6d0ecf51654236cf79d11bfc7cd14d7b7fef5f8c2115a46159ada5e364b17158a3d888d825d7c80b533e51b505ec38ecc21759429f2756883c914dcdb17c5180d5da2b35b5f6931dc3d5da853a931563730d6d6ab28b85846c98ed2a9dd98a31c4a23412bf35f51c299c5a1b99eb84552139f39f9162a7b206516dd638d779c10bef4f16bb7ff1f6d252c17ba720cfe35729fabd9891af16469eed7862865e845500259a0a2054ab7a2696854a3559e89390596816a6f67151d59e8da95da651fb60a7706a1f85092fd7085fd9399cf0a375c279c1cc1d98a2f410e76082f9b2b2a4e626ef62ab7e4295afa7b845f41554ffaf5a5c39e0fcae73ae55091139c24159795f84d1f2188ced5a0ddb3e21d9cec5101c1f91ed3c9d606e9eebd2111c30533d5f2798b7bf4e6048fb8b2fa00bdffe5a80615fafc17e7b48ec0b75c27936df10359b2fc2246f8c2a793126f9a4a892976092374595bc144bc4cd9a44e40e486112711926bc5223bc22a4f0e53ae13cbf6dd1954de318efe87b8d54b7fbe48d6b54b2ad424a83f3f75e59e756278c8ff0318f5ad9690e93cf8b313dab747abaeba1b88f196f53548a31341e6209db112ad46331f4d51af4978444bf02135ea311fe4e48e12b315e5b75bc06a748d76ae19ae45d9dee5c0dc37115a6cd369d36fcd44bb730e1acc6906ed720bdb95b38a42558246a7591e035828bef2807d96a31e057297d6af68a6a3c3cc6524c8393751af0926d654bc3a034c366c17118d21d1aa4af85445a8695c875514be4724ced9dba42b37b38b52b30b57745557b8d4e326f75d433a4d5c14769c2b73ad662e1ecc1c269c8289ce331528d5149adc312b84993c0f37b844be01330e1cd1ae107430a3f1113be5723fcd990c2d763c2f769840fef194ef8064cf87e8df0ea90c23762c20f68845f1f52f84998f05334c2ef0f297c1366e4a74635f2cd98da07356af7ef154eed4a4cedd3a2aabd4523395738a265d3bbd3effd14cebb936fcb939e4f2ddfc844e7d9992a7c6c48a94a972ebc863e43a75288aabc1ab3a63335d6f456c84c5083093f4b237c434853dd8a093f5b23fc8290c2b761c2cfd108efd33b9cf0ed58629e1b31316b31c1e7314d5b708ab0ce7a91c772c46a59be4c7997fc5222df2aa2464c5c574acf6635e0a426aef9baf71c69bd0dd2a6eb1c6b9fe65c0da3f5c998d6e7ebb4e633af7c10d76b37bb5d49b71ba2f32bcc611364ab7b4228bd7660367081c6069e0c69607558a42f8c68033b75e5ac707aac252d67313fd20a3178cff7a9d82a2c65672baf73b828ed32f96251267367053a5db1f27b972eb979dbfa1286b4adf936ceddb8caa1dad6f5ba70b8cd5ea6b1d98290e5d66e4cf8e51ae1eb420adf8309bf4223fc9c90c21b74c279b3866f2816a959d388a97d9546ed1743aadd84a97d7554b59b31b50f69d4eedf279cda7bb1b2ed1a5d81ce2399cea0488ec894cda282e2554c2973d753bbbe5295ced56ae145b55d9c978aacc94716b7880ac0dd3e629318fcd826e6121b9cabcaebea007317dae588e698bb994e8e280aaaa52fde0e71a5513c5503c2d15738b5b2e2845554d8d1cd7d58125dab49a2b12193683f9644d745ac7e0e6082afd7a53df766a8704e7627a44b98f04ec10ad61bb08295ef6b1a7ed0e2542c5e37e9e2e5ced5a89152d77e37866c161dc4d2ff665dc91232fd4fc384dfa211dea16f38e19fc3d2e4562c4d6ecb284d4ed785c30bbddbd331e28079be3330c17744147c2666457746cc76676182ef8a28f86c9d609ef677b364df4e2e208c6fe7399815dea3b1c2294784b3c27331e1f76a84af0c29fc3c4cf87d1ae1bb430a3f1fcb3ff763f9e7818cf2cf0598d13ca82bd3b8cfe926e71f1fdbaa13a5b5aa636b9dea84dfd92dba8abc3e0c636117625a3ca4d3a25f8b1679ce6f5ef3f2b929d73b28731d2ec2747858a7c311528719ceff2a562fd7f0ec777e67aec1c598068fe834e802d282af21e22da330a15da20b8d9befa31af39dd32f9cf95e8a99ef6398f93e9e91f95e86154d4f688aa6f6218ba6cb31429fd710fa2824a12b30e15fd0081fdc3f9cf02b31e14fead236a4f0abb0b47d0a4bdb2f6694b65763d9e14b4145537e2b174d87302d9e0e2e9aa6b762d1740da6c397838aa682562c9aaec534f84aaaa2e978115eb8f50ed761e6fb558df9761910ce7cafc7ccf719cc7cbf9691f9de8021e31f918ad21cbb11a3f30d0d9d4321e9dc84d1f92646e75b19d1b9198bc4b73591783f64246ec1d07f2722fa5b31ad9fd568bd786038ad6fc3d07f1743ffbd8cd0df8e45e2fb9a48bc1532127760c29fd308ef30289cf03b31e13fd0088f87147e1786ff790cff0b19e1bf1b334efe8120b45a9bd1cad5da3d98162fe9b4f0aab5fc56acd6eec5747859a783aad60a5bb15abb0fd3e0159d065d9957ad2d11135ef52147aaeed785c70df8558d017f18d2801fc00cf8879801ff2823037e108bc48f3591a81b1c2e120f61c25fd3087f31a4f087b1e4e6dfea8a522f3c8269fd538dd6738684d3fa514cf8cf34c2ab430a7f0c43f2ba2e07f0998ee071fae491dc6863f6eeb8a9d9a3f48f6309f4734d0235854ca02730e1bfd008bf3ea4f0cf6345c62fb122e38d8c8a8c2f6091f8958ed0d07091781213fe6b8df07521853fa513ce87817f934e9111300cfc458de05cb17750dbccd127efbcd4ba73f4bfd5f1d2ced1bfc952cdd147d7159ba3ff12664bbfd3e5b690b6f4b44e389fcae59fcb8b3495fb654cf25b51257f05ab1ffe908efd07149a5fd5d9bfd8e16a6b9bd87f943dd1822dff8f695bfedbc2f22705587eb49ddbf429f10c663cef44359eaf61c6f36e44e3f93a964ddfd364d30f8685cba6dfc0b4e65ffd4a6a12f12d111688ee508d5896a25bd094239a4b39217dcfbe89e9f1be4e0fbea74a38f9dfc2e4ff3962ea7c1b4b9dbf685267fbf070a9f31d4cebbf62a9c3f3c876d94454e951d3b2df47a69e81cf6291fc4013c9ba11e122f95d2c927fd34592e740e567e0b66713dd34c344eb7b58c87fd785cc5b84ae574d6ecbdeedb92d9be2943819c2fd004b180dbe8f69f00f9d0683b41aac147f35891d04dc567f66ebc69ec374f950a7cbb0347549dedc3b8c4e3fc00cef9f1ac3bbe4c87086f73c16e17f452c135ec004ff3ba2e01731c11f4514fc12c6f93f1ace0f87e4fc3226fc638df0dd23c3097f0543f2df88485ed509e6a5cf27e9080ee80cfd502798f7433f6db9e1eb87fe8f65d20ffd1186fd330df6e5a3c261ff311609f1694a5d2478a51d3e12af619168174b8ec4052123f1134c787b8df027478713fe53cc303bc434c5295f2358c6e03631d5a28dad0af2389b282abc5df277e22a841c71e6563f53c4f6170da2d6778bdc46562736c868647019b83ba8c41734eff6b50c54387c30c9ad62b7b614e739a230af0ee9daf7338c45471d0bbeb511dc6bce6d657a15acb7247b9fd0b08e41a7d9eda20aca492921df793aecca8dd73183e9a431980e210de6e75896ea8c65a92e1965a95f6091e8aa89443c64247ea913ce8976d3a53477b0d70f91ae9783ab7ce50bef5db85b1405a5693cf0ee44e18eea0eab7a769d9803ea8565a821d4c47b4dc2ae9a34b9688bd0507d0dc1935d2f7ba761eceb0d2c69ba6b9266f1987049f32b2c697ae892c65dbae966b3cc5bd8bfc6c2eca90bb3b72c04f14f6f8409fb3718cc5e1a98db43c2fc2d96597b6399b54f4699f54d5d385cafbeb1e85fb8f81d168923b048f4cb2812bfc7aca0bfce0ab8026b9c6c572de7277416d118ca12dec2c21fa00b9f630c23fd0f98f4813ae99d5bf2556e069b5ffc11b3e9411a9b3e382e9c4dbf8d091fac11fe7a48e1ef609486c4a2b5d3dfc5040f8d28f83d0cc7300d8e6742e2f8934e385f1d3e3c1dad4fc705bf8fe118a1b3466eecb9a1a8fc19937fa44e3edf453479967495a822d50e3bde9d7033917fc13419a9d3844be0c3e461ade0af582839ba50ba31a65d791526c40f3421e68acf54f06d68b2b571403a9fc7d64f018c8af1a6642218516568a70146c7f834c080a498057e451a21f7375d5af1d331b1e4af5c1fbbeaccce370f7fa95d52d274c493e6ef98318cd51903dfda93bbd034c80a6c136b9291aa0d69eaffc0c21d8735a3f4e1ee92bdb830617fa833c723b36d8e8b44fbbb2103731c1fe39812114d438c7102628c41a163c6f84f1d37f1f58f4d59e406bfd25d2eb6c5ac75ae94885e8d6a4a85671a8f85dda97ca2203b2629e699ea8751ff972ea7f0becca458c4f9bd7f6392274795fc1126794a54c9ffd149e6ad92a9fade43a815231f6385d2b4880dafff623c72a3f2f804939c1755f2a798e4e95125ff0f939c1f55f26798e41951257b83c03ec9055125c77492b92d154634ba7698ca4551556eaf93ccdb0633d35139e0c34c1d3095674555b92346797644ca9d30958f8aaa72674cf2d1512577c124cf892ab92b26f998a892bb61363737a2cd75c7549e1755e51e98cdcd8f68733d31c10b220aee85095e1851706f9d60ee2eb6281dc16fe382fbe804f3f6c0e256680ff4c54c634954d3384227993fbf341d1e0153b1fd30d0cb2282ee8f99c6f288a63100135c1c51f0402cf58e8d9a7a83b0d45b1131f50663a9b73262ea0dc120af8a08792826787544c1c3b0d42b899a7ac3b1d42b8d987a23b0d43b2e62ea1d89412e8b08792426b83ca2e01c2cf52aa2a6de288de4dc1ce734c63721ccbee3716b7c94397868624d3a69310927361a4b8bb551d3628c4e32cf20c7a7a3f2c5b8e0b1985dae8b6897e330c12744143c1ecbfb2746ccfb13b0d45b1f35f5e2188b0d11594cc4046f8c28781226f8a488822763903745853c055379734495a762822b230a9e8675b4b644ec68e5621a5745d4380fd3b83aa2c6d3318d6b226a9c8f69bc35a2c63330c1db220a2ec0506c8f88a210d3b836a2c64558cff0e456e819cec470ec8888631686a32e228ed95811b7336a117714067a572b803e1a53bb3eaada7330b577b782dac7606aef89aaf65c4c724354c9f330208dad00643ea6765354b51760929ba34a5e8865f2bd1133f9224cf0be8882176382f74714bc04137c20a2e0a598e053220a5e86093e35a2e0e598bd1d8c6a6fc598caa74554f9584ce5cf4555790526f9f4a892576292cf882a791526f9cca8925763fde1b322f6874b30cb383ba26594622cce89cae2384ce57323aa5c86f5b4cf8bd8d32ec7049f1f51700506f982a890d760902f8c08792dd616b8a815da02c7633c2e8eca631dc6e392883c4ec072f6a51173f689587bffb288edfdf518e4cba342de8041be2222e48d188b2b23b2384937663cca398df10fc498b059cb7a3902dc7aa3c657e998691dd9ae8e7147b65c1666c3964cf4c51cdc36e9929da7cea174929d6b8f08deac13cc4faf89253bcfaa9f30ceb3955829796d2b94925b30e1d7b582f02aac74b83e6ae950ad93cc9fbf219dd40c985dabd109e64ee437a62378346e265b31c1374514bc0d837c7354c8db7592f95a8b5bd2513960ad452da6f2ad51553e19cb8cb7b55266dca10b80efe9707b3a4cdec405d761b0ef88087b2706fbcea8b077e92abcd1ce698c7f89b62d3cb5558511ce2bfbaeb42bb1bb452536242976e9e880554cf558097c4f2b94c0bbb1c4bf376ae2efc1d4beaf15d46ec084dfdf0ac21bb196e50331cda290c5e2b4cc319672b698ad68d9b36535e36b7af78904de21937e9a583e52ecdc2f71eeec1226cdafe8db2fba397dfe34342d6ef8f5cc5de81d6e7bf4262c960fea62795e4b2cd7382d299ee9dc0cba53fc5d2cf7d16d104bcadd0c5adcf2e492966d9212376268903cca99fbb1c845ac59c48bcb4da4e749e0cf87d3039354c1f8c2936de26e22539859fdbcd73a72c22e326ac6483f84d9130cd18dd30ce71d9756bd53286e726ca341a4b91bdb0ab935955f5bef5dfc7a6bd9d35e2c960feb6239d7174bc8dc8de752f9e1c44a8dd527a610bc139457e05b6162b60f8bd923ba98cd4b2bfd1688ed186a995a8c133de5bc3b61e2b61f8bdba3bab815f9e2b64aa4ce7619337eb6bfcd6272008bc963ba985c92e5f2cc7b876fbc51e7483dc0f8ba5c6f3fafc610560ed9e1b1e07549b36866c0528f37b05aaf6c3b05a3feb88efa82b4f2c64ae6ee0c6f42a9762a16bf2774f15b496855fcea1e110c8f95db1cae1541d7b25358255a926492aa07b1587f5e17eb6302638d6b5a26e2e26e40e3c651d5c6fc6a9524949c2f324fcdd3b0787d4117af1342b7eccac59dc4b69d4e827badb4a51c6870ea03ded589d212cc249d3f87f17852c7634556ea6ceadafc742cce4f61ed947036a06c98ef52502504c1740e6b116162760616b32fea62761412b335227fd6c9b689dbd556bd96b532175727a5064d1fe54c2c465fd2c5682961e9ab52d55deabf85b95bc0b65e4ccfc262fab42ea67318364aae2b29126300bfb4c0992c17a9dc207a43554e8d7ba01563753616ab2fa7d327480c17b610d6885468709ee5f9705b40ed9728a3f562760e16b3afe862b62865c9995eaf002f4383faac999694e76271fcaa2e8ecb509be42dde2dce432aaeeefe2ddeb76f82cb12bdccd6ae09cfc3e2fa8c2eae35c4bd8726b933db36d93b582bacbdb6a5e4699dfe70269ccec7387d4dc7694d9bf5b2820945e77001c6e1eb3a0e0b43e60d1372c485580cbfa18b6171c818aa0f3aea53a42de27b1116df6feae25b4668d98d19b4355a83c0c518816fb5561bc42ddb168016087dac2ec162f56d6c84226cac968a279253c85fe6a42f374cfc2ec5e2f71d5dfc8e8ed0726c12b511df3868abece7e1b1aa487a364c9c2ec3e2f46cb834f3973df0131ba92c8fb2f6b81c8bdf77b1f885e933ba715d26db11de5d3ee311dc3a6cad96e31558fcbea78bdf58163c2a58e110a6d0f24a4ccbef078fed854985f28c5281d2f6aec262fd9c2ed6f807b42a5aa6ea6119e16d68ceebc3666d5b2cb3f1fdab31bd7fa0d37b76ca1e57b1981be4a38f75623beb256ca7d81c2db9ff1b940299f7200f61f1791e6b4106e711de1b2e15adaa464dbd9ace5c82bb1f70ebc5f01a2c862fa4d347d6cf0d140bdbe3e3e095728c2a39bdb2393f702d16c717b111aa74c601d28965662546e631bd0e8be94bba982e4f2b35fd333d6e3e54f16ecb74bd1e8bedcbbad8ae4b99aeb423e3d463e63760345ec97c966f8941b9f8462c7eaf622d017d9d18bcc7be57efb83d06be5733ff2442b5786f97fca0823edf52c4fa262cd63fd4c5ba3052ac610cbd7badd332b8198bc78f74f1b88cb5d59854e2cc7fb990502f9e0f33f75f2eafbae3806d3bfb7f0b46fec7d88c93de82923dfbdbaae7792b16a3d7b0f1cdd4a353e9d4ece98c71851f07cbbc6cb80de3f0131d07fc63a3f86882da32bbb5eaa8db318d7faad3787cca1adb9bc7ad1157b99f53eb945777609afe4ca7e9cc801e98dfd21335df2d7a03de7838457eb9138bcbebe9f83662eddf546d836cb77defc262f973cc4f225c39e78ed524df4dae17d4eefd787a264b592066da78bd1326ce776371fe852ecee37c29eb85499d9beec1f4fca54ecf7c9f9eb07cf2ebbc4cea9c6e4b2cd311dc7bb118bca18bc106c2f68b1a330c9a7b8416986ece53ef84a1721f46e557e9f80ea810c3942a5eccb01cd73aa5c9fd58cc7ead8bd9896d9cde61d239d31cf00046e437e98ca2846d6b45ef47679ef60f6231fd6d3aa5d52291aa6e0a3681d171d70a8a58418af8e94a32fe5698183c84c5e0cdf4c7027898e1c702dcf861d75b2b851ec6e2f73b6c2c20b845e37d7cc3afa3faf8099ebfb00f7704e5c9cc6afb47b058ff3e93d1683755cb9d87b730b7efe68d0c441fe7c9ac9df02816c3b7d2c9797ac299b51352f7703a3bff62e24b914b8414776cbf5ebcc35b85b9fc7b2fb1bc969a615a4b893f2da176f0aef3f0773aa9c1f344454bd9ce9721064bf88303a7533be6fe4c901ffb722bc4d856e65fe6b848c8f77f51709a20e47a44f3e59bd39c5660ad784b2dd84c150b5d2d370dd4733076a9e3b41159801913df1084b21cd27c72f2b08be91f79aa8e90a9da2e9737de639333b4a6d45abccd436bafb7a141496461eed0e9ee0a582d470f627cbf8d4d2d438e350c5f6e903264ffdec9fe90a70a01aa3d9852dc1a5004e8c40d11e6e6ba7c36307722e40d4766e78eedf2788abc43898d2f515e2cda7dbb1d70eea8a5aa7330808d5620e4c5b942f82e25c23ece89ead62e17ce005c80f705e312b6c30a608f77f180bd4709ac3f733f9f97c73c1f379bc1f5e9ee81fb1325b82334e0b840feb57a3ee5df2cae565b016d33f3a0bd4f6d6d89d973a9f3bb567a532a9f22d7ea6c0017efe181fb3325b881a23dda9876b56003bc43a052f80b25bcee20ab96248cc0d88069f8700fd35f2931750598bc85203620ba60a087e8034a449d04a246abcaa80e3d3d387fa38433d839296969f3ab892ed7c9a64c14facd8c2f2fe0c57ca91c0ab201e0932003fe9d1260179001b99a7ceecf0640aff6f500fd83ba842a1183edde462b76b4b00e021bfa305b36a4d6f3d800e8e67e1ea07f5202e2db08aa26e812b65fc4bab9a5ddc49d1d5d87a8326161d5c2deea9c006d80c87f14c47f5142e4c354101e1fe2a9927e73cdb2356f77e3b43f18f4f93725ca9eb24c53f67640d6986b44ffd10654d783b2ed23fa06aaf2a353e3e536207a6eb487e83fd9ea60f3fe229c62567d469b1aaf1f75f6c07d4cddc186e0e07ac805a2cb0d6dce924607180bfb2f25bc1ea0d1e12def731715db00ea49d080fd847a787a95c87e3b7cbbd52c761e6f1021d9006c733b0fd8a7d91d304c749aa9b6ac3cab03e3faffa31f9ee675e56211b4cd6db1e73a7ad03ea384c6f79f5de3c8aa967d4bdd220a3b26dc0e8ef190b176c4197489c0d22c02f776d8f2765ce32b6a6a9df06c00f716b0b51825b85ea064b375de883bbb2858eda8ad4c3914d40b3176f72ee7002b6b4f098e8fc99639d016b1f437abb401e005a25fd0b9a34fb8df0b35739fa070d471efa5decc1d29d92dae36c9264b8237135ff6629ce61dda016fa478c6a366f194e55c3ced99f478e859d078862e35f1b41aeaf188c360f1107e52f15045603cede65f3c54051ecfa83c89871a9588876af3c7d3f2f88987727389871e0cd0e98c3b36c493a611e3813de8b8766228ae1dea8f23b3b8f18049f03832af124f313619cf68c62f8e0ce3c5d36c7d7b6eb87af7d93cee86dbb1ddffdf1eb27963990ba013ff6e86e80388b64667eab606b730d7219a97ffc19b394d776a7c9f0ec3937448fc048d6a53e8b4e99ad0eae8954e0433697974075e2b5d4cc2996f25ce6300ceae26e19c6125ce0a80b35b36706e438142f537b142564487b30715ce479887b3bb49380bacc4791dc0d9c3249c33adc4f94780b3a749388bacc4f90380b3974938a75b89f33880b3b74938675889731fc0d9c7249cf956e2ac0638fb52e2747bbbee962fee185971f2e87eeb01eb4b05ac1f00760425b001d2feaa643fdcbf07005c5f9e4707b22315c8bf0190fd28418e60de884fbaa36f9ba4ad26cda65bd0f75904c0f6a7043b92c1e1b8f487a36d863b0ac01d400977200beea74371bc694486b23315ca18e8a30fa444d95ba22cf20175076af94364f08652c17b0ad8e1a06cc09b957d786496f70a80379812dea01475786226261dcc2083f9670073884930675a08f32f00e6509360165808f30f00e6309360165a08f37d0073b84930f32d84f97b007384493009e77ac860be05601e69124cc25e3919cc5f0198234d8269630fe7d700668e4930675908f3af00e6289360ceb610e6df01ccd1943027499875ce4375e2a8fff274b82f911396acfda8909f08863bc65022ef26906f179e6aaee7dc3601cfbec1b61ec04ac7b6e5605be24eb584d6773a15ca3a607de328514e48caf09542d852a63ebeb6d0f9cfad73af180e6e66419bcc92c2262b5da703d8e3b361b7e9555536a23c1214011328511ea92902d2fd280529da8ba9d08e01561aa7b6d205626140bd7487e67b06abef1171c769e524eebadedb57517500563a9112a55a2332ddf9bf53065e29ea777ed5e631f9b300c249d94038f3b043f81580703225c27ecc9bf85547ffe78b6d9de07d1a409c62922336a9f71b19ce61a092996a124e52772d329c0b00ce6926e124752624c3590570e652e2ecd3526fe71d46f3e8ef80b232cf1c67181b07e486024b9c9e0d94d01b6ea5d3085f26572f6e755eda9f8d1a9c0ce57e6095f9f403c570886d13db21d02d14eb1c774851fc8bbafcebaa84eeae647e463d01cc19d9e87f378935d68dccfff95875d48d1e4da79c0426437b13405b908d098d743dd909cb4f323ff66300cc429360124eb591c13c0ac02c320926a1e30c19cc020073a64930095dbac8604e023067990493d0d9900ce66c0073b649306d5c483513c03cca2498848e336430c70298479b0493709e870ce65000738e4930099d0dc9604e04308f310926610f880ce63800732e25cc1c963c7e14cee388b07e27f3389a05c694e6b5a5c79c7fb098b014251b2a8e035b9d6f124cc2fa9d0ce67400734136c6ddf968e75ea6bea09ca5895e327c8301be8594f886007cc98e5c5c98b75cdae6898ce701d045d9703ec83bec9c0fce040817670361d16187f068807089d9cd21c2514db2e6d046d01c5a9a2df7186f8a0dce12914fae914d5a9c016c749939aead36aea89c03502ecf562d9e6a8b609b5db76601a0c5266d0d5568e550c7fd00e7b126e1245da64a86f3728073854938675a89f31700e74a9370165989f3eb00e72a937092ee8e4d86f3588073b5493849b77326c3b907e02c310927e966e3643837029ca5d42dcff43ed5512654e31f0b216c79aea0023a03003d2e1bbb71cdf0f5dfb330ec41b60e6d27805746096f184b77895fe27a5f427784b7a9a09683c18e7213a112f6d8c9a09601a81526422574e922833a1e405d632254c21a9e0cea080075ad895009dd15c8a00e06508f37112ae1543019d47e00ea3a13a1123a2b9041ed0da09e400975064b1ea54f5cb7b188799fee722392f821b0c4af0a7a5f63ab102d5a355c4d9808d3c9ca60e625c289e6ac8eb3718fd9fec09ed79bbb0a89d0498c6c42ef87c04a3798b3ad1ae96a77323b3d15c0dc68124c1bf742be00c03cc9249836ee85bc17c0dc64124c1b67ee0f00989b4d8269e35ec8b50066a549306ddc0bf96400738b49306ddc7bae04c0ac3209a68d7b21970298d526c1b4712fe40b01cc1a9360dab8f5ca4500e656b3dd6e6ddcf7b83de8bb6fa3c4db53e27577b1a913bd7857762de5d62b641fc863c02eb7677bebd3f4873d6cdc7a6538b0c9da6cb9deae12239a3b7c239e8b9dd71a448836bbde0e03b67a3225d05e8199bc910e5d372a74ed00ba1d6de9516fff4af70100655d369615f26faf1e3ecb0acb00be9d66ecb5edce1eed1616ebce0b915ae69b546877800a679749fb76927626c92cb50bc0596f12ce7c2b71ce0638779b847386953857019c7b28718e61c90bbb96b0fd8cbb2e3433e55a5be2bcee7e71bd4c8075b7dcafcb4e8b93ec3becfd4165d560924b78a1951bab3d0870369a8493f4d3a36438af00389b4cc239d34a9c6f009ccd26e12cb212e7b701cebd26e1249d5b27c3b902e0dc6712ce1956e26c0438f79b8433df4a9c27019c07b235d6592e5a95cd8ee4058c7fe469ad5cf2552d967cd5583dd6b909003dc51cbf4e1bdd157a809ed2a9d998c754fb80b98b10b788aea67ac8f6ed83aa805d1eccc622c4c3e953267301bcd3ccf53026ac80c826dbee02683f970dbb9c997dbb241b38fe2280777a36e0cdce3e3c32cb7b15c03b83be7ad9aed953a9dc6152c5aaa4425bc50a773ef4665fb3a73b8079a6b9ee088403c664763a083483ce326753351bbd8927032b3ddb8c394cddf78209d192edd37002b0d2734c9a2522753b242b4f27009ce79a8433df4a9c2b00cef34cc239c34a9c3b01cef3b3d1334f6f9023df4a77ed3500e60526c1b4d15d7b1d8079a149306d5cb05a0c605e64124c1b17ac960098179b04d3c605ab4b01cc4b4c8269e382d56500e6a526c1b4b18bb918c0bccc249836ce002d01302f3709a68d0b56170298579804d3c605ab8b00cc2b4dea5092ce02917528fb029c57998493b4794486732ec079b54938497d8ec8701e0f701ecac6d78b0ad9e1f6f5a25b9887f09a6c78bda71e794f5e3db4c011da20965593ae23ba3a46e57b04ecf45a4ac82324e43ae7210eb8462e2bf01613241603d04f8e102cd972827900ec75d9d8044081559fd54b9c360e6a4ed9d8329d0af05edf96339c59dbdbf3742a947f02e5ec0d9428470994c5ac51ac1be22e0cb562a69dbfee59eb26f9d1a8856247cf1df2fe52e758e38825dc7781ac2dd01500bed11cff4e1bb3fdc700e54d9428fba740a9624aea1f329aaad6df0a4acf9bcddea1867074946c879a1900ef2de6fa7e124ed6917936fd1c1400b766a300c0ea7daf00202c47c90a800f00c6dba8f7502a953d7ae51f5f2c2c93677bfbeaf23e00dcedd9b0bfbc161bac161d527709b6ed3b837c1960bc837a6099035b2c026ed38f45ada682590860de998df625fc7abbbf9b69f798d30b00e55dd918b62b38ec86edb6038477676344895be3125147370b25f897b1ab44262f61fbc4405d8350abd609d7e665824500ec3de63875dbe858530c50de9b8d453005be5e90cd75771380779f49cba90b29fbe264cba9ef0038ef370967819538cf03381f3009e74c2b71fe04e07cd0249c4556e27c12e07cc8249ca4dbf691e15c0a703e6c124ed27de6c870d6039c8f988493d4e18b0ce77a80f3d16cec1ecb3fe27cf8ec1ebb18e07bcc248f24d2af5f91e1cc0193128f9b8493746d0619cee500e71326e19c6125ce6d00e7e729717611026ac467411b98ebe2659f77512750367e8112d70416e67bac7c18ae598884df5de5d4b2e074b0940a761e80fd64360685f988e632c64729f958e636312cdc60f5d8650340f894392e3036aefd1d024aca2f52a2e41f3f281599b89a29272d6c028df03b196465681760935f32d54b83b4e743e6a5f13b80f66953d1920e7990a1bd1ea0fdb2395f6a9b61e56af5e700ccaf9804d3c649b59f02985f3509a68dabd5bf07603e63124c1b57ab7f1fc0fc9a49306d5cadfe1d00f3eb26c1b471b5fa7701cc6f9804d3c6c501df0030bf69124c1b57ab7f13c0fc9649306decb3ff0cc0fcb649306ddcafeb9700e677cc5ebc42d827225bbc5208c6979ea51e5f0a1aaa73552f12be7384d511d9e7964f0620bf4bbfae3211a43b50cc073a76b163c598fceec019761bbfceda1e1404df33c721d6c6ee662e40f97d933c3f0a29ab2832cb7c02e07cce249c0556e2bc15e0fc8149388bacc4f92380f3799370922e4925c37902c0f9824938499bf76438cf01385f340927e9eec66438b7019c2f51e2e4be036b1c59ea8b6caeaabc37e4ba2492a11b4585ee0880ee654a74fc442d92b66f46b237c0f48a4919b690727c9d2cc3de0970be6a12ce022b715e0270fed0249c33adc4f93ac0f9239370165989f34b00e78f4dc239dd4a9ccb00ced74cc2493ad54b867337c0f913937092eef34e867303c0f9534a9cc359e296909c4333e35315fe8d20fd8b07088781c97c8bdb8171f69f51621defc3ba85253b15a6ef7e48889aaca95f0d50bf9e0d4ff859ec70db1ee56ba010f879365c6395b5360afbe345c05209af463be166ef96bb4701ebfc85398b0c6cf498eb0550fed25c076ec2f975b232f4f3a00078231b7bcf4cf7d9aacd1f609e07e0fdca6cdf0f42774432df8f3c90ed7f9d8d063fdc494e97c5edaeeb5f04d6fa1b4a9c637d757d1d83cb06f5df3258265fceda06e693a8308f0256fb5b73fc406cf4ad5b052cf6cd6c7eb58067fc6adf72c3c3afabfa6f80f777266d1a403adc47b7b13ec8f8bf370927e9f81419cea301ceb74cc2493a7a4a86b314e0fc8349a3a78594cb0bc9464f1f0565e71f4dc2596025ce1b01ceb74dc239d34a9c6f039cef9884b3c84a9c2f019cef9a849374ef2f329ce500e77b26e1245de94e86f320c0f9279370926ea54686b306e07c3f1bfb244e6f8b3151b23efbbb00df9fb331a0cc03de2a2c51c9de251fb10f5e0cc0fb4bdbaf7653958c7d936f7d406fe7afa680b47116f33fc0223f300524e1640619c839c022ff660a48c2810c32904500e4df4d014938ab4e06b21280fc8729200997ab92815c0b407e680a48c2a63719c87a00f29fa68024f4ea2003b90580fc972920096720c940360090ff360524e19e336420f700901f99e30d67e396671d01caff98b37d4fa195bb74fd8379303fa61eaef0b6212f96406b9d97f90255fe9a7dfe6fbd00bcff66e3e38a9e5fa6de8ba8420c9b71b45b85b09db4bdee8ba9c0ee02603fa1043b86f95db55cef37cf299b0b74bfa81a94f96dccfab9a01cfd349b0b605ca0dc1f8e17048bb535bdbd1b4d6d0658ff678eff9b8dbb1e4e00c5c067d9f07b878da6f44b5842b46425ec6a60a57cebaeac65fe5a4789b5ccfb2a16149e35e7d7d3a9b06e0758639458d5ec4fe1613475f630c8eeed28e1a9867d7a7da4e9566e725a002cb1bd49306d74c49e0960763009a68d9f79980460763409a68d9f79980260763209a68dfb6ec601ccce26c1b471d1ea4400b38b49306d1cf31c0b60763509a68d9f79180760763309a68da348470298dd4d8269e380c74800b30725ccf02bd208ab20b2353f0301ce9e26e1ccb712e77c80b397493849bf834586733dc0d99b12a772b4e673e787cf07e917320f5f1f4a7cfd19df0fb652eed9c545ed721edfee3c5e2f8688e19757edc3d81160ec4b897124f3369970e77e3639ea363aea54091e7c6a7801e3ebcdf9787ba5238067f06a66f387962b00dc2328e146dbb887b0114f36f77e1b40db8f3afb0755462aa6a41316a36354ab7d4025d49f12638e0663b82d7c084794c8b6f0c9077807985b00104e709015003f0605c0404ab4a304dae5c23ecb189f9dac91d555b510a5bc43768804e0765ce5fced8a5fea1c6b1cb1d516565edd00e041d9286131478645c2628977e99c4055c27e08300ecec600096c60a9d6aad77eb5bb413508c01c420973840666ea22c05eb04b00d8a19460d55eb233d8e1b697ec0d00e1304a84e11cbf6c9c225e0e500ea744393a04ca72274c2ea48995387fa91e7f236db53491aa5afa27403c8212f11096e800b65b0c976c0fb4591b27428e034dfd23b3313a9afe0653367e4ef476609f234dc2596025ce7301ce1c9370ceb412e76b00e7289370165989f30b00e768937092cec993e15c00708e3109e70c2b71ee0038c79a8433df4a9c27029ce3b2d1d5cc13bfdd239f712a676e7fdedede7a2540383e1b5dcdf49c6e6c74a01d009aed13b2658d6e77930bda2f2d310b031f6f5321fc2ab0c67836068a39c29a96b5c4eab6ede347df0218276677aee870ff26c110807692a9d370a4b539d934dc6f01dac9a6a2256dc693a1bd0aa09d928daa29ffb01b931f0f104ecd868f1ddfca34eb3e7664ee0b3900dfb46ccc5da637a5916fe5a4c63d0066ae49306d6cb6df0b60e69904d3c6756fd70298d34d8269e3bab7bb01cc7c9360dab8eeed108039c3249836ae7bbb06c02c3009a68dd3bd1703988526c1b471dddbd500669149306ddcf9e33e0073a649306ddcf9e331007396d9fef184199fac83d90d8cbecfcec6d0f1f4167bad16239eae1397ed6be19e01567a14f5b653dc01967f70c41d1076019632be1a6e0b23fce8c8482a787d01bca34d9ade2da4ac7ec8a6771f0738e79884b3c04a9c37039cc7988473a69538df0338e79a84b3c84a9c2f039cf34cc249baa68d0ce73a8073be4938675889f3348073814938493b966438b7029c0ba95b996a3ef270d9dcb40ec05b948d252ddc4966b16896ef769ae735b2c7e32e64a911022b8500b87d45a3d55e716300e2c526ed4f43ea7e4086b333e89b2f310927e9803119cec900e7529370923a6593e15c09702e330927e9fa20329cbb01cee52635950a292781c99a4a0f81aaa8d8249c0556e2bc12e03cd6249c33adc4f91b80738549388bacc4f92cc0b9d2249ca4bb7692e15c0d70ae320927e9369364389b01ced526e12475ef22c3b919e02ca1c43991f9f74de07df96a87079f7653f1f416bf6033ef0b9cbf1ac46431e9da8dbb6344c077819669292570f50952cc9d21b164250349f609d2d1c0728f330524a14592811c084096990292d021910ce4d90064b9292009dd64c9404e05202b4c014958bb93817c13805c630a48c2250564202f0320d75282ccf335939ad16580f842d745ce133b1d7deac5198f6a961a4d5753359a4e028da6e3b3e1039aeee828e1bc27d9d8680700739d4930091d6ac9607602304f3009a68da3f6ff02a5ec8926c124ec1f91c1fc08c05c6f124cc2162919ccff02981b4c8249d84f2283f90980b9d12498842d5332989f0298279904d3c66f18fd0fc0dc64124cc20d02c8607e06606e360926e1060164301968675652c2c4778a5feafcae65ee578c2a1c015cb0fd3bc51f0fac740b25d8e102ec4ae7812ae1aa08d7bcb5d9d736c856c2750658abccd9d2cfc6ed2c7a82ac5f6dee965484f53dd996540f002bad317b392c61af89ac1098062c772b25de7ea0d2da2b2a25ee0eee7e722f4b8b614fa782b805d8e8b66c383cc09a1fabaec8eb7b329b1c09706ecf46699a9ce5d3294f6ddce0ef0890dd6bb351e763b34d8975be8d7bdb4c01567a72369afb99d4f984e3f564367a2900bbc354b0367ebff07c00b6ce54b0367e19763e00bbd354b084ad5332b0f900ec2e53c112ce3c91819d06c0d69b0ad6c606d6700076b7a960094757c9c07e0e80dd632a58c2390032b0a700b00da682b571e46a2d00db682a58c2d15632b06b00d8264ab06a8bf542d6065bac93e13b1de06b36670cc0c68d2f5702947b4d5a124eba1911d944df68303ab5cf249ca4bbe790e13c16e0dc6f124ed2bd9dc870d6029c07dad259c23f766ae366d61b04ccce1d7dc29726095f242c2771ef4fde7f5dc6b8dfbcbbad509573be52347d9ad866a7ec5beffc0b97021b9d7fbaeb31b133d412b69fed1657b9bc6a217ba773976bd6c8f2f8275f4ee106d1451a445c547d0b1ce64dce337cf7521efa0156cedc4d914a9cdfca55a35920898bed624b9d6bcd8c4f32f21076399a6c670d22c6899b26c5635d0427f78b643c5e1c605ceaaabe52562c2bdd5a27ce95429306e7990e221c373fc6633dc1999a8d2b164dc646a155eadd57e3319ee1d6387caa452835d218b85e6e9b8927732cd657a62c8fd52a41a452be51e9589b0a3b7782f358acc8f9e53661a7b5345ea7c935133be599ba9e5a264fd76069a7f2c48be973735dab5964aa1879dcb60a1f931a21b538654c53c70fb7ee1e01a9921be7697138c7ff204f7799ecc24c07c5bafb8cb9c479b85a283576473bd6f1ff01f4f140439a2f0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/8055898f61972ba49aaef80c72d2fba3.asset.meta b/Assets/SerializedUdonPrograms/8055898f61972ba49aaef80c72d2fba3.asset.meta new file mode 100644 index 0000000..9a80433 --- /dev/null +++ b/Assets/SerializedUdonPrograms/8055898f61972ba49aaef80c72d2fba3.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 97c6e8c3f8c9da34b9ee9271d383175c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/8175c20f542fbaf40811f752bfbf8759.asset b/Assets/SerializedUdonPrograms/8175c20f542fbaf40811f752bfbf8759.asset index aac202d..abbcbe7 100644 --- a/Assets/SerializedUdonPrograms/8175c20f542fbaf40811f752bfbf8759.asset +++ b/Assets/SerializedUdonPrograms/8175c20f542fbaf40811f752bfbf8759.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c15c7d6c0e702c109ee50a0a59052200950a01429105c4b0215da420809a424902641eb2d2d2d757777777d75777777f75797c7376776363977ef9c7befdeddb3db7ddf233f32593b33e77f66cee8ce36c815f25f6ca0fcb540cc1313c560315f2c15abc44af9d7441956ca1febc83e3f5754cb7099fc5d2caf0d14bd533c09fffac7bac8dfd3e4518da8954fae1625322c57d70b45a9fc7b9a7cb6541ec1d932f9bf54de156b241f9a2f0ac41c315b748e754c2162817aa8469f8b815eb1a6f2f704b15e5e2d5589824872d5a5cef257a1bc52a3ae55ca44dbf72d147b29b52ae5b512f94cb5a890329728894dbf6f2fd41fc20a3e95ff1bcbffdfebe3d774f8a53eff83e3fc57fafc8ffab8910e1bcaffcdf4df0dd039b8f7dffaf8231d66a17bb3f43d3fe9e3c63a6ce278f6751dbea1c3a6fafacfe818d2f29b3e6ea1c396484e16bade4a87d9f8fa962d5bfe72a4b5354a6b6b1db6d1cffce2b8b72dbaf7631db643e7daa273f0fcaf8ee7dba37bdbebf0337def6f8e7b3ba17b3be9b083bef777740c61471d7eaeafffe190d519c97a45875df4bd7fa27bf0f9bf1cbc3ed1613724ab9b0ebb3b74f9dbf14c4ff44c4f1d6ee548f37f1ccff446cff4d6611f1dbea99fd9e278661bf4cc363aecabc3b78878faa167fae9b0bf0edf26e2d90e3db39d0e07e8f01d473c5f08956f1bcd74c81884640cd2e1601de65a325429865fef6a196d1c32862119c374b8830e872319b25c342a703c3b023d3b42872375b863fcb359c2f16c1e7a364f87f93a1c42a4fde9ccd39e107fba69c7cf8c42cf8cd2e14ea2def7999e19839e19a3c3b13a7ccf6ce7ac6b1c32c62319e3753841c7a7fd63d6eb8e6726a26726eab0403f03be1797cbd7ad781b8fd6c793517a6c1953743855c4fbdc693a9c2ee27ca89285e398619069e7e759c2ec5fbfd0e15c9dee8628bdf6790867ebeb8dd0b1fcbb498e43ce170e39853a2c72e8a4edd0a4b73e5ea0c35de37554d7b3743c38ddbbe97077875cdb97ee8118ec21e2ebb6853adc3309934656955597ef20fc46871bb48e59e818c2fd74f8be0ed7e9fbecba74ad0ef74669db1bdd0be122fd4c13742cd3d2e2047dfca50ecb0c32d6a073dfa073102ed3729ba2e7edf3102ed1d79ba1630817ebf3cd5dc6bf5887c58e73a0cb7297b2ecb4941ace2dd5e96b818e212c11f1f9b044c76da7eb2b1d2e4f11b7cda71c9db3d35d93e6b3b5e85c8de35ab5837bb50e57e9f32dd131842bf4f9563ea4c59659653857a1e3c9f6319e7d0de72a753c769b6e058adfbe0ee14a1deea3efb7ebd8e58e78edebd0c6cbd2f6ce4279ce4ef37a746c970bf03376fbce2e3fefebf020115f7e0e1289be01aeb7d3c787e970a30e3fd0e111fabef6567ccac760df73940e8f44ac8ed4e126fd6c07742cf374b6ed0bed7a69337af6531d9e82ce9da2c313457c1e3b5187c78af83c669261df7b92e1dc71223eef247bfe64c3b9e31d79e25824d7be0ea1ed138f71e489cd3a3cda71dd6e7f6bffdecad9d6390da5c5f60f67a073a7e9f074740de476b26c5927cfee739c899e7d558767a17376bc67a37367a2fbec6b1087ddee3f4787e7eaf0431d9e2fe2f255f6c1fafc053abcd071ffc5f87e94ffec727e134ad34d3abc413fd3451f5fafc34bd0bd97a07b21bc54c4d767975aecdb9ca18fbfb58e5bb7b1d2dda6ca918eab44a2dfbdc910dfd5e8dc55e81c84578a781f7ba50e2f17e6ba2d93382fd7e1158e73a0dbd7846ed7a419cfb5e8dccd3abc0e9dbb06dd675f03bdbaeae35b106ba7ec1bd131f283d98febf3b73a9e35e5952790dc2774f89823af3caac3dbd0bdb7a17b21bcdd91576eb7f8b57f591f7f671db71d6da5b1fd358e74dc6de0f98421be7bd0b9bbd13908ef72e4957b75f82ff4cc5de81c8477ea67baa1e346287d0feaf0be34d3773f3a771f3a07e1030edbda7eeaa134653f2c127ddc0be8dc0b3a7c5187cfeaf8baa363089fd4e77b249165dffb9ce1dc53faf99e693cffbce1dcd3fa797b7ce24924d7be0ee1333a7c44c4d7110f211ef8ba3d36f492a8cf732adf237bda2c1f47c7a8ecb4b1fb192f3b6540d9c98aa93ed454d99a2d962daf5c354807a313e90e9bda4fa61e3005d18de117fcebafa2ad950d9f2a29c0306a395f8d89d68aa1628871d4b2ab6a27d8b14f54bf8be51de54a2844e688e2ce8428207115f2a7140db9d6c8f353d4882d0cba96cb2b8365a7b55c3db558e4cbceda4287940532da0ab15a1e15c9df554ade6299ecc43b53a904c3b3ce67e64999d6e871a53c6303ad92c7152a8585eaf71a95d25295fa69f25cad1acb5e299ba11364b84ec596a87bb5fcdb14679146664ea37910993a6f0d55db662a90da40ea73553fe87f1609c3226af8bd57cc2a868d72d508cae6044bfc8fa1e5646050659a9691af90c5e2ce0d11b96adc655e0241f73a266a68cedfa978ef95840c98bbb3d2a0dec2f02f2b5eada122570d13f548a15632a8202f47f546dc243f2bab511e24d2893e66409f674f1319356ae6d0088e08e10d4c7655edbe4358ed9a6e253b45cd49968a3912d03eda3bdaf1ae529e1152647bd979322c53a980f325da3cc9e34a9e6b9ad4f1a9679cabc61e26b9682af06b01496a90d75837707262bd8da9b3ff9a20652e9771ad5135cd6a19932986acac84b2a16268ae62f867e94f159e86a6fcaddab08501fa2debbe72759f7bcf0543aa831c79d06c9996ca32894dca54f153f41a995c0fd06ba51ab2f14952cdd2457aea7eb56e9a562a66c5893ea925ed93b24c3653630365ac369b2fcf598de849ea6ab9ca9983e3f4007af47d96bd66a96509ab550a925b363b6dcbb656968549538e5452f66f6cb23fb8c43606b798073e08ba6dcd551f2bc1e2cd698b3731c50352da99f2596b95cfe64b2b2f9527e17e2bcfd5ea1c5ee32ab73535e536358b5114a087806bab94946279af7b1f01c387db3bdb02e6acd44165a52e09caa54e02954d9a99cc07083b1a53e5344e07da38cd29c99dbc4a6e4165edce54d6ee9251d66e4965edaea6acdd4abbd0e592fa5a595dd6cabfac355073a0927391ad5b51fa75a3f4eb9e917ed9947e3d4cfa652bfd66a96a1e17e0992aef55b9d2b0b5296648694f9357750a6e4d0b6e63120cf9652baf99ae2d95e45e1e93dccee4c454d6ab6475625425334f35dd962a4945f2f73ad524a8d64d39ff2ad0de266e46afd747793de8c8f2a799f293ed29f36fedd1fc1d4ce6571e20d856ae55ff5688e4630d6653c202b45ee9f4cf9539fb0aaaa59b3c0d94693a9a4c0304b735276be704f3f4a5cdd389b27b3f8f76ef4c09eeef517017936035ac21bc8f397435e556558f9487e2ac664a4dd62b395031d588153e3b29985468e81c4350b5d7a024eec87baaba28c398cbcf00557e78e3a7ca5a3793fd55a5bb3c14fbcfd28d10e821837dfcb5fef669575103954d0626b189d7945216e96e2aeed088830c423452717fd34a17a46a9dab265c0f534e681b9e27c07a0c53fffdcd0b834d9ea05d2a4fe03d55bdd4f2bb4a91a7961f8bbae37cc7f110c7f150c7719e9e09a87f3edff17cbee3f97cc7f3431ccf0f713c3fc4f1fc10c7f3431dcf0f753c3fd4f1bc754c38c1dc944ed03b7aaac8f5341539708279267fe12c5303e932b5155596f34d65b94542598616d406539c49ca712f539ce0268608a251e7a2f5d49b2235d423a93e14a9612652d6a8d35c7968d78b05d2ccb57ae6160cef86d8d686b87355ff00008531c6696be1afc7835714123c9eeaae6c97a4d8659e1ac82cce5f44e91fae4a3f4f32a852bf0d95974778cccb7da9bc3cd29497b389bc9c49d9df962afb3bfa50f6fb51bc4679e4d59fe2b593895747c5ab7e380e93abf1e407724ce9003f30da5070f23a24666e9dc39d510ea7a3dc8e623ac623d30114d3b126a61dd2609a497edc9eca8fe37cc88f034dc2a10edd59781c1a1c445965bc47ab0ca6ac32c16415ab3d601a807663835c539c70086f6739870f62261b24193ec8a348157824954f919ac4476a08456ab2819431b726213594caad53bce6d661940da67ab4c10e940da6996c60f544270b6bed1cd8017b113776184ed961ba0f397604456b86475a23295a337969ed48d19ae543ae1d45d19aed91d64e14ad3974f9860ee03a47dde486d4688ad45c1f488da148ede291d4588ad43c13a9e68ad41e6a0aaf5266bd52d917299517dd701a678a11322c4c6078adb577360907fbc20cbf273f389eb2c07c8f16984059600195570ba5ef9d2376556daa22f9f72469ac425736984829b3ab47650a286576e353661265f3ddbdda7c3225790f83e4981bc9534c9261ce7e61dd05c79c3dbc39ed7ece7e2a658fbd4cf6f077b9cd344ac7bd291d1765a4e3744ac7c5261ddb8a649d914c5627cca07249b1d7fc379322b88422589211c15914c1a5fcb9643645afd42bbd3994e432af92e75292977995bc0b2579b957c9f328c9e55e251752b9741f2a97aec828971651b9b4823f97cea7e8557aa5b780a2b792a2b72a237abb52f4aa4cf4fcf792bb517aee4be9599d919ebb537ad698f4f46b21f31ea6582195b0298397e5190b296cab296c6b32c2b627856d2d7fe1da8b2a5cebbc16aebd4d92e110f6a2f0da275b44257b83d7642fa624efe755723125797faf92971824e7aab556412e4cc3af9db85f987680a9b01a67940e14e64569a9e2a7668b4a28bb1ce4d52e4b29c9077b955c6ab2b85a00b798d5e2f6eb4185b2b739435e83254ba5ea754e388f6baaf12a86fa578ae29f489e170e493b2f1caaf2425f217c4b19954bca4cc4d5cac025ff28e2f62e9ceea91f9636f58d8a7abf0ca8274b1d457e1955911cee4345b2dc6456b52e339cb5510bb40303930cabc3e5df4a8123d236f226916ad98ef7b452262fa74c7ea40f26dfc76472b55a76d93fc0e4fe9a1bf6d74a5818a256866e9fb6611917876c56798c2f2954fe5a61ca5f300e0e7b68791d07afa0841fe383f04a4af8b13e085f49093fce28fce0716e84af3215bbeeff8c6237d4e76277bca9d8f57053ecdca728bd127782ab12e73e155489ab32652db0fe890654793d4c1ec499d74ea0f3dabe546c2771c4566d8a0d1ae3b0db5fca01884369c13526c1d0e63c251dc11b69c1b526c17078aaf05ebfaea6849fe683f03594f0d37d10be96127e860fc2d751c2cff441f87a4af85906e16e17566ca0849fed43caf7a3849fe383f0fd29e1e7fa20fc004af8793e083f90127ebe0fc20fa2845fe083f08329e117fa20fc104af8453e083f94127eb10fc20f330987c1e44bea2e3806932f15990c266f34c503522e1381cc351c4e41bcdc0788471884e7aa773ca0e91ade3e4ad02e829de76ad4dfb02e07622e5271d7ef07e3658724d868b5a7819e22686ce9c1b6af39b1214204927aaaddb7c9941d600814769df534047a2455a0aea60a146c6869edde74ad62036b76a9b6ad692f25f76d613705f7284a9feb287d6043e2e6d7ba75109b4df1c0fa23d8c3d8cbfaa3a329cf73a3c9f358cbd9b0bf992bd1b99bbc3ac614238ce4c0b6c209cd7c18f6e82d127f25d2db4c4779ac294ae822c34ec55efbdfc751c26ff141f8f194f05b7d107e0225fc361f849f68120ebdb9db4d66f6da9b3b898aed0e8ed84ea662bb9323b6534cb1414f15f678f6d2533dd52418dc3c6c1aedc9cd9f66920ceeeaee74929cc45d9d6e120cee0af6c64e705710a3c95d958bfa7d64ddb8ae334cb1c3bcc3bde9a8b589167ca64170ae7a5b359c61b622c1b72fcd7d2656c6c6d0fd22d5b097b77452cd9fb34c66866cf1403a66ee439bf96caa583ce8b1589c63120ccd908704d10c795864d24f39972a7e8f988a9f9f3b5a9d678a190e61d37eaf3d94f34dc2a18702bbfe930d78670457d2115c40d9e771ca3e4f64649f0b29fb3cc96d9f8b28fb3ce5837d2ea6ecf3b44ff6b9844afd333ea4fe529370a866e13b019eaad9cb28c9cf79957c3925f979af92afa024bfe055f29526c9b0a00abe1391d2bb1e480bbeca241846f45f4a47709211fdab4d82e1f0651fb2dd3554aa5ff198ea6ba954bfea43aaaf330987c6ee6be9a43a4963f77a2ad5affb90ea1b28e16ff820fc464af89b06e16ea7096ea272c95b1e73c9cd9421dff668c85b2807f28ec181b87ac7e8564af2bb06c9ae5cd36d9409dff3217fdc4e25fb7dafc9be8392fc8157c97752923ff42af92e2adf7de431dffdcb2418aa978fd3119ca47ab99b2a829f782c82f750b9ee531f72ddbd14e7cf3c72be8fc2f1b9471cf75338bef001c703148e2f3de27890ca765f79cc760f9904c360c6d7e9084e3298f130c5f91b1f383f62120ea3c7f0f1379ed1e347297dbef3419fc728e1dffb20fc714af80f06e16e5b0e4f50e5f4478fe5f44993601896866f207b1d967e8a12fe930fc29fa684ffec83f06728e1bff820fc59aa58fdca56ac9ea3a2fc8d2dcae7a9287f678bf2055394e065ff48a79424f1b22f9a04c3e19fc2bbe378c9241c9a67f0594d4f6dec9729c97f1b24bb6af8bd62920c435cff3119175ec8eb62b6e6003a8e574d71c0a8d89674ac996464f835ca9ae0969dd69ce7d29aaf53cc63318fccdfa02437f02af94d93e4f6ca92d4e66f2d9a361edb7bf5750f8cedbd65cb41e37aaba5ce095126d9fced2d5394e0601bc5bc2fa47e9bd2278bd4e7ce9be68c555ad4ffe54a9f77287d1a1bf479e6e999aef47997b27c1383e55d7988f7a86437359ac1dd76f3ef53e5ac99a19c357259ce3ea08437370877dbdcfa9012dec207e11f9984c33c43cb98b7b7b13fa61c66ab74042771989f9804c3545a763a82934ca57d6a120c1db9d6e9084ed291fbcc241896f2b5317900d8f9fa7f5b533bf1e6d2783f37e105b7d1d6ec365c358fbf3009076fd7ce6b3df7a54932f4a2daa793dd92f4a2be320986164f8774042769787e6d120c03121dd3119c6440e21b936038ec64f070460b26f170df5216ececd582df5192bb7895fcbd49b2fa3e56cc309b3b56d88b46e3dfd09d2d60a389b56afdc30abd3474b058247f96a92b8bd47c6f89128497cac01d2679d45bc26e668b7fa034eb66d26c26a1199592f1f2af6a75ced2d37e316a91dab9a47e4d4afd3767ddea5a1f831bad7fa4b4ee6ed2ba4050eb5ee25fafcc4c5b7792dd68f96f4acb1e262de7d7d9d65ea28c17285b6906ee65a258af679a567767fdb2e7792adda5528b35eaeec15a7bebab55136554354aab4af48c930ffe10a8f3da02f96cb994e486c34f14879e260efd486be31d762cbdf0d7b8fc48e9cf544ab732a514f63ec331c67f1bd14a21ac1e59a42c09e9049dace5762064bc3ae74c77bc94e4d7925d75a3f72f94debd4c7a8f7261a11aed594b95ce4b54ea52ebecdd92bf521af536693423038d6ae5996a5d731409bcfa8ef62af4d7e3fcd0f9374ae73e269dc7bbd0d9ae1fd7eafd6896cad4af223fee43eb9ff8a51437fafd4ee9b7b549bfe119e807dad5aacdba97a9ab55f26f583d6a6f319fe829eb3f24e746933f284db6316932cde16770acd8cbcc52ab39c1c354890a95eee23a7f932ce5c9aef8a3ef9f94be7d4dfad29b76247e6e2cde7e6bea84d075be9b74ff45a57b5b53ba4767e0454a94cd2a34575babe42d16af7ee26f4aab7e26ad66935a393f3456dfd6a84df00774fb225d4fe187e6ffa134ef6fd27c52469a4f16b06d7a71ca7655ba652e133db7507ae650fec5bd9ef59f32c9c4bef4d399e80bc37c467db733e93b21237da7a5d156e62bb3314ac301260dc7b8d470126a9dcd90ffd7eb9a3eb1a5e677dfa001a5d7f654cfde8d5e05f2a82624cd1a529a0da4344baf2f315fd9aa5ade0be319cb92d4f15cbd8546946683a8310b2fbda439061f11461f298bd27a30e563ccde006b5c286f5ea2f25db11a6d30db117b92f43c4c66ad9dc69486b9260da7a7288bcb4599d675a21a35aa541abbd78c53e32694c679548f29b54de1d31635f2a7481230e540f7ba659e679b52fae59bf41b97967ee36509c56534acdcda8cd26d8849b7c9c2dbc8e914516aa8fd331f3775a369734ad3a1d4e88c2925f395c52ab4e5acf72121d5d3e45fd6e3e5865a116f20e05fbe6c416934cca4d15097b68bef1396eb9d40ac717dff746849e9b08349879119e960e53ae7abbae98d5a0f75a54d2b4a9be1266d7248df1f9f82784b987a82998d276453a91de15f6ad7fb96dad6546a47fa97da0dbea5b60d95da1d4da95d92566a87a598914977342ab311ac74d2e786505b8ad02877bdebe4b35785296b9c74a4fad1936947e9bb9349df9dd36a45cc53d78a559acdf33741b523da53da8d3669774c9d1f0f7a96ae4094d6d5124bc56495572a550c998d49d05ad46fa864de4ec98f3cd581a23ec6447d07b20c99363a8af78c76cf0a3429540ccb7c6c0574a4f4184bf585dd8f3ce1129dc9589bff1ea113a5f53893d60b3c6b5def1bbdeb4fcbca8444678ac4ce2612e5495b8153e2e69cecf6f904dd66a76bb222113f93e87eee313debf8c1ab0bc56b3c55eebdf4daead7f5942abd6054c29f5aa32ba5c704931ebb78d423755bc08d743fecd88dd27f223533e6bef73349ec2b1f072189751c4fbfb43ba55581bbd1e8e42dbb74c612fc6eb3f6a0349b94791f64185bffae2795dac9fea5d6bffedd56546aa7f897da4cfa774de44f4c7d297592ca5b30673057957538aa11b9bde4a5585e5dd9a4b7d8b4cf43fc95b2e441e92aaa9b5749bdbde65409a2710361fdeb1f0388a07c15f02813ce7dbdacb9c10a4dc3de9e6cb02a372b757d54228f67aab19ddab4b73935b5ce07a3f639d62efd0d4f9ddf698ac59a688d6c5992746f20fddfa6e934b06a0b6dd506b9f08e82daa32c93dc943a15d321b686e63c94f8352ddc2e34a5dd12305bf71e526e009532be545fef1aa40414690129c5cd47d581495c5795c9aca1f86a614d38349585be4956833cb0c30c4e58d627fcc026b8e69eae3d0bf44ea380ebc8ec7a5c33397125fb506414404193dd06358b13542b0d0ad6dfad45bb7ad7c8bf574602d5fb59f5a866f3a3721641e8e69449415140754b9b7a547338513556a8e0f162b5ba330a70e09f0d672ebf2b4ff635d628e09adaa01ed72efcb8acd15b682ad8232885aa8db5321dfdfe01b860bf4d1bd73c4e5c6d49870ecbc797e9ce4b1490ad6b5c8fac901f59aa2f5a4401d931289715f1b7ddcdcd8632f9130558052a7f35c972089f9c203cd31ea33bc274df163ce024b14e26cf7a57025afb8ebeeed6f2967f5ccae7e3be6a4e42a32027692b3d278d7a322745f33527653ecd49d35fe6a4510de5a4e948ec54d13ddf9c34ba7b3929daa3f50351e601a43c18885af0ff7c8c28afb73cb52b40f85e43b07ce76e9cbeb389b21b580e5ce022e9b11c31f44888217ed77ddb2b9ae26a16e7370f4c27f999f84ed88ed2ae68760f12567e04615d8960ed1124acbc08c25a82602de4efce2f520f5895d24ae57ba0404ee203770217b89310b83dc30257c007ee502e70a720707b85056e720473dcc908dcde61811bcf07ee5a2e704722708bc20237318239ee44046e7158e026f0811bc8056e3302571c16b81df9c035e302771802b7242c7023235854f745e04ac202b743049b23d508dcd2b0c00d8b608e5b85c09586056e4404c15521706561811bce076e2317b81a046e5958e0184744d8c0952170cbc302c7383ac2d61c5988c09587056e281fb84d5ce0962370fb84058e71a497ad39528ac0ade004d73209b8e815d4c6085b4510d89c5b70e4738e8c74e0c2762bc256c989cdfa38b35ae3aa27d5e60af84a71495db64f585119017cdf227c2b39f135d7b90ebf4091cf59a3667121bb1f215bc589ac9d425685a66af1d42f241cde135b174184df208455e1f83ac68e3e5b613d1561db97dfd72d4af26e1a631f82ad61f200c257cd890f566b58af6197eb351bf6eba1d6a285e88d067f82d0d584d3a6631c2769cd85ad3dc256cb89ada9c6b6529f58c439e7d0920bd758846b75b0b8180793d8700d46b8d684538b3276b4d86ad112846d2d27367b718d5515b02eae616ba9ed8760ad0bc7f14771f6b41bc2b63e1c6c8c13326c6320ad10b60dc156008c631f6c15c04e08d77e9cb8c017af12e645ca05ea8ab5d2771567e3763817c6b711c6fd3931b6d6b90ebaed16c2f80da2186b53b60ae22204ef8030e131f648d9e09d87e01d1826bc28364d0e47f00e0ab6b2601c3c62ab2c06205c0707816ba98ab8963777f5e1c27516c27548389d2bc6f5966c9dab3b11b64339b1c1d04a8de11dac0952286cc2082f06591fda891ec43710c4c3382166e9bcb781b790f6e5025589406d0c0a146343830dd4f108d4e14181626cceb2817a1a813a220850eb230aea29046a5350a0a258f48e43a08e0c0a54149d790502755410a0d645b4e83d89406d0e0a541473d40a04eae8a04045d1471d8b401d1304a8b51105750202756c50a0a258f4562250c705052a8acefc1904ea78fe61998ab8d1fbe8ade1f914e13a219c6119c685286c230a97236c277262cbd6d84c5f7c60f5646caf5e1f85d09d14ec3033232eb661e6ee08d7c94114d0c4996fc62d25d8160cf446d84ee1c446bf6d92cfb98909db9281dd10b853c302c798e3d8c02d40e04e0b0b1ce326266c8b3af740e04e0f0b1ce37215b61c370d813b232c708c936a6ce00a11b833c302c7b80c8f0ddc4c04eeacb0c0457113932908dcd9618163dcc484ad1d3711813b272c708ccb53d8c08d42e0ce0d0b1ce39a5936707908dc796181631c136103371e813b3f2c708cef9db0811b83c05d101638c6d90336708310b80bc302c738a8c4066e3b04eea2b0c0316e62c2066e0402777158e018a765d8c00d43e02ee104d742587bdc27ae648cde2cc31708daa5e18cfd32560b6c034a5908db65c1ce30300e5cb2cd309c8e705dce8fab441dc2773c378884ef8a446082f97384eb0a7e4f963863cad88d67f3643310b42bc380c63868c4066d3682765518d018bbef6cd08622685787012d8a1be1ec8ca05d130634c66e3b1bb44908dab561408be2c299c908da75614063ecaeb3416b8aa05d1f0634c65e001bb46608da0d61408be25e2ecd11b41bc380c63828c4066d2082765318d0187b9d6cd0e621683787018d7171161bb4f908da2d6140635c5fc4066d2f04edd630a045711be03908da6d6140635c1ec3066d2e82767b18d0a2b8c3c12e08da1d9cd0cc3b2647719b9b8711b23bb99155ca83758e3daaa287ec3584ecae60e70418c76bd9e60446225cff0a62e629b1c719c5c1c74d08dbdd41e4324b4015efb8065ba15c8f70dd134e2e8be2bcc02d08dbbd41d49885fa910ac13c25cc3669d71121bb2f889c963893ce98d3d866d23b236cf787838d7166800d5b5b84ed81601b1b8c3d00b6c6c6d108d7839cb8e0655afcf98fe86fb5fa2642f710273aeb0b16f048b12aa265ead64af539064b10e3775372b9f07d86f03dcc5d93c2c2972af9d86a157d9160fdd44c1f2e641f23648f7022b3f6485e19d7f3b4bf1405df868af6be0b37238c8f065b45304e1bb355113b205c8f85d35388e21c6831c2f638273658ae5ca9fc1bfea4d63c1d46af67fa2102f70427b8f622d54ef0d15d29f90e82f86438bd07c6a997015cd8ba226c4f85e3eba23837fa32c2f634b7af036ca5628dfc0fc99c2da23cd6bb2b02f74c58e0184747d8c0ed8ec03d1b1638c655466ce05a2270cf85058e71a5111bb86c04eef9b0c0457117ad8608dc0b618163ec41b0816b82c0bd1816b8287e4c701602f75258e0a2d8d52f42e05e0e0b1ce3e4331bb8a908dc2b61818be2977ca62370af86052e8adf97dd88c0bd1616b828ce789d8bc0bd1e16b8287ea1714f04ee8db0c045f125ef0b11b83739c1d91fe95d234f54f3f6160ee482f52082f55610b02ad540392b2cb69d3dce46b0de0e0a16f31734d8e615f647b0de0976da2f8a03457d10ae773971c18a9d627909d681ac957aad9202fe1b7690791d017c2f9c2918c65786d87c5a3f84ed7dfe628ad72431e6b28d5cb8be44b83e08a2559698cb8672ce596de602f73c02f76158e0189bb36ce09e43e03e0a0b1c63076a1317b88710b88fc302c7d8656703f70202f74958e0180789d88aeab308dca76181639c5e66ab55ef43e03e0b0b1ce3820636707723709f87058e71209c0ddc3508dc176181639c7a6103771502f76558e01827fbd89641df85c07d151638c6e965b61cf70402f77558e0181734b07d89e31c04ee9bb0c045719cf73404eedbb0c0312eda622baa372170df85058e71f497ada85e80c07d1fcee025637e63c3d60261fb21086c89ebc7a3b879cf1d08db8f9cd8da89c417db66cadf65524cb45f6abb1721fc37b7a74b7c9137ba6fcabc85c0fd144e918de20ebc97216c3f073b9b1ac5b5bc5b215cbf0481cb1250c53bf9cc3657ff38c2f52b27ae361ad702c960625c15305ec650cebbd481ad32b80ee1fb8d135f5b850f6ad499ca9fc182adb9f2e655aa0d074981d7c5a3e7ddbe43007fe70498b839c14475890d19dbc62b1f21647f84d363602caa6c3d860608db9f9cd89a216c4b45a95ac615c5aae13604ecafa0814571c7ca4b10b0bf830616c585827b2360ffe176fe89bba246b150be88906d0902d91ab56470b58a9e3597b12d6a380321835a800d19ec69803bec78979089f2318bcb5c756db2a8d68f452f0fbe8f80c63881da8ba14b959f8b662dfa1882d520485851ac416f40b01a06092b8ab5e73a04ab1127acc481a1286e64918f706571e2a2871fa3f8dd97a5085b634e6cf6c41e446c75d1578a05758d0f36706cef577d8dc03509a278d60f4446d1f5df887035e5c455bfdf73fd63d1dcefa31142d62c1c8f16c5cfb45e81b0350fc2a395a871dba5f216a0b04a44f563739722702dc20217c54f1b2e42e05a86052e8a5feabb1d816b1544a550a3bae9d5fcc3dcf773213b1321cb0ea252489c1d607cf3856de15f4f84ad3527367bec160f4532bed5c7d65ebb16016b133430c6b7f9d8805d8d80b50d1a18e3fbc96cc0ee41c0da050d8cf1b5473660072360ed8306c6e8f4d9801d8a8075081a18e3f25136608720601d8306c6f8b2191bb0d50858a7a08131be64c6066c1902d63968608c2f97b1012b47c0ba040d8c713d2d1bb0350858d7a081457164368680750b1a581427e60402d63d68608c734c6cc00e44c07a040d2c8a8b0a0e40c07a060d8c71f2970dd84108d8564103639c246103568b80f50a663ace7ac4fafc2aa3dbefcb85ac0342d63b9c9157c69cc6b69cbd13c2d6271c6c8c3d4b366cad11b6adb9b195a9695f6bdfc840dede649b517a1761db86135b0b61bfef542a6fab55370ee3f56c6cbb5bed83a0f50d031a63b7890dda2308dab6c12ecf8be2871dfa235cfdc259cc12c5a5058b11b6fe9cd8e0608342c6f8ce1c5bdbec3d842927080fb6421eac97b525dcc8bc1a9bad48162068db85012d8a8bf226206803c2f1638cb3e36c7eec25846d7b4e6cf01e3af5924e743fe5fb01c23730d8c646143f31d817e11a14c47050fd5b74acab7dd8eacf7108d8e0a0814571b5cf68042c376860515cedb30101cb0b1a581457fb0c47c0f2830616c5d53e4310b02141038be26a9f1d11b0a14103631c931dce056c6b046c58d0c018077dd89a15bd10b01d8206c6b8da872d87e52060c38306c6b8da872d876d8b808d081a18e3a04f1f2e60ed10b09141038be2086c1b046cc7a0813176be73b980f540c046050d2c8aab7dba20603b050d2c8aab7d7211b0d14103635c83c1564b6e8f808de11e7d8dff14e05c7933ac62b65f5465fc3420db0e535f217c6383c86fd6f2956ac1fc395db602ba16011b1734b028aec1be1e01db39686051ac331f45c0c673af5fac54b7978b596a7fd922013b3246afe5ff2a42362188259ff15da5282e8c3a06219bc8bdb143fceec53345001fd31dc005ee1504ae209c459f8cd3706cbb146c83b04de2c4d65ad8fbe3c146e390cc2245c112c05a875ec905ef7c046f7298f0183d1d1bbc2310bc2961c2636c8cb0c1bb58c16b92e5103e3941f844bdceda5afd6a7788068b290a45a9e258228f67ca109e5a2c0be242f9e38ef85ef2c7743ea6e04f928d972a7516e42d55b22be55548598dc883398ea99001daea0c9093a272ca219b48f69562f9375e550ecf80f46261af392f92bf0bc572f5f71c19cbf2bafbdacbfb6a0c572648590502be37542cd35421afe4c4b285e9833a1673d03727c5277772623088b8aa2e96f834274a6b9ff2ee7ac9c956d9e7a86c632fbeccc9709fe19cb4963e590c2a9595ccd7a90f2998aed876ce4ec80113549eab5532ab55e188299b436e831a7a962855b5b5157fb194542cf320948c5ca8046330c3627d4a048ae4525552acf253297fac23fb7c6a99501a924b9b06593e66f67915be95e3541a59ae079e877c6d7df903cea6d234b57eb44f6899c42ab93022f55fadff74b0bb36bbcaa69dd56a555c34e60858ad0a89827f59ff07d254a82d81f50100 serializedProgramBytesString: - serializedSignature: 435a207630ee74a25602073b322b8404a351ba13299b620551264a652791ba8104b288d601d162ddcfc5eb2c5b74ce1e955c355cb762f90dceb400ed0b5b4b06 + serializedSignature: a77bebee237725979a89f44929dfd682919e6eee950f696b90c6eeb9a96320f39c749254ba31993857da9c0f66fbab094b760f0e5c0a768880194f984631400d programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/820cfdf2dcc996b47bef352adc003779.asset b/Assets/SerializedUdonPrograms/820cfdf2dcc996b47bef352adc003779.asset new file mode 100644 index 0000000..171df22 --- /dev/null +++ b/Assets/SerializedUdonPrograms/820cfdf2dcc996b47bef352adc003779.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 820cfdf2dcc996b47bef352adc003779 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c54c7d6c067b77869d11687502c6842f07a080428128ad50b81044809904690babbbbbbbb507777777ded7bf5f6bdf6d5edb5df9db933d9b377e7eceeecddb3ccf0d1f77b6cf6debbe79ef39f337e66265ac0bcff2243bc7fe6b159ac840d637359055bc956787f95789fcbbdfff9dfd4f599acd6fb5ce2fd5beedd1bc2f252fc92ff3720d2d9fb778af7ad8ed57bbf6c608bbccf2a717f36abf4fe9ee2fdb6d2fbc6af2ef6fe5fe93d1569e2fd682e9bc0cad80cd629b2450a11f3c48feae4b508b72bd2c2fb773c5bebddad144af19714885b9dbc7f667b77eac4bde59ed2eab93dd85ec2ace5debd45de6f6a59b52773a190d8e2f1394cfcc1fc8f31f273acfc1cedfdbfa5fc7b13f9770bf9377cbea9fc1c97e6f35b83dfb5047f73429724f9fd36fe67e43befb31963d133c177fedb6fe473dbfaf2a24b93c8da5e7eee203f779432cf4a43ffe6f2b33885bdc9648c07b2d261d6427e4e909f2552dfb3337c7fa9cf28720190c759fe17e83301bcbb25b8cfaf4d0c61bb4ac7ef03e9f8bd9f8ed17364fa7d229f9f243fa7c8cfc952b6f74cc713e4b59de4e77629f49aeaffaed1c7c7f9efdca4467e9f263fa7cbcf1952b71fa5aee780ef617551695a2665fe20df71aee6ba7a9edf3f4f7e9f293f770ea4d72cf9dcf9f2fbec34f549c7ff944e3fc9775c00be7b1c9b2c48224ba5fbcf8174ff59fef6149f6393bb03f600ffd3ca9d23e55d98861d73fd776cd75a7e9fe77f9f30248ddfee22f5fd45beef22f0ddd3bfa9f2a174f56e227f778afcbe2b4b5d6e295d76979fbbc9cf3d58a31f4e507eb8a7ffbde5f3f2fb5ef27dbffad79bb54ef29ebdfd67c6281f9bef7fef5728bf2ff065359b2065a972a45c7e2e949f8b24a35f597cfef995e1f947a74f058bf7e5cad8effa7d21af2d66713eca96c69e29f822896cc5741f3dafe6f9fef5e68a85cadf5529d257f9fb6f2cdedf7f93720f9172af91cf2ff3bf47f2e5f7622087fffee280dcdf03727f977215dbd969ea592d3f57cacf5af9b92ff0a94be4b515f253fa7ae48f40bafe21ef2f8ffdb6d31a436ec9d2a88ec5e791ede47bff4c2153fdbe5e7eb64cf379f54c43089d57c9cf5669beb395fc5c1de29d9bfabed0aa49c017f64a21738dcfb7e53140072e4795516be5e77ef2737fc9ffef801ffc9d861fa4d2e500a94b4790069e2e9bf695df0f949f07c5ebc20e0ee87449f6748afc4fcabc147ce79f7fc9eb9781ef5cd70aff3d9bbe2d651e223f0f0de87c189dceec70ff779be701df48e777c9fceb08dfbed6b2fc6fadf2e39101dd56c5f46eb92bf8add2239dfc70b4ff198dc43316dfb90e8aed3181e72e07dff9278bbd4ffcedfd7633e55bdb80ebfcb75780effcfe5169ea7a1c4bf4592e6713f0ee4de4bb0ff19fdd4cbe8b1dcf12f39eeeb7fc330aae45a5bcefe4ef4e6089f5987a8edb7625f8ceef1f9ba66d276af4f3debbf99c24bf3d89c5973ff5317f68a1daf7274b7d9ab0b8bc155565d7f8d86f22aaae926dc5b64a9753e56f409f322afb946db695cf9c263fcf62fa7af60cc041e6477666ecdd3d959cd393bc4be54dd52f53761f1193d37a88d45d9563b2cc6ccc33c167f935d527506ddc4be4e7c5b16727297b545b4cb64fa3cd585cd9ccce07d7f9677379ff2af09d3f775e4cf696b7c86b970674d5a5e76501db756540323fbbdc7f764a9efc7e85cfb6ed2d92dbdb011d4e65c9fd57fa3b53edacab63fa4c513a5fe5bfa35d47ff7abb05f2fab5f2f33a96ba1c4ea5c7ec349f4bc6e646ffdd8dfdb19be4e7cdf2735f207bb44c4fd50f81edb81bc03dfe5df55dae6771f54f525d944f6c96c29e31e039fe796b08fb93dd93feccd649db5ab2b83eaaf8eea57187264964dde173eaa2fa7077fabfe9a8caf3bbfcfbed957fa8beeaadf21daa8dc77d4895ebf7c87bb0bebb5e5e6b0daedd2eaf019e51d516bc37903e5707eedf0764e8eedf0f74d0dd7f405ebfc6d7bda3f2870703b65c1fd0b5358b2b3bd84389b6465b07deadf2543a69f9b0fcede681b4dc5ca6cbcb49643da24fcb2d3e92df1f0da4e56381b46ca349cbc7e5bdb620dd26cb6bed34e9db1e706823ef3d81a4a5baff2490abbbff14d04177ffe9f8b4dc52d55bcf206909f58769f96ca2ade219f86e552e264b4bd50e798ee165e80b2c569672b9d7a721f745f9795e12b9db04e4de90865ce5532f2591fb0aa26f26ef53be2ec72da21d58bcaff3ef9edf76ba3f89ac5799d6d73b2bf6afb1785f7f9dc5fb7a4796e8eb6fc87b5bc4d25fb0e0d7b66489bede09f8892a2fdf04cf405f55f7df027275f7df063ae8eebfc3e27cbd8b6a03bdcbf4be0ef587befe5ea2ade219f8ee1bd348cbf7039c15dfce2cbeefd2d94f9f2e4a3fd536b89325af1b3ff0e54f5763511f4a795da4fc9bc077fed935f0deaef2bd7ffa72bafe29e5b4f6af7795ed9faeca3ffe21dfa7c6e63e92cf6d1b78ee63fffb8c3de5f77f05f8ab7696f295ee317f6bb4e59fe01eb4ad078b6f937c2aaff70469d5035c8369a5da66a9b87e263f3f0ff0eb26e5dd0cbef3e7be8ce93f43e9a5c6186f89dd6bafc64b55fac2fafe2bbdaf085d419a19b79194cd5fa7b0d9a44ceac5e2cba45ebe1f749f9944d6b7f299fa24cfa8f9a4efe5a7ecc346f3587c9f244fde977321d1de81fbbd59accc5665750ba08792cd7f734b127d94fd3f31ed58708f91fef51e9393c85073433f4bddb692efbd157ce7b2645b82fde2cb1ca3643f2f3fd5fd5f03727f8bd9b873dbc06fce49a2573a6de84cef9d216debc3e2cb9b3ebead3d55f9a1f2c1e92cb96ffe2e3fd578b21ce38ef665717dd9a8ea4327eb97a57a5712bba2fd59fc98447f795f969bd17ef2fe6df27b7ee079551fc971c2e880c0f38302cf0f92cfff25bf0f8c7f9efd0de444fc4b8d65603f792d02ae0d94d7d47891c7a7775b796f70fcbb239bb0f8bea5ea3f0e91cfdd0e7e0719a8fbaadf353460d330f9fd0ef09d7f1604e40e0db02a08c82d0ce82bfb7111395e116916b371e78fc06f00cf48d37899c9d25eb0e53286cbdfdc09be7befee3d0d97d1f8db22f93942cab80b7ce7328e90699224df464706f81581ebfc7394bc7f37f8ce657f9344bf887c7674c0b6d1fe6fb7ca4fe3b72a8f8c0dd83656ca58e0dbb65592f23f227d2dd2329086ca67b9bcad35e9ba35484ffe7d9cd4e11ef0ddd3a18fec7b465a21be3d26f0fb7be37fdfb7b3fcbd1c338fb40ee8a6e6e6d4bcc7e6f2b30dee9391b601ddb78d3da3f48b6c16d06fdb80dedbc9f7de07f450d7f9e7f62cbe7e94f12e11d57fdb21705fc5c1a43b1fabca7d292f02fab9a6656ca4039095ce3892ac43221d337f67a38c2d42c8682f3f1784b07d4b202b1ddb25ab48a7ccdf29e6ce95ac74de29fb5a22ec2d533bbb005969bc33c2fb009ab9bffeebfceb0364bb33d28369db69fddf0f3cd7537ef6929f79f19fd1892cae8f21be737949da1591aec96d89f4f67fd75796d311e92fd11d597c99bba3aff30039a7912feb95c856f2b30fa2ab2a73fa05ded337f0bed2f8e7956de23aff9cc4e2cb02156f15c6f6fe4c1b2f922ffbf311d57ec94f6e5b56d241f6d9a2c52cbe6d5aeceb34b0852f77e001f279d5661a14f095c184be3224fe795d7c4b6468bc3d224fc967facb7e77a4407e57f596fa946d2ea662afe4384aa430f0fc7069d3f898be8d328ac03d2843dd1f81bc43dd1f096cd4dd57ed986b02d7559d3741debf1f7ce79f25315dc5df5e9a0e92f97fb08c5b88a872656c204dc7e9d334b235b0657de5213596a8eaaa2d63b2fac93655448ec3f455cc3afaf60ffe33f0db54ef527134aa9da0f8ec60eef3911dfdef43d43c649af626ad0fc6336d7932e471f9ae6f02ef2a4e616f09d3e693a81a73bf0c7cf7de334cf9cd84c0ef941f4c6189f9a514dcd3f9bbf291d9c87da54b303f4c9172a7b2f8fc30557eee14d345fcede93ff41b5fef463b14a7a9f1e9dc981fa605d25bf57534edc3c834e983320d449bca7b67816a37c858dac88c445651698bb62c53717c4a579dffcf0cc89e0664ab7ab443ec777d551e54f922959fec9ca1eeb3e4e76c5c87888c9b88c898d4603b2169d99142efa47949c6bcf69363b3a22de9a557a11c4b2a54b1d16aac66490a46bb307dcccb74161f6f325dbe47b55b64bc6b429c0af2bbe1ca9f64cc6b44c6c046f690cfa938e073c0f7141c53da26636883e5ce7059ee0e577953ea1ed93b073ac958dc84b26b068b2fbb66485dbff09f2f52beb9407e0e8ad7b531ef2b9d2fc99ece4cc587a9f1e432163f9e5ce6eb3a528efd47ca0336ca78e2e8ccd87b1acbc345e09eae1cad60fa7254f683a2aafcbd1f7ce79fb362ef127f7bfa8d9063b423e4586c64b1fc5caa4f13d5ee8ace0dbc632e60abec5992243df8e73c16dfe79f97857449378f5705ecdb27313d541a4777d6a4d1b21469540d64e8eecb79bbc6b50dc1fb2b90345e699ec6a33afbb68e527d1515ebbcef869dc649eb8c5a16dfa64bf6ac8cd10e9699a36bfceba3e5fc7a44d5e1b2be88ac8a6713dd85c5974372fd05bb2dc6a2fd15b83e91d501fb757d2ac532d33503c938a858e94ef2fb7ec00f64ec72647f9026ca9f0e88e9306b5bf05b254bc95071cf5d34f20fd6c8ef9a86fc2e40c621f25a378dfc4335f2bba721bf1b90a1622c7b68e41fae91df330df93d800c1567acc67c8e04f78e919f4701f979f2dad1407e05f8ad92a5641c2baff5d6e87f9c467f359e934cffde40c6f1f25a1f8dfc1334f2fba621bf0f9071a2bcd64f23ff248dfcfe69c8ef0764c8b85e364023ff148dfcfc34e40f003264cc2f53e335307d4fd3a4af6aef244bdf8140868cf3658335f2cfd0c81f9286fcc140869cd3646a5c07f2394bc367581a7c8602192a06b94023ff1c8dfcc234e41700192a2679b846fe791af94569c81f0e64a8f58b2334f22fd0c81f9986fc11e0f96465b78ab3eeac79f7459a77774ae3dd60fc3ca2d67275d5c8bf4423bf4b1af2c1f84ae45279adbb46fe651af9ddd290df1dc8b85c5eeba9917f85467e8f34e483789e88ecfbb13c16cb3fea9e1c638bcb7baa8c4f96f7f2800cd97e6c2c93a1feaa0d09f5ef9d86fe5b0119d7ca6b7d35f2afd3c8ef9386fcbe40868a67ebaf917f83467ebf34e4f7073254fc54be46fe4d1af903d2909f0f64a878755526c3f4bd4593beaa8c4f96be83800c154b354423ff368dfcc169c81f0264c89885c63219f259a7e1a3caf8647c86011972aebfb14c86f2efd4c82f48437e219021e7ea1bcb6428ff6e8dfce169c82f0232e43c7c63990ce5dfab913f220df923c1f3c9ca6ed9ff8ac83e54e4412053b59b78bcbbd72729698bcb8bc858f6c8c3f219ddd8e723f2f351f94c92b52525b2ff53a2da0e8fc9fbc9d69624b353c681479e4c6127ff7c1cf097716591a753f04cd6ef5171146a3c878fe5c1f19c5d7d9b27d4c43f97724d7cb27ed5be52f66e2c7e9c6b37f9ae977ddb27c878b9c833f27735c9df19792e207f7729ff01f09ddfd7acb58ac8b1cbc84bf132601c4be33a2cb046bf3116a4a9fc7c31766fb68a017916fc8e7f5731f2352cf51a9d647ef38aff9e60ac7869205635f2720a6e32e63c181b5c1a1c634f2547c6a6abd8e1c81bfe77153b1c5131c6b2ce8bc898f2e89ef11c2232963c0ad6b546f704d73471c1a974d35e936db7e8de013fdcdbb77f921cd79e7448c00f2f4ac1413e179d0f9e53ef5a10bbd63817510eec5c00aef1cf8552b707c1774fb7c9ef07e42e92cf3d04decd3fd598e9c3e03bff9d9a73ad94f7cf0ec803634ce219fe4ed5d77e3bf08ec52c3667eaf19aacdaf4cf80fb2d819eea9a9201e65bd5fbc527bffe884c8333e2df992a0d9296492ac64a8d51ca323f5ac5e2e31d9782ebfc731f79ff31f0dde33245f5c1def175557b9244de95cfcb3e48e43dfffe443566a5d6a75c91812d6afdc4b280ef2ef375da49c6ffefa4c6e6a4bf443e909f2a263f5006357e5731cb6a6cf2aa143eff8f805ed552ce13e03bff54eb431e05dff9ef93d4ed7c6a139643a97489ae94ef78127ce79f6a6cf929f01d5e7f3a707d5f795de57b95676a813fd78267f9671d8baf3feb7c1ba6770cc856bfab97cfcb3a22f211b89e8a8bdcff854f8f8a4f3577aed2a0219006f5e03aff5c25ef3f07be7b72a7a9ba3e4dde8def5b8dbc4f5dbf38f0fc1ae4f935e0bd403f6d5aab3d4ecac077fe9b737d2653d57c449a7eacf5ed8fe5bd0fcd7f1b5dcbe2cb1439961cdd8fc5e7dbfda49fc8f8ffe96a8d80d2fba3e4ef5672236aedcdfe2c3e3e5dedeff12f208fdfbf1597a97dcf01017b0e887faf90cfef278bcbfe523e2bdbd5d183e46f9e07dff9e781319b239fca6b07c7ae45e5d87bf410a6cfa78782670f05cff2cfc3587c3e3dcce73ff3f9806cf5bbc3e5f32f80ef5cafcfe4f723e47db996b1b16e07fdd5e811e01aff3c4afee625f0ddd3a14cb67f675e81bceb68163f3f7574e09dc7c8fb2f83efdcb65de39f8f1e2b9f7b057c578ca19c570372027a458f0336caf172b1862a99bf4aae8df9f65016976fcb3ac6db944a5ed2fafe37f9a962c08e8ff77df1ddb36be705f23915fbfd79e0f9d702cfabf12535bf9424e64f5bae7c19af5fe4abd8efe65427f95d33f9f9b5d4e784803fa87aa2a939b388cacffb25ff6d44f9dc91299e53edd613597c7977a2cf70d6f3c873af83effcfe0319d822f362f424161fa77b92ffeed9323fa876aae89725b345e56d151ff56f29ef6429ff0df09d7f9ec2e2caa5a8da7b49954fa7b2b8b6b7f8eee935273f20e7b4801cb5ff89ca3ba7cbfb6f067e773ab08bdf7f4bfad6b6017b52d89db40ffa1ff9f92df061feee33587cbc8c6cbfa71e1b691a11eb81267bb9a8dceb211788051a0359fa5bc1aa5fa6de0456eca3237606627c3758feda7ab6d6fb69a56e27d6b9629fd77a368215697762ed22d694a8b797887fcbbd27aa84d0b7a309afb827e1155cb96aef7f95601bd93aeffa24b10b2ddf48b6cabb33cc6bf155895f2d60c3d91edeffe2a5ccf35e5bcd1abc6f73bc7f6b84bc059eda894fa632896f391bfccd2c4fa6bf23ee72ef8a025ae37daf161ace16ffae129a560aeda778d7eac5febc2bd81236defb5c23de96687badf7b7ee9d732432bd8efa8d71b1ebfef6bb2a992678d670ed0b845f6f4c91f591221c7db3b7653e6c522056031e9790121b19fa850cafd4a74819c305b248dcb5225620c62267251034b731d142bd7ffbbc47b391496dd193e1c9dd4d58104be14b5e3aef8ab797acdbb569bc6923588168fa744f615a32b05c5ebe88403631a169d326855cd120fe880ebf58c63a3b87f8fde7aac473e609d04c547ef10920c2eae778a5da4c5079cef3fef5959b2bcca8164aeaccaa157ff1d7ad10cf577872aa3de16b8589c5de2f2a44595a22e4f29dd59778d7f8deedaa8c9d2eb745af66093e50c8156e2e9231b1924e85024bc8a82e21c5f8fd9cf5928fb0edde9327658b462b624959205a769d93383cf62ed1246b2adb652a4bfef667e4ae038e1a52d46ede69cbb63ae280da375ff9616ef5b4cf7ebaff8eb215734efdea93a6faf46a25d22b132db014db449762ad729df552d735c9d26bd346bb62e9c5ffd3336c8df87c2a1d30824d740437cdb5cff37b2b859472ef5973867c81f5e060f1a507b839e284a955c01036d5202ce408db68b4624d5b06b4e20a21929be912a7f5faa9d833736e3e23df2980a029eadced92d6cba6aedd5c474f2cc55f404a4ff537677b1d8ba9debd72eff94ad178e5d7e32b41fe86581f35fe17c9c9f27545438364b5543b08aa7d41ef39ac6618f1161ae285dc5f3b6adc409471c1ccd00ecf0c2db16cb645d86cd60a93bc6558c99b62923b8595dc1a93dc39ace4cd74d9468c86ee99936c131ba6517f8df77ebbd43366956817f236a26e58277976e9927676e92ab24b1ed30d369969846593cd7569c72f76d329194cbaae78d2b5c104770f29b82de66d3dc27a5b3b9d645e72f74c47e5e6b8e0f698cabdc2aadc01939c175672472cfd7a874cbf2d3095b70aabf296bad242f86115696931d7bbe60faa4e1477abc4481c1f835355d87451592d1339137b5a950e7e4fb341e891bc1ce1a1bd9b047b57227bf0a0503aad3ae779952bd2afea2b4a2cdaf7636559275dfa8b4c9ddbc10fbfb7cfe5983752fbf15221ed1e587f868d3a24d70123d859973739c101985ac1ecd91fcf9e5d30e1f95910de15133e300bc2bb61c207654178774cf8e02c08ef81091f9205e13d31e143b320bc17564d0cd3541311936a220f935ca0916c5401f5c680146601c85698f0e15910de07135ea415fe74b189f0be98f01159d0bc1f267ca456788d91e6fd31e1a3b2a0f9004cf8e82c08cfc7848fc982f081580e1a1b36070dc2248f0b2b793026796b8d64a3f2640826799bb03a0fc512715b6d22e68d3749c46198f0edb2e0210598f0edb3a07921267c872c683e1c13bea35e73a3f2a408135e9c05cd4760c2c76741f8484c784916848fd2082f109d661e9d9cfb8e5bb1b8be1c4cff9588819555b2399dbd2edc8446cb41174e74eab9abe442bf89de7ba2fe8e5ac392bc72aaf7ef5ab6589e671d3bfed9e455a50c84373529100301430cde69fabe4e62e3e955c22122c24d799f69399bcfe648f761e26a7379153af0213bf4125bf3f2eb7cc87f8e988a59c2fcd3b7fddfb596f7cbbcdfd46b9ee82436dbf5df07efa9b964ff99cde533bb7857f8bcf352e12415714ff512db0c2b5de093fedd4de33409def772dd16e255a9713c5dfcff0047f3a63d5b482f6cfc0319cee03be9e5e72c2f62ddf2d1bac2d70fee0b3f97314627bc95f89a3819fcb7f75f82f0d6b8f0b198e63b69342faf8c1a693e4e279ca73d5fa013aae1b53526795a58c9db6824178881cb43596e6734f4c1aa9364595bc616b27d981f65a8debb52b82ed748452bcef23e170b2d2a65644dea20d7e415e274a6a910c5c0de44967ec82dbd157c194054141165a288485677eab4312f1af405d44cf176bbd860c5d8b65849b3b3a6a4795b578c252969b6c3b2ecacb059767b9d643f3020d1570bb9aff2709556620a24e13d33f1f7eca02b1ac488ec7eebb568f0231eb8bcc5227edc9737c3fbac67ab85ab2ef31c7895741c5eb7d78ababd3e7461c0f7b9eb11ec9aab0a5b9b1de689ecb07d1ad981d22a2c03eca8f324dedce21bd025843c7616ce3bd3933c5f64c37dc5654ec94fdd2af16815db0fb43d4c66258b75daf0261a5f86927286af032e783c2678b790824bb03cbe7bd83c3e41279997367c8b84b02dac8998da7b8655bb142b51f7d294a87f46cc4ad44998f0bd35c2ef8f9a099f8c6585f9e9f84812af9e82095ea0cb63fd18132b635678797a859783eac56459b9c8fd79a2328c9506792248b85654d843c0f32bbd27fca517267aee8439457958a7988aa5db424dbafd68986ed330e18b34c2276f62267cba4e386758a14b3b3e52a742ba97caba2dbe34cc637c114c9e58f7d420a2c52a44cad58974cd63fbb34276a0f759ef3d9d27ea816a712f4f8480d78ab2d6244d6760fa57eaf46f05f49f093434796319566e2dd6945b11c3726ba64e386ff82c6148c3876f5061def0d919c356a5c3c6a734277acd17de726d10cfcf160e50d9d856aec85205394ba3578198c5a61d964cd574e1bd05be4aac4efc1d6ba2f077c7561a846978f18d44820d2ff59fbee1c5b7f9f0074a72a13dd6c09aadf3245ea8566b0a55a3499e39585e588ee5851519e585b958f9ba52577837312b5fe761c26b34c29b343513be8b2eb788b08c9af59a5bf0b2609690cdcb8cf05d15bedd4a422c96881b1999469ec8968e83c5e02d7f7e912457c7ab011eaebcd0539b2bcd1f6f681c934546156a456ecea5e6588ede1573d93a8dcb9e62e8b2bbe95c56c4e3d4ae57979d2024e4c26deb756e2b828646a791f8d9d4b39758065d27aa838ac004cda6c2252b05d92a5165c0fb83c5bc026fe9950adecb05f99562da6889683ceb9dbc413879aeedc41c7d77ccd157691cfd654347df43279c3bfa6a4dfa17f610d0099323a87903aef99e1896351a2c1f1962d90b6b2eacd534178cfa607b636aefa751bb7b3333b5e763c2f7d7081f62287c01c6e480b04cca31b50fd4a87d8ca1da0b75c27965c8f76e4ae843f411c5fb32cf4b6b4411ce8be85877b05c741a55f77e2df33b8b5572b43e56049876d616613a1eacd39177cccabc77262f7c4cde5f8125c0219a0478d830012a31bf3934acdf2cc6d43e4ca3f627866a2fc1d43e3cacda4b7592b92647b0f0438a5598da4786557b1f8cf6511ada6d9b9bd15e86093f5a23fc1443e1d598f06334c217b43013be5c279ce735be475998f1ca1598e0e37485020fa555c5d4a2c0b8e542560946232bc495b5debfd5deb54542449ed8a6442dbf30d17225c6f6780ddbbe866c6b3004278464bbaf4e30f7fd13d3119c640d53ad4e301f0d38a9f1466034806f81653e1a5087613f45837d9d21f67aac0c39356c19d280493e2dace45598e4d3c34a5e8d493e23ace43558229ea949c48eadcc12712d26fc2c8df0a586c2f7c332e6d9bab2a91fe371acb18187c466d56221a5d6fb7b956cca54c48dd6f311f82a39846b92cff7c7f43c47a7a71f38c51b79bc63522e6674f81bcbbceac9e4ad0760e8cfd5a0bfc410fd8198f0f334c2ff34147e10c6eb7c1dafce29d2b542c4bbc5ae72e54d381e8c6973814e1bfe35966e26ef3904437aa106e92d9b9a213d1433e2229d113cb6d9c7b7b5876c86987e2a973bbaad12d5b839c6c3300d2ed669e007b3a986c1cc0c9b058763482fd120fdc210e91158897c69d812f9484cedcb7485666b33b58fc2d4be3cacda47eb24f356c7150c69755cc93269751c83bde72aec3d5767f49e633152d78425751c96c0d76a1278ce6666097c3c26fc3a8df0530c859f8009bf5e23fc6d43e12762c26fd008e70d6513e12761c26fd4085f6328fc644cf84d1ae137180a3f05137eb346f8fd86c24fc59cfc96b04e7e1aa6f6ad1ab5f3db98a97d3aa6f66d61d53e4323b9402c25cee52afd602caed92a7d7e48577a3bb8f06de7752bf453bd1f9b263853972ebc86be43a79241557e16e64d776abce957c34c703626fc2e8df01a43573d07137eb746f80586c2cfc584dfa311deb7ad99f0f3b0c4bc3764629e8f09e6279725b4058708ef5c29f2589e5864c3372b5d21fe5a21368cae1423e2e5c2f763034e2a8c8aef7e9b27bdb756fa74b5e7edc3bcab265a5f80697dbf4e6b3e4bc5c7c663ed66bf2be977437451ee796c806c750f30d2eb42cc071ed0f8c0d3860e761166f483217de0625d392b7655583fbbe1cc1133807cb7eac5c25396677929e5436997c90fb3547bd484d7152bbf2fd125376f5b3fc290b6353f98a81557d9a86d7d29e6b38f697c76b261b9751926fc718df06a43e19763c29fd0083fc750f8153ae1bc59c38f660ad5acb91253fb298dda7f1aaa7d15a6f6d361d5be5a27993fff4c3ac54f9221f26b30477f1673747eaa927927f25a8cfbf31aee63db9971bf0e2b9cf909150935125f03560a86305560713d284dfce1cf58c8781d5b2a66a1d5b38bc4609abfda4a05a3fb659dd9c8ccf598e62fa693ae4904df80097e49878427c41e8d2385fea0d65e86cd821bb1147e5993c2eb0c53f8264cf82b1ae1df180abf19cb03af6279e0b58cf2c02d58267e3d6426be1513fc4648c1b7615ef46648f7bc1d13fc5648c1eb748279daf3858ac1e97c2ec0643aff0ecc0bdfd17861c70e665e78a74e38af3cf87190a12a8fbb30b5dfd3a83dd250edbb31e1ef6b84ef6a28fc1e2c677e80e5cc0f33ca99f762eec88fa74c282df92e1cf3bdfff1102f3e6bbfc413cdab02be1a658db853233a61bc6b63e2bbf7615a7ca4d3a243a31685debfbc43c0677dfce0bdcc75b81fd3e1639d0eeda50e23bcff2f12dd0cfe9b35debf996bf000a6c13f751ab40069c1d78af28e80c9db1ec4dcf75f1af7eddbd1cc7d1fc2dcf713cc7d3fcdc87d1fc60abdcf3485de268685de2318a1cf35843e3224f42826fc0b8d70be27ad89f0c730e15fead2d650f8e358da7e85a5edd719a5ed135876f82659d15494e5a2e9494c8b7f272f9a8667b1687a0ad3e13fc98aa691592c9a9ec634f83655d1b48b789f591ce83398fb7ea771dfef0cddf7599d70eebeffc5dcf7fb8cdcf7390cd90f2c5c43ef798cce8f1a3a076c6946e7058cce4f189d9f33a2f32266c42f1a235e3734e2250cfdaf21d1bf8c69fd9b46eb219dccb47e0543ff3b86fe8f8cd0bf8a19f1a7c688e70d8d780d13fe3f8df06f0c85bf8e09ff4b23bc6d6733e16f60f8ffc6f0f3f5cae6f8dfc49c33124952ad8dc872b5f616a64554a745ac5a2bca62b5f636a6c3263a1d54b5362a8bd5da3b98064d741ab464b16a6da218045b6938e8f52ee6c04d23890efcbea103bf873970b308e2c0cd3372e0f731235a688c98d3c5cc880f30e12d35c2d7190aff104bee569170f5c23f30ad37d568ddb7ab99d61fe984f3e191d69190c3231f636a6fa6517b9aa1daffc4606faecb5b3c903c79c0e11cefd11a1112b844943bb5221ed75f2b5c21a6726732ff44327f878c72efaa3fc4bd547c57e566395b28275a878b895635b0bd96f987d3e4894007ffb0da3c312c5e2187b997892b75e2a94a20593f955b25a7a4e1e4af69dcf0bfb0046aa349a03d0d13e8134c785b8df0430c857f8a1546edb0c2a87d4685d16798111d7484ba9919f13926bca346f88e86c2bfd009e799758b740aa32443d75f6a0417e4b1f536af9eb8775f76e7d5b7d4f1d2ceab778aa49a570faf2b36affe15e64b9d75b9cdd097bec6aa882e61ab886f30c95dc34afe37563f740b5919ff47e7ffbdf9c5c5ebc5ffc3ecaa99dcf3bba7edf93d84e70f4ae2f9e1f6fed4a7c4b798f3f40ceb3cdf61ced32ba4f3fc57279867d33c4d367dbbbb5936fd1ed3bab7ae49c4b7c42e161dad4ab19444b708294f3497f20ce3c57ec0f4d84aa78777cd50fe8f98fc3e2153e7279d609e3a7d35a9d3bd8759eafc8c69dd4f47853b275ffd1e3b77bb449c72e86f1b6ed6ccfb0533abbfc6ac630ccdfa15133e4023fc7e43e1bf61ccf243a6f4ef98d603355abfdcd34ceb3f30ad076129ad0244aae2765ef0e34b4dccfa137bf3606cc8c33f53bea0f138d982c6bde5cabc52a18299c6ddfc0fd360884e834e5a0da6c9989fd2c6930f325bf0f617a6cb509d2eddd2d425f1bc51139dfed6e9c41d6f98c6f1beeb65e6782c82185c1032bb4430c18521054731c1c3430ade442798732ed2706e9b67c6b909267c8446f8eb86c29b6248468644d24c2798973ea342f6089beb04f3cef868ac333e26a3ce780b0cfb580df61bb632c3de1233621c66c4d61919d10a33621b8d11df181ab129267c5b8df0ce7dcd84b7c61c733b5d71cab7439cc5e0265915a2a3a10af27c3690f99b0af9ffc62f9fc813dffcea8777176ac41d55e4d6b16ab1b3471d83ebd7fd91b55a114e1abfd841bda75e049bd68946ae2acef344615e611893b919c6627b1d0b7ebe13dcb2d56f6ac72ad8d85af2d542c36a165b02edebc7754e25a1c87bda74c9c9e698c3eca07198a57dcc1ca60d96a576c4b254714659aa2d66c4788d1127181ad10e4be9125d4af3ad5cf4e3c47bc81166be648777b1fcfdf292a5697ed2bb03451cb10ab0567e1d9f03560acf50e3c8f1f7ea855fd56b72d142a1e14a300aedcb5e29bbe826fed51ea337216465d601133c31a4e08e3ac17c50a134eca0c21698e44961256f89499e1c5672274cf294b0923b63ad919d42b646ba6082a78614dc1563312d2c8b6e98cad343aadc1d2b1967684ac60bfa9b958c3d30e1651ae18f1b0aef89099fa9119e3fc04c782facf0d85957a6f31dcf6373877eadac6611b3b331621ea6cf2c9d3efed96489ef3479636f0cef6c0dde058678b7c284cfd108ef9b6f26bc0fc66aae8ed5f67169173ce94297727922eea45cb6182b841855cf065ba179b246ad1703f85c469ea89bfdc88dad0ddb627d31cbe6e92ce35f335bcedb0f4b9e5d34c9f3b461daf7c784efaa11bea761da0fc084efa6117e8ba1f07c0cffee3afc9de31cabd8bb5c2b1a7d15a26312be48188899ba87c6d43903cd4c1d8499baa7ced4b69af2cf37719534cfccb4c1d8dbf7d2bd9d57b08bc0d077ecc80493770ec170eeadc1798921cea198f0f9ba8ad050f8308cd6021d2dde689826daebf5ac522eb19cce2a452b7ea5613a156066956bcc7addd0ac424cf8428df02683cc840fc73a9e8bb08e6745461dcf222c6d2a7569138b729c2f720d4ca3cc630c47603a2cd6e9d049ea5028a21cf9e56aafbfc7a3889679ed197f4424735d4662ba2cd1e9b25540971571535cc9bc38730d47611a2e4d45ab58f4e3835acd63fec6d48bc5262166f96b34a64b954e973ca08b994efc69ffac0313edc66019741fddc8d060b30c3a16337d99cef4de81bab6421c44e6ef73e237cc54a5b45ad4ba4b595e82739b35c5c661fa5563555449e82a6a6bec9dcb75efe470e10067a65b876e8325f30a4d32af334ce66d31e12b7515a3a1f0ed30e1351ae193879809df1e4b8c7d7589313cce4113fb66d81eaf7cb4766edc8ea2c3c1796c8be438223f2eaac670dc6d074cff5acc99f8b864d85ee58e5892d469926457c32429c6865feac30ebf8cc7d46ed0a87d83a1da2598f0551ae17f1a0a9f80095fad113e72a899f089582b6a0dd68a5a9b512baa14f3d5fd92b5a20ab3da8a9a84e9b03fd6ca563af8d54ce66f9e8cbdf900dd9bdb8337cf124faf14954db00d60a2c1144c8303751a746389ed90649a64d6fad80973ec83348e3d769899634fc50c3e3875eb23d6d2e0133c2bbcba571d3da00af178a754bbe098183f0d33fe105dcd6668fc744cf8a11ae1a7180a9fa113cef7b63c2c92c640f63a5c7019a6f5e1ba668aa1d63331e14768847f63287c674cf8911ae1d30acc84cfc2841fa5115e63287c36964d8ed665133e4acedb10438dda3f26d9620e66ec311a63af3034762e26fc588df0630c85cfc3841fa711feaba1f05d30e1c7eb4a8b4233e1bb62c24fd0083fc450f86e98f01375f9ce50f8ee98f79ea4f3de8e2cb83e2c3b333b7b605a9cacd3821f1ce7bf9bf7ded77abf59ece52975e6b6c97bf7c4d09ea241db77b819dabd30e1a7ea9cc250f8de18b1d374c4bac6a55b2c583af91c8f591acec7cc3d5d63eedd86e62ec0849fa16bc11799092fc7849fa9117e81a1f08558f7e02cac7b707646dd834598439ca37308beaa410db256893d0779d22f1155d0ca505d840a4c8f73757aa8c5dc7ef3b85cb409cd3ad395d8fbce4bd531487c6f668df0c598fb9caf719fe74798b9cf12ccbc0b74e6f58ccbe7ba4d266b1b8d8d35d207c8a838b3f9d1a598d917ea5a6c86665761c22fd2081f32d24cf83e5896bc18cb92976494259761697769b22c5994f52c598de97159323d0a851e15c27f6261fd7521f4588ee971b94e8f2d811e95da03e033d76405a6c9153a4dda680b29beec688ae463f2ee95d8bbafd4bdbb73d2020bea9059e1558365b4ab3419ed965166196d5f4cf8d51ae18586c26b31e1d7e88a88d166c2eb30e1d7ea86680d85d763c2afd308bfdf507803e65ed7ebdc2b3faec2d09d753b9cf4acdb5598b637e8b4e53b9a7197e76b61f90612a6596f3506fe460df81f0dc1afc184dfa411de798c99f0b598f09b754d5443e1fbe984f31d196f89f0a5bcf1c2f97f09c2fbe3c2f7c752f8d674c6ba9224e60198d6b76541eb0331ad6fc72a883271f45db50878f307714a99bfed88e9f644076169bd4e93d67f1aa6f5c1986177606d0178e85bf68c3c0433f24e8d917b8e3533f250ccc8bbb086467038de1f4ea894dbc6ac14e54db55c896f62e661989977eb8a7a43330fc7ccbc071bbb8169992d138fc04cbc576362f77166261ea913ce6733ef8b849ccd3c0a83777fc872e9684ce507c2aa7c0ca6f2835857175694f3bc34f637d098260e16a811957a9d916dc76269fd9026ad0f304cebe330f31ed699d74e7c55264d90f9b75c2c91ab643358a5e8189818773c66dc231ae3de3734ee04ccb84775c6b54d6a5ca9b1692762a63da6316ddbadcd4c3b0933ed716cc42766da24e687909b18733266cc13bab690a131a760c63c89d58f3163f85ffcc672d13cae1557795f8d87613518e6b45331239fd235020c8d3c0d33f2699d917c00a45454f0dcc862b9895ab9d897a7464e5af1878bbdc72b44556262e8e998a1cfe81a02db98197a0666e8b33a43bb332642d4ab45f9080d2d11e9572fb6258a99c9afd68a9109b3b43d1333f9395da3c0d0e4b330939fc70a1a68a82a373375dbb331d35ed03506b63533ed1cccb417b1463934ad349461e76286bda4abf90c0d3b0f33ec659d61ad02866552869e8f99f38aaeae3334e702cc9c57b1e63734279ba5e8859899afe98671b63333f322ccccd7f1e1cc3aaf71ed57e21559ec4c5d8c99f986c6ccbb0dcdbc0433f34dac0c8d3793a6ff782966f25bbad196edcd4cbe0c33f96d9dc93d124ca6ea4d5e8e19fd8ec6e83586465f8119fdaecee86e49d3395b065f8919fc9ec6e0b70d0dbe0a33f87d9dc15d120cce76e7ea6accd80f34c68eddc1ccd86b30633fc4671da0b1d9ed6a5d8b99fa0f8da9e7189a7a1d66ea4758eb365d53cd3b5ed763867eac31f45743436fc00cfd27d6d4c30ccda409712366dabf7475eb8e66a6dd8499f6497a950e4da7ec66cce44f75f5aca1c9b760267fa633b96782c9745db45b31b33fd7d5b5c56666df8699fd85ceec3e0966e7a2c3763b06e04b5dbd6b08601d06e0abf48aab6c76dfeec00cfd5a57df1a1a7a2766e837e9b597b3d799bb0b33f3dfba9a76bc9999776366fe071bc6c4cdcca45cbe0733ee5b5ddd6a68dcbd9871dfa5d732a6eae8dda7d38bc789fe379dd1fc0eb8e0fb319adf6b687e6348f3016caae087b053050f623c7e0cc9e3218cc74f1a1e234bcc783c8c79d7cf3aef9ac8586308b23a29d9df988bef2d014f44e65be371aff365d688ea10ae8bf5c36678ddb082e5e2d4e5473088bfe89a4e86101fd509e7a5e9af8d3702d16dbf4532896e7b0c33e2778d1167181af1389633fe089b339ec072c69f2173c69398e0ff8514fc1406fa2f0de8d70d413fad13ce1b977fa7a37592a548cf607999453579995f37c941cf62d2233ae96285a288722a90114d26ef7a0ee31f8d6a8abc8966fc9fc7846fa2117e8aa1f017304a4da2e1e6b85fc404370d29f8250c47330d8e7a431c2f63854af368c842e5154ced161ab57f3554fb554c784b8df01d4bcd84bf86096fa5117e8ca1f0d73137d954974beb59aac3a75434629803a7fcbdcbe7c71d6165f7f1536f6049d45a9344e71826d19b58126da64b223e799f78029889316f61ad93cda348eba44d3493d6c9db985d6d7576f1faa7c0c88e77b04469a7cb3753cc12e55d0c527b0c52878c20bd8719d15163c4358646bc8fa5c016ba14e8c0f4bba7d5b1307ba87d80e9b0a54e872ec2bb6b4576aff38a0c7fc62ad81998e379fef40c1bfe1f62fa74c2721b5f329ff9310affc012b8b326819fdec92c813fc28477d108ff68aa99f08f31525d75a4c4ae999a82dd84d53fb13776d3bd714b6d49385d78acdaa92676c7f0bc414c93ee3a4db8043e7c62dad4fa44f39602bed958646746794057bce439deb71aefef21a27aad93fbdbf39cbe30c5b15b3da2fc38d27818a2048c041888a3b77a46f969385b245896ecfdd8815a9fead2877fed15e5e7a6c5abb4d3f4439b5fd0fd856842d234c593e633cc01f2740ec0fb986af1cf62c63759a997469916979f63f54e6facded92aa37ae70bace4e8a32939ced8d9ace4f81213de5723fc7943e15f6129d32f64c7e76b4c707f5d92ab15698949be4236434ddefd8dae24e893eb92c0df1aae3683926040949f0e168f6818520ee423e540b2b763e5c0bf75dcfa726ef373c8cd7fceaf71f86c9f1f6751268739578ab68c39d381517e5c61a04b2cffd3931d24c8f649b03c53fd30eaffc1f2f7604dfebe658e59fefe16cb864374d990bb113fa171a9ec21aaa5d6b1e5aa79196e3efd1d36543134ec50c57f31c9c3c24afe1e935c1056f20f3ac93c150ba3fc38d9442f4d10de0e17fe2396e4c34316e93f613c8ac2f2f819933c22ace45f30c923c34afe15c33c2a24e6df3095478755f9774cf298b092ffc0608c0d09e34f4ce5716155fe1f36bdb1753a2a2799def80b53799bb02aff8d51de362465164554de2eacca114cf2f661254731c93b8495bc092679c7b0929be824739f2b0ee9734d3195c78755b9994e3277a592903ed71c133c21a4e0163ac1bc729d9885cab52506ba342ce8563ac9fcf949e9f0487218d0a63ac1bdbdaf93d311cc4ffb4104b7c652704ac814dc0c13bc5348c19b63a937356ceab5c1526f5ac8d46b8ba5def490a9d70e833c2324e4f698e0b290823b60a937336cea75c4526fe790a9b705967ab342a6de9618e4d9212177c204cf0929b833967a73c3a65e178de4827eded7c83e8c72d862aedc2d66ad5839b1440c097099ba99533e20803daf8628fc6d0c1b8426c90733e6a593166538b1ae585aec12362dbae924f7f2beee9a8eca0fe382bb637eb95b48bfec8109de3da4e09e58dedf2364deef85a5de9e61532f0f63b1574816bd31c17b8714bc15c6627e58167d30c90bc24aee8bc1280f09a31f26786148c1fdb17ecba290fd960198c6152135cec734ae0ca9f1404ce3c521351e8469bc24a4c68331c14b430a1e82a1a80a896228a6f13e21351e86750d9765a16b5880e1a80e89a310c3b13c248ee15811b7226c115784815e9905d02330b56bc2aa3d12537bdf2ca83d0a53bb36acdaa331c97561258fc180d46701c8584ced86b06a8fc324af0a2b796b2c93af0e99c9b7c104af0929785b4cf0da9082b7c304ef1752f0f698e0fd430ade01137c4048c13b62fe7660587f2bc6241f1456f2786ccce3e090631e2598ca87845579824e325fdb71683a2a2759db3111738cc3423a462926f8f090822761828f08297832967a47864dbd2998c31d15d2e176c2543e3aacca5331873b26a4c34dc392efd890c9371d63715c58163330c9c787955c86493e21ace49998cb9d18d2e576c6da452765a15d340be37172581eb3317f3e25a43fcfc1fcf9d490fe3c17d3f8b4901acfc3343e3da4c6bb6082cf08297857cc2dce0ceb16bb6192cf0a2b79776c38f8ec90c3c17b6094cf0949794f4cf0b92105ef850d079f177238786f2cf5ce0f9b7af33116178464b1006371614816e598e08b420a5e8841be382ce44518e44b4242aec0eaa84bb3504755623c2e0bcb6331c6e3f2903c966065d11521cba2a5d8f8dc9521c7e7aa30c1578514bc0f967a57874dbd6598e46bc24aaed649eee77dbd361d18492643976394af0b4979854670013fa321b29051ce4bcff3a495882726b0a9de3d7f25f130791d6e6b582cdeb0879c6bf6efc7ff2af93cf4f53a42910021114c7f439407d3f7174f664f3b2ca47e2556f4dd9885a2af062ba06e0a5940ed8b697d7316b4aec584df9205e17558aebf356caeafc732e76d21336703569cdc1eb2385985b1581796c56a4ce53b42aabc06137c6748c16bb1d4bb2b64eaed8741be3b2ce4fdb1dc7d4fc8dc7d00c6e2de902c0ed45533037835b38cb49a4916cec465ae14dff9db54119ebd00a8fbd2ae78ee17154f0163c4fa6255d141ba64e7a9f3403ac9ceb547041fac13ccbf3e184d5cb4abfe4b784153dcaf0ec16a8c87b250631c8a097f380bc20fc34a8747c2960e8763038a8f861c503c4227782befeb63e908ee89bbc99198e0c7430a3e0a83fc4458c84763637e4f861cf33b0653f9a9b02a1f8b65c6a7b394198fd3bd20cffbfa4c3a4c3ae1031bc7634c9e0dcbe4042c199f0b998c27622a3f1f56e59330c92f84957cb2ae92e6875546e6b2f5b3b45a557266cba85f4cbbe27d4954bc5d12ac4b4707ac323d05ab355ece42ad712a96f8af844dfcd330b55fcd82daa763c25fcb82f033b0d6f0eb215bc3676282df886ad6a54f606adc20beffcfb787ae67ab85e72c933e354c6c2431c5bb1fdbea885fd137e674b1fafc69e8b33c47ad64fe9e6c665b179f8559f9a6cecaa31aad9ceb352b796ef673fe72f1f7145126706bf8de6f7ece9fd2f8e4c4c615fab3841595728fb95ac963b6b85b11b78f783cbd9804febc991e98a4398c6f41b144dc8d670a4b81206f7faf7bb39d5ecec648bf85f9137ca36fd308ef373ead955e693bdff38d5a91e6beb573e4ae08416d63bfc5af67cb9fcec1ac7c5b67e5f6012b2173df4e7f8bfde5c2c6a096f12904ef24cb2bf05726969d8b59f68eceb21dd24abf62b173621553db72844fb9d81d13dbcec36c7b5767dbe8806dd345ea2c9596f16f6bd69b25e76396bca7b3e4841c9767b1df4cf03ed538323f48a25696f275065e0ed9e156f0baa441b45f60a9c75b6ed92bdb2ec0a8bfafa35e9c56de982668d45951aa5d88d9f781cebe69845ec5afee2b5ec3adf2dbd9b1b3e0cbd192249354bd08b3fa439dd5db25b51ad77496b0850f51d54b1b556dccaf2e928412f345e6a9793166d73f7476ed66dcb29b2deec4b7ed7412b0f9a4302dc14cd2f9128cc7473a1e5373526753d7e69762367f8cb553cc7c40f930df9072911004d3d9d4234c2cbb0cb3ec9f3acbb6462c9b2bf267b56c9bf87d78d56b9927737145426ad0f4512ec72cfa97cea252c2d257a5aabfe99f7f0e5d2285cc2dbd02b3f4139da5db326cca405752c45b0077f9e64c268b54ae15bda1455e8dbb368b565d8959f5693a7d82f8f7c216c25c910ab5deb33c1f2e4952fbc5cbc89e655761967da6b3ac2465c9995eaf002f4393f559332d29afc66cfc5c676325718bba5eec2ecf37f9f55bccf384075435e6c6ecf41133a945afc1387da1e33477bdf53c92130acfe15a8cc3973a0ee3d1328cf790167a0fa9bce16fed9cbcc6d14bca764a5f8759f895cec2298616ee223c7a059222ebc3deeb317bbfd6d93b8bd0b3eb32a87fb341e0068cc037d9aa97fdb2ad18d4caf456dd8859f56f9d55930cfd78a238b76ba56cedae6f1fbe09b3f53fd80885690a968a2712bd3158bea62fd7c4be9b31fbbed5d9b74d8896633d38aec1efe7e156cd4978d6c4a65b309bbe334bb3a07f168bf1045eaaa4eaa5d0d694b762f6fd379d1901acf538518c0f953375f877765a8f99b7916fc3acfc1e4b45939eb16ff924d9328cdde5f33ac9dbc0d96a1fdf8ed9f783cebebe2cf9d8273fea8442cb7598963f261fc1344985d919a502650ebb03b3fa279dd543d112644e63a4032c0917378edaf3164e83b6759dd92cc69d98de3febf41e97b26498226640f9186bb557b2d77ab6f96772a62a1db25506dc85d9f30bd627489e47789f7fa66827d7695a4ae9cc98f0f6e5e22c5a783766e1afe98c04e86740a608df4b5e9ae77216e41eccc6dfb071b874eaab74accc759d752f66e9ef3a4b27a7959ac1f92c3f1f2abbd767bade8759fb87ceda5d53a62bedf83ff5ccc0fd188d3f7534766774bd5dd5aac97cbc0ba76542e4018cc8ffb019057d2d9a18c6bebe7a160f6216fd858dd5a5eea5a653a6a5d3d735ef0f679ef31fc238fcade330c880834a53753852b672e7c398c66c138dc6fd539655b179ba4a7195c7b164a70df708a66944a7e998246dcfa0a7c76b5e234a84d8d82e457e7914b325aab36506d27bc0674bfd922e4c3424d56cea6398e59be82c0ff6d1b1f221551f3db31a2ff372e071ccca263a2b47a1be1a6e24307c7fef09cc8ea63a3bf071da5435d512c40b69c6f69ec4ac6aa6b36a2492fb4c4750b2dda77d0ab3a2b9ce0ad3118862e163fc9a6f0f67acf3b8f8f673666f30b1fa69ccea163aabf7ca52dad585b02e375c9ec1b8b4d471e917285783a94d578b3f8be9d94aa7676948af9d24edc896cf9a58fa1c66e9a63a4bf730aee313d73be42a262ef37af1798c496b1d93a9c6f5899fde897713a31dd5a1b9782d932825b39cf90266f3663a9b8b92b47832f1ee6cf4575fc42cd85c67c19e6cfdf6e061caa6db9357bf31a1f21246a58d8e4a300a4bbdd1a4151bb30cf3e4ece4d29731cbda6265743a6df474c62573dd4e7f05b3b45d3a79b344f8acef9ff560bec9f7f1d16ca451fb3cf62b130b5ec52c68afb340bf5280bfd3c40fa17dd8f56ca5d06b987d1d74f605478e137dd19fa7a8943d7c5ec2c4ac4dac2572ed8faf63d676cc5ecf44b5edaabc67a78b5fd437b620b263c51b98155b603d93e4634ab12397833aaa23aff1921e3bae3959ed90593dff2666f5963aab53cdc9f93971b6f7f042e68fe32e62eb7b55db5b98859dd2292df584336bc9a41eed6ceefd2f12e16bb9270a29fe0ce74af11bde1e2c18e8dd8a1436e6a0618d6d906171ed95d875fefee55e6af03c31a7b1b511dba70c93d0d983c38fd414ff0d8870b0eaa4fbc862165c2b5f22e457cb924579eb3041c86fe9f33d0086793db32af1abe00e709815ba76d730d0f282d6a5b6692f64157f24d25c5aa46479a4f930f7066769179eaa0364aa460b06731b0767e84da9b5e8ba893f38a5f3a14e096461eed0e9ee0b98217b7a11be8d01cf6085b291562592432d2cab4cfdbee0a977c1f70d1502543b35a5b8b920e36bd10b27f383fa6b993f097c447fc69a378d16f224e84609ab8380c5d364a67839be0ecf056cef378961eb9e1b6cb1218b3aaff2aef2e4c72fc17401db3525316c3d28b1f1bd542688de6e8de76ffe2a04d5aec1fcaece09849f4462087b52226ceb7d514ddec9a2b9cb05948b2e1b0f762f63cb9c00f678cb18b05e94c03a82eaa06e0300d7b7750c5c1e25b8f61a705c20ef66f2e0ba0671b5c209680b580c5a6f6a6f8bcf9ea5debffebe57158dd1bbbed7b9006edbcd62e0b6a204b72563620a20dd6ac1057867804aa10f25bc4d41562d8b1b77760153931e314c7d2931b504986241072e20aae91443d48f12513381a8cea932aaf3e63138fd29e174f6be943576955460951fce3a4b14fa0d8c2fcde4c5fc4c39dce804c09e3180032801766278b70946a0558acce94ae3e2e1f1317cf994f85ab0f8910d1eaae702a0bbdbc7000da404d40eb4be4ac40febc5a81b6f3eb855e00fe91b433688ba4e2c1393dab1ad02ddc8761f8166c360eaa6a9f22ade44f5374de7fbb3e98617dd8097df2f066f48aeca2cb575810b808ee818033494125057e05d13d91a617543633787af02aa10f5e12c913d2b4466adf65ee80244fe9f82388c12a25714c4c1e303d97c9ba2cac6d30d2a1cef4b760443db05942837931582f2b7b5b2813b570cf7b880ea4f503114d2f727d5269a6a0ad505443b8e8e211a9eabf1305e77c2383835c4e3525fb33518b62eca65a3036efd522c46c8a0cfb9d1e838050c5d8fa084d71a343a626b4efcd5262e80ba0074984652826ad558824d60fe7c25ef22b9d1b8e808cab051d4536ed34519b52c10bf3ec17bbc56bcc90560fccc5a056c3475375c65bf19de63bcdc5aec099ce2fdeb16b28f0a62c8c650b7ba82936d8ea1023dcab1d4853b2fad5c8ded3963480cd4b8dcce45c6af42a870aced7508687b6d4d3ff31dab155dee375ed134066d1b6a6f9b28c6ef1bc4cb633b5b278ef5bb00eed7663170db52c72bc203665c8cafe081c70ad676f4d13c7ebce24a21c6ed619dce207b6e4f09ae0d835323fe1643fcbb5ba1026d415cec0ed4433b0a975bedb00b403b6c47ead9f0595e362c61e91f3be204c0161c60f3a601e1c175819947fc9b51c7d726b461fea0778db85a2f5b74716b15bca6a67d9a17c3b506f9194f80e4a7ac39f3d38e61cc378e3fcbcf3098393fade184fc90331af90681fdf946956a7edaade37ca326617e46e549bed10073be5197283fad58eb7ca300e37ce3715d9dce7848697e4200577ed2c1d07c6d4c49be76d6361f899fcb4f127e988fc417e4a79866cacf28d62a3fcd0090c4544835a59f8f3408f2530cdce4a7d1eeca4fb962293fe998477e9ae36df9e8686f3e3293959f41c0162c7952ad8d892d6a84d5566c3162215fd438fefff97ac342bedeb08443385352f0db7613a8db76dca3fce5a5bcbe4dbe0dfa70af8515d0a17b820ef1a742ab369c4e9b9671adbccdd3313093965e4b30203ed1269c454ee21c057096da847384933867009c936cc239d2499c7500e764eae9c2f9b24c8cc7eab762f86364f89a53e16b0ad6b24cc985372e41fd11aa3f9f8d63a3e970b6a6c2590870ee6413ceb14ee2ec09704eb509e7282771bec86238a7d98473a493386f0238a7db84738c9338ff063867d88473b49338ff057096d98473b8933897019c336dc239c2499c67039c3bdb84b3c8499c47029cb328716e21712e924370c10d077dd5fdcd150be94036a502f9296871cea65edaa20677d39de8e0cfd78a67ddeba737000f9d938b0c8f792814c72ba342afb9e45ebffd6ee0a7736dc239dc499c1f029cf32871f662704e28fd796997b37e09c8fabb502fae4936e219f455f7fcf457e0a7bb52c795cd177d9f9c8f7592f9e155c00f77cb05bcb11bd040f18700deeef49b89a45be1908e1c91c11c04b2f11e36c174b1ee1e0c60ee6913cc910ec2ec0b60ee6513cc510ec2cc0730f7b60966918330f300ccf936c1249c352783d907c05c60134cc231233298ed00cc729b60bad8c3e905602eb409e65807610e033017d904739c83308b00cc0a4a988324cc6aefa16af1a9e2ebe16139a607e91196ac1da890af05c15d9594c8bb30f3394cc202816c9ee839e0c38b6d034a582890017d1e005d621b50c20e2819d08700d0a5b60125ec8492017d0400adb20da88b73ed8f01a0fbd8069470008f0ce85300e832db8012369bc880de018056db0694b0534a06f42e0074b96d400907f3c880de0380aeb00d28e1801e19d0fb01d095f45b0b2e158b7bfdc5c63c7a2961f77507a683795a286435eb332c21fe905ec20a671d15ca09a09fbe2f25ca012c3834e29f0c5cca6ae523e3bdff73efe4d1732bc562f26423512e0e370f04b06b73e1b7e90deab98872475004d4d1a3ac63fe16257c417db1e7a13cbc8b4784948a7f678932b54a6c5e4286b23f154ab855583d25ca9e9ad2742ef3f74f582bf639f0ebfacab89d0cb8b8e5b45efa3015da6e20c337507b69b1d89666a5dc8c839f47cd831257c80d7ad41625fec62feed5f94d8097aea2df6b92b727e78b0bfce5e5a2a9c4afba1c08763b40b83a1708c76c7008ff0d10aea144d881c5a28dd567b1508137d9dd5e50f03580b8d6a67d1448d7b791e1ec0c2a99fd6cc249ba208b0ce73880737f9b70922e1724c3b92bc079804d3849e38fc9701e06701e481f1782f57b66088caef77c86818ae8a0f5398e143f8e49382cdc8e0ae569c02f0fcecd663e8501a439685776a5c2f705f0c44372b10a58ed3d398525ee5fe872dbb2188ca61f4aed87f3bcdb55a274e49b3ad689b2d12f2dfd7121f74ac43ec00f0fb367c19f8b4187ed418978782e50c2f5e8d358199b24b76a5decfd684d2e323519caeb81571e41dfe8819363f3d932816ebcd86474991455ea7df2bd6913ce8270a0aad90cc03c3217c3bdf562abd9bac6b057b503abfad4cdfb14513682c8d02e0495cf51b6a2256d5f92a17d0178edd19468fd6db01789594adeabf117f14f17b395cbe8c0f5a502b72500774caeaa217fe76e1ec71e9bdeadcbd5e02f591f672940792c75231d2e0448f4c752511dd50b11eeb532bb0090c7e562714bfa5b97ba173fb4278079bc4d305d5c65b13b8079824d305d8c5f9f0b609e68134c1757574c03304fb209a68b71ebbb029827db04d3c55515f300cc536c82e962bc7a298079aa4d305d5c4db12d80799a4d305d8c539f0a609e6e134c1757514c0230cfa08499c712c7d9cd569f13d6ef64abcf0bc1d8fb99eb73f78460d00161294a36a5b613f0d5b36c824958bf93c19c0d609e9d8b79723e1cb74a4ceef243de72340447866f6b80ef9c5cac3ee3f81297aa7061b18d9d5d0e686560cae2dc5cc40473a01b564cf06dc027cfb367ab1ed26398c8605e06fcf17c9b60bab8bfe61500e60536c174717fcd8b00cc0b6d82e9e2fe9a97009817d904d3c5fd35cf03302fb609a68bfb6b5e00605e62134c1757e99e05605e6a134c17f7d73c07c0bccc26982eeeaf79158079b94d305d0c75bd06c0bc22179dc8d11b5c2772398b21bcd2ee0161c2ec4e3620bc140c085f451d05378d5549012b0438be38802bb288a93381fcb516fcadee056f75039e7a756e56fa8c0b78accb19fd2850565e438faf8ec516f0c596ab4c129b41ac70d0fbfa03efbb36570bf063ab2ae0c200f2f51464c1d4b70288d7d1c7a997889fd40bdfe325df44ef7badf8d17a5b5d4177a200407bbd3d5b3cb93846b410a0bc8112653790d575eb217dd579a6f76b6e97d7477604d5cf8db99a4053e5e764d1b68c4d9e558abd8996390d742fe0a53751021dcae237d0ab646b643bd317f1ffed84817ad0a4bf3917edd0227134f286d20e7d111404b750efcb3199f1639197b0a5de4fe7788fc65aa225e287b5cc5f2fa4fa4764382751e11c058a815b73b1cd49fa4b5a5c0c361c02bcf3369b708e7512675b80f3769b708e7212e76320b3afb30927e991766438af0438efb009e7182771fe0270de69134e37f767ff00e0bccb269cc39dc4590170de6d13ce114ee23c05e0bcc7269c454ee23c10e0bc977a7884f774667aff72217cabe65a30ea14eb0bcd12aa3578d70987476aa980ee0280de4709b48df4cf111b501ffd2200effe5c8c80c2acaddf993dfec40bc208e31e1122a8e560dce8011ba1128ed593415d00a03e682354c2886332a87b01a80fd90895b0862783da13407dd846a88411c86450b700501fb1112a61bc2719d4b600eaa33642259c352283ba2980fa1825d4112c717e3e7e933e3ef5b1dcfb1fff3b36c5bc5884427065f91edbf56cb578c5322f1956b14af1d41cd1a25573aa8489302f1d2c9924c20e2c96088fe76a4fba456227c415025c0c668ee246c94279ba8191fd2772d1ff4f2fde6438ed0e9e643daeaf01ce276dc259e824ce9b00cea76cc249ba092a19ced701cea72971766589c13bc9a2f8dcdd5aba3d40fa4c2eaa226cf434de435d5cbadd1a34ad9ecd4d60f8e80d68b06f7fe089cfd95456163ab926e96180f3799b700e7712e73f01ce1728710e66f1618e35205c31b6d1797a818dc5a28ae2d748fb49374489a0af0025ea8bf471fa996ed54fb8350659bfe973e0cf2fd98a76b893689b03b42fdbb3b496f47047b272f73a1683f98a4d305ddc0fe70600f3559b60bab81fcef900e66b36c17471add30500e6eb36c1747198e45000f30d9b60bab81fce6100e69b36c174713f9c8300ccb76c82e9e27e380703986fdb04d3c5fd70ee0530dfb109a68b8325f70198efe66291ad49c8b88bc7f21c0bba94efd906d4c543a38e0740dfb70da88bc7f31c04807e601b50170f8f3a0400fdd036a02e1ed3731800fa0fdb80ba7888d41100e847b60175f1b89e7a00f463db80ba7898d46a00f49fb60175f1d89e3500e8bf6c03eae27abbb500e827766f7be9e21e39ff03783fa5c4bb99c4cb5fbc58c055b2ab28b7716b4a058effa7c07d461d7bcf0742cad86ae6ef165a27268a6bc4bacf7dc5a13d5c78fc37fe9c7bdef804f0c6cf7331e79e98d9d30b68706fcebd238814f92257dbba4d17d176cb020b15fcdd6ef91b5dded66d3b50007c490974f3a425671d1dba5654e8a200dd57eb730b4cf70f301d03507e9d8b905abec3dd86735adc1100df37b9ae70f42be84a185ff455233c56ad4022f4cc4e1122b4c7810ae7dfb908afc5fa41898742ba782ce42600e77f6cc259e424cee100e7b736e1241d47a23b0116e0fcce269c239dc4b90fc0f95f9b708e7212e74900e7f79438fbb0c4557113d91ac6d7c33730b55f5399f7f30ac67be8b30458bec535479f93fe503b2ac8a34153ea079bf619233d4c92ac613f140c85fc6813ceb14ee2ec0e70fe6413ce514ee27c0664f69f6dc239d2499cd7029cbfd884738c93387f05387fb509e7682771fe03e0fccd269ca4cb62c8702e06387fb709a79b7175a7019c7fd884b3c8499c87009c7fe66a9e68b6e8f33478928bbd9ff373e8fc5d6e2bc42eb7954ecf139d0a80fecfa66d064807eec822e73f030df9bf6cc259e824ce1b00cebf6dc2e9e68aa367014ed6c49acd825c5c56f8374019a144d98e058f412d16339cfe1974ee1e845a042a9e282540b560ab504e0dfbbbd42f14c3c6ea21d74fdf3e13c0dc8412661b0033c71b573550c1db03c06b42092fdc2e3584cd75b2b0ae474129d9d456b4a4fd7432b46f00af6d968bf233bda6d1682777a9d903f869739b60bab84bcdde00660b9b60bab84bcd6c00b3a54d305ddca5667700b3954d305ddca5660a80b9a94d305dec4e4e05305bdb04d3c55d6a2601989bd904d3c531a3c900e6e636c17471979a4500661b9b60bab84b4d0580d9967a34130ebacd1341870de2a62f6891478747ca5579570997bc900dc6f1c35e14ca769428fd7176389ac9615689bf27889e7bbd88e5e4dff9b22c8edb3d9c5b019ced29719a2fb31ee9e4fe491782acdec136a02eee9f743100dad136a02e06269c09806e611b5017f74f3a1b00ddd236a02eee9f742e00dac936a02eee9f743e00dad936a02eae163e1100ed621b5017f74f3a1900ed6a1b5017f74f3a1500ed661b5017f74f3a1d00ed4e0954052e8cc97de002d914f0d52c06af07f50048b270ae9c1d00bd8e0ae56cb006b3672efc705ceefd902c86f823e087bd28e1a95d3e8a3cf5369c83f35e0065601efda0f052b1531cff2947c6455578df1abc1f2e626a0948832780aff875cf173705bed89b1266b83dba085b9364d54d1b50466e958bea26bdc90b17e7cea7032fed936b2fd56fec3347949f2b44f6e7e296d3a27d980aed12e0a57de9a7324c36f6211c28262b4fb70238fbd984b3c8499c2500677f9b70921e0341867321c039c0269ca4b34264388f0738f3e95ba2e9ae0f2a7232d6631a8039d026982ec67acc013007d904d3c568f7520073b04d305d8c769f04600eb109a68bd1ee3b0098436d82e962b4fb440073984d305decb16f076016d804d3c568f7ed01cc429b60ba18edbe0d8039dc26982e46bb6f0b601651c2eca581a91f989b247f123fc94698edcba8e0ae017047d80c97b0822283bb1ac01d69335cc262810c6e03803bca66b884151819dc6a0077b44d8378a41b03900de26d0e708eb109276997940ce7688073ac4d3849f74324c35906708eb30927e9b203329cab00cead735131c1bde3a7303e93bd92f1dde2ab85f255828dbf3be27e8c4796b8bc37e2021683bb0d25dcf612ee28efffcbe5cbcb0566d737a67a0920dc9612a13adb2075c3a984054f302af68472c06b691b50f74789201f040a81ed2821f79090abbd8738e04a79784419534746c497b1304299102cd9a1116300d8ed29c1e605c0568b18bd7a212616a5976cb8c5c591ab7e00ef0e9478530594e5ac0f4516bf3c03c490ee4889b2b740c96bfe5902183fe67195fc79cc5be7b36502383f957891f7b77fbfd4fbe42d05c20375c9da022d4145569c8b766b7ac18f7c635f1727fa6e03fe3ade269ca47d7e329c6f039c2594385504fe70d156cd71043ed97e0dfb017c13725111a53785e2629dfe234039911265c7142895a5a403ce3da99af44782a651692e5a9e89cb1866b3096caaa8c1ebbc07fd6b3345cb74ad68ea177b1a54894e2b195eb293dc0703bc9328f186db979630528f6e9508280026e7a200c06af6580140588e9215009f008c5328316ee67d9929c742d5b6e8538467f26cef5e439db75014b89d72e17f858d3e5821c73f578a0165b78f1eff06609c4a89910be0c026881757b25a30805cde887396b8cb9725120e2493ed30bf1b80396d7db62f7336134f36d03115d4dcd37381b230c9709cdb63f31150c5ccc8c5f4c6c80d6e7ae33c90b1cb7231f2cebd71a268ee340825a6793f5924cacb32b65a4c68d47af7785bb3c6e9a9b72a0076662e06348ad6c7912664f88e06597b674a7ccd043edef0a91552dd43d50178daacf53909113ff6e3e252981500e56c4a946a139591b9cfb20f53c1bb18c09b938b128fef40b34a541d0db9ab89c9861dba80126f6e2e2614d2dd996b9c933bc70d0038e7d98473ac933837053877b109e72827713e02caca5d6dc2e9e6369197019cbbd984738c9338ff0b70ee6e134ed20348c870be0b70ee61134ed23380c970ce0738f7b409e70827719e0470ee65134ed2f5976438d7029c7be7a21734627df482e89603007cf373e18de92fa5221cd020c3d9154c362cb00927e956296438770438cb6dc239c2499cbb019c0b6dc2497a9c0319cea300ce4594385b0801955e61edcf76938e9b93ad8d6806aa9a0a4a5c0358e2b8797c1095bfa267b9f89b4f8e3508911305606ed61c412d075195cba860cf02b02b73d12c1a2eda901bca0edbbf017c8b7331c783959439eb3e9265fb534029b984126577163c2910069f9631be5d79b5386ed18f102a154b4dea854032ac6411e85d81872ea5c4aa6231f86cf724c683037808c112118d51eb74c8c09d0061d5facce4f113b92e6e5dda0e64f27da83339cfbc89c12b703b727ebd36a10820c34a16757e1f98055a4689750bc6637a79e3a782a9a579586425e171b56495500b90d5ab29418609df271d80239b479f087c74b9ad68499b4e64689f055ebb8212addaa82fbd48a3114eee61fc3f0073a54d305d0cdcfa0bc0acb109a68b6b71ff0030f7b509a68b7b18ff0960d6da04d3c53d8c7f0030eb6c82e9e21ec63f0398f536c17471d5f83f01cc069b60bab887f1f700e62a9b60ba3814d21af48756db04d3c5535c360330d750c2343f3e7938a5779285cbec0980aeb50d28a1879201dd0b00ddcf36a084bd2132a0f300d0fd6d034ad8232203ba0b007a806d40094792c880ee0a801e681b50c2d12432a0bb01a007d90694b0774406746700f460db80ba18653c0b003dc436a084234b6440e700a087da06947074890ce85c00f4304aa0792cecfe6f84753ed94cfc5010e07038bdbfc228261ea0a8f6d99ae7fdb04a5ce74138ab598d804d38234f167cc3dd48013dc29e6192b14ece6d9e0432ff9136c174716ef31400f3289b60ba38b7791c8079b44d305d9cdb3c01c03cc626982ece6d1e0e601e6b134c17e7368f01308fb309a68b739b070398c7db04d3c5b9cd4301cc136c82e9e2dce66900e68936c174716ef30c00f3244a985bb074d6188d169ba31196974da9401e0bfae6275382eca901997e0c3261f39d2c02790a407b0a75862f15b7f9e046b1d861c1df3a77b618e450a704167b842a0454f7863c06b218cc532961f6d6f8a9bf488b7be20ab69358f05a93741cd4c5698f4d00e0d328019bedcce962bf7d6780f2744a94b1ed7447077cd6e5f5c35f81bafd0c4a7ce69b4bba1864b32dc079a64d38495b9e6438fb019c67d984739493385f0365e5d936e11ce924cebb01ce736cc239c6499c2d40663fd7269ca39dc4f939f0cef36cc2e966f86c1dc079be4d3849e3e5c9705e08705e6013ce2227719e00705e4889937f5167aab9374ad40660ba8812531bf1ead8d850a9f87796f72f1f13e25bfb90c123dbc8a700c0bbd8a62c3bcec9c0c281a0b973894d384967c9c9706e0e705e6a13ce514ee27c1464f6cb6cc239d2499c97039c97db84738c93387f0238afb009e7682771be0f705e69134e37970c94039c57d98493746f0f329c27039c57db84b3c8499c07009cd750e2ec2e7156b3450224e7c07b3efe01b3507470976dc2295db239f33f41fbf35a4aacf0bc547eb23457d53f9c5bed805829d5af1473e8e502bebb9b9f6e01c05e4709b67fc05f17b2c4d098f48368087d986c78e4701044733d256a3f6aae8ec5d60ec5d60b4d60554270b9bce70f9db8375cd21794b33750c254fb1e8f651bda19d4df018437e6a2e64f2f4c86b74a5d8c7dff1694a437d984b3d0499cb7009c37db8493745d3019ce3701ce5b2871aae05855cfd7899a9b5742a5b2a4acd4c61d93871b926d2a5d04eaf55b29d19aed1fefe2cab6e600e56d9428bbb258335f7dcef01ee72c167b82a778fff2a6927f38bdcb0dfc25a096bf3d17193fb32dcf09975b9335e8df0565ea3a5bd192eead4486f653e0b57750a25571c763d886749ce396c033efa4c467bead4a9193fb25d602a077d906d4c5909a3a00f46edb80bab85fe25200f41edb80bab85f6215007aaf6d405ddc2fb10600bdcf36a02eee97b82f007abf6d405d5c38381f007dc036a02eee97b800007dd036a02e4e2f9703a00fd906d4c5fd121703a00f53026dc3d401b91bcef2d61a1683f70825bc3c1676b34942df24db6c321f8c863eba3e0796cbbc9fece3fdc58fc9255dc7be8e0ae50900e563b9984d2a145320e542906e58ceeda9e32828351fa7c4c967df37cc8d4f7b81b2f3895c0c1e27969de90c1f13969b6483c7e341667f92126d5f163fd759cde089d873991f3ab65678b0df90aa6493e48fe3cb54c2de521915e62e00f353b918a31f2e827072dc78222b008e0465e8d3b9a8ddd30b7070710bb5fd4159fa4c2edaa12ac32f154b0e67327862f686177cfb5fe0a9cfe6a2f184b543833049173090e16c0acacde76cc2493a2442867304c0f9bc4d3849d78390e19c0e70be60134ed2a589643897019c2fda849374e12c19ce5301ce972871f61138a7f00ce13d54e15daad6ae05e18b6d9609f07c0c6a91f7b7ff8a52ef93ffa6c241c8ed4173eae55cf86cfa5b11b8384d3706349f5eb10927e9b91c64387b039cafda84739493385f0699fd359b708e7412e71d00e7eb36e11ce324ce4d40667fc3269ca39dc4f909f0ce376dc2e9e681a5d500e75b36e11ce124ce7300ceb76dc2e96678d87100e73bb9199f5f0fc10d9d2244f8be04f8dea5c4a72243f88b170b4f54b257c847dc1b918f0078efd14f6ed4b1d85af732ef938fcef3cd30aac49447a9e899d70b216428c956ba770628dfa7cec67057c519ac7203d8577128c0f701253e7ebc4e2c3c619e186c6b10b77c318b1c07390080fc9012648f842c3d8d5549717c06bd56aeccf4e7cefd2cee0fc8711ddc03db1d80fd472e9a3de94d04f38d035c3c04f74ed065fcc8269ca42b31c9707e00707e4c5d7ea63e9e4c7517c940926d13d0024c5dfcd316902eeeb7f003f0c87fd90292304e8e0ce448e0919fd802927056920ce43000f2535b4012aeb924035901407e660b48c2787732903b03909fdb029270108d0ce4be00e417b680246c4792815c09407e690b48c2605732908700905fd90292704f0f3290b500e4d7f46394e9eedb45d80022eb24fe019ae4df50a2ecc44cfadca39cec716f0d60fedb269884f53719cced01ccffd804d3c5d380c70298dfda04d3c5bd0ec70198dfd904d3c50a681480f95f9b60bab857ec6800f37b9b60128e5692c11c0160fe60134cc2317432982301cc1f6d8249d8ff2183b90380f9934d305d5c825a0a60fe4c09d37c639e314eeeb8f91100fa8b6d405ddc71f30b00f457db80bab8e3e61b00e86fb6017571c7cd7700d0df6d03eae28e9bef01a07fd806d4c590ea7f00a07fda06d4c51d375f0240ff671b501777dc7c0500fdcb36a02eeeb8f92a00fab76d405ddc71f335009435255e5731519c3dc4559c22bb9e55de8f79843be96200b2adcdf89a7f052f4209cf6c4b48423f24db12722e98fe8d52a254478ac64e6fd1ef0c3787d58abd39ead862216c396d7ce6c354602f013eba0925d83e2cb8fd9ebfdf66eca0312e902f61493ee2e4e2b0f200e0bd4d28217763c1d518707bdd0d6b25464fe0b94d29a1060f6ff6bd946f1cc92baa09da409bd16c24adaf36a5c27a30f0d566b9a8b4d25d91e15eb69f023cb439254addaeb1e9575b8468c9aaaddd8197b6a044ab964bf36371369ced4c5f06cdfa9694f8783c207e9eb55ab4ea5ee5d31b64ed56b9ac7caa183f203c76f41ddecc27ac7cc89af947836cbd29757773be98bfdc7032f515c0275bd3f791602b13ae44dff016538f046037a304abe6ded38b3d1eee64204301c8e29bdb04d3c54086ad01cc3636c1743194bb2f80d9d626982e86720f0130dbd904d3c550ee3c00b3bd4d305d0ce5ee0d6076b009a68ba1dcdd01cc8e36c1743194bb0780b9854d305d1c73df12c0dcd226982e8e647602303be50266a1f8d7ff9cc2127772575bf0d53bd84fef0a06df3a53f7d38bbd5bfca4abd56cba9c70e333412562cc9d0be37d757e3adb22013736b2e4e2296d7c0db402db8512acf9d137840d25329c1d40a6ef6a134ed223eac9708e0538bbd9847384933867019cdd6dc239d2499cfb019c3d7231a1c64f075c0526327272c62a19be4a50f5f4cccd7ce48684af1ee0ebb53e23e5e263365ddc27ee749091f3285176f4beccf4be3408f7e7a2f86cd052d1a65c219ae9e54cc519b9e7914d8147f6a6c4d88bc57a3c7e4c917f9255b10cd3e221b1c58c9f58098f56ae70ba07741480bb552e4a4b3e869ef3895eb2f9c8034007b24f2e9a3ee98668153a3920bc0ee0ec6b134e37c7d7df0738fbe522ea2d16aa9dfe49e94594753bd982827d00dafeb6a2256d3691a17d05544903a89b4dc95aa0ca52d200ae9e51228c4780d6673e25c63c0d46df4767b3096caa38e093b74bfd6b300abed8d3a08a91ee14db81ca4b0701bc03ed2d0008e392c80a8096a06c1d4489b6b7403b59f8e72c562922e8fc667e8510a596c06c6807d5b60225ec60bb8b06c25030b2a2a10a140d4372518161add8125120d4d25660f95415d837a018184a1fd80d836837e4f388f241e61f46897533163b9fad5e54482bc0ac261938b288f8a7813f16e46660b928f7432564a5e283005f61ae0217d4309e1a138d8d92ba3d6c370e64e2e1b958840d61a66e30b90b7635005b4409b6bd043bc2fbff72f9f272813847334864a34ecf018423ec59b6ea621cfc2280722425caad0c50cef6dec985d4b332ef2f35af5447dbca1c44d5cafc37a89646512256fbd4a8e5833562526e69529f7531da733ee8fd8ca604da8ac59fbb3ac9fbb78a728693ac493e1c64f331b998f64877afa4714e6e8ed61f64e9b136e11ceb24ce5600e7389b70926e6c4e86f34190d9b7b609e74827715e0a706e63134e373796fc0ae0dcd6269ca39dc4f93ac0b99d4d3849571291e1dc1be0dcde269c239cc47922c0b9834d388b9cc4b906e0dc311738e1a09c3fd7b3427c8fedde9983a138b269e0cea0dd599c8ba1b8f8956e759e98cadc20241bcd3c1d78e4787b82b95d3c3dfd5030ac51423d1b195b2a0807384ac4d405df8277b977bd41cc41ae14576b45867771a1e060e0a113d6a787c60fbcb9b8cfc766c04327e6aabcf4078cb9a035b2acccc1d4458f0811c2ff006f2cb529feb8d0c90da6ee0535f8249b70bab95fd7c700e7e45cc415f10c5ed9d89654b75d9f9ffc1164f229b98ddcd4ef043b49fe20679b469651a1dd06a0ddc9d6a058d2ce25596f6838c8fc536d454bdab42743fb38f0da69b96838156d70311f9301c2e9b95946b81e165d93c5c68d07f866e406dfc8406f2807f8c8327033503696e522b430bd7666919331476f025f9c69134c17fbe46f01983bdb04d3c5bd379f023067d904d3c5b5c14f0398b36d82e9e2de9b4f0098736c82e9e2de9b4f0298736d82e96234e6fd00e63c9b60bab8f7e60300e62e36c1747134f36d0073579b60ba78fac03b00e66ef4a343752cb656b2543cccff867395b3598ddc748af7d163b395eecd500e026877cfc5020193102ec28c4f162653067aeb7bd8069430f393019d0980ee691b50c28e2619d00900e85eb60125ec6c9201dd0900dddb36a08483746440a701a0f36d034a38504706743a00bac036a02e06c36e078096db0694b0f3490674470074a16d400907edc8808e074017d9069470e08e0c6809005a61f7b652840500d924711310df594989b725832705bbbbacba1f8b015b9c8b59f5d1eb2328816c4ca903c8ce4b727d667afa314784fd21b2808599202b2fcd4524e7f0c6f14f3e0ca7f6ec70fdac826f4106afa2df603f568df0d3d3b9128b1a51fae761f137ba574ef60018f7b16919e03827c737b701e5e6329b708e7512e7560067b54d38473989f35590d997db8473a49338ef023857d884738c93389b80ccbed2269ca39dc4f919f0ce1a9b70922ec022c3b912e0dcd7269c239cc4792ec0596b134ed2801a329cc7039c75b95affabb69ff07b44fc1d2eef97d009543ff59408dbb0d84aa00d6515c6bec0ff1a72b15969a1f03b7ec85d8dd73baf94831bfe16a59542a03aa53a76fc5d9dd3fe3911205e65d349aba40bffc87046c130dc6a9b7092c61a93e1ec0370aeb10927e9ee5c643827039c6b6dc249ba5124ddb9c000e77e36e124ddc6940ce78900e7fe3635dec739192157005a9e07d88473ac93387b009c07da84739493389f67319c07d98473a493386f04380fb609e7182771fe0e701e6213ced14ee2fc18e03cd4269ca4873093e1dc07e03ccc269c239cc47916c079b84d3849b70120c37938c07904f5886799f7c022111d572787e34a59b908a2e13f732f70a61380772425bc812c7876101ff5acf0787078caced8067df065f055c5de5fb5228a89747fb997a80e6b3a19743a8fa204be054bbe6638be5a220349b69bf104e0b947db02d2c56da1c70290c7d8029270f10019c87500e4b1b680245cd64206b20c803cce169084ab80c9403e0c401e4f7ffe347680c37a3a7c9e6c9ab823c07a0225d6c240a3a9015d44806fcd5bc2f866fb35e2777e82e4a809753f5513ea40d0843a3117dbaea43b0d421872433609c200cc936c8249b88d0519cc088079b24d305d9c9efb0e4c809c62134cc2de1219ccef01cc536d8249d83e2583f91380799a4d30097b4d64307f06304fb7092661839f0ce62f00e61936c1241c582683f91b8079a64d3009b7fb2183f93b8079964d3009b7fa2183f91780793625cc1e2c314e7eb2d89aa254eca9c0315678f6ae148279e0b7dba70d1ecb6260cfa11f3099e63db0488478c3a5d9eb6dc0846cdf8fe600ebb9369da2e5e68ec8ff02d9ff3c9b7092eef34586f33a80f37c9b70922e4920c3f90cc079813de761ba785c4433309e74a15dfb7b8d75724bbf2f816f5e641b5017b7f4fb0f007ab1ad67ba91c63591cd32bd05d05e622b5ad2804632b4efb118da4bedd9b87f8c93a76dad047e7a994d305d3c6dab01c0bcdc26982e369f96039857d804d3c5d3b656009857da04d3c5d3b696019857d904d3c5d3b6aa01ccab6d82e962efbd12c0bcc626982e9eb6b504c0bcd626982e9eb6b50ac0bcce26982e9eb675208079bd5d03216e6e4a792b007a836d405d3c12ea7600f446db80ba7824d4b500e84db6017571e1e1f500e8cdb60175f148a81b01d05b6c03eae291503703a0b7da06d4c5f9a34b01d0db6c03eae2fcd1e500e8edb60175f148a82b01d075b60175f148a8ab01d03bec3e128ad05fc942c3fa8310873b29f17660b150c6552254916faeba508430e6e81499755410cf603188775142ecc3826767177b0f567b3f581d77767689d820836f8ab11c9c9c5d22268d5709a5dd8b0d1d0220df4d09b977e8828034708cac28580e8a827b6c07ece2f17b0700c0f7e622d011868d63b1cee4c1e264388b4181705f2e0ee72b1287a0e578b375b2f2f401d0b0badfdec3f9084b52b2f8a65620a33f908b10dcf4a64a5c9c5c9e0132f983b9586a9349141ee1f83e998f3e04c03e642b58c2992832b0f700b00fdb0a96b02820035b0bc03e622b58c2310032b07300d8476d054bd8e0a73ba417807dcc56b02e36b0b607601fb7152ce18c1519d89b01d8276c054b38b74a06f61a00f6495bc1bab896e41800f6295bc112c6ab90813d1a807d9a122cb780832b63ab19df238fefa6c711d7784c2ad9be1e974a217c86f7b91a3ce5de88d59360c8e5995c8c588d92932dd502628ea659c83cf216e091cfd2ef0ee18f9fce4fcb375dde74e371e095cfd9335ae5628cf47ec0439fb7e98430d2d392c93cb31718477dc1269ca4c7fb92e12c06385fb40927e9e1d36438f706385fb209e74827711e0370bebc3e77280b4e9ab858119d0160be62134c1757d8d70098afda04d3c515f6fb0398afd904d3c515f68b00ccd76d82e9e20afbc500e61b36c1747185fd1e00e69b36c1743108624f00f32d9b60bab8c27e1e80f9b64d305d5c61bf8b80d9bc6940786982f012d143e17d9445427f7f0468189bc42ae5c05a957767189b26c6d6ebd9020fc71edeffcc52602fef7fbaeb117178e044b686d588ab5c5e8590bddcbbcb35ab63853cc0f81dee109da543e48b112b1e3fcd23a9f9801f7ffb5aef775ce70a56c65634eec3db2090e447f8d93433bd6b3cfeba52bc81476a2f65b5c2e22ab69f88d1f6edcf8fb4109c2a454c36b78b03cc97baaaf37ba6c8b1b22acfe672e61f74982f70cf94fdbefcc866e09b0aaa9f22e624ea84563d841d2a527cba88afad17ef2c119ad40bfdaa4190e8bcc651e33a293ff1e8455fce32a971f2a319f3c5614f30f434d5f39cbdf206e52313bcefb5713e542e52d8e7d631f086e44fb717945734f29ae73d5125a2eaa7094a35c23a6e3d3f1f2a767782d4a99cf931f87c5aa25c68dc36e973a5f2a996714f4d12feb342f2895d9f27d2a341e4f37a993b6679cff248fe06a115cfc0a582157f1e46ffcf16ba739bb9bdb1f8ff7c51a264ba62c0b70ffe46591eaf579bc053a59a675a059e8951d832702735079e5b277b7779fe58caf859962b01c71241887b4135c879bcc88a8874553974ba90cfe5fa6f9ed3e8170543bdc722a345eaf0f9be618d337dc3e4e14ecbe537753db54c5e462597f62e2f8822fa9aa93a6ba56b2a8bfc0a81ff7eb1c89b9542ea949496a6b60f2fa95b27499582613c2d3664fbdfe3e9de46a67bb4a080db3b3c0bbe975aa3f7f99ba3446d217feaa78ec5162e199de46b5f8acf1435668d7892ab19c6e35b897a0bcaab12ef2d28b4d3dbb367fb07b0948b160ccfd4dbcd35fa90d2db7d697e984840f6a434acd3a743d0e6d85335b2dda77cc1cffb4b193fdf3935891e2273e2d2787b6189b0b54a485dced47fbc16e53d295e48fd839267f784d223fd86e4c69284f76d7849f2515c662be4f9ece38db920abb9e09f943c7b24e40293eed1c67ca0f2c1bf12f3c1271bf34156f3c1a7943cbb25ad0d36e68174f2c0678979e0f38d7920ab79e00b4a9e5d12f2403a43591bfd5ff9ff9789feffd546ffcfaaff7f4dc9b37382ffa71ea0dde8fdcafbbf49f4fe7f6ff4feac7aff7f28797632f0fed28dbe1fe7fbdf26fafe771b7d3fabbeff5f4a9e6d93f8be9a46dae8edcadbbf4ff4f61f367a7b56bdfdc7dc8e7ca63f45bc3117a85cf053622ef879632ec86a2ef8859267cf845c6016f8b03127a89cf06b624ef86d634ec86a4ef89d9227d906a0ff8ff3c41f8979e2cf8d7922ab79e27fb9ed0da70a52dbe8fbcaf7ff4af4fdbf37fa7e567d9f35cb695c55f2d0cb8d9eaf3c3fd22cc1f3a39429f5ffd0f337a1e4d92ea9e76f1c090afa7b93447f6fbad1dfb3eaefcd28792646ff9884c96fcc072a1f344fcc072d36e6832ce503febf4e914dbdef73bddffab1e795accc7bbe42c82baf8cb2a6ff07a35906af90930500 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/820cfdf2dcc996b47bef352adc003779.asset.meta b/Assets/SerializedUdonPrograms/820cfdf2dcc996b47bef352adc003779.asset.meta new file mode 100644 index 0000000..5b930f2 --- /dev/null +++ b/Assets/SerializedUdonPrograms/820cfdf2dcc996b47bef352adc003779.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4f099387a32573848a5fc90b28791188 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/83db23b73f5e139479d286b7db62594f.asset b/Assets/SerializedUdonPrograms/83db23b73f5e139479d286b7db62594f.asset index 7fc2631..0e9c273 100644 --- a/Assets/SerializedUdonPrograms/83db23b73f5e139479d286b7db62594f.asset +++ b/Assets/SerializedUdonPrograms/83db23b73f5e139479d286b7db62594f.asset @@ -12,9 +12,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} m_Name: 83db23b73f5e139479d286b7db62594f m_EditorClassIdentifier: - serializedProgramCompressedBytes: 1f8b080000000000000aed5cf95adb46105f01b671388cb9cc550281262424b60349daa66738929072d518fe49f3254e10895b30149ca37d827e7d8abe41ffee5bf50dda99d10aafa55d1d983598c6fed04a7bcccefce6d891b4a629c3e063dc84c316cbb17996669b6c9bedb3129ccd43b9075febcaae5f678750be866301da6eb2319f91f8b9660cc07109ae8e581946be65afa02c52fb0633e17c09c69a7085b53bf067422fa305066db205b6c65659cae8f321b145838e789d817219ad709c63bf42ab494ce124196a4ac161035a8ea86d0f98b6fb3d65cf48ac3d687b05630ed92ed07c49145b5b9a189d30ab68e565332fa3fc6f885fc778d9c9eb87f9758ba3deee0fd4599cd36d72cc11e16582f73184b24b384f08755826f91c23c235cc6ffce3e0bd9bf7fb845f5f12eab1ece1eda3c235966dbcec75b4db32f639e8f60af558f63bc6d9d7971d74520e3a295e0ef0fa31074eed8ef67147bb5d0e0ad875f0be57843e783d21d34fc4200b7d0c365360072c430abbce82bb923dd2df899074140ff8b946d396c15c0f8080c49237c94fca6c96cd482d79d06817f89ea763017a1489e8a47b8abf5d532073bbf03505373c82fa47e4c5e888456849b3652871d40b761b1ceba983ca164cbb0bae6cb23c1c0f88de0b60dbddd34f247459e7981cd0b422ca1ed4d8801ec0f52e71b841c777c4a949dc2f415d99e25b0922dc1c941f6836b7ec87702e9b33cf2193f3280f2caa7a2b7cd96a5a006990fb0cf9eb478d9c854610fae82477c3960c45a63f5c9af888a1156430782e711ab70932a3aa6e86652806e75c088697d12da1dcbe2dbcefb13b9eb2c89141750f9304150d2ffdfed7c19fd3dd13916ad1665906970d63c447342f6091de94d1efa2e02d4224d29245469df01b32f8293dd9a823fc56bf22f50baf8028ad4cd50a30309d59850eebf05724b68fd8038a7def89cd1cd4bf672efd6491588c20762fa07e6caa406e9281dc5a6f90fda38a17c8adc7725540c68f1cc1b802413f1e540836cb10a4ecec995604f36c85dfd9a4f9f973284de85126fe37618c951ea58feb5788ea1b3ece1b554ca66f39509523da468862b25a3b4f2a945b242867e33c6776b11977b0891c2a084764eaa31b891fb5aacf9d3ddb677330f60dc8f28e52a2b7305e966d7b2baf23b0f23a497963d27b80701ca9541795a90ee3582288ea626ad5c564aa6b3b9bf5f964910b6f7853812357d273790d1bb75a656ac1ca6e4938fd173e2ed5c4d5aa89cb54d35eef65650dc4ff8959b717e195d313d8877a154b8adffc2ad55c52794c9f2c9dc0d9c5f4618cb0790fe501c971045f137cf43ed48471af361517fd322e50b963302b86f73770664b6a869cb55d356b4a362bda2ade2a9661669ced6758560a50bea6ba8d631ec270d0a1e26040c6412769bd4cb396c9762c6bde261d9442cddca99a79b0c6489990b923c9b9a3d51d2bebfd22b51649596ec750f5b35d71851e84be250ebc9d7628b0d30e93d3de604c0b972ad7ee92a91835311244c5c36a1527652a2683cad731e262db3e512940dff031179f944e3b1744b9fe46497f032ee1fc5950e9a65be57e976b74bf1e15e1b11a09f7aa088fd748b84f45f84a8d84fb5584276a249c52119eac91f0808c30ae8d9f3245f2e6249e54131f9411c7e5ff6a10ae3bd5848754705c932d62334cbc7773deb9a5e1fc3925116528cbbc16eb44cf139f4038dbb6e849c77628dc8755124cc9249874c4814a4e6c719f070ebc3814dbc27039a2e2f2ba8ccb4de56a23ae3516c7fb10909f931c26fb058617287ae1386cf5a712ac4f350ad5b1330c0e9fa870b821c3e16a007b7b1dc2dec2703aaae2745ac6e9bcc3aec459453d3d00ebde26b4adf718dede11d46f4e2ae365958c376532669556b9007f2fa1932deb32db9770e9655127f1fc3115f7b764dca77d3c7f9d52738c5e612256854a18cec7559ca7659c9bcc7ee8623f42115fa05a1c6022b643af3a31115b3aeeb908e999b5fb2047c89b20c73bea9de6b2a0f754ef7cd822248a707c493e1edc464f5bc357543865545153274e25e83b0f53a14448b73246f71a37a1c2212bc36159230e39beca98248f750350e46bce6f50aae29ab7d431f81a06264b8b34f7218c14df7a64e8c6347b2c97ff06049c7b0fac1157a9fcb125fb6f47c0b779aaed08ee7be093be99f69342a6a3b4a025513a7f99d46fe1635c229b16204d379e174dd21951ab4d19ba079e3ea135f973318bb335cb6d28fc1b398bc02a4566fe1c099d2bcb933e2b95b01dd0f49fcfef61e32d2260bfbe3d851d39686456da633f65c44f2cd294453ddcd109161af31a7476bf355d3f66a61100db26c0621107f187a7e6a6277b97ed0e28090ae11f80bd7d7ace89cf931d01869e9e9c37ceef8a0162cad7c9a6025956655593af465944ebdeff7cc1c922929f210843767ca6b8f0b9ceb8d0cff56be51725e8e495bfdd76ce5fcbde977855b4880511ee2411a35b08b15fe884129f499758f5269515baa9406bd2065ca72ee0220270f7eb6183afb813973d6d30db8036784980f24b9d500e4bdc39c8432d8d8e3dac0bd42e01d4afce23a81a2d551ba80901d4afcfcfc273af019d3e2540f98dee8507a1c4897708489b363e67d0065c4417704c00eedbb35c7844e6b5ba735c1794ad0294df9d1f779e6d4077ee15a07c709656590de54c0342d92e4039779650d66dbdeed505655c8072fefc38782326e99d02940b3aa11c9740894c9469a370893de1bf02bb688b519300f0e2f9b1d5bb0d68abfd02940f75429960aadcb2c4bb341e788600de239de0f5f9d8619d1c3aa90bc80101c8c7e7c7a11b3125ea11a05caa0794c1b2cb467ce0db2640f9442794495679375210de7e60dd01ed1cc18e8d07605400f07b9d0062a651f9d5439e59dbd6b401d6a60bb01601b0659d80e17364d1d21a17b26601b2159d90a57c968eea0d9c5ad7e1515d60260530577582d92544bc8ae3d629de694b6362027c6bf5587b83a531771a70e9e813a05cd709e5a804caea9d7eea9fe26a75726daf630705687fa8879506cb101bf1516e07bb309b88b2b8bd21279ac394324b9852245c533e5b17acdd3b498e4e09c65b6d05e0a6406565274f867eb9855b79c2ec28f4a6e9bfcd067f221d35e4feb07b6a5a3d8dad4332496bd946d4eea1950cfdd8ed22cb8f3fd48c72b59399a66893d92668de228eafe40fe93f021e529fc87f98a948d70d510000 + serializedProgramCompressedBytes: 1f8b080000000000000aed5ce9521b47109e1548422004e21287e340ecd872c09200c7b90fae24a4cc515c7f1c179661c14a40102130c913a4f2147983fcced325ddbdb368b43bb30730c222964a3bbb73f4747f7dccb5a5489ec1c79880cb165b63732cc736d92e3b6265b89b83f410bed6939dbfca2a90eec3b50865136cd4a7257e1e1a83705d84a713568596a76c07d21295af3313ee17a1ad094f98bb073f136a19add06893cdb315b6cc3246bf0f892d6a74c2f30c94cb6883eb2cfb0d4a4d620a3bc95351062eeb5072426587c0b45def397b41621d42d90eb4a9b003a0f98a28b6edc2d52099ac679eb6f034c67fbdfc39ced324cfefe3cfad8e7cbb7e047e094e37e2e823cad34e5ec710d29470df29e461dac5fbe8179ea17f63d5c14b37af37203c639ae6f919071fed8ef24147b99df608bc75f0ba43421d7c1e96c91f35c8027e009d14d931cb13208f4298aaddd2df4891742c62e915ac15bbad82391c030189a56c921d56d9349b925aca909114f89ea36b116a9488e888bb8b7f5c5d207307f03505333f81fcefc94bd0d04b509263cf20c5562fd92418ee7307952de8f6005cc5641b703d267a2f816d774d3f91d0259c6dd680a6e5b1879063037a0ccf07c4e13a5dcf885393b85f84bc2ac58f3244905948cfa937b7ec15b897f5b9c12193f328775c55be151e6c35cd8334c87d9e7cf99d466e4223087d6c84bb616b9e22d39f2e4dbcc3d00a32511a102d1a93d690549737c5f21483d75c088697d12da1dcbe2dbc9fb2279eb2c89141758f9004350d2ffef1f7f15fe33df7a2f5a24db33c0e1bc61d1fd1bc80457a5963c045c15b8468b4b5808c3ae13764f0d3f0bfde40f8ad7a25aa175e01311a99ea1560e0f0be0c1556e15722b64fd80cc5be37c4e61ae4bf612efd1490589c20760fa07e6caa408ec8406e6b34c8fe51c50be4b60bb96a20e3478e604281a01f0f2a045b6408d2ecec85560437d8125f39e4f8fd36a426d4a812ff9bd0c69a1ee52ef29788ea6bdece1b559c8c3e76a02a47b483101d83ebd57952a1dc2a41b9802827656c261c6c22870ac25199fa6822fe9356f5b967cff6dd2cb47d0db29cd194e814dacb66dbdecaeb0cacbc14296f54ba0608c7914a753199ea308e7505515d5cadbab84c751d37333e5f2e72e18230133872a53d87d7b071ab4da616ccec9184d37fe1e3524d42ad9a844c35c9460f2b2b20fecfcc5a5e84574e6f601fea530c297efdab54d3aef2987ed97402f585cba52a4c1a90f62f105a8b90ee53de3aef319c6b75a8381890719022c9abd46b95f0b334ba4b139972a89e93aa9e33578c169d3293a4cc3dad26591bf316a8b444ca721b87aa9e6d8e4bb4d9764a1c781bee6060c31d22c3fd88312d5caacc3b2553316a6238888a87d42aee92a9987adb6860d4c1b223a25284bae1e30eaed6c79d83825c7f77487f832ee1fc5950e9a65be57eef5dd1fdd232c21866eeaac64027f1b49a788f8c3846d1f783709d5213ee55c1312a8b83534c9c023b27c039b8df06356054de266ae774b75da73c7121e72cdba205e36e28dcfb54128cc924b8ef30a5dad4c2e27e0338f0e2502c0bc365bf8acb0f645c6e2a039618ae2c8e8fc0a7b7490e93fd0acd8be400d80e4bfda904ab538f42bdfb85c1614085c33d190e0f02d8db7e087b0bc36946c5e97d19a7391fbb5aa5b903fa46187fa85109c3f9a08af30f659c9bcc5e19d9eb1cf194c3e200478a3d3a8fc09162f1a2e6028c1fd611dc1a598a09729c51ed1c970575537ffcb7454894e0fa8a2cc81b0fb1c4cb222f13398654383d50f9a44e9cca50770eba4289906ead8dee083aacc2e1a10c87671a7158e331cc2479ac194a8947b4df21b50f51c2491d87af61e050bc407d57a0a5b83599a7695581c97608e4a784d8f7215823c6c08d0b4bf63f33cc32f599a17b927ed9e3233f29643aca095a12a5f397497d5416e712d9b400699a7ddd36491f895a8de46922387e496bf2e7021733b116b90d85df36b7082c5364e60b5d74ae029f5294481db6039afefdf9ed083c2602f619cb351c9ba391cd0050bbb4b438812f7ee2d14801f530ae132c34e615a8ec3eda58bd60a61900db25c0e25107f1efaecd4d2f77e0e40e285d14c2cf81bd23da883181754780a185d2dbc6f9841820b2be4e960d6459b5514d3e1a1568f7f97f3ee01410499c9bc77aedf84c7121af332e0c70fd5af38b3254f29abf4d3afbbfca0175a22e5ac48308779988d12d84d8824e2871d3acccea4f9297685181d6a40db8942ee0a20270938db0c11deec4554f1b2c34a10db60b504ee9847244e2ce41b64c343af6902e505302a8d36f23a81a2d551ba89d02a84f74474b04153bde23486ddab838d6065c5417704c00eee39b8c9622f35a6d30a10bca3601caa7370965c3dcb94f17940901ca4f1a0165b07964338ee14901ca4f7542392681b242f3487cd9a7cc7ee46f72df36b78f08007fa613e02ee5d053e6559acf3a0d01bccf7582d7efe3e80db2c2b42e20d302905fdce4e0d3fc2bef0e01ca2f75429966b54daaa2b00d8579c7748487159b0fc09800e0573a01c4986e57302fceacb501d6a10bb05601b0af7502860b7ad1d29a17b21601b26f744296f11938eadfd3d03a78dcd105669700e6b73ac1ec16225ecd711b14efb48dbd7101be199df0dd95d862fd7b02eab7edb55aa6b6cddc1e766bcecd0a28cbac681e59653cce2a86b6accf6ebd756095e6e894a1bd5556046e8a94d60eaff2f45e226e54843944f7a6e97fb23487001872ff38b836ad5ec769994cd2ab9c9c253db492a7372c6fb3fcf3ccfa4b01faa09966e85c7513346f11c75de80afd134485ea44ff03768b256a05430000 serializedProgramBytesString: - serializedSignature: fa9d25eb9e662405490bca4bca6747d9351f368bbb9dff437556aa9080ad88c47b9570adf11353db01ca6f08ac4b9e4135cdb0a4517024191e91b8fa60d56a0b + serializedSignature: 1a6c5798d187cc2f9d30b694f0c532655a9e7c00ad8ba5aa557c594c74a8783dab1d17ace6be12eec1179fe59674421e1ba83e29e873db8a7f8a7571998fc608 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/853a35cf0f51df6498d68490a1f662e3.asset b/Assets/SerializedUdonPrograms/853a35cf0f51df6498d68490a1f662e3.asset index cac8b46..0118da1 100644 --- a/Assets/SerializedUdonPrograms/853a35cf0f51df6498d68490a1f662e3.asset +++ b/Assets/SerializedUdonPrograms/853a35cf0f51df6498d68490a1f662e3.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed595b53d35010ded3362df50678c3bbbc89a33601479f1c67145199f1365078711c2810983a2d302d32f8e8abffc8ffe60c7ebb3981f4e4a4a1952822cd34694e72f6f2edb77b3669ce257cd47dece6698626a94273b4421bb48e5f933836b10567e1f8076ae1b8867d0dd7eed368ca4cfedc5157b09fc6599bb630f30b2de35897ebb3e4e3f734e6fa38e3d1557c7ddca50a9834472fe83dbda311752945c4bc4c6aeb31c57ea901ec9fd3575cf5c52856e2caa511ec6671a52dd79a303abcef237d12b79ab8b68c392d6a40e692481cd8e1b9e2931c0afba75436c6f291b1bc3ee6f02de2eb44ce95fe16f53794171d2ff19cdddddd9f8e12545ec3ce1a6d922b02eef610be70667ae0c4d69c36e68ea8dd02449b1060416f4e62b3450f69c28ade55752662f7a4ec6bb8a32e425999a1e2474c051bd7c0e64742dfc6f82b610e07bf8e2b157a8323cf5aa47104f3a321651e6a1ba08f4f55ec3745de22cc8edf99e612d3c49c330399018b9b180901ddc479432c9c95fdb658ea8bf5d318db929c5a47563dc77147b4c57d6fe1b74d67554366b7d14ee6a4f12065c230bd80376cbd2bfc3d89c8df8808435f1cd0695870a5ba7c8f45e204c3a0c838b2480432c68332da313641aed4de6f31047bf731ee61c8ef8316e357b286fa58e096e8b3cea250ef8664105b1466e30c8eab62058f2f6b6cbaeb0a91b2e35ed8c3679f3faeac41533d2c29d97bc116e65c5e04d58d94c075a30d7b36a62ad255aceb95674ac25717332b56575852d2fd21906fa5b7f82254711ca793730fc92be9357ceca801eb143c26819938ca96385c845435d3c4313bb20d5960d8bff5ae85c04e6f36f89e416fb207a72cc1b962690ad34c4882306781d0638b4e59ad2a1b56b1410992f336c97c7ada92ce1e939e5baf53d277c6f49492f51492f49c4dd273ae2f3d8e8d6cd239cffe41b205f7d5e5bedea936283d722724ea5162a5b165768516b0ad113fcb2c486fcc6e6ee39c9d6a20b7f97a547d2739edc41e1262c7fbf5347793685db4918283356c43e0a9a1b7d3e2c0e30d846f4170aa41fb573cebf9b0a9b6d75076f73a0513938643c9342c257976dee6d9933e621b3ca73e8b44b637dfe671ad8e3a6ef7aa844d29ae015392228ce50799c1676d72b9f028af87f5877537e1055b5485454b6259faaa72a1cb93e3eaa13d44a47911b4b93c7f55b2296c4c6dde1dbc918a3f3095b447a12c202d85f8b8797a91a31abe9cc8b9bca6a87b7db229dd0a7edb53ccdb39d47b350b04bcd399a9b8885589df62ad493852e59bfda029ff8108087bcf437859c2a47a06605664756963e30fa7b821fce5a1b1acbfe5309e0f83528176a4476d89bc15333fa481386a965f8ef27b2cc691fdf26a2f8b1e97d791ffbcf2798c0f77d145272c141e178aab5966f39048e3e621689e6c0bb0a1f3779e22cb1db95e3c8843fde47b41f23d80ef5a96f0b102ee34eafadd7a4d3f3d2e806dff1e6cf9086cd7b384edb486cd6cd9bcec402b67055a2e02da8dbfc3b50c61cb8c6b1481ed6696b095356cdb7bcf1fff26cfd4f1e9613cee616e75b60c075988823662587bccec7f2bf7d6a0a126c7fd96c2e5f729ea31f5d663779799bededf8e3a6544aa71a47a189ba7bfd3cf9ce91215972971acfd1fa5e0bf665dd64ace88ac7173887c209c89dc92bfd05b728ff30b1f38f2c93e200000 serializedProgramBytesString: - serializedSignature: 11a06f71c3fe7f6fff5279c05b5025fe1dc2507426e67b362f107888edcb4289f1b4cb52e226e000301acabbb93f9577830642f4d21ed5a5d05e93ed05bac904 + serializedSignature: f55ad88497f697e9b71de33f04921e2172a89e4e1ed53e7cf09c25aa5f3a6daa6c22e5a1859a57e0099d27eefad8af8df9423738c6b34845fbcd5fe589929b0e programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/86bac5e28acf55745bef8956d6209da4.asset b/Assets/SerializedUdonPrograms/86bac5e28acf55745bef8956d6209da4.asset new file mode 100644 index 0000000..39037ba --- /dev/null +++ b/Assets/SerializedUdonPrograms/86bac5e28acf55745bef8956d6209da4.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 86bac5e28acf55745bef8956d6209da4 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec5d077c14c5f79fbdd03bd21524f4282540a852a484262d40280a0a210522a19884a6a8a088a2a8d8b1a362c7deb037ecbdf7de7befedbf333b73fb7633efeee6e6e6d8e5ffc38f2cbbb7fb9df7bef3e6cd9b1ec926f61fab9bfdd70c32958c243dc8745244969225f6bf46dad7c5f67fce9d789e47caedeb02fbef02fbb76e2433ce97f44f17aba5fdf738fbae8254da5f2e2785f6b594fd3e8d14dbff1e677f5b6cdfd1a725f6ffc5f65b5635fba3e924974c2693480bab591c8819eca30afecca27a59b5ecbf4790d5f6afc54c289a4836fba985fdd734fb970af6db625b68f1de6c7230536bb1fd5ba1fd4d3929b331e733c45aadcf20ec1fc4b9f4e0d76c7eed6eff5f9bff3b83ffbb16ff377cbf3abff64cf0fd5ee0bbdae0df94a1ad31beefed5c2343ec6b0dfb7125b8a7df7ecddfcb71f0220b6360f5e5d77efcda9f632e4f40fe9afc3a208ebeb1300602ac4438abc5af83f8753f2eef8a24d31fe270645d00f0289743813c8340dab5c1eff4d9600ddd453eeeefcbc7fd9d7c8c6ce1f9f7317f5fa4398c5ff7e7d8f63b4df8b76438bff68923d708e73b9677c266ed343396f1fb91fc9acbafa3b86cc3b9ac2bc1bdae2c224f4773cc613c8d5592e7e27dfafb6a7e3f865fc7faf26b1c7fef707e7f4082f224627f42a6113c8d23c0bdcd63b57931b044be8ff4e5fb48feed6687c76a3b7cfa00fb93e28ee7786b12d0a31bbf760598139c74279d99c0f793f87522bf4e76f37fd2cfdedf22b95cae23c1bdad67f5f53efdf68da39f48bb2bd041bc3f855ff3f875aa2bcfe4b50960e63befd67a80df4f7764acd1da795e43940361d3d3e2c82af278942f8f4771dc4a8e2bfcce0ce7deca22ae4f1538f4fba37cb8a37db8a339aef0fd072428e74c7e3d885f0fe6d7392e7f79d5f8b303f975364f730cf1fa02510e67b9df369fa7c85bac3c3a8478ebb33e3cddb109dacd5c7ead9de0fbe29d791a3217f06b9d04d3acc3aff335d2acebd842addf7db6303d0e66a1c36fad3540061ba7b628a745fc5accaf259c7fe1775682fb7876104f96055c16e16fe739b2d469c9ef850d947a652187fa643a3a753245447db216dcd3eb01fcf93a704f659de5a453e7698eb9885fcb7c322f3627330bd5edefea3705b691c877b1ec6ba9a35fdd010e76dd39fcb9881d846c05aedcb526806f851c89948772cec5441fc713b90c82db0adf7bc7807b7a9de0a6c7fe6d7f5b4fd8566ff09c7e7b2cb8a7bf1f96a0accb49559ba5389341da9379dadcffd7dbc2df5d41aa963dd9b7f43a093c9bc4f1448cb89254adc7c47b54b7f5e09efe5e99a06eab24f2d9e9d61f1be35b119f09ff33d7b5879aaff3673c368be4116fd912f5f840f71b4b949b239cfb8642167e8d4c01bc4c71e46bd093bfc3630fb28ec8ebd9a3010fbc3c92b56edaad85bc47c5484bc8778c4fefa52e4edd4c2ebbf063dcd6a265c6ff2e7d26fcef09fc7a12bf9ee8be3b75137f763cbf6ee4b24d251edf4c3680e7f43a8dff7e1cb8a7ef1de7623713362ad210b2caf2f3649fee321f10cbce4e71de9d22de3dd5e1b6e136cedbd33e19d690d8f6bb37d72b9f78ed3f9fe3feede0361276bc995fcfe0ef013f19e165899ceeea344cd4b1a701dcdae0df89c8188b8fb39d74a2ed8e73f855e4c91c80dd9da73bc3952f1abb9d057ea3f73c862367124f9d13539673f9b57e1c7d7a80f7e8f53c0dfd63fd56835f2fe4bacd24deb6d84c278f1b7f1d03eb2287a796a23d74b1f3cd1e7ff3fbadceef8d857d5c0274a26980bab991281f97f2df0e047af33655e420f08cc7fe91d9c06666f1df2ef3e5cf06dfefdb0086ecf7cb810cb2dfafe0cf8f77646f229e5fe9d3e54c9fac07118fbf205755d53572902f6de1b712c9cbabf9b7737c7939c7c997263b62605d23cfcba68ff3fb6b7d79b9dd9797074bf2f23afedb2120dff6e7cfe692aaf93b0ff020da52d72379297ebf01e0ca7ebf11c820fbfd266f5e36ebc89fdf8ce425941fe6e52d55758dccf5a5bd3181bcbc8d5f6fe55759fc7a3b71fd38c53d3101dc3bf8f5b818b8bd7db82725807b27bfee88817b17226f32e9095b177d4805c46bebf4deb6dbe6db6260dd4da4b6de42707e0ff1dafabdc46beba27d09ede33efe5ba19bff84fb854811a96aebc5c04e78bc4aee07ef405b15bf3f007065bf3f086490fdfe10f1d87acb46fcf9c3446eeb507e68eb3babea1a29f2a52db062e5e5233e9e05bf25c4db5e2971f2a7a5c014f1d1c52476ddf8a8837f8468633dc6f11670fc93c1bdc5fb4660ba0b79ba1f3b38ad443ba11e7fcee39f56f7f0e78ff3f4447cf184f35eab8ebef79e74eed78876f8d33efe9ff1d9caa1aebd4575790afc06755b44bc31c9b3fc7919c8ab45e019ccabe109f2fa1cbf3eefe3af94e39d02eee97b2fbaf2af11f5c60bfc7aaefb5b6311d78bfcad07e478496e2b4c569067ca3192d0f9e5383aabf8a4c5c4eb93163b76b0d7801858aff377e6c478e74d7e7d8b5fdfe0f84b88b71db284fffe36bf5feafb5df423ec70b96ff63d904360d36f4e4d40ff77f8f55d8ebf8c7fbb19dcdbbab59ee7a4d57a21bfcee3dfbde7c379df95ebe8d6be6ffa24208f89df44bfd261c4eb230e73746b23dac4c2768f8a634f1ff0eb87fcba96e395136f7f20efc389d98f152fad187a452a89b7ef408c3f7dc4ef2bf8efa28db6c2f7be183be4be31b2dcf7fe2adffb625cea137ebfd2fb3ef914e0d0fbcf5cdd22bc9f8a7c0e9e89b6f9172e3f6db98f89acf6a64dbe24def6a068f31dcedf3b1d7c073910bf8b76ed113e9dd6f0fb33c13dbd1ee9c33dc2c7d5913edca37cf27ec5afdff2eb37ae8e4757826f009f6cfc1a60c6b4e9cf38c6d1fc9bb3c0bd6dd36d3f8f8121be151cace31867837b1b2333d391373346b98d1ce3e36f2d784eafc7f2dfcf01f7143b56db88cb1e59efd36d3dff766702df0a7fb9c1a7db068ec1ebff768d62607dc7afc2bf8a3c14364bf14e90e4abd08db7bf23c77319b6807b5b8676bc0d497e2072db3ecef7fdb9deefdb8b98f7477efdc927db46e2ed03fb855f7fc56d92fce6931df4b545e5fbd9279f681308b94fe2e99e07e410cfe97513f1d6692286e17d4a91937dbf8bbe35d9587bac32d28c5fff2049fb58f227c04aa4efa739bffea591e6df002b91345bf0eb3f1a69fe0bb0124953c47bff259f26fd67142b8134ad08bf663836d0fe7990bff4b9c5afbcef2f4263596a47e7837b91a7dc8e3af0f1218bcf61b26ac4c68e9cca312f00f708664c5d7859b2f8b8a755dbfdbecf60fe8c8f5959bc3fd1aae7bed397f775580df895fb31ab21c0e1fd2756632eeb662efb85e05ee4bd909ddb9eb507ff8d5e6d3e3b739922a7710cde7fd839cf2b23fbbd36f8b7c8678edf918f95594d9cfb6ebcefc16acad3113e8dc762569cf951162fe356f318faf3f261b5c4b916f158bcf4629609ce5516f76791d389a76eb45a718e73c1efc257d0fb33f8fb17837b1baf0b8febad3df9752f5c572947ad39de3920efe8fdd95e7bb0da70f97680df855fa1f75bf8fb5bc13dbd9ecb9f5f02d211cfe9f53ce22d33e72176615ff711e5626f44c6b649ca788e5c46a96d66caf32f9a5f7fbbdf74e075bdd58e5f797f4147d13ff51f7fdec1fda6bb28bbedf93b837cf97f29b8b7f3bf6b91ef7d517e455fd3b9e01ebedfc9fb5de42cfefe658e7d44785c657526b17d082da7e2b72e716c10becbdb55d6befcba8ffb6eb779fc199fd36475c36ddae271055a7e619ac2bfc6f207d90a787c1cd5ea1503afb7025e0ebff6739ee7f098c7e231b6c5e7a55afd799e9d4fbc7323785d266b535a03e2c8419f0d8ca30f9455cc09f595c1689993d41b31ebbc41c00e288e18c3d906eee9ef927a2e26aef0e19d89ebbbc5dcba2ee099a8539a92e47d3c2f2b115fdf5544f8ec8b8877bc95dedb65b27b99a34ff74d402e7a1dedfbee08704faf17bab2b27f53ac1d1c4bd4d543bc9891ad2e7f832bc133faee5080057d0dc7ee29b8e4be2372257fef72700fe5bec427f7250e4e0fde8e8e96ebf6713897e55727ef6f91ab785a57487ea7cfaf04efd1eb65fc39bcb765cb16fe918f0759c3f87538bf8ee0ef5f4dbc65ef6a9e9ea41d12f59d71f48cca7639c7be1adcfb6d58d8da369fad6de37a3ce0c820f2cc1ac9afb9727dac513ebdce2329d3cb1aedb5376167f1eca4a788f73af1dfaf51b49bd6c06e28eea51ce75a700f6d611db8b7d3ef55cd91bb178f132c3e97d31aebe5308aaf6013fe32ceeee9b7ab146d86eb608d037601c788c4ef623edef1bee7e37d36b71ddc0b7baa0dfe6d73d25b8c6fb4037ad6f6e14e00efc8e49908e4b179e92de2583e07cbcaf3be2f9b7b6b4df6e5c36c204fa26553b45dae90e8300efc06744855dec5acb7848d4f491e235aa74dd5c068c531fa6be8521b6025d27f20da321af3a259ec22b0124953c4acf91a69d6035889f459d0b93830cee3715db44ea3fe0ef68fd27bdbf6fb8af14691bf71e6ad5a7cbcd7e2f39c2c30dfc6e2e35296986f63cbb396976feb4027bd7edd14d3e37330ac43f855cc97b89678c740b81f8e3506122fad98fc1638987dca803dd1df45acba9d78dbd4db1d7dfb0bdfc0c7d7ad4282fb0f112fc48aab8be5f96ccd8bc36309f21def178a5ce793ff3a2e3fef93b6f8f8adb530866ca5ce7d9761ce75609e2f2dfe6de47a5f5ad73b690d10ed8a43e3e0707e2237f8706e7070068a3a958f6147e7b5fa6d43605707dff0b9a9d6121f5f58bbe946e2ad1f6e44d2a2df2c4d207f45df408c769390798068c71c969c4dc4b4f70a3966d49f88395117837b9bfbfd443b56d834c63d2c97e5716c777902bcad88c31bc56ec265bd997863b49b1dd9a96af03d4bd4c162fc7183ef77317628e6040b9f164f1f3e27dbe231aa25c6026f215e9f768b3e7731f3f828228da5ad2393c71471723416ba95eb741db8b7b91e2cea01d15617e38bd773996679f122b7f1df6f00f7e2bb44eae4f640c764f95a0bb01249b38da3eb105126b8bd5962ccf276172722e6ebc9e63ec79249b4ffef205e9bbe83a7bdc6c11a22e6ba09bb3936b60e16b7758bdbb625e6dd89fc00f342a26d7fd1c7bed1c58eda1418df5b2fe204d1a7b91660f9d66446ee04728a677703fc4d3e19eef6a61bb98778db83f738bc0c1373315a7bbf8bdc4bbcedba7b7d3cdfc77fbf11dcdb7843f9fcafa15ff3bc23c45b0eee077af8d3bc9f63dec4bf39cec1dc9fafffd9ff7dfe9c8f4f5a7c7cc93ad5877797244fee4a619e08ff16c7762262bee768700fda3442efe8ef7783df2987bcbd67f171234b8cef887ef134e91bd543f8a863b99c49ae85b7ce70f03deb2bed7c1e9ee93c1f2ee6adf1324ac01897b48c8a39989c17eb6c57877c6eafd6593c8df53c0d1eef5be738f7d6d76a69927dbd79c7ee41de927d787aa2cf508c9388b5440724984e2c1ef9388425fa951e70b1d8bf93f1a3e73bef8ed9caef2f70f418c1e7f98e781ec7b0781b80748c91f6690edec87acef391a21dc5fb5f2d1e47593cfd687fc883c41b5f3ec87f97c504b1f4bb84786d792da95abe637d7f85f3ae7ffdf6c8b79de7b9227ee67da316ef7fb4787f49e471e28d6d1e8fa107b745ebd2d83662897ea59d20ff773a72e58afe6fcea3b50dfc0ee7c88879ca0f038c8739c6fbbe6f1f21de79428f80f7615ffcc3fcfa10c07cc8c11cd5c787f928fff666702fde8798fcfbd15c2f4bf45ff23e368bc757d2be2dd136167ddfb389b7be11bff3326d5d2fffdd12eb28da21df5f0d7483bfdfe87d2f6a0bb7807bfabdac4dbc0da429fcb9c0bd8c5f6f71bf1b2fdaa737276843109fcaf218f1ce4b7dcce17d8c182fbe3585698b1896c77ea2ac54b159c1d779e05eb3ecc48c5bc578ea05c963587700ac44faafc4fa0f11133c41bc71db134e3e8c1531a6a8c7447c769f1727f23cf1fa4de1bf6371b623b6ac168f07224f126facfd2497ed7307779c28e37cad86f540ead266758cf0294f13efbc81a77d1c3c45bc71d773bef7c51cfd0efcfe591fe7cf3a7a8de373c4ad0749d53a52bc571bfc9b5e9f01cf9e71700ec80472c1749f21de3142f1be68038ab8330e471e5ce12b1ef261dce1e6c1183ec7d6e2fe5ad4bd823f4bc4a587abc911d3ce1f917068eb3a5eccfbe79c583b5d39c78b78f851df6ff1d212fef5059fbdbec0d3e4fb1f8d17f6296cf1e638f8fe36fe8bc4dbc67fd1c19f20e6bc8e06df8136fe04c1ff63c413c347e3fb97f8fbc2e70e05cfe9f5659fddbcccd315b88f7b71ab8c15be4abce5e3557e7d0dc809e5798ddf8b71e0db7ccf5b03bb7bc2f7ed2b6e7e46db2aaf78e5b244ff8fa8df9ee4d7a792d323661b2e5e1ec7b2ab6789b41d3391fbbf4922df853d3d1d27ad04db1493443fb0f063be3645dc7462d579b57c9cbe4ebcbe90afbd99f4baf73df65d227d41626f09b166e648706fe34ece05b695086e35fe9d183378de9727b1f24facabe27b145860edd5f1c3f8335ec6ac97b99c6fb9f244f8da22b4bd49df79338efcbcfd1d799b787dd3db8e5e797d1cdc3cd14ee76585cc8e8d6bbde6c37f87e3df0eeee9ef92bd1d2c316efc9617c3331f7f23c779d7fd3e3aa79db7a5ad37dddf8ee77b1458af82efe8fd1b401f10a7289745defef2af539d22fa06447bfbd438bcbde3e0f8d7254e795b11e75d0747ac5bb4de77eec5ba454bace31273553fe0bcbce7e5c1e26b9e22ef03bb7b0f3ca3effad724c6914dfa8caf29887ce0b3c30f1cfda7f2f6ff5451a7083bdc183b2df15ee443f09e48eb23f759b40efd18e8f9117846af9f70d9ee00f7b66cf9c37cb89ff2f77680b4e9f533fefc4e700f7c4de473e2edd712785f02993e77d29c266cfc235f1a5f10772d457567bb370f0f5f00ac4fc1338121be05e9b32b7d7e17cf83dfbd69c6cb8398e546acd3f9ca97ef5f716e6f75d29c21caafc87f21fb37c41b9b704ead4ff8efdf126f9dfc2df88e5ec51aac4bc1bd9deef4cddef7449b3bf23d7fff6e704faf3ff0e7f7f8e4fbc127e7bddee7ecbddade6fa23a88799837799f47fb073ef3ea16ab7d837e7b5f9cb4459f022fdbac5e8995d7ed7cbcde0cee6d5e67897ae4737efd92fffea3b7cc58dc26adebc1eff4fa13f1faa77876f0558276f09dcf0ebe73e49db9c5fb5e18ec2022d685c9fa71d26407a25cc376b2e8e38e9b67224f92ccb30327842fcfa2bccadac5ba79d6d6e1a5f801fefbb73e3d7f45f281af878cfce6cb87dfc077f4fabb2f1f7e77d23be865ef7bd17cf8c3970f7ccd55e44f241ffef4c979aff7794a7da8effbc8cf0adf4be66944c0ba40d57c8ca67d6d72dffbed20f2972f1f7e21deb968bf38f93647f4f774e2cfffe6ef5d0eeee9ef837c3817837b21bfd0fd7baf8c91ff109be3658bba11982fec5e7c47ef2dafcdb17b5bf683c77adf13ba6644bc3697c1d7166664c86d2e23c327e7bddee781b139d9f7ffe8d96c46350d9b15692769b3a9b6f90c31f6226cfe5f9fadfeebd8cd5c31b799db7c4675afcdb37b68f3321ca1bfa81733f9b7608d21fb374d8fcf9798bb15e82d7b975e6b806735f8f77c1f9ab9ef83749177e78971045e276734e5b28b3d8c3af99e3fe06047bfe3b197c5e38a0cd027122d2fb589bc3c0bbdea786d36a30ef88e5eeb126f79e67bfb16b4f4be172dcff588b73cf379ba19f589bc3cd7f7c979aff7792acb738618a39a8163a6bb8cf715ed27beb7634603b2fb94f1068ead14128e23fa21e3c5a8bc9eb2447c22e21ad11659e9b3a186888d73ff99d1c867078dc077f4dad867e38db9dc7f7bdf8bdaf81e3e1be76bb4339a2036dec427e7bddee7296d63883d2866e198e9b6f164dbba41b3e784dbda624cc317bf47eba8dfdcefabc4ec22663b02dcdbb67844a60f9b7f97d1cc2b63065f871f8dfdd7817b1ba784af7f2ce1fb3f1ffebbf73bb10e27aafb06845ba15bb236f49bdef751bd93fc3e3ad69668ddd1cc8b136d2bf97c4e74bdc35fdeef458c1f6d538938e552706fe7cfc265def7a2f19188f5ef06f756026d3321a742dbecff5bdefad7eba9fa89687a49fa197f1956f673bf697effabdef7bb9bfed1b2ced76b6634e7bf6f07f7f46ab96548b4732b5ef6a681b6a779398cdb9eae41bcb1490d279db22ddef7c2d09e8ef641ffe862469ffd04b814fc4f00efffaf2ec2bf6fa7a9ff4f6adffbeb42d69697d938aff3a26df655e05e7c47af357d36cedbe24bd778df8bdab8682bde0deee9355e1b53c8a9d0c6fcff6e5baab6e1596b1eeb7dcc178bf4fe5717ed1afeda697effff9c7f4f9b11b4af2cb1dee35fef77687c20ea7fe22d5f89c607953bbcef85213e10f50a3c53e4ffb53f066b14a2fb6d80d8e97f6553ed7b7f7f8e25f6aaf3cf61f0f72f22f10d2d3aecf724e39b5573bcefed8af8467b0ec3ffca68d27338fe571ebddf8b3ecde81c6338bfc1e6b9d877b668dc7e58d91a088bfff698fab7192db83c6bc13dbdb6e4cfd7817bda67fbba23376dc630cce1fcfa44ecb4056e44d4cdad38fe69e09efe9e01f0e8ef9b714c693a7bfaf4d9d39b6e44c404b1f6417f91bf2b7c9db0e907c13dbd827d7a22c23fb6719f65f03d8132f6261e5f2bfacc33da8277db8277e935937f7304b8b7e539ea751fb6f8ae9dd7eed83d95ab06bf6fcf7fe76b63c41cd40cb06e26a33d7846af1df9370f837b5b8623f9fce3a36e44d2eac4bfdb0eee619a9df9ef3bc13dd5adc8fb7e4617fede23e05e700c711ef5e1f8e4ca00ebd132c41e002fc4b157ceab28b7ec1e94db2333bd3ac5c38b352f3552935fc57a84f7799afb104fddcdeee9ef89ae031673d784ee628dc576704fdffb3a79d985df8ac43b8b3796fef51d5d72c43e38fcdce948bcf34c65e3ac3ca6cce84abcfeabab631b6bf9faa775c3781a7c8feb081fef8c8871cdbe5eeea3b6db0fd812df1728d2103cebc79f35729f45f89edd91c66ebe9d20f6a7e1fed382e7dac5d02bc2db1319dd7c79c9d702647407b2f0bd6d337af8b8e8e170b16e9b23cb3162cf7dde071c11beb8a52befc67a723922a2fed880c899ed9393ef8f9bd113c8c9f74ac9c8f1c999e3c879cc049f9cc2a7efe59537f079960017163fe72fa31778266cba7755ce22adc177201fa2bfb70118b2df45dd74bcefb9a857faf864ee03f2a636f877027cc4f423223eca54c788b4e3e96fe4f7a04eb3f8ba828c016e3e9e9c0b9ed1f745bdd79febfa184f4bd4d303019ea86bf603728af706014e06014c7a1d4cbcf5f960c7b637fced953dfadd10e2adcff93ebc19437d656428c7990364057cb27bd88edbcfa787381ff162706fe31df780c3d5869711f98679e58bfebe9fef77d1de10657138e0d28f39dcfb8dc08aeab21ff1d4c151d906833431ec6172ec783c8834a23820dfc5b3a87c83bcf2adffde9b276cdf9964cb87ccbff073bf3246f074cf02f7b6ecc7f3bd04c47a1cb6fe2c96bfe27811bea74944c4612339fee3e09e5e738927aecdf0ad67cc18c57f5f01ee6db94ea8f4e18cf6e18cf6f13a8678da5cd1efc600bde8ef4f38bc9f7082579f787a4b7d4a677ee5316784cfaf8a88f95563799ae7817b8bd717f4798c730e23629ee138feeec9e09e5ec5d8fd3a706ff3b631dfd16fa39827c163d9c83e3e5c71eeb7bf1e04fba166e4017d6a83dfadc4ebc1e83ab638e7ba44f6f5e9379ecb770ab8a7ef7573d338599c21c8f7f0cf10e7c8af03f73627272e74de3f49eca727ce0912756b1ed0a5a74f8e493e39c4f9ed9275a2911e5edec49ad00c7116b8582324e35aa407f686cd106785c7e13f233f05fcf74a4cef488e9bc629c23ef8f9031913814c13f975b22f4f263b79b2a9b5f7bdb8f2f19822d2579267fd7cb24ff1c93e65f7cc33294f1d7cf24ee77a5c07ee6dfe4f167d26626e5e7b578e93aff2624544bfc0ad8ab2883527bcdd11ed2b9941bc7d257ccfe0c8405786cd621c47c45f5d93e022c797ee2c5fba7c5d49c64c604b223601712afb9d5e45fcecefa3016bcf33668377e9750ef1c674731cfe37aff1618bef0e26de988eef731ced3711e741fbfb68c099d819878067f43a8f78fb68e639329cba96739d8fa45540bc717d812fcdf9c4db47339feb56cbfb7e4621f1f6d114028e21cea33e1c9f5c19454047de0f1401ed1d691f0de7351a2788360e8fbf4ed9e9d5291e9ed4ce841d14033be2f15c460990b9845f172076b410bcbb10bc4bafa53e3b2a75383afd7d1fb6f8ee509f1df1b37e2322efc459bf7e3b0267fd662c02cfe8559c4dfb30b8b765388defa772fa0e242d71c6ec76700fd31467ccee04f7d5001e7f3f6319906d19e09c5ec5d9aa4f827b9a86b0297136ea39e0be5a5599332a401afcccd0c80012dbc6c4de1aa3c13db0b1d344bfc8e0c4f0bccfaa5bec3cb9b1a498149065249b7552d3686e06994a46dab1ff745244969225f6bf46dad7c5f67fce9d782ebeec4632e37cc3c6c8d9e89efda70b4bb692acb63f2d76ce309b66df54d88f8aedf729c638fb9b4a92437a33ecc5f66f85364e392923a5643e69c5f6aa17a98f647f17d86f9432d0a732aa2471679524a87065f67fc5f66795f68754c80afbf918fbc912fbff72fb59a17d3fc1bed2afe6915e64b6fd9f1765869d6c19596edfe5db7f2f6378f36cb1abbe194fa583eda7fe6fa6da984b98748bed2782d065f67d1993701afb7b0593b498493fce7e56693fa3da2c2023eceb2a965a55ddcbed7fcbd2cce794c9653c58e9b9c58e0214d9946b6b43a5cf66b6f8bf1cd91539c2869f9eca708a61b56c16bd9c582527fec7a1e364e8a0da388ed18b5166799ef526d96cdc6d6a1506d575acaaa1dcbe1dbefb913e3175913343b37b2fa6819bc36d0a371ef9d211b99f54f7aa9643b259a8d63a8e6ab188a57859ecb43a1515aa57afd6930aeaa7df92d1cf86aea6a5917ee7bd52f69e7a06d460959f3703d852e47cdbabe581ca733a13be8c89e65786422f619e50fcabd8fe6a94ad4e317baf02fd852a467d6c95bcee4905abc9b2ab6a651c4f652cc322b20c63f17bfe2e292fb3e3f84a7996d58a6ae16659368bb05ac6306c2c2d167a55e7f197287a97fd37aca4ebc75f353f6a637faba4ed65b55f7b625eb38b3a4c6f70cf6d9397e49ff6e5c7d5e5f95587e557325260399621cbb13ae92e62f1eb9458f95537aa979b5ff48f9cc37a88cdc7930163b09a8cc1bae9b67951ce69dcb524090ee9807857bf9b9213d80031c2f8226014569750d89352d8502215a95edb2715150841ae21cb9c7abba6024fceb8692f5f0b1f05d551e36e1cb3fe5535ed9a32f6d874c87946d913edca69760362bcfd5b81fd7e310b52e9f33c1bb1c04e9be20d6729b86d51ef17b199a5f32fbafb9995b2da84b1da11b4927525c318af2561bc27b5d7a61233603ece5f181ae385a13656cc9ae916b33a1872735de4ba18720b5de47a18724b5de4fab262c366fdcc494bb171bb63c4bf46d8df2eb49559c1dad8cbedef65dd37b18b4bab848bcb9eacb8641259a7929a4458316920cb3bfa702f9990feacdb13cfba8618706b4de04698b5b5d1b5b6c698c87b6b8abc0726725b5d919b6022676a8adc14036ea709dc4c56a499b1a4b725ea34c9288e7a2441c7ddda261c26772058d330b60c58916d2ecb1aea8369b5aa5bb3b590654fa374674f2ef364f393cc9e4ed44c253ce059d419c9a278726059d4529645d4c8bb6096e3cfa20e7816b5c2f23f2b05f9bf2706be4f0ac0f7c268d93705b4b496592e73e98b8c5aee74fb993374328afd5acafadb5dcca5ec9ea6267a14627d41ed77a27d2db225a4b2c4b6f4ae519d41ff0aab6de8141ab392f149ccce9f9a48374b7756b0cc0b8315c436328ba3352f9d5ea255f3ee8d2167eb22b7c5907bea226762c8bd7491dbc99069a3970edb57e9b4a56db3c9766e4eb51f95b2565c51d5d46ae2a9b5c79c544e0a9c54070cbc4f0ac03bcac029af74fa944e58d549e6fd587438dba8f7f336e373589d5960bf5d00fe25c61cfd4df89c38dead9fccbbb1c0b42df17720a8a6dc3f11ef3580792ffdc430efd419b386819ad6d005b3e1fd5260c359981719a4eb45f6c19007eb22ef8b113224058474c5c41eaa2b76370c797f5de4ee1821c35240480f1938edd91a1e7dd905ffcffe5305bc1e0e9e8d493e4222f92fe3224a92f7c4081fa94b782f0c395717b9b704399b35b3d791f47692c9e7398db1d5a2a94db61b4c871267824ad5a84f4c74996a5f4b9814c57c1036fefca8d8d5c82822a94658237a14f0ecbb5e0b3a4b2dc2ea1dba3622cba2a5088b8165d2a8c7ccf25a6f2c4b3d58dc6035680ee669c6493ccdeb323716c3d3f4c18aec01ba45b6af0c9916d9f1125bed496d952e99a8c36afc2ae98cc5d3e92749279b75f11cbe4b5d83338846f14ad8d443076f927dad242b99a92e02332ff2ed77caed348a3dc15572ce802e6b68e36f8f10e78fbc384c62c5616802c5c1a4565801e82fb324da74a2eb39aa34bc68bfd454926723cf65c5f030f698b2e4e46e297bb5941cce425a6716a14ac36c804c1a3a88435771c40d689be0c00331e0299ac0fb61657caa6e191f2443aec78a9d7e843518133b5f57ec2198479d2ef1a87f5b6a1e7528063e43027e4f440d7c7fac28cc4cc4466258f5300c7896ac8cd196f848367123d3fe7fa9fd05ed372e60a53f935586ae37c8b4cb7aa9fd2f5a617703ef2fb5df7066edaac8391c338a03758d6204966f0749f2ed67c57c1b8981cf96808fcd5003cfc5f26e8e2cef7a11129dfdb790d76d5e6f98c91af9996ccafc72de754573ae82e56b2639c26e421c695f2bedb733593d50c67ea3ffa6394d7dad4a9e8ec2e43f58267f1d207f1e905025c5d198df3a44e2b72c45bf3546064e039fb904097ce69164029fb1186d0532da682ff1283b7ca191eb72f6fe346600c5d158b9284515e438895cd96cb46809d99501196d2dd0050615ecdf6e8842d37627afea045e74ed983ff0127fe481175d8d9665f526f103af54488f055807604eb548e2542d15a73a5e864ccb423156164a922a0b1330ffba40e25fe9fc5a15ff3a5166d06c8472d92e3568bcb84e65d8b458ebb726e882b20c7fd7021b42ed9380d9a64ac6ae16f538f4fd42ce5c05f5d47492da7c5b6c2af44836904dc967e54d5ee04a59814ba7e458a19b8499eca112931dab68b29365e0d464174972b3e79eac982b13ec97a71497274f5684d85079f92e2d42b90c211dc5a84c568cd8787ebf048c319572b665639315ac0629e23588534fb5b5a8d32f673142b1fd9cd632f0f7ae567d56842aec00aa9c214e634160b92dcb02166fcb0bdd6256e8d2ad2756f0a660056f89a4e0bdae58f0a6cac0a9a12f9515bcd68c7483d9e1977c312ef9342c0858260902945a56f918e1874908af56438df0e998d8e5ba62cfc0c4ae9088bd5e51ec991878a5043cbfa61af82c193875efcb895e2fc1811830dd41a94a93834e04106dc5425f6fc17c520cfa008ad893d5f6df65f6b3420691c9d6958a09f22a521e8471bb52c26d4b456e676314acd2e4768e0c989ae7ea4480630c941f2c03a631f8e10489c1e93e0fea31f82118ed6b24b45fa548fb5c19382de647ea16f37918f251bac80518f2d1bac8f331e4b5bac8855826ae936462adda6a995884811f23019fa3085e2c03a7e5ed58996fea44e848bd1bea3a4d68b76fabc06e885632cf93693b37271429f2f49195b0895d4ec7894a392fc1e45c2f93d3d9c6822e03a2757b01eb47a5294eb6237995541760d41f27a1fe4c45ea1762e01b24e0df2b8297627c1d2fe3ab659c7c2d62ab47dca7bdeca72a3c1e8a4973824c1a7aebe69b4a3a8b304a374a28dd56478dd2324c8913654ad0b9b60e7dfbd9944d629dbe057c0b8e15ac1a57a7713126c1493209a8679b100d0cf2920c0b9660946e9250fab622a54b318f7cb2ae475e86897d8acc69d65513fb304cec5375c52e9721d3a8633341a20ebad3be7ad45181a5733a96ce1949a553893175a62e53cbb10c3e4b92c163eba965f00a0cfc6c09f87a45f09518f83912f0a715c15761e05b24e01debab81afc6c0cf95809729821f8e819f2701dfaa087e04067ebe04fc4645f03598915fa06be44762625f2811bb750335b18fc2c4be4857eca325c8d96cc1453a978af967c0a92d15a33b4627b614772b912f118b973ed6d3b656962fb486be4426924255be0eb3a64b25d6f4b56221380603bf4c025ea468aac762e0db24e09b15c1d763e0974bc05b3654033f0ecbcc2b34337303067c2591c482dd98752e65658c86f3c56c77a925ec5f4bd80e7fc56cf24201b37db7c3494c5ea0db956572eb2de7365d665b7b0ffba98ad4c763525f25939aba0cdab7edc6cd4e53d26986c8e69666922e3ceaeea224d709980d5c2db1817b140d6c23a6f4359a3670a2cccfb2e567a546fd2c3697389f75a2d3ed054b98a52c4ef1a2c66b13f6c9db994fa64b19ccc98af9ef9364d94d63ebeb08125b5f6fff5f878aac145b6fc26cf60689cd0e56f45b2763e0374ac0e729829f8281df2401dfa4087eaa0c9c86353713cdb0663326f62d12b1fb345213fb344cec5b75c53e5d864cdfbf2d11f713a38bfc0cccd06fc70cfd0e924c23f24ccc7feed0f49f6761c0741755e914bad9d12e31a7f7e660c5faef6ccc84ee9298d0058a26740e067eb704fc6545f02d5866df8365f6bd4965f6b998b5dea769ade761c0f76b029f8f59d1039ae6790106fca026f08532609af7746b71ff444e0aa03291f322cc0a1f9658e1df8dd5acf0621938f5923b89a697dc8a89fd8844ecd67ba8897d0906fea8047c9822f8a558c97c0c2b998f2755322fc3cc911ed053c55bd2d5d873edffe820241d9e5e40f2580445273baf62bf2c63ad0d1ac3abd8ee364c8a27655234894ad1d3fe7b317186379c891ec9cb703926c3533219f6e032e4d8ff17b2789a7eb3cafe3b7909aec024785a26412d90177429128d785552bb1233df6724e65baf899af95e8599efb398f93e9794f95e8d39bde7254e2f43d1e95d8331f48284a1c71519ba16037f5102feb922f8760cfc2559de365503bf4e064ef3f6652c6f5f492a6fafc78ac3abb15c53ef14bba61b30295e8bed9a7aa5d035dd88c9f07a2cd7d42785aee9264c8237e2b9a6992c3db565133763e6fba6c47c5f5734df5b30f37d0b33dfb79332df5b31cade217a81de6d183bef4ad8296aa6c6ceed183bef61ecbc9f143b77604a7c2051e21e45257660d47fa849fd9d98d41f49a46eda5c4deabb30ea3fc6a8ff2429eaefc694f854a2c4ad8a4adc83817f26017f5911fc5e0cfc7309f8ef8ae0f761f47f81d1ff6552f4df8f19e7572446b59693e26aed014c8aaf6552b8d55aef14566b0f62327c239341546b7d5358ad3d8449f0ad4c82dac4add646b13193a58af36e1ec60cf83b8901ef6ca166c03b3103fe1e33e01f9232e04730257e942831b8a59a128f62e03f49c02f50047f4c064eb38b9e56ae532f3c8e49fd8b44ea7aadd4a47e42064ebb477e259add234f6262ff2611bb8fa2d84f6164ff2e2b5b74ee52ec9975f9f6abcbd8dcb705ccef94b389a7ce32ac22366699479c33149c05d805f6d322b6347b21bb177eb380cce7238abdd888a258bcbd9a38db6967b2117de718ad4c369a54c497f42f624f2ad85bc500593e6659cac75ee128a7ea04d9a7b10cfa439241b98a19f40c06fea7047ca122f8b33270ea8cfec29cd1df4939a3e73025fe9131b4a79a12cf63e0ff4ac0b314c15f9081d3c2fa5f22ce2846d7f58b12e06cb6cbe8ae1940aeba35546a0790e9ae04890d205b56bc01647d59b101e497305b8a5892d2a6684b2fcbc069159161695611af60c8d574915fc5ea87eab2fc54709aafc9ec3f933e2cd925f6afb3695b9c23d212b6fc9accf2f78d61f97a5bcbc973e275cc786ae91acf1b98f1d4d6349e37b1625a47524c1fd84bad98be85495dd7928444b4b61cce1a5ac56ccd846cb54d260b9732152746bd8dc9514f2607ddf4450dff1d0cbfbe66eebc8b013790094eed87ee3b9dcf62c245643433621a972d548ec4de93a54ceda2a1c42e66b556b38bf731b51a69f2f50126756389d4656dd4a4fe10937a0f2c33c4340b2734f64e475451eb232ce526b29469c78173666476f418a9ece8064093edb255445417d07c8c49d05426410ba90413d8bf2ad98a75a70191dcfaa84f30599ac964d92b4159aa9e33a422d3a798e1359718dea6bdd50cef334ce1169ac5e5730cb8a526f01718702b4de02f319ef794f0bc5d91e7af30f0bd24e0cbdaaa817f8d51d25a93926f64c0d4fbb449043846bbea5b1930ada4f7b690266d5b2b9926ed7718ed9912dac7b653a3fd7b4c89769812ed9352e2074c890e12254e5054e2470cbca304fcd6f66ae03f6186d949e64ee9e6155309dc96a48885ebc29167917d5885b784ffed9d6d9fc9ee9ceaa71bdbe681fe225c6e059b8d9fc91cb3bbdcd9e99fa20b779711efdc78910eed9772aad892a83bcf64cebc487166e3cf18179d655cd06d8ee1be7a4ec0ea56b0eed2e3954cc232e2ae9875e4a332c743e86dbfadba42e117cc60ba480ca69aa2c1fc8a15a92cac48ed935491fa0d53625f8912598a4afc8ee57457594ed385b8f2ded6d9bc9f96aef0a00d156787a258799a15f3d77dd86c5ca787d6b56b6f0958ca2c43f4c67a7fab647655292945f399844b415fae83bd94377455eceb0f197bf4a4ab6e96fe49577f62e0dd5300fe970c9cda490f4b7fdbe2bf31f0ec1480ff2303a747d7f5b4087e1e9c3f81ce7802ff6209f44a5102ff6119db3b05194b2c043c2705e01606de2705e0111938f5737d257eeeef8e6a7e2e0303ef2701dfa1085e0da3a5bf8496679e7e7a880a2dd531c9074824cfeba426790d0c7ca004bca922784d1938ed06dc4fb71bb01626f62089d89b15c5ae2d03a7ef0f4e81f7aa83810f91805b8ae075315a86cae263455aea6146be7f0aca7e7d0c7c580ac01b60b40c97d0f2ba222d0db10c1d91026b6984818f4c0178638c965c092df53aabd1b207063e4ad603a908de04031f2d015fa308de14f35a6374bd56334cecb1323b5414bb39662ae324a6a23a23be0526f901b2aa5951f29698e4e35360e4ad30c927c8fab2baa849be27063e5102be53117c2f8c964929a8295a63924f9648be3e4b4df23618789e04bc9122f8de18f8140978ad7dd4c0db62e0536515a8a2e49918f83409f86045c9db61e0f9323b57046f8f99e2f41494d00e58d53f2305557f478c9699125af21569e92401cf6e67df5a7447de74ed8c339d380752e5d8a98b3395d576c79925e9afca6687efb6aaa24722a91d68e3d10306d86ad3df6d523bee6b977dfbff9df6ff4dbb126c8fec832cda77965c9ae8d9ab9801cc961840eb7dd50ca00b063e47023e56113c0b033f58025ea908be0f56e80e4941a1db17039f2b055fbbbf0a78578c9679125ab628d2d20d737405124717517474dd31c9e74b24bf4751f21e1878a104fc7345f06c0cbc48d652e8aa06de13032f96800f5004ef856568892443ab2966686f4cf20512c9e7284a9e83812f94803fa008de47064efbb94b2d49af3fedfba4d3c216b1a91b2bd958933b675b7de7d3be58ea87ca52a7ab2fc44c1e677c8d7ea3925e3f8cca45b2e6a22295fd310b2b4b416c3400937cb144f28f15251f88812f9145d2ddd4c0f7c3c0974ac07315c10761e0cb24e01728820f9681d3cdcb0eb3129847b015071e82495d2e91faedee6a520fc5ccb0220566b83f2679a5ace592ad26f930cc1b2c977903bb110d7c4f111bbb2b64e37b45d1bde4e87505fba4948df8b947f2b9a3cece24ef723bce54f124c3315957c864a5316daeed3185f75249690496d24a594a0dd97b4b988ea53607d447d2d8780afb597526cd482cbb5749b2bb694fb5eccec5145b2d53ac9d27bb6367a47f7e610111d30654941f85c9773856353a03df624e9ddefcb9d118f54748a89fa048fd180c7c8d043caf971af8588cb72365bcedebc9d7092ce72a89b3f8aa9ce51dcd41ba1ea382cd461773a045ae7b73da2dec2a5c8fc3243e0a2b62eea183b2c2a692f60158da476356e69c203d372527218cc7525f2b4b9d36c8e9f257bae94e3c29e87be544755eef044c9e7532799a02798aa33932894f784a7e51f0444c8a636452d40552d0c9e6ae6da8a439092b92c74a8ae4ebbdd58ae4644ca1f53285b2e2144979d1a3994de700ade6c7e32e62337096f1ba58858a3c8c8ae324549ca948c5142c3cda9082f068aa0c9cdac7f196e688d1344cec135220763ed64db331057d40d3314e4ed4e564860c99be7f5222f1798c79be333103dc2431c0a2be6a06380b033f5902feb322f88118d9a7e8927d1046f6a99a64cfc680376b02cf9101d35999a7457ff0cdca3cdd4a6656e6c158869e21c9d065fdd432f410cc739f19df733b87d277e121b0580befb440c48c4a3ac7d29da5e9cc9d84e760ab0533733169cfc202a97c16b0fb4fdf4ea69d340ff39067a7c0431660797c8e248f772ae6f17c0c7c8b04bc657f35f0422c4bce956589b34e499888d8c0a00c54eef47e3e8b729d584f258b8a3045cf93f51e282a5a8c819f2f6b3029829760e01748c0d72b822fc0c02f94857e8ae00bb1627191a458a80e649462925f2c91fc7345c90fc5c0b74ac07b0e50035f84815f2201dfa4085e8695b94bb15655bc3257c80789a973542f778b31652f9328fbbba2b24b30f06d12f05b15c19762e0974bc05b0f54035f86815f21011fa6087e18067ea5047c9e22783916e65da51be65560625f2dcb4d45b12b31f06b24e0b5f653035f8e815f2b01cf57045f81816f9780af52045f8905aad76181eaf54905aaab30b77403169d897de744d4987c97ca6a2ced1b656937206e978a13c5d2b9306549c585876359779324eb7207a965dd11985a37cbd4728e1316e1f94a52e05b05ef0d82d57cfc1a4c925b6492d0dbe1d1384e259d23b178e2d61484d9476179759b24afb628e6d5d132702acced893434bbe3c06b314aee480125eb304a76c8a2a0216a941c83799e3b31cf7357529ee758acbeba5bb7be5a8ff51edca3d97b701c26f2bdba226fc072f43e498e761caa96a3c763e0f7cbaa5845f01330437f200586be112b9e0f6a16cf1331a91f4a81d427617c3f2c6bbb2916cf4d18f84e09f81cc5cc3c19037f4402be637f35f05330f04725e01728829f8a813f26012f5304df8c813f2e01bf6a981af86918f813b256a722f8e918f893326b51043f03037f4ae65786ab819f89813f2dcb5045f0b33047fe8cae233f1bab7b9ed5ac7bcec1f8784ec2c7998a7c6cc1eafce7b13aff85a4eafc7331255e94359946a829711ea6c44b98122f27a5c4f99812af4894d8a6a8c4059865beaa6b99176262bf2611fb6745b12fc2c05f9780cf1aa9067e31d68c7943d68ca1f9092705c16df19cf18d72f6ccd9a1c2ddf157a5c1b31593e84dace53a8eef4c4e0fbda03fd04901e36c99ca646e2046ca976044bf256b0d29127d29667c6feb1adf65985b7c47d32d6ec372e2dd4480631dfc8471f19e2e17576059f8be240b772a66e19518f80712f0cc5c35f0ab30b23f94997d53e2dfbcdbd9007b099fb3e5ccca3a9ca8f66a5c8d49f1914c0a7a48c17036d0e99fb43283fd5dcae60daaca700d46f3c7129abb8d56a3f95a0978369d4d61a573e518dcfa35b995639f48eaddec8e548faaabb81249ed531baf06258cfee961ffa9892c15fbcc922f154b24116ca9d8762cc73f97e4f8b2516a397e9d0c9c9d3282852e5f2615ba5c8f159dafb07acb5f6826123ad8b4906df3ab52606ec01adc5f4b1adcaa438e37626a7d23538b5ae048360b57ec604ca7853b9eaa4774225b092b248b7988d0db7328007d92a31c34dc8459d0b7120b2a52f4193763d5d577bad5d52d58d5fdbd66d57d2bc6c70f123ede57e4e3360cfc4759c3778c1af8ed98bdfd24b3b7a19e7ab090fd50667b1a7a08041ddd5d42c4667c8b5961a3874a54b27e7fea9fe86136cbb8cf7282587848c57cb29c888996decd065dab55b1d13b3033fa59d78c7660c8bfe822df8919e8af9a067a17e6b37e4b4127e1dd32f096f6edef16dd94b42ab83481423c817bb012f087a4046c1eab5602eec54ac09fb212d09eb8bb3c2f26cbf91a8df9c4d92290fe5b6c1a48ffdd0bd8b5180f535f46781f26e15f3209292fa5bc39e6ee765ca194e2fd18e17f4b08af374e8df0073075fe91a9d392a95375114255fa935b1cf120a6eabf12551f5754f5210cfc3f99e11ea006fe301669d1a0431a6959916422ad9d98ef8844f47dc7231843191189a58d5763e8514cf26a12c9ffb3ffa848fe1826797589e49913d4247f1c03af21015fa508fe04065e53025e6ba21af89318782d09f81a45f0a730f0da12f0618ae04f63d57a9d8866b5fe0c56add78de855ebcf627cd493f0f1bc221fcf61fea53ee65f1a24e55f9ec794682851a268b29a122f60e08d24e0db14c15f9481d3f3071a47e8c9443e865a13bada841e1d4cfb6be9a96bf9bcaf83b05fa8a979835ff87b57ab3e212ca81ecd9b73d3784de89c5229e17c312ef94b182d7b4868795b91969731c36982194ed3a40ce7152c906816910412944495c0e0550cbdb90c9dfee0c485d9494478af61d9d142921d5bf2d4b2e3750cbca504fc6745f03730965a25e2da629d538401efa909fc1646c75e123a5e57a4e36d0cbcb5047cce1435f07730f036325fa608fe2e06beb704fc6b45f0f7b0cc6c2b2b4b9524de51996ecf56f2c7633a67c4ccf51cb819ecc332dfc7b2285392457f2b66d1075816b5936591b3578dffbc5215653ec42a89f65825d121a94ae2234caf8e32bd682d91ada4c7c758a67492959be96a99f2890c9cbedf59d280b164155c8c06cca732703a36d3459603b4ab39cbfea106e582fee9e1fca9593537e8980592e6679842fba4a02df9399615fbca2aba996a59f10566475d6576e46efb208a3efd829ed8b09a77858a45f4ae335bc946baca883b65dae9d770c7f8d5dcc5975809eb8695b0ee4995b0afb03ced910223fd1acbd36c499e5e75a05a9e7e8349de3305927f8b49de4b160acc5693fc3b4cf2de12c955c7a0bec724cf9148dee81035c97fc024ef23915c75fbe61f31c9fbca3c40819ae43f61e5a91f569efa27559e7ec6181a9002867ec1181a288b7e8bd418fa15f391fbc97c640b126f76937fc9888af7fb0d9365904c167a3b35ea6755d2f91dcbadc129c8ad3f30f02112f06a8ae07f62e04325e03515c1ffc2c0f79780575704ff1b33e2611223deb15acd88ffc10c67b8cc7068bc24db4246760e68eab690f9172360848480a62bd408f80fcbba9129c83a776cc2079e9b02704b064e691c25cb3ab669b8a411a89211112cc5d1b2149b1359ab692233930a6e06ee2f6ad15e0626c91899241481ce9d52ed3ca9264925bb937d6bd9cdcdb4cde7cab7efe84402f5795c6323f4046d2f19ac82964ebe1a17a193af9a55d12c56fad8a4abeab2fca1b70744e879a35e910e98b8aee605ad9f8954c99aea78d6d4c00c60bccc006867b2d8c3acc47e3897354da852aa03a83565e9b2832724be68ded16abea816a6d444995234a7e8febd0b79478d8826606bcb3d4d5245c9da981c9364723444c915136454d2ae234b9b0e164cd61d97aa8b39e3bc14b4c6ebc9c0293353222938460933baa912a3ebb656cde81a60e0d324e02dd7a98137c42c295fb35fbb910c98bae6e98900535787003796016752b88424c63b83f6c0a898292b54d4e2ddb86a4992d33d9a6069cec2ab49f545f94d31ca0ed4a4ac1926fe4132f1e9769ade734afd3b51a9453bcdb182315b52301e572c182d64e0d479cdd11c246f897176b066896b85011f22cb0cea2a45b8e96ef3ae931d7b62d93157921d4f1fa3961d7b61cacd9329e7ae54729b3beee00c3cb7599c60eb349654d46d8d495480c502628f0dd9fcb1e4f7fa6883c9313f562cd02b25fb8cec8da55d88b94cc181b37024991d46da626916c9d2849bd6cad34e6eebdc4c2c56294e41acd20e2b4925929274e67ab592d41e937c410a24ef2003a7ef2f4cc4b9c5d856a0a3aca547cffa4d6b4bcf59dc509e444baf34420fb4f7eadf0369e71d8ab4f362a58eb5f33ac978a39bf95b73d3c89bf39ed3a3308d6dac566a3f99cc46a09c2dc62b92e0745124c67c6e29b3658cd90e55344f563ef4f42bcc472dc646e76693c10cb98ca10fb11b1ba36c4673083d7bab0f196adf4db5ff9b6cff3f9864833787da0c3935dd6c3e7277304966fbfd2e98c44b6412b7964adcd3fe6f00fbbba72d97135c54955645aa2ccc112e9538c29737aa39c27d3095976121857c2e85db8497051b2aeaee8ba97b9844dd0127aaa9db150b68cb3503da6e32e0b6f66d4522c016debae88ed15129a123ff24353a7a60b9bf5c96fb998444dde152162afabb6fe481263c3d41c512b231e956c8a46b4f442c4f0fed2b62a94e67aeab8cb969bf63773a7da77187e7ec7249bf5191b02796392b2599f380a2adf6c2c057c946541473be375610566b16841cac201cae5910fa60741c21a1a3d6c96a74f4c54c6d8dccd4fa299ada28bec8ae9c3f59c25a1d65cc089df8bb02fc5baf01da0fa3e948094d959bd468ea8f811f251be33a450d7c006692476b9ae4402c1e5fab198fef878d1fac938c1fbc7ad5013fb79cfdc5872ae30783b0048e912450b1f1f44fde6d5e385b2581c198dd1f2bb37bb147a67c80426d39db10ac077dbd6e0ffa500cf9385de4fd31e40dbac8c3b0f6e8f129688f0ec732f904cdceb611181f1b75f91889219fa88b9c8b219fa48b3c0a43dea48b3c1a433e5917790c661aa7689ac6584ce45375451e2743a643a79b1311b9090e7c0026f269ba228fc7583e5d93e50998c867e88a3c11433e53177912867c962ef2640cf96c5de43ccce6ced1b4b92998c85b74459e8ad9dcb99a36370d033e4f13381fe3e27c5d2ea66391e5059a91e50cacdabe3005d5f64c8c8f8b74f99885f171b1261f07ca8033eddbad09d906def83b0833ba4b348d6e36067ca926f01c2cf72ed3cdbd83b1dcdba6997b8760b977b966eecdc548be4293e47918f0959ac00558ee5da59b7bf3b1dcbb5a33f70ab1dcbb4633f78a3092afd524b91803deae095c82e5de75bab9b740829c4d8f40b30e25264792a6f36d0d579351d16dc528a6ac339e8ed160ef8b51a3896c8735a77f29f6f8d2f589e4c5189cb185585edca09b17a532e4bdeddb1b1311793b0e7c2866973769dae5220cf8664de032acecdfa259f61763b977ab6eee2dc1b8b84d938ba518f0ed9ac0cb302eeed0e5e2300c79872e723946c69d9a645460c077690257624dadbb359b5acb3189efd194780526f1bd9a12afc424be4f53e25598c4f76b4abc1a037e4013f8708c8a0735a9380293f8214d89d7604dc38753d0343c12a363a7261d4761743ca249c7d1988b7b54d7c5adc5887e2c0544afc3c47e5c57ec6330b19f4881d8c762623fa92bf67a0cf9295de4e330429e4e01211b30b19fd115fb780cf9595de413b042fe9c6621df88013faf097c2206fc8226f04918f08b9ac09b30e09734814fc6805fd6043e45064c2734bf12d15fc2732a06fe6a0ac037cbc0e97288d7ec1fda49c0a50974c613380d93fef514487f3ae69ede48817b3a0373226fea3a913331e4b77491cf9221d3b9206f47aace05911212632ec8d998adbc93225b3907b3957753602b5b30e9df4b91f4e762d2bf9f02e9cfc3c03f4801f8f9985ffc50d32f5e8049fd510aa4be102b451feb96a28b30e44f74912fc6903fd545de8ab9c2cf52e00a2fc1c4fe5c57ec4bb19ef72f347bde2fc344fe5257e46d18f257bac897cb90dbd8b75f2742c6561cf80a8ce56f3459be12b3ba6f5360755749c0b3f7b16fad39c464bffe0c1b6d247b23978cb745ec615fe96ab802f0af7cfb0bbab1e112d64bef7c21de8fdd77ff5da4ea96b7d974a18595c99ee9a5dd9821bb730009725ccef711bade241529622b4daec62a951f342b956bb0f2f7a36ef9bb1613f9274d91b76322ffac2bf27518f22fbac8d763c8bfea22df8021ffa68b7c239681bf6b66e04d98c87fe88a7c3386fca72ef22d18197f6992712b26f2dfba22df865580ff685680b76315e0bf9a15e01d1817ffe972b143864c6b4bba399ace04f93bb13adbcad0afb3efc2a48e684a7d372675460aa4be07cbc56a199ab9782f6678d513e12386e1dd87895c4357e4fb31916b6a8afc00065c4b13f841ccd3d54e043886a77b0823b98e2ec90f63c87575917762c8f574911fc190ebeb223f8a2137d0457e0c436ea88bfc3866748d348dee094ce4c6ba223f8921efa18bfc14e69d9ba4c03b3f8d81374d01f8331827cd74397916436eae8bfc1c46488b1410f23c66d72d35edfa058c8f56ba7cbc8821efa98bfc12c6f45e2960fa654cecd6ba62bf8245616d34a3b057313ef64e011faf6152b7d594fa758ce84c5da2dfc090dbe922bf8921b7d7457e0b0bc33a6886616f632277d415f91d19329d55da29119163cc2a7d1773769d359ddd7b1870174de0f765c099f66d5642c0f8acd20fb0dcdb4737f73ec4b8d857938b8f302eba6a72f13106dc4d13f8138ce4eeba247f8a91dc4393e4cf30979f9d0297ff39c6474f5d3ebec0f8e8a5c9c797982feaade98bbec2b8c8d1e5e26b0cb98f2ef2379871f44d81717c8b81f74b01f8771827fd7539f91e137b400ac4fe41064e07c90726627d310e1cfa112b2ffb6996979f30e0419ac03f6339385837077fc19087e822ff8ad9c6d014d8c66f18f8fe2900ff1de364982e277f60620f4f81d87f62e565846679f90b937a640aa4fe1b03cf4d01f83f584e8ed2cdc97f31e4d1bac8ff61848c4901217440450a3e3605e0960c9c72324e97930826f60129103b43064ecbcd78cd72530d937a420aa4ae8e814f4c01780d2c2727e9e6644d0c79b22e722d19327d3f4fb3ad5f1b637a4a0a98ae83814f4d01785d8cec69ba64d7c3c4ce4f81d8f5b102395db34036c0f898a1cb47438c8f9929e0a311063e2b05e08d314e0ed4e5640f4cec8352207613cc46666bda485319309d89372743727e3b9dcc269987e64f8fb69390f49a616eeb604db7d55c064c27981c9208f0561cb8850c989d1d9408708c357a2d31539ca76b8aad64c8ec9800cd86d99e1817f335b9d84b064ccb43a1e600416b0cb84813b88d0c98de166754dd2b52fca99240753c81bd317f5292027fd216035f9002f04cccb017ea1a763bcc7b946a7a8ff632e04ef6eda18900c73839a80306bc4813b8234672992ec99d304fba58d39376c6445ea22b7217ac302e4d5161cc922540b7595e96082731b659de0773d58769baea7db15c2cd7ccc5ae582e56e8e662374ce44a4d91bb636e63b9a6dbe88171b142978b6c8c8b959a5cf4c4b858a5c9452f0c78b526706f0cf8704de01c2cf78ed0cdbd3e58eeadd1ccbdbe98bb3852d35df4c3eaa9a334eba9fe58a471740a228d0118f8da14800fc4c0d7a5007c3f0cfc9814800fc2c08f4d01f860acd4acd72d3543b0827e9c66411f8a89bc4157e4fd31e4e375918761649ca049c6700c78a326f0088c8b1375b9182941ceee6adf5ad3c9ae39506a365f08a87678d44932862d1f0f6c11dfa60cba88af5515ed1291015bb6978b79859353e0154661997f8a6ee68fc6c43e3505628fc1c037a7007c2c56599fa659598f9301d36d314f4f0438c6ee910760b978866e2e8e9721d3b935672622728cb935133091cfd2157922e628cfd6749493302eced1e46232c6c5165d2ef230533e57d394a7605c9ca7c9c5544ce2f335259e8645ca176846caf932e04cfbf6c28424c6fb18a663667191ae59ccc07a572fd6ec5d9d89016fd5049e85015fa2097c20d60575698abaa00ec2aaaacb525055cdc6c0b7a5007c0e667f97ebdadfc1988bbe42d3451f8215f22b350bf95c0cf82a4de07918c957eb925c8075665ca3d999311f13f95a5d910bb1c2b83d4585b108eb0fbe4eb33fb81893fcfa14495e8239c01b341de002cc85dc980217b21003bf2905e0a5981ddeac6b878762fee9164dffb4087323b76aba91320cf8364de0c518c9b7eb92bc04f34f7768faa7a598c83b74455e26ebd0e866df5a5349fa3a3486db6f95db0aac4ea22be3ce84bb32ee625d19cdabe8153b75ac13e330cc11dc9d0247508e65f83dba195e81d517f76ad617955833e7be0cc98992b9ecd6dde36904a167a0169349841ec7bb92f1bf88772ff560674f8eb37f9f6cffb28459197d223feb427632067d1be639b5c5a5cc6a0b140ffe5d8e6979bf4ccb0d512dc569b14e9959ccfe3d8e9526aa4d89fd895366c645df1c659724e7c4d8a94c0b7ad6e60af6760fae4f313b6679a49d14d58be27ad97311e8fb6a726048f4acda729beb62860a39851d827ebe67d838a58ac781afc0987e00b32798a2a3133d3fde616ba9eda7e6dab651cef2dcd1369f2c64f9ef97d6fd167f9e2a7b5a8969f9a04ccba13e2d21e78e9ea3598e2d663afaa5f4e610fc255659815fa968b60ad3ec219966fb27947fc36d1b2a6265be9459ae7eceb9bfa8e8b61ad3ed61996efd7cba4d64b9b3906b46ef56ed324d0ec734d929d364539afd99fb4dae7d2d6375343d1f7b34abaf17b31412b772c81dae05ad4b96b328007a3d1af3a4ceb71d81b1fe888cf5e109958d098c8d8a4078b535987e8fcaf49b60d0aae8d3c35832542b27422d65499792c35939947b926472f5484cebc7645a0f89a9352ee954a60b3dc1ab92eb286a63fab4903354b55c249f9b47617a3d2ed3eb40e5c86e1afbc51bdbc9109c6779513f506ed707b4f5a113092693cf47637c3c21e3637c5aea6cd3b5f95a4ce727b13845cd06840d4fb07f2b6440309f552d4245b37598664fc934db0fd16c3a2b9f653c36715abfa2d5328397e2a22ab961a68d720ca6d1d3328d461bf4be2257e93b05b6ae65acf64e9da6c7629a3e23d374b07d9bb8a7f06a50c09e39da514ec6b25c2e67ada142bbc65d9d42add6635a3d9b489bc09b2e8c10a6b35c28b7dfa5e570418cdacf8b913acd8ec3347b4ea6d9c8b89e33b15601ee4363b55993f5941b301d9f97e9586c38a2aeb4bd23ed815bc023e619cc024aa3a531356dc4646ad1e3319e5e90f1347d97b53c6233a4cfc309180f2fca781881fa30da429a6fbf24cac60496ebb16b1c3952aa737a23a6e14b320dc7296a389359f41224477685be2762fabe2cd377aa41cbae48a2fe4d050327610cbc92aa7ad9f16dc341ad6c5eab4d9856afcab41aa368c7a3d828c4521eedee6a1b3e19d3f535ac8742350747b337aa5aa3dfbf268eaba2df29987eafcbf41ba4113956b29a7789ad5f096fe7e15ae557795745a753319dde50cb33bf7d0e67fd09d4abc46ba598ad293763fabd99c88800163d8e62fd4305bced56358e4f2e7a4c3e463e0dd3f22d2c17555ac68ee6637864e8fe4ac77562c7c0a98a8f4fc7f47b5ba65f4712bbef939e1a6342ca333029df89dd83a9920bd392ca059325ec4c4ceb77655a77473d487e748e00f48425d15e7b1ae12c9746d7c98d629c85c9fd9e4cee81713dc33836024afb58cb6ccf5e6eeb46e739c4f70ea9f2016763fabc8fb509629711dae6cf6371728524524a64c484c6972529d4f01c4cc30f12e909908f808c63b617db9ba77314640ba6e387583f5c22f555225aa6bbce3a17d3f42399a66313ca4dff7896530e85debb325fcfc3b4fd58a6edacb8f96ab6ffdff4c8c0f9181b9fc8d89888d6196254bc24da2aa235e232899c8e8c4eef5532bfe0bfa9e87d01a6f7a7d8fc86c4f496cf0748af6e1762ba7d26d36d80621cb09cb5709c511eda1f21dea2ed8c5c1619c8fb26e16f2ada5c8469f3b94c9bbe9ada3833159c130d9df753952b17637a7c91fcac8178ad9f74fad5ad987e5f26525f42eb801a4e634f9d56b8d35b241b23f0da1dfe4b6a2cf2124cd3af649af6f1693a9269e0f4f3557ada41b82788a545b2f67829a6c5d7898c83abccd00b4edd7f19a6f337329d7bfb749e0e6472671dc336792cdde6a2582a1a6cc334f8169bbb9658bd3592b563693ba9275d5d94865aea724c93ef649a7423de367a4ef4e459719d60cb5141fcfd77a96eab5e8149fd7d22fd3b894a2db063db536c64f7445e15fdaec4f4fb41a65f7f45fda632c4a5ccfb0d572a2fc9f4875c85e9f2a34c979e71757119f5e796dbdf903a5f753526fd4f98af4a4e7aa76fa09879ee256c142ad608868a06d7601afc2cd3a08ba22d8de4ac561d7149c656aec564fd25919a0132a45b3324cbf6764c835f651a1c14653bf5e396a27f3af9990ba961e43a8c91df121971a83a269458cc9d5cfb3d793f713da6e5ef58ef8d3c2210ebc196b2bb25124ba672cb4638bdb6ac8eaea2ed0d98b67fc8b46de7cb53bf46d4873812a5cae66ec4e4fb3391beb4aa3657d53bbbf657759670ba6def264cdbbfb039d3897acd6971bda6c9d94d37637afd9ddcba1eff88c44c3bf22e656f4fb3cb4481b4d635d3d77b0ba6d93fc9cde1d3effd74733e557d9ab7623afe2bd3b1531c1fe1ce6d2e6692d056536ada12b76172fe97c8b857555f46eba7d52ccef3cb073936176fdf8ee943aa2173b113ad2b76d59c8c3b308d2c9946d3518db058021b0d4a649690fa4ca2e4bdc60e8c87888c877d15781079ba848f2da7ca07dc89499c2193b8735c3f67ce0bdc85495a4d26697f94dbaa96ee957c198bc0dd59b126cacbdd982ed565ba8c2289f4294ee4aba54aed3b5a460a093ef35dbd2f31b93cbb07d3b3864ccf010a714f6231767c34156deec5b4a929d3c61f1360f550a275507aeaa6fb301d6bc9748c372743656c225d36793fa6616d9986e3896a7f91a8b11647cb61694c4fe2af894cf4563e80e95c47a6f3a0b83a7b7b989c95292ab2a7c2521fc474aa8be5a35a14e5f4ce54fdb56a6b329f3827f3986fd53f84e95c4fa6f31cb26bfbae202f89b6d8c4372aac3c8cb1525fc68abf152a5254e9bb7235c3ec2035f1e44e4cb30632cdfc63c5aad1f4aeec217904d3b4a14c537fbf323656ecd8783fd2278e7eb27a857ea5a2c1a398068d641ac8e72dd034d5e72d38fa61cf5395438f61fa3596e987af76a93a13a8741746038f635aed21d36a42dcf6cf345eeb57b5aa916c94bf3c862f74bf9dcce6e13a7152ecbd3f92ab479ec0b46e92486993a79fdc284eb2edd627310d9a62d6182b16a7f215d9bfacb299af3aff178bbce3fb10dc1a6bdaff59163b2b98bde9cc5d5eca98a03146369d760ec65a7b446be61e9e5adc7d4e535f6c4b444b777eb40ea67bbdc5466866135623429c3f5d68870d11470d5a253ede9c2fcb187221b0d01e2cdf9d7d2d68c4db231a218a9df0e269218b467a8078046a175fa78391adfa2dab26d74860d94cf7a04cef6e9a36a7b99ac37335929d4d75ec9aa435c597a2054d2d436e432daa300bcbbc4c76076012efe9b2e8798779ac4b4674cd389de9ce468d715383a554965a77062062b7b8707042920cae153331a749544e9cc9dd459d08a9593dd293e6424b9354d5b16fe8cccc71bce6a57ea0c26e738581a4ed392e49ad4c924471c3633bdbfbb9b4ec6992167a5ae85c569a9dc286efcd1406dadeaee6d2b69749da5ab12257ce02f63ce26cb120c2398cc08a5050f8b1e552d8da24858dec1bd1fb3e96792c0a50c0da7274aef9e49078b01db55cc2da9824ac292baa73494fe26e7e1066e25ad67589dbdb24712d80a5d1b906de023b8ef5212cf58c9c8481be2d635cfada9aa46f0f89dd51403ae1862ebc5cce9e168582b479c4252d335da4c179bda2dd205a1361202d77884b5a3bd31ece5b258cb6ff76b6602f8a2e87773c5d1888a35ba60be2daa7cbc3d1fdcf56d9ff92f935776fd930d0f7f3012e7d1d4cd247b7cdaf5a31843b143e13c4711d4d87c2c2f6463118ba32b0800723d3d875991d2c2f67b617260a1f6fef52d8c9248575416531d9330c17069abedecba5a9b3499a6a039adc1da5c240d1ace62e455d4c52d4807932d1d5b884f9aec96cd8b788d5a261206bd30897ac2c9364d560f65411aa90a25e7d979c7d4c92d3d2be991ced16f2f7c15277bf9c59188dcaf2f8f0621808bcb5b54be0be2609ac05bc151593ce180c03415b1bbb0475351db40a821c11fc8da3193c022b21a5242c2dcced235dfaba99a4af1988bbfcc455b0225ac03a8396d89faf0e05752f0f72a9eb6e3a90a0c48c24ee82fc7058d71ae0bd7a981f1710fd1705ccbe8aa33d1914344c96b563a24b5b76ba9cbed8bc370c0495357109ea6992a03d096c2dae625a2f8fb60ae9eaaf22e6c1c2e8bfe81f41622f9324d26317217974d88e6ed44fbdd872de5b16eede0b3a9f4750d9db2495f5795520ec6d350f71a7337f1706aab6802a21c77cf35b1c2325a61a8581a2f707bb14f5495707f6381e858959d4a253314cad4d02c636fb9a24ae2da837a7db98453c2adbbd3a14b77474e9ec67ba431bda21dc4b7e38ebe28645381ca1ef7a305cdcdf2479f5802dbadb853b1bd9878228d0801f6092283a836322f3668b7ca75fe5daaf97b394c240d8bc884bd8409384d501c5121e751706928afab824ed6792a4ea2ce9f9ec85705073c140979a41a63d93b01f771196234418887a1dd8d0609344d1d917deddd4e89ceeaabd646120ad0c74280e31495a4322ebf209dbe851bdb12e5d43d315eb3b9355bc6b268b4216eb5782587f7fd385d36947e6b2a4c3dc4fb1a5ba4bda30f38d6f7fe10c0345df0f73291a6eba408e62f3ac97b3c4dde356dde3772bd8d652cb4241dcd7c0b64698b62de1c91c9f551916db02ab47469aa4a88187a270ce7da5cb0a0559b9a60ba25853b294c184bb33ba352888a34c12d798e043ba2389d8aa390c9495811ed7d1a60ba6b3fa98f64014b3d123b793301c11fe5a30ee3dc624597050d73938c93f6e14a6a58313fabab48d35491b9d9ee9c65ca3d8ec6a677a5d18681a00a6d38d3349534b46539eeda99cdeadc3d82afcf0bbffcd35298135abfbc0fdfbae24bf765c8d757c953b6dc053eb5cc6fbce1c4fe859f54e6380c0497e4035b06a3d2be929025971a3b4ac84d7326529af09c84a724d685642dde8599a63fe590a0b7db39402b8ac84dbf3594a2db4aca4fc4996d2106c9652274e56424b56b394d66966290fd5c964c65749655599e49c15737c2b4b3a6d354b3aaf290b99909f15633d431632f72e2bce448caca4e6236725b938252b05e3d1597176b0c842b76dc8421ae459e8f85156cc91812c85b82f0bec9390e51b8ac98a1b6c67294e4acd4ab0c59385cc3df1faf358cb2cb3900eb4ac18c15d56dcd51459090f34642531db39cbb3ac2fb185cb5909f4e27b71135b2e98a53021d4dde408061feee6443de92647e3abfdffde7fa827dd7f680225a192c7e34e843ed1f4803dcdc31cd2975d9d6da768ae391e8abee64bb3759534a7f242e99cff27226f59eab53db179f744144a263eef0086ef27996ee078698bb5cbde5c32c056c3189d0d4cd1d923c3a5737290e81c184a3aa7033af3824467af50d2990f0afb9420d1d93b9474ae03744e0d129d39a1a4f31240e7b420d1d9279474de0ae8cc0f129d7d4349e71380cee941a2b35f28e9fc00d039234874f60f259d3540a034331dad201a00a5bd15b4a729fabe212e7db34cd2d79025ed7652fabb92aaecc81102f29a00f20e4c47515e801666283e6df3f43347673d537476b15c3a0f0a129d034249672b40e7ec20d1d93794743e0e0afb9c20d1d9279474de0ce83c384874f60f259dd541613f244874f60b259d9f02eb9c1b243a7b8592ce8580ce7941a2332794746e0674160489cedea1a4f30840e77c93743627b15be4de82ded71c958d4d51f92be8dc280c0a9539a1a47234e8d8280a0a95bd4349656d4065b1492a9b712a0bf95403ff71788ee8ce516bbdcd1159dd14918340f12e090a91bd4248e47e80c8054121b2670889ac0e885c6892c836c49dc894e84451fa7e397b377cfdeaf34050546a92d8d6245e8c293f8cdb68c1ffcc32d5b004edf4434dd2da9888e18a5ef6df2b8838de903e4bc38085b1babc2120709149029b44099ccb5e70809c69836922d1d8c0c56580c4b27414ee9eecef44a61287d9674e07b42e36492b9c67aeb2da24cce4ee072aa425bbb23d04e18c5642354d513906044d4b4d52296695f74bff88b9313b3c15d8e1b2749037603722ef0940de6126c913eb26b0768fb7101b1d4233568cc781eaa63c4864f60f21990700322b8244669f1092390a90591924320df65e1a23732c20737990c834d883698ccc1180cc154122d3e0dc4b6364e602325706894c833d99c6c81c06c85c152432c3d8c2190ec85c1d2432078490ccf180ccc38344e6c01092390190798449329ddd144a3991a5f647b41f88be1ebefeca8ec4256d4d3afa7ef0c108efcccbf0f59f7f07ecefc85ddb8de640d1ce5fa3638f1d4c51790ae8463bca2495fb722acbec97cad8556c809367ff4f07c39c4109679f816924978c2723587f7a317f06df1b6e4b556a96f226a6286f0166721c6d92f256711d41d5799906eb766373df1e04ee606dd0083558bf1b23f42140e8baa0116ab0c23246e8ad80d0638246a8c1fe246384de06083d3668848671fef03d80d0f54123d4605fbc3142ef07841e1734420d864dc608bd1210ba2168841aec5f3246e83580d0e38346a8c17e7963846e07849e1034420df6cd1b23f42640e8469384d661842e643b343abb81d2e9b1067b998c4d4ea07921283b7157768dc009af46dbe95b4d517939e81a39c924950d1895fef9995460bacbe8aa1076d0750156b8c92475ee0c613af93fed33848d15e33b80e73bd92481741757679fe1e1f6dfce6ee0ee9ec5531899f4fff05198096cf01493148af9c1a267d35939e1acaf184772a57defe15df57320e8bd3cd524ad5d88bfc3b88081b93bf38eb0ffa775365db4b294ed411d6ba82d8ce3e92b4115b4d924d9eef6b8bdd33f53d3187d2d017da799a44fac31874b04e43b508779f6fa0e50299d6e924eb1e0af1732f81bf6a52ba783aae98c7404e9894d4608a387ec0fa83c331d1eb2b79d64da3da4b1e1df7ac0439e6592bebd49d5e6e274e29cfeb09a9d6ce0746614b3a55505cc5a4b18dc62b396b9dd14b5a580dab3776d210ffb24856aa0e239279da17ca92dc40cd0a8c43b380c86f25b4dd15a0042f92d26691573e27a322ba57496d92fd1532716455f4a539d6eac22da066cf45cd3c57d383b076b293ffdc7598aeaac9ea4b1a63813c939692a7c71663550a79f67baf343c4998b45a1602df7b05be30580c2f3d34161ffdd8ec25701851798a4101e2fb48c780fb04a1389c66aee7d8057bc305d24ba674d5510e74cbe706f63f232b0c48bd2d18d818de9543de5c7e0541763740e0561cfc541a2d3e88ed7c6e89c0fe8dc1a243a8d6e336a8cce02d06cbc2448741add17d3189d1b009d9706894ea3bbb61aa3f31a40e76541a2d3e8ee07c6e8bc0fd0b92d48741adddede189dcf023a2f0f129d46e7041ba3f32b40e71541a2d3e8f6f6c6e86c0002a52b776587b0776aa0c19e4b63f38b7a8166e555e9a012b34c2f950627ad1aa3f21b50c8af0e0a9539a1a4b22d28e0d70485cadea1a43202a8bcd624959d887f96917f974c67f1a938f65a5c65738f0c7a526353119a01a2b7878568836398c688be14f8d9eb4c12ed9ef1d733fd13152ccb107d2f1297beeb77a56f85707343b97b4711b0c41bd24125dc6e7c02994cc6903c264c89fdd1aa74f4cc1ba3f24c6095379aa4d21941874b53e6f27d8647f07174076ab47d2db6218a42e821eb03326f324966fcdddaa1f870b7768315cf41a63c6727d056bad924ad628a57a55d5fd3ba5da546371aa51ab3d86300b5b704955aa3cd5263d4de0e9cc1ada6c3a55c561915b05ddc2b6d80f09feadb18d0779b49fa9ac6099784a6734d2e401d173144e334d03abadd7cfdae7238b231328dade69d016cf28e209119c63d8ff201993b8244661877939900c8bc3348648671afa39180ccbb8244661877919902c8bc3b486486718fa34980cc7b82446618778f1902c8bc37486486716fa31c40e67d4122338cbbc68c0064de1f2432c3b8a7d15040e60326c9cc24551b926a7bc11aacdf8ded057b14e88b7f301db68acd09f14fb131e8458d4db0190e6cf5a1209169b07e3746e60180cc874d77c08951a2dd67039f5e80be9d26e96b05e8abba450a0573cff10df372accf00a18f9824740f40e8eeb5a2ed7c40e1a3bbd23ffac7d0c37870dd3ea0e67e2c486486f1e0ba1e80ccc7834466180faeeb0cc87c22486486f1e0ba2e80cc27834466180faedb1b90f95490c80ce3c1756d01994f0789cc306e23d51a90f94c90c80ce3c1756d0099cf0689cc301e5c970dc87c2e48648671ea6b5f40e6f3e96844f6dbed1a91b3884be10b2629543bc6cea0351a5be4f227983ef862b0fbd60d7a4e637deb7b82c95b2f99a4970ebecc643f8b69d8ee9e71e1ebb9ec060af8cb2669936d0999f8b45683dd1cc66665de0faa9f574c522b36d0ed4d76cf0d74ef049ef3d5740c4ef4b22b98b42fa63256f19c08e87bcd247d70572e7705105cc4627ced8f311b3c0ff8c9d7d3110825169887b193ed4040e51be91a2c13f63896053fee40199df83f992fae0aeb8e71d301a16fa6c33ff666e759ec2ee706bc09fce35b26e9131b9f243eed3f8c13b2da013adf0e129d034249671340e73b41a2b36f28e97c18f8ca778344679f50d2790da0f3bd20d1d93f9474fe06e87c3f487486f344c937019d1f0489ce5ea1a4b310d0f96190e8cc09259d9b009d1f0589cedea1a47315a0f363d3cd4ada36cfb3ffa620f43006fa79017bfd70d6ed56cade98ca4473d6991b23b4d414a11301a19fa4a3cb83b6d39dbd629ce6643119cd3e729809730bbd2608e23f35496543224ef64b7bfbdc58d7db1c60879f99246f2f92e8a955ded3804ccec1b44cad2807c3659f07915493b3844d91fa3118f1f92288a49aec2e3645ea4780d42f8348aac959c3a6487d1f90fa551049353947d314a96580d4af8348aac959c4a6482d04a47e1344524dced93445ea2180d46f8348aac959c5a6483d1090fa9d4952bb12efe6ba856ce1a923cc4c46ed423671a6924c61b392e8ff62c01826bc3bac02fe1990febd49d27348d57179effca591f6df8bedffe8bf1d4568bf4009dbb1930a3b89d0c6eb4a3e756c1459418ad95bf9ac6d2606a80d66c2245399d08fb899f0433a7a0ab07e2cefe488302e349c0decf9479354ba739dfaed467d05b34147cb4f26e9d3dbfe348cd3199f03d4fe1c546a7b8592da6f81fffc251d853e870cd88d0a7d6fe0337f35499fdaa219a327129a3bd91ad8e26f4122338c2bdd2f0764fe1e2432c3b8d2fd2c40e61f4122338c93702f0364fe192432c3b8d27d0320f3af209119c695eec70332ff0e1299615ce95e06c8fc2748648671a5fb6240e6bf4122338c2bddaf0064fe172432c3b8d2fd7a4026a91e9865da613c6cf433d0cd6199a432f1b3340c06ebc6ced23804cc2f8998a4512cf252997a1bc623200e077699113442c37840c95180d06a4123348c4741540042ab078dd0301e54520908ad113442c37824c4724068cda0111ac6034b5600426b058dd0301e0db104105a3b688486f1e092a580d03a4123348c47442c0384d60d1aa1615cb7741820b49ef906279d6bb7cafe900abac27eb910ac577277920f5fbbbd037169ac6f92c64ca2bbbd9ac18ac9d8f66ae3c0187b0393f4d6e7f43a478697b179200e76293178ce757553c41160970d4d12b70ff1ce0aad64b33aa671003acbb392157295e934062dd5d86c9089a0e7a99149c2dba28e20b1994a06c32963e47607e4360e32b961b4dc5a80dc3d824caec130cb18b9bd00b94d824c6e18cf6fef09c86d1a64720d76031a23770820b75990c935d8696d6eee2820b77990c90de3bce6e180dc164126d76067b631728701725b9a24576fe7e63056670783c66eab74f471d19d4f26b219f88b7ccbc472edcfca598a61deffa40f7109dd33ddb62a5f6f9acffabae884a01206b79818dd1e61bb296aa70037b097496addb523bd7c148779ed480b50d45b07d78b1a9c60618cdab700b56d4c52db80c4ea32ac30475d1d53d44580bfdcdb24754388b7d3901663bae6ce0118c9ac8f0a451528b313f22e2f77842e2562fc80ee80e62e392f22bbdf72f37f804db74dc7444b6cd6aa77ec2b8c43dd3d808d67a6a3e2a27b96ef3e474e2f05f4b50b46483592d00d1096318b755c8651cbb42c43d4668190aabd496a5b4aa88de5310784f26cf9ce80ce0e41a2d3e8798bc6e89c00e8ec18243a8d8e6819a37332a8d13b0589cedea1a4f3304067e720d16974fa9a313a2f02747609129d7d4249e74d80ceac20d1d93794743e0ae8dc274874f60b259d6f003af70d129dfd4349e7bf80ceae26e9ac65df8c66b3fe2a19d012fbe5f0d145e78f09baba99a48bf6284ce5fd4c74dfc7250cc0398e2d7cb4ed0d68eb6e92b60ea4ea6976a3c82a42b7cc5c4e4417dc64fbf32242679b4e65c5b788114cbbeed2307e646c726f7740728f7478c6c48f680be34abd8e60ca797690e81c104a3a9b013a7b0689cebea1a4f31150d87b0589ce3ea1a4f35a4067ef20d1d93f9474464061cf09129dfd4249e77bc03afb04894ea3d3198dd15904e8ec1b243ac3b9a5c1c980ce7e41a2b37728e95c0de8ec6f92ce8e8cce71f64b79848e4416f14fa9c8fe458f73f9e9df23d846ed8bf89ba3ed6bb10d6e70c999b1266916a079403a26296036ebf5a70667301b6b78fe01fa900606854aa37b4518a3f220306eb95f50a834ba15bb312aeb012a07a56b7e323de6b2d26662992d0cf5a8338873e06511f3a5c5e9e85f32e631d7008f39d824a18d893875a1f7ae988dd4c198458256d11093047666048e6200547bc7f68a180c3d3734974d590c40ed6e8cea66c056879aa4ba3df1ce0d2d2174290285f36e789063ff4d092f885ef36dd0452cf0323a01ec7b539b175e056afdfd4d52dc82510c8f09de65f66aacb2da13d8eb30f3f5be3396e45448bb1b95ad0095c377650805e1cc9ed5688acaa9a0888f304965131042e5da0fa8a874ea6c3e1b305e14eab0692aa8f5479af7930e892b5898448f5b9fcfa6288897d2144219b3c8b5a070e79a24b3212033cdcbb88c9d553f1990372a1db3e1933bf72b8c2be4cf03857c7450a90de7e603f701ab1d63ba129ac0f476aa9ea56c56083d9692f68f96a763e3376395d01e80c4b1e9a884b02559dea0a85f284fffba1d14f6714122338ca77fdd0bc83c20486486f1f4afeb0199e3834466184fffba11903921486486f1f4afab00991383446618dbe5570332270589cc309efe753120737290c80ce3e95f5b0199794122338ca77fdd07c89c122432c378fad70380cca926c96c4daa2e41709b8e934989ddc814cb609ce1b8302f3af88bb8b44e0bcea16a06432463547e052c347fd70e5c3850b4e3d82895c6867f4f030317d38375fe429f501eacb619d8e68ca0111ac683d54e0384ce0c1aa1619c36bb09103a2b688486f160b59301a107068dd0301eac760a20f4a0a0111ac683d54e0584ce0e1aa161dc6d6e1d20744ed0080de3c16a1b00a107078dd0301eac763c20f490a0111ac683d54e0284ce353da1661cef5d2ab53fa1d30fe9cbee56a8c6c81b608abc4ec4256f5e3a6623f54fff6c24631d728f01f20a766577c764fb934309dd21a4d26c77c756535436074b5de6a7c30e07a6df0e8dcd2f7a01d861613ab6d8ed6d8bb7fb14e337400552647e906221eb3ba79f3a7b2139cb5a96db1f1672814ad82201ba994ff8a669d505b6581cdc8df6c37828df2cd0255cb22b3725f70ea685712e472eb0d205c1d8555b765089416a8d1d54f225b0d285e958b7e6dd28ad8224ba60d0f888a5b1b1a13f80f596a667192badefd3be8cd5d838e55a50e31f6a92c0bd24c51f0bdc87937246e86ab305ff33cb10a91920845f1444520d766e1823b53e20b52c88a41aec243646ea0fa08a5a1c44520d46a7c648fd1390ba2488a41a1c1236466a1350fc97eeda903fec136af60575feb25dd95997cb1aa1f33995068b7a6753549e0d8afa6141dac07c80c98934c6ba4c4681425e1e243a078692cea580ce8a20d1d92b94742e0685bd324874f60e259d67023a970789ce9c50d2793da0734590e8343aa7d3189d3b019d2b834467df50d2f932a0735590e834ba00c6189dbf003a570789cefea1a43313044a87a7e748f15d30fbc3d8f1a1dd80351e918eb56df86217ef705c18170ade02c85c132432c3b850f04140e6914122338c5ba55c0bc83c2a48648671ab941b0199470789cc306e95723e20736d90c80ce35629570332d70589cc304eafd904c83c2648648671ab94930199c70689cc306e95722220737d90c80ce356292701328f0b527bdce8f982c6dae339a03dbe2148741a3dfdd2189d73009dc707894ea39b981aa3732628ec2704894ea3c1bb313a8f05746e0c129d464f703346e76580ce138344a7d1ad288cd17907a0f3a420d169f4a85b63743e09e8dc14243a8dee116b8cce4f009d2707894ea347dd1aa3b32608944e3149e71e9ccebef6ff8b79e2056ced46d80f75d8415c0a4fdd95f3345dd19d551bc6a834b636e306304f73b3492a1b1077fdd070fb67fa622509f3392de580bad34c52d741e217e5abda46da208bed5497b23bfa769ae6b9773745f25da0f2393d0c241beca63346f20e40f2196120d9a0a73546726b50ef9f1906920d0e851823f91560c967858164838377c6489e052cf9ec30906cb099608ce41980e473c240b2c1d926c6482e01246f09cae9d9463bac8d3524be079ef7dca05069b477d51895b9c02acf0b0a9546fbfd8d51591d5079be492adb10efb1cec56415a18b6227db1f14117a1a1c4eadc1268331628f03c5fd0293c466fa882d036721b83b3ac51aed0fe3c4890a40ef854171014657d419b3d4bf01951705854aa3cbbf8c51b90078d38b8342a5d149e3c6a86c04a8dcba2bbbb0bd9b591af4955b4d513918f4c35e6292ca768cca71f64b531961f4e4e515fc73b73a9acb8f1f1f61df17daff767e1f6d5f8b6dd8a2107674d7262ec1979a24b893afaeaf64cdcdff3ffdb0af81aaeab2742c11ebc5060777978d590f028e60dbae3d0f29ecf1e7706089979ba4b2691c2a85a64647afc6450cd1d801d4f25798a4b12ebb59ca742fb18186dbafaf26f430f2f055376d417573653a9a96d0f69c3d6da7915c329ed5e015f68bceb33cd6f45c4d685b7eb82d41a9d9defb26a6e85d0d8af655e9d88cb5922cb47fae202a1b061b0dea8d55401f820ae8eaa0526bb4156f8cda5f8153b8261d1512d65e722b2483f5bab10aa91a28fcd79aa4b1be7d93c7e7eb151067fbb571cc32a9470d5fa5d408d8dff6e01c5b6a7055b2b1ae8fdf8197bc2e38c7961a8c2f8dedb2782a28ced7a7c32bf68c7ac622d6227777f74e43c3d158e17e0514ee1b4c2f53a484e5b2848bd9a705ecd5c3c166e953d9aff4500a83d322179b22330f9079633ae637f7647f3bd7a9f68fa58cda30cf2c3d0d507893490aeb010a1d16c27cb4f83c50b1dc1c9c03a20c562c5b4d51791ba8586e4907953d630ced867bb1c2e7a030df6a924ada4d3f81793f0ab084552f1521ec056f0d08bb2d1d15481fb2bb2d90390e50787b3aa6bdd0e23b8ab59797332126d89f14b2d066325919b545da59b12cd435f33440ec1de9f28bc564057106b8f219136260212d365a688acabb416dbd233dc7e8f54cff6097314b3c0bd077a749fa5a13ffa02c25cd39026a9cdd9291754ef4633ed5e00282eaa6682d06233677a563c71a6a9363189993ecbf8bd96441f71cad8a5007e447021bbd3b3847e885712bbf1250f1dc938e135bfba4df571a236f2320efdee09ceb12c61ec7faa048df179c735d0c5635c6ce75d902dad8f7a72300a28730a7fd544163964880253e908e6d29f01199e99e319981260b763d5374b605743e18243a078492cec680ce87824467df50d2790fa8c11f0e129d7d4249e72580ce9d41a2b37f28e9fc11d0f94890e8ec174a3a9f07743e1a243a7b8592ce83009d8f0589ce9c50d2b91ed0f97890e834baabb1313a57003a9f48cfb138bba01564ac1bb800d0f764bafa2b1d9065761b7c39232ecdf3808c35292d10b43f951e5bdc05dd6cc6ba7bdb830e8da783b451e400935dbec68af6fe6028e29920d13930947496023a9f0d129dbd4249670928eccf05894ea3473519a3f37840e7f341a2332794746e0774be10243afb8492ce87009d2f0689cebea1a4f30540e74b41a2b35f28e9fc1ad0f97290e8ec1f4a3a1b8340e9159374d66200ceec36fa19450e5faba70671e97a35389b91877153b16ea0fdfd9a492abb48a8f4aea01d49e8e6228bd9bfe9c4d6e50c72143213d320d9c6e65f8e0376fb7a7a361be9bd1bcd29fa1ad0f74650f6c2323a4061acd87f06eaef378342a5d1c1096354ee0deaeeb78242a5d1810963541240e5db41a1d2e8740363541e06a87c273d53fd07a6bfaa31b6694323e01fdf4dd78a5a674e3a5dc7b3804df62f27615eb77331a8addf0bced660034218f8cc03d6f8be492a9b11ba85080db78bf847d308b664dee03a47635eb116b0c90f82ba5b90d130c8d86e413f8186e48741a5d66858648cda9580da8f824aadd17690316a6f010ee16393d4b607f57c21ebab1cc9285cc26afa09c4bb867c22abf317da70695b8c6f2c0eb81c58ef27e9982e83af048271408ec9d3538c45023f037bfd344864867181dfef80cccf8244a6c1633f8c91f90920f3f320916970c3506364fe04c8fc2248641a5cf4678ccc8f00995f06894c83472a1a23f36340e6574122338c5b7ebf0bc8fc3a48641a0ce58d91f92120f39b209119c61ea73e2068ff3648641adc48d918997d0199df0563677f83f5b8b13ef97e6048e37b9334b622ea6bd40c167263eb806601bbfc2168841a2ce8c6083d1810fa63d00835d8a83446e81840e84f4123d460c3d218a19300a13f078d50831d72c608cd0384fe1234420d76ca1923742620f4d7a0116ab091698cd02180d0df82466818974fef0f08fd3d68841a0cec8d113a1210fa47d00835d849678cd0d180d03f837d9c97c13adfd8715e4780e9387fa5636e1d9d8298f6b975c6361b1f08e8fbdbf46c26b1fd4429ef5d2ab53fa57398e847691a59373679e11950ccff3149641352f5d80fba19643e2bde8bd2314dd1dc0e0a80c47f83d3d3392094d3139a80a2fd5f90c80ce3f48466804cbae42d306486717a426d40a6152432c3383d610f406624486486717a420d40664690c80ce3f4845a80cc6a4122338cd3132280ccea4122338cd3133200993582446618a727b40264d60c1299619c9eb01720b3964932d5ced9356897c61a937f80c6646d93548a43c0c4094174d704ba4f0215991e67b32a06b161dca6623f30f7a38e4962459f516c0b750e5b32580d193b6ca91010593728441ab4486344760144d63349645b46643ed77c32292113887b6827dd13762eef82a3bded85f6bf1de8d1f6b5d8862c3247aeb1735a288a20b7be4972c58ab7aa031889ac7933d81162acd3f80a50db3730496d3b09b54e2731256f0939806df0b32ce6005c18c7db3380ed364c473895586c1ac64ebbb180ca46e908f34538e5ac80dfbd42a8fea0c26a6c924c7747907ee91fb534465f5de037f730499ffad957619c2adb1db4949a04894ea36d786374b60174360d129d7d4349e733a0e26916243afb8492ce3b019dcd834467ff50d2591714f61641a2b35f28e9fc0e5867cb20d119ce4530cb009dad8244a7d1c583c6e8bc08d0b96790e8ec1d4a3a8f0174ee95ee9ea5e9f6d5d9737b1483a1bf15f37d8f97b156bcb3d3b1d1f599f4c42523d4568006666b93d4d29b3ce2ecfb1ebe0eb886c002db04a9400f0ce5e2814c100ced1d243a8dce463246e71e80ceb641a2b36f28e9bc1714f6cc20d1d92794745e09e86c17243afb8792ce5f009ded834467bf50d2f912a0b34390e80ce7b2c043009d1d8344a7d16dd08cd17902a0b35390e8ec1d4a3a57023a3b9ba4b3311167b9d06557693f46d9d8805a6d10697649c738f9ffb57726e05156571fbf83a55a1770e1532bd2820b5f14916c64515cc212882c0904b08a8a210b1948424c08022eb8b66eb556544445d15a97aa75d78a5af7ddaad5566dddbbaa6dadda5afbd5edbbf7cebccc7f260924caffce393c95c72c9377eebcf39b73ef39f7dcb3f44c1a35861c9c0f6793394c943b9bf47372c7a1c3b80cdfccd3f2ccbe6c44acb4cac51300eb1e2162e522acf175841e686c46b22f7886f6940252630cc7dd2091c3b2195b942e91c41c361aca4f40fdecc54439344326e798ce81843d0f39244a2dcde33904a6ff7026eadc4eeaa93b90edbdf0c697d9ebdb7ce10aeaea4babb77030e0df9b893fea65546266fb07dc8bd798b9e16c555a20e26f4c0ae18810a7469104b77ba975e65579125efd46a6d24e0095969bcd6d000e375b655af6a180322fa44a8b276d0467ead77a09ed7a6d1d9f1ca0d20e39cfb846ab0bb9523b9e85ba02d6d47c26eade97ac2a55598bb61fc86e8134a01a031db607a085d2806aac45fb296c18464a03aab116ede700b4481a508db5683785295f2c0da8c65ab45b01d0126940353aaadf83295f2a0da8c65ab4ef03d07da401d578acf72100dd571a508db5683f02a0a342b84ebe5c5f58a2bea7f9551f02b4fb49454b2deb4f43fb8c49a1dd5f4e4d1c8d0ebe3f82941ec044d9f3ee47445b94d6fda8093c4e078648df2edea8a24d3e85095d965d377362a8260f95e808d995857225ec8a46cb3291f255fa3ee7c30a39461a508dbecf66003a561a508dbecf06003a4e1a508dbecfb900b45c1a508dbecf38001d2f0da846dfe73c003a411a508dbecf1a005a210da846dfe71c007a9034a01a7d9f750074a234a01a7d9ff500741213687f13e588042fb8d6cc8237cda4e04d66c21b6cbe6a1333a26cd29a982d825dfc946c3a44d283c188bba3d52c947b816bae928912fb7035794fbc1ba8c5cba2f66666a7c05a5915223d3101315149b9ab830bdd11cbefc0ea393584bbb8c01484573e3477f160581da7c92d404d543cb4893e07d05633d1ee66d2a3949beca5737d3a8243b7b14728cf05ccd34318f3dde9f7cc4c5097c7ac311bb40db4fc0c1995c3a6fbf5d5c5de37f8e19ab906d4f52cb45300edcc10ca2acfe7286d2c0d754f07d3e9603915e735f6429a0766d37742549ceffe9838bd78bfc6ce865530ad0f9104536367c36900f35049303576361c0930674982a9b1b3e10480795808475d64d0bbdd509da932896e1d11c475d99e1aedcefdc1903f9c89d7b5ca1ae303be9aec85faf6ec7b82ee3e228407a9a73b1e6a25509adc0d83693d5b124e6a62010d6725e03c52124e6a71401acea9b02ad648c2493dfaa5e15c0638e748c249adb548c37919e0ac958493ba91a4e1bc0570d649c2492d4a4dc3f918e0ac9784935af69786f355c0d9200927b528350d670c0ca5b9fc838b2afb67772e14bd7cd69ae9d2f235069a14d04649857f751605c8016f7b5c12ce12953877029cf324e11ca912e79330d9e74bc259a812e7ed80b34912ce629538bf0e93bd5912ce229538df05e96c9184334f25cef9807381249c052a715e00385b25e1d49990751ce03c2a9b01dbe9139d982c483b29fa1876ec6d525016a844391e76ebed525052535869283707940bc344c165215f881686f026ac8f1d2192addc0b3778398cc66e495ea20f5e0ce02d0ad1a123d7ebeb7ab3b04b175c02ee4285ceb6e9b0c3393a442b9eee8d1e8c61c71e06c420983fc74858af03ac8b4344b3473146890a487193d9df08d58dc6aa5ca5a06c968498f03db326f5819c09b6e4522920354ae48100f21829208991c234902701c863a580249e44d2401e0b208f93025263afadd500f27829208989523490e702c8655240129d6934904f03c813a480d4e8b4b81a409e28052431f38c06f2050079921490c46a9a3490cf02c893e53414d398c03711509e12224dca5db2fec4d291cc9592067331b8304e950493a8bf69309700ccef4a8249b42a69306b01e6f724c1d4d884b109609e2609a646057404c03c5d124c8d19e4b301e61992606acc209f0c30cf94045363067925c03c4b124ce2fe8706f31880f97d493035d6833916609e2da70f904627f00780f207723ab01035392dc86005eccbcf9155a8b9586507965f826cfe501a508d1d585e00a0e74a03aab103cb930074b934a01a3bb03c0540cf9306546307966700e8f9d2806a0cf87f0e805e200da8c60e2c8f00d015d2806aecc0f21800bd501a508d1d581e07a02ba501d5d881e509007a113b29609c5964eafd2d56241d2271fbe41afbdd3d8d068f56a9dd95f888e05d2ca74508510e57b350ee09e1d69730510e3299adba7b5e3a9ca8d369a5c3cf04195dc504bbabc9ec2690681d526eda9297b8015dfad4bafda01a0f3b3ac0df7469a8de2cd1f7c4ad4c329ddbdd90738478e5cc40295d16224708714eb37f7428ebed4f6ed0057ef04abfea2e518df569c0ba3a04d66829484cfb44365b8519dba5dfbec81472277f5f16d641a0ba2e97d35d40e339e781a0acae60a2dc09267e946559ed076bb5f2e90a9939999d9e24a339dff20b40fa23b95d5988d24a33ad5e03ad7f65981662b9198843e4a3c748f8b6017c3f0e81cf75420f8e8fa6cd37077c576573f339d6b86e6b7392c7c5440d3e9485f21c40797548c3c8a54dcff409d41d1e5ef77b7a22d6d52cacbb8361744d8882135998de34e57206e8ed6b99f0dc0295b9799cec8d9d46fb24623d579a153904d0fd444ef39a3c95d172a7c1da789d24981aa3e54e0798d74b82a9315f6829c0bc41124c8df942c701cc9f4a82a9315f6801c0bc51124c8df9426d00f326493035e60bcd0798374b82a9315fa80560de2209a6c623b47a8079ab24981afde8f300e66da1aa15c64de7980ef7b700bb705a84c74c3832bb5d52eb9a12a62ea7f92c478147e80e49384b55e23c1270de290927d5d2a4e13c0c56cd9f49c299af12e72980f32e49380b54e2bc1270ae9184b35025ce7b00e7dd927052ab7ad070fe0270de230967914a9c6f03ce7b25e1a4e6b2d1706e0186d2cf43841a9498a83276e26037c82e88763efeb949e1bb2f9b116ee919171a4be636c286f2fe30412f599044da449e0d92f880946e2a54ef254d12df0315f3a01494052a5196807a79480aca7c9528bf06281f66a21c607fa9b2bf741817eaef866ab197379a36af7ae266a9f761c6fd6ffad6c9beb04e3ec2c4f86dd33990bac23ea5ccc7adc57dc25f991dacce4700d724c304eb8ce63c8aa300eea352a63b35ba8836dd3f0125f4981494052a51ce8295f3712928f355a2ec0f289fe0e74c54fba7779d7832dfa31e6d1fabb53f27062eb7dfdd95c4d84c5a3aca8eb0763e19a6875f7186b406d8ffd024f334d83e3ec5c4b70de8f50a93c8e299ee337ae7abd6dd0300e0d321d2a15279e6332d8d31f6a6ebbc4d197d1f6d2f6eb44f5ae46dcd0e7f664e35dd6967e51702da5f48454bddabd3d0ae8155f399309966a5e157cd588c84af00accc6799f806c3aab9eef4fc99fe6bdc34785dae7b3f74054cfce7d87bf675599ed13ba5a64b55f42161dc05acce5f869052c4985841abad0d3ad15b9bce299278accab84a1e4bbcbc96d93b881b6a6bb0ed5852ba181681e7a5aa27ea7e89a69e7e050bc00b52d1521d2434b4ef83e6ff15136d8e494f4d756aea683bf9ebbdf32e318cbbfd4576885af08d6e5c3d569f8245e2d74cdc433cee097ea57575666aedff096f699d1f2aaa9394a5fd3f2f6b1de4f94539f5e2357616fc27acba2f31516e911ca0c54b2966aceb93bf61207f2f87b055bb0b6518e315541b779d9cc7b255778375f237d96cc658669fd8e6ed532ac8359b9040b682d1ffdb30f120f9e177f6cdace9fc3cac81af84ae6ed473db93a85e6896e7bd30c55f0d9190955e8b2ba16e5227f4ba5d24b9a0765e0b51de1461aedfcad40b760e807d3d54e5cdc420dd558a0bb09ed28ee77685f5f40d26ce6d4de4689eed1f702f5ee3253610425aeee56d20916fca2907a9b1c2473da07c8b8972975ea0acb6afe90659682aed4f911ba49d6b7f36b10cf9dd41cbff2e4441fdc8bfd4ea7d488deb94598d79ecbf03a0bf0f73545714dea0a7599dc300df1f421dd561e0624f3c9e7acda54b40bfff3184b9d4d3fe19a52a1be67c0b70fe4912ce129538fb01ce3f4bc2496dc14cc37937984f6f4bc259a812e76ac0f98e249c3a9b8d7d0038df9584b34825ce6701e75f24e1a496a3a2e13c1870fe5512ce0295384f069c7f9384335f25ce0ec0f95e08371d0634ba5d527572c7a47727743c20fc7b764e8e12d17605f6abdb5cd6acfd3edd0e36dfd4fbad26513adf67f99406c099e6fb4cb4434dba4f698ee97cf4d69bd83b7dee927980fa0329495f548d4f0ba779113c4f1f4a4149d5f63494db8254fe430a4aaaa6a7a1fc02a4f29f525052f7efbcd22b20951f31510eecc2688a7a09bab3f7cc5c10cd66d4c9e0b2fb57e88e6d9920c7785dde12c632a5c9e9fe80f4e31096e9ba9026e2466aeced05ec80399c857619a0fd773657d3f4734e8d0d23668362fabf505bd0c4f9bc1b687172926b6e80f7924921fc4f088584e10d5db7660cd6748c067500c8e527e14a9fd71957d726d5ebba3d9474d2d4d01a582b3f0d35c1b1176b8d1f50b3262f06849f8548367008ebbd8de96e35fab3f688bad7609dfc3c6c7a61d7abe4f8e41382ad96e35968f301ed17523337a94e109a6bee5d98fc6e6e88444b758ad0d01e06686352d152bda034b437c082d0878936d2face9fb47105801f00083761224c95b8ca42895f5a9d8652c0f73526beed40029bba70c9690ea3bd1556c8be6164b030c3e1a1b9ccf42180efeb4c7c51ee5bcf7238f25566713c08137a53493035badd9e02989b4982a9b14febfd00f31b92606aecd3fa00c0dc5c124c8d7d5a6f06985b4882a9b14feb7d00734b493035e6b7dd0830b7920453639fd69b00663f493089a5d268305f0198fd25c12c5508f35580b935dfc5b6ae488e2c9540a39d0aed0268b761a2ed79b954a2bd492b973a1bc2b9b665625c7f2c4762a8268f92b843a755fdb804ceccb763a28c8a00f4267788a88a68f919fb80ff688034a044754403ba2f00fd1f694089ae0f1ad00200babd34a0447544035a044077900694a89468404b00e88ed280125dc734a0a500f49bd2806accc2dc1b80ee240d28d11d42033a02800e940694e846a601cd05a03b4b034a7425d380e603d0419280e62b35ec8b61ebf92d6940356e3d8b00e8b7a501d568361502d0c1d2806a34ecf300e8106940356e3d7301e82ed2806a748e0c07a0bb4a03aad16cda1380ee260da846c33e0780ee2e0da8c6ade710003a541a508dce919d00e8ff8688404e54597014aafd50ad4673eae054d868e630f10d365fb5192471bad3920caa403af7c8e6e1717a0a21d19c5fcd425908e7f07b865839a36a5f0dc91891ba0ca4b87a6aac537317c8e6b0102ba7ab1f1f3c7f8816ccf01f93c2b75788e4c0ce2b674fd203891b4d5a56d11d2099c343442ee5ad8db27305f9b100bfe6eca2974142f7962ba11adbe5de0f123a8289b6f7fd0d343a938781159a2b0967894a9c3b03ce3c493847aac4f934aca3f9927016aac47927e02c9084b35825cecd60b2174ac259a412e75f403a474ac299a712670be02c9284b34025ce1580b358124e6a2a170de78980b324440d10ac3d37cddf44876932baebc85683022a6542ec6f528554025700a1e5bfcd0209dc27f41ebdebaa732e27aed9beea02ff5b8b974ea2ef3d1623a1ad0387f1be4cb451575737b9c7da8b16d871ab0cb677746d4cdc80357e80a526d5e4b13dc4d4a779984681f48e0aa18eba5346a3ed531718971957e31d77d4be84349cbb81c4ee270927b56b260de74180737f4938a925fb6838a780cff3004938a9052e68385b01e781927052cba0d270ae029c659270529b98d070de0838474bc2496d914bc3f908e01c230927b50929ef6413708e958493da229786f3df80739c24af52a9ca38f9a1e010299784b34425ce1d00e778493847aac4f9a849e19c200967a14a9cd703ce0a49388b55e2dc0426fb41927016a9c4f91648e7444938f354e29c0b382749c259a012e7d98073b2249cd4cac8349c4b01e71426ce9d4d7a84bce3d0615cf646668c7c67cfa7beddd16f617754c9c4ba4706d6567f96546779b8ac8de87da6ba6de18be14b95d99fda7cfa0c3531e1ac4d48c0c780dfbe8a093c6aad576bba2eb09abe15d577323f108ca9a9524012e3446820770490d3a48024aea53490fb828aaa96025263f2d60800395d0a4862c9001ac8550072861490c452013490e50072a6149044339e0672735036074b01492caf4203792d48e477a4802496a6a281dc1e24f21029208939ec34905b03c84399207730eb7378a45b921a4da02f00e62c4930351ae6069c1c87852854d1b31d8e46b5f328c8e5e14c94434dbabf688ee99c5cdd9b3ec234d4b434ecc3c15374041375aec9f4787607b2fb6eee9de3ea0339ea86b3f00f04fcb343acc03d0fffd6e7669e042bf0919260123d9f34989301668d24981ac3c3f603987324c1d4789a7400c0ac950493e873a2c11c0d30eb24c1247a426930c700cc7a4930899b001accb100b341124ca2479406731cc09c2b0926d1074583590e301b25c1247a467929860033ce8439c8742e2030c1974c2db75fe31e639d7dbf0bfcc02e1f3e4851011ad8852605761e3f966992bda0d6a76763e5d9acf584a5d5a3dd14b0ce0f1171d79d9b0f87a377e6a2556f1805d3bf8989332aa1eacaac6c3cc52ffa03be6626be7efeddb8d572bebfcd764f61aeafc3e09ea4cff3390026724b087f7d775a3c7d22134d759a145683142e60a2ec7df3329de527df86039056694035362ffb2b003d4a1a508d8d775e03a06dd2806a4c3d781d80b64b03aab179d99b0074a134a01adbebfd0180764803aab1f1ce4b00749134a01a5b43bd0c408f96065463f3b25700e862694035b6d77b15802e61028d8a552e348df6cfedbd8a63a2e66ed2f6f33700daa552d15293b669681f3629b4c78438f0e899cfb3986997d29c25ff02393d56124ca24d4a83f931c03c4e124c8d6ebcdf03cce325c124ae993498ef00cc65926012ed501acc3700e6099260126d501accb700e68992606a3cbffc35c03c49124ce2fe9d06f3458079b22498c433241acccf00e629926012cf8f68306370c2796a88c3e29e65ca692c17f03790cbef325146ad49bb0319bd536a1062451f12c6f99039f4bdec862f24866af22889a63aad0ff14530b94f93e5e5d4d9eef17298e2a74b03aa317ce12a007a8634a01ac3175602d033a501d518be7031003d4b1a508de10bab00e8f7a501d518be7029003d5b1a508de10be702d01f4803aa317c6139003d471a508de10be701d01f4a03aa317c6105003d970974b0e9bce94c9cb2579bb166a2cf2772d592138f61c65199bd83b8a12663d3728b16c2467439132f36d35de4d35f5c67cd39c93dbcab9b4c4f8959cd82b8cca4209e1722a3a8d0630c9c51448bf52801193c3f9b7ea54afb9479f62757b99bea57a249e20870d15dc0f7c0d7fa1823f7e2ee46cbec5396d89f6a379274ada130ad5784c8bbc43ce1ee925be9d9c134555302382f64e21cd805cee9490e95a6c1a2adf18357fb17680d0175280bea670075659864d6bc8d48f55c00d6e5452122383b5b973d89e124eed56968678056bf388456efd961b0c6f0997130c92f0951b0e2cbc419130f3968327a0d805d25152cf1388e06f60a007ba954b0c4a580573c15c05e26152cd11142033b11c0ae960a5663b9dff100f672a960351a582301ec1552c1128fed68602f04b03f920a9678c04c03bb1cc05e2915acc66cb97600fb63a96089413b34b06d00f6aad0fe81ae2bd24ff7ce16b7d16df0c335732dd9eb690617b8aaaf0e71b087eec029f6fb62fb93bbed45494feb422fab2da63ce9cdaa0fe118a4c53c3f0c9ead6b9878b7b2bf4cf3e52cdde968a57d9a93d6e8688f068e56c472104cf96b43785447264f449b2c896067a1b4157325e0fb09135f663fe3b8bd899980b1fb833de2f674350b6b0bac96d7c9f1a66acc528a83845e1fe258afbbe3e6ce0d5034b640190d927983249ca52a713603ce9f4ac299a71267239c42dd280967be4a9ccb01e74d927016a8c47903e0bc5912ce4295381f029cb748c249cda9a3e17c1e70de2a0967914a9c7f079cb749c2492d3640c3b923184ab7f3fd4729af50d72164596a3ac16b1f6d5278ef60e2ed6752ee39b77b6f0ae502a149e6a9e07abb3344198cee267afa5e9d6a22d176ebdf8469fe33493035d614d90360de2509a6c6aa8a1f823e5f2309a6c6aa8aff0098774b82a9b1aae29f00e63d9260aaacaa0830ef9504536355c5d701e6cf25c1d41816fe06c0bc4f124c8d55151f0798f74b82a9b1aae2731ee6a67d33062fef34f818ef8870ae885a13c55fb4dbc7c71b975258ef41d4dadf2799b87fd69116c72cfbaf779fc0e1f65f578fc762fded1d8d338bededb947dd78757eec66fb577767ed2637d75ef2801388ad930291e3cf48cb2c7397d838cdd4fb575f629fe7eeb9ce874044fd3d3b3c921c5f18aeca3ed6615c90847b059726d968ffeade71dc2c85f8939cd8669e53bd599424e000e624ef759149245b76956299e3715725dd3b393e3423fa2d0ac870cf9be1ef22c747208cb53f35f83b6b32ce9fe1eeca51e8f057bb315d42e0242f5bee4e5cb7d24a7ff7f5766c7745ca339213fb46f2dac46793f804db9377d27d90484e6ccb4e7f779f69a2236a4e6c0b3f7f16f877db6059a4124d7362dbdabf25de4fead114a5a93e18a0c3bf46bf2eee6db2fff41aedd87549eee56b3d3bd12bf4b58f8e49ba26dabd58c762db2425d95d9118a3c68e50e3bf4f5ffbbe46e4d9cb6245f64b224a6eefb5f17109c96fb6ff12bf458faf7f4c27c7eb1eed4127acb1ae57afa60d3603d7f78e128b867b7e83f789d5fb512bd6fb4ed7fffeba9fcd5baee3531991ef3e8b8df9fd3fe43ef73ec9cfbdcf8802f77ef33680ecadff8e1ec657ded0fa327dfa8997e72abfa6b7fa2bdd6d7e1579dedcafdf385edcbfee884299b2bce1defb23b886f51931f2cbca72efefe851a62c27464b844e678c3dbe07efaeebcf21f33da7ae6a4d6afe481650dbad9fc4206fe7743f5a99fd6dae7faf713f6ab389fe733ad2d9d26e097a8cc9730b58f0ebd3e2fffebb4e38dbd5ad138fa74da55c37959ef8af8c6f201977ff76f06238c33e37a1319dfdda667f76e37d54d1c7f4fd7f9419c37856380700 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/86bac5e28acf55745bef8956d6209da4.asset.meta b/Assets/SerializedUdonPrograms/86bac5e28acf55745bef8956d6209da4.asset.meta new file mode 100644 index 0000000..7fcbfef --- /dev/null +++ b/Assets/SerializedUdonPrograms/86bac5e28acf55745bef8956d6209da4.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4f3ebafb9058f8a4c980a6006f2527a3 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/8732b730b248f4344a2839981e1ff9f0.asset b/Assets/SerializedUdonPrograms/8732b730b248f4344a2839981e1ff9f0.asset index 17e41dc..cf5c8b9 100644 --- a/Assets/SerializedUdonPrograms/8732b730b248f4344a2839981e1ff9f0.asset +++ b/Assets/SerializedUdonPrograms/8732b730b248f4344a2839981e1ff9f0.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9ceb53134910c06703210984f026e00b7c82a79228eadd799e1e0f514e544e1e5f2c0ba32c5eae8250095a5c5dddf7abfb8fee7fbb2aafbb77d6743633d9ddb0138c6728b2bbf3e8e9fecd74cfcece422c27e0635d85af4df15c2c8819b121b6c59e7807670b70dc851fe7ca4d5f156538be85ef02e45d15933e35f133658dc1f7325c55c401d47c2fdec0b148f96bc286f365a86bc315a6eec0af0da5ac4ea8b42116c533f15464ad111f119b54a922d32cb4cb4ac2f7bcf81d726d520a1bc9515616bed620a74279bba0b45bee85784966ed42de1ba853162590f99a24264b314127c2390c8a4f9722c5cef1989547fced82df71760d96c516e5f9a83cf630193df29892754f786477b3b2299686c798ac73925de3b143a69f62d7a087f597bc1e63ba7a6d49b0b42e96266da1b4d30dec51e9edea9554a4c5a5cc33ac0d9e3ee19cc75c5b5cdd338a36fb585a86a5e131edd1ddad33c0eaf4b3343cf6ca3a934c064f9ff0c81a66d7987f56da81e9f18f1f3ffe2b6ac7cba82c77cecd8f5be4098f606c16c4bec811a4cb22b8cbba35fd9d95c64e4c2a3b45cd1e805bec830085c76c903f1e88597143e931e3569ae9bd40df05285124a1d898a7897fea9a40e54af0633377af40fa438a16e8f045c899112b70c45aafc47570e0171e299bd06c0942862dd6e17b9fe4bd02b5eb4bfa9984a1c15be739c87422d72ea4b840f7e1ba441aaed1f707d2d426ed9721ed80e2e83b88a4f3703ca4d6ea6d2fc3b9aacd75894cada33a80e9d29d30e976d3225883dae7303e7ced9163e9110ad5e7a51b76e628fafd5dd7135f193a410683e9b29471dd09bb356937440e2fade77504c3db586fa17a7cfbf17ed9800c7677962ca8f6307ee2b566cd8a1c4dc5a77ccc6a0415e54d5ba375121aab1f8f77e651492f7a4b859e6e13d65b881ef3f6484a01ca86c78f50af78f1d7b1cf63b104e11bab33ce5f051dc2980a2186676bad85089f8186bfc9081f1e20aa7bcd0350cd2f45fcea6f2cfcdad7d1eb50d0cb6327752bfb34e5d1094b6a2477aafa85ee10b78cf6cb06a439b74b0f28b74873ac13d1315eda50d661d4a864e3feea09dc5f69ea2f9c98a2d14bd78f7115edee567b8153ae48e5c27b416f60aa198d17f8b5afa3d7a5a2472bcac2673056dde575f3e3b52f30d97e227b31f0780da29b8e7a42157bf07240379d7bc34f5c1f7e92aa2ea585e72ba35deaae16d76059f018f20a50dea65b4f4c5f058905681be5cd510bd515666d8dc61d3a18b84387a8432f08119966baee4ca988a34f5baf3f2be2ee900d4f7d3830f511a27ea909ea8db4d391efd639d268048ed4a3128edd9a55d1f00a1ed10b4eab04e3201a0b2238ad17dcab128c8cc68308cee80567548291cf892082fbf582fb741d7832820eecd7e1c065d09447b885197c544e8a3f445efc198ad380aa450cc8a783704ae9050fea389d8980d3904ef84404c28775c22715c2ad90c24774c2cf46a0f9a8ceffcf1dd1ffb33aadcf2bb44e86d47a4ce7aa178ee8aae33a6fbaa8f2a639513bf3559f12cc882df8d98398bf2556688eabc04dd5afb4fcc51c752d7d7a6d4eed723a8cef9ed0d9774965df4b219433956e7673acc6079f0735b9154a0f23690ececa94d67ccd305c4eeab84ca9b82c85e452d589136a340ec2d91cc6d2533a4ba75596ded158ba417777255a1414e53d1c6abd0c674ef5a2d8aeb3903fc6886e4c9fd659745965d15da15bfce062c65df834d363fe52c358754667d5372aab6e37e5a96fa555dbb435b12f4b3da58d6cbbce5abefc0e63c984ce922b3a4bfc493afa57a4fe0732b591c6debc4d186d3846c35832a9b3e4aaca927b9ed9816be3e8bf442b8f5da8e2a77b502f6ab68fceea2cbba6b2ec7ea0796f0ee86ecb08b117c9bc57cd0963db399d6d332adb568e18dbb157b057a38bee7e335a027e2c0bef7e1e501b6528b94aa31baf2a22470b9bbca8ae56fdf6c751ef5d1865188fd7a1e5d71497fd77cbf1e519dd6ef98e886ae3d4cf0a8734d6dfa1dd7577334e659dbf4dfa4de284b4c89505a469a5f7a5599ae7bd1acbd182f34a93a3c95f0bdcb0ecea508fa1f08f841d01ee8c66e1e2734b3a864d4e851de2db8adff6cb3512e0ee2b46f09a080e2d277c96e5e2013f89782c8ff46f9844d44588b07a018ab4079c9518c249c43dc2972273c4e6f641ea43461f05e943506f8fe0da60842784d0d395cf4df3591e02a6356e345d3776aa33937a46c9e3cc74f37f3e69e47150dc4208e36e8c252fbf6dd2cbd3d4534e1f3afdf58e8cde02aff3b47594d7295235bedf1fc49066fcbf8b05c76f4d62eb96d89c86df4321bc05cf9b43963085ac8321fbee7846da4d73d8d2a6b0a519b6ef4d62eb91d8dc45b9fb18cde0581b3105ad8741bb733c63ed7a1b8eb54e86ed0793d8b0e9da71d67e636c94c1ba6b7a0ac02736879e27dcc690c54d21cb32643f9a4496946ee908d8371bc58ce11a66b8ee1d4f149b35876dc814b624c376df34361ec5966863a204aa18744e63b7b4630cdb4fc733dadaf15623c5b0cd99c49662d8f08fe80edb34aa09066cde24b084046613b0f68435c4602d9884d52b61bda1a709b59b28edb8dab418b84593e0dc05fa5ecd1e9941642953c8620cd983564432be416570b964cc39130cd852ab81b56334eb66c01eb61a98c15b5963c04618b047ad0666f0b9ac31607d0cd8b24960ee0a13b71dde8233b667c81f60b87e36894b7fcf7fab0d974a1986ed712bdcf2c3a7b7458cce941953c07a19b095560333e898c680c519b027ad0056dd426dcf5b8b4106eca94960eefdfe8ee06fd2b5e318eb175fcc3b0c799cc89e899a5706748fcda71b3eb7735e2018900c70927a226cf28d6deaea027b9920477f3e527d1136d88b498d65faeff4afa299967a749722ebbb28de5e50597a943719d20d7a25477f6df325dbff8b70fe29117d70986669cb76037ade116e830794e9d16099cac4ff03d9572e3e5b4c0000 serializedProgramBytesString: - serializedSignature: ae657bc0c5feb11ed76ee034a2cae888e700e2e7a3540914a81d1e08d9ee5bb88d91611f57e9f53a54a454ce4acb76f5f2666b35bdae4a78f2a9bb67cd657401 + serializedSignature: b96aadc513c15a891fa2f703541e5b7b7b10ace6ff9458d65624910ab5b0081532be66ce586327adad495aba51a2bd3c4b438b44d7edfb7869a87786dea8120c programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/8738b1b65f9c8b740b34ad9cc92ed876.asset b/Assets/SerializedUdonPrograms/8738b1b65f9c8b740b34ad9cc92ed876.asset index 2ea4bee..7709590 100644 --- a/Assets/SerializedUdonPrograms/8738b1b65f9c8b740b34ad9cc92ed876.asset +++ b/Assets/SerializedUdonPrograms/8738b1b65f9c8b740b34ad9cc92ed876.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5a3d501b47147e2738fdf02720c640ecc4729cc4474c381932ee9026601b93f14fc2df4cc664b0309287b12408120c4e951469dcd0a4813629525127451aa7c533e9dc6426e33a699d3aefbdbb8345babdd3c9ac132996462bddfebcefbdefedeedb1f854cc097368cc902ccc0248cc03cacc01a14f1d7247e17f06d3d39f99fc2067e3fc0348365c390f06949af8bda00a6d3f8548232b6dc84fbf8bdcae5b390c5dfd3d8368b4f949bc34f166b69add8681eaec21db80dfd5a9f8f88056e54b2f334b24b8b623a018fb034cb4a1188c945fd98cc624989cb0aa8b453ef2e7cc16615b0ec3eb6d9803cca5c668951a60b3fbac6daddc0fa1958073344f9430168745afa1348a2c321009b49822da3aaeb28c0c58a79e6a80c6330ea6ac5a0d621e83dc969066bacb2d0de6a889fab2048b93cbeb3820b4a983fc51e2427ac62c908dcc46f6a750f2e23a9772ba42c206c1edd9885394cd759de3d54bbbaa69f49e4aeca363328d3ea4d05cc71085dc7e73c6b38cbe9166b9a65eda731afcc7dbb88bd7b02bfb719addaf60dfced86396753e6aea37ba792e55b5dd771d355b486b4375ba89bbdf6c8bfe111a23edc6b0fc35693c688f6b8ca13af39b426199d276b4bc665a64c3b96370a263d6a33550c06b7b1da42f7fe6df17d053ef2b4c59d1972f719b6e0c8c3dfecff31301dfded4ffdb869636086c9b4b33ea679114bf20ced7495046f1374bd35498a56d2afb9d11fa1ccd95748bf556f95eb0577409823d371076883f838873fb6f193b72b176d75f2f6ac48cdad354bce36a2ca5f49121e61caab03aa9fda32d2436ea4475f35e9feb38c17e9d143bb8e48076bf5e3c2604cc2a09f0e32065bdc1824102dab94c179ccb39643d7b8749563e888d09fc80aaf5ac4dd2d5e6e6e32be37cb6d684d4b05cb669bb3a03c796d12005fa785e4e9c1cdb4eeeed27676a91a35646e6f75717b92dcdee1c25392784233202d244f0f0e52ba1eab30886c9140ea32c84e2fc8432211726c6c2c1d08322c83ec9242e672b9b4836b1b1d083222838c4b21fffaeca7f1c4deee602ab13ff57c9ced0d04199541764b21b1378e5bb8438b3b7540c664903d52c8a1c5782ab1b833914ab43dbb900a0ed92683ec9542321a02a512e7be7d580764bb0cf20d29e4fe54860cfc3e9578fed577754076c8204f49217f7df1632ab1f3e4452af1b7f17b1d909d32c83e29e497e38f533c01247e58ffa50ec82e19e4690f5f3e21c88ec3292820645c06d92f85dcdbfd3c2d248121bb6590035ee3322d2481217b649083b542eeedeecaa6f508be358d7e5eb317808f70d1b7c6f1a78c21d7e4f19284dacf67285417707142d16d0ef55ae698e57f5af326c84f6b7270521b773f2bac0517b5cff1e98eb31974b3cedf26f92145c4b6c891854cf334d16c969e21afda4e85885ee1d7eb27666d7d3ba66abfc479246ca37a944bf2562afdc473eb7f4df3b3c7797606b5fb604c52d15bfff3f196a4f1f636086753219363d8a53a273b7ff5ce115a8b3be5c1f7cf9680db7c9b8002a8e72e33870ff992618d37762bc23ea302f1658e59622ccaa9d15e8b39fee7ebe4a38f51e315def194f01de1ce1c4a925f122ac93b25216f8e3765d4ed1b99c6a840e3799534d2d4b8846f02ce6195a543d9aba88e32e27455c48140dc3baa895be1a9d399a31b7be0b60ac45d50495c374bdbb0872ec591eb7c74956f68fa3a05fade55495f1fcf7b9bd8a8cc116aa2c902484c20f23dd503b8800fd4c03a582f373471dd0271efab248e76b75b4cd42667dcc002ea758d1e733b04022faa24f0bc1d73ad1d7b91a32e2951464636f0f913fb0a7ce9188c68d21224d5111c5345704820d850493079b284d62f37c5c0ee11681b52495b1c646bc1a25d4519791155e46902791fa88ecb252e5ae1454db3c5e53681c84baa7ba1185e9a6175d82e9037ac923c02cad8073e5b0d1e8f7581b40f5592462ba707e09c8a65f8e0adf1c3465ca06f44257d5ddce7cadcdc6280f6258d4c5d58a0ce543d5c8b5c5ce07ed7c8a4b508a4255592d60b950708cdb203e902eb26a009ee5c92b4bda67f4386e37637303c7abbe1739c66780436c37702326a386937021d281b018f618c80cb43a386559051e346dca8e9c4cda879581935c54bc3e77cc5f0dca459d7613d76bf2fa246b780f6c719d426c3df47576326ffa7e00a04bb02f296e97f31344a5d5b739fe1f227365e4fe22ececdd297b997ebf0f08ac97fb66866fbc7a0e2d6b69fa7a679f4bc253c0b77b0b235c8e9a5ff03d785863578340000 serializedProgramBytesString: - serializedSignature: 8225fc7ab9f784ff5a6568c9182c02f218b36d7d7800c3b7bcc3914f77e15ce795918e55e086f64b63bc10d3e12b541dbdcebfb794473f905dd1436703bc8004 + serializedSignature: 50d97536bffaad4dda25612835beb04ad43b4d645cede2b06ddbec25c386b0d77e88e837635d3514be785759884f4b8df5f861f6c3c7ef3845a352192f67c40e programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/87acd7f3c8b86d74889f4b52b50bcd8c.asset b/Assets/SerializedUdonPrograms/87acd7f3c8b86d74889f4b52b50bcd8c.asset new file mode 100644 index 0000000..7028cb9 --- /dev/null +++ b/Assets/SerializedUdonPrograms/87acd7f3c8b86d74889f4b52b50bcd8c.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 87acd7f3c8b86d74889f4b52b50bcd8c + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1dc5f1f8f7b9f7823bb6b1dce582244bb26cc0b857b02d23c9a6d8c696556c61c9322ac6a69ade4cefbd137a270909e92490041292908410124a2021a49184041208fc6ff676f5e6dddbb9f7ee9de669cfff9ffcb14ed7e666be3bdb5ba77ce1fcc4a63bbfd68932b148e489b5a25a348a1dce5f8b9c6383f3cf3dd3d7d78826e7b8d5f95de9dc9b2e7252bc093f9363c39ddf2b9cb366d1e2bcd92aaa9c639dbc5f2e6a9cbf5738efd6386770b5d6f95fe33c15ebe2bcb4562c16a562b518161b9242c43af952b3ba1603bb623d9cdf0bc51ee76e8d540a3e922f6f0d737e953b779ae5bd064769fddc7ab1519ad5e0dcab72de6912f58ecc2d52628fe97942fe21dcc360751ca28e839cff3dd5df9dd5df3dd4dff8f9aeea3834cde787a1f77aa2bf81d0ed3eef0f57c77f39ffbb397f9e84cee1dd3fabf311aebc4edb7c648d54c751ea385ac9dc9d86feddd5f1a014f6fac9188364a5c3ac873a8e55c71ca5ef9e0cbf3fde6514bb19c983e3bf913e63d1b77ba2fb701c17c2761d8e1f79c2f123371c3b5dafc2ef1d757d823a4e52c7894ab6f3cca073d4b5c9ea78600abd72ddf7c46c11f759e79b9d77aaf329ea38551da7a9e37f94ae27a3f3b0bae8309dae8e1fab6f9c62b8ae9f87fba7aaf383d531cf135ef9eab9d3d479419afaa4e37f5aa7ffaa6f9c8ece1d8e5d36fbc8d2e1fe8927dc3f51ef5eee72ecf2658f3dd8ff4c72672879676460c7a71e3b3e7575e99aeb792e950e5a7ea13afe4fc9dd8bce41eed5016deba2de7b4a9d1789d469dbe034ee95b8727a68d6b3dcef741bec5eef364724faf2cc147aeab0fdcc13b69f29b9f54aaeb67fb67b1ed39c0f4272e0fd333d723ff7c8fd5cc9d56984f6f1547a1ea28edabe79ea3857b4c5e3098bd5b5c3d4f170f7087fe234409ec3af43e3ef0ed5e948badcfcc268be27ac0f54df8da590a9df5fa08e3dd37c5e3fb33084ce8bd4b1579adfeca58e8b437cb3b7eb0b3d3ef0f8c2ac143297b87c7bb4201d1c393d75faba541d97a9e372c5bf8bc70fbaa4e107a97459a17411280c1cb9bd06a8f323d4f1c8445dc44a8f4e67b59f4eb14e4ae6d9e81c8e9dd5f573d039e8bac6fd4eafe794cc55eab8daa373299fce42e9d0b70ff28d74def3f3afa35cfb7a17b8b27b57a8eb651edd16c5f5eeb118bdabf548273e28d9b16e1ec6dd940e9aed5acf73e7a27338a2b2754c95adfb68df1a8eaec3bbe7a173b85f9ea6ae478b649f0539284f937fc3b755fadfe772f5ec312239ee99de85232a23cbbf41deebeabd6345723ea69f03dbce47e7707f5d9ab61d67d0cff96edff93eefae1789e9cf82b83f747f595ddba0f4e92912e396d6694cfc9d58bdbab6d13defaf75395ebd83d258f9b7a35f3f9d9f6e52c72a61ce672b1107151f9d5a61dbb747699e9b7dbe55ad9ed1476df7517139bd872bdd753a562312e38cf759b856ab8e27a863833ad6c79f9df4a2ba56a78edb956ebd4562397d1bba0ec73eeafe05e81c9edb1a973de43e756d8747575378367a6c37a5017e7eb6d37d76e23e757ea2cbb6ffcd8adb731e1d8e17fefe3b50d9d55724a61f7d5db903f4770bd294d7a48ecdeaa87c30d62f91b33c4f9576a7fa961fa7935c996de5775d4fd7f5dfb948f620a553ffb82e6d65ba5de81e9cabb29d6815097991af2edab7faa6b067307a0e8ea784b0dfef9e4af385aac3c40688843a8d3c77c27ee0a73eb2ce70390dd7e5e2bdee3b8374fc38d3bd3ff01875ae39a9ba6a6c609cf500dda6a0d3b60390ddadea1a6e5b52f5d4d8e0f8b598f263710e7a0f6cbad073ff5c24c374ff3ca483e9fef9eafa45aeee837459fb028f2dad1e5d07898474445c88bed3133d83bf7d7180b0bc48bd3bc413964354b8bce023eb6273580e7e559deff384e5259eb0d4ed78d8fe4bd5bd6128dc26aa6bc30de13b027118aaee5d4684a5be7f39926bba7f05d2c174ffcac4b01c52acae5f458425d61f87e5d5c9b6c6867bbeadd36bbfb0bc561daf514753da789d3a4e56722f4943eef5eab8d547ee708fdc4bd3907ba33adee023f72642df4cbea77d5db5b1c40e1489be0ee78edf0e7dca4796ca27bdbe3e4ce79bb788445fbf5524fafa4891ecebb7a97ba3e2e12f59c0b5d122d9d7513b704cb72bdf8e9ec1beaaefdf81e49aeedf897430ddbf4b24f8faf01c75fd6e61f675ac3ff6f57b926d95cfe06feb78eb1796f77a386bbe63446239648c1b3ec3b57eba1cb257f8e78d5f70e5e73eabce55192d96a3e45f8ecee138d6f3ddb1eabb1fba72467ca8e4f471af8fe8a3aeeb72e5fdea7bbaedf501f55cb1e7b907ddf3293a3d7ed8c3ff118faf8c8ffb5b9b2d0fa17bd8b60922b14cf2a8baaedb9cf533fa1a0e2b5de64ac5f531757cdcc36f9c9277053a87e79e8ceb3f55970d9e50c793e3f706eafa860edf3e488fa7ccbe2275456116b88ca46d7e3a85cd41d2a44922314d9ae4fac1c8e53eb29e51cfd4fb3cf35575d43ef015255fa79f17a073b8ff35759eebb9af39df10670fd9619b1e5a36bc73651af67f431dbfa98e5f57df992212cbfb53d47d531e91693936d37b954aa7a989fe23cf9d7018adeb0cda1737a7f08f6fa9e3b7d5718b9237cdc340f70df9d579527dcbc7aed8c122b18d40f7f77c479d4f57f7af52e7f99ee7f3d5f32a2f8ce5799e9fe1797e867afebbeabc20f179f13d2407ce9f8fdb16d3fd242fa06b9af7f7e37cc6a87253ac30f1dbe20722b17ea7cbce45eab9abd17b9881beafca58b1628f4d33d5f9b5e81c8e251eb9baacf89ce7be963bcba3ef0fd5f147eaf852dcc6e92de81dc453bc9828d3d7a79f573266ab77ae43e78e4f8ff12bffeb77555f474c9731ae47e78e8c1ce1ea9be313c7628779f81d82aec3718eba7f033a07d97efd534af7d8e11edb0e57efde9dc6bb73d5719ec7b6794ac6ebcab60f7c64fd581d755b8e0e43edb3206f81215c17a0f084f3f94a871bd1b9a3c3585dc6fa8930fbf65ccffb3725be3f4ef795fd541d7fe6d16da1486cebfab93afe82f649f14b8feea8bdaa4dbf573cfa2df2e8bd587df766a487be0ec72522318f5aa2de57f5cfd852cf7dddcf62ea4bf78b23bf52ef2f1389715ef7d7bc16970745ab94f25e53ef2f1789f9c872373cc6abf6fff17eed7abafd6d8547c60a25a345c9b8c047866aef8c1da164dc92a89ff8b5babf52ddbf159dc3f14875fd3624475f87e32a75ff7625ef00741d8eabd5fd3b3c36e9eb77fae8ae7da6d4637fa96bff0465ff045d3ed6edf8870bff7cf2b71ef96b94fcbbd039dc37b511bfa18e6f27ca4888efbafd18b547b7c5192de72d744fa719bf41efc1f99bc89e54ed897ebef83b61acd74e5471b3ad2c73620a6eef08633d66d2a88072de1589f59c3f88c47aceefd551d737df535cca3c1cfea8aea33ea65819ba66aac3a4d2cd744d95bd631522d10f2b94fd9fbafa4fd6638bb41f6e4ff12df55c6c2d7a4e7f0bf72dbdafae1d8dec5c87aec1f118a5dbdde8dcd12d77af47eeb1eab97bd0b7e1789cba7e2f3a87f7c6aaf3f522718c9896b711e9b45e7d5397dffee4f9c606114fabc18fe67b386c40b28e45d7b40cdcd6508f8e705dd5e927cf4efc66ca30305dd363ffee0bfe6eec7891987fe8feb54d1edfd9e4b29aa2c6ae4cd9ecf1d307fcbfade58abfa8f3cd22b13caee5fd15c983fbf7d1328ddfa9f4d85399f85d293f5539f44975fc9b9251a5deb91f9dc351f719c2b3aaac15ab463ea1eb4e35eafd0744a28fd6a2676bd1b370dc2a12ebde5b5dfed3677b64ebf7b6a9e71f44e7f0adbfabf33a755fb5b7b4c5d113900e75e81a1cb7ab771e46e78e0ed3e6b83e307d00f12dede38fa073fccd0675ff51740e729f4b7c3eb6433df7183ad78cb19cc713e578f58a35221b759fe51329fc55f7c34e47e7f0ad535cdba7ee4db429953ce3b597d4f11fea1b3b3ddc747dfac50c64bfa5649c2812eb19aa8ff5e01cf59c4efbdf4cf10d254ffc531d551b62ac49c97f029dc3b15924f87c4cf7a16adf6f1109e9b33c07bd3ef0c869f5c8d179ac0e975deafe939ef77621bbe0be6a77cbd3e36cde42f7d366db3526c7e92c1735a252ec14f9725010b406a53be45ebf997ab0bd1c7f04bfe067b2fc6c8bd8e3bc5a631af1be568ea76f1145a2d038e27d84ecebd75f5f247f573a4fd449a14fc7923ef14cd22740b97ae75f0d1aaedfec5c5f2647fbc380fd3ae74e9e58e91ce1adcd628658effc4b94b2cef96cbd5350aa1115ceef9d52de6647ede42753990443fbbdef943932dd99070dce150d74a7735e2f352c97bf77494d6ba4f62b9c6b2d721ec40eb1552c748ebbe5d7926d6f72fe367db3422133eb689e80405d77a739e8605aec5803dae74b5ffcbf10e9881001f4dd207ec04f977c997a5c941412ffc7d04d64a0216585923143228b255c2b14f9729c5d5912c1e036265b68f66f97778928f6b5c54c06827ba4b4201ec26f9ff2f6836543df9bdf35d1b422912fbb4f46a530cd0f2cc8cb953dfa414ce8dab54b0128eac51f33e1974301cbb388df7dae4e3e173c00bac9cc2f310064d37e8593aaad4199e75aa97cbd54cd6bcc1ae77aa5231e4c00d1adf24360e002e7ef6a99722e95e2eb9dbf6a9d7f49615b008a7497c1939cf9a632910aa04ea60092ed90151d123fa8e972fe41d4a3cd8a7810e5cb12d5701f47a6be258b5a9d54794b47b5679f2edd5171c5fbef7435874b2f192e997c8d0a99cea690e995eda8933aaff00b97de6d76c5c3057ecc0cfb10be9d4a078a601713c1ded9f66db8d728a5543acf0667088317a779931f33c07e8413a6568142d8d580b00010f6376825baf6f468050a1192bb9902a74fc764cc993937d4f087791074259d7ba06fbe1ad4b5bb9be8c961ae9b59e9e9fa62b9533138d2b957e93c5f230b9f701d67720be417e275ccc437fcc9427fc8c15eb246aa8324d509a8f61b56338a780f03f102f0d7c1063790699c37320ca423434f2a9a0d091bcd7a5192878695dc9b923c2cace43e94e4e16125f735451b39727e4356a24dbc9945ffb5d079779b63cc2e59026c75de3735cbf8479711694797036574c911a6c6a2601a51d1a49f29ece0e2489392dea03b900ebafe94e05121050fa0bc6d74586f1b68f23669473dabb7ad75aeb98d6a4be4dd3ad91293876a1ae52a644116846eea3756c9e52e5aa536fede7850dade38467a237480726b4c79eb01a610920eb1a383426887945f29745bda2269f5ae14566bf6e987528e30d498a4c316fa8647fbe9078df09df26508e4f97cf248e7f71ea73aec2e10135f4f25c8a7e4585add8edd255f0ea3991ee09b41bf374ccec8dd251d025a40c6c859a10d6293a850ee23e4d5eeea2a2e38ec9d3746ce9583eb5036ac9065f6adc25dcec67daf8fba5feabcd3627862989c6de67e0fdf5ba5d6ac719fe9a79e39dab952e73cb34d3a4975c25363e45c43ad0b7ed2bddb3b4113ef7d27d60d929f4a8de38505661cf82391c7d1bdeb413d9417b6fd41b4278c976963b6e222953e0e32e58d807b82085fe81d6c120e7c278ae45683cf9d9f24e17d68e14328cd2719343fa2a65320cd879a8443d8c340845045866194e4dcb092871b24e7cb20385364b7e86bee955ca6d2da52a7d67b8270bb93f4771ba5eb8246ba5baacc39d64a2de0ba2e14f87fcb3f439c220c19a2f4a22522fdbe557e2b604c7d2799444c9349845fde69d22678d2604ea0a6cbafdbc5864ac6465029cdc18694e6555332e693d21c4845d9bcb05176a4493244d97c83af1680af4259ba97aceb247d673afd9d51a6a441a671277768d2e0368d81bc5a3950c095b75ac0f27c274957ddee38f02ee53890b737c9bcbd25746200fd86a3bd6dae3ac336468742191de6a6111d38ada222c068932741710b666f24f56d41565126d6389237c96878a2bc0c94dcd0ad938fd6899351d923c9dfbad3fe7690491b28a2c11c909455f941b4e03194e0992105e75071bc246c1c1f6b920ca90dcc5d095bc21a47a93d3bacdae3a914f510438afa692c588a3a81127ea841f8b39d82099f484585c3d2f1111faf9e44099e638a63a0c622591bc971fe373a6fe4c8b23cc4fe1c9919c653831cd9a2d12433ece9e8f946e709778c4d103d27534e717858a7c8a5c26dae21dc3e0c186e5328e1f30cc297770e267c2a1576f34d6107b903e41b502cd9a6f2b6c4d43047c068a71c39c0ad55762b54cb906b96e19a234e7172ead39c238c00c891f940bdbc972357ab6d92696d90309d46e9bfc0a47f2fa4ff1aa461902f4ea7d2ad8586742b1630dd3ad8247cb0508bdb990a3e30232878c1278fc2b6c4846db4bcb15b965c5be5f3e5d2016adacacad5ed9441e61bf4ca975543de66c9544517a82dc070c066f977bc8802df8e0f3d0953f0829968de8297fe3117bc60ae99db50920deda902560195a82e3724aab12089ea0c2a2eaca0e2c21119c5854293cfc946839d1dea73748c2a93b221e6852ff0c3ccbccededabfac3616a7e159eda5e334d9040acf572972cd909842eff016b4ec786b5bcb2651375f29e3443635a7e24511956baf32e4da4f750d966b179b5c5656c79b3ad465174b09d970dbd526b795cd062569047e7bea39468e1a6f96896ab5a79b03d2c126996d427b3824bcf8fe34d93a0fe5a5a592778324df283b5fb6ca22a8d9c94ba59367db4ecad1675219c01a430610a8545d4245a1a30c51e8d380516816a5765958b567536a971bd43eb55b30b50fa184571884afec1e4cf8a126e19030c3f4c83035c4c328c1302f35a9b809b5605d4fa8f2d414b7c8ba82aeff55cb2b7b9cdf3076b84a8ac8913300f490a7205acea1d81e6d603b2020dbc32904c784643bd72418dcf3d87404fb0c0f9967120ce5afe30451fe8219bdc1cb5ff329ec1b0cd86f0f887d0115cd37868de60b29c9c78795bc8892bc29ace4c594e4cd61252fa102b1d2108830ea2f48202ea5846f3108af08287c191531ab4c69d344014d0bf142aa5b7d8ab76b548a5a29a5c9f97b97ca73ab13da47a0cda34e559a83c4f3e5949ed5263ddd098730b013ca1495b20d0dbe582ab607faea0a0a7d8d01fdbe80e88fa084d71a84bf1750f89114afad265ec353846bb51c6110bf3ac3b91a84e34a4a9b6d266de0341e6e41beb38a425a67407a73af60485753469c6032020638b9f80e7590ad960d7e956ab2e42e998d07c7584a69b0dda401a46c2bdb0a066b322c16aca190d61b90be1210e951548adc1036452ea3d4de614a347b0753bb9c52bb31acda1526c950ead829885207cca90f5eea584b7da789fa4e7346df5947916a094bea682a805b0d013cbf4fb0003e8612becb20fcd480c28fa5849f6410fe5c40e1c751c2771b848fea1b4cf87a4af81e83f0ea80c23750c24f3608bf3ea0f08d94f0530cc2ef0b28fc78cac94f0debe49b28b54f33a83db85f30b537536a9f1e56ed4a83e47c39da249b5318bda39f82cdf28275f9d31bcebe5798a72fa6fa3ed5a4b4c5142e90439f69522940565e4579d359066f7a276024a8a6849f6d10be21a0abd650c2cf3108bf20a0f05a4af8b906e103fa0713be950accf34206e6364a306cac9054169c2ebdb351c6b11c39ac19d601d8a1b64b85b5586a64c775a59a24a01b9c74c7352c2c91a3bcb749f974bde3ed79ced5205ad7515a5f60d21a7a5ea111375e6e76ab926e35c434ae30474c56a5eec981f43a81f2810b0d3ef0544007db4e197d51481fa837a5b372cc571d6b3a4b8d23ad908df7b0104cadf49486769ebc7271da69f23e9926c378023e5da9f4bbc114dc50b6be4410656bd8b3a197dc1c2448d97a07e5b397197cb63860bad54809bfdc20fc9880c27752c2af30083f27a0f0134dc2a15803abb0872ad634516a5f6562322098dacd542271b52965047b74e34c625a1d24fd68a1be790df54df3c4bc20df6ca5be796dc8c4701725f83a9331106cebdb10ba4d311b0366662751fe70bdc11f1e0ae80fbb29e1371884bf1350f81e2a89ba914aa26089ece0d5ff934ddf811876733a81edd33b730a25f89690824fa5bce8d690ee791a25f8b690824f370986b0bf5d248fc803014146e49d4179e11d062fec7340302fdc6b120ea90cac731d2aa53e9352fb2e83dad303aa7d1625fc6e83f03501859f4dc5cc7ba898796f4631f31cca1d616de0a4d41214d8e4fc831609e86bde2ad6c8e2108c5add2defec945507289007f1dd73292dee336931a84d8b02e7778370fb2adcd12299eb701ea5c3fd261d0e503a1439ffab64e118ded9edfcce5c83f3290d1e3069d0038505cc2981e26b90af5d40b9ef8306f71d352898fb5e48b9ef4394fb3e9c91fb5e44257a8f1812bdce0113bd8b29428f1a08bd1a90d03e4af86306e11f07147e0925fc7153d80e0e26fc522a6c9fa0c2f6c98cc2f6322a3a3ce5973415b673d27439a5c5d3fe49d38c764c9aaea074f8a25fd254dc8e49d39594065f4a95341d2dbf176cfcfb5594fb7ed9e0beef0574dfab29f77d8672dfaf64e4bed750c860e7b13005bd6b293acf1ae8b40c0946e73a8aced7283a5fcf88cef59411df3018f16240236ea0d07f3324fa1b29adbf65d07ac2d0605adf44a1ff3685fe3b19a1bf9932e2398311cf0534e2164af8770dc2df0928fc564af8f70cc27b0c0b26fc360afff314fe1732c27f3be59cb0ab1499ad15b573b67607a5c50f4c5ac4b3b5c276ccd6eea474f8a149079dadcd6cc76ced2e4a83174d1af414f16c6d89ec00690c3888e66eca815f3238f02b011df81eca817f4439f08f3372e07b29235e3618b172783023be4009ff8941f8430185df4705376cf016265fb89fd2fa6706ad478d08a6f50326e1d03c025b51856a1e799052fbe706b5170754fb21937060f80b53dc82666fff617215cea33be540b6ad32dd6992a348ddd950d5b203728d7097b87567d2563a57abe51cdb6df25ca79b95628bea1e9c21bb07f52cdc3daa213b4776cfbbbb17e4c8aea16a35377bbbbcd22c9faa4192cd1d9075aa23157759061dedfa301540bf34045045c0007a8412feaa41f8ee80c21fa512a35f5189d16b1925468f5146fcda44e8c060463c4e097fdd207c7640e14f98844364fd4d3a89914fd3f59306c1f972cd8d8ee90d4e5ee3a77d7b837f6be265ec0d867d08fd7b83c3eb4af5063f45f9d29ba6d816d0979ea6b288b7c266115fa424bf1d56f297a8fce177e9f8bf4fa2f96593ffcba5616a3bc4ffc3acbee5eff9efa4edf9ef4acf9feae3f9e1d6083387c43394f3fc3eacf37c85729e3f84749eaf52d1f43d43347d7964b068fa2ca5356cca995424824c7181ac68d5c80910a6a93339b2b894137094d3d7283dde37e901ab770493ff754afe9f4286ce37a8d0f9b32174968f0a163adfa4b4fe0b153a1047b6a922a20e8f9ab69525321d83f62dcac8bf1a8c5c393a9891dfa68cfc9bc94888817a6c845b9ecd7c90c977a82f7f60fa32d4f6ddfd75f2db96e6cf6f5b7ea5d48910d522e81496e7280dfe6ed26098518395f2af163957dd2df5673643e9bb942eff30e932324d5d92d76e0fa2d3f728c7fba7c1f1ea0f0ae678cf53067f18324d788112fcaf9082bf4f09fe7748c13fa0387f64e0bc2f20e71f52c23f36085f332698f0172924ff0989e4259360487dfe9b8e609fcad08f4c82a11efa49db0d4f3d1436a60e5e0ffd3185fd7f06ecb96383617f9932e233ca88cf3332e2279411b08297d7886d018df829253c66107ef5b860c27f463966a798213985396365022f48522dcbd83a21cf15536486b743fd4e1cef9e23cfdcec67ba5c68a149e6fa6e92db2cc7c3e7c884393ee1d86d5482a9b33b3d2503fd1d684c72b3d8f8baf3393231af0e381cf1158a4567130b58b804af6ae69632e3196c7cf2ef4952c37a119fb3eaea073aa79250e83c1d748ec0cf2987e962709877027ae32fa828d5354644a96eb14ca2d42f2923ba1b8ce811d0eb5fa542ba8729a461b4b5b98974bd6a5c85391650bb7017c3f10bd35cdfbb53e4105ab75935eed78931a0517a866e424dbcd722fdaac5108bb6480df5161671d98daa761ac4bf7e45054d4f937f050c9ad74cc261a1a35eb1704bd1feda20383f072ec280777b76fe9aa666565489ed6aa6ce6219a69509bb8f06df1bac772ce80a817d62d0f63153be912d1ba81691d7a918dbd71463a54d013cfa3794f47e26e970c34ddbf3335883e0b754ece96f883daf4e08167bdea0840f30082f9e184cf89b14a581e9444d1f246f51820f0829f86d0ac720038ee10171fc8e123ed820fce680c2dfa1840f31a5b10185bf4b091f6a103e7d5230e1bfa7027398292eb588f456f908d765e936016c4ae804b5bb03f30f54100d3704d19c8041f41e1544234c4104a33792fb908318f347d3f7a0cc782055661c995199f17dd37760dafca874d291bdb4e03f51c0469b8041f6931f08d09f29f90799e4bbebf5257b74902ffe85fae218d317871a5d6095f474bdd851fc4e304fff2ba5498e4913900025ada039c1df0c5fc91f0b1761099d6cada8e0b77fbc7fe96d6c0c8ad7893064fc3096dcc6c992db9024cb7cf7af27c87d600a1f381d1f83789aa8d211abceec7ef3a8973a25054d573a68fe4e39c0049303405500c692b9097cbdf3578b32aa2ea0e3fd83faee44d377fb93dfdda1328120dffea7c91dc765db1d17c9ea625306ee382906981211e511ce38997046bfaf53cef8a1899bdc53635316b9b9cfb9c95eb95c2fb4ceb9522a2be16e95be3903a6b9812b685324d9f1499667aa1f45fd5fa69802ddd1536321bba3ff4d499e1656f24794e4e961257f6c920ca5ad8363e1779ef90f9528e585ac0afd97e2911f96c72794e482b0923fa524cf082bf97f94e4c2b0923fa324178595fc3925b938ac6411239c6e6648a78b9904cbed9fc2aadcc92419ca06b342361376a6549e1d56e52e14e5434252ee4aa97c685895bb51920f0b2bb93b25794e58c93d28c9878795dc93f2b9b9217dae17a5f2bcb02af7a67c6e7e489feb43095e1052705f8ac5c2b02cfa512a2f0aa9727f936028102c6e8702c1008ac792b03c069a24c3f34bd3e1e13374e00093601847ba2c1dc1efd282075121b83c64080ea604af08297808157a47840dbda154e81d1932f48651a1b73264e80da720af0a09790425787548c10752a1571a36f44652a1b72664e88da242efa890a1379a825c1612f24194e0f29082c750a1571136f4720c92f32738a731580631fb03e5db63bb6affb689b5e984c5349ad8582a2cd6850d8b7126c9b084e3d1e9a8bc8f163c9ef2cb6342fae5044af0b121054fa4e2fe7121e3fe242af4d6870dbdc9148b0d2159e452823786143c85127c7c48c15329c89bc2429e46a9bc39a4cad329c19521051f4cd5b4b684ac69e5511a5785d4389fd2b83aa4c60594c63521359e41695c1b52e3424af0d690828b2814db42a228a634ae0ba9f14caa6678423bd40c4b281cdb43e29845e1a80f89633695c435844de20ea140ef6807d087526a378655fb304aed9deda0f61c4aed13c3aa7d3825b929ace4b91490e67600328f52bb25acdaf329c9ad61252fa022f9ae90917c2125f8a49082175182778714bc9812bc27a4e02594e093430a5e4a093e25a4e065540a7d6ac8147a39e5c8a78575e41594e4d3c34a3ec2541b9fe89cc6b68a8ea88daf136e0d1c6ace45ed5c0f3f2366d8b77812d80a956f1e8d72209d8dff227615de1b83b1087c5a5063138e34f91584fe9906540593124c51f6240d048c91beb6d2e46b93817f03abafb5df00fccc260f9c65f2bb5cb07b8668cfe90194769de5d298b0bc48b3f41877148b3138dd479be474ebf8c699f95340d93c1ff73cca31ca1da9db249f80b7424615e55fe60873b68c30d9c147459e55267786c52eb2bacf54b9b202e4041f36754e0c06ad1a4a8646eae7c6cc7b4da5d28122b8da94fc00c1f328b5bca9cdb9746a534ae599e787cd33d750ada617846c353d8a2af25c18b2c8534609be28a4e072aad5f4e290ada61554e8ed0b1b7a6b2916978464b18e62716948164753822f0b29f8180af2e561211f4b41be2224e4e3a83aee95ed50c75d4ff1b82a2c8f0d148fab43f2d848a545d7844c8b8ea76a49d786ac256da2205f1716f2660af2f5212157522c6e08c9628ba90801d58018ecda66c3a279eb55f1a1fd6a61379a98198b1b37c9e246be08b2705e26fa52c5932a53b043e8dc9c4eb0df44174daa4d82e1f49658f2ac10fd136456480d954adeda0ea9642d25fcb67610be954a1d6e0f9b3a6c334986e7ef4827347d468dd499048f754eef4c47f038da4d4ea004df1552f0760af2dd6121d79b24c324c27bd251792f2db88152f9deb02aefa022e317da2932369a3e002ba3de970e933768c13b29d8f787847d2205fb81b0b09b4c191e4c4a8dc19ef01d3105496718c1eacd0fa69d893d2433b11149d6a5a3039531355329f0c3ed9002b75081ff48d8c06fa5d47eb41dd4de45097fac1d849f44952c1f8f19663b2e16ba592ab12169b580d50b4f9201ac1b9ff2e4bcc815cefd52e7ce0ee9d270c55c7e318d5583a7b16b81e3370a77827fb00d707653563e61b2f2bc362bd73a252988746e046d907faf10ee4e094d7221013782ae687b7249db7295890b6235291ee5c2dd1e7a9168957681dc447a7109f07c303d2849150266546e95771399e2c8eae5bdce911374f6ec1e8af493943fe12fba361539efb8b41a9d447193e31b4d32cc5d6b2bd412a15e6de3efd2d7dbcb9f4ea6ac7cca64e55c8f9598b96be752e16e955c69f0fac410c277fce20a7e2b8865a750963d6db26c5e5ae1b7402ec3512774a37bf8908bdf0962dba9946d5f34d956e2b16d950c9d6dca3238dbdd61969c4659f2259325fbb29c9ec5df8105d0743745355a57b53980976376b4159097b4ca62064ef5a080d57e69dbe914f52f9ba82f482b6eac14eede3f36a46a6750f63d63b26f25a357c1d513e567c02ab7385c273f5d274e46dd77ed11aa7b29abbf62b2fa705fab694dcba42dee4280ae8d3a3786ab558a5072bcc83c34cfa4ecfaaac9ae630397eccae59dc4b29d4902d55d19a6249849389f45f178d6c4e3c8ace4d9dcb9f9d994cd5fa3ca29c17c40fb302cf2532505e1700eea11412c3b87b2eceb26cb0e252c5b2be367bd2a9bb8556d5d6b59a76271755268f0d451cea52cfa86c9a2a58ca9af0e55770d9b2dc25d8abffd2c3d8fb2f49b264be708aa95dc9452245a80978c0326cb652837c9da509593e3ee6947abcea7acfa563a7582c4efe212c25a190a4dceb3100fb7fae47e8932dacfb20b28cbbe6db26c51ca9433bd5a019d86fad559334d292fa46cfc8ec9c61ae612758b5caa10164e734bcceba407d4b5c5c6f6a92366928b5e44717acec4696d87d53cfc0985e77031c5e1bb260e0bc9340c6a485b9c8774dc7097cbf3cf71cc92da3ba4f751167ecf64e18a8016ea6daccd21d211f65e42d9fbbcc9de3246cf6ece20ff6d0f029752045e68af7cd94ddb16a05c99dfaacb28abbe6fb26a59403f8eef5b6b830f5f4ed9fa03aa852268082e954f247ba3377d4d5f6e10fbaea0ecfba1c9bec342941c5b64ce0b2be2d5aa7a1e6d5545d2b3416cba92b2e9c56061e6f54fbcd559aa58c699535e45d9f712655f903aa36beb3255668adf851e0fffd2617b951cafa6ecfb91c9be09c2bf55b0c221cca1e53594963ff66fdb0b120ae5198502a7ef5d4b59fdb2c96a7a23d38ab6ae7a9c46c4379681bcbfd558eeccac7dff3a4aef9f98f43e24658d6b85ec1b84d6c77ab9adc812d12057fd4caefffa8540e635c8eb297b7e4a9596fde308d486d7c81264b3a10c914e5f0294bc6adbd1c21b280b7f964e1dd9dc37b042fade8972024abdf2ca8eec1fb891b2f115aa852a9d768074accc2cc5c8dcd29b284b7f6eb274795aa1e9ede971e3a1b6bb23c3f566cada5f98ac3d2665b8f2b68c73b799df42d1f8a589c62c9f3cc35b2a4ccc3dbcb3d6e8f265e20cc920b6dc4ad9f2aac9969610652f6aea59d03e80541b04b597bc20146fa328feca447149408a9486d9f796db293b5fa35a40d2d1c0b563b1a89331136244950ac774de4ef7296fdc8f4fdb0b42e00e8ac0af4d04e6930416c8ab0da8ad1e5a299b648b87cb6389dc00a6be6d72a99f05ed65dd9d9475af533ddd9475adb2e51e6a2aee1639556d76e9b6ab5d322f6a95a5e320b66552cabf8bb2eb37545fa0d9aee439171dd526703765d16fa956f6d4ed4be994b9d269a50ade929579c9e41e8ac31b260e530370d061aa77e968afd2c3bd94c66f9a349e94b22c15ef61af915761045afbd431bf4069fa567b97732ae5f84d5d3be6882ff751b6bc9dcea853aa66b2c4b25ac9fd9495bfa346b0044be7dc925cf2dde45149b83496ee3716c8967228fb04b1f901cae6774c364ff4846cfc9bdcb1e9414acf774d7a167af4c4e99357e7654ae774eb8199b6ad3f4459f07b93051bda4ab9eddfffa55b73fd7ac0b107a61bf3f43b41a83c4c51f9433aa33af41783a42a71cba818d73ea9c9239465ef992c3bae83c33b4838671a031ea588fc319df6ada065adf02d1c9987fd6394a5efa7935a2d92a1ea86600beab770bda04414a7b0cf9492c15b412c789cb2e04fe98fc5866f068999d83eea7a7b85d013947d7fa6fa6bfc4b34f1fdbebc3aeafdd6e8f845ed15e6172733cbed9fa4acfe4b26fd046ea8963b0f6f112daa95a5a3e7a03c4559f8d774629e997066e584d4359ceecebf584c6e2a22a5b8bd2e8df21d2815e6438759aca02d67c86b4bf1f3127287f875f87e83131a10272adad2f6f8f2549484bf3970ba7512eecf64b5dba79b21c66a857702ea2229bf5ea537da5bf3242177ac3a4caccd734a816e9b94773535ca0a532e9787f2396c5d6a9b36125363637223712ccb210d2b94ed77967e00a13a4a856aa77c580e43ae14988937a5d6e2eff0b5ce661f322dfc158f1d26dd5d01ab55eb410c5642d9243fe3ee314d4f0449f965ef6e0dde2f1f2c05e8f2604a716b511260123742ba9b3b18b749b85d54af3b32bb77ed540021f20f4e6c30797cb12cf7ed74c0b9e339759e43016c8e0442a89e6a84ffe44438c039d1d5dae5b2ab010454caa2190c1b2c15db2301ecb11e71601f72021b2cdc1d7b0b506b7594c10de81d07f72f4e700718c08140e8d081c118adf26a7524a06d167168ffe6f6b6c4e8b9d4f95da7c6f4ead15eaed745015c6e9f38b88f38c10d95e5d1e6b4b38528c0bb1a650a1f73c2eb8da26a69420b4c14307d3a328ee93f9c987a224cf181dc5140b46d681cd17f3911b9fbdbbba30f5a9c7a84db5bbdd6b952adfe8e02aefbc6c5717dc289ab9bc4d51ca924bd4bdf389c4f39e10c774e4adbaa48ba5fd01d2d5626f348184bb043e68a6b54cb5914005e3d2a0ef07f9c007ba0f40ad484aed228007a6c601cd067dc097aa9ec9b88af18148d02e906e4439f67cb87f424bc28003a75501c90e8c40808d6c3d425f62562b7b4bab5ad9809a376ab6521b44c7a58b5f4b77ae7835180083f1a628c1322acd38ce1418b184cb8af695b9ab63ae265f9c1a88dac1327cabe2a4dd3feb647e5986b65753b0aa876a3b4ad33272a5cd986ba23ee6ed6f5c72895cc3eee1e07d78513dc500f383c437781ac7e430f507c2e7214e09d8adac5ba72c2eb8372d4f8244c777a7014405d8d4a67dd38414153f52a19fdb67bd61482d1e14df24b5100b6b9531c58f76ca5676ee361e2009aea88a567f5a88dbf072738b7a91a8a128be5a7a35cd078a16b1c5a4f6e6f5b223bd85ae5c7e38b7ac517796b76ca7075cef7a200ee1d04ae1727b87e289a46b5430446716858bdb9bd4cf794bb8d8ad1ae07cc415ed687131cb49e9539d01689f4d7c78c02c00b6421b77b578f70eff0cacc07bb04a34e0fcbe92fdc3aed4e79b545e5bf09c374201659a779df4e68984d6ec6ed1bb929d3b9dcb4bb88730377efe56638562437ad52676ec8068bdc00038072032581b9699765720365e0b919a527b981aad8b9810ab0b9690d65c90d347e233770cdd6a433dd639f9bd4e193eb5b1dcc3536e1e71a1b657389eec95c9fdedd5ca2053c37452b526e467d33b969f40ec6c7909ac77e16c018d27e9dfeff1ede5900c33bfb0304d88e037edcf2c400eef20478913b9a17d278ff35a26638b9ba478751493a24ee6ca3cb0d266d7a26942cfaa5636026a58b5e68c8c5409b70164612e7a108e70136e12c8a24cef508e7204e9cd30d38db63910ac884d8b09f1d63c2be12611f9c0d2fde4afa31567f9398294af870f6e1f2e287451ce7109b70164712e7f508e7509b70ce8a24cedf219cc36cc25912499c3f443887db8473462471ae413847d884b328923877239c07da84b3309238ab10ce919c3887289c55aa36ef9d068fa758339638bb7281fc00811cc53df04ab70da5db4e07cf37c967a357835a88c08ee6043b46e086bbf41baea30c3707c13d887bfc915f6d1f8b839c9e0d65772e94025539c770a2ecaf50967880ba4dbaf050f4fcf001e48739d980373bfbf0dee082f72482379613deb0147978622466ad9bb345e3bf2098e36c82392b8230ff8a608eb70966710461fe09c19c6013cc991184f9670473a24d300b2308f3f708e6249b6032f618b1c17c0fc19c6c134cc65a391bccd711cc5c9b6046b186f31b04738a4d30674710e6df11cca936c13c248230ff81604eebd8660c5794bba029638a792e57cff92ad48c319d13e55485b2de79a85e1ecd3b8c07db719e11f9202eef3d1e213f9813792f897c9b1c1ee80e57dc2ae145afbda80f8af0791d19e113d7bd65f4bebd5c287722efcbe744393929c2574a614b85de646fa1f31fbc73976c596f157e4bd6b2c266cba80a10ec826cf86d7ab97e14518e4649c00c4e940719928074b7b86045bb8f0bed38e4a585dc5eba40cec6685463d0610562bdef3b8c56d723f3ddf90ed1cba8ba202f2de29f100b5d679be405f878a5ccdfe16a16ba37d822fa690861713610cedaef107e09219cc989709088f7a1eba3779beaa8f6953f8d2096d834329e755c1c1bce2128939965134ed6815c6c38e7219cb36dc2c93acc900de77684f310ee2553dc7cbb20fb43120ee4c2f7124a2b0fb5675c5114db3647204f3c2c1b28f1c0c2954e217c999a325aebbcb43b1b39381bca56e49573f8dbdc7113db26b15da25b9830c96aa973ac714424ad20128128de17c13c3c1bf5ef1639b1bdb9ad4958cfcad54753ebd10ccefe7436b43721b473b3d13794ee1877c6f4936d84fb1c04739e4d30197b2dd9601e8260ceb70926e3182436984508e6029b60328e8e63833905c15c68134cc6719b6c306723988b6c8219c529562508e6629b60328e416283391ec15c62134cc67e1e36982310cca536c1641cb7c9063317c15c66134cc61a101bcc0908e6724e983922dcb229acf93bdb88a359a84d6945470e3ef4361633a6a26c4dc59391af1e61134cc6fc9d0d265ea5f6c86cb4bb436be72ea1f763ce52472f1bbe6108df4a4e7c2310bee4815c202c3ef33cca3de7cf23a0abb231f8a060bf1b7c702a42b83a1b084bf63b84872284a5761787185b35d98a43cb5071684db686c7c4bbd8702f117be71a5ba7c529c8478fb267686b1427a71e865096652b174fb52e7394876ecd4240cb6d5a346a66249b3abe807056d8849375c62f1bce4b10ceb536e19c15499cbf4538d7d984b3249238bf85701e6d134ed6e5cad970ae40388fb10927ebfada6c3877229cc7da849375f577369c1b10cee3b84b9ee9ed8f522655831d5a184b9e2bb9801622a0ebb3b1b05991a7fe9e85660fb67968f508de064e782345ba53fc12e7fb320e4778970bead1a8b163a38d50196bec6c50d721a8c7db08957148171bd4720475938d5019737836a81311d4cd3642651caec0067514825a692354c6ae6036a8c310d42d3642651cacc006f50004b58a136a91486ea54f9cb7b148c4f752730d49dc992d712bc7f8167815b244ab9bab1903a1902db910f140a8b667765c1497eb1d84fcb9c6de59488c83c4d83af45e465e5a6bcf0a75acb3ddd9fc741782b9d52698515c56fa1c04739b4d30a3b8ac743382596713cc28f6dcb7209827d804338acb4a6f4330b7db04338acb4ad72198f536c18ce2da73ab11cc069b60467159e9520473874d30a3b8acf4b90866a34d30a3b8f4ca7908e64ebb87dd4671dde34ea8ee7e2227debe0aafbb8a4dbdacc5bbb2eb38975e61db6b5020bf6ccaf6d2a7e9377b4471e99591c8279bb335f476956cd1dcee69f15cecbcd624bf18e5a1b707225f6de104dacf379237f3a1ebc5963e2274ad1d39a23efa33dd072394bbb231ad10b6b1dd7fa6151e85f09d64c75adb6eefd14ee9b16ebf10ab67b26dded888329cdd36addbc95a9964f3d4ee08e71e9b70164612e75484f3649b701645126705c2790a27cef1227962d712b15bc0d08556a187d6963aaf570ba8469649b0ee92fbf5d929710ee4823c086556a7da34247c66241756bb1fe13ccd269cacbbb8b2e1bc0ae13cdd269cb32289f30d84f30c9b70964412e7f710cebd36e164ed5b67c37904c279a64d388b2289b309e13ccb269c8591c4b911e13c3b5b6d9de5b254d9ea485e206093a7756aca57b59cf25513e9b6cee311d073ec19d719c5e10abd514de9dc6cf463ea75c0dc49885b6455533f14f5e583b620bf3c2f1b93103b602b133678872378e7db3bc298310362eb6cbb07a1bd201b7e392bfb7ec906ef0904efc26cc03b643f8ad42f227817f1672fdb0c6b2a953b4caa449552a856ce7087a6b7e8157b7a239817db3b1c81b1c1982d920f45c5a07df62caa16c5d1c45391975e62471fa669bf6046b46ceb346c445e7aa94dbd44acc30ed9d2d3b108e76536e12c8c24ce1508e7e536e12c8a24ce1684f30a4e9ca3d24e47d709774a36882ae21d07b237c6d5548cb05e998d068ff4da8e0a23390afe5804f32a9b60467114fc0604f36a9b6046711ef05108e63536c18ce23ce03204f35a9b6046711ef01204f33a9b6046711ef05204f37a9b6046b1e6be08c1bcc1269851ec585b8c60de6813cc28ce035e8060de6413cc28ce035e8860de6c533d9db5738dad9ede17e1bcc5269cacc523369c7310ce5b6dc2c93a948b0de72684f3b66c6c0a3553ec6f9b42dd20e2086fcfc66482d40d71c993b21638429be46c75d666b99bb89ae5aa909fdec10979b4825cef3c04806bd46c8df81c8dc464000f3f6404cb364b632e027b6736d656d060f56e852026de1bef579c8a62c9743ac27b5747761c676dc9d4bd5c28df47e9ecdd9c28c74a942b9c87ca243098b9be4bbd1ef7d64d6a2fae8572a1d4edeafe52e758e388655cce82ad2cd01301bec79e61b3518cf6ff4128efe5443938054a6d29ebb09b715cb9fe0928f5fc82dd0bff30b68eb22dfc5388f0de67ef905ac6ce3ab601637f4409c0fdd94800a87c3f9e0030a6a36c09c0df10c607b897a65aa36af47adac10ae99910eda397970f40e01eecd8bcdc1555cf9d099dcbe583ab512af95036a272415b74ae96757b779180a8af5df345e4910f73b7d103b0c5f2c31dba9d592917cc6204f3916c44ef029f1a7bb49bef5e40281fcd460b68f17ed702ba15217c2c1b8d73e08d4b6471a7552a017bb757c9485e2a4e926d9e4da2599635778a284f649d89c03e6ecfb483288e515a8e503e918d695ac59e625194f3ee1311bc2739e11518fc30483ddc9dc9116f8e5b2c73fccaecd482fa7095407f8df03f65d37a0b33390bf46ceb2ddc8d703e6d13cee248e2bc18e1fca24d38674512e72f11ce2fd984b3249238bf8a707ed9269caceb7ab2e15c82703e63134ed68528d970ee4038bf62134ed6a18b6c388f4338bf9a8de5a56196dbfeb3bcf42284ef599bc6d6b16e8fc7b7e43e6a38fe9a4d38596719b1e19c8f707edd269c4591c4d980707e8313670f29a046ee1bdc24dcc18ad11b27d70da58ddfe4c4355904d9b0195a415ba548bc313350cbc2f099655cb0f311ec6f65231f9f210b3dfbcbaa4a6f217cdfe6ee355fe4580f02c02797caa210b4c2d73affd8c08de702770002f79d6cf4054147c632019d13d085b155f6063545bacb622f42f89c3d8308a3b87ac27094437f9713e51001835f20f3a8167a982bd56fceb881135bdedd03f9e4f7ec1de716c585d1ae43689fb7679fcba2482e4af15d04f3059b6046b1c3f76708e6f76d8219c54529be8360fec02698515c94e23904f38736c18ce2a214df44305fb409661417a5f83682f9924d30a33807e85904f34736c18ce2a2145f43307f6c13cc28562c5f41305fb609661497e57b15c1fc89dd73d418eb446c73d48a5123c84fb91b41fcda935cd54be4b84ec6ec886db3fa1d08e4cff8a74f2782745b33a1a1638738427658ecf41d7e10c5bdad3ba384e0157b066b47b1ba998750fedca661313339b32836cf7c1ce1fc854d388b2389f31684f39736e19c15499c7f40385fb50967492471fe14e1fc954d385927f2b3e13c06e17ccd269cacb525369c67219cbfb60927eb9af06c386b11ced73971c2895e1f217abd94fd11a6dfd8e4753339dbdcd9bcee5e84f3b736e12c8e24ce7d08e71b36e19c15499cbf4238dfb409674924717e03e17ccb269c3322897329c2f9b64d3859bb7fd97036229cbfb30927eb160f6c38d7239cef64635331bd1a2c708071c4c96bc07a675b30360db30d8a8da1b6f77739b14ef260dd2292071aa63f249111355b517f1b42fdfb6c0ce19e2df6b7e57cbe8212813f6463b8acf6d666e97f90042c55f06a8c9d70d15d6dfb10e49defd9333a3e8aa3e8fa21947fb4775037639f3b5b1afa239400bc9f8db59266787c350ba9271bbcb908de9fec1e0fc23844916d3c483e8af67fce46811faf7c688ae2d1ceebbf8fbcf52f9c382778f2fa7a81e7bb99b73159a65ecedade05d3b830e720affdab3d6343a238de6e25f2d8bf6573c31288f8d59e7972fb5f55f5df08ef0736adb2c0dadcc786b3078af87fb709276bfb141bced908e73f6cc2c9da7aca86f31884f39f36b59ecee49c72c8d67afa084a3b3fb40967712471de8870fecb269cb32289f31d84f3df36e12c8924ce1f239c1fd9849375b134369c6508e7c736e1649dfdce86f30c84f33f36e1645d7b8e0d6735c2f9dfec2c48d5016da26c75f63711be4fb2d1a00c1fae959ea865ef508f440f5e0cc1fbb4e367c0e94c267a9d6ffd516de77fb6808c622fe6c7c8233fb305246367061bc8c390477e6e0b48c6860c36903311489888690548c65e753690350864cc16908c5358d9401e874076b2052463d19b0d643302d9d916908ca33ad840d622905d6c01c9d803c906721702d9d516908cebd0b0816c4520bb71820c361a2e8acba0754128bb73a2841a767ca97150b45972d82ad78885d7a237640bfad734bc1e9cf0f4fe95f1a184e6812fee367680b6560a6be0ad28eee302db80c0f6e4043b5e784717b903b6e2e38841a0bb69ad5fd48fe23a737928eaf7e284ec9db3e10285215c90102c36664ed15d2fa91a61ed9d8dcc29bd215b515cbc6f124a06fa70a2d443b5713e9f7e0acb88962d855d83bcb46f36237f9da3c43a11dff90a0bcfda78cdbd5c58eb11d67edcc5a94db2ad68ffe9edb90f45f7fed9f0c9d4d17d9df2461055c41bd5f7c698b01e897c720027d66106ac7e19521497402d423007da04338a43b24b10cc036c8219c54d20a62098836c8219c54d20a62198836d8219c55539272398436c8219c5e9abb908e6509b6046b1f5733c8239cc269851dc0462028239dc2698516c9c1b8d608eb0096614db910e42300fe484197c6e1a6316c436fb6700c239d2269c8591c47938c239ca269cacbb64b1e1dc8a708ee6c4a9875c432ffa2ed4a2999589fd6cf8168838be8338f10d16b0326ca55abd0b44ed701edfe63cde289be2f0e6a1d1c3d815611cc389718c882f37e176a96d72d48570ac923ca0c77d818099e7d0ae59e90880085e2da2bc577039829b938d7ea1cc96f0612cc4b30d69b80da11dcb1dfdfd32236d296b3fd038ae36f73a94098de3c49863c0186c311fc61625b6c57c6620bce3ed4d00183b38d812805fa004600227dab112ed72e99f6502bad96a5476552d45e94137db6500801f57397fbbe2973ac71a476c750433af5e08f044bb9306c63e25b6a4a112250d93b2918151c36f16c904817939d4c95c19d83f91974ece46fb132ebfeaca40bc7a10edf2ea500433371be34431ccd4296c74c12e4660a77082d58bf6c21890069dd2ec178bf65e83104eb567b862147be0972194d338518e0b80b2dcf926086911a5ce5fba41a599375b9ac2952d7d88104fe7443c42240e5bdc295ba3b6f9fa6c14fb99d6a2e2d2c1d9687c4e7f25af28eee57a2bf2cf3c9b70164712e7050867be4d38674512e7cf11ce029b70964412e75308e70c9b70b20e7960c3391fe12cb409675124719e807016d984b33092388f45388bb351d52c90bfdd2374e8950bb73e1fdddafa6684702627c2def2d3ada25ad676ca558b3c347fb0411bc3056d20825662cf5cf7280eea1e8cea3ab3b21585dd3a3a08daada26f165a8bdee542f865e48db3b3d1ba0e086bda960dd0b7a3dee8f67584f190ecf65feeef3b660c47680fb5b76b388a5be45d8dd01e968df4b370bf6b6d9f8810cec9c6e044580d36eb8313d93a77c7207c8767a35732bdce8ac2487657dc8160ceb5096614cb96772298f36c8219c50983572298f36d8219c50983b723980b6c8219c509839723980b6d8219c509835720988b6c8219c58edcf311ccc536c18ce284c1cb10cc2536c18ce292297721984b6d8219c525531e423097d93d7a9831e2b355307ba226e2e5d968df9cd1e6afd5b259ce1d9e15f54984cf202f5d6153dfe34cce1494adeff13184f3089b70164712e7cd08e79136e19c15499cef229c2b6dc25912499c3f413857d98493753e1b1bcea311ced536e12c8a24ce3311ce529b70b2d68dd870d6209c6b3871eaf5620b3d85fa2877a66d47f08ecac67c0b188cb058c002153b9d1a4f8d2ab4bbb32c6aa4c04a29002f5dd11ce9215be310e2329bd6a661ed4167c3d90d552fcb6dc2c9dae6c9867312c25961134ed611c36c384b11ceb536e5ed33393bded8f2f60751dab9ce269cc591c4792dc279b44d38674512e7db08e73136e12c8924ce1f209cc7da8493758949369cab10cee36cc2c9ba26221bce9310cef536e1641d52c3867313c2b98113e714e19d850e95cf6a87070cd0d676c647c553bd9d0b9cbf9a64071deba0ee87624cc09b50c974232770bd7326d5859c98b2b28164db39732cf2dce36d0119c5adec8720909b6c0119c5adec4f472037db02328a5bd94f47202b6d0119c51dd82f4220b770822cf0e4eeade48c217ae2d622e78906479f467906a66629afbf892bafdf82f2faaa6c0c174bb7518fb17f89ad49af3382596d134cc6b1777c6b7a23983536c18c6263f3bf502a5b6b134cc6623d1bcc8f10ccad36c1642c48b1c1fc2f82b9cd26988cc57b36989f20987536c1642c99b2c1fc14c13cc1269851dc27e67f08e6769b6032ce256683f91982596f134cc6b9c46c303f47301b3861d2cb452f757ed70977a7980ad12805477fb9e87508ec0e4eb0ee06e32b9d07aae490303c3da6c37634609b34d31d616db46789aa28ce7cef83aa983bed5dbd8631bf675bbde651e4a527da3d738eb1d6c496081c8c3cb78913ef209469ed9299120cbb75b735cbd2bcb9bd5c102b918f3667a39f1ee7fc5476c59edfb3f9e44108674b3652d3e4289f4e7a1ac5b5c006a2e8deca897620f2d49d1ebf8cf25256af21dfdc958d4213d55d9758688ae23a22d310ca93b2515fcaa4d0c4d8e1c116c92f456077db0a368a9bec5d88c0eeb1156c14b72f9d87c09e6c2b58c6e23d1bd81908ec29b68265ecba63037b30027baaad60a358421d89c09e662b58c6e66936b06723b0a7db0a96b113850dec1e04f60c5bc146b1e96f2d02bbd756b08ccdd56c602b10d83339c1eae5ac678a0e58ce9a0ddfc908df59f6b401447191c12311cab36d9a0aceba6a0e5b4fe918d4bc778e4d3859977961c3b91ce13cd7269cac8b10b1e13c11e13caf23479b78db4ea3b870f06609b37b578ff0a549c21749cf01dfa912f1d56df2c43201130fdcf56faa9cf395b2e8d322363b69df7ae75fb010d8e8fc335d8fc9258c9688dd62a7bc0af2aaa5ec06e72e68d62c0a6046c5f9e0103d9443e4caac0ff6026b719e814dd0e1eb7b44b97057ef29757eebb12ead1249ae5c9a33bef33c7c01f6a2df269aa4c589abfbe4c67a484eee1645601700cc55baea6d8b56a84cb7ceb1b9526ad2e43cd3457ec78d8fb9b1bee84c7767ae9045c666a915bda799fbee22a92fc86e90164148958a5ae71f046e4cf6a3685b56490e958eac4a79ac68fb623eb4f3c44a9c5f6ec135afadc89aa7a69a34a8337d3db54c084d7f69174090c5cc71b8beddfc3095456ed481f76be5d09c1a2975454a4b53db47fb741f9f50c92f84b0d89fedbf10c25d05bb74d361d2cdd73a21ef0a870da99a9cbf41a9236a3a89aeff0f3fc2a28f70410300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/87acd7f3c8b86d74889f4b52b50bcd8c.asset.meta b/Assets/SerializedUdonPrograms/87acd7f3c8b86d74889f4b52b50bcd8c.asset.meta new file mode 100644 index 0000000..22657e8 --- /dev/null +++ b/Assets/SerializedUdonPrograms/87acd7f3c8b86d74889f4b52b50bcd8c.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cbdb2d54755682c4da0cf723773c2f4c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/8821d475adab62348b44ae931489a464.asset b/Assets/SerializedUdonPrograms/8821d475adab62348b44ae931489a464.asset new file mode 100644 index 0000000..34e1a79 --- /dev/null +++ b/Assets/SerializedUdonPrograms/8821d475adab62348b44ae931489a464.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 8821d475adab62348b44ae931489a464 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c14c5fbf0e74e7a111090aa0469a143020114910e514a4c02a2a8104880486829142b76ec5db137ec5db1f7de7bef0d7befe56779776667b2cf6ee6b9dbbdbde732ebffc58f2cbbb7fbccf37ce799dee28399f52736c0fa6b362b6413d820368b95b2156cb9f5af09d67599f59f7da79e17b04aebbad8fabbc4fa6d00cb4af225ffd327d6d1fa3bdfbaab62d5d697356ca1752d17bf17b132ebdff9d6b765d61d7fbac8fabfcc7a2bd6c0fa68169bc866b219ac43ac7d1211b3c54755f2598cdb156b62fd3d9eadb37e2d134af140068b9f3a587f1559bf5489df96594aabf7e6b27d8459cbacdf165adf54b20a4be60221b1c9fa6226fec1ec4b4f79ed25af3dacff9bca7f6f25ffdd44fe1bbedf505e7bfb7cbf0ff8ae29f83727745182efb3ed6bec20ebda88b1f811e09e7ffbb57cafaf2d2fbe2481acfef23a405e074a9947fad0bfb1bc0e4a626f221983812c3fcc9ac8eb50791d22f53d2ac5f0736d46b1f3803ccef260a0cf50107653f03b7f9613c276158f8778e2f1103b1ee31b65fc6d91ef0f93d73c791d2e655befb4dd249f8d90d77e49f41a697f27aeca67ad30b75a29ef47c9eb8ef2ba93d4ed50a9ebd1e03eac2e2a4e474b99eb65181b34cfd5fbfcf763e4fdcef23ac6135fbbc8f78e95f7637deae3c7ff944e87c9308e03f716c706f313c852f17eb827de0f97df9e6c736c7087c71ee07f5ab9e3a4bce353b0e3088f1d47d8ba34cc76bf975407257fbc9473a4947b02b8e7724f0f685b03f9dd66793f8125cfdb7afaf86db22da789623dc50ea7513bfb792365b7f2e54949f454717b94276e8f92722ba45c65ff54fb3ea6380f0272f8f7277ae41eed917bb494abf288b13ef5cc97d769f23a535e67b0da74bcebeff2d96ef23a5d86b981b9f300954e7775beddf6e480dc12c5518127aefbc9708f4922537dbfbbbc36f5f9be7aa73084ce45f2dacc6798cde4b5384498cd6d5f68f2bdc717a6249139cbe6dba41ae860c9697aa0bc9f2daf7bc8eb1cc9ff788f1fa87c27911f24d3654fa90b037160e9d2acb5bcdf4b5ee7ba75617b7b743a297d3ac58e95324f06f7fc7a9c7c7e0ab8e7ba4a7f6df68894b98fbceeebd1791e9dce6cbefd5dcb16c037fc7c97c8bf4a6cfb9a0fb165372f96cf1778742b72f46e32117cabf4f0931e4a258b133d8c4f943a28b6659ef74e05f7fc7a82139ef8b7f56d0be55bd9e039fff63470cf7f5fe853d7c5acaecf72392783b04f9661cbfcbf858acf25ac6edad37dcbaf278167274979efc8efca59dd724cbdc76d3b1ddcf3df17f9b46d3f8d7e56b82dc726f8762973e73fbb3bfed0f805f9ac42ea730a73a72d19cfa25d20bf89c977adb69bb86fa574592ebf39157039d5d66f6b559eae90d72aa62f6757010e323d5a6dc3dab0bbbe219fad4c1096f455a6f452769738729a7794baab7cac86b9d38cf75dfe6cb5bcee2faf07c9eb81cebbd354fd7d9dbc1e20753b8db9f266b6163ce7d7d3e5ef67807bfede1a4776fb27e433d5d651baeae2f3108fedba3c20919fadb7dfed28f37176a8cdb6d53d1eb9cb5962bf3dcc963343c5b3ac53b76e1050ce11528eaa031d65dfb756faa8f6b1e22beb40b133982b2f67b28d123b13f8cd19e0197ff74c0fdf64ba25e2789cad676dfd5e95252a4f9b0164f7907a9ce5c4556d9def58f01bbf9f0eec85f625d245d55d5b26b1a727788f5f4f4af27eaa75fd46f2aaca888dccdde6d968fbca365d13c83a8d69fdb4adea3f39ddfebd8d4c6fec0c60130fe36c8775ad2fc9f88f9d03ec5675aa73c13355069e077ce96cf9db59e03b6ed3599edf370219badfcf063ae87e57cf659f445b55e73fd763cbd11e5dcf65ae7c869d57d756f10e0c5b85e9272ecf97df9eef89cbf365bc7c9e40d605fab86ca7d2c0859eb8bcc813971768e2f262f9db8520de86cb671769e2f762c0e102f9db25485caadf2f057275bf6f023ae87ebfcc1d97ed553dee72242ea1fe302eafa86b6bec224fd8e7f888cbabe4f54a79d5d57baf96d71152eeb93ee45e23af6b12c8cdf6c83dcf87dcebe4f5da0472af47f44d253ce5ebaaafe612e6f6757e6ff9edb6af24907503d3fa7a07d56f702373fbfa4dccedeb97b2babe7eb3fc6d9313ff82057f7619abebeb97033f513e7c0b7807faaafa7d3390abfbfd56a083eef7db98cbd73b8e95cf6f677a5f87fa435fbfa3aeade21d18b62ac713c5e59d1ece8aef15ccddceb9c28e9f8edefacfa12c71d978972d7fa6eab7ba5bcabb52ca3f1fdcf3eb559e70afb2c3ed24fbbf3ab793725ac8e703ece79dd418c33d4c5bdfea54ec79ef5ee6ae4fddefe1ff80c757ae71fcadd696fbc06fd0b66b99bb4ef2a07c7e1d88ab6bc1335d9d2b19d787e4f5610fbfaba5bc0bc03d7fef51a0bf8a6bd5663dd1f9adcd544ffcb6007a3ca6f715a12b88b3c0752465f3e3496c0e92275dcfdc79d2f5b61f7449d43ffbb47c27517ff5b3f2fa9cbc3e23e5dfc0dced971be4efcfcbfb1b3dbfdf287fbfd661bf6d16d043c9e6df5ce8c3fe17e5f5257995eda0d84dccdd27a6f2515d19916a3d36d5df56499d6e76fb8fb8b7e2613b9586c7caebca24fef1b2bcaa72a752cabbc5c340e5f189fab3928595c0aed8adccdd8720cb04f6aabcdf2c7fbf48dedfee79ff76f9fe6bf2fe36cffb777adebf53beffbabcbfc3fd3e7b03c8e1f76f3ab6c55479f61678a6fa6cde76f87453f9d55deeb0d93bccddbe536db8bbe57b1783ef2003f5bbac5bc6eef1d874afbcbf14dcf3eb7d1eb92abf7ecdf3bb927bbf47df77e5f503797ddfb171f70fc03780277bcf2d33a14fbf29653c20bfd904ee2d9fee96a8feafbe7d505e1f92322e03f7968cac2c5bdfac61b8acd8c31e7e0f82e7fcfa88fcfd7270cf656f48a0df5bf2dd473db63d2abf7dc4c7b78fc9ebe31edb1e9732feb26debde3a81ac0fe5f5234f1c2a9fe5f29ed4c4eb93203ef9fd1352872bc0bda5437755efff98e97dfb31cff757babfdf41a5295597fdc4a3db53ccdd17f699bc2adfd0f824fbc2a3fbd3ce3bb5fa7dead14f95234a6f559e5c05f450cff9f559e62ea35459f7a5bc7fcef3bb2a037563ed89d2481b79fd8aa59cc7d6ce29699344867a7facbc7e13224c25e3db1032b691d7ef42c8f81ec8f2637b5b79fd2144983f02597ec254f5f49f4284f93390e5274c5e97b77c7007d507fc957d8df13a18ccaff8bd954e7bc9b18e5e2a9dfe21affff3c8f9d323ef65e6ae4fa87a47a2fac42f496c90f95e8f67807f583af62e90f77fcbeb3f0c4f737ec3fa4deafd0273d7bb5e9061aeb7e5f65669ec5ff93b93d71821875fa5ac173dbabd68ebd6a7ab2db78feadf8e7b74db8a50b7df3cfc5e72de17b30855bb1ebe23e7e0c55e91bf5f0dee955e4ddd3ac65e656e7f7dd5b63d5b8ed964cb78893542f47a2d805e6f78f4527545581f6cec897755967fc0dce3c41f103086b634416c51bf63b6bc0e64bc6eb3ec2bc79262729e43acb9c646e83f6fa5cfb76b7d1cd6c3bdf1a4de51f1f4b6c7b6b7815e4ddd3ac6def1f8cf3bb6cdfde6d87af7976303b116885eef06d0eb7d8f5eef035ff0facf56e0377efdd0e33f1f123086b6b4446cd93a892def0119efd92cfb6fb2f51b20eba9b156f2aaeea1add08f3e086f634cd59f545af9d991d553f667c5543d43f1f811bca3e66aa97ac15879fd1ebca3ec90fd6e3dd498e937b6fd031ef17c9b4ce7f6f2baadbc7608ce2726f3bf81aa8de2d72712b5d53bdb3287b7f3f16e17a62da307cabeea816fb8f58a754ac24496653d557be127f9fc23e62efb3eb2c319b45ede6fa7ffaef6fb8f9d700567e8f3ea9dede5f553e6f679d586d802647493d72c8dfc8f13f8607779af7ce407201bdab7c5b66ff07c79bf83febbdaef3f49609f7a27997d9f0119aa7d94a591afda6ebaf4d353fa83f2c76f6d3b86a83ec85e1e3fd5a5afde9eb03f0761abf6e0d7ce773d949f8ef5e963724e7fed3c138dac585f79edc7b4f5e7447955b2f013d6d7559ef0858ca36bc03dbf7e299f5f0bee2dbe43d5dc17b95620a6cab381f2fa3b73e729aa8fdf6f3b55e54d2a4ebe92f2ae03f75c0fe5e772ee0eff545c0727d1c36fdfabca2b559c419d403b36f63578c6afdfca70af07f796be39aa9f628847dfa169d2b793fcee3b29e70670cfc37fc39691abc2cf91d75c791d96263de47ca5d8f71e3dbeb7f5c89d2ff5506368c33d7ae4a5490f15573f30777ef783d4e37bf01efffd46cfbdecab8f8db0c39a20e781c4e45a89496a9e97e2fea3fc4e8e8332996fab39edb19f98bbcfef47cf7335f6abf8fdec91a7d2eb2ff2f92de09effaef2bd5fe5ef9bdd7ac4547deb37e61e9bf9d9f3dccf18b462abae7f30771afdc3663c7c4e02591eee4a9678ee496facbbf38ced20bfbb35816c556750eb5614bb9d1cdf2954bcd49a1675ffa787cf9fb62d79726c2ea6de53eb4cfcfa63374f38ff93e16cf0e8f897277efff27cf7b73b7e851ce8677f83f0f87b72dc2136c6d671949a23aafcf61f96d86fff656ebffdc7f3dce3b7bc4b40e7b7f198db2e710fec8ac799d66fe3b28f21be953b5e4438f0b90fbf8ded12dc1fe20d3ce136b0fd61a49af73e363dfe106fe8b15f716be4e1d6c8f35d63f777f186eef88b3706e1417f18a7f787b86ae723fe106feaf6877813cf73af3f3443fca1b9c72e35275dd9d502f107d96e8eabf6e471201cf8dc8f3fc875494cd55727387137f109b7beb5e16f2de5df0eee415e156fc55c79a1b8b7fc654755fecbb65c6c92476e1be62aefe2aa9de9d39f941eb572ee70cb896f239fabf1ca1dc0737e6d2d7fbf0bdcf36b3bf9fc6e70cff59f2cefdbcbdfef01f7fcda563e3f1ddc5b1c769a6fdbb2d38d9e70b695efdf0bee793872ee7abc83279c0e49c291fdcab1a9cc557e6bd9291d3a4959f7817b7eedc86acb9fb8f2ebcecc55bf11f756b8a3c7dae18d966da258bebceeea89a72e9ef8ee122cbe63bbb9f5d1fa6e22df976bbde25da51ef7837b7eddceed4775d2c1f69e7420d350bc9bfb3b21473de7d72ce61af713f716b79d8f4860eb74b7ce31b02e6de744e39eaabed25986d5dd1367dd65d83fdbb2c628f972fd5b4cf6ffc7e49ab1784f4f9c29f93edb36426ffe9daac33ce079dec313173d3ce1dee10e37de8bb9d2745ca5e9def2f983cc9dd67b797e97f3986285eeef03fb925cdf16efebd15fb66de3fdf4be14efcf5c6dcf783ff09c5fb3e5ef0f837b2bbe76d9e29133c02347b649e36afdfa26700fe59e0eeef9b50f73d2791f3bacb1aaedde5dda9a057ee7321ef1bc3f5fbea7d6eecc9257b56e4ead437ed4c36e90879d6cd7c6077be25eb66fe36aadfb9d1ebd86021b54999d83f8c310cfefca1ff660ee364ea2b4e5e5328cb9cbbf61369771b2ff7bdc95eeefe26adef263e09ecb93f5ab781e73e7fb799e704e07f7fc9a0beccf9561bf62873dbe85276c35eff67170cfc3de137ccf7f7fc22d6ffc109c4b4cae498cc935893135c7d613ef41da57f1911ea623a51ed74abb549fa8372eb0efbec77588edc39296975e3de3a398ab8d2deead70264c93b2d458885cf3c83f1557b9c62a3e96b9f3d5b152bedfbab4b76cda91b9caa6d87cf9bb5c33155be0f8486d1eb2137826eb1ef1d1e09992bd3378a6ec1fe3e859a8c6b64ae46fbb38efc7c700fd947cf50e97d701c423d7ff49296ba1c7a754ba0ce053f171f25d35ef64827c3e1ee8374e7eb31df88d7fa3e6b274f6c8527357cadc32638b1c1e93df49ae5baddc09cc5d3e4fb0fd68925c473349f5b52d96576ff93cc5e347b2eee8bbef51d561263a4c622a8e27014e13c1337e9dcc5c7d7ee2ded27bb25adf22e7bdc6cae575bff4e81b5bead63b68b9cd649d333e95b9f3d2a9b6fe535ad8b2a6a8b26c91fc3d5fc36757e7593c1f3c83f2aff7c85f9b4047550fdd4d7efbace7f934f95ccd83523e345d3e7fdea3f34cf9fc05cff302f9fc45f09e7aceaf33e4ef47817b4bf7a9733c727677cb8fab7d06862696937fbc474ea1471f55372b96cf5ff2bc3fcb13aeac6fc467bbdf8f1783e7fcba87fcfd65c0593d877c5f015cf9754ff9fc5570cfaf73e4f3d7c0f750ae2acff792efbdee91ab9eab713c9dbf276154cbbac8c3bac866bdeb16e68f1dc67aae27dcb929b29e069e431f378835536d92bd99bb6cdfdb66b91baf175b79c36e2a0f56ebb2a7b3c46362cb3df2f761aef41a57fb2368d635c7e4faed58a55b866b0eaa5cf31cdfd7f9be761ea79abfb9caf9ad48b5619681eff8bddafb48e52789d6b8ea9ec9fd32e2f33cfce6d9fca6c9f96fd3d4f8bae27740127ef2bdf87cf09e0aab84d5cd97415d47fcae9ef1eb42a9db9be0ded26dfad71eb9a5f2bdb740d8fc5a269fbf0dee613a5cc45ce9b056de12a0d32219a6ea2fa9f284b158ca38c3e6355d8d475680df9b023dd53325437d0bc21757fe5cce9f9fb6c91d66b238d0f621954b9927837b7eddcf13fffbd9f6ce90f13fc33bffe4f0c4612bb931b9bf407ca9947f11b8e7bfd70079a00deddb9e0a8f3d15ee70857cfe7b8279f931b567c1ddc17932d53e96eb35e3cb6578ef827b7e5de6c88ec9fa447c05f00995ae5732577f73ad8f823d1fe2abc0bbfc5ac9dc7dcc9576dcedbec9235b7d5725df7f0fdc73bde47e0cf16af9bb9adb94259fd7001daac1337e5d2dbff900dc5b3a145c69fbcfee072261ad91df5d0dee61986b99bbff62adb46d88fbfdf83af9de87e05e3186723ef2c8f1e815df1fd8a8f6b0782489af4baeb56302ab64581b6cdb67aaf640963f79da672a2ea44ef1033cdc6479c2de0b2e3ba6f6c953cc55be731db8b75815aa314035e6b62373da93177964a9b6ed2d017591797e6d7a52fb457e0ceef9ef2529d8a9fcff60e6ee6f3bd8b6af48e5192a0f49b2be4bc98ba9fd4b942fa9bd11b7807b7e5def6622ee611a3f94b9eb8387da7a154ff4c839cc23e7308fffa9bc74b3e7bbc3815dfcf74fecb82b9ee3b127d0bab6863131ff732a2b63256c251b2c0642798faadf6d5cd597c937701563af624495f19d5c79b0d56c9df569996e17d559628fd66a96cb72b4bba87612735b55e813c4df25d61be542e8a7f13a41dc592708ae5c85f55f19d802b6ca7a3e45ec20cb37812db77e19c4a65957fed57c2baae75affb9a5ccb682ad6035d65db1f5f74a216fbea576dd379399c4b78bf57e5368c9b477b35d663d5140575af71542c322f1f76aa16999d03edf7a562df6d65dce16b3f1d675ad08adaeed95d6bf7561164b647a1df59bda62cfedad7355344db4ace1da0f16bef8ff63a43e62444c65f854a6c30683791a11dbcbfd7f86ba4c864f74c89732860a6431d7b31c3658cc8528ac4330b88d752dd4fbb7cd3b8f0d4b688b9e0c8fee2ec202278677efbde1cf552facbab4a1dbb45c36b81137ad6b12d31281e5f2b2c58cf02026346cd8600857d48b3fa6c32fa69e146510bffd5eb9782f78043412859f3b02c4f4d6622b572b0085e72ca17c85504d6f8c2a8af3ad7f9558ca9459f9eb0ab6c67a56615d4bc426e595ac4eac0ee12a34161153b7d84d661c1635715dd488593bc5f59232b0cdd713474e935a2b9cc8192cea521d13b8301696a8643590352d95c80e6cb560ccd91dbee8fbda8b3fcdaa98f6e92ff7dc3a7379f1295f6e69a88fa766229e52091d8ba9ad7431d52cd3892879a991289e9ad7dae5c413ffa367d802f1f5643a60041be80836cfb4aff3df56082925d6bbc119f2296cfdbd19911ee0d6881326570143d85083700847d84aa3156bd8d4a315570891dc4817392deaa7884ecdb9f93cb10e1e040d51e76e93b0840deada8d75f4c42689f349e9a99663915584ed66fd5662bd5f26aaa1fc798125b1c40a9bcb1b2742705a9bee2f1293e5b310077ac96aa9b615547b82767058cd30e24d34c487707f6da7710391c77913431b3c3134c59259fbb0c9ac192679dbb0929b63923b8495dc0293dc31ace496ba6423e660ee9d9164e374b8a87f8db7be5d6219b35ab4a26bacef751d3489934b27dfc9a5b3482e594cd76d144c232c996cad8b3bfeb08b4e496fd475c6a3ae1526b86b48c1ad316fdb2eacb7b5d149e639f7f67e546e8c0bde0653b95b5895db6294b342526e8709ee1e52707b5d926e95b924ad2f6f6689125c55f98397803b304d0347782a4cbca9862d6716db7f1a232d9a9e75f28a5483c3f28a6d75512712cd12d2a89b653db3bb9f27895fcb459fe52036ddd2b79ad9bd971c3ab7077b5745d47471c8588dd0227194f6f29d4bf716e4795f0395a6588c74d0c588c86de6653031e5bafa4a788f6099f56eb5288bca44857991f5b5d7db7293f0efe39b7fb6e0dfa38ee7a7aa1746bba38eb6c8814beac5ff793b9b37166bacdfaac59789fc8abf9d98785fdfc4fb09e2bd12787c70dd30ea9d742511a7dedf4f49d40f2f893aeba2b35dfd6567858c0fc6d89d8b65b21a97beec6c80efc81d98343b0bab2916d55db07ad2204d3d2916a49ed45517d7a22ab2b85ee29a9f85b950248c4ad99390be98e66b4cb6f2d64544d9dd3f419c86d3c8aa76acdf45fc85d44e8608a7a2530073a9ed742ec5abea7cd0a9ce7801ef3498274a6b1e965d5e04a9e86faf7333514897d78b9bb94bbc1cab7c4bafabe5f8ce547245fc0f4c10ffe175c57ca09bce0778a7055f7514b62b284b17e5a2a6b0a81eab60f6af8907b08256c886fb8eec3c11d9fd9256c852d3128be6eeba9810b587b27a8c89fca456068d8711bee361a48887be49e321151db158d841170b9de92bc9752d9c281a5d25e05f1385243501a6c492b42e30fd514cd3d21715975e5acea96a21670ada7fb036ff4eb5f5f0f4058c456c0f2c171d9d865cb4a74e38ef0bdfb9f66547f8bfd69f3ac25be0c27b619a8fd1683e60413c90e6bd75c2799d952fef0bd5b7d707933c36ace46c5d1a1555e44333924693cd7d9c228eae2f6333d902b69fac16aa7057880a00d7484d7ee3ad9145cc6e8b2c175a249f3399388d8fd3a57151939c04925afd5bc15778c6454630416404831254af74da04af60e9b3a1892274b3d860d9585f2ca799a4c969ded0656309729a7e58929d1c36c9f6d749e649768ac65787705fe5cb349b898ef83ae14cc4c319a0cb1a44b366ff7acd1aec61772e6f91988e6ccb9b615dabad8a0a77d5a5560cae968e532c4ab7c5e2d7b099015f0ebb9db7a128cb657d72d8552487313e9203a555580218a8f324dea6e5eb0febb488794ba690155892e78964b84a3ce694ecd8b5fbb3cbd9fea28e61d72c82b49807e9b4e1c3be7c5564d2debdb6b8e0c198e0e921050fc1d2f88cb0697ca84e32cf6df8aae6b035ac1c4ced82b06ae76239eaee9a1cf5af58b01c751826bc5023fc9e7830e1c3b1a450e4c7471278751e26b85897c678fd748298ea9565fdbfc2fa224b34c478eacf1285a1931b645969bddcfa57b5acbbabf7ede69a98971a40cf119853cc0aeb1423b1789bad89b79f03c6db284cf81e1ae153b70a267c472ceee6e8e26e28b34b455e2d5922cb36776e98c5f89a8a2cb18ca6468cafdacde92a11af59ec002b4739c8baf29ecf2c510e5488dff8bf794cf3bc36489cee84e9bfa74eff6640ff02a06190104763f9d65e9a7c2b1630dfda59279c577ce632a4e2c3e71104aff88cc1b0eda3c3c6c39964555f78cdb546bc5f241ca0acb6ae5c9aa60272178d5e83458fe672569f1532de5ae08b8eaac4bf9d2a0a0fdb99e61ea6e2c5d7f27b2b5eea8fbee2c507bdb3c5dec899d01eab608dc532d5f99a4c35d028d6389d649e164ab0b4b020a5b4305ee773594cae81ac3f9fc35354a190cd535ef80a3fdf47a1cef899e85c1ee6c3b3d2a5637f71f6077f7fa12457c533d3a62252d709a5f9eb367c9124f469a254a4894c6a8ea58b0958a95da629b537370c566a4fd4b9ace88baeac57979d282464c26d17e9dc5674dae6f988fc74ead94d8ca356317b9240b1e4ccff74138705d989accc7ace335ef87b7f71d00caf2f4d16bc9709f2dc3e7b580273f2c5c2c9336d27e6e893b0026089a6000854ab9e8c25a1724d12fa2b60129a82a9bd5f58b5a7626a2fd5a87d60a3606ae763c22b34c2a7350e267c579d709e31f3cd43c2b41077c304f35a5d9dea261f1e51ed84859e96e202d15650edbf52f1649df5371fba5b2844648975c66a3945102da7616c5768d8b60ec8763a86606548b6337482b97baef22338c1dce5993ac15d993c2e5957ffe2fba704af7f1560d8ab35d82f0a887d772c99d7844de68598e4d56125176192d784955c8c495e1b56f22c2c12d7692291af280a1289b331e1fb6b84170714be0796300fd0e54dbdacdb71a0926a379f9c7e8d12ab66522d729e2ccb11ec32b7d4d53fb248ccb7b21bcd41d2f91c4ccf03757adadb9af019eebc4e5122fad0788833ad522848a87b62e80fd2a03f3e20fabd30e1076b847f1e50f85c8cd7213a5e1d93c46ba998a9e53c1d6a3d0dc2716f4c9bf53a6df8ad136f41c2d907437aa806e979cd8221dd1733e2309d11db30558cef68219b213afc4ae4948cd5a2180f8e711ea6c1e13a0d78ce36adb662509062b5603e86f4080dd25702222dd109e77a1f1936475e80a97d942ed36c1e4ced8598da478755bb542799d73a3630a4d6710c4ba5d6518685732c16ce712985b30823757c58528bb1083e4113c1635b048be02598f01335c20f0c28bc1c137e9246f8230185ef87093f5923bc6bcb60c29762c24fd1082f0d28bc02137eaa46f8c680c29761c24fd308bf32a0f0e598939f1ed6c957606a9fa151bbddd6c1d45e89a97d6658b55769240f16d3fe32b93d8a77f653b01d24ce627e67def2fd70755ba3240b1feb52aad4c50b2fa1cfd6a914a028afc2bce91c8d376d099808aa31e1e76a84ef1dd0556b30e1e769846f08287c3526fc7c8df0d6ad82095f8345e6052123732d26f842866c8e5524525699a8ce9789ddc6ec755dcbc58e8f6562e0ba44f8bed3e1a406aef9f67559d27b2ba54f5758de3ec87a1a44eb7598d617e9b4e6f50ede89ebd49beda6a4dd0cd1cd2bcc627d64adbb4f20bdf6c77ce0628d0f6c0ee8600760465f12d2070ed4e5b3bd583d2e41aa141d965562b16da5253fbd4b902ef59d276f62c9972085d515cbbf0fd24537af5b5fc690baf5e5d6ffcdb8ca81ead607633e7b85c6678705ccb70ec1845fa9113e27a0f0f598f0ab34c28f0828fc509d705eade1fb4487aad61c86a97d8d46ed6702aa7d38a6f6b561d53e0253fb3a8ddaed5a0753fb482c6fbb5e97a1f34a829f4e912c91286b4401c58b9802666f9066cf95e28b944ac52caa25e2be408e89965805012f00ec5d20e789ce8fc5622cb1d27aaa665dad63f6ce3959a23a66ef899b25b2825239176fa97852c56a6461a8c2d11738e5b2e0844554d0decda3b028ba4113453d0346d1d15814dd18b2f8d98009be4917f77c3643b175b3d2152f41c23b06cb586fc63256be3d78f04e8b6331bb36ebece2d134b7b6a7d4f6df7d02568b8ec3e2ff565dce1230fe8fc784dfa611dea04d30e1276071723b162777a4142727eac2e199de9d7e9c38c138df4998e0bb420a3e19f3a2bb4326bb5330c1f784147caa4e308f7b7ed2af776e271710646ee7699817dea7f1c201db04f3c2d331e1f76b844f0b28fc0c4cf8031ae12b030a3f134b3f0f62e9e7a194d2cf5998d33caccbd3f8ce28f3acfff8904385c8ad55195b6e3503f82f2b4553919787413c6c23a6c5233a2ddad66a31c4fa9b97bc7c6cca9e1d94ba0e67633a3caad3611ba943aef5ff42d118e2dff0bd0b52d7e01c4c83c7741a340171a1f6310a12dab998fb3eae71dfd16d83b9ef7998fb3e81b9ef9329b9eff958d6f494266bda2a60d6740146e8690da1df0312ba1013fe8c4678c776c1845f84097f5617b701855f8cc5ed7358dc3e9f52dc5e8225871712654d3969ce9a2ec5b4783171d634348d59d3264c879712654dc3d298355d8669f072b2ac690f115eb0f50e9763eefb8ac67d9bb40fe6be5760eefb2ae6beafa5e4be5762c8f8598e61aa63576174ded0d0393d209dab313a6f6274de4a89ce3598116f6b8cf83aa011d762e8df0989fe3a4ceb77355a4fdc3698d6d763e8dfc3d0bf9f12fa1b30233ed018b125a0113762c23fd4086fd02198f09b30e11f69846707147eb34e38c7ff31867f4b4af86fc19cf31396a058cb4d73b1b619d3e2539d164eb19693c662ed564c87cf743aa8626d781a8bb5db300d3ed769d09439c5da2431e0b522604fd5edbaf0b8037fa171e09f033af01d98037f8939f0572939f09d98115f6b8ca8e818cc88bb30e1df68843f1350f8dd58747fcbc2950bf7605a7fa7d17a74a7605adf8b09ff5e23bc34a0f0fb30243fe852009f2990b89fbe6e4f6eb83e7bbbdfd4ec5efafbb108fa511341d50123e8014cf84f1ae11b030a7f50279c67193f6359c62f2965190f6146fcaa23d43998110f63c27fd3089f1350f8233ae1bc1bf8773f5946826ee0473582078b8dc4ea678cbeeece4be91da3ff43c74b3b46ff274b36461f5e576c8cfe31cc97fea74b6d017de9719d703e94fb170b3994fb0426f9efb0929fc4ca877ffcf87f824cf3299dff8bedee68f74cc5bc24cc9e68893dff5fdf9ecf37c6b0f74ca5d012f3f9a731e789c5423acf3398f3c463e19ce7592c996e15ab9b4cbfef122c993e8769dd20a6a912f10dc4c789e650995896a25bd09425aa4b5901e79e3d8fe9d150a707df532598fc1730f98d42c6ce8b58ec34d6c4ce92aec162e7254ceb2658ecf034b2445611557c94d5eef791eaccc09731239b6a8cacd82e9891af604636d319c953a09a6760d767ddd3348398f52a1672735dc8bc4d6ecfaa195c7b72cce0da4d71665a09429e931a4083d7300d5ae834e8a0d5609af857b5d841c0aef5a7b66eec754c97963a5dbaf8d4a5ee695d41747a0373bcad358e77fcf6c11cef4dcce05621f384b730c1ad430a7e1b13dc26a4e07730cedb68385f1b90f3bb98f0b61ae12bbb0513fe1e86a45d4824efeb04f3dca7bd1fc1091a431fe804f376e8b631a41dda21964a3bf4430c7b470df6a9dd8361ff0833a2136644e7948cf81833a28bc6880d018dd88209efaa11be798760c23fc11c733b5d76ca97a01732b84d4ca9a863ab8c3c9bf51505de72f9b77b154296b873ce0f58297e51596e9558a5902532666719b8dda9c41734aff4d40c5438bc33c92e6217d566e75922332f0d38b5ef538cc5f63a167c974ab8d79c5dcb740a586749f61aa1a17d1e8b9a34bb441441594925e4586f075db9f119e630dd340ed320a0c37c8e25a92c2c49754f29497d8119b183c688ec80467ca913ce89f6d0c5345f7da7ef229d2b3b57f9ca17debab0b7284a14a7d9097fed2ba6a3daddaa8e5fbb53c00ae119aa0bd5fd5bb5f0ab6a4d2a5a20345c013a606dd92b64eb34887f7d85d1eb19b230fb1a13dc2ba4e06f7482797bba77d8f6f4b798e43e61257f8749ce0e2bf97b4c72dfb0927fd049e6eff70b591bf91113dc3fa4e09f30c103420afe19133c30a4e05fb0d81b1436f67ec5541e1c52e5df30c143420afe1d2b24866a0a8991bd8215127f60c27334c2ef0928fc4f2cabcbd595407c175cef56d4e5b29fd1d930cf2e9916b31259332a151fabf2c45bdbca922547b5e8a3e532b24419640fa1ef98722fccff306cc334d8d607c4f617267cb846f8cf0185ff8d09cfd355397a0713fe0f16e1237411ce67778cb36e2a45a5a354548c75111e6c54f45fccc0911a031f0968208b21068ed219c8332ca7836c39d8822a8841312ccc1d75617209abc5fae935814289eb42e1d876d2609bdf2718b6ad301346eb4ce0b7cbc4004299f52888110db07076d685c3a760db275accb3321e773691da3c9b8658f86374e1f33c9fcfebe1ab0992ebc1dfac6441fb551b61d1ba8b2e3564078bd6c698b96375e66e0752836a19fac99d8706ce9d9b607a8dc3faea15fe7c4babd932f5e487ce8a9a627a8cd7e9b1bdc61d92eb939a5b34c3dc6282c62d2eea1bcc2d9a63664fc452817b14a124ed65420bccdc49bace82fec1cc6d89993b5967eeb61e6f9b5e9bd185f7b7ad314da6e834e986f85b328d52f3b85658144cd544c1e701a3a03566783e1605fa71abf09ed6063373578d99c3060433731b4cf86e1ae173020a6f8b099fa6117e6040e1ed30e1d335c28f0f28bc3d267c8646789381c1846f8bb9d64c9d6b0d10ef799d08db7094f779ced26c6f69b76516cade387e5ac4ca80bd571d30ad0b745a73f379ef9e2ebd0709b5231611bb6b22a263c088e8a413ce6bd88561bb043a636a1769d4ae08a876174c78b146f8c680c2bb62c267e932d580c2b7c384cfd608cf1a144cf8f69883ee8155d1545185396a6ac55237ccc8391a23ef086864964e784feb764f3f5d421b71c1dd31adf7d268fd4440ad77c084cfd508e767dd0511de0313beb72e390414de1313be8f46f8950185f7c284efab11fe4e40e1bd31e1f334c2db0d0926bc0f267cbeae691f50783696904b7409b9932c6906062a258324e8be98b10b34c69e1ed0d87e98f0851ae16b030aef8f092fd508df7b6830e103b0682ad345532fe6ad21f32ff8f09b73f25f9698166bafc5e2c3bf3cba7803de3e13421dde1eb4fe3c10d373914ecfa6e23da5c52cb1956555a0f00661d0176ba06f09087d3066cc129d317cf5729128c0d49e82c14c19829952aef3fc9c60a60cc54cd94f674a4b57bc4c67f6ea1675ee4d10a37230a3966a8cea9a1bcca85ccca88a64bdb9a94f741c8685b94c1726afb51678c634c68b51f56a16f434bfe118cae51a949b02a2ccc3cc5aa1334b34ce98bd8a3255734660e6acd498d37a5830734662c257e9eabe01858fc284576a847f303c98f01d75c2f9fb55b1f007f9eea413decabaadf653a1ed890b1e8d21a9d1759be40543b233e69bab75bed94af8e60ad1342f64d344e9c7cbb145729143b0f26c0c66d81a8d616f04346c174cf85a8df0ef4704133e1613be4e237ce2c860c2c761c2f7d7355c030a1f8f093f40d780d93198f0093ae17c36f8817e92402e2e7822a6f541bae23ba0d693b02470b02e097411efc1f14a9518b2983df38aaf81ab92f577bbc66e978c4192c6648d4e83b3addb183f9e85fed8c422ab25b29ba5223f988f5b5502fee50cbb3947f1a9f713afba3a2416f4e4d8f5313edd294b7c114e336ca5d5141de9bef54bbad87a932f995e6efd6b9dd8fd3b28e94335a45b25247d982fd27e34c3484fc512f1e19a44fcc24ec112713e26fc088df023460713be2b96431ca9cb217a6872886a59a1530be0ab58b58ca9529625e765aa7c64c794728cdd3000476900dc1310c0349d70de5f71b49f8c7d242e783aa6f5065dafd4cec1b49e81697d4c48ad67625a1fabd17ae498605a1760ce769cced9f8a08abee1659f65bf544c0d5e593b8cb25264472b99bd30729de893b04fa45c5afba56a620771bfdd31ad8fc79af3854c1d6a50c982ae472bc422e0044d0434d925580414616e736248b729d609e633e74faafdc13373fee4582a33e7676171718a2e2e1acab8e005d5ba40b1305b5774f295d2193d3aa6487a6b852c8c821d1d736a8caf8af056492e1aab2f244f8be98f8f49a6035624ee81f9f1e91a3f6e302e981fcfd1454f7f1e3db4bb59d4ad3f38dd5d83e4afce9389f2885cd5296aaf25aa4ea1ce7386a6ce633d127ff4d179664ced6a41a73316f57beaa29e279eb3b41eb97e973a51cf9d1111be1796d36cc4729ab353ca69e66239cd395887dd2ccba94a25ac02e1408b45e45505ecd0dd1bc377ae16dfd8b141f0ed8325cbf3748de409c192e5be98f0f335c24f0e287c1e162117e822a435e343c7e5a85f073e7f1233ed425dbd686230d34a74c2b94b5de4a7584eb08660814e30dff5e7623f82ffc4052fc452e125582abc34a554588aa5854ddab490352e485a28c3e2f4324d9c4e9d142c4e17611d469787ec305a8c697d85ae6b31a0d64b30e1576a846f981c4c78399682afd2a560be4cc09919e56e63a63e0eb31fa6c3d5582ee2adcc4f163f5758559f12d1b40812fa520cef351abc0f04c45b819976adce34c634d213a8be0c937e9d4e7ae3dac81b9cc201c3cb314cd76b301dbf5b304c2b30e13768847f1e50f84a8cd28d7e527d0224ab30c13785145c89e1b85983e3998038aa30ad6fd1390df7c9c18194afc6e46fd6c9e71380eb6e18395d4c7550b3319d5f820df8d4609adcaad3844be06d8ca091b51a0be5365d2862baa1e610aa2021aed1b5b478cf4c6c7796b98630ec910dd608be3dc6b748728311b5106dabe90ed16a6a5fc7b244e163ada0b5bab8e2b777c6f8de196e95769d7e68e3f3ba3e1baf13350df1a8598739c35d3a67e07333d45cc945d6c379ac5a1a157461dafe58b877ebc26d8586bb9cd91b5a0409fb009d3b0eccb43b4e100b992a5370c77b627cc1bf1bd120c419ef459c3151e898331ea8e33688739b97416ef67b76465b6449ac10438933c50c337b40b12a05a6f7693a47d41f3dd9fb05d91e752c4f553ff4084e5d4ae1f3891e88859cbb7e3026f9c1b0920fc1243f1456f27a9d645e797838167e8acaa158a6f448c8fad161188f47c3f2381c93fc5858c94760921f0f2bf9484cf21361251f85497e32ace4a331c94f8595bc0173baa7433add3198cacf8455f9589d645e3778d68fca6d71c1c7612a3f1756e5e331cacf87a47c02a6f20b61553e1193fc6258c92761925f0a2bf9644cf2cb61259f82f9dc2b217dee544ce557c3aa7c1ae673af85f4b9d331c1af87147c0626f88d9082cfd409ee63ddbee94730c3bb5fcfc2ea036fa5a13eb011738db7c3bac6d93ac9fcfd77fcf048d0597f0e06fadd90a0cfc55ce3bd90ae711e26f8fd9082cfc762ef83b0b17701167b1f868cbd0bb1d8fb2864ec5d8441fe3824e48b31c15b420abe048bbd4fc2c6dea558ec7d1a32f63661b1f759c8d8bb0c83fc7948c8976382bf0829f80a2cf6be0c1b7b57ea3a21065bb7b1fd587d9cc1a03ba227bd67317ce5272e26e0c4aec2e2e2ebb07171b54e722febf61b3f2a6fc2055f83f9e5b721fdf25a4cf07721055f87a5fdef43a6fdebb1d8fb216cecdd80b1f831248b1b31c13f85147c1326f8e790826fc620ff1216f22d98cabf8654793326f8b790826fc51a5abf876c68dd8669fc47488d6fc734fe33a4c677601aff2fa4c677621aff1552e3bb30c17f87147c3786e29f9028eec134fe37a4c6f7622d43160fdf32bc0fc3118b87c3713f8623ee4770021c0f6059dc56f19059dc8318e8066900fd10a676c3b06a3f8ca9dd280d6a3f82a9dd38acda8f62929b8495fc1806a4691a803c8ea9dd2cacda4f60929b8795fc2496c85b844ce44f61825b8614fc342678eb90829fc104b70a29f8594c70eb90829fc304b70929f879ccdfb609eb6f2f6092db8695fc2226b95d58c92f619d29edfd604ed099f232167fdb868cbf5774827b5ab71dfc084eb0b1d6ab18e48e6121bf8641ee1412f2eb98ca9dc3aafc0646b94b48ca6f622cba8664f116e670db8574b8b73114db8744f10e167bddc2c6debb18e4ac9090dfc354ee1e56e5f731ca3b84a4fc01e6173d42fac58798e09e21057f8441ee1516f2c7985ff40ee9175b3095fb8455f9134ce5ec902a7f8a395cdf900ef719c6a25f58169f631ed73fa4c77d81091e1052f097188b8161597c85491e1456f2d75857f0603f301274057f83091e1252f0b7188ba161597c8749ce092bf97b4c726e58c93f6092878595fca34e321fbb1aee2702130cf1fc84a99c1756e59f3195478454f917acb761641a7a1b7ec5848f4a83f0df30d83b8685fd3b968dee14321bfd035379745895ffc424ef1c56f2ffb0381c938638fc0b13be4b1a84ff8d091f9b06e1ff6009725cc804f92f1693e3c3c624ef70d7aa3c21a4ca319d60b1217d1a40c731e193d2207c2b9d700e7b7258d80d30c953c24a6e8801999a06208d30e1f96910de1813be6b1a8437c1bc7bb790dedd148bc9696163b219a6f2f4902a37c740cf4803e81698f0996910de12835d1016f6d61ac9838758b7b1bd58e6b69919cfeca379d5662df67ed7deed58d45b892724edaef39298878858235518e76ba4b6176fa6ae0db632aa1516674561e3acb52ece86f238abffed259d2d06836e00546c59b59507cbe01c6e55569d180a1e761b21d9599969459bd62766c5836c59992844cc2fdae8fc82d78e6787ac466fa313ccdd620f0dd9219cac068a373cce0309af2de6e073c23a783b9d64be7fea9ef104eb20bd01acc7bb14da63aaef1556f56d7592f986a47383a87e18ae7a074cf5bdc3aade5127996fe7b28f1fc74cb09d4b279d60de17b96fc8bec8ce188b79615974c112e9fc9089b4ab4e302f6f4bfc082ec453e37698c60b426abc3da6f1c2901a77c3342e0da97116e6166561dda23b26795158c93b60896f71c8c4d7038bbe2521a3af27167de521a3af17568eed47538ef5c6c25b4a135e1fcc892ac23a513626795958c97d312f5a1ed28bfa615eb422a417f5c704af0c29780026785548c103b1d8ab0c1b7b83b0d8ab0a197b833116d521590cc1d2640d4d9a1c8a65bfab4366bf3998216b680cc9c59c686d58271a86495e1756f2709d64bed5edfe41eacc67e275e63c4cf503c2aa3e4227996fde78605cb779a3467882cd1b47626a1f1456ed5198e483c34ade11cb6a0e0999d5eca413cc775e5aef47704f5ce3d13ac1bc2fee503f827be38277c67a040f4b438fe0189df08ed6ede17eb4cec305efa2eb5ce2195c6c7f9689cea559ac54fcaea42d9377f922242e8f9fa0a8e4e5d7be3fc90aa74cbcc377b3e4bf978b27f034114c7ae28ea9237c77281e293a8fc63056afd6601d4f63b1c2faa89085f5389dcb0ce32e5343ea32d82256efa97c059e5313c6337566427a97c21eeddb5136084719c5583dd880b9c7785d2c0ee7b1b8b85e62b198c10d71d31b53c7f88ea963454cf54f1053e1f4c462630256421f17b6849ea893cce7691def271b48304f6b1226f884908227632c4e0ccb620a96259e14324b9c8aa97c725895f331caa784a4bc2b26f8d4908277c3eac8a7a5a18e3c0d137e7a1a844fd709ef65dd9ee107c9263c126760ee716658f79889553acf4a43a5b30013be310dc277c7849f9d06e18598f073d220bc088bcd73c3c66631e6dde7a5c1bb67614cce4f0393d998e617a441f33d30e117a641f81c4cf8456910bea7ae92c55b63f554c99acdec3d6178c52437cd95ac8b353d5c8347705b1355a7c26994c523c4f90b19e4bf2469a52e9c1658a56e2f9d6bf1d8bf54d71938c2658ab4c7eb6b97e03d2673b1f4bd290de97b6f2ccfbb2c6c9eb70f56e85e1eb2d0dd17abec5d11b2b2370f6371655816f33195af0aa9720956d9bb3a64656f0126f89a9082176290af0d0bb914837c5d48c8655802bc3e0d097011c6e386b03c16633c6e0cc9630996b26f0a99b2cb7582f9b62437fb119c605b92fd30c8b78485bc1483bc3924e40a8cc5ad21592cd3555df87999b1a5ac3eaa2e4ae60a71cf439b2bab23e9abc2dce6bb9fe87651a5e0b39469f5c5aa16cb75d1ce63e70e3fd17e3b5e8b58a113cc6fef8cd73de343fda9134043dcaf5662b9e45d69c8255761c2ef4e83f04a2c77b8276cee50a593ccdfbfd74f6c2658165cad13cccfbab9cf8fe03bf0e2b906137c7f48c1ab31c80f8485bc4627990f143ee847e504d312d7622a3f1456e57558627c384d89717f5d007c8cf3113f4c129ca6780006fbd190b00fc4603f1616f641188bc743b2381853f989b02a1fa22ba3f930536c16ab9f3370541917ecbc9b277d97bb4f8972b7531debfce88095a5ebb142e3e934141a876291ff4cd8c83f0c53fbd934a87d3826fcb934083f02ab0c3f1fd71cb73591a9f175f7429c198c9f94b94644f05219f583c4c15cf9d6ef33c5d9b8dca5f9137d954bb75b327f1bba1677fc15228994f0b1f60035f323312b5fd0597954ad956a941f8ef1ebe60ff8993d3048da639ff739c10a8adbc5e5bae93912f8fbc1f4c02415337ea4d762f1ab9b294cac5edeb32d39418f6f3b0a23fd22e64f3044dba65ceb1b9b161f769f67f946a58873dbda627140d9f23ada3adfe2cfd3e54f476356bea4b3728cc74ac8dcb673b288b165c246af96ee1882bf244a2bf0ab20966dc02c7b5967d92ebee26f9ce543a522cddbc79c858f39e79720b61d83d9f68aceb63c8f6df6b49025d2327eb7b6de2c3916b3e4559d25c767383f73be99685d2b2ca9eb183ff174b2f5959dcb5705f072c80eb782972535a29a01733d5ec14a5fde761c46fd351df571bed2c63441a3ca885ced78ccbed775f64d23f42afe749508865b655787edc958e56c7f910ef539492ab17a0266f51b3aab774e6835ae69a1b0857724554b1b5569cc9f2e9484eaa68bd463f344ccae377576ed19b86657247e71d7ed7412ec6705b5f940a5551ef0a64e989a602af17c12c6e32d1d8fdd3252665397e6276336bf8dd55382f980f2e1696242a43d59d289e7a01e11c4b25330cbded159b62362d92c913e2b64ddc46e6aab56cb6c998a4bebc4064d1be554cca27775164d26cc7d55acda87282f10d6d4a590baa5a76196bea7b37434c33af6753985db8212f1ccb68e33992a62b952b486165a25eeba345a753a66d5fb7eda04ee70610d619688854aeb5d9e0e172728fddc32d267d91998651fe82c9b9034e7f4d72ac0f3d0446dd65473ca33311b3fd4d93805f5495ee35d60bda46ce539e362eb8d4ad17d5799242fd1cb4c7749781666eb473a5bcb885b0fd57282fd62d93a982dbcbdbc36e7494f7b38154e1b314e1feb38cdaab756566242e1399c8d71d8a2e3303e60da3021459c8359f889cec2fc8016ee213c7a391223f561efb998bd9feaec2d24f4ecaa14ea1ae920701e46e0b374d541ecbc6d1ca881d05b753e66d5e7580f4550ab268b37eac69037cff12f37887d1760f67da1b36fa71035c76a511a2db7ec5b24db79b855c575de0d62d385984d5f068b336fde334ef427d88bd692791e65e9711166df57987d41da8cb6ad53643dc2f9958f7824ae1da6abe6783166dfd73afb7ab2c4bd827c5b330a2d2fc1b4fc2671df5e9058284a2916287def52ccea6f75560f44d35671ed503dcc2316d5f667f3f2b0465b174bad7f7f13a6f7773abd47256d71e58bb141defb5861e57995966d7cba41b5a6fd9b2806526f415e86d9f33d56834c9c46786bb840d4aaaa34e5aa9fb1045e1b5994460b2fc72cfcc14f1b593f36902f7c8ff78397c83eaabaf195c9f1812b301b7fc47aa8fcf403f8b132b51c23754bafc42cfd4967e9545fb1e91de9b1d3a1b2bb3ee3f52accda9f75d6ce491aafb43de3d47de65763347ed1d1d88bb06da46a35a9f78ee0b48210b90623f2ab8e482f8f7fd4ad6353d571aec5f4fc2db55919de52730f2be5968bb78bac146dc76766cacfeb30cb7ef733aba66e0cd839d2a424b96e6ae92e752bafc7acfc436765115a5b0b62af9ffe96e07d32a933b80163f067b0d620c6205fd4fc388185e22bbf0cd265df8d987dffd3d937ccd30ec915fa97881ab8fddcb99f6869c4c7a2f9e62c25560eebe4a3132d8baac4f20f5d6d319576c54d98157f61a305e1ad506b62e7c9ffc2480c62ebcd98ad7f07eb29abbb08c7dd9a5a8c8cfbd3f424dd8259f58f9f326d9c18cfe1ad5cef387899d091cf134b4f4b7033a6e7bfa9b49cec3ca0c87a7901b37bb8ecdec9fa9c95772b6621db0a69a3bb3d5f6d08ef5ccb8155f6c8a96dfd049963d51d854b250fb80dd33ba6d37b57345da879858b80962522a5a412239431753b66715c673136e7021eece04d4753643a4a64473299412cba03b3682b9d457d7d58445bc3bd13d3b7814edfc949d38a738842b23a42a23aaedf3082587a176669439da5052172059577ab7082584465fddd98f58d74d6e7058e6765b37b5e426219cebb412cb907b3a4b1ce929ca42d17a70e5f77ae244d8df55ecc82267e723dff71e13c2f66f6f6c3789cd47d378845f7611635c5e224358bec3ed632b17a63b9b6b59c6aeded7ecc82663a0b4625a87fe727ad2fbb6db273f97497430f60f634d7d933368df6c079c9894638e1468b3996cc20d63d8859d74267dd6e692cb5fcb56c2972f087309b5bea6c9e1ba2fc523328522bbf829474616bcc0f634cb6d631f1f66261e307c97ab1323d76f00866652bac8ee6a7afcecf2849a6fbeb1ec52c6dadb3f4c45a1fafdf55484542c20af17e90754845f2a9ddeb5ebf2b911ec3c8b7d191f78ee687292f8a44be50adad9df8ef8372a404b1fa71ccea6dfcd5c452b7da1983d1afd281be11c4a227308bdaea2c9a51274774424dbe5e36f178a3dbbbf15fd295773c8959de4e67f9ad09e232483fb0fb17e71b3ff539ac36e1dd2e3ce89a6d3fb91c9ed2dc35332e9fcf414b943693fb7e90787c0a8bc7f658ddce1f457cd3757d6f7858a9416c7e1ab3795b9dcd7ba5cd667b7e953bc613975f7e6af3e9288f9ec18874d01129468914ca72dc6e33ea5609e8e8a423fed341e1598c42471d856c9402dc0135c75312e9eab7a9953dcf61da764a9fb67557c8a7aaedf398b69db1b23fb551a8cccdfb7d01b3a88bcea201a845eed4ecb666892843165bd774cd4c7c11d3baab4e6b7c9fdf445aaf11292f7d63682f613a6fa7d339d753cb9a207c65b5cc3360ff3e5e2fc2475e52f5ff97311bb6d7d950770d9ebea63851d430f8e838b6062f955a61aa36be82d9d84d6763be4f1ba7cbdeadf2dade217c056566ed7d15b3370bebc5f49b0fb9d3935dc6714145f25a96205773efbf1dc49ed7307bbaa75ea2e47a6cd93f6df45fc7b4dd41a7edac40dac2da692afe95c8f3d21d6b6f601c7ae8384c0aec85aa7f328c17a6a376f6266667cf60f11db487ceb419666f611c7ae938f40bc041a551de3fbd4c9b4fa636eafd36a6716f9dc6bdeb940bde7e63bad93aef609af6d1693a22e51c7da518017056ff52d44fdfc56cc90ed6b2c76adcf65c8fbabfd6ed5d83e3a17ec370669604b1f93dcce6be4147ab5399d9928e91d1f7310bfae92cd89bd5efec7518b37e47665219f1fe00a3d25f47c53b335c851864d4c9b10cf3e4f4e4e61f62960df0e3b158dbc68ef93c362ca15feabd997f15c4828f300b06ea2cd0efaac6c30c123bd03eec79ba62e863ccbe41c1ea5741f3d174e4a241ecdc82d939181b934a5c4a17c9f65a5d4b2688118dca047986f3ed4cb1ced16eed251eed4badc4f804b37a889ff4a70f3fb5122379edaab1f55f2cc6373c9e24a4d8ab2857886f78b93b98779bc586d49609f819baea390f7f999523f094515c9bab273f2777a805a791454efce913e360d599ebb1451e46f6971542f24210978304217bef39deaa1f64d5e7cac557e93ad7185ae7ff2463ef56d7b158636991926591e65b13fce72ccde1b19a2d63353e982f05103d80a97853722d72b7b2a743ea7ca8431db23075e874b705cc902d97d8d6221b5e69056c0f20780780938607cb495d7803850095272715370b247c9db84ec2c9ec2db5948e1dadb2b271c3f8101e0fc3a861f1dc68886c05970bdf557b60fab0ce005859bd1c58c32961b515b0b8031788c0f12d43a380ed9d060eb63c4a6cfc98818972f4ae80d9a384aaacc7004623996e8939084750226c6ddda80e84a96282833d0da752082cb5582c8d04b01b9b38c04652026b07f2b5aaff00b8d6cd1d70a328c16da301c705f249e07cdb8e1af1b43412d0e63307da8ed4dee64e9e93adbfed23614a6b5714d95e170570d92d1c703b5182db96f1964e95ef62210af04e0785c2684a78cd41529de9ead58b02a6ae5d1d4c3b67a6d6e64c9be39b3bda9359e106ee51c0f6c26807db184a6c4d817739ebc7a28068c3b60ea25d2811351288aa2295b53768e9c0194b09a7a37533b3b6a9a446bdecfd850a4559c9e70f2d17a56381eca18d02c0cd20df1a4709b0097337cdf940601400bdd0c601349e12501b50eb9a203eac66e5727e42b472ac277670904da046869585d142d6751707d9444a645d8097f1aaaa3dee661fe968f7f7566a7bcea2d1447aa487837112757562a618a47616b84403d18120c39f9ca90c5fed3b1e0540e7b575004da104d41924c5496cadb0baa6b66dc81749d9cb0f0a8587950a7fabb0028c0244fe47419c4a09713b9ed2013cde8dbd50cc365787a59746bc01de0e746ce753a26c29f334e56feb64f57616abf2639b01a83682bc6d57fad6a45a63ab469ba380e885210ea2dd32d589c82b1a706a96ea178b524bf3f7c60eb86994e0f87409bb45591991ccbe62bc83663a75ff2af42978a4c538d1e30a936344ea636028640625bc16cca98f392734d8e7c24401d466d0109f4909aa596de63e91d9c77ef2c651349262f140075201f510ee74917d2ff59ccac85772d96b5aa3006c7edc01b63b7573a8c8aa98f205ee1cd8da88947b9b873b800aa9f3279ee0a23a6f673d487a45991d9e754f7b579b9a44a5665501665114d34f067032f628b70a9f68e8409b95a9d2904ff58c5263a705c8bb665327c949629e97bd8adc3985d83995ba4aecd9bf3212e0b600efda833ad357a5a23db4b65a24423e2f270aa01e19e1809a433db3d5d9f92a9a1398f87c7e056b4ffae972f6ccd615424cb4bb004783e4b817f52877a1056d02b3f7e35c25168b441fe006d179d3b8a147b877cbc3d4973d04a38e2fd068c5eceeec95e269b5accdb9166cec6cbd629ce673e1828bec948736b293e673d9bea77466079e8e979de2dcee6c5fade1ec906315d90126ec6707ca02b37dd78cb303d574b253ca4fb203751d67076a0e65fb9a7a9e1d68be7576e06e499dcef80cdbec3a13b3b213f6e5656ba7da646bc763b3917971d9096663662383dfd9490690b2539a4395ed735e4c7688990dd949d70d65a39d82d909fb2db29191a26cb45995aded28ca4e5851ce0e302934dbe7a4199b49a28567d99e910a674d272cb09cb59843f89acebdff8f2fb71cc2975beec3211c2129d8b5ba7da96b75dcbbedd5b5bca44d7c06f350ab6ee5d1a16b1d1d0ae531b3f671b4aaf6a6d3a6a9ab7eb7b51f0353a9e39d0a26aacf3309674e24713e0270ce3709676e2471be077096988473582471fe04702e3009e7f048e26c0b46c1169a84332f923887019ca526e11c11499cf300ce32ea41ed79b202e4c66a3756f86b64f8fea4c2b700e4958b32e18d8b517f84eacf63a3ace44d86b30515ceee00e76293708e8c24ce6d00ce2526e11c1e499cf7300767b94938874512e7e500e77e26e11c11499cff0338979a84332f9238df00382b4cc239349238e7039ccb4cc2991b499c47019ccb4dc29913499c5500e70aea59f6891a95ee843e9c0e651b2a942d408372a52928732289721540b98a12657b8972a11c05f21e2c69ab6e6f983b840e64432a906b413ba8921264378d4f263b71ced91196146e4f2ab83b012fada25e8eaa0692fd4e61e0ef578a77a3d73557080aa5ea4c78ed1009d4efec9c28c385f3256b32e1b5304bf07bc4246176d09b0aec68901dacaecff21f8ae3952932948da9506e00c5d61a4a94ad24cabcccf7cc77a682f70848e06b29e175f59dc0dda72a0cb58c21c3ca6254031e2079afcb844f8eccbc4f9225e8f7804fee4f098f0bf09eb23a4ecc8b5d615dab4428dc0b0b6b4bf3e895e05d00cc03a861266a1db90b1ad2be7832cf6c088a9a034d82392282301b0398079904735804616e05601e6c124cc21e2532980d00cc434c824958152283c900ccf526c1249c8744063306601e6a124cc2363819cc3f41d5e830936046b115fe0f8079b84930474610661390cc8f3009e6a808c26c0a601e59bf5d6db628fbb067c21cf334aa6e8d11a05be3284a94fd24ca0aeba50a06cfcb2eb0fee7a340bcad9e68d408be37ced2aa9c16795b2aef2d07c88fa6df6565895884672fe35c2ce045afcba305288a36d4678277f764127adf462a94af80bcf3184a947dea24f812216cb2ecc52cb3927799f04eb5e834d191a7a4b0c90aaa3b00ec6333e1b7fe4afd28a21c08b280e328516eafc902fc1e404f8a761315daab81971e5fbf5e1af5ead46c80f2046a946a60c3592ecfa72c2c975b9fa8cd1fec2d35a257e6370009fe44fa1dfcf8b8e43cf180076eef60c09f4679d8ed1480f0a44c201cf19f43f82440783225c2b6cc998ba4aee3840abcca1eed095d8f0388a798b4749574490119ce4b402173aa493849e7c093e17c02e03ccd249ca42b34c8707e06709e6e124ed2090a6438ff0438cf300927e95256329c9d41e7db9926e1245d2c48867314c0799649384997b292e1dc0fe0dc98e94e0ed8f39e6bfdcd67c895d45ef9fe794b59992ce7c9d0ce8a13a1ed0dd09e6dcaf22cd2a9b064cbb31a0194e7988232279228e70294e76666179a211ea419689d93e1db11548ececbc44241b5376a3eabbb2f67945be89d00c8f3cd59bc12c5c909170394176402255c16388dcd6453e45eae8bac8fd666c22bc9501ecd1c9417d24f9a8163e4f3acca0e47375eece5ba548a9a6c5dcb2c11758e4688c0baa09600e64599a85b568b1dbbab6a6b966aa35b75d50dff9296e264681782247fb1a96849eb9a6468af065e7b0925da2ecc3d5d81efa05f6e7dba84fdf746297703b5ce4b333119d1ffe67d6430c9b65099063c7493493009a7c992c1cc07302f330926e1a21732981300cccb4d8249b81c8b0ce62800f30a9360122e1424833915c0bcd2249851dcc36b3280799549300917bd90c1cc0530af360926613d930c665f00f31a9360122e1424833912c0bcd6249884cd4a3298c300cceb286166b1201ba3e996b81096ef644b5cee071d22d7d7e76a37efb030612e4ad6373f02f8ea0d26c1242cdfc9608e05306f3473772442ac64bb2395801ea59b32318ec9073d568bc1377ef8638666199379651fe0953753e2eb04f0d55d90c58539db474679daf69b00e82d9998f9ce81feb766be9f0c106ece04c2bcff1cc25d01c25b33b167dc50912bf231ca3599824736f2f31b80779bd95574c29e76b22a7a0528b16faf9fa9867e462d095b3f649efb3168fddc91a93543ce0c103889817cee0719c49340f2bf93de3ff143a0eb6d260859b1d406a0bdcb9c55e951dc576e3780f2ee4c4c4fc00e13b755e7897e39b3f7d08eee64c46f00d47b32513441ff4c3c0b1e660b847d49eba9dae99341d1746fa61a9aaa689a2a2a524e23b34cac545f1a695f9d027cf53e337cd559a9a1ac27f5d5c3a87c750af0d5fb33b1b6c8ff2ca5288e1f7505381f3009e7c848e26c01703e68124ed2c3c2c970de0ef2d1874cc249baab2c19ce0b00ce874dc2497a583819ce2f00ce474cc2497a943d19ce6701ce474dc239349238f704381f3309676e2471ae07381f3709674e247156009c4f50373979dba8c0fa9b0bc1cf6f2b14aad558cf099b9ca55440c703a04f66625429d7d37f9f8151a54d54f00e04f09eca44875dd0f91f844b60c8667fe483b1a4a74d844a38404706751280fa8c89500987e6c8a04e04509f35112ae1020432a8df80ae90e74c844a38b24406f56b00f57913a1122ee222837a1d80fa828950092bf864503701a82f9a08358ac78d5e08a0be6422d428ce523e07407dd944a884c3746450cf04505f3177cf3a427f25dbb3ae17a8adbe4a89b67312b4ee2990b3841852a4855448b707485fa3449acbb0f17a35dd7182f5f732eb3ffe6f67face2231cd8c2b3b83f129116b44104bad4c63b5f0e46a8b11ef7e51932a08b38c5dfd60492512063027125ecf845fc359288966fa4577abacaf00d237ccd9c02d8a47429f0b0ab437cdddcd298a33a33f005efa567d2e65747b29e93100647e7a2c80f9b64930a37874f95900e63b26c18ce2d1e5470298ef9a04338a53cc370098ef9904338a4797af0530df370966148f2e5f07607e6012cc289e6fb82f80f9a14930a37874f93c00f323936046f1e8f28d00e6c726c18ce2eee06703985b32b10027c8d4c728eecbb81cb4d63f310d6814770d5d01807e6a1ad028eecf5809807e661ad0286e2b5806807e6e1ad0286e7ab91800fdc234a051dc5e700900faa56940a338897c2900fa95d99bc110e6a8649bc11c0bf07e4d89b7a5c46b9f4f5321063f6cd9e5945b6934a402c7ff2870df98bb8b4e144ffeb814f8e4b799daaa60ba185b5fea197b9f687d5629428cf25605fd80af7e470974eb8489bc8a0e5d332a747180eefbfadc3127fa7b82f704287fc8c44ea1c3d87f69a7d01280efc74c1738fa298cf63ca695c263ed194aa49ef92715dafdc1d4b09f32b1ee13abb27bf7591e19c99d960f06387f360927e9900619ce934075e8179370e64412e70300e7af26e124ed4122c3f93ac0f99b4938874512e7f700e7ef26e11c1e499c2d4151f4874938f322897320c0f9a749384744126711c0f93f4a9c3d58ddd9f093d85ac6571fd530b539c64cebf352c67b340b0558be4723479f91ce0fb293e2b9ed0af25f266dea322a92a3eedb8102ea6f93708e8c24ce5600e73f26e11c1e499c7782c4feaf4938874512e78500276b6010ce1191c4f93bc0193309675e2471be0870c64dc249ba76830ce75e00e75626e18ce6f4c4c300ce0626e1cc8924ce650067434a9cc996b9ba133ae18a37b216d14cd0ec6c640aca9c48a23c0ca06c4c89124e55e0db5b565b24565aca2cb794992d37ba2c159b5f94457aaac27290cc9b50024d6de30bc29c936ce38b41c0479bd6677287e24837bc225bc3711a68ad37a344a916c4a8c34eeddd6c17881e4ff552d4cf48ac0449bd3925cc5600668677b32583371dc06b4109af3bb3f756ceb76eedb339f93973bc73d8d93e255fe692ce3b13ade76b0464fb5d32c023a9001781a4de921270b8bd40080b24b2f99d3703dfdd3a13b92836a7ce5d20e545722f9049c04f5b9904338a7b81ec0a60b636096614f702c90330db9804338a7b81ec0c606e6312cc28ee05920b60b635096614db44c300cc7626c18ce25e208301ccf626c18ce25e204301cc6d4d8219c5bd400a00cc0e26c18ce25e20bb03981debb74bce16c5fb9548170bf29e331294b341ef66a74cf4228dc87c2f12d9c297479903af33253cb5246ba8f53fdff7984f33acc8540f265947c6af005f97fa4cc6193bf5602315cab7418ed83513c97854e69331991fbe0ffc703b4a784dac1b3e3778b99c27ccff27c335900a5767806b7bfaaacc123192c83fe51ec645955a7735d6870ba5428bc489847ca275f4066c9b0398dd32d14f5e77c0d65f4f79f492f505204fcca244db5ea09d6dfd54c6d658ff5a2a408f17e7112c9562268b5f2b28c772c840b6033eda3d13e5b4bfb64b14bbce76042877c87472d7af422f16e5f672918f7271cb68d16ea242bb04b4647a50a2ed1a006d195bcbaa451e5ac64817f71f4b35fd653cc0dab37e137fd4dbda7b8302a91725cae00bfb097b81c8aa4ed7039cbd4dc29913499c2f029c7d4cc2991b499cdf029cd926e11c16499c0d4031d4d7249cc32389b30fc0d9cf249ca403126438a7029cfd4dc239229238d7029c03cca8cacf6676f73017954b5b95bf84aa2abf27c03a90bee3ceef4cf69c480ee87e00caf74126c18ce280ee8700e660936046714aebcb00e610936046714aeb5b00e650936046714aebb300668e4930a338a5f5390033d7249851ec977f1ac01c6612cc284e697d06c01c6e12cc284e697d12c0cc33096614a7b43e05608ea084d94d0353dfb09c223f71cf41224cf613a8e032d0bc1c69325cc2028a0cee3fc07347990c97305b2083fb3380bba3c970090b3032b83f02b83b990c97b0114006b719c873479b0c97b0b94a06b70980bbb349bdfaa4ebd6c97af537828c608c4938493b53c8703e0a70ee62124ed2fde6c8707e04708e350927e9d6a764387f0338c799849374635e329ced415134de249ca47b2b90e1cc03382798849374635e329c0b01ce899438f1450cf6ae73b9d6df7c13bf92da6bb1256c292b93392919da595463f63900ed244ab46d58dd330e9c250de43b22922d5ef8893900275302dc46021ccee68907f6a1731c65d4779abb16209c4289509db391bc913981798fce1bc72a05e075b4dd24b75325f4e520a14fa5841c6c835ec23c936c57d9e60065be2928491b996428570294bb52a2dc4ea2acb05ee218cbe4f13a33993a5407474b98dcc9c03e06da47bb5182cdf280ad10cb69ab851867416da2a1be288e9a6e0678a751e26d266eec655ee3c56150d5a2502243d68f0a594750ca4f3725d7245d994496b87707b9e68c4ca0c4d6cc656cf4886c638b2c90906752a2ec2e50e65b2f150a60fcccf5d5f27327afacb7c5dd646df7a620d917500276f6b019ee49fe516e1bad02feb97b7de69ad12fb30f05280b2951b64b8252594a3a99e18e1811c61a50f81465a2668975c6b98f80281035cf75a22a3fced2a09c76c4bd2d9597de05bcb438137d9da96d6c4e586d22ebaafb1c1445b332910160d526270320cc47c9328035c0436753626cc9ab0c7200439dae912f3c9327fbe855855a03ffdba37ecb725b5405752144b6d545312884e66422290fa94dcea5a2bbd83e9239433def641ef904f0c83d2931f2568073fc887d5c53151db09e54c0da03607b5102e302b8874d14019731fb8421feeafe62e4d1f6bf42f12bdf9d8e70e86c3115cc8900e6dcfacc0f3336c398ac1be30d5026ef9d0994431274f5467b34f22de095fb50a25403bac3fe7303ba6b00c27d3331aac3bd7192a86adb5ba1f133b0168afc72a638e78ae79f55a29db33213930dc8caeb4900ecbcfaecf875f7064571e1f51c80723e254ab5a3f1b0ccf74a92f9e1e1005e49fdfa61d45b327b82927b017dff7839c3ce0024dd2c3a8fca13b380272eccc4f002df987cb5285a6a325752937589fd0cf09552e20b7a0afa28cac44c760a7a679098cb4cc2393292381b019c8b4cc2393c92386f04897db14938874512e71900e71293708e8824ce2d0067b94938494f5723c3f930c0b99f4938874612e72c8073a94938732389f36080b3c2249ca4fbce90e1dc0fe05c968956506e7db482c8ba338a00bee599f046cc17eb2ec427ec5a23c37905a8b6af300927e9169164389f0738579a8433379238bf043857998473582471fe0b70569a84737824716681892d5526e1cc8b24ce090067b549384744126725c0594389339ba9d51213c4c80fff98e3e3002b85e2f6242c3525c69e78f05f5b3bc1670828dcab2971371102caac2abd3dd3884b26c345b62caa11c0b5861257b86d2208f7de24db26620848f86b29d17666eee5a46bac974a199fa39e68e097701a35d9c0ef3480741d25d23eacee18ba7baa3fcf6397b165e2df7c1a4d8d1039496407dcac62412d036b7fe651650dbb80ac61ff4c74900c15bd49ff9513ac4b4025ff004a7c3d3dc99f8b81275cfa390733c7ca7549bd34970a734790251c488939d81269c21e51b2ba404380f220535092762e93a19c05501e4c89524d88e5b339a7303e4393cfe35c2c662b55467adee6a1a0f839a43ebd118a9b17c973b12e0245d17a4a947ca94781a80095ca8f8a18b60e8370290b59b26e027cf2d04cb4965259684a9a63925597f6023e7a98a96849cb7532b45700af3d9c126d071664067c6e244f727b1dc03cc22498515c50f0098079a44930a37892dbab00e65126c18ce2496eaf0198479b04338a27b9bd04606e300966144f727b05c03cc6249851dcdfe83900f358936046f124b7e701cce34c8219c536fba700e6f126c18ce259d65f02982750c21cc4dc7df15c81e572a120ffbf580c6770cc8b84906509fae7ebbe4998c36ea2423f1df4849e4889be130b3ea79e3063209bb73c1e74949c641a50c2cc810ce84400f464d380123644c9808e01404f310d286163940ce82e00e8a9a60125ecc423033a16003dcd34a0841d796440c701a0a79b0694b0da44067404007a866940a3b8dc6b24007aa66940093bf5c8808e0240cf320d2861c71e19d0d100e8464aa0592cec26d184653ed926d1f700bc679bd3a13232923dfafb0398e79804338a9dd0ab01cc734d8219c54ee87500e6799430db6b72d1ba9318f3c41e76845ed9900c24e8b83b9f12a49ac23894d59dbb9c9135f264739317015fbc801221beb8c6cfac26c23e26b2394daf01b41752a2edae416b4fa9e5f096b35dc5ca8f95096ba4516c80729e0af0459480836d9b1ac589396300ca8b29518e61eed1a76562baad3301b780f115a12bc5131eea78c637b25c28d680ea47a1a6079040e8e51ba8d6e88d0385dc259451137c2fc7280ea5f404b9f2a526e11c19499ced01ce4d26e11c1e499c0f807cf83293700e8b24ceeb00cecb4dc239229238ff0538af3009675e24717e08705e6912ce684e925802705e65124ed2096964384f0338af3609674e2471ae0638afa1c4c96fd4f17ad1eb346905305d6b92d78d8ae4086817503dbfce249ca4634a64389b019cd79b8473782471de0412fb0d26e11c16499ce7029c379a84734424717e0670de6412cebc48e27c0ce0bcd9249cd19cdb341be0bcc5249ca4eb3fc9701e02706e3609674e24712e05386fa5c4d995b9c79338871ac6a786957ab07ab76a251c0b22db70e81850ffbc8d122b3c81939f559ccfea6ecd6aab5f2686984b04fce8eee4f42df0d7db29c1f6f6f8eb025677b283ff6911843e4cd6c2af02e3997750a2567b8efa9b436a1f5e3e8f32b72da41a22ee0190de498954cd831ac9fe6b671b3f033280bb2811aa79502a03a812499a17579325bc32ed2c3df2693a643b923d080aadbb29d106db252f8a5bbe9c0150de93092f4d6d0732c2b9f764c5d2832003b8973e0f5d2860d96befab2d75d5f1bd5c71be167f6d04137a3780f03e4a84bc1a582082557e576579628d25a45a782519ba7e54e83a0174f753a21be0297e7832761f175d0abcf1bfbe33f30ea0e2f4002576b57ff808f65f3a60ed7be0b50fd66fc96e8bb28f0d209c804b766cc01ce0890f51a20cbe543127927b90ec0baa4a0f9b06348a1318e603a08f9806348a7b90cc04401f350d6814f7202904401f330d6814f720d903007ddc34a051dc83641f00f409d380467109d85400f449d38046710f927c00f429d380467124743700f469d38046710f92e900e83394405b3167d1f77fe5c4af19cc81f72c25bc2c1676031742df24dbc0e576e09bcfd56787c84ceb93fdac7f2d64d5b41d221ba9507e0a503e4f89524dc819227a454b8420ddb046b4c737df0609ff854c8c1cd54df87ec68e08133d599efa12f0d41729d1f664eebe7bde67ef1ca3a6efa99f223f7667088455fd095498af04985fca44deba90f9d9ed218a7b8def0d3283972951aadd9cfc8dc80f8be4694b8b41cffd2b26c18ce2694b4b01cc574d8219c54d5df605305f33096614a7de940298af9b04338a7b338e0530df300966144f5b9a0260be6912cc286e743900c07ccb249851dce8723080f976267a9b54cb688998cb54c0e031bfffbdd520078316d13b99e822c17cd50b93747137dd69dec05bdf350927e90245329c2703ef7ccf249ca4e34864381f0238df370927e97a4f329cef009c1f988493b4424f86f30780f3439370926e8c4186b315288a3e320927e9d60364387301ce8f4dc249ba310619cebd01ce2d99c0e97f8fa6284e0adb01e49d9f988473642471b605383f3509e7f048e2bc9739383f330927e9000719ceab00cecf4dc239229238ff0238bf3009675e2471be03707e6912ce681e39b900e0fcca249cb991c4791cc0f9b54938a3b918a11ae0fc8612677f96782e682e58716c3f77ee2732f7fa641eb47dde07699ffd993122e8c341dbe95b4ae8c96688ba7357c2893764db0dec0c507e670a4ad2855e6428d70394df53a26cc39cc9b676e035d68bd52c43d36b4752019c011a9d3f5002541b090cad8f65093da9f0ed04f0fd48894fade9e0012f120959c95e2e5f89de287b0c94e33f51c26b2204f00dfeaae5475574b8b2a9707500b87ea6c495dafe738473e3c8f69fdb11141fbf50220dba7b8dbb963951d41c4b6aafc5d6574b45d227ad4bcea2c2de1a60ff9512bbbf7364555d327ad59fb340f1f39b2920a3b8d5df7a00f277534012cee92403f93000f987292009c72ac940de0b40fe690a48c2329e0ce4af00e4ff4c0149b82a830ce42f00e45fa68024ecbf2403f91700f9b72920a3d8fbf33f00f21f534012aeab2403190315f27f4d0149b8791f19c8bf8147b286c66c191dc5a556c70394314a946a410b7f25f9b2e9e1915cebbb3d801937096614d7fa6603985b9904338a6b7db705301b9804338a6b7d3b00980d4d8219c502686b00b3914930a3b8d6b73580d9d82498515cebdb1cc06c6212cc28aef56d09603635092661fb876e153a80d9cc249851dced682080d99c126677e61e9de404ec914835b89b7cf897301f251bfedd1a747bb4a8dfd6ba2dca3e0682b07c273b06620f80b225254a3e11669238788cab982f137fb9f5311f1be79f91c123db886f6be6c0dbba3efdd0bdd91ea11f92edbef93ec8335b51a254078d3a078d61270e558a3593556c9110b68c36afdc4405f620e0a3ad29c1f6f014466a6b53e794412e904f194c5ce647b1627f1bf0de369490bb7a20db407989cff3d489da5ef93c368c166b432aac2b40e1b44d26f2577fb5d228b696f24036d09612a56e3b5eff392c215ab21c761fe0a5edead74ba35e1b2d05f968fb4ce6a3e59612b399734c1e5eb922cc47c92a576b80876e4b5dc99f27daed195f2a409673de0d72ce0e99f0c9e439e76ce98d5c542e6dae7909551b7e2fe0931d33d1e3e46fc47d6824bbefee06f96627936046b1fbee3e00b3b34930a33881e12600b38b4930a33881e11600b3ab4930a33881e10600733b9360467102c38d00e6f626c18ce204866b00cc6e26c18ce204866b01cc2c936046b19ff33200b3bb4930a3d825773980b94326600e117fdbd77cd9b02c179d1ee56c7f56c6d43af56a3a98645b44fec21c983d286106df4b9bb03c27c3793ef0cd9e26e1243d289c0ce7e300672f9370e64612e71680b3b74938494f1a22c3f907c0d9c7249ca493b9c97076003d9bd926e1cc8b24ce9100675f93708e8824ce4500673f4a9c6ae3a891d6ffabc1d05a46f6dd229bf2f52373f0f5a79e4ec387799ddd65a631b523618df5e142a9507ed21d0cc920936d6e360d14480332e1a339f5e1a364497c77e0a303eb735aa2a33a71ef11d9bae0c620b71c640aca9c48a22c03280753a2ecc99cee0e7b661cefeea8b2f2c81542e94a518af372bc52db0d521ae98e90ef40e21f4289b99d755360ddd4f0b815a2965baf2f1178970b9425820bbf8b1ec68600e3504a8cdd106f1d276678948b19f3e3183f5590cf0029b1045444de471702b83994705b5a374ec568badcc8b95226773270bda9c06d0bc0e55282cbd61447a9eea0cd8193ce9bcba3c23d061459c34c29fd4967289195fe0500e5705350e64412e5e100655e26a6723b4b65d4d2c15251aaabeb78eb657e00ee6a51dad788e44e5add276bdd5f0ff2d711d495a7445eaa2c25cd37efa09ac65d0d3c742425c6ac24c5947bc96b01e36b92d68902699ca5413923ddd0af2d9597de09ba4746999b0110e6ad6419c0472003d8d18cc9deeee507a4f346185586b02bc81076a25f113f5524fb4201ad4cb6a1d4492ef6f2c3a5023ecf1e165affb6c54fb6ae659658c21e53b2165533e0b7a3335170616b9026888c80b8c27f2f959f1e0072d69d33bd4ace7fde4a38119c2c677d17a01d93a9d94eaa4345f54e39fd55d1ee40e90d92fb2e99582d0f6126cf5da30bb618801d4b09561d5106f3d1ffab4794cd0159c3384ae8db48e87ccddc3219b83ab92323437e647349af047e3bde9c95f2515cb1b40740398112e50e01501659615688c6c14ceb5f6a58a58a36c1df4f95e00f04097e2225e24eccbdcc7ba5c8279724f4d928cecb9f0fda5793323147caef41a5a32871921d54da11f8e76493708e8c24ce38c039c5249ca4bb8892e1bc011450534dc2392c92384f0738f34dc2392292383f0638773509675e24713e0470ee66124ed28e68329c0500e7349370e64612e7fe00e7749370e644126739c03923131d21ee15a155cc3e6c37ca1d782b01c2999408b716089d1d97a33febbe3b4057503f831fffd58373b701edf3dd4dd97db18cadb59ed6082573c4dea1846873a9bc7628405b68cac432d2ca11d9c4b2384059640a4ad2929c0c652140594c8932b533dfa3b8e97f578074963947f445711fb1f34087dcec4cd533ed618e6a59ec6468c08d6c46d353a0b2b4472626dc708465b5e727a89fa33e6ef902c03827b35319f5d5a229f2838c6dfa3b810a6d3640bba7a9b344494b77b2b94cc520ffdccb54b4a4755032b41703af9d9b89a229e73f3717643840b8772656cf0f65f5b07a9e6c76fd60806f9fcce01be6a96f46d9fb5682bc71df4cd52d55add2eeccc890079275694c0008e79973185f4e24a7736d06c979be4930a3d870bc15c02c3109661437a0be0cc05c6012cc286e407d0b80b9d0249851dc80fa5200b3d4249851dc807a1380596612cc284e743d07c05c6412cc286e407d0980b9d82498513c82e73600738949302379040f80599e8905024166bd117a27d9cca21cd0a4dccf34a0841e4a06743800bad434a084ad2132a0fd00d00ad38012b688c880f6074097990694b027890ce8200074b96940097b93c8800e0140579806348af3877b01a02b4d034ad8422203da1b005d651a50c29e2532a07d00d04ad38012f62e9101ed0b805699bdd51a61064036187c0ac05b4dbdc0856fa9c237fa2d13c157d6d9afb680f1bd95578a273ce4e8b5ebf976320a674d7dcee1744fef22ac8d929de97e00980ebb9a7a0e92d733c7b12a219de32bacdde7bbc8bae77eca8faae09cf8ecba2a3ab443a8d076055eba26133340f2ea63020d5922ff1ae05b6bc63a2267fd90b29e744ee76154b38eb705897e9d1968d5759225aa52082445bb9e0a6d3b80767f73b7fe23ec89229bd3f926a8441d9089b9f2436b87474a593953bb2545fd589fa741be7a2025c6dca41e3ac1fa7b99f59f7d40d572594b5d24b653e5cae6d7be39a976c9827bc340e26ce248aa5548bb806ce220ca486823228143749fa5500a360224ac5ced44e5c53b002f3ed8dc7c368a9b577f02f2d9434cda8d615424c74c7b009ceb4dc239329238db019c879a8473782471de0ff2d1c34cc2392c9238af01380f3709e78848e2fc1be03cc2249c7991c4f92ec079a44938494ff920c3b918e03cca249cb991c4793cc079b4493849679292e1ac013837d00f924cb75ee00d4b8eb29e8e45216b11b505288fa144d98a39ab89ff2b2b390f00f08e3563d32abbdf69a568b5dbbd4aa4c3ca7f52a13d08f4221d97893de6f922d989cc1e3e2e6065b267d4de59de1960761fda5bc5a2bc11600ef0dee33351286145d278ebd3156254b444744293eee14d86f340e0b127988493749b0b329c2782ce90134dc249ba2c8c0ce7cd00e74926e124ddd6970ce7ab00e7c926e124dd619e0ce77700e72926e1243dff800c675350149d6a124ed21de6c97066039ca7998493f4fc03329c3300ced34dea0c1915c9554cdd40de79864938474612671b80f34c93700e8f24cebb9883f32c93700e8b24ce8b00ce8d26e11c11499c7f009c679b84332f92385f0638cf3109e7d048e2dc07e03cd7249cb991c47904c0799e493849f71323c3b902e03c9f12675fe63da2b4520cc8d588c535ca4e67bf6f18180c6a1cab14234deb18e9c4daa7a826d61e02da4d1750026fcf12ef9fe3ce59c940921d3d311478ee85a6808ce2191ebd00c88b4c0149b846990ce4a900e4c5a680245c3d4f067234007989292009371b2203793e0079a979c7f3102672b2e379fa82f27b1325d2219e0a530dba8a033fe5a3ee3c920c559f6ea7c2bf0ce0bf2c13db0ffa9fee10bd3efce3402fe9e526c124dc298f0ce60900e61526c18ce2e8d24100e69526c1246c2991c13c04c0bcca24988475533298870198579b0493b0324506f37000f31a93601256f6c9601e01605e6b124cc27e513298470298d7990493700f273298470198d79b049370375132984703983750c2dc8e3973eaf92e0cbc7364aa68c74fb6fe2e17184bc596435c305fff611f771ad599f48b9803f6464ab05d05d869d60b0be57e77ce2682f5b636896c6bc1c600eb4de69c671cc593944e0749ff6673cfe38ce2de4d77002fbdc59c632d4644f22cba65c04f379b04338a67d1550198b79a04338a39e87e00e66d26c18ce259741500e6ed26c18ce25974f300cc3b4c8219c5b3e8ca01cc3b4d8219c5b3e8660198779904338a67d1cd0530ef36096614cfa2ab0630ef31096614cfa2ab0130ef35fb8405c2f29dac1be45680f73e4abc6d99d36db75a74cbf14d2f1688eeba0c6d0d4c7618c02ae640bcdf9c7315082bef64283b8189340f64621e3dec46c6fa3ec93b8fc992f720e0990f52e2dc4683136e6d458e90ac0bee0780f02173774c26acc293a13d1b143e0f6722dff457518a62d37227e0a58f6462f82d953e78c2fa27998f9e07c03e6a2ad8286e977e2600fb98a96009b30232b03301d8c74d054bd85622033b0e807dc254b084bd4f64607706609f34156c142b58fd01d8a74c054b38fa4906f60400f66953c1128ed193813d06807dc654b0519c495206c03e6b2a58c2b17b32b0a500ec73d4c7557a4f029d2c7aab2aac97ed797964f872a9f06d0ff03d9f89d33e87b37a38ed93ccfb4e04f85e30a70b258ac3767301ca174dda8991f4940fb279cb5781cebd974cc2497a2c0519ce1700ce974dc2497a680a19ceaf00ce574cc2497a7e1719ceadc0b0ddab26e1243d5d8e0c677780f3359370929edf45867332c0f9ba493849e73791e15c0d70be519febe6bcc37651ac75f60330df34096614278bf50730df3209661497cb740330df3609661497cbf40430df3109661497cb740130df3509661497cb6c0760be6712cc282e97f91d342bdf37096614e734b5019ef9814930a3b85ce673e0991f9a04338acb65be10301b37f4089f5c47f804d1dce30dbe85cc39d871109bc2f8388e7df4e342eb7e1a2b175fcdb770ccb5fe0b1603fb58ffe99ec7c4c1a893d85ab6523ce5f24a85ec65d6af5cb32a36844fbef8883b446be910d9a2af7f9cc5bcda7a878f38f1d0d7b122668f3dcdb4fe565b6dd40824d9b176d61705d6b31ac6471a7908cb2d4d96b04a61b1fb60cbec5813c1a98cad960438c06ca9eb6a66ef08992f4719ca2d9b4b842695d63b0d443876233a3bd612dca9b504f96288b14a68d5d4fa3ddfb2b5444c49b6b7f7ac92df39cfa70bf9ce319c8e7ed5227c4e9d7fd54c78799945b3da6ac8d7885f6d7bb6167a540a8becc1cc2acf1b5ca277ec2e5b38a3f7a9e23ece92b152fa4d612dbd6c314bb8ee37ba778be45cf632e15dcb04676e47478d042f8302661f565a26bc86c78e9fd1479e2462b1363215700f982e289658df94886b716d3c0d1e63bd16cbb3feb2878707d50e0c0f92fb832e9377ea7972993c0d2496f63177f4983ee7ab485bea4d66919de1f0ef17097265426a7e524b93db87e7042d12c4cae05d785cfc97eddfc2e35d46bb70d30eb1e6d6bf6659315f2a5d7fa6f5b2edda0316c459c3ff07754718246a6c0500 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/8821d475adab62348b44ae931489a464.asset.meta b/Assets/SerializedUdonPrograms/8821d475adab62348b44ae931489a464.asset.meta new file mode 100644 index 0000000..52bd527 --- /dev/null +++ b/Assets/SerializedUdonPrograms/8821d475adab62348b44ae931489a464.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 867405752eb506e43aeaacdee85b8f0d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/8a5bd5a001c1281498462c655a9db654.asset b/Assets/SerializedUdonPrograms/8a5bd5a001c1281498462c655a9db654.asset new file mode 100644 index 0000000..537ac82 --- /dev/null +++ b/Assets/SerializedUdonPrograms/8a5bd5a001c1281498462c655a9db654.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 8a5bd5a001c1281498462c655a9db654 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec5d077c14c5f79fbdd03bd21524f4282540a852a484262d40280a0a210522a19884a6a8a088a2a8d8b1a362c7deb037ecbdf7de7befedbf333b73fb7633efeee6e6e6d8e5ffc38f2cbbb7fb9df7bef3e6cd9b1ec926f61fab9bfdd70c32958c243dc8745244969225f6bf46dad7c5f67fce9d789e47caedeb02fbef02fbb76e2433ce97f44f17aba5fdf738fbae8254da5f2e2785f6b594fd3e8d14dbff1e677f5b6cdfd1a725f6ffc5f65b5635fba3e924974c2693480bab591c8819eca30afecca27a59b5ecbf4790d5f6afc54c289a4836fba985fdd734fb970af6db625b68f1de6c7230536bb1fd5ba1fd4d3929b331e733c45aadcf20ec1fc4b9f4e0d76c7eed6eff5f9bff3b83ffbb16ff377cbf3abff64cf0fd5ee0bbdae0df94a1ad31beefed5c2343ec6b0dfb7125b8a7df7ecddfcb71f0220b6360f5e5d77efcda9f632e4f40fe9afc3a208ebeb1300602ac4438abc5af83f8753f2eef8a24d31fe270645d00f0289743813c8340dab5c1eff4d9600ddd453eeeefcbc7fd9d7c8c6ce1f9f7317f5fa4398c5ff7e7d8f63b4df8b76438bff68923d708e73b9677c266ed343396f1fb91fc9acbafa3b86cc3b9ac2bc1bdae2c224f4773cc613c8d5592e7e27dfafb6a7e3f865fc7faf26b1c7fef707e7f4082f224627f42a6113c8d23c0bdcd63b57931b044be8ff4e5fb48feed6687c76a3b7cfa00fb93e28ee7786b12d0a31bbf760598139c74279d99c0f793f87522bf4e76f37fd2cfdedf22b95cae23c1bdad67f5f53efdf68da39f48bb2bd041bc3f855ff3f875aa2bcfe4b50960e63befd67a80df4f7764acd1da795e43940361d3d3e2c82af278942f8f4771dc4a8e2bfcce0ce7deca22ae4f1538f4fba37cb8a37db8a339aef0fd072428e74c7e3d885f0fe6d7392e7f79d5f8b303f975364f730cf1fa02510e67b9df369fa7c85bac3c3a8478ebb33e3cddb109dacd5c7ead9de0fbe29d791a3217f06b9d04d3acc3aff335d2acebd842addf7db6303d0e66a1c36fad3540061ba7b628a745fc5accaf259c7fe1775682fb7876104f96055c16e16fe739b2d469c9ef850d947a652187fa643a3a753245447db216dcd3eb01fcf93a704f659de5a453e7698eb9885fcb7c322f3627330bd5edefea3705b691c877b1ec6ba9a35fdd010e76dd39fcb9881d846c05aedcb526806f851c89948772cec5441fc713b90c82db0adf7bc7807b7a9de0a6c7fe6d7f5b4fd8566ff09c7e7b2cb8a7bf1f96a0accb49559ba5389341da9379dadcffd7dbc2df5d41aa963dd9b7f43a093c9bc4f1448cb89254adc7c47b54b7f5e09efe5e99a06eab24f2d9e9d61f1be35b119f09ff33d7b5879aaff3673c368be4116fd912f5f840f71b4b949b239cfb8642167e8d4c01bc4c71e46bd093bfc3630fb28ec8ebd9a3010fbc3c92b56edaad85bc47c5484bc8778c4fefa52e4edd4c2ebbf063dcd6a265c6ff2e7d26fcef09fc7a12bf9ee8be3b75137f763cbf6ee4b24d251edf4c3680e7f43a8dff7e1cb8a7ef1de7623713362ad210b2caf2f3649fee321f10cbce4e71de9d22de3dd5e1b6e136cedbd33e19d690d8f6bb37d72b9f78ed3f9fe3feede0361276bc995fcfe0ef013f19e165899ceeea344cd4b1a701dcdae0df89c8188b8fb39d74a2ed8e73f855e4c91c80dd9da73bc3952f1abb9d057ea3f73c862367124f9d13539673f9b57e1c7d7a80f7e8f53c0dfd63fd56835f2fe4bacd24deb6d84c278f1b7f1d03eb2287a796a23d74b1f3cd1e7ff3fbadceef8d857d5c0274a26980bab991281f97f2df0e047af33655e420f08cc7fe91d9c06666f1df2ef3e5cf06dfefdb0086ecf7cb810cb2dfafe0cf8f77646f229e5fe9d3e54c9fac07118fbf205755d53572902f6de1b712c9cbabf9b7737c7939c7c997263b62605d23cfcba68ff3fb6b7d79b9dd9797074bf2f23afedb2120dff6e7cfe692aaf93b0ff020da52d72379297ebf01e0ca7ebf11c820fbfd266f5e36ebc89fdf8ce425941fe6e52d55758dccf5a5bd3181bcbc8d5f6fe55759fc7a3b71fd38c53d3101dc3bf8f5b818b8bd7db82725807b27bfee88817b17226f32e9095b177d4805c46bebf4deb6dbe6db6260dd4da4b6de42707e0ff1dafabdc46beba27d09ede33efe5ba19bff84fb854811a96aebc5c04e78bc4aee07ef405b15bf3f007065bf3f086490fdfe10f1d87acb46fcf9c3446eeb507e68eb3babea1a29f2a52db062e5e5233e9e05bf25c4db5e2971f2a7a5c014f1d1c52476ddf8a8837f8468633dc6f11670fc93c1bdc5fb4660ba0b79ba1f3b38ad443ba11e7fcee39f56f7f0e78ff3f4447cf184f35eab8ebef79e74eed78876f8d33efe9ff1d9caa1aebd4575790afc06755b44bc31c9b3fc7919c8ab45e019ccabe109f2fa1cbf3eefe3af94e39d02eee97b2fbaf2af11f5c60bfc7aaefb5b6311d78bfcad07e478496e2b4c569067ca3192d0f9e5383aabf8a4c5c4eb93163b76b0d7801858aff377e6c478e74d7e7d8b5fdfe0f84b88b71db284fffe36bf5feafb5df423ec70b96ff63d904360d36f4e4d40ff77f8f55d8ebf8c7fbb19dcdbbab59ee7a4d57a21bfcee3dfbde7c379df95ebe8d6be6ffa24208f89df44bfd261c4eb230e73746b23dac4c2768f8a634f1ff0eb87fcba96e395136f7f20efc389d98f152fad187a452a89b7ef408c3f7dc4ef2bf8efa28db6c2f7be183be4be31b2dcf7fe2adffb625cea137ebfd2fb3ef914e0d0fbcf5cdd22bc9f8a7c0e9e89b6f9172e3f6db98f89acf6a64dbe24def6a068f31dcedf3b1d7c073910bf8b76ed113e9dd6f0fb33c13dbd1ee9c33dc2c7d5913edca37cf27ec5afdff2eb37ae8e4757826f009f6cfc1a60c6b4e9cf38c6d1fc9bb3c0bd6dd36d3f8f8121be151cace31867837b1b2333d391373346b98d1ce3e36f2d784eafc7f2dfcf01f7143b56db88cb1e59efd36d3dff766702df0a7fb9c1a7db068ec1ebff768d62607dc7afc2bf8a3c14364bf14e90e4abd08db7bf23c77319b6807b5b8676bc0d497e2072db3ecef7fdb9deefdb8b98f7477efdc927db46e2ed03fb855f7fc56d92fce6931df4b545e5fbd9279f681308b94fe2e99e07e410cfe97513f1d6692286e17d4a91937dbf8bbe35d9587bac32d28c5fff2049fb58f227c04aa4efa739bffea591e6df002b91345bf0eb3f1a69fe0bb0124953c47bff259f26fd67142b8134ad08bf663836d0fe7990bff4b9c5afbcef2f4263596a47e7837b91a7dc8e3af0f1218bcf61b26ac4c68e9cca312f00f708664c5d7859b2f8b8a755dbfdbecf60fe8c8f5959bc3fd1aae7bed397f775580df895fb31ab21c0e1fd2756632eeb662efb85e05ee4bd909ddb9eb507ff8d5e6d3e3b739922a7710cde7fd839cf2b23fbbd36f8b7c8678edf918f95594d9cfb6ebcefc16acad3113e8dc762569cf951162fe356f318faf3f261b5c4b916f158bcf4629609ce5516f76791d389a76eb45a718e73c1efc257d0fb33f8fb17837b1baf0b8febad3df9752f5c572947ad39de3920efe8fdd95e7bb0da70f97680df855fa1f75bf8fb5bc13dbd9ecb9f5f02d211cfe9f53ce22d33e72176615ff711e5626f44c6b649ca788e5c46a96d66caf32f9a5f7fbbdf74e075bdd58e5f797f4147d13ff51f7fdec1fda6bb28bbedf93b837cf97f29b8b7f3bf6b91ef7d517e455fd3b9e01ebedfc9fb5de42cfefe658e7d44785c657526b17d082da7e2b72e716c10becbdb55d6befcba8ffb6eb779fc199fd36475c36ddae271055a7e619ac2bfc6f207d90a787c1cd5ea1503afb7025e0ebff6739ee7f098c7e231b6c5e7a55afd799e9d4fbc7323785d266b535a03e2c8419f0d8ca30f9455cc09f595c1689993d41b31ebbc41c00e288e18c3d906eee9ef927a2e26aef0e19d89ebbbc5dcba2ee099a8539a92e47d3c2f2b115fdf5544f8ec8b8877bc95dedb65b27b99a34ff74d402e7a1dedfbee08704faf17bab2b27f53ac1d1c4bd4d543bc9891ad2e7f832bc133faee5080057d0dc7ee29b8e4be2372257fef72700fe5bec427f7250e4e0fde8e8e96ebf6713897e55727ef6f91ab785a57487ea7cfaf04efd1eb65fc39bcb765cb16fe918f0759c3f87538bf8ee0ef5f4dbc65ef6a9e9ea41d12f59d71f48cca7639c7be1adcfb6d58d8da369fad6de37a3ce0c820f2cc1ac9afb9727dac513ebdce2329d3cb1aedb5376167f1eca4a788f73af1dfaf51b49bd6c06e28eea51ce75a700f6d611db8b7d3ef55cd91bb178f132c3e97d31aebe5308aaf6013fe32ceeee9b7ab146d86eb608d037601c788c4ef623edef1bee7e37d36b71ddc0b7baa0dfe6d73d25b8c6fb4037ad6f6e14e00efc8e49908e4b179e92de2583e07cbcaf3be2f9b7b6b4df6e5c36c204fa26553b45dae90e8300efc06744855dec5acb7848d4f491e235aa74dd5c068c531fa6be8521b6025d27f20da321af3a259ec22b0124953c4acf91a69d6035889f459d0b93830cee3715db44ea3fe0ef68fd27bdbf6fb8af14691bf71e6ad5a7cbcd7e2f39c2c30dfc6e2e35296986f63cbb396976feb4027bd7edd14d3e37330ac43f855cc97b89678c740b81f8e3506122fad98fc1638987dca803dd1df45acba9d78dbd4db1d7dfb0bdfc0c7d7ad4282fb0f112fc48aab8be5f96ccd8bc36309f21def178a5ce793ff3a2e3fef93b6f8f8adb530866ca5ce7d9761ce75609e2f2dfe6de47a5f5ad73b690d10ed8a43e3e0707e2237f8706e7070068a3a958f6147e7b5fa6d43605707dff0b9a9d6121f5f58bbe946e2ad1f6e44d2a2df2c4d207f45df408c769390798068c71c969c4dc4b4f70a3966d49f88395117837b9bfbfd443b56d834c63d2c97e5716c777902bcad88c31bc56ec265bd997863b49b1dd9a96af03d4bd4c162fc7183ef77317628e6040b9f164f1f3e27dbe231aa25c6026f215e9f768b3e7731f3f828228da5ad2393c71471723416ba95eb741db8b7b91e2cea01d15617e38bd773996679f122b7f1df6f00f7e2bb44eae4f640c764f95a0bb01249b38da3eb105126b8bd5962ccf276172722e6ebc9e63ec79249b4ffef205e9bbe83a7bdc6c11a22e6ba09bb3936b60e16b7758bdbb625e6dd89fc00f342a26d7fd1c7bed1c58eda1418df5b2fe204d1a7b91660f9d66446ee04728a677703fc4d3e19eef6a61bb98778db83f738bc0c1373315a7bbf8bdc4bbcedba7b7d3cdfc77fbf11dcdb7843f9fcafa15ff3bc23c45b0eee077af8d3bc9f63dec4bf39cec1dc9fafffd9ff7dfe9c8f4f5a7c7cc93ad5877797244fee4a619e08ff16c7762262bee768700fda3442efe8ef7783df2987bcbd67f171234b8cef887ef134e91bd543f8a863b99c49ae85b7ce70f03deb2bed7c1e9ee93c1f2ee6adf1324ac01897b48c8a39989c17eb6c57877c6eafd6593c8df53c0d1eef5be738f7d6d76a69927dbd79c7ee41de927d787aa2cf508c9388b5440724984e2c1ef9388425fa951e70b1d8bf93f1a3e73bef8ed9caef2f70f418c1e7f98e781ec7b0781b80748c91f6690edec87acef391a21dc5fb5f2d1e47593cfd687fc883c41b5f3ec87f97c504b1f4bb84786d792da95abe637d7f85f3ae7ffdf6c8b79de7b9227ee67da316ef7fb4787f49e471e28d6d1e8fa107b745ebd2d83662897ea59d20ff773a72e58afe6fcea3b50dfc0ee7c88879ca0f038c8739c6fbbe6f1f21de79428f80f7615ffcc3fcfa10c07cc8c11cd5c787f928fff666702fde8798fcfbd15c2f4bf45ff23e368bc757d2be2dd136167ddfb389b7be11bff3326d5d2fffdd12eb28da21df5f0d7483bfdfe87d2f6a0bb7807bfabdac4dbc0da429fcb9c0bd8c5f6f71bf1b2fdaa737276843109fcaf218f1ce4b7dcce17d8c182fbe3585698b1896c77ea2ac54b159c1d779e05eb3ecc48c5bc578ea05c963587700ac44faafc4fa0f11133c41bc71db134e3e8c1531a6a8c7447c769f1727f23cf1fa4de1bf6371b623b6ac168f07224f126facfd2497ed7307779c28e37cad86f540ead266758cf0294f13efbc81a77d1c3c45bc71d773bef7c51cfd0efcfe591fe7cf3a7a8de373c4ad0749d53a52bc571bfc9b5e9f01cf9e71700ec80472c1749f21de3142f1be68038ab8330e471e5ce12b1ef261dce1e6c1183ec7d6e2fe5ad4bd823f4bc4a587abc911d3ce1f917068eb3a5eccfbe79c583b5d39c78b78f851df6ff1d212fef5059fbdbec0d3e4fb1f8d17f6296cf1e638f8fe36fe8bc4dbc67fd1c19f20e6bc8e06df8136fe04c1ff63c413c347e3fb97f8fbc2e70e05cfe9f5659fddbcccd315b88f7b71ab8c15be4abce5e3557e7d0dc809e5798ddf8b71e0db7ccf5b03bb7bc2f7ed2b6e7e46db2aaf78e5b244ff8fa8df9ee4d7a792d323661b2e5e1ec7b2ab6789b41d3391fbbf4922df853d3d1d27ad04db1493443fb0f063be3645dc7462d579b57c9cbe4ebcbe90afbd99f4baf73df65d227d41626f09b166e648706fe34ece05b695086e35fe9d183378de9727b1f24facabe27b145860edd5f1c3f8335ec6ac97b99c6fb9f244f8da22b4bd49df79338efcbcfd1d799b787dd3db8e5e797d1cdc3cd14ee76585cc8e8d6bbde6c37f87e3df0eeee9ef92bd1d2c316efc9617c3331f7f23c779d7fd3e3aa79db7a5ad37dddf8ee77b1458af82efe8fd1b401f10a7289745defef2af539d22fa06447bfbd438bcbde3e0f8d7254e795b11e75d0747ac5bb4de77eec5ba454bace31273553fe0bcbce7e5c1e26b9e22ef03bb7b0f3ca3effad724c6914dfa8caf29887ce0b3c30f1cfda7f2f6ff5451a7083bdc183b2df15ee443f09e48eb23f759b40efd18e8f9117846af9f70d9ee00f7b66cf9c37cb89ff2f77680b4e9f533fefc4e700f7c4de473e2edd712785f02993e77d29c266cfc235f1a5f10772d457567bb370f0f5f00ac4fc1338121be05e9b32b7d7e17cf83dfbd69c6cb8398e546acd3f9ca97ef5f716e6f75d29c21caafc87f21fb37c41b9b704ead4ff8efdf126f9dfc2df88e5ec51aac4bc1bd9deef4cddef7449b3bf23d7fff6e704faf3ff0e7f7f8e4fbc127e7bddee7ecbddade6fa23a88799837799f47fb073ef3ea16ab7d837e7b5f9cb4459f022fdbac5e8995d7ed7cbcde0cee6d5e67897ae4737efd92fffea3b7cc58dc26adebc1eff4fa13f1faa77876f0558276f09dcf0ebe73e49db9c5fb5e18ec2022d685c9fa71d26407a25cc376b2e8e38e9b67224f92ccb30327842fcfa2bccadac5ba79d6d6e1a5f801fefbb73e3d7f45f281af878cfce6cb87dfc077f4fabb2f1f7e77d23be865ef7bd17cf8c3970f7ccd55e44f241ffef4c979aff7794a7da8effbc8cf0adf4be66944c0ba40d57c8ca67d6d72dffbed20f2972f1f7e21deb968bf38f93647f4f774e2cfffe6ef5d0eeee9ef837c3817837b21bfd0fd7baf8c91ff109be3658bba11982fec5e7c47ef2dafcdb17b5bf683c77adf13ba6644bc3697c1d7166664c86d2e23c327e7bddee781b139d9f7ffe8d96c46350d9b15692769b3a9b6f90c31f6226cfe5f9fadfeebd8cd5c31b799db7c4675afcdb37b68f3321ca1bfa81733f9b7608d21fb374d8fcf9798bb15e82d7b975e6b806735f8f77c1f9ab9ef83749177e78971045e276734e5b28b3d8c3af99e3fe06047bfe3b197c5e38a0cd027122d2fb589bc3c0bbdea786d36a30ef88e5eeb126f79e67bfb16b4f4be172dcff588b73cf379ba19f589bc3cd7f7c979aff7792acb738618a39a8163a6bb8cf715ed27beb7634603b2fb94f1068ead14128e23fa21e3c5a8bc9eb2447c22e21ad11659e9b3a186888d73ff99d1c867078dc077f4dad867e38db9dc7f7bdf8bdaf81e3e1be76bb4339a2036dec427e7bddee7296d63883d2866e198e9b6f164dbba41b3e784dbda624cc317bf47eba8dfdcefabc4ec22663b02dcdbb67844a60f9b7f97d1cc2b63065f871f8dfdd7817b1ba784af7f2ce1fb3f1ffebbf73bb10e27aafb06845ba15bb236f49bdef751bd93fc3e3ad69668ddd1cc8b136d2bf97c4e74bdc35fdeef458c1f6d538938e552706fe7cfc265def7a2f19188f5ef06f756026d3321a742dbecff5bdefad7eba9fa89687a49fa197f1956f673bf697effabdef7bb9bfed1b2ced76b6634e7bf6f07f7f46ab96548b4732b5ef6a681b6a779398cdb9eae41bcb1490d279db22ddef7c2d09e8ef641ffe862469ffd04b814fc4f00efffaf2ec2bf6fa7a9ff4f6adffbeb42d69697d938aff3a26df655e05e7c47af357d36cedbe24bd778df8bdab8682bde0deee9355e1b53c8a9d0c6fcff6e5baab6e1596b1eeb7dcc178bf4fe5717ed1afeda697effff9c7f4f9b11b4af2cb1dee35fef77687c20ea7fe22d5f89c607953bbcef85213e10f50a3c53e4ffb53f066b14a2fb6d80d8e97f6553ed7b7f7f8e25f6aaf3cf61f0f72f22f10d2d3aecf724e39b5573bcefed8af8467b0ec3ffca68d27338fe571ebddf8b3ecde81c6338bfc1e6b9d877b668dc7e58d91a088bfff698fab7192db83c6bc13dbdb6e4cfd7817bda67fbba23376dc630cce1fcfa44ecb4056e44d4cdad38fe69e09efe9e01f0e8ef9b714c693a7bfaf4d9d39b6e44c404b1f6417f91bf2b7c9db0e907c13dbd827d7a22c23fb6719f65f03d8132f6261e5f2bfacc33da8277db8277e935937f7304b8b7e539ea751fb6f8ae9dd7eed83d95ab06bf6fcf7fe76b63c41cd40cb06e26a33d7846af1df9370f837b5b8623f9fce3a36e44d2eac4bfdb0eee619a9df9ef3bc13dd5adc8fb7e4617fede23e05e700c711ef5e1f8e4ca00ebd132c41e002fc4b157ceab28b7ec1e94db2333bd3ac5c38b352f3552935fc57a84f7799afb104fddcdeee9ef89ae031673d784ee628dc576704fdffb3a79d985df8ac43b8b3796fef51d5d72c43e38fcdce948bcf34c65e3ac3ca6cce84abcfeabab631b6bf9faa775c3781a7c8feb081fef8c8871cdbe5eeea3b6db0fd812df1728d2103cebc79f35729f45f89edd91c66ebe9d20f6a7e1fed382e7dac5d02bc2db1319dd7c79c9d702647407b2f0bd6d337af8b8e8e170b16e9b23cb3162cf7dde071c11beb8a52befc67a723922a2fed880c899ed9393ef8f9bd113c8c9f74ac9c8f1c999e3c879cc049f9cc2a7efe59537f079960017163fe72fa31778266cba7755ce22adc177201fa2bfb70118b2df45dd74bcefb9a857faf864ee03f2a636f877027cc4f423223eca54c788b4e3e96fe4f7a04eb3f8ba828c016e3e9e9c0b9ed1f745bdd79febfa184f4bd4d303019ea86bf603728af706014e06014c7a1d4cbcf5f960c7b637fced953dfadd10e2adcff93ebc19437d656428c7990364057cb27bd88edbcfa787381ff162706fe31df780c3d5869711f98679e58bfebe9fef77d1de10657138e0d28f39dcfb8dc08aeab21ff1d4c151d906833431ec6172ec783c8834a23820dfc5b3a87c83bcf2adffde9b276cdf9964cb87ccbff073bf3246f074cf02f7b6ecc7f3bd04c47a1cb6fe2c96bfe27811bea74944c4612339fee3e09e5e738927aecdf0ad67cc18c57f5f01ee6db94ea8f4e18cf6e18cf6f13a8678da5cd1efc600bde8ef4f38bc9f7082579f787a4b7d4a677ee5316784cfaf8a88f95563799ae7817b8bd717f4798c730e23629ee138feeec9e09e5ec5d8fd3a706ff3b631dfd16fa39827c163d9c83e3e5c71eeb7bf1e04fba166e4017d6a83dfadc4ebc1e83ab638e7ba44f6f5e9379ecb770ab8a7ef7573d338599c21c8f7f0cf10e7c8af03f73627272e74de3f49eca727ce0912756b1ed0a5a74f8e493e39c4f9ed9275a2911e5edec49ad00c7116b8582324e35aa407f686cd106785c7e13f233f05fcf74a4cef488e9bc629c23ef8f9031913814c13f975b22f4f263b79b2a9b5f7bdb8f2f19822d2579267fd7cb24ff1c93e65f7cc33294f1d7cf24ee77a5c07ee6dfe4f167d26626e5e7b578e93aff2624544bfc0ad8ab2883527bcdd11ed2b9941bc7d257ccfe0c8405786cd621c47c45f5d93e022c797ee2c5fba7c5d49c64c604b223601712afb9d5e45fcecefa3016bcf33668377e9750ef1c674731cfe37aff1618bef0e26de988eef731ced3711e741fbfb68c099d819878067f43a8f78fb68e639329cba96739d8fa45540bc717d812fcdf9c4db47339feb56cbfb7e4621f1f6d114028e21cea33e1c9f5c19454047de0f1401ed1d691f0de7351a2788360e8fbf4ed9e9d5291e9ed4ce841d14033be2f15c460990b9845f172076b410bcbb10bc4bafa53e3b2a75383afd7d1fb6f8ee509f1df1b37e2322efc459bf7e3b0267fd662c02cfe8559c4dfb30b8b765388defa772fa0e242d71c6ec76700fd31467ccee04f7d5001e7f3f6319906d19e09c5ec5d9aa4f827b9a86b0297136ea39e0be5a5599332a401afcccd0c80012dbc6c4de1aa3c13db0b1d344bfc8e0c4f0bccfaa5bec3cb9b1a498149065249b7552d3686e06994a46dab1ff745244969225f6bf46dad7c5f67fce9d782ebeec4632e37cc3c6c8d9e89efda70b4bb692acb63f2d76ce309b66df54d88f8aedf729c638fb9b4a92437a33ecc5f66f85364e392923a5643e69c5f6aa17a98f647f17d86f9432d0a732aa2471679524a87065f67fc5f66795f68754c80afbf918fbc912fbff72fb59a17d3fc1bed2afe6915e64b6fd9f1765869d6c19596edfe5db7f2f6378f36cb1abbe194fa583eda7fe6fa6da984b98748bed2782d065f67d1993701afb7b0593b498493fce7e56693fa3da2c2023eceb2a965a55ddcbed7fcbd2cce794c9653c58e9b9c58e0214d9946b6b43a5cf66b6f8bf1cd91539c2869f9eca708a61b56c16bd9c582527fec7a1e364e8a0da388ed18b5166799ef526d96cdc6d6a1506d575acaaa1dcbe1dbefb913e3175913343b37b2fa6819bc3c3efffa3fef0737ffabcba57b51c92cd42b5d671548b452cc5cb62a7d5a9a850bd7ab59e54503ffd968c7e3674352d8df43bef95b2f7d433a006abfcbc19c08ecbcbb7bd5a1ea83ca733e1cb98687e6528f412e609c5bf8aedaf46d9ea14b3f72ad05f1ce2abe4744f2a564d965955abe2780a63d9159165178bdef3774969991dc753ca33ac56540b37c3b2597cd53286596369b1c0ab3a8fbe44c1bbecbf61255d3ffeaaf9511bfb5b256d2fabfdda13f39a5dd4617a837b6e9bbc24ffb42f3fae2ecfaf3a2cbf929102cbb10c598ed54977018b5fa3c4caafba51bddcfca27fe41cd6436c3e9e0c1883d5640cd64db7cdd3df96329402fb5d750ee9707857bf939213d80031c2f8226014569750d89352d8502215a95edb2715150841ae21cb9c7abba6fa4eceb8691f5f0b1f05d551e36e1cb3f65535ed9a32f6d864c87946d913adca6976f361bcfd5b81fd7e310b51e9f33c1bb1c04e9be20d6729b82d51ef17b199a5b32fbafb9995b2da84b1da11b4917525c318af2561bc27b5d7a61233603ece5f181ae385a13656cc9ae916b33a1872735de4ba18720b5de47a18724b5de4fab262c3e6fccc494bb1713b63c4bf46d8df2eb49559c15ad8cbedef659d37b18b4bab848bcb9eacb864125997929a4458316920cb3bfa702f9990feacdb13cfba8618706b4de04698b5b5d1b5b6c698c87b6b8abc0726725b5d919b6022676a8adc14036ea709dc4c56a499b1a4b71dea34c9288e7a244147ddda261c26772058d330b60c58916d2ecb1aea8369b5aa5bb3b590654fa374674f2ef364f393cc9e4ed44c253ce059d419c9a278726059d4529645d4c8bb6096e3cfa20e7816b5c2f23f2b05f9bf2706be4f0ac0f7c268d93705b4b496592e73e98b8c5aee74fb993370328afd5aca7adb5dcca5ec9ea6267a14627d41ed77a27d2db225a4b2c4b6f4ae519d41ff0aab6de8041ab392f129ccce9f9a48374b7756b0cc0b8315c436328ba3352f9d5ca255f3ee8d2167eb22b7c5907bea226762c8bd7491dbc99069a3970eda57e9b2a56db3c9766e4eb51f95b2565c51d5d46ae2a9b5c79c544e0a9c54070cbc4f0ac03bcac029af74f2944e58d549e6fd587438dba8f7f336e373589d5960bf5d00fe25461cfd4df89c38dead9fccbbb1c0b42df17720a8a6dc3f11ef3580792ffdc430efd419b386819ad6d005b3e1fd5260c359981719a4eb45f6c19007eb22ef8b113224058474c5c087a600bc1b06be7f0ac0bb63e0c35200de43064efbb786475f76c1ffb3ff5401af87836763928f9048fec7b88892e43d313b1ca96b87bd30e45c5de4de12e46cd6d85e47d2db55269feb34c6568ba636d96e361d4a9c492a55633f31d965aa7d2d615214f381d8f873a4625726a388a432614de95124f1195be6b5a033d522acf6a1eb23b22c5a8ab04858268d7ae42caffbc6b2d483c50d568fe6609e669cc4d3bc2e7363313c4d1facc81ea05b64fbca9069911d2fb1d59ed456e9b2893aacdeaf92ce583c9d7e9274b25947cfe1bbd43538436914af844d3f74f026d9d74ab29299ea2230fb22df7ea7dc4ea3d8136225e70ce8d28636fe560971fec88bc324561c8626501c4c6a851580fe324ba20d28baa6a34af38bf64e4d257936f25c560c0f638f294b4eee96b2574bc9e12cb0756612aa34cf06c8a4a14339742547dcb0b6090e3c10039ea209bc1f56c6a7ea96f14132e47aacd8e947588331b1f375c51e8279d4e9128ffab7a5e6518762e03324e0f744d4c0f7c78ac2cc446c2486550fc38067c9ca186d8f8f64d33732edff97da5fd0dee30256fa335965e87a834cbbac97daffa2157637f0fe52fb0d67e6ae8a9cc331a33850d7284660f9769024df7e56ccb79118f86c09f8d80c35f05c2cefe6c8f2ae1721d119800b79dde6f58699aca99fc9a6cd2fe71d5834e72a58be669223ec26c491f6b5d27e3b93d50365ec37fa6f9ad3d4d7aae4e9284cfe8365f2d701f2e7010955521c8df9ad43247ecb52f45b6364e034f0994b90c0671e4926f0198bd15620a38df6158fb2c3171ab92e67ef4f6306501c8d958b5254418e93c895cdc68c96905d1990d1d6025d6450c1feed8628346d770aab4ee045d78ff9032ff1471e78d1156959566f123ff04a85f458807500e6548b244ed55271aae365c8b42c146365a124a9b23001f3af0b24fe95ceb255f1af136506cdc62997ed5283c68beb54864d8bb57e6b822e2acbf0772db081d43e09986daa64ec6a518f43df2fe4cc55504f4da7aacdb7c5a6428f64c3d9947c56dee405ae9415b8744a8e15ba4998c91e2a31d9b18a263b59064e4d769124377beec98ab932c17e794a7179f26445880d9897efd22294cb10d2518cca64c5888deaf74bc0185329675b364259c16a90225e8338f5545b8b3afd72162314dbcf692d037fef6ad56745a8c20ea0ca19e234160496dbb22c60f1b6bcd02d66852edd7a62056f0a56f096480adeeb8a056faa0c9c1afa5259c16bcd4837981d7ec917e3924fc3828065922040a965958f117e9884f06a35d4089f8e895dae2bf60c4cec0a89d8eb15c59e8981574ac0f36baa81cf928153f7be9ce8f5121c8801d35d94aa3439e87400d1562cf4f516cc27c5a00fa0883d596dff5d663f2b6410996c6da99826af22e54118b72b25dcb654e4763646c12a4d6ee7c880a979ae4e0438c670f9c132601a831f4e90189ceef5a01e831f82d1be4642fb558ab4cf9581d3627ea46e319f87211fa58b5c80211fad8b3c1f435eab8b5c8865e23a4926d6aaad96894518f83112f0398ae0c532705ade8e95f9a64e848ed4bba1aed38476fbb60aec866825f33c99b673734291224f1f59099bdee5749ca894f3124ccef532399dad2ce862205ab717b07e549ae2643b925749750146fd7112eacf54a47e2106be4102febd227829c6d7f132be5ac6c9d722b686c47ddacb7eaac2e3a1983427c8a4a1b76ebea9a4b308a374a384d26d75d4282dc3943851a6049d71ebd0b79f4dd924d6e95bc0b7e158c1aa71751a1763129c2493807ab609d1c0202fc9b0600946e92609a56f2b52ba14f3c827eb7ae46598d8a7c89c665d35b10fc3c43e5557ec7219328d3a361324eaa0bbedab471d15583aa763e99c91543a95185367ea32b51ccbe0b324193cb69e5a06afc0c0cf9680af57045f89819f23017f5a117c1506be4502deb1be1af86a0cfc5c09789922f8e118f87912f0ad8ae04760e0e74bc06f54045f8319f905ba467e2426f68512b15b375013fb284cec8b74c53e5a829ccd965da473c1987f069cda8231ba6b74620b72b712f942b178e9633d6d6b65f9426be84b64222954e5eb306bba54624d5f2b16826330f0cb24e0458aa67a2c06be4d02be59117c3d067eb904bc654335f0e3b0ccbc4233333760c05712492cd88d59e75256c668385fcc76985ac2feb584edf257cc262f1430db773b9cc4e405ba655926b7de726ed365b6b5f7b09faa487d3c26f55532a9a9cba07ddb6edcec34259d66886c6e6926e9c2a3ee2e4a729d80d9c0d5121bb847d1c036624a5fa3690327cafc2c5b84566ad4cf627389f359273add62b08459cae2142f6dbc36619fbc9df964ba94c19cac98ff3e4996dd34b6be8e20b1f5f5f6ff75a8c84ab1f526cc666f90d8ec6045bf7532067ea3047c9e22f82918f84d12f04d8ae0a7cac069587333d10c6b366362df2211bb4f2335b14fc3c4be5557ecd365c8f4fddb12713f31bac8cfc00cfd76ccd0ef20c93422cfc4fce70e4dff7916064c7752954ea19b1ded12737a6f0e56acffcec64ce82e89095da06842e760e0774bc05f5604df8265f63d5866df9b54669f8b59eb7d9ad67a1e067cbf26f0f998153da0699e1760c00f6a025f2803a6794fb717f74fe4a4002a13392fc2acf0618915fedd58cd0a2f9681532fb993687ac9ad98d88f48c46ebd879ad89760e08f4ac08729825f8a95ccc7b092f9785225f332cc1ce9213d55bc255d933dd7fe8f0e42d2e1e905248f455074b2f32af6cb32d6daa031bc8aed6ec3a47852264593a8143dedbf17136778c399e891bc0c9763323c2593610f2e438efd7f218ba7e937abecbf9397e00a4c82a76512d40279419722d1885725b52b31f37d4662bef59aa899ef5598f93e8b99ef734999efd598d37b5ee2f432149dde3518432f48187a5c91a16b31f01725e09f2b826fc7c05f92e56d5335f0eb64e0346f5fc6f2f695a4f2f67aac38bc1acb35f54eb16bba0193e2b5d8aea9570a5dd38d980cafc7724d7d52e89a6ec22478239e6b9ac9d2535b36713366be6f4accf77545f3bd0533dfb730f37d3b29f3bd15a3ec1da217e8dd86b1f3ae849da2666aecdc8eb1f31ec6cefb49b17307a6c4071225ee5154620746fd879ad4df8949fd9144eaa6cdd5a4be0ba3fe638cfa4f92a2fe6e4c894f254adcaaa8c43d18f86712f09715c1efc5c03f9780ffae087e1f46ff1718fd5f2645fffd98717e4562546b3929aed61ec0a4f85a26855badf54e61b5f62026c337321944b5d63785d5da439804dfca24a84ddc6a6d141b3359aa38efe661cc80bf9318f0ce166a06bc1333e0ef3103fe2129037e0453e2478912835baa29f12806fe9304fc0245f0c764e034bbe889e53af5c2e398d4bf48a4aed74a4dea2764e0b47be457a2d93df22426f66f12b1fb288afd1446f6efb2b245e72ec59e59976fbfba8ccd7d5bc0fc4e399b78ea2cc32a62639679c43949c159805d603f2d624bb317b27be1370bc87c3ea2d88b8d288ac5dbab89b3a976261bd1778ed2ca64a349457c49ff22f6a482bd550c90e56396a57cec158e72aa4e907d1acba03f241994ab9841cf60e07f4ac0172a823f2b03a7cee82fcc19fd9d94337a0e53e21f19437baa29f13c06feaf043c4b11fc0519382dacff25e28c62745dbf2801ce667b8dee9a01e4aa5b43a5760099ee4a90d800b265c51b40d697151b407e09b3a58825296d8ab6f4b20c9c561119966615f10a865c4d17f955ac7ea82ecb4f05a7f99accfe33e9c3925d62ff3a9bb6c539262d61cbafc92c7fdf1896afb7b59c3c275ec78ca796aef1bc81194f6d4de379132ba67524c5f481bdd48ae95b98d4752d4948446bcbe1aca155ccd64cc856db64b27029537162d4db981cf56472d04d5fd4f0dfc1f0eb6be6cebb18700399e0d47ee8eed3f92c265c44463323a671d942e548ec3d59cad42e1a4aec62566b35bb781f53ab91265f1f60523796485dd6464dea0f31a9f7c032434cb3704263ef744415b53ec2526e224b99761c38e74666470f93ca8e6e0034d92e5b45447501cdc798044d6512b4904a3081fdab92ad58771a10c9ad8ffa0493a5994c96bd1294a5ea69432a327d8a195e7389e16dda5bcdf03ec3146ea1595c3ec7805b6a027f8101b7d204fe12e3794f09cfdb1579fe0a03df4b02beacad1af8d71825ad3529f946064cbd4f9b448063b4abbe9501d34a7a6f0b69d2b6b59269d27e87d19e29a17d6c3b35dabfc794688729d13e29257ec094e82051e20445257ec4c03b4ac06f6daf06fe1366989d64ee946e5e3195c06d498a58b82e1c7916d98755784bf8dfded9f699eccea97ebab16d1ee82fc2e556b0d9f899cc31bbcb9d9dfe29ba707719f1ce8d17e9d07e29a78a2d89baf34ce6cc8b146736fe8c71d159c605dde618eeabe704ac6e05eb2e3d5ec9242c23ee8a59473e2a733c84def6dbaa2b147ec10ca68bc460aa291accaf5891cac28ad43e4915a9df3025f6952891a5a8c4ef584e7795e5345d882bef6d9dcdfb69e90a0fda507176288a95a759317fdd87cdc6757a685dbbf69680a5cc32446facf7b74a6657959252349f49b814f4e53ad84b794357c5befe90b147cfbbea66e99f77f52706de3d05e07fc9c0a99df4b0f4b72dfe1b03cf4e01f83f32707a805d4f8be0a7c2f913e88c27f02f9640af1425f01f96b1bd5390b1c442c07352006e61e07d52001e9181533fd757e2e7feeea8e6e73230f07e12f01d8ae0d5305afa4b6879e6e9a787a8d0521d937c8044f2bc4e6a92d7c0c0074ac09b2a82d79481d36ec0fd74bb016b61620f9288bd5951ecda3270fafee01478af3a18f81009b8a5085e17a365a82c3e56a4a51e66e4fba7a0ecd7c7c087a500bc0146cb70092daf2bd2d210cbd01129b0964618f8c8148037c668c995d052afb31a2d7b60e0a3643d908ae04d30f0d112f0358ae04d31af3546d76b35c3c41e2bb34345b19b63a6324e622aaa33e25b60921f20ab9a15256f89493e3e0546de0a937c82ac2fab8b9ae47b62e01325e03b15c1f7c2689994829aa23526f96489e4ebb3d4246f8381e749c01b2982ef8d814f9180d7da470dbc2d063e5556812a4a9e89814f93800f5694bc1d069e2fb37345f0f698294e4f4109ed8055fd335250f577c4689929a1255f91964e12f0ec76f6ad4577e44dd7ce38d3897320558e9dba3859596d779c5992feaa6c76046fab2a7a2492da81361e3d6080ad36fddd26b5e3be76d9b7ffdf69ffdfb42bc1f6c83ec8a27d67c9a5899ec08a19c06c8901b4de57cd00ba60e07324e06315c1b330f08325e0958ae0fb6085ee901414ba7d31f0b952f0b5fbab8077c5689927a1658b222ddd304757207174114547d71d937cbe44f27b1425ef8181174ac03f5704cfc6c08b642d85ae6ae03d31f06209f80045f05e5886964832b49a6286f6c6245f20917c8ea2e43918f84209f8038ae07d64e0b49fbbd492f4fad3be4f3a2d6c119bbab1928d35b973b6d5773eed8ba57ea82c75bafa42cce471c6d7e8372ae9f5c3a85c246b2e2a52d91fb3b0b214c4460330c9174b24ff5851f28118f8125924dd4d0d7c3f0c7ca9043c57117c1006be4c027e8122f8601938ddbcec302b8179045b71e02198d4e512a9dfeeae26f550cc0c2b526086fb639257ca5a2ed96a920fc3bcc1729937b01bd1c0f714b1b1bb4236be5714dd4b8e5e57b04f4ad9889f7b249f3beaec4cf22eb7e34c154f321c9375854c561ad3e6da1e53782f9594466029ad94a5d490bdb784e9586a73407d248d8da7b09f5567d28cc4b27b9524bb9bf654cbee5c4cb1d532c5da79b23b7646fae7171610316d4045f951987c876355a333f02de6d4e9cd9f1b8d517f8484fa098ad48fc1c0d748c0f37aa9818fc5783b52c6dbbe9e7c9dc072ae92388bafca59ded11ca4eb312ad86c7431075ae4ba37a7ddc2aec2f5384ce2a3b022e61e3a282b6c2a691f80a57d346665ce09d273537212c2782cf5b5b2d469839c2e7fa59beec49382be574e54e7f54ec0e4592793a72990a7389a2393f884a7e417054fc4a4384626455d20059d6ceeda864a9a93b02279aca448bede5bad484ec6145a2f53282b4e9194173d9ad9740ed06a7e3cee2236036719af8b55a8c8c3a8384e42c5998a544cc1c2a30d29088fa6cac0a97d1c6f698e184dc3c43e210562e763dd341b53d007341de3e4445d4e66c890e9fb2725129fc798e73b1333c04d12032ceaab6680b330f09325e03f2b821f88917d8a2ed90761649faa49f66c0c78b326f01c19309d95795af407dfacccd3ad6466651e8c65e819920c5dd64f2d430fc13cf799f13db773287d171e028bb5f04e0b44cca8a4732cdd599acedc49780eb65a30331793f62c2c90ca6701bbfff4ed64da49f3300f79760a3c640196c7e748f278a7621ecfc7c0b748c05bf657032fc4b2e45c599638eb948489880d0cca40e54eefe7b328d789f554b2a80853f43c59ef81a2a2c518f8f9b20693227809067e81047cbd22f8020cfc4259e8a708be102b1617498a85ea40462926f9c512c93f5794fc500c7cab04bce70035f04518f82512f04d8ae0655899bb146b55c52b73857c90983a47f572b71853f63289b2bf2b2abb0403df2601bf55117c29067eb904bcf54035f06518f81512f0618ae08761e0574ac0e72982976361de55ba615e0526f6d5b2dc5414bb1203bf46025e6b3f35f0e518f8b512f07c45f01518f87609f82a45f09558a07a1d16a85e9f54a0ba0a734b3760d199d8774e448dc977a9acc6d2be51967603e276a938512c9d0b5396545c783896753749b22e77905ad61d81a975b34c2de73861119eaf2405be55f0de2058cdc7afc124b9452609bd1d1e8de354d239128b276e4d41987d149657b749f26a8b625e1d2d03a7c2dc9e4843b33b0ebc16a3e48e1450b20ea364872c0a1aa246c93198e7b913f33c7725e5798ec5eaabbb75ebabf558efc13d9abd07c76122dfab2bf2062c47ef93e468c7a16a397a3c067ebfac8a55043f0133f4075260e81bb1e2f9a066f13c1193faa114487d12c6f7c3b2b69b62f1dc8481ef9480cf51cccc9331f04724e03bf657033f05037f54027e8122f8a918f86312f03245f0cd18f8e312f0ab86a9819f86813f216b752a829f8e813f29b31645f03330f0a7647e65b81af89918f8d3b20c55043f0b73e4cfe83af2b3b1bae759cdbae71c8c8fe7247c9ca9c8c716acce7f1eabf35f48aace3f1753e245599369849a12e7614abc8429f172524a9c8f29f18a44896d8a4a5c8059e6abba96792126f66b12b17f5614fb220cfc7509f8ac916ae01763cd983764cd189a9f705210dc16cf19df2867cf9c1d2adc1d7f551a3c5b3189dec45aaee3f8cee4f4d00bfa039d1430ce96a94ce60662a47c0946f45bb2d69022d19762c6f7b6aef15d86b9c57734dde2362c27de4d0438d6c14f1817efe97271059685ef4bb270a762165e89817f2001cfcc5503bf0a23fb4399d93725fecdbb9d0db097f0395bceacacc3896aafc6d598141fc9a4a087140c67039dfe492b33d8dfa56cdea0aa0cd760347f2ca1b9db68359aaf958067d3d914563a578ec1ad5f935b39f689a4decdee48f5a8ba8a2b91d43eb5f16a50c2e89f1ef69f9ac852b1cf2cf952b14412c1968a6dc772fc73498e2f1ba596e3d7c9c0d9292358e8f26552a1cbf558d1f90aabb7fc856622a1834d0bd936bf2a05e606acc1fdb5a4c1ad3ae47823a6d63732b5a8058e64b370c50ec6745ab8e3a97a4427b295b042b2988708bd3d8702d02739ca41c34d98057d2bb1a022459f7133565d7da75b5ddd8255dddf6b56ddb7627cfc20e1e37d453e6ec3c07f94357cc7a881df8ed9db4f327b1beaa9070bd90f65b6a7a18740d0d1dd25446cc6b79815367aa84425ebf7a7fe891e66b38cfb2c2788858754cc27cb899868e9dd6cd0b55a151bbd0333a39f75cd680786fc8b2ef29d9881feaa69a077613eebb7147412de2d036f69dffe6ed14d49ab824b1328c413b8072b017f484ac0e6b16a25e05eac04fc292b01ed89bbcbf362b29cafd1984f9c2d02e9bfc5a681f4dfbd805d8bf130f56584f76112fe259390f252ca9b63ee6ec7154a29de8f11feb784f07ae3d4087f0053e71f993a2d993a55172154a53fb9c5110f62aafe2b51f57145551fc2c0ff9319ee016ae00f6391160d3aa49196154926d2da89f98e4844df773c823194119158da7835861ec524af2691fc3ffb8f8ae48f61925797489e39414df2c731f01a12f0558ae04f60e03525e0b526aa813f8981d79280af51047f0a03af2d011fa608fe3456add7896856ebcf60d57add885eb5fe2cc6473d091fcf2bf2f11ce65fea63fea54152fee5794c898612258a26ab29f10206de4802be4d11fc4519383d7fa071849e4ce463a835a1ab4de8d1c1b4bf969eba96cffb3a08fb859a9a37f885bf77b5ea13c282ead1bc39378dd784ce299512ce17e392bf84d1b2878496b715697919339c2698e1344dca705ec1028966114920414954090c5ec5d09bcbd0e90f4e5c989d4484f71a961d2d24d9b1254f2d3b5ec7c05b4ac07f56047f0363a95522ae2dd6394518f09e9ac06f6174ec25a1e375453adec6c05b4bc0e74c51037f07036f23f3658ae0ef62e07b4bc0bf56047f0fcbccb6b2b25449e21d95e9f66c257f3ca67346cc5ccf819bc13e2cf37d2c8b322559f4b762167d8065513b5916397bd5f8cf2b5551e643ac92688f55121d92aa243ec2f4ea28d38bd612d94a7a7c8c654a2759b999ae96299fc8c0e9fb9d250d184b56c1c568c07c2a03a763335d643940bb9ab3ec1f6a502ee89f1ece9f9a5573838e5920697e8629b44f0ada929f6359b1afaca29ba996155f6076d4556647eeb60fa2e8d32fe8890dab7957a85844ef3ab3956ca4ab8cb853a69d7e0d778c5fcd5d7c8995b06e5809eb9e5409fb0acbd31e2930d2afb13ccd96e4e95507aae5e93798e43d5320f9b798e4bd64a1c06c35c9bfc324ef2d915c750cea7b4cf21c89e48d0e5193fc074cf23e12c955b76ffe1193bcafcc0314a849fe13569efa61e5a97f52e5e9678ca1012960e8178ca181b2e8b7488da15f311fb99fcc47b620f16637f9978ca878bfdf305906c964a1b753a37e56259ddfb1dc1a9c82dcfa03031f2201afa608fe27063e54025e5311fc2f0c7c7f09787545f0bf31231e2631e21dabd58cf81fcc7086cb0c87c64bb22d6464e780a66e0b997f310246480868ba428d80ffb0ac1b9982ac73c7267ce0b92900b764e094c651b2ac639b864b1a812a1911c1521c2d4bb13991b59a263233a9e066e0fea216ed6560928c91494211e8dc29d5ce936a9254b23bd9b796dddc4cdb7cae7cfb8e4e24509fc73536424fd0f692c12a68e9e4ab71113af9aa5915cd62a58f4dbaaa2ecb1f7a7b40849e37ea15e98089eb6a5ed0fa994895aca98e674d0dcc00c6cb0c8076268b3dcc4aec877359d3842aa53a805a53962e3b7842e28be61dade68b6a614a4d942945738aeedfbb9077d4886802b6b6dcd3245594ac8dc93149264743945c31414625ed3ab2b4e960c164dd71a9ba9833ce4b416bbc9e0c9c3233259282639430a39b2a31ba6e6bd58cae01063e4d02de729d1a7843cc92f235fbb51bc980a96b9e9e08307575087063197026854b4862bc33680f8c8a99b242452dde8dab962439dda30996e62cbc9a545f94df14a3ec404dca9a61e21f24139f6ea7e93da7d4bf13955ab4d31c2b18b32505e371c582d142064e9dd71ccd41f2961867076b96b85618f021b2cca0ae52849bee36ef3ad9b127961d7325d9f1f4316ad9b117a6dc3c9972ee4a25b7b9e30ecec0739bc509b64e634945ddd6984405582c20f6d890cd1f4b7eaf8f36981cf363c502bd52b2cfc8de58da8598cb141c380b4792d961a42d9666912c4db869ad3cede4b6cecdc46295e214c42aedb0925422294967ae572b49ed31c917a440f20e3270fafec2449c5b8c6d053aca5a7af4acdfb4b6f49cc50de549b4f44a23f4407baffe3d9076dea1483b2f56ea583baf938c37ba99bf35378dbc39ef393d0ad3d8c66aa5f693c96c04cad962bc22094e174562cce796325bc698ed5045f364e5434fbfc27cd4626c746e3619cc90cb18fa10bbb131ca663487d0b3b7fa90a1f6dd54fbbfc9f6ff8349367873a8cd9053d3cde62377079364b6dfef8249bc4426716ba9c43dedff06b0bf7bda7239c145556955a4cac21ce15289237c79a39a23dc075379191652c8e752b84d7859b0a1a2eebe98ba8749d41d70a29aba5db180b65c33a0ed26036e6bdf5624026ce1ad8bee181d95123af24f52a3a30796fbcb65b99f4948d41d2e65a1a2bffb461e68c2d313542c211b936e854cbaf644c4f2f4d0be2296ea74e6baca989bf63b76a7d3771a7778ce2e97f41b15097b6299b35292390f28da6a2f0c7c956c444531e77b630561b56641c8c10ac2e19a05a10f46c711123a6a9dac46475fccd4d6c84cad9fa2a98de28beccaf99325acd551c68cd089bf2bc0bff51aa0fd309a8e94d054b9498da6fe18f851b231ae53d4c007602679b4a6490ec4e2f1b59af1f87ed8f8c13ac9f8c1ab571df073cbd95f7ca8327e30084be0184902151b4fffe4dde685b35512188cd9fdb132bb177b64ca0728d496b30dc17ad0d7ebf6a00fc5908fd345de1f43dea08b3c0c6b8f1e9f82f6e8702c934fd0ec6c1b81f1b151978f9118f289bac8b918f249bac8a330e44dbac8a331e4937591c760a6718aa6698cc5443e5557e47132643a74ba3911919be0c00760229fa62bf2788ce5d335599e80897c86aec81331e43375912761c867e9224fc690cfd645cec36cee1c4d9b9b8289bc4557e4a998cd9dab6973d330e0f33481f3312eced7e5623a16595ea01959cec0aaed0b53506dcfc4f8b848978f59181f176bf271a00c38d3bedd9a906de08dbf8330a3bb44d3e86663c0976a02cfc172ef32dddc3b18cbbd6d9ab97708967b976be6de5c8ce42b34499e87015fa9095c80e5de55bab9371fcbbdab3573af10cbbd6b3473af0823f95a4d928b31e0ed9ac02558ee5da79b7b0b24c8d9f40834eb50627224693adfd670351915dd568c62ca3ae3e9180df6be18359ac8765873fa97628f2f5d9f485e8cc1195b88e5c50dba79512a43dedbbebd311191b7e3c08762767993a65d2ec2806fd6042ec3cafe2d9a657f31967bb7eae6de128c8bdb34b9588a01dfae09bc0ce3e20e5d2e0ec39077e822976364dca9494605067c97267025d6d4ba5bb3a9b51c93f81e4d89576012dfab29f14a4ce2fb34255e85497cbfa6c4ab31e00734810fc7a87850938a2330891fd294780dd6347c38054dc323313a766ad2711446c7239a741c8db9b847755ddc5a8ce8c75240f43a4cecc775c53e0613fb8914887d2c26f693ba62afc7909fd2453e0e23e4e91410b20113fb195db18fc7909fd5453e012be4cf6916f28d18f0f39ac02762c02f68029f8401bfa809bc09037e4913f8640cf8654de05364c07442f32b11fd253ca762e0afa6007cb30c9c2e8778cdfea19d045c9a40673c81d330e95f4f81f4a763eee98d14b8a7333027f2a6ae133913437e4b17f92c19329d0bf276a4ea5c10292131e6829c8dd9ca3b29b29573305b793705b6b20593febd14497f2e26fdfb2990fe3c0cfc8314809f8ff9c50f35fde20598d41fa540ea0bb152f4b16e29ba0843fe4417f9620cf9535de4ad982bfc2c05aef0124ceccf75c5be14eb79ff42b3e7fd324ce42f7545de86217fa58b7cb90cb98d7dfb7522646cc581afc058fe4693e52b31abfb3605567795043c7b1ffbd69a434cf6ebcfb0d146b23772c9785bc41ef695ae862b00ffcab7bfa01b1b2e61bdf4ce17e2fdd87df7df45aa6e799b4d175a5899ec995eda8d19b23b079020c7e57c1fa1eb4d529122b6d2e46aac52f941b352b9062b7f3fea96bf6b31917fd214793b26f2cfba225f8721ffa28b7c3d86fcab2ef20d18f26fbac8376219f8bb6606de8489fc87aec83763c87fea22df8291f1972619b76222ffad2bf26d5805f88f6605783b5601feab5901de8171f19f2e173b64c8b4b6a49ba3e94c90bf13abb3ad0cfd3afb2e4cea88a6d477635267a440ea7bb05cac96a1998bf76286573d113e6218de7d98c8357445be1f13b9a6a6c80f60c0b534811fc43c5ded44806378ba873092ebe892fc30865c57177927865c4f17f9110cb9be2ef2a31872035de4c730e486bac88f6346d748d3e89ec0446eac2bf29318f21ebac84f61deb9490abcf3d31878d314803f8371d24c97936731e4e6bac8cf6184b4480121cf6376dd52d3ae5fc0f868a5cbc78b18f29ebac82f614cef9502a65fc6c46ead2bf62b5814d646330a7b15e363ef14f0f11a26755b4da95fc788ced425fa0d0cb99d2ef29b18727b5de4b7b030ac836618f6362672475d91df9121d359a59d121139c6acd2773167d759d3d9bd870177d1047e5f069c69df6625048ccf2afd00cbbd7d7473ef438c8b7d35b9f808e3a2ab26171f63c0dd34813fc148eeae4bf2a718c93d3449fe0c73f9d92970f99f637cf4d4e5e30b8c8f5e9a7c7c89f9a2de9abee82b8c8b1c5d2ebec690fbe8227f831947df1418c7b71878bf14807f8771d25f9793ef31b107a440ec1f64e074907c6022d617e3c0a11fb1f2b29f6679f909031ea409fc339683837573f0170c79882ef2af986d0c4d816dfc8681ef9f02f0df314e86e972f20726f6f01488fd27565e46689697bf30a947a640eabf31f0dc1480ff83e5e428dd9cfc17431ead8bfc1f46c8981410420754a4e06353006ec9c02927e374398960621f9002b13364e0b4dc8cd72c37d530a927a440eaea18f8c41480d7c07272926e4ed6c49027eb22d79221d3f7f334dbfab531a6a7a480e93a18f8d41480d7c5c89ea64b763d4cecfc14885d1f2b90d3350b64038c8f19ba7c34c4f89899023e1a61e0b35200de18e3e4405d4ef6c0c43e28056237c16c64b6a68d349501d39978733224e7b7d3c96c927968fef4683b0949af19e6b60ed6745bcd65c07482c92189006fc5815bc880d9d9418900c758a3d71233c579baa6d84a86cc8e09d06c98ed8971315f938bbd64c0b43c146a0e10b4c6808b3481dbc880e96d7146d5bd22c59f2a0954c713d81bf3272529f0276d31f0052900cfc40c7ba1ae61b7c3bc47a9a6f7682f03ee64df1e9a08708c93833a60c08b34813b622497e992dc09f3a48b353d69674ce425ba2277c10ae3d21415c62c5902749be565897012639be57d30577d98a6abde17cbc572cd5cec8ae562856e2e76c344aed414b93be636966bba8d1e18172b74b9c8c6b858a9c9454f8c8b559a5cf4c280576b02f7c6800fd704cec172ef08dddceb83e5de1acddceb8bb98b2335dd453fac9e3a4ab39eea8f451a47a720d2188081af4d01f8400c7c5d0ac0f7c3c08f4901f8200cfcd814800fc64acd7add5233042be8c76916f4a198c81b7445de1f433e5e17791846c6099a640cc780376a028fc0b83851978b9112e4ecaef6ad359dec9a03a566f385806a87479d2463d8f2f1c016f16dcaa08bf85a55d12e1119b0657bb998573839055e611496f9a7e866fe684cec535320f6180c7c730ac0c76295f5699a95f5381930dd16f3f4448063ec1e7900968b67e8e6e27819329d5b73662222c7985b330113f92c5d9127628ef26c4d473909e3e21c4d2e26635c6cd1e5220f33e573354d790ac6c5799a5c4cc5243e5f53e26958a47c8166a49c2f03ceb46f2f4c4862bc8f613a661617e99ac50cac77f562cdded59918f0564de05918f0259ac007625d5097a6a80bea20acaaba2c0555d56c0c7c5b0ac0e760f677b9aefd1d8cb9e82b345df4215821bf52b390cfc580afd2049e87917cb52ec9055867c6359a9d19f33191afd515b9102b8cdb5354188bb0fee0eb34fb838b31c9af4f91e4259803bc41d3012ec05cc88d2970210b31f09b52005e8ad9e1cdba767828e69f6ed1f44f8b303772aba61b29c3806fd3045e8c917cbb2ec94b30ff7487a67f5a8a89bc4357e465b20e8d6ef6ad3595a4af4363b8fd56b9adc0ea24ba32ee4cb82be32ed695d1bc8a5eb153c73a310ec31cc1dd297004e55886dfa39be115587d71af667d51893573eecb909c2899cb6edd3d9e46107a066a319944e871bc2b19ff8b78f7520f76f6e438fbf7c9f62f4b9895d127f2b32e642763d0b7619e535b5ccaacb640f1e0dfe59896f7cbb4dc10d5529c16eb9499c5ecdfe35869a2da94d89f3865665cf4cd517649724e8c9dcab4a0676dae606ff7e0fa14b3639647da4951bd28ae973d1781beaf26078644cfaa2db7b92e66a89053d821e8e77b868d53aa781cf80a8ce907307b82293a3ad1f3e31db696da7e6aae6d1be52ccf1d6df3c94296ff7e69dd6ff1e7a9b2a79598960fcab41cead31272eee8399ae5d862a6a35f4a6f0ec15f629515f8958a66ab30cd1e9269b67f42f937dcb6a12256e64b99e5eae79cfb8b8a6eab31dd1e96e9d6cfa7db44963b0bb966f46ed52ed3e4704c939d324d36a5d99fb9dfe4dad7325647d3f3b147b3fa7a314b21712b87dce15ad0ba64398b02a0d7a3314fea7cdb1118eb8fc8581f9e50d998c0d8a80884575b83e9f7a84cbf0906ad8a3e3d8c2543b57222d452967429399c9543b9274926578fc4b47e4ca6f590985ae3924e65bad013bc2ab98ea236a64f0b394355cb45f2b97914a6d7e332bd0e548eeca6b15fbcb19d0cc1799617f503e5767d405b1f3a916032f97c34c6c713323ec6a7a5ce365d9bafc5747e128b53d46c40d8f004fbb7420604f359d52254345b8769f6944cb3fd10cda6b3f259c66313a7f52b5a2d3378292eaa921b66da28c7601a3d2dd368b441ef2b7295be5360eb5ac66aefd4697a2ca6e933324d07dbb7897b0aaf0605ec99a31de5642ccbe572d61a2ab46bdcd529d46a3da6d5b389b409bce9c208613acb8572fb5d5a0e17c4a8fdbc18a9d3ec384cb3e7649a8d8ceb39136b15e03e34569b35594fb901d3f179998ec58623ea4adb3bd21eb8053c629ec12ca0345a1a53d3464ca6163d1ee3e905194fd37759cb233643fa3c9c80f1f0a28c8711a80fa32da4f9f64ba26c4c60b91ebbc69123a53aa737621abe24d3709ca2863399452f41726457e87b22a6efcb327da71ab4ec8a24eadf54307012c6c02ba9aa971ddf361cd4cae6b5da8469f5aa4cab318a763c8a8d422ce5d1eeaeb6e193315d5fc37a28547370347ba3aa35fafd6be2b82afa9d82e9f7ba4cbf411a916325ab7997d8fa95f0761eae557e957755743a15d3e90db53cf3dbe770d69f40bd4abc568ad99a7233a6df9b898c0860d1e328d63f54c0db6e55e3f8e4a2c7e463e4d3302ddfc27251a565ec683e864786eeaf745c27760c9caaf8f8744cbfb765fa7524b1fb3ee9a93126a43c0393f29dd83d982ab9302da95c3059c2cec4b47e57a67577d483e447e708404f5812edb5a711ce7269749ddc28c65998dcefc9e41e18d7338c6323a0b48fb5ccf6ece5b66e749e437cef902a1f7036a6cffb589b207619a16dfe3c1627574822a544464c687c5992420dcfc134fc20919e00f908c838667bb1bd793a4741b6603a7e88f5c325525f25a265baebac73314d3f92693a36a1dcf48f6739e550e8bd2bf3f53c4cdb8f65dace8a9baf66fbff4d8f0c9c8fb1f1898c8d89689d2146c54ba2ad225a232e93c8e9c8e8f45e25f30bfe9b8ade17607a7f8acd6f484c6ff97c80f4ea7621a6db6732dd0628c601cb590bc719e5a1fd11e22ddacec8659181bc6f12fea6a2cd4598369fcbb4e9aba98d3353c139d1d0793f55b97231a6c717c9cf1a88d7fa49a75fdd8ae9f76522f525b40ea8e134f6d469853bbd45b23102afdde1bfa4c6222fc134fd4aa6691f9fa62399064e3f5fa5a71d847b82585a246b8f97625a7c9dc838b8ca0cbde0d4fd97613a7f23d3b9b74fe7e9402677d6316c93c7d26d2e8aa5a2c1364c836fb1b96b89d55b23593b96b6937ad2d54569a8a52ec734f94ea64937e26da3e7444f9e15d709b61c15c4df7f97eab6ea1598d4df27d2bf93a8d4023bb63dc546764fe455d1ef4a4cbf1f64faf557d46f2a435ccabcdf70a5f2924c7fc855982e3fca74e919571797517f6eb9fd0da9f3555763d2ff84f9aae4a477fa068a99e75ec246a1628d60a868700da6c1cf320dba28dad248ce6ad51197646ce55a4cd65f12a9192043ba3543b26c6fc734f855a6c14151b6533f6e29faa7939fb9901a46aec318f92d911187aa634289c5dcc9b5df93f713d7635afe8ef5dec82302b11e6c29bb5b22b1642ab76c84d36bcbeae82adade8069fb874cdb76be3cf56b447d882351aa6cee464cbe3f13e94bab6a7355bdb36b7f556709a7dbf66ec2b4fd0b9b339da8d79c16d76b9a9cdd7433a6d7dfc9adebf18f48ccb423ef52f6f634bb4c14486b5d337dbdb7609afd93dc1c3efdde4f37e753d5a7792ba6e3bf321d3bc5f111eedce66226096d35a5a62d711b26e77f898c7b55f565b47e5acde23cbf7c906373f1f6ed983ea41a32173bd1ba6257cdc9b803d3c89269341dd5088b25b0d1a0446609a9cf244ade6becc07888c878d857810791a74bf8d872aa7cc09d98c41932893bc7f573e6bcc05d98a4d56492f647b9ad6ae95ec997b108dc9d156ba2bcdc8de9525da6cb2892489fe244be5aaad4bea365a490e033dfd5fb1293cbb37b303d6bc8f41ca010f7241663c74753d1e65e4c9b9a326dfc3101560f255a07a5a76eba0fd3b1964cc778733254c626d26593f7631ad69669389ea8f617891a6b71b41c96c6f424fe9ac8446fe50398ce75643a0f8aabb3b787c95999a2227b2a2cf5414ca7ba583eaa45514eef4cd55fabb626f38973328ff956fd4398cef5643acf21bbb6ef0af292688b4d7ca3c2cac3182bf565acf85ba1224595be2b5733cc0e52134feec4346b20d3cc3f56ac1a4defca1e9247304d1bca34f5f72b6363c58e8df7237de2e827ab57e8572a1a3c8a69d048a6817cde024d537dde82a31ff63c5539f418a65f63997ef86a97aa33814a776134f038a6d51e32ad26c46dff4ce3b57e55ab1ac946f9cb63f842f7dbc96c1eae1327c5defb23b97ae4094ceb2689943679fac98de224db6e7d12d3a029668db162712a5f91fdcb2a9bf9aaf37fb1c83bbe0fc1adb1a6fd9f65b1b382d99bcedce5a58c091a6364d369e760acb547b466eee1a9c5dde734f5c5b644b474e747eb60bad75b6c846636613522c4f9d38576d81071d4a055e2e3cdf9b28c2117020bedc1f2ddd9d78246bc3da211a2d8092f9e16b268a4078847a076f1753a18d9aadfb26a728d0496cd740fcaf4eea669739aab393c5723d9d954c7ae495a537c295ad0d432e436d4a20ab3b0cccb64770026f19e2e8b9e7798c7ba6444d78cd399ee6cd4183735584a65a975670022768b0b072724c9e05a3113739a44e5c499dc5dd489909ad5233d692eb43449551dfb86cecc1cc76b5eea072aec36571848da9ee392d4ca244914373cb6b3bd9f4bcb9e2669a1a785ce65a5d9296cf8de4c61a0eded6a2e6d7b99a4ad152b72e52c60cf23ce160b229cc308ac0805851f5b2e85ad4d52d8c8be11bdef6399c7a20005ac2d47e79a4f0e8907db51cb25ac8d49c29ab2a23a97f424eee6076126ae655d97b8bd4d12d702581a9d6be02db0e3581fc252cfc84918e8db32c6a5afad49faf690d81d05a4136ee8c2cbe5ec695128489b475cd232d3451a9cd72bda0da2351106d27287b8a4b533ede1bc55c268fb6f670bf6a2e87278c7d3858138ba65ba20ae7dba3c1cddff6c95fd2f995f73f7960d037d3f1fe0d2d7c1247d74dbfcaa1543b843e133411cd7d174282c6c6f1483a12b030b7830328d5d97d9c1f272667b61a2f0f1f62e859d4c5258175416933dc37061a0e9ebbd5c9a3a9ba4a936a0c9dd512a0c14cd6aee52d4c524450d9827135d8d4b98ef9acc867d8b582d1a06b2368d70c9ca3249560d664f15a10a29ead577c9d9c724392ded9bc9d16e217f1f2c75f7cb9985d1a82c8f0f2f8681c05b5bbb04ee6b92c05ac05b5131e98cc13010b4b5b14b5057d341ab20c811c1df389ac123b012524ac2d2c2dc3ed2a5af9b49fa9a81b8cb4f5c052ba205ac336889fdf9ea5050f7f22097baeea603094acc48e22ec80f8775ad01deab87f97101d17f51c0ecab38da934141c364593b26bab465a7cbe98bcd7bc34050591397a09e2609da93c0d6e22aa6f5f268ab90aefe2a621e2c8cfe8bfe1124f63249223d7611924787ede846fdd48b2de7bd65e1eebda0f3790495bd4d52599f5705c2de56f310773af37761a06a0ba81272cc37bfc5315262aa5118287a7fb04b519f7475608fe3519898452d3a15c3d4da24606cb3af49e2da827a73ba8d59c4a3b2ddab43714b4797ce7ea63bb4a11dc2bde487b32e6e5884c311faae07c3c5fd4d92570fd8a2bb5db8b3917d2888020df8012689a2333826326fb6c877fa55aefd7a394b290c84cd8bb8840d3449581d502ce151776120a9a88f4bd27e2649aace929ecf5e080735170c74a91964da3309fb71176139428481a8d7810d0d3649149d7de1dd4d8dcee9aeda4b1606d2ca4087e21093a43524b22e9fb08d1ed51bebd235345db1be3359c5bb66b22864b17e2588f5f7375d389d76642e4b3accfd145baabba40d33dff8f617ce3050f4fd3097a2e1a60be42836cf7a394bdc3d6ed53d7eb7826d2db52c14c47d0d6c6b8469db129eccf1599561b12db07a64a4498a1a78280ae7dc57baac5090956bba208a35254b194cb83ba35b838238ca24718d093ea43b9288ad9ac3405919e8711d6dba603aab8f690f44311b3d723b09c311e1af05e3de634c920507759d8393fce346615a3a38a1af4bdb5893b4d1e9996ecc358acdae76a6d78581a601603add389334b56434e5d99ecae9dd3a8cadc20fbffbdf5c931258b3ba0fdcbfef4af26bc7d558c757b9d3063cb5ce65bcefccf1849e55ef3406089ce4075403abd6b3929e229015374acb4a782d5396f29a80ac24d7846625d48d9ea539e69fa5b0d0374b2980cb4ab83d9fa5d442cb4aca9f64290dc1662975e26425b464354b699d6696f2509d4c667c9554569549ce5931c7b7b2a4d356b3a4f39ab29009f95931d633642173efb2e24cc4c84a6a3e7256928b53b252301e9d1567078b2c74db862ca4419e858e1f65c51c19c85288fbb2c03e0959bea198acb8c17696e2a4d4ac045b3c59c8dc13af3f8fb5cc320be940cb8a11dc65c55d4d9195f040435612b39db33ccbfa125bb89c95402fbe1737b1e582590a1342dd4d8e60f0e16e4ed4936e7234bedaffeffd877ad2fd872650122a793cee44e8134d0fd8d33ccc217dd9d5d9768ae69ae3a1e86bbe345b5749732a2f94cef97f22f296a55edb139b774f44a164e2f30e60f87e92e9068e97b658bbeccd25036c358cd1d9c0149d3d325c3a270789ce81a1a4733aa0332f4874f60a259df9a0b04f09129dbd4349e73a40e7d420d199134a3a2f01744e0b129d7d4249e7ad80cefc20d1d93794743e01e89c1e243afb8592ce0f009d33824467ff50d25903044a33d3d10aa20150da5b417b9aa2ef1be2d237cb247d0d59d26e27a5bf2ba9ca8e1c2120af0920efc07414e505686186e2d3364f3f7374d633456717cba5f3a020d139209474b60274ce0e129d7d4349e7e3a0b0cf09129d7d4249e7cd80ce83834467ff50d2591d14f643824467bf50d2f929b0ceb941a2b35728e95c08e89c17243a734249e76640674190e8ec1d4a3a8f0074ce3749677312bb45ee2de87dcd51d9d81495bf82ce8dc2a05099134a2a47838e8da2a050d93b9454d60654169ba4b219a7b2904f35f01f87e788ee1cb5d6db1c91d54d11390814ef92a010d92b8444ee07885c1014227b8690c8ea80c88526896c43dc894c894e14a5ef97b377c3d7af3e0f0445a526896d4de2c598f2c3b88d16fccf2c530d4bd04e3fd424ad8d8918aee865ffbd8288e30de9b3340c5818abcb1b0202179924b04994c0b9ec0507c899369826128d0d5c5c06482c4b47e1eec9fe4e642a71987de67440eb6293b4c279e62aab4dc24cee7ea0425ab22bdb4310ce682554d314956340d0b4d42495625679bff48f981bb3c353811d2e4b0779037623f29e00e41d66923cb16e026bf7780bb1d1213463c5781ca86eca834466ff1092790020b3224864f6092199a30099954122d360efa53132c702329707894c833d98c6c81c01c85c1124320dcebd3446662e20736590c834d893698ccc6180cc554122338c2d9ce180ccd54122734008c91c0fc83c3c48640e0c2199130099479824d3d94da19413596a7f44fb81e8ebe1ebafec485cd2d6a4a3ef071f8cf0cebc0c5ffff977c0fe8edcb5dd680e14edfc353af6d8c11495a7806eb4a34c52b92fa7b2cc7ea98c5dc5063879f6ff7430cc199470f619984672c9783282f5a717f367f0bde1b654a566296f628af2166026c7d126296f15d711549d9769b06e3736f7ed41e00ed6068d5083f5bb31421f0284ae0b1aa1062b2c6384de0a083d2668841aec4f3246e86d80d06383466818e70fdf03085d1f34420df6c51b23f47e40e8714123d460d8648cd02b01a11b8246a8c1fe2563845e03083d3e68841aec973746e87640e8094123d460dfbc31426f02846e3449681d46e842b643a3b31b289d1e6bb097c9d8e4049a1782b2137765d7089cf06ab49dbed514959783ae91934c52d98051e99f9f4905a6bb8cae0a61075d1760859b4c52e7ce10a693ffd33e43d85831be0378be934d1248777175f6191e6effedec06eeee593c859149ff0f1f8599c0064f3149a1981f2c7a369d9513cefa8a712457daf71ede553f0782decb534dd2da85f83b8c0b1898bb33ef08fb7f5a67d3452b4bd91ed4b186dac2389ebe1254419b4d92ed6e8fdb3bfd33358dd1d712d0779a49fac41a73b84440be03759867afef0095d2e926e9140bfe7a2183bf615fba723aa89ace4847909ed86484307ac8fe80ca33d3e1217bdb49a6dd431a1bfead073ce45926e9db9b546d2e4e27cee90fabd9c9064e6746315b5a55c0acb584c12d366b99db4d515b0aa83d7bd716f2b04f52a8062a9e73d219ca97da42cc008d4abc83c36028bfd514ad052094df6292563127ae27b3524a6799fd123d756251f4a534d5e9c62aa26dc046cf355ddc87b373b096f2d37f9ca5a8ceea491a6b8a33919c93a6c21767560375fa79a63b3f449cb958140ad6720fbb355e00283c3f1d14f6dfed287c15507881490ae1f142cb88f700ab349168ace6de0778c50bd345a27bd6540571cee40bf736262f034bbc281ddd18d8984ed5537e0c4e753146e75010f65c1c243a8dee786d8ccef980cead41a2d3e836a3c6e82c00cdc64b8244a7d17d318dd1b901d0796990e834ba6bab313aaf01745e16243a8dee7e608ccefb009ddb8244a7d1eded8dd1f92ca0f3f220d169744eb0313abf02745e11243a8d6e6f6f8cce062050ba725776087ba7061aecb93436bfa81768565e950e2a31cbf4526970d2aa312abf0185fceaa05099134a2adb82027e4d50a8ec1d4a2a2380ca6b4d52d989f86719f977c974169f8a63afc55536f7c8a027353615a119207a7b5888363886698ce84b819fbdce24d1ee197f3dd33f51c1b20cd1f72271e9bb7e57fa5608373794bb7714014bbc211d54c2edc62790c9640cc963c294d81fad4a47cfbc312acf045679a3492a9d1174b834652edf6778041f4777a046dbd7621ba228841eb23e20f3269364c6dfad1d8a0f776b3758f11c64ca7376026da59b4dd22aa67855daf535addb556a74a351aa318b3d06507b4b50a935da2c3546ededc019dc6a3a5cca65955101dbc5bdd20608ffa9be8d017db799a4af699c7049683ad7e402d4711143344e03ada3dbcdd7ef2a87231b23d3d86ade19c026ef08129961dcf3281f90b9234864867137990980cc3b83446618f73a1a09c8bc2b4864867117992980ccbb83446618f7389a04c8bc2748648671f7982180cc7b83446618f736ca0164de172432c3b86bcc0840e6fd4122338c7b1a0d05643e6092cc4c52b521a9b617acc1faddd85eb04781bef807d361abd89c10ff141b835ed4d8049be1c0561f0a129906eb7763641e00c87cd874079c1825da7d36f0e905e8db6992be5680beaa5ba45030f71cdf302fc7fa0c10fa884942f70084ee5e2bdace07143eba2bfda37f0c3d8c07d7ed036aeec7824466180faeeb01c87c3c486486f1e0bace80cc27824466180faeeb02c87c32486486f1e0babd01994f0589cc301e5cd71690f97490c80ce33652ad0199cf0489cc301e5cd70690f96c90c80ce3c175d980cce782446618a7bef605643e9f8e4664bfddae11398bb814be609242b563ec0c5aa3b1452e7f82e9832f06bb6fdda0e734d6b7be2798bcf592497ae9e0cb4cf6b39886edee19173eabec060af8cb2669936d0999f8b45683dd1cc66665de0faa9f574c522b36d0ed4d76cf0d74ef049ef3d5740c4ef4b22b98b42fa63256c44f04f4bd66923eb82b97bb02082e6231bef6c7980d9e07fce4ebe90884120bccc3d8c97620a0f28d740d96097b1ccb821f77a08c4efc9fcc17578575c7b8e980d037d3e11f7bb3f32c76977303de04fef12d93f4898d4f129ff61fc60959ed009d6f0789ce01a1a4b309a0f39d20d1d93794743e0c7ce5bb41a2b34f28e9bc06d0f95e90e8ec1f4a3a7f0374be1f243ac379a2e49b80ce0f824467af50d25908e8fc304874e68492ce4d80ce8f824467ef50d2b90ad0f9b1e966256d9be7d97f53107a1803fdbc80bd7e38eb762b656f4c65a239ebcc8d115a6a8ad08980d04fd2d1e541dbe9ce5e314e73b2988c661f39cc84b9855e1304f19f9aa4b2211127fba5bd7d6eaceb6d0eb0c3cf4c92b71749f4d42aef694026e7605aa6569483e1b2cf8348aac959c2a648fd188cf87c1144524d76179b22f52340ea974124d5e4ac6153a4be0f48fd2a88a49a9ca3698ad43240ead74124d5e42c6253a4160252bf0922a926e76c9a22f51040eab74124d5e4ac6253a41e0848fdce24a95d897773dd42b6f0d4116626a376219b385349a6b05949f47f31600c13de1d5601ff0c48ffde24e939a4eab8bc77fed248fbefc5f67ff4df8e22b45fa084edd849859d4468e375259f3a368aac20c5ecad7cd6361303d406336192a94ce847dc4cf8211d3d05583f9677724418171ace06f6fca3492addb94efd76a3be82d9a0a3e52793f4e96d7f1ac6e98ccf016a7f0e2ab5bd4249edb7c07ffe928e429f4306ec4685be37f099bf9aa44f6dd18cd11309cd9d6c0d6cf1b7209119c695ee9703327f0f1299615ce97e1620f38f209119c649b8970132ff0c1299615ce9be0190f95790c80ce34af7e301997f0789cc30ae742f0364fe132432c3b8d27d3120f3df209119c695ee570032ff0b1299615ce97e3d2093540fcc32ed301e36fa19e8e6b04c5299f8591a0683756367691c02e697444cd2281679a94cbd0de311108703bbcc081aa1613ca0e4284068b5a0111ac6a3202a00a1d5834668180f2aa90484d6081aa1613c12623920b466d0080de381252b00a1b5824668188f86580208ad1d3442c37870c95240689da0111ac62322960142eb068dd030ae5b3a0c105acf7c8393ceb55b657f48055d61bf5c08d62bb93bc987afddde81b834d637496326d1dd5ecd60c5646c7bb571608cbd81497aeb737a9d23c3cbd83c1007bb94183ce7baba29e208b0cb862689db8778678556b2591dd338009de559c90ab9ca741a83966a6c36c844d0f3d4c824e16d514790d84c2583e1943172bb03721b0799dc305a6e2d40ee1e4126d76098658cdc5e80dc264126378ce7b7f704e4360d32b906bb018d913b0490db2cc8e41aecb43637771490db3cc8e486715ef370406e8b20936bb033db18b9c300b92d4d92abb7737318abb3834163b7553afab8e8ce2713d90cfc45be6562b9f667e52cc530ef7fd287b884ee996e5b95af37cd677d5d74425009835b4c8c6e8fb0dd14b553801bd8cb24b5eeda915e3e8ac3bc76a40528eaad83eb450d4eb03046ed5b80da3626a96d406275195698a3ae8e29ea22c05fee6d92ba21c4db69488b315d73e7008c64d64785a20a94d9097997973b429712317e40774073979c1791dd6fb9f93fc0a6dba663a225366bd53bf615c6a1ee1ec0c633d35171d13dcb779f23a79702fada0523a41a49e80608cb98c53a2ec3a8655a96216ab34048d5de24b52d25d4c6f298034279b67c6740678720d169f4bc4563744e0074760c129d4647b48cd13919d4e89d824467ef50d27918a0b37390e8343a7dcd189d17013abb0489ce3ea1a4f32640675690e8ec1b4a3a1f0574ee13243afb8592ce37009dfb0689cefea1a4f35f4067579374d6b26f46b3597f950c6889fd72f8e8a2f3c7045ddd4cd2457b14a6f27e26baefe31206e01cc7163edaf606b47537495b0752f534bb516415a15b662e27a20b6eb2fd7911a1b34da7b2e25bc408a65d7769183f3236b9b73b20b9473a3c63e247b48571a55e4730e53c3b48740e08259dcd009d3d834467df50d2f90828ecbd8244679f50d2792da0b37790e8ec1f4a3a23a0b0e70489ce7ea1a4f33d609d7d8244a7d1e98cc6e82c0274f60d129de1dcd2e0644067bf20d1d93b9474ae0674f63749674746e738fba53c4247228bf8a75464ffa2c7b9fcf4ef116ca3f645fccdd1f6b5d80637b8e4cc5893340bd03c201d9314309bf5fa538333988d353cff007d48038342a5d1bd228c51791018b7dc2f28541add8add1895f5009583d2353f991e73596933b1cc16867ad419c439f0b288f9d2e274f42f19f3986b80c71c6c92d0c6449cbad07b57cc46ea60cc2241ab688849023b3302473100aabd637b450c869e1b9acba62c06a0763746753360ab434d52dd9e78e7869610ba1481c279373cc8b1ffa6841744aff936e8221678199d00f6bda9cd0baf02b5fefe26296ec12886c704ef327b355659ed09ec7598f97adf194b722aa4dd8dca5680cae1bb3284827066cf6a3445e55450c44798a4b20908a172ed0754543a75369f0d182f0a75d83415d4fa23cdfb4987c4152c4ca2c7adcf675314c44b690aa18c59e45a50b8734d92d9109099e6655cc6ceaa9f0cc81b958ed9f0c99dfb15c615f2e781423e3aa8d48673f381fb80d58e315d094d607a3b55cf52362b841e4b49fb47cbd3b1f19bb14a680f40e2d8745442d8922c6f50d42f94a77fdd0e0afbb8209119c6d3bfee05641e102432c378fad7f580ccf14122338ca77fdd08c89c102432c378fad75580cc894122338cedf2ab019993824466184fffba18903939486486f1f4afad80ccbc209119c6d3bfee03644e091299613cfdeb0140e6549364b626559720b84dc7c9a4c46e648a6530ce705c98171dfc455c5aa705e75035832192312abf02169abf6b072e1c28da716c944a63c3bfa781818be9c13a7fa14f280f56db0c6c7346d0080de3c16aa7014267068dd0304e9bdd04089d153442c378b0dac980d003834668180f563b05107a50d0080de3c16aa7024267078dd030ee36b70e103a27688486f160b50d80d083834668180f563b1e107a48d0080de3c16a270142e79a9e50338ef72e95da9fd0e987f465772b5463e40d30455e27e292372f1db391faa77f3692b10eb9c7007905bbb2bb63b2fdc9a184ee105269b6bb63ab292a9b83a52ef3d3618703d36f87c6e617bd00ecb0301d5becf6b6c5db7d8af11ba00229323f48b190f59dd34f9dbd909c652dcbed0f0bb940256c9100ddcc277cd3b4ea025b2c0eee46fb613c946f16e8122ed9959b927b07d3c23897231758e98260ecaa2d3ba8c420b5c60e2af91258e9c274ac5bf36e945641125d30687cc4d2d8d8d01fc07a4bd3b38c95d6f7695fc66a6c9c722da8f10f3549e05e92e28f05eec349392374b5d982ff996588d40c10c22f0a22a9063b378c915a1f905a1644520d76121b23f50750452d0e22a906a35363a4fe09485d1244520d0e091b23b50928fe4b776dc81ff60935fb823a7fd9aeecaccb658dd0f99c4a8345bdb3292acf0645fdb0206d603ec0e4441a635d26a340212f0f129d034349e75240674590e8ec154a3a1783c25e19243a7b8792ce33019dcb8344674e28e9bc1ed0b92248741a9dd3698cce9d80ce9541a2b36f28e97c19d0b92a48741a5d00638cce5f009dab834467ff50d2990902a5c3d373a4f82e98fd61ecf8d06ec01a8f48c7da367cb18b77382e8c0b056f0164ae091299615c28f82020f3c8209119c6ad52ae05641e152432c3b855ca8d80cca383446618b74a391f90b93648648671ab94ab0199eb82446618a7d76c02641e132432c3b855cac980cc6383446618b74a391190b93e48648671ab94930099c705a93d6ef47c4163edf11cd01edf10243a8d9e7e698cce3980cee38344a7d14d4c8dd1391314f6138244a7d1e0dd189dc7023a3706894ea327b819a3f33240e78941a2d3e85614c6e8bc03d0795290e8347ad4ad313a9f04746e0a129d46f7883546e72780ce938344a7d1a36e8dd15913044aa798a4730f4e675ffbffc53cf102b67623ec873aec202e85a7eeca799aaee8ceaa0d63541a5b9b710398a7b9d924950d88bb7e68b8fd337db19284f99c967240dd6926a9eb20f18bf2556d236d90c576aa4bd91d7d3b4df3dcbb9b22f92e50f99c1e06920d76d31923790720f98c30906cd0d31a23b935a8f7cf0c03c90687428c91fc0ab0e4b3c240b2c1c13b6324cf02967c76184836d84c3046f20c40f2396120d9e06c136324970092b704e5f46ca31dd6c61a12df03cf7b6e50a834dabb6a8cca5c6095e705854aa3fdfec6a8ac0ea83cdf24956d88f758e762b28ad045b193ed0f8a083d0d0ea7d66093c118b1c781e27e814962337dc49681b310dc1d9d628df68771e24405a0f7c2a0b800a32bea8c59eadf80ca8b8242a5d1e55fc6a85c00bce9c541a1d2e8a47163543602546edd955dd8decd2c0dfacaada6a81c0cfa612f3149653b46e538fba5a98c307af2f20afeb95b1dcde5c78f8fb0ef0bed7f3bbf8fb6afc5366c51083bba6b1397e04b4d12dcc957d757b2e6e6ff9f7ed8d7405575593a9688f5628383bbcbc6ac070147b06dd79e8714f6f87338b0c4cb4d52d9340e954253a3a357e3228668ec006af92b4cd25897dd2c65ba97d840c3edd757137a1879f8aa9bb6a0bab9321d4d4b687bce9eb6d3482e19cf6af00afb45e7591e6b7aae26b42d3fdc96a0d46cef7d1353f4ae0645fbaa746cc65a4916da3f5710950d838d06f5c62aa00f4105747550a935da8a3746edafc0295c938e0a096b2fb91592c17add5885540d14fe6b4dd258dfbec9e3f3f50a88b3fdda386699d4a386af526a04ec6f7b708e2d35b82ad958d7c7efc04b5e179c634b0dc697c676593c1514e7ebd3e1157b463d63116b91bbbb7ba7a1e168ac70bf020af70da6972952c27259c2c5ecd302f6eae160b3f4a9ec577a2885c169918b4d919907c8bc311df39b7bb2bf9deb54fbc752466d9867969e0628bcc92485f500850e0b613e5a7c1ea8586e0ece0151062b96ada6a8bc0d542cb7a483ca9e318676c3bd58e17350986f354925eda69fc0bc1f0558c2aa978a10f682b70684dd968e0aa40fd9dd16c81c0728bc3d1dd35e68f11dc5dacbcb991013ec4f0a59683399ac8cda22edac5816ea9a791a20f68e74f9c562b28238035cf98c0931b090161b2d3445e5dda0b6de919e63f47aa67fb0cb98259e05e8bbd3247dad897f509692e61c0135ce6ec9c83a27fa319f6a7001417553b41683119bbbd2b1630db5c9318ccc49f6dfc56cb2a07b8e5645a803f223818dde1d9c23f4c2b8955f09a878ee49c789ad7dd2ef2b8d91b71190776f70ce7509638f637d50a4ef0bceb92e06ab1a63e7ba6c016decfbd31100d14398d37eaaa0314b24c0121f48c7b614f888cc74cf98cc409305bb9e293adb023a1f0c129d034249676340e74341a2b36f28e9bc07d4e00f0789ce3ea1a4f31240e7ce20d1d93f9474fe08e87c244874f60b259dcf033a1f0d129dbd4249e74180cec78244674e28e95c0fe87c3c48741addd5d8189d2b009d4fa4e7589c5dd00a32d60d5c00e87b325dfd950ec832bb0dbe9c1197e67940c69a941608da9f4a8f2dee826e3663ddbded4187c6d341da287280c92e5f63457b7f3014f14c90e81c184a3a4b019dcf0689ce5ea1a4b30414f6e78244a7d1a39a8cd1793ca0f3f920d199134a3ab7033a5f08129d7d4249e74380ce17834467df50d2f902a0f3a520d1d92f94747e0de87c394874f60f259d8d41a0f48a493a6b310067761bfd8c2287afd55383b874bd1a9ccdc8c3b8a95837d0fe7ecd24955d24547a57d08e24747391c5ecdf7462eb7206390a998969906c63f32fc701bb7d3d3d9b8df4de8de6147d0de87b23287b61191da03056ec3f03f5f79b41a1d2e8e084312af70675f75b41a1d2e8c084312a09a0f2eda0506974ba81312a0f0354be939ea9fe03d35fd518dbb4a111f08fefa66b45ad33279daee359c026fb979330afdbb918d4d6ef05676bb001210c7ce6016b7cdf2495cd08dd428486db45fca369045b326f709da331af580bd8e40741dd2dc86818646cb7a09f4043f2c3a0526b342c3246ed4a40ed4741a5d6683bc818b5b70087f0b1496adb837abe90f5558e64142e6135fd04e25d433e91d5f90b6db8b42dc63716075c0eacf793744c97c15702c13820c7e4e929c622819f81bd7e1a2432c3b8c0ef7740e6674122d3e0b11fc6c8fc0490f97990c834b861a831327f02647e1124320d2efa3346e64780cc2f8344a6c123158d91f93120f3ab209119c62dbfdf05647e1d24320d86f2c6c8fc1090f94d90c80c638f531f10b47f1b24320d6ea46c8cccbe80ccef82b1b3bfc17adc589f7c3f30a4f1bd491a5b11f5356a060bb9b17540b3805dfe1034420d167463841e0c08fd3168841a6c541a23740c20f4a7a0116ab061698cd04980d09f8346a8c10e396384e601427f091aa1063be58c113a1310fa6bd00835d8c83446e81040e86f4123348ccba7f70784fe1e34420d06f6c6081d0908fd2368841aeca43346e86840e89fc13ececb609d6fec38af23c0749cbfd231b78e4e414cfbdc3a639b8d0f04f4fd6d7a3693d87ea294f72e95da9fd2394cf4a3348dac1b9bbcf00c28e6ff9824b209a97aec07dd0c329f15ef45e998a6686e070540e2bfc1e9e91c10cae9094d40d1fe2f486486717a423340265df2161832c3383da13620d30a1299619c9eb0072033122432c3383da106203323486486717a422d4066b5209119c6e909114066f5209119c6e9091980cc1a4122338cd3135a01326b0689cc304e4fd80b9059cb24996ae7ec1ab44b638dc93f4063b2b6492ac52160e28420ba6b02dd27818a4c8fb3591583d8306e53b11f98fb51c724b1a2cf28b6853a872d19ac868c1db6540888ac1b14220d5aa43122bb0022eb9924b22d23329f6b3e99949009c43db493ee093b9777c1d1def642fbdf0ef468fb5a6c43169923d7d8392d1445905bdf24b962c55bd5018c44d6bc19ec0831d6697c05a8ed1b98a4b69d845aa7939892b7841cc036f8591673002e8ce3ed19c0761ba6239c4a2c360d63a7dd584065a37484f9229c7256c0ef5e21547f5061353649a6bb2348bff48f5a1aa3af2ef09b7b98a44ffdecab304e95ed0e5a4a4d8244a7d136bc313adb003a9b0689cebea1a4f31950f1340b129d7d4249e79d80cee641a2b37f28e9ac0b0a7b8b20d1d92f94747e07acb36590e80ce722986580ce5641a2d3e8e24163745e04e8dc334874f60e259dc7003af74a77cfd274fbeaecb93d8ac1d0df8af9bec7cb582bded9e9d8e8fa4c7ae292116a2b4003b3b5496ae94d1e71f67d0f5f075c4360816d8254a0078672f140260886f60e129d46672319a3730f4067db20d1d9379474de0b0a7b6690e8ec134a3aaf0474b60b129dfd4349e72f80cef641a2b35f28e97c09d0d9214874867359e02180ce8e41a2d3e83668c6e83c01d0d9294874f60e259d2b019d9d4dd2d99888b35ce8b2abb41fa36c6c40ad368834ffafbd33018fb2bafaf81d2cd5ba800b9f5a91165c6804956c64710f81406449208055540c59c8401262421070df5ab75a2b2ae28ad6ba54a8bb56d4baef56adb66aebde556d6bd52eb675fbeebd33aff39f490289f2bf730e4fe531cbe49d3beffce6dc7bce3df72cdf0a714ede3b69d41872703e9c4de63051ee68d2cfc91d874ee3327c334fcb33fbb211b1d22a174f00acbb8588958bb0c6d7127aa0b119c9dee0191a2105a4c6188ebb4022476633b6285d2289396c34941f81fad99d897278864cce315d03097b1f7248945a9ac773184cff3d98a873bba8a79e4076f4c11b5f66af6ff7852ba8ab2faddec241807f4f26fea897518999ed1f702f5e6be686b355698188bf362984a3429c1a4512dce1a5d699571549780d1b984a3b01545a6e36b70138dc6c9569d98700cabc902a2d9eb4119ca95fe725b4fbb5757c72802a3be43ce31aad2ee44aed7816ea4a5853f399a8fb5eb2aa54652dda0120bb05d2806a0c74d81680164a03aab116edc7b061182d0da8c65ab49f02d022694035d6a2dd18a67cb134a01a6bd16e01404ba401d5e8a87e17a67ca934a01a6bd1be0740f7920654e3b1de0700746f694035d6a2fd2700dd2784ebe48bf58525ea7b9a5ff54140bbaf54b4d4b2fe34b44f9b14dafde4d4c4d1e8e0fb0348e9fe4c94bdef7e44b44569dd8f9ac1e3744088f4ede20d2adae46398d065d9753327866af650898e909d592857c0ae688c2c13295fa5ef733eac90e5d2806af47db600d0b1d2806af47d3602d071d2806af47dce05a015d2806af47dc601e878694035fa3ee701d009d2806af47dd602d04a694035fa3ee700d003a501d5e8fbac07a013a501d5e8fb6c00a0939840079a28472478c1b51616bc6926056f3213de50f3659b98116593d6c46c11ece2a764d321921e0c46dc1dad64a1dc1d5c73554c94d887abd97be2dd40ad5e16b537333b05d6caea10e9890988894acadd1d5ce88e587e1b56cfa921dcc505a620bcf2a1b98b87c2ea384d6e016aa2e2a14df43980b686897617931ea5dc6c2f9debd3111cba0d3d42792e609e1ec298ef49bf676682ba3c668dd9a0eda0e567c8a81c36ddafaf2ef6bed10fd7c235a056b1d04e01b4334328ab3c9fa3b4a134d43d1d4ca783e4549cd7d80b691e984ddf0e5171bee763e2f4e2fd1a3b1b56c3b43e58124c8d9d0da701cc4324c1d4d8d97034c09c2509a6c6ce861300e6a1211c759141ef7643f5a6da24ba754410d7667b6ab43bf70343fe30265ed72aabdc077c35db0bf5edd94780ee3e3c8407a9b73b1e6a25509adc8d84693d5b124e6a62010d6715e03c42124e6a71401acea9b02ad64ac2493dfaa5e13c1e70ce9184935a6b9186f372c059270927752349c37933e0ac9784935a949a86f351c0d9200927b5ec2f0de72b80b351124e6a516a1ace18184a73f90717d5f6cfee5c287af9ac35d3a5e56b0c3629a04d920affea2c0a9003def6b8249c252a71ee0038e749c2395a25ce2760b2cf9784b35025cedb0067b3249cc52a717e15267b8b249c452a71be03d2d92a09679e4a9cf301e70249380b54e2bc0070b649c2a93321eb58c079643603b6d3273a3159907652f421ecd8dba5a02c5089723cecd63ba4a0a4a6b0d2506e0a2817868982cb42be102d0ce10d581f3b43245bb9176ef472188ddd9abc441fbc18c05b14a24347aed7d70d6661b72eb804dc850a9d6dd36187735488563c3d1b3d18c38e3d0c8841307f8a91b05e0f58178788668f628c121590e226b3bf11aa1b8d55b94a41d92c0931e17b674dea0339136cc9a552406a94c80300e4d1524012238569204f0290c74801493c89a4813c06401e2b05a4c65e5b2b01e47152401213a56820cf0590c74b014974a6d1403e05204f900252a3d3e21a0079a21490c4cc331ac8e701e449524012ab69d2403e03204f96d3504c6302df4440794a88342977c9ba134b4733574a1accc5e0c23855124ca2fea6c15c0230bf230926d1aaa4c1ac0398df9504536313c66680799a24981a15d0e100f3744930356690cf0698674882a931837c32c03c53124c8d19e45500f32c493089fb1f1acca301e6f724c1d4580fe6188079b69c3e401a9dc0ef03caefcbe9c042d4e4b42083e5b02f3f4756a1e662951d587e01b2f9036940357660791e809e2b0da8c60e2c4f00d065d2806aecc0f224003d4f1a508d1d589e06a0e74b03aa31e0ff59007a8134a01a3bb03c0c40974b03aab103cba300f4426940357660790c80ae900654630796c701e845eca48071669169f0b758997488c4ed936bed77f7341a3c5aa57657e2238277b19c162144395cc9423902c2ad2f61a21c62325b75f7be743851a7d34a879f09327a2913ecce26b39b40a2754885694f5ee20674e9536bf7836a3cece8047fd365a17ab344df13b732c9746d7743ce11e2953303a57479881c21c439cdfed1a16cb03fb94117f8c1abfcaabb4435d6a700ebca1058a3a52031ed13d96c95666cb77efb2253c89dfcfd59588780eaba424e77018de79c0780b2ba9289720798f85196658d1faccdcaa72b64e664767a928ce67ccbcf00e90fe57665214a2bcdb47a15b4fe55615a88e566200e918f1e23e1db0af0fd28043ed7093d383e9a36df14f05d9dcdcde758e3baadcd491e171335f87016ca7300e535210d2397363dd32750777a783defe9895857b2b0ee0a86d1b5210a4e64617ad394cb19a0b7af63c2730b54e6e671b237769aec9388f55c6956e43040f76339cd6bf25446cb9d066be3f592606a8c963b1d60ae92045363bed05280b95a124c8df942c702cc9f4882a9315f6801c0bc41124c8df942ed00f346493035e60bcd0798374982a9315fa81560de2c09a6c623b40680798b24981afde8f300e6ada1aa15c64dd7980ef7b700bb705a84c74c3832bb4d52eb9a12a62ea7f92cf7018fd0ed927096aac47904e0bc43124eaaa549c37928ac9a3f9584335f25ce5300e79d927016a8c47915e05c230967a14a9c7703cebb24e1a456f5a0e1fc39e0bc5b12ce229538df029cf748c249cd65a3e1dc0c0ca59f85083528315165ecc4c16e905d10ed7cfc5393c2776f3623dcd2332e3496cc6d820de57d61825eb22089b4893c1b24f17e29dd54a8de4b9a24be0b2ae60129280b54a22c01f5f2a01494f92a517e05503ec44439c8fe526d7fe9342ed4df0dd56a2f6f32ed5ef5c4cd52efc38cfbdff4ad93fd619d7c9889f19ba66b2075a57d4a998f5b8bfb84bf323b58bd8f00ae4d8609d61bcd79144702dc47a44c776a74116dba7f044ae85129280b54a29c052be7635250e6ab443910503ececf99a8f14fef3ef164be473dc63e56677f4e0c5c61bfbb2b89b199b47494ed61ed7c224c0fbfe20c690db0ffa149e669b07d7c92896f2bd0eb952691c533dd67f4ce57adbb0701c0a742a443a5f2cc675a1ae5f6a6ebbd4d197d1f632f6eb24f5ae46dcd4e7f664e35dd6967e51702da9f4b454bddabd3d0ae8155f3e9309966a5e157cd588c84af00accc6798f886c2aab9f6f4fc99fe6bdc347a5dae7b3f74254cfc67d97bf6b5599ed13ba5a64b55f62361dc09acce5f849052c49858416bac0d3ad15b9bce299278acdab84a1e4bbcbc96d93b881b6a6bb06d5852ba181681e7a4aa27ea7e89a69e7e090bc0f352d1521d2434b4ef81e6ff25136d8e494f4d756aea283bf91bbcf32e318cbbfd4576883af08d6e583d569f8445e2574cdcc33cee097ea5757566eaecff096f69bd1f2aaa9394a5fd3f2f6b1de4f90539f5e2357616fc07acba2f32516e961ca0d54b2966aceb833612e4efa510b66a4fa10ce55e41b573d7c9792c5b751758277f9dcd668c65f689edde3ea5825cb31109641b18fdbf09130f921f7e67dfc29acecfc11af872e8ea46bdb73d89ea856679de0353fc95100959e9b5b812ea267542afdb45920b6ae7d510e54d11e6baad4cbd60e700d8d74255de4c0cd253a5b800eb29ed786e67584f5f67e2dcda448ee6d9fe01f7e2b55e620321a4e55ede0a12f9869c72901a2b7c3400ca37992877ea03ca1afb9a6e9085a6cafe14b9413ab8f66733cb90df15b4fc6f4314d48ffc4b6dde87d4b45699d598c7fe5b00fabb30477545e10d7a9ad53912f0fd3ed4511d062ef6c6e3a9d75cba04f4fb1f42984bbded9f51aab261ce3700e71f25e12c51897300e0fc93249cd416cc349c7781f9f496249c852a71ae049c6f4bc2a9b3d9d8fb80f31d49388b54e27c0670fe59124e6a392a1ace8300e75f24e12c5089f364c0f9574938f355e2ec049cef8670d36140a3db25d524774c7a7742c701c2bf65e7e428116d5760bfbacd65ede7dfa7dbc1e69b06bfd5244ae77b2c9fd22038d37c8f8976b849f729cd315d8fdefa127ba7cf5d320f50bf2f25e98baaf16991212f80e7e9032928a9da9e86726b90cabf4b4149d5f434949f8154fe430a4aeafe9d577a05a4f29f4c9483bb319aa25e82eeec3d331744b3197532b8ecfe15ba635b26c872afcb5bc358a63439dd0f907e18c2325d1bd244dc48adbdbd801d30f760a13d1ed0fe3b9bab69fa39a7c68611b34131fd27d41634713eef065a9c9ce49a1be0bd685208ff1b4221617843f7ad1983351da3411d0472f951b8d2e7f5c6d5b549f5baee08259d3435b406d6ca8f434d70ecc55aeb07d4acc98b01e12721920d1cc2066f63ba5b8dfeac3da2ee5558273f0d9b5ed8fd2a393ef98460abe57816da7c40fb99d4cc4daa1384e69a7b0726bf9b1b22d1529d2234b48702da9854b4542f280ded6a5810fa31d1465adff99336ac00f0fd01e1464c84a912575928f14babd3500af8bec2c4b70d486073372e39cd61b4b7c00ad93f8c0c1666383c3497993e18f07d95892fca7deb5d0e47beca2c8e0760426f2c09a646b7db93007313493035f669bd0f607e4d124c8d7d5aef07989b4a82a9b14feb4d007333493035f669bd17606e2e09a6c6fcb61b00e61692606aecd37a23c01c200926b1541a0de6cb0073a02498a50a61be0230b7e4bbd8d616c991a51268b453a19d00ed564cb4bd2f974ab43769e552674338d7d64c8ceb8ee5480cd5ec511277e8b4aa1f97c099f9364c94511180bee40e1155112d3f632ff01f0d920694a88e6840f706a0ff270d28d1f541035a0040b7950694a88e68408b00e876d2801295120d680900dd5e1a50a2eb9806b414807e5d1a508d59987b02d01da40125ba4368404701d0c1d28012ddc834a0b9007447694089ae641ad07c003a4412d07ca5867d316c3dbf210da8c6ad671100fda634a01acda642003a541a508d867d1e001d260da8c6ad672e00dd491a508dce913d00e8ced2806a349b4600d05da401d568d8e700d05da501d5b8f51c0640874b03aad139b20300fd568808e444950547a1c60fd56634a70e4e858d660e13df50f3659b4112a73b2dc9a01aa473b76c1e1ea7a71012cdf9952c9485700e3f22c4ca1955fb6a4cc688d46720c5d553639d9a3b4136478658395dfdf8e0f943b46086ff9a14bedd432407765d397b931e48dc68d2b28a6e07c9dc2344e452dee75176ae203f16e0d79c5df41248e89e72255463bbdcfb40424731d1f6bdbf814667f248b0427325e12c51897347c0992709e76895389f8275345f12ce429538ef009c05927016abc4b9094cf64249388b54e2fc3348e7684938f354e26c059c45927016a8c4b91c70164bc2494de5a2e13c11709684a80182b5e7a6f99be834cd46771dd91a5040a54c88034daa904ae00a20b4fcb75920817b85dea3775f75cee5c4b5d8575de07f6bf5d249f4bdc76224b4f5e030de9b8936eaeaea26f7587bd1023b6eb5c1f68eae8d891bb0d60fb0d4a49a3c768498fa340fd33e20bdfb8450473d29a331f6a90b8ccb8cabf58e3b6a5f421ace5d4062f7958493da359386f340c0b99f249cd4927d349c53c0e7b9bf249cd40217349c6d80f3004938a9655069382f059c659270529b98d070de0038c748c2496d914bc3f930e02c978493da849477b20938c74ac2496d914bc3f96fc0394e9257a954659cfc7070885448c259a212e7768073bc249ca355e27cc4a4704e9084b35025ce5580b35212ce6295383782c97ea0249c452a71be09d2395112ce3c9538e702ce49927016a8c47936e09c2c0927b532320de752c03985897347931e21ef38741a97bd911923dfd5f3a96f77f41bd81d5531b1ee9681b5cd9f25d55b1e2e6b237a9fa96e5bf862f85265f6a7769f3e434d4c386b2312f072f0db57338147adf5ea4cf70556d3b7a2fa4ee607833135550a48629c080de4f600729a1490c4b59406726f50513552406a4cde1a0520a74b01492c1940037929809c210524b154000d6405809c290524d18ca781dc1494cd41524012cbabd0405e0712f96d292089a5a96820b705893c580a48620e3b0de49600f21026c8edccba1c1ee996a44613e83380394b124c8d86b90127c7a1210a55f46e87a351ed3c0272791813e57093ee2f9a63ba2657f7a58f300d352d0dfb30f0141dce449d6b323d9e3d81ecb99b7bd7b8fa408eba3d58f80703fed92156e0de877feb73334f8215f8084930899e4f1accc900b356124c8de161fb02cc3992606a3c4dda1f60d6498249f439d1608e0198f59260123da13498e500b341124ce2268006732cc06c940493e811a5c11c0730e74a8249f441d1605600cc264930899e515e8a21c08c33610e315d0b084cf025532becd7b8c7586fdfef023fb0cb870f5254800676a149819dc78f659a642fa8f3e9d95879366b3d6169f5683706acf34344dcf5e4e6c3e1e89db968d51bf681e9dfccc4199550756556369ce21703015f0b13df00ff6edc6a39dfdf6687a730d7d761704fd2e7f91c0413b93584bfbe272d9e3e9189a63a4d0a6b400a173051f6bd7999cef2936fc101489b34a01a9b97fd05801e290da8c6c63baf02d076694035a61ebc06403ba401d5d8bcec0d00ba501a508dedf57e0f403ba501d5d878e74500ba481a508dada15e02a0474903aab179d9cb0074b134a01adbebbd024097308146c52a179a26fbe78e3ec53151733769fbf9d58076a954b4d4a46d1ada874c0aedd1210e3c7ae7f32c66daa53467c9bf404e8f9104936893d2607e08308f950453a31bef7700f3384930896b260de6db00f37849308976280de6eb00f30449308936280de69b00f3444930359e5ffe0a609e24092671ff4e83f902c03c59124ce219120de62700f314493089e74734983138e13c35c46171ef32e534960bf82bc8e5779828a3d6a43d818cde293508b1b21f09e37cc81cfa6e76c3171243357b9444539dd687f82298dca7c9f272ea6cf778054cf1d3a501d518be7035003d431a508de10b2b00e899d2806a0c5fb818809e250da8c6f0854b01e8f7a401d518be7019003d5b1a508de10be702d0ef4b03aa317c6119003d471a508de10be701d01f4803aa317c6139003d970974a8e9bae94c9cb2d798b166a2cf2772d592138f61c65199bd83b8a12663d3728b16c2467419132f36d35de4d35f5c67cd39c93dbcab9b4c4f8959c98278bc49413c2f444651a1c71838a38816eb510232787e36fd4a55f629f3ec4fae7237d5af4493c451e0a2bb80ef81aff33146eec5dd8d96d9a72cb13fd56d20e95ac3615a2f0f91778979c23d25b7d2b38369aaa604705ec8c439b81b9cd3931caa4ca3455beb07aff12fd01602ea7016d44f00ea8a30c9ac791b90eab900accb8b42447076b52e7b13c349dcabd3d0ce00ad7e7108addebbc3608de133e360925f12a260c5178933261e72d064f45a007ba954b0c4e3381ad82b01ec6552c11297025ef154007bb954b04447080dec4400bb522a588de57ec703d82ba482d568608d06b0574a054b3cb6a381bd10c0fe502a58e201330dec32007b9554b01ab3e53a00ec8fa4822506edd0c0b603d8ab43fb07baaf483fdd3b5bdc46b7d10fd7c2b56457d10c2e70555f13e2600fdd8153ecf7c5f62777db8b929ed6855e565b4d45d29bd510c231488b797e083c5bd732f16e617f99e6cb59bad3d12afb3427add1d11e0d1cad88e51098f2d785f0a88e4e9e88365b12c1ce42692be60ac0f76326becc7ec6717b13330163cf077bc4ede94a16d656582daf97e34dd598a51407095d15e258afa7e3e6ae0d5034b640190392b95a12ce5295385b00e74f24e1cc5389b3094ea16e9084335f25ce6580f34649380b54e25c0d386f9284b35025ce0701e7cd92705273ea68389f039cb748c259a412e7df00e7ad9270528b0dd0706e0f86d26d7cff51ca2bd47d0859969a4ef0da479b14dedb99780798947bceedde9b43b9406892792ab8deee085106a3a7899ebe57a79a48b4ddfad7619aff54124c8d3545760398774a82a9b1aae207a0cfd74882a9b1aae2df01e65d92606aacaaf8478079b724982aab2a02cc7b24c1d45855f13580f9334930358685bf0e30ef9504536355c5c700e67d92606aacaaf8ac87b971ff8cc12bba0c5eee1d11ce155167a2f88b0efbf878e3520a1b3c883afbfb2413f7cf3ac2e29865fff5ed1338ccfeebeef1586ca0bda37166b1bd3df7a81bafde8fdd62ffeaeeacc3e4e6da4bee7702b165522072fc19699965ee121ba79906ffea4becf3dc3dd7fb1088a8bf67a74792e30bc355dbc73a8d0b9270afe0d2249bec5fdd3b8e9ba5107f9213dbc4736a308b92041cc09ce4bd2e328964cbee522c733ceeeaa47b27c7876644bf450119ee7933fc5de4f80884b1f6a7467f67cdc6f933dc5d390a9dfe6a37a64b089ce465cbdd89eb565ae5efbec18eedae48794672625f4b5e9bf86c129f6047f24e7a0e12c9896ddee5efee334d7444cd896de6e7cf02ff6e1b2d8b54a2694e6c6bfbb7c4fb493d9aa234d5070374fad718d0cdbd4df69f5e931dbb3ec9bde273cf4ef40afdeda3e549d7448717eb586caba424bb2b1263d4da116afdf7e99fbfaf5179f6b25891fd928892dbf3f3f8b884e4b7d87f89dfa2c7d73da693e3b58ff68013d658f7ab57f37a9b81eb7a478945c33dbfd1fbc41afca895eb7ca7eb7e7f3dcfe6cdd7f2a98cca779fc586fcfe1f749f7bbfe4e7de6f54817bbf79eb41f6d67d470fe12baf6f7d993efdc4cb73b55fd3dbfc95ee36bf8c3c6fead76f1c2fee5f7754a14c595e7feffd615cc3fa8d1afd4565b9ef77f408539613a32542a733c61edf8b77d7fde790f99e5357b525357f240ba8edd64d6288b7737a1eadccfe36d7bfd7b81fb5c544ff391de96c69b7043dcae4b9192cf80d69f17fff5b279cedead689c7d2a652ae9b4a8fff4fc6d7938cbb7fdb79319c619f9bd098ce7e6db73fbbf1fe53d9cff4ff7f25fbcca75a380700 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/8a5bd5a001c1281498462c655a9db654.asset.meta b/Assets/SerializedUdonPrograms/8a5bd5a001c1281498462c655a9db654.asset.meta new file mode 100644 index 0000000..5a1461b --- /dev/null +++ b/Assets/SerializedUdonPrograms/8a5bd5a001c1281498462c655a9db654.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: acf851b749b953546a24461562a16bd5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/8aa7408108b6e3e4c86e2fda4d829017.asset b/Assets/SerializedUdonPrograms/8aa7408108b6e3e4c86e2fda4d829017.asset index c0c5dd3..b3a6535 100644 --- a/Assets/SerializedUdonPrograms/8aa7408108b6e3e4c86e2fda4d829017.asset +++ b/Assets/SerializedUdonPrograms/8aa7408108b6e3e4c86e2fda4d829017.asset @@ -12,9 +12,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} m_Name: 8aa7408108b6e3e4c86e2fda4d829017 m_EditorClassIdentifier: - serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c164776c0e7038410bd17d3bb0c58121d6c0c06d1442f02db74a102024908495463636cdc7bef36eebdf77349ef977e492ec95d72492ec92571924bbfd4cbbcd9597d6f67e77ddfae56efd3ae7ce287463bbbfb66e63f6fdebc999d9ded522ce44f6a86fcb55d6c11a5a2486c1355e28868907f95cab05efe738edcf84da2498607e4ef0a796e861897e54ef8999a1a2e7f97c9a366d122ef3c262a6558abce6f15d5f2ef32796fb53c82d81af9bf5a5e95ea266fda26968b8d628318961a9245c4767553b38e4b41b9523de4ef65e2943c5bad32058914ab53c3e4afadf24cb33a572f33ed5eb753ec56c5aa97e72ae53d4da24ecadcaf24f67867a0507f0827e8adc33e3abc4cfe2fd07f77d5615f1d2e92ffbbcbffcfa363082f47f75caec3c5fada17905c371ec225fafc8be858d2ea7292487ba991f6521d2e43692f33d2ba42dff3923eeea7c36e3a5caecfbfac8ff3743800c95caec3813a4e5ed3fb9b3aaebf0e4bd1f583501c842b8d3456ea70485a5e1fb7cc8375b802c95ba1c355286ea80e57a3b855282ea5f4cc49f715740c7c3719728719ac5e35ce0fd7f1af19f117e97084719fcb7e243a86f3af6bbea3747c179df71efa6fac8b6eddbbd7ae31ea7e8d0ed7a2f2afd5e13a0ba7f5286e1d8a83708396fd063a969cbacec9904f337f1b8dfc6dd4e12694aecb7dac0e371bf76cd6e116744f4f1d8ed6e118740ddcfb661b58961be996eb701b4a779b0eb75b585e89e2b6a33808b71a2cb73a2cbbb538759fe7eab799a7ab8c3c5da5c3ab515a57eb709c0e7718f7ecd0e14e74cf4e1dee125e5bb44b786d9e9befb7bcf9ce5b104207761bf9d9adc33d283f7b8c32ec35eed9abc37d82d681f1e89ab6ea4085916e850ef7a374f7ebb052f875a00ac555a23808ab855707aa1d96ddcf67c86798bc4f105e7b334178db558d51b61a1d1e4079ee81e2e0dab70d59137578d090755087b54856018ac3b2baebf0b0f0daffc33a3caae3df115e5d6c42329bd0b510360a6f9fd9e8b0edb1c990edded7acaf7f171d43d8a2e3df43c71036a0b41bf435ef1b3247a26364d7f39fd4f193b2943f5f87b88f75f39da98f3d84ae9f8ce220ac37d2a8d7e1d4b4bc7edfd37153745887e4d559caefeafa1183891b87ebe315742ceba3e05b86dc693a2c145edd75cf4fd7e1c5c479b30f76e367e8b097719fab4bc750de5dddbe4487c78557b78febf004bae784f0eaea0b482ed6cb93c2ab97271d0ebd3fd1c745c2ab13a745769d382db2ebc429747d318a83f08c91c619915d27ae41f2aed1e1b5c2af13d7a1b86b511c8467855727ce6a16f712f570bd510fd7ebf01c4ae39cc1fd067dcf0786cc121dde68c8bc5187e791ccf3864cb73d7f68947f9a91e6abc6f9e9c6fde6795377dd784a77ddfc8c44c7c8ce14fc40c7dbfa8c9922ad4710ce4ed7f540d72f9ea5c39b108b9b7478b3f0eacccd22ad8310ced1e73f32eeeb8f6405eddf86e870ae0e6fd5b23f46c710de8264cfd3e16d28ee161dde2ebc6dd4b50177a06bef40d74278a7f0b65b3896badaef0543b67bdf5dc23b9eba4b87f37578b73eefb67bb7bddc83f270378a83f05e7dcfa7e858e6a1ef2b4ebdf53b43a4759ff0eaf87d469af7ebf3df40c750b612e3fa07f4759fa163973196f3b921c7ccd783a88c0fea70b0c8ac172ed791e818e97a9faf8c326593678b9b2abc7af6b0f0ead9c33a7c08c976fdde4750dc433a7c54d8f5ec3174ed63e85a081f175e3d7bdc6138b0b721dbbdef09e1d5b3278cba7f52d8f5ec29948727511c844f0baf9e3dede461407f87f580ef13693d23bc7af68c91e605e1d5b30b5aeea3c6f5cf0aaf9e3d8b1863399f1b72cc7c3d87caf89c0ea788cc7ae1721d898e919ef577c7804303cab3c5cd1669fb0ab2bf0879bf9bf6422aedbc949a4d5b2d471415d2d32a563782c71474dacfbd33fb841f88ee0ebfe067aa4ab6453a168d528065d66d9b9ad36b9104665967dd46a47aa37c97aadf15f28a5a25f44b7f129ffa9280ccd5c97fd568cab059c6af52338e3069582bcf1489753284bbf6c9ae70a7fce795b25d265b273bd46a39e83f26930279fb64b6fd57662b124c2f9af76c91329dd9cf7a19e3026d94c7752a875bd5efe32aa7d52af76532ae45cdc536c8a1d832199e54a9f9cbde24ffb6a559ae91d9f3689f04a5e29da956b79a96cbd240ee8bd5f8f32735d2113502e8bb7fa99b61b762356b7bbbaf267ec2d0313230b95aa665cc54c8529eb859a258cd6f6ff1110c5f467f09edfaedf09e271de74c65b19381ea1ea94a90aee1fb3fe9fbdd962febd6e6798b365b14aba1e5a82c45cb0416e415a686fa24642e425e5eb712c8a8893f65c3af86b95b7388dfb9ae565d17be02baab9ec95b0129180a6d90176c92ff6b55b69bd50d0d3a4b753ad3be1a2a0171f90ab2bf0bcd96510a73171be61eb9c69cddae64c2dca3b55c69ccf06327584010cc96078a60571b41e57fed6225e877c0dcbf96c97b0f4a12c755af7a4cde6f73d832338549f34b0ca6769ebd14cf715637325c8e28c2dd6c84d5acfe2156c2db649ce362ae50676b955f021e4a8592be516ac521edbf4079a8eb5da6ebd5c3e7632a2799e9f70e4cbf8fa20fd3839cb9a56a26cf52332550337d6d0528300a0079270477a704f78b28389f12dc3fa2e01e362585b691dacdaaa4e5b2a29ce51845faefbd32ac965798d55cd41abf5e493da8efcbac8a0302abe240a58ae38568873c510a5760ab3ea03c2848f50da4abafa74d30a4363888e05eb4e05e94e0211105f7b609062d1c6ae90e7f2c7f7cc20b68e17d6cdaac52ccbdf3db36a7003af861819d82e12293ef1ad625e86bab1ab03cb0d4c3e71042351c557f36a381b0afb6f2e9daea47a9c245165558243deb30aad09fb29823235acc0194e05111050fb429afd2e85a56e5a57ad472b54e0e2ab546294f7d3b7b0ba3039be8314acde1c1195f5ea946318852d2b11625bd33a4920ea6acecb8885676884d97fa769c2eb9328fa8e38676f73cc707d6a5095975297a5e295d1a6aab15650573396a353dea701dd4c4c0a42709fb88355bfa14bd6154f734d9d63d41bbdd2bff95c8ff663705f13015efac030ed3650da7f230c59687be280f655a7f6ad5e95a71dad6a233a43cc2a63baa933bc7aa3b411fb2d8c66bfe96e4ceb26f91618dca05c4432eb23f9cc9ac97535bf9a42ba058f5d52b44f04745fca580a5403d95e5b6b79a8b55ab89579ea9167911d51aa6d95a03f84895b619c310ad60a42d4570f061358ae937c35cac4ff8705af828aa38336cc5e9a78a0393424d1af166c3cc8429d8685bf3561ee1e90e6ddece4802e4d5a867978ebc0d02de5a38a19ade61d9211ed704ca95513da0ce466dd0d0458fb68c84e0c7de748a54d3591ca0e970968a6a2c6328ed2ab669d70055eb07a5c4133ebd2a571d495dc80e642c957e892d7d187798dd66dbd21d47a53b9332128e237f42d50fd414b8f461521c4fa5388beaa45dd24b23a63cc19632f8f3b048228a3f3f912ad21c5b9106592a6fb93aaa544f5b1adb64a226d9f20023a1b9c23f12bad023dc486832257c9e45f80f430a9f4255cbfc88d532d52618146a4110c11368c185547d2fb4d537146583ecffc74905de2095f94a69bcb684aadb8b6de941bf7aa9f0f7abb0e23f4cbf3a8d2acc6594e5739d666c09daeeb44fa7d25f644bbf3f4adf1d985447487d0695fae594dd6d10dec7aceb55cf13d655ba844a777110bb5b2e9cf9ed302916516d7889a50d7fd0335c1b2ea6845f6111dead5738e12514aba53656bd0d56b8aec2f09a49156999cde6f50e57a45936e150cba5414c538669cad994e0e51105cfb1082e56d36fb04c3157b32370ee889202551c7e7e04466ed34db7d5eeafc21ba185eaf5e2b059a07cccb936846a9271730e110659c66487a7de7535e0a9eed7ca6fb5e237c457b28cab7d0872f36c5aed1cfa57232de9f5a3ba535f756ff269771eadddf32913b386ea06a0cb0128353272af701789d6caee378c915940156cada56065b7bedd7861fac089610ab690b207eb22da834b29c1eb230abecc26188c3abc026c7df816c2d95964130e73051b83e47a122df8725bdb56f3fc8759db76f0697277f781f69bd6df646366b5059b952d00278137bf94fd584ce9d49676d0a92536e18384f3beb2bfb33125afa4255f61930c5e4579106dcd30325a4a35836d119bc1329be021c279273dabe0cdb4e052cadc5c19d1dc2cb70986ebaf0a22780c2d780555795747acbc95548e7744ccf12a9b0d534fc56a3ac486f12d85db19d872ed52966b5a06cbc5b1046eb5ad8aa1267607a9e25d74159751b66a4f545bb58632297b239a94b5543bda17b11dada320574484bc9e12bc3fa2e00d54ed5546adbd8d54ed5545acbd4d54ed5547acbdcd548e6b22e6788b4d30b8f0078208cee0eb6fa56aef60d4da2ba758d44664b18daabd43116b6f3bd5440e476c22575282eb220abe8a625c1f91f1d514e386888c7750393e1231c73b2d828bd5fa0fd0978e788b86da592db317d068e360f50260478dc2d4085fe982e481eae377d9aa07c624b06543d431c96eaaee9b23d6fd1e4a5b5b226aeb5e2ac7c722e6789f4d3068ebf120828fd2822ba81c9f8898e3fd14e39311195752c6f15444e35845093e1d5170b54d30f499b05f49a43eb386aabd33116bef804d30b805d706119cc17f3848e5f8ba8839aea5727c36628e0fd904c3a0fdfa2082330cda0fdb04c3f5e78208ce3004aea39ade0d119b5e3d95e31b23e6b8816a7ae72336bd2394e09b220a6ea4daf4cd51dbf4519b64e85261c79ca85d6a1325fcd67610de4ca9c76d11d5a3856a82b7476c82c7281c77b4038ee336e160eaee0c92eb0ca6ee844d3038037705119cc119384929f5dd5195fa145583f744acc1d394cedd1b51e7aeb10906237a5f10c1198ce8192ac7f747ccf1b536c160eb1e08223883adbb8e12fc6044c167297d7b28aabe5d4fb5bd8723b6bd7354db7b2462dbbbc12618dc92478308cee0bfdc48a1782c228af316c1c5eaed855c2ea648bf87d8b6f1f3e3360ad6f133ec92655b4b913d07d4e8f926ca2a3e19d12ade4cd998a722da985b6c82e1d1d8d34104677834762b25f89988826fb30986c30bc2bf38c1fd09b338e1765b02e043c02e6c517d883b28e1cfb583f03b6dc2c1fcc27e7491ccef5d36c9d079be10a43633749e77db04c3eaa31783085e4d0bbe8712fc5244c1f752905f8e0af93e9b6430ecaf04c97206c37e3f95e557a366f901aa31bed64e8df1415b02b05afaf5204c32ac967ec82618ecd31b410467b04f0f5382df8c28f8118af55bedc4fa515b02609b609bf2a8b6e9314af83bed20fc714ac1df8daae04fd82483e17b2f486d66307c4fda04837d7a3f88e00cf6e9294af00711053f4d41fe302ae4676c92c1f07d1424cb190cdf052acb1f47cdf2b35463fca49d1ae373b604c0f07d1a844906c3f7bc4d300c3760535adfa2d21dea10de5d73df5cc3efadd9de892b6bbd32fd361cbc400a676b554c93f4b161a12a6c7fd9627c6009926e522f3cef572309b80e7be7f8d996790eaf790933a07a8122f2998dc864e11d2f2c556f7356a81d7e2047ce3b7f7bc53a55f603f2ef83be9ca6471861f2f92295cfcf6df95c6ae4339da693cf2372b4e6e4b259fe2b579b963564c8291def3de35d891ea67c2f51e5fbc256be5946f970ed9b75b24ad749d032b455935ea64af0a5ad04b0a6d8be2ecbf67ab657bb5a7c9b97c059bb34ff462761caf40a55a69fb295691b59267f591c0d2c5367e1d5c30a35ba86fbe8b26029c1ae692fed7c95e2f0d3360ed58c76736b64bb49e9ba79d776f59652b897075ea338fd0ca52f9c9c1ae4b5a532292811c84ddf13a667690b87d7290e3f6be3b02490b55e2af350a5b7047137258966addbd613bd4195ede76c65db1ada26ac48803d789362f0f336060fe458cfa97d09e0fa70f908b2c34147d99ab7a83af885b67b4436ddeb288fe86daa7cbf487944e9fd28cddd289d3236b7fa0f4e2cb7157c872ac12f512508eac378fda14ae9bfc2b3872aa5cfc7ac16be6db6ee5daa04bf6c2bc1b2d025707cd3d2d6fc67f652393cbcf7a812fe8aad848bc812fadf96f2d6d1018b574b97c9e6038729d5fb54a97ed556aa4b43f451ceb618ced3ace07d53f4b6f40155a25fa3da12d5b2a38e8fb0ac3025f8902ac1376d252821ed75d4fcb7cd127c44e5fed76db9df14da12b87e7d45ebee50615a7ca63ea73db4ef63aaf4bf612bfddad056c2b583e6d9665feedd77b5693a7e29698d0953e64fa832ffa6adccbb187dbc207365984bd03eddbd270c954f292abf65a3b2d868c56e8a617cae74c9283d681f7feb1b54c97edb56b295829e810a32c3417bc6417de6b697f433aaa4bf13a42f713ee2e1e8a75bd6721997fefe49e6f2d9ac31dc15a6049f5325f85d5b09ecbe3fa419def777ca47c5b7570d7d4195ef5bb6f2ad69b53d65aa576851e9395b87b6b4b636fbb9703e587b786cf9f25f2a054fc75608676bc7539e1d718ad5cea525ad65cabea12530af97e902ebf2568b987de7bddf13f4d7dbfcef17b7f5435e6ddb5bb0cc5abae07b24fa3f5a96af4be4ca92a4d57e9c9dada4bf0fb59aa76bb54bb1da01747a1bb5297b2efe0052eb6ad7a1f09f2f72046cd06d490970b7162bd50f696040656ef0b8499da99642b2e620db66ca9728016eefda0e9f347476c582a9cb26e13c6e7ab4bb10f9795d4aa066becd890f7686db282fc6bb34ba3abba9353b4940f69dbc34b23fe444d65d699cd34d40f79e0438f0e3c2f9234e38fdb53ea5f73575e7d792a54d77764903fbe35c3740779bd46421fb765740969f6708374701edf5b9cf6c9ce95ebe9ff2ab4eaaf16f93925765f6fa6adbeab8e5fc3bb8d72ef4d9a1c2408daf30a0c6d9aff3770d856de881d3eeaddd2d2d01f7f6bb5f73cfb3043ccf3f0108cfbb8e9ab2467fca698d86ebba74061a0da22ecbb4196c5d69e421ca77430b3c566a659002b6c5525d40bde1f738714ed338ebe44580d2b60bf71601bb649b4f1de9cf2542436343de8b0b791d42fe679cc88768e495da0498d345782a62261fc83c2e900b10c83f8f0b48468d6403390f81fc8b8e32024ee3779cb770934c8cc8fb70213f85907f9f13f90c03f91184cef66428f8332446ec63b8b0df8cb0ff2527f6a159bc07ef831646eb9bcf85f20042f9579c28a707f01cbe2e66e31082fed79cd0fb69e8f30c2d4e7fa4800dde042e785311bc1fe402de82dcc363d3bcd908dedf70c2cbfc898ae4b9fbbd10b8bfedc82e2767d66f1217ca4508e5df71a21c6574392d68016b9958dec9c6518f20ac5fe54243a97194d72962d45036a7a82f42f9f79c28c7581a7be776dd9723b4ff90cbc60fabdfd2cb2732d954c6c6cf66539f4158ff9113eb4559ba27db924d564d7d820be97984f4879c488765416a6ae7dc04eae78d08e63fc509e69c04c2bc1ec1fce738c1647c74c206f33882f92f7182392b81300f2298ff1a279849ecd36b10cc7f8b13cc240e3a2b10cc7fe784e97e1974a65a3ed059e68d2e45f8fe8313dfe02cbae896742f6767b39a0be35308e38f72d1a40f902071f6f772fa94055c308b11ccff8c134c469f920d661182f95f7182392f8130672298ff1d27988c6e101bcc4108e6ffc40926a31bc406b31f82f9bf7182c9d89bb3c19c8c60fe5f9c60320e1dd9604e42307f9c0b98d4e30b7345286333675b0f3a07c114a91cccb2677f8091c311f92e2eacd721ac294eace11eb1313aef6c8fd8c620945d3851baab3866e77e34ceb618613082d79513dec83636ef85096cdc4710d46e7184ba2081501b10d4bc38429d9f40a855086af73842651cb3b341ad4450f3e30895b19767837a2582da238e5019a7ead8a06e47500be20895712ccf06753d82da338e5019c7f46c50d721a8bde208358983d0d5086aef3842659c306183ba0a41edc30975b2f02e4b848b4098bb5f52677f6d760502dd9713f46ce19f42e1d80799b1128ab82a6134aa847e9c95906daed53b8f359373e0c03693351fc1ec1f27988cbe2d1bcc4b10cc01718299c439d6120473609c6032fab26c30a7239883e2049371b4c50673068239384e3093f8b652218239244e3093f83efc3404732827cc3e1a26245c239cd7131dd9f0a6121b38b6d70f0502372c17cf4683ad56669cdf9fc485720742399c13a5edf5c3e0c34fc65e9c6df8b90da11d916bb4c1dfec64f436d9deec3c83d05ed4918b2392bf4aaf374239321e5aea4c96e00f2cb0a265db3de44184761427daf01b0f32ba4b6c0bcd1e473847732fe3f1ef2702e82ad4545c12f714e98ae08de176dc8f1a9b973adf34aa54621a5b63cb85b3bd2a1bcc815c300b10ccb11de97f7a4741491c9ddf80508ecbc5dabccef4a65c7f046f7c2ee0cdef44f066217813e233884ce2abd86b10ca89b9d0c3859d480f1722789338e10db0f4ccfecdce93d71bf7400027c7a72133ae4b666bc87b11ca29f19d0d621cbdb039e09b10daa91d3965e1f51993f8786c384259188f290bdbc41a235ab689b5c308edc59c68c70646db79b6e26d4170a771c29d1818ae7faa0d6fa5c668673773415e86204f4f0264464d66837c39823c23099019a746d8203f8c205f9204c88c1d1e1be45b11e4224ec8f0451073f4b54e380b724bd5116c19ec60669c6066ebdcba2190c51de9df267fd3eaa10865497ca69793b85e690b4239931365f0bdc4189d2ab6bdc4ee4118677162840d78f0d73a3a9385ec8e20cece852e521632ad8b8c4d9a4d17e7228c73e233dd97c45d3f97229473b95152ce8ffb3692f3554c7825667f021b771e42392f3ed37b8c4b12d9faec7108e5fc5c3c4d9a93fba7496c6b8e8620780bb87b6af779bad9b4213ec97bde4c401017c6c36b641c5bb3f5d44f228c97728fadb37f2822b99fdb791681bc2c2e2093f8d9d20710c845f17dbec9f836259bcddc83d05ece8976bc052d64a245c16b106b640873949d6da176170478717c3ccc24bef93b0aa15cc2897282f0eec050299b7aadfcab2ad483e4247e7bab1921be22175d56fadb5bd447a258fbfee15c208f21904be302925123d9405e86402ee30439c500b9dfd2c377ee8d57ee42a84b39519718a88f91209bbf464b201e42f897734fa0e0d9fa2df2d213099fc8cb47f05670c2b36d7945b959395aca70940bea390475651ca1324eafb0413d81a0ae8a235446dbc906751f82ba3a8e5019fd0136a83b11d4b25ccce8cfccfd8c3e5b873400c15b139fe79d49fc98e96684726d2efdd25a3d9152a1795428c15506d2cebefef926847f5d7c675f191d2cb611d7d508edfa5ca30d3e93c56834d866b24e23b41be233efcaf87a19dbbceb4484722327caf01b62300e00d836c4781ae1dc940bb7cabf7f5883be2479ba9842f03677fc33d5e44e50ef4220b7c405641227a81723905be30292d1196203d9844096c705246307c306f22802b92d2e2019f7ab6303790702b93d2e20199d713690b7239057c60524e3225b36908f219057c50524e396fc6c201f4520afeec8e939eff03089fb3ad422943b38519a1f46f1af5feedccfe7af40a077c6674a99d1d7649b52de8850eee244e97efdd8d5d91691fe324c99586eb5aac95da87b1bc2ba3b3e936e49dc657e1842b927be53c38c68d9a6865722b47b73d9f861dbfeedf2649deab83adbfbeff721acfb7231af3937f78f8bd9faf629085e0527bce0ef2e25f12de3bb11c6fdb968dad9ada6f9be7112bf7d782dc25a199f7e3d89df821b8b505671a2ec2bfcdba16f15952a23f004287936b22742571d9ff10fa316b2f5d557219435f15dd3c13869cca6a5fb11da039c68cd1716fc4bba3bfb84c83508f5c15c789cb372ef71b28d82062278b5f11860fadfe9601d60b2ede6f01c427b285e0b66189b39db8299fb11cec3b978e841799f495ff3311281ac8b0bc824aef9e88340d6c7056412972a5c8c4036e4d2598af676671277b27f02a13ec2899affedce24eebd7c0bc2dfc8897f58489f6041023d823b11cca37182c9b8bc9b0de6bd0866539c6026d1575d826036c70966123f1d598660b6c40966125f3bd880601e8b134cc6f5236c30b72298c7e304937175281bcc6a04f3449c60324e3fb3c16c44304fc60926e3631236982711cc537182c9b876990de65904f3747c1edf313672b6c777e508e535f141c938946443b91ba13c13df27a1497c3cb716a1bd363eab4692f8bded8b10caeb38518ed6285bd49697cd9d5e474720b067e3f114d4b6cc965167d91e30d723b4d7c7a7f93376526ccd7f3c42798e13e5c5c23b775f27bc5ffb70fafbcebfe74da9029e9f67085fe9135eaadcf23a5dd85aad81451245b570be78542bcf14b57e36659f982976ca7fe16a69b7fc678b4fa995292be438a551c582bc2a25bb5e9e859c358b12c07d03284d81569a427597b93670bd323a15eadd9426794db82fdf1586fe584c6188af461506d8b3b230e097d20b958a98d72d574795aa161ad1ddee3dd9565316a6fa589956ab923729654aa91c42ed34c83b9d7315b2be2a5458ae4a01392d864e38354ffe72fadea2d65eb7483f18abd7476e7c7699a03d99a5dd082a92b2db95ba76d3fb6c25729a2adc0fb55aa96a0562b395347bf9e836d43b43ad1443f7d8a9cb7f1eea5d57bb52d36129f0b6b6c99aafd23b9e6d941757a94cc14fdeff030505fa1732690100 + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c163796c0f5118ce91d0c04080408a6d9a6431ac5a6183010174802048c0b186c635ce82190de7bef3d9bde7bbddeeff6eef6faeed5bd9eeb6def6eef76f5341a7fefd3e87ddf8cc7eff38cb3f887e5d1cc3c497f3d3d3d69349a3e8542fe4bcc95bfb68972512c0a4495a8158744b3fcab58864df2c73972e3b78a5619ee93bfabe5b9b9624a863be1dfccc438f9bb541eb58976796787a89161833a5f21eae4dfa5f2de3a7904b1f5f27f9dbc2ad157de54254ac416b159e425c66410b14dddd4a6e31250ae447ff97bb5382ecfd6a94c412285ea549efc5521cfb4a9734d32d3ee753bc42e55ac2679ae46ded32a1aa5ccbd4a62ffe7470af5877082213a1caac34be4ff7ef2fff3e8184ab14cfecf91fff71bd70fd3d7bfa08f0713f1c37578a9fc3f40ff7d8e0e47e87085bee745740ce14a74cf4a1daed2d7be84e4baf109c5cc39ff2d742ccbd1e7f789b44b8cb44b74b806a5bdc648ab58dff3b23e1ea9c3be3a5ca7cfbfa28f7374381ac95ca7c3313a4e5e33e4611d374a876bd1f563515c42e9536a1aa53a1c979437d42d4b9e0ed72379eb75b801c58dd7e14614b701c541b849a7fb2a3a06be6f19722718ac5e33ce9fabe35f37e227e970a2719fcb7e323a86f36f68bea7747c1f9df7fefa6faceb6edd9fa7c332a3eecb74b819957fb30eb758386d45715b501c849769d96fa263c9e99cfbd3e4d3cc5fb991bf721d56a0742b7478be0e2b8d7b2a755885ee19a8c3293a9c8aae817bddba0cc272bb91ee761d5e8ed2bd5c875758585e89e2ae4071106e33586e7358f6fd8e53f739ed449e761879daa1c39d28ad9d3a9ca6c35dc63dbb747815bae72a1dee16a9b668b748b5796ebedf4ecd778edbcefde8c01e233f7b74588df2536d9461af71cf5e1dd6085a07a6a36bbaaa03b546bab53aac43e9d6e9b05e7875601f8aab477110ee17a93ab0df61d9effb69f21924ef3344aabd992152db558351b6061d1e4079ee8fe2e0da770c5917e8f0a021eba00e1b91ac01280ecbeaa7c366916aff9b75d8aee3df15a9bad8816476a06b216c13a97d669bc3b6ff5b866cf7be23fafaf7d031844775fcfbe818c2c328edc3fa9a0f0c9993d131b2ebb93fd4f13333943f5787b88f75f39dae8f6d42d7e7a338085b8c345a74383b296ff84a1d374b878790bc4396f2bbbade6a3071e3707dbc8a8e657d0c5c64c89da7c339225577ddf3053a9c4b9c37fb6037be5087838cfb5c5d3a86f2eeea76910e8f8b54dd3eaec313e89e132255575f3264cdd7e14943d6491d9e42b2dc7ebfc390d58ee221bc5a9fff1095c18d87f0b4486d03a71de643aed7c70b44aafe9d1199f5ef8cc8ac7fd7a0eb17a23808af35d2b85664d6bfb348de591d5e27bcfa773d8abb0ec541788348d5bf1b340bb7af34ebfc46a39e6ed4e14d288d9b0cee37eb7b3e22eafe1643e62d3abc15c9bcd590799bbee763a3fcf38c345f33ce1718f79be7cd76e2c653edc4cdcf64748c6cda40d7d7b5f54f6e1b1fadc325c9ba1e79b18e5bacc3db118bdb75788748d5993b4452072174c7679f18f78d42b2fcf6a5e374b854877769d99fa26308ef44b297e9f06e1477a70eef11a96dd8b537f7a26bef45d742789f486db7702c7575785f43b67bdffd2275ece6fae3cb75f88048d5bb07446abb79509fff0c1dcbb486dd6d5cff90beee7374ec961bcbf9c290f35d235f0fa3b2bbb6232f435db9659d8c8e91fe0d75dbdc789ff26c71b38dba7fd4a8fb4775f808927da10e1f43718fe8f071a2ee9f40d73e81ae85f049a3ee9f7418c2703c45b67bdf5346dd3f65d4fdd346dd3f6d707ac6a8fb679cf446dc6e5cffac51f7cfa27263395f1872dc390a375fcfa1b23fa7c35919eaca2deb64748cea7eb8ebb38df729cf16b74424ed10c8fe32e0fd6eda175169e724d40cda7a395aa8965e57a1ba1172ea77aacfbd33f3241f88ee07bfe0df4c956cbb745a5aa400cb4c5b959ac76b973df502eb4cdbf8c46094ef62f5bb5a5ed1a0847ee54de2634f1290b946f95387a609db64fc3a35cb0813850df24c81d82443b86b8fec3277c89f5429db64b28dd2f9a91395f2778b92b74766db7b65a622c194a2794fb994e9cc7836c91817688b3c6e5439ac50bf8fa89cd6a9dc97cab87635ffda2c8774ab65784ca5e62d7babfcdb9666a54666cfa37de2938a77a657dd6a2a91a581dc17aa31e14f6aa4276a04d0f7fb4a37c3be85aaf7bed553133f61e8181998f02cd532e62b648994b805a250cd39977b08062fa3b78476fd76782f910e6cbab2d8c940759fab4a90ace17b3f1afabdf62f1a37e6a4166da1285443b089198a960e2cc8cb4f8cf548485f849c9cbe459051137fc2865f0d072bb288dfb9ae415d17bc02faa99e29b50212e0476d96176c95ff1b54b6dbd40dcd3a4b8d3ad39e1a2a0271b90ab2b70bcd94510a731f1be6fed9c69cd9aea4c3dcbfb35c49ccf0cf4e70004130531e2882e7d8082aff6b272b41af03e6feb55adebb5f9238a27ad50e79bfcd614bcf1426b2e7194ced3c07299e53ac6e64b01c5184fbda08ab99f603ac84ab649ce362ae51671b945f021e4ab592be456ac501edbf4079a8eb5da665ea817387ca497afa837dd31fa2e8c3540b676ea99ac9b1d44c11d4cc505b0106180580bc1382fb51828785149c4b091e1e52707f9b9242db48ec6255d24a5951ce128c02fdf76e19d6c92bcc6a2ee88c2f5352f7ebfbd2abe208dfaa3852a9e25421ba214f94c20db0551f501ee5a7fa46d2d537d02618521bed47f0205af0204af098908207539a3c36a4260fb10906f5ceb3f4b33f92ff3cc207d0c287da9a892acad92cf796f6290e9bb574d33da42c24e4c81de396cbb05ee502e26bb4639c3eadf4cd6d5c279f24e34255236bac3d6c4f9502269b062a25b21b8309ca18442bcf94511966d349a5a895ac3a692e373ba4bc7f285f7317bc60789c32c7f482ed95335155ce384fe13267814238dc865071cdfe60b96b8308582195e77b103159a41beb061d428cb0595cf054601985670009d6f5b0fab34d2427ce3c46389736c223290b3fc562e11f9723f120167e14d52f4d0dd92f8da6049f1f52f0189bf22a8d6e60555eca03af546b69a152eb95f23475f3e8629a8d9755cda72b358707bd7c79a51ac5584a49675894f4eb804a9a67130ed75fe04797d27865e36cba34a2e774c9db8376af2ecdf4ad4bf91975297c5e295d1a6fab156505b339cb658ec0837550b37c939e2dec335c99d2a7e84da0baa739b6ee09ecff6ef95324ff9bdd14c4c3a33be75d81205dd6b9541ee6daf23014e5a154eb4f833add204ed85a749a9427da52561334c2ebaa17413703b33103958df0a433814e671255c2425b09a1dfabb1cd1a0728d9645b8ae0b4c10a24d31782f9788ff0c9b4f0f3a8e2ccb71567982a0e4c0cb6eaa67f99a13a410a36c5d6dc955f7282b5b9671aea38de21c8ab57cfaf1d799b05bcad725435c483d2c81dd1042a5543d9a7ce861d56c23abb4916ef16fed98dc84265442e159907709ca5a24cd2544abb16d9b46b84aaf5fd52e2518f5e552ae3d018d0289c4fa5bfd8963e1805d314762ddd6954ba4b2823e138674755fd404d819b1624c5e9548a4b29c3eb925e1532e519b694c14783c56e617cb40ba8222db7156994a5f24ad4518d7ae2d6d2251335d39607f06e2f145eef163cd920de6d3e25fc228bf0ad0185cfa2aae5e290d532db26189aee257e04e7d382e750f57da9adbea1289ba5af34452af066a9ccdba5f12a0f54b7736de9410f076fe099fd2abccd11a45f9d4715662565f95c47085b82ae3b620554faab6ce90f47e9bbce665d88d40ba9d4575376b759a43e6a2f533d4f5057a9884ab7d88fddad14ce338e2029cea7522cb1a538d84811973848aa0b28cbb1c66239ce0c0a66391652c2d75a847f3ba0f04594f07516e19f0d09267cb14d38d4f27a3fa629cdd4d3124a706948c14b2d820bd50c1abc3299ad11af9f7558768755bd406b945ff51d5667155ea3cd572f84fb4f9f722d97d9aa040ee19d5c7339d58a413f683cfe75bf564fd5e4d055b39c6ad965940d037b0950ea65e46ee1ae726d907d4790b67d2155b0cd968295defc66cbd373464e0b52b08b2865de1252992fa6046f0d29f8129b60f061a191781fa6989227d2922fb549061f009e87589f3304f00156d8848f14ce6bcb1979cca605afb4590d353d7e90d56af89f11743763e8be19cc4a1b33ab95a95256a6500499c1ec4a7e29cbb48ad2a96ddda053aba9a6b03d6c5328b64986cef6723fda9a66c0504235832b4236833536c1d00caef423b88a16bc9632643b421ab27536c1e07ceff423783a2d783d5579bb42565e2995e3ab42e67883cd86a98749f53d62c3f85609eef66db9f628cb353b8de5e2581db8d156c55013d57eaa780f5dc59b285bb537acad2aa34c4a4d4893b2996a47b521dbd1160a725d48c85b29c1f521055f46d5debeb0b5574ed5defe90b55741d55e43c8daaba4727c20648eab6c82617070d08fe034a3886d54ed3586adbded148ba6902c2ea76aaf3964ed5d41359143219bc89594e096908277508c0f8764bc9362dc1a92f12e2ac76d21737c954570a15a17026da7275e30a2369a4bef05b4db3858bd00d8b4233f31de533a3f79a0faf8ddb6ea813109ec5e13764cb287aafba321ebbe9ad2d66321b5752f95e3e321735c63130cda7ac28fe00e5a702d95e39321735c47313e1592713d651caf0e691cf751824f8714bcdf2618fa4cd89226549fd940d5de9990b577c02618dc82b37e04a7f11f0e5239be36648e1ba91c5f1732c74d36c13068bfde8fe03483f6669b601802dfe047709a21f021aae9dd18b2e9b55039be29648e0f534defe6904daf95127c4b48c16d549bbe356c9b6eb749862e1536520adba57650c26fef06e14728f5b823a47a1ca59ae09d219be0310ac75ddd80e3b84d3898babbfde43a8da93b61130ccec03d7e04a771064e5239be37648e4f590417aab5d2d97cc526f97646d75cedfb6c14acae36ec33657bc326730e2847fb6a4a531fe8064d3d4d19b307c31ab36ba896fb50c8967b86b2350f87b435676d82a1f37cc48fe0349de7b5548e1f0d99e3eb6c82a18f7bcc8fe03db4e0eb29c18f87147c03a56f4f84d5b71b290bf664480b761365739f0a69736fb6090677f4693f82d3f8adb750289e0989e2569b60b075cffa117c3f2df8369b60b071b04d5b581b773b65899e0f6989eea0daf50b21dbf59d36c1f018f2453f82d33c86bc8b12fc5248c177db04c321ec25682e3171ff055962720fa5212f778386dc4b097fa51b84df67130e260fb6830d65f2eeb749860eeb353fb599a6c37a803220af8734200f522cde08cbe2214a01dfec26057cd89600acb27dcb0f93348b941fa1dae4db21dbe4a394e077420a7e8c62fd6e37b17e9c6a8fef75437b7c8212fe7e37087f9252f00fc22af8535463ff3064637f9a6aec1f856ceccf502c3e0ecbe2594a013fe926057c8e6aec9f866ceccfdb04832b077be07a968096a843784daa4294888d72885b2d078d75c62b56cef39b02b558b4549edf22cf38fb68428c7d3d876dcf0db81a0f5a53378508e280be4095f2735b296191a7ff5c16e87c0281557a075178c52c7deecdb3dbd432f960cb685fa44af585ad545776d69dfb821b7ebdcdf6ea5c69e795c997e6ca55a9eb74195b75e9d7a9d2a77e7f0b926e55efbaee55a5364b8c9ff599e730df20445ea2887c69233243a44e8aac522f7d56abcda02047ceab81bbc52655f67df2effd9e9c26a75182e4f35b543ebfb2e5739591cf649a4e3e0f89169dcb36f953a9f6b7f36a58f22e3abebbdadbcb54f97eca56be0546f970ed9b75b24ed789df327455935ea14af0d3b6125cd4058be16a57bb67df0ada4a7af7b80852a657a932fd8cad4c556499bc657134b0549d853714abd51422dc479725d5d2fbb9a6bbb4f3358ac3cfda38d431dacd8ad07693d2f5eee85f5ea738fd1ca52f9c9c9ae5b5c532292811c84dde13a467e90a8737280e3f6fe3b0c297b55e25f350ab778370f7a30867adbbd613bd4995ed176c65ab086c13d6c4c01ebc4531f8451b83fbb2ace7d4f605707db07cf8d908a1a76ccddb541dfc52d73d229beef59447f40e55be5fa63ca2e4d6a5e6c6a54e19db3afd072796db0abe4b95e057a812f8f56152fda11ae9bfc203d65aa5cf1d560bdf355bf71e55825fb5956075e01238be697167fed37ba91c1edefb54097fcd56427a9ceb7d7b2cb58ef611a375ff3e7090527d4095ead76da5ba30401fe5ec9ee13cb2f7df37856f4b1f5225fa8d60f554262f825169bd2e4f998aef295fe223aa54dfa62c0465afc28efab0ac2025f8982ac16fda4a5044f64261f3df35fe9f50b9ff2d5beeb706b66fee68a5ba736bac20768c7b36ec53aaf4bf6d2bfdc6c0b6cfb5eee6d9364feedd77fd693a5e29498d0952e6cfa8327fc756e6b5829e67f1338ea7fd3fbf9e61d7fda7cfa992fe8e1fdbe27cd5c4f1b4ddb256cab8e40761d297cfd63ae1ae2025f8822ac1efda4a60f77021cde01eae533e2abebb6ae84baa7cbf672bdf06e18ea24a95956857e9397b23c2ddeed303dbb9e04f11c2fa25b9f227918067566b84b3cfe1f1948d6d0ad5b69e459d65cabcc738306f92e902ebcaceb99eccdbd0c12704a9cfd979df2aeeea97cdbab6d15ea9b574fe370cf47ec52d5797c8952549ab2d407b5b49ff006a3547d76a9f42b5c5e89c2e6a53e65cfc21a4768e5d87827fcfc911b059b72525c0dd67ab583f8a806183b9dbe15675a64e0ac998834cbbc5ce5302dc5eb71bbef1e86c22061374adc279a8f2837e42e4e6f429829af9234e7cf04c778bbc186f59e8eaecd6ceecc401d9c508d9773991f5531ae77413d0bdc7010efc73e17c8f13ce70ad4fc94d3edd59a47869d3d77d92c0fe38db0dd0dd33345ec896f50564b93986707314d05ddf3fcdc499eee58729bfea981a0fb52a79b566afafb6be8e5aceff04f7daf91e3b94efabf1e5fbd438fb75deae21bf0b3d70d2bdb5bba545e0defee937dcf32c02cff3cf00c2f3aea3a6acd19f735aa3d9ba2e1be545b0e39e6d0fe572017b1c9b0f83e80f1e826618f90cf3b1d50129966c901f085db16687508ff9179cc8c768e4355a67cdf90d3c769ecf0732870be48508e4f7a302925123d9402e4320ffb2a78c80d3f81d6f23d8ac0823f2215cc8af41c8ff8a13f95c03f92184ce36b5ed7f129c11fb742eec7720ec7fcd897dacc6eeccab352bf4f4336d46eb9bcb85f20042f9379c28e7f8f01cbe2966a30941ff5b4ee8c334f425861627b798678397cf056f3682f777d980b72cfbf0d8346f0982f7f79cf0d27f60207eeefe2004eeeb9eec72b266fd6673a15c8150fe0327ca894697d38ed615968a925e368e7a0c61fdc76c6828358e4a758a183594cd291a8150fe1327cac996c6debb5df77508ed3f67b3f1c3f29de4f3fe743695b1f1b3d9d4a711d67fe1c43a2143f7645b73c6aaa9f773213d8590fe2b27d2bc0c484ded5c1243fdbc05c1fcb728c15c1c4398372298ff1e25988b6208f32482f91f5182b93086308f2398ff1925980b6208f32082f95f5182194707a901c1fc419460c671045f8b60fe37274cf72399f3d5e281de32097731c2f73fd9d0c57da436e2ecefe674860670c15c8860fe6f9460323a436c301720983f8c124cc6310f1bcc4508e6ff45092663ffcd06732c82f9ff5182c9d87fb3c11c8960fe284a3019c73c6c30f3114c9188104cc6310f1bcc990866221b30a98718e6fba08ccd7c2217cc6108661f4e98ee5c7be6c718591c4aeee1c27a3dc27a0e27d6600fda189d77b6076d5311cabe9c28ddb51c0bb33f8c645b929087e0e570c23bb78bcd7b790c1b772b82da2f8a5097c510ea610435378a5097c610ea3e04b57f14a1328ed9d9a0d623a803a20895b19767837a25823a308a5019a7ead8a05e81a00e8a2254c6b13c1bd4ad08eae02842651cd3b341dd82a00e8922d4380e423722a843a3089571c2840dea0604751827d419227571225c04c2dc6d7e7afbcbb3eb11e8e19ca0170aef140ac726b58c95b090ab12a6a04a18d19373ada9f358ac0b1cd966b296239823a30493d1b765835984608e8a12cc38ceb1ce473047470926a32fcb06b300c11c1325988ca32d36988508e6d828c18ce33b4b7310ccbc28c18ce35bf1f310cc719c308768989070bd705e527464c3fb4a6ce0d85e421408dcf86c3c1bf5b7cc96717e9f6d91ed2e847202274adb4b88fe879f8cbd38dbf0f37284f6dc6ca3f5ff7e27a3b7399d0bedb508edc49e5c1c11ff557a4310ca49d1d05267b204ef13cf8a966d0f918711dac99c68c765e8a6cc6566acee12db42b32711cef3b897f17877150174d56a2a2e8e3b8b9c83e04de176dc0f1b7b6e3a1f9ca951625a3a632b85b32b281bcc915c30072098537bd2ff4c1d05c571747e3342797e36d6e6f5a657bc462178d3b2016f692f82b718c19b1e9d41641cdf212e43286764430f97f7223dbc08c1bb8013de084bcfecdda33b7ebd717f047066741a32e3ba64b686bc17a1cc8fee6c10e3e885cd01af406867f5e49445aacf18c7c763e72294b3a33165619b586344cb36b1d68cd0cee1447b9e6fb4bd6743dea308ee5c4eb8d37cc3f54eb5e10dd518ed6c1517e43508f2bc384066d46436c82b11e4823840669c1a6183fc28825c1807c88c1d1e1be4bb10e4224ec8f05d1073f4b549380b728bd5116c1cec60669c6066ebdcfa2290f37bd2bf8dffd6d5e311ca05d1995e8ee37aa52a847221274ad843cc4914966a9709770ffad59248bbfc015d8d5fa31e8cf02de2c40733d9f85b1dbdc932f643101773421c9dc132ba25656dca1bb9302e45189744679a2f8edb549620944bb951524e8ffb1692f311477815666f0c1b770e42b92c3ad37a8c4b11d9faea6908e5f26c3c455a94fda7486c6b8dc621781772f7d4ee7374b369437c9cf7ba9981205ec409b16bdf3760ec6ad8be6f702b427a31f7f83a33d2f87e78e75904f292a8808ce3074c1f42202f8dee334ec6372ad9ec673542bb8213ed540b5ac844bb82d72c36c810e6297bdb62ed3e08f0cae8789b717cfbf73c84721527caf345ea2e0c35b2a937c8bf6a033d4c8ee357b88e20c4abb3d16525bfc245b953ac7dff642e90c710c8e2a88064d4483690972290259c202f3040eeb5f4f0bd7bf395fb11ea359ca88b0cd41d24c8b66fd032884710feb5dc932978e6be5c5e7a34e6937ab908de3a4e78b66daf28372b4bcb193ab8a0de84a0ae8f2254c6e50b6c504f20a8a55184ca683bd9a0d620a81ba20895d11f60837a1582ba311bb3fbf3b33fbbcfd6218d46f03645e7d9671cbfc45989509665d32f6dd01329d59a47b5125c6b20eded6ba06f47f8374777f695d1c1621b71ed4468b7641badff992c46a3c136937506a1dd1a9d7957c657ccd8e65d2f40282fe344197c530cc60100dba618cf209ce5d970abbc7b8835eb4be2a78b0904afa2e79fa9c677827a370259191590719ca05e854056450524a333c406b20381dc1615908c1d0c1bc87604727b544032ee59c706f23604f2f2a8806474c6d9405e8d405e1115908c0b6ed940de8b405e1915908cdbf2b381bc0781dc1115908c834336904f20903ba30292f15b886c201f472077f5e48471ea84451c771b694428afe244697eaec7bbbabe77af182946a07747e72107e3e887ed21473942b98713a5fb4d6e5767db45f27b45a5a2c46a55e3bb74fc6e84b53a3ad3c071fcf6c10484726f741f5630a2657b58518ad0d664b3f1c3c724b6c9938daae3ea6dbb323c80b0d66663a67d71f61730b0f5edb310bcba6ce864e6e66ebec61dc74f495e87b0d647a7438ae3a7f5ce4728f771a21c2abcbbcb57881a9511789816bfc63d10a1db9f8dbebc5dbd42432fe7ee3dcb658622b40dd11913313670b6fe7b07427920ba2b8f181f6db019803a84f620275af3b51aef8b07bd7d92e42c42dd980d2f7441f6bd50b691d11804af291a834eef9b47ac834eb6fd479e43689ba3b5ac8bb199b32deb7a10e13c948d072194631ff795499311c896a8808ce3caa4e108e4e1a8808ce3829ab908646b369da570ef20c7f19b0b4f21d46d9ca8f9df418ee32ee17722fced9cf8f302fa048c4ff4d93c821b10cc8e28c1645c67c206f33e04f3489460c6d157bd04c13c1a259871fcc8e96a04f3589460c6f1e5984d08e6f128c1645c53c206f33204f344946032ae616683b90dc13c1925988cd3cf6c30f72398a7a20493f131091bcc3604f3ea28c1645c61cf06f33482793a3a8fef181b39dbe3bbed08e535d141c938946443b907a13c13dd27a1717c3cb719a13d1b9d053971fc32fc2484f25a4e949384b9aaa477ebe84404f6ba683c05b52dbd65d459b607cc2d08edf5d169fe8c9d145bf39f8e50dec0897296489dbb6f14a9dfa771fafbdebfd46cad029e9b63085feb115eacdcf2465dd806ad810512459d70bed1d520cf14747ee8678f982f76c89f60b5b44bfed8e2136a65ca1a714c3d2a6955f26a95ec26791672d6268a00f78da03403b5d2e4abbbcc659765cae854abf7555ae535c1bed1981ff8f346f901be7396ef6367d5fcc4084b0e2a959a362aadaa939cdae5757996eb4ad4518daa851674b77b4fa685aaf9892156a6eea7eff27d7d140f542ea1ca0175d82ce53bd755cb5aad5661a52a2b94a710baeac412f9cbe9a10b3afbe602fdf8ac491fb9f19965828ea59776132852c26e7d1abbad75642a91d3a0e17ea8fb1a45156233953473f9e89636384dad1442efdeabcb7f33d4bbae76a5a67909f0c9aa64cdd7eaddfbb6c88b6b55a6e05fce8f017c5790e4be6b0100 serializedProgramBytesString: - serializedSignature: 3da66e731d28f8feedcf05003a53d9c5ad2d655c9019517db113e5dc867b3dcdbb732a2fc2327ca0f75b1c6d1c92b3c670ce3b7cca318346151eb974b51d4106 + serializedSignature: 9efadcacbec49fd35f3d1df6a35c6342138f26097064e18bff4f3dfeca503b4496c2a687a954e1e37ee66777d11be4eb1f25fb6cf03cd277b9233eef7b9fd406 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/8b1e586bb6b844648bb575b1628cd394.asset b/Assets/SerializedUdonPrograms/8b1e586bb6b844648bb575b1628cd394.asset new file mode 100644 index 0000000..09c2fe1 --- /dev/null +++ b/Assets/SerializedUdonPrograms/8b1e586bb6b844648bb575b1628cd394.asset @@ -0,0 +1,26 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 8b1e586bb6b844648bb575b1628cd394 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e782bb3b94e0c14312b494e256ac2450a11402099012208d202d75a36ed4dddda9bbbbbbbbbbfbafefceec4cf6b9bd792eb7b7f75c6678ffe143366bcf3ecf779e71cb18ca9c9fc820e7d742369f4d6243d80256c4d6b1b5ce5f939ce31ae79f7ba6aecf63e5ce71a5f3bbd0b9378865d6f026ffe917e9e8fc9ee19c55b04ae7cd2ab6dc399688fbf9acd8f97b86f36eb173c6afae70fe173b4f45ea3a2f2d6093d95c36877588b4ab41c442f15285bc16e176451a3abf27b24dcedd62a114ffc85071ab83f32bdfb95321eead719456cf2d628b85596b9c7bcb9d77ca59a923739990d8306b2726fe60eea1bb3c66cae30eceff46f2ef3af2ef86f26ff87c3d79ec91e0f33dc17b8dc0df9cd08571deefe51e23c39d637de7f83a38e7ef7e239febedcacb581547565f79ec278f5952e61b09e8df401efbd7606f3c190380ac44983594c741f23850eafb6692df1fe2328a9c0be4719623803e83c0b71b81fbfcdae010b6ab701ce90bc7916e38669c29c3ef13f9fc50791c268fd952b6f34c9b4be5b51c79ec53835eb9ee7b6c14f37cd6f9669d32799e278fc3e551da1b192d757d0b9c87d54585e948297394fcc6db9aebea797eff1d79aeae2b5d54788d91cfbd2bcf774c509f44fc4fe9a4bef11e387738d65d1a47960af71d7de1bea37cf7249763dd3b7cf600ffd3ca1d2be5bd9f841deaddf7c0b9a34bbdace8e76ad441c9df49cad949cafd009c73b95b03da5657beb74d9e8f6335a76ddd13b837c195d350b19ee87ea77e5bf77afdb12cda97c7d7a0a70adb71beb01d27e5964ab9cafe49ee794471ee0fe4f0f73ff4c9ddd92777672957a5113b26a8e764799c268f33e57106ab8ec7b9c7c96b53e571bafce678169d068c97f7a778efb63f2920b77861b48b2facfbc8ef4ea841a67a7f963c364af079f5ccec103acf91c7c6097eb3b13cce0df1cd26ae2f34fcc1e70b136b9039cfe5dbb012e8e0c869b4599eef2a8ff3e5315ff29fecf303e553f1fca0265d0aa42e0c8481a34be396f27c813c2e8cd685ede6d3e9a3d4e9149928657e0ccef97192bcfe0938e7ba4a9e8d1f91327797c73d7c3aef49a7b353de15ef356b0a7c2391f7e2f9d75eae7d4db25dd94d0ae4f5c53edde6787a379c0cde557a24121f964816537d8ca74a1d14dba5bee73e05e7fc38c5fb9ef8db79b7a9f2ad5ee03a7ff73370ceefef9da0aecb58accf7239d3c1b7a7cb6fcbf4bfa90acfe52c36eee9dee5c769e0da34294f95818a586c3ea69ee3b67d0ecef9fdc2046d2bd6e8e77cb7d9f838efae60d1e9cf2ccf1f1abc20afad94facc60d1716b86bc3fc07b27522aafad72cf5b285d4ae43b33019799ae7ecd557eba8f3cae65fa7cb6147090f1d1a923567fbbabaa07ad8ef3ad22f9cc3a9fdd7b79729a7494baab744c95b3739067f9b57de5b14a1e37cae306efd9bc67e435c564bdd46d171695363bb55eef3a3fce92f7bf00e7fcb9724f76bb27e4b54d3e5d75e1b99fcf765d1a10cfcff6779feda8d289cd2edb16f7f8e496b0f87e7b802b67847aef40574ecbba01e51ce4ca19a9ca4087b8e72d95dc83e5f150793c4c729ccda2d27276b8bc3ec7fb5e6436b8c69ffdd2c7b726dde2713cd2d5b3ba7c7f943c6e91c71940f60e520f55e68065be23c03d7e3e1dd80bed8ba7cbd1f2d8ac067bba83e7f8f19810f6c7bb575f1e8f97b6cd63d1759e79aeafb4ee1a47d6094ceba76d543de644f77e2b1557553a7f8cfcc6ae1eeb6a5f3a59de9b0fec967e15c907d764d8440a802fa9b2d929bef0f9ca77ff542043777f2bd04177ff3479fd6b57f736ca9f4ef7d972a84fd77c1695ceb033626d8de4fbbeaddaaf1209cb33e5bb0b7c61b94086cb1771649da50fcbb67fc8f3b37d61798e2f2c176ac252b623457603e1962dafedae09df3d000755a63d0f094b75ff7c205777ff02a083eefe85d161d94e95e32e42c212ea0fc3f2e2585b23bbfbbefd6d0261a9da8b2e91475db9f73279cc9172bf4b40eee5f2581e476e2f9fdcef13907ba53c5e1147ee5588bec97c4ff9ba6aabd99345fb3a3f77fcb6fd2b71645dcdb4bede41b51b5cc3a27dfd5a16edeb8b58acaf5f27efa9b28b62c1af2d66b1be0ecad3421ebf773d7806faaaba7f0390abbb7f23d04177ff2616e5eb1dc7cbeb3733bdaf43fda1afdf126b6b64b1efdb2a1f8f1796db7c9c15df252cba9eb3c40d9f8efef2cf66163f6fbcd5953f5295cb6e93f2964af93f80737e2cf47db7d0fd6e27d9fed5b9ad94d3545e1fe45eefa4d2e8db99b6bcd5a9c0f7dc1d2cba3c75978fffdd3e5f59eef95bb52d77827bd0b622165d26913223c520ac8ac0355d99ab26aef7cae37d3e7ecba4bc1fc1397fee014fff51aa0e7ebf3c1eeddd6ba5ca552a7c9b023d1ed4fb8ad0158459e03292b2f9a11a6c0e9226ad60d169d20ad70fbac46b9f7d4c3e735c9c67541de449797c5cca5fc9a2eb2fb23ec99e92e7ab7cf7951e5778ecdb67023d946cfece4f09d8afea5dcfcae3d3f23b252cba4d4cd651b57944b2e5d864efc97a74649f68ff11e74e3874537563e58bab6bf08fe7e4f179795c23e5adf631581d87414e82df8a6357640d8b6e43907a30996e88f6037eff6779becef7bcaab7bf28cfd7fa9edfd7f7bcaa97bf24cfcba29f672f0339fcfc15cfb6eab68c57c135d516f09ac7a7bbcc7f23e5d1df66afb3e8fa9daac355c8e77e01ef4106eafeaff2bcd26753953cff0d9cf3e37a9f5cd5cef0a2efbe92bbc1a7af6a3f517d796f79368ea904ef009eeccd6899717d5a9679221be53bbf8373c7a7bbc72bffab7765fb46643f29e30f70eec8c8cc74f5cdccc36545f6f7f1db04aef3a34ab3ff04e75cf69638fabd2a9f3dc067db01f2dd471278f740793cc867db4152c63fae6d3d5ac691a5da18553faa0a43e5b35cde219a703d0484273f3f58eaf017387774e8a1cad3ef31bd6f1fe87bffefe8f77baa3e41d5eff9814f3755b6546d61aa9ca07c54e3934ce5ad4af7c3bc67aaf5fbd0a7df613ebd0f97dffd07e8a1aef3e3112c3a8f926d2e4cb5611fe9bb7fa4bcafeb6b8f17475ac9f78f92f2fe05e775dd2a0997d54bf5a3cb767026db8c13cebb545c5365abe3bcf75aa974e02bf7bcf71f71e4f8f5dee2d37b8bd45b96297ba9feaeafe551953913d55bd551551d4da7f7f7eef9806d71e4f8f53edaa7f7d1aedebdcb2403e5f74aff1f03eaadca292adfd1e9fd8bd43b01de9163a4beff03e78ebe7d325d197d942e2a5dfe2d8ebe9201936956757df72bdffd3f98573fc3d2d663e533ff8173feac4a4b559b163c77f4eebb543e27d31bf677f4fb91d3597439e5f4f4d853adf7f1eeb3190c9cc3eb91e8eb6aac44e404793f039cf3e3892cba5c77a2e4f0816b4bbf79528e4c8fd8bf690a3fa5bfaa2b9ce4d35f7e3372b24fff935dfdfb5de8ea96a5f228e99fecbf34ebaff89fead35fb6ad464e91d7eb807347ffac0bf57258379f1c1f27d615dce7f67f803c87c919a491c3ef6f65d1653f3516a5178b1e73d259de576dbf9f8073c7ae012d7dcf9dc1a2fb60cf709febbfd4d5bfbf6a7b60f2a8fc5be9554bf131a28eb28f28524fbea3d2d06ef228c76b65a8be24c5b70bf3caf2f5c1357eaec6353a3287fcc1f4baab7160c9a4252aed966592882a977590e78da5cef56a96a1ec8c9ce90bef33dd701c98e5da3150b5b9cb310511d5be11279c22aa6f0709a748f3046c95fd3291b37cfa9d25f57bc2fdf620598e89b490c796e9d12fa2c24da573bab05771e56c9f0d67bb360c92e5b9486b9f4fb6417c32c7e7937e7b10df4a8877779fcee7f8743ec7d579f078d7c6c1aaae29db0cc5d86e18bfcf65d1f15b8db9a5ce6f3bfb5824d277a06c3ecf67f379aecd43f264b8ca3a58a43d62f3f93e9b55df0d755ce9ec939188cd2a7e5d287d4aa665119996b04ed1e7918be4730dc07bea3a3f5e2cef3704e7fc28c737442e90f755daa9e45c2aaf3706e7fcfb8aed65f27e1370aee4f1e325f27e539f5d57c8ebcdc0b97a9e1f2f97f79bfbe45d29afb700e7fca8785c25efb7f4f1ea187d1eb9dac7eb2a709d1faf89e6559d1e5f0eeef3a32f6c33545c8817b66de451a54dd7b2e832f3b5ae5f0feb184796d2e73a161d27ae93ef4e77fd79981c831451796022f983ea73c77cbe5b023eafc2f97a9f7ed74bfdbe70bf9da3fa28553d3d91fc2105fa45545e9d299f517c6e60d16984eaf33ad6d3a795ead3e8e17b5797c774890e6b71cee5bfedbbafd2e91b5974dbfd8d2eafdcf1f25cce53a92e5ba8b40e962df8d811d54fe16786e5418984e90cf9aceac7fb049c731def91df56d755ff2a183fa70d8b3e3ef9374b5b5a83737e5f33d62ad2571efb47cb886a1753e3b06ef1deaf6e5b526d4a59debd1d95ecdee03d7e54f372a64bfbe38dbbd15d936dab916d3e7edb5c7e79b2fd6fb8faaee2b7be067ef2b9c8ade039f5addbbc6b1139bf27723bb8761bb8c68f7748f66dc0b9a3db88837d72ef94cfb505dfe6c7bbe4f576e09cbfa7ea6b774bdbdff4c9bb17e874b7fca67a67a0ef1bf730af2d8ef7778ef771b807c8ba135c5332403b9efa3e936de519ed65188c8afe664d61a00d97fb5874dd4ef557deef0bfffba5bd32fc47caf0afee8f39b086f0577215af0758749fc903f23818c8e3b676c0656abff3a0cf9e077ddf1dcc6aec2b880c91f7805f261c7f941d72ee55e46169474770ce8fa02f35a2c6cb3c02ae3d248f8fcaf73bf97cf431f0ec63e0597e54fd92ef817327ecc68cf2c956ef3d21bfd1199cf3a39c37167952de5779888aa34f011d9e04d7f8f169f94e5770eee8307aaceb3f635a22df7a46bed70d9cc36f3e2befef00ceb9dc477ccf3f279feb0ece15632827335a4e8c5ecf031b55bfe5fd35f8bae45a5d767a8c79f929efdf3f38daa69ae469afa9bc5fc6bfc80b3e6e6a0cc49b49c8f6b54ba7b2dd21a579bd5f660aeab06abc77e445f9ecefe0dcf18fb1ca9f553adeaf065f50f272e551f609465e92e1d5039cf3e3cb2c2abe4764df7075bc7f8545e54de29cebf58d4fceab3e39affa7cf23579bfa7efbdd7805dfc7e2fd767f934bc287b6ab03bfa5abd88689798ce8a59212b63434565979786129d6eaedeac79a239175d5fb490333ee39c7fb6926d725e2dd6cdf65e20e69257b25c271fd3cdf6ee24ea22eaeb93c4ef42e7891221b47746cc27ee8cf90457aed4f9570ca6aa5738d7a78999ee7cb27a897367089be51cf95b4bd930b6c8f9172d65a1f3d95256e59c1538bfcb84bca58edab14fd664129fd6ee7f67be23d39d75bfc6b9a2809639e7a542c37cf17bbdd0b458683fc3b95629d60058cb56b289ce71a3f85aacede5cedfba6f1648647a1df593efb1ebee147f154c931d6bb8f643852ffe5f88d4468870f4f57bcb785877a8686d3c262624fe8fa19bc8f00af10c296398401689ba96c3868af6f8f9310483db186ba1debf5dde23585e5c5bf46478707711167821bc63b3eb17d4fd75439f7ad1a6e5b2a1a2d9b06b0da6c503cbe5658916d52026d4ab57379b2beac71fd1e1174d70f969c4ef3e57229e0b1e00f545e6171d00624a798193aacd0399e742e7b7abdc026146a950d26f568150be52aa33c49150ea88dd248c9be03c5b2452514fd654f1d152e77c85f34fbd1d13f2d95ccd0622f062b3e69a0060c197a10b3ed1425a502bb1075b48267e0036acb6c20bc0a1a2bcd5318e9b63df1205b13ab234a622e2d7db8ecdfe63fcea75f7dc3a776dc1c95f7d524f1f3e8d45f824f3552c84eae842a871ba2358cd394abcf069526d97173efc47cfb029e2e335e98011acab23d824dd3eceefad13520a9d678333e4d5b581fe444a0fb039e28435ab8021aca74198cd11b6d068c5ea35f269c5154224d7d7054ed3dac9be93736ede06d2c187a01eeadcade2e6be415dbb818e9ea8d82f25a5a76a95f94ef56117e75ea1f37cb128a2f2ebd1191eff8257138d7e233e59de5b30d84f564bb58da0da1bd491c36a86116fa8219ecdfdb5adc60d441ae78f0cadf0c8d0088b66edc246b3c698e4f6612537c12477082bb92926b96358c9cd74d146f44bef959668e335c6a8bf263aefae728c592fca8655cefbbac69bf8d1a553c2d1a5b3882e994cd7a4144c232c9a34d7851dbfd845a7a43fe83ae341d70213dc35a4e09698b7750beb6dad30957708a9726b4c70f79082db60895c660a12b9b698f01e1ae1450185b7d3c56ce133e9ad8eba35312e277881823732778f817cf0cefab8dc8b6135c2f83a6031b7bd2e7838c1de985afee0e985074f074c781fadf079138208ef8809efab15ae71ac38c23b61c2fba54078672c2267858cc85db0b8d63f0511b9ab4e38cf5a0724a2751b5c70374cf0c0908277c0700c4a018eee3ae1bcdc3598c5d67eff737e628437c58567629a0fd1687ec89a8c409af7d009e7591fef960f95f5f5c424678795dc4b2379a8c8c30f61e92dc2e9fbe0a689a59e8bd95c27a9dd87b99d27eabbeb44c709d74875c2cc778e2b8416fcfa729964c7ff56fc4c6458351fd024264a225358e23d89f456f01ef90c9191f13edf2c319a648173dded339c2242a0447c6988561bfe05ec79c56236e3ab585789d0ae8734dce589af9bc506cba27b6329cd704d4af3862e198b93d2f4c1a2ec88b051b6af4e328fb22335be9acd7d950fc1692cb2b798efe4e1dfe9a74b1a445979bf5a4d1adc261e2e6f85e81677e5cd617c21f60dc255573b0ebc5e3a4e81f34cb9f38d62e9e4611203be7473371fe008737ff4d1618c880ee312880e94566111204be749bc2d8c8f6589e9c9e1e5c2f96c9e2379898886fb8acb9c921bba25e2d112b69f73543ddc31fed600f7b7fe3a6d7871858fde0a535c198009de29a4e081581c1f17368e0fd249e6a90d5f49396c096b30a6f6f8b06a0fc152d4099a14f59f48b0147528267ca246f83d19c1846763516152223e12c7ab87618227ebe2581ff145dead90e9fc5fe7bcc16b9c8522f6678accd04b0d32450f68b9c8b00781e7d7394fb8234a82e8998339c594b04e918b85db544db8fd1230dcf230e1d334c2a7d709267c381676d37561c7439ae71bbc58b24ae66dd1a961a618db932986735589e6f122117215225c33d9fe8e1b1ee01c2b9da733453e502aee658a7d49caddfeec00613a02d37f864effc640ff7940c3205f1ca9fb22273c53936e4502a65ba374c279c1671786147cf81ab0c10b3ea3316cb375d8ba8938b251945cabc4f3f9c2018aabcbca4529ca20c768f41a2ada18d7b2da2c90f1da021ffc5621fef68a28fcdbde508a30052fbe06adbfe0a57ef4052fbe226c9618a79c0eedb102d68e58a23a4f93a8468224aa63b1b8b02b1617e627151776d2f99c687a2eab559fc363d47c219bc7bcf0057eded85dc75ffb176de379097856aa741c28e6cf55887da75c72153c31e5bd9ccbc006532e7c1125f471a240c489746a8ec58b7158aebd40936b6fab172cd7de59e7b2a239bebc565d76b290900eb75da8735bd167302281c04fa59eddc518e90a91a816c944d54dbabb8b8519ca45b659ec5ce7092fbc3f504cace0e5a5a982f71a419edb5728eabd9893ef269c3cdd76628e3e1ecb0076d76400814ad513b028b487260afd13300a4dc4d4de33acda9330b51769d4de5c3f98da9331e17b6984cf6a104cf8149d709e30f30576c3d410a76282f94ac431c54dde68a9ea09cb7d35c565a2aea0ea7f45e2ca26e7371f13bb5c88c814e3ddd5d09d205a4ec3d82ed1b06d1990ed740cc1d2906c67e80473f72c4c44709c1ec1993ac1bcfcb58c21e5afe52c99f2d72ebaef70ec451aec1706c43e0b8be6c561a3f96c4cf28ab092e760925786953c1793bc2aace4795820966802918f5e0b1288bb62c2f7d1082f08287c3e163157ebd2a63e8cb7f4798554b7fae4b56b143ac15f29529e4c27bf77f3dca2a8f611dee651222bcd41e2793ea667a94e4f777a1d1fa0c8cb1485a20d8d7f71ae635690af1660e8d768d01f1710fd024cf85a8df02f020a5f88f15aa7e3d5b186702d12e3dabcabc39cab4138ee866953a6d3869f7ae116e43bbb6348f7d5203db77130a47b604694eb8ce0fd682ebe310eb239a2c1af504e0d5c2fb2f1e018f7c434a8d069c053b659d505837949160b1661482b35485f0988742f2c45ae0a9b222fc6d45eaf4b349b04537b6f4ced0d61d55ea293cc4b1d1b1952eae02b3c072f752cc5beb31ff69dfd93fa4e21466a735852cb749279001fa009e0f14d8305f0724cf8811ae19b030a2fc2841fa411fe4840e1c598f08335c2bb360b267c0526fc108df0a280c25762c20fd5083f33a0f05598f0c334c2af0c28bc0473f2c3c33af93e98da4768d46edb3c98daab31b58f0cab76a946f25031ea349d838bfda39f820d2ee6ab9227364980af03ae1b585cd3f7b126a535ba70e139f4d13a950264e56b316f3a46e34d9f048c04eb30e1c76a84ef15d055cb30e1c769846f09287c5f4cf8f11ae12d5b04135e8e05e6092103b30213cc97db8e290b0e12deb94ec4315e9c2f16b3ded78abfd68a95478a45c775a1f07dafc149755cf3651432a5f7964b9f2e75bc7d88733588d69598d627e9b4e63dafbc11d72b37bb5549b71aa21b5798c9fac95277bf407a55613e70b2c607b60574b0f598d1a784f4810dba74560cc02f214d67b171a405a2f19e2f7bb24278ca9ac0a34ee3a7c9a7269c266f1569321f0745a72b967e6fd405372f5b9fc690b2355f61bc31573950d97a13e6b367687c362f60bab51f26fc4c8df0dd030adf1f137e9646f8e101856fd609e7c51abeb675a862cd0198dae768d47e26a0da07626a9f1b56ed8330b5cfd3a8ddb66530b50fc6d2b6f375093a4ffe136914c91491b24a64503c8b99c7dcc9f8ee58a942e76a911845b54a9ccf135193b72c2e131980bb1ac912d1f8b152f425963b57d5a8ab4dcc9da599298a63eeda4c992229289263f1568b2b15e2a962f01d7d865322334e9845056ddd3c040ba20b3441d43b60101d8a05d18521b39fc330c117e9c29e8f6628704ecaa2c225c8f70ec712d68bb184952fa91dbcd1e208ccae4b7576b97d9baaa5d4f5dfc5018b454762e17f992e650918fe4761c22fd708afdb2a98f02d58985c8185c9954985c9d1baeff044efaa449c384e3fdf3198e0ab430a3e16f3a26b4246bbe330c1d786147cbc4e300f7bbeb2ba7f6c271710646ce70998175eaff1c241ad8379e18998f01b34c26705147e1226fc468df0b280c24fc6e2cf4d58fcb939a9f8730ae634b7e8d2343efe6f89f38f3748978ad45ae5b1254ef196df291355459e1f06f1b053312db6e9b46853ad45b6f39be7bcbc6fca1d1d94bc0e5b311d6ed5e9d05aea90ebfc5f2e2a43fc9d8dceefe435380dd3e0369d060d4158f03944bc6414e46ba763ee7bbbc67dc7b609e6be6760ee7b07e6be7726e5be676249d35d9aa4a94ec0a4e92c8cd0dd1a427f0424743626fc1e8df08e6d83093f07137eaf2e6c030a3f170bdbfbb0b0bd3fa9b03d0f8b0e0fc44b9a72529c349d8f69f160fca469580a93a60b301d1e8a9734e5a53069ba10d3e0e19a92a6ddc4f782cd77b80873df4734eedbb05d30f7bd58279cbbefa398fb3e9694fb5e8221e3ebe387298e5d8ad1794243676b403a9761749ec4e83c95149dcb31239ed618f14d4023aed009e7449f0989fe4a4ceb67355a4f6e1f4cebab30f4cf61e89f4f0afdd598112f688cf824a011d760c25fd408afdb2198f06b31e12f69846705147e1d86ff650cff2b49e1bf1e734ebe663e9aade5a6385bbb01d3e2359d165eb69693c26ced464c87d7753aa86c6d780ab3b59b300dded069d08879d9da14d1e1b52e604bd5cd9803bfa971e05f023af02d9803bf8539f0db4939f036cc8877344694760c66c4ad98f07735c29f0928fc362cb8f9d63561f285db31addfd7683db65330adefc0847fa0115e1450f89d18920f753180772ec76fa78f6dc90dd766efb69b9add4a7f1716401f6902a8326000dd8d09ff5823fccc80c2efc1928c4fb024e3d3a4928c7b31233ed311ea1ccc88fb30e19f6b84ef1e50f8fd3ae1bc19f88b44928c38cdc00f68040f15ebd8d54e1f7decca4ba9eda3ff52c74bdb47cff7518adf471f5e57ac8ffe41cc97bed6c5b680bef4904e38efcae5bb2985eaca7d1893fc6d58c98f60f9c37789f87f9c44f3519dff8be51657d48aff8759132dbee77f9fb0e7ff203c7f401ccf0fb7729b3e241ec39ce7c7b0cef338e63c3f85749e27b068fab3269afed02558347d12d3fa17a62912f145012688ea50b19896a29bd094298a4b9901c79e3d85e9f1ab4e0fbea64a30f94f63f27f0b193acf60a1f3bb267456750d163acf625aff81850e8f23ab641151854771f57a1fc98e0c7c0e33f24f8d91a5dd8219f93c66e45f3a23790c54e30cdcf26cf430cd2066bd807df96fdd97799ddc1d5533b47ae1ffa1d58be2cc752244110b3a9ae3454c837f741a74d06a304bfc55295610704bfdc9cd1b7b09d3e55f9d2e5d12d4257665f8203abdacd3893bdeff348e77dc0ec11cef15cce0ff42a609af6282f962506104bf86098e8414fc3ac6392312cbf9da809cdfc084d7d1082feb1e4cf89b1892ba2191bca5132cf2ff4404c7a90cbdad13cceba1f523483db44124997ae83b18f6861aecd37b04c3fe2e664423cc88c64919f11e6644138d115b021af13e26bca946f8b69ec1847f803966b3882639e59383e733b84c4c912863ab843c8bf51719de5af93b7a1642a63873b39f4162f98b7291ebbb496e8598a5902912666f1ab8dba8c4273497f94a06ea3bbc31c9cd62575427e79922312f0a38b4ef438c45731d0bbe20215c6bce2d657a19ac37257b83d0b094c141b3ab44169459a3841ce7e9a033373ec21ca685c661ea0674988fb128d5128b52ad928a529f6046b4d6189115d0884fb1906ea30b693ea549df44ba4836aef2992fbc76e12e51142f4cb3e2deed2f86a3bacdaa9e5f47c78075c23354136af4bd4ae157959a58b44c68b80e34c0bab2d7c9da6910fffa0c0b9ab69aa0e9dd2b58d07c8e054d3b5dd0f0e98b8bd85891d0940af37662bd9c68e7fd1b57bd4a94b7bfe558a70ce8bd314e408f9532ca793b8f0d97520a18dc015327413de1ae1f5d229ee58af2b5ac8a457593bfbb5e5e735bd8dd3732ab7bcfca99da99385809f40b2c48da6b8264af8041f22516241d7441926f4d900401fc1506b8a306706940c05f63c23b6984bf1350f83758e875d6855eb191a1e7b636d246a16fb140e8a20984b6bd8305c277582074d505c22c83032108d2ef31a4dd74194540a43f60c277d008df1a50f88f587875d785578991e13589a96d511738c503dac8f3131618999ac078266060fc8c05460f5d60ccb3203082a0fd0543db5397390444fb2b26bc9746f8e43ec184ff86855b6f5db8f10d1ce6885019cc66cb063ab71614dd805ac8dc8dc537c892ad5b5af6cabb5ed958b97710dabf633af7d1e9ac0640f1490fd16b02273f00ea0f4c83be3a0dda000d94b7e9ca3ac1864ffca9d3818774bf48ec187ebedf7a9031fc7f613e97a5cb68fb06f3b9bf317afd319f53dba79488ba11f7b41c16bd346745b597b98b7a96c927bd7e6e6f388daaf507a1fd0f066480aebede2f18907f312003754078dbfd54a6f63788c6a02262742e12c4d0ff61860ed218fa484043ffc30c1dac33d4dd49bc58667c4529379545105387684cbdb47f3053233ae15c99a13a53f93e10de2ab5fe611a7c8456950c6dd7bd8b84f17cb497ea9a7357aee54d145e2347a66c4e808d09c924b819982dd93a5bdcf5fae186d75542df60f3aceae8bec9dbb086616d583949b561d5d57d87e719b991387b28f83f3006ff403d0c5e9e0e5e7be66d1ac57dbf12e09b278a7e654cf598f3800c82b43ee6efc335febe7440307f6fa013ce9f1fa1c98eb40ce364470d3167188939c3a8a49ca1111656a3714777b72073d73cc9176f052b3b36d67d931719c6681c308239e05cfc034db060df5113ecb306060bf6a618b1b13a6299e2749d1c7194299ee7a5206f15a2d4a6f0cd30ed768a5752cc496149b139a6c1389d06ad586c49d1ab95f0843e68cda40516f83b6b02ff9b8081df12336ebcceb81ebec02f15c15b29f2389ae06f85193f41d7e23a2898f1adb134692296264d4a2a4d6a83419e8c959954fea13ca73c8579485b0ce9140dd2c3070743da0e33752a96fc7ae37792f591f69841d334066d1c12cca00e3ae17cf7eee991f0bb7777d4081f2a36c75ec96a6328e842e67621f3ac3037c583416744343bb488fdba79f59046239e5955ff3a786764ff9499115e29a6d3021b7eda49e75a3cf477d1a0caee16658af82b3611e2a6205febacf335b1adf946525f53bbc8e4b3c96c97ead16143e4f52562eb3877368bbb3b8dd7d1ca490e74eef36c7b83ecc02d616e7dca5b41dfdba926fa0bf1bd7156bc9299d64b660b2f192bdea81d8b303fea82a57f7334e95fe9b060e95f572c419f1baffc352c85e5af6e9806f3122f7fb9eecb9db792056da5db01c3bbab066fd39c6078bb63c2e76b849f1b507826462e5f478e2703fa16fd51312dfa5e21301d6dfb3cdccac435af96816df0e3b55417568779a678bb42b6d6baa3d483b71ff6c082aa4013540f040caa9e5851740156145d985451b417e612bbe95c425b9e8983a837267d779d747ec30d86a1496cfdd0070b8e3d34c19199172c38fa62c2f7d408df1c50783f8cd2a248b851aa5998e0bd420aee8fe158ac6b760a8863804e38af04ed9d88d65b70c103311c4b74dec89d7d68202a8330f94bb166c1d839c2b3450d59ed2fe3dd0996450dc63429d469c225f0d25a502f18827d6599ee2b2265d4ac3b1ae48b437565d6eece69846f0195ae65f30b9c335edd0ebe64fef2081f031d0d4624d9da1266912861b68bb12cdef7b13261b62eacf86971840fb5895669e6ec431a9cdbf5d98c98a0a98707cd30cc1956e89c816f6cc94b65ee14f752e7af4a6954d0ca7e0ef6dd95baefb640bfbb96b96398837c3b57e78e99e976c74962f4697912eeb82ac23bd8a3110d419cb10471c6785fc79c314fc78db7254696a4919bfb9c9bd0e68b92212f0fce151533b754589104d37d341549f5a327bb5a90ed156379b2fa61d487eb620a6f712b8d849cdd3a0293bc26ace49198e4b561258fd249e6a5927591f09d5ba3b144a92c64c16b0cc663dfb03c76c4249787953c16935c1156f24e98e4cab092c76192abc24ade1993bc3eace4f198d36d08e97413309537865579a24e322f1b6c4a44e536b8e04998cafb855579324679ff9094a7602a6f0eabf2544cf20161254fc3241f1856f2744cf2416125cfc07ceee0903e371353f990b02aef82f9dca1217d6e1626f8b090826763820f0f29788e4e309f6e7e4422827fc005cfc5ca0347a6a03c300f738da3c2bac6ae3ac9fcf92d89f0883311793e06fae890a0f331d73826a46b1460828f0d297801167ac7850dbd8558e81d1f32f476c342ef8490a1b73b06f9c49090f7c0049f1452f09e58e89d1c36f41661a1774ac8d0db0b0bbd534386de620cf2d69090f7c6049f1652f0122cf44e0f1b7a4b758d103d9dd308df5334fd632d74ab32a676c4c5198984452e4eac100b8b33c386c5329d64be4ddf5989a8bc1517bc1cf3cbb343fa651126f89c90828bb1b87f6ec8b8bf020bbdf3c286de4a8cc5f92159acc2045f1052700926f8c29082f7c1205f1416f26a4ce58b43aa5c8a09be24a4e0355845ebd29015adb598c69785d4781da6f1e521352ec334be22a4c6fb621a5f1952e3724cf0552105576028ae0e89a212d3f89a901a576135c36b5350335c8fe1b82e248e0d188eeb43e2d888257137844de23661a06f4c01e8fd30b56f0aabf6fe98da37a740edcd98dab78455fb004cf2b6b0920fc480dc9a022007616adf1656ed8331c9b787957c0816c9ef0819c90fc504df1952f06198e0bb420a3e1c137c7748c1476082ef0929f8484cf0bd21051f85f9db7d61fd6d0b26f9feb0928fc6243f1056f23198e407c34a3e164b8e1e4a4172741ca6f6c361d53e5ed73ec147094496b1da1b9f1f3d0b987f61916c73083ee6fe115d04d20e917834c28748f465358db50fa61d3650e204ace8f458c8a2d38998b33c1ed6594ec2547e22a4ca27632a3f1956e55330c94f85957c2a06e3e99030b662829f0929f8348cc5b361599c8ee55ecf85ccbdcec0547e3eacca6762925f082bf92c4cf28b61259f8d497e29ace47330c92f87957c2ee61aaf84748df330955f0dabf2f998caaf8554f9029d603ef5eef5480d53efe4af4053ef2ed465edbd59ad753decea7cc3ddeea95c3ca1269da5aeebe10d0dc6a17db8c543183ecd32157af9c2490696b694f1a62865502b84953a2ed2b920778ab7742ed827d62ac40fdfc4fdf062ec936f937df2122ca2bd4311d12ed57d8d8f017f37127eb2f66598f0f75220fc728cd3fb149caec0bef601c5d7aec4bef621c5d7aec29cfc233227bf1afbe4c7649fbc06fbe427649fbc16cbe63f0d9bcd5f8749fe2cace4eb31c99f87957c035634f92264d1e4464ce52fc3aa7c1326f9abb0926fd649e6fdf95f2702234e7ffe2d18e56f4252de86b1f8362c8b5b3195bf0ba9f26d3ac17ca4c0f789088e3352e0764cf00f2105df8141fe312ce43b31c83f85847c974e306f3cfc3912bef1f06e8cc72f6179dc83f1f835248f7bb198fd5bc8987d9f4e306f5bf93d11c171da56eec720ff1116f20318e43f43427e1063f15748160fe92a9ebc5935b29a99b1d5aa6aaf4d5dd5f36f1d336dfdef1f51ff1bca826cb79a8cbe580df0615db0f3d0f9379160ff072fa93da213cc4fff17899dfcab7e623e500ff7ab47b154f2bf14a4928f61c2f912c861853f8ea50e918c90a9c3133ac9fcf98c8c70a3839fd409e693e0eb2422b8087793a730c175430a7e1a835c2f2ce4677492f95a11f5135139ce5a11cf622a3708abf27358646c98919ac8f8bcee03dc9f1a25c2e42b5cf00b18ecc62161bf88c16e1216f64bba0caf1f8fde0b58edcc34571946b059e54d7584b59958b30c9e89758ab12e111db08ce9652c056e9e8214f8152cf05b840dfc5731b55ba640edd730e1ad5220fc75ac64d93a43b3a8c564a6fac5a3fbb7e730bebcd90611c0ab65d00f11cb5fcc70eecf152bce7197e657f4e517dd9c842562453bcfb5b8e3af636a41db20c5dc37302bdbe8ac3cb2da4ab5e8981b41d788bf6788a8eb2edc5c2823e88cea27a7546f721cbd8d62b9e4912fee163912dd35d9b9dc687a9e04fe7c303d3049058c2f9cb152dc8d660a23ab9fb7bbd45ab04552dec448b7c5fc097ed1b529d779c7a5c5179b5de2f846b90873d7da02b9b1b45f5bef5dfc7aaafce92dccca763a2bc7f9ac84cc5d3ba7ca25c00b355e1f1d42f04ebcb802df0a62d9db9865ed7596ed9c50f84d109b299630b59848f890f3ee04b1ed1dccb60e3adb46f86c9b2d426795b48c9f6dac354bdec52ce9a8b3e4b834a767de3b7c1552354eaa08ecc65d11c0cb213bdc0a9e97548962064cf578012b7569db7b18f54e3aea13128a1bb398bb48a909a9dafb987d9d75f6cd22f42ab5658fbb44a75b1cf6363bf2d6ab4d45a87e8059dd4567f54e71adc6359d2f6c717756716d54b971ec62b5a909cd0f31bbbaeaecda2370c9cedd6024ba6ca793808d970c53124c269c3fc27874d3f1d8252d7936756efe3166f30e583925980f281f9e55bd242e0ce7a01e11c4b24f30cbbaeb2c1b8358a6961076cb266e555bd55a16ca585c14131a3475944f318b3275164d254c7d55a8ba4b15aa5da25267e96798a53d7496f275cf134f29a22d2814d75ceb3893e92294cb456d68b993e36e4aa1559f6356f54ca44e10fd5d5842582042a1dc7996c7c3957172bf6819a9b3ec0bccb25e3acb26d5987226562bc0d3d07875d66453ca2f311b7beb6c9c86fa242ff12e731e52b6baebcf4e71742a17e967fcb4442f33d539e15798ad7d74b61613d71e2ae5b6322b65ed60a1f0f692ea942735f5e164387d8d71eaabe3b4a0d66a59f10985e7f00dc6a19f8ec3c48071c38418f12d666196cec219012ddc4d78f45a24446ac3deef307bfbebec9d4fe8d9154994355241e07b8cc080549541d4068c5e0984deaa1f30ab06622d1441ad9a2a9e880d217f9a93b8dc20f6fd88d9374867df8e214a8e952237e20b1fabed1971ab0a629e0d62d34f984d838385993fed9920da13dcadda6af23ccadce367ccbe21987d41ea8caeadd36439c2bbcb7b3ce2970e535572fc05b36fa8cebede2c7eab6081439842cb5f312db3e3b7ed050985fca44281d2f77ec3ac1ea6b37a301ab70aaabbea611ab1a2ba3d9be78755dab25872edfbbf637ae7e8f41e5d638d6b86e81be4ad8fa562e7af296c8d58dc3db6fe1b2f0492af41fe81d9938b9520e3c7115e1b9e274a55159a7c3591be045e1a5991420bffc42ccc4ba48eacef1b98217c6f5f3113ac547a656df60ffc85d9381c6ba14aa41d20112b934b3192b7f46fccd2113a4ba727149afe9e1e371e2abb6b335cffc1ac1da9b376f71ac395b6659cbacdfc5f8cc6a860e5b1d8b2a5f2f735728b8de5e22dbc5c49d3cefc3fccbed13afb72909240cd7d023ccf992d9e766b87a9b3e03fcc82313a0bf25254a24c751ecfc7146badd8311525b209a2c5915f73ed517bc8c64b6782f5d6785f08627504b37aacceeac5290abb8a10d6a5874b06c665a7f8bd3fc979c334194753e50b412cad83593a4e67696e521ea0d220bec39dd73799ba14a82e66c3ce41fa55e3db3043b6b02d933d94fb694abaa96f41aa8759365e67d909d596d5eec8a27c21619d783ec8d8a27c79d5ed67a8ddd145f531f213b0b6ad6453c6f98e7670d767bc04a25b8522884d0d309b26ea6cda0b2d4be9f4702d9a22673ac5e66cd1619bcc1d2a2a0d312a937454562641c52d69ce96e38d4a44797353408b823d4bc5aa11c66ab28e55a161ac16b2e2ea92576e1c99d1cf05e1d318e33305cb4da1bf4f12dabba96e65540b64743c48ac060adf0a624313cc86a958ef1bf6553c444b4419001f6b90688a900a7b9b62f64ec3fa9513f19a9abc19b7aab67cb719c661ba8ec3a8507581e84dd829ac698e59334367cda2244255376226b1b0abad106e813199a963323b0926f14747d596dd2d31bb77d1d9bd2c895c6b9628f9af0e50964bad4f84cdd75b618466e9089d9654dc2f60c522852b13d6548a9c2d2c1f7dee8febc6d35d5eb7513db47c1a64b94897dd2ff1ed760bc518eab9e2ba5bb780e1495bdf6b8d85c36c6c1cad9e4bec7a05b5d59fde06b3684eb0dc156fbfd5f75724d2869bce76deb61887b93a0e0302705061aa36324f55cb7b3b4ce3793a8dfbc69403fdfd10dee8f4627195cfde4a4ddb6d7b4cd35d759a8e44d9c67a7ab4e665226ff346f951c4970e982df31399b189f5ea4d31ac47af2366653e36fb23583ae7963363efc6b64615387f97b178ed0bb152926b53ee84d95ca0b3b98f2f64fd6dc674b1a933a6e702ac470aeb034ca69d1b9315c4822e98050bb1762eaa565355df8937a21a7a60a2314fbd13844a578cca6e89cc88505f0c92aa789661312e35a94937ccb2dd7596ed59cbe11d249c938d013b6044f648646c48d0b256f8d101c9877d77ccd23d1349adb01637d70b46b0bc1aecd3a564fcad20166462162c4a7c1e33ff66909809edc3aea72a847a60f6ed85f5acc72fd1e4cb16c458fe93c4589ef238f1cb7b77aea8f3b9b5baf87d54c9e5f63d31ab172733c6ce0dd57ce7e165ccadbb2d67b5bd7e432fccc2bd1389797ac2c995136aaee13470fe45227c71a129428a3b62719d7887970a876639b722d9d539c390ea147f4854eee05de7df5fe384068f1305d569bbb7e30c26614986bb4699f8e917e1602b65861859c1fc8b374d12f24b657aa3bc758820e4cef3e62de9439c52608978cbbf970f66852e971b02f239685dcd362d4696958a441a488b942c87747f4e7a7bb374290fd51e32543386f2ea7b646092de54b31685fc6b75f43ed421862c8c1d3add5d017364eb4184cb755744ab51b27fc76abfe4c142802aefd5286e0188e23a719d843bb9cdeee5cc1dbe79702fc61ad4cbc8e6c4975162e18bab2e11f4e7898fe36b4bd880ed9dba1eb6e594d8f87a74934571b8cc01e70e2151593106b0c20a847cc90385b08812614be744d5f6a78bd66c2ea0509458f9689bb96cb515c06e6ce8012ba604d65644d5252c9b79131a6d06d7b289076e0525b8d61a705ce05ae7253ebfa34a5c2db202da52e6415b49098d172ae7c90286dbdc9b2f44955981e9996c0fd32aea48199d8a4d757ebb4bac1655cfb37323a70de0b29a7ae04a28c1b567bc36539170ee6903bcad20efdc87121e5fa478be838ef7fc4e92ad17bc57ba4a805c275beaca98dbfee3ae396403c07f067b005753a76e2a4b981bd5006a03a6ae5d3d4ca59498c470d1ead6b1059624fea37a7b78d650e26904bcc85b7cc706445bda7b88d652226a2c9279b7ffd14bd613b0ca00484ff4f420ada384545ff85185550585bacd3c3865d479dddceaf6093556c19dfd395f94bcaa181f255520f23db735df0680db4022be2f25c0862095e26af2f2bc0d805e68e5012aa74ec6e78afe526f05703b6a839b810f555097d65581532d39647b61b321286c56a62b02aa55ba6c00746e1b0f50152520be998baa444f611b85d555d5353f3e64b54878d77c113d8b4464e5130e6c80c87f14c4f59410f9beb2101e6fcbe7ab8f1657efd3556479f5ba2d68dddf4089b299cc1094bf6d92c58d05acc292a2eb992063d898aef62fde9c03c70fa9261d9b8ab57f34f0c06da2ce512138b884df04d122c6bbf4bdc50a6d80b719b4e8ef4709af29c851bd15e9dc75306d00b50d146df7a7ee649b2da2df6adf622a939dc7cbc5976c00c6072228609bd3db9e1f3d22b2c8b2f4ac14f44e1e40dfc9c68b12ee04249b0b1a4fd4f3a01d48ed6d53c4d0802af1716f15116fc78b0aa70c576249cbeb2700dc4194e09a83686a6b572e1f96a7601d4c3f70c01de3b34e88b1bb1e301678d921e9ea664b74b3201b006e1185dc06f57cc2fde3e5931fbd188c3a3eceb20573ebb46a6ead9bff468dbbe4c3118dd3fc50386e322be9f68dac1ad3b9ac8407b76405ee71cf4a72945b5642a5ceac900d165901862e66054a02b3122ecb6405cac0b3924a4fb20255b1b3021560b3121a84971568e45956e09aad4e677c104d564c6f5956dcea6096b6ff234bdb289b85f4e866c5192f9085741f64d5d08a949554c75616daa19a05463867693aeeb302b7e1672535cc242bcec8316fba827e9a41369fae70d8ffe73309b2f94c82c33904be6b32ff714b3a47509774b87fbb134778ee137f4988614e79c3a743d7181da2372057251a9d368da2ca3ccd1331309972cf4c303eeb489370e658897333c07994493873adc47932c0b9c5249c7956e2bc0ee03cda249cc3adc4f92cc0794c3a70ae448142f597b0d16c041dcea65438bb039cc79a8473949538ffc73c9cc7998473b895386f07388f3709679e95382f02384f3009e7482b717e05709e6812ce1156e27c19e03cc9249cc3acc4b908e03cd9249cb956e23c04e03cc5249c3956e25c0b709e4a89b39dc4b95c36c9f9974d72557797e4c9a603598f0a643628c06fa51ed7a99a9e13ed06e0cf978b67edab68ce061e7a1af5e4b67c7152266ae731a3d65307ab1515acb600d6e994b0ba33d889927827a2cd9e3810c03d837a2c68bc1624288e178bc85036a042391ea4966752a26c21518ef00175bbd7f84364f03a53c1bb1ff8e159e980372afdf0c83cef4d00ef6cea593eaaa3339f6967b9a60e572f2a5ced00ae732871f594be56ea3cc4d33bb7af7883f034bef17b62cbe713961c79672109e20b405a782e25e20e2c7e113c3a5b216d5a238bdebf017f3dcf2498232d84f93b8079be4930f32c84f9238079814930875b08f36700f3429360e65808f31b00f322936012f68b93c1fc0ec0bcd8249884452332989f0398979804d3c63af79700e6a526c11c6521cc3f00cccb4c8239da42987f039897d76ec39a2bcaddbf8230c524abaf5f0a2a935750a21cc0a2ebeba54ccd74801be305dbd09d14791b2ae4f701e45752af9db644ecfd50242733ac14f0ec6b496f0a22fc55b519e1a3b73921f4be2d54285f00de773525ca7e3111be50089b2a9b828b9de85d2cbc73bde8eba962f1762821854d96519501d8d7a4c36f13cbf56d44990592806b2951eea0490212ddd19014ed562ab4cb80975e57bb5e6a7b71aa0340793d35ca0962daeb3a39d98fefddc3fbd1d7ca09c06a0aa43bb1d4be3cbf2e88f037a46379ff61ceff35f2e385a2a8c4afdadc77791c4078633a108edcee103e0210de44bf918e3b40461d270815dcd9b1360f84790840bc997a5daf7ce6f6a1bb6a7278eb4535d3becca43dc0768b4933d04807569379e19e206fde66124ed291c064380f06386f350927e93875329c67009cb7998493745c0719ce9b00cedba95748744b8fd9dbd1a8b77e00df1de60c5db5b1b3620f80f2ce74a08403fd673955c16972859815ce4b1bd3518e244379282810dd45df8906dbcc97b0d502dd44b19acb6a296a2ae38bd694b29805032d1815dc0cc0bc3b1d0d6a95621dab8aea3e1eb5d48d3aea9a83732807c890a16d0da2fc3da6a21d6625dacb80d7de4b89b63f8beebee04b08563077d52c77d5bd15ce3fb59ad9f63bdaf812e0cbf7a563e042e2eb7690c1249b3d390d78effd26c1241c524306733280f98049300907c892c11c07603e68124cc2a1db6430f300cc874c824938a9800ce62400f3619360da387d7f0280f98849300907c892c11c02603e6a124cc2722619ccde00e66326c1249c5440063317c07cdc249884554e32984301cc27286166b2d8b6d060c36109f377b2e1b01b4005f3c9da1c19efeff8204c45c9ba3d7280af3e65124cc2fc9d0ce68e00e6d3e9e843e22df7ee6005beae7f9a86ce90e1eb09f03d4389af13c0173bca980bf35635b2b953ee1500f4d9740ce7cadeee86731d0b103e970e8423b63b845300c2e7cd2e0e11b66a9215874e00c5a117d235e0d0eb2e863d9ee41dc564bd44c7001f7dd19c791736ae9c3015a07c295db9784d5b0ad93c18762200fab2490b928eb6b2a9a33d482f5f3109e7282b71fe0abcf355937092ee7a4186f36680f3359370922e964286f32c80f37593708eb412e72700e71b26e11c6125ce2700ce374dc249badb1a19ce0280f32d9370926e0f4686737f80f36d9370926e5e47867325c0f90e75bd28b18d67e70bd5f8d6b784f5a2022aa03b01a0efa66395e25c5feb521a1ae5c8a6f06f00f0dea384d78525ba3a42f452298483657ea0827a3ba85abe6f2254c2f62432a8b701a81f98089570c02119d46200f54313a112e6f06450f702503f32112ae1601a32a8bb01a81f9b089570a00219d4f900ea272642251c4a4306750e80fa2925d45c16db87143d8d6b12f3b682770d89de587e0ee35d211bc427563bc1b09e158ba70a44895675a6107af618aa40a80b02e1b3ed21100863025920f095fc54207c6ece64701bb79bc807fefc0525ca81cc3f7dd11b1ee1cd134d6c20c504e7af72718dd47f1f8d10413f1e40ffd2dce9b8848377c9065abc0d9286afcc59d69a748122b2c4e10800f36b9360dab817cd2900e63726c1b4712f9a8301cc6f4d8269e388aac300ccef4c8269e35e341500e6f726c1b4712f9a4a00f3079360dab860f51e00e68f26c1b4712f9a3d01cc9f4c8269e35e34a702983f9b04d3c6e5ddb60298bf983d1dc2c6cd522682bafbaf94789b49bcee4a79a5a216efca2ea15cdead1e153806fcf2377a70eb9d074a444be814e732ef0f70db47edf3b86e00dcefe9de6822c8ca78f6b5162d0291f98f74cd25992ddadf57fbdae7273baf958b2fda3c97a40ff0d53f2981368f9b3a56d0a16b4c852e03a0fbab36a788d9bf744b7780f2ef74cc93cf63dbd33cf9bd00be7fccd8d9c8edeb2c131eebf662927ae65754689f0719cebf262daa4e5a0b27f3d46900e7ff4cc2996325ce8d00e77f26e1ccb512e7710027ab63104ed2ed9fc9709e0770464cc239dc4a9c8f039c1994387bb1d879f453d846c6c7e255316ff9ea7247395e439f2fc0ba7bc695a6a73ed48a0af20ea02855271d3e9bf8dc7a1bd7b1ed027cb6ae4938475989f32fe09df54cc239dc4a9cdb00cefa26e1ccb312e7d900670393708eb412e76700674393708eb012e7330067239370920ee822c3b900e06c6c12ce5c2b711e0070363109678e953857019c4d29717665b16df3dbef563e1d4171be19255635c39e57415d2165e96aa527ab5a3600f09a53c2837d977cad874a874499a30cdfd77da15cf5a148acfa506c75df650988e42d2881069b5564e3b8cd5d806fb6a444a90674a985aadd75489689c639f590edebdbae017ed92a5da9e4f6b26fec7400af3525bc7053ad080b45648367ae0368dba4239227366a73849553ad7a8314b3ad49306d9c6a3510c06c67124c1ba75a650298ed4d8269e354ab5e0066079360da38d5aa2b80d9d124983616d9bb01989d4c8269e354ab360066679360da38d5aa1d80d9c52498364eb51a0460763509a68d53ad060398ddd251331f99fe9a39d950d80798076f8774c01b9d7e786475efb700bcee94f0466aa2313ec98f47713ee58a77504c16aa2e171f2b636e4745be80be81b9c3bd4a983b94db5b3098b41b633655374667900c64d2a7a9ab347bd0e43b4c96b3e552a11562cd653e76cebe56f826c0b37ba4a3c12eb9d96e840529b2446321f0d39ee9e8e0482cefb7b1ea391c7869af747ba9be43b84064666b45f4e7e2d6d0a2255b39fc5ee0a5bd4d1ae64dba1c00597aba02e0ec6312ce1c2b711e0d70f6350967ae9538cf0638fb998433cf4a9c77039c59e918a75473b6b43d8c53ba0260ed9f8e4693c44686e458d902753e8039c0249836b640dd00600e3409a68d7df0a70398834c8269631ffcb900e6609360dad8077f048039c4249836f6c11f09600e3509a68d0d21870198d926c1b4b10ffe7000739849306dec833f04c0cc3109a68d7df0870298b926d5d34987ce92d5d3e7019c7926e1242d1e91e13c00e01c6e124ed2c98364384f013847988493741e3b19ceeb01ce9126e1245d65810ce78b00e7284a9cad25cee1ceff35f2e38562051bdb67145dc13c84a3d3b1f44fcdcdc493987f81bf346df2f40f55a3f1c3c04fc75042eec6a277d62a966b2bf12136ee8a4ad1c980670a2958b289af0702b03b5282cdf4812d15036f2a85186fe84dbcc2be8df5a65280776c6d8e1249db8e9d5ba8500e002877a244d943a09ce13c345f00e3ab20af97af7bdeba84ad16c0f998bde5cedfeefda98c8fc32b65846bca9395051a818c6c9c3953b66d8cf6a381afee4c89b26d0d2895a5a463ec8aa872fda700c6f1e9c89c62872f26bafb0661db3dd95e08e500ef0473a773137625938d0efd18a4a513d3910060f9be970010a6a36409c050e0a1932831f26d4ee6c91abd5af26286f04c1eededcbcb5b02ff9b5cbb79b92baa943a13ea4585f232e08353d21195b3aba37391a8dbabd91c76ef83f030f0c8a9d43d481c983b65a698b9abd8f047f7039363e68bbb7c6607e1ea4abb51c1dc19c09c968ee89d1da7c66e77f3ddab00e5f474b480e66d772da0e500e18c7434ce716f9c228a3b55428959ce2bcb45249f2be6c3f1485f21ca9aeeca74b62ea2361e809d69ce1c231b47d0e50394bba463826c9eaf586473de7d2080372b1d9d6e892fbc4f58a2245b00b5152851ce3609e7282b71fe04bc738e493849b73221c3790dc039d7249ca41bed90e13c09e09c6712ce9156e27c1fe0dcd5249ca4cb0191e1bc0fe09c6f124ed22df4c870ce0338f34dc249bae71b19ce4d006781493849c71d93e12c06381750e2543bb9f229aadbcf4eae7300be85260d3d1c46592327c3b904d48276330927e91441329c47019cbb9b8433d74a9c67029c7b988433cf4a9cdb00ce3d29713614028a9d6cc7edf9e192ed1b95591f64358b2871f563d88a746a4c863b96788df89bb7b95709915304606e5681a09686c15a73a9608f01b0f7b209366119940c766390102c4e47771bef2b9ac678ff0fef255a293adccaadee15da0cfc756f73c669dab87ccaeec01b9750a26cc7f8f8221e898b981a498c0d4da8b030c36a087c72a9a94309496bed6443091b021f2d34152d69731d19da8b81d72e4bc7acf6c4fad773ad5cf0e7250073b949306d1caef001805964124c1b17fc7901c02c3609a68d0bfebc0860ae3009a68d0bfe3c0b60ae3409a68d0bfe3c0f60ae3209a68d33d89e04304b4c8269e3823f4f0198fb9804d3c63afb8700e66a9360dab8e4e9a70066a9d9332c09eb4464332c2b41dd7d0d75fb52bca63a57f5116254326176548f0ae47300e45afac9ffd120dd8662ded0b196cd146df2657147871002261b1b52072404ebcc996a6063757334405966d2a8a5d19459149967f605517f5f93708eb212671380b3dc249cc3adc4793788ec1526e124dd73830ce7950067a54938475a89f37b80b3ca249ca45b9492e17c07e05c6f124ed24552c8702e073837988493b42e4f86f3048073a3493849778321c3b92fc0b98912273f516bcfd8d787de0260dacf24af1b4dd92344e6756d41f17c7f93708eb212e72fc03b379b8473b89538af05380f3009679e95384f07380f3409e7482b717e04701e6412ce1156e27c10e03cd8249cc3acc4b92bc0798849384987ce90e1dc0fe03cd4249ca45b8f91e15c01701e4689536d76abd681e71caa18effaf5affeee9ff946d8ad463657630228ce1f4e89b5af0feb32163b483bf1e1dc84a8c92aa24f00d447a46366d128b6bd2de4f73848048e4cc75403e5ad15c2ff78123055c22bd60e60b0779f8d4dc03b8f3267d2968d23906703945bcc9d1043385e892c0dbd07240047a76395c4613e5f4d43ea49066f0680778cd963e9088777938da55b07a2fdb1e928f0c3358f7551dceebcfe35e0adc751e2ecedcbeb4b199c86addfc06c9a7c396dbb16e552615e0abcf67873c6d5d938567937e0b127a4237d551ecb237e916ffaf6f657551d013cf5444abcdd7d78cb40063549a4ae6b63bcd7f6e2ffb100ee49262d2744da964ae6abd301ce934dc249daf84786733f80f314937092364d93e13c11e03cd5249ca4bda46438af0538b79a8493b40f9f0ce7d300e76926759c8ca65ca981ace3a407c079ba493847598993019c67988473b89538ef601ece334dc249ba8c2519ce4b01ceb34cc239d24a9c5f039c679b84738495385f0738cf310927e902d5643817039ce79a849374492b329c47029ce799849374bd6f329ceb00cef3d3316007362ceb5bed1732b7a59e8bca65a4ebd3ce8c1061ed04ca9f175062557b240cab8d3e50b236fa2c80efc2747420f30faf10115cc95e2b1fb10f5e0444e98b6a7fb5109577dbd7da3e1778e1c5a680b4b1db6214007989292009072f9081dc1f80bcd4149084ad976420ab00c8cb4c0149388a8e0ce4a300e4e5a680245cee870ce45d00e415a68024acd190817c1980bcd2149084a338c9403e06405e650a48c2114764205f0320af360524e19a9d64205f0520af3167f4bb8d4b464f0628afa544d954a05c2e06bbf28f7345f385b0320b3db00bf3b05d4789ad030b320e73b8955b3d34053e78bd49306ddceaa11980798349306d5c7bb31e8079a349306d9c68d508c0bcc9249836e6db1100f3669360dab8d5430680798b49306ddceae15f5034da66124c1bb77af80fc0bcd52498366ef5d01c44f3db4c8269e3f4a99600e6edd45db3de96b53324d012e765bec7257f8d0c1ed9dcdee6205adf4109af1bf3cf39d78fb52860e562143a5fb9850b5b43dbc3b8950aec4600f64e4ab0bd987f1aaa3bb3d75b70820be4232fe2477e1b73f8b520eadf95cec57d5ca07cae2f4f08266b5b35eddd94e41180f56e73e6f6da586c1a0692817bd2b1a6076c204e3c8525444b96c2de0cbcf4de7446fe124789858cef6f5dc5fccbf9a46d62ff162aaccf00acf7a563a4dbf0ed6898e06d20badf9f0e9fac39ba6f0f8357af043ef9403aea4b8975b30db3b2f25901603e68124c1b2b9feb01cc874c826963f75b0980f9b049306dec7e5b0d603e62124c1bbbdf5602988f9a04d3c6eeb75500e66326c1b4b1fb6d3980f9b849306dec7e2b02309f3009a68d8d738b01cc274d8269633bd2de00e65326ad15439a0591ad15b300e07cda249c3956e23c08e07cc6249cb956e23c0de07cd6249c7956e2bc11e07cce249ca4a3e7c870be02703e9f8e99e47c72c07ad0de9e96f589c9f0cd621ebe1728f1b5657cfbc542b9090917b5d6797c95f3f83ad150bc9f18b65022ceecc3580f607c9112a35ad595af9aed76f82e71d4ad70d4592e78f0f12013185f4097b7ba173a0278042f626a127fa58570f706705f4a47af65323b11e4505631c906dcf404a9e7cba6a225adbd93a1bd0a78ed2bd4296bbc7c5e594ada015c44d5d9f624f0d0572931666a3006dbee81b029996cbb877d01ded728f1361602d4d0afc9ce25172019b25e54c83a8088fdbab96926616730599af92e40fb0625da1e02ed7411a5e7333e24a158169e8a80972e61ab4500f0a8bfdcf9db153fd53972ef2db2b028d518007ed3ecd494b0ff9d2c353d09a4a66fa523cfc7862a4e120902f11e832554797e2ec0f8763adaea616d4a554dbdcaaaddb5a71e20cabf938e31f51066cd29acbd60e702b0ef5282553b61f2f1726bd8f6b413e62500e17be60cedb671b4d27c80f27d4a94cd9c9359a23cca05ac9579367f99b734d9579cef04c07d4009ae67001fcc67654248a593ca9431d52e5a419b9fafa6cacff3407efe2125e24eccbfe755a1a83d6d6f338d6e05403f4a471f52e29b8b10e2245be4b905c0f9b14938475989f30790a27e62124ed28503c8705e0d707e6a12ce3c2b719e08707e6612ce9156e27c0fe0fcdc249c23acc4792fc0f985493849477d92e1dc05e0fcd2249cb956e2ac0238bf3209678e95388b00ceaf29713661ccd7c65ec58a44a5d2be3ea2ce00da37e96876cb16bfdd231f6a93cfdcb64d7b5b2e570384df52226c2eac2916022689260cfe3a1f74582afcd03eef6b05d07d47898e273a539c3f791b5025b3bd91ad23c0f63db5c7f1f199eb9c9bbccbc1df52695f9f625780ee8774b491273671c5c649a805a09de7c774651dcb65ba57cc36ca6c230d3d363f50217c1478e34fe9e8e1e6088bab973953b76deff87a1a60fc39bd6388f4eb724c932fa46dc5985c2ab4bd00da5f4c1d9e455a5f212bfcd401e9e7afa6a2256da820437b2ef0dadfd29135e56c778309b201c2dfd331136818ab85994064e5cc0100df1fe9187495d8588c1c2b4763dc0060fe69124c1b8bed3702987f9904d3c6b5632e0430ff3609a68d6bc75c0f60fe63124c1bd78e391fc0fcd7249836ae1d730180f93f9360da38dcea3400f33f9360dab876cc790026ab6b104c1b57cfbc09c08c9804d3c6d533ef0430332861aa61aa41c65ed8d8bfdd1fb417d5a1049ac9c2ce36234c49c96aec3300deba9478eb3b27f3c547ab9c07087bbcc99ad75a83a85d8f1295eab618569d561689d6767700bfedabc53c0630d6a7c4187cdc3961ee4d963ef60111b8814938475989b33ec0d9d0249ca4db8291e1bc0b44f64626e1ccb312e7e500676393708eb412e7b700671393708eb012e71b0067539370922e6442867319c0d9cc249cb956e23c0ae06c6e124ed25623329c6500670b4a9c6a53a51c5feddce66106eb01bc9694f0d47c713e026e32e3c3a6cbd83c562cab94ee2cf16221b05008802b6856309bc7a70f06885ba523ba63913d767971c26638329c5341bda8b54938497b83c870ee0370b6310927e99c32329cc7009c6d4dc2493abd990ce73900673b9370924ebe27c3793fc0d99e1267770d4efd50ed5d1d4685e233e5e2bedbb04c08f7cd08d5582400b783c970097b87c8e05e04e07634192ee1582532b81703b89d4c864b3876890cee55006e6793e1128eff24837b3580dbc564b884e341c9e05e03e07635a99d6a34254eb276aa1d00ce6e26e11c6525ce7f98877307937092ee3c4486f35680b3bb493849f7c522c3790ec0996912ce9156e2fc02e0ec6112ce1156e27c0ee0ec69124ed21d2fc970ee0e70f6320927e9168d64380f02387b9b8493745a1719ce7d00ce3e9438fb33ff7ac5bc9bafc8e1c1d75f50767a8b5ec08fc14f4d70fe2a17639a491b029b6510017f0914f4fb52026fc7e24f63884e59c940b6a2f2dc41c073fb990292d023c94066029059a680246ccc2303793c00d9df1490844dce6420470290034c014998bb9381fc13801c680a48c2a664329067029083284166fb8a4955e8f23ff80257939c27d638faac1367dcd434159afea16a6c7e08149a0653e257733f13ede9271c1249d6cf3f09c01c62124cc289b46430a70098434d8269e30894e10066b6493009eb476430470298c34c8249582225833906c0cc310926613d890ce68e0066ae4930094ba66430c702987926c124ac2f91c1dc09c01c6e124cc28501c9608e03304798049370614032983b0398232961e25bdb4e757e97088c458ebdeb8460fbb7b62d641ed8519460bb0ab0b39c07968b594c7069965adb7d9d6cc1960600eb684aacc196f2b77119cb5920ea8fa144196e296ac2fc9e6cad9c5b8097ee988e2c0a6b1f8df6d291562e6a9903fc74ac49306d5c87710880b99349306d5c87711880398e12667d21a0520cf1ae721eb5afa3a30d481177a64495a9c9b783ad6347984692158bd6004f1c4f89b70df38af1eb45319dcf9d5f268aef695a9a6d0b15c452e0a3132821f608eda3c3acf4d20781974e341d3061ee4e06f854007892e9806d5c2f742b003c9912b01a250a9b4bb03a3e79230919cefe20c59d928e2a68acbf265209b57137a45d81a74e4d47434962057d1b37021801bc745a3ada48936928211ce440e6a36700b0d34d054b3814870cecc900ec0c53c112260564606702b0334d054b583520033b1680ddc554b084255632b0a300d859a682b5b180d517809d6d2a58c22e6932b05b00d839a682251c384106f6700076aea9606decee5b0ac0ce33152c61173519d82500ecae946007b2e8e9115c0c6fd22e13af54b279ceb182c15d48f45324163277df6ffe562e6dc636334204fd72d072309f12bada047838ab854d80c97cf668e0b3f9e634bcd8b835db4280b2201dadad898fdbb771824e2188d80b4cc249ba043c19ce2d00e7429370926e504086f32c807337937092ee954386f30e8073774a9c358d92f6b7ffdb3804ed1e00730f9360dad89df20080b9a749306d1ccf770b80b9c82498368ee7bb53c06c50cf277c6a8cf0492283e059c4f2ea2a6185737d1a2b16d5400e62b9733e4bd4d22bd95207c722e75fb01058ecfcd35d8f884d61a6b08dd5d5533e7582cb5ee3dce59a55b06c5ea3dd8b3b4433e91059a2c230c161ceaba77c2f52fef54d2c9fb9fba1cc757eaba91855024996d88a739e738d8f392c165f58eb68b28a950b8ba3f74bc98a34149c8a9dba9c4b8003cc92baae67ee8a01336455a5c4b1b990b915e52c817b9ecc76b322cdc0991a5b3643b46e5408ad1a88ef70bf2c13f72aaabfcd49943947ae197fb229b8eaba03d7ccad6b66451a3335aa92339ccc8ae5a80af7bd298e7c6e83fbce04114aa5422ad74f85ac0a6f78bf89d01f0e79e1ab2d704adcb9229156d29f38cbd9221c0a9dfb85e258506df150be105184f73dbb6d3c43aa5b7786c89518d6c83375bd6699dc9be24b5bcc5d26a24f434a53160f6ab2c80bab1562e64ab1903aa3464b13b00f8d534de384ca50be9dce766dffde3cdc65b00b37ed20dc788113f2aef06227812877fee64a1db22683d5fb7ff0d65cac250b0400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: + - _maxEventsPerSecond: 5 + _name: RPC_SetAudioProperties + _parameters: [] + - _maxEventsPerSecond: 5 + _name: RPC_ClearAudioProperties + _parameters: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/8b1e586bb6b844648bb575b1628cd394.asset.meta b/Assets/SerializedUdonPrograms/8b1e586bb6b844648bb575b1628cd394.asset.meta new file mode 100644 index 0000000..3861fcd --- /dev/null +++ b/Assets/SerializedUdonPrograms/8b1e586bb6b844648bb575b1628cd394.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 249d5d5bdd0128f48b565c0571a1bb9d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/8d084610c92d9a24cb1811678b5a80c0.asset b/Assets/SerializedUdonPrograms/8d084610c92d9a24cb1811678b5a80c0.asset new file mode 100644 index 0000000..a750e8c --- /dev/null +++ b/Assets/SerializedUdonPrograms/8d084610c92d9a24cb1811678b5a80c0.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 8d084610c92d9a24cb1811678b5a80c0 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e7525c5a5c5a28a1582892108255d02069b142a05e0824404a9026c1eaeeee5eeaeeeeeeeeeeeed4f5d7be3bb333d967f7e6b9dbbdcd7399e9fba79fb2ecedee33cf7ce7197f6626279f397f12039dbfe6b2596c021bcce6b072b6822d77fe35c1b92e73fe73efd4ef3359b5735decfc5de63c1bc872d37cc9fff44b7471fe2e71ee6a58adf3e52ab6d0b9568ae7b35985f3ef12e7db0ae78effbac8f9bfc2792bd1c8f9680e2b6633d874d639d1318d88b9e2a31af95b82c72bd1ccf97b3c5be73cad104af140f2c5a3cece5fb39d2735e2d9324769f5deae6c7711ad65ceb385ce37d5acca91b940486cf64d0913ff60eea5bbbc6e2eafdd9cff9bcb7f6f24ffdd4cfe1bbedf585e7b847c3f177cd71cfc9b135a9fe2fb9eee35b1d0b936612c675370cfbffd46beb7852b2f67490a59bde5b58fbcf69532370ba17f5379ed9726bea964e4015961983593d72de5b5bfd4b75b86e10f741925ce05f238cb72a0cf9620ece6e039ff6d408cb8ab74ac08a463859b8e3967caf4fb44be3f485ef3e575b094edbcd3fe44f95b81bcf64aa3d710f73b36927936eb84b9d14a795f28af43e5b548eab658eada1ddcc7d545a5e9302973910c6373cdefea7dfebc87bc1f2eaf2302e93552be972bef4785d4278cfd299d96c8307a827b8763a3f92964a9772b03e95e29bf3dd1e5d8e88e407c80fd69e56e25e56d11221e5bbb618c3e52de6fe3de6ffd4c886fb795faee29c3eb05ee1dfd1b2b1b0aab7723f99db29bd12c7db9a574192baf63e4751cabb3c3d15fc8dfc6cbb8a9b8b693fa2e95faf706f78e1e4db691ef4d70bf1ba5e414079eebf49a28af9de475b2a7cfc04742c4a7c47db7f91479bf9d0cf312f7f7262a7d54de9a9286adb2b52ae6b7b52a29f76f576e53550f6cefde2754b9dc0fc8e1dff709c85d1690bbcc95dbb496f9f35c3a3da7caeb0c799d25af3b80f4fc5bfe365d5e67ca3097337f99b45c3e9fe67ddb69df88dc52a5d16ce6b74f65ff2bd2c854df97ca6bf390efab77e6c4d079aebcb60819660b79dd3146982d5d5b687e60c016b64b237327976ff3464007e7df2d5ac9fb9de5751779dd55f2af0ed84175083b48a7cb6eee77cd54d93447eab25edeef2eaf7bf87561f3023af5ad3f9d122ba5cc7ee09e5ff762fef26c2fa9eb076e382d95ddcd97d7b280ce0be874660bddef5aab7656cb90dfa5b2af72377e2d1f90f153eda48a806e733dbd9bbd02be557a84c90fb29d93a80d30ae757568a5d82e09bc9707eef9b5c60b4ffc9b7fab6cab27f89d7fdb1fdcf3e78b42eaba274bb6592e6735087bb50c5b96ffad73e5bb4b5972ded37dcbafabc06fab5c79adabe477552cb91e53eff1b86d09eef9f3ca90715ba6d18f87fb428a6f557da0ca9f52600ff3e56f2ba43e6b983f6fad91cff3bc6f122a8e2bddfb364a97bde4376b0197b5ae7e1babb69cca4bab99be9ead051c647e64abbcb0bba936444d8ab07e96ef28dd55bccb3d392daf70af9bac97cfd6327f9e09becb7f5b27affbc9eb81f27a80f7eeb843e56faa7cd85feab68ef9ca66b60ff89d5ff796cf07807bfedede9eec8eb7c8df0e0ae8aa4bcf830371d79501a9ecec10f7ddb1c5f2fe50976d1bd95f6c531ad0612f96da7e0f73bf1baaeab0c3437e974ac7a35c99757d92a3e5f51879dd01c896fde3c43e1e87baf6d491e019bf97ed2a7604f3d503297539565e5ba7894f77f01ebf1e1723fea99e359157590626f665fe7edabe6e7ab66b9642d6492ea72eaa0c3bd9fda67d17797f8afbbcadaa4b4e0571e261ece7b16ea3f2d069f2d9fe20de47c8df0e00bf9d207f3bd0fb2da1f2dde981f41918787e0690a17b7e26d041f7fc2cf9fb2057f7f6aa2d7f76202e4704743d80f9f2303b2739aee21d18f6e0086929db0e8983026979904c9754f9fa3c7d5a76506d86f303697941202d0fd6a4e57af9ec10906e323e894335e97b18e0a0caa70b91b454cf2f027275cf2f063ae89e5fe24fcb8e63e5ef97226909f587697959725c138706c256e352a9d2528577b9bceada9457ca6b81945b1042ee55f2ba770ab93d03728784907b8dbc5e9d42eeb588be9984a76c5d8d2f1dcefcb6ceef1dbbedf4400a59d731adad77566da4eb99dfd66f607e5b3f8225dbfa8df2d9915efa0b16fcb7a358b2ad1f0dec44d9d64de01d68abeaf9cd40aeeef92d4007ddf35b99cfd6bbc8e7ec36a6b775a83fb4f5db93e32ade8161abf1d15469794780b3e27b0cf3f7218e71d3a78bd24fb5594e66a9ebc63b5df91354f97c979477ac943f14dcf3eb7181708f73c3edca5c397c0847c869257fefe2fedef50df9fbdd323c652ff7c8f7c606debbd7bd2f3e50dedf1fe0ff40c0564ef0ecad2e2ef78167306e27327f9be441f9fb4920ad4e04bfc1b452f9321dd787e4f5e100bfe3a5bc2270cfdf7bd4d3bf58b5cfd5f558ef59dba240fab6027a3ca6b715a12b48b3c86d2415e7c7d3c4394a99a474ea09ee1d3bd8ac3485aca7e53b6b53bcf3acbc3e27af72ac33710af3f70d4e91cf9f97f7a7069eab76d8d51efb4ead801e4a36ff665888f8bf28af2fc9ab2c4713a731ff78936cdb69eb884cdbb1993e53e30da7fbed47dc3be9d0bd03f3db221897d0ca7d595e551b4bf6db13670418a8b667aab1a27461a5885742b54dfb817bfefc55797fa67c2ee78412e704de976d52f69abc3f3bf0fe7981f7cf93efbf2eefcff5bfcfde0072f8fd9b5edc12b29dcdde02bfa9f1afb73d3e3d547bfc7c7fd8ec1de6efdfa93edc05f2bd11e03bc8403d97737b89f581385d28ef47817b7ebd2820777d80d54501b91707f47d575e3f90d7f7bd384e1e08be013cd97b7e99296dfa4d2943b569b702f78e4df748d5fe57df5e2aaf9749195b837b47466e2b57dfdc5c5c56e2f200bf4bc1effc7a857cbe0db8e7b26b53e8f7967cf7ca40dcae94dfde10e25bd9064e5c1d88dbd552c617326e7fa790f5a1bc7e14484365b35cdeb59a74556de0f7e4fd3552876dc1bda3434f55367fccf4b67d55e0fbd1feefb75036a9fa6d9f0674bb8ef9c7993e97573587a7b149f66540f7ebbd77eaf4fb2ca0dff501bd6f90e18e017aa8dff9f546e6afa3647b9a7d25ef6f0a3c576d65ddbc7aaa3cf2b5fb6e1fa5f7372eb75e6a8cf25bf7796f950edfc9eb2816beafd5565ebf97bade2cbf1d0bee7998e529644919895be4b7e3e4ef6a5cf856cfeec4bfd5bbfc7a1bf3b73f6e73c3eb3d25205b7d77bb7c7f3cb8e7d73b98bf6ebc43cac9f5bf17ecd729b975ed21d5efd8dc65db2b4c3a7596d70d2c755da8de57fe38dfa5793f958c1f80ac3061fe88d8ca377e6e91f5f899696db4cf91f277558eff22afbfca6baa36c54f69e2f41b1297609ffd77e4bd60fe181532dc541cfe647e9bbf93f9edfa4e974b3f9577ff9257557eff4fbef720f3b7c11e0cc1eb8f347a07f3f85dcc9fc7ef92baad97effd23afffcae78c5eb7c4ddcc5f76fc097ee7d77be4f309e0ded1394ffac72512f29ae34f07c1957f571c783e0c84a3799e50ed03e67f5ea7ef437e7debe49e1b78aee4360ac8572c27d6234b6583d25f25712ff3b75dee75996da9eab1c62cd9f7c179debfd8fdbd7f55c4f0952fce7dcc5f16df27c3bd42a367f3c06f5dc16fed02721ff69e259a306f7c08be23fd18138fcae793c03dbf3e227f9f2cbf6b2f7f7f4cfe3e05bca77ee7ef7596cf4be4efb2bc4b34f7cba9f3539373a475654b2a760eeb01aafc541cba04586eef6759f77e18f9fcbb164c5b4e0f507e372d59b832b5ad5fcfc4fdcc5f1fdf2faf0f046ce00119de7a379c81aaad25fbf209398794d89879f90e86a3f2cb18705f5ff9a58bc60e816d2636f1c74dd4bd32ccde6f049e61754b3a5d52d52dca56954d3c1eb089c75db683ba05c29c94264c2557d5594f307f9df584942be7bb136de4fbc13aeb59e6af17d4d84faab449a75bb0ce7a92f9ebac275ddd06cb71aa847a3f586711ea96788af9ebacc9e0777e7d9af9eb2c396e96bf5edeab324b951d589da59e0f03e1689ea7adb39ef3eb5b27f7dcc0f3609da5e42b9613c17d4c96890e4c5b2ee5cb3e9e585310a65c82794485d7d6ff2ca1c6095559d509fc8ee56bf50ccbd7e96c25d5f897cacfcf337f59f9bccba0e0195797216a8c46f965cafe434295a12f32bf8dab31ce14e9225657a4d25b95012f48d99b827b47b7214ba46eb27d9f50614b3fef440f3add143731c9a1cae85c79557a7795ef20f571daf8a74ab75ef22a7db3137dbcb84c56fe17bd5d4e85d2ffbbf09214f1e9ebbed367be7ce727f9ad4cffc20df23d35e6a7fc8c228e4d27fa336d5e1baac6fa954d1f9e86bf2aa754b932d0d3638a2a33d4fc9bea57bfc4fc75cb4b6ed84572ec3a21db71093567cde4f5b580fdbc96de7ed2e95f572ea87aef65e62f17e4f878e215e6cf97af489dcbdd708b543b5ace95270ae2eb96906b3986cb344e14ca30df707f1fc622ca536b3e549afde9e9d657b5fbff90efbeeac912ff76c21d365386abecba28204fe7133f2985bc0722da9ab21f35461f27dd53b5b1942dbc0e6428fb7e83f9ebcdd7c1effcfa26f3dbf69b6e5c475e1190a3be7b2b606f6accf7ed80bdbdedca19fe8a1bdf1163e5ef6a4c7f6440ee3bcc9f57de49cf4cd8572a668acbbb202ddf0d84abc6fd7b827b1eff0303f157dfbd8fc4ff7d79fd403e9f0aee1d7923e41cca884fdcebc89de47355a66f15088705b8f4ad3f2e2a8cbaf2ed5de61b371ca1daa5af07de7bddffde70b5fe84c0fe465d129093cefeb60ee83830f05c8dff6fa37f9e34b69a26ee23ef91cf55faa5b3c554f9373856f0119025c767131f031b1ecdf4e307aa7ff929f38f1fc8b989c427f2f769e09e5f3f63fef1838fc1effcfaa17c3e1ddcf3eb5879fd5c3e9f01ee9d34dc6a83df2ec5baa5548cd45a25308e5217d617320cd5e757f6d41c3ce7df626318e9c24e953e6a8e1a8ef97404e913660cbb139015485b212b8c0cd58efd92f9cbda2f5ddedbf0f4706c739bf5f2779547541f4ee531d5befd96f9cb966f653861e77a94bcaf98bf9dfd95d4e70557c6b6aa3c517db349fef8e8d6562526fa75ae5b631553e7c4647fd875e5c6d7cc9f67be965735c7b003b8e7dfebda22df03d961d253b5f3555fee3be61ff3fccee5385ae54b752d8918e7edfce1445e0ba8dadcaa2cfc9ef9cbecefa59ecff8df13df85e1a07ba6786f607e5bdfe0863546fabf8f51b6b53db0935475dfb480fc1fa4fc59e09e3fd7ac2548a8f26f07bf0cdfdcb45a67f0a3f77dddfcae9ad79de93d9ba27cc4a682eff855ad3f9cc97cf61eb9bf378b697d30c72a3f79553e423f611d37b9d630e87337f69588724a99cf272f3197f97cf212728d509d4f9e5af7f3939f4342b59f7ef6c213efa8dff8bb417fbb34ba697f537ee2bf04ecf01737fee36e9136f24ec00ef74f1d967a2ff12b784f85f51bf84d8d21fe0ee2f91bf88d5fff90bacd06f78e6e134606e4aaf9a2521036bffe257f9f03eef977aa5df7b77cde2d20ef1fa0d3df6e98e3559b62e740186a5c7080cb6bbcd27d7bf0bc39d053fda664a86f41f84cf9f94b1b1ab7c11f66ba34d0a68b5acb795706dffecb7c7e4809399ecba7cda0ed887b9e3e1b5cbd8bd59890b2d37bd2d88e1a2796eb25731252fe7070cf9fef06e4f1e73b468b4f4e8e3f3e3939fe70857cfe3c95cf949abb92eb53731ac96f7602f7fcaabee5efca35ac398dbddf72944e6aee6c9cdf4673c0be1d394dc1bbfcda8cf9ea2b71ef843b694340b6faae39f3f53172945e722d6d4e0bf95cadff95793407ace1cc69017ee3d756f29b5dc0bda3c344e98330e90924acd6ccd72ec9691d087363f97c5770cfe3b6affffd9c4de47bbb817bc518cad93d2027a0574e1b104735a7f2486a7b555c55bb40dc83bed444653fdf8793a7fd4df5bfe7cb30da06b8a971b3f7a2cb1663a45c463be6cfc7ed5c46939f40dedb03dcf3e7bd33085bb51d547ab767beb92471efe83045ad955365b6da0f86b73196f8658967300f85d5458691d3417ebf15b8e73a7c20df5365fa8cd4f155f21265f22ad799e67494f2e7817b7eede4d73b47b5675519a0e6b9bb817b47af921b0272ba04e4a8f257d96757f97c7ee0bbae205efc7999cbb7e491407cd2c4dbff5be38498ab9ac22a58195bc9f24521db9f85df324b7d997eb32c519e8bda87f15db378b0b56c9df369856ec7aa39623fac5a3694156a77acea2ae6bf55e813c4df65ce1b9542e8829ca420ee4c0a822b57e5fc5701b6dbaa717e9f2c76ebe21b6e553a4f06b3a9ce957f359f0d61bb3afff9a5cc7582ad62ab9cbb52e7ef9542de7c47ede437d345896fcd15fc669623d3dd396c99f38b02bad2b9af121ace167faf169a5608ed4b9cdf6ac53e66cbd96236deb9ae15a125c7bddaf9b72ecc52894cafa37e0331ec77779b32954cc54e6cb8f6f9c216ff2f451a224538fa260b643e6c942f5a404727a5c4ff31740b19de4029913286086409df6f852c5fb4616625118c1ec7e418eaeddbe53d9c15a58c8b9e0c4feecd440cbc145ed4618f6e0bcf1a7e48637fd486b27cd184ed96266aa9c0727979c25b204a141a376e54c0150de24fe8f08be6ddec2ce277dfab14ef454f8026a2f2f3278098062d754ab599a0f29c2394af12aa0523c3552813a2a7894a6f895027d593a4b42de08a3415c9935cf9a68b22964039ba0412e377a50d923fb0ed2e532751b3ba587849942f5a545d5218321696686ae5c8f696ca6af7dc3a6379e9495f7dd2589f2e2d44ba64121a96321be952a645b6b34efaba2255bab4ac8b97972efc8f9e612bc4b6d3e980116ca423d832dbb6cd9fad1052ca9c77a333e41df201c1e2470f7063c408d3ab80216cac4158c0116ea2d18a356e1ed08a2b84486ea24b9c560d53316766dc7c34a373004163d4b8dba6ac57a39a76531d3d3174339f949eea2fce763a06db3bcfca9cf72b44e393ff3ed39158e684cde58d1321787d4cff17a9c9f2f18f4141b25aaaed05d5dea0f71b57338c78330df1026eaf1d346620cab86066688b6786e65836eb18379bb5c024778a2bb92526b9735cc9ad30c95de24a6eadcb36c20b7fb7ac641b6f9845fd6bbcf3ed122732ab45df7995f3bd6e58267576e91a3abb6c2ab24b2ed30d1645d308cb261bebd28effb8994ec960d26d8a27dd2698e06e3105b7c1acad7b5c6b6babb336118fa5a4d636c7f9cd1d549b289eaa9e8692b942dcf3d0549b34d517dcc2a689cdea57095d52dbe2e64cd3121788798f895633eea6d284c93f4d91867aaec802f4ca6019a41d66c73d63da717b9db50913cc6e57dbed837239d19b54dcc9bc47725d3a469f94bd18d6174ead0396341d7449c32b23debe0856f1ff3a7fa254f11d75c9d32edbc9532c8af40519260f9fafeaa969eaf03ffa24ea8b24513a3db024ea842551bf7a48a2ce3ae13c89f252c53b18405f3c802e98f6fdeb41fbae98f02deb41f8a658a9352066a9b5192678604cc1dd301c833438b409990247779d70ded41ecc92073cb4ac5be1c237c734cfd7687edf76399134efa113ce5b3bdc9724566b2717933c24aee49e1ac9f9a2ba3b28a960a16db5eb2754278bb3872ad80ca7e0da93b93361c98d0835a336cbb92e125af0df17ca02307558a98be542a6697389ca6c220b3f2d4c1f0bbe3c2747540b45a25ae099056b52e9b489de04d3574ac344e866b1c12abc2db09266b8a6a47943578ca528697a61597644dc2cdb5b279967d9911a5b2de0b6cafd415b88f23c299c6178387d744583686aeddda045833baac7e52d12933aaebce98c9f0cb64698ea52c780574bc32975dea976c2a890461ea730e03e36dd038013ccfda3cf0e5b8bec303a4476a08c159601faea2c890f7f72a7f7a46939dec29ac5663a92e7896cb897f899537253b752bc5ac9f616536eaebb4292bd35c5edad9f4e1b3eaac4970ba56daeb4c705e7618247c714dc1fcbe363e2e6f12d759279693396c56f610dc0d41e1757ed8158893a5e53a2fe9d8856a20ec2844fd008bf27279af0c15856280e632329ac3a1f133c5197c7fa88e8f099a45ce7ff15ce17bcff5626727faea80cbdd220d7c9eb95cebf78853d10bcbfc279c3750f8aa26701661493e21ac5102cdd266bd2ede788e95688099fa2113e65a368c287626957a24b3b1e4f5e6f2c178e066edde62f0d7385a356aef0cd5b256644ca45cad58874cd65fb38a9b09f73ad75dece15f5409578962b0ecaac16656d94342dc2f4df4ea77f0ba0ff4ca06194108761e5d6f69a722b11b1dc1aae13ce8be7a90c69f8f00546d11b3e23306cd375d8ba8bbcbc56b45c5789f7670b03a8a86b2b97d753053952a357be18b559ce1ab241c67b0bdc93b146fcdb6ba2f0b03daf99380d2feec41b6c78a93ffa861777ffcd130b81b3a13dd6c01a8515aa3b680ad5449442752b2c2fccc2f2c2ec8cf2c2d658f95aaa2bbc1b452b5fb7c184cfd1086fd4389af06d75b9450c43ae6cd0dc829705b3846c5e66c4efaaf065581b05c72dc4186951883c515f3a0e10dbe8d588239c5d7235bc1ae053f20bc059cd2e7c9199f5b97947919bb3a93996a3476326bb93c6644f8c68b26374262bc69eab1bd4648b85846c98edce3ab31503e4c343247e7dead943b8ead788eaa05c56076ea5d343ec71582d2afc0ae7775e65c0e703c41e84bca53749f05e26c8f3f895891e3b66e4bb0823cf763c31431f8b19faae1a437f21a2a18fd309e786be9b26fd0b3615d0099323a8f92eb8e6e3312cbb6bb07c1011cb044cf81e1ae15d9a44135eac13ced1cd63313b781331b5e76bd49e1f51ed4998da6571d59eac93dc8ab9472cc61d639982a9bd30aeda2518ed720ded6323d2de0e53bb22aedadb636a2fd2a8ddaa6934b5a762c2176b84bf1351f8349d70deaee14b39e30c0d4dc70457324d3f930ffbab0182858121a205ac020cfc948b5fd6397f5739bf2d142272c5aa25e5a61945cb1918db3d356cd747643b1343b03426db1d7482b9795685119c62ee7b964e30ef782d6348c78b77cea377bc6663d85768b017348b86bd14cbe62be366f33998e4bde24a9e8b49ae8e2b79474c724d5cc93b618958ab49c4139b474bc49d31e1ab34c23f89287c172c63aed6954d7d189f3cf0fa78eeb88937a059e694f2b5a2e4c97504b84dd672dfc0281fecac94a36551f2f9ae989e6b747aba8ba4b933babb32ac5a7c53ee94714b2385ba1b867ead067db716d1d0ef8e095fa711be36a2f03d305e7beb78754993aee5c287d9fb7588f36b148ef3306df6d169c36fbd748b12ce7c0ce9be1aa4035b46435a8645623f5d24da31558d6fe5209b2e46facbe402efd5a21a8f8e7101a6c1fe3a0d78c936b5ae613033c366c1420ce9011aa4e51191966325f281714be40a4ced8374856644b517616a1f1c57edc53ac9bcd57108435a1d87b24c5a1d4bb0700ec3c2393ca3702a315247c425b52796c0476a12f88556d112782926fc288df056ada309afc2841fad115e1a51f8324cf8311ae1d74414be1c137eac46f8cf1185afc0841fa7119eb77134e12b31e1c76b848f8c287c2fccc84f886be4d598da276ad4be24a2da3598da27c555bb5623395f782967d34f3fe8f618cd4f9fefd9186e41183f9156e79f9f2e7c6c4476952e5d780d7daa4ea50855f96acc9a4ed358536d446b5a83093f5d23fc9b88c2d762c2cfd008efb24934e1eb30e1676a84af8f287c6f2c31cf8a9998fb6082f961b4496dc181c23a57883cc69bf31562ef92e5e25fcbc5fe5115c263a54cd8be37e0a43c56f86638b9d27aaba54d5739e4063bbf46d17a5f4ceb73745a73970b3e07e2b59bddaea4db0dd13914e7b27eb2d5dd2f925efb613670aec6068a23dac0fe58a4cf8b690307e8ca59b168a392b49cc51cc84bc5640bdfbc6a91b09465f5bc30f2fcd065f205a24ce69e8474ba62e5f781bae4e66debf50c695b5fe8fcdf82ab1ca96d7d1066b317696cf69188367b3026fc628df02f220a3f04137e8946788736d1841faa13ce9b3597b298cd9ac330b52fd3a85d1e51edc331b52f8fabf61158f17345cce2e7484cf095bac2dc9d5356234aeee0c7ee11ab8fa3b014b84a930277444c81a331e1576b846f8828fc18ac50b8062b14f8a1dad13bdcc7eac2e1c6715d98c44e311f721c26f8fa98828fc7ace88698e6790226f8c698824fd409e669cfcfed0e4e2873015126944fc2acf0668d15766917cd0a4fc60a995be21632a7606adfaa517b6444b54fc584dfa611be5b44e1a76139f3762c67de9151ce3c1d3347be21685269c9c399e7fcc7c7cef9ecee6236533440b883f85af164a568acf3267014db3d03d3e22e9d16edebb42870fe5ec6dcd901d79f26731dcec474b85ba7433ba9c350e7ff85a239cabf59ebfc9db90667611adca3d3a019480bbe7c8b3718a384763666bef76acc37af7d34f33d0733dffb30f3bd3f23f33d172bf41ed0147a1b452cf4cec3083da821f4494442e763c21fd2086fd4219af00b30e10febd236a2f0f558da3e82a5eda319a5ed855876782c55d15458cf45d34598168fa72e9a86d463d17431a6c313a98aa6a27a2c9a2ec13478325dd1b4a3082fda52934b31f37d4a63be3f4734dfcb30f37d1a33df673232dfcb3164fcbce1380dbd2b303acf69e81cd8311a9d2b313acf63745ec888ce5558245ed444e28d8891b81a43ff524cf4d7605abfacd1baa05334adafc5d0bf82a17f3523f4d76191784d1389172246e27a4cf8eb1ae11b220abf0113fe86467887ced184df88e17f13c3ff5646f86fc28c939f938a566b43ebb95abb19d3e21d9d165eb556588fd5da2d980eefea7450d5dab07aacd66ec534784fa74173e6556b13c594c38a886e2bb76106fcbec6803f8868c0b7eb84f394fb0033e00f3332e03bb0487ca489c44e5da245e24e4cf8c71ae17744147e1796dc9fb078f5c2dd98d69f6ab4ceeb1a4deb7b74c2f9f0083f9435d6f0c8bd98da9f6bd49e1951edfb74c239c32f74798b4ffba7764c2b755e5d295cc7168b72a75af86dbacbf7cac594df4ce66e84ed2e5a2f737e2d17cbd997887b556e96b10572426e889890530bded731774fd45c3121ee9e71922b2663cae536084bc52f35e2ad0a20593fe55729a72ee1246154ffd2fbb104fa529340f32326d00398f0af34c20f8d28fc41ac30fa1a2b8cbec9a8307a088bc4b73a429b468bc4c398f0ef34c28b230a7f44279c67d6efc314462986ae1fd508ce17fbda35ccfc6bf2765af53bffba41c74b3bffca4f744d3dff1a5f576cfef531cc967ed4e5b688b6f4385645fc14b78a780293fc735cc94f62f5c32f61ec3f45a1f994cefec5d68b8b1ac4fee36c7497daf27f0d6df9bf09cbdf3285e5c7db8e4f9f124f63c6f37b5ce37906339e3f621acfb35836fd53934ddfd92c5a367d0ed39a1fb39bd424e29bdd8d131dad0ab1e440b758255734977223fa153d8fe9f1b74e0fbe514e34f92f60f2ff1733755ec452e71f4dea94768b963a2f615aff8ba50ecf234b641351a54745dd262e997a7dbd8c45926f5994d4bfea1e2d92af6091e4c99c14499e03956f84db9ef5bbe04589d6ab58c839ba90796fdf3d852bbfee008ffcba9d8e663819a29c455d34f21aa6c1463a0d3a6b35982afe552b56f3bbadfeccd604bd8ee9d248a7cb662175493ee1218a4e6f6086d75863786b378f66786f62116e92885726bc85096e1a53f0db98e0663105bf83716eaee17c6644ceef62c25b6884efd6239af0f730242d6322795f2798973eadc2084ed119fa402798f7435b27907ee8c6894cfaa11f62d837d1602fea190dfb475824da6091689b51243ec622d14e1389da8891f80413de5e237cfd16d1847f8a1966075d71ca975ccf6270cb9672d1c65605791eeb2f2abce5f26fbf8779aeb873ab9f81626b836a51ebbb456e8df040cf1505b3b7c4d71d54e28b5557065a062a9c5a713c648d68dfa9e23c5714e6e511dd113fc35874d4b1e0e6003710745b995e05eb2db75d2334ac62de2a51573fae733a0985cedb51bdf23fc70ca693c6603644b4c62fb02cd519cb525d32ca525f6291e8aa8944878856ff1596d29bea529aaf36d30f91ee2a0757f9aa06debb70776f4a95a679299ff6172eb4eeb0aa67d7fe1cb04258861a42f53fab157655abc9450b84862bc000ac2b7b85ec9d46b1afafb1a4d94c9334cf444c9a6f74c279d7b75b2266d7f75b4cedee1ab5bf89a8f6773ae15c99cd63d6c3dfeb04f3666d8f30824fc1056fd009e6bd875c4770cf2068f92729801447bbfc8021e91913c98f58426ea149c82e7da225e44f98fdf58a6b7f3f636af7d6a8bd32a2dabf60c2fb68845f1351f8af5871d957575cf2e3dca6cbde6ea51c0cf336bc8b3a93f31b16b17e9a887d123162bf63c2f334c25bf58d26fc0fcc92fac7b5a43f7592c5b94689f85ba0fd853119a061f24e44267f6396345067497c1f13d5885a269a88deae59cb45d53548545f8b99bb9070b5ae2049615bffc3b419a4d386ef47c8435b03ce272f918b2ed7460af71f0cf160dd7841bf6888ffc52295af8b544b963c50c55b31559122c412489805ba30b93bc838118607b2265278095d781ce0100dc047f2a201ccd108cf178744f15db21a62b97b6627c0176a1ae4f9b93c1e5d93e21126b4a18ebc268d98fb67b0f3073b4fb228c10bd0cc02418f7ed7a5384fc4619a222f276291d70833dfe13af3ed0db28ceacea9c6f42ad9445f24ca29e5635153f79bdba1e3ebe6868af572518cbe3166f42334463fb07f34a36f822118a943c005a9cd5af94c0b3cbb304a949a62a18ed285ca670eb81b195fbc8285ce9f73e38f36a8dc4ca707efd46e85756ab7cea853db1c8bef36baf8f21cc47b966aa7a772276ee3806b8f3af5c13daa4095a451e2dd0233a96d752de901d14caa25267cb446f8c888c25b61c2c76884ff1c51786b2c99c6ea92a93b831e58fe124155a6b9b25b5e59d75e50654194e4da18d36b9c4e2f7ec4f08cba4365668b4c313dd07e8912fa2618f2f11ae44b064643de06133e4123fcc441d184b7c58417eb4acec1d184b7c3844fd435e6f2a3096faf13cedb2293740553ae733b59534b0703e415341260072c365334b1b921626c3a62c24b34c25f8828bc13267c3b8df0b105d18477d609e76de7ede3f6e5bae824f3f7a7c61c25e9aa13cc1b41d312da13a59385f7c2856f8ac19eae81dd664834d89b61c5dc8cf43d98e560a3d228855b372ccc995898eef8aa7b965f66056a770ce20eba319b881037c722342b5d4fdbdd60d2edbf24f7bb333ba6ac07a6cd6c9d36bce5e56de8e28e1ff11e53a9f3b7bf411445875cac91578a35f2e664d4c8eb89c5752e463ed8c8c3e23e9db9eb36a2c47a0b9d367c2863c730e54b8a53147b61d6bb93aede2b8c66bdbdb1f276e7b8e56d1f8cc72e3179f4c578ecaae1714b441efd30e1bb69846f88283c0f33d8dd75065bcce03eb4fe0dea833e76ee4c16ef8f79f351b962eecb9d1576bdbd6aea4a4fff96d38b85ace5753b8479454f8d98bf5a192923f4c710eea141d86d6834845b62c2e7e9324344e103b0b18ff99ab10ffe27cad8c7409d703e845f16263fe4e2820761481668907c1311c960cc641762c315fe414efe059f325d17c984f2b128956ba2746451b428156051aac0c606263175baa43f0f05abeccc5a4443b0c82ed244f68188912dd409e7e5fbe2b8e5fb504ced251ab57b0f8ba6761126bc5223bc36a2f06198f03d35c23f89287c38665d4b75d6d58f3179c25b9528c797a798ce0b96dfcad9954fce64d6581c8181a8d28d4a8d880662240662990e04ef02cdf645af5654792b7c6db35c74962ab3ac370a03b05c03a0606434005b610056e8000cc91800ffddf5e8e28dd64af0eb4221a9527e1775d7fcad31fd57eaf46febd37f1a2b1387bcba6b32329bbcdb06eb46ec857523aa33ea466c8bc5b306abe2b0784689dd682cd45a5da85c821a898f12ca182c9455ba5078eb3c38ee9fd938ff585db8dce76575a27e7c5ec661c6b106338eb51919c778ac8458a729218edd265a0931014b9dbd75a9c30f6c55b95f795d2e971e6cde08c960e60d8daf91b5c432518af0528117917c91b05b5e780310e5b244a91225cd4ae6fa50aae9d69a887e6bc518b47d34d0c66e1b0dda440cdabe3a68db33f7c0786f9c45cd0f16f8dc435d905572be58bd19ec060d1405f302318dea6da85c93749e3547973cb2a0ba69d18be24918d0fd3440ff8e68859331e1fb6b84df1031b5a660c20fd0082f1a1d4d7809660a07ea4c819f1e3b4eb6b096c824862d2ab51cbe4a94773c7fad1335b0bbdfb777d475b97873a1c873e5754650cee0d092de00a224f97618b88334e0aa2282db1e0377b00e9cb66c4ea1fa544cfa213ae94deb8ab5fc0c72c6340cd3a11a4c278e8986693a26fc305dcf3aa2f01918a5c3c38c07a4403213137c444cc13b60388ed4e07821228e5998f0a334c24bc746133e1b137eb446f8b911859762c28fd17527230a9f8325e6b1babc54cbc21d9e156f5f12779ddf3cdf4e2766ef5232174ba2e33449f473c424da114ba2e37549c47df292378a8912999db0a6ef0958d3f7c48c9abe3b63f13a49172f5e4be4478ac72e98fc9375f25b30a635bc2821ee8a85788a2ec44eda949a260c521df5e73d896690bb619a9c8af5fe787b226a81bdbb2694fc9ece6d821fff9a2d07cb52e78eb7a2a23b569e96e02b4efd3084196bbd214f4f706fc88e49314b153ee605b9872e7df8ed1909befac6afd276d30e6a7a6eb767739292a6319e34f33003383355c7dc2d87ab9c7fd5ca48451df19a8f857b962edc4dd07097cbb23a4ad8653a73dc22dbe63841f4f9aa3330c7b3137c95871fd160c418cf418c3155e898312ed071e303a6897959e4e6bee7167bb3c51001efd8cc10b33b6ef7a62603a6e726f8b2303f53f5474ff63c41b65752cc33d50fa3be509753f8ccc9f989983327e598e40be24aaec024af8f2b79914e326f145d98883f35ba182b942e8ad9635982f1b8382e8f4a4cf2257125ef8949be34aee4a598e4cbe24aaec2245f1e57f2324cf21571252fc78ceeca9846b70253f9aab82aafd449e66d83abc3a89cc2a5662f4ce56be2aa5c8d51be3626e51a4ce5ebe2aa5c8b49be3eaee45598e41be24a5e8d49be31aee43598cddd14d3e6d6622adf1c57e57598cddd12d3e6f6c604df1a53f03e58ed7a5b3dd4aefb62a06f8f0b7a3f9d64fefe1d6178a470a9de5f27986f90786718c1bfe1820fc052f0ae9829782026f8ee98820fc252ef9eb8a97730967af7c64cbd43b0d4bb2f66ea1d8a41be3f26e4c330c10fc4147c38967a0fc64dbd23b0d47b2866ea1d89a5dec33153ef280cf22331211f8d097e34a6e063b0d47b2c6eea1dabebd2f7766e137bb286d8015637f45ebf3bc13e1e262d8a7062c76169f144dcb4385e27999f06fc6418952fc0059f80d9e55331edf2444cf0d331059f84e5fd6762e6fd93b1d47b366eea9d82b1782e268b5331c1cfc7147c1a26f88598824fc720bf1817f21998ca2fc554f94c4cf0cb31059f85755b5e89d96d391bd3f8d5981a9f8369fc5a4c8dcfc5347e3da6c6e7611abf1153e3f331c16fc6147c0186e2ad9828d6631abf1d53e30bb19ee13bf5d033bc08c3f16e4c1c176338de8b89e312ac887b3f6e11772906fa837a007d19a6f68771d5be1c53fba37a50fb0a4ced8fe3aa7d2526f993b892afc2807c5a0f40aec6d4fe2caedad760923f8f2bf95a2c937f1133935f8709fe32a6e0eb31c15fc5147c0326f8eb98826fc4047f1353f04d98e06f630abe19b3b7efe2dadb2d5806fcbe1e32e0ad98f00df520fc368cc90f7199dc8e0dd6fc1873b0e60e4ce59fe2aa7c2726f9e7b892efc224ff1257f2dd9875fc5a0fd6710fa6f66f71d5be1793fc7b5cc9f76192ff882bf97ecca2ff8c69d10f602aff1557e507b1b2f4ef9865e94398d9fdaf1eccee610cf43f31413fa213cc9768fdeb3ce8a9d15aab798a255a8fea02e01b2af36d03e36ca8fc18a67922a77e347f1cb3c19c9cb887956192378a2bf9494c72a3b8929fc2ccbb714e7cf37e1a53bb495cb59fc1324ed330e69722e33c8b9523cdc2084e518e3c87816e5e0fa09fc740b7880bfa054c72cbb8925fc448b78a49fa254ce5d671557e19b3ba8d635add2b98ca9bc455f9554c729bb8925fc3d2af6dccf47b1dcb29edea21a7bc81096f5f0fc2dfc46077880bfb2dccf23ac6b4bcb731953bc555f91dcc3e3ac7b48f77b124ec520f49f81ec6a36b5c1eef6349b869cc24fc005379b3b82a7f88b5c5bad5535bec238c49f7984c3ec634dfbc9e34ff441700b7ab1e39f1f785fc146b5ce7c66c5c7f8661e9594f583ec76c718bb8b6f80506bc573d00ff1253bb775cb5bfc224f7892bf96bcc48fac634926fb0f2b55f3d94afdf62b5425ecc5ae13b0c74ffb8a0bfc7246f1957f2064cf280b8927fd049e66e2f03c3604ee1f6f223967e8362a6df4f98e0c13105ffac13ccdd5ef2c3084ee1f6f20b967a057153ef578cc590982c7ec35814c664f13b2678684cc17f60908be242fe13833c2c26e4bfb0f273783d949f7f633c46c4e5f13f8cc7c8983cfec1caa25131cba27f314784adc2084ee188c0c730b590b78e0b39a193ccd96d1313728e4e3067b16d4c161be904f3a5c3a3c308cec50537c2048f8929b8b14e30bf1d9b93bcbc5bfd490aa0311e40135d003c838fab870cde14133ebe1e8437c30c7b425cc36eae93ccdf2f8ed9936ba113dcd3b99d184630f79a4404b7c4044f8a29b8150679725cc8ad759279937f4acc26ffc698ca257155de04cb8cdbd553666ca30b801f26b37d18263fe082db62b0a7c684dd0e833d2d2eecf698e4e9712577c024cf882bb9a346727e1fe73691cd73e2e0fe02999d1337536715890007b1c7c10e39fa83ddc2e880ed67d009ab3566d543add1194bfcd97113bf0ba676693da8dd15133ea71e846f8a35e4e6e620bbfdcf75cc778293c8c56c7bc714ddedb8f85114b56c8d48e0a532e9078b4d594a9ce7deb153fc17fd6a1dddda1efe36342d6ef82b98bb0958b47d0a37c362b9a32e9687d7c5720e2b1799cecda0cbc4bf4b44d6e5b1e19b8db919b4a4eecd89620b33fec62c118b0ab9a959b5e4319bb93b354e60eecec85cae9f9e2781bf1f4d0f4c5229f3f65ef533859935c87bae2327f2c93918e99d307b8221ba711aea7ce3d25ae1148af31cdb70f7ba74635b2a36a7599ea4adf72dfe7b7dd953772c963beb62393a104bc8dc8de7249162cb441c835afa53083e499557e0575162b63916b35d74311b132afdc689adfa2a99dae2267eca794fa2c4ad0716b75d75711b1e88db34913a4b64ccf8ddda068b492e1693dd74313936cbe599f78dff28a34962b75977afe6f0560ed9e1b198280e57e4cd0c58eaf10656fd956d3d31eabbeba88f0b9537a60a1a3546946a5b60f1db4317bfa98456c57fdd4b04c363e53687bd5326cad092249354ed85c57a9e2ed6dba68c35aee92c111777ef72378eaa36e6bf2e948492f345e6a9d91b8bd77c5dbcb6425a7673440caa64e9ed764654bb6eae8c677992d634adb83e588cca7431da39725bd53d14d5df5ad549707f9bc9bc93aec689ce5b9cb66d2696db17e3b140c763fbacb442a8db27fdb0382fc45a5ed16c40e54aef4c3398ce512d224accf2b09895eb623689b0f4550cdc0d34dd93b493f378e6f9b83f16d30a5d4cb7716ec3e72b7f0ce0b6d29cc9145186558bde103f0e615d3dc66a4b2c568bc2f409fce1c216c21c910ad5cebbdc6a17a7a8fdfc32ea2f6603b0982dd6c56c42da72265caf002f7152f559332d570662715ca28b6305718bba566c67ce776d765bcc73850554d6e5c6fae9236652e70cc23855ea38cd69b09e476a42f1390cc638eca9e3301e2dc3780f6981f392ca1bee5edda9db537a49f59dd2f9580c97ea62581231863b0a8b5e8ea44843c4b7008b6f952ebeb3082dbb2683fab73e080cc1082cabaf7ad92ddbc6815a993e568558ac96eb623539a21d4f1467d7ae906dc386b6e1a1585c57602314515370927823d91a83e56b78b951e25784c56fa52e7e5bc768397a27232d92bd223c56a549ef4689d3302c4e7b454bb3a07d8e13e30915e210b074b98cb2a61c8ec5af1a8b5f941e961bd7c9b2cde43de5331ea95b87f5d5721c81c5af4617bfde2cf5a8203fd89d42cb919896b5a9c7f6a2a4c2ec8c5281d2f64661b15ea58bf520346fa97326fd65c4a2baf16cf7745c5dbb33b3f1fdad30bd57ebf41e95b6c75522e606f9e8639553e6553b7153075e47c92199f720b7c6e2b3066b2da7ce23bc373c53b4206b346d88307309bce5b5a81e63b80d16c3b561fac8fab98112617b7c1cbc4c8ec026a75736e707b6c5e2b80e1ba10a330e10269699951899c7743416d3bd75319d122a3583333d6e3e54f16ec8741d83c5761f5d6c774a9baeb4e3c8d423cc63311afb86f160486e51baa93f318d856716c7ccd37c1c16cbfd74b1ec1388e538d1ebe1b57c70d4bc42f0e6f3e4f553138ec7f4dc5fa767618ad408ea3c59ea1c367f65da679980c5e08030b334513c62cc29518ab1381f88cda9864db5d969538d72f4732216af83321b098f5f527a7ceaabfc9b84c5f1605d1c776174e360aa5797f94878fde4e0c918914374448a02a93e41c4d58d572de8e5158b3e833e16a9ec167e17251653b0581c4a158bd9321d74cf328d4509168bc3c2e440186a94b9287f2cf127f513c7edb0381eae8be3f18439308a77d76c216185783f8a7f97df4a1ad6c36b7b8cfc11997b78a56bf965b35e9e8ac5efc830fd9ae4b6addb8bae10ad91e5c27ebcd826db40b6dbb8d3b0d81e15a7c44b55aaa5ee8f78df4589c5742c164787e9756325de6cf1ab3bcabdd090726f0616d363c2b494b19846eb776716e3cc6d742616e763a96c346c8d1d25163b60b1382e4c2f0d8b45b8be58fdf433676131381ef396d48f14aba55c2bc4dd72d670f34ab3b1189d80796aa49fa30c336e1766a633fa6c68e639ac14e370a28ec3961138a83455c74cd7570f6c0ea6f1493a8dfba6ed65d28dceccc5343d59a7e908946db2a5fb355f297a7d9e670f457ed9118bcb2961c6fdb0d1ed74adbf6c8f6cef84c5f254ac8e8d56ceb97df6e4a7c9ad4175e23d9e9ec952bcd18e2871de198bf369ba38ef46d89f0a33a201b984b507f54d142abb60544e0fe3afaa428c62eb5ecc303ba81f1bdf158bd919615acc51ebbb86ece1ec86c5f4ccf8edaee1ac28837617ff2a4a0c76c7627056f81e370f337a8fdb8d1ff67b7da5d01e58fcced6c56f685dd913c5ef42d59295cebbdeba85fa8bc33c2c0ee760be23a96bc6d98eee6eda04759c20fa68d5294a3eefdb19c283c1edb7a61e6fcaacd6988fc5fadc4c7c16a2f4bab3b58ab40c8be179614a0f3de1cce6d6d2b7949b3aff25127cb38689428aeb01b2427cc35b17f9bc199c28a8cb3f83ebeae4c1befadbfb9d87bfcc490d9e274aeb6a5fbe59456a09e7e7b8fbbe8b3ffd121c6cadacc2128b028cdc2fab84e485c05a070b42ee2a33bec9c76027df568aafd4b61ee962a16b870c062d1118bbf471da1dd9a62391682a63a46439a4fb71d2ffb5985ec053b59f4cd59cfc3c1ec701195a537a2dd6f3d036d2db50e724b23077e87477054c97bdd004df046d9e0866a6e834e18b52d3861c3c693718f2202140b5e0d28a9b038a009db8aec2dcdcc9986ae60edbbde3c86cda38a780a7c88594d8f84636c5a265bed201e7ce7ba83a070358630542bec7b342781125c236ce8d6a8c4c114d172ea04c342ff914d10cb6d40a60639b7bc02ea604d64164d579ac8079ab3e6c06b7bea507ee124a70ed34e0b8403e09c51d4357895fcbad80369f79d02ea5b6367ff69ce4fced6e3a565ee779ee5a9d0de0ee68e581bb8c125c27d11ead095d2dd800ef5450295c4e09af8ba857a1a7c03c3052ebf95c70fbe32b9cd75a627dcdb6f1005e4109b02528eb66f80619adc0d4cdc37425b59d294cde28080756e58875fd06b97dad91a55c6d98181b00f09e811ec0ab2801360700bd658d3620aaede421ba9a12511381a8c6aa5af2d4d61e9c6ba833e08cba5ea79ab2735d5c6789ecb78a55cb827ea61c8cb401e07a50825d4b09b033531d776f0fa21ab6c47975a56f6eb342644e5b9ab7530b3d7cd751e26b06ca2fae269f04b601d03d6d3d40d75302eac8bcf6bf57074e13a36a4be49cab5d75e3b1bd3d743750d78d33c454b0b7f0c28eecb704945e37666b2cc32bbfec6d77cdefeb81bb295be596da16c5064047b6f700dd4c096853506e4d74fa873cd6abeafa8ddc9fb35cd8da2c9135cbebdafc3640e47f14c45b2821f2a304203c5ed4f3629f9763abe41090dd231a1dc04cc1ad94285bcbca40d9db3ad9c89dc36a2c29db0e0595c26df47d4ab57c434db2da80e8962d3c44b7676b54960f3242cf3135d068537ff3c8661eb83ba8e739dd6d75159e09a287a91c45ed6a6eecd4c7c37627f56036b437b81bd73831bc0db3aa1d8ddc566026e02e4a78ad98d756f3365c72b702b301d47ad0d7bc9b7a2a789ac8964b03bbed163baf578b906c00c6bdc014b07be8077f5ccbc2a647fcd32836e03bb5c0c3776f76e736fd1ed8e596d5a27f835af43eeac62caf06b88aaeb5a9d6bf2d36c640cd793fbdd301cf8cc522689b3b4b9734f6a03d4009ad0580c61dff6cea0374e9e5417a90baf49a280afc552270387f199c09b0015c6d130fdc4394e036667048db4eff1feeb4ac603d4c3f42eb3a86ae1062ec1ef0e902cab047a85d439595e9da66fe06aeda2cd20684bb81099447e9bd6bfd5e40b0e7a932afd752b3a5e3fec6b61ec2c7a8e7d767395977020b7f40920d00bb88a66ed3c601e1c1757999af3088461d5f0bb1097387d0578a5f6ba5adfad646f4775e314ef3c7e1da86bc8ca753f2d2d6b679a1fd72f322fb54e665e8a09f176a28222fe6fc485e84551779912ae2bcd0dd8ebc48cdc8bc8cca93bc48c3d57991bae579a1d60fe445729acf8b3cdca9d3197793ce4b7209cb4b394698a7f552c9d3ce01e7211e7979293c42f3104f85bc3493567919796fe521f33b7968af2f2fc3b6545e44e795bc34e31a7911660ff222b936e465e4889a97c1f89ffa268ac3585e46eed8791936dfbc459bb09af4165b16f0459b4ffc7fbe9eb280d7cc4f72089b4a0a6e5bf2a96c384bbbcb67b965a63e206288d3a20be8d02d4907ffb1f6aacda8d3a6b9af55b971980866d2b25c0bd6383c6d12ce422b715e01703e6312cea156e2bc17e07cd6249c4556e27c05e07cce249cc3acc4f93dc0f9bc4938875b89b33d98477e817ae27d9eacb1fd58dd363d7f8d0c5f7b2a7c7d8035be980d6b5c8cda23547f1e1be5d82319ce5654383b009c2f998473a49538ff611ece974dc239cc4a9c37009caf9884b3c84a9c67039caf9a84738495383f07385f3309e7702b713e0670be6e12ce2156e29c0d70be6112cea156e2dc0fe07cd3249c8556e2ac0238dfa276724fd5a9f467f4617428db52a1ec043a946f53af1ae62817cab1f6e0ceb6aeeaeeaea90574201b5381dc03f485dea15e81a76678c2cea0f2f7abc5bbf60d79cc0199fd5d4ab0ddd2969dd8896943e8b01625a8469280bdbe4789b5078333d5e13d356cb6d9fec066df6fc80a0a8a23b5d3a6542897033bfd8012e52612e5f0ec8f7792c1bb0bd8e187d9803732fbf036a582f70880f75136d66c614d237f26261d3d22b3c4e6201b7f6c12cc1116c26c0d607e6212cc220b613601303f3509266177920c665300f3339360165a089301989f9b049370e69c0c662300f30b9360120e7690c1fc1f681a7d69124c1b7b38ff02985f990473a485303706d9fc6b93608eb210e66600e6370d3b8ce18a720f9b252c317b51a18487677c4b89724b89b2ca79a94a5cd5d20178eed7bc48e78391222773f6fa1720ff8e7e6f8225623d8cbb3e67b18067dfb8652b50157ddf9019de7f4220a1f59d4285f251607d1bb2351f14767591cd63eb7f001bfd81126cbfa492b44c089b2447342b9c72b34264fbd562ca62154b75e220a91593b500ce0556fc63360a8470cd291b51f60576fb1325cacd35656bd893ae49d15e4085f67860a53f536f3f319b05d773ebd73df2898fc5b4652c9957485760abbf5002cdd5545ee196adda5c857506f6fa6b4336b38a45b5b540f6ab0887f5fa52a1fc0ca0fc8d1ae538b1a5c30ab9909d9f1dcb9b57cbe5e6166a79bfbb69827d56d90864fadfb371eade10e7ff6532f0325156f25f6d9e6f3f0120fc231b0847fce7103e0910fe49bde79bb7e30517c5771ef02a19fbc698da03747fd11f0decafb5c709157897d36e77c3c701c4bf4d5ab04aba90800ce7e1a07efe9f4938493ddfc9705e0370fe63124ed2751974991de0fcd7249ca44e5e6438df0638d94606e1245dc04a37d20970262871aab5196aa4734f862f73211c1f221bce781780cca104196dbd10a14f1219cabf00ca8d28517a1b50140490dadcbb798f79f81a35a425fac7d36d744e380a5862e36ca0840baea6b2196cb2dce47091f3d1da6cf479c8501e01acb209254ad76906ce91cf634b05baf162bbbca552d424e7cafbe1493baf5bb06ca03580d99412a69ae7a9155b35d6d4f974a8bd04d555374b594859f990a11d07b27c3353d192d6eb6468af0556db9cbe0888b23312194cb2f5e9e301cc1626c124f4e824833916c06c69124cc2f5196430b706305b99049370e51019cc4200b3b5493009d7b491c11c0d606e6c124c1b3748d906c0dcc4249884eb33c8600e0430db98049370288e0ce61600665b9360123abf90c11c0260b6330926610f880ce62000b33d25cc5c963c34176d350661fd4eb61ae362d077ef900d5bc53c8983734384a528d9cc103cebafa3493009eb773298a300cc4ed998d2e003c9abc5922c7e5252961cb6c8f0e5027c9d29f17505f892d7627061de666736cf11bd098076a1040a4f59fb6f39111e0f1076cd06c2e1ff3984d300c24dcd6e0e118e6a92358772c0be9b9b51e285be9adeec259c80239fb7249bb4380ed868b76c4c0163cd20ff6cba8d1bf74c0728bb67ab164f7748a3cd7ec4db01a09b67c3172efc849a8d431d6d40f7b1874938475a89f337609db926e1243de58a0ce73500674f937092eed54586f32480730b93708eb012e78700672f9370929ec14686f30180b3b74938494f5725c3b93dc0d9c7249ca4c78192e15c0370f6350927e961b564382b00ce7ed4fd22deb9e487a27321f8c6f8ee71e37cf309c27ed18e5440b70540f32881aa2dc91be0fc4ab25efafe005e7f4a789bb1b07bc8f877ea227496f98d0aeaefa06bb9a5895009c793c8a0fe06a00e30112aa1c32119d49f01d481264225ace1c9a09e04a00e32112aa1330d19d42301d4c1264225745420837a08809a6f225442571a32a8fb03a805945087b2e43924ffaaa209cedfcb9cfff8bfdd88f02ec022b1328e2bcb77f1ac753a783c88a560ef1ab8d71c69226c4d95087d98970843cc59166be3413b07027b2eccce02edffd289593300bea1e62e3124f400259badff0864f2a286745af46772d27d95c8ecf40c00739849306d3c4feb4c0073b849306d3c4feb4800738449306d74cb391dc01c69124c1bcfd3da07c01c65124c1bcfd3da17c0dcca249836ee0d5f06606e6d124c1bcfd35a00606e63124c1bcfd33a0bc0dcd62498366e5975218039da6c9f7a1b0f7c5a09faee6328f1b69678ddddbfaa442fde955d49b96555632a700cd8e5584a70dd98e7fc5d2207943d17870a47ad2ae73f2ed43da7a8a60eb38d2ee085c01ec765632c2939bb87db0bccbeb1a42300daf19468fb30ffd6a87cd2c37f925694613bfb403f03404fb0053461e54506fa7e00ba385b0b70a68991faa58199a562e7b36a11a2cda56f2f50a94da404ba71cad6400d1dba1654e87200ba490db9aecefefd6eba039493b3311d57c4fe4b9b0b94037c53b2dd84d2bb3cb8b3f42b85c5baf3efa496f90315da3660057249361cc5b139f7e43d446cdc456415a8bfb7330967a195382f0138b73709e7502b71de05704e3509679195385f0038a7998473989538bf0238a79b8473b89538370635fb0c4a9cbd58f25e0e13d95ac6fd415731b55e6986f37939e383cbb30458f7b4ccaaec742fc90e42e12a2ac8334d5a6737cacabd94db8222600793708eb412e7efc03a67998473989538af0338679b84b3c84a9ca7009ca526e11c6125ce8f01ce3926e11c6e25ce8700ceb926e124f50725c33915e0dcd1249c43adc4b916e0dcc9249c8556e2dc13e0dcb921571ef9333aa1173d598fa82be876ee92ad194cbe4d46ad4362a5a3cc724799b9d29ba4bc6edad8de19ccbd806dee4a09b4b9083ae87a43062c970a585b006c37739611dae8debd0ef4c777cf86dfa7da14ddddf366811884532fd9be97f22a60977b6463cf9b06383277172a78e300bc79e6aec8246cfc90f91cdd0ed0ce37c7b97bb8952b324b40895966124c1b57646e0f602e3009a68d2b322700980b4d8269e38acc890066b949306d5c91391ac0ac3009a68d4df63100e6229360dab822736b0073b149306d5c91b92d80b9c4249836aec89c0a60569a04d3c615997300cc3db3d1331f91fd9e39d9f8e43dcc83b7b42187dbb2b65fe2295428bf067658950d3b1c957d3b24f3647f14d8e1324a787ce5f20c4796f26ce3530dfea553a5928a7d6341ed00c4e5f4d5ca12967ce4d36c87c942b6502ab4486c71cedd04ed2b195b02982bcc5df96be382d4834149b9b221d7a6f99b3f36f6be87022bddcb8cc555a5a2125a2eb23f17b78c16ed055468ff01565a9dad1d15dc832154893a416472ae1057de2d696d9f11ff09586c4d43b6388b4519eace529296a37da9503e062cb4d6a43517a45bfb9059e6c900e72a9370165a89f30e8073b54938875a89f36980738d49388bacc4f939c0b9d6249cc3acc4d90c380eaecbc6886638b7ad422b87875f03b6b9b749306d1c1e7e07c0dcc72498363ac83c0b60ee6b124c1b1d645e0430f73309a68d0e32370198fb9b04d34607990701cc034c8269e310dd0d00e68126c1b4d141e64600f3209360dae820731d8079b049306d7490b91ec03c8412a6da65930f17f3b1f6758e80856c09e3d36fab4447b2d8f95f6d075d0ec6e3ddad7a57886ea6bd03c8c5cc037da8493d77d205046438f705767b98493849dba16438af04380f370927e95269329cf7019c4798849374d70e329caf029c479a8493744f19329c1b00cea34cc249bac8850c670730887c3425ce7612e730e7ff654c9ddfc3b73fb37d99ead5a071744c36f68d4bef0f32810537db1dc7aa05e0758c74dbdd5c2ac88d809d1e6bce861384599e6cc389a600e5719428bb33ffd90415728fc3194ced6c88a325b45132b05781aae9784ab0b901b055c22b54792b29bfd054fd7d1b874ece04784f684817c6ac9dde4ee637ff3da8b24ea444d953a02c715e9a2580f1c31d56cbcf3d6b9dc7960ae0fc7cad85cebfdde7939c2b1f54213c1a8aac59d51c003e8912b0779cf8b040b595852615596d3f1064f593cdd991c6c652733140790a25ca0e6950aa9892fa7d9e9ea05a9a001a4da766a36e4f5e9a10f60c42c2d94fb23308cf07567a9ab9bbd5103ae390adfc6806d09e9e8d02006b3679050061394a5600ec0e309e4189919f9239538e2da91dbd4a8465f26c6f5f53a80d680a9dd9b075b92b8a7cf1412f2a945f001b3cab217b40fe751c84d9996c1dc75880f2ec6c948a057538cb997f52d8e6b5ec4f80cc7d0eb53b0307562c02ae60ee7e87fcd5bdc5022d17a7bb948bcfc813ceb2936dd93706c03cd79c8d01084b4ab2018e4f41f63e2f1b280b520cc3d93dbdf116b0caf3b3314354f49f9b21da1b20bc201b23eedc1a278a9a7b955062aaf3c942515ece606bc49c50b5f38cf780565aed973405805d6fceaa761b3de37705282fccc6562a45d91faf245bb77e00807791390bac095db7c91ae61f839afbe26cf877843f208cb021447650432b80f31293708eb412e7cf20a35f6a124ed2132cc9705e01705e66124ed2f355c9701e05705e6e12ce1156e27c07e0bcc2249ca4db9992e1bc17e0bcd2249ca427a793e19c08705e65124ed2a3bec97056039c579b849374691619cef900e735d9708019cadc8370aa1c12591b31221bd8980bf05d4b89af3df3468cb89aeed4841a59b77bdbb3c301c4eb4c5a2a407a501d19ce634057f27a9370926e454186f36680f30693700eb512e71300e78d26e12cb212e77b00e74d26e11c6625cebf01ce9b29713613022a9ca6903b47ce2593e1225b49d104d4dcb750e2eac792e775fc0e8113185f4ab54cfc9b4fa9ad1222270ac03c5aeed6e559f0109e49057b24807d6b767cd50bb33ff74396b57b83ac7d9b392bd3083b8d64d9fe1b80f2f66c647bb5806a91f35235f37c376a45cf27bc673061b627f30b7e19c0be83123637971dc563b5b2c783ccd5e64b01d75a68ad9d40b97967361c63781f7d32e37d71eecfb158b8c6545bdd433f1920bccb9c753e366e607a18c8ce7753a2e42c783998ec49044f21e0bf73d5ca7d4b54c8b0922d4cd90260bd271bfda021ceff1ceb1a6d2999a5714db2327332c8f0f752e2ecc8f82a8a0ae6ba5bbb950ee6355c6321c86600e47da62e98229dba206b186d03b2fcfda6a2256de093a1bd1258ed03d9d8fd309cbfe6502b3786fe0cc07cd0249836babf7e05603e64124c1b37867e1dc07cd82498366e0cfd2980f98849306ddc18fa5500f3519360dab831f46b00e66326c1b4719f8e9700ccc74d8269e3c6d0af00984f9804d3c691a55f01cc274d8269e3d1387f03984f51c2eccaa23bc1125a2799a3e114d05b7fda34a084164a06743b00f419d38012f686c8808e07409f350d28618f880c683100fa9c6940094792c8804e02409f370d28e1681219d0c900e80ba60125ec1d91012d02405f340da88deb338601a02f9906947064890ce80800f465d380128e2e91011d0580be42093497c5dd7193b0ce27736c580ff0be9a8d5e3df75ee24e0c2e3e3e1beff6f3cb594db6dc1ac836e6eb0a60be46edd690de0774b8d85c85b09e6f4c057213b0cdeeeb94207b02ab5457b84b1247eb5a69adf391df1dc7668fbb49cc03fc46369c1b924bd530ee0d84fd7c32e786f74121f066366c17a275ed91c35bceb6138b1456a66c15d8d809d808d8ee5b9480b71080bd0c3f4d9c4bb04408a8f015040d746e01990d6f0610bf6dce866a363a418c0028df3169438151560e4b6f0a4ad7774dc239d24a9c2d00cef74cc239cc4a9c7782ccfebe49388bacc47901c0f9814938475889f35b80f34393700eb712e7cb00e74726e1b473c2793780f3639370927a9890e13c04e0fcc4249c8556e25c01707e9a8d1e111f8972f78fe7eb3bfd2b92b3324a4ad6b9ec02da9c9f51a2e437ea081dfb306d022cee739332f0282b27e6360156f7854938475a89f317609d5f9a8473989538af0238bf3209679195388f0638bf3609e7082b71be0b707e6312cee156e2bc1fe0fcd6249c76badc94009cdf998493746d1c19ced500e7f726e12cb412e742807303f5862c70332bce6115e31e4be501acc1bd14092781c91c185680e6fc0fd970b551582bb5ae36e4b3e9643b88bc0e40fe4809b26f00e40296eceff1dfde6aad39f06afa291b3b858d64ffb523f49e01a5e9cff4be1f9eb57241ff7f6c08783b28107ec9866b9887b84c6ca75ace2649fbacf88f95b59702b4bf52a2e563879e1ba33774cc55b6759fc52e20ebff66ce268136ee257200b0c3dfb391c50b44339f4f6384f3a72377ac252b3dbf0356fa87b9bb86112e552043fb0140fba7594b6b0aad5c913c1b14037f9906d4c615c9a500e8dfa601b57145f25c00f47fa601b5d1777e1a00fa8f69406d5c403b1d00fdd734a0368e97ee0080b2468601b57101ed2c00344109549de83e24d07bb279bc899fb6a2e0e550c2cb6571571f13da26d9eae373806d6e4489177ad595b01aa16af08cc3f26c743cc92644be0196da8812651780b24a5865adb69369f740f3db0067634a9cf116c812667ab27efcc320d337a144db9bf90798ab183c2e658e2c02d689f3bc16cb51a8c9f2e3198eb83d19df9ca09676b0b9880af3b10073d36c94ad0b5998359c36eed6380f1406cdb2d10a5016cbb37b79e0008bffde5c7e39b0d4e6d9a8bab0067ff201bd843d28329cab01ce1626e124ed9092e1bc0ce06c69124e52f732329cf7009cad4cc249eae94c86f32580b3b5493849fdf0c9707e07706e6c124e524f67329ced80c7d326d9c0197e0d938dfb897604d6d9c6249c23adc4990038db9a8493f47073329cb7310f673b9370165989f33c80b3bd4938475889f34b80b3834938875b89f35980b3a34938eddc297c2780b3934938498ff123c37910c0d9d9249c8556e25c067076c9c6503206d39fd1093d9ae8bc98418fa82b254abe6e6947f1586d48e99dcbedce7cf2d1fa5249860c645f2a909d814d6e4a09b20d536e0d0de0d840b74b2dc0b719253ee515c2035e2432b492bd5cbe62df7c5002c0eb46094fade9c4ab17384f39ce11532dfc4268672c13445873407fbc3b75d918be9ab1af92d90780dcdc1490362ed85a0440f6300524a1cf0719c8cb01c85c5340128ea89381bc1080ec690a48c2b51a64206f0520b7300524e12a223290b70090bd4c0149d8cb2603f91000d9db149036f6b1ef0620fb980292d0ef8d0ce47300645f5340129e4e4c06f22900b25f430ea04171a40d20b2be773540994789b2338be2d63a8cb2a42483590060f637092661fd4d06733880b9a549306d3c36270fc01c60124c1bf7fb180c600e3409a68d15500f007390493009c785c860f60430079b049370b4920c66370033df24988463e864303707300b4c8249d8ff21833912c01c62124c1b57a36d05601652c2e453b713c5967c5cc51209b4d2f998efd3c53fb36fde9bbbba2b78431bb227ee5f604a58779f4285b22d706529a244d99d05b73ad3afddf51c5c160961cb68671d2fa0027b20b0d16194607bb1e002697739bfb7ff2617c89d5c5297a3363696ce06a5e8704ac8c17db9e1a14e25ac583bd269efc9ed8d41a130221be56bb89adec616683e28064652a2547b1dc35d3a75ce82d3c5b335d2a950b90e6661d3143227c20d00f1284ac4ba5d3ec2576284d64b5689fd00cad7ad1ab2a155ccf866290b5895b055c23295cc4a1f0128b7ce665555e9283157ec90b48a05f7e2ceda062964edd7d6a0aada8612eba601ac7c07ee2ae9a7f9dfb2d40f81a56e4bdd359d277af05977c9265b2c7d28a88c4667639024dc24f1102b479c2e029638c62498368e385d0b608e3509a68d73ee670098e34c8269e39cfb0500e6789360da38e77e2a8039c1249836ceb99f0660169b04d3c639f71301cc8926c1b471cefd1400739249306d1c463e1ac09c6c124c1b473c4f0030a750c28cbe1124611544d6a13c08e02c310927e9e92e6438af0638b73309e7502b713e00706e6f12ce222b71be09704e350927a9cb2c19ce5f00ce6926e11c6e25cece60ac7d3a254eb55b075f29b41a4c5d64e53402327ca5ccc337a32127d33cd5897b3f644bb19a004b9c4989b2030fc0b971cf60e7a296337eda65b5984be7478e943135b36e9f45360616b90325c61e2cd939819fe0324ecc3c560af7c4718c6f8fcf67d1cbe4f499dd67b92c02706765a3b4e483bfffa1439b40dd3d9b125f9c3358490f1323739fdd09a02d35152d69c54486f64690e9e750574ca9ea781553521784d31344185b80fa7d2e25c65c0dc66827b611ce11919dd8761e28007634b700207459202b00be0005c04e94687b0ab453847dce62dc85ab4236a4ca8528e5f0bd542400b7e385759b484e72aedc7ba9dcc266550b0078e76c94b0986ff20461b1d5b425ec3954256c19280276c9c694076cfaab7e94d7b3b2bba9df03d8e4ae9430bb6b60a62f02ec05bb2300bb5b3606f03858eec0bd4602e4e24a44c7b482adcdd60814d9b0c99f00e7ee9438db499c439dff97a9124758aced478a5e0e10ee918d41bc704b636cf4a1db05a09c4789728b0828673b617221b56c86f32f35b457435bcb9f4755cb2f00b5fc7c4ac4ea1c76e51dbf52949d4b52daac8d9e22bf02a065d9a890c29f85458893ec4c829600e70293708eb412e78fa0445d68124ed2ad58c8705e0a70969b84b3c84a9c87019c1526e11c6125ce3700ce4526e11c6e25cebb01cec526e12475a925c33901e05c6212cea156e25c0970569a84b3d04a9cbb039c7b666320a440fced5eb9e3c36ce60eded93b345703102ecdc64048386f261b0f287903f482aa1a12a5bf7f6ee352c24301ca65d9cad8eeb81217b45666ea2c8c70fe4685f02990b1976763828d23aca8dba14e3db67da0f80580710525c6e43976fd9e3493e50759dbf3a3880a6d4f80766576d146710d23444be6be900bcacfbd4c454b5acb93a1bd0c586d7536aaa6c2ffdce4db6080b08612a1e752db000b10c8dcbef200bedaece02b0ab4376d9e3d1f00cac65594f894cb4cb8a9df422b277f6f05b6b8da249836f67aee0330d79804d3c60d546e0630d79a04d3c60d546e0130d79904d3c60d542e0130f73609a68d1ba8dc0460ee63124c1bdd622e0230f73509a68d1ba85c0c60ee67124c1bb7907c0ec0dcdf2498366e21f93c807900254ce54e18658e9cd03ac9e62187802ee581a60125b45032a04301d0834c034ad81b2203da1f003dd834a0843d2232a05b02a0879806947024890ce82000f450d380128e269101cd07400f330da88dde46dd01d0c34d034ad8432203da0b003dc234a084234b6440fb02a0479a06947074890c683f00f4284aa0b92cee0616840500d94ce61a80f768ea5e7d31aba8c356ce74676a9532ef3438fb1c13b86005f3184a986a5a787843ccaa93e1fb01e03b961a1f17c0774ef096f873615c697785ba7db3ea1d00bee328f1e94e6f0bef7344d8d524b3cc8f4029793c255ae5c939a46efcb31c948eb6efdbf934b0d0132831465ff36be39867276095279a8473a495381b039c27998493f4907b329c7780cc7eb249388bacc4793ec0798a4938475889f36b80f35493700eb712e78b00e76926e124ddfb900ce7ce00e7e926e11c6a25ce8301ce334cc249ea0942867339c07926254e75ac6d61a0bb69f320c70e00de5994f0e031f6c58c6fb3bf92cd6415b24be9eed05521049609017003fe1a66f382ea0100f1d9d9c8ee58664f3e378b70d28d0c672de8179d63124e520f4f329ca7039ce79a8493743f0f329c77029ce7998493746b29329ccf039ce79b849374e333329c5f029c17988493746b29329cadc06906eb4d6ac88fb2d283ae1db0ce0b4dc239d24a9c7f310fe74526e1243d73900ce7f500e7c526e1243d11930ce7a900e72526e11c6125ce4f00ce4b4dc2497a222619ce8701cecb4cc2497ad63519ce1900e7e526e1243d9c990ce73a80f30a937092ae6527c3b914e0bc9212677f16dc4c9f8f83963b3cf89e5d2a9ede4669303018d438e75fd5c27191749faf1d7288807704fda6ab28817764a9d76efa4b56fb7cecb604967bb529206ddca9737300f21a5340da7880f38900e4b5a680245cb94106721800799d2920096b7732901b8151a5eb4d0149b862980ce4b9c0226fa004d981f9fde1f52b335c2e6418fb5261ec0830de4889b180f95b9bab502f787c6fd909ce1bcb1c7d56883b1ed52cb53d73c98a03d0f6bc8912bfda3724ec1408a1eb0dd904c85ea06cbdd92498845b5cd06dbc0f60de62124c1ba7e6160298b79a0493b09b4906b302c0bccd2498840d7b32984b00ccdb4d8249d8dd2483590960de61124cc2063e19cc3d01cc3b4d8249d8ed2483b914c0bccb2498845b0191c1ac0230ef360926e136406430970198f750c2c40fb59fe4fc5d2930f2defd0a21d8fe43ed2b9907f65e4ab0dd04d8a9ce0b0b85b73cdcfd631e5b2a20f2fd41163aff76854e72ae7cb38b723aac647b82340558efa3c4aa9628a801931aa6f661887688091962b255206f8122e17e4ac4d10e2ab37197f9bd01ca072851c63b68c7c66d2f1e0405c183d968056023f97e2b1d61e5391df3819d3e64124c1b33fd6e00e6c326c1b4f168897900e62326c1b4f168895d00cc474d8269e3d112bb02988f9904d3c6a3257604301f3709a68d474bec0c603e41093397c5dd9692b01425eb829e05f03e4989b73df3864c568b2111be1e7e81182ac9d2766ba75041ac651ec4a728217661c9e34ed86009f96813994df603389fce46473339cb87e96ada78a2eb7e20bb3f938de1907055938d4da62260a5cf6663b03993e110426f11321b5d0fc03e672a58429f2632b0e700b0cf9b0a96b02820033b0b807dc154b084ad5332b05b01b02f9a0ad6c66991e100ec4ba682b5b181d51b807dd954b08473fb64604f03605f31152ce1740919d86300d8574d056be3a4de1200f63553c112ce4991815d0cc0be4e09569dfe318cfd974eff3816e07bc39c31001b8feadd03a07c331b037fe17df16d5c74731c189d7acb249ca4db0793e1bc0de07cdb249ca49b5b93e17c12e07cc7249ca4e72c90e1fc00e07cd7249ca4a78090e16460f5e77b9438d339920747f66df47afa1fb0cdf74d8269a3d7530258e60726c1b4d1ebe92760991f9a04d3c629bc3f01cc8f4c8269a3d7d3b700e6c726c1b4d1ebe94701b369e380f04949c22788a60b6fbc2c64dea11283d964c637b5708f9d58e8dc4f152343b56cbe836357e7bf6829b0bbf39feef784383964225bcb568a5fb9bc72217b99f3946b56c30af8de709f7083682e0d224f8c0c8c7398d73aefcc621522f4756c36730fcd98e1fcadd651ad1248f2c4ce29339ddf5631ee83c543e07ba82c61d522c6fe4335f212cd04a70ab65a12e000f3a4aeab99bbdd47891c93a874e25c2634a976de6924c2711b847989d6e04e392b958811b51aa15573110fce9f137457d4d438bf73d798190e13a5111f3a9a2ee2b94684b3b46e9797bcc4c63ead54ccbc137cb91924126d65caf367d384a432875499b896d6e996cfb74d4bf0c91d77047070ddd8df60b9e1c93279a77e4f2f93a77b6a699ff2c44de8737b55bd596cba18b9998c7fbf482c10ab10524bd2c6347dfc70eb6f952255f2f9e928ffe9f87fc6d33d47a67b4efe401edf21f5607be935fa1c864c31eaab540b7968b179a93c93b90711558852795d2c2b6f214a4128af52849b3fc84c0bafbfb87f014bb69cfcc1995a78748dbea4b470579a3b5914903d3944ecf4e9108cb3f7d64a597f2a5b70f3fb12c637884d4fa2bb682de0d278fdbb58c4b552485dc6d41f5e73f216292f98bea2e419635bb7ff72eec14b8e025e727cedcb5c053c737df37f565f4f56cfffeb9c68e9dccf71be2d9715d80ce7fd7221efbeed7258e3ff07cd24f750528a0400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/8d084610c92d9a24cb1811678b5a80c0.asset.meta b/Assets/SerializedUdonPrograms/8d084610c92d9a24cb1811678b5a80c0.asset.meta new file mode 100644 index 0000000..beb58b6 --- /dev/null +++ b/Assets/SerializedUdonPrograms/8d084610c92d9a24cb1811678b5a80c0.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a0895280196b15f47bea0bb71c46f862 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/8daa21db35e2cff45b8ee880cf58e03b.asset b/Assets/SerializedUdonPrograms/8daa21db35e2cff45b8ee880cf58e03b.asset new file mode 100644 index 0000000..272d182 --- /dev/null +++ b/Assets/SerializedUdonPrograms/8daa21db35e2cff45b8ee880cf58e03b.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 8daa21db35e2cff45b8ee880cf58e03b + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cc5f5f8e7dc7bef05cbfd5c906449960b062c77e32221c9c6c636b6ac620b4bb6ace202a637d37befbd26210152494212484802842424210921044c4208490821f484ffccec8ceedddebcbddb5bbdd3acff3ff963adb6bd79f39d37fdcd6c871cc67f22d3f9afb5ac942d64d96c0dab62bbd84efed7427eace7ff9c337dbd8435f2e336febb82df9bceb292bc297e264786f1dfcbf959136be66fb6b04a7eac95f7cb5835ff7b397fb79a9f89ab35fc7f357f2ad289bfb4862d62c56c351b1a199c44c45af95293ba1611f18a74e3bf17b0fdfc6eb5544a0492236f0de5bfcaf89d2679af9e2bad9fdbc036c968d5f37b95fc9d4656c7656e9512bb3dc55145649ce461a03a0e52c701fc7f77f57747f57737f5377cbeb33a0e4ef1f921e0bdeee06f41e80e8ff787aae3bbfc7f17fee74e702ede7d479d0f73e475d8ee216b843a8e54c7514ae6ae14f4efaa8ea393c4d74bc61140562accbaa963963a8e51fa36a419fe388751e416204f1cff05f4c902617707f7c5716c80b8eb747ccf958eef39e9d8e106957e87d4f5f1ea38511d2728d9fc9981f7a86b93d4717812bd263befb1d92c66b33ccc8e9a63541da7a8e354757c5fe9ba1b9c07d545a7e93475fcb70aa3d1705d3f2fee37a9f3e9ea78a42bbdb2d573cdea3c27457d52b13fadd37f54182de09c73ecb4c543964ef70f5ce9fe817af70a8763a7afbbe203edcf243757c9db93463c3e74c5e3434797ce51d773c974d0f267a8e3474aee5e702ee45ee3336e9dd47b8fabf33c96bc6c1b98c2bd998e9c6e9a75a1134e9741cef52ef358bc2d1724d153a7edc7aeb4fd58c9ad537275fc6739e711cd79349023dedfe792fb894bee274aae2e23b48d27d353e7fba3d4f118753c9ab5e6e3093a6de6aaa366f1298b2f033e55c739b177875ce1939b571a1deb4aebe1eaf8591299fafdf9ead83dc5e7f5334501745ea08e3d520cb3873a2e0c10664fc716babdebb285c2243217397cbb35031db89cee07d4f962755ca28e4bd5f173971d7c9e821d24d36599d2858134e0baf4e8a7ce97abe3712e5d56b874dadf863afd57c93c059c8be3ffd4f553c1b9d0b5c409a7c7d3eafa4a755ce5d27935a1cec5ce7bbd7b01db48e53d2ffb2a71e2d733d791ddb35c5d3fdea5db8298dedd168177b51ea9e48732e71889c4338ea8baa0a7665bee7aee00388f388fe8f0e4dffc5d810496a9f2ba78f734702e7e95a6a8eb5a9668b3424e4710764715b62aff7be9f43c8125e63dd3bbe2d8015ceba0e4bda2de5bc712eb31fd9c88dbe9e05cdc5f9362dcd61bf4e3e1f69eeff1ee892cbefc991fb387ae2faa6b1b943e9d585cde92e7e2fe11b1772275eada46e7bcafd665937a07f49f22aaffd447d7a727a9e35666ae67b7000e3a3f56c4c21ef5b2bab6d923ac2af54ca52bde2531393d555facaf2ec7f43b939067c5b56a75ac5547cd6147ecd9895bd4355d379eac74ebc2e2cbe66de0ba387655f7cf00e7e2b99a98ecc1cfaa6bf52e5d4de9a9db233aeea632c0cbce7639cf0edba8ce1b1cb67d9f74c9ddc4bced76b72367b22e6f1a1d39fd3af994d3e4c88966a9f316e7bc9fd647dba06e6babf66d44f74d7459aeda6f11d0f6887403d7c4b367baf826d3cd8be3298e9eaded7b5d37e9bafc68207b80d243b751609b6f3fb827ce75db6f8f2b7e5ebaa8f294f54e129f81e039713c3d40fcbdee29db6767a9b8f564717d9e886a3f0d18e521eb6c66b4d381ba0f7a8e73bfbf6eb79f0be224c2e81563dd6a4be7a97b9093b2ab481f704dd949a46fec5a44d7efe7bbd2e72cd7fd0b800cd3fd834007d3fd0bd57515ff81ea7976912b2e7b58bcae7d585c39c32e4e8cab7c06867d8e8fb4bc44bddbcf9596fd54babce521eb52735a0efa489d5fe64acbcb5d69d9df9096aa5e8fc031c309eada4043fa0e021cfaab7b572269a9ef5f05e49aee5f0d7430ddbf263e2d07eb76dcb5485a42fd615a5e9718d7c84057d8dafebdd2f20675bc5e1d4dedde1bd57192927b5e0a726f52c71a0fb9435d72cf4f41ae1e2bbcd943eead88bee984a76d5d8dc1c8317368eb6aec6ec84b1eb26e63465b1faac70d6e67f1b67e078bb7f5212cd1d6ef54f786c6d25fb210d786b1445b07e36e113df67d177806daaabe7f37906bba7f0fd0c174ff5e1667ebc3e6abebf731b3ad43fda1addf9f18d7c83057d867a690960fb8386bbe23587c3f6784933ec3dced9f06e65d373ee8c88feaf6e5434ade4825ff02702e8ea35ce18e72c21daec6bf46e839905eeafa74e7fa703dc7f03033b6b78697bb9e7b84c5b7a7bee8e2ff2597ad80f67f6b5cbe00eec1b8e93900dd2679545dcf026935065c33b5b99271fdb23a7ec5c56fb49277109c8be71e07fadfa1ae3da68ea7c5eef55fe64adf5e408f27ccb6227585e30e7edb483ace5f4d12673f65d258165f268d75ec60a4d7f8ec37d53397783ca3ede3dbeaf82d257f1c8befbf8c53f7bfa3cec7bbee8f57f76f8eb11f9205f4d0b2c53b17a610ffa7d4f17beaf85d158eae937783735daeb8eb8874dbb1e9dedba2749a186f3ff29ca7c368dd37d6b6b839897d7c5f1d7fa08e154a9eaedb7683738cc1a414c3f28897ecd3c331041d0f35461499acee5fa4cea7ba9ed7735bcfa8f329aee7a7bb9ed76dfd1faaf369f1cfb31f0139e2fcd958dca42ee2da8fc1353db7f293189f318fa87b47c687cd7ecae2fb77ba0fa7e7ba2e06ef4106fabe6e2fe7b8e2a4e78e2e05e7e238c32557dbc633aefb5a6e9e4bdfe7d4f167eaf8422c8ed3ba8177004ff67cbc4c4f9b566314917cf5ce65e09cdbf418aff6bf7eb7401d672a199783732e232bcbd137ab0097152974f12b00d7c57196ba7f053817b20f7ae8f763f5ec6c57dc66ab779f4ee15ddd9e99eb8adb5c25e333276e63fb79c8d2633c3f77a5a1b659216f9e215df598c1f3eafc28a5c395e09ceb30f601f5dc2f98d9b6e7b8debf2afefd717a4ef097eaf8924bb7a359fc58d8afd5f137b84d323deea7753f26f64cab7ebf72e9a7e7d0b4dec7aa70af067ae8ebe2389fc5d751f3d5fbbf55e745aefb45eabe69aedd2b8ffc8e99c78617b0f8b1e1050ecff1fd9ce7c76b7d7eafee2f64f163ec0b93c8a9f2d0ed15661e8f557dd4c8222553cf93fec1757f31b041f56e64498c0b2a77a9927badba5e07c283f7aff3d05da7e332165f8f2e73e23d41cdff4cd0edb657d551e7114cee6b2ef9cb95fcebc1b9b86f1afffd933a1e8a97119757f5d8f0712cd1de959db337c03d9d7e7f04ef89f3d7417c928d059aaeed50f256b8f8ad70f84d54fe0f13b5bd6a7e2727e1a79e8bac04cfe9b056816b6faa6bab63d722abc035712c56badd00ceb96e9307b9e496a8e76e04618be3f1eafa4de05cbc97a5ce4b59bcdf9296570e742a75c29cf4947ae6cfae30ca58ac7ce0bc26e972ef5570bf3bd0535fd33260ff7607388aeb37ab34782e3ecca46960aa1bd7b0f8b6c61a755ceb4affb58ab14affc93afd751bb1d13b6c2d97fd459d9fc0e2db7127a8fb6f0179e2fe2db84c6338eb5cf159171fae949facfdf257757cc83f4fa6ebbbb755f827aaf06e05e7e2b81ec8fe9bbab601d8c47a75dca8debf8dc5db289887886c02cf8ae3492cbebf77929376539f73c9d6ef6d56cfdf0ece45586a7c20b245ddbf435dd779b402e8b0055c13c7adea9d3bc139d761ca8b8efd4cbd0709ab52bd771738876156a9fb77837311b775f1cf47aad573f78073cd18cab9d725c7a557a406c4518f553ee66d179a6b6bff7b930aabd189fb145d4ebd999a3ce3b517d4f1ef2a8c6d2e6e6a4e51d61d7e65bfa1646c67f16ddbed0ea369dac675d9ff7a9230943cf60f75fca79257abe4df07cec5f1641667f3115537b6dabe2e071bc039d76bfab92e39752e397a8e56a74bbdba7fbfeb3d3da7fababaafc605a7ebb1f037c0fd94d9768ec8f9f365ac9af7c51b588e9cec17bdd054ddc0f59bc91dc0a55f81f8257e26cb609bd97efe6ab5c90b7b8df4f16e66f92ccfe8853d5cce33e9d017cadf15fc895a29f4c1484210df4808422857c7ff550317f2267e7da9f440174ee4b5fc4e365bc98fe2ad2d6c06dbc0ffc54b59cb83ad632dfcac9cff6e90f2b670b5139f4c1625e16eee7ea794cb74bce1ebf9150db4819fd7490dcbe4ef3d52d36aa9fd727ead59fae6ef64dbd8027edc27434b8c7b23ffdb1466b94266d6d1ec148f5d775cef75322de2b111dae7485bfcbf14698f1411e8bb88fc217e3ae5482f878b1252e2ff183a858ce8bc2f573266486491b86b792c479cca8677d03826c6d06cdf0eef4256e01917331991dc23650c6229bc75fbe597edd874edfecef151cb673972c87e5492a8798115f2a27266cd4f143a77ee942b1475e38f98f04b37a4b20ce2779eab95cff94f802eb2f28b4f0039f45ace4bb5125079ae91cad749d5dc9129e1d72bb8781105511a56c86016c8f7aad912558aee627be51309e99a2b94e82a9326b1e24d163d2c713a9812478e1594b74bdec0966f79274fb7d658c4922747b6a68679183116966c6675506d2d9dcd9e7ca27867f9956f1fea6c4e971e325dd2090d4b998ea694e991e96c93bc9ef04a979eadf18aa58bf83133ec85d876321d30829d4c047b66dab6c5bd5d524a057fd63f43e12c35cd5df49801f6418c30b90a18c2ce0684b902615f8356ac73779756422144721753e2f46a9f4a393de316a3e7435d083aa3c6dddfb34ef56bda5d4df4a45be516527abaaf58c63b052bf8bd0afe7cb56c788aebb0822b9221c4fa97f16f789315f32a47bac91aa90e945427809e6f50cd30e2dd0cc47385bd0e3298812ce3dc99a13f9e19ba63d96c70d06cd603933c24a8e49e98e4a14125f7c2240f0b2ab9b729db48afd48d19c936b12116fdd702feee761e993db2dfdcc2df370dc9786797e12967971132bb6431d340913f8db06cd2c79476e2e2489392eea41b81275d5f4cf0a88082fb61d6363aa8b5f537599b8c4713a9b5ade1d79c01b5c5f26eadec5f64b365721ca742a6b1d84c617f6bdfa349a631f65e91bc5e2ffb2bcee8ce2af97e8bd4cddb36850bdf6843e9c8d08a728cb451e13691d97860163d002bf8b3daa0e01f68122ecaecb12cb1e5fc39ff4910de0b173e08d37c9c41f3abd777f0a5f9602cdb8c0f9a6d8660922704953cd4942165fe3f2bc3c5bf79547ea9dc94a59a15f396dfc9cc194ed5e13a062e34d2c3b2a5fc5823b510d78516c947f3bd33eb4466e846cb526cb1b1ca68af588879e20eb2b0982c0b8b6c8fc2c2a48d5721a159c4170de6a22a2a43b78b0d568c0dc34a9a298692e6655331e651d20cc7b2ecd4a059768449b2c8b2d30cb69a2b6c55386df690f57d4238513c9c91a6a24116fda7b46bd1e0740f85bc1a3951e6c85bcdc496497ba5a9eee006bc47194e397fa6918751ad8c3c486170a4a1e68e78d6dcd9323b1c934276a08c15960146992c49f4a385a76bc2d8aec82ea5bcdbb8906d96d970b7bc2c2839a95b2b1fad65a780d64482bd75c5ed6db4491bd13d11feb8499bb30371c14760826704143c06cbe37941f3789649b2286d846f6fd016d6584ced82a06a8fc34ad4998612f5b388bf12753c26bcd020fcc90efe844fc0b2c2ac546cc4c3aa276282679bf298787aa16cc767f1ffbbf81b59b2752e727f96ac0c63a54116cfebb5fc2f51614f07cf8bd912678ed98f9e9330a39813d4282663e936d7906eeffb4cb72826fc2883f0651dfd099f82a5dd3c53da89d244d41ba259b25dd56df1a561969cedcf920e1e2d7268ad4aa65c934cd72c762a2fea4ee3c766fe7496ac07eae4bd2cb98360a32c6bfda4e9544cffa34dfaf700fa97000dfd8438cd14a2207c8ca1dc8af82cb7a69b848b86cfb10c69f8cc67e9347c8ec4b01599b0896a6b316fbe88966b8b7cbe4c1a40756b5bb9aa8d2ac86c835e39b2bbbc93b567834cf416c4f04393fc3bd6441161c7a65f8334bc8457bdbf2113e19f1f95ab6b32a13dd6c0cac10ad545864235e2a750cdc5f2c2622c2f2c492b2fcc30d99c1c456968579bc37354a9942d725ef006bf5811d1d1ddfb97c33c052958565be9384dee50d324778875c83589c254cc906c055bc13af0659630e78965324f6452732c5fe461b5f67243adfd78677fb576bec964e5085a63bb9aec22292113667b9cc96ce5485f610a89df967a8e915e934db250ad5285aa53748f915bce34ca6ab39a5f17052fbc3f4d6e8922da4b4b24ef7a495ec4af42f67b31235f218d3cd3f1c40cbd00ab00561a2a005fadea9958165a65c8429ff9cc428598daab83aa3d0b53bbd8a0f6812efed49e8d092f31085fd9d59ff03926e1a26016cb9b82f410e7628285d7474273537454753fa1d2d553dc2afb0abaff5725afece7bf85075da51491253d60f5b4bf1f2d8fc2d89619d8f6f3c9761e86a03c20dba34d828579ae4945b0c714e93126c1fd98b321a2b1fd255660f96f7f1d6b0a47605f67c07e874fecf3b16cbe3e68362fc2249f1854f2024cf286a092176292370695bc084bc44d8644149e2f7e12713126fc2483f0729fc297601973b3a96c9ac8441f39d64875ba4fb1718d0a5623a534f2bff7a83ab72a6e7c448c79d4aa4eb39f7cbe14d3738b494f67c18d706e126d8a0a398626422c663b7c85ba0c435f61407f894ff4cb31e15b0dc2dff229fc388c57a589d7b024e95a257d62625767f0ab7e38aec0b4a93269234e63e9e6279c9518d26a03d25b7af843ba0a8b448d2912621ecdc13797235b2d07fc2ad462a13db21af78f7135a6c13693064e2b54370c4ad26c16146348b71b90bee41369095622d7062d918fc7d43ed95468f6f4a77629a6f68ea06a9799248b56471d435a1d62ada5ff56473916ce4e2c9c5d6985b30623d51094d45a936491c0bb0d093cbf97bf043e0113de68107ec0a7f07598f02683f0a77d0a5f8f096f36081fd5db9ff01331e12d06e1553e856fc084ef3108bfc1a7f08d98f0bd06e10ff814be0933f27d418dfc244cedfd06b507f5f1a7f6664ced5382aabdc52039473ae36472198fdbfbc9df4a07b16f476a0ec662c720d3129e64e163434a15a6741135f46926957c54e55b316b3add604d877c66824a4cf81906e11b7d9a6a1526fc4c83f0833e855763c2cf3208efd7d79ff01a2c31cf0e9898db30c1e730435b70bab4ce5d328f65c96fca8975b03bd527ecc45e04d572e2ba42da7e6cc0494f5c8b85d559ca7a1b954dd7716bcfe657fd68bd1dd3fa5c93d662e6550ce2c6dacd4e57d2e98698fc0ab3d864d5ea9eec4baf5acc06ce33d8c0e33e0dec642cd2e707b4811da67256fa25d69296b3981f69b91cbc171b21d4484ba9f7ed75ea5d265f9072997c5096c9629e9f4e57acfcae3325b7685b5fc890b6b5d8d4a08750d957dbba1eb3d98b0d365be0b3dcda8909bfc4207c9d4fe1bb30e1971a849feb53788349b868d6885d7802356b76636a5f6e50fb399f6a37626a5f1154ed264ced2b0d6a0feae74fed66ac6cbbca54a08ba7531914c99299b2455650a28a2961ce425ec757aa825fad925e54dbe57989cc9a626471abac009cfd0936cbc18f6d722eb1915fd55e57fb99b3c22b4b36c79cdd5ab2645150a57cf176c82b4df2a96a108eb9c2a9551527aca2fc8e6eb6604974b5218926f84ca23d58125d13b0fad98b09bed694f6c29ba19c9f34c4a58b9ff0f66105eb7558c12a3697f43f68b11f8bd70da6788964dad03a52ead8ef269fcda253b0f4bfd154b2f84cff5331e137198477eaef4ff8012c4d6ec6d2e496b4d2e4345338a2d0bb351523f698e73b1d137c5b40c1676056747bc06c772626f88e8082cf320916697f274bf4ed1402fcf8769e8d59e15d062b9c3ec09f159e8309bfdb207ca54fe1e762c2ef31086ff029fc3c2cffdc8be59ffbd2ca3fe7634673bfa94c13fe7f9bf93f314854274b6b5dc7d6f25258dc69905d45511ffab1b00b302d1e306931b0558b5cfe5bd4bc626ecaf10e4a5f8783980e0f9a7418a074c8e7ff2b656748bcb38fff4e5f830b310d1e3269d00da4855843245a467e42bb0833df870de63b6fa03ff3bd1833df4730f3fd425ae67b0956347dd1503475f459345d8a11fa9281d0473e095d86097fd4207cd8207fc22fc7847fd994b63e855f81a5ed57b0b47d2cadb4bd12cb0e8f7b154d796d5c345d8569f18477d134a30d8ba6ab311dbeea553415b461d1740da6c1d792154d27c8f0fcad77b81633dfaf1bccb7db607fe67b9d49b830df6f60e6fbcdb4ccf77a0c99f8e24e90e6d80d189d270d74aef149e7468cceb7313adf498bce4d5824be6b88c43b3e2371b349b820fa5440f4b7605a7fcfa0f5a221feb4be1543ff7d0cfd0fd2427f1b1689a70d9138e43312b763c29f3108ef34d49ff03b30e13f34088ffa147e2786ff4718fe67d3c27f17669ce2eb3568b596dfc6d5dadd98163f316911abd6f2dab05abb07d3e1a7261d74b536b30dabb57b310d9e3369d09dc5aab5c572c26b97cf91aafb30037ede60c0effb34e0fb31037e0133e09fa565c00f609178d11089ba61fe22f12026fce706e1cff914fe1096dce2234c41ea858731ad7f69d07ade707f5a3f82097fc920bccaa7f02f60487e65ca0162cac07b9c3e712437d898bd336e6af728fd17b104fab521819a7d26d09730e1bf3108bfc1a7f047b122e365acc8f86d5a45c697b148fcce446884bf487c0513fe7b83f0753e853f66122e86815f49a5c8f018067edc203847eef0d33e73f4893b2fb5ed1cfd1f4cbc8c73f4e2eb27de73f4c175c5e6e89fc06ce98fa6dce6d396be6a122ea6725f6301a772bf8649fe5350c95fc7ea87d753b17f8f42f31b06c13972e7a99a76b1ff207ba2795bfe1b295bfe2169f9533d2c3fd8ce6de694f826663c6f06359e6f61c6f3e780c6f324964dff62c8a6ef8ef4974dbf8d692d3e7196d024129b0214c9ee50b55c96625ad094259b4b593e7dcfbe83e9f157931e624f157ff2bf8bc97f3b60ea3c85a5cedf0ca9b37d94bfd4f91ea6f53b58ea883cb25d3511757a54b7eef791ae67e0f7b148fedd10c9bad1fe22f9032c92ff304552e440ed67e0b467e3dd34fd44eb692ce47f9a42167d72c7ab26a775d3f09cd64d718a7986a8627ebd399ec13478d7a4c150a3062be55fcd720701a7d59fdebab11f62bafccba4cbc8147549dc55da8f4e3f32e9240cef3d83e15d72843fc37b168bf0bf0396093fc604bf1f50f04f30c1ff0928f8a718e70f0c9c1ff1c9f9394cf88706e10d63fc097f1e43f25140242f98048bd2e7e354047b74867e66122cfaa19fb4de70f5433f65e9f4435fc4b07f66c0be6cac3fec3fc722f15f2c12ff4b2b12bfc022f1b92112077d46e2979870b1699b5bf8e3e3fc097f09334cd17a49284ec562bb5206b789a9926d6c5d9047d91459e1ed54bfe3572164c933a7fa992eb7bf6894b5be53e436b13ab941461383cbc09d4125b1a0b9c1d532d0e188c124a78aad692dceb364615ee5d3b5ef57188b0e261662d317b8d79cd3ca8c55b0b125d97ba586750c3acd6e97555056520979fc69bf2b377e8d194c4783c174f26930bfc1b254a70892a53a47d2c9522f6391e8628844d467247e8ba57457534a0b3775f310e90635b82a56be88de85b34591579a463def4e91eea8ceb06accaee373c02e69197a0835fe5eb3b4ab66432eda2a35dc0506601dd9bb54efd48f7dfd0e4b9a6e86a479cd67d2fc1eb3afee987df548cbbe5ec122d1d31089e6f1fe22f1074c782f83f0e77c0a7f1533dede26e315f5849fc4fd2326bd8f49bab8e1147339696c92f01a86a9afa9669be00fd39f30e1fd0cc2fb4df427fc758c52ff48b0f6dc1b98e00101051fc2700c34e078df27eb374dc2c52ae241a9687d0017fc670cc76093350a63cff145e52f98fc2126f962e3c2c4d9b455b228d53bb1c4eef89bb17a0bd364a8491321410ca7fab582bf62a10c3385d28331e30a1d3f21be6d0831476e762ff6fdc8d402f354bed38b7cbd2a22aa9e7830b2b2310e178f8888e1e2c10931f3fc9c2d42ee6fa6b412a72323899fdb3d6ed5595d6f19f57c8784a4e98c27cd3b98318c321983d80252b85a3893c175fc2ffd15f45a9fa6fe772cdcd1a670fba2e1ee54ad7d3f61ffc3648ea3336d8e0b653bad310d733c82239ae842948d7daa0a3146afd03163fca7899bfc98c3e60c72839f112e93db27d6f22bc5b2f5ab3fecee9f6956c4ef8ed66325d9f109314f573f8cfabba69c22e681c64502ce03fd0b933c3ea8e4f730c913824afeb749b268954c8c04ff10c7fb58a1342960c3eb3f188fc941797c80498e0695fc2126794a50c91f6192a70695fc3126795a50c99f6092a70795fc296674470634bacf3095b383aafc5f9364d136c84945658f0ff8fc0f533937a8ca9f63946704a4cc2288ca7941558e6092f3834aee80492e082ab92326796650c99d4c9285cd1506b4b9ce98cab382aadcc5245998d2ec8036d715133c27a0e06e98e0b901057737091613b347a522f8102eb88749b0680fcc6b83f6404fcc348e0e6a1abd4c92c5f3c7a4c2c363caae3706fad880a0fb60a6313fa069f4c504170514dc0f4bbd054153af3f967a0b03a6de002cf516054cbd8118e4c501210fc2042f09287830967a4b83a6de102cf596054cbda158ea2d0f987ac330c8c705843c1c13bc22a0e01158eaad0c9a7a230d9273e4871fc5be6d9977506d8b8ff77a0f4dac4a252d26e3c4466169b13a685a8c3649161bda15a7a2f2415cf011985d9604b4cb3198e0e3030acec2f27e69c0bc3f164bbdb2a0a9370e63511e90c5784cf09a8082276082d706143c11837c4250c8933095d70554793226787d40c151aca37562c08ed6144ce30d01359e8a69bc31a0c6d3308d3705d4783aa6f14901353e1213bc39a0e06c0cc596802872308d2b026a9c8bf50cb7b641cf700686a332208e3c0c4755401cf95811571db4882bc040d7b401e89998dadb82aa5d88a9bdbd0dd49e85a95d1b54edd998e493834a9e8301d9d10640e6626ad70555fb284c727d50c9f3b04cbe3360263f1a13bc2ba0e06330c10d01051f8b09de1d50f07c4c706340c14598e0a680821760f6d61cd4de1662925b824a5e64ea3467f1d3c836d61e9de6b5cce9288b0e6e7e1b7797f7440c1f5b1d2be22a3e864ea39140097e219f42dd1b11d3b2745a601e048b4d76255c6af6453c9c1edce6350637af2558a3657fc046cb5293dd8e63ed36d8733c0fc3d98aa2513e21de6d5beb3dc564bdc2c92492ed61376da197cb86bd0cf95469c8d40a61e6bc0c2b260f042d269763e359a7051ccf3a0eab8c4e0f5819adc0589c1194c54a4ce53303aabc0a1b293b2be048d96a4cf0d90105176390cf090ab904837c6e40c8c7636df9f3daa02d5f8af1383f288f328cc7050179946339fb60c09cbd06abfa2e0c58f5adc5205f1414f20918e48b03425e87b1b824208bf5a666c0047e1a119fd4b161539e0daa526fbb86c0a52666c6daf832591be7303f1bf3a4a32f561f9f684a76913a97a792ec427b44f0069360717a4524d1f95dfff8717edf88959257b64129b909137e551b083f092b1dae0e5a3a6c364916cf5f934a6a7acc8e6f3109168b40ae4d49306e261598e0eb020ade8a41be3e28e44a9364b156ea865454f6582b5585a97c635095abb1cc78531b65c61a5300c29e6e4e85c9abb8e06d18ec5b02c2de8ec1be3528ec5a538537919f46c4177adb63a585ae30fcadaab82de54aec7659890d4f885d2a3a6015d3c958097c471b94c03bb0c4bf3368e2d7616adfd5066ad763c2ef6e03e13bb196e53d11c3a2ae45f2b4941b4b195bc456b4eecdb39a89dd91f6ca04dea1923e5b2eff5aceef17f33b3ba5498b2be6f68bc927473c0d4d4b18fe2ee62ce8f7b70dfe2e2c96f79a62797e6b2cd7f09694c8744e06ad977f2f67ce7ec98d72eb0027832e6f7d7271eb7658f11b6e342a1e65ccf928e842d622e325e4c6d38b4910cffbd3039354cec4c2b16df26e3c539859ddbcd772397e17093660a4efc3ec0986e8c4299fbfe3d0dac50bc5cddc361a659a3bb12d575b90b9b58dbd8b5f6f2b7bda8dc5f27e532c8f71c5123277e2b984391fc8ac30587d7c0ac13b5e7905bee527668d58cc1e30c5ecd894d2af486ebb51cbf462bae02917bbe3276e4d58dc1e34c5add015b7553275b6ab9889b37ded1693662c260f9962724986cbb3d83b6283953a2e753f13ebea63fbb635f9b072c80e8f85a84b5a643303967aa281d576655b0b46fd6113f5a294f2c64ae67c01c086526d0f16bf474cf15b496855e2ea6e198c8895d31cae9541d7b25358055a92a493aa7bb1587fc114eba33d638d6b5a2ae3e26c34e4c451d7c6e26aa52294982fd24fcd7d58bcbe688ad77adf2dbb327927be6d6792e05c2b692d071a797d20ba3a415a82e9a4f37e8cc7974c3c5664a4cea6aecd4fc1e2fc28d64ef16703da86c52e239552104c67bf16e12766a76231fbb22966739198ad91f9b34eb54d9caeb6eeb5ac55b9b82a213568fa2807b0187dc514a32584a5af4e5567ab8eadccd9eab7ed627a1a16d3c74c319dc7b051725349111f03f8450dc164994ce546d91baae435eefe368cd5e958ac1e4fa54f101f2e6c21ac91a9d0c89f15f9709b47ed172fa3ed62760616b3274c315b98b4e44cad578097a15e7dd6744bca33b1387ed514c7a5a84d8a16ef56fe908eabb3ff52ec1b47de658959665bd784676171fd9a29aed5c4bd8766f9a51a41c9e91dac95d65edb5af2b44d7f381d4e67639cbe6ee2b4a6dd7a59de8482733807e3f00d1387053ef3860d39e25c2c86df34c570b9cf18ea0f779a53a43de27b1e16df6f99e25b4a68d94d69b435da82c0f9188127dbaa0de2946d45a005421fab0bb0587d1b1ba1f01bab25f289c414729739a9cbf513bf8358fcbe638adf51015a8ecdb236121b7fd5a87e1e1eabf28467fdc4e9422c4edff59766eeb2077e4a2599e551d61e1761f17b0a8b9f9f3ea313d7a5aa1d11bb2b663cbc5b876dd572bc188bdff74cf19bc0bc4705cb39610a2d2fc1b4fcbef7d89e9f54284b2b15286def522cd63f30c51aff505a79eb543d2c23621bd78bfab0c5d8164b6f7cff324cefa74d7acf49dae35a2ee706c5e8639ddcb67c31ab979b1b26f67fbd5220fd1ee4e5587c9ec15a90de7944f4864b64abaac950afa63297205a23356d18c32bb018fe30953eb2796e60b9b4bdddd22fbf4e59657bce0f5c89c5f147d808552ae300a9c432bd1223fd985e85c5f459534c97a5949aee991e271fea78b767ba5e8dc5f6c7a6d8ae4b9aaeb423e3d463e6d760347e62a2714280f6ca02e678f796f063936b24cc5c0f2d93739c227dc5bb55fcae96d1e4f156fc12353f2caec558fcd4c4e2c4366051cac4f7d62ac858985639f921721d46e43913914a8f1685bbcf10df868ab78822d9e74a9d4d7c8afb61d116adaeeb3146cf63733366fd127de0dbab8f760316a317b091c0e4e338a9d481a98c06f91f314abfa6b811e3f0331307fcf3ab78bf5b6f0edf56a5f94d98c62f9a349e94b46e8bcd7856cbabc223a86ddafc37639afedca4e92cdf258bd6bc41b69b6323c714f9e5162c2ebf48c50b106b292eb6ac95782b16cb5f621e05feca39a7664cbc9be825a2bf5381a767a294223927256a643f71be0d8bf34ba6384f74a56c2c4ceadc743ba6e7af4c7ae6b9f484e5935be7a54ae754dbe5e98e75de81c5e0d7a6186c647463f47a74cd6b960e5a60aa394fbfe387ca9d1895dfa432cbae43f453aac46286e5b8b6294deec262f6b2775bbb7dd2db4f3aa79b03eec688fc3695f106bf6dade03dcef4d3fe1e2ca6bf4ba5b45a2853d549c166308eec5841212b48123f534926def213837bb118fc3e75df5811a69f9c09e3875d6fab14ba0f8bdf2bd8f8b9778b26f69919b78efa333f78fec23e51e39527d3abedefc762fd8774c66d9d542de30f6f654edfad92b5f79a8007b018be9a4ace33134eaf9d90bc87d395ff8b44c482b5c5528a330abe4bbe235a8539a2fb12c96dad19b25b4bfcecb8da21765d845fcf5343e489f2d6b25d2cd8f396f0470ea74b07e6fc4c569fb5732ac4480d732f085c28e5d7a9f2465b6bb624e4f80e8b858ed9bc15582bdfd24b1b93c5c254cb65837a0ec62e799c36214b1523f26b995016273d59903edc62fa9a48d5512a553be488afb0caadafd2b1a6e45afc4984d6d16c434313c8c2dc61d2dd11b05a8d1e44c4ce149b653025b2b38b3be6270dd9bd4bb83be423a500dd1e4c2a6e0d28024ce2864b73739c231b993365f00a97d9b573875c9122af5362138b7917c9765f0307e7f89ce93a0703d8140a84872231846f502214df3cd6ddda6572005c08887dd3b998ed0805b047bbc5801da2043688391f8acc65316fb03083ebd73306ee4d4a70030ce084c09dfc253139de22af568502da161683f6676a6b8bcf9e4bf8ef5ae577a8bd6f1cab0b03b868af18b8bf50821b22dba34d29570b6180770da814dea284d71364d5e2b8119830601a352a86e9af9498ba034cb1251361407470480cd1db94889ccf2a37c8f9e166de8f70e66fd7f02b55eaef30e07a765c0cd7df28717591b89a4255a477ea1d83f30e251cb1a152716b1749cf0b3ade3ba5b28e6c919e01a2562c5123676100f83828affe4e09b01b28af849a62aa340c805eec1f03f40fea02bd58ce4dc47670094783f400b0a17f66ca86f442a13000ba65600cd0bb9480c47e72bac5be98ed93b16e696d660a2fca2ad9082d95165625edad8e07180688e24743fc1725c4d18cc5c113236262017475eb56a155216fcb0f026364ef51a2ecadca346d6ffb558db94676b7c380ea0650b6fd3b539d6dd17784d3cdbaff18a696d9475d63e0dea7ee6c43707015a1e30b2a668062eb25c300ef001817fb0f25bc5ea0468d2d8a7396e28601d4e3a075f601f550f52a99fd76b8f67859c41f6f94218501d8960e31601f6676f030de81a62a64e5591d18e3ff887ea85a342516c9a0c3dcd078b6730cdac7d4d6b6584eb0b5c8c0639b2cc536dd6ae26db85a1e5e18c01d02e03ea104d70764d3b04e88082f0e0deb53fae93767a6dc19540c773f601eb0b2cfa847cf4a39b4852cf5fd0ac300f0a06ce476edec12ee76af4cdfd9c51f75dc2da72f73fab40df26ab3aa7fe3dc74a6f047acd3fcbfd0cd269af6f846346939174d798a38ea7b7a2f9aa6af4834a5566734e08045d4870350d45711184db92d13f5558147d32a4fa2bebad8515f0dd8684aae2c515ffe1b51df3d5b93cef88c7d3461c227ead91d8c1a87f0a3c641d928323d19f598dd8d2223e0d124a348d1b4e666a229cc0ec67c48cdbe9fb9c287f47fff9fbb77e60af7cecf0504f17904f1e3b4275807e2f684b022c79b5794f1de7bf6cce0b5ba4b8751093ac47f6944b71b4cda748f6b59f4492582e9b42e3a03978b884d38f342897316c0d9c1269cf9a1c4b916e0ec98099cdb50a050fdcd6c262ba4c3d98b0ae7c32c86b3934d380b4289f35a80b3b34d38678512e71f00ce2e36e12c0c25ce1f019c5d6dc2392394388b01ce6e36e1cc0f25ce1680b3bb4d38f34289732bc0d98312e76085b352752bddebb1e15adf5c3a909da940fe0d80ec490972348b0d52a43a60249e6f94cf86af295f04c0f6a2043b86c111a4d44750c30c770c80db9b12ee10e6dded84e2444d4f86b22b15ca4f01ca3e9428fb2a94852ea0ced8a278880cde082a788f01787d33016f76e6e19159def3005e3f4a784393d4e1f19998b46f4e06f31d00b3bf4d30678510e6df01cc0136c12c0821ccb700cc8136c19c1942987f053007d904332f8430ff0c600eb60926e1d40519ccbf0098436c8249d82b2783f92a8039d4269861ece1fc11c01c460973aa8259c71faa9347f35749fd7da596d07e0752215f03e631875322ef21916f972e2c8e4bcd36092f7c431abd80958e68cf218df8bd1909adef0015ca6dc0fa4652a29c9c90e12ba4b0d887e617f0ffc23af7c841b716e6b5ad22296cb2d2751a803d2a13769b5a55154694a34011309a12e511862220d56dd849d11ea4423b1a58e911d4565a243d8677293f49b14ba6fe7eaaf0a8d4dea38e4f6ef82aaa4ec04ac750a2d4cee333f8ff7a157885acdf3733fd1981708e7c9e0910666502e1acc30ee1d701c2b1940807b2d8f49a3eba3f6d19d669b4af0288e36cf2de24759921c339185432e36dc249eae34186f3288073824d38493d90c87056019c132971f66badb7730fa3d9cad7415939c91e9783392144390858e2e44ca0843e472b79237ca95ad654c35fda97891a9c0ce51e609551fa816238c4b699ed90e816c8c5513b9428f17df66a2e2261957b08bc397a03985332d1ff6e968b2f9b5a8784f5ca317d348d1ecda09c6a23437b23403b3513131aa9babf12969f64ceaf470198d36c82393b8430670398d36d8249e89e4006330fc03cd22698848e336430a30066b64d30095dbac860ce0230736c8219c6d5173301cc5c9b6012ba2790c11c0760ceb00926e13c0f19cc6100669e4d30095dbac8604e0630f36d8249d8032283391ec02ca08499c512c78ffc791c11d6ef641e4779604c69667b7accb9078b094b51b2a1e249c0560b6d824958bf93c1cc0130676562dc5d8c76ee61fa9ba1199ae825c33704e09b4d896f38c097e8c82584c516a5867922e35900744e269c0f720f3be7833300c2b999405878d8219c03101e65777388705493ac39b4043487e665ca3d2636c5066789c827d7c8262d4e07367ab43daead615cb73617a03c2653b578b2bd43c3ecba5508801e6bd37e32334339d4711fc039df269ca48b01c9705e0a7016d98473562871be0c702eb009676128713e09702eb40927e996ba643897019c8b6cc249ba072c19ce5d00e7629b7092ee504c867303c0b984bae599da1efea55235f11501c296e7322aa03300d0a599d8f328dfd57fcfc0b007d93ab41d00de324a782359aa4bfce2d7fb12ba231ca282ba1a0c762cb7112a618f9d0cea2a00f5381ba112ba749141cd025057d80895b08627833a14405d69235442770532a80300d4553642259c0a2683da1b405d6d235442670532a8dd01d4624aa8f92c71943e7eddc64216fbde8f1391f8af07c57f6e2cf699a672d9a2d5c3d58489904d9508c2e0742294d8b33a2e8c3b79f601f67cbcbdab90089dc4c826f47e06acb4d49e6dd54857bb93d9e97e00b3cc269861dc71f67c00b3dc269861dc71b619c05c6313cc30cedcef0530d7da04338c3bce6e03304fb0096618779cdd0e60aeb3096618f79e5b0560aeb7096618779c5d0d609e68134c42574632981700981b6c8219c6ad570e02981bed76bb0de3bec7ff05783751e2edadf03abbd8d4c95ebc23bb9672eb15b2cf903100eea44c6f7d9afab04718b75e1902c6933667caf576951cd1dce11af15cc45f6b942186d9f57638b0d52d9440fb7866f2263a743da8d07500e82adad3a33efc2bdd0702945b33b1ac507ce1f2f059565802f055dab1d7b6337bd4202dd6991722b5cc57a9d0d6800aa7caa67d3b493b936496da01e0acb609675e2871e6039c3536e1cc0f25ce6280731b25cef12c7161d762b68f09d78516a65d6b8bf9eb554c74234b255867cbfdbaccb438fb53411e002aabed36b984cf0ce5c66a0f009cb536e124fdc02319cecb00ce936dc2392b94387f0770eeb009676128713e0570d6d98493746e9d0ce77280b3de269cf9a1c4b91be0dc6913cebc50e2dc0870eecad45867996c55b670c9454c7ce469ad5af25525977c55877aac731300da608f5f6718dd15ba809ed2ee4ccc63ea7dc09c45885b6557533f14f6ed832a805d36666211e2e1f4299379005e93bd1ec6841510d964db9d006d7326ec7256e6ed926ce0f87100af2513f0e6641e1e99e5bd00e0eda1af5eb61bf6542ae34c2a59a552a846ae7017436fe16bf6f40430f7daeb8e4038604c66a7fd4133689f3d9baa85d19b780ab0d2fd76cc619abe174c88966c9f867260a5a7d8344b44ea7648569e8e05384fb509675e28712e03380f50e21c9572c65fcb9c35c442543eade3c2de0811d64500eb6999e8a1a736d891174ab7ed3200f3749b6086d16dfb0400f30c9b608671e1ea7100e69936c10ce3c2d51200f32c9b608671e1ea7c00f36c9b608671e16a1180798e4d30c3d8d53c06c03cd72698619c093a16c03ccf2698615cb83a0fc03cdf2698615cb87a348079814dfd74d2d920ba616480f3a04d38499b47643867039c17da8493d4f7880ce74900e74599f88ad14c76b87dc5e8661643787126bcdf930fc425ae222ae2421be5f26ad261b9cba886e54e04767a0925e4d10a721d7f4800ae56cb0b628b0ae28b01e82f4708966c59c11c00f6d24c6c06a0c1eacfebc54f1f7b35a7c2d8329d0cf05e6647e1b08c33aa979596a8c2aaf8dd05aaa068a2853c860af26200f9f2f69c4eced846aa07a850be092ab32b28518e952897f3874a2530b19e7d8f7a3d56246c565fe85a20b74fdda1ee2fe1c76a2e9670930bb206577700f84a7b9c69c358b6be0f505e4589725012943aa6b4ce38544dab0a507a5e6df776408443d064db011d09f05e63afa32de18c28991bd96f4001706d260a00acde8f150084e5285901f036c0781df58655256ad8442f46582e2d5364fbf0d5e5fd00b8eb33617fb9ad3658251bf6ce7af7b06fc3f23580f106ead17b016c910cb85dbfccb5820a663e80796326da97b91e7df9700fecfd18a0bc291363a30587ddd8680d4078732686ed84352e9675748b54427c86bc5266f262b6570e7234b226d9406a60615e935900c0de628f077d18bd97960294b76662c55181ab1714e6babb11c0bbcda6b5eb3329fbe2646bd76f07386fb709674128719e0b70de6113ce59a1c4f94b80f34e9b70168612e75700cebb6cc249ba472219ce4500e7dd36e124ddd48f0c673dc0798f4d3849bdeac870ae0738efcdc456bd6201d6e1b355ef0280ef3e9bdcbe483f35468673049894b8df269ca40b60e8ac13e07cc0269cf9a1c4b91de07c9012673729a05a7e83b59139ae32e173e1ea02cac68728714d667e3e7e2b86e15aa448f8915b412d034e070ba9606703d80f676250588c682e656294528c656e93c3c28da11ebb6c00081fb1c705268c0bac078292f20b9428073331755bad661e1d272d6c028df0a3246465683760935fb4d74b238c9bfd5c07d07ec99e6fb7e58772ddfa0f01cc476d8219c6999f9700cc2fdb04338cebd69f0630bf6213cc30ae5b7f06c07ccc2698615cb7fe3d00f3719b608671ddfa0f00cc276c8219460ff66f03985fb5096618d7ad7f07c0fc9a4d30c3d8b1fc1580f9759b608671e7aedf0298dfb07b8505619f886c85450e1804f926f52088d77892a37aa174f022ac8ec83ec05c0d407e8b7ef15f3c486734530c74ec64c7c981e306cf69e0307eafb52328089eb4c76b338cddcd2301ca6fdbe49e3093b28a22b3cc2f019cdfb10967412871de02707ed7269cb34289f310c0f9944d380b4389f34580f37b36e1245d864a86f30480f3fb36e124ed2d91e13c1be0fc814d3849b78d26c3590d703e4d89539ce8d5bde19ba5ec0b303d6393d5cda41c7327b3ba3b00ce1fda84b32094382f02387f6413ce59a1c4f96b80f3599b70168612e71300e78f6dc23923943817039c3fb10927e9f42f19ce9d00e74f6dc249ba0b3c19ce1301cee732f1dd21bd61a4e0d0221bb4ee6d22dd5eef8443c3644eb19f01accf53629de4c2ba95253a1aa6ee9248b9df1115eacd609ae3854cb870cf6687dbbe1edf02d6fab34cb8cb6a6b6d92f6278a80250a5eb571122ebc1bf21600eb7cd11eeff8307ad17503287f6eaf5337e19c3b5919fa2828007e91894d5366b86c35cc9f693e1ac0fba5ddfe20842e8a64fe205341b67f29130d7eb8059a298b87bbaeff09b0d65f51e29ce0aaebeb185cef66decc7ca97a39633b6f4fa6c23c1258edafedf10d09a3bfdd0a60b1bfc9e4370d44c6af72ad933bfcbaaaff02785fb669b53be9701f19ce8e20e3ffd6269ca4e353643867029cbfb30927e9e82919ce5280f3f7368d9ecea45c7248367afa08283b5fb10967412871de0070fec1269cb34289f33580f3559b70168612e74f01ce3fda849374d32a329cc7039cafd9849374f53b19ce5300ce3fd98493740f30329c9500e7eb99d8e06f467b8c8992f5d9df00f8dec8c480b208b8465aa296bd533d123e781100ef50fbaf80d3954cf826df7a80dece9bb6800ce32ce6bf8145fed9169084931964200b8145fec5169084031964207301c8b76c014938ab4e06722300f9575b40122e612503793c00f9b62d20099bde64204f0620ff660b4842af0e32909b00c8776c014938034906b21e80fcbb2d2009f7a12103590740fec31e6fb8306e83f6398ba1fc27750f3bb6e5b350b44972d826f78815af85cf65ab0f80f76e263e64177325343bbe94cb911e81b6460aaba7ed281e24cbe000ecbf28c18e676eef22c7612be6472c04eacfcee3593f8cfbcc4d01a5e87b995cb3e100152e5ca2205864ac9cc2bb5fd20680f5dff6b86c8571f3be89a018783f13aedab09e4fbd8425444b56c22e0756fa9f4c66fe5aaec45af00522283c63fe9a07a8b05602ac1f6462c262e66134dbf310c8ee1f66627bc9d49af53342b9576736b0c48f6c821946dfe11900e6c736c10ce3d70a2600989fd804338c5f2b9804607e6a13cc306e1f390ec0fccc2698615c67391ec0fcaf4d30c3384c770480f93f9b6086f16b056300cccf6d8219c651a46100a6d8cad81a98611cf0180e60462861fa5f44455805912d53e9077076b009675e2871ce05383bda8493f4734e6438b7029c9d28716adf6031dd7bf87cfc7b3e8be1eb4c896f10135b9856a86da684a89dfcf1edfcf15d7288187ee5327c183b038c5d28318e61b17d119cb99fcd5cdd26ae4ea5e421a6868b9858222dc6db2bb80091c1ab58983f6a5b0ae076a5841b6caf19c2463cd9dcfbad006d37eaecef5519e998d26e7b1621c2b8055442dd2931661930fadb75867044896cd799e9006f0f7b0b00c2090eb202e0e7a000e8498976ac44bb4cda672913b393d5aabaaa92a2b477c80e9900c28e2bf9df8ef825fc58cdc55685b0f2ea0100f7b2bb68209c53222b1ad681a2a177262a30cc4f64a12c1088f7ed1c435581fd0358699f4c8c3fc1f6abee0cc4ba07e16eaf0e0630fb52c2eccd4f96c9efb955c84a69175762bf3c0a271b3a2ba402d71f80eb47094e7b82422b4c5e3585d7221702b0fd29c1ea6d79f3d9e1b62deff500e1004a84fe1c12c3e8bab004a01c4889729c0f94653c4c21a49915f3bff44854136d7d3e96aa3eff27403c8812f17016ef98d82087f1b67bda6c1827e8568276e6e04c8cdaa7be575718bfd67a1bb0cf2136e12c0825ce7300cea136e19c154a9cbf003887d984b3309438bf0c700eb70927a9af0819ce6301ce1136e1cc0f25ce5a8073a44d38f34289731dc0392a135dcd5cf9db398a99d032e6f4e7c3db5bdf0c108ece4457333567b0303a76f705cdf62332658d4e775308daa72c3103031f87a8107e0358e3984c8cb00b84d5ad6bdcf5edb08f1f7d1760cccaec1ce6e1fe7987a100ed585ba787496b73b2e9e1df03b4e36c454bda8c27437b05403b3e135553de6137263f01209c9009df4fb12b6cc67d3fc9e6ce8f00f8266662d237b5298dbc504e6adc0d604eb20966189bedf70098936d8219c6f598d70098519b6086713de65d00e6149b6086713de65500e6549b6086713de6d500e6349b608671baf7420073ba4d30c3b81ef34a00f3489b608671479a7b01cc6c9b608671479a2f009839763b6713667cb20e662730fa9e9b89a1e319adf65a25473c1d27aeb0afd1fc26b0d21936cd50cea42c41c96628bf0870e6d984b32094386f0238f36dc2392b9438ff047016d884b33094389f033867da849374b92019ceb50067a14d38f34389f3548073964d3849fb466438ab00ced99438f5beb179ae467d9827d34e06f0e664625586f0f358c4c4fe1f0dbcc753ad1aedce5a8c6a29b0420a803b833485dab16b2c403cd7a6ad7f4867d0c9704640f7f2289b70928e7992e19c0870ceb30927a95f3119ce1500e7d199d81208e234bb7c1dcf1955c8601ae57d67708410eea91122b84b01dc636c6a38cda49cd5246b383d082aa6636dc259104a9c97039cf36dc2392b94385f01388b6cc259184a9cdf073817d88493747b54329c2b01ce8536e124ddcf930c6713c0b9c8269ca4fe4a64384f02381753e29cc2dc1b01889e7d15e7211616e878c656736053c945fcaf4639fb49da32bd9daa655a0b5aa64b2881ebcf9362f3f3f1252b1948b2cf936601cb5d6a0b48428b24033908805c660b48420f3b3290670190cb6d0149e8f74906721a00799c2d20c3f899fb4b00c8159420735db57b0bba1c0b5f70b8903f51cff57176a71351cd505d7f19555dbf1ed4f52b33e18b97ea8829e1e41dd978e9ff802dafb20926a16323194c062c73b54d30c33892ff2eb0cc629b601236ebc960be076096d80493b0214506f33f00e6f136c1246cde93c1fc00c02cb5092661cb940ce6870066994d30c3f88da38f00cc729b60122ed42683f93180b9c62698840bb5c9607e0260aea58489efd8bd84ffae65ce578ecab9002138fc3b76af01604fa0043b4a825dc91fa894fe7670ed51bb7d8d836c45525780759d3d5bab85715b81aea08bb9dedead8108eb7bb2ad81ee07567aa2ddcb12097b4d6485401458ee064abc0341a5b547564ac2a7d9f9245f8616251ea082b805d8e8c64cccd3c39a1fabaec8eb7b329b1c0d706eca44699a98e553294fc3b8d15a2f90dd4fca449d8fcd36c5d7f961dc63642ab0d2cd9968eea753e7138ed793d9e8c500ec165bc186f1fb86e701b015b6820de397638f0160b7da0a96b0754a06361780adb4152ce1cc1319d8e9006c95ad60c3d8c01a01c056db0a967074950cec0100b6c656b08473006460f701b0db6c051bc691ab720076bbad6009475bc9c09601b0b59460f556d733593b6c754d86ef3480ef647bc600c2b801e17100e50e9b968993eea84336d1370a8c4ed5d98493740b18ba2f1d039cf536e124dda0880ce70e89b36b6797f02509c217cac88ae856b2d8662dd96c2913aedece762e95fc7ca5acad9bd9169e5d37f07ffed26013ff67ba1e913bf22ce6edba067955c8ab92b2ebf95da119ef578b156a3b85497455261195a5751167decc9f115ffe16a1ef6765ccd98ca698ffd6de052d124954ee3419fb4ebd08417cb97e3b6b94318edfac261ae92639391f3312f11200a34a57fd81a3e5aa9ea8e571ae909a34f2673ac9701c138aca0fbdeb333d81b45cb6729aa456de1f8217091889f4576926f45d25e35ac19faa90c7f256a93962883752c87f39eda9ecd69654b672e0af5767fa7a729922c5bca5ed12c91231e7d4ba36b3b5643172b28778bf463a3c544ba9cb93c63479fc70bbede5912a39629dcc611dff0691ee2ad9a5990e8df4e47fade1295fa5762a29e60f5749a5ae5edf8175fe7ffea97b15bd260300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/8daa21db35e2cff45b8ee880cf58e03b.asset.meta b/Assets/SerializedUdonPrograms/8daa21db35e2cff45b8ee880cf58e03b.asset.meta new file mode 100644 index 0000000..567c166 --- /dev/null +++ b/Assets/SerializedUdonPrograms/8daa21db35e2cff45b8ee880cf58e03b.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 94c1c6b96ba00694184b06a4f81e9dd0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/8e0cb50cd3669c64386114c4aec26efa.asset b/Assets/SerializedUdonPrograms/8e0cb50cd3669c64386114c4aec26efa.asset new file mode 100644 index 0000000..1fafd40 --- /dev/null +++ b/Assets/SerializedUdonPrograms/8e0cb50cd3669c64386114c4aec26efa.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 8e0cb50cd3669c64386114c4aec26efa + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d097c5d45f5f8e775dff77da1e99ed2d2a4699ab21468ba872e29495a9652da3449dbd0b409594a0b65dff77d2f3b2a282a22282a0a2a2a2ab8a2a2a2228222a2a282b2f3bf67ee4cee79f7cd79efdd77736ee6f6ff4b3fcdcdddce9cf9ce99edcc72bb1408e72731cbf9b55e5488c562b658276a45a3d8e5fcb5d839ee74feb967fafa5ad1ec1cb739bfab9d7bb3445e8637e1677a6294f3bbcc396b11adce9b6da2c639d6cbfb95a2cef9bbcc79b7ce3983ab5b9dff75ce53896ece4bebc412512ed6889189e11944ac972fb5a86b098857a297f37b91d8ebdcad934a412005f2d648e757a573a745dedbe928ad9fdb2036ca68ed74eed538ef348b0647e61629b1d7433385fc43b88721ea38541d073bff7babbfbbaabf7ba9bff1f3ddd5715896cf0f47eff5467f03a1bbd3bc3f421dffe3fcefe1fcb9039dc3bb6fa8f391aebc2edbd3c81aad8e63d471ac92d99085fe3dd5715c86f8a693311ec9ca86592f759ca08e07297d77e618fe449751623f9207c7b7903e1350d8bdd17d38e68588bb4ec7b77de9f8b69b8e5d6e51e9f78aba3e491da7a8e36425db7966e8fdeada54751c9541af69ee7be250e1d9ac1366d726753e5d1df3d571863afe4fe9ba0b9d87d545a7e9c1eaf85f1546a3e1ba7e1eee6b5d67aae32c5f7a1da29e3b559dcfce529f6cec4febf48e0aa3199d3b1cbb6d4e234ba7fbbbbe747f57bd7b8dcbb1dbe3bef860fb33c92d50f25a7288c77bbe78bce7ead23ddff75c261db4fc42757c5fc96d45e720f7868071eba6de7b549dcf1199cbb62159dc2b76e5f4d2ace7b9e1f418e65eefb14024dbf2dc0c7aeab4fdc097b61f28b90d4aae8e7f897b9ed09cc72139f07e9b4fee873eb91f2ab9ba8cd0369e49cff9ea78b83a1ea98e0b447b3e9edc4f5d3b4c1d8f50c78f447219f0913a1eeabd3be29a80dcd2a5d151beb41ea58e1f6790a9df3f5a1d7b67f9bc7e6661089d4bd5b14f9661f651c74521c2ecebda42af377db6302f83ccc52edf5ead4807474eef7dea7c893a2e55c765ee31d125d90ee479263bc8a4cb72a58b4069e0e8d267903a5fa18e65c9ba88637c3aedee389de0b294791a3a8763425ddf83ce41d7b56e387d9e563257aae32a9fceabf97476dad6f2bdfe3a0ff7cdf2bd74f655eec6af6fa12bbb6f95babed6a75ba9a777af25e85dad4736f9a142b1e8e663acea81be9a6da5efb9bde81c8e5dbdf0e4dfcef57edab646a0ebf0eee9e81cee1f9ba5aeeb44aacd829c1e28ec1e2a6c55fef7d3e9b95ea4e63dd3bb7044fd8484ea27f47b51bd779c48adc7f47310b733d039dcafca326ec71bf473c2edbf30cdbb2788e4f2e768cf1e7afe445d3b51e9d35324e72ddda718efbdd3de17d9e09e0fd4ba9ca4de416d07f9b7a3df005d9f6e54c76a61ae6737210e2a3f8acd5ed8e35e50d74e4e1356ad7a668b2fdee59e9cbea394eeba1cab11c979c6ff2c5cd37275bda7ebfc53bc67a7e832659b3ad62bdd7a8be43a7a2bba0ec73eeafe3e740ecfd579b2873fa3ae69fe5a57537aeafe978ebba90c486767bbdc6747a934158d2edb814ff8e49e24d2db6d932b679a6eb79deaca19d42da09c6657ce745d7eb6bae783b43eba8daddb67baecee2b92ca72a1edba1fb29bbee81a3c7ba68f6f26ddd271dcebead9debe57659a50f9bfbd7d077f0f567af4f7d2aabdcdb707dd8373ddf66bf3c52f9d2ebafdd05f6457d6e8b0ce0c11ff74f754392ace51711b2092fa3cf2dcb19321e3d2c83a5718ed74a8ee7b9ee7de1facf889f3519c208c811eeb765bba40dd1b84e2adec2a817d4f67ab6b43bc6b521edcbbd0973e67f9ee5f846498ee5f8c7430ddbf445d3fdbd57de825eafaa5beb8b4f9741d2c92ca1971596a5c13837d619f13202d2f57ef0ef5a5e550952eafa5917585392d87bda3ceaff4a5e555beb4d47e3e1cffabd5bde128dd26ab6b230ce93b127118a6ee5d839ec169a1ef5f8be49aee5f877430ddbf3e392d87eb76dc0d445a62fd715ade981ad7c4085fd8e766919637abe34dea686af7dea28e5395dcf3b2907bab3ad6a5913bc227f7fc2ce4deae8eb7a591bb5f98f5cd253c6debca0723ddeed8d6e1dcb1db11cfa791758730dafa48ed37b85324dbfa5d22d9d6478b545bbf5bdd1be3a5bff62726c68a545b477ee284f63bdf839ec1b6aaefdf8be49aeedf877430ddbf5f24d9faa885eafa2784d9d6b1fed8d63f991a57f90c0e5bd7e3e9d2f2533ece9aef7891dccf19efa6cf287ffba751a4af1b1f70e54fd77db207953ced27bf009dc371822fdc096eb8a395ff6b8c2e33faa9ebb3dceba3f518c3a785b1bd35bacaf7dc6744727beab33efe9ff3d9ca44cfdedae3f210ba87e3364924b7493eafae6b9fb47e465f33b5b932717d581dbfe0e397a7e45d88cee1b92f22fdaf50d71e51c77ddebdc1da9fa1d317b513c5a3665b91baa2340bdc46d2717e2c439c8394495344729934c5b583b1e9fcb35f51cf5c91e699afa9a3b693af2af9bafcdc87cee1fed7d5f934dffd69eafe6d1efb1179480f2d1bdeb9288d3e3afe4faae353eaf80d15ce7491ec13d3e328a63a22d7766caef736299df293ed479e3be9305ef78db52d9e9cc13ebea98edf52c7cd4ade0c1f831969184ccd32ac34f14acc14c93e043d1ef46d757eb0baafdbb887f89e3f443daf7c4a72e01c3f5fe07bbe403dff1d753e3bf979f15d2407cebfe7c52da1c7519e41d734efef7b7c26e8b2ae30396cf10391dcbfd36de739eab94bd07b9881be7fa93a2ff2c569ae3abf0c9dc3b1d827b7c8c7aad827779e4fdf1faae38fd4f1392f8e33de42ef209ee2d96499696dfa7b4a46897ae77274eed8f48474ed7ffdae1a0b49e836c615e8dc919197e7ea9b574ccb4a1ce6e3371f5d87e3e1eafe95e81c645f92463fe57f491ce18bdb11eadda7b37857d5cb89237d713b52c9f8c08ddbc4416964fd581db5af47a7a1b65990877c42ede9aac75d9e55e747291dae42e78e0e131f50cffd54986d7b81effdab93df9fa4c7047fa68e3ff7e9b65024fbc27ea18ebfa46d52fccaa77ba9f74cbb7ecffbf42bf5e9bd48857b0dd2435f87e362915c472d56ef2b9f636289efbef6a34df674691f6b4f97475e52c75f8be065ac8edb52915c672c75d94f5ee0ea3159fb2affa88e476408eb4f3ef9cb94fc6bd139dc37f93a759fe52fc93292ec52fb41971bd256a5a9f8b377ef60ddc67c19bd07e7afa2f864f27b99ae9da2e4adf0f15be1f29bb24fc54da7a3e6579f819f7a2e51869ed3611d83aea9f22fb1d2bb9638065d83e32aa5db75e8bc9b3b452449ee6af5dcf5286c38ae51d76f40e7f09e1adb4f948be4393a5a1e1a5f49a8b1a5a9aade137ff585b1567879c1e135f5291f87b548d66a744dcbc07db953d011aedfa8d2e0f1e43033a681a91ea810c9f5aa1ec7aaf4a57fa562ace233cd3f67e6d4f4616bb9e275755e2592db2cdaa7f337240feedf44cb3486b3ce179f75c9e14af999ea6add077c30384fd98f82e3df55f8c7a9f06e46e7705c8f64ff435d3b1ed9c47a753c41bdaffd49da464f44cf9e889e85e30691dcb7d9e0a6dd8cc77db2f57b27a9e76f45e710d63fd5f946755ffb8f741e456de0c446740d8e9bd43bb7a3734787fc275cfb99710d11d666f5de7e748ec3ac56f7ef40e710b725c9cf27b6a8e7ee44e79a319673974f8e4faf440d8a638dd2e591f476a1b9b6f7354f546135ba71876e0b8e532679c66bcfa9a39a3b91a8f571d3f5dbb339c8feb392512792db71752ea383ef56cfa9b24cd639e9c250f2c4bfd4f1df4ade5625ff6e740ec76d22c9e6137aac50dbfe7691543ecb7347af994d3e39f53e39f5be74d1e5e93dbef77479fbaaba7faf9b6e332ff0c52753bc93ae754fc831fe15a24e548b265120274d404f33db29cffacdcc939de5fc0cf8053fd365b0ad62aff36a9d69c6f13a399fb955cc1545c619c7a3e5b89f0e7db1fc5ded3c512f85de974809e22b294180720dcebf3a345dbac5b9be5cceb68609d3f5ce9dd962957384b7368b396283f32f59ca7a27d806d1e69c5539bf9ba4bccd8edaa94f668a124cadf6bf53e1c874677eef74ae68a04dce7983d4b052fede2d35ad93da9739d75ae53cf45d629b58e41cf7c8d052e3deecfc6d0ab34a2133eb689e004e5d77a799eb645ae2c406b42f90b6f87f29d2192902e87b40fe809f6e057244ffb29494f83f866e21031dd53225638e449648ba56240ae45ca08a1482c1e3981a43b37dbbbc4b4471dab898c940728f9531f052f89c92c39fecff7ee333dd93a336571448f7f4b80c514b0716e4e5cbd1cc2051e8debd5b2128eac79f30e197539d2a23c4ef3e572f9f0b9e003d64e5979c00d26551e5946a6b51e5b9def9ed2ab74e46a3412a698a56b3fc6badf344b5132444abdc79af460ad74b7e668b35ce1994ade99f4bb1814250b8a74cc6d44a3a130a2a21bb981252fa83aa3a251f51cb9ad22765aff658784959205b5ea3d2183c15966c927555ed329d259f2f7b7defe0a6fd7b9f78ac7c57d5b5afbfd2dd9c3e7d64fae4122a95425d4d29d427eaac96b96e49973e7ddbe3e5a50ffc9819f6236c3c930e14c16e26827da3b671b8d728a5543bcf06670893c966fa8b2b33c001841166568142d8dd80b010100e346825baf7f669050a11927b9812a75fe754e4b919378c348cf421e84e1af7e0b4f57050d3ee69a227a71d6e66a5a7fb97954e4762a573afda79be4e3656e13aaed84a65085e9f34f98df464c1df7f889fac91ea5049750aea2d87d58c22decb40bc10ec7598c10c6419e7cf0c83e9ccd09bca66c3c366b33e94e4116125f7a5248f0c2bb91f25795458c9fd4dd9069e976e3dfe6ce3b965f45f8b9c77b73b91d92d5b7f6dcefb26374efaec323aebec324666973c61722e05d388ca26034c690717c79a94f427dd183ae9065282c785143c88b2b6f161ad6d3055641cd40145c6109370c8ed13446a9beb63e72745783f5af8504af33c83e655755d02693e8c023e312cf0e194e44961258f30151cd224cf8db8e030fb8097cbed2eea9ceee416718a709d773adc46e9b8038db413b0c2396e955ac075d022b3ef387d113459183a6232672d3516369d150b6829749145e1545914c28ca575ce75d767bd54a640bd0c69b6511b08817a5eb3582d60278f3699dadd89eee23419ba5d6ca8227d2455d24c3794342f988ab13425cd282acbe687cdb2a34d9221cbce30d86a21d82a0cfff49135454a38d3e870c6988a0659f49fdea94583dbb100795be5b08c2b6f8d80cd684e93a6bac331e0ddca70aa9c679a9d30ea949187290c60dae2787f8f55b83fe6ec304b6687a3b2c80e9cb1a232c0589325410f0ce65ba67812c1a22b9c0ec762b14966c353e565a0e4a66ebd7cb45e9cee1cf5084b8abdf5a4ed6d9c491b68d8425996b1213494163c9e125c1052f041541e2f0c9bc72798244369030305615b587994da4561d59e4895a8730d25ea07896025ea244a78b141f8135d82099f6c120ec63a2f1b1b4963d55328c125a63c0695f762e9ccca73fe373a6f80eba45ae6fe3c59197aa5419e93d7eb9dbfa0c29e859e6f749e70473483e83995328af9618d621a956e871ad2edad80e9369d127e9841f88aaec184e7536977b829ed206b42bd01cd92edaa6e4b2e0df3e4d8729e9c4ed0269d32b532e55a64bae689339c82e34ce7d8ea3c9d27eb8106792f4feecdd62ccbda20693a83d2ff0893fe7d90fe6b918641423c982ab71618caad44c0726ba64938347c8e1444c3072adee00d9f5914b6a34dd8a07659ea345fa0e5da269faf940650d7de56aeeda00af210835e05b2bbbc4b7466830c7a0b30f9a245feed3551206c6f002f4cc36ba1486d78e91f73c3ab5440c3ab48646e787584f654036b3655a82e3214aa8920856a01951716537961494e79a1d06473d28bd2d4a93647e7a80a291b725ef8063ff463bbfa7bffd2cd539c856575948e33e59e2b2d72ef4d975c0b14a6e05bdf8236d974e1cb2c61ce13cb649e8852732a5fcca16aede5865afbd1eec16aed2293c94a0f5a73a79aec1229210ab35d61325be9e92bc922f13b52cf09728e5e8b2c546b55a1ea16dd13e4262bcdb2daac73ae43c18befcf941b9b407b6999e4bd539287f855cb7e2f65e465d2c8a38e2765e873a90ae018430510a8555d4c65a195862cf441c02c348f527b5558b54b28b5571bd4ded72398daf329e16b0cc257f50c26fc509370289861614c981ee2619460581d93d2dc84fea4ee27d4f87a8a5b645f41f7ff6ae595bdceef06e75a8d149127e75bea01e3205a1e4eb13dd6c0765040b64750082a42b25d60123c40b8bbd285195c3bd22418da5f5582687fc1ba9ce0edafa328eceb0dd8ef0e88fd682a9b1f17369b2fa4241f1f56722925f984b0921751924f0c2b79b1493224e2064322c29c892089b884127e9241785540e14ba98cb9d154364d15d0f1f21aa96ef7c9f36b548bad524ab3f3f76e55e7d626f947c0e751af3acd41f2f9324acf934d7abacb3b605a0cb429aaa50f0d422c173b0285ba9c42bfc980fe8a80e85750c2371b84bf16507819c5abdac46b548674ad95b329bcab739cab41381e4369b3c5a40d9c7ae916249c9514d21a03d2fd7d82215d4545a2d6140970dbb8f80e7790ad910ebf6ab53465b7acc683635c4d695067d2c06dcee986c1da1c9b056b28a45b0d489f0f88b49c2a91b7852d91d7526a6f37159a7d83a97d2ca5767d58b52b4c92a1d5718a205a1db02369f0564725154e0315cece9cc2a9328503a4768525b58e4ae04643022fec172c81d753c29b0cc2f705147e1c25fc5483f0a7030a3f9e12de6c103eae7f30e12750c25b0cc26b030a3f9112de6a107e4b40e11b28e16d06e10f04147e1265e4bbc31af9464aedd30c6a0f1b104ced9329b5f784557b934172819c8c13e50210ffeca76073e46117dfeca6a6c26419d3e28f4ce1532ea5cda674811afa0c934a01aaf26aca9af619ace9958099600b25fc4c83f093029a6a0d25fc2c83f04b020aafa5849f6d103e686030e17554629e133231b75282615a674a5b7096b4ce4699c7f2e4d7ba60d5e52ef5713058f95e2707aeaba5ed7b0e273d700dcb78f394f5362b9b6e70ac7db6733588d6db28adcf33690d23afe0c4f5dacd6e57d2ed8698e615e689e9aad53d3d905edb291b38df60038f0634b07a2ad21784b481530c820be4bcc47ad672969a475a259df7b0ec7eabb4949d81679da62f932fccba4cbe4896c9309ecea72b557eef302537b4ad2f1644db1a76a0eb032a076a5b3798c2019bbdd460b3c501cbad9d94f0cb0cc28f0f287c1725fc7283f00b020a6f340987660decbb17aa59d344a97da541ed6703aa7d2aa5f65561d56ea6d4bedaa0f6b041c1d46ea1cab66b4c053a34e5b3718ae4c94cd9262b28a862d60a7709a83b57aadab95a2b67516d97e76b65d604cfe2165901b8abe13749e7c7363996d8ec5cd5b3aef60a776d509e6c8eb97b83e4c9a2a056cdc5db21afb4c8a7ea5038e60aa75e559cb88a0aeadd6ca592e85a43124d0998446d54125d17b2fad94d09bede94f6309ba1ca39694a4a9720e19d4615ac3750052b6c2b17dc69b1878ad74da678b96e7eed2975ed7763c066d15e2afd6f36952c01d3ff744af82d06e1dd0607137e069526b75269725b4e69b2cf140e147ab76763c469c6f9cea404ef0f29f82cca8aee0899edcea604df1952f03926c190f6b0a39c7f6e27080832b7f35cca0aef3658e1ac21c1acf03c4af83d06e1ab020a3f9f127eaf41785340e11750f9e73e2affdc9f53feb990329a4f98ca349801b7c9f907ae9c06595aeb3ab6de291de14e93ec2a427d18c4c22ea2b4f8a4498ba1ed5a143abfa1e685b129777650ee3a5c4ce9f029930e43940e739dff35b23304efec717ee7aec12594060f9834e885d202d61041cb2848689752e6fba0c17c170c0d66be9751e6fb69ca7c3f9393f95e4e154d0f198aa6ae018ba62b28429f35107a2720a12b29e19f33081f352c98f0ab28e19f37a56d40e1575369fb3095b65fc8296dafa1b2c323e98aa6a20e2e9aaea5b4f862faa2694e07164dd7513a3c9aae682aeec0a2e97a4a83c732154dc7c9f082ad77b8c1141a98ef970ce6db6b7830f3bd9132df2f53e6fb784ee67b13850cb6a80cd31cbb99a2f355039d1b02d2b985a2f3358ace1339d1b9958ac4d70d91782360246ea3d07f2324fadb29ad9f3468bd644430adf753e89fa2d07f3327f4775091f8962112af048cc49d94f06f1b84771b194cf85d94f0a70dc2f3030abf9bc2ff1d0aff7773c27f0f659cf0cd13b25a9bdbc1d5dabd9416cf98b4f0aab5a20eacd6eea374f8be49075dadcdebc06aed7e4a831f9834e82dbc6a6da91cf06a0ce8a9fa0465c03f3418f05b010df89394013f4b19f0733919f0a7a848fcc810898651c122f10025fcc706e1cf0614fe2095dcf0f99c30f5c2a729ad7f6ad07ac1e8605a7f8612fe3383f0da80c21fa290fcdc9403c0ab9fde4f9feac90de7b377fda6767be93f4b25d0f386046a0d98409fa384ffc220fc9680c23f4f1519bfa48a8c5fe554643c4c45e20513a131c122f1054af8af0dc28f0f28fc1193707003ff269b22238d1bf88b06c10572879fce19a34fdd79a963c7e87f6be2651ca37f51641aa30faf2b3546ff28654bbf33e5b680b6f49849380ce5fe5e841ccafd1225f90f61257fd92419cac297b2b1ff3485e6e326fb973b4f6ded14fb0fb3275a7acbff63d696ffb2b4fc83d3587eb89ddbcc29f115ca78fe14d678be4a19cf2b218de76b26c1904d5f3564d337c706cba64f505ac3c770529a44b0bebc547687eae4b214d382a63cd95cca0b38f7eceb941e7f31e9017baa0493ff0d4afe6b2153e7492a75fe6a489dede382a5ce5394d6af53a9037964bb6a22eaf4a86bdfef23d79981dfa422f93743241bc6078be4b7a848be618a24e4403dcfc06dcf264fd30c12ad6f5321ffdd1432f4c9dd593505eddb4d17b46f8a53ee64885a117436c7d39406ff306930d2a8c12af957abdc41c06df5e7b66eec3b942eff34e932364b5d52f7230ea2d37729c37bd36078571c14ccf0be4745f85f21cb846728c1ff0e29f8fb94e0ff8414fc038af35b06ce0f05e4fc434af8db06e14d1382097f9642f2df90489e330986d2e77fd9084ed319fa914930f443df69bfe1eb87be2b72e987fe98c2fe9e01fb8a89c1b0ff848ac4fb54243ec829123fa522f1a1211297048cc4cf28e11f19843f3a2998f09f5386f9b13014a7b01eae42e06d626a651b5b17e4f96286acf076a9dfc9ab10f2e4995bfdcc92db5f34cb5adf2d725b4483dc20a345e065e0ae5309163437f95a063a1c7026b955ecd6f6e23c4f16e6b501a7f63d4fb180ddf15258c0be2c78af39b795e955b0de92ecd3a4860d024f9add2eaba0bc8c128a9ca783aedcf8056530d0224d19f0096830bf3409872cd5254164a9ae895cb2d4afa848743344223f60245ea052babb29a56132b9d945ba41395761e50bf42edc2d8ad2a5697edabb33e47454d7adead975720e689496a15da8c9f75aa55db51a72d116a9612372c0bab21b55ef34887dfdda40af40ee5f1cedf7d9dcd545202787efb32560dbabe48416d2007c1cdc0fa325a80fa3a5d781eadfffc64450eeb9bc8d9520e59b58af4a68d07c6e07fb5a7a250c1ba0c96da0610f511e8df22029bd5fc4f664bd65aaf26941a5fe6f4da50fa47e1f03aac2f1495151f1f1e756880a11da8ba6d020b7f6a5b2404a51400bff1d25bc5f0708ff3d25bc7f0708ff83493854190312e177f57e89d27ca051f3738e0ea2f91fa9ca6b90a9f23273a1557f99923ed824dd5deb0ccd9c821c3649f993292ca8e38718eaf8bb2707abe35fa1840f3508ff20a0f057294ac312e1fa737fa6040f0f29f82f148e11061c2f05c4f19a4938549723b3d1fa745af05f291ca34cd608c65e1088caeb94fcd126f9b06d67ea68fa6ad994d23b317977828d58ff8dd2648c49139000957c502b78830a65ac29943e421857e80509f1ef86100be4c71a606b9ea81a8bd97c15dadc7c19978086423218d999313629c6cb26c5f09498a5fd783241ee1fa6b482d38312a91f773e66f5b93df78f7bae4b4ad274a793e69f94314c3019036c010b53addcc9200dce5fad2a52f5014dfd4d2adc3c53b803c97077a9de7e90b0ff6532c709519be362d94f6bcec11c273a88a6fa10cd268c7112618ce942a78cf1df266e7970715384dcf087a82be5f6a9d0162f97bd5fb72fdd9203d3c989a03bda4f916427a7c43c57fd28eaff31e51418079e9a08390efc1625795a58c96f5392a78795fc5f9364f77bcee19becffa30aa519211b5eef503c0e0ecbe35d4af2ccb092dfa324cf0a2bf97d4af22161257f40499e1d56f28794e482b0923fa28cae30a4d17d4ca93c27acca2261900c6d83a26c544ef301af844930a83c37acca5d4c92015e7148ca5d2995e78555b91b25b924ace4ee94e4f96125f7a0241f1a56724fcae60e0b6973bd28950f0fab726fcae68e0869737d28c10b420aee4b093e32a4e07e26c1d0853a2a1bc12fd382fb9b04437be0e80e680f0ca04c636158d31868920ccf9766c323dd47a629d08b42821e4c99c6e290a6318412bc24a4e0a154ea2d0d9b7ac3a8d45b1632f58653a9b73c64ea8da020af0809792425b82ca4e05154ea1d1336f54653a9b73264ea8da1526f55c8d41b4b415e1d12f2384af09a9082c753a9571e36f50e32482e98e89c26607bc5e8874d3be2e3dde95d136bb3498ba934b109545a1c1b362df24c92e56789b351f9225af044ca2e2b43dae5244a705548c193a9bcbf2e64de9f42a5defab0a9379562715c4816d328c1c787143c9d127c4248c1f914e413c3429e41a9bc21a4ca0753824f0a297826d5d1da18b2a3358bd2f8e4901a1f4269bc29a4c6b3298d3787d4b880d2b83aa4c68594e02d2105cfa150d484445144695c1b52e3b954cfb0ae037a86c5148ead2171cca3706c0b89a3842ae2b6872de2e653a0eb3b00f4a194daa78455fb304aed1d1da0f6e194da0d61d53e8292bc33ace40514905d1d00e4484aedc6b06a1f45496e0a2bf9682a939f1a32932fa4043787145c4a096e0929781125b835a4e0c594e0b69082975082778714bc94b2b7d3c2dadb32aa3bb52764776a39c5626f48162b2816a787655146a97c4648958fa13a6afb4276d4565282cf0c29781505f9acb090575390cf0e09790d55959cd301554939c5e3dcb03cd6523cce0bc9e3582a679f1f32675750cdc50b4236172b29c81786855c4541be2824e475148b8b43b2586f72394e724e13f0ed101bf684d9a01c881de774bcc4c4cc380fead2044cbe291041f685c9455f6a7ed471a66487d4b92c9b6407ed09c1c79b04c3e9e589d4b997fa27c8dccb13a852f28a0e28254fa4845fd901c23750a5c355614b87934c92e1f9abb349cd3483331b4d82610ef235d9081e4f9bc9c994e06b430ade4441be2e2ce4cd26c93055fffa6c544e3355bf9a52f986b02a6fa132e38d1d94196b4c01c0c65f3765c3e4455a702d05fbe690b0eb28d8b78485bdd554e1c14cd7047cc6b53326faea0a23d8a4de5bb3aec46e9395d8e894d865a30355316da34ae0db3ba004de4e25fefeb0895f4fa97d4707a87d0a25fcce0e10be836a59de9530ac2958224f2b1c63a9144bc4caf6ad61d608d89ce73499c03b54d2cf96ab0fca9cfbe5ce9d5dd2a4e18ab9fd621a1286a7b16981e1370a773d79b05dd81ba858de6d8ae545edb15ce7b4a420d3b91974a7fcbb4c6dd7db2c57aebb19b4acfdc9a5edbb3125eff7d0ac78540af79b948b459b8c17c84da6e74980e783e94149aa12b06e619bbc9bcc1467563feff58e9ca06b547652a4efa1ec0987e8c669aef38e4babd129143739b6d12cd3dc8d6d95da01cbafadf72e7dbda3ec691715cb7b4db13cca174bccdc8de732e17e9fb1da60f5c92984efa4cb2bf8ad20316ba462769f29664767957ea572d7877aa1d772844f39ef4e90b8355171bbdf14b7125fdc56cbd4d9ae6206677b3a2d26a75231f984292657445c9e79efc0fe1e0d8ed4bd0296757adb86b504b072cc8e8e05d4256db299814b3d6860755cd9d64c51ffa4897a69567963957037a0b7a1546ba1e2f72953fc56315a155c3d550603b1729bc3f532e87aa7755f4d9624b9a46a2b15eb074cb13e326dac694d2b645cdc7d6edc38eada18aed62842a9f922f7d46ca3e2f5a0295e27046ed955ca3bc96d3b9304f7dadaf672a0d9a90fa0ab13a625984b3aefa6787cdac46365247536776d7e1a15e7cf50ed946036a06d1816b9d74841389d835a449098eda162f69029668713315b27f367836a9bb85d6ddd6b59af72716d4a6af0f451f65231faac2946cb184b5f9daaee4af12dc2dd69b6e3627a3a15d3cf9962ba40505e725349911c03fc410760b242a672b3ec0dd53835eede0e8cd51954ac3e9f4d9f20395cdc42582753a1d97916f2e1b634b55fb28c8e8bd93e2a660f9b62b63863c9995daf802e43d3f559732d29cfa4e2f805531c979336092dde2dce433aaeeef61fde2776d2972566991d5d139e45c5f511535ceb987b0fadf2432940c9ed1dac97d65edf5ef2744c7f38174e67539cbe68e2b4aed37a59e90985e7700ec5e15113874501f3860d39e25c2a868f996258163086fabb91e614e98cf89e47c5f74ba6f856305a764b0e6d8d8e20703e45e0cb1dd50671cbb652d402e18fd50554ac1ea73c144163b54c3e919a42fe32277bb941e2772115bfaf98e27744889663abac8d60df99adaa9f47c7aa2ae5d92071ba888ad35783a599bfecc15ff2c864799cb5c7c554fcbe46c52f489fd18deb72d58ef0eec28847fad66147b51c2fa1e2f784297e53447aaf6095439843cb4b292dbf9edeb71724152a734a054edbbb8c8af5374cb1a6bfd355d53e548fcb086fdf74a80fdb8c6db1dcfcfb97537a3f69d2fbb08c3dae32393608dec706b96bf652b153eead95daff4d9702b9f720afa0e2f314d5824c9f47a037bc56b6aa5a0cf56a366309d01ad9da8131bc928ae137b3e9239bc706caa4ed811fbc5af9a852d32bcaf181aba8387e8bf25065e307c82696b99518b9c7f46a2aa6df36c5744556a9e91fe971f3a18e7767a6eb35546c9f36c5f6f88ce9caeb19e7f6995f4bd1f80ee55936d719a933783bab85791d15a3ef527e8cccbdd06c7270367dd9e0fddddcedfc7a8ac3f74c1ce86f17d2bd06bdb36a47d9e20d94c6cf98349e9631677ae33575f22acc67e89816cb8d94a6df37693a3f4d4bcb6fe9c99abb1f47f7fc5e1cf9e5262a2e3fc8660e1355cf2db5ac8ebb998ae50fa9f1d060e59cdb274bbd9b3ac6ad3779a6d333554aa9f4a8433f23489c6fa1e2fcac29ce537d29eb85c99d9b6ea5f47ccea467914f4f5c3ef9755eae74ceb65591aba7e6362a063f32c5e024c1e761d4be8174630cd802b3cd79fa9d20546ea7a8fc389b31421d629052c58b1995e33aa634d94fc5ec27a6989dd8c9e91d249d73cd017750447e9a4d6f29685b2b7c7b39f7b4bf938ae9cfb229ad16cb547553b01579c15c2b2811c519e2672ac9e0ad2031b88b8ac1cfb39fd9076106c999387ed4f58e4aa1bba9f83d4f79ffd2b768bc3ddafd3aea3df2e9fc45edef9e2e4fe656dbdf43c5fa17b9789ddc54ad741ede22dcbe5b8de8ec19cdf75231fc653639cf4c38b77642e61e4e4fe75f2221f71295525c1f5ea37c075a8505e01a4f14b6d70cb3db4bfcd949b583771dc2dfe9a406e489aaf6b21d961ba597f02b074e8f2ec2fd99aebe09e3568889adc2bf9c69b194dfa0ca1b6dadb3252177e6232cd39aedb402ebe55b7a6156a658986ab9d9a89ec3b1cb1ca78dc442ab84fcd41496e5908686ed0117d3172055c7a954ed52009d61f98dba5cac29b316bf86d0ba9a6dc8f4bd432f7798747705ac51de8304acabdf2483592b3bbbf4b4e28c21fbb7d8f4877c8814a0db8319c5ad43458049dc68696eeed4ae66e13a3c5f7464f6ecdea51052e4379cd86029e212d9ee6b72c0b93366749d43016c8905c257121ec2df722284efceea6eed0a39e80702bc0fa2968b1db100f6702f0fd88b9cc08609f72b4b85c29bcb12677083fa7ae07ec7096e88011c08848f5fc3d05e9bbc5a1b0b689b8507edf7dcd6969c3d9739bfebd5ac293d77c0b5ba3880cbefe781fb0327b811b23dda9275b510077837a04ae1254e787d51562d4ff2c0c401d3b8711ea63f7262ea8d307913bee380e892111ea2973911f590885a62554675ebefc1f913271cd8dbacbcbdcdaf07badcc1f40a59e8b70998460cc5fc5ae50a8a03c04751067c8513602f9401414d18fb8b03a09f0cf600bdca09680c02e43a782aa4a06a29423b82da64fdd8e8dcab9657b288b505109f99e441fc3377315f2e472cbc5d29e2d14cdd8732e25fa2ca887af1431c00ed1fea017a8d3b23ea76fc52b147c6baadbdf10933c36a65d3b4425a58adb4b70627c03840841f0df1af9c10c70b91040ffc64b0a8b3ae7dfbc3da98b7f08721cfd9eb9c28fbab324ddbdb5ed5ec58273be17140750b2adbfe1655171c7a9478105af72ae3d4bc7da7a707ee0dee2e380687574695ca4e398c0b796bc0e2006f1ff296fd9d135e3f54a37a0b7ddce5857100f5286ae2fe83db81bd5a66bf1dbe7d2b96388f37cb90e2006c73170fd83fa37529264faba98d5979d6803cff6ff23bb0a129b144061de786c633dd3d68ffe2b6b6a572d8ad4d06ee6d1ce36d24d4e2b4e1ea9df0e200ee1504eedf9ce006a06c1ad7611298dba161fd877f50ce1d3f6f9462e2dd0f5880acec2d6e176485036db1c87e0fb63800bc4436727b76f709f74fbacc7d0a4c30eaf4649d81c2edd336c9abadaafe4d9abc33dd79c43acddfc6936ff273f66fe4672ce7f2b31e38ce0f3ce8979fe30c92fcac5a9df9211d16f901a605e5072a02f3b36ecbe407aac0f3732a4ff20375b1f3033560f3b39ae0921f6856477ee09ead49677a1c3f3f65d42c3f6d7730df380e926f74cae6138396f969c67cf3090f787e062f527e4e035cf9390f5a78f34dcdf3440ba738b7fefbfff954d042980afa3f80001bc1c38fdbca7887bb950129eacefc85923ffdee24739cbadea7c3b8141d92bfa9a05b13266d7a27b537066413c15cda1cbdd0f48c776dc259144b9c87239cefd984736e2c716e4238df8f02e7361228567f9398274af870f6e3c2f969e1e1fcc0269cc5b1c47903c2f9a14d38e7c712e75f10ce8f6cc259124b9cdf45383fb609e79c58e25c83708a2e16e19c1b4b9cad0867c2269c45b1c4598d7076e1c4395ce1ac51dd4affda6dbc2eb8900f64772e90ff4020bb72821c2f3c8741b66e2478be593e1bbfa6fc4204b61b27d80902fb95b2f7abc619ee41086e774eb85311dc5ae53faa964eed3aa7cbe9ba94eb2470bcc1e60ae1badadce5f3ae4b0d04b281ee996002fd2202dd8313f40891be7f8fc541938a0f2597cd7e8450f6e4443950a12cf1018dc00ec770c17b04c1eb1505bc43a387c76679cf2278bd39e18dccd0584acec4ac4e103698ff4430fbd804737e0c61be8960f6b50966710c61fe0dc1ec6713cc793184f90682d9df2698453184f9570473804d3019c788d860be8e600eb40926a3fb830de61f11cc4136c18c630fe76504733027cc8315cc06e7a10679347fe832d8874f19ed772817f20a34603c8413791f897cbb746bb8339ab64978f1f31df543563ab4335d1ac91b66325adfe95c286b91f50de344393d25c3574b61deb7cbc11907d6b95b7a37db44babd2e5961b395aeb311ece151d86d7655551c518e4545c0084e9407198a806cf7c667457b1117da3c64a5233bd74a5d51eec6d29c56cae57b7f0959e9286e94a572ee7ba39af10bbbc0eaaf9bc2dc603d0fda9d5d1ebf3abf1b42399a13a55e0631c7f9bf53e8b1ea6da22eb291202e8467238463a24038ff8043f86584702c27c2a1c21bb5d447ff8727e33af4fb1882382e8a8934d9cf87671cce60c3390ad5d7e36dc2c93a2f890de75108e74136e1649d35c786733bc2398113e7a0f67abbf0001af87d15959579f6ccde382c862847224b9c184597b15036763c2f65b9f3528d6c82b7087702d76ae904d91155b3683017da3f202b9d148595e22988ab1cb0cbd5dac7adce4b7ba2681cb159691b4239997f38033b8237294b5c24d74aee50a2e0c3f4758e8894ad306230e7a83f8239258a2cdf2a5768b7b40f5ce885a4fa68f271cee11c1066437b0b423b358a61b76c67c333564d6c73e10f4730a7d904f3d018c29c8f604eb70926e3241a36987310cc7c9b60324eef6283391dc19c61134cc689876c304b10cc836d8219c7c558c508e64c9b60324ea261833911c19c65134cc6213436982311cc436c82c938f1900de6340473b64d30197b406c30272198059c30f344aa6b2ed8bc38c6fa9d6d5edc3ce4ae2beccc799d7e3f3c6329cae6859f8a6c758e4d3019eb773698b311cca2288634c0dbb95be8cf0d47e42c66c3371ce19bcb896f34c2973add1084796bd4e33c46f43d04b4388a791d8507dcbc8eb310c27951202c39e0101e8a1096d8dd1c62f46ab23587d6a1e6d0fca8661e79436c7894887d708d6dd0e24c64a387da33013b8eab2b0f43280f8baa16cfb4c1709c67c5cd43400fb7697ba979b174757c02e13cc2269cac4b56d9705e81702eb009e7fc58e2fc15c279a44d384b6289f36b08e75136e164dd619b0de77284f3689b70b26e09cd867317c2b9d0269cac1b96b3e13c11e12ce56e7966f7a18f0aa91a7c6a84b1e5b98c0b28fe7cd4a22876e69aebebbf47e0f6605b2d790a82b79813de5891ed42d4e455e98cd3115ee682ba12393b96d80895b1c7ce06f5180475a98d5019a774b1419d8ca02eb3112a630dcf06750c82badc46a88cd315d8a00e475057d808957128980dea2004b5cc46a88c9315d8a0f643508fe1843a57a47ae993d76d2c16dee7bfdc88247f4c2cf99b84deb7dcaa648b56bbab191361165b192cbc445869cfc2c338ee373b18d9f32a7b5721314e12631bd0fb11b2d2d5f66cfec7ba91009b9dee4130d7d804338efb225f886096db04338efb22b720986b6d8219c791fbdd08e6b136c18ce3bec85b11cc0a9b60c6715fe46d0866a54d30e3b843e22a04b3ca269871dc17793582b9ce26988c5319d9605e8460aeb709661c77b5b918c13cceee69b771dc9d5ba0befbf19c78fb2bbcee2e360db217efcaaee7dc7a85edab8402d9e509516fd09bbddb238e5baf8c4636796254536f574b8fe60e9fc77389f35ab30c31ce536f47215bddc0097440da4cdec287ae0f17ba2e08dd499d39a33efe2bdd8720941ba35856081fbc3d70961596237c27dbb123bc3b7ad4242dd61d1762b5cc17b9d0d6a00a67934d5ba2b27626d92cb53bc2b9d9269c45b1c459827056db84736e2c7156229c5b38714e16a90bbb968a3d02a62eb4093db5b6dc79bd564037b242b89f642e97e8236971b26d983a18555635364d099f17cb8dd53e8570d6da8493f533a46c38af4438eb6cc2393f9638ff84706eb50967492c713e89706eb30927ebd83a1bce1508e7769b70ce8d25ce2684b3de269c45b1c4b901e13c252a5f67a56c55b639924b057c3f6bbd5af2552b977cd5c5dad7791202bac39e799d719caed01bf5941aa218c7d4fb80b98b10b7c8aea67e28eedb076d4676b9338a458807d257628e40f076d93bc398b102621b6cbb1ba16d8cc22ee7476f976c8ee32f22784d51c03b2c7a786c96f71c82772a7ff5b2ddb0a752a5c304be59a4e73ac20a7770bdc5afd9d317c16cb6773a02a3c398cd4e87a166508b3d9baac57136713eb2d2563bc6304d5fb56644cbb64fc3b1c84adb6c1a25629d76c8569e4e413877db84b328963857219ca745d195ccae575e14cbf9c56b11cc3d36c18ce3fce22a0473af4d30e3b8c272398279ba4d30e3b8c272358279864d30e3b8c2723182b9cf2698715c61b904c13cd3269871ec1395229867d904338e43168b10ccb36d8219c71596472398e7d804338e2b2c172298e7dad4a1641db660eb500e4038cfb309276bf3880de71108e7f936e1649d24c386b31ae1bc208acfedcc1307dae7766e131ec20ba398a69dd9559cbadca5d411da2cd701b32e7cb934c104f93864a71771421eaf2037380f01e03a350fde9bfd9e5c0ce0895d8c60d9e6bf2f40602f8e62d5ba06abbf03973cce99ae3915c796e9c108ef259d392417d96694a773a17c0d95b39772a29c285196390f554860b02678b77addb3d64dea2b478be416943bd4fd65ceb1ce11cbb851005b5ba037027c993d1312e398edff87505ece89725806943aa6ac131ac673d5fa27a3d2f30abbb75461f48eb26da95288f05e69ef6445c6c13ab6a938bf4405c05551140054bdef15008ce5285b01f07784f16aee4d7fd6aa1ebd9ed05d262d13b27dfceaf24108dc3551d85f61bb0dd6ca0ea9bb6638ee5b597c0961bc96dbb10cc096c8803bf5eb46655c308b10cceba2685fe2cf8dfbbb99f1f6393d83505e1f85dbaef88073dbd521843744e151026b5c2aebe836a9047ccab94666f272719a74d4353bf7a081d424e2bcae6d2e027ba33db390e338b1661942795314ab368a7dbda038d7dda7227837dbb4fe771e675f9c6dfdef9d08e72d36e12c8e25cef311ce5b6dc2393f96387f8670de6613ce9258e2fc02c279bb4d3859f79963c3b918e1dc6f134ed68dd1d87036209c77d8849375c2171bcee311ce3ba3d8ee14be3a7ce06c775a8af0dd65d38c24d6cf35b1e11c8f0625eeb60927ebda0c369c4b11ce7b3871f69202eae487179b853b27297ed3617aa0cc7c2f27aee922c8172fc16fd42645e22f5b02b50846c94bb9601f8260df17d506a7fab85c807bad420aac96a25c71a50ea55ae96faf90195ffb3a99dd713db986d07e8d20df1f85abd8830b1ece6d126073ac3d9a8d08e127ec991813c715c1235075f4494e94c3050ce8d6a9f14877ea1635acc6f8b907b68aaa17b2c94fd93b77238edba8dc88d03e60cf57b1e6c672a1f57710cc076d8219c7f1a09f23989fb609661c175a7f1bc1fc8c4d30e3b8d0fa6904f3219b60c671a1f55308e6676d8219c785d6df42303f6713cc38ce6b7f02c1fcbc4d30e3b8d0faeb08e6c336c18c63c7f27904f30b36c18ce356532f20988fd8bdee82b14fc4b6eea2083941bec8ed0449e74f72552f91d3be18ab23b64fdb6e41201f8dc24e0be558a56785e50236e58571cc16e54b5a269703b64a51514d91e5721dff1e15038ff1afb84cb653d7590c7ea45de21839f8d19476ec3d8e1f1aed8a007fc99ea9b271eccdcf4228bf6cd39c90799c2d0036cbfc1cc2f9b84d388b6389f37684f32b36e12c8925ce1f239c5fb50927eb6255369ceb11ceafd98493b5f7c486f35c84f3099b70b2ee7bcc86b316e1fc3a274e38d16b80e3376a391061fa864d56378fd307cf667577219c4fda84b33896382f45389fb209e7fc58e2fc05c2f94d9b7096c412e7a308e7b76cc23927963897209cdfb60927eb70301bce9d08e7d336e164ddc69c0de70908e77738718e13c93b1e02077014a7ee73e85f6ac0e8cb649b24fb31c2fa5d4eacd37c58b788d48987d94f516444cdd6d43f090d7b7c2f8a29dd878a036df78faf226b7d268ae9b3da5a5ba4fd4111b04cc1ab330ecac57747d9f9c83abf6fcf6cf938ceaaeb8b50fec0de49de8c63f06c65e8e75101f0c328b65699e3b3d5387f10770182f7acddf34318a72cb2cd0f390465fbe7a268f0e38dd24c593cde75fdf791b5fe8813e7145f5ddf20f0fa37f356fdcbd5cb91edcf3d950bf341c86a7f6ccf648638cebf3b0659ec4fa298cce81600f54a90bb17dd0a01ddd1c8f64aeccd358be93708e64fa3fcc2c176896fadc08b100fbc7eff5b08efcf6cdaaf81d577ca86b3072a457f6e134e56671f1bce4311cee76dc2c9ea8a66c3b901e1fc854daee8799ceb39d95cd19f4165e72f6dc2591c4b9c37239cbfb20967492c71fe00e17cc1269cac1b5bb1e15c8b70feda269cac6be1d970ee45387f63134ed67dc2d8706e41387f1bc52680733ac323cad663ff33c2f76214ee640878abb4442d7b977a247ef01208deef3a7f3d9cae64e237f4d61f35cf7f6f0bc8388e61fe1759e41f6c01c93894c106f23064912fd90292b1e7cd06722e02f9475b40328ea9b3813c01817cd916908c2b2ed940ae4120ff640b48c6a6371bc86d08e42bb680649cd3c106f24404f2555b40328e3fb2813c0581fcb32d201977a56103598f40fec59eb97071dc14ad0b42f91a770fdbdb651b146d911cb6c91d63e1b5f84dd88201210defaf517cecce9b48689ef652253d3d8076ab14b693b7a3781117d81d08eceb516c61eecd2d72a76b79b38841a0fe343d9df5e3b8ebdc2c94f5ff16e58a0d17284ce082826089b1728aefee49c723ac6fd833612b8e5bf94d41c5c0dfa398a88debf9ec4b5846b46c25ec3264a5ff8832f3d73b4aac17de578ab0f0c8666b9ece857533c2facf28062ce61d40a33d0fa2ecfe6614f333b36bd6cf89e5ce9d739025fecb2698719c395c8c60fedb269871fc76c17404f33f36c18ce3b70b6620986fd904338ebb1d4e4530dfb609661c57594e4330ff6b13cc38bae9262298ffb309661cbf5d3009c17cc7269871f4228d4530dfb509661c1d1ee310ccf76c5a57c15a05b1adab188a70be6f13cea258e23c12e1fcc0269cac1f7762c35987707e18c5dc6018ee3d703e107eb4f0f07dc4896f98800d4cabd52653206a97f3f876e7f146e922c6dfbc8c1fc6ee08e3c79c1827086f51b43bf6b3c951173ef45e2379c0d070a98035bde06faf7604400677174ac7f513b7c722b8f059024b779a616cc4b38dbdef4768139c688765a88c744c59072cc62798306e449550174e8c79068cc1f69c61f428b1ed395380f076b5b700601ce0602b007e820a806e9c68274ab42ba47dc287ed6b9cfff56ab73910a56787ec900900765ce3fced8a5fe61ceb1cb1b531acbcfa20c0dda32861a9890c8ba5c5326f2b3989ab84fd17c2d8831323de754637b0746bd56bbfc6bb41350cc1ecc90973bc0166e62220be601721b0bd38c1eacd4fe78a036df3d39b10c2de9c08834dfc8ae310f15284b20f27ca490150568a2629a455943b7fe91e7f0b6fb53485ab5afa3742dc9713f168913c01ac49ba4bb6a7b5d9380e8494a1a67e3f4ea0c137f189e3471cef40f6d9df269cc5b1c4791ec239c0269cf36389f3a708e7409b7096c412e7c308e7209b70b28ec9b3e13c0ae11c6c13ceb9b1c4b91de11c6213cea258e23c0ee11c1a4557b350fe768f30e25429dcfe7c7c7beb272384c3a2e86a6637e9268e136887a066fbf0a8acd1ed6e82a03dca1223707cbccc85f071648d23a2701403c2baf6b5c4fa76dcfd47df401847463b5674a06fa23f02a11d65ef305c1cbf9a7535423b3a8af2b3e880731c4f4608c77022f43689ec8489606c63ece311beb1510cb065e7772f8aa5e7fd5e04739c4d30e3d8b6bc0fc11c6f13cc382eceba1ec13cc82698715c9c750f8239c12698715c9c752d82996713cc382eceba0ec19c6813cc388e495e82604eb209661c17675d83604eb609661cb7a7b81fc19c6213cc386e4ff1108239d5ee49dc8c199fad83d913b988a745e1df9cd36eafb5d22de7ce348afb82adaf202b9d6ed330da3cce12946d18edb30867be4d388b6389f3568473864d384b6289f38708e7c136e1645decc286731dc239d3269c736389f3748473964d38591bf36c386b10ce433871ea5d0f8b7cadd0388ffed42378b3a398eb0ea3e74b04ac5e6ff27d46b95236d5ebe5c850f2baf696584f97c943880ba2c8ee54664fdd56258edfa6ee86fa438536e16475d2b1e1cc4738e7d8849375b6261bce7284b3c8a6ba7d1ee748115bddfe002a3be7da84b3389638af42388b6dc2393f96385f4138e7d984b3249638bf897096d8849375ff39369c2b11cef936e164dd308d0d6733c279a84d3859e780b0e1dc88701ec6897386f0af0086ce67adc3036614eb787ad3b8a9e1b952e7af6639a2c43a0bf9b60413f0ada8657a382770fdfd376acc33b9646503c9f6fdb709c8728fb005641c3fc83c14815c600bc8387e90f91c04f2485b40c6f183cc07239047d902328edf11be1c813c9a1364a1af766f2397b8d02b8d163b4fec74f469946710d588eafa4bb9eafaf5a8ae5f18c5fca66c9d7a8ce34b6c2ebd0482596a134cc6c9626c30bb22988b6c82194767f37f5029bbd826988ccd7a36986f23984b6c82c9d8906283f90e82b9d426988ccd7b3698ef2298cb6c82c9d8326583f91e82b9dc269871fc88c4fb08e60a9b60322e7e6583f901825966134cc6c5af6c303f44308fe184496fd5bbccf95d2fdccf485439024070fcb7eaad4260577282753fddbcca79a0464e09c3eb393a6dbb73be551e08eb2a7bf6548ae352ed3ea88bb9dadeed5618eb7bb6ed563e89ac740d27da31a8548502009c7bb083bc3b1f7499ccf6adf2f5a8b65fe172d5fd0e212db77bf51c634794ad5c9d890a83b59c7887228bdd2ded116632bb9f918ac8464fe782b809d9e8b1514c7dc08d29aa05c0de8462b3c9710867451415546a96cfa68a8ae37e60035176af8ca219450de02537a3e2b815c60c64a55551f4a0726946310e81b0d9e86508ec3a5bc1c6f19b5c1720b0eb6d051bc7af1d1e89c01e672b58c6d6291bd80204f6785bc1320ee6b1819d89c09e602bd83836b04623b027da0a96d161cd06f60c047683ad60198755d8c09e86c09e642bd8383a032b11d88db682657460b381ad40604f8ec22508ee9606891604c124c866e97669143bc412e73a28e67e263dc29da07a73795c7f8bf06ee2c4ab37bc9e273a61c36b36ebdc87f06db6c7c512c76d08cb10ca6a9bd6deb36e53c436343d0139ffb6d88493755f1d369c2b24ce9edd7dc297a5085f2c23db905449b438d797b75726f5ce9dd94e95e256319b1dfbdae0fc0b96061b9d7fa6eb09b92fcf52b14734c9ab20af56cadee9dc05cd5a44e174e7911a30891eca24f265f152ea30876144f8aa3284be57540a774b9a7235cc582f4b6d40922f3748f43e650d21c0c7adb78b6619e3e42d6bf213bd2427f74331102f0098af74d51f8f2953055bbd13e76ae10e68e64bdc6b9509e527faa3333da054265b3da0052450223158a509e8b35ac6a5da8943b53c56b5bf5590ef3c9628717eb9eda7d9ed2da7d96a0dc44e75a6af67960929925e5a2d604f9873624387d952a618b9e60fef6f9583c775526a59c698668e1f6d97fdd2a44a01b8d70fe8f8d741baab6497663a32d1d7f96b9d93f2ae70f8b44fb3f337285555d74574ff7ffac3cfb59b1b0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/8e0cb50cd3669c64386114c4aec26efa.asset.meta b/Assets/SerializedUdonPrograms/8e0cb50cd3669c64386114c4aec26efa.asset.meta new file mode 100644 index 0000000..7c5619b --- /dev/null +++ b/Assets/SerializedUdonPrograms/8e0cb50cd3669c64386114c4aec26efa.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 85a820423fe99e64cbb9ec1774834483 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/905104020868932469f33458578686f6.asset b/Assets/SerializedUdonPrograms/905104020868932469f33458578686f6.asset index 2a9a3a5..c26f874 100644 --- a/Assets/SerializedUdonPrograms/905104020868932469f33458578686f6.asset +++ b/Assets/SerializedUdonPrograms/905104020868932469f33458578686f6.asset @@ -12,9 +12,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} m_Name: 905104020868932469f33458578686f6 m_EditorClassIdentifier: - serializedProgramCompressedBytes: 1f8b080000000000000aec9d057c14c7fbf0e72eb8152d5e42b1e0c102940a12ac68b142a10d21099012024d82160a54a8bb3b757777777777975fddf5ddd99db97b7632cfe5f6e69e63b6efbffdc0b1f6cc33df79e6199f89f667ce7f913ece5f73d80c3686f563b359315bc1ca9d7f8d717e973bff7b57f2fe7456e1fc2e71fe2e749ef561d9357cc9ffeb1169e3fc3dd1b9aa6455ce97ab5891f35bea3e9fc94a9c7f4f74be2d71aef8ddc5ce9f12e7ad482de7a3d92c9f4d635359eb48ab1a44cc713faa14f7223c5e917acedfa3d93ae76989ab140fa4bffba8b5f3d74ce749a5fb6cb9a3b47c6f3edbd78dd672e75991f34d052b73642e7225d63be530e6fe83793f39e2b7a7f8ede1fca92ffe9d25fe5d4ffc1bbecfeff3d82d48f06e2ff0ae94d9dbf953dbf9f39bb8eee35d37bb5e5cf7f5ae232d15190d808c7ee2b7bff8cd15bf039c3f759ce0774942ff44cf068adfc1e2779078d7d16bc531e25e53ef37325a8439025c3b5c224bbdf7a37f89f78788df61e2370fc467b8f81d1a0f67e506714fc66537217fa2086f5770cd7ff714f77703d7fc7792b8bf3bb8e6f2768d87b561a5b83702c4ad3ef3c7738c12cf315e3ca30f8bf77657de9f2cdedf035cf3df29e2fe48f1fe1ee03eff9d2a9e8f02d7ba34806ca5ac511ab6d27e746c478bdf8ee2774cfc9d03ae16f7da7bf1ccca17d71dc46f1310c6ce0aa3d17e4659559ecc2c693bf9e03bfefe1871dd427c97afb0cef7e4d49aee7f8f8d15cfa789f7f3c1357fde1de8d85d3c1ba7c81e2764b7f17454c388d9dbeee09a3f1f07e4f2e74217365ebc3756dc1f07aef9f3364a9ca5ced381ae6dc4bdbdc4bbe3c13bf23e8ccb047f5c6a7face8329df9e33291f9e21299a1d8ea0cf13b41dcdf135c73f9f91eabda93c5efdd22bc09caf7324fee0aaef97b7b6ae23a336e7b1bbe03f780fe4cea3f49b99f0baef973a157ad53c4f349feb0d89478589be68a7b93c13b8a6e6caac27b0ab87678d42956ec5a4d63e1df22e36b4ee3983dcc8abfebfe1ba6bb4c9709e0dad1a3fe118a6cf9dd6cf1fe5470cd7fe7007dda8a7b7b8370e7807bfc77ae90330d5c3be1d65d2864f4aa1e4f191693df207935320f7c334ffceec3fc79751f2fbc7a3988ecf98aecf9e27701902dcb6bc192499b99ae3c9779622f252c6993fb2a61edabd831b4dffd90342e00ef168077f9ef42258d178a345ea8c896df152a695c287e17290c170939c3fcefc578cc5278c8e72a0f116e2cef15305fdeab7784df0663efcdf2bf57e76260335c2f599e4adec22e99b455e79bb1b77bbf0da4df21c84bd564d7949764de1801aeb91ce983f6f6bf9f283e3531ab2ffc63ac6cef1c8f1f9bebbdb3e869713dcfbb5e2ab9cafac904455f11ef86d3fdef31918798cc8bea73c52e12d62b65d8454ad8455ed84da5ce220f468a59b57a189376978fe8b3107cab7b2eed795fe4f922f1bb1ff25ceabe97725fc6ad04e85c8cbc5b22de5dc2fc3e6489f85d0cec75b1f85daa305b2a98dd8de8511a408f658a1ecbc4effe4086d4ad0ce8b6bf92268bfdcc62cf17826f75cf659a2c459ecb3429459ed79426e50158ac545888b641640588f70af1cdfe7e59b1fb925f8522ab42fc1e00641d207e972be9bbdc4bdf1dde46e25419204eab143d5689df2aa047151227795fc6698d226b8df85d0d64ad16df9429b2e4fde5e27a9d226b9df85d2beecf00d7fc77bdb83f135c4b5f0019ce02d7308f94232c0f0cc072a3a2f346f1bb01c45fb6af5496f2be64b94991b549fc1e04641d24be91f657dbabd6bbf7567ad7059bc57522df7b80f76ec332712dcb8e8620ee89be6f207e2b6a783f918c86e2b7d24046232f4d9bbd9ce0dd5ee05d198e6883baeff1eb1e82ef66c05a72ac25d265b672bfb6b83f47b95f07b95f17b95fcf7f3f66bf5b802e5bfcdf440e66fe7acac19e9e2d9e57641cc2fc6d8fda8a3cf97c92f2dda1e2fede204ef0bb4391ef0e53beabab7c7718f2dd56e5bb7aca775bfddfc9fbb13ad116e6ab13353f433c5fe55db7907d23a9f68149bf7604f3f769c87aede1e2fe5c70eda447cb855ef82d4f1072a4ef3a529173640d726e4ea0e37ae6ef33947e55b23d4ab195a384ccbfbcef5ac97ebd5ae2f9d1cc5f6f5e0dee4379f3fcf276947523d9e77611f3f76d1da8e8259f4f529ee78270e1739906d7317fffc475e2f74a24bc0dca7335bc8d206de0f383fcef45ae17cff751ae659d5897368d95381f23be5900ae1d76ad655f18c66e530dece4f374b193f23076f239c66eb3ffbd94d8c9b8dec0e27ebb966293c70b39fb8277e57dfe7b2ef3dbfeb99e8cb6d2e66b2bf28e65fef6dcb18adc1b95e7378adf9b808e92f5cdf17bee73798fff5eccfc7d27177b7ab5f95cc8a8a3e875a212ee898a5ed21ef603d7d0dfc8f00afce1b56d84f397b2633ef606e6f3b1adb789e7d21727c9921d529d153b14dcdb2a7e0f03f764b9751cb8076d40d485f638473c3b583c3b01a4c1718a6d9ca0d8ece1c1d8fbe2b156130fd9ff06e321cbd19334f13839413c4e01f13809bc2f9fc17888b24496bd31f9a72af13855138fa3928c872cd74fd3c4e3f404f13803c4e334f0be7c06e321ca9b581d4dca3f5389c79906f190f58cb334f1383b413cce01f1380bbc2f9fc178c8768cf445a3c1b593073bdcacbc771ef395bfee35cc8752ce3cbf9c8eb23da1a6fbf97e5ed59e6f53786e13bf17287a5ca0e871a178bed0af7fb5326a3fa087fc0e3e2f54e22f7dd56870cde3f7b6f2de258a7e9788e71b1439f3fc7276ba18b1ab4b154eeaf3cb144e9789dfcb153d2e57385d817092cf65d9ba1fd0437e079f4b4e6a197815f397815729f2af6671bfadfb5e3e97fd2ac720ef5da384738d12ceb54a3c653d94fbfdfae01d7e4ffa71276f759275f554ebe6a26e1db955b19b5bc5ef2dcc5fa7bec58b5b2751ffcdee23e4c832f53645ce6d89e5644f4fa0e349cc5f3717654f2c8fdccefcf593db85cc33846eb23d27ebe677f86d4dca73ef4379f3fcf23a7f2dde97f5cbe798bfbe77b2a2977c3e49799e0bc285cf651a3ccffcf54ba17fe40524bc0dca73353c59bf3c51797e8affbdc88bcc5fbf94d741eae677327fddfc4e8f5d17696718bb5315392a3bf93c5deca43c8c9d7c8eb13bcdff5e4aec4ef7db1f3b93c5cb4fd9d68565aaac338132758c8c8fc8ff91bbe2efbbffe6cf44b91bb95be85404ae79dac831029d8ee78a5f592f9579e51ee6f7e3f788e7e76bc2df06e220eba517807bb25e7a2fb827c3b92f1ed791b2ec126579e47e10d6bde07df90ca697282f63f55229ff01251e0f24190f590f82f190f5d20735f17828413c1e06613d08de97cf603c649ba4ae22ff11251e8f18c443d64b1fd5c4e3b104f1781c84f528785f3e83f150eb0f52fe134a3c9e308887ac973ea989c75309e2f13408eb49f0be7c06e3514b91fb0cf397efcf88e7b27c7f96f9cb77f57bf95cd6232ef13f67976a385c168f4b8f6de25eaaf500a98fe4ff92d0670ab8aee5bd8eca927537e9cb5f66fef2f965216398a773ce4a7fd8915798bf7cbe1cdc87f2e6f9e5f59473466419f326f3fbfc2bc07d28f70df15eb1722d7d771371ff55717f04b8e6e14ef7bfc764dd51d639d5e7572be1a8cf651d31d1f8af5aee4add8a14ddee17efc93aa34c9bebe236d3bb4cfc4e57644b9b7d4d91fd9a27bb979cb776bd22fb86b8ec413f21b265b9fbba22fb75215bf605dca8c8be292ebbfff58a6c2cdd6ff6878da67f8972ada6ff5b4afabfe5e9da7b7ba4bfccaf4a5ab9d7ba768aeca37c9bf9fc53cc7ede6171bff20e7897ffbecbfcf9f75d4f6e7f398e595b09e37de6f7e1ef2b723f509e7f207edf033abc277e3f54987fe885dd478c3df591751799f61f2b697f0bb80f75fc8cf9f3bcbc9e2f6c4bf29369ff91a2c7479e1efd7e12efddeae7194b874935e827bfcb559e4f529ecb7e89ebfccf25d3d8f79f28e92fbfdfa83c57e5f754ec43ca97e9f029f3d7ab3f55b8a9f1b94d792ec393f52f990e9f2bb6f0b9622b5f305fbb3e26ff76e5b9947f87ffbdc897cc572f0f9c47bf449eab79548dd7574abcbe52e2f5b53f5e31ce5ffbe5564bdf7740fa72df773fb0379d1f5828aed3e14364fffbff98de877cc3e2f9f71bf02efffd96f97dc8b79edc41221d633e4486f1bdc2ef7b45ee0fcaf31fc4ef77400739e7f547e6cfbb3f7a61e78a396203e47c0499477f667a1ff2b3a2e36fccef43e4b5f02183641b4efa909f143d7e120ce4fcfd3bfd3c511fa2ea27bfcb559e4f529e4b1f7293ffb9641afbfe1725fde5f71b95e7aa7ce943fea7c897e9f02bf3fb905f156e6a7c6e539eab3e44a6c3ef8a2dfcaed8ca1fccef43a4fcdb95e7aa0f11ef45fe64663ee44fe439e64364bcfe52e2f59712afbffdf18a71fedb2fb75afa7e03d2d7b1d35c99bf33e143e458db3f4cef43fe65f1fcfb2f78d7f98d32e6f321eeb52377a89c9750db1f4634eae7e75e03b9d12ce5b988533412d7c1fd37ff95f35746806be7cf60d1ff3944ce2f1579345a87697d48b48ea2637de6f321b16be14386ca3939c266a2b5153d6a0b06326fcb36610d3ea49a7ef2bb5ce5f924e5b90ce706ff73c934f6bd9ca73359f97ea3f25c952f7dc83ffee7b17490f37cf600d7909b1a9fdb94e7aa0f91e9d040b185068aad34647e1f22e5dfae3c577d88782fda8819f990d8f7c9fa10192f99fe53c1358c57137fbc629c9bf8e5aae9eb5e031f327802b0b7547d88d2f710dd81f9fa1edc6be79d611b12c892f31285fd479b32bfcf682a64dcece93dec6b7fd8d166ccdff77037b80fe5cdf3cb1b2ee327f35773c51eaf00f7a1dc16cc9fffe575327dee98af95716fc9aacff990e1b6623eff1b6d09eef3df1d156e3b7a32f690f1acadc893eb73a6826b28b7adf25cac4188b666d5fa1d6332db2bdfb45764b6f3db6ecc6e9ac765baef00eed10ee29bc5e0da89d72e6ffbdf9763dfd8fb231a01fde177b25f5ce6d33a4a9c3a2a71eaa8c4a9853f4e523e13fddbd19d14fb14fddd313fd4c96f0beeb5fc8eff662bf69bedc567d71cff7bd2cf473b8bf797806bfe2bd719ce51f4db59d173a9ff3e837dfcf7fae3e0c615fa5019b75c700ded5cfdbe9de1f71d0dbf6f61f87d4bb3ef636be492fc3ea6ef5e35bcbfb086f0a6a6f67d2cbea97edfc2f0fb8e86dfb733fcbeb5ff7be903627528c94794b1c3e578ad49192bcb86ae2c9e0f0f11f7ba0939a3c1b5e31b46ce55deebca7c3ec8bd867a77677e3b3d0cdce7bf5dc4f352456e1745be58ef3e72ad5f4e2c1c458efcde9daf04e5ecaf3c3f18c43de85cf96d0ac71ecc5f4ef6f0988d6ae9e93e4a3210f376a2397e76525e344791374f9177a85f8e3b5695280e32bc5e4a9af6f2e48d7e5b79af8f92a6723e8764dd5bb1b10bc07dfedb534953a9673e780eaedd78f3f797291ca4bcbe0ad7be42ef97fdefc7f4ebe7b739292726b7bfa2fff9e03ba89ffafe322f1d47cb36e6059a78411b94726a4a9f443626c6eba3b940860c6f00ab5ea71373f7a20399bf4e3700dce7bf8314a6833c1963a59cda8abc21ccef9f862872f394e779e27728d051cceb8b0e8bdf739fcb7bfc77b090330d5c3b3ae5cb71a53a8a5ec39570872b7aedc2fc7528b9dfc5d94a78054a786f2b7224ffda7146f259cceee4fe20c2478f590abee5ef81b99a81ede07e9126c3927857d6db1e30084fd4e5a223800c596fdc357e2f3a02dce3bfbb29e9b79bc7735cd70461ce01f265580f2acf1e16f27617f2f3c135ffdd037cfb10b8c77f478a6f46816bfe9e6edf9547bcebf1727f8e47c5af6c675e1effa6876c5f26e228ebdca3807e621d637434e0380adce3bf63148e633c8ee3cb1284b9028429c37a4c894f225d1f17bfd9e2f7092047ee2123e74f383227cb3c29fd7817f0fe54204bb51fb977c70870cd7ff3c5fdb9e0da89f384595e781364b927998e53e48cab418e8cdf53ccbf86fb69efba6c6902469d94b0e15e13ca3accd8bb621d667422f3dbec44f13b41dc9f01aef977629e4854eeef5106ae9d784c947520e9572477270e7b2e54643d2bae2729b2260959b22c933e43acfd8c4e56749665a9dcdb43fe5b862feb0b3a1d9e13d753151da67a3ac8f7d9f34ababc10205d5e0cae7754ee95a1ec67109d0ede9d0ede856932015c3b71985ca5c896dfc93d13a6826bc86204b886e934175c3bf227897d0726bdef9713f38b729f807c70cd7fc17e19b13496dfcc52be11fdd6d1d920fe33c13da8df6245bfdf3cfd264f56f4cb06e1bf04eea9fe45ae2955fd4b6dc056f6a3e4826b50deee79bf78feb26247af30ff1e0d897ca0986316dd5b491fb18e323a47499f3922fd45fca7a87e5fd9b7223a37b19c299313e8a8fa20b0a74b8d3e48d9bb252afa14a372df8919e09aff2e10f767826b2e4ff605c9fd1d8ac0b5a3ff4c99e76538454047397fef55f16ca1a2d342f15b0cec4ff68516327f9ba408dce7bf721f9609e01aea23c37e4d3c2f51c216f37da28b41d88b95b0e49e1553c135ff95fb4c8c00d74ed8d32e46c25eaa842deb89a520ec5225ecfdfd6133311731ba0c7c23f76b781dbc03fa1f63cfe55ca3bd145960ef09f7df4e1ca6cb757d6adac9bd00f2c135ff057b4144cb9538ac50f8ad0061417e22ec99d948d8ca1e12513167300af67d881ea0845da1842df68a60b24dbc1c49ab4a25ac4af10bf67688562961ad52c212fb4144e51ad211e01ac6f34d4407654f88a858e3175d0b7458abe8b04ed141ae91117348a2eb159962af8728dcab41e5be41f946fa828d408f8d8a1e07297ac835c26f816fe4bae0b759ccf7ef7d37d3b350f674888af5b0d1cd40de6645872d7e1daac5eb6045a658931605ebdfa28728320f55e2b545c87c57793e5d79fe1ef3e53d292f56a615315f993655ae27557dff7e2c79dfbf90e9fdacdc536a06b88e005f3b135c431da5af2d02d78e1defbd4dbc978cefc7fcafcef7cb3d0e54df2ffb12a5ff9d00aea13e6ad898ff4dc577c9bd7d46806b27ecd96548d898df4cc57749ff8ef92ecc4f262ae39472469619988fde7b2dd0c5b99ef33aa20be6471395798a1fadc612f38b89fcd1814afc846f8ee55bf97cbaf25cc9b7d5e287f9d344e584e2a363e530d8eb27e6b7b1325d3e57caf49afcca2cb9d622515df82df1addc436304b8e6bf5b99bf0ebbd5b381b9b5bc30e6caba83ec4b3b429173440d72e626d051ea76a4f8b65c094bde5fa1bc2ff7da58a9bc2fef1fa0bc2ff7eea850de97f72b95f7e57e1455cafbf2fe2ae57db9a67fb5f2bebcbf4679ff38717fadf2bebcbf4e795fae8d5bafbc2fef1fa8bc2fd7f06f50de97f737fadf67ef8be7724ddc41e09a3f97f9ec24f17c13b876d2789fa588bc93fdf2a41ed59e6f56beff403c3f45d1e714459f53157d4e15fafc86c83b0dd1477daeeaf3a1787ebaa2cfe98a3e6728fa9ce1e933ff0844de99883eea73559f8fc4f3b3147dce52f4395bd1e76c4f9f056d1079e720faa8cfa53e89fccec7e21b657d7f54accb5fc0eb058e7f59b036812c39f7e03c45c67942c6e542c6fde2fd7cf01d7f7f8c22671bd3f7155dc0e2befa02f02effbd88f9eb25177961effbbc225b7e7731f3974da2fd18bd241e468ccda520dc4bc03dfe2bd7d54f03d73c5cb96e46c34bea102b2f2e60bef262c1d72c210f1967edf7308e72ef04c9577294fdea308c0b95302e07f713f0ddef63458efcee0a85eff9c8f349fefbb1385dee67b2dfe01af43ddfafaf9b7650fef9e07b19f7ce5e1c0a44dd977de24f77f6298bb591164bdb4d94979a097962fd7b41a2710039f7fd33a19f9c87980faef9afdc1f610bb8e6dfc9f6a0dcffa0085c3b3a2c9465a21c4be806e2fdb9a75f513def77e106f12bbfe9a5f9e60be41bd9e79388cb974a9cc56ff41a20bf98f9eb7cf25dd95691eb6ff2c135ffbd362e232ad7da297b15c6ee8b31efe80d8a2c3967f37a204b8eb7e8f62a4c1457b1de84ed08e2f635f3f7918ab519313f18749c4bce2b97e9f46dfcfb4589faefe5f7df29b611f4fb6fc52f9c43f8bd1247b12e24366e12348e3fb2b8bdf16bb19eb1e4ed24becd166928f7bb1a01ae9dbc5124d6bf1625eaff95b601f7c6127263ed909b99df8ec47ac7e82df16fa272feb9dcdf633c902beff35fb96fc70470ede85a7c0612f61d4ad862de73f44e10f69d4a58727f8da9e09affdea570ba4b84bdd2ff1e93eb5bf6f2cb8df96cb9be45f8eca28549a4d5afdebb4b6418620d893c53247a77dc6e966e06f7f83b7f885fb92ee6e004e125d241ac255822fddfdf229c7b00cb7b3c262562fd63894c977fc4b7726cef5fe45bfeec4f604b417594e5debd4c5f37ba0f84771f7897ffdeafd8d6fd5e5c165facc896df3de0b713fe4aec3ebfd0948bf2db982dc0398ffcbd64dac09f8a6f1f64fe7ae48342dfef04eb5a096449190f011e728ec2c38adc873db94be6fadf8b4498bf2c4aa4732b6033a9a6ad9c7ff89b810c391ffa1110ef47bcf82dcdf1b82d15f346dc725df7aeb4df5475d891c5f365aa32b2853e8f32bf4f7a54c4459403a5722ffb28ab79dc5afabbc7805ef2dee3e09ecc4b4f817b429f98df957d42f9e09aff82bd2ba2a20c8cca3d29c603b9f23eff7d82f9f3e5135e1c976d43c27e4e095b8ef53f0fc27e5e094bee6b31155cf35fb9efce0870cdc35eab842dfbff5e52c216e3cbd19741d82f2b61bfa8842de70dbca284fd8a3f6ca96344b6975e55c2963abd06c2167b232ccb56c202691e932bfc47f47545aee8f78bbe01be7943d14dca057623e31bf37d4f319fef2b9d057481e93e025cf330c49c8c32e9dfc4d842a4760db607e218a9e30f2b5297c57c759958331fa907e2c0afebc7df599ee80c3091472372ff6c99ae6f02166f2608b7a1f21d1c977a2b455de4988d586712690c58883644a409b827f7d8d9211e4e7912655344ea29d7e98f00d74e7a2d17e7582ddf26beebaec487ff5bac658a9dc704748d9dff0475ad9fa2ae629e7af41d45d7773c5dcb45fdb73c41fd57ca8834013a80bef0843e5caef97957095fec5f51febe9029df7b4f79ef3de5fbb9feef57c878cab3b3a43dbd0fec4986a1b3c3e6404fc958cc1b97f35622b25c977db041db2fed84aea22c88c8b27190d0ef0311b74394eb43c57b628f97a8dc876334b876e4ae5ca8c8fb08d892dc1f46f41544e47a87e9caf3ab810cddf320fba1c8f55e1f8334f858e82afaff564a6e4313bc2bd75a4b5e726ef3270a2f793ddfaf73f45385d7a79edc034e50e47d66c02b0f791e84975c7ff639f3dbfee79ebe15a22d1291ebf9be04fa8a6f2372ed5bbea28f7cde1e7cab7b2ef48eb4459ecb753a323e53c173a98be85b8c7ea1c4e30b118f8bbdb4af90ed3b1d9331d5e546e4fc554dbcd17373e4f38589e32dcf68c1e22dcf688974429ecbf13db946375b84f795268d3a83673ac63b27d625d205b149f9bc6b009b936b64e55e27725d8f5c632bf78fd8aadc07fb8bc4c295e55b3744af1e8a4cf5798ea2b75c8729f72b395cb9ff5d021d7ad6a0c3b749ea20d7e0ca3d50b62af77f48a043af1a74f83e491d84df8bcabd530e57eeff944087de35e8f063923ac8b6a4ecefd9aadcff25810e7d6ad0e1e7247590f95fee5d32c2ff7ef4f7b80eee3b8eaf5993efff3636f756ee33920faef9af6c6f3bfe698ddc17b79ff24c8605e3d8d71f87d8f31ee05bdd73358e727e91dca7448d23e85370df71e2b8f67dffb73119ffc4df8d0cd0871311eb91b85b803cdc6b2e43ee2db0451f46560484310809438cd364652961085f941505327241b8f219bf96fbaf88b1c7b5b2ded60f3c975cfe56d246ae1f9bae3cefa1c8569fab69932d74aaa54f9bac3a711ddc779c3feb1ef67f2bed2f4beeb9910faef96fedb8fdad7bdd1fc7d83319168ce3107f1c62cf7b806f75cfd5387616cfeb317f3e97f741dba55a3e57eb404a3e8fc9ac299f8bf22d4bee03728472bf61021d86d6a043832475e82ade977b7d6c55ee374ea0c3b01a7450f70fc174107d72594d141de4fd1d12e830bc061d9a24a943a2ba83ae8d28d7f7897ec588a85f64c9bd3a8e04d7fcb95ccbe6d8e721723f1399afe0dab764fb0cf754c2957b7f1c05aef96fb3b8ec8858c396d5227e2f4bd473b2e4ba6fa56f3dab1578b7157897ff2afb756489fd3a36755064cbef94b5e759a24c8d88f57359726dbf3c3f42bed716e8d006dce3bf723dfc31e0dad1e1a06c8ff5413f2161c97d3ef2c1350c53eec1b1095c73b997fbdfcf92ed8463c1b5640ce51ca7c851f4ca026b12b364193e31b15d48aeb2ef2d4beeaf22fade36cab1fda9c9c9d3de13eb8cb2647b6034b8e6697d8417d6a6eb95b026d71096949b8dd85d67f0bd4c13387f41bed71d70eb0e64f2df2e8a7d76f174defcb1a283fc4eae833f1e5cc3f0657b6313b8e6f2ee063ac3f4e80cd203c8cb92737f4ef0871ffbaebb3f1d37d752e2d559895f913f7e5be458875c3757435ac4f4964cbb2a72453cb72873db6a94bbb3a2af6c2f952648eb64d255faee09e0dad1ef6039773568baca36d42670cde55dafe8df0be824e71f6069ddcd1f56966c23ed9f5c9a6f79db2fa7c6fc14b4fc1a29e4f78ecb8d08bbc9ea03e229f664c892f57e359ff603eff603eff25f591f9d00ae1dae87cd5564cbef7299bf7c90e5e428712debf66af93010e83000dce3bfb2ae7e0cb876743874a4c7f9b05c242cb95e3f1f5cc330653d7413b8ae05e4c9b6401ed02d0f30e7bfb20e7722b8e66188bd18b264fd6a16b8ae555de7ace1200c79467d0d750ac93c667f702f0b5e47917db1539393e7bf573be28e334d6025ac90ad64fdddc60dcf5573d80c3686f563b359315bc1ca9d7f8d717e973bff7b57f2befcb20fcbaee11b77bf45775746e7bf1e6eb0556c9df36989d76f34d3b9a8746e9538ef7319139d6faad82036d095bddc7956e4c8a96065ac942d626ddd311519fa18f7ef42e78d5257e84959d582b8a35a105cb932e7ff12e7b32ae743ae64a5737fbc73a7dcf953e1dc2b72ae273bbffcab856c009beffcef9732c709b68cad72ae66397faf74e52d74d4aefe664d51dad7b9ab7e33c39159ee6ab7dcb92381ae74aecb5c0d67ba7faf76352d71b59fe8dcab72eef1d82c61a39ddfb56e68d5e35ee1fc5b17e62c814cafe3be81ee47dc613c994cf94e6cb8f6fd5d5bfcbf14d91e29e276799c94e565c35afddd1acb51d552e2ff187a4e8677524c143206b8c822be7b03597f77dc7b463582c1e3583d867afbf678e7b1c109e3a227c393bbbd1b83780ad77e73ccc215737efba9b63f6a83587fb74ba6430d514b0496cbcb7147c98244a176ed5aeeaec32afe880ebfdb4d353383f8bdf74addf78227401db7f0f327803bd43bcbf9c75ae74f99f3f228e776b1ebffa6382f953b7f96b8ea564ba15c2eaeae0bb97a115a93a218e6a80eb33ba23f6bbb58f9fc1a3c9c1e74bd582ce2a0fbbbf5a23609cc110bcbad304545ad496698d7a70c1e3a2277f805b5f5e9d2c04d975442c352264b97320d329d016af6f889d2a5612c5ef174e1ffe91936426cbb261d3082b574041b6e1fdbe6baa766dbbcabb7afeac5b5fc9a24b4c1441a60046beb08baf39b666790e03447c3fd453d3135863b24cdb0a9cbb06db5d825a30346b18e86622ea7d84ca7567d452dae1122b82e26b8b9a1e07a98e0168682ebeb0caa71a6b3247fb6c295c20bdce0e6c47bda7bab6e4d6f4fad903c59b30a983535d0a50d47b8a3562b35715ae189d31093dcda5472234c721b53c98d7506e5ce10cc7c2d3db53292fb9ad6499791ed58a24a76d012b2898e1e77969105a4f4aa771ec97f8d76be5dea7058edd6885739dfeb3a9b12136d9fb4b7efe0d2cc66ba2eb0601a618477d0593ec7de114b76d5f8dbe1c6df54279c87b853326eba032eb819965f3b69f26b24487e6d8ea99c6da8720b4c706743c12d7579c4259fd986a8d7b6e37282fb183ee4d3a99ab16dde439f2bba30ac8d9958072c0fb4c2aca9aba9f7df512799a74d374d84172f5ebc4735e15d70e1ad31b5bb9baadd4667526e9e5b466a52b39d7b5e9ff958f769a9dbd11a97b9c2bd2e0755dc445f70c39ae2fc163b1a725d129b600fa669a2bbde808f3fd16a264626bdffea222df89eaed5d32b83e592b69803eb65e8c0da6176dcdbd48edb6392fb984aee80c1e86b08a32326b89fa1e09d30c1fd0d0577c204e71a0acec6040f3014dc19338b81a666b1b34e32779c839251b9272eb88b4e30afa6f10163d36a5a578cc710531edd30c979a692bb6b24f777eb587cebb7cc1751f15ef299a2165e246a21357f917c2135546746dad2820ffae7b8d385a935c6ca8b1ebab4e7263b3c0d269ba313ce7b1e7689bd1c17feaff35f35e18d70e13d31cd476834af1550f35e5896d855932502355d7a634c76d330d9ac533b01933e98f0dd35c24f0828bc2f267c0f8df06d0185f7d3790ab7d1b485d453243b6965bc13331e1aecc1ad5e9393b3166638bf8b5d2df87d9963138795d8a78c649a8aafdb241acb929f7a431f0b3ec5aa815baaeb3dde68d7e3d9a533e61bfbeb0c9ef796f3757dd546647905a240f4a0f1f0cbdd47d39d10786a4e14deba5a9ea88be7895cccc3e56b3c5c24a0871ba0cb706e4bb87cbb66385e98ad723b05f8bf578be49de5861d1f9836c94adcf83a6a4a36b774d31aed38d768072661b4e9d01e33c78198ff1daff1bfc322c1fcef20ccd6f9fcce1aebc4098c78302678a22e13d5721f04cf2a4330367beacaa6806cf2b0284c326433542798d732f8444da38af7304ce5293aeabc648f571b79971c9c4292ed765c573abfe5ee53feef4ae75f7ce664a12bbdd8b9cb737fb1f36ffe069ffc55e8e43dfe75bf4044866344a69a12d905b390691a0b69140d66212374c27923787a321692a011bcabce4bbb5d8aa5a45e3af9ceabf4f6efeda5e3a5f5c9335c9fcc2d974e57cc13efa64bee964c1c7ca4a89fcb8d928f4b475dbd67bb7af74ba0b7aec2135cf36a56361ab7b2ddb1bc31479337ee0e9837f6c05cd1de3a57c47b7dc6b92dddf2846e25db4dd66c770a778548de5d9ceb039d5ad3c6402e672416f9b99ac8ff1530f2a3b0c8cfd3459e27d11837f2656ee4b9bfad727e17bb695dac443791cfcd76fe871e5d3e5de4ce785fe6dc59e3fa853210ca1ad78e9605f4d8a3317cfb68f0656705c33706f3abf30dfd6abe4e30af5af3116bd36e8fb158a2efab4b74ee142a41df4e10f8e374c5833b2eb41769f1107c9eb4deddbb0790a835578655c30b5cd7d9aa5acc124e2746c88dc75cf842cc8517c65cf8a21a8b9e594ef8bc0a55e9645daecb7262073e01cb84459a4c784eed6099702296098b0d33e19e3ac1bc7253928ce019b8e049188ec51a1cf5ea04c3315997e7dc61b74cce151ae5bc55e1baf4e0b96e890eaf36c72d65fa79428943c7f2dc145db27072a5c9a4f7523c49a6ea92c41db0cce4e40ab5be162c51f64f3a519631fdc48a9ac2c792651a565c95e98a2b9e3356c51cd918b76d58ee3ab2b24045d774cc012fc71c30ef97125d8b015ce35e58ec56e862d7dc2d660a9c4a6481d20ae677bdda17af9d0789e90c4c83953a0d5a020d0a5c6bacc2177704d06226a6c5013a2d1abb05de6a47456ef9fe54ae0c14ee2c2c9d2bb074ae4c299d67633ebf4ae3f3efae1fcce7cfd109dfc1cd096645e0de98d6ab355a1fd32098d67331e16b34c2df0f287c1e267cad46f8770185ef8319cd3acc68d6a76434f3b14c716022e730208dce610116d30d584c37a614d37db1981ea48b690b37a6d39c18ce8935317931e875f7cd76e25a2cfe1d24aefb6974e8efcefec9e43a10b8c62db575209b3449d3df9d6b547dc54732a16d66494c2ce3c3a0ba2525c9048095fc0598511cac338a562c5e3295c4c63626ba3d137c2162ea996021a6c72189b221d7c32b978a8551a4ae4121a6c1a13a0d5a6a494c15fd76a96bb108d3e2309d163b002d78684b9c544f3dec222cecadbab01b33584be183aebc39eb5965b07a493116eee1ba70f9acdc256e9da800b8a6d46b452558e847e8426f0b625d9316fcbd0af79d20fa2cd6e9c3fba5f896636abf942b2740bfd412acac390a2b6b8e4ea9ac598a413d06cf4c6a5913ef0f9395cf25014b9b529d16bcb43956175b1ec9e3143fac06b6050f6c7f2ccac7d764c5a3c4c615dc8bc0680789ea322cf41392b5624c8bd4acb80cd3e7449d3e2db4791a6a213bf882e8b01cd3e1249d0e1d12e66c9d2ea99129d769c56bcd27334d2ba569b05af30a9d705e4af0bdbd4c5a292b31ad4fd568fd7440ad0fc0849fa611fe5b40e1153ae1bcf0e247671a8d27576292cf30955c8501395307a4593020ab30e1676984bfdf2298f0d53ae1bcf4e2077f9a8eaaacd109e7bd60e72463dd097a8bd7629ee2dc640427c8eceb74827909745e3282139436ebb1443c5f93880fb70c968807ea84f3f7b7b1eae5667f7725446a0bdd2f70beaa538b79fff573fed314b90916816fd0e9c98ded428db145031adb464cf8451ae15901851f8419dcc54c5334f1f106dd940039d69d2d1a80de349c2a77b8d7ebe58f57c8b3dd02ac8af5757e173b7f57c46a54d92cde80e11207b81217bb2de9e5ee775cb63756c59f0f749eefe2fc0e727e3b07ca0d9b74b1e6767589c6ae72b95d5d6a66209b31cc97e9302f4c0be6d461f2f1f7a5a27b235b69d766b355a0cb255b7ceff5cd2e71b5e033b28225c716cc875caef1218fb70de6430ed609e75ee28a643c5f82919e4330c1571a0a3e542798e7e1ab9211bc0c177c984e301fa2bf3a19c105b8e0ad9860f7f45945f00c9d8b4a20fc70cc3aaed558c709ed8259c71198e6d76934d7367213687e24a6f9f51acde7b60fa6f9513ae15cc31b742e85e9544f90258fc654bf51a37a768760aa1f8309bf49237c43a760c28fd509e7c5253f39d6b4e2771c26fc9634083f1e137e6b1a849fa013ceabacb72593f71354594fc4ecf0f664042730c193302bb94363250bb38359c9c93ae1fcfd3b195203700ff04dbd06700a86e96e5d76e5b30882d600f820858d95ad5331d4f760a8ef35437d1a86fa3e1dea4569431d9e0ad7e958d6ba5f93b5aaba04cb5a67606eec8134b8b13331e10fa641f859988f7cc8d0479e8d59e4c3863ef21c0cc7231a1cda55ad09709c8b59c9a33a07dc3598959ca713ce6bcf8f25832441edf97c4cf0e38682b761ac9f4883e95da013ceeba14f26a375823ae88558223ea549c49c6ec112f1224cf8d31ae1df05147e3126fc198df0dbbb07137e0926fc598df0437b04137e296629cfa5c1522ec3843f9f06e19763c25f4883f02b74c2b973e3e73d572b97f982b4a0e572952863e562b120959f6025e895585c5ed2c5853fc8f6851a24acabb0b05ed68505270414555b7694faa0fcd59816afe8b4f04f5ef4ea28de7074ea1a5c8369f0aa4e83060c4e0bd8dbb58caa80c5ebb59897784de7827a06f312d76179edf534e4b5eb31cddfd068deb25730cd6fc0347f330d9adf8869fe9646f3950135bf09d3fced34687e33669fefe8ec932f7a9f2f7cd9be8e6f982ffcd02ea26de0dd9bebfef665bb3b7f8f053eabc815c4974cf161e195cebda5ae7f59eb0e0c97b8778b03fab45b30fddfd5e9cfd799c6351acdf852dc12118f5c118f01221e6a5bc9f3d96a3b67b9fb46a59840e6b598bcf855326f3edd3af7cb2071ba5517276e20efc51e288dcff79d3f75ea32efbf7ede7fc1da9fb76146f681c6c86a0734b2db31e11f6a84d70928fc0ecc023ed25940d7a42cd86be1f6777e078b7b9e351fc8868877f302ae92bc53a7254fd38fb134fdc4384defc2c2fc140bf333e330efc692faf33438ab7b74c2f9fbfc50719341867b31525f62a4dc63bbe564a75440dd8781fa3a0da0eed709e7e5d1ff58f5f268eed860e5d1033ae17c9acc37c9a4428269320f625a7fabd1fafa71c1b47e087313dfe9dc443663ee1469793092e7fce18a60ff9a8e6ca7da5fe156dd57a6b488fa614cbbef75daf1fddb97c4c293f3668384f70886fa070deafb03a27e1413fea346f8c701853f8609ff4923fc84f1c1843f8e09ff59a77940e14f60f9e617c37cf3a44e309f4ac5cf3f379a4af514c6e3370d8f8b2704e3f13426fc778df09b030a7f4623bcbfbb3b68e677a4e73be0045f25c10fa36fa15088224b1af921f0f87ef458f8d8b286677509c3d9fda55129523d59fec493e5394cf4df1ad19a144f20fa79cc9cfed198d3ae7b0633a71730e1ff6a844f0e28fc459d70b71616d1387f7e3e4461ac208a173bc19615be84452812a91ea1fcc9c122f432263caa117e6840e1af60c2b334c24f0928fc552c296ae992820b2af2d503e235842089f11a166a6d5da84dab855a7dd3be20a1bf8e855e070b5d76517147e30df1a5de41f606167a5d5de84d986e756f7cee7d9090dfc40ca99ec69046ce0866486fe984bb67cb479228ec87e182dfc604373014fc0e96100d7509d1c2e785fc13fc4bdcd2b38c055fe1f82ea643239d0ecd7ca6e85f74919a31be8785df58173e5c4056e0d403bc4d86525d84f2be26ecfeeeb6e37cceb92d7b3d8f71ffb59af90fa14ce7eecf4d22d5b79774a782b9fe5057fbd921c26b3f7cebbbccc705ab437da0b3249e9a4d35d1cb92d153cd85c70c09e0432c80669a00a22904f0111640734d002c85003ed605c0672eb448c6932598b9f009e6d85b6a1c7b714130c7fe29a6752b43ad3fc37ccf8e582d106e59165f5d1ec4e77c8e916aad21356c6130525f60c2db6884970514fe2526bcad46f8d2c260c2bfd209e7159f7611dd093e1ae1090eb4f91ad3bcbd46f3cb036afe3f4c78078df0a7030aff0613de5123bcd1a260c2bfd509e79d183b450c3b31bec3d4eea4517b7240b5bfc784676b841f1350f80f98f0ce1ae1d70714fe23267c678df0b7030aff0913de4523fceb80c27fc63c65579da7f446f5e19e1bfada4010bff90be620baa5c141fc8ab1ebae61f770713076bf619af74883e6bf639ae76834ff3ca0e67f609af74c83e67f62dea797a9f7f90b63d25bc364824e7802267f636af73155fb1f4cedbeba2e9c806aff8ba9ddcf546dde52d0aadd5fa3f686c5c1d48ee884732f918bb5900bd0adc752dd03288a4570802682b54a8345300b8be040acf91bef0298ec369496a5ec526b61610fc29cfa6a27944a5f9f5bbe03796eca1ad4c63418acd3a025833bbcf11eb84a56229a93c506fbfad5c1127888268173ca8225705d9d706ea879869d47f530ad87eaea5801b5ae8f693dcc50eb0698d6c3355a6f0ba875434cf82e1ae1af0714de08133e42d777b93c98f0c63ae13cb7ef9a0cef0403954db01cb65b328213649a1d300bd9ddd0429a621aef51f3d04caa7ea81996b6237575e78069db1c4bdb518669db02d37ab4ce6fad08a6754b4cf8189d7b0928bc15263c5f237c6540e13b6206345667407cf1043fe2476e9c33cb29ce26b35dd05a049f9916c4b45a63da8cc386b7d2b1756a1b5da8bcfc1c1f7b006657f1dadd84482afb66b5c5623751173b6f1b27f5bc29582fcb77fe2c725e5e9262ef5a3b4c9f3d75fac8ed0107a67d7bc0f6981e93f0f6b2b74b67bab607ec80693019ab5a490dd2b93d60474c8b29358feeccd6ac9e0c12f64e581e988ae5816929e5814eba70f89e39d375e170f17b4552deb52d1b8bd40c2c5233538a54672ce1662532e0c16934e09d310d662732e0c16936e02e9816736acac845eed05f95eb484c16d474c534d8bbe62ce48dd68ff1691224ec6e58d8737561f3d9b1cbd92af74d58131be70e334e74dd7d7cde40bcc80da251774ca3793a8de0dc8565ce8d7506e9d0030b791f5dc870cec6ead8edd443cfc1429faf0bbdb1c60a52abe6f7c4c25d80d5c6799fc44ad70ae63869cb1f049d29db0b0b735f5d98f57d614e11f61724bcde5878fb615534be95b62c92528d651f2cd4025da80d94505389675f2cc4859847e5fd2b703eb6bf8f253e112e8816fd302d0a755af061f4beceff4142e88f85b008eb3454e3a9df4733880eb9980e45980dcbe5aa3962794ccf40e10dc0c22bd685c72b1f72cfd0894ea53b484803b1904a6a2a8f6088a9ed453a080b7b315e2718278e33e28d092f7547b9ffaa7027e47ab928d844cec198164b745a74f4f9e2e4b4498dce104cafa5580905cbe378b333b57c9d87855e9aa8a42875c32f74a747af674197ed0dc5c2dc1ff3dcfe599cdec97541175a0fc3425d86c57485db733e05f8ef810173dd702ccc32cc9fc44fda4ba5acd805eba159aee9a1b97943b01e9a11588f58b9618fd8ae3ac17ccee28a6404f7c405efa613ccbb8e5646aaefffe62aa80a4fb0f7c6ee3ae1fcf280089fa2e217bebe56fbf6cf2ffce0876a01d4c603d803339e8a449547ee80163b370b589598ab571a307b8ec42256a989d85bd71e386de26e27b70d12b15158c4aa12b506f4110b56068cd685ccc9ad8a188ea78ec124af36959c8f495e632a79ac4e32c7bd3662beb2721ca6f63a53b5c76392d79b4a9e80493ed054f2448de4fed9ce6564fb1caf6c7e6e64e2b9c91b92f1dc8b705e7bea5282f3da6828781226f82043c1937529dc99a7f0fedb2585d371b8730da71325436c364e6c0a560c6c4e4670022f3f1513bcc550f0349d60ee030f4e46708265f5d3314f7c481a3cf15e98f043d3207c864e3837fbc30cad63265629dc6a58299c85e1383c0d38666375e4230cebc87374ee6567ee5e166f17f742e7568ed491d22e67392ac2274cf662f87216b393edf529b1b72e89794a1c9d4c12739d11c173b1dac731a6b58f7998551e6b6895fb602a1f67aaf27cccd51e6fe86a17602c4e3064b12fa6f189861aef8739ac93d2e0b00a30e127a741f842cc3c4e31358f422c154f354cc54598caa799aa5c84493edd5472b14e325f697546323012acb42ac1289f6948793126f82c43c14bb04c78b661265c8aa5de39a6a9578ab138d790c5fe98e0f30c052fc3209f6f08b90c33e46d8686bc1c4bbd0b4c53af1c837ca121e41598e08b0c05afc452ef62c3d43b00d3f812438d2b308d2f35d4b812d3f832438dab30c1971b0a5e85a1b8c210c56a4ce32b0d355e83697c95a1c66b7582f90e3957474c77c85987e97c8da1ceebb1dad6b569a86d1d8825e1758649b801137cbda1e08d18e71b0c391f84697ca3a1c69b308d6f32d47833661937a7c132b660c26f4983f083b1b2f556d3b2f510ac0be836c32ea0437582f9dccfdb9311bc05177c1826f80e43c15b31c1771a0a3e1c4bbdbb4c53ef084cf2dda6928fc424df632af9284cf2bda6928fc6b2e07d69c882c7606adf6faaf6b158167cc0300b1ea713cc271f3c988ce004dbc51e8f817e280da04fc0703c6c88e3442c7f3f6298bf4fc2383f6ac8f9648cf36369e07c0a86e371431ca762829f30147c1ac6f94943cea7639c9f4a03e733301c4f1be2381313fc8ca1e0b330cecf1a723e1be3fc5c1a389f83e178de10c7b998e77fc1d4f39f87f178310d3ccec778bc64c8631b26f86543c11760385e49038e0b31e1afa641f8453ae17c90fbb5649024180dbf18b3bdd74d6def128cc71b69e0712966226f1a9ac86598e0b70c055f8ee1783b0d38aec084bf9306e15762b6f7aea1ed5d8569fd5e1ab4be1a13fe7e1a845f8309ff200dc2afc5847f9806e1d7e98477762e3f4a2631134cf5b81eb3928f0dade4060cc72769c071a34e381facf83419ad130c56dca413cc27187c968ce004130c6ec6047f6e28f816ac24f8c2b424b81593fca5a9e4db30c95f994abe1d93fcb5a9e43b307bfe5f1aecf94e4ced6f4cd5be0b53fbdb34a87d37a6f677a66adf8335f6bf376cecdf8bb5617e306cc3dc8781fe310da0efc770fc6488e301acdef4b361bde9418cf32f869c1fc238ff9a06ce0f63387e33c4f10826f87743c18f629cff30e4fc18c6f9cf34707e1cc3f197218e2730c17f1b0a7e12e3fc8f21e7a730ceffa681f3d3180ebed9b6098e6730adf9f26353ad9fc58447d320fc39acc29b950c920415dee7b12a7aad640427a8a2bf80695cdb50e31731c1750c05bf84d50bea460deb052f6392eb994a7e0533bafa6930ba5731b51b98aafd1a26b9a1a9e4d731c98d4c25bf81d95d6343bb7b1313dcc450f05b188b1d4c59bc8d995dd33498dd3b98f0666910fe2ec6a4b92993f77492f90c9216c92463821924ef63d5e896c9084e508dfe00eb8f68958ce004fd111f6290773485fc1126b9b5a9e48fb15cd8c630177e829973db3498f3a758f1ddceb0f8fe0cc3d1de10c7e758e5ae8361e5ee0b4ce38e861a7f8909dec950f057188a4e8628bec634ce36d4f87f982d774e832d7f8309df390dc2bfc51c471753c7f11de6f7bb1afafdef31bfdfcdd0efff80f9fdee867eff470c720f53c83f6192734c25ff8ce5959e8679e517cc9c7ba5c19c7fc5fc7e6f43bfff1b86a38f218edf3167d7d7d0d9fd8169dccf50e33f31c1fd0d05ff85a1c83544f137a6f100438dffc16c79601a6cf95f4cf8a03408e75d465ac731d8d471447492b9df1f62e8f7a33ac1dcefe719fafd2c9d60eef7871afafd5a18e461a6906b6392879b4aaea393ccb3c02e8679a5ae4e3037e7116930e77a3ae1dcefef6ae8f7eb63387633c4d14027983bbbdd0d9d5d434ce33d0c356e84091e6928b831866294218a2698c6a30d35de01cb7e634cb35f534c72bea9e46658fe1b9b86fcd71c233dce90740b4cf07843c12d311c13d280a315267c621a84ef8899c89ea626d21a2bba271916dd6db0a27bb261d1dd162bbaa71816dded30bb9b6a6877ed316737cdd0d975c0cc62baa95974c454decb50e59db06c32230dd9a413267c661a846763b06799c2ee8ca93d3b0d6aefac13cec7bde724939209c6bdbbe804f3e34ef64e46f0525c70570cc7dc34e0e886a5e23cd354ec8ea9bd4f1ad4ee81a93ddf54ed1c4ced056950bb276623fb1ada482f8cc77ea63c7a633c0ad2c0a30f267c611a84f7c598149a32e987a9bd280d6af7c78417a541782e26bc380dc20760c24bd2207c20267c711a840fc24c6589a9a90cc6242f35953c04ab50961a5628f3b00ae5fe8615caa13ac13b3b97cb92119c60caf8304c7099a1e0e158b56fb961b56f17ac6e5d6e58b71e81a158618862574cf04a43c1bb6139e400d31cb2bb4e32f70215c9a89c607f8d3db0d4ab344cbd9198e02a43c1a3b0d45b65987aa331c1ab0d058fc1cc628da959e46392d79a4a1e8b495e672a791c2679bda9e4f15887c781861d1e137482f9964a1ba2a65b2a4dc432f646c38cbd2786f92053cc9330c99b4c254fc6606c36843105ab606c31ac604cc5581c6cca621a56493c240d95c4e998f043d3207c2f2c1b1e66980d6760e6b1d5d03c666265d5e18665d52c4ce3230c359e8d697ca4a1c67330833ecad4a0f7c6241f6d2a792e26f91853c9f330533ed6d094f7c14a94e38c4b94f998cd1d6f68730b30a771421a9cc6be581a9e689a86fb61697892611a16606978b2711a2ec4d2f014c3342cc4d2f0d434a4e1222c0d4f334dc3224cedd3d3a076b14678ff2ece65a49c6d8f2304e247d7c1e31ae78bc3016afe2af92305ced059534421e71e297066941f293090e1470aa4536bec8881122c5b9c65982d1663f5c3b30deb874bb02c718e6996588ab138d7904529c6e23c4316fb638ef87c4347bc0c83bccd14721926f90253c9cbb1e4bbd030f9ca7582b937bb2819c13c9f238257e804f3e3662f4e46f0305ce395188a4b0c511c80a1b8d410450586e232431495188acb0d51546199fa0ac34cbd0acbd4571a66ead558d6bbca34ebadc1205f6d08792d06f91a43c8eb30c8d71a425e8fa1b8ce10c581580eb9de30876cc034bec150e38d98b3b8d1d0591c84a1b8c910c5260cc5cd86283663767c8ba11d6fc1ecf856433b3e1843719b218a4330abb8ddd02a0ec5ace20e43ab380c6b2add9986a6d256cc29df65ea940fc724df6d2af9084cf23da6928fd449e6d3aaee751e744a0675175cf85198f0fbd220fc684cf8fd69107e0c26fc8134083f164bcd074d53f3385d374057e7327200dbbedd00339c3f65ceff2bd862e77fafa15c92f6ce80879cf877d4a48e9b42da4e8187dd4e81212c994e8174c501eb1a381e33ba47d260742760c21f4d83f0137576d78d6dc7eea772577ea11b0eff728cdb9db3ba86f40a7ea2e56349773f3d9e44f753fab4c66cec24ccf73c61ea7b4ed649e636f06432b581c7f16ac62998e0a70c059f8ab178da94c56998cacf18aa7c3a26f85943c167602c9e33657126a6f2f3862a9f85097ec150f0d9188b174d599c83a9fc92a1cae7622abf6caaf27998e4574c259f8f35d15e356ca26dc39a0fafa5a1f9700126fcf53408bf1013fe461a845f84a5e49ba62979b14e329fa2fa56322999608aea253ac13b3b976f272338c174b64b31c1ef180abe0c83fcae29e4cb31db782f0db671059682ef1ba6e09558afc60786bd1a5761383e4c038eabb154fcc83415afc1ba8f3e36ec3eba1613fc89a1e0ebb014fcd43005afc734fecc50e31b308d3f37d4f846cc2cbe30358b9b306bfe320dd67c33c6e32b431eb76025f8d78625f8ad188effa501c76d582a7e639a8ab76316fdada145df81a5e077862978279682df1ba6e05d18e41f4c21df8d7564fc98868e8c7b30b57f3255fb5ecca47f4e8349df8709ff250dc2efc798fc6acae401acd6f19b61ade3414ce5df4d557e08cbe27f1866f1873195ff3455f9114cf25fa6921fc524ff6d2af9319d643eb4f44f3298130c2d3d8e09fed750f013180b9665c8e249ccf947b2cc9cff5398d78866a5616b78ac64c94a46eb0425cb3398d6b5d2a0f5b358f6ae9d8cd609b2f7735822d6314cc4e731ce750d39bf8019743d53837e11cb83f5935139411e7c0983dcc010f2cb3ac1bc1ad13019c10986d05fc120373285fc2ac6a2b1218bd730959b98aafc3aa6f20e862abf81a9dcd454e53731536e6668ca6f61829b1b0a7e1b63d1c294c53b98e496a692dfc524b73295fc1e26794753c9ef6309d8da30013fd00976b73f4f46708265531f622cda9ab2f80853b99da1ca1f632ab73755f9134ce50e862a7f8aa9dcd154e5cf3095773254f9734ce54ea62a7f8149ce3695fc25d6b4ec9c0c8c044dcbaf30c13b1b0afe5a23b87f77e732b29051cea198e3481be3be91cf2639cf0a9df7b94ceffe744762a113369737ca0d81cf44f09ef9bf483c4fa28b8e8e769e44d72c3e4fa2abfb667a34c3e642fc0fcb30dd0c33cc379859773735eb6f31957b18aafc1dd6ab969365deabf63da6754f43ad7fc040f73205fd23a6726f43957fc240f74903e89f31adfb1a6afd0b06ba9f29e85f31c9fd4d25ff86c1c83584f13bd64930c0b093e00fac0134d0b001f42706799029e4bf30c8830d21ff8d411e6208f91f4c709ea1e07fb18ea9a169e898e2bd885ad31866681a119d608e63b8218ea84eb0bb6dbba1656461284618a2a8a513cc73c9aea6b9a436c66237431675b0d4dbdd30f5ea6290f730845c0f4331d210457d2cf54699a65e034ce5d1862a37d409e61e634c1a3c46234ceb7c43ad1b63a0c79a826e82a93cce50e51d3095c79baadc54279977bf4f30ec7e6f86099e6828b83926784f43c12d7482f9e524e7417b8d356b2dba361e404b2cbb4c4e43766985099f9206e13b62f637d5d4fe5a6305c034c302a08d4e701be7727a32820b70c16d31c17b190a6e87419e610ab93d5618ce342c0c3b602acf3255b923961967a72933eea40b80f783cd31ec07eb8431d9db94493696c5e7a6218b77c684cf4b83f09db13cb38f619ee982c19e6f0abb2b267981a9e46e3ac9eeaeedc9c048b06b7b772c09f74b4312f6c07c4881a10fc9c1402f3405dd13935c682ab917467a511a48f7c65c5f519a5c5f1fac06556c5883ea8b61294903967e98f0c56910de1f339525a6a6928b5570961a567006603eb5d4d0a70ec404ef6f28781006799929e4c198732a33744e433095979baa9c879502e586a5c0502c9fac48433e1986f15869ca6338561f3bc0b03eb60bd628af701ef45004478e6172dc6e362b166b98f9d8e472f7df13dd514b3e62b7d8f9c41b9b9c187b73acbbd299bf31c3f9e54f4bdd3b15ac9f932d0adc51cd72e75dbe2a9a8f3072b9f16ff29d5f392258ccc6395f15b2e56e08deb7f151496f2cb4d41d0bf53ff1f41be4c4b020412cf8eaeb55cebf2b41e8b3dcb15829d32f758ef355a92327488fc5088c7aa58efa2886ad2a9fc616b1fd5d9a5582e20ab6d2f97b22e3e3c565ee0831ff8a3fa959821a333e92bcc21d732e74de0d12bf5db1f855e9e237028ddf7891cad5e3b9c4b9e21a57b99650eee8bcd81d8b5e9e20aeb3aabd1b244ebb61715aa58bd350344ed5b5f0c768a5f3b442d81d555c76c7e2b25a17975dd0b8c899092bdcabf2ed983a7b60315aa38bd1ae29c76889c622f138e9ec3748ac4662b15aab8b55af007e42c6a75c6898c88b06d17814a6f13a9dc6bb338686eae9394ed842a1c63fe19e3e91574b3566a3b198adc7f28c6eb6ca6c56e5cee329757fbdd93b05aec7ae149ff3b244d599c64b8fc16274a02e461302e499510ee10ab7b4f66257e496e715d574872532968712490f12db7c2cb61b74b1dd87b0a633decd7bd3dd195b4b444d668eebf54b9dbf17b96999d8d671eb0842642c4664a38e48f7c03ed38b67f5a7fcd9ac409a8ec3343d48a729be0b4f4d656f91d374e0b9b3d8d57a554c5bbdcd0689c1782c069b7431e8a6f845353f497d27bb449738ff5e9a263d27607a6ec66aa6fa30616d74b29b3f2a1dfa4b5dfa89bc00ee1dd2e3f32662f1dba28bdfe8c096246d5eda512a1ecfac26b42716c3837531c4f746abb9ee5de8def37c1b6fbd9539faa62fa52661f13844178fdd144b845aabb967a6d03f392b4c54f6a6d2f69b8cc5eb505dbcf6482a878d72742816758a1569c961a9798f2958dc0ed3c52d3f419ac1d88d6507381f148a5ad3ba1a6a47f4f5a6a9582cb762a551b29639be46cb4c4fc93f0d8bc1e1ba18cc0cd0aec0532c99fe874cf6514cc7181ca1635042581f9c695c1fa4f4577b619c8ed4719a4dcc09ef210c52634e85c30c8cc351c9e4fa316e0cbdd8c8bc32cbb9e71119c0f202b5f9e25f0589c14c2c0647eb623020500cf0324417b7d44a975998fec7e8f41f9354c939d1f53089cb974cd64f6763713c5617c73c348ea9b5c06b9215242673b0981ca78bc9b000a564f0b8e8a50589cdde586c8e4f2636d01799c7462f2d486ce662b13921995e3abf75c3dc34dbed4fac70de9dea3c5dc2e27bdd26ce21e9cb3ff3b0989da88bd9a4a47cc478b73fbe50945cb2153bcdf977bc9eb33d7dc63e589c4f4ac62f52f4b9c6ad325dbdaff3b1389e1cac55cbc71117392fc9b84e76eb5c635d7d75b930ddb5a905583c4e49a68514c43eb7a745ee8bc5f2545d2c73932ec582b68f52ab67ec87697f5a3235bd44be3ea8fea9e696022c06a7276365d53d4272ed70dc3724aa8ba76e650bb1589e81f5e5d59c97663a2f2f62deb865115a7a65aa3fa5108be199c9f48125b2c4607d60e96e4b2dc2e27516363f2039ff102c56786aa512a7222c4e67a7de735e538ecba44f2fc6e2774e32352b9a915dea31df122ccee7eae23c773bc7999ac6628cc6793a1ae3922c5592698167ba645982c5f47c5d4cc7269597a7307e76072f51e4cc2cbc7594a9f2652916cf6dc9b41c54ef3bc68d69f5d483ad8164eea7d72f976271bc2019bf5c3d8ef1baf644778caecab52ede5ba96a3bcbf9f74af77e72b14bad2dbf3f16bf0bb1994f89e2e795a0f10f921f6b496faa2dc36275912e56f3d36c9958fe0bfa7e7a9994614c2e4ebe86c17b6383d730bc3edce4fa7653f7bacbb1f85d828d8ceadbf8fa83bebd58578a1a6289db53e58dad541fa54fdc3b954ada956371bb34d8ecd1447193e3f295ee1cd22a77f4a8cc894b19f3c64daa97aa5eb9e99e2815202e2bb0b85c86951aa9a7532a7149477aadc4e27839365662965e5ea992be343a00d3ff0aace5689646c9e89f8e74a9c0e27525363e927aba7833fef39dbf1395f2a9a650251693ab82cd444a268582c7241d695585c5f06a8ab42a646bc9d26a1516936b28d22a684cd29156abb1185e9bfeb4f2fbf452b65e1387d46b116bb0985c97feb40a1e9374a4d55a2c86d763add3d4d3aa82e94e45c5e7f3d4749e6a9078aec3e279832e9e7b19a564bae3998e745e8fc5ff466cccd9249d4bc4dc8e456c1fe6cdd59ee27cb3366d3ef4402c363761631226a9994a6cd291661bb058de9cfe7a7eb1db865bc9bc5d61278b38571f8b4e35c5366271b925fdf5fc54e2928ef43a088be3adba3816a5144739273c3e6b2d7ef26f321e064a8c7f19ef5dc225e0270e0761b40963745b32fdbef81ad59afb7d333db3773316d3db75312d4fc91a66125b43705b48473eda8291bbc37c76644d33bad2d3177e3016833b753198c8d4d18db85f4ab5d7dfefdb92f57aa97af743b0f8de95daaca1e45622a4369293ea88d5a1581cefc6e6a1049935443d57e8304cfb7b74da4f65fa15a7535d7fb3c61d795ce64b31af5c9ae63c2b77731eee7d746b81f8dbbaf0b0fddb83c47c2b16f37b7531efce6a9e9f38cbf59ce9b7b0c3314defd369daad46af41a5e711989ef7ebf4ecca128f6852697924a6e503c1d6a5045d915ae9c6703af3efbca01fcba35ea77c14c6e0416c9e45ba186cbf381f8dc5f9215d9c17c43cddf6599b0db9245b82c96f82503906a3f27032b3b465884146fbf423d6587c53af671f8bc5ec11f3da621e1b9c426d917f152406c761317834f9b1581e66f0b1582f7ed8fd74a5d0f158fc1e4b66ad907ede2b3eab20b97a7e10fd4fc0f47f5ca7ffceaca636ab17032c27a492bb4fc4347c2295791b9c20ef775cebe85e7d1536366fc1a41555d7f93f1269e8fc73acfb265ff531ddade57aa549ff1ece23b74e2d4ffa913eb89fcf5fc7eff3d0973b1a718b9d15f3b6f1737f30094f3ac0ea4499f75f8f08875d251224b258e1e67d59e64a8ecfefe5bbb08c77cb8512d7831739d793c5088c7a9212160b5db9d30f943c307635c7499eb7c4f7212b72ebeedc2b2c722ca6ae889194e590cee1a4ff6b317d8aa76a5b91aad1fe7c63cd48ef14ada9662d9ecef20e6bd5d950eb6a646149afd3dd133055b49a227c434bd9f133c56d2679f878e700ff5771cd21c29caa0bb1af2b40faa11ac5cd06d95b27aead6b665e63be8279db77bc5fc858dddad15c9e12cf50e26ae6e28a5b59b9eb06b96fe122278a9a682890358d237b96125907175901cb8d150610dd6c279462316971825b1528161ded954e64c200f2eb417190cfd9097240284016f78e837c9edee74990bcf9c85558228a1a8e2c0cb8aeee14c7f502bdcfab5e447070cb43554c642f8a237b9112193f6e570e85aa85039c90110e6cc5cde2d85ea2c456c7b5346f6e514548cad19163e3705ea684d3dce7b5bcec18effc9fe942ab4a26961640bbf88038b45728a1d577a1c9fe7f59a90d03a2dc9238a257edac560c0a05c8cbfbc741be96e90caa6b528501da425052be4e09ad950fda0ca51ee675a77a0748f3ee8430a0ebb3208eee0d4a74adabd99bec4f1923f6592877ef8d77f1ad72420d03beeb4179fa26752b40d6d1c25b37cb0675b3b728713574ad6dacdb4fb7ca0d3e4cbd1dbcaf57627a9b12535ba6eb2082a56858eb6c6daae208dfa144b823ead7e6b8f3544a987fa65918e0fd362e0eef5d4a788d1396a76140d5b4651cd57bd48df40227c6e53ebb92591266d930605b5b10c7f63e7d41109f52b5c21d075c1e124c5717c7317d4089a9a5d6bae0fc58af8eb62424e04e581807f761e69a51a3dd0f8bc124e3c9ee9d65a180b6b93c0eed237a6bc3db9e61cba61bc080dec794e0f8f178b21500ab1abcfe1fe6665499db8caa5b5b11aeae80487d243e18757cce006f868d656bdd997a1502bc3287801f1e649de69fc0390039099a4739490e1ae724d122cd0930b29053435d30278971b01ca3414793af07197d3dd0f95a1d4cc84929afe7a4d0cd9213b8099313b01f2c2740e535275055242750519293c4fc919c2407107392ee40cd495007cd41bafc55e978bd42af87aed59e93626b3f3e3d4d3fad2c974f4ffbf4fff39963b97ce6d8671cc22ea2ecf76a039f53d606761229ef4d142c67652cf9e9e5052c4fd5a743357d6630efe4a652373c5903d06956df574798914c6453a927b48dc62b5a5f5057b454b4f87ce00236acfaf052fa70b6a2c2791bc0f9a54d38878712e72b00e75736e11c104a9c8747e238bfb609e7c050e2bc1de0fc9f4d38078512e78700e73736e11c1c4a9c3b02dff9ad4d38878412e71880f33b9b70e68512e7be00e7f736e11c1a4a9c27019c3f6402e7121428549f6776c25651232a9cdfb038ce1f6dc2393894385f02387fb209e7d050e26c052a4a3fdb84332f943819c0f98b4d38078412e74a90d97fb509e7a050e2bc1fe0fccd269c034389f32480f3f74ccccec560fad7b70f748a223298cba8606e02b5ce3f6c8249689964303700987fda0473480861ae0730ffb209e6e010c25c0360fe6d134cc2963a19cc4a00f31f9b60565b6d1f02982b01cc7f6d82596dc57d08602e0730592d8b60e68610e65200336213cce1218479258019b509e6b010c23c18c0cca284d9c0b9585ef3fad710f4ae732912592d4a6472de20667ffede21c28a793b2a949783ceb6dab6a01c144a949d4046ae630b4ad2e62219caa78055d6b505e59050a27c0658653d5b500e0e25ca0500657d4a9472f27911f3e60debcf4ff57671256cd9d4a602391264ef06b680246cd59081dc1d806c4809922f5d298c4dcd57973f9081eb49058eefe22bc135ca84050e65fc2059b9a13857d8db82973f5be9ae88e11f84cf27de004036a604c99767ac700056f896a00c64f9216cbf7405d09a5042932bb6f03144d882865b3f13162b4da9b06e025877a0c40a17eaf1acbbc4c195a18c4cd60d710f80d794125e5300aff43fe307b7017ccdb667351b8a23cdc675a9504e05959ae694289b0894034436aec894152ea542773eb0c21699f080798a2d66005e072a782380ddb5a484d7c2577cc84ab577744c862c902cf33601105b514294cba2b1a69d8c29a90f2ca0c2b81564e41d33e10373ff333ef01080ae752606a7300bf497c4a433c5c9b2f37b00661b9b60124ecf2383f91980d9d626988493a0c860be0360b6b3092661cf3619cc7701ccf636c1249c044506f37500b3834d3009a7e791c17c03c0ec68134cc2e1023298af02983bd904338cdd14af01989d6c824938098a0ce6cf0066b64d3009a7e791c18c803678e7eddb17e989f2cea227f4985da8501e0986fc77de9e28fd331dc33803771ab0ca2e99c8e265ce4b1ca3948cf50f11c224eb1fda392b0eb36b26bad906f8c6afe5e3b0f7569e088a9d6e9418b335d95bbf915d7c0344b82524692fe6302abc15c07b76a7c45bf338371498a171ee2d54584b81d5f6a0c4aa6ed1e9dfc293dfe32a553b7124043330fe040873326199f1c2c89b30c0b14d64f909e6a38571625f6f502cf5a4c42a27110c7033bddce83743c511d908e413c02a7b65a2b6995c2b288c5d1dfd01cade942893dfa276966b971cf76257dc725ab48ba8d04e0415f93e9468bb04a83495bb7c0a99dc6c798c5b755a4d5dc17f3c4a55330555a7be61804c585c91413e1940ee1706c884c32164904f0190fb870132e1300919e4d300e4dc3040261c7226837c3a803c200c900987a2c9209f09200f0c0364c2693d6490cf029007850132e1741f32c8e700c8832921f3a531de8931f2c49d516e1f03616d816c0d473d168736647b400be3c297ba005a5e267bb3f8e9457cde323fed471d60f18f588571039ec1a0376b6826fa59796fd6721178a1db4918f601963c6099c332619941fbff49f747201b01680f8a96e1366225dd0c850ceb23a0676b174aac5d93ae168d61eab9567ecc841523b2c5d7b700eb1d418939f81957849579b2b1acfb01ce5d6dc2393c9438df063877b30927e9f6e364388f023e75779b7092ee4a4c86f32580730f9b7092eee64e86f3478073a44d3849978b91e1ec067ce7289b70921e7b4386731cc039da269ca4078b90e15c06708eb10927e9b1376438cf0638f32971b6ae01a7dad314c6a31be60398636d8219c6a31b660198e36c8219c6a31b660098e36d8219c6a31b260398136c8219c6a31b260298136d8219c6a31b760730f7b4096618478e368166e5249b608671e1d8460073b24d30c378744309c8e6536c8219c6a31b160298532961063b8780b0f821db3ff10290c9a7d9827250285136035639dd1694a4e75991a1bc0f58e55eb6a01c124a94b702ab9c610b4ad20d86c8500e042867da82322f9428fb81295eb32851f20374e1e14b73dc0ee055ee43326c64db6270c390d86653624b7d0373c2de21b2799cb702ac73b667c686e20a42b907cec7a0e4de9b12259f47ccb7305fe41058c2c6c6b6c8203c15836c44a73db0bfb9d4ded03ff99acf73f36890616b4285ad16c0368f129b1c5794d3af57bb53afff6b1b05f50065f23e9438e5de3698179431255d1248b645d0408071fef62d4c3c51de2e6084fd3c64d59d9f40857b41263acdf0eace6c5fa59bb0646e44057302f096fbda0493d032c9608e0630f7b30926e1483719cc5d00cc029b6012b665c8600e013017da049370761019cc910066a14d3009670791c1dc1dc05c64134cc2916e32987d00cc229b6012b67cc860f606308b6d8249d8fe21833910c02cb10926613f3919ccbe00e6624a98fc6c2c7ec867a5f338be156a3e9bc2e62a54c820926defd702405c92098be4afe8b6f753e79f13fa4ab2beca5e00e6529b601296e26430870398a59918cf819e52bff03983d300f9124512ac97827ea3fd29b1c233555783fd3832b2790459b7db57c02a9765a22318cbe2f1be5ac2b29bac23f80880b18c1223dc2efabfb58dc92080703925c27ecc3fc2133f1e74b22b6419f3ef0a1f6c0f79c2729e6c0ff9c7800f2dcfc4e05aae5b952f719dc04481b7d4f5a9a56cbd73bf988579e3f30a60c92b287176d294f4731c1e631cb58b5d3f2b7f47b312773078b56bb1dc5ab99f251cda20abe0d701436e2b6d864b38d441063702e01e60335cc29a2a19dc2dc0cb56d80c97b0082383bb0ec0adb4192e61371f19dc6b01dc2a9be112361dc8e05e03e0aeb2192ee1703319dcdf01dcd536c3251c7e26837b3d80bbc666b884c3d16470ff0170d7da0c9770789a0ceedf00ee3a4ab86d99ba996fb93b93792d4bb4b8900c28d91a8f5c0074bd6d4009ebb36440ef0273eb0fa404ca3703f74f13279c554fb6aa839fb626716da0c4a53b8a2a796f19c6826805b0c48d9468b3356883f5bd1256ffc9fa5e0f049ef3a04c58ae77d0a4fc1d273ce8049f0b9808bc2a793f2c990f3d0338854d9468831df547d88e221b9c190b506ea644c967d71489028967f5b24cac5a22b3c02e00db164a6ccd58fc74834a9f4fccc8a02099777c0b003c98daeed46a901c990adf08542380ed904c578792dd649f74cae30c2ab41f80ead0a194681b30b8e8957f5ce88a0a5f0db223b0c6c32891c9e1e5e417d08471d2ed9700e7569b700e0e25cea701cec36dc2393494389b01ff78844d38f34289f377609d47da8493743b53329c7301cea36cc239289438af05388fb60927e9383b19ce2301ce6328717665e93a1b8b70dc92ec6cac2ad0e576acbdad23c2096464ada32b00dae328d1ee20d00e520067a0b3830cde9e20fb1f4f09af7dd276e95f2142385f946c7dc868609127d80895309b93411d05a09e682354c2813632a8bb02a827d9089570a60719d41100eac93642251c0d22833a0c403dc546a884b55232a84301d4536d844ad8a222837a33e88d3acd46a8845316c8a0de04a09e6e23d430ae63de1b403dc346a884b3e8c8a0ce0150cfa4840a97e57ab340f8e72b5cb8191981276b947ecae208cfa244d897f96776720b5ce3768cc46156a6d84f4568bb64bd54e783fac0d994e05bb1c4b3973cd5f92985a49ef54f2a90cf020b3ec7169084164906f21900f25c5b401256a0c8403e07409e4709924fee8ecf2199ecbcb82484f3473a005ce753e2e2bb97cb8db1a63a14ca9cffe10ce3f0cd9feb0ed06da34417ecb403c29e24b229b02f80bae4059428d51de82b99b729c67f6b814b36d86ae0c24c55cd79cdb0d07985cff02cce54d59c6c96e79320735f4489b0a6edd9fc999bf43c6bb2ec5d04605e6c134cc2a10c3298c500e62536c124ec1826835908605e6a13cc302e645904605e66134cc2760c19cc0200f3729b60120e5590c15c08605e61134cc2da2519ccf900e69536c124ec402383b92f8079954d3009a7ce90c12c0130afb60966184f205c0a605e93891ec93cb71129cf1fe40ac7974967a02949d61abf0980bc961224dc4539de3399217c643d946300beeb28f1ed00f049a9198247b677f26100def5dbb78fd213e51da247d8ee26dbcdfb3b3066784326fce190ffa83fbc0ed8e48d9420e566fdd547bd3d22ffad4edfdec03e6fa2c4da5860e5012f76c14ad9a58e3a64e06a538163c01e6fde9e3e3263d3acc98ebe5d05c6716ea14459dfb9e02faf740854b129eedf84638864c30cad80eddd4a09cc6c2742d2160c59cd7115f088b7d90c378cdb99ef0fe0de6e33dc306e67be1af8d13b6c861bc6edccab00dc3b6d861bc6edcc3700b877d90c378cdb991f08e0de6d33dc306e673e1e1468f7d80c378cdb991f042cf75e9be1867117d9fd80e5de6733dc306e673e0fc0bd9f126e3ba6ebadf2565af8fb09e0ea0bc2626c2915d26e607ae203d43d55fe0d4fc7b30ad71e5732c29db8c996adf0d9ab12dc8394e0cc76e20e63d5aa0414500f51a2cdd6a00db613376111453657fe7de0451fb6d772c3d8cb55092cf7114ab44d58a27e7f427fda800a5d14f8d34733311295cc0a0e7fe94ee84bb75061fd0b58e4633662256dfd9361bd0c607d3c13e354d8eca6d9991a2b25db0c300764fc27325d1c25bf4b1d215ab235edc5c04a9fa444db4683160a1ced7cbac29d6fc2abff7c2f30c29100b201c2ab41c5e9299b700e0f25ce2700cea76dc2493a4e45867339c8eccfd88493f41463329cb7029ccfda8473502871be05703e6713cec1a1c4b903f09dcfdb84734828710e06385fb009675e2871ee0d70be6813cea1a1c47904c0f91225ce16ce055fb9c38115b9428ad91cb747a944e9f90c5fd71c1f2f93105fce844d267f380fe1203259abfd6b80f3159b700e0e25cee701ce576dc2393494385b80dae66b36e1cc0b25cebf8075be6e134ed209386438e7019c6fd884735028715e0f70be6913ce81a1c47934c0f916254eb9703bb925388329c789c816e1d405d36bdeb60926613b880c661680f98e4d3009c786c8603200f35d4a9835adb4f397e784136ac8567b5e056a9befd9827250285176075d1defdb82726028513e0bacf2035b500e0925ca86c0577e680bcac1a1447918c8e01f51a2ecaa4199dad18f845525b2d9c95300e68fc380997490980c7353e0183ec98463c875ff9ee2dcf64455b039ee00c72af7353923b48a0e25d9962e7fb038ca4f2951f661feb51dfe4509fee9ddc12683133603c82683bf081cc56794d8e5fc50bcf304b6aaa06b205c7adb940aeba9c09a3fcf84ffd55b73b02561e11bd4bb1d58ef17949875abed929f3b4aba369f6cf6e85700ee9736c325b45c32b83b819ac35736c325ec7525833b1cc0fd3a13d532e97d4b13f66d11da29597bed29e004fe9789fa41ae5b472871ad6fbaf33a173851d86ba9f332ff989f12529c89da2ed9949e4a503ff8667bf6284071a4552db2bd71af04fd5cdf6662546080f3c7ab6415bb33a52afe43fb415e06ecf23b4a98708357689d61de1d770480f77d262cb18825b3e5755e28cfa9e90eb2f50f36c10ce339353d00cc1f6d8219c6736aba02983fd904338ce7d47403307fb6096618cfa9d919c0fcc5269861ac577601307fb5096618cfa9e90860fe6613cc309e53d319c0fcdd2698613ca72607c0fcc32698613ca7a62780f9e7f6edd6f04479475c1096e564e3a147838eb7bf32d1121f9af99638d9b8fcaec00effde9e76e89f291ac619ccfb0294ff50a2ecccaa7700cf64fec58863900d0433d0154cd66bf4008b03fe9712700b06bbdcb8a2fe131bc2dc9ffe3780c84f27c9c8b95e5c48610c5d984fd8fe16e08b50e293995c0e98ad70fd233622395e7ce6f7a284ed9fd9548067002f1aa5041cac4022ac63921548eb00caac4c65f525bea226cc8314734056af4589cf6cf7cf30ce465a002cb376263279724dc930f6640e03565a8712a56c95c35ae7d8d8417f6358fc7c3af2ca11d9a06e0f00b32e25ccb635143ed5375a0be7de603dc1fca27ab60125ac1e9101cd0140ebdb069470f0820ce82000b4816d40090b2432a0fd01d086b601251cf825033a0c006d641b50c2690964408700a08d335db1d7b7df67b9ad245e435dec8a5b4e5b1b5d44857612a8d837c984adc65773d47c3e322150b21ae93f00e80eb601252cefc9807605a3454d6d031ac613bcdf0616dacc36a0615c48f03f00b43925d0f63594f7d83243423f4ab6ccf03400b5858d50c3b876f32c00b5a58d5009fd2919d4e300d456364225f4a964504f025077b4112ae1c20332a88f02a8ad6d844ab800810cea93006a1b1ba112b6f8c9a0de0ba0b6b5112a61bf1419d40701d4763642259c644b067567d03c6d4f0935f84154845320c8bafa1e01383bd88473782871be077076b409e78050e2bc1878d09d6cc2393094385f03383bd98473502871d602993ddb269c834389b32fc0d9d9269c434289732ac0b9b34d3849d72391e1dc0a7076b109e7d050e2bc08e0ec9a895979f8f22eff04c7302e3c1c096076b3096618171ece0430bbdb04338c5bafec0260f6b0096618b75ed903c0ccb1096618b75e690e60f6b4096618b75e690160f6b2096618172c3402307bdb04338c5baf340130fbd804338c5bafd40730fbda04338c5baf340430fb51c2ec1000a67f16136125690b15d6e1006b7f1bb1921e4c4586f509d0759c4b8935f94da6f54bba090b29b225dd9f02b8036c864b589d2283fb3c803bd066b884851819dceb00dc4136c30de34e0f9301dcc136c3256cb292c1ad07ea09436c864bd8b94206f75760b9799470bb260d770c4b7c341b615735d9de644f031b1e6ac73abdea9849dd03d9b91f5900ed304ab48d9d8b92d82e11f98caf3d5ce57c3ad9f964091d38b29d4b9ab038b8e1368d930e0be552dcbb801dee6213cee1a1c4f91ac039c2269c034289f30850ceef6a13ce70aebbbf13e0dccd269c834289f3238073779b700e0e25ce0ec077ee6113ce21a1c4990f708eb40927e9512a643817019ca36cc2393494384f0538476fcfa13eb5779f70f0846c9fd15701cc3136c1249c524606f3250033df269884dd1c64309f0330c7da0493d06792c17c12c01c67134cc231513298770098e36d8219c693176e063027d8049370cc930ce60d00e6449b60128e7192c1bc0ec0dcd3269861dccffe0f0073924d300917d590c17c1dc09c4c09b38b06662a6398611cc16c03204f090364424b26831c0590a786013261ad800cf221a0b3795a182013d616c820cf0490a787013261cb8b0cf20900f25e61804cd82223837c2c803c230c90097bb7c820df0f20cf0c0364c25e2f32c8f700c8b3c200997004810cf2f700f2ec3040261c592083fc3e803c677b9eac17579d786210d916dd9700947bdb82927454810ce54ea0f536d71694a4f3abc8503e06ac729e2d284967af90a1bc0f58e53eb6a0249d574586723a40399f12650fe63f1fa2d02151ccf84199f0f8ebe40fd624ec41209b9ebe1780bd2013cb839724d5491ef69dceef6271acfb6662c14ffc8c13788c7b10eb25ec3520b3de6781f5ee97896680c4cc5fe69faf6455812013fa6332c80f01c80561804cd8c94806b93580bc300c90c3e82e22007261182087f1a8eeef40a36251182087b1daf61e805c644b738374d1305973e31a80b2d81694a4f36dc850f601feb5c41694a4bbae92a1fc0458e5625b50926efc4d86b21538bd77892d2849b7a427437901c8e04b3381b2c82db52b997a6467c636b3219b4e3795c5519652a26c2e5072abf3fa068a195f8d55e1de5de9dca9705f254348b627c55900e1fedb33634371a4d648b6f9e21450dc2ca344d9b2069432a6a46d9f022a8c6d41515396894c3de03f97a94f00997a79262c112b62e2c64298a1c92c711cc058be7d7da327aa8c3a5377a1427914a8f4aca044d94ca0cc75fe54b959788973bb2a53597a1815c0b7812daedc9eb698b1fd25c96a8df341397d0025ca6c0d4afdbca751b151d399a24bad88da6b9259ea0a90d52bb6ef68281498a169ea5ba8b0ee071c402525d65602eb60e74f7c13b9896ef5a884adcd9427256b7f5f0e40566dcff6b7bfc513c6c363f602285751a2dc01d824f4a719b0c3a554f0260378ab33b1b032b75a3be7bf93a98f0330d750c2ace75c948a323c9f79f394c97091edc4d300e05a4b898b4f0e2a74eb8aa56e5112afe8c4a787856fe4301be05b97893d72e5f06cbc3c1ee3c22baf56a8c0fe71c26a0e5946de0c2ae7eb6d3c6a8374963259edb131a8941f682356d2250964581f06d6ba21131bc4e16d9dd9ca282361cbbc1115cecf815fdd6813cec1a1c4f938c079904d38878612674390d937d984332f94387f02d6b9d9269c0342897336c0b9c5269ca41b7291e1bc18e03cd8269ca4071392e1dc02701e128ec35bc2b8da7833a8e61f6ad386c5c328fb37c9ba491e04380fb309e7f050e27c07e0dc6a134ed2e333c9701e03eaa387db8493f49057329c2f039c47d88493747f72329c3f019c47da8473702871f600bef3289b700e0925ce3d01cea36dc299174a9c6500e73136e11c1a4a9ce7029cc76662f7063845c1bfe8cf6b252d77ffcd5b4fab5c916363e350b35c6a1998b63d8e0af60016877d9c2d4b5b48fba0c806efce0365fef1b6a024ed7f22435917b880136c4149daf74486f20e609527da829274808e0ce555c02a4fb20525e9e01c19cafe00e5c9b6a0241d492243d917ac183a2513cb5df84cbaf84657935d01cb3235878e6c565373e0274fb5731b2bc20d83c9b6b1ba93c5b19e66cf0a4bc24307c8e61bbf092cf4f44ccc37ce75e7dc95b9423294bdc996bd1c0aecf00c4a787c1091cf2a8667ce2f119f87af2dde0e603b3313d3b4935b2e407ace225906be03c03ccb2698615c7df1108079b64d3009677292c1bc19c03cc7269884551e3298b70098e7da049370c33d3298570398e7d90493708b483298d70098e7db04338c1b9e5c09606eb3092661270619ccab00cc0b6c8219c686e2c300e68536c124dcb08c0ce68b00e64576ec6b44588e93ed263300f4525e6c8f4d0e0b6543720fd01374894d30c3d8901c05605e6a13cc30362487019897d904338c0dc9e100e6e536c10c6343320fc0bcc22698616c480e0530afb40966181b928301ccab6c8219c686e41000f3ea4c6c14957862419ebb690fa155d6a602d91154d8afc9c49e851c542583fbbf857bcfc21d80255e9b890905f143c8f8b68ff2f17f6d9fe17660e6d07599d87d0666f0fff6314da5c062afb77b6b48c2ea3c9943781358ee0d94783b6bf07225aa5c80e56c4f771efb4ac535f8175a13ba06b265d69ca7047c2325e06e29d8ef0cc6576694397f2f76fe9fe2fc1633e24d4e1f8e52ed37072cf9267b36910c6387c92860b33753a26cc8e25bf7953a37f94beb9d07c5219c95d41940bbc5a6ed29488fb721f39b3f009cb7da8493f4881b329c6f029cb7d984332f9438eb815ae9ed36e1243dac8e0ce72a609d77d884937478980ce7a300e79d36e1243db48e0ce78500e75d996edd27bb5312e9083cd9b13837023f7ab79d9ba0125aec162aac9f03acf764a2c37910fb6f9e4c7029c8faf7dae44987506677324ffa05c0799f4d38078712e75300e7fd36e11c1a4a9c8d80d77cc0269c79a1c4f92bb0ce076dc239209438f706381fb20927e91a0e329c97009c0fdb84736028711e0e703e128edd6409e73891ed265b0a06391e0d03e681a1c4dc07cc33792c1303202b1d02556c8e3b1cb7ca7d44068dec40d196c0053c4e09ad3d538fe0e1f6e609f9afcd2c7903d4499fc8444b5e422dd54e1df38a28c22e11ba330681e77cd21690840bb9c8401601904fd902328c7b246d0159fb695b4086f180b2e900e433b68024acf690817c07807cd6169084ad213290370090cfd90292707a2219c87f01c8e76d014938a58b0ce43700e40bb680245c9949067200a8febc680b48c2f5c264205b02902f5182ecae805cc4aacf8c4f7e0e3d6105896c0e7d6bd09df172260fc72d0a348181102dd904868b8115bf62cf5692615c59fc1c28a25ecd44ff51d0b920619c09723e80fa9a8d5009bb40c8a09e03a0be6e2354c2c62719d41301d4376c844ad8102583ba15407dd346a8841d7764500f0350dfb2112a61458a0ceaa100eadb3642256cac92413d13407dc746a8840d5732a86700a8efda0895b0f24f06f55400f53d1ba11276fa91413d05407d3f138d537c8e53d8c798ee6371941f6cdf76be278a9f80406a9564f3448e075d261f66e2c888010ad00c2c4820eb6fda15d8e147dbd30ee17930a4764876fac632e01d3fdefebb32f1e3ed49db437f52819c0032f427b680242c64c840ae0516f9a92d2009fb92c84016008bfccc169084fd476420f701203fa704d9dcb958ea9e105cec566d2a1c75573aff2e74054e66dee2c2b210d61c1b8312fb0b4a84ed987ff08d0facad116d18bf5566a8036e2915d29ec02abfa4defebc9279c78d15b9428ad91861a7e5eefdf1cea77c687865088785770296f995bdbbd61116406468178392fc6bbb77ad23ec8223dbb5ee2de000fe4789b76d0de5bb7ab8fd00a7de49384c4cb679d59f00e837b601251c222603fa2b00faad6d4009cb7c32a01f03a0dfd90694b0b14906f44300f47bdb801296f964403f07407fb00d2861e3930ce8a700e88fb601251c642303fa0d00fa936d4009bb90c9807e0180fe6c1b50c2090b64407f01407fb10d28614b890ce80f00e8afd4bd4fcbdd55ec25be06e638f713ae78a1db8552ea76e4cd717ef90e612b4288949f0d2191fe66cf46d3613cc7702640f93bf5507061ac0364b2fbe1329fc8f0f5313507f0fec8c4113dc92d3d181ccad30b1b8125327fda04338ca717360130ffb209661837e3af0760fe6d13cc30ae316a0060fe6313cc309e5e180530ffb50966184f2fac0d60b23a16c10ce3ae49bf81564fc42698613cbdf02f00334a0933d53dba07867215d1ef608838cb46ac034289f55280b5162556b3cdfa09abf564738ff38023a84d89b68d066da2ce39d2c39fc9fa916e0438ebd88473782871be0070d6b50927e976d364380f067eb49e4d3849f74726c3791bc059df269ca4bb7793e17c17e06c60134ed2963c19cea6c07736b40927e9312764387703381bd98493f42009329c7301cec636e1243de6840ce7b10067934ce04cfe4c23c25611d9c907dfb138ce1d6cc2493a764486f36580b3a94d38878612e72ea0a2d4cc269c79a1c41905389bdb84734028711e00327b0b9b700e0a25ce0701ce9636e11c184a9ca7039cad2871d6b4d7823fa38771b3df2b80dfdcd11694834289b233a8beb7b605e5c050a27c0658651b5b500e0925ca7f8155b6b50525e9544432948500653b4a945d3528533b4a8f708e08d9196f4300e6f661c03c3094989f07983b506296bb7df18017bb90a5ec72f14af8a6de38e5530c5ec74ccc11c12bf470bfaf0ced35db940aeb8100eb4e99c8faf1f310e0de21fff563270a41f5aa1325e6b60ae6d5ce03fe627182ba411837a1ec0ce6886667a29295dcd17b6144791328963a53a24c6e87b0f09e62b817c8e43bdb02328c16391680ec620bc8309e62b81f00d9d51690613cc5701600d9cd1690613cc5703d00d9dd1690613cc5b00080ec610bc8309e62783c0099630bc83076d61d0d40f6b4056418cf673f1d80ec650bc8309ecf7e3200d97b7bf6c44371a41520b2eeb78b00ca3e99184fcf75ff96bf9e326359992b54ae1cf27a38abe870926ddb7b308be3ec9b895599452c998d534807dcc86cb32db0cd7e36c10ce38615ed00ccfe36c10ce386153b0298b936c10ce38615ad01cc0136c10c63795e1bc01c6813cc306e58d114c01c6413cc306e589105600eb609661837aca805600eb109266173920c667b0033cf269861dcefb003803974fbb6cd3d51de298284c50fd92982c78001dc61db13a5ff203c42946407e12d0156399c12654781b28a2d751e57a2f3e066b10a779a4c255bec0a5b4e3ba4bb880aec781607bb4b26e719ad606b5c9015b1394633593e9bc4463b1ff0f38cbc7bd39d77f9242efede284793525acc5db388307f0d5cc188ed3b4b0e0af4cfdd24c3ba85ca7a3b01b7b06b26b04aebad62fc7cd6258cf7724e74ec56d73f9fc706d35a6b6d2aac2dc024aedd28b1361358f940462583473e15b00c1c814b76f8535d6097bb67a2e44fae461ac696d2605040ed61c76669bab29f102d59d9bf27b0d29194689bb2f8d891872c83999c6c938aa1c0324765b2f0e1b386e7b8f38757b918f1aa3e61e14356d56f0f0a9fd199588d3144c9f619b049b2f1cb29c026c7d8b3abec8050f62bfd0dfc63be4d30c3d8af5407b480c6da04338c23eb7f00cb1c6713cc308eacff09608eb709661847d67f063027d804338c23ebbf0198136d8219c691f52f01cc3d6d8219c691f5af01cc4936c10ce3c8fa6700e6649b6086b1bfe80b00738a8d671690ee4343d6d3de1154dfa7da8895b4224f86f57160add328b1f664eafaf30ae7833206cfc1c4fa3b47c54e25f4bf4de86bc97ae61f07763c3d0c5baa90769d906da97227c0bc971dbdf6d531932e30243be2e407e03266d8b4d5f4b0501e387e0fb0d49936e11c1e4a9c6f009cb36cc249da034086f34890d967db8473602871de0d70ceb109e7a050e2fc16e0dcdb269ca427bf92e1cc06be73ae4d3849d72591e11c0b70ceb309675e28712e0138f7b109e7d050e23c03e09c6fcb6eb4a49dd164db095c088aa105b6a01c144a94ad8055ee6b0bca81a144f910b0cafd6c4149ba8e930ce5bdc02a0b6c41497a863b19ca6900e5425b50e68512e5503051b190126573169f3eeb6dce5bec567f2a5886a6d092f565ae6171848becdc3c9a704613d9e6d1f702ac45b66472d2810cb24c7e3528c58b6d41392894287340d153620bca81a144f90ab0cac5b6a024dd3c800c654b508a2fb105e5e050a2dc0632f8d24cec8fc85195b0d5cc1bce9de8568c4ad8da4c558be8b63e05e5776926400ef88f823c1680dc3fb3a768ac7095ad707b2a834c49209c5443568d7f0064fc6594985bd6e043654c49311650616c038aa2b24ccfb1d35ba87f3921e9f4daa32244582f01d6b93c13de74f87fd49b9e09bc697926b2b9e7452b99baaa3d9e1309fb8dc8b2f96ea0f2be627b6e239da133b2c816bbe6017fb932d3930c933f178b705e32d9b958e5c0460fa0449b9d745184cd4226740164b3900f024552853dfb83847129ec34502855da74a038e92e9f64078a7f027056d984737028713e0670aeb209e7d050e26c008aa5d536e1cc0b25ce1f8175aeb109276943930ce7248073ad4d38078512e74500e73a9b70929e724d86733dc0b93e1c2bdf08e77592ad7c5b0baaf607dabbf28d700b21b26ee62f01da0d9468791ee4b8b880890269bec047868d6ca6714390f1375262abef5cf08e0fdedbb9824d7138548512583700ec205b8684c37986f5d9a0c2bec91694a4d5213294bf00949b6d41495a152243792d40b9c51694a4fd45746b2f40997cb02d2849fb8ac850f603280fb1052569c70619ca5e6064e8507b0e180de3ee882f025f791825cab62c3ecb9d8f96733115cec77c9f63283843a3e864436b8d01d0ad991845cff54d47908f338491cc2ed7b238c6c333d1ceaee94498f1e2838cedc03d9b0aed6e00ed11f69ca745ba711a999d1e05601e6913cc301646a7009847d904338c5bf51e04601e6d13cc306ed5bb19c03cc6269861dcaab70cc03cd6269861dcaa773980799c4d30c3b855effe00e6f136c10ce356bdcb00cc136c8219c6c34a4e03304fb40966180f2bb902c03cc99e437009db3f6487e0de0d7a354fa644d99ec5bb3be2bf335c612bdcee8fb12e46feb237065ee02a594507956ce6fb79c03e4fb1e7646142fb243b6eac0274c79d9a89e3c6b85d7a87875666aa136e0b15bc75c00e4fa384d74d6387419609c0794584cdcb33a344a05f065ef4f4b08026ec142103fdffbabbb3d8a8aa300ee0679402652f209b6c0221236029140a3c99502812696c5408a2a6944e5b9102a5a5c0833c184d7cf1c1c417954570c35d4411545c50c00d17541037641515111141dcc073ce9de9fca7d09649fcdf7c5f2596cecc9dcb9ddf3de7ce3ddbf7dd01d0f7698126364b69d04b01fa7e2dd0c4ce141af402807e400b34b1394b839e07d0cbb440133b6168d031805e2e77dd27f13e8336387d2bdc0daf90bdee937877415bf7792794dc95724b2eb1ff8b56721740c97d90dfcf30b16e4245be670b7a14e678f4f176d352fb7bb0cb02fb7799dd554ce13c2ad7664da0ae62a2669964e3b826a59aeb9eec331f005733010798d4004415a6da3356a555f189770334e2a950f11f62127781321a747e27e23b85d691435b5a7310cae9c312d3fb51c75e69fd636de0fbfe1189acd480ff34d6cd50e51f65b2baa553c9154d457623c7e6e6a5eabb4e76822afe98a4e5b4d4b8a1b4e5b4c781738d244e6aec501ae74ee07c5c12679e4ace9670857c421227350a388d732194ce272571522381d338b702e7539238a9537f689c2b80f3e9309248e3d49f743aedf2fd6f8b408ddad3df314202df07e0cf680327b6f169e07b01fc596de0c416160dfc00803fa70d9c384a4b03df0fe06bc35815981a3bbfb9ac0a5c068ccf87319b6b64bd6e17cd9dd593016f9ddcd045c43b065aff6a25b4c75e90943c752cf37e8016a1670df4abbe2889739c4ace6dc0b95e122735e8118df316a8ec2f49e2a4aeb9a271ae07ce0d9238a971a4689cbb8173a3244e6ad41e1a67065c3b5f96c4498d2745e3cc05ce572471520321d138a701e7ab9238a9f1c7699c7701e72699e3f9c40e6cda78fe76f84a7a8d3d85c78de597db276aed266ef65e9051d9352f2bcd24939835a5aff5eee26725105f9734a8329a39139a36a8721438df90c4394a25e70ee07c5312e718959c5de18ab95912679e4ace33503adf92c4498d814fe39c079c6f4be2cc55c9b90e38b748e2a486eaa271de0d9c5b7524c2208e68d2126194435b699b06666aac341a73670875fc4e18d94471a41e778817068dd9eb37c265e15d2990c4b14e1a640e40be2705526314f3cb01f27d2990c4d94c34c87280fc400a24f1cb8606390120b74b8124de83d2209702e4875220892bea6990b701e447522089a1b569901b00f2632990c4807234c8e500f9491863440db7d6313a5f48618c3ab158ef05d61d4cd6c1267525fd2c73ee3af90b5f514fbc81a78d24e54093f25326754e3deada06211b4ebbd1789b9e78db4f6bd16701ff676144f2bdf0b9a2fa46ec67c140c9e792308961916998a580b95312a6c6b924e3017397244ce257160d331f30bf908449bcd5a2614e00ccdd9230897d4f34cc02c0fc521226b1b54fc3bc0a30bf928449ec83a2614e07ccaf2561125bfd34cc1980f98d244c625f140d7326607e1b467a8344037476a343711a7bec074363728f9c4cb81af3e5ad8552f95d186b8b4798e2babd86b430bb9885b7da24f1f68695f5b6d814daa7835d55dbdf6bfd6f21247ea15d19cf02e33e39599ec6a84ccd9a03157abf244c8da9594700e60149981abf6ab201f3a0244c8da9598703e62149981a53b30e03ccef25616a4ccd7a05601e9684a93135eb10c0fc4112a6c6d4ac4301f34749981a53b38e04cc9f24616a4ccd9a0b9847e4a46625de18d152b3de032b347e0e63ca976b932763ceb903768bb19784d5b941eb645b64929047e5a4632596495a3ad62aa8debf84b16a28d1f59b1a1660b27df334fbc8bd35d60c271f4c02e6634ce65ef598dd24adc5f1295aa9ac214ddba2e5641e0857d35fc3ebe11cef7b38cb6c697565b2d66f12420f27ed4be9145c4b8fcbb99612ef3b69d7d2c550c97f939b6d4e63d2a91b80f64418b74e639be9add326a8eebf8751dd2fac6da4b137e94aa03cc9a4ec13a75c68abf26c53935665d7985ab23f54f6535261892596063b034aec1f526189bdf434d8eb01f6b454588d4b638a00f64fa9b01a6fa8b201f62fa9b0c471791a6c5ff8f2fa5b2a2c71f6080db607c0fe231556630efa0ab814fc2b159638ab84067b13c09e61c2f634e9ae381aa1723ddc20985c7b561aa8c6d59a0301d4359445816a5c179709a01169a01a074e5a00e845d24035ae8feb08a0174b03d5b87ab33d80b69006aa719d5c2f00cd9006aa71156737006d290d54e37ab97e00da4a1aa8c6d59cbd01b4351314674615fb03adf2ab949acb68fe699384cc644266c52173edff3526991f36a4f1d1b12cc04ce8656ac3044c6f7c54e334dc6ba12cb66552b6b70f82ac32317f2dac3613eb46ee6b7870b4d06b2d01ae1d132efde4a51a3b39b6c044b1f69238c7a9e4dc039c1d2471eaec825b015f381d25718e54c9b90b383b49e2cc55c969a0b26749e21ca5927308707696c4395a25e7d5c0d94512679e4ace45c0d95512277519228d7325705ec2e4740fdcc62e58af3ea64c9364eac6646a2a92576a8b9bfa7d4d6b739f8032d75d12a6c6a5af2701b387244c8dc17f8e01664f49981a83ff1c07cc5e92303506ff390c98974ac2d418fce72860f69684a931f8cf01c0ec230953e372ad4380d95712a6c6e03f5301b39f244c8dc17ff601667f2666ef343053f31711cbe8ed2cd623d0157c994456ea8c4c1aeb2acfda2aa3dece0bced979beefc371bd38a5fef88371ee6c33c9b8a1d9324f526a1f4f31b3fdbb665a901bed9ff4cec5cdf6cff99e8ff8b0be13cd1253e59f75fb8bf97dcfb5afba23ab313943ec26035cd1e8102f1ad1485bfbd32d3c70cbbde79b22bb9d3b59ee68a33eb8c6dc7854dbeb60d24381ff171c6549fcb3bae1e769757b89fa6329f1f9969cc314ff79e6a47cd268a48bff975deea54a4b9ed876822934d3eb9582e028dd3ece9dbd128d64a6bc9688c21b8db4f3479f8ccf9bfaae36f55e4dbecf0daf97c607d8dd79abb467b0da7ffa2abb7570dca9d15cf21bd83a3806b7ed2cfbb8c23accb73f2be26737f854c95771103f1a697d9e7706479d7cd69595127fd4ae8046fc2415673ccf1e7fa129f3afc6fc1625b69e94d877b9d2397ca8dd2c92677f04cb51b2eb16a264c7b35dcd8d3f4a3cdff43e5d896c7c6f035db18b9cff8a54f9bfd5a5a63e5150fdddfbcb7dd92df37b9ddce4276dfaf3355c2fdb357256860f73e7a2397ffe41eebcc74fbb2fa6dd7db19f6acf7c2c5e78afb11bc7fc41b9ff32fe03fa59f1ca5f970600 + serializedProgramCompressedBytes: 1f8b080000000000000aec9d057c14c7fbf0e72eb8152dc54a28163c1082b49402c1bd58692985900448090192a085165aeaeede52777777777777f9d55ddf9ddd99bb6727f35c6e6fee3966fbfedb0f1c6bcf3cf39d679ef199683fe6fc17e9edfc3587cd6005ac2f9bcd8ad90a56eefcabc0f95deefcef5dc9fbd35985f3bbc4f9bbd079d69b65d7f025ffaf7b6427e7ef09ce5525ab72be5ccd8a9cdf52f7f94c56e2fc7b82f36d8973c5ef2e76fe94386f456a391fcd66a3d9343695b58eb4aa41c41cf7a34a712fc2e315a9e7fc3d8aad779e96b84af140fab98f5a3b7fcd749e54bacf963b4acbf7e6b1f96eb4963bcf8a9c6f2a58992373912bb1dedd5b99fb0fe6fde488df1ee2b7bbf3a7bef87796f8773df16ff83ebfcf63b76f82777b8277a5cc5ece9fdace9fdfc4756fefbad9f5e2ba8f771d69a9c8680064f415bffdc46faef8edeffca9e3043f3009fd133d1b207ea59c3cf1aea3d78a63c4bda6de6f649408331f5c3b5c224bbdf7a37f89f7c5733644fc0e02f1192a7e07c7c359b951dcdb55fcee2ee44f10e10d02d7fc77a2b83f185cf3df49e2fe1070cde50d8b87b571a5b8b71b885b7de68f678112cf022f9ed187c57bc395f7278bf787826bfe3b45dc97f1da03dce7bf53c5f3ddc0b52e0d20db11e277a486adb41f1ddb51e2b783f82d88bfb3ea6a71af9d17cfacd1e2babdf86d02c2d8456134cccf28abca9399256d6734f88ebf2fd296b510df8d56588ff6e4d49aee7f8f8d11cfa789f787836bfebc1bd0b19b783656913d56c8dec9d3510d23666f43c0357f3e16c8e5cf453ab271e2bd31e2fe0870cd9fefa4c459b0884c07baee24eeed29de1d09de91f7615c46f9e352fb634597e9cc1f97027f5c2233145b9d217ec78bfba3c135973fda63557bb2f8bd5b84375ef95ee6c941e09abf375113d79971dbdbf81db807f46752ff31cafd5c70cd9f8f1569798a783ec91f169b120febc0afc5bdc9e01d45373655e13d0e5c3b3cea142b76ada6b1e43aaee6348ed9c3acf8bbeebf61bacb741905ae1d3dea1fa1c896dfcd16ef8f07d7fc770ed0a78db8b71708770eb8c77fe70a3913c0b5136edd854246cfeaf19461319127b1bc1ad91b7cb3b7f8dd87f9f3ea3e5e78f57210d9f314d9f3c4efbe40b62caf054b266d66a2f25ce689494a58d226e72b61cd57ec18daef7e481a2f00ef2e00eff2df854a1a2f1469bc50912dbf2b54d2b850fc2e52182e127286f8df8bf198a5f090cf551e22dc58de5bc07c79afde117e1b8cbd37cbff5e9d8b81cd70bd64792a790bbb64d2569d6fc6dceefd36907e87202f55935d535e9279231f5c7339d207ede57f3f517c6a62565ff8c758d9de291e3f36d77b67d1d3e27a6fef7aa9e42aeb27e3157d45bc1b4ef7bfc7441e62322f4e549e2b7691b05e29c32e52c22ef2c26e2a7516793052ccaad5c398b4bbd1883e0bc1b7bae7d29ee723cf1789dffd90e752f749ca7d19b712a07331f26e89787709f3fb9025e27731b0d7c5e277a9c26ca9607637a24769003d96297a2c13bffb031952b732a0dbfe4a9a2cf6338b3d5f08bed53d9769b214792ed3a414795e539a940760b1526121da06911520de2bc437fbfb65c5ee4b7e158aac0af1bb0ac85a257e972be9bbdc4bdf1dde46e25419204eab153d568bdf2aa047151227795fc669ad226badf85d0364ad11df9429b2e4fde5e27abd226bbdf85d27ee4f06d7fc7783b83f055c4b5f00194e05d7308f94232c0f08c07293a2f326f1bb11c45fb6af5496f2be64799022eb20f17b209075a0f846da5f6daf5aefde5be95d2fd82cae13f9de55debb0dcbc4b52c3b1a82b827fabe81f8ada8e1fd44321a8adf4a03198dbc346df67282777b82776538a20deabec7afbb0bbe9b016bc9b196489769cafddae2fe74e57e1de47e5de47e3dfffd98fd6e01ba6cf17f133998f9eb29077b7ab6785e917108f3b73d6a2bf2e4f331ca775bc57d590faca37cb715f9ee50e5bbbaca778722df1da67c574ff9ee30ff77f27eac4eb485f9ea44cdcf10cf577bd72d64df48aa7d60d2af1dc1fc7d1ab25e7bb8b83f035c3be9d172a1177ecb13841ce9bb8e54e41c59839c9b13e8b881f9fb0ca55f956c8f526ce52821f32fefbb56b25faf96787e34f3d79bd780fb50de4cbfbc1da5fdcabeb98b98bf6feb00452ff97c8cf23c17840b9fcb34b88ef9fb27ae13bf5722e16d549eabe16d0269039f1fe87f2f72bd783e4bb99675785dda3456e27c8cf8660eb876d8b5967d6118bb836a60279fa78b9d9487b193cf31769bfdefa5c44ec6f50616f7dbb5149b3c5ec8d90bbc2beff3df7399dff6cff564b491365f5b91772cf3b7e78e55e4dea83cbf51fcde047494ac6f8edf739fcb7bfcf762e6ef3bb9d8d36ba7cf858c3a8a5e272ae19ea8e825ed612eb886fe4686b7b73fbc368d70fe5276ccc7dec07c3eb6f536f15cfae22459b243aab3625bc1bdc3c4efa1e09e2cb78e03f7a00d88bad01ee78867078b67278034384eb18d13149b3d3c187b5f3cd669e221fbdf603c64397a92261e272788c729201e2781f7e533180f5196c8b23726ff54251ea76ae2715492f190e5fa699a789c9e201e6780789c06de97cf603c447913aba349f9672af138d3201eb29e7196261e672788c739201e6781f7e533180fd98e91be6818b876f260fb9b95f7ce63bef2d7bd86f950ca99e997d341b627d4743fdfcfabdaf36d0acf6de2f702458f0b143d2e14cff7f1eb5fad8c9a0bf490dfc1e7f3fcdfc77cd53070cde3f7b6f2de258a7e9788e71b153933fd7276be18b1ab4b154eeaf3cb144e9789dfcb153d2e57385d817092cf65d93a17e821bf83cf2527b50cbc8af9cbc0ab14f957b3b8dfd67d2f9fcbbeee6390f7ae51c2b94609e75a259eb21ecafd7e7df00ebf27fdb893b73acaba7aaa757351b78edcaad8cdade2f716e6af53dfe2c5ada3a8ff66f7167264997a9b22e7b6c472b2a727d0f124e6af9b8bb22796476e67fefac9ed42e6194237d99e9375f33bfcb626e5b9f7a1bc997e799de4b896ac5f3ec7fcf5bd9315bde4f331caf35c102e7c2ed3e079e6af5f0afd232f20e16d549eabe1c9fae589caf353fcef455e64fefaa5bc0e5237bf93f9ebe6777aec3a4b3bc3d89daac851d9c9e7e96227e561ece4738cdd69fef7526277badffed8992c5e7ecab62e2c53659d0994a90523c43d91ff2377c5df77ffcd9f89723772b7d0693eb8e66923c708743a9e2b7e65bd54e6957b98df8fdf239e9faf097f1b8883ac975e00eec97ae9bde09e0ce7be785c47c8b24b94e591fb4158f782f7e533985ea2bc8cd54ba5fc0794783c90643c643d08c643d64b1fd4c4e3a104f1781884f520785f3e83f1906d92ba8afc4794783c62100f592f7d54138fc712c4e37110d6a3e07df90cc643ad3f48f94f28f178c2201eb25efaa4261e4f2588c7d320ac27c1fbf2198c472d45ee33cc5fbe3f239ecbf2fd59e62fdfd5efe573598fb8c4ff9c5daae170593c2eddb7897ba9d603a43eb2bfff25a1cf38705dcb7b1d9525eb6ed297bfccfce5f3cb42c6104fe79c95feb023af307ff97c39b80fe5cdf4cbeb21e78cc832e64de6f7f95780fb50ee1be2bdfd946be9bb9b88fbaf8afbf9e09a873bddff1e93754759e79ca83cbf5a09477d2eeb8889c67fd57257ea365fd1ed7ef19eac33cab4b92e6e33bdcac4ef7445b6b4d9d714d9af79b27bca796bd72bb26f88cbcefb09912dcbddd715d9af0bd9b22fe04645f64d71d9fdae576463e97eb33f6c34fd1728d76afabfa5a4ff5b9eaebdb647facbfcaaa4957bad6ba7c83ecab799cf3fc5ece71d16f72bef8077f9efbbcc9f7fdff5e4f693e398b59530de677e1ffebe22f703e5f907e2f73da0c37be2f74385f9875ed8bdc5d8536f59779169ffb192f6b780fb50c7cf983fcfcbebd9c2b6e4dc3599f61f297a7ce4e9d1f727f1dead7e9eb1741853837ef2bb5ce5f918e5b9ec97b8ceff5c328d7dff8992fef2fb4dca73557e0fc53ea47c990e9f327fbdfa53859b1a9fdb94e7323c59ff92e9f0b9620b9f2bb6f205f3b5eb63f26f579e4bf977f8df8b7cc97cf5f2c079f44be4b99a47d5787da5c4eb2b255e5ffbe315e3fcb55f6eb5f47d07a42ff77df7037bd3f90159cf48870f91fdefff637a1ff20d8be7df6fc0bbfcf75be6f721df7a72f3443ac67c880ce37b85dff78adc1f94e73f88dfef800e72ceeb8fcc9f777ff4c2ce1573c4facbf908328ffeacd8f42de03ed4f137e6f721f25af8903cd986933ee427458f9f0403397fff4e3f4fd487a8fac9ef7295e76394e7d287dce47f2e99c6beff45497ff9fd26e5b92a5ffa90ff29f2653afccafc3ee457859b1a9fdb94e7aa0f91e9f0bb620bbf2bb6f207f3fb1029ff76e5b9ea43c47b913f99990ff913798ef91019afbf9478fda5c4eb6f7fbc629cfff6cbad96bedf80f475ec3457e6ef4cf81039d6f60fd3fb907f593cfffe0bde757ea38cf97c887bedc81d2ce725d4f687118dfaf9b9d7406e344b792ee2148dc47570ffcd7fe5fc957c70edfc1928fa3ff3a56d883c1aada3d8f42de03ed4b13ef3f990d8b5f02183e59c1c6133d1da8a1eb5050399b7659bb0061f524d3ff95daef27c8cf25c867383ffb9641afb5eced319ab7cbf4979aeca973ee41ffff3583ac8793e43c135e4a6c6e736e5b9ea43643a34506ca181622b0d99df8748f9b72bcf551f22de8b3662463e24f67db23e44c64ba6ff78700de3d5c41faf18e7267eb96afabad7c0870c94e33d263e44e97b88eec07c7d0feeb5f3ce908d0964c97989c2fea34d99df673415326ef6f41ef2b53fec6833e6ef7bb81bdc87f266fae50d5dc8fcf9abb9628f5780fb506e0be6cffff23a993e77ccd7cab8b764d5e77cc8705b319fff8db604f7f9ef8e0ab71d3d197bc878d656e4c9f539e3c13594db46792ed620445bb36afd8e3199ed946fda2932dbfa6d376637cde332dd7700f7687bf1cd4270edc46bd7b7fdefcbb16fecfddd1a01fde177b25f5ce653991f659c3a2871eaa0c449a6ff5cbf7c26fab7a33b2bf629fabb637ea8a3df16dc6bf91dffcd56ec37db8bcfb01cff7bd2cf473b89f70bc135ff95eb0ca72bfaeda2e8b9c87f9fc13efe7bfd7170e30a7da88c5b2eb88676ae7edfd6f0fb0e86dfb730fcbea5d9f7b13572497e1fd377520defef534378e353fb3e16df54bf6f61f87d07c3efdb1a7edfdaffbdf401b13a94e423cad8a172bcd6a48c9565431716cf8787887b5d859c61e0daf10d23e62aef75613e1fe45e43bdbbf9edcc9d2b24eff3dfcee2799122b7b3227f9117ef11ebfc7262e12872e4f7ee7c2528a758797e30887bd0b9f2db148edd99bf9cecee311bd9d2d37da4ec4714f376a2397e76525e344791375391b7d52fc71dab4a1407195e4f254d7b7af246bdadbcd75b4953399f43b2eea5d8d805e03effeda1a4a9d47334780eaedd78f3f74b140e525e1f856b1fa1f7cbfef763faf5f5db9c941393db4fd1ff7cf01dd44f7dbfc44bc751b28d7981265ed006a59c9ad227918d89f1fa682e9021c3ebcfaad7e9c4dcbde800e6afd3f507f7f96f9ec234cf933146caa9adc8cb677eff94afc81da43c176bd2a383818e625e5f7448fc5e7430b8c77f070a3913c0b5a3d36839ae5447d16ba812ee5045af5d99bf0e25ebe0672be1edad84f7b62247f2af1d67249fc5ec4eee0f227c74c152f02d7f0fccd50c6c07f78b341992c4bbb2def680417862ce4e74372043d61b87c5ef457703f7f8efee4afaedeef11cdb25419873807c19d683cab38785bce142fe7070cd7ff700df3e04eef1df11e29bddc0357f4fb7efca23def538b93fc7a3e257b6332f8f7fd35db62f13719475ee91403fb18e313a0a701c09eef1df02856381c7715c59823057803065588f29f149a4ebe3e2375bfc3e01e4c83d64e4fc0947e6649927a51fef0cde9f0a64a9f63386f9fbad64bfce68717f06b876e23c7e9617de7859ee49a6631539636b9023e3f714f3afe17edabb2e5b9a805147256cb8d784b20e33f6ae5887199dc0fc362bd374bcb83f195cf3efc43c91a8dcdf6331b876e23141d681a45f91dc9d384c5ca8c87a565c4f52644d12b26459267d86ac6b4c5674963acabd3de4bf65f8b2bea0d3e139713d55d161aaa7837c9f3dafa4cb0b01d2e5c5e07a47e55e1923fd761c9d0ede9d0ede8569320a5c3b71985ca5c896dfc93d13c6836bc8221f5cc3749a01ae1df993c4be0393def7cb89f945b94fc07070cd7fc17e19b13496dfcc52be11fd91d1d920fe33c13da8df4245bfdf3cfd264f56f4cb06e1bf04eea9fe45ae2955fd4b6dc056f62fe4826b50de4ebc5f3c7f59b1a357987f8f86443e50cc318beea5a48fac47cd51d2678e487f11ff29aadf57f6ad88ce4d2c67cae4043aaa3e08ece952a30f52f66e898ab9ef51b9efc46470cd7ff715f7a7806b2e4ff605c9fd1de6836b47ff9932cfcbbc54047494f3f75e15cf162a3a499b2a06f627db6b85ccdf262902f7f9afdc876514b886fac8b05f13cf4b94b045db23ba1884bd58094bee59311e5cf35fb9cf443eb876c29e763112f652256c594f2c0561972a61efef0f9b89b988d165e01bb95fc3ebe01dfecd44e5b99c6b34499105f69e70ffedc461ba5cd7a7a69ddc0b6038b8e6bf602f8868b91287150abf15202cc84f843d331b095bd943222ae60c46c1be0fd1554ad8154ad862af0826dbc44b90b4aa54c2aa14bf606f87689512d66a252cb11f4454ae21cd07d7309e6f223a287b4244c51abfe83aa0c33a4587f58a0e728d8c984312dda0c8147b3d44e15e0d2af78dca37d2176c027a6c52f43850d143ae117e0b7c23d705bfcd62be7fafbb999e85b2a74354ac878d6e06f2362b3a6cf1eb502d5e072b32c59ab42858ff163d4491b95589d71621f35de5f944e5f97bcc97f7a4bc589956c47c65da54b99e54f5fdfbb1e47dff42a6f7b3724fa9c9e03a027ced14700d7594be763eb876ec78af6de2bd647c3fe67f75beff50a6f7fdb22f51fadf51e01aeaa3868df9df547c97dcdb271f5c3b61cf2e43c2c6fc662abe4bfa77cc77617e325119a79433b2ccc07cf45eeb802ecef59cd7115d303f9aa8cc53fc683596985f4ce48f0e50e2277c732cdfcae71395e74abead163fcc9f262a27141f1d2b87c15e3f31bf8d95e9f2b952a6d7e45766c9b51689eac26f896fe51e1af9e09aff1ec6fc75d8c33c1b985bcb0b63aeac3bc8beb423143947d420676e021da56e478a6f972a61c9fba5cafb72af8dfd95f7e5fd65cafb72ef8e32e57d797fb9f2bedc8fa25c795fde5fa1bc2fd7f4af54de97f75729ef1f27ee5728efcbfb95cafb726d5c95f2bebcbf5a795faee15fa3bc2fefaff5bfcfde17cfe59ab875e09a3f97edda93c4f3f5e0da49e37d9622f24ef6cb937a547bbe41f9fe03f1fc14459f53147d4e55f43955e8f31b22ef34441ff5b9aacf87e2f9e98a3ea72bfa9ca1e87386a7cfbc2310796722faa8cf557d3e12cfcf52f4394bd1e76c459fb33d7df6dd0991770ea28ffa5cea93c8ef88f9f951657d7f54accbdf97d70b1cffb2efba04b2e4dc83f31419e70919970b19f78bf74783eff8fbbb2b72b6317d5fd1052ceeab2f00eff2df8b98bf5e729117f6fce715d9f2bb8b99bf6c12edc7e825f130626c2e05e15e02eef15fb9ae7e02b8e6e1ca75331a5e528758797101f39517fb7ecd12f29071d67e0fe328f74e50f6678eca7e7518c6854a189783fb09f8eef7b122477e7785c2f77ce4f918fffd589c2ef733d96f600dfa9eefd79729eb39e473f77b19f74e5e1c1688ba2ffbc49feeec53166b232d96b69b282f3513f2c4faf70589c601e4dcf7cf847e721ee27070cd7fe5fe0807806bfe9d6c0fcafd0fe6836b478785b20c9263095d41bc3ff7f42baae7fd2edc287ee5373d35df7c817c23eb5389b87ca9c459fc46af01f28b99bfcea7ec551895eb6f86836bfe7b6d5c4654aeb553f62a8cdd17f58de80d8a2c3967f37a204b8eb7e8f62a4c1457b1de84ed08e2f635f3f7918ab519313f18749c4bce2b97e9f46dfcfb4589faefe5f7df29b611f4fb6fc52f9c43f8bd1247b12e24366e12348e3fb2b8bdf16bb19eb1e4ed24becd166928f7bbca07d74ede2812eb5f8b12f5ff4a5f09f7c6127263ed909b99df8ec47ac7e82df16fa272feb9dcdf6324902beff35fb96fc72870ede85a7c0612f61d4ad862de73f44e10f69d4a58727f8df1e09affdea570ba4b84bdd2ff1e93eb5b26f9e5c67cb65cdf227c76d1c224d2ea57efdd25320cb186449e2912bd3b6e374b37837bfc9d3fc4af5c1793687e72221dc45a8225d2fffd2dc2b907b0bcc7635222d63f96c874f9477c2bc7f6fe45bee5cffe04b614544759eeddcbf475a3fb4078f78177f9effd8a6dddefc565f1c58a6cf9dd037e3be1afc4eef30b4db928bf8dd9029cf3c8df4ba60dfca9f8f641e6af473e28f4fd4eb0ae95409694f110e021e7283cacc87dd893bb64aeffbd4884f9cba2443ab70236936adacaf987bf19c890f3a11f01f17ec48bdfd21c8fdb52116fb75cd7bd2bed37551d7664f17c99aa8c6ca1cfa3ccef931e157111e540a9dccb3eca6a1eb796edacc7805ef2dee3e09ecc4b4f817b429f98df957d42c3c135ff057b5744451918957b528c0472e57dfefb04f3e7cb27bc382edb8684fd9c12b61ceb7f1e84fdbc1296dcd7623cb8e6bf72df9d7c70cdc35ea7842dfbff5e52c216e3cbd19741d82f2b61bfa8842de70dbca284fd8a3f6ca96344b6975e55c2963abd06c2167b232ccb56c202691e932be794bdaec815fd7ed137c0376f28ba49b9c06e647c63beef29e6f37da5b3802e30ddf3c1350f43ccc92893fe4d8c2d446ad7607b208e913afeb0227559cc57978935f3917a200efcba7efc9de572ec39411e8dc8fdb3651e7a13b0783341b80d95efe0b8d45b29ea22c76cc43a934863c042b42122e07ca788dc6367877838e549944d11a9a75ca79f0fae9df45a2eceb15abe4d7cd74d890fffb758cb143b8f09e81a3bff09ea5a3f455dc53cf5e83b8aaeef78ba968bfa6f7982faaf9411690274007de1097db85cf3f3ae12bed8bfa2fc7d2153bef79ef2de7bcaf733fcdfaf90f1946767497b7a1fd8930c436787cd819e92b198372ee7ad4464b92ef7210bda7e692b7415654144968d7942bf0f44dc3629d7727c56ecf11295fb700c03d78edc950b15791f015b92fbc388be82885cef3051797e3590a17b1e643f14b9deeb6390061f0b5d45ffdf4ac96d708277e55a6bc94bce6dfe44e125af67fb758e7eaaf0fad493bbea0445de6706bc0621cf83f092ebcf3e677edbffdcd3b742b44522723ddf97405ff16d44ae7d1bade8239fb703dfea9e0bbd236d90e7729d8e8ccf54f05cea5220c2f84289c717221e177b695f21db773a2605d5e546e4fc554dbcd17373e4f38589e32dcf68c1e22dcf688974449ecbf13db946375b84f795268d3a81673ac6bb24d625d219b149f9bc4b009b936b64e55e27721f74b9c656ee1fb159b90ff61789852bcbb7ae885edd1599eaf31c456fb90e53ee57b245b9ff5d021d7ad4a0c3b749ea20d7e0ca3d50362bf77f48a043cf1a74f83e491d84df8bcabd53b628f77f4aa043af1a74f831491d645b52f6f76c56eeff924087de35e8f073923ac8fc2ff72ec9f7bf1ffd3dae83fb8ee36bd68ef67f1b9b7b2bf719190eaef9af6c6f3bfe69addccba3aff24c8605e3d8c71f87d8f3eee05bdd73358e727e91dca7448d23e85370df71e2b8ee7dffb73119ffc4df8df4d7871311eb91b85b803cdc6b2e43ee2d70803e8cac0808230f09438cd364652961085f941505327241b8f219bf96fbafece7a5cd3a596feb0b9e4b2e7f2b6923d78f4d549e775764abcfd5b4c9163ad5d2a74d569db80eee3bce9ff50ffbbf95f69725f7dc180eaef96fedb8fdad7fdd1fc7d83319168c63be3f0eb1e7ddc1b7bae76a1c3b89e7f5983f9fcbfba0ed522d9fab7520259fc764d694cf45f99625f7013958b9df30810e836bd0a141923a88f5525972af8fcdcafdc609741852830eeafe21980ea24f2eab89a283bcbf43021d86d6a043932475485477d0b511e5fa3eb9d7b8a85f64c9bd3a0e01d7fcb95ccbe6d8e7c1b29d25cfa9866bdf92ed339ca8842bf7fed80aaef96fb3b8ec88cc832de2f7b2443d274baefb1e29e48bf224ab1578b7157897ff2afb756489fd3a0ebc5e912dbf53d69e6789323522d6cf65c9b5fdc3c135d745d4bdb3643d713db8e6e10df3bf9f25d7c81f0aae65bca19cc3143947f8f5ca6a07e22eda13eed9c509d24ac655f68765c93d4f447fd82639de3e353979da7b62be6c96dc276418b876e271507b2fac83462b614dae212c2957b67d545b80eb26659ac03580f2bdce805b672093ff662b3693ede9bc799da283fc4ed6f10f07d730fc4e8a4d7412f2a6039d617ac83d42c6fae565c9f6ce11fef063df75f6a7e3416728f1da5989df7c257e722e8e5ccb56435ac4f4964c3b2972453cb7481f95641a6775f4cbcf92f3908a12a47532e92adb42a3c0b5a3dfc1723e63d074eda6a46b37216fb4a27f77a053f71ad27a1725cde5be07c5c9a5f996957e3935e6a7a065ca08213f272e3722f3760f10cf1ee257b6bbd47cda0bbcdb0bbccb7f651b6514b876b86eddacc896dfc9fafe7870cdf5126166c93d1086836b988eb24eba1e5cf3f0e6fadfcf02fb0e6449fe825596acd31f09ae791862cf822cb907c154700dc3103a67e5813044df61a486b2577288d9846c670a9b38443d5b3e50595e3be28ec78c6725ac90ad64fddc46004f81396c062b607dd96c56cc56b072e75f05ceef72e77fef4ade975ff666d9357ce3ee4be8ee5ee8fcd7dd0db68aad773e2df1fa57663a1795cead12e77d2e6382f34d15cb63035cd9cb9d67458e9c0a56c64ad922d6c61d7b90a117b87f173a6f94ba428fcaaa16c41dd582e0ca9539ff97389f55391f72252b9dfbe39c3be5ce9f0ae75e91733dd9f9e55f2d64fdd93ce77fbf94394eb0656cb57335cbf97ba52b6fa1a376f5376b8ad27ce7aefacd0c4766b9abdd72e78e04bad2b92e73359ce9febdc6d5b4c4d57e8273afcab9c763b3848d727ed7b9a1558f7b85f36f5d98b30432bd8ef303dd8fb8c35d3299463bb1e1daf7736df1ff52647ba488db35705496970d6bf573473b8faa9612ffc7d07332bc313f41c8e8ef228bf8ee0d60fddcf1e119d508068f63f518eaeddbe33d880d4c18173d199edceddc18c453b8f69b050b57ccf9eda7dafea8e5b17e6ed745fb1aa296082c9797e38e26058942eddab5dcdd7955fc111d7eb73b676606f17bef95baef054f803a6ee1e74f0077487496f38f75ce9f32e7e591ceed62d7ff4d715e2a77fe2c71d5ad9642b95c5c5d1772f522b4264531cc511d6677e47bd676b1f2793578383de87ab158c441f773eb453b2530472c2cb7c21415b52699615e9f3270f06eb9432fa8ad4f97066ebaa4121a963259ba946990e90c50b3c74f942e0d63f18aa70bff4fcfb01162db35e98011aca523d870fbd836d73d35dbe65da27d542faee5d724a10d26d20023585b47d09d07343b8304a7391aee2fea89a931dc2169864d5d866daac52e191d308a7534147339c5663ab5ea2b6a718d10c17531c1cd0d05d7c304b730145c5f67508d339d25f9b315ae145ee0063727de23dd4b756b7a7b6a85e4c99a55c0aca9812e6d38c21db55aa989d30a4f9c8698e4d6a6921b6192773295dc586750ee4cbaccd7d2532b23b9af699d7419d99625aa64072d219be8e8716719d997945ef5ce23f9af51ceb74b1d0e6bdc1af16ae77b5d675362a2ed92f6f6ed5d9ad94cd705164c238cf00e3acbe7d83b60c9ae1a7f5bdcf89bea84f310774ec64db7c70537c3f26b474d7e8d04c9afcd3195b30d556e8109ee6428b8a52e8fb8e433db10f5da765c4e701fc387103a5633b6cd7be873456786b53113eb80e5815698357531f5fe3bea24f3b4e9aa89f0e2c58bf7a826bc332ebc35a6763753b577d299949be796919ad46ce79ed7673ec67d5aea76b4c665ae70afcb411537d117dcb0a638bfc58e865c97c426d89d699ae8ae37e06334b49a89d917de7f7591167c0fd7eae995c172491bcc81f53474606d313bee656ac7ed30c9bd4d25b7c760f43184d10113dcd750f0ce98e07e86823b6282730d05676382fb1b0aee8499c50053b3d84527993bcebc6454ee810beeac13ccab697c92a56935ad0bc623df9447574cf22053c9dd3492fbb9752c3ec522f34554bc977ca6a88517895a48cd5f245f480dd69991b6b4e0931173dc69b5d41a63e545775dda73931d9a0693cdd109e73d0fbbc65e8e0bffd7f9af9af046b8f01e98e6bb6934af1550f39e589618a6c912819a2ebd3026bb6b986cd6a99d80496f4cf8708df013020aef8309df43237c5b40e17d759ec26d346d21f514c94e5a19e7c48c87067b70abd7e4e4ac8519ceef62570b7e5fe6d8c46125f6292398a6e2eb3689c6b0e4a7ded0c7824fb16ae096ea7a8f37caf57876e98cf9c67e3a83e7bde57cfd5bb511595e8158207ad078f8e5eea3e94e083c3527086f5d2d4fd4c5f3442ee6e1466b3c5c24a087ebafcb706e4bb87cbb66385e98ad763b05f8bfd788e49de5861d1f9836c94adcf83a684a36b774d31aed58d768072461b4e9d01e33c70198ff1da7f1bf4322c1fc6f1e66eb7c0e658d75e204463c10133c4197896ab90f8267957c8ccd445dd91490cd202c0a930cd90cd609e6b50c3e49d7a8e23d0453798a8e3a2fd9e3d546de2507a79064bb1dd795ce6fb9fb94ffbbd2f9179f3959e84a2f76eef2dc5fecfc9bbfc1277f153a798f7fdd371091a11891a9a64476c52c649ac6421a458359c86e3ae1bc113c3d190b49d0081ea6f3d26e976229a9974ebef32abdfd7b7bea78697df20cd72773cba5d315f3c4bbeb92bb2513070429eae772a3e4e3d25157efd9aede7d13e8adabf004d7bc9a958dc2ad6c389637e668f2c6dd01f3c61e982bda4be78a78afcf58b7a55b9ed0ad64bbc99aed4ee1ae10c9bbab737d80536bda14c8e58cc0223f5713f9bf02467e2416f9bd7591e74954e046becc8d3cf7b755ceef6237ad8b95e826f2b9d9ceffd0a3cba78bdc19efcb9c3b6b5dbf50064259ebdad1b2801e7b14866f1f0dbeecac60f80a30bf3acfd0af8ed609e6556b3e626ddaed31064bf4f9ba44e74ea112f4ed04813f56573cb8e3427b92160fc1e749ebddbd7b50875a736558357c81eb3a5b558b59c2e9c408b971980b5f88b9f0c2980b5f5463d133cb099f57a12a9daccb75594eecc0c76399b0489309cfa91d2c134ec03261b161269ca813cc2b3725c9089e810b9e84e158acc151af4e301c937579ce1d76cbe45ca191ce5b15ae4b0f9eeb96e8f06a73dc52a69f279438742ccf4dd1250b27579a4c7a2fc59364aa2e49dc01cb4c4eae50eb6bc11265ffa4136519d34faca8297c2c59a661c55599aeb8e2396375cc9115b86dc372d79195052abaa6630e7839e68079bf94e85a0ce01af7c462b74217bbe66e31b3c0a9442e505ac1fcae57fbe2b5f320319d8169b052a7414ba0c102d71aabf0c51d01b4988969b14aa74563b7c05be3a8c82ddf9fca9581c29d85a5730596ce9529a5f36ccce757697cfeddf583f9fc393ae13bb839c1ac08dc0bd37a8d46eb631a04d37a2e267cad46f8fb0185ef8d095fa711fe5d40e1fb6046b31e339a0d2919cd3c2c531c90c839f44fa373d8178be9462ca69b528ae97c2ca607ea62dac28de934278673624d4c5e0c7add7db39db8168b7f0789eb7e1a1dfab9b37f32b90e04ae714b6d1dc8419aa4e9e7ce35aabee22399d036b3242696f16150dd92926402c04afe0598511cac338a562c5e3295c4c63626b83d137c2162ea996021a6c72189b221d7c32b978a8551a4ae4121a6c1569d062db524a68a7ebbd4b558846971a84e8b1d80163cb4254eaaa71e761116f661bab01b33584be183aebc39eb5965b07a493116eee1ba70f9acdc256e9d6801704da9d78a4ab0d08fd085de06c4ba262df87b15ee3b41f459acd387f74bf16d44d47e29574e807ea9255859731456d61c9d5259b314837a0c9e99d4b226de1f262b9f4b029636a53a2d786973ac2eb63c92c7297e580d6c0b1ed8fe58948fafc98a478a8d2bb81781d10e12d56558e827246bc59816a9597119a6cf893a7d5a68f334d44276f005d16139a6c3493a1dda27ccd93a5d522353aed38ad79a4f669a564ad360b5e6153ae1bc94e0e73b9ab45256625a9faad1fae9805aafc2849fa611fe5b40e1153ae1bcf0e2474c1a8d27576292cf30955c8501395307a4593020ab31e1676984bfdf2298f0353ae1bcf4e207649a8eaaacd509e7bd60e72463dd097a8bd7619ee2dc640427c8eceb75827909745e32821394361bb0443c5f93880fb70c968807e884f3f7b7b1eae5663f7725446a0bdd2f70beaa538b79fff575fed314b90916816fd4e9c98ded428db145031adb264cf8451ae15901851f8819dcc54c5334f1f106dd940039d69d2d1a80de349c2a77b8d7ebe58f57c8b3dd02ac8af5717e173b7f57c46a54d92cde80e112fbbb1217bb2de9e5ee775cb63756c59f0f709eefeafce639bf9d02e5868374b1e6767589c6ae72b95d5d6a66209b31cc97e9302f4c0be6d461f2f1f7a5a27b235b69d766b3d5a0cb255b7ceff5cd2e71b5e033b28225c716cc875caef1218fb709e6430ed609e75ee28a643c5f82919e4330c1571a0adeaa13ccf3f055c9085e860b3e5427980fd15f9d8ce005b8e0c330c1ee29ad8ae0193a179540f8e198755cabb18e13da06b38e2330cdafd368ae6de426d0fc484cf3eb359acf6d174cf3a374c2b98637e85c0ad3a99e204b1e8da97ea346f5ecf6c1543f06137e9346f8c68ec1841fab13ce8b4b7ec2aa69c5ef384cf82d69107e3c26fcd634083f41279c57596f4b26ef27a8b29e88d9e1edc9084e60822761567287c64a166607b3929375c2f9fb7732a406e01e749b7a0de0140cd3ddbaecca671104ad01f0410a1b2b5ba762a8efc150df6b86fa340cf57d3ad48bd2863a3c15aed3b1ac75bf266b55750e96b5cec0dcd8036970636762c21f4c83f0b3301ff990a18f3c1bb3c8870d7de439188e473438b4ab5a13e03817b39247750eb84b302b394f279cd79e1f4b064982daf3f998e0c70d056fc3583f9106d3bb40279cd7439f4c46eb0475d00bb1447c4a9388395d8325e24598f0a735c2bf0b28fc624cf8331ae1b7770b26fc124cf8b31ae15bbb07137e296629cfa5c1522ec3843f9f06e19763c25f4883f02b74c2b973e3e722572b97f982b4a0e572952863e562b120959f6025e895585c5ed2c5853fc8f6851a24acabb0b05ed68505270414555b7694faa0fcd59816afe8b4f04f5ef4ea28de7074ea1a5c8369f0aa4e83060c4e0bd8cbb58caa80c5ebb59897784de7827a04f312d76179edf534e4b5eb31cddfd068deb26730cd6fc0347f330d9adf8869fe9646f3950135bf09d3fced34687e33669fefe8ec932f7a9f277cd97cc737cc137e6857d136f0eecd757ffbb0e1cedf6380cf2a7205f125537c5878a5736fa9eb5fd6b903c325eedde2803eed164cff7775faf375a6718d4631be14b744c42357c4a3bf8887da56f27cb6dace59eebe51292690792d262f7e95cc9b4fb7defd32489c6ed5c5891bc87bb1074ae3f37de74f9dbaccfbafaff75fb0f6e76d98917da031b2da018dec764cf8871ae175020abf03b3808f7416d025290bf65ab8fd9cdf81e29e67cd07b07cf1eea080ab24efd469c9d3f4632c4d3f314ed3bbb0303fc5c2fccc38ccbbb1a4fe3c0dceea1e9d70fe3e3f7cdb6490e15e8cd4971829f7786b39d9291550f761a0be4e03a8fb75c27979f43f56bd3c9a3b265879f4804e389f26f34d32a990609acc8398d6df6ab4be7e6c30ad1fc2dcc4773a3791cd983b455a1e8ce4397fb822d8bfa623dba9f657b855f795292da27e18d3ee7b9d767cfff625b1f0e4bcd920e13d82a1fe4183fafe80a81fc584ffa811fe7140e18f61c27fd2083f615c30e18f63c27fd6691e50f81358bef9c530df3ca913cca752f173c28da6523d85f1f84dc3e3e2f1c1783c8d09ff5d23fce680c29fd108efe7ee0e9af91de9f90e38c15749f043db5b2814a2c892467e583abe1f3d163eb6ace1595dc270767f69548a544f963ff164790e13fdb746b426c513887e1e33a77f34e6346c6230737a0113feaf46f8e480c25fd409776b61118df3e7e74314c60aa278b1136c59e14b58842291ea111a3d3958845ec6844735c2b70614fe0a263c4b23fc9480c25fc592a2962e29b8a0225f3d205e43089218af61a1d6d685dab45aa8d537ed0b12faeb58e875b0d06517157734de105fea1d646f60a1d7d585de84e956f7c6e7de0709f94dcc90ea690c69c48c6086f4964eb87b067b2489c27e082ef86d4c700343c1ef6009d15097102d7c5ec83fc1bfc42d3dcb58f0158eef623a34d2e9d0cc678afe4517a919e37b58f88d75e1c305640b9c7a80b7c950aa8b50ded784ddcfdd769ccf39b765afe702f75f6b98ff10ca74eefedc24527d7b49772a98eb0f75b59f1d22bcf6c3b7becb7c5cb03ad4073a4be2a9d95413bd2c193dd55c78cc90003ec40268a609209a42001f610134d704c05208e0635d007ce6428b643c5982990b9f608ebda5c6b1172f08e6d83fc5b46e65a8f56798efd911ab05c22dcbe2abcb83f89ccf3152ad35a4862c0c46ea0b4cf84e1ae16501857f89096fa311beb43098f0af74c279c5a76d4477828f467882036dbec6346fa7d1fcf2809aff0f13de5e23fce980c2bfc18477d0086fb42898f06f75c27927c6ce11c34e8cef30b53b6ad49e1c50edef31e1d91ae1c70414fe0326bc9346f8f50185ff8809df4523fced80c27fc28477d608ff3aa0f09f314fd945e729bd517db8e786be3610c46ffe823988ae697010bf62ecba69d83d5c1c8cdd6f98e6ddd3a0f9ef98e6391acd3f0fa8f91f98e63dd2a0f99f98f7e969ea7dfec298f4d23019af139e80c9df98dabd4dd5fe0753bb8fae0b27a0daff626af735559bb714b46af7d3a8bd717130b5233ae1dc4be4622de405e8d663a9ee0114c522d85f13c15aa5c1229885457000d6fc8d77014c761b4acb5276a9b5b0b0f330a7bec609a5d2d7e736da813c37650d6a631a0cd469d092c11dde780f5c252b11cdc962837dfdea60099caf49e09cb260095c57279c1bea20c3cea37a98d6837575ac805ad7c7b41e62a875034ceba11aadb705d4ba21267c578df0d7030a6f8409df4dd777b93c98f0c63ae13cb70f4b86778281ca26580edb3d19c10932cd0e98850c37b490a698c67bd43c3493aa1f6a86a5ed085ddd3960da36c7d276a461dab6c0b41ea5f35b2b8269dd12135ea0732f0185b7c2848fd6085f1950f88e98018dd119105f3cc18ff8911be7cc728ab3c96c57b416c167a60531add6983663b1e1ad746c9dba932e545e7e8e8b3d00b3ab78ed6e7c24957db3da60b19ba08b9db78d937ade14ac978d76fe2c725e5e9262ef5a5b4c9f893a7de4f68003d2be3d603b4c8f49787bd9dba5335ddb03b6c734988c55ada406e9dc1eb003a6c5949a4777666b564f06097b672c0f4cc5f2c0b494f240475d387ccf9ce9ba70b8f83d2329efda968d456a0616a9992945aa139670b31219f0c0341af02e9806b31319f0c0341b70674c8b393565e42277e8afca7524260b6aba601aec557316f246eb0b7c9a0409bb2b16f65c5dd87c76ec72b6da7d13d6c4c6bac38c135c771f9f37102f728368d40dd3686f9d4670eec232e7c67a8374e88e85bc8f2e643867634dec76eaa1e760a1cfd385de586305a955f37b60e1ee8bd5c6799fc44ad70ae63869cb1f049d29db130b73be2eccfabe30a708fb0b125e2f2cbcfdb02a1adf4a5b1649a9c6b23716ea025da80d94505389671f2cc4859847e5fd2b703eb6bf8f253e112e88167d312d0a755af061f43eceff4142e88785b008eb3454e3a9df4733880eb9980e45980dcbe5aa3962794c8f40e1f5c7c22bd685c72b1f72cfd0094ea53b484803b0904a6a2a8f6088a9ed459a8785bd18af138c15c719f1c68497ba23dd7f55b81372bd5c146c22e7404c8b253a2d3af87c7172daa446271fd36b295642c1f238deec4c2d5f0fc2422f4d545294bae117bad3a337b0a0cbf6066361ee8f796eff2c4eefe4baa00bad8760a12ec362bac2ed399f02fcf78080b96e28166619e64fe227eda55256ec8af5d02cd7f4d0dcbc31580fcd6e588f58b9618fd8309d603e67714532827be08277d709e65d472b23d5f77f7315548527d87b63b84e38bf5c15e15354fcc237d46ad7eef9851ffc502d80da78007b60c65391a8f2c81dd062e7e6025625e6ea9506cc9e23b088556a22f6d6b5074c9bb0fbc96d82446c2416b1aa44ad017dc4829501a374217372ab2386e3a90598e435a692476392d79a4a1ea393cc71af8b98afac1c8ba9bdde54ed7198e40da692c763920f30953c4123b95fb67319d93ec72b9b9f1b99786ef2c6643cf7229cd7445d4a705e9b0c054fc2041f682878b22e853bf114de7fbba4703a0e77aee174a26488cdc6894dc18a81cdc9084ee0e5a76282b7180a9ea613cc7de0c1c9084eb0ac7e3ae6890f498327de1313be350dc267e88473b33fd4d03a666295c2c30c2b85b3301c87a701c76cac8e7c84611d798ecebdecc2ddcbe2ede25ee8dcca913a52dae52c4745f884c99e0c5fce6276b2bd3e25f6d225314f89a3934962ae3322782e56fb38c6b4f6b1376695c71a5ae53e98cac799aa3c0f73b5c71bbada7d31162718b2988f697ca2a1c6fb610eeba43438ac0598f093d3207c21661ea7989a4721968aa71aa6e2224ce5d34c552ec2249f6e2ab9582799afb43a23191809565a956094cf34a4bc18137c96a1e02558263cdb30132ec552ef1cd3d42bc5589c6bc8627f4cf0798682976190cf37845c8619f23643435e8ea5de05a6a9578e41bed010f20a4cf04586825762a977b161eaadc234bec450e30a4ce34b0d35aec434becc50e32a4cf0e58682576328ae3044b106d3f84a438dd7621a5f65a8f13a9d60be43ced511d31d72d6633a5f63a8f306acb6756d1a6a5b076049789d61126ec4045f6f287813c6f90643ce07621adf68a8f14198c637196abc19b38c9bd360195b30e1b7a441f8c158d97aab69d97a08d605749b6117d0569d603ef7f3f664046fc1051f8a09bec350f06198e03b0d051f8ea5de5da6a9770426f96e53c9476292ef31957c1426f95e53c9476359f0be3464c16330b5ef3755fb582c0b3e6098058fd309e6930f1e4c467082ed628fc7403f9406d02760381e36c4712296bf1f31ccdf27619c1f35e47c32c6f9b134703e05c3f1b8218e5331c14f180a3e0de3fca421e7d331ce4fa581f319188ea70d719c89097ec650f05918e7670d399f8d717e2e0d9ccfc1703c6f88e35cccf3bf60eaf9cfc378bc98061ee7633c5e32e4b10d13fcb2a1e00b301cafa401c78598f057d320fc229d703ec8fd5a3248128c865f8cd9deeba6b67709c6e38d34f0b8143391370d4de4324cf05b86822fc770bc9d061c5760c2df4983f02b31db7bd7d0f6aec2b47e2f0d5a5f8d097f3f0dc2afc1847f9006e1d762c23f4c83f0eb74c23b39971f25939809a67a5c8f59c9c78656720386e39334e0b851279c0f567c9a8cd609062b6ed209e6130c3e4b46708209063763823f37147c0b56127c615a12dc8a49fed254f26d98e4af4c25df8e49feda54f21d983dff2f0df67c27a6f637a66adf85a9fd6d1ad4be1b53fb3b53b5efc11afbdf1b36f6efc5da303f18b661eec340ff9806d0f763387e32c4f100566ffad9b0def420c6f91743ce0f619c7f4d03e787311cbf19e2780413fcbba1e04731ce7f18727e0ce3fc671a383f8ee1f8cb10c71398e0bf0d053f8971fec790f35318e77fd3c0f9690c07df6cdb04c73398d67cf9b1a9d6cf62c2a36910fe1c56e1cd4a0649820aeff35815bd5632821354d15fc034ae6da8f18b98e03a86825fc2ea0575a386f5829731c9f54c25bf82195dfd3418ddab98da0d4cd57e0d93dcd054f2eb98e446a692dfc0ecaeb1a1ddbd89096e6228f82d8cc50ea62cdec6ccae691accee1d4c78b334087f1763d2dc94c97b3ac97c06498b649231c10c92f7b16a74cb640427a8467f80f547b44a467082fe880f31c83b9a42fe0893dcda54f2c7582edcc930177e8299739b3498f3a758f1ddd6b0f8fe0cc3d1ce10c7e758e5aebd61e5ee0b4ce30e861a7f8909ded950f057188a8e8628bec634ce36d4f87f982d774a832d7f8309df250dc2bfc51c476753c7f11de6f7bb18fafdef31bfdfd5d0efff80f9fd6e867eff470c727753c83f6192734c25ff8ce5951e8679e517cc9c7ba6c19c7fc5fc7e2f43bfff1b86a3b7218edf3167d7c7d0d9fd8169dcd750e33f31c1fd0c05ff85a1c83544f137a6717f438dffc16c79401a6cf95f4c785e1a84f32e23ade31868ea38223ac9dcefe71bfafda84e30f7fb830cfd7e964e30f7fb830dfd7e2d0cf21053c8b531c9434d25d7d149e6596057c3bc525727989bf36e6930e77a3ae1dcef0f33f4fbf5311cbb1be268a013cc9ddd704367d710d3780f438d1b618247180a6e8ca1186988a209a6f128438d77c0b25f8169f66b8a491e6d2ab91996ffc6a421ff35c7488f3524dd02133cce50704b0cc7f834e06885099f9006e13b622632d1d4445a6345f724c3a27b27ace89e6c5874b7c18aee298645775bcceea61ada5d3bccd94d337476ed31b3986e6a161d3095f7345479672c9bcc484336e988099f9906e1d918ec59a6b03b616acf4e83dabbe884f371ef39c9a4648271efce3ac1fcb893bd9211bc1417dc05c331370d38ba62a9b8b7692a76c3d4de270d6a77c7d49e67aa760ea6f6be6950bb076623f30d6da427c6633f531ebd301e0bd2c0a337267c611a84f7c198149a32e98ba9bd280d6af7c38417a541782e26bc380dc2fb63c24bd2207c00267c711a84e761a6b2c4d454066292979a4acec72a94a58615ca415885727fc30ae5609de05d9ccb65c9084e30657c0826b8cc50f050acdab7dcb0dab72b56b72e37ac5bef86a158618862182678a5a1e0ddb11cb2ca34870cd749e65ea022199513ecafb107967a9586a93702135c65287824967aab0d536f1426788da1e002cc2cd69a9ac5684cf23a53c96330c9eb4d258fc5246f30953c0eebf038c0b0c363bc4e30df526963d4744ba50958c6de6498b12762980f34c53c09937c90a9e4c9188ccd8630a660158c2d86158ca9188b834d594cc32a8987a4a192381d13be350dc2f7c4b2e1a186d97006661e87199ac74cacac3adcb0ac9a85697c84a1c6b3318d8f34d4780e66d047991af45e98e4a34d25cfc5241f632a796fcc948f3534e57db012e538e312651e6673c71bdadcbe98d338210d4e633e9686279aa6e17e581a9e6498860bb0343cd9380d176269788a611a166269786a1ad270119686a799a66111a6f6e96950bb5823bc5f67e73252ceb6c71102f1a3ebe0718df3c4e100357f95fc910267e8ac29a290738f143833ca8f1418c0f02305d2a93576c44009962dce32cc168bb1fae1d986f5c325589638c7344b2cc5589c6bc8a21463719e218bfd31477cbea1235e8641de660ab90c937c81a9e4e558f25d68987ce53ac1dc9b5d948c609ecf11c12b7482f971b31727237808aef14a0cc52586285661282e35445181a1b8cc10452586e27243145558a6bec23053afc632f59586997a0d96f5ae32cd7a6b31c8571b425e8741bec610f27a0cf2b58690376028ae334471009643ae37cc211b318d6f30d47813e62c6e3474160762286e3244711086e26643149b313bbec5d08eb760767caba11d1f8ca1b8cd10c5219855dc6e68155b31abb8c3d02a0ec59a4a77a6a1a97418e694ef3275ca876392ef36957c0426f91e53c947ea24f36955f73a0f3a2683ba332efc284cf87d69107e3426fcfe34083f0613fe401a841f8ba5e683a6a9799cae1ba08b731959c5b66f37c00ce74f99f3ff0ab6d8f9df6b2897a4bd33e02127fe1d34a9e3a690b653e061b753209f25d32990ae38605d03c76346f7481a8cee044cf8a369107ea2ceeebab2edd8fd54eeca2f74c3e15f16b8dd396b6a48afe0275a3e9674f7d3e349743fa54f6bccc64ec27ccf13a6bee7649d646e034f26531b781caf669c82097eca50f0a9188ba74d599c86a9fc8ca1caa763829f35147c06c6e239531667622a3f6fa8f25998e0170c059f8db178d194c53998ca2f19aa7c2ea6f2cba62a9f87497ec554f2f95813ed55c326da36acf9f05a1a9a0f1760c25f4f83f00b31e16fa441f845584abe699a9217eb24f329aa6f25939209a6a85ea213bc8b73f9763282134c67bb1413fc8ea1e0cb30c8ef9a42be1cb38df7d2601b576029f8be610a5e89f56a7c60d8ab711586e3c334e0b81a4bc58f4c53f11aacfbe863c3eea36b31c19f180abe0e4bc14f0d53f07a4ce3cf0c35be01d3f873438d6fc4cce20b53b3b809b3e62fd360cd37633cbe32e4710b56827f6d5882df8ae1f85f1a70dc86a5e237a6a9783b66d1df1a5af41d580a7e679882776229f8bd610ade8541fec114f2dd5847c68f69e8c8b80753fb2753b5efc54cfae73498f47d98f05fd220fc7e8cc9afa64c1ec06a1dbf19d63a1ec454fedd54e587b02cfe8761167f1853f94f53951fc124ff652af9514cf2dfa6921fd349e6434bff248339c1d0d2e398e07f0d053f81b16059862c9ec49c7f24cbccf93f85798d68561ab686c74a96ac64b44e50b23c83695d2b0d5a3f8b65efdac9689d207b3f8725621dc3447c1ee35cd790f30b9841d73335e817b13c583f199513e4c19730c80d0c21bfac13ccab110d93119c6008fd150c722353c8af622c1a1bb2780d53b989a9caaf632aef60a8f21b98ca4d4d557e1333e56686a6fc1626b8b9a1e0b731162d4c59bc83496e692af95d4c722b53c9ef6192773495fc3e9680ad0d13f0039d6077fbf36404275836f521c6a28d298b8f3095db1aaafc31a6723b53953fc1546e6fa8f2a798ca1d4c55fe0c53796743953fc754ee68aaf21798e46c53c95f624dcb4ec9c048d0b4fc0a13bc8ba1e0af3582fb75732e230b19e51c8a398eb402f78dd16c92f3acd0799fcbf4ee4f7724163a61737923dd10f84c04ef99ff8bc4f3243aebe868e74974c9e2f324bab86fa647336c2ec4ffb00cd3d530c37c8399753753b3fe1653b9bba1cadf61bd6a3959e6bd6adf635af730d4fa070c744f53d03f622af73254f9270c74ef3480fe19d3ba8fa1d6bf60a0fb9a82fe1593dccf54f26f188c5c4318bf639d04fd0d3b09fec01a40030c1b407f6290f34c21ff85411e6808f96f0c72be21e47f30c1830c05ff8b754c0d4e43c714ef45d49ac61043d388e804731c430d71447582dd6ddb0d2d230b43b19b218a5a3ac13c970c33cd25b53116bb1bb2a883a5de70c3d4ab8b41dec310723d0cc5084314f5b1d41b699a7a0d30954719aadc5027987b8c8234788c4698d6a30db56e8c811e630aba09a6f258439577c0541e67aa72539d64defd3edeb0fbbd19267882a1e0e698e08986825be804f3cb49ce83761a6bd65a746d3c80965876999c86ecd20a133e250dc277c4ec6faaa9fdb5c60a80698605c04e580130ddb0006883b1d8d394455bcc0067a4c900dbe902e07d3f330dfb7eda634c669932e98099f5ec3498f5ce98f0396910de51277c27e772af64602fc0056763b0e79ac2ee8449dedb54f22e3ac97ca7f27d92819160a7f2ce5812ce4b431276c17cc8be863ea42b067abe29e86e98e4fd4c2577c7482f4803e91cccf52d4c93ebeb81d51a0a0d6b0d3d312c8bd280a51726bc280dc27b63a6526c6a2a7db042bdc4b050ef8b65c8c58619b21fc66289298b5cccf32d35f47cfd31db284d836d0cc078ec6fca230fab832c33ac830cc41a5f65ce83ee8ae0c8314c8ecfcc66c562ad2a1f835aeefe7b823b3ac54766163b9f78635013626f8e7157b4f2376638bffc69a97ba782f575caed05eee855b9f32e5ffdca4792b8dcf837a39d5f39f253ccc63a5f15b2e56e08deb7f1d1276fccabd41df3f23ff1f4cb7362b820412cf82adbd5cebf2b41e8b3dc313729d32f758ef355a9232748cb341fa3be5c477d24c3560f4f638bd8fe2ecd2a4171055be9fc3d81f171c1327724907fc59fd42c418d191f315ce18e2d163aef0689df202c7ee5baf8ed86c66f9c48e5eaf15ce25c718dab5c4b2877745eec8e392e4f10d759d5de0d12a7c1589c56e8e234188d53752dfc315ae93cad107647159721585c56eae2b22b1a173902bdc2bd2adf8ea933148bd12a5d8c86a51ca3251a8bc4e3a4b3df20b1da158b55852e563d03f809199f72a161222f1a44e3dd308d2b751a0f670c0dd5d373acb085428d7fc23d7d22af966acc866131abc2f28c6e56c26c56e5ced728757fbd591a0b5c8f5d293ee76589aa338d97de1d8bd16a5d8cc607c833231dc2156e69edc5aec82dcf2baae90e4b642c0f25921e24b6c3b1d8aed1c5761fc29ace3837ef4d7767e62c11359939aed72f75fe5ee4a665625bc7ad2308913d30226b7544ba05f6995e3cab3fe5cf6605d27404a6e93a9da6f86e2b3595bd454ed381e7ce6257ebd5316df5361b240623b118acd7c5a0abe217d5fc24f59dec125de2fc7b699af41c85e9b901ab99eac384b5d1c96efea874e82f75e927f202b877488fcf2bc0e277802e7ea3025b92b4796947a9783cb39ad0682c861b7531c4f7c0aab9ee5de8def37c1b6fbd9539faa62fa5c660f1d8a48bc7ee8a2542add5dc3353e89f9c15262a7b5369fb8dc5e275a02e5e7b2495c3463a3a148b3ac58ab4e4b0d4bcc7382c6e07e9e2363a419ac1d88d61ab9c0f0a45ad697d0db523fa7ad3782c969bb1d22859cb1c57a365a6a7e49f80c5608b2e063303b42bf0144ba6ff21937d1413310607eb189410d607671ad70729fdd5248cd3213a4eb38939e13d84416acca970988c71d89a4cae2f7063e8c546e69559ce3d8f487f3628509b2ffe5590184cc16270a82e06fd03c5002f4374714bad74998ae97f984eff82a44ace09ae87495cbe64b27e3a0d8be3e1ba380e42e3985a0bbc26594162321d8bc911ba980c09504a068f8b5e5a90d8ec89c5e6c86462037d91796cf4d282c46606169ba392e9a5f35b37cc4db3ddfec40ae7dda9ced3252cbea769e21c92befc33138bd9d1ba984d4aca478c73fbe30b45c9255bb1d39c7fc7eb39dbd367ccc2e27c4c327e91a2cf356e95e9ea7d9d8dc5f1d860ad5a3e8eb8c87949c675b25be71ae3eaabcb85e9ae4dcdc1e2715c322da420f6b93d2d722f2c96c7eb62999b742916b47d945a3d632ea6fd09c9d4f412f9faa0faa79a5bf6c6627062325656dd2324d70ec77d43a2ba78ea56b60f16cb93b0bebc9af3d24ce7e545cc1bb72c424baf4cf5a7ccc3627872327d60892c31581f58badb52fb62f13a059b1f909c7f08162b3cb55289d37c2c4ea7a6de735e538ecba44fdf0f8bdf69c9d4ac684676a9c77c1760713e5d17e7b9db39ced434166234ced0d1189b64a9924c0b3cd3254b2116d33375311d93545e9ec2f8190dbc449133b3f0d651a6ca9745583ccf4aa6e5a07adf0237a6d5530fb60692b99f5ebf5c84c5f1ec64fc72f538c6ebda13dc31ba2ad7ba786fa5aaed2ce7df2bddfbc9c52eb5b67c3116bf73b0994f89e2e795a0f10f921f6b496faa9560b13a5717ab7969b64c2cff057d3fbd4c16634cce4bbe86c17b6383d730bc3edce4fa7653f7ba4bb0f89d8f8d8ceadbf8fa039dbd58578a1a6289db53e58dad541fa54fdc3b954ada2dc5e2b62dd8ecd1447193e3f295ee1cd22a77f4a8cc894b19f3c64daa97aa5eb9e99e1c14202ea5585c2ec04a8dd4d32995b8a423bdf6c7e27821365662965e5ea992be345a86e97f11d672344ba364f44f47ba9461f1ba181b1f493d5dbc19ffa39dbf1395f2a9a6d0722c2697049b89944c0a058f493ad2aa1c8be1a5146955c8d691a5d50a2c269751a455d098a423ad566231bc3cfd69e5f7e9a56c83260ea9d722566131b922fd69153c26e948ab0a2c865762add3d4d3aa82e94ebfc4e7f3d4746e6690785662f1bc4a17cf3d8d5232ddf14c473a5761f1bf1a1b733649e71231b76311db877973b5a738dfac4b9b0f5d8dc5e61a6c4cc2243553894d3ad26c0d16cb6bd35fcf2f76db702b99b7fbe76411e7ea63d1a9a6d85a2c2ed7a5bf9e9f4a5cd2915eebb0385eaf8b63514a719473c2e3b3d6e227bc26e361a0c4f897f1de255c027eb26c1046eb31463724d3ef8baf51adb9df37d3337b376031bd5117d3f294ac6126b13504b78574e4a30330723799cf8eac6946577afac2376231b8591783094c1ddd88fba5547bfdfdbe2d59af97aa77df84c5f796d4660d25b71221b5919c5447ac0ec4e2782b360f25c8ac21eab9420761dadfa6d37e2ad3af389deafa9bb5eec8e3325f8a79e5d234e759b99bf370efa35b0bc4dfd68587edd31d24e69bb198dfae8b793756f3fcc459aee74cbf856dc134bd43a769d71abd06959e07637adea9d3b30b4b3ca249a5e521989677055b971274456aa51bc3e9ccbff3827e2c8f7a9df2568cc1ddd83c8b7431d87e713e148bf33de6b587416c600ab507fe5590181c86c5e0dee4c7e67898c1c7e6bcf861f7d355333e1c8bdf7dc9ac1dd1cf83c4479993abf705d1ff084cfffb75faef52631bc68b01cc21ba9c1344c323310d1f48651c9f13e4fd50eb1cddabafcac5c6b14d6ad5759dff239186ce3fc7b86ff25500d3dd5a8fe75dfa75771eb9752c79c2875cf7d5d7b7462c7e9f87bedcd1885becacd8686dfcbc0f4cc2830eb03a51e6fdd73dc261578904892c56b8795f96b992e3f33df9ae1ce35c8f56e2966345cef564d123af9ea082c5c2e3e55febc6efea6257739ce4392b7c5faa22b72ec7bdc222c762ea8a1849590ee91c4efabf16d38778aab611a91aedc737178cf44ad19a6ad6e2e12cef90469d0db5ae4616d67774ba7b02a68a5a74846fea273b02a6b8d5660f1f6f2cf27f15d71c22cca9ba10fbb802a41faa51dc6c90bd75e2dab866e635ee2a98b79dc3fb858cd5ad1dcde529f10825ae662eaeb89595bb6e90fb162e7282a899840259d338b2472991b577912d60b9b1c200a29bed84522c26b18d77ab02c5a2e3b5d2894c18407e9d1707f9989d20fb87026471af38c8c7e97d9e04c99b135c8525a2a8e1c8c280ebea8e715c4fd0fbbcea450407b73c54c544f6a238b2272991f16336e5d0985a38c001fa70602b6e16c7f61425b63aaea579734d2a42528e8e181387f334259ce63eafe565c77867f04c175a5532b1b400dac5abe2d09ea18456df8526fb8365a5360c88724be2889eb5b35a91170a9097f78b837c2ed31954d7a40a03b485a0a47c9e125a2b1fb4194a3dcceb4ef50e8ee5dd096140d77bdf38ba1728d1b5ae666fb23fa540acbb2f77ef8d73f1ad76420d03beeb4179fa22752b40d6d1c25b37cb0675b39728713574ad6d8cdb4fb7da0d3e4cbd1dbcaf57627a9912531ba6eb2082a56858eb6c3b55c511be42897047d4afcd71e72d9430ffcca330c0fb6d6c1cdeab94f01a272c4fc380aa69cb38aad7a81be90b9c1897fbec4a66499865c3806ddd8238b6d7e90b82f8149b15ee38e0f29060baba388ee90d4a4c2db5d605e74b7a75b425210177c2c238b83733d78c1ae57e580c269d4e76ef2c0b05b4cde571686fd15b1bdef60c5b36dd0806f4dea604c7cf7394ad0058d5e0f5ff3037a3cadc6654ddda8a7075467cea23f1c1a8e3730678336c0c5be7cedcaa10e0953904fc3019eb347f07ce01c849d03cca4972d038278916694e8091859c1aea8239498c83e5180d3a9a7c9d67f4f500e76b75302127a5bc9e9342374b4ee0264c4ec07eb09c0095d79c4055919c4045494e12f34772921c40cc49ba033527411d3407e9f257a5e3f50abd1eba567b4e8aadfdf8f434fdb4b25c3e3dedddffcf678ee5f29963ef71080345d9efd506dea7ac0dec2c52de9b2858ceca58f2d38d17b041aa3eedabe933837927f994bae1c91a804eb3fabe3ac28c64229b4a3da14d345ed1fa80baa2a5a2c5e7032f6043aa0f2fa50f672b2a9cb7019c1fda8473682871be02707e6413cefea1c47978248ef3639b700e0825cedb01ce4f6cc299174a9c1f029c9fda8473602871ee087ce76736e1cc0f25ce0280f3739b700e0a25cef900e71736e11c1c4a9c27019c5f6602e7121428549f6776c25651232a9cdfb038ceaf6cc2393094385f0238bfb609e7e050e26c052a4affb309e7a050e26400e73736e1ec1f4a9c2b4166ffd6269c79a1c4793fc0f99d4d38078412e74900e7f799989d8bc1f4af6f1fe0144564309751c13c08d43a7fb00926a16592c1dc0860fe6813ccfc10c2dc0060fe6413cc812184b916c0fcd92698842d7532989500e62f36c1acb6da3e0430570298bfda04b3da8afb10c05c0e60fe6613ccdc10c25c0a60fe6e13cca12184792580f9874d30878410e6c100e69f94301b3817cb6b5eff1a82de752e4522fb2b134b9f30fbf3f70e1156ccdb52a1bc1c74b6fd6d0bcabc50a2ec0832f23fb6a0246d2e92a17c0a58e5bfb6a0cc0f25ca678055b25a96a01c184a94fb0294114a9472f27911f3e60debcfd3f47671256cd9d4a602390264efa82d20095b356420870390599420f9d295c2d8d47c75f90319b81e54e0f82ebe125cad4c58e060c60f16e51b517355b9c2de16bcfcd94a77450cff207c3ef10600b2362548be3c638503b0c2b70465001b1dc2f64b1700ad0e2534b9620b1f43842d68b8f53361b1d2940aeb41006b5d4aac70a11ecfba4b1c5c19cac864dd10f70078f528e13505f04aff337e701bc0577f7b56b3a138d26c5c970ae55450a9694089b28940d95f64e38a4c59e1522a74e7032b6c98090f3848b1c50cc06b4f056f3760778d28e1b5f0151fb2523dc74597210b24cbbc4d00c4c69410e5b268ac6927634aea031750613c0c64e42699f081b9ff191f780840b703253a39388559a0bf24269d294e969ddf03309bda0493707a1e19cccf00cc6636c1249c044506f31d00b3b94d30097bb6c960be0b60b6b00926e124283298af03982d6d8249383d8f0ce61b00662b9b60120e1790c17c15c0dcd1269861eca6780dc06c6d134cc2495064307f063077b20926e1f43c329811d0066fb37dfb223d51ded9e4841eb33315ca23c1907fdbed89d23fd3318c3370a701ab6c97892c5ee6bcc4314ac958ff10214cb2fea18e597198ed33d1cdd6df377e2d1f87bdb7f24450ec74a0c498adc9defa8dece21b20c22d21497b318750e1ad00de73674abc358f734381191ae7de4285b514586d474aacea169dfe2d3cf93dae52b51347423003e34f80303b1396192f8cbc09031cdb04363ac17cb4304eeccb01c552274aac7212417f37d3cb8d7e33541c918d403e01ac72974cd436936b0585b1aba31f40d9991265f25bd4ce72ed92e35eec8a5b4e8b761115da09a022df85126de70095a672974f21939b2d17b855a735d415fcc7a35435535075ea1a06c884c51519e49301e46e61804c381c4206f91400b97b1820130e9390413e0d40ce090364c2216732c8a703c83dc2009970289a0cf2990072cf3040269cd64306f92c00b9571820134ef721837c0e80dc9b12325f1ae39d18234fdc19e9f63110d616c8d670d46371687db607b4302e7ca90ba0f5cd646f163fbd88cf5be6a7fda8032cfe11ab306ec0d317f466f5cb443f2befcd5a2e022f743b09c33ec0320858666e262c3368ff3fe9fe08642300ed40d1d2df46aca49ba190617d04f46c0da0c4da25e96a510153cfb5f26326ac18912dbebe05586f1e25e6e0675c1156e6c9c6b2ee073807da8473682871be0d70e6db849374fb71329c47019f3ac8269ca4bb1293e17c09e01c6c134ed2dddcc970fe08700eb10927e97231329c5d81ef1c6a134ed2636fc8708e053877b50927e9c122643897019cbbd98493f4d81b329c67039cc32871b6ae01a7dad314c6a31be60198bbdb04338c4737cc023087db04338c4737cc0030f7b00966188f6e980c608eb00966188f6e9800608eb40966188f6e180e608eb2096618478e0e02cdca029b608671e1d8260073b44d30c378744309c8e6636c8219c6a31b160298632961063b8780b0f821db3ff10290c9c7d982322f94289b01ab1c6f0b4ad2f3acc850de07ac72822d28f34389f2566095136d4149bac11019ca0100e5245b500e0a25ca5e608ad7644a94fc005d78f8d21cb70378b5fb900c1bd9b618dc3024b62994d852dfc09cb077886c1ee7ad00ebd4ed99b1a1b805a1dc03e76350724fa344c9e711f32dcc17390496b031b12d32084fc5201bd16907ec6f3ab537f44fbee6f3dc3c1a64d89a5061ab05b0ed49894d8e2bcae9d76bdca9d7ffb58d82ba803279c6f6f5829e286ffb2ac20e0ab272fa2750539c9989de1ebc9c9eedab2d1216298da8608e07d97c964d30092d930ce6280073b64d30098768c960ee0a60ceb1092661259c0c663e80b9974d3009a7b590c11c0160ceb50926e1b4163298c301ccbd6d824938444b06b33780b98f4d3009abec64307b0198f36c824938ad850ce60000735f9b601276f092c1ec0360cea784c90f75e2a753563a8fe37b788e6653d85c850a1944b27de95a0088fb65c222f92bba7de9d489d384be92ac93ad2780b9c0269884a53819cca100e6c24c0c44404fa95fb19bc1f96b7c6d1d09d64b41bf512125567818e81ab0914446763d20eb76fb0a58e5224a7cc91f82475876936d727e04c058448911ee73fcdfda7f230f202ca644d897f98726e2e75a4e76852c63feedcc836d7e4e58ce936d7efe18f0a125991815ca75abf225ae139820f096ba3eb5946d70ee17b330efd85d012c793125ce8e9a927e8ec3a3c051bbd8f5b3f277142b714731d7b816cbad95fb59c2a10db20a7e1d30e4b6c466b884431d64702300ee529be112d654c9e06e015eb6d466b884451819dcf500eefe36c325ece623837b2d80bbcc66b8844d0732b8d700b86536c3251c6e2683fb3b80bbdc66b884c3cf6470af0770cb6d864b381c4d06f71f007785cd700987a7c9e0fe0de0aea484db86a9bbd096bb5370d7b144abe2c880922d4ec8054057d90694b03e4b06f42e3029bc821228dfc5da3fbf99703a38d972047e4c98c45549894b778652f2de328c05d10a6089559468b3356883f5bd1256ffc9fa5e0f009e7375262cd73b2151fe8e151e74bccf054c005e95bc1f96cc879e019cc21a4ab4c1cea8236c47910dce8c0128d752a2e4b36b8a4481c4b37a592696db90596067806d1d25b6662cbe2d7fa5cf2766645090cc3bbe0500aea7b63bb51a2447a6c23702d50860db90e9ea50b2bbc3934e799c4185f603501d3a80126d0306576bf28f0b5d51e1ab417600d6b89112991c5e4e7e014d1827dd7e09706eb209e7c050e27c1ae03cd0269c834389b319f08f07d98473502871fe0eac73b34d3849f7e124c33917e0dc6213cebc50e2bc16e03cd8269ca4e3ec64388f04380fa1c4d985a5eb5027c2714bb2439daa4097db567b5b478413c8c85a475700b48752a2dd41a0cd530067a0b3830cde4490fd0fa384d72e69bbf4af10219c2f4ab63e6414b0c8c36d844a98cdc9a08e04508fb0112ae1401b19d46100ea913642259ce94106753700f5281ba1128e0691411d02a01e6d2354c25a2919d4c100ea313642256c519141bd19f4461d6b2354c2290b64506f02508fb3116a18d731ef05a01e6f2354c259746450e700a827504285cb72bd5920fcf3152edc8c8cc093354a3f657184275222ecc3fc333bb905ae753b46e2302b53eca722b45db25eaaf3417de0244af0ad58e2d94b9eeafc783d52cffa2715c86781059f6c0b48428b2403f90c00798a2d20092b5064209f03204fa504c92777c7e7904c765e5c12c2f923ed01aed32871f16db7e5c658531d0a65ceff708671f8e6cf7503e84ea744176c9b7ec29e24b229b02f80bae4199428d5add32b99b729c67f6b814b07b0d5c09999aa9af39a61a1f30a9fe1599ca9aa39d92ccf2741e63e8b12614ddbb3f93337e941cc64d9bb08c03cdb269884431964308b01cc736c8249d8314c06b310c03cd72698615cc8b208c03ccf269884ed1832980b00ccf36d824938544106732180b9cd269884b54b3298f300cc0b6c8249d8814606733e8079a14d3009a7ce90c12c01302fb20966188fce5b0a605e9c891ec9416e23521e9cc7158e2f93ce405392ac357e130079092548b88b72bc673243f8c87a280b00be4b29f1ed00f049a9198247b677f2a100de65dbb78fd213e51da247d8ee26dbcdfb3b3066787926fc61fe7fd41f5e076cf20a4a9072b3feeaa3de1e91ff56a76f2f609f5752626d2cb0f28017bb60a5ec52471d3270b5a9c031608f576d4f1f99b169d66467b6ae06e3385753a2acef5cf097573a04aad814f76fc23144b2618656c0f6aea10466b61321690b86ace6b81a78c46b6d861bc6edccf70770afb3196e18b7335f03fce8f536c30de376e65500ee0d36c30de376e61b01dc1b6d861bc6edcc0f00706fb2196e18b7331f070ab49b6d861bc6edcc0f04967b8bcd70c3b88bec7ec0726fb5196e18b733df1bc0bd8d126e5ba6ebadf2565af8fb09e0ea0bc2626c2915d25dc0f4c4dba97baafc1b9e8e6315ae3dae64843b71932d5be1b35725b83b28c199edc41dc6aa550928a0eea4449bad411b6c276ec2228a6caefcfbc08bde65afe586b197ab1258eedd94689bb044fdfe84feb40115ba28f0a7f76462242a99151cfed29dd0976ea1c2fa17b0c87b6dc44adafa27c37a19c07a5f26c6a9b0d94db33335564ab619600ec8f8f767ba384a7e973a42b4646bda8b81953e408976270d5a287094f3e90a77be09affef3bdc0084702c80608af0615a7076dc2393494389f00381fb20927e9381519cee520b33f6c134ed2538cc970de0a703e6213cebc50e27c0be07cd4269c0343897307e03b1fb309677e28710e04381fb709e7a050e2dc0be07cc2269c834389f30880f3494a9c2d9c0bbe7287032b728514b3396e8f5289d2f319beae393e5e26213e95099b4cfe701ec24164b256fbd700e7d336e11c184a9ccf039ccfd88473702871b600b5cd676dc239289438ff02d6f99c4d384927e090e1dc1be07cde269c79a1c4793dc0f9824d38078412e7d100e78b9438e5c2ede496e00ca41c27225b8453174caf79c9269884ed2032985900e6cb36c1241c1b2283c900cc572861d6b4d2ce5f9e134ea8215bed7915a86dbe6a0bcabc50a2ec06ba3a5eb305e58050a27c1658e5ebb6a0cc0f25ca86c057be610bca81a1447928c8e06f52a2eca24199dad18f845525b2d9c95300e6b7c280997490980c7353e018dece8463c875ff9ee2dcf64455b039ee00c76af7353923b48a0e25d9962e7fb038ca772851f666feb51dfe4509fee9ddc12683133603c82683bf081cc5bb94d8e5fc50bcf304b6aaa06b205c7adb940aeba9c09adfcb84ffd55b73b02561e11bd4bb1d58effb949875abed929f3b4aba369f6cf6e85700ee0736c325b45c32b8ed40cde1439be112f6ba92c1cd03703fca44b54c7adfd2847d5b84764ad65e7b0a38818f33513fc875eb0825aef54d775ee70227087b2d755ee61ff353428a3351db259bd25309ea079f6ccf1e05288eb4aa45b637ee95a09febd34c8c0af477fe7895ac6277a654c57f683fc8cb805d7e4609136ef00aad33ccbbe3ee06e07d9e094b2c62c96c793d2894e7d47403d9fa0b9b6086f19c9aee00e69736c10ce339355d00ccaf6c8219c6736aba02985fdb04338ce7d4ec0260fecf269861ac57760630bfb1096618cfa9e900607e6b13cc309e53d309c0fcce2698613ca72607c0fcde2698613ca7a60780f9c3f6edd6f04479475c1096e564e3a147838eb71f33d1121f9cf99638d9b8fc3060873f6d4f3bf4cf140de30ce6f900e5cf94283bb1ea1dc033997f316201b2816006ba82c97a8d1e6071c0bf50026ec160971b57d47f624398fbd3ff06107fa58408cff5e2420a63e8c27cc2f6b700df6f99c8e472c06c85eb1fb111c971e233bf17256cffcca6023c0378d1dfed299008eb986405d27a80f28f4c65f525bea226cc8314734056ff93129fd9ee9f619c8db42fb0ccbf3291c9936b4a86b1277308b0d2bf33d12a87b5ce31b183fe0a58fc7c3af2ca11d9a06e7700f31f4a986d6a287caa6fb416cebdc17a83f945ffda0694b07a4406b41b00ca0f17b40a28e1e00519d0010068c436a084051219d07e0068941268f2bbd4ce72eba0bcfc5fec8a5b4e5bd62fa2423b09549bb23261abf1b9f2359f3e4b0894acbcff0700ad651b50426f4a06b40be88baf6d1bd0309e8ffc36b0d03ab6010de334edff01a0752981b6aba1bcc7167111fa51b2455ca701a8f56c841ac695716701a8f56d844ae84fc9a01e07a036b0112aa14f25837a1280dad046a884d3bac9a03e0aa036b2112ae1f46e32a84f02a88d6d844a38cd9b0ceabd006a131ba1124ef72683fa2080ba838d5009a7309241dd05344f9b52420d7ecc0fe100335957df230067339b700e0d25cef700cee636e1ec1f4a9c17030fdac2269c034289f33580b3a54d38f34289b316c8ecad6cc239309438fb009c3bda84333f9438a7029cad6dc249bada830ce76100e74e36e11c1c4a9c17019c6d2871b6ae012714c7cbf5302eeb1a0160b6b50966189775cd0430dbd904338c1b5bec0a60b6b709661837b6d803c0ec6013cc306e6cd11cc0dcd9269861dcd8a20580d9d12698619c0ede08c0ccb609661837b668026076b209661837b6a80f60ee6213cc306e6cd110c0ec4c09b37d0098fe594c8495a42d54588702ac5d6cc44a7aec0f19d62740d771574aacc96fe1ab5f304b5848912d98fd14c0ed66335cc2ea1419dce701dcee36c3252cc4c8e05e07e0e6d80c378cebe82703b83d6c864bd86425835b0fd4137ada0c97b073850ceeafc0727b51c2ed9234dc0296f8e02bc2ae6ab29d9f9e0636dcdb8e757ad53193ba07b25315b200da3e94681b3b1725b135f8a3195f7bb8daf974b2f3c9123a7064fb42346171707d6d1a271d42e949c9c649ef0276d8cf269c434389f3358033d7269cfd4389f30850cef7b70927e9981419ce3b01ce0136e1cc0b25ce8f00ce3c9b700e0c25cef6c0770eb409677e28718e0638f36dc2497a500519ce4500e7209b700e0e25ce5301cec1db73a84feddd271c3c21dbc5f1550073884d3009a79491c17c09c01c6a134cc26e0e3298cf0198bbda0493d06792c17c12c0dccd26988463a26430ef003087d904338cfbdadf0c60ee6e134cc2314f3298370098c36d824938c64906f33a00730f9b608671b7f03f00cc1136c1245c544306f37500732425ccce1a98a98c6186710473270079541820135a3219e428805c1006c884b50232c88780cee6d161804c585b20833c13401e1306c8842d2f32c82700c863c30099b0454606f95800795c182013f66e9141be1f401e1f06c884bd5e6490ef019027840132e1080219e4ef01e48961804c38b24006f97d00791225e49ace2d8bab4e3c31886c8bee4b00cac9b6a0241d552043b93368bd4db10525e9fc2a32948f01ab9c6a0b4ad2d92b6428ef035639cd1694a4f3aac8504e0728a753a2eccefce743143a248a193f86101e2e9cfcb185843d0864d3d3f704b0f7ccc4f2e025497592877da7f3bb581ceb8c4c2cf8899f71020fc90e62bd84bd0664d6fb2cb0de9999680648ccfc65fef94a56150832a13f2683fc10803c2b0c90093b19c920b706906787017218dd4504409e1306c8613c08f93bd0a8d82b0c90c3586d7b0f409e6b4b738374d1305973e31a80726f5b5092ceb72143d91bf8d77d6c4149baeb2a19ca4f8055ceb30525e9c6df64285b81d37bf7b50525e996f464282f00197c7e265016b9a57625538fecccd8663664d3e9a6b238cafd2851361728b9d5797d03c58cafc6aa70efae74ee54b8af922124db93e22c8070c1f6ccd8501ca935926dbe380514370b33618dfdff73d67802b0c6424a842d6bf08d32a6a496b8800ae3588071d1f6cdd49ea83237b6842df1ce54288f02a5751125ca660265aef3a7cacdc24b9cdb5599cad243a800be0d6cb1787bda62c6364624abeecc03054c0925ca6c0d4afd849d91b1e1be99a22fa888da6b9259ea0a90d5176fdf613c283043f3abb75061dd0f38802594585b09ac039d3ff1ddcf26b8d5a312b62e539e94ace1783900b9747b361cfd55f5309e7ab22740594a8972076093d09f66c00e9752c19b0ce0ed9f891581b9d5da39ff9d4c7d1c80b98c12663d6eeaa20c1f2d26d892e122db42a601c05546898bcf6a2974eb8aa56e5112afe8c4e735856fc82b1be05b9e89cd5de5b862bc3c2e70e195572b5460c72e6135872c236f0695f3721bcf88209d5e4b567b6c0c2ae52b6cc44a3a979e0cebc3c05a5766626733bcad335b191e236c9937a2c2f939f0abab6cc2393094381f07382b6cc2393894381b82cc5e6913ce41a1c4f913b0ce2a9b70f60f25ced900e76a9b7092ee244586f36280738d4d38494fd423c3b905e05c1b8e5347c2b84c7633a8e6afb369a7dd2194fd9b64dd240f029ceb6dc239349438df013837d88493f4dc47329cc780fae80136e1243d9d940ce7cb00e7469b70926eac4d86f3278073934d380786126777e03b0fb409677e28714e04380fb209e7a050e22c033837db84737028719e0b706ec9c4b603708a827fb59ad74a5aeefe9bb79e56bb22c7c4c6a166b9d43230df782c15ecfe2c0efb605bd66490f641910dde9d07cafc436c4149daff4486b22e70015b6d4149daf74486f20e609587da829274808e0ce555c02a0fb30525e9e01c19ca7e00e5e1b6a0241d492243d913acaa3c2213cb5df84cbaf80e4d935d01cb3235878e6c565373e0278fb473ff25c29d6ec9f65fba93c5b11e65cfd240c2ddf2c9e61bbf092cf4e84ccc37ce75e7dc95b9423294bdc996bd6c0576780c253c3e88c86715c3c3d29788cfc3d7166f0bb01d9b8969dac92d17203d20902c03df01601e6713cc30aebe7808c03cde2698843339c960de0c609e60134cc22a0f19cc5b00cc136d8249b8531c19ccab01cc936c8249b8b72119cc6b00cc936d8219c69d3aae04304fb1092661270619ccab00cc536d8219c686e2c300e66936c124dc698b0ce68b00e6e9f6c01c12ca16d01ea00be30c9b6086b1053412c03cd32698616c010d0130cfb20966185b404301ccb36d8219c616d02000f31c9b6086b1053418c03cd72698616c010d0430cfb30966185b40f900e6f999d8e128f188f82077b71942abac4d05b22d180fdf9689cdf638a84a06372e0bf7667b3b004bbc201323e1f1639ff87e85f2f17f6d67d7b660cacb8599d8360566f0fff6c138a5c0622fb27b4f43c2ea3c9943781358eec594783b69f07225aa5c80e56ca23b017ba5e21afc2b84095d03d9fa60ce5302be841270d714ec7706e34b0aca9cbf173bff4f717e8b19f1ee9c0f47a9364a03967ca93dbb1f86b1c36424b0d9cb28513664f13de74a9d9bfca50dce83e2104ea7e904a05d6ed3be0aa4078a90f9cd1f00ce2b6cc2497aa80819ce3701ce2b6dc239289438eb815ae95536e1243d1e8c0ce76a609d57db8493745c930ce7a300e73536e1243d268c0ce78500e7b5996edd27bbc50fe961a164e7b9dc08fce87576eede4968b15ba8b07e0eb05e9f890ee73cf6dfdc52ff5290f56fb0c993e6536677324ffa05c079a34d38078612e75300e74d36e11c1c4a9c8d80d7bcd9269c834289f357609db7d884b37f2871ee0570de6a134ed2c50764382f01386fb309e78050e23c1ce0bc3d1cdba012ce7122db06b5140c72dc1106cc034289b90798677267260640563a04aad81c77386eb5fb880c1ad949982d810bb88b125a3ba69e1dc3edcd13f25f9b59f206a893de9d8996bc845aaa9d3ae61551613c55fd72e039efb10524e10a2432904500e4bdb6800ce3e63e5b40d6becf1690613c596b3a0079bf2d2009ab3d6420df01201fb00524616b880ce40d00e483b680249c9e4806f25f00f2215b40124ee92203f90d00f9b02d200957669281ec0faa3f8fd8029270bd3019c89600e4a39420bb292017b1ea33e3939f434f5841229b43df1a74673c96c9535d8b024d6020444b3681e16260c58fdbb307621857163f078aa82732d17f14742e481867829c0fa03e692354c22e1032a8e700a84fd90895b0f14906f54400f5691ba1123644c9a01e06a03e632354c28e3b32a88702a8cfda0895b0224506752b80fa9c8d50091bab6450cf04509fb7112a61c3950cea1900ea0b364225acfc93413d15407dd146a8849d7e64504f01505fca44e3149fe314f631a6fb581ce5cbdbb79def89e25bf7935a25d93c91e34197c92b9938eba0bf0234030b12c8fa9b86013b7c757bda213cc884d40ec98e8d5806bce36bdb7f57267e2e3b697be84f2a90e341867edd169084850c19c875c022dfb00524615f1219c805c022dfb4052461ff1119c87d00c8b7284136772e96ba47db16bb559b0a47dd95cebf0b5d819399b7b8b02c8435c7c6a0c47e9b12615be61f7ce3036b6b451bc66f9519ea805b4a85b407b0ca77a88fc5ab64de395945ae90625620ecb4dcbd3fcef9940f0daf0ce1b0f0cec032dfb577d73ac202880ced625092bf67f7ae75845d7064bbd6bd051cc0fb9478dbd450beaba7b2f777ea9d84c3c4649b57fd09807e601b50c2216232a0bf02a01fda0694b0cc2703fa3100fa916d40091b9b64403f04403fb60d2861994f06f47300f413db8012363ec9807e0a807e6a1b50c2413632a0df00a09fd90694b00b990ce81700e8e7b601259cb04006f41700f40bdb8012b694c880fe00807e49ddfbb4dc5dc55ee26b608e753fe18a17ba5d28a56e47de1ce797ef10b6228448f9d91012e957f66c341dc603f86602945f530f0517c63a4026bb1f2ef3890c5f1f537300ef7f9938a227b9a5070343797a6123b044e61b9b6086f1f4c22600e6b736c10ce366fcf500ccef6c8219c635460d00ccef6d8219c6d30ba300e60f36c10ce3e985b501cc1f6d8219c65d937e03ad9e9f6c8219c6d30bff02307fb6718fee01a15c45f43b1822fec546acfd4389f55280f5577b37eb27acd693cd3d1e041cc16f99d83235d9ce39d2c39fc9fa916e04387fb709e7d050e27c01e0fcc3269ca4db4d93e13c18f8d13f6dc249ba3f3219cedb00cebf6cc249ba7b3719ce7701cebf6dc249da9227c3d914f8ce7f6cc2497acc0919cedd01ce7f6dc2497a900419ceb90027ab63114ed2634ec8701e0b7046328133f9338d085b4564271f7cc7e238a336e1241d3b22c3f932c0996513cec1a1c4b92ba828d5b209e7a050e28c029cb56dc2d93f94385781cc5ec7269c79a1c4f920c059d7269c034289f37480b31e25ce9af65af067f4306ef67b05f09bf56d4199174a949d40f5bd812d28078412e533c02a1bda82323f9428ff0556d9c81694a45311c9501602948d295176d1a04ced283dc239226467bce503cc4dc280794028313f0f30ef408959eef6c5035eec4296b2cbc52be19b7ae3944f31784d29e1c9392278851eeef795a1bd669b52613d00606d9689ac1f3f0f01ee1df25f3f76a21054af9a53626ea3605ee33ce02f1627a81b847113ca9dc11cd11699a8642577f45e1851de048aa596942893db212cbca718ee0932792b5b4086d122c700903bda02328ca718ee0740b6b60564184f319c0540ee640bc8309e62b801806c630bc8309e62b800806c6b0bc8309e62783c00d9ce169061ecac3b1a806c6f0bc8309ecf7e3a00d9c11690613c9ffd640072e7edd9130fc5915680c8badf2e02283b66623c3dd7fd5bfe7aca8c6165ae50b972c8ebe1aca2c349b66defc12c8e339b12a75c9559c492d9388574c08dcc36db00dbec6413cc306e58d116c0dcc5269861dcb0624700b3b34d30c3b861456b00b38b4d30c3589ed70630bbda04338c1b56340530bbd904338c1b56640198dd6d8219c60d2b6a01983936c1246c4e92c16c0760f6b0096618f73b6c0f60f6dcbe6d734f94778a2061f143768ae0316000b7d7f644e93f088f1025d941784b8055f6a644d941a0ac624b9dc795e83cb859acc29d2653c916bbc296d30ee92ea2023b8ec5c1f6c9e43ca3156cad0bb22236c768261bcd26b151ce07fc3c23efde74e75d3e898bbf37d2d1a4941673972c22cc5f0357d077fbce928302fd7337c9b06ea1b2de8ec02df4cb045669bd558c9fcfba84f15ece098eddeafae707b181b4d65a9b0a6b0b30892b97126b3381950f64543278e4d30296812370c90e7faa0becb27f264afee46aa4616c290d0405d4004a94c96f96a62bfb09d19295fd138195e651a26dcae263471eb20c6672b24d2a0603cb1c98c9c287cf1a9ee3ce1f5eed62c4abfa84850f59557f2750f8e467623546be92ed33609364e39753804d0eca4457487223ebfd43d9aff437f08f836d8219c67ea53aa00534c42698611c59ff0358e6509b60867164fd4f0073579b60867164fd670073379b60867164fd370073984d30c338b2fe2580b9bb4d30c338b2fe358039dc2698611c59ff0cc0dcc3269861ec2ffa02c01c91895679f07e76c21a27594f7b07507d1f692356d28a3c19d6c781b58ea2c4da83a9ebcf2b9c0fca183c0713ebef1c193b95d0ff36a1af25eb997f1cd8714118b65421ed3a21db52e54e8079b41dbdf6d531932e30243be2e407e032c6d8b4d5f490501e387e0fb0d4b136e11c1a4a9c6f009ce36cc249da034086f34890d9c7db8473402871de0d704eb009675e28717e0b704eb40927e9c9af6438b381ef9c64134ed275496438c7009c936dc23928943897009c536cc239389438cf0038a7dab21b2d696734d97602178262689a2d28f34289b215b0cae9b6a01c104a940f01abdcd31694a4eb38c950de0bac72862d2849cf702743390da09c690bca41a144d91f4c549c4589b2398b4f9ff536e72d76ab3f152c435368c9fa32d7b238c2d9766e1e4d38a3896cf3e87b01d639b66472d2810cb24c7e3528c5f7b205655e2851e680a267ae2d28078412e52bc02af7b60525e9e60164285b82527c1f5b500e0c25ca6d2083cfcbc4fe881c55095bc3bce1dc096ec5a884adcb54b5886eeb53507eef9b0990fdffa3208f0520e767f6148d15aeb2156e4f6590290984936ac8aaf10f808cbf5fa62787e9d1fad7c191ce0b3d2a4284f51280754126dcc0d0ffa81b3813b8818594205bb2c4cbb1654c493761594085717750eb2cdc9efb1f67e87027b2559ab9a0ceb928d3b3e3923fd08970422dd9814ee5c0468b28d166275d1461d367095d00d9f4d9034191546ccfc616615cc3390d144a25369d844dba3d25d949d89f009c8b6dc2393094381f033897d884737028713600c5d2529b700e0a25ce1f817596da8493b4a149867312c0b9bf4d38f34289f3228073994d38498f6726c3b901e02c0bc7922dc20989644bb6d681aafd727b976c11ee7d43d63ffa25405b4e8996e7418e8b0b9820908e16f8c8b0914d916d0832fe0a4a6cf59d0bdef1c17b3b57b0290e87aa5002eb0a80adb4652c339c872f9f0d2aecab6c41495a1d2243f90b4059610b4ad2aa1019ca6b01ca4a5b5092f617d12d1a006572952d2849fb8ac850f6052857db8292b463830c65773032b4c69e9331c3b8addf8bc057aea544d986c5a767f3d1722ea6c2f9986fd00b056768149d6c68ad3100ba2e13a3e8b9bee908f271863092d9e53a16c7b83e13edec9a8e3219273ec8d8d6d1b3a9d0ee0ed06eb0e72028d21dbfc8ecf42800f3009b6086b1303a05c0dc6813cc30ee317b2080b9c9269861dc6376338079a04d30c3b8c76c198079904d30c3b8c7ec720073b34d30c3b8c7ecfe00e6169b6086718fd96500e6c136c10ce3291ba7019887d804338ca76c5c01606eb5e7f456c2f60fd9e9ad77835ecd432951b663f1ee8ef8ef0c57d80ab7fb638c8b91bfec8d812f7095aca2834a36f3fd3c609f87d973242ea17d929d935501bae30ecfc43959dc2ebd532f2b33d509b7850ade7a60874750c2ebaab1c320cb04e0bc22c2e6e5995122d02f032f7a64584013768a90813e04803e2a2ca0099ba564a03701d04787053461670a19e85500f43161014dd89c25035d0e401f1b16d0849d3064a08b01e8e3ec5df74958cf201b9cde1fd4868fb77bdd2761ed826cdde75660b927d86bb984fd5f6496bb0a58ee89f4fd0c6362132a0a5c6c5e8fc23217fa28e7d522e7df9ec8b1ce6f8923aa3884f3a8789b55423d89126a33166f1c57fab279b827fbac00004fa604b80bf3ef9cb38455b8185706caf884b50132c4b341c63f8512710b60a35ee7b7dc9828631d39644b6b3e06767aaa8de7d2918ebd92f58f3500e5fd69366225dda99e0ceb0320cb9f4e89952f9d8aaf689aeebcf4ffbabbb3d8a8aa300ee067940285425b40148306433463812e144a7932a15024d248541a444de96e630b4d4b0b0ffae0932f3e98f8a2b2086eb88b28828a3be0860b2a881b522aa262c58a206ee03967663affe9dec4ffcdf71542d399b973b9f777cf5dcef67d8ecd8d4bd5779d4c8353fc1e49d369a9012f69d369db81f35e499cd4a09734ce7dc0799f24ce3c959c43e10ab9461227357c358d732594ceb59238a921ac699cbb80739d244eead01f1ae73ae05c1f44f6631cfa339046bb02ff5b33a8515bfa534324f01600bf5f1b38b18e4f033f04e01bb481136b5834f05600dfa80d9cd84b4b033f0ce00f04312b3031e8fb609915b806181f0c6234d7f44ecd2e9a1bab1700de43724317119f1868edabb5501f7b5852d6cf7ce6f3002d42cf2668577d4412e76c959cbb817393244e6ad0231ae7cd70b23f2a89933ae78ac6b915381f93c4498d2345e33c009c8f4be2a446eda17126c1b5f309499cd4785234ce5ce07c5212273510128db318389f92c4498d3f4ee3bc03389f96d99f4f6cc0a6f5e7ef815bd233ec213cae2fbfcabed1641771a3f722a9805df5b2d6cc37b15153fa6aef2e7e560c71b3a44e9599cc91d0b44e9536e07c5612e70c959c7b81738b24ce592a39c7c115f339499c792a39cf40e97c5e122735063e8d7339706e95c499ab92730b70be2089931aaa8bc67927706ed3910883d8a3494b84510575a5ed1a98a9b1d268cc6320d4f18b416413c59e7a5c215e1834a65ddf0e978597a44012fb3a6990d900f9b214488d51cc2f07c81d522089a39968905500f98a1448e2cd86063917205f9502497c06a541de0690af498124cea8a741de0a90af4b812486d6a6416e03c837a4401203cad120d702e49b41f411f55c5bc7e87c0185314a63b1de0dac6f31592f338933e9cb4cd779f2fd9f514f7c80a7f5244d832ae54e26757627eaa61e217b4ebbd17b9d9ef8d84fabd1a703ffae2022f9f67faca8be1efb32e828d92d099318169986590e986f4bc2d43896640e60be23099378cba2611600e6bb9230898f5a34ccb980f99e244c62db130db31030df978449acedd330af04cc3d9230896d5034cc2580f981244c62ad9f86b914303f9484496c8ba2612e03cc8f82486f10ab80d6f4da15a7b1c57e3254263f9693095763bebccd502af70631b738c79474ac35a089d9252cbc8d268ef74950596f4b4c917d3bb2aa06fb7b93ff2d80c42fb42be35960fc544e96a7592a53b366c309fd99244c8da9597300739f244c8db79a4cc0dc2f0953636ad62cc0fc5c12a6c6d4ac5301f380244c8da959a701e617923035a666cd00cc2f25616a4ccd3a0530bf9284a93135eb74c0fc5a12a6c6d4acb980f98d9cd4acc407235a6ad6bb6086c6c120867cb93a793ce69cdb6037197b75508d1bb446b6661387fc564e3a566299a4a563ad87d3fb5010b386624dbf89610116d82f17db57eeab158370f0c17c606e61325fd889d90dd25a151da295c81ad0b02d5a4ee6c970353d1c5c0be71cdfc259694bab2b934d7e91005a386937a553702d6d95732d253e77d2aea5abe024ff4e6eb6398d49a7ae07da23413c3ae50fd247a71d70ba7f1fc4e9debfba91c6d6a42b80f22893f2a228e54a7b2ad798c6019dec1a534b4e8293fd07a9b0c4124b835d0a25f647a9b0c4567a1aec7500fb9354588d53631601ec31a9b01a1fa83201f667a9b0c47e791aecc570f36a930a4b1c3d4283bd00607f910aab31077d355c0a8e4b85258e2aa1c1de08b0bf3261279881ce38ca51391fee52185cdb2e0d54e36ccd4b00f43769a01ae7c52503e80969a01a3b4e8600e8efd24035ce8f4b05d093d24035cede1c05a0a7a4816a9c27370140ff9006aa7116e778003d2d0d54e37cb94900faa734508db3392702e85f418d8c2af11b5aef67290d96defcd3260ef93713323d0a996bff359a787ed880fa47f35980c9d0caf48f9cfe518dc370af81b2f82f9372947d11c92a53e1af850d665e47cf7d230f8e167a6d28c09d9194442a5f6523c74e1828765612e76c959c0781d35d3cc470ea6c825b07379c9024cee92a39f703e73992387355721a38d9cf95c43943256706700e91c4395325e755c0992489334f256733700e95c4499d8648e35c0f9cc3989cee855bd805ebd5c7946ce24cc3994c7d45f24aac7153efd7b43af7092873c99230354e7d3d09982324616a0cfe731c30474ac2d418fca71d305324616a0cfe7314304749c2d418fca70d30474bc2d418fca715305325616a9cae750430d324616a0cfeb31830d325616a0cfed302986398981307809998bf8858466f67b11e83a6e0b11259a9233269ac1b3cebb0a44e2b2fecb2f202df86e35a71cafdf647fab933cd7ce3ba662b3d49b97dbdd0d4f86f2db32037d8bf033b1637d9bfddbd1ff2617de799d5a6debfebd657e1d75d673f755bd668b233ec22e35cd1181d2d1ae1d048fbd34d3c70d3bd579845763977b0dcd6867d708dba6854db6b61d043a1ff1f1c6569745f5df77371c75ac27e5b4a7dbe25e7b0d0efcf2d097b1a0e8df5ffb3cbbd546bc963cbce35456649a75210d94ab78eaea357c2a1e484cf625178c3a114bff5f1f8bc89df1ad1e9d3f8f75cf77a79b483dd1db75a7b041bfcded7dba523db9d18cda5a087a523dbe0962db3afabadc30afbb33a7a74237b15ff143bf1c3a1e1dd7c33b2d5f1775d5929f55bed0a68c80f5271c6cbedf617994aff69855fa2d49e27a5f65bae74664db18b85f2ec8fc87494cc8e892899d16c5775d157b1f7fb5ea72b91bdafed3c57ec42dd5f916affb773a9af3d8a9cfeeefb55beec56fab52ee8734ffbdebf9ecfcb945e8e4ad654772c06f3fe8f77c73d7ad87d313ddf17fbc5f6c857440befd576e10abf51ee4fd27fd98c4b71c18a0600 serializedProgramBytesString: - serializedSignature: fc8f6d30f9e28fa2f99253e4053ce3001153aea09ca537204de158d119f32de44a6b7d91ebbb655337d79fb36a5720f9b5a7def430fdd80272d12816d016b400 + serializedSignature: e274af2fb455b44b84a761f79b54a111d234fe86f6db23c6c30a9480882b13275d9e0bd1fdac9d32feb13c852dc60f4e92c8478fb6b5c11bc87f20856872760e programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/953e2e6278cc9314f9f2913d9bc25309.asset b/Assets/SerializedUdonPrograms/953e2e6278cc9314f9f2913d9bc25309.asset index 4576b13..283cb80 100644 --- a/Assets/SerializedUdonPrograms/953e2e6278cc9314f9f2913d9bc25309.asset +++ b/Assets/SerializedUdonPrograms/953e2e6278cc9314f9f2913d9bc25309.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5be9521b47109e15080921409ce28aed248e21c1b002e2dc892d202624c4a6b8feb82810687148094324e122af9037ca1be471f2333f52e574f7cea2d1eeccae56d2088b582a7677ae9eeeaf8fe9d9111193c1c77808973db6c556d83cdb657976ce5ec1d30adccfe06b979cfa4d5684fb4bb8e6a0ed21bb1730123fd3c6185cd7a15462651879c98ee17e4aeddbcc82e775186b41096b4fe0cf825e46270cda65abec397bc6d2c64800893d1a54e27506ca65c4e1bacc7e87568b98c2494c6a4ac3651b5a4ad476064c3bfd5eb07d12eb0cda8e614c911580e611518cff03578364a2db00bfa7e0af0bfe868432defb78fd302ff7b2ebe1ac5b7876fa1afc0fc78c086540c2f8db453b29d070ea127ceca88b768fd03721d4e1bd838f49f372b432e7f5980ea10eef113e664c28238f7ff9f028e3c5a1db25a91be4f5e375d28cfbd09cb0e5bce6d7a1d32f94b1df24c76315ef6fdebcf9376a9055fe0076926317cc44c18d8f59edeee38c0c761cc238c29999a669cb60a217404062bdbbe41b65b6c416a5d63b6e2405be57e89a831ea7441427734df1a7670a64ae005f4b70bd12d4af91e7a2f39d42cb3cdb803b8e3a640be04c2f5c54f660da02b8afc576e07a41f40e816d6fcf2091d04ddd63b680a61d45cea0c601f402ca05e2709baeaf89538bb85f87ba32c5b45710d596e17e45b379652fc2b36cce1d0e999c47793051d5db21cb51d32a4883dc9b64bfef3472131aa1f038c5ddb0d3a408f8874713ef30b4830c06cb754e63c10eab55758bcca4f565cb83607819bd12caed3b08ef7d1f6450dd6992a0a261fc44abc55a62262e17c65480587ea022bd1963d443c19ffd68b433834cbaa13764d0c7b072a785d063db3951c941dff0f023a8b36ef83dd867b05b8ce01bf30817cc820ac28804c24c8c67165eaeba5d5c614f05e50e997290aab1dd42e53c07d97fe56b4778d5606a35e70241ae990469c69bb204cdafd24ba74c2f719e057a5872ab25a1564b544538d920e12e99be29373dd4aa6f27c1dc864ce22768cb417f8b562bacdf048a39981be96569864a525a3dc2df127a6bb6843eb284fb42badc28672a1b89c9104fb4dac3b6610cf62904aca3725c713372b796b587b04d29bc2c88071582719933a0cd0ed4e20c7d6a67e8961146d50caae475134fa98927647aa79deed15be569ce4b86f0de3654b3b70d93453ca8c3dbfcb853d94b8f4cad581c51a5506eb546d56a4dca88e38ca3b518e3b09a70af8aeb7413b8ee53111f6b02f17e15f17109712324f1940aef8906f11e50713d29e13a1e92eb415564996a426419924516b2cbd6ae2865dad563bff02bca7b0c5ff3b84c63e33a40543bba2a3864e1a94875f3ec00be98be21797c16a7adec5bb0a5be19e481ed0e532d75fee0a842d7b0cc6e50b57765783d6a10af970cdf561fb00d6611a765f68b0f761e13bda336d111951cf76472645df855e6b4f93c07ee6d2e4bf0dd012e7103e5a765b5f6c596ea0d5918f94655f2bd2f936f3fa49e6ca9d7483b626ba901fb6dc0f243e09256e1f2810c97a70ddaef1ab7df66797b1849c754927ea89254e451dc708a36be4e2f4b7f8341398a1465ae39d558bf9666d9fab84ad2fbcdd0e93ce7d43e373be70bd12a7f4d8cbc62f9293c79e3bab8a170b7d9b4f2a1249d5049fa914cd21f1b90340b4b6e8ee4c3d64be0135f99db526ec115cb97dcdf754a3ca992f8814ce2c735c5e92cf09027dbb58f011a8fd3416b500cbe868149e1f7d4b3086337090d2c959849b9758655b61f41676338fb1978137acc0e007074bd69f5a730cdd42765279e2ca1de439320296cbc70fc099dac392fe265d205cba43e208a71891c5a80346d346e9ba433a855e7303662d27e67b64e6b0ae602cf70bb3ae436143ed3b4093ca39f4800017ce571c01dc3a2c5141512384bd00bd23922e09c2934e188184dcb0e24459ef6e1071ddd45dcbdb236eb28b2d6ed8dd72bfa290e5d017b588bf4f26e2fa14deddbc6f927a295cf282ca5126ae5213283a176f67f1e05331805f1974c5d434ed0c8a055cce9f4ec24e9cbd698983a1d808fb9e66ae46cb0bbcad3fb6a11a41e6fa773b4a80ddbbc4ed87a386c17ae7d56461f68c3ba404b0aa09937636b0b6d085b42802dd30a5babde8b69b5b5982ed02202680b3a418b73d06c02177ae18aea82ab5f806b51275c090e57f5bb008d6e99d00559a700d9522ba259def5d241aba5a574c1d62dc0f6a94ed8621cb6d7fcdd8c46b0b4d9585400eb512bc03ad10f9636cb8a09607dd60a87f4a6174b6d98cac605d83ed7091ba6176750b8f2bc3e6d3f5b1b1440fbe2666cad1d77002901b62f75c2d62dc086ffca72d5a679191300fbaa150b804580b527587d02585feb04ab9783754caf5eaa0f13da71b36408c07da3133879f6df8e99598700d9b7ad8864e2f193c6ed9236e7ec1100fbaed580b563341b10007bdc0ac0ecf4a2a8db25b501d6cb6ecd094c0613a527aceac0439d3edb871e035c4eacfb9959d49ee7a7f8950310937e5788dba330a783fe34834f27b2a2282efd149aa69f669cb8c8246de4f425e9a315937e86799be55f66f67f07d307cd344d66bc0b9ab7895b900a1429432f529fe87f8750fcb8683f0000 serializedProgramBytesString: - serializedSignature: cb72978190f58015651fb1514f92866bf48a63cc48f2e87f5e51f8fc9442a9717e67e1408259919ba856f43098a0b3263e55c9add0a545e8c9495236c092ca05 + serializedSignature: a13b10965522f94e1473a76dc3fe77809fd422bc6cbb702f57ab05aa7d3f09a04f3b9517111ddef9b8ef05d2a961152423b751e964c86e685cffc32365b0ba0c programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/95e1d3b8407bdf5488d728aae35c1b15.asset b/Assets/SerializedUdonPrograms/95e1d3b8407bdf5488d728aae35c1b15.asset new file mode 100644 index 0000000..9af4e31 --- /dev/null +++ b/Assets/SerializedUdonPrograms/95e1d3b8407bdf5488d728aae35c1b15.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 95e1d3b8407bdf5488d728aae35c1b15 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c5545f6f8e701a123bdb7d0433109490845543a44816012100584900488a4994213157bc3deb063c7de7b57ecbd977577d575775db7e9aabbeeaebbfbbf337726efdcfbe6bcf7eebbefbccce5ff0b1f7273db9973be73a697db2a8b593fa109d6af65ac88cd66996c292b67b5acc6fa6bb675acb6fed967eafa12566f1dd75bbf4bad7b13587a8c37f9cf98503feb778175d6c01aad379b589975ac14f78b5985f57781f56e8575c6afaeb3fe57584f85da582f2d657358215bccfa867ac710b14cbcd420af85b85da1f6d6ef596cab75b74228c503c912b7fa5abf8aad3b0de25eb5a5b47a6e055b25ccaab6ee9559efd4b32a4be65a21b1fdd7794cfcc1ec431f79ec2b8f5cc70ef2efd6f2eff6f26ff87c9a3cf68bf3f9fee0bd0ee06f4e687794f707d8c710bfded63a5e05cef9bb7f92cf0db4e5b5da1045d660791c228f43a5ccabe3d0bf9d3ca6c7b0379a8c6140563cccdacbe308791c2ef5bd26c1f047d98c1443218fb3ec08f41901c2ee00eef36b237dd8aee2b1932b1e3bd9f1d86a978cbfafe4f3a3e531431ec748d9d633bd1e90d7c6cae3a0187a8db3df635358d867ad305bd7c9f3f1f238411ef797ba7591ba5e0bcefdeaa2e23453caec2cc3d8adb9ae9ee7f7af93e759f298ed8aaf89f2b9ebe5794e9cfac4e37f4aa7fd64183780738b639b355164a978efea8af7aef2ddf36d8e6d1e71d903fc4f2b3757cabb31013bbab9ece866eb9296e17c2ea60e4a7e9e94d35dcabd099c73b9177bb4ad8d7c4ff9d624163b6feb13c7bd29b69cf68af5543b9cb6bdeceb6da733a72f4f8ea1a78adb1eaeb8ed21e55649b9cafe69f67948714e0772f8fb37bbe4f674c9ed29e5aa3c22274e3d0f90c783e471a63cce60cde978ec4ff2da81f278b00cb31773e601bde4fde9e177fbeef6c82d5a1ccd72c5f520196ebce5f26c79ec10e7f3ea99393e749e2b8f1de30c539527f37c8429cb8df6dfba7c616a0c99f36dbeed1b810e969c0edbe5f902792c90c74324ff7e2e3fe817871fc4d2e550a90b037160e9d2b19b3c5f288f8b9cba587549a74eb7244fa7501f29730f38e7c7bef2faade09cebbac40ea7e35e29b3501e97b8743e8c4e67abf22edeeba2cacc4e71be17cdbf8a6dfb3a65dbb23b95c8ebeaa8749b1bd6bbfd1cf0aed2239ef4b04cb250f9e0ade09ceba0d81eee7aee3670ce8ffdc3e189bfad773b2bdf82cff0776f07e7fcfed238753d8245fa2c9703ea19e26f1eb6ccff3b9f2f9f3d9245a63dddbbfc38105c1b28e57d26df5bc122cb31f51cb7ed0e70ceef2f8fd3b6951afdac70bbcc88f2ee2ae6cc7f6687fda1dddbf2da51529fc1cc99b6547b6458f89d5095bcb6da3eefaa745923df1902b80cb1f5db4f95a7a5f258c1f4e56c19e020d3a3d59e6c0e7bf0d7f2dada286195cb67d6b9ec2e0ecbe9d44feaaef2b1f5cc9966dccff26baabc53f6d7ca634df8d9093be4b58df2582d7553ed389937b3a3c1757e4c97f7ef04e7fcb9cab0ec3e1fcb6baa4da074d5c5e7312edb757940343fabb79f1d3f439e37d86cbb5e25b9ed75e9b08645f75fe5233de47153589f4c654f933cca3a68689864721738b774e8768a7c6eb33c6e91c7adf239d506bd169cc7cabf63e92ff50e8d90b2ef76e90ada9de26ff52c3f8e62cebafc28db8eeecb5db2d57ba3e5f3f7c8fbdde5f531cc99778c765dbfd729a7b92d319285db6f96eddd94dc01800178bff97a8eebbaf2a558aca2f9d5765b87e6f6ce71f278bc3cce00b27b4bfd33c2f1d65c073e16dce3e7b22eccb63147d91d559713e4b14b0c7bfa80e7f871870ffba3dd6b2b8f274bdb54bcdc00ce2dbfe939218aac536c4efd551e75aafd4e2fd56e3acdbedfe30c797e3ab08987312eccbafbebf29e7c36341ed8bd4d5e9b00ae9d24afed1fbe26e4f17b67bae2e73ed7fdb3800cddfdb3810ebafb3be5f5fb6ddd7bed92d7cf71d9b2cda5eb04e6c877d9b991b68626b8c2566dde78e2f23cf96ea62b2e3365bcfc1445d6f9fab8eca3d2ce05aeb8bcd01597599ab8bc48decb06f136465e9ba889df1cc041f5eb5c0c9e8171a1ee5f02e4eaee5f0a74d0ddbfcc19977d5479be0b894ba83f8ccbcb236d15cfc0b01f8c232eaf94c72be451578ea8fe4a95661f8a43aeead3ad8c2217cba3a3c955758c6ba2c8ddcdf4fa26129ef27555dea87eaf1bc0b9e5b77dbf8a22eb3aa6f5f57e3fc8f3eb99d3d7a5ec665fcf6391be2efbdd4293c2f1cf643e18ca6791be0efa4442b2bf8cdd049e81beaaeedf0ce4eaeedf0274d0dddfc31cbede5fb5496f657a5f87fa435fbf0d84d3013c03c37e388eb8bcddc559f19dc29cedbe2976fcf457faa9bac1a980ab2e9c3b6cf9993fcb7355df9d2ae53f02cef9719a2bdc6976b80346da7206aaba4e67797dba7d7d80927f977d9ea5fad5ef96cf95bb9ebbc73ecf5679eb7d2efef7bb7c05a4a9665bee05f7a06d0732679d44961fa183405c1d08aec1b852f5d3585c553ef6908bdf0152dea3e09c3ff74858ff6cd587a3c23c217caf87aaa3aaf8ed0cf47854ef2b425710679eeb48cae6c762d8ec254f3a9839f3a4836d3f18b4258aaca7e433574579e619797c561e9f96f26730677b6e86bcff9c3c9fe9ba3f53debf26ccbe6f36d043c9e6ef3c1687fdaa7df6823c3e2fc399c59c6da3592c9cafb8cb8844ebb189de2b933acd66ce343fdb8e87212a0d2b5f5c1bc33f5e94c797e451d62342735c0c547b385afb30565851ec0acd63ce3e15d9a7c45e96e773e5fdc7e5f902d7f3aabff715793edff5fc21aee7557fe6abf2bcc0f93c7b0dc8e1e7af876d0ba97ef237c0b50279edcd309ff427e4bd439d61b3b798b37da7da700be573f03dc840dd7f529e2f72d9b4589e3f05cef9b1d02557f543bfe2baafe42e71e9abfa4bde93c777c336e63c00de013cd93b4e99517d5a961fa1c3e43b4f8373cba7d3a3d5ffd5bb45f2582c653c03ce2d19c364ffefb028fd3aa11217bf22709d1f97cafbcf82732e7b5714fdde90cf2e73d9b64cbefb7e1cefaafee2e52edb96db328677b66d1b9e1e45960ae703571c2a9fe5f28ed4c4eb91203ef9f9115287e7c039d741f5e17ec8f4be7db8ebfdbb9cef8f5079f147f2f8b14bb715ccd937f8a93cfe02f749a6fa9995ee2bc3cf34ebf7894bbf952ebd57c9709f077aa8ebfc7814739651b28f98fd529eaf76dd5f2defebe61e444b233de5f1d752ce1a29772f38b7388e54fa7f2e8fbf92c72fc3e1e5aafedc2fe43b6a2ce437f6fdd11bece3a8f6aeb065db2454ea0abbd496c3bbecc473bff510f6cbf6f5912abe7fa7d1210dc8febdfefe48d5e7ed85e15a971d6ba51dbbe5737f9047253b8a1da3541ef08d7d3f43e637a317323dc33257d865b69cd12a7ffa63fc618f96e97fb41c731173a9dc3aa401d97f46ee47eb3353e574b9d45bd599d438baaa435630c73c985039b8ae9ee7f75f44de5fc71c73a3c439b7f15b5bc731aa4df81779f4d257ae64dfe5943d46d5dfa3f569af67fa3eed0d2c5c07d8009ee5c74ae6ac4f57dae165f472c956ef1dcd1c7dda2139fec1d47c947b9dcf3733db00987346aaef3f5a5a7073df2865a87ae008701dc6dbcbaef7d57355ae78ab92b6ee91bea6e6f7fd35817853b2ef72ca1eabd241b478ab46e24d8d47a9bfd5b3fc58eb8ab75a19de572ed9eabd3a67bc358f451cc39c631175aeebf73ae534c7458d333ec7aab6b2cece19f29d7ae66c0fd4db3a8fcbb0658c53f53335cfe2e0b0fd5ab97f73c96f90f25f01e7fcbe6e5cef7b79fcbb5386a3cea15837b2c8725b96d7ecc7f0bddc9df2da77e03d7eaefabe54db35da9846b4f4f00fa6ed5b1bafdaedaa3dd51083db4f4cdb9732fe6d8f72fec99c7d2dff66cebe967fc9a3eaf392fd2ba1261787ffc8eb9bc2e1859ac0355d3f4a2cdd74d7545ad8cc9c7eb8d9b67f82ec3b9aa0ca79e587d531c292cf85b680e754585bc1b5ffca6bdb809d5bc1357e3c56eaf62a38b774cbcc73c9dd2e9f7b0d84cd8fc7c9ebaf837398a71ccf1c7960b3bc1d40a7e3ed30f7ff5c3ef33f571827b0707dd1e2b5bff2ef6fc1fd0e404f754dc980fd9d35e0c8afbf21e3e04fce3063c681eeda2617f71365186f8273cef609272391b7abfcfe7d972ce5bb777bd3855f16bfeef46e47488da5ed01e7fc783273faf1c9b63d595b6cddb37633679ab93b7ad8cd7243f2780a73f64fc8323bd40ac8e3f7dff2688fea57dc03ce61b8ad58ec76b9ea5f56324f97efbc0dcef9f134e08b6de4f10c70ed34793c93e9cbe0b3c0b3678167f9f16ce62c83cfb6f9e76c71c956efa9b1cd7bc0393fa6c9e339f2be2a5b94df9e0b7438075ce3c7f3e43bef82734b8789727c3e670912d6f9f2bdf7c0390cf30279ff7d70ce6d6be37c3e74a17cee0370ae1843391fbae4b8f5ba08d828c736453f76347f5563cd99e01cd449b29f71da144b9ef69ae22afba14317bbb8a931d4771290fda594710973a6e34b6c46b94b90e73e02e7fcfe170984fda394712973f6f95c2ac356fd12aa0cfc2146184a9e5cbb12927582901a03fe189cf3e32ee6486f21d53655e9ee72e6acab5f6eeb9577874bce152e396a6c57f9c495ccd166687e4f8d05ff20ef7f62fb4cde334e7b62daedb896161279cc0256c14a591dcb121925cf7de35d2ea6de8cbd504ce491fc17ff1923826d645bad572b74abb5968ab5608d2cd7aadbe9566bf5176b4054e8b3c5ef52eb894a21f4d35044108f4604c195abb2fe5580a5660dd6f5f962a51a5f6c5669ddc9640bad237f6b0d9bc85658ff9c529659c15659856c052bb17ed709796b2cb5239f8c65125f96e67ea7c89269af9aabb6ae28a075d67995d0b058fcde2434ad10da1758d71ac51abe1ab69ecdb28e5b446891b6d75b7febc22c91c8f43aea17cf61d7ed257a2a9ae658d670edb3842ffe5f8cb4448c70f46d79fae03f6db244e97856444cfc1f433b93e1958f022963a24016725ccb6159a27e521441d0bb8d9116eafddbe69dcff2a2daa227c3a37ba0b0201cc397f4fafea0e13ddb0d4a739a96cbb2441562500cd3a281e5f232c42a092f26a4a5b5c9e68abaf18774f845f15d9c42fcf67395e239ef11d056147ece0810d3944aac5c6d09283c970ae5ab846a6e639658d74b2df1dc844c36d7ba576a05cc0de339ac52aed052ab4ca4ded2e6dc34228eb3b942ed44344516c2b14cc522aa952ea244fdaaa445d209b6e43b7a54b56fb6221c5559a266d52f8a436361892a572b59ef5249ee89070b6b4a2ef8e6ab347dbc7414f192486858ccb4d6c54cc75427a1d86546b478e9d46c57385ef88f9e6167c4b763e980116ca323d829d5becdefd50a29a5d6b3de19f209e5e3ddd9901ee07e8813c656014398a64198cd1176d568c5d23ab8b4e20a2192dbea22a773cb14d08939371f7de9eb4290863a77f7a8e5ab57d76ea7a327961eac21a5a7da8dc556f175a875afd47abe425442f97558d8cd142184db9ace37a293e5e34bfbbbc96aa9f61454478256b05fcd30e2ed35c4b3b9bff6d2b881c8e3dc89a13b9e183a60c9acb7df64d61193dcc7afe44e98e4be7e2577c624f7f32bb98b2ed9f0e7c5b417fa6413ee6e517fcdb2dedd6019b349d4fa788d50d73d133db9f48f3bb90c10c9259de93a8dbc69842593fd7471c72f0ed429e98eba0178d475c5040ff229b81be66d83fd7a5b774cf2108de49017c93d747e2c085591faf152eb9add6d3757dcad147d3dbcd7a754482fb48aaca399dd27a4eabbd83bca7b1789cda09a8436d1fd7c28d3d4f245f4f1893cd4baf154d396c99f76483360984860a950074b803db1726a7812caa95e98f0114910de1b133e3209c2fbe884f3c271148b6ca2fccffa8910de1917de17d37cb446f3ef0a5a79d2bc1f968b8cf19b3ff5c72467f8953c40973f89ecf044d2fc29dea1105d2254e1d68a44c735527de145d6719dd0825fe75ac41e42899e938dd5e56422539fcbe21fd0a1b7822f9c6d2532b6f12263cbf498b179cfd4f4d9ea0411ba596cb00c782096d3ecafc9693ed6656351729a415892cdf49b6407eb24f3249ba5f1d56ceeabbc94eb282a5611e14cc0c319a2cb1a44a1b5ad45b306bb1dcee5ad13a393b6bcc58cef67b959b8ea46cb813749c729b19ea9b7c2a8904eee2733e0831583ddb54166ffe893438e480e07c5911c28adc212c0509d27f10e0bde771ed1a1ce8bb722ab7d3e9bad16c9f018719953b263b7523c5ac9b6c1ae71b7bfb5c3fd2d5da70d6f07f2496f31db0d3d71c1c330c1937c0a1e8ea5f17cbf697c844e32cf6df8a266bf35ac9198da53fcaa3d0acb51a76a72d49f43de72d4d198f0691ae14fb4f2267c0c96140e88c747a27875062678ba2e8d7180b345df6fbaf5bfd67a83f734968ad49f2e0ac3706e906ea5f54aeb2f5e604f00cfd75a4fd803fb5ef41cabd3933bc5817e9d621c166f0769e2ed078ff1361e137eb046f882d6de844fc0e26e862eee78e9c0cb0d5e2dd920cb36676e982ea658a48bc1c326d187592e62ae41c46b3a3bd62aa98fb38e8dd6d3e9a21ca812f7d2c5f6cef522aff512a7fb63facfd4e9df11e8bf0468e825c44c2cdf9aa5c9b7421ef3ad2c9df0ee4cee40a9abf8f06544de2b3ed918b6b93a6c83c58d2da2e6da249e2f160e50d15c572e4f52013951a3579668e8d7b096ac90f1d6029f83d420fe0e575178d8e1716e3f152fbec4da5df1523ffa8a175f0c9d21b6bb4985f658052b07cb54176832554ffd8ab9585a28c0d2c22109a5853c9dcf89fe9fba16f5393c451509d93ce5f9aff0f365edadddad7fd14195178767254bc7f1623a6d83d8bedf26d7c033533e14b516ecd36fc31749429f26168a34914acdb17431092bb517694aed07d2bc95daf93a97151d7ff52deab273848454b8ed629ddb8adec9fc38223f997a0e1553551b44a65a2e33553beb1e2af6e1af17c56685759d67bcf0fe78b1f73daf2fcd13bcab05796e5fa968f7624e5e289c3cd576628e3e192b0096680a004fb5ea2958123a4c93847ef69884a6626a17f9557b1aa676b146eded6dbda97d0026bc44237c613b6fc2a7eb84f38c99efade1a785782026986fbc1151dde48d77d54e2873b514d78ab6826aff958b2b5baddf55d6b53221225d4c3b56f32bbc687910c6f6700ddb6e1ed91e8c2158ee93ed0c9d60ee9e47c42338ca58f44c9d605eff3a9221f52fbe1d87f7fad72c0cfb4a0df6dd1eb1cfd609e7c97c95df643e07937c945fc97331c9abfd4a9e87495ee357f27c2c124b3591c8a7187989c40598f0b51ae1251e8517e884f3f456a6cb9b4631deb510aea4dacda770bf46295b27a4d45b7f6f92656eb9a37f84f77954ca46b397747e08a667b94e4f7b95139f45c6eb14a5a20f8d8758c8367a0af5500c7d8506fd4e8fe81762c2d769847fed51f8228cd77a1daf7e31e2b51c4c90e757275a57bd705c8c69b341a70d3f0dc79b97700a31a4951aa45775f486740966c4d13a23788960e39b66215b2c3afc4ae50aad4da218f78ef1304c838d3a0d78ceb6b0b962b024c16a411186b44a83f47d8f488bb11cb9da6f8e5c82a95da3cb343b79537b29a676ad5fb597e924f35a471d436a1d7c0317efb58ec3b170eab1701a120a673946aad12fa923b0086ed244f08ccede22f8484cf8268df0ed1e85afc0846fd608dfeb51f84a4cf8168df0415dbc095f8509dfaa115eee51f85198f06d1ae1bb3c0a5f8d093f56237c8f47e16b3027dfeed7c94b31b58fd3a8dd6b3f6f6aafc5d43edeafda651ac959628a5b2ad74bb9673f795b52c237b2896f26f70ea65f2b152b7cac4ba95c172fbc843e51a79287a2bc02f3a69334def495c744b00e137eb246f84a8faeba1e137e8a46f8191e856fc0849faa11deadab37e19558649ee633328fc604f31d7122ea82138477d68a34962e3ef8cb171fd7c8ef0bf30d202ac4c075a9f0fd7087931ab8e6eb61d3a5f7d64b9faeb2bc3dd3baea45eb8d98d667e8b4e623afbc13375c6fb69b9276334437af309d8d91b5ee319ef4aac27ce04c8d0f3ce0d1c1aa31a3cff2e90335ba7c564cf8ad24cd67b179a425a2f39eef3eb14e784a7592571d9c1d779ebc53e4c97c7a049dae58fe5dab8b6e5eb73e8721756bbec95347aeb2a7ba759d2e1ceeb3e7697c36cf63be750c26fc7c8df0e51e85d763c22fd0083fc5a3f0069d705eade15b56f9aad634626a5fa451fb6b8f6a37e984f3e7f9ce537e27046ed209e78b942e8927071a860bde8c21b954836465376f48b660f9e665bac2820b52fd55f62cac0a91c1f1c4ec2553dd8a85ba4b172a87080ba0062b63a9756c2ee125ec6d58d897fb2c298ec5045fa1338a47e08a6698763fd52a8f25fd76cc33aed478c667ddbd79c67198f0ab34c27bf5f026fc789d709eb8ae6648fecd372ff3de3772822e1c9efd5c1b4f644719bada8109deed53f08998175de7d33d4fc2045fef53f0c93ac13ceef95e8eee5c950bf092ab9e8279e18d1a2f9cded39b179eaa13ce8bb19b98cf62ec344ced9b356aaff4a8f6e998f05b34c27778147e069632f76029f3d68452e699983bf2af7645e4967c82e66aeb1fef65e203f1ebd9125157e4537ab7883b75a25dc55b2b5e7cf72c4c8bdb755af46cd622dbfa5dcdec811c7b2a4de23a9c8de970874e871e52875ceb7f996839f077b658bf13d76027a6c19d3a0dda83b8e00b6e78ddde4b68e7e842e3ee7b97c67d17f6f2e6bee762ee7b37e6bef724e4bee76199debd9a4cafb5c74cef7c8cd07d1a42ed7b7b23740126fc7e8df00c8fc22fc4843fa08b5b8fc22fc2e2f6412c6e1f4a286e2fc692c3c3d1b2a69c24674d97605a3c123d6b9a98c4ace9524c8747a3654d7949cc9a2ec334782c56d674b808cfdbe2805d98fb3eae71df7e7dbcb9efe598fb3e81b9ef9309b9ef151832fe9d2b3f15bd2b313a4f6be8dce891ce55189d67303acf2644e76acc88e73446fcecd1886b30f4cffb447f2da6f55e8dd6257dbd69bd1b43ff0286fec584d05f8719f192c6881f3c1a713d26fc658df05efdbc09bf0113fe8a46f8148fc26fc4f0bf8ae17f2d21fc3761cec9bf6f81166bb9492ed66ec6b47843a745b858cb4962b1760ba6c39b3a1d54b1362989c5da1e4c83b7741a7460e1626dae181daaf538c3e856cc81dfd638709bfede1cf836cc81dfc11cf8dd841cf876cc88f734466cf768c41d98f0f735c23ff328fc4e2cbaf9a71efc940b77615a7fa8d17ae1006f5adfad13cebb47f847137c758fdc83a9fdb146ed468f6adf8bc1fe4497b6f85046f4398425d6a3756296df7a91efd48b29b6f652b172313abb84d99b8ddacb8c4badabe56201f20671aef24dde596d8f9d4e1463a76a89f25666ef3b972ee62ed8fbc9a78b71b372b9707da3b8d2209eaa0092f5a3b3957294198ee77a9d0a7c1f16419f6a22e8148f11743f26fc171ae17b3c0a7f00cb8c3ec332a35f2694193d8819f12b1da181de8c780813fe6b8df00d1e853fac13ce13ebe7f1644651baae1fd108ce12fb03b5cc5079e40648c91d2aff42c74b3b54cebf3a137da8dcbfaed850f9a3982ffd4697da3cfad2635811f195df22e2714cf26ffd4a7e422799e785bf8bc7ffa3649a4feafc5f6c61b5ae45fcdfcfd664d13dfff7717bfed7c2f3c745f17c7f1ba8e963e229cc79fee0d7799ec69ce71b9fcef30c964cffa849a67cfb322fc9f4594c6bfe69c0882a11df9960a668685588d521ba7545e9a2ba94ee710ad873981e7fd6e9c1b736f126ff794cfe5f7cc6ce5e2c76feaa899d2d1e63e7054ceb6fb1d8e1696483ac22aaf8a868de7623d1097a2f62467ea73172fb106f46be8419f9379d913c053a279a38674b7a31eb652ce4ef7521f31aa1fdc593ace64dd2b39af7a629b4124439f3babee7154c831f741af4d56ab050fcd52816f2dbb5fec4966fbd8ae9f2a34e978171ea12b98bb6179d5ec31cefef1ac7bb6aa837c77b1d33f81f3ef3843730c13ff914fc2626f89f3e05bf8571fe9786f3131e39bf8d09ffb746f88e746fc2dfc190fcec13c9bb3ac13cf7f94f3c82a33486ded309e6edd0ff36df70b543f9a781bdb743dfc7b0f39dc1dcd8970ff786fd03cc085e366b8d68154ac4880f31235a6b8cd8e5d1888f30e16d34c2f78ef026fc63cc31d3429aec942f092c6270b7967251c7561979061b2b0abc1af9dbb918205d9cd9c5cf04b10b45bd28f5ed2cb78155897d2a1a185c8d6d772af175c575ae9a810a877726d945ecbae6ec3c5d64e6e51ea7237e82b168ab63c1b72f825bbed9b5cc70011b5e19bd5968686f4a6f779ed9fa719d6349c8b19ef6ba80e253cc61da691ca6974787f90596a4da6349aa434249ea33cc888e1a23a67834e297584c77d2c5349f44afef225d213b57f90214debab0770a8a16a71951ef8e155368ed6ed5b05f3b5340adf00cd585eabcd728fcaa51938ad60a0d6b4107ac2dbb56b64ebdf8d7af74f4f8464d9d43feb6d2fdb54e308fc62e21ff1b477e8e39d47e1a87ca1be9cda1bed009171fde0af96cb07f89c1eee613f66f301edd353c4a3cf2f80a8bc91e9a986ce531267f8b69de53a3f93d1e35ff1d26bc9746f8c71e85ff1e13de5b23fc278fc2bfc63ca58f4f4ff903a6755f8dd65b4679d3fa1b4c783f5dd5c9a3f03f62c2fb6b84ffe051f89f30e10334c2078df626fccf98f0811ae1d33d0aff0b267c90ae8230c69bf0bf62c2076b84bf9ee14df8b73ae1bca81aa22bb8992e638952b07d87491faa93ce6fd855bcac04f669f91b86295d8369e7386f98bec7840fd308ffdaa3f01f304ac3e3c967a220f911133cc2a7e0bf633846ea5cd2238e7f60c24769842f19ef4df84f98f0d1badcd1a3f07f62c2c768847fee51f8bfb0c8ccd0a5a54616df4e48fe662ed83d81ab1d7321cc9ec7f06f2c8ac66aa2e85b8f51f4331645e37451c42771454e25f162cc7f74e1f17ade78ace93821a1a6e37f75e1d85f5d8c231fd9810bfe1f062c53078c173f599e00b110223f4b27dfded334d2a3bd8418c242ccd685d847eb028b84a7ab0de1c277bc797a2b4c93893a4db8043e9cecb52468ad09254b7c4b89ef9b96aa5d674aac33beb786f71d677242bc3fc50943a40fede0756e8867b7bd232c8b163efa756e5dfcf0d3bc10af943a553a64d189edae1af446ab88a849c3a3260d7380493a07e0ed1a3ea5d4cee0abacbf1aa551951e1daf2d166ebe2edcae68b835b210f012763b9d3b0e49b53bce16bd46f509b8e3e410afe638116522ce380571c668a1a35f77d671131fb25a9d426ef67376b6572cf654aeb4ae148abe38bb67af2101a653435e3f73314d901d116179a2fa61d43be8520aefe43ac06f2757474cf274bf923b61920ff42bb9b34e32af6d1da4e9e21291e7a18bab0b96291decb329b41fc663865f1e5d31c933fd4aee86499ee55772774cf26cbf927b6092e7f895dc13933cd7afe45e98d3cdf3e974bd3195e7fb55b98f4e32af1b2cf0d9e7d91753b9c0afcafd30ca87f8a4dc1f53f950bf2a0fc0242ff42b79202679915fc98330c98bfd4a1e8cf95ca14f9f1b82a9bcc4afca43319f3bcca7cfa563828b7c0a1e86b128f6cb6238a672894f9547601582a549a8108cc4842f4b82f05118ecc3fdc21eadaba8a75ba721be3765eaa79427e3abd7d1abefcbe3f1a2f138b131585c1ce1372e3230173a32092e3416537b855fb5c7e924f3e757c6433aca0cb7f13ac17cb9c3aa78047f8d0b9e80e53047f9cc61f6c704aff62938138bbd357e632f0b8bbd529fb1978dc5de5a9fb13711835ce613720e26b8dca7e05c2cf62afcc65e1e167beb7cc6de242cf6d6fb8cbd7c0cf2069f902763822b7d0a9e82c5ded17e636faa4e72ba75bad16719350d53b9caafca07e824733faa8e47e59db8e0e958f4d5f88cbe0331c1b53e051f8425913a9f49e4602cf68ef11b7b333016f53e59ccc40437f8143c0b13dce853f06c0c72935fc873309537f954792e2678b34fc1f3b006f3169f0de6f998c65b7d6abc00d3789b4f8d0b308d8ff5a9f12198c6db7d6a7c2826f8389f821762288ef7896211a6f1093e355e8c35a07624a1015588e138d1278e25188e937ce2380ccbe24ef69bc51561a04f4902e8624ced53fdaa5d82a97d5a12d45e8aa97dba5fb5976192cff02bf9700cc8994900b21c53fb2cbf6a1f81493edbafe423b144bed367225f81093ec7a7e09598e0737d0a5e85093ecfa7e0a330c1e7fb14bc1a137c814fc16b307fbbd0afbf9562922ff22b792d26f962bf92cb30c997f8955c8e65479726213baac0845f9604e1eb3026bbfc32598fa97d7912d4de8009bf2209c22b312657fa657234d66f7295cf7e938d188fab93c0a30ae3718d5f1ed598dad72641ed1a4cf8ee2408afc5985ce797491de623d7fbf4916330956ff0ab723d26f946bf921bb05ebb9b7cf6da356245eecd3e8bdc264cf02d3e056fc27aedf6f8ecb5db8cc5dead7e636f0bc6e2369f2cb6622c6ef7c9621b26f80e9f828fc520dfe917f2760cf25d3e211f87e59f772721ff3c1ee3718f5f1e27603ceef5c963079617dde7332f3a116371bf5f1627613d340ff8eca1391953f941bf2a9f8245df433ea3ef548cc5c33e599ca6119c35cc3a0df1ef8d9ab0b9e70a39af247973511ed131d34e217f34c4a79067312f1b7c26a22f36b5fc745db4f3d8792c9e68e7da2382cfd009e6a78f872297ada89f8800d270bf3a13cb7f9f4842fe7b1626fcc924083f1bcb1d9ef29b3becd449e6cf3f1d4f6c469936708e4e305fbef54c3c82737137391713fcac4fc1e761909ff30bf97c9d64becaf1f97854de810bbe005379af5f952fc412e30b494a8c17e902e07b00be180f932f71c11763b05ff209fb120cf6cb7e615f8a497ec5afe4cb7445e970eb34b494b5ccea2b5514795b69f56adcc5e36ba278ec1f615d3c3a6045de2e2c6f7f3d0979fbe558e4bfe137f2afc0d47e33096a5f89097f2b09c2afc2eaac6f87340b3de788d322cb598ad91c7668f3eea18b19dfbf75b388e08d32ea33c592d002eb7ea175a746b834bfa2af19e9e620f3a7a16b71c7af65f6de06de3e01763566e53b3a2b4f6bb672a95547e389ce4ea0d5e2ef02f9ad987ab187829d400b9a9f9cdbbc61af734bc07ac9a358dc2db7243609bbb85c27bdb004febc373d3049258c2f265d2fee3a99c2c4eae6bdcc92e375e1f03518e977317f8221da36e55aefd8b46aad4c71b5e51bf522ce6d6b4be426c96e6dc3efe2d793e54fd76256bea7b3f220979590b96de73c1163d5c246b796ce188277a2a515f89617cb766396bdafb3ece0b8e26fa6d881a492a905b6fe632e7cc78b6dd761b67da0b32ddf65db22113b1ba465fc6c4b8b59723d66c9873a4b76a6383f0bbfc3b780acb2a46e657ce78bf0ced20d1ebc1cb2c3ade0654993a866c05c8f57b09297b7dd8051ff48477d665c696321b3bf7e6642ae762366dfc73afb16127a15bf7a8c08865b6557872b45d0956c9b4887fa9c249158bd09b3fa139dd50746b51ad7b448d8626f856adba84a637eb54c128a4c1789c7e6cd985d9feaec3ac273cdae58dc71d6ed7412ec6b4b9af3817aab3ce04d1d3f35c144e2f9168cc72f743c0e4d49994d5d9aefc16cfe0caba778f301e5c37c7fa3322108c6b3578ff062d9ad9865bfd459360db16ca9489f55b26e6237b555ab65994cc5e511b141d346b90db3e8573a8be611e6be2a56eded7bd632fb6324c9b3f476ccd25feb2c9dceb0fe775d4ee1b400ee96c7992c10b15c2f5a43655689bb358956dd8159f5793c6d0267b8b086b054c442bdf52c4f87eba3947e4e19c9b3ec4eccb22f7496cd8e9973c6d72ac0f3d0686dd64473cabb301bbfd4d9b820a1ba1ddfd27caea8d770412d59d3bb1bb3f6373a6b47b9ac9d293e5fc0f36e77295021b8f3565272da39f7607a7ea5d333c7a527cc17dc3acf973ac7cb1acaf262c1bd9805bf4d565e67d7c366829cce5bbe90485dea3eccaadfe9acaa206e7f368a3d4df90e8b76fb7299c82f2b9bcbaee4f4a824c2e97e8cd3ef759c961273c2dbe9d109f9e7f000c6e16b1d8759682ae0fd096bad87544962efab19bd7ea69794ec987e10b3f00f3a0b0b3c5a78b8f0e81a24465ac2de87307bbfd1d95b44e8d90dcc7b6d3519041ec608fc514760bec7180f7f11de84d87e04b3f54f58cf97d7526c9e782232dedc3951fc72bdd8f72866df9f75f61de0a345d228ca28bec9e43ad97f805b5512f1ac179b1ec36cfa8bb73873fb27fc8868ac544659a63c8ed9f757cc3e2f7d11b09608eff291b4e8ad8e64b5489ec0ecfb5667dfc8182d92128b3085964f625a7e17bdcfd84b2c1427140b94bef71466f5df7456e39f082f699e0202f388f027db7829d9a4ada125d69e7a1ad3fb7b9dde5359ac967c811873e6bdda55b2755b2d36d28dec5789160389b7639fc1ecf901ab57464f23bc976589a86b71af4c648c8ad751d625d1c267310b7f8ca7ef45df2f51207c4ff543546ae32b95bd11cf6136fe1debf98ca77f291e2b13cb3112b7f479ccd27fe82c5d1ed352da3108ead189bd188d9f121f4f9d6b905fbf80d9f74f9d7d7949aaa124bbcc7811b3e25fde7ab0d4fc8975cd33282a352db154cda07809b3eadf89941cb6ef155b0faf65760ddfee8d6bc9d92e2f6316feec37de5a72e6cb2b9855ffc1c6fdf45645aedc68a976daab9845ffc5fa0863b7f9e32907e3e939f0debb90786ef91ac6e17f3a0ee33c705071aa3e4692acf2eb754c63fef1ce088d47c72ccde9c651dec0340de9349d1ca5bde2f674a7e675a2ee1cee53a6482f6f62b6b4d2d9e29e618aa59258f586c46a4689a786b7302b5bc7632556278e6565aaebc36f6356b6d15979a8e7dcdcae1d45de8d9c67a5befe847b6da494f098a2179bdfc16c4ed3d9bc92d1f59cabba63b4b133c8255e7f50ef78a1f22e46a5ad8e8a7bf6840ad18baf872dc3fc20393efe1e66593b9d6547b6707c7b89e7447bdbdfc788b4d71171b7f7bdd6735a3217ff00b3b483ce52f7fc85d92256ed186c04fdb8b617e4b3bc18f6e96a0efc2d2f167c8859d0516781be8dcec3f4de46b7edc3ae272b863ec2eceba4b32f9725d24657b523fe45c8f04cc9e4d9f0316643679d0d0b63d615c29f4573eba83e4b87e711d827d5a2e52b8995a39f60567789276de9c34f6c6e50ecf6433beb5f2824be4725a4d8fdccb5e21d5e1bc9e2dfa90b65377b5766739e9ee9c8ffc3d779f8d5566ae71e53d29c7bf3a596d125ecd7ca2e52c5cf18f9c950bbc80bad63eea59cb385fc2a99a3a8b8cc1484ec59df7c896aa6e5d595e22db528359615ba722c139464d0bad836ad42169986c4d7c8a12c8b341f28dbe72cedca6375b08cd55659a3b88de313f4a6d85a74e3a1b5d6fb50df08b23075e874b7052c966df310dfad64b508c6fe5035bea42266c8eeefd9b843de5f085035be98e296822c4027aebf70377b5a6b3db3a77e7e66c96c97d62a9bc748774a6c7c19f61c51b3abb3c0d973bd548e8c016c0804423ed55321ec4189b09b75a28aea05a260e7024a45e58b4f292a641b0301ec9ef661603d2981f562f6677fb35978165690c175eb1406d78b125c0f0d382eb0c67a890f3f3789abe58180b68685a1f5a6f63667f29c67fdae94f3fdd4fc16dbeb82002ea373185c1f4a707d447db421ee622108f02e0685425f4a789d40522d74f4b10401d384c1614cfd2831750098c2535783806857df30a2fe94887ab370c516ce64e322d68b9cad5eb60e2b0282eee31161740328d1b515e81a0295bdb7e912863390124e3feba4b0b9b9a446e0ec994145a2bc6c627ced002f2197c83ea62000dc0bf2ae419400db83bc8babc907258300e8f31e614083a933f742311211de87271895d39dc08786a4ca87d4629d2000baa35718d0504a407cff4a557b9fcbb608ab9b9aab9c7cee70b928f78a8487950b7fabb2020c0244fea320a65342e43d7c101eef1de3cbd82b9ab7922d0f78bdbe17e82f1b4689b28bccd394bf6d9525e652d1f40e02aa3d206f1b9eaa86376f47c2c165d5960c52cdeca776617023a81bde101c5ca33d5334c5797d3fbc663108f0b6833eb29194f03a831235bc04cd5e1c1904507b41ed6c1475b7f52291fc36ba76ea99633d5e2f420a02b035adc2c046a7b623d1395da63c60f95915e8ef1f43df6dcdab127344d041ae68bc9c16869641ed6d73c5605b93083c3c0124bc755a835587abb4c20b02b8af00b8b194e0f603c934a883237c468782358e7e28ceee5cac156282dd0e980ebc6c7caac0e1bdb25b5865400a8341a3c2e02650773b1659d066b3f8b7eb0c02c03344eba05d9a4bb87b166ae23386bc51c7e73675657667409db8da282b2e8eb94e7cc989719aef0fe72a6524dc319411b380c8887b9c3dc3f318694682136e32e2aaae67f8ece9c9f0308b2ac353d99111772530c353cd2723a1fc24c353df4486a79a7f465cf381323c4d82c9f0dc25a0d3199ff6901131529611b51d9da11dfbc8d0f666672063bc195186c83390a1838c18dd6f19090d6a65781c62cdf054f887a7f0eaa7de66f329bc99ff9fcfaecd1e695dcae210f87745f88f5d13c9a6ae89ac16d3ebb9d9bc7488be29d144ab3ee0d26150840ece4ff4a81a874e9b0e8e3ac97ef1189848bd640898f132d1249c3981c4391be0cc3109676e207196019cb926e1cc0b24ce1301ce3ceacee3d5324f7462b5cb5cfe58f0f07dc1c2f826a5c21bd7a3fe08d55fcda6b07c3a9c9da9707e0f70e69b8473522071de03704e3609675e20715e09704e3109e7e440e2fc1dc039d5249cf981c4f916c039cd249c130389b308e03cc0249cb981c4b91de09c6e12ce9c40e2ac00380fa49e5914ad15e44ce893e85076a742791668011d44bf2c63b578a44688c1379dc8a603994605b20d007930f5e454d50d1c6f973c7fbe5e3c1bbc46e61c90d86750821dca601f7dfc635441863b1cc09dd992392914c7f3523294eda850f60219c02c4a945d25cafcd4f7240da382b709f8e1ec54c09bb20f75c3dd0de0cda184d7374619ee4cc4a4dd1c64c9380492f15c93604e0e20cc5600e63c9360e60510e6ff40329f6f124cc2760f194c063c73814930730208f35fc0330b4c824938264906f36700f310936012b6cac9607e0b601e6a12cc20b670be0330179a04734a0061a6810268914930a70610665b00733125cc71126695f5509538aab9b67066e36a4f9bd792f677f6a4427e12405e4889bca340be414c5fb5a7d3da134683d74eef0cf2cf252dd9d9e6dcbe9ad0fb7650a184fb921d4689724c44822f15c2e631f5edc059d67fee9d9b447770138bb66b33296cb2dcb500c02e4a85dfc657540511e55090051453a21ca2c902e2fd4a0c29da9d54680f005e5a42eda533c56aa15ab946826f33ae3efcce5753a89523f67a9ce015546d80972e4dc506ad13adffd532f05251bef3ab29e893274be8270184cb528170f23e87f00980f070faadd0ed815f75747f7d3ba803bc8f0188cb4d5a30403a2f8e0ce71850c81c61124ed2895c643897029c479a8493749a2119ce2a8073854938498782c9709e0770ae34679a21e10811d934c31a8072556a165a65a77e86c79754f81e01a5f851e64cd30a6257710ef0c4d5a94009e7692eb49a87f3e562fb75d64b5b5251b72443b90d78e51afa210cd8f9bb9a6d14e8668985f71ba5a879d6b1c21211b16955f2600ea082d905c02c4d45cf50a3d812a4a179b042ed4aa08eba7e4dd2c2870ced6e80766d2a86dae25d7d41987f92adbd3808c02c330926e1203019cc0300cc729360124ee922833909c0ac300926e164433298e301cc7526c1249c064b06731a80b9de2498415cfc3705c0dc60124cc2295d64304701989526c1241c8124833910c03cda249884d360c9608e0330379a0493b0054406733480594509339d45f61f799b0b4758be93cd855b02fa94aa5b722ea7bbdf9d301725eb751f0b7cb5c6249884e53b19cc1c00b33615fdeebcb773939810cbb7954dd11404327cfd01be3aeacf8a2b7c91530cb9b0f042fe20cfe9781d003d26559f7edeb7a6c59c0810d6a70261fe3e87703a40d860767588b05793ac3a742aa80e35a66ae25678880d8e12910fae910d5aec003eda64cea4eb20aef53d10a0dc94aa523cd68ef6419e54381500dd6cd276665302d9d5f11780738b4938270512e7ed00e756937092ae4727c37901c0b9cd249c930389f37380f3589370e60712e75e8073bb493849bf7e4186f35080f3389370927eae810c673dc079bc4938493f264286f32880f304ea8a7c7c1fea2a12aaf14f851156e4175201cd034077a462dbbd16f8fa05d982d31a00ef444a780359bc6b799d0bfb0967777c4d05751be83b3ac944a8841d206450b702a8279b089570861c19d44d00ea292642252ce1c9a01e04a09e6a2254c2d91f64502701a8a799089570649d0c6a36807aba895009e77e90411d0fa09e41093597450e7a3897c1cc66e14f73da86383ff4e9fca670f85bac25a246ab7aff092321872a12f802211509679ab3d830889b494f00fe7c566a96bdb6c0aef064f87e049e78b6b96be208a72c920d2f7f00d0ee3467fb49d25d41c8fcf45800f31c93600671cff83301cc734d8219c43de3b70098e799043388f348b60298e79b0433887bc61f0d605e6012cc20ee19bf11c0bcd0249841dca37309807991493083b867fc6100e6c526c10ce29ef167019897980433881b019d0d605e6af624f020ee0fdf07747d5c4689b78bc46befa954255af1b6ec4aca8d80c83e24ca805fee4af516d1f1777b047123a03ce09397a76a22f822d101b7d1d5613cc77aad5e8418e489e08380af5e410974bfa889bc810e5d472a74ad00ba2b29d17516e8ea40b1325b24e21a4a8f23db48b217c0761525369e09d953c0c2e04a8400b5ba686ef3a8107c267825f5af00d2ab5b72a551f07700e903505e938af11efeb5f47d67b97531c077ad195fc7b08781eb84c7da03bca49e49b683ec45a0eab3dba4ada149bb35c83c7520c0799d4938730289731ac079bd4938730389b314e0bcc1249ca4dfbd24c3792cc0792325ce112c72fdf05cb685f1295d4d4c2d3928b45e2f1775cd2201d6fee650556a9a926415fbdea0ecbfc9a4a5325302b97fe75f01ce9b4dc239299038ef00386f310927e9a7ecc9705e0870ee3109e7e440e2fc0dc079ab4938f30389f34580f336937092ce4122c3b910e0bcdd249cb981c4d90870de6112ce9c40e25c0d70de69ce479e08676e9255e1af00eda4bb5235bc562cda3b4d96e4998c7f7f75995ca45d2e166957047a786d0df0cdbba99767c3d5430d966db5a21fb4d4bacadbef64f08651c1eb01e0dd63ce3296204e2f1c0a12f6bda99877a47691b5f75cb03d503d14f4cd27cb815fde978a3d175ae0437864f00e06f0ee377745106145886c72cc6d00ed03a9f0cbc9fb905fde09e03d980a7853530f8fccf31e06f01ea284374cc2abb21ee2a574ada8f26043bff3e56b29db00603c15e03a507e3f6c3a60c2112232c04703c08f980e9870fa0219e0d100f0a3f435d00d9a4d7b8b2d2665ac4c2ab44eecf9c507dd82d7acec04f2dbc7cc9d614c981190156559c04f1f3767d7ee202e109c00bcf40933268395882a568d48fe5c5c352d5ab29deb76002f7dd2a4f921a42b89c8f2d35c80f3299370e60412e71100e7d326e1cc0d24ce7a80f3199370e60512e7a500e7b3a9e80b8daf5b3927900b5ab70398cf990433880b5a4f00309f37096610b7f4690430f79a0433885bfa3401982f980433885bfa1c0560be6812cc206ee9b31ac07cc92498416cb1af04305f36096610c7dc570198af980433885bfa1c0960be6a12cc206ee9b302c07ccda40625e9b83b59837218c0f9ba493849ab4764380f0338df300927e96c63329ceb00ce374dc249baf0850ce7c900e75ba9f878f324b6af7dbcf91a1646f8762a5663c61e179acddc9b04ccb484d68b3d4148c7db1f0d11413e1df8e93be6cc8a274cf264b3e2cf0428dfa544399839e78654c895c3854cad17c6d112fa2819d8c301d8f752b1819f025b256687340a31e1f921d12afa416c33cd0578df6fc9a90c299bbdb4830ae57f4191f501fdf4b002eba122018c6f8fb649be1ef6d6d5f2f3e37ce3c932eb6ffbfe3ceb58618925dc3391ac5ad50100fe3035dfd998e42ab6825ca5fa01e0fbc89ca53241cc35bb805cf3634a94bd62a0549692cea3cba5aa7f9e0b307e62f6e6bc84c31e645bfe1d0af07e6aee321ac25178b219a0ff0179e92f52910160d5a6700640988f926500ad81877e46bd7df412d9b7a4961a1608cfe4c93e7855a16ec0ff7e990affcb6ef6c172d135626f5215f4ad281f07187f453d62c481cd1101b7e867c60ba960e60398bf4e45fd323b4a2b3dd8bd9f6f00949fa7a203396f9feb40ae0408bf4845871cf7c6b9a28c6e124a2cb45e291389bc906d165dc6f5d63d5e41aa6341deae623200fba5398b5f823863ee1080f237a9584f9c97faee0c323f6c00f0be326987a4a9946d71b21d92fe0d70fed6249c530289f34f00e7ef4cc2392990386f00387f6f124ed2bd8ec9709e03707e6d12cec981c4f929c0f9079370e60712e7a300e73726e124fd8a0119cef900e71f4dc249baed3e19ce3a80f34f26e1249d674c867325c0f9e7540ceae6b27de9633a7301bebf98347393747353329c63c180c45f4dc249ba24900ce73280f35b9370e60612672dc0f99d4938f30289f30280f36f9438db0b011556b1638ffc70c9c19b89d9161435df53e21ac3223b7e9d130aeca9d8d5e26fdee7de2444ce1580b95925825a0a6618cda7823d11c0fe213573dd7252df394c363fe35d80ef477366b61356d0c9927d35c825ff9e8ab1483e90369ff1c1313e84a6bec31ae421b3538137fec39c999741dc4b6622f0c69f2851f22f952d11c549395353abb1791b845fa6264bd6ed814ffed3dcc98141dc1ef22a80f65fa958871edf08796e20b7e87915c0fcb749308338e1e06300f367936006718b9e9701ccff980433885bf4bc0260fed7249841dca2e70500f37f26c10ce2163d2f0198acb5413083b870ea5900336412cc206ed1f31c80d9ca2498416c587e0260b6360966103729fd2580d98612663af3bbb08fb04d44b6b06f11e80449a3c4db5b8337b277335fcc2b262c8ed2a8405e0840b6a504394c03d2eecde41d1d35ec1031845117757e072160b2d91dad4146d08e12305fe007bf64592847861a45620f5e97717700ae3d25386fab2c82d84ecf06283b50a2f43eb39db06c274bd23f019c1d4dc2392990381f04383b998493f4c30d6438af03383b9b84737220717e0370763109677e20717e0870ee67124ed25d38c8701e09707635092769ab9d0ce7690067379370927ea9850ce70680b33b254e7ea2363709de68795780a987495e378572ec87ccebfe0c70f63409e7a440e2bc15e0ec6512cebc40e23c1fe0ec6d12cec981c4f919c0d9c7249cf981c4f90cc0d9d7249c1303897301c0d9cf249ca4b33ac8701e0370f6370927e977acc870ae02380750e21cc49c1b8b730e4d8c8f4abab713772fab221cf1211bb8e80d86d40652621dedc2ba9645ce1f8e7fa631216ab296d34e807a10256ab532630adbd776897b1a6402832911aa59f0ca5b1b84fff12c609e8457a11d5b0fee871b8a80770e49c5082656583947308338397638403934155e9ad85a0dc2a9346479e87b200348a744abb6e09be8f2d520afb29c01e00d337b9a17e1cc63b2695e0b40b21f4e89b73fb3772786e04a8400b5fa722edbc2f8ba75f844f0807e0dfc75442a5a507087625d9e19eccad39b00e7484a9c235d95a72a06d705ebbfd6365fbe9cb2ef0a8da7c23c156403a3cc990a16c479c98b81c78e4e4581a53c9627fc72d77ae27dafeddf1178ea9854e4af58953f72332ac21e2a329c8300ce0c93709276f891e13c18e01c6b124ed2ee68329c6b01ce7126e1241d1925c3793cc039dea4defd29942bddc97af7ff0e4afa0926e19c14489cf7019cfb9b849374e739329c57039c9926e19c1c489cbf0738b34cc2991f489c6f039cd926e124dd53960c6709c039d1249ca47bd890e13c0ee0cc310927e916bd6438d7019cb92d394ce74ce884634964239ebb40153e8f126578cfce16184d22eb9c7b0778e2a4540cc5f180d7093f54b26be423c1831702f0f25b7e4b00958c8397884780443cd91490419cffd119809c620a48c2616032901900e45453401276b191811c09404e330524e17c2432902500e401a68024dc9a820ce4620072ba2920095b3164202b00c8034d0119c4364c39007990292009a71a9081dc00401e6c0a48c28df9c840ae07206798338f3888fbc2f603286752b7b0c35f63e18a36080eebc5a6f9fc35327864935df9c8af82378b129efaa07c7812b67e865b89e8e9e168d70961d5b40dc59d54606b01d8d994604730f734427b666678050617c83bd0a2cf7c0be2c6bbf341d29f93cad56e36503e5793670473b485537037903c03609d6bcedccc20ee669c01b28179a958e402cbf9f8735842b464396c03f0d2f9a94cfc959612cb58f85bab5078ca2666efa0c27a3ec0ba2015031693523fda4356ad6f02c9bd80125e5f4d728f96730671f3f285c0130f310966101709140298879a0433889f6f9a05602e340966103fdf3407c05c6412cc206e0b3d03c05c6c12cc20ae509f0960169a043388dd74d301cc2526c10ce2e79b0e04300f330966107b91f201cc22936006b1c3633280596cd2022ad222886c01d52880b3c4249c3981c4590c702e350927e9f72dc97056029ccb4cc29917489c67039c87a762aa351f3ddf047a3253b2730719bed92c8c6fb93993fe83383bf338e0894750a2ecc5f82eefa572eb482eaac67a7c83f578ad18bc801fa40f9e47a6018f3c9212e35016de9ac71e955c6da96bb560c54044a598b43093f15d3ae0e7c4ca995a30d01840b84b01dc15e624f720ce46ba1224f795e66ec5479893924db0b91178e92a4ab41dad9342eb81328b405d2a724d326fec09901d455df8444bd8ca52d281dcdc1011c67340a25e6df63e86843ded64dbee1d02f0ae3137cf242c8ec8f2cc5f800ca09412ed30817681f0cf22c6676d54c8ca52b910a566cd6d1411c0fdb8ccfadb163fcf3a565862cb035875ea0800af4d450e8b4df09a2d3c9678abf22954396c3b900594a5a2e31856ef555b29dc7a0a7675be1ff0c9f254cc448630636701c1053b0f80ada004ab36d4cf65fbda86fa570084ebcc99101bc4a9330500e57a4a94c33da02cb6c2e4421aad16545d73cba981b6589a46552cb507c5d2064ac4fd997362acddecdc10d567833840bc0500ad3469739ea99438c936e7f927c8028e3609e79440e2fc23c0b9d1249c930289f37a80b3ca249c7981c4793ac0596d12cec981c4f911c0596312cefc40e27c08e0ac350927e94c3a329cb300ce3a9370e606126715c0798c49387302897305c0599f8a8e906cf1db3ef2d1f86266f73605b72f692d40d860ce987b107792db081a958de6ec0012c41544fb03944da94ad876bf1217b44526ea14f4707e4d85f04990b037a562448823ac68de4c45dd0e7a47f1f300e3e6d40e0aefeb1f0c1b00d06e3177bc3d889f5cbe1ca0dd9a8afc33679f1b211a03106e4bc5d46dbe4776caa76e934da61906f01d9b1a7c79ae4a5190f17d09f06d4fc54484f8c62773023942793380799c4930835835bf05c03cde2498415cdc7f19807982493083b8b8ff26007387493083b8b8ff1200f3449360067171ffa500e64926c10ce2dc8d9d00e6c926c10ce2e2fe8b01cc534c8219c4edcdf60098a79a043388db9bdd0b609e66f66217c2844fd6c01c0c7ad84f4f45f7f0c4667f2d17bd9af68ccca0af507f0a78e919260de84ea1cc41c90674ff01709e6912ce4981c4793fc079964938f30289f35a80f36c93704e0e24ce3f009c3b4dc2991f489cef039ce798849374c92a19ce2300ce734dc2991b489ca7009ce7998493b4a94986733dc0793e254eb5a77b4eea07d7c89a96d500de05a958b1c6a7c6cc617c07a43aab015921db40f63ab50a21b05408807b2335b0204f2b1c09105f68d23e72a4f339c8700e00adf58b4cc249da854c86730ac079b149384967b593e15c03705e62124ed20556643837039c979a849374f91f19cecb01cecb4caa794ea11c6527ab79fe0d94ecbb4cc239299038ef02382f370927e986bb643877019c57988473722071fe16e0bcd2249cf981c4f91ac07995493849b7d227c35908705e6d124ed2bddfc9706e0638af310927e97444329ca500e7b59438c732f7a63dbca7a9dce2c1d706293bc30bb2b0992233adbfeac5e406d2f544af85a826d3828afe6e4ae0ea53f6d8f41b67ce4a06926c21eb08e0b9d7990232882b82fb0290d79b0232885f2f381980bcc1149084d3bac940660290379a0292b0742703f96b00f2265340122e812103791e0079b329200957b99181fc0a80bc8512643673d6379bd0e5d3f82af6d9d613d5963eb5e28c9b9aa2dae7a354b5cfd340ed734f2a267fc7db6b4f38bd81accfbe2f8079ab49300967d293c1ec0f60de6612cc208e267500306f3709266143930c662700f30e93601256edc960ee0760de69124cc2062719ccae00e65d26c124ace293c1ec0660de6d12cc207e52b43b80798f493009db4c64307b0098f79a049370671032983d01ccfb2861e2df7b9967fdae64f697304b2c015c70f0bff7b29c85c1de4f09769000bbd07aa04ccc48868b5d5bec9b59644b60db01ac0f5062f5b65f6710f7b1490749ff4173b7f2232cefc9b6f27b0078e94366af83276c35916502f380e73e4c89b72728b436894289affab03fdb9ca255f03ba82096011f7d2415334760c98f1557e4e53d994fa6039c8fa622378d4cf2f1e4a741dc18751c48ee8fa5a2ccc7469b9c657e1037b5da1f78e9e3a9a8ee2752e613f6d793f9e84500ec13a6820de25788cf05609f34152c61564006762600fb94a960096ba764607301d8a74d054b38f24406360b807dc654b041ac600d06609f35152c61ef2a19d83300d8e74c054b38064006f67800f67953c106b1e7ea700076afa960097b5bc9c02e03605fa004abbead3089b5c0a729c8f09d00f0bd684e1f401077bc5d0450be64d25605a47b8e910df46582dea9974dc249ba4916ddb829c0f98a493849b77023c3790cc0f9aa493849771325c37909c0f95a4bce3d71774507f1a300a70898edd25cc2e745089f2d3c87fb4e190b6fb596c9e633be0cc1de8cadcc3a5f286a928d6c8d5594acb0fe798b8155d63fddf590d84f6f2edbc2eac4552eaf5cc8aeb6ee72cd1a58f668eb91d7b94374900e91216a12332de68dd63345ac4284be9515337b2bb942ebb79af9d2249064886db79758d79a181fb3e521d4589a6c60f5c262e7567319a1f68293fdf5466e1707982175555f742c9075984acbe652a149bdf54c1b118e9d1e33425dc0991adc2c1035f006a1551721b1a6f91ed77cae905e21a4f110e1870d1bc42c1ef84646a8a378a6ccfad724aaa1ca0a1efda1507719e3dcda458254a945a8541c4b9aa564f1afbb85f2ad5f764b21b3b98d902997a654cb33753db64c1edfd1a5bdc12335a44fe55549f3d458161534f35e27a6f25408a905312d8d6d1feef59da3c44a56068f8b7dd9fe3779bccb68176eda37d4c9fa6ba915f3b6709e10eaadbfb952df15b46269ff0f2ba9d4b6547b0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/95e1d3b8407bdf5488d728aae35c1b15.asset.meta b/Assets/SerializedUdonPrograms/95e1d3b8407bdf5488d728aae35c1b15.asset.meta new file mode 100644 index 0000000..06993ca --- /dev/null +++ b/Assets/SerializedUdonPrograms/95e1d3b8407bdf5488d728aae35c1b15.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cfb6eee3d0c283142b834688c610e52e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/95f80ff4d863e7d44b00ec3f0c4318a0.asset b/Assets/SerializedUdonPrograms/95f80ff4d863e7d44b00ec3f0c4318a0.asset new file mode 100644 index 0000000..4ddcab2 --- /dev/null +++ b/Assets/SerializedUdonPrograms/95f80ff4d863e7d44b00ec3f0c4318a0.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 95f80ff4d863e7d44b00ec3f0c4318a0 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c1447fbf8e70eb7e2d6420956522c2109d6d24220688334042ad0424802a424248d202d6da9537777777737eaeeeeeeeeeddbffceec4ceed9bd79ee6e6fefb9ccf2fbf7fdbc6c56ee99e7f9ce336ee12c66fd171a6efdb39015b1296c245bc0ca58355b6dfd35c5ba5659ffb3efd4f379acd6baaeb0fe2db1de0d6719717ec9ff1b12ea65fd3bd3baab63f5d62f1b58a975ad10efe7b372ebef99d66fcbad3bfe74b9f5ff72ebab5073eb470b58019bcbe6b09ea1ee71442c143faa93cf42dcae506bebdfc96cbdf5b65c28c503c912af7a5affccb7ded489775596d2eabb456c2f615695f5aed4fa4d2dabb4642e13125b172e64e20f665fb697d7a1f29a69fdbf8dfcbb99fcbbb5fc1b7edf425e8725f8fd70f0bb36e06f4ee8c218bf1f615f4365d6b52563e123c03dffed37f2bb91b6bcf0ca18b2b2e57594bce648994726a07f2b79cd8d636f2c1979405622cc5acbeb18791d2df5dd9464f8e36c46a173813cceb21ce8330684dd06bce7cfc6fab05dc5e372573c2eb7e3317ca68cbf4fe4f7e3e5754779dd41cab6bee97aa97c36415eb3e2e8b593fd3b61bff2592bcc6635f27e67799d28af93a46e2ba5ae47817bbfbaa838cd973257c8308ed63c57dff3f7c7c8fbc9f23ac5155f05f2bb63e5fdd404f549c4ff944e15328ce3c0bdc5b1f9d218b254bcefe38af77de46f4fb43936bfd3650ff03faddc6952def149d8b1ca65c72a5b971699ceefe2eaa0e44f97722aa5dc13c03d977baa47db9acbdfdd2aef67b0f879dbf609bcdbc596d35ab12eb4c369d9cd7ede52f9b0bace8aa3a78adb2a57dc5649b99552aeb27fb67d1f529c73811cfefb135d7257bbe4ae9672551e3135413de7c8ebaef25a2caff359633a2eec269fcd93d72219663573e601d5f2fddcc86f7b28bd13e5162b8e16b8e23a4b865b1347a6fafd42796d93e0f7ea9bdd7ce8bcbbbcb64d30ccb6f2ba878f30dbd9bed0fa07972f14c691b9a7cdb7753dd0c192d36683bc5f24af8be5752fc9bfcee5077509f8413c5df696ba301007962e6d3bc9fb25f2bad4a98b556d75ea7452ea740aed2b659e0ceef9b5563e3f05dc735de7d9e1b4dd2c652e93d75297ce65743ab372fb771dda03df48e477b1fc4bd64bda65dbb2dba93c4395cb4ab7dd237ab72e00bf557a24921e2a248b0617e306a98362bb8febbb53c13dbfd647c2137f5bbf6daf7c6b0478ce7f7b1ab8e7ef5726a8abccd31d3ecbe5ac0561af9561cb6fdbabf8ac62d1694ff75b7e5d039ead91f2de91bf5bcda2cb31f51db7ed7470cfdfaf4ad0b66a8d7e56b81d26c5f8adaa43aafc6761c41f5abd209fa934b48e39d3d63af93e2ff21b5167e0cf6aedfb8e4a17994e42eb0197f5b67e5ba9f2547dbb8ee9cb59c054a547b63612769f37e4b3861861a9dfad77d9bd3c22a75d2fa9bbcac7f663ce34e3fe963fdb5f5e0f92d743e4f5e0c8b7b3551a3c505e374addf6638ebc991d009ef3ebfef2fd19e09e7fb72122bbfb13f2d9a12e5d75f17998cb765d1e10cbcf0eb7bfeda5ca98236cb61def75c9ad63b1fdf6485bce5c15e6265b4ea7e61ee51c65cb99a7ea40c7d8f79d943eaa6da2da16aadebc8139f27226ebe2a10380df6c00cf5aca761ee41b4fb7581c65dba1b17eaff490e9abb17ec7ff966921746024ae1aeb7c278077fcbe08d80bed8ba58bccb3598738f66c0fbee3d7537dd81feb5d4b79553e7f1073b6790eb27da54b9f18b2649bdceda75d555fce59f6fbce2a1f3b1bd8c4c3d81861dde84be7c8772a5d03bf0a1d029ea93cfcd0c833218fbf3b17fc8edb7496ebfd794086eefdf94007ddfb0be4f3b36dddbbaafe960b5db61ccb9cba1ec21cf90cbb28dad6d021aeb0cff1109717cbdf1ee68acbc364bc7c1143d625fab8ecf687bcbfd4159797b9e2f2704d5c5e2edf1d01e26d07f9ec484dfc6e021c0e97efae40e252bdbf12c8d5bdbf0ae8a07b7fb5332ebbab32e41a242ea1fe302eaf8db63574a42b6ce597b1e2f27a79bd4e5e75f5de1be47582947b5e02726f94d70d31e48e70c93d3f01b937cbeb4d31e4de82e89b4c78cad7f325dba398d3d7f9bde5b73d5e8921eb56a6f5f59eaadfe036e6f4f5db99d3d78f66d1be7e877c774c24fe050bfeec5816edebc7013f51e5e79de01be8abeafd5d40aeeefddd4007ddfb7b98c3d77b4d92cfef657a5f87fa435fbf2fdad6d0b1aeb055391e2b2eef7771567c8f67ce76cef176fcf472d77f60bea20be7015bfe3cd5fff0a0947782947f01b8e7d7135de19e6887db5bf67f6dadea03ede5f3e1f6f3de6a8ce121a6ad6ff52e767df73073d6a736bbf83feaf2959323fed668cb23e01db4ed14e6ac933c269f837a44e814f04c57e78ac7f571797dc2c5ef2429ef4270cfbf7b0ae8affafa9e94d75322ef3acf70c56f7ba0c7d37a5f612a6f55f52baf752465f333716cf692279dc69c79d269b61f6c13ab7ff605f9cdb131be79495e5f96d717a57c558f3903dcf3f7320f0c9de17aafd2f14d11f63d32801e4a36ffcd4509d8ff9abcbe2eafafca70ce64ce3e31e567ba3222d97a6cb2ef64db3f7496d37fc4bd150f7d55db58f962431cff506de337e555f5539ced62a0eac0b1fab3e28515c32e317607fb10549de32d797f8e7cafea8ae7bbbe5765f0dbf2fe3cd7f717babebf507e2ffb5e421738bf67ef0239fcfebd886d2155b77d1f3c937932fb20c2a79faa5b5de40c9b7dc89ced3bd586bb587e7709f81d64a0decbb1b9d0252e9b2e95f797817b7ebdcc25f71217abcb5c722f77e9fb91bc7e2aaf9f446c2cfa07fc06f0641f3b65c6f4e9f7a48c2be46f2e07f7964ff78b55ff57bf95f5e9d05552c615e0de92919161eb9b9187cb0aa93af5652e9957cbeb35f2fd95e09ecb8e356efdbefcf65a976dd7cadf6e4ee0b7b24e1dbade65dbf552c63fb66dfd3bc590f599bc7eee8a43e5b35cde8d9a7855f5ef8fe5fd0d5287abc0bda5437fd59ef982e97dfb3ad7efaf76fe7e801a13fc525ebf72e9761373f685a93ac9b7b84fb2ef5cbadf1cf9a651bfaf5dfaa97681d2fb1619ee35400ff59c5f6f65ce324ad9f1bdbcbfcdf5fe36f95e37d61e2b8da8f1a0fe20deba4ad9d726f0fbce32fcdbe56fae03f7fc7dbebcbf8339eb0077d8f13350f50dfe28af09b4e14277baf41b24af03e5fbbbe5fbebc13d0f4ba5f79f6c3eb92a3e7f06dfb571fe6650376718a1bb227c0765bac2bd0bfcfe5ea9c30de05e7dc3afaaed7123b8e7b27e91f7f73bdf33a947e801f9fc26f09d7aceaff7c9f7cadf32c0737e7dd025b73f78ceaf0fc9f7b7807be0278d7af697df29bf9463f5a187811fa9678f689e6d06ac1e658efcb1d1a71e73fa54a32fa93afce3f2fd6d408e7acebfef2edf2b5f9c6ac769ee6257384fb97cf72957784fbb7cf7695bce767da41f2979bfbae43ee3d2bfbbbcfe066c7f463efb1d3092e1b23f22be367f77f05b25ab8d333c253ff4ac0cf70e70cfafcfc9e777827bcb8e212a8ffd535e551efd11d05395d57f8170953d7f47f4dc418d0bfceb62f10ac2e27f200cd547f15f340bfea70aa3b839f82d6461bd1bacd299b2f90519ee5de09e5f9f07e13e2fafaa8e7f0ab8b7c2ca6c6ecbce54bf0da58e5328dcc49c5e628ebc54a45f28ef61f9fe68d7fb21f2fe65f97e13b8b7c21df60b90cfafcae754fded6ee77b51e6f0fb4f9cefd900f9fc53f9fc1e20473de7d7d7e5fb7bc1bda5c750d57fa9f2b9cf1039b21e137adf25e77d29a7b5cd6de824f95cfdfe7397bc4fc0734c9ed2af8d4b5739fedb989f0c70e9fea494751fb8e7d72f5d3a7ce9b2ed0b1773e5efcd58a4ff0b3e977e137a55bebf1fdcf3eb57f2f903e09e5fbf76e9f10578ceaf1fc8f70f827be82b8fb87cef1197ef6d76bddfec7c8fa5212557a59bd087f2fd43e09eebf10de00fd388e2d202e1d5320eafd7e4f387c1bdd2c79da6956dca9f1f01f7968e232e7585dd0ad149d643436fb974526d3ed8c6943e3e5cdadf18862b7f4c384f53f395547cbcc9e2e769aa9f2015799a62d00e61d33e0e9bb75df1f536d0d1a56fe80d165d8e7440c2dd4a5edf7585abfa04de7385abdaa0ef8030543b58b151f9cb95e0de623452d52bdc75308b53561978968af4f60dd3a737d9966a4cf70f817b4bc72c99cea2d2db1b2eddd5efaf74fe7e942a7f957ff690f7dfcaef37837b98ee4f07f75cce0baedfffc09cf50055f7fddef5fbefeddf670fb2f5cfbed729a7511eac1fb8f290c66f541ef2a3cb3764bb28f493cb377e028cdb80bf2137a5ef23e09e5fbf03bff94eda20dbd7a3301b7e06bfe988d820fb0942bfba6c90f5e2d02f2e1b9ed7cb6b7caee4fdee92f7bbbcfee692f70b78ae6c83f5f6ef40bcb7017f731ff8c519b6b049a6971c5537eaecfa26d1fcb04becf4a2cd0f555c269b1f428ecaef4f610e9b7365dda8b16e752db8e75755775375a6bbc13dbfaafac84daef0babade9fe57adf0dc4374cf74fb8f4506d09298f7573e901df2b9b1f7685adc68efa81e7fcda1d3ce7dfc93665ccbee43f98b35f54ce0508fde9e2fba7cd376f826d5f9e9a03a6fab3415ad2f66f28b92a5dfd25e5cb766de81f79afec1f0c9ef3ebdfccd9b7f03fd7f7db81e7fcfaafebfbbfec2b6f9a88e74f827bfefb9ef23e24df3f05eef9352c9f3f0dee955efcfa9f7cff8c2bbce6f2f9b3e09ecbdc5adeabbcf33970aff4e7f7cdf47285bec08ec6e75b3bc3137a713960bd91f8dbd2634c371086ee1b7e6d099ec9fc3c0cd62e88bfb92c55fefe019e733d9e777e377ea9cb1f14f7f62e7f50efe5dcc07007e7fbb0acef84553efb24b8e71cd4ef3ab9e253e6bfe1ceaef854f9988ccff0564eee8de1a97ec467c13d0f6f1b79afd2f373e01ec66717975c39072cdcc365872aab7acbfb9e2e3b14b75e2e3b7ab9ece88e84e7f293b0f44726e78285b771d9b18dcb8ede2eb9b21e18ee0b7ca3af1de7e33600db75dff06b1ff0ac8ffcddadc006dd37fc0ae65787e57a8071df001d75dfb8fd5acd19572c551ca8f979bd5dcfd5f78ad1b3aeeffbb89eb794be2fe7e48e577db6dbcae7aadf52d76f3d017cab9ef565cebec504f3e0701bd7ef24fb90e2d49639eac2e136e0b96207ea1e8af70e35def4681c6f85364d4df0b7b1faeda5cfabba62785b97be92375f4ec8e36147b51650a6fdb02a37af73ca0bf773c97bc8254fd5e1651a0aa9b4227d34a47c7ca0fcfd49e09e8793e8587967a01797a3eaf8aaacc9608e325bdc5bfae51febfa6eb0fc4ece2d605dc073aeefb6f25e96a9e141f2fb975c72862072643f5ab8bf7cff32b8b7f499b0d1b67582cae3553da6bf53be6e6d5628c3c9b6718dd60017e36b12602cc309c96fc2db33479d3c2cfd2a3c34e29361b9463a9ce964adfa4dc3702db45bfe30e6a83b36fe66b8e63783c03bdd6f46009de4984d78247836d266bd932a8f07e1df4c54f9a58a6fb526fa4e706f7db7b35c3b1cf57d3673f44787b3353aca7980e13c978fe6491de4ba8590f4c17056f46f43db81778049e3fb2180a1eebdaaf36622ef8732671b50b1ce8da14b6e1c5dfe01ef01bbd030791d9980cf0f77fa7c48cda92c4adee71bd330e01cd58e57bea8ea7d2a9eef07f7fc3a8a39daac61b9b63e3c007053fdbe2a6f563e76a5d3c7269d6beb9b7f18a22f888b5016a2afd26bb44bdfd1c0e7da80bf791ed9cd196e48da10ca75e9a18b9f1c67fc44c54bbcfc9e872be7f084f2ecfbc993e4b7aa6c1ac01c6553144f95d73e02eeb95daafd34daf5dda9ceef26abb160b53ed9cbbc6395ef8f91bf79c5a51bd83320ac9e8d73d933163ce7d7f1cc59768fb7f52c18e492a37ea7e686df01eef97547e6cccb76b4e54c91e35f5396babe5776df05eef9752760c34ef2ba3373e6653bbbc23cdd15a61a9befe20a732273969313e5f7574a1d551c4a5b4319f23ace29a7b10c9cc49cf981f2254d7ea0f8a97e1871afea80dc0fd55ab4587d08ca8e7c178f7c196735b6ac02357f4c320d498e2a3f0bab39cf47817b2c1f5332c6b398f5c590dc3b223cd9a5db645bb7a9ed6db953e59cd3d0ce2edd26d2ebd6583f98c29cf9d514792d00be27e71d87a7baec91f300a6c97ee6908cf3d0646758dafc6b0aa2cf2c973eb3e47506d067864b2eccffe66ac2ca07efe0b7f39833af546bf05311f7d398be9e3a4d5ea7cbf7af827b8be574d577249987a625c052b563200362bf0929fdcf72bd5779ba7bddcc8ece2b8ccfa8b137f56deb383e3113f8c44c9bdf8c95b67d33955dd2574233e555fdd60b235527db15e8ecf6db5d9df636fea648f39b41e01dfc8d571fdbc5e9638d796221e27bbbb8debfe69237dbf5bbceaee7721e7648c999c39ce5fa1c3b0e66caf1cf596afc5bae93662aff380fdc27606fcc7260b60c7b3e73e64df36d5d667d20bf9be3fabe18b155f6e58717c8f76f387f07c72ac437fc996ede4eacba8bec670b2f74e9bcd0d67997cdceef42f3800fcd735ec360ff8c90f2c1b35ddfaa7c610fe64c47721d7c7877f9fc0170cf7f3797c58e977fa2f56b9cdf16efb7ba67f365f87bbab8ec6973292cb01917cafa41487ecf8a6287155ae092bf48ca7f13dcf3f70747e251adf90ec97d4d427b386538e6e76e947216477edf38c755cd1d016bb58b15a362f03b7ebf1bb007944b09f33b58cadbcbc56f2f9bdfecc3a46d6a5c48d9b2310e3fc56d6ff09d0a6b0978a6f2bca59167e125e019bf9648ddde02f7966e735bbbe42e93dfbd0dc2e6d752f9fc1d70cf7fa7eae665f2fd2697bce540a7323bcc39b2af37b4a72b8c7229e30c9bd71c35fe381fbc6f03f454cf940cf55b10beb8f2e7efca3878d01966bc38d0f6adaa3dbc4e06f7fcbad215ff2b256319ff73d57c5fd577ba2976d84a6e48a6937085947f31b8e7ef170379fcfd7b1eed517b759d0cee41b8423e7f1f633e7648edfbf2a0779e4c8e7384941fa87db5de07f7fc0af6f50829ffae023eb14a5ed53e521fb87cb41a7c5b0dbee5d71ae66c83d6d87157f4a04bb6fa9dda37e74370cff55a2aefd5fe396a3ea54aa360ff03f18d7ac6af6aaf968fc1bda5c3ae9b6dff293a13094bed0f733fb88761aa7d523e01f7dcb642e7f7e1b5f2bb4fc1bd620ce57ce692e3d22bbc0ed8a8d6f73d19c7d7d53e5bf9e01eb44d7755f9d43f89c9d33e53731b4b6418eb5ddcd41e271f2721fb7797afa93d4a1e01f716abf9373abf8373a9b572d57c69d5b7abf636391adcc3f0d59c92db63c8fccfa5abdad7e311706fe95abcd8f91d9cdf1153ae1c970fab3d40d47c2ce6fc2e7ca053d7f001e039bfaa3d2c3e07f7ee70e2d81a9275aaf046f9ede5e0deb271c124f99d2c634271f64553f242b2fc09c972307cb094ff05b8e757b547c407e01eb23f9439ca4d716fe9b5b0934bce612e39aacf54a597c35dac0e06cf955dfcfd974ca4a785835cf678da0fae4548ccb19dc1ca5909ab6159628204af6527ba25affa65fccd78c55c0c317383f15d7979b0f56cbdf5d372dd8eb80bc47ebbf52c97e56877c4ed2de64eaad0a7887f4bac2f2a84d0afc25141dc15150457aed2fa5f39d8ceb7ce7a3e5dec06cc37f4adb0de8c6485d695ff6a291bc51659ff734a5968055bc91aacbb62ebdf1a216fa9a576f497f14ce25bffba7f5364c9b47726aeb29e28a035d67da5d070bef8778dd0b45c683fd37a562ff6495ecd56b0c9d6759d082ddaf65aeb6f5d98c512995e47fd06c5d8737b1b64154d0596355cfb2ce18bff3f469a2246c4d4a4af643a6c9e257a188e8e8a89ffcfd0ce64f8e0da4c2963944016723ccb615962ee57511441ef36465ba8f76f9bf7189617d3163d191edddb080b2231fcda95b37ee9b5e8cb8f5a384dcb65596208b14f1cd36281e5f232c5ec412f26b468d13c9b2beac61fd2e11753dee6a711bffd5d85f8ce7b04b414859f3302c4f05db195abcd0385e702a17ca550cd6dcc544bb91a991f56c9bdebb930eee525d62f56895fa9bfe75beaadb4be2ab3a4d8c647c5743657ab9588ace8a2389ec158748575d1256affc54d925ab0cdf5634758eb462b22119625ea57bd62b8351696a8788565ed4b25bc7b6f9bbbbaf8a4af3e69a18f97b6225e92090d8b9966ba98699bee8414bfe488152fed1aed8ac40bff4fcfb03de2dbf174c00836d7116c976edfe6efaa859412eb5bef0cf9d4c761eecc480f702bc409e3ab80216ca14198cd1176d468c55ab47169c5154224b7d4454efba629a693736ede66ece942d00275eece314b59afaedd4a474f4c925d4a4a4fb51ee75bcd845dac77bcf02a175551fe7c9e25b1c40a9bcbcb1721445a9cce5fc426cb47f246b8c96aa97615540781b6b05fcd30e2ad35c4b3b9bf76d3b881c8e3dc89a1339e18da60c9acbbdf64d61693dcc3afe47698e49e7e25b7c724f7f22bb9832ed988f9f58bd3926c229d2eeaafc9d66f575ac6ac112de906ebf7ba4e9ad8c9a577c2c9656b915c3298aeebc89b465832d94a1777fce1363a25dd51b7351e751d31c17d7c0aee84795b5fbfded659e76dc28e4569cca473adbf0a2c0378eb23f297ea9d716783b9717c6d5ba6a9690b84fda23261af21cb4502f67fad908a76867061ff81610edc45176922264b9a3cd20a8424d5e95662495aef3902fbeb2250183d3841a68969312091c81c282233b5016311db5517b1e2613adb5305224f5d26e478af72f28a4e7f4d5d83ffa7273c98e9db54f1f4c02876d3e5969ce276b15473679a83f14cb3bb2e005e23e0d3fefdd6b37a608548a6cf42a4a7ceb904ab15a4ceb5c07a668fa64c156f2b4417fc4871d6214f2a3c42734504635f2ad79a2d4e3fb43b9f623b211f796ae6ce4144b4f19517341af15c1ffc8364274385b3d36981258a5e3ab7e2b13f4c832abbbbc314698fdbd786e2bed61b0b6d3845685beb3c5ba4a37d9ac4b377b5c2281121d68a2faa658f46eafc7b84cebf45021f19c3b352a1972b9e62b9fa48e1ead40a610ebf8dce05b95364e95cb067b455881f8ec4fdb00f16643659907d7541f2a2880f32f92d8ab6d509e7cd0ebee4c957b3a39f2ec58a2c2abd2330f6604472151dbe36ac5fc21dc7790c1b1489ad03e6de19bab8e104476bd46afbfa2513a2a2270f8f9efe98f03198cd1e840fc0848fd508afeed26c072fc20762c2c76935df38d18bf04198f0f17ae193bc081f8c09df4123fc84877ff514a1db61c277d46a3ec993e643b03c6882260f0a79cc833231e13ba52083db5e279c7747eedcf87144f87fd67f51c2dbe3c287629a4fd468debd2aec49f3613ae13c6b9ec47c66cdc331c9f97e258fd048ce1235453e352d9d3d9bfa2968d3c569f0e56cae95edeec3ec4ab80ab75ad440b8466a0e5291755d2eb4e0cf4b65f61d3bacd805cae4463ea05227eab65359e213e9e8ade00b06c3a250e3cb4062d7f074da78afe1e98bd4a92274b3d860c5f5482ca799a6c969ded0656331729a2c2cc94ef79b64b3759279929da1f1d5ecadc5778cb515bd1051e14cc5c319a5cb1a440d7ebf26cd1aec914f2e6fb998156acb9b635debd95ae1aaab2cb3d648c729161d7e2bc45bbf99015f1dd95753768a224e9b1c7611c961e7049203a5555802c8d179121f22e64b0ea22632f1aa49119b67495e2292e1bee231a764c76e85f8b482ed279a8f76c331cadf5ae1fe96abd3868fbcf1c585713bd9bae282f330c1737c0a1e8da5f1b97ed3f8189d649edbf0c5847e6b586331b577f5abf6382c472dd2e4a8ff84bce5a8e331e1f335c2ef0d7b13be0396148a13f191185ebd232678812e8df106c71431db26c3fa7fb5f50bdefa2c11a93f43148691dc20c34aeb15d65ff57238437d5f6d7d614fa8f6a2e704cc2916fa758a9db078db4d136fbf788cb79d31e1bb6b84cf68e64df8442ceef6d0c5dd2866978aabc5944cbb6c73e6861962543143ac666810b346ca44ccd58978cd60fb5b65fb01d695f733678872a052bce37ff398e679ad97389d84e9bfa74effb640ff7940432f21e663f9d6224dbee5b5d93959279c577c1633a4e2c3973b7aaff84cc1b0edadc3c67bfbf89c5d5e736d10dfbbe7e496a5a8802cd0e89525fa3757b3a6ac90f1d6025ffb5127fe8e545178d89199c57e2a5e7c19a9bbe2a5fed357bc96325ef1ca61f12b5ea9d01eab604dc532d5124da61af292a94ec3d2c2322c2d94269516a6eb7c4e7470d734a9cfe129aa48c8e629cf7f859f2f858f1ad2113df079097856aa741c26b680e1df974a72753c336d23627bbd507a8a1896e7f04592d0a789729126d2a939962e66e8bc97973fcb35a5f6ad2dbc95da33752e2b06376a9bd4650b848474b8ed0a9ddb667002631288fc54ead94f2c11ac13996a99cc54edacbb9f3837a356149be5d6739ef1c2f7c3c4f916bcbe344df0ae12e4b97d25a2dd8b39f94ae1e4e9b61373f459580150a129003cd5aa77c192d03e9a24f48fc7245488a9bdcaafdab331b52b356a6f68e94ded3998f02a8df0c256de84cfd509e71933af7cf96921cec304f3cd15a2aa9b7cbc4bb5134a5d2dc565a2ada0da7f65e2c97aebdf4aeb59a9109121967baa19ed5eb4dc15635ba361dbc923db220cc1be3ed9ced709de4a643cfe266e15eb04f716791d52ffe245b3f7fad7020c7b8306fb851eb12fc492f91abfc97c374cf25abf9277c724aff32b790f4cf27abf92f7c422713f4d24f2451d5e227111267c7f8df0628fc217eb84f3f4b64197370d667c44325249b59b4f917e8d12ab7e572f729e0ccbc5ec32b7ccd13fc2fb3c2a64a3d94b3adf0bd3f3009d9ef6ee127cdd0eaf5394883e341ee25cab7cf312eade18fa0335e88ff5887e0926fc208df02f3c0a5f8af1daa8e3d52b4ebc9689e51e91a7a3aca75e389660da1cacd386df46e2cd4b38cb30a48768909edbd61bd252cc884375467461aa18dfc142364774f895c859ea6b4431ee1d6319a6c1613a0d78ce56d85831989764b5a01c437ab806e92b1e912ec772e423fce6c82b30b58fd4659aedbca9bd12537b935fb52b749279ade32886d43af8ee1fde6b1dfb60e11c8385736c52e1acc2481de797542516c1c76b2278527b6f115c85093f41237c8347e1ab31e1276a846ff628bc1a137e9246789f0ede84d760c24fd6082ff3287c5f4cf8291ae1677a145e8b093f5523fc4a8fc2eb74c2b9939fe6d7c9eb31b54fd7a8dd6d2b6f6a37606a9fe157ed351ac959627a6b3a271abb673f799b68cc37534c6ced2cdfbe5a37c9385ef85897d25a5dbcf012fa6c9d4a1e8af27598379da3f1a64f3c2682f598f07335c2177b74d5fd30e1e769846ff2287c7f4cf8f91ae19d3a7a13be018bcc0b7c46e60198e00b99a62e385c7867b54863bc3a5f2e76205a2dfe5a2d36de2b1703d725c2f7231d4e6ae09aef229621bdb756fa74a515e723ada75eb43e10d3fa229dd67c188a77e246eacd7653d26e86e8e61566b021b2d63dc4935e07613e70b1c6076ef5e8601b31a32ff1e90307ebf25931d3bf82349fc5e691168bce7bbeebdf72e12955295e807569c279f265224fe6739fe974c5f2ef4374d1cdebd69733a46e7d85f5ffb65c654f75eb43319fbd52e3b3791ef3adc330e1576984efee51f8e198f0ab35c20ff328fc089d705eade147f3f8aad61c89a97dad46ed673caabd0953fb3abf6a1f85a97dbd46ed6e9dbca97d3496b7dda0cbd0797d36914e910c91281b4401c58b9879ccdea3ca9e2b55623d2d13b3a8568afb792269f29ec565a200b037e35b223a3f5688b1c45aeba99a75b59ed99b976488ea98bd356986c80acae45cbc55e2499df8aa1c84a32f702a64c1098b28afbd9bc7605174a3268a06798ca263b128bac967f1731c26f8665ddcf3d90cc5d64d8d235ebc84773c96b1de8265acfc8403ef9d16276076dda6b38b47d3a2c69e52db7ff7f2582d3a118bffdb75398bc7f83f09137e874678f3cede849f8cc5c99d589cdc95549c9ca20b87677a7727e2c431c6f94ec504dfe353f0699817ddeb33d99d8e09becfa7e033748279dcf38df9dd733bb9002f733bcfc4bcf0018d170eefe2cd0bcfc2843fa8115ee851f8d998f08734c26b3c0a3f074b3f0f63e9e791a4d2cfb998d36cd6e5697cd38825d6fff82055a5c8ad55195b613503f89b1ad154e4e5a1170f3b0fd3e2519d165d1bb5c8b6fee5252f1f9bb2670725afc3f9980e8fe974e82275c8b5fe5f2a1a43fc37ebac7f93d7e0024c83c7751ab40671c1d710f19a9197d02ec4dcf7098dfb4ee8eacd7d2fc2dcf749cc7d9f4aca7d2fc6b2a6a7355953338f59d32518a1673484fef048e8524cf8b31ae1bdba79137e1926fc395ddc7a147eb94e388fdbe7b1b87d21a9b8bd024b0e2fc6ca9a72529c355d8969f152ecac69540ab3a6ab301d5e8e9535e5a5306bba1ad3e0957859d36e223c6feb1daec1dcf7558dfbb6eeeecd7dafc5dcf735cc7d5f4fca7dafc390f105c57eaa63d76374ded4d039d5239d1b303a6f6174de4e8ace8d9811ef688cf8c6a3113761e8dff589fe664cebf7345a17f4f0a6f52d3ae11cfdfb18fa0f92427f2b66c4871a233ef168c46d98f08f34c29bf7f426fc764cf8c71ae1991e85df81e1ff04c3ff6952f8efd485c37d8e1fdb86166bb9292ed6eec2b4f85ca745a458cb4961b17637a6c3173a1d54b1363a85c5da3d98065fea3468c322c5da5431e055edb1a7ea5ecc81bfd238f02f1e1df83ecc81bfc61cf89ba41cf87ecc886f354654f6f266c40398f0ef34c29ff128fc412cbabf67feca858730ad7fd0683da1b737ad1fc684ffa8115ee651f82318929f742980cf6889dd4f1fdd93ebafcfdeee3735bb977e3316413f6b22a8de63043d8a09ff4523fc4c8fc21fc3b28c5fb12ce3b7a4b28cc731237ed711dada9b114f60c2ffd008dfdda3f02775c27937f09f89641931ba819fd208ce121be635cd187df4ce4ba91da3ff4bc74b3b46cf8f8d8f3d46ef5f576c8cfe69cc97fed1a5368fbef48c4e381fcafd97f91cca7d1693fc3fbf929fc3ca87ff12f1ff1899e6f31ac15983f8c3e54de2ff7ef6448bedf97cbb8bc43c3f14e29e3f3486e7fbdbb94d1f132f60ce130ef9749e1731e769a643e2c1795ec29269f3507432fd611b6fc9f4654ceb16214d95886f979d2f9a43e562598a6e415386a82e65789c7bf60aa6474b9d1e7c4f156ff25fc5e4b7f2193bafe904f3d869ad899d957dbcc5ceeb98d66db0d8e16964a5ac22aaf8286fdcef23d999816f6046b6d51859d9d79b916f6246b6d319c953a09a6760d7679dd334bd98f51616727b5dc8bc4d6ecfaac96a3c0f2bab71539cb9568228635e6773bc8d69d041a7414fad0685e2af7ab183805deb4f6eddd83b982e5be974d926415da20f4cf2a2d3bb98e375d438deb1db7a73bcf730833bf9cc13dec70477f629f8034c70179f823fc43877d570bed623e78f30e1dd34c26bfa7913fe3186a4bb4f249fe804f3dca74722826334863ed509e6edd09e21a41dda2b944c3bf4330c7b6f0df619fdbd61ff1c33626bcc886d9232e20bcc883e1a23367934e24b4c785f8df05b077813fe15e698dbeab253be95401183dbc494893ab6cac833d9f6a2c05b2dff75ae42c8107776f1c36bca35e28dca72ebc42a850c9131479681db9d4a7c41738dab66a0c2e19d497611bbbc313bcf10997999c7a97d5f632cfae958f00d47e15e73762d3352c0469664af151ada8783a849b32b4511941157428ef5b5d7951bdf600e93a17198e61e1de65b2c49f5c792d480a492d4779811033546647a34e27b2ca607e9629aafa5d477912e929dab7ce50b6f5dd85b14c58ad3cc986fb717d351ed6ed5885f3b5340b5f00cd585ea7c572ffcaa5e938a96090dab4107ac2dbb5ab64ebdf8d70f3a7a7c5f82c121ffa75ffc88f9d776987f0d49cabf7ec2fc2b53e35faf0cf4e65f3feb84f3f6fbf67edbefbf60ec876ad85f3ffd604fe777fc8a3119a661b2713b6f4c7ed309e7df0f0ff9df46f9774cf8881408ff03133e3205c2ffc49867e9f2b921de98ffa513cebd2bdb67edf06f0cc9a81420f94727dcaa34b19c44b43e0b17fc2fc63a57d74ef3c8fa7f1892bc1420f90f133e3a05c25908113e2605c2433ae19cf9580df37999de988731e1e37455638fc29be984f36271bcae92c08b28fb0c003e13a18ed95de36aec72beb8f28a4283a8a426b3e570734c9f1d74faf0b5a57c66049f8fed5d2ffecb5ae6b5a7aa05a6e18e3a0ddb00627613a25e979e6384d7120b6f02d633e626120937398b5b611aeca4d380efa2698fa6db7363cad9345125b30753bc84db1a0b77675db83d80e578f8c911688325c1899a24386884b724d816133e49d7aef628bc1dc6305fc790cf54f71e4fedb13026ebc2680fe2c94f9c74c0429da20bb52d488770a7552f216e858558a00bb12b8b4e8930e4e4acee88e93015eba19f2ec2e0e7ba948b0658243facf31472272ce46958ffb8b23e9606c951e88c2599e99a249397e32dc974c184cfd0083fd3a3f0ae18c599f128d6c528c5929b85d80dd365964e977e409705568865b24ca1a90774d7e9c69b80bb689a80cf3ef3cc4e5e9a803d34c2b3065bb721bee913fd86ddf609f06aa866a47c0e77c4cb17210c93bb4294b25572971175c27cb1f51ddf31c57daabc92197b664061c8ebe906b343bccf60b4f845ba6cc0e60df4d4b9068fbd391ab342ca2cb77b708b90007a6101ccd504104e2280de585b649ea62d92a3131ea32db235967dedaac9be4eddd15bf6b50d966514e9b20c3e0a1e99b6a97a85ab45af20bf2eb7feb5773de105a497eca10fa6c77cacf02f125f55cb6ddfb98779db7ab52f1662b12e447e5b21f7335ae7299c6d75799338b975711af3a65cb15dbd9d4ef9de34d5627aeb6a34cde6c6c9711668524ec79839ce4291e36444e538de35c3f2917e5842d94d9350fe98e02da16460eeb23bd68e8d2494690c4ee1b13bca6b81fbc25d49ec930ad4208a1747eb8f99bf87c6fc6b3d9a3f00337f4f9df9bcd3d89e51661ff1a7d2a7b70aea402ccc45ba30b9f7e58329e4ee3394bc4d8e188485bd18ab962b1b678a3d9fb8162b84577b5dda31581732efa7d90b1b4ad83ba9a184ed300b97607423671bf9b5710816f652ac81394de4be7cf4c78ed36472fc4c2cd4122c4ee78a7cc80ec9ad819790b7c7425ea60b592dd5e215f3c8fcb239729438f9e6c1504c8b522c0d2b2d388748ec7b0973189629956932a56f267acb9486630695c7cf93558ecb23758df8a8429ea567e7bc91c1eed522bf4eee4cc4119886cbb16a4d85cfa4351203be4203fc428fc0b330735662e6f031e699726e713269361b0bb1225e178d2ee4e43a27466148f7d1203d2cdf1bd21cccc0553a0387b178f50a5e411d21b3aa7ae0e7f0e4845259adac1428923867170352a90132c923903c4c789546f8b91e858fc60ad7d558e15a9d54e13a060ba7060b67dfa4c2198bc1aad5c0fa678a3758e330d7acc3da86b04d966fbda814293092bd26570f1cafd383174ff5219ff31276d049e6df3784fc8d34ef88095ee353f0042cc2d76a22fcd6026f11be1316e1ebb00a4264b6388c662f91bb3366d07a8d41f3a67a33682266d07e3a83b884fa24caa8499809fb6b4cb8719a3713f2311336e84ce807e2843fe4851d9ff6b59ea919fd755147cbaa2989de8f0b998c197e80c670e6d1f02998f00335c22b3d0a2fc0841fa411be69ba37e153b128dba88bb21eccbde8c21d71f68cd3ba246adfd330330fd69859e8d1cce95819770856c61d9a5419370333e2305dbfc60c6f46ccc4e2ea705d5c6dcb60f5cbb932cbae7ed53806aa33e4ec45dedde375107616a6d9113acdc408b098df994c2d7b172c2a8fc4a272535251598885731416ced14985331b2b7e8ff159fccec17cf1588d2f7e30cb9b2fced509e74364c785fccf509d872139de27925d313f3d01ebcb5183e7f34467e70a99bb79ab131661a19e88d54ddd43f7eed0936b1bcec7f43849a78736d262482fc6a49f8ce50176ee94954461be0073ed5334ae7d65a137d75e88093f5523bcf96c6fc277c3289d96886bc740b23b26f8749f82f7c0709ca1c1f18547d67b625a9fa9731aee93599e945f84c93f0babde44efe5325b5475d439809137deda0e8b314dcec6abf7b59e236b2f2c9473b04e2fddfef05e42dc5b1362d610eb36c4cfd04dd7f1467000cedbd146e786f82a6a27185182680706cf0bf181c1ee5196c50a1f1b025ca28b2b7e7b7e88af9273aa346bf6c1adceedf36c382a6a5ae051b31473860b74ced041963bf6564495d65ff5d228afcde4122cdc0b75e17644c35d2d4711bc84bd4ce78e99e976c729a243be360977bc28c417f938118d449cf162c41963858e3963a98edbf69cdb923472b3bfb333daf9a2d3b7c27a3257acbdb2bb7eeb92607a49c8eb8ca34b05d981519627ab1f46bd0ceb2dbccc6f6f613926f972bf92976392aff02b79854e32af3c5c19f2bf4a622596295de5b37e5481f1b8da2f8f7d30c9d7f895bc0a937cad5fc99598e4ebfc4aaec2245fef57f26a4cf20d7e2557634e77a34fa7abc154bec9afcafbea24f3bac1cd89a8dc15175c8ba97c8b5f95eb30cab7faa45c8fa97c9b5f951b30c9b7fb95bc06937c875fc96b31c977fa95bc0ef3b9bb7cfadc7a4ce5bbfdaabc1fe673f7f8f4b9fd31c1f7fa14bc01137c9f4fc107e8040fb26eef4f44306fd423820fc4ea030fa4a03e7010e61a0ffa758d8d58efe5433e7b2f0fc6403fec13f421986b3ce2d3350ec5046ff629f8302cf61ef51b7b8763b1f798cfd83b028bbdc77dc6de9118e4277c42de84097ed2a7e0a3b0d87bca6fec1d8dc5ded33e63ef182cf69ef1197bc762909ff509f9384cf0733e051f8fc5def37e63ef045d2704df1934b40f6b8aed5175bb67a7769bd41712898b029cd889585cbce8372e4ed249e6d3525f4a44e5cb70c127637ef9b24fbf3c0513fc8a4fc1a76269ff559f69ff342cf65ef31b7ba7632c5ef7c9e20c4cf01b3e059f89097ed3a7e0b330c86ff9857c36a6f2db3e553e0713fc8e4fc1e7620dad777d36b4cec3347ecfa7c6e7631abfef53e30b308d3ff0a9f18598c61ffad4f8224cf0473e055f8ca1f8d8278a4b308d3ff1a9f1a558cbf0d314b40c2fc3707ce613c7e5188ecf7de2b802cbe2bef09bc55d8981fe3205a0afc2d4fecaafda57636a7f9d02b5afc1d4fec6afdad76292bff52bf93a0cc8772900723da6f6f77ed5be0193fc835fc9376289fc479f89fc264cf04f3e05df8c09fed9a7e05b30c1bff8147c2b26f8579f826fc304ffe653f0ed5832f93d05c9e40ecc99fff0ebcc77ea24f3f2e24feb457f8dda5ad507e301dca50b80cff6fc2be47fb6e7dd1897bffd72b90753fb9f14a87d2f26fcdf1408bf0f13febf1408bf1f13fe5f0a843f8009e79b95f815fe20263c9402e10f61c2c32910fe3096b3340bfbcf591ec184374f81f0cd98f0162910fe2826bc650a843f86096f9502e18f63c25ba740f8135886de269c9a0cfd49ccd7dba6c0d79fc2d0b44b019aa7b1d2a27dd86769f10ca6768714a8fdacae6b9baf906ec29d75227b61a97d6cbceeacb355981f6be52493359c5b95219ef90bbbb3901c990fca5ae867eb750c27b25b4f222162f3f49ec39cae935fa77b5e27997fdf39ec6fc0ea059de0fed66d974404c7d8e2f9458c4557bf2c5ec272bd6e29caf55ec654efee57f557b0bca3470af28e57b1a8ece9332a5fc3b4ee9502ad5fc760f7f60bfb0d4cedad53a0f69b98f06d5220fc2d2c26fbf88cc9b731adfba640eb7730e1dba640f8bb18927e3e91bc87699d9102addfc79cbbbf5fe7fe00933cc0afe40f31c903fd4afe082bc406f92cc43ec64a84c1292a113ec102d82e45017c8a05302445017c86059099a2003ec702d83e45017c8105303445017c8905302c45017c85b5a686a7a035f535a6fd881469ff0d96518e4c4146f92d96e964f9cd74bec32467fb95fc3d2679945fc93f609273fc4afe112b46737d16a33f61de919702eff8192b3846fb2c387ec1b41e9302ad7fc5588ff5c9fa374ceb7129d0fa774cebf13eb5fe031bd6de2111c13186b5ffc452cb8e7e53cb5fbade9811d66da88a05630ff6e4f65e9fa0ebaf19c9ed1ec5dcbd2714da350bb5b6c2a9b1b4a9131328ed3593d97c096b0673fcd3c2feb4569ce91cd9c53fbb67f4a7f6f748dfd04ea26f283dd661bd477f63d5839d53503df807133e3105c2ffc5844f4a81f0ff61c2f35320fc3f2cef98ec37efe0e3585192f936b85334894bebda51a10dc5430b61a115508416d685c6a3646a0aa2a4994e388f92697ea3a4b94e32dfcc63ba0e129e85b8831c8907d90223352305a45a62a466fa25d50a933ccbafe4d698e45dfc4a6ea393cc6b458529a815b5c584cf4e81f0761893397e99b4d749e61598b93a8fe77e4c5af4ba35e7a52ea279074cf379a66bbe15169bbbfa8dcd8e58265f4491c977c2429b4f115a672ca32c4e4146d9058b92057ea3a42b56a42c242b52ba61a4764b01a9ee18a9ddfd92ea81b9d31e14eed4130b6d4f8ad07a6151b2280551d21b8b92c57ea3646bcc79f72273de6d30527ba780541f8cd412bfa4fa629297fa95bc2d26b9c4afe47e589565590aaa2c1998daa57ed5ee8f492ef32b790006a43c054006ea848b533112e9dd8a756a0fc663855f1e837592f95ca395bae4cfa7eb6866dab8c3eb88578cb6c3c2aba0096f0816de3e34e1656231b5ca6f4c6daf93ccfb642b7df6c90ed509e68a54f9ec581f86095eed53f0704c70b54fc12330c1353e058fc4dc625fbf6e9185a95ceb53e56cccdfea7cfadb282c0bae4f41169c83816ef00b3a1703bdc627e83c4ce5b57e551e8d45e13a9f51384627986fceb93e11c119b8e0b1986fec9702df188709df3f05c2c763b1b8c16f2cee80156107d014613b62961ce8d79209983f1ee4d31f77c2d2e6469f6973678cc5c17e594cc4241fe257f224ac167aa8cf5a683ea6f2617e559e8c493edcafe42998cb1de1d3e50a30973bd2a7cb4dc5586cf2cb621a96911c4593914cc72c39daaf253330f8c7f8843f1353f958bf2acfc21cf1389f8eb80b16abc7d3c46a2116de0934e1cdc6c23b9126bc39980b9ce4d705e66219f3c93e33e67998e0537c0ade154b67a7fa4c674598e0d37c0a9e8fc5dee97e63af18f3c33368fc7001565b3d3305b5d58518a6b3fc62da0d8bd9b37dc6ecee3ac1bcd7f89cb0ff5ee33db0dcf95c9fb9f39e18e8f3fc825ea4933cc0ba3d3f11952fc3052fc672930b7ce6267b612c2ef4cb626f4ce58b7caabc44277890757b712282636ce7b614137c894fc12518e44bfd425e8641becc27e4522ca7bb3c05395d19c6e30abf3cca311e57fae4b11c4bd957f94cd92b7482f9ecdbab13111c63f6ed4a0cf2357e21576090aff509791f8cc5753e59acd208cecab26e43ab58536c4caa64568b7b1eda2239ef37755b935eaf63a69d637b4398cfb1e53868f5c5e6d756eaa29dab736322d17e035e5dabd209e6b73785a34f6852ff4505d002f7abd5582e79730a72c96a4cf82d29105e83e50eb7facd1df6c52a9bb7f9ac6cd6ea04f393ca6e4f44f07978f15c8709bec3a7e07a0cf29d7e21376075e3bb7cd68dd7602adfed57e5b55862bc274589719d2e007e06d4bd8930f91b17bc1e837d9f4fd8fb61b0eff70b7b7f2cef78200579c7064ced07fdaa7d00a6f6432950fb404cf8c329107e1026fc911408df8801dfec17f8c1ba8a51b6751b5ac09ae6d83855b1f07644dca30957761e13959dde51d625a203568139048bfcc75310f9876291ff84dfc83f0c53fbc914a87d3826fca914083f026b813c1dd69c5059206ea3d77bcd61fc04e6b52282d51ab191e22ccb99d6fbb9d69bd5c2a5f9137d3d5777c000ff1aba1677fc6a91444a3c9eca7e2466e5333a2b8f68b4728155e3e689ce4ea055e2ef9922e9726bf849f276029dd9f8e5542bd9daf5fa2261053f33748df87aa4b487bf2db3243608bbb85c27bd8804febd373d3049fc74f9dac633b421539858ddbc175a72bc9e78ba0923fd2ce64f3044dba65ceb3736ad6a2b535c62f946ad8873dbda6271a6e7ea286d23bfc59fa7ca9f8ec2ac7c4e67e5ce2e2b2173dbce6922c6aa848d6e2d9d3104dfc44a2bf0575e2c3b1ab3ec799d6513138abf7ccb87cac08215ff311779e3c5b66330db5ed0d936c665db6c113b2ba565fc6e5d9359722c66c98b3a4b8e4d737e16f94d817555ab89cb2c2faf95b97c9d072f87ec702b7859d220aa1930d7e315acd4e56dc761d45fd251cf4f286d140a1a7546e46ac763f6bdacb3af90d0abf8d37d4530dc2abb3a5c2182ae60fbb1c87ab654c4ea0998d5afe8acde29a6d5b8a645c216de7b572f6d54a5317f5a2a0945a78be463f344ccae577576ede1b966375fbc71d6ed7412b05d05fcd4049389e793301eafe978ec9296329bba343f19b3f975ac9ee2cd07940f175aef4a852018cf5e3dc28b65a76096bda1b36c07c4b205227d56caba89ddd456ad968532159745c5064d1be554cca23775164d23cc7d55acf26f4a2c5b2b45e99d3a4b4fc32c7d4b67e904868da6e8720aa70525e2996d1d673243c472ad680d955a25eefa145a753a66d5db89b4099ce1c21ac202110bb5d6b73c1dae8851fa3965a4ceb23330cbded15936256ece9958ab00cf4363b55993cd29cfc46c7c5767e374d427798d7799f591b295e78c2bac2f6a45f75d6d9cbc442f33d525e15998adefe96c2d276e3dd45b2541ada064b70e160a6faf68cc7952d31e4e86d3d918a7f7759c1634592b2b3621ff1ccec1387ca0e330d963da3021459c8b59f8a1cec2991e2ddc4d78f46a24469ac2def3307b3fd2d95b44e8d97549d4355241e07c8cc0c7a9aa83d8795b3ea881d05b750166d527580f8557aba6892fa263c89de7242ed78b7d1762f67daab36f471f35c77a511aadb6ec5b2edb79b855c551df7ab1e922cca6cfbcc5993befc917fd093ca5c56ba5d0961e1763f67d8ed9e7a5cd68db3a5dd623226ff98847ecda61aa6a8e9760f67da1b36f108bdd2bc8cfe4a0d0f2524ccb2f63f7ed798985f949c502a5ef5d8659fd95ceea1168da2a6e1caa8779c4f2c6fe6c5e1e3668eb62c9f5ef5f8ee9fdb54eeff1715b5c33c5d820ef7dacb4f2bc5acb363edda05ed3fe8d1503c9b720afc0ecf906ab41c64e23bc353c4fd4aaea34e56a226309bc36b23c85165e8959f86d226d64fdd8c04ce17bbc1fbc44f65145c7573ac707aec26cfc0eeba14aa41f20112b93cb3192b7f46accd2ef7596ce482836dd233d763a54763765bc5e8359fb83cedadde3c62b6dcf38759ff9b5188d1f753426792c33ec990c7c14c87e3b5f7c5d2afeaa17395abd25b846d4de0a44a9a2ef0581efbc58771d66dd4f3aeb86bbea01b98d3b3fab6ba1a57f5d54ed39d5e5e1f598d63f63bd734e4fb0bda0b23136bccc2b81bf8ef52655a9f106ccd65f74b6e678aeb354b0758cb7b1edb179fb1c38fbcb58967bb1e046cc825fb1de9444626bb61c3dadb0ee7839511aa3273cb9384bd6de9b307b7fd3d99be7b2778ab0c0ee13a977b402704d63e50cc95a713366c5ef8995eefa589b2ff4ac97fbc79b115fb76096fe91d87886ded2f8e319e9b4f156ccc63f7536ce41731135eb69b9b4758a68dd55098b93b38fdaf2db30cbfff2d6b3e7b6bc69677cdd8e59f537562b895f232d12ef4a648f9e1ab16f0aebeec0acfb27913ea2446b254a762c2b97c4911c3933d58b7d7762f6fdabb32f3bae7d112ddc1646daf9a9ab91dc8569ff3fac46929cf6769bbc5cd4caec3a71acb1122f16dc8d59f05f22651b2c6dbd976dceb23ad1523cd9fafd3d98a5ac998fba48a2f58d5459712f6645486785bbbe8fc55762f5fde4e22bf9d4751f666b5867eb449fe5557acbe2fb31db9ae96cdbb331e748fd38a31a21487ea6416a72a2073022cdfda4cf587117bb8f24b9787d10b3a285ce0af72a0f2c7dc69b0b9dee94f91066654b9d95ee19a3fa3a973e0f32a72ff061cce6563a9b7312f44f5cd358de995c5df211cc82d63a0b129ba53fd5a05ef8cd987d6d74f6b9fba6a347bca36b5d116ba3e7a327d7179bbcb58f62d6b6d5599b9b82fc128fb36473cbc7301bdae96c989d70095f28ec32b725fe3866777b9dddf5ae768397917fec7c42777b2e9e4c4c4e31b3f7b84b953c2f149fc02876d051f43a86cddbfd34bdc04f627a6fa5d37baac7d8c7c83aad731f9585cfe15928732e3e7295ebc9cea7303b3beaecdc1b8d1fa70689b533139194e857a927f33446a6938e4cb627322a8679ffd50af9ab06e1cda9f2df6730ed3b2752c7c57a89e3d571d33ddaf42c666517ac3691fa54ea3ea50ef7c55d45bdc4ae3baf965f7bb1f639ccdaae3a6b77473d52a7879a7507e328f15f7bfb36351efe3c46a31b56d7f75e3ef31ec905cc9e87c86b56fcebd479ef0b9805dd75168c65f17a269dfdc676ff78b5a83fe6c76c9fa462aeda8b982d3db0d6a6b75e5635dba6aa71fcb442da94d89c738a7ef197309b7bea6c5e1fd7e6026197ca47ec555370ce985d5b8c88f46217f665e48b482d315199a99e85f632c6b317d66f9a2c4f9836bc514c95adaf60b6f6d6d93ace87adb6d7ec62fdbb5eb68813cb45bc58f32a66cdd63a6bdcf373bd5863b789f9373c9dd749bb9a260e5fc3acde4667f5421f56dba3f3a948eff1792493fbbf8e91e8a323b1a3c7922c19ebfddbf40666535f9d4d933cdac44b5f5edf5f679554cb7dd9965c3fe39b9875dbeaacdb01ad4b46ef08db542b51dec22ceaa7b368016a51741f63ec99be89d43fbcaf8b4b3e577a1be390a1e330d4030715a73c6fd2f7b5243767f51d4ce3fe3a8db763f166f046f67528174f79af636a52cdbb98a603b01a7ba29eeeeef929913ddab1eab8fed2cb7b982d0313eb21d0cf878f37d680cfa08e355e997c6a781fb37210d62ef196cfd9b5abe8b7d1630fb01736d130f2c5ca7bde32f562f30798cd8375360f76c56c244cead4f421a6e776898cd6c1fcc9adf374a973a22dde64c7c33fc22c18a2b36071631da1696608400f4c34e5a9df78a1f23146255347c5bd97880ad14bae12b10c4b71a9c94d3ec12cdb5e67997b2696d79a45538e5c7e8a593ad4ff48fa189617c73e5dbae5bff262c1679805c3121f49e7617a1f49b7edc39ea72a863ec7ec1baeb32fdeaa442f7302d335aff60bccc21158af42ec1aca7cd97718ed6153c478466d8c7c31f2dbb962eda94d26f64e90c995de5f62568f4c24e5e9c34fae548c5f9f6f65fd2f14e29b504f1552ec95add5e237bc0e9435ca7a0566048f6c2ccf463acabec8731e7e95e5833c4d1437965c7c13eed812b22c382d2d72e2bf21210e561ded165aee6264ffb252482e0571395210b2f703e43d31231bdbec6abbf27856e8caf091a01487d6c5b7692f64fbf150a895b448c9b2487347d8e22ccde6b19a2163359cc527c8848625e94df1b518d5cc9e1ca7f3a19e516461ead0e96e0b9823dbca217e2ad11211cc3cd1b4c337db8c1b322c2b75218f100254ed27aeb805200bd089eb2ddccdee84ab65f600f03b96cc562dc2d93c467228b1f10dfa0b44adb6c60267ef23a572640c605d20107e128a20cca544d8c9ba518db8198c0f7b7201f6625dbe94722e5b15086037b68e00cba304d64d24d5252c9b4576780a32b84eed22e0465382eba201c705f289997cc38b06f1b42c10d096b208b431d4dee64c9ed3c4e896bd9798da51c7f6ba2080cb6c1f013796125c0fc6c4048d448b8520c03b15140ae328e1b5034975aea37f290898faf489601a4f89a90dc014d90635088836f58820da8112514781c89eab5a6fb523ecf95e0bac2765f2ef20e06a3d30826b474a5c5b018f9a223a7d78e3c96eecd605a44231695604d6044a582d05acba40957fcd3b44e0ec4409879faf3eb7b13da9860ceded8b8a4485a281f16997bc0a314f76330601e0ad2073df9912606b9014b99a7c143508805ee81c0134315d95045b8520e552e30a229826515712e68ad1bcc8eac86034723680a4969faea4a636940e02a073bb46004da604c4cf3b56adc0a9628fab522bfb564d17bec2d6dee3a448785899f0b74a2bc02040e4ff2988532821f665cc018ff7b2f28332ca1b8f1e2f0b78fbb01be8772da044d941e669cadfd6cb8a85bd1a2208a8ce0479db54fa36a23ac64d0d590501d113032288a6a5ab8f8b77d9c0392caadb264875fc3f5a45c04da7eee382e0e086fcf9a2d70bfa5c402a1da03b7a0625bcf6a0d211d95fde3ed52208a06e05f5fc99d42344b345f25be53a2e8d2f49a815210501d8d27004d82cfa3e2fdbb3dc33ef6c558280eb17d08db34b7a87389c9318cb0296fd578291c842fa01355eb528104107b9eafa448b08b4d9d4de36554c03681081478e778c1cf75967b50af856bc4100f709003787ba6b1a9eb21ec4615b3ed74cc19a4b3f49c09ecf630f7d04bb65390178d93cea6eeb220bda1496f849c94100b849b4095ab57009774f024f7e4a9e37eaf8e4c18eccee25a9114feb65f9eb984cc877ee334ef35de164c0cca47bcc32e3e67399094f64c9f43c092133c9196d990955d2337d7681657a98a698e9290bcc4cb82e93e9a900cf4c2a3fc9f4d42391e9a9029b99d084bb4c4fb3cc323d7704e874c6e71565468db466c66c3d676ac7ce32b5ddfc99c8248acc18735032913195cc38fd9299490d8a66225d789909cc6dc88c3148961977b03f33819664648ebd7e6e7c369f635ff47f7cfa7bb65807c1211c2129d8359962ea9a0c8f3b7bb5032f5d62aded596241cc75ebd0274a872279f48cbd9d9daab1e8b469e3a8d36c958881c9d46bd68329690b4cc29913489cd7009c0b4dc2991b489caf039cbb9984332f90385b831ed4dd4dc2393a9038c7039c7b9884734c2071ce0738f73409e7d840e2dc0fe05c443dbeb44456809c58ed0a3aff8c0c5f672a7cff63117c8ba9a7e1d93b86d86d5bd57a881a654a1db48154d0ba00687ba52309af401331547f091b6fe5896438db53e19c0caa3f7b9b84735c2071f60738979884737420713e0412fb529370e60512e7350067894938c70612e79f00e73293708e0924ce7701ce5293708e0a24ce7280b3cc249cb981c4790cc0596e12ce9c40e25c07702ea79e001bab25ee4ce8a303d88c7c0fd439579882323790280f031d1a2b4d4199134894e300ca0a4a94dd25ca52390ae9deded056ddde3a2f9b0e640b2a904b40f2de8712643f09b2d2fa88fbe35ad14b04e709c4eec324844bd6839909bc7415f5ca32354c9fe8b411fe7dadf83678607703e57b653aba86b3656e6aef89bf84a93db083d935fc37c05745bfaed64eea332d05342bcf02e06ddb025cabd3914766cbe43b8f2536ff2ec8497934805bdd949522288e57d6c950b6a242590dcaf21aead5b7b3c5e7f686abb52cc6ee8601c80f87001fdc371d0bb3c6a47f9c716b2a784f0278b594f08633670d92ff74055b69099921ea886522cf9cc3f87987452c72ea61f4590e5b42ddb237a85bd6a5c367c7a5df67c972ca8f81cfd6a7d3672b6423927b2ef74efec3e44ec522f4d98e6122ecdb019f6da0c4de93c56eb53bcb7ad2e136321f6e074afb3526c11c1b4098ed01ccb526c1cc0b20cc5600e63a936012f67492c16c0d60ae3709664e0061b60030f7330926e1fc4c32982d01ccfd4d824958352283d90cc0dc6012cc2076843407300f3009e6b800c2ec00601e6812ccf10184b915807950d3f676daa27827086963328f0ae5bd00e5464a944399b30d5fc9d47aef79d6fff9f955bc07d4d9769f2c863ccae533f85dbea555052df2ae54c85780f6fbc194c8db0ae42bc5126a7b49f70a012f78dd747c8a93427648532678e7098684de771615ca1740823f947aa3217b408d2772beb94025b3bbdf6c1664e80653a1eb06bcf0304a7443a2f2ca12216c9aec2a2eb772c67291b0d788f1a20616eb5443523f252be32f007e7a783a927c6215a620a2cc017e7b0425ca412ebfb527c9d85369a233802dad2a750ff0d82329316fab29a4123d3c9e14ed6554684f026837356d6610742ffd01640647356555aa40145ccb244ac2ae3bb2fac097c02b8fa646992f76faaa96fb1bf13378f94ca6d5ccdef34cedfa64efa515bc0a7e73e095c7d06fb6ca67262d110f78e025a2884ad37444b252fe7480f0d874201cbbc5217c0e203c8e1261571699a218d956cc5e1116f459c5cf0088c79bb47f07e91241329c478142e604937092ae6923c37903c079a2493849575c92e1fc10e03cc9249ca4b391c870f6055dc3279b8493746b0a329c1301ce534cc249baf89f0ce75e00e7a926e124dd9a820ce7a100e769e9ee2f4a7c8a2ce10c25b229b2d300dad3d331da9ed878d128ca8988642346eb01cc334c8249d8674406730f00f34c93601226733298b300ccb34c824938dd8b0ce61400f36c93600671947d0280794e53c2740e5890c2241bb26801609e6b124cc2644e06b33380799e4930090b203298dd00ccf34d824958352283d90bc0bcc024988495763298db0098179a049370f51019ccdd01cc8b4cd9728a34c724db24e04dd0617cb12928730389f240e09597988232279028fb019497a66327a45172e8378234c83b21fdc622f82ea3df474e4d872db41e2d67918d2bec03ea2a1872a064ea400e25ab020190979bb38d4f10d7086d0205cd15f4ab2cea997d5cc34ca6b6370b5e32ee0ebcefca74781fdc68af90cd65d3e5897ecbad1fad4bc7241832ef3b16a0bc8abefa0d57f72cb1bc90a3e38ba74aadbf6d51d3ac2b9f801d75c07300f646ea00605e9d8e81b27a71ee685de330993aba505d75ab2f482b3e646847835cf21a53d192b674c8d0de00bcf65a7316a9122e9e266b7fff0f78e975e9e8cc48fc3c21329864bbbaef0afcf27a9360127a2619cc3900e60d26c124ec6623833903c0bcd12498841dc064307706306f320926e1c6666430670398379b043388c78aec0260de62124cc2e15c3298e300cc5b4d824938d1800ce64800f3369360120ee792c1dc09c0bcdd2498848d493298e301cc3b286166b0d87385e36fc94358be936dc973396860ded994bb736d097b6a4f00be7a97493009cb7732985301ccbbd33132c9fbe4d7882d7bf829d4695ad14b866f38c0770f25bede005ff4763d5c58e4bca0202f917e0f00bd371dabcc39d02d6b95f96900e17de94038668b43381720bcdfecea1061af265975681f301de6014abcea548c6c30829e26df241bf7f90bf8e68394f0329973b7ad1ae07dea98b0623184b6da12cdc32cb79e6e69fb19fd0baaee0f35cd2aca44c630095b45649e3c1c64030fa76b3b94c87c1038a5817c260819c4534176f0483afc536507758d754efd867bcefdb708933ed9fe5b7782a4bfd99c2d2283783ec63ce0a58fa6ab9da492fa0c51f247da48bc989a2b6b0241dd05a910007d8c12e80057b2af15624a84005bc8969afcbf00c9ff71ea7ea6799acad56ceb276b84c872a17ca49215bc6ad460e0af4f50c2eceff2d748b53ff1ca14a1b792d5039e07defa643aea01b0b0d2eff611d9e543594f8a76618808edb600ed539468fbb04437de5dc8ecf5eb5c542e6d9d806c31424f50fd7f3a1ddbfd243eeb2e88e3a11380973e6312ce7181c4d905e07cd6249ca30389f35e50fe3f67124ed253ddc8705e02703e6f12ceb181c4f91dc0f9824938c70412e74b00e78b26e124ddb8820ce7de00e74b26e1cc0d24cec301ce974dc29913489cfb029caf5077edf126a7bd0c9b7787948b9f9788cff7138d4e7b61769150ad81f1f360c8809653019d0e80be9a8ed1d15c57a3330da3a36427b91c0ce0bd46096f1b96685bddb9df1ce18cfa105507c852d0527fdd44a884dd1f64509700a86f98089570551219d45341abfd4d13a11296f064508f0150df32112ae18c7b32a84700a86f9b089570363319d48301d4774c844a38fc4106f50000f5dda6990195c83ef284fe4ab68ffc105007788f126d2ec306edd438e814ebdf2aeb7ffc6fdb10deba5a2e3679e1cace617ca2c45a11c42acbc3d7307b50ba9845cee024f5ef5d12c1924c248c629148789f3212b663cea1e9958caf1c29b37e345300aeb6c4d963fe6aaa4facd526415cbaf31fc84a3e4827ea324d869178d642889a2c6bd901642d1fa673c245a99844512bb387a9e26ffee32d6d62f07dc0973f32672f3dc2fe05b2d9818700941f53a2741f7c5e218bb948d7e17cb6a5cf6a7d09c0fe241d2bfe4689054269ee6024f3d5dd00be4fcdddd12c88eb013e0515b1cf9a7261af3347253dd793cc4f4f00303f370926a16792c13c17c0fcc22498847db464308f0630bf3409661017561c07607e65124cc23e5932980700985f9b049370d4800ce68100e63726c124acb493c12c0530bf35092661af2b19cc3200f33b936012aee52783791e80f9bd49308378a8c0f900e60f4ddba704bbe708abec64dd73ff8076fa8f666fe1415820916de1b12fc0fb1325de0e12af7d6e83bda2cf965d41b910b20515380692f8cf4d99c49d03d384499cec10d4edc110c72f9428fba1493cb1ce38c24a1259675c0180fbabc97083b858772700f73793e112363cc9e0ee0ae0fe6e32dc209e3a3203c0fdc364b8849d796470770370ff34192e61b73319dc2200f72f4ab8dd58640b1a75b55529065bd00575e399f1a0e2ffb7b9fba105316f3d1aa0fd279d5376ca2c61abc5cb0aeb49a12052c1a23b58823e65e72e00f8df74ed42355b4c7658e59a405960fdac568418e4cc208b4580fecfdccc80b02b902c33c805c5d57f4dd94fe09cf14458f293cd78fa1a247bd69c10e5562c565f551d1dbab654e8c220818728d1c5db0231f887bf6c0f5086295146efdbcba7e2964901913ae8963dfff95990e89b51e256d31cf3d89674b0c172e0adcd29f1e94a76fd4a2a7b854a8dc820ecc9e5a49ef93715da75a0646f4189b697062d14187d7e49104f305903127a4b9370e60412e71500672b9370e60612e78b00676b9370e60512e79f00671b93708e0e24ce1c5014b53509e79840e29c0970b63309e7d840e2ac0738db53e21cc8a2378d9fcad6313e39a281a9a56173ad9f97313e71a788d90b77e70af469e9c2eb4c0599b71615e40ee9a8e84736e6ae160dcd4a4bd02aeb0735accee5c5696af193a1dd0c0aabadd2911d24bec171204f1c07383b9a84735c20716e0d70763209e7e840e2bc1fe4a39d4dc29917489c97029c5d4cc2393690387f0238bb9a84734c2071be067076330927e9d41c329c4b00ceee26e1cc0d24ce2301ce1e26e1cc0924ce5a80b32725ce7823f1ce844e38639fac45f413a873f63205654e20519682ce91de9428e15c26bee576bd45a2c652860f292f949b6fdbdb6b95077a2e531d48e65b37a56f4271a41bc6922d63dc0f24f36d2851f23cbf80e9272f066f7ae240e0817d28b1a9a5b4d972ca82bd8bbe3dc54b7d14f423dcd702987d2961c233c6b7944dae8a00bc6dd3d1299ccc2657a4b549b2799dd341ded8cf54b4c15ce17107f0da8c74e49fd8644567093e2690fb870d077edadf249841dc3f6c048039c0249841dc3f6c7b0073a0493083b87fd850007390493083b87fd8100073b0493083d888cc0430b733096610f70f1b04600e31096610f70fdb0ec0cc34096610f70fcb0230b737096610f70fcb063087366d1fa62dca5e344858969375c63d00500e4b47ffd1d8f4f71f912d71798a45e00d6f4a3f4cdb3961649b5cbd05fc70443afc707cfafd90ac47e813e08723d3e187bc13b85214302b840af58e3d3f828c721ef0c32c73923461294d96a44783a1db6cfa2acf4ae181fca7f6c126e5962af32d26a5ac94a9c59efcac643e933d78c3b6ed40121f958efe74e8975e7ad48397e40f07493e87122d1fc69dc774abd409f74cc8a0c2d61978646e3a72cac45a3441ec509b0850e651a21ccc9c8b53f80af3b54c1d013585d92bcf796bc6ce3fb7b443a19e00497d74ba7351fd72ff6251555a2d8a272eae8ad687c94ea45f0e4afb314d9b1d04bd4dde1d78e9d8a6ac833a133c61d94e96e03f0328c751a2f4be090561959eac167a1ac039de249c3981c4f934c0b9834938730389f37b8073479370e60512677f50a24f3009e7e840e29c0a70ee64124ed23120329c2b01ce9d2971f6d1e0d457e51732bbbb8e8bcaa56d210da5c2ca00d689f49d76892e0fc809e4a0ef5c00739249308338e83b0fc0cc37096610a7bd0e0430279b043388d35e270198534c8219c469afb7824a7c8149308338edf5360073aa493083d84b7f338039cd2498419cf67a0b8039dd2498419cf67a238039c32498419cf67a138039d3a4763ae96a35b276fa4100e72c937092568fc8705e0b70ee62124ed23d64c870be0f70169a8493743b33ba594aa02534db249ca49bed91e1dc11e09c63124ed21595643817029c734dc249bad91e19ce0d00e73c4a9cf894c4444e7521444b76aa4b2140bb2b25da2e12ed68ebff5532f01231a93be81ba3dcc422088b2811aa5db5e38f0fa9f97591935df22da11cf07adad1a21ba8fcb412f8e97c4ac87d9973e2628510542b92bbbd6df996b5a7f6c3a05e5a4c09d6db667c84792919ca7700ca05a6a0246d2d91a13c0424f785a6a0246dc793a11c0550ee96ce9cb35c1ef83097a9631eb6ac9cf33a90dc77a7049be1025b29d672d40b31911548b1fa4783d8d57c0ec0bb87295900e9645a324ffd0da0dcd31494a47343c8505683dc74513a50628b0f9cab36091338d9aacd7f5804e5624a94fd05ca99ac4e9c33c4d7685688a584fce7913c74895c533cd9ba2f1507e8f0f7d3ac6bb925b62c80dd266d00e0bd2801ab135b4789d67d9ad7ba9325750672cdbd9b32d70c7e59be12a05c4289d2bdecb0465496d6cbda27ecca9b2c2a51e5f2d93cf05dbef5ab0a5ad05da940ff01402fa504dd2d8ecf2a4b4917739d1722c258074af9124a8cf601f7ca72d56d1759164b868e6c1d5c5750e82c4b47ab08ebab8f9fc009e7d99125f08b40022fa5c4db9d453660e155270870a6a590bd5233b8a713fc0cfcb42c1d634ac96d1b4dd84622dbe6e25b80b63c1d8510d6468a14428465395921b43748eacb293176607cb7107ba0589d5a30537826cf3f8397b43b01ff5bd1b415775b14f9aa76b20d02ee073eb8921ea5ead92cb23e5961e586f56c8698b85026fcb38e553035084786926cbd5b6fe09515e9c815b31b73c632002e4da3ed6489fb5980711f4a8c5c00075620022e67f6992efcd3fdc060709178cb77fb22ac04ada4823913c05cd59439a5b3379330a724ebcd7c15e49495e940991d632428d8136ade075e59458952cd49cadbe2e6246d00085753225483bedc1ba78a4a788350a2d0fa49a9c82fe7b2b56cb5c83feb440ba826d0cdc659006c3525d8ce8e0ad10cc6677096593caa455227af068da402b8350058d39435cae0a3ec0350ee4b8952ed649c2bba31b68ced776783f2ba361de535d649e11cdd09e2aaf4bd801fd6a5c30ff3d23fca4856a06c02f0ea9bd60f83de59f10b40d9d094ad19e76e86842bd0c946713e07b9e31a4a94d91aaff4328a636f6a1a99af1159979186aedfd9545dbf3d00feb594f8bd1e383f9e3263203b703e0fe05c6712ce7181c4d916e05c6f12ced181c4791b28b6f63309675e20719e0d70ee6f12ceb181c4f925c0b9c1249ca447dd91e17c02e03cc0249ca30289734f80f3409370e60612e7a100e74126e124dde0870c6735c0b99112a79a80cd3be8d6885ef70696b6410cb2ae91dd01be83d3e18d982f46ef8f44d84d4786f378506d3fc4249ca47b7192e1bc03e03cd4249cb981c4f92dc079984938f30289735b3083fd7093708e0e24ce7c80f30893708e0924ce1280f3484a9cad858072ab52644fe0e292c97091ad446b092a429b2871f9dbff88707758b2fd8f76019e781425da210c1be8500b00ecd53f55e26f3e95a641889c2a7c979b651f9e978665804ba9fcb800f8f1d1e9680f8d128dc72d6541ea1f00df3194f8bced8840d8322743f91aa86d1e6b0a4ad23e23329407801cf438535092f61791a16c0b501e4f89524d7ce5b336a7333e1393cfd75c21a6bed6067a7ee611208f3ca129bd118a5b12c833858e0479e4899428f952d3790c9e563d9f61eb2d08cfaf264bd6ad814f9e948eea7b324b4d49734cb2599c83818f9e6c2a5ad22a1219da6b81d79e4289b627f33241363790a760bd03609e6a12cc20ce37fe0ac03ccd2498413c05eb2d00f374936006f114acb701cc334c8219c453b05e0730cf340966104fc17a13c03ccb249841dcceec6500f36c936006f114ac5700cc734c8219c436fbd700e6b926c10ce239c0df0398e7356d5f922dca5e4f4488926c695618f46c9e4f89324383d2dbae7084cd4bb25de12e01dd20179893ecc705b2adbe14c0bcd02498416cab97009817990433886df5c500e6c526c10c625b7d2f00f312936006b1adbe278079a9493083d8565f04605e6612cc20b6d5e70398979b0433886df56200f30a4a986af7e1d8733dc6889d4008bdb20515c8b5a03d742525487c4667222397849524b271cb9f818f5e4589369339cf1a58299a963365e2e7db4df1690bfce7538511b56c3d8b3d999bd093c926dc0c029e7c3525eefe1a4fb66729715f5dcd668909b3352cd6324242c0648b08394f05f89a74f44225568005b1fd3405a0bc9612a5f76d55083bf5c83c731ac869af3309e7b840e21c05705e6f12ced181c4f92848ec379884332f90386f06386f3409e7d840e20c83c47e934938c70412e767c03b6f360927e9092e6438ab00ce5b4cc2493a904c86f34c80f3569370929ec14a86737f80f3364a9cfc461d8c13bc8e908e00d3ed2679dd78ca210e32af1b0b4aec3b4cc2493a624486b333c079a74938470712e7ed20b1df6512cebc40e2bc10e0bcdb249c630389f31b80f31e93708e0924cea701ce7b4dc2392a903817019cf799849374dd0619cec300cefb4dc29913489c3500e7039438fb30e77826e7d0c0f864d9b22d70dcb206d43f1fa4c4dadd85b5423b95817c7c926c75fb583000fc1025c8ed5c2097b1e8090b894f6d20444dd6a2df17a07e9812f510e69eda601f3fc60f029fc3f8b959f0f42c7b40784bcb209a01d88f50c2569bb18c635bda29842f82a26b33254235cb49f96b9d48ecbce09a26e1956f61b9ee95a0f87a34bd68b95cae6eb1a411ebec2342b464671f7d0cd03e4689d6db1642419c63bf01a07c3c1d5e9adcce3784ab94c8ea028500ed13a6a21d1548b48f8162eb494ab456145aea9101225bcd9901003dd5b439a42dca2e6c08a72492a17c0824e3a72951aab33347b98006f90cd7f9c00f9fa18497a1f1436fab8a09d72191ad2a3e1ff8e6b39478b398beb9999aa320496ba13b516d4cfd1780ff5c53e6b173ad9fec63fd55caea69f3d8b3a8fcf84780f2f974744867b3c8c1e3ba6a51b05bf51f805cf78574d43ca373dd44ea9e84392e5981f611f0d41729d10e72e5b8950c6effbbc012639f95305508e462cbd974f96367864098b71650613e01607e8912736e14e672b6dc123143f48bfedf2ee0da83fed5972923a1bd8804951fdbddd7332d45786404afe3af2fc87d5fa1c436d4e5bbfca72bac5c36e2bd91d180d9d6bf6bb6d89180eec0535f4d47552cb1157841dc52ab0478ef6b9428d56036ac3be88bb585b228e3a27245772019d6a154583b020f7d3d1d0d61b8e6b9ccb579fb9697019483fac21be96840606db1e8832809bd950ce75a80f34d9370924e1022c37915c0f996493849a7af91e17c19e07cdb249ca433a9c970b60245d33b26e1249de74f86330fe07cd7249ca433a9c970ce0138df330927e93c7f329c6b00cef729710e67ce7a680de82c516d7bbb515a2e7ec00d992fc28e9ecdea1c4424ac9f920d22fe0d8aac0f9aa6473691f34109e702909d0f5a0c3cfac3746410892fa224dc0e966c32fb14e0a91f99849374775d329cc300ce8f4dc2497aca3719ce875904e72726e1243d839e0ce7f500e7a726e11c1b489cff029c9f998493f40c7a329c1f029c9f9b8473542071ae0038bf300927e9197764384f0438bf3409674e2071ae0738bf4ac7101e06d399d0095b446403d0df803ae7d7a6a0243d15940ce5e1a071f98d292849974390a15c00507e4b89328fc59b16f17f79524f07100ddf51464327a6a6b337c18476322ffe1d1453df53e2e373c6a12faa3ed362b99976a4af3478bda1db01883f5042544b2a78c0cb4566a064af969f046f824e08c0fb91125e62273ca88a52f092f281a09af493292083b8d2790500f9b329200927979381bc1a80fcc5149084a39c64202f05207f350524e1f27032908f0290bf99029270851319c8db01c8df4d0149d84f4406f27100f20f534006b13dfe1800f9a729200967cc93817c0680fccb14908447a393817c0a80fcbb293bdba038d20a105923b10ea0fc8712654fe66541cce8401e37dd17c0fcd72498413c6e3a03c0fc9f493083785cda3600e67f26c10ce256587d004c7eaea831308358007505304326c10ce271d3dd00ccb049308378dc744700b39949308378dc742700b3b9493009db3f64300700982d4c8219c475ec0301cc969430bded804758fc900dd73e0850b6a244c9876ba78a15415cc5992cfa9c6e3278641b066dc522f05a37a51f3a370522f443b25dc2de057ed88612655fe6de5055bf31853d33887be97221ac8a7600f7322ab087001f6d4b09762073efb6646ff913d9039c0be4b38362174941ac779e07bcb71d2564f729213650be7318cf530bb49dc663acd283146b0b2aac55603e5bfb74e4af89559a825899df1164031d2851ea16a9269ec312a225cb6117012fddaa296b01c1dffcff53908f764c673e5a6129b1d07a596911719fa990b61d17c92a570dc0433b5157f297886665da670593e59c0f829cb3733a7c327ecee9de348d30d724db342d047cb24b3a3a44121b101e15c8dea58b41bed9d5249841ec5dba0cc0ec6612cc208eaf9f09607637096610c7d7cf06307b98043388e3eba703983d4d8219c4f1f53300cc5e26c10ce2f8fac900666f936006717cfd1400736b936006b19ff35800731b936006b14bee3800b30f25cc6c16ddbb998a45d28a10e934dad92122fcbd00febe94f8d5d4ee6ce9cfee71cf349d4843360aba0300b92d2548effb731356a5c876f13c0ce0ec6712ce9c40e2bc1ee0cc3009676e20717e0070f63709675e2071f601bda0034cc2493acd9b0ce7ce00e74093708e0924ce3d01ce4126e11c1b489c1b01cec1e91e834f7ca36842b4641b45cf0668b7a344ab763ee2eb30d78001e3b454e1c93c73218be01bd294531822aa13f737912d747d1b5490324d41991b4894078144bdbd2928730289720040399412e5f62cf6999bff574e2ddc0a001f4609bc1be37bc99558f6f32e3c2e6ab5f5f94aeb73ded957c1f613257c85b80b1ec616a0601a4e89b11f8b74d2d9d36997085fcd17136d2ac4c2857ce1c17c224e899c6557c6d40e74f50184bb12c01d4109d77d5e8c62602f9f29b5fe2a9493c5a75842aa588d80abbc764b9be4f809a8218ca4c4dec1ba992d3e2f96d64fb6589449ff260347b6566900f0d72cfa1e7bb580a1d055841589e22b0db9ea482a90db0090d9a654ac4867de9155ac7e0189799429287302897235a832e5a4a30dcf27816d39f39477079e989b8edea5c80a3abb6f6981a50ccf0fd575b2f5313fa1788dc8271bc4482769eb896c84730c409b672a5ad2ee1232b4b780a26834753b2956fe1999cc4058a73c8f6a32432dc83bc75062ccd060f43297847487cfae545e7a21c800c69a9b011096fa6419c0e72003184789b6bf403b43f867112b17cd4ebb5d5f2644a995c9ab44044c76cc789a665dcb2db1841bf293b5f2db02c0e3d391c3c2696650e014e1b1b5b439ecc55439ec329005ecd0348377896402846b44c8b28061a0f0da311db34a61279fea318df4a106bb536f1848ee13d25113509d7a7cf8783d28b2b0a1e64251b0112fa5cda0c23b06f8ea4ee9d8a704fa6afcc22bb87ebb07f0db9d29c1769160f9c2d92a197889409ca6517cb21e80eb00c289e66c9711c4658b8b01ca499428077840395f0c8cf0e5e073adbf54f7731d6d4e7a295585aa1454a8f2d39193c23d73eaace2cace37eb997bbf07d8931ac4237bde0060275382eded025b2370ae8c99190471d5d3dea0cc9f62e60e10849d2a643b40f400580b82bdfe8970f919d9faa79e209b984a897f184b744a101c59dd32a70575013e3f2d1d33aa133d587a3c254eb283a573810f4f3709e7b840e26c0370ce300927e96ee464386f65119c334dc29917489c67019cb34cc239369038bf0038773109e79840e27c1ce02c340927e94e13643817009cb34dc2991b489c07019c734cc29913489cab01ceb9e9e8acce16ffda57de5e9acfec1181e0f6f7370084f3cc5d0c49e89d648b21078346e6aea6cc49252d86c8fa525f012da22253509216416428f7075e39df1494a4c50f19ca36006571d39e7f03fbf683b8a5e6a120812f4857496e77447341eb64299e8661e7105547f2f3a0245f988e09661c6179e35142ea75d047ef5f0518774bef1c53fd18d374f983b4ed7f5f4085760440bbbba9d377498b22b2b97b3f02b47b988a96b4ee4986f6728076cf74144d395bdc8ca81d00c245e95952d604dbc2902d7bc803f816a7075f9eabbe99067c64d5f4ff00bebdcc39f333279033f2ee0230f7360966105b3d7703984b4c8219c48304ae0630979a0433880709dc0960969804338807095c09602e330966100f12b80ac02c35096610a7d45e0060969904338807095c0160969b04338847a9dd03602e370966108f527b04c05c41097308739fe7a93b6721f11ea320f6178d00a3422b9b7654c816656fd146d8d824db69ec2b302a54918e25345e267311b691c826ccec0180ee631ad020ce409a0180ae320d2861258a0ce81c00b4d234a0848d4fba199c0068956940091ba064401702a0abcddee3893003201bec5807f056a7e390f4512cb21639e86780ed08e0d53465ddd3395981b0ee791615cadf01ca7d2951b6b46e8a44a00dd60741dc10b83f8ba0aa35774f26c27e78b2043d143426ebd231a96b5463574819ab6091bdbf837db0ca0bc043ebd3b17540a403a4ce52b74cb6c1a1e82d6119754be09d0de958ce02d75f4c677cc5c53cc64f5858d1a8521ad66290e5a3734191b3c6dc7c3488db5b66014f5d4b89b633837bd6cf10c9bbccf2d26aeb3e929f920124db25a427c841d799b4726d3ca53f9235220b40525f6f12ce7181c43912e0dccf249ca30389733348ecfb9b84332f90386f0438379884736c20718640623fc0249c630289f323e09d079a8493742375329c9500e74126e1cc0d24ce9300ce8d26e1249d564386733f80f3e074f4aee7b81a9a415ec6b211c03b241dbbd1f26e8e02d1c151633521cb65a79cbd076db910582204c0c325d3d20542d6a33416203ed4a4a3ce49d7aed1edee01aa4a8799849374ba2c19ceb300cec34dc249ba150519cee700ce234cc249ba311f19ce1f00ce234dc249ba6d2419ce91a0cb789349384937e623c3391de03cca249ca4db4692e1ac01388f4ec789dc10a77ea38a5d2d46f646feb5e2bd3d704c0897ec60dee600ee3126c3259ce04506b72b807bacc97009677b92c1dd1ac03d8e7eb38a12b1fd4faddca662a644081ba3c11b85e76ea3101e6f528fd378ca194c643d4e9340adf40493708e0b24ce7e00e78926e11c1d489c0f80c47e924938f30289f33280f36493708e0d24ce5f01ce534cc239269038df00384f3509e7a840e25c06709e6612cedc40e23c0ae03cdd249ca43bd890e1ac0738cfa0c4b93d731fbfc707ecca2c1e7cf18bb233b23d2a0c0c06956ffd552b967091769a3c46b5ddf9c1a0e9792625f0ee2cf68e0dce9c950c24d97e756380e79e650ac820eecf3d14803cdb1490844b5ec9409e01409e630a48c2ee393290f900e4b9a680242cddc940f606dd20e7990292704710329017038f3c3f1da7bfaa6a5203bac208df0a7d8af54595a54fb5b8e3a6a6a9d2740355a56915a8345d908e6dae121d15259cdc4836265a0b32850b4d8249b8671819cc7a00f32293600671b4be0cc0bcd8249884ed233298cb01cc4b4c8249582325835901605e6a124cc2761219cc7d00cccb4c824958332583b90ac0bcdc249884ed2532989500e61526c124dc1a880c66158079a5493009cf402083b91ac0bc8a12665f165954c3672bf196fc0cb14fc334ebdf0a81b18cf14347b960be4a29d827bbae6211b057d3ef7953687d502ad623c19de896c84dd5f85e75a5d6dfb6d069d6b5dcfaaa8c0e2bd9fe74ad00d66bcc39f431882776ec0f92feb5a61e5a463afa49b6dfcd2e00ed75a6a2259df64086f63e90015c6fcecef46303799cd44ce0a73798043388c749cd02306f340966100ba77c00f326936006f138a9a900e6cd26c10ce271523b0198b798043388c7494d04306f350966108f93ca01306f330966108f931a0760de6e12cc201e27b52b807987493083789c5411807927fd2243b539ff6e8ccf0859c966b36a2172be105bc308171992352279e78e42789739874411d62dc9d66b3e09bcf16eb3cfe320ac6d92f5779e0bf0de4389b72b8bf4cfaf11fdef7c7bab65d233d3b2ff3cd961126b4072bfd79c733908933b19ca5f813fde97ae3de7d5781136c8413e4a4496bc738167de9f8ee13735ffb34e8c06d588399d36932d6bf1c123c04f1f3027c91356dec9927c369824fba0b9e72204f1b0d28dc04b1fa244dbc9ba29b004ac160f2aac4fd5b1288582460565ee4956f71c0472cf87d391c8136b5606b1236e1240f9483a0aa264462c095beb6449fc220076b3a9608378a6cc3900eca3a68225cc0ac8c01603b08f990a96b02d4f06761a00fbb8a96009fbeac9c04e06609f30156c10eba7d900ec93a682259c2b4206f66400f62953c112ce6822037b3c00fbb4a9608338ef6e1f00f61953c112ce7422035b01c03e4bdd07b044789fddc35f6991485bdf3e19be5300bee7cce90308e228fd5280f27993f608273d8a8a6c05c889a073ef059370929e9d4486f36e80f3459370929eec4586f33b80f3259370921e32498633030c92bc6c124ed22350c9704e06385f310927e92193741b60009cafd22f464c64d3ff85cc1e13e5a272697b4ac94ee5ee04b0bed6942b91dde34f419c575f0e60be6e12cc200ee75500986f98043388f3ea1703986f9a043388f3ea970998ad5ab8844f8b123e4594bb95b29850079a8c64d359b92840388852ebbe50f412d55badd7516c91f53f6f31b097f53fddf3903842752a5bc76ac4532eaf4cc8aeb2de72cdea58369fd8f01677880ed22132452f41bec59c176c45ac5c84be9ecd67f6e9a173ad7fd576070d024966a89bf58b79d6b3069e078a10565b9aac64b5c262e7e9a299a1d68253b93cf8c52e5633a5ae6b98bd2bdf4cd93f5161d95c228bd84c817b9eaccd64863a803b35cd73a6e85dab135ab5b4de1789286bb0ded5cb5fcc16248ba5374d16bb08da93f332437c2b69e71493c8d492cc8426a0640a178353fbd4377ccef91a11a3b685f385d3f018c914135775bf291684573bbe8dd8a03b2c87bb6528d4597a228f85d9c2b612ebb725e25adcc82a6bb4f55988ef156cf74e8e6cec971c29f749ac9277ea797c99dc0f634b7b9b3b5b489ffb54a62c05c5b3c84ef4fcf7cbc5be12e542eaccb896c6b70f4f8ded63c44a168f862ddafe7778bccb68176eda33d4cefa6b8115f3b6f0722b6ba9b5fee64a75af0ab316ff0fdc88867fb1600500 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/95f80ff4d863e7d44b00ec3f0c4318a0.asset.meta b/Assets/SerializedUdonPrograms/95f80ff4d863e7d44b00ec3f0c4318a0.asset.meta new file mode 100644 index 0000000..e48a634 --- /dev/null +++ b/Assets/SerializedUdonPrograms/95f80ff4d863e7d44b00ec3f0c4318a0.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 167035ab319d058438e1efe658920605 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/96ee11c7074d21e4f84d189ad35d45fc.asset b/Assets/SerializedUdonPrograms/96ee11c7074d21e4f84d189ad35d45fc.asset index 88b56d2..d10e526 100644 --- a/Assets/SerializedUdonPrograms/96ee11c7074d21e4f84d189ad35d45fc.asset +++ b/Assets/SerializedUdonPrograms/96ee11c7074d21e4f84d189ad35d45fc.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5b5b6f1b45149e75b2bee4429ad02629bdd042a12e6dbd4e6ff08090d22694407a516e12aa506b522775712e386e6979434242e29907fe0aff821f0312e205cef976361eefceec7a1d4f4843bdf25ee672e69cef5c66e6ac9df1047d9c4b745a110be296288965f1586c894dbabb45d70d3afca7a0fcbe68d0759dce15aabb24ce24f4e4cf796792ce73f4b4239ad4f39958a56b0df58ba24af773d4b74a4f5cba46df2ab572faa9d3b29811f7c45d31e11c4b20b1824e3bb2cc61b99c3c9d6f8a97545b05533c8887aa093a2d52cd0eea3688e9a0dd03f115c4daa0ba55ead31075a2f93528e6e7e9ec40265c5c79ed9357e6384bdf41f99ca16f81fbc97bb54f565ef3f27e4879663a75d9f647c318c329c62884c628483abfcbb67fc9f201d9ee0de539a0c3df118507959723093ce6e4f3a88e67d781a63f23ec2b625b7810e2420a930c7a261b2393ce667cfd9155f2b04d52fb3611d058c432ecad29ae8a2b5a8b38ee0c297cdfc2b9422d6a203a161de2b7c810cc5c9d8eaa62ce3b547e1bdec0065da39a9298a72bf77a24a6c8401f84a8acd0b0757289aa58a2f336e83d22b6a32d934462d30ff759209abe676e504900e8363dd7c1e122cecfc16915dccf51591371629322c54dbabec06851d91b74af1b734942a6e751efa0a6723f0c046a9a2169987b0fb6fa5a23ff854618faec9874c37e0fd1e4e788265e63e8071917139f4f63ca9f7adacaae080ff17e2182607a19a312eaeddbc7fb86b8162b8b1e1956f70948d0d270e3973f5efc7de3cf9fdc76d1ae0a0f53d8c904d1e280657a45673c42215e04d7ed2f33a361f81d1dfc3cbd398bfb08bfdfae8676e91590c5ccd4ae00875782c1a4b9289e504583582d895962a202b6eb92c9658854c734579365b7e9798b0666724b581faea3fd3d2a7b2a636944b7e5ac5c1a1435936f9288260565740acaefb7829223529c82f2bb72b514c41f3d82050382493c9810ecd321c883384fad22b84c65fed26916b535ccb76c5b1550576d89e531b50f50bc8305ff3370128f372f732f87f0d6633d08ac4bf0157bdc9a34d3afd30cd6e84bfb68db5cb7052a156a9bdeba79d17c316cdd7ab88701f76444b864164c10ba1a08cb79b9e509fbdc3ff4710b21c6d8130cc4b33afd602ff88355fd74ba51d2d96630ee16ec91390a56ca0b745d03175cbe2aa7d7f8b1e2353fb28b4f0b630f7bd2d914db3dfb52f0767680f5e6eacd72146679b07836197c4e67f02cdb9846196556c69bbc29879c4721e719ad9cc1dd4deac6ab85e7d82b3d239e75bcba6ec48f46cd7e94d7f1cc71ee98367484290f9b29174c94c7f74a7940e7fbc87f3cda17df5fa49ded175457a1f655ec9eb8fc3e51acd0d84c6f1a23b4b4d3de23de73273a9e21276133e7149bd92b6726cb1ed4e992cdfdb86e7d7bdd3867eb7cb3241ed2b12e38b1f810491dd6d6737a66ddd4c93bb95ec5aa7d4a8a584ece6c39432639ded2c931b38b6c3b4a77c1eb77d0d73772ddec4b3147f5f7a8c6cf5e7049e738f44eca6193942774527edc85b6fc34f0b4a2ab78eec3b52b5457a3789546aa374c529dd449f5496add0516384f75ab20a4fa0db7d0d13379581ac9464c929dd249f6656ac97c6db5db651a59f662c5dd68fa88098fd3264d9b2dcf47608be4f0a5e0bdf64b60b54ef741d6319df576ef99a326c9ded64936bfabe9606e575721fe8e93b5b486a8c9b3d7dc6ecb597825b7588066aad24f1b12112efd16c3b054fe2c58c3d035f17d0c32f1faccd1e1383c5bcc626cc6fa3e7af0d38ef0e0c4e514ab391e7b83ec6b0bd98e0addd53b5aa3f14acaf4fa612db24ae836139d24854e4725454baa749daff8a359f79c9428a0454823a81c3649cfb256fba456331e02c5c52ead29998b77d4d1125f612565d17c027765cc747879fc503a4615af78592189a384731de1512e834090a4edc17b3736ad6982e73116a73b74fc4a2539375366f4dfb50951161071778edaaf06384201e79c4d70c6000e9be90c863605f05701b46b002de786887fdab3e8d55d4a3f1a674730b3bd4026a1017a8fc3711753fc41e3fc3dd5128b11c72a766c4d4543dc6a4dfcfa09bbcc13fffbfff339b9cce6739e41180ca630c489a2cd387106fa0a34b6498dd22efecb619ef6f28ab0d0164d263b11b89b8832a084e10b36e11d96f0f2c06b0037a0cdab646bc0b9b68053e7af0f6c02372e815b958edd0c6d3454e6adda60c11694ae02e5459b500e819afe4db035d8066dc1d6a7c076c9266c67359191996822b5be293e973f5f3a6c76995100be6c13e011636cdc944dac8197b3059ea38057b209de69095e533cc102275d12cea25d5a73fcac02ad6713da098de3c765ff2c82396c0bccbc0266f9208139f50a825950c09cb209260fc4ce3e8b08e96f9d2cae22ad01d6af0076c52660a72251b23d616e7e756ed5ad8fda0236270e4da6a4cc9992ab6c1cf25f1ea218bb92f5530ca35252feadc61d2cd62a44b9826b2bdde0e117173744bacc703ccde45cc03555989086ea3dd3502ff21b3a49f792eb188ad18ac73f7239d4f25f57f59ef1d8f99da91ed85e32476ce19dffc9c6c66474f0f4eaff6b6e1b2d99cdbdd835a791dae9f9bfc2f68e1d4c9bee9dec1fb6dbf478b7369d9ea38f6cdab44fcd5f2b8468dfee403abd1ec232b75a6dc31e5ae973dfc39f08fefd713212a7902433539ba6a775c85a03d50d117c726e704c2029bf4c7dfda8c2736a037fce6ca0a5fb2fb53a883d983a0000 serializedProgramBytesString: - serializedSignature: 0264b0d757454032def2abaf4da69537cf42283d77d2d87455570dce659294eddb79f82ec0cbf602de1f45d195f2eabcc947cdee6646529630b670784efb1f06 + serializedSignature: d9369b1429ce5f11a0e883a153ca9ef664bad7b93e557d2479cb21dfc6e70b274bfc7a8f0100bcda37e12aed93e78a03e64553deb58170447f53e0a3e65a8408 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/97e4d9c03e6f9ca419382043245ce926.asset b/Assets/SerializedUdonPrograms/97e4d9c03e6f9ca419382043245ce926.asset new file mode 100644 index 0000000..d29b051 --- /dev/null +++ b/Assets/SerializedUdonPrograms/97e4d9c03e6f9ca419382043245ce926.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 97e4d9c03e6f9ca419382043245ce926 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e7702d5ea450820729094948a0a5b8b6589340bd104880941068429096babb517777a7eeeeeeeef2abbbcbbb333b937b6e6f9ebddddb7b36b3bc7ffa29cbad3cf3cc779ef167661ae530eb4f6c98f5d77c56cc26b1e16c1e2b672b59b5f5af49d67585f59ffd4bdd9fcb6aaceb52ebef32ebd9309695e24bfe6750ac9bf5f70ceb572d5b6d7d59c7165bd74af1bc845558ff9e617d5b61fde2779758ff57586fc59a581fcd6393d91c369b758d75492162bef8a856de8bf178c55a587f4f64ebada71542291e488e78d4d5faabc47a522b9eadb09456efedcef614d15a613d5b6c7d53c3aa2c998b84c4167f8f67e21fccbef496d72c79dddafabfa5fc7763f9ef16f2dff0fda6f2dac7e3fb7dc1772dc1bf39a10b5dbeef675f6313ac6b33ebfa37f8cdbffd5abed7df96d768998bac81f23a485eb3a5cc7f3ce8df5c5e07a788af9b8c21409617662de47598bc0e95fafe9b66f8c36d46b173813cce7222d0671808bb2578ceef6d1320ee2a1d2739d271929d8e8dce94e9f7897c3f475e47c86bae946dbdd3395bdecb93d70129f4cab7bf63a358dc66ad301baf92bf0be475a4bc164adda6485dff03bf83eaa2d2b448ca9c6c87d18869eeabf7f9f398fcade230da915edbcaf71ac9dfdb79d4c78bfd299da6ca301a83df16c7260b5d64a9749fe648f769f2db936c8e4dee70c407d89f56ee18a94b9334e231dd118fe9b62e4db313df4ba98392bfbd943343ca6d0a7e73b91b7dc6ad89fc6e93fc3d96a52edb7a7b7836c196d342b19e6887d3acb37dbfd9189668cbe353e8a9d2760747daee20e55649b92afe93ecdf31c5793090c3b93573c8ddd121774729579511db79d453e5a569f2ba83bcce60f5f978c41bf2de54799d2ec39cc912cb8099f2f994f8b75d3bfbe4e696463b3ad27a800c77560a99ea7ba55f4b8fefab7752c97793315b5e5b790cb395bcce0910666bdb165a7cefb085892964ceb5f9b6580d74b0e4b4dc207fef24afc5f25a22f9cf75d8c15c0f76904a9752a90b036960e9d2aabdfc3d4f5ee727eac2764ed4a951f3cce9149b2d65b600bff9758ebcdf12fce6ba4a9ead1e91327791d75d1d3aef46a7b3d5de15dfb56d036cc3cb776ef6b5871dbfd6b9b6ecd6a5f2fe9e0edd66c7f56e31197cabf4f0921f164816c50ec6c55207c576a1e3bd56e037bfee140f4ffcdbfab68db2ad7ee03effb635f8cd9fefe551d7452cd966b99c521076a90c5b96ff6d4e92ef2e66c9794ff72dbf96807b2552de3bf2bb72965c8fa9f778dcda80dffc7999c7b85568f4b3c26d3bdee5db252cb1fc9919b787e62fc87b4ba53ef35862de52f97b48fc9b5895bcb7ccfedd4ee95229bf990fb8ccb7f5db42d5a77bcb6b35d3d7b3558083cc8f561fb13eec5eca6e97bb84552edf59e988f71e7139adbb49dd5539a6dad979c8bbfcde3ef25a27afebe4756dfcdd8285f29e62b246eab6334b289bad5e6ffc3ebfee22b9b705bff97b3571d95baa7a73bd43575d7aeeeb88bbae0c70b3b3fdec770b951e1b6cb6edce95dc1e71e850c9dced57328cedca12cb8f5da5dc9f6db9ed15bffde5f500793d50bebf7b2247f13b55d99c4ab7ee52d66e0edd76b3756b2fdbffed651b8f1de4d0ed6042ddb6f3f89e5b5a1e66875ddfc7385c5e8f90d71940f6d6527760fff5edce43c133fe5bb63fd9212ca1be74d5e548796d9b223ebdc17bfc7a5480f8bb3d53edf96365dcf66489fdae3d6d1be878a18bace36c4edd3e90bf8fb7bfe974a3fc7d82fdbc83b29f13419c7818aa5ee3ef8c97cf647d145b00e27d88bcb710dc3b46de03f58790c79f9dec489f2d1ccf4f013274cf4f053ae89e6f94f7dbd9ba77566d9bd31c7139c4a1eb429650d6b1d393e32ade8161ab72da4b5a9e21bf5de448cb4576ba74ae729175a63e2dbba8b6f7598eb43cdb91968b3569798e7c560ed22d57deabd0a4ef12c061b17c762e7807a6857a7e1e90ab7b7e3ed041f7fc82c4b4eca2f2fc85485a42fd615a5e941c57f10e0cbb8387b4bc445e2f96575d197aa9bce649b91d3dc8bd4c5e6b5ce4f673c8ede441ee15f27ab98bdc2b117dd3094fd9ba1a2f5aca126d9dffb6ecb6eb2e2eb2ae625a5befa6faf557b3445bbf8625dafa32966cebd7ca67b0be926392b1bd59b2ad2f0776a2c2bd0ebc036d553dbf1ec8d53dbf01e8a07b7e234bb0f56eaa2d7313d3db3ad41fdafacdc9718deded085ba5bd5b5adee2e0acf856b1c4f648959d3edd957eaa6d703c73af1b37d9f28b0e92bf6f95f25648f95dc06f7ead76845b2dc39565638f33a59c36f2fe8df2be6a43df26c3bb47febe5dbef786e3bd3becdfa38e93bfef72f0bfdb612babe2f6561f973bc13318b77d58629b44ea1253ed69f58eba07d34ab5cd5271bd575eef73f05b29e56d097ef3f71e88eb3f4ab5d3ef97d723e3cf3a3ce348df36408f07f5b622740569e6bb8da4e2fc508a38fb29936a596299546bdbc1565fbbc87acc7ea7a75b7dff84bc3e29af8f4bf9ab59621f4af5c19e92bfeb1ccf553feef238fb2d2f057a28d9fc9bae1ee2afd2ed59797d5a86b38625f60b649f505b47a4db8e4df7996c0bc5d626da8ff86da5432f599ed7db2228afb5729f93d7e7e555e589750e06aaefecd6374a15964bbc62fbb2c4710cd51f96f92eb65e3e57fdd20d8ef7557bef45f97b3fc7fb0738de577dc197e4effd13df672f0339fcf72bf1b8c5547ffe55704ff57f5f8bf3c9526dae0313c366afb3c4fe9deac31d24dfeb0ebe830cd4f31ef2f7c18e38a9fa772bf09b5f0f75c83dd8c1ea5087dcc31cfaaab6e5dbf2fa563c8edb8d02df009eeccd4499ae36fd8a9471b8fca627f86dd974965bfb5f7d2bfbc6b123a58c5ee0379771a94c933b7059b1a31cfc8e00f7f9f568f97c6bf0db92dda78d8b7eafca77559fad27f8cdbf9deee15bd5d73dce11b7e3a48c83ecb8f5d9e8224b8d73beeb484365b35cde099a743d01a427ffadeaaddee0b7a5435f350ff91ed3dbf6b18eefb312bfefa7e6a0df97d70f1cba9dc812c7e33e92d78f719b646a4e4fe97e52fc9d7afd3e74e8a7c69595de274b7dfb003dd47d7e3d8525d651aa8ffea9fc7daae3b9eca36be7fbddf288ea7ba8ba5af5e5fb3a9e7f219f9f96f83cb611dce7d7d3e573d597f91cdce7bf3f93cffbfbd04dda40ec0c4437a5fb990eddce00f7f9f52c876eceb89dedf8fe2c709f5fcf717cff25b8cf7fffcf47dcbeb2d368809777bff6f1ae62752e8be743d98f8c9d27f51b00de51f7f9f57c96d84ee3bfad3c34e009871c3506f18d7c7fa0e37e11f8adfc45b8fea35c74ec184cc781550e39e9eaf88e8b8e9d83e938a8bd438ed2e55bf9fe206f3a0e3cc845c72e0175dce49093a68e83bcd8ea7732cc2fe437bfcbfbdf33eff62eeb3df6234bb27795afd94fccb54c633f3b9ecb7a90fd02646ee9f8e657c7375d1dcf7f733c57635dbf0399b23dc0fe484ebf7a393f48396e65b91b1fd54e55e37a83e5fd3fc17d7ebd503e1fe2f8ee22795ffadfa93992fae71703dd553bf01270ef3f161f6381ef3079bd4c3e1f067ef3eba5f2fe368e70d5f797c7c388c59030a47f59ec4a471872fc2d7685bc3f1c30e0dfff05645f24effd0deea9bee13fe09e1af7fb97d5d7bfc3e5fc484ce531c5fa2a19aef21b542caf96f77311d6d768585feb83f5f50e0e72fc2c765d226ba11fbf3601f1bb5a5e9b827b727c2ed62c1ee7a1aaae70b349959754d971034bcc2beaf930c7f3818ee7aadebe11f9bec8f15c7ddfd5f1fc26a6cfcbc31ccf9ddfabf06f46be2f723c57df77002cf9f516f95cf98f3ae3770b738fffa614f1bf35f1796c13b8cfafb7c9e779e0b74a577ebd5d3ecf47e27f7ba27e3135d6a6e279074bb0f798ec2bc5ee94f70b80bdf1eb5d8efb6a6caf25b0bdbbe455f971f1f6b96a8baa3678af4439ae36a9ea0cc5ec6e0753f57c98e3f940c773c5e41ee4fb22c773f5bdb32d7bafe37b675bf85ee47b15fe7dc8f7458ee70e9b64ca7ff17e874d3ae3777fe2f7b1d64c1fcf07100e4ace830edb7c405ec1bcb078875fb788df63d20f3ed68e25b721d5d825b7899fc13d186e1b87feed11fd1e4e918e8f38f47f585e3b02fde5bc42ac9346ffce2ca93d20d65ea87b6aec644b204fd5075de3f11cb3017cab64a9f779da5a796b84f47f1b21fd6262dd93df556dd3faf6c7bf2ca1dd97d43e713e5776f497bcf694cf95bfba2e0fce90fa3cca12c71e1fb5f5ce6b61eb9da7c6bdd4d8cf74a0b76edca5a743fe632ca10d247ef3e71abf9d981a0bc94a949130bea17c7a1e07f6a6fa386a6ca077fcd95835c6ba15f88e5fb706f169c6dcfd27dcc63afb32ed3c5ebe9aef9263b7b13e29b8f563da799bfc1b7dca91eb5cd4bc4e6c204b98d789c9be49fdbc8eea5b3c91c841f986c59e8c87177b02dc6b963c67934a37edbdb5f2dba71c76f8941dff02e9ff53a0ea2f65876b52705079f869f09e0aeb1910276597cf827bcf807bfcfa9cd4ad10fcb6742becec90fbbc7caf0884cdaf2fc8fba3c06ffe9daa575eb49fd7afdb51f25e063abd688739f201f97b88238c97587c6ccae235528da5f600cf5b023dd53d25038c6ba9f0999a97182dd3e099c43053a5816bbe196acbcccf02b6c3991e64df2f84f3f5fcba214558aaddf38ac38e5e9172e5fc6791f4bf8ba9314e39771053edf05759e25c891cb7759d2b49a5db761edfd3d9b1ec2789b955bfdfbec612e714d4f8ebeb0e46afdb8c8afeb6e3374a8d01a8f8ddee1e76bd5cd5d67c8325ced7c83987582e90c79f6feb333e6a1ea205f80dc355fe376ef3140fc877651b2bf6b6fc663bf09b5f419d1353e5db3be0de5bf2fa2e4b18f3a9cfd3ef8177df03eff2ebfb2c711ce87d9bffb67f3b64abef3e90ef8f01bff955f60d621fcae76a9d912ad33e023a7c08eef1ebc7f29bb1e077137b9918b7816d5f41c2fa8425f6673f7184f9a97c3e0efce6728f72bcff997c6f3cf8ad184339131c729c7a7d0ee228c7bdc5bcbe9bbd4aaef5edc9f758c238da6855460cf6264f7b4fa5a1ea4f7de1e0a6da726ffa971d53f15563df13c16f7e557eff2de4f3493ee5cb76634ccd731401c6ca9f6714b827c73e62a3597d19394eb515549d09fd28bceaa1fa165fca78a8745163e25f39ee7f09eef3ebd7f2f914f09b5fd5587017f97c2af8cdafca77448d634f03bf2d1bdc5ef970ab72a1430a7b53f150e3b9d3c16f7e95e560ec3b477872ac76fb4d3ec3537cbe47c2936ba2626a9c7306f8cdaf3fcafb721d5cacabe37b35b6bb23785fdd57fa8178784e6fd5365063c33dc16f8bc358e547a4da3429d6a2d7cb5365bb2a3f7f91f26782dffcaac6970780dfb04c97e3cbaa9d267e5b7a8d3bce21e777871c35c6aeca9b3fe4f3598eeffe00f1e2cff9ba019e972e74c427d51a7c1d0b5537a836a8d2e54f96380ea5c6a8c7c5c388c9b5c4b1f1ac3e7f8f57e3acaafe284c43a7f1f2aac64cff92bacc01bf2dbee395fd7f03c2744bf7710ef96359e2585a4afd9ac6c4b8d87456c1cad82a962306b5796de0750b09f565eacd23b8e866a2e6617c17091eec6ab6defab442b783c33cb13fc46a966f9505ba1d1cba8b7256853e49fc5d66bd512984ce6d9414c49d494170e5aaacff2ac0f613b5d6fd6962f70abe0145a5f564389b695df9570bd908b6bbf55fa294f956b055accefa556afdbd4ac85b68a99dfc66aa28f1ad2a9cdf145b32ed9d3456587714d055d6ef2aa16189f87b8dd0b442683fc3bab75aeceb51cd96b289d6759d082d39ee35d6bf7561964a647a1df51b6a60f7ed6d3b54324db662c3b5cf11b6f87f29d21029c2d1379b2bf361931c312a7e4c524afc1f43bb90e1932833a48c1102592ce15e1ecb11f32cc54904fdc73139867afbb67917b202d7b8e8c9f0e4de4ac4209ec2f397debe66ce8b53be6c9a18b57c9623a6687aa6889a1b582e2f5bb432fd44a169d326b95c5127fe980ebf18c62b0911bffd5ea578cf7f023413955f620288264aa955aacd0595e73ca17c9550cd1999b96c9910ce95b79f575aca545a5f2e121b23ad171b285559ffaeaf1045d4d6887778c493d23a972bd65c245772659c2aca588235d2259818d3286d90fc826d07e59e642dea63114fb21cd12aebe662d85858a2e9d558b6bf54d69b79d70b5dcebd69e8e1f7dc3aa7baf4e42f3f69aa4f9f56227dd209154ba1c6ba146a1576964a5d87b8a54febfa78c5d387ffd1336c83d8782a1d30824d74045b876de3fcd94a21a5cc7ad73f433e0032d4592ce9016e8118616a1530844d35087339c2761aad58d3960eadb84288e466bac469d33015767ac6cd678ebb3a1034458dbb836b7debd7b49bebe889a1b285a4f4543fb2c4ea30ec683d2bb3deaf108d527e7fae25b1cc0a9bcb9b204288f73d13bf7027cbc7aab67192d552ed24a8f607bde2a09a61c45b6888e7727bedac310351c6393343073c33b4c4b25997a0d9ac152679cba0925b6392bb0695dc0693dc2da8e4b6ba6c234693f70825dbc4875fd4bf265adf2eb322b346f4a9ebacef75c335eed9a5bbe7ecd24364972ca61b44f2a711964db6d0a51dbfb9954e4967d2f5c093ae1d26b86740c1ed316beb15d4da3ae8ac4dc4a392d4dae659f7ecbec514f1b4528cd0f07e768d6800d4b225c272ec7d65b1b79575cd12fd963aa187bb1d6eedd90e7b0b3be4d3dd74ba6216da51972aed1b2e55787f908fa9f118e4d7f71232972a594cd34712a6e9c63fb8567d2ce9cd1a33fb4f931c817da8e710fd86c66309feb2d2be63c20db7bbcd913e5ddf94561a9c1266a59d74a512b7d27e9ae4cce5c9d93f81b78fe8a3509c455d5fbca8ebaccb54220ef3483355a2e4c9a2c25a24e4a437a03040975944e4ba27c5c34b68dcf3ad7e4801fb8398df20617ee9858b9955179d598946b4ceac78c4077b8b81d35606e1b6b22566da4330d31eda90a6dd15537718a6ee360da96e378dba3922d9b9176af8d55bf200a85b1199387ceabd92e31e6ade9a1edc4f2b5b7869516b8ce5c1ee3a83e2cdc85c5d247cb4647be8925ee4b67007e1edd1682ec77f01cc67727a27f5a6574dd027661ec346c5dd75c092662b5dd27082f95ab534dd813c3c797aea9247942e4b1b2467066b70b92723f7386bec2c1b75859b3e5d478a74a56b2d62e9df4b9744a244ddbb419268272b8c3211628d7863a51cbecd5c42156a122a479450c35de867422f8725b899439130076a8530a3d85a5728f0312aeec61474e4afb74e381fb41bcd92a74efeb3fe24096f830bcfc234df56a3794165235f9af7d109e7e326dcd32dd0b8495f4cf298a092fb6924e7886af360d2fcedd5656b9a38eda782cdb1eaa8bd6509a7c25d294c976ba47c768aadeb12a105bfbf58d675ee61b99706db334df747548a539877c733fa587067ba46a2681897b268d069e3bf68d0174ce345e866b1c18ab1fe5849334153d2bca12bc65c4a9a013ae13ccb4e0c9a6507ea24f32c3b4963abb9dc56b967742bd14c4e0a673c1ece205dd1209a6cfb3668d160cf0f72794b8417a52d6f36e36771ad15a6badc32e035d2704aad776aac302aa49107290cb859f772008e31fb8f3e3b4c15d961ac87ec40192b2c0364eb2c894fa47217f124c71fdeea2bb67a7793d802910df711b739253b752bc5ab956c5fd1eeb05b1c49f6d61cb7b7c13a6df8fc1477944fd90bec840b1e82099e1150f0502c8fef10348f0fd349e6a50d77ee0fdac2da06537b6650b5876325ea2c4d89fa77cc5f899a83099fad117e4f237fc273b1ac30c78b8db858f5084cf05c5d1e1b208a713ecd9365fdbfd2fa8277d5cb44eecf129561bc34c8b2f27aa5f5afd5723c46bdbfd27ac37640f6a3671e66143b05358a7c2cdd8a35e9f6b3cf742bc0849768844f6fec4ff8482ced4a75693782d9b5226f962c93755b626998c5b82b7896f0feaf13be15e522e56a45ba66b1fd2c33dcdfbaf24e7c96a807aac4b32c7134658d286bfda46921a6ff3c9dfead80fe7381867e422cc2caadf99a722be6b3dc1aa513ce9b353b33a4e1c3b7faf6dff0198d61db55878d8f904cb19a2fbce55a27de2f11065051df562ecf5005b9ad46af1c314053cd1ab241c67b0b7cad44adf877bc89c2c38efbe1066978f163479c0d2ff547dff0e2078d648b25c261688f35b0b6c30ad53d34856acc4fa13a06cb0b7b627961afb4f2c2f69a7072c4f8cfaa06b5393c47150bd93ce7056ff0f3a33692c602c500558107cbca948e43c53652fcfdc5925c2d2f4cb98bdc22163f63d8862fb2843e4f2c1479224ccdb17c3116abb5cb34b5f6a6a6fe6aed713a93cde2376b1ad464270b096198ed229dd98ad1c9420f899f493d7b8b2575b5a2502d9785aa5d74f716fb64d5886ab3c2bacf0b5ef87ca858e7cedb4b5305ef1582fc4ae104b5543441f546be581879d8f1c40c7d3c5601946b2a005fadea095816aad064a1bf7d66a18998da4b82aa3d09537ba946ed0dcdfca93d1913be4c237c66737fc2a7e8843767f63964417a885331c17c862da9b9c9072d553f61b1a3a7b848f41554ffaf5cdc596ffd6d2faee222b2c4f248e5f7ed47cb6918dbe51ab6ed7db29d8e21a80ac876864e3037cf155e04bb7816eca013ccdfaf6648fb8b1f79e2bffdb523867d9506fb853eb1cfc4b2f93e41b3f92c4c724d50c9b331c9b54125cfc124af0e2a792e9688759a44e44b1ffc24e24e98f0351ae1a53e8517631973adae6c1ac0f8dc49bc916a779fe2e31a6556fdb15a943c599676769d5b9e303ec2c73c2a65a7d94f3e2fc1f45ca7d3d3de8d81af6ee16d8a323186c6439c6315667e422dc5d0afd7a03fce27fa7998f07d35c2bff0297c3ec66b3f1daf6e29d2b55c2c8a88df1d61ddf5c371674c9b0d3a6df8cf78baf90967170ce9fe1aa4e7b6f28774572c1207e822d191a96a7c5b0bd96c31e0572677925823aa71ff1877c3343850a7813de0af1a0673d36c16ec8e213d4883f4159f48f7c04ae4838396c87b626a1fa22b345bfb537b2f4ced4383aabd402799b7290e6348abe370964eab632116ce11583847a6154e1946eaa8a0a41661097cb42681c7b7f197c08b31e1c768846ff029bc1c137eac46f8233e855760c28fd308efd9d69ff02598f0e335c2cb7d0a5f8a093f4123fc4c9fc29761c24fd408bfd2a7f04accc84f0a6ae47b636a9fac51bbf316fed45e8ea97d4a50b5ab349273848b5b985ed94eef277f5ed9fc90296feef57c2b7e9d4776aaf0b121a515ba74e135f4693a957c54e5d53ac1dc9a4ed758d3273e33c14a4cf8191ae17bf834d55598f03335c28ff2297c1f4cf8591ae1eddbf9135e8325e6d90113b31613cc4fe84a6a0b0e13d6b952e4b12cb1eb0edf24a95afcab5aeccb532126aecbe4fa4935e0a426aef9ae5b59d27a6ba44d5759d63edcbaeb47ebd598d6e7eab4e6539f7c1037de6eb6bb92763744e75798c506c956f7205f7ad56136709ec60636f934b03558a4cf0f68036b7582f96aeb0bbc08ee8d0b5ea713cc1b7f1732a4797891f57f2b21d14ff3703d86fd620df6029f596f5f4cf8251ae1bbf814be1f26fc528df0c37c0adfa013ce6be6cb58c09a797f4cedcb356a8f6aef4fed03303bbf4297b9797cd4f8426271e3270b1c888579a52e4cdbb567a55c6abfd8e768d04118bcab34f05ef109ef602c2257eb22d24a44c46e3395307bcf8ac53e4b8f43b010af09582c1d8a09be168bcaeef596600f8aece9b35a394c1722177c9d2665e676f097328763c2afd7083fcaa7f02374c279497b03434a5a7e3289ff8ef891ba707841719397c4769927390a137c7340c1476356744b40f33c0613bc29a0e063758279daf343249cbe715c801fdfb8e3302bbc4d63853776f46785c7eb84f3029a1f1911a8c2390153fb0e8dda2ff854fb444cf89d1ae13ffb147e129633efc272e6dd69e5cc933173e4dbae2795967c7f8205d67f7ca890cffa2e159b695608ffd175e2c92ad188e74d633fb67b0aa6c5bd3a2d3ad56b916bfdcd2b213e6b60fb6da4afc3a9980ef7e974e82875c8b7fe5f2c8603f837ebacbfd3d76023a6c1fd3a0d5a80b4e0ab3bf8b63d7e423b0d33df0734e6fb40277fe67b3a66be0f62e6fb505ae67b0656e83dac29f41afb2cf4cec4083da221b4a1b33f426761c21fd5083fd7a7f0b331e18fe9d2d6a7f073b0b47d1c4bdb27d24adb73b1ecf0a45bd19497e1a2e93c4c8ba7dc8ba611192c9acec77478daad682ac860d17401a6c133a98aa69d4578fe3cd12fc4ccf7598df91ed7c59ff95e8499ef7398f93e9f96f95e8c21e307c10569e85d82d1795143a7db96fee85c8ad17909a3f3725a742ec322f18a2612ab7c46e2720cfdab01d15f8169fd9a46eb277c6a7d2586fe750cfd1b69a1bf0a8bc49b9a482cebea2f125763c2dfd2083fcaa7f06b30e16f6b845feb53f8b518fe7730fcefa685ff3acc38f9816468b5969fe16aed7a4c8bf7755ac4abb5bc0c566b37603a7ca0d341556b233358addd8869f0a14e83962c5ead4d1153112b7dbab3dc8419f0471a035ed7cd9f01df8c19f0c798017f929601df8245e2534d24bef719894d98f0cf34c2e776f727fc562cb9f9198241ea85db30adbfd068fd804fad6fd709e7c323fce4bf40c32377606a7fa951fb0b9f6adf89c1fe4a97b7f884a2bbc35aa9f5ea2ae152b654943b35c29fd35e97542ea602e7327bc77d7b4d6b9975b75cac765d267eab72b38c2d92137523c4449d5a0fbb5e0e6467898972fb90252ea55a48e1aba4978b3bb5e2ad0a20593f155829a734e1e4a15fbfd3bbb004fa5a9340bffb4ca0bb31e1df6884f7ece14ff83d5861f42d56187d975661742f1689ef75847c46e23e4cf80f1ae1eff8147ebf4e38cfac3f7a298c5c86ae1fd008ce111b3135cc7ecbc9bbed647647b59f74bcb4be32fc4849f7fd8583eb8af9d53c88d9d22fbadcb6953f5b7a08ab227e0d5a453c8c49fe2da8e447b0fae1772ff6ef52683eaab3fffefce69206b1ff20fb60b95bfe1f9e2dff4f61f9435c2c3fd86e5dfa94780c339ebf821acfe398f1fc1dd0789ec0b2e93f9a6cbabaa7bf6cfa24a6353f5b36a949c4f7109e203a5a156229826e114b96682e65f9f4377a0ad3e33f9d1e7c1f0d7ff29fc6e4f33d3982a4ce3358ea70259da9f3b5cfd47916d3ba510c491d9e4796c926a24a8f8afa3d1ed2f5067b0e8b64634d24bfefe52f92cf63916ca28b24cf81ca37c26ecfa6ef2bf3021672535dc8bcb76f1f0398537f52504efd462873ac0c210feff3a1c18b9806cd741a74d56a3053fc6bb558356eb7fad35b2bf412a64b739d2e5b79d425f928193f3abd8c195e0b8de1b5efedcff05ec122dc326099f02a26b85540c1af61825b0714fc3ac6b98d8673ae4fce6f60c2db6a84ffec53f89b18922d0222794b2798973eedbc0876e90cbdad13ccdf6f1f43faa11d62e9f443dfd185c3b177d4607fa68f3fecef6291e88445a2735a91780f8b44174d24daf4f51789f731e15b6a848feae74ff807986176d515a77c416831835b83948b36b62ac8b3d96051e155cbbf133dcfb3c42fbbfa1926b63ca811b5be5de4d60acff42c5130c797feda834a7c11eb2a47cb4085c30793ec2a76497d719e250af3729fee881f622cbae958f04de8e0fe62762b335ec1c697e1ae151ada3b89db8367b67e5ce75412f2acb7fd7aeb7f84194c778dc11ce5d31a3fd609e719a60796a5b64a2b4b7d8245a2a72612d7fa8cc4a7584af7d2a5345fc6a21f22dd5d0eaef2d50ebc77616f4be396a6d9ae4f070b175a7b58356ed7893960a5b00c35849af86cb5b0abd59a5cb44868a8ced98acb5e297ba77eeceb331d3ddeeadb3ae6f52c05676823f1d03ed785c64fbae81dd39e74312e49b8cb49175fe88473c3c98a25bb41f193a8fdb841fd0fe3d48782d39718a7be1a4ed75c7df5583f9cbec272633f4d6e7ca7bfbfdcf83526bcbf46788b01fe847f8325c2008a44f856135ace007e33cc2594f0dc2dff4b2807c6b88526e52bf10739ff2ba65f4a994a0f6cf8eb3b5d9af1e1afec58c0e1afef31531bac31b5df07f933b51f74c279e20f7123ea0c80c34402f811b3e5a114b6fc1316da308ad07ec642db8622b45f74a1f1ed5486eb42eb9e1c1a1264111ee4af5804732822f81b165a2e4568bfeb42e32b1a4778e985baac68fc432798576a79faca3f59b84ba5f6a74e382f0cf23585c11d43fc15067f6109504091007f63a18da408ed1f2c550a33902affea84f352b42843a5e87fba0078737794aef1cf2b93a9c2678c37a47943bf4a34add5323e3f0d671643421e8d8da372af29be56c34d03fe0eafb7fd8da3c6305db6d5e9c20d5d85c7a75660cdee27d44658a8dbe942ed020860a1a717fbc63a3d78d61fa3eb5d0ef597f59be884f3ca657bb2caa5a92e486e406329f27f335d683cff8fcb40fe6f8e25cd784dd2640ff797342db0a4994096342db120279205d90a0b72125990adb1549bac49b531b9fe52ad0d66dd5328acbb2d16da548ad0b6c0429b46115a3b2ce74ecf40ce6d8fd9c00c8d0df41fe1cf063ae8848b337d82f6093b6229b023450a74c2429b49115a672cbd676520bdbb60c2676740f89698f0391910de15133e3703c2bb61c277d208bffc9cc9dbf911de1d135e9c01cd7be884f3565489ae75a695eed2e6da0a935eaa936e6f7aca275072d2d872b3275614cdd314455579fe8aa25e98f0f91ae14ff814be354669672f5d691724bd31c1bb04149c85e1d855d796f689a30f56ecef16b4d8ef8ba9bdbb46eddc7c7f6af7c384efa111becea7f0fe98f03d35c21ff0297c0066267be972e96ae66dbbdc602b0e6c0f9e05096b18cc5e7f30104ba2059a247ac167120dc29268a12e89f8e2abe425207e2293ad0b8f4fe896d53f704cf92e8aa533e53b58170edf7f72b197126a232e780806ac5c078c576c39be000dc552bb4293dacb0afda5f6304cf8128df09e45fe846f839159aa23631f0ec8c79fcaea7378a9cfdd338663212ec342d4e57e3f21e6602156ea42dc529b5d66895241edb01e7fe2af54c8c534d95ba70997c0e7fbfcd6c72334a1e488c389f9910461cd41965abff86695fee71f97c7b86f63220c519668e71eab627c5ab04b52ccdcc2c7e61df374e9c37fae88713796449576987570f3737b3edb2829699ae249938f1940b5ce00f8414b6a7873897573015b2d2355e9d3f00ab07057eac26d87865b2d2b4c3f618fc4caaf559af26bfc187fe55721d69bde87a2375d8485564311da282cb45a8ad046631dcbd519e8586e8b09afd3085fd9f1d06dfd08df4e57de0d0abbbc9b245caf6ad228efd6c4b8334a2283e14869b71629eddc42c74abb313a6ee2e8f1052172b3dfb3ebd512710a56a575678e7068b3dde36ad360ba2ee6f760d2f5826cbfa498a7ab1f467d7bac38dc57531c668df7571c8ec58a8cfd288a8c7158681b28421b8f9521fb67a0809a800d331c107498612226f9c0a0922761920f0a2a79b24e3237bb8363c14fb99f82b5450e09380e3515e37168501ed330c98705953c1d937c7850c93330c9470495bc0326f9c8a09277c4241f1554f24ccce88e0e6874b330958f09aaf26c9d64de2538d68bca9d70c17330958f0baaf25c8cf2f10129ef84a97c4250958b31c92706955c82493e29a8e4524cf2c94125cfc36cee948036371f53f9d4a02aef8cd9dcc68036b70b26f8b4808277c5589c1e94c56e98e433824ade1d83716640187b604d8db332d0d4d813e37176501e7be924f3f7cff1c2c365d9e5029de0fed6cf73bd08fe1317bc104bc1f302a6601926f8fc80821761a97741d0d45b8ca5de850153af1c4bbd8b02a65e0506f9e280909760822f09287829967a97064dbd6558ea5d1630f52ab1d4bb3c60eaed8d41be2220e4e598e02b030aaec252efaaa0a9b74237ea34d8fa19e3a7e685bfc9906e0e38b39b0d5ded252dc6e1c4aab1b4b826685aacd449e6a3ffd77a51d965d9c62acc2eaf0b6897fb6082af0f28b806cbfb3704ccfbb558eadd1834f556632c6e0ac8a20e137c7340c16b30c1b70414bc1683bc2928e47598cab70654793d26f8b68082f7c5fa70b707ecc3ed87697c47408d37601adf1950e3fd318def0aa8f10198c67707d4f8404cf03d01051f84a1b837208a83318def0ba8f12158cff0fe0cf40c0fc5703c1010c761188e0703e2381c2be21e0a5ac41d81817e3803a08fc4d47e24a8da47616a3f9a01b58fc6d47e2ca8dac760921f0f2af9580cc8131900721ca6f69341d53e1e93fc5450c9276099fce98099fc444cf03301059f84097e36a0e09331c1cf05147c0a26f8f980824fc504bf1050f0469d603e6bfd628c60d6fa342cb49728423b1d0bed658ad0cec0427b8522b433b1d05ea508ed2c2cb4d728423b1b0bed758ad0cec1427b8322b473b16ae9cd0c544be761c2dfca80f0f3b19ae9eda035d305d8c0cb3b01075e2ec492f65d8aa4bd080bed3d8ad02ed685c65de1def7022d07177c894e304fbd0fbc08761950be542798bb2c7d180beeb274994e385f2df19117ad5d564b5c8ee1f838208e2b748207583f3fb11ef4d1e0d02271d9d9e34a0cc9a701915ca513cc17d47fa633f48c2ca8bf1acb5b9f53e4ad6bb0bcf545c0bc752d664cff0b684cd76179ebcb0ce4adeb3143fa2aa021dd80a5ead714a97a2316da3714a1dd8485f62d45683763a17d4711da2d5868df5384b6090bed078ad06ec542fb9122b4dbb0d07ea208ed762cb49f2942bb03ab267e21ab26eec482fc952cc8bbb0207f230bf26e2c197fa748c67bb0d0fea008ed5e2cb43f2942bb0f0bed2f8ad0eec742fb9b22b407b0d0fea108ed412cb47f29427b48175a7bebe77f5e5a247d71c10f63d1e0db1d673c1a8f60a1c528427b54171aefc0376a14b003ff984e32efc0376e14ac03ffb84eb03866c68b609761cf2730c14d030a7e5227987b4e34f322d8c573e2292cf59a074dbda731162d02b2780663d132208b6731c1ad020a7e0e83dc3a28e4e731c86d02427e4127988ff9b56d147cccef458cc7164179bc84f1681790c7cb5859d43e6059f40ac6a2435016af622c3a0664f19a4e309f7eefe445b0cbf4fbeb188bce4159bc81b1e81290c59b188b2d03b2784b2338871f91185bcecc38277577e990993927ceae3a66310733b190b85b23be90980f89d1ea8b2d307e5b97ec3c75ba7b4976ae3d22f81d9d60feb347a3e4dd31d49fa4009ae276f52e56b06f958182fd3d4c78cf0c087f1f2b1d7a052d1d3ed049e6ef6fed25355dc64f3fd409e6bbc4f4f62298fb8723823fc204670514fc3106b94f50c89fe824f33e535f2f2abb0cf77e8aa9dc2fa8ca9f6199b17f8632e3e7ba00f8f60803bc30f91917fc05067b6040d8ffc3c6a506e9fa96191997fa12ebce66537467bfc2421b4c11dad7bad0f804cb9046c12758bec132c6d0a019e35b4ced611950fb3b4ced6d82aafd3da6f6f00ca8fd03263c2703c27fc484e76640f84f98f0111910fe33969a794153f3175d0b79a8f533368f35ccd63aaa85e96f1b9d7ccfadde02d1eaed9e143b2f3a602dd95fb126dbc80c34d97ec312bf3068e2ff8ea95d9401b5ffc0848fca80f03fb10a66344505f3179602db064d81bfb12ef5768d34dbdd4d163f8b2da32f6193d98ef5e744cf66fc5491b5c250974b131e2e36c69b613d9f633da9165993dfd177dc746b0bf9db308bf00cbc92d9bbe156fbeadfff83c5728c2e9647d4c7729ed585e485875dd0ac10ff9e218a201e1bbeebae5dd0cca87f734afdd1ec8987bfd6481e25e269b925b14ec48bcb4da41797c0dff7a70726a994f11dcf968aa7894c61a1e3e43ddf92e377fbc47f31d2db63f60443b4e3c46b229bd64aab705f60d9468d48733bb6a562ffb6ea246de3dfe2f733654fff61b11cab8be558472c21733b9e53458aad1071746a999842f0895b5e815ff989199fcad2c66c9c2e66e33ca5df04b167752553bbc0054fb9f8133f718b61711baf8b5ba1236eb344ea2c9331e3bfd635584c1a613199a08bc971219767f16fec13b8caacf8f2fd7fa7d61f3a5debc3ca213b3c16bc2ea913cd2558eaf18662e6cab6c618f5893aea133ce58d998246ad11a55a132c7e9374f19b496855fcee3e22181e2bbb595f2982ae64fbb232b4244927559b62b19eac8bf5f6aeb1c6352d1671b10fbdb6e3a86a637e77b124949c2fd24fcd6658bca6e8e2b5abef965d897892d8b6d349b0efcdad2f076aacfa8077d982b404d349e7e6188fa93a1e3b86526753d7e62db0384fc3da29fe6c40d930dfe57db11004d3d9af45f889594b2c66d37531db1689d93c913fab64dbc41e3250bd96f932179727a5064d1fa51516a319ba184d252c7d55aada9b98db67472653483fa6adb198eea08be918864d0fea4a8ac418c0f3553893e922956b446f68b155e3aecf60acda60b1dad14b9f20315cd842982752a1c67a97e7c3a52eb55fa28cccc5ac2d16b399ba984d4a59727aeb15e065a85b9f35dd92720b2c8eb37471ac206e51af16e7faf09333ec16f37c610195f5b931337dc4746ad17618a7d93a4ef31aace7e14e283887f61887393a0e13d1328cf79016592fa9bc619f97e25ee3e825653aa53b60319cab8be10c9f31dc5958743592220d11df8e587c77d2c5b798d0b26bd3a87f3341a01346a03853f5b25db64d00b5327dac3a63b12ad1c56a9a4f3b9e62a55a8d68199b60c35db0b8966223147e5370aa7823d91a9de5ab77b97ee2b72516bf79baf86d17a0e5b85ad4bcfcc48a25b29f87c7aa34e95d3f71ea8ac569bebf3473dae704319ec04b9554bd14da9ab21b16bf9db1f8f9e933da719d26db4cf1a77cc6c3bd7598a99663772c7ebbe8e2d79fb98f0af233e228b4ec8169b9abfbd89e9f5428492b15286d6f2b2cd6bbe962bd0d9ab74aeb5d0e6019b1a47e3c9bd7fd75da76677ae3fb3d31bd77d7e93d3a658f6b86981be4a38f5556995763c56d85389527b9ffeb9602e9f7207b61f1d9036b2dbbe711de1b9e2b5a90b59a368497b904def25a92c1186e8dc5704f2f7d64fddcc00c617b7c1cbc4c8e5125a75798f303bdb138ee858d50791907f012cbf44a8cf4639a85c574812ea6d33da5a673a6c7ce872ade0d99ae7db0d82ed4c5769794e94a3b324e3d66de17a351868de3e9eb8cf9522fce22dfaa276b446db13ea1c5e296ea586b3351ae9f98f5c362b64817b3dd3dc62cd5989e17195edfca3c93fe1893c5d878965f26b3e4ac5fa538114f57b6d9366a8feb351487011887721d87018e32c069ddf179a10aa11df79bc84ccb6820a66785bf5129f7dc599232777a4da7a02dd841587c9760b3d330c4c9a25d6a8f20f98f23262913f1cac6e2b55417af3c1ff1f252b262b2fcc46030168365d80ca4de669297b835d448c4102c4695ba1815b9f4969c5a24c688c7b5368d5ac24f5c866271d9db5f5c8aadeb5261dd8b185f50e82ce1f818669598fd8eb75c331d9761585c96ebe2b21ba31b9956e32ce9cf4de1ed373f44b6c18854e98814384a8f4922ae76bc56278cbbc09ad84f4b33fe9d9f580cc762b122482cdc4a6ab758a45b0ee660b1a8f6570ea62a35b8cdad76cc7eeb25ed24fa54b69557cbb7fdc428178bd14a7f3d805465479978b74e8c97d588f281ba241981c56c95bfd62e965633ea2db256fb16d4dc7bdf20f31cf2300efbe838ec9546abbf44e425bbee5eecbba66b3832f918999a4cf587268b3aa552b400fc31c17b4d99e7508071a8c5dadddecba2c452a0ba7eb4c4f6195573bd3465db482c5eab75f12acd78093057f415d448794359792146a1ce9f9527cf1fba8f697a9905f63f539cfec85f11c6618d8ec3101f1ce2d66dcf90646a746e14a6f15a9dc60359aab14aba918ad198a6eb32dd9be2ad878a14792a58cf705b2c2eebbdaceac246fea71836eabf1d16cb7d310f717f3d7abbf794fc34d9ebbfd4faf72ad79a2d594a7c1cc44f9cc76071decfcb380cccf741c761d2ed0b6e8fc560832e067bb086ed1dc394f56ad1ea1b3f54c66254f6f7e28dac42f4935be331c32c3933b9741c16b303bccc42faadb183cf43a51fd3f1584c0ff49237b1f101dbc60b5981afd181f8577e6230018bc141de57ccf130fdd8218c1f763f532934118bdfc1baf8cd4aa39790d89ef6d72fa0eb454cc2e27d882ede4bd388373e77e627fe26b09a8cb13ad45f3b50d7a34eaf0f997ebf690a1697c3747199e32b2e1398dffe7c7ab370e98ed64ec5e27eb8b75530f150538d86e0e31c6e23209988e3342c8e47786be7ebe3986a8d737a714cbfd49e8ec5f2485d2c73d3ca912b84e7a3fd559d951b3397463330ed8ff2e685a54f237cbcb2e1ac71072ca64763ed1f7d3aa99d1b96d497348b347d2e8a18ec88c5e018cc5bc14b5a25d68a9562e5ad192936138befb19897b1fb3841898c61727b7492284b6a5c7a51f16fe7085f579b8ffbce13e9f5a16761b13e2e1def563ff9d1bf97607a6359b3b1181eefa527a2279cde2841bae38673b0189c10a4664b3d824555b335b7fe8bc5f8166053042bdb235a8dadd7b29c61d6235177d9a31dc3eb473186278c78c4ef730d568899ca2ae1b76f8f57f04de8dc259cd8c83ebf40fc1914e3f057cb4e7f6c8983a3fd6595901cb76abeea9edb81bd8f042fcf865b6d864af195daae2f552c742337c3c1d80d8c5dea38ed896cbf178b35973152b22cd27cd9c06617d39378aaf697a9da2867388fe3d034ad29b51627f3d01aeb6da86b12595806e874b705cc96330f317e361fcf62b9f5c5cd4cd9a1e3224b189fa258655d9731ee60903274384aa20b7d1b21408d7ba514370f14763a71dd85c9d98eb535b221dd269bb1e64d1be5f2543985125d27818ea7d05c1138bebf4d14b0bdd3248eed544a6c7c6fcfc96218789505ce5ea6ae1a2518c0da4820e4db7f2b841b2911f2f39a545f6a3ae3abcfb880323196c94737e6b0e5910076638b38b0d328817506a55ced6600ae7deb38b8d329c175d480e302abad8ff81ab33a71b73c12d016b238b433a8ad2d317b4eb5feb6f7612eaf5fc46a5b5d14c065b789833b93121cdf909bafc6f45a2d4401de4650299c4509af35c8aa73189c908d02a60b7bc6319d4d89a925c014df9f220a88da748d233a8712513381a83652655493b67138e752c2e10781cca96ff32bff227b5567b128f4ebc45c182fe6e7cab18a28001cd52b0ef03c4a802d4006e46a7297ab28002aed1807743e7509c52d6c128befec1d8d1616033674415836a436cb8a02a0acce7140175202ea0000d96b194b59856880ae121f45c7a69e181447761125327ec6996ab54f61eb44acebea9b9a7c438272d1102d1699b25c6451ee76110588fc8f8278312544ab004880c747c5f85ea215f5c70d9647bc3ddf198c935d4289b2adac0694bdad978d8c79a2cb1d05543d41757069581d6ebe7fde6259d6d500db9a607587965aca4701dccc7e717097d17786d411016a5a2b0a881ee91f47747958b6c5c726a077b31a9f885247e9f7e6717057500fe640707063cb09627807da5c341a231bc0b8eb9594f0dab078fb2dbe77a1bdab6614408d029da5ab2841f1d9ff49d21d201ac3383d07c4d15c4d89662b6043dc1b7495a584dd9b2c6689abc5d5346f6d84a6791f181ac7780df564db2c615dcb1d873d70f7d41a11521480f1fdca14b06be9cbae25d6a375a2608796170550c306c7415d17ee3c51e2d2a9f288352daac074eef5f4b392bce49a2c828e727ff289a671683750426b05a071a7aa28b5f6bf07adfd1ba9b3e414e1705227028f9fdd133fcb89d792dcbb380ae03e01d6751325b82d405916550701ee10aa60dd4cef8e627b8ead1462a23d26360658d92d660cf4e44702dc1760a06713f5ac65b1656d9398f7f303a300f028319ad1bca943b873614ffa0ec7fea8e3aed1ed983d300ea75f1caed239d62bc6697e2b7475ce4e7b92243b650591edd9d72cdbb79f50769a4ea7d99e3a7fd901673db27d781267fbaa3bb23db794b37db57cb2d32a4fb27d8da566fbea1e657bf289cdf6e5089aed7b0853a733eefa979de46893ed3aee97ad759dc8d64e8667237e4ed92e6e62d988e741768aa9a8ecb47c62b27dcddaf8793bbf3ef6ce898d6cb41394ed1848ccf638839eed730145b6ebe848768031bbf89a27fd5aa55cbee6e9b6ffcf9723e5f2e548b773087fc76c0876dbeb0eeab6174f4d7bf519af0fddcf1b1a91dc78ed99a443b13c52c53e7a45b5b174dab44c68856de12582e9b4c4e6033fd73b4dc29917499c87039c779984333f92385f0438ef360967412471fe0570de433df9b24096898958ed56067f8d0c5f1115be5600dfbd6158e352d41ea1fa0bd828564887b30d15cefe00e77d26e11c19499c77b038cefb4dc25910499c97009c0f9884b3289238ff04381f340967612471be0e703e6412ce1191c4b93bc0f9b04938f32389f33080f3119370e645126735c0f96818bb8a2c966346ce2d616dd5eded4673e94036a50299075a9c8fd1cf14279e85828d7e9261ec4b85b12bb0c7c7e9b76ab1875575875285d0991c4905f12700f109eab53d0aa2d7591cfe7e8d78377a831cb300d82729c1f666705ac7fbb46694e10e05709fa25e86e0362007c5f1562719cae654286782cae8694a94ed24cac2f087e2c8ecf0766087cf50c2db9ac1993daff3852164f1413122b43f00b4cf866197a3c2b7cb9fa9ecf20100ef394a785d997b533db17c241d82232b21b70225e4f326c12c8a20cc0100e60b26c12c8820cc4600e68b26c11c1941983d00cc974c8299b4ea3c02301980f9b2493009e7cbc960c600cc574c824938f84606f353d0347ad5249851ec3cfe0760be6612cc511184390864f3d74d82393a82308700986f34ec08912dca3e8d80b0c4cca342792940f92625ca21126595f55295b8aa450473c5e4c57ac6c73217488fde123699edc8260a37f90a790fbe37c1d2aa921679272ae4af01e46fd12feb5d26fcf2ed75024b05bce80dc5b50155d1db61949e7c086eb97583bbf4f3e3aa1a6056880ce67700e63b0d597a269e9b4998953752a1bc0c64e57729510e4a2a3dcb84b0a9d20a2bacb2b24264f5356206a88eb91df1440a9bacd6df1fc07e2f0ccf62758e52a8c3c66493c16301bef7c3c8f6de5aa051b4c46c50827e108625e6b1a2cd6862ad0fb0c40fc39858831590fea8c35201935beb12216e05ad65f6a642bb12a0fda8613379d47b469f834cfe3135ca096271f84ab924961f4ac77d3baae53279b550d85e7e1dbd0cdf04a0fc240c5f4dde7c5f2b5f2b97abe12b19748e89724dfe17c0f9691847fc8c600bc40d1e7899e844868490ac063f0620fc2c0c84459b1dc24700c2cf2911f6f45c8b3b0f3027744820cbdc67831afc8bb01c5fd5758250818f1145db3ff321609bff33694d2fe9d215329c7b029bfcd2249ca46b2dc8701e03707e65124ed295406438df0738bf0e67c5796ef8bdf11e54f8de0265e537e6b85b47715e7209b0c46fc34009d75bccb4ba8ad3e43e4bf61e4221d4e064280f0156f91dfd8c0f9c1ee3333f1cdd44b103d172296aaa75ad10ddc9e865f1b600e6f7610cb8ad16bbc1d5d64fe7aaed99d45537593182d2178e0ced9500ed0f61cc4c7a5d864a587e922d429d0660fe68124c428f2332989301cc9f4c8249e83f4c06732c80f9b34930093ddbc960160098bf98049370cd0519cc4900e6af26c18ce22e081300ccdf4c8249e83f4c06733880f9bb4930096723e936320330ff300926e19a0b3298f900e69f26c124ec0191c1cc0130ffa28499c592c78ffc790b13d6ef64dec2878131a5bf1b72e18073b098b014251b2ace03b6fa8f493009eb773298db0198ff8631ee6e6fd153261c61429b3f27c3d717e0fb8f125f77802fd96f980b8b6fc813658784570050d638e4dd8e529d3b10c2583c994bc2ff00d818255878cccbe6e52c733440d8280c84859b1dc2290061634a84592c683b9370b898ac9df926686736a1c41b9f451f1dfe2c3a5919d911e06b4a89cf3ebe861fd9038f7c2103564405ac17c8cecd2881413fb7f85c399cee25af99c9661f8f02109b5342f4b7a6278a3bc44c05285b84658ffcbca8cdc933fd4700b1252544d8a74975b45b941d592702a0adc2a895f3c4c6cb21d7ca646b78ba825ab93525bef47dd409cb4ab26c7e16c0da8612abff436aa2381d910570b63509e7c848e2bc0594995b988493748332329c67019ced4cc25914499c5f019ced4dc25918499ccf009c1d4cc2497a542719ce5280b3a3493849cf9624c3b91fc0d9c9249ca4279f92e15c0a7076a6c4e97de38862ebcaff5dcef841c2fcfc6bd2c9dc1c2ab4d780366817ea9ebbb723ea8b856afc681bc29efb422aa0db035bdd9212a8dae2be014e4125dbc6642d80d795125e73119b9572ff17beda277a59b71b80d58d12963a813e75a998b8b31ba127f09f54509f05e5617713a1128e1b91417d0640ed612254c2d51464509f0450b732112a614b930c6a0d80dad344a8849ec264502b01d45e2642256cb893412d0750b736112aa19f3019d405006a6f4aa8f92c795e3d71c9f424ebef15d67ffcdf7644787f698968ad726567333eb3696f76b6dc4a067e86257fab5434ffd5dc2861224ca54a04bee7ad4a84ac309c1bb0a19344e786289e72b510d8739f709cbb1ae02440b2f9ce2d00bebe618c3ba5b77f02e1f216320fa6774126ef478936d58a8cc44c4eba4f1759363f18c0ec6f12cc281e6677288039c02498513cccee000073a04930a3e8aa78208039c82498513cccae16c0cc360966140fb35b0d600e360966144f19d815c01c6212cc281e66b71b8039d42498513cccee640073984930a3b869e42900e63666af6b8be2696bb341df7d3825deb612afbdff6695e8c5dbb2b9770819b8a654e018b0cb1cfa31a332f17a9db0ba9aa433d7c8f0f5a5c2b725c0971bb6af92f751a328eeb9b90c64e91161ad329a25ec72b963bc7db2f5598d0831caab8c06005bcd0b6378385f1c29b2b9ac321a0dec319fbe8ae1333fbaad26a257467604765710867b6ce2b940c52c71117548ab2fc99654370176389212e716ae4d9d5a3a74ada8d035029658d8900ba9a3bf53616f80b2288cca842f58dd7cb685da03e01b65868fbbed82b04a58aced5c406a993f53a1fd1c948fa3c3a86e308782e4dddfa2b8ff5b09c0b9ad4938f32289b316e0dcce249cf991c4f914c039c6249c0591c4f933c0b93d25ce7e2c79678f296c1de3ee8475f54df539d6e7e5a2ff532cc0dae7a45685d30fef4005796b50f78f3569b9e0a8489e33d017d8ec3893708e8c24ce4dc03ac79b84b3209238cf0638279884b3289238bf0638279a84b33092389f033827998493d4ff8d0ce73c8073b24938f32389737f80738a4938f322897319c039358c6dd2e0e8a7b76dd208c79bc8960d7c03b04e0b6b9eb244f47dea2cc913accfcb2d90f6ce0ae562a2a322d2f3949500e87473560445d1537367d0379a11860b973abcc1deeb63911810512f457d6bf215c02e770863af8f06387f9a0cde74006f4773175711d6eb648e323703b4331bb6bcb4455589cc4ee87344e6e3f135282f678591c58bc2cfe26476783fb0c3d90d6987a1eda1b0910ae5f5c00ee78461870d7048035955f326b0c3b961b826e435c4ae5c6465e096c0f676a26f332ed3ece75e6231b1bddfb8424b84bf309ff5895e5fa635b0c56273fd8309e72ac9aa9bc5c04e4be8cb48eea35e63fd5d2562cfb1f1bd0bedde76f432f956c02e4b1bd2132eb18f1dc5a5a52301ca7966b872d9fb1c568bb2938b5b418b966c83c89741169fdfb0561af59e4d37807267931c654897f391d5eb5500e72e26e1cc8b24cef301ce5d4dc2991f499cdf009cbb8531d393ba4ada1c667a3602acbb87319aee6d62222f92abcb9f0730f7300966145797bf0460ee6912cc28eeaff53880b9974930a3b8bfd61300e602936046717fad5300cc8526c18ce2fe5aa702986526c18ce220c84900e622936046d16be3640073b14930a3b8bfd6090066b94930a3b8bfd68900668549fd7452cf0db27efaae00e712937092368fc8701e09702e350927a9fb3519ce5700ce6594383b4a9c23adff57c8c0cbc4b2c0a8bb0c5ecee2082bc3584f997a206e12732ef39f6009ad11bbc0910ecb756b4404f96d60a77b5342ee2521578969e005d62d7bc1ea1ca696a926160370c9002158b285aac702b0cbc3d8b35081ad123e21ab8598b857885b732a8a2dd3f5006f5543ce6e8676920b99bfdc608072451845005cb73e81e977ea9ac0d658efe4b110d662904d797c062ab06a4ab07d04d819d64bc5c212f926536be4e7f16260015b2e704e64f6318ef6f3a9d695e327dc7f93ac91d512005e1986b3e208d1ccda5cce6c690b32fe2a73d60a45b13a9a0250ee134619ea7fd29874048acc46ef06606b4c054b381a4506f61e00b6d654b084a3f96460ef0560579b0a9670649f0cec7d006c9da96009c7aac8c0de0fc0ae31152ce12c2919d80700d8b5a68225f4322103fb2000bbce54b0841e2764601f0660d79b0a96d0638f0cec2300ecbea68225f4de2303fb2500bb1f25d8ce1ab050a08a29e98230ee3a4f82f12380714318c3d510a3bf2376085b026447ec1c08f0ee6fee0e0e840500d952c66c80f680300a006c26205e00100eb49015002300c6032931f2133ae6ca397eb5cbcd0c61993cdb476f109a8f0d2b700799b38308612544b6ceee3a60830737e4a4de6451262e922809b3f320aaecfc2db0ca43c2281573eb71968bb666a8e7c59065ee8701c643a91d2039b0c922e00a66ef01c65fdd17cc8a168ba77c4707c2f9d0c55430c701988799b3c70d61494936677f2528290f0f0365ae8b6749b4ddcc5e0556794458dbfc610794850493ac37fe33807964186e8f059b9ddb630d40785458ee38534433a84e283193f1434579e53387ad15234535ac5674275785e18e4356978f07608f0e676bab06d884922c6b770255ce31e6ec7a13c5759d25c0128f0d6387ba82f0ed902c1b6f00f08e33737f86284e505c08b2f7f1e66c1714c5618c2f81859e60a68546716ef21c60a12786b142c9eb8906a329ad94ec4483ed01ce934cc2392a92387b029c279b84736424715e03cad0534cc2497a362119ced300ce534dc25914499c1f019c1b4dc25918499c0f029ca7998493f4d461329c7301ced34dc2497a4c2e19cef500e71926e1245d784086b302e03c338c6138dedf5923c633eb5868c3c364c31fb301beb3c2c1d700a347647df3f1a0997eb649db5c8ca0ec939359e32280f31c937092ba5f93e13c0ee03cd7249cf991c4f931c0791e25ce1642408555cdd89e1b5c32192eb22d2b9a81aae57c4a5c8358f21070a29bea24c6375a5921fecdc731eb84c82902308f56a9a0a6e680081db476a782bd2d807d41386bd7f3c2afc78ba8f0b50459fb424a7c3d18f4dae01fd50947981a31a65e25e6caed0c1f75df8d5f81455e14cefc78039c9c4586af0858e4c561b8be708b9cc6b82f06f7d8582a9c5f6a22eda1713cb0c04bccd990228a3bc457006bbc94126517c6ddf979ad5c2e3f2a6198fb6a6d041b452d804d5e66eeca9d281e427629407b79189e97de3c8af223b9f1fe8b00e61526c18ca283d64b00e69526c18ce2c6fbcf0398579904338a1befbf00605e6d12cc286ebcff1480798d4930a3b8f1feb300e6b526c18ce27e72770298d79904338a1bef3f09605e6f12cc28762c3f00306f300966148f1efb10c0bcd1cc5d61464472dbc8abc1f0c74da6828de2b6913700b0379b0a368adb46de08c0de622ad8286e1b791300bbc954b051dc36f26600f65653c14671dbc85b00d8db4c051bc56d233701b0b79b0a368a4bb36e0560ef30156c145765de06c0de692ad8286e1b793b007b17f576670b84df12f415299524c8c00da202c7f77b52e0ee367ba348c22a8a6ca3c883815dde433d6fefe60261ab5e289cbf0947009a5281fc0c80bc378c79fb643bf532734fd8f0279bb7bf1ca0bd8f126d1f0d5adbb789c3ab663b08bfd055cc6d910ca1ed922d91690ccad8fbc3d840205780ad14757cb970fe2eb7c46e6e0e8e7f03ac0f98b3834d14e7f44703940f86e32b5a18beaf2819bedea0047dc8a42585a3281bf364e5e53080f36193708e8c24ce7b41e67ec4249c0591c47915c0f9a849388b2289b335c8ec8f9984b3309238df03d6f9b8493849c795c8702e06389f300927a9830419ce1300ce274dc2497a580e19ce7d00cea7ccd9e48fb00744b691c0b6a01a7a9a12e5509678befb6ad1ebe10738978a7f71bc4bc4e72bd0317bdd9b840323bda9a05f00a03f43099dff508794446f80ae1dc8e6cf9a546a8ea274cd212b357b01ab7bce249c232389f326609dcf9b84b3209238cf04385f3009675124717e0270be6812cec248e27c02e07cc9249ca45ea264387702385f360927e90230329cfb029caf9884332f923897009caf86316fa9fa449c431de3de20e5cc7d232bc25e0fd9b618b340fbf3b5307c4214d64aad4f08f9bc3ad95e0ee70290af87b1c1957d285ea5f5da6261831398db0642fcecb7a54259ae6e48b3ed6403247f80c2e00d4ad8031d56bb8825bbd97877c821b46bb2fefe07c0aedf0c63332c85ba96f10d5e2aacc694dbf01e215232ebfd1e207d2b8cdd9c46b1cded20b3c74101f076181e7871ab2c130eb7e56caa8457b19955644700eb7cc79c8db2a2b8a1c6ee00e5bbe6eeef44e8cb4c562dbd0d0a80f7c268b7da6e8c15a279c539ac111c56865592924d7bfc0e40bedfb0d93dead3763f82ecfe01254a75f4de0807d010ec902c43cf0076f8a1d96b3f08572a93adfdd8006cf3a33046a3e0a1ceba6a27daedcfd780b57e1c868f72be580fb7b9ec673b0e58e327e62ea021cce864e5e82500eda79468fbb3c49e111f6d8a6f14acf71599263f9e6389db9bd96b3d497b49e3a830af00983f0ba30018217af19bcb41bb1d00becfcd592e13c57d9e760655d117614c8cc0b2d4db32ee28ee99733ab0d0ff85d11e55e528af84ca1ddb5e6f7ef34e1301de2f29f1b612b1b1e35d226bf6c58c70753c59cdde1d64f4afc268c2633df5e4e3a5083338990596020bfcda249ca4f3f36438d7029cdf988493d47b840ce77300e7b726e124756424c3f91bc0f99d49ce38a328f7642273c61908707e6f12ce9191c47917a8d97f3009674124715e0670fe6812cea248e26c0c32fb4f26e12c8c24ce378075fe6c124ed2ed01c970ee0970fe62124ed2d369c8701e0e70fe6a124ed24377c970ae04387f0b6798b80126858ba8f0b50055cfef61cca8f38097307b29ac2dbb5abe12bd81e118b0bd3f1a7ebb3f55c944cf236e0f60857f9a02328aae859301c8bf4c014938c94b06f22800f26f5340128e0b91813c0480fcc7149084aeae64205f0020ff350524a1132119c8f300c8ff4c0149d8f42603f91e00c99a180292d0d59a0ce4bb0064cc1490849e1a64207f07201b990292f0e4023290bf02908d2941fa5ba212c5634ae702944d28512a4f4cee175cc6e052d509d667dc2383cf31d6b0f889ee51df12fa371647db94126d57e6c7c76d64243785ce0776dacc2498515c9756006036370966144bd01c00b3854930a378d0732e80d9d22498513ce8791b00b3954930a378d0f37000b375c3b6396d51f63a49c24c4eb64ef20780b20d254a3eab3345acd4e52ace90b6c98f22e1ad4cfe19193c322f60ee22a7e0b56d483b4c5cc34368871ba9507e01ec700b4a94ea00bcf8f2fccd7b2bdd75c046db5182edc4e0e2fc95d6c7a1771fc9e6be7f0110db5342ecc79c0bf9ec55bbf10d4e4a04d89a14f57a149b48fb8122a0037555a42c55c53f240b1d142382f72fb0d08e94f09c5bf2d9d6c8979af25a7db2767433baa70bbe036cb2531835bcb7667b141bed238085760e6374133696bcd7f18468c9eaf8c7809576a1441bdf0121377ccf36b2c1e15100df9661e0cbb3e2b2f91c72b735c0d7b561cbc8a8f7c6bb0394dd1ab2433999f1d5b98b18f9c68e640da22b00caee613688f8c9aaf3ad87551611e77e84a1edb541d64fff0460ed1146237d732a296f054da0adc2b0c9d44d20e7f61084cd1fb2fafb3460933dc3185bf7e6823082d29f83cc460f02307b9904338afbc11c0a606e6d124c42df3732986b00ccde26c124f4c82483b90ec0cc320966141d625603987d4c82194587983a00b3af4930a3e810b30ac0ec6712cc283ac4ec0360f637096614677bf60630079804338a63ebcb01cc819430fd6f4746580591ed50b41bc039c8249c7991c47934c0996d12cefc48e27c1de01c4c89b3338b6f6d5fcef8a2003ed9ab36708cfab955ffb038c621e1ccfa2c606bc0c07028f8c8ac7026c03794da0ae75a3fec73ffb8a86aebf565ac46cc02f173a9e27e46d1c3d814601c4689b1378b3bbdd8de1a0b2c756bc58a1f75860a3fb6ae5c0c0f97c9b99f72a676e2581d41b87b01b8db8491c5f95850e8d3156425643b50d10ca7c417ecc8a4289e0c702db0cc1c4ab4caddd5ff4c503e65b7926c2ee82b60b3b9a6828de224db9f00ec88305a9d58235ec59474febc8aca2de14380318f12639606a3bfa3950847e2c98e563a00e0cd37b7ca229c1826abb23e0655560125da3e02ed74619fc5a2ecac90edd372214a79bf2f1709c0ed78b1f56f5bfc54ebca3baae5116cadb602804752026e2900afb25ea815d51571df89ac4aea098015865125618e87934416273e557a2d5595b41d28338bc21908c9db8c7a495d00be51614c64c01ebc1a0e890f9044bbc7de0764e9d16134df21ccd4554e74c1ce0160b7a504abce39e73d9d156c733ae7fc6280703b4a84fed60245d195ab18a01c4389327d4758427743b206d145a02ada9e126b5f1f165a6285592580cfb1fea55a9bb5b48da5f5548da53100f1584ac4dd59e2b28255629a63996b5110453f90a701d0716616058403216445c19900eb784aac7ecf0e184d69a56467078c043827988473542471b60738279a8493747329329c5783e6d4249370164412e78900e7649370164512e7fb00e7149370164612e77d00e754937092fa2193e1dc11e09c66124ed2f977329c7500e7749370e645126739c0398312670781934fa5e9b67f563e9f6400075101ec0200ee4009d0fbae33c5ac52fcbbdc12b2d2fa7b3d6dcf3d870aedc5a011bf631843caf69e33f695bb2e96307bdc3ebaa3f2cb8175ce0c6348192b2b43abc7c9ce21f80358e32c4a94bc4499643da8b15e52dbe6970acf0e5e4e2e930a2d632b69dd10c8e6337b009b9cdd90369938b619c545d665c026e7845542da63f25cd03a593a8630e9f62715c2478135cea544d81920aca8dfa7583d8efadce5d300e34e613483526daf3b4d7e10da8e48e3a8d0f603688bc345ebc7e590102d99cbe145006d4918e567de66e7b4900b109652228c2f816980556e64fec44300be79e1e02b08df378e6c16b20d6800cda7c4a77ce3bcb9cce445d269e63a608b3b9b04338a4df3eb01cc5d4c8219c5fd8fce07307735096614f73fba00c0dccd249851dcffe85c00737793604671ffa3f300cc3d4c821945bfb75301cc3d4d8219c5fd8f3602987b9904338a3bc0de00602e300966147780bd11c05c4809338b055def4b98f1c9fae7f34007b32c8cc1b764bc5e86df08dba1745b5400b48b28d1f660899eee7c51eabed683dca4e2c016497e2601d9d4dab700e9e230263346d497aee52cbed237ea5b4f3d06cad4724a8cfe9db109eb7b321fa3a1c02a2b4cc239329238ef06d6b9c4249c0591c47905c0b9d4249c4591c4d91c64f66526e12c8c24ce778075569a8493748f19329c8b00cebd4dc2991f499cc7019ccb4dc2493a3042867315c0594589539d7dd500dba4d09dde02e0ada084a7d6a6f3eee364c677895dc5e6b20ad907b257a4570881654200dc3fb69645d99b781b80b83a8cec8e65f6e45de0097beb64388b415369a5493849273cc87056039cab4cc249bad08a0ce7a300e73e26e1245df34b86f33b80b38612676f0d4ebd8bec4e16a332114c8d786e0fdd11c22da2827b15805b6b325cc2291032b87700b8ab4d864be83f4206f74e00b7ce64b884fe246470ef0270d7980c97d0278f0ceeff00dcb59470fb78869bb8afd204ebef1a31094d5aa9f5a502fc1000bccea4c1955194d3cd64832bfd00cef526e11c19499cb7b138ce7d4dc25910499c17029cfb9984b3289238bf0738379884b33092385f0638f7370927e9f18f64387701380f300927e9798564380f02380f340927e9fa10329c7b039c0751e21ccc9c3bd0f2c994728b076fc4ab78c657c863aebb2135f40b1a1101ff05b44c0fa604de85b9fb432796ac6420c9b66819062cf71053404671af9b2c00f2505340128e4091813c16803ccc149084e3a464208b00c8c34d014958bb9381fc02803cc2149084e39f6420cf00208fa404a9962f705ffb32f191da158c8f7756591f2e9663a121f9dd93ede6d01434848ea2449acb125b9e75e8d21a7c83a149d61b2bd82af19dbd975348edd06e54edd0b700fea329f1ab75795e67fc097df9e8ce4302308f310926e1224732983b0198c79a04338a9e281300cce34c8249d8e524833909c03cde2498848d7c32985301cc134c8249d8f52483390dc03cd12498848d7d3298d301cc934c8249d80525833903c03cd92498849bb691c1dc01c03cc52498849bb691c1dc11c03c9512267e3aec54ebef4a81b1dc8aef4a2138faa7c396b138d88d9460ed43f8668a4111befc06ee43d26027ba93ed4ed21c603d8d126bfc64ed518e4220cae34d8520bb9f4e89cfdf4ef451dca1711780f20c4a94c136a98ee23e39f7804c7e2625da9602ed1a9638a84c068ccc71b613007656c3666b5b94bda110a1ed916d28f413c8d66753a2ccd2a0f4b7bb18e1800759fdbd2fc07b0e25de4e2cdede5c236a6cbe3a7991b4cc50668d365241ac02d9fd5c4a88adac1fc5a274b41774af11f15f4987ac3715b20e00d97994c894c71cece7608d73f2de0d59361e0c709e1f4e337c44f8cd70b24aa63328052f08a3ed985cc978693d46f18093bd00da0b29d1c2d38dca4519c9872dd4b18e2155316416da0c60bc288c1625e63493d8518ce21edf85a0acbc388c21b6743a8a8473e46459fd1c00f61253c1127a7290813d1d80bdd454b084450119d81d00d8cb4c054bd8ad24033b0680bddc54b084de1e64604701b057980a368aedd48100ec95a682259cd124037b12007b95a96009e7ddc9c01e01c05e6d2ad8284e772c0460af31152ce1141d19d80500ecb5618c528d640d70522719be2301beebcc190388e20140f301caebc3187ef6ee811cc5a5064bc1e8d40d26e124dd85990ce7f100e78d26e124dd239c0ce7a700e74d94387b6a707ad9278c74f084cc77e90c80f5664aaca9fc3e9d43d2513c2bf15500f316936046f1acc43704cce64d1dc2a726099f244ab72a9919d506e9c3d9345621b22907b1d8fa3d5334cf575b3d83116c77eb3f7f29b0a7f59fee7e4cec823f85ad63abc45d2eaf5cc85e613de59ad5b2dc1ceb954ddc205a4983c816cdb30916735e7c706f001efa7a56c2ec0de0e7587f2b17de3a81245bcc8dcdb5eed531eec1c243a8b63459c66a448c133788cf8eb5109c2a8477418d2cbcb2a5ae6b98bdd274866c18565a712e930559b6c03d57d619d9b1b6e09772f59821ba35b5422bcc9b215b2429ff57a968ab734f59fb6d359b5722bb418b851cbece7b92f584ff560b934bc5f36aebba4c9ac532a147b9308c58ac83b405ce61966058663d2b63f69ca1d236872fd38df10923bb6336bcbe4b365caebe5d217fa9fba965724b7097762b4fee983eff5765cc8653c5c8ce76fcfb25220d2a84d41929639a3a7e787e68e3922a3923785a6ccef1bf8da7bb4c7661a65d63adad7fcdb352de165e6165ee1a31b95dc30a2a1bb1a6ff0f9dba2b665e530400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/97e4d9c03e6f9ca419382043245ce926.asset.meta b/Assets/SerializedUdonPrograms/97e4d9c03e6f9ca419382043245ce926.asset.meta new file mode 100644 index 0000000..a193962 --- /dev/null +++ b/Assets/SerializedUdonPrograms/97e4d9c03e6f9ca419382043245ce926.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7173d5fb12fa03044a1fbd421243ab7e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/97f99290ac8be0c449fc8dbdf1549567.asset b/Assets/SerializedUdonPrograms/97f99290ac8be0c449fc8dbdf1549567.asset new file mode 100644 index 0000000..d6c54c7 --- /dev/null +++ b/Assets/SerializedUdonPrograms/97f99290ac8be0c449fc8dbdf1549567.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 97f99290ac8be0c449fc8dbdf1549567 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7f7c0e702c1698b7b09054a9092904090b6b438b44028012ab4854002a404482348dddddddddd95babbbbbbfeeafa2b6dff3bb333d9b77bf3ee6e6ff32e33fc7ff45396dddb7df3e63b6ffccd4c561e73fec486387fcd63b3d9043694cd65656c155be9fc6b82735de1fce7dea9e7b358b5735deafc5deafc3684e524f992ff1910ebeafc3dcdb9ab61b5ce97756cb173ad10bf97b072e7dfd39c6fcb9d3bfe7489f37fb9f356aca9f3d15c369115b399ac4bac531211f3c44735f2598cc72bd6c2f97b3c5be7fc5a2e94e281e4899fba387f9538bfd488df56384aabf7e6b33d44b45638bf2d76bea966958ecc4542628bd34631f10fe65e7aca6b2f79ede1fcdf52febb89fc770bf96ff87eb6bc6e9ee2fbbdc1772dc1bf39a18b127c9fe35e63f9ceb599737d01dcf36fbf95eff571e5652d4b20abafbcf693d7fe52e68b29e8df5c5eb74c12df4432060059a9306b21af03e53557eafb529ae10f7619c5ce03f238cb61409f8120ec96e077fe6c5084b8ab742c08a463819b8e5967c9f4fb54be3f445e87caeb5652b6f34e975fe4b33c79dd22895ef9ee776c14f36cd609b34995bc57f12b90d742a9db70a9ebcbe03eaa2e2a4da5ac58a10ce315cd73f53efffd55793f425e8b02e93552bef79abc1f95a23ea9d89fd269840ce37570ef706cba30812c95ee4581742f92df9ee4726c7a57203ec0feb472474b796fa4110fc5ea7570efe8929deb7f2fa90e4afe1829679494fb26b8e7724f0b19b7a6f2bbdbe4fdd62c79d9a674e920c31eed8521feedc86b769d7c675b791d2baf9de57b6398cfded976f2da49febeb5fff7d818f09c5fb791bfbf05eef9f7dbcbfb6d03bf2b3d74f94917c771ee3b033f4df08ee230c17db7e565f27ea2cb8017bdfc797395d62adf8e4f92263952e7b1cc6fc763a5dc5da4dc83e4fb93dcfb980a674b20877fff7640ee7601b9db49b9aa6e52f939999e93e5759abc4e97d71d3dc643f3e5b3a9f2ba830c73fb40faca746353bc6fbb7f18925ba2349ac1fc76bd850c775c1299eafb99f2da32c5f7d53bc511749e25afad520cb395bcee1421ccd6ae2db47c37600b1393c89cedf26db910e8e0c869a57897c8eb1c799d2bf94f0cd8c1c414ec20992ef3dcef5aa8f65ab1d46583bcdf595e77f1ebc2760de8f44ec3e9141b2f65be0beef975827cfe1eb877746dbd8d1b4eeb9ba4ccdde4757e40e7dde974765af6e2bbb67f00db48e5bb44f6b5a71bbf363d5dd96db697cf1704749be5e9dd321f7cabf448253f944a1693038c274b1d14db4581f7de07f7fc3ac90b4ffc9b7fab6c2b073ce7df7e00eef9ef0b53d4b58cc5db2c973315843dd50dbbad2cffdbee27df2d67f1794ff72dbf4e01cfa648794fcaef96b0f87a4cbdc7e3f621b8e7bf2f4e316e4b35fa39e16e3224c1b7aadc50e5cf4ccf1e5aac97cf2aa43ed3983f6fa9fa6880f74dac523edbcbbddf4ce9b25c7eb303e0b283abdfa61de53beadb2aa6af6757020e323f3a3de1fab0fba8f75724084b95f57b07e2bda727a74d53f7baa92ac7aa993fcf04dfe5cf6ae4758dbcee23afebbc77f3557b78b5bcae95baedc8fc6db43af09c5fa7337f1b4bd5ffb59eecee5de5b37d03baead253d9b38abbae0c486467fbbbefe649fdd9012edbcd8e92697e534087e52cb1fd7693f19ac1fce5c70c29f743576e3b15ef03e5f520793d58be5fece7182b4ec029a46eec102973a60ce32370afc26a1908f750793f4b7ef331b877e2d55ed9f061f27ab83f3ef56196305f9dc38e08c89f1b88770978ceaf3b07ec47d5cbba367a20be220cfeed27f2bebb94b15320ad6459d3fe38575e7b55971d1948aba302710ae81c29adba07b8cd0ea4d56c1056cb40b847cbfb3981b49ae3c6aba3ea6f1e1348aba30261aab408a69592afd2e265f03e4893d82e81b4526d275d5a05e22bc2806975acbc1e2fafede5b59d5e57a50b3bce0babb31a4f9a27dffd14dc732e1705647705697402f3faf38eac8eaafe3b515e4f9257d537c7c63b92a57ba2b2ea5437ecfaf102d56f3f5d5e7704b27bc8b8edeac5bfbe5f750af88ddfcbfe153b3990de897439435edb26894f4ff01ebf9e1921fe897e6b26af67cbb8edc6fc6328bbb969dcb93281ac735c4e3dd538c4b9ee375d541d739efb7b2795f6e78338f130e67bac3bb591bf5d207fdb1dc4fb38f96c0ff0ec64f96c4fef594cb5db2f0ca4cf2781df2f027275bf5f0c74d0fd7e897cfe99ab7b17393ec42e0dc4e5648dfe207fb3cbe2e32ade81617f1e222d2f97df2e08a4e502375dba8e4a20eb0a7d5a7653630a5706d2f2aa405a2ed4a4e5d5f2b752906e5bc9678b346909daba421effed1a242dd5efd702b9badfaf033ae87ebfde9f96dd54bbfc06242da1fe302d6f8c8f6b6c5120ec2f5248cb9be555b5a3747dcb5be4354fcafd3205b9b7ca6b6d02b93901b95fa520f77679bd2d81dc3b107dd3094fd9ba1afb2d637e5be7f78eddf6e89740d69d4c6beb3d555d7417f3dbfaddcc6febe52cded6ef91bf2df1d29fc93e5c6c298bb7f565c04ecae56ff78277a0adaadfd703b9badfef033ae87ebf9ff96cbda7aa831f607a5b87fa435b7f303eaee21d18f6d729a4e54301ce8a6f05f3b72f2bdcf4e9a5f453e5d8b92c71ddf8b02bbf4095558f48797b49f9df807b7e5d1e0877b90c578e1b6c5e26e5b491cff793cfd5b8f8a3323c359efd987cefb2c07b8fbbf7852acf3c19e0ff54c0565678f6561f9727c06f306e2b99bf4df2b47caefacaea1df50ca6956a6b27e3fa8cbc3e1be05729e57d0beef97bcf7bfa17aabec173f27a86f75ba7b302e9db06e8f182de5684ae20cd42b791549c5f4c12e730655215f3974955ae1df4be2b81ac57e53bef267847ca636a8e4cb695637b337fbf418d6fa879abeac0ef6a4ce3368f7df72aa08792cdbff94f0af157731fcae6543835ccdfdf51e324ba3a22dd766cbabfa93c50ebb71f71efa4431f35bea16c51e5414cae4a376587aba4bcba0083ba040cf2520c2b41bc626b987f9c4e8d49a9f1d6d5f2f7efe4fdbac0fbebe4fb6a8c756de0fd7d03efab31271987d83efef7d947400ebfffd88b5b4c8d857d029ea9b1b34f3d3e7de5585c6c3f7fd84cd663f5fd3bd587db5fbef73df80e3250bfff20ef0f08c4e94079ff23b8e7d78302720f08b03a2820f7e080beaa2dafda395f7a712c5a08be013cd9177e99096d5a8d5b1c22bff909dc3b36dd2f51fb5f7dabc6950e93327e06f75c861c9fed77182e2b767880dfa1e039bf1e217fff05dc73d96f26d04fb5658e0cc4ed48f7dbfe1d53f8568d3fa9b1929fc13d9731dd8d5bff850964a9baf29b401a2a9be5f28ed5a4ab1a8f917d80d831cc3fd6748cd441d58fdf32bd6d1f15f8fe57fff703d498b42ab7bf0be8a6fabc6abc59d9d58fb84db29f02ba1fefbd53afdff701fdd4b893d25b8d07fd06f450cff9f544e6afa3d438914aa39302bfabb66baabe062a8f485e4cbdfb3b88af6a5f2b1d553bfc4370cf19d7baef0fb8cc2f2b768a7cff77709f488e6acbe8f4d58da9fdc152f79151f3177f258f27fb1384f1a7bcfecdd2ae835847377eb972fc67e0f6f2f93ff2fa2f9e76fcb1b89e0ac257730431f01b1ceb54bf6731af7f039fab72e974e61f1396e380b1d3bcb0622affc8b23296ede93844c52351fd2bdb8231e55fa88b638b68613035362e6d2476868cd74be0de89c720397e1c93b207e7c87be9c3109373cdb136f2fb447e93edfd61c7ce0c8479a60c33e8dfd211b06d1b08779314c2ede2ca1d2cd325b6a97c9e9766fa6c86303c4bea22cbdf583bf09c5fcf66fe769c1a3755df9fc3fce5d33909d25ff974c17e56d0c655bf26ac8d9fcffc362ec75c858f682ae3ce2add3a8074cb76d36088aaf3a5ff58fdd87d2719a6f4798c5dc0fcf30517c8efff08c8537d8dce01799dfdf2ea75ea0274eac87c65614ce914f481bbd09f6e713e701705d2f542f09c5f2f0ea4ebc5f27b696bb14b02bf5f9220dd954e9782b450736a31f09b6ece2d98eeeab94af7cb03e9aec6822f4b92ee6a9ef90ae6ef075de1a6d1d0856e1c86aa7abd8bfc6e87c47263dd02f2af94f2ff04f7fc77cd1c794cc5ad975f86afada5e6cfaff2beaf6fafa8764a4fefb791aaaced0abee3d71e203ec9e67212952b9b33ed9862de83cc6fc30724e1d69b69c790f25b849493c37c634cb12d986f8c29d6477eabc698facaebd57e0e31398e1abbc60b2f763578a61b3f4aa29bf699ec77c6ae0dd8e1b532fe5fbafa0fdb2c60876b937090efc5ae03efa9b0ae0771ea2faf378067d78367fc7aa3d4edbfe0ded1ada03220f726f9de5f206c7ebd593edf00eef97703e5fd2dcc57a7d6cbbb0de8748b0c53d9f19681306e655e79c4ed684880c3ad40d64de0999201c779d7812b7ffeb74c837efe3093a581365dd4da8947d2f8f676e6efafcb3988d81d01dbb9c36555d8cfd5bb50f990283b7d2c89ed28b96a1efc4ee61f0bb9535e070279fcf77f7099da70ee0ac4e7ae40b80359f23180e7e5bb83e4f51ef9cdbfe09e5fef06e93f585eef05cfe45c476cbdfb3daf767c367a1f78f73ef02ebfaaf985d7c1bdc3bfa85f40b6faee0119460cdcf3abb2d907e5ef59f25ee5d187800e0f8267fcfab0fca609b877741891ebdac0880d48588f307ffdf94820cc47a5dca6e09ecbbd29f0beb481ac6c70af184339cd0272827a3d0ee2f8b84c83e792d8abe45a3f0e7d1ff3da518e3ec32bfd714a264ffb4cceddc5d43ce813016e725e42d4c16165ab7ef393cc9f8f9f9476b441ff5e567370cf7fff2d7cd831558f3fc5fce34b4fb9618f0cb47f6249d6d5d5cb93eb9d62aabff2b4d4b905b8e7d767982fbfc5d41c8bca77cf327f7feb5957af51bb04e43c1790a3e659944d3ccffcfd9ca7c173152ffebd6c378daa0cc427d97a42dfb3ec98e84f4f65e5ac9455b13c9191798c525ddaa9be4cbea853b48f45ac195fddc983ad752aae2a47806665e55cb16eb39615b202edcaca6ea24fac429f20fe2e75dea810425b65c50571775c105cb94ae7bf72b02cb4c6793e45ac2ae50b432b9c5f86b2e9ce957fb5900d63f39dfffc52e639c156b23ae76e8ef3779590b7d0513bfecd6451e24b4883dfcc7664ba2b5c57384f14d02ae7be52685822fe5e2d342d17da4f739ed58af5b62bd95236deb9ae15a1c5c7bddaf9b72ecc3912995e47fd4257ecb9bb9c5625d34427365cfb3c618bff4b91c648118ebe592b990f9be689daf298b894f81f43b790e18d846952c630812ce67b56c0f2443b62761cc1f0718c8fa1debe5dde454e8591282e7a323cb97b88187829bc68d169f7bcf3c7c2926c7fd40a599e6802f54c12b54460b9bc5c31aa12260ad9d94df3b9a241fc311d7ed1b428c9207ef7bd0af15ef80468262a3f7f028826c81ca7549b052acfb942f94aa19a3e32aa2ade59065e16d8ce60025b264ad2e52c2e65f3b91acd45e2c457bdc92288254f962e79442b6a4ea3e40e6c5386c409d4a23e165e02e589f654d704668c85251a5a59b2b5a532dafadb8b57ce39f9eb4fb3f5e9d24aa44b3aa16129d3449732ad329d7192d71489d2a5757dbcbc74e17ff40cdb20b69d4c078c60531dc1d699b66dfedb2a21a5d479373c433ebd333858f8e8016e82186172153084d91a84f91ce1a61aad5876cb80565c214472335de2b4699c6a393de3e663a65d0208b251e36e97b0560d6bdacd75f4c444e042527aaab758e2740b76747e2b75de2f174d4ffe7c9623b1d4099bcb1b2742f07a98fe2f1293e5b37f5b05c96aa9761054fb81be6f54cd30e22d34c4f3b9bd76d4988128e38299a11d9e195a62d9ac53d46cd60a93dc39aae4d698e42e5125b7c124778d2ab9ad2edbf0f7c5c210fa6ce30db2a87f8d77be5de64466b568ffd539dfeb06651267976e296797ee22bbe430dd5051388db06cb2892eedf8c31e3a258349d71d4fba4d31c13d230ade0cb3b65e51adad9d4e32bfe5b39ac10e9dfa131740361e407bac4ceadd006552078c4b4e542e1d31c97da24aee8401d9a2018074c684f76d00e15d3026fda232e98aa9ddbf01d4ee86e5ca2d23e6caee98e0011105f7c070e436008e9e3ae1bc0a1ec8e23b42ff3a7fe284b7c185f7c2341fa4d17cf4d8ac509a6f8ed9dfe0a8f6d71b933c24aae41c8de43c514f1ccc325b9beba759a6889d33cb59b1d390df8bb9e3e32adc55626c9c6ba4c6d9673bd725420bfe9c6b917c7a2671bb60ab7a3e60544454779358ea9345f4b1e0236959a27dc2a7f372c5c8da5ce7b93b2d3449a440850869a8561b1e02f6be623183f14d41eb446a67236338f92274b3d860edac3e5849334c53d2bca92bc61294345b6059b6206a96edab93ccb36ca1c656f3b9adf219d656a23c8f0b271f0fa79fae6810edb17d1ab568707bfb5cde1231f3e9ca9bc9f8beb66b84a92e770c78b5349c39ce3bd54e18e5d2c8a314067c17ca5e01c031e6fed1678722911dc6a6901d2863856580fe3a4be2c3227ccb8bb8c17ade089acd66399217886cb8b778cc29b9a95b215ead60fb3857358919676fcd717bdb52a70def6d72c7c2a4cd950eb8e00198e0d11105e762797c4cd43c3e50279997367c03cca82dac4198dadb44557b3056a26eab295137c4c295a84330e16335c2d7678513be954e3837d6ed52b19104563d1413bcbd2e8ff11c39418c30e738ffaf72bee0e399a522f7e788cad02b0d729cbc5ee1fc8b57d843c0fbab9c375ca781307ae66146312eaa51e463e9365e936ebf844cb76198f0091ae1539b84135e80a5dd445dda715578bdc19b25cb64dde62f0d7384fb468ef0d8a91323a56522e56a44bae6b07d1d56fb3bd75ae7ed1c510f548adf72c436efd5a2ac0d93a68598fe9374fab702facf021a86097138566e4dd6945bb190e5d6089d70def099c290860fdf22267cc3a708c3364d87ad97e0b956b45cebc4fb25c200caebdbca650d54418ed4e89527c6af56b2c66c90f1de02f76faa11fff69a283c6c6f363d4ac38b2f810836bcd41f7dc38b2fccc8155bbe67427bac81350a2b54a76b0ad55898427534961766607961665a79618ccee6c4b06655a3da1c9ea3660bd93ce7456ff0f32d139b047bff62e875780a96d5503a0e164b366bc4311e2eb91a5e98f209af45e0bc0e17bec812fa3c314be4894c6a8ee58badb15a7b274dad7d5b76b85a7b1b9dc98a51edea4635d989424226cc76b6ce6cc5d07b510a89df907af6166eb035a2502d9385aa5b74f7166b6dab45b559ee3ce7052ffc7db05893cbdb4b9305ef15823c8f5fa9e8f762465e228c3cd3f1c40c7d5bccd0e7680cfdac66e10c7d2cd64e99ab6ba70c13a12e63eed8598ed34928158d51d5e85ccda00f5d8e70a158e9343c2b85f1d78a772bc42fb58e948afa7b6e7ea5722c2e27547b663b4cff793afd792f3eb75e5b9d766beae356261ad4ee58226f7fe538efad72eeb8b04a27cb0c74922f9caedb63baeeacd3958f2c4e60ae177785d0a65ae8ccb5734d8c171f39cebfdd4edd1a0dcba1a1f41b8719da2e1a435b1fd2d0c663cd985d35cd98507dc30998dabb69d4fe32a4da1331b5e747557b12a6f6ee1ab597350fa7f6644cf81e1ae1a35a84133e45279cdb15dfad34ca38c7544cf0025d06e163cb5e56f68f772c1259588d62948927eb7c59384738e62b5fa4305a4ec3d82ed4b0dd1032e176c010944664bba34e3037cf45a9084e30913b5d2798f7221633a41751c6d2e945ccd085c3b1976bb01f17d2a46762d97c49d46c5e8c495e1a55f22c4cf2b2a89277c2245744953c1b4bc4bd3489f86dcb70895882095fae11be7dab70c2e76019b3525736f5677cd0d3eb6aa9ca5a9557a58e61d5ca2a7db56c3996f946f9f8c85d851cfa0993cfe7627aaed0e9e9ae03e48db812d16ca8968d9d62bef02144a8f330f42b35e8d78644bf33267c9546f8ab2185ef82f1aad2f1ea9a245dcb84a39ef77498f3340cc75d316df6d669c36fbd740b13ce6e18d26a0dd2a35a87433a1f8b448d2e127cf0d1c537c64136530c5b97ca358cab45351e1ee3ee9806b53a0ddcc134d530989566b3600f0c699d06e9832191ee8995c8aba396c80b30b5d7e80acd36e1d45e88a9bd36aadaa53ac9bcd5b18e21ad0eee7010bed5b1080b675f2c9cfdd20a67b12e1c4e6affa8a4cab0043e4093c043da864be0724cf8811ae1cb420a5f82093f4823fca690c29762c20fd6086fb14938e1cb30e1876884cf0a29bc02137ea846f8612185ef85093f4c23fcb490c29763467e785423afc4d43e42a336f7610fa3f60a4ced23a3aabd5223394fb82067726d61d0872fdcf22bbe75486aab1ef846b4ba7585c9c2c7064657e9d285d7d0c7e8540a51955761d674acc69a5e0c9909f6c6841fa7113e35a4a95663c28fd708af0d29bc06137e8246f88690c26bb1c43c316262d66182f91ebb716dc121c23a57893ce68e01f3e5f92bc5bf568a2d52cac53871a91c2556034ecafd82eff79023adb75ada341f2d0e3b56bc1ad3fa649dd6dc7f804f4578ed663842acf38ecd610364ab7b4028bdd66036708ac6062e0a69036bb1489f1ad106d66904e789051915a4e52ce60d3d474c41f1b1fa25c2525684f69d4e5c269f9672997cba2893b9e71a9dae58f9bd8f2eb979dbfa0c86b4adf936bcadb8caa1dad6fbeac2e1367b96c66673360b67b3fb61c2cfd6089f1852f8fe98f07334c2ab420a3f40279c376bf8e69e919a3507626a9fa751bb5fbb706a1f841512e7eb4a461e1f3538e32fabc3941f0763615ea00bb3a3c84d557240af9c8d13e57185185758247284e72314468b43302d2ed469c1d347edf5a476809a2162be4ce4cd30211f8a857c11167f6f5f95c424c26871186656176bcc6a9bf6e1ccea702c8a97e8a2d8a2deac86cae1a970d5fb11586897ea42e3d53b4fc072d10c29abf7ee7467b9168b65c22b854783f75b7ad5fb9118e2cb34885f0c89f8282cd297eb22dd53dcfaf7e4f1cfd7178b81d83ad9d22a4b33571d8d6975854eab2ea1b50aa3cb3118fe2b35f8bfec100effb198f0ab34c2e7740c27fc388c22df4d394ad3ed784cf035bae4e1eb60c73bffac1045cf183032affc825cf708dea01b93d6d0f2093a7d78a3e55a86345af83ec2e107044fc4c2b91e0be786b4c23909e37b23c6977734d41079195b00b6caf2c8cf66ae4f16ef32ad0bc5f7644c9f9b221ad22998e09b7511e5f9627ebdf1b866b247c842fe542cc3dda2c9703d3b85cb70a761c26fd5e5e690c24fc78cef36ccf86e4fcbf8ced085c31b2e77a492d8099c12cec404df1951f0599815dd15d13ccfd609e649c477fa0cae7ae002c2ac7a380733967b34c6b25fe770c672ae4e386f77f34da123f523cec3d45eaf51fbbc906a9f8f09bf4f23fcc190c22fc032d0fd58067a20ad0c7421668e0fea0a35de305fe0fcc767fdb827d452364b3452f8caa0b5e2972a31b0c5ebc730b67b11a6c5433a2d3ad46b91effcedd6c935ccf5c84d5f878b311d1ed6e9d05eea50e8fcefba81f26fd63a7fa7afc12598068fe8346801d2629a6840ae0a15daa598f93eaa31dfe3ba8433dfcb30f37d0c33dfc7d332dfcbb142ef094da1d72464a1770546e8490da1a95dc311ba1213fe9446f8b290c2afc2843fad4bdb90c2afc6d2f6192c6d9f4d2b6dafc1b2c373898aa682062e9aaec5b4783e71d134ac018ba6eb301d5e4854340d6fc0a2e97a4c831793154d3b8bf0c2ad31bc0133df9734e6bb4bb770e67b2366be2f63e6fb4a5ae67b13868c1feb15a5a1773346e7350d9d4f43d2b905a3f33a46e78db4e8dc8a45e24d4d24b6e91e2e12b7e98473a26f45447f3ba6f5db1aad4f0ba9f51d18fa7730f4efa685fe4e2c12ef692231bc47b848dc85097f5f237c4e48e17763c23fd0085f1b52f83d18fe0f31fc1fa585ff5ecc38f951b768b556d8c0d5da7a4c8b4f745a78d55a4103566bf7613a7caad341556b231ab05abb1fd3e0339d062d9957ad4d12c3b3ab42ba783e8019f0e71a039ed8339c013f8819f01798017f9996013f8445e22b4d24d6878cc4c398f0af35c27bf60a27fc112cb9f969d551ea854731adbfd5687d5c48ad1fd309e7c323fc0ceb48c3238f636a7fa751fbb6906a3f81c1fe5e97b7b86b506227ee39ceab55c2cd7aa92877aac51a0777c57999708f99c5dc9dd1dddd4a4a9da76572a168b9f8d52d37f9c4a13bbb354ccc6ea9f9ae75ccdd243747388fb9139e39625eac4cee7fb35c3ca9116f9503c97af7980ae9e6031d6ac24ee73c8925d00f9a047a3464023d8509ff5123fccb90c29fc60aa39fb0c2e8e7b40aa367b048fca223b479b8483c8b09ff5523fcaa90c29fd309e799f5b7540aa30423cccf6b04e789fd5d1bc757297e1fc586f555fa5dc74bebabc40f754becab145d57cc57e905cc96fed4e5b690b6f4225645fc376a15f11226f9afa8925fd649e665e18654ec3f41a1f98acefec536c44b1ac5fea3ec709ad8f2ff4ed9f2ff11963f2881e547db87559f12af62c6f36f54e3790d331ebe9f5714e3795d27d83d7b213e9b6e9f132e9bbe8169cd8f788d6b12f1dd62c6898e56b9589ea75bd899239a4b39219d74dec4f468a2d383ef90164efe5b98fca61153e76d2c75b235a97357c8d47907d3ba19963a3c8f2c934d44951ee5f53e44e9ba50bd8b45b2b92692ebfb848be47b58245be822c973a0726170dbb3e9bb40be8f85dc521732efedbb87b2e5d59fe89257bfc55db19321dc0d4dc268f001a6412b9d065db41a4c17ffaa15fb01b9adfef4d6cf7e88e9d25aa74b8f1475893ff2238c4e1f6186d7466378ef6e11cef03ec622dc366299f00926789388823fc5046f1a51f06718e7cd349c3784e4fc3926bc9d46f8837dc309ff0243d23e22922f758279e9d32115c1093a435fe904f37e68c718d20fed144ba71ffa3586bdb306fb59fdc361ff068b44172c125dd38ac4b75824ba6922f166c848fc0713de5d23bce98070c2bfc30cb387ae38e5fb412807437778a94cb4b155419ecb0632b5cf5885704184abb172c49d5bfd0c11db00558b5adf2d726b58a5d828a886c1ed30dc4125beb14355a06510bf9fd992fae23c4714e66521bd06bfc758f4d4b1e0fbd9c29d63dd56a657c17a0eb06b848695ccdb51c1d58feb9c4c428170740f178f1f3083e9a53198395b8633981fb12cb53996a57aa795a57ec22291a389c4da9091f8194be93eba94e68b52f543a4f3e5e02a77cce5bd0b77c3c144699a9bf0d781c2d3d51d56f5ecda9f035609cb5043a8fedf6a855dd56a72d122a1e12a3000ebca5e257ba761eceb171d3dbedfe316a9d4390976e4ff154bf3be9a349f18b2a4fb4d275c9c2f158bd8a7fe1de3d13f228f3fb0bcb62596d706a495d7fec4d0e44645f35f0ccdc08868fec2040f8a28780366838335363824379c0dfead13cefb4b4352d1fa685cf03f98d65be91aaf21b5fe172b2d87ea4a4baee538e6dfe48fd78115a2d4f1ef9ab9a87ed9022f899680726d4dfd2ab61cb697f3ef0ab99d60fc74957bce937ac79310bfbbe9aac03e9ee52cf11e9eaa24ae03ebe8f85b4b58f03007b5debb428c3a710c6ed9aad623852b5f590cc9f67958b6cf4f2bdbc774e170bd8661e3366a125f91aa70625dcadc8d7dd37726c8c2f428d0e9a19c09f2c54136a58279b83e53132cbc426c404585171f2e7f52cdc20ee934d569c0b3eb704d762d1b182ebb66eb84f3d27c44d4d2bc19a6769146edcb42aadd1c4b9591ba545993b49459297260a56cfda453ce4c63ea0097754c2df9e469bdb79056cde0a2cf30a50a7d09d2024ba8519a847a326442b5c4848fd608ef37289cf05658d937062bfbb64eabec6bad0b87bbb46f134b7058453080223c803698396fab33673ecbac4ee72a165d8362c748264a83821be3ed008c348c49b4c5c08ec5c06e9716d84db0786faf8b7777106fffe2de865bbcbe2966afe334f6da7470387bdd0c133e5e57248614de0e633941c77222535bc4fb8bb50adf46f15e51e8163075b253c98b24c5bb4f5c236bb1bce385ace7efe3eeaaafba9c7c13c7c532fc30e9d31e8be544ac19a27c8baa5939e8e87a85fa52390c14aed0ec80e59049580e999c560ee9888533050b676a5ae174c24c739ac634cfdb2a9c6976c622b10316891dd38a4417cc38a6eb8c435b482748f2ae98f4193ae9fc07371be5a5b17cbd1b961c3335c9f1e8d070c9d11d135eac119e93174e780f8cd2ac547aad0990f4c404ef1451702f0cc76c5d911f12c7e698f0128df0a3420aef8d099fa311fe6248e13998f0b91ae15df3c309ef8325e63c5d5eaa65a9ed3d1ccd55d59dfa5de0737e35db71750b2c8976d624516ec824ea8b25d12eba24e21ded78dfe13091e9875512bb6295c46e695512fd75e1f061b5f9a994230986d5b6c480edae03c6ab9fbc50800660f2f7d0c9774f1e8ab7e83021e66221eea90bb1b3d60466c85eaadb67f57e0967e903314d16e834e112b8ff60d89a609026943cee1512e3472d646a9fd739ce1ddfcd32fc1eaf0b63dccfc70f43e40fadb762698c8fd9778a8b59a2f0311fc4c1baf4e1b78b627c76d8afd20e330e6e7e5ecfe7b2e292261b4f9a2198012cd619001fdb57836d7ccba705ac5646aa22a4e16d85855ba60b775334dc95b2120813f6509d39f6ccb439ba7db6ea34ccb13cc667b5fc888622c6b80431c644a163c698a7e3c637678b2dc82037f73db7d82b11438f7cb8b1584cbebaa3163569305d9a68c4494b769920db372ee6e9ea8751cfd7e514711a4d2ce248f2304cf25e51251760929747955ca893cc5b5b95b1e8a7ba0fc70aa51511bb4223301e2ba3f228c224af8a2a792426b92aaae45198e4bda34a1e8d49ae8e2a790c661a35114d636b4c706d44c1db6082eb220ade1613bc3aa2e0b158eaad899a7adb6192d74695bc3d06635d4418e33095f789aaf2789d64deb2db37159513786d4cc054de2faaca1331cafb47a43c0953f980a82a4fc6241f1855f2144cf24151254fc5241f1c55f234cce60e8968733b602a1f1a55e51d319b3b2ca2cd4dc7041f1e51f00c8cc5115159ccc4c6768e8c38b6538cb1382a228b59188ba3a3b2d809937c4c54c9b331cac746a45c82513e2e22e539188be3a3b2988ba97c424495e7612a9f1855e59d31954f8aa8f22e98e093230ade55279877a64e6980ced46e18e853a3829eaf93ccdf3f2d151e0996dbecae13ccdf3f3d15c1ffe082f7c052f08c8829b82726f8cc88821760a97756d4d45b88a5ded91153af144bbd7322a6de220cf2b911212fc6049f17517019967ae7474dbd722cf52e88987a4bb0d4bb3062ea2dc5205f1411f2324cf0c511055760a97749d4d4db4b3782bbb9731be3071f667e7309dd146ec36e3271692a699187135b8ea5c56551d3a25227991fca75792a2a9f8e0b5e81d9e51511ed722526f8ca8882576179ffaa8879bf0a4bbdaba3a6dede188b6b22b2a8c6045f1b51700d26f8ba88826b31c8d747855c87a97c4344955763826f8c28780d36ce7153c4718eb598c63747d4781da6f12d1135de07d3f8d6881aef8b697c5b448df7c304df1e51f0fe188a3b22a23800d3f8ce881a1f88f50cef6a809ee141188ebb23e23818c3714f441c876045dcbd518bb84331d0eb1b00f46198daf74555fb704cedfb1b40ed2330b51f88aaf69198e407a34a3e0a03f2500300391a53fbe1a86a1f83497e24aae463b14cfe68c44c7e1c26f8b188828fc7043f1e51f00998e027220a3e1113fc6444c12761829f8a28f864ccde9e8e6a6fa760929f892af9546cc8e3d988431ea7612a3f1755e5d37592f94cc2f3a9a89c6026e10c4ce517a2aa7c2626f9c5a892cfc28ae6971aa0683e1bcb292f47cc29e760825f8928f85ccc9c5f8d68cee76129f85ad4143c1f33e7d7239af30598ca6f4455f9422cf9de8c987c176182df8a28f8624cf0db11055f82097e27a2e04b314b7e37a2255f8699c57b51cde272cc92df8f68c957602a7f1055e52bb171ca0f238e535e85d9c54711ede26a4cf0c711055f838d537e12719cf25a2cf53e8d9a7ad7612c3e8bc8e27a8cc5e71159dc8009fe22a2e01b31c85f46857c1306f9ab88906fc69a2e5f3740d3e5168cc7375179dc8af1f836228fdbb0b2e83f11cba2dbb191a3ef228e1cdd8141fe3e2ae43b31c83f44847c17c6e2c7882ceed608ceebeddcc69633338e76982fe7121b6efef1271db3588099584ff2738caf27e15391b4fa62eb4ceed1253b4f9d5f524976ae3d22f85e9d607efb6b2c7e0d9bfa131740366e57ebb152f2b7062825efc384ffde00c2efc74a873fa2960e0f606de33f23b68d1fd409e66b39ff9b8ae052dc4c1ec204ff1551f0c318e40d51213f82b5e6ff8ed89a7f1453f99fa82a3f8665c67f1b28333eae0b80efacc4b25260f2072ef8090c762c15c109603f89c1ceca8a08fb294c7293a8929fd655a5391cc65cd6384b315555146ed965535dda69abc7ec2c5e3d768b8b5d2a3a6055de3358d9de2c2b7ad9fe2c96f8cda326fe7398da2d1a40ede731e12d1b40f80b589bb55516b29796bbbb55099bc876ac3f3b62268bdfb46fa8581f3ecdf9bdd8f965a53069fe44df32d2f99df1b7a16971c35fc5dc8d4ec21d00fd2216cbd6ba581e511fcbb94e1b8d673a3783ae10ff9e264f0aad161baab819745afd9b93ea8f6bf16f085f2d7994885fcb1c8975225e5cae9f9e276181d8fd2d8c1e98a4398caf2c5f2a7ef533859935c87b9ed8532fdc2e022f61a4db60f6044374e354e87ce3d25ae5148a0b1cdbf03691ac167bb9f1f40f6aeb7d8b3f6f287b7a198b655b5d2cc706620999bbf19c2c526c858863504b7f0ac15f12e515f8559898bd82c56c135dccb64b29fdc689ed882a985a6d1f3de5bc5fc2c4ed552c6e9beae2561488db0c913acb64ccf8ddda468bc96b584c36d3c5e4b80c9767de37fc0000b54767193857a82684954376782c785d52279a19b0d4e30dac862bdb5ec7a8b7d3511f9752de98cedcb3af4d28d5dec0e2d75e17bfe98456c59fee2d82e1b1729bc31522e80ab68fc887fa92249d547d138b75075dacb74d186b5cd3d9222eee41186e1c556dcc9f2e9684e2f345faa9f91616af8eba784d485a47a55696e3f938514b23dddaea6d2c8e9d7471dc3574ebb544fce26fbfea24b8cfe07ec4e344772e4a6b371d5b7e07e3d159c763c78cb44ba85b2cef6271ee82b5c5c2d980caa7d3c5b6e35c104ce7b016112666ef6131ebaa8bd918246673455ead9479d61d4e503db379b2a42a8b4b0d9a7ed8fb588cbae9623499b08651a9eaee57e6ee9e1d4f21fd987e80c5b4bb2ea6db306c8e415752f86300b707e54ca68a54ae163d3ebeeff4ba068cd58758ac7aa4d2eff1870b6b95b92215aa9d77793e5c9aa086f7cb68b8987d84c5aca72e66bb115ae61491aeb3c470df52d9629e27e854d45b6ae2b218cfc961887c8c11e985e5d554da0fd38455f3b65da92c93e2ed33bd3644fa69ff0916d3cd75312d27ee4d454bfb54cbf0745a179f629c7aeb3815a45dd3f29a69062b95ba5637604a7f86c520471783b98dd66f0e93bfd349c9cf310e7d741cc6a3b513efdff39313540aba9bde266e4be82535b4ad7e81c5700b5d0ca7858ce1ce224fae4ca1c4cd547cbfc4e2db5717dfd984965d9346cbaa21087c8511e8d7502d2eb7741e07da5bf4b1fa1a8b557f5daca684b4e349ac5ad435f1656c63d8f037585cb7c4c6d7c2a6e064f146bc3506cbd7d4e58689dfb758fc06e8e2b775843e41ad683bf07d6d97c81e3c1eab3971ef8689d37fb038e5864bb3a07d8e13a361e5e2049b64b98cb2a6fc0e8bdf402c7e614603fc2d7eef573e5f977894aca1464fbec7e2374817bf7e2cf198f61c873085963f605a0e4e3c321d26154ad24a054adbfb118bf5105dacb742f3d69c7a4713584678c782f3babf4edbee4c6f76ea274cefad747a8f4eda739c2666b6f9d879a538147a125b21f6ee4ed6736ca85ec3cf587c8662ade5c479848f73cc122d48755466d89930def25ad28031fc058b615e2a7305fa99ad547afa999cddfa158b63be2e8e53538a6370f6ceb54e15e7c68ced6f586c87e962bb4bd23c483b13403d47f03b46a34047a330adfa4395abfc10186faea0e152f40f2c0e85e99442aefd96382f2f92ad45b757d398fe197f62311c8ecd77e8ebbb78affcc66a1dff178bd1086cbc29794f2b95323695fe5af83e5dfab6fb17c6a148c76150080e2a4dd5a9330d55626cc0341ea9d378cba4e5a7378b582e9e724fa286c9357f639a8ed2693a32412b3168e97ecddd43ccbdf1498afcf20f1697d1a9780f62730e930c9b6ff8178be5186c963e5c39e7f627e37f8df72e510760e1e9192f659c1833e235609838f3b506da386fad8b73ff40ca7a6152e7a618a6e736d81c07d67609ea3c45ea9c6a1d9aee28531616836d7531d89dd18d04a73293092d30d59ca7be0943a50946656c2a33d72ac430a58a17332cc7354c69d2148bd976a9ccd3866d59446fc3a71fd36c2ca6dba7923727089b75edb3168c57b9365ec48627899f2edff2afc2c4a019168371a97b90f230c3d8218c1ff6bca152a83916bff1baf80d8fdccfa299256e81c5620236da98b815e29d3917d4519df987977dd8797589cacbf46ae89658ac27a692bbf4e1a757f3256fb33777fe8bc5f8d2ad49428a3ba2b64a7cc3db39797d9c9f62f9f5f635b4bece1aeaabdfbce73cfc154e7ee71633a7be76e24bd7124b9894e5ae4d137f06c8f358dd223eb6840597c64d10f22b6599a2d272a820e47a98f2257f439d764d85f84a2df24b160b5d3d3d14d4d43076c9e3b407b2682f268e7a87b21cd25b70d21b5b4c27f354cd91a99a95c78f948c0d4ed39a926b318587d6446f435de2c8c2dca1d3dd153053f687637ce1f86c27734c60dc51b55c0c3abbc931d709a18cb9cbaac68973b92b4491eb9a7e523d823bc407f5d84a0850ed9da4e2e682024127ae9b303ed7fdbc9ab9c3aefbe532d63c3b2b9fa7cf544a887c0b8d05029a7b943aeee76f03b6779b7ad8a665069be7425fe35479158e7cff120f1bb031606d3b5062e34baa278a5e5395636fae9f986a0d607657630542ee41a810ee48897033e7463514a78a462217502a9afedc1da9982db702d8792d3d60d329817564ee79def9ccf3e0b219dc86d61eb81994e0da6bc071812b9d8ff8246f9d785a6605b485cc833693dadafcd973b26c7e7054ca8bc4b53a1bc0756ceb812ba604d79957d9ce2ba9560b36c03b0d540ab328e1b50659b5d8377e6903a6ca1c0fd34e94985a024c9e83a80d88deecee219a4d89a8994054635519f50328a34a28e1f0dd1f8bebbb4a6adad07520992d0afd3ac69de779313f4b0ed2d900b0691f0fe01c4a805d18de6d82f3abe52273dad2b8e83ac0c33797125f0b507e7135f944b40d80723a7b80e65117f0c562a6cfdb57c70e1b7a16d4813b67ca86d4621f1b007ddbc503b40bf5b0a26ac14f626b45acebea9b9ddc0fb24c944fb3858595097bab7402b40122ffa320ee4a09b117633e787c60912fd92eafdf1ab6ccf2b67d4730d4b81b25cab6b24c53f6b64e3638e68aeeb70da8be0465dbfc4c75be795f123a6fa8fea44d0ddb4f5b78e076a7ee7c43707025e038d11de7b391de9a471be02d6be3c1db83125e1b50a37a8bbddc658836806a0a5a677b520f5dcf10d96f7960adfc44e7f56a11920dc0166679c016d04f97c08de61608c70a1efbe56cbc63677c60b1acbe9ce323b376207c77a087706166c763fd1e7d65965509bb80699352fad17fde1a9b2882b6b9adf664b6076d11b5b54d1263187522706fb54cfc78870de05e6ce6815b4c096e13904d6d9d63e24e590a5619fd8ca6ebb3b14a88b1bb2bb50dc89ee5d4f5a9f2182a16fdd262b6c429dfdc8122e896b903735dee6cb1bdb5a03e5d423d04ae10a6ba97a90d006b4557ab79764078d0a93c7df7bf70d47147c54d993bb252259ed6ca268ccf71b19ff38a719a2f858e87b9698fb2e526ad2a7253765cc80d3de99c9ba607536e4a7d9fdc88c366b921bcf97243d522b92937077343b58172d32a4f72430df4e486ea03e4a6e460951bcaab2837f4f88a4e67dc8f24376ed63637e1a044ae762229573b35908b4c9ae726f039c845e66172938c65e6a635c19a9bc6ac626e0807cedcb41d8d73d36c70e4a6d9f1f7d60ee87dfef3f9da8165ffcfddfaf3b95b7f0587c00f88e17fdc56d35ed4ada60562650f8f36afc912effb34cc69bb0474e819a783ffac25d53ad269d3d2d77eda249508a6d386da01b83b2d37096781953897039c9526e12cb412e72900e70a93700eb712e7fd00e74aea598305b24cf46375db07fc35327ccda9f0f500f85665c21a97a2f608d55fc046b1223a9c6da8706e067056998473849538ef661ecebd4dc239dc4a9c97029cd526e11c6925ce1f00ce1a9370165989f30580b3d6249cc3acc4b933c0596712ce422b711e0870ae360967819538f70238d750e2ec24712e966346c18d745cd5dd4d5af2e9406653811c0c5a9c6ba95d69d5386baa63defcfd6af1ae7d1dcb6260a1eba817cda969213ec4ea0dab92416b4705ad2b80b60f25b4de0cce1ca43e7366b345e602b8fb52bbe1261a3982e278f3c8be618f31a0d4dc8f12e5a6126551e6c78cc8ecf0316087fb6702dea8ccc3fb830adef300de01f46b1cf1868f3f13930e689065e30f00cc034d8239d242981f029807990473b88530df03300f3609e6080b61be0f601e6212cc020b61be09601e6a124cc2d9473298ef0098879904937028830ce61300e6e126c1b4b187f3068079844930475908f33b00f34893608eb610e6f700e651943007499895ce4b7c08638d7cb52c89bf64623719c29295acc77e2618ee383a93c82b9972ba864ea60b426d4a4e8abc0315f2db01f2632891b712c897093f66d7af7aa980679f95b60105c3b18d39bee93f9680d0fa8ea642391358df71942807c46578f7bc80c94c9d7d39def99f5be76a31025fc712edc54f0a9bac42db07c03e3e13769b5aebc04694fd4111700225cacd354540aae76d91a23d9d0a6d25b0d213a9ad749c5864b24a2e96e18747f029b99572019d5a42e42eccb2afa26a0aacf4a44c6c7d3cccf97f850cbc54d4effca9cd7ec7c70184276702e1c88d0ee1cb00e129f4870cb873edea1a3c3dded639f51701c4534d5a8d41ea744886732750c99c66124e522f39329c87009ca79b8493d487930ce70500e71926e1249d7d27c3f924c0792625ce3ece8db77c1f8e1095b0e58c2f9586037a339d3739a525ac427c816cff6101e08ea0723a2b336bdbf233ef6ad39d0adf9700dfd9e6f8cbd938665f0cb2fa39994009bd8ca73b9dc629722f069ea9d766a2c54986f2646095e7d2cf25c121e1054e69c9d18d177b1d2c97a2263bd77246ea6f4c96c5db0298e76562bca856eccd51533f85a136825057dd686701a59f08195a06b2fcf9a6a21d6625da1b81d55e9089e9e454d71211564d642b89260198179a0493d0d1810ce60400f322936012ba2d92c1dc1ac0bcd82498840eb5643087019897980493d0d59b0ce63800f3529360dab894755b00f332936012ba2d92c11c0c605e6e124cc2295f32987d00cc2b4c8249e8ea4d06136eab7da54930097b4064308700985751c2cc61f14373e19c0f09eb7732e7c38341dffdeac6f457de189c67f380ad5e63124cc2fa9d0ce62800f3da4c4c69f081e4d562de886fa49b219f0f327cbd01beeba88f2850f8e27d3ab9306f870f9b9d683e0640afcfd429f61b971fd25900e10d994058b4d1219c0210de68767388705493ac397417680edd94294f396ff6124ec091cf5b924d5a9c096cf46673bcdc6d5ccf3e16a0bc2553b578b2b3246cf6e29c0880de6ad2e67ca3ad1ceac801e5e56d26e11c6525ce1600e7ed26e11c6125cedb4166bfc3249ca45b5890e13c07e0bcd3249c23adc4f935c0799749388bacc4f914c079b74938498fc621c3391be0bcc7249ca467b990e1dc17e0bcd7249ca4270d91e15c0a70aea7ee17a576e2e06ca11a3ff390b05f348b0ae81800f4be4cecd4d90847e3902d985e07e0dd4f09af074b752dba7f630a4267997fa8a0de00fa420f980895703c890ceaf500ea83264225743824837a0d80fa908950096b7832a8ab00d4874d844ae84c4306750980fa888950091d15c8a09602a88f9a0895d095860ceaee00ea6394500b59fc1c927f55d104e69ddbeb46c47f0ab0ff7074ef50e939a245ab2653082dbb882a115a8344787c634804c29c409608fd9897084f98b336d9c6430026027b7ed2d4858a05947ea46473fe9d01daa74c453bcc4ab44f8302e06973b61426dd7688ac08580d603e63124c1bcf013908c07cd62498369e03b23b80f99c49306df49baa03309f3709a68de780ec0a60be60124c1bcf01990f60be68124c1b37019e0b60be64124c1bcf01d905c07cd92498369e03723080f98a49306ddc53ec1000f355b3173dd87800c578d0777f8d126f5b89d7dd9ead52f4e25dd915947b8a919da8cd805dbe4e3df2cfb377315b23c6f7ab9dd7f9f04795f03ad95b2c58e4c2fd77a4677b9059e37f01d43732bdb17f98613afb4692ca41467f3353ab49668811f8e58111fa89ce67d522449b57936c016cf52d4aa09b242c396be8d0b5a2429705d0bddd988bc4ecdfbca52740f94e2656ca0f671bd34af93d01be77cd3849c69dedac1216ebce63925a26d911e68f830ae73d93b65127eda19359ea1480f37d9370165889b30ce0fcc0249c8556e23c06e0fcd0249ca4c7f292e1bc05e0fc8812675f16bff47b125bcbb8fb581d53cb1b8a9dcfcb18ef52ce1660ddf3b92a33d3806f4705b907a8fb3f366959ce682bb75edd02d8ec2726e11c6525ce9600e7a726e11c6125ce3b4166ffcc249cc3adc4791ec0f9b94938475a89f35b80f30b9370165989f31980f34b9370927a2791e12c0138bf320967a19538f70338bf36096781953897019cdf646a62a344f479ea1cc9e3183faf789e5c14ae4e97b37962633900faad398b0e6c74f8da0634e2ff93094f10b58fadbb4dc1223110a25eb27dfbcb55c02ebfcbc436058d70ca2119bc1d00bcef4d5da3415a01d19d2e0732f90fa6a2256d7992a1bd0358ed8fe678d21559b9fc2517d8e94f26c1b471f9cb4000f3679360dab8fc654b00f3179360dab8fc650080f9ab49306d5cfed207c0fccd249836f686fa0298bf9b04d3c6e52f5d00cc3f4c8269e3f297ae00e69f26c1b471f9cb1000f3bf26c1b471f9cb5600e65f9918f41899f9410fb2eee373cc83b7a131473233b67bd8d154284f0776f87726ec70f44634f8f605b0c37fe84bc4659ab33b4a1c268bd962a9d012b1572d77e0b26f7aa23580f9afb96b84089b4164e5e54290c95913630eefb1b1e35800ac34468932f585057344f9b952647f2e6e052d5ab21d976f03569a4589b63b83a71bae725e2d95a5e644562e842e96a5abedcb60b201d2269448c3afd5206cb493e1dc0de06c6a12ce022b711e0970669b84b3d04a9cd7029ccd28717649823358cbdb38d8712c80d9dc2498360e761c0760b63009a68dd3bdfb03982d4d8269e374ef4100662b9360da38dd5b0360b63609a68dd3bd7500661b9360dad86bdf1bc06c6b124c1ba77bab01cc4d4c8269e374ef0a0073539360da38ddbb12c0dccca40e25a9972659877206c0d9ce249ca4cd23329c5500677b9370922eb722c3791ac0d9c1249ca42b7fc9703e0c7076a4c4d95ee21ce1fcbf42065e2a36a9b07d21cb6dcc43d88912a1dadd23f9dcd00416dc746a9c23b45a6c714abafdd4cf3122c8f7003bed4c09b9a37333d791a596fe8d130bb02a5865fd022cef4422fba684bb015bed4289b197b4d54ae7256ea7e572179a62a6f69ef197a65e5448ed936cf799a3807d76a5049b13005b29bc436a8518cf3f245123dfc6fed26a80b75b63ba3264ec383e32d7affe0065774a947d04ca69ac466c33c57d952a844b0dffdcb3d6056cb900cef7e35eecfcdbfd7db2732d77c4126e254dd6a46a09cad81e99b0d5d4faf63666fbe1c0567b52d7fa8950aa98923a829552359e1e02187b65a2728af7b14b75d37dc2317bb26dcef7037837cf8473587a2b8609a790c9daabdf80b2b477260a00acdef70a00c27294ac0018042c348712233f1662961c1851fda569c23279b6b7af2edf0cd85f9f4cd85f7ebd0d96897ebdbb63a7ed0e892f018c5b504f7770601345c0e5ccdd3885bfba8fe8cfbb38678b5fb9cf3c611fbe840ae6360066dfc66c5f66ecbc77b2bed06c502ef6cb04cafc043d76bb47413f0156d99f126527e7663a53eedbf3987b848e9bb12788bf97880fb955129ea6413692d40980dc321323f2c337ba11f95a80704026463979b69e24da8d754209cf3ee38f79b2792fb9f1006cae392b8a6c7441dc1ea01c488952adc01c1ea8cb6d6e4f1e00e00dcac42470ea7bbd133683c8f6dcdc1c3483069b84739495389b029c434cc239c24a9c3783ccbe954938490f2321c3792ac039d4249c23adc4f919c09967124ed2ad7bc8703e0e70e69b8493f49831329cd300ce6126e1243d178b0c670dc05960124e52c76d329ce5006721254e75da6521db984ebb9c05f00d37c9157618658f9c0ce71cd06c1f61124ed2359664380f03388b4cc2596825cecb00ce9126e11c6e25cea700ce5194385b0801e5c267987fc625db3729d10c5435a329710d60f103bf7e2717d7b77d85f8371f73af13223da7ec39825a06bcde76a4823d12c01e938966d130d186ccf0e030993bd6ef00dfd6999840e3b33f53189fd1e1f33e4bc5145ab5d5f33ce70284db98e3c26ae38e32d34145b32d254acec23ddd3738e308778ae3cfb96a653eef4bfb32f92fc042c752bb1bcc12554b1953beeb985f918dee062d00c8ed4c755e251dde20735efd03a0ddde54b4a4e39a6468af0668c7513b14a6ee885068e5d652f70298e34d8269a35fc77a00738249306ddc5aea3a0073a249306ddc5aea7a00739249306ddc5aea1a0073b249306ddc5aea5a00738a49306d5c3379318039d52498366e2d75098039cd2498360e85dc0760ee60124c1b37d7bd1fc0dc9112660e8bbaa697b04f4436be740018b69b4e3dbe946804d455bd48b86f135647d954201f03206764621024de4e531906b1f138e57301da999468fb68d0ba531b1cde4ab6839884ab4ae8a14468bb64fe494d40195b6cce72171b7bf24500e52c933ce74651d6fe6496d91d64fd9d4cc239c24a9c0f03eb9c6d12cee156e2bc0ae02c3109e7482b716e0038e7988493f40c56329cef029c734dc249ba450f19ce0500e73c937092f6ebc9701e0370ee6c124ed23388c870ee0d70ee428993dfa89d8feceb4a6e0a30ed6a92d58da69c1d22b3badea079be9b4938475989b319c039df249c23acc4792bc8ecbb9b8473b895384f0338f73009e7482b717e0e70ee6912ce222b713e09702e3009e7302b71ce0038179a8493d48d860ce71a80b3d4249ca407de91e15c02702ea25e6c004f21e01cea189f060e9e3d105c2e48380f44b61c661c687f2ea6c4ba6500eb22163f5399fa9c26216ab28ee80300755926166f8d621bdbee87af8142a03c1333eeca5a6b84fdf12260b28457ae7566b0f794974381752e31675d9c8ddec8db03944b4d5d1c437a54385919da11a05d662ada6156a27d1094ad159468d5ae9dc302c540062a2632783b02787b99edb248e8454fe6b2b80e64fbe58d5939f9f78527f45622db17fe7280b23213dd52b82fbcaeb4b4bb45fa29c8f82bccf50125ccf46465eaa9c0525752a2edc782e70ec2ad2ef4c7904e911f67ecd0bc3c2acc7b01ccabccf104b571e1c21c501854656215486a7d28d2e39bc960de09ec726f9360dab8a6f32600b3da249836aee9bc15c0ac3109a68d6b3aaf02306b4d8269e39aceab01ccba4c7443559389b737cb029b096d7c9325c300ded599e83b61b61abf2b2d61a54486732ac0b9c6249ca433a464382b00ceb526e1249dbf27c37932c0b9ce249ca42d50329c77009cfb98e40e318a722f263277884e00e7be26e11c6125ce079887733f9370926e414d86f30a80737f93708eb412e74f00e70126e12cb212e7eb00e78126e1243d5c820ce76e00e74126e124dd65910ce76100e7c126e1243dab830c6725c07908254e6fc7f946706c206bb6ff06f01d9a09af101ef01261894af64af98a7dc3713100ef304a78a9edb4a42a19fb9c137705bd9dc34d0169a3976721007984292009e780c8401e0e401e690a48c27121329007029047990292d0eb980ce4cd00e4d1a68024743c2003791600798c2920099bde6420ef03208f350524a16b3619c8f500e471a6802474d02203f91c0079bc292009f73b2603f90c00798239ab856c74cdda1aa03c31130e30a9f95f8eb0f2bc973600e64926c1b4f1bc974d00cc934d8269a33b6b1300f3149360dab8c2b2398079aa49306dac806200e66926c1b4d137380bc03cdd249836fa06ffcc3c98679804d346dfe07f01cc334d8269e3792fed40363fcb2498362e9b6a0f609e4d3dc7e89da63e4d02ad703ee607ddf2cfc8e091ad92dc0464eb7328e1f1c5dd0a1977445dec3c9cc0f881f555ce27fccaf749e05ba4d837cbdd01403cb7318733fccb49091b4064ebcbcf0799f93c4a94bd5870870efd4a5d78443817b68276eaf6742ab0fb001b3d9f126c5f165c0eed2edef7763e2a1145407592cac8c616e75a60bd1750420eee32e702e56bce79c534513b5c6cef4959f702ac1766a27c4dadb96463337e2828062ea244a9db7022f51296102d59097b25b0d28b3399f92b1c25e6393f563a4482fbca656c8309b216c12300eb259970211c9179ff4bb2ecfe08c8ee9766a2a399da44db302b7bed4b81255e66124c1b7bedcb00cccb4d8269e3bce52200f30a9360da386fb918c0bcd2249836ce5bee01605e65124c1be72df70430af3609a68df3963b0398d79804d3c679cb5d00cc6b4d8269e328520980799d49306d1cf0980b605e4f0933fca63b845510d954c72c80f3069370165889b316e0bcd1249c8556e23c0fe0bcc9249cc3adc4f928c07933254eb5f899fbb3af06239919d9dc990cdf4ce6e1bb85125f47c64f582d95e70c71517c7e7d19ab16d318156c1fe1a05021eeecc3980d30de4a89b137f3b61c77a7d21638ead638ea2c163cb8e7c738c67728e4d317a58e009ec1cb985a775e6b21dc8500ee6d99980f4aefb0111b37206f054acfdb4d454bdadd24437b0bb0da3ba84bd644f5bc8a29e9d45a698c08e383c042efa4c498a3c118eed811c2b14fb26347f60578ef32b50028a09c8a232b00fa01b4779b8a967496930ced57a06cbd87126d1f8176aac8fab359b9f008ad90c7e47151ca456cb948005e442c76feed8a9fec5ccb1db1367a8bb60280efa5043c94c51f4cb258f4ae60093bd3f99b23e7e74fac722254e5fcbb5404b9f1edc07d062836d667a2dd8039924d108505f151a44ba8da0d4301c6fb2831b665deae5eb5a2545d093c9decf365fa1b64fdfb3331b20fbbb26a5cc01b29b0bbebba3980f940265cc521cce4d596bd607702601fa404ab4e1a2e641bdb49c33701840f99e3b16ca36fd37600e5c39428bb4901eedaa4b28d76b5521700f4114aa03d024079fbb256d4def344cbb3460e494f107f2f1142f8486b0d1d54b21d6d3a03a88f5242dd2244862f71c2e4426a59b1f32f35035043dbea5c46d5eacc03adcec7a80b02d86faa12fda165094b561bfd4cae03401fcfc46c69aa5b458fa6c449b655742f80f30993708eb212e73fa0447dd2249ca49b6190e1bc01e07cca249ca4e70e92e13c16e07cda249c23adc4f911c0f98c49388bacc4f928c0f9ac4938491d72c9704e06389f330967a19538ab01cee74dc2596025ce3280f3854c0cd7e58bbfdd2bf78f2a61ee98a8bd239e2b00c21733315c87d963c6ca4ab28190e7412fe8a5c644e9ef9fdbb810714780f2e54c656c775c890b5a2b337506c6e1ffa142f80ac8d8af6462c297232cafdf234cfd6cfb74c65b00e3ab9975b7d1ef1932457e90b1ed2df2a8d0e600b4af99eac944da3022f364fa11a07ddd54b4a4b53c19dacb00da37325135156c7453c45b01846f6662710d3f5730e38b6bc89c6b07007c6f6506dff0407bd366ebeb09da966f67c21329350785022b5d144e02b6f88e49306decf59c0260be6b124c1bb75f391ac07ccf2498366ebf723c80f9be49306ddc7ee50800f3039360dab8fdca5100e68726c1b4d12de65000f3239360dab8fdcae100e6c726c1b47103ca0b01cc4f4c8269e306941701989f52c2e42c123bbc163b7f2f16e3415cb93270c8847d2343dd01d6cf28b1e6b0a86b8a09cb53b2618f69a0dffe7926c634e3f1a632aa49d8bc27b3dc4b01da2f32315734acbe842d13531c6ee160fbae37af8202e04b93bc3b4651d6f964de1ddd80557e65124ed293b7c8703e04acf36b93700eb712e79500e73726e11c6925ce5f01ce6f4dc2596425ceb701ceff988493746710329c7b009cdf9984b3d04a9c47029cdf9b84937470840c6715c0f903254e754e4cc146341dbc16c0fb91129e5abecafde42632be94bacae99b97cb3e90bb68b55c082c1502e0d69535cc661fe34100f14f99c8ee58668fdf88dac6ad7c26837ed1cf26e1249df420c3b900e0fcc5249ca44b5cc8701e0d70fe6a124ed2d59664386f04387f33a9a9348a72a493aca9b429c0f9bb4938475889f32e50b3ff61124ed25de7c9709e0f70fe6912ce9156e2fc0fc0f95f9370165989f35980f32f9370929e274386731ec0b9c1249ca407a090e1dc1fe0fcdb249ca41e9f64382b00ce7f28710e64c12da7f8d04899c383fb87a8787acb0931679c71ac5a8c41ad63b427bd6711017f1ab44cffa504de8925f670f297ac6420c996610f0496cb9a1a02d2c6f5ecbd00c8982920097d94c9409e0d4066990292d0739e0ce47000b28929200917c79081bc1c806c4a09b2a5888d1b6f2e843fae22ac9da980b503c0b22981e5079a4375a8ab21be450077b2e59857893b1ed50c358e7e8e11e1bf1b348e9a51e257eedfa90e2a134e17930d294f00309b9b0493d0979e0ce62400b38549306d9cecc807305b9a0493b01f4406b300c06c65124cc2962719cc1100666b936012f687c8601601986d4c8249d89427833912c06c6b124c1b8f7d1e05606e62124cc2bd41c8608e053037350926e1de206430b7033037a384891ff934d9f9bb82b9073ff3034db860fb8f7c5acc3cb0ed28c1f61460a733dd49848d76d423d96acde6006b7b4aace13643b571279b6d41d6ef408932da3e89362e7ced00d07634152da97b0319da7b4001d089122d1ff31defc4be82b6a4241b8b6f0f4075a60495a32929c36d1b40d87327ab88d6802cde85126f07d0705a2d1a467c25c722d160cad0ca76b2d35b57021bedda98b5b97fd763c272910ce513c01ebb51a2547e4ab0218fb53ec99bef64d97b4b6099dd335183c7979ea9d4e136ee743c1f586a8f4c647a6cb6dddf84b77197ba4260a53d33d17b4fa79d4938fd4666a31700b0bd4c054b38494c06f67400767353c11216056460a703b0bd4d054bd8d027033b1a80cd31152ce1443219d811006c1f53c1dad8c0ea0bc06e612a58c2c91232b02702b07d4d054b38a54706f60400b69fa9606d1c2d5d04c0f637152ce1e40919d85200764b4ab03c061c5c315bc3b8db2d77d0e588ab1c26e56c6f71f20c173ed3b9ae016fd937e4f217403a8012a93a7f66046b84e37bc82cf20c802f97125f4f060f2d4dc5366d9ec7ff13601d68ce68958d9bad4f0528076562883a75375c1bfdede78171d4c126e124dded8e0ce71100e710937092eec54886f30a80732b9370926e0b4c86f35980732825ce644e8fc149131b2ba28b01cc3c9360da78eac7250066be49306d3cf7f04200739849306d3cf7f02200b3c02498367a8b9e0d60169a04d3c6730fcf0130879b04d3c6730f4f0430479804d3468f929300cc229360da78eee1f100e6489360da78eee10900e6284a9805ccbf55063f390e3f69aec651b3522859ea28bb8eede8fcba4a8c876e7cebe8478b24689e1d103e394ef80411551ed9c5ccdb6b7e289bc2cae540318737944d6715e2ab858e45ce77fe0b976e7b38ffe99ec7c4810293d85a56259e72796542f60ae757ae590dcbefe7bc329a9b515b6946b96204769cc3bcd679870f60f3d0d7b112e6eea55fecfcad96aad50924b9e2dcb159ceb33ac61ddc79082b1d4d96b16a1163ff5efbb9b1168253b93428777f955ca9ab3a9e709a1cfbad70e25c2a34a976de692ac2710d2837d616dc294ff069628ead4668a5df1c2737b0a22137d643a61bd7592dbeab15f321890f57ac71beed16f856e95d2a9ff06f78a8d5e25a2134e361b60e7c07f5e134e73adf948998973b69b15af256b1f438e5463a04921b712cd60ee83243a477a90cbbd461a1c2ccebefbc162b12a1f119cda1f5739943652c57c83bf53cb94c6eb589a58de1a619d39770950d96df92c5c82d22f8f74bc40ac27221755ad298268f1f9e77db2448953cee96bd51c77f6b58b365e50de0f11dd600b6975ca36d78c85944756afa458df1b63f8bb967ae948b9a665d24db6f254a7628af42849b976ba6dd375cdcb785e55d56dec074ed3ebc466329edde95e6bac404644f492176fa7408c6d97bab4ab609942db8a5c032c637be4d4ea2976801e1d2784377a9886b8590ba82a93fbc3ee56d735e5c6d47c933bd66c7ffca10dee2e565c8f6be6c96cfb3d9b8ffd97f83daff784a9e78f3f97f36ae6c7c42bc8d4ffc9f8d37908df3ffba0833843db562e7fd32216ff4d82c96fd7f1319692692e60300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/97f99290ac8be0c449fc8dbdf1549567.asset.meta b/Assets/SerializedUdonPrograms/97f99290ac8be0c449fc8dbdf1549567.asset.meta new file mode 100644 index 0000000..21ffd69 --- /dev/null +++ b/Assets/SerializedUdonPrograms/97f99290ac8be0c449fc8dbdf1549567.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b697286c670766e489dc233218d16855 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/980a7697571ae1540827c8b930f79790.asset b/Assets/SerializedUdonPrograms/980a7697571ae1540827c8b930f79790.asset index f7820d9..208e348 100644 --- a/Assets/SerializedUdonPrograms/980a7697571ae1540827c8b930f79790.asset +++ b/Assets/SerializedUdonPrograms/980a7697571ae1540827c8b930f79790.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5a5b53db46143e32c87708699b92f4169ab4c529010998e96ba7104a9949930cb679c9741c8345e2d606c6364cfad6bef617b56ffd619da1e71cadecb5b4922ce275631a7b2c597b3997ef5cf6ecda290bf0653cc4cb01ecc336ac41151a700a27f86d1bef6d7cbb4f5efb33e8e0fd255eebd8f710966266d26bd9b88dd73d7cea420f679ec311de9bdc5f0607bfefe15c079fa8f5183f0e8e32667152151ec15378028bc6ad1812073ca92bda0cd2cbc8e2750b7ec55e8785222616772de2a58c3d5dee6ba3d0deb8e7f013abd5c6be239cd38116d23c648ad9bf692eebc4b719fca4f153909ee99e177743f417a567fae40664b87f4e7a26adff14cf197137a53959896e4eeaf7dae8332fc9e1c9670abae6e5e5e53fa6c1e8fe80fad6e10cac144d7890c00dbc99f10e40a4d329a1dc32b3ed21d467484061852adbb8079bb0a1b4c21da328c9bdcdd73a8e68325162e663f157800509d7c2b723b95017db77d903c9899ad8b3068ff14eb35ec03a3ac5731f950364db423774a082d733a6f702c50e8e8c5389dccd3f671f69bad1d0c6160fd0337c6eb18465be5eb0a40e4bbf876d3d8ecd138cce2dbcbf666e41dd3bf85dc5b3222053cba80e8ab07637f43c333d426d487a8be3e39d45fe0b8b70aabae1e5188b62c4f82360897718ba49c6e4c5c6a5b1eea6fba1b60db038e756020826d731a8a1dabfa9ef94a9d4716c943e6a74c8e42bacc5c0ca600eebb50916ad17c627317a45a14af44abce22795df34676d92d28fbfa1c29fd7c6f204f12fe31c1ad38af12635fa04eb5d3ffaa030809d160b7f49b13cc6c91086604a81a09d11d58452ac9c4f2c1a1c427c268c786e0cc467c388e7c740dc5439161758bf6b75ac51abac5d2eb21dac800fe167b13c7a7c4f79692489bc65761fefc72c05b51f091789e615edb4853e3e038c2d2e3a7712d48afab5a09a30657b9574c958524ae77ddb429aaf90d705971ae7c849c5c134d5a139cf1cde2efdc3c23eadf2effce413678f4b381a973c7152cdb2eaf341b5651642936634ff30f432aad443d9e1a6222c6c0a8bf7282f910b9a812c341f9e85b22a3e64a5f781b633c37c0ce2e3a01d5caf79227c2bc06f219c5f2e2ca57ea04ca9bf7d9b24a5e6c388df1a43be2e8421f5a10aa912d0f9c189d81beeb0fd9b1c6f95be97d7f0fd12e8fca0d6f77d6a933d485e7493e05c0c93765125edf73ebf95b9ba729e62349264e7e8b33d3e80196c97a2648eea198fa673619ade5669ba3ba2a6bb1cff751ed5419bbde2c2713c9a0e17a349749d0fd3f58e4ad76a7f9df032b79cb7dd2d146977ccd6a4bcbad71fb9d38ff27d5e351cd4e78247af097da8b78114cf592fa23b9813c4699005fd7d0738b78994d43864f06d18147b3b4cb983339ff10c7aea82c5616927581189771bbd982c5041cd0ffb056d34858f20fc2ce93890f7af7aac10a785ca6a6b92dd64ed46afc082472819a191470b91e69472dd34fd98acea1d7fa62c4e262b57f4a67829686b9b9e51fb50f2dac125e0adc26cb21a9f9c3444e28ae52057852a0eab4cc0db708fe1009564fc0ee56b707aede29b5e14e43ee2fe15695c0775a3d683c188b8c139e835d7cd1da6d7f04708a7e7b74df24f650f2f29bc649062d5a9d1a6aecffee7d9cfa6ec7797402878c9c2a664b1a433a2f36cab9aaf98d8f4f3799303b3dc5084674651e22a513ecb51ee42f6b94ec8d43b146d802de8022c2b01764f276005e163c345690d6c7da099ba400309b4fb930fccf5290ccc9404d91793876c630a219b9120fb5227647302b2603ed31a9eda725a5a02ee2bddc0b5f0810878c72d1dfe7604bf4ca1c7e525e096750257141ed704f7bf2e75710aacd5dfe674c1664ab09574c296666a75ec768ff3a60faa8c04d5039d50515dd3e0df3deafd9dc1f405644e82ebebc9af9a1a83511b64fc97b2ebb1cfb7699fbf229bbd144801a5909d48491901ee16fca6c08272ee8f4ca52e36e975693b6e9180c63790ec8c2a9a66fc5e99fea6d93f45f0d9b035361b8e63ffafd2f44dce028a1156b1a856bad6faaf82fb2f4e7e919b2ef28eb12a9d1f3dc5c10d168a5ee6bf3fca3989d82b0000 serializedProgramBytesString: - serializedSignature: 0735ffbb34046cccabbb74f31e837de64b9285f4f01bc566a93e14cf59a0b3ff5fe622b3393dbbe303da8a3ce37621538bce616a94799659b189f31c83b91a09 + serializedSignature: a636370c4db371aeab71e3259dae1b12f045d3eff66cb0db5017284e66289808ca045a7597dbb2356eee90e94d542d2511f11b154367174edafe767e811cdd0e programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/98577a9c69af70241a7f6cc9880d42a6.asset b/Assets/SerializedUdonPrograms/98577a9c69af70241a7f6cc9880d42a6.asset new file mode 100644 index 0000000..991c68a --- /dev/null +++ b/Assets/SerializedUdonPrograms/98577a9c69af70241a7f6cc9880d42a6.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 98577a9c69af70241a7f6cc9880d42a6 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cc5f5f8e7e4de7bb7b1dccf55b22dcb36d5b65c7113926c8a31b6ac620b4b96ac626cd34cefbd77d33b98000904d249421208248184242481040821249084242421e1bf333ba37db737efeef6566f35e3ff4ffe58ab6d6fde7ce74d7f339b93c79c9fd834e7d77a56c28ad80cb68e55b27ab6c3f9abc839d639ffdc3375bd98353ac7adceef72e7de34969be64dfe332936d4f9bdc2396b62cdce9b2dacc239d688fba5accaf97b85f36e9573c6af563bffab9ca7621d9d97d6b1c56c2d5bc386c406a511b15ebcd424afc578bc625d9ddf8bd81ee76e95508a0792276e0d717e953a779ac4bd3a4769f5dc06b65144abceb957e1bcd3c86a1d995b84c4ae2f4e67e20fe61e06c9e360791ce8fcef26ffee20ffee2aff86cf7792c721193e3f14bcd70dfccd09ed4ff1fe3079fcb7f3bfb3f3e729e09cbffba13c1feecacbd99642d648791c258f874899bb33d0bf8b3c8e4e13df54327281ac4c987595c7b1f23846eabb27cbf0c7bb8c62b70279fcf81fa0cf58107637709f1fc78588bb4ac7cf7ce9f8999b8e3937caf47b475e9f208f93e471a294ed3c337081bc1697c71169f49aecbec7e631cf669d303b34c8f329f238551ea7c9e3ffa4ae7bc179585d549a4e97c7ffca304ed55c57cff3fba7c9f319f298e74baf7cf9dce9f27c6686fa64627f4aa7cf65186780738763c7cd2964c97417250e487771cedfbdd2e5d8f1195f7ca0fde9e4ce92f2cecc201eb3dd30c6d5caf37e89c7580c845520e5eef33d3b473edb41de3f0b9cf3638ebc7e3638e7eff54f130fa563a17cafa394730e3877fe777a23201ff5dea7f27c2e4b5f3e2a5de6cba3ca2f87b2567b1ff792bc36401e0f97c7c3a4dee7faee1fe1e3992adca3dc30ba1d27cf17b871e8fc947bbdf39b2c31af1d998681b2bd4e2cd1f664bdd3a5a72bb74b817c7ea17b1e53f2470339fcfdf37c723bfbe476967215839919eab9481e97c8e372795c06b8bf25af2d96c7a532cc2e2ca18c8aa97aaac87b77882acf32e5962a8d56f8ec68840c379d3daaf78f96c76e193eaf9e591942e755f2d83dc330bbcbe3ea1061f6706da1db953e5b589046e61a976fb7814007474e77d576592b8fc5f2788ce4dfc367073d32b08374ba94b8ef75dd0fd280eb72409e97ca6359a22e4e8b3751a7f3db4ea7583729f30270ce8fdde5f50bc139d7f563379c1e9552e67a793cd6a7f371743ab3e3ddf77a3d026c2393f752d9d7096efc7abc2ae3f789bcbec1a7db2a4fefaeef8077951e99e4878d92452f1fe35eae0e3d15db937ccf5d04cef9b1a7179ef89bbfab6c6b18b8cedfbd189cf3fb2766a8eb66966cb35c4e1f10761f37ec5eb2fcef952f9f2d67c9794ff72e3ff606d77a4b79aa8db68525d763ea391eb74bc039bfbf29c3b85568f4e3e1be95e25d9536aafc391ad8836aff56497dfab2c4bcd557decff5de89a93654b57bde57e9b255bed30f70e9e7ead7fb45f98caa336a99be9e3d197050ecb67b618f6a96d76af0b0fa7494cfd4f9e27d8227a7c733eeb18f2ac776b0c43ce37f965fab97c72679dc258f2ddeb31355fc1ae551ea1bebcf12fb113bc1757e1c20ef5f0acef9730d9eecc12a1d55bf49e9aa4b4fd59f5571d79501a9ec6c8ffbec0415c65e976ddfc3659a57fa74d8ca52dbaf6a670f6489e5c74029f75a572e7f4c3caffa422a3fc93e8d183f81759cd23755d99c4e37f55c47f0dccc0cdf4dc5709fab4f6b1fea2c7994fd83d6b61dff5be6a1d8602f1eadedbd33c13d7e2edb7dec0c96504fa5d445f62558af34f119049ee3c77343c43fd5bdcef2a8ca99212ca15f1993fdf3fecfa49075a1cb69a8eadf5ce4be3340953517bbf7fbabf2e91210271ec6508f753f55d6a8fc370cc45be9341c5c536d03d0b78ea9f1adcb7ce973aeeffee54086eefe154007ddfd2b99d79fe2e30fe3e5f5ab7c7139c3a7eb709650c6b0ab93e32a9e8161abb8649296d7c87747fad272a49b2e03cf4d21eb5a7d5a0eba569e5fe74bcbeb7d69394a939637c87b8780749b28afc1313ca5672ee0a0c6076f44d252ddbf09c8d5ddbf19e8a0bb7f4b625a0efa585ebf15494ba83f4ccbdb92e31a1bed0b5bd95daab4bc431e6f97475db9ba5f1ee352ee1519c8bd531e1b52c81de6937b650672ef96c7bb52c8bd07d1379bf094adcbf1b0d8189668ebfcdcb1db210d2964ddcbb4b63e749f3cbf8f25dafafd2cd1d6c7b2645b7f40de83e3b345f2da78966ceb13809da8f1a407c133d056d5fd87805cddfd87810ebafb8fb0045b1faac6721e657a5b87fa435b7f2c39aeb1f1beb0afca202d1ff77156faaabc7c213877d26798d24fb50d2e62a9ebc603aefcb87aef09296f92947f3538e7c7b82fdcb80c57ca19aedaaab2df34ec45795d3ecfbe20c35365e693f2b98f7dcfc9b1b4c9aa0df7451fff2ff96c658a676fad71791adc83719bca12db24b2fe169373ddc033ea1a4c2bd50e4bc7f55979fcb28fdf6429ef1a70ce9f7bded37fb2cc27ec39793cc7bbd74fb58b55fa82be2afb8ade5684ae20cd02b791549cbf9a26ce41caa4e92cb14c9aeedac1c88e29647d533e134ff1cc0bf2f86d79fc96943f8325f65dd4fcc477e4799eefbe9ab7b8cb633ff879a08792cddfb936853e2afeaabdf73d79fcae0c47cd87ec05e7581d916d3b36db7b274b9d6626da8f3877d2619462ad6cb1268d7d7c5f1e557f69bb94a7e648f682738c413cc3b052c42ba6e64e2e00e7fcfe0fe4f96c79ff3a795ee87b5ece813039c7109be37b7e9eef79353ff1b23c9f9bf83cfb2190c3cf5ff1e22674e1d75e05d7e6ca6b3ff2f8e4cab1f8d8fcc4b0d98f5962ff4ef5e10e95cf5d0fde830cd47dd53e3d2c516eec70797e2338e7c7237c720ff3b13ac227f7489fbe3f91c79fcae3eb5e1ca7f505ef009eecb54499296dfa1529e328f9ce4de0dcb1e9dc54ed7ff5ee02795c2865dc0cceb98ce7659abc8acb8a2df2f15b00aef3a36abfdc02ce1dd963c6a7d04f86175bec8bdb62f9eee60cde95733bb1a5beb82d9532e4fcf7984752c8fa993caab9409586ca66b9bce59a7455f349afc9f36552875bc1b9a3c35835b7f473a6b7ed25bef76f4b7c7f9c9a93f8853cfed2a7db0a96380ef62b79fc356e93ec373eddc17857ab7e6ffaf453734c4aef9532dcdb811eea3a3fae628975949a2f7a4b9eaff6dd97e3c25a3f805479c4379f1e5bc312ebea3592e381c4e7d2cef5a6aa739649d96b59625db3d60d6b7c5f57fff1aa2c7d5b1e97a609f3773ef9c552fe1de09cdfd78d8faab6d6ef136524d8b31a3b3d466313d216d87be09e1a97fe2d788f9fbf0be2936ebc2c15dbf799b6df3641f5f5545dbd370db73f306d3b7dc23301e57cc012dbf11fb2c476fc1fe551f5a7fe24b994f838fc595e2ff5c213cfa86bba367a3add74d75aa4cc32966887656efc27caf26fe2d759a21d36a7094b3e175b079e5361ad07d73e92d78e05f15c0faef1e37152b7fde0dcd12d3ed227f778f9dc9d206c7e3c415ebf0b9cf3f7641f38b68125fa6f29791b814e1bdc3027a976edc7be304e645e59e4f09aa4fad16f83fbdd809eea9a9201fbd22de0c8afdf2dd3e0b5c430d3a681eeda5fe4f189e0efc64e62896d2235afb8c9673b9b64fabce6ea1dffcc67a74fa60e5bc9657f95e79b59627b73b3bcff37208fdfbf0797a90da7dc179ff2c47085fc74ed2cd54792f3bcb10af9cebde09c1fb78038ff5d5eab0436b1451eabe4fbf7b1441bad06cf568367f9712b4bacafb6bafca7bee693addedb269fbf1f9cf3b0fe21cf6be47dd52f577914cc038a67d4357edc2edf79109c3b3a4c79c3b581a98f2061d5b244bfad5a5f9875f2fe43e09cc76d73e2f3b11df2b987c1b9620ce53ce293e3d32b560fe2a8e6169f4b63af926b6bfba15a8675aa1bf729aa9cfa283379da6bafcbe33f65180d3e6eaabe7b2d0bd9ef49193b59623b7aa7cb689ab271599689ba3b5518521e5375f2bfa4bc4629ff5170ce8f4d2cc1e6636a2e57d97e334b289fc5b9a3d7f44b7d725a7c725439aad26597bcff98ef3d3567fcaebc2fc720a7eff7c5275dbc13ae758a091fc1e5ac8a95b30696271c0ff9e857a6eef0eacdf48ef0c2c791ffe23f9344b0cd6c8ff36a95ce1b7d9df0756f66b3d92cad37fa30e1dba1422f12bfcb9d276a84d003b1a4209e4d0a822b57ebfcab02aef44dcef565c2139f3bd3d7387766b055ce91bfb5d9695e6d70fe254a59ef045beb548255acccf9dd20e46d76d44e7e325d94b8dbbdff9d1247a6bb2aa0ceb9a2803638e7b542c352f17b97d0b44a68bfc2b9d62cd628ec605bd922e7b85b84961cf746e76f5d986512995e47fde200ecbabb044125d36227365cfb3c618bff9722ed91221c7d679e3ff84fc73c31b27b71524afc1f43b790e103052ba48c9902592ce1da2c96c74f45a7276c1c9363a8b76f9777212b4819173d199edc23440cbc14be79d4819c5d2f6d38ad5362d466b33c313d30324dd45281e5f2e2c2fb2448143a75ea98cf15f5e38fe9f00b97e5d208f1bbcfd588e78227406751f9252680184e2e734ab5625079ae13cad70ad5fc9129132a374b25bcf3d58ec8dd226a3b1c2925ce190f5e9df30827a5713e57a88b48a6e44a385d54b184cad1259418bf2a6b977c822d694b9d545d5b63e125559e68590d4d61d05858a2c99523db5d2acb3dfff4da1d65577df04e277dba7417e9924d6858ca74d0a54cf7a8b350fa3a2355baf4688d97972efc47cfb02762dbe974c00876d411ec11b56df37bf5424ab9f36c7086dc496faabf18d203ec8d18617a1530849d3408f339c23e1aad58a76e3eadb84288e4cebac4e9d93e157476c6cd47a987f81074428dbb5fcafa35a86977d1d113ee9c9b49e9a97e63a9d34158e9dc2b779eaf128d507ebdd89158ee84cde52d1421787dcdc4375293e5fed2d3fd64b5540708aae3412f38ac6618f1ae1ae2f9dc5e076acc409471feccd00fcf0cddb06c36286c36eb8e491e1c56720f4cf290b0927b6292878695dc4b976dc4ea8c1323c936de708bfa6b91f3ee362732bb441fbac5795f373c933abb0ccb38bb0c17d92597e9068d8269846593debab4e31747e894f427dd703ce9fa6082478614dc17b3b65161adad1fa6f2212155eeaf33630128caa6e162611e5b849ce0b527f75b1ea3293645d1a935de5ca66f1ea6d30333d50158f28c09993c03b1aa626c1b54158374c279293f8e25b7b53f777e9284f7c4850fc6341fafd17c6c5d4e20cd8760196d42d88c3614933c31ace461ba9c264a8cb322ae30f463facbc4d636556cad63e72733773056855b2f0662b9466a50b7c439560b2df8f50a995f5287953a174f629a8eb728f796682b99f68a059f29ce11a5c864518a70efd575ce75770e628948811a11d20cad363c04ec79c56235e3bbf6b488d4ee840c134c11a19bc5062b1f876325cd544d49f386ae184b51d28cc0b2ecb4b05976a44e32cfb2d335b69acf6d951b4377519e278533050f6794ae681035f3de762d1adc0e2597572da6d95c796b18df78ea1461aadb1d03de250da7cc79a6d109a34a1a7998c280bb7c8ff28f54a4acd2f34576383283ec40192b2c031ca2b324def3e6d30b4923c3bc122a713a9a456c93c8863bc5654ec94ddd1af1680ddb2bc67add19b3247beb82dbdb689d36bc43c3bdbdd3365706e0827331c1b3430a1e83e5f182b0797cac4e322f6db80778d816d6384cedc2b06a8fc74ad4b99a12f5b358b0127502267c9e46f8f339c1844fc4b2c2fc4c6c2485554fc2041faacb633c8e45621033d7f95fefbcc19bfbe522f7e78acad02b0d729dbc5ee3fcc52bec69e0f97ae70977863a889e71cc280e0b6b1493b1743b5c936e9f044cb72998f02334c2977708267c2a967647ead28e179abcdee0cd926db26e4b2c0d7385af40ae700f691183719522e59a44bae6b2539dfae274e7d8ec3c9d2bea815a712f57ecc3d828cada20693a0dd3ff289dfedd81fec540c320214ed785c8092fd0945bb180e5d60c9d70def059c890860f5f2b11bce19387612bd261e3cda4254ef385b75c5bc4f3a5c200aa5adbca956d5441e66bf4ca139dfc1dac3d1b64bcb7c09d699ac4df5e138587ed4dd8866978f1f51cfe8697fad137bc780f242ed68945a13dd6c09a8915aa4b35856a2c48a13a0bcb0bcbb0bcb03cabbc301b2b5f57e80aef8ec1cad7022ca31dadcb685c509934e8854e72c161b120d9680e16ea4a5da87c386a93f32fdff98f85ceef378a323c881e85baec2c86d61ada353be385558990cd0bb5f07d29be34a9837f60458cfd15649069db4ac7a9629bc126b185b14bae89d7537cba6a0bd8abd8852f4a1b7d71b35a1437516a8e153973b10cbb4693613fed142cc3ced399ac18536d6c57935d2c244461b66b75662b067e0b3348fcb6d473b470676d62ae43952a9af8cf68b1d75fa368915439d7799d06ef4f15fbd8f1a6e852c1bb4e90e7f12b17430a9891170b238f3a9e98a1cfc70cfd188da1cfeb1cccd00fd509e7865ea249fffc21023a6172f8352fc6353f0c6b1894620d83b2ac1a068763b5e83a5d2dda0fd4a28a11370f7ead41f46ff9207090daf3082cfcf5baf0fb82f04b1252a2d231566e9ae581423f52173a4fe66359c8def25198591fa731eb5b039af5024cede3c3aabd1053fb048dda23bb04537b11267c8346f8870185176186c43d26c28cfc2cc6046fd459281f3a53fdff0adf08d0165605c6752ac5953dceef5ae75a8510912bfce2950350102d97606c4fd2b03d1090ed520cc1a6906c97e90473f3dc9c89e01453dbcbb1e2b31c2b3eb764557caec0b05768b02fe81a0cfbd15836af0c9bcd576292abc24a5e8549ae0e2b793526796b58c96bb044dca649c4fddd8225e25a4c788d46f8270185176319f3645dd93481f13136af87e40e8b78e395e54e22358b9227d7a953dd065f65c2b8271fcbac91836141f2f931989edb757abacbf0b89b63a9a8d11bc53b950ecaed81422dc1d0d76ad04feb1e0c7d2926bc4e23fcc280c2cb305e3b74bc86a649d74ae11de75d9de95c0dc2711da64dbd4e1b7eeaa55b9070d663481b34480fef110ce9b1582476ea22c1e7c75d7c873ac8d68881fc72b9847097a8c683633c0ed3a051a7012fd956b5360c8ab36c161c8f216dd2206d0e88f404ac446e0e5b226fc0d46ed1159a01d53e11537b5758b537ea24f356c7290c6975f09db183b73a4ec2c2d98385b337ab703661a44e0d4b6a3396c0a76912f8ad9ec112b81c137eba46f8c85ec1846fc1849fa1115e1950780526fc4c8df0e7030aafc484efd308efd83b98f02a4cf8591ae1f3020aafc6849fad11be3ca0f0ad98919f13d6c8b7616a9fab51fba9806ad7606a9f1756ed933592f384eb6a945edb7eafc6605edb7c37a9cc961af03d7074dedae9c2c7c633b7ebd285d7d017ea540a5095d762d67491c69ace0d684d7598f08b35c23f0b287c0726fc128df0789f60c2eb31e1976a841f0828bc014bcccb4226e64e4c30df163da92d384d5867bdc863b962c895af8edf213ff0c97728a9120e29e5c2f6bd0127e590c2b75bc895d6db286dbad6b1f619ced5205a37625a5fa1d39a7b54f01904afddec7625dd6e88ce5f38974d92adee4981f46ac26ce04a8d0d9405b481662cd25785b481165d392b1cf96b48cb59cc3fbc4c0cdff3ed51aa85a5d405f6264f5d265f9d71997c8d2893b913129dae58f9bd4b97dcbc6d7d2d43dad67c77b6ee5ce5406deb5374e1709bbd5e63b3af05b4d9dd98f01b34c23f0d287c0f26fc468d70be9f6710e17b75c279b386efcd15aa59732aa6f6cd1ab5df08a8f6695821718bae64e45aaac119d79530b1c40e528a9c8e857cab2e641e5f356959cadc65931501cbad33b0106f0b59209e8909be1d8bca86568cee70ccc68015da3ecc26eed0d8c4b67ec16ce22c4cf87e8df0fd01859f8d15537762c514df0434f810c039ba70b8fdde9d4962a798a13917137c4f48c1e76156746f48f33c1f137c5f48c117e804f3b4e7fb54fabd6db98020deb6176256f880c60a5fec1fcc0a2fd209e7a535df0d3354697d31a6f6431ab5df0fa8f62598f08735c27b0e0826fc522c673e82e5cc47b3ca999761e6c877794c2a2db94322f79ce0837a7cbe792b2b164d22ee91be3b84ffc6e598168febb418d0aa05f7e0a863ee7c85eb1f93bd0e57603a1cd0e9d05fea30dbf95f211ac8fc9dddceefec35b812d3e0099d065d415af0f562bc091b24b4ab30f3fd82c67cdf0868be5763e6fb2466be4f6565bed76085ded39a42af43c042ef5a8cd0173584ae1d188cd07598f02f69843f1550f8f598f06774691b50f80d58da3e8ba5ed97b34adb1bb1ecf05caaa269561b174d37615a3c9fba689ad98645d3cd980e5f49553415b461d1740ba6c157d3154dc78af082ad6db91533dfaf69ccf79e41c1ccf736cc7cbf8e99ef37b232dfdb3164fc7b50611a7a776074bea5a1c3fd5483d0d98fd17901a3f3edace8dc8945e23b9a485c1830127761e8bf1b12fddd98d62f6ab47e2ba0d6f760e8bf87a1ff7e56e8efc522f1034d24f60d091689fb30e12f6984ef0f28fc7e4cf8cb1ae12f0414fe0086ff8718fe57b2c2ff20669cfc9b4a68b536bb8dabb587302d7ea4d3c2abd666b561b5f630a6c38f753aa86a6d4e1b566b8f601afc44a74137e6556b4bc424487d40479a4731037e4d63c0570e0d66c08f6106fc3a66c03fcdca801fc722f1334d24ba0e0b16890398f03734c2b70514fe0496dcfcd36061ea852f605aff42a3f51b01b57e52279c0f8ff00f91851a1e790a53fb4d8dda7cb42c88da4f63b07fa5cb5b7cf22db5ab5c99f368837066db2aca9d46e149ea2ec7ab149390c5ccddf4d55d255fee5cad14ebe7b78973556e96b32d728a70a69822542becf7c881ec5c3145efeeeb9f2ba6872ae5be0bdbc59526f1541590ac9f84ac9193a970da32a8c7eb17b104fab52681fa064ca02f61c27fa3115e1050f8335861f4165618bd9d5561f42c1689dfea088d0816892f63c27fa711fe494042cfe984f3ccfa4e2685518aa1ebe73582f3c4f656ed33239cbc7f57dbce08bfabe3a59d11e65fa2493d231c5e576c46f82b982dfd5e97db021aea57b12ae2fdb055c4d730c97f082bf9eb58fdf04126f69fa2d0fc86cefec50e6cd5ed62ff6176d64b6df97fccd8f23f14963f2585e587dbff4f9f12dfc48ce74f618de75b98f1fc39a4f1bca013ccb3e9479a6c7ae9c860d9f4db98d6fc7388dacd26168a8e56955804a15b3e932b9a4bb9013d9dbe83e9f1179d1e7c679e60f2bf8bc9ff6bc8d479114b9dbf6952a7e3a860a9f33d4ceb4fb0d4e179649b6c22aaf4a86add35265b3fb4ef6391fcbb26925d0f0916c91f6091fc872e92bccfed7eff25af75cbf8bcd60d8ed63a6629bfde12207a2f611afc53a7c110ad06abc45fcd628dbcdbf6ce6eadd0cb982e9fea741991a12ec97b8a07d1e9873a9d78f2ff4b93fcf1d1c192ff152cc2ff0e99335fc504ff27a4e01f61823f0b29f8c718e7ff6a382f0fc8f92798f0ff6984f7cc0d26fc350cc9e72191bcae13cc6b61be3b5b982ec94f7582ddade891de604e2c9bdee0cf30ec1d62c9d8df19130cfb1b58243a6291e89455247e8e45a2b32612e3c7068bc42f30e15d34c28bc70513fe4bcc30bbc634c5295f4be9df7e231714e47136590ca3ec90bf133dcf73c5995bfd4c135b1e348abad72d729b84677aae2898bda5bfeed00e5fc4dae0ab9f55387c48c71db8a96e2dce7345615e19d029f04d8c45371d0bbe0d19dc37d06deb7915acb70cf714a1612df3568fbafa719dd34998e53c1dd45bff5798c174d718ccfe80d6f86b2c4bf5c0b254cfacb2d46fb048f4d244e2858091780b4be9deba94e68b41f403951be410275fedc0dbf8ee9e48a9d2349ef2ee64e1c8ea0e6e7a769d9803ea8565a881ccc47bcdc2ae9a35b9688bd0b01e0c83bab2eb651f31887dbd8dd1eba3a3c7eba220d27f8b49efab93ce6fb8f92c2f8b95d9bfc38cac9fc6c89ac70733b27730e1fd35c25f0d28fc5d8cd2804ceafd1448dec3040f0c29f8f7188e411a1c4f05c4f13e267cb046f8bc09c184ff01133e44237c5f40e11f60c2876a84bf1850f81fb1c41ca6cb4bcd2cb3bd0fc24de2b8ddb14d09d342664fe97c8825d1704d12bd113089fe8425d1085d12f1f9ece459b52091f9b32e3c5e7f8fc4eaef5159d5df1fe9c2e18b890fc9a41cb90017fc31066cb40e18af7ef20201fa0b263f5727df5d57936cd14142fc2b16e2185d8883b526b05a58bada02c6bb13ccd2ff86693256a70997c047d683d6049f6842c9135f45e1db0545b5ce3c938f78ebc7f0c7c57897201186c81fda71fcf1313e8e3f28296629bf758d90fbbb2e7df8e98458f2b7b88f5e7d56975b47be9c9394349df0a4f9076600137506c0f7bd547b27573b1737b16619a99a8086f74f2cdc49ba70fba0e1ee90954090b03fd599e3a8a8cdb14834dd1bb330c7788ca77f22a21988314e468c3155e89831fe4bc74d7c92665384dce077c54bc52e8a35ce95b5a243e476af9ab2603a251674c3faa982ecb8a49867ab1f46fddfba9c22be4b150b3941f71f4cf2f4b0923fc324cf082bf9bf3ac9bcb595170bff9d9dff6185527ec8aed0e7188f996179b01822795658c9319d64fefcec9003cd393ac1bc842f8831fc039cfe0072f1003ae802e02dd139215ba21d31d885616177c224cf0d2bb93326795e58c95d74927926981f32b774c5543e34accadd749279a3e6b04c544ef161b1ee98ca878755b90746f98890947b622a1f1956e55e98e4a3c24aee8d495e1056721f4cf2c2b092fb6236b728a4cdf5c3542e0aab727fcce61687b4b90198e02521050fc4582c0dcb6210a6f2b2902a0fd609161be2b6414b6608c66345581e43b166c1d1219b05c37482b93bc7ca4c047f880b1e8ea5e0aa9029380213bc3aa4e09158eaad099b7aa3b0d45b1b32f50ec152af3864ea8dc6201f1312722e26b824a4e03158ea95864dbdb158ea95854cbd7158eaad0b997ae331c8eb43429e80093e36a4e08958ea1d1736f5266924e7896fe8f27d38a3f7796e8baf8aa71e54393e93b4988c138b63697142d8b498ac93cc77e4db9089cad7e082a76076796248bb9c8a09de1852f0342cef9f1432ef4fc7526f53d8d49b81b1d81c92451e26b83ca4e07c4cf09690826762902bc2429e85a95c1952e5d998e0aa90820bb09e5675c89ed61c4ce3ad21352ec434de1652e3b998c63521359e87697c72488de76382b787147c2886a236248ac3308deb426a7c38d633dcd1063dc323301cf521711c89e1680889e328ac88db19b6885b80816e6c03d00b31b59bc2aabd0853bbb90dd42ec2d46e09abf6624cf2aeb0929760404e6903204b31b57787557b1926794f58c9cbb14cbe3764265f81093e35a4e0a331c1a78514bc12137c7a48c1ab30c1678414bc1a137c6648c16b307bdb17d6ded66292cf0a2bb918eba89d1db2a3760c46f99c90944b30c1e786145c8a75d4ce0bd9512bc352effcb0a9b70e6371414816eb3116178664712c26f8a290828fc3205f1c16f2f118e44b42423e01ab562f6d836a7503c6e3b2b03c4ec4785c1e92c746ac2cba2264597412d674be3264d3791306f9aab090376390af0e09b91c63714d48165b74c3afb9ce698c7fc8c7842d5736c8c1d4b61b80bd56c74cebcd765d8c7bb3e5b120dbae64a32fe6e556a14b769e3ad76792ec5c7b4470a54e303fbd2196ec41ab7e8278d05661a5e48d6d504a5663c26f6a03e15bb1d2e1e6b0a5c3369d64fefc2d99a4668a89aa1a9d60ee497e6b2682c7e366723226f8b69082b763906f0f0bb9562799bbb9dd9189ca29dcdcea3095f7875579079619ef6ca3cc58af0b80dbd35d9930790f17dc80c1be3b24ec9d18ec7bc2c26ed45578639cd318ffcc6f7bb86bab0a23986bf6bd195762f7894a6c5852ec32d101ab989ab012f8fe3628819bb1c47f206ce2b7606a3fd8066aefc2843fd406c24fc15a960fc7342b43168bd312c7584ad962b6b275cf97358c7f5ee91491c0db65d2cf106b485638f7d73a77760893e657f4ed17ddf4387f1a9a1637fc7ae62e860cb67dfa6e2c968fe862797e6b2cd7392d299ee9dc0c5a27fe5e21f7d96d148b2edd0cbaa2f5c925ad9b1d256ee4d028799432f7038345ac45c48bcb4da4e749e0cf07d3039354c6f8ea93ade26e22539859fdbcd73b7282ae34da83917e14b32718a21ba7d9ce3b2ead7aa750dce4d846a3487337b665728329bfb6debbf8f5b6b2a7bd582c1fd3c5f2485f2c2173379e4be5c7f6ca35569f9842f04eaabc02df0a12b353b1983dae8bd95119a5df42b164b986a91539e153cebb13246ea761713ba08b5ba12f6eab45ea6c9331e367bbdb2d26a76331794217934b232ecfbc77f8c61db58ed43d8c2f95f5f6036b0a60e5901d1e0b5e97b48866062cf57803abedcab63330ea5fd0515f9851de58c5dc9de34d28d5cec4e2f7a42e7eab08ad8a5fdd2982e1b1729bc33522e81ab69795a3254936a9ba0f8bf553ba58af6bb7bc943ac784e77016c6e1691d871308392c13ed9462d1e1d92acb8cf5a205c36d608bb0ed2034603d1984c8d918912fea8814f8f27b9188ab1baf6619b332e7da62b105873e16a96a74f85e90589c83c5e24bba581c91325df19c5822d2d8dda0c98dab6a6df2ab15d20692cbfdec4bab73b1783da38b571571be0d67af99da4036f9fa3c8cd3b33a4ec707eee1b9b14fece3e924b8d78a5bdb038d4ebb900f7984e91166c3e37c8cc797753c5646d276a76ed55f80c5f939acbf12cc06545ee71ba3540841309d835a4490985d88c5ec795dcc0e4562b64e9463b5b28fe20eb9a9d18bf5b2b4ab0c545a675fae5d84c5e82bba182d252cd754aabafb7eb8e5583285ec637a3116d3afea627a38c366cb742545620ce0365b9cc97291ca8da28cae705ade7bda30569760b1fa5a26630389e1c29ec23a910a8dceb33c1f6e4dd10a4e94d17631bb148bd9d775312b4a5b7266363a8097a1a9da7cd99694976171fc862e8e8b509be43ddf2dce432aaeee9651a94b10bda4b6aeff2ec762f84d5d0c57048ca1fab865fa967854f1bd028befb774f12d212c4f9bb2284fdb82c095188117daaa9c75db800b41294b1fababb0587d5b17ab6501edd8fb9a9d09367c3516d7ef60234f415370a97822d91afd656ce67283c4ef1a2c7edfd5c5efb0102d816651ebf35da1aa65bb1d8f5559d2b341e2742d16a71783a599df3ee10750d2e532caf1a2ebb0f87d0f8b5f903e40e248907797cf64a5aeeddbaa25703d16bfefebe2379ea51eede5233f145ade8069f983d463b64152a134ab54a0b4bd1bb158bfa48b35fe79b3b256170c5846781bdd17b17ae9aad136f33637617abfacd37b7eda16f40a31e7cb47dd6ac536e74b589dd8f92eb93f932a05b2ef11dc8cc5e787586b39751ee1bd9b62d1826cd2b421329923e22dafea368ce12d580c5fc9a4cfa39ff359216c8fcf6f94cb3187e4f48a72dee7562c8eaf62230e99f4eb328965762546f631bd0d8be98f74315d9e516afa67f0dc7ca8e2dd9ee97a3b16db1feb627b5cda74a51de9a41e03bd03a3f1136ca4505f67247b66b7570b733f16a3d7b099cbf4bd954c7270267d9ee0fda2ecedfc4e8cc3eb3a0ef8271ff15e83daf7b8ad6cf12e4ce39fea349e9836677ae3ef55e22af753699b16cbdd98a63fd3693a37454bcb6fe9899abb5fabf766ba29f2cb3d585cdec8c4370dabe7961856c7dd8bc5f2e7d8fc56b072ceed9325df4d9edb555bb0e3e9992c65a11877e1fd8c2071be0f8bf32f74719ee04b592f4ceadc743fa6e72f757acef2e909cb27bfcecba4ce99b62ab21da979008bc19bba189cc8dad74b045a60a6394fbd1384ca8318955f6532e7a3420c52aa7831c3725cdb94260f6131fb75267d83a02d8bf0adc3ec63fa3016d3df649237316f1fd7c60b59419af8e9f22d7f2b480c1ec162f056e6fe893ccc207608e3875d6fab147a148bdfdbd85857eafadbfb5e805f47f5bd06bcd4c0be3590aaa4c9ae6e7b0c8bf56fb319637153b5547892b93d950ad6de7ed98f6331fc5d26394f4f38bb5a317d7bbe8bf32f16e38b86960829ee8855bd7887b781f2c63ab762f9adf5de8cd6fa6c4642dde75de7e1d739a9c1f344596bcdc5174da596f08e03a7730e737f26c9af05b9c57fac9af917651509f9b5b2bc51d63a431072fdb6f862b3194e9ba746bca59697a58b85ae0e9f016a7118bbf471da882c178b890f1142590e69fe3190832ea6eff2541d215335278f4f2bc4a666694de9b5788f87d6416f434392c8c2dca1d3dd15b046f695637c77804d2218f71b75b8f368da90fd9ba6fa439e2e04a8d64f5a71eb4011a013374c989beb98d2c8dce1bd371d995d3ae5e4f314f93d2536bea072b168d53638e05c8f7055e760009bac40c84b2c85f07d4a84fc7b7baa13b75c4c717101def75ad7b2ed56002beee601fb0325b081ccfde2573ef3bc546c0677a08707ee034a70fd35e0b840fe6d6e3e91d522ae565a016d33f3a0fd91dada12b3e752e7778df4875233e5aed5d900eec59e1eb80f29c10d16edd1a68cab051be05d0b2a853f51c2eb01b2eada84f1251b303d33d2c3f4674a4cdd0026cf09ce0644e38778883ea244d459206ab2aa8cbaa79707e7634a387c9796b5ad6d7e35ade34e1d9788429f7f597a8728e68be550900d008b477900ff4209b02bc8805c4d3ed36503a0dafe1ea0bf5297506bc55482b72d841d2daca1c086fe16950d298f7c1b00cd1be801fa841210dfa44a354197b0dd22d62daded26eec253295a5525c2c22a85bdd53a01da0091ff28887fa784c83fe20ce1f1211ebe9aaaaa75ffc14acb1ba703c1a0cf3f2851f692659ab2b73db2c65c27fa8f36a02a0065db3fa3ea3df2ce109c1d561d229b5a663776f5c07d4add7b84e0e0729d85a23fc9a734bc854936c01b09badeffa284d713d4a8de8a0c77ad900da08a41ebecdfd463afab45f6dbee5b30bed879bc51846403b0cd391eb0ff443b1a96e8ef52695979d6130c5a7f463ff6ca9b128b45d03637347a76f6a0fd97dada968819a31611b8b76383b7834793d386ab71c2b301dcb900dcff28c1f506d9d4d6117eee96a0607d4e3f9fe44efdd60b3176f703f675f2c0b11ce2d1b312075a11cb7c13341b00c64523b74b279f70bfbf60f6de1bc1a8e37e267d98dba76d10579b65fd9be077c2dd87cdd33c07f88dc4b31edf88a72de7e219cf79c603cf57c5b3747e8867d4ea8c871cb08807f06889072a02e319b765e2812af07856e5493c50173b1ea8011bcfc837231ec821211eb867abd3199f828e274df8c4537607e3da21fcb87650368eccb7c5534c57c69111f0789a51a4785673339ec3a3de51319f3b3ce6e4fcffed8b98cf7d113b70087c3f75d148106d858ed46d056e21aeeb292fbf536f0631d3a9b17d3a8c4cd221f1d304aa4da0d3a65b42aba1772611cc6a0816f807743209e72c2b7116019c9d4dc239db4a9c5b01ce2e9438fb4a9c3c132762758b71fe1819be2e54f8f8276014beae5158e356d41ea1fa9bd81c564887b32715ce2f009cdd4cc2596025ce5b01ceee26e19c6b25cedf039c3d4cc2596825ce1f029c3d4dc239d34a9ca500672f9370ceb612e7a900676f9370ceb2126735c0d98712e72089b342f6cafd6bafe1bade7c3a909da840fe1d80ec4b097214f3c66f321d4be3cf378a67edeb09ad0460fb51821dcde0e05ae683cb36c31d03e0f6a7843b98a5eeb54371bca6b7afcbd905f4d80750a2ec2351161e44fdf527801d0e8c02debce8e10da782f71c80378812de90347578622626ed9b9359e29f00ccc126c19c6b21cc8f01cc2126c12cb010e66f01cca126c19c6321cc3f0298c34c8239cb42986f0198c34d824938f34306f36d0073844930097be564307f09608e3409a68d3d9c3701cc5126c19c6721ccbf009887980473be8530ff0a608ea6843945c2ac751eaa1547fd7709837da792b0641d4085fc2430dc914b89bcbb40be4df89db97e705b053cfb06db7a022b1dd39e836d893b84125adf0554283b00eb1b4b89725252862f17c2bc4fce2f72fe73ebdc2586835b58aacd3d49619395ae7301ec7151d86d6655958d280f0145c0784a9487688a804cb7be27457b0d15dac9c04a27505be942e1e65f2f9d9bf95ead7c7e68875cf0a05cbe5d477afb2aaa8ec04a2752a2542b3e663affeb64e0e5a27ee7576d9ed0381f209c1405c2b9071dc2af0384714a84039837f1ab8efe8f21da3ac1fb550071b2496ed9a4ce5c74f3e5a0929962124e52ef23329ccb00cea926e124f58d23c3b913e09c16cda281fc83c809e13550564e37c719c6c601b95c608933a24009bde156398df065722d62b5f3d2ee286a7032946700abcca31f2886436c9bd876816e9158f5b85d8ae25ff4ae7244246d4d6181ab4c2f00333f8afe77b35831ddd43a24ac9684aaa36ef46826e5243019dafd00edcc2826343275cc262c3fc9dcb2170298b34c824938d54606f3280073b64930091d67c860ce06300b4c8249e8d24506730a8039c7249884ce866430e703988526c1b4715dd05c0073ae4930091d67c8608e0730e7990493709e870ce6700073be4930099d0dc9604e06300f350926610f880ce60400f3304a98b92c79fc2898c71161fd4ee671742418533abc3d3de6fc83c584a528d950711cd8ea1126c124acdfc960ce04308f8c62dc9d8f76ee62eacbb5114df492e11b0af01d45896f18c097ecc8c58579cba56d9ec87805005d1085f341fe41e77c701e40b8300a8485071dc222807091d9cd21c2514db2e65039680e1545e51ee34db1c15922f2c935b2498b73818d2e36c7b5d5c615950500e592a86af1741bfedaecbab500005d6ad24e4773ac1cea7814e05c66124ed265aa6438af0538979b8473ae95387f0370ae300967a195385f00388f360927e95ed96438d7009c2b4dc249bab93319ce5300ce5526e124dd7a9c0c6705c0b99abae599d987374a846afcd31f842dcfd554400b01d03551ecc675306d3dde0ce0ada584378265bac42f71bd2fa13bc28754508f05831dc5264225ecb193415d0fa01e63225442972e32a8a5006a898950096b7832a8d300d45213a112ba2b90411d07a096990895702a980cea2100ea3a13a1123a2b90411d06a0aea7843a9b258fd227aedb2862de87bcdc88247e162cf11b81deb7d5ca448b560d571326423e5522f07dc755221c6bceea381bf7981d0eecf938735721113a89914de8fd1458e9f1e66cab46bada9dcc4e770298279804d3c6bd901b01cc0d26c1b4712fe46301cc134d8269e3ccfd7100e6469360dab817721980799249306ddc0b791d80b9c9249836ee3d570c606e3609a68d7b211f0360969b04d3c6bd904f0330b79804d3c6ad574e07302bcc76bbb571dfe36ea0ef5e4989b797c4ebee62532b7af1aeec1acaad57c83e90c7805d5645bdf569e6c31e366ebd320ad8647554aeb7abc588e676df88e762e7b54611a2cdaeb72380ad6ea504da3b65266fa243d79d0a5d0e40b7ad3d3deaed5fe93e08a0ac89625921fff6eac1b3acf00480ef6433f6da76678f1a84c5baf342a496f91e15da7a50e16c3769df4ed2ce2499a5f601386b4dc239cb4a9c47019c7526e19c6d25ce0d00e70e4a9ce358f2c2ae256c37e3ae0b2d4cb9d6ae755eaf64bc1b5922c0ba5beed746d3e2ec47057920a8acea4d72099f63e5c66a8f039c0d26e124fdf42819ceeb00ce9d26e19c6b25cedf019c8d26e12cb412e78b006793493849e7d6c970ae05389b4dc239db4a9cbb01ce169370ceb2126725c0b92baab1ce52d1aa6c71242f64fc234febe592af4ab1e4abcaeab1cead00e8299440ddd8540901f68db10f0098769be3fe6aa357477fd0a1dc13c574afda2ecd5dabb945f4c8d543b6efb2b41dd8e5de28d66ab6c3175f8aa9e01d0ae09d6aae2336613d4d565e3e00d09e16855dce8dde2ec9eae42701bcd3a380373f7a78649313cf037867d0572fdb345b4f953a4c2a588554a85a6c04c04728edb3c41e00e699e67a6d108eab939590434133689f397bcfd9e8743d1558e959664cf5ea3eab4c8896ecb3ca1b81959e6dd2641aa9772659793a1de03cc7249cb3acc45906709e1b455732b35ef92c2bddb08f0730cf3309a68d6ed8270298e79b04d3c685a8c70098179804d3c685a82500e68526c1b47121ea2a00f3229360dab81075358079b149306dec131d0d605e62124c1ba72c560298979a04d3c685a8cb01cccb4c8269e342d41500e6e526752849a72dc83a944300ce2b4cc249da3c22c3b918e0bcd2249ca4be446438b7039c5745f155a239ec60fb2ad15dcc43787514deece9878a9357052d7484368ae5d2a4eb83ae8b1141ae00767a0d25e4511272adf310075c25970b788b04128b01e8ff4608966c99c01200f6da2816f72bb0ea737989f39ca99a5336b64c6703bcd7b5e7945c647b765e4085f22350ce5e4f89728c40b9c279a84400e34ba777c9d73d6bdd243f06b548ecd4b95dde5fea1cab1cb184fb2990b505ba01c03798e3906863b6ff1f40792325ca816950aa98923a348ca7aaf54f06a5e74d66ef3c43383a4ab6f3cc7c80f766739d150927ebc85c717e0d0a805ba22800b07adf2b0008cb51b202e01380f156eabd918a658f5e3974af1096c9b3bd7d75795f00eeb628ec2fbfd5062b4587d45d5a6dfb8e1f5f03186fa71e58e6c0168b80dbf5235064bef1f300cc3bdab37d19d94721c8fa420da0e6de1f054af8817b7f8fddeee1bb578155de19c50868c1413702da0010de15c5e01cb7c625a2b9d32294e01f0faf10e5e55a768a18f36c74eef1b66603b37925e59100ecdde63874dbe8a3743840794f140b600a7c555004199ccc65bb05c0bbd7a415e773286b6fb215e7f7019cf79984b3c04a9c97009cf79b8473ae95387f01703e6012ce422b717e19e07cd0249ca43b1b92e15c02703e64124ed2adf8c870d6039c0f9b8493d4778e0c6739c0f948141becf2ef5c1f3c1becae02f81e35c9b98bf403616438278251a2c74cc249bacc850ce71a80f3719370ceb6126733c0798012675721a04a7c39b591b9de72f6396a750665e31394b826b1209face5c3702d4224fc342da71681ffc6122ad8f900f617a2a8c7678a464fc4e34564836def027c4f4631a6ce078497313ec8cb8782b78a51f546ab877e2f02089f32c719cbc655e8a34145f334254afe798d6251065632e52e884de5127e8985ac0aea0a6cf28be6fa0bd9b875cf6d00ed97ccf960dd6c2b17f77f0fc07cc62498364e9cfd00c07cd62498362eeeff3680f9659360dab8b8ff3b00e67326c1b47171ff2300e6f326c1b47171ffd300e6574c8269e35a8a8700ccaf9a04d3c6c5fd0f03985f3309a68d1dcb9700ccaf9b04d3c6edcd5e0630bf61f65a1fc23e11d95a9fc3c020c837a90741528d27b9aa170aff38c2ea88ecabd33b00c86fd12f434d04e98e66f2818e1dec6831eede907216ddc68fd4760005c10be638bddad8ddcc0328bf6d9277c71cca2a8acc32bf04707ec7249c0556e2bc1be0fcae4938e75a89f30380f3459370165a89f36700e7f74cc249ba209a0ce70680f3fb26e124ed2d91e1bc10e0fc81493849f7d626c3590770be44fdc93ab5cedcbe59ca3e00d3cb2659dd1cca317732abbb1fe0fca149380bacc47915c0f98a4938e75a89f35700e7ab26e12cb412e75700ce1f998473a6953857009c3f360927e9f42f19ce2680f32726e124dd2a9f0ce71680f3354a9c2359e2ae9a9c430be3d317febd34fd8b06088786c99c62bb82b1f7d729b14ef461ddc2921d0d33774924444dd6d4df0650ff340a17ee79ec60db16e55ba010f85914eeb2ca5a9b84fdf12260a98457a59d84b377d7e205c03adf30c73bde462fba4100e5cfcd75ea269c73272b439f0105c02fa2d87366a6cf566d2e3d970278bf34db1f84d04591cc1fa41064fb37a368f0c31de47459dceebafe47c05a7f65ee57ad092d95ac141d0b2cf5d79468c7fb9a51b50c2e25d47f6963997c39b2edf52753619e0430ffc61cb71b1b5d191783c2e0ad28bfa9c1b37ba56f09e2c1370af01f80f76d4abcdd456cdc7897ca32947f0ec2be32b41f40f65b93b6ae201d7c26b3c07ea0acfc9d493849474bc9702e0438df310927e9583e19ce4d00e7bb268de5cfa15c004b3696ff14283bdf330967819538ef00387f6f12ceb956e27c1fe07cdf249c8556e2fc31c0f907937092ee404786733dc0f981493849f76220c3b90fe0fca349384937f423c3b90de0fc309a5dbeda61849eac53f93ac0f7a728a63778c0d5c21295ec1df211fbc6886200de9fdb7f3da6aa64ec9b0a1e0c7a3b1f9902d2c639f5ff028bfcd81490841316642017018bfc8b2920090732c8401e0e40fed51490843e1e6420ab00c8bf99029270413519c81300c84f4c0149d8f42603d90440fedd1490843e466420ab01c87f98029270d2960ce42e00f29fa68024dc15890c640b00f9a939be99366ecad703a0fc97391b4c91aeb62483f94fe6c1fcb749306ddc94ef6f00e67f4c8269e3a67cff00303fa31e48f33ed3b04202ad715ee61b93f3d7ec1b85ec0de0fd378a8fcf7afeeb7a97c03231a0cbd1560b6175b4e341641ffddc05c0fe8f12ec38e6f7bb74bd84bdc52b5ca0fbc5e95499dfc672740ea8e13f8f72a1a00b943bb7f28260b1b60d6aef267d95002bdf50ce1067561b2ba749a0188851a2d479b6675ec212a2252b618b8195e64461a5584f69b1706edd223cdf48337c2e15ca1c80b203254a7f395ae328b19e791f6084c2235b14700115d65a80b523255635c53b27faf971323fccbda0e4ec44094ff591321b089969e55edb87024bec6c124c1b17a81c0160763109a68d5f1bca0730bb9a04d3c6af0dcd0230bb9904d3c6ed9f670098dd4d8269e33e097900660f9360da38163f05c0ec69124c1bbf363415c0ec65124c1b07e4c60398bd4d8269e3d8d10400b30f25cce0cb4e09ab20b20ee54880b3af49386759897329c0d9cf249ca49f6324c3590770f6a7c4a956537007995d60e82d921d64c8f01dcd3c7c0328f10d647c0bf272b94d2417b5c3797c9bf378bd186d875fa9b60f632780712025c6d1ccdbd7c89d46dbe4a8dbe4a8532178f059f6858cefc3c1a72ecae5e87a25b3f9a3f42702b883a2980bca6eaf381b7739ba07a01d4c9dfd5355462aa6a41316bc954d82b1065442432831e66a3006db358e7044896cd7b87900ef504abc5d8500771f23b5058f7db392fd41a61e666e7949381f44565ebe01d00ea7443b46a05d2eb27309e393b955b276af14a2945fd27691003cdb57387fbbe2973ac72a476ca585757d77007844141512e64253242c96781fedc95415d2a700e3c828c693607b5435eebde6beddedcf2100e6284a98a33430d31701f6825d0dc01e420956edf63e9b1d6cbbbddf0e108e36c7e5d0c619f53900652e25cab10150963a617221cd6cadf3971a2069a2ad96a652554bff0288c750221ec612fde51ac4e8d2b694366be3bcd13ad0331a1bc56072a65bf3ccb3f223e01f02fb1c67124ed2e55a6438ef0538c79b84b3c04a9c17039c134cc239d74a9c3f0738279a84b3d04a9ccf029c934cc249ea1142867311c0193709e76c2b71ee0038279b847396953837039c53a2e8b9e78bdfee91cf77f2517abb073f6a00c2a9edb90c2bb11764a3fbf608d00b9a169535babd772e68b7b4c408c6913ea442f80d608dd3a31877e708ab5a370550b76d1f8efb2ec03823daa9b783fd4b41c300da3c536735496b73b259cd3f03b4f9a6a2256dc693a1bd01a09d1945d534eba09be2980810ce8ac2c393ef961db9872799f34c2ec0373b8aa9e0cc6688665939477413805960124c1b9bed370398734c8269e3aacb2b01cc429360dab8eaf2460073ae49306d5c7579398039cf249836aebabc02c09c6f124c1b67cfcf04300f3509a68dab2e2f03300f3309a68dfbcedc02601e6e124c1bf79d7910c03cc2ecd51984199fac83d9178cbe1f19c5d0f1cc567bad14239eae4f9ced2b31bf09acf428936628e75096a06433945f0438179884b3c04a9c77029c0b4dc239d74a9c7f0038179984b3d04a9c3f01388b4cc249baca8d0ce7f100e7629370ceb612e75900e712937092f68dc870d6029c4b2971aadd6167f91af5367f3d751980b72c8a452edccf6331e3bb7c34383d9e2ad9687797b6540981e54200dcffa3c96ac7ae7100f1729336f8219d4127c3d91b742f5798849374cc930ce74c80f368937092fa1593e13c0ee05c6952dd3e8772e28dac6e3f00cace5526e12cb012e7f500e76a9370ceb512e73b00e71a9370165a89f3fb00e75a937092eed34986b304e02c360927e9c6926438f7009cc7988493d4a5860c6715c05942897332f32ffde79dcf4a8707f77d57f1f4161c60b39d0b9dbf1ac5041da9bffc7d3122e08da0655a4a095c7d59189b424e2c59c940927d59782cb0dc325340125a2419c8c100e43a5340123a819181bc00805c6f0a4842d7443290d301c8634d0149e87d4c06f21a00f2384a90f9bedabd055d3184af892b729ea873f4a917673caa11d5f5d751d5f55b405d7f7c14ee62990eea11ce2f910de9f504304f300926a1ef1d19cc5e00e6069360da38d8fc6f50ca9e68124cc2663d19cccf00cc8d26c1246c4891c1fc1cc03cc9249884cd7b32980c94999b4c8249d8322583d911c0dc6c124c1b3fb6d309c02c370926e15a6232989d01cc2d26c1245c4b4cb76f3c8059410913dfa37ba9f3bb86b99fdb29730470c1f6efd1bd09d4ec959460dd4fdcaf721ea8102e6170794cbb7de7806cd14c1780b5ca9cddbf6c5cf93e0064fd6a7377af21acefc9bc451f0356bad5ec957384bd26b242a00058ee364abc0340a5b54b544adcedd6fd365c44ebe62ea0827832b0d19a28e6e961cd8f5557e4f53d994d8e06384f8ea2344dcef29994a736ee051603d97d7b14753e36db9458e7dbb80dc63460a5b55134f7b3a9f309c7ebc96cf46a00b6ce54b0367e39ee52007687a9606dfc84e961006cbda960095ba764606701b00da682259c7922033b0380dd692a581b1b582301d84653c1128eae92813d1b806d32152ce11c0019d89300d86653c1da3872b511806d31152ce1682b19d8e500ec2e4ab06a37e639ac1d766326c3770ec0778a39630036ee91770440b9dba495cca49bbe904df4c5c1e8d41e937092ee524286732dc0b9b73d67f7fd837d366ed4ba59c0ecd2c9277c6992f0226139dc762a98b79bc80cb68c71476f77bf910ae77c95a8ab9bd96627b36e70fe054b818dce3fddf598d8326609dbcd1ac4552eaf52c8ae73ee72cd9a58fe04e79153b941749306111765f5428779b3f30cffd2370f7d0f2b65ee6e296b9ddfcab7a04520898bad10bdcfabf310f807d7b7b14611e3c4dd54e2b1ae8293fbb51d1e2f0e302e75555fe059216b891a27cee5429346e7998e221c373fc663bdc0999a3e5a21da384d42abeec2165cab2995ad9c0a714769b043f846b84fc4a5ed54897079f2c662fd648af2d8ac1624ca9d37cac5b1ac35cc3cfe498858a1f3cb6d6bcd686d65cd90cefd75f24c5d4f2f93a7676a69a7f1448be973716d9b5962ba18b99987bf5f2d9c21aa84d41569639a3e7eb855f74c912a7993785a1cccf13f1da67b4e5e9cc777661bd85e7a8dcee021e710d51bba2c69bc5517337727a92a51baee0965d5dd456906e5d58870f3269b69d16d17f733132d7a4ab6161d5ca37d9416ed4a73bbe13ed9cb32889d3e1dfc71f69e6a90f5a0b205377f6f637cb1797a12a344ad8f4b5be89c6d1571ad1152eb98fae135a5fb6f48ac8773bece79d72d53f867de1a9dbfb9bcb17539acd3ff031bfc6c8714340300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/98577a9c69af70241a7f6cc9880d42a6.asset.meta b/Assets/SerializedUdonPrograms/98577a9c69af70241a7f6cc9880d42a6.asset.meta new file mode 100644 index 0000000..704aaf9 --- /dev/null +++ b/Assets/SerializedUdonPrograms/98577a9c69af70241a7f6cc9880d42a6.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8f6cfe3cc522c6447ad716ab49db3f15 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/9c35d0daca8026640ac57db646fe3b2d.asset b/Assets/SerializedUdonPrograms/9c35d0daca8026640ac57db646fe3b2d.asset index 9106d22..912338e 100644 --- a/Assets/SerializedUdonPrograms/9c35d0daca8026640ac57db646fe3b2d.asset +++ b/Assets/SerializedUdonPrograms/9c35d0daca8026640ac57db646fe3b2d.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5c59531b47109e058484b94f81c1181f09c4c648808fc43931604c7ce08044123b2e2c1b81957005b0cb7e4ce52595ca1fcabff0631ef2901f909f90aaa4bb77168d767b76b5420312b128edeceeecf4747f7d4ccfec889a84808f350a8765b128a6c598488b55b12db6e06c1aca4df8b3af9cfb0fc52e94eb70cc40dda8180a68899f61ab178ef370b527f6a1e54bf11cca1cd52f892c9ccf43db2c5ce1dd35f866e129ab0e1aa5c58c58100f44dcea0e20b14c8df6e43d0be5b26270bc25de406d9698c24e12541587c312d4ec51dd2630ed3cf7583c21b136a1ee39b4d9151b40f319518c0dd5083a1176119165ad2c916a3d7c07946b94e24f791d9525c2d1e06a7b4a96f5f27bc655dfa8b4e5ea9b6419d3d437cbb24153df22ef0fcaeb3a59b6cafb67e5758da41193e71c0e6db2ec936d87946b2c4fcbfbe7946b2cdb65d92febcf2bd7c08ff5d6eecbfa43966f5dbc76b878ed9465972cbb65d9239fbbe0a2f74b113216854bc422ebbd03f694113b2241443e10c5bb99d332d8c190743d1ef0334cddee8329ef0001c6cad3e443fb62524cb056de6735297c4fd331034fe488e8456f17bf7bba40e636e02fabb8e81edc9f230f4727cd41cd98b80725b67a2ac6c1e91ebba82c43b71be0e6599182e30ed17b0a6c7b9f0c1209ddd9dd661168dad16613ee3880eec0f50671b844c757c46996b89f877bfb14fbb620fadd82f235f5e6957d17ceb93e5312329e473ee8e8eedba1cd51d30c4883dc27c8ffde69e4383482d0d75f946e5897a028f1ab4713ef30b4830c06d37949639c20b30aee4d8804c5db450f82e165f44ac8dbb78df77571d557161e1954773f4990d7f0cf93a9bfeefef3f86ea450b44991c061c31a0810cd0f58a43762f57828f88b1089d425915137fc16073fa52a4b4708bffd5c8e9e0baf807a1a990a156061ca938293d7f0dd20e653c0c2063cb0257e101ebd24914894a0f50e9c41ece9c0ade1c08d1d35b8c1d1c40fdcd8815c7970f1c323d8a0413088071d82b51c82943d7f6714416fdae59cdd82b62f0089573496be84f65c9ae68f29a6fb575c98f27836129e436cf2188e231dc2751cc2341f59338a701aeed989e52cd5e6281b19a3b47393e864480efd733696f7696af79238f047bda968d49b09f54b4218e152a78908a38924ba5f0be382ffc227d2e0621e1d4343bc9e5373e3f10cb3a505229c73c58b0e446dbea364d83014e5d0a349f74f471c86f819e39c34c70590e17b61a7fa4ebfdb648ac89133655884728db8c0fbcf659ee1df97bf6eda0ff0c9eb26418b0eb321e6bde6a5c035825368f511de6a3ac96a2a8b679d4dc6b8708186dac5a54328d90a70b9053773b416b64d7697a1b669e06d559e7ba24a541f551a38bfc07065a58f297bd4ade0f9db6f3767bf1870ac3edf6450d79bb3c6449fa8c6d8e2646ca575a0338a533aa3e8e58ca29b8c624524e19b05e86d63c5108906f29aea7009c85eef0d63188d3a3efa383e3a143e5e5086be2a8da2740e9a741c9ce638e8629178209dbb742e9a755cf4735cb42a5c606feba0f5d2fb6ed1f53dc0f5ddacf4bd42816a5dae08a11ec2f4dbca05055a154e1d6150c0ba6da282f6143e24e012f96577bac13bf2203972af47b86016746edca653dd594e75e86c3b34b57d2341db2f2196b7737d22e921e14dbc7066eb21dea627dec111c7e7cf31305b1eca837aca9d1c6574fef34c4c4fa295e3c2bf4c02dcfd74eafbe9d2a9e422a79216f2a619f2a00c281a8d409d3384514c37d733f2ff1ea398da908ae9e19c954c61cba8b306e557388d7a49fe82e74e404e51dff98598c3e4acef837c6798f9047e783f1f263f9f10c1d96139b8d7c586b8ce9546d88815c2957a395b20cfcd19b505bfc973611e5dde05017c2757dc82c025d2fc15e1b72070585e75faeee3b44251ef281711d5f94df8c1f472d1488f0a7e0131a87f1d7aa775c1f30a133c45c8e0d9af73c5b1c3bae2806eb44970a3cd94d63055d8c628b3db06735801aa9b9432e4e4eb5dac09a6804fa96a294c70c28c696774f22539f9b20721d709956aa0b49774d0b0d7e875351af6fcc193f9f0bb48526441ae57f4f4989407379014ee6c59a67c3b773072bbe556676885357e682d430f38f50e83d3a00ea7710ea7b4619c705e360d5da1444837dfc61fa1c3e3705687c30487c34dad3fa839982dd71ee97f85e470f4bd1a60e9e590684827d12427d123839a9d3bb407e87d200c22e774885ce51099700d11d324ab2d9713eb52702fbfe0ebc7a7bb2edf2a8c04e775125cd3456dbe4f3552cf8a1fe1f10cc56ab4663da7fafbe58ada1774f25de7e4fbedd8a2d18cc81e4c8757c56d69d359b99a525c2457f1d34b914ff4f9343f5ca488c29f45d3f959a2b40b2d1f520bbcda13099a842645f004c4b98f7d6f829da3be5307de1c3cf9b821f41bcbbcef054bdd631424056723638a95a8d2153f1df4eea78a4a891c5a80344dba4f9aa41fa2566ba5566b1234f7bf5ca2350573f191da5be0e6c4a03d1636016745d6c2b9c20a35cf50c00fa41f3481b842049c8d3765d84b89463505c0acd20c680ffef0138dd42411f79b26c1095a7daa06b0feb6f2607d6c12ace2df8c55036c31822d1a7111bf5db64856dac62d6fcc6da551ee352d99ec12bd55770ca695ae4ae3fc13d516473c716824843d8d043a6a3e21e007f22426049ffecfc7ea248ed59f210803ced04651e3739351a347d8afcbecd46c0b1ef29b5c24ddfd1f660368434114192d46b85222499f325a7d7114503e97b6b8ef9ba31b84326a0aca9802e5944928e30150ba97310c8239680acc5605cc5b9504e6781582d9a180396d124c1ce99e0967fbb5ddcc27252d1f74cda6a0ab53a09ba99cf878ad0ae3638b02e5ac49289d4d2ed8f11a8dd90e6dccd48c011731059c5080bb7d9c36982e582f3338ac34988232a240396712ca41e1cd1c752f2bdcef948d427bc914b4bd0ab4772a27524e5461a46c54a09c3709e58084725d3bc351094ec1d92e2db81bb5d0b829581b1458bfac1c0bbd518516daa54079d72494c30c9487795163d06e874d81dda3807dcf24d8e798410b99d8a7df9b6d81d3d8bf423f6959418d02f0fdca090c57ab3030342b503e3009a5b38bde9be46fc947aa0f3c4b016fc12478ce4f4274a3fe1139749b29204f2b403eac1c8736b87664cc264f29507e5539505eaf4228db1428174d4289f3875707afa51e8afc8f468c81d6680ab45a05b4a5a388893afb5363a24147361613db152053950264350e2ef50a90e94a01d2e032873120bb1520974d02e9bce3d1a53b27e185595c01f3eb4a02b31a5f98f52b607e6312cc7049cf6415263d4d0a94df9a84f28c84725fbc10b8a9c5bd4ea4ff473a466dd45862d4a900fba852813518498d011b152766735d1211792c949d63233e938391c0f7f7f64eb5768904fe6f93fb0297073372b75b46d9b596a01f9a5e17e1361efbd30cde5286ff30acdee23d61a36c1a2cc736394ed2c36c996bf2d14a827e5e7a92e57f220afe174b341227435737622ec0c3abc4147e22ff01078515991a5b0000 serializedProgramBytesString: - serializedSignature: e1781ed9791bbd316c0ea187787916d7f5321646f97553f607144e48991434430785f4e835696f50c0207087c09f5d38217c7966a0a2ece53d0110eaf66df603 + serializedSignature: 36573cd6daf94bc2f003d8d0efe18d70e75060a221e23fc81452d720a25f665f6a867e1c64a7fb2cc980e620e1efdce571f62950faed70c78ddd9348f898a501 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/9c3ba83a5a742c84e85f136d3e133b16.asset b/Assets/SerializedUdonPrograms/9c3ba83a5a742c84e85f136d3e133b16.asset index de7f009..c257985 100644 --- a/Assets/SerializedUdonPrograms/9c3ba83a5a742c84e85f136d3e133b16.asset +++ b/Assets/SerializedUdonPrograms/9c3ba83a5a742c84e85f136d3e133b16.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c15c5d6c0e7463aa8a820bda820512010124251a437a9d25410219010220122a18a057bef5d51b1a3585051ecbdf7deeb53df539fbd3febb733bb73efd9c99c7bef66f62cb3f9949f5cb69d39f39f337de64c4e0fe6fc97e8e6fc358d4d6243591e9bca4ad862b6c8f9d750e777a1f3c7bd92f727b225ce6f99f377b1f3ac1beb98e14bfe5f97444be7efd1ce55155bea7cb98ccd757ecbc5f3c9acd4f9f768e7db52e78adf9de7fc5feabc95a8e37c34950d6313d878d622d13c838869e2a32aef5e82c72bd1c0f97b085be53c2d154af1407a88472d9cbf263b4faac4b3858ed2f2bd196ca688d642e7d95ce79b25acc2913947486c50b98a897f30f76757efb78bf7dbd9f9bfa1f7efadbc7f37f0fe0ddfe7f779ec0e48f36e2e7857cadccdf9bfaef3ffafdef5eeee75bd26de7557f73ad14c91d108c8e8e6fd76f77ef3bc5f6e0af518cb393f0bfdd33debe9fdf6f27ef3bd771dbd964bbd0abcdf7640af76de6f7b4f8f0b94fb1dbcfb172af73b7af72ff2ae0bdddf444720bbbd776f27efdd8bc13bf23eff6de33d5f0bae9d74ca19e55defec3dbf4491db51797ea9ffbe649c90ba5ee6a5d3fa343a7730d4f94b458ed4a5b7f7febaec74cc91365aa48477b93fbcad3a79eff5f19e5fe15d6fefbdd7d6bb7f25b876beabd3d27bafaf771fda447f3f1fb6879faf94cdf604eff1e75729cf0700d9bae77b79bffd90e703813ebae783bcfb577bd73b78e1495bbe125c3b71ae2bf3eb60ef7e0710e7a119e2bc8312e73c4527f97c0090ad7b2ee33c04793e10e8a37baec6b9a6e5c530d7ceeacab24afe3666d995a58dbcdfe119de4f27a3b1f73bc2404613376debf54cf36e2e78578633d28dbf788f5f77f6d26d97d43be2df09573e2c0393f7eb7af7af51eed743eed747ee37f0df4f964b9d802e9dfcdf243a337ff9d3d9d5b3413745c6aede7bd7029da13cf95c2d13bb307f7d504ff9ae0bf25daef25d7de5bb5ce4bbdd94ef1a28dfede6ff4ede4f969f9d98affcacf7a3f77c947bdd60bf2c6c29ddb3bdbd70ba7ae15c07aef9efeedefdebc1354f8f7bbdf065bd30c67bde4d91d32dbd9c864dd3e8388ef9db23a315b6dd155be9eec9dccffdaee119c0cef97359b65dec9797c853e46df0cb6b7483f7beacb34678efc9fbe315bde4f3f5caf33c102e7c2ed3609277ff4670cd7fc721e175519eabe14d0069039f4ff4bf9798ec3dbf49b9be394dda6cadc459b6f736826b875de3cf32b0db27033bf93c2c76521ec64e3ec7d84df2bf57237632ae5358aadcaea3d8642f4fce2de05d799fff0e627edb1fe4cad85ada7c5d455e4feffd5bc135943b55793ed5fb9d067494acf74ddd13cfe53dfe3bd293731bb8e67a0df364d453f42a54c22d54f492f6b0095cc3f2468677bb12de7c9cbf949d2c63a7305f19dbf80feff9e4602cd9d4eaac18e427cb6ac02f596fe5837bd006bcbe4ec14aef99e45200d2205fb18d02c566f70fc6de178f319a784cd7c443d6a3bd35f1284a138f3e201ebdc1fbf2198cc70cefb7be22bfaf128fbe9a78c87e47a678c87abd9f261efdd3c4630f108f7ee07df90cc663a6f7db4091bfa7120fd926af493c643b6380261e7ba589c740108f01e07df90cc663ac777f10f3d7f9fcdac983db3555de1bccfc7dcfc1cc9f0fa59c0d8a9c379174977d8d5b91e743fdcf135e5f28314cd16398a2c770eff91d7efdabd5519b801ef23bf8fc52fff7c9b2ea3a70edc46ffbbeca7ba314fdbcf182649d25e56cf0cbe15d29ad5dc93af356e4f9de0a2759ce8f51f4906581e43416e1249fcbba7513d0437e079f4b4e6a1d389ef9eb40a51d9598c052e5b6ee7bf97c9d77ff40e4bd894a38139570f651e229dba1b3582aafc876c36c96cc5b3bc8b67a4ddbe6733cd9fb2b76e395e789fd98bf4dbd9f1bb7665efbb7d9099e9cb9def3e98a9ce919e4dc9046c712e66f9b17337f1e99c1fced93199ecc1fddef9acbfe9c6c9b1fe0b735292f7180226f835fde8e326fc83a6309f3b7f74a15bde4f3f5caf33c102e7c2ed3a08af9db9755deef5224bc2eca73353cd9be9cab3c9fe77f2fb18cf9db97f23a48db7c26f3b7cd67baec5a1c93815d590676f27958eca43c8c9d7c8eb19bef7faf46eccafdf6c716b054fde9c58755807b5ede620b5932dff769ebdd3bc80bf7c0d4fb095906c9b6ce2c4fa7cde0da499b96726c47a7e322ef57b64b655e99cdfce5f86cef79a526fc83411c64bb7409b827dba5c5e09e0c674e2aae85777acf167bcfe682b0e0fbf2194c2fcf0e92ed52f97e89128f922ce321db41301eb25d5aaa89c7bc34f12803619582f7e533188fa5de6f7d45fe7c251ed23e6b120fd92e2dd7c4e3a034f100f69b2807efcb67301ecbbcdf068afc0a251e1506f190edd285ac7a3c16a589c76210d642f0be7c06e35147915bc9fcf57ba5f75cd6ef07337ffdae7e2f9faff3ee2ff73f672b341c56a6e2d246f6276bda0e90fa1ce285b1dcd3e74e70edbcd336ddfcdf2aef5796e52b98bf7e5ee1c938c7d5b9edb3feb0132b99bf7e5e05ee43791bfcf2da3de8bd2feb98c398bfcc5f0dee43b9877aefdda55ccbb27b1beffe2aeffe95e09a877b83ff3d26e54b395729cf0f57c2519f1fe1dd4f373fa1d6bb52b7cd7edddacbfa618d923647a66ca6c393deef0d8a6c69b38728b20ff164cbfedc518aeca353b2732722b265bdbb5a91bdda93fdaaf7de318aec6353b23b35516463e97e9c3f6c34fdefce90fe872be97fb8ab6b872d91fe32bf2a6925ae75fd9423bd30a5ec5b14fb59c352e5ca1af02eff3d92f9f3ef91aedc5d5ef464d455c2389af9cbf0a315b9c728cfbd344e1c0574f06c2a71acc2fc5837ec8e2fbae1ee24db2e32ed8f57d2fe78701fea7812f3e779797db32b771759becbb43f4ed1e3388f81ecbfc9fe8f1cd792e9b03e837ef2bb3ce5f97ae5b95ca771a4ffb9649afcfe0425fde5f71394e7aafc1315fb90f2653a9cc8fced6af9bee4a6c6e724e5b90c4fb6bf643a9cacd8c2c98aad9cc27cfdfaa4fc9395e752fe29fef712a7325fbb3c701e3d1579aee651355ea729f13a4d89d7e9fe7825399fee975b2d7dd780f475ecb4a32cdfb17240b633c228438ef5743883e9cb9033592aff9e09dee5bf67317f1972962b3757aeaba9ab84718ec2ef1c45eeb9caf373bddfb3810e677bbfe7317fde3dcf0dbb733337dcceb28d29f3e8054c5f865ca0e87831f39721f2da2b43bac8f94a59869cafe871beab47172f6eec543f4fb40c51f593dfe529cfd72bcf651972acffb9649afcfe4225fde5f71394e7aa7c59269ca1c897e97011f397211729dcd4f89ca43c57cb10990e6b155b9036266de512e62f43a4fc9395e76a19e2bd97b8949995219722cfb13244c6eb32255e9729f15ae78f5792f33abfdc6ae97b26485fde8e9a0dec8dba0c916d81cb99be0cb982a5f2ef15e05dfe7b25f3972157ba72bbc93185ba4a18572bfcae56e45ea33cbfc6fbbd0ae8e0a559e25ae6cfbbd7ba61efe68d7feee68d7725f3e8758a4d1f0fee431d6f60fe32445e7b65483739df27cb90f58a1eeb5d3dbaca798bd3fc3cd13244d54f7e97a73c5faf3c9765c8d1fee79269f2fbeb95f497df4f509eabf2651972b9225fa6c306e62f43641f507253e37392f25c2d43643adca8d882942f6de526e62f43a4fc9395e76a1922ebfd9b9959197233f21c2b4364bc362af192e3b2325eb7f8e395e47c8b5f6eb5f4bd02a42fefe749bd4cca1075ece156e61f7bb8d57da7db9b69649dce7cf69fb88df9cb8cdb5c19dd9bba7a771fe50f3bb189f9c71e4e07f7a1bc0d8abc7b993f7fddaed8e36a701fcabd83f9f3bfbcce66cc1d2b6b65dc37b3ea6b3e64b877325ff99bd80ceef3dfbb146e77b9320ae43c715d45de3d8a9ddda3c8bd5779eef14adccdaa8d3b2665deaf7c73bf22f33ebfed26ede6f6944cf10ee09e78c0fbe61e70edc4ab475ffffb72ee1b7d7f3ed01f7e27db3e323fd453e2f4a012a7079538c9f4dfe497cf649dff90629f6779bfb29c7bd86f0be25a7ec77f1f51ecf711373e3d8ff1bf971c9f79d47bff5e70cd7f1ff3ee5fa3e8f798a2e77dfefb0cf411e437320e22aeb00c9571cb03d7d0ced5efef33fcfe41c3efef30fc7e73b0ef93e15d9de1fd3b3284776b0dbfbfc3f0fb070dbfbfcff0fbbbfddfcb3c98ace3241faf8eebfeadf7dca48e9365f3132c950fe4fab7273d39d7816b276f16162aef3dc17c6580b8867a3fa5d8d9bee03eff7ddc7b7ebf22f77145fe7d6ebc0ba7f8e524c351e4c8efd93445ce03ca73b81631e85af583158e4f337f3df5b4c7ec5b57f7de727cd09b87493ce36727e589fb50de06bfbcdeb3fd72189823d2ea2bc37b4e49d3e75c7945772aefbda0a4e90b0aebe7151b5b02eef3df679534957a1682e7e09ac979a607150e52de8b0ad7173dbd37fadf4feaf792dfe6a49ca4dc9715fd2bc177503ff5fd07dd742c926dbe259a78411b947232a54f3a1b93f3e5af001932bc5759f536d502efd96bccdfa67a15dce7bfaf2b4c5f7765f4fdd093535791f726f3974f6f2a72df529ebfe5fdbe0d74f4c6b612efa4ee89e7f21eff7dc393731bb8e67ac93e4c3d45af779570df55f47a8ff9db30ef79df2f54c2bb5d09ef4e458ee45f37c5483e4bdaddabcc5746f71906bee5efc9f9ea9ad8c1d95e9af4cde2dd73dd7797cef6aebd31c67e2bddfbfd4e4923438e6dbecffc65c0fbde736fcf61e203eff943e01ab2f890f9f3e087feef99dc43762fb8e6bf61ed5bfc04b09671fa4889d327e03efffd94f9f3c4a72eb73d9a2a72e477fff6db56721fa3fafc52fffd24a34ffcf6d27fb6261c583fb4378cc7938a5eeafecb1aeabd87acd774ec3b98e9bc67852247eaa2eebfcca4e3bb196ce123fff74ceeb39475446be5796bbf7db336caf336fee7897f79d70f836bfefbb177ff11700def3f8ab34dc6b9adc2f03170ed30dc4bc65d4de7ff28f62bc3f80c8421f5f95ce1f519b8cf7fbf50d2ef0b2fec4d8a1cf9dd7fbdf71f07d7d0f69e00d75257fefb25f397d75f7ae19ca2c8f9ca7bef49bdfd249faf73ed23a9a7dcb79307ae811d0d58eb9783d9db00594ecb7916396625cb35d9f659c592f54a5bb987f742bf6ced3be9caffb54c5bfe0ff4caff81eb582a0ff1df8b58fa7a49a6f9d7ccdf7efcda93ebcd7f0ffcb58672bff1e43e05ae1db983725db983e43ab34bfcdfb1cb525cc67e1830ec758aac2b52b206c9fc727996b2d2a5c5765e9cbe4dc910ff76e2377890f78eac5fa42d7dc7fc654f5b705f7ecf9f6f56e4c9353092c1e519f496e3aedf337f5e916dce1f58f536e7ef201ebf2bfafdc8fce5cf8fae5ec3e4da8cf6feef12bf327ff923f5f91ff39701bf82fbfcf727e62f037e72c31922d719b652debb5e796fa312de1f4c5f56fcae3c5f873cff93f9dbda7f02aefcf71725bd7e71f5189aab70cc905e223d60fafcadc8fddbe32deb6395f76f0a6f6f8c322701d2f437708fff323f6b71cd75e7f59293578635d3879593e30f2b672be66b7388e7f23e168e8c5343f06ffefb17b8f7971767b936aba3a2471d4feed3e05a7e076d43ca59efff1ee681643ae5816b50e60fbe137c03d349e68bcde0da096b845c2fa1e67f696f6afeff43b1ebcde0da91373c68fe6feb0f37d9e6b94c09179603f29b768a2e6b155de4dacf8e8a2cf9fed3fef74778eb1ff85622fe3b62b6468734e1c9f793ecdbb2ea6dd09f99bf3ddd16dc87f97403b876648f94ebb0aff4bfef4b17fedd33e09a3f977d25593e5c06aec1f39cbaccd797caa9ab3cafc77c7da51cd9079673c3cefba33ef4c735d9bf9271cdd47e958c24675927acf39ecbb25296d9729cafbdf29d7c2ef7367554d245ce83cbb1916b98bf7d24fd1aa46b1fad47c296f5862cdfae03f7e17bb21cbc0b5cf3f7353e76927a67ca4be9da001edb1ce92fe262702dd3915f37f0db9fb876ec6ff49e69c2b85e49f71b809e72dee746704fcee5dd948aeb4ab97e7a039025df977565fb2ce54fcf427e7bf0be5c73d1314bf9b76621bf63ea7dc938a721ab561ee43452d2a321b8cf7f1b335f5923aeebb85b837d72a45ca54f9abc9f07ae417db177651a1ddb1bea28ebdd264cdbd74fca91cf2fcd4ee731b2be4f67efb7336dff63ccafeefdb132ade55cd16d2c7dde927191731bd7816b47ee586f5df7d89501e5dee197afed4f5c9aa5ac743cbc3236671be66f677a655cceb629d9e2dffc9957b7e43465be36b5b8aee3bab0f0d9a0f75dce76ccd716cdd90e84cd7fb767beb683b876e48d9363da9b153dee4a319928d717cbf9824bd33349cac803d7c096c6c93d945767272f2d63cf2f8b6a73e32bdcfbe3cf51c2ba3b4358f72869b403f3e7b31d3cf95f06942bd3a31948f366aeac093d95b0db82e7b05e90efcfaf61d8cd99afed2baeb9bc8d4af84d95f73728ef7f1630fcfb14f9e96c2b93ac2cea5be6d5ef392d983f4fb460a9f29a5fefc8fc796247377efbc879abf68abc564cdf8f6a0dd2b415b8c77f5b327fffa6a51786b76f649f0390b0daf8c3ca916df44bc073791f0b47c6a921f3c74fb6a364fadd998179474537d9c67c1a5cd7715dc50492bb9dfbdd6469cf32fd649ce4d8ff2dcaf3bb94e7eb1486f27b39a7a08cd327bf97cf95366bf2fb8efe7856e3209fcb36ada27fb576c14e4c5b2727c3db29bd3ed5dad0583fee0ed7b626bfc9b4dcaae9d51ed12b13a7bb10bd32f539e49a2ad9f6f7e6e6d3b6fd1ff47e1f42747b0e5cf3e73abf99727c24935da62b63bcf1fa1ce9abf23a70edd8f2944fdc30a7aa75dcc319c294727761fab642a7d4f7e2dfd06e3a337f5ba1b3abcb34c9ac83ffbb9c5d99bf5cdc1584cd7fa54fb8cde09acbbb402f4fb5a78ce92fd773c9f497ebb2d2a5bf375fc09e50e292aba4bf4ce374e99f212d92f1ca03d7a0fd32558ef1679bb6e9ecc91bfbced94db1a7dd5ce6fb16ba61ee7b8012e69319c29472a51f3ad59eba027beaaad893f469f718b87674993e5f912dfdc7296302525e4e1ef3d76179e03bfe2b7da8dd0eae9d70f657c66393f2a41faa5bc0b5b43f7e9def3ddf08ae1d79fbfd8ac8537c8ee578fea472a49fa8e7c135ff95767e1db886f283a68d0c1f8baf7cbe8e6597afe4ba2199af9ef1a7b9365fc932fb39256ce953eb39708de5ab2cd349d8224ca7cde09adbd720e6cfa7193826ed360f5c837cbaafdca7976dbaa4cba72f316d3f63faabeefde97f28613d9f212cb9b64ada5611f3f7338a5cf933a604942bdbfac0cf98f83797758112765bf01cb6f3e5fb2fd6306ce99fec7a70edc83ba0a5127e53e5fd0dcafb130386dfd1fb5efa21bed81f5e8ee7a72ca7bf125e7f37bc99329fbcace829c76307305f7ecb19a03cdf8bf9c773f7529e4b7f62f7826bfe3cc8786e47254ed2d7dad3e09a3ff7d22e47fa587b015cf3b8ca3d0132af65c936c944aecd93e547867510ec15e62f9b943554dab2295bddd2e5dbd7993f9f0d62fe7c36c8e571a05c8f246dedb5ec78e40c56d2e775709fff4a9f6d1bc0b513deac6e350b2f191fb9ceefe934dfa4e3a2f61de47ab8cb6a28ef2d85f35085f35037deb3ebb8693cbb93f25d5be5bb8dca77b2fde3f5b9d99b197875f0cbcf19c6fc7592b7462fd97618cefc75d2702fdc5783859b942bd74d3e9f46c7743cdf51788e50788e70f52b9ee2f22c5eaa7cd756f96ea3f29dccff325e70bda64eaff68afcb799bf6f1d347e723da68c9ff4f1b7165c3b7acef1dabf73a628dfb555bedba87c27d73acafcf56e96f6e2c9176716407b917bb47a0379fcf98b6964a68bbfb76e326734f3b72947bbfacfede6c67bee1425dcf733c443ca953e0ed576ff98d4f739d2bfa16429fd1b3e06ae1d5d4a643ddcc1ff5d8ef467780bb89661f3dff1cc9fa7c67bf27295f033c429f95e1eb806edbcb96b02324a972e92d304c049fa5f939ca4ffc4c7c0b513af52390fd1deff5d8ef4a7b8095cf3f73ef2aea52fe7dbc13597375109ffc30c9ce47b79e01a702a91e37ebdb3939796935c07f731b03baffe9e23dbc2ef2be1c9b5901b6b18a6b71690fd1bf0f3c22c91e3fc1f2a617e6a18a6b7973247fab9be1c5c3b6934cf6bffcffb2c8d2cf94c8e594c61fe7ef317e03eff95bea99f03d7fcbdcf53f15d21cbfbfffa658b756dde3b0327a6d1498ddf34257ed3dcf8956d7265953d9946d6977e1d72f655e2f715b8cf7fa5ffcde7c03516bfaf95f86d4abd33265dd9abc64ffa14bd1c5c3bf19beff9ff9abf3e8d2cb9e7ea1bef5be95754c6ef3b709fff4adf9dcf816b2c7ede9c4ef920effa7b7f58d5e2ebfc96cb75293f28ef3e927a774aba7a5965237d915e0eaeb94e1bbdf01e4d23eb27eff747ef5be97b53b2f919dce7bf072a6ca4ff381d9b5ffcb2c5b889f7cebe75b2889f1c2fd9c90b6b364b8d8fcb6b58e64bdf941b35dfcb7252b69b7749ddcbf17c581e24cbbd5ffd72b57d1bd95fdad9933147d16d8ea25bb1a21bfcbe2178c7d163815c13e7ad7f49dbc7926b60e4bab9594016ff9deb857b17b8c6d22b5d5a786c724a3c792f816b47e78ab6aeacc5728cf14fe5bb52ff77c9fbf3bcfbb2cffe37785f3ee7bfd287e55de09abf2fd714f2f12ccfcef96df1976cf3ca79bef99e8c57fccf73c0fe1ef18e139f85759477ca59aa9fe884b550f2ef0d9e7b321239fe6fc5496e9e8e959e6e8904085b7ecfefcbb680f4757937b8c6e22bd79dc936b08caff483f98aff79cea294aee21d1edf1f957716fae3bba881125fe00f3351dfffad36bef540d8f27b185fe913f36e708dc557ead25189aff49bf98aff790ef0e729de71f45bf489f28edccb28e3abac89cf017e42138dfcdf6ae3db10842dbf87f1953e86ef06d7587ce5f94cd47929609990907944f25feac9bd135c3bef54caf6815c8b2e6562f26599b90cbc27ef2d07e9e0859f237d795e0cde91f7f9aff405ba165c3bdf1e3c5b9123bf937e305f05d7309ed297e59de09acbeb0bf4e6efe7816b38eeb85c79be1c3ce736b4c62f2723af74e576734f96f4917925b8e63a7beddf25722db35cdb0ecee84a7873a1896dd3eb91f0f6b4e71c0edef3c24f3405ef703dae529ecbf54f572bf7bd33e672d678cf5f03d7fcf7885458399eafc99cc3c0bdc3dc782ef1d6192d79d7af6bb20d25fd7dbe0eaef9efa180835c8b057c4c568b9f5c2b16347ec728f1f3da00394783b81cedfd1e09749267ed3503faca77f8efb1cc9fd78f65685e4f7e7b1c08f33897dfd2068a5cf59d1ada4c56b62bfd595e09aeebb8ee9fe17bc9f74f007ac835502af71dbd77a56fc9d7c035ff3d11c4ef44458feb153dd4f9e4f332c459da9cf45b7939b8e6f2e6bbe9b24cf68fbc753fcbd678f7d5f53f19c2cb91fe2ddf00d7520f7e5fae33c9cd4e5eda34f3d668e5489f9757826b270ecba5eede194039a781b0e4fa2e2fef25e4faafab94e7870319bae7417cdf4a7da5cfcc2bc1b5a3ef0a5977fde5dd3fa3babe8996e9f54db4023274cf5bd740df33157dcff4f495fd8b96e07e43ff3b2be5dcc5e7defdb30cd2e0f310d240f7cc1bdfce399bf9c757cf76e3b0aa5079ef1ce66f03c8f124cf075b8ef4f5b9165c43393729ef4b7f9ff72be19ca784779fffbe58cb9e2eefdc90e57bbe7b7513a28d328a95b262a789d94374307663d91f5b2dbfcc7c60b5d8ff257671317e72350f76a9d3f1ac7404684e8d9e2acea45eca0a582feda9d1ad443d20431f2afe2e76de281742dfcaa916c45dd582e0ca55387f4ac191d755cefd91e2c46c7ee875b9f3248f8d757ef957b39d626186f3c72f659a136c85536394b229cedf9542de6c47edea6f668a123f1e5bfd669223d33dbd7ba1734702ad74ae2b848693c5dfcb85a6a542fbd1cebda5e22cf145ac8c0d717e578ad0aac77d89f36f5d98533c647a1df5877863f7dda3c265320d7362c3b5ef216cf19f14d91229c2d1d77bcbcb87757a881eca49d552e21f866e21c30740467b32f205b284ef5e2fd6438c914caa4630781cabc7506fdf2eef22a7e39a2e2e7a323cb9db8818a452b8418767d60ffbf3f33975fd512b603dc4d04adb0c514b0796cbcb152de22051a85bb74e4faea88a3fa1c32f8688264788df7daf5cbc173c01ea89cacf9f00a28b35c5f9c74ae7ff0a11c42a47fc5c36d1b92a76fecd5595655eb554eac945d617a0ab57a39994c550e7e8508b9eda942d62e9333294727ad80d92b148c1ee21da462dd3982416966834e5782d279969de1c57d8678f9efd2eafab4f9746225d6a121a96325be952a651d4992073a99f2e5d1a27e3954a17fe9f9e6113c4b633e98011aca323d878cbd836d7bd66b6cd8799ba2b0cf5fcb6496b83e934c008d6d51114e33253232438c1d1f020afad583386db66cdb0a960d8aa5aecb2d101a3584f43b127a7b89d4ead868a5ac245b45e707d4cf0f686821b6082773014dc5067505b479d25f9b3c5424ab1f36e7073e2d57857b558d3db5373244f665601b3a646bab4e10877d46aa5264e733c711a63925b984a6e82496e692a796b9d418951f6e85bea35ab237959d322eb3ab2354bd7d00e5a436ea3a327f66e1f404aaffa0092fcd710e7dbf90e87e562546099f3bd6ec0293dd1365997f66d05cd8e4c370c164c238cf0b63acbe7d8db61c9ae1a7f6bdcf89b62c2db6b84970414be1d96673b68f26c22489edd5e279983ea984dedd21617bc0326782743c1cd30163b9b965fcd319577315479474ce54ea62ab7c054ee6ca8724b4ce55d4d556e8549ee622ab93596057343c8df6d30e1bb8520bc2d267c778df0bf9dff82086f8709ef1a82e6ed35c27b88b230ca5e091c71a959afa45b321e60d44214bbd5fb1fd984e66dc675ffab8f0c54f01523ba0e4e360160955c075d6af3d6640f5d0c45f15f935e2adf44ca7b26a2635fb79ac56c835b4c479dc588da625a8416e36ff3d7cc66f2754445f5d4ba5a4cb20baf97a49a1054b54653208ca6a6216066b313564814865048ec8c09ef1d82f05d30e14521949d9d74c62ada09b3498d55366927b3616c8cf3acd879bf544c11f1fb70887ab00821d50cf67f91de80f9cee2ec1ae77d85d175622c34cd3043ec8c2567bf106c65579d70de89ef9f7c3983ad34c18577c134df43a3794e40cd7375c279ab89ef2036ea01ec863119a061b246a7761a26bb63c2f7d2083f23a0f0ae98f0811ae1eb020aefa611de4334e48f8c24e7675a0332d289190f0d0e86ca70178b897bae915c0430c9f99d27b42815935ca559ac1d495f760c629aca4f744786835262cbc762b0a34d23d1d1d1976c4344c96697ce58d9d85d67f07ce07928d34c70f2d6eb2caf29c7c35f241e4d7442e0a9c9ef973bbfd5f2447d3c4fe46125dc304d09970858c2f5d008ef21baa18bb668861beefcbd4cb4a3f8bf977bc93b45849d9ae335c94adcf8da696a3651bb698d768430da5e59186d18da63e6d8132b7f476acadfbe8960e56fbe4e38b74dbef53be3c8461a23ee85091eadcb4475c483e059a500cb2a7b6bb24aa38059a510133e46239c0514de1b133e56233c687bba48279cd7aae334d5494f5e9df05dea39c2e82708a3e765d0542f415609f32e1386cc8b015dc9cccd1b7b5f66c071ce6f891364856897568bcf103c3e7db0f84cc4e2b34faa3e0a104e5f2c9c495838936b144e3f2c734cd1650e6e15b31cda8b7cedfee1c91a274886e9af0bb929f38e225463b81d73cf14ac97f0cac9bcfad5e3998787b60716cf7d75f1e433a595be9ecd12c78a82c46e4f2cbcfd74e135175c673905ec2ce75216dabc182a617cc1127fc657de2e11f61e448f01981efbebf4d81ee8315f0c2b9478156ccd35d80bd360ba4e83665a12e3bd7c5e732d06625accd069b12dd0a258a47d9541d883b0b00fd085bd35087b96684d96798bd282e6b0c1581932132b430eac511932048bdfaceccb90b1a2f5bc3c60d53e142b4366636548b14119324c171aafcae7b0eacd9f297583357f86eb84735be03bbe8d66494660924b4c258fc48094ea80d40b066414267c9e46f89e0d82091fad13ce2d93efa5356d50edad11de43cc82f15de2741d9b74ad1e7f5f35681b297d7786ef77cb6e5491c73f37c17bb574ba629d9731582975904efd0085d058ac105a908de034e5cd389d609e032a3439a063c3603960bc4e387f7fa1a6e8ec21665a6bb6308f77e6ebd59125aef39fa6d04db3686d029653176b72ea560173ea449d709ed4dc0f40b59a8b27b4aec7d191ad766aebc39c5f77168f2ff7e0ff5eecfcbd44a9bf3b8a652c4b5977e7779ef3f712d1ca2ae30908da3b5c62be90384fe4f585e23b2edbb57dfebc97f3bcbff35be0fcee14c860f7c192fe604dd2f7e4f89698a5e1240c73950ef3ec5030d71c6647b6c229d2dc02b8a3d20cee28f6e99438f7968aa7eef795426e99d0a2caf9132c392663d97ca9269b77da2658369fa2ab8bc4d2862897e8f1fed312d1d60b3ee9ba2cebda6539d32fcf4b1f3a565f4cd5250b27b7229b627d399e24d3744922168444b9b7401d320996282bb34e94554cbfaf2053f858b2ecaba32756bcec1321bd6cf6b9e9c91d9235b9d5825cf36ab14abb150ca1b69fce983935e11f4351a75c578baec60d7a7fac003b4c53807d19b0009b8e697eb846f3fa01359f81697e8446f34ddb06d3fc00acd65ba3abf5984ef534b5c64c4cf52335aa1fda3498ea0762c28fd2087f738760c267e984f3161df78f62daf79a8d093f2604e1c598f06343103e47279c37b98fd39518aae0725cf05ccc0e8fcf46701a132cc1ace4048d95dcdb2c989594ea84f3f74f64482355b882a97923751e86e9645d76e5dda7a08d545e19d9d81f28c3509f82a13ed50cf57c0cf5693ad47342431d9f3e413996b54ed764ad175b04cb5a0761c5d8192114630b30e1678620bc022b23cf322c2317ea04f3f439dbb08c5c8425e439ba32b265b0845cac13cebb28e766a3759a2e4a2526f83c43c107eb0473eb383f04eb58a213ce9b8a1764a3759a6662159688176a12f19856c112712926fc228df0b1ad83095f8609bf5823bc599b60c29763c2d76a847f1850f80acc522e09c1525662c22f0d41f82a4cf86521083f44279c0f1eaccbc6c657e18257eb04f382ed72a6a993f93288a075f252af7e2dab41c32758ed792816972b7471e10f3afa420d12d661585857eac282d3db73ab4d75d47c8af9704c8bab745ac069fe855efba458b0afb90647601a5cadd3a0118393dcfb0acb581ab06a5d83153fd7e8cab6f6c18a9f23b14c7c6d0899f8284cf3f51acd2b036a7e34a6f97521687e0ca6f9f51acd9f0da8f9b198e61b42d0fc38cc3e6fd0d9275f8c38c32bcb663a65c30caf1ceaeff50bdc7bfb89dfee6c2fe7efe1a0cc9a2b045538ffe2cb772a9d7bf345f9b2528c33968abb2501cbb4e331fd6fd4e9cf973ba534925b303a26e3d4df8bcf4ccddc895b66ab7d9c85e28d2a6f0da9db5b72e357c5dc31d355e2cb20713a4117276e2037251f281dcf9b9dffebd567ee7f79ee7fc1fa9e27eac2e446b651636475021ad94998f05b34c2eb06147e3226fc568df07a01859fa213ce41dfa633af4e59650fb7ebdcc3f92df4eeb9596535ebedbd5be4fc063198533183d98419ccedc606731a16e61d58989b8dc33c1d4bea3b432809cfd009e74d48ee2ad2a409792646ea6e8c143f91be5e5d482a18a7b3304ef786c0e96c9d705ed7ddc7aad77585fd82d575e7e884f398de9f4d22a45934722ea6f5031aad6707d4fa3c9d70be94ec4166b894ec7c9d643e95fb90ce76f874223ff539f85ac50b303c8f68f0341d180ccf8598f04775161350f84598ad3f1682ad5fac13ce93ebf16cccb12f2e782d86e4099d390644720926fc498df0b1838209bf14b3f5a74c6dfd320cf6d386b0d7613c9ed1f0b820208fcb31fb7b3604fbbb0243f29c21922b3124cfeb4c646430245761485e0801c9d598fdbd686a7fd7e824f3b2f6258694b5fc449ae065edb518fb5734ec7b8e0ac67e3d26fc558df0b501855fa713ce5b74fc98896aad614e68b0d3f571bb751d7d3b47520362c52c359c15a4cd7b3d16d1d735113d6174b0886ed009e703fd6f6493efd20cf4df80097ed350f08d589e7b2b843c77934e389f41783b1badd3cc20dc8c09e6e7f9aaab585aebb44e237c236621ef6a2ce4b38016720b26fc3d8df0517b07137e2b86e57d0d96e601b1dca613ce0b507e56aa5101ba492799bfff61366692a6b6ba1d83fd9106f6876382c1be0313fe2f8df0b5638309df8c09ff58237ce3b860c2efc452f213d394bc0b2b4d3e0da134b91b53fbdfa66adf83a9fd9f10d4be174bcacf344939657cb0a4bc0f13feb946789389c184dfaf13ce1b365f30a461c38fef0ddeb079008bc4979a48749b122c120f62c2bfd208af0c28fc219d70def8e0e7fc566bd870239924de5a2cc692d5a68ddba4294f6e53958d9d20cd9b87b14cf28d692679442799bfcfcf133629a51fc5ccec3bccccbeaf91993d8659c20f3a339b16cc121ec784ffa833b380c29fc0ccec279d99b517ef2d724cac582c634e2da50adfdc9ec4cced6753737b0a33b75f0ccded69ccdc7ec5cced7f3532b767308bf84d6311c7ec1fcc229ec584ffae11fe6440e1cf61e6f607666ebc548bc2dc9ec7cced4f53737b4127993701f82975a64d801731b5ff3655fb259d646e077c05bc6a07f74e0f66072f63c2131ae16d670613fe0a960d73124836dc2a51936cf82a16893a9a48743c3058245ec312b66ec230615fc7ec91efb637b5c73730e1f54310fea64e388f69838459c1fd16a675c310b47e1b2bf31a65a3759a22eb1d4cebc62168fd2e667f4d4cedef3d4cedad4350fb7d4cf8362108ff00b3bf6d0dedef434ceba62168fd11667fdb19dadfbf3013d9ded4443ec640ef6008fa139d605e6437d314d91feab44e53647f8af1686ecae3df5812ee689884ffc178b4d0f098322f188fcf30e12d35c287950513fe3986a49521922f30c1ad139a26aaeb500c36460ff19689f26564d2db56ff1a3549ff8bf16ba3e1373f20bf2f31e16d35c23bcd0f26fc2b8c61bba00c5da7d97c48a3660cbfc6a2d95e13cd5101a3f90d564c75302ca6bec5b4eea8d1ba4e7930adbfd309e70877d2254ed36a89c31d40cd73beac59827c8f456d674dd4fa068cda0f98f05d34c24b020aff114bed4e86a9fd13a675675d3fe2a0605aff8ca5f6aebad4debe5a6aefed6445d7894f490d53fc172c7a5d74d540c0e8fd8a09cfd508ff23a0f0ff61c277d3083f664130e1bf61c277d7087f31a0f0dfb154efaa4b75ee2d76182b152b8ff9fa7e77b4e510afd05d28be9f239e0df5561bf31d08033c5be8268ae9c56c2e5be0ed1451df0a3a91fe8746fb1ee23813bedd6dcbf91b9eacf02966f254ee494236776bb5d4d8e770b7041f90f027510f717648a1b8178d8e5d13aedb9f650e37975c156f15727f9b731cb5b9d243457273f8fc3fc48977f704cf8b516a8e79d6f813cb70799a0c774145b00cf71796e17a183647ffc604f7d4e5e476a2fc76dd88ab3c6113aa1bd8572d93b32a905e2c81d0ccd7d03c6161309a099d70ae4c2f5da4b94367be2dac4a734cb4f4475ae53c1fe08b3e2f1e1625efe67b77170933ab105bbe96799b44dc377a052cc4723040051a407b0604b4954eb83813268401833a3ae17c4550ef6c6c39cd8aa0ba1892220d92958b8221a987d94c1f9dcde4a7b199d14eb112bdbdd4c7e0f4d5c0e916104e034c783f5d57727130e10d31f2fd75e47b28e4c7fa9a0e51536f8481d943371111104c634cf89e1ae19f0414de44279c8f360d301d6dda5a2799bfbf976147671b4cf04043c1dbea04f3f99c41d9084eb351a62966da8375a6ed1eeb318be58bbdb9a902a5e67b75b7c3c21fa20b7f1b06f7ea8e627c2fe160d07e0b12f2f658c8437521b7f0858c6bc0eff2366eb09ddb3b60f96898aeab54152c1f35c3223a5c1751ee1177025b213ac44b9c08715733958c6f249dcf4a4539c61b593c8a078b0fe4564dd859529fd6ac93d41cd37b844e6fd74fba5bd6f29b66c6b12316f6485dd82d7dc6914e879a99470b4c9b513a6db8ddf8fd99bb1b6a8384d8120b71b42e44e94aa057c8ae045a615aec8d0ded482dc27225d01ad3600c6e83d55d090c175e3f1707f499df06abffc69ad67f6d31c9e34c25b7d349e65e91c667534fa5f18ad41e537982a9ca1d3095271aaadc11ebc2ec13421766274cf8a41084ef8c59fd64c3befe2e98d65342d0ba13267c6a08c23b63f637cdd4fe76d548eed1d1b94c70ff6536b8e897eed4c373d3bfafce8eb4a36bfb89d135dea5a2d5171b53eba24b773e65b47f365921cde6e85c4cf07443c1bb618267180ade1dcb0207986681ae98e499a692bb61920f3495dc1d933ccb54721e568ecd0ea11ceb81a95d6caa764f9d645e8ecdc9c6ee783e4704e7eb04f3fecedc6c04a771d9d00b035d1202e8020c47a9218e422c7fcf33ccdfbd31ce65869c8b30cef343e0dc07c3516e88a32f26f82043c1fd30ce0b0c39f7c7385784c0790f0cc742431c7b628217190a1e80715e6cc8792f8c7365089c0762380e36c431082bf9979896fc83311e5521f01882f1586ac86328267899a1e061188ee521e0188e095f1182f01158bf6fa561bf6f24667bab4c6d6f14c6e39010788cc64c64b5a189ec8d093ed450f0180cc76121e0188b093f3c04e1e330db3bc2d0f6c6635aaf0941eb0998f02343103e11137e5408c2f7c1841f1d82f049ba318d9d9ccb0477f81efd9846188733a71fd138261b2b9d80139b8c99ffb186e63f054be7e34248e7a9d8d8e9f18663a7d37406b43337a0795bc480e80ce784ac87c24e144361bb337c28ccecec717d4aecab4b629e12276593c427e2fdd8fdb036c1c9a66d82fd31c9a7984a9e8e493ed554f20c4cf269a6920fc00a80d343280066626a9f61aaf68198da6786a0f62c4cedb34cd59e8d0dfb9c6d38ec538cf566cf31eccdcec1409f1b02e8b9188ef30c7194602de8f30d5bd0a518e70b0c39cfc3385f1802e7320cc7458638e663822f36145c8e715e6bc8f9208cf32521705e80e1b8d410470526f83243c10b31ceeb0c392fc2385f1e02e7c5188e2b0c7154625a5f1982d60763c2af0a41f812ac8770b5610fa14a279877d6ae31ecd32cc534bed650e36598e0f586829763ed82eb4cdb052b30c9d79b4a5e8919dd86108c6e15a6f60da66a1f8249bed154f26a4cf24da6920fc5ecee6643bb3b0c13bcd150f0e1188b5b4c591c8199ddad2198dd1a4cf86d21083f1263b2c994c9513ac97c51e0edd924635b5cf0d15833fa0ec366f431d800ce66c3019c6331c8779a423e0e937c97a9e4e3b15c78b7612e3c0133e77b4230e713b1eafb5ec3eafb240cc77d86384ec61a77f71b36ee4ec1347ec050e35331c10f1a0a3e0d43f190218ad3318d1f36d4f80ccc961f09c196cfc4843f1a82f0b3b082e331d382e36cacdc7fdcb0dc3f072bf79f302cf7cfc5cafd270dcbfdf330c84f99423e1f93fcb4a9e40bb0bcf28c615eb91033e7674330e78bb072ff39c372ff620cc7f38638d66285dd0b8685dd2598c62f1a6a7c2926f82543c19761285e3644b10ed3f815438d2fc76cf9d5106cf90a4cf86b2108bf122b385e372d38aec2cafd370ccbfdabb172ff4dc372ff1aacdc7fcbb0dcbf1683fcb629e4f598e4774c255f87e595770df3caf59839bf1782396fc0cafdf70dcbfd1b301c1f18e2b8112bec3e342cec6ec234fec850e39b31c1ff3214bc1143f1b1218a5b308d3f31d4f8562cfb7d6a9afd6ec324ffdb54f2262cfffd2784fc773b46fa3343d27760823f3714bc19c3f1450838eec484ff3704e1776126f2a5a989dc8d55dd5f1956ddf76055f7d78655f7bd58d5fd8d61d57d1f6677df1adaddfd5861f79d6161f7006616df9b9ac58398ca3f18aafc10964d7e0c219b3c8c09ff2904e18f60b07f3685fd28a6f62f21a8fd984e389ff7fe359b944c33effdb84e30771ef5bf6c04a7711ef50486e3b710703c89a5e2efa6a9f814a6f61f21a8fd34a6f69fa66a3f83a9fd57086a3f8bd9c8df8636f21cc683e518f2781ee391c831e7f102263c2704e12f624cb63265f212a6769d10d47e19135e3704e1af60c2eb8520fc554c78fd1084bf86096f1082f0d7315369686a2a6f60921b994a7e136b5036ce316b50be8535289b6423384d83f26d9d60be647ceb6c04a75932fe0e26781b43c1ef62cdbe6db3119ca6d9f71ed6b66e9a8de0346debf7b16cb25d08d9e4034cf8f62108ff1013be4308c23fc284370b41f8bf30e1cd4310feb146788f5d9ccbc41c16854be8c96c181be33c2b164eb2f3bcfbd08fd860118274aee23ef77f957ea7cb8e3a934f2884c44e9716397ca7cbaee2cdf0b4c376b87c82256bcb1092f553ac5e68655a2ffc1b2b5a5a1b162dffc104b73114fc1906ba6d08a03fc784b70b41f817582ab6374dc5ffea248b1336b2819dc663e89798ca1d4d55fe0a23bd5308a4bfc6d4ded954ed6f30c9bb984afe1693dcc954f27718eace21a0fe1e13be6b08c27fc084770941f88f18f05c53e03f6192773395fc330664f71080fc82a9ddd554ed5fb1caa09b6165f03f4c707743c1bf6182f30c05ff8ea5608f1052f00f4c78cf1084ff8909cf0f41f85f98edf532b5bdbf31c905a692f968995672a1a9e4844e3237aade86d69783092e3214bc1526b88fa1e03a18e4bea690ebea24737bee17823dd7c384f70f41787d4cf81e21086f8001dfd31478434ced0121a8dd0813be5708c21b634c069a326982e59b4186f9666b4ce5c1a62a6f83911e1202e96d31e1434310de146332cc94c97698dac343507b7b4ced11a66aef80491e692ab919267994a9e4e698e4d1a69277c424ef6d2ab905661e6342308f9698da634dd56e85154ee30c0ba7d698e0f18682db608227180a6e8b099e6828b81d967afb98a65e7b4ce549862a77c0ac797208d6dc11e331c594c74e188fa9863c76c6549e66aaf22e18e97d4320dd0913be5f08c23b634cf63765b22ba6f6f410d4ee82a93dc354ed5cccfa0e30b4bedd3095679aaabc3b46fac0104877c584cf0a4178378cc96c5326ddb1642c364cc63c4cf01c43c13d3016734d59f4c492b0248424ccc7d42e3555bb17a6f6bc10d42ec092b1cc30190b7582792ce71b4ef1f4c640979b822ec2241f642ab90f267981a9e4be98e40a53c9fd30b35b1882d9f5c7d45e64aaf61e98e4c5a692f7c424579a4a1e80a13e3804d47b61c29784207c2026bc2a04e18330e04b4d810fc6d45e1682da4330b5979baa3d1493bcc254f2300cc8ca10800cc7d45e65aaf6084cf221a692476292579b4a1e85a13e3404d4a331b50f33557b6f4cedc343507b0c26fc8810848fc598ac3165320e53fbc810d41e8fa97d94a9da1330b58f0e41ed8998dac798aabd0fd6543dd6b0a93a0953f93853952763928f37953c05837182218ca998e0130d054fc3589c64ca625f4ce5930d55de0f137c8aa1e0fd3116a79ab2988ea97c9aa1ca3330c1a71b0a3e00637186298b9998ca671aaa7c2026f82c43c1b33016679bb2988d95f9e78450e617636a9f6baaf61c4cedf342507b2e968ce71b266309c6e302531ea598e40b4d25cfc3485f1402e9328cf4c586a4e7633cd69af228c7785c12028f8374c28543ed6c78a4d979b300037d9921e80a0cf43a53d00b31d09787007a914e7863e7f28a6c786c830b5e8c81bed210742506fa2a53d00763a0af0e01f4129df01d9ccb6bb2e151800baec2405f6b087a29067abd29e86518e8eb4200bd1c137e7d08c25760c23784207c2506fc0653e0ab7492b9b7921bb3b19155b8e04330956f3255793526f96653c9876292379a4a3e0c937c8ba9e4c37592f9fbb766938069268b8ec054becd54e53598cd6d32b4b92331956f3755f9288cf21d86948fc654de6caaf23118e53b0d291f8b552b7719562bc7612cee3665713c26f91e53c927e82473b750f76603238d5ba8133195ef3355f924cc30ee37348c9331951f3055f9142cfb3d6898fd4ec5547ec854e5d3b05cf2b0612e391d53f9115395cfc0547ed450e53331951f3355f92c4ce5c70d553e1b53f9095395cfc11a8a4f86d0503c1753fb2953b5cfd349e61e8a9ece86741a0f45e76349f88cf3a08b2238718ab8e47bf5a7b212e19fc0f565b050fc7bb4f072c077f7cf733e717d198c4ebe39dc51a354bc3189958aa7e5e2ce1296c766397f268ba7258ec465c21b01979bfa6698f32bbd0794b011ce57ee11b155deb7290f06aeef8472e13bc1ffc4d5afc089e1ac34b1e0676f2e73fe5d05429f227c3748997ea9d39cafca1d3941ecfb028cfab33aeabc04c56238d8f9d712c1c5a53857905b524d4b18779c574a5a90d85c88c5e6395d6c8a94d8a434338f8b4e5690985c84c5e4795d4cfa2b31e19e3a1633eed3a3d8d1c33c3698bc2031ba188bd10bba18755662a4c6a1ccb9bbd4f91d2bf24599f3eff969e21344cfb5989e2feaf41c8cda90abe76256e96959e5fc99e268c909a6235f93140912bf4bb0f8bda48bdfae6972bc3f258633ee49869f199c2e5f07d1f4524cd397759a0e0850364df674ce2e15fce5b879997b1916af5774f11a9895850d767428116736978bbac3dcc26a967bd661717b5517b73db22e8183a5181eab9aa4d7e5589c5ed3c56958b265e2f722345ec46085287917f872d068e7f904e7c922d106e177f4e76feb0ea30faf5cb8028be5ebba588e256c7ff1bb078b6078ac5c9f54e522e8727688f38bd9784dd2f64a2cd66f60a5bd3e6d609ac07c395a948a15c2a356b9975e99258497aa5761f17b5317bf52e256f552365178132bf35acd3c68376de788d865df824e47ab26767035c6e92d1da7a95bacf7919e9039876b300e6f67d31f80a962deead44b0b129b6bb1d8bca38bcd2834774b3f798bc5d5a21ac72eb8f420b15d8fc5f6dd6cda4be9d22e58ed1b76debc0e8bd77b585f4857ff4e15f54685d74672bd1bcada779a57bb94a4b5c1f04ae5ebb118bdaf8bd15e697b77b0b6e1f6c54bd455a2b55196a6aef4cb082f661bb0987da08bd998acdab6238517c862af4c957da809cebf878b760217b7257b54376071fe5017e7dd03b42164df6a91d7f20bab677523a6f1473a8df70c502efaf52e435aacd9b76f83c4ea262c56ffd2c56a689afea21b8b11a2445f282caf662d9354391a56cadd8cc5f1635d1c7ba329c74731e7382fc9b88e15adb2e1425f5d3d167699be118bc727589faaa6e5c4962c196ec162f9a92e963dd158aaf5f1c88cf571187df95b31edffadd3be5780f64450fd6b5a22dc86c5e03fba184c0edcbb4bd53fee37d9f6eea2ec016ec2187c964d2aa61b450b9a8a352df36ec762f079366545f5721d4fbbec4af8747dae9aa7d31d582cbfd0c572485625e264e7e53942db6261555b766c703316c3ffd67c643d532a4659dadf89c5efcb6cec34481983d7ccf47d97bbb0587e954d0b9fa295957dac6b5a02dd8dc5f96b5d9cf7dbc271a6a6710f46e31b1d8d115996c7a3451d6857997c2f16d36f75311d9e558935ce79b94294c5725c18efa5475532df87c5f3bb6c7a4e6abb60a88869f5d483bda16cee873b8b733f16c7efb3a97daac731d5d7e07af2f7b875f1f15c55db29cebf2bc5fdec6257b3d1bf07b0f8fd80f5e9d3c5cf1df14b7d907dad136eaa3d88c5ea475dac66846c9958fe0bfa7eb84c1ec298fc54f3f9e3616216a2dc796bcb96440f6371fb5917b742a61febc54e7981fd16f894dbc532edfc4acd62f108168b5fd2cfa566178b9acd3dd42c8420b17e148bf5afba58cf0c29edaa0c62170d97c7302effc366a182af28b26734fc712cb6bf61ad4313dbcf660c2288fc20317d028be9efd86ac3e0f62e47d24b44d95ce9bd353ee4f98027b198fc818d11d53c2695e0f968cd8c5bcd4adca7b018fca98b418f1ac520fd4c61cd73ccd398ee7f61751e1eaee9185dcd63f10c168bbfb3597b3b4eb4a5e77b5af3ab955bac0df22c1613b65516edabf4e9116c263dfd2c6d4dda8ecf61714be8e2a6ce3cd38c648453863d8fc52c4717b33121b53e8638bfe94b31ca1ae8052cce5be9e23c32ada506197354ed328a95052f6271ada38bab3a46a16f456533e61465dbe9252c8e7575711c90b461dd2a347cdde424d1767447a1fc7533bf3bd75bb1567d3f4bcde3f53216af7ad1c46b8e130b1e6ed8fdbc57b078d5d7c54b1d09c5d78c66b6caa847fd5fc562da4017d37c967e1cc62d47f1d1a5f067825fc3f46fa8d37f7a5a0b345bdf29eb909aaf830d87c8eb1891463a223390fa32c8aaf620b5e0965903ff06c6a431d63a0ac624b56b69b118f7aff0c59cb2a5f02616b326ba98ed1f38666ebb76cba477fa76707de74f22c11d160d17b992af8e9c28bee05755ac4727defaed998c715e3227e7f9727dea3e0f7ba1a30fb7b129c93c9b3a3d1a93b0b5839a1f1227feeb92e0c9b4d49b1a48cc534a4cf7cb0a21393573cfd7ac8e14a58b5b07ce75aec78a9181a5d5cee5c662a12bbdf240f9056397394ef2e46ebe4b75aeb00b5e63cd716cadbe172329cb21dd9993ae6d31dd86a76a072f55737af00d7389ae35b4a6cc5a6cbb95db68d2d9508b6a6461bda1d3dd1520479312dcd914cf5c3d91ce4e6af02363c830bfea42ee2e04c899b18ce2a68226814e5c2b616eee26b8255ef3f5c762a71d5637a7274f91a694d8b613d852d6b6c82bd9170b91a3bd722d0ec8f6ac9b42b61d25b26d05326ed0d0bef6f68ae5d29858d8caf214aeed2971b5f465cc4942c862d1aaf4d7a4aeb59538572b630170cff129803bd0976c8bc544896ca254b1f96211867fbb611cb0ad3d3885ad1925b6b63ebb534bb8a94e2825cc5d03314ab4b54b442dced1f68a05c851b92990cd29416ee303e92a01b36e2c600d4cc1da911ed604a572189eb4be38c05a3b2f05ab057de32353d51007644f8e49216b6967a9961f0b900f7648816c45df8a932079079eab50e675d3e262770d9aa570b5a6c4b535d3357af94a8e793169781c303f85aa0d757b4d0e96a91da9d4d07f5cfa090f826e55dbe83af04385adf175a9e56244256e15c2a6d214b67694d8ea096c5502d5929864c5b6fd5270da4757c8bbe3bceef8f502319b160f5c574d4fe1ea6067e3a2201620eb744a81ec187d2f80d796c5a2791b07588796a560ed449d49657d19df7af250504fee1c5d3de996697e6c72ae210ed84681aa60972d393f10afc1c71fe7a4b0758aae061d19d31af4800353b83a53e26a2c700d174dd66522f8384da1f089648969574a4cdb33d99b1c2682c65645c501da7e07a5a075a1ef82c3d1b2b88d56543448a1caa544d58ca5462bdc0e38bef22e0ee03e599002b71b25b826029c7e7b591c402d9d9502b57b749322d59b137180f52880d5358ab6577ead18dac905d323dda2c316f726eb2925296cdde91b1778d6942fc6015a33b10ea87e5d45b8ba1abbe6ebd08291c657ccf17ec270c7122bc55d2eaf84292be8ba38af58a7791e5c01979ba6fd9e9be552a9dc2cc6337203cc11e46668f7e5663193956b346d68f27581d1d7bd9cafd5f1eddc000320b919d72ee46639079d5ba3654c6adae806a0d577745decdcb4ed323596d54bbcdcaccb44956eba759499df8524b2afcc54b9e9da0baadcf4ef665a9c81bd911ab8cdcd30119a9bc5eac0dcacbbbfb9813a329245362bc5520bcbf50bc27b76721ef5f87fbee6bb275ff3dd934338dfa3e0b65ef2295b2fed3d7b7697f82f62152c7bd7dbb35891aa4fdb6afa4cf28a8d72119e6cbde8346be86bdf946713d99ab471ee4da41a86bda258890ad1e27b6f66b1bed5a7b5c2c3d99c0ae7909c14ce029b70f68b25cec90067a14d38f36389733ac8ecbd6dc2d92b96388f04388b6cc259104b9cb7019c7d6cc259184b9c9f029c7d6dc2d93b9638ff0638fbd984b32896389b839abdbf4d38fbc412670f80738f287096a140a1fa3cb313f68a9a50e1fc96a570ee6913cec258e27c16e01c6013cea258e2cc0155d15e36e1cc8f25ce2a609d036dc259104b9cb7039c836cc2d92b96382f04380753e2dc314343c99fd17bd3a16c4d85721f506e0eb10565412c51be04500eb50565af58a2bc10a01c660bcadeb144d90bf48286db82b2309628ff005639c2169445b144390f58e5484a94cd3d947d9cff4b93ce045373fbfc59a558c9c13f881fc8a341536854145bf1f09625765667b57dfee1616d4ad62c02584747b59d855b6199b76e24029b5c4505ef0c006f6f4a784d01bcf25a93a50f06f8c644e1eda40ff31f241011c0be54003f0600c76ec97a1a8a232d07eb53a11c019a3ce3a8f712553902f8a15ffe557825ce7d3270db5081eb006c707c14fb3ef2bd0a24b2ecbb9c0a5d254037817e53d62cf18a7be81c76d41c61d65d4d85713ac038911263270f6385f3122f01b902a9859deed2e0f9a25db820c33c63cf18ce321e0a7a32fb44b5c1ab7664f4a9c0422751a26b9121a3fbebe942e74ffc6aea56a0a69e6c134cc2e1093298ad01cc2936c1ace6093406305b0098536d8249b8a8850c664b00739a4d3009eb6e3298cd01cc7d6d8219c7aee28e00e67e94305b838650e60d70b3bc166935770131685bde061a48fb53226dc7fc4d78be7f6725f38f9363131084199f6c88ed0760abd3b764dfa8b456f78d8e047da3195b7220ce7fe00d214ab231f55500e501d428f956ce0ae795159a6d9b534477935762f398c641460cac724750aace8c62e7a4bfa2aabee73b5504f0ddb811545864e5eae500ed81510cdde5fba675e149ce110c8c9035a5e6028cb3b6eca42e1418d1a46e1e15d6a100eb6c6aa7557232c33d7d39d5908a5fa66e0bb0154731c2d9abd68c70d601edcc39d4b576a50876b9e2aa83572ec5424c29ee3a2d0656b833b0c2b951b425b3ebabc771d8a33b4059428992bbf398ef73a1c3ab9032ca514cb215410d00b4d22d012d8ecba8ea0368f3a270b1c6db830bbdc08b459917f7b6e05f006159146dc1a02d41d215e6646dc1fb41cd3cdf46aca4db49c8b0ce0758cba31804cebc441a4225acadc956122d02233f07d9b42bbc2fe5de31b2d19f1100e7029b70f68b25ce0300ce0a9b7092eebb25c3390b949f0b6dc249ba51940ce75900e7229b70926e6326c3f908c0b9d8269ca42e20c8707e0d7056da8493d4410919ce06a02a3ad8269ca41e35c870b6033897d884b34f2c7116019c5551ec78944b0e0eaa656b373e03a5e6525b76e1e6538e6992a11c0f502eb30565412c513e05502eb70565af58a23c18a05c610bcadeb144d901543a2b6d4149ba8a9d0ce5e7c02a57d982b2289628c701ab3cc44e9f05843b80c826db4e6029acabedd9f6dc2f86936e2781cc7e28f54a21ff646f046b34c8a62aea000b3c2c0a0b947d9cf2b44d73c2cc4c56468e0165e4e1d428e55ab5dab972a80db0ca23a2d8e593adf345c29291ccf5e2fe00e61a9b60f68d21ccc900e69136c1245c7a400673248079944d3009ab1f3298c300cca36d82d9278630c70198c7d804338ebe7f470198c7da0493707d2619ccdd01cce36c824938314106733700f3789b6012fa392083d913c03cc1269884036e6430bb0298276e493f07b56153732e8079924d30092b2032985703982753efaad00f7390412ba082d611403bc50e077984a5229983bc9b01c653a3d89cc2f77fd7aecd29f900e16951ac11ea296aea7447d9c7d9dfcb7080f3744a9cad983a7e9ed9cf0b61f54236f4fb0a98c739c336a0715c7c7520007a262550beddd23f3146e805986c4ab62ec8d06745ef6a64846787a37c204733e8293daeae460e0268cfb6673f781cbd5d0e0028cf8976dab6a4965538db8069db73a35d3850956c10c5afe1d30458e07994d876512cb0029df1ae7d0317c5c036cf8fa23282036a533ddb5ce534721779836deeb282854ea88bc5d52251b6128e569653a13d06348b2e88a21f94fd446e1c077fff0b8a830b6dc249ea33980ce76300e74536e1243da69d0ce76f00e7c536e1cc8f25ce128073ad4d380b6289f37a80f3129b70f68a25ceb301ce4ba94790783368a2f33717325934ea53639bc5820a7f6392506d99739fb0a9df3d4104f40f00f4324aa0f264bd02a52d1ac1783bd994c54d00de3a4a786d58b64d78bf6b65c22c7e229545be031aef97db089570728d0ceadb00ea153642251c5d2283ba2f807aa58d50098745c8a04e0350af8a6a0e33f5cbebf9a5ca928438cf613e0faaa8aba96788f834c61c87409900584687ab2d15ae1600d735f66cda235c194c368db10c64e46ba95b96722d11f4e32f5f209ca92473dcd81ed8e17a4a785d997f041e1e3c5ce55c4f73d80c75840e6363d810e74995f3c4bd07510f76be2b8fcab5638b1c22e81f038bbd8e12ba3c28bb50599a10ef83b25f07367bfd965c89e92f3b493d0f92959e8702981b6c8249b8e3870ce66100e60d36c18ce3c9a6f301cc1b6d8219c7b51eab01cc9b6c8219c7934d0f00306fb609661c4f369d07606eb409661c8ff8980860de6213cc389e6c3a09c0bcd52698843e0fc8601e0e60de6613cc38fa293a02c0dc4409533a152d62f0bc3dff4ae23877258f05206f8f6256920ffe4aa911c1239b95dc17c0bb230a2bec5d4badf048007273148ef1e079cf2b8093a7dab569e57930cc762725d68eacfa187b90f14c52bc7dc96a74b0aef82e4abc5b7b7879c0f3045c299b6f24200357970a1c03d9fd6e4a70f2b0247f767747cffd59dd7fb0171952b20337cf03b6780f25d2868cf9a62edc33fae297793b011bbc977a49016f88573f519caf673bd8e1522a84fbaf484f182783ba35a870ee8b625ea7a056cdebbc006cf2fe28da93f260f6b9ce1f7954b43c923dce6b31ce03201fa004294f6ed6d7cc84f3e18da8d0e500740f46314ce15f15e42a035b8871deab7b1180f9501430b35be4d23b960368a78126cec336c18ce300da1900e62336c18ce312822a00f3519b60c67109c1b100e66336c18ce312820500e6e336c18ce31282c500e61336c18ce31282b900e69336c18ce312823200f3299b60c67109c14c00f3699b60c67109c18100e63351ccec6403d33fd84b587a92ad5abf0c0cb43d6b2356d2756d6458f706589fdb92beb5e2ef149c2394289fb7c7b7561c8f441a06cad017ecf55f4468a564fe8bda810cff62147b20b17254f5b3d537965eadf70496fa924d38fbc512e74480f3659b70922e6725c3b91fc8ecafd884b3572c71ae06385fb50967412c71ae07385fb30967612c71be0e70be6e134ed27e3c19ce5f00ce376cc259144b9c3b809afd4d9b70f68925cedd00ceb76cf2fd463a6b44d677ff92a570be6d13cec258e27c1ce07cc7269c45b1c4f927c0f9ae4d3849779993e12c0738dfb30967412c716e0438dfb70967af58e23c17e0fc604bba89f26774c2853564c3c8734013fe435b5016c412e56b00e547b6a0ec154b949b00ca7fd9829274e51c19ca01a017f4b12d280b6389b22e40f9892d288b6289722140f969144b15f00611f4d90a172b102ef9223b61ad0c348cfe4d897527a6dba73149085b2cf6a2fbf7f3aafbd2e3ba87e86e00f83fd12e6048d7f28ce3e160db8222e0b3288a00785aaa3c5780ab5dbb4e4d1d012cf4f32d59494171a4a529d932c5c9a015fa45146b3ef39dfffdc7d8f94bcd386f635d09ecf2bfd47e11f841762bd858e6ba45a960c398f48c1dbf0cdd1280fb322a673c111f1142e601610380f715253c3ed65529825dcec639375782ac1bbfccba0bc0f63525b6dd95660e742201779dd77ebf3185a039f40db5978443bc359ac3859a1cdd1421a24c3490089d4c909d1cb03db0d86fb7e4da77ffdc79443ed90ba8b02e0156f9dd966c4d467606d02a2a94c70094df4795c1c70a3b5c2e08c43b83ef0032f80f51751753bf4305d0a5ce4b5c5055d4ce28c85a97ff02587fa46e205531f79890a1ce4ddeaa9ccbdc4d04f16b20b503d87e8ac2a711b7c22a617f5c50449d4132ab7b11e0fb9912df762ce512aa52c9b21100246b2d5e0600feb225f7a4f94779e2b8e7bc1f40f96b54be8de438e4f0a4df565ec14877a3f1f56dd419c0fc5f1419bba89665ec0f00c0df2801b662fe9ef75c96d9dd2d61f626b3c8cbc120eeefb601251c152703fa0400fa876d40e3e890f90800f44fdb80c67166f10c00f42fdb80c671aff9323074f1b76d40099d4691013d07006575226826f5ae65cda4a740332941095077f67336ab87089b4a64ab87fa817233c746a8715c92350040ddca46a8844d2632a8f9006a1d1ba112369bc8a0f60650ebda0895d00b2c19d47200b59e8d5009570f93415d08a0d6b7112a61239f0c6a3180dac046a8840d7d32a8a5006a431ba112fa7c2783fa1880da88122a3fc861a158cc05a77b5323f5f1eb78f23491e81a53a20beeda8cd0613ed93ce658d08f6f6213ce7eb1c4391fe0dcda269ca4e7a192e15c05cac96d6cc2d92b9638af0438b7b50967412c713e077036b50967612c71fe08706e67134ed2a370c870360555d1f636e12c8a25cece00e70e36e1ec134b9cfd01ce6694385b64c009c5f17a3d8e4788fd0f949ccd6d8219c723c47e033077b409661c8f10fb3780d9c22698713c42ec5700b3a54d30e37884d81d00662b9b60c6f108b1f700ccd636c18ce372ee5b00cc3636c18ca30784db01ccb636c18ce31162370198ed6c8219c723c46e0630db53c2acf91162848d24b2b3aede05583bd88895d4cb2619d60a80b52325d60e1aacfac39a467a9ff8375613565213a8e05e04e0ee64335cc2e61419dc1301dc9d6d864b588991c1ad027077b1192e61738b0cee2400b793cd7009fbff64703700b89d29e19a9d3e48381a4076fae03500edae9468b9a3b4d2e4fee3948bb4b1ce27848ed2c83c84f0d55a125c179be698fa526671b239a6a1608e29d7269cfd6289731ac0b99b4d38490f2821c339039492bbdb8493743c9f0ce7b10067579b70929ef74286f32e80b39b4d3849cfca22c3f905c0d9dd269ca427b991e164a02acab30927e9d16364387704387bd884b34f2c71e6039c3d2971eea2c1996dd7120e49132ed3e1875393407e1394a8f971804cb8b08c0cf23d0072af3840261c432583dc13402e880364c2b15432c8bb02c88571804c388f4506793680dc3b0e9009e7b3c8201700c84571804c38844d06f96800b94f1c2013b693c920cf0590fbc60132e1c20d32c85703c8fde2009970993b19e47300e4fe9490831de71b474f7d1301ca3d6c41493a864b86f20580724f5b5092ce2e90a13c01a01c600b4ad2b15b32943dc1e8d85eb6a0249d552043f91db0ca81b6a0241d02a73b451e58e5204a94f0388c45decd2a16913753b2e5c1e7b014bec194f86a7e1a721c7def9d06b00e89a2f12edd16f397f9e7958c2f4273cfa99bea28c69becf27788f3213feb73b9f31ef727b58476d48a6cd5d5dda0141d1a07c884a3566490af029087c50132e14c0219e4b301e4e171804c38934006f9280079842d8d2e52f75e648dae8300ca91b6a024f5454586f2038072942d28491d8090a17c08a01c6d0b4a521f54642807825ed5deb6a024f58e4686b2114039c61694a4aebcc850ae0028c74681722ed31f3d18d91635b223810f612994e328516eefa1e456375fac0e2c11eb04233b08866cb7540540383e0a6b948df6f2b4ed49c2e112b28cbd1c64ec095bb28c84e248333699778a9d4123682225cace8a55facf7872bb9293d93036c6e940163ba24abd7bd09ff960e7ab725ad064e740fd1780de278a1234bfd695a07340093a891261b30cf5b98c29a925aea6c2b81fc0389912a3f4eee33f9f7e24e30706477c2a3d59b67e13c09cb225aba2c87c4c90b531d7805a7d6a14d99bdbe342f1d958562a3e5eea9498119592648da3ab80454edbb253745060440bcbc9663efb03acfb52626dee612d74fe4f393d182deaf152b632f6f6b90a80dc8f12643be66f71160b0bf46775ac5f14c7d3997f062dccfdb7e47087bf5714470fbc03818d4e8faa89e46facd79e0c3f1bc09c4109b38173c15fe62b918779ab8ec97091ed2a6d04701d1045fd9da979eeb744e2863a9915be0fb0cea4c42a177ef5f11aebb52313bf07f01d48896f5b961abe90ebe6228247e71d1fc09b45094ffa20934d9e54fb7128cb7c3e7d1c1b3dbb8046cfec284acba07d1dd275f064bd9d8d006bb18d584937bd90612d0358e75062950e38f0bef9545fd6ef4d3962d4840ae77f40b93ad7269c85b1c4f900c0596213ce3eb1c4d91864f6529b7016c512e7afc03ae7d984333f963867029c6536e12c8825ce6b01cef936e1243d34830ce75100677914383198d53de4128e67928d298d04536b07d984b35f2c7196009c0b6cc2497ae60819cee5a0a15461134ed29371c8709e07702eb40967412c713e09702eb20967612c717e03702eb60967ef58e26c0caaa24a9b7016c512674780f3609b70f68925ce3e00e7124a9c5d58f52509feeda97c0264a1f387ff9b3ba95a26440e4f4e904c11d42258ca3d820a760f96825d45093bd88655c2ee27d9acd25850492db50525e9c00819ca4701ca65b6a0241d1421435909502eb70525e9cc1119ca16a0625a610b4ad2592332941f01ab5c690b4ad2290e3294a38055aea2445973ef4a844e7ec9bc2b9d0a1a46876c490b85e2480f0a205bc9743cc8ecab2951ca65603dc52aa60a2124a26560641b5ca6013b3c94129e5c559cdd02ed02ca3dc06496d81458e26136c18ce37af7ed00ccc36d8249b8c88b0c663d00f3089b6012d6dd64301b02986b6c8249e89c8f0ce6dfa0023ad2269884ee24c9602680651e6513cc38baa1f81958e6d136c124ec4692c1fc1dc03cc6269871ecf16c0fb2f9b136c124f4c84506b31980791c254cbec59f6384fbd8f676ee7001a58e42f03e194632a7133f820c7e7c14e344700b7559f2716df385741fb0ce1328b1eec4aa8f13b9fb2ab9bbdc458ea5f2d9c9cab4eb3a090193adeadc0ad8ed89d4a3479522d8e56ca8b7b1ba8c95825d70f11b1cde09c03b298a51ccec2aa238f6d0f704284f8e0265ca155f49da59c9f859e52e60cae2144a94c177b4113690c84ac89f80659e6a134e5267ba64385f05384fb30927a9435d329c0d4003e9749b7092bac527c3b91c58e71936e124ed5c92e1bc17e03cd3269ca4eef1c970ae0338cfa2c4299d564098d91e284ada682273643a1594a36747d17fcf664182dfbb02a1c59279573819603d8712ab74d157c06aa78bbe1520eb9f4b09b20dcbce05556ac489dc011559a7f36d00f53c9baaa7de94652859f5f419c079be4d380b6389f34180f3029b70f68925ce1d405574a14d388b6289f37fc03a2fb209677e2c711e08705e6c134ed265356438d7039c6b6dc2d92b96388f01382f89a2f599f296c87b40ae90da36b77928a8902e8da26f94cde943713c54ec7700f2325b40122eac2103f90900b9ce169071dc35d40980bcdc169071f425db1180bcc21690844b63c940ae0120afb405641c67d7a7009057d90292701b0119c82b00c8ab6d0149b874860ce49900e435b68024dc724506f25500f25a5b40c6f130d0cd00e47a4a90c1ce558d63bddd152ce6ba2e0a94d9cc4b92563864fdeda5c02aafa74429d712fba7d02609618bc5dc249c48e38b61f9a6fe05ac542c45249f4e23732d75294b01de40097807e7a2d87954e1bcb2820d7338548a17e73a77b948f962550c21b602106f8862a82de84284382e431802b2fe8d3642251c2d22833a1040bdc946a884f53d19d44200f5661ba112f6d9c9a0ee06a06eb4112ae1182719d45c00f5161ba1c6f148db2e00eaad364225ecd79341dd1340bdcd46a8847d7c32a87b00a89b6c844ad8452583da1740bddd46a8713ce1ad0f807a07255479cc682f569b8e19bd8ba5f06d8e62040a5f4a13f7d9ccb300ca3b2951c2135b61268fc00e9753c1bb01c0bb8b12def6ce85ffe0efa98ee4126f6c692c73b71754c4d0feb60608efa644d89af9c7e5f9dea0155e45e2cfd211f582c8acf25950b9dc4389b455861abbfab9433d2987eac8c63f8f03131ef7da069470988e0ce8d100e87db60125ccf264402b01d0fb6d034ad82c22035a01803e601b50c2416432a02b01d0076d034a38804c06742900fa906d4009073ac880ae06401fb60d28e1200719d04300d0476c031ac773b28e00401fb50d28e1803119d0c300d0c7a21847e2af64769616479f9d43580ae5e394285b64b04d3fcac2587a939d0eecf2099b60c6d1326700984fda04338ee769ec0b603e6513cc389ea7b11f80f9b44d30e3e8ad730a80f98c4d30e3b82e792a80f9ac4d30e3789e460180f99c4d30e3789ec63e00e6f336c18ce376ff5c00f3059b60c6f13c8d3c00f3454a983575d7477a9c2dd95299b56036f3251bb1929e5d4d867534c0fa7214431fd939378fe3aee1bd41c67f8512a5990b54c21e12990bd4b78095be4a89b68362a57cf3566a379c3c0ea2762dfdfa1780fb1a255ce9902adbe1e4beb19c901b048a81d76dc2d92f963827019c6fd88493d4991f19cefd41667fd3269ca4dee7c8701e0e70be65134e52df8864386f0538dfb60927e9881319ce3700ce776cc249ea449a0ce75f00e7bb36e12475d34b86b319a8d9dfb30927a91369329cdd00cef72971e6b2203e44063378d641edf12872274be1fe208af128d9259d0b4e284c6fc7715c703b0b58f18751140ad99f7b40387042e61df97b60a51fd9849374a69e0ce74b00e7bf6cc259144b9c754183ea639b70e6c712e752609d9fd884b3209638ef00383fb50967af58e25c0b70fe3b8a99260ca63fa3c7d189e501a0dcfc8f2d280b6289f26580f2335b50f68a25caeb01cacf6d41d93b9628fb815ed017b6a0245da94c86f24f6095ffb50565512c519603abfc9212a5f411c2039e27404ad98bbc57e2b72c2c019a3f5f45315e84b72627381f1dc4f830dcd2a8bcd235a5c23a1e60fd9a12eb762ce54109ae0a89c887525f2a809b00c06fa200985fcb005e01007e1b4505939d47f938ae446a082a98ef2851ca530eb2eb22c60f641e68f47c6f0bc8385ae44e00e40fb6808ce361114500e48fb6808ce3214fbd00c89f6c0119c7e5da7b01903fdb02328e873cf507207fb105641c0f791a0640fe6a0bc8380e540c0620ff670bc8381e5f3b0a80fccd1690713cbe763800f9fb961c8584e2481b40640369e300ca3fa218b028ac6503168fb014c03f2901ca796dff42415799e1629d1a7f8dab1fc142403237bb5300cebf28717217c9c5ce0b73bd80f97eb44542045ff44706ae2d15b8e600dcdf94e0b8d76c8e0a2e4be5beb2e73962e0bdf865e56f0042563782f303f2596d3a3fe01e802f41894f753a5e21cabd3247c8fc5a3660561f0ce1e65022cdd4d081935ca44366aba8509e04506e458952ce18ca7ada3d9a61a4a88f61f938da97f189eb6b320bfd1064fa3a5158e85c968db3c738ba3ae90550d6a54419cc6f4c7e2c9d3d5e07fa35f56c821947678f370098f56d821947678f9702980d6c821947678feb00cc8636c18ca3b3c78b01cc4636c18ca3b3c74b00ccc636c18ce328e5e90066139b60c6d1d9e30500e6d636c18ca3b3c75300cc6d6c8219c71ed0a900e6b651f4d1b381e977f618c7137c1f04589bda8895b4214f867501c0ba1d25d6c68c4f552c733e5a9cf441582c86e2c8a0917924e0d38012daf694d0ccdc3a1236dfc9dc3a9e0bec71074ab4c13d0fc6f1e4aae160c0b8994d38fbc512e7fe0067739b7092762fc970ce04997d479b70f68a25cee300ce1636e12c8825ce0700ce9636e1243d38840ce79700672b9b70f68e25ce3aa02a6a6d13cea258e26c0970b6b109679f58e2ec0d70b6a5c429f785f3850a722778446b90c846903e622978eda25ce5d11359e531cdf91717106ff78cef02acedb7e43a24b8a08b74f49d6cc1cc04509777b00565412c513e035076b40565af58a25c0950ee640bcadeb144b92ba8bf77b60525e9b1746428bf0256b98b2d288b62897236b0ca4e9428b7070d23d7b57289689247b6d3876c7c7d6fd008ea1c45db32b8cf21c2255c643e87ce045877b52593932e7a25cbe4f34079d9c5169405b144f93e40996b0bca5eb144792740b99b2d287bc712e55ea016dfdd169485b144590fa0ec6a0bcaa258a23c18a0ec468952fa35e0a84ac5d9285cd5d1acb6eca02c064da1ee5180ccafa52067019079518074877fe1c02f5f5524cf378deff6be3700c81e519492d9b9638ca387ac09a094ec19854df6aba5997b01b0c97c4a90cd58fa2da732a6a41ba2575361bc1560ec15c5ca75ff54d978874785f3a77694935b813e4e0125ccad1903a09639bf8bbc39c6658cd09137d9b6fc6d01b8c2287c6e14b1dae473e31d90897bdbb3fd3e8efb72f702288ba26dea94a469ecc4d16dc9f72053f789624550f6c70e12e2243bebe91360997d6dc259184b9cf7019cfd6cc2d92796381b81ccdedf269c45b1c4f90bb0ce3d6cc249ba3f970ce70c80734f9b7016c412e79500e7009b70f68a25ce3500e75e9438790cf80e472e80abc977410e63ee8e47326c64cb511b036c036d99bb89e721316340ed3dc81694a4652319ca8701cac1b6a0242d17c9502e022887d88292b4f34886723b30ed30d41694a41d473a5f97c02a87d98292b4974377a604b0cae151b881f04f3e7085972777e6140be170f236ce7b751e068da3115bd24afd43c271f42e7818c8f023a39869ece99bb2958fe3be296f0cb0c851516476ee08bc9cf165207a8f2f23bd0ffc5ead09cbd10954688b00dad1512cebe755ce4226972b95d502ebfc1c20dc3b8a79f0eca6d0485d8d91c17c0ec01c6313cc38563f5f0098636d821947e7b60f0198e36c821947e7b64f0098e36d821947e7b6a70098136c821947e7b6d70198136d821947e7b6c70198fbd804338ece6d8f073027d904338ec77b7c05604eb609661c8ff7f80ec09c4209b323ab3e6234cde131d411348c8d61439c17ab9c17dd7b70406eb0a34139233dd787ec58b9a3c058e7544abc6d986eac739210b6588c2ad59e732217039b9d1695972c3ec851c6aaa21af220f35c3d16c0db378a0c2f97ba9688613979fc6b6a7c132f51e3d86cea0e32fc7ed14f6e4c12f9ae764e6e3c092c77ff28b60bf466b569bbc05b00df74faaa6878722a63284bedf25920300e112eec1778224738bfa58ea8921842dd16409d61cf1120a413c36465e759a0ec3cc0c6b32a488745c86afc1bc14ce64c1bb1923a7324c35a02b01e68cf9ea1383a28db1d64fc5936ad2c26f51443b6b2f8075029cdb60927a9b718329c2f039cc536e124f5184386b33e2837e7d88493d4ef1b19ce65c03ae7da8493d4f71b19cecd0067894d3849c7eac9705e02709646b18aceef1eaab6aca25b0830ce8b62c4b397d2908ff3c0c78d005e99bdc7ce114e6f90b9c5ed00eaf2f9361dffd1977200846c84730fd00f2ab70967bf58e21c0f701e64134ed2ed8264384782ccbec0269ca40b6cc8701e027056d8849374072619ce6b01ce8536e124ddef4686f3458073914d3849776292e1fc09e05c6c134ed29922329cdb839abdd2269ca46e7cc8707601380fb671868874f0836c86e8208075898d5849473cc9b02e0665691525d656cc3ff1963a28b176ad59fa0f00bad4a6314fd22366c9c63cbf66299ccb6cc2497a003219ce6700cee536e1243db1970c2703997d854d38493dbb93e15c04ac73a54d38490f8f27c3790bc0b9ca269ca47b35c9705e00701e12c5b903d8561988328ec7dc9c0c40aeb60524e18c1119c83c00f2505b40c6d18b521700f2305b40c671f161210079b82d2009f7b293812c00208fb005642c4f0b0220d7d80292d0ef0719c8de00e491b68024f4464306f22400f2285b4012fa48220379220079b49de74813563d64e7489702acc76cc96d58d5d721c56f36a80718213ad6269884fe15c8600e02308fb309661ce729db0098c7db0493b0274e06b32d8079824d30092b203298ed01cc136d8249d8232783d919c03cc92698847d203298bb039827db0493b0674e06b32b80798a4d3009fb426430bb0198a7da0493b0874e06b33b80799a3d8775c7711cb31358b675ba3d4ef4e3e8787709b0ca33a2d8b796cf6625a546b4e98fec90ee252c05ef4c6a78558e8045ce4b43d97c510a72efee439974dc13bf4cdc1ac03bcb6ebf86846524995fc353401979761403c2fed331b8c2b5c32bd76860a7e74431202cfdc5e58bbf878a71f6a5ce4be562bcbdb6f88afb14603d97126b6ba539c4f7f3aef0c6d3fdb5391c63271c7c23f3baf938a8cbcf8b626996dfb3e1486189639dcfb8e7385e3145e2c494cc425f03167a7ed4bbd2ddca68aaa30ecffef27788f33aaffd973bef72c04b682db52d15da1340e57441149553df5a5a399d0e6cf4426aef1d4bc4a7aeaf62580df1f5108b9c8c5f2a2c338e47d63603182fa2c4b81d28392b959a3c023b246b6d5e0c005e1c458f1c5b7ee0ef91c7f18c8c3d00cab59428db31f53cb6ec2b1dc2895eb24ae71500f6125bc1122e472003fb34007ba9ad60098b0232b08301d8cb6c054b38384206b62f00bbce56b0844b16c8c0f601602fb7156c1c7b4cdd00d82b6c054b382d4706f65100f64a5bc1124e1e9381bd1f80bdca56b0844b1cc8c05e03c05e6d2b58c2b95032b0e703b0d7500f49737013d80a311ccd875038e24a713accc10e9752217c3ce343d5a9b7e2372eb00d1892be360a4f20d9af07cd8fe59ad013c1c8e97adb80c671c5f2f100e875b6018de3dad05301d0eb6d031ac795cb2703a01b6c031ac735a26702a037d806348e2b984f07406fb40d681cd78a9e0b80de641bd038ae643e1b00bd39ba453cd934f2e3bc44a20968de6fb467da2f8e67660f622994b750a2dcdab970579096888cbd041c045945078e6c67713d00ee569b3ccdf68de5dee2d1a0a4bccd269cfd6289b314e0dc64134e52cfb2643857800ae7769b7092fa3f26c3793ec079874d38498f2623c3f934c0b9d9269ca4c73a92e1fc16e0bcd3269ca4878e92e1dc1a544577d98493f4944c329c3b039c77db84b34f2c71f60538efa1c4c92ff8cbfcccb7f8616ac85298eeb5e7387bd2fa9aaccfdd1ed8dc7d36c1245c5e4b06732700f37e9b60128e5792c16c03603e60134cc2d17432986d01cc076d8219478701ad00cc876c824938134906b33580f9b04d3009e7c9c9606e05603e6213cc38ee426a02603e6a13cc381edf9400301fb30926e10a3832983900e6e3369ed9467ad82dd9996da781c1b6276cc44ababc900ceb5081b57e5d45f8886ac2878a311c3e8a3357e8efce73e709af0aeef28172e7491e1bcbcac557b31d20339c3fc1d262a6f347773f215c0c0d672b59a5b8cbe59508d90b9da75cb32ad6931f68f124378d469e69e426b671fe5ee824d04adf86701e17371d72138d9d378a852f88c5e2fe42c6f739cf15cff89cf02122a6a54ed88b44a84b9c34e13128130e8e96286fa53699ab6f05d9a09e2b26c1b91673653231d7cbca1211d75cb1dea058a4c762df0a6cb984638a304b9e42f3bcf01b385f709f02739cb896092f18655e38ae0c1e3a0fbb820d4bbe959bd8c117ce30e76ea54891b9ce5d4e43e69a2a614409b17f9ca70a7704358ef14523c54ea8c5e2778af3ff1c61413d729dd71245ce5fee82fdbce452fd3c2f0d167a57f27e6699dc6ad24b7b8a9b46425f6a548466ef9962343a6947f3440a970aa9a333c63473fcf0bcd3244daaf4d88da7456d8effd33cddeb7be99ed363771edffc106c2fb346cff0907388eaa9c03ed7ec4be389a23cab146f72354d6c9c97f97e79e522dc1e5dedb4eff0e2fe2c2cd7727a74aba97d07d7e8394afb76a5b93bbb14d923b3889d3e1dd438a7deaa14f6509cb40537b7cf77fe5d92058976a246c6a50d76aeca445ccb85d4854cfec7eb4ddeaee5c5d2f3943c7704e585df09d63fa5075a7af4e4a5c70bbe0cd69367b017ffb1fc502dff254a9e4d80e58f139d01aeaeeb60eb1f2b9756fe72752b7fe51f2b0fd5ca5f8dcaca873a37dd6e6cb908e11f2b9756fe5a752b7ffd1f2b0fd5cadf88aad7038750520311ffd8bab4f537abdbfa5bffd87aa8b6fe3625cfad115b1fed44e81f3b4fd9f93bd5edfcdd7fec3c543b7f8f92676386f54cffb17169e3ef57b7f10ffeb1f1906c9cff6921cc70aaf36d8937b731c179bf44c8e3ffd5fd3fcda6e83eeb780500 serializedProgramBytesString: - serializedSignature: b32f16a5d1a161a6c7879c9e07e8f1d135a741679863687512b58d904c030b582a54f3cf19d93dadf2ad787618d918a38d4598f741b5a4c8156f333f0ebfdc03 + serializedSignature: 175b9c7a82200b739d100a8dfab47e7146ddbbd92a701d1a8f380daac56e131f9270df864211fad0e3faa949d89934cc3e78066e2d7531794ea539a2be507703 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/9c6d9ba0f33e409498008c0d91c6ad0b.asset b/Assets/SerializedUdonPrograms/9c6d9ba0f33e409498008c0d91c6ad0b.asset new file mode 100644 index 0000000..78acb66 --- /dev/null +++ b/Assets/SerializedUdonPrograms/9c6d9ba0f33e409498008c0d91c6ad0b.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 9c6d9ba0f33e409498008c0d91c6ad0b + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cc5f5f8e7dc2bee0ddb58eee72a59926563535ce4862b926c0cc6d8b28a2d2c59b28a0b1830bd1942efbdf712202109494842129240421292900412082401424823010281ffbed919ddbbbd7977b7b77aa759ff7ff2c75a6d7bf3e63b6ffa9bd90eb9c2f9894c757ead132562a1982ed68a4a512f76387f2d748e75ce3ff74c5f5f231a9de356e777b9736faac849f126fc4c8c0c757e2f73ce9a44b3f3668ba8708e35f27ea9a872fe5ee6bc5be59cc1d56ae77f95f354a493f3d25a512c568b55624864500a11ebe44b4dea5a04e215e9e6fc5e20f63a77aba4521048aebc35c4f955eadc6992f7ea1ca5f5731bc44619ad3ae75e85f34ea3a875646e9112bbbd3c4dc83f847b18a28e43d571b0f3bfbbfabba3fabb9bfa1b3fdf591d87a5f9fca1e8bdeee86f20745b92f787abe3bf9dff5d9c3f9bd039bcfb9e3a1fe1caebb02d89acc3d471943ae62899cd69e8df551d47a7886f32196390ac74987553c771ea3856e9db9261f8135c46919b903c38fe07e9330e85dd1ddd87e3f80071d7e9f8a1271d3f74d3b1c3752afdde52d727aae324758c2ad9ce33033aa96b93d571640abda6b8ef89d92266b38e8c8e0dea7caa3a4e53c7e9eaf8b1d275173a0faa8b4ed35c75fc4885b1db705d3f0ff7f7a8f33c759ce149af7cf5dc5e755e90a63ee9d89fd6e9bf2a8c53d0b913ff4e9b93c8d2e9fe8927dd3f51ef5ee672ecf4b4273ed8fe4c720b95bc533388c7a79e787ceaead239ea792e950e5afe4c75fc9f92bb0f9d83dcab7cc6ad937aef49755e2452976d43d2b877b82ba79b663dc70da7cb40f77a972344bc2dcf4ea1a74edbcf3c69fb99925babe4eaf8cf75cf239af3682407de3fcd23f7738fdccf955c5d46681b4fa5a78ed7d1eab8401de78bd67c3c56d72347a9e33cf7087fe232409ec3af2363ef0efabb4f6ec9d268a127ad47aa70232964eaf78bd5b17b9acfeb671605d079b13af64833cc1eeab82440983d5d5be8a6d96b5b989342e652976fb766a48323a7bbceb3cbd4f118755caef877f2d8812ef793d9412a5d56285d044a03476e8fbeea7ca53aae8ad7c5694dc6eb747adbe914e9a0649e81cee1d8515ddf8fce41d7356e383d9e5332d7a8e3b11e9d4bf874765ac1f2bddebd906da4f35e32fb2a73e3d733cf95ddb34c5d5febd16d714cef6ec5e85dad473af9e138c5a28b877117a58366bbdef3dc99e81c8ea86d1d516deb5edab686a3ebf0ee59e81ceeaf4b53d71344a2cd821c54a7c9bf216c55fef7ba4c3dbb4124e63dd3bb70446d64f937c87b55bd77a248acc7f47310b7b3d139dc3f3ecdb86d34e8e784db7b5e92774f12f1e54f71cc1ebabea4ae6d52fa7417f1794beb3426f64ea4565ddbec9ef7d1ba94ab7750192bff76f43b44d7a75bd4b15a98ebd94ac441e547a7b7d81af608dd3eae481256a57a66ab27de6531393d872add7539a6ebb2c9c4b370ad461debd451b7cdeb63cf4ed02c34a31d4ab79e22be9dbe1d5d87632f75ff1c740ecf9d1c933d48b3dae9d1d5949e8d9eb89bca806476d6e43e3bbe509d37bb6cfbdca4b83de7d1a15c24b75fcd6a007aae20cd7793e9b9dbd5a7b5fdacfb20ba8f311fc91eacd8f68eb1686d53ed42f7e07c9e3ab688b8ba20a92ebaadde5ba497977558a706887fb27baacc15ba1e3b44c4f529e4b993a6fdf625917586cb69c833ea7cbffb4eff03eafc4cf77edf57d4f959284e10469f18ebbe23d43d5df6f545f156e305917ee89a6a6b47fac7ae497970ef1c4ffa9cebb97f2e9261ba7f1ed2c174ff7c75fd3c57f7fe6fabeb1778e2d2e2d1b59f88cbc7e2c2c4b8ca6770d8e7fb48cb8bd4bb033c6939c04d97014b93c8bad89c9603559d2d0e78d2f2124f5a0e34a4e5a5eade20946eaa9c8ae0713a9dbe43108781eade1788b4d4f72f43724df72f473a98ee5f119f9603759ff54a222db1fe382daf4a8c6b64b027ec0bd248cb6bd4f16a7534b52baf55c7c94aee8569c8bd4e1d4f4e2277b847ee4569c8bd411daf4f22f74642df4cc2d3b6aec638e4b036b6753877ec7670611259aa9ef2dafa105df7dd2ce26dfd16116feb7acc18dbc7adeadea1b1f4972ce0da709168eb23909d0c53f76e43cf605bd5f76f47724df7ef403a98eedf29e26c7d880eef2e61b675ac3fb6f5bb13e31a19ee09fbe234d2f21e0f67cd77a488ef478c74d367a8d64fb70df68be475e3bdaefca86ef3dda7e41da6e41f40e7701ce50977940ab7d995334cb7df7aa9ebaa4c1cb6425dbf5f85a7b93ea09e7bd2f3dc83eef924ddee79d8c3ff118fad8c8ed95b6b5c1e42f770dcc688f836c9a3eafa58945663d0359c56babd968aeb63eaf8b8875f8e9277093a87e79e88e93f4997af5f54c75362f7fadee749df5e488f27cdb622754569e6bb8da4e3fc548a38fb2993c689f832699c6b07873e9f44d657d433ef2579e66beaa8cbadaf2af9e3457cff60bcbaff75753ec1737f82ba7f7d8cfda0fd480f2d1bdeb9348df87f531d9f55c76fa870268af831273d2762aa23326dc7667a4fe5a3886e37ec47e74e3a8cd075b5b6c58a14f6f12d75fcb63a562979933c0c2625613039cdb092c42b3245c4f7d1a7a8fbdf51e7baae55edaac834cff37a0e49f5e1e4c4347e3ed7f3bc9e6bf8ae3a9f1effbcf81e9203e7df8fc52da2e3fb3cbaa6e7ae7e10e3334af5772379f1618b1f8af8fe9d6e6fcd50cf5d86dec30cf47ddd36cc8f971b2950e757a07338167ae4e67b58157ae4cef4e8fb2375fcb13abe188be3d411e81dc453bc102f33a94d7f5fc92852ef5c89ce1d9b1e95acfdafdf9da58eb3958cabd039c8d8afd2e42a5a56e4700fbf59e83a1ce7a8fb57a37390fd7612fd54d91999eb89db5cf7dd9c7169bcabe65122bafd74153a07196a5c2ea72189ac9fa8a31e4bd169a86d16e41d6d48573d77f3823a3f4ae9700d3a777418ad6df9a7c26cdb4778debf36fefd31ba5ff33375fcb947b779227eace917eaf84bda26c5af3cbacf8f3dd3aadfcb1efde67bf45ea0c2bd0ee9a1afc371a188afa316aaf7557d1f29f6dcd76d75d35c76b23cd25f71d2e3fcba4f7e063a07f98b447cbda0e636c6ec77c31aa3c76e7fad8ebff1a98f4ea7df2af98b5578d7a373e7fdb1f33c7a2d51cfdde0b9be545dd77dad01e8797c5ff57dc6be62780eeedfec917b4c7c78adf2f4fcd2a0f8f84496a9e76f4953bf6506fd2866caa622cb3d69b3dc65354ef9d08cd3b6a1c7dbe789e4f5e9ef3cf25728f9b7a273b86f1acbfdbd3afe215e465cb9a0c779578ac4bca5f2947803ddd3e394afa1f7e0fc75149f54e38ec9f2c09bc2d8ff1dafc7fa749ba73905b7b784b1bf33fe399f72fe28e2fb437f16f1fda13fa9a3ee97aa7a22b2cac3e11d757d752cbcc82a74cdd4d749a59be95abd92b946c4dbe11a37fe13547f7a824e5b6d873b5284a59e8b1c8b9ed36195a06befaa6ba5289e25e81a1ccb946eb7a17347b768d42377ad7aee7614361cd7a9eb77a073784fd5b391e344bc2f979687e6aae4334e981355dd20fee20963bd8895e90eaf89bafe7f15ddef8ef4d4d7b40c3c26518f8e70fd4e9506afc78799320d4cd7749fec3effef464e10f16dcb13d47183c77636a8f479ddd57b92ae57b59d3e903c6c2d57fc559d9f28e2dbed27aafbef237970ff2e9ff1d9e889cfc6f870a5fc54edd527d4f16f4ac626f5cedde81c8e27a138ab3e526433b2093577192957efdf23e26d740b7a760b7a168e1522be8f5ee1f29ff2ba47b67eaf523d7f2f3a87b0fea1ceabd47d3d86a1f36835d2a10a5d83e356f5cefde8dcd161b22a57a73c4d84b54dbdf7003ac761d6a8fb0fa273885b6dfcf39193d5730fa173cd18cb79d823c7a357643b8aa39abb94e33bc9ec55cff5e6a273084bcdd94dd6e5d4bbe9c9335e7b511dffa9c2a8f570d3f3b02f6420fb0d25a34ec4f747ea5c4653f5588f2efb5f4f11869227fea58e1f28793b94fc47d0391c7539770f3ac7b6df20e2ca6779eee835ed3a8f9c9d1e397afe58a74ba3baffa8e73d3d87fcbabaff989b6ed31ef2c42755bce3ae758e487f9aa5a24a948b06912b9d7760c4245dd778fd666aa778e92704bfe067a20cb659ec755ead3279a6af957eefcd4e8b26dfe8993e4ccec9ebd017cadfe5ce133552e8e3918420be9210042857ebfcab426ef54dcef525d22b1f1ceb6b9c3bd3c50ae7086f6d1633c406e75fbc94754eb0b54e43a94a9439bf1ba4bccd8eda894fa68a12b8e07bdf297164ba2b04ea9c2b1a6883735e2b352c95bf77494daba4f6cb9c6bcd72bdc20eb1552c708e7b646889716f74fe368559a6909975342f14a0aebbcb117432153bb101ed73a52dfe5f8ab4478a00fa2e903fe0a753aeec315f949012ffc7d02d6460c06599923143228bc45dcb17b9d21fae2481a0ff3826c6d06cdf2eef225198342e663290dcc3650c6229fcc6fbebd7cffde8e3773ac747ad40e4ca69961129a2960c2cc88bca59793f51e8dcb9531e28eac51f31e1972e7ba559c4ef3e57239ff39f005d64e5179f0072caa0cc29d5d6a0ca73ad54be56aae68dcc1ae77ab9231ea2107fb65895a0f562b73c4f48d33c50a0ab4c96c44a3755d4a884e9604a18d99f2a6b977c412d674b9e34dd5a63114b9a5cd9921a9ac480a9b06413ab836a67e92cf6cc53ab77945dfeee5b9dcde9d243a64b26a15129d3d194323db29d6552d711c9d2a5676bbc62e9023f6686bd08db4ea50345b0938960cf6cdb36dcab9752ca9d67fd3304e7c629de62c70cf010c20853ab4021ec6c40980708fb18b4129dbb7bb4028508c95d4c89d3ab7d2ae4cc8c1bbc0e87781074268dbb5fd2fad4af697735d1936eb09b59e9e97e62a9d32158eedc2b779eaf928d4eb88eabb3f9328458df32fe8de46461de699a97ac91ea0049751ceaf506d58c22decd403c0fec75a0c10c6419e7cd0cfde8ccd09dca66838266b31e94e4c14125f7a4240f092ab91725796850c9bd4dd9069e9743befcd92636bca2ff5ae0bcbbcd89cc2ed9676e71de370dc724cf2ec3d2ce2e87caec92234c8344fe34a2b2c921a6b4838bc34d4a7a93ee503ae9fa5082470414dc97b2b69141adad9f493298e061e9a83c8016dc9f52799441e5881f9507983288445fc39a41d63ad7dcf1bf45f26e8d1c3482ae7fa36cb334896a69ecee161ed4d33a43ac947b67b4483d92679d9cb4b3ce689975c0e38b4f572a530d34a58ab4dbecf69eddee25c8f1df5a023fda51697705c60aaa9b9b5c078ae0201341993fb7b68b5dc3ee2f30500a9a17b4b14d436ba8a3b7332c8b8c2949ac379846908fd02fa2933c5ea62a9f1654ea0f369597d0ca00e7dea06db72126e1d0ec9a28123bbf9f3b3f09c27bd1c287529a470d9a3f59dac197e6c3a86a6452d09aef504af2e4a092879b32b2acb5ce64cdc8e94eaa2d91fb4c5589d54e6174b232661d6ebd345dd048cfaa9438c76aa9055caf50855af2b09267fe29ad7c50e697f5c72291fed4207f2cc0c5b9832c14a6c942617a9242c1a48dffa2c15c244d97a1dbc5862ac64650254daea1a479c5548c252969465259362f68963dcc2419b2ec0c83ade681ad82af780fd9644f08673a1dce2853d1202bfe53dab568704778405eb59ce776e5ad12b00bdc6e69aadb1d03dea50ca7cc79a6d109a34a197990c2007c0a477abb03c2fd31678742991d8e4a233b70c68aca0039264b82a13058089030350375678958e348de24b3e14e791928b9a95b231fad11a738473d659d606f5d697b1b6dd206ba77b0842048f76e0c25785640c163a93c3e3b681e1f67920ca50d2c6308dac21a4fa93d27a8da13a81275aea144fd34e2af449d48093fc220fc990efe8447a9ac70643a3692c4aa2751828f32e531489a85b2d79be3fcaf77de803e59b9ccfd39b2328c9506394e5eaf71fe820a7b2a7a1e263c5d17113f7a4ea68ce2e8a04631c52419d26d9e21dd3ef0996e5329e1f30dc29776f4277c1a95760b4c6907d52fd41bd02cd9a6eab6f8d230473aebe448ffac16393a5e2953ae49a66b8e38d5691c9ce61ca1bf9623eb815a792f476e8ada28cb5a3f693a9dd27fa149ff1e48ff3548433f21e652e556b1a1dc8af82cb7f24cc2a1785e2488860f2c64f1dff09941615b62c236522ab047b65c5be4f3a5d200aa5adbca956d5441e61bf4ca957df11da23d1b64d05b006fb626f977ac890261c73c288234bc60818eb7e1a57fcc0d2f58da13958b24b3a13dd5c02aa00ad5630c85aaaf81e5422a2f2ca7f2c28a8cf2c24c93cdc9219a8676b5393a479548d990f38237f861f153c2d09f1c432a4cc3b2da4ac7297233b626b9e9b54bae090a5398e4dc8276b776e1cb2c61ce13ab649ec8a6e654be28a26aedd5865afbc9cefe6aed5926939563738ded6ab2c5524236cc768dc96ce51862511a89df967a8e924ecf4db250ad5485aa5b748f923bcc35ca6ab3cab90e052fbe3f45ee7806eda5c592779d245f2fe784b6ca26a8d9c88f95469eed7852863e9baa004a0c1580af56f5e154162a3564a14f7d66a13994da6541d59e4ba9bdd6a0f6be2efed43e8212bece207c45577fc28f3409878219561a06e9211e450986e58609cd4d1819d0fd840a4f4f718bec2be8fe5fa5bcb2d7f90d4eb01552448e7460d79e3b7eb43c9a627bbc816d5f9f6ce751084e08c876be493098e786740427f1725860120cedaf1305d1fe82c58afedb5f0b29ec2719b0dfe6137b3195cd3705cde68b28c99b834a5e4c492e0f2a790925794b50c94ba944ac30242238aff949c46594f04a83f0329fc28fa1326695a96c1a2f60dc25d64875bb4fb1718d72512da5343a7fef52756e65dcf8088c79d4a84eb39f7cbe9cd2b3daa4a7bb5e0efc13a14d512ec7d020c4d562bbaf505750e8b71ad01ff0897e25257c9b41f8db3e85afa278d598780d4d91ae95d2ad2d76758673d50fc7d59436279bb481d358baf909670d8574bb01e94d3dfc213d968a44ad2912e03fe2e29be3205b2507fccad55abf5db21af78fb184d2a0cea401946c2b5a1b066b326c16945248771890beec1369195522d7072d91d7526a37980acd9efed45e47a9bd33a8dac7992443aba35110ad0ed82edb7fab633d154e33154e4b46e11c4f91da1594d4095402ef3624f0bc5efe127803257c8f41f83e9fc24fa484ef35087fcea7f08d94f0530cc247f4f627fc244af8a906e1953e856fa284ef3308bfcea7f0cd94f0d30cc2eff329bc9c32f2d3831af9164aed330c6a0f3cc49fda1594dafb83aa5d69909c2b1dd1b2e97eebf57ef2e77e0bde71e9393ac3c6f326d7db54e153434a55a674811afa6c934a3eaaf26aca9ace3158d35b3e33c1564af8b906e127fa34d56d94f0f30cc22ff029bc86127ebe4178df3efe849f4c25e6050113733b25f84261680b4e95d6592ff3588efc4c262c63dfa1beca095b8954c989eb72e5e4af079cf4c435ec8b90a3acb751d974ad63edd39dab7eb4aea5b4bec8a435ccbcc2206eacddec7625dd6e88c9af30474c54adee89bef4aaa36ce062830d3ce9d3c07650913e10d006ea4d8261f1c925e9081e4d0b6e300986e6e1a582681ec24e603da4443fcdc39d14f6cb0cd80b7d66bd464af8e506e1eb7d0a6fa2845f61107e8e4fe1cd26e15033c33e50816ae616ca14af0a688abb28c1579b323680dad03abae0768437fa2c4a765329708d2105a6f6f597027b28e1d71a8457fa14be97ca5dd751b90bf66df5dff93ac5140e18c70de9247692b1f15329c1370614bc8fb2a29b029ae76994e09b030a3edd2418d21eb6a8f5fa4381003ffe5067505678abc10a0ff4f36785fba942e6b6a085cc9994dab71bd47ec8a7da6751c2ef30087fc9a7f0b3a99c79279533efca28679e4399e3ddc2505a42389b9c7fd0478699beadf223ed55d267708fbcd3201b6ed01cf263bbe7525adc63d26240ab1679ceef3ae18e14bb73f599eb701ea5c3bd261dfa2b1d0a9cff15b20b08efec717e67aec1f99406f79934e886d2023cfa61e5aa9fd02ea0ccf77e83f9ded4df9ff95e4899ef0394f93e9891f95e44157a0f190abd8e3e0bbd8b29420f1b08ad1fe08fd0014af82306e17b7c0abf8412fea8296d7d0abfd4241cd2f6312a6d1fcf286dbf4065872f262b9af2dbb868ba8cd2e289e445d38c362c9a2ea774783259d154d88645d31594064fa52a9a8e93e1f9f33ebe9232df2f19cc77db407fe67b1565be5fa6ccf7e98cccf76a0a19ecc019a4a1770d45e7ab063a1ff8a4732d45e76b149d6732a2731d1589af1b22b16290bf485c4fa1ff4640f437505a7fd3a0f55d3eb5be9142ff2c85fe5b19a1bf898ac4b70d91281eec2f123753c2bf63105ee953f82d94f0e70cc22ff029fc560aff7729fcdfcb08ff6d9471c2a789c86aada08dabb5db292d9e376911abd6f2dbb05abb83d2e107261d74b536b30dabb53b290d7e68d2a0bb88556b8be4f073bd4f1786bb2803fe91c180cb86f833e0bb29037e8132e0173332e07ba848fcd81089177c46e25e4af84f0cc2a70ef527fc3e2ab9e12b5741ea85fb29ad7f6ad0fa269f5a3f60120ec323f0edab40c3230f526affdca0f6733ed57e8882fdb2296fc128767227a532e7d106e946b455963b8dd287cf5d8b5229a77fd608779f4c771d63b973b552ae70dc26cf75b9592eb6a8c99919727246af81dc2bdc2dd372e4e4a8bbf53948d921a5c0cad8edf24a937caa0a49364fffd4a8692c3c61e4d7d7f0612a817e6148a0977d26d02394f05f1a847fe453f8a35461f42baa307a25a3c2e8312a12bf36111ae62f128f53c27f6310feb44fe15f340987ccfadb740aa32443d74f1804e7ca0d48da6723b8c41d56da76d3ac574dbc8cfe11f0a1b1e41bc105d795f2a57892b2a5df99729b4f5b7a8aaa227e1fb48af81225f9f5a092bf6c920c65e11be9d87f9242f36993fdcb3d72aadbc5fe83ec7d94dcf2ff90b6e5bf292d7f7212cb0fb643933925be4219cf5b418de7ab94f1fc31a0f17ccd2418b2e99f0cd974cd707fd9f4194a6bf81260429308f63f9a2f3b5a55d2fddcb47021473697727cfa987c9dd2e36d931eb077823ff9dfa0e4bf133075be49a5cebb86d479de67ea3c4b69fd172a75208f6c534d449d1e55adebfa33f500fa1615c9f70c917c6184bf487e9b8ae45f4d91841ca87d23dcf66cbc3b969f687d870af97d53c8d0db773fce91dbbabf776eebe617ab9d0c5129fc2e20788ed2e06f260d8618355821ff6a962b85dd567f66eb43be4be9f277932ec3d3d4257103683f3a7d8f32bc7f180cefbd91fe0ceffb5484ff19b04c789e12fcaf80827f4009fe20a0e01f529cff6de0dceb307f9c7f4409ff8f41f84b3e85bf4021f9302092174d82a1f4f9281dc1493a433f3609867ee8c7ad373cfdd0ff8a4cfaa13fa1b07f62c07e5f8e3fec2f5191f8948ac4ff328ac44fa9487c6688c4db3e23f1334af8e706e103c7f813fe73ca3061e7a784e214d6369508bc1d44a56c63eb823c2a26c90a6f87fa1def6d9c23cfdcea67aa5ce6de286b7db7c86d92dec839b2608e2df774079560e16283a765a0c381c124b78aad6e2dce7364615ee9d31df1658a45c4c40276ddc17b4ab9adcc58051b5b7ab95b6ae86e19ed0e9eb9fa81cea924e43b4ffbf5d0fe0565301d2286a9a4d1fe0ce6975496ea1821b254a7482659ea5754243a1b227181cf48bc42a57417534a832bb5798874831a5c050f77e85db85b91244bd368d2bb93a40bad3bac1ab3ebf81c502f2d430fa1c6df6b9676d56cc8455ba486fa030031d9f5aa77eac7be7e4d254d5743d2dce5b340fa0d9534dd4c493340258d5e16eb6d6def928fd6f81c3dfead4907f8f640f708b1a1bf57f8585af8ab54047b982268949e44f5d728e93d4dd2e1865b4ae566b096f977941df432d8c1fe71feece0f794f0de06e1affa14fe3a45e99048b0e6d81b94e03e0105ff81c2d1d780e3599f38dea484f733082f1eef4ff85b94f0fe06e1077c0aff23257c8041f8cb3e85ff894acc81a6bcd42cd2db2d20d8e49bdb99dd14379d67f754dc9fa9241a6448a2b77c26d1db54120d362511f82124ce86fa89cc3ba6f0a0121a42b57e8666d4fa79d714ce70f9601ae5c859b4e0bf50c00e350183ea27d717a0f728f9c34df27b0861b4683f21fe950a718429c4c1461358292d5d6f9a12bbe3cfd2dfa7341969d20424c08c88df9ae06f865072e5f7066077936cadcc4ee7fbd4e6b997c322d08e8a8721f38771fe655404e65f0625c42ce9679c09727f37a50f9ce644123f337dccca33bbde34e2c50e0949d3994e9a7f500630da6400b077227845b9057cadf357b38a94dff6ea3fa970c798c2ed4386bb4355027ec2fe97c91c4765db1c17ca8e4f6306e638d64134de83683a618ce308634c163a658c1f98b8e5c0c54d59e4863fa15d2af71dac71aeac96dd49b773da9401d3f111bf5b414f9064c726c43c53fd28eaff36e51498589d180938b1fa1f4a7234a8e40f29c993824afec824195a5b9323c1bf60f1b14938142453027685fe4bf1981a94c72794e46941257f4a499e1e54f2ff28c9b941257f4649ce0b2af9734af28ca092458430bafc804617310906950b82aadcc12419da0685e9a89ce4cb371d2995670655b91345b92820e5ce94cab382aadc85923c3ba8e4ae94e4c3834aee46499e13547277cae6e606b4b91e94ca470455b92765734706b4b95e94e0a3020aee6d120cb5ebd16d50bb1e42819e1714741f9364787e7e3a3c927d74da2418dc0b17a423f84d5a703f2a0517064cc1fe94e0e280820750a9b72868ea0da4526f71c0d41b44a5de9280a9379882bc3420e42194e06501050fa552ef98a0a9378c4abde50153ef502af556044cbde114e49501218fa004af0a287824957aab83a6de6106c9b9a39dd3086c21977dffe9b6f8866c8a8f98a49316d36862a3a8b43836685ae49824c3c857493a2a8fa6058fa6ecb234a05d8ea1049705143c96cafb6b03e6fd7154eaad0b9a7ae32916c70564318112bc3ea0e08994e0e3030a8e52904f080a7912a5f286802a4fa6049f1850f014aadbb23160b7652aa5f14901359e4669bc29a0c6d3298d3707d43897d2b83ca0c67994e02d0105cfa050540444914f695c1950e302aa6758d5063dc3420a4775401c33291c5b03e228a28ab86d418bb85914e89a36003d9b52fbe4a06a1f4ea9bdbd0dd49e43a95d1b54edb994e4baa0928fa080ec68032047526ad70755fb284a724350c94753997c67c04c3e8f12dc1850f07c4a705340c10b28c1cd01052fa404b704145c4c09de1550f022cade7607b5b7c594e43d41252f314986dcba3792f881cc3c58dd9623e27e25fa558da7435b6aeaa28f11edd6453fd609c375aa6b944fc0bb6ddb453fc580311726da23e07ec6a997279d546219a7ff4f8dc03c39b7429453c032ca04f77198e0315468a77184b69ccab8a707cdb82ba8119633028eb0aca48ac7fd018bc75594e033030a5e4d8db09c157084650d957a67074dbd632916e704645142b13837208b524af0790105975190cf0f0a792d05f9828090d751ede10bdba03d7c1cc5e3a2a03cd6533c2e0ec8e378aa2c3a10b02c3a81eaf35e12b0cfbb81827c6950c8275290bf1010f2468ac56501599c646a948d734e23f0851c1bf65ddaa09a586dd72cbbdcc4ccd836ba42b68d72859fbd9732d1976a1d6d32253ba4ce95e9243b684f08de6c120ca7574512ddb1f58f1f77ec72aa94bcba0d4ac92d94f06bda407805553a5c1bb474a8344986e7af4b273593cc30579904c3b284ebd3113c8a36936a4af00d01056fa520df1814f236936458bd73533a2a2759bd5343a97c7350954fa632e32d6d9419b79b0280cdf56e4d87c96bb4e05a0af66d0161d751b06f0f0a7b87a9c21bef9c46e09bb7ede1fbaf2b0c7f7efe77a45d89dd292bb16109b14b4707aa62aaa74ae0bbdaa0046ea012ffeea089bf9352fb9e3650bb91127e6f1b086fa25a96f7450ccb8c8ae56989632ca5a2582c6fdd7e6995800db076cb04deae927eba5c90b4ccb9bfdab9b3439a345c31b75f4c7e2df034362d30fc7ae1aeacf5f70d85662a96f79b62795e6b2cd73a2d29c8746e06ad937f2f13ee66db8d7205af9b4197b53eb9a875c7b3f83d551a158f52e17edf71a16891f102b9f1f46212e0797f7a5092ca042c65da2aefc633c599d5cb7b9d23c7efb2b5168af403943de110dd381538efb8b4ea9d427193631b8d32cdddd896a95de6bcdac6dea5afb7953deda262f9a029964779628999bbf15c2c53ac4ec6d1ab657c0ae13bc9f20a7ecb4fcc7653317bc814b3a3d34abff972fd7b8dd0cbbb82a75cec8e9fb8eda1e2f6b0296e459eb8ad94a9b34dc50ccef6b45b4cf6523179c4149303592ecf62efc01e3a7a23974ab4355f930f2bc7ece858405dd2229b19b8d4830656db956da750d41f35519f9f56de5821dccf47d850aa9d4ac5ef3153fc56305a155cdd29838158b9cde11a19748d38459493254926a9ba8f8af5e3a6581f9934d6b4a625322eee5e526e1c756d0c572b14a1c47c91796a9e46c5eb8ba6781defbb65572aefc4b7ed4c12dc6b7843a7f9b2ab13a42598493a9f4ef178c2c4637956ea6ceedafc0c2ace4f52ed147f36a06d1876d7a89082703afbb5083f31db4fc5ec2953cce610315b2bf367ad6a9bb85d6ddd6b59a7727165426af0f451cea462f425538c163396be3a55ddcd23b6087737e7b68be959544cbf6c8ae911821a25379514f131c07b350193a532951b656fa8c2a971f7b661accea662f5743a7d82f870710b61ad4c8546e759c8875b93d47ef132da2e66e75031fb8a29660b53969ce9f50ae83234599f35d392f25c2a8e5f35c5b18ab945dd2cf708831d8bdc16f33a690135adb9b16dfa8899d4a2e7519cbe66e2b4b6dd7a1ec90905e7703ec5e1191387056419063da42dce433a6fb8fb5425af71cc92da3aa52fa062f875530c97f98ca1fe12aa3945da23be1752f1fd8629be258c96dd9441fddb16042ea2087cb3adea65b76c9b8f6a65fe585d4cc5ea5953ac96f8b4e3d8a70f6db0e103545cbf458d50f84dc1c5f289446bf496afe9cbf513bf4ba8f87ddb14bfb9015a8ecdb2e685ada8aa553f8f8e5559c2b37ee2742915a7eff84b33af7de2afe5a4ca659c35e517a8f83d47c5cf4f9fd18deb12d5668add85198fe4adc3b66a395e46c5efbba6f88d13c94705cb1cc21c5a5e4e69f9bde4637b7e52a134a354e0b4bd2ba8587fdf146bfa5b7865ad53f5b88c887d9b00eafe1663bb33b3f1fd2b29bd9f37e97d78ca1ed732393708a38fb57267fa45a24e6eb797d8ff4d960299f720afa2e2f303aab59c3c8f406f788d6c413619da10e9cc2540cbabba0d63783515c31fa6d34736cf0d2c93b6b753ae92a85556d99ef303d75071fc11354295ce38403ab1ccacc4c83ca6d752317dc114d3a569a5a677a6c7cd873adeed99aed751b17dd114dbf529d39577649c7bccfc7a8ac68fd39b277043ac6dad2d32497d2c25d99db6b2801ba838ffc414e7d981da68f5a2c933ea67ae73d7a974055b2af0159b1ba9d8bc44f512328d4d89804f9294a7111bd35a373f71ba898ad34f4d71aa48d292f1f655e2db6ef1a9335ff6f5d28f657c9af961d116adbd9b29463f33319ae59b916ef73564c1866fa1e2f273535c4e23e312af814eeb3a595280374bb16cc136044ed34c9ed26db064e55b5b73bd95e2fa32356f68d620717d467b8d1fdc46c5e817d4887ceab1a874da67e98c68f91ff5cabc0ebb9de2f04b1307faebcff49890de4abfad5a1a77501affcaa4f18494edaed86c7c95bc0af9bb6dfaa377529abed2d6256bb9f4f5d43d698efc721715975fa7e3a14af5621659d683b99b8ae56fa856acbf72ce6dff24de4df460d25ff5a0d33351ca7c39aa0eed2e3f71be878af36f4d711eef49d95898dcb9e95e4acf574d7ae67bf4c4e59357e7254ae774fb8c998ec3df47c5e035530c4e6c6d61b7fd5c99ee55249b2dc716986eced3eff8a1723f45e577e97880e810fd942ab1985139ae6d4a9307a898fdde14b313da39bdfda473a639e0418ac8ebe98c85f96d6b051f0dc93ced1fa262fa463aa5d54299aa6e0a36a3390ed70a8a44618af8994a3278cb4f0c1ea662f087f4fdb6214c3f3913c78fbade5629f40815bf37a9b99de42d9ad84779bc3aea8f22d1f98bfaa04fb23c99596dff2815ebb73299537053b5d479788b70fb6e15a2bdd7ab3c46c5f08fe9e43c33e1ccda09a97b385d9d7f9188dcee5e4a716768eae53bd02acc85ee4b24afb56698de5ae24f8fab1d62d721fc3a2735204f94b596edb09834b9843f3970ba7410eecf44f5493eb7428c540bef62d585527ead2a6fb4b54e97845cbf7658843bdd6905d6c8b7f4b2db54b130d572d3513d8763973a4e1b8965b411f9b55f2ccb213d11481f6c31fd33a4ea0895aa1d72a310c729195a536a2dde86d03a9a6d684802599c3b4cbabb0256a9d18308ec9ab24906e37e08965e34923264ef2ef0de90a74901ba3d9852dc5a540498c40d93e6e63aee360a7742e3554766d7ce1df22045dee1c4060bcd8b65bbafc101e7fa7eea3a8702d8140a8450616984ef722284cf9deb6eed5239cd0102629f945f2db68702d863dd62c0fec2096ca0703fab9927625e996106d7b7670cdc7b9ce0fa1bc081c01dce4be0b8d122af568602da661183f6576e6b8bcf9e8b9ddf35caff577b86b956170670d15e3170ef73821b2cdba34d69570b61807715aa14fec609af27caaaabe34660c28069dff018a6bf7362ea8e30c59cbec380e8ed413144ffe044e47e84da9d1d6f76fa11ee1cff5ae74aa5fa3b0cb8a26362b8fec989ab8bc4d514aa22bd53ef189c7f71c219ea9cac6eed22e97941d7b3ac44d6912d02bc47a0565ca346cec20070e08818c00f38017643e515a80953a5610004db666b40ffe62ed057cbb989d8ee42e16890be8aeabcff64cb86f482bd3000fab47f0cd0879c8060ef4cdd625f24f6c858b7b43633c1c7b35236424ba485554a7bab75020c0344f8d1103fe28408fb7d63783022068bf3ab5ab7b1ad0c795b7e201a23fb9813656f55a6697bdbab6accb5b2bb1d06541fa1b2edbfd9ea6c43df114f37ebfe63985a661f758d81fb84bbb38dc1e1d5bcaebf30cc00c5d62d8701de3e342ef62927bc5ea8468d2dd87497128701d440d43afb1ff750f54a99fdb67bf61f2a761e6f94218501d8e60e31609f6577f030de81a63264e5592d1ae3ff9c7fa81a9a12c532e83037349eef1c83263a305bdb2239c1d622038f6d0016db10aec969c3d538e18501dc5b085c8413dc21289b86754204bc3834ac0edc56a667cadd41c570f7038e4056d691131c8c9e9538d0168af4f7d20c03c00b6423b76b678f70af7b65e6ce2efea8d36e397d84dba76d90579b55fd1be7a633098a1adb34efd401b9d944331edf88a62ce7a2694f11477d4fef4533f41589a6d5ea8c061cb088fa70008afa2a02a369b765a2be2af06846e549d457173beaab011b4dcb9525eacb7f23eabb676bd2999eb18f264cf844937607a3c621fca87150364a4c4f4693ccee468911f0688a51a468467333d1346607633ea466dfcf3cf021eddce1ff6ff7ce3c70ef04005de0d31db29d2fdb135db9db136045ae372f94f1c9f7939ae1d4ea1e1d4624e810ff151cdd6e3069d33dae6571483a11cca475d103b95c74b309677e2871ce4138bbdb84b320943837209c3db281732b0914abbf49cc14457c387b71e17c44c470f6b40967612871de8070f6b209e7ac50e27c0be1ec6d13cea250e2fc09c279884d386784126729c2d9c7269c05a1c47906c2d9d7269cf9a1c4598d70f6e3c43948e1ac50dd4aef7a6cbcd6378f0f64672e907f4720fb73821c29628314e90e18c1f38df2d9f035e51721b00338c18e12780429fd11d430c31d8be00ee4843b5824ef76627150d3b3a1ecca8552a02ee7204e947d14ca220f50776c111e0a9f1d3e80ec707036e0cdce3ebcd7b8e03d81e00de1843724451d1e9f8959fbe66cd9f87d0473a84d30678510e63f10cc6136c12c0c21ccf710cc436d8239338430ff8a600eb709667e0861be8d608eb00926e3d4051bccbf2098236d82c9d82b6783f91a8279984d30c3d8c3f9138239ca2698b34308f39f08660e27ccc90a66adf350ad3c9a3f3fecef73d48c85c1002ee427a01efa684ee43d24f26dd21fc8f54fda2ae185af5fde0b59e998f61c1f8adfe892d1facee242598bac6f2c27ca890919be5c0a5b2cf417b81638ffc13a77c911cc16916c8f4a56d86ca5eb74047b5c36ec36bdaa2a8c28735011309e13e561862220dd3ded59d18e66438bac7442fb5aa92bcadd109a11e5582e94bf45563a911be57ce9c95eaffc7761f756fd7d6df0f4d55ecdaeaf78f8eafc4e08659413a55ed430c3f95fa7022f974d25b89a851179b632f3348470523610ce3ae8107e19219ccc897080884dfbeaa3f773c0619dde7d0a419c62935731ab2b171bcea1a8be9e6a134e56df23369c47219cd36cc2c9ea19c786b306e19cce89b36f6bbd9d97fd59f443b9f0bd88caca5c7b5c610e0f61dd3d1c59625e3650625fb8154e237c895a6e57edbcb4271b35381bca16649533f8c7dcf168e526b15da25b2017ed6d57a2163bc72a4744c2ee0b21c8e2bd11ccfc6c0c6534cb45c14dada3eb7a45a33e9a06e266704e01b3a1bd11a12dc8c6dc50ba6ed98ce5279b53f6d10866a14d301927dad8601e8160ceb40926a3db0c1bcc2204b3c826988c0e5d6c30a72298b36c82c9e86ac806732e8239db2698615c1574388279b84d3019dd66d8604e4030e7d80493719e870de6080473ae4d30195d0dd9604e41308fb00926630f880de64404f3484e98392271fcc89ff31663fdcee6bc35138d291dd59ece87dec162c652946da87832b2d5a36d82c958bfb3c12c4030e76563dc1d463b7709fd2ddb2c4df4b2e13b14e19bcf896f18c297e81307c2628ba5c33c73fe7d047441369c0ff20e3ae7837d08e1c26c202c3ae8101e891016dbdd1c621cd5646b0e6d44cda145d9728f894db1e15922f6c935b6498b53918d2eb6c74b388ceb298f42289764ab164fb5a76d985db7e620a04b6ddae7686628873aee473897d9849375912a1bce2b11ce636cc2392b94387f8f702eb709675128717e0fe15c61134ed6ad9ed970ae403857da8493756f62369c4d08e72a9b70b2ee9ccd867313c2b99abbe599deb7254aa46af0750bc696e72a2ea03311d035d9d88babc0d37fcfc2b0c7682e78f508deb19cf0868b74574bc62f9d66744778930b6a291aec28b1112a638f9d0d6a09825a6a235446972e36a8ab11d4321ba132d6f06c50c722a86b6d84cae8aec006f55004759d8d5019a782d9a00e42508fb3112aa3b3021bd4be08ea7a4ea8052271943e7eddc64211fb0e951b91f8af5ac57f062ff6f9b032d9a2d5c3d58c8950c89508b039b64e84e3ed591d17c61d66fb237b3ec1de55488c4e626c137a2f212bdd60cf0e75acabddd9ecf45c04f3449b60867127e4f310cc8d36c10ce34ec8bb10cc936c8219c699fb7310cc4d36c10ce34ec8db11cccd36c10ce34ec8b50866b94d30c3b88ddfb108e6169b60867127e41204b3c2269861dc09f97c04b3d2269861dc7ae50b086695dd6eb761dc42ba03eabb5773e2edadf0babbd8d4ca5ebc2bbb8673eb15b6cfe30964975bb3bd8b6cfac31e61dc7a6518b2c96dd972bd5d294734b77b463c8b9dd71a65886176bd1d896cb58613e821493379131fba1e6ce5234277727b7ad4877fa5fb1084727b369615c297570f9e658565085fad1ddb96bbb3470dd262dd792156cb64fbdee07654e1d4d9b46f276b6792cd52bb229c3b6cc2991f4a9c450867bd4d380b4289b30ce16ce0c43956242eec5a24f608705d6811dab576b5f37aa5806e648904eb6eb95f9b9d16673f2ec8835165b5d32697f099a1dc58ed4184b3d1269cac1f1e65c3790dc2d96413ce59a1c4f90784b3d9269c45a1c4f94384b3c5269cac73eb6c3857229cbb6cc259104a9cbb11cedd36e1cc0f25cecd08e79e6c8d7596ca56658b2379be808f3cad534bbe2ae592afaa508f759623a07bedf1eb0ca3bb424fd4533a251bf3987a1f307711e216d9d5d40f857dfba02a6497a7666311623b7cca840dde3c046f9fbd1ec68c1510db64dbdd08ed69d9b0cb59d9b74b36785f44f04ecf06bcc30fa24cfd028277067ff5b2cdb0a752a9c3a442542885aae50a77187a0b5fb3a72782b9df5e7704c60163b64c3e103583ceb46753b5307a134f43567a961d7398a64f2f33a21dcd85f67864a567db344bc4ea76c8569e8e4338cfb109677e28712e4738cfe5c43922ed8cbf4eb86b88415401afe3c2782eac4b10d6f3b2d1434f6fb0233f946edbeb11ccf36d821946b7ed1311cc0b6c8219c685abab10cc0b6d8219c685ab6b11cc8b6c8219c685abc508e6c536c10ce3c2d59508e6019b6086b1abb900c1bcc42698619c095a88605e6a13cc302e5c9d87607ec12698615cb83a1fc1bccca67e3aeb6c105b3ffd1084f3729b70b2368fd870ce4538afb00927abef111bce0a84f34afeaf1835893a89cd9d0c865761cca8d6b952a1c693c237623448c4105e958d0f41cd1407db87a0ae4708afcec60282d46399890bb1e63b421be50a75d691cd2b224c9037a1ac7e0d27e4910a72adf31000ae522b3462eb32e24b52ec72c808966d65c61108ecb5d9d84f4183d55f288c9f814fd6220d63e37e32c27b5d7b4e16676d9bd4b3b850be8bcad9eb39518e9628978926b9040bbc416aa4d302bc1eb3d64deafb5b0be4e6a8dbd5fdc5ce11da048c5b58b035a7ba23c037d8e32a1bc66cff3142792327ca812950ea98b2bada8ce2aaf5ab51e97993dd9bfd300e30b36df69387f0de6caf1b2de37c279b93d83ba800b8251b050055efc70a00c67294ad00f81bc2782bf776546bd4a0885e6ab04c5a2664fbf0d5e57d11b8dbb2617f79ad3658293ba4ee6af6b06fb2f22584f176eeb17900562c036ed7ef6e1dcb05731682794736da977949ba99e11e737a1ea1bc331bc3768507ddb0ddc908e15dd91851026b5c24ebe816a9c40a39700c997cb5d82d07ea1a9d7bd0406a10615e71391b81bddb1efff830fa262d4728efc9c67aa2424f2f28cc7577338277af4d2bd36772f6c5d956a6df8370de6713cec250e23c8070de6f13ce59a1c4f96b84f3019b70168512e73711ce076dc2c9ba03221bcea508e74336e164ddb28f0de74e84f3619b70b2faccb1e1dc88703e928d8d786179d5c1b311ef6284ef519b9cba583f24c6b739399a9478cc269caccb5bd8702e42381fb70967412871d6219c5fe4c4d94d0aa8925f586d14ccee856cde455d50d9f80427ae89c2cfa76d6118ae458ac49fb0056a59703a58c6053b1fc17e321bf5f80cd9e83958f69f7903e17b2a1b63ea3020bc44c0202f0c056f95a3ea8da11efadd8f107ec91e0fa230ae3e1f822a9a2f73a2040ff035b20cac14dac78d9a7f64fc620b5b15d40dd9e4d3f63ab9847127a46b11daafd8f361bb82502eea7f19c1fcaa4d30c33871f60a82f9359b60867151ff7711cc676c8219c645fd3f4730bf6e13cc302eeaff0e82f90d9b60867151ff7308e6376d8219c60500cf2298cfda04338c8bfabf8d607ecb269861ec58fe06c1fcb64d30c3b8add9ab08e677ec5ea0c2d827625ba0928f06419ee31e0449369ee4aa5e24fde318ab23b6af539f8c407e977fed643c48773413063a768863e4b87b43d259f4307eccb6232a08be678fd36b18bb9b3310caefdbe4dd3193b38a62b3cc2711cee76dc259184a9cb7209c3fb00967512871fe02e1fca14d3859979db2e1dc8070fec8269caccd7b369c17209c2fd88493751368369c3508e78b9c38e144afe60ddfb45a1f84e9c7dc3d747781736c2d1aee3a2e708eb020b5dab9c2bce894cd25a13f82f9139bb2f04cce1177b62c7c2fc2f9924d380b4389f31284f3a736e19c154a9cbf43387f6613cea250e2fc16c2f9739b70ce0825ce6508e7cb36e1649dfc65c3d98870fec2269cac1be4b3e13c09e1fc65363ec9a43782040e2db215eaddfed1bb6480716098adfd194123efbfe2c43ac183758b4874334cdf219111355bbfa912a17e251b0edcb3c5c1b629ca575121f0eb6c38cb6a6b6d92f60745c06205afca380517de8d766721ebfc8d3dbef161f4a1eb8750fed65e976ec61977b632f4c7a80078351b3bceccf0d86a983fff3d1fc17bcd6e6f10460745366f906928dbff2e1b0d7ebc7f9c298b87bbaeff01b2d6df73e21ce7a9ebe18b19b1d56ee62f182c512f676ddbf2695c980f4356fbba3d9e2161f4b65b8d2cf68d6c7eab00327ea56795dcc1d755fd0fc2fb079bb60a601dee63c3d90d65fc376dc2c93a3ec5b7ad24c2f9964d3859474fd9701e8770fed1a6d1d3999c0b0ed9464f1f4365e79f6cc259184a9c37219c7fb609e7ac50e2fc23c2f9b64d388b4289f3a708e73b36e164ddf18b0de75a84f35d9b70b2ae7d67c37926c2f9179b70b26ea0c686732bc2f95e7676556a873151b63efbeb08df5fb331a00c01574b4bd4b277a847c2072f82e0bddffeebdf742513bec9b7dea8b7f3375b40867116f32364917fb70524e364061bc8c39145fec316908c03196c200b10c87fda029271569d0d643902f92f5b40322e606503b90e81fcc016908c4d6f3690f508e4bf6d01c9e8d5c106720b02f91f5b4032ce40b2816c44203fb40524e32e346c207722901fd9e30d17c64dd03a21941f73f7b063fb6583a24d92c356b9432cbc163e972d985fd3f0fe9b4df76c7072d92d17a9c2bad8d8f752cdee30eb84eb0203e20b78bb8ee3b9502f4376fa49363eb818f3da34432d93836a60c5d552581d2fd8d15c601b900d7fca0976acf03a72b9be7131976d10e87e653559291bc60dfda622ebfd5f3697c7b840c15b0ecadc62633b20bc1b536d46583fb3c73b2e8cbb244e42c5c0e7d9f08ac74daaf44b5846b46c25ec0a64a5b0d557d6327f8da3c43a11fb5216169e35d7d8b3b8b06e4358239c58f5dcd0cc836862ed3e94dd3b64c3265367776f2b9531abb3b5528f4136d99113eb1003d664155218f79a2d44303bd904338cdeef4723989d6d8219c6af6d4c4230bbd804338c5fdb98816076b5096618b73f9d806076b3096618570a4f4430bbdb04338c03cd6310cc1e36c10ce3d736c623983d6d8219c6c1b91108662f9b6086711c693482d99b13a6ff65808c5510db42ab0108e72136e1cc0f25ce2311ce3e36e164fd1c191bcead08675f4e9cdabb1d1c1676a111cdaceca1c086af58c4f0f5e3c43750c08ec6e56aa33410b5c3797c9bf378bd1c8ac35f690d1fc6ce08637f4e8ca3446c670f774a6d93a32eecdc5221798073c37c018bfc615cb3dc110019bc5284f9a3cceb10dc019c7083ed96c4d88867f31eb915a11dc889b687145027ab1cc05ba618b0211bcb856c20423688bbc44c567feb98b24e9d8d8a3061ac42f5f6604e8c39068cfeb69a621c8463db6a2a17e11d626f99c93827c45666fe1215004339d18e9668974afb2c11303359a56af84a294afb296d970900765ce1fced8a5fec1cab1cb19521acef7b20c0c3b251c2522e350ba5c532ef263b8eab84fd17c27828274658b9bc5aec761e4f7497099fabcc00846d783686e270535ef78b623da57037dd8721982338618e34c04c5d728617ec120476242758bd5534b8c3d4898369abe8ab11c2c33811faf3dc0ca333c23108e5284e94637ca02c75c20421cd4ee5d420f4d852136f6d3e81ab36ff0021cee1443c4cc47b7036c881b96d496d368c536ec7a21ed2e86c8cc3a7bf7f5c18bf1f7c17b2cf3136e12c0c25ce8b11ceb136e19c154a9cbf4238c7d984b3289438bf86708eb70927abf7071bce8508e7049b70168412671dc239d1269cf9a1c47922c219cd4657334ffe768f30b7592adcfe7c787beb1508e1a46c7435d373ef0aa3abf660d46c9f9c2d6b74bb9b20688fb2c42c0c7cbcc985f069648d53b231be0e08ab5af75dd0b7c33e7ef40d84716a76a7d80ef64f8e0c4768a7d93b7b19c66f0c5e85d04ecf46f9997fd00d1c4711c2dc6cb81cce680f974336d78431085f5e3626d8d21b77cf0fe5c8fb9d08e60c9b6086b16df91082996f13cc302e03bc1dc12cb00966189701de816016da04338ccb00af403067da04338ccb006f43308b6c8219c639c9cb10cc5936c10ce332c0cb11ccd936c10ce34628cf209887db04338c1ba17c1dc19c63b7ef3b63c667eb60764743c473b331be39a3d55e2b05de0a35dc4b03bf82acf4089ba6d1667296a06cd3688f239c47da84b33094386f46388fb209e7ac50e2fc33c279b44d388b4289f36708e73c9b70b22eb962c37902c239df269c05a1c47916c2b9c0269cac7d23369cdb10ce859c38f52eb0f99e467d9827d3762078c5d9583a00ce08c502b69d68707a3c55aad1ee2e18a89202cba500bc214553a8bd8fc623c48b6cda718675069d0d6717d4bd5c6c134ed6314f369c518473894d38599d5fd970ae4138976663271a8cd3ec9774acc3a85c06d328efbb83238c704f8d30c15d8ae02eb3a9e13493735693ade1f430aa988eb109676128715e87702eb709e7ac50e27c13e15c6113cea250e2fc11c2b9d2269cacbb72b2e15c8370aeb20927eb36926c38f7209cab6dc2c9eaafc486730bc2b98613e724e15dad0e3dfb4a870778bfeb78c6961c5053c9f39dbf1ae5ec276bcbf44eae96e90ed4323d9613b8feae2b353f1f5fb2b28164fbaeeb3864b925b68064b44836904311c8525b40327ad8b1813c1d812cb30524a3df271bc85c0472ad2d20195dbbd9405e8440aee30499e7a9dd5bc8e558f4aab885ce13758e3ef5f20ca29aa5bafe0aaebafe2454d71f970d5fbc74474c1927efd8c64b3b2298eb6d82c9e8d8c8b70d3a8279bc4d30c33892ff6f54ca9e60134cc6663d1bcc0f11cc0d36c1646c48b1c1fc2f8279a24d30199bf76c303f413037da0493b165ca06f35304f3249b6086f1d33aff433037d9049371a1361bcccf10cccd36c1645ca8cd06f37304b39c1326bdadf462e7778d703fae53e60800c1e1df56fa7804760b2758f79bec2b9c072aa4bf1d5e7bd46e5f34605b91d41561ade0c4da45883894e143d50fa1aab467abb430eec0d00bf5c6abecdd4589b169c4b68bd2a3c84aabed5ec1c9d8c1642b04a620cbddca897700aadf77c9fa1bdcbfdd8fe66569fde6595c102b918d6ecb864b036e2451353b7bd388cd2647239c35d9284d13b37c3ae56918f7a4eb83b2fbc9d9a8f3a989b9f83a3f8cdbb14c4756ba3d1b3da34cea7cc6a90d361bbd1481adb5156c183fa77721025b672bd8307edb750102bbc356b08cad5336b085086cbdad601927e9d8c0e621b00db6820d6303eb300476a7ad601907a2d9c09e8dc036da0a9671ba840dec5e04b6c956b0611cb95a8fc036db0a9671b4950dec71086c0b2758bd2bf84cd10ebb82b3e13b05e1db65cf184018f76a5c8550eeb669453debe6436c73a2a3d0e8d41e9b70b2ee96c3867331c2b9d7269cac7b39b1e16c9038bb76f6085f9c207ca18c2c44b742c4f6b5992e9608f08a7777bea970ce57c8daba596c76b2eb06e79fbf34d8e8fc335d8fc8cd8b16893da2415e05799552769d73173473ba7fb098ef143089eeca24a2b2b49eef306f769e812f7943e87b45a970f7ed59edfcd68e182d1249546eca19fb7c3a84001f54df261a658ce3f7f58946ba494eeec789205e0030aa74d51f2c5aa6ea891a27cee5529346e7994e321cd784a291dee84c4f202d93ad9c26a99577623e2a93dfbd6b9e2b59e01c8b9dbfaa655c6a9d70a3911e52db3a190eb4abca941d82014422fd549a437c574a56e50ea372792c6bd52a77b2f358a4c8f9e5b6c7a6b7b6c4a6abb51275ea4c5f4f2d13523cb9b453215923e69c5edb66b69a2a466ef682f7aba56f499594ba2c654c53c78fb6fb5e495225770aa4c5c11cff7d90ee2ad9a5990e89f49486dfa084c3e7aa1a9dbf41a9274b3b88ceff0f2f15fa654e320300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/9c6d9ba0f33e409498008c0d91c6ad0b.asset.meta b/Assets/SerializedUdonPrograms/9c6d9ba0f33e409498008c0d91c6ad0b.asset.meta new file mode 100644 index 0000000..7743ea5 --- /dev/null +++ b/Assets/SerializedUdonPrograms/9c6d9ba0f33e409498008c0d91c6ad0b.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e8ab702453a24ce48afb3ef043e0595d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/9c8d725315cfdfa49a3855d5b1343458.asset b/Assets/SerializedUdonPrograms/9c8d725315cfdfa49a3855d5b1343458.asset new file mode 100644 index 0000000..0899d0f --- /dev/null +++ b/Assets/SerializedUdonPrograms/9c8d725315cfdfa49a3855d5b1343458.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: 9c8d725315cfdfa49a3855d5b1343458 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c5545f6f8e7d1bb205d40420f352109013b2d40946608585021240122490829144514c5de153bf6de7befbdf7868add2dbaeeaebbebaabbebaeff3b736772cfbb6fce7befbe9bf332c3ff173ee4e6b633e77ce74c2fb74516737e22639c5f8b58119bc6c6b185ac8cad66d5ce5fd39c6395f3cf3d53d7e7b35ae7b8c2f95de2dc1bc33212bcc97f4644fa38bf0b9db33a56efbcd9c04a9d6385b8bf80953b7f173aef963b67fcea72e77fb9f354a495f3d242369dcd637359ef48cf0422168997eae4b508b72bd2cef93d956d70ee960ba5782059e2566fe7d702e74e9db857e528ad9e5bcc0e17665539f74a9d776a59a523739990d8ae5d2e137f30f7d0531e7bc9630fe77f7bf9774bf9773bf9377cbeb53cf64ef2f93ee0bdf6e06f4ee8aa38eff7758f11ae5f1be7783538e7ef7e2f9fdbcd95d762651c59fde571803cee2e655e9384fe6de57160027be3c9c800b29261d64e1e07cbe320a9efb529863fd46514d906e445a427b5f785d5cebb26eef36b4342d8aee2b18f2f1efbb8f1d8e262197fdfc8e787c9e308791c2e653bcf74bf4b5ecb94c77e09f41ae9bec72631cf679d305bd6c8f351f2385a1ec748dd7693ba5e07cec3eaa2e274ac94d9578671bde6ba7a9edfbf419e8f93c72c5f7c65cbe76e94e7e393d42719ff533af59361dc04ce1d8ead96c691a5e2bdbf2fdefbcb77cf7139b67ac8670ff03faddc1c29efe614ec18e0b36380ab4bebcce8e712eaa0e4e74a392a3fb9059c73b95b03dad64abe779f3ccf6389f3b69e49dc9be8ca69a7584f72c369d3c3bdde666f16edcbf909f454713bd017b703a5dc4a2957d9bf877b1e51f2070239fcfd5b7d72337c7233a45c9547281f4fa4e79ef2b88f3c4e96c7fd58633a1eae642a06fbca30559e7b1d38e7f7f7f2deeda5f2d364b9c58ba329beb8ee27c31d9c40a67a7faa3cb64ff279f5ccb4103a4f97c70e4986d9411e0b4284d9d1f585763ff87c61520299335cbeedea810e8e9cf61be5f94c799c258f8592ff309f1fa8f2299e1f24d2657fa90b0371e0e8d2a1ab3c3f401e6747ebc2e6f874baade9748a0c91326f07e7fc38545ebf039c735de7bbe174784eca9c2b8ff37c3acfa7d3991de8bed7b913f08d64de8be75f45ae7d1db35dd91d8be5f5053edda67b7ab79b0ede557a24931e164a16237c8c47481d14db45bee7ee04e7fc38dc0b4ffcedbcdb49f9565f709dbf7b1738e7f78b93d4f56016ebb35cce4810f64819b6ccff3b9d239f3d84c5a63dddbbfc9809ae654a793be47b87b2d8724c3dc76dbb1b9cf3fb072569db628d7e4eb89d27c779f730169dff4cf5fca1ed5bf2dae1529f512c3a6da97a6786f74ea4525e3bc23ddf45e9b244be331a7019edead745d9b9541ecb98be9c5d0638c8f4e8b40f1bc3eeafcac092386195c967ca7d761779723af691baab7c6c398b4e33fe67f9b515f2b84a1eabe5b1ca7b76a46273a43cca73d1f80779b3d3d6f5aef3e35879ff1e70ce9f5be9c9eef99ebcb6daa7ab2e3e55bb41d9aecb03e2f9d91af7d94ca99fd33e176c77d926b93de7d361098befbfbb4abbc6b1e8fc639c94fba32bb7abf28f3a7954bed5209fcf8ae618516d8c78797322ddd6fa58adf3640dc9f0dd4b242b1ed3a35c998d75fda3e55195ebfb01d93da47dd99e2e8df5bf0de01e3f97f540b69e45955b717539461e3b27b0a727788e1f3785b03fdebd36f2b859da369e45b77fc6bb7eb26b661c59c7bb9cfaa87ae909ee3bdd559b7a8b7bbfdb16797e22b0898791e3b1eefa92bc7792bc970bec5e2fafe5816bc7c96b13bc6b421ebf77b22f7eeef5dd3f05c8d0dd3f15e8a0bb7f9abc7e9fab7b77d59639dd67cb7a9fae792c2acf6167c4da2a9e8161df1f202ecf94efe6fbe2325fc6cb8f71649da58fcb9eade4f9d9beb854e5b78acb899ab83c57de83752e59b788eca189df3d018789f2de79485caafbe703b9bafb5b810ebafb1744c765cfa5f2fa85485c42fd615c5e146bab780686fd40127179893c5e2c8fba7cf6527954759b0793907b993cae8c23b7af4fee4349c8bd5c1eb7c5917b05a26f2ae1295f57fd367bb1685fe7e78ecff6fa228eac2b99d6d77bab76e3552cdad7af66d1bebe378bf575d95f1cd9c78b7fc1825fdb97c5fa3a287b22aa7fe15af00cf45575ff3a205777ff7aa083eefe0d2ccad7fba836e48d4cefeb507fe8eb378170da836760d80f27119737fb382bbe9359749d65b21b3f7d947eaa6e70028b5f36dee2ca1fadeae3b22f293245ca7f049cf3e3545fb853dd70fb66b87276cb90723ac9eb93dceb7d7f91d76f93e1a9b47bbb7c6ea9efb93bdcf331caffeef2f1bfdbe72ba02ed968cb9de01eb4ad8045d74954fd760688ab02700dc6952aeb1371957ec5eef3f19b26e53d0acef9730f78fa8f517aa972ed18ef5e37d59e56f1db09e8f1a0de5784ae20ce02d79194cd0f25b039489e349345e749335d3fe8571f47d663f2998be33cf3843c3e298f8f4bf9b358745b46f5533d25cf0b7df755ffcb368f7daf31400f259bbff3581c7d94fdcfc8e3b3f2f8b40c677f16dd76d89f79f98abf8c48b51e9beabd6552a703a2fd479c3bf13040d6c31a7db124817fa8f6d9f3f2582ae5cdf63150796ebcf653a2b0e2d81599cba2fb1354dfdb0bf27c8ebcaf7c67beef79d507f0a23c9fe77bbec8f7bcead7927957e4c0e8e7d9cb400e3f7fc5b32d22fb2cd9abe0da81f2da6b1e9f81b25e1059101d367b9d45b7ef541bae583ef704780f3250f7653a8a2cf4d9b4489e3f05cef9f1209fdc853e5607f9e41eecd3f70d797c5b1edff26cccea01de013cd99bd132e3faf42b52c621f29da7c1b9e3d303e3d5ffd5bb87cae36229e31970eec8c818e3ea9b3119971539ccc7ef50709d1f0f97f79f05e75cf6d638fabd2a9f3dc267db11f2ddb7927857f5972df5d9b6d49531a89d6bdba0fe7164bd238feffae250f92c97a7fad460bc2e03f1c9cf4ba40ecf8173ae831adf7b8fe97d7b89effde7a3df1f2c99b3f7e5f1039f6ea52cba5f6cbb3c7e84fb24fbd8a77b99f74ca37e1ffaf4537d824aef7219ee0b400f759d1f97b3e8324af50f7e22cf57f8eeabbe41ddb87bbc34d25d1e77b094f358d15fa56425d397f3a9abdfe01d206c27ae86ac77af0f517a7f268f9fcb6392e56464258bcebf64bd3252c1a2cbb60a19ee0faecca1aabcf9421ebf0c16aeea63645ff9f4b8d777ff6be6b53be075d9bf165925efbf08cef9f1488faff8dbd17d98ac53b1dfc9e31fa26d66df7aba67a93ed9dfcbe31fe5b3ab597499acfa7775bed44d3e53e5635925f5d9ea7bae463ef792effa1a79fde5687d2335e03e7ffe3b79546de257e2f057b22b811f2ab67f4a1027df0319bafb7f46e2ec2f526eb52fceaa0197f6e06f87d1f0a52ed3e12a8ffeab3cfecd275b37f6fe832f7e553b53c5e16de03c88efee27dfabf5c5abec771f21e73f8c506de7bf83f0e3a5f91f7df2eba4fc57c139bfaf1bc3f8a73cfe122d23aa8c51e31bf52c369f96f933fbd9bb375eb5b7fe01dee3e73f017b12f561c7cbdbfec5b47d29992a1c557fae4dc0eddf4cdb76ce7c2ca09cffb0e8b6f57f5974dbfa5779547d1cff935c1a7c1c7e93d7d77ae1451ac0355dbb39916eba6b5552e63a16ed87eb5cfb47caf19f91aa7da1fcb0324158f2b9c87af09c0a6b03b089c9e351e0da06708d1f8f96babd06ce1ddd4667f8e46e94cfbd0ec2e6c763e4f537c0397f4fce7d8a6c92f7aff5c93b0ee8b4c90d7394d221e20be358e6d50f1c5ea3bef0713816c8da08ae2919b07fab0a1cf9f537651c6c8f0e33611ce8caea16f2dead29bcbb994597f39be5f1789fef1c2fe367bbabf718e6f3d3dbe387dd28579dab3e96c7c1393fb602f2f8fd7875705d385b7cf66cf185db8a256efbc83ef5486b793c49bef33638e7c71341fccbfe9ac8c9e09a1c9b8a9c22df57f57ce5a3a782674f05cff2a31a0fba099c3bba8fdbee93adde3b5d3eff2e38e747399f387286bc2fc79f1bd3e899408733c0357e3c4bbef33e38777418bbc3f581717721619dcda2cbf1b37d619e23ef7f00ceb96d65bee7cf95cf7d08ce15632867bb4f8e5faff3808d6aece7fe04fe2ab936f6bf9d2ac3badeb57d6c46b44d89e469af49df8ec8f64ee47c1f37350ef5660ab2bf9532b6b2e874bcd56534bec6f79c1ab3926db6880a6fb0effec7befb8a4f87e8fb8d722f94d73f897e2fd2d177df2f57f9602744ee45f2fa0edf7b9b7df77d7223720c3cd205917bb1bcfea9efbd5d7cf7fdef5d22af7fe67bafabefbeffbd4be5f5cf7def75f3dd5776ec1afd9c687ff0fb5fb87e395ee577ddc1fda0bef3b39471198bee17b94cfa8eaaefa87ac34f09c250f254bb5df52b6e93f2bf04e7fc78398bca2f236a3c50f9e2152caa6c17e78e5e39aff9e45ce99373a5cf67af92f7bff2bd7715b08bdfffda659bf345b43d09ed8ebad63a22ca9e59ac9c95b01a96250aed912cf9e544eacdc40b89b8e836fc17ff192182ad671b9c57cb75ab79168ab542f52c97e56857f3f4156950853e4dfc2e719ea81042bf89c404f1704c105cb94ae75f39588a54e75c9f295632f1c54815ce9d716cb673e46f2d75aae68b9d7fd1521639c156b206e7acd8f95d23e42d75d48e7d3291497cd992ff9d2247a6bbaaaacab9a280d638e79542c305e2f75aa169b9d0bed0b9562fd67855b3156caa735c2f428bb5bdd6f95b1766b144a6d751bfb80abbee2ee152d134ddb1866b9f257cf1ff62a4396284a36ff34dc44d86adb244cdf6b49898f83f866e26c32bdb8552c678812c12752d876589fa78510cc1e036c65aa8f76f97773ecb8b6b8b9e0c8fee7ec2022f86cfaefeb85ff7bb4f99d13adab45c96259a0ffd1398160f2c979729562b0631a175eb56d95c513ffe880ebfa8de2f48237ef7b90af15cf00868230abfe808884c667c0afa6c361f149e8b9cdfae720b8519954249bf59058e9a25c2b04a6986f7de3cc73c6e2457962f9c2d72ee7008054202bf33d59156effce3e1c5c47e3657b5ad88c0d8e23911042c0a5be8a250b4348a9b2505618b85e34762bb462bbc48cc1275ae3e715c1d0b4b54c65ac81a994a8c8fdd3fafbaf8dcefbe69ad8f970e225e52090d8b9996ba98e990eec495b83489172f1d1bedf2e285ffe81976427c3b910e18c1563a821dd3eddb53452aaf1435aeea1418f2a6e8687f06a507d80571c2c42a60085b6b10667384bb68b462addbfbb4e20a2192dbe822a753f314dda939376fb3f7f621688d3a77b7b8256f50d76eaba3273a2d9692d2532dca054ed3e100e75e89f37cb928e4f8f5f98ec412276c2e6f8a08c16b8546bf119f2cefbd18eb27aba5da5d501d0adac76135c388b7d310cfe6feda43e306228ff327866e7862688f25b39e619359074c72afb0923b62927b8795dc0993dc27ace4ceba64c39f171384e8938dd711a3fe9aeabcbbd23166ad685d3738efeb3a6ee22797be492797dd4472c960baeea4601a61c9a48b2eeef8c57e3a25fd51b71b1e75bb6082fb8714dc15f3b60161bdad9bcedb841d15a4deb6d0b9e676bb1588bb15a2af86b7b86b4505a08e2d179ee3ee36843dadbc6b8ed8e6a741e811df0f774fda0f070a3fe41dac74ba621eba2be64819211da93be64883c23a520facec19dc04654f4f9d705e6c0c61b195f7df9c9f18e19d70e1bd30cd876a345f53de2290e6bd31e0c3c202ef83491e1e56725f5d9e20b2a0cd692e81f4c3073345ef05efab58c68e646ebfaf0a77b5486d5c23d57f5ce41c970b2df875ae45e26187f879c808a669c98b8cb4405b6a3597157c42430b91978d1479d9b83879994e9be0b9993e271d2542378b0d96f3ee86e534a33539cd765d361627a7e98725d93161936c7f9d649e64c76a7c359bfb2a77860ea2a4880967141ece005dd6204aaba39a356b286cec9e5c2e46f45c797319df23709d70d5558e03af958e53ec3c53eb84512e9d3c4c66c057fc0ff0777d30f7479f1cb24572d83789e4406915960076d779126fcaf3918c984e685e0815392dd7696c8948866bc4654ec98ddd0af168053bca39aac1b9187f6b8bfbdb409d36bc85c4179b27ac0875c70567608273430a1e84a5f1bcb0697cb04e32cf6df822ffb035ac2198daf961d51e8ae5a8133539eaaf916039ea304cf8248df0c75a04133e1c4b0a7b24e32371bc7a0426784f5d1ae3364e130d8d0ce7ff6ae70dde075722527f86280cbddc20c349eb15ce5fbcc01e039e5fed3ce10e8607d13313738abdc23ac5482cdef6d6c4db8f01e36d14267c1f8df0592d83091f8dc5ddbebab8e399262f3778b564a52cdba273c30c312d2143cc446910bd7b6522e6ea44bc66b0a39df2e218e7c807dc3244395029ee65882d736b455e1b244ec760faefa7d3bf03d07f3ed030488863752172c29335f9562460be354e279c577ca630a4e2c397ad07aff86461d8a6e9b0f16a121f65e535d706f1fc02e100e58d75e5b2262a20b3357a6589567e356bce0a196f2df0793b75e26faf8ac2c3f64680c354bcf8d27e7fc54bfde82b5ebc059229b6a94987f658056b3c96a9ced064aa9120996a0e961666626961564a692157e773a2ffa7a6597d0e4f514542364f79e12bfc858e8d2dfdad7fd1419597846735958ea3c514f53ab125ba4bae8e67a67c906619d8fbdc852f92843e4dec2fd2443a35c7d2451e566a1fa029b5ef6b1dacd49ea07359d1f157dbac2e3b5d484887dbced6b9ade89dcc4f22f29b52cf81627a679dc854cb64a6ea66dd03c55cfa5a516c963bd779c60bef8f1673de797d6986e05d25c8af16ddf02b441554efe4738493a7db4eccd1f3b10260aea6000854ab9e8825a1799a24f46bc0243409537b7e58b5f7c0d43e50a3f6c636c1d4de13135ea4113ebb6d30e17be984b765ee9eb7615a887b6382f9aca098ea266f62ab7642a9afa5b84cb41554fbaf4c5cd9e0fcae74ae950a11196222a09a791044cb7d30b60b356cbb0664bb2f86605148b6fbe90473f73c2819c17106d726eb04f3fad7c10ca97ff1ad4782d7bfa6e8c2e1d80fd560bf2a20f6a958325f1c36994fc3241f1656f2744cf2e161251760928f082b790616894b3491c827df0489c49998f0a51ae1c50185cfc21266892e6f1ac6785bdcaba4bacd27af5fa3842d17526a9dbfd7ca32b72caa7f84f77954c8467390745e88e9b94ca7a7bb3288cfafe2758a12d187c6439cc756050a757f0c7da906fd1901d11f80092fd308ff6340e1b3315ee53a5e7d12c46b999896e35d1def5c0dc2710ea6cd729d36fcd48bb720e1ccc590aed020ddd62118d27998112b7546f0713417df9e0eb2b9a2c3af44ae6a5a2b8af1e018e7631a54e834e039dbecc68ac1fc14ab050762488fd4207d2f20d2222c475e1536475e80a95da9cb343b0653bb1853bb2aacda0b759279ada39a21b50ebe194cf05ac7222c9c1a2c9c352985731046aa362ca98375927904d769227872a760117c0826bc5e237c6340e18762c21b34c29f0b287c31267cad4678ffcec1841f86095fa7115e1650f8e198f0f51ae11707147e04267c8346f84d01852fc19cfca8b04ebe1453fb688dda3dba0453bb04537b6358b59769246789296ee95c49e49ffd146cb105dfb827b9b9a57cbb1edd2aa244e1635d4aa5ba78e125f4b13a950214e56598371da7f1a66f022682724cf8668df0c302baea724cf8f11ae1a70414be02137e824678d75d82095f8945e69690915981093e9169ea82638477ae16692c43ac05e50b76abe5375bf9a609e562e0ba44f8bed7e1a406aef90af00ce9bdb5d2a72b1d6f1fe75c0da2f59198d627e9b4e623afbc13d7ab37bb4d49b719a29b5798c146c85af788407aadc27ce0648d0fdc17d0c12a31a34f09e903553ac17cbeffa9c9081e880baed609e6d5c3d318523de47b1a75101283540f5763d8cfd060cf0b98f46a30e1676a841f1c50f81a4cf8591ae15b020aafd509e72533df812a54c95c87a97d8e46ed495d83a95d8ff9f9b9bac4cded51fd0bd1d94d9024d08085799e2ecc6ee234d1f2f820e1afc5809eaff3838040d7617eb035ac1facc7b05d10324bda8009be50171f1cd4e2462f703b440e0f58a41c85c5c0459a18d81e30068ec6845fac11deb55b30e11b75c2792e7b09437259beeb56f046f831ba70b8735c964c64c71923d98409de1652f0b198175d1ed23d8fc3045f1152f0669d601ef77c732fffbc382e20c8bcb8e3312fbc4ae38593760de685276099ccd56133992d98dad768d43e38a0da2762c2afd508df1850f84958cabc0e4b99d7a794324fc6dcf106a6c92df9acac25ce3fdee3c0477c57b0f9a232cee78eae17776a4405be246019760aa6c58d3a2dba376a91edfce615703e62e0ced9485d8753311d6ed2e9b0abd421d7f95f2aba02f83beb9ddfa96b701aa6c1cd3a0dda81b8e02b3bf8a2d120a19d8eb9ef2d1af79dd53d98fb9e81b9efad98fbde9692fb9e89657ab76b32bd960133bdb33042776808b5ea118cd0d998f03b35c28706147e0e26fc2e5ddc06147e2e16b77763717b4f4a717b1e961cee8d9735e53471d6743ea6c57df1b3a6f14d98356dc574b83f5ed694d78459d30598060f24ca9a0e12e1059b857e21e6be0f6adcb747cf60ee7b11e6be0f61eefb704aee7b31868c7f082f4c45ef128ccea31a3a5705a4732946e7318ccee329d1b90c33e2098d11bf0434621b86fec990e82fc7b47e4aa3f5fc5ec1b4be0243ff3486fe9994d05f8919f1acc6881f021a711526fc398df0aebd8309bf1a13febc46785e40e1d760f85fc0f0bf9812fe6b31e7e41fcd408bb5dc262ed6aec3b47859a78557ace53461b1763da6c32b3a1d54b136a1098bb51b300d5ed569d09e79c55a81e8b55b1d702acb8d9803bfa67160be25471007be0973e0d731077e232507be1933e24d8d11eb031a710b26fc2d8df0ed0185dfaa13cea38b7fbf224cb9701ba6f53b1aad67f50da6f5ed3ae1bc7b847fd12254f7c81d98daef69d4ae09a8f69d18ecf775698b0f0bc49fac56ec3c5a23a693ad10f94ead98cbe9ae492a13c380f399bbdfa3bb9eb5c4b95a2656baae14e72adf2c61cbe420dd783148a7d6c26e60eed65f196290dcddec9b4ba91652f80ae955e24a9d78aa1c48d60f0356c8e14c38701874cee95d58047da089a0e30246d0dd98f00f35c2af0b28fc1e2c33da8e65461fa59419dd8b19f1b18ed06ec18cb80f13fe8946785940e1f7eb84f3c4ba2399cc284ed7f5031ac1596213a6e6d9832d76a79da6dd83ed531d2fed3c19fe0992f87bb085d7159b53f320e64b9feb525b405f7a48279c17115f842d221ec6247f1956f22358f9f05532fe1f27d37c54e7ff6223a6e5cde2ff61f6c08aeff95f27edf9df08cf1f15c7f3c3edd4a58f89c730e7f95d58e7791c739edf87749e27b064fa074d32fdb55fb064fa24a635ff16514c95882f029f221a5ae56219826e014b86a82e65049c6bf414a6c7b73a3df81e1ac1e43f8dc9ff2e64ec3c83c5ce9f34b153df3f58ec3c8b69fd3d163b3c8dac945544151fe58dfb3ba43a13ec39ccc83f6b8c5c3f209891cf6346fe4567244f816a6e845b9f4d7d9ecc0b58c87fd585cc5bfbeee728b21af7a9ce6adc04659e9320ca58d085242f621afca0d3a0b75683d9e2af7ab162dcadf5a7b64ee8254c97bfe974e997a42eb11b1907d1e965ccf1feae71bc8b770fe678af6006ff23649ef02a26f8c790825fc304ff33a4e0d7758239e79f349c1f0ac8f90d4cf8cf1ae11b070613fe2686e4979048ded209e6b9cfbf92111ca731f4b64e306f87febbf186af1dcabf691cbc1dfa0e86fd570df6e241c1b0bf8b19f15fcc88ffa564c47b9811bf698cd81ad088f731e17c932ebff0a7060713fe01e698bcf612939df23561450c6e0b5226ead82a23cf64234581572d7f47cf3acf10676ef133466c77502b4a7d37cbad13b3d23344c6ec2dfb753b95f834cf1a5fcd4085c33b93dc22767963769e2132f3b280d3113fc458b4d0b1e05bd9c0bdc5dc5aa657c07a4b70d7090d2b99b772d4d58feb9c48428ef374d099fadb318769a97198ae011de6232c49b58a2049aa75249524f53166441b8d1179018df8048be9b6ba98e6b3d1f55da48b65e72a5fe9c05b17ee9634f1e23433eedd91620aaddbadeaf975740a582d3c4375a146dfab177e55af4945cb8486ab4107ac2b7bb56c9d06f1af1d3a7abc75da2e12b275fa2916e9ed3591be7448b048ff0c13de41237c5b40e19f631ed551e7517ca1c75cd920a890fd05de4647413bbbbfc00ceba431acc7d060867d8919d65967181f75f516ae47ef68e39aba569a19ccc4af302dba605af0f1c66c31bee9ff9a4feaa39e5f635aeca2d3a213d0629a1c772d110cea0285fa0d166a575da83d41a858e8fc3acf0882b5bc7e87b959378d9b751a16cccd7e8f19b9abce483eacee6d5c52298ce179f286c65a416d0a0b42fe8019d85d63e05b01d3d11f31037b44c2b500bed509e6fbb3f54c46709c1db4bfd308ce125be7f32528cdf5ddb025620b577794d1dd25ce2b0079f136dab9cf53f73a59b056b072e9fbaab84ded3b63bd2241f797ef1de15dc77b8b379ac722ac7bf94f982ff6d125b65e2047f1762b839b92a49ea37e8f69d257a7c920a0c96ac1c7b5bfd8b9c9fdac46f0aa6f2c81d4fdd4f5fb33a6df6e3afd3a03fdbc0fb5a6b236ed2f58b8fd12c5101e7e6ab9fe5fb14cb1bf2e531c1e2c53fc01337380ce4cbe0dc18ca83efc7a39ddc1ad8d476fd11d7c8f9ebf61a6eeae31f58c80a6fe1d3375a0ce5491ab0450fd1f98f40c9df4b68dc567560a987ec4300dd2605a3f2218a67f62c2076b84bf1750f84f18a52121cbe09f31c143430afe05c3314c83e3a18038fe85091fae11be776630e1ffc6848fd008df1250f87f30e1991ae1af0514fe2b1699237569a99e25b75958b83957ee18c692a8595c66cfc0fa2f1645a33451b4236014fd0f8ba2d1ba28e2d34f6327c10531e6375d78bcd36b0cd6e93536a54e2f16d184c38bbd71c9e4239b70c1119d606e70960e182f7eb202016a81c9cfd6c9efc098d6a38384d8120b713c56438a758139c2d3d59e89de9d609ede0ad32447a70997c05b3e414b82d69a50b2c4e7c6f8367fe9da98a9d839e3dbcf04df942937c27bf1a26188f4a16d3be589b653cf18cbe2858fb576dae8e2879f4e88f0fa74b44afbcfd9dc765bffd75bc4444d6b3c6ada620e901faf91e066f095ce5ff5d2a8a09d62edb07027627d8efa70ab65211024ecf63a77145fa55b98467784c5d662e97ec1dc72922603cf12df5eeb1b634732a1ede1c86bc30b1cfe334efdb44536c4df53b8796a2161eede01f38abd745ec1bbedcb4436a83a4ae7a6e00d1d7561f2f27bef48ec6ae2164c53d8c7594ddc0933681fac6dc3cdf17aa18318d21933645f8d21ad031ad20533643f9d21eda42173e46495a005e42e98299335a6b409684a574cf8148df0b6018577c3844fd5086f1750f8ae58244cd34502efbd833d5d5e2743a6acd7ef230769c7887bb9f24a5ee39509f24abebcc2fbe9f8f94479be4264740d7243b732716f92736f64a0c8ee8e59355d675517f11c1c8bc9487993e11eba82407c2e329df5926962e0b3368502a020c21bd3d180c621b5921948ad245ee85836dd53c72d83735b92466eee736efd778128022a9c2bf340df6a5d0a4c676afacad58f9eec2c4176488ce5a9ea8751efa54b27bc0c2c8c841cbaee8d49de3face43e98e403c24aee8b65b4b335192d0b98d1ee8665497342f689f5c378cc0dcba33f26795e58c90330c9f3c34ade1d937c6058c90331c94561256760921784953c0873bae2904e3718537961589587e824f346e2a264548e337e3b1453f9a0b02a0fc3281f1c92f2704ce543c2aa3c02937c6858c99998e4c561258fc4241f1656f228cce70e0fe973a331958f08abf218cce79684f4b9b198e0a521058fc3589484659185a9bc2ca4cad95885a0b4092a04e3311e656179e4e824f3e7cb93e11167127cae4e307f7e793282bfc105e76131b822640c4ec004af0c29381f8bbd8ab0b137118bbd2343c6de242cf656858cbd3d30c8952121ef8909ae0a29782f2cf6aac3c6dede58ecad0e197bfb60b1571332f6f6c520af0909793f4c706d48c193b1d8ab0b1b7b5374bd10839cd308dfee3ffd4bbe75e3d14dbbf4bb3e99b81889139b8ac54543d8b898a693cc476dd626a3729c4f024cc7fc725d48bf2cc004af0f29780696f637844cfb33b1d83b2a6ceccdc2581c1d92452126786348c1fb63828f0929f8000cf2a6b09067632a1f1b52e53998e0e3420a9e8bb5b436876c69cdc3343e3ea4c6f3318d4f08a9f18198c65b426a5c84697c62488d1760824f0a29b81843717248140b318d4f09a9f122ac65786a13b40c0fc2709c1612c7c1188ed343e23804cbe2ce089bc51d8a813eb309402fc6d43e2bacda87616a9fdd046a1f8ea97d4e58b58fc0249f1b56f2120cc8794d006429a6f6f961d52ec1246f0d2b791996c82f0899c84b31c11786145c8609be28a4e0724cf0c521052fc7045f1252f00a4cf0a52105afc472e8cb42e6d01598236f0bebc84762922f0f2b79954e329ffe7b453230e24cffadc49a9657866c5a56612cae0acba21a6371754816ab3157be26a42bd7e8fa52063ba79115ac39fa521631b7ff84f77be436712fcab511be9b4434ab2c3e7d23329ae15be585d328839792de2f644ae575113e93844e0b6c66c91a5dec0f65cdd69376a01386bb6ea3563ca1d689369d0f5caff38161dce27171e837855e3e4f88e70e370877a05608738a5a2c7bbc316cf65887e5e83785ccd1ebb1ecf1e690d9630326f8969082d7629d85b786ec2c5c87c5de6d61636f3dc6e2f6902c36602cee08c9e2284cf09d21051f8d41be2b2ce48d18e4bb43423e066bdaddd3044dbb4d188f7bc3f23816e3715f481ec76179d1fd21f3a2cd58e3e081908d83e331c80f86857c0206f9a19090b7602c1e0ec9e2445dc565b8731ae15fd63661d773b502a6e9aa2e8fe89869eb0f8f8afa43160bb2f3792afa6235889374d1ce63e7b164a29d6b8f083e5927989f3e1e895d15a77e82ac8a3b05cb259f68825cf2544cf8934d20fc342c77782a6cee70ba4e327ffee9646233ce6489337482f9ead06792119c87bbc99998e067430a3e0b83fc5c58c867633d07cf87ec39380753f985b02a9f8b25c6179b28319ea70b80af3b7c2919269fe182cfc760bf1c12f6560cf62b61615f80e51daf3641de712156febf16b2fcbf08e3f17a581e176392df082bf9124cf29b61255f8a497e2bace4cb30c96f8795bc4d57d11ae19c46d2b9641aaea84a6dc9f43b49579ede8de8973727a3035621ba1c4bbdef3541eabd028bfcf7c346fe9598da1f3481da5761c23f6c02e1576339daf6886669e974711abb15dd5cc6371e5b272278958cfa71623f8242e7fe3cb1b99dda4a4e5f6fd64d0d5c2236cff35c6baad8eaccdd5827d89773afc1acfc4867e5498d562e746af03cd1b909b44afc5dd8b8f51adfc0c74da0858d4f16347ee7227a27ed5ac96381b85be6486c107671b9d1f43c09fcf9607a60928a195fc0ba42dc8d660a13ab9ff722474ed05d2baec5487f8cf9130cd1b529d779c7a5c5b7015ce2f886bb03a86b6db1fcb6885f5bef5dfc7a53f9d37598959fe8acdcd7672564eeda3943c45895b0d1af65740cc13bf1d20a7c2b8865d76396edd059b65f52f137456c7f55c1e0868de162cebb13c4b61b30db3ed5d996efb36d8e889d95d2327eb6bed92cb911b3e4339d2567a4393ff3dee11b9eaa8d07cac00759ea02783964875bc1cb920651cd80b91eaf60355dde761346fd731df52949a58dd9ccfd68b009b9dacd987d5fe8ec9b4de855fcea1a110cb7caad0e7b3ba8476ffd1a36566fc1acfe5267f53e71adc6352d12b6b85f10706d54a531bf5a2a09c5a68bd463f356ccaeaf74761d12b866b740dc89aedbe924b8d7e006246aa3f6d46b82a9c4f36d188faf753c0e484b994d5d9adf8ed9fc0d564f09e603ca87bded98fc1b4707f1882096dd8159f63b9d657b22962d14e9b352d64ddca6b66ab52c92a9b82c263668da28776216fd5e67d10cc2dc57c5aabb77dc32e6eec7dc7496de8559fa079da57c93a6e4738a680be056ad9cc92c11cbb5a23554ea94b81b9ad0aabb31abfe984c9b203a5c5843582862a156ecdd56ee5886977ed1329aceb27b30cbbed559362d61ce995cab00cf43e3b55953cd29efc56cfc4e676339718dba5e6c11bc5a6c1f5622cabb1259af705363d3b411532945efc338fd49c76961b3b53ce2130acfe17e8cc3f73a0e53d13c8cb79096390fa9b4e16e531bbfc4d14b6aea987e00b3f0cf3a0b0b035a7890f0e86a24469ac3de07317bffa2b3b788d0b3eb52287f9b82c0431881bf3655b9ece66d5340a94c6fd5c398553fe8ac9a19d08f0b58adc8a96b8df0e147305bff86f550048dc119e289586ff4e7afc9cb0d62dfa3987d7fd7d9b757889a63bd2879f90684cb653b0fb7aa38e6d920363d86d9f48f6071e6f74ff88df444a98cb2a47c1cb3ef47ccbe206d46d7d699b2cee4dde5231ef16b874d55737c02b3ef9f3afb86b2f8bd82c50e610a2d9fc4b4fc297edf5e90585890522c50fade5398d53febac1e8ba6ade2c6a17a9847785fa4e5657f83b6de995afffed398debfe8f4de23618bab508c0df2dec74af191b102562536598d6dffc68b81d45b90cf60f6fc0bab2dc74f23bc353c5fd420eb34758864c61278cd6b79135af82c66e1bf936923ebc7060a85efad112b582aa55736e7f8c073988dffc17aa892e90748c6cad4728cd42d7d1eb3f4579da5b3928a4dff488f9b0e95ddcd19af2f60d6fe5767edc109e395b6679cbacffc458cc6ff74340e256c07aa5a4dea3d4138ad20445ec288fca62332314e29eaaf274797a77c967d9daf47502f297a9167105b5ec66ce11faed08e1ba4660b8f33f8114fdc16dd0ac52016bd825914d15974414a35bb6216fd094e5e4b4d367682d81d6fbc28d18754137d4695ba9fe1552c1e5a04f3acd81527cdd5327d0db3a8a5cea285a845b1adecf8257f327d25c1fb53522f1f5fc738b4d271181580838a53f58da6a62ac3dec0346eadd37878c212dd1be72d1757f93ca8a669e9bc8969da46a76998b2a544cc22546d348af4f216664b5b9d2dfeb98f58fdb8c0b0baf1db9895ed74561e10389f736b3db17763e7c6a8cfc5e1f1192b658ae8afe5655c109bdfc16c6eafb379982f66bd30a953d3bb989e1d747ae6f8f484f9935fe79952e7645b23a9d635dfc32ce8a8b3e0b066ae7d430f4c36e5a9778250791fa3d24947c53fb74085182457f12cc3525cd3e4261f609675d659e6ef53085ab308dfaa4cddd20f314bbb249336a7099f75fdb31ef415bb3e9ecff212d8a74bb7fcad20166cc72cd84567817efe2b0f33881f42fbb0eb4d15431f61f675c56228784bcaab8f78f70b35e369a9e5ff1f631674d359b04f80fc7f41c2fc9f72d6c927985dbbeaecca0f1533faef653655cd7c076649779d25b9a12c89fe5066d3a5934f311b7ae86cc80b6d03fc4666d359f1196645cfa64bed7cdc65a11c85e569853fdd74167c8e59d04b67c1a4942d80f766b2e80f5a369d355f60d6f4d65993789661f85e682f0f6caad4ff2566631f9d8db313dae87d34d1afa1fa6825ae37f6c1c578b6a6d67afa0ab3baafceea44a37f6ebd6181f3f032e6f68595b2e65e59f63566e16ec9d4edf484536b7725f6ccb6cebf88f832748190e28ea5ae16eff0567656a6732b92dd985b8c6b6c318d8b6a5d79d779f8554e6cf0745fdcd836529fc3c525f46be176f3889f11110e567db43cb29cf997954f13f22b65da54de3a4e107257a0f0e5f2e39c12af42bca516c827b242d74a1c07da89d0bac4361d8e2c788f884f5743590e69fe21929dced2fe3c56fbcb586d91c5bb43c5869da97853622d06f0d05aea7da8770c59983a74babb02549d2fc2f7d55a2282992f3a0ff1e55d0943f67ff2c61ff2582140b5af138a5b08b2009db8bec2dddc29f6b5cc1d78dee1c86cdbba45368f91dd29b1f12d21a68b7a428d03ce9da5adca1c0c609d1508f9b22985702025c2aece89aa02cf1215352ea04434fe79b56b1e5b6505b0bbda79c0322881f510497509cb66defc699bc175ede8811b44096e570d382eb0da79894fb16a1057cbac80b69479d006537b5b74f29ce1fcae9033f5d51c4ed7eb6c0097d9c9033784125c2f511fad4bba58b001de5650280ca584d71124d5795123183660caecef611a4689a93dc0e42dcfb001d1d65e1ea2e1f4882a1adb036e1bda0644b38678884650226a2310d559958db7eaecc1c9a484c3b7809cd7d82c52732bdc1eb722512e36303eab8b9784f3658fa00d009f0279d4484a80ed401ec5d5e4d34d6c00b4a39b076814750e354f8ce77b7b7fd951093d05f8d0e874f9905a4e6b03a09bba7b80c65002e23b2aab5a7a015b2fac6e68ac5af259a265a2f42b121e5626fcadd209d00688fc47411c4b0971006351f0782f18df3aa3bc7173f332cbebef3d40bfd8384a949d659ea6fc6d832c31dd11421b505d07f2b6ac7435b0797b114ed1526d469b6a66bfb4f5c0655337b02138b8d67e8a6872f3511f6f57011be06d047d61e329e1750225aab79cda5de86f03a8a740ed2c87ba7b7a8e487eab7cbb834d771eaf1521d9006c690b0f586e7a3b0ca3279d9659969f55827efd3cfaee695e9570d7fcd85cd178a9b5076d02b5b7158841b50611b83709ccdbaeb1cea9c3f1c5533680fb0680cba704d70524535b0741f8cc0d056b22fd909b3b3abe5a88b1bb1db037f0b249d4bd67450e34bea631d99d6e6d00788aa8e4b66ded13ee9fb49ffa049760d4f1a938bb30b74dab96b3bae56fd4d41c3e63c538cdf780536b3253eedfc84c98cf65263d2c9c1978482f33c5f9219949d53a33437658640698f49319280bcc4cba2e9319a800cf4c293fc90cd4c4ce0c5481cd4c6afa4a66a0391b99815bb63a9df151facc98019fccb8cdc14c6d177ea6b65336131992cc8c33a29b89f4806726e845ca4c696c26131911f4e68aeae77866f3b9a27bfe7f3e8d339b4fe3dc8b43e01fd3e13f6e1d626fea3ac492c618e3f97afcfd0dc63b25b94f87fe313a447f974ad51574dab48faa4d7449c6c0546a14a3c1d48a7d4cc2996325cec500e7be26e1ccb512e7d100e77e26e1ccb312e7a500e764eadecb25324f8cc6ea9696fc31327c6da9f0fdc43c7c53d2e18d2b507f84ea2f6193583e1dce4e5438ff0b704e3509e7042b71de01704e3309679e95382f0138a79b8473a295387f077016988433df4a9caf039c334cc239de4a9c07029c334dc2996b25cea300ce5926e1ccb1126719c0594889b3a7c4592afb8cfcdbf6b8aabb5bc264d3816c4d05b20d68ffec4f3da54ff53a26db03cc9faf15cfdad7b09c063cf4004ab00319ec124e7e48c466b88300dcd9d433dbe275824071bca4b7af053f086400732851ee2251e6a7bffb83cc0f6f077e38371df026a51fde6754f01e00f0e651c2eb9da00c8f4ec4a46d73b264fc270073be4930275a08f37b00f3409360e65908f31b00b3c82498132c84f97b0073814930732c84f91580596c124cc2813432985f03980b4d8249d82a2783f93980b9c8249836b670be04300f3209e6240b61fe19c03cd824987b5808f32f00e621943047499895ce4395e2a8a676c26d56e37d082776ab56d2feceee54c85782ee8e4329917710c8578ad992eeeccd15029e7d9d1c9d80972e6ececeb6e80dbe09bd6f1315ca55c0fb0ea344392226c1bbbb59cf60eaeba1539dffdc3bd78aeee006166fd75e52d864b9eb8100f6e1e9f0dbe48a2a1b51ee0eb280232851eeaec90292fd6a1229da815468a7012f5d42eda553c4e294d5724a3edf84998f0f55cb653a6aa182bbfcc3be82aa15f0d2a5e9d8be72bcf3bf4a065e22ca777ed5e6f99cc7018425e9403871a743f80840b88c7ea36877e0571da70815dceff5d83cc0fb1080586ad22c77d2c95c6438f341215366124ed2d947643897029ce526e1249d1b4786f3348073797ad66064a77f1c7d372a7c6f81bc72853993616cec90db1378e2ca74a084b3e1663b95f0997205ed72e7a5f5e928c1c950ae075e5941df510cbbd896b05502dd54b1267795143583f1cf7357c66ea8624112ef0c601e998ef677bd58e75fd7d825ac162caba3aef7683ce5203019da2b00da55e918d04876623661fe49362d7b1f00b3d2249884436d6430f70430ab4c82493871860c661e80596d124cc2295d6430470198ab4d824938d9900ce61e00668d49306d5c173411c05c63124cc289336430870298b526c1241ce72183b91b805967124cc2c9866430470298f526c1246c0191c11c06603650c2cc60b1fd47c1661c1196ef64338e0e067d4a6b9b73c69cbfb398301725eb2ace04bebace249884e53b19ccf100e6fa74f4bbf3deceb54c7d923a4d03bd64f8fa007c1ba83f6dabf0c54ee4e2c2bce5d2368f9cbf02801e95aecf8fee5c930f8e05088f4e07c2fc9d0ee15e00e1c6740cee46ef88e0ce75f316ecf3fd576d9ec9b103e03cc6ecda2561273159ed720ba85d6e4ad76c236fc4120eba91fb28d918d026e0a3c79a3353d8c605aa7b0394c7a5ab529468d76f9bf3cf4900e86693368e9a6465cfd1bf00cee34dc239c14a9c37039c2798849374113519ceb301ce2d26e19c6825ce4f01ce134dc2996f25ce6700ce934cc249fa9d01329cfb039c279b849374637c329c6b00ce534cc249fad906329c87039ca75257e493fb985191508d7f4e89b022bf3f15d05c00f4b474ec15d70cdf19205b255905e09d4e09af1f4b76016af46a74c2c932df50413d0af41d9d612254c20e1032a81b00d4334d844a38e1900cea5a00f52c13a11296f064506700a8679b089570320d19d47d00d4734c844a3851810cea2400f55c13a1124ea521839a0ba09e47093597c50e7a44af2a9ac6bc8f20ba86447f5231fabbabdef72a8b458d56f5fe134642365524f05df155249c6fceda4d1b7740ce03febcd5dc3572845318c9c647df055e7a81399bfe91eec540e6a71b00cc0b4d8269e34edd270398179904d3c69dbaeb01cc8b4d8269e344880600f3129360dab85377058079a949306ddca9fb4800f3329360dab833e23c00739b49306ddca97b3e8079b949306ddca9fb1400f30a9360dab831d0a900e69566cf62b67157ee21a0ed7e1525dece12afbbc752a568c5bbb22b28370622fb7c23037e7975ba37e64dbedbc3c68d81f6063e794dba6632cf113d9aab7c3d9ed39dd76a458836cf64ee077cf55a4aa05de226f23a3a741da8d0b500e8ae6bce050af6efc3d013a0bc3e1d8b5ef99781779e45af4500df0d66ec04ef8e1ed5088f75c785483d93ec7b98e78102e746937695256d4cd26d150070de6412ce1c2b711e0070de6c12ce5c2b71d6029cb7988493f41b6f64382f06386fa5c43984c52e3b2c60eb199f09d2c0d44ce579ceeb658cb7ca8b0458f7fb1a95e9a9c077a382dc0394fdb79934c37e9295bb28fe1be0bcdd249c13acc4790bc079874938493fdb4c86f31c80f34e93704eb412e76700e75d26e1ccb712e77300e7dd26e1249df94186f30080f31e9370e65a89b30ee0bcd7249c3956e23c02e0bc2f5d3df10b4425bdc1913c85f10fe42d920b12cbc482c472ab7be29700a0f79b33ebd8c6c9346340c3f381748cb2ab3d14dd25b2cb44cb5d3d64fbd66ba5c02f1f4cc712d966f80c1419bc7d01bc8728e1f1fe8545ceed0ab13a639e588d512b04f02e8f22d19f64e377b47605001f3677010161094e86f62680f61173e62291b67dc812faaea0c879d42498364ed3ee0e603e66124c1ba7697702301f3709a68d35cb2e00e61326c1b4719a763b00f3499360da384dbb0380f9543aaae913d35f4d27ab0add0faa424f3767db3b6d7b2d6ca242793ef0c367d2e1877bec44cdc537811f3e4b096fa22647c467b4731fe5cd4a3e956bba50b5540456e3bcc7835820a0af9363ec15cc9df0e5ed11463af5ab77842832be0391f11c7df1b452b34ff2028749292b950a2d17dbacf1090bf6f56e7604309f37774e3c61c94f56784d0439ee0be66c946e635b6934f0d217cd98485b2c0ab36a91fcb9b82a5ab4649b05d6012f7dc9a4b975a46bdfc8f2d3a900e7cb26e1ccb112e79100e72b26e1ccb512e75680f3554a9cfd93ce4717c9561517954b5b23bd8eaa465a03b0be968e0e93e4868873ac5c8add0060be6e124c1b97626f0430df3009a68d9b51ad0630df3409a68d9b51d503986f9904d3c651cee500e6db26c1b47194730580f98e49306d6cb9970198ef9a04d3c651ce7200f33d9360da38cab90cc07cdf2498368e729602981f98d44e279d0246d64e1f07707e68124ed2ea1119cec301ceed26e1245db141867313c0f991493849170f92e1bc0ce0fc381d9f219fc076b6cf906f631ec24fd2b1a23d71bfe634e6df68650aab158037d0f6723e4ad5cb7912f0d31d94900748c895ce431c70b9dc32804f6270370a88ce063c5348c1926d15b00480fd341dfb252ab095626a43bd10e34d6e88573bb5b1a23f07e0fdac39c7e1d3f61914b249640ca0fc9c12e52081b290d5893d41f8449b0a311f84bfee79eb12f9b9723e2baad4f9dbbd3f83f1994e958c708b4ab2ba407b50907d61ce62431b93fd6ec057bfa444d923014a6529e92ca63caa52ff4c80f12bb337f325ec6c26dbcc7701c0fbb5b9ebe808c73ec9e6dffd06f2d26fd2910160e5be970110e6a36419406be0a1bfa3de6e7abe6cd1abc5da85c23379b2b7af2cef0afceff7e9f0bfec461f2c130d5235c9dbee4d541f0618ff40dd4fcf81b933e99bf5bbda73a8604e0030ff68ce821ac28a11595ba81ae48bdfa60365769c16bbdddd77af02affc2e1d3da0793b5d0fe84a80f04fe9e89ce3de5820aa3b0d4289d9ce2ba522bf9c27561cf1fcb34ed4356b98cddbffe403b0df9bb38ac3c6295f8500e59fd3b10431cf5704d95c0daa05f0fe42098feff93f8fd534567878922e10eaf224ad92b9ba4b06926cc14b3700f2af26ed373789b21a44b6dfdc3f01ce1f4cc239c14a9c57039c7f330927e956e764384f0738ff6e12ce8956e2dc0e70fec3249ca47b8390e17c10e0fcd1249ca41f3121c33903e0fca7493849bfba41867335c0f993493849a7c892e15c0c70fe9c8e6f69f1d5943bcfb7b4a6037cbf9834e9703c655b9c0ce75ea0f7f25f26e1245dcd4686b304e0fcb7493873adc47916c0f91f4a9ced848072b92daf3b8bd3be09846d40def82b25ae110cdb9e4a4d1f70a7bd5689bf79af51831059200073b38a05b534cc2b2aa0829d0d60ff371de5f87851e949733f26d984976f01beffa563ac870f54cc647cf081f75dae10a33db5560f499c0010fe66ce24411b379bd8031434ac2571affa7c91079631358d159b6240f8d165b222a81df0c90825c870f3d86cdc47ee5280b605255ab55035b911c85c2bf7f07809c06c69124c1b07743f00305b9904d3c63d3c5e00305b9b04d3c63d3c5e0430db9804d3c63d3c9e0530db9a04d3c63d3c9e0730db9904d3c6353e4f0298ed4d8269e31e1e4f01981d4c826963c3f24300b3a349306ddcc5f01300b31325cc0c16760d1a619b88ac4b6e21e804e94cdd0912af3fc9553d5fccdb242c8e5a53813c1780ec4209729006a4db9bc93b3aaad9fea2dfbd26ee283a2160b231f4962023d8851270b0c9d8363637b300caae942883cfdb242ca2c83cf35e80b39b4938f3acc47925c0b9ab4938275a89f36f0067779370e65b89f33d80b38749384917ea93e13c04e0ec69124ed2d61219ce2d00672f9370926ea14f867305c0d99b12273f51fb1fd8374ab90bc0d4c724af9b44d9e74ee675bf009c7d4dc239c14a9c37029cbb998433cf4a9c67019cfd4cc239d14a9c1f039cfd4dc249fa6575329c4f009c034cc239de4a9c3301cedd4dc2493a9a4e86b306e01c68124ed20f8c90e13c0ce0cca0c4a93e69a736cfe51c1a181f0df26f99eb5f8341d8d34e36c7783018ca18448975b80feb32163b6f33f9199e84a8c95a4ea703d4832951ab19f193d8ceb6fbd1e3201318928ed9c7ca5beb84fff12c60868457ae1dd3b47773f24381770e4dc7905b728b0d6c9c949805500e33778e3ce11406b23cf46d90010ca744abb6961aeff3d534e49e64f0f603f046983dbd8670c627d9f49af920d967a6a3c20f378ad42571bbcbfad780b78ea4c439d457d65732b87c50ffd59799f2e5b47dea612415e629c06b479933d5c6c6e98b7380c78e4e47feaa3c9627fc32dfb2c39dafa9da1b78ea9874e4af580d35766710c20e15329c2301ceb126e124ed9f22c37908c039ce249ca4bda76438d7019c5926e1241dc823c37909c0996d5267f404ca05b1649dd17781927ebc4938f3acc47919c0996312ce8956e2fc03c0996b12ce7c2b71be0170e699849374473a329c0b00ce0926e124dd9b810ce7d10067be49384937f823c3590e704ea4c4e9edfad50c5dcc645d207f04f826d18fd217cace396f772577947e67fb5c687780758f740c7bf080978b04ae6457cb47ecf3c90880b7673a668ee03924ec2e4ed367c2f78c10616d0f9a947b35ff6a625525b26fe43d1b80dcdb1490364e61e80b40ee630a48c2914c3290870190fb9a0292b0db8d0ce42200723f5340124ea92103790a0039d9149084db0190813c06809c620a48c2862219c80b00c8a9a680249cd24506f25400729a292009a71f9081bc12809c6e0a48c23dbdc8405e0e4016983315d6c62d2587019433ccd91e6d82957b1ab70030679a04d3c63d8d5b0298b34c8269e32653ff631ecc429360dab87c20023c737f9360da5800fd0378e60126c1b4714fe35f01ccd926c1b4714fe31f00cc3926c1b4714fe3bf0398734d8269e39ec6ad400134cf2498362e0a680b60cea784398ac52e632915e3e2708155d08558849901d942accd00f981d4a3e5de27ef0aa50f57382ff38f3cf1d7c8e0912d12ec0272d2224a7803987ff1aa7ea95531ab1553afebd87221ac8a7674722015d86a00760125d821311981bb44d05bb9ce05f23946f1f35b1b2b55f340d22f4ee72e212e50be68906704d3b53da2f66e787e32c0bad09c458236d65447806c60513a3607809dcbc9e7b08468c972d84ae0a507a533f157384a2c62de17d8b1295fa4897f1315d6b301d683d331f97082cf6f6d9e107b2b48ee87a4a32d95dc58d2782b1ba6c5c0130f3509a68d0dd38300ccc526c1b471686e7f00f3309360da3834371bc03cdc2498360ecdcd02308f3009a68d43738500e6129360da3834371dc05c6a124c1b87e60a00cc129360dad88bb42f80b9cc2498367678ec0760969ab49307691144b614703cc0596612ce1c2b711e0170969b8493f47bec64388f0738979b8433cf4a9c57009c2bd2b11a9d4fd95e0b7a32d3b2852419bea9ccc3b792125f0fc63fe95422f789e7a2aa9dc7573a8faf163dee478901e10a71661fc6d600630525c681ccdbd8d41d4ae34bfceb1c754a050f3ed23e85f13d0ef9f04589238027f032a656acd75b08b718c03d321de341a96d164dd826229bca700d40bb8a3af9c72b8c94a5a4e33f7911228c678042a8921263860663b0d94a841d7464b3958a00de2a733300c2f122b20ce02390015453a21d24d0ce12fe59c4f8606fb92caeca842835d96667db97a60300bc3a1d392c362f649af058e22fc3cca0ca617b802ca0261dfd4db082a56aab5efdd5ee0a556fe0936bd2318111c24c9c05d80bb60080ada504abbe5f94cb76b6ef175d0c10d699338fcec611f75900653d25cac101502e70c2e442ead93ce72fd5e2afa32d966651154b3d41b1d44089b82f8b9e4f5723ba4b56c6f5591bc795d603a06bd3d13b9afcb7b3097192edd5f923c802d699849374412219ceab00cef526e1ccb312e78900e70693704eb412e7fb00e75126e1ccb712e77d00e7d126e1249d314286730ac0b9d1249cb956e25c05701e6312ce1c2b711e0a706e4a47cb3d5bfc768f7c006f0173bb47ecedfc2801088f6dce3dc1d29657926daf761568051d67cef66a36ce949f00506e4e57c2763b42b8a0f53251a7a14bee1b2a848f82847d7c3a863038c2f2c64d03d46ddb7b369f06184f48ef28e6cefe85d6be00ed1673078809d1920d105f04d09e988efc3367a71bd2180e109e948e298afc7339699fa24836fb2303e03b393df8f27c95229bbdef6780ef1473b6aacab17248ed3a00f3549360da5835bf1ec03ccd2498362e62bd00c03cdd2498362e62bd16c03cc32498362e623d1fc03cd32498362e62dd0a609e65124c1b271b9c06609e6d124c1b17b19e07609e63124c1bb7f1b901c03cd72498366ee3732780799ed9ab336cdc4b7614e8613f3f1dedf3fce6e8de201b365b07bc736b3a7ad7c73726f732e67e1998ff6d3bc6c700c60b4c1a0f27dde09c6c3cfc6e80f3429370e65989f37280f32293704eb412e75f01ce8b4dc2996f25ce7700ce4b4cc249baa6920ce7c100e7a526e1ccb512e7f100e76526e1246d5a92e15c0e706ea3c4a9f62aced98906d32a01bccbd3b1a48a4f8599cef82629354e83b15c56dadd8554e54260891000b74fa963364f231c02105f61d2fe48a4f337c8708e00adf32b4dc249da654c867326c0799549384967b193e1ac0238af360927e9822a329c17019cd7a4631b2a88533fc9f04087518908a656dc77fb9a08e1de102182bb06c0bdd6a47ae824ca3176b27ae87f40397f9d4938493f894b86f33680f37a9370926e2b4986f34280f30693704eb412e71700e78d26e1ccb712e7cb00e74d26e124dd309a0ce75c80f366937092ee704c86732dc0798b493849272392e15c0a70de4a897324f3ef31c3fb9dca1c1e7c6590b2d35b8e85cd1399e2fc552ba6369056f4dfa5aae86f0315fddb2881f764f127df40df259c7843b68cb51b0079bb292009fbecc940760520ef300524e15c25329083415e7aa729206d5ca1de0b80bccb14908413bac9406e0620ef360524e1320332906301c87b4c014958df2403d9111436f79a029270491619c8338147de670a48c28582642077011e79bf29200997af9281ec0c403e4009329b4537251bd07d11f0ed29a6394f5439faac1667dcd434352c1fa56a589e08f03f988e551dc98e7612b689c8c63a8702980f990493b0a54e06733880f9b049306d1c85ef05603e62124cc2163b19cc3e00e6a326c1246c2391c1ec07603e66124cc2963b19ccfe00e6e326c1246c2b91c11c00603e61124c1bbf89b93b80f9a4493009db4c64300702984f990493b0254f063303c07c9a1226fee5a119ceef0ae67e15b3d811c005dbffe5a1839807f6194ab0fd05d8d9ce03a562e9015cc5de6c5f6f235bdbde16607d96126bb08d786ddca06a2c48facf51a20cb7472761794fb647e73dc04b9f377b830bc256135926301778ee0b9478bb83426bad2894f8f22ef713ce69da9f611315c465c0475f4cc7a43058f263c51579794fe6930301ce97d2919bc626f964f2531b773cce01c9fde57494f9d8685374996fe36e75638097be928eea7e2a653e617f3d998f9e0bc0be6a2a581bbf877d0600fb9aa96009b30232b09301d8d74d054b583ba52bae00d8374c054b38f24406761c00fba6a9606dac60f50760df32152c61ef2a19d89300d8b74d054b38064006762300fb8ea9606decb95a04c0be6b2a58c2de5632b00b01d8f7d2dd3fa09fcf572cfaae784377b91057455b931d4885f638d03ff03e255ab5dfed04d60cfbdd9279e631c0333f30a77bc5c65dc26703941f9ab47b0ee9be8d6463a89341c2de6e124ed28d06c97056009c1f998493741b4c329ce7009c1f37e73c147fb7b48ddfa4b910c0fcc42498367e46e55800738749306dfc8cca090266dbd63ee13362844f13791acfd54a99b7f3e7383693958bea360751ea9ccf16ed9d7ab6d4c1b1d8f9172c060e77fee9ae47c4f6ae056c3dab1157b9bc3221bbcab9cb35ab63d9a39d473ee50ed14e3a44a6a8944d7198d73bcf14b17211fa06b680b93b9bce737eabf9590d0249a6f86cc17ce75a03e3330b7808d58e262b59adb0387ae7d3cc483bc1c9fd7870ad6c84644a5dd507850b6575b0c2b1b9446852eb3cd34a84e396149991cee04c0dc1178a76629dd08aaf149be7d8ae42e6b5f302219d87abc69b3dbdf892ae45cedf3c4ef817775dfdb88665ce5f4522a42a11f111f1acb2738e6054e23c55228ec58dda64f1c1b548be90cb5bb2e31adbb0e3e4d2a92a79a6ae2796c9633abeb4cf787446f4e9bbb2c97c349145858da4978ba966e5426a61424b13db87fb7ba738b192c5171fefd4f67fcee35d46bb70d3de918ece5f0b9d98778573a7ae15ce5ccbd694b760adff1fc7d80e7e548c0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/9c8d725315cfdfa49a3855d5b1343458.asset.meta b/Assets/SerializedUdonPrograms/9c8d725315cfdfa49a3855d5b1343458.asset.meta new file mode 100644 index 0000000..41049af --- /dev/null +++ b/Assets/SerializedUdonPrograms/9c8d725315cfdfa49a3855d5b1343458.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dfbffc23699d98644a0f6b5300a35db9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/9c9332feabe597b4b84461fa1b1fd3d9.asset b/Assets/SerializedUdonPrograms/9c9332feabe597b4b84461fa1b1fd3d9.asset index 20394d4..3e73e50 100644 --- a/Assets/SerializedUdonPrograms/9c9332feabe597b4b84461fa1b1fd3d9.asset +++ b/Assets/SerializedUdonPrograms/9c9332feabe597b4b84461fa1b1fd3d9.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c16c7f3f0f7018243d1e2102894b4051212bc502c58710854a08590849036409a04a9537777a7eeeeee5eeaaed4dddd7e7d6ff7769f676eb3f3e4b9dccd933dfe2ff990cbd9dccc776767f7d6ae413673fec50638bf16b2796c221bc416b062b69aad72fe9ae86c573a3fee9e3a3e87553adb52e777a1736e00cbace54efeaf7facb3f37b9ab357c5aa9d3bd7b022675b26cecf6725cedfd39c7b4b9c3d7e74b9f3bfc4b92ad6c8b96901cb67b3d92cd629d6b116110bc54d55f2588cdb156beafc9ec0f675ce9608a5f843b2c5a94eceaff9ce992a716ea5a3b4ba6e11db4398b5d23957e4dc53c9ca1d99cb84c4a6e7cf63e20fe66e06caed20b9e5209bc9bf1bcabf9bcabfe1f5fc38b76e71926bb3c1b54a668ef33fc3f9ff87dc1fecee37ce94fbb9ee7eac8326a339909127b74334dd873aff1b3b7f3e9782fec9ceb591db6da4bc4d72bfaddc3e2c8f3f0ff6f9f62179fc05b0ef308a554b9b2e93c7dbc9ed239a9c4792c8e1db07018307a5ec175dd90d9acae35de4f65129e345b0cfb7c3c0fdfcfc4b5e790d06c8fde172db073c53d9ffb8a6f7e3f2de72cd3ed3757cfb1890f998bcf7294dff2734fd9fd0f47f4c9e7fd92ba7d10f9aae4f826729bd9e32d8f4ac94f70ad8e7db1172fb8c3cff2ad8779ed7708326fb394dce7329c8e1dba7814e4f4bd9bf001bf87693bcf7356007df3eaf1ddf048e2b79fcfceb5ef9715623e57647b91d257571fc6aeed949fc41e5cd9ee098d235533ef30d4dd7deda71757d2fcd8627c173f9f1373539faf1d1203d9b69c7da81635bbbb66764cafd31ae9d33f3e5fe4eeefe58950fea1a43c6ba7232940e8a550b965a7c6d2eb7e36ab93e998c16723b3e808c962eafc6f949aecd06d7aae74c70ed672a2e299e2f806b547c6b24d3f22ded78863cfeb676bc3172bc0972bca9765cc59017812e2f6af7bc24ef7907ec3b7a361da7c978595ef72ed019ca53e7dfd3ee7b451e7f1fd804ef7b05b9ef55edbe26da7daf22f7bda6ddd754bbef35ed3e757c10d8e7e73f706d6ca2ee9fe8ee3755b1bfaef96592dcbec1bc65ae8a13af336f99f8ba4c0f59fe71b1e2f864b97d5393f3667239cdfa26d1712af3d651545e506cdfd27ce52d29b35ceaa6cafd4672fb36f3966df9e03894b7d92baff943727f67b9fd495ef7a1dc9fa6e9a5cebfa79d1f049e0bcfab34f89f3cfe11d8e7db3f91e74dd7ceebcf9b01d2069e9fa95df79f3cffb1b6ff4992b469a5d9fc0ef3d66bde71d9b5f8a71676b36a61a7ce87c54ec9c3d8a9f318bbd9da757561276de57fc6e3a0f251e593ef4b399f826bd571befd86797dff1b57462be5f3199abc77e5f59f817d203716f39e17fb7cdb00e82859c71a268e89f3ea18bfe66729e773b0cff5da55ee37d6f4daace9b559b357f9c317601fc61bf5bc2fb5e71d80f38fcb1e04f6418c6da9de43e6f863e9bcccd660e5bc29268e2d90db02704cc97e0f1c833e20eb8379c7cb6373e5f60370fd7be07a750efaec427fec3d7628ced08e5d0c7628d91f1aecf828891d1f83eb3f04d7ab73d00ee5434d34f99f6876a8bc07edd82d453b94ec4f0d767c96c48ecfc1f59f82ebd53968c7ee72db5493ff856687f2f9bad8a1647f69b0e3ab24767c0daeff125cafce413ba6c8ad8a459bc0be9307dbf6d5aefb9679cbdf6f99271fc6e56cd6e47c83a4fb771a2ffdfcf7daf9efe5f6074d8f1f343d7e94e795dd4a7fbd8cfa02e8a1ee83e7bfd6ee57b16a13d877ec6b3743bbee174d3ff53e3a5d93b3d92ba7bd6abbd1fdea578d837efe37edfc6f72fbbba6c7ef1aa73f104eeabc2a5bbf007aa8fbe079c5492f03ff629e3250ec43f97fb344dc36ddafce2bff59845cf78ff69c7fb4e7fcabd9a9eee36d70cdc0357cbb078be7ad0e8a735debe64bdc6d4cbd8f6d02fb7cabdedf5e00fbceff0eb2fedbe17c2967a93cdf5893d3b816390f25d1b19079ebe67b324f1e89a977c277c0be23b36353f7be8ee3bc691153ef8a2f7ae5c59a6af2367be56dadda4165fd32d69379eb7bcb34bdd4f9f7b4f383c073e1799506aa9de423b0cfb799c8f3a66be7f5e7a93cbf543b5fe4bd2ed69b79ea97f17d1f75f35833e6a99bc7641b7227d5c684b12bae859d3a1f163b250f63a7ce63ec4abcd7d589dd72600bdfae60893c2eed6165e0d852b9dd8bc5f3fdf01c79ac543e17b4a1c754fbd2de72bf05f3b4a78a7d276d3aabf62b938eea9d5fd51d555e69c9bc75f896f2fc2ac3f357031b54bdb4021c5331a61538a69ed33a61eb10d5ceba529edb0a3cab15b85e9d83e9b58fdc36d6e4b7d1ec50f5f1daec50f52068878a71b07d523d47b54f9aec680f9ed5165cafce413b2ae5b68926bf8366872a9feb6287942dfab2743bb64e624727f0ac8ee07a750eda5125b74d35f99d353b3a07b043c5f32e063bba26b1a31b78561770bd3a07ed68a4c9edcebcefd2dde579f5fed78379cb77fd7e755ed523aabde7d91a0387b5095bba2bffad6b3d40e9236342ac8fd4e75bb0ef5cd3bd2289ac7572ab62b9ea637b07ec731957499d377b9f1debcbbce5f33a701ccadbec95d743f5b7a832663be68df9ebc17128374b5ef79db6af62b78a29fde4f1e7c13e7fee43deebd87e72bbafbcfe7bedfcfeda73f4f307c8e3ea5d21957257e9f6b257b79eaa7c38504b9b83123ed3eb5db97d4893ad7c765b4df6b652b67a9f3b5893bd21213bab1891adcaddfe9aecfe52b6aac71fa2c93e3421bb6fa6261b4bf7c3bccf46d3ffc75ad27f7b2dfdb777758d3f3f9de9aff2ab965662dff49e72907ce60eccfbfea1fc078c09880d00d7f2ed40e6cdbf035db9db283e19da33b2993786676b7273b4f3d2476383800ecaf7066bcc07bbcfcefcc47d6e6f557751699fa7a5fde1e038d47118f3e679b52fe56e739f96f6b99a1eb99281aa271ee1e5194f87f76ad14fdd37483bff9e765ebd8f1fe43daf98c6ef1fa2a5bfba7f86765e977fa4e61f4abe92abc65d7c04f62137dd9ea3b4f3ea79aafea5d241f5f17e06f6a1af8c60def77a25ff68edbc927f8cf7bad848e6a997fbcea32391f37a1ed5ed1aa5d9354ab36b47af5d71ce3b7ae5d648df01207d1d3fcd54f11d8b03aa9e11460c3954ea309a9963c81896c8bf63c0b57cbb13f3c6909d5cb95959524686f68c711abf719adcf1daf9f1723b16e830566e27306fde9de03ebb5f96fbdc7e1be4b3551e55fd3e7a0cc9d7749cc2bc3144edcb18c2c57b62c8444d8f89ae1efdaf92d71debe589c6105d3f75df20edfc7bda7915430ef59e574ce3f74fd2d25fdd3f433bafcb573164b4265fa5c364e68d2193356eba3d4769e7f518a2d261aae60b53355f99c6bc3144c93f5a3bafc710795d6c67162c86ec8c9cc76288b26bba6697aa3329bb6678ed8a739ee1955b237dc780f4e5f528f58e918e18b241ea30939963c82c96c8bfb3c0b57c3b9b7963c86c57ee00bd8d423d63aec66fae26779e767e9edcce013ac87eb9d87ce6cdbbf3dd676f27db3fb77b4c3e5be5d1059a4f1f0e8e431d7765de18a2f6650c19a0628e8a21059a1e05ae1e3ba8f7c5e3bc3cd118a2eba7ee1ba49d7f4f3baf62c806ef79c5347eff422dfdd5fd33b4f3ba7c1543666af2553aecc2bc3164178d9b6ecf51da793d86a874d84df385dd345fd99d796388927fb4765e8f21f2bad822162c862c42ce633144d9b558b36bb166d71e5ebbe29cf7f0caad91beb340faf2b2ee2ee06f758d217adb836ae3fd16ecf3fcfe4d1259ea9d54c59325cc1b3396b83206f675f51eb8d8fbecd852e66d7b381e1c87f2366bf2d4f52a7f156afeb81e1c877297316ffe57fba9b4b963b156d95ec46a8ef950cf2d669ef81b2b02c7f9b644e356e2cac8d3c7292879a59a9f956a725768e757c8ed72a063134de65eda3d7b6932cbbcbe1bf79bc2844c710de01edb5bdef313d877ecca9ee1bd5ef57da3d71f00f487f79dc0bcf9b4b16653b96653b966d332af4d4a3e3b51eeafd4fcf324b955716e95d717c4beba8f6f576bfebbdab527e76cef75f1f6990a79fdcf609f6ff791c7dfd6f4db47d3f317ef71715d33ef3dca06612b8ca1cab641601ffab97e7f59c0fbcb03debf2ce0fd45feee8f3fef875aaeffaa96e77d56c7fb9705bcbf3ce0fd6501ef5feebd5fe5c17819a7f8c8326e908aa141ca38159bab58221fa87a67b594b309ec3bcf1c3255bbae8a796240accaab4f6c8de66705e038df56caf3bf6a722b35f9bfb8760f59e195137f8e2647dd2fc60b4139bf69e7e702dbfd8e555fad715ccbbce5d45a97d9d046aeee4355fba08a83ebbcec94bcd83a4dde664d5eb5578ee82b4a66837a9eaad76d02fb8ebc61cf69d7edafa5e9fe1aebfd341fab00c7f976bd96a64acf61e03cd867aa1cf81dec4379aa5ef90ed8e77a3fe6bd3eaedf815e9f5372e27255bbe5575efd62076afae9d7ffeea6e33055e753fd4ed02ee8834a4e6de993ccc7547ff9c140867ade0656b34ea5ea3287306f9d6a0338ceb7aadde51db0efc818a1c65c6568f20e67def874b826f708edbc6af33c12e8a8ea3f47258ec58e04c7f8f63029e773b0cff5da286534d6f43a5a7beed19a5ec7306f1d46bd0beda53def4bed79cf697214ff8c0423752eee771b9827460fdf15dccbaf2b0de00727cb341991c2b5aa4fe99400cfeb23753f56daf402d877f88c7cd3d56794ea333f559e3f4e5eff07d84f226754b2794fb2bf3d06ea69e26f7edfaef2f9aabda51f722ddf9e008e9d20efbf49ded75f4b435567de0cf6f9f67820e3782943c581bee038b4515eb7a34ab3d3e4f674ef33539a47aa9e7112d0e324295f9507db82e3500f75dd43f2ba6c70bdf28f33e4f64cb99d8ee8a6f162aacf5495ef67c9edd9deeb6327cbebfe04fbfcbc69ee5f2a7e798a66e329ae8da32b5c59a337caebcf91e74fd5fcf2d45ae43c9644178c812a4fce95dbf33406a7690c943fd48581a3e398c5ee3d63928d7f5063212f48f2acbe52de5d49e4a8b2ba3ff0996c70bf3aa6e66df603c7da8273dc7e3537aa1d72bc2d906fba5e3f9e8cd585727b5112fb951d50e7643237caedc549642a0e308fa9637d537c8e9c3b3a36df953d76d724f7489f18abe6ab5233bf44eaf44b129d343bc6b574ef199799e49e4bdd6bc6abfacc65727bb9dc7662deb8f4578acfe7db2bdc6dec7479efdf609febf785f73aa6c697411bd4355732ef3c5e397e28a579bc32bf8dcf4a72ad3c173b03e8d0d3bd6fa2ccd3b1b3a41dff807dbe3d9379ebf967cafb54b973b53c7e7642b6ba975d23f7cf9532fe05fb7c7b8e3caee6995d2b8f9f2f8fff07f6f97935e6f502f73c9f361597a38ef3ed79f27c0cecf3bfa5afc42e94e71b807dc7a6091b802dfcfaf6609f5fdfd04d97891b34b9bde5fe45f2ba46609fcb7d5393db2145b94adf8be57519dee7c5cf5fe23d1fbb181ce7db8df2bcaaefb6d7f4d828b797caeb9a308fbee2b8ae2fb4278bc563d67455879231648a8a21aa9c53ef1bcaaf5e06fbdcaffef0ea06654f794893a5daf2647ac6eb59323df3557e6a8fcb42fd5ea665dcef655a7aeeab8b8fb705c7f9f632c9b4a9e138df5e2ecf3703fbf07873edb8f295169a2f5c218fb704fb5c9febe4fe95f27c2bb0efd83be9e8da19aab81ebb5aca680df6417e6eb015d8e7dbab345dcfd16cb9469e6f03f6d57d300eb4d5ceabe3edb4e3d7cae3edc13edf5e278f77d0ae57c73b7a9fcbae97fb2adfa932417f1ebc8e6f6f90d777d2cedf288fab31c137787d80ddc412b1f54679ec66704c7263b724d266861a9f2baf8f4119977965c56e66de78799376fe16edfc2de03e1837547c5179b73d38af7c47c517102bfc963df1181366d9a3e2d2ad09596a3d97d86dccdb86752b380ee3cf3b609febb9ab2647dd773bf3b633dc2eb72ae63c0ff61d3953ff7079f1e11c825b8e769f5e5e9e038ef3ad561eb2ae9a3e2a667401d7c3d8a1624303b0efe8354df9492de5a5d29775d39e7b09f25c3dbf3402fbcedf3b6769cf45cad3f873757b2f459eabcab93b98b7bcd5f5bed37b7f0df97769f2ef04c7f9f66eaf7cf13c759c6f376af9092bafef01f909f010c7751e40bf78fbc4adccd3c63475a9c655c57a7eec0c700ce4cd065dc13ef7f9cb247b35ce747beff5f1776375bd6af7b8d5bd6fa62c8fd86dcc5b27ce06f25279df91b189291fbd9779cbd17be5f63ee62d83eed5ae5773116ed1e4ddafc9bb5fbbff0179be1bd88731eb3eedbaee86fbf956ae75d5a087f6fc07e5be2a3b581226c938c9390633554c55f32ce458f3063de5be8c35f177f7752c31372395f7941de4735e4c726d36b856a5f11dee3366a532ffe34e79ed46b97f97fbcc59aa4d43e62f26f307da66762ff03d2e4fb64fc7dfb9a17ec9f4e9a8a5f94392692fb0cff5536322d43bdc7640fe76de73b187a58c4cb0efc898adfa83948e77d5a2a3ca9faa6ef328f3c49cd86372bf3738af8ef3ad5cff2d5ef7d1f57c9c7963f7e3524fb5cec3d5400e9497e195173fff843cdf07ec433fddc67b7d5cfe939a1e4fba7acc2946f4c6aebfcb7b9d278d5261cedb730a101d9f62def2f529f799739b223a62d71704d411e6c1daae4be6f73da43eaa7d47c646a6c68a3f2df5efabedcb7677a662a15a6f6e13d877e4ce2bd7e43d0b7455f55ed54f27e36b7cdc8a3abf3f90613aef67ae8ae75c464cccfd9eca4a5821ab60d92291784aa4bac4a7bab3f6c53db9e8c622f233beca277f6c35dbd7b9b5c4b4c2e602b17e6735cb63b9c61536bb88b9aeeae913c5ef42e78a322174db06351e71778d4770e5ca9d9f12b03c6895737c8a585d942f105ae69c19c466385b7ed75236982d727ebc52163a8f2d676b9cbd02e7778590b7d451bbe695b599c49712d5ef99e7c874573a5de91c51402b9cfd72a1e17cf17badd0b444683fcd39562dd65d5dc54ad90467bb5e3cada6ed95cedfa667164864661dcd0b9e62c7dd65555532e53bd670edb3854ffeff14a98f14e1e81b6f2bf361a36c51721c5b2325fe3f4337c8f0027e9a943158208b798ee5b26c5107985783a07f1b6b5a68f66f97f7303624a92d66323cb9bb090b1229fce02f5fee7ecc2b571d91e1352d8f658bea55f75a4c4b0696cbcb12b3cffd989091d128872baae38f99f08bd7c9f969c4ef5e5726aef39f008d45e1e74d00b1bc4081f3c77ae77fb973f178e770b1887f939d8bf842d4bb0bc54a588d34cae1029b08cc350bd1da54c54037308116f5bb827af1736c99ede4a89bc6ad48a0ce1635afce491c127b96a8323590f5269565de9c3964f88e39232fce30a74b73912e75791a96320d4d29d33cdd59a0f6989f2c5d5ac4ed4aa40bff6766d812f1edda74c0083632116c513fbecd75af9b6ff38e8f811a4333bfd6497d30990618c10c1341d153b3208d04673b1aee256b8a7563b855ca0cdb08865d6a58978a0e18c5c6068a399c625b935acd34b5b84688e02698e076010537c504b70f28b899c9a15aa53b4bf273ab859442e75affeec4dbbb77d0c39ad99f3a2279b27615306f6a6e4a1b8e706ba3567ae274c413a70526b95350c92d31c99d834a6e657228d1cf9bfe7a7addca481e6b3aa55c467665c9aad97e4bc8d6267aa2377c3129bd9acd47eaaf09cebd2b1c0e6b459d788d73bfa9b92939d16e2947fbee826626333582f9d30823bc95c9f339f61e58b2ebcedf1577fe36a6e41307cb49936f8173cc6d7d9b24ce96891716f832335fa2e2b238aedaef9829bec3b34668933c797ba69cbcbd44f2f2de566a8db1e46f6b4a217170ef7a4921d5ec56265e352b935a3ac771fb7dc597938a9cdfa9a74f66cae9d35ba44f7692f409475f2c75da9932274f9d3ea954737ae319b3bd29d9c5d3d2db7ce1b60794b3e46d61e664e41d57bd6a04a80d63cd49d99761ed12c975c092a683296938c17e46b50c71b32f9e3c1d31e1db9a858ff3237c6bacaed3df50d789f9a9eb74c2d4ce32a8bde9b9193bf951bb33a6f67641d5ee62ca0cedeb2f0616888fd4f1ee86e5c21157c65fe89245219e25528f81dbc76d060d52c2a79345bb7034932b8ab9ff9a20ed55036a0dbde12883e5efae26a710f9329d2d0b303ad5ad6561a029a14508a8d98690cad3f8d00ffef62d1aaf90b4cb66e6368a54e463e9d1cd94fd797ae4180ccce1060ef66aaa07846c3c2074373d8b579473532976bbe3827b60312ccf10c37cbd66f6c4240f092ab997292388485f5a2fd1917f2f9337727197c90b392af2f14c0df5cc220a9e1d9204a2601a6572174dfc42b2d43091a5e8b4c0b25d2656a40f3714e9427f1f457a6f4cf8881084f7c172c448438ef0555fd806933c2a685eeb8b49de31a8e47e98e4d141256f8b491e1354727f9364de34c1978a0cda349185f9ded8107c6f3b4cf8b810846f6f12ce818f0f0a7c074cf284a092076049393184a41c6812ce5ba1f3e3172784ffe7fcab21bc252e7c10a6f92483e6319f9a6763c0271b80fb8a513918932906261b4c6a27613218133ed520fc649fc27331e1d30cc237fa149e67109e2ddeff0e61e96d4f360f619c22be4e5ee2e9cd53cf75475d708dd418b679ce76b9d0821f570d83c99f95bc02b43333bc2d8857a1492cf58198f456f0098ccd4545db5c5de28bb76559a63356c51a627278de73ca57bcac313e87b7fe2d91bd29fcf9abc4a939ce13786a4e9355be1a79a2099e27869af28478dd5a55af7982575ad788f743fef75a990205e2d989714441bc9d2f59d9c350f88802c8e857b3855fe5a6e05761688f79cc30ac4c9a1342693a1c2b93e61aca245f958011264713efda73491dcdffe04bb3bbcc330447e115f38557f07c84bd72cd771eb942c68bb0ba0c8c0e5a2054e9588367d29191487a8dc44ae205869238ab91bf92781416f5f83ac0b5b6b12409673b6282773185539e95260aaf592b12a35a66ce4c4108265395738cbf5d678ae458290722f33d95b43c91b8e04c21c30dcf15424a215343c8fd5832da945f4413523a3b696081e83fcfec6a4a4da3e7eec6cc1d34b53d1ff3de3198f7ee6ef0de3619febc77274cf82283f04c9fc2c762c2171b84aff0297c1c16def7081adec76392f70c2a79020664890948637f402662c2971a84cf69ea4f78be49382fa90b59f0927a92293e8886e032d2f890ac5dd15b5d0eb7757659cab1a448c492812c79bf7d305db1b833192b7f8a03166c534cc92d5ae7d3db239518c75fb71ea99294937139c3fa916ad7014b9ea958762f3564f721cdfc65f76926e1fcfa15ccf05e9dc98cbd70a98ce4e519bc7123e6fe1be4fc6b52b3832bc928d79d4d7a724df632e899c34310ef096f2012a55c24caa02479cbf42aed3f77d5b067066ecf742cccae3484d9063ec3ec0c4cf82a83f0863e85cfc4a2055ff6b6466d95ab62a29bc9f66739ec405143e519a3c4e1a86aab9c2c675d256ba4998c8f23ab66039ded72e7b7db895e2aeab225f117552e71b090b85c848595e23e2edb4d377e3ed7393fcad9e639dbdebe42d92c2c9f5498fc8fe7937d8239fc6c0c73a509f3d25030d71d66265be7448c32f982b1422450b18cdc998ccf812c16af1425f25523d339c2e5960a2daa9c1f7fc931078b8955869838a2b5bf9838d7546c899ebf740e801eef5cc53d7ddf3a1458d52917586b9879f073f2a76345d53c53b270726b4d0ae949b2064f92f926c1fcc5725d2a8277c305179804f3169ef5a9082ec0052fc004f3d5d39b69828b4c313889f08598fbef67707f3e60da8ffbef8269bebf41f3263e35df15d3fc0083e64ff9d47c372c661e688a99cca47a9298b33ba6fa4106d54f6ee34ff54598f0830dc2bf69ef4ff86293705e1fd8c082bfd3ed81093f2404e17b62c20f0d41f8129370fe367a582a79bf0817bc14f3c3c353119cc4050b312f39c2e0252f76f0e725cb4cc2f9f54732a48ac317df0f50c529c2301d6dcaaebc06e6b78ac3cb661b6b93c518ea6330d4c706435d82a13ece847a5968a8a353a35c8e65ade30d59eb934efeb2562916c64e08218cadc0849f1882f0322c469e143046ee6512ccd3e7e48031726f0cc729061cc6b135497094635e72aa290077f6e7252b4dc279edf9b4549024a93dafc2049f1e50f06a8cf51921b85e854938af879e998ad649eaa0fb608978962111cfeee22f112b31e1671b842fedea4f781526fc1c83f0ac6efe845763c2cf3508ffc5a7f03598a79c1782a7acc5849f1f82f07598f00b4210bede249c0737beae708d72990f74f05b2e57cb32b6b40e951f7f25e8be982d17996ce127323d4ff5f3acfdb0676d343d8bcf125ae2fce438ff8b6a74a3f0337cf9bb4a41d68f16fb635a5c6cd2a21dd062a5aca3140af675d7e0004c834b4c1a34071a2c71def32b45e3b6bfe2f5402c4a5c6a0a413dfd458983b0bc76590879ed604cf3cb0d9a1fee53f30d98e65784a0f92198e6571a34dfec53f34331cdaf0a41f3c330ffbcdae49f7c94ee2219cbf67062c322198746c97703f7d8ae623b90ede4fc9e0462963b94850f66e1c35f2a9c632b447c592f9a5e4bc4d1629f31ed704cff6b4cfaf3813c098d263827aa446455368d92f6ec61687d7763b6fe9eb3525c51151fe2b35a1c2d16d1c36d46de57dce9c7a6234c367107b9367e427bf9141f4768c2dc7f83dc7ffede3f8f343d933bd9f506276be4d3c98ec284df60109ee153f8d198f01b0dc21bfb147e8c4938077d93c9bdfaa6943ddcd7e76c673b441e73b3cafe6ca8bc7698b3f5e330c7620e7333e630b7047698e3b067de8a3df3b6c0cf3c1e4beadb438884279884f31e0cbeea79901e8c1331527762a4c4370b3220297f9c4ec238dd1d02a7934dc27959770fab59d64d1de9afac3bc5249cd7cbf832f04167399d6a109e2de6f42d65e918953e9fe5b3e9f15267903c3e470ce6dc57c81b2f9e9018c5edbd237997e27d2637357629f225c0b344b00a4b33acbbf1345372f241210f985c9f3b1dff94829c85e163b0c6e9a6e7f050f310338469ee7f4bc47c0bb7465224068814faae699f8159f73066dd2375b2ee4cccba474dd6b512d64d1635125e3759e1b1d48f7d676139fd31434eef3bda5f4e3f1b33ea7193519c6a81f6a25c121f119dc9b2c46ba39b65c7c812783b5fc69e63d2870787274cf94a177c3f2ef85c8ce293068a5963fc513c0fa3f89489626723c5f5e225330c86e763a63e6d30f5749fa65e8099fa8cc954beae5ff01c7e2166d0b3268376f267d0459841cf990cea801a344ba4613578b1f163e246ccc44d0613bff069e2c59889cf9b4ce4f3d0b0b855b7f4bb0433ee0583716f8ef567dca598f0170dc273c6f9137e9949388f822f31a46ce11f6ff45fb65c8ea5d02b5800813305135351126b78ab35bd6730beda6785aff4bac2a40d2fd05e6501c7fb5f8925d66b264ff099585761c25f37e5219fc2af3609e755e23758f02af13506e1d962310ade07634f957807b9345311db5b36b5e40bb72bf4cc42f35f69e65fc5f1375df32da626e6a5cf06ac7a7dadc9357890781b0b12fcab88ee98eb77596df3196a2e86453be2fa3a932f72df4debdcb47c51075ac6eab680e07b8ea6bd35f08b4f7ae4d7acc5df238b08becfcc73d46ad303f389ebb170f181395cf85ae7ef062cd06d3604babe53fc05ba1b4dc239980f59cd259472785194c998779d23fd69c3f0a7dd843ded238aa7dd8c3ded638aa7dd823ded138aa7dd6a7a1a778a4f0d4ef1ee747f4e711b26fc3383f06f7c0abf1d13feb941f8c933fd09bf0313fe8541f82f3e85df8909ffd2203c73963fe1779984f35ad8572c602dec6e93645e607dcd90028b7f92d47fadf61ed37378bdf35b86f6baaa7a2bafddba5fe3f25373bd174b90ef0c09b2c26782dc6712ce633aff509e71bd5a1f31fd7e8cd50f26567c22c222f0359f5149bee6c3bb36fc307c00d3e4479326eef254e897847c3cf741ccdf7f0aeaef0f61927f0e2af9614cf22f41253f8249fe35a8e4474d9279b7c46f2c78b7c46398dabf0755fb714cf21f41253f8101f93304204f1a8467f763e4af76e95baf247955fc2f9642bbed7c9cdf53a6c4e1fcfe0e28f869cc9ffe09ea4fcf6092ff0d2af95993645e2cff2f151849867a3e8709fe2fa0e04d26c1bc0ecce715855e077e1e7b5a8ce2692f6071a3412c78dc781113de3004e12f9984730f6d140be8a12f9bc29d5848b4febe3ae11dc618fe8aeb19b154bb7c1bc752f9ea44707db15689574ce9ce179a686232414ff6e578b2bf8a096e1a50f06b98e0660105bf8e6581e641b3c01b98e4164125bf89496e1954f25b98e4564125bf6d92cce358eb10e2d83b98da5b0555fb5d93641ec7daa4e2773c9f2382df3309165fe44b457092d146ef63a0db8500fa030c47fb80383663f9bb43c0fcfd21c6b96340ce1f619cb70e81f3c7188e4e01717c8209ee1c50f0a718e72e01397f8671ee1a02e7cf311cdd02e2f80213dc3da0e02f31ce3d0272fe0ae3dc3304ce5f63387a05c4f18d49308ffc994123ffb7188fde21f0f80ee3d127208fef31c1db0414fc0386a36f08387ec484f70b41f84f26e1bcfd71db54902469a8fc19f3bdfe417def178c4756083c7ec55c64bb802ef21b2678fb80827fc770ec10028e3f30e1034210fe27e67b0303fade5f98d68342d0fa6f4c787608c2ffc184e78420fc5f4cf8e01084ffcf203c5b7cc2844fce4f7f9b4618abf0256fd1c84dc54bcb7162ff61ee9f17d0fd79aba1319d878490ce319370be86c3d054b44eb286430383e06cf1999ae5f5e240748e332ce5a6b0e1a2298c7ff186424bac01aca12989794a8c48258987e3efb18d4c82c537a982d6093230c9a3824a6e8c49de31a8e42698e4d1412537c502c098100240334ced9d82aadd1c537b6c086ab7c0d41e1754ed9626c9bcd9677cc0669f5626c1fc6d7642c0b7d9d618e8892180de0ac3911f10471b93605e839e14b006dd16e33c3920e77618e72921706e8fe1981a1047074cf0b480823b629c770ec8796b8cf3f4103877c270cc0888a33326786640c15d30ceb30272ee8a719e1d02e76e188e39017174c7b49e1b82d63d30e1f34210ded3249c57fce7077c43e86512cc5fd60a02bed364621a2f08a8716f4cf0c28082fb60f5825d82d60bb6c124ef1a54725fcce9760bc1e9fa616aef1e54ed6d31c98b824aee8f495e1c547216e6777b04f4bbed30c17b0614bc3dc6624950163b606eb73404b71b80092f0c41f8408cc9b2a04c069924f36fa517a5928c49be959e8d55a38b0356a373b0069c92800d388331c8cb8342cec5249706959c87e5c2150173e110cc9dcb4270e7a158f1bd57c0e27b188663ef8038866395bbf28095bb1198c62b036a3c1213bc2aa0e051188ad50151ec88695c1150e3d1982fef13822f8fc1845786207c272c7054050d1c63b1b85f1d30ee8fc3e2fe9a80717f3c16f7d7068cfb1330c8eb82429e88495e1f54723e9657f60d98572661eebc5f08ee3c198bfbfb078cfb53301c0704c431150b7607060c76d3308d0f0aa8f1ce98e083030a9e8ea1d81010c50c4ce343026a3c13f3e54343f0e55998f0c342103e1b0b1c87070d1c73b0b87f44c0b83f178bfb47068cfbf3b0b87f54c0b83f1f837c7450c80598e463824a5e80e5956303e69585983b1f17823bef82c5fde303c6fd5d311c2704c4b11b16ec4e0c18ec76c7343e29a0c68b30c1270714bc1843714a40147b601a9f1a50e33db1ec775ad0ecb704937c7a50c94bb1fc774608f9af10237d6640d2cb30c16705145c84e1383b041cc598f07342105e82b9c8b9415d643956749f17b0e82ec58aeef30316dd2bb0a2fb8280457719e6771706f4bbbdb0607751c060b737e6161b83ba4539a6f2c501555e8965934b42c826ab30e19786207c3506fbb2a0b02b30b52f0f41ed7d4cc279bff715a9a464927eef4a93e0deceee95a9084ef2c9a32a0cc75521e0a8c652f1eaa0a9b80653fb9a10d45e8ba97d6d50b5d7616a5f1782daeb311fb93ea08fec8bf1b821288ffd301e3786c0637f4cf84d21083f00637273502607626adf1282da0761c26f0d41f8c198f0db4210be01137e7b08c20fc184df1182f0433157b933a8ab1c8649be2ba8e4c3b10ae5dd012b94476015ca7b0256288f3409e643c6ef4d45709221e3476182ef0b28f868acda777fc06adf3158ddfa818075eb63317f7b30a8bf1d87497e28a8e4e331c90f07957c0226f991a0924fc4243f1a54f24998e4c7824a3e1973bac7033add2998ca4f0455f9544cf29341259f86c1782a208cd331959f0eaaf21926c97cd5c46762c117ce3e1353fbd9a06a9f6592cc3f44f15c2aa4937c88e26c8cc7a610789c6312ce17c07a3e46b000d6b986a7656fe7ecc6f8277aa3b06c79dd962b7fc100339b4f65135fe6a3d7ae61aca9f31cbe48549598115726281993d3bd9463ac1642dd4bb377e0ca0e62f8e4bbb98e51ee07052ac515fc2ebf93f0345da47f99a703be18e3d301d3830f9b1c781e96335f0a21679e8fe5cc972972e605d8d35ea178da8558147e356814be0893fc5a50c91bb1c47e3d84c4be1813fe4608c22fc184bf1982f04b31e16f8520fc32cc2bdfa6f0cacbb1a7bd43f1b42b4c4fe32cde754ef4368033c27b1f7fc0955856782f6856b80a4bf3f74348f3ab4d758401ce6e3dcd7d9f203fae55ecdc1feedcf70f4cb502fe658fa4b3dc83e8d3c8e8b5e6a348b9bb3956db34fc200a6225ed3526a7e0d5915851bd38c53c51a708d71d3e34b9035ffa33d63f09edba698224ee472271291e674ed66bb188fb3145c4bd0e7bda27144fbbdee4b2398cfc5d2779ca15892a6d359b2aaea158bffb53931bf37abaa8acd36b87b8f667f1f78574a86076891bb012f9f3a025f28d986b7f41e1da37614ffb92e2693763b58daf42a86ddc8209ff3a04e1b79a84f3ce9c6f62c13b736ec3847f1b82f0db4dc12b9767e2b27a095ec1bf69963c687d974a1bddbb38af3b3037fa3e0437ba1313fe4308c2efc284ff1882f0bb31e13f8520fc1e4cf8cf2108bf170b71bf5084b8fb30537e0dc194fb31537ea330e501cc94df4330e541cc943f284c79082baeff0c5a5c3f8c49fe2ba8e44730fc7f8780ff514cf83f21087f0c13fe6f08c21fc780ff2f28f02730b5ff0b41ed2731b55983806a3f85498e0595fcb44932ef486cd020588fe33398ca0d83aafc2ca672a3802a3f8709ce6860f832daf14c75662c70aa2dbc7ae456a5568abf135f6f5e2e3a2f78556a5afccac447c4ddaf6f973895a1b5e2ea416c89f3335f9c2d7624ae11d51f2e37714f3e2b89779314b3c9a2b2b5523cc1bd37516572ab6e6eb789f78cab5f9e63e1922456f08ada1ac63f8a9a787a81a83a2a995ea90b9dbbf8d7a6fc50df84516f6ca23e2a4edddbe9b3405469cb657f995b715d22bea25d256fe77ae9fac23528f57313c497b57965945765fd58f43c6651139345e319f6920bb573ade15ffae636f10a7bb9a8a29749cd6b97109e7d2f60f63535d9b71363499e0bede236143afeba2f9be59c2d051d9ac9750fcfb21731cb9a992ceba75936ded1bd52e44bd7aa52e728e73e43e49c52e7ef1535744de4433f7abe84e9d9dca467bea667e29990fe14f16aa53a850b1c5d4d6c61dcc08e87951a2f6356b6c0f251ed564e62fb88aeef72995bead3be5730fb5a9aeceba3d957333a4c11fea63e73aeeba98efbd1f0554cc356a9e474f5443ffc13da9b8f86c5fe35ccb2d658a9638eb0c9beb7e88d0245b2fce467f088bd50a6286fe8c8f365d1eb98455b992c5a885ae4d5a0b6b44b4546aa578595b66f6024da98480c09216d79d4e75fc85d63ac83b975a5729f79ef4dcc8ab6262b46a3569835af929a9788327799d0ae66fd2879395b97dade5b9855ed4c560d4363ba5ed62a3f4a16cfb13309597e2c791bb3a4bdc9921149a277705bccd2fc58f30e664d87ba97b5bcde53e5fcd850977817b3afa3c9bea9497393f7038e754b3dffd2fd58fb1e66edd6266bc7f8f0cdf9326ea49692c9de3fea123ddec7ecea944a9e836fc3c1f39c599a1f6b3ec0ace96cb2666c4a796ebc43b4188c1a0d9ee7eaf686b219b3ad8bc9b6e901de50663b7f276a26f519633ec46cee6ab2191f9453b366afea19ab644b4f325ff4a3f14798c6ddfcd731bc71cbab7729abf9491b3c0a9a3e80e3c7aa8f31abba9bac9a98244ab8564c969d9885862886b7b099a3685829f70966630f938d43d194e36d89cb9c8b94ad331c5b4b9d2b2a45976fcd78187644ff14b3a3a7c98e9c94eb83536a2da7c288729f61daf732699feba39cf5ab7f5df3cae7980599260be6fb88597edf19bd9e95cef6cc2f3006bd5349c564b50abfa958d768f02566419f54da036b46bcd4da6af0d8e73d13563a7d8559b98dc9ca0929d529e63b172f13da160aafaadf5ad3d798857d53a9b727f3447ff5f664e9579728ff0d66573f935d3ba61ce5fd5985a7565d6cfa16b369db54f29c9f788997bff47d59df6156f64fa51e4f51974addeaba46d3ef319bb34c369730da7ee06a3647d4c54a653fef42d14756166fb5ab2bc5e039e0078cd376264e0b8839e1fde5c90905e7f023c6617b13875deb398f50e79e9f301a3b98684c4eb12e324dd4ffecaa8ffc8c593ac064e9a494ea2333c500585e0f513dfc782f78ba6a25bf60760e4ce57d5a2fb3270a4b6ba61e7c474ee578b8a5f9af988d835269ffae6963a2a58aebc9afe3de556488d7e61e4fdcbabab535fe86d9978db5f424b3cf2d971237a45e4b0937d57ec7acca3159b52864cfc4f29fdfebc365f207c664b089495ebc54f68ea7c2a6e37bdbf5ca9c6b798b5191b1edb5ee91f54fcc86dc54c61dd094a8e1948e7f6196e5992c3bb1deea4cde3186f38584d5cc9d26eaa7dc4df47dd7f738c3bf31f2434ce4a7b15447ada55233d1fbd153ef63af7b1efa07b3772896874c716096c8e9eb44fed9db93a712a3db54fe87d162493cbd538b2b7e2cfb17b36c98c9b2ea3a45383596cabcf4885feb3039705c5318f2fc50fc1f467138567b0d4343afefe86bdc508c8bfa0fb37384c9cee10c6be1ae39a92dfdb6f08904465b4662f51dbf63bc4cfdc7e18ef10a9b490c6332cac4649e2f26f9a286e3adbbd38d78abeb48b10618811d536bfd4f3cd5cfe81d6fd98e9f09ab3c6b8859391a1b2d614e83992212ad7072b16b2ddf5f1f9275754dc146986d634cb64d493105531bd19dee74ccc06cdd29b5f621b3ada9f5e3a437551b63968e4d6d1c82d9d27c518f2f13654dfddbd804b3719cc9c69929e7ca19c2672bea6c1db5dd4d31bbc79becde19b5db3c3a77a27364b5a85f713de788b71dd5925d5fe56c33cce209268bf7ac43dd03cfc376d7409a63642662112d7532b3e22d17dc47f6f3550709dfd21698a5f9d8689dd42d55f5686e6ba9bc6b8dc81561e5d99698f693b07901f0a9138537ba2d28aacfb6c03996cf560bbfad2dbae8e7e07d7eac688559313995da1e7caa9fda9ed74afc4c58b584d6989553b0564c3ff155f9da329658fc0ccf2f7089343f366c85d930d55f6e81cff7ea5fe53326f8d1be0da6fd3493f63350ede731f328eb74c4f479befb49da6256ef8c8d54a9dd6ab72dc95b8a278b1261a7643bcca6e975b749cd1f5a2d5a7edd2bfc944c415b73db6336cdc0c6ecd56e93ca55bcfda3526a4cd796d301b360a6bf9a335e9f4a3e9fbabeea101d31bb6761edd2a97b63dd532e0c9fdc1ab36c762a3d0cd8fb9e9f1101e97d07ea84d93bc764ef329f65b47781bfda627cf2b3de6502797fd8f2b4b47574c608cdf5374adf6445cdd6677fef887eece882d9312fb511d209b6c14748d7cd57bb6216cc0fd2ea94daa8a4f4b6af75c32c2d085eaef0babe9f568874b68277c7ec5e60b27b166ab7de123551f46dadb4b82daa0766f9426c1ca6df9a84b70cf233f33f9df5dc9e18875db0d1f3660dc68b76075ec2ce176f5e95a2efc75bd3582b72271fb3e0efadbf2ef58a5e985dbba636063bb5fe9de4f328d31dc532319b770bd2a755fb8c96f45ad91bb37277939503518f75c7ca94d4788f2911b9b6307e3eac88d307d37b51909e8ddae62ea737aa6e83d9b8185ba9c26f7992e33cc54feca8ab257d314bf6a8db7cd85453ab2ea3b1eb3aaeae1f66e39efedadaccf361752deb3e93a289f3138bb570fe9c24eab8fced3cd13254c5b27953a6d04f7d28498d971be419319738ce9fbd52b464963bf95ccd0a497c1c0993b0a481bbc49ef8d73fc6a172187c3892e1db1dea1d0dbe5bf3d6485e7fe7dc2ac59be92087973b6242ff961766855bd3f78e61e4474dd6d56e935a369a8f242c1235081ee997399ed1445aa46439a47903ff1667e9529eaaed65aa36c8e6af94b11deae84db56b51c89fd6d0ec439d6a908579dba4bb2b60167367ffc7f812a04be4e0559e738b4425d41dcec01bb4d63b7f25868bd6fa7498674d4f1f2804a81179b58a5b005e524de2ba0897738364a5ac6aadd889b126190d7278aa2ca344d756a04b78dc2a393e73b510394d46be28209b939140564489acbb40b6c429949718d02d709e522c7d6faaa8e6153377bdfc2ac79828805c9c9500596c27c8c19100f96aaf04c8124a905b7940f2ea0a57a154163b1c59147075ef90c0b59c12172ff4d49b8f1ee9cac0f889e248607b15c4bd52fa529617e670107781ecd62b157b93e299380ae8368e4ca05b4189ae95403759dcc033e50a4f65250aa8ee031592324a548d052a7728756544aa1e39c08ff6a284d35cfa51a168b1e18aae8a4c666b3a2b01696f3bab15799100d9b96f02643925c8960c7fad8a02a8d16312a0565282eaccbc2f5115e2a5d805b53b7397ba539976866802ae8804c06fc62600aea204d8da9365dd39e3e365abcada88785bf9b804acd5d4b57d557d8d6eb5f564506dada0c4d542f8d624d136b7463c3e4aad1abc7d5761da87be8aaab2200ffa517b7fdcd03481aa92125553900155588f02a0c5a09a5a4509a8034be54d717d6432e188d11c5c930c4db83ef6a7ee3d02fe68e37d17bc68e0602bc4d16ae6aec8e0e9cbe0dd8fd6695e0dfb22b29284ecac141bacb3522825b37c340465d5121fb3526883cb0ad4e019e4eebc4077e73a77eb6fe559c62098e5b38d28cb57a4c84afa4292e5b31728ab964699ac3ad5eab36aadca66a12ff1890e5f73476d0eeff05df37fbc2f3687f7c5aee510f837f8f83fb73c5b47599ef59569cafd820f78aa00beaa26fecf76bccd45926c98468eae5bf71aba793fbbacca359396cd3c255fdf540caf4be9c73fa5adaa0debe95fa397307784c32a811a1f3db5c4f1d51a0d36e1e1ec4885f31d50a3dfd7269cb991c4b90df0cefd6cc29917499c1301cefd6dc239249238d7029c07d884736824719e04701e6813ce6191c4f930c0791025ce01069c61ac11465aa1e29f7825c17e2ec07e3025f62ecc5b6f7505556c7135d44700d00de9080ba5686080eaf31aea303a9c2da970f2f74885f3109b70e64512e7ad00e7a136e1cc8d24ceb300cec328716e5d4b1dc09bd187d2a1ec4a85f21f80f2705b50e64512e5fea0083ac21694b991443904a03c927e40e312369cf1af1bab86e169a2f1bb44aef458211abcf90dd103b90164efa3d231e20a2f78b04f1cd618c81d1ed63654586701ac47a76b5837f7c252390b300d3eb91b15bc1300bc6328e1b501f0cab6982cbd1ae03bb63e8b19288e341b37a142f92740791cfd6888448fa0fb0e5e20b3b45ad4a452fc15bd36a4bb00c6e3d3314670b08c8695e9cacc6ba8d0ad02e84e48870716c90e60fd533bca52d28c5c40857101c07862ba46a96e191e380fa03ba97e8b93a8b7415e0cde5a4e4e47661eec796b51a7d3e49164a5f252e091a7a4c323b198e8ade0107a2419ca2100e5a9d453b6d632bef691bb0646f42a313d00aad3a807a3aff08caf1b2f6a8135668647e03db82980767a7d408b62e3411300ed8cfa8d6f512f71af0628cfa4f63f7eb13b62729e18b85926be8547062d9b0a5a5700edac74b409c21a5f6a0b0112764a0da3c2fa20a8fd9d9d6eac58b50536b49276052ca7c2ba17c07a8e8d5849fbfdc8b0760058cfb5691815e97809b2da632380f33c9b709276f093e1ec0f709e6f134ed2e12764380b00ce0b6cc2392492380f05382fb409e7d048e23c1de0bcc8269cc32289f32980732325ce4eb55698e0ebe5e048be603e01605e6ccb989ec1946d4564fdd67fb004ca4b6c419917499415c02b2fb505656e24517607282fa36e4172bf05cee7ca2659fb2d02454c5f90952fb77354d99008360c1f01b05e61cfc89e9111ecf81a01b2f595d40ba4793b2626b2d5920619b6d654d81a010fbcca9ec100232258737c1478e0d5e9a886a73ae583303b934df8980afcf21a9b60127a2619cc8900e6b536c1246c472783b91380799d4d30092b406430c70098d7db04737804614e00306fb0096614671c8e05306fb40926e1001832988301cc9b6c8249d842490613ae0e7ab34d300957c320833912c0bcc52698844d6b64307301cc5bd301131be7a6f7eb106673b226b76c00f3369b601216406430870398b7db31eb86308393cdbad90560bc8312633b969875b3523ebc504c9c8bfa5c875100e19de9e8fbce61894fbe72756bae731be59988e300cebbd2b9ac52194b4c2fc6bb6da3d73d763068c5bcdb36a084e53819d0e600e83dd42bd47b3b2608c7aa93758965800c7d2f25ae66ceceeaf8fabd6a6d673260bda980b503c0eea304d613142889ed649971bd0b884f6370f105e2c2852ceb9602b4f7db332f91b0d59cacda5304503e4089b2abd14bf952f08552996af045ed347827d9f4931b01d2072991f6d04aea72b17067757c35fb2d6d8ed919a0c47e28bd4309aab0ef1445a02ade12f8e3c3e9288860439a7996191f99b19255c8b2ddcdf084ad94455468e7018f7cc4ce097c8485125904bd0e607dd4a6453a493f7240d6fcbb3b08008fd9849374557e329c57029c8fdb8493f49b1164380f06389fa0c4d92de5180a87b292164cc36344508f0211f4491ba112b6b293413d12407dca46a884ed9a64501b02a84fdb0895f04d890c6a0300f519eab64dfeaab9cc21504abde25077aa22a83b28829e4d870f26ded84bc4add5ceebe696f6b67e15f0c1e7ec99434138e68dac916e3b8072537d0e39f0a2245d20820ce69920b33f6f134cc2a1ad6430cf06305fb00926e1a06b3298c700982fda04338a1d1ba703982fd90493f0cd870ce66100e6cb36c1247c372783793880f98a4d30a3b8aeeafe00e6ab36c18ce22afc070098afd9049370721f19ccf300ccd76d8219c559e41700986fa4e33344c3d896f919a24301c837d3f5bd1c25354df0c886591700786fd933299ff0c591ac75e81ed0a4f1763a32f4d02d34431f047cf29d740c41506d97bca57c1d586363cb1a1dbc1ff0cf7729b1b69258f983970bb04a7699a30e19b80c2a700cf8e37bd45351968bcbcb9c0b577816729aeb502911ff0911920dd8da16207c3f1ddfd031fb1ee128f5e654e81a00741f500f67e5d56df879f40221a054cceaa9143d8aee1876780d19d2fba9909e0a906eb671d96fd2e5eec896fd9e0e0a980f6dc44ada524986f537e0ad1fd5e7d480e8af673010a0fc9812655fe6ad59f20f7a547a06b2a63ad8951033d960d7cb4120f8245d1f61e543af13332dd2f0fe4386ef16e0a59fa6735e64b173299fb2b2a58ddb7800f8e367f64e1720444b365d2006d07e6ed3faeaa4dd1564ef496f82acff854d38732389b305f0ce2f6dc29917499c3b019c5fd98473482471ae0638bfb609e7d048e23c01e0fcc6269cc32289f30680f35b9be604918e84237bf55c044af6ef6cc29917499c57019cdfdb84333792380f01387fb0e5a31fa4e387c9bad99a82b8f9a32d28f32289f22080f2275b50e64612e54280f2673bbfaa4238f0956c09a96210377f490756b8c41e5f5b860b9cc6b6b4a5f6c603acbfda33d12a8a43b37b828cff1b25ca81ccdb989c58f06cbef38415e2af12b43d145e3351bc3df187148b23a42da3f3a9c03f057cf8f7740c961decfcf72ef1b3e50c095b0b60fe61cf3045c2ee64b2ce904b4140f8d38ed9e913e4883b3e408734b36f8e1141bd1a40fd8b122a1f66b4c69155ec1ce022e6c96df4fcb013c8d27fa7734db9fd64a75b3e2b6335073944bfb7f366e08bffa4abf79d0b713d314d450d59ddf30ae097ffdab3126714e758ce0428ff978e2a107c3b9a141f190f0774477785d80100e67fe91c1552c46a1f0f1fc5aff3ce04719235b40c28e1ab2619d02a0034661bd028ced8d801006d601bd0287e71603400da9012a8e9dd27953650c2384ad606fa2928981ad908358a0dcb5f02a8193642258ca76450df03501bdb089530a69241fd10406d622354c215bdc8a076040555531ba112f6819241ed02a036b3112ae1c81132a8ad00d4e63642255ce98b0c6a5b00b5858d500957af2183ba0f80da92126aed0d7b51ef43ba0f94f9ad2851fa9ff541b8141059937313e099ad6dc2991b499c8301cead6cc29917499c2500671b9b700e8924cee300ceb636e11c1a499c17019ced2871d6fd7b45519cc2bd0994f0ed29b17632604dd60b1ac575139f053edac12698515cecfc3400b3a34d30a3b8d8f9d300e6d636c18ce462e70066279b604671b1f39301ccce36c18ce2409c4200b38b4d30a338a27e1980d9d52698515cec7c1180d9cd2698515cec7c0f00b37bbadf853098dee10d849524b205d88e06587bd8889574a22c19d6ce006b4f4aacbd0c58cd6fee53e42d69fb5a663915dcc9006e2f9be11256a7c8e00e0570336d864b588891c1ed05e0f6b6192e61758b0ceeff58026e1f9be112beff93c1dd0578ee369470832d3348d81a40b6cce011006d5f4ab47cedfac43715f259d4bf03db1a64f87e36f53691aee244d6dbf40dc0b9ad4d38495b4cc970f603d9babf4d384917c522c3391be0ccb209e79048e2dc17e0dcce269c432389f31480737b9b700e8b24cec701ce1d2871b614d2e0774078add2a541868d6c0a587f50820fa0c4b68dc10b53ada4c3c63dc241398d6344900f07be39300a9009479590412e059007450132616b1419e47741b8c88e0264c2562932c82f03c83951804cd8234006b925081783a30099b067800cf207c09373a30099b031900c7236f0e4bc2840267cbd2083bc15803c240a9009bbc0c920cf059087460132e1806132c8e300e461e998f787b53b2454276efe267b79fe1b146fc36d4149da564b86721df0ca11b6a024ed452043d917a01c998ef159fed7368fe21a14c781cc3e2a1d85935a7d8a5fcc6faf60bcbb7aa14366a26340b12892d4768273235fec78ad731d6f8caca47d2b23eb9f5d0e7c77c72840267c2b23833c07401e1d05c8842d656490c702c863a20099b0a58c0cf2200079275b6a0da48b2e90d51ada0194636d4149ba420019cadb00ca71b6a0245dbb820c65314039be3e17a949db58d7dda8508e660994132851b69328b9d7793fc091a6b5d0c9865d960184132911f6d6caf415a2650a6ba39a27deaa8a9cdffc8153e5b5843efa1955dbd4f520bbe75302eee0ec143ad6178b0ad07c59092a724ef191ad4562edfe32190ac8300ea0f2d32ec04f27d5670104c5917a24d91cc29f00cac99428fb6959bec2f9cdb3b51b37dd6afc7c96cfa63b95779ed14be4b139e0baf1ce5d65b4a0efa7027d16c8fa53a8b37e329f559692be761650617c0ef8ebd47494f2353fb315f5527e0940382d1d9e88d539139e4898a1c93c7104c0b873fd1642aea872ea4cdd970ae52520364eafcfb7a07c51515ac6c8bf06f53e15caeb8057cea044d951a21ce2fc4fcca09ac6b6944f10ae0320675282ecc3f477213e50bd385eabdc72179dbb1764fb599488f957f4ca9dd3eb44f99df8fc60f4226507e095b3eb33527adf7ca2b816da7a80720ef51cd30a111f55a69e27326fa1c8f264e0e866f1017073d3b1864f4e8d2af89653ccec0160cea384d9d4d929934549be1cee153ddf6b0e70cd4fc78206894f64b9d97521e353c9d6888bb6b42f899e0dcae382fa2d5ca2fe46733df0d305e9581b42f96989f1339858a75914bf92f70240bb301dc3bf5269fcf54e64201c5547b63cd76290f977b1112be9105a32aced01d65d29b1e61862aa9f56f50201ba88ed2d1f992ffa880ad3d348f71615fe6b40b0d82d1d93d0f1b1a20b3c91770865b1d6920ae7bd00e7ee36e11c1c499c0b01ce4536e1cc8b24ce4b00cec536e1245d5e960c6735c0b90725ce66cece72d1e6592296e0728ba6e855fa3b02607bdab4e209e982b164effa19a0eab4c4269ca4cb1a93e1dc1ee05c6a13cebc48e2dc13e02cb409e79048e23c0ce05c6613cea191c47926c0596413ce6191c4f90cc0594c89b33fc3dee2d5d416deacb7d2f9e17ff30ee13542e4a478b35f81a096862189b3a9600f05d5a8125ba61790be6092b595fe0e502eb70525e9cb2519ca55200494da8292f4c5920c655780720525ca81ccdb39c26fe4fd9e958ea00a31d086ab840db181d74c1485187f483173c7801246d6f954e09f04e1a02c9dbd52e50ec8aa2d7a2cd3fdc0a7f7b2735102c2b59fc81625381678ecdef6ccf488e2574987010f2da744b9154b0cdb291155ff95e91aa64336b9703ef0c395d4d30e968bd345866267a2289078275df4dea13a0384abec192f4f386b98aca1f931909557530f5d542df3f39d0bb9f7153b34cac5367a3eb803f0c10a4a706d9d9d2a61778580352d5ef39c270777af6184332fc93c2f1300dc271dd51c5583e4454769fcf496360bb30c64e8ca744cbc86b1912b512de607af623b8bf6a48aa4bd998480c9fa321b02bfadb267dc7c143f7bbd1b40596d532f3be9ba34649e590970aeb10927e9da346438ef0038d7da8493747d1a329c17029cebd2d1620461a6fe8d3bc255eac8a6618f0765fe7a3b07dc127a2cd980dbe100ebbee998009bc7b6cc09b06b40d6dfcfa6483a9832bb9345d25d01cefd6dc29917499c97029c07d884333792380f04380fa4c4d98de9f3952a45775cb5e854dbb2deeab3405174503a8aa2443f67b2810cd12b8a180079b02d20a33877ee4590cd37d80292701d6f32906380471e620b48c282870ce40000f2505b4012f69493812c02200fb30564143f2f310b803cdc1690848366c940de0a401e610b48c22f739081dc00401e4909b205c3568d2583d68b0a5a1b50d539ca9e914384450bd97b4c6fe07f47a7e3e5d06f4b6514db29bf03fe798c8d5009c7b89141fd1a403dd646a884ef3a64503703a8c7d90895f0bd870cea6b00eaf13642256c272283fa2a807a828d5009db8cc8a0be02a09e682354c2772332a85f00a827d90895f03d890ceae700eac9364225acfc9341fd04403dc546a8515c15ec6300f5d474bc9ce2bd9751efd23809a03ccd9e6905845ed9970ae59de03dfff474f4a9ab06bb95ce89d2a438a3b89cea7d00e7199438f9e790f86838b8a85f811050eafcf0bd496c3de323e9e0156440c93ea1730ec8ea675202e5ab0caf716455b0a8af17df1e203b8b7ade9a778dee058ee462b18824ffe8983b42ae3c82054c2b80f06c4a845db5a8c887b7ae93551d6f6c4cd37bfa1a2aa4eb41643c873a3242a4bc63830bdbd28a9af300d073d339af6db643a29a457f5e5b6f90c9cfa304c897e157332ab99abc5426c345b7961cc075be3dd3a908fb81c83ad7f603282f48f73480d4d6e3206c5f275b8fe37c10112fb4717605e9d23d640d175301d68b6cc44aba4e1719d65f4110d868d3727da4732dc88aa7b700ce8b6dc2493a39800c671f90e92fb10927e9d415329c1300ce4b6dc239249238ab01cecb6cc2393492384f04382fb709e7b048e27c08e0bc8212676b0657dde2cd70699a804a5685bf1994e257da34c58f74397db2297ee500e75536e1245dff9d0ce76d00e7d536e124fd3a0119ce7301ce6beab31bd79bd1a3385de05f80f25a5b50e64512e581a0f4bece1694b991443909a0bc9e12653f862dfa3cc7b9c905bc25af447c19007d032568b5ce2b7ff072815ac95e252f895e6b7c0cc4ce1bd3d1bee97f1967429f245bc6791ac07a13f50cb6d5e9ed93cca682d60d40bb391df32753ab1245afe8790280bcc51690511c6bf9280079ab2d20a3b87cc4fb00e46db6808ce2f2116f0390b7db02328acb477c0640de610bc8282e1ff1110079a72d20a3b87cc4b700e45db6808ce29bf75700e4ddb680241caa4506f24700f21e5b40124ed32703f90300792f25c8c68c2f6852246ce7e3cfa3d77fb83540751f252afe11ee4453d9eecc5d5e990c586f2a606d01b0fbed59f785b0724dd618f61f40f9403abab872c46fb5759599c4dc2f48a9a5bed5f72ac87092cd7a980b703e68cf4c45c2f7e7be5428ef006ddc0f51a2ec215156b3158c4f1dc13a0e0a44f32c1fa1ee7ebc6b256d0bcfbb5460af053efa703a273ba9d66d33de79f46ddf1fc588905e037cf5117be64a1036e49215483b02ef7cb43e2368bee86458c6c8678cbd4f85f20ae0958fd939ed84d043c93a5f9f071efa3825d64eb596f1decc1ec52f96ee0a7cf4099b6046719ed9ee00e69336c1246c5223833903c07cca2698840dbd64301700984fdb04338a5fe79b06603e6313cc282e7cbb3380f9ac4d30a3d89a940f603e67134cc2061032985300cc4d36c18ce2777a460298cfdb043392efe800e60b36ce10271d3e4d3643bc1c607dd146aca4157932ac9d00d69728b106fbbe29614db4880aed0a80f6659b269292d645c93a827f66099cafd88433379238b705def9aa4d38f32289733ec0f99a4d38874412e70100e7eb36e11c1a499ca7029c6fd884735824713e0970be49bddaa01a0fc217b2e555a1c972f1bc348c04211bbe700a28cbdfb2655a29694308d950c2bf00cab76d41991749946b40b67ec71694b99144d903a07c9712653b1021bdcb2fa769f517b2d7c7492063bf478990afef5c243e74c81fcdd55c28cae8358c740a3359e1b21d00f7be9d5398097b29c9a6309f08b07e604b74241dd741161d5b83e8b8d91694799144790840f9a12d28732389722940f9513a66f77054ee6711b8aad344d95dc2d6a7abe42603b92788941fa773a597c4c20fff37567ab91178ec27e9f0d8c15ba8c72e061efb2925c80eb544516529a93f1650617c1660fc2c1dfe38720bf5c71500e4e7e9e8955411148f975bca0497db41ccfcc29ed918511c045b02bcf44b3ba71010f69b9395ead7020ffd2a1d9d15a92e2c3a8432c3932d2c7a27f0d2af6dc2493a568e0ce71c80f31b9b70e64512e74680f35b9b70e646126715c0f91d25ce96421aaf61bafd92d16e32ce02d8bea7c6c647b655c9ea3a2fc1f319f1521364fde02d00b61f6c697c232d56c8de787e01287fb40525699142867225a83ffe640b4ad2e2840ce5d600e5cf9428dbb044376e952c58aad3d58c41f6267313c8d4bfd8b3144f14e748e6014ffc351d2d94399ea635753a4d1e49867132f0c8dfd2d1b056dbba3153e40db0a79cb461ad9c0aedce00edefe99844955ac35a6e2467f1de0f60fe6113cc28cee27d00c0fcd32698519cc57b3980f9974d30a3388bf71e00f36f9b60467116ef4500e63f36c18ce22cde8b01cc7fed59ab90b09b8cac71ed6e5075ff1f25ca6eccb48ae63c216cb5a8ca6f396b69ae04fef91f25d4ad0054b7b9b72a5d6f4164939ea70078ac11f13749b9c7958a4598f715539bcbc5a57c9c4665049b7cfb0074316a747c407f95a3c01ac63f62b4da11b15a8c532f62516c2ddf06a06b4089ce8d8393e28d1713053637e2ed2d32ef04e18f7b4b91939d2d7f312e8e600be556006a434aa8755f6d83b0624e162177036576231bb1924ed623c3da0660cda0c4ea7f2c06e18875b2deee7d40e66f6c134ed2b91464386f07389bd88493743e0519cef301cea69438559785773ec596d265b117c0d88c1263b0158a081b39c8a698e680e2a8793a323c96dd6bae5044d8004756c17f03786a0b9b7092b66792e16c06bcb3a54d384987c590e1cc05385bd9849374583519cebd01ced636e11c1a499cc7039c5bd984735824715e0970b6b1f3fd9db04a4ff6fede0d606d6bd31b12e9928e646f4885a0c2d4ce269ca46b1092e1bc01e06c6f134ed2613364384f06383b50e254b379b1fe746f468f5e1bfd3000b2a32d20a3381c7b1000b9b52d20a3b83cd90c00b2932d200947c391819c0e4076b6052461614306f24800b28b2d2009470e9381dc1b80ec6a0b48c2191764208f0620bbd9029270fc1b19c8a300c8ee9420b761dec54cca9d4b8bfe8f2c0575137833ef918e060fff8b3e1296ef648b3e2e03bedb9312ab1a539c6ab31c61eb1159a3dc4b00662f9b60127ece930ce6eb0066a64d30a3d85cfc2080d9db269884cd1d64301f0230fbd80493b0002283f93080b98d4d30099b3dc8603e0260f6b50926e18b2619ccc700cc7e36c18ce217551e0730b7b50926e10b2719cca701ccfe36c1246c062183f90c809995feb7f742c162b5c0b7e5bebd9f03dedeb7a384ec6fa19428ae9c9009506e4f89524d0ce46b622ba9691a6b4cb6807305c8ec3bd4af1fbaa2dc59bf84257a5f2a9477013f1c908ee663ef823d5ce12d632dec7ce09303294176d50a205eb8ac932d985eef84ad9a84c50dd9e4e94ae09b832891f249ac55c2ee0a919527b2a8cfffed09bc313b1dd97ac4169aad8f072073d251d460dd6bde2a4f145791990d500ea644d983e98b9a2d74684c74942e1670d5768273319fbbbe5654ddd788f84908b63b15d8cb00d85c5bc112b66a92813d0380cdb3152c61db3b19d8d300d821b68225ac329181cd036087da0a96f07d9d0cecdd00ec304ab06a752455bd5f2ed60071db8d92bd7c127a2bd9cbe74650c11f4e09950f3e8715fcd9e266b7692e7acd70bd802f8eb0a74e4a38d683ac4eba2f4039921225ff7aaff7c3c789857faa2238e2a83100378a129cff39e9511c73d41844c21d6dc249baa60719ce8100e7689b7092ae3843867309c039c6269c432289f3588073279b700e8d24ce0b01ceb19438f94e99ecdc8d1ea666a0c41e4789a9ee9f41246c7c23ab8c5f00bc6f7cbab1629571ef7876c25743b229fca300d6093662255dfb880cebf7220834c9d0844fae215c7581b919b44cbe000e6253c43b4b894052e4eccf10ad3fd56ca9036491f3e32f2df6707e4cc76362d8c224b69e5588a35c5eb190bdd239cb35ab62393c4b4fe4aed15aba46568c7fe9acd0b80e6d56ac998cdeaef6bb33775530f778e28bec89e3cd9de36b9ce75788e31398bb386bb13cc387fdacab7186cbe20d36bcef2b9ff1c55ab9b364c51a0bbd5c926b3dd28bc5d0a112c753dc6d56ac9d90b15aeaad77454e74de22799aeced5cd901b57606f30e4aaa926c12f6cf135a963977a8730906de734d9d73fcd9cb9cfd5221b9545ab4563ccd3dc29d2a166b2bfd6895737c26e34b76174a0b0b1ddf2e7464708fca1eee5c16e3c9e7b6190e8ab7160e926bb6ad947bea78ed32b917259796cf5d25668e22e5a1f97f6d16b95996dfef36ec9508a9d36ab5b476fbf0bcd43249aa648fe069b125db3f89a7bb4c76e1a69d84bb2f00998f3707bad98bffcbf87f8faa4e8f84fd0300 serializedProgramBytesString: - serializedSignature: 45faf2b22b009af9455ec22bf0be19a450e41c08e3848606fda638d96468de09cfe2b1fa904ce95e3483cbb9444695778715f4c9bd22da7c0de658faf45bd009 + serializedSignature: 49c3e50b69de488eb9b52d3030b289fd5f93e31bb33a3b7f4e4c3764706a2d12a811c9f1c8ac5e889b747203b1269f015bc37c43f51db90184b300bb54e0170a programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/9cafb003b11364649b4191683bd297b2.asset b/Assets/SerializedUdonPrograms/9cafb003b11364649b4191683bd297b2.asset index 255e6a9..c1c782a 100644 --- a/Assets/SerializedUdonPrograms/9cafb003b11364649b4191683bd297b2.asset +++ b/Assets/SerializedUdonPrograms/9cafb003b11364649b4191683bd297b2.asset @@ -12,9 +12,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} m_Name: 9cafb003b11364649b4191683bd297b2 m_EditorClassIdentifier: - serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c15c7d6c0e702c1dd9de0410321504aa1b8150a94044a4b298424404a90922075efebabbdbabb0b7577777777f7be5757be99d999dcb37be7dcbb7bf79ecb2c5fc38f6cd6ce9cf39f332e5b2b9ff19fd840fe6b3e9bcb26b2c16c1e2b636bd86afed7447e5cc5ff3967fafa1cb68e1f97f3df25fcde40969be24df1d337d69eff9ececfaa58357f733d2be5c70a79bf8895f3bfa7f377cbf999b8ba8cff2fe74fc5eaf097e6b1496c369bc5dac5daa410315fbe54a5aec5845db1fafcf704b60fbf5b2e951281e4cb5bedf8af227ea74ade5bc595d6cf2d648ba459abf8bd52fece3a56c9652e9512ebf71acce41fcc39f451c7daead897ffafcbffcc03d7c5793fcf731df8ff06ea6ffd6c7b702d471d2f50eff707e7e2d84c5d1fa0ceb5fc8b0c322ef6c8b8085c17c70bd5fd81e09c938fcdf4c8d1ef5da29e1f047431dd1fecb90ec317f7f395ec73d4f5011e7d86b8f5a9359025b74bdba3595caaee0f05e7c2aee7d5b996d71230abab8e6dc0b536ead81b5c1ba46417a8736d6b1d75cc57cf725d1b7eafaed552d7eaabbfa1ff685bb5bca1f1f707697ddbaae33075bc4ce900cf05a74b9cf76a3dec79af7f8af73e4fa267a13a3649d3bee1ea3822897d9af3e580f3e58e6eb5cf50e7db39eff45ca1ce4782e7844d859ef7ee4ea29bf6b72b98dbdfae50ef7eed8455a7b5ba7ea57a6e3838d772c4756ddbf6ce7bed7ef5c16594f36c8f6a75be8313769d152aecfd7de87f9547ffab948ccd4ac6cbeafad51efdaf46f46f038e90a9291d8c66ee7490ccd6318e3e030ef6f1ac0e6b33086bb36357ce25ea7c2ce20b9b3d7aebf71e4f12ee389698178c57c71d19eef34d5558db05b0e91a10c6358e6e7537a9f389884dd7786cd2ef9d93245ced1fd77afce35af5eed34e58757f54d7aff3f8c775887f4c00b6374812bed7eeebc1f3d73b3ad45babce2723765fefb15bbf778a0fbb6ff0d87d837af76127ac7a5fabeb377aecbe11b17b923adeacae8f04e7e2789347d79b9cf0ea173ae1d5aff4c8b9453dbf3d3817c7291e79a33cf24e48627b4be6f6e75b993bafbf55c9d07982a90c9caa8eba5c9f0eee69dd7702d7743d6106ab491f03b58ed3802cfdfccecc7f9ea17de736f0fe6d8e0d0d36abf3d988efdce6890ffddef349c2f596b1b72b193b80732ea361eb2432b4ffddc1dcfe77877a7792a36f43ed0f7732b7ffdd09e440ffbb4b9d8f06e7e278b7ba3e069c8be32c756cadeeeb7c6c8e137e7fcd659700f131571d73417c14b178fe288ef3e27ed05cfb41b1637ba371cef546c549c29aaf8ebb7ae4dea3f41c0bcec5d15497d07170af270eee55c7fb3cbe719fa35f63a6ce1730b34f61eff54a62cfbdea99d18eccc665eafafd9e78bf1f89776d7f13c0bcb93a3e08aee9706e57e7babef7409c4fe3a799dbbf1f00ef3f08aee930743d1d86d902bcd3571d5b816bbbb1b8dfe96bbb33b78f2df4d8f690ba3f0e9c8be3a2b8ee2d74fd740f75ec04e4efe93cd3f6ed24f1a07d7831e0a9750852975da28e4d93bc1fa45ea0f3d98799bb3da3f3729d473fa2ee8f07e73cbe9b6e06ef8b633fcff343ddcf37aff63cf728e0f8a847d663ccdd367ccc23a3a5e7bd273c3ef30473fbe2939efb4f7ac27b5cddd7758c661ef94f3177dbf329757c9ab9cbe4a71d3d9bbdef79ee19e62e739f51c7291e3913dd729aeb324ed721617959c2dcbebdd413a65fffd236f607e7a09ddc3459b9a57d699e3a3eebe1f1acb2e37e4756739d9674fa2d06f698e46bb9cf31773a2d55c717c0fbcf816be2f83c73d7639e77746931d3d1a545a5e7bd2929ded3f57fbfbae7f97c2e19d745eaa8f3ee97946e93c0b938bec8dce5c38b8ece2d5778e494abe3cb1e392fa79073813ad7e5f01e296cd2e12d53c75794dcc9e01ce631af32777df15527dc56cd3df296fb94f79a47de6b4ade128fbc153ee5bdee91f7ba9277bd475e854f796f78e4bde1c86b5d3f4dce6f2a79533cd7f7f284ffb67a6e2a388769ff2de6ce27b5bc77801e6faae3bbcc5d6ebc05ae8be37bcc9d87bfe7d8d8a6cc2347bff7b17a7e1a3817c70fd4f5e9e05cc811e53c4fc76d3aaba396fb8ee7fd7798bbfea6c333d9cce5b4dedf23e77d757f27702e8efd985bbf61ccad9f4e537ee352cbfb103cf70eb8268e1fa9b06680731e56db5c47f7b6d30286f921784ec89d99e4d964f9d427eafd9dc1b938ae54c76eeafe2c1fb2e68277b4eebacea4f3fd4f95bcd9e09c736897e77068b7c4f3de67cc5d7e7cc6dcfeade58df2c83b3c89bebafc58e509eb73e6f6375de699da0bda07dba68827cd66b53aae4922b387a37b7b9db77750c78e4aaf39cced6f30ec0ecc3d6ea0e302d6794d6d31539ce96b5dc135dd3efa82b9db475f383a77c8f3bc0bebf2a63a7f13e6aeefae65fedb94ed55987b38fc3aac4df28e66f8a592bf8b3adf5b1dd781fbe2f895c707be52c72a75fc5add9feb91ff8d278ebe06d7c5f15b8fdc6f93f881d6e5bfea9d22702e8edf337759ffbdc3a3e3299ef7ffa79e2b06e7d8fbe2f81d889fef94ccd73d32abc17d21631e38d73eecf5991f3c3ef38323bb932e5fb4efce773874d2657b2bf55c718ae7b4ef7566fed2a2f29f4ee72839d7277967bd3a6e48125fdace1f3d76fee884d359f7afe87206a6dbaecc9dfffec4dc7d363fa9e3cfccdd67f3338ba76f9dde609f8d6602d3dc46e64e632abfe9acfb233b0099e2b95d1d3bbb0c04b2f8f35d745dc78f3d9b58bcef08cad271b9205c1c7659a2e4562779a7873afec2dc7eff8b92a1d3eaaf1eddf5784c5775fccdc3f837e64e135afe6e6ef95d73d5f93eeafeee497435e5ed3aff84696b5f75dc8fe17ea9f3a88e2c314dfecedcbefabba36bae8e1f5d97d27d1649fae8ba3556e707a8e381eaa8cbc88354580b9df773611fb238eaf33f98bbbfe20f255ff3d56dfb3f99bbfefaa7879d9633d42347fbf9c1ea78884f3d1ba8f7f5b8c7a1ea7898cff7fd968987b36065a038fec5dc3efd978a4795ee72f538a8eea7eee7796f98e7bd64e39fde3ac691eaf82f75d4f5a8bf99bbacfb9be13e7a943afe5b1d8f50c72d1e195b92c8381ad8d8c023a71d4bf07df127f47d79ce6defa119d673cebbbfafce8f51c786eab832ae43db139c638f64716daa8b99e2ff5810ff42a6ce1b8f4b117e0a5f89c598abdf589e8b632de6eaf391e782c3cd2afcb73dbaeec092e6cd3572f51c963dc03997dbb3b123b7672fe4f945e0dc4778496daee3b159cdb388e5786cce51ba5da174d33ea56d1e99c2662db79ec766e543c25421b7577be4f945e05c1cebc6c3937f0b196afca797eec76e03ee83b42fcf7de89c345fd169a43e73a791fa4a9764fde5c7abe37fd451f501c51a28597b82732c2d9be60cc07104f17e43e6cabbe439d7adb72eaf3d6372b1469ee71ba9e7753f782bcf73859ee7747f844e6b27aaa329dfc7d898c6424e52c79393f03885f91fa73855e9dd58e9b3189c733bfa1cebc8eaa3fbce4f53c7d393849faeffe8f69df61f3dbea1eb56b9eaa8f2c6989e9f360f9c739dfb2e00ef83f7d0e78f55cfe972afbb3a9afad4bb797468ee91d95cc954f5c3580bb70db1166e39d8fb79ba7e74a6272e55bd3406c606e4dfe21ddd8ef4fa724be6f665fdbcf64d5d87efc9dced5d7dbd1773b55363aacc8e817228a6eaf979773bfae6e9feb0cee03e4c27eaf97eba5d7096f35e3f1d07267fd1efe4aa670b933c6b6a67f4053a79fb40f478f0d9cc3d6e9dacbcd0eda725e05cdcefa2cef5dca61dc1b9b8df489db7f5c47d5bc7befeed811c209f9de35f37dd4e1ba0fa49e5d458d0468ce9b245db3f069c8bf7952d31dd8fa4db2fea7e4cb7f77601cfc174a1da987206ac78aec4f37e678f4f7506cf8b631777b831cd54b7159782732157a59798ee7b9c07ce01879af0b55e7afcdf4ffe94cbdcf953ae237ba0ee7b53cc07eaf69166d0dde36fe25a0f25ab149c8b771b7b9eebeee6c4ce65aefc20d61d8495acfcf6d6c3555a1aa8db49e731ff65869211eb05c254fdf5b1decc5d57eaed843368a6e7399da7f407e7e2be3eefc3dc631333c07571d4795599476e4f8ffc72c7ae41956e3935e178e4e8f7d94e1e39cb3cf7a7a5e09d8c9faa170dd6e5fbf9eaa8da9e313dbf7baee7dcd807901393f5c369ac9c95b0b52c5f062662c8ef547bfd66ea49f6b2ee2f7e899fbe32d86ab60f7fb5dc34d37d9e9c475fcd73e202e34cf70eb28ea1439f287f97f0272aa4d0e5b18420ee4808422857c9ff958369fa55fcfa5439cb5f4cd4afe07706b399fc28de5ac2112fe4ffdc52e6f3602bd97a7e56cc7faf95f29670b5139f4c659298d2ef7d672e97e9ac3858c5af68a06bf979a5d4b048fede20352d97da4fe7d7aae5fa87d56c399bc08f9b646889b6afe37f9bc22c56c8cc3a9a171e60d79de50d3a9a26716b84f6f9b2bdf54f8c6c8d18914d5f913ec44f9d7cd93a3c3a2126fe61e8643239b27070640c95c862ae6b052c5faef5989b4030b88d89169afddbe13d821526b5c54c4644772769413c862b7efea16046a76ee372dca60d63f9b279df398569c9c00a7979b2661ac4849c9c3a4384a25efc31137ed98d519445fcce7315f2b9e0115057167eee089055fb62fec726febf522ef32a918bc44aa590d5fc38875f2fe17f0ba513e26988105a4fa24e2c4853a98bc1ae65825d3fdbb053e72ec960d7afb12b0e5bfc9809364008a6d2012358db4450d6fa369012d4d5b0225edecee05a8bdcbc422e2b5c0324af9125aa08b3aac6e3cac15f8e94f89bd003e3953d1d46f27810dd65833cf1608e8346320e46810a6836adc062b28e292665dff8ee598cc9b875cef579d203bd56e8a792c74863df31d244c648d7841809a60d4636c74456f670ecb1d5c9ea45b6c1e936adb12a4e375fb6cd737d724c16b6ea88747eeae598a3adb98cb64c0487455d5d53d4c9cebde22c1610e2de1a29a5843f1bbc88103daa03bc458419694b89b47d8271a955c010d633201c2210b6326815cb69e0d14a288448ae8f496e1d5672034c721b23c900921b9a1caa69f6ab774e5da912a9d226772751d5ed9650e3b83fb16e2d3daa1d5a674bae03e64f8d4c712308b637aa75c1b884e86987474f634c7807a3f083c70611dec4245c38444753562aa765842d92449f675f39f2bb5e3e279bc439094a37c1956e8a292d87083c4a8be082086f66122e2258f4652714dd5ec1cd71c1cd4dc94c5ecc7e2336bd6abd88f976beabf5dd58b23668d04a7d0b53b4087ab99852dea8e986474d4b4c787783f0bfb76cd91244782b2ce3ee1136e36e8de50c3d8d39834178929ca10da6762f83da814ab2b618edde1988ca76a654269da782349525369bcc4d25d8988aff3d994b5d275341d0269e189de8626086a7cbbe325d0e4ac8c533a933968adb634e9517362d7430491675a67e7eb2ed46b8e08e26c12291f5cf4022eb84091f9001e19d31d803c3c2ee82a93d28036a77c5840fce80f06e98f0fc0c08cfc5840fc980f0ee26e1a2d233d48f8327a9f0f4c0dca420ac9bf4c4780ccb008f5e98f0c20c08ef8d31191e96491f9364d16a1c51f3705cf2165355a3012ebc2fa6f67661d5cec3248f34480e541be867922c6a03621d76d8da407f4cf82883f05840e1030cc2f36555f210968daa46aa290253e52e7ce56c36af56efc59cb1ddc4025e8f11cfe5c765528b7239f251ee636a41f2aac90e357c401352d6862733ff131de8ad1093ab6ac9aa91984e952737a79bc7af5730318961b28c810a19d260a3362204ec79cd62672636185c2f633b07e93adc51866e171bac2237104b58630d09cb988d254958834cc245c21a67f0a821c2a3c6d744e104e6ed7f8d1ba6ff9ac05f5bc1056c90531dd6bb6ab0f1a77212fb2476c4751e8ce5eb130df9fac05a869c2649be9e6f122eca7e31872d4cd93f04d37ab241ebca805a0f3509175daf53fc685d0f175c8009164be613067945ff59b11c8a5dceff09f7cf95132bc47054905087612e3fcde0f2b50296258558444c374444e3dac1226238267c2783f09901858fc0226386dfc81025c71a1e254122633bcca49906930e0e68d2489370918ac474f050d5a8ed31b56719d4ee552798daa330e1b30dc2e70414be03c6644e5826a34d92c5f3bb3024b717fda50d45461f28871e83e12932e0199d130ccf8e26e10d99b372324c0e3d16d37a9e41eb63036a3d0ecbd2e61bb2b4a0fd9ee331cd7735682e463583683e01e3bd2024ef8998d6bb19b45e1250eb4998d6bb87d47a32a6f54283d60bea05d37a8a49b8c89bc55481841c9e3183f42439f9544cf54506d5731b04537d9a4178beec36cfe698cb78d9532aea1bc1c75cf6347986b1f920d68099c65b92878e55f0a79ba245905be2c75517e351b293294ae4604336479bbdedb7609152e23b529632f34873aaf0b1689961a227075476c9223d3f737acde44a7d932b93e4da24589574da2b426da6c99905355ef0240c183731656065b843ef6c122eea2fcb18527f113ba405afbfcc3285233a3cc5e628613b3c6763b9708521173e25602e3c0713be9741f8c30d8309dfc5245ce05f89e1af4c0bff5c0cffaa0ce02fc208ad3610ca6b148c50b149b8f072b14355a8aafb3c9364519f59eba79048529f998ff1d8dbc0e38c803c763509173514b14354427d460c0dead9abb932b774863f7303d57216600655190cfa3ca041bb61ae596d70cd2d5b0e3a28886bee8ea5aff558fada9056fa5a8811da682054dd2418a13d30429b3290781761feb48f9f5490c469f6c490ec6b4a0501912cc684ef6710fe7a40e14b30e1fb1b84b76f1a4c7809e69107601e79605a1eb91433e2208311239b0733a2d4245cd4760ef6e3344b71c16598378a41a984dcad857453d1095ecdff2f95f5c452594fcce709af845f2de5f58b204e5b8e857fa829fc06aef0074b0df20385b70c0bef30537862dae158fedc9840612cc7c2381c0ba34fe0305660611c610aa39eb443d48a4b78b11534ac0a2cac23b1b0faa41dd65e86b0f2e52cad6cb65826ca019f7569b458c49657bd3d48c6206d16b1c595a9cd922c74accdb2d21447a2c812fb67852db22ab1aced6843d6f678bb6059db2accbb8ec172a0a21adf72d7b02af9ef127e16acaeb51a33ee5883719ddb07336e0d66dc7126e31a2ae3c4f006342d88396b4d218ae2ee788614776257a6e0c5ddde18b6130cd87a750c866d1d86ed4413b676f234ee074e9f4b99eac22a9343b6254caf541f15d03faa305d4e32e92246ac06ca21c335726d68baa15663e9f964637a0e368d7fbd49b888bb530c71f772a76071b701e375aa8957234fdcc5cb8d20b436624e7f1ae6f4a7a7e5f49b30706718c089798f41c0ed83813bd304aec0034e4cd22853c75259455a2da588c420ae97c8ec328e37973fb34c5d71128cf3094e31d4ba5a1638cee29620d1b02f86e72c039ecaaec1f0ec87e139db84a781114f1063f6c78c39c760ccd3018d39c0245c38ecb998c39e9796c31e88413bdf044de42f8b6bba2f769117d74bff71d6e804c1779021e47c39a15b14b85b6fba9b9870b55e56abc4df1b9833e9a958861d5f7e1f6622db052ce81cfb0b99a8083a299a5e7bac0a7930e69317613e79715a3e7908e69397600939ee93b398d87e2158e1702866d7a5985d97a565d761985d979bec6a28ed9a2917a5ae05595510cb0ec72cbb02b3eccab42c3bc2148ea8895f95ccd5bd01f4c5033812cb6baf36e4b5cdbb07cb6bff85c5cb6653bcb4618915125d3ee6f212b344e54a6581ab744761465e6330b238a091ffc68cbcd664a4a8a5c617e4e4ca0a833038a849479b42153342c4173fbd33426a9b9c22c98c9063305ed71b78bd1e90d7b158d2b9014b3a37a695748ec38cb8c960c4821ec18c381e137eb341786eef60c2ff8379d42d268f12ad8d49b27076f6ff2a91fd15fb2a9f82adf49ebc263784578082f8d909586cdd8ac5d66d69c5d68998cdb79b6c76b270dd604f2f0b3f098bc23b0c5138a44fb0283c1933e74e9339629956bc6bc5a94d601d2ccb64d6b14ae68fced647418c3e0533fa2e83d1e3021a7daa4178be5cefb7966dcd8a67912765c47b24e64ad962b67f75e8caa7d89ab7b68760be5c9458c852572f33a5e300d90b2c9e2f55e4aa447920626d29575b283db1a68dca642a35568cc58759f3b2aa3956393e0d73d97b0d2e7b7d40973d1d4ba7f799d2a968a54d01f5905c9901a59712cfc0ccbadf60d6b17d8399752626fc0183f0c679c1849f85097fd020fcc780c2cfc6843f6410be7fbf60c2cfc1843f6c10debe7f30e1e762c21f3108ef3c3098f0f330e18f1a845707147e3e96081e332502b1147a2128738bd902de981a95624fbe4501ebb717987412f5dbc759f8d586179a848b592e4fb090136d2ec2d47e32036a5f8c097f2a03c22f310917f52cf1f9dc3053842ec5603f1316f66598e467c34abe1c93fc5c58c95760929f0f2bf94a83e47cb96fc112b6f5768a8379c07819427a3bc6bd60f24263cd457c66374f6e2c9e29cdb09ac955585cbe14362eaf36491671f9b29fc4f8222e7833a6f22b6155be0693fc6a58c9d762925f0b2bf93a0cf3eb21315f8fa9fc4658956fc024bf1956f28d188cb742c2b80953f9edb02adf8c497e27ace45b4c924575e55d3f3092d46b6ec5547e2faccab76192df0f2bf9764cf2076125df8149fe30ace43b316ffe28a437df65109c2f77f0c9e6b29849b20dbf94a5b709e3c75cd3ee86faa2f83117aa9f30f3f298547a6045e7dda6e811cdeb4f59f84953f76089f7b39089f75ecc5d3f0febaef76192bf082bf97e2c217c1932213c60122c5a23e2fbcc615b230f62c2bfce80f08730fff826a47f3c8c69fd6d06b47e047391efc2bac8a398dadf6740edc730b5ff1b56edc731b5ff9701b59fc084ff9001e14f62c27fcc80f0a74cc24543fe273fde9da421ff3416933f878dc967b004f94bc804f92ca6f2af61557e0e53f9b7902a3f8fa9fc7b58955fc054fe23a4ca2f622aff1956e59730c97f8595fc3226f9efb0925fc112f7960c24ee5731b5c57afe506abf86498e8595fc3a26b95658c96f60926b8795fca64172bedc4d339bb57cbd1c417f7d20e0a78c627ebbcc7262e6da7daaf0b1dafd5b5812a81b0b9f04dec684d7cb80f077b03cb2be0966803cf25d4ceb0619d0fa3d2c1d340c9b0edec7d46e9401b53fc0d46e1c56ed0f31b59b6440ed8f30b59b8655fb639364912c9bc512d73619441f858bfec4245a34b89bc7c237b83fc588b4084be4332c3db60c991e3fc704b70a29f80b8c45ebb02cbec4a2b04d06a2f02b8c47db903cbec604b70b29f81b0c47fb0ce0f816d3ba4348adbfc3dca36358f7f81e93dc29ace4ff62923b8795fc3f4c7297b0927fc024770d2bf9474c72b7b0927f3249165dcbb9b124fdb5de003ec103f8194b32dd3390647ec1b8f408cbe5574ced9e1950fb374c78af0c08ff1d63d23b2c933f30c97dc24afed32459d49dfa66a0eef417a6765e58b5ff3649161971bf9039f6164c70ff9082e5c7c74d2c068465113349167dfe03fda89ca4cfbf16a6f2a0b02ad7c6240f0e2bb90e06233f248c1c4ce5216155ae8b491e1a56723d4c724158c9f531c9c3c24a6e60922cd25561c804d81053797858951b6192478495dc1893bc5d58c94d30c923c34a6e6a922c8ad8ed3350c436c3d41e1556ede698e41dc24a6e8101199d01202d31b5c78455bb152679c7b0925b6340c66600481b4cf8b80c086f8b31191f96493b4ced091950bbbd49b8686a4ccc5053a303a6fda40c68df11133e3903c23b61c2a7644078674cf8d40c08ef82099f9601e15d31e1d33320bc1b968a760a9b8a7231c933c24aee8e01999901203d30b5770eab764f9364b15ff42c3fb5a924fb45f7320916edc6d9196837f6c678cc09cba30fa6f62e1950bb2f56759d1bb2ea9a87092e8a1996eccc95a7f0bb8ff1e53ba62f49ea89effae8bc1b7f074e9d1fcc7d62b17caa1aecaab0582ecf8d8f25ba3f01eebd3b9fdfab08b8494c3f8c40b189c05872027a3172266ceb8fd936cf645b6fe61eb78def23ef68b6bc266ecae58873355b91a065fc5bbf41f41c80e939dfa4e7384f1cb8d93afbdc78752f9554d725d157dcf12f3588750331eb76355937de130b710d1d4b1cdf10712096e416cb91f5c49400edc2edc5535610fb0661f62d30d9372a8dd89baa3c2f4cdc05b1683066d16e268b26a76151514a8b5249cc44fe908fd9b93b96f7a5f6ccf15c8732b06d5e78cf4c2f4f1982d9b6d064db24240e67c978da28f38e956a4705c7dae9fcfe6c7e67b5ccbbc515f327014d9feccb5cda1b8a59b9076665ea189caa76cba99696d990c31460562e325939b3262ef50601707b80e935bbea899d809c9954d36b9e8cefc83557c655398fc50da0741657f796c108abf02d0b32913a876156ef997eb931596aefe82b3c756bc66a2166df62937d3b7aec73870b6d14e950cc3673f61a5b9e245692d726d3b76c3866d912ccb260794fbc26b686fba81004eb91c94bc3c4e5aa412c1b81595662b26cb7c09639e5a23b5f0d624b985c389d34ba1dc663a989c7601f3505770c4f962d0a9d523359c71989695e1aa4d6364fa6ad4a55de3bb35275e9385fe5336509a469cac2ed318bca4c16f5f31d17c55c1f67a6ade3a95e8de1bd20fa8ec2f42df75376c35083e4f06e4bf03b998a951d302b9799ac9ce8ab149b2ed3b43d25d968ccc6e5261b77089c2b3aed1f3dffdba99539b3c48535453225ad91dbe356255805575606b1690c66d30a934d859e789b28f57174ad76a523c72ea14d324d13bd36fe5e102b76c4aca830593125218dc54385fe5724f5ac962dba52b476e1b615bf93194bc76296eee5a73695989b3831582a6b4fc9f36fbf397bbaf9e438ccb29526cb7af9ced7cdbd0ae96a391ed3b2d2a4e58c102db1d9fcef782ebf35f3bd0998cdabb07ebbd436cf95f74a640c94d5d401b7460fc244ccbad5fef20e73f9eca7ecca76193d09b3748d9fbc1ecb3baa552c26964934564cc6ac586bb262684a2ba62b0fdcc453dcb24036a4e76f5330fdf736e93f20a5fec5724cc2597915ef7ff4ea9af844109da7623aafc36a3e61986b5d69d3fd34cca62aac4d979ca7ff3e6c939c209a4fc734af36693e04d13cde829bc5c44ef54b8db9703c2e32957e77c2b45f6fd2be4f4a5fa21baf9a8169bac1a4e98414e55eb1ecab9a236956196b8458691097244acdc4f4927e5cccc42cdc68b27058066aff784a48b746bc3366c326930d79fcd4dc77a4db5a6eafd2eb7433a5ed2c4cdb7dfcb493b1964aaad198ecb651666336eeeba7c703b62d82f478a4d75a493fedccc1acdccfcfc853e6671438254f7186fd7517cccafd4d564ecb92959398fb536199b2762e66ed01fe52a7b92d903a75a6d30e48b7055b84d978a0c9c6112973a0e972646d352f972a6af2d5e4f94fa652603166c941fe5a02264b66f117666549ff7998fe079bf49feab32cf037ae9b5e8990beadf3315b0fd93af3aff4954c8c0eed8ad976a8c9b639e4b615f92e093261fd02ccfac3fccceaa288d9121e94a9869d8e75bb61d61dee6ff4c69c4653cdebca76eadc1db3f208ac4569ae438b0fcb2ce50fe9f24f8c5c27965c991e9d5d88697fa449fb636b3c30f3f3468a98f3f9c289d203aba5dcf83b828ef6d6323645d66056c910d2690b2e4e6245fceb73e66fcf6582fa1e18f57f61bd894146f8ddadb00afeeccef20d276e32e7f98b302b8e0a32a6e7df8ae9b2a7b45aea29fcc73d07223336ed89d9f4eff4c688a6c8b1ca55c63122dc5329c6881663961d6db26c4cd294eeef4334ee18747f28277331b604b3eb18935d23d1fcd7dc87e1d4072b99eecb70ca9052f997fe8ad47ac35cf4745b51259835c79aac99855ab3b38c93153c27d6e30d9532c74caee9d6ecf9588a597e9cc9f202df968fe769c9544a64de8252cc82e3b1f14ddada9cf661d136d377333da25486d9fc1f3f3330bd23001341fbcb9bdb7b752ee67faf4df04cbc8f34bdd19b72ccbe13fcf46a24da27eab0892d2738f6e4e73a6e653ab59165988d279a6c1c9dc246a705157fc17f5f63ba56d5e3ff62f223eb93a50467ac608df4759172f2bbf25bb2e69dea036bfaba085b8cea883451cc2d89efba9e5cc2491c58dd5accf9e91b13b0ab959bc69679b8396f564ac9f119326276e05499e69d12b6949fcf94b59f6adf1fe133d5c307839a38b4ceffa7f8bc3b52c6e4e7efa02c4e5a2cd0dbe62c3d59c46a3b15abb5f273858d03d2f4a6d45a9c2242ab6df6a1c47d43616dd0a4bb2360966a2dc5c4ea5391b886c8dff3b8d43295dd267e083d65d830259bc21e2405e87c3aa5b87920033089eb201dcee9105ea7aa91bdea32562fa7d6101127a752824bf5d5f828c0faba491cd66994b09a4858c299e3d5937875390aa8f6ef1447753a25aac61255b17c65b9acb1ad9322443d210aa0726bc7419d41090afb0e7114207ddf2e0ee9cc6c27bcf827d0a3806a5c6e1cd55994a8ea4a545591ca95c48f867376b6fd68ae6c999571b1514035ba431cd539f419b8d3cd272aa04e0798f355d62880da34200eea5c4a50f52528d1172114707ad3a300a8b2471cd07994805a3158377794d015ce4ad5308a4e65b373bd38b6f329b1c9e5b0b20f563765a280e7f53e713c17d0375cb4574d5483a6a2a2191d5f9a9313877521bd2f452d0bef05f05c4489a701838d60b1186f53446a4ea39bc6115d9cedf69c06160550e36ac5415d42df9ed39b5845ab3db71974a45c4a09a925d3f5f04932686cd4350ad0cee815877659b693a0b30dc4ca48801a59270eea724a50cd24a889b24220463956f28b7a5dda3ad95b1d055c4b7ac6715d41df772ef088c12521069f06110570c5a00a7a2525b846ccd42b25e67a4501d3b82e714c57d167f6baa6ae27a28adea9e50c4e4a8d02b4050d04b47a391ee1de15c0e98f0c06238d8f618a3c7032afc6ae955785bc32ef986677fe88759a5f0dc724f3127a33f3925644cd7775dfbaf9ae2e41f30c8da4bc94adccbc40238f7901fa42f27ca79b3cb4cea9f5c787f7f290b64f1e3a2e9197a213d57cbf08c4209e6d9adf8d77f4e7193bdbf27c14f879beab9c7981cac33c43378df63373df697c52877932c61031a963f3fff3f91643c47c8b6b0404b14bb1f871caa96b29cba9f62abd39d36b56b3caa493c9168b6dfabc3a744ed0c1fd65575d3699b469e02abd5afa31309d12ec56162ff6afb30967412471be08705e6f13ce6191c4f929c079834d380b2389f30f80f3469b700e8f244ef14d268df326ea1e0c51f95926d7ad8959fade4a2219bce654f072802fde9c0d5f5c8e7a23545f94e323e87036a0c2391fe0bcc5269cc32289f31480f3569b70164412e77a80f3364a9c6d53143c50dc62f939152294f5a850de0350de4e3f39aa522da92c52ed55a4772e73e0da5181eb02c0dd918da90843654780fe42c35ad9e1211e2143d7840add0480eece6ccde22891fd3c5942b7980add7480eeaead9bf3c1958043229880ef0628efce96176e1b09784780ee1e6a2fc4ba6b7dccd5ce1ccabe54288f0028efcd86170edb66bc301fa0bb2f1be80ab619749300bafbb3518c94aa6103efe25577059ab01821ab401700940f6c5d94512f91e702940f662341176e33097a1e40f710f5343111a8b35e5c37dfc4f715087b0dc93cae21c0f6b04d3dd8a4bd86643dd877009c8fd88493b49b8b0ce7ab00e7a336e124ed8425c3f93dc0f9984d380b2389b31618ae7adc269cc32389b339c0f90425ce762970baeb9143235993ec08603e69134cc2210232989d00cca76c82591041989d01cca76d82493863826e0c06c07cc62698851184d915c07c9612664705b3923f24403a1bc74ee7aa6c62f8d66684c550372aa46fb138d2e7ec19a7de3e82dd6cdf0294cf53a2ecaa508acd30c56428efa6c7fa38813f2ce6eb6f6015b2fb631d759134810aedb100ed0b94689da9f955cc19fad74b23ca13573445a0bade06407bd19e81d891112c78da8082e7a56c94e27e274711e6936453a3c603bf7cd92698849e4906732c80f98a4d30874710e6f600e6ab36c124acac93c1dc0ec07ccd2698db4510e61800f3759b6046716eee2800f30d9b601276bd91c11c0260be69134cc2d63819ccc100e65b36c124ec7a2383391cc07cdb2698842d7032988500e63bd98089cd21f20ea5112673b296795f00f35d9b601216406430f300ccf72861c2ed2856a9c04be45614599a9a45d6733914207c9f126107e6ee57172f3a9fbcdfb67ad51f07403fa01fa8d0fd95a6ed46c48626d56ca314b132c28b995a03a41f522215132035d02932f8bde58e31e23c61abc708806b04c07d948d6e607f13a909fb87c8f2c97280f2e36ccc27f2df3f14c50afab900e72736e1249d6a40867336c0f9a94d3849776221c3791cc0f9994d3849f70922c35909707e4e5dc7f4b77719fca42919d07ba8809e0a807e61cfcc0dc20e61b272fd7380f2cbadd91e77a3245d614106733f00f32b9b60128efb90c13c10c0fcda26988423926430370098dfd804338a6da17d00cc6f6d8249d8bb4e06731d80f99d4d30096b9a6430ab00ccef6d8219c5b5e3ab00ccffda04338a3b59ad0130ff67134cc2996f64300f01307fb0096614e7ae1f0660fe4809b3198b0fa269a9591a3e2ba3823703c0fb69ebb6c4e1446bc2f60edd284f2c8ef2674a94b90694ce2a8a223689c7e804b90b60b9baa6379f153d49e3b90615b4e3922f52e1bd1278ea2fd4836802af08789984ab655750aea5c8a102c700b85f29c189ed3ec48a9d394c6c17867e3d2d73c81a5121ab0d90fd968dfe73fd8912fc2318da2309bb7bc9a6b98c04387fa79fe6a277418d7ba0d39f5ec1902f6145a070e90810feb13547c2a33f51b50f40f96736123756e5499cc116c5396c37019c7fd984b32092389f0538ffb609e7b048e2fc00e0dc6213cec248e2fc05e064b52cc2393c9238eb832663cc269c232289b307c0592b1b38fdcf718be22ac8f34062af6d134ed2215c329c7300ce3a36e11c16499cc7039c3936e12c8824ced500675d4a9cb9ccbd8e42f4543a8dcd32feb7e8f470c86c5bab2a3e0478eb51e20d36e32d8a63e4cf0094f5b72e4a386411c5edf2be01281b50a274fad4c5cc1bb11425fadfc36b06c035a404e77c8d78233f15bd97ce57898b14c6e855d03b036c8db29174fd8d7b4771dad51480b231254aefbac7d26db484ee051a8f4db6ae6f46bd58a906bed9746b96d093a4af2e657ae35032949f50a1fc09a06c66530f11e95c21b202e83180b3b94d380b2289f30d80b3854d38874512e70f00674b9b70164612675d50a2b7b209e7f048e26c0b70b6a66e2cba3fa01eedcd6ceb8264dd86125c0be6fd14a62320ea7bbc2c0200db5202ecccdc6d1dfdf5327c76e53cf504618b87ecab664f01aced6cca1f49c777c892f96d00677b9b70920e4890e17c09e0ec60134ed2e132329c5f009c1d6dc2493a364e86f32f80b3934d38874712676350b7ec4c8953d4c52a235d9bec0d3caf0b25aa9635a8c4f62333d5a4eaf8d7c0c550ada8a6932124fb2a783b80b0ebd6ecea9dcd5fd98b89f1ef6ada3ae4522a94a50065374a94fac331ce4a097d9c235b35559285c3648af4ce55351573f2551364bde87b00b4b9f64c1988e24af05b00caee94287b337703722d8b2fbe0bba488f70b8826c915e1d508ef7880ae828ae868c01d03db3315d2bfdc5a6843bc490e1bd1f6418bd28f1b64e5143d096927a691915c69900636f7ba66a45f133b19f00947db2d589bc982b5a2515592505447911ea0e00605f7be61e457167b7e500659e3d5365a298ac770328fbd933558670d611d95499f6a04ad4dfa60501a44bfdc816049c0d3c73804d3849974993e19c0c700eb40927e9ba5e329c47019c836cc249baea9c0ce7128073b04dc319a45bdf92d535ef0338f36dc25910499caf019c436cc2392c9238ff0b700eb50967612471d606f5ce029b700e8f24ce9600e7304a9c7d5962e3524fea2a93d726ca91a455f2efc9fcff7a297232dbc0caa559ce98531606462ea4827d10c80a0ab3317c175f4524e6d6ad532027b2157220cfedcff1ab84688fa242fb31403bdc9ee1bb286e97fb354039821225dce1b55ce6a4ab589626cf928dd0ef04e06d978d245ecd93ad58d7ebcd4df571027f7885dc28b242f639ada36ed34fa0427b38403b927a1570997492f5fc05311b7eb96a902e8f60095f1f60dbde9e5121c2351964ddc71d4065695436cb6f21c8f948a79e78930c2d61f94d86b63b40bb0325daee062f7506d944deb89a67e0a2deb93669af5314f7e1ac05b281d1f60cc845f1eb406500e5184a94cd59bc825426ab4862b64796aa4864497d25c0b72325be6e9e5c740d5bc6ff55c9c4beade6a3ed403e3ad6a69e7ad215ec64b9e69ec057c7d9849374c93519ce3301cef136e124dd10800ce7fe00e704fa8248c812fbc639afe9c987d1fd507c2ec037d1266f2ca49c1142e68de7009c936cc249faa53f329c5301cec936e11c16499cc7009c536cc25910499c4b01cea9d9ec0a713609182f8733cc0318ce3da7a5445885cf8911a17d13a09d4689b68d076d8507a83b0f250349b6c7dca300e4745b404671b3be8b00c89d284136654e3dd3a9598a97ddbd9ed1ab637605e866d8332e19c5ef487f0650ceb4672083b00793cc2b7f052877b67b3d1be19ed964ebd96e047867d9d3d71ec5cfcd560094b329517662a67aa623645b5ba0fd1c803ac7a63974a42d75b211f69b01ce5d6cc249dab424c3f93cc039d7269ca41d1f64383f02388b6cc249dacb4986f37780b3d8269cc32389b32118af9c6713ce1191c4d91be09c4f3d47ce9936b38e8b99cd5683adaaa287ad1e48d4bbdad4394cba208bac737801c0b9c0269ca42b88c8709e0670ee66134ed2f56d643837019cbbd3f766bad75ec02e0e32748da8d07500e81666636980087899f4422d7bb57a247aadee1880b747368623b0441cf5719d8b01c845b6808ce2b8ce0500e49eb68024ecf02503f92000b9d8169084ed1732900f00904b6c014938584606f24900b2c4169084436564209f002097da0292b0da4d06f25d00b2d41690232208f26d00b2cc169084638b6420ff0420cb6d0149b8629c0ce4fb00e4327b26b944f143b30f0194cb29517661de396b556c36dbc85f7736754e3eae18bd2ede5cd033bec256b084ad7132b04d00d80a5bc112b6cec9c0de0bb282bdb2d1edebfed883a3cc64e6eccbe1f45e666147e2c55438a7019c2bed993e48d8dd41367df06780b2921265474f92af947eb89c894d4fb6adaeb88701d255d9da7447db1ff515e5b300bcd5d4233a62ba6a395bc92f39db371731675b9d524638284156c8f400e8d6d8335595b0224456751f0150aeb5677371c2dc906c73f1bb00cabde97343675cd1bbb0d9f9a615193cb20fcd7607f0d651c26b97c20fbd493a8aedf106a0755365134cc27a2319ccbe0066b54d30a33889ff6f90ccd7db04338a65f7160073834dd35087528e3e92d52a6f073837da84b32092385f063837d984735824717e0770ee6313cec248e264a054dfd7269cc32389b319c0b91ff517a74597da1a7e41ec2e58c6e6f3c7c45f6bf8436217cca58c749a2a59675a0b90c0f7cf66ff64b5545620dcb48df54fbe02901e408954348babb880d5fca162b64229b042266cc20fc893f54d3606e00eb4774370c2e624d986e02700b407d17fa4537b657ccc51f7143982a257d4b402000fb67b1b08c2a98364db40dc09f01eb2353f6b1ced4f7bec05301e9acd09066532772c912cd6c81a253e8c1bc5bd82bf04600fb367ec87704e2659ffd13280f2709b96e8154672b3fab300ce236cc249da554c867322c079a44d38874512e79100e7bf6cc25910499c8b01cea3b23fcf6d3a7fc919ea9dcf1fac945d205998e74656a92f0638ff4d89b33e83ada2a88e963701b88ede9ab336b256cc90f511f5013d97c7647b3bfa99aa1f33ba5b8576039e786c367a2dfdb5c69d844ddac2214bdc9700a4c7512215279572f8616d048b8c0600d3f1f6acdf215ce548d610fc0aa0fc0f7d1eb8a166c4a658f6f02c67f0e346d1cb033b017c2764b7b77c1e7fb5428630590aa9909dbc53d50bb3b988bdf8b19455d3e68563a8d00e00684fb4772082102dd940c4a100ed49d9988ae5af23ad20925d69e7039827db04338a9f2a3c19c03cc5269851dc80fe7400f3549b60467162f57f00ccd36c8219c589d5270298a7db04338a13abff05609e6113cc284eacfe378079a63dab6e092b46646da316a07bed2cbb676b107a2ad96c8dab81a79e4d3fef52f79b6b7c95b2ad04271046af03b82540780e25c21c89b042b5d8a3d7e1d61e803a977a36a578a1843fb492275ef78496e8e5813d01b8f3b2f93918272f74846c6b9f837907403ddfa6f1eca194bb61918d672f04382fb009e7b048e23c03e0bcd0269c0591c4b92fc079914dab7548bb7ec94af21b00ce8b6dc249daf626c3f934c079894d384967aa91e17c0fe0bcd4269ca4d352c970fe08705e6613cee191c4590f74685c6e13ce1191c4d90de0bc8212674389736f6e7fb9fc5f16d9c97f4d4182bed2a6ba25e9b60f6475cb2280f32a9b7092ee534086f32480f36a9b70920edf92e1dc1be0dc9c8dedbeb1711d77428f5e376f7f00f21a5b404671c2743f00f25a5b4046f1fb3bc300c8eb6c0119c5efef0c0420afb7056414bfbf73340079832d20a3f8fd9d7100e48d5b739b3b6f2391b0f397ac89782d8079934d30093f1f4306f37a00f3669b6046b1f3e24200f3169b6046f1931c970298b7da04338a1f8eb90cc0bccd26988415753298970398b7db0493b06a4406f30a00f30e9b604671dbc5ab00cc3b6d82493855950ce66600f32e9b60122e292583790d8079b73dab73a3b81cea0580f21e4a941d98776350fda51d375038273d8a5b883505638ef7666f22eb1cfe6015ab60d19dc8da0b78e27df4ebc4ab9833db7c5bd9e1b739c077bf3dcb4a082b3e649ef81b40f980ddcb4a089b8f64cb4aae03781fa44ee8620b9252b98b15c427049548b1d14be86d01be87b2b995b7d8fc612357661df34ef877ae09b8a46536d987307b8232fb61ea7942a2b059c62face78f5447769e501de0858fd8b3536a14972aef0a503e9a8ddd7cd3d986847038826c13928301d8c76c054b38684606f60000f6715bc14671fffe5d00d8276c054b58e72403bb3300fba4ad600907d6c8c08e06609fb2156c1477d01a04c03e6d2b58c2ce6332b01b01d8676c054b38c44106762d00fbacad6009fba3c8c09600b0cfd90a9670f0830cecee00ecf3f63462099b04648dd81500e50b36ad5c23dd31816c84f31180f3459b70922ef127c3f93ac0f9924d384937a020c3f93f80f3659b70164612670ee87e7ec5269cc32389b395c4592fc7237c4a82f089d258616e29d3e3e655fcfa5456ce9ccf1956f03b83d94ce66c44b68417260bf9bf6071b088ff335d8fc59a718d26b34d5c3d7155c82b93b2c520b4d0ac8a0de9ce1f7955b8443de51279720c4154bde6f077d680e1eb3c7474214f86e4bee3dd642d4fce27703f33538e9dad947ae5c5c4673b9d2fc0ace3efcde6f64e96c33e4277e7ae787b297fd7f9f4c472b5787239bf2b22427f0c40444d4c7e4052d82a86e0779652c5a72a4ae4516cdcbe54c64b7e0ffe586c04ffe5544407d754419dd85bc5ff3967fa7a6a99222e924b7b4d008f99d36065c6bc2895458ee38bf797c9391ee552eaf49496a6b60ff7c8c64962255fec34b64ddbff3a4c68b5f2c58494d8d00cf85e6a8dde1021d722caf57d7c95c8be587572b7b5f249a16618af16f9a25b5e850c37bfb79d1e9d39dbdf843959adfc3ee97a74708ddea2f468479ad347e1913dd58775e678f0da1c7f6aadf487f826914efa161fe02ef341a28b6cfde3d2c6f3b3e5d2d60a297515d33fa2a414f5429111bd4dc9b3892b87f0560dfec92b444d4ce415efb892d310919cdefdc7cf33eae7ef51f24c63e6e7ff636f7f3fd1db3ff8c7db33eaed1f52f24c7357edffc71eff51a2c77ffc8fc767d4e33fa1e4d9c2e5f1b3d946e59edaf71d41fff8bbf6f74f13fdfdb37ffc3da3fefe3925cf8e487da648763b88c89e254dde2845ac64c85710ff1fa7802f1253c097ffa4808ca680af28793672a500d861fd8f8f6b1fff3ad1c7bff9c7c733e4e3e25f3be986f3f8bb656a55d16cfe7c9994277e72fe0f7a722fe822ad0200 + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c15c7d6c0e702c1bdb8060f1a0881520ac5ad50a024502a144212424a90922075efebabbdbabb0b7577777777f7be5757be99d999dcb37be7dcbb7bf79ecb2c5fc38f6cd6ce9cf39f332e5b279ff19fd820fe6b019bc726b1216c3e2b63abd92afed7247e5cc9ff3967fafa5cb6961f2bf8ef127e6f10cb4df1a6f8e917ebc07fcfe067d5ac86bfb98e95f263a5bc5fc4caf9df33f8bbe5fc4c5c5dc6ff97f3a762f5f84bf3d9643687cd66ed636d538858205faa56d762c2ae5843fe7b22db87df2d974a8940f2e5adf6fc5711bf532defade44aebe776678ba4592bf9bd52fece5a56c5652e95121b8e19c2e41fcc39f455c7baead88fffafcfffcc03d7c5797fcf731df9ff46ea6ffd6c07702d471d2f50ef0f00e7e2d8425d1fa8ceb5fc8b0c322ef6c8b8085c17c70bd5fd41e09c938fcdf2c8d1ef5da29e1f0c7431dd1fe2b90ec317f7f395ec73d4f5811e7d86baf5a9338825b74bdba3595caaee0f03e7c2aee7d5b996d71a30abaf8e6dc1b5b6ead8075c1bac6417a8736d6b3d75cc57cf725d1b7fafaed551d71aaabfa1ff685bb5bc61f1f7077faeaeb553c7e1ea7899d2019e0b4e9738efd579d8f3de8014efe9704c7a16aa63b334ed1ba18e2393d8a7395f0e385feee856f70c75beadf34eaf83d5f928f09cb0a9d0f3dedd4974d3fe760573fbdb15eaddaf9db0eab551d7af54cf8d00e75a8eb8ae6ddbce79af434b1f5c463bcff63c569d6fef845d6fb90a7b7f1ffa5fe5d1ff2a25639392f1b2ba7eb547ffab11fddb8223646a4a0763983b1d24b375aca3cfc0337c3cabc3da04c2dae4d89573893a1f87f8c2268fdefabdc793843b9e25e60513d4710786fb7c7315d6b6016cba0684718da35bfd8dea7c1262d3351e9bf47be7240957fbc7b51effb856bdfbb41356fd1fd5f5eb3cfe711de21f1381ed8d9284efb5fb7af0fcf58e0e0dd6a8f32988ddd77becd6ef9de2c3ee1b3c76dfa0de7dd809abc1d7eafa8d1ebb6f44ec9eac8e37abeba3c0b938dee4d1f52627bc86854e780dab3c726e51cf6f07cec571aa47de688fbc1392d8de9ab9fdf956e6ceeb6f5532749e602a03a7a9a32ed767807b5af71dc1355d4f98c96ad3c7a02bd4b5e940967e7e27e63fcfd0be731b78ff36c786469bd4f91cc4776ef3c4877eeff924e17acbd8db958cedc13997d1b84d1219daffee606effbb43bd3bd9d1b7b1f6873b99dbffee0472a0ffdda5cec7807371bc5b5d1f0bcec571b63ab651f7753e36d7097f808eb79d03c4c73c75cc05f151c4e2f9a338ce8ffb414bedabc58eed4dc63bd79b1427096b813aeee2917b8fd2731c381747535d42c7c1bd9e38b8571deff3f8c67d8e7e4d993a5fc8cc3e85bdd73b893df7aa67c638329b96a9ebf77be2fd7e24deb5fdcd00735db778105cd3e1dcaece757def81389fa64f33b77f3f00de7f105cd361e87a3a0cb31578a79f3a6e03aeedcae27ea7afedc6dc3eb6bbc7b687d4fdf1e05c1c17c5756fa5e3760f75ec0ce4efe93cd3eeed24f1a07d7831e0a9750852975da28ecd93bc1fa45ea0f3d98799bb3da3f3729d473fa2ee4f00e73cbe9b6f02ef8b637fcff3c3dccfb7acf13cf728e0f8a847d663ccdd367ccc23a3b5e7bd273c3ef30473fbe2939efb4f7ac27b5cddd7758c161ef94f3177dbf329757c9ab9cbe4a71d3d5bbcef79ee19e62e739f51c7a91e3993dc725aeabc52d721617959c2dcbebdd413a65fffd2360e00e7a09ddc3c59b9a57d69be3a3eebe1f1acb2e37e47564b9d9674fa2d06f698e46bb9cf31773a2d55c717c0fbcf816be2f83c73d7639e77746935cbd1a55595e7bda929ded3f57fbfbae7f97c2e19d745eaa8f3ee97946e93c1b938bec8dce5c38b8ecead977be494abe3cb1e392fa79073813ad7e5f01e296cd2e12d53c75794dc29e01ce631af32777df15527dc6d5a7ae455f894f79a47de6b4ade128fbce53ee5bdee91f7ba9277bd475ea54f796f78e4bde1c86bd3304dce6f2a79533dd7f7f284ffb67a6e1a388769ff2de6ce27b5bc77801e6faae3bbcc5d6ebc05ae8be37bcc9d87bfe7d8d8b6cc2347bff7b17a7e3a3817c70fd4f519e05cc811e53c4fc76dbba8a396fb8ee7fd7798bbfea6c333d9cce5b4d9df23e77d757f47702e8efd995bbfe1ccad9f4e537ee352cbfb103cf70eb8268e1fa9b06682731e56bb5c47f776d30386f921784ec89d95e4d964f9d427eafd9dc0b938ae50c7eeeafe6c1fb2e68177b4eebacea4f3fd4f95bc39e09c73689fe77068bfc4f3de67cc5d7e7cc6dcfeade58df6c83b3c89bebafc58e909eb73e6f6375de699da0bda07db015b3b027942ce5c1fcc56a9e3ea2461f5746ceab087279c4e2a9c9d99db0fbd3a8967f43d1d47b02e6c6aa399e2525feb06aee976d317ccdd6efac2d1b9e378cfbbb08e6f6a0b6876ba1ebc86f96f6b765061d638fc3a1e95e41dcdf04b255febb7b73aae05f7c5f12b8f6f7ca58ed5eaf8b5ba5fe491ff8d278ebe06d7c5f15b8fdc6f93f881d6e5bfea9d62702e8edf33771de07b8747a74d9ef7ffa79e9b0fceb1f7c5f13b103fdf2999df7b64d680fb42c60270ae7dd8eb333f787ce6074776675db7d1bebb8bc3a1f3c1c05fc47355299ed3f5b82e2c795eeaf19fce372b39c9fa7fd7a9e3fa24f1a5edfcd163e78f4e385d7439a3cb1f986ebb3177befc1373f7e5fca48e3f33775fcecf2c9ebe757a837d399a094c731b983b8da9fca68b6efb770432c573aaafa3eb64208b3fdf3537803d1b59bc4f09cad271a9fb04d28cc3ae4a7ed76393bcd3531d7f616ebfffc591d14d8fcdfdead1fd57609338fee661fc1b73a7092d7f378f7cddd6da47ddd77d1cc9ea1890a9ce3f61dada571df763b85feabcae134b4c93bf33b7affeeee89aabe347d7b1745f4692bebbeeba8feb00753c501d75d979900a6b0fe7fdda30bcfd187f30773fc61f4abe8e5bdde6ff93b9ebb57f7ad86939c33c72b49f1fac8e87f8d4b39162d3549d1faa8e87f97cdf6f9978380b56068ae35fccedd37f295d4f503ae8f68feebfeeef796fb8e7bd979384edad631ca98eff52475dbffa9bb9cbbabf19eea3baecfeb73a1ea18e9b3d323627917134b0b191474e7b96e0fbe24fe8fbf29cdbde53d7ad1b38e73d74fa3f461d1babe38ab80eed14e79ec9e2da541733c5ffb120fe854c3d06765c8af053f84a2cc65cfdc9f25c1ceb30575f903c171cd4f85fcf1f3dba6ecf92e6cdb572f5dc9645e09ccbedd5db91db6b0cf2fc9ee0dc4778496daee7b159e5f1b11c8fcd394ab7fb956edefeaf51296cd6721b786c563ed4bb8323b7f750e4f93dc1b938d68f8727ff1632547ed25b97336dc17d90f6e5b90f9d93e62b3a8d3464ee34d250e9f2631219c7abe37fd451f50dc51a29598bc13996964d7309e0f88278bf3173e55df29cebd6573fe719ab8b35f13cdfc479be8fee5bdec6f35ca1e7395dbee8b476a23a9af27d8c8d698ce424753c39098f5398fff18b5395de4d953e4bc0b9e0a3e6fff4d5b24e53c7d393849faeffe8f69df61f3deea1eb56b9eaa8f2c6989eb7b6009c739dfbad01ef83f7d0e7751fb09e4bd2431d4d7deddd3d3ab4f4c86ce9c8ccd369b695db86582bb71cf47d5d3f3ad31397aa5e1a036306f26ff18eeef7f4fa726be6f665fdbc1e57d775f85eccddded5d77b33573b35a6caec18288762aa9e9ff7b2a36f9e6ecb7601f7613a51cff7d7717a96f35e7f5df730f98b7e67947a3659bf96a99dd10fe8e4ed03d1e3c36733f77876b2f242b79f4ac0b9b8df559deb394f3b807371bf893a6fe789fb768e7d0386023940be9cdbe85337dd4e1ba8eae472ca2c6823c6545d30a6ed1f0bcec5fbca9698ee47d2ed17753fa6db7bf3c073305da836a69c192b9e5bea79bf8bc7a7ba80e7c5b1ab3bdc9866aadb8aa5e05cc855f5ec98ee935c00ce0187daf0b55e0b7db0d4f9532e73e74fb98eec413a0f57cc07e9fe5acda087c7dfc4b59e4a56193817eff6f63cd7c3cd899dcb5cf941ac07082b59f9edad87abb43448b793ce63fecb0c2523d61b84a9faf1637d98bbaed4c709677099e7399da70c00e7e2be3eefcbdc631633c17571d47955b9476e2f8ffc658e5d830f77cba90dc72347bfcf76f4c8a9f0dc9f9e8277327eaa5e3444f75f9caf8eaaed19d3f3be8b3ce7c63e809c98ac1f4e67e5ac84ad61f9323011437ea7e0eb37534fbe97757ff14bfcf493c1d6b07df8abe5a619f0f3e5fcfa1a9e13171867c07794750c1dfa24f9bb843f5129852e8f25047147421042b92afeaf1c4cdfafe6d7a7c9d9ff62027f25bf3384cde247f1d6128e7877fecf2d65010fb68aade367c5fcf71a296f09573bf1c9542689a9fede77e67199ce4a8495fc8a06ba869f57490d8be4eff552d372a9fd0c7ead46ae8b58c52ad8447edc28434bb47d2dffdb1466b14266d6d1bc2001bbee2c7bd0d134995b23b4cf97edad7f62644bc4886cfa8af4217eeae5cb9ae6d10931f10f432793c99185832363984416735d2b60f9720dc8bc0482c16d4cb4d0ecdf0eef91ac30a92d663222ba3b4b0be2315cf9f30f05333b771f9fe3366d38cb97cdfb2e294c4b0656c8cb9335d32026e4e4d41b2a14f5e28f99f0cb6e8ca22ce2779eab94cf058f80fab2f0734780acda17f33f36f2ff5572f957895c3c562a85ace2c7b9fc7a09ff5b289d104f4385d006127562419a4a5d0c761d13ec86d9869d3a774906bb61ad5d71d8e2c74cb0114230950e18c1ba2682b2d6b79e94a0ae8615f1f27626d75ae4e69572b9e16a2079b52c514598d5b51e570efe72a4c4df841e18afece93092c783e82e1bec8907731c349171301a5440b369051693f54c3129fbc677cb624cc6ad73aecf971ee8b5423f953c469afa8e91663246ba25c448306d30b23926b2b287638f2d4e562fbe0d4eb779ad5571baf9b28f21d727c76461ab8e48e7a7418e39da5aca68cb447058d4d537459decdc2bce620121eead96524af8b3c18b08d1a33ad05b449891b696483b2418975a050c610303c2a102e13606ad62398d3c5a098510c90d31c96dc24a6e84496e6b2419407263934335cf7ef5cea92b552155dae4ee24aabadd136a1cf727d6ada547b547eb6cc975c0fca989296e04c10e46b52e189f103dedf1e8698a09ef68147ef0b820c29b99840b87e864ca4ae5b48cb04592e8f3ec27477ed7c9e76493382741e966b8d2cd31a5e510814769115c10e12d4cc245048bbeec84a2db2bb8252eb8a52999c98bd96fc4a657ad1731dfde77b5be3b4bd6060d5aa96f658a16412f1753ca1b35ddf1a8698d09ef6110fef7e6cd9b8308df06cbb87b86cdb8db6039432f63ce60109e2467688ba9dddba076a092ac1d46bb4f06a2b2bd299549e7a9244d6589cd2673530936a6e27f4fe152d7ca5410b489274627ba1a98e1e9b29f4c97831372f14cea8ca5e20e9853e5854d0b1d4d92459da9bf9f6cbb092eb89349b04864033290c83a63c207664078170cf6a0b0b0bb626a0fce80dadd30e1433220bc3b263c3f03c27331e1433320bc8749b8a8f40cf3e3e0492a3c3d31372908eb26bd301ec333c0a33726bc3003c2fb604c468465d2d72459b41a47d63e1c97bcd954d568840bef87a9bd6d58b5f330c9a30c9203d506fa9b248bda80589f1db6363000133eda203c1650f84083f07c59953c8465a3aa916a8ac034b93b5f399bc3abd57b31676c37b180d763c4f3f87199d4a25c8e7c94fb985a90bc6ab27d2d1fd08494b5e129ccff44077a2bc4e4aa3ab26a24a653e5c94debe6f3eb954c4c62982263a0528634c4a88d08017b5eb3d889898d07d7c9d8ce41ba0e7790a1dbc506abc80dc212d63843c23266634912d660937091b0c61b3c6aa8f0a809b551389179fb5fe386e9bf26f2d7967301ebe5548775ae1a6cfca99cc43e891d709d8760f9fa2443be3ea88e21a74992afe79b848bb25fac450853f60fc5b49e62d0ba2aa0d6c34cc245d7eb543f5a37c005176082c552fa84415ed17f562c87622bf83fe1feb9726285188e0a12ea70cce5a71b5cbe4ec0b2a4108b88198688685a3758448cc084ef68103e2ba0f0915864ccf41b19a2e458cda32448646c8b9934cb60d2c1014d1a65122e5291980e1eaa1ab51da6f66c83dabdeb05537b34267c8e41f8dc80c2b7c798cc0dcb648c49b2787e6786e4f6a2bfb4b1c8e803e5d063313c45063c637282e1d9c124bc3173564e86c9a1c7615acf37687d6c40adc76359da02439616b4df7302a6f92e06cdc5a86610cd2762bc1786e43d09d37a5783d64b026a3d19d37ab7905a4fc1b4dedda0f5c206c1b49e6a122ef266315520218767cc203d494e3e0d537d9141f5dc46c1549f6e109e2fbbcdb339e63241f6948afa46f031973d4d9e616c3e883577a6f196e4a16315fc19a66811e496f871d5c57894ec688a1239d890cdd1666ffb2d58a494f88e94a5cc3cd29c2a7c2c5a669ae8c901959db348cfcf9c5e33b952dfe4ca24b9b60956259df68a509b657266418d173c0903c6cd4c195819eed03b99848bfacb3286d45fc4aa94e0f597d9a6704487a7584018b6c3730e960b571a72e15302e6c27331e17b19843fdc3898f09d4dc205fe1518feaab4f0cfc3f0afcc00fe228cd02a03a1bc26c108159b840b2f173b5485aabacf374916f599357e0a8924f59905188fbd0d3cce08c8631793705143113b4425d467c4d0a09ebd9a2b734b67f83337502d67216650b5c1a0cf031ab42be69a3506d7dcbcf9a08382b8e66e58fa5a87a5aff569a5afdd31421b0c846a9a0523b4074668630612ef22cc9ff6f1930a9238cd9e18927d4da9202092c598f0fd0cc25f0f287c09267c7f83f00ecd83092fc13cf200cc230f4ccb239762461c64306254cb6046949a848bdacec17e9c66292eb80cf34631289590bbb5926e2a3ac16bf8ffa5b29e582aeb89f93ce195f0aba5bc7e11c469cbb1f00f3585dfc815fe10a9417ea0f09661e11d660a4f4c3b1cc79f1b1b288c0a2c8cc3b130fa060e633916c611a6301a483b44adb884175b41c3aac4c23a120bab6fda61ed65082b5fced2ca668b65921cf0599b468b456c79d5c783642cd266115b5c99da2cc942c7da2c2b4c71248a2cb17f56d822ab0acbda8e36646d8fb70f96b5adc4bceb182c072aaaf52d770dab8aff2ee167c1ea5aab30e38e351857d8219871ab31e38e3319d75819278637a06941cc59630a511477c733a4b813bb32052feef6c6b09d60c036a653306c6b316c279ab0b597a7713f70fa5cca541756991cb22d617aa5fae880fe518de972924917316235480e19ae966b43d30db5064bcf271bd373b069fceb4cc245dc9d6288bbaf3b078bbbf518af534dbc9a78e22e5e6e04a1b50173fad330a73f3d2da7df88813bc300ae43d760e0f6c1c09d690257e00127266994a963a9ac22ad9252446210d74b647619c79bcb9f59a6ae3809c6f934a7186a5d250b1c67714b9068d817c3739601cfe1dd82e1d90fc373b6094f23239e20c6ec8f19738ec1988f031a738049b870d87331873d2f2d873d108376be099ac85f16d7765fec2c2fae93fee3acd10982ef2043c8f97242b72870b7dc743731e16a9dac5689bfd73367d253b10c3bbefc3ecc44b60b58d039f617325111745234bdf65815f260cc272fc27cf2e2b47cf210cc272fc11272dc276733b1fd42b0c2e150ccae4b31bb2e4bcbaec330bb2e37d9d558da354b2e4a5d03b2aa20961d8e59760566d99569597684291c5113bf2a99ab7b03e88707702496d75e6dc86bf37a04cb6bff85c5cb2653bcb4658915125d3ee6f212b344e54a6581ab744761465e6330b22aa091ffc68cbcd664a4a8a5c617e4e4ca0a833038a849479b42153342c49740bd3342ea9a9c22c98c9063305ed71b787d1f90d7b158d2b9014b3a37a695748ec38cb8c960c49a9ec18c381e137eb341f8a83ec184ff07f3a85b4c1e255a1b9365e1ececff5522fb2bf6553e055be9bd784d6e28af0005f1b313b0d8ba158baddbd28aad13319b6f37d9ec64e1bac19e5e167e1216857718a2707adf6051783266ce9d2673c432ad78d78a539bc03a5896c9ac63a5cc1f9dad8f82187d0a66f45d06a3170634fa5483f07cb9de6f0ddb9215cf224fca88f748cc93b2c56cff9ad0954ff129d7ba1e82f9725162214b5dbdcc948e03652fb078be5491ab16e58188b5a55c6da1f4a4da362a93a9d45831161f6ccdcbaae658e5f834cc65ef35b8ece3015df6742c9dde674aa7a2953615d443726506945e4a3c0333eb7e835997f40b66d69998f0070cc27be705137e1626fc4183f0a6fd83093f1b13fe9041f82901859f83097fd8207ce88060c2cfc5843f62105e382898f0f330e18f1a841f1b50f8f9582278cc9408c452e8dd41995bcc16f2c6d4e8147bf22d0a58bfbdc0a493a8df8a2f43855d6d78a149b898e5f2040b39d1e6224ced2733a0f6c598f0a73220fc12937051cf129f1e093345e8520cf63361615f86497e36ace4cb31c9cf85957c0526f9f9b092af3448ce97fb162c615b6ea73898074c9021a4b763dc0b262f34d65cc4e777f3e4c6e299d20cab995c85c5e54b61e3f26a936411972ffb498c2fe28237612abf1256e56b30c9af86957c2d26f9b5b092afc330bf1e12f3f598ca6f8455f9064cf29b6125df88c1782b248c9b3095df0eabf2cd98e477c24abec524595457def5032349bde6564ce5f7c2aa7c1b26f9fdb0926fc7247f1056f21d98e40fc34abe13f3e68f427af35d06c1f972079f6c2e8b992cdbf04b597a9b307ecc35ed61a82f8a1f73a1fa09332f8f49a5075674de6d8a1ed1bcfe94859f34750f96783f0b9978efc5dcf5f3b0ee7a1f26f98bb092efc712c2972113c20326c1a23522becf1cb635f22026fceb0c087f08f38f6f42fac7c398d6df6640eb473017f92eac8b3c8aa9fd7d06d47e0c53fbbf61d57e1c53fb7f1950fb094cf80f1910fe2426fcc70c087fca245c34e47ff2e3dd491af24f6331f973d8987c064b90bf844c90cf622aff1a56e5e730957f0ba9f2f398cabf8755f9054ce53f42aafc22a6f29f61557e0993fc5758c92f6392ff0e2bf9152c716fce40e27e15535bace70fa5f66b98e45858c9af6392eb8495fc0626b96e58c96f1a24e7cbdd34b359cbd7cb11f4d707027eca28e6b7cb2c2766aedda70a1fabddbf852581fab1f049e06d4c78830c087f07cb231b9a6006c823dfc5b46e9401addfc3d241e3b0e9e07d4ced261950fb034ceda661d5fe1053bb5906d4fe0853bb7958b53f364916c9b2452c716d9341f451b8e84f4ca24583bb652c7c83fb538c48abb0443ec3d263eb90e9f1734cf03621057f81b1681396c5975814b6cd40147e85f1681792c7d798e0f621057f83e1e890011cdf625a770ca9f577987b740aeb1edf63923b8795fc5f4c7297b092ff8749ee1a56f20f98e46e6125ff8849ee1e56f24f26c9a26b393796a4bfd61bc02778003f6349a6470692cc2f18979e61b9fc8aa9dd2b036aff8609ef9d01e1bf634cfa8465f20726b96f58c97f9a248bba53bf0cd49dfec2d4ce0babf6df26c92223ee1f32c7de8c091e1052b0fcf8b889c5c0b02c6226c9a2cf7f901f9593f4f9d7c1541e1c56e5ba98e4216125d7c360e487849183a93c34accaf531c9c3c24a6e80492e082bb92126797858c98d4c9245ba2a0c99001b632a8f08ab72134cf2c8b0929b6292b70d2bb91926795458c9cd4d924511bb5d068ad81698daa3c3aadd1293bc7d58c9ad3020633200a435a6f6d8b06a6f8349de21ace4361890711900d216133e3e03c2db614c268465d21e537b6206d4ee60122e9a1a9332d4d4e888693f3903da77c2844fc980f0ce98f0a91910de05133e2d03c2bb62c2a7674078374cf88c0c08ef8ea5a21dc3a6a25c4cf2ccb0927b6040666500484f4ced9dc2aaddcb2459ec173ddb4f6d2ac97ed1bd4d8245bb714e06da8d7d301e73c3f2e88ba9bd7306d4ee87555de785acbae661828b6286253bf3e429fcee637cf98ee94b927ae2bb3e3aefc6df8153e787709f582c9faa01bb2a2c96cb73e36389ee4f807bef2ee0f72a036e12d31f23506c22308e9c805e8c9c09db0660b6cd37d9d687b9c76de3fbc83b9a55d4c64db91c71ae61cb13b48c7feb37889e03313d1798f41cef8903375b679f1bafeea592eada24fa8a3bfea506b16e1066dd2e26eb26786221aea16389e31b220ec492dc6239b29e9812a05db8bd78ca0a62df60ccbe8526fb46a7117bd394e78589bb20160dc12cdad564d194342c2a4a69512a8999c81ff2313b77c3f2bed49e3981eb5006b6cd0bef99e9e5294331db7637d9361989c3d9329e36c8bc6385da51c1b17606bf3f87df5925f36e71c5fc4940d327fb3297f6866156ee8159993a06a7a9dd726aa46536e4300598958b4c56ceaa8d4bbd4100dc1e6046edae7a6227206726d58cda27e33b72cd937155ce63713d289dc5d5bd6530c22a7ccb824ca4cee198d57ba65f6e4c91da3bfa0a4fdd92b15a88d9b7d864df0e1efbdce1421b453a14b3cd9cbdc62a92c44af2da64fa968dc02c5b8259162cef89d7c456731f1582603d32796998b85c3588652331cb4a4c96ed1ad832a75c74e7ab416c09930ba79346b7c5782c35f118e2a3a6e08ee129b245a1536a26eb38a330cd4b83d4dae6cbb455a5ca7b6756aa2e1d17a87ca62c81344d59b81d665199c9a2febee3a298ebe3ccb4753cd5ab31bc1744dfd198bee57eca6e186a901cde6d097e2753b1b23d66e5329395937c956233649ab6a7241b83d95861b271fbc0b9a2d3fed1f3bf9d5a99334b5c58532453d26ab93d6e758255706565109bc662362d37d954e889b749521f47d71a573a72ec12da24d334d16be3ef05b16207cc8a4a93155313d2583c54e87f4552cf1ad9a22b456b176e5bf13b99b1741c66e95e7e6a5389b9891383a5b2f6943cfff69bb3a79b4f8ec72c5b61b2acb7ef7cdddcab90ae9613302dab4c5ace0cd1129bc3ff8ee7f25b32df9b88d9bc12ebb74b6df33c79af44c640596d1d704bf4204cc2ac5be52fef3097cf7ecaae6c97d193314b57fbc9ebb1bca346c56262994463c514cc8a35262b86a5b46286f2c08d3cc52d0b64437afe3615d37f6f93fe0353ea5f2cc7249c9557f1fe47afae894f04d1791aa6f35aace61386b9d69536dd4fc76caac6da74c979faefc336c909a2f90c4cf31a93e64311cde32db8d94cec54bfd4980bc7e32253e977474cfb7526edfba6f425baf1aa9998a6eb4d9a4e4c51ee15cbbeaab99266b5b1468895067149a2d44c4c2fe9c7c52cccc20d260b8767a0f68fa784746bc43b61366c34d990c74fcd7d47baade5f62abd4e3753dacec6b4ddc74f3b196ba9a41a8dc96e1b650e66e3be7e7a3c60db22488f477aad95f4d3ce5ccccafd4c561633ea1905a297b8447e01661effdb4f3f62267a4677c628ecef67fc2df3149cf2b738c3a9761e66e501262ba767c9cac9ccfdc1b44c595b84597ba0bf3ccadc224a9d47a5d31a4ab71d5f8cd97890c9c69129f3e119727c71152f9d2b6b4b97e4b970a6f2a1f9982507fb6b0f992c99cd5f989d25fd1760fa1f62d27f9acf12d1dfe8767ae562fab6ee82d97ae8969985a6af64a2245888d97698c9b6b9e4b615f92e093261fdae98f587fb99db4611b3253c28533b231deb76c3ac3bc2df1896398da69add96edd4b93b66e59158bbdadc92109fd759ca1faa0035b3c4922bd363d47b60daffcba4fdb1b51e98f9d93345ccf988e324e98135526efc1d41477b6b199b2a6b302b6508e9b4881727b122fe0d3ef317f832417d1146fd28ac4f35c83c07775bb4923fbb937cc3899bcc79fe9e9815ff0e32b2e9df8a19b2bfb846ea29fcc73d132433362dc66c3a3abd91b2a972c476a571a40cf7548a91b2259865c7982c1b9b34a5fbfb1c8f3b06dd9f0bca5c8c9560761d6bb26b149aff9a7b729cfa6015d33d3a4e19522affd2dfd25a6798919f6e2b6a2966cd71266b66a3d6ec24e36439cf89f5a84b95cc31936bba25fb7f4a31cb8f37595ee0dbf2093c2d994a89cc5b508659f01f6c9497b636a77d58b4cdf4dd4c8fab9563369fe0671eaa771c6412687f79737bafcec5fcef35099e89f714a73786b50cb3ef443fbd1a89f6893a6c62cb098ec0f9b98e5b994e6da402b3f124938d6352d8e8b4a0e22ff8ef714dd7aa06fc5f4c7e6a7e8a94e08c98ac96be2e524e7e377e4bd6bc537d664e5f17618bb12d91268ab925f1bde7934b389903ab5f87393ffd6202768d72d3d8320f37e7cd2a29393e4f48cc919c26d3bc53c296f2f359b2f653e3fb5384a67af810501387d6f9ff20a1775fce98fc082094c5498b658a5b9da5a788586daf62b54e7eaeb071609ade945a8b53456875cd3e94b87b2aac0d9a747704cc56ada59858832b12d750f97b3e975aa6b2dbc4cfc1a70c1ba66453d883a5009d4fa714371f640026711da5c3391dc26b5535b2777dc61ae4d4192ae2e4344a70cd19fc4e7934617ddd2c0eeb744a58cd242ce1ccf1ea49bcba1c0554a7748ea33a8312555389aa58be52216b6c6ba508514f8802a8dcba7150675282c2bec61c05480d3bc4219d95ed8417ff107c14502dcc8da33a9b12557d89aa3a52b992f8d170cec9b61fcd932db3322e360aa88a3bc6519d4b9f813bdd7ca202ea748039dfa68d02a81306c6419d4709aaa10425fa2284024e6f7a14001dde330ee87c4a40db3058377794d015ce2ad5308a4e65b34b8338b60b28b1c945c1b20f563765a280e7fbbe713c17d2375cb4574d5283a6a2a2191d5f9a9b13877511bd2f452d0bef0df05c4c89a711838d60b1247163446a4e639ac7115d92edf69c06160550e3ebc4415d4adf9ed35b7945ab3db70974a45c4609a935d3f5f0c932686cd4350ad0aeef1d877679b693a0b319c68a48801a552f0eea0a4a502d24a849b24220463956f08b7a75de5ad95b1d055c1b7bc5715d49df772ef088c12521069f0611057055a00a7a1525b826ccd42b25e67a4501d3c2ae714c57d367f6baa6ae27a28adea90a0627a546025a2301ad418e47b8771d74fa2383c148e36398220f9cc2abb16be45521afcc3ba6d9833f629de69be098645e426f665ed28aa8f9aeee5b37dfd525689ea1919497b295991768e4312f405f489eef749387d639b5fef8f05e1ed2f6c943c725f25274a29aef178118c4b34df3bbf18efe3c63675b9e8f023fcf7795332f50799867e8a6d17e66ee3b8d4fea304fc6182a26755cf3ff7cbec55031dfe25a0141ecd52c7e9c72ea3aca72aa834a6fcef49a55ac2ae964b2c562b342af0e5d1274707fdf56974d266d1ab94aafd67e0c4ca704bb95c58bfdeb6dc25910499c2f029c37d884737824717e0a70de6813cec248e2fc03e0bcc9269c232289537c994ae3bc99ba0743547e96c9756b6296beb7924806af2515bc1ce08bb764c3172b506f84ea8b727c241dce46543817009cb7da84737824719e0270de6613ce8248e25c0770de4e89b35d8a82078a5b2c3f2a4384b20115ca7b00ca3be8274755a9259545aabd8af4ce650e5c7b2a705d01b83bb331156198ec08d07bc9ac911d1ee2113274cda8d04d04e8eecad62c8e12d9cf9325748ba9d0cd00e8eedeb2391f5c0938348209f86e80f29e6c79e1d691807700e8eea5f642acbbd6c75cedcca1ec4785f20880f2be6c78e1f0adc60bf301bafbb381ae60ab413719a07b201bc548a91a36f02e5e7557a0098b11b20a740140f9e0964519f512791e40f950361274e15693a0e703740f534f1313813aebc575f34d7c6582b0d790cce31a036c8fd8d4834dda6b48d6837d07c0f9a84d3849bbb9c870be0a703e66134ed24e58329cdf039c8fdb84b3309238eb80e1aa276cc2392292385b029c4f52e26c9f02a7bb1e392c9235c94e00e65336c1241c222083d919c07cda2698051184d905c07cc62698843326e8c66000cc676d8259184198dd00cce72861765230abf84302a4b371ec0caeca46866f6d46580c75a742fa168b237dde9e71eaed22d8cdf62d40f90225ca6e0aa5d80c534c86f26e7aac8f13f9c362befe7a5629bb3fd652174913a9d01e0bd0be4889d6999a5fcd9ca17fbd34a23c71455304aaeb6d01b497ec19881d15c182a72d28785ece4629ee777214613e4936356a02f0cb576c8249e8996430c70198afda04734404616e0760be66134cc2ca3a19cc6d01ccd76d82b96d04618e0530dfb0096614e7e68e0630dfb4092661d71b19cca100e65b36c1246c8d93c11c0260be6d134cc2ae3732982300cc776c8249d8022783590860be9b0d98d81c22ef501a6132276b99f70330dfb3092661014406330fc07c9f1226dc8e62a50abc446e4591a5a959643d97c300c20f28117664ee7e75f1a29820bdb5f5aa3f0e807e483f50a1fb2b4ddb8d880d4d6ad806296245841733b501483fa2442a26406aa05365f07bcb1d63c479c2568f1100d70480fb381bddc0fe265213f60f91e593e500e527d9984fe4bf7f288a15f47301ce4f6dc2493ad5800ce71c80f3339b7092eec44286f33880f3739b7092ee134486b30ae0fc82ba8ee96fef32f8495332a0f750013d1500fdd29e991b841dc264e5fae700e5575bb23dee4649bac2820ce67e00e6d736c1241cf72183792080f98d4d30094724c960ae0730bfb5096614db42fb0098dfd90493b0779d0ce65a00f37b9b6012d634c960560398ffb5096614d78eaf0430ff6713cc28ee64b51ac0fcc126988433dfc8601e0260fe6813cc28ce5d3f0cc0fc8912660b161f44d352b3347c5646056f2680f7f3966d89c389d684ed1dba519e581ce52f9428730d289d5514456c328fd1897217c072754d6f3e2b7a9226700d2a69c7255fa4c27b25f0d45fa907d1045e11f0320957cbaea45c4b9143058e0170bf518213db7d88153b7399d82e0cfd7a5ae69035a142561720fb3d1bfde7fa1325f84730b4471276f7924d73190570fe413fcd45ef821af740a73fbd92215fc28a40e1d20920fc734b8e84477fa26a5f80f2af6c246eacca9338832d8a73d86e0238ffb609674124713e0b706eb609e7f048e2fc00e064752cc25918499cbf009c319b708e8824ce86a0c958c7269c232389b327c059371b38fdcf718be22ac8f34062af67134ed2215c329c7301ce1c9b700e8f24cee301cefa36e12c8824ce550067034a9cb9ccbd8e42f4543a8dcd32feb7e8f470c86c5dab2a3e04781b52e20d36e32d8a63e4cf00948db62c4a386411c5edf2be01281b53a274fad4c5cc1bb11425fadfc36b01c035a104e77c8d78033f15bd97ce57898b14c6e855d0bb006c4db39174fd8d7b4771dad55480b219254aefbac7d2adb484ee0d1a8fcdb7ac6f46bd58a901bed9624b96d093a5af2e657ae35032949f50a1fc09a06c69530f11e95c21b202e83180b3954d380b2289f30d80b3b54d38874712e70f00e73636e12c8c24cefaa0446f6313ce1191c4d90ee06c4bdd58747f403dda9bd9d607c9ba1d25b856ccfb294c4740d4f778590400b6a704d885b9db3afaeb65f8eccaf9ea09c2160fd957cd9e02583bd8943f928eef9025f3db00ce8e36e1241d9020c3f912c0d9c9269ca4c3656438bf00383bdb8493746c9c0ce75f0067179b708e8824cea6a06ed99512a7a88b5545ba36d907785e374a54ad6b5189ed4766a949d5f1af818ba15a514d274348f655f0f60061f72dd9d53b87bfb21713e3df35b475c8a554284b01ca5c4a94fac331ce4a097d9c2b5b35d59285c364aaf4ce95b51573f2551364bde87b00b43dec993210c595e0b700943d2951f661ee06e41a165f7c1774911ee17005d922bd7aa01cef1515d0515c0d1903a07b6763ba56fa8b4d09778821c37b3fc830fa50e26d93a286a02d25f5d2322a8cb300c6bef64cd58ae267623f0128fb65ab13793157b45a2ab2520a88f222d4ed01c03c7be61e457167b70a80b2bf3d5365a298ac77052807d833558670d611d954990ea04a34d0a60501a44bfdc816049c0d3c73904d3849974993e19c02700eb60927e9ba5e329c47019c436cc249baea9c0ce7128033dfa6e10cd2ad6fc9ea9af7019c436dc25910499caf019cc36cc2393c9238ff0b7016d884b3309238eb827ae7709b708e8824ced600672125ce7e2cb171a9277595c96b93e448d24af9f714fe7f9d143985ad67e5d22c67cc290b03231752c13e08640523b2317c175f4524e6d6ad552027b1e57220cfedcff1ab84688fa242fb31403bd29ee1bb286e97fb3540b92d254ab8c36bb9cc4957b22c4d9e251ba1df11c01b958d245ec393ad58d7ebcd4df571227f78b9dc28b252f639ada56ed34fa4427b3840bb1df52ae032e924ebf80b62367c856a905644b0846f08b08db6675488704d0659f771475059da3e9be5b710e47ca4534fbc498696b0fc2643db03a01d4389b687c14b9d41369137aee219b8a877ae49daeb14c57d38eb806c60ac3d037251fc3a501940b90325ca962c5e412a93552431db234b5524b2a4be02e01b4789afbb27175dcd96f17fd532b16fadf9687b908f8eb7a9a79e74053b59aeb927f0d50936e1245d724d86f34c8073a24d3849370420c3b93fc03989be2012b2c4be71ce6b7af261743f149f0bf04db6c91b0b2967849079e33900e7149b70927ee98f0ce7348073aa4d38874712e73100e7349b70164412e75280737a36bb429c4d0226c8e10cf3008673cf69291156e173624468df04686750a26deb415be901eace43c94092ed31f72800b9a32d20a3b859df4500e44c4a90cd9953cf746a96e26577af67f4ea98dd00ba59f68c4b46f13bd29f01943bd9339041d88349e695bf0294b3ed5ecf46b86736d97ab61b01de39f6f4b547f173b39500e55c4a949d99a99ee908d9da16683f07a0ee6cd31c3ad2963ad908fbcd00e73c9b7092362dc9703e0f7016d98493b4e3830ce7470067b14d38497b39c970fe0e70ceb709e78848e26c0cc62b17d88473642471f6013877a19e23e74c9b59cbc5cc61abc05655d1c3d60024ea8536750e932ec822eb1c5e0870ee6a134ed2154464384f033877b30927e9fa36329c1b01cedde97b33dd6b2f60170719ba2654e83a02747b64636980087899f4422d7b957a247aadee1880b7281bc31158228efab8cec500e49eb6808ce2b8ce0500e4625b401276f892817c10805c620b48c2f60b19c80700c8125b40120e9691817c12805c6a0b48c2a13232904f0090a5b68024ac7693817c17802cb305e4c808827c1b802cb70524e1d82219c83f01c865b680245c314e06f27d00b2c29e492e51fcd0ec4300e5724a945d9977ce5a359bc336f0d79d4d9d938f2b46af8b3717f48c57da0a96b0354e06b61900bb97ad60095be76460ef0559c18a6c74fbba3ff6e028338539fb7238bd9759d891783115cee90067953dd30709bb3bc8a60ffe0c50aea444d9c993e4aba41f5630b1e9c9d6d515f73040ba2a5b9bee68fba3bea27c3680b79a7a44474c572d672bf82567fbe622e66cab53ca080725c80a999e00dd1a7ba6aa125684c8aaee2301cabdedd95c9c303724db5cfc2e80722d7d6ee88c2b7a17363bdfb4228347f6a1d91e005e3525bcf629fcd09ba4a3d81e6f045a373536c124ac3792c1ec0760aeb309661427f1ff0d92f97a9b6046b1ecde0c606eb0691aea30cad147b25ae5ed00e7469b70164412e7cb00e73e36e11c1e499cdf019cfbda84b33092381928d5f7b309e78848e26c0170ee4ffdc569d1a5b69a5f10bb0b96b105fc31f1d76afe90d8057329239da64ad699d60a24f003b2d93f5923951508376e65fd93af00a407522215cde26a2e60157fa8982d570a2c97099bf003f2647d934d01b883ecdd109cb03949b621f80900edc1f41fe9d45e191f73d43d458ea0e81535db008087d8bd0d04e1d441b26d20ee04780fdd929f358ef6a73df602180fcbe6048332993b964816ab658d121fc68de25ec15f02b087db33f643382793acff68194079844d4bf40a23b959fd5900e79136e124ed2a26c33909e0fc974d38874712e79100e75136e12c8824cec500e7bfb33fcf6d067fc919ea5dc01fac925d205998e74656a92f06388fa6c4d990c156515447cb9b015cc76cc9591b592b66c8fa88fa829ecb63b3bd1dfd2cd58f19ddad42bb034f3c2e1bbd96fe5ae34ec2266de19025ee4b00d2e329918a932a39fcb0268245462380e93ff6acdf215ce548d610fc0aa03c813e0f5c5f3b62532c7b782a18fcb851f4f2c0ce00df89d9ed2d9fcf5fad94214c91422a6527ef34f5c21c2e622f7e2c6535b479e1582ab40301da93ec1d8820444b36107128407b7236a662f9eb482b886457daf900e62936c18ce2a70a4f06304fb509661437a03f1dc03ccd2698519c58fd1f00f3749b60467162f58900e61936c18ce2c4ea7f019867da04338a13abff0d609e65cfaa5bc28a1159dba815e85e3bdbeed91a849e4a365be36ae0a9e7d0cfbbd4fde61a5f956c2bc10984d1eb006e0d109e4b89304722ac542df6e875b87500a0cea39e4d295e28e10fade089d73da1257a79602f00eefc6c7e0ec6c90b1d215bdbe760de01502fb0693c7b18e56e5864e3d9bb039c17da84737824719e01705e6413ce8248e2dc17e0bcd8a6d53aa45dbf6425f90d00e72536e1246d7b93e17c1ae0bcd4269ca433d5c870be07705e66134ed269a964387f04382fb709e78848e26c003a34aeb009e7c848e2ec0e705e4989b3b1c4b937b7bf5cfe2f8bece4bfe620415f6553dd9274db07b2ba6511c079b54d3849f72920c37912c0b9c9269ca4c3b76438f70638afc9c676dfd8b88e3ba147af9b77000079ad2d20a33861ba3f00799d2d20a3f8fd9de100e4f5b6808ce2f77706019037d802328adfdf391a80bcd1169051fcfece7800f2a62db9cd9db79148d8f94bd644bc16c0bcd92698849f8f2183793d80798b4d30a3d87971218079ab4d30a3f8498e4b01ccdb6c8219c50fc75c0660de6e134cc28a3a19cccb01cc3b6c82495835228379058079a74d30a3b8ede25500e65d36c1249caa4a0673138079b74d3009979492c1bc06c0bcc79ed5b9515c0ef50240792f25ca8eccbb31a8fed28e1b289c931ec52dc49a8331c7fbb23791752e7fb09a55b2e84e64ed0d3cf17efa75e2d5cc996dbeb5ecf0db12e07bc09e652584151f324ffc0da07cd0ee652584cd47b26525d701bc0f512774b10549a9dcc50ae213824aa4d8e825f47600dfc3d9dcca5b6cfeb0812bb3967927fc3bd7045cd2329bec4398bd4099fd08f53c2151d82ce317d6f1476a223b4fa81ef0c247edd929358a4b957701281fcbc66ebee96c4342381c41b609c9c100ece3b682251c3423037b0000fb84ad60a3b87fffce00ec93b68225ac739281dd09807dca56b084036b6460c700b04fdb0a368a3b680d06609fb1152c61e73119d80d00ecb3b682251ce22003bb06807dce56b084fd5164604b00d8e76d054b38f84106763700f6057b1ab1844d02b246ec7280f2459b56ae91ee984036c2f908c0f9924d384997f893e17c1de07cd9269ca41b5090e1fc1fc0f98a4d380b23893307743fbf6a13ce1191c4b98dc4d920c7237c6a82f049d258616e29d3e3e6d5fcfa3456ce9ccf1956f23b43d82ce66c44b6841726bbf37fc1e26011ff67ba1e8bb5e01a4d611bb97ae2aa905726658b4168a159351bda833ff29a708906ca25f2e41882a87acde5efac06c3d779e8e8429e0cc97dc7bbc95a9e9c4fe07e66961c3b5b21f5ca8b89cf763a5f8059cbdf9bc3ed9d22877d84eece5df1f652feaef3e9890ab578b282df1511a13f0620a226263f20296c1543f03b49a9e2531525f228366e5f2ae325bf277f2c3692ff722aa2436aaba04eecade4ff9c337d3db54c1117c9a5bd2e80c7cc69b02a635e94ca22c7f1c5fbcbe41c8f722975464a4b53db877b64d324b1922f761adbaaed7f0326b43af962424a6c58067c2fb5466f8a90eb10e5fa3ebe4a645fac3ab9db1af9a450338c578b7cd12daf52869bdfc74e8fce9ced6fc19cac4e7edf743d3ab8466f537ab423cde9a3f0c89ee6c33a733c786d8e3fb546fa437c9348277d8b0f7097f920d155b6fe716913f85985b4b5524a5dc9f48f282945bd506444ef50f26ce6ca21bc55837ff20a51131379c5bbaee4345424a7f7fef1f38cfaf9fb943cd398f9f9ffd8db3f48f4f60ffff1f68c7afb47943cd3dc55fbffb1c77f9ce8f19ffce3f119f5f84f2979b67279fc1cb641b9a7f67d47d03ffeaefdfdb3447ffffc1f7fcfa8bf7f41c9b313529f2992dd0e22b2674b933748112b18f215c4ffc729e0cbc414f0d53f2920a329e06b4a9e4d5c29007658ffe3e3dac7bf49f4f16ffff1f10cf9b8f8d75ebae17cfe6e995a5534873f5f26e5899f9cff030fab985940ae0200 serializedProgramBytesString: - serializedSignature: 5bc796c94c7462873f07cb32ca49eacba8c2e011f7a53ccf14ab2aa627c9e7747202f6274e528f422bf0836ef3ce90fc906f1c55caca57c481c8ae02e6696d04 + serializedSignature: b3db9babf29ef16130829027b9c782adf17d0d5ecd81b5deff04cefcc6fe133e668b2f94063ed65ed53186a44c4ee8c64476b90f91f8bdcf476c38fcbf7dc201 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/9d916a2228b78c646aa46fe3ba85879d.asset b/Assets/SerializedUdonPrograms/9d916a2228b78c646aa46fe3ba85879d.asset index 1c617b6..330b6d5 100644 --- a/Assets/SerializedUdonPrograms/9d916a2228b78c646aa46fe3ba85879d.asset +++ b/Assets/SerializedUdonPrograms/9d916a2228b78c646aa46fe3ba85879d.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5c5b531b3714d61a6c633031376348b8b5691be702362149dbb44d1b2e21341032dc1e9ae9382498840e0e0c3669f2d8d7fe9f3e74a63fa88ffd019d49cf392b617957da0bb60c4e63c62baf563a3ae73b171d499b44720c3ed60db86cb13536c7a6d826db6107ec35fc9a83b2047ff69da87fc28ea07c09d76d7876834df8f4c4cf156b08ae4b70576615e879cc5e40b947cfd759117e2f41df22dc61ed2e7c8bd0ca6a874e9b6c9eadb2c72c63a57d486c51a732afb3502eab03aeb3ec1d3c2d125338488e1e65e0b20e4fcaf4ac044c8b764fd9cf2456099ebd803e476c1f683e278a1d7fc3d522994461d7c33721fdc6320edf187c33d2bdc5bf583fe441437ca38aba182fdbf8ef61079d84d44794edbced45a9afa8c732e2a025ee2f210fefdfbfff97d777f1b253a2dda9699be6f523d23d9649a9ef002fbba5ba7e5e5e90ea0679d923d525a5bea23d9629a92d96bd9c8f51057f58f64934fb78db31d1366a91153e04bbd866872c87c05857597077113dfd1d85308f70455ea1612b609287404061ad9be40b1536c36e2aad75d84a4a7ccfd1751b5aec11511ccc31c49fae2190b97df82b4aae5686fa45f25474b63d7832c596a1c45ecfd83438cf5307952d18761fdcb5c836e07a48f49e01dbee967e22a15b3afbac014d3b6a94a046007a08f7fbc4e13a5ddf10a745e27e09ea2a14c35e43149b85f22d8de696fd087eabc6dce090a97954070f5dbd1da2849ae6411ae43e47fef9512367a1110aabe3dc0ddb7314217f7769e223867690c1096a89d398b6a7a09aba9b2c87b756d185607819dd120afb1681751d3ce811208d789440432f89f2127f5ead9b87debf029d7d28b721185783b3a0202456e3874631497256ed205a2bf80ccbd1443de223b817ec482f5b33db344ec068b43d8f62385568a95448a9cbba5115d652b6dbed513b2f8354ab2716443d796c152784ddb3abdff83af4222af43a9a8dde2a70f80b9f24c2a3d71118bd84063dbff175e8b529d0cbc7798ae96229e160091b6a08b7eb0877d54938aa239cac93704c47b89b92c35ac2160237c1eec237cc187195b15226bc7786d1da2f942d00d52332a6b0511b1708a30ee8c4476de02932f049df005c0fcf3a67e8505900def60431ada85eed091de1de3a0977aa08a3187d410827f484bb74ced0af728638192fee0fd8a6580ee5144995539064bbe7d8298aa7708781c0713e4d6e70ad6e375073a973806e9526c8147e6aa2266681f3b224dd26cd624e29442b6fc40703239e21c4c75c8887e34687ec0515b264f8af8c22bb0975f6fec3023ddda345eb145b017e2bcc5ebe6e7379746d05962bb49b774c5c78a33e1418f561421d37434d71aad3484aa5117280df9a62eb7ebb588bb4d95bacc9ecc4b807242f7224b631d6a0dc252eb01eb9f0dffdf2d6e1c5137caa3acc91192fb0e07b71e6a5c03dd0485eec7a66ad092577e2d72cd07c0563bda1ad9ce39ae8586d158daaad759446385ff2ebecbb4765df64f485339c5537e0fa16fa1e938cb84db30bbdc3cea36381e3cb3869ecb2ef3c1a942f1ddabdba0c6fa2ce0caf4f451893a34f82104eeb09f7ab08e38cf46910c2c37ac2032ac298445c0e4238a3279cd641f1599d500caa08a3ab7c1e84f0b89e7046451833e12f98228b5e3eb152616d550bf5df6f9a6205f8c3271528abcb1facd5510dbe880a93cf0fe9a4bea292faae87d4c1f9b3a5df80dff23e12d6c911447e1646a2619d44599544738ef82a8f6af37900b1b5c0ee83043b94c7d8c70a5edc7a3d698c8c1775325e55c978cf88adae307bf568f76a94649774925d53499667ba5c741ebecfa191d0e2323b50e02fcff4ce675bd0630fe40fc3fd888efbeb2aee17ebf0a6e2891f21ef2276d4133f8a2123c7a84ed61b2a59ff6888acce27d53e4ec9c51a4f5e071634b6e25cb5144e7ad9399c9cc1d98755d87697ce8bd107964e5a2e40de6567896b645545a0f8865aebf5a2ce66bc34e9efb361f438a6d3e3a44a8fb71aa4473c80c5acbaac881dde9e17873fcbc21c6581903e829e4fa807de95598e92e93c0b9ef7e3d82588047878bc019c3ea74cda3f9b9f62fa3712dcbb61a73d9cf6e341659153924dcad2055f67ba0fe2e35c22410b90a644fa4393145ff98ab573ad467294d35f3fa535f97381761a6b53db50f873379bc063be8eb570d950e0614b38e53277c6da2d60df91fdceac26898038ad6dc0eb39686e76d275c479fc076ae2d1481e35326d12b618c186ddb7a149a525c019b1aae0dc34094eaf874d5593c356808c49f6346312b2ce13c8e669687b37e65d4b80f417d9553cea20fea06141ff742f36b8a7a71425046f29a938227a3bcee98a7651ce1be7b7e4e9261bd0bdb221427bd615cfb25a8bace656ea9c288fb9d5edff79da93471ddd411032224ba018f2a5c91892248d15a883ad497bcfb900beec18ab9e57aa123511251a4490d3449584147abf32095b1749a35a6019036ddc14688312685f9bce7fc40a780d1cd318541953500d4850dd3509559cbbe531df60c8b72058dd1258df98cf830a8e1dd1697390c54d41d62641f6ad49c830abf1de5031065eda14786909bcefce66cebcd582b0f549b0dd33091bbe92e6dc123506d7b029b8fa25b8be37095717b7b212ab3d0f313815244c81169140fbe12c403338191803ad5302ed7ef3e74f83b1ccd8fc1993209b3509592f13f999ee9522a38e3a620ac09404e09c4900f1cd15bfdd08fff3a8d65ba13209e0799300eb931483b1d0186c1d126c0b26614b73d8fc6dcfa8831b03b25702f2814920531c48ecae3a8636089eb19d921e09bcc5e6cfc80677e48ccdc8ed12640f9b0fd9ed1684ac4b826ca9195344c9f59e8a41e734b630bb20c1f6e3d9ccac332db8fc4f4ab03d3a1bd80c5a5bca146c7109b6e5e6c7358390198b6b9604d94af32133e89cc6208bb20fe6943cdf4f2a92d49e55ee08665dc744598fd336fb60b997e38101055f1fae5082be4d65f5903947ff28e10e0bf7ca95374dff13e05514d9525bfa7ec3f4d888536d95a4f59c70273db492a37fc7f121cbff84d9ffa5157dd04c3364c69ba0f91d6ef2abd0d83e6cc14ff43fe1586c64154e0000 serializedProgramBytesString: - serializedSignature: 86f51e789c0fcf8272602895c1a5c7264ab33d9233d3c1705e4bf32c5b539006da893c4b43c39189dfbd781b69d23d2f239c10bb720b4cf563d155619f5c8101 + serializedSignature: dc2163db1044020ecc32ee9c00aab1d529ef562e7cc4d5581f1d5986b58fe0172de871af4c51894827fdda927d919205a2a053881677ab7ebda727b5c144960d programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/a1125ad687f8d9f41b0da3667d153a30.asset b/Assets/SerializedUdonPrograms/a1125ad687f8d9f41b0da3667d153a30.asset index f56c120..7676868 100644 --- a/Assets/SerializedUdonPrograms/a1125ad687f8d9f41b0da3667d153a30.asset +++ b/Assets/SerializedUdonPrograms/a1125ad687f8d9f41b0da3667d153a30.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5d0957dcc811d60063c0800df800db60e30333e69a017c7bd736e063c9fa0ad726713618c3d8b0069b65c06be7dadd64736deefbb7e4bdfca0fc88bce754955a438da65b23cda84696b3f0981eb55ad5555f1d5ddd6a899ab4053f8941f898b7a6ad496bd89ab396ad17d673f83609e53afcda474efd036b13caa7f0b908e706ad9e1257e24f5fa2133ea7e028676dc195dbd61294ab747ec6cac2f729b8360b4758fb04feb2d02a510717cd5937acfbd63dab2371a0048979ba28a7ea122857a2013e27acd770364b4c6127693ad5011f33702647e7d68169a7dd43eb63126b1dce2dc1359bd61ad07c4c141b52c0538264a2625895fbe0af917dc7b20dfe76c1df59768c65adaa3fe741c369dbaea9ab53d79f67f49c7a2c93aadca5ca7a55d6a8ba0b565e041b25d7f98b3ef8dacdea1a54c9db94a2e3f0bc97d5f9c5c191b35543cf39b747f170891d63d9a2ea2fabe3265536bbce23efc9376fdefc57d5ef576507eb734c959dacae83d5617948950714dd2b01e91d50e541571dc859bbac8e33aa3caca17584d51d6675c8cb7baeebbb58db2ed5e67d753ca2ca6ed6c6b9ee28abeb667578fd55757c4295c759db63aaec61e7f2d82bf9b80e4695dc5fd9e7eb9ceb1cbb39c5689f52b4aea9e3b42a7b599b5e559e56659f2a53aa3ca3685c57c743aa1c6434fa5539c0ce15d84f324151ec03882b8bd6869546274b2065bfe1d6b9b274a025ffc50ffce9a36eb720a46d00014db49ba358ba059632aa8d768712cd8cef49fa5c8416ab44143b7375f1afa22e90b935f8cdb2509d83fadb14e93158afc29961eb0e9478d52330b387f05b48651eba5d83709fb566e17383e83d02b68b5b961209c3bafb9a69a0698f3aeb50e300ba01c76bc4e10c7dbe244eb3c4fd14d46dd118f81c46c109285f516fc5b26fc2775d9fb30a323d8ffac1c7546f0f718e9a6e8034c87d9ae2e1371a89422334bc8f2b37ac4bd388f4759126bec1d00e3298ac4c291a230459a2a06ed44a533ef3651182c1652c96d0b16fbfc1f836e5bc5948481f5b9f282f72fa7d411e841c39de380de513e202eb971436de7d3948e971afcbe3b3633f69caf36e061852e4a5400e6bd294787695509c97d9a064a9448f5634e7db045cbb028cbea470b60dd7ead84b2693857635666590bd7aeae12d032f59974145bb9d23a1730e4abe67449da390b2dd6e95da79b9bade801b28352934e00426b7e3d0f83541344dd02d03294c379ec1d13218491618da22f5662dbd2a1b4995c5894e29864d70d7e8e06eac36dcdccc82c38dd3b42117dc7af49a0ce895eadf845ead0e3d6427315d45f44a8d9c5ed861fadbe1c20e7ff4f8b5107e078b64f3e6c0845e9d06bd0ca2b7c7c454a38b29e4c7403ca9530d4d84d74555330775f6ece1269d5da56839ec72ee5b04cf3a48671b9ce92a474d776955679bf8f15628ae3574bbb0ab53799a5ea9ada4544c4be4793799c22e9db668b962b68a8e84e75e109545681bdc99701d67c06db77ad0db09f4ce22e14ab36082b05ee74d08e13e0d578922576a37bb52838e321eeed7246a1954252edeecc62fc9a27eeacdfd34eafac1ce0feac6531cb936a15d510f8de61e76eb7ac0f61dba21c44db8c94cb8c90451a709a2436541d46c82e8b00e22f4ecad02dfb5a7c6684c37c87f1703c1d76282ef4885f0ed318d045d218c047b4dc4bb4320de6a227e3404e26dbaa8484a88660cc3a4f539dd5dd8748d09e18e61c774e6a40da33d56a9b12b3c9e4d81b75d6702a8a5e37ebca2c7acfe7d3af593ab3c8944fd936a5288f7c4c255f809df0a3f490aeff75078255c9a54bc5fa7098a2b9ba29a70a6d03310ae3f04080acdd99eed0dab563b73cbdbd60390da3dc3c4e34f09d99c4adceceb1cdade1a3ae55b43bda4a1f3965555ee4d9a3ba0734e1c45f17e4871ae16202b3a68a2dc5729e50e1d65b4b6949f80d26b26dca9219ca6116c35a280e26423387574ee48871756cef836da7e32da21cfb05229af26133d644a21064248210eeb54de169dca0b87e051f0de70553ee85be54325555e39af26951fd1a91c1d71d88f87f79bd5dda5238cea4efb213c6426dcadb323ca7c5622b1a3bb347db1c71194275c2bcaf8b6a211b2a2410f2baa9453930d1dd5698452c6a76f816787ab8f51dffa18237d0cf8f6eab0b4714ce7787878d6322c00e0c6a8e00b003dba7e700100132eed3d07bcc7fd1154ad92fe513e7b01ef0ed421d2736007cbca46832c061cd77182ed2ff809351e8b01274c89d5c54a13ab9326ca972aa57c4a4719a76a97fd8071d24cb8574718bdfc8a1fc26366c2a7758431ebc00d5395661d7d3ae2a872dc69655c9d7677d06aee206572b7ab2677bb5696bb9dd1f583a9f8753ff07ba4e2fd2601c64d024c9425c080295e4c563b5e0c9ae2c58d0ae3c590c9ab6f6abc3ad0c2f7b0c9ab6f55e8d5691d61f4a7db7e08f7980967748431fffbc00f618ffc6f4447b89d0e7d101e31131e3569ef5b1aed058ac9633aca18533ef4c3b247927d5647187dea8ecea730f0e8330cbe52356c2dc0ef530bb7782f58b830bfa98e0af3156ca5a7665ee80ce2a5e74cb2ddd5c9665e7835735328e967d07e19bead502dcffe76ee2907e1ffbc89ff7b3afe472be67f05ca55385aa1a33024b86092e0be4e82cf8d1214cf5e6dce718f03c67333b7e67a3f3df1dbc385940aef6d7a9ff3d7174a1504db8b266c1fe8b0cd5ace1aa6b385896f60b27141fb78426b94386f9acab7bc09b3297b93145ad21259c94b6a3dac9047fb297cca649ebc1e67898f0909b786f81e9fc2337cff8afbaa79e8017d2c084e974c387d5b87138eb37a8bb1657d0119c30204109c41614eb14177b297c842ecddb9e5d86218be76d924e7b44ece1b1e919c2f0e8e43891a7d1dc0e34cf66ea21c44ca2b26296774523ecb5bbdb3b65ebc6a5fce9abd8dc52cd0784d3bb1b7f2b7a0834befd72a0aa34a10ccde336136abc3ec76e028ecf8ff2a9ccd02995c99761086b7bf6f92754e276b2ab0ace3e0f1e8f3e1707bd5c4edbc2936e9b975afcbd9bce6d4b8be4e33a0e7beb3afe27695ca79cd24e7473a394f07c832b93f87c1e97513a7dfd171faefd0e2cb8e343b51c6bf86c2cb71c2cf1116f254c38dc17aadd6c36f228133ec9bc40d46e80764077894b3d274fb3b93d75be9ede388ed3af080316b369fcf94de14fe5dcbfc7057f19e87729ff32925854e6bc34c6f5c3affcf3a143fd354af24726801d274bbfa5d93f47ba8d55aa5d59a34dd381f28d39a4a73f190f756f201c152fbe66d02f7540c4de0fadb025dbe489b0f4bd22fb5b37c8808388f8784f03c231ad53800b34c812a07bff8539facc920eedf9704a79ec0d966eb83718067ad76079e8f25e13942f0a089f2a0bd0180b983b6737b6e8d929178c0f89f04c2589f7411bf155a2c2bef019de2a8bb97c6b957f420d326d15b764761da80f3b671fe036e9ba9a24894aac0be521ad7dd490af48379663f5df2ff3d5e6770bc7e84209c7586378a238b9271a499805fa00b6cfddbcfdc2d80b7bafaaae4b1c4c6829871d28f20e5c48d7d6c747a2c095b9b826dcb2393cfc801d82a05609201b82409e06e05e09a9a122dd2444510b27629c8ea1964cb929005bd9f1a3f284719945949285b94f52d1389f8bb6d1f03ee4934c3c50539d886a4603bcc607b5a8d68b7945f78cdc95a5abf14644718642b9290d52bc872d0604916ac3129b07a1958abd570cb75ba2136a516f75ec9c2d62205db6906db27d144b3891826bfa7186ccfa281edac1c6cbba4606b60b0ad49c216f49d1df11b4f330cca7549281b2c277f736efac6712ced64703d97846b0f49b3b30bcc7db7520cba1129e84618742fa4a1b3d3909da51ae7e402b02c065da314743d0cba0d49e89c35926de36ba744dd566cc04831003f8d669c1d9183ad470ab63606db66742e2b98a288b9ec00832e27095d9382cebd81521034b1c5a42106da5614a0c57131f300036d3b0ad004239b18680719682fa3004df0568d18682718689f45019a60ee2606da4906da2b49d09cf761c52fcd4833885e4b42e4e77d58f19b938e31f87e28095fa3724bfecc4e1c172b6b19603f9204cc3c1bb814c3097c3783edc7d1c0765e0eb65e29d83a186c3f8906b6f1184ed98f31d87e2a099bf7dc5330b9159b7b3632e83e97840e5f0151ce7eb3c24de9f173e9fd0ce02faae1d2f64dc2495a8b5b8ded4c751783edcb6822a1e00ca2470ab67606dbcfa28b84823356b148d8cca0fbb924744877890ee277137a9881f4952448ce969ac267e6e33883a86390fd229a4816c7db301683ed97d1c0361943d8fa196cbf9284cd99e0f3c72105136031f7dccb00fb75b5018b633cdbc300fb4db501134c2cc4006b65807d1d4d24bb18c3dd465d0cb6df56c3ced6e82509f623d57174cc430cb0df456367e76238623631d87e2f099bf79449d0e2c4a64c0906dd1f24a13baaa02be73d06a2d08a2d1b9d61d0feb11ad1ef65fead1ba26edc2405d82003ec4fd5064c70038d1860c719607fae366082330531c07633c0fe526dc00463981860350cb0bf561b30c1d55bb1078a8e32c0fe566dc004a7566216d662bd332f92c820227fe74a4fb195e254e0c74b52251f0bb0dfdad0a6b042aa77a9dd62feb98b9d3738a4e9dfc1f07fd4e3e7453cde3411296f6aff4038127a1f580b4dc761bc3242276969f9ccf6d2eca19534fd13987759fe7fa2de95dac94c3b689b1f7ffafd3e34b6df70863fc9ff0194d9ebfcb6870000 serializedProgramBytesString: - serializedSignature: 4087d5662439f9458e653102e0fca8f871e7c1948cbfa45313e313c9d02833c750daf2ecdb468744f73b3a94a75e6eb729ad1c8763eadf2519badb9f87718f09 + serializedSignature: d1aa2916213e055d6f5911e38df842c2ee2ffb5b776c8efde3070c179def5d25e35187344c7ae3a46301e10101cb406ca24fa7212a973ccc1d8615f698f9a70b programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/a37533707706cdc4ba5293865ef9c38c.asset b/Assets/SerializedUdonPrograms/a37533707706cdc4ba5293865ef9c38c.asset new file mode 100644 index 0000000..20c423f --- /dev/null +++ b/Assets/SerializedUdonPrograms/a37533707706cdc4ba5293865ef9c38c.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: a37533707706cdc4ba5293865ef9c38c + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d097c5d45f5f8e7b54df77d5f69babfae4993346d594ad374dfd2266929b4a54db334a1499366e902a5ecfbbeef50f67d07054105050544454545044505454445414140f9cfcc9dc93befbe39efbdfb6ececbdcfe7fe9a7b9b9db9933df39b39f99db218bf19fd034fe6b3d2b66856c065bc72a583ddbc9ff2ae4c73afecf39d3d7d7b0467edcce7f97f17bd358668237c5cfa4d050fe7b193f6b62cdfccd1656ce8f35f27e09abe47f2fe3ef56f23371b58affafe44f853af197d6b185ac88ad664342831288582f5f6a52d742225ea1aefcf702b68fdfad944a8940b2e4ad21fc5709bfd324efd571a5f5731bd96619ad3a7eaf9cbfd3c86ab9cc6d5262d70ba733f907730e03d571903a0ee0ffbba9bf3baabfbbaabfe1f319ea3838c9e78780f7ba81bf05a18371de1faa8effe0ff3bf33f9bc0b978f743753ecc91d7a13a8eac11ea38521d472999cd49e8df451d0f4b10df7832460359c930ebaa8e63d43153e9db9262f8e31c46a11b813c71fc27d0670c08bb1bb82f8e637dc45da7e3c7ae74fcd849c70ed7aaf47b575d1faf8e13d5718292cd9f19a0b94c52c7e109f40a3befb1392c62b33ccc8e0dea7cb23a4e51c7a9eaf82fa5eb6e70ee5717fdfc3475fc4485b1c7705d3f2feeef55e7d3d571862bbdb2d473fbd4797692fa24637f5aa77fab304e04e79c63a7ad7164e974ffd495ee9faa772f7538767aca151f687f26b93395bc935288c767ae787ce6e89211763d9748072d3f471dffa3e4ee07e742ee951ee3d649bdf7843acf6589cbb68149dccb77e474d5ac673be1741ee85cef7c248bb6e55909f4d469fbb92b6d3f57726b955c1dff39ce7948733e0cc811ef9fec92fb854bee174aae2e23b48d27d273ae3aeaf81dad8ef3586b3e1e7787ba76843a1ea58e5fb2e832e04b753c3cf2ee209d5793e5162f8de6bbd27ab83afe37814cfd7e813a764bf279fdcc021f3a17aa63f724c3ecae8e0b7d84d9c3b185ae1fb96c617602998b1cbe5d9b810e5c4e379d6717abe312755cea1cc59fd00ee479223b48a4cb32a58b96b5c0d1a57b5f75be5c1d5744ebc256ba743ad0863afd4fc93c059c8be357eafaa9e05ce8bac609a7fb0beafa2a755cedd2b9885067a543af9ec03692792f9e7dad75e2d723db91dda3545d2f76e95618d1bbeb42f0aed62399fca064873a443396e74207cd769debb9d3c0b93882fc2cffe6eff6d47c8782ebe2ddd3c1b9f85f92a4aec7b0589b15723a81b055fdd55395ff3d2f55cf6e60b179cff4ae387604d73a2a796fa9f78e65b1f5987e4ec4ed0c702eeeaf4f326ec719f4e3e1f69a1fe7dd8d2cbafc2988d84397d7d4b54d4a9f0c1695b742ba0f353af24ea8565ddbec9cf7d1ba1cafdee90cb87476f4ebadebd32dea58ceccf56c19e0a0f223ef15b6863d52d78f5be38455a19ed1471defb511393d862add753956c9a2f38cfb5971ad4a1d4f50c73a75ac8d3c3b51b7cb6ad47187d2ad0b8baea3abc17571d46de833c1b9786e7b44f6202d7ba74b57537ad6bbe26e2a03e2d95983f3ec78dd77dde5b0ed73a3e2f6824b87e3597cfbd5acfaab789ee5d22fd1fbf1746d76746a6d43ebbea7663d0fc81ea0f8eab6076c5735817be25cb7af1a59547d105717dd47ea95203e03c173e2b8d747fce3ddebac8eaa0f12eacea2fa15f29ca76bbf53e3c8daef701af29c3a3fd979a7bf2e330f38f7fbeab24fd7cbaa3f18d2758c782653dd53e1857a827837aa6b909dd6b377e45a48d79da7b9d2e76cd7fdd3810cd3fd33800ea6fb67aaebe738baf7d779e12c575c1a5dbaf6625179999d0dc2e9069e81619feb212dcf51eff671a5651f275d06ac8c23eb5c735a0e54e53f3bcf9596e7bbd2b2af212d2f50f7fa81749ba0aef537a42f18bf0be9f2f742242df5fd8b805cd3fd8b810ea6fb9744a7e5405d2f5f8aa425d41fa6e565b17195cfc0b0cf4b222daf50c7cbd5d1d4b6d47dd2494aeef949c8bd4a1db7c7913bd425f78224e45ea38e57c7917b2da26f2ae1695b57755e68208bb67571ceed76f09c38b2ae63465b1fa2dbfbd7b3685bbf8145dbfa20166beb6a5c3204c7940f57d786b0585b1f0aec448f5fdf049e81b6aaefdf0ce49aeedf027430dd3fc8a26c7d88aedf6e65665b87fa435bbf2d36aea121aeb075be8d9796b7bb386bbec358745f6298933e43b57eba6d70328b5f37dee1c80feb31f33b95bce14afe45e05c1c47b8c21da1c2ddebc819a6c7317baaebaa8c18b6465dbf4b85b7419ddfad9e7bcaf5dc3dcef964ddc6bdcfc5ff7e97ad8c8ad85b6b5cee05f760dc0e63d16d9207d475dd4ed7cfe86b30ad749b2d11d707d5f12117bf914adec5e05c3cf74844ffc9ba8ff0b03aee89dcebfb802b7d611be051b3ad485d61dfde6b1b49c7f9b10471f6522665b2e83229d3b183e1afc691f535f5cc47719ed175d3d3eaf875257f0c8bee238c51f7bfa1cec7baee8f55f7af8eb01f7426d043cb16ef5c9244fc9f55c76faae3332a9c712c7adc699cba6faa23526dc7a67aaf4ce9349e45e7f9f14e3a8cd47942dbe2d604f6f12d75fcb63a6e53f274bb643738c7184c4a32ac38f10ae9baf414702eee3fa7ce27aafbaa8d1e9aec7a7eb27afe79751e763d3fd5f5bc9e6ffa8e3a9f12fd3cfb2e9023ce5f88c42da4e7c75e04d7f43cd6f7227c46abb69a9c2887e37bdf67d1fd3bdd879bae9ebb0cbc0719e8fbaa8d159ae18a939e8fba029c8b63b64bae9ec77ade755fcb9de9d2f72575fc813abe1289e3d4d7c13b80277b395a665c9b567def508e7ae74a70ce6d7a74bcf6bf7e37571df3948cabc0b99071a64a936b7159a1592e7eb9e0ba38e6abfb57837321fbc338fabda89e9ded8a9b9a07ca0c27f1ae6a1386e6bae23657c9d8eac42d33de9cba2ec37fe84a436db342de118674d573332fab73dd86bb069c731dc6e871e01f31b36dcf71bd7f6df4fb63759bfac7eaf89a4bb72359f478d34fd5f167b84d327dd4ba1f1579a655bf9fb8f4d363245aef792adceb801efaba381ecda2eb283dcff573753edf757fbeba6f9acf8e573e16b0e8bc5ea08e0b58743da0e633c6aa31a4b171fae1ad32162a19d7ab67d5d8566891ba7e03784e5f17c74275ff46702edeff853a5faceeebfe417f705d9cf753e74bd573378373715ca6aedf02cec57189ba7e50c9f925b80ecf97abe76e75c54b5fbf2d0e779dbe2b5c7c57387cc7bdeef01da7e726df50476d6398dc375df2572af9b7837371df3406fb6b75fc4db48ca8bcacc76757b1d8fca0f2017b3b726f9a6e27fc0abc27ce757bf5289678ac305ed9fe5b66ecb34ec853e73afc5d09b8bdc38c7d9409fb3dcaf91d8beec3fc8145f7617eaf8eba2fa9e6bd43ab5d1cde53d78b22e18556836ba6fe4922dd4cd754bf23b48645dbe11a27fe1337291bd1ed606d873b1284a59e0bad05cfe9b08ac1b53faa6b60ae2a540cae8963a9d2ed0e70ce759bf48e4bee3af5dc9d206c715cafaedf05cec57b63d4f9312cda074bcb3b16e8748c0a5333ff932b8c0d2c520e735e930eba386c00b2d6816b5a061c47a8054771fd6e9506d7468799300d4cd7de57c73bbdbf1b3a8e45d711c7a9e34697ed6c74588595ff57f839166da777c70f5bcb657f56e79b58745b5b8fbd7e00e489fbf7788ccf66577c3647872be5276a633ea28e7f5132b6a877ee05e7e208e76b547b2eb415d8849e0b2c53efdfc7a26d741b78761b78561ccb5974bfbadce13ff55a976cfd5e857afe7e702ec2faab3aaf54f7f5b883cea35540874a704d1cb7ab771e04e75c87296afe6b6a031256b57aef21700ec3ac51f71f06e7226ee3a39f0f9da09e7b049c6bc650cea32e392ebd42204f85545d27c764e2d9abe2da3aceb14d85b5c789fbe477a2e394489ef1da2beaf83715862e1b1e02e7e2fecb29c87e5bc9a863d17d883a87d1b453d573baec7f2b41184a1efbbb3aaab19bd04e25ff31702e8ef52ccae6437a2e56db7e038b2a9fe539d76bfa1a979c5d2e39bb5ce9a2c78f1f77bda7ebe2b7d4fd279c749b5ee18a4fa278475dcb0849bf87a5ac9295b10696251d3ac42842b22eedfacdc4ceecd27744fc123f9364b0cd6c1f7fb5d2e451be4efaab37b35c9663f4281f26e7d874e885f277197fa2460a7d321413c4d3314108e56af9bf4ae00edfc4af2f91def4c221be86df99c156f2a3786b2b9bc936f27fd152d6f3606b590b3f2be5bf1ba4bcad5cedd827134549b8cebbdf29e6321dcffe3a7e45036de0e7b552c312f97bb7d4b4526abf8c5f6b96eb0c76b2ed6c013fee95a1c5c6bd91ff6d0ab3542133eb6876f0c7ae3bcb0874322de4b111da67495bfcbf14698f1411e83b8bfc217e3a6549afa7f36352e2ff183a858c182459a664cc94c84251d7725896f4a52a8e21e83d8eb13134dbb7c33b9fe5c58d8b998c48ee1132069114ae5af07468d57bcf6ccd888e5a2ecb9253232313442d1e58212f2c6715bd442123a353b650d48d3f64c22f5dad4ad288df79ae463ee73d013acbca2f3a01e49076292fd5d680ca739d54be56aae68ecc1a7ebd8c8b175198c14bd77aa9d089f2bd66297625ffbb9e77bd0af8794cba660b25bac8a489ad7813450f4b9c0ea6c491637aa5ed9237b0a568f193a76b6b2c22c993255b5343e3183116966c6675506d2d9dcd9e7db26867e9651fbc9b614e97ee325d52090d4b998ea694e99eee6c93b89e88972e3d5ae3154917f16366d813b1ed443a60043b9908f648b76d2f9079ba56b6a576a6c05038a74d75173d6680bd11234cac028630c380305b20ec63d08a65747369251442247736254ecff6a99453336e31433ac485200335ee7e71eb54afa6ddc5444fba316e25a5a7fb8a25bc53b082df2be3cf57ca86a7b80e2bb8021942a47f19fd467cb262ae65ba9bac91ea0049753ce8f9fad50c23ded5403c5bd8eb408319c832ce9d19fae199a11b96cd06f9cd66dd31c983fd4aee81491ee257724f4cf250bf927b99b28d785e0efbd2679bc8108bfe6b017fb79a4766b7ec37b7f0f74d4332f1b3cbb0a4b3cb70995d329969a0c89b465836e96d4a3b717184494977d20dc793ae0f2678a44fc17d316b1be5d7dafa99ac4dc623bd1d1fa75720e478afe484dbe2e898d2edd4a3cdf6359a61bd93f83a60d6d4df445026d809a404d7f16bce90e42279b7468e63cd606b79186532c446f944bd6a4e61cf6b8aabe4461c2d5293f8bc45deece8eec94843128e4f947a8990ddbf90cece1899ccd40a614631c09461459d215c2cfdd6c4034dc245253a8ec57665bee23f31c27be2c207619a8f37687ee5b11d3c693e182bc726f82dc786609227fa953cd494bf65a63f8d347f273b4db244eef853c98a7819750273c6b775b8f5d27485467a9cbc981faba416e27ab92aebe28715bf3498d4ca079406d2fe1719ebf0f68a857048e9208b86c9098b069336de8b0673c13445866e171bac181b869534530d25cd1ba6622c4e49331ccbb2d3fc66d91126c9b2c366b0d56c61abc218bacb06584c3853f070469a8a06593a9fd8ae4583d35f17f2aae4cca5236f3513fb71ed91a6ba831bf06e6538a5fc99461e46a532723f8581f0881ee51e0862ce8f393b64cbec302f89ec40192b2c038c32599218d81033363183eda2aa28e6fdf842b64566c35df2b2a0e4a46e8d7c540ca797313d0919636f5d707b3bcca48de82f0a47ee84fd8b01b8e0d198e05c9f8233b13c9ee7378f8f314916a58d7026f7dbc21a8ba99def57ed7158893adb50a27e19f256a28ec784cf31087fb68337e113b0ac3037191b8963d51331c1879bf29850a3508e1167f2fff5fc0dd1552b93b93f53568691d22093e7f51afe97a8b0a781e7ebf913cea4bf173d2799f4144671845fa30863e976a421dd3ef1986e9331e14719842fede84df8142cede699d24e149aa2de10cd926a55b745978699d2fd22537adcb4c8b1ce0a99724d325d33d949bcbe38991f9bf9d399b21ea895f732e5f6948db2acf592a65331fd8f36e9df1de8bf0668e825c46958b935df506e853c965bd34dc245c3a780210d1fb19cc17bc3670686add0844d54a28b78f345b45c5be4f325d2002a5bdbca156d54416619f4ca923dda9dac3d1b64a2b720fc939ae4df91268a083b321feea7e125968eb81b5efac7dcf0123d90b05c02960eedb106563656a82e3614aa212f85ea4c2c2f2cc1f2c2d294f2428ec9e6e4404743bbda1c9ea38aa56c91f3fc37f8c592a198b140391893978465b5958e53e5b6484d72fb61875c93284cc594d536b0cfb0035f6609739e582ef3443a35c7f2452e566baf30d4da4f6478abb5f34c262bc7b91adbd564174a09e930db9526b395a31df949247e5bea395abab136c942b54215aa4ed13d5aee2bd428abcd4a7e5d14bcf0fe54b92790682f2d96bceb247911bf32d9efc58c7c9534f274c71333f4595805b0da5001786a55e76359a8c89085bef4988566636aaff1abf61c4cedb506b5f777f6a6f65c4c78b141f8ca2ede841f6e12de8539fb30fae9211e8109163e5231cd4dd10bd6fd8472574f719bec2be8fe5f85bcb28fffaee5d7caa5884ce992acfd30bc687924c6769d816d5f8f6c8fc210acf7c9769e49b030cf6392111c67cefa689360d1fedac090f697586ee8bdfd351fc37e9c01fb418fd80b4cc24536dfe8379b2fc0246ff22bb91093bcd9afe48598e4e3fd4a5e8425e21643220a57242f89b81813bed520bcd4a3f02526e122bf9599caa6094cf4c5238d54a7fb1419d7286355524a23ff7bb7aa732ba2c647c498478dea347bc9e74b313db799f4745640096f33d1a62893636822c422b6c353a8cb30f4e506f4177a44bf1c135e6110febe47e12b305e95265e4313a46b8574528a5c9dc9af7ae1b812d3a6caa48d388da49b9770566148b71b90ded8dd1bd2d55824aa4d9110558583ef708e6cb51cf02b53abb776cb6adc3bc6224c831a9306a2645bd9da30589362b3600d86f40403d2d73d225d8b95c83bfc96c8c598dab5a642b38737b54b30b5ebfcaa5d6a922c4c6927435a1d62b1adf756c73a2c9c062c9c5d2985b31e23d5e897d4315802371912787e4f6f09bc0113de6c10bedfa3f06331e12d06e12f78147e1c267cb741f8c85ede846fc484ef3108aff0287c13267caf41f8b51e856fc684ef3308bfc7a3f0e331233fd1af916fc1d43ec9a0f6c0deded4de8aa9bddfafda6506c959d25f269d5eb96eef276f5eb96223a2e43cbec5963f268fdc44e163434adb4ce9226ae8534c2a79a8cacb316b3ad5604def7acc041598f0d30cc2377934d54a4cf8e906e1e77a145e85093fc320bc6f1f6fc2b7638979a6cfc4acc6049fc50c6dc169d23aeb651ecb941f2c140b9377aaef238acd212ae5c47599f290d6034e7ae25aac74cf54d6dba86cba965bfb0c7ed58bd63598d6679bb41633af621037d26e76ba924e37c4e45798c926a956f7244f7a9d80d9c039061b78c2a381edc0227dae4f1ba83595b3d27bb086b49cc5fc484be5e0bdd899a24a5a4a5d1b7bee9f9774997cbe2c93853f019dae58f95d674a6ed1b6be80216d6bb1295977a1b2a7b6f54e5338c2662f32d86c9ec772ab1e137eb141f8068fc21b30e19718849fe951f82e9370d1ac11db8ff96ad63462f9f8329ff9b809137cb9a95414a036b60ecd38a3089b3d96c3cd580a5c614881ecbede52a005137ea54178b547e1bbb1dc751596bbc476bcde7bae7b4ce108e3b82699c48e33b1b017137cad4fc1fb302bbacea7799e8809bedea7e0934c8245da8b1d65ddce6442801767b2fd9815de68b0c24bfb79b3c293b142e626bf85cc014ced9b0d6a3fe251ed5330e1b71884bfee51f8a958ce3c88e5cc5b53ca99a761e628f6eb8d292dc57a862dfc9fe84c8b69d2edf25be395d2e172afbcd3205bbda22de9c5764fc7b4b8dda4c580562db2f9ef3ae60cb33b8e0ea9eb7006a6c31d261dfa2b1d72f9ff7256af9623ece5bf53d7e04c4c833b4d1a74056921964388969797d0cec2ccf72e83f91eecefcd7ccfc6ccf76ecc7cef49c97ccfc10abd7b0d855e478f85deb918a1fb0c84360df046e83c4cf8fd06e1fb3d0a3f1f13fe80296d3d0abfc0245ca4ed8358da3e9452da5e88658787e3154d396d5c345d8469f148fca269661b164d17633a3c1aaf68ca6bc3a2e9124c83c712154dc7c8f0bcb96e5f8a99efe306f3ad1de8cd7c2fc3ccf709cc7c9f4cc97c2fc79089afe7f869e85d81d1f9ba81ce671ee95c89d1790aa3f3744a74aec222f10d4324d60cf21689ab31f4cff8447f0da6f5b306adeff1a8f5b518fa6f62e8bf9512faebb0487cdb1089a583bd45e27a4cf87306e1d51e85df80097fde20fc428fc26fc4f07f07c3ffdd94f0df8419e70b2c4eb596dbc6d5dacd98162f9ab488546b396d58addd82e9f03d930eba5a9bd586d5da414c83ef9b34e8c622d5da2239765fefd1ffe356cc805f3218f08621de0cf836cc805fc60cf895940cf8762c123f3044e2358f91b80313feaa4178f6506fc2efc4925b7ca8c94fbd7017a6f58f0c5a1ff4a8f5dd26e16278447cbec9d7f0c83d98daaf19d47ec9a3daf762b07f62ca5b62d436be8757297fb441fa606d97e54ea374807416f254c8b9b335ccd932d259045ac6af56c8e5a1d5f25c979b656c9b9ad99a2967b6f402d27dccd93d2c53ce2c3b3b8167ca598d0ab5ac7887bcd2249faa0492cd7367356a0e10ceb67975d4bc0f4ba09f1a12e80d8f09743f26fc6706e15f7a14fe005618bd8e15463f4fa9307a108bc42f4c8486798bc44398f05f1a843feb51f8c326e122b3be914c611467e8fa1183e02cb93d49fb4c64c66e4fd3b61399bf32f1324e648aef81c59fc8f4af2b3691f928664bbf36e5368fb6f4185645bce5b78a781c93fcb65fc94f98248bb2f037c9d87f9c42f34993fdcbcd5baadac5fefd6c1c15dff27f9bb4e5bf232d7f4a1ccbf7b7bd953925be8619cfeffc1acfd731e3f9bd4fe379ca245864d33f18b269e9086fd9f4694ceb7799a14924f62a28901dad4ae9bb6f5af591299b4b991e1d74be81e9f19e490fb1f18437f9cf60f2ffe833759ec552e74f86d479d563ea7c13d3fa7d2c75441ea9564d449d1e95ad9b22a4ea3ef52d2c927f3644f2b591de22f96d2c921f98222972a0f68d70dab3d1be6c5ea2f51c16f25f4c218ba6a2f3ad8aacd6adaeb35a770e29e219a282795d7df13ca6c187260d8618355829ff6a96cbac9d567f6a8b6bbe83e9f257932e2392d425762f642f3a7d1733bcbf190cefa351de0cef052cc27ff75926bc8809fec8a7e0ef6182ffe153f0f731ceff3470ee7b9837ce2f61c23f36087fdda3f09731249ff844f28a49b0287dfe958ce0389da11f98048bc2e5dfad375cfdd04f592afdd05731ec9f19b03f90e90dfb0fb148fc078bc4e72945e2475824be3044e2438f91f83126fc4b83f0a163bd097f0d33ccff3243712a963b1533b89746856c63eb823ccc26cb0a6fa7fa1dedaa9d29cf9cea679adc23a051d6fa4e91db245db93365c11c592beb0c2a89559f0dae96810e470c2639556c556b719e290bf30a8fee883fc158fccfc442ecb90137e4725a99910a36b26e758fd4d0d97adb193c73f4133a279290c39ff6eadefe53cc60be32184cf5186f06f3332c4bc98f609ab29468077bcf52af6391e810324c59798cc4cfb194ee1832a4b47014360f916e5483ab627980e85d38fbb8c44bd370dcbb93a50bad33ac1ab1ebe81c502f2d430fa146df6b9676d56cc845dba4867aebf988ec7ad53bf5625fbf30d0cb92dbaa8a7526e91f2758afca1711bbdc361e29e81432ec7124777a15bb1ed26894297253a6f8f882fc0bd9812823244626e8b4c0c6267e69ca3be263179d43a62f481832e668dcb4dec032661753c6344a8f63b8bfc2a477354917379c223c2b8555f26f62e5573743f93567bcb7f2ebd798f0ee06e1577a14fe1646a947c85f5bf56d4c704f9f827f83e1e865c0b1d7238edf62c27b1b847fe951f83b98f03e06e10b277813fe3b4c785f5315ea51f8efb1c4ec67ca4bcd2cb97d28fccd4c3a3dfd2d51739d76cf53fe014ba2fe8624bad16312bd8b25d100531209278dd8a9622f9179cf149e681a0ec49a8683526a1afed1148e9032389972e4002ef84f18b0212660a2fac9f204e87d4cfe5093fcee8c192dda4b887fc6421c660a71b0d10456494bd7dbf144ee78b3f40f304d869b3411124433d06b4df01743285999e2a2d8e4255d6bfe93f996b5b9b93922241a08d13064fe30360147ca26e0a09898c5fde43342ee4353fa88d351a1d84f522f5f755a971b47feb0434cd264e049f357cc000e331980d89553b88c39057c2dffab5945aac6a3e1fd0d0b77b429dc3e68b83b5525e025ecbf9bcc714cbacdb150f60a1b5330c74c8e68820bd10cc418c720c6182f74cc183f327193df93d892466ef053db2572474bd1772a927d6da7e7de9402d3b121af9b8c8f9364c7c5c43c55fd30eaff30e51431eb3c3ee473d6f99f98e4097e257f8c499ee857f22726c9a2b53529e4ffdb28ffc20aa5b0cfaed0bf311e93fdf2f814933cc5afe4cf30c953fd4afe0f26799a5fc99f6392a7fb95fc052679865fc95f624697e5d3e8fe8ba99ced57e5ff99248bb6c1cc64548ef34da5af309573fcaa1c19077751cef5493964122c3f03e557e50e98e4597e2577c424e7fb95dc09933cdbafe40c93646173737cda5c674ce5b97e55ee82d9dce13e6dae2b26f8089f82bb99048bdaf5c836a85dbb63a08ff20bba8749b2787e5e323ce24cb7f7340916be97472723f81d5c702f2c05e7fb4cc1de98e0029f82fb60a9b7c06feaf5c552afd067eaf5c3526fa1cfd4eb8f415ee413f2004cf0629f820762a9b7c46fea0dc2526fa9cfd41b8ca5de329fa9370483bcdc27e4a198e0153e050fc3526fa5dfd41b6e909c253fe4d83e5f786f8baf13c7efe8af4a262d26e3c4466069b1da6f5a8c344916ae9245c9a87c3e2e781466976b7cdae56198e0b53e058fc6f27eb1cfbc9f89a55e89dfd41b83b128f5c9622c26789d4fc1e330c1eb7d0a1e8f413ec62fe40998ca1b7caa3c11137cac4fc193b06ecb713ebb2d614ce38d3e359e8c69bcc9a7c653308d37fbd4782aa6f1f13e359e8609dee253f0740cc5569f2866601a97f9d4380beb196e6b839e613686a3dc278e99188e0a9f3872b022aed26f11978b81ae6a03d07998dadbfdaa3d0b53bbba0dd4cec7d4aef1abf66c4cf2097e25cfc180ec6803207331b56bfdaa7d3826b9ceafe423b04cbed367263f12135cef53f05198e0069f82e7618277f9147c3426b8d1a7e0f998e0269f820bb012bad96709bd0033e416bf865c68922c1cad778762bd92b3855b6d268bfa15eb562506b791d01662a1eda1086d1116da5e8ad0169b42ebcb4ff79942eb171b1a12e4183cf196988214ee252786fcfb492fc5e27312597c966109b69f22c19663113c992c822bb07c7cc06f3e5e898db79ce273bc651556589eeab3b05c8d093ecda7e0226cbce5749fe32d6bb0d43bc36feaadc5589ce9934531c6e22c9f2c4a30c167fb145c8a413ec72fe47518e4737d425e8fb58ecf6b83d6f131188ff3fdf2d880f1b8c0278f63b1b2e8429f65d17158fbea229fedab8d18e48bfd42de8441bec427e4cd188b4b7db238de20386b3c3f0d89cffbd8b045d5463527d276f328979998191d252f0f0907ba2ce6659baa54f4c51c28b798925da4ce15c924fbe5786b68ab49b038bd3214eb9cad7fbc38679761a5e4556d504a6ec3845fdd06c2cbb1d2e11abfa5438549b2fc444a32a91967beb9d22438939f5e978ce091b899546182aff729783b06f906bf90ab4d9205bb1b935139ce5a9e1a4ce59bfcaa7c0296196f6ea3ccb8c31480d887f0966498bc890baec5601ff409bb0e837dab5fd83b4d15de047e1a121f0f6e8f9500bac2f0e6f57f5bd295d8edb2121b1613bb6474c02aa67aac04bea30d4ae0062cf1eff49bf8bb30b5ef6a03b51b31e177b781f026ac65794fc8b0e868a13c2de6c652c216b215ad3b55ad6662afb03d328177a8a49f2197272de3f78bf89d9dd2a4c51573fbc5e4e5229e86a6250cbf9e39eb6cbd7d6ea2198be5bda6589edd1acb75bc2525329d9341ebe4dfcbd4bee48d723daf934197b53eb9a87573b8e8ed671a158f12e67c47b490b5c87809b9d1f42212c4f3def4c0249532b1b069bbbc1bcd14665637eff55c8ed7456c2d18e9fb307b82213a71cae5ef38b4ea79a1b885db46a34c7327b6a56a433eb7b69177f1eb6d654fbbb158de6f8ae53c572c2173279e8b99f34dcd3283d547a710bc132fafc0b7bcc46c0f16b3074c313b3aa9f42b90abe16b985eece53fe52277bcc46d2f16b7074d71cb77c56d954c9d6a153371b6b7dd62b20f8bc943a6985c98e6f22cf28ed86ea8964bddc7c42aecc82e864d1eac1cb2c36321ea9216d9cc80a59e6860b55dd9762246fd6113f582a4f2c64ae67c69c38652ed242c7e8f98e2b792d0aac4d55d3218112ba7395c2383ae6127b232b424492555f763b17ed414eba3e2c61ad7b458c6c5d976cb89a3ae8dc5d5724528365fa49e9a2763f17acc14af633db7ec4ae49de8b69d4982736d4d6b39d0c8eb03d1d5f1d3124c259d0f603c1e37f15891963a9bba363f058bf313583bc59b0d681b167b6d944b41309dbd5a8497989d8ac5ec4953cc0e4762b64ee6cf5ad53671badabad7b25ee5e28a98d4a0e9a39c86c5e86ba6182d262c7d75aa3a5b496c63cec6d76d17d3d3b1987edd14d32319364a6e2a29a26300776e124c96ca546e94bda1725ee3ee6bc3589d81c5eaa964fa04d1e1c216c23a990a8dfc59910fb7c7a9fda265b45dcccec462f6b4296685094bcee47a0578191aafcf9a6a49791616c76f60e589d9264ba575890d2daa54fd106d916210afd9958666496b7950bacfbb533ded25466763317ac614a34ae23e42b3dc034decc8e4f401d64b9bae692d5fdaa6d79b4abbe01c8cd3b3264eebdaad2f159f907f0ee7621cbe69e2b000cd01a2cfb78d3fa473bbb30f57fc3ad42ca9ad53fa3c2c86df32c57099c718eacfe09a53a43de27b3e16df6f9be25b4c68d94d29b428da82c0051881e7daaaa5e1946d05a09d411fab0bb1583d6f8ad5128f761cf9eea50d367c1116d7ef60632e5e5370b17c22d61adde56bf272bdc4ef622c7edf35c5ef081f6de1e69896091eabd8568c97385d82c5e9056f69e6b64ff8a9a444b98cb2a6bc148bdf8b58fcbcf4829db82e516da6c85d318713bfbddb566de1cbb0f87dcf14bff12cfe386729274ca1e5e59896df8f3f5ae925154a524a054adbbb028bf54ba658e31f422c6d753e806544e4c314a2ee6f31b63b539bb1b812d3fb6593de7313f62197c9d94e319e5a2b3f4bb088d5c9ed04637bf4f15220f53ef155587c5ec15acbf1f388e8dfaf912dc826431b2299d911d1f2aa6ac3185e8dc5f007c9f4facdb31dcba4eded923ddb5a6595ed39e3710d16c757b131b76446369289656a2546ea31bd168be90f4d315d9a546abae7ae9c7ca8e3dd9ee97a1d16db1f9962bb2161bad28ef553cf025c8fd1f8b189c61c5fed957ad6e41ad333d73fd19ffcf0129b1bb0d8bc668acdec383560fc91ba8634c4e5462c2e3f31c5e578342ed11ac03c5ac25fddc69cb67fb9e7b824fb54db93b90923f35313996d2819d3286aa4b75bcf7670ab4e7644b66dd9f81ddfbd1923f43313a19d29102a51eea80d1e63e1edd9e812ce29ddf488300db95b3072af7beb73e3e42233682d8a61416bbc9a48f2cb412c4e3f37c529eca924d1b131b56222e9e545db5b316d7f61d276530a29b0a8957c3c9d53bb436597b761547e89b546bdd56c7a14d6df1c545bf4626fc762fa86b7d9b6d85552ed35e6750716a35f61b34889c74f93e95324330aeb7da436f596f79d1887374d1cf0cfd5e3e398faf3166dd53abe0bd3f8d7268d2726ec2b447c622ae555e133da36632877639abed5d62ddf32e971ad477f28f2cb3d585cde4ec64f1ceb792fb2acd77d2f16cbdf603e67deca39a7d7157b37d68f507f69074fcf582905722648f4f6bcc4f93e2ccebf35c579822b65236152e7a6fb313ddf31e999e3d213964f6e9d97289d931de74875eee8012c06bfc35a5154f3bbbaf71fcfc3035a60b2394fbfe385ca831895df27e387a543f452aa446286e5b8b6294d1ec262f60753cc8e6be7f4f692cea9e680873122ef26337eebb5ade57f042ff5b47f048be97bc994568532559d146c06f3728e15e4b3bc04f1339564e22d2f3178148bc11f935f3d21c2f4923361fcb0eb6d95428f61f1fb13361f19bf4513f950965b47fda1323c7f611fd98a972753abed1fc762fd7e2af36089c62cdb63add513580cff9c4cce33134ead9d90b887d385ff0b85c492e645528a33ab582fdf11adc22cd17d0965b7d60c335a4bfc1951b543e4ba08bf8ea786c813a5ad65bb58d21d5fc2071c4ee70eccf999a43e93e95488a12ae65e325e28e5d7aaf2465beb0c49c8595d2296c2cfe0adc01af9965efc9e2816a65a6e06a8e760ec12c76933b2983d24bfc00d6571d29304e9432da67f11a93a52a56a872c318c283fec9e8a3525d6e243115a47b30d0d89210b7387497747c06a357a10127b176d91c1381f67c6976e250cd9fd650677c8d3a500dd1e4c286e1d28024ce286497373dce71b993305fb1697d925a343b64891bf526213db3d2c94edbe060ecef157d6750e06b029100845935123fc1b2542b139a4eed62e9593ab4240996c9a09b7d822b62310c01ee91a01f6774a600399f3a9db6c30861d64707d7b44c07d4409aebf019c10b893bf249c8d5ae4d58a4040dbca22d0fe416d6dd1d97331ff5da37cd6b537a36375410017ee1901f74f4a7083657bb429e96a2108f0ae0495c2c794f07a80ac5a14350213044ca78e8860fa841253378029b2502108883e1c1441f42f4a449d25a2a64095519d7a45e0fc9b12ce507e52d4dae6d7135d8e7b5fb12cf45be454b728e6d7a8a1a020001c3a3202f0534a805d4106146a8ab9bf2000caeb1701f4197509552407db239b5605a385f50e28c4ff4389a88bb4a1162ead42010a029e696323783e4f5716d38b4a8300486c07ad017d4109486c04aa5be88bd85e19eb96d666a5f042af908dce6299012b6476ace5010602228b40fc9212a2d8651fc2132360624b8ccad6cda32b02de761f08c6c4fe4b89b2972af2b5bded530d8a75b27b1d04545f82a2ff7fe9ea5c8bbe229c5ed6fdc520355c3feb1201f71575e71a82832bce0b64775bccf844d6d60701de7e300ec63a10c2eb096ad4c8a26267b97b10400d058dd71025283134bd4a66bf1dae5dbf16f2c71b65484100b6b5430458074a60b18385d10e3315012bcf6ac1987e474a70ced0b4684a2c944107b9a1f15246045a276a6b5b2427d45a64e0916df722db3036f1365c0d0f2f08e0de05e03228c1f506d934a81320c26b43c3ea4c6d657a66bc5e8a09763fe04860655d28c189c1c5620ead9025bf836d10009e2b1bb95d325cc2ddee94a93bb778a38ebbe1f4614e9fb6415e6d56f56f945bce64d184b24df3ae1d805b4d38e5f18d70c2722e9cf49470d8f3745e3845df907052adceb0cf018bb007879fb0a722309c745b26eca9020fa7549e843d75b1c39e1ab0e1a45c57c29efc35c29e7bb6269df119fa70cc7c58386e77306c9ce1081b0765c3c8746438ce6c6e189920082718450aa7347515368cb5477c44cdbe9dd9c247b45b87ffbfdd37b385fb667701417c2047fc38ed871ed4ed0761358eb7ae28d3e3ef713693d7e22e1d46c6e810fdad29dd4e3069d32daa25d13b9908a6d29ae80c5c2a7ada8433279038f301ce5e36e1cc0d24ce7280b3773a706e478142f5b7b0592c9f0e674f2a9cf7b308ce3e36e1cc0b24ce6b00cebe36e19c1d489cbf0338fbd984333f90385f0538fbdb8473662071ae013807d88433379038f7039c036dc29913489ce500e7204a9c8314ce72d5ad74afb7866b79b3e940665081fc10801c4c0972148b0c4a243b40249e6f94cf06af29bf00801d42097634832346c98f9806196e26803b9412ee6016bfdb09c5899a9e0c65172a945f0294c32851f65128f35d409db144f150f0ecf06e006f783ae0cd493fbc37a9e03d02e08da0843724411d1e9d8949fbe664d9f8af00e6489b60ce0e20ccbf0198a36c82991740987f06300fb309e6ac00c2fc00c01c6d13cc9c00c2fc13809969134cc2a90b3298ef0398636c8249d82b2783f97b0073ac4d3083d8c37917c01c4709738a8259cb1faa9547f377a9bd7da79cd07e0750212f00f398e329917797c8aba5cb8ae342b35dc20b5e57b227b0d209ed39a411bdf722a1f51da042590bac6f2225ca493119be4c0a5bccf487cc16f0ffc23a77cb41b716166fdb4452d864a5eb14007b523aec36b9aa2a8828478122204c89f230431190ec36eba468cfa7423b1258e9e4f6b5524794b3473121cad154287f09ac740a35ca02e96c5daf5c4cc586a2fa33e5c219553bde3aeeccc1abf33b019453e9d7bb89098a2df28208bc4c3695c4d5340c22939599270284d3d28170f62187f00980703a25c2012c3253a98feeaf2a077546f2310071864d8eb0a4de4764380782fa3acb269ca4ee3264380f0738b36dc249eacc4586b30ee09c49bd238203d3f912a8184b727f31920cdf182a7cfd415999438f4f9481d9e99f371f4e85ef15802fd71ee797b9016cfa0c0119392f1d28a1f7db4ade8759a216d455f197f6a6a3014486b21158e52cfa290b38d8bb85ed90e816c8657a3b94a8c5fc58c945c4ecaf10802cde0bc0cc4fc74850b35cf6dbd43a39a1d730eaa3691c7326e5a42f19da6b01dad9e9985a4bd6119bb0fc2473c33e12c09c6313cc3901843917c09c6b134c4247193298b900e6e136c12474e122833919c03cc2269884ce856430e7009847da043388eb80f201cca36c8249e8284306731c8039cf269884d364643087019847db0493d0b9900c6618c09c6f134cc21e1019ccf100660125cc4c163b7ee4cdf78db07e27f37d9b09c69416b4a7efa67bac9db014251b699f046cb5d0269884f53b194cb887e7c2748cbb8bd1cedd4c7f9d364df3e464f886007c8b28f10d03f8625d0a85b0c8f2e8203b1ebc00802e4e87ef46f621e7bbb10f205c920e84f9871cc2c301c2a5763787084735c99a439b41736859babc8b22536c7096887c728d6cd2622fb0d1e5f63859077105e51100e58a74d5e28976ad0db2e7db6c0074a54d3b1bcd0ae450c75d00e72a9b70922e4b25c37929c0b9da269cb30389f3370067914d38f30389f3bb00e71a9b70926eee4c867319c0b9d6269ca4bb1193e16c00388b6dc249ba573619ce4d00670975cb33b9af47144bd5c4f72b085b9ecba980e600a0a5e9d87d2bd7d57f4fc3b007d98ac85a006f1d25bc112cd9c5a6d12bcf09dd11dea1825a02063bd6db0895b0c74e06b518403dc646a8842e5d64508b00d40d364225ace1c9a08e06508fb5112aa1bb0219d4c100ea713642259c0a2683da0f40dd68235442670532a83d01d44d94507359ec287df4ba8d4216f9f2941391e8ef58457fe82ef281b052d9a2d5c3d58489904d950842459d089bed591d17c43d657b037b3edede5548844e6264137a3f0456bac59e0dfe48370b20b3d3d301ccad36c10ce2dec76700986536c10ce2dec74d00e6369b600671e6fe3400b3dc269841dcfbb81ac0acb0096610f73eae01302b6d8219c45d105703985536c10ce2dec74500e6769b6012ba3292c13c13c0acb6096610b75eb910c0acb1dbed36883b70ff0fe03d81126f2f85d7d9c5a656f6e21dd935945baf907d108f01703bd2bd096ff2c31e41dc7a6510184faa4d97ebed2a39a2b9c335e2b990bfd628430cb2ebed7060ab7594407bc7cde44d74e8ba53a1eb00d0ed6c4f8ffae0af741f0850d6a76359a1f8d6eaa1b3ac702dc0d760c7aeefceec5183b458675e88d432c9be30b8035438bb6cdaf694b4334966a91d01ce469b70e60412670ec0d96413cedc40e23c06e06ca6c4398ec52eec5ac4f632e1bad0c2b46b6d117fbd82896e64b104eb7cb1a0363d2dce7e54900780caaac52697f05981dc58ed1e8073b74d38493f354a86f30a80738f4d38670712e76f01cebd36e1cc0f24ceef039cfb6cc2493ab74e867339c079a24d38730389b319e03cc9269c3981c4b919e0dc4f8973248b1d5f32f7ead733c7b95688caa5edd1678488b0fe02603d395d43c825b2b1dec2251730f1e9b1f56a255d855c495719e821e4e301d003f6b8cb06d10ba40be8809e928ee961bdbd9ab3b6739becc1eb8782be2bd3366097a7a6636d673b7c21860cde5100de69f63a6e13d6eb647398b701b4a7a7c32e67a7df2ec9e03d0ce09d910e78730fa14cfd3280772625bcc92cfaabd6bb41bbb194ff8e5e2374e8b6350b417d7e167d7d5e6dd81bac84332967e54aa12ab9538318420e5e3bb307b0deb3ed75ab219cf8202b55fb023b3dc79ecd0183e8153f0558e9b976ccc59bbec04e88966cbf916381959e67d36c27a9fb2c59799a09709e6f13ce9c40e25c03705e908ee1bac419ff5068422d04582f4cc7904872a34b39815c7eb001c0bcc82698415c7eb009c0bcd82698415c80bd1ac0bcc42698415c80bd0ec0bcd42698415c803d1fc0bccc2698415c80bd0ac0bcdc269841ec6ace0330afb0096610a7de8e0630afb409661017601f09605e6513cc202ec03e0ac0bcdaa67e3ae9f41b593fbd3bc0798d4d38499b4774dfee0038afb50927a90f1d19ceed00e775e9f81ad72c76a87d8deb6a1641787d3a5671241e882b64eed570055c68a3dc26807458ee72aa61b92dc04e6fa0843c8a454f2557aa653291c531d1c500f4fb24044bb63c660e007b633a36b5d060f56722a3a78fe335a782d8329d08f0ded49e339d69dbabf60015ca3f8272f6664a946324ca65fca162094c6c19b05bbd1eb1d62dea23680be40eb53bd4fdc5fc58c9c512ee2342d616e80600df628f636d10b3fdbf00ca839428072640a9634aea273292aad6af02a5e7ad76efb844383a4ab6e3d23480f7367b9d6e0927ebc83c9cde0305c0ede92800b07a3f52001096a36405c05f00c63ba8f7045ba37af47a61c232699922db07af2eef0bc0dd990efbcb6eb5c10ad92175b61408fa4e378f038c77510f2c0b600b65c0edfaf1b3555430f300ccbbd3d1becc8ed3cd0cf698d38b00e53de918b6cb3be486edb60384f7a663444958e3225947b74825c497decb65262f627be4405d236b920da40616e4f599b300d8fbec71ee0ea263cd5280f2fe74ac3eca73f582825c77ef02f01eb0697b8059947d71b2ed016e07381fb409675e20719e07703e6413ced981c4f926c0f9b04d38f30389f35980f3119b70926e4349867311c0f9a84d3849f74d24c3b913e07ccc269ca40e5f64388f03381f4fc76ec8626dd0a1b31b7221c0f7844d1e49a45f7323c3390c4c4a3c69134ed2b519643817009c5fb309676e207136009c5fa7c4d9550aa8945b593432c7c52b78de459d41d9f81425ae49cccbf785c5305c8b1409bf232ca8a5c1e9601115ec2c00fbe974d4e33365a3e750d9ade66d80ef1be918531703c24b9818e41543c1dbe5a87a63a0877e4f06089fb1c78328884ba707808ae6594a94839898f9ae5413b78e8f1b36ff48f8d91cb22aa82bb0c96fdaebe412c46d7cae0468bf65cfd7057303b922fd2700e6b76d8219c489b39f0398cfd90433882bd2bf03603e6f13cc20ae487f0dc0fc8e4d3083b822fd3900f3bb36c10ce28af4e701cc176c8219c40500df04305fb409661057a47f1bc0fc9e4d3083d8b17c03c0fcbe4d3083b827d7af00cc97ec5ea042d827225ba032030c82bc4c3d08126f3cc9513d5ffac751ee6a4805f20400f215fab593d1209dd14c31d0b1932d97e3ee0d7167d183f845e18ea020f8813d4eaf41ec6ece00285fb5c9bb631665154566998f029c3fb409675e2071de0070fec8269cf981c4f95380f3c736e1245d764a867303c0f99a4d38499bf76438cf02387f62134ed21d8cc97056019c3fa5c4294ef46adee04dabf501987e6693d5cda21c2426b3ba3b00ced76dc29917489ce7039c3fb709e7ec40e2fc35c0f90b9b70e60712e7b700ce5fda84736620712e0638dfb00927e97c2519ce7a80f35736e124dd909c0ce74680f3cd747c0247ef5d2838b43031deeedeb1d0ede54e389649e6c5f95f80f5d7945827bab06e63b19e71c9fbd011a2266bea578071f9b7d2e1733c871d6afb787c1d58ebdbe9f0efd4d6da24ed4f14018b15bc4ae3ac5170f786cd05d6f91b7bdcb983e8f6d50ba0fcadbd5ec88493c46465e80f4001f04e3a364999e9b2d5207fdf7a1e80f73bbb1d18087deac81c1826836cff7b4abcd35c9593b3d999f3c5eb62fe5a3358c581ed1abf96d32b930a34cafbf5d42dd83154d81703ec7f48473f0bee34672a5983ddc4fa1e2824dea5c439de65c5b50cae8b335bed12f572da36389f4c857938b0daf7ecf12109a25fde4a60b17fb4f3e3b884032e641fc75d062cf44fe9fc5884284f2b5ccb140fbd81977f02ab7ddfa6bd1a4807afc9707602d6fa679b70928eb692e1cc03383fb00927e95c0019ce8d00e75f6c9a0b9845b9e2936c2ee04150767e6813cebc40e2bc0ee0fcab4d38670712e71f00cebfd984333f90387f0470fedd269ca45bae91e12c06383fb20927e9e60364380f009cffb00927e90e7664382b00ce7fa603a7ee74eee337f6c40c8d38e244eb93b493399a0ae712d0eefc383dbb84b5c38409d9c8d25bc01a3f49c76c9308b84a8de93bb277aa4782072f04e0fdabfdd773ea3a3b7833f3dd4026feb72d2083e8e2f009b0c84f6d014938d349067216b0c8cf6c0149382e4406320b80fc8f2d20095d6ec8409601909fdb029270413619c8f500e417b68024ecc99081ac0720bfb40524a1cb1719c86d00e47f6d0149384f4e06b21180fc9f2d200977552203b90b80fcca1e57d9206eeac7004ab1af0a19ca292cd6dbc8f92023743ff4eaa648d89d2473533c0e200f512217831a912df785a24d92c376e978285e238347e6422b668835bc0e94f0f4874423aedd664fa35239b826d056496175b47df3f3a9c0d601b01d29c18e8b29081c4fcec8ba0e21d0f97a70bcd236881b558641d6ef4409d9bd860e7a282fe365eba1b5e1da5680358312ab375fce20eefe391114039d2951eaa533897d394d252c215ab2127625b0d22ee9ccfc355c89f52cf20538283c6d8edc07a8b05603ac5da99b535be4f0dca133c17627c8eeddd26193de5db709b33a99ebf6226093dd29b10e31608d572105710fe56c00b3874d3083b856e30800b3a74d3083f815990900662f9b6006f12b32d301ccde36c10ce2b6be6301cc3e36c10ce27602e300ccbe36c10ce280f36100663f9b6006f12b326300ccfe36c10ce2e0dc500073804d3083388e340ac01c4809d3fbea4ac22a886cfd5a1f8073904d38730289732ec039d8269ca49fd923c35903700ea1c4a9bddc85e3c26e30a299961d3fc8f015b008bea194f80632b1537799da4d5188dac91fafe68fd7cba138f8f5e1e061cc00188751621ccd22fbd038536a5bb8ba221dcb250f31e35ec0c4de09625cb38c0b1019bc8205f963e32500ee704ab89df9c91efe877053a8a64445b6e6a71f4035221d5368a9ed3e47d8df21f3feb811a01d495d52c6abb7754c49a7cc46524d4f5482fa7a1425c64c03466f0e5e84836f640e5e5301dec3ec2d0008e782c80a809f8102603425da3112ed52699fc54ccc4856aa9abd428ad2fe493b6402083b2ee77f3be217f36325175b11c07abe3b009c998e121673a52994164bbcd5f418aa12f6ef00e398748c25c1b6a86ed8479afac16e7b0e0630c7a6c3e713c24c5c040417ec4200761c2558bd21baf0e7a86387d286e8970384e3ed713d0ce26cfa1280720225cab11e5096f03085906656c4ffd283234db4d5d238aa6ae92380782225e2612cda05b1418e2c55c7b5d920ce19ad054dfd49e918484e7e5fb9207ed8f956609f619b70e60512e7b900e7649b70ce0e24ced701ce2936e1cc0f24cea700cea936e124755f20c3391fe09c6613cedc40e23c01e09c6e13ce9c40e23c16e09c918eae66b6fced1cc5e45c0973faf3c1edad6f0508b3d2d1d54cce3f2988bec6fd41b33d3b5dd6e8743785a0bdca12d330f0f10e15c2278135ce4cc740b14058d9ba9a5ddf0efaf8d13300634e7ae78a0ef52fbc0c056873ed9d860be297342f0368f3d2517ee61c7203c71300c259e9f0999bd91e3e736473eca301befc744cb02537ee9e13c891f78300e66c9b6006b16d792f8039c72698415cc776338039d72698415cc7760b8079b84d3083b88eed1200f3089b6006711ddb4d00e69136c10ce29ce44500e65136c10ce23ab68b01cc7936c10ce24e1e4f039847db0433883b797c03c09c6fb713771077e9cc0043c405e918df9cd96aaf1572584e7f123cd86bdbbe06ac74814dd368b3284b50b269b48700ce429b70e60512e7f500e7429b70e60712e78f01ce4536e1245dec4286f3188073b14d38730389f3148073894d38491bf364382b01cea59438f5be9b39ae566890677f760078cbd2e1eb2e66cf1732b1d0bf8137d12b552bd3f170af9402cba400b8054053a0dd65c602c4cb6ddae38374ca970c6707d01f5a61134ed2413a329ce301ce9536e124f5d624c3590a70ae4ac7de1f10a7d991662d675426836994f79dde3ce562562ab84b01dcd536c3251c672283bb1cc02db2a9553a8b728e93ac557a1fa8f5d7d884332f9038af0238d7da8473762071be037016db84333f90385f02384b6cc249bac92419ce550067a94d3849774524c3d90270aeb30927a9f71219ce2d00e77a4a9c93997bedba1836a9e03c842fbc8e6764010236b15cc0ff6a9473a1a4cdfedb4344c0778296e93194c0f5e74ab1d9fae892950c24d9e74ac700cbdd600b48428b24033908803cd6169084fe7664204f02208fb30524a1172819c86900e4465b4006f1b3f7e700909b284166bb6af716747116be46ae903f51c7f5a9976722aa69aaeb2fa7aaeb8f0775fde67478e6253b1c4d38334a3618fd15b0e5e36d8249e8e6480633042c738b4d3083384df20f60995b6d8249d8ac2783f931805966134cc2861419cc7f0398db6c8249d8bc2783f92980596e134cc2962919cccf00cc0a9b6006f14b31ff01302b6d8249b86c9b0ce6e70066954d3009976d93c1fc02c0dc4e0913df647a31ff5dc39c6fc59472014270f037995e0fc0565382753e31be923f502e9d19e14aa476dba89f6c7d521780b5c69eddc082b8c94057d0c53cc1de8d8208eb7bb28d821e0056bac3ee458a84bd26b2426012b0dc5a4abc0340a5b55b564ac261dcf9b0599a96281ea08258066cb42e1df3f4b0e6c7aa2bf2fa9ecc260f033877a6a3348dcdf2c994a741dc76ad07c8eef5e9a8f3b1d9a6e83a3f883b8e4c0556da908ee67e2a753ee1783d998d5e00c0eeb2156c103f7d763600db682bd8207e54f26800b6c956b084ad5332b03301d8665bc112ce3c91819d0ec0b6d80a36880dac1100ec6e5bc1128eae92813d1580dd632b58c2390032b0bb01d8bdb6820de2c8d53a00769fad6009475bc9c09602b0275282d51b5fcf62edb0f13519be3d00df49f68c0104713bc21500e57e9bd6e0936e574436d137028c4e9d6c134ed2fd75c870ae9038bb64b8842f8e115e28232ba25bce225bb7cc604b98f04d76367729e7e72b65f5d2ccb672fbdac8ff794b83cdfc9fe97a48eecfb388ed650df2aa90572165d7f1bb42b326962d96541d1026d145994458162f059c79337f467c5d5984be8f9530676b9a22fe5b4f87b7482461b95162e493d62204f191eb6ad628631cbd754d38d45572723e1823e225008695aefa2332cb54c156c3e35c263569e4cf7492e13826140ef502677ac66399ac969ba4569df9fd3dac52caa8e63244928542fd542a090d57c9d895f15895c96369ab9cac29fcb1503effe554f9335a2bfb19cac7bc4e9de9eb89658a348a2fed1491102173deac6d33eb4a1423274388f7abe49c7ca594ba2c614c13c70fb7d49e7152254b8c081fd2f13f55a4bb4a7669a643423df85feb78ca57a8cd348af8c31552a92b8fedc032fe1ffab0a064fc350300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/a37533707706cdc4ba5293865ef9c38c.asset.meta b/Assets/SerializedUdonPrograms/a37533707706cdc4ba5293865ef9c38c.asset.meta new file mode 100644 index 0000000..087a37b --- /dev/null +++ b/Assets/SerializedUdonPrograms/a37533707706cdc4ba5293865ef9c38c.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d4865fb6c8bcfcd4d8334791874c2269 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/a3b924aa5d416d94c86ddd019ccb8441.asset b/Assets/SerializedUdonPrograms/a3b924aa5d416d94c86ddd019ccb8441.asset index ec5b5fc..be8821b 100644 --- a/Assets/SerializedUdonPrograms/a3b924aa5d416d94c86ddd019ccb8441.asset +++ b/Assets/SerializedUdonPrograms/a3b924aa5d416d94c86ddd019ccb8441.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5c59731b45109e95b53a6cc9576ccb244e702010411249760eae10f045303847f9aaa25254a238b2a3201f48cac55b9ea8e2297f84375e78a7f805fc00fe0974f7ce4ab3bb33bb5a49632c13a9b4ab9da3a7fbeb9eee9e19d9913c839771112e9b6c952db01cdb608fd83edb836f0b70df85b7f56497df6555b8efc0b5087517d974404f7c9d3726e1ba0c4f3556879e4fd916dccb54bfc64af07d19fa96e0094bb7e153825646143a6db0457687dd6619633c80c42675aaf13203e53212709d672fa1b6444ce12079aacac0650d6a6a54b70b4cdbedeeb1ef49ac5da8db823e5556019a0f8962e237b81a2413dd4c7eefe377e438069f21fe1c814f12fbf1ef629f04bfc7f86758783678bfa40f1d3fda6e7e465ae893e26d478567e86facf0e77e7e4ff3762784676c3765d1321679f9206f37263cdb74b07c9cb77fe0c35bd425c744807c03fc3923a3691a64515f838e8bec80e569900f4298bedd33d8e891742c62d909583f0e5b07f33a000212cbdb20bbaeb3cb6c566a796f192981ef05ba16a14599884e7a87f8dd3304325781774998363528bf49b30e274e196a726c05eed8eb019b818970cf45651386adc0d42bb175b81e10bd07c0b6b765904838c5dc7d5681a6e50176a1c406f4009e2bc4e11a5d9f11a725e27e19caeae48ff6c023cdc3fd058de695bd0adf6563ae73c8e43cca1d81aadc7237b69a16411ae43e4fb6fa4623ff854610fad8249f86d13c79935f3c9a7883a1e56430102c731a330499e1289b65798a15ab1e04c3cbe895506edf16ded7d8155f59e4c8a0ba4f91044d0dfffad7d89faffe7efdb3e914ed32cb53d89d0a10cd0f58a49735263c14fc4530cd68011975c36fc8e08f63e1da21c26fb52b53bbf00a885164722ac0c08cd30e9a6bec31545481d51c5b02268ac4768533b941225528cc9579d92d68630d540565601eba43edef00334fb82ff5e8b6808cc4493ddee01b24a24a411199821287ada0608fe4a7a04443aea682f0254730a94030880715827d320429e37da215c10d28b352a725aa2d53bcc5c85b24eaa22da13caaf6368ab76861f19438f1c71b53df4b2ebce5580f10d6399a2bfab85569262ad30ce5ffeb8768db58b74f548ad036bc7563d27cc16ddd72b8d304f7a447b8601654109a12080b38df062573ee1f7899491763381314c46332e2a89f21a9c86eca6935e5b84cf3688cb44cd3a7797b39b50679f3b750875ebe44b91996df058a45181be9cdd108cd2598b387bf450cb73cff46c820ce098bc34e3953194a42a64b447c54c6ac5b95236a552665aa4c1d768072bba77053f844cb0a1b5304a7a0f1556ae997a18713c77875281321682f42e6feed71f7c9e52347f6627415eedbc405962317c17b18fe9a196fe0d3d44c9eb6789658eb3b2afaa5c07cbc1fa79329b79b0cd9cdd1e259659303325781363929514681020d7c2224e74992735a2aa7fd6d1eba6142fe8cb6239e02cf325e4dd3e385326a2f945285aa539d86aab48af254a79407552ef974872e7948461843ee192659295d65aaec4f668239761fde3b0cb7c2efd3f6203aa467f08ceea7024688f5e2647626371e39e26a39865572bc2d93e34ac3e89c115115419d92e0ee97b8eaeb9e14232a29a665525c6f431bd6c1c49ca00b7feeddb59b505786691746aa519554676552cd2a74739b387f4ecefe07be3a76ea65599b5e4ea824784726c162680990f33b50b3d7e0bb75bd764fca319594efcaa4bcd1b69e56a06e8b0889330d5b84999361241b5749764e26d977a125b3669553836164e944dfedccc809151eefa934adb6300b817d90c3920277cf5e12563bf0dd3e4708e765dab7e18c4ab2f76592ad34346da71262d263ed21a196b6297a61a2bcdc68b944de135bac92664adc9f56392258fa230d835259097799862eb39f7c90f1d7671cde8681917f89c646acef520f7caab13c05f48234a992278f38f62ed817e2bd0e7c3d24dc8353c2f34c7da0b8cdba75b61424854c4739414ba274ad2f30bce768712e914d0b90a694e3b8499a45ad46b95623794a482eb4694dc15ce05177ac4f6e43e1f7c52d02b7b9cf343068dfa7619a8eb906ab89325f03352767e0c8414bf64b44c03e8ae9c2e93a9adb1c40f6885669357863ca1a372305d4c8873a614b126ce586b559797b2f40f48700d1059d10c50822ec8ec1ae37c061023817758233da98768b34b42aeef50268af09b4b8e922fe55d79c7e7b679bdef0344409c10bdaefa912bd47ee7045abb0a3c6f92531dc643d132b1bc289675bb6bcacc2c735732b794e54409473fff3b4a780690f9e98c786ec2c817c4a41a74f99267dd91adb834661d75705374f9dfcae22e9f03c23ad08dc8ef719145cf68c4e78d31c5e1c789bc0b569e342441b70a62ee0c45837ab1338dc316ec537399fb05def59635c00f5b24e5027b8356e716f59772d9045e6b54eeca42e284d01ca2b3aa14c1135f96f92b4c136a00bb63e01b6ab3a613b2b0937c8449d4ea0f6d837fc87b4c7cd2e2302c0d774023ca40c387bbc8936f0e2bac03304f03e3aac686d5b64734f531b7063ba804b0ac07dacdbea30cd16bde012599c95df6b4c75d2bac08b0ae07da213bc33dceaea94e0d4421e5968f486dac24dbf00eda73aa1cd48c28ddf59894630b5d9694a00f3b3a304e64c0f829916c0bcae13ccd39e49ef3c2d53ff4c47ab959ed405ec8000ece73a8145095a5938e231ea73a155ef2d1b1302a43774423ac56db5c0cfa383c16d2651bde702e8ef478ec7ce7401f76dbf40d330b869647d17aed636ed0897147fc1788b945804ca45ba37b76cf3f4cb1d5ccb8439c0f4a719bc9ffaa5288c4b4395ae69a81b7bc432493bd92f4ef968254fbf2f3acef2cf897a8fe4e95747335db0bd608ee65998bfeed6bd6e3a7a3ab6fe45c401b544363bb1715c1738e9597f0a989f389af6dd3dd9179cf69d69d7bec373b4a8d3be2d6a5686eba27db305e9e47a70cbdc6c7540f6d03c8eb466fb63867f04178cc469da1f57539b83a71d92b54c547799fd8a9bf63b43879c1bd0d7f230185fabf49f48aad4d2fc179c15e1bc85450000 serializedProgramBytesString: - serializedSignature: 5a1852a01b30732e8a35d92764987e7171ad799563bc7fad1e9d88b3fa561e2bb0bd50382f8d4fb2bceb528064cf4c24923962e50a4089302e841563d7db0407 + serializedSignature: 7279b3186f835eacfca058c5be75e4cf307d2e08e83e535474a61acc26aa37d977d3d0ef51621382f64a0db2184bdedebf43dae1f450c127593ac4eb09c69e0a programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/a54c136b1f25e1c438fe6538084ab6de.asset b/Assets/SerializedUdonPrograms/a54c136b1f25e1c438fe6538084ab6de.asset new file mode 100644 index 0000000..3ca25cb --- /dev/null +++ b/Assets/SerializedUdonPrograms/a54c136b1f25e1c438fe6538084ab6de.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: a54c136b1f25e1c438fe6538084ab6de + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e7aeb86b71081e3406414a5b5c8aa504a8d01602099012204d8255a9bb53f796babbbbb7d4ddddbdbf7a69fbeecccee49edd9be7eef6f69ecd2cef9f7ecab2b7bbcf3cf39d67fc9999680eb3fe44065b7fcd6773d8043694cd63a56c355b65fd6b82755d69fd67dfa9df8b5895755d66fd5d623d1bccb2927cc9fff48f74b4fe9e66dd55b31aebcb356c89752d17cf8b5999f5ef69d6b765d61dff75a9f57f99f556a49ef5d13c3691cd66b3588748fb2422e68b8faae56f111eaf4823ebeff16c83f5b44c28c503c9118f3a587f155b4faac5b39596d2eabd056c6f11ad95d6b325d63755acc292b958486c74cc3426fec1ec4b7779ed21afddacff1bcb7f6f27ffdd48fe1bbe5f5f5eb3527cbf27f8ae31f83727747182ef7bd9d7c80aebda80b1e88ee09e7ffbad7cafb72d2fba3c81acbef2da4f5efb4b993ba5a07f4379cd4e12df4432060059a9306b24af83e475a0d477e734c31f62338a9c0fe4719615409f4120ecc6e039ff6db08fb8ab745ce94ac795763a46cf96e9f7a97c7fa8bce6ca6b8e946dbdd3b999fc2d4f5efb24d12bdffe8e8d64319bb5c2dcae52de17c8eb30791d2e755b2d751d0beefdeaa2d2b450ca5c25c318a7f95dbdcf9f8f97f723e455c545a5d728f9de04793f3a457d52b13fa553a50c6322b8b738d65b9440964af7fd5ce9be9ffcf6149b63bdbb5cf101f6a795bb8394372985788cb1c31871a0bcdfd1be1fb249deabfcdf0584d9455edb27d1438521f364a44aea3519dc5bf1ac7fb6c7f8d593df292e6359f2f24de9a26c45d9d404566baf23de95bf4db4ef9bd6c8fb4976780db2ecdf1bac97bfcb78b0a9f23a4dc6eb60e6cc1b07cbe753626175fd03d735522dbf9f02ee79f817cbf06f4b10cf36f2ba8bfcb646ca9a0aeef9754d8cb1f837bfae95ef4e03f756b80d3bdae1361cec21dcf5ae7025b3c80610ee06f9cd74f9ee2eaedf67c8fb035cb20e90d7fde5efd3c13dbfae03f6a3f49a25af33e537335ccf67836f75cf8b9c3ad6febeabfcee20978e07c9eb8120be07da3c1b2db779363a41ca9823afc5deeca4d6a6e731adbd367a5186a364a872782e4b9cbf54b9740873964b87d8721b67db721b17c9f7e7dbf7916c799f0de4f0ef67bae46e74c9dd28e55e2cdf53e573323d7793d73de4752f795d10e337e247f9dbeef2baa70cf350e6cca38726609f2ab74469b4377396517d64b8872591a9bedf475e1ba7f8be7a67a10f9d17c96b9314c36c22af253ec26c6adb42d3eb5cb6302989ccc536dfa6b940074b4e33d5165822afa5f25a26f91fe9b2832353b08364ba2cb5bf6b721f4803aecb1679bf4c5e973b75b1fa214e9d66654ea7c8e152e66c70cfaf47c8df8bc0bda56bf3667638cd374a99fbcaeb0a97ce15743ab395f6772d9f02b691ca7789ec6b958cdfb7b6ec16ade4efaafdaa745b14d39b075bfbadd22395fcb09f6471b48bf1d1b60e2d14db2ad77bbb827b7e3d2a169ef837ff56d9562ff03bff760eb8e7cf2b53d4b586c5db2c97732c08fb583bec96b2fc6fa9eac8352c3eefe9bee5d763c06fc74879aafdb796c5d763ea3d1eb76270cf9f57a718b7751afd78b85b137cabda78aafcd927660f4d54bd2ddb2991e398336f1d279f0f887d53db4fdcdfbe6fa374516d99e30197e36dfd5aa9fe9e6a9b6f64fa7af660c0418573482cecde63e56f07e161b5ce92ef1cea8af7aa989ce6afdad7d6aa1c3b8c39f38cfb5dfe9b2c6798b465a6d81c1b7b77b462ad6c56a66fe404e6289bd991e0777e3d513e9f0beef97b47c46477559c8f77e9aa4b4f7555715fc4e2cb80447676a2fdee2855e79c64b36db3bb4cf38d2e1d0e6089edb7b58cd749cc597e28b937d972dbcab6043b595e4f91d753e5f534f9dd05cc59465f209f272aa393e928dbc191935d3a9e6cebd876aed45195e1a7233a6ea2d7919d21659ec29c6d75a94be4d4989c88d42b729a2b5ea7d9f16a37d8d6a5dd5552f699f27a963e5eb561abf8cdcb60fcdac9ab1a8b389d39c7224eb7756e2fef992a6fcf91d7735dba8d25d0ad93943d5fdeab7a6b1373f60536495d2f96ef9d277f3f23a6437b55b6b8fb9c67bad2f54cd7b7ba6fce60fafe9e7a7e964ba64cdfc8d91a992a8dcf717d233947ce05f62599b3f3813c9d1ea3e5efbb21619de70a4bf13a1f84753e224b9573c9d230519977919d26b5e3612add2e91d705407637a9cf85b1b4aced9f5d089ef17bd94f63aef220a12e97ca6bf324f1e90edee3d7cb7cc43fd1b306f27a858cdb45cc992ff9bd65eb1d8f4820eb4a9b53f7c7e4fd55f6379d54b972b5fdbcc387f2fe1a10271ec6c531d61d543d71ad7c760988b7cceb914bc16f97cbdf009f884adfebc077c06e6b9f5f0f64e89edf0074d03dbf91c5c65b2cdd3b293bb9c915970b9853d74b99a34dc06e8e8f6be45257d86a6c2095b4bc457ebbd995969bed74e95c9440d6adfab4ecb248dedfe64acbdb5d6979b9262def90cfae00e996237fbb5293be57010e9219bb13494bf5fc2e2057f7fc6ea083eef93dceb4eca2fa18f7226909f58769795f7c5cc53b306c351694282d1f90d7fbe55557bf3d28af79cc59662692fb90bc1e91406e2f97dc3d5390fb88bc3e9c40eea388bee984a76c5db527ae664e5be7f796dd761b9340d6634c6bebdd55fdf63873dafa13cc69ebd7b0785b7f523ebb3696fe4c8d915fc7e26dfd7a6027aa5c7c0abc036d553d7f1ac8d53d7f06e8a07bfe2c73d87a77d53edcc2f4b60ef587b6fe5c7c5c23d7b9c25e90425a3eefe2acf8dec09cedda1becf4e9a1f4536d03505e68c379c1963f468d65bd28e5a9f27b2f70cfaf37b9c2bd49867ba02d274bf5759bc9df37c9df15979764789be5fdcbf2bdfb5cefbd62dfefa8c6125e73f17fdd652bb7c4ecad362eaf8267306eb732679be40df9fb6d20ad6e05bfc1b452ede6645cdf94d7b75cfc6e96f2f606f7fcbd7762faefa8caebb7e5f5d2d8b30e37b9d2b719d0e35dbdad085d419a796e23a938bf9724ce5ecaa4db99b34cbaddb6839e2f2690f5917ce79704ef7c22af6aece56329ff0ee61c6b90f52efb4cdedfe97aaeead48763ecbb1e03f450b2f937fb24d047c5ff0b79fd525e3f97e1dcc59c7d3695f65ee790289ec979cfc8dd4efb11f7563af4566300ca160f4a621f5fc9ebd7f27a8894a7da1763c13dc6202fc5b012c42b721f738ef7a9f6cc37f2fe5ef95c8da13ee07a5fb53fa47f4ee47ed7fb0fb9de7f48beff9dbc7fd0f93efb1ec8e1f73fc4e22674e1bffd087e536d9b9f627cfac97e7ae46167d8ec67e6ecdfa93edc23f2bd45e03bc8403d2f91f78fbae2f498bc5f0ceef9f571975cd5aef9d6f55cc97dc2a5efffe4f53779fd3516c7b159e01bc093fde29499d0a67f90329e94df2c01f7964df74b5446aa6f651b24f2b494510aeeb98c63649a9c8fcb8a3ce3e2f714f89d5f553ba40cdc73d93f26d04f3e8b6c71c56d8bfd6dff44f3ffea5bd56e79de15b7e7a58c523b6efdd72790f5bbbcaa3cabd250d92c97f7a2265d55d92fcbf7c80b5287a5e0ded2215bcdf9fcc9f4b6fd9cebfb65ceef077495efff25af7fbb747b8939c7adff91d77f719b64ffb9747f39f64ead7e5b5dfabdecd2fb15e61c5b7c09fcceafaf32671da5da374c5e5f733d7f4dcad7f97425ca23dbcbef232cfd32360a64a5309613a96feb37408ebd0bef52a503bf6e27e396828f50e475e6f4bf79dd4ef78109ec3ff20673966fb24d583bcef9a67c5e0eeeb94c39ef36f098047ab5765e236fc598441a30a75f8a7a47fa6446de61cef1c177e4f56df9fbbee09e5fdf95bfaf00f75caeb4f9c87bf27905b8b7e231682aaebff0d3b5e2587804d3c7e77d0ff1f9d0159f0fe5f503577c3e90dfb795f71fc9e72bc1bd8a17886f42bb68cab47e3643649e887ce2b29b4fece783659f2622e7d487aab25a8e3f46947f85f56cb02af3dc8c3ef5c0e8731723d556fcccc5e833107e12069116f29992d9525e551b762cb8e7ef69da5e9156aef8a6532eb4d6a7c1d0b108b72f01b736083765235fbbb8c97666e42bf9fb7470cfbfdf29713c226aee43c96b2faf5fb898a9b67d0266c9c24ac86c7b3db39c8d08b36f3d30fbdec54cb545bf7331536dad0e2c66fbfcb9f2a9d0f1ebe0e4c794ac6f5cfcbe49c1e692cd0924e2d751deab38ff20c35f0deef9f547e6cc475dc1efb0ac4910e7da30bbe9d32c77b3fd7b9e8a97aa73157fb95621f2ab8bd1af3823d5278a744acc2892259f49ffdf482f60279de5b537f84dbd07fcac238a49df981e6355f9d8535e7f02efab36553f79fd9939eb9f9f6d2ef9729e3fd2df96992bdb4cca572232c0250fe393c07f3d299f81ae30a2315903541c958fb3623344c370a886610e8b67980b7e93fd9e485e2ccc09edc06fea1df57ebeebbb82d877c3a5ef7f64987d5fa07457beffbf00396a2ca50360333a355e09ed5fa5f76f202c39f623e692f9fdc898ce93557acb350091df41d88aeb1fe03795a7d578d29fd21e2ac13d7f2ed32bf2977cbe1fb8b7ec6ef860974eaadcf95bbe5fe50c2fb255fe5e0dde53bff3eb3ff2b9f2d3fe0dfcaeee41191219e50a7734e025fb51911d40bc557cc700769bc0b72e4eb51c749cb86d6c75e939dc479aefe8217dff053aaa350a2a9d7706cf649f2b3256c3605c4cfe948de05b25abb1539f5af90592c11ac496fe93cfc7b974f80fbccf9faf4dce841721b05f21eef973d9af884698a35f21ee2dbb2c94f30d2394ddc9750f9109f2fb44f540e3c4691891eb23545f2a3249ea20fdf56af37f123909fb90aacf2b9946a3cc31de2beead788e78c8f95ed2b52389c62de5187d54f5158bc0bd15d6c82c3bde23555d3b597eb767125e535df2eb49f9ebc03d7f7e6c2c4d944f5c649abcce70ca708c89c8be63b47eecfbb159f2991a4f981e7b365596599129e03b7eafda787bb2e43e1789f2f14ca69dfb1bb5d1691fc23f2e11b7594c3bd733ea298f726633c75c506457e6980b8aa8313b3517247d68a3aa9fa57cd1a4ff6914ac518c3600bfe9e67992e8a6fded5829b391cb0e1bd9f11f7d95b411351fa5ecf098241ce47b51982f5558a04f1691e33f51e0e71c6d027ee3d76652b7f5e0ded26dcc60975cd5cedf00c2e6d716f2f7fdc13dff4ed6b7d196f2f9ce2e79ad814e2ded30779073659179ae305ab1d87896c56b0735863c193c6f0cf454bf2919703ef65870e5bf1f20d3e0536798c9d2409b2eca27ee45efdf4655ff6c36b8e7d7b62edb692bd3e7535bef1ddd6b335f4e1cb6921b917e05d176cc310711556dcddd813cfefc405ca6369cf6aef8b477862be4271bab57635cd21724da417e7310b8e75730b618917e11d18ec026e4386654f92eaa757cca46411b21da19bccbaf5d98b3beea62f3dff953976cf59dea1b1e02eeb95eaacee8269f6f64ce3cda1de8d00dfcc6af3de43787827b4b879dbeb46d60e7fb90b0b298a34f2fee61983de5f3c3c03d8f5ba5f3fda85aff7538b8578ca19c235c725c7a45419f52fc9ba7c1db49ec5572ad6d3f7466b1369915f79d541d38373579dadf649f31227d1ca27d5cdc94afc12fde6547d4b8715f29abaf947d24b8b7588d93ec227b3b6d53f895f2f78f723d576dd47df4cf236a0e7211f2bdf27f2b713d5fec7c2f3a403e3fda752fdb2a1135b7d433319b884cef886419ede7e2d0cfe6305ead0950ebbb300eea39c641cd57290e65c8f78ac3528443698639f475da4554edcf70ac938fe215cd763e17efabdf5578e079ca7639445ee5784b54edbb7024b8b7d263a21a8f516bddb0f450cfb1f450736f985daaef93d9a57c2faa7c188f76ddabf450e30e6a1c85cb56fda2247b3c44e4be0c11e9bf181de46233c8663349f98ca9b9288c8d7a8eb151fd2fcc56d5f7c96c7579806ca4fd4407bbec57f97c2abb1ae2b2dfc1e0777e1dca9ce320f5c0ef4a47fe5c31189d9a9e5addd59ca2aaff72a5ece3c0bd15fe645597a831a3112c367e51e192358239db14a9eab283338ca88ae7f1e09eebf2ad4b17302e9448ae1a038ae633e718c618e77b5135067202785ffdceafc398633c2d3a4c130ef85eabd358575c87bbe23adc8eeb94379defc1f11fad5cb51f858c5bb4d019d768a1337cf17e325de5dc4454a5eb12706fe938558da1cabe87e86b27d251cd75c8719d889cb38b8e94f24f04f7fcaaf6383918dc43768af7cee0ded26bda0c979c1d5c7294bda976d41857ba8e04bfab78f1e727d9763f6d912b3e49e2edfcad7e44e4eba9ac8c95b04a96239c02780d9aea7656eacbe41b5989f12531bac6f88e563cd81ab6c1fab44cb79bd43cb157550d2b60f9dadda43a89b95e15fa04f17789f546b9107a72342e88bbe382e0ca5558ff9581adb0aaaddfa7889db4f86658e5d693a16c8675e55f2db28ae205d67f4e29f3ad602bd81aeb6eaef577a590b7c8523bfecd6451e2db66b9bf9963c9b477f55a69fda280565af71542c362f1f75aa16999d07e9af55b8dd8636c155bc6c65bd7f522b4f8b85759ffd685395722d3eba8dfdc0bfbddde424c25d3442b365cfb1c618bff972275912262e8f564990febe5885afdb8b894f83f867621c3076ea74919790259c4f15b3ecb1163bb73e2087a8f637c0cf5f66df32e64c312c6454f862777171183580af73b376f97dffafffe667d67d40a588e187aed9a246a89c07279d9c23bc24b14ead7af97cb1575e38fe8f00b979ce200f1dbef958bf7bc27400351f939134034a5e75aa55a11a83ce709e52b846aeec870d1ab444938c952b352968c2be50e905cec5036cbfa17af182bc46e90fcf7b8f4cde5ca341449145f01278b269648515d2289b9a6b9759247b0ed28132753a3da58c4922947b4aa3a2630662c2cd1dc8aca3697ca6ef7dd3e7bd5dc53bffeb4be3e5d9a88744927342c65b6d3a54c93a0b34ff2fa2251ba34ad8d572c5df81f3dc366886d27d30123584f47b069d0b6cd9fad16524aac77bd33e4133183dc45901e600bc40893ab8021acaf4198cb11b6d468c5ea377669c515422437d0254eb3baa99cd3336e3e33d6c185a03e6adcad13d6ad5e4dbba18e9e98b25b444a4ff5198badcec174eb5989f57e996880f2df8b2c892556d85cde381142ac9fe9fc2231593eb736c44d564bb5ada0da07f480fd6a86116fa4219ecbedb59dc60c4419e7ce0cadf1ccd018cb66edfd66b32698e4edfd4a6e8a49eee05772334c7247bf929bebb28d9869df2b906c131b6a51ff1a6f7dbbdc8acc5ad17f5e637daf1b9a499c5d3aa59c5d3a8bec92c5740346de34c2b2490b5ddaf11fbbe89474275d673ce95a6282bbfa14dc0ab3b66e7eadad35a672779f2ab7c104f7f029b8ad2e7f08f2c176d9ec7e0c97e3bd5ae6d6dd23ae3c1e3b569f237a32ac3f955807ccfedb61d5442f4d3531c66335d15e973cad824e9e89a258589c66f2f0f9d89e9aea92ffd127511f248992e98125d1f6ba24e214fb2652cd9d4c7df064ea8005d02f430174c48cacbfc6c8b4c2131859279d9189a26c5e1d19597a6302d9b5f1006302a2e4ec94d094b0d0f8344b239ebd1b31f3ff20a314dc19213bcdf863d9493816e98c91cfb4f935c62e3ae13c2bf169eb4c64a5ae580043f4017cf8df7f3f3ce925806e189ea119c0d35d279c37f97358fcc0cb7fd69f38e1cd70e13d30cd73359a6f1d1ff5a479964e386f75f1c1555fadae9e98e47cbf927b6924e78826d3a171398ab6f7a09fdc9d22ce282a63b3addcba2fb367e554b8abc58c1cd748cdeecdb1ae4b8516656274ba2c8549e1c4256e01d394b8a2413489a53e454d1f0bee7a1115e5e170511ef29c38cffadd9e8c9e2452a05c843454ab0d0f017b5fb198c9f8f14b6b446ad7474ae34211ba596cb052be3756d28cd094346fea8ab104254d1f2ccb8ef49b65fbea24f32c3b4a63abb9dc56b91f4813d1458a0ba7100fa79fae6810cdf5fdebb468b04717b9bca5c2dfc296378bf113c4d609535d6119f05a693873ad77aaac30caa491fb290cb89f4c3717e088aaa0b5d9618cc80e3ba5901d2863856580fe3a4be2c3b07c915edc14216fa1cf614596e485221bee277ee694ecd42d17af96b3fdadab729d88b3b786b8bd65ebb4e1a35b1c5fd21180b6b8e00198e09d7d0a1e88e5f1b17ef3f8209d645eda70f735bf2dacc198dae3fdaa3d042b5127684ad4ad116f25ea504cf8448df0fba2de84e7605961522a3692c0aa7331c1937579acaf60c567b4b2acff575b5ff04e4b89c8fd59a2328c950659565e2fb7fec52becc1e0fdd5d61bb6ab92173df330a398e2d728f2b1749baa49b75f3ca65b01267c9a46f8d4edbc091f86a5dd2ebab4e304955bc47259b7394bc32ce1349625fc04d7889999529172d5225db3d80196b51c645d6bacb7b3443d50219e65890335ab4459eb254d8763fa4fd7e9df04e85f0434f4126221566ecdd0945b118fe5d6089d705e3ccf6448c3872feaf4def01989619badc3d64d1412eb45cb758d78bf581840596d5bb9344315e4288d5e3962e46f15abcb0619ef2d70afca6af1ef581385871df3def1d3f0e20b1cdd0d2ff547dff0e2cb7fb3c5061841688f35b0466385ea1c4da11af152a8ee80e585622c2fcc4d2b2f8cc1cad779bac2bb9eb7f275474cf87c8df07af5bd09df49279c8f82f155a6991866db59971dc53879659d6647bcb0992364f342c97f5f88afd1ddce3d302206f187a590e932a5e320b11f5ab5384bda2657cdeb19ee7bb0181c1a6dc31709ac2f2ef610c545909a6345c6582c4feca9c9137779cc13e374262b2647aaead464270a094198ed029dd98ae1fec214123f937af610eb12aa457d532aeb1bbb20ea213621ac122d8a32eb775e27c1e783c44667bc293959f05e29c8f3f895882101ccc8f712461e743c31431f8f19fade1a43ffc3a3a14fd009e786be8f26fd733b0be884c9e1d67c2f5cf3891896851a2c8d1a78c33249279cc76e11f3d9c99b8ca95da251bbd4a3da5374c21b32fb40503f9df3a99860beb22faea5cf5b5176176db465f5b36477bb5c8e9ac7728ad74ed3344c8b529d16bc8334db0a33711ef512fe2e58f865baf09b89f0f91083c6bfdf43a8d3b1509762ecf91aac1aab0e2b65fb8ace698d203dc38aef12f1a2ca945eb4988169b14ca74537910f175a36b030656df8fb55e25d2f7acdd4e9c5dbf7cb19d2bee78b48bdb7ef6761f1df17b33d1e9f3cebff2520ddf96f9562988acfe57889e76c2cfc15baf0b707e1eb0be4f43529c234a9d069d2025802b78152d790b8979077c5425ea90bb90308399106e9d9dd1cac1c5fa529c74f68e4ad1c2fc622ba5a17513e573fd9ba2d9783286a5cac4444364b442e165df5b45a364bbd8e7fced5e9c6ab46de99f35535cec390eea7417a9747a4f331e1551ae1231b7b13be1b26bc5a23bc51136fc277c78ca146670cbc1fae864797b806c817b33230ec5d2a7ed960fd5d515b166789f5a3ca59de8b59ec812158a341b0c523df3d31047cd3483fed9a053ac1dc44d7a522388133ed5e3ac1bc5a5acf906a89ef09e7bd5ada1bc3bebf06fb5e1e2d6f1f2cab1fe037ab2fc4241fe857f2224cf2417e259760920ff62b79319688876812f1bea6de127109267ca34678ab66de84976219f3505dd9d497f179d9d800943d6a1c9bce29b19ab435a2e4c9b272b6dd562f754c0b2d05d59c977c5e86e979984e4f7bbb0abe248877504bc4d4210f71b6d5d8f212ea520cfde11af4533da25f86093f42237cb347e1cb315e47ea78754c92aea5622549ecd73ceb572f1ccb316d8ed269c36f63e9e6259c7d31a4476b90eededc1bd21558248ed145a20d7377a1b384b74b8d6cc6a783b102d3e0589d06bc648b75d28ad26c16acc4901ea7417a8a47a4abb012f978bf25f26a4ced137485660b6f6a57626a9fe857edfd749279abe32486b43af8c9f4de5b1d555838a760e19c9a5638d518a9d3fc92aac112f8744d026ff598c06b30e19b34c247b6f4267c2d26fc0c8df08d1e85afc3849fa911fea647e1eb31e167698467b5f2267c0326fc6c8df0b91e85ef8f093f4723bcd4a3f00330233fd7af911f88a97d9e46ed173daa7d10a6f6f97ed53e582339472c060972a59bdbe9dbdb0224be7b7a6acb722f64fa156ec9c2c7a68b0ed1a50bafa12fd2a9e4a12adf8859d3c51a6bbad8a3351d8a09bf4423bc636b6fc20fc3845faa113ed1a3f0c331e19769846ff128fc082c3137fb4ccc2331c197334d5b70b0b0ced5228ff1e67c99d8c86895f8d72ab1935f99f0d72b918b70d58093f2d7e3db926549ebad92365d6159fb50eb572f5a1f85697d854e6b3e09c1277f62ed66bb2b69774374cb29b2587fd9eaeeef49afa3311bb8526303951e6de0182cd257f9b4816375e5ac5813574e5ace62cb67e68ac908be8de05261292b3d2fb6495c265f9d72997c8d2893b993369dae58f97d9c2eb979dbfa5a86b4adafb3fe6fc255f6d4b63e1eb3d9eb3536fba3479b3d01137e834678bb36de849f8809bf51237cac47e127e984f3660d3f2bde57b3e6644ced9b356a6ff5a8f6293ae13cefdfa22b19b9775f6c74c11e497097da5e4a9253b1d06fc5422f1661f07a619ca847e63b86fbbc9563a761a1dfa60b9d135793a0c5ccdee46489c7104fc792f2764d525edcd65b526ec2a273872e3a0d24cc74a6f2cec042ba5317127f607b32a4e33f702686ec2e0db28dedbc213b0b8bc8ddba8838dd536ceb1f6a5df37de682b3b128dea38962d7f6dea2780e16c57b136770de715823277eedf9bf9dd88ed6df799ea2762e16fa7dbad0f9e0e50439abb8c26a602db5feb371168b4697bd476db5270dced369c0abc5fb19522d3ec0d219723a1f8be983ba9836aecd13e97af75c8085f710f3d7babb1013fc30562a2ea835193b4fecedb1757e1166ff8f68ec7f58076ff67f3126fc518df00a8fc22fc18ceb31ccb81e4fcbb82ed585c39b0c4fa492d809a69b2fc3043fe953f066cc8a9ef2699e9763829ff629f80a9d609ef6cfb0f895555c80979555576256f8acc60a3775f4668557e984f3a6273fbed257d3f36a4cede7346adfe651ed6b30e1cf6b84bfe951f8b53ae13c67be80e5cc17d3ca99d761e6f812435a10cabd8e5773cb5891e8dff1d587eb7db8d65d8f69f1b24e8bb6b55a70d7b695cc9e7cb57da9d3d7e1064c8757743ab4913a140847c7d5726dfe7ae6c7d5f1464c8357751a340269c1f706e0fd712fa1dd8499ef6b1af3dddcc99bf9de8c99efeb98f9be9196f9de82157a6f6a0abded3c167ab76284ded2105ad4d91ba1db30e16f6b846ff428fc764cf83bbab4f528fc0e2c6ddfc5d2f6bdb4d2f64e2c3bbc9fa868cacf70d17417a6c507898ba6bc0c164d77633a7c98a8681a96c1a2e91e4c838f92154dbb89f0bcad37b81733df8f35e65bd9c59bf9de8799ef2798f97e9a96f9de8f21fb8cf96be83d80d1f95c4367ab473a0f6274bec0e87c99169d87b0487ca589c4dcaede22f13086fe6b9fe81fc1b4fe46a3f5751eb57e1443ff2d86febbb4d03f8645e27b4d246674f31689c731e13f6884577814fe0426fc478df0533c0a7f12c3ff1386ffe7b4f03f8519e7ff58826aad20c3d5dad39816bfe8b488556bf919acd69ec174f855a783aad68667b05a7b16d3e0379d068d59ac5a9b246674577b1c78de8219f0ef1a03deabbb37037e0e33e03f3003fe332d037e1e8bc45f9a48bcea31122f60c2ffd6081fd6c39bf017b1e4decafcd50b2f615affa3d17ab347ad5fd609e7c323ff329fc323af606affa7517b8b47b55fc560f36d7de2f216f7784cecf73bd77ab55278e62e13e54e95708bb7b76e28151e1545cc3eedc5de1149ad02ab115bed64d5969b256cb1f477c813fe0e6a5dd80639279625fc8decc3fcb2c45c77a9dc636b85f8a55abc550624eb3d2acaa56708f4c1f0eabeff1a964091487c02bdeb31815ec7844735c2f9deb55e84bf811546db4590c2a85e249dc2e84d2c12f575843c46e22d4c78038df0873c0a7f5b279c67d686117f43d7ef6804e7881d99ebc6bd257eafd6ccbab734d2f1d2bab7348e24736ff1af2be6def22e664b4d74b9ada7375b7a0fab229a467c5611ef63929bf995fc01563f344fc5fe13149a1feaec5f6c1abeb44eecdfcf2eca892dbf45ca96df5258fec00496ef6faf677d4a7c84194f2bbfc6f331663cad7d1acf273ac13c9bb6d164d3dd7b79cba69f625ab7d53589f84ecae34447ab4cace8d2ad05cc12cda52c8f6e9b9f617ab4d3e9c17761f426ff734c7e7b9fa9f3854e304f9ded35a9f3a2c7d4f912d3ba03963a3c8f2c974d44951e65b53b04a6eb54fb1516c98e9a48bedadb5b24bfc622d94917499e03956f84dd9e4ddf4be81b2ce4ceba90796fdf3e6e36a7f694ba9cda6d34675b19a2947975fbfa16d3a08b4e830e5a0d66887fd5889d9cec567f7a4b2ebfc374e9aad3a54b8abac41f63e645a7ef31c3eba631bc5ffa7833bc1fb00877f75926fc8809eee153f04f98e02c9f827fc638f7d4706ed7d71be7ff61c27b6984bfe951f82f1892de3e91fcaa13cc4b9f3e3e3b43bfe904f37e685fac1fda2fad7ee8ef18f6fe1aec37f5f786fd0f2c12d9582406a415893fb1480cd444e2478f91f80b133e4823bceb006fc2ffc60c73b0ae38e5dbd6cc617077a852d1c6560579361bc0ec7ddbecbf9d0b78b2c49d5dfdf09672a578a28adc6a5621f696a9667007057b5089ef0550e96a19a870f860925dc52ead2dceb344615eead11d712bc662888e05df021cee4e6db73263156c6c37837542c30a165b846febc7754e26215fb81a7b8bc73f98c10cd5184c45b63783f917cb52395896ca4d2b4bfd8745224f1389533c4682459094ced7a5345f7eaf1f225d200757f9a231debbb077ee4c94a6d9099f0e102eb4f6b06accae9d3960b5b00c3584ea7c5623ecaa46938b160b0dd5999731d9ab65efd48b7d4574f4b8037941846564ffe72816c0b00c05b01d16c0f00c05500f0ba0100de0c39dbd04505f1780386149933deef3582934c0b2c7485df6e012d259e0d1100b65942e14be13acda94cfdf06908d3074a375231583bca16bac13ce476e76f03b72d30433a93119b2d9a618971d355cb2067be3d20c13be9346f8228fc29b636876ce109a1698f66335da170df1a67d4b2c1f8cd3e503fec0de20359d3cd70a23355e4fcaf30196ad31521334a4367b24d50623355147aa192897f870203cb6d40bb3b658a893b0e12d7739e50e3dbd72ab1d8676b206ed1143bda16d8f45728a2e924d6a8d708ef5e3bab44c717b2c3a5375fd6d8fd1e980099fa611fe588e37e11d75c2f9b9e7bb44e20f137f6ecb961de384f7c48577c22a90e97e2b90ce58de9f91a152b20b16c0cc0c05d0150b60568602e88699cd6c8dd99c90ebcd6cba63c28b34c2bff428bc07967f77c58ac679569f412d9e862b2ebde4e12c2c4a733451aaccf316a59e586a176728b57b6101cccd5000bdb100e66528803e5800f33314405f2c80dd3214403f2c80dd3314407fcc44f7d0d5041e4d341b13bea74678a37c6fc20760597a812e4bf3a3068ae236d254734f65d6aff65e367cd0ce3e196f851836a8acfd66352804ec1d7854f110f3e62a019bf2abefe2770b8f1df0e56d60612086732f0dceb91e710ec284efad11fe9447e183b15a7b1fbfb5f6102c832ccc5006198a05b0284301e46001946428805c2c80c5190a200f0b60498602c8c76cb354639b96284fb65980695f9621ed8761da2fd568dfcaa3f6c331ed976548fb424cfbe51aed6ff3a8fd089d70fe7e79c4ff69c32375c2f9fbfb465298fb1b880b1e852159a141f2e3306f484663482a328064074cf8ca0c081f83095f9501e13b62cc576b986f1aee8df94e98f04a8df05f3c0adf19c3b25f06b08cc584576540f8384c787506848fc798d7e83251a137e613b0b6e11a5ddbd0de74c6f63f9a9dd619d613b1c8acd544267b84b7c84cd209e7538aeb6a1fb8a614d747d299529c8c41dba083a64def0488a660d2f7c78671ed467a4e1a1bb34fc592e300dd50e0486fc9310d137ea046f8871e85ef82513a28953a2b0192e998e0837d0a9e81e13844d781f4886326267ca346f8d451de84cfc2841faa117e8a47e1b331e187e9866f3d0a2fc212f3705d5eaa61a91d7de06fd993ed46b8d0b190caec4550bb624974842689bef4984473b0243a12ab81e2d7a179894c3156491c85551247a75549ccd585c3dd488f49a51cb910173c0f0376ac0e18af7e723c019a8fc93f4e27dfded432dea2bd84b81b16e2f1ba10b7d79ac04c61e9ea0498d8136f96be3ba6c9093a4db804be16c56b4db08726941c7e965e849f3318d436f373ad3bbe99b6f72de64f8cf0955c4e18227f445c0cc4ca979322dc4db27d5ccc12858fad67d953973efcf6e408772277aab4cbcc431b9edff5b9685cd2d4c79366016600a7e80c40f992d8057c85f5af1a19a9728f86b71716eea9ba705ba2e1ae92958097b0f7d699631637c779019a23acb61648f3f36696a7690af09c9e3c1e9de2e2914a68a75bf21a7060fccf50eb4f43e4d4ee4dc2c2d30b04b3f47d3083384367107cbf1f7b1e9d7b1072dfc1124f26b010ebc09ea9e9c04699b70eec222c2a6761b6ed9c092866ce13bfbd44ac040bfb6c5dd86d65d8d572012a6fd039dd94d3d16131a6c3393a1d7813c16e840e95cd4d7bafe07ced96ba63c496ba07580a78ebf82dd1e9c44743cf8d60a3a13f3ee86534b45417002f54ced335b3782e3d5f93dddc01f29c8604588651be4047b94d9c95f94fe7a5980617ea3468a5b1353f96be0c037e1106fc627fc09763015e820578a9bf00cb75f5542f1670b36982708dae4aa37eba2cc217bd38b90c451a4d9b914653a2d0b1aa645f1db7de9cdbc200b9d9efd9cdf362b11177b9f5cb6ce1705e2e738077a69747f8e2385d71853547af10647bc7c53c5dfd30ea2b74d983cfe45e19f139935b8149becaafe49598e4abfd4a5e853530aed1343044e2796860acc60ade6b7d0ed955623caef3cb633f4cf2f57e255761926ff02bb91a937ca35fc935d858c94d3ec74ad6e80473456e4e457082558d6b3116b7f865b14e279937166e455b66dee6a9d763b06ff3097b0306fb769fb0f7c790dc912124076048eef489e440cc4ceef26b2607612adfed53e583b1c2f41e9f85e921188b7bfdb2d88849becfafe4433118f7fb847118a6f2037e553e5c27990f543d988aca6d71c147602a3fe457e52331ca0ffba47c14a6f2237e553e1a93fca85fc9c760921ff32bf9584cf2e37e251f87d9dc133e6dee784ce527fdaa7c0266734ff9b4b91331c14ffb147c12c6e219bf2c4ec6243feb57f229582db5c5672d752ad6d678ce675be3348cc5f37e599c8e497ec1afe44d98e417fd4a3e03c3fc924fcc676286f1b24fc3380b13fc8a4fc16763285ef589e21c4ce3d77c6a7c2ea6f1eb3e353e0fd3f80d9f1a9f8f69fca64f8d2fc00ae5b77c16ca1762e31a6f67605ce3222c5fbfe3375f5f8c817ed727e84b7482f9d68fefa522b8253ef87b299682effb4cc1cb30c11ff814bc194bbd0ffda6dee558ea7de433f5aec052ef639fa9772506f9139f90afc2047fea53f0d558ea7de637f5aec152ef739fa9772d967a5ff84cbdeb30c85ffa847c3d26f82b9f826fc052ef6bbfa977a346720e1f5a8aeccbea626f5b9dd75f66f7b8fd2695b4188e13bb094b8b6ffda6c5cd3ac9fc18f9ef5251f91a5cf02d985d7eefd32e6fc504ffe053f06d58deffd167debf1d4bbd9ffca6de1d188b9f7db2b81313fc3f9f82efc204ffe253f0dd18e45ffd42be0753f9379f2adf8b09fedda7e0fbb0b1a43f7c8e25dd8f69fca74f8d1fc034fecba7c60f621affed53e387308db7fad4f8614cf03f3e053f82a1f8d7278a47318dfff3a9f16358cf90fbcff9ed193e8ee18844fde17802c3114d4570021c4f6245dc76519f45dc5318e87a1900fd34a6767dbf6a3f83a9dd20036a3f8ba9ddd0afda5b30c98dfc4a7e0e03d23803409ec7d46ee257ed1730c94dfd4a7e11cbe4cd7c66f29730c1cd7d0a7e1913dcc2a7e05730c12d7d0a7e1513dccaa7e0d730c1ad7d0a7e1db3b7367eeded0dacec6febb3ec7f1353b99d5f95dfc2c652daa7a27282b194b77582b96bfaf6d1f8add9b485514f5cf83bd8f8798754b44e307efeae4e307794e918cd8ca3cc7b584a76f29b92ef6329d9d9674a7e80a564970ca4e487584a76f599921f615a77cb80d61f636553779f65d3279879f4f06b1e9f62e691e5d33c3ec340f7cc00e8cf31f3e8e5d33cbec052b0b7cf14fc12e3dcc727e7afb0a2a96f868aa6af31d6fd7cb2fe0663dddf27eb6f31d6d93e597f87b11e9021d6df63ac07fa64fd03961b07652037fe8861199c212c3f61010cc950003f63e5eb50bfe5ebff30d57332a4fa2f5800b9190ae0572c9be6f9cca6bf619ae76748f3dfb18e6f41063abe7f60c2876540f89f98f0e11910fe1766ec857e8dfd6f2c4547642845b762018ccc5000ff60018cca5000ff62293b3a0329fb1f267c870c08e7c3abda5eec189fbdd8884e30b7c71dfdda631493bc935fc9db619277f62bb99e4e329f7b1d9b0ae60473aff57582c529063ecbf10698e0f13e0537d409e673af1352119c60eeb511967a13fda65e638cc5249f2c9a602c26fb64d114133cc5a7e06618e4a97e2137c7204ff309b9854e302f3f77c940f9d912e331dd2f8f56188f193e79b4c6caa2993ecba236585d32cb675dd216833cdb2fe47618e4229f90db632c76f5c9627b8de09cbed66d6405ab0b8faaf813e8d5de2d99f3a99aa36316713113cbd58ba37cb97a0ec3cf0dcf8cbed832f60eba64e7a933379564e7da23823bea04f3db79d1f8ad9cd49fb800eae376d5092b25e767a094ec8c09df2d03c2bb60a5c3ee7e4b87ae3ac9fcfd3d7c0e3975d309e65b9aed998ae093f0eab93b2678814fc13d30c87bf9859ca593cc47c7f6f6393ad61353791fbf2af7c232e3c20c65c6deba00ba59b78b5261d2184fc63e18ec129fb0fb62b017fb85dd0f93bcc4afe4fe3ac97c58a03443c302d9580065190a6000d67c59eab3f9321083becc2ff44198e4e57e250fc668976788f6102c807d3314c0502c8015190a2007b3970a9ff6928ba5ea4abfa99a87495ee557723ed628599d8146490126bc3203c28761c2f7cb80f0e118f02abfc00b31b5ab33a0f6084ced1abf6a8fd4f5b8fa59b7912037fc841b6ea5b7e1e79a947b516ba3fa1d3a53d101eb198dc2127f5d06127f3496f8ebfd26fe0e98da1b32a0f6184cf8fe1910be2356d61f10d5ecaf3851dcceb18ca5984d64d32d53b437689fc5f836a9eb4402afa83d5d8cefa63bcd7a1e3bd582ffa2ef40eb965cf1b7a16971c35fcdec6de15779aa7876c26279a02e9647d5c6729ed595e799cecea02bc5bfa789accb63c3b79fb733e8b4da3727899d2ef91bcebd2fab240fb51be50466ef39cae53ae9c524f0f7bde981499acbf8fe86cbc45327539859ddbce75b72bceeb9bc3346fa20cc9e6088769c0aac6f6c5aabad4271a1651b5522cdedd8ce15bb35ae8ad336f62dfe7ba6ec692c16cb8375b1dcc9154bc8dc8ee76491622b451cdd5a3a53083e499457e0575e62360e8bd921ba98ed9c52fa8d1387379433b5e7a3ff948b3df112b7f158dc36eae256e88adb4c913acb65ccf8ddfa3a8bc9042c2687ea627242c0e559ec1b7be3ec122bbefcd080c9d65776295fedc1ca213b3c16bc2e59239a19b0d48b9d759989b26d2246fd301df57129e58d198246b511a5da242c7e87ebe23783d0aaf8afcebdcab96d9488c6e3feac042d49d249d5c958ac8fd0c57ac784b1c6359d23e2c2a7056a641c556dcc7f5d2209c5e78bf453730a16af2375f1caf7dcb253faf316de4cf1764d6d1b2f3331988ac5e0285d0cf624b447fb188022d1055b264bb1f9a24dc5d37ab1885de2120dafb9bd10998611391a2b81f4ad6d183e2c8da6896e6885e87896cb56457209994bf15db0f81da38bdfbc3aabd7bca4753a65d2748cc3b13a0ec35c35cd0411433b362a7de75abf4d14c760e9ad35517ac2efbcc46206168be374b128234e4d7ff9375556e9a4f64c8cd3f13a4e7b782ea9edd83b7be13a09f66f45b52db62aabe5ce07a5fcf4d9d3e1310be371828ec7f4407a57d4fdaed9589c4fc47a94e9d5d6fc10af2542104c67af16e125664558cc4ed2c56c3412b379a22555217b91f6a0a81a5f9a2fdb5ba59e4ab5f46ba95db1189dac8bd164c2724da5aa7d46955d8ec553483fa673b0989ea28be918b4bda12b299c31804742722653452a5789327a89d537da90c1581563b13a3595d11b67b8b0f5344fa44295f52ecf87cb12f4539c323217b3b958cc4ed3c56c42d29233b5f11bbc0c4dd42e4ab7a49c87c5f1745d1c77afe3da81bade988fd1d8a4a331d24503b6ecc659e1578972dee6b244b47ae3fb73f8c8835e9a97d8ec86c5e60c5d6ce61096acd56994ac9968fbec8e11385347603c5ae2f291b7c5d64bcacaedc33b13d78fde7b7ae9c4700f2c8667e96238cd630c771325f0aa14fadd41c5774f2cbe6767aa0eb5dbf7e3400d4a6fa70bb0589da38bd5148fa93849941ebad2a72e52702f2caee77a1b75c15370b27823be7c71d79fa9cbf512bfbdb1f89da78bdf0e3e5a7935a24ee0a77e2d95b52e1eabb971ef7a89d33e589ccef796666efb1c274669ed919564b98c7284682116bf0bb0f879e9df39473d634ff93c72e2965ca6da358bb0f85da88b5f1f9678ae858f7e51685982697951e219132fa9509c562a50dade622cd617eb623d04cd5bea444e6719b1b476967082684feac65bd39b355d82e97d894eef51497b0ed384c7059fd3a9b0cabc2a2b6e2bc5c986f17dd54429907e6faf148bcfa5585b31711ee13dd722d17eaad6b4215299a1e56de9a5198c611916c3cb52e9cfea675ca709dbe3b38b25723c293ebd829c755d8ac57133369a944a9f3d9558a65762a41fd365584c2fd7c5746a4aa9e99e3fb7f3a18a775da6eb722cb65760fd1cac2f0de33b53ce2197d7ced3e1a34ccef91efc4966667bcab1f85ea98bef02a42ef4e24918d41c46fa36b02fc6e42a3ff378c5928bd7793cf89d9758acc0627135d56c64a218a66b9f15582cae49c53311cb8fc9fc77d2cb83e95bdc4a2c96d7a636021ce3ee6d0418a657aa2999ae3daec2e2785d2a71c45232591c832d4d576371bc3e95da034b472fb547b0695a89c5f78674dab2766c8b05797bcc61091acfa07c36f7c36278632ab3da5e3ca3cd6903556171be09f3414b7576c21e9b486f6ec24b0caab118dcac8b414106eabeccc7a1068bc32d7ecacb8962acb9dc7acf84f2720d16c75b312fce542dad38a9a5a51ab774c65ad662f1bacddbec81f25e5f5aebbf5e5e8765e13a2c56b7633e21fa58c56fd35157e3cdebb118dd81792e7af5ccd4f7e753990109d2837303c6e14e1d87811e38a8345d257b6c991ac3dd1fd3f82e9dc6fde25a5aeef19798a75599f895e7bacce49a03304defd6693a02651b6fe94ecd2bc51860ccd39522bf1c88c5e59e547a63d8a8d724c346bc0ec262792fd6e6f356ced9ada0f8a7f1eb08e65affae94b926d530d2f3e138188bf37dba38f775a5acbbf6a5cb4d87607ade9f4adb14964f7edba6e9cedb6ec462f0802e067bb1ba5d1f012d30d59ca7bef142e5508cca83a978f7a910bd942ab19861392e33a5c96158cc1e4a65a6c06bcbc2bf4f5bfa313d1c8be9c3a9e44dacd765db78211b96247eba7ccbbff2128323b0183c82cdcfebc3f46287307ed8ef994aa123b1f83d8af9ffa4d2a74c6da577d063aa4761717d2c95be65a29ac25bdf32d37e4d4763f17a3c3d6f61ff9eb4313e996add1f83c5f1095d1c87a32d307f7e6afed3ea582c1e4fa652f663f92db511d26047728ec362fa542a3d03ac964b5676065dc31d8fc5f2e9d4eb07f768706af5433023bf2760f17b4617bfb129c56f8e7856227d25756b8d831abf3a118bddb398df57e292b358cec7c45bd80451075625280d63dfce16de47761e4ebcc3427a3dbb93b0586f49a555a60f3fbd1e53f2daa0a1f55f24c237779a24a4d8be4dabc537bc7f9cd3df7a14c9aded130dadedeb0c75f48b62bff3f0575a6501cf0f736b7b357c73abc4129e8bdac78f8a3ffd231c6c8dec1a4496ba18d95f5608c94b405a0e15846ccf073e6b37d4aa7fcac5576a1bb064b1d0f5ef86821e1e8c5df238ed8d6ceb158934943152b22cd2d99cf4b616d3e779aaf696a91acd19c0e338284d6b4aaec50b3cb4edf436d4218e2ccc1d3add6d01b3e438aa48323b032a87cca421c03a5117c2102140f580938a9b07b2ba4e5c27a1a33d415fc56c878b4683196b583f9acbc9bf488987efb21e1b85b2fb26abac0f36883e25dcf9220cd8360f88617b891adb4261bc4522707c6b9430607bb75e0cdbcb94d8f8768a13459fa2d20267ef41a1ea790c60752810f2d32615c2572811b6021976aac89e5c4089180ce28bf866b315a10056d13406ec554a60ed44565dc872596cdd6398c16d691e03f71a25b8361a705c20af1eb823fd1af16b6928a02d623168af535b9b337b4e167d3a7b85ad5aa9635b5d18c07dda2206ee0dea724d59db3c4b66a96c8cccb61aba4ba5fd8501584d6e0cd89b94c0b667bc5b589d723d1a06789b402dfa1625bca6c0da663ba600c380e9885e314c6f53626a0c30c54683c380e8c7ae3144ef50226a20105587aa507fa8650ccebb94703a5a37b36b3b49caf3c69e4999238af4358cef67c0ebc522391a1b06805d7bc700be4709b011c8805c4dee8c140640233bc600bd4f5d42cd16de1eb1b9d57034493f0585f807d423600bad8c166b538501cf8f6028e7c3a0b298da5f250c80ea758e01fa8812103fc34d756926b1f522d66b6a9b957c39863d5d354764c052911d2bac00c30091ff51103fa61e30e441efcbec1d579d7b40c3bdbc43810d74723ea1c4c6cf7b8336c7475af9867965b5a7509686bccbd30e8cbd7e4a89b2b9ac295536dd20db61f344e73a0ca81868757d16d4200eef6243b750d5cd0e537bffb62631709f538f49407070d7ae71629482cf57c7769c0b03bc916004ec0b4a78cd404324e69065bb6285015457d0e6ff927aa870a6c87e2b5c3b2af0557b5522a43000e3bb4029605f05356754243f0be3f46e2ee8137c1dec28be73654069c82a806c30d9f60dfd9c116f7b4d144187b965b6a57e0cdab7d4d63649cc74af1181c776318fed08536d357af9be0661007771a318b8efa8c1d9be3db06bc5b3670c6198bc7e1e1a1a03f73d25b816a07c0beb942ef76e54b07ea07720b07d7d560b31e1ee718e05e5da8f94e09ad466cf39d64feb4295154f181283f413f514c91ccbb226b0d40f060b03c089a2cfd9b0be4bb87bed46fa9eb2dea8e33ebd2d993dc454297ead91ad3b878f2f5fc86f9ce63f431fddecb44769b3935606d9297b02657b764ac84ed325303ba54e60b6cff1c36c0f7e9ed99eea89ec945bcad99e9a87d9699527d99e46bcb23d758fb253f258ccf6e4a697ed79a049a733ee98951d37ab9f9d7074265b3b4f9bad9d5aca469c2ab213f8a46423d39cd9490675b3d39a80cf4e69bc20db83eb78b6660e325be3999f8d3619b23db5f5b33d4cb764a7e479165b70a35f2893cb17dcfceffff3b530b97c2dcc2f1cc28e9282dd7efa95bafdc453cf5efac4ebb4c4dbd6e759ad18970e5de374982377e6b6cd49b59374da3476b4a45aa412c1745a53c700c7b8df4cc2991f4a9c57039cbf9b84b32094385f0038ff3009e7b050e26c04e605fe3409e7f050e21c0470fe15840b3baf629c58ed86177f8d0c5f1f2a7cbd40e6fe3b086b5c86da23547f211bc50ae9703623b3468073ab4938478612676b80f31f93700e0f25ce47580ce7bf26e11c164a9c57029cff998473442871fe0e70b2ed0cc259184a9caf039c119370e68512e7de0067d4249c05a1c47934c0b99d4938f34389732dc0598f12677b8973891cd174ef3866ab6eefd7984b07b23e15c83d418bb33e25c86e2c362e9deadc0c7fbf8a69d64a87a09fbe105868034ab05d9366786cd7c63c3aac7ce93309d65260af0d29b176d2d82b367b14809d920d884400d04694407b3038a998faa47a980b8181a010684c09777b9678ec138a23cdf80da9501e0cecb40925ca96126561f0a39e64f05e0476d8340878238387d7990adedb005e334a781d58e2b6a63313938e219159e2ab00667393608e0821cc4f01cc1626c11c164298cf00982d4d82393c84309f05305b9904333f84309f02305b9b049370fe9c0ce6d300661b9360128e1e91c1bc1bc06c6b12cc30f670ee0130db9904736408617e0660b63709e6a810c2fc12c0dcbe6e87316c51f619268425664f2a946f83618c0e41a0c4ecd2791c0c6179493672d90aa0ec488972a0445961bd5421aeca45bfc8fa9f8fa5db83c0b6ef79b185763a1b2f8687cbe46ff0bd719656e5b4d6db960a791be07cd889127913817cb9580562af4a59c634fb3a846008b819283b3bd765d9e93c1b89d0fa2ea4425903327c176a94bb317bfd9dfd51fcdab355629d9576097008cace2ec02abb520f086f6bf0da0378dd28e1f58fab78ec39c7c9722cbdccaa66ca4429b9564c96ad61890e9f22cdf4646dcf0741a6ef4e095bf9bbab33acb68d999fe9005f8fba6c6f86df12fb836c9f158425e6b311c15b626b2a7c638025f6a4c4d75dd310d21f143a57c0e4d6ba54885b496b99d750a1bd19a0ed55b7993cecfdf38e0065efba6cae3bfbe78423ed64cda4ef00ca3ed428c7890d3156cb6d00f80992aa9dc9370c509b23d85b4e84af13590f543d7d2951aabd51f2acff57cac04b44df9bff1ae686d0e50061bf20108ed8e6107e0010f60fa201c45d059d7b6a84d9d3b209280fb329f1b505f8d4759c50810fa185dbadfa3d60830382584781d5cff13b7110ba6391e13c09d8e4409370922e4b21c3793bc039c8249ca48ba6e8323bc039d8249ca4be976438db82d99b2126e1245d5d4e867338c03934081783d46676f228bd2fc9e676fa00983926c124ec7993c1fc1e949bb926c124f4be2483f935809967124c429f0d32989f0398f926c10ce37cf8870066415d8e55c65427cee4649313a340f5332c88a18d3cd93bdf3666197f61317cc3cd59e718465fcb2b41a62e0c02255ce03cc32a17a7c8ed75975a1fad0f62ac880ce505c02a4704b5b741aabbfa867924b339b0d191f4b53874005cc8560874e3c56ec0ca3d6bb2752db344c49df51182e5a5cd81958e0a625ebc46ecae5e5debb0aab64a56579d4f513e65ad4e86b618d8e96853d1923698c8d0de07ac7687201af2a9efa34906936c37a38900e618936012aefc2183391ec0dcd1249884eb78c9608e013077320926e1182719cc02007367936012ee7d4006732c8039d6249861dc4e6f4700739c493009c738c9600e0130c79b0493708c930c666f007382493009e785c860e60398134d8249d80322833914c09c4409338bc58f797a5b6a4a58bf932d357d02f4dd27d7e5027eb7b30261294ae6aa90076c758a493009eb773298a301cca941b9c1ae1583c77c0d65405ec464f87a027cd328f1c11d5ce3574e7261b15d86c33cf9f60300ba4b109eed1ce8b6e5d9be19209c1e04c2c26d0ee114807086391b9b10b62cc9a6d7fa81a6cf4cb35b968403c4642dcb3700de59412f444d7d5e88b0d14e362b7431403b3b18379a51c1bbd19065fca1005f51502b8462be1f70969ddc3981cc062f0315d1aee6ec7810c65d5ca7029473826aaa273b5c3dccabd72601a0c5c16c21312cf8f2712015be91a07c9c1bc40296d49d0ec2381cdc1fe09c6712ce91a1c4d914e09c6f124ed2838ec970de0bcacadd4cc249baef3519ceb301cedd4dc239229438bf0738f7300967612871be0470ee69124ed205806438e7039c0b4cc259104a9c87029c7b9984333f943857039c7b53772b79dfbcc8fa9b0bc10f999b23545b63fd4ed8addc830ae8ce00e83e9440d5f15e05c1772ac906398e01f01652c2ebc252dd97d0b93895d0a1b06584aa2f04d6532e32112ae1701c19d426006a898950099db2c9a0360450179b0895b08627837a1b180a59622254c2696132a8d702a8a526422574e622837a05805a66225442774332a89700a84b29a1b666b1ed4a57b3a5d67fdc5d2130972eb289e00200701925c002163f87e974519860fdbdd2fa8fffdb8e08ef432d15cbafb9b2b304f075228815961daf6565e2adb902bf9acc23b4e2315489d08fc51261b9399b5a84f1d4df0b803d9707e3175207c7779315077d01be7dcd5dc71e468fa53740265f41edf93981d94787adb0eaf85865552c5ea9140e8bd57408c9f64e6a071056d4e5e202673949ba212f5949590a60ae34096618cf472f0330579904338ce7a3170398ab4d821946cfbadd01cc4a936086f17cf42200733f936086f17cf45d01cc2a936086f1c8b0590066b54930c3783efa6c00b3c62498613c1f7d3980b9c6249861dcb3b31cc05c6bf682ad309e3a7d3818fe584789b7b9c46b6f7f5a2106426cd9e58c706bc9fa54e018b0cbf5753982e99cd220ec4a92edb57d0eb0c10d94287b32e799bfab9191a2448b5e093339d918e7ff00e0fd2901f740cbd0d44639099b4e64a39cef03b807980c97d072c9e0be05e01e68325cc2ee2819dc2f01dc834c861bc64d7c3f05700f36192ee1782919dc6f01dc43ccdd66208c767b2a40bb31a875c933c504f20a97c3c344ebb32a116298d725f3569d027a6810f3f305c265675b7121df05d8e361e66675c2a115b2ac7e0d407b785d76619d3d2cc20a89ac87f52340790425ca162cd1300aa18b43132a7451503e1e4989ce3e49a6487e30d77a71a6dcb9ae4e0f3f21b3c9ed01d8a3ea72b396f0ef94dc1da03c3a883a9cef2cb2ed6c4bb90ae03b26e83a5cef086ebbde560a8bb59d6a492db331953b786fb0c4e6d82096cf627578fceeb361dc7ff628508f1f6712cefc50e2bc08e03cde249c05a1c4b905e03cc1249cc34289330acace134dc2393c9438fb019c2751e2eccde277b49bc4d6333e07ba86a96d07665b9f978aa6fd1c0196ef70c7d107329a44e610de0d34a54e0ea229952b6155cbc6129f2d9d2350f32ee75a412576ea669857827405a5eb2926ed44322a94277265039ca79a84736428713603384f3309e7f050e27c0094a3a79b84735828715e04706e3209e78850e2fc19e03cc3249c85a1c4f90ac079a649384967dfc970ee06709e6512ce8250e23c0ce03cdb249cf9a1c45903709e13940303dffdaec622516929b3ca5266bedc07af54ec8357166a07860300d0732981764d6a9fd0d7799c25a64af8e093eee3b4896ae47e3968d09f4789b51f737a3d2f11afd9931ebb592f950b2af69ca8eac96f5bfecffdc1c8d4f994a81b08017ccc69adf83b7c3e216d4066bfc09c8d59c2b8daf34890c12fa4776c880dd5ed27268db9b86d73a0ae33007b5110ebebd42191f6feb67649a85e0afbd97287800c7f3125cc6c5735540dca497b8be0d800f344c69d6eecba7ddbaa8ab241557409256eb59d70aeab940dc056f7a2823701d8eaa5e6eed514468ffa4701dacbcc59b35c18ca8d8626830a6ab34930c3b8d1d01400f37293608671a3a10100e61526c10ce346431300cc2b4d8219c68d86da0398579904338c5dcf1e00e6d526c10ce346436d00cc6b4c8219c68d86da0298d79a04338c1b0d150198d79904338c1b0dcd0130afafdb914f5b943dc8415897f7a442f91140794310831c23821fe4209b6e7b99c5e0dd68cec642847648b6b1d001c00e6f0ac20e47056f87642b8bde01767873106bdef2ebe2e8333247ed11c0f66ea1b63d3e7e1e9bf5b195b547d7b91b42f82a90b6c0f66e35a70c246cd6909581ef003bbc8dbe8db85c2ca9e69ff2accb45955a776bac0f974885968aa320f93a8cf0d5cd4d815dde6eee661461dc466d03b0d33bea72b5bab32f13c6a1b461c04aef3463b9f55c518faf12d99f8b5b498bf61a2ab4adc1f4ed5d41ce963bfd3ab88f1177339c28327ceca8dd6d6db67c30c07db7393bd41096af6428df05e5eb3d262d7625dd969aac25703ac079af4938f34389f36980f33e9370168412e75f00e7fd26e11c164a9c3d4135f44010e3eca939c5e68772d2e20b609b0f9a04338c9316df00980f9904338c6e5baf01980f9b04338c6e5b1f03988f9804338c6e5baf00988f9a04338c6e5baf02988f9904338c634d2f01988f9b04338c6e5b2f03984f9804338c6e5b8f03984f9a04338c6e5b2f02984f99d4a1245d6d41d6a13c16e07cda249ca4cd23329c37009ccf98849374430a329caf039ccf9a8493746f24329ccdc0e8d116937092eedc45863317e07c8e12672e8b9f82838b54b149b8c9425ca5d0a2749b9b921b02f03f4f89bf8dc43fdcfa7fa50cbc44ecf719f625d70fb318c2172811f6d61408a96e870eb75721b4d3e22811e40ec04e5faccba9e398eac4ad553257c63100e54b416c64a14adc32b9a9ef6ca6b6f2c5d112da2819d8e74043eb654ab0592eb015cc3ef8848b89f9e925eab6867104e05e80f795ba7429737a9112a224f3229d0b50be4a89b2a74039cd7a09ee5d637f1eb3d63a3bac87ac55db18b4095e0bc2db3e4f34ac02f6b6276b95f601f6f9ba39db5685b1d45c0d50be4189b25d12942aa6a4fe762745883076078da63783a8dbe35dc58badeee6745146f2eeaafd5b11b3f755e28da9719606e5a2874586b72d95953e0cacf42d73b7020ae3b1907f80aae8ed200a00acd9142b0008cb51b202600f60a1ef50626c6edd14c9a13db53bdd3461993cdb87af29d40ad8dfbbe62cc426ac847a52a1fc00d8e07b75d9030affb8673d80f2fd204ac5dc5a9ca5ccdea2d75ee111eea320df0799fb03ea59790e6ca208b88cd97b77f257f70763f5f6c6937c4122e1cedc64fb218e03303f3467992c61494936c0b11e64ef8f8240999b60182edcd31b3f02abfc388819a261dbdc0cd11100e127418cb8736b9c246aee35428919d6274b4479399bad13734255d633de03aa64613ecb602e00fb69309b5ad4c106bc648da01c504a7e4689af2db0cb29c2d6e6588fd631b88539b10d9241dc09d8e0e7e6ac740fe322835d00ca2f82d8e06758f099996c2dfbb100de97e62cae26f48227cbd25f8172f1ab205cbc523f3a94b0314e7684537780f36b93708e0c25cefa00e73726e1243de79a0ce76da0dcfcd6249ca4a7b093e13c1de0fcce249c234289f30b80f37b937092ee574c86f37980f3079370e68512e71c80f3479370168412e78100e74f26e1245de54686735f80f3e7204687f886a7f61e9d6b5860a39664836b8b00beff99b4d0258f7270830ce7c9a0d9fe8b49384937a420c37937c0f9ab49380b4289f31380f33793700e0b25ce2ec05df07793700e0f25ce1100e71f94381b090165f21c4b7b6115192eb285280d40cdfd2725aefe2c7e4ac2e94f3981f195682bc5bff98ce41a21729200cca365cf0005e060bd2b15ec5100f65fc1b8fae76f4373903d41c5f3b7390bfb08fb3b64d9be1094925b835c7fc615d09d4bbd6db90cae0396fa0f25de4e2ebc95b5e5e3b605f42700f4df60bc37eae04417b2ec3e16e0fb2f08c7ac98f706f7275a265cb3aa42ed3f7415a8bb593d63d69985711fd8cb8035462851b6677c7d84bd5787fd5131c3fc81ab4398ad1b019b8c5282f4b3148a7440986c29d42460a3db998a96b4ed4986f60e60b5f528d1aaedf952f3822b08e5cec5370098f54d821946a7c21b01cc0626c10ce3cec5d701980d4d8219c69d8baf07301b9904338c3b179f0f603636096618772ebe10c06c6212cc30eec0710e80d9d4249861dcb9f85c00b3994930c3d867bf13c06c6e12cc309edd721780d98212a61a1ef6e25a48586e92b96fcd06bdf596a6010da33fdcae00682b4aa059ccef1e4684bd76b23d8c1e05785b9b539a8e0c65a3a90cc06c6312cc30369a9602986da9c7e693cfb1178a75978456599f0a642f30c3de2e8801e4f81234952164c29125b201e4b3818db6a744db5383d69ebfe4f056b15d848f5265c21640189b539ca702bc3d25606febd4c3380a3a12a0ec408932e6b850b80d392eec00b27a474a7cde975713763cc9327621c0d9c9249c234389b303c0d9d9249cc34389f309505676310927e9d9d564386f0238bb9a8473442871fe037076330967612871be0b7076370927e9d6cd643897029c3d4cc2493a424f86f3448033cb249ca487d593e1dc0070f6a4c4c96fd48ed8e11bd8680930f532c9ea4651fa7990595d16689ef73609e7c850e26c0470f63109e7f050e2bc1d64f6be26e11c164a9c67029cfd4cc239229438bf0238fb9b84b33094385f0038b34dc299174a9cf300ce0126e124758825c3b911e01c6812cefc50e25c09700ea2c4d9953957ff720e6b187797711fe9e9dedb837056926c05e661a0fd3998126b7b17d672ad6b42780f9ffd13801c4209b29f0be46216ef8090baab02216ab21e7d57e005329412b55a783d926d6b27627c0c4ad31c6a8413ac47fcfc8b156c365b6afdc7cbd21a3695950bb1fc53c24d7e065221ec0410e6522254be482ac3578b2cccaba3c9d2fedc7b7d84bd2c7d0a94a579c1a255270771a5f919e9ebb731b47f00b4f99468bdedb810c6e583270294054158697aabd9095db9c96af8e740d93a2cc80260a5f560bd25843fae144dfbea6dac00f81d58edf0ba2d006c51f6fe49846e883da950fe00501652a254c7e5e405ef8448567aee09b2f8084a78591a3bf4b61886700531d9629807806d8eaccb6cee3ccb92309b939d65790a40392a88813c7896a5ae4e0f77d7f32790f1470751b7c767fc541a4e84999eacd97406b0d41d28d1f671359b78ff3eb61fdd3c4b8cbd75ef2421908b2d6353e4c7ce0281b009359c0af38d00f3184accb11d6747065ff3f7a1c23704e0dbb12eab26e70e9e847b2b91a1fc07a0dc290894a9ad290ae3f6013340b5b47310ed515576f28aa7d4b5a3e2b637cf54012c752c25de26223676bc8b656dcef7460e5f6dde1a58e4b820da9d5839197ffe0be1043299051e0d2c70bc493849e7e3c9706e063827988493d45b840ce7f300e7449370923a2e92e1dc0e4c114f320927a95b2d19ce8100e7e42070a6ee434fd86c27f365ca07997d8a4938478612673b8073aa4938490f7b22c3f9188be19c66124ed2a3c8c8705e0d70ee6212ce11a1c4f927c039dd249c85a1c4f926c039c3249ca4878c92e15c0c70ce340927e9def164388f073867998493f4cc56329ceb00ced9c14c5cd481cb02d980dcaf005f11253ee5efc1035e2a2c51c95e255f09dff87a04c0db95129e5abf816765380339ce1253253c3e48c7d5374588b0ee0dfa3e7328b1a6b6b5a4aabbc3e717772100596c0ac8303a18ae0220e79a0292d09b830ce43300e43c5340128e5e92817c0c809c6f0a48428f7732902dc030f06ea6802474292403f91fb0c8dd4d0149d8a32103d91958e41ea680245c714106b21300b9a7292009fd88c8401600900b4c014978380e19c87c00722f4a90de56aa85f16cb6434175b33725ca0ecc8b9be0f0501e0eca00cc7d4c8219c6c3411b00980b4d8219c66df1ff6631988b4c8219c6d5bd5b01cc12936086b102fa16c05c6c12cc301e0efa1d80b9c42498613ce7ea6b00b3d42498613ce7ea1b00b3cc2498613c1cb421681a2d3509661857f7b4043097d56d67d21665af3923ac7e7a52a1fc0ca05c4e8992cf824f123b1d7115a749db2cb73e2e61f6b651e1732168014ac8f2bab443e72a5c423b245b967f10b0c37d29517663eeed77f40b9ce7b22ae1e4cfcf8de0c256d24ee05e4305f63860a32b28c1f666ee55e4f69e07b16dcdb8407b3fae44555218db9df703ebada084dc93c5369598c2f8c67bb3acbfd759eaf092b54aee67a8dfa24ff920d5d001ee4305783800bc9212b07bbf58db6297096cd3d844eda87c784f60ed0846e557055181a5d62a0d636f291794b3ab2951ea364249bd0a23444b5685d503565a49895639ba1688f2755b3920741c283bf7a3c4d7d75576aed2544dce0a0906e7dcbf83d04ec92aa9df00e8aab08026acb6c840ff0240575382ee059a5b73ac1ff6b348940971b3acff2b85f0559680e59680d5a20cde5f7467cbc55d000d2eb235c28d01e29a20cadc7c367c1b2a7347037c6bea726420fc997d7f80726d904dff724b89f9d6c30a91e9130db81062251b70c9028daa75d4037f0bc55073e0d99bac743c89c5e0ad0f62343f356fa6bc504e8ddc0332f806936086716ae41100737f936086d139ec4e00f300936086d139ec2e00f340936086d139ec5600f320936086d139ec0e00f360936086d139ec7a00f310936086d139ec160073a34930c3384977158079a84930c338dd711d807918254cefdb99125641641dcae301cec34dc2991f4a9c37019c479884b3209438df04388f3409e7b050e26c0986de8e320927e9da0e329c7900e7d1c14c552c646bc1c0702027b890e1db87c5f01d5397531531d5899beb64b33e3b004b3c9612653beba6c8bab14fb24e3c0b193e8bac0f2cf2384a8c3d586c7ad776f15a68a95b6da9b344f0e0f3e9e3183fc881bbd594c869b4d2504fec5602b8c707515af2d1ca6d67e66730680a9d4089cfdf31a1613cefea4160992752979e892a221553d289dd93224418bb814ae8244a8c591a8cde8e62241c79273b8af12150009c6c6e014038114c5600fc060a805328d1f61468a70afbe46e5dfc44a172790a3b17a51629ac1009c0ed98fbd2dbe2275bd7324b6c69082baf2600f0a94134f531776fa757126165d5870ae512500c9c6676294be8c64056ca3250899d1e445b00b3d409a26cada26d0b6ca66a0b94032bdd14ccd0487ef08d7db24c9e07f09d11445d1f9fc953a9ed095d6bc8eafaf301da3383988c837d7c3560121b4209779f3e0bd4eb6751c2eca68199bc19155eb02500ecd99460db30b5f268a1f8c10e7c190b6c78996e692c40784e5d0e2f3bdb9c84fd23b2ea682868149d5b97cd77a70343183d3ba701ab3c8f1265175062da81574aa87cdcde3e25581d701b505627b3cf2ea04e3f9f12aa5a96958a7d165b617221356cb6f52f3529524ddba0bf82aa41bf2f407c0125e24ed6cd04d1beac62f6962dfa4d058ac50795a254ad0ee1945d4750105c480d14ae2eaa145374cb1396ac61f4b26b0c2aa98b28817a3f5c941027d9214fdd4086bfd8249c234389f33f90dd2f310927e97e8b64386f05382f3509e7b050e23c19e0bccc249c234289f3138073b349380b4389730bc079b9493849972390e19c0c705e6112ce8250e2dc1fe0bcd2249cf9a1c4b90ce0bc2a88914f7bc725fbca7df0f8e048b8078f0f0208afa644d895c58fcacf10ddcb3231cdb1c18aeb6a3653eec75826e68cc2bb15e076a047744d5d0e28075605910d7e0c037df56beb12a573d8238cabdb2f0556795d50e5a53dfec905ad97656500c3c72da9c6363f04e5e5f594085b8a1b1b9a73572f35121fbe52b12b807703253ce530c3edafac763f6ff538ecb3959f038c3752628cf7eed4efe139457e10d88653c3a9d0f602686f0a166deaae34a48d7532679a7f01da9b4d454bda4422437b33407b4b10f57afe36e701920310de4a8930b6e2a80ed66792b9c20e00f86e0b06df3057633dcc4e09bd41c3fc764a7ccad13035a799fc50bacd9c066cf10e936086b1cbb809c0bcd3249861dc10ed1400f32e9360867143b45301ccbb4d8219c60dd18e0430ef3109661837443b0ac0bcd724986174d55a0160de6712cc306e88560160de6f12cc306e097d0680f9804930c3b825f45900e6839430958bab17bf0d42eb249b1b9f09ba940f990694d042c980ce02401f360d28616f880ce84400f411d38012f688c8804e05401f350d28e1481219d06900e863a601251c4d22033a03007ddc34a061f4801b05803e611a50c21e1219d01d01d0274d034a38b24406742700f429d380128e2e91011d0f803e4d09348bf9ddd487b000209bc93c0ee07d86126f327743a7330d61f389ecf4b6b300ca672951aa49e1c2ba9853ef43852f0af06da1c4e76f631fc29e1299c3ccb900ed7394689523625eedf05d292b67f0ecd530ef33fb118b617c3e88ba1daebf9867c92e950b089ce708877735462760972f989be5c3b86fe7e500ed8b7559af3bb7f8212c3dc92aa6bf01ca9728517adf3d218c23f5c300ce974dc239329438b707385f3109e7f050e27c1cd4f1af9a84735828715e0370be6612ce11a1c4f917c0f9ba49380b4389f32d80f30d937092ee154f867309c0f9a649380b4289f30480f32d937092fa2f91e15c0f70be4d89b3258bad1a0a78c5065977720180f70e253cb58d241ff298c8f8d95995ac8895c991247bf3c83221b0440880a76a55877a30643040fc6e10d91dcbecf1a7b7124e1593e13c02f48bde330927a95f3219ce4d00e7fb26e124dd19890ce7b300e70726e124dda48f0c67046c9af2a1493849b79024c3d917e0fcc8a496e7a8503a2a0e0499fd6393708e0c25ce1600e72726e1243daa990ce7432c86f3539370921e244e86f36280f33393708e0825ceff019c9f9b84b33094385f0338bf3009675e2871ee01707e6912ce8250e23c1ce0fcca249ca45b0690e15c03707e4d897300739fa3c107ee4a2d05b837a78a676c3f3a18180c6a1cab1223a41b18e9766a6ba344c047827ed33794c0dbb3c44b649d252b1948b24d500701cbfdd6149061dc4db60700f99d29200997219081bc0280fcde1490840b64c8401602903f980292b0762703b9100c83fc680a48c285d964206f0116f91325c8a68c2127b69141eb4305ad0380f6332534b5913ede54872b87600b92b074e4b361245897814cfd3f4aacb9ccd9645f83fabfe3fb204fb0dee0e70cae1677ab5cf8099b4bc5540df8ed4103fe174afcadd0a2802b5dcaf846e8e12b493b8342e1574a7c6a8ba054a7e108fd95c826e10e0145c16f26c124dccd860ce64600f377936086717a780580f987493009873ac860ae0430ff34092661f3890c662580f997493009873cc860ee0760fe6d124cc24e2619cc2a0073ab493009873ec860560398ff98049370db0a32986b01cc7f4d8249b8e31719cc0301ccff28617663f1e70b4e153bd44cb6fe2e17184b193f63900be60b0fc2bd5540358b8165f5c9c79b66889e395f620037fa5968f5d53944be1510efb7db42275bd732ebad523aac64dbff340458239458d59e357ced50e0cb62c8063c7606d93d4a89cfdb618d613c2ce20480723b4a94fececb0ae3f63f4f824c5e2f08b46a5079a5f560bd25843fae145552f536e6a8f02fb0dafa946855e3099b8473160023427992d13e006603936086f124a345006643936086b1725a006036320966184f32da0bc06c6c12cc309e64b41b80d9c42498613cc9687700b3a94930c37892d13c00b3994930c37892d17c00b3b94930c37892510980d9c22498613cc9683180d992126616f3bb3f3761fd4e3640771fc0db8a126f5b161b505e2b86e4f8162b6adfce4036ee25db99fb601683d8ba2e87e99c9b9c1336dec9509e09ecb10d25ca9ebeb33be9be356419be3d70416c4b0958ad81833348d8b407f9bc1119ce6c90f5db0533c19117fc04471f2a7cb920bbb737a7e4246c7592959ce70194db07310a1f5f72a632c5415866924d70ac01683b0461a5a935e8c33804321c94971d29512a078674a6e108fb4964367a2d00dbc954b0613ce9e01200b6b3a960098b0232b03301d82ea68225ecd39381dd0180ed6a2a58c2515232b02300d86ea6820d6303ab2f00dbdd54b084b3f46460cf03607b980a96d097840c6c15009b652ad8303a93ed07c0f634152ca18f0919d8bd00d85e418c540d6775707c2419be4b01bede753952e53cf08cb0ec241bf4db0a8653fa98339c12c6a9e6e9c02afb06319a9ffa52d930ae893f0d58663f9370921e894286f34980b3bf4938490fec21c3f933c0996d124ed2b3e3c870f60033a1034cc2497ab22119ced100e7c020bc9e525bab5410caa50a0300cc4126c10ce352851c0073b04930c3b854a1158039c42498615caad00ec01c6a12cc302e55680060e69804338cf3f4cd01cc5c93608671a9c2afa0e19e6712cc302e55a82f2cb3617d97f0c971c2278846356f562f61b1231c87b2298c6f26691ff2b8c4ba9f21867f6bd8220bc702eb3f6f29b0b7f59feef78838a773125bcf2ac5af5c5ea990bdd27aca35ab66b903ad57f2b941349506912dc6acc659cc6bac77e6b03211fa0656ccec232a675b7fab0d38d60824d99176d61745d66f6b18f757e521acb23459ceaa448c9d475866471a094e656cad24c001664b5dd7327b9bcd6972b4acdc8a7389d0a4ca7aa79e08c7eeaa64479a833be5c73d4d0c9b570bad9a085bb0ada6580e9c2f114f1a480daaa40e76e83caefb8991e26aa9418d7ca74484d786613b5a3ad77feba4297a4a1f6e3e91486b69319cd64c21a9c47aa7445ce7d6c62987ef151fe1bb4adbd303436b270686ca0d4a57ca3bf57b7299dc5e124b2be04611d197121519b3f464318aa5c252b1234999903a2d694c93c70fcf35cd12a44a0e3fc3749b8eff3098eed19c213cbe7919b0bde41a0de7214789eaa5e459d2781b2f62f661c165a22cdfe0cbc69b88b213ca2b17e1e60c35d3be3317f742a77de7a46bdfde351a4169dfb6347b1ed9257b4a0ab1d3a7833bceb1b72a65adab6cc1ceedcb193f132739896ea28d814b1b67dd2d13712d17525732f587d79bf67f1dc466f3f3ac6fed12a6ccaa91ab58a990b7757c94d5ff7ff784c16587c30400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/a54c136b1f25e1c438fe6538084ab6de.asset.meta b/Assets/SerializedUdonPrograms/a54c136b1f25e1c438fe6538084ab6de.asset.meta new file mode 100644 index 0000000..a64d449 --- /dev/null +++ b/Assets/SerializedUdonPrograms/a54c136b1f25e1c438fe6538084ab6de.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ee1dbf15426b9c74fbc6543daed97800 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/a7250c474046ad245ac64456f76800ca.asset b/Assets/SerializedUdonPrograms/a7250c474046ad245ac64456f76800ca.asset index 417667b..efcce68 100644 --- a/Assets/SerializedUdonPrograms/a7250c474046ad245ac64456f76800ca.asset +++ b/Assets/SerializedUdonPrograms/a7250c474046ad245ac64456f76800ca.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed59dd4fd350143f775b378620a222607ce00d8cb016487c970f81449030c60b316340c1990dc806888fbefa1ff9bf99e0ef9cb6ac6befd60d680464cdfa71ef3d5fbff375bb254cc2474de2b4451b344f392ad03e1dd311eee671ade2709ebcf175aae17a8873097393341641c99f713582f30a9eea740aca33dac3b52cf379b271bf025a1b4f3c7a80af8d552a05a2022dd0675aa3613514c1624b88eaee9862bb540fce73f403b3b628c5424c991ac6298f99bacc55a1b4b76e9bbe885955cced81a64615f0dc158e3dcb4c2b36c925d978a4ac7b9f70afca3746beb134be6c99717979f9c75062e532e496e8844c217edb853b3cca684730eb74c255665cc49ec2e41330d0a05110ac4f699666b4688caa3e9fdef3722e61455998b2b08088df2111ac5c0587ed73651de34b1209eccc326672f40957a6daa16938673bc0650b622b08079b36713e117e3b503bbc32ca24767b9066033c9da8ac62c403f404cf15d1302fe773d1d416ed5730762a3972842c99c3f542a4856dafe15e2773d3854cafa33e385b8d3b29e0b96901d6b0f6a6c4eda347fe854718fab4e1a661cae41c51bf429e78c4d0293286147d87c7b453469bc666c8e447f5338460f736862df4e2bbd362bc243dd146c3daa56f6e1679728f258358232f1b37703d102d787ccfc5a6bd2c0f293deea92b7c1af16372bf518b5db494f8ad600d136686157b13e1b87661c3964da831ad69dedd1c68bf42d173296767a0d5a9671846735ccd92c5ea6544c21d03cf4859ece86072285d7270f557f95893a399b3b3ae2cebdaa5ba3e8059dda94000eb3d9315cf84f72d51f25ba197d0a067b13abdb25b6a5649b1741bf838de5c737d6e64039af2b216f2923a79fcf84493c316473aefb77af9c608c9c9b496936a6557bfceaec255a47bb1e78f3ca7d170641cc85e8f2363e56ae5e2151e1b12f736f03e97d5392ae2c8cbec3e389e89bf986f83c659d1f0a4df8fc1b92dd096c1498f770687520ce3a270ae81725d28f8a94ea66ccaad2e729a6557113bbc39da84e5bb9225d199fab4cd8efbe0d6365f5156e8bc96f3f9cd6f5de70d28bcd1ccb81679bc8034e7ce83b37480bdeabdd4254cc9d777d78ca6682d9eb1b464a76f6d51d5cf61e0d52b79852b8a9855698e750c2ee0ee3b462265f93b9c4ed69430f0faf72dbc7072807d0048fbd22aea38f8c3e91e60fe31a6179b4e7b5b383706a41a5dc81ea026fcf683b9c2beb8739a0ffa637da26dbc34caaebe5c5a5c769fffe715d1e28af88241487905c462c85ec699e5facd4a40ca4df6e1d9a64ccf7662c275b23d21d9ee0036142760fd12e6450d6845b2ee2170ca07dcabf8fb4951089849c97da98915b6745cb0910fb6e138614b0bb712a60f897fc9be7f50251f4e23b6388847fc7d6aa245059d0839cee98183aed51cfbab325e8294925c1bfdd0e42aa3de53771bc7f63ca39bd5a8bfa107bc55b9530d5867e94d9a715f1baf98fca6f6a0ed7f4dce1f4f6e51cb18c3b2552bc0f30e73fec5aa26ff8fd5648df11714f5ef581b1c0000 serializedProgramBytesString: - serializedSignature: b690a239a0e8a5e69b88629ce70975afc5861278d13e8969814d5a8ff15654666a5bdf67b248228d94a6e7cdbff40f3ea4a199aa3d8ce8636b6e5d8150ac370a + serializedSignature: d9b85ad50e4e9d8f4d3a2b153620a9f90c9314fe9ea05d6a1542c2442e1915131d4223ce5cf041fb6d374a9781be817d0294e8485fc8cc4c2c2c146874a53b01 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/a89739b80412d64438fde89043568c89.asset b/Assets/SerializedUdonPrograms/a89739b80412d64438fde89043568c89.asset new file mode 100644 index 0000000..c76aa7b --- /dev/null +++ b/Assets/SerializedUdonPrograms/a89739b80412d64438fde89043568c89.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: a89739b80412d64438fde89043568c89 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e780e02ec52178d0041242a8e3d0628540055a0824404a02342114eaeeee42dddddda8bbbbbbbbfdeaedbb333b937d766f9ebbdbdb3c9719de7ff890cdda33cff39d675cb6412e737e62c39c5ff3d91c36818d60f358295bcd56397f4d708e95ce3ff74c5d9fcdaa9ce372e77789736f18cb4ef226ff1914ebe2fc9ee69c55b3b5ce9b356ca9732c17f7e7b232e7ef69cebb65ce19bfbaccf95fe63c156be4bc348f4d64b3d84cd639d6298988f9e2a56a792dc6ed8a35757e8f671b9cbb6542291e48aeb8d5d9f935d7b9532dee553a4aabe716b0dd855995cebda5ce3b55acc291b944486c7a5c11137f30f7d0491eb790c78eceff66f2ef86f2efa6f26ff87c963c764ef1f92ee0bd66e06f4ee8c204ef77758f22821b3bc767c0397ff71bf95c37575e83150964f590c79ef2d84bca7c3605fd9bc863ef24f62692910d64a5c2aca93cf695c73e52dfe7d20cbfbfcb28b611c8e32c87037dfa82b09b81fbfc5abf08b6ab781c1188c7116e3c36384bc6df27f2f901f238481e074ad9ce339d72e43575ec9e44afc1ee7bac88793eeb84d9708d3c1f228f43e57198d42d4feafa3c388faa8b8a53c934962bc37841735d3dcfefbf28cf47c8a3baafe24be9fa923c1f99a23ea9f89fd269a40ce36570ee706cb438812c15efa302f13e4abe7b92cbb1d19d017b80ff69e52a79afa461477ec08e7c5797ac1cff73497550f2f3a59c0229f75570cee59e16d2b646f2bd5be579014b9eb7754ae1de18574e53c5bac80da77147f77ae3ad99df970b93e8a9e27674206e474bb91552aeb27fac7b1e53f27b0339fcfdd702720b03720ba55c95478c4c51cf2de5711b79dc5e1eb763b5e9789862ab186c2bc31cc3fc79c018797f2befdd2e1d43724b1447e30271dd5d865b9444a67a7fbc3c364bf179f5cc84083a4f94c7e62986d95c1e274508b385eb0b4d7f08f842324e935dbe4dd7021d1c39cdf693e753e471aa3c4e93fcb70af8c15629f841325d7690ba3010078e2ecddbcaf31de571ba5f173623a0d3eb75a7536cac94f90638e7c72de5f537c139d775b61b4ef347a4cc99f2382ba0f36c3a9dd94eee7bad5a02df48e5bd44fe35c7b5af459e2bbb45b1bc3e37a0db444fefa613c1bb4a8f54d2c33cc9629b00e36da40e8aedfcc0736f81737edcda0b4ffcedbcdb52f95657709dbffb3638e7f78b53d4751716efb35cce7620eced64d832ff6f79927c7657169ff674eff2e3b6e0dab652de3bf2bddd587c39a69ee3b6bd03cef9fd9d53b46d81463f27dc56db27787721f3e73fe33d7f68a2ea74bb4b7db667feb4a5e4667befc42ae4b53ddcf3364a9745f29d7180cb3857bfd6ca1717cb6329d397b34b0007991e9df6616dd8bd942d2509c22a95cf9405ec9ee3c969d145eaaef2b165cc9f6682cff26bcbe571a53cae92c74aefd9112aafdf531e25abd878e6cb9b9db6ae779d1f27c8fbef8273fedc0a4f766795c7ae0ee8aa8b4fd56e50b6ebf280447eb697fbecf01be57995cbb6cd46c9ed91800e8b5862ff6d27ed9ac8fcf9c74429f717576e5be51fd5f2a87cab463e3fcdcf31a6f2ee4479738abad5ea08cbfc7532bcf702cfee2d9f9d22efbf0fcef971b22743fcedd8d8f60d57bf76aadeb45e1ef709c8d6d5f936c8a3aaf35170d837e033fb79b2faabb245e5d15365f81f80737e7f7f796c2fef7f28cf0f70e50c517e79a03c1e248faa3d7330d3b71193e99ec8970f73c3ae6d631d2e8f470478f3bf25b3d80e9a383814dc0371c10e61befa42425d8e94c75649ece9049ee3c7a322d89fe85e63793c56dab623f3b73bf9b9e3bb1d2e4c20eb38975357e90bec78f79d8e2aef38c1bddffe6f797e22b0898731dd63dd7e7b794f96c7b119c0ee43e4b599e0da31f2da2cef5a4ce5932707e2e7a3c0fd53800cddfd53810ebafba7312f6fe0fd2caa6e777ac0964302bace64bebc9e9d116f6b6c6620ec8f43c4e599f2ddd981b89cedc64ba78a04b2ced2c7e516aaed7176202ecf09c4e54e9ab83c57de53652abf36505e9bab895f50cf13f2f8bd8de0191817eafe7940aeeefef94007ddfd0bfc71b985acff887e5f5d5c42fd615c5e146f6b6c6e206cd53790282e2f91c78be55197af5f2a8f3952eea729c8bd4c1e572490db3520f7b314e45e218f9727907b25a26f3ae1295f57fd65f398dfd7f9b9e3b75d764920eb2aa6f5f5ae8acdd5ccefebd730bfafcf67f1be7eadbc07ebf3b2fd18db85c5fbfaaec04f64db895d079e81beaaee5f0fe4eaeedf0074d0ddbf91f97cbdabaacbddc4f4be0ef587be7e73bcadb15d02617f9e425cde12e0acf8eec6fc75c5dddcf8e9a6f4537583e359e2b2f156577e9e8ae7dba4bc0552fe17e09c1f1706c25d28c3957963f7b3a49c96f2fa8df2baaadbdcee9e8f54633977c8e7de083c77a77c4e8d0fdd1de07f4fc057f6f0fcadd696bbc03d68db22e6af93dc2baf2f0671b5085c8371a5ea8bc9b8de278ff707f8edcefc7543d9b6649b3cfd47a9718a07e4f148ef5efb6702f1db12e8f1a0de5784ae20ce42d79194cd0f25b1394c9e54c2fc795289eb073dbe4920eb31f7999e6d133cf3843c3e298f8f4bf94b98bf0db944de7f4a9e2f0ddc5f2aef5feeb1ef7c29d043c9e6ef7c9982fd2aded458e5d3329c52e66faba8f6b9ae8c48b71e9bee3dc92856e6f71f71eec4432f999fd7fa624912ff50e39eaa9d2f19c7960518a8fe8644edb5646125b02bb682f9fb71549926fb0762cbe5fdafe4f99e81e755ff851cd38b95079eaf083cafea94b2dd165be97f9ebd0ce4f0f3573cdb62aa5fe555704df5b1bce6f1e923f38c58a53f6cf63af3b7ef541b6e957cee6bf01e64a0eecbf4185b1db0698d3cff169cf3e35e01b9aa3fe6c5c07d25b72aa0af3acafe4df6966763c159e01dc093bde99799d0a7e57863ac5abef31d38777cba4fa2fabf7a57f6bbc46aa48cefc1399771a98c933b715931d577f26d40e63a79dc5bdeff019c3bb2fbb64ca09f1ab75c1fb06dbd7c776a0aefcabe94d83e01dbf691320e726deb7b5a0259aa9f57d585541c2a9fe5f240ff496dbcaa7694ca67f6953afc08ce1d1dfac9f17d26eb6871bebd21f0fe4ffef7fbab7904b25f8a7d10d06d7fe6ef8f947544a6da991a9f64aadda2743fc07ba656bf0f03fa1d10d0fb4019eecf400f759d1f0f62fe32ea20f9be6c2bc40e0edc3f58ded7cd77489446543c746089f3d84ee0397efc2cc9f38964a8fec54399bfac51fd4aaabeff0e3877e272405bd7ae0187f9e5d4ca3b0ce8f439d3f757aa3aee11ccdf5f29fbc062877b32628783f09b0574516d389d9daa8ea0f2fcb0e5fb37eeb3fd959d9fb9610e94f60f54695be627ecbb90e1a8fcfac800ff236538eb6538aa0f5de60b4cf5e9ab347a2cf397e5c7a6a907ecd353f1f4137806b4dd6aefff8cc4ef2f52a6eacb7a1f9cf3e3d1202e8f76ed1db4c2d53547d5357f95c7dffc7ab23f3cbb0a6438eccf40f8b00ff577c025d887fabf0033d59f7d1cf38fb91e97a60ffdadf7a19c6269ab92fb4f9a3ef497d42fd0de88c9be839c7b5d1983958c7fe5f13ff91c93c793033e74729a7a9c10ef43b1187846e343b1067a1f8aa972fba4800fa9bed813810f9de8da3bf85a57d721727c40cc26e5c7c67e3d753e146be20f5feb4327c7fb502c2bc04cf9d029011f52fdbb617da8bd7cff54294ff9bc9c1b153b0d70380d3ccb8fa7337f9bef7497d3d0e2806cf5de19f2f95fc1393f9e29afff0f9c7339c3fccfd5f699fde6975bdb06557dd42fc87852fda8a9d87f1662ffd9c0feb3c1b3fc784ec0fe735cbd8705ed57ef9d1bb05ff5156f0cd8bf51ca19e67f8ea9f97ebff9e5d6da7fb6dffea189ec57e3fae7317fda3e4f862dfb7f866d92d7559d07cc03d0d6839b07e49f2fe5ff0ecef97dcd38724cce1389b5f6cbf0d537d518f305defbb5753665432befde18d58e6a06dee34755ef567314128d67256a7bb661da7ed5e1bf8338e3c7aa24dc64b91fec471bb17d4839ed98af9f2dd681f9fad962d2276bfbd9545df5423f8798b2ef222f3cf18cbaa6eb434ba29bf69a6ca7c62e0ef8e1c5aefdb9d9aefeb953037e589184837c2e7609784e857529b049ceb38f5d06ae5d0aaef1e3e552b73fc0b9a35bdea501b957c8e7fe0461f3e395f2fa5fe01ce63157c9fbcf05e45d0374ba4a86a9e66d750e847135f3da0abccfb434c0e16a20eb0a704dc9807ddd95e0c8afcb7a46ee427f98c9e2401b2f6a7ec96d69bc7b2df3f759a8f187eb02be739dcb6ae44257ef91aa7ea4fcf48e24bea3e4aaf1ffeb99bf3f488e49c4ba0179fcfe3fb84c6d383704ecb921106e3796bc1f64937c56cd4bbd49bef32f38e7c71b41fccb3c267633b826c7af63b7307d39782b78f656f02c3fdec6fce5e06d2eff828501d9eabddb99bf1cbc5d1ee53a9098e2a9ea912a8dde0974b8035ce3c7bbdc777875aff6dcd1217fb1eb030505485877337ffdefee4098f748b93170cee57e1178fe5ef95c0370ae1843390dfd72e2f4ba0fd8a8c61c1e48e2af6a5efa70700eea01a32ef5db944c9ef69a9adbd84b1eef0f7093e322a20c0e2b5be5ab0f307f3a7ec06554f84be0b94d92a5aa7fabf9747d03f7b302f7159f6cfffd5ab90fcaeb8dfdefc5fa04ee07e5aa39087d11b90fc9eb4d02ef1d1bb81f901beb278ffd11b90fcbeb4d03ef0d08dc0fbef788bcde2cf0dec0c0fde07b8fcaebcd03ef0d0adc5776e404ecfd5dde6fe1fae518a5f760703f6c9920e70cc51e63fe3ed2c75cdf1973903c5761b54c1c46ad3cb9062926d720c5e4d8508396e09c1f9f60befc32a6c6ab942f3ec97c65bb3877f42a9a1d90f35440ce53019f7d5a86df2af0ded3c02e7ebfb5cbb6a834604f12bbfdd7b262a26d3b9595b112b686e58a4c8dc752aa4b3ad59bc917738af6b9c8b5195fd5c9835dcb3638af96e95654ce13eb35d7b27c364abba2b2abb053853e41fc2e719e281742db34880be2aeb820b87215cebf32b01cb4dab93e45ac26e50b42cb9d3b23d874e7c8df5aec54cd1738fffc52e63bc156b01ae7acd8f9bd46c85beca81dff643293f8d2d1e03b731c99eecad64ae78a02bac639af101ace15bfd7094dcb84f6d39c6b6bc53adb556c391bef1cd78bd0e26daf72fed685592c91e975d42f70c5aebbcb6855344d74ace1dae70a5ffcbf18a98f18e1e81bb791e9b051ae28598f898b89ff63e86632bc809b26658c14c862be6ba358ae2803e7c4110c6f63bc857aff767917b28284b6e8c9f0e8ee2e2cf062f89d93be9fff44c95b8f67f94dcb67b9a27ad423896989c0727939a2361ac684acac46795cd120fe980ebfa86acdcd207ef7b972f15cf808682c0a3f7f0488a540c54eae361b149ef39ddfae72f384191542c9a059931c354b846115d20cefbd598e79dc48ae6ca98828fed772e71fbfba9b08a58cc5c57a1e57b18988b8f8623999f158d435d0459da8a915d74bcac1366a481c794d6badf0222f57d4b5ba2470712c2c51096b206b622a11de7bdbac55c5277ff549963e5e9a8b784927342c661aea62a679a61355f2522451bcb4a8b5cb8b17fea367d812f1ed643a60041be908b6c8b46ff37bab859412e7d9f00c79f361683063d2036c8d386172153084591a84791c611b8d562cab59402bd114d24b6eac8b9c96f55364a7e7dc7cbca073004116eadced1296b8615dbb898e9e68682e26a5a75a92739d26c38ecebd12e7f93251b8f1ebb31d89254ed85cde381182d7faf4bf91982c1f21191e24aba5da4150ed0fdac55135c38837d510cfe3feda51e306228f0b2686767862688625b34e519359734cf2165125b7c024778e2ab92526b94b54c9ad74c9468c752ecc48b2f13a60d45fe39d775738c6ac13adea1ae77d5d874de2e4d235e5e4d24d24976ca6eb460aa711964c5aebe28e5fecae53321875ddf0a86b8309ee1151705bccdb7a46f5b67698cabd22aadc5ee7c6025025a91bcf73aeb9fd7893c4dd72d150f1ba87dce64c556d55177b7eb6e3601bc4ae6e4b9ddf33c41e6e35429fc48ede3b6547cf168ece3b06e875c6924207ccb1fa4475ac8e5859d4b70ecaa24e3ae1bc18e9c7e22bf3ff393f71c25be2c2b7c034efafd1bcaaac4128cd3b63c0074405de05933c30aae4aebaa42cb2a483335c22e98711a6885e0cde67b184edc9dcfe5f15aedb4fc13552fdc8739ce332a105bfceb5483efc9038c90f629a96bdc85827694bb1fab2820fb4351059cf6091f58c4890f5e8b44994f52816fe4c479ff10d11a19bc506cb20bb6139cd504d4ef3862e1b4b90d374c792ecb0a849b6874e324fb2c335be9ac77d953b4373519ec78533040fa7a72e6b1045ff3ef59a35b82d562e6f9918d973e5cd647cbfd6bd85abae741c789d749c62e7992ad1b5b9367266c07778ec19ec0a61ee8f3e39e489e4b06d0ac981d22a2c01f4d279126fdaf38a4b5c67342f84e638f590096c9148867b89cb9c921bbbe5e2d172b68f7354837471fed604f7b7de3a6d788b896f2c99b4bada01179c8d09ce8f28b80f96c60ba2a6f1be3ac93cb7e11b3946ad61f5c3d42e8caa767f2c471da3c951ff8e85cb510760c28b34c2ef6d104ef8402c298c4dc5471278f5204cf096ba34c66d9c207a49b39dffab9d37789f5c8948fdd9a230f472836c27ad973b7ff1027b18787eb5f3843b281e46cf1ccc29b68aea1483b178db5a136fbf848cb72198f06d34c2a7360c277c281677dbeae28e679abcdce0d59215b26cf3e786d9627a42b6989152237afb4a45cc558b78cd66fb3ae5c5fece71adf374b628072ac4bd6cb17d7995c86bc3c4e9304cffed74fa3707facf061a860971b82e444e787b4dbe150b996f8dd009e7159f710ca9f8f0ade2c2577c72316c1374d87835898fb6f29a6b8d787eae7080b2daba72691d1590791abd72452b7f15abcf0a196f2df0f93bd5e26faf8ac2c3f64684a354bc26b2f88a97fad157bc780b24476c699d09edb10ad6482c539dacc954636132d551585a9882a585a969a5857c9dcf89fe9f35f5ea73788a9a2364f39417bdc23fcdb1b161b0f52f3aa80a52f0acbad271a8583a582d3e4fe192abe699291fb45902be43e1c21749429f2676106922939a63e9a2002bb577d494dab766852bb547eb5c5674fc55d5abcb4e141232e1b6d3756e2b7a270b5388fcbad4b3b798e6592d32d55299a9ba59776fb1d6af4a149b65ce759ef1c2fb43c5bc655e5f9a2c78570af2dcbe12d1eec59c7c8670f24cdb89397a215600ccd41400a16ad563b024344b9384fe0e99848a30b56747557b2ca6f64e1ab5f76b1c4eed2d31e17334c2a73709277c2b9df026ccdd7f3c4a0b716b4c309f251457dde44d6cd54e581a68292e116d05d5fe2b15573638bf2b9c6b4b85886c312150cd4408a3e53618db791ab66d43b2dd1643303f22dbed7482b97bee9c8ae00443a0dbeb04f3fad72e0ca97ff1ad0fc3d7bfc6e9c2e1d877d360bf3024f6f158325f1035994fc0242f8c2a79222679f7a892276192f7882a793216898b3491c827e38489c42998f0c51ae1c521854fc51266892e6f1ac0785bdcaba4bacd27af5fa3842d1352aa9cbfd7c932b7d4d73fc2fb3cca65a3394c3a9f86e9b944a7a7bb4288cfb7e2758a12d187c6439cc556860a75070cfd520dfae342a2df11135eaa11fe4548e1d3315e653a5e5d92c46ba998a6e35d1de95c0dc37106a6cd329d36fcd48bb730e1ccc4902ed720ddd83c1cd25998112b7446f0713417df960eb299a2c3af44ae6e5a278af1f01867631a94eb34e039dbf4da8ac1ec34ab053b6148f7d4207d2524d239588ebc326a8e3c1753bb429769b608a77631a6766554b5e7e924f35ac72a86d43af8668de16b1df3b170d660e1ec9556383b63a4aaa292da4527994770b52682b76f192e8277c584afd508df2fa4f0dd30e1351ae18f8414be0013be4e23bc47ab70c21762c2f7d6082f0d297c774cf87a8df0b3420adf0313be4123fcca90c217614ebe4f54275f8ca9bdaf46ed8eadc3a95d82a9bd5f54b5976824e78a296e995c59149cfd146ef105dfc833b5a9a07c4b50ddaaa264e1635d4a4b75f1c24be803752a8528ca4b316f3a48e34d9f844c046598f08335c2178674d56598f04334c28f0a297c3926fc508df0b66dc2095f8145e6611123b31c137c38d3d4058709ef5c2dd258b69890cc17eeae92dfcfe69b27948981eb12e1fb5e87931ab8e62bc1b3a5f756499fae70bc7d8473358cd67b625a1fa1d39a8fbcf24e5cafdeec3625dd66886e5e61361b246bdd8342e9b512f38123353e706b4807abc08c3e2aa20f54eaf25931e1b79c349fc5e691168bce7bbe73c332e12995a1679d26ce938f4e394f3e46e4c97cb2029dae58febd4a17ddbc6e7d2c43ead67c13d7e65ce55075ebd598cf1eaff1d98290f9d61a4cf8091ae1bb8414be1726fc448df0c3420aafd209e7d51abeed6ba46a4d35a6f6c91ab58bda86537b2d96499ca2cb19b93daa73c69f5787c93f6ab0304fd585c927a2f89739d688096aabe3f61b08a3c33a4c87d3743af051dec9222df25c8af7aa249e90154693bd314d4ed769c227b32e72fee539ffc368c4dfa90a1d53eb31d73b43e37adbb70be77a1b30c3cfd4199e23a2c0ebc555b3d94ac5586e89531857882a4475929972ee6fd789c3a0d8074371960645a39028f6c5849fad117e5c48e1fb6139d3395173a6fd359273c5ea07de7d97a906572a1bede80bf67399a664e4e538dfde3827c6e7eba5bacc2edd2576da6ac47922f84e710c13ee7c83c4d101986b9daf71ad5742bad6813ae1bcce71818e2caf735cc8d2e9cf3b08cb2a2ed26515bc4dcc6340650ae3444cf977a3e1f57b55a6841b123a58a70b2fa4f8bec2e82a8e600093f0000ec18ce59be346a9b71f8a09be544791fbc882dad2de1d35d83d64bbeb30ccf92ed338dfecf6e19cef704cf8e51ae14785147e04e6d957609e7d655a9e7da42e1c9ee55e954a64279848701426f8ea88828fc6bce89a88ee790c26f8da88828fd509e671cf77730e4e1e6fa44bad09268f1f8779e1f51a2fbcb143382f3c5e279c17dd7c3fe74845f70998da376ad47e21a4da2762c26fd208ff25a4f093b094793396326f492b659e8cb923df03392eb7e45397791d9b77cbf36951cb9d529f5731f8028bf5e2ce1ad1cbc5fb8ec2f8ee299816b7e9b4e850ab056f1f54327758dd9dd898be0ea7623adcaed3a1bdd421dff9bf5454dff83beb9ddfe96b701aa6c11d3a0d9a82b8e0cb1f794f4b98d04ec7dcf74e8dfb6eea18ce7dcfc0dcf72ecc7def4ecb7dcfc432bd7b34995ec39099de5918a17b3584f6eb148ed0d998f0fb34c23786147e0e26fc7e5ddc86147eae4e388fdb07b0b8dd9456dc6ec492c38389b2a651759c359d8769f150e2ac69641d664de7633a3c9c286b2aa8c3ace9024c834792654d3b8bf0c275165d88b9efa31af73d6e8b70ee7b11e6be8f61eefb785aee7b31868cef701ea5a2770946e7490d9d2e9dc3d1b914a3f31446e7e9b4e85c8619f18cc68835218db81c43ff6c44f457605a3fa7d1fa89905a5f89a17f1e43ff425ae8afc28c785163c48a2ee18cb81a13fe9246f85121855f83097f5923fcda90c2afc5f0bf82e17f352dfcd761cec9bfb68a166bf9755cac5d8f69f1ba4e0baf581b5587c5da0d980e6fe87450c5dae83a2cd66ec4347853a74133e6156b93c488ccea90f33d6fc21cf82d8d03afef1ace816fd609e70efc36e6c0efa4e5c0b76046bcab31e2879046dc8a097f4f237c76b770c26fc3a29b7f84274ab9703ba6f5071aad3785d4fa0e9d70de3df2218bd83d7227a6f6471ab5bf08a9f65d3ae19ce1c7bab4c5877f13cfe82e761e5d23e65cabdeed6cd1e6ad11336df85c99d9ccdd24d9ddf4a1c4b9ea0ea0ad10e72adfe4fde5ee4c969162268b1a62dbc0dcfd32b3c59083fb658c6c318ba1546e23b292b9436f35721e8f92ac9f2b532ee7fcc0d935617be1efc622e8134d04fd1e3282eec1847faa11dea37b38e1f76299d1675866f4795a99d17d98115fe8088534e27e4cf8971ae1ef8414fe804e384fac5fa5921925e8badea4119c2b3654ab9f894bf1dbd1d5edc4a5af75bcb4238efc3b8089272e45d7151ba17c10f3a56f75a9ad47385f7a082b22be8b5a443c8c49fe3eaae447b0f2e18754fc3f41a6f9a8ceffc5b67fcbeac5ffa36c1499d8f37f4cd9f37f129e3f2481e747dbce521f138f61cef37354e7791c739e5f223acf135832fd55934cd7f60c974c9fc4b4e61fae8eab12f19911e34443ab4cacd5d3adf2cc16d5a5ec9013729fc2f4f84da7071fdd0f27ff694cfeef1163e7192c76fed0c4ce372163e7594ceb3fb1d8e1696485ac22aaf828abdd0429dde9d2cf6146fea531f2875ee18c7c1e33f26f9d913c05aab9116e7d36fdf9902f6021ffa30b99b7f6dd6f37e5d67edc21b776a7b0594e8270672485d1e0454c837f751a74d66a305dfcb5566cabe2d6fad35b4cfb12a6cb7f3a5dbaa7a84bfceeff61747a19733c3ec127e8786db3c339de2b98c13c7f899227bc8a096e1051f06b98e0861105bf8e716ea4e19c1792f31b98f02c8df05f420a7f1343d2382292b7748279eed32415c1091a436feb04f37668d318d20e6d164ba71dfa0e86bdb906fb337dc3617f1733a2056644cbb48c780f33a295c68896fdc219f13e26bcb5467851ff70c23fc01cb34d4c939df285d37318dc3bab54d4b155469ec3068b026f95fced5f9a952dcebc09b16bc41d95e556b30ab16b5035837b63b89d4a7c6ae69a40cd4085c33b93dc2276596d769e2d32f3d290d3113fc458b4d5b1e0fbbdc10d38dd5aa657c07afb54ec2d3474e79fbb9d67ae7e5ce7641246394f875dcef611e630ed340e7354486ffc184b52edb124d521ad24f5096644478d11d78634e2532ca63be9629aaf3ad277912e909dab7cba306f5db8fbb6258ad39c8477078b29b46eb7aae7d7fe14b05a7886ea42f5df5b2bfc6aad26152d111aae061db0aeecd5b2751ac6bf3ed3d1131fd78a456c9d7e8ec54b675dbcf0d309325ec255d8bec0c2e9a20b872bac16d578e1a5b764e64bccadbbea8abb01e1dcfa2bccac6e3ab37892d42d99595a6ba25a0ee35f4413c6dcaf751af11d16bba7523d49b007fe3718c71e1a8ebf87e4f82d26bca74678c1c070c2bfc322a9972e92f8e7ad66caa663b9ec59f2f68d0c3b2cf23d66586f8d61f78634ec07ccb06c9d61bc65e68d5bf17998eba459a5ccbf5d20ef1a501fa9086bf08f984e7d743af13903b39cb0e07a42ffba9049b59a84d1e2274c8bbe3a2dba82ec668d4f93d56c9c93892f93d5a9f447ef7fc6f4e9a7d3a715d0679c28f8d2ddb5e9172cdcfeba70b700e1e2e1a7970dff8a258401ba167b4eb884f03fcccc813a33bb20d9b0aa63f877e70fbf3dd76f98a98334a69e36289ca9bf63a6e6446cd7fe81151c8323161c7f623886e80ae09038fec2b41e1a51ebbf31ad8769b4de3aa4bffe83091fae11be3ea4f07f31e12334c2f9473bc208ff0f73bf5cacc2937a91b35e94b5610b1c164334cad369d4218502c7d5238c0e314c8791618b9b39e2edd5a2a59f7e71d300d367944e9fb6401f187eba854e432cf4fc64349269915ed1d348a70f4f10059a04513c245c82c8c28c1dad33b62752f4540183bd0268197337444fa7106a8c195da831fa8d90b940134cf8185d611e9268538c68918e28631ae909b834c3a48fd5496f529b81e5a61107cd314c5b6a30fd3d2c1ca61698f0ad34c277191e4e784b8cd2d6116b19ad30c1db4414dc1ac3b1adaebc0e89a30d267c3b8df04d2185b7c5846faf11de744438e1ed30e1e334c2678714de1e8bccf1bab4b496a5b6136eb4b992eed8e322dfec4bb3674e76c0a26882268a16878ca28e58144dd445119f361e3f79358c319d74e1f10ac624acb37a725a9dd55be8c2e10dbb29a9e42307e0823b63c0a6ea80f1e2273714a02e98fc693af9cd19d37a749810bb6221ee80f501c4bbc00ce1e96a4370ef4e384fef8669b2a34e132e814f600b5b1274d785c21d6c7a8c0f99fa43118e17147e1e2ebc874e383f9d11e35dac7ee13bcc38b8c9c61ecf36880b200b0fa027c66866a29e22370fac70fe5a2bb7a4290f1937bdb07067619da4fa7057c97c324cd8bd3561e78aaf12f37db0eb639fd805723263b8ed8b666bf2b85cf1edddae7176a412da4e8ebcc63c4fe63f23d44f136493a23931de09945e48d8b4c86ccc2be6eabc828f48b92317aa593b330d6fe8a30b931771c5b1f885f20d74e937c142f9be9841f3b0ea3f37c7db3e3f8c21fd3043e66b0cc90a69487fcc909d7586349586cc6025d233c2952103305376d198d238a4290331e1bb6a843709297c10267c378df0a62185e76091b0401709fcfb4fb037c36be8e7c8aaef3672fec130712f5f5e29a8bd325a5e299457f8b7caf8f91879be5c6474357243df5271afc8b9373854640fc6ac5aa8b3aab578cedfb3976ecfd1105d41203e179ec9fdeb268831fdaa340a80dd637c3cc30f680432cf7d8f987e4fb944a163d9f4501db76cce6d5106b9b9cfb955c4b9a2082877aecc123325dc7917d569305d140bfb49d8c5826cbf38cbd3d50fa33e4c974e781958128b382b633826794954c92330c94ba34acec532da524d46cb4266b47958965416b1db6824c66359541ea330c9cba34acec724af882ab900935c1e55f2684cf29e51251762925746953c0673ba8a884e5784a95c1955e5b13ac9bc91b82a1595130c876e89a9bc3aaaca5b6194d744a4bc35a6f25e5155de06935c1555f2b698e4eaa892b7c324af8d2a797bcce76a22fadc384ce57551551e8ff9dcde117d6e0226787d44c11331161ba2b298a493cc9fdf27159513ac67988ca9bc6f5495a7609dbffb45ecfc9daa13cc7b54f64f45f031b8e069985f1c10d12f76c06a5d07d641ad6b472c060f8a1a83d331a73b38a2d3cdd009e62baa0f4945f04fb8e099580c1e1a31066761820f8b287836167b87478dbd9db0d83b2262eccdc162efc888b13717837c5444c8c598e0a3230a9e87c5de3151636f3e167bc7468cbd9db1d83b2e62eced82413e3e22e45d31c1274414bc1b167b27468dbd05baae9e3ece698c7f532bf35b46e8c6c5eb76eb889352898bc138b185585c9c1c352e76c7aa0ba744ac2eec81f9e5a911fd721126f8b48882176369fff48869bf048bbd33a2c6de128cc59911592cc5049f1551702926f8ec8882cb30c8e74485bc0c53f9dc882a2fc7046f8c287805d69c3d2f6273b61cd3f8fc881aef89697c41448d57621a5f1851e30a4ce38b226a5c8909be38a2e055188a4b22a2588d697c69448dd7602dc3cbeaa065b81786e3f28838aa301c5744c4518d65715746cde2d662a0afaa03d03598da5747557b1da6f63575a0f6de98dad746557b3d26f9baa892376040aeaf0320fb606adf1055ed7d31c9374695bc1f96c86f8a98c8f7c704df1c51f00198e05b220a3e10137c6b44c10761826f8b28f8604cf0ed11051f82f9db1d51fded504cf29d51251f867579dc15b1cbe3704ce5bba3aa7c844e32efe3be27159513f4711f89a97c6f54958fc2caeefb2296dd47632adf1f55e56330ca0f44a47c2c96fc36454c7ec761821f8c28f8780cf24351219f80f9c5c311fde2444ce547a2aa7c12e6178f46f48b93b1e87b2c62f49d82097e3ca2e053b16ad11375502d3a0d13fe641d083f1d738fa7a2bac719ba4ed8bece696c25abaf7daba37ffc367137ecd3a9f8d1469cd999586c3c133536cec29ce8d93a70a2b331e1cfd581f0733026cf476572ae4e32f7d0172246e3464ce517a3aa7c1e26f9a5a892cfd749e6fdf42fa70223413ffd0558a6fb4ac44cf7424cf0ab11055fa413ccfbe95f4b4570827efa8bb1d87b3d6aec5d82b17823228b4b31166f4664711926f8ad88822fc720bf1d15f21518e4772242be12cb3fdfad83fcf32a8cc77b51795c8df1783f228f6bb0bce8838879d1b5582dfbc388b5eceb30c81f45857c3d06f9e388906fc0587c1291c58dba8a1f5f69508f153fff4740d40abfba1b7fff54c72c166026165e7c16e30b2f7259988f96a4a32fb620e3265db4f3d8f93c9568e7da23826fd609e6a75fc4e257fdaa9fb800b270bfba05cb25bfac835cf2564cf8577520fc362c77f83a6aee703bd669f74dc44ebb3b7482f9f3dfa62238c1e2f03b31c1df45147c1706f9fba890efc63a3a7e88d8d1710fa6f28f5155be174b8c3fd55162bc4f1700df3df3e754987c830bbe1f83fd4b44d80f60b07f8d0a7b139677fcaf0ef28e07b1f2ffb788e5ff43188fdfa3f2781893fc4754c98f6092ff8c2af9514cf25f51253f8649fe3baae4c77515adfece692c935b42c015a3e96d09f14fca95a77f63faed1b52d101ab103d81a5deffea20f53e89453edf942152e43f85a91d6b105deda731e10dea40f833588ed6b08166e9fc44713ac77196b96c22dbb1f67b393319dfe2706f11c12b65d48f10fbad4c73eecf72eeac626a3b447dbd59372b973f0d5d8b3bfe6ae6eead15eea3f7cf625636d2597944ad95f39c1a3c4f746e02ad147f4fabdddf99efe1e526d069b54f4eaafd4495ff23185592c75c71b7d4915823ece272fdf43c09fcf9707a60928a195fa0bf5cdcf533858935c87bbe2327ecae3ccf61a4b3307f8221ba36e53befb8b4563b99e222c737aa449cbbd616cbcf8205b5f5dec5afd7953f3d8f59d95867e5b6012b2173d7cec922c62a858d412dfd3104ef244a2bf0ad3096bd8059d64467d97629c59fbb237739539b16448f39ef4e18db5ec46c6baab3ad3060db0c113b2ba465fc6c7dbd59f2126649339d25c765383ff3dee11f3d511bab94826fa95587f072c80eb782972535a29a01733d5ec1aabbbced658c7a731df57129a58de98246b511b9da2b987d2d74f64d27f42a7e752f110cb7caad0e7b9fb4284173927462f555ccea963aabb7496835aee91c618bfbf11fd746551af3ab4b25a1f874917e6cbe86d9d54a67d7aea16b7673c51d7fdd4e27c1bd0637581a279a3a516a82e9c4f3eb188fd63a1e3b66a4cca62ecddfc06c6e83d553c2f980f2616fbbb9e0e6e7613c228c656f6296b5d559b62562d93c913e2b64ddc46d6aab56cb7c998a4be36283a68df21666513b9d459309735f15abeede98ee179de229a46fe9db98a5ed7596f24de852cf29fc16c0dd9a3993a92296ab446b68a99856547756bd8359d5219536813f5c5843982762a14aec4d59e65886977e7e197567d9bb98651d75964d489a73a6d62ac0f3d0446dd67473caf7301b3be96c9c576f35eac494a29792ef631cb6d071d88d90c3149186678b6ecfe5b2e5305fa484f2da5c290c0d984b8421f20146a4b38ec8561172abb5c24abea9df3259b7c0fbcb8ae39e0d63d387984d5d74360d436d8a1f1d8771177fd7addf163b69bf4ae8bf2194d61f615a77d5695d469c46a3f966aaf58974d2f0c718a76e3a4ee3d1d8e5adf725ce432adf7677514f5c1bd24baa6b0b3fc12cecaeb3705a480b771631b92a857c2453f67e8ad9db4367ef1c42cfaf66e1eb867541e0338c40cfbaaa33ba697a1ca831d25bf53966552f9d555342faf12491cbae962db1faf6e12f305b7b63bd67616370b27822de1b83b582d4e586b1ef4bccbeec70f605e3729ce817e22930596b93b666f815665f1fccbe306d7f7f9d0f7e62ae24492dbfae5a005f63f6f5d5d9d79f25eedde59fc6a3d0f21b4ccb7e89fb68c3c4c2dcb46281d2f7bec5aceeafb37a389ab68a6ba75cc07af7b2da71095e4ed668db59e98dd37c87e93d40a7f75896ace53c4d8cf1f25ee40af149f849a27ebd56d38f912806d2ef09f81eb3672056b34c9c4678afc66c51dbaad694b7a98c09f15acab23ab4f007ccc241a9f475e8c778a609dfe3e31925b2af313ebe3239cef32366630ed6d3984a7f4e2a56a69763a46fe94f98a58375964e4d29368323766e3a5476d767bcfe8c593b4467ed2e49e3957684837aece3178cc6501d8d01011a5e0f4570a4a34c68c26702d44d19f12ba6e7309d9ea3027a4272419da7489d53f5bc746bbeffc32c188e5980f726c145c17ef2e522cdc10f1fd75dcaf90db36044b8d6a5de82fa6a33ff8e59958b8d9185ebe5cb7cbfe51f984579582f7df2b66d2a65582a2de4f0ade8f4fdf54f8cc3481d87212138a838555fc5ababdcf82f4ce3513a8d07262d9be8f2e3bf314df3759a8e49d0d6087aba5f73f743e9dea80e457af907b3a52095d998584d6f9261b5bc7f312b4763333bea723403da50ccdc6f4ae2f1192f25bdb190ff309b0b75362f64f53b4e07b9a4ea0fea9d3054f8447e2d9531a98cc1ab10c3f8ba6719e60775e3e331ccb2a254da6c61cbbbe8b5f6f42d6d80593a3695faf004e1b3ae7fae057d71ae8f17b28224f6e94a10fe56180b1a62166c99fa3c511e66183f84f661d7eb2a861a61f66d85c550f83e48af94f4ee4fd3d49ad32be3b3300bb6c6e67ca6dae69acb92b5b928477e1b63766d83cd704f3f66f4dfcdadabfa6213cc926d7596e447b2c4ffc1dcba4b274d311bb6d3d95010d906f8addcbab3a21966c5f67597da79bff63c39cac5d30a7fbaee2c688e59304e674151da16c07b5398ffc3b675674d0bcc9af1e9cdc68bdecbe7e5817595fa5b62364ec046b912dbe87d3c35a8a1fa782dae37f6e1d544b6a657a76f85593d319dd115b7de30d7797809737b6896b2fa5e81d51ab370522a753b3de1f4fa3a937b6613e75f4c7c217e9290e28e55ad16eff0b65f2eef328ee5d5e616236a5b4c237cad2bef3a0fbfd2890d9eee8b6bdb46eab3d8b884c90ddc8585e267508c835d2b1b18b1652cb8fc5af5419681f8ae16dfbd2963ee4a0dbeac7c8453e2958bb7d442f26456e85a8923403b115a97dca6dd9185e131f1097b28cb21cdbb83363b4ba7f058ed2d63b541ee206ee3d034bd29b9165379680df53ed4398e2c4c1d3add5d01aace17e3fb4f2d12c1cc165d5af832a8a42107bfca140c79b810a0dad749c5cd0359804e5c57e16eee54f42ae60eecbde3c86c92d5208fc7c8344a6c7ceb8489a29eb0c601e7cefa56650e06b0da0a847c7ea642b80325c2b6ce89aa024f1515352ea04434fe79b56b165b6905b01b9b7ac076a404d65124d5452c8f79e35236836bdbc203379d125c7b0d382e7095f3129fc25223ae965a016d31f3a0cda0f6367ff29cecfc2e9723a06a8e9ceb753680cb69e9819b49096e0b511fad4eb958b001de69a050984509af0548aab37c23183660bab0a787693625a66600933755dc06442dbb788876a244d48979155b381b16ce429954db5ab001dd07033c747328d13516e8aaadcade1bb5f2e0cca584c3b7509c55db5c523301dc9eb839a2bcac617c05122f2167cb9e421b0016f5f2001653026c0af22eae269f1c6103a0e20e1ea079d499fb2c31ceefed9d6547e594011f9a9f291f524bfe6c0094ddc903b4332520be11b0aabd4f62eb85d535b5554e3eefd99de538477858a9f0b70a27401b20f21f0571174a884e6dce078ff78ef1ad27ca6a37072fb5bc5edf11f497ed4a89b295ccd394bf6d9025a63b726803aa1e206fdb2d530d6fde8e8453b7545bd2a69ad9ef4d3c700ba81bde101c5c0f3c4e34c5797ddf9bc56d03bcfd401fd9424a782d4189ea2d63751723db00aa08d4ce76a7eeb69e2192dfcac0ee5a139dc7ab444836005bdcc003b60725b0ce8cf912de3831f0e76f88fb379bb401df8aa11ebe4599ed87f5cfe52db5ac38a800c3258be97bfd794d6ca208dae67ada13591eb4124a68cd01343ef2ae12ad0d9036f5f7202da14e9293c4806e8d08dc9b80e86da9e9e410ceab6bac00f709f0aea594e05a83bcccd601383e6b48c12aa51fee753bb0570b3176b735b7065e5696297078cfff7a566e4989d93fc703b78cba6b7b8e036d024b7d1b671b001e255aa04db202c2832b6dd29f95168e3a3e7fae0d733b9cd688ab6b65edce379fcef105f3345f0ee7c3e5a4ddf99893b480c849792e474ee871f89c342775e5a4d424cc89d89b981362a65e4ea8b22327e59a724ea89a4f4e5af9494ea8feaf9c50cda39c94e69ce5849a689513badb49a7333eb526276e343627615f4d8e767c2d473b629283cc23c849300d2307199eca49d2c59b93d6c0690eda20c90939c09f13aa5a909346af8537e95c3f593c8f4f3a5ff1fff97cf03c3e1fbc9c43e05fafe23f6ebd664fea7acd22b1d08a9bcdcb9ac4db778c746a17011d7ac4e9e0ff109caabfe8b469e6abe1b44ec5c0746a39e3c01cad9526e11c6525ce6a80b3c2249cf956e23c1ae0ac340967819538af023857998473b495381f033857538f1e2d92458c1fab5b21e28f91e16b4285af25c0b72613deb81cf547a8fe2256c40ae970b6a4c2d908e0dccb249ca3adc4790bf370569984b3c04a9c67039cd526e11c6325ce2f01ceb526e12cb412e73300678d4938475a89732780739d4938f3adc4b90fc0b9b74938475989b314e05c4fbf98689178649510836fd5954707328b0a640f50e3dc403da55a752ca7dac9cf9faf12cfdad7b09c003c741f4ab0bd19ecf54f7dd4cb66b87d00dc7da9671627ea0481e278496f5f0b7e0cc800f6a344d946a22ccc7cf707991fde01fc70ff4cc02bca3cbc6fa8e06d02f00ec8c4f6195819ae2c254dc0e75161ec0e12f081d4d3b91361f4e785a45d1c64b9e157c0270f3209e6180b617e07601e6c12cc020b617e0e601e6212ccd116c2fc02c03cd42498a32c84f921807998493009c723c9607e0a601e6e124cc2ce0d32982f0198479804d3c686e20700e69126c12cb210e60f00e65126c11c6b21cc1f01cca329610e91302b9c872ac4514d8286134b1785da899cb4dbb80315f26b41a3f318fa65892bc4bc62779eb33b03d7bebea296c04b8fadcf3e4bfff72b08bdef002a945380f71d478972505c82773fd63099a98f0f8f77fe73ef5c277ad56b58a24de9496193e5ae2b01ece333e1b7a9155536a2ec05b280132851f6d26401a97eaa8e14ed315468a7022f3d91da4bc789655cabe5e215fe8d013eccb64a2e68534b7adc8552f615548d80979e9489dd99473aff2b65e025a27ce7576d9e167b0c40787226108ed9ec103e02109e42ff1d0477fc5c1dc70915dccfd1d93c4efe108078aa498b0548e7c491e1dc111432a799849374121719cef500e7e926e1249d624886f37480f30c9370920e0593e1bc0be03cb33edbebfeb9c4842344eda8503e01509e9599455679999f28d38d0adf5ba0143fdb9cd96e36761517034f3c271328e174d7e94ef3708adc056199f3d2fa4cd42dc9501e02bcf25cfa210cd8f9bb88ad14e8c68b3d0c564a51939d23df96216e37310b92782b007363267a86d68abd5aaa6b072bd4060feaa8ebd7242d7cc8d05e0ad09e9789a1b654575e10e69f64eb2eb60130cf370926e1203019cc2d01cc0b4c824938a58b0c66018079a1493009271b92c11c02605e64124cc269b06430c70298179b04d3c6857f6300cc4b4c824938a58b0c667f00f3529360128e4092c1ec06605e66124cc269b06430070398979b0493b0054406730080790525cc6c16df7f146e2e1c61f94e3617ae0af4295d599f733983fdee84b92859af7b0ef0d5ab4c824958be93c11c09605e9d897e77dedbb94e4c88e5fbfd66680a0219be2e00df3594f8ba027cf1530cb9306f3f049be774bc02805e9ba9efbe6f5ed3628e0608afcb04c2c2cd0ee15600e1f5991827f76f79e2cec2f476e4e03b48db3cc7e83380f306b36b97849dc464b5cba340edf2c64ccd83f3462ce1a01bb98f928d011d057cf42673e6b0dbb8747a6b80f2e64c558a927db9c1e6fcb30800bdc5a49de1c65ad973d416e497b79a84b3c84a9c7f03efbccd249ca4db8d93e1bc1ae0bcdd249ca4bb2590e13c11e0bcc3249c63acc4f93ec079a749380badc4793fc079974938493f734386730780f36e9370927e97850ce75e00e73d26e124fd6a1019cedd01ce7ba9db45a97ddf6f8e508d7f6190b05db40315d07c00f4be4cecad590fdf65215b0e5d09e0dd4f09af3b4b75a5b97fdb09c2b9473f5141bd0c342d1f30112a617f1219d44b01d44d2642259cbf4906f52200f54113a11296f064501703a80f990895706e1219d49d01d4874d844a38ef830cea1c00f51113a112ce4c22833a03407d94126a3e8b1f43f22fd29ac0bc6ff0ba86f8bfe8ebff14b9f709e76251a3558329849190471509fc2b222a121e336729ac8d5b9dcf04fefcb8b94b0e096784920d37bf0dbcf4097376f724dd7485cc4fd701984f9a04d3c62df9f706309f3209a68d5bf2af05309f3609a68df34a6a00cc674c8269e396fce500e6b326c1b4714bfe3d01cce74c8269e316a8b300cce74d8269e396fcb301cc174c8269e396fc1b00cc174d8269e33e4b0701982f993d29dcc6edf7c782b6fbcb94785b49bcee965515a215efca2ea7dc6789ec73b70cf8e52b94e05a08707c4cbe82158b17c9bf5c904d05ad3d80f66aa6b72d4fbdafc8c6cda9760209f9b54ccda69f21ba815706ba89273aaf5589106d9e4ddf1df8eaeb94405b27cc19abe9d035a742d700a07b83121d4f4dee0c26af34f6e791936a0735e033f695d35f03a46fd6e7ba23fbb757e90450be9589b5ec056c735acb3e07e07bdb8c4f8fb8a3986b84c7bae393a49e49f61debfb4019fe8e49fb6e93766a9079eab600e7bb26e11c6525ce1280f33d9370e65b89f37080f37d9370927e54940ce7c500e70726e11c6d25ce4700ce0f2971f663f18bb327b1f58c4ff0aa616a01c22ce7f55251759f23c0badfc7aac84c1393ec6b061d4155ea239316ce8cb572afd976c0673f360967919538ff01def9894938475b89f31a80f3539370165889f37480f33393708eb112e74700e7e726e12cb412e78300e71726e1249d1f4786734780f34b9370e65b89b31ae0fcca249ca3acc4b907c0f975a686dee68a364f8d23791ce3df0b9e2f976d978a65db65560fbd2d0240bf31676d868d530ec78336d1b799988ba436ee75371258223a42d443b6eff7b914f8e57799d848a01ebe3d48066f5b00ef7b73570911164064733fae05687f3067c261a195ab84ba821cf3479360dab84aa81b80f99349306d5c25d419c0fcd9249836ae12ea0260fe62124c1b5709b507307f3509a68d55f68e00e6ff4c8269e32aa1a600e66f26c1b47195503300f3779360dab84aa82780f98749306d5c25d40bc0fc33132df331996f9993351f1f601ebcbfeab3bb2d639b501d4085f218e0877f67c20fc76e463d446f023ffc873e475ca1f904c45c87c952b6542ab44c6c79ca6719d9d787de02c0fcd7dca55684d520b2fc723a48e4ff99f30d181b1b8e438197b286462c262816f9e72a91fcb9b84a5ab4641bf79e0fbc34468936fc6202c21a26597eba1bc0d9c0249ca3acc47908c0d9d0249cf956e2dc0870363209678195381f0238b32871764e823358c2dbd8d1713280d9d824983676749c0260363109a68d43bdc702984d4d8269e350ef710066339360da38d47b1080d9dc2498360ef51e0c60b63009a68d2df60300cc9626c1b471a8f74000b39549306d1ceadd0fc06c6d124c1b877af70730db98d4a0249da149d6a09c0870b635092769f5880c670dc0d9ce249ca4eb81c8701e0f70b6370927e9d254329cd7019c1d4cc249ba709a0ce7930067474a9ced25ced1ceff4a197889d894c2f6852b97330f61274a846a378fe4c36c135870cfae718ed02ab1451fe9ee5d9fc58820df04fc740b4ac8c9a6d178aa135797c83646791aa0ec4c89b2a74459e13cc43196c99d676631b5df0c8e96d047c9c06e0060bb5082cd0e80ad10936dd60a31de749b44ed261b9ba0cb01deae99c802b0992119fb481ed94cba2d00ca6e9428fb0894d358b5d85a8a4ffd2a173394f8eb9eb72e622b0570be0bfc52e76ff7fe64e758e68825dcc09cac5ad50cd409bad76771657fb2cf03beda831265c7242895a5a4f3eacea3c27827c0d833138553fc94c5543ff540380c42b6857425c0db2b1373edd25b804d382a4f3623f4639097f6ce44068095fb5e0640988f926500fb038cd99418f9c74866cbce11b549c534e1993cd9db5796b705e0fa64c2fff26a7db054b4eddd5d3a6ddfdafc6180b12ff50812073651045cc6dccd52f8a3fb88ed7b5c9c73c45dbe048170139f195430470398fdeab37e99b1afb093b5858e002577ff4ca0cc4bd062b7bb27f455e0950332d1995cb0d97526af00080766a2738e7be32451dda9114a4c775e592af2cb596c6fd17d5c25d42a77c2b579dbb3420076507df61ef95be4364e469c0650e650a254eb300b024590cdd5a02a006f30253cded4f5b7ae6b447d72b593b0d7892b5c582965959cac49d80e401c928941e0d4f77627ac0291edb1d91a5481869a84b3c84a9cbf01ef1c66124ed2af6590e1bc02e01c6e124ed26fb990e13c0ee01c6112ce3156e27c07e0cc350927e92e486438ef0138f34cc249fa9536329c9301ce9126e124fdac1819ced500e728937092ce8327c3b900e0cca7c4a93e169acf36a78f854e04f80a4c9a0a3b92b25b830ce76cd00a1a6d124ed225ab6438f701380b4dc2996f25ce3301ce3126e12cb012e73d00671125cea6424099ec7273a76a93e1229bdada1814356329710d62f1bde7fe092eeedcf64af1371fb8a811222709c0dcac62412d0333de2651c1ce03b0b7b40936611d940cf6c100f65699a8838e1415f60c0f6790cd7bfb03e0dbda9c7519849e4896c76e0245d23699183de743bf53181fcee583becbc5f87995d583bcc7036fdcd69c69d7366e2c351778e37694283b313e4ec98b9352a616066093b6aa2d4cd64d814f6e6feecc601bf78abd08a01d97894d29529bd3916fe57e5dcf0298e34d8269e31499e701cc0926c1b471bfae2701cc8926c1b471bfaea700cc4926c1b471bfae1b01ccc926c1b471bfaebb00cc2926c1b471d5e4f500e6549360dab85fd70d00e6349360dad8b07c01c0dcc1249836ee58fc2280b9a3d9ab7a09db4464bd9bab4127c874ea4e90e4bd9b8562263c6171944505f25e007246263a41e2fd34956e101bbf4f7d18403b937e2f0f3f5ab7a398c35bc57610a3436b12ce5322f45db2594a0d411e3bcb9c954336b6e47301cad926cd9f2ba22cfdc93cb33948fa3b998473b49538ef04de39c7249ca4df7921c37909c039d7249c63acc4f93dc0596c124ed28fda92e17c1de09c67124ed24d7ac870ee0a70ce37092769bb9e0ce76100e7ce26e124fdb01319cee500e72e9438f989dafbc8bea6641b80695793bc6e2ce5e81099d7b501d5f3dd4cc2596425ce3f81772e3009e7682b715e05702e3409678195384f0038773709e7182b71be0770ee6112ce422b71de07702e3209e7482b714e0138179b8493741a0d19ce35006789493849bf2248867321c0b98412670fe6ff0e01e750c3f83070f0eb03c1458384e340648b0b8a40757e2925d68101ac4b58fc4865ea639a84a8c91aa2b703d4a599580a53c436b78d241f079940592646dc95b7560bffe359c06409af4c3b99c1deefbcac05deb9cc9c554636ce469e06502e3777710ce1dc25b23cf45e9001aca044ab76e91c19f0d50ce49e64f0b603f0cacd9e574738d59b6c5edd9e20d9ef599f39a87ffb72c2293564db97df0f50aea444d995b9dbea431f2c1602d4cae1496c3de31b5cc027ecf3cdbf40d2afc8446314ee07af2b7eecae87be0670569a3bf3933017252ba4e683a4bf8a126d7f16fcde20dc2e40ff09d229f2e58c7d2c6f3015e60500f36a73e67fdab85c6106c80cd664a25aa53c9627f7d2c036039b5f0fd570e0a97b99b44718692f3f19ceed00ce2a937092764b93e12c0338ab4dc2493a684286f3488073ad493849c7efc9705e0e70d698849374760919ce4701ce75260de91551ee274236a4d718e0dcdb249ca3adc4792bf370ae370927e966aa6438cf0138379884738c9538bf0138f7310967a195389f0338f7350927e936e96438e7029cfb99849374a730329cfb029cfb9b849374d779329c6500e7019438bded7ceb61dc93ac83ee7780ef40faa963d364d7b1b7d7a73b756ca540cac73e973a7fbb42273bc732e7a9520b5b431d00d683323116cf035e2612b892bd4a3e629f4fc600bc8333319d11cf21e160c638562592f906dacee2393122acbd4193f290fadfdb465589ec9b0eb6030079a829206d9c57970b401e660a48c281613290eb00c8c34d0149d88b4906720d007984292009e77992813c0d803cd2149084d3bdc8409e0a401e650a48c2862219c8b301c8a34d014938cf980ce45900e431a680249c1c4306f21600f258534012ee304b06f24a00f23873d667d8b8c1f95600e5f194283bb33073df465bf9858d1880798249306dfcc2460300f3449360dab82fe77fcc83799249306d5cd3c680679e6c124c1b0ba05f80679e62124c1bbfb0f13f00f3549360daf8858d9f00ccd34c8269e317367e06304f3709a68d5fd868080aa0334c8269e392952c00f34ceaa15befc3cad32450beba927fff92bf46068f6c855a6b90accf32679d2f61d94db6cef724e0876753a2ecc9823b25e817f8f1b5bf25c24b97096195b4a38ec750815d057cf41c4ab0fd587015a5bbe6d7db26850be4738712e7a3365696ca81f79e9bc92da95ca07ca92acf53276a7b3aedfdaccecd00eb467396a6da58031d04b281f332bd4e3df51c96102d590ebb3bf0d2f33399f8cb1d25e68ba985352cb80955c6d6a593d508ee06582fc8c4a4c2d101bfb579a2eb6d20b95f988936526a634423ad6c70ae029e789149306d6c70ee05605e6c124c1b87dc4a01cc4b4c8269e390db3200f3529360da38e4b604c0bccc2498360eb92d05302f3709a68d436e7b0098579804d3c621b74500e69526c1b4b117691700f32a9360dad8e1b12b8079b5491b9e901641644bfc26039cd7988473949538f70638af350967be95384f0438af3309678195386f0338afcfe49891fb72b2bd372708c415a2ffd37d8eb0b4df4805f90c00f9061b2013d602c8209f0b20df9889fd12f8a28275a04f3e23bb1b936504e39987efa6fa9ce000d76c90b694c8566d3c053cf1664a941d19ff466b89fc521117b5ca797c85f3f86a91d0f711136ecac5997d1e99053cf2164a8cbd99b77db93bbecef7f3a876d4592a78f0994ce318df6e97e79a258e005eea9732b53dc55a0be11603b8b766629038bdcf95d8b899f99500ed6dd4c93f514eaa2c25ad349d4785f10e908bde4e89315b8331dc874b087bedc93e0e5101f0de616e064038884c9601bc0b32803b29d1f61168a70aff9cc3f80c9032595c950a516a06dee6b609557300f82eb3b306c2717bb2ace1049035dc9d89020c9b8b37416408c4ad7e3e4844827108c0784f26faf861fd553506bce681ddf5d5ce20c9df9b8949e31066f21cd65eb09300d8fb28c1aa0f94e6b3cded03a5170384f79b3377d9c6594e5301ca072851f60d8172ae136685e8379de5fca53a54aa698ba5c554c5d250502c6da244dc95f93ba3d788dea815097dd6c6b1fc4b00d00733312295eabec763297192ed7bdc02e07cc8249c4556e2fc15e4a80f9b849374ad3c19cecb00ce474cc2596025cec301ce474dc239c64a9c6f009c8f9984b3d04a9c77039c8f9b849374d22319ce7100e71326e1ccb712e74a80f34993708eb212e76e00e75399e808c913bfdd231f6e9ecbdcde267bfb924a00c2a7cd994362e30ef2b78256d033f589d2df3eb771b1d72c80f2d94c256cb75f890b5a2f1375067a387fa242f82848d8cf65624488232cabdd4248ddb6bda3f86980f1f9cc8eb96fee9fb6ef0ad0be60ea7406d28a11d974864e20ff7cd154b4a4a53c19da7381d7be9489a269d46637f83610207c3913d3bef947f2323eed9b6cae4736c0f74a66f01504ea9b367b5f2b9037be9a89391ea90dfd8eb272f0f73ce08baf9904d3c656cff900e6eb26c1b4718b8bd300cc374c8269e316171b01cc374d8269e31617a700986f9904d3c62d2e4e0530df3609a68dd3620e0530df3109a68d5b5c9c0c60be6b124c1b37f9bb00c07ccf2498366ef2771d80f9bed96b3108133e59fb7c7bd0c0fc2013edf3c2fae8de201b91dc0f78e7879918b818599bdc4b457fbb3b57d8768c8f018c1f9934d5a088b200229b6ad00424ea8f4dc249fa9518329cb703effcc4249c0556e2bc10e0fcd4249c63acc4f92dc0f99949380badc4f932c0f9b9493849d7aa93e1dc05e0fcc2249cf956e23c00e0fcd2249ca42d75329ccb00ceaf2871aa0f438cda8cc6262b00bcaf33b196924fda9ac8f8e6536b9cf677996c03b92b28cb84c01221006e4b55cd6c9ef0da0f20fe2613c91d4becf13bcf12761993e1dc06b48bbe350927690f3c19ce8500e77726e1245d6f4186f35080f37b9370922efd23c3791ec0f98349384917a692e17c18e0fcd1a49ae758ca490a6435cf0e00e74f26e12cb212e7bfa0a2f4b34938475b89f32680f3179370926e824e86f32c80f35793708eb112e72700e7ff4cc2596825ce2700cedf4cc249fa7913329c3301cedf4dc249fa3d0e329ceb01ce3f4cc2493a39960ce76280f34f4a9c835970772ede7157eaf0e08b00959ddeca4b6cded238e7af2a31d58674e1e0bf3122e08f838afe5f94c03bb1c493c1fc6d263290642bd60701907f9b029270d0830ce44000f21f534012ce9d2303d917e4a5ff9a02d2c6cd28b60020ff3305a48d5f86391680648d0c0149b8ec850ce4700032660a48c2fa2619c83ea0b069600a48c225826420cf041ed9d01490840b57c9400e001ed9c8149084cba9c940f60320b32841e6317f53b206dda703df896682f344a5a3cf6a71c64dcd50c3f233aa86e58d007f634afc6a9551aae39b846d22b2d1cd2d01cc2626c1246ca993c1dc1ac06c6a124c1bc7dd870198cd4c8249d86227833902c06c6e124cc2361219cc9100660b936012b6dcc9608e02305b9a0493b0ad4406331fc06c65124c1bbfe05e0060b6360926619b890ce66800b38d4930095bf264300b01ccb69430f16fb64d767e9733f773cdc58e002ed8fe6fb6edcc3cb0ed28c1f61060a73b0f2c156b37e0ae0af5f65951b2bd169a00aced29b186db73dbc60dd32680a4df811265b43d6309cb7bb23d636f065eda31134514d63feaf7d23156fae960e0a79d4c8269e35e74fd01cc2d4c8269e35e74390066679360dab8175d3680d9c5249836ee45d717c0ec4a09335b534d0ab7e317612e4a560b5d01f076a3c4db8179ada675a255c417682f11ada50c6d58750015c425a092d49d12629fc83e4aba549bcc4b6f005eda8312b09af60ddbf6588394bc454f86b337f0d79e99682fc5fb6b2a2d261bbfb13109786aaf4cb4ea532bfb6dac930e035eda3b131d7ae9b4ea0947e4c97cf40c0036db54b084f346c8c09e04c0f631152c61564006767b00b6afa96009abff64604701b0fd4c054bd86c25033b0280ed6f2a581b2b583d00d801a682251c3f25037b04003bd054b084a3fc64600f046007990ad6c6b1a9f9006c8ea96009c7a9c8c0ce03600767ba7f403f63bf58740ef286ee3221ae92b6267b0c15da6b40ffc0104ab4ea0b0ba3593d7c6181cc338f049e39d49cee151bbf4b331da01c96893ed5d4a792dbb866641e48d8c34dc249ba173319ce7d01ce1126e124dd299c0ce7390067ae4938493f5a4186f30180338f1267b289bbc15e7e1b67455d0f608e3409a68d9f3b7d10c01c65124c1ba7985d0160e69b04d3c6e1bcab01cc029360da38c5ec020073b449306d9c6276a180d9242b207c729cf009a2eac22b2f4b99f74989116c0a2b139d141cc452e77cbae8255acb163b381638ffc2c5c0eece3fddf598f86ec824b69ead1157b9bc5221bbd2b9cb35ab667939ce2385dc219a4887c8114dd9710ef3b5ce33735899087d039bcbdc4f66cc727eab752b3502498ef8bce06ce75a0de393897808ab1c4d56b02a61b1ff931a39b1a68253195b270970803952d775ccdd5e619a6c44973b3697084daa9c671a8970dc0a614eac15385333c3a689deb56aa15507711f4e69e25b3f702d66c9b079e8a5dc539cc88cc5dac9f8e3bacf10769738774bc4b1b836845cbe3561acd0f9e5f6e98da8edcd1b21b789a89467ea7a72993cf6124b1bc3a328a64fb31575e677c92c72930a7f7f9958565326a44e4b6a6972fb701f6e9920567287f0b8d89ced2fe2f12ea35db869e7580be7af794eccbbc2cb1c67ae124eecb873590396f5ff00d8b5698820dc0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/a89739b80412d64438fde89043568c89.asset.meta b/Assets/SerializedUdonPrograms/a89739b80412d64438fde89043568c89.asset.meta new file mode 100644 index 0000000..a1104cf --- /dev/null +++ b/Assets/SerializedUdonPrograms/a89739b80412d64438fde89043568c89.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7a0f7bbc81e1fff4fba6008fa2ad9128 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/a9d7f3c7a72f844488ff7cbb04cfd1a6.asset b/Assets/SerializedUdonPrograms/a9d7f3c7a72f844488ff7cbb04cfd1a6.asset new file mode 100644 index 0000000..ffac9e1 --- /dev/null +++ b/Assets/SerializedUdonPrograms/a9d7f3c7a72f844488ff7cbb04cfd1a6.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: a9d7f3c7a72f844488ff7cbb04cfd1a6 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d097c55c5f5f8e7b1effbbe86fdb12521210114901d824062121005849004888424666113157754dc37b4b8effb865b6b5bdbda56ad55dbdad6b6b6b5d6b6566d6b5bdb6aebf2bf337726efbcfbe6bcf7eebb392f33fc7fe1436eee76e69cef9cd997db268b393fa129ceaf35ac982d64996c35ab60b5acc6f96ba173dce1fc73cfd4f52256ef1cb73abfcb9c7b5358468237f9cf84d020e7778173d6c01a9d379b58b973ac12f74b58a5f37781f36ea573c6af6e71fe573a4f85da392fad668b58215bc50686fa2710b146bcd420af85b85da14eceef056c8f73b75228c503c912b7063abf4a9c3b0de2de0e4769f5dc3ab64198b5c3b957eebc53cfaa1d999b85c44e071d6021619338f493c7fef2d8d7f9df59fedd56fedd49fe0d9f6f2f8f03927c7e2078af33f89b13ba35cefb83e4f13fceff0ece9f678173feee87f27cb02bafcdb638b286cae330791c2e65ee4f42ff8ef2382281bdf1648c04b29261d6491e47c96386d4f7ec14c31fe3320a1d06f2f8f113a0cf28107667709f1f4707b05dc5e3a79e78fcd48dc7368764fcbd2baf8f95c7f1f2384eca769ee97ba7bc36411e8724d02becbec766b288cf3a61b6ad93e713e571923c4e96c7ff495dcf01e7417551713a451eff2bc33857735d3dcfef9f27cfa7ca63a627beb2e473e7cbf3ec24f549c6ff944e9fc9302e00e70ec7769be2c852f1feb927de3f97ef5ee1726cf78cc71ee87f3ab9d3a4bc0b53b0e30b8f1d5fb8bab40f7b9e4ba483929f238f5f4ab907c039977b8d4fdbdac9f78ec8f35c96386feb97c4bd7c574e27c57a861b4e877eeef50eb359b42fe725d053c62dff13c6ad38e772aba55c65ff4cf73ca4388f0072f8fb1779e4863c72259b0e2a8f503e9e48cf59f2a8ec3b4e1ee7b2e6743c5e9523c7cae31c19661b16950788737eff98c8bb03aef0c92d5e1ccdf3c4f510196edb0432d5fbf3e5b17392cfab671604d079a13c764932cc2ef2b82840985d5d5fe8f491c717662490b9d8e5dba911e8e0c8e9bc4f9e2f91c7a5f2b84cf2efe0f1830e49f841225d0aa42e0cc481a34b975ef27cb93c1e1fad0b5be1d1e9e296d349d458b9cc4bc0393fb697d70f8273ae6b911b4e9717a4cc95f2b8caa373219dce4cead0bd1bf08d64de8be75f27b8f675cd7665772d95d78b3dba2d8ce8dd69117857e9914c7a90b243aaac3f08ceb90e8aed6acf739782737e04f54af1b7f36e37e55b83c075feee65e09cdf2f4952d71359accf723920ed8bbf79d832ffefa6e2732d8b4d7bba77f911e45fe26f2eef2df9de492cb61c53cf71db2e07e7fcfe9a246d3b59a39f136ef77971de5dc7a2f39ff9117fe8f8babcb65eead39545a72de5a72323ef84aae5b50dee794fa5cb29f29d6e804b3757bf1eaa3cdd288fe54c5fce96010e323d3aadc2e6b087bd29af6d8a1356857c461d95dd2744e4741d247557f958258b4e33de67f9b52df278aa3cee90c7eac8b361552fab92c7ed52b7ee2cba9ebe0d5ce7c71ef2fe15e09c3fb73522bbff8bf25a8d47575d7cd67a6cd7e501f1fcacce7d7690f40b769acbb6e7731eb9a7b0f87e5befca99a4dab30dae9c5eed7cca699472541d68a77bde4be9d3248fbbe471b7e4d89345e5e56c8fbcde0bf84d4f708d3f7ba5876f22dde2713cddd5b3b97eafcaf033e4712e90dd57ead13b1257cd75bebde01e3f9f03ec85f6c5d3e54c79ec9ec09e7ee0397e3c2b80fdf1eea97255d557fab0a8368f3877fca4cfb038b2ce655a3fedabd2e179eefdded21f986a7baafabaea4b82bea4c2ef07ec967e25fac7d4b5b3e535d0bf149271c82e04ef719baef2dc3f0064e8ee5f0474d0ddbf585ebfdad5bdaf927789c7965d1e5dfbb3a87c861d04e17406cfc0b055db2899b854e5fd404f5c0e94f1f25e1c5997e9e3b29feadbb9dc1397ca06159783347129d372683088b771f21aec7750f13b147050f9fe55485caafb5703b9bafbd7001d74f7af8d8ecbfeaa1e771d1297507f1897d7c7da1a1ae209fbda24e2f206793c248fba7aef8df23841cabd2e09b95f91c7ad71e40ef2c8bd3e09b937c9e3e138726f46f44d253ce5eb328f090d63d1bececf1dbf1df0461c59b730adaf0f54fd06b7b2685fbf8d45fbfa7016ebebb7cb7bb0fff718796d248bf5f50ce027c3e5bd3bc033d057d5fd3b815cddfdbb800ebafb77b3285f1f344f5ebf87e97d1dea0f7dfdde585b43233d61ab723c5e5cdee7e1acf88e62d1ed9c516efc0cf2d67f4e63f1cbc6fb5df993d5f30f4879a3a5fc43e09c1fc778c21de3863b58f67f0d517acbbaeee029eef5c1aa9ef020d3d6b706977a9e7b8845d7a71ef1f07fd4e32ba03fb9d99687c13d68db78165d27794c5e9f00e26a3cb8a6ab7325e2fab83c3ee1e13756cabb019cf3e79e04faabf68beabb3c3372afb7ea0b503682f6057b4aef2b42571067beeb48cae6a713d8ec274f0ab3e83c29ecfac1d078fdb35f93cfc4b3e3ebf2f80d7994fe129ac8a2db2f13e5fd6fcaf3499efb6a1ce37084fd800ca08792cddfb9318e3ecafe6fc9e3b7e5f17919ce6416dd27a6c64d746544aaf5d854ef95499da644fb8f3877e261b86a1b2b5fdc94c03fbe238faa2f66b39437d5c3408dcfc4ebcf4a14561cbb426a9ce71270ceef7f579e67cafbb23e109ae6797e9a7cfe7bf23cdbf37caee7f95cf9fcf7e5794ef4f3ec4520879fbf14b12da4c6a85e06d7d458c90f227c463e28ef4d8f0e9bbdc2a2db77aa0d97279f3b0cde830cd47d597709e57b6c9a21cf6f06e7fc38d32337dfc36aa647ee2c8fbe3f9447d54ff05ac4c6a96f8077004ff66ab4ccb83efd9294a1ea07b78073c7a747c6abffab77e5f84668b694712b3877646464b8fa664cc76585e678f81d0baef3e35c79ff3670ce651f88a3dfcbf2d9e33cb61d27df7d218977e7c9e37c8f6df3a58ccf5cdb46f58a23eb47f2f8634f1c2a9fe5f2407f4f73bcaa319057e5f902a9c3ede0dcd16194ac5bb19f30bd6fcff3bc7f47f4fba355b9aaeabf3ff5e8b68845f785fd5c1e55df9ec627d92f3cba2f8e3cd3acdfcf3cfa2df6e8bd44867b27d0435de7c7a52cba8c52e32bbf94e7cb3cf7555d4137d61e2f8dfc4a1e557f77018b1e432c90f7df8ac81db33f09b9bff1c85dee91bb3c45b9bf05eff1e3db91f7c7a93ed6df799e7927f2cc585507fbbde79977c1339d92d023debd3ef2f80769ebf1d2f6bbc0b9e39be396453f1f5a219fbb5b5e1f25afaf6491f2602578961f57b1e8bad52a44b67aaf503e7f0f38e7c722165dee1749394cb2ed248f19d1ef09b6a00dabc269aefbad6491f91a9c6d3271acfa1515bf133cfce458d3f837a39f0f1523fcc0588df85b3dcb8fa51e7ea5886cf5de6a0f3f35c6b4c6c36f8d9433cfb57bfc32797cd4f3de89f2bd7bc1b9f26b7ebe56debf0f9c73b987f4f2c47ba0ef40e9dd1c1f25d1f131eef938f13157be7392c7b6935c1d260c73654c507df87f94c7392c7e7ded3d8ffc93a5fcfbc139bfaf1bcbf8b33c7e182d23aadc51e31ceb586cde2df36cf641e45ea6aa8bfd09bcc7cfdf07f624ead7d65d936dbbd07a0fbff52ebff07a699b9aaba4f86d4fc04f3e17da009e5361c1f101957e3646ae854e01d7f87193d4ed0170eee836f16d8fdc32f9dc83206c7edc2caf3f04ce61da2b97f7cff6c8ab043a95cb30555bef2f9e302a58a4ac73784dbcd5c3a102c82a03d7940cd857530d8efcfac3320e0e458799300e74f5bc2d2cbade2cc7e8425b3df1bfd5b577928cff492afe557ba7217ed84a2efbab3cdfc6a2db24aa5dfd37208fdf7fc4a73d551e7baaa2c315f213d5c5d57c9307fcf314fd24fcf87719fe7619dea3e09c1f4f05b2ff21af5547ae85e418696807d3970f35e0d91af02c3fd6b2e8f2a1d68dbba9873cb2d57b752cba7c507326ff29cf55ff8cec876a4ea3f54087d3c0357e54f1f7383877749872d8f59fa97548588df2bd27c0390cb3894597ab4dd2b6b1d1cf8776cae78e8073c518ca79d223c7a3576817b051f5a91e49e0eb6a7c790a3807e5d7e4b7a36d4a244f7bed3579fc5886b1dbc34df5b1bd9a82ec0fa48c3d2cba9db6c76594b95f3ea7f2fef7138421e5b17fc9e3bfa5bcbd52fe53e09c1f4f67513e2fcea1efef6351f9b33877f4ca2af2c839c323478d19ab783953de7fdaf39e1ae77d5fde7fc68db7ac0a8f3d89ec8ebad63e24e6592d6395ac8cd5b12c31c990f7f225bba441bd9978318398cfc87ff19f0922d846b6c779b552b7a260b558afd0c872598e7645c160312f4485be50fc2e739ea812429f0dc504f16c4c105cb96ae75f25580ed1e05c5f2a5653f0051155ce9d4cb6c239f2b736b1696c9df32f5aca1a27d86ad6e49c953abfeb84bc4d8edab14f2632892f9df0be53ecc8745776ec70ae28a075ce79b5d0b044fcde2934ad14da1738d71ac53a931ab6952d708ebb4568b1b6d73b7febc22c95c8f43aea177860d7dd65242a9a1639d670edb3842ffe5f8cb4468c70f41d78fae03fedb2c48c9d8b6362e2ff18ba990cef882a9032a60964a1a86b392c8b9f8a4670501b632dd4fbb7cb3b9f4d8f6b8b9e0c8feea1c282480c3ffdf088ee1f9fbcf1aef6d1a6e5b22c31fc342c8169f1c07279613193c68f09eddbb7cbe68a7af18774f8c534d29234e2779fab12cff98f800ea2f08b8e00319c59eae46a45a0f05c2d94af16aa798de1a26b444e58c876c99cb1d039563bd76362319b07d95144446c319bc8182c2adae8a242f4f695b64a4ac0161ec68f8c4ecd564422234bd49d06c571592c2c51a96a236b562a513df764614de995efbfdb5e1f2f5d44bca4121a16336d7531d325dd892471a9102f5eba36db158917fea367d80df1ed443a6004dbe908764db76ff37bb5424a99f3ac7f867c9ae7646f46a307d80371c2c42a6008db6b106673843d355ab1f69d3d5a718510c91d7491d3ad758ae0d49c9b8f010ef420688f3a77efb825a85fd7eea8a32726046f22a5a75a86254e13e078e75e99f37ca5a866f2eb458ec432276c2e6fbe0821d29a8c7e233e593e4233d54b564bb5afa03a16b473836a8611efa4219ecdfdb59fc60d441ee74d0cbdf1c4d0194b66fd8326b32e98e401412577c5240f0c2ab91b26795050c9dd75c946ace5589f966413e950517f2d70dedde618b353b4929b9cf7751d30f193cbe0a493cb10915c3298ae5bc89f465832e9a18b3b7e71a84e496fd40dc1a3ae2726785840c1bd306f1b1ed4db7aebbc4dd8514dea6dab9d6b6ef7d96271b74ab42c78ef4b99905ee8142ca732b76f46d54ab177948fad141b8734096de27be308a6a98b0bc87c50915a373911d9fde98854d633443248873a5832e9a3730de12fdb5bc53594cc5a715e43e218a3748e214064c5898996d16c74326e3146b805bd329853f4d5e544bc30e4f59ba0558c7e3ae1bc76308ec5b6d1be747e628477c385f7c7341fafd1bccb9236be341f8065d0138266d00331c9e1a09207e9d2b788dfb349d377b2a33dbafc2dd6b955777fb173dc22b4a814dd5595498c12c5cf0b26eaf202e1a28bb59593d6b282cf836f233287c92273c8f45966f8cf1af459d31411ba596cb06c6c3096d34cd5e4346feab2b13839cd102cc966064db24375927992cdd2f86a36f7555e81e8226a9631e14cc1c319a6cb1a4406bab755b306b72382cbdb2206605d79ab18df566e9770d5ed8e03ef948e53ea3c53ef8451299d3c4866c0c763867b7bb86459ad4f0e392239cc4d2239505a852580e13a4fe23d367c2544cc98012f2a8a59912379a34886a789cb9c921bbb55e2d12ab6d739aab1d4187feb88fbdb089d36bc21cce7e7276c38f5c5058fc404e705149c81a5f1fca0697c944e32cf6df8fa8da035acd198da3383aa3d06cb51676972d4cf42fe72d4b198f06334c29f6be34ff8382c291c9b8c8fc4f1eaf198e0d9ba34c6d558283abf339cffb5ce1bbcabb54ca4fe0c51184672830c27ad57397ff1027b0a78beb67984ce8f9e1330a79813d429c258bccdd5c4dbc73ee36d2226fc388df0656dfd099f84c5dd3c5ddcf1d2418d936e93655b746e98216691648889434da213b742c45c8388d70c76ba53529fe11c1b9da7334439502dee65885d56eb455eeb274e2763facfd7e9df05e85f0434f413e2142cdf5aa0c9b7423ef3ada93ae17d99dc944d57f1e1b3dbfd577c32316c8b75d8868b1bbb45cdb5493c5f221ca0b2b9ae5cd14205649646af2cd1e8ac61ad5921e3ad053ecdaa41fc1da9a2f0b02303fd412a5e7c6595b7e2a57ef4152fbee62a2c5660a6437bac82958d65aacb34996ac84fa63a0d4b0b05585a589e525ac8d1f99ce88ea86b559fc35354b190cd535ef00a3f5fedd5d6dbfa175d26d393f0ac96d271b2d8b9ae41eca2ed926be099291f8bdb0cb6cb76e18b24a14f132b449a48a7e658bac8c54aed959a52fb487b7fa5f6749dcb8ab67e7dabbaec2221211d6ebb4ae7b6a243223f89c86f493d478ad9b80d2253ad9099aa9b758f145b02d68b62b3d2b9ce335e787fb2d8d28ed7979608de3b04796e5f9968f7624e5e289c3cdd76628e9e871500459a02c057ad3a1f4b42276892d0673e93d00c4cede2a06acfc4d42ed1a8bdaf833fb56761c24b35c25774f427fc189d709e31f3e59b415a88c76282f93a54edcc4dd54e28f7b414378bb6826aff55882b7b9cdfd5ceb572212243ccac56134cfc68391b637ba2866d2f9f6ce76008d606643b572798bbe749c9088e33187f9c4e30af7f9dcc90fa175f99eabffe350fc3be5e83fd569fd8e763c97c43d064be00937c4a50c90b31c91b834a5e8449de1454f2622c12cb3491c8e758f989c42598f0cd1ae1a53e852fc51266b92e6f1ac778d742a492ea369f22fd1a656c8b9052effcbd5396b91551fd23bccfa34a369afda4f365989e153a3ddd855c7c1a1daf5394893e341e6221dbee2bd4020c7da506fd419fe89763c2b76884bfe753f8f118afad3a5e8312c46b85987d15b93acdb9ea87e30a4c9b6d3a6df86924defc84b312435aa5417ab88b3fa4ab30234ed519c1a793b8f88e7190ad121d7e657211da4e518cfbc7588869b05da701cfd95634570c8a52ac16146148ab3548dff089f4042c47de1134472ec6d4aed1659a5dfda95d82a95d1b54ed529d645eeba86348ad83af47f75feb588d85538f85d39052386b30528d41499d884570932682e775f317c16b31e13b35c2f7f9147e12267c9746f80b3e859f8c09dfad113eacbb3fe1eb30e17b34c22b7c0a5f8f09dfab117ec8a7f00d98f0d335c2eff529fc14ccc9f70575f28d98da6768d4eed7c39fda9b30b5cf0caa769946729698d592ce0563ded94ffed6d4f0bdd0929bcabe9fe9178b250a1feb52daac8b175e429fad53c947515e8e79d3391a6f7ad76722a8c0849fab11bedea7ab5662c2cfd3083fe053f8164cf8f91ae1bd7afa13be158bcc0b0246e6364c30ffa0404c5d708af0ce5a91c632c47737f9faea1af9994fbec745a518b82e13be1fe9705203d77cc17e86f4de7ae9d37c6970a673d58fd65598d607745af39157de891ba937bb4d49b719a29b5798c126c85af7045f7a9d8af9c0451a1f38e2d3c1b663465f1cd007aa75f9ac98d557459acf62f3484b45e73ddf60638bf0941d2d3c6fff92a4f3e483224fe6f309e874c5f2ef1dbae8e675eb4b1952b7e6dfb3e8c255f655b7aec17cf6728dcf4ef7996fd562c2afd0085feb53781d26fc4a8df0f37c0a3f4d279c576bf8170602556bea31b5afd6a8fd8a4fb51b30b5af09aa7623a6f6b51ab5fbf5f2a7761396b75da7cbd0b92ac9748a648844d9240a285ec4143177c9b83b57aaccb95a2166516d13e7452269f29ec5cda20070f7bdd8283a3fb68ab1c47ae7aa9a75b587b96b09334475ccdd052843640515722ede7671a5413c5509c2d1173855b2e0844594dfdecd9d58145daf89a2b13ea3681716458702163fbb31c137e8e29ecf6628754eeaa2e2c54f787bb08cf5462c63e59b2efaefb4d88bd9755867178fa675cd3da5aeff6ef0592d3a1d8bff9b74398bcff8df8709bf5923bc5d6f7fc2cfc0e2e4162c4e6e4d294eced485c333bddb9271e238e37c6761826f0f28783fe64577044c76676382ef0c28f81c9d601ef777b1d8b99d5c809fb99de7625e78b7c60ba7f4f1e785e761c2efd1085fe153f8f998f07b35c2eb7c0abf004b3ff761e9e7fe94d2cf8598d33ca0cbd378381b9d7fbc07aa5ae4d6aa8cad72727d7ea74e34157979e8c7c30e605a3ca8d3a26fb316d9ce6f5ef2f2b129777650ea3a5c84e9f0904e873e52875ce77fb9680cf177763bbf53d7e0624c8387751a740271c1d710f19a919fd02ec1dcf7118dfbceeeebcf7d0f62eefb28e6be8fa5e4be97eac2e17a3daec99adafacc9a2ec3083da121f4894f429763c28f68840feae74ff81598f0277571eb53f89558dc3e85c5edd329c5ed55587278265ed694d3c259d3d59816cfc6cf9aa6b560d6740da6c357e3654dd35b306bba16d3e06b89b2a6134578fed63b5c87b9ef731af7edd4df9ffb5e8fb9efd731f7fd464aee7b0843c6bf6816a43a760346e7790d9d6b7cd2b911a3f32d8cceb753a2f315cc88ef688cf8d0a7118731f42f04447f13a6f577355a2f1ae04feb9b31f4dfc3d07f3f25f4b76046bca831e25d9f46dc8a097f4923bcdd407fc26fc384bfac111ef629fc760cff0f30fcafa484ff0ecc39f997d5d0622db7858bb53b312d5ed5691129d6725ab058bb0bd3e1359d0eaa58cb6bc162ed6e4c83d7751a746691626db118f0aaf5d953750fe6c03fd238f0c73e1df85ecc817f8c39f04f5272e0fb3023ded018513dc89f11f763c27faa11fe8a4fe10f60d1cd3ffc16a45c7810d3fae71aad670ff6a7f54398f03735c22b7c0a7f1843f20b5d0ae08311f1fbe9637b7283f5d9bbfda666f7d23f8245d02f3511d4e833821ec584ff4a23fc904fe18f6159c65b5896f1eb94b28cc731237ea32334c49f114f60c27fab11bed6a7f0233ae1bc1bf8ed64b28c38ddc04f6a0467897d595a678c3e76e7a5961da3ff9d8e97768c9e7f9d30fe187d705db131faa7305ffabd2eb5f9f4a5a775c2f950eebb2ce050ee3398e43f0495fc2c563efc3119ff8f93697e55e7ff6227a02dade2ff41f6448beff97f4adaf3df139e3f298ee707dbb94d1f135fc39ce7cf419de739cc79de0fe83c5fd709e6c9f4034d32fd68a8bf64fa0d4ceb0f99a64ac4f7459b2f9a439562598a6e415386a82e65f89c7bf64d4c8fbfe8f4e07baaf893ff3c26ffaf0163e75b3ac13c76fea6899d6dc3fcc5ceb731ad3fc26287a7916db28aa8e2a3b279bf8f5467067e0733f2ef1a23ab87fb33f205ccc87fe88ce42950cd3370ebb3d1d334fd98f55d2ce47fea42e66d7277564d56f3f6f459cd9be2143a09a282f99dcdf13d4c838f751a0cd46ab042fcd5287610706bfda9ad1bfb3ea6cbbf74ba0c4d5297d8fdcbfde8f422e678ffd638dec111fe1cef25cce0ff04cc135ec6047f1250f00f30c19f0614fc0ac6f9bf1ace0ffae4fc434cf8ff34c2eb46fa13fe2a86e4b380485ed309e6b9cfe7c9088ed3187a5d2798b743bf68bee169877ec9526987fe08c3ceb724f3625f36ca1ff61f6346f0b2596b449b502a46fc0433a2adc688033e8d780313de4e23fcc8687fc27f8a3966fb90263be52bf98a19dc26a642d4b155461e6613458157237f47af42c810676ef133456c7f512f4a7d37cb6d60d562838c06069781bb9d4a7c41739da766a0c2e19d496e11bba5393bcf10997985cfa97d3fc35874d0b1e0dbc9c0bde6dc5a66a4808d2cc9de2534ac6670d2ec36510465249490e33ced77e5c6cf3187e9a87198763e1de64d2c4975c29254e79492d42f3023ba688c08fb34e297584c77d5c5349f03afef225d273b57f9ca17deba70b7288a17a7e1b877278ae9a86eb76ac4afa35340adf00cd5851a7daf51f855a326156d161ad6820e585776ad6c9dfaf1af5f6151d34d1335ddc6f88b9ab774c279d3b77b2860d3f7d73ac97c63ab1ea1605b0fff06e3d153c3a3c2278fdf62c27b6984dfe953f8db18ecde4161ff0e53bb8f46ed177daafd0ea676dfa06aff1e53bb9f46ed0f7daafd2ea676ffa06aff412799b77d0624e3dafb71c17fc432ca81ba8c92318dda7132923f61d207e9a4f31b6e919a95c2861cef61313b5813b3fb27f88bd93f63c2876884bfe553f8fb18a5a1c9446e1c241f6082870514fc218663b806c7f33e71fc05d37a84ce69b84f66f952feaf98fc913af97ccbdfd801d695a274559bf344eef81bc4fc1ba649864e132e81f7b0fb8dac8fb05046e9427177f08b5db4e527c4bf6b42cc121f06e09bcca46bcf81643e09ae1f3d181de295da6830a27eab1d411813e22308fd632c8bfbe56c84dc3f7471c54fc78662bfecbd7ce5d91d0f0ffb619b98a8698f47cd3f316718a773065e79e2b36fdcf901d5ce5f8dd2a82a9faefe3116ee785db83dd1706b6403d04fd8ffd2b96346badd71a1a8bad7a7e08e13423c7aa2116522ce18469c315ee89833fe5bc76d14bfb8318ddce037cc4bc48e9a55ce9542d120729b570d29309d18f2bbc9f92441764c8ce5a9ea8751ff8f2ea5f04ae4e4a095c84f30c953824afe14933c35a8e4ffea24f3ca436628f8b759fe87654a5901eb479f613cb283f2f81c933c2da8e42f30c93941257f8949ce0d2a998510c9d3834a0e6192f3824a6ea393cc7d293fa0d3b5c5549e1154e5763ac9bc6e303360c74a7b4ce5594155ee80513e2620e58e98cac70655b91326797650c99d31c973824aee82499e1b547257cce78e0be873dd3095e70555b93be673f303fa5c0f4cf08280827b6282170614dc4b2798cf345b948ce0f770c1bd7582797d60710bd407fa60aeb124a86bf4d549e6cf2f4d86479c51dc7e18e8650141f7c75ca320a06b0cc0042f0f287820167bc7078dbd4158ecad08187b83b1d85b1930f68660905705843c14135c1850f0302cf68a82c6de702cf64e08187b23b0d82b0e187b2331c82501216760824b030a1e85c5deeaa0b1375a23394b7c5493ef1398fe39cb2df13de7f85d136b92898bc938b131585c9c18342ec6ea24f33d0ed726a3f2415cf038cc2f4f0ae897e331c12707143c014bfbeb02a6fd30167beb83c6de448cc586802c2661824f0928783226786340c15330c89b82429e8aa95c1650e54c4cf0e68082b3b0865679c0865636a67145408da7611a5706d43807d3784b408d73318db706d4783a26785b40c179188aaa8028f2318d4f0da8f10cac65b8bd055a8633311cd50171ccc270ec0888e3182c8bab099ac51d8b81ae6d01d0b331b5eb82aa3d0753fbb416507b2ea6767d50b58fc3243704953c0f03d2d80240e6636a3705557b0126796750c90bb144be2b60225f8409de1d50f0624cf09e8082976082f70614bc14137c7a40c1cb30c1fb020a2ec0fced8ca0feb61c937c6650c9c76392cf0a2a79059669ec6f814c632526fcec1610be0a63724e5026855807d3b9013b988a3095cf0baaf20998e4f3834a2ec6e2f0821688c3124cf8852d20bc146372202893d53ac9bc0feba2805d3d6b30952f0eaaf28998e44b824a5e8b493e1854f24998e44b834a3e19ebf8ba2c60c7d73aacd4ba3c60a9b51e63714550161b3095af0ca8f2295897da5501bbd4366282af0e28781306f99aa090cb30c8d70684bc19cb41af6b811cb41ce3717d501e15188f430179546229fb8680297b0bd6b0bf3160c37e2b06f92b41216fc3201f0e08b90a6371534016a7ea047307bd3919c16370c1db31c1b704145cad13cc4f6f0dc54ef0563f7e2678efc012f86d2d90c06b30e1b7b780f05accb1ef08ead8755805fdce8015f4d37482f94287bb927293102ab81e137c7740c10d18e47b82426ed449e64bd4ee4d46e5fdb8e0264ce5fb82aabc134b8cf7b75062dca50b806f38f740324cdec105efc6603f1810f61e0cf6434161efd548cee23965887f00b9355613ac93c3f0fe560e3cac231cf270102b061e09f115038363ac4b46076c75c0e9580efc680be4c0fbb0c87f2c68e49f81a9fd780ba87d2626fc8916107e1656293a12d22c5c5a244e8b1d6729618bd8f1cd5b12ad627c53a85d2282b7cba8cf144b9c0a9cfb85ce9d1ae1d2fc8a7e26896ede097f1aba1677fc5ae6ee63e06ff7fffd98954feaacbca0d9cad5ac42243a3781ee107f17c86da2ebc58e096e022d687e7271f32e60d1fb8cd44b1e25ccfd16ea42d624ece272a3e94524f0e7fde981492a657c71d45671379a294cac5ede6b1c397e17c29d8d917e0af32718a26b53aef38e4babd6c914373abe512fe2dcb5b654eebce6d536f22e7ebda5fce91ccccaa77556cef5580999bb762e91df052dd3787d740cc13bf1d20a7ccb8f65e762963da3b3ecb8a4e26fbed86da48aa90563c1632e72c78f6de761b63dabb32ddf63db4a113bdba465fc6c77ab59723e66c95775961c4c737e167987ef2b53ed48ddc3f8daf1c876750d3ebc1cb2c3ade0654993a866c05c8f57b05a2e6fbb00a3fe351df5f949a58d15ccfdf08109b9da85987dcfe9ec5b41e855fcea6922186e955b1dae124157b1bdac0ccd495289d50398d55fd7593d27aed5b8a6c5c216777f25d746551af3abe592506cba483d362fc2ecfa86ceae937cd7ec4ac49de8ba9d4e827bada8391fa877ca03ded40952134c259e2fc6787c53c7e3f8b494d9d4a5f92598cdcf63f5147f3ea07c98efa4512e04c178f6eb117e2c3b8859f62d9d65c72096ad16e9b35ad64ddca6b66ab5ac91a9b822263668da289762167d5b67d112c2dc57c5aabb1dc566e6ee70dc72965e8659fa1d9da5b319b677b92ea788b6007e488433592662b95eb486ca9d12774f0b5a753966d50bc9b409a2c3853584d52216ea9d67793adc1aa7f48b96d172965d8159f65d9d650b13e69cc9b50af03c345e9b35d59cf24accc6efe96c5c8afa24aff16e761e52b6ba7b0c453eed143f2fd1cb6ce992f02accd6efeb6cad246e3d348a0ff4704a6eeb608df0f6aae69ca765dac3a970ba1ae3f4a28ed3ea566b65c527149cc335188797741c16f84c1b26a4886b310b5fd65958e0d342f5bd527d8cb486bdd761f6fe40676f31a16737a450d7680902d763045e69a93a889bb7cd0735107aab0e6156fd10eba1f06bd512f1446c0c79f39ce4e5fab1ef06ccbe5775f61d1ba0e6d8284a23beb9d516d9cec3ad2a8d79d68f4d376236bde62fcebc790ffc824c22cfa32c3dbe82d9f73a669f9f36a36beb52598f88dce5231ef16b872d55733c8cd9f7239d7d6359fc5ec1528730859637615afe387edf9e9f5828492916287def66ccea9fe8acc6bf0f57da3c540ff388c87efdbc3c6cd2d6c552ebdfbf05d3fb0d9ddeb312b6b80ac4d820ef7dac16bbb52f663bc4067eb1eddf7831907a0bf256cc9e9f6235c8f86984b7868b44adaa4153ae263396c06b235b5ad0c2db300b7f964c1b593f3650207c8ff78397c93eaad8f84ae7f8c0ed988d3fc77aa892e90748c6cad4728cd42dbd03b3f44d9da5cb928a4def488f9b0e95ddad19af7762d6fe4267edda84f14adb334edd677e1746e397c978796c8d32792f4fcdced4e3fd6eccd25fe92c1de7b174bee8d3e225bd772ca05230e763e52d531ade83e9f9964ecf9c3831e2d579a9d439d934966abbe55ecc825feb2cc80bd06e813ddebc3e56dda2a5dc7d981dbfc17a4993ebe35e9c2065c46baf50f57adf8fd9fa5b6c84491f67b15f166ead96e60398456f63fd99897ba392c9e392e9d3f2dfef957acc3e8871f89d8e03feed5c3c15aa6ddc5baa4c7a08d3f81d9dc6e31396d07479f5c398a6bfd7693a234e8bcbebe9d19ad789da7fa4ff9b22bd3c82d9f26e327319b1fa6ea2bc2edd75dd47312bff80cd8bf097cfb9656cecddd8b92eea8b12787cc64a8994e87e6c7e0cb3f98f3a9bd733bafe6fd573156f040c7249d61fd43b7ea83c8e51f9533223d82a443fbe1eb10cf38396f1f12730cbded35976722bc7b79f784eb5467a0423f2e764ead40b85adae5d8da0e7d26593cfa62768dbe84a1afe961f0b9ec42c783ff9d9983c4c3ffe0aedc3aeb794cf3e85d9f701d6631bbff4897cbcc3aba3fa780aee75d8873fe2796a6a39f3d398d51fa6d253e8c66a89f3f06659cf2e67ad3d0bfd19ccc2bf2493f2f484536bcd26ae8d7674fe85427c89d46221c5ed77ad15eff0123c8b0f6784b29bf3cbcce67c30332acf8c5ce7e1ef706283a789d2e61c8f2f118b2fe1af0e9c0e6d98fb33417e2ccc2d26425b987709da4221bf5ae637ca5b33052177b62a5f5a97e9d47fabc45b6a315d222b74797f26c8fda175896dda802c8e0b894f0542590e69defd72d459fa371eabc365acb6c9e20d97d0e414bd29b1161ff1d0daea7d68600c59983a74babb0256c9965e882fe3df288229120d137c2a78c290bd7b2f7b439e2a04a85a524271ab4116a0133758b89b3b1daf9eb99dd46f39323bb66f93cd63e4ef94d8f8f2d145a23654e780736739a9320703d8600542de485408ff4189b09773a29ac5cbc4402d1710f9787221db6e05b0473b4580fd9312583fe67e7e2f9b45e61fd90cae57d708b88f29c1f5d180e3026b9c97f8706c93b85a6105b44d2c02ed5fd4de169d3c9738bfabe44c3735dfc3f53a1bc085bb45c0fd9b12dc00511f6d48ba58b001de35a050f80f25bcae20a91646f54bd88069d8b008a64f28317506982293f46d4074604004d1a794883a08440d56e551edba47e0fc9712ce20e7a4b0b9ceaf0625dc0910c522d36f627cea37cfe68b6457900d008f8004f83f4a8003996a3645569236b06dcea37551a337952271da52b9c81813c1f71925be4e20ffe26af2612e1b00bdde3b02e873ea0cbe50f4e047f610b1c387f68124f845ba7c482d55b101d0e1be11405f5202e23be4a91afc62b65b58ddd45cede4f3f82a44fe542c3cac42f85bb513a00d10f98f82c8da1042e4bd7c101eef21e34b702b9b3f1b566179ddbe1fe8330b51a2ec2ef334e56f7b648563b5687edb80ea10c8dbda50a2eadc5cbde003186ab8c106442f8e8e206a4b8908f64ff0e6361cb7564d6e9beafe9f748c806b47096e80071c5cea375ff458409fb3a4d201ba12db53c2eb062a1d91956bee7a591b401d0115d80e94a078effe4a91fcb67b366259e43c5e2f42b201d8a63611601dd3959fb9fdadd133712a2ccbcfaac1b048274a707d9acbca4522689beb622fb68f40eb4ced6d8b451f4593083cb213526c7f860de0de05e0ba5082eb0192a9ad63487ce28b82d595dacbd4e4825a21c6eea6d26ce065dd28c1f1fed96207da4296fca68236003c202ab91ddb7b847b57a3a53e3fc81f757c26534fe636fbebc4d54659fe46cd6c9ae03c629ce6dddb809949e194bb80c209f3b970d2a3ea61df23a2e114a7d78493aa758603f6e9847dcc990afbca02c349d765c2be0af0704af949d857133becab021b4e6af64fd8d79497b0ef96ad4e677c9243386648311cb73918d68e7284b5fdd6616444371c67403c8c0c12841374b485531afd0b237d52e11486c222d373f5d36ab3c73ab77ab4f9ff7be66c369f39db9343e0df3ae03f6ebda31775bd837b9b3b519a9705f117ad4e734a7f8f0ec3627488fe6c88aa5fe8b4e91c5503e9918c81a9d442ba81d92cbd4dc2996325ceb900671f9370e65a89b314e0ec6b12cee956e26c0038fba503e7561428547f23cb63f97438bb51e17c904570f63709e7742b715e07700e3009e70c2b71fe16e01c6812ce7c2b71be08700e3209e7342b7116019c834dc2996b25ce9d00e7109370e65889b31ce01c4a89b3bfc4592e5be9de5dc3e0aaf46c3a90eda940fe03801c463d374df50d25db4fc79faf17cfda57955f00c00ea7043b92c18ebbe43bae6d869b01e08ea09e7f14afd909c5f1929e0c65472a946d4093732425ca9e1265be07a8dba5cb1f228337840ade11e08719e9803733fdf0c83cef55006f1425bc8109caf0e8444cda362783f94f0073b44930675808f36300738c4930a75b08f36f00e6589360e65908f32300739c4930732c84f9170073bc493009872ec860fe15c09c60124cc2563919cc3f0298619360dad8c2f91380399112e62409b3da79a85a1cf55f6cf5f7055f42ffed4b857c0b68544ea244de4520df26660eb93399b60a78f6756974035e3ab935bb34a2771125f4befd54287703ef9b428972424c822f13c29630f5d1a205ce7fee9d3b45a75b138bb70128296cb2dc3507c09e9a0ebf4daea8b211e57090056452a21ca1c90292dddc9d14ed412ab463819766517be97c3151bb564e4fe5fbb9aa6fcbf289ac6ad2ae3b15dabe82aa1df0d26cfab572bc577da3b8c0032f13e53bbf6a73cfe7d900e1b474209c71d4217c1620cca144d8974586d7d4d1fbd94f5b87d19e0610734d9abd493a65860ce73050c84c370927e91c0fba11748033cf249ca43390c870ae0538f34dc2493ae04686731fc039a335dbebd1530d09fbe17b53a13c03a09c49bdcf875ba3cc3e8ac6d1df07a5f82c7326c3ccb210e550e089c7a403259c0db7c2691e2e95eb1cb7382fed4e47dd920ce52ee095c7d20f61c0cedf8d6cbb40b740ac82dc2e452d718efc5b9d31db5e5830cfa83b80393b1d3d438d624d6c43f360855a22aa8eba7e4dd2c2870ced8d00ed9c740cb5253b319b30ff249b963d1bc09c6b12cc9916c29c05601e67124cc2893364307301cc7926c1249cd2450673228039df249884930dc960ce0430179804d3c67541f900e6429360124e9c21833906c05c64124cc2114832988301ccc526c1249c6c4806330c602e310926610b880ce65800732925cc0c16db7fe46f2e1c61f94e36176e16e8535ad69a7339bdfdee84b92859affb04e0ab0526c1242cdfc960c2ad5597a7a3df9df776ee64eabbcb699a8240866f20c0773c25bec1005fec14432e2cb25cdae6818c9700d015e99816937dd44d8bd90f10ae4c07c2fca30ee13100e12ab3ab4384bd9a64d5a12a501d2a4cd7c4adc8101b1c25221f5c231bb4380bf868913993ae6d5c51792c40790225ca2c16bd58a089a95d59b789dcb24e3ba896fcf01b61759ecc8f0b4166509cae2a54a29d9c6d9ed1390378738949db4ce559d9cf740fc0596a124ed235c264382f0338579b84738695387f0170ae310967be9538bf0e709e68124ed28dcbc97016009c6b4dc249bad33619ce3a80f324937092ee034f86733dc0793275cd33b92faa140bd5f8375d086b9e2ba880e600a0ebd2b1155aaea7f3240d7d4e64cb53ab01bcf594f086b26457fe466f03403817e43d2aa81b41e37283895009bb4bc8a09e02a09e622254c2f97464502700a81b4d844a58c293411d01a06e32112ae15c1132a88301d43213a1128ec39341ed07a06e36112a61d73219d45e006a3925d45c163b4412dd6bbf9045beaae61a12fd8db6e88f3f463e9a572a6ab4aabb9a301272a82281aba822a1c29ca589366ef0db1ff873a5b94bc00867e8918d42bd0ebc748b39bb2d926e8241e6a77b01ccad26c1b47123ea0b01cc6d26c1b47123ea2600b3ca2498364e9bd80d609e6a124c1b37a2de06606e3709a68d1b51570198d526c1b4714bca5500e60e9360dab8117521805963124cc279a464300f0098b526c1b471df9b8b00cc3ab3e73cdbb81d7a3bd0763f8d126f7789d7dd42a85ab4e25dd95594fbde907d9d9001bfac4ff78ec8c9777bd8b8efcd70e0930de99a7abb52f4686ef7f4782e725eab1721da3cf57608f0d5464aa03de226f2063a745da8d0b501e89a5a733983fddb0cf4032877a6634d27fff0edd1b3a6f304806f97195bf0bba34775c263dd712152cf7c870aed2e50e0ec3669ff59d2c62499a7760638f7988433c74a9cc7009c7b4dc2996b25ce2280f3749370927ec28c0ce75680731f25ce312c769ddc62b69bf199204d4ccd542e745eaf60bc555e2cc0ba1f36a94e4f059e6c1beabea0ec3fc3a419f679566e12781fc079a64938493fa34b86f37280f32c9370ceb012e7af00cefd26e1ccb712e7b700ceb34dc2493a55810ce77280f31c9370e65a89b31ee03cd7249c3956e2dc00709e97aeaee31251ab6c7224cf67fc537a6be40aba0ab182aed2eaaee35300d0f3cd99266be3ec8feea0a574413a8685d59e76ee9acecda2a9a91eb27d2baccdc02f2f4cc79acea3e9b33c7300bc03e64ed8262c80c8c62e6f07682fa244db9b453e41cafbde5502b77d98e35d00f0e27424ec19e94fd86403194f027897a403deacf4c3234bbaaf017807e9cbe76d9a3dbe4a1c26e5ac5c2ab445ecb8c0fb2eed4bc65d01cc4bcd9d1e43d8e34ee6a783403df232737658b47176fb24e0a5979b31a6aefbac3d215ab27d432a81975e61d2301be93458b2fc340c705e6912ce1c2b711e0f705e6512ce5c2b716e0238af4e47d74672bd4439562e1fa80030af3109a68dcb07b60198d79a04d3c605d4eb00cceb4c8269e302ea3200f37a9360dab8807a298079c82498362ea05e0660de60124c1b9b988b01cc1b4d8269e310da1200f32b26c1b47101f54200f3b049306d5c40bd08c0bcc9a40625e9301a5983b20fc079b3493849ab4764388f03386f310927e9a42d329c6b00ce5b4dc2493a7f980c6713c0795b3ac6ccb38fb231f3b75804e0ede9f8b45e1e3bda3ead771820bc231dcb58128f042d64ded595f31da1f562db09d2759663a8206f0709fd4e4ac8c359f407cd2ae53aa1c8eaa0e87c144e7c25044bb63e681e007b573a36495160d5375fb998c8348678d57b1b5b4a9900efddad39e29eb6bd8ff753a1fc03c867efa144394aa02c701e2a16c0f816143be5eb116fdd283faab740ec78bc5dde5fe21c2b1db184fbd2d02dbe0680ef3567c2b68dc9fe7f00e57d9428fb2540a92c259daf342644b5c405e49ef79bbd8317616f3dd90e5ed301de07cc9dcc4d38784c36d3ee4d90013c988e0c002bf723190065b59f2a03f83bc0f810f51e7345b24b44b5ed0b8467f2646f5f59de0b807b381dfe97ddec8315a241eaeea9607bf7c83300e323d4031d1cd8221170ab7e4caf90acb801301f4d47fd323b4e33d3ee3ea79701cac7d2d16d37fda8ebb6db0a103e9e8e1e25ee8d8b4519dd249458e1bc522e127921db253aeaea5983a820d5319bd7fde601b04f98b3c8c0c6895ecb00ca23e9589435ddd30ab2b9ec6e00f09e34697f8499946d71b2fd113e04389f3209679e95386f05389f360927e95e726438cf07389f3109e70c2b71be01703e6b12ce7c2b713e01707ed5249ca4bbc492e15c0c707ecd249ca4db9a92e1ac01389f330927e97c4e329c27039c5f4fc766e5b9ec68daac7c21c0f70d9366c8917e6c910ce72830c6f34d9370922ebd22c35900703e6f12ce5c2b719e04707e8b12672721a0527c85ba9eb933e6ec9bacd501e48ddfa6c43581f9f9fc37efd56c1222e167be39b534cce1584a053b0bc0fe4e6b4e87495b859dcc6f4f07c9fc85740c57f0bef6a58cf79ff35ef6ad62c0a2deea5ef5d380377ed79cc95936ee92300478e3f728517216ee9705bce33b70ab1e7e9dab561135afc8bed944bf061efa7d4aacfd199fabc18b990aa666656223e6841f0e23cb2d3b01902f9a3b2dcbc60dd0ae07685f32e7fbaab956eee9f17d00f3659360da38d4fb5300f30726c1b4714f8fef0298af9804d3c63d3dbe0760fed0249836eee9f16d00f3559360dab8a7c70b00e66b26c1b471c9ca3700ccd74d8269e39e1edf04307f64124c1bdbeb3f03307f6c124c1b7735fc2580f913b3975411b689c83a41f241dfd21bd49d20893b8df3c58c4ec2e2a83d15c89d00e44fe957fb4683743b897947470d5b2e8636eae24e54b0f19bea6d4146f03373a669dbd8dccc04287f6ed2049a3cca228acc331f0538df3409e7742b71de0470fec2249c33acc4f91ec0f94b9370e65b89f34700e7af4cc249baee9c0ce75a80f32d937092b696c8709e0b70feda249ca45bea93e1dc0270fe8612273f51cbf9ed1ba5ec0930fdd624afcba3ec7327f3badb00ceb74dc239dd4a9c97009cbf3309e70c2b71fe1ce07cc7249cf956e27c0ae0fcbd4938a759897309c0f9ae493849877fc970d6029c7f300927e91732c870ae0338ff483d93136e5eca3934313e7ce1ddb2d4bb2e83b06b986cae715bd0f7fe274aace33d5837b3d88986c94f4924444d56d5af03a8df4bc7ccf899ec68dbc8e7399009fc991221ff30f1527902b7d3259c639c4105ad3780f67e3ae618ab24de20122dcf3797488fabd48e5cdabba3f6b120497f60ce4a0d1ba71ef604283f3477263ce14405b282e7319001fc251d5b4b4df3f86a1a8a1c32787301bcbf9a3d8986705e27d9249a6920d9ff2d1dad24b851a42e89db5d41fa01f0d68f28717287503965898058ef488e054a586122fb00491f00f1ef9410c77a2a4cd50c2e60d57fef45572b25ad3c4da6c23c1a24fd7f98332bc9c6999e2b80c7fe339d5f76e189bdc2b342f3e8eb24f904e0fdd8a49d40483b9ac970760109ff5f26e124ed1925c3391be0fcb7493849fbedc9709e0070fec7249ca443c864386b01ce4f4c1a06c9a35c3b4c360cf210288a3e3509e7742b71de0070fed7249c33acc4f93b80f37f26e1ccb712e72b00e76726e124dd1f910c6731c0f9b9493849b7b120c3793ac0f985493849b79b24c35901707e998ebd64a7b5463f3d5917c807001f5ff0463ec8c103de223c51c9ae918fd8072f04e08528e125b794551532f60d08f706ad9d36a680b47164fdbfc023db9a029270808d0ce41ce091ed4c0149d8914106720600d9de149084333dc840ae04203b980292702d3a19c81500644753401256bdc9409600909d4c014938d3880c643100d9d914908403ba64207700905d4c0149b8a11419c8cd0064574a90fe6668dab89f610780b21b750b3bf27501ae6883e0b0556cf6cc5fb36f1a211f5f53f0ba53c2539fa08d4c6fd5cf2382db9273613b681b8a07c9724a00b60725d831cc3b59cb9d441899dbce05badf9d8e97f46ddc30321b24fd9e9490bd8baf5ca07c461ccf0816690b277b373eab06587ba5a3704a6e069c8dbb708e07d9406f4a946af9002ce793cf6109d192e5b027032fed93cec45fe528b186453e760785a76dfaeb7e2aac8d006bdf740c58e41d45a33d0f80e4de8f12de404d728f9773dab8e96e1ef0c4fe26c1b4712af64c00738049306dfcecc8640073a049306dfcecc85400739049306ddc0776228039d8249836aefd9d04600e3109a68ddd74e300cca126c1b4f1b323e301cc6126c1b4b11769248039dc2498367678640098232861fa5f93465804912d531908708e3409678e9538e7039c1926e124fd2e1b19ce1301ce5126e19c6e25ce3d00e7684a9c6aaa351f3ddf097a32d3b2c9045de266117c635a734c3d7ab6b08db333cf049e389612653fc677c92e933b19725135cee3db9cc76bc5e005fc90b27d1ed91e78e4384a8c2359641719775472a3a32e4f12e582079fb4309ff1bd10f84850992380e79515cce6cfd19700b8e329e166b0e8f19fadcea347ff3628ab411630211d2397a96d7c4698bb924dbab919786e983a778d5750294b493d744c8808e369c04327a623038018fd6d8146d8954cb6055a2ec03bc9dc0c807064932c03f831c8002653a21d25d02e13fe592c8aa34a591ba810a2d4b4b0ed2202b81f973b7fbbe29738c74a476c858575832e00f09474e4b0d80ca685720f3ad21c364c95c3fe0b609c9a8e9e51587f558d8148f3c0eefaea000033331d536d21ccc45980bd601701b0599460d506e6b9ec68dbc0fc1040986dce8c4f1be7862c0528a751a21ced0365891366b568ae163a7fa90e9506da62691255b1f46f80388712f16016ddf2af13bd51dbe2faac8d23a01b40553f371dfdf8c96e9932d3caef5aff19f8e7749370e65989f3168033cf249cd3adc4791ec0996f12ce1956e2fc09c039c3249cf956e27c1ce09c69124ed2b94d6438e7019cb34cc2996b25ce5301ce634cc2996325ce9300ce63d3d172cf16bfdd231f1f2d616ef788bd9d1f9b00c2d9e64c7ab0716faf1ad00a9a63ce9e0c36aee9180050ce4d57c2763b42b8a0dd3251a7a14bee3d2a845f0509fbb8740c61708495cddb5ba8dbb6f76c3e0f30ce4bef28e6d13e436410403bdfdc01621bbfc97a2540bb201df967ce5137a4310e205c988ec9b47cd7e2b44fa6259bfd3112e05b948ea1dfe4468472ac1c13ba13c05c6c124c1beb967701984b4c8269e37ae16b01cca526c1b471bdf01d00e6329360dab85ef86a00b3c0249836ae17be06c05c6e124c1b47cb2f06308f3709a68deb85af0230579804d3c61d93ee0630579a04d3c61d931e06305799bdbc8030e1933530bb822ee2c274f46f4e6bf6d70ad12de7ce81b37dd1ebd780971699342299479983928d483e02709e6012cee956e2fc0ac0596c12ce1956e2fc3dc0596212ce7c2b71fe10e02c350927e9aa36329c27029cab4dc2996b25ce7d00e71a937092b68dc87056029c2752e254fb1ae7782af5360fa66d07f0d6a663510b9f8cb088f15d40ea9c164fa5acb4bb4b592a85c0322100ee0fd260f544aed100f14926eda5443a824e86b313685e9e6c124ed23e4f329c5300ce7526e1249d474c867315c0b9de249ca44b5ac87096039c1b4caa2ae5518e63925595ee0745d12926e124ddd68f0ce71500e7469370ceb012e76f00ce4d26e1ccb712e77700ce329370926ed84b867325c0b9d9249ca43bcc92e16c0438cb4dc2493a43890ce74680b38212e744e6dd3981b7e52b1c1e7cbebbb233b2c8001b3c9eeffc552fc63b49e7c83f122202be17d44c2b2981ab0fe66223f2d1392b1948b2c559a380e76e3105a48dabdcfa03905b4d0169e31ec9e70090db4c014938d3930ce41400b2ca14908493b9c9405e0a409e4a09b2378b6c84c6fbe6d586d2b64fa6791b00dc4e0930db533d6a4257b0e10b09173a4fec70f4a91567dcd4345596c650e13f155496aad3317d31d95e51c2f14ebabde701cc1d26c1249c0b4a06b323805963124c1b7bebff0372d95a936012b68bc8607e0a60d6990493b0264a06f33300f334936012b68fc8607e0e60d69b0493b06a4f06f30b00b3c12498367e67eb4b00b3d12498846bdbc9603250356a320926e1da76329821007327254c7c8ff825ceef2ae67e1eaad411c005dbbf47fc1a90e47751821d26c0ae701e28175314e172ad56fbce06d922ae8e00eb6e73b64cb37127861e20e9ef31773725c2f29e6c37a57b8197ee357b252761ab892c13c8029e7b3a25debea0d0da290aa5aa74773defa78258067c745f3a263ac0921f2baec8cb7b329f1c01709e918edc3436c927939fdab8375d5f90dccf4cc72853ce5136caf40ef0cdb3d25169c2c63ba32b4d36ee6b3319a0dc9f8ef6522a9526c2010fb2447e10803ddb54b0367efaf10200f61c53c1daf851dde300d8734d054b58bd27033b0d803dcf54b08443776460a702b0e79b0ad6c61aea5000f60253c112764f93813d0380bdd054b08483286460f700b0074c056b63d7df6a00f62253c112765793812d05602fa604abb657cf63adb0bd3a19be3301be4bcce903b071d3cbe301ca8326ada527ddc589ac776a0ce8debbd4249ca4db0e91e15c0e705e66124ed24db1c870ae17383bb6f7085f12237ca130969b5bce221b0465b2a58c7725bb5b08953be72b4469ddc83639c9759df3cf5f1c6c70fee9ae87c42e508bd96e5627ae72791542f60ee72ed7ac81654f701eb99cbb4427e91261915bcf7798373acf14b34a11fa1e56c2dc0d900a9ddf6a7a4693401216bb9b1639d79a181f58e421d4389a6c63f5c2e2e80d92c2a14e8293fb95276e17071896baaa2f3f15c872a2cab1b94c6852ef3cd34e84e3ba5038d41d9ca96ef90251cb69105a7575eeeb3e74d4e0dce3633eaa365422ea42f50e25ddca071ed121310ca0ec5a299894396f9789636973e85961e7b150bef3cbad776536879129574aec906791b013c9e4311b5fda153cfa42fa145ddd623e99c8223719f1f7b788992595426a41424b13db87fb77b738b192c557ff1ed5f65fc9e35d46bb70d381c2e5573b31ef0ae76e5feffccd95eab2a40d6bffff001b64b33cb4420300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/a9d7f3c7a72f844488ff7cbb04cfd1a6.asset.meta b/Assets/SerializedUdonPrograms/a9d7f3c7a72f844488ff7cbb04cfd1a6.asset.meta new file mode 100644 index 0000000..9af8f78 --- /dev/null +++ b/Assets/SerializedUdonPrograms/a9d7f3c7a72f844488ff7cbb04cfd1a6.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 935d4620366af6641aaefb1b41bd23ac +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/acd8738ca64f5a9448dfb040d1f2e4d5.asset b/Assets/SerializedUdonPrograms/acd8738ca64f5a9448dfb040d1f2e4d5.asset index 48d628b..6fba8f9 100644 --- a/Assets/SerializedUdonPrograms/acd8738ca64f5a9448dfb040d1f2e4d5.asset +++ b/Assets/SerializedUdonPrograms/acd8738ca64f5a9448dfb040d1f2e4d5.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5a59531b4710ee155a1ddce0d8e09cbe126473ec82abf290872406db09558e7171bdb852b280852825b04a222ef217f28ff2df5245ba7b66d1687746ab058d8888a5d21e73f4f1754f4f6faf321ee0c759c0c32e6cc21a2cc10e1cc07b38c1ab353c1fe357dc85ed6fa081e7233c56b06f01ee25cca4cf9c338bc775bc6bc229cefc03f6f15ce5fe2d08f07a1de7067847ad87f80b709493c5493bf01c36e035cc38b71348ecf2a4a66c73482fa780c755f8137b03168a9878dc3583872dec6972df310a1d8e7b0bbfb25ac7d8b78f731a50439a7b4cb1b080478775e2d3285cdc4251b976e42f87bf71791df66722d7741e93e721396742b947149c47117e598546d85650da0a0a7ffa4d46f8e595b139a58dceae6c9b5278a9ede3115a23ca3df54fcbb13fd2f9fcfcfc1fd7614bfe8cd856a00e1e4f7c9cc2e5c299c9cec63264a411e698ed299ab58e043416df617f3a85a7b0a2b5f85d6754917b8d8f151c5165a2c42cc2e2ef180b12ae86df4071d726b6ffc4de4e0e5bc59e257885679af50e96d101df46a8ec22db1aba7c00db78ac33bd7728767c64924ae4dad1399b4853acbc636c0901ade37d8d25dce2e307963460e9d7b1ed94e3c0094682553c9f31b7b8ee0dbcd6f1dc9690e965d42f4053bb58e6a1999ea33624bd476be7a345aec5221cc66ec96598f53882fc15b3c4470c4590717963133496c5f6d1d6b6021edd3ae51882e9758c6b18faf70eb689c0f6827babbc1a04f6a45980634f59834e23432df59891232cb26e2ddbbbedca3e058f37a4cf1394ed0435d12b390f397be88552ae9bf549f4a8a91c9da9781bddb26aaa76ca625c95c775723cbd4972bc51b69bc4a1c61a0e788f0236e1bbb88dfc9c4c184a9a6d354920139c191d9c9cc96cf611cea448d3094c12762602267df4f81519bf3b31dd3a4b60426f48871ee778db7d446f95bda6c67bf1c925101c4659e7a308eae11b61f86663ca258b608230ab81d077658a1d8b5bc58850746720ecea08d3f219eb8670de4c38a733fa70bf23d00662fabb4ca8d29b7cbc9b4dc10f9f8a74012789bfc9de799d5908bdc96ecc3261364bc1e448535774a4a28e30719b36459e28f1a299f8b089f8ad1e101f3111ff4443dc49497cd484f7ed2be23d6692fa8e46ea624aa9c74d51813c3cb6277f0ba67486529430955982327e9b40059132533de3ab72db925177e868df2e2e9c2a3e5ca7094313264d66759a3c8b2ce0d67e27a4a7aca38ccf5f14849aa8d96f1cc8a372b66699dbdb7bda378634fa4d9af4bbabd3ef490a4b1da5b0541a89a74c127faa93f8fb884554ae42ce35de06f6714a5c4635fc76eae98d66d326cd3ed369f64357bef60cfdfd80ed25ea0157f7b5568f5eb73c7e1d8782e20b1ed9c0b96f78e5d15d133c8e973e745f2423eec7883779f83602b0c79e9e5c32a3072d53c9ec107a553d49d242e045f30fb9c4163e91ebb44bd6c95c29ca4b8d425a88346f1e374dd32fc8aa61353ae3f13e367f496f4a96e24be236a4f7a1f4cf8782c06b7ebf8004c8640dce5d5fc947d2440e4909e12213084b083da813938c228834e4b6451f5ae411e22f7be667972b02c457c404c7a033148f5a89de41748570a2f25f93fc2bd5c34b1a2f6985587d68f4a9ebdeff3cfaf914fdee1308e361b0f029583cb0b9a289276d9855f936afc2a945802d2b515e57290316db56b9db8d229759e9055ee902b6873661230627fc76638f7d6503bd2574f6a63de08ab6801b53807b6413b822531309f64b7eb95c433106cfd34615c0beb60958412ed00a0e38c2185606df1e5c13b6e0ca2b707d733df16c7900bd2cabc036d70f2f1304ea76bdcc5a141b51e02a5d8f975984cd9a978102db63dbc13f84ed803781c1f4b38c02d8139b80e5256001033698600d2b60cddb046b4c82b5cf99777b0dc9227023b6801b52805be847f01729863fa029464e816bb11f51ecc34569d36a7291b70598ab00b6d46fc02c7a9835c01c0530af1f8089d4822a418319fa8b70630a6f3ed564e81dc04585aa6478962d251407442d6c4a624079e32f10b0a10ff8954e45a98b79fc368f5e37a6291677a6995cb4a23fbe5d94f322b6abf5cc76bd28c4e934bd4a516eb483553c7ef37893f55f01f1af71fe909bce70c976072d2f8807e8ca0dcedc1b3cc6fd1748cbb878b4300000 serializedProgramBytesString: - serializedSignature: 9bb949538d78dae14bbc17bc9c92a3fc129438a18dad1579424bbaccbc1dd5629af48111f3ec765e9982bd883ad256d06c8d47ba10879b63dd06dacece1a280b + serializedSignature: 563d0a13b8bfb5bcc3a7f3cf7961f8de6e48cb076a0f5c3c02ebd4bb5a20203518a0989e8e3c454a6854349c6a2eac2ffa83f487f0ffd077afe9350eb16ca305 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/af30f5be41a8185409ba1025ae8b92e7.asset b/Assets/SerializedUdonPrograms/af30f5be41a8185409ba1025ae8b92e7.asset index 0ffd8ed..44a0a49 100644 --- a/Assets/SerializedUdonPrograms/af30f5be41a8185409ba1025ae8b92e7.asset +++ b/Assets/SerializedUdonPrograms/af30f5be41a8185409ba1025ae8b92e7.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c5545d6c0e701217442ef10442428901010bb4817454108d8508c244034149380e0da7befebda7b5fd7debb6bef7dd55d5757ddb5afabaebaaef5bb67ee4cde79f3e6bc77efbbefbccc65bff02393dbce9cf39f337deedc56e5c2fb498cf27e2d1073c5143146cc173562a558e1fd35c50b977bfffc237d7e8e68f0c2a5deef6aefda28519ae549f81991e8ebfd9ee91d358a26efc9d562b117d6c9ebf344adf7f74cefd95aef08ce2ef1fed77a7725da780fcd1753c56cb1b3e893e89545c402f950a33a9700bb12edbcdf93c53aef6aad540a22299797fa78bfe679571ae5b5e59ed2fabe3dc55ed2ace5deb5c5de330da2de93b9af94d86ed45021ff107ed059855d54d8d1fbdfd6fbb39b3a6eadc203d4f9eee818acab57c75d8dfb4bbcffedbdff45deffe3d5b956ea5c3bf5378ebfa30a75bc0d2abe1ee818e27b298bbe252a6c34f46df49f2faa31ee6bad7482bf755c4de89cbeafb70abb2bb93d8deb7dd0b3b6eb7d55d893b8de4f85bd88ebfdd5f95eea78800a5767d0b54b165d5767d17560165d0705d475880ad764d07570165dd764d1b5348bae4303ea3a4c850766d075832cba1e9845d70db3e83a3ca0ae2546b816e9bc1171ef08151ea4aef746c710ae4332d6a9f03722352fc1b12d2fe9f0e0107a1c6ae871a80a0f41320e51617b74ae4c8587a1733aa47c4a5fef839eb55dd7e93492b8aed36963e2ba994e9ba87014d20bc2d1ea3ead4fa6f2718c90656949df00f7b636c2c333a487be47a7c791467a1ca9c223908c232ce951aec2a322a4c75111d3a322607a646237d6e7dce72982e531486e25c1729c0a8f33581ea7c263d5f9bee818c2a3d5f97ee818425dd71dafaef747c75e3e2c7ecdd7b95d27755ed7a527a8fb0718f24e30e40d4c95d7ae2203a78e86ac13958c41e818c293446a997192927db8d2f5ec0c7168199baa70bc91aefafa04c41f429daf3653a1e6a1753dd9d0f564156e2e9adb2a1dae0ce023a64f9c1ac2274e377ce274159e66f8c4692a3cc5f089530c9f38c3f089337cceed3f56f6941ae976a6e113a7a0f358dec054791da666e0b285c15bcb3ccbe07d568ebc8b55f85b256f083a86f01c75be141d43f83b757e283a86704b159eabae6f808e213c1ba5675be399f3d533c3d0318417a0672e50e185eade0dd13184e7a9f3c3110f082f36eebf58851719f76b9d2e55e737427a4378993a3f02dda7cf4378b9ba5e868e21bc449d1f69c473a5118fd6f72a239e2bd17908af36e2b95a855718f15ca1c26bd4f98d91dd106ea5c26bd5f54dd0fdfa3c84d7a9ebba9e3dcf78fe7ae3f9ebd079087fafae8f46c79eef77d1e9a1f9fe41dd37061d4378833aafebc24b5478a36197b6f726e3fc8de83c8437abebba3c3679dc62d873333a0fe1adc6f337a0f310dea6ae8f35ecd3e72b0d7d6fcf923e7718fadc8ece4378a7a18f4e9fbbd4f971e818cbbddb907b273a0fe13deafa7874eca55bd79f0cbbee33d2ed3e15de4ba4dbfd44ba3d609cbf1f9d87f0c12ce9f69061cf83e83c840f8b543f7ed8e0f58821ff5e741ec23f12e9aacfeb74cd54e66e2d64f9dcaf9d3ad6f5d8a322b55e7fd4675db29b7f7f497d06d95ac6362a7c4ca4d6858fa9b0834896a53afec78d781ff7e3edb6103d03e113c67d4fa8fba61af76dabc2270d1d9e54e153161d9e52f76eeadbda1cb7be3e115d87e3edfcfbfacf52c793fce362dd070ad3c6781ae93359d8db185354f8ac61d3b32a7c06c978c6e7d2bdc4d7a97ba93a3f55a4b67fc3e8f8bc08de0e7ad1d0f14515be2052db412fa8f03991da0e7a4e85ba1df492486d07bda4ecfbd2b7a787ae83743be86591da0e7a0e9dc7f206a6caeba1d33253db58cb7a45a4b67f5e51e1ab22d5475f55b22f54bade9c210ecdf7352563023af664f4ac30ee9ba6c2d70ddeafabf04feafc66e818c2e9463ca353e3e95562c43343856f18f1bca1c2378d784cfdde329e7b4b857f369e7b139d87f02f22b52cd58cb737aef734aecf1449fff498f7da9e787e7a80e7b3e5136debdb469abdedb3ec5daa8e7750e15fd1333adfec88eec1fae8ebb3843dbfeda4c2770dbeefaaf01d14d73b482facb3a7639f0b0db93babd0ec9be9ebb3097d74f83714870edf437fcf219edf45851f18f67ca0c2f72dec74f877746d2e217f9e0a3f34e47fa8c27f18fa425885e2c62cf4f5f9e859dbf50522c517fbe876daaeeabc6e6f67f2315d0e7e84f4d3e5d1c722b5acfb089d87f013915a767ee2a779dfcf0d39fab94f456ab9f6a90a3f13a9e5da674ace63849ccf0d393a3e5d7fee66f0d2d771bf1fcb1b8c8ee1fa168ae7db01f8e93ee61722b58ff9850affa9ceeb7ea0e6fd2fc4fb5fe85e08bf34b87ee9f3e8dfd788f36b23ceaf0d79ff56d7b742c7107e2552fbb75fa9f01ba4d337ea9ead0d9983d13162d54fd76fd4fc4a2686ba6df5ade107df2abb0ff6e3e87f7a06595ac6ee2afc4ea4e6c3ef54f81f64e37f54f8bd48f5f3ef091bcc38fe6bc4f15f15fe80e2f841853f1a71fca8c24eeabc6edb6a7e3f211966bc3f1bf1feacc25fd033bfa8f05723de9fd0f984ff27f63579ec312fd56d893d54d846850b45f3184ca9ce9f7baa6713c9f8e5dff07f2f75dc5aa48c992454b99968859ed169b948857b8b947cdc7c7d1f640bcee713d57d6d10077dae48a495ef89b622c5dfe4b1f7eca02f53ef13d5447cfafabec25e272c5672751af746c7107644b67744bac3bddb1ab26ab2e8504be8b044c9ed62e8a0fc2cd119e9d0d960e58583b51f183e48dad415c9eb8a74d636c23313d1b1cd661dd7d22cba97a0b84a8cb88ad433dba9f3457eda0e7e4ad9f5368adbf08f663f5b66c832fdb02e9579f3f9fd0cbbcce7f6279e23eaafe6eb46fda5f358a258a4d603aa7e906b00d0f984797e52aa1c3d5699e82052f3aa4a8f049ab749e8bc54afee9d6c9c5faece4f31ceaf50e775bf5ad7ed3add5aa9ebba7ddfc9b8dedeb8aecbb3c1e818d54b03328d2be87ef89eea99e919eeb59dd3f5c2ca2497d4fb8a12d207b6f77267b55825cae583307a1974c9897e32fb6213c90d7ec1cf08196d9358e73d5a6b5bf1315fae2769f27ad595d6151ffd647ed6b14f91bfabbd3beaa4d01989b428ee498b0294abf7fed5a2e52a8ddef91972b50b2c58a9f3ae8cf13a2075f2a97dc4582f21f634a42cf0a2ad17abbda32aeff72a296f1f4fedf43bb399044b5bcc67e67a32fd9537cbbd331ae82aefb85e6a384ffe5e2335ad95dacff4ce35c975402bbce269b217ae95b1a5dbdee0fd6d8bb34a21b3eb685f80439df797f9e8649aea5903da97cbb2ffff53a42552443673207fc04f9b7259bb9c989612ffcfd02f64a0629da9648c95c81229e72a45391c26e6a6110c6f63ba8576fff6794f10e333da622703c93d405a904ce1f99f9f5fda76f9c8db8a524d1b27caa1b929c709339996092cc82b93ada230261415b5a900454dfc091b7ed964985740fcfe7d75f2bef009d056567ea909209b8655de1f6bbdfff5decd73bcdfd5dee3f5aa9c833c96963a156d5543aacc527d66539242dcca86b85da111672f5332216ed76c571231fcd809b6270866d38122d8da4650b6bd16b2124c6f7ce9bf267bcf2ef348ac9135ea6aef795b632d335368608f3698da7976943c4bad4dc8701a5184dbd808cb1ec07eac84e77be7fce6e53479b54eb649a075522da5cff6bc623fd576017ba8fb35d39de4a2e7d55293ccf43b05a6df59d28769604e6da99429b2a58cec3f5515b0f4806b2ba5946aefdef0e50774de37318b683beeae1277df34e3b2ab40216c6b4328bb98b52de2dc500cc2738be573d0389f1bc069e0a9cc904b02bb7437c978640697ce5d472a158a2da95001454c779bdaed0db521131282dbd992578e6a2d6ac1e4f5db1e5193b447e024ed29937458d6240daa17958ced6dc908277b0549c68e743276a004f78e28b8a3cd3fe468e2fe2de21f5ae64a790cb1e95770f257bbf509ec377da5df9467f09bfce84bf953275beac831e4952d923aba98ab926f7cc158c91269cd728654ea173895facb541a972195f2ab37955a9d6d99140ae001960ec2afde4f5a466d4f67d42e36579043fc851f0ac8ad9b04fdfa3e81bb498344a69e7cd84e52572a69065b920606c8c3244d0955380f89583877b3a5b93c59c8ceb1d9700f97eaa581b3f15061ef18678b9f4af3eeb66481b4dac0e288ad6d693e884e9a1eb6a491311ec19a3441a7496cbdaef4ba4a8f9343f9b8446a01e7418becd32b99937d58339f24e372096d9a083ed9c36f052c48ef20b3a0dd29874ba7744b67cae17bda1c1e7a161b09cb182038eb224f4b181d81daaec6bb58275f8a5ed93c1e087aa5e58a623a57f4b2e50aa9d6fc021658782c927a813bb3f78eb079af34ae5f9a1d41628325b36d85fa29265c6da474b5dc22a05ca237e5121bdb5ca297748945a2c2fb5feba1f75d75a6740ee818c13598f5f45ff70fe3187d283d36a15dd3d763996cb0d528a7c85d83be9406a36c1af4b492d85965eddcb5e8476931daa64557a405c4b6d44bf5dce3ee4fc53dc616776714f722594c2d559303610b8501b6782189cb2db9ac02ea888a64a16cc6339c8e672065df58da3e28fef4e4ee14e56b4b6dadb40cf60db2c50b0e5469b30ff2d838a33830231b494736d81619346a60f5b0d9a891ab7c42346a865029b529955213724aa9522aa536b3a55497e694f2bb6f8bc5fe39a7d5502aad36a7d26a8bdcd36a032aadb6b4a455ab906935cc261cd26a2b2aadb6ce29ad36a4d26a1b5b5a756d4eabd95e29a59754e49a5ac3a9d4da964aad89b9a7d64694a1db518682394d9eb9d1db4d23a8b827d9e2ee2b924573661de0ae067947186dca28d79a4cb9d6949c5c6b2465f5549bd5bd9b5d2b696bb240f09b47f33da7abf1ce348574b48d29479b4639daf4dc1d6d130aef0c0aeff639e11d45e19d69c35b2cf1ce54c36072903b04c0d196b8ca65e3135637b65c771806f356cbd632fcaddb715532eee46285281d5d788b68900153ffd8dbf9f0fe51997c73b410da533d833136ef8011b159227d44eceea2702362e536e1e0e23b512ebe734e2e5e41e5dbd954be9d937bbe1d4b11dbc542acb4381cb14a9b70c870736d99151a11bae49f22d7333408b3b31626fb8ea3629f678bbd9f48af7f282d72ab81c6dbf401ef8069fdf4a9725372575af2a694a5f329cedad235cda773ef824da0625f902df646c5190a47bd5eb5d6631c26f6cd2807ded5e2c07ddb8773e0cd2dc2cb65b77f396b0d107eca27bfd354f06642b0f1eddd65b93f56e4324d95af29aa2d2817d8c3e202c77708e7025bda5c408ebbecc2ea02e1d7ddda93125e7a686f308044b327e742999cbdd22ccbb83c9520b7958d9c1c2b2aec4253bf51519f133d78ad6d487a43683b3bbdbd05b58e34b30e14c1ad29c75e6471ecb292708ebd0d556cef632bb661d27e95b1a076aaec9454872aaeb7a562ad0e1aab1eaf0c13eb442ad67d6db1420a8791be1d954c8b2dc954df2d5c324da284d758841f1c52f8648a4bad8d0b346975d3c85c5c0da577b587b33e74053e85d261894d878122bd99965997dc1a6b5329ec4b2dd84bbb87c33e8d327999cd6418d46d6a1e13982adba4d5420f4385316aba2d5e2891ebecc55cbaf0bd69e13328a3f6cb6ed41ccf9446d90e086fd4f654bcfbdbe2d5cdcf71796afccea462afb7c58ee7a274e3b70a51d01b4f4315d7184a8f1d6c7a80b1d050b52e5009312cbb2365e48a4c882bbdff757998669b45c5bed2167b4781a778a0f908430c555e1826ce9da83857d9e2ec9912a72deedc0aa19d292d0ec8c4dd77ae263562983bf7d954ec0db6d8bba630f0372ccfbd529843c5dd688bdb9f4c9921e34cedb3cf976dac3031ef42c5dc648bb94f8ad5b406b9a5ff5c4a97d5365d7a901476913734e6c4631ea5c31a9b0e03b3f23075c98d4c15a5d581b47f2cf29e5b2475a98f902be65331afa5d3c4e77180c5f2dc745840e9b02e9bf58b52a6adc27bc3ae54cc07d96286d6f59e29331bbb79a5f95e5e0fa84a2efe8052a1d493b3d2fb0dd5a11e032a4d6bf497a2c602f4a0f6f522f0cf2e83f697e57e084b3d3b57caa36a59a1ae94afb6fbe522c47ca06c722c93d74b65efd2d733290f7a9d434311dacd46082a25d815dd1ce54b979c61946f778afdc136f6ed447ad7298c1d7bd86203a18788f40670a781e11ac07bda84c3eb00b0bd7b9437431652820f8b28782f9b6018063a5ca48fafc8217f53f8425af8de36e130b37044f305636601b65d0f3fb3b088f2a0a36c1ed4c1e24161a7d0f6a1623cda16231c26f3799878aaa9788eb1c5a35b4ae3f3d442dd978afdd84cb1e33a32d90998efd5fab342c5be988afd385becfd84adad6ad722b7bab986d2e7f84c3426e4292d6aa9d84fb0c5de2d635ae432d4b4848aff445bfcfd03a5065ea2173e3d96521a9d44e5faa6b498c375469751319e9cc903c6e6a94b5e47c57e8a2d76bc2430d9258776417dc894df8f8af7d44c5657e6c9eafda9d84fb3c5ded16275f8d660bd25ce72b922137caef0d3630b54fb1146d6c7e5794a0c36256c6d602c97ab4061e90b8f46a55ef36262f217b1c41a3ec150c6a805353bb1dc96fa72bd6acbec20003d4bbf6ddf20ef8067f3eb0367da7c40ae94cdb457403ef4f2d25fa4fe22dde12c916df3827c284439c50a5b310445c2d9167615034cab6c0dda33e80268a52d36a8c1e0d31f519afbab28c1e744147c804d3094c6f0f19148ddc3064af2b95125375292cf8b2ab9c95684c8d5e0752d5284a4bfd294df02e47c9bf75873f10532178fce908ba3eb4ae5e1d5b6f48654b93088f35f4027f71a4af04511051f4809be38a2e0b536c130b0714910c119de825d4709be34a2e0836c82a19b735910c14369c1bfa14a81cba3960207532cae88c8e2104af09511051f4a41be2a22e4c32847be3aa2231f4ea1b826228a2328c1d746147c24c5f8ba888c8fa2185f1f91f1d136c1d0cf830f45459d833d86e27c4344cec75a0497cb97a60abf07032c260dbf480bbeafd5230dafbd5e856f68d13b3050f15335e571948fde14d1478fa70adb9ba316b627504e7a4b1e9cf444ca496f8de8a427513c6e8bcae3649b6498d6bd3d88cabbd3824fa140df9107d0a752a0ef8c08fa349b60280deeb2673253f48db4e8d3a9cc7277c4cc7206e51cf744758e33a934bc370f697816e579f745f4bcb329c1f74714fc5b8be0f252d162dd35ee65f00fd87859ab15f8445fe6ee1adff2f7736cc90da9f25090e47e904eeedfd904c320c8c3410467180439d726185a608f04119ca105769e4d30cc78c1a70da32e703c9fd2fad1885a5f40e5d7c722e6d70b6df955be2d5ed322f935c88692e173e9e3c2322a2b5f532fcb901f73d5053256fa98a5b5507842160a1c4a5045c14594ff3f9907ffbfd8261cbce9294b02546c908e49b132a37c828ef2129b03cb4d025a7e82a932cf6efcb4cd8d3714212698c26b94d5859f1161e696c22b4039f2a5365f03459f0d522466a8d32eb30986f989e76c4e1c757ee2722ab6e73962bbc2161be496176cb16d9825a267e888aea452e7c588a97315c5eb250e5e5753b1bdcc11db35b6d8a06c864f86462d9bafa584bf9a07e1d751c25fcb83f0eb29e1afe741f8ef6dc2a167089fb18dd433bc8152fb8d3ca8fd079b70c8c86fda1c334246be91b2e2ad3c58711325fccf79107e3325fc2f79107e0b25fced3c08bf9512fed73c08bf8df29c77f2ec39b75356bc9b072beea084ff2d0fc2efa484bf9707e17751c2dfcf83f0bb29e11fe441f83d36e15054fe5d442c2aefa5d4fe471ed4be8f72f80ff3ecf0f753567c94072b1ea0847f9c07e10f52c23fc983f08728e19fe641f8c394f0cff220fc114af8e77910fe47ca2dff9967b77c94cab65f44cdb68fd924c3703d7c123aca70fde394ca5f4655f9094af25751253f49c1f83a228ca76c8261c9edbf8308ceb036f7699b609821fa2688e00c3344cf5090bf8d0af9590af27711213f67130cd338f065f0a8d338cf53a0bf8f08fa059b60988a83ef8f479b8a7b9122fd4344d22f51cef16354e778994ac39ff29086af5069f873c4347c95e2f14b541eaf51927f8d2af975ca3960679428cef1279b607ff3e8e835ee1b94d6ad226afd26a575eb3c68fd16a5759b885aff99d2ba280f5aff8512de360fc2dfa61cbb3811d1b1ff4a1521ed12d18b907728b5db4755fb5dca473a44f491bfd90443a9d73188e00ca5de7b94e04e1105bf6f115c3e1c4ec2ebcafc3bb2ce1353c58edeb56af9d2d41875de7f712ab96b69ea5d99677d3adb8858a762ba24602a66b0bc33776da809970f2827eb1ad1c9fe4ef94249445ff8874d30f842b72082812621f8430a45f788283ea2ca9f1e79287f3ea684f7cc83f04fa8c2ad57d4c2ed53ca3d7a47748fcf2895fb4455f9734ae5be1155fe279584fdf290845fd884977a87fd83689d61ceee5f94d603f2a0f597542a0e8c9a8a5fd924c3e2a64141786458dcf435057a7044d0ffa6040f8928f81b8be072f9e5007899bdf0ab2cf83e015d1ab8b61d2a6b5bd8429f434baa16fe9672f70da2bafb7736c950a90d8b58a9fdc7e63cf2d30f85f9527ba64690feb054f866d986811d6578c2fc527bae1a514ef13d55c06e948702f6bf945f8c88e8173fd804835f9405113c9c6e9efd48e11899071c3f51c237ce83f09f29d69b4464fd0bc57a5444d6bf523846e701070c27590bbb31510bbb844d32d4ede511ebf65636c1d0f4ab88d8f46b6d130c7dbdb1410467585bdcc62618a60d2a8308ce30bf5044091e1751705bca2dc647758b629b6428b9378dd8806a47099e1051707b9b605819be5910c119568677a0fc6df388fed6d12678b877b845c45e79279b60283cb78c587876a61c79ab888edc85d278eb881a77b50986e27e9b88c57d894db0fc345910c119be32d38d623c3161d99c087674b6b7a6d3f73c9824b716852deac6c80d8df452647f13da64d32ef985ed4572aba3b0d2c3247c77cadaed6cd66e2984b539385f3694eba59e75aa390cbacff4fef21faf53bb9b633b71afc4bc060de895b2a90d2f2285b1a80765d1249b4553852075f26d58e9515ee4b1872d51ab958debb2d8c26f654fcacac9362b6b9bd34d7fa30a7fa1caf737e8ce2c11d5aa3b33b3f9cee477affc37406a3d026be4dd63d0f6c9c9fdc061333088ba416e5fea6fa86cda8dbfa81b9cd6022f86ba909b33f7a2384db1719acfcc09b60c842d861b65ce5f8e9ec94c283a87de1487a9360e7b30729811d95f688f0943a40f45649a8dc8c92de61953056c36ec6ff05b23a62b62b5ea4bc4c17215ae51682b925fbbb37feb2e1f7ed897a23edd46bdd2289da7483d7d76ba7c862deb933b2284a963924f85b1a01f65c10c9b05634359a0eb7cbb96743b218cfefd29fdb7b7e93fc9d03f1927ae1d6709ff2b10556ac3ee4c2d1abaa5939f9a710065df4c9b7dc30dfbcc369afe6ecb2c991f960ad8823b3fe93090d273079b9e3b064a8719724050ef97a75363b6f777b2fdd292693388b279c720b91fe765339d66a8740a6a43aeb5c660ca8259360bc665e81d54cb72a0bab9ad3c5df605a076c01fd1c5f7d9cafc5ccae021940d3bd96cd88ab46186aa89d2dbcc3ad734a56d2440f768d2371d0863532965d3ce369b36236d4ad722d5227fc3db649b8dc396a1942db36db66c1da2079a6acb524bfad136d9523b8c551b5056cdb159353d07afd39ff030ad36f38cfe406098de75184b875196ee62b3745ae8f473c5ce0d293be7daec1c4fda497f7533d55f1bb2faa89614c68ae19415f36c56d0b3ac3aee549de1931f75ded1324bfae04f2d86d178234ae32a6acc26b7f2a170a5f708caa2f9f92ebd53bfdd46db93ba0d75185bca285b16d86ca90a6dcbcce6fe43a3f5ae39b24590b97e4ab58e83c2488ac2aee1465153b76cc06ddd99d277ebe5047c5ddead0dd796df98b276379bb5f42e2b366bb5efa68f39e65a7e6c4269bbbb4ddb29462b1cc78ad363aa1cd5a893f94be72deab94c57f263e328cac63da2d838c96b69d718e547cbd9389ab2714f9b8d3302da68ef43e6c7d2dc7b8e63285b1752e919adad01d7167bb6fb4b6c6ad2befac9518a945336ee95bf52646ddebcaf82d2766faa3d1fc4fbe679b7ef2bf4475ddcc86763294b1745afcba839c0e016e6db0b2b296bf7b1593b3be79ca63fe592af9c968f91917194edd536db370fe8d3a03d8c1aac133bc93b565bc7eef3efb7e3296bf60d32134a59936dacb7d035c3a694958b6d564e20fd153e175725e0835e4d868736a9b3dc737413284b6aa89179bb25d41c76f01633cf9cf566947db5d478419099934c5e95c98e5c73d5e694154bc2f555615e0f3e0dba54d9324bce87ee2a4b8a158457e57b767c0bca96a5365b268a207310d9dac8e1e71b729b5fd992b26d1935d790db9802d45db0f6a5467ae86a611b89cbcd82ad280bea6c164c0e6d811e47d4fae7b20e29dab8cfd69485fb851bc94a2ff1a60afff3c5b0ca605d8e255d2e396a1bcaa2fd6d16cdc9a1f594cf556441620963fdb694f5f536eb470afb6a32fc12022ee7e9da165f0ba3ef444adfe56156bf617d739997cc26338c45db5116ad0832c38a39469d61cd354d265116accc4fa9a7d7abe5368f978f32623265e1aa70f343d97a56f5023e220e82e6a930688f715c5eec9c42d97900b5c221aa9d73057c42bd5a64ef3bdabe2b980f9ba7523637841b2b086e736efde5fca4f034cada469bb5db88e0eb39e6652d6d38dbc5d329bb9a6c76edd05c2fcc9429d624530ed2c3f7b0e4bc4dfab570f3edf9989d2ff6fe25e44775a7494d605c223967d428ca61603151d16cd398e6b5826352560b26cf03ede55ebcd02bac127a0d67f2d5414ac26a0f66db56c2ff19918084685253d696b779a748f9f5ca36dfd761edcc0c598ad7caba66b1773c4bf89f7f375fbea4acb0addd84b336ebb2dba45fd534bfca9448142b8bb42c8f343480d63b4bd740aa7650a9daaa1c26cce5a6ecb97853762d0e84d85adb7da84f1a59dc26b1e9ee0bd01f124fc03bb38b54a6854187acf2cdf7ac4df9a3a500bd2e23abb8f9a8c0b389eb279dcaef7037087f580e7e8a8b5a5500f7b59c70ba4a38b305ac2f5cd5eca753d4a8e0d220f63980ebf46e495ceb3871c9f902a92014dea06a1cf05c5a94c47310279e2ecdde54a5e67ef68f9d2fb52b4ec2fa0d27ac5e121634ea1b5455011d64787da0a1b95393c4180774a3da27d11dcc89ae77b39f2d90adc25aefd6242a5f0c5e7f1b0778e3bb27e11dc209af7b33bcc9f2a11a04718ed02fa934c402da73a8643b94135ae76668babd16b772ada42489ea304e542512d52251d1dc05d48de07895660b7b25811dce5f116860ba71315d560bcb9bb364bdf2bb38a03b5c00bae22243b8b97c24f74e5238de74770e9abfd3c45ab9a4b441caab31bb77d0eb714ef32370f7ac2cad8b5316d2a7ca2c0ddbb2c0154559d6765f59c8c64e5996f2b62c40bfa52c742ba12c50d1951c79b18f9854c0c8cb91ffe38322153028721440808d18e0c72f478fe62c4707aad4f3c7c05688fa4063a8300a5969ea32304d97d49dc474e969d3aa7d4af9fa4c1043732963ef13c9eae9184eac830363b5bdcc32810fed055c68cf45688fe544dbd782965ea5b308d6b6f1e1ecca85f32584f338977056c612276c57a5711ecf89b34f169ca96bb62abd5a930de6de5c301f46be79824b30c7c610e62308e6892ec164acdfd960fe09c13cc925988c65261bcc3711cc935d82393e8630ff8c609ee212cc4d6308f32f08e6a99c30875860065f07c7da471a9e6082fb0b827b9acb7019cb5436b85d513bf47497e132b64bd9e0fe0779ee192ec3656ca7b2c1fd01c13d937f9e32530586574333a22ce6aabe3aa342e02c4e94c314ca7aef26c0e88f2f35481f0cb3f48eb130e8cc053981209fcd0979b80179b11cca6b52b0fd35aa41c7541941b38da95e820a86df7282eea9402f5663fde676b3da52d642612117c6bd10c6730ad141a030a696afe33907a3d94ad85a04f3772ec1dc2c8630972098e7ba0493711c800de66204f33c9760328e03b0c1ac4130cf77092663bf9f0d66358279814b3019fbf96c30f745302f740926630b930de62204f3229760c6b1f3b90f8279b14b30378f21cca508e6252ec1dc22863097219897b6ec08139e2289e30cfd3508e5652d89b260e34843b9501e84505ece8952afc45b1a68e4b340c3c923b9b00e4258af288487062b39e3d83cea89505ec98932f8a246dbee118c681fe442fb5b84f6aa96f5d2b857495b21945773a20cbf3e947184936d41e3db08e7352db99e24b5861fcb39c2c956c7ff8c605eeb124c46cf6483f95f04f33a9760328e70b2c1fc0ec1bcde25988c63ef6c303f44307fef124cc6114e36981f209837b8049371ec9d0de6bb08e61f5c82c9d8b56483f9168279a34b30e338fcf1068279934b30194738d96076416b926e760926e3d83b1bcc4e08e62d2d0933b56fce9acdd97ae7b7a36c7eab4b30e3f84ad71d08e66d2ec18ce32b5d772298b7bb04338eaf74dd8560dee112cc38bed275378279a74b30e3f84ad7bd08e65d2ec1641c826383793f8279b74b30190787d9603e8060dee3124cc6463b1bcc0711cc7b5d82c9d89d6483f91082791f27cca122f51517b8596f49b5bdc09ff95dbfe62ccf4380efe704dcdf000c0c9a84ed3b62715fac50847aed0fb4e4caa454ef8c63597a0bf2ce070b5196d22b93b0fa8b38cbd2f65c30f740301f720926a367b2c19c8a603eec124cc69e111bccad11cc475c82c9d8676783b90582f947976032f68cd8604e42301f750926639f9d0de67608e6632ec1641c8167833906c17cdc25988c4d7636985d11cc275c82c93802cf06733304f349976032ce0db1c11c8b603e550898d4f26c734d316336675b513c1ec17cda25988c15101bccdd10cc673861dadec9d0db4ef91b92eb70b2773becf4be46c066e9b0873c6babb32317da5311da6739d1ea1709f4a0dc6a79e3fa3620d7060dc83d578801b9602f62c5713b8afec8339fe7440951ebbdbcea64e46cb0fa72c1ea8860bd50e81232f856fc8c6d4cb6adf80f44685fe444bb815142e2fde58257428cf53b5b25f40a42fc92bbdecb3878cce6bdad5185f43227daae0aed3803f02af94120b8890d1edbae87ab905fbec2096f4060bf2cdc16000926a8df20a8af16621a38bd314fef2bcb5a7e76e142fa0f84f4b596ec6ca6b63a59977bb1b53b272098afbb04338ebb1d6e8360fec9259871dced701c82f9864b30e3d8bddc14c17cd3259871dced701482f9964b30e3b8db612582f9679760c671406e0482f9179760c671b7c39108e6db2ec18ce36e87db22987f7509661c773b9c8860be538871f7600b61e3f886c6cd08e5bb9c283b2b9410f112e12fd4f665c3a792d9c01571811308dcdf5ad20753c788e2b885d4b308e57b9c28e96f0f051b6b8fe368fb7b08eefb2ec3656c6fb2c1fd1b82fb81cb70197b466c703f4570ffee325cc63e3c1bdcbf23b8ff70192ee3d01d1bdccf11dc0fdd5dc11447bf3d18a1fdc88dc963db86bd8c63a46c1bf67e8dd07eecaed7327658d9bcf67984f6134eb41b0af36558988f5fea5dfa5ff89cde1508f3a72db91e2ffe2f2e7446283f73a39cb52dd26144cbb648a709a1fd9c136df8ddbce3b85cfc0984f39f2ee1ac8c25ce6f11ce2f38710ecd5055adcf1b635c8400ff8b13b0fe280aaea4b2d7fde378b19ec185b51e61fd92136b3bef60957709be1f033780a0f8b5485b235c5f71e21a6d6473df1b9b84fec473b5f440bad69fab7cb3c09f45d99d0bfcd908fcd79ce0f512dd0aa3d28af312dd3d11bc7fbb33f117c7bd41af4328bf7167fe2a8e3bd01f89507e5b881a3dfc67ce18c7ffd93e73361c61fdce1d0f8de3e6e9af2394ff7177682f8ef3abeb10daef5b72cc2975614f1cd795f64128ffebc69893add5c988966d6cff5284f6079706495817a0b10d927c8670fe58881a3fbba7ae0f7df8cb10d69f0a3d296dc73a433d52b037f1d8fa4ebf43707f76cf6799b7cb629b73ba0d61fdc58d4acb3651c23821cd3651721442fbab5b9516e3aa14b64aeb558453b462c4394cd8b6bcaef3a43785ea0ec4714560ab441272821372b6ee40fcbf1edf0df96bab42a00c32a812cf8d8a9e42285b73a2ec27cc493de83f2d16fb1b48f1f208c6fed4202ea0cf21a06d5c03cae8a16c408f46408b5c03cad82e65037a0a02da961368cf2c1591b694d52f177261dc12612c2e845f666fdeeb195156bf7c820be8c508683bd780327a281bd00b11d0f62ddb4cc273a271fcf8e4b50865074e94dd44726e1eaf7b827305989f675bdcb03902d8b1257dd1fc486ffc7a3f8722949d3851e63ea9cc585ab24d2af742583bb764ff3cb55319c7dd9e4a11ca2e2d8b32ee15cf7484b22b27caf0239d8c9ec936d2f90ec259c2897384c53353c737fdb1f8e5f26f6873ae9622a78935c21f99af92d40a30b6b42317ecd10876b7420e2b37087a45f3fab66ab43d1a56eece0939dcf631e362b9e7e37ce4b13d5c8219c756c00204b3a74b30e3b8e7e33c04b3974b30e3b8e7631582d9db2598715c9bb70b82d9c7259871dcf3712e82d9d72598719cdb9c8d60f67309661cf77c9c8360f67709661cf77cdc15c11ce012cc38eef9b83b8239d09d690e46946ca34db72294833851c2418d7700531cf15bcad501611acc89a944e0d9a0e4728482cc05b12d40d801e11bc2892fda3b4771dc5fec7084b6d4cdb921c60e23dbdc5005c23a9413eb508bc782124dd2275778590786895719a8e3bfa9502b047883421709c15ff0621c86637bc1ab180d100f73675e338e8370fd90976ec889527f0230f80aa5f5653ae3648478b81b05813f5197fad20ce3401ddb4b336b10da8d38d1f612a9d3717562fd5a40fb2f0472842b20e3b8b4fb2304b2cc1590717ce9e02704722427c81e22d92135b7ba2a50b794adef5482206ecc0931b70f5232fa25db07293ba2b6e7269c486d1f4e5d5f172a9620a8a3dc19ef646cd0b38d77de80b2fc684e947acbb5b106d0386fb9b610c11bc35d7b9b95cd34a92e7c14bd4a0af5af4304f103d906812c77676d3c6386665b1b7f3a42595188162585d2571dbe7cccdac7b9910be46908e458574032d6d66c208f45202b5d01c9d8966403f9020239cedd59a3387e4fe9108476bc1b836eb6f14cc60a896df4fd0b8476537746dfe3b8ce632384724221e636b37ba9b9b51a63b9cab6b5da5508eb66ee61ade42d53d976fffa23c2bab91b65aa6d22837146936d22e37c84760bb7de89632c00d8de897b06e1dcd2259c95b1c429d0f0dc5685284f718d1fac9a62ec90b255532b90976e5d88a1baf4cf51af50b7c4afe99440f0b669f94e687ca77ecf4420b77505641ca77e4f402027ba0292b19dc906f2af08e476ae808ce31cfacb08e4245740322e966503f93d0239d915908c63476c203f4620a7b80292b1c3c806f2570472aa2b2019f7476003f9230239cd9df7d6368de58bd3fb2398d35d8219c7777deb10cc192ec18ce3bbbefb2198dbbbb3c288b179ceb6c2e87a8472a63b6b3b1851b2aded380ea1dcc1cd77db18ab21b6e5844311d61ddd99a18c63b9d91ba19ce5c69c8f6d1e9d112ddb3cfa3908ed4eeecd52c67554fd72847567f7b0328f6eb24dfefe01619ded4641609bfc651c14619bfc3d0ca19de3d26ce558cec13ab6d9cad710ce5d3871c29e197043838456dffce22a1bb26e5cc8da226473dd5d88c838bec4b610f11884761e27daf6521a9492f5d2f25ab196d3177b72016b878055b9d3788fe3deaf0311caf9eebfdccfd8d5647bb9ff028478412110ebf77dfd064f83eca3afdf5f193c1121ded5dd9627e3fa63b6966707b4b06b37f7de0f66f456b6f783df47deba3b27d2eedec1be6afb34ffa1055e58e35d5a29e608ffd5c25aefe1f865f8f608e11eee4c7c54c6b20db02382b9a74b30e3b8fffb2c0473a14b30e3b8f5d4f608e65e2ec18ce3feef3311ccbd5d8219c7650cd310cc452ec18ce3feef3310cc7d5c8219c735219311cc6a9760c6716e730a82b9af4b30e3b8fffb4e08e6629760c6f1bde09d11cc1a77562b31f67fd8562bdd8450d6bab35a891125db6aa52711ca259c288758b2b87d206e178f91bf475283bcbe52ce5b32d6ec6771c15d8ee02e75770a8eb16fc4369e740442bbcccd55768cfd77b655761b23ac756e8ccbdb6695184b5ab6a561ff4668f773b730606ca7b215064f23b4fb17026dfa84dd140970455acb15bf4a13c71760ff89d0d6bb3fddccd865659b6e3e0b215e5e882d032a0dd071dedd732582b7c28d0acb3691cce8976c13c9ab11da956e2d61642c49d996303e8e70ae720927eba8291bce2f11ce030af1b22c3536856bf838ee15d21d816c7005641c9b4a5d10c8465740c671af900d10c8265740c671af90c108e4ea428cdf07ad72183b996c15ce3d08e61a9760324e86b0c17c14c13cd02598716c0a1d8060ae7509266373880d660382b9ce259871dc64b211c13cc825988ccd223698bf41307fe3124cc6890e3698c7239807bb04338e6f679e84601ee2124cc67922369867209887ba04937171371bccdf23988771c21c26526786168b65de6df59e2ad430f10cf568ea1a12c6f627db18fc5708f2e19c906184a5d103bb521ca8667fe045197db93186fe5984d01dc1fd26b19eadac9391cff5ac6303d69f0b582704ec487756d131d6da6cabe86e44288f7267151d234ab655748f219447bb839271988d0de58b08e531ee2e9389e34bd76b11da63ddd985218e2fc0f445288fe3443948a16c92edc9c6503e1ac76fbc0d43608f77152ce3501c1bd82108ec09ae82651c3066033b00813dd155b071acae7a20b027b90a967150840decde08ecc9ae828de3be60e508ec29ae828de3db1e9b20b0a7ba0a96711a840d6c19027b1a2758b0c0dfbf0670358919a241feb52a86e39dc508dae96eac39b6ad85676cfeb3bd247325427b863b5dd438bebcbd214279a64beb8dc7c672f9d72708e759ee667a46b46c99be5d2289f66cf776f71ec75b96b26d9a7eb5f4d8e22243f8f434e15384bfd7b16f729d2a11c7787574ad840184177bc7b36493a849ece365e13dbd7fe1d2622fef9fed7c42be97344dac15abe459905723652ff7ae82668da2021a80bf05d768ab5ca32c017bcaae526d8a7aa559995cd26b9e9d26f45b7a555257ff3ac45396754ab18cdc11ba2c439ba68cd8b917922391e8a6526085276727ef4a9327a3466a54eddd59ed590dcf948ff26e4b4cf07ef94dd031cd8dcf31ea15a3e5ea489fcf2e13f86796760e404ed8f35f7dde3c279b45beb3c3f34b648ad44aa933b35a9add3eda0b3b654895f2d19016ebb3fdbf837457c92eddb48f74eff95ecad7a8cc32dbbbb9462a053f45ff0790619c67b75f0200 serializedProgramBytesString: - serializedSignature: 1e6b7e3aad3be205ec993a4c13ca26b30b5be6dd635cbb72211b93d4a73a46eb63402c38c862e378e662484873db6daadea5e9484c76e06c25aeef0fdee1010f + serializedSignature: 3468268469e3044aa33e2a24ad01769d5ea712bd2a9fd99e4869f1f7a064ed671aeb2ef3c6391a05663e72a29e3e1a06f51294c5e22b2f67b63fd0703f0b5501 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/af95f6bd10f1009498b7ee8a10f6214b.asset b/Assets/SerializedUdonPrograms/af95f6bd10f1009498b7ee8a10f6214b.asset new file mode 100644 index 0000000..f3e6bad --- /dev/null +++ b/Assets/SerializedUdonPrograms/af95f6bd10f1009498b7ee8a10f6214b.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: af95f6bd10f1009498b7ee8a10f6214b + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cc5f5f8e78c7befbdc8fd5c25cbb26c8ac1bde0262cd9d8d8c696556c61d9122aeef4de7befbdf7de129200211012929004120224210921044842129290f0df999dd1bedb9b77777babb79af1ff277facd5b6376fbef3a6bd29db2a97393fb189ceafd56c259bcb26b355ac9cd5b01dce5f739de376e79f7ba6ae17b13ae7b8c5f95deadc9bc872d2bcc97fc6c6fa3bbf173b67f5acc179b3919539c72a71bf9855387f2f76dead70cef8d54ae77f85f354acb5f3d22a368fad60cb59bf589f3422568b97eae5b5188f57acbdf37b0edbe3dcad104af14072c5ad7eceaf62e74ebdb8b7dd515a3db78e6d10d1daeedc2b73dea963d58ecccd4262fba5794cfcc1dc432f79ec2d8f3d9dff1de4df07c9bfdbcbbfe1f36de4b14f86cff705ef75007f734237a778bf9f7b8cf1f3b6cef15470cedffd443ed7df95d76a6b0a5903e571903c0e96324fcb40ff76f238244d7c53c9180a6465c2acbd3ce6c8e330a9efe959863fc26514bb1ec8e32c5b037d7240d81dc07d7e6d7888b8ab746ce34b476903adae96e9f7a17c7ea43c8e96c75152b6f34c2f95c663e471401abdc6baefb119ccb35927cc836ae5795c1ec7c9e378a95b3ba9eb19e03cac2e2a4d2748996d6518676aaeabe7f9fdb3e4f944799ce44bafc9f2b9b3e5796e86fa64627f4a27a5cb39e0dce1d87a530a592add3bf8d2bd837cf7629763eba77df101f6a7959b27e59d9b453c3afae2d1d1d5a54d3cf1b9b43a28f953a49c4e52ee79e09ccbbd3c60dc5acbf71e97e7f92c7dd9d62b837bd35c39ed15eb42379cb6bdddeb6d0f6389b65c90464f95b69d7d69db59caad967255fca7bbe731c5790890c3df3fdf27b78b4f6e1729579511b919eaa9f2fda1f278b83cce644df9784cb9bc76883c4a16b1ae2cb10ce82aef1fecbddbb72420b7546974842fad07c870bba591a9de9f258f1d327c5e3d333b84ce73e4b16386617694c7b921c29479abfde73e5b284c23739ecbb77d03d0c191d361bf3c9f2f8f0be471a1e4dfd367073d33b08374ba2c92ba3090068e2e1dbbcbf3c5f27864a22e6c894fa70b9a4fa7587729f34270ce8f3de4f58bc039d7b5c80da7e34b52e652795ce6d379399dce4eeb5abcd7a533b08d4cde4b655f456efc3ae5b9b23b299d8ef2e936c7d3bbfd3cf0aed22393fc502c59f4f631ee2d75506c4b7ccf5d0ccef9b197179ef8db79b7b3b2ad7ee03a7ff71270ceefafcc50d7d52cd966b99cbe20ecbe326c59fe77967ab2a35972ded3bdcb8fa05f1193edb5ceefcaf7d6b0e47a4c3dc7e3762938e7f7576518b7b51afd9c70bbcc4af1ee312cb1fc99e5d943bb37e5b575521f55cf5d08cef9fda1de3bb16a796dbd7bde4de9b241bed31f70e9efead755d5a7c7cae366a6af6737010e323f3a5de0a6b007ab7ec1c61461a97ab2cc17ef224f4e27d917eba6ca31f5ce18e4597ead421eabe45171d8e63d1b577d3d55371e27751bc012ca66a76bef5de7c781f2fe65e09c3f57e9c9eea3da1edb7dbaead273872feeba3220959dd5b8cf8ebd5f9ed7ba6cbb5d2fb9bde4d361034b6dbfc7cb630f4d3ad7a5496727dceeb2fdd7dddffe4b176e6e86cfa562d1e886ddd446df298fbbe47126902deb8ad8202f2e4dedb606708f9fabb8d4b384fa26a52ebbe5b14b9af8f402cff1e39e10f14f754ff50165db24a6fc15e7807327fd7a7c9042d6092ea7fe39f2fc44f79d9eaadd74927bbf87e2753288130f43f93bb87da87ba7c87baadc529cf9b561e0da3e792dc7bb165365d1a9bef4b9dc77ff34204377ff74a083eefe19f2fa15aeeebd54bbe44c5f5cea7dba2a1f8b2c2bd859c9718d0df3857d6580b494fdf3d8705f5a0e77d3a5d7fd29649da34fcbdecfcbf3737d69799e2f2d4768d252967bb19120dd46c96ba35872fa8e061c46c87b178067605aa8fb1702b9bafb17011d74f72f4e4ccb3eaaceb804494ba83f4ccb4b41381dc03330ecab32484bd59f5572756dd72be4718c947b750672951d55a690dbcf27f79a0ce4aab0af4a21f71aa6d7379bf094ad2b7f8b7af71c70eed86ddf544cae655a5bef77b73cbf8e25dabaaad394ad8f65c9b67e83bc17f7d25fb0e0d7c6b1645b1f0fec64acbc77237806daaaba7f1390abbb7f33d04177ff169660ebfd95eff556a6b775a83fb4f5db92e32a9e81615f9b415adeeee3acf84e60897d95096efaf457faa9b6c18980ab2e9c3b5cf9e355dbfe4e296fa2947f1d38e7c749be7027c970df76e50c785bca913ea8fe9fcbeb0fcbeb77b9e713541972b7fbdc80febee7ee91cf7d24cfeff3f157e5b4b2955ccfde9ae2722fb807e3a67c97aadc7c405e9f02d22a0f5c8369a5da66e9b83e288f0ff9f8293ff1f5e09c3ff788a7ff44e563562c767bf77aa83eb68a5367a0c7a37a5b11ba82340bdc4652717e2c4d9c839449f92cb14cca77ed60d0c414b29e92cf14a578e619797c561e651f35369525f641a6cafbcfc9f302dffd0279ff2a8f7d9f0f811e4a367fe7860ce2ff823c7e431e659b21368d25fab5a631af5cf1d711d9b663b3bdb749ea5498683f31e9b71eacfa83ca1637a6b18f6fcae38bf2582ae54df731989e82c1980cc34a11af98aa1b2e04e7fcfeb7e4f90c795fd635b1437dcf2b3ff6b7e5f921bee767fa9e9f299fff8e3c3f2cf179f61290c3cf5ff6e21653bef357c03595bfbfebf11926c7d262872786cd5e6589fd3bd5873b423e7713780f3250f76f96e7b37c719a2dcf6f01e7fc38c72777968fd51c9fdcb93e7dbf278fdf97c7d7bd384ebe1cbc0378b2d71265a6b4e997a58c79f29d5bc1b963d3c352b5ffd5bbd2471d5b2065dc06ceb98c0f659a7c89cb8a2df4f19b0faef3e32279ff7670eec8ce599a42bf57e4b38b7d715b2cdf3d3b8377a5af3bb6c417b72552c68b6edc72de4a21eb0d79fc812f0d95cd7279cb34e9aa7cd6afc9f3a552873bc0b9a3c370e59bfa21d3dbf691bef7ef4c7c7f84f233287fd28f7cba2d6789feac9fc8a38ab3c626d94f7dbaaff09e69d2efc73efd56f8f42e92e1de05f450d7f9f128965847295ff8cfe4f94adffd95f2be6ebc3c551ee991788c1583f47b9b79ed63f8ec3bf2d955f2fedde09c1f4b3c19315596ff9ca52ec3953ebf64da71d3914bddeb23958f56d50dbf482357c56b35784ec543b51d735942ffa0e9feaf7cf1cfcd30cc54f17b5f1fbf5113ddeba3fc75df7b19c6efe814f1537dc24ce3972ecc54f1fb401fbfd19dddeba37352c8f8b54ce35180337f578edd8d567ee3dfc8e36fe551b6d5626b5862db628dbc1fb47df53b240e6f4a3d3e4c21e3f7321d555ff23df7dd3132fe63547bf60ff2a8fa3c7f943aaff5c5616dc038c8f647ec1896d88e3b46ea71b9d443f9b13e96c7c3d2a4f9273ef9eba4fc7bc039bfaf1b43f8b33c7e9e2823a1ae50e30beb5972792bcb59f619b8a764fd09bcc7cf3f05f149e78b4e65037f615a9fc8d82f58625ea94dc3edaf4cdb078e1f1650cedf58621ff9ef2cb18facf452be8a7f482e1b7c1cfe29af1feb8517db00aee9fabfe974d35ddb26656e64897628c741c60d76f51fa7c670941d1e97262cf95c6c13784e85550aaec9f6586c33886729b8c68f6552b77bc1b9a3dbf89b7d72cbe573f781b0f9b1425ebf1f9cf3f7a4cdc42a59e21c42256f2bd0a95286a9da7afff285b18579f53cf7776cf271d8026495836b4a06f4536d03477efd0199066b12c34c9b06ba6bff96c73b83bf1bab6289fd8d2a793cce673bc7b9ac26c831e90927b3443bbd3b75d84a2efb8f3c571c6e04e7fcfe57401ebfff202e531b4eb52f3ed589e10af9e9fa308fc8e37fa58c1df29d87c0393f6e0771fe9fbc56036c428eb1c66ae5fbcacf9423af1f0f9e3d1e3ccb8f752cd16f53e7f29fbcc6275bbda7fcb48f80731ed6d7f2bc41de7f545e5779b411e8d000aef1e34ef9ce63e0dcd161921cb39f9c8784b58b25b64d77f9c2dc2def3f0eceb9dc0f139f8fed91cf3d01ce156328e7c944397ebd627b411cf74a5d1e4e63af6aac790238e7619de9c67da2b29f2f3393a7bdf6ba94cde4518d01de0dcef9cdd7b290fd9994b19f25f651f7bb8c7267c9e754d9ff699a3094bc983cb692c713a4fca7c0393f2a5fe8c3e01cdafe492ca17c16e78e5e79dd7d724ef6c939d9972ea7c8fb4ffbde3b05c48bdf7fc64db73cd5befd2cc378275c6b131373c417b10a56ead4ccb902c23896f9920cf566fac5185c745bfe8bff8c15c136b03dceab15ba1511abc47a8b063695e56b57440c10735555e873c5ef52e7892a21f4d9585210cf2405c195ab76fe5580e51cf5cef5856235085fd051e5dc99cc963a47fed6263685ad73fe254a59ed045bcd1a9db312e777ad90b7c9513bf9c97451e24b3ffcefac7464ba2b53b63b5714d05ae7bc5a68582c7eef149a5608ed173bd71ac43a991d6c0b9be31c778bd092e35ee7fcad0bb34422d3eba85fa0825d7797c1a8649ae7c4866b9f2b6cf1ff52a4255284a36ffb6ccccd86ad7345cff2dca494f83f866e21c39d708ba58c2902592ce15a3ecbe5a7c26116368ec931d4dbb7cbbb9015a48c8b9e0c4fee4122065e0acf9cb4f6a29b5e7aeebc3689519bca72c5d0dbe034514b0596cb8b8b99a141a2d0a64deb3caea81f7f4c875f2ced298e10bffb5c95782e7802b415955f62028861ab12a7542b0295e76ae7b7abdc2a118d6aa1a43f5af31d354b45c4aa65348ac45bdb44ae5d26fe9e2d4bd39dce93aa544d4aeb3cae583b915cc99571ba286309d64a9760c2a75dd222f9055b5e993ac9da37c5c24bb25cd1c2ea9fc2b0b1b044d3eb20d9fe52596ffaa37b0beecd7f7ed2f34facd85172c9c71fb6d1a74f47913ed9848aa5d041ba14ea1875964a5f87a44a9f4e4df1f2d287ffe81976466c3c9d0e18c1d63a829da2b6717eaf464829759e0dce904f889de02f96f400bb2246985e050c611b0dc23c8eb09b462bd6a6834f2bae1022b9ad2e713ab74c859d9d71f3de633f1f8236a871f74859df0635ed763a7a62eaf426527aaa1f59ec74189638f74a9de72b44a3945f2f7224963a617379b345085edf33f18dd464f9d8e9243f592dd55e82ea28d02b0eab1946bcbd86781eb7d7de1a3310659c3f33f4c03343072c9bf5099bcd3a6292fb8695dc0993dc2face4ce98e4fe612577d1651bb1fa747d24d9c673bfa8bfe638ef6e7522b353b4fe1a9df775ee9ad4d96540c6d965a0c82e394ce7440aa611964dbaead28e5f1ca453d29f7403f1a4eb86091e1c527077ccda8684b5b61e98ca4343aadc132b8b86354359d44b279c1723392cb931f7b5f39324bc332ebc37a6f9708de69515ad0269de074bc9116153b22f26796458c9fd742592b0f553222e91f44ee485a20f5bc156388d91e398ebfd53e1d608cf1fd748791157f254135af0eb5c8bf4cee7d465db28a6e9e1892c3b5f5b8ab5542c463bdab41265ec1851c6f229e0ab9cebaed37bbe48812a11d264ad363c04ec79c56299d8aaa851a4761ba41f3a56846e161bacaee88f9534714d49f3b6ae184b51d20cc0b2ecb8b05976a04e32cfb2e335b62ac698f8f85147519e278533160f6790ae681075cade162d1adc1e0b975729c6755c79cb19df6d6b9730d56d8e01ef948653e23c53e78451218d3c4c61c0e7ce0df1778599fba3cf0e934476383c83ec40192b2c030cd65912efdaf1d223c915c9b3cb4aa72733976d14d9f0787199537253b74a3c5ac5f64267a2dfdedae1f63644a70d6f31f3a94b699b2bbd70c14331c17921050fc3f2f894b0793c47279997367c494bd816d6704ceda961d51e8195a8059a12f5ab58b0127524267c9a46f8f3ad82091fa513ce8db530131b4961d5a331c1d375798c3f3d5778c9729cff35ce1bdc27532a727f8ea80cbdd220c7c9eb55ce5fbcc29e089eaf719e70874483e83906338a19618d622c966e076bd2ed8b80e916c7841fa211bee8a060c2c7616977a82eed78a6e7f5066f966c95755b6269982306a773c47c8446e1ed291729572fd23587ed734aa4139c6383f3748ea807aac5bd1cb1f9649d286b83a4e9784cffc374fa7704fa17010d838438012bb7666acaad58c0726ba24e386ff81cce90860f5f7014bce13309c3364b878d575b7cac8db75c1bc5f3c5c2002a9adacae5cd54414ed6e8952bfae23b584b36c8786f81cfdea8177f7b4d141eb6373218a6e1359b2537bcd48fbee1c59784c5c502d028b4c71a58b958a13a5753a8c68214aa79585e9887e585f959e585293a9b132e9ada16b5393c47ad14b279ce0bdfe0e78bef0ef2f7fe850fa92003cb6a2e1d27884d4aebc5e6c22eb97a5e9872a7fd66b08bb00b5f64097d9e5828f244949a63f9221fabb517696aedc7db04abb5a7ea4c56f8e6ea5ad464e709095198ed629dd90a1f62610689df9c7a0e1393fcea45a15a2e0b55b7e81e267652ad13d5668598825291707f82d81994b7971608dedb05791ebf52d1efc58cfc4861e451c71333f402ac0258a2a90002b5aaa7615968a9260b7d15300b15626a2f0babf6744cede51ab5f7b70da6f60c4cf80a8df0a5ed82093f58279c17cc7ca55d981ee2219860be1437a9b9c93baaaa9f50e6eb296e167d05d5ff2b1757f638bfab9d6b6542448e980ea646a283687928c676a5866df7806c0fc3101487643b5327989b67492682530c811dae13ccdb5fab18d2fee20b8383b7bf8ec0b01fadc17e7340ecb3b06cbe266c369f8d495e1b56f21c4cf2316125cfc524af0b2b799e4e324fc4f59a44e493318224e27c4cf8068df09280c2176019f3585dd9349a3131a5543552ddee93e7d7286595424a9df3f74e59e79627f847b8cfa34a769a83e4f385989e1b757abaeb43f87c1bdea628153e341ee20ab62d50a88b30f49b34e8cf0f887e3126bc5423fca380c28fc4786dd6f1ea9f265dcbc5340defea14e76a108e4b306dca74daf0532fdd8284b314435aae417a7dc76048976191a8d04582bb6d5c7c8738c8960b875f69d36cec8aac302ec734a8d469c04bb6a54d0d83a22c9b052b30a45b3448df0a88b4082b91b7862d918fc2d4aed2159a9d82a9bd1253fbb8b06a17eb24f356c73686b43af892e0e0ad8e122c9ced58383bb20a67952e1c4eaa262ca9d55802d76a127856e760097c3426fc788df0fd0185afc184d76984bf1450f85a4c78bd46f8e02ec1841f83096fd0082f0f287c1d26bc5123fcea80c2d763c2776a84df1d50f806ccc8778535f26331b5776bd4eedd3598da1b31b5f784557b934672ae988816e5ca12ffeca76093eff91498cce6bcf285edba5525e9c2c75c4aa5ba74e135f47e9d4a01aaf2cd98359da0b1a60f036682324cf8891ae1eb039a6a3926fc248df0b3030aafc0849fac11debd5b30e19558629e123231b76082f91eed496dc189c23a6b441ecb119f23e4cb3677c8af1ff2a5f31562e0ba54d8bee7705203d77c45618eb4de3a69d3d58eb54f76ae06d17a2ba6f5693aadf9c82b77e27aed66b72be9764374f30a739cc688dbea1e1b48af2acc064ed7d8c0e3010dec382cd26784b4816d1ac1b962d2631569398bcd232d11ce7bbe6ebf5258caf6c0b34e5397c967665c269f25ca643ece4fa72b567e57eb929bb7adcf6648db9a6f8bd391ab1ca86dbd5d170eb7d97335365b10b0dcda81093f4f237c4d40e13598f0f335c24f0f28bc56279c376bf8c665a19a35c7636a5fa851fbab806ad76185c445ba92910fbab92bbc5d8bac706e042939eab1d02e0e59243560822fd14583c35bd7e465721d221b0256298d58aa5caa49958bbb074b959d98f0cb34c25f0d287c1756505c8e15147c7fcde09df0ddba70b89d5f994962a71823d98309be2aa4e0bd98155d1dd23cf76182af092978bf4e304f7bbe05a27f5e1c1710645edc0998155ea7b1c2cf7b04b3c21375c27979c93f3610aabc3c0953fb068ddadd7b0653fb644cf88d1ae10501859f82e5cc9bb09c79735639f354cc1c6f619ad292cf4bdae8fce35d773ee2bb457c14bd42cc1ddd2deed48a063c6f1607b1ddd3302d6ed569d1ab498b3ce7f776e68e18b87336b2d7e1744c87db743af4943a4c75fe9789262a7f67b7f33b7b0dcec034b85da7417b90167c65076f440609ed4ccc7cefd0982f5fa210c47ccfc2ccf74ecc7cefcaca7ccfd685c3f5ba5b53e81d14b0d03b0723748f86d0f301099d8b09bf5723fcdd80c2cfc384dfa74bdbdec1849f8fa5edfd58da3e9055da5e8065870753154df9cd5c345d8869f150eaa2694a33164d17613a3c9caa682a68c6a2e9624c8347d2154d478bf082cd42bf0433df4735e6fbfd80e67b2966be8f61e6fb7856e67b19868c6fbf1aa6a1773946e7490d9d357d82d1b902a3f31446e7e9ace85c8945e2194d241e0e1889ab30f4cf86447f35a6f5731aaddbf70da6f53518fae731f42f6485fe5a2c12dfd044e2ee8091b80e13fe4d8df057030abf1e13fea246f8270185df80e1ff1686ffdb59e1bf11334efe5920b45a9bdaccd5da4d98162fe9b4f0aab5fc66acd66ec6747859a783aad6a63563b5760ba6c12b3a0d3a30af5a9b2f86216a024e65b91533e0ef6a0cf8e97ec10cf836cc805fc50cf87b5919f0ed58245ed34422af7fb048dc81097f5d23fce280c2efd409e7c9c5bfda15a65eb80bd3fa0d8dd67cdf86205adfad13cedd23fc3b55a1dc23f7606aff50a3763ca0daf762b0dfd4e52dee0e4e3d59adc479b4564c27db22ca9d3a3197d35d93542e86018b98bbff9fbb9eb5d4b95a2e56ba6e15e7aadc2c659be520dd143148a7d6c2ee61ee5650396290dcddf239470cd094cb15d2dbc4957af1540590ac1f06ac92c39970e030e89cd3fbb004fa91268166044ca0fb31e13fd6085f1f50f8035861f413ac307a2babc2e8412c123fd5111a182c120f61c27fa6113e38a0f08775c27966fd792685510ad7f5231ac1b962af989619934dde69a779c764dfd6f1d28ec9f28fbda51e930daf2b3626fb28664bbfd0e5b680b6f4984e38af227e19b68a781c93fc6e58c94f60f5c3af32b1ff1485e6933afb173b1a55b688fd87d9032bb5e5bf97b1e5bf2f2c7f7c0acb0fb753973e259ec28ce783b0c6f334663cbf0e693ccf60d9f4379a6cfaf8a060d9f4594c6bfef5bfa426115f4f3c5b74b42ac43204dd02961cd15cca0938d7e8394c8f0f757af03d3482c97f1e93ffbb90a9f302963abfd7a4cec4c1c152e71b98d67fc05287e791adb289a8d2a3a2697f876c67827d138be4479a48e60d0916c917b148fe5117499e03d5dc08b73d9b382d2f48b4be8585fcb12e64dedb773f4a90dbb46f716ed326282b9c0c51ce822e24f936a6c19f741af4d36ab054fcd520568cbbadfeecd6097d07d3e5139d2e8332d4257963db203abd8419de9f358657343498e1bd8c45f8d39065c22b98e0cf420afe2e26f8f390825fd509e69cffa2e15c1b90f3f730e17fd5082f18164cf86b1892bf8544f2ba4e302f7dbec844708aced0f77582793ff4ef4d377cfd50feb5d1e0fdd03730ecffd460ef3c3c18f61f6091f8128bc4bfb28ac40fb148fc5b1389a50123f12626fc3f1ae1bb470413fe23cc30f9f729938a53beb86a2583db82948b36b62ac8e36c9ca8f076c8df89b3ce73c4995bfd4c14db1dd4895adf2d72ebc5acf41c51307bcb7e5da7125fc05aeb6b19a870b833c9ad622b9b8af31c519897079c8ef8638cc57f752cf8261f706f31b795e955b0de12dc5d42c36ae6ad1c75f5e33aa79390ef3c1d74a6fe4f3083f99fc6605e0d688d6f6159ea6b2c4bf1bde48267a99f6291e0cdeaa421ab8091f81996d2ad629a94e6d392f52ed275d2b9ca573af0de85bb254daa348da7bc3b4e4ca175ddaa9e5d27e6801a6119ca859a78af41d8558326176d161ad60007ac2bbb46f64e83d8d7cf75f478eff4a058c8dee9db58bab4d6a50b9f2de16eb3cb2772d53b1c83cd9678070bad8d2e343edf890f62f1a973fe50f9f53a16b461ff0b8c63dbb01c7f89659e769acc53303258e67917c3d63e15367762cfcea61bd98f3dfe0a0bbf832efcce20d9ea4318cb7b5862750c9b58ef6389d5499358bd47054bac0f30e19d35c2bf0828fcd798f02e1ae179a38309ff0d26bcab46f8f90185ff16b3a16e3a1be29597aacc139d480dbef13677ac8a8f7a71c76710fbfa10d3a83b56f4710b869f0d0c12daef30b83d34709f0e08f7f798f09e3a9b0b28fc0f98f05e1ae145638209ff084b84deba44189cc62cca997ffd6376a6f1474cab3e3aadda4ad39827bcedc1cce2632ca4beba9018d3d04d21fd4f98f47e3ae9ed9ae8e666b1dfca279899f4d798c99701cde4cf98f0011ae125638309ff14a3343016ce55f01926785048c19f6338066b70cc0888e32f98f0211ae1cf0714fe574cf8508df0d6f160c2ff86091fa611be34a0f02fb0c4ccd1e5a50696d98e46e12686b88ed68d09534dcc9e26f2772c89866b92687dc024fa079644237449c4e7c825cfd40912997feac2e33df39131a4673e2aab9ef997ba70b8d37f7426e5c83e5cf0bf30606374c078f5931b08d0bf31f96375f23b32a6b5e82021fe070b31ae0bb1afd60496094b571bbb79778259fa579826e3749a70097cb43e684df05f4d28b9e25b457c53afa8768fc9e49bf1fa7901e363bc17990843e40feddc8009319e907d926296f2d3ea08b9ffe9d2879f4e8c257ffafdc865a7b4bb7ef01bad9292a60d9e345f6306304967007c7f67e5d4a8742e6e640d325255010d8fc5907027ebc2ed8686bb43560241c28e69c2ce1d1cb539ce154eb9ba2ccc3137c60bd54444931163cc438c3155e8e807e075dcc427a03646c80d7ebebe58ec8d5ce55c59215c9daee3b43e0ba65362413f57912fc88e4c8a79b6faa11f75d7e514f1e9a7b01ea6d698e482b092db6092a78595dc562799b7b60a63e1bfb2d50e2b94a687ec0ab5c778cc08cba30326f9e0b0923b62920f092bb91326f9d0b0923b63920f0b2bb90b26796658c95d31a33b3ca4d175c3543e22accadd759279db6056262aa7f83a5f0f4ce5d96155ee89519e1392722f4ce5b96155ee8d499e1756721f4cf2fcb092fb6292178495dc0fb3b985216dae3fa6f2a2b02a0fc06c6e71489b1b88093e32a4e04158edbaa4196ad7c118e8a561410fd149e6cf2fcb84478ad94e437582f9f3cb3311fc3e2e781896822b42a6600e26b828a4e0e158ea1d1536f54660a9b73264ea8dc452af3864ea8dc2209784843c1a13bc2aa4e03158eaad0e9b7a63b1d43b3a64eac5b1d45b1332f5c66190d786843c1e137c4c48c113b0d45b1736f526eabaf4e2e3cb7c8bd3e8d7f634c777ee5377f4d767921663706293b0b4d810362d26eb24f3bd5f8fcd44e5b370c1b9985d6e0c69977998e04d21054fc1f27e69c8bc9f8fa5dee6b0a9371563511692450126b83ca4e06998e08a90820b31c89561214fc754de1252e51998e0ad21051f8c755baa42765b0ec1343e2ea4c687621a6f0ba9f16198c6d521359e8969bc3da4c68763827784147c0486a226248a5998c6b521359e8df50c8f6f869ee11c0c475d481c73311cf52171ccc38ab886b045dc7c0c746333805e80a9bd33acda0b31b5773583da8b30b57787557b3126794f58c9476240f63603902598dafbc2aabd1493bc3face46558263f2164265f8e093e31a4e01598e093420a2ec2049f1c52f05198e053420a5e89093e35a4e062cc7d705a48f7410966c8a78735e4553ac97ca2d31999a89c62a2d36a8cc59921591c8d093e2ba4e03598599c1dd22cd66282cf0929f818cc2cce0d6b16ebb0eefb7921bbefeb3116e78764b101137c4148c1c762ddf70b4376df3762a97751d8d4db84b1b838248b528cc52521596cc6045f1a52701906f9b2b090cb31c89787845c8135b6ae6886c65625c6e3cab03cb6603cae0ac9632b56165d1db22caac23a54d784ec501d8741be362ce46d18e4eb4242aec6585c1f92c5768de0dc61ce698c7f1ecc840de7d649177bf3b9e56fd031d3cebbbb31c6e7dde5b2209bce65a32f361f6f872ed979eadc9449b273ed11c1353ac1fcf4e658f25c5ff51364ae6f2d564aded20ca5e4f198f05b9b41781d563adc16b674a8c79ac6b7876c1a37e804f339ef77642278026e268d98e03b430ade8941be2b2ce45d588fe9ee903da6dd98caf78455790f9619ef6da6ccb8571700df55f4be4c98bc830bde87c1be3f24ecfd18ec07c2c23e4157e1e538a731feb5f1969858ae2a8c6093c81fccb8127b48546203926297890e58c5742256023fdc0c25f04958e23f1236f14fc6d47eb419d43e0513fe5833083f156b593e1ed3ac6199274e573ac652cce6b1254dfbce2d677cf7895d2281b7c9a49f2c56bbb8fb51ec126d943a7145df7ed14d9ae04f43d3e2865fc3dc659bc176b8380d8be513ba589ed914cb554e4b8a673a37836e177f2f965f19a813cb43dd0cbab8e9c9f94d5b3d266e265527791433f703c77359a38817979b48cf93c09f0fa60726a984f175326a6b17c81466563fefd58e9ca06ba24ec7483f89d9130cd18dd354e71d97165fe4bfd1b18d3a91e66e6c4be4f69a7e6dbd77f1ebcd654f6760b17c4a17cbc37db184ccdd782e901ffb2dd5587d620ac13ba9f20a7c2b48cccec462f6b42e664764947eb3c5e2ea2aa6d60e854f39ef4e90b89d85c5ed195ddc0a7d715b265267ab8c193fdbdd6231391b8bc9b3ba989c1f7179e6bdc3370fab76a4ee617c51afb727697d002b87ecf058f0baa451343360a9c71b58cd57b69d83517f4e477d764679632973bf9b6342a9762e16bfe775f15b4a6855fceaf122181e2bb7395c2582ae627b453ed49724d9a4ea7958ac5fd0c57a66ca58e39aae14717137d173e3a86a637eb54c124ace17d9a7e6f958bcbea18bd7dac02dbb627127b16da793e05e2b6a2a07ea9cfa807775c2b404b349e70b301edfd4f15812499d4d5d9b5f88c5f945ac9d12cc06940df3ad1bca842098ce412d2248cc2ec262f62d5dcc0e4162b64ae4cf6ad93671bbdaaad7b25ae6e2f2a4d4a0e9a35c8cc5e8dbba182d202c7d55aaba3b136c66eed65fcd17d34bb0987e4717d3c318e625d795148931801b0171268b442ad789de509953e3ee69c6585d8ac5eaa54cfa0489e1c216c22a910a75ceb33c1f6e4951fb25ca68be985d86c5ec655dcce6a62d3933eb15e06568aa3e6bb625e5e5581c5fd1c5b182b845dd2036a0e2dbe1b82de6d5c202aa9a7263f3f411b3a945afc0387d57c769558bf53c52130acfe14a8cc3ab3a0e73d0328cf790363b0fa9bce16e8294bac6d14b6aee94be0a8be1f774315c1c3086ea13d0fa146989f85e8dc5f7355d7c57125ab6dacb3748fddb1c04aec108bcde5cf5b25bb6cd06b5327dacaec562f57d5dac1606b463ef9baf26d8f075585cdfc03c14415370817822d91afde56be67283c4ef7a2c7e3fd0c5efd0102dc70651f3f27d8e2a653f0f8f5549d2b341e2740316a71f064b33bf7dc2cf84a5cb659435e58d58fcdec4e217a4cfe8c675a16c337977f98847ead66173b51c6fc2e2f7235dfc46b1d45ec1128730859637635afe38b56f2f482a1467950a94b6770b16eb9fe8628d7f04b4a469a81e9611de475978dddfa86d7766e7dfbf15d3fb2d9dde07a7ed712d166383dcfb582d3ec9319f6d177bb925f77f53a540f63dc8dbb0f8fc146b2da7ce23bc375c245a90f59a3644266309bce555d98c31bc1d8be1cf32e923ebc706160bdbe37ef052e9a34a4eaf28c707eec0e2f873cc4395891f209358665762641fd33bb198bead8be9a28c52d33fd2e3e64315ef964cd7bbb0d8bea38bed9ab4e94aeb19a7f699df8dd1f8858ec63184fd40d5aac9de1384d30a42e41e8cc82f315fbbbe164d9ed3dc526dee7bb118bd8b79b1d2f7df3229d332e90506ef29669ff3efc338fc4ac701ff5434de8f527b1b3757eebc1fd3f83d9dc663d29655de085685b8ca6778344f1bee014cd3f7759a4e4fd1f6f45b7aa2e6ee97a63caf27457e79108bcb0799cceac26afef986d5fa0f61b1fc3536421cac9c73cbf3e4bbc9a3fe6a9b753c3d93a5cc169e28def30a12e787b138ff4617e7d1be94f5c2a4ce4d8f607afe56a767be4f4f583ef9755e2875ceb49d956d2dfa2816830f753158dfc2ed0a688199e63cf54e102a8f61547e97c9a8a90a3148a9e2c50ccb71cd539a3c8ec5ecf799f49682b62cc2b797b38fe913584cff9049de9c2b6cd6b5cf06e005736dbc9015a4899f2edff2b782c4e0492c061f653eb38f8719c40e61fcb0ebcd95424f61f1fb23e6fd4b5d7f7bdf04f0eba8bec980971ad8f704529534d9d56d4f63b1fe381baf939baac5cec39b99db5329632d3da3f9192c867fca24e7e90967572ba66fcfb773fec56262876e21c5f5e1d58877781b2877b8732b96d754ef4d6eaacf2627d47dde751efe762735789e2869aab9f872a3d4123e71e0b46dc5dc9fb1f28b406ef11fab64fee54c7385fc6a59de286b9d2c08b9331ff932adc94e9ba74abca51666a58b85ae0e9f0c6a7118bbf471da802cb48a898f0d42590ee9119cf48116d33ff3541d2a53b5552effa8496c4296d6945e8b4f796807e96da85f1259983b74babb0296cbbe728cafabdf288271bf43874f2b4e1bb27f135a7fc8938400d5fa492b6e15280274e206087373a776d531d7e1f9ae23b35d9b56793c453ea3c4c69722aa4f831631777690aa733080f55620e45d0485f0734a84fcd379aa13b7480cfa7101ded7d657b06d56007bb8bd07ec2f94c07ab3e46f70db0cae7b270fdc5f29c1f5d480e30277382ff1a1bd4671b5dc0a689b9807ed6fd4d696983d1730efe3cc6aee806b7536808b77f6c07d4109aeaf688fd6675c2dd800ef725029fc9d125e2790555724f8976cc0f4c1200fd33f2831750098bc698136205adad743f44f7a446ec396f725b639c57cad1588de1de521fa9212515b81a8deaa62bc75170fcebf28e1f0eddf5634758bd4c8973bdf60a5a817f907b677889ab0487acb6c00b87bb007f0df9400db83328aabc907036d0074790f0fd07fa801a91696bb77891d8d81f3477880bea22ec25788e1286f530e3b5ae9b34026fb6f54994cad73b101d0a65e1ea0ff51021a0832d97cb65bc4bab1a9edcd27c6958b96f94a6161e5c2deaa9d006d80c87f14c4af2921f28f564378dc4dc8d7b45634edfe586e7907a737701cb2568428bbc8324dd9db1ed9a458257c1036a05a0fcab618252ae881e0f5239c61a03ad536355dbf6ce7816b4509aeaf0f1c5c04375bf824f8b098b7dccf0678fb81b3f0204a789d418deaad737257e0d9006a3768beb6a604c5fdf7cb44f6dbe6dbb6639ef3789d08c906609b5a79c0da44559eb91ed5c43953e5969567d560e0a32d2538d77fcf9b12f344d03637345e6de3416b476d6df3c5a863a308dcdb37c7db47a9de69c35559e215fb10806b4f09ae2bc8a6b68e12f1a92d0a56076a2b535ed61a21c6ee7ec061c0ca3a52826b07ca34771a810d786e1eede1e94489877b5f573a36359765be439f0d00cf167d80766d7cc2fd5372b39f20158c3a3e95ab1b73bbfcb5e26a836c9e244ced1ae53c629ce69d5b81a959f1acdd3ff1b4d5403ce36905f1c043c2f12ce717c5336a94c743fa73e201268dc503d510f18c9b7af140ed9b7856e5493c9007221ea87d1fcf68fa533cd09c9f78e08ebf4e677c96473c69c0309eb2b71cd70e01c5b53eeb3832a41d4f3123208e0c10c4d338d9e2598dedc5b5e33571649c39aea9e0bd59c9fad9c4797c56729756ff7f4f18cee31386bb7208fc7301fcc76d6d74a36e6d701b73e787f31a20f51e36539c3adfa7c3e0241d12bfbca15a153a6d3a24b43bba6612c16cda1efdc1249eee26e1ccb712e72280b3874938a75a89b30ee0ec1905ce2d2850a8fe46368315d2e1ec4c85f3efccc3d9cb249cd3acc4791fc0d9db249c0556e2bc12e0ec6312cee956e2fc0dc0d9d7249c8556e2fc1ec0d9cf249c53acc4b902e0ec6f12cea956e2dc09700e300967be953837039c032971f69138cb642fddbf61025c8c9f4707b20d15c8ff01908328410e619e472853ef1c7fbe4e3c6b5fcf6836003b9812ec3006dd7599bbab6d863b0cc01d423d292b552f1e8ae3353d19ca765428bb821efc504a94dd24ca421f50d791cb1fb2cf0eef0676382c0a7833a287f70e15bc4700bc1c4a78fdd2d4e1899998b46f4e968dff08600e3709e6740b617e0c608e3009668185303f0430479a04739a85303f023047990433df4298bf0230479b04937024880ce66f01cc3126c124ec9593c17c07c01c6b124c1b7b38ef0298719360ceb010e69f00cc7126c13cd842985f0098e329618e9730ab9d87aac551ff39de609f67262c597b5121af02ee8e0994c83b0ae45bc54c367766dd1601cf3e27476760a5135bd2d996b8ad2fa1f5eda342b90a58df244a946393327ca910b680a92f52cd71fe73ebdc29dcc18d2cd58ebca4b0c94ad7c300ecc951d86d6655958d28078322209712e5504d1190e9f72a48d19e45857632b0d23c6a2b9d2d160ed4c8e9d27c8365f591643e2d5a4d2277a7e6db5751b506563a857e692b1fefd9282ef0c04b45fdceaf46e09327cbe8fb00c2fc28104e3fe0103e01104ea544d88b7903bfeae8ffa6abad03bc8f018805264dd3269dcc4586730ca864a699849374f61119cea50067a1493849e7c691e1dc0f704ea7defcc4adb7f3a21f471f4885ef755056ce3067328c8d0eb971c0120f8e02259c0db7d469842f94ab1b2b9d977647518393a1ac07567908bda318bad836b26d02dd1cb10a729b14b5c03956382292f602b1208b7701300f8da2ffdd20d660d737b984d5125175d4798fa6500e0293a1bd06a03d2c8a018d4c276613969f64d3b20f0530679a049370a88d0ce60c00f3709360124e9c2183990f601e61124cc2295d6430e300e62c9360124e362483391dc09c6d124c1bd7054d0330e798049370e20c19cc1100e65c9360128ef390c1ec0f60ce330926e1644332986301ccf926c124ec0191c11c09602ea08499c392fd47c1661c11d6ef64338ee6029fd2c2969c31e777161396a2740319c05617990493b07e2783990b602e8ec2efcebd9d3b99fadc744403bd64f8fa027c4752e21b00f0254fe4e2c2bce5d2368f9cbf0c802e8962f241de0137f9602f40b8340a8485071cc28301c26566378708bd9a64cda16ad01c5a1ed5f4186f880d8e12910fae910d5aec0136bac29ca9ad36aea83c04a02c8aaa164fb785b0cd53b70a01d0a34cdae9688695ae8ebf009c2b4dc239cd4a9c77009cc526e1245df54b86f33c80b3c4249cd3adc4f93ec0b9ca249c8556e2fc26c0b9da249ca45b9193e15c04701e6d124ed2bdb3c970d6009c6b4cc249bab33b19ce7500e75aea867c665f46592954e3df66216cc82fa4023a05003d268acdcda6fadc21117891c896f56d03f0d651c21bc4325d3199b87c9a7076c7fb54503703dfd17a13a1123a40c8a09602a81b4c844a38438e0ceab100eab1264225ace1c9a04e0150379a089570f60719d43880bac944a88423eb64504702a8a52642259cfb4106752880ba9912ea54963ce891b80c662ef3be93e64624f1ab6b891f71f43e7e57225ab4cafb4f980893a812811b9c4a843273161bdab8656f0eb0e77273177511ceb9231b1ffd01b0d20a7376a923dd3c80cc4e4f05302b4d8269e3d6d2a701985b4c8269e3d6d27500e6569360da3811a201c0ac3209a68d5b4b6f01308f3309a68d5b4b6f0530b79904d3c6adfc960198d526c1b4716be9e500e6769360dab8b5f4e900e60e9360dab893cd1900668dd9b3986ddc46ba3be8bbd752e2ed22f1ba9b02558b5ebc2bbb8a72271bb2ef0d326097c747bd936ce66e0f1b77b2190b6cb22eaa99f5f35885f07a720e3bc5d4878a267bb571f6f27bc03eeba39a0ebe4cb885b7f9dcc6f39cd7ea448836031d0080365002ed9ab2a4aca743d7910a5d2b80aeb1255779d8bffb422f807267144b5df9f7800f9ca5ae4500df2e33f67f7787e06a85c5ba836ba49649f615ccbda0d6de6dd25eb2a43d72324bed0370ee310967be9538e7019c7b4dc239d54a9c9500e73e4a9c2359f262c3f96c37e3f33f1a999a9fbcc279bd9cf1bef84a01d6fd0c4475342dce1e54907b82ca6abf49f3ea6758b9d9df5f01ce134cc239cd4a9c77019c279a8493f4ebc264382f01384f3209e7742b717e00709e6c12ce422b71be04709e62124ed2f91e643817039ca79a8473aa95388f07384f330967be9538d7039ca747e53a2e168df44647f26cc6bfe3b65a2e432c3f007cf11b00d033cc996b6ce3149a01a0e379661463eb6aab3f7761ec66d173570fd9be435829b0cbb3a25818db025f2ba2fb2a2b8077b6b9b3de092b20b201e0db00da73a2b0cbe9d1db2519bc8701bc73a38077f00194a95f03f0cea3af5eb66ab64d2b769894b132a950a5d875817b32ed6bf6740230cf37778a0ca1ff9d2c938f00cda00bccd937d1c619eee380955e68c690b0ee93e08468c9f60ed90aacf4229306dd48a7c29295a7f900e7c526e1ccb712e74680f39228ba9299f5caf3ad9cf3be01c0bcd4249836ce792f07302f3309a68dab7ed70298979b04d3c655bfeb01cc2b4c8269e3aadf9500e69526c1b471d5ef1a00f32a9360dad8272a0230af3609a68d4316470198d79804d3c655bfcb01cc6b4d8269e3aadf1500e67526752849872dc83a948301ceeb4dc249da3c22c3b918e0bcc1249ca49364c870ee04386f8ce28b5ad3d881f645adab9887f0a62866bda7771527af1e9aed08ad136bd349d711dd182382bc03d8e9cd94908748c8d5ce431c70855c56e02d26482c06e0c42e42b064cb098e04606f8962270505567dea31719c335573cac696e90c80f7d6961c928b6c83d47d5428bf04e5ec6d9428870b948bb92f4600e34bac77cad73d6bdd283f6436476c10b04dde5fe01c2b1cb1849b5790b5053a00c0b79b3321d1c66cdf0e64fb3b2851f64e8352c5947442c304aa5abf1160bcd3ec6d7e08bda364dbfc1c0ef0de65ee6445c2c13ab2a938ff0465e9dd51140058bdef150084e5285901f05f80f11eea8da88a648f5e4de85e2c2c93677bfbeaf2ee00dcbd51d85f5e930d968b0ea9bb04dbf69d411e0718efa3c4d8de3959e6dc28737ed7888e66b585a55e0f80eb7e6a3f3cb7af7922e016fd40d9915430a702980fb464733cb20f9690751df78186ce8351a0cc4be1e0b0dbdbf90ab0ca87a27018171c700ee34a80f0e1287c99dc1ae78bd661a35062a9f34a99282f57b05dc2455cc7ea45d3bc96d9bca2b200807d84126c0f0056ed3fc3fd452b6493c756803f07001f356701818d73e21602948f45b1e0aac05787dbdcecae05f01e3769e9fe0ccae60fd9d2fd3f039c4f9884739a95386f05389f340967819538cf01389f3209e7742b71fe14e07cda249c8556e27c06e07cc6249ca41b9892e19c07703e6b124ed21d37c9706e07389f330927e9d457329c6b01cee7a3d8477b2a3b90f6d19e03f0bd60d2dc4cd28f2992e19c00bc96df300927e92a35329c2500e7374dc239d54a9c27019c2f520f8df17de0f857a6f96b5cb27df32cdb82b2f15b94b8c6b2209ff7e66ee14621127ec69b538b60fad51c2ad89301ec6f47518f4f118d9e0365bfa3cf00beef4431c6c3fde80b19f799f3a1892dc2a75e67b527fd4480f02573e652dab889c46850d1bc4c89b20fe37380781958ced46c5f6c6a01e10797c8aaa0f6c0265f3177ba9f8d3b6f5d01d07ed79c8f7b4eb5726f8e1f0198af9a04d3c671c81f0398df3309a68d7b737c1bc07ccd249836eecdf11d00f3759360dab837c78b00e6f74d8269e3de1cdf0230df3009a68d4ba19e03307f60124c1bf7e6f80680f9439360dad8b1fc1980f9a649306ddc9df06d00f347662fd523ec13912dd59b059c203fa67682a4f227b9aa178ae98684d5511b2a907b00c89f98bbfdb88d1f68580dd0be45bf403f11adeb28e6f076b023c590466dca090a367ee6fb2050c6fed49ce9d936f6e42701943f3369e2cc34cada9fcc321f02387f6e12ce022b715e0770be6d12cee956e2fc03c0f98e49380badc4f926c0f90b9370926e154186f36880f39726e124ed8892e13c19e07cd7249ca45f1d20c3590170fe8a12273f513b70d8d7f7e90630bd6792d5cda01cce20b3bacf01cef74dc239cd4a9cb7039c1f9884b3c04a9ce7029cbf3609e7742b71fe12e0fc8d49380badc4f902c0f95b93704eb112e77c80f3439370924e5420c3b903e0fc9d493849bfc94286f31880f3f7943807b3c4ed9b398746d13ff06fdaec5fde42e869279bbedd0d0c65fc8112eb181fd6cd2c792c28f3512342d4643da77a80faa328161bcc6007da86524f8342e08f518c692a6bad17f6c78b8005125e8576b8d8deedf1e703ebfcd89c751c36cef71c0650fe29aaddb966b332c160a758bbe166755bd714fd0264f34fcc5dbf4138bd86ac12fa3e40fbe72876eb9ae2cbec11543f64f06602789f9a3df58b703632d9d4af4341b9f959143d26b879a92e8bdbdd58fa2eb0d6cfcd9d004668a964054131b0d4bf50a21dc5fcdf1282ab86f5dfc45a285f8eec433863a8304f0498ff6ace34301b672d2f0185c1dfa2fcfa15cfeee5bed5c6079e1ba535b0d42f4cda7285d4154d86b32fc0f977937092fa4ec9702e0038ff61124e52cf3e19cee300ce7f9ae4d99f46b9709bccb37f3fa89abe340967819538af0638ff6512cee956e2fc1dc0f96f9370165a89f30d80f33f26e124dd39910ce75100e75726e124dd43840ce70900e77f4dc249ba112519ce3280f37fd1ec4ed702ee66b23efba700dfd751f8ea79c095c21295ec1df211fbe0c5003cbe9eb085d711ab4ac6be81e141a0b7133305a48d23ec6d01c856a68024f4be93815c08401e640a4842470619c8d900646b534012cef82003590b40b6310524e16a7532901500645b53401236bdc9409e0840b6330524e184193290c70390ed4d014938024906f21400b28329200977f32203793200d9911264b0999a366e26d913a0ec448932d8c668d3acdccd9801989d4d8269e3b63d5f310f66179360da3821fb6b00b3ab49306d2c33ff0d60763309a68d1bf0fe07c0ec6e124c1b37e0fd0780d9c32498366ec0fb2f00b327254c3ef8e07d9269b1045ae5bccc17b2f0d7c8e091cd0fee0ae0f5a2843784f917b0e8e704978841308eb65208db4eeb433f8b0a6c3500db9b12ec48e69f78ed2e13f096ff71817c6c3175e6b7b11c3d0434e4fb5042f62fb57681f2d9edbc2098a7edb7dbbb216f0dc0da378a7e7b66d5938d95d368500cf4a344a95bda9279094b8896ac845d07acb47f9499bfca516235f3be100c8547b694651f15d65d00eb00eae6d446d1ea3c7026c2dc09b2fbc0281af699793ca758f9318839c012079904d3c66555cb00ccc126c1b4d1813c1dc01c62124c1b3f8777048039d42498367ae30b00cc6126c1b4d11b3f0dc0cc3109a68ddef83c0073b849306df4c64f0530479804d3462fd2780073a449306d7478e40298a32861065f5f4e580591ade01d0e708e360967be953897009c634cc249fabd60329cbb01ceb19438d5b2293e136e2770bd45b2ef1119be59ccc317a7c4d79bf10f3994cadd61b9a81dcee35b9dc76b848b78af18c1ac1267f6616c03308ea3c4388c79bb71b9633f1b1d75ebc18e8615cedf7cf718ee6f2f7504f00c5ece6cdee17025803b3e8a018cec7638b4716fae1b00da09d4d93f5565a4624a3a6031214684b1015442132931e6683006dbeb90d0a344b6d7e14c807792b90500e100075901f01628002653a21d2ed02e12f6b992f1d1c90a595d950b516a76c8369100dc8ecb9cbf5df10b9c638523b6dcc2caab23009c1b45098b4d64982b2c96783ff83caa1236068a80bc281c24b081a55aab5efbd5ee06551f609353a298710761a62f02ec053b1780cda704abbe5a30951d685f2db80c209c6acec42f1b878817009405942847044059ec84c98534b015ce5faac75f4f5b2de553554bad40b5348d12f100963801ac56b84bb6a6b4591b07423601a08551784733ff6226214eb24da53e0145c0749370922e9a21c3793dc039c3249c0556e23c13e03cd8249cd3adc4f91380f3109370165a89f35180f3509370924e7120c37904c079984938a75a89b30ae09c6912ce7c2b71ae01380f8fa2e79e277ebb473e8057cc5cf788bdce8f8d00e11151f4dc339bc364e37ce451a017342b2a6b747bef5cd06e698911f891dea742f824b0c6d951f8dd39c28aa6a5d9eab6edeeb8e701c639d10ebd1de81f6cea07d0ce357754d3c6af075f0ad0ce8ba2fccc3fe0fcf0a300c2f951ccabe39b91473eaf8e6ccac250806f4114e395990d63e45b3990713380b9d0249836b62d6f0130179904d3c6b56e3702988b4d8269e35ab79b00cc234d8269e35ab78b00cc2526c1b471addbc500e6529360da38c47b0180b9cc249836ae75bb10c05c6e124c1b77fbb817c05c61124c1b77fb7816c02c327b4e3c61c627eb60f6032ee2a3a2f01e25e3cdc47f44d80e25f31e1d0dd0ae8cc2753ca5a92828171e4f774e9ced4b0b9f020540b1492394d3282b27b211ca0701ce129370165889f35a8073954938a75b89f3f700e76a9370165a89f38700e7d126e1245de546867335c0b9c6249c53adc47912c0b9d6249ca4dd4e329ce500e7319438d576a7f9be06bdcde394c70178eba258e4c2e779cc637cdb8a5aa73359211bedeed2960a21b05408801b5ad45b3db16b3840bc3e8aec8e65f6e4fd9408fd9f64387b83eee506937092ba93c97016029cc79a8493745e3119ce328073a34975fb0c4a5f1259ddfe3750766e320927e9c7c9c870de0370969a84b3c04a9c97039c9b4dc239dd4a9cbf0638cb4cc2596825ce5701ce72937092eee349867329c05961124ed28d27c97036029c9526e1249dfc4586f35880730b25ce71ccbf9302efcb973b3cf85202154f6ffd06362e3fdbf9ab4e0c25932e3f78284604fc04d0d0df4a095c7d621c9bec9058b2928124fbc4780eb0dc2a5340125a2419c8de00e471a680249cae4806723f00b9cd1490849368c9404e0020ab4d0149384f9e0ce4d900e4764a9079bedabd119d9b842f319ceb3cb1ddd1a7469cf1a84654d7df4855d76f0775fd8e28263666ea23251cae23f390f600306b4c8249384b940c662f00b3d6249836faee0f02308f37092661b39e6e4b7f00b3ce2498840d293298ed01cc7a93601236efc9607600301b4c8249d832a5db9f1bc06c3409a68d1fe3e90460ee340926e1aa7732989d01cc5d26c1245cf54e06b30b80b99b1226bee5f902e77715733fc753e208e082eddff27c15f3c0eea1043b58805dea3c502666d8c1855c2df6d908b2e55ded00d6bd9458836da666e31e0d0341d6df17c54ab9ecf659b271a5dc03c04af753a2cdd15869b0359e84bd26b242e06060b92750e2ed052aad9da252e2b398dd6fc745b40c711f15c44dc0464f8c629c1ed6fc5875455edf93d9e41080f3a4284ad3e42c9f49796ae3ae754340763f398a3a1f1b6d4aacf36ddcb0653cb0d253a268ee6753e713faebc96cf47c00f65453c1daf821beb300d8d34c056be3274e0f07604f37152c61eb940c6c1e007b86a96009479ec8c04e0460cf3415ac8d0dac8100ec59a68225f4ae92813d05803ddb54b084630064607701b0e7980ad646cf5509007baea96009bdad64608b01d8f328c1aa7dc3a7b116d8379c0cdf6e80ef7c737c0036eee67824407941148ebfcc6743d938ed7112f04e5d68124ed24d5fc8701e03705ed492a3fb7e679f8d5b0a6f01302f3609a68d5b0a6f1330dbb5f1095f90247caec8863c2396316fa79bc96c21e3b3e6ddbd70ca9cf3a5a2e1d3c0363938d639ff82a5c006e79fee7a4c6c6734dfa9316bc5552eaf5cc8deeedce59ad5b3bc51ce23977083682b0d222e2abed90ef306e719fe157a1efa1e56ccdc9d7c5638bfd5448d4681242eb6e92c72ae35323ec4c843d8e168b295d5891827eef4138fb5179cdc2f41f178718071a9abfa3ad46259e55639712e159ad439cfb416e1b8855b3cd6059ca9b1b8c5a2c1c8b5e009148bf59069c2f55926e252eac4a1541c4b9adeca1ded3c162b747eb94dcfc94d8dcec972adc37679a6aea797c95324b5b44b39f6983e1f56379b2da58b916bfefcfd4a3137a442485d9c36a6e9e387db65e714a992cb3f277540c7ff329eee32d98599f68b7572fe5ae5a4bc2b9c7fbbabcef95b2855d18ab5f97f4b2782af62460300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/af95f6bd10f1009498b7ee8a10f6214b.asset.meta b/Assets/SerializedUdonPrograms/af95f6bd10f1009498b7ee8a10f6214b.asset.meta new file mode 100644 index 0000000..f609acc --- /dev/null +++ b/Assets/SerializedUdonPrograms/af95f6bd10f1009498b7ee8a10f6214b.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f727840c06af03543890ffbdcbacd823 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/b021668771c272d42ba5d5ed5a358b19.asset b/Assets/SerializedUdonPrograms/b021668771c272d42ba5d5ed5a358b19.asset new file mode 100644 index 0000000..ccb1fcf --- /dev/null +++ b/Assets/SerializedUdonPrograms/b021668771c272d42ba5d5ed5a358b19.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: b021668771c272d42ba5d5ed5a358b19 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec5d079c14b5f7cfecd17befc8d14fda1d475740cad194261c8802c2c1ddc1c971e0ddd114151515147b57ecd81bf686bd61efbdf7de7bff4f32c9ce9bb9bcddcd66b337c3ff871f196676e69b976f5e5e92979724924dec3f561ffbafd96406194bfa9159a490ac2065f6bfc6dad7e5f67fce9d783e9d94dbd725f6df05f66f7d48669c2fe99f9e561bfbef49f65d05a9b4bf5c4516dbd712f6fb4c5264ff7b92fd6d917d479f16dbff17d96f5935ec8f66913c328d4c25adad96712066b38f2af8338be6cbaa63ff3d86acb37f2d6242d144b2d94fadedbf66dabf54b0df96db428bf7e692f92c5bcbeddf16dbdf9493521b731143ac53783261ff20cea517bff6e6d7ddedffebf27f67f07fd7e1ff86efd7e4d73e09bedf177c5717fc9b3274718ceffb39d7480ffb5acb7e7c00b8a7df7ecddfcb76f0224b6360f5e7d75c7e1dc031e726207f6d7e1d1827bfb1300601ac4438abc3af43f8753097775e92e90f7338b2b6023cca654f20cf1090765df03b7d365423efa21cb37ce598e59463e41c5e7e1ff3f7f7e0d7e1fcba27c7b6df695eca9f8de0d79c38728d74be63f20b9db5d3cc58c9eff7e2d751fc3a9acbd68bcb3a1fdcebca22ca740cc7dc9da771a0e4b9789ffebe80df8fe5d73c5f798de3ef2de4f7e313942711fd1332f5e66914807b9bc71a0b63608972efe32b775e06354e7178ac71a72f3f40ffa4b81338dea224f2d1d7978fbe8e2c35b3bcefc59541e04fe438fd38ee62704f71cf50cc5b0dfeddadfc7e12896fdb7a25f0db6407a78ee07a8a934ead16cef35aa2ae095dde278e9ca26cb37d659bcd714b39aec8ff54e7de123c0f0438f4fb421f6e8e0f3787e30a1b313e4139a7f1eb0c7e9dc5aff9245a8f2b7819927df975264fb33ff1da00d1864c77bf6d354791b7586534db57d6393cdddc3898e2fbfdf8b56e82ef8b77e668c8bc3fbfd64b30cd7afc7a80469af51d5da8f3bd4f17a6c4c19cebf05ba712c860e3d45dcfef45dbcacb9b70bb1c19e4d303d196c7d28378b22ce0b2105006b62cf59af0fb85fc5ae095852cf2c954943a9922a24f540ceee975207fbe04dc5359a73be9d47b846372db47445d16324319532c332976be6bd800e84622dfc5d2af254efeeae738d8f5f3f973512f856cfbbb72d7c903df0a3912a90f07712e86f8381ec26510dc2ef3bdb714dcd3eb60373df66ffbdb0642b7fa81e7f4db12704f7f2f4950d6e5a4aace529c6120ed613c6d6eff1b9cc2df2d2355eb9eec5b7a057d4df66f8af736ff6e05a9da8e89f768de0e02f7f4f7d204f3b652229f9d6ec35131be3d9878edcf7eae3ed47e9e3f2be7f2ec41bc754bf47107b9df58a23f59e1dc3716b2f06b44f43dc5bf6df91a89f67415bfae23f276760de081d73fb2d64dbb839077758cb444bd3ec497ef252e4efd365c7661c70e25de3ae37f973e13f67703bf1ecdaf47b9efae12f21dc1af4772d986138f6d268783e7f43a82ffbe0cdcd3f70e73b15b0a1ddde89355569ec7f8f22eb301b1f4ec58e7dd4a91e6710eb78db772de1ef1c9504962ebef6e3c5f238957ff4772dc9f1ddc26a3f8fb9bf8f504fede5ea09cc558e878374fa3441bbb19e0d605ff4e44c6587c9ce4a413eda79fccaf829f7c80cdc7459151ae7cd1bedb89e0377acffb70640bf1b439316539955f1bc6c94f2ff01ebd9ea691ff58bfd5e2d73379de4613efd865b453c64d3f8e817596c3539b6efcfe6ce79b663ff37b3ef66e2a783b17e489a631c6e5ba89a81fe7f1dfc6827c6fe1cff2c033def78f8c739f45c4f8ea7c5ff994fa7edf0a3064bf5f006490fd7e217fcedbace6d3f9f38b7c79d9e293358f78ec85f04fc1bc46f27c69972994e525fcdbf1beb21cef944bf3ed31b02e9597658b07f8fd65beb2dce62bcb0992b2bc9cff361194db9efcd92449f9ee0d7898c07fbb02294bf1fb950057f6fb554006d9ef577bcbb26507fefc1aa42ca1fcb02cafad9a57f60e4c7b450265793dbf5ec7afb2feeb0dc4b5e314776502b837f2eb613170fbf9700f4e00f7267edd1e03f76644de64d213ba2e7c2efb10afaed37b5b6f5b6d8d81750b91ea7a6bc1f9adc4abebb711afae4f265575fd76fe1b1c1b70bb10994aaaeafa34a02793f96f778077a0ae8adfef04b8b2dfef0232c87ebf9b7874bd8d6817ef21725d87f2435ddf5135afec1d987679026579af8f67c1afc8df12706f974f1b219fe81f9d0d7895a5739f83bfe6017e7f3fc7db97e357807b7a9de14b77064ff76d07a7ad182734e0cf79ffa7adf0a73dc0d3fb9bdf3fe8bcd7b683efbd879cfbb54ff3fb477cfc3fead315e04f8ae6e561f01bccdb2ce2ed933cc69fcf0665350b3c836525fa85f1787d9c5f77faf89bc9f12ac13d7def4957fe75a2effe04bf9eeafed654fc26cab70190e329b9ae3059419929f791449e9f8e9367159bb41ff1daa4fd1c3d689f1303eb79fe4e7e8c775ee4d797f8f5058e3f8778c721c2eebecceff7f7fd2efc6adb5dee5b7e0ee410d8f49b5531e411f97f855f5fe5f807f06f57837b3b6f1de638697558c8af42ced77c38afbb721dbac1f74d9f04e431f1db1a9e97b9c46b23e63a79eb9849bcbabb3a8e3ebdc1af6ff2eb5a8e378f78fd81c26f18cb8f152fad18f98a1c48bcbe03e1577b8bdfcfe7bf8bfc2ff4bdbf90bfcf6d636481effd45bef7c5bcca3bfcbec0fb3e7917e0d0fbf7dcbc45c438fc7df08cd731f281cb4f27de378d2cf6a64d3e24def1a018f315f2f7d682ef2007e2f775fcbec897a7627e7f08b8a7d7253e5c6193dff6fd2e7097fae4fd885f3fe5d74fdc3c1efa3af806f0493ef662c6d4e9f7384609ffe650706feb74a7f76360886f854f6019c7580fee6d8c4ceeb3c98c516f23a53efe0e02cfe97539fffd30704fb137c4908fcb1e29f3e5ad8c7fbb23816f797f3db2d297b7951c83b7ff9debc4c0fa8c5f857d1565287496e2954bca55b4c97cfc1d3998cb7038b8b765e87c317fef0b22d7ed15beef8ff07edf45f479bfe4d7af7cb25510af0fec1b7efd16d749f29d4ff64af79da87c5ffbe413fe4821f72a9eee062087784eafab89b74de36d0de13ea5c81adfefc2bec8e6d863d59196fcfa0349dac6921f015622be9f56fcfa93469a3f03ac44d26ccdafbf68a4f92bc04a244de1a3fd4d23cddf01562269fec9af7f393ad06527285f7afd835f791f3e426d37d5a323c1bd2853ae475dc5fcd03ffcfa6f6cecc83a8e7914b8c73063e485fe935d23fc6ab9df0fe4be798b7f63f1b82a1639c6df19c47d1d16efbf5abc6e5ab5010ef79f58a2bd3d84cb7e34b817652f64e7ba6789f9d86684d99a1e5ca6c8a11c63a3f37e8f895e19d9ef75c1bf453973fc6ebccdb3ea3bf77db8efc1e2e3b21ec2a689bed87fb175c3e2be56ab518cfc37e6d72638d7d1fe589cf462ea27e72a8b8f0523eb89a76db49a728e8783df85ada0f787f1f78f01f7365e4fdeafb79af16b733caf528e5a70bc2341d9d1fb0d5e7d60b18854beede0776157e8fd51fcfd63c13dbd1ecd9f1f07d211cfe97523f1d6193156f6eb454da70961b2b442646c9da48c47ca6594ea661b79f945cbeb67f79bae3c7dab2dbf727f4137e19ffa8d3f6fef7ed357d4dd76fc1d31572bca7f93b7fc7bcff3bd2ffcfe87136fbfe070dffb1dbddf458ee0ef6f76f423c2bfb3f85c116a43683d15bf758aa383f0dd4c7eedc2af9ddd77fbf07190d5955fbbe13a6d7527b1eb2f4cb307896f0f7a2ae0f1f9526bf71878bd14f0784cadd5cf793e80f7792cdec7b6784cac95cdcbec18e28d8d10f38c9231a59513470efaac7f9cfc405973411d83ed06d77959bb11b3cd1b00f480e21ccb718f07f7f477493b171357d8f01ec4b5dd22ae0ec6b1f236c582be29551bcff52bb299787d099bf97513f1ceb7d27b3b3f7d0b9dfcf4dd08e4a2d731beef0ac03dbd1ee7ca1ae173c27db7732cd1560ff26246c03cedf052f08cbe3b1860415bc3b1730497bcce454ee5ef9d00eea1dc27f8e43ec1c1e9c7c704d17add2e0ee7b2f2eaeefd2d721a4f6b8be477fafc44f01ebd9ec89f9f04ee6dd9b2857de4b8168f09b1789c89c5633022a7136fdd3b9da7271987446d679c7c46653b99639f0ceefd3a2c74ed249fae9dc4f371a7238328338bcf6f59c3e5f9b146f8f2b52175f9b2467af54de8593c3dc911fdbdeefcf75314f546d807a1fb62fee554700f756109b8a7e9ffedc8dd5fa4cb631dac515e0ea3f80a3ae1afe3ec9e7e7ba0a2cef03c58a3815ec03922f1fb18e2ce11c1e7637d3a077550e8535df06f9b97dc853c2d61ab4f07ef08dc3cf08e4c9e71401e9b975cd18f157678a2f77d59ecad35c1570e33813c89d64d317639459287d1e037908754955dcc764be8f8a4e431a26ddade1a18a2ef9aad91170b60253296e77d524b232edaaa0db01249b33dff6eb2469a35005602695a74ae18f6f378bf2edaa6893896c3c0bd9dc62031df28ca374edcaac5e77b2d3e976bcd70dfb7f8bc94359344ebc67a3e7f69edeba437b89b627a7c1ed29acdaf3cc63c7226f1ce81f0b14aac39907869c5e4777f07736021d027fabb18239d45bc63eab39cfc0e11b681c79b5a62bd97cc7e88fe42ac7ef57c79395b7162e8ad0391efb85f2872b64f7e1eef3084fba42d3ed7622d8c215b8173df73a8731d36d19716ff96adb782699de3a435548c2b16c5c1e1fc44cef5e19cebe00c1bc5dfe3733496881bf5eb86c0ae09bee176de2af6f1858d9bce23def6e13c5c0fad250994aff00dc41837099987f29831ab24399d88a9efcbe498517b72be8ffbf31deef710e358a1d318f7b05e1e1447779727c05b591cdee837dc9710d94abc7db4ad5cf6dfbdef593c06c95a41bc6db6f85dcc9770f9a2362d5e7ef8bc8dc5e72b2c110b7101f1dab40bf4b98b59c6ab89b42f6dad4a1e53f493a37d211107793ab8b7b91e2eda013136127331677099a67bf12217f1dfcf04f7e2bb44da64e11b1a1ce7fd587cad055889a4d9d1c9eb085127b80fdf127ebe8b5d1cf66ffa8d2cf639964c62bef112e2d5e94b78da950ed60811eb26f406f8cfa53acae7102de1bb3bda571e97ba7246c7fe97f2778f74b1a33a0562e9373cc09f6d00bc0a2c112328eccc65404ef1ec7280bfd127c3e5de74235710ef78f00a87975199befcf0ef225712efb8ee4a1fcf57f1dfcf02f736de481eff35f263e7ba17b725d17a7035c8873fcdab39e6d9fc1bee8fdd8bafffd98bcf995adcd65ac27f759c0f6f9ba44cb6a5b04c847d8ba33baccce86f63c03d18d3887c477fbf1cfc4e39e4e33d8bfb8c2ceef3b28e4f6f7ea3f910364acc4925bb065ef81faf21deba7a8d53dea3339df4c708d9b82fcc127ea5ebf877e7f0e77c5c6d097fd4f53e9eaf07dfd1ebb5c4eb8bbb96a7fbb7f73d8bfb282237f2f7cf05f7f4ba9d3f3fcf27df769f9ce77b9f5b60fc2fbe117960dcc03a209e8f01f7705c0ce34ffdfd2cecdbad71d2163e473147b739b69e477d1682d70bc0bdcd6b1e9fdbb538ae2562fc6fe2ef5fc89f733f89753af89d5e6f269ebe655c3d106d633c3db8c1a7073770796b844f0f22226e5c369e4a971e08bbd40de4ebac04cbec1cbd321b7767f8ca2cda071131c476992daf8cf36da265d6c9e1658618af9debcbe76d4839883545b7fbcae176f01dbddee12b873b9cf4268cf2be172d873b7de520caeb2ea41ceef2c979bef7794a6da8effbc82d0adf4bc68691bb816c8ae5184dfbd4e4bef7eb01930596c3adc4ebffbad529b78962bda39887ba8778e7a1eee1bf0ff1e11c03ee85fc22efe7fbcaf43e44e7785e22f7fb74ee7ef01dbd3ee0d3b9071cd927ddea7d2f9ad7077d3af720bf3e84e8dc433e39cff73e0f8ccec9bedfa1a9b30f6be8ac483b499d4db9ce3fecd3837b7dba7aafa337fb88354242e71ff1e9bca8134362e088fc8b7631933f7bcc7dc6fe4dd3fbdde17e7203906fd9bbf4fa2878f6a8f3fd64ee079c3c19a48bbd2bf67b117ded97b8ec17f9f22c9e5fccb1852f8df7e12cde378b3c5e55f7233b89bc3ef334224f787596dd8befe8f549e2adcf4f3ab24fd9e87d2f5a8e4f116f7d7e8a5f9f26f2fafcb44fcef3bdcf53daffe2eb7caca93866baebf820ae2796d89be119b2ebd4f1671c5d99267c917c4c1eaf8f6a5dccaf97f02bf7d544c722f37d3af42ca2e37c4c1c79cea707cf81efe8f5799f8ef3b54bd3977adf8beab8584b742eb8a7d717111d7fd127e7f9dee729d571b17e753a8e996e1d4f76ac1b347d4e788c257c3ebefe7bb48dbaddfdbe4a9f5df4d90ac0bdad8b4bb6f8b0c5772f7b658c883572a2efbf04dcd3b1c6eb4e99cc78dfb92e29f47e178da7107917e3533fb7226fc9ead0ed9adfbfacf73de351a55ebdecc5898e957c36273ac77ab7effbbbc17716e8a76c02f776f9e4bfed7d2f6a73445fff5c706f25303613722a8ccdfebf95ad3f4648d94e88f492b5532f6b7e7fbbe6f7b7e97dbfabe53f5ad7458cd82bfcf7d3c0bdc5c7b675c1bfedfabb7094370d743c2de653e28da71f255e3bc1c70efbd7f0be1786f174d4077d938b197d7633e052f09f07deff5f5b847fdf5953fe9bd5beafd2163e8ce8f815fcf7477cdf3f02beb3f8781aea381f8bcffddcfb5e54c7c558f15c706f2530c614722a8c31ffbfeb96aa6e78e25b63bd8fd96291deffdaa2eae1afb3e6f7ffcff9f78c19c1f8ca12b119577bbf43fb07d7f0df93ec1f1474f3be1786fe816857e03e86ffafed3188f98fc6f883bed3ffeaa662fe7dfe1ceb2ac029b49d7eff22d6bf117be425d9bf29dce97daf3afa37da310cffaba3c9c770fcaf3e7ac7ddb77bbff7c437509fa588271ecfaff1fcb0b16251450c8a885d79d5c58abc0ae453896fbdc17977b9581b702361f57c293f4f62e9421cc312718bdd62a4bd99e3f1fd8f978af50edc7e59bc6e5a7cce323ab67e8df35804eee9efb258ed58f913eb6f448ca12cee32d6f77739effacfd528e1fb9f9788d851110fc17d9c9698437d9778ec73e4dd18f910713bb7c5d6114bf863df04e5ffa623d741621d25e7d1ba03fc4ee5381cdcd3eb1b00e30d8eb1d2f7ed5bfcdb43c1bd789f3e3f08dcd3ebeb00f3758ef9880ff36dfeed05e05ebc0f31f9f7a522ee9dcf8d5bbc4f693dc0f32b5b73789fb7ec89d81bf16cdfefa2ee9f2eff5db471557c16e2fb4b40dee0ef0f7adf8beac2253e5d90c5d6dd01d2146d96e8bf729b633de27eb752c4438b76399e0e417c2acb3b5cb6d5e09ef22efa0f8fa630edc7f855cc6deff0ca12d511c1d7061f5f1a752766fcb058477063f218d6d9002b81350cd6935e1d8cbcc7f35c00eeed7228133a2dfa47cff0ebb35e9cc8a7c46b373f4d80b39d71ca4bc457bccfb197807b2adb5a07b74cd4f1e7f835460cb16ada30f633f22197e310700f39f88078fb7f9ff8deff846376e5f71ffb38ffd8c9d70a51179f2755db48f15e5df06f7afd083cfb88e36c0772c1743f22de3eb6789fb791d1f5007138f2e00a5bf1820f43160b2ae6f26ff1f267897898856a72c4d4f397251cda795db9d3cb89f5922be74ade2658aff87e8b979618cb7ce6d3d7cf9c340fce72f00f166ba0842e3e1c07dfbff6ea738e7f3ab8a7f817134f9d8ef699f9daab72c1ffabc4b3b6223a4ffe05f18edd0683e7f4faa54f6fbe74d28de2bee6c5adb287c3d7c45b3fc43e80df0039a13c62bf41b13fc7a5bee71d80debdeefbf62bb73ca36b48bef2ca6589b1a86837793fc27a33b97cc45c5b13af8c65cff8baebc8b73e7dfad6e1bd82dbbf0a5eee16ef1f9199b1d3b2def1e17fc7f12f03f7f477b0ae469c9362f1b6d0fac08be1d9dbf2488ef3bdfb7d747f486eafacf7dddf8e16639eb7c177f4fe3d901fd0b628db800f9d74fc7bbe570a99c41809ec9523e5ed2307c7bfc7f7aa4c451cbe964cec016e7deadc8b3dc02dd14e883d26f83ea2911fbc3c5862cee74737bdc80fe0197dd7bfbf771cd9a4cf8ee2983ff9f4f02727ffb4eb46e55f2dfa31420f8f8cc383e8cfff0cde136981bd28a376ef57f759e417f08c5e7fe3b26d03f7b66c6b36fa707fe7ef5d08d2a6d73ff8f3cbc1bdb03df4fe4ffefb3c1fdedf40a63f799aa2adf9c297c65f1c83afc15e23d6c3bd057eaf0be414cf0486f816a4cfaef4f915bc0c867bd38c5706d27211fbc1deaffe6de41f2e4f31b8a7d77f7dbaf3afc3d5dae18edc6bc57a72a1a70fc64e5be05adca647fee3f86bc03dfdfd6b8007c61989e6875e607ed83d48d7126d41ac3d9745ff86b75b1911fecd95e09e5e2d37cfd6b7fc5986fb8cfd4eaf3588a79d163a9a5113bc5b13bc4bafb588a7afc9eeeddf0e1deec316dfd5261e7f5306df2bc5e26d43461dfe3bf70b8b3a9a5117c850073ca3d77afc9babc1bd2dc321a31c1d38b40592567dfedd69e01ea6d980ff7e0db8a7b83bbdef6734e4ef5d0bee05c710e73a2f8e5fae8c46208f8d78193c115b5f05afa20fc1ee81bf6edd466f9ee2e1c56cef44fb29f69ee5ed5c4663e2f109b17bfa7ba2be2dde2e597c4fe38c26be7211673880f189f25858f49734f63fb67e75f23240ecb931895f7f56c7b4f85c524653e2b15fecded68df57cffafc3c4fa64b15f27b7db16ef2b64b4f7721fd55dd087cd10fb0bfd0e9e89beff1fee334bd8be3fdd72db28f6b810638a7d63e755e4cbfa97a7d3cc57967cafd88ce64016be3f46460b1f172d1c2e0eafe3c872848861e63638c2ed5bc472e53d265f2e077d9561972272b6f4c9c9f7e8ce007b5d67f0bd5f33dafae46ccbe5dcee953322da941a5e79035f66097061f1f38933c0bedc519d06fb660bce2235c177a01ca2bfd70218b2df45bbb1dcf75cb405ed7c32b703655317fc3b013e62da113156abab8e11e17b57b3bd06e83dd8efd3e2fdae8cdddc72dcbc053ca3ef8bf6a623cfab38d74bb4d39d001ef73164640239c57b9d01279d0126bd7621def6bc8ba3db472ff4ca1efdae2bf1b6e7dcef91d18d78eb483707e7a80780ac804f760fc6be4c6e988feefcf763c03dc5ebe67075f45044be1e5ef9a2bf67fa7e1763755117c17e9f55307b7abf1158d1bc64124f1b1c956d204813c3ee21c78ec78348238a03ca5d3c8bcad7d92bdf91f9de32617b5ca8b667ef738c2ce2995b61f7543ee1cbe06312ebbdd86908bc08ef4b45787f2863778e7f03b8a7d75ec4d377cd10f555e87c6fe21967b17b5bae8d3b7c387d7c38e28c11c15d5fe2994f8d7e27f6f912feee1b1d6e373eefcd4fbc7c4bed06ef4f45c47e567c0c69713b9fd18f78e615d83dfd5d8c2d639c9bc6da4efa4d367fb702dcd36b0ef1d6e31c87b763f8fce7b1223eb829bf36f3e18a339cfd6d1d3847396330c84f5df0bbc86b026d5d742c4f62f31b117d0d91bffe5cbe4a704fdf6be9a671bcd8775df4d7737d9ce43a9c1ccbdbffe384bf56b4516d403ec538bcad4f8e813e39447f5de22b8bb4f6f226fc62194389d78f23e35aa4b7077826ec531cfe33c47ebd3afcb72309e53bd2c14de378b1e705ef13650c0032f1bdbb33c459ed4bc0bd5d269b0abdefc5958fb78391dd2465d6c927fb109fec625e76172b33294f0d7cf28ab3524f07f736ff9b852f54f8bbeabb726cfede8b1511e3f1731465c9246e9da532097fc870e2f587081f56175706ba15127bd699b8755c958b0ebe7447fad2e5e74e678c00ba24fa49e03ceb0cde5fcf18e5e341b461a3c1bba3c1bbf42ad64f15807b9bff2d8ff8b0c5776389b7df3696e741f846f288dc0f330ec890079ed1eb78e2f5c38c77643861a7c3f596ad485a1388b7ef3ec197e644e2f5c34ce4799bee7d3f6312f1fa6126018e21ce753e1c9f5c1960cf62f66f617b62f96138afd17ec268e2e9639de0ab2ff1f0a47ac6e71932c0dec44c97e933b07770065fcf9e21ce4df5eb11587bcffe2ddea5d7693e3d9ae6707472960f5b7c27ce553d15dc53b9f8be0919e25c54bf1e817d8033f605cfe8558c01af06f7b60c273571b8a4a16bd2b4f27d7a94ef4b539c637a0db8af01f0443f189c6b9a311b704eafe21cceede09ea621fae773f8ef8781fb1a5565ced81fa4c1cfce643628968e4df5e9d854af8e9de8cb6f3c3cefb39a16db437a222922056425c966ce0adabb9d4d6690b1a41f99450ac90a5266ff6bac7d5d6effe7dc89e7e2cb3e2433ce37cc4fcd5a1dfb4f4f966c2559677f5ae49ca333d3bea9b01f15d9ef538c49f637956400c965d8cbeddf16db38e5a494949045a42d3b3743a43e96fd5d60bf51c2406fcaa892c45d5592a0c295daff15d99f55da1f52212bece713ec2765f6ffe5f6b3c5f6fd64fb4abf5a48fa93b9f67f5e94d976b2a564957d976fffbd92e12db4c5aefa66bc2ccdb79ffabf9961639631e996db4f04a12bedfb5226e14cf6f76a266911937e92fdacd27e4673b3c4569a15642d4bad6adecbed7fcbd2cce794c9659caff4dc625bd38b62cab37343a5cf66baf8bf12a98e12a1d4d7ba29c3a98635b29997f2f82a25f13f0e1d23431d989338467f4699e579964bb2998f73461506d5f358358772fd76f81e4c06c6cc8b9c195adced590edc127effb1be4bdec8e8f94b4d6fd606906ce69eed10276bb188a57859ecf434952cd4ac5923870aeaa7df92d1cfa6d166a6917ee7bd12f69e7a01d4628d9fb70058839b6f5bb5e9a0f19cc5842f65a2f93333ce16bc883da1bfeec7adab632ddddfaa94670e4dbc362b92aa0d6ebc6c61851291150af3cfe7574b9d981bc71eca8ba54e34176eb164b35e549b18ca8ba5c5ba5735781f4b54afc3370fb18a3b5d56f7b52716b6bcb0ebac463b6e9b56967fea971fd79497533d564ec9a48e955486aca4eaa5bbfac46f2f629553fd68bedc72a27fe41c3640743d9e0c188335640cd64fb7aed3df56309402fb5d750ea973bdb7df04c9096c8428617c11300a6b4a28cca114369648456ad6f549450542906bc90aa741f534cec929371de9b6f651501355eea631db5655d5ae2d638f4dc32c34ca9e1833ceb40707fbd8bf15d8ef17b10e287d3edd462cb0d3a678a3590aee38d3fb456c66e9fc445f3fb352569b3356bb8111b0ae6418e375248ce7507d6d21510366e3fc95a1295e19ea62d5aca56e35ab8721b7d245ae8f21b7d6456e8021b7d1456e28ab366cd6725e5aaa8deb6a11ff1a637fbbd4cecc6a367e5e657f2f73cdc4ae2e6d13ae2eed5875c9243287919a44583569242b3bfab0bd4c487fd1b5c38bae3106dc4113b809a66d1d75b5ad2926f26e9a2237c344eea42b72734ce44c4d915b60c09d35815bcaaa345396f48e329da118c551ef49d0f9814e097793bb126c48185b06accab692150db5c1b459d56dd95acb8aa749ba8b278f59b24549160f9dbae82ce1012fa21e4811c593032ba236b222a24ade13d31c7f1175c58ba82d56fe592928ff7618f8ee29006f8fd1d22b05b47490692e33e9cb8c6aee2cfb99332d328efd5ac27ce92ee60a764f53131e85585f50fd9d625f0b6d09a92cb135bd7734cfc0afc25a1b1ade6056321ed4e5fca98db859fab28a655e18ac227694691c6d7969389756cbbb1b869cad8bdc0943ced145cec490fbeb22779621d3412f0de3aae290a563b3697669ceb01f95b0515c61d5d46ae3a975c18cd4801418a9ae18f8c01480779381535e6968954eb7aabbccfab1dee15ca3d6cf3b8c1fc0dacc02fbed02f02f319fe81fc20f8863dd06cbac1beb9876227e07826aca4312b15e4399f5d24f0cb34e3d306d18a6a90d3d311dde23053a9c8559913d75adc8ee98d8c35320762f193875b78c88beec82ff67ffa902de0007ef8d493e5222f9a9fb479424ef8311be972ee17d31e451bac8fd64f6888dfd8e4c8b3d8a175833c1ce164d6d9add8b3f8838111155bb2222b262867d2d6652d0e78b4951020139b16ddb68996d6323bb71c0dc547f2e6858548419c3b1cc18d272c53a663269d43b7272539cc7520f16379859cfc62ccd3889a5795d66c662589a1cacca8ed7adb2fd65c8b4ca4e90e86a0ed5551aeb598f354355d2c9c3d3c9959906e67738a45a4d8333b343f18a59ac9b8337d5be5692354c559781e9ff7cfb9d723b8d224f8b9f9c31a031b51dfd9d64e2fc915787bd59751899407530992bac020c906912edcfd380cf2aa301ea2c9941a6dbc80b58353c983da62c39a55bc25e2d2187b07e9613b6a6325a18289386ce2cd0b0dbb8bdace638f0200c788a26f0601930ade35375ebf8101932b536342459b7873514137bbaaed8c3308bbaafc4a2fe6da959d43d30f01912f01d1135f03db1aa3033111d89a1d5c331e07c591da3c3c3b12c9a20d3fe7f85fd05756616b0da9fc91a43d71a64da75bdc4fe176db0fb80f757d86f3861a22a728ec0946296ae528cc4ca6db6a4dc7e562cb7bd30f0fd24e01333d4c047616537475676fd89d32ad26ec952deb679ad61261b7966b218ed55dc9f424bae82956b2639d4ee351c665f2bedb733593b50ca7ea3ffa6254d6dad4a998ec6e4df5f267f3d20ff7420a14a8a6330bb7580c46e598a766bac0c9c767ce612a4e343679fd53b3e79186df365b451d7e538bbfb427baeabd8fb3399021445fbca85296a20c749e4ca66531865a43a3b6474b44023da2b3c3199f92c6d379252a7e3451779f83b5ee28fbce3b580d08e572e89dff14a85f458076b3c6654174a8caaa5625427c890695d28c0eac2a2a4eac24499ceb199ad95d5aa73788d9ac1b069cdd3eff02fb6f398e11ffdb3a9b781096856aa64ec6d51a340df5fcc99aba0c6b42e2bd4754ce8b16c029492cfaa84bc4e14b23a914ec9b17a31096bb58b24adf6ad35d55aedbd652acba634cbab5565f318423ad4b658a6b66cde757002859f4a393bb139a40a66540bb951754c77278bda41a79215d9cfa9e185bff7b6e8088df697c633be9733e669fe0ad8b81753f2254cc9d39d4f4cd1f7c11a80a5920640a9573d19ab4225922af4b762159a82897d90aed85331b19749c45e5f4b4dec691878a9047c726d35f0e932706a98e9ae4c3a23c47d3160daababd2dda43393629cb0d837525cc4c60a62fc57c89eacb3ff2eb59f2d6610996c119b88d855917206c6ed0a09b74d14b99d8951b05293db7c193055cf8313018e3173374b06dc925934a4ff45379751ef7fcdc668af94d07eb122edfb61d57c956e359f8321afd645de1f435ea38b7c0086bc561779ae0c9916e23a4921d2a07595429c87811f2201cf57049f8f55cc4365b6a9bb7d3b1a74529de193ebd728b07b2695ccf264da8ae0b4b9851eff48318b347106cd2af5fc404ccef532399d35f3745d02ed5314301f1a4d719add0aa9a4ba00a3fe3009f55b14a95f88811f2e01ff5c11bc00e3eb08195f6de2946b210b67779ff6b79faaf0b8089366834c1a7aeb969b4a3a8b314a8f9450bab59e1aa58558268e9265a21911cdf81e36655399c3af80aff75fcd9a71751a8b30098e9649402ddbe468c7607a92dd82628cd28d124a5f56a4740966918fd1b5c84b31b18f9519cdfa6a629760621fa72bf6413264daebd844905ec766924caf631996cef1583a2724954e29c6d4165da69663057ca2a4804735502be0320cfc2409f87a45f01518f8c912f04714c15762e0a748c03b3454033f18033f55025ea8085e8e819f26013f4711bc02033f5d027e95227825a6e467e82af92a4cec332562b768a426f66a4cecb374c55e2341ce6611e0e95cbbe28f7e525bbb42b7a84d6c6d20dd804cb666255efa984b69adac5c680b7dae4c2485a67c1da64de749b4e963c54a7008067ebe047c9ea2aa1e8a816f95806f52045f8f815f20016fd2580dfc30ac302fd42cccc331e08b88a42fd88769e70a56c76877be886d6553c6fe55c6b6132b6213d7054cf75d879398b8a67b236572ed2de73a5d6a2b543ffba98ad44760525f2c939a9a0ceac475fbcdce50d21986c8e20a33494fdeebeea924d7064c072e91e8c0ad8a0a762496e94b3575e028999d65eb614a8cda592c8e349f39efe9ee3cc54c5396a77895d56509dbe46dcc26d3a86a73b262f6fb685971d3bef5e504e95b5f61ff5f8f8aacd4b7de88e9ec95129d1da868b78ec1c0af9280cf51043f1603bf5a02be5111fc381938edd6d08d31b5ba359b30b1af9588dda7899ad89b31b1afd315fb7819327dfffa44cc4f0c17f90998a2df80293add375e7d10b905b39fdb35ede78918303def5a1a3e3537ea1273bc37f315dbbf933015ba59a2426728aad0c918f82d12f0a715c14fc10afb56acb06f4baab04fc5b4f5764d6d3d0d03be4313f8744c8beed454cf3330e0bb3481cf9401d3b2a7e7a2fb83f828804a10df599816de23d1c29f9baa69e1d932706a25e949175a56f21c4cec7b2562b768a626f6b918f87d12f0a18ae0e76135f37eac663e9054cd3c1f53c70789c45ad2e5a10becffe8240a9d9e5e42a6f3d09512bb27497f59c9461bb40fafa2bb5b31291e9249d13c2a458efdf772e24c6f380126c9cb700126c3c332199a711906d8ff2f66fd69facd5afbefe425b81093e0119904754059d06528b4c7ab92da4598fa3e2a51df1acdd5d4f7624c7d1fc3d4f7f1a4d4f712cce8ed9418bd0c45a37729c6d01312861e5064e8320cfc4909f8fb8ae0db30f0a76465db420dfc72ac6c9fc6caf699a4caf60aac3a3c1bcb34e5a6d8345d8949f15c6cd3d43f85a6e92a4c86e76399a68129344d576312bc10cf34edc7d2530b99bf0653df1725eafbbca2fa5e8ba9ef4b98fabe9c94fa5e875146cf5dd0e9e85d8fb1f3aa849d792dd5d8b90163e7358c9dd79362e7462c136f483271ab6226b663d4bfa949fd4d98d46f49a46ed04a4dea9b31eadfc6a87f2729ea6fc132f1ae2413d72966e2560cfc3d09f8d38ae0b761e0ef4bc0bf5704bf1da3ff038cfe0f93a2ff0e4c393f22319ab501296ed6eec4a4f8582685dbace5a6b059bb0b93e113990ca2591b94c266ed6e4c824f6512d4256eb3368ecd99ac508cbbb90753e0cf240abca3b59a02efc014f8734c81bf484a81efc532f1a5241303dba865e23e0cfc2b09f8198ae0f7cbc06971d1a33e75da850730a9bf91485da3ad9ad40fcac0a97be45ba2e91e790813fb3b89d87d14c57e1823fb7b59dda2b11cb123ebf2ed5757b2d8b725ccee94b3c053670155219bb39c4e9c4ddd9dc5b705f6d342b62c7729bb1776b3802ce2338afdd98ca258b8bb8e38fbfb66b2197de7cc9e4c369b54c897732f634f2ad85b4500593e6759c2e75ee12ca76a80ec235801fd2029a0e18a05f42806fea3047ca122f86332706a8c7ec28cd1cf4919a3c7b14cfc2263a89d5a267662e0bf4ac03315c19f9081d3cafa5b22c62886ebfa49097036dbf6b07a2690ab6e0b94da09e4df657c492790e929a3b12790f565c526909fc274e94f596d53d4a5a765e0b489f84bb789780643fe5b17f959ac7df82711fd8f61349f93e97f267d585c2dfaafb361576ccdff3761cdff8f697eaf189aafb7ad98bc249ec794876e22a1a53c2f60ca63597acaf322564de9f1e0fe6a7a677bb56afa1226758625e912d1d672341b6815b13513b2d53699acbb94a91818f53226470d991c74c30f35fc5730fc9a9aa5f32a065c4b2638d51fba116e3eeb132e23e39912d37ed952e59ed86bb294a95ed496e8c5f40e6a7af13a96ad3a9a7cbd81495d572275614735a9dfc4a4ae87158608b370bac6de7044956cbd85a55c5f9632751c3807d46547cfb5c98e6efe32cdae5b85447501cddb98040d6412b4964a3099fdab92ad94770610c9ad8f7a0793a5a14c96f609ca52f5e0131599dec514af9144f136eea6a678ef61196eac595ddec7809b68027f800137d504fe10e3b99984e76d8a3c7f84813797802feda406fe3146490b4d4a3e910153ebd33211e018e3aa4f65c0b4916e652143dad6563243dacf30dadb48681fd5598df6cfb14cb4c532d12ea94c7c8165a2bd24131b1433f12506de41027e5d1735f0af30c5ec2833a77431fe0c02b7432964dd7561c8b3c8eeacc12be37f7ba3ed33d99dd3fcf461db3cd05f84c9ad60d1f899cc30bbcb9d1dff145db8bb927863e3453ad42fe534b1c551739ec98c79a16264e3d71817bbc9b8a03b76c23dd59c0eabdbc0ba4b8fd730094b89bb62d6918fca1c0f21d77e5b7585c23798c2749228ccdf8adaf82d56a532b12ad539a92af51d96892e924c642a6afdf75849779595345d9028f7b6cee57e5abac2830e549cad7862956956cc5f7767d1b88e87d6d56b6f0d58c134437863bdbf5532bdaa94d4a2454cc215c097eb60afe0035d15fdfa41c61e3d7aa79ba57ff4ce8f1878f71480ff2403a77ad2c3d2dfb2f6670cbc670ac07f9181d3b3b4b22c821f50e54fa0079ec0af5802bba72881dfb082ed958282fd1d03ef9d02f03f30f03e2900ff13b3737d2576eee76e6a76ee2f0cbc9f047cbb22f8df182dd9125a9e79fae9112ab4fc83499e23917c627735c9ffc5c0fb4bc01b2882ff2703a76ec05c5d3720b110b10748c4dea428b62503674715a5c07a4530f04112704b113c03a365b0ac7fac484b0d193855f22129a8fb3531f0a12900af85d1324c42cbf38ab4d4c60a748f14684b1d0c7ccf1480d7c568192ea1a5460f355aea61e023641e4845f0fa18f8480978a522780319383b1748d76a35c4c41e25d34345b11b61aa325aa22aaa11f18d31c9c7c89a6645c99b60928f4d819237c524cf93f9b27aaa49de0c031f2701dfa108de1ca3657c0a5a8a1698e4132492afcf5293bc25063e51025e4711bc15063e49024ecf3e53016f8d81ef2d6b4015256f8381ef23011fa828795b0c7cb24ccf15c1db61aa38250535b43dd6f44f4d41d3df01a3659a8496c98ab47494806777b66f2dbadf68ba76c699459cc38806d8a98b435ed576c7992ef15765b3d340db56c94722a9ed6be3d5a17094b4ef6d523bf4b2ebbefdff0efbff06bd09b619f40c8b0ee2934b130b45d80d538099120568d14b4d013a61e0f912f0518ae09918f82c0978a9227867acd2cd4e41a5eb8281ef2705dfb0970a78578c9639125a4e51a4a51b66e8f69718ba88a2a1eb8e497e8044f25b1525ef8181cf9580bfaf08de13039f271b29f45603cfc2c0e74bc07314c177c70af4404981d6502cd05e98e40b2492e72b4ade1b035f2801bf5311bc8f0c9cfab90b645e7feafba46161cb58e8c61a36d7e4c66cabef7cda174b7d912c75bafa4244f238f36bf41b95f4fa61542e960d1715a9ccc634ac30057da31c4cf22289e46f2b4ade1f032f96f5a4fba881e762e04b24e0c315c10760e04b25e06728820f9481d3cdcb4aac04e208cec1810761521f2491fae5be6a520fc6d470590ad470082679a96ce492ad26f950cc1a2c9759037b100d6c4f219bbb5bcce6f70aa37bc9d1eb6af649099bf1738f6373679d9d20ef72bb9fa962498661b296c964754ed85d11b55e2a29ed81a5b442965263f65e19cb6389cd01b591b46fbc2ffb593592664facb8574a8abb418e5a710fc73276b02c639d3dc51dbb20fdf1850544840da8647e04265f39d6343a13df22a64e2f7e6e24467d8584fa3c45eaf7c2c02b25e013fbab818fc2785b25e3ad97a75c27b392ab24cee2ab725676b404e97a8c0a168d2e62a045a97b4bdaadec2a5c8fc6245e8d5531f7c039596553497b0c96f61a4ccb9cd38317a4e42484b158ea6b65a9d301395dfe4a37dd8927057daf9ca8c6f5e661f2ac93c9d302c853142d91a93ce029f945c1e330290e9149511f484183cd5ddd5049733c56250f9554c9e773d5aae4042c43eb6519ca8a5325e5558f16368d015ac78f465dc6227056f2b658858a8918158749a8d8a248c524ac7b74780aba477bcbc0a97e1c6169ce18ed8389bd2105624fc6dc3447a6c0073405e3e4285d4ea6ca90e9fb4727d23f8f11e73b0d53c08d12059c37484d01a763e0c748c0bf5604df1723fb585db26760641fa749f64c0c78932670be0c9846656e8efee08bca3cde4a262a731656a027480a74e960b5029d8d59ee2df12db77320794fde05166be19d118888a8a431966e94a6133b09cf4056ebccec87497b22d691ca671d76ffc9cbc98c93e66016f2a41458c8fdb1323e5952c63b14cbf8000cfc14097893216ae073b12239555624ce3a25a12262038352d0b8d3fb45ac97ebf4f5548a681e96d1d364de03c58ccec7c04f970d9814c10fc4c0cf9080af57045f80819f29ebfa29822fc4aac559926aa13a915180497eb644f2f715255f84819f2301cf1aaa06be18033f5702be5111bc10ab73e761a3aa78756e319f24a6c651bdde1561993d5f92d9ef15335b8c816f95805fa708be0403bf4002de62981af8520cfc4209f85045f0120cfc2209f81c45f083b06edec5baddbc6598d897c84a5351ec520cfc5209b8dd8551025f8e815f26019fac085e86816f9380af54045f8175542fc73aaa5724d5515d8999a52bb1de99d8774ef41a9377a91c8ca57d952ced46c475a938bd581a0b539a54bfb01c2bbaab2545377c4fb5a2abc0b2758d2c5bb4e8dceef91a52e05b05efed04abd9f84a4c926b6592d0dbd1d17e9c4a3aabb0fec47529e866afc6caea7a49599da258566b64e054981b121968f6c581d76294dc98024ad661946c97f58246a851720866796ec22ccfcd49599e43b1f6ea16ddf66a3de63db855d37b701826f26dba221f8e95e8ed9212ed3052ad448fc0c0ef9035b18ae01b3045bf33058a7e24563defd2ac9e476152df9d02a98fc6f8be47367653ac9e1b31f01d12f07cc5c23c0603bf5702be7d2f35f06331f0fb24e06728821f8781df2f012f5404df84813f2001bf78941af8660cfc41d9a85311fc780cfc2199b628829f80813f2c1bce8c5103df82f55d1e91f55de8a9e6259259571a0abc8ac704d0a5ddc9ce069f88d98b4725f6c252b4172749c0b3e9ec495a23c5e1566fc9458a3f26e920647723d248f144527bdcc6ab559b387ffa397f6a23d1e13b2d79747822e960d1e1276385fe440a1a895330f02753e0833b15ab994f496ae6c23cb59a791a56339f96d54c379643f8b18a98c256f24961778ede9d445ec3d4b9148c839cba4b8798252c8e46adf69e8e49fc0c36d0f44f704f21d4c7b694ed6ea892f2195867fa59ac33fd5c529de933316d7a3e05f6e92c4c9b5e9039dcc6ab69d3d9589ffa45dd3ef53918272fa5809373314e5e9670b273821a27e76192bf9202db703e26f9ab12c9d7efad26f9564cf2d72492abae33bd0093fc7599559baa26f985584d7d03aba96f2655532fc2187a2b050c5d8c31f4b684a1bc7dd518ba04b3a2efc8ac686be28dcd84bb933ad3cc7edf968a5dbd1493e55dccb33523da76a8a47319565aefa5a0b4b661e0ef4bc06b28825f8e817f2001afad087e0506fea104bca622f89598127f2451e26ec56a4a7c15a6381fcb148776c265b16eb20d4b5317eb763546c0271202362c5223e01aace83e4d41d15d8b817f9602f0eb305a3e97d05267a91a2dd763e6ff0bccfc7f9994f9bf01cbc457924c0c54ccc48d585fea6bddbed4764cec6f644e0a45b16fc2c0bf95807fae087e3356e1bf9355785a9eb15b2d770c028f0b51a9deb760127d8f8d4626f1638de88979f4071a513cc99649b5d5bc1523fa0709d159256a44df8629df8fbaca77bb0c99beff93a5e7cfbf032b899f13018e758e16c6c52fba5cdc8515e1af9222cc572cc2bb31f0df24e0db15c1efc1c8fe5da6f62d88ffe41fe7f49c32bee0c371e21d42545d013b3029fe9049414f381bcda224fdbd80d9ecef12b6e84855867b319aff94d0bc63991acdf7c9c0693fe62f594346bd737f53371b85a27fb88fcd9f2075af2109de8fe5e61f496e88626e1ec09ae57fb166f9bfa49ae50731b5a0c3eb2a6a41591bcbd6718933309644bb85fda25eac62e6765dcedb895ccfb152f4c900e596e3218c6a2b5295ea9f15a97e18b3599188a6cd7a04b3df19113dfbfd28c6470d091f2b4bd5f8780c03af2901ff5a11fc714cdf6ac9f46da4c7182e663f949245841e23b68c0d41c476cecb99995acee63fe8e8daf1b0aeb587218e0bdce9c9c063ce169155d1e18b77bb6a576b55747427a646b575d5e8094c8dea68aad193d8a8a56e44dfcfff940c9c4e57d58bd0cdc3ab824b13588027f034a6a7f5257a9a59a6a6a7cf607ada40a6a75d88ebebf7cfbb396b36c5e6d0f4dffd81f689b827f5ed229ec5246c289390f252c27bceeea916154a293e8711de4842f85645c29fc7c01b4bc0e7ac50037f01036f225395956ae02f624d75d308d254378b24d354bf84d5d6e629a8ad2f630cb59095ad2243af6092b79448fe9ffd4745f25731c95b4924df7eb09ae4af61e0ad25e075cad5c05fc7c0db48c0cf51047f03036f2b016f50a106fe2606de4e02febca2e46f6186adbdccb049153dd65145187a07197aeda861cf4ec244bf83d1d45142d3db8a65f02e06be9b047c68a51af87b184b9d12e972c43a530803ced404fe00a3a3b3848e0e8a747c88817791805fac08fe1106de5502feb922f8c71878370978ce2a35f04fb0c2ec2eab4b9524de99c6ee0032f9738c9dc3bc16784e460ef6a9c69f6245d4435244a3148be833ac887aca8ac8d954cc7fb0b44a663ec73a4359586768f7a43a435f60f9ea25cb176d25b295f2f12586df1beb5dcb144f25c5afb014fbc8526c252da9294c212bb867c6fd454d21bfc624e92b938422d0403b5583fd8d2495eceef6adb52f495ff05fbe7d477d04ea417ffd22f4dc482f194c8da5617ad9111aa6d7b24ace62a58f85e77d2b2b1f7a9b13a1078a7945da7bca91b5b776782652a5686ae245f31da600fd650ad09090e80637c5f643ba42cac9946ab0e9f79825cc9558c2470e55b3843f60991a20cb142d29bab9e352de3888b93018b5e71e35a692c91f313906cae4688c922b7c5f2a69ff84f9a806e9faa87ec6867883533038fd4506ceced888e86fc9f22ba67443254a77ca7a35a5fb0d031f26015f7f981af8ef9826eda1d997fe43064c4df39e890053538700ff2903ceb46f872702fc1f2ef15f18152364958a6abc1bcb52966468fcdf589a23f166527dc5e63f18657b6952f62f26fe2899f874af35ef2176fe6d4ad47a3bff611563b4a462f4395cad629088049c1aaf319a0e734b064c733956b3c64530e03c5961505329ba9bee1ec03ac591214b9f1dd9211b261ea1561c35b0cc8d9765ce8d447143ccdc01213cd4531c6fe80ce354b25b13936802d617100bb0656b6d925f085e0b936362acbe40ff942c42af8da53d093399820327302099e5e775b034f796a509773494a79ddcbe8a75655250fddd27057d957a584d9a2ca949bf6f50ab49f531c9a7a440f2063270fafed4448c5b8c35a70d25c0d9f420c8b48ef49cb885f224467ad322f470516ffefb21e3bce9c8382f56ead838af918c37bad3b3b5208dbc39ef391e85996cd79d12fbc934b692c9d97fb622094ef78d35092c65760663b66b959c272b1fc67a63cc46cd94d928baca6b2e19ce904b19fa087bb031ce667400a107b30c2423edbb19f67fd3ecff87936cf0e6489b21a7a59bcb5d9ff349327b3337c124ce9749dc412a718efddf50f6778e2d97d3b9a82aad8a544d3143384be6903f56cd1036c3b23c1beb52c8fdb7f0b4f0aa9d0d95ec36c7b2bb9f24bb1b14b3db02ebd0ced1ecd0b6940177b26ff74f04f80f1cb81546c701b2f9e4e3d4e8688d95fe5c59e96712123587ce69d67ef78dbca309b7d656d184369874f3b0d011a7bad1139d0a59aab398e92a6566da6fd81da7ef4c6ef09c2dd0e8372a12b6c50a67be6c565bb170da61e0074ac0c92635f0f6584558a059113a601561a16645e888d15120a163fa66353a76c3546d914cd5062baada381e3f57ce9f94b15147295342a7ff5d01fead3700ed84d1b45842d30e45adc9c4c00b25e0f38e5703ef8ca96491a64a76c1fae3c59afdf1ae32607abb44327ff0ea557bffdc66ee171faacc1f74c312582a49a062f3699fbcdb6af15c9504ba637a5f22d37bb1819a7c82422d06ae872c653a383e48d783de13435ea68b9c852197ea22ef8e8d4797a7603cda0b2be4324d675b6f8c8f15ba7cf4c19057ea22f7c5900fd645ee872197eb226763c815bac8391872a52e727f4ce956692a5d2e26f26a5d9107c890e9a4ec9a44446e8e030fc4445eab2bf2208ce5759a2c0fc6443e4457e42118f2a1bac84331e4f5bac8c330e4c37491f7c074ee704d9ddb1313f9085d9187633ab74153e74660c0476a028fc4b8384a978bbdb03eebd19a7dd651588760630a3a04a3313e8ed1e5630cc6c7b19a7c8c950167dab7c725021c63f6360f53ba4d9a4a370e03deac093c1e2bbde3754b6f02567a276896de44acf4b66896de248ce4133549de1b033e4913781facf44ed62dbdc958e99da2597a53b0d23b55b3f4a662249fa649f2340cf8744de0e958e99da15b7afb4a90b3e9c93bd641c4e41cd52cbe207e1d19175d8b4c31656e7e3afb83bd2fe6a3a6b01dee1ccf55ec99ab3313298bb1386333b0b2384bb72c66ca9077b36fcf4e44e46d38703ea697e768eae52c0cf85c4de0d958dd3f4fb3eeef8795def9baa53707e362ab2617fb63c01768021f807171a12e177331e48b7491e761645cac49c67c0cf8124de003b1a1d6a59a43ad0598c497694abc1093789ba6c40598c4976b4abc0893f80a4d891763c0576a021762545ca549451126f1d59a12176343c36b5230345c82d171ad261d4b313aaed3a4a3043371d7eb9ab88330a26f4801d1cb30b16fd415bb14137b7b0ac45e8e897d93aed86518f2cdbac82b30426e4901212b31b16fd515fb600cf9365de472ac92dfae59c92b30e03b34812b31e03b35815761c0776902afc680efd6045e8301dfa309bc56064c43a57744f41707adc3c0ef4d01f8213270bad0e23efb87ce127069023df0040ec5a4bf3f05d2afc7ccd30329304f876146e4415d23723886fc902ef2113264762a484412f8242324d6694398ae3c92225d3912d3954753a02b4761d23f9622e98fc6a47f3c05d26fc4c077a600fc18cc2e3ea169178fc5a47e3205521f87d5a2a7746bd1260cf9695de4cd18f233bac8c763a6f0d91498c21330b19fd3157b0be6797f5ed3f37e2226f20bba229f8421bfa88b7cb20cb9a37dfb5222649c83039f82b1fcb226cba7625af74a0ab4ee340978f6eef6ad358f98f4ebcfb6d1c6b237f2c83eb688fdec2b5d675700fe956f7f41b76929635e7ae70bf17e6cdffdab76ae327ccc64d3251c56267ba697765386ec461712e4c8a6d72274254b2a52c4d6b09c8e352aaf6b362a6760f5ef0dddfa772626f29b9a229f8589fc96aec86763c86feb229f8321bfa38b7c2e86fcae2ef2795801bea75980e76322bfaf2bf2560cf9035de40b30323ed424e3424ce48f7445be086b003fd66c002fc61ac04f341bc04b302e3ed5e5e25219326d2d3f4b44e418a1f797616df6e72968b3b761527fa129f5e598d45fa640ea2bb052fc4ab714afc414ef6b4dc5bb0a13f91b5d91afc644fe5653e46b3091bfd315f95a0cf97b5de4eb30b5fb21056a773d06fe630ac06fc038f94997931b31b17f4e81d8db65e0d40bf04b22da17e3a8849bb0e6f057cde6f0660cf8374de05bb012fc5db7046fc590ffd045be0dd38d3f53a01bb763e07fa500fc0e8c93bf7539b91313fb9f14887d17565ffed5ac2f776352ff9702a9efc1c0e9397ebae03bb092b432344bf25e0c39a28b7c1f4648460a08b91f03af9102f007304e6aea72f2202676ad1488fd10566f6a67e8d59b8731a9eba440ea4730f0ba29007f142bc97aba25f918865c5f17f971acb3da2091628cd159dd8931dd30054c3f8181374a01f89318d98d75c97e0a13bb490ac47e1aab904d352be433181fcd74f97816e3a3790af8780e036f9102f0e7314e5aea72f2022676ab1488fd22a623ad3575e42519309d6a689351d55b9f43bdf51247bb3f3dea6347d27b19335b6d35cdd62b9807ad5d22c0313c68af6212b7d794f8356cf8d42111e018c3a7d7311defa8abe36f60c8bbe922bf892177d2457e0b43ced4457e1b43eeac8bfc0e86dc4517f95d4ce9ba6a2add7b98c8dd74457e1f43eeae8bfc0166b27ba4c0647f8881f74c01f847182759ba9c7c8c21efae8bfc094648af1410f229a6d7bd35f5fa338c8f3eba7c7c8e21f7d545fe0263ba5f0a98fe12133b5b57ecafb029949c44ca30c614cad7181ffd53c0c73798d4b99a527f8b113d4097e8ef64c874ade2c04444de86037f8fd5c2419ab5f0070c78b026f08f32e04cfb764822c031d62afe8495de50ddd2fb19e362982617bf605ceca1c9c5af18f09e9ac0bf61240fd725f9778ce4119a24ff81d9a29129b0457f627ceca5cbc75f181fa334f9f81bb345a3356dd13f3260ba786c4c22c031168ffd8b913c5697e4ff3092f33449a6930b522ec6697261c980a9828ed76cfc2218f0044de00c1930bd9d9851757b44f1a74a0235f1046ac812a0157c520a2a784d0c7cef1480d7928153c5de4757b16bcb90e9fb93357d287564c0ddeddb298900c7382ca72e063c5513b81e46f2345d92ebcb90a9076cbaa607ac0126f2beba2237c42ae38c1455c646b204e8cec23313e124c6cec28d65c06cdb774d53dd042bc5599aa5d8142bc5d9baa5d80c13793f4d919b6366638ea6d9688171b1bf2e172d312e0ed0e4a215c6c55c4d2e5a63c0f33481db60c0f33581db62a577a06ee9b5c34a6f8166e9b5c7ccc5424d73d1016ba70a34dba98e584f63510a7a1abb61e08b5300de09032f4c017826065e9402f0ce1878710ac0bb60b566896eade98a55f4a59a15bd1b267289aec8dd31e48374917b60642cd324a327065caa099c8571b15c978bdd25c8d9bded5b6b16a99e3394e6f2156a6ae72595c918b67c3cb0d5652b32e8eab2b6557297880cd87ab25e9855589902abd01b2bfc83750bbf0f2676790ac4ee8b8157a400bc1fd658576a36d6d93260ba5fe3aa4480c7e2c0395829aed62dc5fe3264ea9e5ba3e99ecbc5445eab2bf200cc50aed3349403312e0ed1e46210c6c5a1ba5c0cc65479bda62a0fc1b8384c938ba198c4876b4a3c0ceb291fa1d953de43069c69df6e480438c6ecc69e985a1ca9ab16c331efea519aded51118f0d19ac02331e08d9ac07b612ea86352e4821a853555c7a6a0a91a8d811f9702f03198fe6dd2d5bfb19889deac69a2f3b04a7ebc66251f87019fa0093c1e23798b2ec9133067c6899ace8c8998c827e98a3c09ab8c27a7a832ee8df9834fd1f407ef83497e6a8a249f8c19c0d3340de014cc849c9e02133215033f2305e0d3303d3c53570fa763f6e92c4dfbb42f6646ced634233330e07334816762249fab4b723e669fced3b44fb33091cfd71579b6cca1d1c7beb56690f4393446db6fd123e7d725e1cad89ab02be302e6ca6855255fb153c79c18fb6186e0c21418823958815fa45be0fb63edc5c59aedc501d830e7920cc9218a79ecd6dd7c680ca1c77e1691a9849e40bb86f1bf8cbb97fab1e31627d9bf4fb37f29635a469fc80f61901dd940df86654e757105d3da02c5b36ee762b9bc5496cb63a3b91407a43a756639fbf724569b686e8aed4f9c3a3329fae638bb263987a4ce60b9a0c74bae666ff7e3f92962270b8fb593a2f9a2b85ef65c04fabe9a1c18123d9eb5dce6ba88a1424ea143d0cff76c1ba744f104ec7918d39761fa045374f2448f4c77d85a61dba905b66e94b33277729b4f96b2f2f74beb7e8b3f4f953ecdc772b94d96cb91be5c42ce9d7c8e6725b69ce5d12fa5b784e02fb1ea0afc4a2567076239bb5c96b3bd122abfd1b60e15b23a5fc23457bfe4dc5f54f2b600cbdb15b2bc0df6e56d0a2b9da53c67f46e6db5e5642196932b6539d992667be67e93675f4b591b4d8f841ecfdaebe52c85c4b51c7287e782b625ab582f005a3ddae7499d6d2bc058bf4ac6fae884eac664c6464520acda222c7f57cbf237d9a056d1a707b36468ae9c1e6a094bba841cc2eaa1dc922453aa8bb15c5f23cbf58898b9c6259dc1f2428f96aae47914ad317dba983354b55e245f9a8558beae95e56b7fe59edd4cf68bb76f2743709e4d8fda8172bb3da0a30f9d9e6032e55c84f1719d8c8f7dd2d2669b6ecd8bb13c5f8ff553d47440e8f064fbb7c50c0896b3aa46a8e46c0996b31b6439db03c9d92c563f4b79dfc419fd8a51cb6c5e8b0bab94869931ca522c4737ca7234dea0f515a54adf29b0f35aca5aefd4e5b404cbe976594e87dbb7895b0a6f0e0ad8332777949389ac94cbd96868b1dde2ae4b61ae0ec27275532263026fbab087308b9542b9fd2ead874b62b47e5e8cd4e56c1996b39b65391b1bd77226362ac06d68ac316bb296b214cbe32db23c1619ee5157dad6917ae096f01ef36ca60125d1da989a316232ade8728ca75b653ccdaab691476c86f47928c378b84dc6c318d486d111d222fb25513726b3528fdde2c891525dd22bb01cde2ecbe124c51ceec734ba0c2991eac8ef4a2cbf77c8f23bc3a0665724d1fea68281833106ee4c55bbecd8b6d1a055369fab722c5777c9723541518fc7b1598815bcb75bdd3a5c81e5f56ecc43a15a82e3d91b55b5d16f5f13c755c95f2596bf7b64f9db53a3e758c95ade323b7fc57c9c87e72abfcabb2a795a85e569875a99f9f57334f32750ab126f9462b6a55c8de5efde446604b0dee338e61f2ae063b7aafdf8e47a8fc9f791d760b9bc0f2b459591b193f309bc67e8fe4ae77562f78153d53f5e8be5ef7e59feba91d8be4f7a9c890929d761523e10db83a9520a33932a059335ec102cd70fca72dd17b520f9d1180168098ba35e7bdac35925ed5d27378b712826f74332b987c5b50c93d80c28f5b196da96bddcce1b8d73886f1d526503d663f979181b13c4ae2374cc3f9df5932b243da544664c68ffb23885393c0ccbe123897802e433209398eec5b6e6e99c05391ccbe3a3981f2e91f62a915ca6bbcd3a02cbe963b29c4e4ca834fdf3594e3d14f9aece72dd80e5f671596ee7c42d57b3fe7fd3330347626cec94b131056d33c4ac78717454445bc49512391d191def5532bfe0bfa9e4fb282cdf4f60f10d89e55b1e0f90debc1d8de5ed4959de862af60356b1118e33cb43fd11e22d3acec8633d03b96f12fea6929b8d586e9e92e56690666e9c4805e7a83de7fd5495ca31583e9e4e3e6a20dee8279d76f5582c7fcf24d25e42ed80399cc99e3aa370c75b249b23f0ea1dfe4b6a34f2382ca7cfca723ad097d3b12c078e9fafd2330ec22d41ac5c24ab8f9bb05c3c97c83cb84a845e70dafecd589e9f97e539d797e759402637ea188ec963e56d018aa59283e3b11cbc80c5ae25d66e8d65e3583a4ecaa111726968a54ec072f2a22c277d88778c3e207a24aab84eb6e5a8207eff5daac7aa5b30a95f4ac4bf93a8d4023bb63ec546768f8a55c9df8958fe5e96e56f8862fe6630c415ccfa8d56aa2fc9f8434ec2f2f28a2c2f3971f3e232ea2f2dd7df903a5b753226fdab98ad4a4e7ac73750e46c2cc166a162cd60a8e4e0142c07afc972d0535197c67256abceb824a32ba762b2be9e48cb0019d26d199265fb342c076fc872704094edd4cf5b0aff74f2910ba961e4748c9137139971a83a2794589f3bb9f17bf276e20c2c976f61de1b798f40ac075bc1eeca249a4ce596cd707a75591d5d25b76762b97d5b96dbcebe32f5e788da1047a254e9dc59987cef24e24babaa7355adb3ab7f55a384d3ad7b6763b97d178b994ed46ace8c6b354d46379d83e5eb3d59bebac7d132373ab688d508daef4e4d6ff45c4ccef765728e23898ce1a6f0e8f412fb8edab8c5048f344cd73a97f3b07c7e8079b412d5b3c46c5a7c3495dc9c8fe5e6c344664faada305a6e55db21f7bdc49ea7b6efbd15cbe347c9cc81a9f882d2a593176039fc389138dff8b396fbd956a284bd3dd3ce7d81b4676e663ee8422c679fc872d60bed51e05135657c263955b3181761127f8af9b2d4c64a62ee6e79d42696f09626b1782e1323f58bb13c7f86c540a98cae9ca86c15d95361352ec1f2f4797211e6fa7373d05aa646572fc5f2f84522d10e98f5a7e590680b905a4b7f19969f2fb11538898e10aa2b126f1b96a3afb0d8f644ed5fec1880446c897afc68f2edc0e5180f5fcb78e811b7369aeb075f8149fa0de6b54c546fbc92af645e0c77658109edbb12cbcbb7585ba6569f1cef4cd55fab8e26f38973a2aaf951fd55589ebf93e5791ea95edf15e425d1de98f8468595ab3156be4fa487295254f15db939c3f4203596e51a2c673f243257ac6a57abd343722d96d31f13f12b6373c58e8e0f2603e3e44f665be9572a39b80ecbc14f89c72dd034d5e3169cfc61cf535542d763f9fb596db54bd548a0926a1c9dde80e5ea172c023a76db3d938f7caa6ad55836cb5f1ec316badf4e6371b8ceb83df6de1fc9b5233762b9fe3591da264f3fb9599c644707dbb11cfc866963acd10195afd0fe65adcd7cd5f85f6c7c10df86e0da58dbfecfb2e85e67e3d89b4eecf20ac604ed6364d3b07330d7da2fda32f7f3b4e2ee739afa725b225abbf3a36d30ddeb2d36c2ef3661b522c4f9d3d3a2648b23e2ad621f6fce97a50c7931d0d07eacdc9d7d2de8a8bf5f74942c76c28b970b596fa41fe88fc0dcc5cfd37c64ab7ecbaacd7324b06ca6fb51a677b59cfe414b3597976a243b9be6b17792da145f8a3f696a19721d6a5d855958e765b23b0053b9efcba2e71d4e67c30931ac70dc15ce468d715383b554965a5f0620fa6e71e16040920cae2d5331c72d544e9ce0ee79dd09a95d3392434be12f9354d5b36f6864e624def2523b5041968582a46d035c92fe364912c50d8fee6c1becd2f28f495ae869a10b586d762a1bbe375318687bbb864bdbbf26696bcbaa5c39ebb04f27ce160ba23b871158110a0a3fb65c0aff33496113fb46788e26328b45010ad8588ec69a4f0b8905db5ec7258cd43048580b565517901ce26e7e1066e29ad47789b34c12d71a681a9d47f456d849cc87b0c233931f06fab296bbf4454cd2d74ca277149006dcd08597abd8d3c25090b690b8a465a48b3418d72bc60d62341106d2868f7049ab61dac2799b84f1f6dfce16ec85d1e5f08ea50b0371590d5ce26aa6cbc2d1fdcfd6daff92d935776fd930d0b771a54b5f2d93f4d16df3ab360ce1ee0a9f01fa71b54d92d716e8de380643570616f0cec84c765d6977965731dd0b13850f747129ac6392c2faa0b198e699860b034d1fb77769aa6b92a6ba80267747a9305034bd954b513d93143562964cb81acb98ed9ac6a67d0b592b1a06b23a2c75c9aa6f92ac5a4c9f2a42d5a5a8d1d025a7814972dad837d3a26e21bf0f969afb554cc368af6c3a9f5e0c0381d77570096c6892c03ac05a513169b44b18083aa7a94b5023d39d56419023827f70349bf7c08a490909cb087378894b5f6393f4b504fd2e3f7115ac8a1630675099fdf9ba5050f7f49e2e754d4c772428316389bb203f1cda5509ac57d374592fb10b6d18082a6cee12d4cc2441ed081cf6ac65b95e151dded0250a85ac2a86b122d23f82c4e62649a4e70742f2e8fc13dd719e56c755dced13ee61788b1a2e952d4c52d990db34a16feb785f6d16a90849bfff1460db5a9a1f478af39044cc4c18287a7db84b51ab74796227f1ee84080716deb1300d9b7eafed12d7da24719d40bb39cbc62ce4dd8b5dcb33764a3797ce36a63db3500fe1a6e8a399af1656e170f4e1d68379cfb626c96b0074d1ddf7dad9913d14448191683b9344d1508429cc9a2df31de39467bf5ece520a03610b232e61ed4d12560f544b78665b18489a37d025a98349926ab2a417b117c241cd19c35c6a3a9ab64c427fdcd5448e106120ea79a043bb99248a861178b705a3c1c955dd3d6120ed6fe0d7ef6492b4c604c65e1430b28a42370db215c4f764a6abafef445d7817ff1586acaf5f0a02f23a9bae9cce38328f251d663fc5ce9a2e695dcc0fbefd95330c147d3ecaa5a8abe90a398e050caf6289bbe786bae7c856b0fd4f568682b88f816e7533ad5bc2923936ab322cba05964174374951230f45e10ce2a4ebe304593d4c5744b13862058309b7337a38a8883d4d12d794e073936389d873380c9415028f6b96e98ae92ca3a51e8822367be43a09c3d1c35f0b26707737495673d089704e00f2cf1b85690d5cde2097b65e2669a371866e9f6b1c0b1376e2c4c240d3ce252e4dbd4dd2d486d134ddb6548e77eb60b69c3cfce67f139b04a95dd307eedf4024f945d06aace3cbb5e9009e6ae74aee3b732ca167f936ed03044ef23e35c0f2ebaca44304b2e2f6d2b2125e9493a51cdc9e95e4e2c6ac84dce8599a73fe590a2b56b3943a7059098fe7b39446685949d9932ca529d82c25274e56426b2fb394161c66294fd5c964c697fb645589d6cd8a39bf95258dbfcc92c635652191e5593102f3b39020b2ac388118594905d66625b9ca222b05f3d15971b662c842f71fc84206e459e8fc5156cc99812c857e5f1658f09fe59b8ac98adbd9ce528caecc4a70c49385c49e78ed79acf5825988032d2b46e72e2beeb280ac84271ab29208dbcdf2ac4f4b6c056e56025e7c2f6e62ebdedc1d786087c2dd392787eec0d3b7c6ffefcd7172e8e638fd280907f03eb6d3ebce363d094fcb7b0019c4aece9e48b47e395687bee64bb343953467f08ae61c4e277ad3b2d4eb7afadbed12c950327deece604a3ec7f4a0c54b5bac2de01690a176368cd1d9c8149d6d335c3afb0789ce61a1a4730ca033374874f60f259d7b82ca3e204874e68692ce1240e7c020d1392094746e06740e0a129d034349e75640e7e020d139289474de0be81c12243a078792ceb7009d438344e79050d2f92da073583a4641b403b4eb8c8266582e7d7b98a4af314bda753cfadd4355b68b080179d4e925c8db331d5579095a99a1f874cc33d81c9d0d4cd1d915e8e2f020d139349474b600748e08129d834249e723a0b28f0c129d034349e78d80cebd8244e79050d24940651f15243a078792ce8f80768e0e129dfd43496731a0734c90e81c104a3a4f06748e0d129db9a1a4731da033cf249dad48ec11b9b7a20f324765535354de0746e3e38242e5805052d907cc008d0f0a95b9a1a4f205a095134c52d99253b998871af8cf6a734477ce01cb3547644d53447603444e0c0a91fd4348645740e4a4a01099134222bf05e39ebd4d12d991b8414f89067fd2f7cbd9bbe1f3abcf019da27d4c12db81c4eb6362e75a1bacf83b2d531d24a0af934dd2da9488e98afef6dfab89387b8f3e4bc38485b1b6bc3620708a49029b47095cc05e70809cb0c13491686ce2e27640e2d47454ee1cf67722e1c161b6995300add34cd20a63c75556908499dcc1a0419a5e9de3210867b411aa6d8acafea0f7b9af492a45a4f8e0f4cf981bd3c307811ece48077943d34fde1fa6c87b129037d32479622d0436eef15662a35368c6aaf168d0dce40789cc212124730c20735690c81c1842324700326707894c83de4b63648e0264ee1724320d7a308d91b90720734e90c834187b698ccce180ccfd8344a6414fa631328702320f081299611ce10c0364ce0d1299434348e65840e6bc2091392c8464e60132e79b24d3d921a1841359627f44fd40f4f5f0f92bbb1197b403d3e1fbc12723bc9197e1f39f9f07f46f41f5bad11c28eafc353af7d8d514956b811b6da1492a7b712a4bed974ad9556c6a33ddfe9f4e86399312ce3e0333491ed9878c61fef422fe0cbe37da96aac42ce5cd4d51fe0fa0bcc024e56de31a82aa719906db7663b16f8f0273b02868841a6cdf8d11fa18207471d00835d8601923f46e406861d00835e84f3246e8bd80d0a2a0111ac6f8e1fb01a1c54123d4a02fde18a10f014297048d5083dd2663846e07842e0d1aa106fd4bc608bd09105a1234420dfae58d117a2b20f4a0a0116ad0376f8cd0bb00a1cb4c125a8f11ba94edbae8ecf049c3630d7a998c4576d0b210949556a76b0406bc1a1da79f638aca93c1387db9492a1b312afdf1995460ba73e8da103ae87a022d2c33499d1b214c83ffd31e216cac1a9f0d2cdf0a9304d29d599dbd8347db7f3b3b7cbbfb10efcbc8a4ff878fc24ca0832b4d5228e2838567d35939e1acaf9844f2a4bef7f0aefad90b2ce93bd824ad3d89df615cc0c0dcdd76c7d8ffd3369b2e5a59c1f6958e35d516c6f9f402d004959b24dbdd1e3777178ad46c09e8ab30499f58630e9708c877950e73f4fa4ed028559aa4532cf8eb8f4cfe867de9caf1a0695a958e4e7a62c10861b490030095abd3612173c990f45b4863f459c042ae3149df6ea4ea707116714e7458c74e2b709c19456c695501d3d66206b7dcac666e3345ed4c40eddaeaade4610f52f81b54f275e9ecca97d842cc06834adcc161b02b6fccc1310174e50f3149ab8889cb615a4ae92cb55fa2a74e2c8bbe94a636dd9825bd03748e0e355ddd47b3b3ad56f0137d9ca5a8ceea49dad714e71c39a74785af9f590354f7f5a69d1fa29fb95c0cb9d8c83decda7806a0f0b07450386497a3f05940e1e1262984c74ead24de43a9d244a2b196bb33b08a47a48b44f7fca80ae29cb317ee6d4c9e069ab8211d6e0c6c4ea7ea293f06435d8cd1d91d747b8e0c129d4677bc3646e73440e75141a2d3e836a3c6e81c0f868d4707894ea3fb621aa3b30cd0b93148741addb5d5189d27013a8f09129d46773f3046e71580ce638344a7d1eded8dd1f918a0f3b820d1693426d8189def013a3705894ea3dbdb1ba3f34f40e7e6ea74087b43030d7a2e8dc517ed0e8695c7a7834a4c33bd541a0c5a3546e59d402b4f080a95034249654d3012da12142a734349e553402b4f34496577e28f32f2ef92e92c3e15c75e8bab2cf6c8a02535168af03220faa4b0106d700ed318d15b00d1279b24da3de32f67170a54f898b8f49d529db615c22d08e5ee1d5381269e9a0e2ae176e393c93432814c67c214db1fad4d8767de18955b80569e66924a67061d2e4d59c0f7191ec3e7d11da8f1f6b5c886280ca1856c08c83cdd2499f1776b87e2c3ddda0d363cf4105323b4760463a5334cd22a42bc2aedf69ab6ed2a2dbad15eaa318d3d04507b6650a9353a2c3546ed0dc0189c65babb94c71aa302b68b7ba50d10fe537d9b02face36495f8b38dd2591d3052617a066474c6dc10746f4e7986fdf550e473646a6b1d5bc33804e9e1b2432c3b8e7d13440e6794122338cbbc94c02649e1f2432c3b8d7d15e80ccad4122338cbbc84c05645e102432c3b8c7d16440e6854122338cbbc70c03645e142432c3b8b7513620f3e2209119c65d634602322f09129961dcd3680f40e6a526c9cc245507926a7bc11a6cdf8ded05bb14f8e22f4b87ae623121fe101b8356d45880cd08a0abdb8244a6c1f6dd5c1c3220f372d30e38314bb4eb6ce0d317d0778549fada02faaa6e9142c1dc737cc33c01fc1e20f44a9384360384ee5a2bda4e07145e559df6d13f871ec683eb9a8196fbea209119c683eb5a0332af091299613cb8ae3120f3da209119c683eb9a0032af0b1299613cb8ae3620f3fa209119c683ebea00326f08129961dc46aa2620f3c6209119c683eb6a0132b70789cc301e5cd70690795390c80c63e8eb6e80cc9bd331881cbccb0d22a71397c25b4c52a8768c9d416d34b6c8e572103e786bb07deb062da731df3a01c15bb799a457b6b761e2f19906c7ebc6c20baf0676f47693d48a9d6073c9aeb913ec13c004dc910e2f7b7fdb52ee3aab82de07f4dd69923eb8bd94bb9405aec630be88c5980e9e065af4bbd2d1a227d6c30ca3b7685f40e5dde99af511fa3891b5e2ee8c0f8d609fc657098575ebb32980d07bd2611f73d9c10c69b68fc6e2d7ff00f6718749fac40e1e89c7af8731b2683740e7bd41a2736828e96c0ce8bc2f48740e0a259df7015b797f90e81c184a3ab7013a1f08129d434249e75f80ce07834467388f467c03d0f95090e8ec1f4a3a17003a1f0e129d034249e7b180ce478244676e28e92c07743e6a7a5849c7e6d3edbf29083d55807e5ec05e3f84b9dd4ad81b339868ce82696384169a22742220f4b174b83ce838ddd9f4c4194e1691f1ec238799308fd0ff03543e6e92cac6441c5197f6f1f93653e41d05c8db6992bcf624d1e397bcc7da189c9cf8cf14a97b80799f278248aac1705763a4fe0a667c9e0c22a906ddc5c648fd0590fa5410493518fe6a8cd41f01a94f079154833d5063a4ce06a43e1344520d86c31a23750a20f5d920926a30f8d018a91301a9cf05915483e1b1c6481d0b487dde24a9bd897797d8c56c05a523cc7e8cdaa52c70061e4d2f268c61c2bbc272d65b00e92f98247d00a93a2fef8d5f1a6bffbddcfe8ffedbc908f50b14b3ad27a9b053091dbcae61492cb3757f3529626fe5b3b19998a03658087b9b2a845ce216c28be9f014607e2c6f70441857cc8d03fafc92492add58a7c1e9f715f43545df9160b6f46593f4e9ede319c670c61701b5af0495dafea1a4f653603f5f3549addaf205a367c319b3a05b0199af0589cc30ae39be0090f97a90c80ce39ae31301996f0489cc3046919e0fc87c3348648671cdf1e180ccb782446618d71c1f01c87c3b48648671cd712120f39d209119c635c74580cc7783446618d71c5f08c87c2f48648671cdf11580ccf7d3e1414a6cc16c188f7d3c198cd33f304965e2a71a18ecac1b5b15920702243e3449a358a5a4123b1ac6cdf8d701bdfc28688486f1a888c301a11f078dd0306ecabf1c10fa49d0080de391116580d04f8346681837e72f07847e163442c37874c46a40e8e74123348c9bf42f05847e113442c37884440920f4cba0111ac6cdfa970142bf0a1aa1615c78530a08fddafc8093068badb53fa482aeb65f5e0c16dcb87b7a876fdcde95b8347e6392c64ca2bbd195c186c9d84657034060cdb726e96dc8e9750e6f2e65810c0e76093178e2704d53c411a097df99246e77e20d6bac64b1483339000d53ac64955c251ec4a0a61a8b0619003c4fdf9b24bc136a08120bb531d89d32466e2b40ee0f4126378c9adb1c90fb6390c935d8cd32466e1b40ee4f4126378c2769b706e4fe1c64720dba018d91db0390fb4b90c935e8b436466e5740eeaf4126d7a0bfd518b93d01b9bf9924576f77dc305adc09603cf67b3adc30747789296c69c332df529c3cfbb372966298f798c8212ea17fa45b57e56bfaf2993b86c6ac1433b8e5c4e812f46da6a81d02ccc09f26a9158b72a8ab3aed8b728c55f516a0aaff155c2b6a3006c018b5af026aff36496d2312cbab55618eba7aa6a88b007bf98f49ea4610af5f8b5663baaec90118cbb48f0a4533506a27e45dc2eb085d42848b9bee32e52eeb2d24bbde92de1d40a7ff355930f1b6da0eff91e9bd808eff978e868bee0bbdeb9c4fbb04d0471dec01e8528d257491f94aa6b18ec930aa997f98a2b611e8525926a96d23a13696c51c1aca83a89b023a2341a2d3e8e16cc6e81c04e8cc08129d46275d8cd13914b4e8358244676e28e93c00d0593348741a8db03246e77180ce5a41a2736028e93c17d0593b48740e0a259db7023aeb0489cec1a1a4f30d4067dd20d1392494747e0ee8ac67924e3a449ec11d2774b3b83206e09ce1143eda76232e6df54dd2d695543d026b1c594be83e7bab88f0294db33f2f2434c26f06d3c7424630f545a56142c45840e5ee80e406e9a8ea899feb14c6d5519d40986fc320d139349474360574360a129d834249e703a0b2370e129d034349e73580ce2641a2734828e9fc07d0d93448740e0e259def023a9b05894ea32164c6e85c08e86c1e243ac3b98c7c13a0b34590e8cc0d259d1580ce9626e9ecc6e89c64bf349dd0a9b542fe2915d9bfd06c013f32780cdbdd79197f73bc7d2db2c10d2ef3313624cd0234b7324973bc3d9cbdf6d4e0a2726303cf078153a47550a834ba3edf1895a3c0445c9ba0506974ff6663547e02b4b2ad492a61c02d3d1bafd26662a52d0cb5a8b389734a5e21b3a545e9f02f19b39895c062b63349685322b66acfad8ef09aaea608ac015c20ed4d12d88311388e01d0dc3bba57c860e86183792c062f00adbb31aa5b025ded6092ea2ec41bec584c686c3d85f32e321f60ff4d092f885ef36dd065ace36534a2e935531bc69d06ec6b4793143bfb41c2b345ab4d5f8d3556ed80beee66bedd77e6929c066957a3b22da0b2537576a1209cd103de8ced523a1c54f14c935436075da83cfb011595c682e6b3ad399685badbb43768f53b9bb7930e89ab5937899ed1bc88cdb98b97d2d48532a6916b41e5ee6292ccc680cc34af4b3246de4c405ed7748477277758501857255f082a79b7a0521bce05dfb703aded6eba119accf2ed343d2b5854083dcb8efa47cbd3b1d996b146a81920b1473a1a216c8d91b753343894272edd0c2a7bcf209119c613976e0164660589cc309eb874292073f7209119c61397ae0264f60a1299613c71e9744066ef209119c671f92580cc3e4122338c272e6d0164f60d1299613c71e9344066bf209119c61397ee0164660789cc309eb8b40390996392cc0ea4ea120477e8388d14db83cc02062fa6e3c2bce8e027e2d2da3f1ddef6c40eb232d8453246e599404373ab77e2c281a28e63a3541a9bfe3d144c5c0c4847ec874ac06c180fb33a1ee8e6c0a0111ac6c3ac4e00840e0a1aa1610c9b3d16103a38688486f130abe300a143824668180fb3da04081d1a3442c37898d56640e8b0a0111ac6edd38e0084ee113442c37898d5d180d03d834668180fb3da08081d1e3442c37898d53180d011a6036a2671ef5289fd090d3fa42fbb7b7b1a236fa829f2ba1397bc91e988461a92fe682463711d4f00f2f6aa4e77c734fb938308dd21a4d2acbbe31c5354be02dc1da3d2a187c376a1a8b8d7811e8e36499ed83336d7166fd7a1ef77d0808c313f49b194f9cee9a7ce5e48ceb29655f6878bb940c56c9100ddcc277c615af5812e8e4df706bc2a8184e16b6ec6001b99978ee626b1c9b430c6728c025a3a2e18db44cb4ede3048ed3653d4fe0db4747c3ad6ad79374aab20892e18343e63696c6ee807a0bd13d2b38c95b6f7695fc66a6c9e722d68f1279a24b0bda4fa631df7d1a49c11bace6cc5df691922f52150f12705915483ce0d63a43e0d48dd3b88a41a74121b23753b20759f20926ab0776a8cd4bb00a9938348aac1296163a4be08489d52bd5dfeb007d474016dfed4ea74d6e5b141e8224ea5c1aadec314951b80564e0bd28edc434d06d2983b0612ec98343d48740e0b259d73009dfb0689cefea1a47306a8ec338244676e28e93c0cd0393348740e08259d67033af38344a7d1984e63745e0be89c15243a078592cee7019db38344a7d10530c6e8fc18d0b95f90e81c124a3aeb818ed29c742ccec2576b78e793c2b8d2ed02a09bfb0789cc30ae74bb0990794090c80ce35e1f670232e70689cc30eef5711e20735e90c80ce35e1fc70032e70789cc30eef5713a20f3c0209119c6f890d580cc054122338c7b7dac01642e0c129961dceba3129059102432c3b8d7c72a40e6a2200d288d1e90676c40d9050c281707894ea3c7371aa3733ca0b33048741add85d3189d2341652f0a129d463befc6e85c06e82c0e129d468f203346e70980ce2541a2d3e85e0ac6e8bc10d0b93448741a3dabd5189d0f003a4b8244a7d14d4e8dd1f936a0f3a020d169f4ac566374fe04e85c6692ce669cce41f6ffcb79e2056cf141d84f25d84e5c0a4bab33d0d015dd5976608c4a638b0b4e018186cb4d52d988b80b6046db3fd3172b49980f1a390850576692baae12bb285f9635d606596ea7ba82ddd1b7d314a8ddd714c9db80b55c1106920dbae98c917c2920796518483668698d911c010e9283c340b2c1a91063247f0534b93c0c241b9cbc3346f248a0c9156120d9e030c118c9c301c9956120d960b48931922703925705e5f867a30e6b6303897b80e55d1d142a8d7a578d51d90b68e59aa05069d4ef6f8ccae78056ae35496547e23d97b888ac257455e734fb8342428f33c3a93538643046ec0a40ec3a93c466fa882d059bf9bb5b12c59aed0f63e0c47c40ef2141310146978419d3d44700958706854aa3eb978c513905344ceb8342a5d1a07163547e0db4f2b0ea74617b776334682b8dedc63810f8610f3749656746e524fba5198cb022fba5d5fc73b739aab613de8d39baeb1297e0234c12dcddd7d657b2e1e6ff1f3fec37c0286c48c7d698fdd9e4609ab7c63466533700437064f51ee813f6fe672fa0894799a4b2451c2a454e8dce5e65474c594ed0613ada248df5d9cd0a96f7621b68b4fdfa3a424fd30e5f73d30934371bd331b484bae76cca3a93e4917d580b5e61bfe83c9bce869eeb081dcb8fb6252831ebbd6f6e8adec5a06a1f938edd442bc952fbe70aa2b6e3adc14ebdb13d6fbf059a7b6c3aac26d6a977ada6c1c6c798d5fc06b4e3c799a4b1a17d339d079515106793ab494c3369b50f9fe56c02f46f53700e8734b874d6585ff232a0839b837338a4c14e90b1bdecd68106e7f87458c59ca8652c64c346770fe5348c6e8c55ee6740e53ec1f45a3a4a581e4bb8887d5ac05e3d046c493d83fd4ab7fe3718bbb7c414997b0332b7a423083787fded5c67d83f96306ac31cfeb8195078a2490a1b000a1d16c27c80f31cd0b09c149c63780c362cc61cbf178186e5e47450991363fe31dc11f5ef83ca7c8a492aa92f7932b37e14a08c352f152174d57600849d9a8e066420d9d556711c06283c2d1db119b4fa8e63e3e5554c88c9f6278b59d7661a5913d545eaac5819ea96791f40ece9e9b28b456435716661f21913c2fb9d161d5d608acaa7406b7d467a0e2bcb49ff8c8cb9b56e80be334dd2d781f8670e2969ce413b93ec918ccc393198d9548351ee358d557030ad70563ab655a13a39819139d5febb8845b4b9a7155584ba43be0ae8e8d9c139a82c8cfbcd1d081a9e73d2712ee6c05dc8561e07c83b3738a76784d1e3581354e9f382737a86c1a6c6d8e919478131f6f9e9e800d1a36ed37e769b314dfc1d54eaade9d83b21d1f3d38799acd8c64e4f6f0b2af60541a2736828e9ac0fe8bc3048740e0a259df780ca7e5190e81c184a3a2f05745e1c243a878492ceef009d970489cec1a1a4f34540e7a541a2b37f28e99c0be8bc2c48740e08259d1b019ddb8244a7d1ad778dd1b912d079793a4641d57282b531d7c6fe80be2bd2e5af7440e467a9877948f90720f3caf4e86235b8d9fe30455f07e0d0b82a48bb190e35e9f23556b5b3c054c4d541a2735828e99c09e8bc264874f60f259dfb80ca7e6d90e8347a9e90313a57023aaf0b129d034249e71980ceeb8344e7c050d27915a0f38620d1392894743e09e8bc3148740e0e259def033ab70789ce21a1a4f35f40e74d26e9acc3009ce836fa19450e5f904b2de2d275737076cc0ee3ce57ddc0a4d92d26a9ec29a1d2bb82762ca13b602c67ffa681adab18e4382412d320d9c6e22fc701bdbd353d3b62e4ee423145fb025dbd2d281b36199da03056ed6f070dceed41a1d2e8e484312a6b0027c71d41a1d2e8c484312a9f005a796750a8341a6e608ccafd8056de959e50ff61e96f6a8cd1571f68e2dde95a51ebc4a4d3753c4b58b07f3909f3ba9db34167e79ee0ec5f35d41c95c622d1f706dab8c324952d09dd428476b70bf9473309b664dee03a4763d5ba0ed0c97b83ba5b90d1b6dbd86e412b40e7fcbea0526bb4b36e8cda6b81d6de6f92da2ea0315acc1c6a63198565ac399a4cbc0b9da7b08669a90d97b615e3c61aab3b81f63e908e988ec4964d0d30790e85b1e6ea6ba0af0f0689cc30ae42fb1e90f95090c8347880823132df01643e1c24320d6ebd688cccaf00998f04894c832bd38c91f91620f3d1209169f0703a6364be0dc87c2c48648671f3e45701998f07894c835d796364be09c8dc192432c3e816e9033aed4f04894c83bbfd1a23b32f20f3c960ec916eb01d37b6db6f07e0777fca248d6d89fa422a8395dcd86295fd815e3e1d34420d567463841e00087d2668841a1c541a23742220f4d9a0116a7060698cd06980d0e78246a841879c3142a703429f0f1aa1069d72c6089d05087d2168841a1c641a23744f40e88b4123348c6b7c4702425f0a1aa1063bf6c608dd0b10fa72d00835e8a43346e87840e82bc13e18c9609b6fec60a4221033f2aa497a9b93aa6702d09de2f219adcbd211c3642c5ea41dd0d1d782e3611a1aca69e1bf0199af0789cc304e0bff0bc87c23486486715af84740e69b4122338cd3c27f0132df0a1299619c16fe0e90f97690c80ce3b4f00f80cc7782446618a785bf0264be1b2432c3382dfc3520f3bd209119c669e10818f9bc1f2432c3382d5c0390f941700ee134a897c60693db4025ff301d270489e343e8926aba889a8a4ccfba581b83d830ae61cf0473ee1f995e1e137fd9a073128bc166c8d8492c9300911f078548831a698cc88680c84f4c12d9891199cf733e8d1493c9c43dd18f6e18b980bbe0a89773b1fd6f077abc7d2db2210bcd916bec10078a22c8fd341d2b8daa3a8e13596b64d011626ca5d129a0b5ffcc24b59d25d43a4e624a5e19d99bedfeb132e6c44718e7393380ee7e1e9ce399c2e8b4cb03547e918e6ebee84e39cb6377ad2e5447d0607d999eed0206fb0c401a960f1ab39b04d8cdaf82b441f9b0508628f60423a5af8344a7d131bc313a5b033abf09129d834249e74ed0f07c1b243a078692ce5b019ddf0589ce21a1a4b32ea8ecdf0789cec1a1a4f34ba09d3f0489ce702e3e280374fe18243a8d2eda3246e7b980ce9f8244676e28e95c0fe8fc39dd9ea559f6d5d990771c83a1bf15f14d5157b251bcb30daad17571c60e2ad91f0c307f31492dbd994e9c4da1c337906c0c34f0d72055e861a10cdaee003a43bf05894ea3d148c6e86c08e8fc3d48740e0a259df782cafe4790e81c184a3a2f0374fe19243a878492ce3f019d7f0589cec1a1a4f33540e7df41a2339ccbb1e6013aff09129d46b79f3246e73180ce7f8344676e28e93c18d0f99f493a9b1271d0035d7695f633568dcd475aa0a7498f7ba9b6cda3c31f727004989bb44c52d98178e7c9290fab085d59e99f2df71fda649056633bc6e6025a2326696de9a3b52446e841184f2ae80c3c43194121328c311c97038dac910e9b89c5167935d2e01a366354be029a9f9a26a9ece1d3c945a46a2061e2218706b5d698c7b336a8feb54c529d53a579c288ac50f0c68fb6df2f671b0618b5be7d4dd13f02d05fdb24fde2a093a164017b40132f60fbcaa7a9af6a2c10f105e25258c7248562d648687005d35adabd1acfc92bdac59ab483409356b73a8701106e41289765e7012aeba5b3492be17d04dad55fcc34546e5b2770806936e441f67531eb5718d4dab1a6a8ce0636b5be49aad5b70a1a16ca3d403b02dd6d103442c318e8d00910da30688486710fd0e680d0464123348c7b80b60284360e1aa161dc03b42d20b449d0080de31ea0ed00a14d834668181dd5ff01a74bb3a0111ac63d40338086360f1aa1619cd6ab07086d113442c3b80768534068cb74b84e923b8fd3607b6fccaffa00b0a6ad824aadd1edd48d51fb1871a96d9d0eaf54627be284d1c17722d0d23626a94cfcd419837d5163a7cecc001ea7b6266914cbb787ec52d1263f830addae7addcc0e542923d5a023a4ab292a8f062d7afb6075917243e9fb2c0616b243d0080da3ef730920b463d0080da3efb30010ba5bd0080da3ef731120b453d0080da3ef7331203433688486d1f7590408ed1c3442c3e8fb9c0708ed123442c3e8fb9c0f08ed1a3442c3e8fb3c1010da2d688486d1f7b90010dadd24a18d895823b2eb6cb8964f5cf27a98242f93e81e1e6550378d1d1eb5108ce27b56a743c41b0c667074748e292a9b01d75c96492ae1395ca5cc134f81ca982ea6c94167acbaaf07b672779324b6f190e8eca42c9bb80877c4f207c07af64a87bb7880fddfaed3f8b407d6b1773aa6d6aa363e894cae196c788c513b1950dbc724b5dd88374ab9d47e75095b8e40a9dbd52394f70534f74db706cbc9cd67e680868a1733b8e566dbfb6da6a81d08dafb7ee9b0adfdd9929a34db56634dd37ba0a5cfaece458c106e41288fee59045af91c9354b69654729c4aa39b0b19237330a8d6fd834466180fe21b0ac8cc0d1299613c88af3d20734090c80ce3417cfd009903d3e15712fd4fda792f24d38973b884201126b12b6c9ad113f43b07a5631c8fe9aa9f4ca3fb311aa3b305d0d6c141a2d36878b7313af704740e09129d46b7683346e73050d98706894ea31370c6e89c0be81c16243a8dee78678cce4d80ce3d8244a7d1f191313acf0774ee19243a8d6e0d6c8cce3b009dffd7dd7d8057599d71003f91a2a8080aae8a28a2d2280a64833b8415198949082a2a840c130904c960b9708f6aa5558aab62ddbb6aa9a3b6d655addbba67eb446cada32a8eaa3de77cf772ff49ee85d0a7ff73df9787e721f37ef9f2cbf9beef9cf79cf7bcfb49e2a46ebe4ae37c1538f797c449dd1a98c6f921701ec05f0b526abfeca2f36b564ea4aba4296dd57c3f93003d3044fbecfab6ff1a9727ee0e41e48324710e57c9b90d70164ae2cc53c9f9305cec232571e6aae4bc0d388b247116a8e4ec0617fb28499cf92a395742eb1c2d89334b25673d708e91c499a3927329708e95c4a9332d6621708e4be7b2d9f6173a31658b96927d1f0c318ba550e6a8a4dc1ba6350e9642494d24a451be0dad727c98c55d1b52d6c67b707f9c1022e5c5fde03adf0ee3c79e1dfb167d4b1332006f62883a09c3fcf3bad6b4240dc145b82d0a836d1360843329444194d49d1e5c498c3bc913d7763c9a41623d0f584b422408c697ce44fbd034988e5566f071a3716fa49de1b95d1ae282ef5a6f521fe441f0d43e440aa4c616b90740964981242e80a541360264b91448e24c240db20e202ba4406aac787436404e960249ccffa1411e079095522089c1341ae44d0039450aa4c6a0c512803c540a2431a18a06792b401e260592b8a7210df266803c5c4e59278d79697940393544f68ffb9675e74be631ef9434cc3910c238421226f1f94dc33c16308f948449ec55d230a702e65192303596c2ab01cc699230353e802a0173ba244c8d89d15300b34a12a6c6c4e8d180394312a6c6c4e8b180592d099338fea1613603668d244c8ddb9cb40066ad9c6a2c1a83c09702659d9c3a18c427396d91c16218971f2d6bbbdc029575305e81b6592f0d54631d8c5701b4411aa8c63a18cf03e831d24035d6c1781140674a03d55807e325006d9406aa71c1ffcb003a4b1aa8c63a184f00e86c69a01aeb603c0da04dd24035d6c1780640e74803d55807e359003d969d1430dab4995a7f8ac5b18048837d71957deb5e46c3a36554b82d3ee27873e5146a20b6435aa1862d61b9753393b2bfe95830b9eb3b62139fe957b1604f8136dac284ddd574dcd33d2ae030c6cc8d7d8b3ba04b9f5a7b1c54e364c7348837b586aa90117f1b9dca04d3b9e808394788b6c3d183f0506a0b9123146fb351fb8cd2ae8acda8a401e67c93cb6da5dd59acdde01e3b4fceeeee1a27e4f683bbea7c26e50e70c1c7d301cbfdc1e6d8f6e976dc726db62226a339317035902e905b1583d85a697d808fe1f1b4304cc5a1611d8803244eefcde2eb097c8b42f0b9c2c9c1f97e60f17d034ff3e3d2394a1a655c71a619b1794de2137c108b7221b4c4e343768c5c7e6fa5cff46df578a9079f4456dae07373e8189d10626784345cdeb4aed07df0dc3e9189e7861b1d4739137d67a7debe88b8f1288d6e17a03b494ef1902c95cbbae6c2bd71b1244c8dcbba9a01f36449981a135b6a00f31449981a135b8e06cc5325616a4c6c390c304f9384a931b1e508c03c5d12a6c6c496c9807986244c8d892d8702e699923035cef59400e659923035c6d12b00f3ec50dbea3598ce8b0f021595a72d45980441b67324d55819ce7c96d36620778388d04f25718e50c9390e38cf95c449ed69d2380be1ae799e24ce6c959cb380f36792387354729e0b9ce74be2cc55c97905702e91c449dd7e82c6f93070fe5c1267be4ace3780f3179238a9495734ced5c0794188a506c34d7c0be7686237c82888363ffea549f05d98ce156eed530334eeed3a1d06944bc32c7a49434ba45dc853a025fe524ad90f6af492d612ef817be2322994392a29778271f8455228b355523e05adf26226e5d6f68352fb41abfdb65a7fa8d9f6dbebcd5cffe869300b7d0cb3c17fa4ef3ed91dee9397301977369d175217bb588a5fb7d6e033d30aedc16afc0ae0aad832c11aa3398fa201702f9572b9535717d12ef707e172bf4c0a658e4aca427808fd4a0a65b64aca55d02a2fe7e74c94fb97274f3cd9d08ac26f0ff7cee5618acd157468ad01c63fb49679320c1faf60f26d05cff5621365f154f8d4d399aa9fdd3d01f0d721d2a11209d19556a3c89e748def53c6df8eb4df5c6f5fd4e6fb9aad7ece9cda75a7cd955f00b4574aa5a58ed569b4b7c35df32a26ed00b8ecd79e085de9ff6f3075fe61a4bb43bf025aeed5ec41e7daba4ef1df949aef33742312630fe8815e13a2952263740b28b79da8f1bebbe446f5d1e74a8ddb3361816faf85f60c1a0cb508535f562b9d01bdd26ba5de5fa91d7edafdf503b8015c2795963ac2e7d1c2a3eb7a266da6699f5be91e53f3ecc55feba34fd161dce9b7d9435443706fc3aa66f916dc246e6072efe2b9c7f93b6d997169aab5b1705f8d3f547c479a340d60697d85cda03ddf2867676e8d35dc2e87bbee4d21ba5da9a6958bfcbd762ef7922f6575bbb6804bfee67456700b54ecfbb26e24c84ae8bfde12666e3e3b7c6c8a16dafb022ee75b43ef34d3f56e14f14e49eb445d0b97f86f4224c7b4df17299a1b4dcc96ea1eedef054ff0db42ec898898ebee30e9853d1c606f0fb55d5f749054bb7669be9ff683fbe91d4cce3e26bebdd434ff09f7c3ab7c8b0d4448cb83bb095ae46fe56ccda771b785238172059372e07a5096db9fe90ed2624aec7bf1117d33b7ff59c6eac8f782a7fcef42ecc21d0f95ccf1e190fab5b6598d39c59f03e89d6136e8cb0fdfa1a76dd03710f8ee0a35eb848bc8ba12bcd3db5dba159eef7787e82e7575d3fd112aab6c6c0f9cf748e21cae927333e0fcbd244e6add561ae70ae83edd2b89335725e7e5c0f907499c3a2b147d049c7f94c499af92f371e0bc4f1227756b201a672570fe4912678e4ace9380f37e499cd92a399b80f38110613a5c9be74649e5b11193de91501b103e989e99a368e1588efddf0d2eabd6bcadb0079b696afd5093d83a5f62c5949e8331fc434cda41a67d4c6986e93cf5b63ecbc8f44dd295c2f4f1c3521270a84f7cdaca9015d06aff2c8592fab4a7517e0d948f48a1a43ee969948f02e5a35228a9e3771ae524b857fe8549d92f49a7a9cc1faac9cfbd774c6bd0dc8d5a0421bbc74257cfea0859e49fe5b3c3f44c69ed341f481f0fd1335d1b69b46ea4ca9e5e89bf292c08414b9b5d9a07b44fa4f36eda7e9e53e3e6fdc5f0607a32d410349a9f77079a1fbbc83557d37ada24089f0af140c2e50dc9cbe4052b004543fd0e2ef1a7c36d435d63dc1e238902b9cda15a27ed31f418403e13ea02c7ba9855fe809a9fe44381f0d910c9068eb0764d65f6f897b5afa87b01ee937f0d9b2997fc2e3936f6826077cb2216ed10a07d4e6a122275e44e0bcd55c0c5ffbc545a6aa88e467b35b4da17423c9a5cd063c35aa5bc2f10be18664f9c34ec094acb8bcf03be97987c7da1053626891b692e74f210dc215f0ed306733b8cca35f39503df2b2112b4ba966890ad32d5e01eb8a05f9584a93136f42060be2609536361c7bb00f37549981a0b3bde0d986f48c2d458d8f17ac07c5312a6c6c28e7702e6df24616a4cc2ba1630ff2e09536361c7eb00f32d49981a4bdb3f07986f4bc2d458dafe79c07c871f625bdb7283346d39459bba1808b4efcad89e92d8dfa46d4f391ad61cbd97de0507d1a11a3d2571844edb9ae2745870f07e884cf5f54970213e8a68490479103f5a290d94f838a2811600e807d24089a10f1ae830005d250d94f838a2816601e887d240890f251a683680fe431a2831744c03cd01d07f4a03d5982a9809a01f490325864368a07b02e8bfa48112c3c834d0c100fab13450622899063a04403f91049aadf41e3a00869e9f8658a810650c3985727fa83946f332d862688f9fc9aed1417c20d1d622ed03adf3dfe98c31b55f0e4becce2f6351ee00e1bacf43ee8658170b25d798d459971a732eaf84b6f945883b677e3a9619d2629e9f9904df9772b73727864268abe79643cb5c1d6282236bcd649cdb5c1237930cd04269f9bfcf400bfd4a6e0bd558c5e81168a15f4bda336984cae98e41d00bfd4612e770959cdb02e7b79238f354723e02f7d1ff48e2cc55c97907707e2789b34025e7c670b17f2f89335f25e72a689d3f48e2a4967ba471ce024eb7d84c0c678e4ace65c099218993bae293c6b90838376272c65305711f85327f12ada6d1e8de13693c3c80ba31117b9b44be65e04441da32d9c5d0027fc4c44b36464fbe83825b3a3bcbfed426ff51b48496187bff9a457b30048cbb3369e3158adcc53dca7e53933d6ea9c152256e4b5e77c02a7f808550b0a439c4a54f8b300d87d6bb7188c751aa87d148fbd226e316d056f9c01db5c6068db327b4d84d2471522bc0d038b381b387244eeace1e34ce0288796e2a89939a0747e39c029c9b49e2a4ee6b4ce33c01383797c449dd9097c6b90c387b4ae2a4967ba271de029c5b48e2a416d4a171be0c9cbd247152cb3dd1385702676f4951a5112a3339064040644b499cc35572f601cead2471e6a9e47cc02438fb48e2cc55c9793370f695c459a092f37be0dc5a1267be4aceb781731b499c592a39ab81735b499c392a39cf03ceed2471523750a371b602e7f64cce3d4cfb15f273fca4478d3d01975e10ff3d135b9ce30fc31f5568df9bebf33ca82be89bba91c0f78000f38f99e0f17a06d526f98641edc74cfaa690fb42177f072990c4050d34c82d01b29f1448e2e4310db200eea53b4a81d49865341820fb4b8124660ed3202f04c89da4401273da6990230172672990c4fe260d722378d80c900249dc4b89067905b4c85da4401277a8a141f6821639500a2431d99a06d903207765426e67d635326fdf93d4d805ba0130779384a9b1637e2360eecec48cefa8d0b5118ec6c7ce354039884939c8b48f17cd309db380d7a72e168d9a962f5c0491a29f30a98775a06e4d0999ba845ee705e0810275b4dac219c09f19e20edcf575cafa568be4c26a913d246112239f34cc7cc0dc5312a6c6754c830073b0244ce2238b869909987b49c224c69c68988301736f4998c448280d732fc01c2209933808a061ee0d984325611223a234cc2180394c1226310645c31c0a985992308991511ae630c0cc6662f6379d33ddc7f9bd3dc7d8ff1b3c638dfd7d9bfc815de27690ec771a6ca349c0e630617734519da326fb4d2e8f18b7484d5b8d23dac6a99b006b6e88a561a9c27c7838fa4ef3b46d067687cb3f8fc919dfebd3ed07127c97065aa47453e0cb67f2f5f2bf8dbb5bcef4a7d9ec158ef61b06b817e98b7c6e0d17724188787daaa778fb0b5963b5e1fda1150e6752aeff66fc3af749fc122640464803d558656b3580ee230d546395ad7700745f69a01ad7c8bf0ba0fb4903d55865eb7d00dd5f1aa8c62a5b9f00e801d2403556887903400f9406aab1cad69b007a9034508d55b6de02d04269a01aab6cbd0da02343ecaad862ea8d2b40be3eeb98a84986b4f1fccd405b2495969a5d4ca3bdd72468478598f0e85accb380d92fa5054bde83763a5a1226b14f4ac35c09986324616a0ce3bd069863256112ef9934ccd701739c244c623f9486f92460164bc224f64169984f01e6c1923035ce5fde0f98e3256112c7ef34cc47007382244ce21c120d7315604e9484499c3fa2617e089893424c16772d534ee37601cb80b2844919afa1990a32fe9b521721bab58214c6432073a834bdcb17a243357a4a62579d5630f75458be7088ac28a7ceba8437c1255e260d54e3f2855b00b45c1aa8c6e50b9701688534508dcb179603e86469a01a972f5c0ba095d240352e5fb81e40a74803d5b87c6109801e2a0d54e3f285a5007a9834508dcb172e02d0c3a5816a5cbe7009804e65820e309d079dd12c7bb91965c6fb7ca266fb8dd1e730e3a8d09e4183a12663d3728b8e8281e8114c5eacfadae6d35f5c09c819b131bcdb37999e12b38c8538cf24108f4c6760a4c4bee418fb9edb7a9a1a18a1516e0331a6a3f821e46abf48c6fd7077a285f6250bec7bd51b48bed1206897d342240e62a26baaec4c7a7a2bed5e990b9cd3999cfd927056c41c4a4c9da5adf2072ff73f604e08d4412cd42f00b52a4c366656877ba8e66ccccfa17b3423c412c4cedda3ae2c42240e366977cf03a16b541de2a9deb5d94c8deb3f0ae122af09b1e3c2ffb2509618a5a7b5d1e5005b2b1596389f4483bd1860eba4c2126f0534d8c9007bb45458e2489e063b1660eba5c2aadcaf16601ba4c26aec606501ec31526189f34e34d8f30176a65458e20c290df61c806d940aab31dd6b26c0ce920a4b5c7542833d066067878e0f24df52bdc2075bdc40b7ce1f6e16b7277b15edf105a1eaa6103353180e9c64dfceb7efb9d36e8b455a5b7c5b9d6dc6c4a259b5210283b4c8d67310d99ac3e4ddc27e50e6f76374d37b25f665aeb5c6e7a66870b45d18fbc3257f6c88886a5e6c4aafd14a049bcca3dd319700df5c26df8ea67d798a067b1295c0987a628f383ca54dec55c0ddb2594e3455639a4d15b4d09610d37aa9a69b3b57f0d058c36330b4cc56499c2354724e06ce36499c592a394b61166a9e24ce6c959cc702e77c499c392a399702e702499cb92a396f00ce859238a9496134ce2781739124ce7c959cef00e7719238a9d9f234ce8da1a3743c3f7e94880a255f4296a6aa09b4f8911b07c6794f60f2f63289f09c1bbd37860a81d05ae6f1107a3b31c43e0ea92ef4f663756a1789365aff01ee9a2749c2d4b829466fb8672e9684a9715bc0afa0659e2c0953e3b680df02e6299230356e0bf809609e2a0953e3b6809f02e6699230356e0bf826609e2e0953e3b2f0f701f30c49981ab705bc1d30cf9484a9715bc0973ce626dd3b1c7c4ca78317f940840b45549bf8fa8b66fbf9b1c6a514d67a886afbf104d3e05f35dd724cb5ffd6ef2f70a4fd97ecf31919bded198d36f3ede9b9cfbae3d5f863cfb25f7567d66c860db3df72966b10bd620d22d3cf91165a7397d858666afd4f5f605fe7ceb9c62f818817a86cf524997e67b352fbb956e31649b89fe0d224ebed57dd6fdc6016c2fa93cc8c1edea9d6b4c5041c6066ec5cdb4c946c992cc532d37397c6c23b997e6946fca3f8820cf7bac9fe2c32fd0a8451f6bd3a7f668dc6c533dc59398556ffddee982e2170826f5bee4c5cb9cd127ff6b5f6d8ee3b129191cc8c4d63df1bfd6da2bf6073ec4c522f12c9cce8d9e9ebee6f1a95f4ccccd8dc5f3f4dfeb7adb3168944d3cc8c3ef66bd1ef93f86c42e910bf18a0d5ff8c5e49ce6da2ffebd5db63d7f8069b91b155ac8dbae3445fadb25fabf26f2bd69cf150b7f83623dffe17ad7f1bb266e55bd4a667d97fd147f1cfaffb98ae85aefd6867bb669891fcbed4f87fbbb6d6f51b45b703f7fa3a1fedaaf5472d5ee76fbaeedf2ff575da732d7f95a1d9ee6fb121fffee7b8bf7beccfee9be976fe92986cfff2d1c1dd2533d7beef4e6ac9611b99eeff05be59d7909dff0600 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/b021668771c272d42ba5d5ed5a358b19.asset.meta b/Assets/SerializedUdonPrograms/b021668771c272d42ba5d5ed5a358b19.asset.meta new file mode 100644 index 0000000..e0dd00e --- /dev/null +++ b/Assets/SerializedUdonPrograms/b021668771c272d42ba5d5ed5a358b19.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2db338010893c6c4e897e2822ba6ca5d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/b0c348d7e8db140419f38778a94f3f80.asset b/Assets/SerializedUdonPrograms/b0c348d7e8db140419f38778a94f3f80.asset new file mode 100644 index 0000000..c79424a --- /dev/null +++ b/Assets/SerializedUdonPrograms/b0c348d7e8db140419f38778a94f3f80.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: b0c348d7e8db140419f38778a94f3f80 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec5d079c14b5f7cfecd17befc8d14fda1d475740cad194261c8802c2c1ddc1c971e0ddd114151515147b57ecd81bf686bd61efbdf7de7bff4f32c9ce9bb9bcddcd66b337c3ff871f196676e69b976f5e5e92979724924dec3f561ffbafd96406194bfa9159a490ac2065f6bfc6dad7e5f67fce9d783e9d94dbd725f6df05f66f7d48669c2fe99f9e561bfbef49f65d05a9b4bf5c4516dbd712f6fb4c5264ff7b92fd6d917d479f16dbff17d96f5935ec8f66913c328d4c25adad96712066b38f2af8338be6cbaa63ff3d86acb37f2d6242d144b2d94fadedbf66dabf54b0df96db428bf7e692f92c5bcbeddf16dbdf9493521b731143ac53783261ff20cea517bff6e6d7ddedffebf27f67f07fd7e1ff86efd7e4d73e09bedf177c5717fc9b3274718ceffb39d7480ffb5acb7e7c00b8a7df7ecddfcb76f0224b6360f5e7d75c7e1dc031e726207f6d7e1d1827bfb1300601ac4438abc3af43f8753097775e92e90f7338b2b6023cca654f20cf1090765df03b7d365423efa21cb37ce598e59463e41c5e7e1ff3f7f7e0d7e1fcba27c7b6df695eca9f8de0d79c38728d74be63f20b9db5d3cc58c9eff7e2d751fc3a9acbd68bcb3a1fdcebca22ca740cc7dc9da771a0e4b9789ffebe80df8fe5d73c5f798de3ef2de4f7e313942711fd1332f5e66914807b9bc71a0b63608972efe32b775e06354e7178ac71a72f3f40ffa4b81338dea224f2d1d7978fbe8e2c35b3bcefc59541e04fe438fd38ee62704f71cf50cc5b0dfeddadfc7e12896fdb7a25f0db6407a78ee07a8a934ead16cef35aa2ae095dde278e9ca26cb37d659bcd714b39aec8ff54e7de123c0f0438f4fb421f6e8e0f3787e30a1b313e4139a7f1eb0c7e9dc5aff9245a8f2b7819927df975264fb33ff1da00d1864c77bf6d354791b7586534db57d6393cdddc3898e2fbfdf8b56e82ef8b77e668c8bc3fbfd64b30cd7afc7a80469af51d5da8f3bd4f17a6c4c19cebf05ba712c860e3d45dcfef45dbcacb9b70bb1c19e4d303d196c7d28378b22ce0b2105006b62cf59af0fb85fc5ae095852cf2c954943a9922a24f540ceee975207fbe04dc5359a73be9d47b846372db47445d16324319532c332976be6bd800e84622dfc5d2af254efeeae738d8f5f3f973512f856cfbbb72d7c903df0a3912a90f07712e86f8381ec26510dc2ef3bdb714dcd3eb60373df66ffbdb0642b7fa81e7f4db12704f7f2f4950d6e5a4aace529c6120ed613c6d6eff1b9cc2df2d2355eb9eec5b7a057d4df66f8af736ff6e05a9da8e89f768de0e02f7f4f7d204f3b652229f9d6ec35131be3d9878edcf7eae3ed47e9e3f2be7f2ec41bc754bf47107b9df58a23f59e1dc3716b2f06b44f43dc5bf6df91a89f67415bfae23f276760de081d73fb2d64dbb839077758cb444bd3ec497ef252e4efd365c7661c70e25de3ae37f973e13f67703bf1ecdaf47b9efae12f21dc1af4772d986138f6d268783e7f43a82ffbe0cdcd3f70e73b15b0a1ddde89355569ec7f8f22eb301b1f4ec58e7dd4a91e6710eb78db772de1ef1c9504962ebef6e3c5f238957ff4772dc9f1ddc26a3f8fb9bf8f504fede5ea09cc558e878374fa3441bbb19e0d605ff4e44c6587c9ce4a413eda79fccaf829f7c80cdc7459151ae7cd1bedb89e0377acffb70640bf1b439316539955f1bc6c94f2ff01ebd9ea691ff58bfd5e2d73379de4613efd865b453c64d3f8e817596c3539b6efcfe6ce79b663ff37b3ef66e2a783b17e489a631c6e5ba89a81fe7f1dfc6827c6fe1cff2c033def78f8c739f45c4f8ea7c5ff994fa7edf0a3064bf5f006490fd7e217fcedbace6d3f9f38b7c79d9e293358f78ec85f04fc1bc46f27c69972994e525fcdbf1beb21cef944bf3ed31b02e9597658b07f8fd65beb2dce62bcb0992b2bc9cff361194db9efcd92449f9ee0d7898c07fbb02294bf1fb950057f6fb554006d9ef577bcbb26507fefc1aa42ca1fcb02cafad9a57f60e4c7b450265793dbf5ec7afb2feeb0dc4b5e314776502b837f2eb613170fbf9700f4e00f7267edd1e03f76644de64d213ba2e7c2efb10afaed37b5b6f5b6d8d81750b91ea7a6bc1f9adc4abebb711afae4f265575fd76fe1b1c1b70bb10994aaaeafa34a02793f96f778077a0ae8adfef04b8b2dfef0232c87ebf9b7874bd8d6817ef21725d87f2435ddf5135afec1d987679026579af8f67c1afc8df12706f974f1b219fe81f9d0d7895a5739f83bfe6017e7f3fc7db97e357807b7a9de14b77064ff76d07a7ad182734e0cf79ffa7adf0a73dc0d3fb9bdf3fe8bcd7b683efbd879cfbb54ff3fb477cfc3fead315e04f8ae6e561f01bccdb2ce2ed933cc69fcf0665350b3c836525fa85f1787d9c5f77faf89bc9f12ac13d7def4957fe75a2effe04bf9eeafed654fc26cab70190e329b9ae3059419929f791449e9f8e9367159bb41ff1daa4fd1c3d689f1303eb79fe4e7e8c775ee4d797f8f5058e3f8778c721c2eebecceff7f7fd2efc6adb5dee5b7e0ee410d8f49b5531e411f97f855f5fe5f807f06f57837b3b6f1de638697558c8af42ced77c38afbb721dbac1f74d9f04e431f1db1a9e97b9c46b23e63a79eb9849bcbabb3a8e3ebdc1af6ff2eb5a8e378f78fd81c26f18cb8f152fad18f98a1c48bcbe03e1577b8bdfcfe7bf8bfc2ff4bdbf90bfcf6d636481effd45bef7c5bcca3bfcbec0fb3e7917e0d0fbf7dcbc45c438fc7df08cd731f281cb4f27de378d2cf6a64d3e24def1a018f315f2f7d682ef2007e2f775fcbec897a7627e7f08b8a7d7253e5c6193dff6fd2e7097fae4fd885f3fe5d74fdc3c1efa3af806f0493ef662c6d4e9f7384609ffe650706feb74a7f76360886f854f6019c7580fee6d8c4ceeb3c98c516f23a53efe0e02cfe97539fffd30704fb137c4908fcb1e29f3e5ad8c7fbb23816f797f3db2d297b7951c83b7ff9debc4c0fa8c5f857d1565287496e2954bca55b4c97cfc1d3998cb7038b8b765e87c317fef0b22d7ed15beef8ff07edf45f479bfe4d7af7cb25510af0fec1b7efd16d749f29d4ff64af79da87c5ffbe413fe4821f72a9eee062087784eafab89b74de36d0de13ea5c81adfefc2bec8e6d863d59196fcfa0349dac6921f015622be9f56fcfa93469a3f03ac44d26ccdafbf68a4f92bc04a244de1a3fd4d23cddf01562269fec9af7f393ad06527285f7afd835f791f3e426d37d5a323c1bd2853ae475dc5fcd03ffcfa6f6cecc83a8e7914b8c73063e485fe935d23fc6ab9df0fe4be798b7f63f1b82a1639c6df19c47d1d16efbf5abc6e5ab5010ef79f58a2bd3d84cb7e34b817652f64e7ba6789f9d86684d99a1e5ca6c8a11c63a3f37e8f895e19d9ef75c1bf453973fc6ebccdb3ea3bf77db8efc1e2e3b21ec2a689bed87fb175c3e2be56ab518cfc37e6d72638d7d1fe589cf462ea27e72a8b8f0523eb89a76db49a728e8783df85ada0f787f1f78f01f7365e4fdeafb79af16b733caf528e5a70bc2341d9d1fb0d5e7d60b18854beede0776157e8fd51fcfd63c13dbd1ecd9f1f07d211cfe97523f1d6193156f6eb454da70961b2b442646c9da48c47ca6594ea661b79f945cbeb67f79bae3c7dab2dbf727f4137e19ffa8d3f6fef7ed357d4dd76fc1d31572bca7f93b7fc7bcff3bd2ffcfe87136fbfe070dffb1dbddf458ee0ef6f76f423c2bfb3f85c116a43683d15bf758aa383f0dd4c7eedc2af9ddd77fbf07190d5955fbbe13a6d7527b1eb2f4cb307896f0f7a2ae0f1f9526bf71878bd14f0784cadd5cf793e80f7792cdec7b6784cac95cdcbec18e28d8d10f38c9231a59513470efaac7f9cfc405973411d83ed06d77959bb11b3cd1b00f480e21ccb718f07f7f477493b171357d8f01ec4b5dd22ae0ec6b1f236c582be29551bcff52bb299787d099bf97513f1ceb7d27b3b3f7d0b9dfcf4dd08e4a2d731beef0ac03dbd1ee7ca1ae173c27db7732cd1560ff26246c03cedf052f08cbe3b1860415bc3b1730497bcce454ee5ef9d00eea1dc27f8e43ec1c1e9c7c704d17add2e0ee7b2f2eaeefd2d721a4f6b8be477fafc44f01ebd9ec89f9f04ee6dd9b2857de4b8168f09b1789c89c5633022a7136fdd3b9da7271987446d679c7c46653b99639f0ceefd3a2c74ed249fae9dc4f371a7238328338bcf6f59c3e5f9b146f8f2b52175f9b2467af54de8593c3dc911fdbdeefcf75314f546d807a1fb62fee554700f756109b8a7e9ffedc8dd5fa4cb631dac515e0ea3f80a3ae1afe3ec9e7e7ba0a2cef03c58a3815ec03922f1fb18e2ce11c1e7637d3a077550e8535df06f9b97dc853c2d61ab4f07ef08dc3cf08e4c9e71401e9b975cd18f157678a2f77d59ecad35c1570e33813c89d64d317639459287d1e037908754955dcc764be8f8a4e431a26ddade1a18a2ef9aad91170b60253296e77d524b232edaaa0db01249b33dff6eb2469a35005602695a74ae18f6f378bf2edaa6893896c3c0bd9dc62031df28ca374edcaac5e77b2d3e976bcd70dfb7f8bc94359344ebc67a3e7f69edeba437b89b627a7c1ed29acdaf3cc63c7226f1ce81f0b14aac39907869c5e4777f07736021d027fabb18239d45bc63eab39cfc0e11b681c79b5a62bd97cc7e88fe42ac7ef57c79395b7162e8ad0391efb85f2872b64f7e1eef3084fba42d3ed7622d8c215b8173df73a8731d36d19716ff96adb782699de3a435548c2b16c5c1e1fc44cef5e19cebe00c1bc5dfe3733496881bf5eb86c0ae09bee176de2af6f1858d9bce23def6e13c5c0fad250994aff00dc41837099987f29831ab24399d88a9efcbe498517b72be8ffbf31deef710e358a1d318f7b05e1e1447779727c05b591cdee837dc9710d94abc7db4ad5cf6dfbdef593c06c95a41bc6db6f85dcc9770f9a2362d5e7ef8bc8dc5e72b2c110b7101f1dab40bf4b98b59c6ab89b42f6dad4a1e53f493a37d211107793ab8b7b91e2eda013136127331677099a67bf12217f1dfcf04f7e2bb44da64e11b1a1ce7fd587cad055889a4d9d1c9eb085127b80fdf127ebe8b5d1cf66ffa8d2cf639964c62bef112e2d5e94b78da950ed60811eb26f406f8cfa53acae7102de1bb3bda571e97ba7246c7fe97f2778f74b1a33a0562e9373cc09f6d00bc0a2c112328eccc65404ef1ec7280bfd127c3e5de74235710ef78f00a87975199befcf0ef225712efb8ee4a1fcf57f1dfcf02f736de481eff35f263e7ba17b725d17a7035c8873fcdab39e6d9fc1bee8fdd8bafffd98bcf995adcd65ac27f759c0f6f9ba44cb6a5b04c847d8ba33baccce86f63c03d18d3887c477fbf1cfc4e39e4e33d8bfb8c2ceef3b28e4f6f7ea3f910364acc4925bb065ef81faf21deba7a8d53dea3339df4c708d9b82fcc127ea5ebf877e7f0e77c5c6d097fd4f53e9eaf07dfd1ebb5c4eb8bbb96a7fbb7f73d8bfb282237f2f7cf05f7f4ba9d3f3fcf27df769f9ce77b9f5b60fc2fbe117960dcc03a209e8f01f7705c0ce34ffdfd2cecdbad71d2163e473147b739b69e477d1682d70bc0bdcd6b1e9fdbb538ae2562fc6fe2ef5fc89f733f89753af89d5e6f269ebe655c3d106d633c3db8c1a7073770796b844f0f22226e5c369e4a971e08bbd40de4ebac04cbec1cbd321b7767f8ca2cda071131c476992daf8cf36da265d6c9e1658618af9debcbe76d4839883545b7fbcae176f01dbddee12b873b9cf4268cf2be172d873b7de520caeb2ea41ceef2c979bef7794a6da8effbc82d0adf4bc68691bb816c8ae5184dfbd4e4bef7eb01930596c3adc4ebffbad529b78962bda39887ba8778e7a1eee1bf0ff1e11c03ee85fc22efe7fbcaf43e44e7785e22f7fb74ee7ef01dbd3ee0d3b9071cd927ddea7d2f9ad7077d3af720bf3e84e8dc433e39cff73e0f8ccec9bedfa1a9b30f6be8ac483b499d4db9ce3fecd3837b7dba7aafa337fb88354242e71ff1e9bca8134362e088fc8b7631933f7bcc7dc6fe4dd3fbdde17e7203906fd9bbf4fa2878f6a8f3fd64ee079c3c19a48bbd2bf67b117ded97b8ec17f9f22c9e5fccb1852f8df7e12cde378b3c5e55f7233b89bc3ef334224f787596dd8befe8f549e2adcf4f3ab24fd9e87d2f5a8e4f116f7d7e8a5f9f26f2fafcb44fcef3bdcf53daffe2eb7caca93866baebf820ae2796d89be119b2ebd4f1671c5d99267c917c4c1eaf8f6a5dccaf97f02bf7d544c722f37d3af42ca2e37c4c1c79cea707cf81efe8f5799f8ef3b54bd3977adf8beab8584b742eb8a7d717111d7fd127e7f9dee729d571b17e753a8e996e1d4f76ac1b347d4e788c257c3ebefe7bb48dbaddfdbe4a9f5df4d90ac0bdad8b4bb6f8b0c5772f7b658c883572a2efbf04dcd3b1c6eb4e99cc78dfb92e29f47e178da7107917e3533fb7226fc9ead0ed9adfbfacf73de351a55ebdecc5898e957c36273ac77ab7effbbbc17716e8a76c02f776f9e4bfed7d2f6a73445fff5c706f25303613722a8ccdfebf95ad3f4648d94e88f492b5532f6b7e7fbbe6f7b7e97dbfabe53f5ad7458cd82bfcf7d3c0bdc5c7b675c1bfedfabb7094370d743c2de653e28da71f255e3bc1c70efbd7f0be1786f174d4077d938b197d7633e052f09f07deff5f5b847fdf5953fe9bd5beafd2163e8ce8f815fcf7477cdf3f02beb3f8781aea381f8bcffddcfb5e54c7c558f15c706f2530c614722a8c31ffbfeb96aa6e78e25b63bd8fd96291deffdaa2eae1afb3e6f7ffcff9f78c19c1f8ca12b119577bbf43fb07d7f0df93ec1f1474f3be1786fe816857e03e86ffafed3188f98fc6f883bed3ffeaa662fe7dfe1ceb2ac029b49d7eff22d6bf117be425d9bf29dce97daf3afa37da310cffaba3c9c770fcaf3e7ac7ddb77bbff7c437509fa588271ecfaff1fcb0b16251450c8a885d79d5c58abc0ae453896fbdc17977b9581b702361f57c293f4f62e9421cc312718bdd62a4bd99e3f1fd8f978af50edc7e59bc6e5a7cce323ab67e8df35804eee9efb258ed58f913eb6f448ca12cee32d6f77739effacfd528e1fb9f9788d851110fc17d9c9698437d9778ec73e4dd18f910713bb7c5d6114bf863df04e5ffa623d741621d25e7d1ba03fc4ee5381cdcd3eb1b00e30d8eb1d2f7ed5bfcdb43c1bd789f3e3f08dcd3ebeb00f3758ef9880ff36dfeed05e05ebc0f31f9f7a522ee9dcf8d5bbc4f693dc0f32b5b73789fb7ec89d81bf16cdfefa2ee9f2eff5db471557c16e2fb4b40dee0ef0f7adf8beac2253e5d90c5d6dd01d2146d96e8bf729b633de27eb752c4438b76399e0e417c2acb3b5cb6d5e09ef22efa0f8fa630edc7f855cc6deff0ca12d511c1d7061f5f1a752766fcb058477063f218d6d9002b81350cd6935e1d8cbcc7f35c00eeed7228133a2dfa47cff0ebb35e9cc8a7c46b373f4d80b39d71ca4bc457bccfb197807b2adb5a07b74cd4f1e7f835460cb16ada30f633f22197e310700f39f88078fb7f9ff8deff846376e5f71ffb38ffd8c9d70a51179f2755db48f15e5df06f7afd083cfb88e36c0772c1743f22de3eb6789fb791d1f5007138f2e00a5bf1820f43160b2ae6f26ff1f267897898856a72c4d4f397251cda795db9d3cb89f5922be74ade2658aff87e8b979618cb7ce6d3d7cf9c340fce72f00f166ba0842e3e1c07dfbff6ea738e7f3ab8a7f817134f9d8ef699f9daab72c1ffabc4b3b6223a4ffe05f18edd0683e7f4faa54f6fbe74d28de2bee6c5adb287c3d7c45b3fc43e80df0039a13c62bf41b13fc7a5bee71d80debdeefbf62bb73ca36b48bef2ca6589b1a86837793fc27a33b97cc45c5b13af8c65cff8baebc8b73e7dfad6e1bd82dbbf0a5eee16ef1f9199b1d3b2def1e17fc7f12f03f7f477b0ae469c9362f1b6d0fac08be1d9dbf2488ef3bdfb7d747f486eafacf7dddf8e16639eb7c177f4fe3d901fd0b628db800f9d74fc7bbe570a99c41809ec9523e5ed2307c7bfc7f7aa4c451cbe964cec016e7deadc8b3dc02dd14e883d26f83ea2911fbc3c5862cee74737bdc80fe0197dd7bfbf771cd9a4cf8ee2983ff9f4f02727ffb4eb46e55f2dfa31420f8f8cc383e8cfff0cde136981bd28a376ef57f759e417f08c5e7fe3b26d03f7b66c6b36fa707fe7ef5d08d2a6d73ff8f3cbc1bdb03df4fe4ffefb3c1fdedf40a63f799aa2adf9c297c65f1c83afc15e23d6c3bd057eaf0be414cf0486f816a4cfaef4f915bc0c867bd38c5706d27211fbc1deaffe6de41f2e4f31b8a7d77f7dbaf3afc3d5dae18edc6bc57a72a1a70fc64e5be05adca647fee3f86bc03dfdfd6b8007c61989e6875e607ed83d48d7126d41ac3d9745ff86b75b1911fecd95e09e5e2d37cfd6b7fc5986fb8cfd4eaf3588a79d163a9a5113bc5b13bc4bafb588a7afc9eeeddf0e1deec316dfd5261e7f5306df2bc5e26d43461dfe3bf70b8b3a9a5117c850073ca3d77afc9babc1bd2dc321a31c1d38b40592567dfedd69e01ea6d980ff7e0db8a7b83bbdef6734e4ef5d0bee05c710e73a2f8e5fae8c46208f8d78193c115b5f05afa20fc1ee81bf6edd466f9ee2e1c56cef44fb29f69ee5ed5c4663e2f109b17bfa7ba2be2dde2e597c4fe38c26be7211673880f189f25858f49734f63fb67e75f23240ecb931895f7f56c7b4f85c524653e2b15fecded68df57cffafc3c4fa64b15f27b7db16ef2b64b4f7721fd55dd087cd10fb0bfd0e9e89beff1fee334bd8be3fdd72db28f6b810638a7d63e755e4cbfa97a7d3cc57967cafd88ce64016be3f46460b1f172d1c2e0eafe3c872848861e63638c2ed5bc472e53d265f2e077d9561972272b6f4c9c9f7e8ce007b5d67f0bd5f33dafae46ccbe5dcee953322da941a5e79035f66097061f1f38933c0bedc519d06fb660bce2235c177a01ca2bfd70218b2df45bbb1dcf75cb405ed7c32b703655317fc3b013e62da113156abab8e11e17b57b3bd06e83dd8efd3e2fdae8cdddc72dcbc053ca3ef8bf6a623cfab38d74bb4d39d001ef73164640239c57b9d01279d0126bd7621def6bc8ba3db472ff4ca1efdae2bf1b6e7dcef91d18d78eb483707e7a80780ac804f760fc6be4c6e988feefcf763c03dc5ebe67075f45044be1e5ef9a2bf67fa7e1763755117c17e9f55307b7abf1158d1bc64124f1b1c956d204813c3ee21c78ec78348238a03ca5d3c8bcad7d92bdf91f9de32617b5ca8b667ef738c2ce2995b61f7543ee1cbe06312ebbdd86908bc08ef4b45787f2863778e7f03b8a7d75ec4d377cd10f555e87c6fe21967b17b5bae8d3b7c387d7c38e28c11c15d5fe2994f8d7e27f6f912feee1b1d6e373eefcd4fbc7c4bed06ef4f45c47e567c0c69713b9fd18f78e615d83dfd5d8c2d639c9bc6da4efa4d367fb702dcd36b0ef1d6e31c87b763f8fce7b1223eb829bf36f3e18a339cfd6d1d3847396330c84f5df0bbc86b026d5d742c4f62f31b117d0d91bffe5cbe4a704fdf6be9a671bcd8775df4d7737d9ce43a9c1ccbdbffe384bf56b4516d403ec538bcad4f8e813e39447f5de22b8bb4f6f226fc62194389d78f23e35aa4b7077826ec531cfe33c47ebd3afcb72309e53bd2c14de378b1e705ef13650c0032f1bdbb33c459ed4bc0bd5d269b0abdefc5958fb78391dd2465d6c927fb109fec625e76172b33294f0d7cf28ab3524f07f736ff9b852f54f8bbeabb726cfede8b1511e3f1731465c9246e9da532097fc870e2f587081f56175706ba15127bd699b8755c958b0ebe7447fad2e5e74e678c00ba24fa49e03ceb0cde5fcf18e5e341b461a3c1bba3c1bbf42ad64f15807b9bff2d8ff8b0c5776389b7df3696e741f846f288dc0f330ec890079ed1eb78e2f5c38c77643861a7c3f596ad485a1388b7ef3ec197e644e2f5c34ce4799bee7d3f6312f1fa6126018e21ce753e1c9f5c1960cf62f66f617b62f96138afd17ec268e2e9639de0ab2ff1f0a47ac6e71932c0dec44c97e933b07770065fcf9e21ce4df5eb11587bcffe2ddea5d7693e3d9ae6707472960f5b7c27ce553d15dc53b9f8be0919e25c54bf1e817d8033f605cfe8558c01af06f7b60c273571b8a4a16bd2b4f27d7a94ef4b539c637a0db8af01f0443f189c6b9a311b704eafe21cceede09ea621fae773f8ef8781fb1a5565ced81fa4c1cfce643628968e4df5e9d854af8e9de8cb6f3c3cefb39a16db437a222922056425c966ce0adabb9d4d6690b1a41f99450ac90a5266ff6bac7d5d6effe7dc89e7e2cb3e2433ce37cc4fcd5a1dfb4f4f966c2559677f5ae49ca333d3bea9b01f15d9ef538c49f637956400c965d8cbeddf16db38e5a494949045a42d3b3743a43e96fd5d60bf51c2406fcaa892c45d5592a0c295daff15d99f55da1f52212bece713ec2765f6ffe5f6b3c5f6fd64fb4abf5a48fa93b9f67f5e94d976b2a564957d976fffbd92e12db4c5aefa66bc2ccdb79ffabf9961639631e996db4f04a12bedfb5226e14cf6f76a266911937e92fdacd27e4673b3c4569a15642d4bad6adecbed7fcbd2cce794c9659caff4dc625bd38b62cab37343a5cf66baf8bf12a98e12a1d4d7ba29c3a98635b29997f2f82a25f13f0e1d23431d989338467f4699e579964bb2998f73461506d5f358358772fd76f81e4c06c6cc8b9c195adced590edc123e7cf310abb8d365756b7ab336806433f76c8738598b452cc5cb62a7a7a964a166cd1a3954503ffd968c7e368d36338df43bef95b0f7d40ba0166bfcbc056051f75fbe6dd5a683c6731613be9489e6cfcc385bf022f6a4027ce13ead52923934d9daac30aa36b5f13284154744561ccc339f5f2db5616e1c4b282f903ad15cb80592cdfa4f6d62a82d9616eb5865f0de95a858af3db1b0e5855d6735da71dbb4b2fc53bffcb8a6bc7ceab1f2492655ac84326425542fdd15267e0b11ab7cea47f3e5960ffd23e7b001a2e3f164c018ac2163b07eba759cfeb682a114d8efaa7348dde9bdfd46474e60234409e38b8051585342610ea5b0b1442a52b3ae4f2a2a10825c4b56380daaa7394e4eb9e9d8b6b58f829aa872378dd99aaaaa766d197b6ce265a151f6c42871a63d1cd8c7feadc07ebf887539e9f3e93662819d36c51bcd52704796de2f62334b6724fafa9995b2da9cb1da0d8c797525c318af23613c87ea6b0b891a301be7af0c4df1ca5017ab662d75ab593d0cb9952e727d0cb9b52e72030cb98d2e724359b561f394f3d2526d5ce78af8d718fbdba5766656b311f32afb7b9933267675699b707569c7aa4b2691b988d424c2aa492359d9d187ed6542fa8bae1d5e748d31e00e9ac04d306deba8ab6d4d319177d314b9192672275d919b6322676a8adc0203eeac09dc5256a599b2a4775ce90cc1288e7a4f82ce08744ab89bdc956043c1d8326055b695ac68a80da6cdaa6ecbd65a563c4dd25d3c79cc922d4ab278e8644567090f7811f5408a289e1c5811b591151155f29e98e6f88ba82b5e446db1f2cf4a41f9b7c3c0774f01787b8c965e29a0a5834c7399495f66547367d9cf9c899071ecd712e63d773157b07b9a9af028c4fa82eaef14fb5a684b486589ade9bda37906fe14d6dad08006b392f1302ee74f6dc4cdd297552cf3c26015b1a34ce368cb4b03b8b45adedd30e46c5de44e18728e2e722686dc5f17b9b30c990e7a69e05615172c1d9b4db34b7386fda8848de20aaba6561b4fad0b66a406a4c04875c5c007a600bc9b0c9cf24a83a974ba55dd65d68ff50ee71ab57ede61fc00d66616d86f17807f891944ff107e401ceb365866dd58c7b413f13b1054531e9288f51acaac977e629875ea8169c3304d6de889e9f01e29d0e12ccc8aeca96b4576c7c41e9e02b17bc9c0a9bb6544f46517fc3ffb4f15f00638786f4cf29112c97f9a145192bc0f46f85eba84f7c59047e922f793d92336f63b322df6285e28cd043b5b34b569762ffe20e2c44054ed8a88588a19f6b59849419f2f26450984e0c4b66da365b68d8decc6017353fdb9a0815011660cc7326348cb15eb98c9a451efc8c94d711e4b3d58dc60663d1bb334e32496e67599198b616972b02a3b5eb7caf69721d32a3b41a2ab3954576974673dd60c5549270f4f2757661a98dfe1906a350dcecc0ec52b66d16d0ede54fb5a49d630555d06a6fdf3ed77caed348a3c2d7e72c68046d176f4779289f3475e1df666d5616402d5c164aeb00a3040a649b43f4f433cab8c06a8b36406996e232f60d5f060f698b2e4946e097bb5841cc2fa594ea09aca6861a04c1a3ab340036de3f6b29ae3c08330e0299ac08365c0b48e4fd5ade34364c8d4dad02064dd1ed6504cece9ba620fc32ceabe128bfab7a56651f7c0c06748c07744d4c0f7c4aac2cc44742486560fc780f365758c0e0fc7b268824cfbff15f617d49959c06a7f266b0c5d6b9069d7f512fb5fb4c1ee03de5f61bfe10486aac83902538a59ba4a31122bb7d99272fb59b1dcf6c2c0f793804fcc50031f8595dd1c59d9f5274eab48bb254b79dbe6b586996ce499c9a2b257717f0a2db90a56ae99e450bbd770987dadb4dfce64ed4029fb8dfe9b9634b5b52a653a1a937f7f99fcf580fcd381842a298ec1ecd60112bb6529daadb13270daf1994b908e0f9d7d56eff8e461b4cd97d1465d97e3ecee0bedb9ae62efcf640a5014ed2b17a6a8811c27912b9b4d619491eaec90d1d1028d61aff04461e6b3b4dd084a9d8e175dd6e1ef78893ff28ed702423b5eb9247ec72b15d2631dacf198515d2831aa968a519d2043a675a100ab0b8b92aa0b13653ac766b65656abcee1356a06c3a6354fbfc3bfd8ce63867ff4cfa6de0626a059a992b1b7458d027d7f3167ae821ad3baac50d731a1c7b209504a3eab12f23a51c8ea443a25c7eac524acd52e92b4dab7d6546bb5f796a92c9bd22caf5695cd6308e950db6299dab279d7c109147e2ae5ecc4e6902a98512de446d531dd9d2c6a079d4a56643fa78617fededba22334da5f1acff85ece98a7f92b60e35e4cc99730254f773e3145df076b00964a1a00a55ef564ac0a9548aad0df8a55680a26f641ba624fc5c45e26117b7d2d35b1a761e0a512f0c9b5d5c0a7cbc0a961a6fb30e98c10f7c58069afae4a7793ce4c8a71c262df4871111b2b88f15f217bb2cefebbd47eb6984164b2656b22625745ca1918b72b24dc3651e4762646c14a4d6ef365c0543d0f4e0438c6ccdd2c19704b66d190fe17dd4e46bdff351ba3bd5242fbc58ab4ef8755f355bad57c0e86bc5a17797f0c798d2ef20118f25a5de4b932645a88eb24854883d6550a711e067e88043c5f117c3e56310f95d9a6eef6ed68d04975864fae5fa3c0ee995432cb93692b82d3e6167afc23c52cd2c41934abd4f3033139d7cbe47456c9d37509b44f51c07c6834c569762ba492ea028cfac324d46f51a47e21067eb804fc7345f0028caf23647cb58953ae852c9cdd7ddadf7eaac2e3224c9a0d3269e8ad5b6e2ae92cc6283d5242e9d67a6a94166299384a9689664434e37bd8944d650ebf02bec27f356bc6d5692cc224385a2601b56c93a31d83e949760b8a314a374a287d5991d22598453e46d7222fc5c43e566634ebab895d82897d9caed807c99069af6313417a1d9b4932bd8e65583ac763e99c90543aa518535b74995a8e15f08992021ed540ad80cb30f09324e0eb15c15760e0274bc01f51045f89819f2201efd0500dfc600cfc540978a1227839067e9a04fc1c45f00a0cfc7409f8558ae09598929fa1abe4ab30b1cf9488dda2919ad8ab31b1cfd2157b8d04399b4580a773ed8a3ffa496ded0add9436b1b58174cb31d99a9578e9632ea5b5b272a12df4b93291149af27598369d27d1a68f152bc12118f8f912f0798aaa7a2806be5502be49117c3d067e8104bc496335f0c3b0c2bc50b3300fc7802f2292be601fa69d2b581da3ddf922b6794d19fb5719db40ac884d5c1730dd771d4e62e29aee8694c9b5b79ceb74a9ad50fdeca72a521f81497db14c6a6a32a813d7ed373b43496718228b2bcc243d79afbba7925c1b301db844a203b72a2ad89158a62fd5d481a3647696ad8729316a67b138d27ce6bca7bb9715334d599ee2555697256c93b7319b4ca3aacdc98ad9efa365c54dfbd69713a46f7d85fd7f3d2ab252df7a23a6b3574a7476a0a2dd3a0603bf4a023e4711fc580cfc6a09f84645f0e364e0b45b43b7c2d4ead66cc2c4be5622769f266a626fc6c4be4e57ece365c8f4fdeb13313f315ce427608a7e03a6e874a778f541e416cc7e6ed7b49f2762c0f4846b69f8d4dca84bccf1decc576cff4ec254e866890a9da1a8422763e0b748c09f56043f052bec5bb1c2be2da9c23e15d3d6db35b5f5340cf80e4de0d3312dba53533dcfc080efd2043e53064ccb9e9e84ee0fe2a3002a417c67615a788f440b7f6eaaa68567cbc0a995a4675b6859c97330b1ef9588dda2999ad8e762e0f749c0872a829f87d5ccfbb19af9405235f37c4c1d1f24126b4997872eb0ffa39328747a7a0999ce43574aec9e24fd65251b6dd03ebc8aee6ec5a478482645f3a81439f6dfcb8933bde10498242fc305980c0fcb6468c6651860ffbf98f5a7e9376bedbf9397e0424c82476412d401654197a1d01eaf4a6a1761eafba8447d6b345753df8b31f57d0c53dfc79352df4b30a3b75362f432148ddea518434f48187a4091a1cb30f02725e0ef2b826fc3c09f92956d0b35f0cbb1b27d1a2bdb67922adb2bb0eaf06c2cd3949b62d3742526c573b14d53ff149aa6ab30199e8f659a06a6d0345d8d49f0423cd3b41f4b4f2d64fe1a4c7d5f94a8eff38aea7b2da6be2f61eafb7252ea7b1d46193d6941a7a3773dc6ceab1276e6b55463e7068c9dd730765e4f8a9d1bb14cbc21c9c4ad8a99d88e51ffa626f5376152bf2591ba412b35a96fc6a87f1ba3fe9da4a8bf05cbc4bb924c5ca798895b31f0f724e04f2b82df8681bf2f01ff5e11fc768cfe0f30fa3f4c8afe3b30e5fc88c468d606a4b859bb1393e26399146eb3969bc266ed2e4c864f643288666d500a9bb5bb31093e95495097b8cdda383667b24231eee61e4c813f9328f08ed66a0abc0353e0cf3105fe222905be17cbc497924c0c6ca39689fb30f0af24e0672882df2f03a7c5450ff7d469171ec0a4fe4622758db66a523f2803a7ee916f89a67be4214cecef2462f75114fb618cecef65758bc672c48eaccbb75f5dc962df9630bb53ce024f9d0554856cce723a7136757716df16d84f0bd9b2dca5ec5ed8cd02b288cf28f667338a62e1ee3ae2ecef9bc966f49d537a32d96c52215fcebd8c3da9606f150164f99c65099f7b85b39caa01b28f6005f483a480862b16d0a318f88f12f0858ae08fc9c0a931fa0933463f27658c1ec732f18b8ca1766a99d88981ff2a01cf54047f42064e2beb6f8918a318aeeb2725c0d96cdbc3ea9940aeba2d506a27907f97f1259d40a6e78ac69e40d697159b407e0ad3a53f65b54d51979e9681d326e22fdd26e2190cf96f5de467b1f6e19f44f43f86d17c4ea6ff99f46171b5e8bfce865db135ffdf8435ff3fa6f9bd6268bedeb662f292781e531eba898496f2bc80298f65e929cf8b5835a50782fbabe99dedd5aae94b98d41996a44b445bcbd16ca055c4d64cc856db64b2ee52a66260d4cb981c356472d00d3fd4f05fc1f06b6a96ceab18702d99e0547fe846b8f9ac4fb88c8c674a4cfb654b957b62afc952a67a515ba217d33ba8e9c5eb58b6ea68f2f50626755d89d4851dd5a47e1393ba1e561822ccc2e91a7bc31155b2f51696727d59cad471e01c49971d3dd7263bbaf9cb34bb6e1512d505346f6312349049d05a2ac164f6af4ab652de194024b73eea1d4c96863259da27284bd5834f54647a1753bc4612c5dbb89b9ae2bd8765b8b16675791f036ea209fc0106dc5413f8438ce766129eb729f2fc1106de5c02beb4931af8c718252d3429f944064cad4fcb4480638cab3e9501d346ba95850c695b5bc90c693fc3686f23a17d546735da3fc732d116cb44bba432f1059689f6924c6c50ccc49718780709f8755dd4c0bfc214b3a3cc9cd2c5f83308dc0ea59075d78521cf22bbb306af8cffed8db6cf64774ef3d3876df3407f1126b78245e36732c3ec2e7776fc5374e1ee4ae28d8d17e950bf94d3c41647cd792633e6858a918d5f635cec26e382eed809f754733aac6e03eb2e3d5ec3242c25ee8a59473e2a733c845cfb6dd5150adf600ad349a2307f2b6ae3b75895cac4aa54e7a4aad4775826ba483291a9a8f5df6325dd5556d27441a2dcdb3a97fb69e90a0f3a5071b6e28955a659317fdd9d45e33a1e5a57afbd356005d30ce18df5fe56c9f4aa52528b16310957005fae83bd820f7455f4eb07197bf4e89d6e96fed13b3f62e0dd5300fe930c9cea490f4b7fcbda9f31f09e2900ff45064ecfd2cab2087e40953f811e7802bf6209ec9ea2047ec30ab6570a0af6770cbc770ac0ffc0c0fba400fc4fcccef595d8b99fbba9d9b9bf30f07e12f0ed8ae07f63b4644b6879e6e9a747a8d0f20f26798e44f289ddd524ff1703ef2f016fa008fe9f0c9cba017375dd80c442c41e20117b93a2d8960c9c1d559402eb15c1c00749c02d45f00c8c96c1b2feb1222d3564e054c987a4a0eed7c4c087a600bc1646cb30092dcf2bd2521b2bd03d52a02d7530f03d53005e17a365b884961a3dd468a987818f90792015c1eb63e02325e0958ae00d64e0ec5c205dabd510137b944c0f15c56e84a9ca6889aaa846c437c6241f236b9a15256f82493e36054ade14933c4fe6cbeaa92679330c7c9c047c872278738c96f12968295a60924f9048be3e4b4df29618f84409781d45f05618f82409383dfb4c05bc3506beb7ac015594bc0d06be8f047ca0a2e46d31f0c9323d57046f87a9e29414d4d0f658d33f35054d7f078c9669125a262bd2d251029eddd9beb5e87ea3e9da196716710e231a60a72e0e7955db1d67bac45f95cd4e036d5b251f89a4b6af8d5787c251d2beb749edd0cbaefbf6ff3becff1bf426d866d0332c3a884f2e4d2c1461374c01664a14a0452f3505e88481e74bc04729826762e0b324e0a58ae09db14a373b0595ae0b06be9f147cc35e2ae05d315ae64868394591966e98a1db5f62e8228a86ae3b26f90112c96f5594bc07063e5702febe22784f0c7c9e6ca4d05b0d3c0b039f2f01cf5104df1d2bd00325055a43b1407b61922f90489eaf28796f0c7ca104fc4e45f03e3270eae72e9079fda9ef9386852d63a11b6bd85c931bb3adbef3695f2cf545b2d4e9ea0b11c9e3ccafd16f54d2eb8751b958365c54a4321bd3b0c214f48d7230c98b2492bfad28797f0cbc58d693eea3069e8b812f91800f57041f80812f95809fa1083e50064e372f2bb11288233807071e84497d9044ea97fbaa493d1853c3652950c32198e4a5b2914bb69ae443316bb05c660dec4134b03d856cee6e319bdf2b8cee2547afabd927256cc6cf3d8ecd9d757682bccbed7ea68a251986c95a2693d539617745d47aa9a4b40796d20a594a8dd97b652c8f253607d446d2bef1beec67d5489a3db1e25e2929ee06396ac53d1ccbd8c1b28c75f61477ec82f4c71716101136a092f911987ce558d3e84c7c8b983abdf8b99118f51512eaf314a9df0b03af94804fecaf063e0ae36d958cb75e9e729dcc4aae92388bafca59d9d112a4eb312a5834ba888116a5ee2d69b7b2ab703d1a93783556c5dc03e764954d25ed3158da6b302d734e0f5e90929310c662a9af95a54e07e474f92bdd74279e14f4bd72a21ad79b87c9b34e264f0b204f51b444a6f280a7e417058fc3a4384426457d20050d3677754325cdf158953c5452259fcf55ab9213b00cad9765282b4e9594573d5ad83406681d3f1a75198bc059c9db62152a2662541c26a1628b221593b0eed1e129e81eed2d03a7fa7184a53963b40f26f68614883d1973d31c99021fd0148c93a37439992a43a6ef1f9d48ff3c469cef344c01374a1470de2035059c8e811f2301ff5a117c5f8cec6375c99e81917d9c26d93331e04d9ac0f932601a95b939fa832f2af3782b99a8cc5958819e2029d0a583d50a743666b9b7c4b7dcce81e43d791758ac8577462022a292c658ba519a4eec243c0359ad33b31f26ed8958472a9f75d8fd272f27334e9a8359c893526021f7c7caf8644919ef502ce30330f05324e04d86a881cfc58ae454599138eb94848a880d0c4a41e34eef17b15eaed3d75329a27958464f93790f14333a1f033f5d366052043f10033f4302be5e117c01067ea6aceba708be10ab166749aa85ea44460126f9d912c9df57947c11067e8e043c6ba81af8620cfc5c09f84645f042acce9d878daae2d5b9c57c92981a47f57a578465f67c4966bf57cc6c3106be55027e9d22f8120cfc0209788b616ae04b31f00b25e04315c14b30f08b24e07314c10fc2ba7917eb76f39661625f222b4d45b14b31f04b25e0761746097c39067e99047cb222781906be4d02be52117c05d651bd1ceba85e91544775256696aec47a6762df39d16b4cdea5723096f655b2b41b11d7a5e2f462692c4c6952fdc272ace8ae9614ddf03dd58aae02cbd635b26cd1a273bbe76b48816f15bcb713ac66e32b3149ae9549426f4747fb712ae9acc2fa13d7a5a09bbd1a2babeb2565758a6259ad918153616e4864a0d917075e8b5172630a28598751b25dd60b1aa146c92198e5b909b33c372765790ec5daab5b74dbabf598f7e0564defc16198c8b7e98a7c3856a2b74b4ab4c348b5123d0203bf43d6c42a826fc014fdce1428fa9158f5bc4bb37a1e85497d770aa43e1ae3fb1ed9d84db17a6ec4c07748c0f3150bf3180cfc5e09f8f6bdd4c08fc5c0ef93809fa1087e1c067ebf04bc50117c1306fe8004fce2516ae09b31f00765a34e45f0e331f08764daa2087e0206feb06c3833460d7c0bd6777944d677a1a79a9748665d6928f02a1e13409776273b1b7c22662f1e95d80b4bd15e9c2401cfa6b327698d14875bbd251729fe98a48390dd8d4823c51349ed711baf566de2fce9e7fca98d4487efb4e4d1e189a48345879f8c15fa132968244ec1c09f4c810fee54ac663e25a9990bf3d46ae66958cd7c5a5633dd580ee1c72a620a5bc92785dd397a7712790d53e752300e72ea2e1d6296b0381ab5da7b3a26f133d840d33fc13d85501fdb52b6bba14aca67609de967b1cef4734975a6cfc4b4e9f914d8a7b3306d7a41e6701bafa64d67637dea1775fbd4e7609cbc94024ecec5387959c2c9ce096a9c9c8749fe4a0a6cc3f998e4af4a245fbfb79ae45b31c95f9348aebacef4024cf2d765566daa9ae4176235f50daca6be99544dbd0863e8ad14307431c6d0db1286f2f65563e812cc8abe23b3a2ad89373613ee4eea4c33fb7d5b2a76f5524c967731cfd68c68dba192ce655869bd9782d2da8681bf2f01afa1087e3906fe8104bcb622f81518f88712f09a8ae057624afc914489bb15ab29f15598e27c2c531cda0997c5bac9362c4d5dacdbd518019f4808d8b0488d806bb0a2fb340545772d06fe590ac0afc368f95c424b9da56ab45c8f99ff2f30f3ff6552e6ff062c135f49323150311337627da9af75fb52db31b1bf91392914c5be0903ff5602feb922f8cd5885ff4e56e16979c66eb5dc31083c2e44a57adf8249f43d361a99c48f35a227e6d11f6844f1245b26d556f3568ce81f24446795a8117d1ba67c3fea2adfed3264fafe4f969e3fff0eac247e4e0438d6395a1817bfe87271175684bf4a8a305fb108efc6c07f93806f5704bf0723fb7799dab720fe937f9cd373caf8820fc7897708517505ecc0a4f84326053de16c348b92f4f70266b3bf4bd8a2235519eec568fe5342f38e656a34df2703a7fd98bf640d19f5cefd4ddd6c148afee13e367f82d4bd8624783f969b7f24b9218ab979006b96ffc59ae5ff926a961fc4d4820eafaba805656d2c5bc725cec05812ed16f68b7ab18a99db75396f27723dc74ad12703945b8e8730aaad4855aa7f56a4fa61cc6645229a36eb11cc7e6744f4ecf7a3181f35247cac2c55e3e3310cbca604fc6b45f0c7317dab25d3b7911e63b898fd504a16117a8cd832360411db392f67666a399bffa0a36bc7c3bad61e86382e70a727038f395b445645872fdeedaa5dad55d1d19d981ad5d655a3273035aaa3a9464f62a396ba117d3fff5332703a5d552f42370faf0a2e4d60019ec0d3989ed697e86966999a9e3e83e96903999e7621aeafdf3fefe6acd9149b43d37ff707da27e29ed4b78b781693b0a14c42ca4b09ef39bba75a5428a5f81c46782309e15b15097f1e036f2c019fb3420dfc050cbc894c5556aa81bf8835d54d234853dd2c924c53fd12565b9ba7a0b6be8c31d44256b68a0cbd8249de5222f97ff61f15c95fc5246f25917cfbc16a92bf8681b79680d72957037f1d036f23013f4711fc0d0cbcad04bc41851af89b18783b09f8f38a92bf8519b6f632c32655f458471561e81d64e8b5a3863d3b0913fd0e465347094d6f2b96c1bb18f86e12f0a1956ae0ef612c754aa4cb11eb4c210c385313f8038c8ece123a3a28d2f12106de45027eb122f84718785709f8e78ae01f63e0dd24e039abd4c03fc10ab3bbac2e559278671abb03c8e4cf31760ef35ae0391939d8a71a7f8a15510f49118d522ca2cfb022ea292b22675331ffc1d22a99f91ceb0c65619da1dd93ea0c7d81e5ab972c5fb495c856cac797187e6fac772d533c9514bfc252ec234bb195b4a4a63085ace09e19f7173585fc1a93a4af4c128a4003ed540df6379254b2bbdbb7d6be247dc17ff9f61df511a807fdf58bd07323bd6430359686e9654768985ecb2a398b953e169ef7adac7ce86d4e841e28e61569ef2947d6dedae1994895a2a98917cd779802f49729404342a21bdc14db0fe90a292753aac1a6df6396305762091f3954cd12fe80656a802c53b4a4e8e68e4b79e320e6c260d49e7bd4984a267fc4e4182893a3314aaef07da9a4fd13e6a31aa4eba3fa191be20d4ec1e0f41719383b6323a2bf25cbaf98d20d9528dd29ebd594ee370c7c98047cfd616ae0bf639ab487665ffa0f193035cd7b26024c4d1d02fca70c38d3be1d9e08f07fb8c47f61548c90552aaaf16e2c4b5992a1f17f63698ec49b49f5159bff6094eda549d9bf98f8a364e2d3bdd6bc87d8f9b72951ebedfc87558cd1928ad1e770b58a412212706abcc6683acc2d1930cde558cd1a17c180f36485414da5e86eba7b00eb1447862c7d7664876c9878845a71d4c032375e96393712c50d31730784f0504f71bca1338c53c96e4d4ca209585f402cc096adb5497e21782d4c8e89b1fa02fd53b208bd3696f624cc640a0e9cc08064969fd7c1d2dc5b9626dcd1509e7672fb2ad6954941f5779f14f455ea613569b2a426fdbe41ad26d5c7249f9202c91bc8c0e9fb5313316e31d69c36940067d38320d33ad273e216ca9318e94d8bd0c345bdf9ef878cf3a623e3bc58a963e3bc4632dee84ecfd68234f2e6bce7781466b25d774aec27d3d84a2667ffd98a2438dd37d624b094d9198cd9ae55729eac7c18eb8d311b355366a3e82aafb96438432e65e823ecc1c6389bd101841ecc32908cb4ef66d8ff4db3ff1f4eb2c19b236d869c966e2e777dce27c9eccddc0493385f267107a9c439f67f43d9df39b65c4ee7a2aab42a5235c50ce12c9943fe583543d80ccbf26cac4b21f7dfc2d3c2ab763654b2db1ccbee7e92ec6e50cc6e0bac433b47b343db5206dcc9bedd3f11e03f70e056181d07c8e6938f53a3a33556fa7365a59f4948d41c3aa759fbdd37f28e26dc5a5b4513da60d2cdc342479cea464f742a64a9ce62a6ab949969bf61779cbe33b9c173b640a3dfa848d8162b9cf9b2596dc5c26987811f2801279bd4c0db631561816645e8805584859a15a123464781848ee99bd5e8d80d53b54532551baca86ae378fc5c397f52c6461da54c099dfe7705f8b7de00b41346d362094d3b14b52613032f9480cf3b5e0dbc33a692459a2ad905eb8f176bf6c7bbca80e9ed12c9fcc1ab57edfd739bb95f7ca8327fd00d4b60a924818acda77df26eabc5735512e88ee97d894cefc5066af2090ab518b81eb294e9e0f8205d0f7a4f0c79992e7216865caa8bbc3b361e5d9e82f1682fac90cb349d6dbd313e56e8f2d107435ea98bdc17433e5817b91f865cae8b9c8d2157e822e760c895bac8fd31a55ba5a974b998c8ab75451e2043a693b26b1211b9390e3c101379adaec8833096d769b23c1813f9105d918760c887ea220fc590d7eb220fc3900fd345de03d3b9c335756e4f4ce42374451e8ee9dc064d9d1b81011fa9093c12e3e2285d2ef6c2faac476bf65947611d828d29e8108cc6f83846978f31181fc76af23156069c69df1e9708708cd9db3c4ce936692add380c78b326f078acf48ed72dbd0958e99da0597a13b1d2dba2597a9330924fd424796f0cf8244de07db0d23b59b7f42663a5778a66e94dc14aef54cdd29b8a917c9a26c9d330e0d33581a763a577866ee9ed2b41cea627ef580711937354b3f882f875645c742d32c594b9f9e9ec0ff6be988f9ac276b8733c57b167aece4ca42cc6e28ccdc0cae22cddb2982943decdbe3d3b1191b7e1c0f9985e9ea3a997b330e0733581676375ff3ccdbabf1f567ae7eb96de1c8c8bad9a5cec8f015fa0097c00c6c585ba5cccc5902fd2459e879171b12619f331e04b34810fc4865a976a0eb51660125fa629f1424ce26d9a121760125fae29f1224ce22b34255e8c015fa9095c8851719526154598c4576b4a5c8c0d0daf49c1d0700946c7b59a742cc5e8b84e938e12ccc45daf6be20ec288be2105442fc3c4be5157ec524ceced29107b3926f64dba629761c837eb22afc008b9250584acc4c4be5557ec8331e4db7491cbb14a7ebb6625afc080efd004aec480efd4045e8501dfa509bc1a03be5b13780d067c8f26f05a19300d95de11d15f1cb40e03bf3705e087c8c0e9428bfbec1f3a4bc0a509f4c013381493fefe1448bf1e334f0fa4c03c1d86199107758dc8e118f243bac847c890d9a9201149e0938c9058a70d61baf2488a74e5484c571e4d81ae1c8549ff588aa43f1a93fef11448bf1103df9902f06330bbf884a65d3c1693fac914487d1c568b9ed2ad459b30e4a775913763c8cfe8221f8f99c26753600a4fc0c47e4e57ec2d98e7fd794dcffb8998c82fe88a7c1286fca22ef2c932e48ef6ed4b8990710e0e7c0ac6f2cb9a2c9f8a69dd2b29d0bad324e0d9bbdbb7d63c62d2af3fdb461bcbdec823fbd822f6b3af749d5d01f857befd05dda6a58c79e99d2fc4fbb17df7afdab9caf031934d97705899ec995eda4d19b21b5d4890239b5e8bd0952ca948115bc3723ad6a8bcaed9a89c81d5bf3774ebdf9998c86f6a8a7c1626f25bba229f8d21bfad8b7c0e86fc8e2ef2b918f2bbbac8e76105f89e66019e8f89fcbeaec85b31e40f74912fc0c8f850938c0b31913fd215f922ac01fc58b301bc186b003fd16c002fc1b8f854978b4b65c8b4b5fc2c11916384de5f86b5d99fa7a0cdde8649fd85a6d49763527f9902a9afc04af12bdd52bc1253bcaf3515ef2a4ce46f7445be1a13f95b4d91afc144fe4e57e46b31e4ef7591afc3d4ee8714a8ddf518f88f2900bf01e3e4275d4e6ec4c4fe3905626f9781532fc02f89685f8ca3126ec29ac35f359bc39b31e0df34816fc14af077dd12bc1543fe4317f9364c37fe4c816edc8e81ff9502f03b304efed6e5e44e4cec7f5220f65d587df957b3bedc8d49fd5f0aa4be0703a7e7f8e982efc04ad2cad02cc97b31e4882ef27d1821192920e47e0cbc460ac01fc038a9a9cbc98398d8b55220f64358bda99da1576f1ec6a4ae9302a91fc1c0eba600fc51ac24ebe996e46318727d5de4c7b1ce6a83448a3146677527c674c31430fd0406de2805e04f626437d625fb294cec262910fb69ac4236d5ac90cf607c34d3e5e3598c8fe629e0e3390cbc450ac09fc73869a9cbc90b98d8ad5220f68b988eb4d6d4919764c074aaa14d46556f7d0ef5d64b1cedfef4a88f1d49ef65cc6cb5d5345baf601eb4768900c7f0a0bd8a49dc5e53e2d7b0e153874480630c9f5ec774bca3ae8ebf8121efa68bfc2686dc4917f92d0c395317f96d0cb9b32ef23b1872175de47731a5ebaaa974ef612277d315f97d0cb9bb2ef20798c9ee910293fd2106de3305e01f619c64e972f23186bcbb2ef2271821bd5240c8a7985ef7d6d4ebcf303efae8f2f13986dc5717f90b8ce97e2960fa4b4cec6c5db1bfc2a650721229c31853285f637cf44f011fdf6052e76a4afd2d46f4005da2bf9321d3b58a031311791b0efc3d560b0769d6c21f30e0c19ac03fca8033eddb218900c758abf813567a43754bef678c8b619a5cfc8271b1872617bf62c07b6a02ff86913c5c97e4df3192476892fc07668b46a6c016fd89f1b1972e1f7f617c8cd2e4e36fcc168dd6b445ffc880e9e2b1318900c7583cf62f46f2585d92ffc348ced324994e2e48b918a7c9852503a60a3a5eb3f18b60c01334813364c0f4766246d5ed11c59f2a09d4c413a8214b8056f04929a8e03531f0bd53005e4b064e157b1f5dc5ae2d43a6ef4fd6f4a1d4910177b76fa724021ce3b09cba18f0544de07a18c9d37449ae2f43a61eb0e99a1eb00698c8fbea8adc10ab8c335254191bc912a03b0bcf4c8493183b0b379601b36ddf354d7513ac146769966253ac1467eb9662334ce4fd34456e8e998d399a66a305c6c5feba5cb4c4b83840938b5618177335b9688d01cfd3046e8301cfd7046e8b95de81baa5d70e2bbd059aa5d71e33170b35cd4507ac9d2ad06ca73a623d8d4529e869ec86812f4e0178270cbc3005e0991878510ac03b63e0c52900ef82d59a25bab5a62b56d1976a56f46e98c825ba2277c7900fd245ee8191b14c938c9e1870a9267016c6c5725d2e76972067f7b66fad59a47ace509acb57a8a99d97542663d8f2f1c05697adc8a0abcbda56c95d223260ebc97a615661650aac426facf00fd62dfc3e98d8e52910bb2f065e9102f07e58635da9d95867cb80e97e8dab12011e8b03e760a5b85ab714fbcb90a97b6e8da67b2e171379adaec8033043b94ed3500ec4b83844938b41181787ea72311853e5f59aaa3c04e3e2304d2e8662121fae29f130aca77c84664f790f1970a67dbb2111e018b31b7b626a71a4ae5a0cc7bcab47697a574760c0476b028fc480376a02ef85b9a08e49910b6a14d6541d9b82a66a34067e5c0ac0c760fab74957ffc662267ab3a689cec32af9f19a957c1c067c8226f0788ce42dba244fc09c19276a3a332662229fa42bf224ac329e9ca2cab837e60f3e45d31fbc0f26f9a929927c3266004fd33480533013727a0a4cc8540cfc8c14804fc3f4f04c5d3d9c8ed9a7b334edd3be9819395bd38cccc080cfd1049e89917cae2ec9f9987d3a4fd33ecdc2443e5f57e4d93287461ffbd69a41d2e7d0186dbf458f9c5f97842b636bc2ae8c0b982ba355957cc54e1d7362ec8719820b536008e660057e916e81ef8fb517176bb6170760c39c4b32248728e6b15b77f3a131841efb5944a6127a02ed1ac6ff32ee5eeac78e5b9c64ff3ecdfea58c69197d223f84417664037d1b9639d5c5154c6b0b14cfba9d8be5f252592e8f8de6521c90ead499e5ecdf93586da2b929b63f71eacca4e89be3ec9ae41c923a83e5821e2fb99abddd8fe7a7889d2c3cd64e8ae68be27ad97311e8fb6a726048f478d6729beb22860a39850e413fdfb36d9c12c513b0e7614c5f86e9134cd1c9133d32dd616b856da716d8ba51cecadcc96d3e59cacadf2fadfb2dfe3c55fa341fcbe536592e47fa72093977f2399e95d8729647bf94de1282bfc4aa2bf02b959c1d88e5ec7259cef64aa8fc46db3a54c8ea7c09d35cfd92737f51c9db022c6f57c8f236d897b729ac7496f29cd1bbb5d5969385584eae94e5644b9aed99fb4d9e7d2d656d343d127a3c6baf97b31412d772c81d9e0bda96ac62bd0068f5689f2775b6ad0063fd2a19eba313aa1b93191b1581b06a8bb0fc5d2dcbdf64835a459f1ecc92a1b9727aa8252ce9127208ab87724b924ca92ec6727d8d2cd72362e61a977406cb0b3d5aaa92e751b4c6f4e962ce50d57a917c691662f9ba5696affd957b7633d92fdebe9d0cc179363d6a07caedf6808e3e747a82c9947311c6c775323ef6494b9b6dba352fc6f27c3dd64f51d301a1c393eddf16332058ceaa1aa192b32558ce6e90e56c0f2467b358fd2ce57d1367f42b462db3792d2eac521a66c6284bb11cdd28cbd17883d657942a7da7c0ce6b296bbd5397d3122ca7db65391d6edf266e29bc392860cf9cdc514e26b2522e67a3a1c5768bbb2e85b93a08cbd54d898c09bce9c21ec22c560ae5f6bbb41e2e89d1fa79315297b36558ce6e96e56c6c5ccb99d8a800b7a1b1c6acc95aca522c8fb7c8f25864b8475d695b47ea815bc27bccb3990694446b636ac688c9b4a2cb319e6e95f134abda461eb119d2e7a10ce3e136190f63501b4647488bec9744dd98cc4a3d768b23474a7549afc07278bb2c87931473b81fd3e832a444aa23bf2bb1fcde21cbef0c839a5d9144fb9b0a060ec618b83355edb263db468356d97caecab15cdd25cbd504453d1ec7662156f0de6e75eb700596d7bb310f856a098e676f54d546bf7d4d1c57257f9558feee91e56f4f8d9e63256b79cbecfc15f3711e9eabfc2aefaae4691596a71d6a65e6d7cfd1cc9f40ad4abc518ad996723596bf7b139911c07a8fe3987fa8808fddaaf6e393eb3d26df475e83e5f23eac145546c64ece27f09ea1fb2b9dd789dd074e55ff782d96bffb65f9eb4662fb3ee9712626a45c8749f9406c0fa64a29cc4caa144cd6b043b05c3f28cb755fd482e4476304a0252c8e7aed690f6795b4779ddc2cc6a198dc0fc9e41e16d7324c6233a0d4c75a6a5bf6723b6f34ce21be7548950d588fe5e7616c4c10bb8ed031ff74d64fae90f494129931a1fdcbe214e6f0302c878f24e20990cf804c62ba17db9aa77316e4702c8f8f627eb844daab447299ee36eb082ca78fc9723a31a1d2f4cf6739f550e4bb3acb750396dbc765b99d13b75ccdfaff4dcf0c1c89b1b153c6c614b4cd10b3e2c5d151116d11574ae4746474bc57c9fc82ffa692efa3b07c3f81c53724966f793c407af3763496b72765791baad80f58c54638ce2c0ff54788b7e838238ff50ce4be49f89b4a6e3662b9794a969b419ab97122159ca3f69cf753552ac760f9783af9a88178a39f74dad563b1fc3d93487b09b503e670267bea8cc21d6f916c8ec0ab77f82fa9d1c8e3b09c3e2bcbe9405f4ec7b21c387ebe4acf3808b704b17291ac3e6ec272f15c22f3e02a117ac169fb3763797e5e96e75c5f9e670199dca86338268f95b70528964a0e8ec772f00216bb9658bb35968d63e938298746c8a5a1953a01cbc98bb29cf421de31fa80e891a8e23ad996a382f8fd77a91eab6ec1a47e2911ff4ea2520becd8fa141bd93d2a56257f2762f97b5996bf218af99bc1105730eb375aa9be24e30f3909cbcb2bb2bce4c4cd8bcba8bfb45c7f43ea6cd5c998f4af62b62a39e91ddf4091b3b1049b858a3583a1928353b01cbc26cb414f455d1acb59ad3ae3928cae9c8ac9fa7a222d036448b7654896edd3b01cbc21cbc10151b6533f6f29fcd3c9472ea48691d33146de4c64c6a1ea9c50627deee4c6efc9db8933b05cbe85796fe43d02b11e6c05bb2b936832955b36c3e9d565757495dc9e89e5f66d596e3bfbcad49f236a431c8952a5736761f2bd93882fadaace55b5ceaefe558d124eb7ee9d8de5f65d2c663a51ab3933aed53419dd740e96aff764f9ea1e47cbdce8d822562368bf3b35bdd1733139df97c9398e2432869bc2a3d34bec3b6ae316133cd2305deb5ccec3f2f901e6d14a54cf12b369f1d15472733e969b0f13993da96ac368b9556d87dcf7127b9edabef7562c8f1f253307a6e20b4a974e5e80e5f0e344e27ce3cf5aee675b8912f6f64c3bf705d29eb999f9a00bb19c7d22cb592fb4478147d594f199e454cd625c8449fc29e6cb521b2b89b9bbe5519b58c25b9ac4e2b94c8cd42fc6f2fc191603a532ba72a2b255644f85d5b804cbd3e7c94598ebcfcd416b991a5dbd14cbe31789443b60d69f9643a22d406a2dfd65587ebec456e0243a42a8ae48bc6d588ebec262db13b57fb1630012b125eaf1a3c9b70397633c7c2de3a147dcda68ae1f7c0526e93798d73251bdf14abe927931dc950526b4ef4a2c2fdf626d995a7d72bc33557fad3a9acc27ce89aae647f5576179fe4e96e779a47a7d579097447b63e21b1556aec658f93e911ea64851c577e5e60cd383d458966bb09cfd90c85cb1aa5dad4e0fc9b5584e7f4cc4af8ccd153b3a3e980c8c933f996da55fa9e4e03a2c073f251eb740d3548f5b70f2873d4f55095d8fe5ef67b5d52e5523814aaa71747a0396ab5fb008e8d86df74c3ef2a9aa5563d92c7f790c5be87e3b8dc5e13ae3f6d87b7f24d78edc88e5fad7446a9b3cfde46671921d1d6cc772f01ba68db1460754be42fb97b536f355e37fb1f1417c1b826b636dfb3fcba27b9d8d636f3ab1cb2b1813b48f914dc3cec15c6bbf68cbdccfd38abbcf69eacb6d8968edce8fb6c174afb7d808bfdb84d58a10e74f4f8b922d8e88b78a7dbc395f9632e4c54043fbb17277f6b5a0a3fe7ed151b2d8092f5e2e64bd917ea03f0273173f4ff391adfa2dab36cf91c0b299ee4799ded572fa072dd55c5eaa91ec6c9ac7de496a537c29fea4a965c875a8751566619d97c9ee004ce5be2f8b9e77389d0d27c4b0c27157381b35c64d0dd652596a7d1980e8bbc58583014932b8b64cc51cb750397182bbe77527a476cd480e2d85bf4c5255cfbea191999378cb4bed400559160a92b60d7049fadb244914373cbab36db04bcb3f2669a1a7852e60b5d9a96cf8de4c61a0eded1a2e6dff9aa4ad2dab72e5acc33e9d385b2c88ee1c4660452828fcd87229fccf24854dec1be1399ac82c1605286063391a6b3e2d24166c7b1d973052c320612d58555d407288bbf94198896b52df25ce32495c6ba069741ed15b6127311fc20acf4c7e18e8cb5aeed21731495f3389de51401a7043175eae624f0b4341da42e29296912ed2605caf183788d14418481b3ec225ad86690be76d12c6db7f3b5bb0174697c33b962e0cc465357089ab992e0b47f73f5b6bff4b66d7dcbd65c340dfc6952e7db54cd247b7cdafda3084bb2b7c06e8c7d536495e5ba07be3180c5d1958c03b2333d975a5dd595ec5742f4c143ed0c5a5b08e490aeb83c6629a671a2e0c347ddcdea5a9ae499aea029adc1da5c240d1f4562e45f54c52d4885932e16a2c63b66b1a9bf62d64ad6818c8eab0d425abbe49b26a317daa085597a24643979c0626c96963df4c8bba85fc3e586aee57310da3bdb2e97c7a310c045ed7c125b0a14902eb006b45c5a4d12e6120e89ca62e418d4c775a05418e08fec1d16cde032b2625242c23cce1252e7d8d4dd2d712f4bbfcc455b02a5ac09c4165f6e7eb4241ddd37bbad43531dd91a0c48c25ee82fc70685725b05e4dd365bdc42eb46120a8b0b94b50339304b52370d8b396e57a55747843972814b2aa18c68a48ff08129b9b24919e1f08c9a3f34f74c7795a1d5771b74fb887e12d6ab854b6304965436ed384beade37db559a42224fdfe53806d6b697e1c29ce4312313361a0e8f5e12e45add2e5899dc4bb13221c5878c7c2346cfabdb64b5c6b93c47502ede62c1bb390772f762dcfd829dd5c3adb98f6cc423d849ba28f66be5a5885c3d1875b0fe63ddb9a24af01d04577df6b6747f650100546a2ed4c12454311a6306bb6cc778c539efd7a394b290c842d8cb884b53749583d502de1996d612069de4097a40e2649aac9925ec45e080735670c73a9e968da3209fd71571339428481a8e7810eed6692281a46e0dd168c06275775f78481b4bf815fbf9349d21a13187b51c0c82a0add34c85610df9399aebebe1375e15dfc5718b2be7e2908c8eb6cba723ae3c83c967498fd143b6bbaa475313ff8f657ce3050f4f92897a2aea62be4381630bc8a25ee9e1bea9e235bc1f63f59190ae23e06bad5cdb46e094be6d8accab0e8165806d1dd24458d3c1485338893ae8f1364f5305d11c5e288150c26dccee8e1a022f634495c5382cf4d8e2562cfe1305056083cae59a62ba6b38c967a208ad8ec91eb240c470f7f2d98c0dddd2459cd4127c23901c83f6f14a6357079835cda7a99a48dc619ba7dae712c4cd889130b034d3b97b834f53649531b46d374db5239dead83d972f2f09bff4d6c12a4764d1fb87f0391e41741abb18e2fd7a60378aa9d2bb9efccb1849ee5dbb40f1038c9fbd400cbafb3920e11c88adb4bcb4a78514e9672707b56928b1bb31272a36769cef96729ac58cd52eac065253c9ecf521aa16525654fb294a660b3949c385909adbdcc525a7098a53c552793195fee9355255a372be6fc569634fe324b1ad79485449667c508cccf4282c8b2e20462642515589b95e42a8bac14cc4767c5d98a210bdd7f200b199067a1f34759316706b214fa7d5960c17f966f2a262b6e673b4b31ba322bc1114f16127be2b5e7b1d60b66210eb4ac189dbbacb8cb02b2129e68c84a226c37cbb33e2db115b8590978f1bdb889ad7b7377e0811d0a77e79c1cba034fdf1affbf37c7c9a19be3f4a3241cc0fbd84eaf3bdbf4243c2def016410bb3a7b22d1fae5581dfa9a2fcd0e55d29cc12b9a73389de84dcb52afebe96fb74b2443c9f4b93b8329f91cd383162f6db1b6805b4086dad9304667235374b6cd70e9ec1f243a878592ce3180cedc20d1d93f9474ee092afb8020d1991b4a3a4b009d038344e78050d2b919d0392848740e0c259d5b019d838344e7a050d2792fa0734890e81c1c4a3adf02740e0d129d434249e7b780ce61e91805d10ed0ae330a9a61b9f4ed6192bec62c69d7f1e8770f55d92e2204e451a797206fcf7454e525686586e2d331cf6073743630456757a08bc38344e7d050d2d902d0392248740e0a259d8f80ca3e3248740e0c259d37023af70a129d4342492701957d5490e81c1c4a3a3f02da393a4874f60f259dc580ce3141a2734028e93c19d039364874e68692ce7580ce3c9374b622b147e4de8a3ec81c954d4d51791f188d8f0b0a95034249651f3003343e2854e68692ca1780564e3049654b4ee5621e6ae03fabcd11dd39072cd71c91354d11d90d1039312844f60f21915d0191938242644e0889fc168c7bf636496447e2063d251afc49df2f67ef86cfaf3e07748af631496c0712af8f899d6b6db0e2efb44c759080be4e36496b5322a62bfadb7faf26e2ec3dfa2c0d1316c6daf2da80c02926096c1e2570017bc10172c206d344a2b1898bdb018953d351b973d8df89840787d9664e01b44e33492b8c1d575941126672078306697a758e87209cd146a8b6292afb83dee7be26a91491e283d33f636e4c0f1f047a38231de40d4d3f797f9822ef4940de4c93e489b510d8b8c75b898d4ea119abc6a34173931f2432878490cc3180cc594122736008c91c01c89c1d24320d7a2f8d91390a90b95f90c834e8c13446e61e80cc394122d360eca53132870332f70f1299063d99c6c81c0ac83c204864867184330c90393748640e0d2199630199f38244e6b010929907c89c6f924c678784124e6489fd11f503d1d7c3e7afec465cd20e4c87ef079f8cf0465e86cf7f7e1ed0bf05d5eb4673a0a8f3d7e8dc63575354ae056eb48526a9ecc5a92cb55f2a6557b1a9cd74fb7f3a19e64c4a38fb0ccc2479641f3286f9d38bf833f8de685baa12b394373745f93f80f2029394b78d6b08aac6651a6cdb8dc5be3d0accc1a2a0116ab07d3746e86380d0c54123d46083658cd0bb01a1854123d4a03fc918a1f702428b82466818e387ef078416078d5083be7863843e04085d1234420d769b8c11ba1d10ba3468841af42f1923f426406849d00835e8973746e8ad80d0838246a841dfbc3142ef02842e3349683d46e852b6eba2b3c3270d8f35e8653216d941cb4250565a9dae1118f06a749c7e8e292a4f06e3f4e526a96cc4a8f4c7675281e9cea16b43e8a0eb09b4b0cc24756e84300dfe4f7b84b0b16a7c36b07c2b4c1248776675f60e1e6dffedecf0edee43bc2f2393fe1f3e0a33810eae3449a1880f169e4d67e584b3be6212c993fadec3bbea672fb0a4ef6093b4f6247e877101037377db1d63ff4fdb6cba686505db573ad6545b18e7d30b4013546e926c777bdcdc5d2852b325a0afc2247d628d395c2220df553accd1eb3b41a35469924eb1e0af3f32f91bf6a52bc783a669553a3ae989052384d1420e0054ae4e8785cc2543d26f218dd167010bb9c6247dbb91aac3c559c439d1611d3badc0716614b1a555054c5b8b19dc72b39ab9cd14b53301b56babb792873d48e16f50c9d7a5b32b5f620b311b0c2a710787c1aebc3107c704d0953fc424ad22262e876929a5b3d47e899e3ab12cfa529ada746396f40ed0393ad474751fcdceb65ac14ff47196a23aab27695f539c73e49c1e15be7e660d50ddd79b767e887ee67231e46223f7b06be31980c2c3d241e1905d8ec2670185879ba4101e3bb592780fa54a1389c65aeecec02a1e912e12ddf3a32a8873ce5eb8b731791a68e28674b831b0399daaa7fc180c7531466777d0ed393248741addf1da189dd3009d4705894ea3db8c1aa3733c18361e1d243a8dee8b698cce3240e7c620d16974d75663749e04e83c2648741addfdc0189d57003a8f0d129d46b7b73746e76380cee38244a7d198606374be07e8dc14243a8d6e6f6f8cce3f019d9babd321ec0d0d34e8b934165fb43b18561e9f0e2a31cdf452693068d518957702ad3c2128540e08259535c148684b50a8cc0d25954f01ad3cd12495dd893fcac8bf4ba6b3f8541c7b2daeb2d8238396d45828c2cb80e893c242b4c1394c63446f01449f6c9268f78cbf9c5d2850e163e2d2774a75da5608b72094bb774c059a786a3aa884db8d4f26d3c804329d09536c7fb4361d9e7963546e015a799a492a9d1974b8346501df67780c9f4777a0c6dbd7221ba2308416b22120f3749364c6dfad1d8a0f776b37d8f0d0434c8dd0da118c95ce3049ab08f1aab4db6bdab6abb4e8467ba9c634f61040ed9941a5d6e8b0d418b53700637096e9ee521e6b8c0ad82eee953640f84ff56d0ae83bdb247d2de27497444e17985c809a1d31b5051f18d19f63be7d57391cd91899c656f3ce003a796e90c80ce39e47d30099e70589cc30ee26330990797e90c80ce35e477b0132b70689cc30ee22331590794190c80ce31e47930199170689cc30ee1e330c90795190c80ce3de46d980cc8b83446618778d1909c8bc24486486714fa33d0099979a243393541d48aaed056bb07d37b617ec52e08bbf2c1dba8ac584f8436c0c5a516301362380ae6e0b129906db777371c880cccb4d3be0c42cd1aeb3814f5f40df1526e96b0be8abba450a0573cff10df304f07b80d02b4d12da0c10ba6bad683b1d50785575da47ff1c7a180fae6b065aeeab834466180fae6b0dc8bc26486486f1e0bac680cc6b834466180fae6b02c8bc2e486486f1e0bada80cceb834466180faeab03c8bc21486486711ba99a80cc1b834466180faeab05c8dc1e2432c378705d1b40e64d4122338ca1afbb01326f4ec72072f02e37889c4e5c0a6f3149a1da317606b5d1d82297cb41f8e0adc1f6ad1bb49cc67ceb04046fdd66925ed9de8689c7671a1caf1b0b2fbc1ad8d1db4d522b7682cd25bbe64eb04f001370473abcecfd6d4bb9ebac0a7a1fd077a749fae0f652ee5216b81ac3f82216633a781a68d1ef4a478b9e580f338cdea27d019577a76bd647e8e344d68abb333e34827d1a5f2514d6adcfa60042ef49877dcc650733a4d93e1a8b5fff03d8c71d26e9133b78241ebf1ec6c8a2dd009df70689cea1a1a4b331a0f3be20d139289474de076ce5fd41a2736028e9dc06e87c2048740e09259d7f013a1f0c129de13c1af10d40e74341a2b37f28e95c00e87c3848740e08259dc7023a1f09129db9a1a4b31cd0f9a8e961251d9b4fb7ffa620f45401fa79017bfd10e6762b616fcc60a2390ba68d115a688ad08980d0c7d2e1f2a0e37467d31367385944c6b38f1c66c23c42ff0f50f9b8492a1b1371445ddac7e7db4c917714206fa749f2da93448f5ff21e6b637072e23f53a4ee01e67d9e0822a906c35d8d91fa2b98f1793288a41a74171b23f51740ea534124d560f8ab31527f04a43e1d44520df6408d913a1b90fa4c104935180e6b8cd42980d4678348aac1e04363a44e04a43e1744520d86c71a23752c20f57993a4f626de5d6217b315948e30fb316a97b2c0197834bd98308609ef0acb596f01a4bf6092f401a4eabcbc377e69acfdf772fb3ffa6f2723d42f50ccb69ea4c24e2574f0ba8625b1ccd6fdd5a488bd95cfc6666282da6021ec6daa1072895b082fa6c35380f9b1bcc111615c31370ee8f34b26a974639d06a7df57d0d7147d4782d9d2974dd2a7b78f6718c3195f04d4be12546afb8792da4f81fd7cd524b56acb178c9e0d67cc826e0564be162432c3b8e6f80240e6eb4122338c6b8e4f0464be112432c318457a3e20f3cd209119c635c7870332df0a1299615c737c0420f3ed209119c635c78580cc7782446618d71c170132df0d1299615c737c2120f3bd209119c635c7570032df4f870729b105b3613cf6f164304effc02495899f6a60b0b36e6c55481e0890f8d0248d6295924aec681837e35f07f4f2a3a0111ac6a3220e07847e1c3442c3b829ff7240e8274123348c47469401423f0d1aa161dc9cbf1c10fa59d0080de3d111ab01a19f078dd0306ed2bf1410fa45d0080de311122580d02f8346681837eb5f0608fd2a68848671e14d2920f46bf3034e1a2cb6d6fe900abada7e79315870e3eee91dbe717b57e2d2f88d491a3389ee4657061b26631b5d0d008135df9aa4b721a7d739bcb994053238d825c4e089c3354d1147805e7e6792b8dd8937acb192c522cde400344cb1925572957810839a6a2c1a6400f03c7d6f92f04ea821482cd4c66077ca18b9ad00b93f0499dc306a6e7340ee8f4126d76037cb18b96d00b93f0599dc309ea4dd1a90fb7390c935e80634466e0f40ee2f4126d7a0d3da18b95d01b9bf06995c83fe5663e4f604e4fe66925cbddd71c368712780f1d8efe970c3d0dd25a6b0a50dcb7c4b71f2eccfca598a61de632287b884fe916e5d95afe9cb67ee181ab352cce09613a34bd0b799a2760830037f9aa4562ccaa1aeeab42fca3156d55b80aafe5770ada8c1180063d4be0aa8fddb24b58d482caf568539eaea99a22e02ece53f26a91b41bc7e2d5a8de9ba2607602cd33e2a14cd40a99d907709af237409112e6ebacb94bbacb790ec7a4b7a77009dfed764c1c4db6a3bfc47a6f7023afe5f3a1a2eba2ff4ae733eed12401f75b007a04b3596d045e62b99c63a26c3a866fe618ada46a04b6599a4b68d84da58167368280fa26e0ae88c04894ea387b319a37310a0332348741a9d743146e750d0a2d708129db9a1a4f3004067cd20d16934c2ca189dc7013a6b0589ce81a1a4f35c4067ed20d139289474de0ae8ac13243a078792ce37009d758344e79050d2f939a0b39e493ae9107906779cd0cde2ca1880738653f868db8db8b4d537495b5752f508ac71642da1fbecad22c2a734cdfebc90d008bf194c1f0b19c1d41795860911630195bb03921ba4a3aa277eae53185747750261be0d8344e7d050d2d914d0d92848740e0a259d0f80cade3848740e0c259dd7003a9b0489ce21a1a4f31f4067d320d139389474be0be86c16243a8d869019a37321a0b37990e80ce732f24d80ce1641a23337947456003a5b9aa4b31ba37392fdd27442a7d60af9a75464ff42b305fcc8e0316c77e765fccdf1f6b5c80637b8ccc7d890340bd0dcca24cdf1f670f6da53838bca8d0d3c1f044e91d641a1d2e8fa7c63548e0213716d8242a5d1fd9b8d51f909d0cab626a98401b7f46cbc4a9b8995b630d4a2ce26ce297985cc9616a5c3bf64cc6256028bd9ce24a14d89d8aa3db73ac26bba9a22b0067081b43749600f46e038064073efe85e2183a1870de6b118bc00b4eec6a86e0974b58349aabb106fb06331a1b1f514cebbc87c80fd3725bc207acdb74197b18e97d188a6d74c6d18771ab0af1d4d52ecec0709cf16ad367d35d658b503faba9bf976df994b721aa45d8dcab680ca4ed5d9858270460f7833b64be97050c5334d52d91c74a1f2ec0754541a0b9acfb6e65816ea6ed3dea0d5ef6cde4e3a24ae66dd247a46f32236e72e5e4a5317ca9846ae0595bb8b49321b0332d3bc2ec918793301795dd311de9ddc6141615c957c21a8e4dd824a6d38177cdf0eb4b6bbe9466832cbb7d3f4ac605121f42c3bea1f2d4fc7665bc61aa16680c41ee96884b03546de4ed1e0509eb87433a8ec3d834466184f5cba059099152432c378e2d2a580ccdd834466184f5cba0a90d92b486486f1c4a5d30199bd83446618c7e5970032fb0489cc309eb8b40590d937486486f1c4a5d30099fd824466184f5cba0790991d2432c378e2d20e40668e49323b90aa4b10dca1e334526c0f320b18bc988e0bf3a2839f884b6bff7478db133bc8ca6017c9189567020dcdadde890b078a3a8e8d52696cfaf750307131201db11f2a01b3613cccea78a09b03834668180fb33a01103a28688486316cf65840e8e0a0111ac6c3ac8e03840e091aa1613ccc6a13207468d0080de361569b01a1c382466818b74f3b0210ba47d0080de36156470342f70c1aa1613ccc6a23207478d0080de36156c7004247980ea899c4bd4b25f62734fc90beeceeed698cbca1a6c8eb4e5cf246a6231a6948faa3918cc5753c01c8dbab3add1dd3ec4f0e227487904ab3ee8e734c51f90a70778c4a871e0edb85a2e25e077a38da247962cfd85c5bbc5d87bedf410332c6fc24c552e63ba79f3a7b2139cb5a56d91f2ee60215b3450274339ff08569d507ba3836dd1bf0aa041286afb919036c645e3a9a9bc426d3c218cb310a68e9b8606c132d3b79c320b5db4c51fb37d0d2f1e958b7e6dd28ad8224ba60d0f88ca5b1b9a11f80f64e48cf3256dadea77d19abb179cab5a0c59f6892c0f692ea8f75dc47937246e83ab3157fa76588d48740c59f1444520d3a378c91fa342075ef20926ad0496c8cd4ed80d47d8248aac1dea93152ef02a44e0e22a906a7848d91fa2220754af576f9c31e50d305b4f953abd35997c706a18b389506ab7a0f53546e005a392d483b720f35194863ee1848b063d2f420d1392c9474ce0174ee1b243afb8792ce19a0b2cf08129db9a1a4f33040e7cc20d1392094749e0de8cc0f129d46633a8dd1792da0735690e81c144a3a9f0774ce0e129d4617c018a3f36340e77e41a2734828e9ac073a4a73d2b1380b5fade19d4f0ae34ab70b806eee1f2432c3b8d2ed2640e6014122338c7b7d9c09c89c1b2432c3b8d7c77980cc794122338c7b7d1c03c89c1f2432c3b8d7c7e980cc0383446618e343560332170489cc30eef5b10690b93048648671af8f4a40664190c80ce35e1fab00998b8234a0347a409eb101651730a05c1c243a8d1edf688ccef180cec220d16974174e63748e0495bd2848741aedbc1ba37319a0b33848741a3d82cc189d27003a9704894ea37b2918a3f34240e7d220d169f4ac5663743e00e82c09129d4637393546e7db80ce838244a7d1b35a8dd1f913a07399493a9b713a07d9ff2fe78917b0c507613f95603b71292cadce4043577467d981312a8d2d2e3805041a2e37496523e22e80196dff4c5fac24613e68e420405d9949eaba4aeca27c59d6581b64b99dea0a7647df4e53a0765f53246f03d67245184836e8a63346f2a580e4956120d9a0a53546720438480e0e03c906a7428c91fc15d0e4f230906c70f2ce18c92381265784816483c30463240f07245786816483d126c6489e0c485e1594e39f8d3aac8d0d24ee0196777550a834ea5d3546652fa0956b8242a551bfbf312a9f035ab9d624951d89f75ce222b296d0559dd3ec0f0a093dce0ca7d6e090c118b12b00b1eb4c129be923b6146ce6ef6e49146bb63f8c8113f301bd8704c504185d12664c531f01541e1a142a8dae5f3246e514d030ad0f0a954683c68d51f935d0cac3aad385eddd8dd1a0ad34b61be340e0873ddc24959d199593ec976630c28aec9756f3cfdde6a8da4e7837e6e8ae4b5c828f304970775f5b5fc9869bff7ffcb0df00a3b0211d5b63f667938369de1ad3984ddd000cc191d57ba04fd8fb9fbd80261e6592ca1671a81439353a7b951d3165394187e9689334d667372b58de8b6da0d1f6ebeb083d4d3b7ccd4d27d0dc6c4cc7d012ea9eb329eb4c9247f6612d7885fda2f36c3a1b7aae23742c3fda96a0c4acf7beb9297a1783aa7d4c3a7613ad244bed9f2b88da8eb7063bf5c6f6bcfd1668eeb1e9b09a58a7deb59a061b1f6356f31bd08e1f6792c686f6cd741e5456409c4dae2631cda4d53e7c96b309d0bf4dc1391cd2e0d259637dc9cb800e6e0ecee190063b41c6f6b25b071a9ce3d3611573a296b1900d1bdd3d94d330ba3156b99f0195fb04d36be92861792ce122f669017bf510b025f50cf62bddfadf60ecde125364ee0dc8dc928e20dc1cf6b7739d61ff58c2a80d73f8e36640e18926296c0028745808f301ce7340c37252708ee131d8b01873fc5e041a9693d341654e8cf9c77047d4bf0f2af32926a9a4bee4c9ccfa518032d6bc5484d055db0110766a3a1a908164575bc57118a0f0b474c466d0ea3b8e8d9757312126db9f2c665d9b69644d5417a9b36265a85be67d00b1a7a7cb2e1691d5c49985c9674c08ef775a747481292a9f02adf519e939ac2c27fd3332e6d6ba01face34495f07e29f39a4a43907ed4cb2473232e7c46066530d46b9d73456c1c1b4c259e9d85685eae40446e654fbef2216d1e69e565411ea0ef92aa0a36707e7a0b230ee3777206878ce49c7b9980377215b791c20efdce09c9e11468f634d50a5cf0bcee919069b1a63a7671c05c6d8e7a7a303448fba4dfbd96dc634f17750a9b7a663ef8444cf4f1f66b2621b3b3dbd2da8d8170489cea1a1a4b33ea0f3c220d139289474de032afb4541a2736028e9bc14d0797190e81c124a3abf03745e12243a078792ce17019d970689cefea1a4732ea0f3b220d1392094746e04746e0b129d46b7de3546e74a40e7e5e9180555cb09d6c65c1bfb03faae4897bfd201919fa51ee621e51f80cc2bd3a38bd5e066fbc3147d1d8043e3aa20ed6638d4a4cbd758d5ce025311570789ce61a1a47326a0f39a20d1d93f9474ee032afbb541a2d3e87942c6e85c09e8bc2e48740e08259d67003aaf0f129d034349e75580ce1b8244e7a050d2f924a0f3c620d139389474be0fe8dc1e243a878492ce7f019d3799a4b30e0370a2dbe86714397c412eb5884bd7cdc1d9313b8c3b5f75039366b798a4b2a7844aef0adab184ee80b19cfd9b06b6ae6290e390484c83641b8bbf1c07f4f6d6f4ec8891bb0bc514ed0b74f5b6a06cd8647482c258b5bf1d3438b707854aa39313c6a8ac019c1c7704854aa31313c6a87c0268e59d41a1d268b881312af7035a79577a42fd87a5bfa931465f7da08977a76b45ad13934ed7f12c61c1fee524cceb76ce069d9d7b82b37fd55073541a8b44df1b68e30e9354b624740b11dadd2ee41fcd24d8927983eb1c8d55eb3a4027ef0dea6e4146db6e63bb05ad009df3fb824aadd1ceba316aaf055a7bbf496abb80c6683173a88d651496b1e66832f12e749ec21aa6a5365cda568c1b6bacee04dafb403a623a125b3635c0e43914c69aabaf81be3e182432c3b80aed7b40e6434122d3e0010ac6c87c0790f97090c834b8f5a23132bf02643e1224320dae4c3346e65b80cc478344a6c1c3e98c91f93620f3b1209119c6cd935f05643e1e24320d76e58d91f92620736790c80ca35ba40fe8b43f1124320deef66b8cccbe80cc2783b147bac176dcd86ebf1d80dffd299334b625ea0ba90c5672638b55f6077af974d0083558d18d117a0020f499a0116a7050698cd08980d0678346a8c181a53142a701429f0b1aa1061d72c6089d0e087d3e68841a74ca1923741620f485a0116a7090698cd03d01a12f068dd030aef11d09087d2968841aecd81b23742f40e8cb4123d4a093ce18a1e301a1af04fb6024836dbeb183918a40ccc8ab26e96d4eaa9e0940778acb67b42e4b470c93b178917640475f0b8e87696828a785ff0664be1e2432c3382dfc2f20f38d209119c669e11f01996f0689cc304e0bff05c87c2b486486715af83b40e6db4122338cd3c23f0032df091299619c16fe0a90f96e90c80ce3b4f0d780ccf782446618a7852360e4f37e90c80ce3b4700d40e607c13984d3a05e1a1b4c6e0395fcc3749c10248e0fa14baae9226a2a323deb626d0c62c3b8863d13ccb97f647a794cfc6583ce492c069b216327b14c02447e1c14220d6aa431221b02223f3149642746643ecff934524c2613f7443fba61e402ee82a35ecec5f6bf1de8f1f6b5c8862c3447aeb1431c288a20f7d374ac34aaea384e64ad91414788b19546a780d6fe3393d4769650eb3889297965646fb6fbc7ca98131f619ce7cc00bafb79708e670aa3d32e0f50f9453abaf9a23be52c8fddb5ba501d4183f5657ab60b18ec330069583e68cc6e126037bf0ad206e5c34219a2d8138c94be0e129d46c7f0c6e86c0de8fc2648740e0a259d3b41c3f36d90e81c184a3a6f05747e17243a878492cebaa0b27f1f243a078792ce2f8176fe10243ac3b9f8a00cd0f96390e834ba68cb189de7023a7f0a129db9a1a4733da0f3e7747b9666d9576743de710c86fe56c437455dc946f1ce36a846d7c5193ba8647f30c0fcc524b5f4663a7136850edf40b231d0c05f8354a187853268bb03e80cfd16243a8d462319a3b321a0f3f720d139289474de0b2afb1f41a2736028e9bc0cd0f96790e81c124a3aff0474fe15243a078792ced7009d7f0789ce702ec79a07e8fc2748741add7eca189dc7003aff0d129db9a1a4f36040e77f26e96c4ac4410f74d955dacf5835361f69819e263deea5da368f0e7fc8c111606ed232496507e29d27a73cac227465a57fb6dc7f6893415a8ded189b0b688d98a4b5a58fd69218a107613ca9a033f00c650485c830c6705c0e34b2463a6c26165be4d548836bd88c51f90a687e6a9aa4b2874f271791aa818489871c1ad45a631ecfdaa0fad73249754e95e60923b242c11b3fda7ebf9c6d1860d4faf63545ff08407f6d93f48b834e869205ec014dbc80ed2b9fa6beaab140c417884b611d93148a5923a1c1154c6b69f76a3c27af68176bd20e024d5addea1c0640b805a15c969d07a8ac97ce26ad84f71168577f31d350b96d9dc001a6d99007d9d7c5ac5f61506bc79aa23a1bd8d4fa26a956df2a685828f700ed0874b741d0080d63a043274068c3a0111ac63d409b03421b058dd030ee01da0a10da38688486710fd0b680d0264123348c7b80b60384360d1aa1617454ff079c2ecd82466818f700cd001ada3c688486715aaf1e20b445d0080de31ea04d01a12dd3e13a49ee3c4e83edbd31bfea03c09ab60a2ab546b7533746ed63c4a5b6753abc5289ed89134607df89404bdb98a432f153670cf6458d9d3a3303789cda9aa4512cdf1eb24b459bfc0c2a74bbea75333b50a58c54838e90aea6a83c1ab4e8ed83d545ca0da5efb31858c80e4123348cbecf2580d08e4123348cbecf0240e86e4123348cbecf4580d04e4123348cbecfc580d0cca0111a46df671120b473d0080da3ef731e20b44bd0080da3ef733e20b46bd0080da3eff3404068b7a0111a46dfe70240687793843626628dc8aeb3e15a3e71c9eb6192bc4ca27b789441dd347678d442308aef599d0e116f3098c1d1d139a6a86c065c735926a984e77095324f3c052a63ba9826079db1eabe1ed8cadd4d92d8c643a2b393b26ce222dc11cb1f00ebd92b1deee201f67fbb4ee3d31e58c7dee9985aabdaf82432b966b0e13146ed64406d1f93d47623de28e552fbd5256c3902a56e578f50de17d0dc37dd1a2c27379f99031a2a5ecce0969b6defb799a2762068effba5c3b6f6674b6ad26c5b8d354def81963ebb3a173142b805a13cba671168e5734c52d95a52c9712a8d6e2e648cccc1a05af70f1299613c886f28203337486486f120bef680cc014122338c07f1f503640e4c875f49f43f69e7bd904c27cee112824498c4aeb069464fd0ef1c948e713ca6ab7e328deec7688cce16405b0707894ea3e1ddc6e8dc13d0392448741adda2cd189dc340651f1a243a8d4ec019a3732ea0735890e834bae39d313a37013af708129d46c747c6e83c1fd0b96790e834ba35b0313aef00740e0f129d46375f3546e79b80ce1141a2d3e8d6c0ffd7dd7d8057599d71003f91a2a8080aae8a565c691019d9e00e6145466212828a0a21c304020142c270ef55adb64a7155ac5b51abd63a6a6b5dd5baad03772b0ec4d6ba77d59e73be7bb9ff24f742e8d3ffb9efcbc3f39079bf7cf9e57cdf77ce7bce7b5e1ae7fbc0b93f7f2d4899fdb28bceaf593991ae92a6b455f3fd4c02f48010edb3ebdbfe6b5c9eb80704910f94c4394c25e736c0592489335f25e7c370b18f90c499a792f356e02c96c459a892b31b5cec23257116a8e45c05ad739424ce6c959c0dc0395a1267ae4ace25c0394612a7ceb498c5c039369dcb66db5fe8c4942d5a4af67d30c42c914299ab9272104c6b1c2485929a4848a35c09ad725c98c55d1b52d6c63b707f1c1f22e5c5fde07adf0ee3c79e1dfb167d4b1332006f42883a0943fdf3bacecc4f1a828b70e72b0cb68d8711cec410055152777a702531ee244f5cdbf1680689f55c602d0d9120185f3a13ed43d3683a5699c1c78dc6bd917686e77659880bbe6bbd497d9007c253fb6029901a5be400802c9702495c004b836c02c80a2990c499481a643d40564a81d458f1e82c809c24059298ff43833c0620aba44012836934c8e50039590aa4c6a0c5f900798814486242150df216803c540a24714f431ae44d0079989cb24e1af3d2f281724a88ec1ff72debce97cc67de29699873208471b8244ce2f39b863917308f908449ec55d230a700e69192303596c2ab05cca99230353e80aa00739a244c8d89d19301b35a12a6c6c4e85180395d12a6c6c4e831805923099338fea161b60066ad244c8ddb9ccc07cc3a39d5583406812f05ca7a397530884f72da228313615c7e94aced720b55d6c17819da668334508d75305e01d04669a01aeb603c0fa033a4816aac83f12280ce9406aab10ec60a006d9206aa71c1ff4b003a4b1aa8c63a184f00e86c69a01aeb603c0da0cdd24035d6c1780640e74803d55807e359009dcb4e0a1865da4c9d3fc5925840a4d1beb8dabe752fa3e1d1322adc161f71bc79720a3510db21ad50c396b0dcba8549b993e95830b9eb3b62139fe957b1604f86363a9f09bb9be9b8a77b54c061b49917fb167740973eb5f638a8c6c98ea9106f6a0d552123fe363a95f1a673d111728e106d87a307e1a1d416224728de66a3f619a55d9598914903cc05268fdb4abbb358bbc13d76819cdddd354ec8ed0b77d5854cca1de0828fa70356f883cdb1edd3edb8e5da6c654c467362e09740ba486e550c626ba5f5013e84c7d3e23015878676200e90383d88c5d713f88e0ec1e70a2707e7fb81c5f70d3ccd8f49e72869a471c599a6c7e635894ff04c16e5626889c786ec18b9fcde2a9fe9dbeaf1520f3e89acb4c1e7e6d0313a2ec4ce0869b8bc695da1fbe0b97d3c13cf0d373a8e7226f8ce4e837d1171e3511add2e4077829ce221d92a9775cd837be3899230352eeb6a01cc9324616a4c6ca905cc9325616a4c6c390a304f9184a931b1e550c03c5512a6c6c496c301f33449981a135b2601e6e992303526b61c02986748c2d438d7530a98674ac2d41847af04ccb3426dabd7683a2f3e0854549eb614612204d9ce9654636518f3594e9b81dc1d22423f93c4395c25e758e03c471227b5a749e32c82bbe6b99238735472ce02ce9f4be2cc55c9790e709e2789334f25e715c079be244eeaf61334ce8781f31792380b5472be0e9cbf94c4494dbaa2717e099c1784586a30ccc4b7708e2676838c8268f3e35f9804df85e95ce1d63e3540e3deaed36040b924cca29734b444da853c195ae2afa494fda0462f692df11eb8272e954299ab92f227300ebf480a658e4acaa7a0555ecca4dcda7e50663f68b5df56e70f35db7e7b8399e71f3d8d66b18f6136fa8ff4dd27bbc37df21226e3cea6f342ea12174bf1ebd61a7d665a913d58ad5f015c1d5b26586b34e7513402eea5522e77eaea22dae5fe205cee9749a1cc554959040fa15f4ba1cc5149b91a5ae5e5fc9c890afff2e489271b5a51f8ede1deb92c4cb1b9c20ead35c0f887d6324f82e1e3154cbeade0b95e62a22c9e4a9f7a3a53f5b3bb2700fe26443a542221baca6a14db93aef57dcaf8db11f69b1bec8bda7c5fb3d5cf9953bbeeb4b9f20b80f64aa9b4d4b13a8df636b86b5ec5a4ed0f97fdda13a1abfcff8da6de3f8c7477e8ef80967b357bd0b9b6ae53fc37a5e6fb0cd988c4d8037aa0d78468a5c818dd022a6c276a9cef2eb9517df4b932e3f64c58e4db6b913d8346432dc2d497d54aa743aff45aa9f7576a879f767f7d0f6e00d749a5a58ef079b4f0e8ba9e499b65dae756bac7d4027bf1d7f9e853741877fa6df6103510dcdbb0aa59be0937891b98dcbb78eeb1fe4e5b6e5c9a6a5d2cdc57eb0f15df91264d03585a5f613368cf37cad9995b630db7cbe1aebb3c44b72bd5b472b1bfd7cee35ef265ac6ed71670c9df94ce0a6e818a7d5fd68d045905fdd79bc3cccde7848f4dd1427b9fc3e57c4be89d66bade8d22de29699da86be112ff6d88e498f6fb224573a389d952dda3fdbde0097e6b883d111173dd1d26bdb08701ec6da1b6eb8b0e926ad72ecdf7d37e703fbd9dc9d9c7c4b7979aea3fe17e78b56fb18108697970cba145fe4eced67c1a775b380228ef6052eeba1e9415f667ba83cc37a5f6bdf888be85dbff2c6775e47bc153fef72176e18e874ae6f87048c35adbacc69ce2cf00f4ce301bf41584efd0d336e8db15f8ee0a35eb848bc8ba12bcd3db5dba059eef7787e82e7575d3fde12aab6c6c0f9cf748e21ca6927333e0fc83244e6add561ae71dd07dba5712679e4acecb81f38f9238755628fa0038ff2489b34025e7e3c0799f244eead64034ce2ae0fcb324ce5c959c2700e7fd92387354723603e70321c274b836cf8d922a622326bd23a136207c303d3347d1c2b15cfbbf1b5c56af795b690f36d3d4f9a126b175ae60c5949e8331fc434cda4cd33ea634dd749e7a5b9f6564fa26e9ca60faf861290938d4273e6d65c81dd06aff228592fab4a7517e0d948f48a1a43ee969948f02e5a35228a9e3771ae544b857fe9549d92f49a7a9dc1faad9cfbd774c6bd0dc8d3a1a42768f85ae9ed511b2d83fcb6787e999d2da6901903e1ea267ba36d268dd48b53dbd527f535814829636bbb400689f48e7ddb4fd3ca7c6cdfb4be0c1f464a82168343fef0eb43076916baea6f5b449103e15e28184cb1b9297c90b56008a86fa1d5ce24f87db86bad6b83d461205725b42b54eda63e831807c26d4058e7531abfd01353fc98700e1b321920d1c61dd9acaecf12f6b5f51f702dc27ff1636532ef95d724cec05c1ee96c52cdac140fb9cd42444eac89d169aab848bff79a9b4d4501d8df66a68b52f847834b9a0c786b54a791f207c31cc9e3869d8139496179f0f7c2b987c7da1053625891b692e74f210dc215f0ad306f33a8cca35f35500dfcb2112b4ba966890a332d5e01eb8a05f9184a93136f42060be2a09536361c7bb00f33549981a0b3bde0d98af4bc2d458d8f17ac07c4312a6c6c28e7702e6df25616a4cc2ba1630ff2109536361c7eb00f34d49981a4bdb3f07982b25616a2c6dff3c60bec50fb1ad6db9419ab69ca24d5dec0ab46fcbd89e92d8dfa46d4f390ad61cbd93de0507d1a19a3c2571844edb9ae2345870f06e884cf5f54970213e8a684904f9103f5a250d94f838a2811602e87bd24089a10f1ae850005d2d0d94f838a2816603e8fbd240890f251a680e80fe531a2831744c03cd05d07f4903d5982a9805a01f480325864368a07b02e8bfa58112c3c834d08100faa13450622899063a18403f92049aa3f41eda1f869e1f8758a810650c39850a7fa83946f332d812688f9fc8aed1417c20d1d622ed0dadf3d374c698da2f872576e797b228778070dd67217743ac8f85926b4deaac4b8d39975742dbfc3cc49db3201dcb0c6931cf4f4c82ef0bb9db9b134321b4d573cba0657e196282237bcd649cdb5c1237930cd04269f9bfcf400bfd4a6e0bd558c5e81168a15f4bda3369b8cae98e4ce8857e238973984ace6d81f35b499cf92a391f81fbe87f2471e6a9e4bc1d38bf93c459a8927363b8d8bf97c459a0927335b4ce1f247152cb3dd2386701a75b6c2686335725e752e0cc90c4495df149e33c1a38376272c65305711f85727f12ada6c9e8de13691c3c80ba31117b9b44be65e04441da32d913a105fe8889976c8c9e7c0705b7747696fda9cdfea368092d31f6fe358bf62008187767d2c62b14b98b7ba4fda6667bdc3283a54adc96bcee80d5fe008ba160494b884b9f16611a06ad77e3108fa3540fa311f6a5cdc62da0adf6813b6a8d0d1a674f68b19b48e2a45680a171e600670f499cd49d3d689c8510f3dc541227350f8ec63919383793c449ddd798c6791c706e2e8993ba212f8d732970f694c4492df744e3bc1938b790c4492da843e37c09387b49e2a4967ba271ae02cede92a24ac3556672f48780c896923887a9e4ec039c5b49e2cc57c9f9804970f691c499a792f326e0ec2b89b35025e7f7c0b9b524ce02959c2b81731b499cd92a396b80735b499cb92a39cf05ceed2471523750a371b602e7f64cce01a6fd0af9397ed2a3d69e804b2f88ff9e892dcef187e18f2ab2efcdf3791ed415f4cddd48e00320c0fc632678bc9e418d49be6150fb3193be29e4bed0c5df410a247141030d724b80ec27059238794c832c847be98e52203566190d04c89da44012338769901702e44fa4401273da6990230072672990c4fe260d722378d8f4970249dc4b89067905b4c85da4401277a8a141f68216b9ab144862b2350db20740eec684dcceac6b64debe27a9b10b740360ee2e095363c7fc46c0dc838919df51a16b231c8d8f9d6b803293499969dac78ba69bce59c0eb53178b464dcb172e8648d14f99d4433b50b7a6844c5d42aff302f040813a5a6de10ce0cf0a7107eefa3a657dab45f260b5c8004998c4c8270db30030f79484a9711d5326600e9484497c64d130b300732f4998c498130d7320600e9284498c84d230f702ccc192308983001ae620c01c2209931811a5610e06cca192308931281ae610c0cc9684498c8cd2308702660e137327d339d37dacdfdb73b4fdbfd133d6dadfb7d91fd8256e07c97ea7c13699046c2e13764713d5396ab6dfe4f288718bd4b4d538a26d9cba09b0e685581a962acc8787a3ef344fdb66600fb8fcf3999cf1bd3edd7e20c17769a0454a3705be02265f2fffdbb8bbe54c7f9a2d5ee128bf61807b91bec8e7d67021178688d7a77a8ab7bf9035561bde0f5ae13026e5fa6fc6af739fc42f600264b834508d55b6be04d0bda5816aacb2f51680ee230d54e31af9b701745f69a01aab6cbd0ba0fb4903d55865eb2300dd5f1aa8c60a31af03e801d2403556d97a03400f9406aab1cad69b005a240d546395ad95003a22c4ae8af34d837105c8d7671d1335c990369ebf09688ba5d252b38b69b4f79a04edc810131e5d8b791632fba5b460c93bd04e4749c224f6496998ab0073b4244c8d61bc5701738c244ce23d9386f91a608e958449ec87d2309f04cc124998c43e280df329c03c4812a6c6f9cbfb01739c244ce2f89d86f908608e9784499c43a261ae06cc09923089f34734ccf701736288c9e2ae65ca69dc2e602950963229e335345341c67f53ea2244b75690c27830640e95a577f94274a8264f49ecaad30ae69e02cb170e9615e5d4599770395ce2e5d240352e5fb819402ba4816a5cbe701980564a03d5b87c6119804e9206aa71f9c2b5005a250d54e3f285eb0174b234508dcb17ce07d043a4816a5cbeb004400f9506aa71f9c245007a9834508dcb172e01d0294cd0fea6f3a0339a65af3023cd389f4fd462bf31fa1c661c15d9336834d4646c5a6ed19130103d9cc98b555fdb7cfa8b2b01393d368677fb26d3536296b210179804e211e90c8c94da97ccb0efb9ada7a981111ae53610633a921f42aef18b64dc0f77275a645fb2c8be57b381e41b6542bb9c1a227110135d536567d2d35b69f7ca3ce09cc6e4ec9784b332e6506aea2d6db53f7885ff017342a066b2503f07d4ea30d998d91deea19ab3313f83eed1f4104b103b778fbab2089138d8a4dd3d0f80ae514d88a77ad7663335aeff28828bbc36c48e0bffcb425962949ed64697016c9d5458e27c120df66280ad970a4bbc15d0602701ec5152618923791aec18806d900aab72bf5a806d940aabb183950db033a4c212e79d68b0e701ec4ca9b0c419521aecd900db24155663bad74c809d251596b8ea84063b036067878e0f24df52bdd2075bdc40b7de1f6e16b7277b15edf105a1eae6103353180e9c68df2eb4efb9d36e8b455ae7fbb63adb8c8e45b3ea4204066991ade720b23587c9bb85fda0dcefc7e8a6f74aedcb5c6b8dcf4dd1e068bb30ee0497fcdc1011d5fcd8945e939508369947bb639e0f7cf3987c3b9af6e5291aed49540163ea893de2f09436b1570977cb1639d1548d6936d5d042e78798d64b35dddcb98287c61a1e03a165b64ae21cae92731270b649e2cc56c95906b3500b2471e6a8e49c0b9c0b2571e6aae45c029c8b2471e6a9e4bc0138174be2a42685d1389f04cea3257116a8e47c0b388f91c449cd96a7716e0c1da563f9f1a3445428f912b234554da0c58fdc3830ce7b1c93b7974984e7dce8bd29540884d6328f85d0dbf121f6714875a1b71fab53bb48b4d1fa0f70d73c4112a6c64d317ac33df34449981ab705fc0a5ae6499230356e0bf82d609e2c0953e3b6801f01e6299230356e0bf831609e2a0953e3b6806f00e6699230352e0b7f17304f9784a9715bc0db00f30c49981ab7055ce13137e9dee1e0a33b1dbcd807225c28a2c6c4d75fb4d8cf8f312ea5b0ce43d4d88fc79b46ffaa6996638afdb77e7f8123ecbf649fcfc8e86dcf689459684fcf7dd61dafd61f7b96fdaa3bb3163374a8fd96335d83e8156b10597e8eb4c89abbc4c67253e77ffa22fb3a77ceb57e0944bc4065ab27c9f23b9b95d9cfb51ab748c2fd049726d960bfea7ee346b318d69f6465f4f04e75a62d26e000b362e7da66a264cb642996599ebb2c16dec9f24b33e21fc51764b8d74df26791e557208cb4efd5fb336b322e9ee1ceca29b4faef76c7740981e37ddb7267e2ca6d96fab3afb3c776df91888c64656c1afbdee86f13fd055b6267927a91485646cf4e5f777fd3a8a46756c6e6fefa69f6bf6dbdb548249a6665f4b15f8b7e9fc467134a07fbc500adfe67f44a726e13fc5fafc11ebbd637d88c8cad626dd41d27fa6ab5fd5ab57f5bb9e68c87b8c5b71905f6bf68fddbe0352bdfa2363dcbfe8b3e8a7f7eddc7742d74ed473bcb35c38ce4f7a5a6ffdbb5b5aedf28ba1db8d7d7fb68579d3f6ac93a7fd375ff7ea9afd39e6bf9ab0cc9717f8b0df9f73fdbfddd637f76df4cb7f397c424fb978f0eee2e9979f67d77529f966c64baff17413d95798fff0600 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/b0c348d7e8db140419f38778a94f3f80.asset.meta b/Assets/SerializedUdonPrograms/b0c348d7e8db140419f38778a94f3f80.asset.meta new file mode 100644 index 0000000..9b6cd30 --- /dev/null +++ b/Assets/SerializedUdonPrograms/b0c348d7e8db140419f38778a94f3f80.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6c8e1b745e4f7b34b9ecbdd129aee081 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/b13b34fc82c680c479b3016443ee7ff2.asset b/Assets/SerializedUdonPrograms/b13b34fc82c680c479b3016443ee7ff2.asset new file mode 100644 index 0000000..e6321c2 --- /dev/null +++ b/Assets/SerializedUdonPrograms/b13b34fc82c680c479b3016443ee7ff2.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: b13b34fc82c680c479b3016443ee7ff2 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c5447d7f06703c1ddb5040f9a90408096521cd262854085b610488094406804a95377777777777777f7d296ca5377fdeecc9dc93d7b77ceeedebd399b19beb7cfefe1e6ca9e39f39f3376c6327298f35f64a8f3cf42368f4d66c3d90256c22ad81ae7afc9ce75b5f33ff74e3d9fcb2a9deb0ae7df62e7dd509695e097fcbf81912ecebf85ce5d15ab767e59c39639d732f17e3e2b75fe2e747e5beadcf1a7cb9dff973a5f451a3a3f5ac0a6b0396c36eb1ce99840c442f1a32af92cc2e31569e2fc3b896d74de960aa5782039e25567e79ff9ce9b2af16eb5a3b4fa6e11db53446bb5f36e99f39b4a56eec85c2a2436291acfc41fccbd7496d72ef2dac9f97f53f97703f97713f937fc3e535ebb26f97d37f0bba6e06f4ee8a238bfefee5e23bb39d746cef54b70cf7ffb8dfcae872b2f63651c59dbc86b2f79cd9232bf4a42ffc6f2da3b417ce3c9e8036425c3ac89bcf693d7be52dfaf530c7f80cb28721e90c759ee0ef4e907c26e0adef367fd43c45da5e3225f3a2e72d331e32c997e9be5f703e57590bc664bd9ce37ed2f93cf06cb6bcf047a0d717fc7c630cf669d301bac95f743e57598bc0e97baed2975fd06dc87d545a5698e94b9870ce37f9ae7ea7bfefe5b799f2baf237ce99527bffb4edee727a94f32f6a774da4b86f13db87738365c1247964af7c5be745f2c7f7b92cbb1e15dbef800fbd3ca1d29e5fd90423c96f8e2b1c4d525333bfabb843a28f9a3a49c6229f74770cfe59e16306e0de5ef6e93f7052c71d9d6398977635d394d14eb6ddd701a75709f371ac7a26d794c023d55da2ef5a5ed5229b75cca55f1dfcebd8f28cebd811cfefb9f7c7297f9e42e93725519919fa49e2a5e3bc8eb24799dc86af3f1a822f96cbcbc4e906196b0e832a044bedfdefb6da79302728b9746937d69dd53865b9a40a6fafd14796d9ae4f7ea9ba921749e26afcd920cb399bc4e0f116673d7169a7cefb3856d13c89ce1f26d520d7470e434dd5fde17caeb8ef2ba93e4bfd267072a7de2d941225d664a5d1848034797666de4fd2c799d1dad8bd39a8cd6e9e7bad329b25ccafc05dcf3eb0af9fc5770cf759deb86d3ec312973aebceeecd3791e9dce4e2b58fcae650b601bc9fc2e9e7d15b9f16b9eebca6eaeca87053edda6797a3799027eabf448263fec2259eced63bcb7d441b1ddd5f7dd6fe09e5fcbbcf0c4dfce6f5b28dbea0e9ef3dffe0eeef9fb8549eaba3b8bb5592ea71c845d2ec396e57f0b959e8b586cded3fd965f578167aba4bcf7e4eff660b1f598fa8ec7ed0f70cfdfef9664dcf6d4e8e784db72429cdfeec5a2cb9f299e3d347e493e5b2cf559cda2f3d66af9be8ff71b157fb6c4bd6fad742996bf5903b8ac71f56ba5ead3a5f2ba9ce9ebd912c041e64756ea85dd53e5dd6571c252f5df0a5fbc8b3c39cdbb48dd5539a6f2f860e45bfe4cd9a162a2dae615deb705aa1da118ad91ba55b0a8b299ad02cff975ad7cff27b8e7dfededc9eef8947cb68f4f575d7a56fae2ae2b03e2d95995fb6d17d5c6af76d9b6becf27b798c5b7db1a57ce98c3e4fd3a574e9b8601e5ac77e58c55e5d646f7be8dd26783bcee2baffb498efbb0a8b29cc93a345209ec661ff08c7ffb978f6f22dde2713cd0d5b3b67d7f90bc1e2caf1381ec4e528f2a2fad6adb7c078077fc7e02882f8c5f3c5d36c96bcb04f1e90cbee3d74342c43fdebb46f27ab88c5b358beef3489b6bd7238eac2398d64edbabfef291eefbb6ca3e8e0271e261d478ac6b6de968f96e1d88b7b4abc87af04cda746483f74cc8e3ef8ef1a5cfdfbef7c70219baf7c7011d74ef8f97cfff71756fafe275822f2efbfa745dcfa2ca1976626c5cc53730ec7f03a4a5ac47231b7d69b951a6cb9638b24ed6a76507d90e60a7f8d2f2545f5aeeab494b591e47f603e926eb9cc8fe9af43d007050ec4e47d252bd3f03c8d5bd3f13e8a07b7f56745a765479fe6c242da1fe302dcf898d6b647f5fd8ff259196caf776aebceadabde7cbeb60576e064b42ee05f2ba771cb9dd7d722349c8bd485e2f8c23f76244df54c253b6ae7c3507b2685be7f78edd767a2d8eac4b98d6d63b2bbfc1a52cdad6950f4fd9fa412cd6d62f97ef0ef6d25fb0e0cf36b1585b07e57a44d54b57806fa0adaaf75702b9baf757011d74efaf6651b6de65827c7e0dd3db3ad41fdafab5b17115dfc0b0553d1e2f2daff371567c0f65d1fd9c43ddf4e9e26fff54b3f875e3f5aefcb167c9fb1ba43c59ee6764807b7e3ddc17eee16eb85da5ffab5b0729a7857c3ed47dde55b52b6f64daf656d722df7737b1e8f6d42d3efeb7fa6ce548cfde6ae372337807e376148b6e93481f61e4689056478167ba365722aeb7cbeb1d3e7e4748ae0dc03dffee2ea0bfca9777caeb26ef5ddb19bef46d01f4b85b6f2b4cb55b7e8da36f3c1b5471be27419c839449c7b0e832e918d70ebac7f3cf3e20bf392ece370fc9ebc3f2faa0947f2c8beebfa8f6cd23f2fe38df7b15c6851efb4e59400f259ba765c338faa8f83f2aafd20f1191eda38c4c70efc8e9a1faaaade4f571dff78d7cdfabfcf0842fad9ef4f4eef7771cfd9ef2e9f7b4f7bb71c9f4c328dec9fe71e404165dd69ce0c6b9e7452c3a0f2c63f1edf219797d565e4ba5bc1359b43f52b635e3fad1128515275e919359b4efe264f9fe39797f924c63394e1a39d5f7bd6a4f3e2fef4ff17d7fbaef7bd52e7c41de9f16fd3d7b11c8e1f72f79718ba878bf0c9e29dfc12b1e9f2c391e1339233a6cf62a8bee57aabee399528726e07790817aafc23c2b5a6ee46cf9be19b8e7d7737c72551df0bcefbd927bae4f5f55e6be29af6f78711c771ef80de0c95e8f9619d7a6a5df438c1bf3df3407f78e4d672d892343fd56b669231748192dc03d9721c77fb3aec365452ef4f13b1f3ce7d78be4fb96e0bea1ebfe42f57b597e7bb12f6e17cbdf8e4be2b797c8eba5beb85d2a6554bb71eb7d541c596fc9ebdbbe345436cbe55dae49d7cb417af2fbcba40eadc0bda3439f2cf9dd3b4c6fdb97f87edf3afaf77d559fff5d797dcfa7db152cda07f781bc7e88db24fbc8a7fb95de37b5fabdefd34fb59195de57497ddb003dd4737e556de23fc13dfffdc7f2fe1adffb6be47bdd187fbc3cd2565e3f612997b1ec53202b997ca9ea90cd21c254323e0b21a39dbc7e1e42c617405632716f2faf5b4284f92490954c98aa7ff0658830bf02b2920993cf0bd18c11f67fca7d3e40f9e3bf65dab1fdfedffbbe53f343d4b8e90fd1d708efbbc0f1b99be4fb78ed8aaf13c4e547f7777d55fbff1329fb5a165de65eebea3ce032f7fb814be4f76a5e80eaf3f8755565ceafbe707ef1857773f4f72a6e11d5d7ba85459705b7d441dc7f737fd74fb5473f77e33850e9acfc6f7fc48f5b9da48392751d8b6e9b5ee7ea942de7d0652bb9ca1ff057b46eec6f9f8e75692bfff8bed7f50594cf5431fccafba6bf1cdbe18fc5bdaab7be9457e5a37b8c45fb5022d1df4794efe07aa0af94116900de0119b5ef1beac3a87d9f09e2a87bdf88797e1cf85cb5956f74df67b405f7fc7a83a7abf8dbd16390ccff83651d16516d4c1527656faa4de54fd3e6202ef59487226a5c5fd5555f009b50be8e96ee7d5fd5a7dcecc67f481bdf6f1385a5da4dad7d7c54fb2280cd47dabaf743d437c9e68178fdb0f64c5b9e0c79cb7dcecd17861549509f46a4efcb9f4f22b7b2e832e256379c6133e57dc7e8df45547bec36169b5f3a83773a7b5763c0f9c8fbae4c9f1fe49ce2c81d2c3a3f28bfd5ed9e2ee2ef86ee144fae776d3cd4bc881ebe7456f9e14e5f7a2bbf96a67d18e929d346a5c1676e98c3d598829c7f1ce915cb2aa2e6fae9cab22c9ffde8ecbfb74ff69d40b6d2f953ef777d958f283f493be993a2ee7de5b51fae43a4bfbc0e60da7642bcb22391de71f3d220c950b599b6b8e995d3cf7d9e33d3c76860024683997e6ecc5d2c7a5eca5d321cd9d78dc8f9c931f35990dfe52a7b52794fce5b8ea879cbd2b7575b463f9804c74471cb61da722757ceffca95e56e44ce4f8e8c48834e794c5f76ddcda2cbaebba5ae7fbbdf8f50b6a9ea84bf7cba36f3e9fc731deaace6e4285ff23d2cda977c8fab6bbee238323a8e1135d7f85e165bce168077ba727434d397a3725e7ce401165d8e4a5f71e47e2f2cf1b7a35fde0c57af7cd59e182bafdbe9d344b5bb220ff9c27808b0556128fbd7a507bf3ecca2fbfc0f874f97a4f3f8385f7aa83134901e2a8d23f769d2687c8234da01c8d0bd9f20eff390f71391349e143c8d47caf1af912acf4e96d7295b771ac7ad33a6b2e8369deedb89f2db47587439f488cb75d461ae8c51aafc9f267f372181edcdf0c97f54326a07eef97bcd9cb948a1bcce8c9611e56754f3e91ef37e5febab533eba9dc03b3587743af81dbfaab9d31358e2f953ba676adedee33e7e8fbbfc0a1e93715376a9f881f98a5a7ef2bbc813e03b15d693deb3da36ce53e0d993e019bf3e2dd9b707f78e6e6366f8e43e23bfeb00c2e6d767e5f38ee09eff4e8d493c27e3feb54fde0b40a7e7dc3047abfa69962f8ce799d717e3e3d6aaac9e06de37057aaa674a069c135001ae5cef4eae4c5ea5c03013a581365d5e64d1e3246a6ce7255ffabf2419cbf41fa3faffaa5dbc2e7ed8b572e57cfac8cb2c7a0c4af9f3e70079609c33e9f8bce28bcf2bbe70e7b084632f11351717f4e993ce3fb21d199173f023afc9f03a837b7e7d15a4bf9a9fff3a78f6aabcbe217faffa69ca46df04dfbe09bee5d7b75874bbe62d37edc6319f6cf5bbb765185dc13dbfce97d777e47bd5e75379f45da0c33be019bfbe277fd31ddc3b3a6cd7d0b59fedde42c27a9f45d75feffbc2fc40beef01eeb9dce37cdf7f28bfeb09ee156328671b9f1cbf5e1f81387e24d300f4efb4f6a3c60273c03d4f0fe94fde7646749c12c98b5b27ca792e11b536e26979ff318b6ef37f2cdfebea709d7c654b0be5f5135fbaa8fe21b0d9a4f3a85ad7f3298bf6417feaa6c1f68a8f2a2b774cc05bc9536b39d45a8dcd527e2f70cfaf9fb1a83c25ee61defa9c4595ff11d9df1adfc527e70b9f1c358ea2d27d8b7c9fe5fbdd16102ffebeb79b1ee387fae29320ded1cf3223c2f7398395b262b696e508272aef6527bb345ffd32f1a27c2eba919869c8f8ea7c1e6c35dbe8fcb454b7327e8158775fedb400f3b42be3bb0a1fa30a7db2f8b7d8f9a24c08ed931113c4dd314170e5ca9dff958265fd55cef3e9625700beb0bfcc79339ccd74aefc574bd808b6c8f95fb494854eb0e5acc6b92b72fe5d2be42d71d48efd325194f81600fedfcc7364ba3b14ac769e28a06b9dfb72a1e17cf1ef3aa169a9d0bed079562df64b58c356b049ce7583082d36ee95cedfba308b2432bd8efa8d0ab0e7ee76082a99a638b1e1dae7085bfcbf14a98f14e1e81bf591f9b0618e18f938262625fe8fa15bc8f08664a1943142208b443dcb6339a2ad392f8660f038c6c6506fdf2eef0236326e5cf4647872771731f05278fdf74b0fdab8e9cd7b33a3a396cf72f8b096f0b3c78b5a3cb05c5eb61869081285cccc86b95c513ffe880ebfe80acc4f237ef7bb32f15df00468242abfe804106ef422a7549b0b2acf0542f972a19a3f324542e56aa984773fc51159edfc3f26257379b08d4562c456b58922842547862e39448fb5a85e7203b6894efc0469521b0b2f417244fba94b1cb3c5c2120dab86b275a53256db85a7acea73d8fe956fbcfcd382f2999fff72dfed73d6149dfcd5e64c7d3a3513e9944ae8584a35d0a554b374679cc43545bc746a5e1b2f2f9df87f7a862d105b4fa40346b0a18e60f374db3a7f5721a4143bdf0667c887dc87f80b1f3dc05688112656014398a94198cb11b6d668c5329bfab4e20a21921be912a745fd54cba91937f79977f621c8448dbb6ddc5a35a86937d6d11313729790d253bdc5f94eb5b593f3aed8f9be54343df9f3b98ec462276c2e6fa208c1eb6146ff223e59ee691fe627aba5da5e50ed07fabe6135c38837d110cfe5f6da416306a28cf36786b67866688a65b38e61b359334c72a7b0929b63923b8795dc0293dc25ace496ba6c23e622ed91966ce33959d45f939cdfae7422b34ef49c6b9cdfeb9c32f1b34bd7a4b34b37915db298ce55144c232c9bb4d2a51d7fd85da7a43fe9bae149d71a13dc23a4e03698b5f50c6b6d6d759279c9bd4d322a37c605b7c354ee1556e5f698e4acb0923b60e9d73b64fa75d4e569612d8bd292a7ddea23dff94bf5e4bcbf94cfcb5fd9e427c8d17d98a67f230cb517f357754143e653c5785920fe6b8c7467fa8982227c605831d149670dbcdcefcfc2d7a69d75c279453880c57647fe73fe8b11de0217de05d37ca046f3aeab330269de15cb7ed961b35f374cf2a0b092bbebf29f28fa36a525ff251aec982ef61f2e65739ce6f4deccf552ab702b84879a6ba4bcddf39ceb72a1057fceb5483c48123f2f0fd6e56551824f65ba7ab8be62c1a7476688cc3f54647e3e656881f3dc1d9c992a52a04c84345cab0d0f01fb5eb198c5f8d6ca3522b53391a2679808dd2c365831d6032b69866b4a9ab774c5589c92a627966573c266d96d74927996cdd5d86a2eb755ee466f262ae1987086e1e1f4d2150da289b16fbd160d6e9f9bcb5b2ec61f5d79b319df1d7cbd30d5558e01af938653e47c53e984511a55c3a55618f0f9843dfdce1c5917ebb343bec80ee393c80e94b1c2324096ce9278cb954fa88d7199f3ba739ed3179fcc168b6cb88f78cc29b9a95b263e2d63fb8a76853b9418a45ddc5ba70deff3f1e9bc09db98ed71c17d30c1052105f7c5f2f8e8b079bc9f4e322f6df834e4b02dacfe98da63c3aa3d002b51b7d594a87f478295a80331e1db6984df97114c78369615c625632371ac7a1026787b5d1ee3493359f879b39cff5738bfe05ec56291fbb34465e89506594e5e2f73fee215f650f07d85f3853b741f44cfc13a3db9518c0f6b1443b074db41936e3f074cb7a198f0091ae1331a04133e0c4bbb89bab4e3b52caf3778b364a5acdba24bc32cd1d3ca12f3666a84bfb244a45c9548d72cb69f53851fe05cab9dafb3443d502ede6589c3322a45591b244d8763fa4fd2e9df0ce83f17681824c41cacdc9aac29b72201cbad5c9d70fefd1486347c783b3478c36704866d9a0e5b4f11ce06d172ad11dfcf1706505adb562ea9a30a324fa3578ef0ccac61f5d920e3bd053ecba84afced355178d8de18779886179f3cef6f78a9fff40d2f3e35315b2c7e4a87f658032b1f2b540b35856a2448a13a12cb0b3b627961a794f2c2289dcd09a7ddda7ab5393c47cd13b279ce0bdfe0e70b411af87bffc2fb353209cbaa2b1d878845ed55e23024975c152f4cf9b0d35270ea910b5f64097d9e9825f2443a35c7f24501566bcfd6d4dab76506abb547eb4c5678152bebd564a70809e930db393ab315aecf822412bf2ef5ec2526a3568942b54416aa6ed1dd4bec9a5029aacd52e7392f78e1fb2162b702de5e9a2678af16e479fc8a45bf1733f2b9c2c8d31d4fccd0c76015c0ce9a0a2050ab7a2c9685e669b2d0df01b3d0b698daf3c3aabd1da6769146edfd1b05537b1c267c8146f8ccc6c1846faf13de98b9a74284e9218ec704f3651231cd4dee1950fd8465be9ee252d15750fdbf12f164a3f36fb9f36c991091252616abb91441b4dc0163bbab866d9b806c276008760bc976a24e3037cfdd93111c67dc72924e306f7f2d6248fb8bcf5108defe9a8c61df5383fda280d8a7e884f36cbe57d86c3e1593bc38ace46998e42561254fc7241787953c034bc4a59a44e4d38982246221267c9946785140e13bea84f3fc56a22b9bfa33ee1af11aa96ef7c9f36b14b3e5424aa5f3f73a59e79644f947b8cfa34c769a83e4f39d303d4b757abaeb98f88c31dea628163e341ee21cb62a50a83331f4cb35e88f0b887e16267c8546f89680c26763bc56ea78754990ae2562a291f77484f33408c7399836653a6df8ad976e41c2998b21dd5b83f4bc66c190ee8c4562952e12bc4670f16deb209b2d1c7ec5720dd63a518d07c7380fd3a05ca7012fd966d6360ce6a6d82c988f215dad41fa5a40a4455889bc266c89bc0053bb425768360fa6f6424cedb561d5de452799b73af66148ab83777983b73a76c5c2a9c2c2a94e299cdd3052356149ed8e25f03a4d024f68112c811761c2d76b84ef1f50f81e98f00d1ae18f0514be27267ca346788f96c184ef8509df5723bc24a0f0c598f0fd34c2cf0a287c09267c7f8df0ab020a2fc68cfc80b046be1453fb408dda1d5a05537b19a6f64161d52ed148ce1193e7d2b936ca3ffb29d8f2918359b2b3b6f93c3addbaa844e1632ea5525dbaf01afa109d4a01aaf2e598351daab1a6cd0133c10a4cf8611ae17b0434d59598f0c335c28f0a28bc0c137e8446789bd6c184ef8d25e691211373152698ef8519d3161c2aacb342e431de9c2f15cb8bd788bfd6882d1e4ac5c075b1b07dcfe1a406aef97af52c69bd95d2a6cb1d6b1fee3c0da27539a6f5d13aadf9c82b77e27aed66b72be9764374f30ab3d840d9ea1e1848afd5980d1ca3b181db021ad81a2cd2c786b4810a5d392ba612979196b3d83cd222e1bce7fb4b2c1796b23af0acd3f865f2714997c9c78b3299374ce974c5caefb5bae4e66deb1318d2b6e6c7d634e32a076a5befa30b87dbec491a9b1d19b0dcaac4849fac11be6b40e15598f05334c20f0b28bc5a279c376bf8e13ba19a353598daa769d47e2ea0daeb30b54f0fabf67a4ced33346a7768134ced0d58d976a6ae40e769938c53244b64ca1a5141f12a662e735747bb73a58a9da7256216d54a713f57644dee595c2a2a0077db87c5c2f9b1428c25563a4fd5acab8dcc5d3697259a63ee263859a228289173f156892755e2ab52108ebec229931527aca2827a3737624974962689fa054ca27db1243a3b64f5b31f26f81c5ddaf3d90c45cecddaa8740912defe58c17a2e56b0f27d3b833b2d0ec0e275be2e5e3c9916d57a4a5dfbdd3360b3e8402cfd2fd0952c01d3ff204cf8851ae10ddb06137e30962617616972714a69b249170e2ff42e49c688e38cf31d8209be34a4e043312bba2c64b63b0c137c7948c187eb04f3b4bf82c5ceede40282cced3c02b3c22b355638b45d302b3c12137e9546f8cc80c28fc2845fad11be36a0f0a3b1fc730d967fae4d29ff1c8319cd75ba328dcf395decfc8f7be5ca4569adead832a7c6e76fd68aae22af0f8358d8b19816d7ebb4685fab45aef32faf79f9d8943b3b28751d8ec374b841a7433ba943bef3ff65a233c47fb3c1f937750d8ec734b851a7411390167c0d116f190509ed045d68dc7c6fd298efb8f6c1ccf744cc7c6fc6ccf79694ccf724ac68ba555334350858349d8c11ba4d43e8f780844ec184dfae11dea54330e1a762c2efd0a56d40e1a761697b2796b677a594b6a763d9e1ee7845535e1d174d67605adc13bf681a518745d399980ef7c62b9a46d661d17416a6c17d898aa65d4478c1d63b9c8d99effd1af36dd23198f99e8399ef0398f93e9892f99e8b217b88856b8e9d87d1795843e7b48074cec7e83c82d17934253a176091784c13896f0246e2420cfde321d15f8469fd8446eb299d82697d3186fe490cfd5329a1bf048bc4d39a486c0e18894b31e1cf688437ec1c4cf86598f06735c2b3030abf1cc3ff1c86fff994f05f8119273fbc02add6f2ebb85abb12d3e2459d165eb5965787d5da55980e2fe97450d5daa83aacd6aec6347859a74153e6556b53c5805745404fd535baf0b801bfa231e09f031af0b59801bf8a19f06b2919f07558245ed744a2bc4bb0485c8f097f4323fcb980c26fc0929b9fff10a65eb811d3fa2d8dd6e3ba06d3fa264cf8db1ae1250185df8c2179479703f8004d7c3f7dac27379ccfdef59b9aeda5bf054ba0773509541d30816ec584bfa7117e5640e1b76145c6fb5891f1414a45c6ed58243ed411ea162c127760c23fd208df35a0f03b75c2b91bf8e3648a8c386ee0bb348273c4a65cf533461fbbf352dd8ed17fa2e3a51da3e787ccc41fa30faf2b36467f37664b9b75b92da02ddda313ce87723f63218772efc5247f1e56f27d58fdf04532f61fa7d0bc5f67ff6263aee5f562ff61f6448b6ff95b92b6fc2f85e50f8e63f9e1766ed3a7c40398f17c15d6781ec48ce7eb90c6f310964dbfd164d3efbb07cba60f635af3d3c1629a447c4b8489a23b542a96a5e816346589e65256c0b9678f607a7cabd383efa9124cfea398fcef42a6ce6398e0ef758a73fb99e320734dd5e93138c6bb52b4e856046e893dae0b99b7677e60487be647964a7be609ccfe7ed2d8df553d82d9df933ae13c3ffe1c363f3e85a9fd8b46ed8f02aafd3496eabf8634a76730ad7fd368bdb96730ad9fc5b4fe1db35535a3c3ed39444f880d12ade7b090ffd085cc6dd59dbf9453bbe77d4eedf643739ca2a784059d37f33ca6c19f3a0d3a6b359829feaa167b35b8fdabd456e8bd80e9f2974e97ee49ea12bb297a109d5ec40cef6f8de135ec15ccf05ec222fc4fc8ecf23226f8df90825fc104ff1752f0ab3ac19c33df282c66965b40ceaf61c2231ae15b020a7f1d4392110987e40d9d605efa344846709c6ee79b3ac1bc866c18416ac8cc482a35e45b18f6461aec0ff50e86fd6d2c128db14834492912ef609168aa8904df6d344824dec58437d3081fda3798f0f730c36c1ed114a77c75e93c0637e42911bd19559067b341a2c25b23ff8d5eef9125eedcea67a8d86884bf51456e152b175b915431b8e0de75dff1a5e36b59f4ea0c150e77dbb955ecf2dae23c4b14e625012751be8fb168a163c1f73d83bbfab9ed79af82f516bfaf171a9633383d79a5a882b2124ac873be0eba46e603cc605a6a0c66ff80d6f82196a55a6159aa754a59ea232c126d3491b82860243ec652baad2ea5f97a0cbd337a917463f33546bc1fe76e06152f4db3e3be1d2426feba0e6ccfaea3734085b00ce5ac8e7e572decaa5a938b960a0d2b80abdb955d21fd0041eceb138c5ebb9095d9a798e0f621056fd609e63da50e91903da5cf30c91dc34afe1c93dc29ace42f30c99dc34ade8249ee1256f2973ac9adc487e1da395f6182bb8514fc35c6a27b5816df602af708a9f2ffb032b7a7a6ccbda97fb032f75b4cf8361ae16f0514fe1d26bc9746f8b801c1847f8f154b59bada822f53f7863eddfa5e0d8256cb564b9928fbf94ff89682419d573f60faf4d6e9d34c7c171b6690107fc4f0f6d1e0ad0e88f7274c785f8df031038309ff1963d54fc76a7c54daf9b759d7a55c9698dc522cdba225428caac1fdeddb2c5957578bf1072e234bd4faeef4906d03b6f27ec162d65f17337e9bdacae65fb1e419a0499ef702a6fd6f98f0811ae16b03a6fdef98f06c8df0c7020aff03c33f4887bf4b94614d741e578ae66489e8f2842f12fec4a23a5813d595d9c1a2fa1716d521baa8b6d1947f6e14d7c9e8058bdadf58e84375a1f30a76191816f0f6eb0e12e63f18ce611a9cb705c4f92f267cb8ae220c28fc3f8c568e8e166f34a8c3dddc2932956c162fc21d821501d389459068e5eafc6701a315c1848fd008ef322898f00c9d70dea5cdc3bab4f92975691be8c2e14447ead2c69b4ab958e41a9846a94f646c88e9304aa74367a943ae984ac91f973b3d493e096a95d39e717d2da9eb9289e952a0d3a58f4f973551c37ff1ac38750d1b611a8e4e446ba2f010f8b55ac8dccda4978bfd5282e5afc6982e6374ba64015d82e9c4bfae644107a99a601974accee7343858066d8a457d5b5dd47bb3e8bab6449c82e36ef9e236cc54a5b45ed4ba2b59568c71076b8a35c3f4db0eaba22687aea29a63618ed385e91e60e9b94e53dd45b50596ccdb6b92f9a980c9dc12133e5e57310614de0a13be8346f81e4382096f8d25c6045d628c8832d0d8be19b6dd2df7032f88da5c7504380c6899f450f2b34ad606f4e8b5c1f49f881913f77886ed55b6c59264922649ca0326493b9d7091f5c2ba5fda636a4fd1a8fd5040b53b60c2a76a84b7191a4c78474cf8348df019018577c25a51d3b156d48c945a519d315b2d8cd78acaadd35654174c871db156b6d2c1ad66520fb92b16f24eba90db8190e789af2b4465e36f0304d1a01ba6c14c9d06dd596c3b249e26a9b53eba63863d4b63d833870533ec1e588467276e7d782d0d3e74b4c6a97bd5290caa108f36ca12599c07897c4f2cf27374355bc0c86f83099fab117e5940e1bd74c2b9ff74e7641cd99b70c15998d6f374cd94805af7c684cfd708e727ec0511de07135ea411be24a0f0be98f0051ae1870514de0fcb260b75d984a7326f430c0bd4fe09922dfa6391dd4513d9bb02467600267c578df0f3020a1f88355d760bdb74c9d649e69aec1e097f68ec208cc9220d931639c1980cc684efa12be4020a1f8209df5323fcb480c28762c2f7d21517b9c1840fc332dd625da6ebc0fcabf2ea66406a38a6c5129d16fcd42e376cee74d8e8fc66b95314a8736a83849b83a12dd6a01d13106d2e267ca9ce28020a1f81115ba623d62d2addbcf9eff187a682a5611e16dd124d749f0b18dd7c4c78a9aee3312298f09198f0e51ae13705143e0aebd5acc07a352b53ead514600651a63308be9644f986cbc41eb43ce957889ab32254cf6634a6c7de3a3dd44277b7555f2c9ab2c17c0063b0f05625eacfc4869b5adf612c663ee51af3f9282f98f96c8b456fb52e7adb44e5f3690c2e0c729d3c95b591f5fa1603e534c160c3badb61d15ea36b68068cf6384c788546f884fc60c2b7c7b2e45a2c4bee9352961c8fa55d65bc2c9957e75972074c8faa787ae40a3d4a84fd78eb1caa42e83101d3a35aa74727a047a9f6d0e4d43599886952a3d3a4b5b690e22bc90a259f20614fc2c25ea70bbb4bdc020bea905ae13519cb68eb3519edb191c132da144cf8068df02901854fc5846fd41511a382099f8625d2beba44624c233d0ef4e998f4fd74d21bd716ea39299cd83503c3b4bf06d39680980a31e107e812b82098f01d314a0726e3dc898364274cf0412105cfc4701cacc1911d10c72c4ceb4d3aa3e136991348f9d998fc43b0d23976079659a25c52034cde9b603d8939982687ea34e112f812fca08935170be5305d28c283a6d9d53d48883b6b42cce1278c44f8c17ee93a94a8c8b9e347af043f90e8f0085f8f140d46348a223e06628b8123227c9e5cc79898c50b1fdb38609e2eadf8ed91113e1d3a5aa51d676d6a7c5e8fe733629226134f9af998311c8539205475bb5c8cc654cb48059d9b56849518476b4a8ca3c6052b311660913a066bf7f14d1edc790525b5fd06afed95ead1360b313d8e8dd7da8a85bb46b6418384bd8b2ecf6d93ee3ce7ced6a84c21cf1d17e1f371a3110dc78e9c41725cbcd0b11cb7ab8e5b2fce6d711ab9b9dfb9b5c97c71ae38f751cd118b955c077f550a4c4f88f00509d14cd57f7ab2270ab27d63629eaa7e18f5dd30c7fd49611df7bb63924f0e2b791126f994b092f7d049e6e5dda991f0830d7b6285d269211b817b613c4e0fcb633126f98cb092976092cf0c2bb918937c5658c94b31c9678795bc0c937c4e58c92598d19d1bd2e84a3195cf0babf2729d64de003a3f1995dbe38257602a5f1056e59518e50b43522ec354be28acca7b63922f0e2b791526f992b092cb31c9978695bc1ab3b9cb42dadc1a4ce5cbc3aa5c81d9dc15216d6e2d26f8ca9082f7c1045f155270a54e30df6fefea64047f890baec2da03d7d4417ba01a338d6bc39a468d4e32fffeba6478c4596dbb0e037d7d48d0eb31d3b821a4696cc004df1852f0462cf56e0a9b7afb62a97773c8d4db0f4bbd5b42a6defe18e45b43423e00137c5b48c10762a9777bd8d43b084bbd3b42a6dec158eadd1932f5366190ef0a09f9104cf0dd21051f8aa5de3d6153ef309d1322cbb98df043add3bf73ab6e63efbaddc1f5de64d262284eec702c2dee0b9b1647e824f30c727f322a1f8f0b3e12b3cb0742dae55198e007430a3e1acbfb0f85ccfbc760a9f770d8d43b1663f1484816c761821f0d29f8788cc56361599c80497e3cace41331184f8484711226f8c990824fc67a5a4f85ec699d8269fc74488d4fc5347e26a4c6a7611a3f1b52e3d3318d9f0ba9f11998e0e7430a3e1343f142481467611abf1852e3b3b1aee14b75d0353c07c3f172481ce762385e0989e33cac887b356c11773e06fab53a007d01a6f6eb61d5be1053fb8d3a50fb224ced37c3aa7d3126f9adb0922fc180bc5d07402ec5d47e27acda976192df0d2bf9722c93bf1732935f81097e3fa4e02b31c11f84147c1526f8c39082afc6047f1452f03598e08f430abe16b3b74fc2dadb7598e44fc34abe1ef3796c0ee9f3b80153f9b3b02adfa893cc57f87d9e8cca9b70c1376186f14548c3b81913bc25a4e05b30c15f86147c2b967a5f854dbddb3083fb3aa4c1dd8ea9fc4d5895efc00cee7f210dee4e2cf9be0d997c77612cbe0bcbe26e4cf2f76125df8349fe21ace47b3193fb31a4c9dd87b58b7eaa8376d1fd188f9fc3f27800b3e75f42daf383983dff1ad29e1fc234fe2da4c60f631aff1e52e347b0d4fb236cea3d8af956ff0ce95b7d0c63f15748168f632cfe0ecbe2094ce57f42aafc24e6b5fd37a4d7f6294cf07f21053f8d41661921213f83418e648483fc2c567c6664842f3e9fc3783408cbe3798c47c3903c5ec07276663282e3e4ec1731d751a36404c7711dbd84416e1c16f2cb18e4262121bf82b1681a92c5ab1ac139bd793659c5cc383975911c4dacbb11c8663a66da49d1cd33f8a4e81c16e4f4d454f4c5264bbfa64b769e3a2d924976ae3d22f8759d607edb322376b589fa2f26804cdcaedec04ac95675504abe89096f5d07c2dfc24a8736614b87b7b1167ddb6452334e8bfe1d9d60beeaaa5d3282f9b03722f85d4c70fb9082dfc32077080bf97dacd1dd311995e334ba3fc054ee1456e50fb1ccd8b98e32e347ba00f8ae735d9261f2292ef863acbeeb1ab2befb044bc56e2153f1532c15bb874dc5cdba9a946fc81c59c0ea673991aa89822d1dea9174edd853d48e5d6362978c0e588df71956b46f530745fbe758e2f70a9bf85f606a67d581da5b30e1bdeb40f8975816ee93a159b93845dcce738c653e9bc276aa3d2f7436e3bb32ac1709bc4a26fd70b1c6b1d0793fc779e36d5da96f18e9269ef1afa16971c3af606a0bdf20e5c957582cfbea6279446d2c17384db40ab18d3acfa0abc5df8522ebf2d8f08df7dc0c5a58fba5b75375f421809592c77cf1b6c4915823e2c5e546d3f324f0ef83e981492a627c75e40af1369a29ccac7ede0b1d394197fb7e8d91ee87d9130cd18d53bef31b97568553282e766cc33d09c48d6d915cbfebd7d6fb2dfebcaeece91b2c96fd75b11cef8b2564eec6739a48b1d5228e7e2da35308be899757e0af82c4ec7f58cc06e862b64352e9a7f697572b46c3a79cf72648dcbec5e2365017b7025fdc6689d4592963c6ef36d45b4cbec36292ad8bc971692ecfbcdff0ed4bcb1da91b195f69efdf6329392b87ecf0584c159bbaf366c6547427a5b065dbf718f5413aea1393ca1b33058d2a234ab51fb0f80dd6c56f26a155f1a7fb886078acdce6b06ef3dbba48d51fb1580fd1c57afbb8b1c6359d27e2e21e7eeac651d5c6fce9324928365fa49e9a3f61f11aaa8bd76e815b76f3c59be8b69d4e82fb6c6e6d3950e9d407bcab13a625984a3aff8cf118a6e3b1535aea6ceadafc172ccec3b1764a301b5036ccf70b72cf8781e91cd42282c4ec572c6639ba986d8bc46c81c89fe5b26de276b555af65a1ccc52531a941d347f90d8b51ae2e46d3084b5f95aaee7e344b99bb4f4eddc5f4772ca62374311dc730f7bbaea4888e41b178e6c68e33992152b952f486f811781beb30567f60b1ca4ba64f101d2e6c212c10a950e97ccbf3e18a38b55fb48cba8bd99f58ccf275319b9cb0e44cae578097a1f1faaca996947f61711ca98be374d426798b77a9f3918aabbb93dad4da234ce397257a99755d13fe8dc575942eaea5c4bd876aa726a81494dcdec14261ed65b5254fddf48753e1f40fc6a940c76941bdf5b2e2130acfe15f8cc3681d874901f3860939e23f2c866374312c0c18c35d8445af4152a43ee2cba7d768e33b5617df7984965d95425ba32e08443002dbd6551bc42ddb268216087dac32b0586d87792882c66a9af8223685fc654ef27283c4af0116bf71baf86d17a2e5582d6a23bebbdd72d9cfc3635514f36d903835c4e2b47db034f3973d13853fa1549c1992c8f2286b8f4c2c7ee3931911c05a8f53857fa858f6dd62dbf1a9b51e536f2337c262b9832e96337cb18cb5435e5a2e17a9c74b465e6e7a318ef512a5e655483db68db1d84ec06c36881fc025309db96d43ef2d1fc58adfe2afabde40132c7e1375f1ebc7e27b7a8b1cca145a36c5b49c14df5f1b2415e6a7940a94e549332cd69375b11e86969745b5d32f60b9bfbc768c82b7716ab4edebd4c66c9a637a4fd1e93d3661395828c67bb947b9dcc9e5954edc568b5d59139585755506b4c0e23315eb15c4cf23dcc33157b494d5413541c787dc32b3ee62d8128be1b464fc1efaf19e42617bf1ebae748ef9b4c2e2381df33a26533b2713cb74d7d0adb198ce48a6864e6ef4cecd872adef599ae6db0d816ea62bb6bc274a51deda01e07698bd1d85147637746d7df55ad9ad43d5e38ad2044da614476c2c64ff4b568ec04f8faea47b5c7623413f3d625f6b52453a625e3b109eed5493de777c038ccd271181c80834a53754a415de5ce8e98c6b3751a0f48585679a392a5e2299fb553376db84e98a673749a8e8ed3f6f45b7ab4e6ee995f9e779722bf74c6e232171b0f0f5602b8255decdbd8deab3a2f058f69ac9489624485f74982c4b90b16e79d7571eeefb3342f4c6a3beb8ae9394fa7671ec3bd097e9da74b9d936d81a45abf74c362305f17833deab9c68516986ccdab7e13844a778c4a513263c42ac4207e302f66588eab9b5aa70716b305c9f42382d6b9f5e9fbea89c57461327973b2b059d73eab817fc8b5f102363241fc74f996ff2a480cb6c162b04bf2f318799841ec10c60f7b5e5729d40b8bdfae985f2c7e7bc23bf7c6afa33a77082f35b03373e29534a9d56d5958ac774bc51fe3a6ea7ce7e3a5cc6dc32f63f53d7fbb3716c3dd93c9797ac2a9d58a895bba8d9dff45227c71d15421c5f56e5588dff036500e3f6a29925b5bef0dafadcf8647d57dde731efe6a2735789e28aaadb9f8e2aaf8121665b84be6c57f03e561826ef11f59cefc8bb7260bf9e5b2bc51d63a5c1072e779f24569c39d364f99f8955a86962816ba3a7c38a8c561ec12c7694f645959441c250a6539a4b97b7eab8be91e3c55fbc954cdc8e14dd5c89014ad29092d78680df436d439862ccc1d3add5d01b3652f32c2d7d5f10c962b2bfc32911c6a0a7569e2f0fc9b95fbc31b2604a8364f42710b40c6d789eb2a8ccc9dbe56c95c07e0594e0234ceccc8e5e9b01725acf602164f93b922707cc6b90dd8de6be8615b4c898daf529d22ba006b1d70ee642a55416300abac40c8d71d2b844b2811b6716e548f7786183be4028a453b96cfd999c3565901eca6261eb0624a601d40b956b515806bd3dc03b794125c3b0d382e90cf83e0238435e2698915d096300fda326a6b8bce9ed39c7fcbe4843a3505c1b53a1bc065b7f0c0955082e3e77cf3b1f464ab051be09d062a85524a78cd41569d13e58cb301538f1e1ea6e594989a024cde5a001b101dd5c943b48212512381a8caaa32aa614b0fce4a4a385d9c9b39b56d7e353ae48ec9cf13857e0de333cc79313f57facd6c0038b4a707b08c12601316ddc7e4036636007aa9ad07686f4a406d41f361b2f861b5f07ff0facfae126b425f0fd92aea427d8e18aaf2b627b1a351fa33a8f7caa9db56caaa781bcbddf490ef09a173f4d8016f5c3f0fdeea7495596a09910d80ce6bef015a4309a81bb0aea96c8388754d6d3b9dcfc52b11adf879227b9688cc5aee04680344fe9f82584109916fe708e17197225f1a5d5abb3b6989e59da10ec0c9b89612654b5921287bdb285b680b84bfc206546d407b6c9f74792b78c500a76ea80eb84d3d81df1b7be02ad359a3c2f5851385ff828f377a2b296d80b73f702c5651c26b016a546fb99cbb48d70650b781de403525a8664c8d324d61ee1e4cbcfd6f47cd993dca8354433d20324b9451ab7c5be44c713eaf1421d9008c8f1a2960eba8fb982afbcd763ee3e5d6724760a1f3af5dc87e1eee215b4fdda4f00f8558860a7497365017eebcb4b2750ac155433c501bd33b52143d71b6c4b2b6573918d0dd977e5cd2ab156dee143d95e941db8fdadaa68ad9143522706fab386febc02aa7bf59e6846703b8cd00dcfed4d3a2e08ecd368e7ef3f98d0ad601f4732ddc695115428cdd3e8b71c0ca0ea404d79a41bfbfbb8a95dfdb3590db0f4cbf3b88dae7af70d9d50ebb09b4c30ea61eab9ce764c3c92cf97d7c6d00789470f134cef409f72f65497d627130eaf814e8d6ccf5e8ae154fab658b2e6a4a345f43699ce69be094e6ec94bdfbd9096bceeca4679865079e1d949de254d3eca4dc09d921ddf5d901e60f6707aa54b3936e1d67076a1266a7549e640772306707ea1265273513363bd0f4cfecc07e5d9dcef884bfec98e935d9719da1d9da0913d9da21c96c647653769cc961d9c8e07976823194ec9466c2642739bb213615128d5767230d82ec048e9bec24da5dd909174664c7f5796427e96fcb46bdbdde1a26fddaa35cbe86e990ffcf9717e5f21aeb500e811fa5c4ff73db588751b7b178cabaabc978bd177f7fbf114e4bc7a7438f181da24f25536d299d364da35a5bad9289602a2dae356016ebe126e1ccb312e70500e71126e1ccb712e75d00e79126e11c6925cef700cea3d28173050a14aabf988d650574385b50e1ec0e701e6d12ce3156e26400e73126e11c6525ce1b9987f35893708eb412e7d900e77126e11c6d25ce6f01cee34dc2596025ce6700ce134cc239c24a9cf301ce134dc2996f25ce8d00e74926e1ccb312e77280f3644a9c1d25ce65d287e4dffccb55dddd582a970e642615c879a0c5790af50200e5254cd663cebfaf14dfdad7d19c0a2cf4544ab0bd1874df263f846433dcbe00ee69d4f3e0e33945a0385ed393a16c4c85b2041400a7534f01592c5a97d140ddc115fe1119bc6e54f0ee047678463ae08d493f3c32cb7b1ac03b93125ee7047578742626ed9b93c1fc1bc03ccb2498a32d84f91f8079b64930475a08f30f00f31c93608eb210e65f00e6b926c1ccb310e6cf00e67926c1241c582383f90b8079be4930097be56430bf07302f3009a68d3d9c1f00cc0b4d8239c642980d4077f12293608eb510664300f3624a988325cc72e7a37271555361e1918b8b031ddc48eaef6c4f85fc4580fc12fab5ed2bc5ec5277b6eb0a01cf3e675b0b507e5e5a9fceb6e8232a08ad6f1315ca1b81f55d468972604c862f16c2a63175eee824e7ffdc3ad70977700d8b77ba04296cb2d215ee4e7a793aec36b9aaca469459a008b88212e5369a2220d953c948d11e4f85f60860a557525be944b198a7422e61e08785f0f1a1357259935ad8e12e97b1afa26a08acf4aa74ec1c3ec2f9ff6a1978b1a8dff9539b7df287018457a703e1e8ad0ee17d00e135f46774b803bfea3a51a8e09efa65f300ef3d00e2b526cd7a279dcc4586f34050c95c67124ed2d94764382f0538af370927e9dc38329cf7039c379884937428980ce7e700e78dd43bd3b9cda0dcad684ec71ba0eab9291d530bd5cae84216bbbad6e63abc1db0c39bcd99a465a3a3f80080f29674a084b334673a9dc3e97225fc72e7471bd261956428f705d9fb56fa010ce8fa5dcc56097493c4daf15552d434e7ca97fec76cb5654159d912c0bc2d1d7ea16ab15f4755ed50855a58afae3aaf661ee5e40432b49d4096bfdd54b423ac447b3eb0da3bd2559abafb7bf02134cf075f952e67475b2a94d9c04aef4cc77070f2cba9c960922d6ad901d8e55d26c1249ca84006731c8079b7493009a71d92c12c0030ef310926e1845832984301cc7b4d824938559b0ce67600e67d26c1b47155e55800f37e9360124e3b24833900c07cc0249884a3e464307b00980f9a049370aa3619cc2100e64326c124ec4c92c11c08603e4c09338bc57a3983cdd724acdfc9e66b9e0b3a988fd4e77c63ffd81061294ae6911f0c6cf551936012d6ef6430f301ccc7d231ccc6bd48ebc4d810df99384d9e23327cdd00bec729f17505f862a7c17261de661336cf3b7a09007d221d53b772b7baa95b8702844fa60361c15687707b80f029b39b43845e4db2e6d02ba039f474ba26177a03c1702c937c08986cfce71060a3cfd00fade13bc1d7db803059f66f0bd03e6bce9a0b1b97fa8f07289fa344d91d6475dd1c2457759ee9d788a736cf49da0ca03e9fae5667a2433c6c06ba2d00fa8249fb1a8eb5d235d71ed4ef2f9a84738c9538ff04d6f9924938475989f31a80f3659370926e994286f36480f31593708eb612e70700e7ab26e12cb012e74300e76b26e1243d65880ce74c80f3759370921e8b4386b30ae07cc3249ca4873691e15c0c70be49dd2f4aeea8c77942357ed82461bf681615d05100e85be9d81936dfe70d4d8313996c4f840a00efed74b83e60d6d66f3711bdf70ce1e4ae2fa9a03e05ba96ef980895d0494706f54900f55d13a1124e9025837a3480fa9e8950096b7832a80703a8ef9b089570f21719d4fd00d40f4c844a38b1860cea3a00f54313a1124efd22835a09a07e4409359fc50ecc452f289cccbc2390bdb125ef40e5e853e9bd93aa8b448b560da61026423e5522f0a35a54227c9cae8587cbb4c77ea7699e09d918fe3700e5279428bbb1d881bc7823faf6ae8cff0420fdd49cfd1a6c3c8d633d286d379bbb789b70423859c67f1c58e967e66c404dba2f18ddbe2200e6e726c1b4f1d4986300cc2f4c8269e3a9311b00cc2d26c1b4712ad97e00e69726c1b4f1d4985500e65726c1b4f1d4987200f36b9360dab84bf7ce00e63726c1b4f1d4987900e6ff4c8269e3a931c70298df9a04d3c6cd008f0330bf337b898d8d27c42c077df7ef29f1b69478dd7d15cb452fde955d46b9f683ec287106ecf287741f1211643b40fb9c1e07019bfc315dcb166609f7f02a9f3f7e8af3b34a11a2cdcb167a025bfd891268abb899bc8a0e5d332a741900ddcff5b9c4cbfe5d6d3a0394bfa4630b81916c6bda42a008e0fbd58c5389dcb1cdb5c262d5401ba1657e4a85f62350e1fc66d296fca49d49324b5d0570fe6e12ce3c2b719e0070fe6112ce7c2b71de0a70fe69124ed2f386c970be0470fe4589b32f8b9d9a30956d607c9e520d53f3e8e7383fe79b4f578a19f5c5cc3debad3c3d0d78b28da73b81baff6f93d67f8cb5724fda0ec066ff3109e7182b71fe03acf35f93708eb212e77500e77f26e11c6925ce53004ed6c0209ca3adc4f911c0193109678195389f0038334cc2493a91860ce72c80b3814938f3adc4590370363409679e953897009c999438e1c0c67cd1e7a971244f64fceceb8572f57189587d6cf7a17bc50068234aa0c12671db3837a902f4891a53a2549316d406bfee7af8a5c211a23eb27d5fd05260974d2861b60630d3bc1e9e0cde0400af2925bc70c7ec1156406423ebdb834cdecc54b4a42d4f32b49703ab6d9e8ef233b9495f0556aed41801ecb48549306d5ca9510060b63409a68d2b35860198ad4c8269e34a8de100666b9360dab852a30780d9c6249836f686fa01986d4d8269e34a8dae00663b9360dab852a31b80d9de249836aed4180d60763009a68d2b35c600981dd3e1f4189d7ea707d914c4bb9807af537d7a32d3b64dd5262a940f003bec9c0e3b1cbb1539df5e0776d885be445ca9392462bec364195b26155a2e3645e513b8ec1b9e680e6076a584992962532a0410aeb2e84705aa2300d52d1d7ec9d4165311b617c9fc92fb82d2b07b3a2a96e49a3836f6b087012bed916e2bd5afc0281215cd1a514e7271ab69d192ed81fc02b0d29ee9986890fc0a0cc2a63859c5730cc0b98d4938f3acc4791dc0d9cb249cf956e27c1ae0cc4a47af3bb9591b7956ba30ee04307b9b04d34617c68300661f9360da38887b3380d9d72498360ee2de0260f63309a68d83b8d70098fd4d8269e320ee4d00e6009360dad8c5bc0ac01c68124c1b0771af0630b34d8269e320ee1500e6209360da38887b258039d8a40e25e9dc4bb20e6535c039c4249ca4cd23329c17019c434dc249ba888a0ce7dd00e730937092aee725c3f901c0399c12672f16bbe14421e36b0c2bc41613e54279f7640c75a0231fbfb47941d5e7cc839b4309b79d843bcaf9ff6aa6567371ccb6affdb91020cca544a83644493c4a3499f9f7e99ac82a05e08d8c74c7aee61944905f0385c0084ac83d25e472e7230eb854ee383387a97d66a2cb582f2aa460c9769ab90480cda3049be5035b2e6682540b31de5c90784d7f1b7b512701bcf9f5391a9fb633dec8a679f502284752a2ec2d50f29a7f9e00c637335d277fee59eb62b64a00e7db442f73fe76df4f73aebca540b8c331595ba029a8c84699b3b8dac66cbf27b0d5024a941d12a05431259dcb74448408e3bb00e3e874544eb1d3c492dd0b9ed0934fb617fc1900ef18735707130e2c93cdc27b1b94a563d3510060f5be57001096a36405c0cec042b7a5c4c84f2b982bdd256a738a4261993cdbdb5797b701f6b75d3aec2fb7d6064ba48ba442f89cecde83fb5e80711cf52008073645045cca2a818fa9b816e73cf196cf8f27f435cda582391ac0dcde9c252f840d23b2bed01da05c1c9f0e94b9717aec76bbef5e0656b9433a3ca023b73a0fe8de00e1847438e7b8354e15cd9d1aa1c44ce727ee59d573d87ae1f3ac74def1b6e65aabbdf36300d88994601b09b0bce6760fbfb10f557b806a9239cb5e6c9c7ab8134039391deb2947fa6a6b9b5b8ceb00bc2994f0d4a1377c316ada0fbd21eb377f05f04d4dc7d879f21bdf13b613c936206d05da89d34cc239c64a9cbf01eb9c6e12ce5156e2bc14e09c61124ed29359c8701e0570169a8473b49538df013877340927e93e466438ef003877320927e9996b643867009c334dc2497a481819ce7d00ce5926e1249def4e86734f8073763a7a41f9f5d10b22eb444e03f8e69834837804a543830ce7a1a01734d7249ca44b53c9705e0670ee6c12ce7c2b713e0270cea3c4d944082875ca49777c91d4d14b3661b511281be753e21ac8621dbdd1d356dc69d6abc5df7c38a246889c2a00f36815096a6998c736830a761e805d948e7a7c8468f46c2d9bebed04b2f682748c2df281b1e98c0f76f121b1156274b1d2ea21b06a60810bcd99946ae3ce31fb036bdc851225dfdd6fae28034b989a368d4d6921dcbd90ac0a6a026c725753e74d92761cc9c67f32808dee662a5a528f1119da7380d5ee9e8e05fdc98d90e75bb9d7d10b00e6229360da38e1e03d00730f9360dab8d7d17300e69e26c1b471afa3e701ccbd4c8269e35e478f01988b4d8269e35e47cf02984b4c8269e372bd8701cc629360dab8d7d12300e6529360dad8677f1fc05c66124c1b777bfd18c02ca184a98ee30e320581d03ac98679a780de7aa96940092d940ce8540074b96940097b436440c702a02b4c034ad8232203ba1d00bad234a0849e2432a0e300d032d380127a93c8804e0640f7360d2861ef880c682e00baca34a036ce8ecb0340cb4d034ae85922039a0f80ae360d28a177890ce84800748dd91bef10d6f9641bef9c05f05698d3ab1f63e580c7420073ad49306df4d1cf0730f73109a68d3efa050066a549306df4d1cf0130ab4c8269a38f7e2e80594d3d152cdeac3a57f502b10500a155665281fc1080ac49c77ca5d8865232339608eb75b2f94ab701b4eb28d1f6d6a075a7cb72786bd88e6262f7dab80d7d1bfbf59ca702bcde9c2d536c6c838e00283798b47c70ac95c3205920eb6f3409e7182b71b60038f73509e7282b71de0a32fb7e26e11c6925ce8b00cefd4dc239da4a9c3f019c079884b3c04a9caf019c079a84d3ce090e8b00ce834cc2493aa3890ce71100e7c126e1243d0e9c0c6719c0b9891227bf51db8ddbd7336f0d301d6292d58db572f4b22d689e1f6a124ed2210c329cbf03eb3ccc249ca3acc47919c079b84938475a89f30480f30893708eb612e7bb00e79126e12cb012e7dd00e75126e1b4735e5221c079b4493849171092e1ac04388f3109679e9538f702388fa5c4d983451ffdc939d4303eadcb7fe0a77f472fc26135b21d6b4a4173fe384aacf0340c7e6e1057d57f3ab5ab7ea918c72c16f0eddd0ae83360afc753821de0b3d7a52c76443df9b177421ba63bbe0ed8f009e9d8b86a0cdbda0ec5791058eb89e99819a2acb54ad81f2f5ba74978a5da4937e41317c8f65f3a1f58e749e6ec0966e30617fb00942753a2ec062a2b759ded7cce592c7704173aff4e61eafc219baba98100e929e66e6145386f9e6e4a1828534f4dc77694a3d9d6b4adf41700df69662d93c9b37206dd0c90d54f370da88d2be30a01d0334c036a631f7f26007aa669406d5c195704809e4509541d8e37c2d702b5f974b789a0023adbec658584b649b6acf054609be7d467bf28fa8065c209dd9ba8507e02509e9b0e57333c6059d760b7db19f20ac8f8e799bb4c8630d39395a9d7034b3d9f126d3f16ed672a677087f905d2f9bc519c84e0b6024ad974f9e3e80281b0a93f940af36100f305e62c96b1711bb639a030b8301dad0065b13cbb97f876a6dffac69f7607967a513aaa2eac15107b7814610f8a0c6739c079b14938493ba46438cf03382f310927e99408329cb7039c979a849374761e19ceb700cecb2871f615380b9d8f66391f95388fcab5e3f77c82c42a019e775997397fbb414c73aefc372516426e07eaffcb4d9ac63396d9b8df5d4f60b3579884738c95382300e79526e11c6525ce9b4066bfca249c23adc4791ec079b54938475b89f33b80f31a9370165889f34580f35a9370dab993ed0280f33a9370921e334586f34080f37a9370921e034d867305c079433a26e38ca88fb150322fe88ea09d79633a069279c0cb85252ad96be427f6c18b00dbbba9fef7af53950c1948b2a9b455c00a6f3605a48d7392f700206f310524e1782619c80b01c85b4d0149e8cb2403793600799b292009e7c893817c1680bcdd149084936ac840de0740de610a48c2a63719c83701c83b4d0149b8a0800ce41b00e45da680249cd34106f20b00f26e5340121ea94706f23300f21e73d6b6d97896c14a80f25e4a949d5990295ba3ac3cf0be3580799f49306d3cf0be0d8079bf49306ddc7bbb1980f98049306d5c0fdc1cc07cd024983656408d01cc874c8269e3613a4d01cc874d8269e3613a9900e62326c1b4f1309d4600e6a326c1b4f1c0fbce00e66326c1b471a5451700f371ea31c6a962d719ae62a1045ae6fcb8d8b9f29f91c1235b58c5e7bf2a784f98b39a92b0eede4485f22160874fa6634b346f4b14fdbab4225629e6a957b1e542d86ada51c7e3a9c0ae0536fa14fd7c75b8f8cf5daaea6d31c505f2d918f1cb511b1b4ba700eb7d3a9dfb24ba40f90a4b5ea64ed17a3aed3d3aef7580f519735654dad8021d048a8167d3bdbc3af91296102d5909fb28b0d2e7d299f9cb1c251682ada7f0160161e6276b11bc0fb03e9f8ed96fa3b6a2a9833780ecfe423afa48c98d118db0b2c3790eb0c4174d82696387f37200f3259360da38e4762280f9b249306d1c723b13c07cc52498360eb91d0b60be6a124c1b87dc8e03305f3309a68d436e470298af9b04d3c621b7a300cc374c8269a317691380f9a649306d74781c0260be950e9870dbf24216bb4f87cd1b967fcd3c986f9bb4870c697d4e867323b0cd774cc2996725ce8b01ce774dc2996f25ce7b00cef74cc239d24a9c9f029cefa76311343f2867eb3991e04950f57c900e7c795b15be2900df8794f83a307e5e75b13cb58d8b5ae37cbed2f9bc423486f615f33ccac49d7d183301c68f2831f6625e6bd21dd675f7809b284672cac4049a898c6f4eca87d28a1d01bc7c2cb1ba75b910c0fd381d6393a91c87437a1601d90ca551a0f2f9c454b4a4ae0f32b41703abfd94ba648dd74c5231251de63d224284f11d60a19b2931666930063bf081d00f4f76e0c3e900ef67e6160084c3c26405c09ba000f89c126d6f817686b0cf798ccfe928952d8112214acda9dbda76816d06007f918e12169bfe3559582cf149adc75395b0bb8022604bba3ca1aaedaa3a025ed7c0eeb66a5760935fa6639e328499b808b017ec7400f62b4ab0ea3ce17cb6b59d277c2e40f8b539d3656d9c58b32340f90d25ca3e0150ce77c22c17e34a739cbf9433a58ab65a3a91aa5ada15544bffa344acce1d54d366d70a4fd4cab8366be3f0f11300e8b7e9f0db27bf69be8d27b7b60438bf3309e7182b71fe0a4ad4ef4dc249ba3c9b0ce72500e70f26e11c6925ce2301ce1f4dc239da4a9c6f019c3f9984b3c04a9cb7039c3f9b8493749e1d19cec900e72f26e1ccb712e76a80f3579370e65989730f80f3b774e0841e26d7d3b946dc7bbb35a4c1af44e6a5ff12e0fc3d1d7ea5e879a0558e98d2f4202473cd2d0308ffa8cf6d2ed256f590edddb905742affac4f94d1ee0e1b976b6d0028ff4a57c676dd745cd00699a9d3e030fe920ae1fd2063ff9d8e01368eb0b4b65a51af6df7bb3f0a30fe93de31f6adfd4cf5ee00edbfa64e5f206d6792358c3e0468ff33152d692d4f86f6348096354c43d594b7d58d65660384114a84ded161f530ed9b6cda571f802f83129f9af391dc50709e9583c15702980d4c826963b3fd2a00b3a149306ddc65e12c0033d3249836eeb2700580d9c8249836eeb2700680d9d8249836eeb2702680d9c42498364e93391ec06c6a124c1b7759381dc06c66124c1bf799bb1ac06c6e124c1bf799bb19c06c4109534d2f0c32664e689d64e3924381bfbda56940092d940c680e00daca34a084bd2132a00300d0d6a60125ec1191011d0480b6310d28a127890ce86000b4ad694009bd4964408700a0ed4c036ae3eca3de00687bd38012f690c880f601403b980694d0b34406b42f00dad134a084de2532a0fd01d04e9440b358d81d18080b00b2a1b8d5006f674abc6a24b3a03e4632c9faf19f320f5f174a7cba834b929fa840d8bc279ba6702fb0ccae9468d5f4af11b53ea712e66e8fcaffb67d8bb507808576a3c4187cdda58d7ea66d8055763709e7182b713601387b988493f4f051329cb780ccded3249c23adc47901c0b98d4938475b89f34780b39749380bacc4f92ac09965124ed20dd3c870ee0e70f6360967be95380f0238fb98849374f49d0ce74a80b32f254eb89e48adbb9ce27c5829c2b079a1e01680b01f25427564639eafc76eb3a3630d80d79f129eda722a57d81ddf9f7b2d9bcb4a65afdcdd68aa5408548797783b7757596d9ffd01e201e92831b1f232f61813c2b122329c7b83aee5409370924e4c24c3793cc0996d124ed26d29c870de00700e320927e90e4964389f0338079bd4da1c6be5d49a8e00e71093708eb112e7bfa0661f6a12ce5156e2bc1ee01c66124ed223a0c8709e0a700e3709e7682b71fe0fe0cc3109678195389f0238734dc2497ab82319ceb900e7089370929e464886733dc09967124ed245ae643897029cf994380731ffaedbdcd354e2f0e0bbd1a8787a5b00c1c06050139dbf2ac54430d21d6c7a661001df0c1afa2329817764f117754597ac6420c9b64eeb072c779429206ddc83ae0b0059600a48c289b364200f0720479b0292704a3719c81c00728c29200957c091813c09801c4b09b2870089ed165b4f0791914d94ed00b06e4b8935d7d768aa41671ce39bff4d76be58ede85321ee7854d3d4846a4ed5847a1534a1b6a3c4afd6c527ebc9279ce640e6c75f01608e330926e1126e32986500e6f626c1b4718469370073bc4930097b4b64301701983b980493b07d4a06732f0073824930097b4d6430170398134d8249d8e02783b904c09c64124c42df2819cc620073b2493009b7ba2083b914c09c62124cc26d2ee84ee00030a752c2c44f1d9ee6fc5b26309638f1ad1082ed3f757837e6819d46ef3099e97cb04c4cab85abdbebcd6142b6e6bd31c03a9d126bb0634e6cdce2772dc8fa33285186dba6dfc6f5efd7022b2d4c471585b99da3ad74b4959ba44f0376baa349306ddc247d3a80b99349306d2c41270298334d8269e326e99300cc5926c1b47193f41d00ccd926c1b47193f40900e61c9360dab849fab600e65c9360dab849fa780073679360dab849fa2c00739e49306ddc247d3680399f1266160bbbf51f61fd4ee6063919e02da2c4db9e796ebb75c22dc7176f2f15eeba346dafb6890a6209f3202ea084a83b0f1b73d8917b3cc96cb237c0b9301dfea4d82c9f8c47c9c6631f6b4076df251d5ecfe4aa261b1bf3c38195ee9a8e018f54bc9e84353e998d9e08c0ee662a58c2762919d8a301d8dd4d054b581490819d04c02e32152c61eb940cec4800760f53c112f6f7c9c0e602b07b9a0ad6c606d63600ec5ea682251c6f22037b3000bbd854b084a3a26460f7076097980ad6c6b1fb5d01d86253c1128e969281dd05805d4a09561d57318ad5c3711564f836017ccbccf101d8e8e99f0d5096a4c3f197fc7a101b177e1d0ebc53a526e124dd2e980ce7b500e7729370926e664d86f3718073453a86f5929b319a6fe58ca79701cc9526c1b471c6d3c700669949306d9cf1f40c80b9b749306d1c24791ec05c65124c1b673c3d0c60969b04d3c6194f8f09988d337dc2a7c5089f2c9a2ebcf1b28c797bcc0f67d319dfbac2dd857e99733f53f4bdabd91207c722e77fc152604fe77fbae7117190c054b681ad154fb9bc12217bb5f3966b56c57207389face606d1581a44b6e87b4d7498573bdfcc63a522f48d6c3e73f7d09fe3fcab564bd50824d9e204bcb9ceb31ac667b9f010d6389aac649522c6d17bec67479a084ea56247151e2f0e305beaaa76592994bdbe3227cec542934ae79b86221cb741981d6909eed4749042e1b3a8125a650a5b281572aa448245226d651a71fd6689b8153b712a16d7a25a2939039dcf2205ce3fae376478ad1f64b8dc8064b5bc53cf13cbe429145fda1a9e0c117dbe2caf33db4a1423373bf0df2f170bb64a85d4c284314d1c3fdc4e5bc449959c6c9e165b73fc2b78bacb641766da39d2dcf96b8193f2aef05227d3553a7f73a5baaece6099ff0f13cf31b345100400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/b13b34fc82c680c479b3016443ee7ff2.asset.meta b/Assets/SerializedUdonPrograms/b13b34fc82c680c479b3016443ee7ff2.asset.meta new file mode 100644 index 0000000..7cbbd00 --- /dev/null +++ b/Assets/SerializedUdonPrograms/b13b34fc82c680c479b3016443ee7ff2.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3e2b6a0e3e3f8df45bb8615b850065c4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/b1eba2206a63bd141807f7ae8b008063.asset b/Assets/SerializedUdonPrograms/b1eba2206a63bd141807f7ae8b008063.asset index abc6cf3..bb89268 100644 --- a/Assets/SerializedUdonPrograms/b1eba2206a63bd141807f7ae8b008063.asset +++ b/Assets/SerializedUdonPrograms/b1eba2206a63bd141807f7ae8b008063.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d577f53c915c047b6e502a619700183c134b12e920d988e71c3988e5b922d01630c78d76d6d43206d379bbee9c9a6b74ddff44ddf4df90e79cc631ef211f2b04f49e6cc9d6b1d8de6e8de2be9882b67e59f35baed94ffb43333f74a2571215f9156f9362e86459f681763e2b6981773f2539f4c67e59fb3e5eebf2616657a57be4fc863ad6297c795f03a10a997ef43726b492ccb2bef8b49994eabe323624a7e1e92d74ec92dd87b47fe4fc9b32265f2a231d12fae8a2ba22eb2d543c4b8ba6849ef8b805f914af9de2b1ec9a353ca2850125787eae4db883cb2a48ecd4aa3ddf39e12cf28b766e5b14979cda29891326f298995ffae12ea837092753aadd2e97a9dee95ffe5f2ff3cda2e43db1be47f54fedfd6db255a46a5fe8c656f443aca1583d4fd6b88fd6b8dfdae8d9b745aa68f5f308ed7e8344a1cdfacd372e2f8169d5610c7b7eab4d238eedab51f9dbbdff0e980bee622da967e44fe8158e0eb4a0d1deefe1ab40dc72f39fe466eeafdb53adda78f5fce60e33e9dc6f4b9570c5db1ccb697bc62c871afabd3e75ff5677b4959061b4b73b3b1f4ef861cf7ba83fafc6b681bdbf0843e7e1d6d83bc8786cf2d865d07d17e2ce7a221e735438e7b9dcbc62f3b574e0e65b0ec6991ac77f83ab70cf92c83a5ff12de6d82d9deb48ad4f6a655dbf486dede2e52db1bf7fa069db6e9eb870d1fdce3edc6f16d06afb8c124eee88f261cbdd17b480ea40923bfb7a1fd58de7543deab7abb51a7f5c8171baf76437e87482daf1d861f9d861f9d5aef5b8e1fe5ae7d6d3a3d64f8d181f66379d753e595bb3cfcfad166c8afd77247325c13a4fc1c16a9e5e7b0b6f32dbdbd53a4961f97d71191dec674194c8ea0fd901e35181f757455fdd390e35e77ccc8b31d3a6dd2e9717d7c146d437a02d95666c83c69f03b8174e1e36386ce5d3a3d65e83ca5d3d34867d4d079c6d079dad07986d0b95ba7dd86ce6e9d9e453acb0d9d3d86ceb386ce1e4267b34e7b0d9dbd3aed433a2b0c9dfd86ce3e43673fa1738f4e070c9d033a3d8774561a3a070d9de70c9d83864ef7ba1ab48ddae08a6a61a943d148c489e1a664e8bb20e2aa52418fe3377476aff40e9a417439bcc1eb8052bb2cc3d30529c012b98ea9b87859b63a9dd6c8b521528decee53ef13f28c6925743c5dc59b692ac0b819f93785c2ee25b97f5045ed10784fcb23ed12e0b4baeaa66caa9e927fa952c6a5da1919ba4fc9ccbd2f5581bc9bd2ecf433bd5c8210ddbc6658ca744610b3728f0b74416ecf280b47d4fb0365e994b27e48ee5b56e3993939a2e995e943a52dddf745f9d9a6735423b3db681f4850fb9de18a9b4dfdd21bb03eaedac3b773e471e4881a3e8ceb6a581657bdc8cb6939f13643a791810e6f48cbe850c82229fb3a455cf589c3690483fb98eea1bd7c3bbcbb644093c9173b19c8eeedca83640ef71ebad878adfda5ff44535d3b24e2aaeb6df4702d135890178bd4a649c8ec42345a9600434dfc111b7ed5558f1410bf73deb43a2f780694ab9e293503d434d0a8fcf050fecfe893e7b43933ba5584cb2fab56342d9f12e53a6489593a522f7329d82536d8958586edddba64825db9e2571236bcec04ab08825e3650044b6d0455b4375af0d6026ca7260133335cb3e24592615cedac27aa75265d6b75e0a91aa2a83d1faa553e64239dca89325b4ea8f980bbac393126f73901e9803a3aada2987654a35d4f329d09b970594df4de573664ceaf75b6fc52b17f8b1a2c7058b45e0f35d4ab82c8d60d2a5bf98ca0323f6ac9fc0464fe460ba90490da64b85365b8a366baedcaca29653594b2cdd92baba0946da1946dcd5e5925a5ac96525697bdb22a5b8555257bac804de755d9a43c2b9cc148768d2734626d061b7bed6850b5a321cd3b3f3650257f8d2dcb80e2369b5966f634d0d9b39612bc3d47c1d536c150181afd08aea605afb3098622bd43a48708ff95af34e155b4f0f5b6d2aa76163254c225257849dde9bba436097b98e4a59f2aa51ba8acd965c91a98cc0d92351b6d59a334167ec4965d0c0b53a57566c6082a866d1699065c4123d84db6ac017a7b2c46095bd634d359534309df6b111e09287c33257c9f45784940e15b28e1fb2dc24b030adf4a093f60115e1650782d253c66115e1550781d25fca045b8b58dcd20bcde569155ed9e62adc8deb16a7ec37758052e35c377550f8162fead8146d67c2302f816d5b6f09841b5400d54996acd430bb48d12de9607e1db6dc2a15b6b17e9ddda1b65c1bab5469b70a80d714bf1496c4acf62f9f662777a48de42abdc61ab80aa0d7f9ab502a62f2ab99f7ae5b5f7a4970fd44ac17d5deaccf333573758fcf617f674a8d2bf4bd896c682594495f59d5489e9b49498b7ca839598269b701840c2b27eda84249498c995ca7c49becf8be7d442408f5e9a79600bc02b68fdbb28fd876dfa3793fa219099c8d286dd940d4782d9d0af969f2664e004c5f976201b9a291bba6c36d4faca874bca16983a0e62c91eca92a3364bea7de74876d6ecb5352f2a8a2be46469aff20ba44cc8738307ebb036df62761cf6f6e4b8b0cf727a9b40b51ffb6c190a4dc2095b231760f0bcdf2618fa49b8a524d77ef2804d3864fc292b4b53f2715a728c32fb741ecc3e48093f9307e14f504cba7365d242997d360f66b75266f7e46a769b4d32cc42f5fa29da19261adba93ad397639d89532cfa736591a0b270200f59d841093f9707e19d1493c15c991ca2cc3e9f07b30f53660fe56af611caec0b7930bb8b127e310fc28f524c2ee5cae41865f6e53c987ddc261c666aaff8a9ee4db4e01336c1d0405df52338430375d22618467a70eba8cf911e8ce8038cf44e5190aee708e9340569384748672848236c90ba2948a339423a4b411acb11520f05699c0d522f05e91d3942eaa320bd334748fd14a477b1411aa0203d9923a47314a4a772843448417a9a0dd2799b4a184e3e232c8355c8453caac24b53ede286fc9b97c3c51b12fdf3f2820935ae82794a38425d97e948eab1d4115c9041f010e5e5bb6d5e1ecbe0658f1c2dc2d38c8fb4bfb00f4690a6adc975a14cbe27a505f1e602e5cd0d9b37a70378e33c1c99c917bf79352ea94c079cc2b948f975d3e6578fe157d24a5c122f0998a85892bdc73d556afcfa46e75ff6a5f012e5df84cdbf6e5ffef548c6b7552d73eeeaceddbfe49120be5da67cbb65f3ad8bf42df7fa659315c4932b942793364ff6199e98f6dfd5350aca214c922dcb72981fe257293b6fdbec3ce99b78b03680ce876c5a806b944f53369f12be7d1af4f4291f39729db2fe8ecdfa8bbeeaf7a09afe9c50e72caeb46257e5e7641ffb38dbb461cae7bb369f3b03f44541f30ccb0ae2c108e5c13d9b07301eb5afbf26d768b3f1c44b66108f46298fa66d1e3d29dc9537771d0d3f5ce6580965ef8e5a8c80de7468e5cc01b53001670c2bf2537aa96231c5f3d46f8100d570dfbcbbcc6372c1f7d5e72b8fc72822cfda880c6491c7deada697c460ed6785fc8b4460d031a09f68782439cf2ba9cb52465cdd4b9358c95bef070e41f7ace40bf68caee48ef7e387cf09faf1c33bc25c85c9f649342f2f6ce5b41d9554ec9db74ff4537715da23579624ad6e2c5a6d9ece40ae96ea5c2d89abfb9b5ab22c4dde56cc626d9e8fb07a3d79e308b8a25a1b290016056fa8cba1e159f696ef75c3659b12e03e9e9587276ea1503981fca21eaec0ab225a9200ee739c70d62938374402b5d7c936a918502d942551cd73a2aa4b41d523a5c2e39b8fa477f3c68365bdf292253ffe8600dfebe580af226a083f97b7f62cbb87fcd25b5e6725eea1346f5e5563b841c46889d58d9261b37c0197c9585a6b14f3a882b12cca5d3238b077ea09080e9eff3fefb713d06f2f0284f36e37a7da9025ce366423ca4bb808be63eca1dab3a0ca039c66e8cce531e1aa94f6a3d98f43d9b421db506fb5cc8d0f943a630c28eabd92c5b25856b9ef3cc5cb86af9a0b5f35c2779f135fad2e7dce20614e4d1dd013ba093e944d5c288f23940f0a817252b784e63a46ea289611650517ca2684f23d8588abee92e5722c6520ddc107b38a0be67604f361986032964c36981b10cc476182d9598430772298efe584d9a061cec893668cf0879a3363acea6cc1d03104f47d6103ca58ddd9801e4440dfcf09140604b7503c991c8499b7e2f7ca710f1bc80d5c20a308e4073841d688e428673265845aa0914e0717c21d08e1073911ba9302a0f88e02e7ca8635013670512e7002817b81139c57605efce1cf3a84f2454e94f5bedbc3e4a349c5d72a56229c1fe2c4d964f4d7ee57d88386a155da777720b82f15a2dafb9bda600cd4d9a636ba11ca0f73a26c36cae92d7553c8733e96b0938be2aca595ad296843883ff2383ba9d4d923c6d2ca367bb41ba1fc2827ca6d1694deb75a3096ce162ea48d08e9c70a8114b7a5ab13e94984f4e38fb3c217ffccfb7a84f213e1e9e9196790d8509e42283fc98972b7052518b1acbe62634e5c10ced78aafb611540902fc7278faf9c345d8cfef41283fc58972ab30673b57d7b4f11104f2d36101598c43cefd08e46738411e34407add98e0fd980a2b70b6db17f621e09fe5040e8fc1dbe7a3f097f614e7dc7c1982f8b9427449fec227c62e892d7c1a40283fcf89b2d16800665775356f4758bfc08935bbe127e32409dbf0b30721fd2227d20d825a4d9ad3a7145fe41941f0bec409cf0d98a816b3d823cf1604f295b0802cc6c83386407e392c200f1521c84308e457c20292b1836103994020bf1a16908c31251bc82e04f26b9c208385e78c959b2d3cef4528bfce8dd27bb858ccb72e542094df2844a9f4378fc91804b14593bb10ca6f72a2cc6e74c388946d74730621fd1627525827c037d3303f07d4c0056c0d02f66d4e60a06872a574f5eafb3b968a10591542f61d4e64e94f9e0dac8212b716e1fb6e213a10e71956ea5957778a22ed19fd2268edea11ca573951bab71106e940f0dc2363f8cd16e89c4370bf1766b88c834436b86711dcef87192ee368870d6e1f82fb8330c32dc6fb354f20b83f0c335cc6f09d0dee6904f7479c70e9c7aeccdf8329cea5dd7204f2c79c20b31b5a32c6036cc1d62042fa13eeb29969e2a3d8d77e362190af85056431aefd6c44207f1a1690c5b8f6b31981fc59584016e3da4f0d02f9f3b0803c528420b72290bf080bc8625c44db8240fe322c208f1621c83a04f2576101d95584206b11c85f738274bf49865ad64dfd026ed610e83817ccbd08e6eb6182c91898b3c13c8060fe264c3019432136984f2098bf0d134cc6009d0d662b82f9bb30c1640c89d860c611ccdf87092663a0ce06b313c1fc4398603286466c300f23987f0c134cc6809d0de65104f34f9c30b788d46fde4abdc3a3d8bf67b801617c831363b0fbdd187b71b6fbdd9a11ca37395166b728c188946d51a21f21fd332752986ba6bf97cbf91a29367c6ccf97958a55f343040920f2172802e5ba08c47c655a2cc023aeb1805f5799e97cdb3a6b2cf0fdd3b1acbe30cef9ad824d3a97e7e4399705dc013621ed985069f2770be2a040fd7860909fa1c92c13f238b3b4bf424646ec7579266fa5331f3f9460f3d4db3fbaa45767c8953874c6abdaffbf41beeb6c57c5b42ee2fc5cf482163ea57e87efb6320a5ed1ff01c66aca9422af0000 serializedProgramBytesString: - serializedSignature: 8ca421cf5c83f693ac231f57dd601da0f83583587ac1d3050d79a5624fbec8c452df7cafd4638edaa1bc01ace8daed11ab0759c10d0e003165c4d6cfbf65e60d + serializedSignature: 01b3f5b3bb399e84b91fb0f8ab96773c5451c06b57bb2c1d8899e5205b647a1e89a67787fb5ac42b89d6c7248652cc9f59aac41537676339e0b88d3e8c32fe09 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/b35a7dbb4e652f748a8bd23a38b21abb.asset b/Assets/SerializedUdonPrograms/b35a7dbb4e652f748a8bd23a38b21abb.asset new file mode 100644 index 0000000..ad7c76a --- /dev/null +++ b/Assets/SerializedUdonPrograms/b35a7dbb4e652f748a8bd23a38b21abb.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: b35a7dbb4e652f748a8bd23a38b21abb + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e7525c8a3b94e041a30429a5c5a1c50a817a2190002921d008d25237da5277a7ee4edddddddda8bbfbafefceec4ceeb9bd79ee766ff35c6678fff453965b79e679bef38c5b463673fe4486387fcd6773d804368ccd63256c25ab70fe35c1b9ae70fe737fa9fbb359a5735deafc5dec3c1bc232937cc9ff0c887476fe9ee6fcaa62d5ce97356cb1732d13cfe7b252e7dfd39c6f4b9d5ffcee12e7ff52e7ad4803e7a3796c229bc566b24e910e4944cc171f55c97b116e57a489f3f778b6ce795a2a94e281648b479d9cbfe63a4faac4b3158ed2eabdbdd83ec2ac15ceb3c5ce3795acdc91b948486cd2792726fec1dc4b1779ed2aafdccca6f2dfdbc87f3791ff86ef3794d76e3edfef0ebe6b0afecd096d4af07d0ff71a99e55c1b39d7ff81dffcdb6fe47bdbb9f2329625909529afbde4b5b794f99f0ffd1bcb6b9f24f62692d117c8f2c3ac89bcf697d77eaebe192cc5f0b35c4691f3813cce7236d0a73f08bb2978ceef0d0861bb8ac75d3df1b8ab1b8f1967cbf8db22df1f28af83e5759094edbcd3ee32796f88bcf64ca2d750f73b3692457dd609739b55f2f73079cd96d71ca9db5cc93b027e87d545c569ae9439478691a1b9afdee7cfd5f779f29aef89af02f95e03f97bb84f7dfcf89fd2a94886d110fc76c26bb030812c15eff33cf13e4f7e7bb2cbb1c19d1e7b80ff69e5164a5d1aa560c77c8f1df35d5d1a66c5be975407257f8494b39b94db18fce6724f0f685b03f9dd66f97b244b9eb775f1f16c7b574e13c57a8c1b4ea3f6eefd466358ac2f8f4ea2a78adbdd3d71bbbb945b2ee52afb77707f4714e73e400ee7d6c423770f8fdc3da45c95470cf7a9e758791d27af13e57502ab4dc785bfc87b3bc9eb7819e69e2c360fd8533edf31fa6dc79303724b1447933c71dd5386bb571299eafbc9f2dad4e7fbea9d2921749e2aafcd7c86d94c5ea78508b3b9eb0b4d7ef0f8c29824327776f936a9063a38729aae97bf7791d7e9f23a43f2dfd7e307fbfaf08364bacc94ba3010078e2ecd5acbdfb3e47576ac2e6c578f4e4deb4ea7c8de526633f09b5ff791f79b83df5cd7d96e38cd1e953255b9a5ca4aa573119dce6c9efb5dcb16c037fc7c97c8bf6499d03cc795dd5ceacf76f3e83635aa779389e05ba5879ff4b08764b1d0c378a1d441b1ddd3f35e0bf09b5f1744c313ff76be6da17cab07b8cfbf6d097ef3e7bbfbd4756f16efb35cce2210f62219b6ccff5ba8f8dc87c5a73dddb7fc5a0cee154b79efcaeff665f1e5987a8fdbb62df8cd9ffbcd3b1768f473c26db953826f25fbdafc6772d41f1abf28ef493d228b596cda5a2c9ff78d7e132997f716b9bf5b295de4bb9112c0a5c4d56f5b559e96c8eb32a62f6797000eca9f9746c3eefea6bc579a202c154699c7eef95139cd3b4bdd553eb61f8b4d33de77f9bde5f2ba525e2be575ffe8bb230be4bd0a7995f5f748298bc99b9d766ff43ebf2e91cf5b81dffcbdf2a8ec0e4fca7b551e5d75f1a9e244d9aecb0312f9598dfb6e6799b7b2d52edb56f77ae42e6689fd768d2b67b46a57ae75e5b4f6b60192c95927e5a83ad081eeefd64a9f03e455959107498e4b594c5ece0e96f79701bf590aeef177954f0cf1a95b228e87ba7ad6d6ef0f93d7c3e57502902dfd2c52168dabda3adf21e019ff3d1ed80bed4ba4cb11f2da32893d5dc07bfc7a6408fb133d53eda263a46dfbb1d836cf7eaeafb4ed9e40d606a6f5d3762aee8e759fb7592b7f1f076ce2612c8fb2aef5a5e3e53395f6805f4556807b47cb7b15d17b1195476cf4c44f1bcff313800cddf313810ebae727c9fb6d5ddddb6d90f74ff6d8b2dea3eb0a1693cfb053e26d8dacf084dd2e405c9e2abf5de989cb95325ebe4820eb347d5cb6ff43fe3edd13976778e27295262ecf94cf541ecdef0d92f72a35f15b0538a8be97b390b854cfcf067275cfcf013ae89e9f1b1b971d54b9771e1297507f1897e7c7db1aa9f484ddde475c5e28af17c8abaede7b91bc0e91723bf890bb495ecb13c8ede191dbd187dc4be4f5e204722f45f44d253ce5ebaaafa69ac5fa3affedf86dc75713c8ba8c697dbd93ea37b89cc5fafa152cd6d76b58bcaf5f299fad8ec6bf60c1efad61f1bebe16f8498d7c76157807faaa7a7e3590ab7b7e0dd041f7fc5a16e3ebbca75fdcbf8ee97d1dea0f7dfdfa785bc53b306c558e278acb1b3c9c15df752cb69db3ce8d9fcedefa0f64ad0be74657fef6aa5ff72629ef0029bf13f8cdaf077ac23dd00db78becffeaaad26f0b797f887bbf8b1a63b89969eb5b5d8a3cefddc262eb539b3dfc6ff3f8ca41517fabb5e556f00cda76308bad93dc2eef1f02e2ea60704f57e74ac6f50e79bdd3c34ff96d67f09bbf7737d05fd58def92d723a2cfdaa87e2215bf2d801ef7e87d85297f536dfaa0752465f3bd496c0e92271dca62f3a4435d3fe896a87ff641f9cec604ef3c2caf8fc8eb4352fe612cb6fd72987c2efb0522877b9eabfaefc551f61d33811e4a36ffc64f5df271797d425e1f93e11cc162fbc4541d585746a45a8f4df5996ce3458e64b169fe48371e7aa8b6b1f2c5d224fea1da874fc9ab6ad71ce56170540206437c8695c0aec8312cb60f41d6efd9d3f2b7aaf3caf1dcc8b19ef78f95ef3f237f6ff0bc7fbce77d595f67cfcadfc7c5becf9e0372f8efe7a3b64564bd98bd00eea936c28b513e3daf93cf36c686cd5e62b1ed3b95ef9c20dfeb06be830cd473d9b6899ce8b149d5ef7b80dffc7ab247ee891e56277be49ee2d1f765797d4d5e5f8ddab8c3bbe01bc093bd122b33a14f3f2f659c2abfd90efc767cba67a2fabffaf634793d5dcae8097e3b3232335d7d330b705991333cfc4e03f7f9f54cf93c13fce6b23724d0ef05f9ee591edbce92df3eeae35bd956889ce3b1ed1c29e31fd7b65e89ea2eafcbeb1b9e38543ecbe59da789d7f3407cf2dfaaddd10bfc7674e8a5ea806f32bd6f9fedf9be77ecf7bdd598e05bf2fab647b7f3596c5f98ea337d0ff749f6be47f70ba2efd4eaf78e473fd57e517a5f28c3ed03f450f7f9f522165b46a936ce07f2f726cff34df2b96eac3d511a917562f6214b398f651f01597efa725419f2718830958c4f42c8682baf5b42c8f814c8f263bbeabff82c44989f03597ec254f5f42f4284f92590e527cc6f99f0c1deaa0ff843f71ab998c5e657fcb7934efbc93ef87eaacdf99dbcfee091f3bd47dee52cb63e71b97c9ea83ef155121b7e74bfeba3ca9c2dae8efdd5b8e24ff2fa33c3d39cdfb0641b2872098bad775d22c33cd495db5fb595541be95779fd8d90c3d752d6a51edd2e75751bd0dd953b409553bf7b74fb8350b76f62af91cbc0fb7fb268bb1ebefb977cf70af9bc2ff8adf46aca62748c5cc962fdf54ad7f62c396693a564ff8de8755500bdaef1e8a5fa2fae0332fef1c4bbaa0bdec262c7896f21600c6df917b145cd3dc16cb91a30beda653950b515e4bc42fecf381ba1ff5c5707b67d1d7b8d5c9b209ed4bb2a9eaef7d8763dd0ab298bd1317283c77f6e706d1eb4bbabf760a96f2482e8756300bd6ef6e87533f005affffc019ef1ebad1effb9958031b02592a1b725a2eacc982d37011937b92c07cbfecb21b29e1a91e37991861a5ba11fd5411a89a8be0ee5ff5f4665f555e1aab9b08ac7e7e01dd5c7a7ea8daa5ef3297847d9257ff75163a61fbbf60f79d4f36d329d55bb4ee5e76a5e44003e9196eeefa12aeff7eb1389daeaad3c3213bddb9a69cbe8a13749196fc6ea15d93609933692b56a2fc8b66164338b2dfb36bbe10c3b54fe6eabffaef6fbdba2e10aced0e7d53bb24e18b993c5fabcea4fbc1dc89075b948078d7cd54faaf3c18ef2f74ef29dcf806c68dfedae7dd90be5ef4efaef6abfbf23817dea9d64f6dd0564a8f651078d7cd5cfaa4b3f5da43f28dff9c4b52347cd7551fd2fca4f75e9ab9b27ecbb41d877cbef3e8a7ed747d5ab87fbf431d50fd203971551e5444fa6ad3f27caab92859fb0beae6cbec7e30ff7b81c739bb861e62abfc894dfc9febd482f797d90c5e6210fcaf774734774fac831afc8bd1e3dee957ac831e55c95767a7bf4e853477a281ef74939fde46fe5bbf7b3d83eb2fbe5b53f8803359ef24034ccb172bc22d20fe8d514bcc7af03c03b70dc4a3dcf6231e9acf6fe40797d98c5a633d94f1e790884751fb807c71a15ff473c76ab71de473d76ab3e759ddd8f25b0fb71a08bea1f1f8cd8ad9eab71d1b69efb43e5f5498fdd327e234f80b01e01f77c8eb146e47a87c8531edb95cfe96c7f3a81edcf007d541f6c3662bb7a9ee3b15ddd57632ccf796c57fdcccf82b09e75d350c1abae5ec3e59cdd885c2311917d9891e73d763eefb113da94efb1ed05169bee645fa3ae8d1c19eefece516575a2382894d7173dbabde8d10dc6c14b09e2e065c0e525791d01de8171a09e8ff4c481ba3f4a5e5ff5c4811c738fbc02c27ac58d834259ff2f54fa8f9657555ebde6b1f3b50471b0bdc7b6d73d71a0fa687571b0838f389820df7d83c5e6c96fb8b68ce8ebca18a1fc49ad1f18cf129647919d3cf2df94f2fb83dffcb9664e63649cbc4e8c9511d3fface63bbe15fdbeb60f57f5dd4e003ce578736447f01dbfaaf96de359ec58b2df32767f29e76d0fbfb75d7e234ba46d1b3dfcd41c228c9f7c2ff20e784f85f52ef0395596bd07eebd0beef1ebfb52b701e0b7a3dba82f3c723f90ef6581b0f9f543797f20f8cdbf5371f9917cce3cf240ffad78878729d7bf442679c2f89845fbbc1d5ea3aef27000fdc9910fc03d2503f497abf0999a8b3448c6c1a6d83093c581365eb6b0d8b42bfb34239f7ae2ff53d7ded132fe47ab713955475d9b38ec5ab993e5f533163b36a9eadf53803cfe7c302e531bcee71e7b3ef7843b85251d938ba8b90ca0fdee3bfdc8ba77649abc7e29c31b027ef32be8df8eec2cafa03d1a5175c6afe5f7433d3efa0d78f71bf02ebf7ecb62e7307cebc6dd0e9b3cb2d577dfc9f78781dffc2ad7cb44be97cf55b9afd2e80f4087efc13d7efd517e93037e3b3a8c91fd1f3bac45c2fa89c5964b3f79c2fc593ecf05bfb96d433cefff22dfcb03bf15632827df23c7abd7afc046d5570cda805aff51fd2bb9e0370f2bc3b57dfb2f626d4a264f7b4f95d7aa1cfbcdc34df647b25782cb8e281ffb9dc5e601bfbb8cc61eea794fd5410a5cfbc6aa3c712c781e540755cefec162fb24ff7075d8b185278c64e5b792a7d67ccd9457d54f391cfce6d7bf584cba8bc87ecbdaf4f7378b2923c46faed7bb1e39ff78e4a83e4de51baa6fbad0f3ddbfc02efe7c84cb76c71f3cf624b13bf65ec388e86f9cca4a59b1535a648b85c9bc14f4bbbd82fa32f9c60aa2cf54d0617c87051e6c355be77c5aaadbdd609ed83ba19ae5b33cedee065d447f8d0a7d82f8bbd879a34c081d991117c45d714170e5ca9dff4ac1d60c55cefd29626707be394399f364189bee5cf9570b9d28dacbf92f56ca7c27d87256e3fc2a72fe5e25e42d74d48e7f3399497c1b07ef37731c99ee2e132b9c3b0ae82ae777b9d070aef87bb5d0b454683fcdb9572df6bca8604b9d4adf4aa7e0e4a1c5db5ee9fc5b17669144a6d751bfd90476dfddd24245d344c71aae7db6f0c5ff8b91fa88118ebed148990e1b648bd186e3e262e2ff18ba990caf304d93327205b248ccbd3c962dea5473e20806b731de42bd7fbbbc0b5941425bf46478747713164463f8d103164e5bfed733f7368c352d9f658be1a1ee494c4b0496cbcb12bdf7414c68d8b0410e57d48b3fa2c32f86a7e6a611bffb5e99782f78043412855f6c0488a6489193abcd0685e73ca17cb950cd6bcc5ca17485547c92a36ab130ae5cde19effc8b1786cb6b734a57dd614e0e5c2a8ae3f8378ac42e494b858c384fc8e16a371691195f542703824567862e3ac5486251bda4266c23a5c411daa4d68a6884668bfa57e7046e8f85252a660d64ed4c25ccf5ad168d3da7d397035f7fe9e779e5d33ffbf5dedb6655149df2d59686fa786a26e22995d0b198da461753cdd29df092973489e2a979ad5dd178e27ff40c5b20be9e4c078c60031dc1e6e9f675fe6ca59052ecbc1b9c211f361feccdbcf400b7459c30b90a18c2861a84391c612b8d56ac61538f565c214472235de4b4a89f623d35e7e663c09d3c081aa2cedd2661a91cd4b51bebe88905cf0b49e9a9d6e65ca750dbc57956ecbc5f2aaaaefcfe6c51c0ad13f2c68910a22dd4d82f1293e5a32543bd64b554db09aa7d41db39ac6618f1261ae239dc5fdb6bdc40e471dec4d0064f0c4db164d6216c326b8649ee185672734c72a7b0925b60923b8795dc52976cc45e267ba725d9443b69d4bfc63bdf2e738c592d5ade35cef7ba4e9dc4c9a58befe4d25524974ca6eb6a0aa611964cb6d5c51dbfd94da7a437eabae251d70a13dc3da4e0d698b7f508eb6d6d749279cebd9d1f951be382db622af70cab723b8c726648caed31c1bd420aeea04bd2c2598a4993f43ce79edbef39493c2d134d43b7b2ca6b5c35ceb36af1254f3e89de4e9cb87bfb4edc7d44e2e6bdfc75a71b96cc3beaa29353efeb273afbe0d1d909f3937e21fda4b34e302f69f85042d8f2bb8b4e382f7a07b0f806d07fce9f38e12d70e15d31cdb3349a0f5d941148f36e585632306c56d21d933c28ace41eba242fb2f1c34893bcdfe19929a267a894cd722af0fb31b75f5d85bb52242eae91ea9f9fe35c97082df87dae45f2619dc459c6e05a3ea0774414469398ff41267a2bf8607186c8ba868aac6b5882ac4ba74da2cc4bb198c1f886de356e0f1bd277334c846e161b2ce3dd0ecb69b23539cd9bba6c2c414ed3134bb23961936ca64e324fb2b91a5fcde1beca670c3413f9795c38c3f0707ae9b206515d3aa05eb306b795cfe52d115dc0aebc998cef49bf46b8ea72c781574bc72972dea974c228954e1e2633e0332b7a78bb8f98fb479f1c0a447218eb2339505a852580de3a4fe275653e7520ae939f97fa739cd6ff04b64024c3fdc56d4ec98ddd32f16a193bc0b9aac1cf2035f13e3a6d782b934f24485a5d69870bee8b091e1152703f2c8d8f0c9bc6fbeb24f3dc864f760d5bc31a80a93d3aacda59588ebabd2647fd27122c471d88091fa3117e6f4630e183b0a4b0831f1f49e0d58331c16375698c7bd404d1b39ce9fcbfd2f982f763168bd49f290ac3686e90e9a4f532e75fbcc01e02de5fe9bce14e3608a2e710cc29760ceb1443b178db49136fbf048cb76198f0711ae153b709263c1b8bbbf1bab8e3c52f2f3778b564992cdb6273c34c3154992966fad4881ed212117355225e33d9814ee5e020e7cadb9399a21c2817cf32c5112d9522af0d12a73998fe1374fa3703facf061a060931571722273c51936f4502e65b793ae1bce2338921151f3e2e1dbce2938f619ba2c3d64328b056d45c6bc4fb73850394d6d6954beaa8802cd0e8952d7a992a587d56c8786b81cf8b72c7f2a355141e7674543d4cc58b4f5ff656bcd41f7dc58b4f56ce124b6bd2a13d56c11a8e65aa3b6b32d548904cb5104b0bbb6069617a4a696184cee74407e4aa7af5393c45cd11b279ca0b5fe1e7536bb7f1b6fe452f69810fcfaa2b1d078b25ec55e2082e975c15cf4cf940d72270d6960b5f24097d9a9829d2443a35c7d2c548acd49ea529b537370c566a8fd2b9ace864adac57979d2824a4c36d67ebdc56f40617fa88fcbad4b3a7983e5b2532d51299a9ba59774fb1ff41a528364b9dfb3ce385cf078b3d0e787d69b2e0bd4290e7f6158b762fe6e4bb0a274fb79d98a38fc60a80399a022050ad7a7b2c09cdd524a17f0226a13198da4561d5de01537b9e46edf58d82a93d16133e5f237c7ae360c277d409e719333f63254c0b71274c305fa41a57dde49d19aa9db0d8d3525c24da0aaafd5722eeac73fe2e77ee2d162232c5244b357b238896e330b67b68d8b60ec8763c8660cf906c27e80473f7dccb8fe004436013758279fd6b6f86d4bff87132c1eb5f9374e170ecfb6ab06f0a887d3296cc17844de65330c90bc34a9e8a492e0e2b791a26795158c93b6391b85813897c02539048dc05135ea2115e1450f8742c6196eaf2a67e8cf7bb442ba96ef329daaf51cc96082995cebf57cb32b724a67f84f77994c9467390743e03d373894e4f77e5159fa3c6eb14c5a20f8d87388b2d0f14ea4c0cfd520dfa8d01d1cfc2842fd308ff22a0f0d918af321dafce49e2b5444c6d8adecd75ee06e1b82ba6cd7e3a6df8cf68bc0509670e8674b906e9f9cd82219d8b1951ae33828fa3b9f8463bc8668a0ebf62b96a6cb528c683632cc23458a1d380e76cd36b2b06b353ac16ccc390566890be1a10e97c2c475e193647de0d537b952ed36c1e4ceddd31b5f70fabf61e3ac9bcd651c9905a073fc42678ad634f2c9c6a2c9c9a94c2d90b23b53a2ca9bd75927904afd144f04e2d8245f03e98f0b51ae1eb030adf1713be4e23fcd180c21760c20fd008efde3298f08598f00335c24b020a2fc684afd7083f3ba0f04598f08334c2af0a287c31e6e4078775f2124ced43346ab7df3698daa598da8786557b894672b6985398ced558ded94fc116acf0d971fea692f2e34d742bb192858f75292dd5c50b2fa18fd0a914a0285f8679d3911a6fda1230119461c28fd208df3ba0abee87093f5a237c4340e1cb31e1c76884b76e154c783916991b4246e60a4cf0b14c53171c22bc73a54863bc3a5f2a164457887f55884d294ac5c075b1f0fd6887931ab8e62bec33a5f7564a9f2e77bc7d98733788d61598d6c7e9b4e623afbc13375a6f769b926e334437af30930d90b5ee0181f45a89f9c0f11a1fd81cd0c15661466f0ce903fbebf25931bdba8c349fc5e6911689ce7bbe23c612e1292b02cf3a4d9c279fe03b4f3e51e4c97c620a9dae58fe5da98b6e5eb73e8921756bbee96a33ae72a0ba7515e6b3a7687cb62060be558d093f55237cf780c26b30e1a769841f1950f86a9d705eade15b3c85aad6acc1d43e43a3f6b301d55e8ba97d6658b5d7616a9fa551bb7deb606a1f80e56d67eb3274ee557e3a453245a2ac1105142f626633773db63b57aad8b95b2266512d13bf678ba4c97b16178902c0dda86281e8fc582ac6122b9dbb6ad6d53ae62ed4cb14d53177938a4c911594c8b978cbc59d2af1562908475fe094c982131651417b370fc4a2e81c4d14f50d1845ebb1283a3764f1731026f83c5ddcf3d90c45ce8f5531f11224bc83b18cf57c2c63e5a74205efb43804b3eb429d5d3c9af6aaed2975fd779f80d5a243b1f8bf4897b3048cffc330e19b34c21bb40926fc702c4e2ec6e2e49294e2e4085d383cd3bbd48f132718e73b12137c5948c147615e7479c864773426f88a90828fd109e671cf0fe5f1ceede40282cceddc8079e1551a2f1cd23698171e8b09bf5a237c7a40e1c761c2afd1085f1550f8f158fab9164b3fd7a5947e36624e73bd2e4fe3f3ff1638fff1fec472915bab32b6cca9a8f027ab4453919787413cec044c8b1b745ab4abd522c7f99b97bc7c6cca9d1d94ba0e27623adca8d3a1add421dff97fb1680cf16fd63a7fa7aec149980637e9346802e282af21e235a320a19d8cb9efcd1af71dd32e98fb9e82b9ef2d98fbde9a92fb9e8a654d9b3559d33601b3a6d33042b76908fd1190d0e998f0db35c23bb70f26fc0c4cf81dbab80d28fc4c2c6eefc4e2f6ae94e2f62c2c39dc9d286bcaabe3ace96c4c8b7b12674db97598359d83e9706fa2aca9a00eb3a673310dee4b9635ed26c20bb6dee13ccc7defd7b86f930ec1dcf77c9d70eebe0f60eefb604aee7b0186ec2116ae3a762146e7610d9dd303d2b908a3f30846e7d194e86cc28c784c63c437018db858279c137d3c24fa4b30ad9fd0683db16330ad2fc5d03f89a17f2a25f49761463cad31624b40232ec7843fa311dea05330e15760c29fd508cf0a28fc4a0cff7318fee753c27f15e69cfcc81eb458cbafe362ed6a4c8b17755a448bb5bc3a2cd6aec1747849a7832ad686d761b1762da6c1cb3a0d9ab268b136490c78ad0cd853751de6c0af681cf897800e7c3de6c0af620efc5a4a0e7c0366c4eb1a23ca3b0733e2464cf81b1ae1cf06147e1316dd7c8f8f30e5c2cd98d66f69b41ed32598d6b760c2dfd6082f0928fc560cc93bba14c0879612f7d3c7f7e486ebb377fb4dcdeea5df8c45d0bb9a08aa0e1841b761c2dfd3083f3ba0f0dbb12ce37d2ccbf820a52ce30ecc880f7584ba0633e24e4cf8471ae1bb07147e974e38ef06fed84f9691a01bf86e8de06cb14b59fd8cd1c7efbc54b763f49fe87869c7e8b7b06463f4e175c5c6e8efc17ce9535d6a0be84bf7ea84f3a15c7e6058a8a1dcfb30c99f87957c3f563e7ce1c7ff13649a0f6804678b8df496d48bff87d9132db1e77fe9dbf3bf129e3f2881e787dbb94d1f130f62cef37558e77908739e6f423acfc35832fd56934c7fe8162c993e8269cdcf518bab12f14d01c689e650a95896a25bd09429aa4b9901e79e3d8ae9f1bd4e0fbea74a30f98f61f27f08193b8f63b1f3a3267696750f163b4f605aff84c50e4f23cb641551c54769ed7e1fa9ce0c7c1233f2678d91e53d8219f91466e42f3a23790a54f30cdcfa6cec34cd20663d8d85fcab2e64de267767d564d7eefd9e5dbb29ce2c274194b0a0b3399ec134f84da74127ad06d3c5bfaac50e026ead3fb57563cf62bafcaed3a59b4f5de237070fa2d3733a9db8e3fda171bc8ddb0573bce73183ff0c9927bc8009fe2ba4e01731c17f8714fc12c6f91f0de7eb02727e1913feaf46f8aa9ec184bf8221f95f4824afea04f3dce73f3f821334865ed309e6ed50712ea4ae1dcacbbbe0edd0d731ecfccc6e2ff6a9bd82617f0333621bcc88062919f1266644438d111b021af11626bc9146f8e6dec184bf8d3966e388263be54b35e730b84d4c89a863ab8c3c8b0d14055e85fc3b761542a6f8e5163f43c4f61795a2d477b3dc2ab14a215364ccd165e06ea7125fd0bcca533350e1f0ce24b7885d529b9d678accbc24e0d4be7730164d742cf87e6270af39b796192d60a34bb2d7080dcb199c34bb4c1441994925e4396f075db9f12ee6304d350ed320a0c3bc8725a96658926a9e52927a1f33a285c688ac80467c80c5744b5d4cf34521fa2ed2bd64e72a5ff9c25b17ee164589e2342be1d381623aaadbad1af5ebd814b0527886ea428d7d562dfcaa5a938a16090d57820e5857f64ad93a0de25f1f62f4b68d842bcc3ec204b70a29f8639d60de9e6e1d09d99efe0493dc26ace42d98e4b661257f8a496e1756f2673ac9fcfdf67e2230416de4734c70879082bfc004770c29f84b4c70a79082bfc262af73d8d8fb1a53b94b4895bfc104770d29f85bac90e8a6292446f60b56487c8709efae117e6f40e1df63595d0f5d09c43753f36e455d26fb19a31be6b925d352d1cbc5df2c111fabf2c45bdbca942547b5e8a3e532324519e40ea18f4eb917e6070cdb761a6c8706c4f62326bca746f82f0185ff8409cfd45539fa0713fe3316e1bd7411ce67778c737e548a4a4789a818eb223cd8a8e82f9881bd35063e1ad0c05f3103fbe80ce41956b483ac026c4115c4a0dfb030fbeac2e412568bf5d36b0285f23b86ad9f06dbc201c1b0fd8199d05f6702ffb9420c20943ab78218f12716ce005d38bcdeee9e68b1c0c97862b389d4e6d9fc85859fa50b9fe7f97c5e0f5f4d905c0ffe66250bdaaffa3716ad0375a9212b58b4fe83993b48676e0f901a54cbd04fee9c1b3877fe17d36bb04eaf0ec00da6395acd97a9675ae8ace87f981e43747a6ca77187e4faa4e616ff616e3154e3169b0606738b68e799c7ec61582a881d4528aef33221a2d3481cbca4eb2c181cccdc0cccdc1c9db91d3dde36a336a30bef6fdb609ae4ea34e989f85b328d52f3b8065814e469a2e08b8051d010333c1f8b02fdb855784f6b849959a031b3604830331b63c2876b84ef1e5078134c78a146f8fa80c29b62c24768846f0c28bc19267ca4467893a1c18437c75c6b94ceb58688f7bc4e846d38cafb3ce769b6b774db328b993af49def7613acf7aa05a6f5689dd6ee7929a5daf41e24d49658446caf8988ce0123625b9d705ec31e13b64ba015a6f60e1ab5cb03aadd1a133e5623fcec80c2db60c277d465aa0185b7c584efa4119e392c98f07698838ec3aa68aaa8c21c35b562a93d66e4788d91770634b2834e38df776e829f2ea1c371c11d31ad276ab47e32a0d69d30e19334c2f99155418477c6844fd6258780c2bb60c2a768845f155078574cf8548df077030aef86099fa611de3e2798f0ee98f09d754dfb80c27b600979175d42ee224b9aa1814ac920097a3bccd8e91a634f0f686c4f4cf80c8df0b501856762c2676a844fcf0d26bc17164db374d1c40f03df4d0c9ff177a78b5a7275ccd9e341a2a43766d86c8d61af0634ac0f66d8ae9861e319df797a315b1edab0be98617334864dcd0b66583fccb0b97e0a8f045af7d709e667df14f9119ce074d20198c6f39295e9f08c9099727a43eaabebb2303de663bd804a0fdefc8d778fa06dc08158f8bb25eb054cae476ab59c4198a3eeae71d49df28339ea60ccdc3d12457b6e9d47fb104c8f3dfd447b7c761734da8762e1ef1524daf57aa416edc3b068df5b13ed630a82457b3666ee3e89a23dafcea33d07d3635f9d1e6d01f67162824b9193edc7a7b5201ae4621a2cd069d04d13f18934492deaf3b0a85fa8ab4c0c0f16f5f998c1c53a8333193f1715ae4aa8960b38ddf94570b69bfb64512d84f214a2a300337d91c6f4d6014d1f8e095fac11be7740e18598f0128df007030a1f81455a69a2f49a5fe7e97524a6c712ffe9353e930ca2c1284c83a5c1d36bbc26a9a5d7d158d42fd344fd8b85c1a27e7bcce0b2ba49af6b6a21a4925ec760a6efa76bb105347d074cf8728df00f030a1f8b712dd771654c233d01971d31e92b74d2f903375eb25338c967270c538506d38611c1308dc384afd408df1250f8788cd2aa90cda40998e0fd430a9e88e1a8d475de05c43109d3ba4ae734dc27b303293f19935fad93cf47dae277669821320935ec117d12acba3d05d3a446a70997c097e6068daca95828ab75a134634cbbdb739010a76942cceeeefc8cf053cbd275584991f38b1fc910fca09235113e073f168c98dd18f130104b8fd746f8e4980e7196250a1f5b50bcb32eaef8cf75113e593256a59d671cd6f8fceecf65c4454d433c6a76c19ce1009d33f02e15551958e2dc5cc0aaa5514167804dc7c23d10ebe3d2875b212b6f41c29ea173c71ee976c70962c650650aeeb83ec2a7b0c5221a8638e3418833260a1d73c6993a6e7c8a4f64411ab9b9efb919ed5c5191e7f5b459622585dbd75e9502d383237c0a6f2c53f5474ff61041b64f9ce5a9ea87519fa54b29e20ca948c841e2d998e4c3c24ade15937c7858c973749279e5e18848fc2eb522f2bcc213ec523b17cb948e0c593f2ac2781c1596c73c4cf2d16125cfc7241f1356f26e98e40d6125ef8e493e36ace43d30c9c78595bc27e674c78774babd3095378655796f9d645e3738c18fca09865bf6c1543e31accafb62944f0a497901a6f2c961555e88493e25ace4624cf2a961252fc2249f1656f262cce74e0fe9732598ca678455b914f3b93343fadc124cf05921052fc5049f1d52f0329d60de0d798e1fc15fe182cbb0fac0b975501fd80f738df3c2bac6729d64fefef97e78245859578e81be2024e815986b5c18d2352a30c1178514bc128bbd4d61636f15167b17878cbdfdb1d8bb2464ec5562902f0d09b90a137c5948c1d558ec5d1e36f66ab0d8bb2264ecadc662efca90b1b706837c5548c86b31c1578714bc0e8bbd6bc2c6de01ba4e08beee23c24fb04dff6687babd70eb76d3c36bfdc4c5509cd881585c5c17362ed6eb24f3f990d7fb51f9445cf041985fde10d22f0fc604df1852f02158dabf2964da3f148bbd9bc3c6de61188b5b42b2381c137c6b48c14760823787147c2406f9b6b0908fc254be3da4ca476382ef0829f818aca17567c886d6064ce3bb426a7c2ca6f1dd21353e0ed3f89e901a1f8f697c6f488d376282ef0b29f8040cc5fd21519c8869fc40488d4fc25a860fd641cbf0640cc74321719c82e17838248e53b12cee91b059dc6918e847eb00f4e998da8f8555fb0c4cedc7eb40ed3331b59f08abf65998e427c34a3e1b03f2541d00390753fbe9b06a9f8b497e26ace4f3b044fe6cc8447e3e26f8b990822fc0043f1f52f08598e017420abe0813fc6248c19b30c12f85147c31e66f2f87f5b74b30c9af84957c2926f9d5b0922fc33a535e0bd9997239167faf878cbf2b7482f90ad637fc084eb082f54a0cf29b61215f85417e2b24e4ab3195df0eabf23518e5774252be1663f16e4816d7610ef75e4887bb1e43f17e48143760b1f741d8d8bb1183fc6148c837612a7f1456e59b31ca1f87a47c0be6179f84f48b5b31c15b420ade8c41fe342ce4db30bff82ca45fdc8ea9fc795895efc054fe22a4ca77620ef7654887bb0b63f155581677631ef775488fbb0753f99bb02adf8b49fe36ace4fb7492f940c2777e6024e86fbf1f6bc27f1fb209ff00e6ca3f8474e50731bff831a45f3c84c5de4f6163ef612cf5fd1c32f53d82b9c52f21dde251cc2d7e0de9168f616ef15b48b7781c738bdf43bac513985bfc11d62d9ec4dce2cf906ef114167b7f858cbda7b1d8fb3b64ec3d83c5de3f2163ef592cf6fe0d1b7bcf61b1f7bf90b1f73c167bff858cbd1730c82c23e4593c98c6113f821368fc12e66f197e0427f0b7973114db8444f10ae66f0d3242fadbab98bf35f4a372027f7b0d8bbd462163ef750c72e39090dfc02037090bf94d9d643e49a0a91f95134c12780b63d12c248bb73116cdc3b2780753b9454895dfd509e6d30f5afa119c60fac17b98e06d430a7e1f83dc2a2ce40f30c8ad4342fe101b206993117e80e4238c47dbb03c3ec678b40bc9e3132c65b70f99b2b760d9678790d9e7a718e48e61217f8641ee1412f2e7188bce21597ca1119c9de9fc8c2c67669c9abd979c16577753e9bae898453cccc4eabeae197c755f360b7272762afa62abfebed4453b8f9d6ebeaa691968b47fa513cc7f76cf885f51acfec405d010f7abafb15cb2471de492df60c2b7ab03e1df62b943cfb0b9c37758a53b3364a5fb7b9d60beb2be971fc17cfa2f22f8074c70ef90827fc420f7090bf927ac36df37646dfe674ce57e6155fe054b8cfdeb2831feaa0b80fbd3003f4cb6e0827fc360678584fd3b067b6058d87f6092078595fca7ae28ede5fc8ccc63f5b3305e1545c116c10ff65d3c0e11c5639738ebfce88015797f6179fbd03ac8dbffc6227f58d8c8ff07533bbb0ed4fe17139e5307c2ff87d5597333347b704c143fe738ce32974d64bbd41ecb3d93f18dc1d688085e2ea37e98d8ad83effd38cb7952215c9adfd1d78c744b28f8dbd0b5b8e3af64eaf4802015e8ff302bf374561e5d6be53ca78ec6139d9b4057887f4f1349975bc377737613e8b4da3727899375f91bb167ed564a1e73c5d31247628db08bcb8da51795c0df0fa60726a988f17d3ed4692890294cac5edef31d3941f774e17d9e5ad2f9983fc1105d9bf29d6f5c5a2b9d4c7181e31beeb139aeb54562d7928a386da3dfe2f7ebca9f229895053a2bc77aac84cc5d3b278b185b216cf46a191b43f049a2b402bf0a62590666d9709d653bfa8a3f775bc132a6f63e091f73d127416cdb06b3ad50675ba1c7b61922769649cbf8afb5f5664903cc92113a4b36a6393f8b7ec3f7c4579b6c96385eaecef8ae0ae0e5901d6ec524719e0caf66c05c8f57b0ea2e6f6b88511fa9a33ece57da982e68541991ab35c2ec1ba5b36f3aa157f1bbfb8b60b8556e755877a2425dc46a63ccead13aab77486835aee91c618b7bc6b86ba32a8df9ddc592507cba483d369b60766dafb36b8fc035bbb9e2496cdd4e27c1bd379b4537db1d279a3a616a82a9c473538cc7181d8f5dd252665397e6cd309b77c0ea29c17c40f930df14d23de912c673508f08625973ccb2b13acb462396cd13e9b35cd64ddca6b66ab5cc97a9b8242e3668da282d308b76d459349930f755b1eaeeacb888b9fb25d79da52d314b77d2593a8661fdefba9c22d6826271cfb58e33992a62b952b486163b25eeba3ab46a5bccaa717eda04b1e1c21ac23c110b95cebb3c1d2e4d50fac5caa83bcb5a61968dd759362169cee9af5580e7a189daaca9e694ad311b27e86c9c82fa24aff12e725e52b6badbe5c61e778ce7257a99755d12b6c16c9da8b3b594b8f550ed9404958292db3a982fbcbdac36e7a99bf6702a9cda629c26e938cdabb756566242e139b4c3384cd671181f306d989022da63164ed159382da085bb098fae4062a43eeced80d93b5567ef1c42cfae4aa1ae5117043a6204a6d5551dc4cddbc6811a08bd559d30ab76c67a28825a3559bc111f43de3cc7bfdc20f675c6ecdb4567dff6216a8ed5a234e2fb342f91ed3cdcaaa2b87783d8d405b3697ab038f3e63de3447f024f69c95a29b4a54757ccbe19987d41da8caead53643d22fa948f7824ae1dd655cdb11b66df4c9d7d7d59e25e417ef80e8596dd312d6725eedb0b120b73538a054adfeb81593d5b67f550346d15d50ed5c33c62496d7f362f0f6bb475b1d4faf7b7c3f4de55a7f7a8a42dae69626c90f73e963b795ea563db0ab1177d7cfb37510ca4de82ec89d93307ab41264e23bc353c5bd4aaaa34e5aa9fb1045e1b59528716666216cef5d346d68f0d4c13bec7fbc18b651f557c7ca5737ca017666311d643e5a71fc08f95a9e518a95bda1bb3749eced2a9be62d33bd2e3a64365777dc66b1fccdaf93a6b774f1aafb43de3d47de67d311abbe968ec49d83652b59ad47b47705a4188f4c388ec1eacad143f5b3ab63c5d8a8cfcd0b425fa6356ed818d20a46655fa5a1203308bf6c4faab92f736f8c9a9fdf45904efd7483d3fcbc238eca5e33028000715a7eac4a9baca7306621aefadd3b87fd21c383a2e572aeef2792b7553331d8469ba8f4ed311096ad45e4f8fd5dc3d8435dabf49915e0663b6eceb67ae1a569f9964585d660866e5026cdc3b583ee79652f14fe3e732a8c3eff0f88c97324e8c9cf0f664109b8762362fd4d9dccf13b3d130a953d3304ccf629d9e791e3d61fee4d5798ad4d96fed31d552341bb36091ce82bdebb9b6043dd06fca53df04a192835159ec672c5885182457895a86a5b8bac94d7231cb4afcb40183d62cc2b70252b7340fb3b4d44fda9c207cd6f5cf6ad0b7e7fa78212b48629f2eddf2af8258908f59b0c4ff7c451e66103f84f661f7eb2a860a30fb9662f37983f769aabc9fcf54a8aa3d321e1e175f17f5bfe19825cbb0ded9c43591e899935e0dd5999fb8ded87995896c4dad942ec4ac2e4ba557d0f5cfb9cecb8b98dbe65accea7bc6f908ccc2fdfce4217ac2a995efc93db3b1f35f24c297434d1252dc3ed695e21b5e9bcbeeed3c8ae4d4a6a261b525f3b098523c7a9f87bfc2890d9eba8b6acb60be1c2cb184e519ee2629e2cf0079c6b55b90459630ef72b309427eb9cc3995b70e1384dc99a97c19dd30a7f65626be520be79259a1ab8d0c03f511685d729bf64116c245c409f75096439a1f28bbd5595ace63b58f8cd58c6c3e1016199ca23725d762050f6d1bbd0f758a230b53874e775780caf5237c25204f6039b2ea5226a2434dfa2e4d1e9ef7a0206f78438500557b4b2a6e1e48f83a715d8493b913ee2a99db0d9de9b47a1a37ccc8e1f1504109ab9d80c5e364b6081c9f236f03b6771b44b1ada4c4c6d7d54e148d99550e3877fa972aa03180555620e43bbb2884ab2811b6e65541594e4e15b53d2ea058d4c8f92ca3596cb915c06e6a1205b63f25b0f6205fabda0ac0b56e1e05574909aead061c1758e17cc4c7a96bc4dd122ba02d64516855d4de169b3c273b7f97c929806a228ceb753680cb6a1105574d09ae2363624687df62c10678a78342a186125e73905467c5742bda80a97bf728a6d594989a024cd1d50b3620dad0318a680d25a246025195557954839651386b29e1f06d8066d5d6f9d5689e3b33648ec8f46b189f13cfb3f9d9b207d006809b41025c4709b0098b6d63f2014e1b00bdd8260ae8004a406d40f56182f8b05af47ff0f2cfae1cebc9de5164075222eb0690f10a843b48e1ee2ce5762c556afb33eca8b83eda278a713d75d9384b8c5d46f7a5b103d17a907b1d44dd7be106ad5f1aceb3fdf1e2f762a72da93a2c6d40f84d7e14e1c1e92a00d40a321b009ddf2e0ae8104a405d416e3689ad1556d7d4367af8f4da12e16b7344222d1149b6dc09d00688fc8f8278687d27d4ddd8325124945a9550570d8f223c8c12610fc662fc8f7771f3cd054a6b37f82db1bc71de1e747a1f4e89b2a52c5955925d275b0cf358951fdb0c40753628618fa06fa0abadafd4e0aa0d885ecc89223a325d1d8cbcba0be78da93e339b1aef7f348e823b8aba831182838b98c7892e47e87396547dc158c0d194f05ab068bd2dba26d7dd09c006509b4103fe184a50cd6a73b089ccdde88db743eda89f150d8d42da403d863943e451cb3dfb704d745eaf1421d9008c4fbc56c08ea54e7edc9f6c9d977128f0ace3d23bfc163bafbac4b2d2b11c8c921f4f3fd81bcdb76caed93fd9300a6d23b5b74d1253546a44e0d1d6667407c92ad1ce5c6505b82d00dc09d473cde0c6dd364e29e0934615ac13e927b0b873cd560a317637bcc7002f3b897ab86e8e036d02f3bff9ae0d0037882653e3861ee1de7529a9cfad0d461d9f05dc8ab99d48abc4dd6a59fec6cc0ae6cbd48cd3fc6438ab372be53ed9aca4f95c96ef4956598127c864a538db32cb57f53c2b640f61568029b45981b2c02cdf7599ac400578564af94956a00e9bac4015d82c5f9341b302cd80cc0adc4fa2d3199ff3961537c3242b61e7429676ce40967620290b99e09395607e541632f09995a4db362ba5c920593e07f8b3428c6a67259dc99f85f65264256c696621fdb359298e8cfafb2e7ea026baa847bf1827872fea39e5fff3f53639bcfc3a9543e0a721f13f6e8deb34ea1a17f73c7779152f05136fd197ebd47b3c3a748fd321f6603155b3d269d334a6eeb5ad1f0353a97f9580699da79b8433cf4a9c67029c67988433df4a9c37019c679a84b3c04a9c6f009c67998473b89538ff0638cfa61e6358208b9858ac6e558dbf4686af3115be0900df39e9f0c6a5a83f42f517b051ac900e670b2a9c1d01ce734dc239d24a9c8d01cef34cc239dc4a9c37b328cef34dc2596025cef300ce0b4cc239c24a9c3f009c179a84b3d04a9ccf019c17998433d74a9cf300ce4d26e1ccb712e78100e7c526e1ccb312e73280f3124a9c1d24cec5b247d3bbcb9cabbabb83590e1dc8865420770635ce4ba9e7c3ab3e75bfa339fcfd4af1ae7dedf429c0432fa304db93c1c10affc39b36c3ed07e05e4e3de739519f1214c74b7afb3a44f60419c01594285b499485e9ef4dea4a05ef2ee08757a603dec8ada82bee1500ef2a4a789d9294e1b18998b46d4e06f32f00f36a93608eb010e63f00e63526c12cb010e61f00e6b526c11c6e21cc3f01cceb4c82996721cc5f01cceb4d8249382e4906f33700f306936012b6cac9607e0f60de68124c1b5b383f039837990473a48530ff05306f3609e6280b61fe0fc0bc8512e62009b3dc79a95c5c75934517043a0981b4bfb31d1572b8cdf0adf4eb98978999cfee4ceca5029e7d9d6d2d80976ea6eee4889fe43c5e2c8ea8669ac5457507af0f15bc8e00de6df5d953197b900c61d23d9c0ae51520e9de4e8972405c6e592c844d66ea64e7f1ceff3c69af167de9352cd1c929a4b0c98aa6e300ec3ba8133d2c5c92eeff6641b7702790e8ef4c47a2f75749b2d10f7b03947751a2dc4e937ffa3d5e9214ed895468d783247e37b5978e13a5f84ab9b08b9f22c447262be4624fb5dccd5d44685f15a901f0d27bd271a440aef3ff0a1978b1a859f2bb368f061d0d10de9b0e8423b63a84f70384f7d11fdee34e3950d7714205f760439ba716dc0b20de6fd27215d269846438ab4121f380493849e7bd91e13c17e07cd0249ca4b332c970de05703e64124ed2490864383f02381f4ecfdab49cad68424c3f80ef91744c6a55fb454c63f17b15d85c866f0b403e6acef4401b8728aa00cac7d28112ce0f9eee340ea7c8fd4196381fad4d875792a15ccfa2281fa71f3a83830e0bd872816ebcec5a73454d76aea58e88b8ede22ce8626b09603e918e7ea16ab18b4a55ed2099da60445d755dc2b994d362c8d05e04d03e998e215eff4ba4c960922d541907603e65124cc2c9076430c702984f9b0493702a2119cc9100e63326c1249ce44a06731880f9ac493009a75f93c1dc01c07cce249836ae94dc1ec07cde2498845309c9606601982f98049370fc910ce67600e68b26c1249c7e4d06732880f9924930095b4064300702982f53c2cc64f1fd47c1e6601296ef6473304f017d4aafd4e71c626faf3b612e4ad6d73904f8eaab26c1242cdfc9600e07305f4bc70006efed5c2d7addf94ed8699a804086af3bc0f73af5f9940a5ffcec4c2e2cba8184cd2342cf03a06fa463524cce563729e62880f0cd74202cdcea10ee0810be958e5d0e7245aec80727d6a40b1e596ffa3700dedb66d72509bb84c9ea92f783bae43be99e1fec7f2488b09a4ee6b9b701b4efa66b3a6174e8178e5e920ffa92413c1224fff7e8fd133f11a3de8680c98aa53600edfbe6acb2b0715b899d00ca0f28517603495d37ebc8559d27fa0a71d7e659481f03a81fa6ab3594ec30239b818e01403f32690fcd51567619b701e5fbc726e11c6925ce08c0f989493849cfb920c3791d48ec5b4cc249ba3d0f19ced300ce4f4dc239c24a9cef039c9f9984b3d04a9c0f039c9f9b8493f47c35329c3301ce2f4cc2497a201819ce1a80f34b9370921e574786b318e0fc8aba5de4efc8db3942357ee82e61bb682615d01100e8d7e9e89faf8703c1c87641d81fc0fb261d5d1f3069eb379888ddaa8770d2e1575450df036da16f4d844ad8494706f55d00f53b13a1124edc26837a0880fabd8950094b7832a8ab01d41f4c844a3829910ceafe00ea8f2642259cf04506b51c40fdc944a8845312c9a02e03507fa6849acfe207e662c7e427b0e8e1efd1b1a5e851f233191f0a59238258ee44c36a562ade2a12355a3598421809055491d08b4523e117ca48e8cae2479f120d43dbbb80fb4380f45773b615b0f1b89215208bf8cddce5db364edb790d78e9efe6ecd04dba7d15999f1e0260fe61124c1b8fd5d90860fe69124c1b8fd53900c0fccb249836ce7f3a08c0fcdb2498361eabb302c0fcc72498361eab530160fe6b124c1b37939e0b60fecf2498361eab530460fe67124c1b8fd53901c064db1804d3c63deb4e04302394303359d82537361ea1b33768bb6750e26d29f1badbff958b56bc2bbb8c72c102d959eb0cf8e53694e0829d0543d894243b0be639e0830d2851f6d4a00cd2834458b293f5203d0de03634192e61ee4906f73100b791c9706ddcbaf22500b73125dc70ab416d445b03d036a1440b5733cd10c370cb3dc374139dcf2a458836af66ea096a034dcdf555c2060099af3e007cb51925da6d59a21a6a151dba6654e8328057364f471d156b88dabfbf5d1780b205254ab5995001db9a36139a0ff0b54c77fea89f9ae3ce2659253cd69d2742ea995ba8d0fe0af2c76d29d1063fe3c8c65dc38a01ce5626e1ccb312e7a900676b9370e65b89f36a80b38d49380bacc4f92cc0d9d6249cc3adc4f93bc0d98e12671f163f4d71125bcb782f680d530bc166399f9730de433f4780758f272d4f4f53b30d15e4cea02ad53e1d3eeb7fe30c1b37fb6f0b7cb6834938475a89b301c0d9d1249cc3adc4790348ec9d4cc2596025ced301cece26e11c6125ce6f01ce2e26e12cb412e7e30067579370924eaa25c3390be0ec6612ce7c2b71ae0138bb9b8433cf4a9c8b00ce1ee91a829b2bda3c358ee471cee7256cbedc3ea3446c9f61f739b18b01d0edea73420e1447bae49b6cce5d29a8c4f74cc70446757282bba1cb22d111a25eb27dc3f5a5c02f332961b60230b79653b4c70378bdd2316e94dad242c202886c5cfd4a80b6b739b3940bad5c5a980d72cc3e26c1b47169610e80d9d72498362e2d1c0260f63309a68d4b0b870298fd4d8269e3d2c28100e6009360da58651f0c60669904d3c6a5850300cc8126c1b4716961168039c82498362e2dcc0530079b04d3c6a585f900e69074b4cc47a4bf65be850adedd2c0a6f683a26c4f273e4f8de5f7c464779ba7a85c85adf5f037cc3cc593e48588f245b3e783d48c6d9e948c6a3d29f8cc9fcf055e08739e6f821617142e687bf013fcca52f9b97690e859aeb3059cc164b8596884dd0f97c37fb46739a03bfcc337741958d2b8257013fcda744db41a09dcfd4d9aff574662119c8f6c0470bea7379556c65dcc6bea06c8072b819eb838a44995e21f2512e6e052d5ab233113e01c9bdd0a439eea4fbd190154c87029c234cc2996725ce4b01ce9126e1ccb712e74300e7289370165889f3478073743abadbfccd29cab3b2eff21600737b9360dad877792b8039c6249836cedeb81cc0dcc1249836cedeb80ec01c6b124c1b676f5c0460ee68124c1b676f6c0230773209a68d2df60b00cc7126c1b471f6c68500e6789360da387be33c00738249306d9cbd713e803931dd3b1cea3be6a6c84fd27660d9502ab88f00b8934c864b980d90c1bd0fc09d6c525708e97201b2ae90fd00ce2926e124add893e13c0be09c6a124ed2c5a9643837039cd34cc249ba4f0219ceb701ce9d2971b661f11bf944078cc917a3920d0d7fc1a20077a104d856021c2e66c7c92dec044adbd74d5e0c104e4fc76652c92b47139877cbc871ac52005e475b49ea9a4104f94b90d0675042ee2121973b2f71c0a572b7ae594cedd1159b8f464d21054bb64bd7d900ec4c4ab0991eb0e5625a58b510139d1896a8616a631bff688077567d4ebd495b3b896cda620780723625ca5e02e534e7a5390218df577bb5fc3ceaadf5364d8cac32d5141464bb9ab331858dc97e2ef0d5399428db2741a92c25ed775a1b21c2f803c038371d8553fce45abf676a118e33919da9b511e02d3277d30a1b0f83780fe4a5f3d2910160e57e340320cc47c9328069c043e75362e4a7becd965d226a639f69c23379b2b7af2c6f0dfc6fb774f85f4ead0f968806a9bbb3b1edc741dc0730ee4e3d44c7814d14019732778329feea0162cb3317e71cf1942f9621ec6bda950ae62800730f73967011568cc8da42d7807c71cf74a0cc49d062b7bbfbee05e0957ba5a307b460abeb012d0708f74e47e71cf7c649a2ba53239498ee7cb258e497b3d81ad1e759e93ce375cd55e9e89d272b7e4603b0fb98b370cbc6d99e3300ca7dd3b1f8bac05304d95c0d5a0be02d48c71e0a7ce57ada0f15236b0c7e09f02d4cc7a0afff9330082b3f643b12b702959f6293708eb412e7dfc03b17998493f46c21329c97039c8b4dc2497af21519cee300ce1293708eb012e75b0067a9493849f78c23c37927c0b9c4249ca4675a92e1dc19e05c6a124ed24318c97056019ccb4cc249bac4800ce70280b32c1dada0fcfa6805913522a7027cfb9934f53597b243830ce73ad00a5a6e124ed2d5c064382f0638cb4dc2996f25ce7b00ce1526e12cb012e7a700670525ce2ca6e6be4d105dc1fc638e8f03ac148abb83bb6a6cd21d01dada66c2b50545d54a4adc4d848052a79477877cb964325c6473881b015cab28710d60f1c314b13389dc99ef2bc4bff908518d10394900e66615096a69985a388d0a760180bd7f3a6aa1b9a2cabed51cd40472d2ca740cf7f2b1ca298c8f3ff251caa562c0b7d2ea51c9d5c003abcc99276ce3565395c01bab2951f22d4e678b3cb084a999ecd82ca32a0b8ba026c0276bcc9dca6ae336bce703b4abd3b14d85bf4908f956eee0f52c80b9c6249836cee9781bc05c6b124c1b77f07a1ac05c67124c1b77f07a06c03cc0249836eee0f5048079a049306ddcc1eb290073bd49306d5ce6f70880799049306ddcc1eb5100f3609360dad8b07c07c03cc4249836ee61fc0180792825cc2e2cf82c0f42ef241b491f07ba3d0e330d28a18792019d08801e6e1a50c2d61019d0d100e811a601256c1191011d03801e691a50c29e2432a03b00a047990694b037890ce84e00e8d1a601256c1d9101cd03408f310da88d13100b00d00da60125ec5922033a1c003dd634a084bd4b64400b01d0e3ccdeb087b0cc27dbb0e74480f778735af523adecbcdb05c0dc68124c1b3befa6039827504f64483427c455bd502cbf26f4ca8654207f01204f4cc74486f81cd4cf5406c2363dd94486ab00da93e837908c45eb4ef6e2f02ad8ce625ae2aa8435001b2bfc9ca7027cb239db55d8381a9f0f509e62d2d2ad5156f68f760149ff5493708eb412673380f33493700eb712e76d20b19f6e124ed2c370c9705e02709e6112ce1156e2fc05e03cd3249c8556e27c1de03ccb249c768e7cee03709e6d124ed2a90e643837009ce7988493f4f46b329ccb01ce732971f21f6aff62fb5ae6ad00a6f34cf2ba51560e6bb406d5f3f34dc239d24a9cff01efbcc0249cc3adc47905c079a149380bacc47932c079914938475889f35d80739349380badc4790fc079b14938ed9cb0b00bc07989493849571691e1ac06382f3509679e953817029c9751e2ecce62cf12e41c6a189fefe13d41d0bbfd0fe1b01ad97e0b7b81eafce59458e1f6fafc2012aeaa77bb1f57fd52318e592ce0dbbb91c527c05fafa004dbdfe3af8b58fc88baffb177caf35ba9507f077cf84a4ad4bc2b6137b1370317309d950951e31d1ed5ce7f1c2919bc3e54f03a003fbd2a1d7bd68c645bdb11250f018457a7635a8d4aea5522f1f28269b28457aa9db1443eeb836ceb95d340d2bec69ced806cdc3660294079adb9bbd8104e9d252b806e0719c075e9d8366d04db9a36effd14e0bb9ebafc76779d4bfb9e7364be3701c0bbc1ec59f1848b0ec866c51f0b72cd1bebb3008a3d579070da21d9b98277029437a5a343049e2ba82b6cecae75be0812fecde64ee6264cf46479ea65c0536fa144db97c556e8cb19dcc5739eec225927769b75bbf74ad914f9716c864058b91f4a85f90080f95673a674dbb88bc8ae2033d89c8ef546feda4905562edefa0cf8e56de9a852a9e4cff3ce12cf56aa5b5f97f36c80f7f674d403305f8d3fab837060840ce72280f30e9370928e3391e13c1de0bcd3249ca4a3a064386f0038ef320927e9841c329caf009c779b849374ba1819ce3f00ce7b4c1aa31f65e52e379d00ce7b4dc239d24a9c4d00cefb4cc239dc4a9cb7b028cefb4dc2497a6c1419ce0b01ce074cc239c24a9c3f029c0f9a84b3d04a9c2f019c0f9984d3cefdeb7603381f360927e9e11264380f05381f310927e9f99a6438cb00ce47d331fe9e5b1f43c864639cfd413df3b1748cbff38097084f54b22be42bf675164780ef3d5eff9b53a942c6bea95e65c00b9f3005a48d73e6e600904f9a02927018980ce41900e453a68024ec662303791200f9b4292009e7709281fc1a807cc61490847391c8407e08403e6b0a48c2aa3719c8bf00c8e74c01493887980ce43700e4f3a680249c0a4306f25f00f2055340121ea44306f21f00f24573d65ed878cae0be00e54be9989ee56fa6db702b8fb96d0760be6c124c1b8fb9ed0160be62124c1b37d66d0e60be6a124c1bd7abb500305f3309a68d05d03600e6eb26c1b4f198db8600e61b26c1b471b2350330df3409a68d27656400986f9904d3c6636e7b01986f9b04d3c6052a7d00cc77a8c71827895d11b88ad324d032e7e362562d3e238347b61e8dcf7f55f0de3567112a61d94db608f566e087efa563bfa3e82e08fae57c45ac524ca1ae624b84b015b4a38e275281ad043efa3e25d83eccbb66d25de11bdd02850be4b33112e7a33656963600effd209d9ba0b940f9c2549ea74ed4f674da7b2ed65700eb87e62c44b5b1063a1864031fa57b55baff1c96102d590efb26f0d28fd399f8cb1c25e683dd66f01a0161e227ab11fc04b07e928ed96fc3d33f75902cb9df0492fb1673d69de75ad9e03c0178e2a726c1b4b1c1793280f99949306d1c723b02c0fcdc2498360eb91d05607e61124c1b87dc0e0330bf3409a68d436e8703985f9904d3c621b78300ccaf4d8269e390dbc100e63726c1b4b117690d80f9ad49306decf0580b607e970e9839e26ff73a8dc56fa26ff3a6f95fb128ccef4ddade84b43c27c3b912f8e60f26e1ccb312e73900e78f26e1ccb712e7ed00e74f26e12cb012e7fb00e7cfe95804cd0f7248fb26e46463ec9f83a2e79774e0cbab0f7c64de3719e0fb95125f5f500d72c723793588ef83be52285d2992324fcc95daea5189d515a42d00f36f9498db337ee66fb13cf98a8baa705e5f26f0560894c5820be9a13764181b028cbf5362ec8978eb3831605626e6298d637cb7573e6259ec0828b7de47770770ff48c710706a078dd8b831f9a500ed9fd4c93f519549594a3ae4cb9bd62418bf0755a5bf2831666a30063b3383b04f9e6c3f99e301debfcdcd00088788c93280374006f00f25da5e02ed54e19f73189fdf512a8bab12214acdaf5b2e2280fbf162e7dfaef8c9ceb5d4115b6261e1d50c00fed7ecac8170549e2c6b7814640dff4b470186cdb49b203204e2132f0fa22ac066008cffa57b969dff3cd6c6b3dc6e0468598334f5e7aba6816a67455b5e763705ba81dc344209b3870666f2c2cb5eb0d300d80c4ab0ead4d67cb6b59dda7a0140b80d25c26093be6d9c1e361da06c4089b2770094739d30cb45f7df2ce75faaafaa8ab6c43f84aac49f098aa5869488bbb0d8c9dfab4447dfb2843e6be324887700d0469440831ffd4088936c0bde9600676393708eb412e7ef20476d62124ed24d06c8705e067036350927e9017964388f05389b998473849538df04389b9b84b3d04a9c77009c2d4cc2493a5b940ce72480b3a54938f3adc4b912e0dcd6249c7956e2dc17e06c958e8e90d8e9b7558e18b7b7c9debea45280b0753a3a42fc4d07b7716957056805b54997372e96339f4ad95ae98969e896fb8a0ae103c01bdb52226c0f1096d66e18a41edbdebbf918c0d88e1263fc18fcd67e6c7d0f80b67d7ad10699de4088966cf0ed4c80b6433af2cfbcad6e58631040d8911261f42cac7a98c74c3641a12fc0d789129f1afef5372a9467e5b8d0d50066679360da58b7bc06c0ec62124c1bb70d3817c0ec6a124c1bb70db80ac0ec66124c1bb70d381bc0ec6e124c1bb70d3807c0ec61124c1b47cc4f0230b73309a68ddb069c0560f63409a68d1ba75d0b60669a04d3c68dd36e05307b51c254338d820c9f117a27d910c520d029dcdb34a0841e4a06741800dac734a084ad2132a03d01d0bea601256c119101cd0440fb990694b027890c686f00b4bf6940097b93c880f60540079806d4c689085d01d02cd38012b690c880760340079a0694b067890c68770074906940097b97c8806e07800ea6049ac9c2ae1526cc00c886e21603bc4328f1063bf588b0fa4476c6c19300e5504a946a50b8b03e0685c9ba443e62517cc328f1855b6e4dd852229bf1712df0cc6c4ab46aba576e6df75d0973f706e3ffb67dfbb5078187e698eba1366eb97207f0d05c4ab4c1170adad81bda19e0cc3309e7482b71360538f34dc2497ae62b19cecd201f2d30096781953837019cc34dc239c24a9c3f019c8526e12cb412e7cb00e708937092ee4d4786736f8073a44938f3adc47918c039ca249ca47344c870ee07708ea6ef4d9ae1bc50c24a05ca7ada2391ac45d40ea0dc9e12a53a3133cfd3e4b4b92f6915803786129eda2b89af6f9bc8f8beddabd86c562a3b3edc1d924a8540b5397a7447ef2a66f382d60100f10ee9c839b17c33fe1419c2914d329c0b411373ac493849a7d192e13c12e0dcd1249ca4fb2990e1bc12e0dcc9249ca45bfb90e17c02e01c67124ed28da7c870fe0c708e37a9123fcaca7975ed01ce0926e11c6925ce4600e74493700eb712e78d2c8a73924938490f3423c37906c039d9249c23acc4f91dc039c5249c8556e27c12e09c6a124ed2a34ac970ce0138a7998493f46c4d329ceb00ce9d4dc249bac29d0c6709c0b90b25ce81ccbbfb76a5e848ae11930f959dd14daa606030a871cebf2ac52c50d23d9686641001ff13d44ca75302efc012afe88ccd59c940b6a1f2dcfec07367980292d023c940760520679a029270d63c19c86300c859a680245ccf41063217809c6d0a48c2e5af64204f052077a50499e329dd6bd0a9b2f83e8a139c375638faac14bfb8a9692aebbb5295f55f80b27e0e257eb57b83df2e67c2690e641dcefb0098734d8249b8d10019cc0500669149306d1c0a990560ce33092661b59e0ce6ae00e67c93601256a4c860160198bb990493b07a4f06731e80b9bb4930096ba66430e703987b980493b0138f0ce66e00e69e26c1245c514c06737700732f9360126ec64206730f00736f4a98f831b9939dbfcb04c612c7de9542b0fdc7e4eec5a260f7a104db5d809deebcb0584ca7857b30d4db0470b29d191a03acfb52620d76628c8d1b512f01497f0125ca708749d8b8b5c0f5c04b17a6a388c2fa4763bd7484955bf94f027e5a6c124c1bb7f29f0c602e3209a68d39e8580073b149306ddcca7f4700b3c42498366ee53f0ac02c3509a68d5bf96f0f602e3109a68d5bf98f0030979a04d3c6adfc470298cb4c8269e356fe5300cc329360dab895ff5400733f4a98992cec069584e53b5937c83100ef724abced58b4db6eb5e896e38bb61789eeba34ed5c47b635e5121685585e9f7d49b1bb7c1256dec9503e0cfc710525ca5ea1937b2e6553932cc17f0e0057980ed8c61cf5450078a5e980095b5164805f038057990e98b0654506f82900787fd301dbb82bf8f30070252560b5b2098e9562037ce423a46438fb80ea579539d52fc2a62b59f5eb55e099d59428d5e1e5d033e17e63e4de483664f719f0c61a4a84e1b6b1a69c654f857639f0ced5e948e8fe3a566cec8ace015eba8612a59aae93ca983d617f15998f9e02c0ae3515ac8d7bd81f0fc0ae33152c615640067622007b80a960097b02c8c01602b0079a0a96b0fd4406360f805d6f2a581b2b589900ec41a682259c2d4506f67000f66053c112cee923037b30007b88a9606d9c79ba27007ba8a960090760c8c0ee01c01e4609569d63379cd5c3397664f88e00f80e37a70fc0c6792ab301ca23d2d10ded7f35b38ddb161c087aa78e340927e9611764382f01388f320927e9512c6438ef05388f360927e9a9606438bf05388fa1c4996ceda8b72bdac682e80300738349306d9c30f9318079ac49306d5c32f63a80799c49306d5c32f6168079bc49306d5c32f60280b9d12498362e197b19c03cc12498362e197b1cc03cd12498368ed33f03609e64124c1b978cdd0d609e6c124c1b978c3d2860366ee8113e394ef804d1dce30dbec52c7a38df303685f1bd3fdde3fb163bbfa78beedf6ab6d0c1b197f35fb018d8c7f94f773f224e609cc4d6b255e22e97572264af709e72cdaa584e3fe79553b84334950e9125baffc639ccab9d77e6b05211fa3a3697b9870fce72fe56dbcdd408245991f6ce17b39d7b358ccf59e52154389a2c6395c2e2d8c309b3224d04a752b65a12e000b3a4aeab99bb2bea34d9f158e6d85c2c34a974de6920c2711bd1599196e0975a4f334d749b5709adb8c4dd44d73ab75c311e2f2cab96baf077c68beff9de2ef83b70c268fcfbdc1922913632feb9ed3304b7628757b1b816d56a98cdf7f48ef00172b7b37f586d37ff30b93bec0af94bdd4f2e93c77e6269a7f2288ee8d37c799df96d328bdca4c6bf5f2208960aa9d3925a9adc3e3c0db448102bd9fcacc9addafed378bccb68176eda29d2dcf9d73c27e65de1a54e82ae14734f2bd9d04519ace1ff03aeb24fe5b4340400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/b35a7dbb4e652f748a8bd23a38b21abb.asset.meta b/Assets/SerializedUdonPrograms/b35a7dbb4e652f748a8bd23a38b21abb.asset.meta new file mode 100644 index 0000000..14f44fe --- /dev/null +++ b/Assets/SerializedUdonPrograms/b35a7dbb4e652f748a8bd23a38b21abb.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eddf5f0d68bb7b4478aa0292ea174498 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/b35f97b1813cb064d852c92d1c5c1751.asset b/Assets/SerializedUdonPrograms/b35f97b1813cb064d852c92d1c5c1751.asset index 950658b..5acc6fb 100644 --- a/Assets/SerializedUdonPrograms/b35f97b1813cb064d852c92d1c5c1751.asset +++ b/Assets/SerializedUdonPrograms/b35f97b1813cb064d852c92d1c5c1751.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9df77f14c715c0e704870a02098c105d7409217427d18b01551045809a0bc6704802644b82a8101cc789d31327717a777aefbd38717a4f9cdefbaff913f2433e1f67deecaceeeddebcbbddbb7d7b5ec7d24737b7b3bb6fdefbce9b3765e74e2509217f624df26548f4890ed12c06c588b82e26e5bb0e994ec85febc8ce3f2ba6647a55bea6e4b926b13ec79df0531f5b215f7be4d1b4989177ce8a61998ea9f3fd6254beef91f78eca23c8bd22ff46e555b1f9f2a641d129ce885e511babc9216248dd34adf3626057ac4cbeb68b07e4d951a514149250a76ae54bbf3c33adce4d48a5edebce8b0bcaac09796e58de3325c6a5cccb4a62d97f4a857a23ace4ac4e97c9bf72f41ed2a5f26f812ac53a5e22e66e9dbb56a06b63fa0fee1940c79242897d7c4ea77124c3a48340b2cad13d761ea4f3f4fb417d5c9a2e6fee9e79280fd2127dcf103a06fd9a5cba5479d4af1ae555a13c4817e9b2eed0c7b53aad41f7d4e874b94e17eb7bee4432ec7c482bf5f9bbd031a4153aff6e7dbc42a70b515915284ff982bee73c3a8ee9eb21ff1e8bf91c1bdbe6dbd0315c7741d7cd51573dac4665dbb6af4179abd075f63948576ab9f7ba8e2f42394f3df5d47f5df5d28264b6e834219cbedbacd3b5e8dab5e85a48d709a7efc2b1f48db85d9fb6ef6e1499bed16290bb09e56d447990ae174edfddacd30de89ef5280fd23ae1f4dd3a4bbff9ff76e9d2e451bf1d28af09e541da289cbebb4ba7ade89e569deed4e976e1f4dd46940fe936e1f4dd6d3aad174edfddadd30654563dca83748b70faee169d6e150edf9d6363db9c44c7c8774bc0a74cbed58374e8d1e931e1f4ad6e9dee41d7ee41d742ba57387d6baf5577a58fb9caeb34d45d8f416e17caeb44799076b8eaae43a76d3aff923e3eaad37d48d63e742da4fb5d7aefd77acf04a0b7add761c3bdf9c8b3753f6228e3884e0f09a70f9ed0e9ede89e43280fd203fa9e143a86f4a048fb1a2ebf1d1d231f5b60c7115bf7e3e8185d17b7dbcf499d9ed2e9699df6eaeb2f0ba7cff6e9f40cb2e58cbe76d8be361e53a392e3729c90123744023ac018b444afc327fbcedc0327d5d7c20bfcd4ab6267e410e586146018bd0caab1d18c8c26adc6d1cbca5825d2bb43bda6e415634a2814e62ae2f18c2240b971f93b8a865ed332ff981ab9c1e06b4c9e6996c0c7d45d9764d83c2f7f9d528664b1e372f8362a1bc5ac2c0ae45d926a675e99cb2418a6b9efe99332ad51e484ccb181de90c7e34ac37ef57a53693aaab4ef9179336a4c3b2947b5ed32bda54acbb47d4abe379539a0919975340f26a97c6bc86a5753a7b406b44fa871d8b335528c1a51c3e411dd0ce727d448f8918c9a7896a11564e2aaa3b164b4286431475eab48a879485f0641ff36665a68f6ef5cbc2f642103d55dab2c48d730fcc49d66ed140935ad5a93c3ac6c50415e436c798684eceac7e3f393a0a41b7dcc845e4d2d0642440fe7ae2b292979ad7ffc0075bb1b7f06fb245c56aaf0adc8302eb70a14c21203c224145366d4aadca5155c49489e67926ccfe98deee6161ea785cfa7845704203c6e72abb2b0dd2add24a8c59aec6e0553f81d2e1266afaa24bc2ab70694572da0aa675100d5534a095f1c80f03253ddab91f225d6ba1f9479d630b54b9d1d53631bab27859a9890165dd54135dbb5d97da2cab34f542b9f802587a034a37ca59c8a404b0c1128e627025598ea5265be88b52ebd4e938ea9d5e5513901bb2ceed3e35bbbdceb8a1c68648f93fb647a456901f9c39a78f6b2b27bc3d2393e69c009b5f2d725bc4ff6f8ad80c5c412e595cb94573667f14a9336d93cd366715a2d9ccfaada8ec7cd6da24695fef46243b5aa8526df572bc1e742ecc3bc8cafcdbeb9dc73a4aa55b552936155d6612841add2148b2062ac30349524305e39e79bab941e3bb2f8e6807a9e04b3d72b4a97897c3cd31dff6ae8f8b788b26635650d0ced2bc0105fe52ca63ae4b50174c85526475696dd5f940e39b312edc1919f8acceefceb3c3b7f9d72ba842fa7cb475faac1545355bf3e80aa5f4209df1080f0a594f08d0108bf8d12bec9203ce653f832937068119b4d6ee3165c470baea1b4de120092e594f0ad06e1953e85d752c2eb03d07c8549b89a33c9bf7297f06a93f05a5af84a53785301b59f35bc3925bb474bfefaea6d9ec355a30a57990bfbb9caa7c2cf2a13bdaab0e959d78da9ebfcd383479ff5ee900093a20745523c246f3b20ff1e94053f44406d22a0e6528b82bada0035092eb9c34b7c69a47d7d0d25b8b940c16ba9e69f08a0f9af33098759273c272e6885ac8e92dc52a8e4f51490d600806ca084ef0c40f84693705894d9e5c5472a69c19b28ad7707a0f5664af89e00846f31098700b1d70b926a5af056cafff615ea7ff526c930f3d82f8899073c30af80918daf994783a91c7082835ed064e996b751061ca20c809d00fea74e8d543987a9728ee455ce76ca418f06e0a04d26e130206df3520b5906a43b28addb03d0ba9912de1180f00425bc3300e1494a789741b8dfd9450b5599dd0556662ba5f5b10090eca4841f3708f73bbbd84509ef0940f3dd26e1a0216c3b2a7476b187d2fc64009aef3509874e01362315d47deca3d43e1d80dafb29b57b0b55fb80493274d467bc349d2c1df5414ae5b385aa7cc82419fa9f7382e87f605383fffee776cacbfbbda0c9e2e187290306280306f332e008e5924301b8e4514af81d01086fa384df1980f0764af85d06e17ebba20eaa6eefa6eaf67c5e75db692a07babc7bbc3867962eaf8ba2732100f4dd94f07b03107e8c127e3100e1c729e19702709a1eaa32530556e60993600861b0c7b6d08efa24e5eac394abc36e3debc1135440436cbd303d96b4dfb5cbabae490137d506ca5931657cb4e8eff1d22993ceb0f87645102b5a67e5414a3c2043d2ac2c1134c928af892eefb4a1bc847a0011ee629fb5a20672fc2ff65d959ad665349f878f9857f6ae096a652fbb0ed4ca5eaf89a07aca32c94a30d7e37278fe34abac80f73785f5587c40959d5ebf2c64abc398b46fad216ca9d065647f9f62df6a6c55c16b4fd5d819538da947579742a9b17ed9399e94489a65eb1b536db6599fb38fed363dea8829f67dd96be57e534836d6c6b8b0b72305a51945fc2cd57f4c14d87f9c33098695cd492f82b3ac6cf69904838f5cf722789c16dc4f05f81ba6000f5370f323e5cc47d06df2754a554eb31c515c54fbc766647a4a359eabf2fd35958fdd26bd1bd14fa73140d9f01c930d6dae46952ed3d2f3ba34ddd2725afe0ea82e75328ba674bef38c73ffae1ffb0629fba64cf62549fbdc35724cd788570bf2ab9d214afbe9fc6ba74b56edacbac9f2c462d6ce1d947d3326fbda0b68415eeacbab6c3f16de4959386bb2f0a8a71aec53e7524abf1115be0bafc3fcfcf32ecaba9b85d61faeb50e1947a0931e2942fddd4d59f85c9385877c5b6847f6ab869d90b44da67d937eac3a4f5975cb6455376995490f67cdb9f772ba6bd0de8548db9a29c38fa5f750963e60b2f4206929ecd04eefe5b66c9cd675075aa524018880993eea8c8eeeb343f21c0cc7fcd87481b2e979269b8e788a296d52871165b7f509c26245947b29db1e34d976d2651bded26159d7ad5b5bcae07bf86ae719672ba4cfd0f2fcd87c91b2f9f9d418c5eca39df2efb2bcc8b6fd94b8ae2cf36e413ede7889d2fe2193f6ad7947c8e1b95ea0432dd198a2497e3e97a22c7881c982aebc7bb162c7c2cb949d2f34d9f9a8b02793f6941c4fc82dd230f6b822527ac2dc3377657a9adfa73c0d16186eaaab9bb5d5a36aecd2218b02eb416efa1ef0637b6a3aa2ae1d565247e4b5dedb305e04ba98c592f4f2847971228836324c917fd8447efb1c797b326e4fd9e909bcc5d5cef1a773a9fc8dc560d1b44b593f25ef3cabee80a3699150db759322f7528f9d0f654f487f837e6f60ae6fccbdcc039f3ba2beeee08a702fe8e4fbc9f75c56987cbb197937b6cefbc25be6a7fc4bb545b62c495aed5d7ea659fa62a8d5f9ba564b126a1bf5f63cbd29b7162f81d2e6997dc8ff26504b40af1ee712abf4394bc9b57f77871260c7ff00bee7035ccb1ad24d096b31e64999551a2f4902fd977222b2be660a6e4fc94b66220167453c0de7659c702a159c091dc07be58520e88c6c7e572201ea899234a89773825a48809a8c0426f8815ed525bc3bb0c09edf06fbcc2ea84a75fab7d490724ac91b717749ea83294f37cd5f81bb94862cded290b5c9356444ab0622c4a7c748e6b14d12c648affc3f1fbe2461f8f22a80d06ff7f62a523cc21f522faa1bac7ab43e1b7c51b6575759857c334bb9236a547b31249fc85126d201f6d59cd8ca34364b002c01ede4c315e7c2d58e70bda6385eb6970f5b1d17b61684edb5c5c1d6ce876d1517b66d08dba361344ee893aeaa15c2241fae462e5c6b10aed715c7cb7645d0cb2a11b6d773625ba8b14de882ad671bd1f4b59508da1bc2689ab644d661462d17aedb11ae3786816b20d2b84e205c6fe2c4059b0d4dd3980ebd9506e605e3111ca79522806f0eb779b644d0df1a10aeb784db3ca3886b37c2f5564e5cf440a33382b3802684ed6de147355880e9558fde2e0b58ad885e54db8500be9d13e022d2efe003926ce0c6b9c09d41e0de512c708c7383512e702711b877160b1c6317c1b6ae7600817b57b1c0314eacd83a894e04eeb16281635c9a649bc61f46e0de5d2c708c932d36708710b8f77082a347738c11ae920b5b1c617b2f27367bd9c8bdb19531ba9572412b41d0de570c688c9ec606ad0e417b3f27b4cc67548c3ec6364bb80de1fa4071e2d9fe088ed8b6206c1f2c0eb63d111caf55216c1f2a0eb6363e6ccbb8b0d5236c1fe6c4668fd646e7361bdba758a35b1317b85308dc4738c1c12776cd8b48515f1cdf8c107eb4384db63b82f3840e84ed63c5c1c6382f658b741508dbc739b1417bb9aa6e800f6e44af273d8b407d8213140c73871d318c1117dbfcf31cc2f5496e5cce5901e32a075bd03f8e707daa38d12b8acb91cb10b64f73622b47d8e043f6b778e7036c7e760401fb4cd8c0189f4db101db87807d366c608ccfa4d880ed41c03e1736b0286e5ade8e807d3e6c6051ec2bd722605f081b18e30a2d1bb0c508d817c30616c5355a81807d891358a9b0977f005834e3571b82f5e530614531761d43b0be1226ac28c6ad0482f5d530614531662d45b0bec6090b1ef1983625477bf35e2dc2f73827beccf58a2836cd24c2f5754e5cf60312b8645238bf932a8a4fcbd72170df2816b828eecd8821704f140b1ce3f88c0ddc7e04ee9bc502c738566303b71781fb1627387a4db623820fe21a11b66f7362b3679b691559371bb0f5a5ad08d877c206c6e8616cc0ba10b0ef860d8cf193ea6cc0762260df0b1b581457fd972360df0f1b581457fd6b10b01f840d8cf13b37d8806d40c07e1836b0283eb95c8f80fd286c60519ca2cf47c07e1c36b028aea0cd43c07e1236b028aefc5723603f0d1b581457ff1720603f0b1b18e3ae7f36603b10b09f870d6c5f04816d42c09ee404e6fc4eaa246fc867fb9ea0d508d72f3871d14b3c8c5ec6b6b97323c2f6cbe260639c55b2ad8c2d42d87ec589ad5a63833d18d65797babf369fb1b15ee3c2771ae1fb35273ee8a66f88f4b7e9b3a162fb468d3e84ea37617403b64456cf62fbc6a08508d76fc3c03510695c2b10aedf71e2b2476537e7fe1b46341ffa6e45c07e1f36b0283eec2d47c0fe1036b0283eab3c8880fd310c60d6680cbe233d9a8b3d4b10b03f850d2c8acb89cd08d89fc30616c5c59e6e04ec2f61038be272e25104ecaf9cc02a3430fbffb2a5b8a318dbc7ed5721647fe344464fc4bbf8b0b17d6cb00761fb3b27b62ae1fe7a07e7ff9263f4b9fbb8e0f58a67cc7fb349c273fe7f600768707d4ebdc1f871ec868c2502eb1fc22cd10ca06d9c16a3aa9d8ca8f09212e97f0e93807a88c1e7e4fcfccbb3ec3281407669ff043363663f1f0facee82f86f34264b73db47fb4165965a49c05cf6196dffbfa0de75b52b37ad55df3e36286bde120ebbf7a784f59fc3e127fe3ff2cf137e02bc0000 serializedProgramBytesString: - serializedSignature: 127cb067d0f48066924db1022070adf5795e1c5f1d01a22d7c24dfefd6c602e7d2d4ad88f833c47a43b4f8838e0f844db8be161dd0410332b5474f7743df5909 + serializedSignature: 5d4114a9c51efede3b6510cfb81af617e3b7c85df69030676a1842a43ddb44b5ee67400e4677083b048670a1537e8ac0de3589bca7feed446be0b0e304354c08 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/b41e124d97ae65d45bfd520414605e97.asset b/Assets/SerializedUdonPrograms/b41e124d97ae65d45bfd520414605e97.asset new file mode 100644 index 0000000..86a2fdd --- /dev/null +++ b/Assets/SerializedUdonPrograms/b41e124d97ae65d45bfd520414605e97.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: b41e124d97ae65d45bfd520414605e97 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c15c5f6f8e7d2ab807401093dd4842404b0d2215225010b2804924024014ca1d9b12b62efa8d87befe5d9bbd87befbd3ff53df5f99eff9dd999ecd9bd73eebd7b376733cbff173e64b3edec39df39d35ba32c66fdc48659bfe6b3b96c221bc1e6b112b68aadb4fe9a681d2bad7ff699ba3e875559c765d6ef62ebde309691e44dfe3328d6cdfa5d609d55b31aebcd5ab6d43a968bfb85acd4fabbc07ab7d43ae357cbacffa5d653b126d64bf3d824369bcd625d639d9388982f5eaa96d762dcae580bebf704b6deba5b2a94e21fc912b7ba5abf0aad3bd5e25ea5a5b47a6e013b40985569dd5b6abd53c52a2c994b84c416256398f883d987aef2d84d1ebb58ff5bcabf1bcbbf5bc8bfe1f34de5b17b8acfef04de6b09fee684b62678bf877d14f89b59c7dbc0397ff73bf95c4f5b5ea3e50964ed2c8fbde53143cabc3d05fd9bcb639f24f62692d117c84a85590b79ec2f8ffda4be77a4f9fd8136a3d816208fb38461d81f7cbb25b8cfaf0d0860bb0ac79d3ce1b8931d8e8dce93e1f7997c7e903c0e96c74c29db7aa6e326796d883cf64aa2d750fb3d3686393e6b7db3f16a793e4c1e87cbe308a95b4fa9eb9de03ca82e2a4cb3a4cc1ef21b7769aeabe7f9fdbbe579b63c8ef484578e7cee1e799e9ba23ea9f89fd2a997fcc6bde0dce2d8647102592adc77f684fbcef2ddd36c8e4d94de1affd3cacd93f2ee4bc38ede1e3b7adbba34cd743f975407257f94949321e5de0fceb9dcb37cdad644bea7e2793e4b9eb6754de1de585b4e0bc57a17fb3bcd3ad9d79bedc6dcbe3c26899e2a6cfb78c2b68f945b21e52afb77b5cf638a731f2087bfff80476e5f8fdcbe52ae4a237253d453d9b5a73c4e90c7f1ac2e1e0f7f4d5edb431ec7c96faa34f74e70ceefefeebcdb659d4f6e89c268a227ac7bc9eff64f2253bd3f491e5ba6f8bc7a6672009da7c863ab14bfd94a1ea706f8666bdb175afce4f1855d92c89c66f36d510374b0e4b43c549e17c8e35ef2385df21fe4f103953f25f28364bacc90ba301006962eaddacbf399f238cbad8b559a74ebf48ffad3293640ca7c109cf3e34079fd2170ce759d637fa7d5e352e61c79dcdba3f35c3a9dad52b078af6d1be01ba9bc97c8bf8a6cfb5a67dbb25b17c9ebf33cba4d71f46e3109bcabf448253eec23590cf6301e2c75506cf7f53cf73038e7c74ce77be26febdd36cab77a80ebfcdd47c039bf3f3f455df767f13ecbe50c05df1e2abf2dd3ff36a7c96717b0f8b8a77b971f87806b43a4bcf7e47b0b597c3ea69ee3b63d0acef9fdfd52b4ed008d7ed677db8e4bf0ee81cc9dfe4c72fca1f94bf2da22a9cf30e68e5baadcd9d779275621af2db6cfdb295d8ae53bc30197e1b67e3ba8305c228f654c9fcf96000e323e5ab5c5ba6ff794fe64d519f16f95c8679679ec2e72e4b4ee267557e998cacb8620cff26be5f258298faa6cbeca79367ba1bca618ad94ba8d60aeb499ad00d7f9314bde7f0c9cf3e70e726477be455e3bd8a3ab2e3cab3cb6ebd280447e566d3f9ba5ea133536db765b24b7c73d3a14b3c4fedb49da95cddce947b694fbab2db7fd62f97cad3cae91c7b5f2f9916e8e3155c748943627d32d37c5e712f1da607fbbae1c7f883caa3c7b3c90dd45ea9ee3e85c57b65b0feef1f371f2b88eb9f2a484ba1c268f6d93d8d3153cc78f8707b03fd1bd66f27894b42d97b9eb36b9b60fecd82481ac8d36a76eca778fb6dfe928fd8a1d63dfefb0589e1f0b6ce2dfc87358b7bf42de3b4ede1b05ec96be13cb07d78e94d7463bd7843c7eef784ff83ceeb97f0290a1bb7f22d04177ff2479fd095bf78e2acd39d963cb3ae6d6359fb9d213b629de56f10cfcf6933ec2f214f9ee184f588e91e1f25202599bf561d9e923797eaa272c55deacc272ac262c4f97f760794ae62db15d35e1bb1be03056de3b03094b75ff4c205777ff2ca083eefed9eeb0ecacea7ce7206109f58761796ebcade219f8eda75208cbf3e5f13c79d4a5a117c8a32ab73c9d82dc0be5f1a004727b78e43e9382dc8be4714b02b91723faa6f33de5ebaa4d6677e6f6757e6ef96d970712c8ba84697dbdeb3679be95b97dfd52e6f6f53d58bcaf5f26efede984bf60c1af8d63f1be3e1ef8896a3bb81c3c037d55ddbf02c8d5ddbf12e8a0bb7f1573f97a3755cebb9ae97d1dea0f7dfd9a785bc533f0dbcfa61096d77a382bbe1398bb3c32c10e9f6e4a3f5536389a25ce1bafb3e5e7cc90e7d74b7913a5fce7c0393f4ef27c7792fcee5fb69cee7f49396decebdd65fb5777554eb8417e4fe52f37cae776f33c77937d9e2beb65ec160fff5b3dbe02ca8975b6dc0cee41dba632779944b5814d036135155c8361a5ca66c9b8aa7e8f3b3cfc264b79dbc0397fee2e47ff5c954ea832f761cebd0eaa8d5a856f1ba0c7dd7a5f11ba8230f35d465236df93c4663f69520173a74905b61ff4989340d603f2999a04cfc8fa1f53b6aab690bd98bb9ea2daa01e96e7d33df755dbca16877d9716400f259bbff37c0af6cb7a3353e9c323f23b3398bb5ea07c579747a45b8e4df79eac8fc666bafd479c5be1d04bd541952f2e4de21faaeef5843c964a79b33c0c549b5ca2ba51b26f25b02b3687b9db0a94cfc972646cb6bcff823c9feb795ed5ef655925b6b7e7f922cff3aacd4ae6e9b142f7f3ec1920879f3febd81693ed91ec3970ad505edbe6f0e9adca70f3dcdf66cf3377fd4ed5e1e6cbe75e04ef4106eabe2c0fc7f6f1d8b4af3c7f199cf3e37e1eb9fb7858ede791bbbf475fc544ca652f3936e63701ef009eec45b7cc843e2dd3f1d802f9ce2be0dc92df3b910cf5ae6c2b891d2065bc0ace2d19192d6c7d337ae2b262077af82d04d7f97191bcff1a38e7b25727d04fe5d58b3db62d96efde90c2bbc5f2b8c463db1229e33369dbef0964c9efb2573d61a87c96cb53ed65305c55fb97f29da55287d7c1b9f56c1f55af7a8de97dbbd8f3fe1beef7fbaafc55ca656f78742b65ee36afb7e4f16ddc27d93b1eddcb9c67eaf47bd3a35f9947ef65f2bb6f023dd4757e5ccedc79946afb7b579e977beeab763f5d9f7aa238d2411e659b70ec2029f72d706ed9dd4ff5b9be6fcb1ea2f2830fe43195bad787f6bb5c9438ffc83e1f24cbcfec63793f415c42f55ee1d17b85d43bd1188f4fe4f7549be5a71edba4fff7df96823e89ee7d2efd4785e18e52c70aa9f3dbe09c1f2b99bbbfb6d2b6a5bfeafffd421ebf94c7cef2a8c62ebc93824ee9defb5aeab492b9cb092b6d1d07c836eb01e3805ff0e3572c711e2ee5b26fa4bcd552febbe09c1f57c9ebef8173e00fb1833d7e70b0d4eb259ffaa830aaf2d85965cbe3dd76dcce81aa0cf7ad3caa715489ca33297e9b7defb1f971cffd1f98537f85d77f94efd57a18caf6ea588df3fd982c5fc7aac1b56a69a3f4ff41251ef93f25d1eb6744af7fcaf7d67af452ede66b800e6b10bd52e197c87f3bcae32f52a66a5b781f9c5bb60ffa2e812c2923b65ebeabd2409946c636009d378067f9f110e6ae0b1d627f6f30f3c856ef1d2a9fff109cf3e3611ebf3ccc969329c77f656e95c7b7dcefb1dfe4f15777d8d5dd57edde4fbbf5a8abcb6d60ce382b2ebf9b47effa64f26bfd30192cdb2106df218fdbdcefb17fb9fd3599cd83557f63223ffbb7c7dffe604e39427d5796ab62a04f2376b8e7db47c86f7f04ce21d723e5fd8fc1b965f3d06cf7f7d57bb1a33cec8e92c78d1e761b6d3943beb2751ef2937d1cdac2fd1efbd3c3ee8804fa7339cbebd7ce612afd0d68e7d097a47d6fd9c761fdddefc5956f54fa01da86ea9efd0ddc83712c099ba189da43945fa93eca633d76c8bea4d831ccdd777f8ce424dbd48649beec3ff2fe71cc3d06e2b8c4728627eafffacbada3c8d3a5cff7ff4a5efb4aca19675f1f2ebfcbfe2b8f7f7bec3c5eeaf10938e7f775fdd9ff9347d59f7d0273b735a876c854db5bc6cbf74ef4b03ed1b66144135bc608991ef057c4af712c61fe146be491affacf3e01e7888d3125a3995b86abdea5ec3fd979bfaeeea2ea2c4d9d7ba3559c8e81f7f851bd338e25efd74dd406d39c69fb17b254b942b529817289969bac6b7bdb93b36ef02947b5bdaa768cd6ccd5de1c53e3ea547bb31c0f15dbe4e610937dd2b1539cefc536816bbab6e424ba69afc9326e6cb3c70f37dbf6676f923ea2da9f951fae4cc2413e173b153ca7be751ab8a6d2bad3819da7816bfc7886d4ed53706ee996d3de23f74cf9dc67e0dbfc7896bcfe3938e7efa97458f54bdee191772ed0e96cfb9b23659b6d6c07cf37ce614e9dd9e23552b54b3170bf25d0535d5332609fcf2a70e4d7bf9061f0b4fb9bc9c2401b2eede4bdebd378f73ce66ebb93fda6b1f33dbe73be0c9fa76dbd73d4f84fe5a73726f11d2557866fec02e66e17957db2b10e401ebfff252e53fb9d0b3df65ce8f96e0796bc3d50ce0988a93add45f29dafc0393faaf67ffeb72a4f5c0caec9b6a4d8254c5fc6dd0a9edd0a9ee5c74b99bb8c7ba9cd7fd4d31ed9eabdcb98bbfca2fa5355be78b9bcafeacd2a8e5e0174b81c5ce3c72be53bdf80734b87bc6db60f8cda8a7ceb2ae6aeaf5de5f9e6d5f2feb7e09cdb56e47e3e768d7cee3b70ae184339df7be478f5ba16d878add4e5ce24fe2a65d495bdb63257993e4fa553bfa4264f7b4da527b23d26769d87db75f2b917d3909da86de60f4f785ccfdc75daeb6d8ef9aaecaadaf27e674ef9e0238facdf99dbc7538daf4de5f106e66e97bec1d661b4ca73993c3649126e4a9e6a3755650a959efc00cef9f126b7dee21cc6d19b992b1f11e7960e63323d726ef1c8516d84ca7f6e65eefaca8de0bab28bdfffd1e63b66378f3d49ec765f6b1a13cf4f63a5ac98ad6659a200c99b0c529daaa9de4c3e49938b6ec67ff19f41e2b3356cbdf56aa96ea6e43c310fb3c62a79e568674a76176527f5f589e277b1f544b910fa532cee13f7c67d822b5761fd2b05d33cabadeb53c52c513ed1b3dcba3382cdb08efcadc56c245b60fd734b996f7db682d55a6745d6efd542de624bedf8279399c4a7847adf996bc9b467ac565a5714d0d5d67985d0b050fc5e23342d15da1758d76ac4fcd9956c199b601dd789afc5db5e65fdadfb669144a6d7513f7115bb6e4f8f55c134c9b2866b9f257cf1ff42a4214284a36ff653cc8e864db2444deca4b890f83f867622c313d5022963a44016735dcb615922dd9d1b47d0bf8df116eafddbe69dcff212daa227c383bb87b0c009e11dcb2ff8f3a7672a3a36759b96cbb2445340cf24a62502cbe5658a1cd68f094d9b36c9e68a7af1c774f8c5b4efc210f1dbcf958be7fc07403391f9b903400c412eb252b53920f39c2794af10aa798de12a140bd13345a6b75ca8c3ef4cb6d42e16865688733bc5adb45471de890be76cae54731154f119713273b1c06aa40b2cd11e54d42071055b72217170b5a8b3c209ae2c51baea96c0a9b16f8962576359f652d1eec0efbf6df3f34fed7f7ee0ced92b8b4effe6b3a6faf06925c2279daf6221d4581742adc28e4ec9f38f44e1d3bace2e277cf88f9e611bc4c793e980116ca223d83a6c1fe7f7560929c5d6b3fe19f2c6c6a1de24490f7007c40993ab80216caa4198cd11b6d368c59ab6f468c515422437d3054e9b86c9acd3736ede72d0d583a029eadc1d12e6b57e5dbbb98e9e68965e4c4a4fd5210badac6bba75afd87abe541448f9f53996c462ebdb5cde78f105a7dee97e233159de5e37dc4b564bb5a3a0da1fd488836a86116fa1219ecdfdb593c60d441ae78d0c1df0c8d0128b669d8346b35698e42e4125b7c624770d2ab90d26b95b50c96d75d146f4162c0c25da384d2feaaf09d6bbcb2d63d688fa74adf5beaea9267174e99e7274d94944970ca66b40f2a711164d76d0851dbfd843a7a437e876c283ae1d26b86740c1ed316feb15d4db3a6049c6ce9a24e36febc74f92b123c6a377401e1d757144d05f411a47e659d7ece6c1c9e2aeaa332999abc439ff9a2a49277a83c78b9962b9b75aa14be21894c134f508e118bcd99756b33ecc9e38237e9a23d58bbe22e2d22b8345eb4e98b7f50be86d9d75de26224eb88d06760d9acbf15f10e4c58fde71258071e3f44139806135f9c43a6041d3054b65066a5219fee32795e9aa13cecb1483587ccd4e9b84b5c18577c334cfd468de6f7a235f9a77c792f5c14193f59d30c943824aeea18b0c22a13f8a3432a4da9b3455345e95b2d9963b1ec4ec6e80f874477527ccb58e65420b7e7da974ebc4df4a1cd186ea9269915f4d66a9f789d15bc1c7853512917db888ec2312a4db3a6dfca7dafaa46684f8ba596cb064ac2796d26469529ab774c9588294a6171665b38346d99d759279941da9f1d56ceeab7cb2462b9123c67d6704fe9ddebaa441e4ca1b1a3469b09b2fb8bc32d1d66dcb9bc5f872bc6b85abaeb01c788d749c22eb992aeb1ba5d2c98324067cd05f2f6fbb18b37ff4d1214f44873d52880e945661112043e749bc9d87773fc4f549f0bc732e9b63495e24a2e1c1e232a764876eb978b49c6d10bd0a765f6d9cbf35c7fdad8f4e1b5e7de6ebb2242df075c405f7c5048f0e28b81f16c7c7048de3fd7592796ac3d74e095ac21a80a9bd4b50b5076229eaae9a14f5af98bf147510267c378df0071af9139e894585dd53f191045e3d1813bc872e8ef1a099289acc33acffabac3778a9bc58c4fe0c91193aa9418615d7cbadbf78863d0c3cbfca7ac21e1be147cf219853ec19d42986ea24f3701ba709b75f7d86db304cf8788df0698dfd091f8e85dd045dd8f1ec97e71b2b45ffab9db7b953c30c314a25430c4caa154dbf2522e4aa45b866b043acc2c161d6b1c67a3a43e40315e25e86589dbe4aa4b57ec27404a6ff449dfead80fe7380867ebe9885a55b9334e956cc67ba95ad13ce0b3e931952f099c2d229f88cc4b04dd561eb251458274aaeb5e2f942e100a57565e5927aca2073347a6589d68c95ac210b64bcb6502b1a0f46b88a28fcdbce308120052fbe5a8eb7e0a57ef405af02c60b5e392c79c1ab3eb4c70a58b958a2ba9726518df94954f3b0b8301d8b0b33d28a0ba3743e27da7f5637a8cfe1316aae90cd635ef0023f5f91a6b1b7f62f1aa8f252f0acfad271a898d5542d761fb1c955f3c494f7e02d01db8cd8f04594d0c78959224e84a939162ff2b15c7bb626d7bea3a9bf5c7bb4ce6545c35f5583baec2421210cb79da3735bd13a999f42e0d7a79ebdc568df6a91a896c844d54eba7b8ba9705522db2cb5aef38417de1f2aa6bcf1f2d214c1bb5290e7f6158b7a2fe6e47b0b270fdb4eccd1c76019c05c4d06e0ab543d168b42859a28f497cf28b40ba6765150b577c5d49ea751fbd066fed4de0d133e5f237c46737fc277d709e709335f8a2a480d710f4c309fbf1257dce42d03aa9eb0d453535c22ea0aaafe5722aeacb77e5758d7960a1119621ca81a96e247cb3d31b6fb69d8b6f7c9761c8660ff806cc7eb0473f75c908ae0049d8813748279f96b2143ca5f7c152fffe5af8918f60335d8b7fac43e098be68b8246f3c998e4c541254fc1241707953c1593bc24a8e46958202ed504221f99e527100b30e1251ae1453e85ef8545cc525dda3480f17617a7906a579f9c768d625626a454597faf91796e89ab7d84b77994cb4ab39f783e1dd3b34ca7a73d518c0fbeb3c7c05789774aacd2e70a5f5f9d81a15fa641bfc927fa9998f0e51ae15ff9143e0be355aee3d52d49b89688315bced591d6553f1c6763da1ca4d3869f3ae1e6e73b7330a42b3448b7b4f287746fcc880a9d113cabb0f1ed62219b251afc8ae524b735221bf78f712ea641a54e039eb2cda82b18cc49b3585088215da941fa9a4fa445588abc2a688a3c0f537bb52ed16ced4fedf998da0707557b1f9d64ee4a550c2975f075ccfc973af6c5be53837da736adefec87915a1394d4fe5800afd504f0b836fe027801267c9d46f8a13e852fc484afd7087fdca7f00330e11b34c27bb6f527fc404cf8211ae1253e852fc2841faa117e9e4fe18b31e18769845fe3537831e6e4870775f22598da4768d4eeb4833fb597626a1f1954ed128de42c31c42dcc0198ded14ffe0660f2d171a90d80e7abbee9065f26fb3ed6a454aa0b179e431fad53c947565e8679d3311a6ffacc67245886093f56237ca14f575d8e093f4e23fc049fc2cb31e1c76b84b76fe74ff84158609e103030576082f982727165c161c23b5789389621f62be7f3b757caedd1f91a1aa5a2e3ba580e5d570d4eaae39a2f089021bdb74afa7485e5ed23acab7eb4aec0b43e49a735ef79e58db84eb9d9ae4adad510ddb8c20c364896ba07f9d2ab12f38193353e70874f075b8919bd29a00facd2a5b362c06f39693a8b8d232d128df77c018f32e12995f53ca5e29494d3e4cd224de6c33be874c5d2efd5bae0e665eb531952b6e6ebdfb5129b84f9295b1f8cf9ece91a9fcdf3996e5561c2cfd008dfd7a7f06a4cf8991ae1c7f8145ea313ce8b357c15c040c59a5a4cedb3356a8f69ef4fed355822718e2e65e4f6a8c619775aed27fd588b7df35cdd37b9043e5c759dcfafacc3be725ec0e46f3d26f87c9dfa3ca016d441b31b5f0ef0997d6dc03ce0025d36e1d3030ec1845fa811fe9d4fe1876289d2162c51e20b19faaff01fa6fb0e8f5317a712d809fa630ec7045f1250f01198176d0de89e4762822f0d28f8289d601ef67c4d43ef183c2ec0cf18bc8d98175eaef1c24e3bfaf3c2a375c2795a76050b98361f83a97da546ed3c9f6a1f8b09bf4a237c5f9fc28fc362e6d558ccbc26ad98793ce68e7cd5cbb8d4924f035964fde3ed32bc7779199b230a407c9cea3a7167b5a82cf022b81fdf3d01d3e23a9d161debb4c8b67e5732bb77c21e1f92be0e27623a5cafd36147a943aef57fa9280ed7c84c307d0d4ec234b841a7410b10167c16092fb0faf9dac998fbdea871dffe1dfdb9ef26cc7d6fc2dcf7e6b4dcf7142cd1bb4593e835f699e86dc608ddaa21f4914f42a762c26fd308e7b3a2fd083f0d137ebb2e6c7d0a3f1d0bdb3bb0b0bd33adb03d038b0e77254a9a72ea39693a13d3e2eec449d3c87a4c9acec274b82751d294578f49d3d99806f7264b9af611dff337e2fd1ccc7defd3b8ef4f3eddf75ccc7defc7dcf781b4dcf73c0c195fdb3f4841ef7c8cce831a3a8776f647e7028cce43189d87d3a2732166c4231a235ef369c4169d704ef4d180e82fc2b47e4ca3f5b02efeb4be1843ff3886fe89b4d05f8219f1a4c6886d3e8dd88a097f4a23fc3b9fc22fc5843fad11debeab3fe19761f89fc1f03f9b16fecb31e7e47b66a2d95a6e3d676b57605a6cd369e1646b39f598ad5d89e9f0bc4e0795ad8daac76ced2a4c8317741ab4644eb636597479acf2396ce66addf7b803bfa871e0f77c3af0359803bf8439f0cb6939f0b59811af688c28eae6cf88eb30e1af6a84dfe153f8f55870f3ad5f83e40b37605abfaed1ba7f777f5adfa813ce9b47f846b3819a476ec2d47e53a3f60c9f6adf8cc17e4b17b778e37fe2817145d6a3abc5d0b56522dda912e346edf94f25a2cb710eb3171eb5e7ce165b574bc4acdae5e25ca59bc56c89ec101c293a04d5bcdbf5cc5e832e4374c8dbebcc6788cea012391b7b85b8522d9e2a0592f55d8ee5b2eb147652fa1ddf7a0b16406f6b0268a1cf00ba1513fe8e46f8913e85df862546ef6289d17b692546b76346bcaf23b4933f23eec0847fa0113ecea7f03b75c27964fd3095c42841d3f55d1ac15962d19b86e9ff8d5fd5a77efb7f3fd2f1d2f6ff7ecc92f5ff06d715ebffbd1bf3a54f74b1cda72fdd8365119f06cd22eec5247f1654f27d58fef0792afe9f20d1bc5f23384baccb54d620fe1f64bdadc49eff45ca9effa5f0fc21093c3fd8aa60fa907800739eaf823acf3f30e7f93aa0f33c8845d36f34d1f4ad1efea2e94398d67c5bb3b822115fe261bca868958a290fbac93219a2b894e1735cd3c3981edfe9f4e0eb75f893ff0826fffb80a1f328163a3f6842674e4f7fa1f318a6f58f58e8f038b25c1611557894d6ad2591eea8b3c731237fd21859d4cb9f914f6046feac3392c7403536c22ecfa63face449eccbffd47d991715ed9d50b2ea164ccfaa5b7065b615214a98df492b4f611afca2d3a0ab568319e2af1a313bdd2ef5a73727e9694c975f75baf4485197f815b5fde8f48c4e27ee78bf691caf66677f8ef72c66f0bf02a609cf6182ff1d50f0364cf0ef01053f8f71fe43c3f92c9f9c5fc084ffa911be6f6f7fc25fc490fc27209297748279eaf3572a821354865ed609e689cb7feb6e78eaa17c8b6ffff5d05730ec7f6bb067f7f187fd55cc08b1cfa3ce089e69fb37e235cc8846b1782356fb34e2754c78638df02d7dfd097f0373cc26314d72cae7d3cd657009921251c6560979261b2c32bc95f2b77b847b8638b3b39f616269852a91ebdb496eb518019f211266678ab1dda8c427cbaef6940cd4776ac4e65dd5a27ca792f30c919897f81c8ef826c6a2a98e055fe909ae636697329d0cd699eebb566858c19c59aab67e5ce7641272aca7fdce0a780b7398661a87f9cea737be8d45a9e658946a9156947a0733a2a5c688f63ebdfe5d9d704eb4952ea4f908747d13e902d9b8ca6755f0da85bdfc4da230cd4c7877b018426b37ab3a7eed8e01ab8467a82654f7bd1ae157359a58b44468a8b6527064af92b5533ffef59e8e1ea7dd3a167cd38cf7b1706fa309f7df7d86fb0798f3b6c59c7787b49cf743cc88761a23f2faf933e2234c787b8df0493e857f8c09efa0115ee453f82798f01d35c21ff729fc534c78478df0d77c0aff0c13de4923fc339fc23fc78477d6081fd6df9ff02f3097ef82b97cd7b45cfe4b2c49eda64b52f90a193cd1548b2894b045600a51795dd25864fd4e6792c4573a6decad0e0336a07dad93cc9fdf2916acc0fd0d06b0870e204f41b14d4c0be44cc475be907d8b79614f8d17f61fe8cf0bbfc38ceba5338e4f6bacae33ceee4374ccb30b7e6bc4e3e5724560ac975165a08e2cd5bb68afcbb2ac6ee52f3bd32d1799a7eabb7432595c1755908b2fb6c2e527cb44d1801770fd04c9f718b59db138c54759f0b1dd5cb7b5c0411c97487fccc70f9836bd75da7402daccae5b619b770bd488180db5f3a3c58f9816193a2d7a012d52d5863f57c5fcb6d2fd84e9d52751588d240aab9f316dfa26f31c67899bd9961e1562dfe3a061f64f4c9b7e3a6dfa68c22c55add20bbb5f74faf1a4ba7f2a69fa465cf0af58e63b00cb7c07a695f9fe86011ea403ccd3e9b932f3b593abf482f55fd85733755fe579240f3ce75b9399dac2c3eff08e7f6379d5605df97a88bfbcea779d70fefc104df586fff8a9defca1136eefd49b82abf5c505ff8905c6305d60b4d504c63a91fbf90d8aff602e3e1c73f11169b9f85f58906769823c73b8bf20ff2f263c5b23fc619fc2ff8785cc485dc8f01e8b29ae8e4ad51c105f3a56f7ec86263fa1f63766708ec6e0637c1aec34ae7a0cced519ac8d4109548f61d2f374d2f90d1b4f561a2bc435d27d8b631aa5c1b47c843f4c8d31e1f9badab04fe14d304aa35349671220698a091e135070330cc7580d8e6b7ce2688e09df4557c5cef227bc05267c578df01a9fc25b62c277d3087fc0a7f0565860eeae8b4b352cb53518830d2fb5bb6b17b906ac9a3dd8b43516447b6882689bcf206a8305d19eba20e223ede3c7fbfa31a6adee7b3c3f1f87e5e7e3d3cacf77c0ec9aa0b38be71259beec6887c99fa893df8a31ade3f9f9627bec8b93745feca20da999c221d58ab1ce1d7f0ed901d364b24e132e81972efc26d83b6abe9225365be44bbb86b52c5d9175c617dff2bf24dd9418ef4c72c3106eac1d083835c6eb359de32c4bf47d6c785f475df8f0d36931dedce75669af994735dfd2f3f9467141d3140f9a4e98031460950155712eb32e2e6235d2a8729f8ed719fbee5ebaefb643bfbb52a6d57ebedd45e78ebdc376c789a241b02a0d779c1ee3cd026e442310679c813863a2af63ced855c72d83735b142237fb393bd92b149b2ef06ace6cd1af695776aad3603a33e6771fac59826cbf38cbd3d50fa3de4d17537807c5ec58c00e8aee98e4394125ef8449de3ba8e41e3ac9a299aa1e9a5c7a62895261c01a4b2f8c4751501e3b6392e70595dc1b933c3fa8e40c4cf23e4125f7c124ef1b54725f4cf27e4125f7c39c6eff804ed71f537941509507e824f3b2c1c254544eb0edef404ce50382aa3c08a37c6040ca9998ca8b82aa3c1893bc38a8e42198e4e2a0928762929704953c0cf3b9a5017d6e38a67249509547603e571ad0e7b230c165010567632c9605653112537979409573b00241793d140872311e0705e591a793cc9f5f910a8f04834346e904f3ceed8a54047f890bcec742b03260088ec604af0c28780c167aab8286de582cf456070cbd5db0d03b3860e8ed8a41ae0a0879374c707540c1bb63a1571334f4f6c042af3660e8ed8985de9a80a1370e83bc3620e4f198e07501054fc0426f7dd0d09ba86b85e8639dc6f892ffe1cf3dd6f516d4ef1ce40da984c5709cd8242c2c0e091a1693759279bff4a1a9a8bc19173c05f3cbc302fae5544cf0e101054fc3e2fe1101e37e01167a47060dbdbd3016470564311d13bc31a0e01998e0a3030a9e89413e2628e45998cac70654793626f8b88082e76035ade303d6b4f6c6343e21a0c673318d4f0ca87121a6f14901352ec2343e39a0c6f330c19b020a9e8fa13825208a7d308d3707d4785fac66786a3dd40cf7c3709c1610c7fe188ed303e25880257167044de21662a0cfac07d007606a9f1554ed0331b5cfae07b517616a9f1354edc598e473834a2ec6809c570f4096606a9f1f54eda598e40b824a2ec122f9850123792926784b40c16598e08b020a5e8609be38a0e0e598e04b020a2ec7046f0d28f820ccdf2e0dea6f2b30c99705955ca193cc2bcd9707ac5b56622a5f1154e59598e42b834a5e85a57357d5433ab75a279cb7195d9d0ae90433440ec6785c1394471526f9daa092ab31c9d705955c8349be3ea8e45a2c006f0818806b30956f0caaf25a4ce59b02aabc0e53f9e6a02aafc7e2e02df510073760c26fad07e187604c6e0bcae450ac5dfaf680edd287612adf1154e5c331d277d603e92330e177d583f02331267707657214168cf7040cc68d98caf70655f9684ce5fb02aa7c0ca6f2fd41553e1693fc4050c9c76192ff1154f2f13ac9bcb9fcc1543027682e3f012beb3e14b0ac7b22c6e2e1a02c4ec2583c1290c5c9188b4703b2d884097e2ca0e053748279d7c1e3a9084ed075b0190bbd278286dea9188b2703b2380d63f1544016a763829f0e28f80c0cf23341219f89417e3620e4b3b08cf5b97ac858cfc6786c0bcae31c8cc7f301799c8ba5452f044c8bcec31a735f0cd8987b3e06f9a5a0902fc020bf1c10f285188b5702b2d8a213cc678cbc9a8ae00413e52fc204bf1650f0c53ac1fcf4f558fcac1ef513f781a6f8072ec122f81bf510c1b762c2dfac07e197628efd5650c7be0c2be3be1db08c7bb94e309fddf64e2a82f9800444f01598e077030abe1283fc5e50c857612d11ef076c89b81a53f983a02a5f8345c60feb29325eabfb00df2ce4a354987c8c0bbe0e83fd7140d8d763b03f090afb064cf2a74125dfa8919cc5d3e0d83cd63093d316c8415dfe26a27da60bbb9887839880f6798c4f40eb1e675d2a3a6093cd6ec2d2f62fea216dbf190bfc2f8306fe2d98da5fd583dab762c2bfae07e1b761c5ad6f629a79b093c4e95ccb590ad92436bd6ea17abeb8550d5b2b0278850cfa1162c66c8175df59c68c5fd18f4bd48d62e44f43d7e28ebf8ad92b34f8db6df676ccca6f75561e5767e53c5622229d1d412bc5df05756b41f19520ec085a50f7e4e4babd21dcab4f57491e85e26e8925b156d8c5e5bae93912f8f3fef4c02415313ed77699b8eb660a23ab97f77c4b8edf79d57760a4bfc3fc097ed1b629d77ac7a6b5ca4a141759be5125c2dcb6b648eec7e1d5d67917bf5e5ffe742766e5f73a2bf7f0580999db764e112156296cf46ae90e217827515c816ff9b1ec2eccb21f7496ed9952f88d17eba8943335ff3878c83977fcd8763766db8f3adbf23db6cd14a1b35c5ac6cfd6359825f76096fca4b36453c8e999f38e7be15c6713936a1f5e0ed9e156f0bca456143360aac70b58f597b6dd8b51ff59477d7c4a716306b3975d352155bb0fb3ef9f3afb66107a15bf7ab0f80cb7ca2e0e978b4f97b30d221eea53927442f57eccea5f7456ef9ed06a5cd3b9c2167bd57ddb46951bbb97dfadbfd07c00b3eb579d5dfbf92ed9d9cb9abacb763a09f6b53975e94095951ff0aa4e9092603ae1fc0f8cc76f3a1ed343c9b3a973f307319bff859553fcf980f26167d15b18ce7e3dc28f650f6196fd5b67d92e8865f344fcac906513bbaaad6a2df3652c2e890b0d9a3acac39845bfeb2c9a4298faaa50b557375ac2ece53debcfd247304bffd059ba1bc376b4d4a5146e0be09a7f9cc93411ca55a236c497465f5f8f563d8a59f5672a7502f7776109619e08852aeb591e0f9725c8fddc32eacfb2c730cbfea3b36c62d29433b55a019e8626aab3a69b523e8ed9f897cec652e212758d586b922fa9679798e70b0f28af8b8df553474c27177d02e3f45f1da7790d56f3484c28388727310effd3719880a661bc86b4c47a48c50d7b21c5c4398e5e527d87f45398857feb2c2cf069e13ec2a3572221d210f63e8dd9cb1a69ec9d4be8d9d569e4bff541e0198c404c47209d7cd94edbc6835c99deaa6731ab1ae9ac9aead38f27b32a91525719e1c3cf61b636d6d93a3e8d109c229e88f7466ffa9aba5c3ff66dc3ec6ba2b36fd70025476711fb3259cfc3ad2a8a7bd68f4dcf633635f517665eff84fb8a278b659439e50b987dcd30fbfcd4196d5ba7ca32937397f778242e1dd657c9f145ccbee63afbfab3c4ad827c1b310a2d5fc2b46ca1d372465aa15098562850fadecb98d52d75560f47e356515d573d4c239c5d5c79de5fab2d77a6d7beff0aa6772b9dde6393d6b80a44dfa0bdb117dfc37332ab14ebc1c6d77f138540fa35c857317b5aebec9990348ef0daf01c5182acd6942152e94be025afb27ab4f035ccc2363a0bbd75647ddf4081f03dde0e5e2cdba8e2c32bccfe81d7311bdbea6c9c92d42b53b732bd14237d4bdfc02cdd4167e9b49442d3dbd363c74365774386eb9b98b5ed74d6ee9b345c695bc6a9dbccdfc268b4c7ca2bc9c37eb241b1f86dccbe0efe6a796ad09abd2ff3cab812f432a41f87a666f00e66d58e3aab36b3866a9772f788170a09abc4f37efac40be555bb2db0617bc5dfc5c877d491df9f90bcaa05a4df728aa72e7e88bc8711e9a42392e34941260a5b6dbb6a40ad004f0b12a582e9953fdfc72ce8acb3c03b8a2bbe569d5a2a985e3a9f7e4af8016665179d95033c568e172d3f3c267bfb424b8537f1b142f5131a1f627a764dc59f203bafce53a5cea9e63ae9c6888f300bbaa553feb7bda9d07a7809b3db69ecf6c4861c5bf6316661779d85ded1057ec63d9a536efc04b379279dcdbba45d9208af2dee53cca21e3a8be6a11661292056d749a575d87f0b72fa21fb19c6a1a78ec3101f1c5498aa7d93eaabd4fe39a6712f9dc60393d661e852f32f304d77d6693a1a651befe96ecdededb89dde508af8f225664bef54ca09588b40b27242d8ad015f6156666069bbbf74cece85e3efc6d708d4166e7878c64b71f27c3f367f8dd9dc4767f3c2062ed5432ea9fa837ac70f956f302a7d7554bc637cd417fdf8ba6319e607f5e3e3df6296f54ba56dcf6f7ed790a5feef304bfb07af9de5b3bc346a67fc2d3f167c8f593020f5162afe4dff2d54b67dd8f5fa0aa11f30fb06627d5589731567173caf8e6a17423cd5c076d04b94d2a497e2fe88593d2815bfd47f3fbd5a5ef2325873eb5f2cc6a74e4e1652ecfe9855e21d9e6f65f16d0963d975b9c288bad47e842b6770aef3ef575a31857b4c515dbacea78e269690d9c8ee48163f83e40eb176e2182b63dea9a91385fc0a191b55588e1084ec51ec7ccaed08abd4572ede52936c9359a1cbe146803c0e5a97dca6039049b331b1473c946591e61dcadb9da58379a8f696a1da288b37bdc486a6e94dc9b518c2bfd658ef435de3c8c2d8a1d3dd16304bd66f627ce19045e233f6f6e1f81491a45ff6eef0e1fdf2702140950d928a9b0792009db8eec2ddec61ba55cceebc7acf92d9bc69a36c1e224329b1f169e59344996fb505ce6e5157293206b03a120879dd5a211c4689b0bd75a22a83d3c4000e2ea058145c78e7c36cb62212c06e69e1001b4e09ac13b37779ce66ce18cc28836bdfda01378212dc8e1a705ce04aeb253e4ca3565c2d8904b4c5cc8196451d3d1534a715a6bc2e35e3b58a2800fba8bf032c9b3a7abad3b329d6ef72393c5a0d9cb3a36914c065b671c08da404d785f1027c75caf96814e09d0572d11c4a78dd44410476dae3d1954fd05a1711ef5b3ccc01984b09b03548e766bbdafba280a9494f07531e25a696009333a9200a88567771108da244d44c20aa8e5422dfa4ad03279f3a9d9a5d57cb549d3ff650bcb922d7ac6555329d9a239be6a200700b8880a32901b6001190ab591691f2d73d1d1c4063a853a8d9a26bc71996108d327d09f0a1b161f9909ae1180540c7747400ed420988af0ea9caf093adb212b7bab6ae0cc587b6948862e95ce16125c2df2aac0f460122ff511077a584c8570d87f078a3225fcda0b46e3fdf928897ee3b8166c6dd2851b695699af2b7f532c79c275a2ca280ea4890b6ed4e5f4055a38a550f4d1410ddd2d741b447582d14bcc20d0734a84a77940aafbf3777c0ed49dd4201c1c119e2e3459b05f4b968143a0e05adafe328e1b501850e6712b03d3d3d0aa0b68002ec78ea16d79922faadf0ac6935c97abc4a7c290ac0163772804d08b7c5d53d44ab2462e95905e8499a48df21c2f3ca49e2d3512e8b3dddd4813689125a2b008d0f4a88521163793f07d264ea283959343dd78a8f3b2bef392b315aea58afae8e04b8cf80774da104b70348cba2da37c90754295853e97bc2ed412bab849868d72777035e368dba1576ae056d224b7d11db28003c41d4049a37f508f78e034e7fdc993feaf808b976cc6e1b592daed6c8428a6bc41c9ffc619ce60570c45b66daed649949d3b9cc94476b64faee38ce4c73d856664a45f3cc800d5f993ec6e265fa4a0233532ef065facac033d34a4f327db54364fa2ae567a634aa2cd3d750aa4cdfd57f9dcef85890ccb88ec3cc8475e64c6d5750a6b6713f13e9b7cd4cd0ed9d89f4a46426698dcc4cab8f2f1369b8cb44cbdb99290d4dca4c6b648433705c3fe03b9b0f1cdfebfff331ddd9fdad4bd33904be3b0fffb14b2e33a84b2e3ccced21fc3c3749bc64dc48abfce0d1a1679c0eee8dae540945a74d4b57196687540c4ca71c331c0c1b9a6912ce9c48e23c00e09c6512cedc48e2ac0238679b84332f92388f0538e79884735424715e0f70ee1dc6c8689ec5b8b1da451efe1819bee654f89a007c73c3f0c665a83f42f517b1312c9f0e671b2a9c8d01ce4293708e8a24ce5b9883b3c8249c7991c47921c039cf249ca32389f3138073be4938f32389f30580731f93708e8c24ce4280735f9370e64612e72100e77e26e1cc8924ce3280737f4a9c9d25cea5b209cebb9c8badbabd5448361dc8a654203b8212e702eaf1bdaaf935d5667cfe7c9578367a15cbc9c043175282edcd60bb7eeafd5a5186db0fc03d807a0c67a24610288ee7f4d1abc1f70309c0819428db4994f9e1377f90f9e18dc00f1785016f4cf8f03ea682771780b798125ed72479b83b1293d6cdc9a2f14f0066b14930474710e6cf00e6129360e64510e60f00e65293608e8a20cc1f01cc129360e64410e6770066a94930093bd2c8607e0f6096990493b0564e06f34b0073994930a358c3f906c05c6e12cc311184f94f00b3dc2498632308f33700f3204a984324cc0aeba10a7154e373e1c6966ad3a5d4b6c7246defec4885fc3cd0dcb1827ee2d77231e4d51e82bb4cc08b5e23471be0a5150dd9d8e65e749cd0fb3652a15c0dbcaf9212e5a0b8085f2c844d616a77d709d67fee9d6b4473702d4bb45e38296cb2d4b510c05e1986dfa696554511650648025651a2dc599304a4bac70b29dacd546827032f5d4deda5e3c50ca355725e055fe05e6decc86760a8d926f61c9ee865544d80971e1cc6d2c023adff95f2e3c5227fe757a33c9ef34880b02a0c84a3b73b84f70184d5f48bf0db1dbfea385ea860efe312e50ede7b00c41a9346b9930ee622c339066432b526e1241d7d44867309c0b9c6249ca463e3c870ae0138d79a8493b42b980ce76680735d38535ab2c31f96b01315be9740d6b3de9cb145516cdfdc0d78e2863050c2c18533ac3acd5439abbccc7a695d1805223294eb80571e42dfee0e5b2c17b11502dd0431637c851435c53af269f2718b0c45208ab705300f0da339a346ac7d515dd7c2aea6d3aba3ae312e87b24f9d0ced7f00dac34c453b3292682f06680fa744db97b91b8f79731b5fe7828bb1d7f528106d46a5224d8d1f0d6f4f2c206c8ceb40857815c8b08e08a37733d5591a84b93fd91c8d3d81bf1e69124cc27e773298bb01984799049370141d19cc7c0073a3493009c77792c11c06601e6d124cc291c764307705308f3109661427098e05308f350926e1283a32980301cce34c824958ce2483d913c03cde249884238fc9600e05304f3009266125930ce62000f3444a98192cbef5d3dff043c2fc9d6cf8e1fea0827952430e9ff5767510a6a2641d1d4380af9e6c124cc2fc9d0c662e80b929ac2da2d78831c87cf5df90467d90e1db09e03b85125f77802f7e54a7dd44a7467f447918cdb300e8e6b0f679dfbe46221d01109e1a06c2fced0ee1ee00e169661787085b35c98a431782e2d0e9618d95733a88611f2779d73059bfd0e1c047cf30679c7b14a757ef01509e19562e9e6ce381288fe3dc05003d2bcc3e4b7b57023ec2dd5fc770f4a2ff51200d3ddba495e5c644b235e9bfc063cf310927e9fada6438af0338cf350927e92a0b64384f0338cf3309e7e848e2fc10e03cdf249cf991c4f938c07981493849f77521c33903e0bcd0249ca41b9190e1ac0638b7988493749b1c329c8b00ce8bc218e9e9cc652f15aff2919f85d64365ac946d5fc3100f0745fa8ba9aba1a9ed063857a8c6f72324ac86cea2023a0af8ea2561acd3d9007bbc90cd505f05e06da584d783a53af9dfbd1208e1d8a42fa9a09e0ea2f8a52642256cbe23837a1a807a99895009c77792413d0540bddc44a884852732a8d300d42b4c844a3876890cea9e00ea952642256c5e2683ba0b807a958950090bf864504701a8575342cd65f15d76eeee9089ccd9cfd736c4bd3bb07be37267c3e72251a2557d578481904715087ce30c1508d79833d13b8aabcfe7037fbed6dc599f842346c9baf75e055e7a9d390bae92ae8343e6a7eb01cceb4d8219c55d128e07306f300966147749580360de6812cc280ee3590b60de6412cc28ee92b002c0bcd9249851dc25a102c0bcc52498515c95766f00f356936046719784b900e66d26c18ce22e09270098b79b04338aab889d0860de61f618fc28ee883000d4ddefa4c4db56e2b51764ab10b5785b7639e52a62645be732e0977785bd28ba9f75c4a2d7e8b107f0c9bbc31a873f53b468aef0b4784eb25eab125f8cf238fc5ec057efa104ba43c2485e4d87ae1515ba4600ddbd0d39bd26facb5e740528ef0b638e31df957dfb99635c04f0dd6fc62e1c76efd16ae1b176bf10a9677e4c85f65a90e13c60d212d4a49549ba951900ce7f98843327923867029c0f9a843337923857029c0f998493747f4d329c1b01ce874dc2392a9238af04381fa1c4d98fc5cf419eccd6313eb0a696a981dfb3add7f952bf5562087831b3b78aaa08a73e4436c2be0b284a3d6ad25c9031915c03f46f80f33193708e8a24ce1b00cec74dc29917499ce7009c4f9884737424717e04703e6912cefc48e27c06e07cca249ca40369c870ce04389f3609676e2471d6029ccf98843327923817039ccf86d5b151280ae9b596e4f18cefdb315fceef2c91bb7944b963a318007d8e12a87d626f8412bd0eb54e00d33673c6ba477108d708503f7f3e8cb11d6aa1547b62f612d1c0a11e8afafa8aa5c02f5f0863627603ec5448066f1c80f7a2b9b32e08f369b2f4f21a80f625730670e547720471679062be6c12cc280e7aed0060be6212cc280e7aed0460be1a46f6333afcec872c8dbc13a491af35649932b499eb1ba950ae057ef87a187e38763b2a06bd08fcf00dfa1471b96699de428bc952b6542a5426d649e25d64d1ab4fb70630df3477506b1417ea1d0b22f95be6acd31dc512e570e0a56f9b3112ae48a49f2b45f4e7e22a69d192adf67512f0d2774c1acd413a79852c3d9d0470be6b12ce9c48e25c0170be6712cedc48e23c0ce07cdf249c7991c4793ec0f9411875f3d45ad973223987721380f9a14930a33887f24c00f3239360467115991300cc8f4d8219c555644e06303f310966145791590e607e6a12cc28ae22530e607e6612cc28d6d8cb00cccf4d8219c52108cb00cc2f4c8219c50eb51200f34b936046b143ad14c0fc8a12666f0d4c7dc3dc54f94a68abc60ea7825b01e07e6d526d9d748c07596d3d1be0fcc6249ca4654f329c8b00ce6f4dc2493af09a0c6735c0f99d493849e70091e13c0ee0fcde249ca433d4c870de0070fe10c6d6e2a3d8f6b6b5f816e620fc318c79bec98b4a139977358ff196d02ab1cc196991a92f15e48b809ffe4409b917f3ee3f6c4fa49ecdd4f4e9ed6b8bb26200f6e73016e573767f2b16c2b81867004ea29a54142ba5b301de7f36e45891d06a4d6463eb7e01e9ec2f9428fb089405ac5aac94c00783958b314bfc75c75b17c91ddd27881d3656c8fb53ac63a92596701d44b2b2404b00f85773e6164531daf704d1fe374a949d92a05496928eb49b1a23c27805c0f82fb3578c25ec18215b31761ec0fb6f73e71d11f6d3938d11fd00a4a5bf87910060f9be930010a6a36409c08ec043ffa05ed3788eacd1abb99905c23379b48f5e5ede1ef8df9f94e0f8aacc93449187a78864a0065081ea0c40fd278c889a5d17594b44cddd5e9d2bea4b9ade0b30fe45ddf9c6814d121f6ed05daef7a682391ac0fcaf3913b2084b906495c65a9081fc2f0c94d9099a36a2ddcef91cf0cabfc3682acedbee9a8a0f020859e3105a31b9374e16e5c25aa1c40ceb95a522bd9ccdd68ac6e12aeb1e2f94af66515e3d660c001ba304eb6f4a5614c7714e07281b51a2545358f33c5950948b4135005e634a787e57d91a4b997b93adb2d51ae4de4d4cc239269238ff0dbcb3a9493849177826c37935c0d9cc249ca4cb8f93e1dc0c70363709e7e848e27c07e06c61124ed21566c8703e0870b6340927e9c6226438a7019cad4cc249ba130619ce8301ced626e1241dfd4e86f30080b30d254eb5bf552edb9ef6b79a02f0b50dc31b531fdf4e582327c3b93ba805ed60124ed289aa643897029ced4cc2991b499ceb00cef626e1cc8b24ce3300ce0e94385b0801a556b66377a271c964b8c886af360359cd8e94b806b1f8865ff720167bd075a5f89bb7b9d70a919305606e5691a016c2a8b6022ad8390076c7308a4523451932e4c661b231ec7f007c9dc2e8a4c052cad0aa8f64d1fe56904a76a644d94608a861f6060b33c558dfe5cc9e6511bd51693b020fec42894d75e1f2fec7a98cf729f29ec765a213b72ad23d8d4703845d1b3212bb7b1aa3b830d4ae201277a344c9c778cd11b9700953c3f8b19143843b9b93a5862d804f76a70419641c2f694b10598af92b40bb93a96849f37032b41700b43d28d1aaf53a521bb3911bc9a5cc9e06307b9a04338a4360de00307b9904338a4b993d0960ee6c12cc282e65f61480d9db2498515ccaec310033c32498515ccaec0900b38f4930a3387df42100b3af4930a3b894d9c300663f936046b1cefe2680d9df2498515cccf95d00730025cc0c16747a33619d886c7af33ea07d692075fb52f2f6f67c31d29d303b6a4a05f21a00721025c83e1a907643316fe858c9f6129d6aab138e3822044c36dea831480832cd99be12c5eae6488072b04923e1c6506651649ed90244fd2126e11c15499c7700ef1c6a124ed27d5ac8706e0538879984737424717e0e700e3709677e2471be0e708e300927e9923a643817009c5926e124ad7c92e13c16e0cc360927e9c64c6438cb01ce919438f9895aa9287a9dbeed00a61c93bc6e0c65170699d7fd0570e69a84735424715e0b70e69984332f92384f053847998473742471be0f70e69b84333f92381f0538479b847364247116009c634cc2493a38810c6715c039d6249ca4dbd691e13c10e0dc8512674fe65ee69e73a865bc73cdbbb8bd77be1a61c705d968f8fea07978d730bad814d6726d175b74b761380280dc8d12e4400fc8252c7e3c71ea238f09519355412f03a8770f6312cc18b6bdad63f80f909aee11c6a878e5add5c2ff785a3a45c22bddce128285c03bf734677e511407cb8e0428c7993b778370680d591afa324800c653a2558b448ef4f86a08a92719bcf100de04b3877d118e44261bf6351744fb8961d49ce092cfba281eedbc7e1bf0d64961a4a2f1de9a4a3a4ae8a96409c1d1c0532753a2edef2946553038197b7bdf6e7922c03cc59cd175511cb13c1b240653c3c8ba94c7f2e85ee299c4bdfd35a774079e3acda4b594489ba4c9700e05380b4cc249da864a867301c0b9974938495bf8c9701e0c704e37092769673319ce6300ce1926e1241d0a4186f36a8073a649fd4f6328971420eb7f6a0670ce3209e7a848e2bc953938679b849374d149329c17019c734cc2393a92383f0538f73609677e2471be0270ce350927e972d26438e7019c8526e1245d2c880ce74680b3c8249ca4ab7393e15c0670cea3c4e9ac31db007d4b64ddc7bf037cf3c3e898e31f2e139ea864af948f44af753306e0ed43dd50cc5fd1ad2a1bdfb941b82425d95ac71d01ca7d1b7eed05955f472f42e7808ae37ea6808ce2c09a1e00e4fea68024ecb52403792000b9c01490844d6c6420f70520179a029270a01719c80d00e401a680245c3c850ce47a00f240534012d662c8405e02402e320524e1404332906701908b4d01493872830ce44d0064b129200957402403b915805c62ce00ed282ec03b08a05c4a89b203c3ebdb5ced12ebb82e82bec8052b80259400bb323f23db46457209fd36c01b4b4d8219c525f4770030cb4c8219c5350d6300e6329360467156502b0073b94930a39883ff0f6440e526c18ce212fa0c78e64126c18ce212faff029eb9c22498515c42ff4f00b3c22498515c42bf1d88e69526c18ce28494f600e64aeafe6e672fdf0209b4dc7a99572af96b64f0c8e69fed00a2f5aa866cca70cf3123ccbb3752a1bc0ef8e16a4a94bd9877aeb97efa5e11ab12e3cfab5999105649db6dbb990aec6ae0a3075382edc7bc7324ed19bdce4213760b52559274348a85a5bd81f75685b93a920d944f44e569ea246d537174f7cdb81860ad0e63b6249f89ce23ff3aeb75acbdd3b91ed2cc74b2eceb6b9034d49833af378a05fcc100656dd893fc53cfc008d1926560c78344604d98696bb9a5c47cc677b8ae65de5592429bd44f56e0ba0a605d1bc640d751e18f12268beed783e8be2e8c2a686a7d982323599f9f0f3c71bd4930a3589fdf0fc0dc6012cc28f668ce00300f310966147b34670198879a04338a3d9a7b0198879904338a3d9ad301ccc34d8219c51ecd2900e61126c18c628fe65400f348936046b1916e1c8079944930a3d8e0311ec0dc68d26a31a45910d96a31b900e7d126e1cc8924cec500e73126e1cc8d24ce1a80f3589370e64512e78900e77126e1241d904886f36680f3f830563ce0332fd68086e1507a81c8f04d620ebe1328f175627ce3c562b99b0b17b55274ab55895ea172b64174ab958bb3e8616c0a309e4889b13773fa2aed8edf4596ba7c55f4a582071f62339ef13919bc37a8d812c0237809538b4dd44410ee7c00f7a430bad7d2d9892027926b68b705a9e7c9a6a225adbdd36d9403bc761375ca9a289f579692f654f2b60a128c97030f3d258c512010a3bfed1e089b92c9b67b280278379b9b0010f66c9225006f8304e0544ab47d04da69c23fe7323e2ca15496044a842835ea6e85088009623cd30a297e8a752cb5c49644b05cd00a003e2d8c14161bc13451782cf18e6e33a852d82e2009383d8c96515876551501a76a10edb26a77e0936784319219c24c9e044417ec5400f64c4ab06adfc15cb6bded3b781e40789639233ea33836642f80f26c4a947d7da02cb4bec985d4b0d9d65faa31a59a365b9a45952d7505d9d2399488bb33f7c8cfd5a2256a79429f8d620fe8a900e8b961f8ac026a4ffaaab2446eef9be31e0a109f1746db7eaaab198fa5c449b69a714b80f37c93708e8924ce6f41a67581493849e7c893e1bc14e0bcd0249c7991c47932c0b9c5249ca32389f32d80f3229370e64712e7dd00e7c526e1241d8d47867322c079894938732389b312e0dc6a12ce9c48e25c08705e1a465b53b6f86d1f796f7e21b31bf4a2db5cb71420bcac2117c7082dad245ba6f216500bbabc2151ba9b40a2380b69344079455811db6ebae382d6c9481d4223f2975408ef0711fbca303addb2450b925a3a48dd8e7a5bfc2300e355e1f6bb6fef1bd6f70068af3675480369c188ac7df30b80f61a53d192e6f26468cf0568af0d236bcad9eefa373301c2ebc2180aceb7be0b7d2838d950b0be00dff5e1e0cbf39437a3ec7d4d41d9f2863086d1a4d6bb9e13c9fef52b802fde6812cc28d67aae04306f32096614d75e381bc0bcd92498515c7be17200f31693604671ed853301cc5b4d8219c5b517ce02306f33096614471e9d0460de6e12cc28aebd70068079874930a3b8fadc5500e69d26c18ce2ea7337039877993d558b30e293d5cf87810ae6dd61b4bc8facf3d712d1606c8f278efa8cf7078097de63525ff918ca1494acafbc39f0ca7b4dc249babd0919cedb8177de6712cebc48e2bc04e0bcdf249ca32389f33380f3019370e64712e76b00e73f4cc2493ae19a0ce7fe00e78326e1cc8d24ce6300ce874cc2495ad524c3b91ce07c9812a75a723f673bea5c5b09e03d12c6dc353eea6812e38b53adb62a90a5b20e64cfb22c15028b8500b86c55358bf288cd0100f1a326ad4b473a9e830ce760502f7acc249ca44dc864380b00cec74dc2493a61800c6725c0f984493849e7ae91e13c12e07cd2249ca4332bc9705e0a703e15c6d47f38ffc2d939cb69f32cb27e47396fff0ae4ed4f9b54941f43396c81ac28df08f8e73326e1245dc2970ce74dc03b9f350927e902d36438cf07389f3309e7e848e2fc18e0dc6612cefc48e27c1ee07cde249ca45b4790e19c0370be60124ed2bd0ec8706e00385f340927e9f84e329c4b00ce9728710e66de35bc78d35d89c583cf6353763a9307b1a137e3adbfaac46811d2b96f9fc78880df084aa62f5302efcc128f6772a7ac6420c9265df7079efb8a2920a3387bbd1b00f9aa292009472493813c0a807ccd149084e3e4c940660190af9b029230772703f91e00f986292009e71491813c05807c931264b6a798548b4ea3c6170a98683d5169e9b34a9c7153432a34f5a5c2bf05149ade0a631078aaadf784c31cc89a9a0702986f9b049370443d19cc4c00f31d936046b157a91b80f9ae493009eb476430770230df3309266189940c662f00f37d936012d693c860ee0c607e60124cc2922919ccde00e68726c18ce256a51900e64726c1245c21840c661f00f363936012ae104206b32f80f909254c7cd7a229d6ef72666f56ca87db70c1d1dfb5683fe680fd94126c4f017686f5c0523132194e7a6db09ddfc8a6c23607583fa3c4ea6f49d428ae679305a2fee7e62ee94798df932de9771bf0d22fcc9e0f4f586b224b04e600cffd92126f479069ad1199129ffd61efac1dd26cf88d54104b808f7e15c6800798f363d915797e4fe6937d00ceafc3484de3a3fcf6bab7561e88eedf8491e763bd4dee3c3f8a8b5b8d005efa6d18c5fd74f27cc2f67a321f3d1d80fdce54b051dc4b7b1300fbbda96009930232b01300d81f4c054b583aa5cbae00d81f4d054bd8f34406361b80fdc954b0512c60ed0cc0fe6c2a58c2d65532b0c701b0ff34152c611f00dd76bb00ec2fa6828d62cbd5be00ecafa682256c6d2503bb0f00fb5bd8ed03faf17cce7ce73221ae92b624bb990aedb9a07de05f9468d5f615a35803ecfe41e6998701cffcb739cd2b515c54781640f9bb49ab41902eeb46d6873a0144ec3f4cc249ba0e1919ce8300ce3f4dc249ba4a1e19ce4300ceff98849374c156329c67039c7f35e4b01e6f2b7f14f75d3807c0fcaf4930a3b8efc2050266f3a61ee153e2844f14d19047c4a5cc591a70049bca4a45819b83586a9dcf10359e1ab6d8c2b1c0fae72f040eb0fee9aec7c4fa8f93d93ab65a5ce5f24a84ec4aeb2ed7ac9a650fb41ef91f778896d2213245b16cbcc5bcc67a662e2b155f5fcf0a99bdf4e16cebb71aa1552b90648a65e2e758d76a191f5bc0bfb0d2d26439ab1216bb9746cc8cb5109cec8d5cab64352453eaaa36772d9005c272cbe662a14995f54c13f11d3b71cb8cb50567aa13be40d414ab85565dc4776ac4fba56ca618f2b45c567574d39c32a527dbbbf366c69a5a679358a9ec8fe6011e8b759061cced9b29d8145b4c8ac5b1a84e8bac41d663b17ceb975d871d51577b1d21274d55ca33753db94c1ec289a5fdcd8331a68fd715f5e69bc92cb2a3137fbf4c102f15520b925a9adc3edccfdb2408952cbe17e4766d3fb342ba990c76e1a65d63adadbfe659215f229d7fb6f5708950aadff446ace9ff03bec3383bc1a90300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/b41e124d97ae65d45bfd520414605e97.asset.meta b/Assets/SerializedUdonPrograms/b41e124d97ae65d45bfd520414605e97.asset.meta new file mode 100644 index 0000000..b406b61 --- /dev/null +++ b/Assets/SerializedUdonPrograms/b41e124d97ae65d45bfd520414605e97.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d0adad9bc0ef78e49934bd7067998493 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/b42eae3a19d2e89448e47dd9c7f5d0e2.asset b/Assets/SerializedUdonPrograms/b42eae3a19d2e89448e47dd9c7f5d0e2.asset index 4cf3233..6b9aecd 100644 --- a/Assets/SerializedUdonPrograms/b42eae3a19d2e89448e47dd9c7f5d0e2.asset +++ b/Assets/SerializedUdonPrograms/b42eae3a19d2e89448e47dd9c7f5d0e2.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5c4973134714ee91359225cb36f2826c4212b222626cc9982d2bc10ba00086f29603953202c9a0c4362e493624b75c73ce317f245539e6989f942af2de9b1ea9d5d33df2486a06115069dad33dfdfabdefaddda3229263f0cf3a0f972db6c696d81cdb6425f68cedc35f4bd0eec1c7b973fbefb32ab44fe05a84b1f3ec4c9b99f8efac3505d702dcd5581d661eb2c7d056687c9d95e1ef02cc2dc31df6eec0b70c4f595198b4c996d93db6ca32d6641b125b34a9c6fb2c94cb1a84eb22fb1946cbc4142e92a3a10c5cd661a446637bc0b4fbdc03f60389b507638f614e95ed02cd474471f02fb85a2493db503b01df187c27f9bdfb8df0fe93f0b55fbe7cf92fef1fe3ad0ddf84f0b74b0bdb013e37e3336780b751a90fefffe6f771de0e8abcf071154f0981568ab7493e774a7846ec9f16eeb11d929e017eacdfa575868567c6793b2af48df27644c27658ea3fe5c843f445794ef0362debc0b6c8b26e81ae8bec80e55049d6b9002ee0ce6c6ffca4ff083794b3b46c1dccec0008282c7093ecbbce16d805a5054e5b2981ef25ba16e1890a11c5c5a425fef42c81ccedc2a72cb84f0dfa6f92f7a1035560648edd8116673d64f3e0100f242a5bb0ec2eb860996dc0f580e83d04b6bd4fb613095d4d9eb306349d48b0073d2ea00770bf4b1caed3f588382d13f705e8ab535cda87c8b408ed0b5acd2b7b15fe56adb9c12153f3a80e08ba7e27ecb86a5a066990fb1cf9ea5b8d84a1110aa5ef70378ce6d047acdf3c9a788ba11364303914388d7982cc6ae9bbc07294ab7ef520185c46af84ae7d1f3718dfa43aa40c45c223f623f72277dd67e441c891eb8d6bd0ee1017d8ff9863e3bf968b941af768039fa6fde430df582b01528a792990c3488e8a81d36d14e767362859d69a655899edf3ccb342eaab109b6874581a6210dba1794e91a87bda85f12e5567876428b66db75adc02cbc77925937ddd60b5a3793401d96d2c85dbe46d5e86c9f6928ff1ba2742722649ce334a39ddbf1661da5320704429e3107856f10a4826242471010dcf1195ab13bfeb465dbd95b2f35c859ef30b5c6a771ca242ab155e2bc99cad4385182e12a15fd0d094669622f8bde5593bc674a630a08295aadc8d57082b8e3d232ae89cc181c5b27b46025603e0080138e511ae3d0b3a08a30a08f309be49f07225dbfc88dee66d9572681bb3675439ba78781df89883fd2e7af65da2f214fa9ef048e5174971a61845fdd589bba3590938b536d3a4cd799f88df3b9e75fa8fa9b484ae6e3d09454b5b3c9720960b81f39bbf66707f3c201714b4119ff1d141771c61ae112e9afc3b4e96608e0b9df6e3ba5c3aa1cba57856904c922401f2dfa06a1dec3c1928a9c82ba6f42b26542b22e18cca3d65c2693de1a42e604e751b30877494a7bba59cd2a9f9944ecdb8a5734aa6d3649a733ea6a92a053b284c0398d3b04eb9ef76a9dc111561d4cb7b8ad0914fb5b836f76f79b571fd6aa33ab5bcaf530bae918c05f5be13ba753ed0adf361475e9ed679f947a6bc7c4c67081f776908e33ac83ed141f66947aa9950ad4395b609839bd42928ab52d015adcf7b37a2736c1b3e5898d4a1c52d608d2b16933f8ea929b5a6b520aa3fa993e59c4a964de66ef9dc0d9cb8d574ce9cb078d9a1635f2c5e0a8d2757a0a4710aae35e2b60cbc1fd1d38ed4eb345a028a87547420dde61ce789663922ee75e4b12d985b014a4170c8e870f84c85c39256a75830ea0a4d47ceef61b40aba3dae3665e95a372941649cd2c938a39271b9a1eb75b6cc6ec3ba45e0a10cd2a1753e27ee7ee21a70242bc0f83d18714e85f5f2a9325defa49cd649795e25e562179aac713fc5be22c882dc96da48d20b5b3da593705625e1ed1e4858a2f13acd2b068e47c1648ec3c7b23078af10275598799f66e05d8de5a86cc9b3e31fb2e1da7ba01fd4c2464353ed8fceb05ad3bd1cdb61bd7a4fd28e0755549d13e2aa28ddf1cf8abdef84e25c229716204d75dc9b2629fea22016e55a8de4a87a9ce9d09ada7381761a1b50db50f0133c87c02a8f9fdadaafed3af21e435e679608b8c7ec3d782f8cc6751d002ad196a5069f7fa0276e47f288ffbc4990b098dca6e99877eb7d010e13c0b960129c0c818386da4cdc98082a405f2c4fb1bf4ae9ad1fe0fbc36ac2b760123e4c5f6bb468b94f2ceb2a5956dc9688dfe85990efec5d89371d8d5201f082364155a25792d3136dc85f37ce2f8ae925eb893e59c966b2da209eedc0399bb593bae6c963ed74e97f5ed6e4b1acb98c204cba5500458a2b2623459c7489dac410b00d7581b44237efbc132d71e3f471d8ef2476a484ac74d52458290e5685ed73d771de766f03b3c6604b9b82cd1660fbdc246ce8f7ea9d9a31d062a6401b1740fb221c5bbb620eb6a429d84e08b07d190e6c17fbd04513026c5f99846d94c38699f3391d6bb41ef01a4c0be3a6c08b09e07d1d8ecdcdf7a1ab5a026cdf984e0b089b7c1069d0d6464c81362080762d0cd00c5a9a31d0a20268df86019ac1aacd1868430268d74d8286e561b171eede7fb9734c006a319cf07fb90f0bdc5101b62593b00d73d8ca8d77a9ee9051c74c99022e2d00b71c16700673a731e02202702b610167307f1a036e5000ee4638116ea10f0bdcb800db4dd3f6d63c61953755fdb7a19a1080bb158ebd198c6fc6322a13602b8403dba53eacdf8605d8be33095b82c376d4f86d8ad17460cc3d4704c06ebf6ac0fa71d39e646fcc3bc73c1eb0de61c20bb4acb481cbfa1cc33bafe7d25c6e0c1af8c32b0c20257aaa28bcaacbd1cf80f13555901fa6f8d36cff1eed2e8a66a9ed79b767faeac5bb4195a4ddbc274cf96825473f907e93e55f65ceff41c19368dcce90196f82e61de2f86bcd2a9975959eb1ff03ad110f209a450000 serializedProgramBytesString: - serializedSignature: 5e42c500bfd7646ea602d17ff688503deb2aae14033c09427e781ba8381b5018c38448272615ee2322c611e9b51d26461ee4c5980ec9d34888dd43c380faec0a + serializedSignature: abd4b8bbe5636dbf17b8fc91e8efc4da80481a567db759f6a1f0f1656321a475d7446e5162da6fe77efd8bba60c076010612db12b75d4c3d669763817b9f5705 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/b5280742086799a4c8c0a14e90cd913d.asset b/Assets/SerializedUdonPrograms/b5280742086799a4c8c0a14e90cd913d.asset index 8da5874..44d7064 100644 --- a/Assets/SerializedUdonPrograms/b5280742086799a4c8c0a14e90cd913d.asset +++ b/Assets/SerializedUdonPrograms/b5280742086799a4c8c0a14e90cd913d.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed595b6f1b45143ee378eda4a42d014a5a285010528368bd6e23f18894a46989a021c4715e2a9438f1a672b11bcb76a13cf2ca3fe2bf2185ef9c998937b3b3de38f5a66d6856decb5ccee53b9739332984843f7507b76ddaa415aa509d9a7448cff1b682670797feb2ed1bd4c3f329ee0df4dda15b1933f9efb6ba8efb1abefa34c0cc17b48f674bfa6b14e17d0d73237c71eb017e1146a92226d5e901fd4ceb34afae6590d896497dd3a6582f358dfb32fd89de48846226a174cde356434f5ffa3a10da8e7b42bf8a5a1df4ed634e8fdaa0b92714a79b3c57749247d13ca7f09b31ef85589b194a25f353e6c7efe5587fbc9d650e8e8e8efe0d9420f003646a50974221fccd18a6b233b38dc4a44b0523cc6d613b001c5d10f02055173b0c6891ee7b91baa1666372afc8bd81112d21cacc1c16ff2458b0706d5c51cccc7db43f122f6143b7d053a19ff0e459bb740f867be250d906db365c25a22ddcbb426f1762274766a9c42ee1ced9044dedb11db45840bbf86e8b8435b9ff2e924622fd1ada06123fcf1141cb78be146e49dd7b78f7f1dc3290f965f43b6e5abb0e0f6ba607d086a50fc56fdf59e4755884a12fcd98302c86925dfe4e58e21d863ac904b220681af7741a3dd1769f42fe54cf12088eaf635243ebdf36b1d610413f02e921b543890be6d317abf1b825506da0a5016a1be86d0afd81587498a62d2dabbb1f49768fbba2f1d0238293102c5228cbcecd0c08461980e92da84a6cddc943d52028565921d7acca6756593a77cfd1accb90ba2f3475fb062836c09be92d090757233b63b4094ba73161d5560b0beaeb8415ce2e591ae2051fe2bc52a8bfce05f1acaae691149e11aac23d7a6696a3a41fda656d13cf039182dbf78d8f8fe635da66d3c7f80c6d164af1b73a466d96bf162c52417ce7d27104d7d1aeabb055b1404b3855bcd23087b4f1168bc75253bf106b0781df73df13ee6f163669be3fe5f37d864ffd92abef8fbf1cfa7d73f6d4f9e4b258e55a42ab912b410a6a450f6a5546ed0a6f8b5c71787b33e388c4d2a4100f7cc4f9f3aa4f579770904eb8e4b3353babaa9da3adf5b8968c1bdfdeefcb76ed2406ea616aa0fb02ab423bb8b88af70519f7c5595bf7e0763f8f240dbf03ce89032637975980a43961d9e7276cce0f7c187d7f9c8e4e2e8aeb82c31fc2ef37238546e8a9f4ec607f73087998507ca9e5113e7a698b72c251e7d21d753a4db30f7d9ad51dcd16bd455a76895631b667ade3e3eaa2d7b8faba7eb40d695ae0e7c7a18c4b29567155e4ed61e686ccd0d2879ce754758c25857977e03dbc87dd826c7b12b8d90bc547947e307230b13d7296167a17c7f30fe420c5eebb7cda9dbebc499e07948d46961690e6cc7ce134e565af64cfde0a212f53eadb337a53b6141f33b729bf0f8d9fff34817593c91557793b263022399465836472710b3d97cb5d2160b3fd044e04d9b596004f53d6ad3e2efee34077883f9c98af9d6da14d46c555c9432f2583f6845ed38d121ef2c6493e1ff7f285144f19a65a7f8aac72aabdfe3fcf8255ce82371884924d1a554e1a9fe419d9b3622f6d31bd28ebddcd0ee07278bdcaf1cecc8948bf741a45ce12ed0589760ddba779c2c6d552d7a96572832bc80bae2006d7cdd7e365d5b710368ac1f6599eb05d71606b611a57c887b217c811ba725ed0a918749fe71da00c9da5982b5c97f3826b2a06d717e701d7d65b0d57912e4cb157e521b748ffb3de641caea1e68c2e9c3f1f5324b9b469b6cdc37a2ae4231bf51d8db7d9184d33bbd8f99262a5a06383f6c46c308902cea7e9ab1473b323ac12b2c92eb4fe5fb96e3a2fa57e1d96d7c4f92cb027b5524fc604ff0191c95a1c12240000 serializedProgramBytesString: - serializedSignature: 2cf4a7132114bf15e52f855cd6bdbe7dc7f802df9f12cf333123735fa0cfc97c50852158d2c48b948cb46229404efc41ead4d44667a39bf70e02f7e312a2e008 + serializedSignature: 51f66d6dc5a7734ed589acfb1f535276d1b41c0d5ccdcdd67650fde9efb1c338a41ff5914afa1aab29f9e5a3c12c989e7eb20310410cd2dd4362b7b648a63c0c programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/b5d5905683ccd034397215e290327976.asset b/Assets/SerializedUdonPrograms/b5d5905683ccd034397215e290327976.asset new file mode 100644 index 0000000..ae0fe1b --- /dev/null +++ b/Assets/SerializedUdonPrograms/b5d5905683ccd034397215e290327976.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: b5d5905683ccd034397215e290327976 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c15c7f6f8e7525c4a29c5a1042b41139210a0a5824391d010a8400b21099012208d202d7577a34edddddda8bbbbbbf7d59ef5bdd7f7fadf999dc93dbb77cebd77efe66c66f8ffc2876cd6ce9cf39d332edb2c87393fb1e1ceaf05ac984d6223d97c56ced6b0d5ce5f939ce32ae79f7ba6aecf6535ce71b9f3bbd4b9379c65a57893ff0c8e75777ecf70ce6a599df3663d2b738e95e2fe3c56e1fc3dc379b7c239e3579739ff2b9ca762cd9d97e6b3c9ac88cd61dd625d528858205eaa95d762dcae586be7f744b6c1b95b2194e281e4885bdd9c5ff39c3bb5e2de2a4769f5dc42b6bf306b9573afcc79a786553932970a89ad4f2860e20fe61ebacb630f79e452dbc8bfb7917fb7967fc3e75bc863cf349fef05de6b03fee6842e4bf27e6ff728d8b5748ed78373feee8ff2b93eaebc662b92c8ea2b8f59f2d84fcabc210dfd5bc963ff14f626933100c84a87596b791c248f03a5be376618fe6097516c3390c7597605fa0c0261b701f7f9b59d42d8aee2b19b2f1ebbb9f1d8ec7c197f5fcae7b3e571a83c0e91b29d673a7f28af0d93c71d53e835dc7d8f8d65719f75c2dca65a9e8f90c791f2982375eb2175bd099c87d545c569ae94d95d8671b3e6ba7a9edfbf459e8f92c73c5f7ce5cbe76e95e70569ea938eff299d7aca306e03e70ec7e64b92c852f1decb17efbde4bb67b81c9bdfe7b307f89f56ee6829eff634ecd85e1e3b0199856eb8437648e3fd3152e7de32cc3bc0b963438bba80ba3797ef6d92e76359eabc4be9b2b33c8e93c75d58832f0e517a7402762b3dc6bbcf649f21cf7775cf775a9f4698bbbbcfb6fe459eefe1eadf72967bbda50a57a581dd52d8af7ca28fcf27fa48b95749b92fcae727b8e7319527f40772f8fb77fae4eee893bba32bb795bcdf903652e939511ea7c8e374799c06989f20af4d96c7a932ccbecc9b77a8b26752fcddaecf06e4962c8e66f87c6847196e560a99eafd3de5b14d9acfab676686d079963cb64d33ccb6f2383b4498ed5c5f68a37c49f9c21e2964ce71f9b6be09e8c0e5dc25cf8be471ae3cee25f90ff0f981aa0324f38354ba144b5d547936d3d5a5adf2cf79f258e2d5c5a9897a75baabf1748af59332ef06e7fcd85f5ebf079c735d4f70c369fb8794b9401ef7f6e9bc0f9dce6c5ff7bd0e2aedb64bf3bd64feb59f6b5fbb15aeec76a7c8eb0b7dbacd8aebdd7a237857e9914e7ad85fb218e4633c48eaa0d81ee07bee5e70ce8f03e3e189bf9d77db2bdfea0daef377ef03e7fcfea234755dc2127d96cb190cc21e2cc396f97f7b159fa52c31ede9dee5475047157f3bf23aa8327e294b2cc7d473dcb6fbc139bfbf384ddbca34faf1709395ade5cc9bffec09fc41d5bb2aa43ed9cc9bb654de3520fe4eac4a5e5be69e7754ba2c97efa83aabfadbd16fdb25f219556654317d397b20e020d3235b190fbbcf76f25a6592b0549b6395cfeefde272dacd95baab7c6c35f3a619ffb3fcda1a79ac95c7b5f2581f7f76a8f2a31a7994f595d850e6c99bd941e03a3f0e93f71f00e7fcb9eab86cde3412d7d6f974d5c5a7f20765bb2e0f48e6671bdc67bbab7ae3c12edb8e7ff3c95dce92fbed21ae9ce1aacebdd195b3ddf880720e75e58c5075a0c3ddf3ed943e87c9e311f278a4e4389c79f2727694bc3e02f8cd70708d3ffba08f6f2add92713cc6d5b3a17d73ac3c1e278fd380ec6e528f91f1b86aa8f31d0deef1f3a9c05e685f325d8e97c70e29ece90e9ee3c71342d89fec5e4b793c59da96c3bc6dbe1cd757b62f4922eb14a6f5d3ce2acf3bd5bddf49ca64a7019b7818b971d60dbe74babc370ad87d84bc9607ae9d24afe5c7afc564fb959d01dee3363de4bb7f2690a1bb7f16d04177ff6c79fd6157f7ce5be4f54d3e5b8ef0e99ac73cf90c3b27d1d6589e2fec4702c4e5b9f2dd025f5c16b8f1b243561259e7e9e3b28bb2f97c5f5c5ee08bcbd19ab8bc50de2b04f136445e1ba389dfb180c36879ef22242ed5fdcd40aeeefec54007ddfd4bbc71d945d5e32e45e212ea0fe3f2b2445b63637c613f9a465c5e218f97cba3aede7ba53caa726b4b1a72af92c7ea24727bfbe43e9686dc6be4f1ea2472af45f4cd243ce5ebaaaf6a1cf3fa3a3f77fcb65bfb24b2ae635a5fefaef4b99e797d5df51b2b5fdf9925fabaecab8da97e1ac5825f1bcf127d7d57e027aaafe726f00cf45575ff66205777ff16a083eefeadcce3ebdd553de536a6f775a83ff4f5db136d8d8df785adcaf1647179878fb3e2bb1bf3b6737693f1e3afff1ccc92978d77baf247a8fe25d5a6dc5dca7f1c9cf3e31ebe70f770c3ed21fbbf7aaa7e8cf6f27ab9bcaeda4877336d7dabc729bee7ee61defad47d3efef7fb7c6562dcdf1a6cb917dc83b629df50751255a79d0ce26a12b8a6ab73a5e2aa9e57fea5f84d90f29e00e7fcb947e2fa8f5475b187e5f1f8f8bd4ecaef54fcb6077a3caaf715a12b88b3c0752465f396143607c993a6306f9e34c5f5835e972591f5a47ce6c924cf3c2d8fcfc8e35352fe54e66dbfa8faa9cc7f63d37cf7a7c9fb57c7d977dd07e8a164f37792e9a3ec7f5e1e5f90c7e76438d399b74f4cb5f7746544a6f5d84cef1d28759ae1f51f71eec4439f25cceb8b9529fc43a5cb97e471a594b7a78f81ea7f4dd69f952aac2476c566316f1f82cab35e96e733e57de53b737ccfcf91cfbf22cf67fb9e9feb7b5eb5cf5f95e745dee7d96b400e3f7f3d6e5b4cf60db137c035d5bffa669c4f5f395618dbcb1b367b8b79db77aa0d572c9f7b1abc0719a8fb321dc5e6f96c2a91e7cf82737e9cef93abfa5f5ff1dd577217f8f47d5b1edf93c777e336e6568377004ff68e5766529f7e5dcad85bbef31c38777c3a2b2b890cf5aeea87dd57ca781e9c7319fbb8fa6655e1b262fbf9f8ed03aef3e34279ff0570ce656f49a2df1bf2d9453edb16c977ff48e35dd58f7a80cfb6035c19fd0a5cdbfa4d4f22eb7d79fcc01787ca67b9bc259a785d02e2939f2f963abc08ceb90e9fcae73e647adfdedff7fe4bdef7fbab79121fc9e3c73edd4a99b72f4c85f719ee93ec739fee4be3cf34e8f7894fbfa53ebdcb64b82f033dd4757e2c67de324af5217c21cf2b7cf7659fa9768c3e591ae9ea721a303cc9b35d6418cb98b76c5826df5de4863740d67f989acbf0953c7e2d8fdfc8f70e64de310d59f6a45b0ec696336f3ed2595e5fe1d36f85abdfc02df2b96fc1fbfcfc7b16f75525a332ae43ae2ac3be037ab601cff17b3f8067601b43ddff91c5db18f0fa5fe47995bcff0a38e7c795202c5576ae00d7a46d83547fd44ff2f88bcfc6dfe2f68c5265d3cfbe78f955beb3c6172faa8f395d9f526326ab98771c7a95d455f63f0edaecd3111bcf5eed93b35aca79d195b3936a3ffc551e557be16b9f3d3731af3de9d6b7a4df8bf9045c8e2a83fecebc63ceff60e9cf29f8a73caab1997fc575c9bb4c5efb5d1e55fdb99a79ebcfd52e87c12acdfe5b1eff238f2aefffaf7cfe205fbc1e14305ea5aeb11a2947d661d4bc8f582df0cb5af02c3fd6f974af7375cfaef3c956efd5cbe75f07e7fcb89679d3f65ac9e05d57ff6cc5e27ff2f86748165ce62c9f0ecce70f0f79756f88af5a169fdbe4c819acda12c9fc42d5abe19c3495efaef3d9be4e32fcd2fb5c835eb27c6fa83f4399c974506597b263bd2feed6bbe10ed9c7fb5cca793fc9da1fb2ed15dbe0b371830c4bf6050cf9545e8fc9f7a6260f33e697afdac56f82737e5f335e2666aff2632baf0c4fdd468da51d127fbfa17ea0ea052de3f7f2d5b84e33f01e3fb600f6a41a3bd15d53beb9d1c74ff6b50cfddd0d7f58968f5f5d0a7ef2b9d8a1e03915d661f16b31e933b1c3c1b5c3c0357e3c42eaf6163877741bbed127f748f9dcdb206c7e3c4a5e7f079cc3fce76879ff469fbc63814e47cb30e5186fac8d2f8c6358bc3ec5fbac54ff5d0cdc6f03f454d7940cd81f580f8efcbacca3861578c34c1507da78398e79db6672ec2e76bc2ffe8f97f6caf81f21e3bf214fd89822fe955c39f7287602f3b67b55df643b208fdf7f0f97a90de7449f3d27fac26dc752b6f762aa6ffbaee03c991c4f8ac9f1c5d8c932bcf7c1393f9e04e27f5b793c055c53635aa7327d19791a78f634f02c3f9ecebcf9ece96edce516f864abf7ce60de32528eefc53acae399f2be6c9335a4d1b3800e67826bfca8c6f03e04e78e0e39728e666e7b24ac4dcc5b7fdde40bf31c79ff2370cee56ef13d7fae7cee6370ae1843399f78e524e8751eb0f13c19070fa7f075350e9b0bce41f93d72a3d7a654f2b4d7de9532e49c91d8f93e6ee7cbe7dec940f6f752c605cc9b075ce0321ab583f7b986b6caa7ae7da3549e1803f783eaf09b9471a14f870b5d1df264fb357691bcff99efbdcd4027f59cbace8f17cbfb9f83737e94737e639778ef37c8bd545eff023ca7aef3e365f2fe97e09c1fe5dce9d8e5be702f97f27f95d7551b3749192a9e0dcaf35f5e9f8b5d21c3fb1a9c73aeaa7f43e633a2eda0ea1ccdbdb2c43d9837a59b47cbfefcd895ccdbd774a5ab43be4a1fd25e51a74996de943cd5e6566d80aba4fc6fc0393f5eedd53ba6c65655de7a0df394ffe2dcd1ab60964fceb53e396a1c56a5fbebe4fd6f7def5d07ece2f7bf73f9162cf1d993c26eefb5163151cf9cce2a5829ab6639a262c85b21e92ee7526fa65ec8c545b7e4bff8cf60116c1ddbe0bc5aa15b4d355facd5aa63f92c4fbb9aaa87286f55e893c4ef52e7894a21f4fb584210f72704c195ab72fe5580a560b5cef5696225195f0c56e9dc19c9663947fed612368a2d74fe79a52c7082ad722a5915acc4f95d2de42d71d44e7c3295497cd998ff9d6247a6bbaa6d95734501ad76ceab8486f3c4efb542d30aa1fd0ce75a9d5863b79a2d67139de37a115aa2ed35cedfba304b2432bd8efac56dd87577099d8aa6c98e355cfb1ce18bff17234d11231c7d4b9e3ef84ff31c913b9f941013ffc7d0cd6478663a43ca182590c53cd7f2588e683b1727100c6e63a2857aff767917b282a4b6e8c9f0e8ee252c88c7708f25ddbbb5bdf483035b784dcb6739a248e99dc2b46460b9bc6cb1823188092d5a34cfe58afaf1c774f845f7c8bc08f1bbcf558ae78247404b51f87923404c2f2c7172b5b9a0f05ce0fc76959b2fcca8124afacd9ae2a8592a0cab92664c70de3fd0798a075deaa8c3af4f73fee20a27c4702e57a79588a4c4223895a1583435d34593a8419634492ac11664278fa8d60d56c4232a47d4abba2771672c2c51e16a266b5d2ac13d7477d1ea9233bfffb2853e5eda8a78c924342c66b6d1c54cdba81350ea122359bcb46bb02b1e2ffc47cfb03de2dba974c00836d7116c17b56ff37b6b849452e7d9e00c7937d3307f26a407b82de284a955c010b6d020cce5083b6ab4622ddaf8b4e20a21925bea22a77dd314cf993937ef97e9e643d00275ee4e494bd7a0aedd4a474f74482e21a5a75a8df39ce6c14ce75ea9f37c85a882f2eb731d89a54ed85cde041142bca5e97d233959de9332c24f564bb5b3a03a10b481c36a86116fad212eba1277d0b881c8e3fc89a1139e18da60c9ac4bd864d61693dc35ace47698e46e6125b7c724770f2bb9832ed988bef94591249b78678bfa6ba2f3ee0ac798b5a2055defbcafeb9c499e5c7aa49d5c7a8ae492c5745d46c134c292c9b6bab8e3177be994f4475d4f3cea3a62827b8714bc1de66d7dc27a5b279db7093ba26d02b9ad022e277821c73747e89b760dae2fc35a27c975c0bc697b5ddc7082595ab5aa2724444f5f3c7a3a631ed52fa447eda08b77e1662b49e37dbe73cded529d22ee568a7eb8b8cc35e29c87a6da22c9dee0b13f5b6ca3552f7449ee27fd99a6052612005f0649abd900e62e20103fad9006da40e19af4ca60aedc45e714c2bf4b9bc42978a38abfc71360b99097cc52fe74720718947621b493888941496222b86e18f5ae58e63e386ce6de4d2759b46059f8fa60779d705e951bc2121bd47f3a3f09c2dbe3c27b609a0fd5685e57d12c90e63d31e0c3c202ef85491e1e56726f5dd214a5c391a44933dd61bb69a2d7b082153925e581cc1d6f49ccacd4b84db1735c26b4e0d7cb64899b3cace4497b842e6f1785dc1496fee023bd157c738166228bc91159ccc824598c4e9be059bd3e83cb15a19bc506cb20fb6039cd284d4ef3ae2e1b4b92d3ec8825d9bcb049b6af4e324fb2f91a5fcde5beca6746b51595b6847072f170b274598328ca0f6ed2acc1ed35e2f29689917457de1c9e61b375c255573a0ebc563a4e89f34c8d13468574f23099015ff5dfc7df1dc9dc1f7d722814c961b7349203a5555802e8a7f324debdc6b71e4818fce10573319beb485e2c92e141e232a7e4c66ea578b4921dec1cd5a07882bfb5c2fdadbf4e1bde6bc127d5a56c9374c6050fc0048f0b29782096c6770e9bc607e924f3dc862f900f5bc3da09537b7c58b5076339eaae9a1cf58f58b01c351b13be9b46f843cd82091f822585ddd3f191245e3d1413bc872e8df1789f24462ab29cff6b9c37788741a948fd59a2308ce706594e5aaf74fee205f670f0fc1ae70977124a103d87614e3121ac530cc7e26da226defe1630de4660c22769844fdf2698f09158dc4dd6c51daf35f07283574b56c8b2cd9b1b6689e94059620658bde8712f1731572be2358b1de214c7873ac73ae7e92c510e54897b5962abf01a91d70689d31c4cff293afddb02fde7020d8384988be55b5335f9562c60be354a279c67cfd31852f1e14b7183577cf2306c3374d8fa089eeb45cdb55e3c3f4f384045435db9bc910ac87c8d5e39a295bf9a3565858cb716f87cb95af177bc8ac2c38ecfca0853f1e2db1ef82b5eea475ff1e29b03648bf92a51688f55b00ab04c759626538d05c95447636961369616e66494160ab1fcb54893bfb66e112c7f1da37368d1b954dda40e8d27d762219b27ebf0ad09bebe781b7fd782e8fd2a48c36d1b4bc76162dd5eadf8ce844bae96e7d47c547629f8a0840b5fa4377d82db4b24b82835c712dd58cc658b352ebb29a0cb8ed3b9ace855ac6952979d2c2444e1b6f3746e2bba3e0bd388fcc6d4b3af98b35d2b72ec729963bbe5425fb110ae4694c915ce759eabc3fbc3c402365e199b2a78af12e4b97da5a2518d39798970f2a8edc41c7d67ccd1e76b1cfdcd808ebe8b4e780fe66ec1ed8fffdc9e023a6174f8352fc1351f8f61d95b83e5f7805876c584efa32b0f5b0613be1b565dd857535d08d406db1d537b3f8dda0501d5de03537b6158b527606a2fd2a87d5740b52762c2f7d7083fa65530e19374c27949cb770b0ad39f301913ccb7f049689cf01e2ad5aa2cf3f52b2c6515a0b7a05c5cd9e0fcae72ae9509115962bab69a3b1644cb2918db251ab6d303b29d8a21280dc9769a4e3077cfa5e9084e322b62ba4e30afad9731a4b6ce178006afadcfc0b05768b0bf1b10fb9e58325f163699cfc4242f0f2b791626794558c9b331c9956125cfc122f1404d248e6d132c128b30e12b35c24f09287c2e9630ab7479d320c63b17e3ad0eb7b11def052b751cab4ee43c594e8da154ce8880bd69bc87ac5276b10449e77b617aaed2e9e9aedfe4336479ada454f4b8f2108b1c6641422dc6d0afd6a07f3220fa7998f0351ae1596d83092fc17855eb78754f11afe5626265fcea28e76a108ef3316d0ed269c34fe3f116249c0518d21a0dd2370322dd1b33a25667049f2be5e2dbd9413647740f97cab5a76b45311e1ce33e9806753a0ddc4e2b5531989b61b5605f0c69bd0669fb76c190ee87e5c86bc3e6c80b31b5d7e932cd806a2fc2d45e1f56edfd759279ad6303436a1d7c603f78ade3002c9c43b070366614ce628cd4a161492dc122f8304d04af6f1f2c824b31e1876b84df1550f8524cf8111ae17f04145e86093f5223bca44330e1e598f0a334c23707145e81093f5a23fcd580c29761c28fd108ff34a0f0e598931f1bd6c957606a1fa7517bd6b6c1d4aec4d43e3eacda076a24e788099151ae24f0cf950bb692806fff95de0461bea1976e1541aaf0b13ec295ba78e125f4493a950214e55598379dacf1a6de01bd691526fc148df04d0185afc6849faa11be25a0f03598f0d334c2a7770c26bc1a8bccd34346e6419860be4f58425d70b8f0ce35228d658949ea7c5b85d5f2cbe67c6b9b0a31cda154f87ebcc3494d73e0fb746449efad913e5de578fb48e76a10ad6b30adcfd469cdc7e979af7cbcdeec3625dd66886e166a161b2c6bdd8303e9558bf9c0591a1ff831a083d561469f1dd207ea75f9ac981e5e499acf62b38e4b44f73fdf576799f094558dbc6a6753da79f239224fe6338de874c5f2efb5bae8e675eb731952b7e6dbf8b5e52a07aa5bafc37cf67c8dcf5605ccb7d663c22fd0083f23a0f00d98f00b35c21f0a28fc609d705eade11bee85aad61c82a9bd59a376f3ed82a9bd1153fbe2b06a1f8aa97d8946ed5901d53e0ccbdb2ed565e83c274ca753244b24ca7a5140f122662e7377837067d6953a57cbc59cbb15e27cae489abc6771a92800dced6e168bce8fe56234b2c6b9aae6e86d60ee32e12c511d7337ffca125941b99cb9b9525ca9154f558070f4054ea52c38611115b477f3702c8a2ed344d1a280517404164597872c7e8ec4045fa18b7b3e3da5c439a9f6c44b90f08ec232d62bb18cf52a9649a7c5d1985d57ebece2d1b4b0a1a7d4f5dffd03568b8ec1e2ff1a5dced22958fc1f8b09bf56237c7c40e1c76171721d1627d7671427c7ebc2e199de0de938719271be1330c13786147c22e64537854c762761826f0e29f8649d601ef7fc3383fe99c05c409099c0a7605e78abc60bcbb70fe685a762c26fd3083f26a0f0d330e1b76b845f1750f8e958fab9034b3f7766947ecec09ce62e5d9ec6c359ecfce31db85522b756656ca55333e477aa4553919787413cec4c4c8bbb755a746ed022d7f9cd4b5e3e36e5ce2fca5c87b3301deed1e9b0bdd421dff95f261a43fc9df5ceefcc35381bd3e05e9d06ad415cf01567bc661424b44d98fbdea771dfbacec1dcf71ccc7defc7dcf7818cdcf75c5d385caf073559d33601b3a6f330420f6908712382103a1f13feb046f8dc80c22fc0843fa28bdb80c22fc4e2f6512c6eb76414b71761c9e1b16459535e23674d9b312d1e4f9e358d6ac4ace9624c872792654d058d98355d8269f064aaac696f115eb0d5319762eefb94c67df7e812cc7d2fc3dcf769cc7d9fc9c87d2fc790f18fed84a98e5d81d1794e43e7c58074aec4e83c8fd17921233a576146bca8316260d760465c8da17f2924fa6b30ad5fd668bd31a0d6d762e85fc1d0bf9a11faeb30235ed318d1bb5b3023aec784bfae113e3ea0f01b30e16f68842f0928fc460cff9b18feb732c27f13e69cfce34f68b196dfc8c5dacd9816efe8b488176b798d58acdd82e9f0ae4e0755ac8d6ec462ed564c83f7741ab461f1626d8a18f05a13b0a7ea36cc81dfd738f0f0eec11cf876cc813fc01cf8c38c1cf80ecc888f34465c15d0883b31e11f6b8437ef114cf85d5874f36f2b852917eec6b4fe54a3755d40adefc1847fa611be39a0f07b31249feb52001f0e4dde4f9fd8931baecfdeed3735bb97fe3e2c82bed044d04d0123e87e4cf8971ae1af0614fe0096657c8565195f6794653c8819f18d8e50cf60463c8409ff5623fc8c80c21fd609e7ddc0dfa5936524e9067e442338476c63d53463f489fb7435ee18fdf73a5eda317afe61e9e463f4e175c5c6e81fc57ce9475d6a0be84b5b74c2f9502eff2476a8a1dcc730c93f8595fc38563efc9c8eff27c9349fd0f9bfd8696d5993f87f981df4927bfe2f697bfeafc2f38726f1fc70fbfce963e249cc797e0beb3c4f61cef3d790cef3b44e304fa67fd324d3ecdec192e93398d6fcebe7095522be8bde04d11caa10cb52740b9ab24475292be0dcb367313dfea1d383efc0134cfe7398fc7f868c9de7758279ecfcae899dcb02c6ce0b98d6ffc26287a79115b28aa8e2a3a26177984c6706be8819f96f8d9157f50966e44b9891ffd119c953a09a67e0d667bdd3348398f53216f21fba90799bdc9d5593d3f0e5899c862d948a9c04e1ee7b1c448357300dfeabd3a09b568359e2af3ab107815bebcf6cddd8ab982effd3e9d22b4d5d123f4d1044a7d730c7fb53e3784fee18ccf15ec70ce63b7c85c913dec004c7420a7e1313dc2ca4e0b730cedbc412397f1990f3db98f0e61ae1d7f50d26fc1d0c498b9048ded509e6b94fcb740427690cbda713ccdba1ad62483bb4752c9376e8fb18f6361aec47f40b86fd03cc88b69811ed3232e243cc88f61a23b60434e2234c78078df01ffb0713fe31e698dbc634d9295f575bcce04633e5a28ead32f26c36441478abe56fef2a842c7116df76bf5adc51596ead58a590c56a195c06ee762af105cdd5be9a810a877726b945ecb286ec3c4b64e6e501a7f67d82b1e8a863c1f788833b13bab5cc78011b5f92bd4e6858c5e0a4d915a208ca4a2921cf793ae8ca8d4f3187d94ee330e3033acc675892ea8425a9ed334a529f634674d618b124a0115f6031bd832ea6f9c2207d17e942d9b9ca57bef0d685bbe754b238cd4e7a7788988eea76abc6fdda9b02d608cf505da8de7b75c2afea34a968a9d0700de8807565af91add320fef52516355d7425e5806051f31516355d7551e3ae8356bddf2a7185ad717f8de9d04da703df91a188ad6ef8bc2afcba48fcb149b2c1b39c05edcbfe06d3a6bb4e1bde6901350812d2b758c4f6d044ecf081c122f63bcc8c9e21ab40dfeb04f32dcf7aa52338c906e43f601af7d681e7ed5a3e14992b863ee33b38cc916552e643a23f627af4d1e9d109e831c371fe89429732b6b2e17be9411df02f58f83beac2ef09c24fad077fa2267002fd0973d4be1a47dd63503047fd1933374b67eee0347220fe7095d80bac428eacadf18c8c9581bca13610885f3010fd3420fe0898627fc540f40f99627fc352ec809029f6af188e811a1cdbed140cc7df301c83747ed1c7e317533d5d8faa8057f11fdf53be5614ccd58168fe1d337a278dd1b3021afd0f4cf8608df0450185ff13139ead11be39a0f0df75c2f9f34362e13ff2f02f9d70fe21bea1e978f0405cf0bf3124c33448ba0f0e86e43f98070fc70a122c67e3eff22ae786409efa0716fe085df87c6e0fffa26eb56818367cbc3e4078ffc5c21b89d52527c9594c7ca0aa4aa6d722d1d0ad11d5ecf2c039f4ffb008cdd144e8c0ec6011fa276660aecec01db511aa266eb9786b65bb7aad78ad52645795527610b3590cd16c1416d50b1c3ddcd1c24ca23a868597a70b4f9bdc93486f8649cfd7496fd5c03927839dc3b6d185c51da640e330bd87067398e698f0d11ae1eb030a6f81512a0c595f6889091e1352702b0cc7585de91610476b9d703e20312e1dad4fc405b7c170ecacf346eeec3981a8b4c5e4efa293cf3f919138c56cb62828d4f684f13bc15a1eed304dc6eb34e11278d61dd40bda63a1ecaa0ba52d63da65eb4142eca00931477c798e6f9e19d5ae4b25ce19df5b26f88e4bbbc578ffbc178ce8e1d3cea1d83dc66b745d122c4b163efa15705d5cf1d33d62bcc1ef5569cfd947b6dadcfba5660951d3028f9a8e98334cd039036fb4a826ec32e7e2625127e246550674f5edb07027eac2ed8886bb5a76370409bb1316f6245dd8cd18ff4a7676a010b6c742988c65594302c9efac4b5059512728b78faf2683043525c69b915e0c2391e43415494ec942c792d30e3a6efd38b7c51172739f738b8a79a2becfab9c45a285e17691d766c0745a2ce8678da60bb203122ccf543ff48bddbad4c0a777cd88859cded51593bc6758c9dd30c933c34aeeae93cceb55b31aa1a1de03cb786687ac3af6c478cc09cba31726b928ace4de98e4b96125f7c124ef1556f28e98e4e2b092fb62ae312fa46b64612a978455b99f4e32af83cc0fd971da1f5379415895076094f70e497920a6f23e61551e8449de37ace49d30c9fb85953c1893bc30ace46ccce71685f4b92198cafb87557928e6730784f4b96198e0c521050fc7042f092978844e30ef082c4d47f0afb8e09158a9bdb4114aed1ccc35cac2ba46ae4e327fbe3c1d1e49e6cb8dc2405784049d87b9c6b290ae918f095e1e527001167b2bc2c6de682cf62a43c65e21167b07868cbd3118e49521218fc5045785143c0e8bbd5561636f672cf656878cbd5db0d85b1332f6c66390ab4342de15137c5048c1bb61b1571336f676d77515f4774e637c0ff9e85787e9160f37ee2ab1da74e2220727b60716177561e362824e32df4dba3e1d95cfc1054fc4fc726d48bf9c84095e1752f0642cedaf0f99f6a760b1b7216cec4dc5581c1c92c5344cf02121054fc7046f0c29780606f9d0b090f7c4543e2ca4ca3331c18787143c0b6b681d11b2a1351bd3f8c8901acfc1343e2aa4c64598c64787d4782ea6f1312135de0b137c6c48c1c5188ae342a29887697c7c488d4bb096e1098dd0329c8fe13831248e05188e9342e2d81bcbe24e0e9bc5ed83813ea51140ef8ba97d6a58b5f7c3d43ead11d45e88a97d7a58b5176192cf082b797f0cc8998d00e4004cedb3c2aabd18937c7658c94bb044be2964222fc5049f1352f0524cf0b92105976182cf0b29b81c137c7e48c11598e00b420a5e86f9db8561fd6d3996f75f1432ef5f81a9bc39acca95585fcac521fb520ec4a2ef9290d1b7126371695816553ac97ca2dd65e9a89c64a2dd2a4ce5cbc3aabc1a937c4558c96bb0f8bb3264fc55632a5f1556e5833095af0ea9720d56b05ed308056b2d26fcda46105e87c1be2e2cec7a2ce3b83e64c6b11653f986b02aafc324df1856f27a4cf24d61256fc024df1c56f2c158dfdf2d21fbfe0ec192e1ad2193e1468cc56d61591c8aa97c7b48950fc37a15ef08d9ab783826f8ce90828fc020df1516f29118e4bb43423e0acb41ef69841cf4688cc7bd61791c83f1b82f248f63b1947d7fc8947d1c56bf7d2064fdf6780cf28361219f80417e2824e41331160f876471924e305f12f8483a8207e2824fc6043f1a52f0293ac1fc744b2c712ebdfa093297fe542c813fd60809fc344cf8e38d20fc74ccb19f08ebd86760f5af2743d6bfced409e66b4a9e4a47301fdd45049f85097e3aa4e0b331c8cf8485bc096b113e1bb245780ea6f27361553e174b8ccf3752623c4f17005fa5fe423a4c7ec0059f8fc17e3124ec0b30d82f85857d2126f9e5b0922fd248cee12b0a225d5051c2dccf3078972e4c74c2e3b2e33b70055b50f18a2e3e633e366221c5ab31fd428a4cf5c216526cc66a09af85ac255cac13cced793d1dc1afe279de2598e037420abe142b0edf6c84e2f0324cebb7426a7d3926f8ed9082afc052f83b6153f89598e477c34abe4a9777f0fa5b6c7e8479074c990b657e102c9f782fed7ce27d914ff448b02e1d1db03ce16a2c217cd00809e11a2cf23f0c1bf9d7626a7fd4086a5f8709ffb811845f8f65c29fc4346b3b278bd362c759e6b1c96c66c3aebc7318df046a9d88e09532ea478a35ae7cf3a8a2861d72f815fd143fdd8440fe34742deef86b98bb955fb00d266ec0acfc5467e5710d56ce778a359ee8dc04ba4afc3d437e29a9466c1ae826d0190d4f4e69d808dbbbd5668de4314fdc2d7724d60bbbb85c2fbdb804fe7c303d3049258caf2d5d2eee7a99c2c4eae7ed6eea116c25f48d18e9cf307f8221ba36e53befb8b4d63899e262c7376a449cbbd696c8fdb6fcdac6dfc5af37963fdd8459f9b9cecadd7c5642e6ae9d53458cad1236fab5f4c610bc932cadc0b78258763366d9173acb764f2bfe26880d372b995a6f1b3ee6e27782d8760b66db973adb0a7db6cd16b1b3425ac6cfd6379925b762967ca5b3e49488f3b3f83b7c6b55b5996239d8b1bd3680974376b815bc2ca917d50c98ebf10a56e3e56db761d4bfd6519f9056da98c5dc6fff9990abdd8ed9f78dcebe59845ec5af1e2482e156b9d5e14a1174253b58a4437d4e9249acde8159fdadceea5d935a8d6b5a2c6c71b718766d54a531bf5a260925a68bcc63f34eccaeef7476ed1bb866374fdcf1d6ed7412dc6b73597c53d509a2a913a62698493cdf85f1f85ec7636624653675697e3766f30f583d25980f281fe65b29950941309e837a4410cbeec12cfb5167d9ce8865f345faac927513b7a9ad5a2d0b642a2e4f880d9a36cabd98457fd159349530f755b1eaee47b494b93b29369ea5f76196fea4b3743cc33edfa5cb29bc16c06f697226d3452cd788d610dfb77743235a753f66d5cfe9b409bce1c21ac27c110b35ceb33c1d2e4f52fa7965349e650f6096fda2b36c52ca9c33bd56019e87266bb3669a533e88d9f8abcec669a84ff21aef52e72165abbbc95cfcebc6c9f312bdccc62e091fc26cfd4d676b0571eba14e7ca39653725b070b84b75736e43c8dd31ece84d3c318a7bfea38cd6fb256567242e1393c8271f89b8ec3c48069c38414f12866e1df7516ce0868e1dec2a3572331d214f66ec1ecfd87cede6242cfaecda0aed118041ec308fcb3b1ea206ede3601d440e8ad7a1cb3ea77ac8722a85553c5138931e4cf73d2971bc4be2730fbfea5b36f971035c73a511af1bd0197c9761e6e5549c2b3416c7a12b3e9dfc1e2cc9ff7c08fa8a6f23ccad2e329ccbeff60f6056933bab64e93f588f85d3ee291bc76d85835c7a731fbfed0d9379025ef152c71085368f90ca6e57f93f7ed0589857919c502a5ef3d8b59fd3f9dd5f827d24b1a86ea611e11ff641d2f0febb575b1ccfaf79fc3f4fe53a7f7b8942dae19626c90f73e56890f964d61ea0b10415248e62dc8e7317b5833a406993c8df0d6f05c51abaad594abe98c25f0dac8b246b4f005ccc298ce427f1b593f363043f81eef072f957d5489f115e5f8c08b988dcd74364e4de995e95b99598e91b9a52f61966ea3b3747a5ab1e91fe971d3a1b2bb29e3f565ccdae63a6bf74919afb43de3d47de6af60345ae868ec47d83652b59acc7b47705a4188bc8a1169a9238297a2f39df7e1d70dbda5e9da06118936b9f6707b83e8fd1aa6772b9dde837c7e3d41f4d9f19a8c7faca34268c3e702344e69ff3aa6676b9d9e793e3d61acfa759e26754e370fc9d443dec02c68a3b3605c400fa90de4218d516f7c13b3a7adce9e9d517bd4c44ef743ad9c7a53b532dfc22c6aa7b3683e6a51628b3979299e4e7f56f03eafcccbbab7310eed751c8606e0a0e2547dc3a3b1caa377308d3be834de2965e94c978fbd8b69baad4ed33128db444ff76aee7e8835def74d915edec36ce9a8b3c53f8f11abeb4e31ac9efb3e66e5763a2b6706cee7dcf227f16ee23c17f539213c3e13a5c44bbb20367f80d9dc4967f3a226aedf412ee9fa837a2708950f312adbeba8f847af5588417c3d6e19e6078de3e31f6196754ea7d51ab4bc0bdf6ec9dcd28f314b7748a71ee97e3dd3f5cf3ad01be9fa78212b48619fae04e16f05b1e013cc822e3a0bf4332c799841fc10da875d6fac18fa14b3afabcebe4296492fac2a25f9dc8ada868f99cf69e45ac9679825ddb01abf3795bb4b0961e8de8584ae2ddcb3d4ac89c4fc23958c20f67c8ed9d35d67cfb40ced71bf88eb8ee507cbd11bd3d62f305b7b60f944e65e580deecfd0589d594df34bcc829ee9e4e98d115b781bba71e3ea2bccd25e3a4b7333b4946ad4e96b4cfbdee9d4a2b1b237558e1e75b9fb0d66651f9d95b352b615e25fa9f3eba8be1288c70ef685bb64319a593dfa5bccea1d3319d37163769ef3f052e6f68a94b1a65e2ff41d6661df74ea537ac299f5cba54e7fad9c7fb1185fcc3a85b9df40e723646bc43bbcbd95c3bb3745fee0e6db231b5a29233d2d9af8751efe2a2736789a2869688ff0c5bcc9256435733b86c5cf60f95d5fb7521f5bc6fc8b852731f5adf632e0ad230521775d015f043d92cd12b599ba8665cfa9acd0b5cc4682b619b42eb54dfb23cb9863e273e15096439a77c16c7596f6e3b1da5bc66ab39cc1dcc661197a536a2dfaf3d0b6d1fb50b704b23075e8747705a81a708c6f03b5580433577423e18b765286ecff7c893fe41142806ad3a614371f64013a713d84bbb913a7c5374e9c7f1f3a325bb56896cb6364002536bed07fb2e8aba876c0b9b52255e660006bad40c86b930ae1404a847cdf2f55319e2eaad15c40a96870f3698f456ca515c0be6d1d07368812d80eccfd52762e8b8f02d90c6e7abb38b89d28c175774e8a9c87f944c74a91fdc607d5e2759649722ac27201d106806c401ce0604a80db6b3c8f0b5cedbcc4671ed58bab76405bc2e2d0b2a993ab377f9b2afccf9dd4ad1a996eb2b5025cfb38b82194e0ba325ea1af4dbb5cb501de2650aa0ea584d70e24d522cfb08b0d984a7ac7310da3c4d406608aaf47b301d196ae7144c32911b514886aadcaa3c67788c319114595c26d34a9317877ae5fb1c8f4eb195fe5c4b3f9b9b22fcd06803f8204389212606b9000b99a7c5a820d805a6f1f0794439d43158911f6f87e4f76d4b0ee023e941b950fa9658536007ab3731cd0284a407c8f6555059dc2d60babeb1bea4d7cceb5db082a161e562efcadca09d00688fc4741cca384c8371686f0781f19df2ea1a2e1dbbbe596574e7700bd66f994283bc83c4df9db065962ce17ed471b50bd0af2b682a85a8fbc3104274da906914d35b35cd04b369abaf508c1c135c713447b928f09c55757db00ef2ed053564809af3d2851e34b68dd85fb3680fab1531cd418eaceebd922f9adf4ed0835d979bc46846403b025cde2c0c646db1be69d065a6e597e7615c8cfc6d1f7bdf2aac46411b4cd158deb5ac4a1ed4ced6d53c4905bbd083cbe255b7c8bbe5aa70e57e9846703b8de2de3e076a104b72d48a6b6f6f0f3791d0ad678fa013977ec7c8d1063773ba037489ebb52f79e153bd026b1f47737b501e096561c60ab163ee1fe2997994f7f09461d9fa8d391b96dda6a71b54e96bf9e893bd9ce23c669be1b9c78939d71ff4676ca7c2e3bed31cfecc0e355d919ce1ec94eabd6991db2c3223bc094a0ec40596076da7599ec4005787646f94976a0267676a00a6c765a935bb203cde8c80edcb2d5e98c0f4167270cf864276d0e666bbbf0b3b59db2d9c8785b7692e1ca6ca4073c3b452f5276466333d9194d1289cf33d5cf0fcde5f34c77ffff7c0a682e9f02ba0787c03fafc27fdc1ac604ea1a06f72b77c62fcff593eff935ca29e77d3af44ed0c1fba5225593d069d3c653d7d8361d0333a96fe4805905134dc2996725ce4500e7249370e65b89732dc039d9249c0556e23c07e09c42ddb7b958e6895eac6e59ca1f23c3d78a0a1fffe0b8c237350a6f5c8efa23547f311bcb0ae970b6a7c2f96f80739a4938475b89f3068073ba49380bacc4b909e09c6112ce3156e2fc14e0dcd3249c8556e27c14e09c6912ce5156e22c023867998433df4a9ceb01ced926e1ccb3126739c0398712671789b34cf619f997fbbbaabb5bb8e4d2816c4105725bd0fe29a29ef0a7fa24d3ed1fe6cfd78867ed6b58ce041e3a97126c5f063b8cd31f30b119ee4000772fea796fc93a41a0385ed2dbd782ef0b3280624a941d25cac2ada8fbe32ee087f3a28037367a783f50c17b04c02ba184d72d4519ee4dc4a46d73324ffc19c09c6f12cc3116c2fc1b80b9c024980516c2fc11c0dcdb2498a32d84f91700731f9360e65908f31b00735f9360120ea491c1fc01c0dccf249884ad7232985f01980b4d8269630be76b0073914930c75a08f33f00e6fe26c11c6721cc3f00cc0328610e9530ab9c87aac4514dfc849beb2e0eb4092f697f67672ae4cb4177c7624ae46d05f215622ea53bb773b980675f675b7be0a54b9ab2b3cdbbb52ea1f79d4885b20a785f2925cac10909be54089bcad4f724273affb977ae15ddc1f52cd98ebfa4b0c972d722007b29fdee50f58eb472d9bfce5f9cef1ced4bec5d41622f8b22b1a757bedbe87ffd00ca724a943b6af2cd743f58448af61c2ab41340d2aea0f6d20962bdcf1ab9ca81ef7acd07d556cb954f6aed87bba2c6be04df1c78e9b228b6bb1ce5fc5f25032f1595227ed5e651a09300c2e551201cb3d5217c1c205c41bf33b73b5aae8efecfd8db3a2abe0540ac34696900e90c38329cbb8142e6409370924ed922c3b90ce05c69124ed20985643837009c5526e1241d3f27c37905c0b9aa293b39bc33870987d53a51a1bc0ea05c1dcd92aadce8a7c5f4a4c2f72e28c5d79833b7cdc6fef5b1c013aba3400927b7ce729a87d3e472f965ce4beba3a85b92a13c0278e541f4e33eb0c77c315b29d04d144bec574a51539d6305e3df98b32f897700306ba2e819aa139b7ad4368cf0a8fd07d451d7194c5af890a1bd12a0ad8d627c32dd751684f927d92a8b5d01cc3a9360128e9c93c11c0f60d69b0493701e1c19cc420073ad493009676892c11c0160ae330926e1dc6132983b0398eb4d8269e332bfb100e606936012ce8323833918c03cd824988423906430fb00988798049370ee3019cce100e646936012b680c8606603988752c2cc6289fd47c126101296ef64130817803ea5c39a7202acbfdf9d301725eb751f067cf57093601296ef64300b00cc23a2e877e7bd9d6b1b36f18c680a0219be5e00df91d45fb956f812e7657261f1dd0f6c9ed3f13a007a54541fd2ddbaa6c59c08101e1d05c2c2ad0ee12480f018b3ab4384bd9a64d5a1134175e8d8a8266ec587d8e02811f9e01ad9a0c509c0478f3367d2b58d0ba4270394c7537fc817ee664e866a272a545d00aa13a2aaf0a4dabedfe6f9977b00a0279ab4c7db582b7b85fe0e709e6412ced156e2bc06e03cd9249ca4fb1d90e13c05e03cc5249c63acc4f93ec079aa49380badc4793fc0799a4938493f094286730ac079ba493849bf614186730dc07986493849bfb04286b314e03c93ba229fde57c98a856afcbb688415f9bda8808e0140cf8a625bc7ade993207500ded994f07ab174973d7b378e209c08f32b15d4c34137db2613a112f61591413d0c403dc744a8849309c9a04e0650cf35112a61094f06751700f53c13a1124e9421835a08a09e6f2254c2490864504701a817980895709a0c19d41100ea859450f359e2f89077c5d02416ff5ea96b88f7eba7de0f28c73f3c5b226ab4aaf79f30120aa922218bc523e12273d665dab859791ef0e7cdd1ac106e82af0e0ca4c2f72fe089179bbb7c90707627d948fc7b00ed25e66c6f4aba810a59323f1ac0bcd42498367e93e00c00f3329360daf84d82c300cccb4d8269e3949b2301cc2b4c8269e337090e0230af3409a68ddf24a80130af3209a68ddb99ee0d605e6d124c1bbf49b00f80798d49306dfc26c19900e6b526c1b471cfa4b300ccebcc9e2f6fe3f707fa81ae8feb29f1769078ddeda7aa442bde955d49b96712d9876a19f0cb1ba2de4d3bfd6e0f1bf74cda19f8e48d514d049f2d3ae056fa3a8c273bafd588106d9e08be23f0d59b28816e9b3491d7d2a16b4b85ae19407773532e85b17f8b8aee00e52d51f4b2f36fa06f3deb81f703f86e35e3f30deee05bb5f05877588dd433c9befc7b1e28706e3369ef62d2c62499a70e06386f3709679e9538f70538ef300967be9538ab01ce3b4dc249fa354b329ca7039c7751e21cc012576d4e61eb199f4853cfd444ef22e77577016cb100eb7e14a72a9a0a3cd916e6dd40d97fb7490b14c65ab9c1e43f00ce7b4cc239da4a9cd7019cf79a8493f403f564384f0538ef3309e7182b717e0870de6f12ce422b713e08703e60124ed2991f643867009c0f9a8433df4a9cb500e74326e1ccb312e75280f3e1a87ae2e7894a3aff7ced04c6bf6ab940aee7743f665b61754ffc7200f411eaa161384659eb2852c5f877d6d731beb74d89f3d724d162e2627933d4be71a2ce00e6a3e6cc80b77166d250d08adf12c59405b557a7bb5c7ba9e806510fd9bec5df4ae0978f45b15cbb093e375642056f1700ef71faafa4d73a2256b33291274e63a5e27532687da9a07502d09e30770506611588ac90b911a07dd29cc95c8556ce26de1e14334f9904d3c609b0db01984f9b04d3c609b09d00cc67a228b3c7445f6693e5910f833cf2594a78fcc4de527a7b80e9b9287c6c5cf43e469640df01f09ea7cfed5668f6839de73029636552a165623b293eb2685f37443b00f3057327af1216246479e1685090bc68ceded936d61647022f7dc98c196f2522ff5c2d923f17b78a16ed3954688f055efab24993604817a990e5a73300ce574cc2996725ce5500e7ab26e1ccb712e7d100e76b513414d3eb27cfb37271df4100e6eb26c1b47171df2100e61b26c1b4717b930301cc374d8269e3f6266b00ccb74c8269e3f626e500e6db26c1b4717b930a00f31d9360dad8c45c0a60be6b124c1b2711940198ef9904d3c6d19d2500e6fb26c1b47174a714c0fcc0a40625e99838dd977d01ce0f4dc2495a3d22c37900c0f991493849e70093e15c07707e6c124ed2e52864382f00383f89e29bbfa3d9d6f6cddfab591ce1a751ac914c3d90c1e7fe7a97ee4f7084d688f9c2a48bf80752413e19f8e9679490fb48c855ce431c70855c845ac4d4d2536f360097011082255b7cba3f00fb79143b7029b0ea63f45c4c7c143e59edd4c68afe4c80f78ba61c308eecbb042752a16c0d507e4989b29f4039c379a85800e3fb1bad95afc7bd75b1fc7ef044f1358295f2fe54e758e18825dcf48cac2ed00614645f45b351fee8e8e73091e5a4bf037c5f9bb360c5c65cb30748eadf50a2dc21054a6529e96ca5dd6354bb6b028cdfd2e798c930f26a549d47ec448756a5c829dd4a15a19fbe4a05f82200f83bd301137a3019e08b01e0ef4d074c38444206f81200f807d301130e9b9001be0c00fed174c0843d5864802f0780ff62f616d28403d2645b48ef05f0fe64eee243c2f9516493c93f6371b43f4751cbc5fa06e2b55cc24a18592db703f0d05fa837399f2b7bfdd5aaf619c23379b2b7afbdbf1df0bf5fa3f0bfdc061f2c179dd6eea67eb66fddfb18c0f81bf5583e073659045cc1dcdd15f8a3078bcd535c9cc5e22e5fbd44b8850ad90601e300ccbf3665274a641fc725eb2f3d1fe48b7f8b02656e925e7dbb87f8de005ef9f72846490bb6ba51d26a80f01f510ce0716f9c22aa3bf5428959ce2b6522bf2c62ebc4b828df3789d735ab99cd9b4eed06c0fed39c2589364e0bdf0ba0fc3d8a25dc05d10f7f902d3aac07f0fe65d2e67c63294b6fb2cdf97e0138ff6d12ced156e2bc02e0fc8f493849f78527c3790cc0f9874938c75889f32d80f3bf26e124ddee870ce73d00e7ff4cc249fac517329c1300ce3f4dc249fa8912329cab004eb68d413849577f90e15c0870c62871aa594bf96c6bfaf0d82c80af5914de98fee219c2262419ce3d40a7db3626e1245da84d867305c0d9dc249cf956e2dc0870b6300967819538af04385b52e26c2d045438c58e3beac32593e1229b20db121435ad28710d66893d95dec904ee029955e26fde495c2f444e1180b95925825a0453686752c1ce07b05b47512d1a25ea9011f766924d7bf91ee06b43892fd5386464cd47b2647f2dc825db52a25483677ce4671ae3a3397ccc67b9183eabb17a8ce760e08ded9ad21bbd633c36eef0350678637b4a945d189f2dc48b9372a6d60e61733608bf9d4e96ac5b039fec400932dcc4401b7799bd0ca0dd9612adda1d24bd21dd7c2b374e7b15c0ec68124c1b47c83f0630b73309a68d1ba7bd0c60763209a68d1ba7bd02606e6f124c1b374e7b01c0ec6c124c1b374e7b09c0dcc1249836ae0c7e06c0ec62124c1b374e7b16c0ec6a124c1b1b969f0098dd4c8269e3d6d15f0098dd296166b1b08bfa08db4464bd9bf34027480fea4e90d4bd9b8562222c6171d4820ae4b900644f4a90fd3420ddde4cded1b19aed298630aa93ceef20044c36bb631b9011f48aa2e733bd5cd5c6e6661e40d9dba4794763298b2832cf6c0e927e1f93708eb612e79dc03b773409678195382f0038fb9a84738c9538bf0538b34cc2596825ce1701ce7e26e124dd48820ce70280b3bf4938491b9f64380f053807988493f43350643857009c032971f213b53f877d83be1d01a6412679dd58ca210c32affb2bc0b9934938475b89f32a8073b049380bacc4792cc0996d12ce3156e27c1be01c6212ce422b71de07700e3509e7282b714e04388799849374720219ced500e7709370927e248f0ce71280730425cedeccfb0108cea19ef1c135ff671ffcab8308072ec8a66c6781eee191945877f2615dca12a7c1a63f6196103559cbe90c803a278a050663d9d6b63bd7532013c88d6232b7f2d65ae17f3c0b982ae155688788edfdc0ce3ec03b4799b376c3c6399ec301ca3c73971c10ce0821cb431f0019403e255ab5f5d9289fafda9c7b4e05f00acc9ead443881966cb6d21c90ec474751e1871b99ea92b8dd65fd9bc05b0ba3c84513bd359d7c94d053c972d14ae0a96328d10ef455a3aa185ce8aaff28e434f972645f82cba1c2bc3bc03c369ab5ed63b7a2e2aa25c037ce9c397536ce539e0ff2d29da328f95582e7b965b96f7df1d6d789d21578ea2e26ed5743da114d867308c039de249ca43da7643817029cbb9a8493b45f9f0c671dc0b99b4938498798c9709e0d70ee6ed230c958ca95ef64c324ff0325fd1e26e11c6d25cedb00ce0926e124dd898e0ce77900e74493708eb112e7e700e7249370165a89f3698073b2493849f79825c3590c704e310927e99e36643837009c534dc249ba652f19ce0a80735a349d735bd358d27700dff42806e278c0cb84272ad9abe523f6c18b0178339a7e5dbb2a64ec9bb43012341ef73405a48db33fba0390334d014938b44606723f007296292009fb85c840960090b34d0149381b890c642d0039c71490841b539081ac01208b4c014958f52603792a0039d7149084b3e1c8401e0540ee650a48c2f1713290970290c5a68024dc5d8e0ce46900e43c736611dbb8b9e90080b2c49c8dfa465bb9bb765b0073be49306ddc5dbb1d80b9c02498366e77d60cc0dcdb249836aebc680360ee63124c1b0b200660ee6b124c1b77d78e0198fb9904d3c6ddb5ffcbe230179a04d3c6ddb5ff0430179904d3c6ddb5db8364bebf49306d9cb5de11c03c8012e65096b84ca54c7cff0aae4d0bba868d3033205bc3761c40be987a5837fe1dcb19d2872b9d97f9e7c6f86b64f0c896556d0b72d22594f0fa30ffba5ffd52aa125623e606d7b26542d82adad1c973a8c0ae05604b29c10e48c808dcd595f145ff5c209fb5913cbfb5b152351b24fda5949079e63549145bfc353e839dcf612f6745f2bbc15c54b9508a0ce2402a883b004f2d8b72971ad72bf9ca4a9e9b4ed6762bdbfbfd8253806f969bb314d0c6eafe50e0a115512fab4ebf9822444b564c1d0cbc745994899fe7970b447db59ef9f7a5896c19f58954583701accba3986a383afa799a64cbab3682e4be228a06697a0372a3ac6cdd17034fac3409a68dadfbf900e68126c1b4717c733a80b9d22498368e6fee0960569904d3c6f1cda900e62a9360da38be390dc05c6d124c1bc7372702986b4c8269e3f8e62400b3da24983676c58d07300f3209a68d1d1ebb02983526edd7415a04913528c7019cb526e1ccb312e76280b3ce249cf956e25c0f70d69b84b3c04a9c17029c6ba35824cde7bdaf053d99916c614a866f4f16c7b78e121f1f769aeb9cb8df29e0a2563b8faf10c36bbcc7fd6031aa5e29ceecc3d802605c4f89b12f8b6faceb0ea52d76d4ad75d429133cf8f8e404c67732e4c317a58e0077e452ad4fafb310ee2200774334fb208c89be7f9dac76d902e4900747319c96d95eef36ee527c2df0cc43a873cf6465b9b29474f88c6f164c82f14ce0a11b2931666930069b3147d8bf4936636e2ec07ba8b91900e1701b5906f001c8000ea344db4fa09d2efcb398f1b1f20a59da970b516ac2d74a1101dc8fcb9cbf5df1539d638523b6dcc2b2bf2d007c7814392c36ad6692f058e20f3b4da5ca613b832ce08828baeb60fd5455f6e3d57fbbeba33d814f1e19c5245a08337516602fd8d900ec519460d5e7c7f2d9d6f6f9b1cb01c2a3cd998668e38485b900e5319428fb074039cf09930ba96345ce5faac3a496b6589a4e552ced008aa5632911f760dee988d5a2b76945529fb57158ee5000f4b8283a97d3dd81731c254eb21d385b019cc79b8473ac95387f0239ea0926e1245d634c86f35280f3449370165889f37080f32493708eb112e76b00e7c926e12cb412e7dd00e72926e1249dbf4486737780f3549370e65b89b30ae03ccd249c7956e2dc17e03c3d8a8e905cf1db3df2e1e479cced6db2b72fa912203ca329b7f98b2caf24db31f16ad00a3ad39c1d136d5cb7910f509e1555c276fb95b8a0f5325147d0c3f92b15c22740c23e3b8a11218eb0a2611f1075dbf68ee2e700c64dd10e0a6fed1f55ee0dd09e63ee783b215ab2f1f60b01da73a3c83ff3b6ba11a22100e179d1cca66b8209b364936906007ce74783afc05729b219df6f00df05e6ec3e9767e508e5cd00e68526c1b4b16a7e0b80799149306d5c527d0980b9d92498362ea9be09c0bcd82498362ea9de0c605e62124c1b97545f0c605e6a124c1be76e9c0d605e66124c1b97545f04605e6e124c1b3795ba15c0bcc22498366e2a752f8079a5d98b5d6cdc1e3a1bf4b05f1545f7f0a8067f2d17bd9aee8c4cdbd7053f09bcf46a930674c752e6a06403badb00afbcc6249ca4df3020c37907f0ce6b4dc2596025cef301ceeb4cc239c64a9c5f029cd79b84b3d04a9ccf039c3798849374c92a19ce7900e78d26e1ccb712e72100e74d26e1246d6a92e15c0670de4c8953eda49d17fde01ad9e8f83400ef962856acf1a9319319dfc2a7da694056c83690bb4ead42082c1502e0e63eb5cce669853b01c4b79ab47b17e97c0e3a9ca05d749b493849bb90c970ee0d70de6e124ed259ed643857039c7798849374811519cee301ce3b4daa2a8da51c1626ab2afd13144577998493f4c3cc6438af0738ef360927e9be9c64384f0338ef3109e7182b717e0470de6b12ce422b713e0470de67124ed21db7c970ce0138ef370927e916d16438d7019c0f98849374fe1c19ce3280f3414a9c39ccbbcb8c3b2c9cfc13a241d66cd8b862a31e54fa1fa2843fc407bf5a602f7778f09544cacef8f22d6c5ec90411397c2a0429f0f76344c0af02c01fa604de85259face32dd6c840922d7b1d04b28d474c0169e3fae11e00e4a3a680249c6e4b06f26400728b29200927819381cc05201f330524e13a0f3290e702908f5382ccf595eef56835095f613cc9796295a3cf1a71c64d8da8ac1f4885ff2450d63f11c5c4dc743ba809879ec9baa70702984f9a049370963319cc4100e65326c1b471e0a40b80f9b4493009abf56430bb0198cf980493b02245b7153a80f9ac493009abf764307b0198cf990493b0664a06b33780f9bc49306dfcc85e1f00f305936012eeda4006734700f345936012eeda4006b33f80f912254cfc5b1c539ddf95b277bfc411c005dbff2d8ec52c0ef6654ab0bd05d859ce036562b6285c88d864df33225b9ed80a607dc59cbd146ddc63641848faaf9abbcd1a61794f3668773bf0d2d7cc5ea34cd86a22cb046601cf7d9d126f675068ad1585129f91ef7e1336a215ca2752413c10f8e81b514c9280253f565c9197f7643ed91fe07c338adc3431c96fad53207241727f2b8a321f1b6df296f9366e389403bcf4ed28aafb9994f984fdf5643e7a0e00fb8ea9606dfc42ece900ecbba682b5f1dbdbd301d8f74c054b583b25033b1a807ddf54b084234f64604701b01f980ad6c60a565f00f64353c112f6ae92813d0e80fdc854b084630064608f02603f3615ac8d3d570700b09f980a96b0b7950cecfe00eca79460d5bef7a359137c36800cdff100df67e6f401d8b81b690940f9b949abf249f783221be89b027aa7be300927e90646643857029c5f9a8493747b2d329c47009c5f99849374a747329cd7009c5f37e5dc137f57b48d9f123801c0fcc6249836f6ec6f0630bf3509a68d9f123812c0fcce2498367e4ae01801b3550b9ff0a909c22731b5ccbb8cc577bb1bc9a631bedac8dd0fafcc399f251a8c756c898363a1f32f580ceceffcd35d8f892d0da7b0f5ac5a5ce5f2ca85ec55ce5dae592dcbcd761ef99e3b445be910d9a2c130c1615ee73c53cc2a44e81bd83ce6eee657e4fc5613dcea05926cb1f3f95ce75a3de353337808ab1d4d56b01a61b177b7bfec586bc1a9422e7b775765654b5dd5473567c8a64aa56373a9d0a4c679a6b908c72d76b3631dc0999ac3304334b46b8556fce96942531e6a37f1747c68bed6b191c7cd1ab68ea9897a93185c9e9f2d664b78afe997ecf34de65b0aabaae4951ae120b15827e9139cc76cc1b2d4b95f2a8e250d5ae7f0a5eab142e797db6530b2a1b360a45ca3b64a9ea9eba965728f482eed071eed317d3e50d568be9cca2237f9f1f79789397d1542ea8c9496a6b60f4f17ed93c44ace501e175bb3fd3fc2786f96338cdb3baa117c2fb5467fe12137232a79da8992a7562ac793a94afcc6fbf65ce6ee985a2172e90da17cbbadc8e7a0bc4a116ece7033fdbaf16cffc9ebd72332f5ebe01afd4ce9d7ae34b74fd9277b5a1ad6e9e3c16f73fca96a599e2a5f7053f90ac6774e494da28fa83de0d27899bb5cd85a29a4ae62ea879797eebf6e2229cf77de757316fe05e81a59aad65534632dfe1f0113e73c869a0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/b5d5905683ccd034397215e290327976.asset.meta b/Assets/SerializedUdonPrograms/b5d5905683ccd034397215e290327976.asset.meta new file mode 100644 index 0000000..e2bfb4b --- /dev/null +++ b/Assets/SerializedUdonPrograms/b5d5905683ccd034397215e290327976.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 721e7857e1b354244829954ecc756ef1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/b633e7de20b2d9e40852cb41f5628675.asset b/Assets/SerializedUdonPrograms/b633e7de20b2d9e40852cb41f5628675.asset new file mode 100644 index 0000000..eab284f --- /dev/null +++ b/Assets/SerializedUdonPrograms/b633e7de20b2d9e40852cb41f5628675.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: b633e7de20b2d9e40852cb41f5628675 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cc5f5f8e76ccbbdf76eb99f0b922cc972c118cb921b2e32966c8c0bb6ac620bcbb650313698de4cefbd7748a1248440421248200142129290c40984908424843442e890f0df999dd1bedb9b77777bab779af1ff277facd5b6b76fbef3a6bf99e990cb9c9fc874e7d73ab68695b01cb69655b33d6cb7f3578973dce5fc73cfd4f5d5acd1396e777e573af7a6b3ec246ff29fc991a1ceef65ce59136b76de6c6155ceb14edc2f6735cedfcb9c776b9c337eb5d6f95fe33c15e9e4bcb49695b232b68a0d890c4a22629d78a9495e8bf07045ba3abf17b2fdcedd1aa114ff48aeb835c4f955eedc6912f776394aabe736b2cd2258bb9c7b55ce3b8dacde91b94d48ecfa92832a22c2240e03e571903c0e70fe77937f77947f77957fc3e7b3e471708acf0f01ef75037f73427724787fa83cbee3fcefecfcb9139cf377ff2ecf87b9f23aec48206b843c8e94c75152667d0afa7791c7d149c29b48c618202b15665de571ac3c664b7d77a5f9fdf12ea3c82d401e3ffe1be833167cbb1bb8cf8fe342845dc5e3bbbe787cd78dc70e37c8f87b535e9f208f93e471a294ed3c33a0afbc36591e8727d12beabec76633cf669d6f766c90e753e471aa3c4e93c7f7a4aebbc179585d549c4e97c7ffc86fecd15c57cff3fb4ad723e431c7175fb9f2b993e4795e8afaa4627f4aa7f7e5371ac1b9c3b1d3d604b254bc7fe08bf70fe4bb57b81c3b3de10b0fb43f9ddc19525e531ae1f8d0178e0f5d5db2a2bee792e9a0e4e7cbe347526e3338e772af0918b64ef2bdc7e479014b9eb70d4ce15e912ba7ab623dcbfd4ee781eef5cef358ac2dcf4ca2a78adb8f7d71fbb1945b2fe5aaf0cf76cf238af3682087bfdfe293fb894fee2752aeca23948d27d3738e3caaf01d2d8ff3596b3a1ea7641e298f47c9e3a72c360ff8541ee77aef0efa2c20b74471b4c017d7c3e5f1b32432d5fbc5f2d82dc5e7d5330b43e85c228fdd53fc6677792c0df1cd1eae2d747dc7670bb392c85ce4f2edda0c7470e4743b20cf17cbe312795c2a8f9ffbece0f314ec20992ecba42e0cc481a34b7755a61c238fcb7dbaacf0e9b4b70d75faaf94793238e7c7ffc9ebfbc039d775b5fb9deecfcaeb2be571954fe732429da50ebd7a02db48e5bd44f675ac1bbe1e79aeec1e15f2fa1a9f6e259ede5d4bc1bb4a8f54d283941d89c4328ec8b2a08762bbd6f7dc7e701e711f51df137f3bef7224304f15d7f9bba78073feab3c455d8f63f136cbe57404dfee28bf2df3ff9e57c867d7b3f8b4a77b971f3b806b1da4bcd7e47bc7b3f8724c3dc7c3762a38e7f7d7a518b60d1afd9ceff65a90e0dd8d2c36ff29f6eca1cbcbf2da26a94f271693b6c439bf3fc67ba7b52db2d93defa3743941be03da4f11d97eeaadcad32df258c5f4e56c25e0a0d2e336efdb2395fd6e4df0ad6af98c3aaa701febc9e93154eaaef2b11a169b66fccff26bb5f278a23caa364ebdf7ec44c5a64e1e65bd20d299c5e6cd3bc0757eec22ef1f00e7fcb9ed9eec4185f29a92a174d5c5a7aaababb0ebf2804476d6e03e3b41d5334f72d9f6b945727bd6a7c3092cb1fdf697efab3a4cbf583b6bd533999c443a37bbbab5d6a5555d4de5e3f381ec0192b3aae7c2fa5513b8c7cf553dab91c5960b897451e1ea95243c03c173fcb82f44f813dd9376c654bed38dc5b42fc4b9133ffd0e269075c0e534e479797e9afb4eff1be4f9e9eefdbe8ae319204cfc1baaeec59f51e9fe4c790f96434aa79ee09a2a0b00cf88aaa39de58b9fd37cf7cf063274f7cf013ae8ee9f2bafcbf0f5576decf37c6169f4e9da93c5a469767e7c58233d7ddf56cc5289cb0be4bbbd7d71d9db8d97011509641dd4c7e54095675ee88bcb8b7c71d947139717cb7b7d41bc4d94d7fa69e2b73fe0d047debb04894b75ff52205777ff32a083eefee5b17139f06979fd0a242ea1fe302eaf8c0fab78067efbcc14e2f26a79bc4a1e75754cd5369d2ce59e9582dc6be5717b02b9437d72cf4e41eef5f2785d02b93730bdbee97c4fd9ba2c87220358acadf373c76e072f4820eb46a6b5f521abe5f94d2cd6d66f66b1b63e90c5dbbaec9f14fde5caaee7ca6bb0bf59e93904d8890adbade01968abeafe6d40aeeefeed4007ddfd3b588cad0ff992bc7e27d3db3ad41fdafa5df16115cfc06f9f93425cdeede3acf8aabe1578eec4cf50a59faa1b9cc612978df7b8f227cbba2cbb57ca1b26e59f0bcef971b8efbbc3e577cf74e50c3b53cae929afcbfedf61ebe5f5fbe4f794bddf2f9f7bdaf7dc03ee7954f5977cc1c7ff8b3e5b19e9d95b6b581e04f760d8d4f880aa93c8388e803100f18cba06e34ad5dd9271fdb23c3ee4e33742ca3b0f9cf3e71ef1f48f2a9b7b581e4ff6eef5557d872a7e6179ffa8de5684aeb08d1fb48ea4c2fc9524610e92278d61b179d218d70e86bf9240d6e3f2998f123ca3da8e4fcae3d7a5fc6c16db56c896f7bf21cfc7faee8f95f7aff3d80fba04e8a164f377ce4f21fc4fc9e3b7e4f19bf23be3584c1b479c636544baf5d874ef554a9dc6b3d8343fde8d8791aa8c55b6b835897d7c5b1ebf238fdba4bc093e066a8c2851df51b26f25085764128b6dafabb1a8a7e5b9aa27a9ba62d4f7bcca839e91e7937dcf4ff53dafc69fbe2bcfa7c43ecfbe07e4f0f367bdb045645d8a3d07ae4d91d7beeff119a3fa81a6c57e9bfd80c5b6ef541b6eba7cee20780f3250f72f94e747f8c29423cf2f02e7fc98eb93abc6b59ef1dd5772f37cfaaafac60fe5f1452f8cd3068277004ff642accc84362ddbe01135ce743138776c7a4ca2fabf7a578e0b450aa48c4bc0399771898c933b705991421fbf7c709d1f67cafb9782732efbbd04fa3d279f2df285adc87d373b2f8577559fdb6c5fd8664b193bdcb0651f4820eb2579fc912f0e95cd7279206db7c6eb5c109ffc7c8ed4e13270eee83056c5e58f99deb667f9debf3cf6fd71d9f2f99fc8e3cb3edd8e64b1fd4e3f93c79fe336c954b9a5749fe73dd3aadf4f7dfaa9712ba5f751f2bb57003dd4757e9ccf62cba8f9f2fd5fc8f3a37df7d578986e5c3b511a516db2052c36df5f20f9c9fedf716726902565b05fca778ba5ac2bc1393f2e94d7555b6e97effad509be21c31f29f1e959e2ea395e8e7f8e579c7f258f47b1c465c7af7df24ba5fc6bc039bfafebc3fc8d3cfe3656464c1a50fd9b8b347624ed87bd06ee291f8143e03d7efe2a084fb23eb644f1fd3ad3b6f526a83e6a956f9c9484dbef98b66e3fe1a98072de60b175ff3fb0d8baffefe551b5c1fe28b92cf67190f5e0c812ef7b91c5e09aae5e9f4c37dd3519f791a52cd60e97bae19f28fb7f27aafe5f65873b937c4b3e1759069e53df3a065cfb93bcb61c84f318708d1f5748ddae05e78e6e93b37d7257cae7ae03dfe6c755f2faf5e09cbf37569e97b1581f2625ef58a05399fbcd49aa7cf8b3ef1bab99977f39bc26bde1e3b01ac85a09ae2919b0fd5d0f8efcba6c874e3c14fbcda471a0bbf61779bc37f8bb91352cb61e25c71d23e53edb2997f173c8d59b9b7e8c9dde9ff8db4a2e7b4b9e57b0d83aaaaae7fc15c8e3f76f0c189eb5bef0ac8dfdae909fac6ef6883cbe2d651c27dfb9099cf3231ceffb9bbcb61ed8c43a793c5ebeaffaa4948d6e00cf6e00cff2e34616db1edde8f29f7ac8275bbdb7493e7f0b38e7df927e8b91cdf2beeaaf5269148cd58867d4357edc22dfb90d9c3b3a4c79cdb581a98f20dfda2adfbb1d9cc36f56cafb7780731eb6ead8e723dbe473778273c518cab9cb27c7a757a40a84b14aeaf270127b955c5bfb0736c86fed71c33e253b364cc9e469afbd288fff90dfa8f67153fdf82fa4215b8e61476a586cddbbc66534ed69f99ccafb5f4df20d3526fe4f79fc9794572be5df0dcef9713b8bb1f988eac356b6bf83c5e4cfe2dcd16bfa153e39753e3975be783951debfc7f79e1adf7d55debfd78db7e9f7f8c2932cdc31d7b222622c7d29ab6195ac81e58a817fdefa4dd5255cbd99dc195cf818f05ffc67b2f86c33dbefbc5aa3f3c85e2bfcbd9b5901cbd77a640f136354eaeb25e277a5f3449d107a5f24ee134fc67d822b57effcab01eee44dcef525c21b9d3b94d7397772d80ae7c8dfdaca66b08dcebf5829eb9ccfd6b316e7acc2f9dd20e46d75d48e7f325990b8ebb9ff9d358e4cd7337e977345016d70ceeb8586e5e2f75ea1698dd07e9973ad59f8e9ef66dbd942e7b84f7c2d3eec8dcedfba6f5648647a1df50ef2d875d70d5f4553a9131aae7daeb0c5ff8b91f688118ebe334f1ffca753aef0a4b9282e26fe8fa19bc9f0ce856552c60c812c12732d9fe5f25351190c1bc6f810eaeddbe55dc40a1386454f8647f70811022f862f7dfff123e656767a3a2b3668052c570c298c4c12b44460b9bca818950b1284acac4e795c513ffe880ebf70492acf207ef7b93af15cf008e82c0abfd808105dc3154eaeb61a149e6b85f2f542357f60563bd72b1df13c083c37dce3fcdbc98a9d27e01d9e32e3e2348f2bd045444b7ca19b2c6858c474d0458ce893ab689774814de34a1c355d5b43e1454daea8490d4d60c0d8b74415ab83ac67a924f6d4d7ca76575cf9f69b59fa78e92ee2259daf6131d3511733dd339d6492971189e2a5476bb8bc78e13f7a863d11db4ea60346b0938e608f4cdbf64291c6eb453d6a771a0cb983da347fb6a307d81b31c2e42a6008b33408f338c23e1aad5856379f565c214472675de4f46c9f02393de3e6a305437c08b250e3ee97b03c0d6ada5d74f484cbe756527aaa9d58ee3408963bf72a9de76b44a5935f874558b1f882d7b68c7d233159eec777849fac96ea0041750268f586d50c23de55433c8fdbeb408d19883cce9f18fae189a11b96cc06854d66dd31c983c34aee81491e1256724f4cf2d0b0927be9920d7f5e74cfd1271baf7b45fdb5d07977871398bda2cddce2bcafeb8e499c5c86a59c5c868be492cd749d44c134c292496f5ddcf18b23744afaa36e381e757d30c123430aee8b59dba8b0d6d64f27999be0e854541e800bee8fa93c46a3722488ca03b05c2ebb0d72b9813ae13c831acbe2ab899f3b3f71c27be2c207619a8fd3685e5dd92190e68331e0e3c3dac8104cf284b09287eaf23a918aceca705ea7ef7e5e225622a961654e35e744e6f61baaefee117d865c23d5ffb8c639d60a2df875ae45f26eebc4b9e644a669338acc6091367f6caf507007bc0e22f79e2c726fee4cb6d6b9ee76972f12315027be94a3d5867f017b5eb1582916596911b19d85b470a3e2eb66b1c14aa161584e334593d31cd2656309729ae158929d1a36c98ed049162d2d8dade6715be5234fdd45e116f79d28fe9d91baac419456a7b46bd6e0b685b8bc5a3122e4ca5bc5f83a41270b53dde918f05e693815ce338dce376aa49187c90cb827e6287fc1c9dc1f7d72c811c9617e0ac9813254580218a5b324de68e42ea6719d98bca858e3b4914ad816910c4f129739253776ebc4a375ec14e7a80677e2ecad0b6e6fa375daf08a10777a0a53111a83099e1152703696c6f3c3a6f1b13ac93cb7e10eb2616b58e330b50bc3aa3d1ecb51676a72d4cf22c172d40998f0228df0a73a04133e51279c1bebac546c2481554fc204cfd6a531ae4689e87fcb76feef71dee0bd3d9522f5678bc2d0cb0db29db45ee7fcc50bece9e0f93dce13ee606a103d2763463127ac5144b1789bab89b7f702c6db144cf8911ae14b3b06133e158bbb79bab8e3b9092f3778b564872cdb6273c36c31ac9d2d3c195a443f52b588b92611afd9ec5427ab3bcd39363b4f678b72a05edccb16cbe6358abc36489c4ec3f43f4aa77f77a0ff6aa061902f4ec7f2adf99a7c2b1230df3a42279c577c8e6648c567014ba7e29383612bd661e385e822a7fac26bae2de2f972610035ad75e5ea362a2073357ae58a56fe6ed69e1532de5ae07e1f4de26faf8ac2bfed8d3586a9787157767fc54bfde82b5edc813d2aa68464427bac82958765aaa59a4c355017cc0c2c2d2cc2d2c2e2b4d242becee644ff4f43bbda1c9ea2d608d93ce585aff07317f78efed6bfe8a02a4cc1b2da4ac76962599626b12caa4bae8967a67c38601b58ffd4852f92843e4d2c156922939a63e9a2002bb597694aedc7b28295da853a93151d7f8ded6ab2a5424226ccf6189dd98adec9a21422bf2df51c23dc039b44a65a2d335537eb1e23d61e6914c5668d739d67bcf0fe34b1e60aaf2f2d16bc7709f23c7c95a2dd8b19f97261e4990e2766e833b1026085a6000854ab2ec292d04a4d12fa2c60129a85a9bd2aacdab331b5cb346a1fe81c4ced3998f0d51ae12bba04133e57279c67cc7c7e4e9816e2919860eee21057dde4ad60d54ea8f2b514b789b6826aff558b2bfb9ddff5ceb52a21225bb87aaa31ee205acec3d8966bd8f60dc8f6280c414548b6f37582b979ae4d457082f1c0a37582fb3077453d6dfd8b4fc1095eff5a80615fafc17e4740ecc558323f3e6c325f8849de1056720926796358c9a598e44d61252fd249e691b8591389dccd2348242ec6849fa0115e1150f8122c616ed1e54d13196f237b9554b7f9e4f56b54b25a21a5d1f97baf2c73ab63fa47789f479d6c340749e74b313db7eaf4746796704f1e5ea7a8147d68fc8b656c67a0af2ec3d0576ad05f1210fd3198f06d1ae16f0514be1ce355a5e3353449bc560b0710efea0ce76a108e2b306daa75daf0532fde827c672586b44683f496eec190aec20251ab0b04efb671f1cd7590ad121d7e957256cc5e518c07c7588669b05da7815b0b551583d569560b566348776890be1210e9b1588e5c1736475e83a97da22ed3ec114ced724ced9d61d5aed049e6b58e7a86d43af864c5e0b58eb5d8777663dfd993d677d6e9bec349358425751c16c12769227841cf6011bc1e13dea8117e20a0f0e331e14d1ae1cf0614be0113deac113eb25730e11b31e12d1ae1d501856fc284efd508bf21a0f0cd98f09335c21f0828fc04ccc8f78535f22d98dafb356a0fec1d4cedad98daa78455bb52233957b8b86572ce8adffb29985b3f5fd038356f5abe9c866ebe4ab2ef635d4adb74f1c24be8d3742a0528caab306b3a5d634d6f064c04d598f03334c2370534d51a4cf8991ae107030aafc5849fa511deb74f30e1dbb1c83c3b6464eec004f3d57ae2ea82d38575ee11692c5b6ca4c6277cee96fbb6f149f73562e0ba52d8bed7e1a406aef90ce26c69bd8dd2a6eb1d6bcf71ae06d1ba0ed3fa5c9dd67ce49577e27af566b729e93643747e85d96cb2ac754f0ea4d789980d9ca7b181c7021ad84e2cd0e787b4817a8de05ce1f05b479acf627ea415a2f39ecff8af1596b22bb0d769e23cf98294f3e483224fe6fe0474ba62f9f72e5d74f3baf5850ca95bf3d9fbddc5cae941ead6bb75dfe1367bb1c6660b03e65b7b30e1976884af0f28bc01137ea946f8b901859fa413ceab357c89c450d59a462c1d5f1e321d376182afd0e58a1cd4c6d6ae19b7176173c07cb8198b812b353130bb6fb01868c1845fa511de1050f85e2c755d8da52ebe2461f096ebc9baef70e3b83695c84e30b0b00f137c5d48c1fb312bba3ea4799e8209be21a4e053758279dcf315d6fcce645c401067b2039815dea4b1c21bfa05b3c2d3b04ce6e6b099cce998dab768d47e22a0da6760c26fd5087f2da0f033b194791b96326f4f2b659e8599e31d4c935b72679e2dce3fde98e6c3a4dbc51ec835c2e1729fb8d3206abdbc2e19c476cfc6b4b853a7c580562df29cdfbb98dbcdee3a3aa4afc339980e77e974e82f752870fe57897a1d7f679ff33b7d0dcec534b85ba7415710177c3a04af7905f9da7998f9dea331df07fa0733dff331f3bd1733dffbd232df0bb04cef7e4da6d73160a6771023f4808650f58060842ec4843fa8117e6e40e11761c2bfa08bdb80c22fc6e2f68b58dc7e29adb8bd044b0e5f4e9435e5b771d67429a6c54389b3a6196d98355d86e9f070a2aca9b00db3a6cb310d1e4996351d27be17cc75fb0acc7c1fd5986ff3c060e67b2566be5fc1ccf7ab6999ef551832bea34a988aded5189daf69e8f039dc41e85c83d1791ca3f3f5b4e85c8b05e2094d20d6070cc47518fa2743a2bf1ed3fa1b1aad1f09a8f50d18fa6f62e89f4a0bfd8d5820bea509c4eac1c102711326fcdb1ae10d0185df8c09ff8e46f8350185df82e17f1ac3ff4c5af86fc58c93ef2e82166b056d5cacdd8669f13d9d165eb196df86c5daed980ecfea7450c5dacc362cd6eec034784ea74137e6156b8b44dffd9e80fe1f776206fc7d8d016f1d12cc80efc20cf80798013f9f9601df8d05e2054d200e050cc43d98f01735c2670f0d26fc5e9d701e5d7cf39f30e5c27d98d62f69b47e20a0d6f7eb84f3ee11bedd4da8ee910730b57fac51fbe5806a3f88c1fe892e6df15edbc41e5e15cea30dc2076bbbc8771a8503a43b91a75a8c9dad66ee727cee24d04ae76ab5981eba439cab7cb3926d93235b33c4c8969a40ba9fb92b33658b91657785e56c31aa512da715ef14579ac4533540b27eecac4e8e01c2d1b6a08e9a5fc022e8654d04bd113082be8809ffa94678a761c1847f09cb8c7e8665463f4f2b33fa3216885774840206e2214cf82f34c29f0d28fc619d709e587f994a6694a0ebfa118de05cb17a4bfb0c64c62f4fd3b60399bfd2f1d20e64f25569120f6486d7151bc87c14b3a55feb52dbf060b6f4159d705e44fc266c11f1554cf2ab61253f86950fafa562ff0932cdafe9ec5f2c3054db2ef61f66e1a8c496ffdb942dff7561f95313587eb8e5adf431f138663cbf0b6b3c5fc78ce78d90c6f304964c7faf49a69b46044ba64f625af30dc7e2aa447c126eb16868d508df7dddac8f6c515dca0ee8a0f30d4c8f3feaf4e00b4f0493ff4d4cfe9b2163e7292c76fea4899d5702c6ceb730adff8cc50e4f233b641551c5474deba208e9ba4f7d1b0be45f34813c34325820bf8305f22d5d20790a54be116e7d36d6972d48b09ec6befc57dd97796bdfdd0320b77519e1dcd69543ca9c0451cd82cebe7806d3e06d9d0643b41aac107f358b69d66ead3fbdc935dfc574f99b4e971129ea12bfce6c109dbe8719dedf3586f7d1a86086f72c16e07f84cc139ec304ff33a4e0ef6382ff1552f00f748239e777349c878e0ec6f9794cf8bf35c25f0b28fc050cc9bb2191bca813cc739fffa422384163e8873ac1bc1dfa5eeb0d5f3bf47d964e3bf4250cfb071aec8f6507c3fe232c101f6281f828ad40fc180bc4c79a40bc1730103fc1847fa2119e3d2e98f09731c3fc9469b2533edd690d836b69548b3ab6cac8a36c8a28f076cbdfb1aedad9e2cc2d7ea68b35021a45a9ef66b94dc2953b5b64ccde5c59b75389cffa6cf0d50cd4777867925bc4d6b666e7d92233af0ee88ef8538cc5673a167ccd0db820975bcbf40a586fdeeac942c37ae64db774f5e33a279390ef3c1dd4bdfd6798c1fc5763300d638319cccfb124f53f2c497d9e56927a050b045fcf2d6ec82a60207e81c534afb3c7c5347714d677916e949dab7c7a006f5db8ebb8248ad368c2bb53840baddbadead9756c0ad8232c4375a1c6de6b1676d5ac4945db84867b4007ac2b7b8f6c9d06b1af5f6ae8e58ae582b9d7b339fb7d4c93eef5556ca79cae512ae854c6ec35167c47900e91a0cbc4758cf05e8499e28d4c8501eb5bf81566fb9d74b62fc214c0360e61d2b374d2f90d3797cc4d6322faafb12ca2b3268bd8373e5816f11b4c78178df057020a7f15a3d43512ae3af81a26b85b48c1bfc57074d7e07822208ed731e13d34c2e74d0826fc7798f09e1ae1e70614fe0626bc9746f84b0185ff1e8bccdebab4d4cc525bea21dce09fdb98de12339c68f650e01fb028eaa389a2d70246d11fb128eaab8b22ee07113f1a1b24306feabec76b5ffd2248edab7f249ddad79f74dfe11d3b0352c9470ee082ff8c011ba803c68b9fdc4080fe82c91fa493df9d31ad4507f9e25bd81707ebbe38586b022b85a5ab156fbc3bc12cfdaf982643749a7009bca615b424785bf3955cb189035f472553d3ea53d986575f7b1b1ae1a5612c0c913eb435b761a2e636282e640977ab45c8fd4d173ffc7478247e37dd63569ed5e596913fea1017355978d4fc1d3380113a03e00b5f72af2c3783af77fe529b9cd70534bc7f60df1da9fb6e1ff4bbbb652110e4dbffd499e3a84c9b6389687835a6618ea31c44137d887210631c8d1863a2af63c6f82f1d37b137c6960c72833b05978b4523eb9c2b65a239abf66d0fce744ce0065ab6203b3e2ee4e9ea87517f479752f8c0eed848c881dd7f6392c78595fc2e26797c58c9ffd149e6b5ad0991f0db8fbca713ce339289219b42ef633c2685e5f10126797258c91f6292a361257f84499e1256f2c798e4a961257f82499e1656f2a798d14d0f69749f612a1f1156e5ffea24f3ba414e2a2a27d8b6e87f98cab96155fe1ca39c1792328b202acf08ab7204939c1f5672074c724158c91d31c985612577d249e6363733a4cd65612a178555b9b34e3237a559216dae0b26787648c15d758279e93aa70d4ad76e18e8b9614177d749e6cf1f990a8f0423da3d7482f9f3f35211fc3a2eb827168347858cc15e98e0f92105f7c662efe8b0b1d7078bbd052163af2f167bc52163af1f06796148c8fd31c12521050fc062af346cec0dc4626f51c8d81b84c5dee290b1371883bc2424e42198e0a521050fc5626f59d8d81ba6919c2b76a5e40bcb65de7fbb2d36004eb2034d2a71311927361c8b8be561e362844e325f146f452a2a1fc4058fc4ec726548bb1c85095e1552f0682ced97854cfb63b0d85b1d36f6b23116c78664311613bc26a4e07198e0f29082c763902bc2429e80a9bc36a4ca1331c1eb420a9e84355b8e0bd96c998c69bc3ea4c6514ce3e3436a3c05d37843488da7621a6f0ca9f1344cf0a69082a763283687447104a6f1092135cec15a865bdaa065988be1d81a12471e86a332248e195816b72d6c16978f81ae6a03d00598dad561d52ec4d4ae6903b567626ad78655bb0893bc3dace45918901d6d006436a6765d58b5e760924f0c2b792e96c877864ce4476282eb430a9e8709de1552f05198e0dd2105cfc704ef0929f8684c704348c10b307b3b29acbd15eb9ab6d9ce6984af736d83cb717aaec68d11cd16ab6379b867b0b67426c6b4eb2896a4e3d3fa9b4493dd1df3ce1dc735e0dbbe634df975cc6deef35014046ef4f38805bfb25c2d1ac50c4a6f1bb75c3e5c1fc949a0c5b18e3cd765b0513cc1df0aa98bab10b2296c53840fa8662666300f8385ba94328193da4e9a52682c2171ea68d6a48ebc71baf8d246578b882e3a33c6a2a804cb26f786cd264bb15ea79343f63a2dc28a8c7d218b8cc598e0fd21052fc17a9d4e09d9ebb4148bbd53c3c6de328cc581902c8ec1589c1692c5724cf0e92105afc0209f1116f24a0cf2992121afc2da0867b5411ba10ce37176581eab311ee784e4712c96179d1b322f5a83f5039c17b21fa01c837c7e58c81518e40b42425e8bb1381892c53a5d3562a2731ae1fb0899b016d646593568bbeac4853a66da9ac345a2e690cb82ac87958ebe580de2385db4f3d8b9389568e7da2382d7eb04f3d34b22f12eeaea27888bfaf1582e79691be4921b30e197b581f08d58ee7079d8dc61934e327ffe8a546233c1a8fb669d603e55e3ca54040fc3cde4044cf05521056fc1205f1d16f2569d643ea3e99a54544e30a3a91253f9dab02a6fc312e3756d9418ab741fe00b1e5e9f0a9343b8e06a0cf60d2161d760b06f0c0bbb5657e04d724e237c97e2f6980fa10a8c60731f6e4ab910bb591462c3e242978a0e58c1b41dcb816f69831c780716f9b7868dfc3a4ceddbda40ed1331e1b7b781f09d58cdf28e8866ea5529535d53b19d49ab185f94ec6411c1aa032a474cd25ae6dc2f73eeec1626cdafe8eb2f3a5f1ffe34342d6ef87b983bdb38d8be16f55828efd485f2fcd650ae756a523cd1b9097497f87b197317406f14b39add04baacf5c945adabd0c5ae73d32879943377c3d212d622c2c5e5c6d2f324f0e783e98149aa607c7ad776713796294cac7edeeb1c3941a7f2edc248df85d913fca21ba602e71d97d61e2753dce2d846a3887337b41572e53fbfb6debbf8f5b6b2a7dd5828efd68572be2f9490b91bcec5ccddbcb35263f5b13104ef244a2bf0ad2021db8385ec1e5dc88e4e29fe8ac59a00754c75bc878f39ef4e90b0356061bb5717b6225fd8568ad8d92143c6cff6b55b484ec242729f2e249764383ff3dee1eb1aa9a18a6ab05c6253002b87ecf050f0b2a445543360aec72b586d97b73562d4efd7512f4e296dac60ee961e26e46a4d58f81ed0856f05a155f1ab2789cff050b9d5e13af1e93a760a18c26b8b586dc642fda02ed447250c35aee91a1116777d2f378caa34e657ab24a1f874917e6cb660e1fa822e5cc707aed9958b3bb1753b9d046cc8324c4d309d78de8bf1f8a28ec7f28c94d9d4a5f9c95898bf84d55382d980b261bee248951004e339a8450409d93e2c645fd6856c2e12b2b5227dd6cbba89dbd456ad9675321557c7c5064d1b653f16a28774215a4c98fbaa587517d4d8c6dc15b6db2ea4a760217d5817d2790ceb25d7e514b12180eb5771264b452c378ad6509553e2ee6fc3509d8a85ea9154da04b1df853584b522161a9d67793adc9ea0f48b95d176213b8085ec515dc84a92e69ca9b50af03c34519b35dd9cf2342c8c5fd185b186b846dd2cd64de3ab38b935e675c202ea5a5363dbb411d329454fc7387d55c7696dbbb53c12130acfe10c8cc3633a0e0bd13c8cb790b6390fa9b4e1aedd95b8c4d14b6aeb983e130be1d774215c1630846a775a7d8cb44778cfc2c2fbb82ebc6b082dbb298df2b72d089c8d11f87a5b95cb6ede560c4a65fa509d8385ea095da89604b4636f3b4a136cf85c2cac4f623d14416370b17822de1afdf96bea728384ef3c2c7cdfd085efc81035c76651f2f2e5b96a653b0f0f5545dcb341c2743e16a66f068b33bf7dc21d8c92a532ca92f2022c7c4f61e10bd26674c3ba44d699bcbb7cc42371edb0ad6a8e07b1f07d4b17be092c71af6085439842cb0b312dbf9db86f2f482c94a7150b94b6771116eaefe8428def4f58d13a540ff3086fbf085ef6b768eb9de9f5ef5f8ce9fdb44eef39495b5ccbc4d820ef7dac17bb052c62bbc41284f1eddf4431907e0bf2122c3ccf60b5e5c46984b786578b1a6493a60e91ca5802af79d5b661082fc542f8dd54dac8fab18165c2f64e129350eaa555b6e7f8c0655818bf87f550a5d20f904a28d3cb31d20fe9e558489fd58574694ab1e91fe971d3a10a777bc6eb1558689fd385767dd278a5ed19a7ee33bf12a3f17d1d8de610f5156cca56d07ef3643b7cb495bc2014afc228fe40477151408a9886b1e5b37fda215e838f9da715249c5763e17c1e1b3d4cb50de1b532f738e12c96169e8afe6d5173ba060bd70bd8f88a5eb3783ff6f66a675d8b85e845ace732799b3d95722c95967ff0de81f473fbeb300e3fd471c0772ec6dbce6a19f6b6ca91afc7347e49a7f1a4a4e593376a5923ae72af9eb6a9b7df8069fa239da6b302e7065ece56297ce2548b8322bddc8885e5c7a978f261b5bd4586d5f46ec242f913cc2b20583ee796f4f177e33d3d60699dea378a45ef232f1b8384f9662ccc2febc23cd117b3de37a953d32d989e3fd5e999efd313e64f7e9d97489d53ad5ba7db5f792b16829fe942b0a9b516d4f6630aaa872cd1a822b4c054539e7a270895db302a3f4f65a45c7d3148aee2850c4b716d939bdc8e85ec155dc836b4737c0789e77453c01d18915fa4d26710b4ae15bed5987edcdf8985f497a9e456252256dd186c067dc1ae1514b1c224e1d3e564fcad2021b80b0bc1af52f76fe5df0c923261f8b0eb6d15437763e13b84f58127aed1781bbaf875541beae0e90bdb0c26519a4cafb4bf070bf5afd3e97b7563b5dc79781b6b96adf0f6f6ebbf170be16f5249797ac2e9d51392b770ba38ff22113ee96c9190e2f664ef11eff05a61ee64e75624afb564c869cdf173624a07ef3afffe2e2736789aa868cddbbd657f3009af3a703a7760eecf64b99d9b5b20466a997f525f89905f2ff31b65ad398290ebffcb272be638b5c03af1967f012c2c14ba522e0794733074c9c3b419996e18113bc542590e69be7de16117d2d778ac8e94b1da21770a930b6da5634dc9b5f82dff5a47bd0d0d89230b53874e7757c02ad97b10e1ab4b6c119f713711c59deb937ed9bf82b8ffcb470801aa3e9854dc5a9005e8c40d13e6e63a383632b7dbff35476697ac0e793c465ea7c4c627e4968a7a5f8303cef59153650e06b0c90a846f463c84bfa344c8f73d55cddaa5a22b9a0bf0b6432f633bad00f648570fd81b94c00632774bc63ce679afd90cae6f0f0fdcef29c1f5d780e302773b2ff101ee1671b5da0a685b9907ed0fd4d6169b3c173bbfeba49fa4f2a071adce0670d19e1eb83f52821b2ceaa34d29170b36c0bb06140a6f52c2eb01926a594c0f8c0d980e8ef030fd8912533780c9738eb501d17b833c447fa644e46e60ec8e4e373bed08776583b5ce956af9b70db80ac779b8fe4289abb3c0d5645596dea99707e72d4a387c41c4b2d626921a17743d70d68832b285f17916bc545c2d7bce6c00983dd203f8574a805d417ec5d5e443a536009ad7cf03f43675865e26c626bc5558eca890be05cabcbf65ca86d4c4261b00751de001fa3b2520bec6a0aab12f62fb44a85b5aab99dc13b25a5442d7080bab16f656ef7cd00688fc4741fc0725c4518cc5c0e33d627c12734deb729fd596d7e507823eb27f52a2ec25f334656ffb6589b95634b76d40d509948fffca54639bb71de170b36a3fda5433fba88b07ee1deac6360407673d168be6371f01f2e677da00ef00e817fb3725bc9ea044f526b6b9532e6d00950d6a67ef527755af14c96fa76f9d9652e7f146f1251b806dede001fb4f663b0f631d68aa2dcbcfea411fff7bf45dd5bc2a512a3e6d7345e3f92c0fdafbd4d6b6480cb0b5888f7b0b25790b67353975b83ae77b36807b1380fb80125c6f904c6d1d10e15e1c0ad687f4c36fee48b9dba968773b601eb0b28fa87bcfd638d04a58ea6b0eda00f0a0a8e476c9f209f7bb57a6efec128c3aee96d387b96dda0671b55996bf316e3a7c068a719a7f0cdd6ca269f76f4493e673d1948788a38187f7a269fa8a4453aa75464376584403380045036581d194eb32d140057834adfc241aa8891d0d54818da6e4ca120de4bf110ddcb2d5e98c8fd847e3067ca2099b83516d177e54db291b458627a3094677a3480f7834492f5234adb199680aa3839e0fa9def7338ffb907ef2ffb97b671e77effc9443e05b1cf01fb73ef119757d825b91ebcdcbf3f8c4ebeecc704a759f0e23e37488dd2d44d51b74da748ba959f44e2580e9d42eb280cbc57f4dc2996f25ce9900e7ff4cc2596025ce8d00e7e799c0b91d050ad5dfc266b2223a9c3da9707e91793859078370165a89f37a80336212ce5956e27c03e0ec6012ce222b71be0470763409e70c2b71ae06383b9984b3c04a9c0700ce2c9370e65b89b30ae0ec4c897390c459259b95fef9d870ae6f1e1dc82c2a907f0320bb50821cc5bc4e8a543b8cf8f38de259fbaaf20b01d8ae9460c730d883947a0faacd70b301dc6e947007b3c4cd4e288e97f46428bb50a1fc14a0ec4e89b28f4459e403eaf62df287ecb3c3fb01bc1e9980373bf3f00e51c17b04c0eb49096f4892323c361193b6cdc992f1df01cc5e26c19c6521cc7f0098bd4d82596821ccb700cc3e26c19c6921ccbf02987d4d82996f21cc3f0398fd4c824938744106f32f00667f936012b6cac960fe1ec01c60124c1b5b387f04300752c29c2a61d63b0fd58ba37e67d1603bcd12daef002ae46bc038e6204ae4dd05f21dc285c575a9d92ee0d9d794ec09ac74707b7669c4aecd48687d07a8505603eb1b428972725c82af14c2bccde2173affb975ee159d6e2d2cd1b28aa4b0c972d72900f6d04cd86d6a45958d2847812c601825cad19a2c20d565d849d11ea4423b0258e9706a2b2d161ec37ba49f245f2553edf7ca3d2a95f7a8eb936b5f41d50958e9084a94ca797c86f37f97fc78a528dfb730b58d0069cf2759423f05201c990984b30e3b848f0184a328110e60def09a3afab7a7b47518ed2b00e2e84c3825a4ee5b4cd8074f8673002864c6988493d4c7830ce71c8033db249ca41e4864386b00ceb19438fbb696db79991fad1c4e85ef4590578e33c7e5608e8565f7606089e3338112fa1cad702ae14be4b4a65ae7a57d9928c1c9503602ab9c40df510cbbd8b6b09d02dd42067733e47bacd73822e266b95b90c47b01981333d1fe6e16932f9b5abb84d5cc3175d4f51ecda01c6a23437b03403b2913031aa9babf12e69f64ceaff300ccc926c19c6d21cc390066d4249884ee0964300b00cc2926c124749c21833905c09c6a124c42972e3298b301cc6926c1b471f645118039dd249884ee096430c7039847980493709c870ce6300033c72498842e5d6430a30066ae4930095b406430270098799430b3597cff51308f23c2f29dcce3280ff429cd684f8f397f6731612e4ad6553c19d86abe493009cb7732987025c5824cf4bbf3decebd4ced199aa1815e327c4300be424a7cc300be78472e2ecc9b946af3c8f9b300e8cc4c381fe41d76ce07fb01c2a24c202c3aec10ce050867995d1d22ecd524ab0ead05d5a1d999728ff186d8e02811f9e01ad9a0c53e60a373cc716db571deda9100e5dc4c95e2c9d60eb5d9756b16007aa449ebc9ccb4b2abe33e80739e493849270392e1bc02e03cca249cb3acc4f95b8073be49388bacc4f93d80f3689370922ea94b867319c0b9c0249ca46bc092e16c00388b4dc249ba423119ce4d00e742ea9a676a6bf8af11aaf15d04086b9e4ba980e603a0259958f3a8c0d77ecf40b707d93cb47a00af9412de0896ea14bfd8f9be84ee08af53415d0e3a3b16990895b0c54e06f5180075b18950095dbac8a02e015097980895b08427833a1a405d6a225442770532a88300d4652642251c0a2683da17403dc644a884ce0a64507b00a8cb29a116b0f85efad8791b25ccdbefc70d48ecee41b1db8d79db3455881aadeaae268c841caa48e02aaa485861ceec381b57f2ec05ec79a5b9b390089dc4c806f47e04ac749539cbaa91ce7627b3d3b301cc329360dab8e2ec3900e66a9360dab8e26c138079ac49306d1cb93f0bc05c63124c1b579cdd0160969b04d3c61567eb00cc0a9360dab8f6dc2a0073ad49306d5c71b60cc05c67124c4257463298e70298c79904d3c6a5572e0130d79bed766be3bac7ff05788fa7c4db4be27557b1a917ad7857761de5d22b64db9031006e43a6973e4dbddbc3c6a5570682fea48d9972bd5d297a3477fa7a3c4b9dd71ac5176d76bd1d0e6c751325d0de091379131dbaee54e83a00749bdbd3a3defe99ee0301ca133231ad90ef7079f84c2b3c16e0db62c65adbeee85183b058775c88d432c9f675ab0205ce5693d6ed246d4c92596a0780b3d2249cf956e29c01706e330967819538cb00ce2a4a9ce359fcc4ae456c1fe3ae0b2d4cb9d69639af5733de8c5c23c0ba4beed767a6c6d98f0af2005058559be4123ed3ca85d51e00386b4cc249bac12319ceab01ce5a9370ceb212e7eb00e7769370165989f30700e70e9370928ead93e13c06e0ac3309678195389b01ce134dc2996f25cecd00e7ce4cf575968b5a658b23b998f14d9ed6c9295fd562ca578dd57d9d2700a0f5e6f875dae8aed019b4947665621c53ad03e64e42dc269a9aea21db970fda06ec7277262621b6c3562664f08e02f0f698eb614c5800910db6dd05d03664c22e6765de2ec9e03d0ce09d940978730ea344fd0280d7485fbcecd0aca954ee30a9625552a15a31c39d77bdd957ede901603699eb8e40d8614c96c8fb806a50b3398baad9e84d3c1558698b196398bafd8209d192add3702cb0d2bd268d1291ba1d92e5a76300ce934dc2996f25cea500e73e4a9c23534ef8eb983b87988b2aa0755c688910615d08b0eecf440b3db5ce8e7c2bddb6570398a79804d346b7ed0a00f3549360da387175318079c02498364e5c5d09609e66124c1b27ae1e0d609e6e124c1b27ae2e0230cf3009a68d4dcda300cc334d8269e348d07c00f32c9360da3871f54800f36c9360da3871751e80798e49ed74d2d120b2767a3780f35c937092568fc87016019ce7998493d4f7880ce71680f3fc4cec6234931d6ebb185dc73c841764c2fb3d79475cfc2ca2624768a3985e4dda2d771155b7dc71c04e0f52421e2521d73b0f71c035727a8137a920361b80fe728460c9a615cc02602fccc462000aacda5e2f76f8385175cac69ae94480f7a2f61ce9ccd81a9f07a850fe09e4b31753a21c2b502e731e5a2380f1a9d67be5eb9eb56e919b472d142b7bee94f7173bc71a472ce1fa0b74355500f81273fc3c6d4cf6ef01949752a21c9804a50a29a99fc830aa52ff04907b5e66f64a3584bda3642bd54c03782f37d7079470b08eccc3e94d90015c91890c002bf7bd0c80301f25cb00de0618afa45e4b69b56cd12b3ff965c23279b2b7af2cef0bc05d9509fbcb6bb5c16ad12075a762dbbe42c85701c6aba93b9639b052f1e176dd346a3915cc4200f39a4cd42fe12eeefe66a6dd7d4ecf0194d766a2dbaef0b0ebb6db0e105e97891e256e8d8b4419dd2294e03b645789445ec64e161d758dac4954901a98cdd3056702b0d79be3dc6da363cd5280f2864c4c8629f4b5826c2ebb4f02f06ea48497a7b1c3208d47d75fdeeb432a15257e6566aaee1da9aaeebf04f86f326956fb4ccaae10b259ed77039c379b84b3d04a9c17029cb79884739695387f0d70de6a12ce222b713e0570de66124ed2d513c9702e02386f370927e9727f643877039c77988493d4df8e0ce70680f3ce4c2ce2cba7661d3e8bf896007c7799e41046ba091919cea1604ce86e9370924e8d21c3b900e0bcc7249c0556e2dc0170de4b89b3ab10502376676d64ae879d7dce5d9d41de781f25aec92cc8b6b8bc17b4458884dbdf726a19f0f928a1829d0b60df9f89727c86a8f41c2e6bd7bc06f03d9089210dde1fbf84f13e76de13bf5d0c6a345addf37e1a40f8a0390e5c36ce5cef0f0a9a2f50a21cc4b8e3418d1c37775d0cb1e15fc2dd5ec88aa0aec026bf68ae8f918dab285d03d07ec99c4df10aac5c10e0a700e6974d8269e3b8e52f00cc874c8269e38200df05301f3609a68d0b02bc0c603e62124c1b1704781ac07cd42498362e08f00c80f9159360da38ffe25b00e6574d8269e38200df01301f3309a68d0dcb5f01985f3309a68d4ba21d02301f377b7e10619b886c7ed011a013e4ebd49d2089fa935cd58b847b22617144b6b3f53600f209faa9abb120ddde4cded1b19b1d23fadd1b128ea2dbb8116e4790113c698ecfb18dcdcd1c80f21b267977cca42ca2c82cf35180f39b26e12cb412e7cd00e75326e12cb212e7cf00ce6f99849374d62f19cef500e7b74dc2495abd27c3791ec0f91d9370922e204d86b316e07c9a12273f5193a9ed1b56eb03303d6392d5cda4ec2426b3ba7b00ceef9a84b3d04a9c17019cdf3309e72c2b71fe06e07cd6249c4556e2fc36c0f99c49386758897331c0f97d9370928e5792e1dc0370fec0249ca4ebc193e1dc08703e9f891d88d4d2919c430be3fdedfe0523fd5eee847d99645e9c9f01ac2f50629de4c3ba8dc57bc6a5ee4347889aacaabf09f4cbbf98099fe3d9ec705b46e5ebc05a7f9809ff4e65ad4dc2fe7816b058c2abd18e1ad9bb346f3eb0ce97cc71e7b6d1edab2740f92373bd90090789c9f2d01f820ce0c79958a36686cf566ddeed7a3e80f713b31d18087deac81c18a220d9bf9c890a3f5c714e97c4ed2eebbf0facf5a7943827f8cafa7a062768e9f73c58225fced842e793a9300f0356fb33739c196c74105b012cf6e799dcdd8027fc6adfc4aec3afa9fa6f80f7159366b79376f791e1ec0812fe2f4cc249da3f4586b300e0fca54938497b4fc97096039cbf32a9f77426e51c39b2ded32f83bcf39049380badc47923c0f96b9370ceb212e71f00cedf9884b3c84a9c3f06385f350927e922556438d7009caf99849374ba3619ced301cedf9a849374cd2f329cd500e7eb995908a81dfa44c9daecaf027cbfcb448732ff70adb044257bb77cc43e781100ef8df69fb2a50a19fb06dfba82d6ceef4d0169e328e67f8045fec1149084831964200b8145fed11490841d1964207300c8374d014938aa4e06f27800f24fa680249c734906721500f96753401256bdc9406e0720ff620a4842af0e32901b00c8b74c014938024906f24400f2afa680245c38850c641d00f9b639de7036aedbf539f350fe8dba85ed2df1cc156d121cb68b454df96bf6b96cf506f0fe9e897d033d5742bde38bbb7d18475b2b84eda26d281ea402bb0b80fd0725d8f1ccef5de43a6c797ec45ca0bb59e8e1b631fd64908bfe339373365ca0dc858b6704a5dac2c9de057ed603acff32c765cbc6d5e626816ce09d4cb86ac3723ef51c96102d590e5b0aacf4dfd46bcfb913b4bc4d6ea14ff142e7c877baae75ae10ef664de60ed31fd8e9bb99cc49eb1c25d6316ffb26283c63ceaf07a8b06e0536fa9f4c8cfecc3c8c86ceee0536f95e2616974cad8d34c3ca953a738125be6f124c1b1db1e702981f9804d3c6bd0a2600981f9a04d3c6bd0aa603981f9904d3c6c523c702981f9b04d3c649abe300cc4f4c8269639fe72800f3539360dab857413680f99949306dec921b0260fed7249836f61e8d0430ff67d29c1fd22288ac93a337c0f9b94938f3adc4391be0e46b961b8393743327329c9500678412a772b4e663e787cfcee9c5ccc3d78112df40c6d783ad945dc25cd46ee7f11dcee37b447f3bdce3d23e8c590063474a8c6398b7c8843b90b6c55197c76395e0c1c7d98b199f6fce072f2a1d013c8157339bb7b42d07703b51c20db7700f61259ecc91e11680368b3af9272a8c544849072cf8a21a2418378342a83325c66c0dc6604bf810f628912de13315e0ed626e064038c0419601fc1c64005d29d18e1568970afb5cc3f8e8648d2caeaa8528e56ab3534400b7e32ae76f57fc62e758e388adb6b0f0ea0e0077cb440e8b798594088b255ea57334550efb4f80b13b2546d541022b58aab6ead55fedae500d06307b50c21ca581993c0bb0176c2900db9312ac5a4bb6801d6e6bc95e0510f6a24418cc8bcec621e22500656f4a94e302a02c77bec98534b332e72fd5e26fa22d96b2a98aa57f01c47d28110f63b10e600da2bb6447429bb571206419a8eaf7cd44ef68ea0b4cd9b827e69dc03efb9984b3d04a9c0701cefe26e19c6525ce5700ce0126e12cb212e71300e7409370928ec993e15c00700e3209678195384f0438079b8433df4a9cc7039c4332d1d4cc13bfdd231f712a676e7bdeded6fa56807068269a9aa939ddd8e840db0f54db8765ca1adde62617b44f5a62063a3e5ea742f835608dc333d151cc11d6b44ecc56b76def3ffa26c03822b3634587fb9e044301da91e60ec3d9b809d99500eda84ce49ff9875dc7f144807074261cc166b4872318d918fb18806f0c25be59ccbf284063cc606fa9e8d9ac0ce8d850814a21cc0e9aa8ba958b41752a3b13a39da90d82e45b390c7207b0ecb126c1b4b1a2ff208039ce249836ce94bb0dc01c6f124c1b67cadd0e604e3009a68d33e52e0730279a04d3c69972b70298934c8269e300f1a500e6649360da3853ee3200336a124c1bd70a7912c09c62124c1bd70af9068039d56c8f7ac2844fd6daef041a98d332d1d93ca3d55eab451fa9ebf665fbecb9c781954e37694c7326650e4a36a6f910c0798449380badc47913c0996312ce222b71fe04e0cc350927e9cc23329cc7019c7926e12cb012e71900e70c93709256e6c970d6009cf99438d51294f9be5aa8cd43713b01bc824c4c3ce0ae0ca58c2f25d0e0db6fbd5c54d5ebc4305dec22034d56fb2e8d03880b4d5a458474fc9d0c6704b487669a8493b4938e0ce77880b3c8249ca4aeb3643857009cb34c2adb67528e149195ed5f0079e76c9370165a89f35a80738e4938675989f37700e75c9370165989f37980f3489370922e0648867325c039cf249ca4abd791e16c01388f320927a90f0819ce2d00e77c4a9c53987f3a366f7c563b3cb87bb70aa7e7538f0dcf153b7f358a11255247c59ba91c156b41cdf4684ae06a67436ccc333667250349b6b3e15860b90b4c0169e356e38300c8625340dab8d5f8a900e4425340dab8d5f87400b2c4149036ee907d0100594a0932cf57bab7a0f38df0695f25ce13bb1c7df688331ed40c95f5175195f5eb4059bf2813fe4da976ea118e2f9175e9fd0fd8f2629360123a8b91c164c032979804d3c6cee67780652e35092661b59e0ce6bb00e63293601256a4c860be0f601e63124cc2ea3d19cc0f00cce526c124ac9992c1fc10c05c61124c1b77f4f808c05c69124cc2c9af64303f06305799049370f22b19cc4f00cc324a98f8bac98b9ddf75ccddd3a3c211c005dbbf6ef23a0076352558771f6dfd86e4edb6f63cd92c8f2e00ebb194583b3b270d00a57da8fa01546bcc590bccc659ed5d406bbcdcdc658208ab4664cb047d09586985d9b3e2081b986499c02460b96b29f10e00e5fb5e517e730f6577afae0ccd893b4005b112d8e8ba4cb834c04a1256b293578dc86c7234c0795c2672d3f8249f4a7e6ae3a26bdd41725f9f89321f1b988b2df36d5ce2621ab0d2e333d1324aa7cc271cda20b3d18b01d80da682b571e3b3f301d88da682b5714bc9a301d84da68225ac9d92819d01c06e36152ce1201d19d82300d8134c056b63056b0400bbc554b0841dd16460cf0460b79a0a9670b8840cec5e00b6d254b036f65cad0560b7990a96b0b7950c6c05005b4509562d7b3d93b5c3b2d764f84e06f8aacde903b071fdbbe500658d4993be49d7c7211b131d0e7aa76a4dc249baa00b19ce1281b34b964ff8e238e12522b03cb855cc5b2b24872d61dc8ddb5d4da4ca395f218a9766b6d5b1af8dcebf6071b0d9f9a7bb1e110bc22c62fb5883b8cae5550bd9bb9cbb5cb3269637d579643b3789aed224a2227b297698373bcff0bd95f9d7f7b372e6ae8552e6fc569e032d024954accce76d68cdbfc0b7b8dec11a458863d74a8946ba0a4eee76313c5c1c6054eaaab690592633b63a27cc95429346e7994ee23bae094523bdc0991af158268ae526a1957f24392aa2dfd551dfb9bfd039963a7fd58ab0d43bdfe5d11c89f49331cb43b55210a97448b8bb0254b47e3b97f75c468a9c5f6e3521a7b58290235df877c933753db94c1eaf89a5ede09117d1a7e7fa36b3c864217213117fbf56b83cd408a9cb92863479f870ebee99205672f94c99c33afc753cde65b40b331d12e9e1fcb5d689795738df26a8d1f99b2b555dd98165fd3f53db9f6259220300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/b633e7de20b2d9e40852cb41f5628675.asset.meta b/Assets/SerializedUdonPrograms/b633e7de20b2d9e40852cb41f5628675.asset.meta new file mode 100644 index 0000000..55a7528 --- /dev/null +++ b/Assets/SerializedUdonPrograms/b633e7de20b2d9e40852cb41f5628675.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 74072c32e2b680a4d82d3957d11e7a57 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/b7519f645cc7a5344b80e26eb2ffaea6.asset b/Assets/SerializedUdonPrograms/b7519f645cc7a5344b80e26eb2ffaea6.asset new file mode 100644 index 0000000..6ad1d25 --- /dev/null +++ b/Assets/SerializedUdonPrograms/b7519f645cc7a5344b80e26eb2ffaea6.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: b7519f645cc7a5344b80e26eb2ffaea6 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed595b53d35010ded336bd080878a13af2a04fe2882480c3bb80171c0586525e18a794923a75da52dae2e04fd01fe48c2ffe2f9ff4db4d42d3246d281064aac970ee67cf7edfee396753623ae151b34876688b56688ef274408754476905790daf5573da37a989fc23d222fa66e961c84c7e1eab7b48d7506b511b338fa984bc22fd3932515ec35c13356e2de3cfc42895c0a43cadd206ad5356dd0d11b123935a769b625c2a8d7499bea0d714a578115dbab24872e869495f0d4a3be376e983c0aaa1af84394daa42e6be484c4ff35cc12459dcce63f8cb703f9735259abf81ac223548e74ef564008a9d99e1e4b2e864ccd2072cf3b26dc068404000c2bcf0d7a6455a0844785f8dbaf45e91b4881115119af02ff1c3b7042b57c56bbaccd342fb6bb12e1ba8829e397a879c67edd13c08dff548d9c1b25598d8a46da40d91b707b5fd23c320b129bd73b620d3f2b41a5a1c421ba85745c39ca49f455353b45f435b5bfcbe0ecf5f467e22abf9b137510e5a73dba62c58c76087ebd56eb9b563a655a061ed75f1c5ff16f91b1661ea93097b1b26742ea96f3e4bfce7d03a643439c82d19f3d651dad5b6403a57d5968fc1c131fa1106fbb7c5f7123def8b25981936f70341d0b1b071f4fd6bfed7cf23ad1bda22e94986361d02ad1fb12c6f464df924f487a069098315f5d2af82e84f7163ee0ae9b7c65564dce00648cacdd46d003581ea36aafba25c1b534bf6f07de445940ec8671d8345a58460fff519a6642f8a634114a7af9ae2f033a51fc5e9535c1d8af9096630d383c1301d7a31180f60d060956e04a8f51b8f96f1a8c51a6929bc4a8da0f852d46842b94d2c5f915a8b741ea58c01223586571387aaba9c2d3c6e1be913b7952fed0a0f43611983e79725ce73ae852074e1987a872b291b91230b4cb3e1860e2947cf49fbeb80623a1b593d3da737856b31c6abc5cf1afb871d5e968075f9a88300dec50599ce27653b5cfe06647cb2ed1624ff990870eeb54bf85461a77a01620ee47c6ae1e587b7b847f8ab8842e2b3de59fefd302e27d009d43b14724d80f0ec0f76a56ba7f94db77fcff87ca473bc061f8b061fafe3fff8c967f0c937e1fe5e88194cd96494bb794c2c55909d52c690c2a9ec0a007956bb486c9ae9dae5da59a09c7fa75bc4dd8a92b8299bb892ed796d94dd02ddca17c8888eca4c5454c65d54de8e92ca47369556b055172f6c4a647e8cbc4e6feddf31868de0988be03b51123cde7393d7ed219191978a8a3c353c57bac1573aff869db4ed6fdf979336963a24be97fd50c4dca2e49dbb53e7235c2dd160c1647f99e117db94fbc2f7d8a07aad2eeb20a417b9b847fb5845e73868a8f167bd6e9a95b02e0fcb5bc24dc4fb4df96f4a53c6687f006a750bce491a0000 + serializedProgramBytesString: + serializedSignature: 0ab5f710ca7bca040121430055e204341baa86b4aaab3e52b8f946445b523ff93c74514bb934f475b4c1aca3939f6d82f606aafa4e64e9c296a06fb22b474808 + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/b7519f645cc7a5344b80e26eb2ffaea6.asset.meta b/Assets/SerializedUdonPrograms/b7519f645cc7a5344b80e26eb2ffaea6.asset.meta new file mode 100644 index 0000000..f837f9e --- /dev/null +++ b/Assets/SerializedUdonPrograms/b7519f645cc7a5344b80e26eb2ffaea6.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: df247d7b569cff840b3944dc418bb766 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/b827233598ebc8444923892722b40418.asset b/Assets/SerializedUdonPrograms/b827233598ebc8444923892722b40418.asset new file mode 100644 index 0000000..7229f61 --- /dev/null +++ b/Assets/SerializedUdonPrograms/b827233598ebc8444923892722b40418.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: b827233598ebc8444923892722b40418 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d079c55c5f5f8e7d1ab80f4264b7f14d9655916545460a9526517441161d95d6065296e4150ec0d7b57ecbdc5129368aae9c618634ba289498c269144634c6212134d34fabf67eeccbef3ee9bf3debbefee793bc3ffb77cd8bbb79d39f39d33fdccdc3685c2fb894df47ead122b44999824568a6ab15d6cf3fe2af38e5bbd7ffe99bebe5cd47bc74ddeef4aefde445190e14df8191b1be0fd5ee89d358846efcd2651e51d6be5fd7251e3fdbdd07bb7c63b83ab1bbdff35de53b176de4b2bc51cb14c2c15fd637d338858255f6a50d76210af5827eff76cb1dbbb5b239582400ae5adfedeaf72ef4e83bcb7d5535a3fb746ac95d1daeaddabf2dea917759ecc0d5262a73b3d5431192779e8a38e7dd5b1b7f7bfb3fabbadfabb93fa1b3fdf5e1dfb65f97c7ff45e67f43710ba33cdfb03d4f15fdeff0ede9fdbd139bcfb9e3a1fe8cb6bb3398dacc1ea38441d872a993bb2d0bfa33a1e9221bee9640c43b2b261d6491d87ab6381d2f7941cc31fe9338add8ae4c1f1df489fe128eccee83e1c474488bb4ec70f03e9f8a19f8e6df6a9f4dbafae8f52c731ea385ac9f69ee97dafba36561d0765d02beebf27a68b84cd7a61b6d5e93e4e1dc7abe30475fc8fd2b51e9d47d545a7e94475fc4885d160b8ae9f87fb8deafc50759c1448af42f55c933a2fca529f6cec4febf45f15c64e74ee716cb73e8d2c9dee1f07d2fd63f5ee553ec7765f0dc407db9f49ee6425efd41ce2f149201e9ff8bab48f079ecba483965fac8eff537277a173907b5dc8b8b553ef3da1cea788cc655b9f2cee95fa723a69d6d3fc703af4f1af779821926d796a063d75da7e1a48db4f95dc3a2557c77fba7f1ed39c0f4172e0fddd01b99f05e47ea6e4ea3242db78263d0f53471dbfa3d5f128d19c8fa1b891d78e50c723fd23fc89cb80987eeef0c4bbfdae0ac92d5d1acd0ca4f520156e2c834cfdfe2c75ec9ce5f3fa99d911742e53c72e5986d9451de74408b3ab6f0b9dde0fd8c2b40c32e7fa7c3b35221d3c399df7a8f379ea385f1d1728feed0276d02e0b3bc8a4cb42a58b4069e0c9edd2539d1fa38e8b9275118b033a9dd6723ac5da2899a7a37338b655d7f7a073d075b91f4e97a795cc25eab834a0f3323e9d85d2a17b37641bd9bc97cebe8ef5e3d7b5c897ddb5425d5f11d0ad2ca177a739e85dad4736f941c98e750830eea074d06c57069e3b039dc311b5ad63aa6ddd4ddbd600741dde3d139dc3fdf22c753d4ea4da2cc841759afc1bc256e57f379d9eab456ade33bd0b47d446967f83bcd7d57bc78bd47a4c3f07713b0b9dc3fd5559c6ed04837e5eb8dd67a679778d482e7f6625eca1e3cbeada894a9fce22396f699d8625de89d5a96b6bfdf31e5a9793d43ba88c957f7bfa1da4ebd375ea5825ccf56c25e2a0f2a3d72b6c0e7bc86beadafa346155ab67f451c7fbd8849cae0394eeba1cab11c97926f82c5cdba88e27abe35675ac4b3c3b5aa743ad3a6e51ba7515c9edf4cde83a1cbba9fb67a373786e534276df67d5b56d015d4de9a9db233aeea632209d9dedf09f1da0ec429ce2b3edf15440ee4922bdddd6fb72c6eae71b7c393ddb8594d3e8cb017391e73bfdf39e5a1fdda7d06d6dd5be8d75174965b950edb7d841c86ebaa36bf0ec3901be99744bc7f1745fcfe6f6bdaec355b9d8dcbe83bf7b2b3d7a24d2aab9cd771aba07e747a2f8e2f8a5d34595a7a27b86f8f441cfc1f1ac08f14f774fd509e25c15b79e22a9cf23cf3d3b3978481a59e709a39df6d6fda3f3fdfbbd747fe702142708a3578275b32d5da8ee1d8ce2adec2a86c79e949dc4fa24ae497970efa240fa9c1bb8bf17c930ddbf18e960ba7f89baaee2df5bcbbb3410975303baf61649e58cb82c35aeb1de81b0cf0f919697ab77fb06d2b2af4a9777d2c8bac29c967df438c39581b4d475b64e4b3dce87e37fb5bad71fa5db68756d80217d07220efdd4bd6b88b4d4f7af45724df7af433a98ee5f9f9c967d753bee06222db1fe382d6f4c8d6b6c40206c6dffe9d2f22675dca78ea676efcdea3856c9bd300bb9b7a8e3a634720704e45e9485dcdbd4f1d634726f27f4cd253c6debaa8c890d12c9b60ee79eddf67b258dac3b84d1d6fbeb71833b45b2addf25926d7db048b5f5bbd5bd2189f4972ce0da50916aeb689c38a6c79def41cf605bd5f7ef45724df7ef433a98eedf2f926c7dc04c75fd0161b675ac3fb6f50753e32a9fc1619f93455a3e14e0acf90e13c9fd9c617efa0c08b67f4e11e9ebc6cff9f2e3bacdf5b09257a0e4ef45e7701c1e0877b81fee4035fe3548ebdd4d5d9fe85f1fa8e7181e11c6f6d6c08ac0738f8ae4f6d4e703fc1f0fd8cac884bd35c7e531740fc76d94486e937c415dd763d2fa197dcdd4e6cac4f58beaf8a500bf114adec5e81c9e7b12e9af6d488f5d9e99b8d74b8f05687edd901e5f36db8ad415a559e836928ef35732c4394c993446249749637c3b189c6e7cf61bea99cbd23cf34d75fc963a2a7b89e9f2f36c740ef7bfadcee381fbbadf776b827dbf02a487960def5c9245fcbfab8edf53c7efa870c689e431b171eabea98ec8b51d9bebbd4aa5d378919ce7c7fbe9305433d2b6b83e837d7c5f1df558cc06256f4280819e3b4a379e9529ac34f18a1d2a92c710f47cd00fd4f94475ff52755e1878be503dff8c3a9f14787e72e0f9c9eaf91faaf3a2e4e7c5b3480e9cff2811b798ee273c87ae69de3f4ef019f688ba579c1cb6785e24f7ef74db798a7aee32f41e66a0efebf67249204e53d5f915e81c8ea501b9250156a501b9d302fabea08e7a9ce0a5441cc7bf83de413cc58bc932d3daf48f948ce9ea9d2bd1b967d3c3d2b5fff5bb6a2e24a6db1857a1734f464181af6f41092d2b764480df61e83a1c67a8fb57a37390bd378d7ecfa9678f0cc4ed48f5eed359bc7b943a1e1d88dbd14ac6277edc86f74c23eb27eaf8d3401a6a9b0579b30ce93a0ba5279ccf543a5c83ce3d1d86abb695f89930dbf65181f7af4d7e7f84ae5775fbf7d5806eb345f258d82fd4518fed196c52fc32a03b1acf6ad6efe701fdca027acf51e15e87f4d0d7e1385724d75173d5fbbf52e7f302f7f53c8c69ae3d5d1ef9b53afe461ddf5047d35c9f1e4fd6737df393d9c5f41cd03989777b698e07aba32e0fb3e9dbbca98ebf53c7dfa7d1edb701dd160474d36da974ba65d3efd2e9b95024d7930b7d7b1ba5e63f46ad56cfbf85f44a5787fd2120ff1825ff7a740ef74de3bb7f54c73f25cb48ca8b7aec779148b56765c7e29dc4bd09ba5dbd1fbd07e76fa3f8641aeb335d53e3f5b1c5017e8b7d7ea3d558ef68dddfd7fcb664e0a79e8b2d41cfe9b096a26befaa6bcb12d7624bd135382e57badd80ce3dddc67c10907bac7aee4614361c57a8ebfbd039bc375c9d978b64bf242d6f25d2a95c8579a77ae6cf81302a4422ff7bbcc6e872ee2d74bf33d2535fd33270ffb50e1de1fa4d2a0d1e490e33631a98eabe5522b92db14a1d8f0ba4ff717e7cc7aaf41fabd35fb7011bd287ade56affb6d86a91dc4ed3f9f12f481edcbf9996690ce7f8407c8e4f0e57cacfd43ef9ab3a3e1c9ea7ec3bc2f16f2afc352abc5bd0391c4f40b2d59c7fec44641327a8e35af5be1eafd2368ae6196227a167e1b84e24f7e7d6f96937fe91806cfdde7af5fc6de81cc2fabb3aaf54f7f5b898cea31b900e95e81a1cabd43b77a0734f87718ffbf633fe7c22ac6af5de9de81c8759a3eedf85ce216ed3939f8f6d54cfdd8dce35632ce79e809c805e313da7a6ff065d9e486f179a6b73fffa241556831ff7b82ea7decd4e9ef1da4beaf80f15c6e60037dd777f3107d9ba0d582b92dbaeb53ea309daff4997fd6f670843d763ff544715ffd8c94afebde81c8e5b4492cdc754ddd86cfbba1c3c059d7b7a4dac0ec8d91a90a3e76075ba6c53f7ef0bbca7e74cdf56f7eff7d36de2ae407c32c53be95afb98f40d59206abcbefc0e51281d516084215b376ffd6666076fe9f302bfe067ac0cb651ecf65ead317959af943edc8d628a28367a590f94f3cb3af432f9bbd27ba2560a7d209612c4d7528200e5eabc7f35c845bcc1bb3e5f7a98839378ad77679258ec1de1adf562b258e3fd4b96b2ca0bb64e34796715deef1d52de7a4fedd427334509dcc983efacf064fadeee5bbd2b1ae80eefbc4e6a582e7fef949ad648ed177ad71aa5effd36b149ccf68ebb6468a971aff7fe368559a1909975343bbd53d77dd77a9d4c73bcd880f685d216ff2f455a2345007d07c81ff0d3ae507a315c929212ffc7d02f64a073be50c9982c91c592ae158b42e9dbb5228560f838a6c6d06cdf3eef525192362e663290dc83650c1229bcf2a613cf1e72c669cfb44f8eda14512887e48764885a3ab0202f2e6789c344a17dfb7645a068107fcc845fba9f95e711bfff5cad7c2e7c027490955f7202c8e19e0aaf545b8e2acf9552f93aa95a3032a042a514bd44567a9ba53a7067aea776a58c689d3cf74bdcad9e2a8977667bff377b7fef94256c93a7564aca17819a1d65e2a556cd990050c9d7c6947c72e4aba255720fb5802b7d02766a8e4522010b657b6b401a33a7c2920db1b6aa35a633e2de371f1bfc688f57af7feac965db2aae7e777f7b73fa7491e9934ba8540ab535a550977c67b0cc354abaf4e9da1caf44fac08f996137c2c633e940116c6722d835df360ef7b64b2995deb3e11982dbdc8460216506781061849955a010b637202c02843d0c5a89f69d035a814284e40ea6c4e9d63ad5776ec60d732afd0308da93c6dd2b6ded1bd6b43b9ae84907cbf5acf474afb2dcabcc1679f72abde76b641315ae2ff724567a6183bc593284444f34f98df4646134ffd0205923d5de92ea28d4478eaa1945bc93817811d86b1f8319c8322e98197ad199a13395cdfa46cd665d28c9fda24aee4a49ee1f5572374af280a892bb9bb20d3c2f07fdf8b34d623046ff95dafe330ddea4cf2e03b3ce2e8364762910a621a5701a51d9e42053dac1c5c12625834937884eba1e94e0211105f7a4ac6d68546beb45a97c4844950f3699b1047432ab19aff4aef9637a73e55dddd1992fbb3935629957639d2cfc0123301aea796db84be4ee0e4d5293f4263e2c6b132f90260ebe399cda52e6df9baa2586b7402dd1c7241c0af81122b599fd99f79322bc1b2dbc2fa5f94883e6172d6a134af37e541e1b15358ff5a7248f8e2a79802993c9c2e29c3cd715e6c17e9319eb70b74bd3058df468ef0aefb8516a01d7418bcc9304e9b3e41861e87bcb226faeb17e69ad58c0f473172815889e7b5c161876e94c152f03a912609ca10478cd54bca42901065159697cd4ac34d82419b2d204830d15810dc1fc5b175903a68413a7c31962cab2b2b23cad55b3acdfc703791be510a12f6fa9801d904e95d9698b57e7ec548653e13d53ef8551a3eaa52899147c658706070f84ff63ce0e936476382a8becc0192b2a030c3559127486c1c9376528178af0155edfaf4cac93d9f014791928f9a95b2b1fad15a7c9c1587f8a2bc5de3ad2f67688491be863800b59c6065e6f5af0304af0e488820ba83c5e1c358f0f374986d2065c93a3b67c46506a9744557b2455a24e3594a89fc4c295a8a328e1a506e14fb509277c349515a665632369ac7a0c2578ba298f811a65725cb1c0fbbfdd7b0346b12a65ee2f909561a23428f0f27aadf717b4b127a2e7b77b4ff853ca61f41c4b19c561518d224ea5dbe18674fb2064ba8da3841f6110bea06d38e1e3a9b49b614a3b284da0ded826a7adfcba2db9342c9093fb05d29fa3498e8f55cb946b90e95a204ef78aba33bc63a3f77481ac07eae4bd02b92160bd2c6bc3a4e9044aff234dfa7741fa2f471a86097122556e1d6528b76221cbad434dc2a1e173b4201a3e33452e0d9f4914b659266c5089c2dc24b45c9be4f3e5d2006a9abbb7d52d5441161af42a947de46da2351b64d0c187b9d806f977a289026127e652a334bc603140b0e1a57fcc0d2f585e10970b7bf2a13dd5c02aa20ad53986423516a6509d4ce585b9545e9897535e2836d99c1c3ad9d1aa3647e7a8155236e4bce80d7e58c0d136d82b97633b255958564be938416e44d420377cf5c93540610ad31c1bd0ceae3e7c9925cc796281cc13f9d49cca1753a85a7ba1a1d67ea27db85abbc464b272ccacbe554d768e94900fb33dc664b6726caf348bc46f493d874927c90659a856ab42d52fba87c9dd95ea65b559e35d878217df9f2077fe81f6d23cc97bab240ff1ab94fd5ecac8174923cf773c29439f4a55008b0d1540a856752995859618b2d02721b3d0344aeda551d59e4ea9bdcca0f69e0ee1d43e8c12bedc207c71c770c20f3709878219561345e9211e410906d78d94e626f482753fa12ad053dc20fb0abaff572dafecf67ed779d7aaa48802e93ea7e7eec3683983625b6e60db3324db2329041511d91e65120ce6b9321bc169260d8f3609ee29fcbd028ded2f58d015befd3593c2beda80fdce90d86751d9fcf8a8d97c3625f984a892cb28c96ba24a9e43493e31aae4b926c990886b0d8908ee2b6112711e25fc2483f08a90c2e75319739da96c1a2da08f9c68a4fadda7c4b846a5d828a5d47b7fef54756e75d2f8088c79d4aa4e73987cbe80d273bd494f7f7d0d7828f9aec3f5f29d6aaf0eda122ad48514fa4a03facb42a23f8612bec120fc9d90c21751bcaa4cbc066448d76ae9d892b83ad9bb1a86e3624a9b6a9336709a48b730e12ca190d61890deda251cd2a55424369a2201f3683ebec33d644be5805fa55a1bb45356e3e1312ea334d864d2c06f85ea86c1f21c9b05cb29a49b0d485f0989f458aa44ae8d5a22afa0d43ed95468760da77639a5f696a86a57982443aba34e10ad0e588219bed5b1920a671b15cef69cc259650a0748ed884aea382a814f3124f0cc6ee112783525bcde207c4f48e1c753c21b0cc29f0e29fc044a78a341f890eee184afa1843719845787147e22257ca741f8be90c2d752c24f35087f30a4f0932823df15d5c8d7516aef36a8dde7a0706aafa7d43e2daada9506c985d2412c9f6b71820e8be1962bc07617d9b950c2861ea6753899c2a786943698d2056ae8334c2a85a8caab286b3ad3604dfb4366826a4af85906e1278634d51a4af8d906e17b430adf48093fc720bc678f70c2375189796ec4c4dc4c093e4f18da8213a5756e9779ac407e220e96bd6e535fa483ad076ae4c475a5b4fdc480939eb88675d405ca7aeb954dd779d63ec9bb1a46eb5a4aebf34d5ac3cc2b0ce226dacd7e57d2ef8698fc0a0bc458d5ea1e1b4aaf93291bb8c060034f8434b02d54a42f8c68037506c185d2e9b196b59ca55cbf2be4e03dec7bb0515acad616766bbf28eb3279af2c93c19f804f57aafcde6a4a6e685b5f2c88b635ec61d005540ed5b6de660a076cf65283cd96842cb7b653c22f33085f1d52f80e4af8e506e1e787147e8a4938346b6033ca48cd9a7a4aed2b0d6a3f1f52ed064aedaba2aadd48a97db541ed3e3dc3a9dd44956dd7980a7450259b41910299299b64050555cc72e1afc6f57da52abdabd5d28b6ab33c5f2eb3268c2c6e901580bf1dc13a39f8b149ce25d67b57b5d7d56ee12fd32a90cd317f7396025914542b5fbc2df24a837caa068563ae706a55c589aba8b0a39b3ba924bad69044a34226d1a954125d17b1fad94509bede94f6e0cd50e19dec484a9730e1eda60ad61ba88215f6290c3f68711a15af7da6784132ad691e29f5ed776dc866d1e954fadf642a5942a6ff1e4af8cd06e1ed7a85137e069526b75069726b4e6972a6291c28f46ecbc688d3ccf39d4509be3da2e0b3292bba2362b63b87127c6744c1e79a0443dadf25527d3b414018dfcef3282bbcdb6085130f0e6785e753c2ef31085f1c52f80594f07b0dc27784147e21957feea3f2cffd39e59f8b28a379c054a681ffdf3aef1f8c40d5c9d25ad7b1b55ea90f7776c8ae22d487612c6c2fa5c583262d7a376b51e4fd869a17e6a67cefa0dc75b898d2e121930e072b1da678ffab646708ded9e5fdce5d834b280d3e67d2a0134a0b5843042da330a15d4a99efc306f39dd13b9cf95e4699ef2394f93e9a93f95e4e154d8f198aa6b6218ba62b28429f3710fa2824a12b29e18f1b840fe8134ef85594f02f98d236a4f0aba9b4fd2295b65fca296dafa1b2c313e98aa6e2162e9aaea5b478327dd134b9058ba6eb281dbe9cae682a69c1a2e97a4a83af642a9a8e93e1855bef7083293430dfaf1accb753df70e67b2365be5fa3ccf7eb3999ef3e0a197c48274a73ec268ace53063ad785a4733345e79b149d6fe544e7162a12df3644e2bd9091b89542ff9d88e86fa3b4feae41eb39fdc2697d3b85fe7b14faefe784fe0e2a124f1b22b13f6424eea484ffc020bc5dff70c2efa2843f63101e0f29fc6e0aff0f29fccfe684ff1eca38e1433b64b536a585abb57b292d9e336991a8d68a5bb05abb8fd2e1c7261d74b536b505abb5fb290d9e3769d05924aab5b972c26b7bc891aa0728037ec160c01f8434e00729037e9132e0977232e087a848bc6c8844dd807091f81c25fc2706e1cf8714fe3095dcf0cda628f5c22394d63f33683d636038ad1fa584bf62105e1d52f8631492574d39002623d28fd3a78ee4461bb3f7c74ded1ea5ff3c95403f37245063c8047a9c12fe0b83f07d21857f812a325ea38a8c5fe654647c918ac4af4c8406858bc49728e1bf36085f1d52f81326e1300cfc7a3645469a61e0270d820be5de41ad33479fbaf352cbced1ffc6c4cb38470f1f5e4b3f471f5d576a8efecb942dbd69ca6d216de92b26e13095fb5b11712af7ab94e4df4595fc359364280b7f9f8dfda72934bf6eb27fb9c3d5c656b17fbe4d17dfcadaf2f74bcb1f9fc6f239365bfc06653c7f886a3c4f51c6f3c788c6f34d9360c8a66f1bb2e9fb83c365d36f515ac3d788529a44b029c02cd91daa91cb524c0b9a0a6473a920a4efd9b7293dfe64d203f6540927ff3b94fc7723a6ce77a9d4f9b32175360f09973adfa3b47e8f4a1dc8239b551351a7474df37e1fb97a067e9f8ae45f0c91ac1b1a2e924f5391fcab29929003b59f81df9e4d76d30c13ad1f5021ffcd1432f4c97daf9ac2e69dbf0b9b37c559e665886a11d69be3194a83f74d1af4376ab058fed5287710f05bfdb9ad1bfb21a5cbdf4dba0cce5217c3c74a42e8f42c6578ff3018de65878433bc1f5111fe67c432e1394af0071105ff9812fcaf88829fa738ffdbc0f991909c5fa0847f6810be635838e12f52483e8a88e4259360287dfe938de0349da1974d82a11ffadfe61b817ee8c722977ee84f28ec9f18b02f181e0efb4fa948fc8f8ac4a73945e26754243e3344626fc848bc4209874ddb82c29f18114ef8ab946142eb25a53885957c2b04de26a65ab6b175411e17e36485b74dfd4e5e855020cffcea67a2dcfea25ed6fa7e91db20eae406190d022f03f707956041f38e40cb4087d328bf4bd520db77ba382f9085797548d7be9f532cda9858c0763278af39bf9599a860134bb24f951ad609ec34bb595641051925147b4f875db9f10bca60da1a0ca65d488379cd241cb254bb1891a5dac772c952bfa422d1c1108978c848fc8a4ae98ea694061f78f310e91a35b80a2b5fa077e16f51942e4de369ef8e93eea8feb06ac2ae9373c07669197a0835f95ea3b4ab46432eda2035dc8e06607dd9db55ef348c7dfd9a4a9a4e86a4993e325cd2bc4e254d6753d2404d07db91d7c99938bf088081089df9c244eb3754b4ba18a2f549488b7b83ca365da96cd32da76cf3261589ee8648bc12326d7e4ba5cd41a6b481d8cd17dbe570c706b99d41b4f4f91d15b51e86a8ed0b19b5df53e9d3934a9f5e39a5cf5b14c2834d088530c4220da2fd94f4de26e970c34f86c21c76b8f803951c7d0cc971dda870c9f1474a785f83f0f7430a7f9ba2d42f16ad31fe0e25b87f44c17fa2700c30e5ea9038de35091f201fcc42eb3db4e03f53380699ac118cbd301495f728f9834df261d7c9d4a9d025b21ed4dbe824ee849b6efc0ba5c91093262001c6c2c35ac15fa950869a42e922847179559810ff6608b1507e8b02b683c9d7ee00d97c53d93cce7f480cda0dc96064916d1ceb1f1683b1febe29314bfbe96182dcfba6b482d38258eaa7918f59724ec75b87bcd0262569dad349f377ca18869b8c01f6ef043f197f26bfcefb4b7fb1be36a4a9ff830a778429dc1e64b8db54572d4cd8ff3499e3d07c9b63996c64d7e7608e233d44a303882611c6388a30c674a153c6f881899bfcc4c7ba3c72c31f742e977b5fd67a5796c9ae8bdf116ac881e9e858d8edc8c748b22353629eab7e14f57f99720a4ce28d8d459cc4fb3725391e55f28794e47151257f64920cad92f1b1e85f51f90f55284d88d8f0fa2fc56362541e1f53920f8d2af9134af2a4a892ff47492e8c2af9534a725154c99f51922747952c6284d1154734ba984930a83c25aaca6d4c92a16d50928dca69bebed49652796a5495db51944b23526e4fa93c2daaca1d28c9d3a34aee48493e2caae44e94e4c3a34aee4cd9dc11116dae0ba5f28ca82a77a56ceec88836d78d127c5444c1dd29c14747147c904930ccaacfcc46f07e5a700f9360680fcc6a81f6404fca346647358d5e26c9f07c59363cd27df998023d2722e8de9469cc8d681a7d28c1f3220aee4ba5defca8a9d78f4abd051153af3f957a0b23a6de000af23111210fa4042f8a287810957a8ba3a6de602af596444cbd2154ea2d8d987a4329c8cb22423e8412bc3ca2e06154ea1d1b35f50a4c92617c6845362a17d08287532a974755798449326cda57918dca7b69c123a9e45b1931f94651825745143c9aca22c745cc2263a8d45b1d35f5c6522c8e8fc8224e093e21a2e07194e03511058fa7209f1815f2044ae5b511559e48093e29a2e043a9fec8ba88fd914994c6eb236a5c48695c1951e3224ae30d11359e4c695c1551e3624a707544c153281435115194501a6f8ca8f154aa03b5a9053a50a5148ecd11714ca370d446c4319d2ae24e8e5ac41d4681ded202a00fa7d4ae8baaf61194da5b5b40ed1994dadba2aa7d2425797b54c947514076b40090a329b54f89aaf64c4a727d54c9b3a84cde103193cfa6043746145c46096e8a28780e25786744c17329c1a746143c8f12bc2ba2e0f994e0dd11052fa0049f1651f0422a879c1e35871c437500f744ec002ea2589c1191c5628ac59951592ca1543e2ba2ca4ba9aee5d911bb96cb28c1e74414bc9c827c6e54c8c75290cf8b08790555f99ddf02955f39c5e382a83c2a281e1746e4b192cad91745ccd9aba806eede880ddce328c8174785bc9a827c4944c8c7532c2e8dc8e20483e0c261de690c3ee061c34e1d6b94d352cbed5970998999d1c1e9f2187802158a30bb75e4a22fe5f8b4c694ec903a576493eca03d21f844936038bd3296ea54a97fc23855aea54ac9ab5aa0943c89127e750b085f47950ed7442d1dd69b24c3f3d766939a69665d2a4d82c1b9f8ba6c040fa3cd640325f8fa8882ab28c83744855c6d920c3ef83766a3721a1ffc1a4ae57d5155de4865c69b5a28336e320500f67473364cdea0056fa660df1211762d05fbd6a8b04f36557805de690c3e0fda1a1ebcbac208e7ad7b5bd695d8edb2121b9812bb6c74a02aa62d54097c470b94c07554e2df1935f1b7526adfd5026a6fa384dfdd02c2b7532dcb7b6286c50273e4e90acf58cac51cb1a879c38ea502b64c395526f01695f493e4b28285defd65de9d6dd2a4e18ab9fd62da68109ec6a6355b2e55f457f986db1b7b0715cb7b4db1bcb039962bbd9614643a3f836e957f2f549ba8d6cbf5c47e065dd8fce4dce63d729257e1d72b1ee5c2ff5260996892f102b9c9f41212e0f9707a50922a042c48d824ef2633c59935c87b952727ece2935328d2f751f68443f4e334c57bc7a7b5dd2b14d779b6512fd3dc8f6d85da9728a86de25dfa7a4bd9533d15cbfb4db13c2a104bccdc8fe73cf5d5bc4a83d527a710be932eafe0b7c2c4ac818ad903a6981d9d55facd926bf16b855ea4113de51277c2c4ad918adb83a6b89506e2b644a6ce66153338dbd56a3169a262f290292697e5b93c4bbc03bb2ed4795261697935dacca92184956376742ca02e6992cd0c5cea4103abe5cab69d14f5cf99a8cfca2a6f2c16feb6e036946aa752f17bd814bfc58c5605574f91c140acfce670ad0cba569c262ac992249754dd45c5fa1153ac8f4c1b6b5ad315322efeee237e1c756d0c57ab14a1d47c917b6aeea6e2f5a8295ec7876ed995cb3bc96d3b9304ffdaf2e672a0deab0fa0ab13a525984b3a9f46f178ccc463515eea6ceedafc742ace9fa7da29e16c40db30ac5eaf9282703a87b5883031db43c5ec7153cc0e2762b652e6cf3ad536f1bbdabad7b24ae5e2ea94d4e0e9a39c41c5e80ba618cd632c7d75aafa4bc037087fffcf968be999544cbf688ae90c418d929b4a8ae418e06df681c90299caf5b23754e5d5b8bb5b30566751b1fa52367d82e470710b61a54c857aef59c8879bd2d47ec9325a2e666753317bc214b3b28c256776bd02ba0c4dd767cdb5a43c878ae393a638ce276d125abc1bbc87745cfd7d3d121f3e495f969865b6744d782e15d72f9be25ac3dc7b68949faf004a7eef6095b4f6dae692a765fac3b9703a8fe2f41513a795add6cb4a4f283a87f3290e5f3571981d326fd890232ea062f835530c17868ca1fe9a9f39455a23be1752f1fdba29be2b182dbb2187b6464b10b88822f08d966a83f865db2cd402e18fd55e2a564f5123146163354f3e919a42c132277bb961e2773115bf6f9ae27744849663a3ac8d6043998daa9f47c7aa22e5d93071ba848ad3b7c2a559b0ecc1df57c864799cb5c7a554fcbe4dc52f4c9fd18feb7cd58e48dc85198ff4adc3966a395e46c5ef3ba6f88d12e947052b3cc21c5a5e4e69f9ddf4637b6152a13ca754e0b4bd2ba8587fcf146bfaeb4915cd53f5b88c48ec660df56193b12d96dbf8fe9594dedf37e97d58c61ed742393708a38f75722fe3b962abdc342bb5ff9b2e0572ef415e45c5e769aa05993e8f406f78b96c553518ead56ce612a035b2b10563783515c31f64d34736cf0d2c94b607e3e0956a8c2a35bdf2393f700d15c767a811aa6cc601b289656e2546ee31bd968ae90f4d315d90556a06677afc7ca8e3dd9ae97a1d15db674db15d9d315d7947c6b9c7ccafa768fc881a5936d719a91ebcadd5c2bc818ad173d43846e65e683639389bbe6cf8fe6eee767e23c5e1c7260ef417e5e85e83de32b5a56c711fa5f1f3268dc764cc9989f99a1a7915fc195aa6c57213a5e90b264da7a56969052d3d5973ff93d589712f8efc7233159717b3f161a2eab9b996d571b750b17c899a0f0d57cef97db2d4bba973dc7af7663a3d53a5cc9223ead0cf0813e75ba938bf6c8af3e840ca26c2e4ce4db7517afec4a46771404f5c3e05759eaf74ceb65591eb48cded540c7e6a8ac189826f84518f0da49b63c016986dced3ef84a1720745e567d9cc11ea10c3942a89985139ae654a933ba998bd628ad909ad9cde61d239d71c701745e4d56c7a4b61db5ad1dbcbb9a7fddd544c7f9e4d69552653d54fc146340ae65b41a928c9103f5349066f8589c13d540c7e91bd671f84192667e2f851d75b2a85eea5e2f71a35fa97be4593d87c3da8a3defc9ece5fd4c6ede9f2646eb5fd7d54ac7f99cba8939faae5dec31b84df77ab12adedd17c3f15c35f6593f3cc84736b2764eee174f4fec562b0dc66ae94e28fe16d97ef40abb070b8772b56d45c334c6a2ef12725d50e89eb10fe562f35204f543497edb0dc28bd845f7b703ab411fecf58f5b117bf42347c47bd4ccaaf53e58db6d6499290eff908cbb42679adc05af9965e98952916a65a6e12aae770ec32c7692db1d02a26bf21856579a44700e9032da6af43aa0e55a9daa610be1e119b90a33565d6e237105a5bb30df54f218b738749775fc052357a108375f5eb6430cb656797762bce1832ae2b4d211f2a05e8f66046712b5111601237509a9befda552ffc01cfd73d991ddbb72982147983131b2c459c23db7d3b3c70bec78cae7328800d4e20dc1f4b207c9313217c4f4f776b17c8493f1090f84ce532b1c509608f774a00fb2d27b03ec2ff7c529148f8b2b80cae67d704b8df71823bd8000e04c22789616aaf495ead7602da7a9180f67b6e6b4bce9ef3bcdfb5ca6b4afb0ef856e702b878b704b8b738c1f593edd186acab0517e05d872a85fd9cf0baa2acba2c6904c6054c43862430fd811353678429e1f0ed02a2bdfd1288fec889a88344d4e05419d5ae7b02cedb9c70607f9365cd6d7e3dd1e54fa6af90857e9300376228e697aba12017003e8132e03b9c003ba10c086ac2dc9f0b805eee9500f427ee126a991c6c4f6ca8e0460b6b0fb2a177f36543da6fdf0540b7f64e00fa332720d8de493741e78a5d32d64dcded26706aaa96adaa15d2c2aaa5bdd57901ba00117e34c4f73821c230158607433cb01eb1a679e7be6ac71ba77dd0a0cf5f38517657659ab6b7ddaac65c29fb8f2ea0da87cab6bfe6abf7089d213c7faa3b442eb5cc3eea9800f737eede23068717f5cc92fd4998d2482c5f7201de1e34d0f33e27bc6ea8464dac51f157c6b900ea09d43afb3bf7d8eb1299fdb604b65c98e33d5e2f437201d8fa360960ffe00476902afafd520b84cc6d9e6972251b3e3b2201eb9ff91d3a4c769fa976acf0af4323fc1ff00f5443bb6b8e0cdae556d9b3ed13d0fe958f5619ce9abb44ad70a7c7593d3281eadfdc1973ae9c896c928127f6d249ecadd4e0f50d6abdf05c00b71fd9d887dcc53fded2d2c599237077d1b03ee29fa7f45d0ab64b316ef72f67202bfb0ff7a8ec0a0f5a99c87e5b3a1700ee959da78eed03c2837ea8b97b0585a34efb2ff510fe58c90e79b551355592fc9946798f58a7f97fb13f523ce771b378c6722e9ef55c7a3cf43c683c47a79a7856bd9978c481b078084fa978a822309e75b32f1eaa028fe7549ec4430dddc443b5f5e359f9fcc44339bac4438f989874a65d1be2291389f1b4c30c71e3d450dc38d81f27e671e369a6c1e3c4cc4a3cc3e8643ca739bf78c68e6f3c43fb3be18a6b76a12d1aeeddfa38f6ffb7976c1178c97e0210608f7cf8f15b1bffe36e6d808df94ed15003a4dfb865b257e707741892a243f2e72674abc2a44de7a476c741d9443097b64717e4b9f2a94d388b9dc43903e1fccc269c539cc45985708a3679c0b989048ad55f27a68a523e9cddb8703e2212386336e12c7112e70d08671b9b704e7312e79b08675b9b70963a89f35984b39d4d38273b897339c2d9de269c539cc4b913e1ec6013ce62277156219c1d3971f65538ab54b732b8ac1d2f992ee203d99e0be4fb0864274e904345620823dbe12478be5e3eeb5e537e3602db9913ec3081c797b21f5f75196e0182db85136e3f91bedb89c5414dcf86b223174a81ba9c5d3951f650284b0340fd914778880dde202e784f203bec960f78d3f30f8fcdf25e44f0ba73c2eb9fa10e4fcec4ac7d7336987f41300fb209e6340761fe15c1ec6113cc120761fe19c1ec6913cca90ec27c0fc1ec6513cc620761be85601e6c134cc6a90b3698fb11ccde36c164ec95b3c17c1dc1ec63134c177b38bf4530fbda0473ba8330ff8e60f6b309e6610ec2fc0782d99f13e67805b3ce7ba84e1ecd1f4d0df7115dc692b53717f25568b8630027f22e12f966e97ae5bb826d92f0dc1b6ceb86ac74606b0eb6256fbeca687d7bb8506e46d6378813e5d8940c5f2985cd13fabb41b3bdff609d3be570709348b76f2a2b6cb6d2b508c11e9c0fbbcdaeaa7211e55054040ce1447988a108c8f63b0bac68f772a11d81ac7428b795ce929eeedb957f2f6c83ab3fef0a1ebbdaebd9f72577afa26a87acf4104e947ad1c364efff561578a5acdfe1aacb63f2e72084c3f28170da0187f06b08610127c2de2231f1ab8fc12f6fba3ac1fb150471783edc65b2f77a679c1d62c339085532236cc2c9ea7dc4867326c239d2269cacbe716c38eb10ce519c387b36d7db4507d03cfadba8ac1c6d8f338c8b03720391258ec9074aec0db7d86b84cf57cbf1367a2fedca470dce86f254649563f9078af110db3ab145a29b2d97ed6d51a2e0f3f1359e8894dd191cf033ea8e60c6f3d1ff6e948b861b9a8784f59a467d348d1e4de69c0466437b33423b2e1f131ad93a6633969f6c6ed93310ccf136c1649c6a638379188239c126988c8e336c30a72098136d82c9e8d2c506731c8279a84d30199d0dd9604e473027d904d3c57541a50866a14d30191d67d8608e44308b6c82c938cfc30673208239d926988cce866c30e30866b14d30197b406c304721985338611688d4f1a3701e478cf53b9bc7d13434a654d29a1e73c1c162c652946da8782cb2d5a936c164acdfd960e21d404bf331ee0ea39d3b85fe28709e267ad9f0f547f8a671e21b88f0a53a7281b0c472699727327e84804ecf87f341d101e77c703642781827c2ee32369bd50bb04760851a818732910d5c0117b88311b8c3f3617ba5079ced1d8e101e61773b92713898ad1d793c6a47cec8975f51626e124fafb1cf4ab2cdf69c856cf4487b7c825d5c8a7a04427954be9a3f99360b76d9e76d1a027ab44d5b444d75728ce8018473a64d3859d7f7b2e1bc02e19c6513ce694ee2fc25c239db269ca54ee2fc26c25966134ed65db2d9702e4438e7d88493755b67369c3b10ceb936e164dd749c0de78908e73cee9667761fed58215583cf8630b63c1770012d4640e7e7631bb32981fe7b1e863dd816f0d521780b38e10d16d9ae8d4c5e28cde8c7b19f0bea3234d8b1d046a88c3d7636a84b11d4636c84cae80bc706753482bac846a88c353c1bd42108ea621ba132fa79b041ed8fa02eb1112ae31c3a1bd48311d4a5364265f4f260837a1082ba8c13ea14913a4a9fbce0a54c243ee1e54724f98360c9df174c7c97ad42b668f5703563224c622b8345221196dbb3acd0c5cd797b237b3ed6dee55b8cde756c137a2f232b5d61cf7e74acdb04b0d9e9690866b94d305ddc44fa2204b3c226982e6e22dd8460aeb409a68b33f7bb10cc5536c1747113e9cd08e67136c1747113e95a0473b54d305ddcb46f298279bc4d305ddc447a198279824d305ddc447a2f82b9c626982eee5973318279a2dd6eb72e6e18dd06f5ddd7727bd46bf7c58d12ae965dcbb9670ddb970505b2cb93f2bd676cf6c31e2eee593318d9e4ba7cb9de2e91239a5b02239e73bcd7ea65882ebbde0e42b6ba9e13e841693379031fba2e6ce5234257d99a1ef5ee6f11d007a1dc908ff598f0d1da03673de6b1085f951d9b94fbb3473ba4c5faf342ac96f90617da4da8c2a9b669c353d6ce249ba57644386b6cc259ec24cee908e7469b704e7112e77108e7264e9c2345eac2aeb9629700d78526a15d6b9779af570be846ae9060fd6f15d4e5a7c5d98b0b726f54596db6c9257caa933bd23d8470d6da8493f59bad6c38af44384fb609e7342771fe1ae1dc6213ce5227717e17e1acb30927ebdc3a1bce6310cead36e19ce224ce7a84739b4d388b9dc4b916e1dc9eafb1ce72d9aa6cf224cf12f075ac556ac957b55cf255e3f458e74908e80e7bfc3a5d7457e88a7a4aa7e4631e536fa0e62f42dc20bb9afa21d7b70fda80ecb23e1f8b100fa46fc01c89e035d8eb61cc5801b14db6dd8dd036e6c32ea7e5df2ed9068e9f44f09af201efb0fcc363b3bc9710bc9dfcd5cb66c39e4ae51e932a51a514da2857b8c3d09b7bcd9eae08e6a9f6ba23300e18b3d9693fd40cda65cfa66a2e7a138f4756badb8e394cd3879619d1b2edd3b01259e96936cd12b1ba1db295a76310ced36dc259ec24cee508e79e7c7425b3eb95173be95fbc08c13cc326982efa171f8b609e69134c175758ce4730cfb209a68b2b2c17209867db04d3c515967311cc736c82e9e20acb7908e6b936c174b14f5486609e67134c17a72ce62098e7db04d3c51596b310cc0b6c82e9e20acbd908e68536752859a72dd83a943d11ce8b6cc2c9da3c62c37924c2b9d7269cac4e326c386b10ce8bf3f1b99da9e240fbdccead2281f0927cb869671e2a4e5dee32cb135a2fd701b32e7cb93cc604790db2d34b39210f5590ebbc8700708df2834f78bf271703d8b18b112c9bfffb5108ec65f958b5aec1ea0fe825cf73a66b4eb9d8329d88f05ede9a537279db8c720f17ca7751397b0527cae112e542efa1151218ac09dea95e4f58eb3af595a3d9720bca2deafe3cef58e38965dc2880ad2dd01901bed21e874417b3fd7f10caab3851f6c98052c794d5a1611857adbf01959e57dbbda50ae3e828db962ac508ef35f63a2b324ed6b1b9e2bc860a806bf3510050f57ea200602c47d90a80bf218cd7716ffab35cf5e8b543f742699990edddabcb7b2270d7e7c3fe8a9a6db05a7648fd35c3ae6f65f15584f106ee816500364706dcaa5f375ac405b304c1bc311fed4bfc9df66037d3ed31a7e710ca7df918b62b39e086ed36218437e5634409ac71aeaca39ba412f029e72a99c9978953e5405dbd68900da41dc2e5756d5311d89bedf14276d2b106a1bc251fab364a02bd2097ebee0604ef569bd6ff4ee5ec8bb3adffbd13e1bccd269c254ee2bc00e1bcdd269cd39cc4f90ac279874d384b9dc4f92584f34e9b70b2ee33c786732ec279974d3859374663c3b90de1bcdb269cac0e5f6c384f4038efc9c776a7f0d5e10367bbd33284ef5e9b3c92583fd7c48673189a94b8cf269cac6b33d8702e4438efe7c4d9490aa8911f5eac17be4f927bee301d50667e8013d75811e68b97306ed42445e22f5b02b53ccc929771c12e44b01fccc728260cc1cd1730ac06836f9be43866bdd3836da720840fd9e3b3e1e262d501a8a4fc1c27cabe02e61a6bd45499ef5544cdf8307e8980ad0ced846cf2615bdd0a589bea6c6e05bf47681fb1152d6b1f9d0ded8d08eda3f67c0b6b8a93cbab7f88603e66134c1767815e45303f6f134c179757ff00c17cdc26982e2eaf7e06c1fc824d305d5c5efd3d04f38b36c1747179f5d308e6976c82e9a237fbb710cc276c82e9e2f2ea6f23984fda04d3c53efbcf11cc2fdb04d3c50da67e85607ec5eed5168c7d22b6d51625687ce9abdce34be986ea7cd54ba5b3176375c4f641db8d08e4d7f817022683f4078a61a0639b38468ec9ef483b25ece2f72fdba282e0ebf67870bad8dd9c84507ec3265785a99c55149b653e8e703e6513ce122771de86707ed3269cd39cc4f94784f35b36e12c7512e74f10ce6fdb849375492a1bced508e7776cc2c9da5b62c3791ec2f95d9b70b2ee6ecc867323c2f93d4e9c70a257faba374bd90361fabe4d56379573cc9dcdeaee42389fb609678993382f45387f6013ce694ee2fc05c2f98c4d384b9dc4f96584f38736e19cec24ce7908e7b336e1649dfe65c3b91de1fc914d3859372b67c3b906e17c8e13e71091bcaf21706812307d11dccd30b8a080716898cddf3886c6de7fcc89754c00eb0691ea6898bd4b22236ab6a6fe7a84faf97c78c74f1707da1e1f4fa142e0857cb8cb6a6b6d90f60745c03c05afc63809e7eebeb18721eb7cd19e85072e7ad17547285fb2d7a99b71ce9dad0cfd022a005ecec7062a9303b6eaf2676f8f42f07e62b73f08a38b229b3f4821caf63fcd47831f6f8766cae26ed7f53f46d6fa334e9ca302757d9dc04b09cd1bf2cf572fe76d17ee022ecc05c86a5fb1c737c4457fbbc5c8625fcde7d6fb90f1ab034b100fbcaeeabf11de9fdbb49100eb701f1bce4e28e3ffc2269cace3536c380f47385fb30927ebe8291bce7508e72f6d1a3d9dcab9e4906df4f4515476feca269c254ee2bc09e1fcb54d38a73989f37708e7eb36e12c7512e7f308e76f6cc2c9ba81151bce1508e71b36e1645dfdce86f37484f34d9b70b2ee07c686b31ae1fc6d3e36fb9bdc1a63a26c7df67710bedfe563401902de282d51cbdea61e710f5e0cc1fb7debaf80d3958c7b936f3d506fe72d5b40ba388bf911b2c8fdb680649ccc60037904b2c83fd802927120830de45404f28fb680649c556703b916817cdb16908c4b58d940ae4020dfb1052463d39b0de41604f24fb68064f4ea6003791202f9ae2d20196720d9406e4320ff6c0b48c67d68d8406e4520dfb3c71bcec56dd0da21947fe1ee612776d306451b24874d72fb5d78cd3d972d985fd3f0fe9a8f8fda255c09cd8e2f1572a407d06e94c2b6f27614f7b2657004f66f9c60478aa07791efb095f0230681fa13f474d677719fb94928ebbf9fcf351b3e5070e18282608eb1727277bfa41311d6bfdbe3b2e5e2e67d635031f08f7cb86ae37a3efb1296112d5b097b0cb2d27fe633f3d77a4aac425f23c2c2f3e6afb9870b6b35c2fa413e262ca61e40b33d0fa3ecfeaf7c6c2f995db37eb2937b754e4196f86f9b60bae83b5c8a607e68134c17bf56300ec1fcc826982e7ead600282f91f9b60bab87de45804f3bf36c174719d651cc1fcd826982e0ed38d44303fb109a68b5f2b188560fecf26982e8e220d45303fb509a68b031e8720989fd9b44c85b50a625ba6d217e1846db6adc159ec24cea311ce984d38593fe7c486b316e16cc38953fb06c374ef81f321f0592281af2d27be3e02b630ad54db4c81a86ddee39bbdc7b7cb2162fc0151f730b64718db71621c2612fb22f8733feb3c75211dab240f981a9e256089348cb7577a022083570b97bf175c8ee0b6e7841b6daf19c6463cdbdcfbed086d07eeec9fae32d231659db0181663c258892aa18e9c186189cd0aef8f3a595a42c6f667d6e16ff7acaf17b2be4e9cd80a0cd6176eb31ec68138b6cd7a2623abec6c6fb9c9382fc466b93f4596db8513ed70897681b44fc8f855deff5ab54d9f9ff57da79a2d3201c08eabbcbf7df1f3bc231415d50ed6f95d10e0aef9a89828ff8f3269b1ccfb718ee2aa98fe893076e3c4a8c79570bb5437f213cd7eb7dba1fd10ccee9c30871a60662e02dc053b07813d8813acde35768a38d0768ddd8710f6e04418ce5fcec599f5f908654f4e942342a02cf7c204218d6299f7971e2869e0ad96c670554b1f20c4bd38110f14c97e733b645f69735a9b7571fe68096aea1f9c8f41e56c379c98eee4c744ff84ecb3b74d38a73a89f30e84b38f4d384b9cc4793ec2d9d7269cd39cc4f93384b39f4d384b9dc4f94584b3bf4d38593d43d870ce443807d884738a93384f463807da84b3d8499cc7239c83f2d1732f92bffd23cc7b960b7f78c4ddc18ff508e1e07cf4dcb373fd72d18dbb0fea050dc99735fabd7710b44b59621ec691f67321fc3ab2c6a1f91877078435cd2bdaf56dd787e3be83301e92dfa9b703fd630e0310da61b6ce6ab2d6e66cb39a6f20b405b6a2656dc6b3a1bd1aa11d9e8faaa9f8809be2188d108ec887a727ec019b774f4f366f906108dfc87c4c0567374354ece41cd1bd08e6289b60bad86cbf0fc11c6d134c17575f5e8f608eb109a68bab2fef4130c7da04d3c5d597d72298719b60bab8faf23a04739c4d305d9c3dbf04c11c6f134c17575f5e83604eb009a68bfbcfdc8f604eb409a68bfbcf3c86601e6af77203c68ccfd6c1ec8c46df27e563e87872b3bd56cb114fdf27cef51599df40565a68d30ce554ce12946d86f2f30867914d384b9cc4790bc239d9269cd39cc4f90784b3d8269ca54ee27c01e19c62134ed6556e6c388f43384b6cc239c5499c7b10cea936e164ed1bb1e1ac41384b3971ea5d628b038d7a9727d3b62078d3f2b1c805fc3ce608d8ed6387d7e3a9518d767f694b8d14582905e07d401a9c76ec1a81104fcf4776a7327bea36548c83746c383ba0eee56136e1641df364c3391ee13cdc269cac7ec57c7bd4209c47d854b74fe59c7863abdb3f87cace1936e12c7112e75508e79136e19ce624cedf209c47d984b3d4499cdf47388fb60927eb7e9d6c3897209c336dc2c9bac1241bce468473964d38595d6ad870ae43386773e21c27824bffa1f359edf100df771dcfc482036ab67396f757bd9ca063f597bf3dc6b5e20db54ccb3881ebef655253c8c9252b1b48b6ef650e47963bc716902e7ec0be2f0239d716902e7ec0fe5c04729e2d205dfc80fd440472be2d205dfceefae508e4024e904581dabd895c3144af892bf39ed8eae9b35d9e4154f354d75fce55d79f80eafa85f97017cb76508f717e896d48af2d82798c4d30197deff83648473017d904d3c5c1e67fa15276b14d30199bf56c303f443097d80493b121c506f3bf08e6529b603236efd9607e8c602eb3092663cb940de62708e6729b60baf8d19dff2198c7da0493712d311bcc4f11cc1536c1645c4bcc06f33304b39c1326bd47f73cef77adf03fbb53e10900c1eeefd1bd0a81ade004eb7fea7eb1f740957409c3cb635aed3b076c8b663a22ac2b39b186dbfdcbc595efdd5017731527ca68bbd730d6f76cbbd73c88acf438bb57ce31f69ad80a814391e5aee6c4db1b555a3b65a5046eb7fe37e2f2b46e6e0f17c44a64a3c7e7639e1ed7fc5475c55edfb3d9e42108e709f9284d53b37c36e5a98b7b81f542d97d4d3eea7c6ab629b9ce77711b8c09c84a4fcc47733f973a9f71bc9ecd462f4360d7da0ad6c52fc75d88c09e642b58173f657a3402bbce56b08cad5336b09311d8f5b682659c7962037b28025b692b58171b588311d80db682651c5d65037b06025b652b58c6390036b0bb11d86a5bc1ba3872b51281adb1152ce3682b1bd80a0476232758bd1bf354d10abb31b3e13b13e1db64cf18808b7be42d422837e763e02f7b6f2817dd1e87a3d1a95a9b70b2ee52c2867331c279726bceee0707fb5cdca8b502c1dc62134c17376a5d2d61766c1f103e2f457899cc869011ab44626b964962be00af797ff3962aef7cb16cf8348af51e8e35debf7029b0d6fb67ba1e93fbefcc15bbc40e7915e4554bd95bbdbba05983281ae53d520706d15119445c567cb33ce68dde33f0d974087db72817fed633cbbcdfda51a3492289cb7d2513dfaa8710e0ebf59b45bd8c71f2d634f15827c9c9ff7411c40b00c695aefa73460b55955bebc5b9526a52ef3dd34e86e3176ef1587774a6e7e216ca066383d4aabbb485cd8a1c3894c0ff4dde3f7812123016eba5d20cf45d22e35ae9c5b1521e2b9aa516c2173462a5de2fbf693aa9b9513a49ad85d8aacef4f5cc3221c5d24bdb0ac91233e7d3ba16b3b54c31f2b307bcbf51fa8ed448a90b33c63473fc68bbed9626550ac7405a1cc8f1df06e9ae925d9a69ff5857efaf955ecafbc2e16354f5dedfa0d4458bda88f6ff0f2ad7db90a5210300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/b827233598ebc8444923892722b40418.asset.meta b/Assets/SerializedUdonPrograms/b827233598ebc8444923892722b40418.asset.meta new file mode 100644 index 0000000..9470061 --- /dev/null +++ b/Assets/SerializedUdonPrograms/b827233598ebc8444923892722b40418.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c140fa1b6ffde6a4aa0366bbb8ef0b71 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/b8e95bf9755820c4380659898968aaf5.asset b/Assets/SerializedUdonPrograms/b8e95bf9755820c4380659898968aaf5.asset index 849fd8d..7c3f049 100644 --- a/Assets/SerializedUdonPrograms/b8e95bf9755820c4380659898968aaf5.asset +++ b/Assets/SerializedUdonPrograms/b8e95bf9755820c4380659898968aaf5.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5c5973134710ee95b592251fb27c201b42422e10012419732440487c61140238be5ea894b12d1904b67149b603794a5ef2907f94aa3ce667a58a74f7ce4aa3dd191d96c64204a9b4b33b474ff7d73d3d3d336b07d2801feb325ed66009662105ab908357b08777b398eee2d77972f317a188e933bc6e60d9653857a7257d2e58e378cde253090eb0e5216c615ae0f265c8e37d16dbe6f18972b7f197c75a56101badc21c3c864790b0c6ea9058e346259167915c562f5e67e00d96e69929ea24cd4509bc2c634989cb769169b7de13f899c5dac5b22d6c53841da4b9c9147bffc1abc532713204e5478848f796f885f03722ee0322ed116950948fe2cf7efbf6edbf227f58a4b644d31675c73c75e3220d4b75c352dff43b253d07058b32efbd52db88a89790cae4fc718717a621f3e1d28a4ab4a222ed937050c93928b51914e9806833213d53da2ff24f4bcf24d3df1e9a3189664cc64ed4653e6c8b2dec3eea7c03f621cd0aba088d0f05b765fd4140a44301611c17b8db0334b77d24a0b0c455b6f3039882ab4a4b9cb0fa25be67f9ba81350a4c943af374f197af0b626e07bf79691895307f8147210da40296a4e0474ca9d55398c481f1c443650dbbddc1a1988715bcee33bda7c8b6bf663d9168c879db2c214dc723ec628e0be83e3eef3087cb7c3d624ef3cc7d16f30ed83feda1879ac1f435f7e697bd88f7aa3e5704646a1ed58e4197efb81f574d73280d719fe6f1ff41239dd008411f3a238661304d63c4fad3a7890f183a4e86269daca031e94c6b557957214d8fd68e0fc1e665f44be8daf72ae6398e6d9e4b0b3c1aa88f023fe590579ad8dfb014bada8bf09c39a41e4bf0905b1c3237aefc6a34c944aeb0d415abb0ab619882344d2fd6477560a8a504a297b43200c6c5b5ed608684f2aad752a997438915a3eaf5c660afd80d92cbdcab69ae6a7591222e79d465f9f49509893029c97169b32ce8200ca820e408ea77a310361aae2c70c49ec7707a135e8879c6edf7151b0e71e4ce574b986e331794bf250cb7765fb595d35bc6a7a29c344769f34d045de6a52096026c2351b691734aeedcbb19a4f91cfb3ae239fb107b52f560db6a2bece31ede2df975f6dda3b26f8ef27feda87d3b7330d1dbe630d8a1f7086851f80bdbde4b748f47029915ac53c43ea8b4558ba630fcacc7a2dd8f5adf03acefbb0de8dba4543a0d07551a2613b5964f701270ea15b85ef353c020afb03c5300397b1a0a9bf8480ce634ea89b17afc2bb27a2ce900b5558092d558a5130a9a52308d7d93e1382eea19a6eef2c2cd7dc8f49e23bd43c9dcaae38b5a746a2b64a891108ad18f33fa37aba2a093e05fa7bd90427b1932a56145980176c42313d5d4500eabec823739364fc4952ee372f401b298524c1d255e0251bd45a6f992174115a7e2b6adadf59186b53eca5a3f2fb9c47670a7d369af4aa7f438a662d8ab525bafd2884aa5bc9ff5a223eba39fb08f0d3183ec0943afb5647015d7f8da8836167bbcf11c79502b556321d30ebe2822f35e34015682adcb34433a6b8beaac6dbc456bebd3b9a689565d53bf8ef2e956290fa828d3783c03fe854186c6132da99d48fc6c5d35aae2e2e6d5e893a74f2fcfa04a1e82efe346941bd7138ee9087fd222e1219d399e6bd11ce32ac2a4ef4f1b213caa273cac83e2b316a118511126657f0e8af8715a6b78fe7d9914ace3b7c4a1f83a6fd63e10757745ccb1c53564a75abde9e02d5dc332eac1275f4c2fdfa84ebe2f54f2fd01eeeceb2e18e4e5826a29922dd7ac2c429678d8e591d723ae9d129250690e291eb2444457b78ca1facdf1d1c882a81a4d39966f07d2633aa4bf54217dabca9228265545a4b5e25a07d599f24aa6ba6e3b243aa593e8bc4aa21b65db71632f55d4e68fd91c395c0d65b10e6d5a9044b5474733922474925c5049725b3bca55314235ff05e9009b5a5359e3b49a91695c27535225d3bd637b2e0a370f249b6c4ea276d8e1844ed28b2a4917da34b25c8d3e5304147a0c54e14733b29ed6c9fa954ad639cf989bc122d25bb537747c9c23158dafc758e21c253627c771c66318bf964502ccf3a82862fb45b601c71fa43916c940fd8d30379f38d8655bdd61efbec91cd4dfecba04fab3f76d68d731ecf1b6f3b24ae91adf96f41f398785442e2d449a83b3f74d527a6529640bad06d21c275e3aa635d5e7e20af5d6a3b6a1e6770b1d028fc448536c4ed6edc1bbc8f1f6708509b8278e6d78e184789c46ce72bc662ae1f78e0510b60319423e65121ef221eb58e4cc30ab483527eebb01a6dfa00253da244c1186c97943af1264750344bd9225654c421462884a1cd514f1da0de0ac48f63369da0b39f633c7a15f77d80e303c61db43fc5edb66bbe31d4df9e7e5184742af795554647a39ef3ccd5b12ef1ae757e57936a9b092a46f58256bb8eca4c64f2515b360258454877e190a21a7fee7d15d86a2bb6b04c2881b0cb1afb86ede579016c901aca3d7f6f4d0cabb50912aaf71b611f68fe3390624c77ac32458fd02ac02ec8941e2bc88b18ecc1a832d6e0a365b82ed666760bbd985b0c524d8beee0c6cd7ccc1669b82ad5782ed9bcec036690eb6a829d802126cb74cc2d62760f39e5f189c10c2a6400b49a0ddee0468062dcd1868fd1268773a33406f74e1743028c1f6ad49d806046cf9f2c1985b647490c64c01179480bbdb197b9b3207dba829d8c2126cdf75063683d6662cfc0009b6ef4dc2465d97aacea2bacfa70d4b604d77c6c6ae77a18d4525d8664cc246f1cdbe7e6bb80bbc585c826ad6245451616107552f9118f46003a620eb91209b3309196deb51f5ea370aba6f380e4980cd9b068c6ceca87caa6f7405903005584402ecde4903d68deb4c4b026ce1a40133b8e5680cb03e786fce7832b4497f5f567a52e33993bef93aa988129d2392b84082c2a0873c596d8803970de9b824cdaf8456ded66bec1d89da34eb9f656449584b6de1fe3f1cefe4f98c4ad256ce6afa6b6825cd2f8dbecff2ff00ce7f5de10f996982f7bde4b3c0c75839c74cd1c7fe0fa88850bc8c480000 serializedProgramBytesString: - serializedSignature: 23e0b59819142abfcbe63d6b30dae261d4bdd316ca58d67699f22b7e721fa67e6a47cc452fdda70a9e2cad49f7489fd1d08a53faaf642451979b0f6f52f1710c + serializedSignature: 630489f03f784d8207c0e20f1422afb7e31f73253e53261028553a4ef9a850a1ff979e9919d891c9d2e435c3915a41b7997767c1097cbcfcc5a86d0fc2c00907 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/b8f430c81ac23794299cd0c888215cc0.asset b/Assets/SerializedUdonPrograms/b8f430c81ac23794299cd0c888215cc0.asset new file mode 100644 index 0000000..e70c065 --- /dev/null +++ b/Assets/SerializedUdonPrograms/b8f430c81ac23794299cd0c888215cc0.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: b8f430c81ac23794299cd0c888215cc0 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cc5f5f8e7dc7bef55eee726c9922c179a6db9826dd9926c6c6c63cb2ab6b09a55dc30607aefcdf4de7b0d242421810009904a121248808424404842124208f5bf333ba37db7376feff656ef34ebffcf7cd0deb6b76fbef3a6bf996997c5ac7f9169d69fb5ac8815b04cb68695b33a566bfd2ab08e35d67ff699babe8a3558c76dd6df52ebde349691e04dfe6f526488f5779975d6c89aac379b599975ac12f78b5985f57b99f56e8575c6af565aff57584f453a582fad610b59215bc90647062610b156bcd428af4578b8225dacbf0bd85eeb6e85508a7f244bdc1a6cfd29b6ee348a7b3596d2eab90d6c9308568d75afcc7aa781555b32b70a895dca3399f8c1ecc320791c2c8f5cc7aef2777bf9bb8bfc0d9fef288f43927c7e2878af2bf8cd09ddecf1fe3079fcd8fabf93f5731738e7ef7e28cf87dbf2da6df79035521e47c9e36829737712fa7796c78c04e1f5923106c84a865917791c278f63a5be7b52fcfe049b51e47a208f1fff03f41907bedd15dce7c7f101c2aee2f113573c7e62c763bb8332fede95d727ca63541e2749d9d633fdc7cb6b93e5714402bda6d8efb1d9ccb159eb9bedebe5f954799c268fd3e5f153a9eb5e701e541715a799f2f85ff98d7d9aebea797eff44799e258fd9aef89a219fdb2fcf7392d42719fb533afd4f7ee324706e71ecb0c543968af7cf5cf1fe997cf7129b6387a75ce181f6a7939b2be59d9c42383e7785e3735b978e51d773897450f2f3e4f10b29f71470cee55ee1336c1de47b8fcbf3992c71de3628897bb36d395d14eb39f6773a0db0af773a9cc5daf2ac047aaab8fdd215b75f4ab9d552ae0aff5cfb3ca238670039fcfd032eb95fb9e47e25e5aa3c42d978223d0f93c723e571be3cce632de978bc4a3747c8e351f2f8358bcd03be96c7c39d7707f5f1c9cd2b8e16b8e27a847de43f93b2c50279ec9ae4f3ea998501745e248fdd92fc6637795c1ce09bdd6d5be8f291cb16e62490b9c4e6dba509e860c9e9aae27fa93c2e93c7a325fff6b1761051f2bcec20912ec7485d1888034b976e4ace72795c11ab8b55978cd5e9d4d6d3291291324f03e7fcd84e5e3f1d9c735d57d9dfe9f6bc9459288fab5c3aafa6d3d9aabc8bf77af600b691cc7b5ef6556c87af7bb62dbb7b89bcae8e4ab7458ede5d168277951ec9a487b59245471763593feeaed81eeb7aee0c70ce8f1d9cef456419d243d9d630709dbf7b2638e7f7d724a9eb7a166fb35c0ea8d38adffcdb32ffef71897cf638169ff674eff2632770ad9394f7a67c6f038b2fc7d4733c6c6781737e7f5d9261dba8d1cffa6ecf791eef6e62b1f94f81630f9d7f2aaf1d2ff55175b9d3c039bf3fc67927522daf6db6cf7b2b5db6c87740be2e7e5bfaf552e569a93c56307d395b0638c8f468b5275bbe3d629dbcb6d5e35be5f2994a57b88b1d39dd8748dd553adec662d38cfb597e4d95772afc75f258eb3c3b49d9ea0e79ac91ba7563b165f409e03a3f7697f7cf06e7fcb92a47f64095efab3681d255179f3b5d61d7e5015e76d6603f3b41a5eb469b6defeb25b7e75d3a6c61def6db5fbeafea457d63edac85e50020272749d95ee1d865ebdb52bf56ed68d53e9d07640f94ec7b38ac5aea5ccde01e3f5775af2616535678eaa2e2be6782f00c02cff1e3be00e1f7baa7f21ed9c688f464316d0e716ec559dfeb3d649d6c731aacf2bd53ec77fadd2fcf0fd8f7fba876a9e224db92915e0eeb3eaa6eaff29ede20dc328f89f401d764dc44fa3ad7843c7eef7457fc9ce3ba7f0690a1bb7f26d04177ff2c79fd5c5bf7fecabece7685a5c9a56b1f1693ced939e03b5dc133f0dbe7f988cb73e5bbfd5c71d9cf8e97fe5eedb3f3f4713940a595f35d7179812b2efb6be2f242790fa6eb49f21aecc753f13b0870e82fef5d84c4a5ba7f3190abbb7f09d04177ffd2d8b81cf09abc7e191297507f189797c7873532d0f5edf39388cb2be551b54975f5ceabe471b2947b411272af96c72a0fb9c35c722f4c42ee35f278d043eeb588bea97c4fd9baec0311bdccd0d6f9b965b7834a3c645dc7b4b63e58d51d6439d762eb37b0585b577dcad03e6e94f7863af1cfe4bdc830166febc3819da83ac64de01968abeafecd40aeeefe2d4007ddfd5b598cad0f7e565ebf8de96d1dea0f6dfdf6f8b04686b9beadd2ad575cdee1e2acf88e60b1ed8c1176fc0c51faa9bac129ccbb6cbcd3961ffd589edf25e58d94f22f06e7fc38caf5dd51f2bb57d87286aa34d9435ebf5f5e5775c2bbedf3c9aaeff31ef9dc6baee7eeb5cf79b7af38bfdfc5ff0197ad6438f6d61296fbc03d18b6312cb64ef2a0bc3e16c4d518700dc695aacf25e2fa903c3eece2a7c62b2e01e7fcb9471dfda7a8fae723f2b8d7b9d7e72557fcf6007a3ca6b715a12b8833df752415e6c71384d94f9e348ec5e649e36c3b18f69e87aca7ec6786f7f078e69bf2f82d797c5aca1fcf62db0faacfff19793ec1757f82bc7fd0613ff066a08792cddfb93489f07f471ebf2b8fdf96df99c862fba4d49889ae8c48b51e9beabd32a993aa379c0ecead781871378bb5c5ad09ece35979fc9e3ccab244b4712103d5e6f5ea4f4af42d8f7045a6b0d836fc1479fffbf25c95b597c9f369aee7d518d373f27caaebf94cd7f36a2c42b60923d3639f673f0072f8f90b4ed8222abc2f826b6a6ceb2587cf68a953242bf6dbec872cb67da7ea5bd9f2b9cbc17b9081ba2ff3f3c88c58b9911c797e2538e7c75c97dc192e56b92eb9792e7d7f248fafcae32b4e18a7dd0fde013cd9cbb1323d6dfa052963a67ce72a706ed9f468affabf7a375f1e6749195783732ee36619278fe3b222b35dfcf2c1757e9c23ef1f04e796ec8c2e1efabd289f9deb0adb5cf9ae57bf867a578eb34454fde96a70ce65ecb7c396718987ac1fcbe34f5c71a86c96cb3b5213af6a6ce765797e84d4e11a706ee93046e50f3f657adb3eccf5feb5b1ef8f55f6f33379fcb94bb7a3586c5f946aeffc12b749f62b97eef39c675af4fb854bbf792ebde7cbef5e07f450d7f971018b2da316c8f77f2dcf0b5cf70be47ddd58b7571ae92bdf5fcc62f37dd5d7bb88c5f6d12e925ce5f8ffd867a59cd799be8f57f73e3f82f1ab881c4719fba12d639c1c4363bf91f797b0d8fef325e03d285bca19a758ebc22dc3cbfac977964a19d783737e5c26afdf00cef9f16879fd4670cee5fd569e1f23efdf04ce2d9dc60f71c95fee92afaeaf90d76f96720780e7e1fd5b6c56e3b7c786ab45eeadaeebeabddb92908bb1935c232b5db6b2528651d6dbc7ab34f4863c1ec5bccbefdfb9e4174af9b783737e5fd7b7fc7b797c2756464c3ea4fa9d57b1f8b42cd3307bdbb9375da5e137c17bfcfc2d109e44fd9c5e69ee0f4cdbde9ea8eabaaa8ed59880db1f99b67d35b1c4a79c77596cfbebcf2cb6fdf5277954ede0bf482eab5d1c647d3e52e47c2fb21a5cd3b5ad12e9a6bb562b6516b3583b94638093f2a48d6c64b1765893e05bf2b94809784e7d0b8eb7bd2fafad05e15c03aef1e3b152b73bc0b9a55bf42997dc75f2b93bc1b7f971bdbc7e1738e7ef8d93e7c7c9fb7b5cf236029d8e93df54fd381fb8beb1813965086f4b2b596f80fb5d819eea9a9201fb406ac1915f976dff49f5b1df4c1807ba6b7f95c7bbfcbf1bd9c462ebb272fc2f72bccb768eb7594daeb7f59eacfaef949ddee3fd6d2557f9374636b3d876c26679ff6f401ebf7f8fcff06c7185674bec7785fc44f5e347e5f1ef52c656f9cebde09c1f4b4198ff21af95019b2895c772f9beec8369b1d10af06c0578961f2b596c9f40a5cd7f5abd4bb67a6f9b7cfe7e70cebf25fd4922dbe57dd557a4d26815d0613bb8c68f27c8771e04e7960e539b6c1b98b614f9d60ef9de43e01c7eb35ade7f189c73b95fc43e1fa991cf3d02ce156328e7d158396ebd22b5208c2a1d3e92c05e25d7963e9a0af9ad7d76d8a7a87ceafde4e469afbd228fff94dfa8737153e39c2fa720fb6d29a39ec5b67fea6d46d3d5d8b8cafbdf4af00d298ffd4b1eff2de5ed94f21f03e7fcd8c0626c5e9c43db6f6431f973448e1967465d729a5c725419abe2a559de7fdcf55e330817bfff841d6f99aacc7e1bdc4f9a6dc788f02f59ca2a5829ab6759dc6948f44a24ebaaafde4ceca42ffc93f81ffe6f92f86c13db6bbd5aa1f3945f23fcf09b58ae55a7d179ca0f1563d1eaeb05e26fa9f5449510fa6424ee134fc77d822b576dfd5701dcfc1badeb4bc42c01eee85f65ddc964cbad237f6b0b9bc13658ffc54a596b7db69a355b6725d6df7a216f8ba576fc938982c4a704b8df29b264da33166aac2b0a68bd755e2d342c167f77094d2b84f6cbac6b4d62fe442ddbc61658c73de26bf1616fb07eebbe592291e975d44f5cc0aedbd32354342db442c3b5cf12b6f87f31d21631c2d177e2e983ffeb90255a55e7c5c5c4ff31b43319dec1b34cca9821904562aee5b02ce1db571447d07f18e343a8b76f9b773ecbf30c8b9e0c8feee122044e0cb3d94f5df1dc80dadc8eb141cb65596258674482a07981e5f2a2c2abc14f103a76ec90cd1575e38fe8f00b77c4e234e2b79fab12cff98f804ea2f08b8d00d18d5e62e56aab40e1b946285f2d547307669575bdd412cf83c02dbb41147d3ba4520badb326ebffc53237ad63bbc59371f19bcd95e92ca228be004e144c2c92dae92249f4af94b4491ac1a6da79475397965038d194256a55433c8c19fb96a86eb593752e95dc9e79a2b0b6e4d20fdeeda88f976e225e52f91a1633ed7531d32dddc9277179e1152fdd5bc205f22f5e11d632ec81d876221d30821d7404bba7dbb6f9bd3a21a5d47ad63f43eed838d59d05e901f6428c30b10a18c28e1a84d91c616f8d56ac635797565c214472275de4f4689bc23935e3e6a3e0835d083aa2c6ddd7b36cf56bda9d75f4840bee16527aaacd586c155bc758f74aade72b4405945f8705dd7cf105a79d19fb8637593ef633dd4d564bb5bfa03a1eb480836a8611efa2219ecded7580c60c441ee74e0c7df1c4d0154b66038326b36e98e441412577c7240f0e2ab90726794850c93d75c94678496f4c4bb271ba5ad4af05d6bbdbadc0ec12ede766eb7d5dd78c7772199a74721926924b06d37518f9d3084b26bd7471c72f0ed729e98eba6178d4f5c6048f0828b80f666d23835a5b5f9d646e82a39251b93f2eb89fce8c05a09d46e5fe53d1c60e6c85fa2f1fb89fe6484d962bb25dade16708c39f994239917a18b024d21f33b8311a838bf831b8013abb10f65d456a176bac6b764fee2271b74a74ffa9a62eef14ac1431672f0e833dad6277855895a559e8e16d076393cef8c689f8e7be7a74ba62f13d5017dfbc8ce3d596a03587413ae1bcd09fc0e29b5e5f5bffe284f7c0850fc6349fa8d1fcb2f5ed7c693e044b069382e6bb4331c9d1a09287e91298c8e64f4d4bc69b687867895881a982155a4d871398dd2fafbe5b274c976ba4faf78bac63a5d0825f2f8bc9cab06f7927c8c92d7c403f8c28ad16315d9da3ad42c13d69da898c61aac818323d32069d36feb3067db6344d7cdd2c365836361ccb69a66b729ad775d998474e33024bb2994193ec489d649e64b334b69acd6d957b6b751315c6b8ef4cc3bf334a973588a27e5f9b660d76ff029757296a31b6bc958caf8fb65b98ea0ecb807749c329b19e69b0be51218d3c4866c0bbc9ddb53439908594d23922391c994472a00c15960046eb2c8977c47037fab841025ebc1559f5c902b65924c39de232a764c76e9578b48aed13b5497bf034cede3ae3f696a1d386372eb8735d90c6c5184cf0cc8082c762693c3f681a1fa793cc731b3e0920680d6b3ca6f6eca06a4fc072d4399a1cf58b88bf1c7522267cae46f833edfc099f842585c392b1110fab8e62820fd7a5310eb040d4da33acffebac37780f6aa948fd19a2307472830c2bad5759bf78813d0d3ccf87db6c67053f7a4ed6e9c98de288a04631058bb72335f1f6b1cf789b8a093f4a237c697b7fc2a76171374f1777bc74e0e506af966c97655b6c6e9821dc463284a750b36851978b986b14f19ac14eb44aea93ac6393f574862807aac5bd0cb15c6883c86bfdc4e9744cfff93afdbb01fd57010dfd7c3113cbb71668f2ad88cf7c2b4b27bc2f932b9ae92a3e7c7a86ff8a4f36866d910edb4871638fa8b9368be78b850154b4d495cb5ba9809ca1d12b4bf490d4b2b6ac90f1d602f7ab6a14bf9d2a0affb6337e1fa4e2c5a706f9eb1ee31376a262da603ab4c72a583958a6ba5493a9faea18cbc5d2c2322c2d1c9d525ac8d3d99ce8ffa96f539bc353549190cd535ef00a3f9f4ad5deddfa171d54794958566be938552c79d6289683b6c935f2cc940fb16d05eb3edbf04592d0a789e5224da453732c5dccc44aed159a52fbf18efe4aed7c9dc98a8ebf863635d98542423acc76a5ce6c45ef647e1291df9a7a8e16eeb78d22532d9799aa9d758f166bac358862b3c2bace335e787faa58ff8ad797160bde35827c9de8d3de26aaa07a232f14469eee7062863e0b2b0056690a005fb5ead958125aad49425ff84c427330b58b82aa3d1753bb58a3f6fe4efed43e0c135ea211bebcb33fe187eb84f38c99cfc30bd2423c0213cc27f6c5553779e35db513ca5c2dc5ada2ada0da7fe5e2ca5eeb2f77c12c132232842bb51a0ff4a3e59118db63356cfbf8647b1486605d40b6f37482b979ae4f46b0c718fb7c9d605eff3a8e21f52f3e8dd17ffd6b01867da306fbcd3eb117e884f364be2968325f88493e3ea8e44598e4cd41252fc6246f092a79091689a59a48e4ae537e227129267cab4678894fe1cb74c2797a2bd3e54d1318ef5a702aa976f3c9e9d7286595424a83f57b972c73cb63fa47789f47956c34fb49e747637a96ebf4b4676e719f065ea728157d68fc8b856c87afaf1e83a1afd0a0bfc027fae598f04a8df0f77c0a5f81f1daa6e3352441bc960ba72ae7ea0cebaa1f8e2b316db6ebb4e1a74ebcf9f94e2186b44a83f4fa6efe90aec20271822e10bc44b0f1cdb590ad141d7ea572d6d92e518cfbc7b81ad360874e039eb32d6fa918ac4ab15a508421add6207dcd27d2622c47ae099a2397606ad7ea32cdeefed45e83a95d1754edb53ac9bcd651cf905a07779ff35feb3816fb4e03f69dc694beb30e23d51494d47a2c829b35113caf87bf083e0e13be4b237cbf4fe11b30e1bb35c29ff7297c23267c8f46f8889efe846fc284efd5082ff729fc784cf83e8df0833e856fc6849fa8117eb74fe15b3023df1fd4c84b31b54fd2a83da0973fb5b7626a9f1c54ed328de42ce1e296ce79606eef277f5365f8024ac9396a1e60fa396089be8f752995ebe28597d0a7ea54f251945760d6749ac69adef599082a31e1a76b846ff469aadb30e16768849fe353f8764cf8991ae17d7afb135e8545e6590123f3044c305f3d29ae2e384d58679d486319620349ee065e2bf7abe48b5a548881eb5261fb4e87931ab8e633f433a4f536489baeb6ac3dd3baea47eb1d98d6e7e8b4e623afbc13d7a937db4d49bb19a2f32bcc609364ad7b922fbdaa311b385763038ffb34b01a2cd0e705b4815a9d60ee3c7f7e3282c7e182eb748279f5f00286540ff9baf2dd84443fd5c37add7738f68b34d8f37c26bd9d98f08b35c2d7f914de8009bf4423fc0c9fc21b75c279c9cc578a0e54323761a6785940536cc6045fae4bd81cd48696de05bb21bcc96756b20b8b812b3431b0bc8fbf18d88d09bf5217bd3e85efc152d75558eae2abe8fa6f7cedd57d871bc7c16422dba36f7c1f26f89a80824fc4ace8da80e6b91f137c5d40c127e904f3b8e78bbfbafda1b8003ffe502763567883c60aefefebcf0a4fc132991b8366320730b56fd2a8fd8a4fb54fc584dfac11fe914fe1a76129f3162c65de9a52ca3c1d3347be946e5c6ec93dc0365bfff1662c1fe9db26b62faf103e837bc49d7a5171e3d5213fb67b06a6c5ed3a2dfab768916dfdad61764fb13d569fba0e67623adca1d3a19fd421d7fabf4c3401f93b7bacbfa96b7016a6c19d3a0dba80b8e01efd7ce69d9faf9d8d99ef5d1af37da69f3ff33d0733dfbb31f3bd2725f33d17cbf4eed5647aed7d667ae76184eed310dad3df1fa1f331e1f76b841ff429fc024cf803bab8f529fc422c6e1fc4e2f6a194e2f6222c393cec9535e5b472d67431a6c523de59d38c56cc9a2ec17478d42b6bca6bc5ace9524c83c712654dc78aeff9f33ebe0c33dfc735e67bce007fe67b3966be4f60e6fb644ae67b0586ec1b2c5845ef4a8cce531a3a0306faa3731546e7698cce3753a2733516886f690251ed33100731f4cf04447f0da6f5b7355a3fef53eb6b31f4dfc1d07f3725f4d7618178561388f241fe02713d26fc7b1ae167f8147e0326fcfb1ae177fb147e2386ff390cfff329e1bf0933ce1f308f622db7958bb59b312d5ed069e1146b39ad58acdd82e9f0a24e0755accd6cc562ed564c8397741a74654eb1b648743fd7f97461b80d33e01f6a0cb869b03f03be1d33e01f6106fc724a067c071688573481f8d06720eec484bfaa11be7c883fe17761d1cdf7790a522edc8d69fd138dd6cff8d4fa1e9d70de3dc2778d0ad43d722fa6f6cf346abfeb53edfb30d83fd7a52dded1eceda454623d5a2fdc88b6897ca741f8f0d97351cac5f0cf2a66afd268cf632cb5ae968b198edbc5b9ca374bd956393833430ccea839907b99bd605786181cb517e1e6526a85143e337687b8d2289eaa0092f5c33f5572180b0e18f9f535bc1f8ba05f6822e8639f11f40026fc358df02143fd097f50279c6746bfc432a35fa594193d8405e2d73a423e03f13026fc758df0d77d0a7f44279c27d6df24931979745d3faa119c2516df699b85ace2575869dd85ac7eabe3a5f58fe0db65782f64155c57cc97e231cc96ded4a5b661fe6ce971ac88f85dd022e2094cf2ef834a7e122b1fde4ac6fe3d32cd6fe8ec5f2cc053d926f61f64ed236fcb7f3b69cb7f4758fe140fcb0fb642933e269ec28ce70f418de769cc78fe18d078be8925d37735c9b47eb8bf64fa2d4ceb3f314d95884f7d9e2f1a5a15c2fd5c377121435497327cfa983c83e9f1679d1e7ced047ff2bf8dc9ff4bc0d8f98e4e308f9df734b1f39ecfd8f92ea6f5fb58ecf034b25d5611557c54b4cceb4fd503e8592c901f6802f9e1087f81fc1e16c8bfea02c953a0f28db0ebb3b1ee587e82f57deccb1feabecc6b84f63611592d6b8266b52c7e5168258872e67702c17398067fd3693058abc172f1ab49cc14b66bfda9cd0f791ed3e5ef3a5d8627a94bfcf2c37e74fa016678ffd0185e8f51fe0cef052cc01f05cc135ec404ff33a0e09730c1ff0a28f88718e77f6b384ff3c9f94798f08f35c23ff229fc650cc97f022279452798e73e9f2423d8a331f4aa4e306f87feb7e586ab1dfa294ba51dfa630cfbff34d85fcaf087fd2758203ec302f1794a81f82916882f3481e832c65f207e8609ff52233c6fac3fe13fc70cf32ba6c94ef99ca3220697832817756c959147d96451e0d5cabfb1dec619e2cc2e7ea68969ee0da2d4b7b3dc46e18d9c21326667baa7dda9c4272ed6bb6a06ea3bbc33c92e622b5bb2f30c919997fb7447fc05c6e26b1d0bbe3e0a5c53caae653a05ac33f572b7d0b09a3933066dfdb8ce8924e4584ffbf5d07e0d3318be9a57dc50924f6bfca54eb8bde63c92a4da45524952bfc202d15e1388bb7d06e2d7584c778868629abb38ebbb4837c8ce55eee1ce5b17f652245e711af5bc3b59b8d0daddaa8e5dc7a6803a6119aa0b35f65e93b0ab264d2ada2a34ac031db0b6ec3ad93af5635faf6351d35117353e33a4df60f6d509b3afce29d9d76f35dfc9120b02a7779f387b2a049793c2066411be464f2c92ba7ea7cfd57765748d609bb879eb807552bc8125a26eba44c4b31f3f46f62626bdbb4e3abf6167b759294ccafe1d66d03d3406dd67823f83fe3d26bca74678b54fe16f61947a4582d52bdfc604f70e28f81d0c471f0d8e553e71fc0113de5723fc359fc2ff8809efa7113e62a23fe1ef62c2fb6b8497fb14fe272c3207e8d252134b6ed98360a38876ab7c73ccb8a4d9638a7fc6a268a0268a9a7c46d15fb0281aa48b22ee50113faceb2730efe9bec78bd9c158313b24a562f67ddd77868a0793c8470ee0823fc0800dd301e3c54f962f407fc5e40fd7c9b717308bb7683f5ffc10fbe208dd1707694d6085b074b5fa8b73c79fa5ff0dd364a44e132e81d776fc96047fd77c254b6c9cc0174949570d2c992d9ff5b5af51115ea78a8521d287b6f6355ad4be06c685cc73676484dc3f74f1c34f3322f13b371fbde2d4ced78f78b55d5cd474c4a3e623cc00c6e80c802f02c9ddbbec0cbedafad5240355e5d3f0fe897d77aceebbbdd1efd6ca42c0cfb7ffa533c751e936c702d1826b48c11cc7598826b8106522c6381e3146afaf63c6f86f1d37b16bc5e63472833b51178b0514abac2b85a25d6cb7b21b53603a21e2774deb8982ecb8b890a7aa1f46fd635d4a11fb5845028e10ff07931c0d2af9134cf2e4a092ffab93cc6b5b5322c1b7e2f814cb94a6066c0afd0fe3312d288fcf30c9d3834afe1c939c1954f21798e4aca092bfc424670795fc1526794650c95f63469713d0e85804513937a8ca119d64b13750322a7b6ce1d30e5379665095dbeb247378f9012977c0549e1554e58e98e4d9412577c224cf092ab93326796e50c95d309b3b2ca0cd75c5543e3ca8cadd309b3b22a0cd75c7041f1950700f9d605eba1ed50aa56b4f0cf4bca0a07be924f3e7e727c3c36b53689d60ee69b22019c1efe082fb603158103006fb6282170614dc0f8bbd454163af3f167b8b03c6de002cf696048cbd8118e4a501210fc2042f0b287830167b47078dbd2158ec1d1330f68662b1b73c60ec0dc320af0808793826786540c123b0d82b0c1a7b233592b332acd3085fb22efd8ee0adb119ae77437f553271311527360a8b8bd541e362b44e325f20ae2819953d1688cbc0ecb238a05d8ec1049704143c164bfb6b02a6fd7158ecad0d1a7be33116c70664310113bc2ea0e08998e0f501054fc2201f1714721453794340952763823706143c056bb66c0ad86c998a697c7c408da7611a6f0ea8f1744ce32d0135cec4342e0da8711626786b40c1d9188ab2802866601a9707d438076b1956b442cb3017c3511910471e86635b401c33b12c6e7bd02c2e1f035dd50aa067616a9f1054edd998da3b5a41ed3998dad541d59e8b49ae092af9300c486d2b00391c53bb2ea8da476092eb834a3e124be43b0326f2a330c10d0105cfc3043706143c1f13dc1450f0024c707340c10598e05d01052fc4ec6d77507b5b8449de1354f2624cf2dea092976092f70595bc54d7d01f639d46f882e7f4dbb016b385ec9896897999f23adce768bef8c2545622e67694b11d720c7da170e12b05db7ec6caf26eee9f18d16cbe3a96877b86b846ad5d7bb1d21f5f2da1517460d81e0059bcb51ee1bd0c58c7c65a66777ef050e4faee02c9e0058af3a7a3ad45839898ea6cf096359e6b91e9a1c56a4b9eed40d9209ee06f05d4c55608d92e767f843b1fa42766307f8b65ba94328193da469a52682cc13b759ca4491dd9e374f1a58dae934574d19931164547ebb2493ea3e39448fc3409a1bf3ba7e4837e88f063b03cf840d03c78b94e32b7ac53938e06f7d74ec6c3b14267c713599b75edb6465ee26dcda7e9308e8fc7e865d2a70b93a6ce1331c35e89d9de19416daf502799772e9f994c05cea373791556333c2b60cd703526f8ec80828b748279e7f239c9087e07175c8cc5deb94163af0463715e40166b3016e70764b116137c4140c1c762902f0c0a791d06f9a28090d7635d0117b74257c071188f4b82f2d880f1b834208f8d585e7459c0bc6813d6dd7779c0eebee331c8570485bc19837c6540c85b301657056451aaab574cb24e237cbf3013d6cedb206b09ad57b3b85ac74c5b7f3828ea0f59cccffa79a9e88bd520b6eaa29dc7ce35c944fb41bc3a59a613cc4faf8dc4cf4451fffccc4429c772c9eb5a2197acc0845fdf0ac22bb1dce186a0b9c3369d64fefc8dc9c4a68773cd769d603e23eba664048fc6cda40a137c7340c12760906f090a79874e329fb8786b322a1fc00557632adf1654e51a2c31dede4a89b156f7016e4f7724c3e40d5c701d06fbce80b0eb31d8770585bd5357e045add308df5abc2da63da902c3df14a7bb932ec4ee1185d8d0b8d025a3035630356039f0bdad90033762917f5fd0c86fc2d4bebf15d46ec6843fd00ac2776135cb07239a19960b99ea738ded255dc9f82286bb4504ab9ed54c3117739975bfd0ba532b4c9a5fd1d75f742e7dfc69685adcf0eb98bda880bf7d707663a17c4817cab35a42b9c6aa49f1446727d01af17b19b3374c68108b17d8097459cb938b5a56ad8c5d17ab41f22866f61ebd05ac59848bcb8da5e748e0cffbd3039354c2f82cce6de26e2c539858ddbcd75a72fcced8dd83917e18b327f8453b4cb9d63b36ad3a2b53dc6cd9468388733bb42572a550b7b6cebbf8f5d6b2a7bd58281fd185f248572821733b9c8b458cd58830bab58c8d2178c72badc0b7fc846c1f16b24775213b2aa9f89b2f96fea8626a442978cc3977fc84ed442c6c8fe9c296ef0adb0a113bdb65c8f8d99e360bc97e2c248feb4272419af333e71dbe0e9a1a832b07cbab36fab072c80e0f052f4b9a453503e67abc82d57a79db4918f52774d4e727953696337b0b201372b593b1f03da90bdf7242abe257778acff050d9d5e12af1e92ab60f8c4db746ac9e8285fa1bba501fe1196a5cd32211167b3d403b8caa34e657cb24a1f874917a6c1ec0c2f5942e5ceb7dd7ec8ac59dd8ba9d4e0236161fa426984a3c9f8af1785ac7e398b494d9d4a5f9695898bf89d553fcd980b261beb050991004e3d9af45f809d9e958c8bea50bd95c24646b44faac967513bba9ad5a2d6b652a2e8f8b0d9a36ca1958889ed185683161eeab62d55e37672bb357e46fbd909e8985f4dbba901eceb05e725d4e111b02b84c1d67b254c47283680d955925eede560cd55958a8be934c9b20f6bbb086b046c44283f52c4f87db3c4abf5819ad17b2b3b1907d5717b28284396772ad023c0ff56ab3a69a539e8385f1595d182b886bd44d627944be589b5d635e2b2ca0aa2535b64e1b319552f45c8cd3f7749cd6b459cbc39b50700ee7611cbeafe3b000cdc3780b69abf5904a1bf6127dde258e5e526bc7f4f958089fd3857099cf10aaddacf531d216e1bd000beff3baf016115a76630ae56f6b10b81023f083d62a97edbc6d3e2895e943751116aa1774a15ae2d38e9ded6b4db0e18bb1b0be88f550f88dc1c5e289786b74e7afc9cbf513be4bb0f0bda40bdf61016a8e4da2e4e5abf055ca761e1eaa92b867fd84e9522c4c3ff417676efb843b9e254a659425e56558f87e8485cf4f9bd10eeb12596772eef2110fefda616bd51c2fc7c2f7b22e7ce39977af6089459842cb2b302d5ff1eedbf3130bc529c502a5ed5d8985fa555da8f1fd4c4b5a86ea611ee1ec2fc3cbfe666dbd33b5fefdab30bd7facd37b4ec216d7323136c87b1fabc5ee228b588d586934befdeb1503a9b720afc6c2f313acb6ec9d46786b7895a841366aea10c98c25f09a57652b86f02016c29f26d346d68f0d2c13b6b753cc24a89656d996e303d76061fc19d643954c3f4032a14c2dc7483da4d76221fdb92ea44b938a4df7488f9d0e55b8db325eafc342fb0b5d68d7258c57da9e71ea3ef3eb311aafe9683405a8af607311fdf69b6372d452f2ad25cf0fc51b308abfd4515ce49322a6616cf9ec9e4f8bd7e0632720fa09e78d58387fa50b672e5ac388d5c03d42b89335088f836df2dd66b13f58bcc53b1b37f909c34d58187e8db590b1affaf7da816f7bdd69adbcee662cacaf63397bebdba57b86356e97ba59847e427b0b16dadfe8425be651ff75b770636bfcb1e96cbee821284a3a94b1b6ef87456bb4116ec518fd56c76876a0f6297d7e741b169a37b01e925443937cfc06b5e2dbb130bd898df5eaf5889f53d3567d3e776021fa1d368a92b8ff30993a7532bd90fe7b2a53cf8defc438fc5ec7618a0f0e2a4ed5ce2fad553bbc0bd3f82d9dc61313d6951d0f8a0a71957b18b64e1fc2dd98a66feb349de53bef776a59a5a2a457bd1f14e9e51e2c2cef24e3558cb53c1719d6eabc170be51f300f257ff99c9d6fc7df8df73a832d8764bf315f8c84f0f2c24f98efc3c2fc475d9827b862d6f926756aba1fd3f35d9d9e392e3d61fee4d67989d439d9767eaa63270f6021f8932e041b5b6a06ad3fbea96a435e1e0ed002934d79ea1d3f541ec4a8fc3919af1df5453fb98a13322cc5b54e6ef21016b2bfe842765c1bc7b79f784e35053c8c11792f99fe4bbf75ade03d58a9c7fd235848df4f26b72a10b16ac760131897b2ad209fe525089f2e27e36ff909c1a358083e48ded79e7fd34fca84e1c3aeb7560c3d8685efafd8789c778dc6d943ceada3dac30f4f5fd8fe735e6932b5d2fe712cd41fa6320e64c76ab1f5f056d6247b5eda7a8ed1135808ff964ccad3134ead9e90b885d3d9fa2f1211bbb30829f6a85a9d7887d70ab3265bb722d92d2543664b8e9f19533a38d7f9f76bacd8e069a2a4256f77d6d6c324fcdd82d3a91db3ff4d923bc8da0562a492b927181708f9d532bf51d69a2908d97311f8c4e94cab165825de72af3289854257ca6582720e862e71983621539f2362737a28cb22cd9bb6875c48ffc16375848cd576597c0540b10c602ad694588b8ff8d7daeb6d68701c59983a74badb0256cade83085fe966b3f88cbd6f393ed127e197dd9b96b8bf3c5d0850f5c184e2d6802c40276ea83037dbd9ba81d943906f5a323b776c97cd23e39f94d8f8e2000b45bdafde0267fbebaa320703d8180a84bcd9a710fe8b12215ff14a356b978aee592ea05454cdb85b6821db110a600f777180fd9b12d80066ef029dcd1c4fda3083ebd3dd01f73125b87e1a705c60adf51277b6691657cb43016d0b73a0fd87dada6293e762eb6f95f4d956de7cb6d585015cb48703ee134a7083447db431e962210cf0ae0085c27f29e1750749b530a607260c98ae1fee60fa9412535780c971d40f03a22e831c44ffa344d45b20b23d659aac76843d4ebbc6ba522e7f8701d7d2b10eaecf28717512b81a4395a577e8e9c0f99c12ce10eba4b0a589a4c6056d6fc0225146360b0f005e2aae923d6761009837c201f80525c02e20bfe26af2a1d230005ad5d701f42575865e28c6261cdfb2705448bf0065de57e9b22135c9320c8046f477007d4d0988af4fa96aec8bd81e11eae6966a26f7ca2e1795d0226161e5c2deaaad0f860122ffa720b2768410f95aad101eef11e30b2a54b42c3d5c1ef2bafc00d04716a144d953e669cadef6ca12738d686e8701d510503eb6a344051bdbbced08879b55fb314c35b34f3b3be0da53821be402076760dbdeba7c04c8996b1e0678fb41bf58074a783d4089ea4cb2b5a77f8701541ea89d75a404c5bbaa5788e4b7c3b566d442ebf106f1a53000dbd2ce01d6295df999dd7918eb40531eb2fcac1af4f177a604677755f3aac442f1e93057345eeae840eb426d6d8bc4005bb3f8b8b3689bb3885fa35587abb2be170670ef02705d29c1f502c934ac0322dc8b43c1ea466d656aa4dcee540c773be0706065dd29c1f1deb3220b5a014b7efdd330003c4754723b77740977bb57a6eeece28f3aee96d39bd96dda7a71b54996bf316e3ad3ac478cd3bc473be066134db97f239a309f8b263d441cf53dbc174dd157249a54ad331ab0c322eac30128ea2b0b8c265d9789fa2ac0a329e527515f4deca8af0a6c34295796a82fff8da8ef96ad4e677cc43e1a37e013f56c0e46b55df8516da76c14199e8c7a8cee46911ef068825ea4684a6333d12446071d1f52bdef6736f721edd9eeff6ff7ce6ceeded98b43e0dbadf07f767da237757d825b91edcdcbf378ef35c06658a5ba4b8711713ac4ee5ca4ea0d3a6dbac6d42c7a2513c0546a175d81cb451f9370e68412e71c80b3af4938734389b318e0ec970e9cdb50a050fdcd6c26cba7c3d9830ae703ccc1d9df249c79a1c4790dc039c0249cb34289f38f00e7409370e68712e78f01ce4126e19c114a9c4500e7609370e68612e7c900e7109370e684126705c0399412e74089b34c362bddf3b1e15cdf6c3a901da940fe03801c46ed01a43a2992ed30e2cf378867c357955f08c00ea7043b9ac11ea4e47b50c30c772c803b82da11c6abd909c5f1929e0c65672a945f0394232951f69628f35d40edbe45fe50f8ecf01e006f543ae0cd4e3fbc37a8e03d0ae08da684373841191e9b8849dbe664c9f8230033c32498b34208f39f00e6189360e68510e68700e6589360ce0c21ccbf0198e34c82991342981f0098e34d824938744106f3af00e604936012b6cac960fe09c09c6812cc30b670fe02604e6adbc6a22dca5ebf90d02ef9203709caa3c1f8649412e51489b2da7aa85a1cf51b46fbdb409c10797f2aebdd04904fa644de4d20df2ebc816cefa46d025ef85ae53d40829fd296093e76994b42eb3b4085b20e58df544a9493e2127ca910b698a93dd31658ff73ebdc25fa2f9b99d70a95a4b0c90aaae900f6b474d86d72a57e18518e0659c0744a94a3345940b22bda93a21d478616586966db5a69d8ab53bf05569a458d72bef063af93debb7ced56b5233af7f3553ecdb6a778f8cafc0e006536fd54423ed6b3595ce01f2f1555257e350dfdf16479e67e8070463a10ce3ae4103e0910e65022eccf9c415f75746fe01cd6c1ddc701c45c937c8a491db9c8700e06e5759e4938493d8fc8701e0170ce340927a95f1c19cee301ce7ceac526ec723b3bfd63e8c3a8f0bd02f2ca59e638c2cc0961d93d0c58e2ec74a0849e70cbad4af81239d9aed27a694f3a4a7032944dc02ae7d00f5fc0decacd6c8740b780c17d55175bc70a4b44dcda0b2148e23d01ccb9e9e8ca681253821b5b7ad7d57c4675d475c4cda01c0026437b2d407b583a86d99275ca26cc3fc95cb28f04300f3709e6ec10c23c0cc03cc22498844e336430670298479a0493d09d8b0ce65400f3289360123a1a92c19c0b60ce33096618e704cd0630e79b0493d069860ce604007381493009c779c8600e07300b4c8249e8684806730a80b9d02498842d2032981301cc45943033587cff913fe72dc2f29dcc792b0ff4292d6e4b3f4e776731612e4ad6553c19d8ea1293601296ef64307300cca5e9e877e7bd9dbb98dac9364d03bd64f886027ccb28f10d05f8e27de2b83067aa749847ce5f00408f4e87f341f621e77c702240784c3a10e61f72080f0708979b5d1d22ecd524ab0e6d01d5a115e9728f7186d8e02811f9e01ad9a0c53e60a32bcdf1120ee36cca2300cac27495e28956b40db3ebd61c00749549ab1ccd0c6557c7dd00e76a9370924e5125c37919c0596412ce59a1c4f97b80b3d8249cf9a1c4f90380b3c4249ca40b3d93e13c06e05c63124ed29589c97036009c6b4dc249ba6e3619cee301ce63a96b9ec9ed2c512454e37b5b10d63c975301cd0340d7a56325ae5c57fb3d0ddd1e6453fa6a01bcf594f086b364674bc64e9d26744778870aea5ad0d9719c8950095bec6450d700a81b4c844ae8d24506b50840dd682254c2129e0cea58007593895009dd15c8a00e05508f37112ae1503019d40100ea6613a1123a2b9041ed0da06ea1849acbe27be963e76d143067172a3b20b17b5ac56e82e76c1e56226ab4aabb9a301272a82281cf685191506aceecb830ae2fdb17d8f356736721113a89910de8fd04586999398bfd91ce7627b3d33300cc72936086711de43301cc0a936086711de46600b3d22498611cb93f1dc0dc6612cc30ae837c0280b9dd2498615c07790780596512cc302ee3b70ac03cc12498615c07793580b9c3249884ae8c6430cf0230ab4d8219c6a5572e02306bcc76bb0de312d211d076afa5c4db53e2b557b1a916ad785b7615e5d22b649be331609775e95e4536f96e8f302ebd3204d8647dba5c6f57881ecd1dae1ecf85d66b0de28b6176bd1d016c752725d05e9e89bc910e5d372a74ed00ba86b6f4a80fff4cf7410065633aa615f27d570f9d6985c5005f9319cb96dba347f5c262ed712152cb24db6db0161438cd26addb49da9824b3d44e00e72e9370e68412e74c8073b74938734389f31880738f49384977d022c3d90870eea5c4398ec5cf935bc4f630ee09d2cc94a772a1f57a39e3adf22201d6dec1a03a3d15f8be54900782b27f9f491ef63343b94eddbd00e78926e124ddc5950ce79500e77e9370ce0a25ce7700ce934cc2991f4a9c3f04384f360927a9ab0219cee500e72926e1cc0d25ce5d00e7019370e68412e76680f3d474751d178b5a65b325793ee37b66ad9533e8cac50cba8a50771d6f01404f33c74d368cde1fdd404be9f4740c0bab65d5ec399d5b4553533d14f6d598ca815d9e918e399d6db0330c19bca300bc33cd75d8262c80c8c62e6f0768cf4a875dce4abf5d92c17b04c03b3b1df0e61c4289fa6500ef1cfae265bb6689aa628b49192b930a558a050378d75bf8aa3ddd01cc73cdf5ee20ec30264be4fd4135e83c73d6a80ba373f63460a5e79b3124acdbc99a102dd9b2171b81955e60d22811a91727597e3a0ee0bcd0249c39a1c4b918e0bcc8249cb9a1c4590d705e4c897344d2f9e85a66cf70e7a27269dd6a4e8e10615d06b05e928e0e8fe4fa8e724239a960038079a94930c338a960338079994930c338ad7a358079b94930c338ad7a1d8079854930c338adba00c0bcd22498619c56bd0ac0bcca2498616cb9cf0730af3609661807d6160098074d8219c669d5470198d79804338cd3aae70198d79ad44e271d5c236ba7f70438af33092769f5880ce75c80f37a937092ba7291e13c16e0bc211d7b6ccd6487da1e5b079983f0c6744c2648dc11173fc76dbe25b4414cfe27ed963b48d52db715d8e94d9490474ac8d5d6431c70859cade1ccd188cd06a0fb212158b2591a8701b037a763a90a05566dfe183b1aef559d0a63cd7432c07b4b5b0e1ca76d05da035428df07f9ecad9428c70894cbac878a0430be10c02ef9ba63ad9be5d6660bc4bab33be4fdc5d6b1c2124bb83a08595da02b007c9b396eb3614cf69f0294b753a21c9000a50a29a9dbcd68aa52bf0ae49e7798bd8e1261ef28d93a4a5900ef9de6bad4120ed691398cfd06640077a52303c0ca7d270320cc47c93280bf038c7753aff4b54ab6e8d5b48365c23279b20f5f59de0780bb271df697dd6283e5a2416acf6c0ffbfa354f008cf752772c73600bc587db744bb3422a98f900e67de9a85f667b3433c3dde7f42240797f3abaedf20eb96ebb2a80f08174f428716b5c24cae866a104dfbfbd4c24f242b65b74d43558f77805a99e8579f6e52c00f641737ce5c3e858733440f9503ae616e5b95a41612ebb1b01bc874d9aa53e93b22d4e364bfd0e80f3119370922e414586f37c80f3519370ce0a25ced701cec74cc2991f4a9cdf01381f370927e9e292643897009c4f988493743544329cf500e79326e12475f822c3b911e0fc463ad638e673830e9d358e17017c4f99e49144ba471bddbaef6050e269937092cecd20c3b910e0fca64938734389b312e0fc1625ce2e424085d8bcb681d92e5ee1f32eea04f2c66728714d627e760de6dd70cd4224dc1d98534b83d3c1122ad83300ec6fa7a31c9f212a3d87ca5a346f037cdf49479f3aef105ec278272fef0ade267ad51b42ddf57b0a40f85d733c88c238757a1028689ea544c997e95e25f2c072a67cdcb0f147c2cd70c88aa02ec026bf67ae934b185745ba0aa0fdbe397b06e6867246fa2f00cce74c8219c681b35f0398cf9b04338c33d29f07307f6012cc30ce48ff3980f9824930c33823fdfb00e68b26c10ce38cf4e700cc974c8219c60900df05307f6812cc30ce48ff1e80f923936086b161f90680f9b24930c3b826d79b00e62b664f50216c13914d5099013a415ea5ee04f1ea4fb255cf17fe7184c511d9c6df3500e48fe9e74ec682b47b337947472d3b5af4bbd77b8ea287719fe0f62023f889394eaf616c6e6603943f35c9bb632665114566998f019c3f3309675e2871de0070fedc249cf9a1c4f91ac0f90b9370924e3b25c3791cc0f99a493849abf76438cf06387f69124ed2158cc9706e07387f4589939fa8d9bce11b56eb0d30fd9aba856e4f7076e6a2c1a6e302ebc827a4565a5788279d92b924f407305f372909cfa4ec71274bc277029cbf3109675e28715e0070fed6249cb34289f37700e71b26e1cc0f25ce6701ce374dc23923943897029cbf330927e9e02f19ce9d00e7ef4dc249baba3b19ce4d00e75be9d84f482d04c939348b5aa87bf947f79401c28e61b2fa27033def6f53629de8c2ba95c5bb1926ef9048889aacddb40da07e271d0edcb3d9a1b628cad32013f8433a9c6595b5360afbe359c06209af423b0417de8576f38175fed11cdff830fad0f50128df35d7a59b70c49d2c0f7d1564007fa29e4364efbbea2c9ebb504c35286d092519be0c2a7cfd00be3fa763c19e19aea41ee69dd4e701787f31db9986d0bf93cc99661ac835df4b477b092ebfa7cb21c35d557a0958ebfb9438c7bbaa4ad50c4e16d46f00b144be9cb655dfa752611e09acf603731c6bc2e8acb81258ec5fd3b9d5034ff8e5ae4986875e4bff3f00ef8726adb440da5b4a86b33348f87f33092769f71eddaa9c00e7df4dc249daf94c867325c0f90f933a9f6752ced724eb7c7e08e49d1f9984332f9438af0338ff6912ce59a1c4f92ec0f92f9370e68712e74f01ce7f9b849374c134329c2500e7c726e1245d3a800ce70180f33f26e1245d7f8e0c6725c0f9497a16a56a833e51b236fb5b00df7fd3d1a1cc3f5c292c51c9ae958f840f5e04c0fbb4eda70faa42267c63973d406be77fa6800ce320f07f81457e660a48c2c10c3290b381457e6e0a48c28e0c32903900e417a68024744a2003590e407e690a48c2f9bf6420d703905f990292b0ea4d06b20180fcda1490844e3164202b00483ed3df089084239064209b01c88829200917f12103d90440b6a304e9cf99308c6bc8b50728db53a2e42d6c67b971ae68a3e0b04d78bdf1d7c2e7b2c5c7d714bc0e94f0d4268a8e27a6def1c57629ac151d4f5c580d6d43711c15d83a00b62325d871cced5d643b6c396ed85ca0bd73aa57d20fe3227d5341d2ef4409d93de5c506ca5db87846b0505b388577b1a93280b5733a0aa7e45cb6c2b8f2611464035d28512a4f7758ce279fc312a225cb610b8195764d67e2afb29458cb9cddafa0f0b4f96b1ea0c2ba0360ed465d9dda2cfa8a0e9dd19ebb4072ef9e0e9b4c9cdcd74a6be4a2726993fac91122accb814df6a0c43a5883d5ab400ae3fab1b900664f936086d125fb4800b3974930c3b8834614c0ec6d12cc30eea0910d60f63109661897349d0060f63509661867ff4e0430fb9904338cbd9f6300ccfe26c10ce30e1ae301cc0126c10c63e7dc700073a04930c3d88f9401600ea284e97f6e1a61114436fba71fc039d8249c39a1c47938c039c4249ca45b8c91e13c0ee01c4a8953b95cf351f45da047332d13fbc9f0153007df304a7c03185fa5b8542e7ec645d55a8f6fb71eaf135d7170e7d5f061ec08300ea7c4389a39cb4dd8436a9b2d751b2d75ca040f3ee23e9ff199e7bc5fb3d412c01378390bf346cb6b00dc11e918174a6d0524c24a3c994bc38d00ed48eae4ef5518a990928e038da6ea73df0e0aa1519418333418fd2de643d8a344b6984f26c03bdadc0c807080832c03f825c8003228d18e1168970afb2c627c98ad421657e5429472bad921226041cc52698bad638525b63c8485573700784c3a7258cc3fa440582cf172a7e3a972d87f018c632931f2b9a1856cb7f578bcef47f8fc3e06006ce3d2d1af04eba5aa92ef54fbc35d0f1d02608e4f87ff27849938e70c2fd8c500ec044ab06a2d63eedb51c30ea5b58caf0008279ae38618c691f56500e5244a94637da02cb6bec985345985533d531d258db4a5f944aad2fcdf00719412f15016eb8e582f7a99b67bda6c18c78f4a400b69723a3a95935fa12b8c1bdcde06ec738a4938f34289f33c8073aa4938678512e7af00ce6926e1cc0f25ce6f029cd34dc249eaca40867301c0996912cedc50e2ac0638b34cc299134a9c1b00ceec743435b3c55ffbc807ea8a99dd9e0f6f6b7d2b4038c39ce9d861f43b1e08aaed39e9b246bbb9c905ed919698868e8f77a8107e0358636e3afad739c28a9699edea76d8fb8fbe0d30e6a57788ed50dfd46118403bd3d4d14bd2d29c6cf4f23d8036df54b4a4d57832b49703b4b3d25134e51c727df29300c2d9e9704de46bc1a6dd3591cceb630cc0378712df2ce65eb042bf539b3f571b6cbf37d2426c3f558ffd5250539d9b8e81e4e4c697724239c2742bb0ecc34c8219c636d47d00e6e126c10ce3dccd9b01cc234c8219c6b99bb70098479a04338c73372f05308f32096618e76ede0460ce33096618c7de2f0630e79b04338c73372f0130179804338cabd77c0bc02c3009661857af7906c05c68f61c0fc2844fd6daef021a988bd2d18f3fa3c55ecb45f7b3ed5117f6f99c4f012b5d6cd270f14cca1c946cb8f8618073894938f34289f37a8073a94938678512e79f01ce6526e1cc0f25ce9f019c479b8493746a2119cef500e73126e1cc0d25ce5301cee526e1246d1b91e1dc0670aea0c4a996eecd7155eac33cb25903e0ad4cc71419ee74b390f1b542eaad164f85acb4db13632a84c0522100ae22d2186a2fbbf10071a149cb0491ba33d02dd0029a97ab4cc249dae749867312c0b9da249ca44ede643897009c4526e1249d6f4486b31ee02c4ec76a4c10a7de9d71b5c5a8547ca641dcb7fb9a08e19e4ee509b202c02d31a91e3a93729098ac1e7a3f28e7d79884332f9438af0638d79a8473562871fe01e03cd6249cf9a1c4f92380739d49384957a625c3590870ae370927e952aa643877039cc7998493d4fd8b0c6729c0b98112e764e65ee4827794945b3cf8a419154e67a61236323fdffad5200693496ba6f750d54c77829ae9464ae06ac35dccdd213667250349b6e1ee3860b99b4c014968916420070390c79b0292d061910ce44900e466534012bad19281cc0420b7980292d0539e0ce4b900642925c86c57e9de8c4e35c427d316584fd458fad489331ed43495f507a9cafa5250d66f4d876b63b23da68463a164fda5ed00cc32936012fa8992c1ec0060969b04338c3df91f835cb6c2249884d57a32989f00989526c124ac4891c1fc1f80b9cd249884d57b32989f0198db4d824958332583f93980596512cc306e2ff505807982493009e7bd93c1fc12c0dc61124cc279ef6430bf0230ab2961e2abd12fb6fe56317b83a9124b00171cfed5e8d701b03594604708b0cbad07ca84fb229ccad5661ba1904df0ea0cb0d65262edc4580ccaf0a1ea0b50d599b3c2621817b4e80e5ae3f5e6ae10465835225b21ec4160a53bcd9e104bd8c024cb04a600cb6da0c4db1f94efbb44f9cdbde9ed8d23d3341df60015c43260a38de97069809524ac6427af1a91d96406c0d9948edc343ec927939f8671bdc55e20b937a7a3ccc706e662cbfc30ae6e331d58e9ae74b48c5229f3098736c86cf4420076b7a960c3b80be73900ec1e53c186717fe3f900ec5e53c112d64ec9c0e602b0fb4c054b38484706360b803dd154b061ac608d0460f79b0a96b0239a0cec6900ec49a682251c2e2103bb07803dd954b061ecb93a16803dc554b084bdad6460d702b00728c1aa15ef67b23658f19e0cdf5e80ef5473fa00c2b8f4e50a80f2349366d493aee54436263a0af44e9d6e124ed2c587c8702e0238cf300927e9d25864384f10383b7774095f1c27bc40049607b78c39cb0465b2258c7bc5db0b099559e7cb4569ddc4b658c97583f59fbf38d864fda7bb1e116b412db2ea75f5e22a97572e64d75877b9668d2c7b9af5c899dc24ba4a93888adc7abec5bcc97aa6885588afef65c5cc5e06a9d0faab1c319a0592a858e3749575ad99f17131fe855a4b93edac4184387699a468a48be064ef69c6c3c50146a5ae6a9fb365b29ca8b2c25c2a3469b09ee920be639b5034d2139ca901a465a296d328b4720fcc4745318eed93a2ac262a8cc496a11f5159601d175abf2a4588abadb7b93144227d65fcf3b0af10dc4a2d5e4abad2308b771747f2ad3f76dd2cb3a5569629e74dd4c833753db14c1efbded2cee2511cd1a7faea56b3db4421b2931a7fbf52c4418590ba2c614813870f4f033d3c62258b4f4f3aa4c37f368f7719edc24c0747ba0bf3ae97c2f98e770dd66faed465ebdbb18eff0f54456e411d3d0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/b8f430c81ac23794299cd0c888215cc0.asset.meta b/Assets/SerializedUdonPrograms/b8f430c81ac23794299cd0c888215cc0.asset.meta new file mode 100644 index 0000000..0e9be12 --- /dev/null +++ b/Assets/SerializedUdonPrograms/b8f430c81ac23794299cd0c888215cc0.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 74fd0355ca4f20747852853581aa939e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/b941450eb7d36be4ea69809a170ae6fa.asset b/Assets/SerializedUdonPrograms/b941450eb7d36be4ea69809a170ae6fa.asset new file mode 100644 index 0000000..8b81683 --- /dev/null +++ b/Assets/SerializedUdonPrograms/b941450eb7d36be4ea69809a170ae6fa.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: b941450eb7d36be4ea69809a170ae6fa + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec5d079c14b5f7cfecd17befcad18f7a470705a417a59c7060018583bb8383e338ef8ea6a8a8585054ec0d3bf6868abd61c7fab3f7de7bc59f5dff934cb2f3662e6f77b3d9eccdf0ffe14786999df9e6e59b9797e4e525896413fb8fd5c7fe6b0e9949c6917e643629202b48a9fdaf71f675b9fd9f73279ee79272fbbad8fe3bdffead0fc98cf325fdd3c36a63ff3dc5beab2095f6972bc922fb5acc7e9f450aed7f4fb1bf2db4efe8d322fbff42fb2dab86fdd16c329ecc20d3496bab651c8839eca30afecca2f9b2ead87f8f256bed5f0b995034916cf6536bfbaf59f62f15ecb7e5b6d0e2bdb9e41096ade5f66f8bec6fca49898db99021d6397b3361ff20cea517bff6e6d79ef6ff75f9bf33f8bfebf07fc3f76bf26b9f04dfef0bbeab0bfe4d19ba2cc6f7fd9c6b847e5fcb7ebc08dcd36fbfe1ef653b78912531b0faf3eb007e1dc8310b1290bf36bf0e8a93df5818830156229cd5e1d7a1fc3a84cb5b9864fac31d8eac2d008f72d90fc83314a45d17fc4e9f0dd3c8bb28c76c5f39663be518399f97df27fcfdbdf87504bfeecdb1ed779a97f06723f935278e5ca39cef98fc4267ed3433caf8fd3efc3a9a5fc770d9fa73598bc0bdae2ca24cc772cc1c9ec662c973f13efd5de8f5387e1def2baf09fcbd627e3f31417912d13f21d3009ec652706ff35863410c2c51eea2ae2d02f7f4dbcd0e8f35eef6e507e89f147712c75b96443e06f9f231c891a56696f7bdb83208fcc91c6730c72d01f714f76cc5bcd5e0df6de7f753487cdbd62b81dfa63a387504d7d39c746ab5709ed712754de8f27e71e414652becd222704f714b38aec8ff74e7de123c0f0238f4fbe53edca13edca11c57d8888909ca39835f67f2eb6c7ecd23d17a5cb9863fdb9f5f67f1348711af0d103624d7fdb6d5818abcc52aa339beb2e67620323c0ea6f8fe007ead9be0fbe29d0335643e885feb2598663d7e3d5823cdfa8e2ed4f9c1a70bd3e260ce75f8ad530964b071eaaee3f7f3f8f5107e3d94f33fc2a707a2aec4d28378b2cce7b2105006b62cf59af0fb05fc9aef95c5eec979652a4d9d4c91bd38e60a704faf7bf3e765e09eca9aeba453ef318ec9eb2a117d2a2173a139994991f35dc306403712f92e967e2d76f2573fc7c1ae9fc79f8b7a29643bc895bbce78f0ad902391fa20daa1513e8e47711904b7cb7cef1d06eee975a49b1efbb7fd6d03a15bfdc073fa6d39b8a7bf172728eb7252556729ce6890f6689e36b7ff0d36f3774b49d5ba27fb965ef701cff6e178eff0ef5690aaed98788fe6ad02dcd3df4b12cc5b99443e3bdd86a3637ccbcb206a7f0e70f5a1f60bfc99e07a0cf1d6ad31fcf7c1ee3796e84f5638f78d852cfc1a190b7819ebc8d748b4a72bf9752d91b7b3ab010f620cb1c64dbb839077558cb444bd3edc97efc52e4efd365c7661c78e20de3ae37f973e13f6773dbf1ec7afc7baef52f1d9b3a3f9f5182edb38e2b1cde428f09c5ec7f3df2bc13d7def4817bba5d0d10d3e5965e579bc2fef321b104bcf4e70de5db983df9fe870db780be7ed319f0c9524b6feeec9f325c60015e09ee2ee72709b8ce6ef9fc4afa7f0f726827216793ad9cdd368d1c66e04b875c1bf139131161fa739e944fbe9a7f3ab28933c80dd93a73bc9952fda773b15fc46ef791f8e6c229e3627a62c67f06bc338f9e905dea3d73335f21febb75afc7a0ecfdb64e21dbb4c76cab8e92731b0ce75786ad395df9fe77cd36c17bfe763efa6423f2e0079a2694c71b96e22eac785fcb77d41be37f167b0ffcbfbfe91a94067a6f0df2ef295cf4adfef5b0086ecf78b810cb2df2fe1cf5739b237cfe5cf2ff5e565934fd6fd88c75e08ff14cc2b7b07a6bd5aa12c2fe7df4ef395251f8f35df1603eb0a7959b6d8c1efaff495e5565f594e9794e555fcb719a0dcf6e6cf7249d5f2dd1ff0309dff76355296e2f76b00aeecf76b810cb2dfaff39665cb0efcf9f5485942f96159de5035af915c5fdac29ec42acb9bf8f5467e95f55f6f26ae1da7b86b13c0bd855f8f8c81dbcf877b7802b8b7f2ebb618b8b721f226939ed075e1739949bcba4eef6dbd6db52506d6ed44aaebad05e7db8957d7ef205e5d9f45aaeafa9dfc37d8a688f29f4daaeafa1ca027a23db90bbc037555fc7e37c095fd7e0f9041f6fbbdc4a3eb6d44bb781f91eb3a941feafafd55f31a99ed4b5bf4cd6295e5033e9e05bf0710ef78e500a77cda08f9445fe23cc0ab2c9d071dfc35a29ff110c73b90e3af03f7f47a902fdd8378baef38386dc538a1017fcefb3f6d853f6d8773bfb60fbf7fd879af6d07df7b8ff0f7fee2f78ff9f87fdca72b735d7d8be6e551f01bccdb3ce2ed933cc19f1f02ca6a1e7806cb4af40be3f1fa24bfeef4f17730c73b12dcd3f79e76e53f5c94f553fc7a86fb5b53d1af17e5db00c8f18c5c5798aca0cc94fb4822cfcfc6c9b38a4d3a94786dd2a18e1eb4cf8981f5027f272fc63b2ff1ebcbfcfa22c79f4fbce390f9fcf757f8fd02dfef0b886bb3c538e50b2087c0a6df1c9540fe5fe5d7d7387e3efff668706fe7adc3814e5a1d16f0ab681f5ef7e1bce1cab56e9bef9b3e09c863e237de0f8b2c245e1bb1d0c9db1e99c4abbbabe2e8d39bfcfa16bff2be416411f1fa0385df2b961f2b5e5a31f21529245edf8118bfbfcdef0bf8efebf9fd62dffbc227c56d63a4c8f77eb1effd62fefebbfc7e89f77df21ec0a1f7efbb798b081fc107e099f09b7de8f2d391f74d234bbd69938f88773c28c67ccbf87bc780ef2007e2f763f97d892f4fcbf9fd71e09e5e4b7db8c207f38eef7781bbc227efc7fcfa19bf7eeae6f1c83ae01bc027f9c48b1953a7dfe71865fc9b0de0ded6e98e1fc4c010df0a5f6139c7381edcdb1899dc679319a3de462a7cfc1d069ed36b25fffd04704fb1d7c7908fcb1e59e9cbdb4afeedfd097c2bfc55ab7d795bcd3178fbdfa94e0caccff955d8575186426729de5a49b98a3e321f7f47d670194e04f7b60c9d2ee3ef7d49e4babdcaf7fd49deef3b8b3eef57fcfab54fb6c389d707f62dbf7e87eb24f9de27fb11ee3b51f9bef1c927fa2042ee753cdd8d400ef19c5e8f24de364d8c6b78ff287294ef77d18ec9e6d863d59196fcfa2349dac6929f005622be9f56fcfab3469abb00562269b6e6d75f34d2fc2fc04a244de1a3fd5523cddf00562269fec1af7f3a3ad07927285f7afd9d5f79df3c42fb30548f4e06f7a24cb91e7511f3437ff3eb3fb1b123eb39e629e01ec38c9117fa4f768df0abe57e3f88fbe62dfe8dc5e3aa58e4187f6730f77558bcff6af1ba69d50638dc7f6289f6f6182efb26702fca5ec8ce75cf12f3b1cd08b335ddb94c916339c6a9cefbdd277b658c08dfbcf8b728678edf95b7f9567de7be0ff73d587c5cd65dd834d117fb37b66e58dcd76a358a91ffc6fcda04e73ada1f8b935e4cfde45c6589f6ea38e2691bada69ce311e077612be8fd06fefe69e0dec6ebc1fbf556337e6d8ee755ca510b8e7712283b7a7fa2571f582c22956f1bf85dd8157abf91bf7f3ab8a7d793f9f3cd201df19c5e4f21de3a730aa217359d2684c9d20a91b17592329e249751aa9b6de4e5172daf5dee375dd6f36fdaf22bf7177415fea95ff9f3f6ee377d45dd6dc7df19ea2bff33bce5df7b9eef7de1f73f9e78fb05c7fbdedfc3fb5de404fefe998e7e44789fcce27345a80da1f554fcd6318e0ec27733f9b533bf7672dfedc3c74156177eed8aebb4d58dc4aebf30cdee24be3de8a180c7e74bad9e31f07a29e0f1985aab9ff37c20eff358bc8f6df198582b9b97996f9e2a02fd7bbe31a59513470efaac7f9cfc405907803a06db0d51e724ed46cc366f20d0038a732ac73d0bdcd3df25ed5c4c5c61c3bb13d7768bb8ba1ee0196f532ce89b52b5f15cbf229b89d79720eccae9c43bdf4aefedfcf42d70f2d37703908b5ec7fabe5b0aeee9f5345756f66f8ac5fd2a7d455b3dd88b19017eb91125e0197d7708c082b68663e7082e799d6331b8f4bdb3c13d94fb4c9fdc673a38fd78df3d5aafdbc5e15c565eddbcbf452ee0699d23f99d3e3f17bc47af628ef03c706fcb962dec23c7b578fc9e359c5f457cd385c45bf7f8fca66c1c12b59d71f21995ed5c8e7d3eb8f7ebb0d0b5737cba760ecfc7dd8e0ca2cc2c3ebf658d90e7c71ae9cbd74692b27c59a3bcfa26f42c9e9ee488fe5e37fefb058a7a23ec83d0fdb338ce85e01eea4219b8a7e9ffe5c8dd9fd75f8bc70759a3bd1c46f11574c25fc7d93dfd76b1a2cef03c5863805ec03922f1fb58e2ce11c1e7e37c3a779157e7983ed505ffb67919b080a7256cf585e01d813b1ebc2393670290c7e66580e8c70a3b3cd9fbbe2cf6d69ae42b8759409e44eba618bb9c27c9c318f01bc843aaca2e66bb25747c4af218d1366d5f0d0cd177cdd6c88b05b01219cbf33ea9a511176dd5065889a4d99e7f375523cd1a002b81342d1a3f00fb79bc5f176dd3685d84fe517a6fa73158cc378af28d13b76af1f95e8bc7465833ddf72d3e2f6581b9ef23b98fc4dadf496f4857c5f4f89cb135875f798c79640bf1ce8188b9fc187320f1d28ac9ef410ee6a002a04ff4773146ba9878c7d4173bf91d2a6c039fe7b4c45caccc7e88fe42ac7ef521f272b6e2c4d05b8722df71bf50e4129ffc9770f9b94fdae2f385d68218b2e53bf73d8639d7e1937d69f16f2397fad2bad4496b9818572c8c83c3f9895ce6c3b9ccc1193e9abfc7e7c52c3127e4d70d815d137cc3e7b6ac221f5fd8b8e972e26d1f2ec7f5d05aec955fcaa1f00dc41837099987f1beb2559c9c4ec4d4f76572cca83db9c2c7fd150ef77b8971acd0698c7b582f97c6d1dde509f0561a8737fa0df72544ae24de3eda955cf6dfbcef59fc774bccb9adf4fd7e18f1f483a2362d5e7e784cb6c5c76e96987fd84abc364dc4cf697017b38c797fc9df97b656268f29fac9d1bed0553c4f5bc0bdcdf508d10e88b191983fbb98cb94ebc58b5ccd7fbf04dc8bef126993856f6888065f6b00562269eee1e475a4a8137cbece12f354d7b8381111a3288b7d8e259398ebba967875fa5a9e76a5833552b48f426f8e20b17594cf85597c2ec3123e49511ed7b97246c7fed7f1778f71b1a33a0562e98f1136653de055608918416167ae07728a673702fc0d3e196ef4a61bb98978c7833739bc8ccef4e5877f17b99978c77537fb78be85ff7e29b8b7f146f1f8af519f38d77db82d89d6836d201ffe34b771cccbf837473a98fbf0f53ffbbcc19ff3b9654bf8534ff4e1dd2029931b525826c2bec5d11d5666f4b7b1e01e8c6944bea3bfdf087ea71cf2f19ec5fdcd16f71f5827a737bfd17c081b750497b310cf7b4c7b20e6296e25deba7aab53de63329df4c7eee0e9f1f90b4bb4b1b7f3ef2ee7cfb9efce12f32cdb7d3c6f07dfd1eb6dc4eb8bbb8da7fb97f73d4bf818efe4ef5f01eee9f52efefc4a9f7c77f9e4dcea7d6e011fa3f846e48188b99dcb7ccfc7827b382e8ee59fc6bebd2a4eda626c2fe6e836c6d6f3a8cf42f07ab597d7f17c6ed7123e51e1dbbc9bbfcf6dbec5e314adb3c0eff47a0ff1f42de3ea81188bc4d3833b7c7a700797b746f8f420c2e399a5e3a974e981b04b5d41bece4db0cc845f36c9329b70b7f7bd309459b40f22fc6476992daf8cf36da265d6d1e165a618af5de0fd2e723f520ea2bd7fc0570e0f80efe8f5415f393ce8a43769b4f7bd68393ce42b071183bd0329871d3e39b77a9fa7d486fabe8fdcabf0bd646c187918c8a6588ed1b42f4c8d1e30596039dc47bcfeaffb9c729b2cd63b8a79a84788771eea11fefb501fce69e05ec82ff27e91af4c1f47744e8c899ef0e9dc13e03b7a7dd2a7734f3ab24fd9ee7d2f9ad79d3e9de3ed50e42944e79ef2c9b9d5fb3c303a27fbfe514d9d15eb0e92d1599176923a9b729d7fdaa7078ff974f531476ff6136b8484ce3fe3d3f9677c3a2fc311f917ed62267ff69cfb8cfd9ba6f79bc3fdd40620dfb277e915acb160ffb6bf9fcafd8053a78274b177c57e2fa2affd16975df880baf99e5fc7b1852f8dafebb4849fe1f9aaba1ff90f91d76731267cc1abb39117c077f42ad64d9c01ee6dd9a76df0be172dc79788b73ef3351e919789bc3ebfec9373abf7794afb5fcff3e7d371cc74d7f1c15c4f2cb137c32b64f7a9e3af38ba3243ccfdf23179bc3eaa25b8133a2b74498c458a7c3af42aa2e35cd722aff9f4e035f01dbdbeeed3f1d71db9739778df8beaf81b3e1de73e8fc89b888ebfe99373abf7794a751caea90c888e273bd60d9a3e273cc6123e1f5fff3dda463de07e5fa5cf2efa6c4bc1bdad8b8b37f9b0c5776f7b658c88353ea2ef5f06eee958e30da74c667ee05c171778bf8bc65388bcaf44b815794b56871ed0fcfe6dbdef198f2af5ea6d2f4e74ace4b339d139d6877ddf3f0cbeb3403fe50c706f974fde3bdef7a23647f4f5af00f75602633321a7c2d8ecff5bd9fa638494ed84482f593bf5b6e6f70f687e7fbfdef7bb5bfea3755dc488bdc37fbf08dc5b7c6c5b17fcdbaebf0b467bd340c7d35c96b8e3e96789d74ef0b1c34135bcef85613c1df541dfed62469fdd03b814fc8f07efffaf2dc2bfefa429ff3d6adf57690b9f4674fc6afefb33beef9f01df597c3c0d759c8fc5e77ee17d2faae362ac7805b8b71218630a3915c698ffdf754b55373cf1adb1dec76cb148ef7f6d51f5f0d749f3fbffe7fc7bc68c607c6589f9d3ebbcdfa1fd033e9f9f6cff20bfabf7bd30f40f44bb02f731fc7f6d8f41cc7f34c61ff49dfe573715f3eff3e758d7024ea1ed2cf2d501ac7f23f6c84bb27f53b0d3fb5e75f46fb46318fe5747938fe1f85f7df48ebb1ff07eef896fa03e4b114f3c915fe3f96163c5a28ad84bbe3f65e45d172bf22e904f25bef566e7dde5626dc02d84d5f325fc3c89250b700c4bc42d768d91f6468ec7f73f5e22d63bf03d2b2dbe2fa5c5e36ba263ebf7388fa5e09efe2e8bd58e953fb1fe46c418cae22e637d7f8ff3aeff5c8d62beff79b1881de573ae168f57b0846ffc53e2b1cfec1ecb8788dbb923b68e58c2f67f08caff4347aea5621d25e7d1ba0bfc4ee53811dcd3eb0700e3038e51e6fbf623feed06702fdea7cf2bc03dbdc2fdc2dee7988ff9303fe6df5e0deec5fb10937f5f22e2de797db384af7907cfaf6ccde183deb267fd116823c5efa2ee9f25ff5db471557c16e2fbcb41dee0ef0f7bdf8beac2f5e09e7e2f8badbb0ba429da2cee3fb778ac99f598fb5d9988877e34411d82f854964fb86c47837bca3b8f9fb31e4f61da7c3c60f13d2c455da9a2b382af8d3ebe34ea4eccf861b18ee096e431acf30056026b18aca7bd3a18f98ce77929b8b7cba154acd17a965f793c87f5bc1727f22df1da4db157582cce76c6292f319efa9c6397817b2adb1a07b754d471def78b1543ac9a368cfd8c7cc9e5380edc430ebe20defedf37bef7c5b9725df8fdd73ecebf76f2b542d4c51748d53652bc5717fc9b5ebf02cfbee238db805c30ddaf88b78f2dde17ef4d4c8c230faeb0152ffa3064b1a03cce45b4bd823f4b8c0d8ad5e488a9e7af4838b4f35ab6d3cb89f5b22b67199fb3b05ef5fd162f2d113ff59d4f5fbf73d23c2ccbc13f4cac8112baf8681c7cffdaabef39fe16704ff12f239e3a1ded33f3b557e582ffd788676d45749efc07e21dbb0d01cfe9f5479fdefce8a41bc57ddd8b5b650f879f89b77e887dab760139a13c624f18b13fc70dbee71d80debde1fb16eca7165d43f293572e4bcc2b73de2c1163f25672f988b9b6265e19c7d2abb789b42f58c1ed5f85d81741e8ade80b8a7d56ff4bbc7d41b1575f827d5a8bf7812db1ef27d82730c2f7cd8ad507afcc749e570affde07fcfa616ae5247c9d7ae457e2ad7fbf7239f83adb4ac117ef4f12b1ae1dcbff273efcdf38fe8de09efe0ed6218973652cde77b0bef06278f6023d86e3fcee7e1fdd4f93a76d7deefeb641b4c51f83efe8fd67203fa02d56d6b72f9d74fc7be4af12328931e5897178fbcac1f1ef89be2a5711e76b8e23f61cf8d6b9177ba65ba25d157bbc7dc779f9c3cb83f53d7ffea79b5ee40ff08cbeebdf0f3d8e6cd267c772ccbf7c7af89793ffd57cfddf6a11eb25f4f098383c88f1cfdfe03d91d63feeb3683b01f62264bf8b679603c964bb09dcdbb2add9eec5cdb0f87bd780b4e9f3087f7e33b817b69ade67f0df0b7d78355d99d83b34cd055cee1f7c69d4e0187cadeb1ad1ce7c047eaf0be414cf0486f816a4cfaef4f92dbc0c4abc69c62b0369b9883d3e1f52ff36a316976705b8a7d7da5edd61f776ded6f2f1ff5a110f2df4f4e1d8690b5c8bb781197538fe7a704f7fff19e0817159c2f9a9ebcb4f5d6fba96683b8f8d812bfa83bc9dcfa8cfbfd906eee9b59e9b678bb74319606fb60cbe07694643e2e9d74475b41178b71178975e1b134fdf9cdddbfcaf2bf1618bef9a108f7f2e43ec69c0dbb08ca6fc77e17fe27534a31990a1297846afcdf937b7817b5b8623ca1c1d58371e49ab05ffee22700fd36cc97fbf1ddc53dcdfbcef67b4e2ef6d07f7826388738717c72f5706d8133843ec35fc541c7de5bc8a3e17bb07fecdc3b77bf3140f2f667b27f6d814ed38ef4b66b4219efe4886d8b338d1fe8868fb79fb9cd1d6572e7cdf24d6c627eb3b10fdcb3f34f2ffb7939781628f9229fcfaa73aa6c5e7de32da11affd6ae7e8c6517d9cb48ee2e75358a25de2ed4744947f572ff751dded067489f74f2cd0ce65887520c47d16116d82e596db09dce7121d8381f3a762e52b5293a7d3de57967c6fa80c3026c9e063918c3d7c5cf0fd238ee6eb5fd6f3f5f0116ea32342ee3a40de0d723922a29d5889c8b9a74f4ebe576b46472027df9335a3b34fcece5cce0f7c7272db17a9ef9537f065960017163fcf3923133c133adda92a679106e03b500ed1df1b020cd9efc2aeadf23d6fccefbbf864ee02caa62ef877027cc4b423626cdb441d23c2db2db63703bd6f0eb813fd3eb12fa75d1627df0f9ed1f7457bd79de795fb7aa3ed34f0690a9f4c464f20a778af17e0a417c0a4d7dec4db9ef776747bc366afecd1effa106f7bcec730197d89b78ef475708efb01c80af864f7c057c0e486f9e8c77f3f0ddc53bc3c87ab0d4b10f9b2bdf2457fefe9fbfd32e2ad8b39804b3f668ef71b8115cd4b4fe26983a3b20d026962d8d972ec783c8834a238a0dc337cbacbee817cc76ef09689b55e5db7d9b89b62f4279eb928766fcb77bcf0cdf131091b83c7b2491c2f22f654e7674c640ce0f877817b7a1d483c7dd78c813e9d1f443ce32c764fe5fac68733d88723f6fc15dc0d219ef9e7e8774340bee8ef7ccfd81388373ff1f22db51b628f76de278c084c3146157ebf8de0dee26d021cabcbb0f9782663187f771db8a7d7e1c45b8f873bbc9df0ac93bf13c5de5d622ff7b63e5c712eb4bfad1b0bf4731f909fbae0772bf1b62e3a96af4d62f21b69e7cb9f3873fd48704fdfebe0a6710a9fdb8988be8bef3cf60c7e1efb891f38ef9fc4c76311be2f7c44f41be0b9da993e3946fae410e35589af2cb227f1f026fc62196388d78f23e35aa4370e3c1b9318ffec1b5dfe3b2596ef4817378d53444c136fbf33460099f81ecc19bef3db33f8f9ed1bcff6be17573e11e3d84d5266dd7db28ff6c93e7af72c33294fcd7df28e279eb916766ff37f8af0850a9bd4cc95e3944c2f16fb0dfa1f129545f48f441b23fc211388d71f3281bfd7d395e1343edf15e19c44e2ed372b4bbf8b2fdd49be74f9deca1913812e89767a32282b3e46cd98e2e341b46160ef61f66ff12ebd8a739397827b9bff5377f9b0c5775389b7df26d68c0bdf88381fd9ef8701ebdc33a68167f43a8378fd30331c1936f1fd0f4e7d16492b9778fbeeb9be34f7275e3f0cdf4bf7d4f5def733c4d8623bb8171c439c3b7c383eb932c03c4786181b817184d40fc3798df613f6259e3ed6a611de3cc5c393ea193fd322039e292bfab1e0fcdc0cbe6770c61c448f0e00ef1e00dea55771eeeb52706f73b4f9401fb6f84e9c077b21b8a77289718038efd4af4773810c078367f42ace67bd0ddcdb329c3edae172730e929638abf522700fd314678ede0eee6b003cfe7ec67c20db7cc039bd2ee018f7807b9a86e89fe7f3df4f00f735aaca9cb110a4b190b83628968e1de0d331710630d7b1d384ef63506278de67352db6e7f6645248f24919c9668e26aa5d73c84c328ef423b3490159414aed7f8db3afcbedff9c3bf15c7cd98764c6f986cd89b056cafed383255b49d6da9f163ae70ecdb26f2aec4785f6fb14638afd4d2519480630ece5f66f8b6c9c7252428ac942d2969d3322521fc7feceb7df2866a0f7665449e29e2a4950e14aecff0aedcf2aed0fa99015f6f349f69352fbff72fbd922fb7eaa7da55f2d20fdc95cfb3f2fca1c3bd912b2d2becbb3ff2e63780b6cb1abbe192f4b87d84ffddfccb4314b9974cbed2782d032fbbe8449388bfdbd8a495ac8a49f623fabb49fd1dc2cb695660559c352ab9af772fbdfb234f3386572190f517a6eb1adfc45318db77343a5cf66baf8bf12a98e1261538ff76638d5b046361b5d9d5ca524fec7a16364a873740ac7e8cf28b33ccf06906ce63f9d598541f53c56cda15cbf1dbe87904131f322678616777b9603b7845b0dc9fc69e78eabdeaae9cdda4092cd5cee1de2642d16b1142f8b9d36a792859a356be45041fdf45b32fad93115b3d248bff35e317b4fbd006ab1c6cf5b00eca8923cdbaae582c6733613be8489e6cfcc045bf042f6a4827d510c9e5429c51c9a646d5610559bd97899c18a22222b0a36eacbab969a30378e159417469d682edcc2c8667da7363154164b8b75aa6af09e95a854476d1c6a1575bcb2eeeb4f2d68794997d98deebf634669de195f7d52535e4ef5583925933a565219b292aa97ee4a13bf9588554ef5a3f972cb89fe9173d800d1f57832600cd69031583fddba4e7f5bc150f2ed77d539a4536dbdfd86474e60234409e38b8051585342610ea5b0b1442a52b3ae4f2a2a10825c4b56380daaa7494e4eb9e99c626b1f053551e56e1ab3455555edda32f6d8a4ec02a3ec8991e22c7b48b09ffd5bbefd7e21eb76d2e7b93662be9d36c51bc352704797de2f62334b3d8b7dfdcc4a596dce58ed0ac6bdba92618cd791309e43f5b585440d988df35786a67865a88b55b396bad5ac1e86dc4a17b93e86dc5a17b90186dc4617b9a1acdab098ac7969a936ae8345fc6bacfded123b33abd8a879a5fdbdcc2113bbbab44db8bab463d52593c8dc446a1261d5a491acece8c3f63221fd45d70e2fbac61870074de02698b6eda1ab6d4d3191f7d414b9192672475d919b6322676a8adc0203eea409dc5256a599b2a4776ce90cc5288e7a4f82ce2e744cb89bdc856043c2d8326055b695ac68a80da6cdaa6ecbd65a563c4dd25d3ce399255b9864f1d0c9e54e121ef022ea8e14513c39b0226a232b22aae43d30cdf1175117bc88da62e59f9582f26f8781f74c01787b8c965e29a0a5834c7399495f66547367dbcf9cc99009ecd762e641773157b07b9a9af028c4fa82eaef34fb5a604b486589ade9bda379067e15d6dad04037b392f1d044e74f6dc4cdd297552cf3c26015710f99c6d1969706f669b5bc7b62c8d9bac81d31e41c5de44c0cb9bf2e722719321df4d200be2a6e583a369b6197e64cfb51311bc515544dad369e5a67cc480d4c8191ea82810f4a0178571938e5950642ea74abbac9ac1feb1dce356afdbcc3f881accdccb7dfce07ff12b388fe21fcc038d66d88ccbab18e6947e27720a8a63c3411eb358c592ffdc430ebd41dd386e19adad003d3e1bd52a0c3599815d95bd78af4c4c41e9102b17bc9c0a9bb6564f46517fc5ffb4f15f00638786f4cf25112c9f3f3234a92f7c108df4797f0be18f2685de47e327bc4c67ec7a4c51ec50ba79964678ba636c3eec52f254e1c44d5ae8888a798695f8b9814f4f922529840184e6cdb364666dbd8c86e023037d59f0b1a0c1561c6701c3386b45cb18e994c1af58e9cdc148f67a9078b1bccac6763966682c4d2bc213363312c4d0e566527ea56d9fe32645a652749743587ea2a8dfcacc79aa12ae98cc7d31920330dccef7078b59a06676687e215b10837076fba7dad24ab99aa2e03d3ff79f63be5761a859e163f396340a38cf7f0779289f3475e1df665d5615402d5c164aeb00a3050a649b43f4fc3a6ab8c06a8b36426c9b591e7b36a78187b4c59724ab798bd5a4c0e67fd2c27584d65b43048260d9d59a001c9717b59cd71e0c118f0344de02132605ac7a7ebd6f1a132646a6d6830b96e0f6b182676aeaed8c3318bbabfc4a2fe65a959d4bd30f09912f0fb236ae07b63556156223a1243ab4760c079b23a468787e3583441a6fdff0afb0beacccc67b53f933586ae35c8b4eb7ab1fd2fda60f701efafb0df70824355e41c8929c56c5da5188595db1c49b9ed522cb77d30f00324e09333d4c047636577a0acecfa13a755a4dd9225bc6df35ac34c36f2cc6491d92bb93f85965c052bd74c7284dd6b38d2be56da6f67b276a084fd46ff4d4b9ada5a95321d83c97f904cfe7a40fe5c20a14a8a6331bb75b0c46e598a766b9c0c9c767ce612a4e343679fd53b3ee331da0e91d1465d9713ecee0bedb9ae64efcf620a5018ed2b17a4a8819c20912b9b4d619492eaec90d1d1028d63aff04462e6b1b4dd484a9d8e175da2e2ef78893ff28e175db092650d20f13b5ea9901eeb604dc48cea028951b5548cea241932ad0bf9585d5898545d982cd33936b35556ad3a87d7a8990c9bd63cfd0eff223b8f19fed13f9b7a1b948066a54ac6de16350af4fd459cb90a6a4cebb2425dcb841ec7264029f9ac4ac8eb4401ab13e9941cab1753b056bb50d26a6fafa9d66aef2b535936a5595ead2a3b9e21a4436d8b646acbe65d872450f8a994b3239b43aa6046b5801b55c77477b4a81d742a59a1fd9c1a5ef87b6f8b8ed0687f6922e37b39639ee62f9f8d7b31255fcc943cddf9c4147d3fac0158226900947ad553b12a542ca9427f2956a16998d84b75c59e8e89bd4c22f6ba5a6a62cfc0c04b24e0536bab81e7cac0a9615e4ef44688fb63c0b457275d1a23c6098b7c23c5856cac20c67f05ecc95afbef12fbd9220691c996ae89885d15296762dcae9070db4491db591805659adce6c980a97a1e9608708c99bbd932e096cca221fd2f7a54847aff6b0e467ba584f6cb14693f00abe62b75abf98118f22a5de48330e4d5bac80763c86b7491e7ca906921ae9514220d5a5729c47918f8e112f03c45f043b08a7984cc3675b36fc7804eaa337c72fd1af976cfa492599e4c5b119c36b7c0e31f29629126cea059a59e1f8ac9b94e26a7b3529eae4ba07d8a7ce643a329ceb05b219554e763d41f29a17e9322f50b30f0a324e05f2882e7637c1d2de3ab4d9c722d60e1eceed3fef653151e1762d2ac9749436fdd725349671146e931124ab7d453a3b400cbc4b1b24c3423a219dfcba66c3a73f8e5f355feab5833ae4e632126c1713209a8659b1aed18e426d92d28c228dd20a1f415454a176316f9785d8bbc0413fb0499d1acaf26763126f689ba622f9521d35ec74904e975d0cdf0d47b1dcbb0744ec6d23925a9744a30a636e932b51c2be05325053cba815a019762e0a749c0d72982afc0c04f97803fa6085e86816f96807768a8067e18067e8604bc4011bc1c033f53027ebe227805067e9604fc5a45f04a4cc9cfd655f29598d8e748c46ed1484dec5598d8e7ea8abd5a829ccd22c0d3b976c51ffda4b676851e7292d8da407a349d6ccd4abcf43197d21a59b9d016fa0299480a4df95a4c9b2e9468d3278a95e0700cfc2209f83c45553d0203df22013f49117c1d067eb104bc496335f023b1c2bc44b3308fc2802f2592be601fa69d2b581da3ddf942b6814d29fb5729db44ac904d5ce733dd771d4e62e29aee8894c9b5b79ceb7489ad50fdeca72a521f8d497d994c6a6a32a813d7ed373b43496718228b2bcc243d78afbb87925ceb311db85ca203db1515ec182cd35768eac0b1323bcbd6c3141bb5b3581c691e73ded31dcc8a98a62c4ff12aab2b13b6c95b994da651d5e664c5ecf771b2e2a67debab08d2b7bedafebf1e1559a96fbd01d3d96b243a3b48d16e1d8f815f2b013f5011fc040cfc3a09f80645f01365e0b45b438fbbd5ead69c84897d8344ec3e4dd4c4de88897da3aed827cb90e9fb3725627e62b8c84fc114fd664cd1e9295bea83c84d98fddca6693f4fc580e92eaed2f0a9b9519798e3bd3944b1fd3b0d53a1db242a74b6a20a9d8e81df2e017f56117c3356d8dbb1c2be23a9c23e03d3d63b35b5f54c0cf82e4de0b3302dba5b533dcfc680efd1043e47064ccb9e9e1eef0fe2a3002a417ce7625a789f440b773555d3c2f364e0d44ad23364b4ace4f998d80f48c46ed14c4dec0b30f00725e0c314c12fc46ae64358cddc9154cdbc0853c78789c45ad2e5a1f3edffe8240a9d9e5e4c7279e84ab1dd93a4bf94b1d106edc3abe8ee164c8a476452348f4a9163ffbd9c38d31b4e8049f2325c8cc9f0a84c86665c8681f6ff8b587f9a7eb3c6fe3b79092ec124784c26411d501674190aedf1aaa47629a6be8f4bd4b7467335f5bd0c53df2730f57d3229f5bd1c337a3b25462f43d1e85d8131f49484a11d8a0c5d89813f2d01ff40117c2b06fe8cac6c5ba8815f8595edb358d93e9754d95e8d5587e76399a60129364dd76052fc27b669ea9f42d3742d26c30bb14cd3a0149aa6eb30095e8c679a0e60e9a985cc5f8fa9ef4b12f57d41517d6fc0d4f7654c7d5f494a7d6fc428a3a72de874f46ec2d8794dc2cebc966aecdc8cb1f33ac6ce1b49b1730b9689372599d8ae98896d18f56f69527f2b26f5db12a91bb45293fa368cfa7730eadf4d8afadbb14cbc27c9c48d8a99d88e81bf2f017f5611fc0e0cfc0309f80f8ae07762f47f88d1ff5152f4df8529e7c72446b33630c5cddadd98149fc8a4709bb501296cd6eec164f854268368d606a7b059bb1793e03399047589dbac4d6073262b14e36eeec314f8738902dfdf5a4d81efc714f80b4c81bf4c4a811fc032f195241383daa865e2410cfc6b09f8d98ae00fc9c06971d1833475da851d98d4df4aa4aed1564dea8765e0d43df21dd1748f3c8289fdbd44ec3e8a623f8a91fd83ac6ed1588ed8917579f6ab652cf66d31b33be52cf0d4594055c0e62c7389b3a9bbb3f836df7e5ac096e52e61f7c26ee693857c46b13f9b51140b77d712677fdf4c36a3ef9cd493c966930af872ee65ec49057bab1020cbe72c8bf9dc2b9ce5540d907d0c2ba01f25053442b1801ec7c07f92802f50047f42064e8dd1cf9831da9594317a12cbc42f3286daa965622706fe5f0978a622f85332705a597f4dc418c5705d3f2d01ce66db1e56cf0472d56d81523b81fc9b8c2fe904f2ef24de04b2beacd804f233982efd21ab6d8abaf4ac0c9c36117fea3611cf61c87fe9223f8fb50f7f27a2ff318ce67f64fa9f491f16558bfeeb6cd8155bf3ff4958f3ff659adf2b86e6eb6d2b262f891730e5a19b486829cf8b98f258969ef2bc8455537a08b1bf9adedd5ead9abe8c499d6149ba44b4b51cc3065a856ccd846cb54d26eb2e652a0646bd82c951432607ddf0430dff550cbfa666e9bc8601d792094ef5876e849bc7fa84cbc844a6c4b45fb644b927f6ba2c65aa17b5257a91db414d2fdec0b2554793af3731a9eb4aa42ed8434deab730a9eb618521c22c9caeb1371c51255b6f6329d797a54c1d07ceb174d9d1736db2a39bbfccb0eb5601515d40f30e2641039904ada5124c65ffaa642be59d014472eba3dec564692893a57d82b2543df84445a6f730c56b2451bc0d7baa29defb58861b6b56970f30e0269ac01f62c04d35813fc2786e26e179ab22cf1f63e0cd25e04b3aaa817f8251d24293924f65c0d4fab44c0438c6b8ea3319306da45b59c890b6b595cc90f6738cf63612da477752a3fd0b2c136db14cb44b2a135f6299682fc9c47ac54c7c8581779080dfd8590dfc6b4c31f7909953ba187f2681dba114b0eeba30e459a4276bf04af9dfde68fb4c76e7343f7dd8360ff41761722b58347e2633ccee7267c73f4517ee96116f6cbc4887faa59c26b6286ace3399312f508c6cfc06e3624f191774c74eb8a79ad361751b5877e9f16a2661097157cc3af25199e3210cb0df565da1f02da6301d250af397a2367e8755a94cac4a754aaa4a7d8f65a2b32413998a5aff0356d25d64254d1724cabdad73b99f96aef0a00315672b9e58659a15f3d79e2c1ad7f1d0ba7aedad012b9866086facf7b74aa65795925ab49049b802f8721dec157ca0aba25f3fcad8a347ef74b5f48fdef90903ef9602f09f65e0544fba5bfa5bd6eec2c07ba400fc1719383d4b2bcb22f80155fe04bae309fc174ba0678a12f8152bd85e2928d8df30f0de2900ff1d03ef9302f03f303bd75762e7767555b3737f62e0fd24e0db14c1ffc268c996d0f2dcb3cf8e54a1e56f4cf21c89e493bba949fe0f06de5f02de4011fc5f193875030ed07503120b117ba044ec9314c5b664e0eca8a21458af08063e58026e29826760b40c91f58f1569a92103a74a3e340575bf26063e2c05e0b5305a864b6879419196da5881ee95026da98381ef9d02f0ba182d2324b4d4e8ae464b3d0c7ca4cc03a9085e1f031f2501af54046f200367e702e95aad8698d8a3657aa82876234c55c64854453522be3126f95859d3ac2879134cf2712950f2a698e4e365beac1e6a9237c3c02748c0ef57046f8ed13231052d450b4cf24912c9d765a949de12039f2c01afa308de0a039f2201a7679fa980b7c6c0f79535a08a92b7c1c0f793800f5294bc2d063e55a6e78ae0ed30559c96821ada1e6bfaa7a7a0e9ef80d1324342cb54455af690806777b26f2dbadf68ba76c6994d9cc38806daa98b435ed576c7c995f8abb2d969a06dabe42391d4f6b7f1ea50384ada0f36a91d7ad975dffeff7efbff06bd09b619f44c8b0ee2934b130b45d813538059120568d14b4d013a62e07912f0d18ae09918f86c097889227827acd2cd4941a5eb8c811f20055fbf8f0a78178c960325b46c56a4a52b66e80e9218ba88a2a1eb86497eb044f2ed8a9277c7c0e74ac03f5004ef8181cf938d147aab816761e08748c07314c17b62057aa8a4406b2816682f4cf2f912c9f31425ef8d812f9080dfad08de47064efddcf932af3ff57dd2b0b0652c7463359b6b7263b6d5773eed8ba5be50963a5d7d2122799cf935fa8d4a7afd302a17c9868b8a5466631a569082be510e2679a144f2771425ef8f8117c97ad27dd4c00760e08b25e02314c10762e04b24e0672b820f9281d3cdcb8aad04e208cec7810763522f9548fd4a5f35a987606ab82c056a381493bc443672c956937c18660d96cbac813d8806b6a780cddd2d62f37b05d1bde4e87515fba498cdf8b9c7b1b9b3ce4e9077b9ddcf54b124c331594b65b23a27ecae885a2f9594f6c2525a214ba9317baf94e5b1d8e680da48da37de9ffdac1a49b33756dc6592e26e90a356dc23b08c1d26cb58274f71c72e487f7c613e1161032a991f89c9578e358dcec4b788a9d38b9f1b85515f21a17ebc22f5fb60e09512f0c9fdd5c04763bcad94f1d6cb53ae5359c9551267f155392b3b5a82743d46058b461731d0a2d4bd25ed567615aec76012afc2aa987be09cacb2a9a43d164b7b35a665cee9c1f3537212c2382cf535b2d4e9809c2e7fa59beec49382be574e54e37ac763f2ac95c9d302c853182d91e93ce029f945c11330290e9749511f484183cd5ddd5049732256258f9054c91706a855c9495886d6c9329415a74acaab1e2d6c1a03b4961f8dba8c45e094f1b658858ac91815474aa8d8a448c514ac7b74540aba47fbcac0a97e1c6d69ce18ed8789bd3e05624fc5dc34c7a4c007340de3e4585d4ea6cb90e9fbc725d23f8f11e73b0353c00d12059c37584d017331f0e325e0df2882ef8f917d822ed93331b24fd4247b16067c9226709e0c9846656e8cfee08bca3cd94a262a733656a0a7480a74c910b5029d8359ee4df12db77320790fde05166be19d118888a8a431966e94a6133b09cf4056ebcc1c80497b2ad691ca631d76ffc9cbc98c930ec42ce46929b0900761657cbaa48cef572ce38331f0cd12f02643d5c0e762457286ac489c754a4245c4060625a071a7f70b592fd7e9eba914d13c2ca367cabc078a193d04033f4b366052043f14033f5b02be4e117c3e067e8eaceba708be00ab16e74aaa85ea44463e26f97912c93f50947c21067ebe043c6b981af8220cfc0209f80645f002acce5d888daae2d5b9457c92981a47f57a578865f62249667f50cc6c1106be45027ea322f8620cfc6209788be16ae04b30f04b24e0c314c18b31f04b25e0072a822fc5ba7997e976f39661625f2e2b4d45b14b30f02b24e0761746097c39067ea5047caa22782906be55025ea608be02eba85e857554af4eaaa35a8699a56bb0de99d8774ef41a9377a91c86a57dad2ced46c475a938bd581a0b539254bfb01c2bbaeb244537626fb5a2abc0b275bd2c5bb4e8dceef96a92ef5b05efed04abd9f84a4c921b6492d0db31d17e9c4a3a2bb1fec48d29e866afc2caea2649596d562cabd532702acccd890c34fbe2c06b304a6e4901256b314ab6c97a4123d528391cb33cb76296e7b6a42ccf11587b75bb6e7bb50ef31e6cd7f41e1c89897c87aec84761257aa7a4443b8c522bd1a331f0bb644dac22f87a4cd1ef4e81a21f8355cf7b34abe7b198d4f7a640eae330beef938ddd14abe7060cfc7e09789e62611e8f813f2001dfb68f1af80918f88312f0b315c14fc4c01f92801728829f8481ef90805f365a0d7c2306feb06cd4a9087e3206fe884c5b14c14fc1c01f950d67c6aa816fc2fa2e8fc9fa2ef454f362c9ac2b0d055ec96302e8d2ee6467834fc5ecc5e3127b6129da8bd324e0d974f624ad91e270abb7e422c59f907410b2bb1269a47822a93d69e3d5aa4d9c3ffd9c3fb591e8f09d963c3a3c9174b0e8f0d3b1427f2a058dc4660cfce914f8e0cec06ae633929ab960bc5acd3c13ab99cfca6aa61bcb21fc58854c612bf9a4b03b47ef4e22af66ea5c02c6414edda543cc621647a3567bcfc2247e0e1b68fa27b8a711ea635bc276375449f96cac33fd3cd699fe4f529de973306d7a2105f6e95c4c9b5e9439dc26aa69d379589ffa25dd3ef5f918272fa780930b304e5e9170b273921a27176292bf9a02db701126f96b12c9d7edab26f9164cf2d72592abae33bd1893fc0d99559bae26f925584d7d13aba96f2555532fc5187a3b050c5d8631f48e84a1f1fbab3174396645df9559d1d6c41b9b09772775a699fdbe2d15bb7a0526cb7b98676b66b4ed5049e74aacb4de4f41696dc5c03f9080d75004bf0a03ff50025e5b11fc6a0cfc2309784d45f06b3025fe58a2c45d8bd494f85a4c713e91290eed84cb62dd641b96a62ed6ed3a8c804f2504ac5fa846c0f558d17d9682a2bb0103ff3c05e03762b47c21a1a5ce12355a6ec2ccff9798f9ff2a29f37f339689af259918a498895bb0bed437ba7da96d98d8dfca9c148a62df8a817f2701ff4211fc36acc27f2fabf0b43c63b75aee18041e17a252bd6fc724fa011b8d4ce1c71ad113f3e80f34a2788a2d936aabb91d23fa4709d159c56a44df8129df4fbaca77a70c99beffb3a5e7cfbf0b2b895d8900c73a470be3e2175d2eeec18af0bf9222cc532cc27b31f05f25e0db14c1efc3c8fe4da6f62d88ffe41fe7f49c52bee0c371e21d4e545d01f76352fc2e93829e7036864549fa7b0173d8dfc56cd191aa0c0f6034ff21a1f9fe656a343f2803a7fd983f650d19f5cefd45dd6c148afee13e367f82d4bd8624f810969bbf25b9218ab9d98135cbff60cdf2bf4935cb0f636a4187d755d482b2368eade31267602c8e760bfb45bd5845ccedba9cb713033cc74ad12703955b8e4730aaad4855aa772952fd2866b322114d9bf51866bf33227af6fb718c8f1a123eca4ad4f8780203af2901ff4611fc494cdf6ac9f46d94c7182e623f949085841e23b68c0d41c476cecb99995acee63fe8e8daf1b0aeb187218e0bdce9c9c063ce169295d1e18b77bb6a576b55747427a646b575d5e8294c8dea68aad1d3d8a8a56e44dfcfff8c0c9c4e57d58bd0cdc3ab824b13988f27f02ca6a7f5257a9a59aaa6a7cf617ada40a6a79d89ebebf7cfbb396b36c5e6d0f4dffd81f689b827f5ed229ec7246c289390f252cc7bceeea916154a29fe0723bc9184f02d8a84bf80813796801fb8420dfc450cbc894c55cad4c05fc29aeaa611a4a96e1649a6a97e19abadcd53505b5fc1186a212b5b45865ec5246f2991fc5ffb8f8ae4af6192b79248beed3035c95fc7c05b4bc0eb94ab81bf8181b791809faf08fe2606de5602dea0420dfc2d0cbc9d04fc0545c9dfc6c0db4bc017284afe0e06de41027ebf22f8bb9849de436692eb10e8e0704e465531c7ef6159d953a69b956a59791f336a1d31a396999451fb00cb442749260a1433f121561e9d65e5e175814d8ce3022b4c6a61fb4798445d6412498d780cf48f31f4ae32f4dad1fc6627d1fdf8042bb86e32fbb252ade03ec5c0bb4bc09728827f86b1d42391ee740c4a3ec780b33481bfc0e8e829a163aa221d5f62e0bd64b65c11fc2b0cbcb704bccd2a35f0af31f03eb2864211fc1bac30fbcaea522589775eb7eb1c49fe8c6ee7a0baf99e53bf837d62f7b75811f593392a148be83bac88b26545e46c98e73f345d2533df636d620ed626f64faa4dfc01cbd70059be682b91ad948f1f31fc81d8c851a6782a29fe84a5384896622b69494d630a59c1bd8eee2f6a0af93326c960992414810691aa1aec5d9254b2bbd9b7d6fe247d81ad79f61df57fa907b40e89d03351bd6430359686a00e8dd010d4965572162b7d2cf4f41759f9d0db61117a589e57a47da71d537b4b87e722558aa6265e34ffc51460b84c011a1212ddbca9c87e4857ff3999520da4fe15b3847bc95cd8ebd42ce16f58a6f696658a9614ddb874096f1c44271746a4bac7e8a964f2774c8e1132391aa3e40abfae4ada7f60fed791bafed73f65c8b43446a5c0f1f2970c9c32b34f447fbba1bf31a51b2d51ba1d47aa29dd3f18f81809f88d47a981ff8b69d258cdbe34894880a9691e970830357508b02503ceb46fc72702fc2f2e7144064c73384156a9a8c6bb715aa5492efbc8c0d29c883793eaab916b60944dd2a4ac2626fe6499f8741f41ef018dfe2d78d47a3bb564a9b3b338241563ded16a15a3b60c9c1aaf7d352783ea609ceda759e3ea62c0536585414da5e86ebafb5beb14473dac38a6c98689ebd58aa33e96b9e9b15d4c6ef8a43b208407d68aa33b9d619c4a761b6012cdc0fa02627301d93ab2e437396888c9911bab2fd03f251b2c34c2d2de1f3399820327e82599ad151a6369ce94a50977eb94a79ddc9ea14d645250fd9d9582be4a53ac26e5496a52d6b16a35a91926f9ec1448de5c064edf9f9388718bb19eba8504389b1e729ad6919e1393539ec448ef80083d38d79bff7ec838ef40649c172b756c9cd752c61bddc5dc9a9f46de9cf71c8fc22cb6a354b1fd64065ba5e7ecad5c9104a707c50a7090327b3063b64b959c272b1fc67a2bcc46cd95d928ba82712e19c1904b18fa487bb031c1667420a1870e0d22a3ecbb99f67f33ecff47906cf0e6289b21a7a59bcb5d9f879064f61d6f8d493c4f267107a9c439f67fc3d8df39b65c4ee7a2aab42a52b5c10ce1213287fc896a86b02d96e543b12e85dc7feb0ee1659d0d95ecb6c3b23b5f36c5ae98ddf6588776816687b6830cb8a37d9b9f08f0ef38f01e181d0b25743c7b921a1d7b62a5bf4856fa998444cda17352bbdf7d23ef68c26de35534a123265d011616e554377a5a59014b7536335d25cc4cfb0dbbe3f49dc50d9eb3bd1ffd4645c24cac700a2585334cb1703a61e04512f09c8d6ae09db18ab058b32274c12ac212cd8ad015a3a35842c7fa93d5e8e886a9da5299aa0d5154b5093c36b49c3f2965a38e12a6844effbb02fc5b6f00da1da3699984a66f14b5a607065e2201df748a1a7816a692cb3555b227d61f2fd5ec8ff79201d3db1592f983d7aedd77579bb95f7ea4327fd01b4ba04c9240c5c6333f7dafd5a2b92a09f4c1f4fe3099de8bcd01e513146af19d7d6529d3c171b9ae07bd1f865ca18b9c8d2157ea22e7c890695d599982f1687fac9057693adb06607cacd6e5632086bc4617791086bc56177930867cb82ef2100cf9085de4a118f23a5de46198d21da9a974c331918fd215792f19329d943d3a11919be3c07b6322afd7157904c6f2319a2c8fc4443e5657e45118f271bac8fb60c81b74914763c8c7eb228fc174ee044d9d1b8b897ca2aec8e3309d3b4953e7c663c01b358127605c9caccbc544accf7a8a669f7512d621d894820ec1648c8f5375f99882f1719a261ffbca8033eddbd313018e317bbb1fa6749b35956e2a067c8626f034acf4ced42dbde958e99da5597a33b0d23b5bb3f4723192cfd124797f0cf85c4de09958e99da75b7ab3b0d23b5fb3f4f2b0d2bb40b3f46663245fa849f21c0cf8224de003b0d2dba25b7a074a90b3e9a952d65262728e6a36dfec612d99105d674f31656e7e3afb83bd2fe6a3a6b1dd1b1dcf55ec99ab8b13298b71386307616571896e591c2c43ded3bebd341191b7e2c07331bdbc4c532fe761c0976b021f82d5fd2b34ebfea158e95da95b7af3312eb66a72b10003be4a13381fe3e26a5d2e1662c8d7e8222fc2c8b856938c020cf83a4de0426ca875bde650ab0893f8064d89176312dfa829f1124ce29b34252ec624be5953e2a518f02d9ac0cb302ab669525182497caba6c4cbb1a1e16d29181a966274dcae49c70a8c8eed9a74946126ee0e5d13771846f49d2920ba1c13fb2e5db12b30b1ef4e81d89598d8f7e88abd1243be5717791546c87d2920643526f6fdba62afc1901fd0455e8b55f207352bf9e118f0439ac04760c03b3481d761c00f6b021f89013fa2097c1406fca826f0d132601a2afd58447f71d07a0cfcf114801f2303a70b2d9eb07fe824019726d01d4fe0584cfa275320fd719879da9902f3b40133224fe91a91e331e4a775914f9021b373352255a34ca484c43ac208d3956753a42b2761baf25c0a74652326fdf32992fe644cfaffa440fa5330f0175200be09b38b2f6adac55331a95f4a81d4a761b5e865dd5a743a86fc8a2ef2660cf9555de4333053f85a0a4ce19998d8afeb8a7d16e6797f43d3f37e3626f29bba229f8321bfa58b7cae0c790ffbf6ed44c8381f073e0f63f91d4d96cfc7b4eedd1468dd0512f0ec9ef6ad358f98f4ebcfb1d1c6b137c693fd6c11fbd957bace2e1ffc2bcffe826ed352cabcf4ce17e2fdd8befbf7ec5c65f898c9a64b38ac4cf64c2feda60cd98d2e24c87164ef47e84a9654a488ad61b9106b543ed06c542ec2eadf87baf56f0b26f2479a225f8c89fcb1aec89760c89fe8225f8a217faa8b7c1986fc992ef2e558017eae59805760227fa12bf29518f297bac85b3132bed224e32a4ce4af7545be1a6b00bfd16c00afc11ac06f351bc06b312ebed3e5e23a19326d2dbf4f44e418a1f7d7636df60f2968b36fc0a4fe5153ea1b31a97f4a81d43761a5f8b36e29de8c29de2e4dc5bb0513f9175d91b76122ff5753e45b31917fd515f9360cf9375de4db31b5fb3d056ab71d03ff2305e077609cfca9cbc99d98d87fa540ecbb64e0d40bf07722da17e31890bbb1e6f01fcde6f01e0cf85f4de07bb112a407f96995e07d18b2a58b7c3fa61b910c7ddd780003cf4801f8831827357439790813bb660ac4de81d5975a197af5e5614ceada2990fa110cbc4e0ac01fc54ab2ae6e493e8621d7d3457e1c23a47e0a087902036f9002f027314e1aea72b21313bb510ac47e0aab378d35ebcdd398d44d5220f5331878d314803f8b956433dd927c0e436eae8bfc3cd6596d914831c6e8acfe0763ba650a987e01036f9502f01731b25beb92fd1226769b1488fd325621db6a56c857303edae9f2f12ac647fb14f0f11a06de2105e0af639ceca1cbc91b98d87ba640ec37311de9a8a9236fc980e954436646556f7d0ef5d64b1cedfef4a88f1d49ef6dcc6c75d2345bef601eb4ce8900c7f0a0bd8b49dc4553e2f7b0e153d74480630c9fdec774bc9bae8e7f802177d745fe1043eea18bfc11869ca58bfc3186dc5317f9130cb9972ef2a798d2f5d654bacf3091fbe88afc3986dc5717f90bcc64f74b81c9fe1203cf4e01f857182739ba9c7c8d21f7d745fe062364400a08f916d3eb819a7afd1dc6c7205d3ebec79007eb22ff80313d24054cff88893d5457ec9fb02994618994618c29949f313e86a7808f5d98d47b694afd0bd6f1d85bb3e3f15facae8cd0ac2bbf62aa315257357e9321d3d595a31211792b0efc3bc6c53e9a5cfc81018fd604fe53069c69df8e490438c6eacabfb0d21bab5b7a7f635c8cd3e4e21f8c8bf19a5cfc8b014fd004a63318529227ea926cc99029779334498ec880a9f59c9c02eb9981f13145978f1a181ffb6af25153064c6dd17e9ab6a8960c982e779b9a08708ce56eb53192a7e9925c072379ba26c975312e666872514f064c153457b3b9ae8f01efaf09dc40064c6f676654ddd051fca992404d3c818658059f95820ade0803cf4b0178634cb167eb2a761319327d7f8e66e7aba90cb89b7d7b4022c0318ef76986011fa809dc1c23f9205d925bc890a9cfee604d9f5d4b4ce4b9ba22b7c22ae3bc1455c6d6b204e85ec88724c2498cbd90db60a6fa504d53dd162bc5f99aa5d80e2bc505baa5d81e13395f53e40e98d958a86936f6c0b858a4cbc59e1817059a5c74c4b828d4e42213032ed204ee84012fd604ee8c95de12ddd2eb82955eb166e975c5ccc5524d73d10d6ba79669b653ddb19e46490a7a1a3d30f0e52900cfc2c04b5300de13035f9102f05e1878590ac07b63b5e630dd5ad307abe8e59a15bd2f267285aec8fd30e44a5de46c8c8c959a64e460c0ab3481fb635cacd6e562800439bbb77d6bcd26d573ead35cbea64eed84a73532862d1f0f6c3ddcda0cba1eae6d95dc252203b6026e2066150e4f8155188415fe11ba853f18137b5d0ac41e82811f9902f0a158637d9466633d4c064c77983c3a11e07138f070ac14d7eb96e25e987bee184df7dcde98c8c7ea8a3c023394c7691aca9118171b34b918857171bc2e17fb60aa7c82a62a8fc6b83851938b3198c427694a3c16eb296fd4ec298f930167dab72727021c6376633ca616a7e8aac504ccbbba49d3bb3a11033e55137812067c9a26f064cc05757a8a5c5053b0a66a730a9aaa7d31f0335200be1fa67f67eaeadf54cc449fa569a2a76195fc6ccd4a3e1d033e4713780646f2b9ba24e762ce8cf3349d19fb63229faf2bf24cac325e90a2ca380bf3075fa8e90fcec324bf284592cfc60ce0164d033807332117a7c0841c80815f9202f003313dbc54570f0fc2ecd3659af6e960cc8c5cae6946e662c0576802cfc348be5297e44330fbb455d33e1d8a897c95aec8f3650e8d3ef6ad3593a4cfa131c67eabdccec0da245c195727eccab886b9325a55c957ecd43127c602cc105c9b0243908f15f875ba05be106b2faed76c2f1661c39c1b3224c73e8e67b7ee764963093da8b4904c27f4ccdcd58cff65dcbdd48f1d1039c5fe7d86fd4b29d332fa447e6c84ec9009fa362c73aa8b2b98d6e62b9ece5b80e5f246592e4f88e6521ce9ead499e5ecdf53586da2b929b23f71eacc94e89b13ec9ae41ceb3a93e5821e88b98abddd8fe7a7909d853cce4e8ae68be27ad97311e8fb6a726048f440d9729beb42860a39850e413fdf736c9c62c533bb0b31a66fc2f409a6e8e4891ef2eeb0b5c2b653f36ddd286765eee4368f2c61e5ef97d6fd167f9e2a7d2ac27279b32c97a37cb9849c3bf99cc84a6c39cba35f4a6f09c15f62d515f8954ace166339bb4596b37d122abf31b60e15b03a5fcc3457bfe4dc5f54f2b604cbdb3659de86f8f2368d95ce129e337ab7a6da72528ce5e456594e36a5d99eb9df8cb7af25ac8da687584f64edf5729642e25a0eb9c37341db9295ac1700ad1eedf3a4ceb62dc558bf4dc6fa9884eac654c6464520acda322c7fb7cbf237d5a056d1a787b16468ae9c1e6a314bba981cceeaa1dc922453aa2558aeb7cb723d3266ae714967b2bcd0c3b02a791e456b4c9f2ee20c55ad17c997e6722c5f77c8f2759072cf6e16fbc5dbb7932138cf72a376a0dc6e0fe8e843a727984c3997627cdc29e363bfb4b4d9a65bf315589eefc2fa296a3a207478aafddb220604cb59552354725686e5ec6e59cef64272369bd5cf12de377146bf62d43287d7e2822aa561668c721896a37b64399a68d0fa8a52a5efe4db792d61ad77ea725a8ee5f45e594e47d8b7895b0a6f0ef2d93327779493c9ac94cbd9686891dde2ae4d61ae2ab05cdd97c898c09b2eec21cc66a5506ebf4bebe1e218ad9f17237539abc47276bf2c67e3e25acec44605b80d8d35664dd652aec4f2f8802c8f85867bd495b675a41eb8c5bcc73c87694071b436a6668c984c2bba0ae3e941194fb3ab6de4119b217d1e56633c3c24e3612c6ac3e80869a1fd92a81b5359a9c76e71e448a92ee935580e77c8723845318707308d2e454aa43af2bb16cbefc3b2fcce34a8d91549b4bfa960e0708c814752d52e3bb66d0c6895cde7ea082c578fca723549518f27b0598815bcb75bdd3abc0ecbeb63988742b50427b237aa6aa3dfbe268eab92bf23b1fc3d2ecbdfde1a3dc74ad6f296daf92be2e33c3c577955de55c9d351589e9e502b33bf7e8e61fe046a55e28d52ccb6944763f97b32911901acf73881f987f2f9d8ad6a3f3eb9de63f27de4f5582e7762a5a8323276723e89f70cdd5fe9bc4eec3e70aafac7c760f97b4a96bfae24b6ef931ec06242ca6331299f8eedc154298559499582c91a761c96eb6764b9ee8b5a90bc688c00b4844551af3dede1ac94f6ae939bc5d880c9fdac4ceee1712dc31436034a7dac25b6652fb7f346e31ce25b8754d980e3b1fc3c878d0962d7113ae6cf65fde40a494f29911913dabf2c4a610e4fc072f87c229e00f90cc814a67bb1ad793a67414ec4f2f81fcc0f97487b95482ed3dd669d84e5f405594e2727549afef92ca71e8a7c5767b96ec472fba22cb707c62d57b3fe7fd3330327636cbc2463631ada668859f1a2e8a888b6886512391d191def5532bfe0bfa9e4fb142cdf2f63f10d89e55b1e0f90debc6dc2f2f68a2c6fc314fb012bd908c799e5a1fe08f1161d678c673d03b96f12fea6929b53b1dcbc2acbcd60cddc38910acee180cefba92a95d3b07cbc967cd440bcd14f3aedeae958fe5e4fa4bd84da0173388b3d7546e18eb7483647e0d53bfc97d468e4662ca76fc8723ac897d3712c078e9fafd2330ec22d41ac5c24ab8f6760b978339179709508bde0b4fd6762797e4b96e701be3ccf0632b951c7704c1e2b6ff3512c951c9c85e5e06d2c762db1766b1c1bc7d271520e8d2b4f432b75369693776439e943bc63f481d1435cc575aa2d4705f1fbef523d563d0793fadd44fc3b894a2db063eb536c64f7705b95fc9d8be5ef3d59fe862ae66f26435cc1acdf18a5fa928c3fe43c2c2fefcbf29213372f2ea3fed272fd0da9b355e763d27f80d9aae4a4777c0385cc7297b259a85833182a39b800cbc187b21cf450d4a5719cd5aa332ec9e8ca8598ac1f25d2324086745b8664d9be08cbc1c7b21c1c1c653bf5f396c23f9d7ce4426a18d98231f24922330e55e78412eb7327377e4fde4e5c8ce5f253cc7b23ef1188f5602bd85da94493a9dcb2194eaf2eaba3abe4f6122cb79fc972dbc957a6fe1c511be248942a9dbb1493eff3447c695575aeaa7576f5af6a9470ba75ef322cb75f6031d3895acd5971ada6c9e8a6cbb17c7d29cb57b7385ae646c716b21a41fbdda9e98d5e81c9f9954cce09249131dc341e9d5e6cdf511bb788e09186e95ae7722596cfaf318f56a27a96984d8b8fa6929bad586ebe4964f6a4aa0da3e556b51d72df4bec796afbde576179fc36993930155f50ba74f26a2c87df2512e71b7fd6f200db4a14b3b767d9b9cf97f6cccdcc075d83e5ec7b59ce7aa13d0a3caaa694cf24a76a16e35a4ce21f305f96da5849ccdd2d8fdac462ded22416cf6562a47e1d96e71fb1182895d1951395ad227b2aacc6f5589e7e4a2ec25c7f6e0e5acbd4e8ea0d581e7f4e24da01b3feb41c126d01526be96fc4f2b30b5b8193e808a1ba22f16ec272f40b16db9ea8fd8b1d0390882d518f1f4dbe1db819e3e1bf321ebac7ad8de6fac1b76092fe8a792d13d51bafe465cc8be1ae2c30a17ddbb0bcfc86b5656af5c9f1ce54fdb5ea68328f3867c09a1fd5df8ae5f977599ee791eaf55d415e12ed8d896f5458b90d63e58f447a98224515df959b334c0f5263596ec772f6672273c5aa76b53a3d24dbb19cfe95885f199b2b76747c081914277f32db4abf52c9c11d580efe4e3c6e81a6a91eb7e0e40f7b9eaa12ba13cbdf3f6aab5daa46021557e3e8f42e2c57ff6211d0b1dbee597ce45355abc6b159fef218b6d0fd76068bc375c6edb1f7fe48ae1db91bcb35a991406d93a79fdc2c4eb2a3837bb01c58b21c8c88333aa0f215d8bfacb199af1aff8b8d0fe2db105c1b6bdbff5916ddeb6c027bd3895d5ec198a07d8c6c1a760ee65afb455be67e9e56dc7d4e535f6e4b446b775eb40da67bbdc54688d884d58a10e74f0f4a1f1187da5b453ede9c2f4b18f222a0a1fd58b93bfb5ad0517fbfe82859ec84172f17b2de483fd01f81b98b9fa74390adfa2dab36cf91c0b299ee4799dedd729a414b75202fd5487636cd63ef24b529be1435686a19721d6a5d855958e765b23b00d3b9efcba2e71de6b2e184185638ee0a67a3c6b8a9c15a2a4bad2f03107db7b87030204906d796a998e3162a274e70f7bc6e84d4ae19c9c966f6cc2055f5ec1b1a993985b7bcd40e549065a12069eb4097a45a2649a2b8e1d19dad435c5a6a9ba4859e163a9fd566a7b2e17b338581b6776ab8b4d531495b5b56e5ca59873d97385b2c88ee1c4660452828fcc47229ac6b92c226f68df01c4d66168b02e4b3b11c8d359f11120bb6ad8e4b583d9384b56055753ec921eee6076126ae497d97b8fa26896b0d348dce237a2bec14e64358e199c90f037d59cb5dfa1a98a4af9944ef28200db8a10b2f57b2a705a1206d0171496b982ed2605caf183788d14418481b31d225ad91690be76d1226da7f3b5bb0174497c33b962e0cc4653570896b9c2e0b47f73f5b63ff4b66d7dcbd65c340df863297be2626e9a3dbe6576d18c2dd153e1bf4e39a9aee0a0bdd9bc060e8cac07cde1999c5ae6576677925d3bd3051b8a3b34b61339314d6078dc50ccf345c1868faa4bd4b53739334d50534b93b4a8581a2dc562e452dcc53541c75363aa18061a06872854b514b93143562c65e1054caccfb0c36335ec03a1a6120abc31297ac5626c9aac5f4a92254bdae1a0d5d725a9b24a78d7d3323ea39f3bba9698bb8926918edb8e6f219d8301078630797c0362609ac030c3a159306048581a0f39bba04b535ddaf17043922f8c78f737827b5881493b00cc24714bbf4b533495f4be2764dfdc455b02a9acffc65a5f6e76b4341ddb37bbbd4b537dd91a0c48c23ee9e05e1d0ae4a60bd3aa4cb7a898d7ac34050417397a03d4c12d48ec091e11a96eb95d111205dc551c0aa62182b22fd2348dcd32489f48845481e9da2a39bf2d3eab8927bc6c2eda9a00322416547935436e4364de8db5ade579b4d2a42d2efdf0c6c5ba6f971a438324a84158581a23746b814754a97b37a0aef4e888869e1400cd3b0e9b7da2e719d4d12d711b49bb36dcc02debdd8bd9c879bbbba747631edbc867a08f78d1fc3dcd9b00a87a30fb70e4c0d7735495e03a08beed6e0cea6f5a1200a8c44bb99248a466b4c63d66c99efa4abf1f6ebe52ca53010b620e212d6dd2461f540b584c7da8581a479835c927a9824a9264b7a217b211cd49c3ddca526cbb46512fae32eb872840803512f001dea6992281a69e1dd398dc66f5775f78481b4bf805fbf9749d21a13189e92cfc82a0cdd34c8161002d53b5d7d7d2730c5bb3eb220647dfd1210b3d8c774e574c691e359d261f653ecace992d6d7fce0db5f39c340d117a35d8afa99ae9013584cf54a96b87bb4aa7bd46e05db22a62c14c47d02742bdbb46e094be6d8accab0e8165829926392a2461e8ac219e74a97100ab2fa9bae8862fdc80a06136e67f4085011079824ae29c1e726c711b12d7318282b001ed781a62ba6b3d2987a200ad9ec91eb240c470f7f0d98c01d6492ace6a013e11c92e49f370ad332c1f1835dda069ba48d8662ba7dae092c92da89130b034d3b17bb340d3149531b4653ae6da91cefd6616cc57df8cdff496c12a4764d1fb87f8f95e4d789abb18eaf68a70378aa9d65dc77e65842cf0a77da07089ce4436b8015ea5949870864c5eda56525bc6e294b39fe3f2bc9f59f5909b9d1b334e7fcb31416f5662975e0b2121ecf67298dd0b292b227594a53b0594a4e9cac8496a76629adc9cc529eaa93c98caf88caaa12ad9b15737e2b4b1a7f99258d6bca4282efb362ac5dc84282c8b2e20462642515589b95e44294ac14cc4767c5d9ad220bdda2210b199067a1f34759316706b214fa7d59604f842cdf544c56dcce76966274655682239e2c24f6c46bcf632da9cc421c6859313a775971970564253cd1909544d86e9667095f628b94b312f0e27b71135b1a9885ac2271372f821d0d77d3a11cba79d1b01affbff715caa1fb0a0da7242ce27d6fa737be97e9c979aa0703c96076754a8ed63bc71ad1d77c6976a892e64c5e019d73fd442f5b967a5d4f3fbc5d22194a6af52c98aadfdbf460c64b5bacddf3e6936176368cd1d9c8149d9d335c3a470489cee1a1a4733f40e7c820d1d93f94748e05957d5490e81c104a3acb009dfb0489ce81a1a47333a0737490e81c144a3aaf04748e09129d834349e76380ceb141a2734828e9fc08d0392e48740e0d259dbf023ac7a76314443b40bbcf2868a6e5d237c1247d8d59d2ae43d2ef36aab2d34608c8a3ce3041dec47454e5c5686586e2d331cf1073743630456717a08b938244e7b050d2d902d0393948740e0e259d8f81ca3e2548740e0a259db7003af70d129d4343492701957dbf20d1392494747e0cb4736a90e8ec1f4a3a8b009dd38244e7c050d2793aa0737a90e81c104a3ad7023a6798a4b315893d22f756f4c1e6a86c6a8acac7c1683c3728540e0c259583c10cd0fe41a1724028a97c0368e54c9354b6e4542ee2a106fe63ee1cd19d23d4069823b2a629227b0322670585c8fe2124b21720322f2844e68490c85fc0b867b64922f7206e3054a241a1f4fd72f66ef8fcea07824ed11c93c47620f1fa98d891e0062bfe4ecb10ad0f027d3dc024ad4d8998aee86fffbd8a88630be9b3344c58186bcb6b03020f344960f32881f3d90b0e9013369826128d4d5cdc09483c281d953b87fd9d48d870986de63440ebc126698531e52a2b4bc24cee10d020cdadcef1108433da08d53645e530d0fb9c67924a11413e24fd33e6c6f4f061a08787a483bc61e927ef7753e43d0dc83bd42479628d0436eef15662a35368c6aaf118d0dccc0f1299434348e65840e6822091392884648e0464e607894c83de4b63648e06642e0c1299063d98c6c8dc0b90b92848641a8cbd3446e60840664190c834e8c934d7290764160689cc308e708603328b8244e6b01092390e90b93848640e0f2199e301994b4c92e9ec9c50cc892cb63fa27e20fa7af8fc955d894b5a713a7c3ff8648437f2327cfef30b81fe2dad5e379a03459dbf46e71ebb98a2f268e0465b6692ca5e9cca12fba51276159bdde4daffd3c9306752c2d9676016194ff62363993fbd903f83ef8db1a52a364b79735394d70241312526296f1bd710548dcb34d8b61b8b7d7b1c9883e54123d460fb6e8cd02700a1a54123d46083658cd07b01a12b8246a8417f9231421f008496058dd030c60f3f04083d2c68841af4c51b23f411406879d00835d86d3246e836406845d00835e85f3246e8ad80d0caa0116ad02f6f8cd0ed80d0954123d4a06fde18a1f70042579924b41e237409db8dd1d9f99386c71af432198beca06521285b5d9dae1118f06a749c7ebe292acf05ae913526a96cc4a8f4c7675281e98ea26b42e8a0eb01b470ad49eadc08611afc9ff6086163d5f83c60f90e374920ddb1d5d953788cfdb7b3f3b7bb3ff1fe8c4cfa7ff828cc043a7884490a457cb0f06c3a2b279cf51553c878a9ef3dbcab7e2603efe53a93b4f6207e87713e037377e11d6bff4fdb6cba686505db6f3ad6545b18e7d3978026e8489364bbdbe30ed88d22353b00fa8e32499f58630e9708c8779b0e73f4fa4ed0281d6d924eb1e0af3f32f91bf6a52b2783a6697d3a3ae989052384d1420e04541e930e0b39800c4dbf8534465f1d60218f3549df9ea4ea707136714e7a58cb4e31709c19856c69553ed3d62206b7dcac666e3545edc180dae3aab792873d48e12f50c937a4b32b5f6c0b31070c2a710787c1aebc3107472ee8ca1f6f9256111397c3b494d25962bf444f9d58167d294d6dba314b7a17e81c9d60baba8f61675eade027fd384b519dd593b4af29ce3f724e950a5f3fb306a8ee279a767e887ee6729e783e1bb9875d1bcf06149e940e0a87ee76143e0f28dc689242781c5519f11e569526128db5dc9d80553c395d24bae74a5510e7fcbd706f63f22cd0c453d2e1c6c0e674aa9ef26330d4c5189dfd40b7675390e834bae3b5b94d76009da706894ea3db8c9adb7f030c1b4f0b129d46f7c53446e74a40e7e941a2d3e8aeadc6e83c07d0b93948741addfdc0189d37013acf08129d46b7b73746e77380ce338344a7d1986063747e06e83c2b48741adddede189d19a0a37476753a84bda181063d97c6e28b7a8261e539e9a012d34c2f950683568d51f910a8e4e70685ca81a1a4b211a8e0e70585ca01a1a4f225a095e79ba4b21bf14719f977c974169f8a63afc555167b64d0921a0b45781b107d415888363887698ce8b300d1179a24da3de32f67370a54f884b8f45d549db615c2cd0fe5ee1db381266e49079570bbf1a96406994472993045f6476bd2e1993746e526a095179ba4d29941874b53e6f37d86c7f27974076aa27d2db4210a4268211b02322f314966fcdddaa1f870b776830d0f3dc4d408ad7b80b1d2a5266915215e95767b4ddb769516dd682fd598c61e0ea8bd2ca8d41a1d961aa3f666600c2e37dd5d1acf1aa37cb68b7ba50d10fe537d9b02faae30495f8b38dd2591d3f92617a00e8d18a2712c18d15f69be7d57391cd91899c656f3ce043ab93548648671cfa31980ccab8244661877939902c8bc3a48648671afa37d0099d70489cc30ee22331d90796d90c80ce31e47530199d70589cc30ee1e331c90797d90c80ce3de46d980cc1b82446618778d1905c8bc31486486714fa3bd00993799243393541d48aaed056bb07d37b617ec0ae08bbf391dba8ac584f8436c0c5a516301362381aede1224320db6efc6c89c08c8dc66da01276689769f0d7cfa02fa6e35495f5b405fd52d5228987b8e6f982780df0784de6692d06680d0dd6b45db5980c2dbabd33efae7d0c378705d2bd0726f0f1299613cb8ae3520f38e209119c683eb1a0132ef0c1299613cb8ae3120f3ae209119c683eb1a0032ef0e1299613cb8ae2120f39e209119c66da4ea0232ef0d1299613cb8ae3e20f3be209119c683ebda0232ef0f1299610c7ddd1390f9403a06914376bb41642e71297cd024856ac7d819d446638b5cae02e1830f05dbb76ed0721af3add705c15b3b4cd22bdbdb30f1f84c83e37563e185db801d7dd824b56227d80164f7dc09f62960021e498797bdbf6d29779f55419f03fa1e35491fdc5eca5dca025763185fc4624c07cf042dfa63e968d113eb6186d15bb43fa0f2f174cdfa087d9ccc5a7177c68746b0cfe0ab84c2baf5d93440e813e9b08f03d8c10c69b68fc6e2d70968a79f34499fd8c123f1f8f5304616ed099a9b9d41a2735828e96c0ce87c2a48740e0e259d0f025bf97490e81c144a3ab7023a9f09129d434349e79f80ce67834467388f467c13d0f95c90e8ec1f4a3ae7033a9f0f129d034349e70980ceff0489ce01a1a4b31cd0f982e961251d9be7da7f53107aaa00fd3c9fbd7e3873bb15b3376632d19c05d3c6082d3045e86440e88be97079d071bab3e989339c2c2413d9470e33611ea1ff0ba87cc924958d8938a22eede3f3ada6c83b1690f7b249f2da93448f5ff21e6b637072e25f53a48e03f33eaf04915483e1aec648fd1778925e0d22a906ddc5c648fd0790fa5a10493518fe6a8cd43f01a9af079154833d5063a41e02487d2388a41a0c8735466a1e20f5cd20926a30f8d018a93300a96f05915483e1b1c648dd1790fab649527b13ef2eb18bd80a4a47980318b54b58e00c3c9a5e4c18c3847787e5acf702d2df3149fa4052755ede1bbf34cefe7bb9fd1ffdb79311ea1728625b4f5261a7133a785dcd925866ebfe2a52c8deca63633331416db010f635550803885b08efa6c39395587004dddc378c2b40fa009d7e2f1d8e17cc2de8a5338c0b10a7022adf3749a51b3a3624fdae97bea6e83b064c3e7f60923ebd6d51c3181dfa12a0f6c3a052db3f94d47e069aa38f4c52abb61ac4e8517bc62ce81640e6c74122338c4bb82f06647e122432c3b884fb5440e6a74122338c41b91701323f0b129961ecc01f05c8fc3c4864867109f7d180cc2f824466189770170032bf0c1299615cc25d08c8fc2a4864867109f72580ccaf8344661897705f0dc8fc261d1ea4c4d61f87f114cdd3c138fd5b9354267e4884c1cebab14536d340bcc9772669148bbe544271c378b6c15aa097df078dd0309ebc711420f487a0111ac6330e9603427f0c1aa1613c81a31410fa53d0080de35907e580d09f834668184fe2580508dd153442c378e6c11240e82f4123348c2772140342ff1b3442c378f6c13240e8af4123348ceb984a00a1bf991f70d2d8bb35f68754d055f6cb8bc0fa25778bf4f08ddbbb1097c6df4dd2984974f70d33d83019db376c2f1058f387497a1b727a9db3b04b582083835d4c0c1ee05cd3147104e8e59f2689eb49bc51a2952c16691607a0519f95ac92abc48318d45463d1202380e7e92f938477440d4162a13606bb53c6c8ed00c8fd3bc8e48651737f0136f69f20936bb09b658cdc4ca0b9ff0699dc301e4cde11904b9bd2c0926bd00d688cdc3e805c2bc8e41a745a1b23b7132037126472c318989b03c8cd0832b9069dd9c6c8cd06e4d63049aede4ece616ccea6838e584d93d4c21d4ba7b17523cb7ccbc6c6db9f95b314c3bc1f4a0e7109ad956e5d95af3fcd63be2e1a1054c4e09613a3db256c3545ed6860066a9ba456ac78a2f300695ff164acaab70755bd4e70ada8c1000b63d4be0ba8ad6b92da462496cbb0c21c75f54c511701f6b29e49ea4612afd3905663ba68cc0118c7b48f0a4533506227e45d6eee085d4cc4fc01dd11cd5d825e4076bfe5e78f029dae6fb260e26d0bef9dfb0ae354772fa0e30dd2d170d13dcc779fb3941703fa1a06a34b358ed00d11ca98c63a26c3a866fe6e8adad6a04bd5c824b56d24d4c6b298c34279687a3b4067e320d169f4204163748e02743609129d4667b48cd1b90f68d19b0689ce01a1a4331fd0d92c48741a0d5f3346e76980cee641a2735028e9bc0cd0d92248740e0e259df7013a5b0689ce21a1a4f3034067ab20d1393494747e0fe86c6d924e3a449ec91d277463c35206e09c37163edae8784fd0d6c6246d5d48d5e3da26903584ee09b992089fd20cfbf30242c32767327d2c6004535f541a26448c45abf60424b74d47554ffc0cb2302e3deb0862a8db0589ce61a1a4b329a0b37d90e81c1c4a3a7780cade2148740e0a259dd7033af708129d434349e7df80ce3d8344e79050d2f91ea0b36390e8341a9f678cce0580cecc20d119ce35fa27013a3b0589ce01a1a4b302d0d9d9249d5d199d53ec9772099d5a2be09f5291fdabf8e6f3e3adc7b29dc897f13727dad7421bdce01a2a6343d22c40739774ccba633aebb5a70643728d0d3c7702a748d7a0506974f30363544e011371dd8242a5d1cdb18d51f90dd0caeee90ab8a5e73856da4c94d9c2508b3a8738273a16305b5a980eff92318b59092c660f93843625621ffc01d5115ed3c5148135800b24cb2481dd1981131800cdbda37b050c861e8c399ec5e005a0753746754ba0ab3d4d52dd9978831d8b088dada770de15fc03edbf29e1f9d16b9e0dba8c75bc8c4634bd6f6a37be0b807ded65926267b34d780e6eb5e9abb1c6aa1dd0d7dee918436131a010ce59f31cc65d75bb01ddec63be1be54ccd39edfbeea6996d8166f6adce1ea95733c3b80bf938a095fd4c52d99cb83dd2f1f6032a2a0dadcd63dbc82c0b752f745fd089ca36dfec3824ae62bd4e7a3cfb4216c2205e4a538fd49846ae01953bc724998d0199695ee6658cbc5980bcfee988964fee60ab30aea0bf0454f20141a5369c9b13dc09b476a0e946682acbb7d3f4ac604136f4184bea6e2e4fc7c670c61aa16680c441e9688412ebae0f09e5e960b781ca3e38486486f174b0db019943824466184f07bb02903934486486f174b06b0199c3824466184f073b0b90393c486486715c7e392073af209119c6d3c1360132f70e129961f4639e09c81c112432c3783ad87d80cc914122338ca783dd0fc81c6592cc0ea4ea8a0e77e8388314d983cc7c062f6637c3bc86e367e2d2ba4f3abced891dba66b08b648cca7380868eaede890b078a3a8e8d52696c36fd58307131261da1342af1c7613c78ed64a09b63834668180f5e3b05103a2e688486310af90440e8f8a0111ac683d74e04844e081aa1613c78ed2440e8c4a0111ac683d736024227058dd030ee467734207472d0080de3c16bc70142a7048dd0301ebcb60110ba6fd0080de3c16bc70342f7331d5033857b978aed4f68f8217dd9dd2ad51879c34c91d78db8e44d4d4734d2d0f44723198beb780a9037ad3add1d33ec4f9612bae14aa55977c7f9a6a87c07b83ba6a7430f87ef4651716f003d9c918e2d7807d8e2ed3ef4fd0b1a905cf393144b98ef9c7eea6c2de5ac125a697fb8880b54c4d65cd0bd91c217a6551fe8e2fec1dd883f8c87f64d01367266756e5aee9d4c0b632cc768a0a5b382b1ebb6ec201383d46e35456d4db09c3a2f1dcb00bdfbce559044d75f1a9fb1343637f423d0ded9e959154cdbfbb4af0a36364fb906b4f8734c12d85e52fdb18efb1852ce085d6bb6e2efb44c8d8640f37440104935e8dc3046eacb80d4038348aa4127b13152ef02a41e1444520df64e8d91ba03907a7010493538256c8cd43701a973abb7cb1ff6809acea0cd9f579dcebaf16c10ba905369b0aa773745e589402b0f09d206e7c34c06d21873990c0723a6438344e7f050d2990fe89c1f243afb8792ce8340655f10243a078492ce0d80cefc20d1393094745e02e85c18243a8dc6741aa3f33640e7a220d139389474be0ee82c08129d4617c018a3f36b40676190e81c1a4a3a9b838e52513a1667e1ab35bcf349615ce9b615e8e6e2209119c6956e770332970489cc30eef5b10590591c2432c3b8d7c7e580cca54122338c7b7d6c02642e0b129961dcebe34240664990c80c637cc89180cce54122338c7b7d1c05c82c0d129961dcebe30840e68a209119c6bd3ed60132cb8234a0347adea0b101656f30a03c2c48741a3d0dd3189d33009de541a2d3e82e9cc6e89c002a7b4590e834da7937466739a0b33248741a3dd1cd189d67023a5706894ea37b2918a3f32a40e7aa20d169f4e85b63743e09e85c1d243a8d6e726a8cce8f019d6b8244a7d1a36f8dd1f917a073ad493a9b713a07dbff2fe789e7b3c507613f95601b71293cbc3a030d5dd19d6507c6a834b6b8603308343cc224958d88bb00668cfd337db19284f9a091a580ba7526a9eb22b18bf26559e36c90e576aa2bd81d7d3b4d81da7d4d917c03b09647868164836e3a63245f07483e2a0c241bb4b4c648ae0f1c2447878164835321c648fe0968f2fa30906c70f2ce18c99380261f1306920d0e138c913c01907c6c184836186d628ce4d980e4e382729ab65187b5b181c423c0f26e080a9546bdabc6a81c08b4f2f8a05069d4ef6f8ccad780569e6092ca3d88f798e742b286d0559d33ec0f0a083dce0ca7d6e090c118b1ab00b1279a2436d3476c09d8ccdfdd9228d66c7f1803270a00bd2705c504185d12664c539f01546e0c0a9546d72f19a3720e68984e0e0a954683c6cd9de301b4f294ea74617b776334682b8dedc63808f8613799a4b213a3728afdd24c4658a1fdd22afeb9db1c55db09efc61cdd75894bf0a92609eee66beb2bd970f3ff8f1f7617300aa7a5636bccfe6c7230cd5b631ab3a9eb812138bd7a0ff4097bffb33fd0c4cd26a96c11874a9153a3b357432386686c063a4c6798a4b13ebb59c1f25e64038db15f5f4be869dae16b6e3a82e6e6cc740c2da1ee399bb2ce22e3c97eac05afb05f749ee5b2a1e75a42c7f2636c098acd7aef9b9ba27729a8da67a56337d14ab2c4feb982a8ec786bb4536f6ccfdbef4103747650a9353a8a3746ed77c0289c938e06091b2fb90d92c176dd5883b40b68e8b926696c68dfe4f278bd7ce2ec1f36856926b5a8e16b949a00fd3b2f38e76e1a5c956cac9b7e25d0c1f38373eea6c1fea5b16d02d783b6fc827458c59ca8652c602372777bea340c1c8d55eee740e5bed0f432454ad878967021fb349fbd7a38d8ed7b26fb959eaa60302c72b12932f705645e948ef8e61cf6b7739d69ff58cca80d7364e94640e11693143600143a2c84f96cec0341c37271704e3832d8b018f3a95f0d1a964bd241654e8ca9dd702f56f80054e64b4d5249ddf45399f5a300a5ac79a908a117bc0320ecb274342083c8eeb640e64840e1e5e9087ba1d577021b2faf64424cb53f59c4ba3633c8eaa82e52674559a85be6fd00b157a4cb2e169255c499e0ca634c888985b4e8e87c53543e035aeb2bd3730e5c4efa27bb8c69e21f80bead26e9eb40fc93b29434e70ca329f64846e69c18c26caac10504354dd19a07666cae4ac78e355427273132a7db7f17b26041f720a88a5077c857021dbd3a3867c085712bbf4341c3734d3a8e1c1db41bd9ca130179d706e76092307a1c6b822a7d5d700e2631d8d4183b98642318635f9f8e0e103d4538edc7e219d3c4df40a5be211ddb52247a34fd709315dbd8c1f46d41c5be3148740e0b259df5019d370589cec1a1a4f33e50d96f0e129d834249e71580ce5b8244e7d050d2f93da0735b90e81c124a3a5f0274de1a243afb8792ceb980cedb8244e7c050d2b901d0797b90e834baabb1313acb009ddbd3310aaa96c3c1cd1d7807e8bb235dfe4a07447e4c7d988794bf0332ef4c8f2e56839bed7753f475010e8dbb82b451e430932e5f6355bb3f988ab83b48740e0f259df3009df70489cefea1a47326a8ecf706894ea3473519a37335a0f3be20d1393094745e04e8bc3f48740e0a259db7003a1f08129d834349e78b80ce078344e79050d2f939a0f3a120d139349474d6061da51d26e9acc3009ce836fa19450e5f904b2de2d2f5707036230fe3a6625dc1a4d92326a9ec21a1d2bb82761ca19b8b2c67ffa681ad2b19e4042412d320d9c6e22f2700bd7d343d9b8d0cd88d628af607bafa5850f6c2323a4161acda3f00daefc78342a5d1c909635436046df71341a1d2e8c484312a5f005af96450a8341a6e608cca05402b77a627d47f78fa9b1a63f435039af854ba56d43a31e9741dcf6216ec5f4ec2bc6ee73cd0d9793a385b830d3347a5b148f4fd81363e6392ca96846e2142bbdb05fca359045b326f709da3b16a5d07e8e4b341dd2dc868db6d6cb7a015a073fe5c50a935da593746ed0d406b9f37496d67d0182d620eb5718cc252d61c4d25de85ced358c3b4c4864bdb8a71638dd5dd407bff938e988ec4964d0d3479c487b1e6ea1ba0af2f0489cc30ae42fb0190f96290c8347836853132df0564be1424320dee6a698cccaf01992f07894c832bd38c91f93620f395209169f0dc3f6364be03c87c35486486715fead70099af05894c835d796364be05c87c3d486486d12dd20774dadf0812990677fb3546665f40e69bc1d87ede603b6e6cb7df6ec0effe96491adb12f58554062bb9b1c52a0701bd7c3b68841aace8c6083d1810fa4ed0083538a83446e86440e8bb4123d4e0c0d218a13300a1ef058d50830e396384e60242df0f1aa1069d72c6089d0d08fd2068841a1c641a23746f40e8874123348c6b7c4701423f0a1aa1063bf6c608dd0710fa71d00835e8a43346e84440e827c13e73ca609b6feccca9121033f2a9497a9b93aa6702d09de2f218adcbd211c3642c5ea41dd0d1cf82e3611a16ca69e1df01999f0789cc304e0b4740f5fe22486486715af8bf4033bf0c1299619c16fe0d90f95590c80ce3b4f04f80ccaf83446618a7857f06647e132432c3382dfc0320f3db209119c669e11f0199df0589cc304e0b6780aed1f74122338cd3c23501993f04e7104e837a696c30b91554f21fd3714290383e842ea9a68ba8a9c8f4ac8b3531880de31af69e60cefd27d3cb63e22f1b744e6231d80c193b89652620f2e7a0106950238d11d90a10b9cb24911d1991793ce7334811994adc13fde88691f3b90b8e7a3917d9ff76a027dad7421bb2c01cb9c60e71a02882dc5fd2b1d2a8aae33891b546061d21c6561a9d075afbff9aa4b693845ac7494cc92b25fbb2dd3fca624e7c84719e3303e8eeafc1399e298c4ebbf180cadfd2d1cd17dd296779eceed585ea0e1aacdfd3b35dc0109f0148c3f2416376b336b09b7f046983f2e1a10c51ec01464a7f06894ea363786374b60674fe15243a078792ce9da0e1f93b48740e0a259ddb019dff0489cea1a1a4b32ea8ecff0689ce21a1a4f32ba09d74dfc9c0d019cec507a5804e2b48741a5db4658cce0b009d9120d139209474ae03746698a453e6599a6d5f9d0d79273018fa5b21df14b58c8de29d6d508dae8b337650c94230c0ac61925a7a934b9c4da1c337906c0c34b066902af4f050066d77009da15a41a2d3683492313a1b023a6b0789cec1a1a4f30150d9eb0489ce41a1a4f34a4067dd20d139349474fe01e8ac17243a878492ced7019df5834467389763cd03743608129d46b79f3246e7f180ce8641a2734028e93c0cd0d9c8249d4d8938e8812ebb4afb19abc6e6232dd0d36c6c92c0789b47873fe4e0043037d9c424951d88779e9cf2b092d09595fed972ffa14d066935b663ec70406b5393b4b6f4d15a1c23f4208c2715f4029ea1664121328c311c37028d6c9e0e9b89c5167935d2e01a366354be0a9a9f1626a9eceed3c985a46a2061e2218706b5d698c7b309a8fe2d4d529d53a579c288ac50f0c68fb1df2f671b0618b5be7d4dd13f11d0dfca24fde2a09361643e7b4013cf67fbcaa7a9af6a2c10f145e252d83a1db34642832b98d6d2eed5444e5ee16ed6a41d069ab436d5390c8070f343b92c7b3f4065db743669c5bc8f40bbfa8b9886ca6deb240e30c3865c6a5f17b17e8541ad1d678aea61c0a6b63349b5fa5641c343b907683ba0bbed83466818031df6008476081aa161dc03b41620748fa0111ac63d40eb0142f70c1aa161dc03b42920b463d0080de31ea06d00a1994123348c8eea6f81d3a553d0080de31ea0bf02423b078dd0304eebfd0d08ed123442c3b807e83f80d0aee9709d24771ea7c1f6de985f7507a0b65b50a935ba9dba316a9f202eb5ddd3e1954a6c4f9c303af84e055adac32495899f3a63b02f6aecd499b9c0e394659246b17c7be86e156db20b54e89ed5eb6676a04a18a9061d215d4c5179321815f50a56176940287d9f45c042f60e1aa161f47d2e0684f6091aa161f47de60342fb068dd030fa3e170242fb058dd030fa3e170142b3834668187d9f8580d09ca0111a46dfe73c4068ffa0111a46dfe72180d0014123348cbecf4301a103834668187d9ff301a1834c12da98883522bbcf866b79c4256fb049f23289eee1510675d3d8e1518bc1287e48753a44bcc160064747e79ba2b23d70cd0d3549253c87ab8479e2295029d3c53439e88c55f775c0560e4bc7f2448744672765d9c445b823963f04d673783adcc503edff769fc6a733b08e7ba57b9ba0c427d70c363cc6a89d05a8dddb24b55d89374ab9c47e75315b8e40a9dbdd23940f04348f08c6465779cc1cd050f12206b7dc6c7bff7fdddd099c55551d07f0332a6a4a28824b21096a38a62cb3438a3a306c823032c3a020cb308bf364609059d872c17d570a0d1744cb424d2d7337d3d4ca722ff7254d73014b2b2b5373e99c73dfe5fd66e63d18b2df79ff3f1f3e1f667d77ee7ce7dc7bcff6ffffaf61d10e87e7fdf010f7d63c1f5213f8de4a7b34bd054ffa43b219c488879ba5b274cf1c78ca1fcaa4dc3dcd459e99b25065b6f952b8ac0f9384a9b1aa610960964ac2d458d5f050c01c2109536355c33d0073a4244c8d550df705ccb21093747167de8d846a4db9892a75c488f823b6840c2483a0133f2ac4a448a6b6da11939adc92c6d9175aeb68499cd4bdf234ce32e01c2389939aef8ec679185cec632571525733699c7380739c244e6afa401ae785c079b8244eeaf888c6f93de01c2f89939a6799c6792f704e90c449cd644be37c0d388f90c449cdb34ce3fc3b704ee46fac29b75f764b1d1bb6a164ab3e2c2d04a18f49814e9294cb56679cfbd76146be5c12e750959cbb02e79192388b5472fe0a2ef6c992380b5572de0c9c1592384b54726e0d177ba524ce62959c6f43eb9c2289334f256703705649e22c50c97909704e95c4a933c66829701e95cd3dc8ed2f7462fc1b2dbefdd730c43c5a0a65814aca6258d6982685921a9549a35c0fad727a989d725b5208cc9b707f3c2644fc90fbc1f5be1dc6c79e9ffc167d5b1372006f4688a21343fcf3baceb4a49d828b705b144eb64d8011cecc10d56532777a705b36a6e527eeedf84d0e89f502609d1522da32de3a1325f549988e257bf071a331d1542e3cb76787b8e0bbd69bd40739069edad5522035b6c8210039470a2471032c0db219206ba4401257226990f300b2560aa4c6f2512b00b24e0a2431ea8206792a40d64b81244ea6d1206f01c863a5406a9cb45805900d522089d16934c8db013221059298209206792b401e27a74696c6b8b48381726e88e81ff72d9b0e3e2d62de2969980b600aa3511226f1f94dc33c1e30e749c2d418cb3b1d30e74bc2d45857b016309b24616a7c005501e60249981a03a3a702e6f192303506468f02cc8592303506468f01cc664998c4f10f0db319305b24616acc19d30298ad724adb689c04be0228dbe41415213ec9699b0cce8271f92259b9874b5416157901dae66269a01a8b8abc08a04ba4816a2c2af234802e9506aab1a8c8b300ba4c1aa8c6a222cf01e8b7a4816adcf0ff3c809e200d546351914701f44469a01a8b8a3c01a0274903d55854e449003d591aa8c6a222bf03d0e5eca08051a6cdd4f9531c979c1049d81757dbb7ee65343c5a44854bf111e39d22a7ea05b11dd2aa5e7c05b65b9fcaa4ec6b3a569fee7a7a71e233fd1a16eca9d0464f63c2ee633a26c88faa618c360b93dfe20ee8c2a7363e0faa71b1a31ee69b4e0f556e247e1b9dca04d3b9820b39468896e1e84178289d112246286eb351fb8cc2aec699b2b413ccc5a690db4abbb158bbc33df64c39a9f2352ec81d0c77d5b398945f850b3e0e07acf0075b60dba7cbb8e5da6c6552467360e0bf81f46cb9254688ad95d607f8101e4fe78429df34a4037180c0e9812cbe5ec0776e083e57853a38dfe72cbe1ce03b2f9ba3a432e32a5dcd49ae6b129fe0035894cb81f2fc901d2317df5be5237d5b3d5ee6c127919536f8ec0d1da30b426446c8c2e54deb0add07cfed0b99786eb8d171947384efec34d81711138fd2e8fa03dd45728a87e4a9dcd6b504ee8d2b24616adcd6b51430bf2d09536360cb5cc0fc8e244c8d812df30173a5244c8d812db301f36249981a035b6a00f31249981a035b8e01ccef4ac2d418d8320b305749c2d4b8d6530598974ac2d4388f3e1d302f0b95562f613a6f3e705fd39cdc71222c995d2ea9c6ca50e6b39cb60239106684ae90c4394c25e791c0b95a1227b5a749e31c0b77cd2b2571e6abe46c01ce3592380b5472ae04ceab247116aae4bc1638af96c4494d3f41e37c1438bf2789b35825e71bc0f97d499cd4a02b1aa7818ed23521b61a0c35710ae7686137c82888b63efe8149f1fd209b3bdcda870668cced3a1b06943f0cb3e9250b2d9176214f8596b8564ad90feaec25ad25de0f8f986ba55016a8a4dc0f1e2fd749a1cc5749f90cb4caeb9994bded07e5f68356fb6d75fe50f3edb7379885fed193304bfd1c66c27fa4ef3ed90dee933f6232ee653a6fa41e675f52eaf7ad257c645aa93d58addf015c9ddc26586b34c7512400f70629973b757711ed727f182ef71ba55016a8a43c1c1e423749a1cc5749f93768953fe6c74c54f897a70f3cd9d28ac2ef01f7ce9f84293657d2a1b50618ffd05ae629307cbc99c9d7139eebe34c14c553e9434fe7aa7e767707c09f8608874a054457598d91f6a46b7d9f327e3bc27e73837d519bef6bb6fa35736ad79db656be12686f914a4b1dabd3687f0a77cd5b99b4fde0b2df78207495ff3f61eafdc3487787fe3668b9b7b1079d1beb3ac5bf2935dea7642b12634fe881de1ea2952263740ba8b09da8f1bebbe446f5d1e7ca8dcb99b0c4b7d7527b0609432dc2d48bd54a13d02bbd43eafd95dae1a7dd5f5f851bc09d5269a9237c1aed3a7874ddc5a4cd35ed632bdd636a91bdf8ebfcec53741877fa6df6103530b9b76555b35c073789bb99dcfd3df7587fa79d6c5c986a5d72baafd61f2ace4893a5012cadafb003b4e79fc9c9ccadb186db1ab8ebde13a2db95695979a4bfd72ee45ef247b1ba5dbde192ff79362bb8052af6bd766b563c07f45fef0db3369f1f7e6e8a36b5f7095ccef785ce34d3f56e14f14e49eb44dd0497f82f4204c7b4cf8b14ad8da6564b758ff60f8427f8fd21722222e6a63b4c7a61a701ec03a1d2f54507c994b54bf3fdb40fdc4f1f6472ee62e2f452b3fc27dc0faff62d3610212d0eee066891bf94939a4f63b6851940f92b26e5de9b4159617fa63b488b9964df8b47f4cddcfee73456477e5778caff3a4416ee78aa64819f0e69d8689bd51853fc29803e1426415f71f80e3d2d41dffec0f79b50ab4eb889ac2b93777abb4b3f86e7fb6f437497ba9a747f98ca2a1b7b00e7c3923887aae4dc01381f91c449addb4ae3bc0dba4f8f4ae22c54c9b906381f93c4a9b342d1bbc0f9b824ce62959c8f00e7139238a9a981689c55c0f9a424ce02959c2703e7ef2471e6abe46c02cedf8798a6c3bd796e9454911c31e91d09b501e153d959398a368e15d8ffdde0b27ac3db4a7bb0b9a6ce0f3589adf355d69cd28b30867f9a493bc0b49f539a633a2fbd6dce36327d8b7447c3f2f133520270a84f7cdace907ba0d53e2b8592fab4a7516e05adf2392994d4273d8df2096895cf4ba1a48edf699453a155bec0a4ec93a6d334d91faac9afbd770c6bd0dc8d5a0653762f86ae9ed51172a47f96cf0fd333a5b5d362207d2944cf7463a4d1be916a7b7a93fc4d6149085adaead222a07d399b77d3f6eb9c1a93f797c383e90fa186a0d1fabc3bd0e2e445aeb99ad6132645f84a8807126e6f485f262f5801281aea36d02e5f0d9786bad6b81c23a902b9cda15a272f4d06dc2bff18ea02c7ba98d5fe809a9fe48381f0b510c1068eb06e4365f6f8cbda77d43d03f7c9d7c346caa5bf4b8e49be20d8dd72248b7610d0fe496a102275e44e9b9aab848bff0da9b4d4a93a1aed0fa0d5be19e2d1e4263db6ac5dca0701e15b6172e2642127282d2ebe08f8de66f2f58216d89866de4873a1935fc21d725d983658d86154ae99af02f8d68708d0ea5aa041beca5083bbe1827e4712a6c6b9a10701f3cf9230351676bc1330ff2209536361c7bb00f35d49981a0b3b5e0798ef49c2d458d8f10ec0fcab244c8d41586b01f36f9230351676bc1630ff2e09536369fba700f37d49981a4bdb3f0d98ffe04fb16d6cbb4196524ed1962ef606da7fca484f49ec6fd2d2534e843d47ffcaee8683e8508d9e923842a7a5a6381f16763f0811a9be39012ec447112d88a008e68ffe2d0d94f838a2819600e887d24089531f34d02100fa913450e2e388069a07a01f4b03253e9468a0f900fa1f69a0c4a9631a6801807e220d5463a8602e807e2a0d94381d4203fd06807e260d94388d4c033d00403f97064a9c4aa6810e025037f92206345f693f743f187ae64803d5d8420700e856d24035de43f705d0ada5816a7ccaf707d06da4816aec87f603d06e4cd078b3571475e9142afca11618cda104e3e099be2d93af9ff9a2758e88973b6d3f6729b4ceed98bc9b9aa76f1f52409c1259c5a2dc07963cb60f71e78cb37fd42797e36a4de6c8758d71ebd743dbfc52883ba7cb271b7cab366ddde87d93e2db81c9f7c54a4410a793693b90d742cbdc91491b2f12e76dd8d0e012f46242de002d949643e14968a1dde5b6508d95e01e8716fa6526ede6e73bd6b8643c007aa13d24710e55c9b91b70ee2489b34825e743701fdd591267a14ace5b80b3a724ce12959cdbc2c5be8b24ce62959ceba175f692c4492d994be39c079cbd257116a8e45c059cbb4ae2a4ee9aa7712e03cedd989c71b835e6a299ec4fa2d5341add79e5c6c303687726e24e2615b31e38d89a166ab01c5ae01ea1c7e8e9b3d0b8f08379f6a736f98fe6fbd6499c7bff88455b0113c65f61d2c655dedcc55d66bfa9c91eb7dc60b92797d6dc1db0da1f6029147d6a0e71e9d366988642ebfd6a88c751a687d108fbd226e38210aafdc41db54e118d735768b17d247152ab68d1380f02ce3d257152b323d1380f8139cfbe9238a9b1c434ce99c0f935499cd4dcf034ced381732f499cd4a4e634ce35c0d94f1227b5641e8df336e0ec2f89935a948cc6f92a70ee2d89935a328fc6f91e70ee2369566998ca68b87e3021b2af24cea12a397701ceaf4be22c52c9f98049710e90c459a892f346e0dc4f1267894acecf8033571267b14aced781737f499c792a396b80f31b92380b54725e009c0748e2a426a1a471b602e7814ccefd4dfb1df20bfca247ad3d01175e10ff9ea93211f8c3f04795daf716fa380fea0efa255bb3b234c004f34026785c13a6c6a44fbad67ecca46f09b91774f1074981246e68a041ee0c9083a54012178f699025702f1d2205526394d101009927059218db4e83bc1820f3a5401263da69902300b2400a24b1bfc92bc70c0f9b422990c43c2034c8aba1451649812466f9a241f68016592c0592186c4d83dc1e204b9890bb9b4d8dccdbf724357681ae07cca192303576cc7f0498c3426454e8da0847e363e78740f94d26e500d37ebe688ee91c05bc39b50569d4b478e10930537410937a4807ead68c9099cb9076de001e68a28e569f7d07e03f38c41db8ebfb94f5ed163908768b0c9784499cf9a4610e07cc4324616adcc73410300f9584497c64d1300703e661923089734e34cc7cc02c9584499c09a5611600e6084998c441000db31030474ac224ce88d2308b00b34c1226710e8a86590c98a3246112674669982580399a89d9d7748e741feb737b8eb6ff273c63adfd7d9bfc815de07690e8771a6ca349c18e61c2ee69a25a714df69b5c1c31a648cd5a9d385ae2d4ed80756c88ad6199a6f9f070f46a1db434037bc1e53f8ec919e7fa74f940826769e06dab01bec3997c3dfc6fe3ee9673fd69367b85637dc200f7227d339fbde1421e1f62be3ed353bcfd85acb1627b19b4c2094ccacd2f68a2334fe23bb000728434508d950aff0ca013a5816aac10f306804e9206aa718ffc9b005a2e0d5463a5c275007aa434508d950ad703e86469a01a2bc4bc04a015d24035d6307a19402ba5816aacb2f50a804e9106aab10edc1f01b42a4456c516d360bfdcbc59fb98a84186b4f1fc8d403b552a2d35ba98467b8f49d11e1562c1a36b739e25cc7e296db2e47568a7474bc224f64969987f02cc699230354ee3fd0130a74bc224de336998af01e631923089fd501ae6638039431226b10f4ac37c1c30674ac2d4b87e793f60ce9284491cbfd3301f02ccd99230896b4834ccbf0066b5244ce2fa110df33dc09c1362b1b86b91721ad305ac02ca1a26655c43331364fc9b523721baed6d14c6691039549bdded0bd1a11a3d25b1ab4e2b987b2e6c5fa89335cba9b32ee10d7089d74b03d5b87de126003d561aa8c6ed0bab01b4411aa8c6ed0b570168421aa8c6ed0b6b01f43869a01ab72f5c07a073a5816adcbeb002401ba5816adcbe700980ce9306aa71fbc2a5003a5f1aa8c6ed0b9703681313b49fe93ce88c56d92b4c9919efe3899aed37469fc388a3527b0609430dc6a6c516d5c14074019317abbeb6f9f0175702724e720ceff226d3436256b110179914e2f1d99c1899645f729c7dcfa59ea64e8cd028bf06734c0bf953c8357e938cfbe1ee444bed4b96d8f76ab69078a301d02e9b43040e62a06ba6e84c7a782bed5e59089c2d4cce3e69382b930e934cbda5adf607aff03f604108d4012cd47f016a6b9868ccbc0ef750cdd198ff81ee515b882d889dbb475dd984481c6cd2ee9ea3a16bb428c453bd6bab991af77f94c245be3844c685ff65a32c71969ed646af02d825526189eb4934d8cb0076a95458e2ad80063b0560974985258ee469b06300f65b526135e6ab1d09b0274885d5d8c1ca03d813a5c212d79d68b01701ec495261892ba434d87301f664a9b01ac3bde602ec72a9b0c45d2734d8e300f694d0f303e953aa57fac91637d0adf7879bc7edc95ec3a2fd264c559f1a62650aa70327dab78bed7beeb4db9233ad2dbeadce37a393b3597521260669335b4fc1ccd6694cde2fdb0f26fb7c8c6e796f927d996badf1da140d8e9685b12f5cf2a78798512d4a2ee9355a89608b79b43be60ae03b83c9b7a7695f9e22614fa20a18332fec1187a7b485bd1970b73c53ce6caac6309b6a68a1678558d6cbb4dcdcb98287c61a1e85d032cf96c4394c25e74ce03c4712679e4acea9b00a75ae24ce7c959c8b81f33c499c052a395703e7f992380b5572de0c9c1748e2a40685d1389f06ce0b257116abe47c07382f92c4498d96a771ee041da515fcf9a3d4ac50fa2d6459aa9a409b3f72e3c098f7db4cde1e26353de746ef8da1a640682df304987afb4e883c0e992ef4f663756a1789365adf062ef39592303526c5d81e302f9684a9312de0c7f03cbf4412a6c6b48039d032bf2b0953635ac00fa065ae9284a9312de0478079a9244c8d6901df04cccb24616adc16fe2e605e2e0953635ac0bb00f30a49981ad302bee231b7ebd6e1e0a33b1d7ca49f887053113526de7fd16c3f3fc6b890c23a0f51633f9e6012fe55b32dc774fb6ff3fe0233ecbf749fcfc9d9c99ed128b3d89e9efbac3b5ead3ff63cfb557766cd66c810fb2dab5d83e8916c10b97e8db4d49abbc0c6c9a6cefff425f675ee9c6bfd1688b84065ab27c9f599cdcaede75a8ddb24e17e820b936cb05f75bf71c22c85fd27b939db7ba73ad396147080b9c9736d3351b065ba10cb5ccf5d9e9cdec9f55b33e28fe20d19ee7553fc59e4fa1d0865f6bd7a7f668dc6cd67b8b3720aadfebbdd315d40e004dfb6dc99b8729b93fcd9d7d963bbef48cd8ce4e67c29f9bdd1df26fa0b3627cf24f32691dc9cee9dbeeefea65149cfdc9c1dfdf5d3e47fdb7a6b910a34cdcdd9c57e2dfa7d529f4d291de93703b4fa9fd123cdb91de1ff7a0df6d8b5bec1e6e4f44cb651779ce8abd5f66bd5fe6de586331eec36dfe614dbffa2fd6f8336ec7c8bdaf43cfb2ffa28fefca68fe95ae8c68f76a56b8639e9ef4b8dffb76b6b53bf51743b70afaff7b35d75fea8e336f99b6efaf7cb7c9d76dfc85f6570befb5b6cc9bfff1af7774ffed97d33dddd5f1253ec5f3e3ab8bb6416daf7dd4955576f65bafd1799e3066b73110700 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/b941450eb7d36be4ea69809a170ae6fa.asset.meta b/Assets/SerializedUdonPrograms/b941450eb7d36be4ea69809a170ae6fa.asset.meta new file mode 100644 index 0000000..0ea3eeb --- /dev/null +++ b/Assets/SerializedUdonPrograms/b941450eb7d36be4ea69809a170ae6fa.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 37f8c0d9d3c8d15498e18c1b4ae5f766 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/b953f62500b75234fbac48b8f6e3d9c6.asset b/Assets/SerializedUdonPrograms/b953f62500b75234fbac48b8f6e3d9c6.asset new file mode 100644 index 0000000..59d735e --- /dev/null +++ b/Assets/SerializedUdonPrograms/b953f62500b75234fbac48b8f6e3d9c6.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: b953f62500b75234fbac48b8f6e3d9c6 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cc5f5f8e7dc2beeddc6723fe32259b264638c71ef0d4b3606636c59926d61d9122a6e98de0c986ec0f4de3b980e49202421092424218124900a09218434924042f9efccce68dfedcdbbdbbdd53bcdf8ff933fd66adbdb37df79d3dfccb4c865ce4f6cacf36b155bc166b1f16c252b67d56c9bf3d72ce7b8d5f9e79ea9ebcb59ad73dce4fc2e75ee8d653969dee43fa3627d9ddf0b9cb33a56efbcd9c0ca9c63a5b85fcc2a9cbf1738ef563867fcea46e77f85f354ac95f3d24a369b2d634b599f58af3422568997eae4b5180f57ac9df37b26dbe5dcad104af18fe48a5b7d9c5fc5ce9d3a716faba3b47a6e0d5b2b82b5d5b957e6bc53cbaa1c991b84c4767bc731f107730f43e571983c0e71feb7977fb7947fb7937fc3e75bcbe3f080cf8f00efb5077f7342b7a6787fa47b8c75748e6d9ce339e09cbffb917c6e942bafc5e614b246cbe311f23846ca3c3780fe6de5716c9af0a692310ec80ac2ac9d3ce6cae378a9ef79197e7f82cb28762390c7597602fae4826fb707f7f9b5bc086157f1d8d9178f9ddd786c7140c6df7bf2f97c799c288f0552b6f34c8f3be5b542798ca7d1abc87d8f4d669ecd3adf6c5923cf27c9a3ba7fa4d4ad8bd4f57c701e551715a753a4ccc3e4372ed05c57cff3fb7be5f951f238d5175f47cbe72e94e7d302ea13c4fe944e5de5372e02e70ec756eb53c852f1decd17efdde4bb97bb1c5b3de30b0fb03faddc63a4bc8b330847775f38babbbab48e273e975607257fba94d343cadd07ceb9dcfd21c3d64abe77509ecf60e9f3b6a101eecd76e5b453ace7b8df69d3d3bdde46d994b2e55969f45471dbd317b73da5dc2a2957857fae7b1e539cc70239fcfd4b7c727bf9e4f69272551e312da09ef3e471a13c2e91c7c5ac311d0fff405e5b208f8be4377bb3c43ca0b7bc3fdf7bb7f7e521b9a58aa3a5beb896ac44691fc41697c963fb80cfab679647d0f95879ec10f09b1de47145846fcaf2bfdddf7cb630278dcc62976fbb7aa08323a7fd1e795e228f2be57195e4dfdf6707fd03d8413a5d8e93ba3010078e2e1dbacaf3d5f2787ca22eec049f4e97369d4ea29acb655e06cef9b19fbc7e3938e7ba2e77bfd3e11529738d3c9ee8d3792d9dceec24f7bdceaa9ed231e07ba9ec6b9d1bbe8e79aeec8eca2ed6fb743bd6d3bbdd6cf0aed223487ad820590cf4311e2875506ccb7ccf5d01cef97180f73df1b7f36e27655b23c175feee95e09cdf2f0da86b054bb6592ee770f0edc3e5b765fedf49c5e746969cf674eff2e320706d9094f78e7c6f134b2ec7d4733c6c5781737ebf3c60d8366bf473bedb797a8a772b5962feb3ccb387b66fc86b274b7d06b3c4b43558de1fe7bd13ab92d7b6b8e75d942ef27a2c0770c971f53b4c95a75be5f114a62f67ab0107991e598df7ed816fcb6bdb527cab5c3e53eb0bf73a4f4ec7be5277958fd5b1c434e37f965f53e1dc298fa7cae36eefd9912a3c3be47197d46d084bc89bd976709d1f87cafbfbc1397faec193ddeb55794d95034a575d7c9ee60bbb2e0f486567a7bbcff65579e4192edb2e2ff8e456b1d4767ba62b27ae189ee5cae9da2aa49cb3a51c55073ad73defaaf491f52fa6da9daa0c1cc612f27226db3031d027101b06aef167aff6f14da75b2a8e17ba7a36d6ef657d9ea936c162205bd9c2082fae1aeb7c7bc13d7ebe088417862f952eb2cecf3aa709cf50f01c3f5e1221fca9eeb591475596a83af645e0dcb193ee0353c8ba8269edb487ca4fae74ef775369f62a1026fe8d511eeb465b526910b64ba55dc546836b2a8f3c02d8d22879ef6af01e0fd335befbd70019bafbd7021d74f70fc8ebd7babaf7506defeb7c6139cfa7eb689690cfb0eb93c31a1bedfbf681107179837c57f55b5d04ce79bc7c9042d68dfab8ecf9a93cbfc9179737fbe252f57bc1f0df22efa9f28b5f2b90d7c66be23717705036742b1297eafe6d40aeeefeed4007ddfd3b12e3b297aac7dd89c425d41fc6e55dc9618d8df77dfbba0071798f3cde2d8fba7aefbdf25828e55e1f40ee7df2d89042ee489fdc1b02c87d401eef4f21f74144df4cbea76c5df5d5e4b1445be7e78eddf67e3385ac8798d6d6fba87e838759a2ad3fc2126d7d024bb6f547e5bd7c2ffe050b7ead8025dbfa44602713e4bdc7c033d056d5fdc7815cddfd27800ebafb075982adf79d2eaf3fc9f4b60ef587b6fe5472586305be6fab3c38555c3eede3acf82a7bb81c9c3bf1d3d75fff390370d57de71957fe6895d69f95f28aa4fc1bc1393f4ef27d7792fbdd7eb2ffab7f4f29a793bc3ed6bdde4f8d313cc7b4f5ad7e25bee79e6789f5a9177dfcbfe6b395233d7b6b0ccb0be01e0cdb14965827f9babc7e1488ab29e09aaece958eeb37e4f1251fbfc952de4de09c3ff74da0bfeab77a591ef779f7bacdf7c52f1c7778456f2b42571067a1eb482accdf4a13e63079d2549698274d75ed6040aafed9efca67f6a578e6fbf2f89a3c7e4fca577dfbfbc139bfffba3c9fe6bbaff8deefb1ef9d03f450b2f93b37a7d04785ff87f2a8da3f3f90df517df0e78373ac8cc8b41e9be9bd6aa9d3f444fb11e74e3c0c526d49c56a5b1afbf8913cfe581ee5d8516c868fc18c140c0a037e2b45b862b358621fc22c79ff27f27ca6bcafea66737ccfcbbe1226cbcfd86cdff3f37ccfabbef39fcaf3b989cfb39f0139fcfc2d2f6c42177eed6d706daebcf6738fcf60597f88cd4ffc36fb054b6cdf0d91cf2d90cfdd0ade830cd4fddbe4f9425f9816c9f3dbc1393f2ef6c955e3056ffaee2bb94b7cfafe521e7f258fef7a611cf3067807f064ef24ca4c69d36f49194be53b778073c7a607a7aaffab77e5f8406cb9947127387764e4e4b8fae64cc465c58ef5f15b06aef3e30a79ff2e70ce65ef4da19fec7b8a15fbc2562cdf7d25c0bbb26e1f5be90bdb4a29e373376c43baa690f56b79fc8d2f0e95cd7279c769e2f538109ffc7c95d4e16e70eee83044d5ed7fcbf4b65de27bff9ec4f787aa31c1dfc9e3ef7dbaad66897d61efcbe31f709b647ff4e97ebcf74ca37eeff9f45363124aef13e477ef057aa8ebfcb8862596516a9c40da6cec44df7d5577d78db5a74a237f92c76e20de3e94c7ee2c75beab64fc591e7b80e755ddae6740197f91c75ee0f98fe5b17740197f954738f6a7c6bbfa0694f17779ec079eff873cf60f28e39ff208c617d827f23830a08c7fc923e8d767ff96c7c303caf88f3c0e06cfabfe8b9c343216bbc718eff786f5017eeea4ab11b2cf7ac474f9fc67f2b8288ddcfff9e49f24e5df07cef97d5d3ff6e7f2f855a28c843c47f571833ef3c674abc643bef4ee8d55ed87ff82f7f8f917203ce9fa3475d7764b79eb7dfcd6bbfc46ae96613bd3c76f571a7ef2b95829784e7d6b83778d5f16c732706d03b8c68fe552b7fbc1b9a3dba8777c722be4730f806ff3e34679fd4170cedf937e1bb14d2cd1ff4ac9ab043a6d92df547dca31df3736332f9f73788d52be589f81fbed819eea9a9201dbe9bbc1915f97fd1e23f7277e336d1ce8caf89359629d498d616df1c5ff1637bc7119ff7115ffaaae7b56ea6f37ca6d218f552cb13eaac6bd5a0279fcfec321c3b3d5179eadbeefb66469eb613135aef26c789ea28dcc65b496c76af9bd47c0393f82b6414cb63b6335e09a1a9b3b45beffa8cf466bc1b3b5e0597eac6389edd63a37eec6ecf7c956efd5cbe71f03e7fc287d21630df2beecb76a4ca3db810e0de01a3fee90ef3c01ce1d1d8e90fe7f63aa906fed94ef1d04e7f09bbbe4fd27c1390f5b8eef7995569e02e78a3194f3b44f8e5faf534118d558e5cb696c5d8d994e01e7fc5b17b8611fadea5f2c983cedb577a50c596f8bedf17153e39bef6420fb4b29e3349658473fcd653456c95679ff1769bea1e4298ed22f2876ba94ff0c38e747d517f4283887b67f264bc89fc5b9a3d7b8c53e3967f9e49ce58b97b3e5fd677def9d0dc2c5efcbfec071eb13c39336dc09d75ac744be329f55b05256c3724586349a057767576fa67764e7a2dbf05ffc6794f86cbd5338d4380234dee42b85af7abd5303cfd77a93f7137ec1eaebb3c4ef52e7894a21f4f958d2279e4dfa0457aecaf957015ce1eb9cebf384273d7786af74ee8c772a4695e2adf56c025be3fc4b94b2caf96c156b70ce4a9cdf3542de7a47ede427d30589bbcdfbdf59e1c874bdfab73a5714d01ae7bc4a68582c7e6f179a5608ed1738d7eac51c836d6c139be91c778aaf2587bdd6f95bf7cd12894cafa3deb91fbbee4e2150d134db090dd73e57d8e2ffc54873c488a86a3c1f739361ab5c51abb8282926fe8fa19bc9f00ad30229638240164bb896cf72459d6a4512c1f0614c0ea1debe5dde456c62cab0e8c9f0e81e2042e0c5f0acbe37ed7effa5d96b5b2706ad80e58a2ae0c034414b0596cb8b0bafe5304168ddba551e57d48f3fa6c32faa68c559c4ef3e57299e0b1f016d44e1971801c21da6c4c9d59683c273a550be4aa8e60fcc72e77aa9239e07c17b8343ad719eac67493199c73fdb56444672519b2e405874b4d04587a8f995344b6ac0269ea58e90768da1f0222457d49ffaa6305bec5ba262d542d6ae54c27ae1c965db4aaef8f0bdd6fa78e920e22593af6131d35217331db29d50d2970ca9e2a56363b8bc78e13f7a869d10db4ea70346b0958e60c76cdb36bf572da4943acf8667c8ddfcc6f8331b3dc0c310234caf0286b0b506611e47d845a3156bdddea715570891dc4617399d9aa718ceccb8f918501f1f82d6a871774b598a8635edb63a7ac221743d293dd53a2c769a018b9c7ba5cef315a2aac9afc3226d86f882d7a24c7c2335593eca32ce4f564bb587a03a1cb475a36a86116fa7219ec7edb5a7c60c441ee74f0cddf0c4d01e4b66bda226b30e98e4de512577c424f7892ab91326b96f54c99d75c946cc933d312bc9c6eb54517fcd74deddec0466bb68293738efeb3a615227977e81934b7f915c7298ae6b289c465832394c1777fce2009d92fea8eb8f475d174cf0c08882bb62d63628aab575c3241f1e5572779d1d0b42d559b6637d87a2d78a99e34876d7b498e1c8dce4c84fdfc998dadaf9d06d4b7f5d5f446281d6ae29341c243a9c2b1adf54cd67f53346dcdf20ab5d2092078b1eea8dce69b573b1de57640c121d6d9b452dad3c4928d2f2c811693a7b61c7527e0fccda8744b5f69e3ac9dcda876a4c21afab00d92cf1e30f530e1ea65e18ad615169f5c6680db797561f8cd688a8b4fa62b446da4bab9f264cb9a230ca6e179bdb1bc5e5846f5cf189548303f71c7077187daf586a1db0bcac3f6615a3edb58a01ba3071ab380243ed171ec7850fc4808db117d8200cd8d826007638066c9cbdc00663c0c63701b01c0c58aebdc086e8c2c45bbf7c8a5ad43e85a13ae13c60135872a7ec57ce4f92f04eb8f06198e6f91acd3bce6d114af3e13ae1bcb42f60114bfb1198e48951258fd448ce15cd34ee1ad2fc2db27962a5c20ab6cc31f893993b36afbe5b2dc6e5b9466a8c7f8573dc28b4e0d7cb64e919a5d556d8c807b4da4493610e0bde72a10f059fa8d642d429f8d4beb898a0bbd2b9eebaa4cc11315029be345eab0dff02f6bc62b184f145181b446cb7465a7593c5d7cd6283d596466139cd919a9ce66d5d369622a7896349764ad4243b5a279927d9a334b69ac76d95cfd2ebd05f9bcb4fc6bf73842e6b106ddaddcd9a35b8230f5cde46e175e5ca5bcaf83aa23b84a96e011d0425ce33bc8ba0421a7994cce068518c26028ea902549b1ca689e4302d4072a00c159600c6e82c890fd1f0e98c498e02bcc9b9822d7724af13c9f0147199537263b7523c5ac9768bca87eb4095646f6d717b1babd386f77c4f67017a4a7be082c761826744143c1e4be333a3a6f15c9d649edbf0498f516b587998dab3a3aa3d01cb51e76872d4cf63e172d47c4cf85c8df0175a84135e80258579416c2485554fc404cfd7a5b111228a79153dc7f95fedbcc11bffa522f5e788c2d0cb0d729cb45ee9fcc50becb1e0f96ae709d761318c9e853a3d3b8ad388465184c5db424dbc7d1232de2661c2176984cf6f194ef8642cee16ebe28e1b3f2f3778b564b32cdb1273c31ce13a9a23bc851bc4a86db988b93a11af39ec5427699ee61ceb9da77344395025eee58865b56b455e1b264e8fc4f45fa2d3bf03d07f39d030cc17a760f9d6524dbe150b996f1da513ce2b3ecb1852f1e1537bc3577ca662d88ed5611b24b2b79da2e6da209e2f160650d158572e6fa202f2688d5eb9a2437e1b6bce0a196f2d70dfea3af1b75745e1dff63cfba254bcb86b8dbfe2a57ef4152fde631c174bb664437bac82350dcb544b34996a2c4ca67a0c96165662696155466961bacee6c4504d4db3da1c9ea25608d93ce545aff0f3a9ed4963b66250676200cb6a2a1dc788a9607562db04975c1dcf4cdd5e406f7f0417be4812fa34b15aa4896c6a8ea58b1958a97dbca6d43ed83a5ca93d5367b262bcacb6594d76b690900db33d4167b66274ad2840e437a59e8345a7739dc854cb65a6ea66dd83c53e16b5a2d8ac70aef38c17de1f23f647e0f5a5b982f756419e87af54b47b31235f238c3cdbe1c40c7d1656009ca8290042d5aa67634968ad26097d1e3209cdc1d43e29aada7331b5d769d4ded3269cdaf330e1eb35c217b70d277cbe4e38cf984b59b416e2024c309fe49f54dde4830caa9d50e66b296e106d05d5fe2b17577639bff9805099109123a653298fd2305a2ec4d89669d8760dc9761186a03c22dbc53ac1dc3c2b82084ee17db7442798d7bf3632a4fec59747085fff5a8a61dfacc17e6b48eccb74c23b327769ef48c97c3926f9e4a8928fc5246f892a790526b92aaae4622c12b76a22913b558789c4124cf8368df09290c257ea84f3f456adcb9b4630dea7ea5552dde693d7af51eaa48e7a91f3e438e5bd5be69627f48ff03e8f4ad9680e93ce57617ad6e8f474676f73bf795ea728157d68fc8bcb1c230af3d5e330f4a768d0ef0b897e3526bc5623fc8390c28fc778d5e978f54d13afe5c2dddabb3ac1b91a86e3099836f53a6df8a9176f61beb30643daa0417a638770484fc402b15d17085e54b8f8a638c8968a0ebf5239f37cbb28c6c3635c8b69b043a701cfd91637560c9667582d380943ba5383f4cd9048d76139f2aea839f27a4cedddba4cb36338b54b31b54f8daaf6069d646e4a7b1852ebe00b9484af759461df391dfbce19197da71c23756654521558049fa589e0e99dc245f0464cf8d91ae17b420adf84093f4723fc9590c23763c2cfd5081fd8399cf04a4cf8791ae1e521859f8c093f5f23fc4048e15b30e1176884df1b52781566e47ba31af9564ced0b356af73c2c9cdadb30b52f8aaa76b54672ae705dcea69fb7dffb299c9f37df6825d8dc35beecb5cec73bddf7b12ea51a5dbcf012fa129d4a218af253306bba54634def854c04b598f0cb34c24f0c69aa7598f0cb35c2f786145e8f09bf4223bc6b9770c21bb0c8bc3262646ec704f39d6a92ea82638575568b349623365ae6bec1dbe4bece7c61ab0a31705d2a6cdfeb705203d77c959e1c69bdb5d2a6ab1c6b1fef5c0da3f50e4cebfd3aadf9c82befc4f5eacd6e53d26d86e8fc0a73d82859eb1e154aaf9d980d5cadb18183210d6c1716e86b22dac06e5d3e2ba6535492e6b3981f6989e8bce7ab6a6d1496b235b4d769ea3cf9dac079f201912773bf303a5db1fcfb545d74f3baf5750ca95bf34d653a885522c3d4adf7e8bec36df6068dcd4e0c996f9d8609bf51237c7548e1a763c26fd2083f37a4f03374c279b5866f0711a95a7326a6f62d1ab55f0ba9f65998dab74655fb6c4ceddb346af7ec1a4eed73b0bced765d86ce8bda209d223922513688028a1731cb99bb468ceb2b55ea5c2d175e549bc5f972913479cfe2065100b88b5dad139d1f9bc45862ad7355795ded62eee20139a23ae62efd97c3dc4933ae2fde1671a54e3c5501bea32f702a65c1098ba8b0bd9be762517487268a86878ca2f3b028ba3362f1733e26f82e5ddc736f8612e7a426215ec27cef022c63bd1bcb58f90e03e13b2df662e1ba57172e1e4d6b1a7b4a5dfb5d1bb25a742116fff7e9729690f17f1126fc7e8df056ddc209bf188b9307b0387930a338d9a7fb0ecff41e0a62c429c6f92ec1043f1c51f0a598153d1231d95d86097e34a2e0cb758279dcf345b2fdbe9d5c4018dfce2b302b7c5c638563bb87b3c22b31e14f68842f0e29fc2a4cf8418df09a90c2f763e9e7492cfd3c9551fab91a339aa775791a9f04b4cef9c77be8ab446eadcad84aa719c0efd488a6222f0fc358d8359816cfe8b4e8d1a8459ef39b97bc7c6ccaf50eca5c876b311d9ed5e9d05dea50e0fc2f138d21fece4ee777e61a1cc034784ea7413b10177c0e11af1985f9da75baaf71f37d5e63be537b8433dfeb31f37d0133df173332df1bb0ace96b9aaca965c8ace9468cd0d735843e0d49e8264cf83734c2fbf60c27fc664cf84bbab80d29fc162c6e5fc6e2f69b19c5edad5872782555d694dfc459d36d9816df4a9d354d68c2ace9764c876fa7ca9a263661d67407a6c177d2654dc789ef859bef702766beaf6accb75daf70e67b1766bedfc5ccf77b1999efdd1832bee56594ead83d189dd73474f687a4732f46e7758cce0f32a2731f16881f6a02f151c840dc8fa17f2322fa0730ad7fa4d17a76ef705a3f88a1ff3186fe2719a17f080bc49b9a40bc1732100f63c27faa11deaa4f38e18f60c27fa6111e0f29fc510cff5b18feb733c2ff18669c7c3b43b4582b68e262ed714c8b5fe8b4f08ab5fc262cd69ec074f8a54e0755ac153661b17610d3e01d9d06ed9957accd11035ed5217baa9ed47d8f1bf0bb1a03fe24a4013f8519f0af3003fe754606fc341688df680251d5375c209ec184ff5623fcb590c29fc5a29bef2c1aa55c780ed3faf71aada7f60ba7f5f398f0f734c2cb430a7f0143f2be2e05f0f1f6d4fdf4c93db9d1faecdd7e53b37be95fc422e80f9a08aa0f19415fc384ff5123fc4048e15fc7b28c0fb02ce34f196519dfc002f1a18e50ff7081780913fe678df0d52185bfac13cebb813f0a9265a4e806fea64670ae5895b079c6e893575e6ada31fabfe87869c7e8f996c1a9c7e8a3eb8a8dd1bf82d9d25f75a92da42d7d4b279c0fe5f20d8e230de57e1b93fcf7a892bf83950fff0862ff2932cd5775f62f56b0dcd82cf61f654db4d496ffcfc096ff89b0fc2352587eb495dbf431f15dcc78fe15d578be8719cfbf231acff7b164fa1f4d32fddb8070c9f4354c6bbeef765295882fc3314334872ac4b414dd84a61c515dca09e97bf63aa6c7673a3df89a2ae1e4ff0093ffdf88b1f3432c76fea7899dcd03c3c5ce1b98d69f63b1c3d3885afd54c587b7c86aa69e813fc202f98526905583c205f2c75820bfd40592a740e567e0d66713dd34c304eb27d897bfd27d9957155daf9adcc6fd68721b17c559e624887216d69be34d4c03be6c5092067db41a2c167fd58b1504dc5a7f66f3c67e8ae912d3e93220a02ec91b9684d1e96798e1b588251bdebec3c319de5b58805bc6a2e5096f63825b4514fc734c70eb88827f81716ea3e1fc6048cebfc484b7d508af191c4ef83b1892761191bcab13cc739ff64104a7680cfd4a2798672e1d62483bb4632c9376e8af31ec9d34d8e70f0987fd3758203a6381382ca340fc160b44174d20f6860cc4ef30e15d35c20f0e0d27fcf7986176d365a77c92f50a0697892917756c9591c7d96851e06d93bf136721e48833b7f8192b96bfa815a5be9be5d689590a392263f6a681bb9d4a7c42738daf66a0bec33b93dc22766363769e2332f3f290ae7def612cbaeb58f0451ae15a736e2dd32b60bd29d93b8486550c3acd6e1645504e5a09f9ced361676ebc8f194c0f8dc1b40a69307fc092544f2c49f5ca2849fd110b446f4d20e22103f1814e3827da4717d37c9697be8b748dec5ce5335f78ebc25da228559cc653de1d2ddc51dd6e55cfae135340b5b00cd5859a78af5ed855bd26156d101a56830e585776b56c9d86b1af3fe9e889bdf562115ba71fea2477110f5abb41c39f315afda3d2fa08a335c05e5a7fc1680d8c4aeb638cd6207b69fd15a37578545a7fc3680db697d6df7561e2ce8639b1e87bcbfc030336c45e60ffc4800d6d02609f60c086d90bec5f18b0e14d00ecdf18b011f602fb0f066c641300fb140336ca5e609fe9c2c4eb6a715dcd554b2c45cdeebf98f4d13ae9fc86dbc6c9cd6085a4ffe9bec5291ea1a9e0ef1911ae82ff39267c8c46f8db21857f81511a1bb133e74b4cf0b88882bfc2708cd7e07821240e16d308e7edbddc205aefc305c774827928f374d6c88d3d3714951698fc093af97ca1ed64579a25a21da59661f3ee84735769896992afd3844be063a961ada015f69502dd573a30a69d9e1be68bad355fcc15db16f2a523b3b5ba8cca70c3af2c3331c63b5213c1889e0ced5871618c67c3bd924296eafbd808701b5d5cf1d3a2186fdf25aab470c9596d6f1cf87a8ba4a8698d474d5bcc1826e98c81afffccfd2c5d4fb02ae7af7a19a8ca90a6de0efbee64dd77bba0dfdd26bbfac27cbbbdce1c0767db1c67899a406d06e678648c57f612118d478c710a628ca9be8e1963071db71cce6d5d16b9b9cfb9196db1583bb9d2b9b24c747db91d697519303d2a16763b8ba982ecb0a49067aa1f46bda32ea5f0c6fdd1511bf79d30c9d3a24aee8c493e26aae4c3749279ad647a2cfa2e5c5db04c6946c48a57578cc7cca83cba6192674595dc1d933c3baae41e98e4395125f7c424cf8d2ab91726795e54c9bd31a39b1fd1e8fa602a2f88aa725f9d645e37581844e514bbf7f5c3545e1455e5fe18e5c511290fc0545e1255e58198e4a551250fc2242f8b2af9704cf2f2a892076336776c449bcbc1545e1155e52198cd1547b4b9a198e09288828761825746143c5c2798fb14af0a22f8135cf008ac3e705c13d4074662a6b13aaa698cd249e6cf1f1f84470a7f9d3806fa8488a04763a6b126a2691c81093e31a2e03158ecad8d1a7b63b1d83b2962ec8dc3626f5dc4d81b8f415e1f11722e26b834a2e03c2cf636448dbd0958ec95458cbd7c2cf6ca23c65e0106b92222e48998e08d11051762b1b7296aec15e93a218638a731be1c79f667a7e8262f36ed2c95cd41e262124e6c1216179551e362b24e32f7b53e3988ca0770c1476276b925a25d4ec1045745147c1496f6b7464cfb53b1d8db1635f68ec658544764310d135c1351f03198e053220a9e8e41ae8d0a7906a6725d4495676282eb230a9e8535b41a2236b466631a6f8fa8f11c4ce31d11359e8b69bc33a2c6f3308d7745d4783e26787744c10b3014a74644b110d3784f448d17612dc3d39aa065b818c3717a441c4b301c6744c4b114cbe2ce8c9ac52dc3409fd504a097636a9f1d55ed6331b5cf6902b557606a9f1b55ed624cf2795125976040ce6f02202b31b52f88aaf62a4cf2dea8928fc312f9851113f96a4cf04511051f8f09be38a2e01330c1fb220a5e8309be24a2e01331c1974614bc16b3b7cba2dadb495873eaf288cda975188b2b22b2588fb1b8322a8b524ce5ab22aabc016ba8ed8fd8502bc3045f1d51703906f99aa8902b30c8d74684bc112b4a0e344151b209e3715d541e9b311ed747e45189a5ec1b22a6ec93b1eae28d11ab8b5b30c83745855c8541be3922e4ad188b5b22b2d8a6eb721cea9cc6f82685262c08b5467620365da7e3ad3a665a3fa8db62dc0f2a978559142a137d31ffa86a5db4f3d8b93d48b473ed11c1353ac1fcf48e58b2efa5fa09e37b790a964bded904b9642d26fcae26105e87e50e7747cd1dea7592f9f3f70489cd1483330d3ac1dc07f9de20820b7133d98e09be2fa2e01d18e4fba342dea993ccd93d1044e514aefabb30951f8caaf26e2c313ed44489f154dd07f8aa7f0f0761f2312e780f06fb9188b04fc3603f1a15f6e9ba028f7bbac656b2e671f455054638a7dec70217628f8b42ac5f52e882e880154c676039f0134d90039f8945fec1a8917f16a6f6934da0f6d998f0a79a40f83958cdf2e998664ec16c71bac2319662369b2d6a5c176a29e32b73ed1011bc4546fd7831fb6081737f9973679b30697e455f7fd10d09f3a7a169cd949307f96212e1b66038170be533ba509edf18ca954e4d8a273a37816e157f2f906b75d78a652bdc04baa0f1c9398d132013177ba9953c8a99bb21ed2cd620c2c5e526d2f324f0e7c3e981492a617cdec226713791294cac7edeab1c3961e7a89c87917e16b327f845374c05ce3b2ead6a27535ce7d846ad887337b4257236a85f5bef5dfc7a53d9d3f958289fd385729a2f9490b91bceb9ccdd9cb55463f5893104efa44a2bf0ad3021bb000bd9f3ba901d1328fe6688255f2a999acb113de6bc3b61c2b6170bdb0bbab015f9c2b644c4ce6619327eb6b3d94272211692177521d997e5fccc7b872fee53e548ddc5f8b44e6fcdc0ba10560ed9e1a1e0654983a866c05c8f57b09a2e6fbb08a3fe351df51981d2c662e6ee3e6142ae763116beafebc2b798d0aaf8d553c46778a8dcea70a5f87425dbcd4ad19c249358dd8785fa1bba501f9d32d4b8a62b4458dc45aedc30aad2985f2d938492d345e6b1790916ae9774e13a3e74cdae58dc49acdbe924b8d79637e603b54e79c09b3a516a8299c4f3a5188f97753c1665a5cca62ecd2fc3c2fc4dac9e12ce06940df349ee6542108ce7b0161126649763217b4517b22948c8568af45925eb266e535bb55a56c9545c9e141b346d942bb0107d4b17a2b984b9af8a5577a6f806e62e33dd7421bd120be9b775219dcab05e725d4e911802b89b0b67325fc472ad680d953925eeae260cd55558a8be13a44d90f85d5843582962a1d67996a7c34d294abf44194d17b2fd58c85ed5856c56da9c3358ab00cf4353b55933cd29afc6c2f85d5d18e7a136c96bbc1b9c875458dde53fbcfdb552e7257a994d5d125e8385f57bbab05610b71eeac52e499c92db3a5825acbdb231e7699af670269caec5387d5fc76965b3b5b252138acee100c6e1351d879921d3860929e23a2c84afeb42b8206408d5a6b1fa18698ef05e8f85f707baf0ae20b4ecba0cea1a4d41e0068cc00f9baa0ee2e66d33400d843e543762a17a03eba1081baab9e289e418f2e739c1e58609df4d58f87ea40bdf51116a8ef5a234e2ebce6c94ed3c3c542549cf8609d3cd58987e1c2ecefc790fdcc6279de551961eb760e1fb0916be306d4637acf3643dc2bbcb473c52d70e9baae6782b16be3775e11bce52f70a96388429b4bc0dd3f2a7a9fbf6c2c4427146b140697bb763a1fe992ed4f8267d258d43f5308ff0364de0e56183b62e9659fffe1d98de6fe9f43e326d8b6b81181be4bd8f5562c9fc396cab585b2bb9fd9b2a06326f41de8985e76dac06993a8df0d6f07251abaad394ab41c612786d64631386f02e2c843f0fd246d68f0d2c10b6c7fbc14b651f55727c65737ce06e2c8cbfc07aa882f403040965663946e621bd070be92f75219d1f2836fd233d6e3a54e16ece78bd170bed3bbad0ae4e1bafb43de3d47de6f76134dec57a96f56546b2076f73d530efc742f42bac1f237d2b34480a0ed2960ddfdecddcce1fc038fc5ac701dfb8146f35a895559bca161fc434fe8d4ee3916953a6375e5321ae727f86a6a9b13c8469fa5b9da69352d4b4fc969ea8798d28f5bd7e2f8af4f2301696df05f161c2cab9398695718f60a1fc3d361e1a2e9f73db64c97793c7b8d522cf787c264b99217ad4793b234c981fc5c2fc9e2ecc237c31eb7d933a353d86e9f9be4ecf7c9f9e307ff2eb3c4fea1cb45691694fcde35808fea00bc1898cae8751f50da41a6380161834e5a977c2507902a3f2c7206384ea8b6172152f64588a6b9adce42016b20f74213ba199e33b4c3c679a029ec488fc29486b296c5d2b7a7d39f3b87f0a0be9874172ab592256dd18ac07bd60ae1514b18969c2a7cbc9f85b6142f03416823f07f7ece3df0c933261f8b0eb4d1543cf60e1fb08ebfd4b5da3f1d668f7eba8d6c8c7d317b6be7baa34995969ff2c16eabf64d2ebe4c66ab1f3f006e6b6ddca58737b343f8785f0e320294f4f38b37a42fa164e5be75f2c26962c1752dc3ebc6af10eaf15e6f2aef1585e63c930be31c71f9f503a78d7f9f7b78a2da5aa444fb39bb7f3e946a925fcd581d3a605737f46c93d61dc0231b691f9a733cd12f2ab647ea3ac75bc20e47a3ef2695ae39d5a60a5784b4dcc4a170a5d29371e94733074e9c3b416996815135b4d41590e695eb13de442fa371eabc364acb6c8e58de1d8980cad29bd167fe75f6ba9b7a13e496461ead0e9ee0a582a7b0f627c5efd3af199e5a2b18bbb15a7fdb27f894dff97c70901aa3e9856dc4a9005e8c4f513e6e6ba76d532b7c3f31d4766dbd62df2788cfc83121b9f8a385bd4fb6a1c70aec78c2a733080755620e4cd5385f09f9408f94e7eaa593b5f0cfa7101de6ec8cbd8162b803ddace03f60925b09eccdd65298f79be2c3683ebdad103f72f4a70dd35e0b840bef33d1fda6b1057cbad80b69e79d0fe4d6d6d89c973aef3bb527a4d29df01d7ea6c0017efe481fb0f25b80ec2daf8e3358cef1eaf8a091b20ed1fe641fa943e497a90168bf6e616a726e4b6cd2be51c0f1ba0dd39dc83f6192534beb72577af085ae1b001de7e50ddf82f25bc8ea0105896d0b76703a681033d4cffa3c4d41e60f2a612d880686f6f0fd1e7d9cce0e789de8c0d56405a0e32f82f2821b51190eaacaa22b4eaecc1f992124e5fe7645963935b8d33bbbe2c2b449dab81712f7e5ecb5a2e7b626d007810e4525f51026c077229ae261f7ab701d01bdd3c40ac057136be4c8c7579eb99d8d1c0d9036c284689a827d35741e78b57784daa5a286f4b35743da886b6a00407139f9a6f6403a01b7b78805a5202e2abc7a9a6f31cb65384baa1b156ce9d31cb459d7d85489ae522a156391fb40122ff51105b5142e44b334378bc6b9acfa3ae685c71b4dcf2a64f4fd059dd9a1265675918287bdb25ab1a2b595d90b01980ea002814da50a2f2d7ed178a957eece8bc7975a807a92d75c9a9f237de1f019d63549f844df5fe4fdb7ae0da5182ebed0307676cce105d3a7cbcda9b9b6a03bc3da017bf3d25bc4ea0dae14d4074a73ddb00ea20a8fb77a004e5ef5be5ab74730bb3b16f7520a8d476a484c6472397883c6b8b6f11a2d9cee3b5e24b36005bdfc203d6295b85803b3e94e823596e5921500586713bd3274f5e499d2d3e6d7315f6d5d61eb4c3a8ad6d8ef0a168101ff75601f35685ab735a079596d4d5de03e0ba64b397431506b6f672bc0d3ab0bb52823b0ce46fb63a0b700f4705ab1bbd95b95e64d5428cdd4df3a9207976a704c747025638d066b1e02b91da00702f6852f5a0eee886f99b3d7d1a9d444ed6b6b54fb87f7646e6beb2e1b8e25ebd5d98db135723aed6cbba5d8297ef28e711e334efd90278e9c633ee958da72d0ae2813dcce2a17d38e219ba9ac603b568e211bb59e321fc87e3a14a8978e07a723c54e5309e51961b0fd5e7150fd5388a07f2848d8772ff8c87ee6ad2e98c3bfcc593c6f7e329fb67e2da11dbb87628298ef8a0c453b8f0c49101cf789abeef784643f171b49b388e9447c96f28a791e43b2aadc743d5dde381bb7d92e5a61af94c968bb9ea79936ef49365f2863bb77ab5f8ff7b3e4c1e9f0fd39b433827e64270eb487da82b99eb641cd68b522df5126d139c7a8c4f8781493a246e2ca56a4a3a6dda27d4a50e0b12c04cea5339c093b0af4938f3adc4b902e0ec6712ce022b71ee0038fb538f9b07cbdae73affab4551e94ddc24031ba702fb2fe6811d900d3bdd845a2a547f1d2b644574383b51e17c0ee01c6812ce8956e2bc13e01c6412ce4956e2fc0ae03cdc249c4556e2fc19c039d8249c13acc47912c0996312ce022b719e0b700e310967be95384f01388752e2ec257196c9f6ba7f6520577577d5993c3a90ada940b60155f961d45579d5df15b4ef913f5f2b9eb5af8db41c58e8704ab08319ec8c0cde196f33dcf100ee084ab85c40b006285f0868134b5a16a3e960e650c1fc37803992da633455e70814c7ab4d6428db52a1ec0d72d3519428bb4894453ea06e9f3f7f880c5e7f2a782f033b8c6703dee4ecc323b3bc7700bcd1d43962aa0a51622226ede82083d91624e3234c8239c94298ed00cc3126c19c6821cc9600e6589360165a08b3158039ce2498f916c28c0198e34d824938c04606b30580996b124cc22e0e32989f81aa519e49306d6ce1fc17c09c4009f30809b3ca79a84a1cf55ba587d96e8db48bae0715f2934166904f3f5f78b3702d735ddd360978f6f50f7502565ad09c5d1a894bae135adf3e2a947b80f54da446b9a0b1abcdf3e208b89a9e05de1d8381551652a21c959477960a617399da7871a6f39f27f4eda233b881a55a789ed46ec90aaab9c06e8bb29105042bf56d443906d8ed244a94876b72d3a01b5591a23d40857632b0d2c9d4563a43e4acd5d2159cef23c04787b6c9e921ca41de9d76605f99df0a58e991f4739ef900c53a71817fbc545495f8559b3b912f0308a76403e1a4430ee17700c2a32811f660deb0af3afab72eb77578f75b00e25493dcb5495db9c870e68142e668937092fa1e91e15c05704e330927a9671c19ce3301ce639aa381197049210b1a980340be399d7a8121b70a9477088da17f01f0cd30c711e6480b51e682443d331b28a15be162a73d334f4e82dde8bcb4331b95213294e701ab9c453f7c013b7ed7b12d02dd4c31b1748b1435d73956382292968db1c0c7a83380393b1b5d19f562aa7e5de340859a75ab8eba8eb8099403c06468ef0568e750bb6427fb64fa4b6f7bfd313f0520e76663bc32e85401c282886ca2c04200739e4930275b08731e8039df249884de4764306700980b4c8249e8174706731280b9d02498841e9b6430e702988b4c8269e34cb5d900e6629360127a1f91c19c00602e310926e1d82319cc5100e6529360127a6c92c12c023097990493b0294906331fc05c4e0933872577c4857328242cdfc91c0a9780ceb9639bd321d63f8041988b920d5f14025b5d61124cc2f29d0ce63400b3381b0318bcdb787be34850969c0fc8f08d00f84a28f1f503f8929d0bb9306f02bfcd23426f01a02bb3e1109377c839c45c0a10aeca06c2a2430ee17c80f038b3ab4384bd9a64d5a1ada03ab43a5b2e5bde58251c6e231fa5241bfdb904d8e8f1e6b85bdb382d7501407942b64af1744b76dbec4e3807005d63d2da5b855676753c09709e68124ed2b9be64386f0438d79a8473929538ff08709e6412ce222b717e1fe05c67124ed275ddc9701e0770ae370927e942e464384f07384b4dc249ba4c3e19ce9301ce0dd435cf605be7ac10aaf1cd7b086b9eaba9804e0740cbb2b1a45981affd9e856e0fb2b991bb01bc724a780358d069a789d3f909dd113ea1825a063a3b2a4c844ad8622783ba0140dd68225442972e32a84701a89b4c844a58c29341cd0750379b0895d05d810cea3800b5d244a88443c16450e300eac9264225745620833a1c40dd42edacc0d573e768a8b91821f6ebb6609e061f4b5130ab2861f2f65e254bdc84d1dee92d1f016c5b29b1754ec0a676a2b417dcdf00b86d94e00a58f2105be2ecb559ccdb31d20d48e2fe93895bf47a5b9b9688e6a81a6b22cc41a75145c2112012aacd99236ce32adba3416154433d6130b930cafaba726419430eb0c95328411ec6f42b28a8bcd5bea1e13e005dadb9f38109bd8cc93c427e05d0d699b3ec2ee9123e6479e55e00b3de249836ee48703580d960124c1b77243807c0dc6e124c1b5dbfce0730779804d3c61d09b603983b4d8269e38e043b00cc5d26c1b47141dd1301ccdd26c1b4714782b500e6a926c124f4852783790d80b9c72498362e82762d80799ad9f3366cdc17a32fe83f3a9dba2359f9bf6f147095ec4aca45d0c8f6fc65c02ecfc87ec75bd6d7dbcca1023910803c33db0be307ef3fb27135b90920719f95ad49304bc4f0c416dff0c56ce7b55af1459b27c1c481ad9edd1c9dc40b9ddf5badec24ee06d09d438d0e2f6808c72c3b50a16b01d09ddb9cd302ed5fae672840795e36d64698c80ea5b511d6017ce79bb1898d3b8a5e232cd61d1f27b5cc8fa9d09e0acaea0b4c5a109fb44383cc5207019c7b4dc2996f25cea500e78526e12cb012e71680f3224a9cc358f2ecf4396c27e3fe970d4ccd0f5ae6bc5ece7843728500ebee6555959dca7a372ac843406175b149f3da0aad5c1df66980739f49384937a127c37913c079894938275989f37f00e7a526e12cb212e70f01cecb4cc249eadf41867335c079b949380bacc47926c079854938f3adc4b905e0bc325bddc4c5a256d9c0f86402be7bea2a396fbd5ccc5bafb0ba9bb80a00bdca1cff761b5d66868096d2fe6c8ca5abc54cdd95143688a6a67ac8f635106b805d5e9d8d95140ea58ded160178d798ebe54e5800918d533e0ad05edb1cc36af384556eb0b0a8e905d01dc8fe645435ffe7d0988c7a3880795d36f2c749d9cf1fc90630be09e05d9f0d7847661f1e590ef82e8077037d3567b36681d2628749192b930a6d14cb45f12e60fbf2c48e00e68de67a14110e5c90d9e958501dbfc99c158a6d9c59311958e9cdd49e97c92537f97453b252ba2f00778b194e0825a2e0d926f24d2e6e2bad4d92ad16570992f7add9b749f26a38994df60636799b49e3e3a44eff6425f8546087b79b8433df4a9ce500e71dd9e8440bd61f996fe5ec9ecd00e69d26c1b471764f1580799749306d5cdf601d8079b749306d5cdfa002c0bcc7249836ae6fb006c0bcd7249836ae6f702280799f49306d6c851f0f60de6f124c1b076b4f00301f3009a68deb1b1c07603e68124c1bd737580d603e94bd8e0d6f84d15d70d4bea6239f78aec03d9cfd1e21f2f98e3954e0ba03708f98d48541ea224066872341027ed4249ca41572329cc500e76326e124754825c3b90be07c9c7a7fde4ae65f8e5941f48a1bfb10fe15e4974f64638be34276a86d717c3f4078301bb3cad20f8ccd62fed9b9bc64af154be790ced3bd2d4604b91a24f52729210f9290ab9c8738e00a396d6f195393f5127352e8874e08966cba5e0900fb5436167a5260ab84334cbd10e3b9c3a46a03d9d89c9c09f03edd9c9e1b59db00641f154a06503e4389728840b9c079688500c69730d92e5ff7ac759ddc597aa6d839608bbc3fd73956386209d7d622ab0bb40705d9b3e6cc9fb031d97701b6fa1c25ca9e6950aa9092fabd155295fadb01c6e7cd5e85907048836c15c2f900ef0be6cead201c6127f3d8fc03c84b5fcc46068095fb5e0640988f926500ad81857e8dba1f74b96ccfabf9670b8465dad981dc15d8dfd7b3617f798d36582e1aa4ee1227b6afbcf56d80f11bd4a3411cd86cf1e166dd517a0d15cc9900e64bd9db3d4db9b7dabb7bdac700dccbd9a898e7a5689fdbdd59f73640f9cd6cf4774e3ce4fa3b1b00c257b2d115c7ad718ea8dc340825f8ec4777d9e5656c87e8e1ac75eef19a650db379fd825900ecb7cc99e563a31be12a80f2dbd9981539d1d77cb4b9d2731680f71d93d67929a4ecc4205be7e56180f35593704eb412e75500e7774dc239c94a9cbf0338bf6712ce222b71be04707edf249ca4eb0993e12c06385f330927e902b86438f7009caf9b8493d4bd950ce76680f307d958d6be801d4acbda1f0bf0fdd0246f38d2ad61c9701682bef2374cc2493a138d0ce75a80f3479438db090115625fa95ae63a73d9e747d40624e61f53e21ac5923b2f1247135defb7ade26fde6fd42044ce118079b04a04b52cb8171453c13e1ac0fe49367a317917dc3cc6bbd578e7db26d18f596b7567db1900e19be638bbd838357f3cc8297f4abd27df729188cb9972c7c286ca08c779c8f2d076c0267f46097200830364d8a686739dffd50269163cdce35450ff09a0be65ae938b8dcb92dd05d0be6dce8ebb05562e23f15300f3e726c1b471fce7f700e62f4c8269e332123f01307f69124c1b97917813c07cc72498362e23f10680f9ae49306d5c46e2c700e6af4c8269e30480d700cc5f9b04d3c665245e07307f63124c1b5bebef0198bf3509a68d0be97d0060feceec092a846d22b2092a0b41cfd2efa97b965275d2b9aa1709372fc2e2a83515c8dd00e47bf473271341ba5dc4bca3635be3ca3287da0ee72d4146f0be39be9b363637a702947f30c949a190b28822b3ccaf019c7f3409e7442b713e00707e6012ce222b71fe1ae0fc93493849a79d92e1dc08707e68124ed2ea3d19ce2b00ce3f9b849374d971329cf500e7479438f9899acd6bdfb05a1780e92f26595d2165273199d53d02707e6c12ce8956e2bc0ee0fcab4938275989f37d80f36f26e12cb212e72b00e7df4dc239c14a9c2500e73f4cc2493a5e4986f33480f39f26e124dd45800c6725c0f90925ce812c71ed42cea181f1fe76ff8a857edf77c2be4c32d7d83ea0b3f85f945847fab06e60c99e71c17de808519355f5eb01ea7f67c3917b323bd496a3f81ec804fe930dff4e65ad75c2fe78163057c2abd08e1ad9bb36ec32609d9f9ae3236fa3dbd73080f23373bd90090789c9f2d0af830ce0bfd958eb6382cf566dde017d3180f73fb31d18087deac81c18e68064ff79362afc70e52e5d12b7bbacff39b0d62f28710ef795f57c228c37eb4dbfe8fe3cf972d656da9e4485b90858ed97e63833d8e8207602b0d8afb2b9bc3e4ff8e5bed972875e53b513b054ee83439abf72f5fc1b8c2d1610b7b0f9e2553e05b15a04a29472e4896caedc2060ad316a9ce1566420ec9f22b3cec38175b630092769771f19cee500674b937092764693e1ac03385b650367f06166c22987649dd1cf83bcb3b54938275a89f31e80b38d49388bacc4f90b80b3ad493849d75a22c3b91ee06c67124ed2e9da64382f0438db9b849374e92a329cb50067074a9c6a5dba09cdd1274ad666ff12e0eb48894f7528f30f6f1496a8646f938fd8072f06e075a28497b8868d6a871f9a6bd8fc0740ed4c0935d83c385572db37a23902b4790e3305a48d43c38701905d4c014938424406f25800b2ab292009bb33c8402e0220bb990292d055810ce4290064775340124e642503b91180ec610a48c2f60c19c83300c89ea6802474952103590b40f6320524e1b02e19c8b301c8dea680245c8d860ce45900641f4a90e15c0c6d5c0cad3f40d997badbc25b4d9b2b5a27386c12ed6cfe9a7d7e707c944dc1eb47094f6d6ae7f967eabd894a44f71947bb5108db4adb503c4005f65400b63f25d861ccefb2e57ac179ced95ca0bb93e5a1b6ddfc6c90f4075042f64f84718172bf389e11ccd6164ef6ae9a5403b00ecc46e114cc0fcec625fc26826c6010254ae5ff0ecbf9e0392c215ab21cf62460a5876733f1573a4a78bdea89169b3527d87d54587702ac83b3310a5478080da13d0b927b0e25bc3e9ae49e2ae7b471c5ce05c012879804d34687ecc500e6509360dab867c13100e6309360dab867c10c0073b849306d5c44f26800738449306d9cbc3a0dc01c69124c1bbbe98e0430479904d3c63d0ba60098719360dad88b5400608e3609a6951d1e00e611cd31334dedea7668cc4cebc73c9c634c9afb435aa293cdfd1903ac73ac4938f3adc4b912e01c67124ed23db2c8709e06708ea71e8cf37c8853e59887861ff1df412e9a9b8d8901dc2de1d0d9b07e19c0974789af27e3eb1797ca35e6b8a86dcee39b9dc7abc55006dce8d63e8cad01c609941807336f5114778c729da36e9da34e99e0c113fb0cc6d747e0e342a58e009e7396339bf7b52e0570f3b331d096d94253848d4d321f910701da02eae49faa945721251d582b8c11616c00a5fb444a8c391a8ce1969c22ecf9245b726a1ec05b686e06403810479601fc0664004594688708b4f3857dae607c14bd421657e54294f262da222280db7199f3b72b7eae73ac70c4965b58787500802751bbd52657fcfd93076730eedb54470732870ae42700e4e46c145598e7d22c91f48997e79d425554b50779e991d9e81185355555edf71a0276d74c87039b9c920d175b08337d5e6a2fd81500ec519460d522d205ec505b44fa6e8070aa399e9e36fa84ac04288fa644393404ca62e79b5c483d5be6fca5ba4eea688ba5a954c55207502c4da32e9682f58fda5b55fa07b0d7632861f66389eeb335a2136f73ca0cc0c661e452609dd34d5acca7d0ca9d851f02f639c3249c13adc47925c039d3249c93acc4f95b80739649388bacc4f90d8073b64938493d9ac8702e0538e79884b3c04a9c3b01ceb926e1ccb712e72680735e36daed79e2b77be4e3a0c5cced1cb1b7eb631b40389f12215f00c16b09ad64bc3b4e39db64c123840ce09f01c005e6acbf60e3fc8d2340bb6761b69273996c83573899737db6bae13ea142f82ab0c64594083b2724e785ceefadcedff676627c08c02dcec6780fb7bd8ac63540d46ddbbb817f00302ec9eed8f9a1bea7d0488076a9b96e09366e227a0b40bb2c1b054ffe2137fe5300102ecf8663ec84e6708c25f3391a07f01d4b6d815eb93d4f00db704854c4ff0210aec886ab41b011c87c2bc7201f07308b4d826963bbe60900b3c4249836ce4bbf03c05c69124c1be7a53f0660ae3209a68df3d26f03308f3309a68df3d26f0730579b04d34687820300e6f126c1b4715efaad00e60926c1b47165ae8300e61a9360dab832d70b00e68966cf0b224cf8646df4c16078626d36ba882734da6bb9e8d9747d2e6d9f03fc5d60a52765afab430d511c0a5d1d7f0208d799e4465048590891b911bc0870ae3709e7442b71de0770969a84b3c84a9cbf043837988493740a2a19ce0a80b3cc249c0556e2bc08e02c370927697b880c671dc059418953ad999defabc8db3c06b90bc0db988d8953dc876336e36bcad438ad9c0a595177a74b550881a542005c6da6ce6a77c13c80789349eb74913a1e90e11c089a949b4dc249dacf4986733ac05969124e526f75329c9b00ce934d2adb0b2907dbc8caf66740deb9c5249c13adc47933c0596512ce4956e2fc1ce0dc6a12ce222b71fe08e0dc66124ed2e576c970ae0138ab4dc249ba3e2c19ceb301ce1a937092bad190e1dc0a709e42897334f3af80c01b9fe50e0feed7aec2e94d26c04638f93c8d5a312847ea0bff788c08f8e9a0665a4bbdcc59aa61e3c49c950c24d9eec1b9c072eb4c014968916420870190f5a6802474fc2203793900d9600a4842774432905300c8eda68024f4382603790300b98312649eaf746f40275ae1f3dd66394f7037876a71c6839aa5b2fe36aab27e1b28eb7766c3452c68a71ee1f81259975e3f007397493009fdedc8600e0030779b04d3c6cee68e00e6a926c124acd693c1ec0c60ee31092661458a0c665700f33493601256efc9607603304f37092661cd940c667700f30c9360dab867560f00f34c936012ce1f2683d913c03ccb249884f387c960f60230cfa68489affb3ed7f95dc9dccd9d4a1c015cb0fdebbe97330fec399460070ab08b9d07dc7d31e0949866db84846ca24c5b80f55c739644b371b6fb5090f4cf3377d11fc2f29e6cd19fa780959e6ff66c39c256135926300b58ee0594787b80426bbb28942a99da89304b73e5f65141ac0636ba371be3f4b0e4c78a2bf2f29ecc26c7029c1752e2e49e065c3d77eaa15a15d15df4940c5b0e15b69e00db45d928849273ca20c5908d2bcf8d02b9e4c5d9a82a6183748955251b570c391258e9be6cb49232a92a110e7390d9e8f500ec25a682b57137ccfd00eca5a682b5719fe12500ec65a68225acd493813d0680bddc54b084037664608f0260af3015ac8d15acd100ec95a68225ec9426037b31007b95a96009874ec8c05e00c0ee3715ac8d1d7e6500ecd5a68225eca42603bb0180bd8612ac5afbbb9035c3dadf64f8f6017cd79ad30760e37282c70394074c9a004eba560ed9f8e824d03b759d493849177721c3b95ee06cdbda277c6e92f05922b03cb865cc5b37643c9bc7b84bb7bbb2489973be58142ff56cbd635f6b9c7fe1e260adf34f773d26168799c376b21a7195cb2b17b2b73a77b966752c6f94f3c8f5dc247a4b93888bec6586e8f0ae16fbc4f3afef62c5cc5d176599f35b791134082471b1d0e172e75a03e31de3fc0bdb1c4d36b35a11e2c47553e2b1768293bb670e0f17071897baaa7d7416c88cadd20973a9d0a4d679a695f88e6b4271b175913a5303450b44b15c27b4e2f1ef75de7beb04aa15045d09c9ddfbd87d4f82fa42aae101fcfb6ab306ecfbde7d4c825aab0693e0ddef8b4848b583755c249364a9a9dfe99de64bab446cd70b8b77dfe895f22bc9cf6361592c6c604ba8b0a47e070b8b7a2b6858b0e779e611133be9a9b4b244a4b352277d958a6349a345e7c69dc76245ce2fb7f239beb1da395e4e12d92acfd4f5f432796e915ada0d3c4b88e94b89aa26cbe7d285c8cd9af9fb1b85534d8590ba206d48d3870fcf333ba588955cde0b714887ff461eef32da8599f6897574fe5ae9c4bc2b9cefc055ebfccd95ea38b7056bfdff007c95b8dcc2560300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/b953f62500b75234fbac48b8f6e3d9c6.asset.meta b/Assets/SerializedUdonPrograms/b953f62500b75234fbac48b8f6e3d9c6.asset.meta new file mode 100644 index 0000000..3b0c9be --- /dev/null +++ b/Assets/SerializedUdonPrograms/b953f62500b75234fbac48b8f6e3d9c6.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e167831a02688884582054a80b7638ad +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/b97be6d130d617a4abf8503bd958ad12.asset b/Assets/SerializedUdonPrograms/b97be6d130d617a4abf8503bd958ad12.asset new file mode 100644 index 0000000..5b465a5 --- /dev/null +++ b/Assets/SerializedUdonPrograms/b97be6d130d617a4abf8503bd958ad12.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: b97be6d130d617a4abf8503bd958ad12 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c14c7f5f8e730bdf75e44174d129210d8c6361d84699604060306a1020209c92a7417dcc036eeb8e3de7befbdf75ee2c48eed388e5b9cc4499cc4b19de4bf333ba37bb737efeef6f6de6a96ff4f7cd06adbdbf7bef3a6b76699ccfa098db57e2d61056c3acb608b5929ab661badbfa65bc72aeb9f7da6ae2f62b5d671adf5bbd8ba3796a5c57993ff8c0cf5b67ee75b6775acde7ab3819558c70a71bf9095597fe75bef965967fc6ab9f5bfcc7a2ad4dc7a69319bc116b205ac57a8471c114bc44b75f25a88db156a6dfd9ec6b65a77cb8452fc2399e2562feb57a175a74edcabb29456cf2d672b855955d6bd12eb9d5a5669c95c2324b61e9bcdc41fcc3e7493c7eef2d8d5fadf46fe7d80fcbbb5fc1b3edf421e7b24f87c4ff05e1bf0372774558cf77bd9c7103f6f691d2f06e7fcddefe473bd6d79cdd6c590d5571efbc9637f29f39204f46f258f03e2d81b4bc640202b1166ade5314d1e07497d2f4df2fb436c46a17d401e67d91ce89306bedd06dce7d7067bb05d85630b47384a1f6876b10cbf2fe4f343e571b83c0e93b2ad67baef95d746c8639f387a8db4df639358d867ad6f1e5023cfd3e571943c8e96bab592ba5e06cebdeaa2c2748c94d9527e639fe6ba7a9edfbf5c9e8f95c7718ef0ca90cf5d21cf3313d42711ff533a295dae04e716c7e6ab63c852e1dec611ee6de4bbe7d81c9b3fe4b007f89f566e969477551276b475d8d1d6d6a5457ae473717550f2c74b39eda4dcabc13997ab7c2451db9acbf7ee93e7d92c7edad62d817b136c39ad15eb3cfb3b2dbbdbd75b4e6691be9c1b474f15b6ed1d61db5ecaad947295fd13edf390e23c00c8e1ef5fe390dbc121b78394abd288cc04f554f1fe60793c541e0f618df178d88ff2da41f22859843ab2c834a0a3bc7f60f8dd5e27b8e4162b8c0e7384751ff9dd4e7164aaf7a7c8639b049f57cf4cf5a0f334796c9be037dbcae3740fdf9471abf5f70e5fc88b237386cdb7753dd0c192d366873c9f298fb3e471b6e4dfd5e1075d13f08378bacc91ba301006962e6d3bcbf37c799c1ba90b3bdca1d3b5a9d329d459cabc0e9cf3631779fd7a70ce755d647fa7ed7352e63c799cefd079019dce56e95abcd7a13df08d44de8be55f8b6cfbda65d9b2db15c9eb4738749b16d6bbf50cf0aed22391f8502859747730ee2e75506c8b1ccfdd00cef9b15bf87be26febddf6cab77a81ebfcdd1bc139bf5f90a0ae4b58b4cf72393dc1b77bca6fcbf4bffd39f2d9235974dcd3bdcb8fa05e1192e5b5f61fcbf796b2e87c4c3dc76dbb099cf3fb8b13b46d99463febbb1da6c478f7281699fe4c09fb43abb7e4b5e5521f95cf5d07cef9fd81e1774295f2da0afbbc93d265a57ca737e0d2dbd6afa3ca4f8f96c7354c9fcfae061c647cb4aac08ddf1ef092bcb62ac6b74ae533250ebb1785e5b49375b14e2a1d53ef8c409ee5d7cae4b1421e15870de167479e20afa9bc71bdd4ad0f8b489badaa7df83a3ff695f76f06e7fcb9f2b0ec9eca97aa1cbaeac273a3c3765d1a10cbcfaaed674728bfaab1d976da27b93de7d061258bedbf5da45dfd5864fad14fcafdc196db79b57cfe1879ac95c73af9fcc0488e21555f8d9536c7d12da4ead8b780737e1c20afdf0acef951d5716f03e7fc9826afdf2ebf9526af0f0e7f5ffcad9ee5c7212cb29c3fc4e6d1659d43b67a6fa87cfe0ef98d7a709d9f3784390c7d2af2ddc6bac56016aecf71e6af397c255e58c6f29b2db6ccc6facc5679dc268f8700d9325f0d81ba6a63197733b8c7cf55b97f138bc89b63eab25d1e3bc4b1a71b788e1f7778b03fd63d555f3e5eda36dc11f6c3edb0efd63e86ac136c4e7d541966a7fd4e77e9b3ec44fb7e5795fe9c046ce2df181166dd45fa2f3b59de1b09ecde24afa5836bc7c96ba3c2d7422a8e9de2089f3b1df74f053274f777011d74f777cbeb77d9ba77df22af9fe6b0659343d7741691aeb2d3a36d557950e3b7ef76119667c877473bc272b40c970f63c8daa30fcb1e5fcbf3331d617996232cc768c2f26c796f2c0837198742e334e19b0138a8368573c033302cd4fd73815cddfdf3800ebafbe74786654f951fed45c212ea0fc3f282685b43e31cdfbe2781b0bc481e2f94475d5e22ebf7224fe172ef4d40ae6ab32d8f21b79743ee7d09c85565884b63c8ddc7f4fa26f33de5eb2affc86491bececf2dbfedf55c0c599733adaff77e4f9e5fc1227d5dca6ef4f52c16edeb57c97be3c3e12f58f06bd92cdad773809f64c97b578367a0afaafbd700b9bafbd7021d74f7af6311bede475dbf9ee97d1dea0f7dfd06f09d36e019f8edfb1308cb1b1d9c15df5c16592ecbb5c3a78fd24f950d76b2d879e34db6fc51aadd5a95672748f90f80737ecc737c57b6f7f56d6ecbe9a7daf5657b5ddffef6f5beaa9e758bfc9ed2f356f9dc0cc773b7d9e7a3551bca1d0efe773a7c6552d8df1a6db91ddc83b629df506592bbe4f58340581d08aec1b052f95b3cae2a4fbac7c16fa294f72038e7cfdd17d67ff453f29a4a03b687ef7555b6a8f06d0ff4b85fef2b42571066aecb48cae607e2d8ec264d3a9845a64907db7ed07f690c598fc86776c478e631797c5c1e1f95f227b3c8fa9a2a9f3e21cf0f71dc3f44debf34ccbe5767a08792cddf7928863eca7e15a64fcbe393f23b87b2c8fa916a47d6e511c9966393bdb75aea7458a4ff88732b1c06aa7ab6f2c55571fce319797c561e8ba5bc290e065362301891e0b762d8159ac622db4c545bb3cc0f4353e5fd87e5f90cc7f3aafcf3bc3c9fee787e96e379d5eefb823c9f19f93c7b11c8e1e72f856d13baf06b2f836baa3df995309f34597e08cd8efc367b9545d6ef541d6e8e7cee11f01e64a0eeabf893efb069ae3c7f0c9cf3e3e10eb9aabdf979c77d25779e435f55b77d531edf08db382e1dbc0378b2d72365c6f469d91e159a2fdf791c9c5b3e9d16abfcafde55edce0ba58c27c0b9256370675bdfc1c37059a1450e7e0bc0757e3c42de7f129c73d95b62e8f7b27cb6c0615b817c3756d951bdabda8d8b1cb6154919dfd9b6f1660f54966ad37adb1186ca67b9bc259a705d02c2939f2f963a3c05ce2d1d86a8b2fd3b4cefdb858ef79f8e7c7fa8f2b577e5f13d876e47b2c8b6bf0fe4f157b84f32e5374af7a5e1671af57bdfa19fcaeb94decbe4779f017aa8ebfc78148bcca3543bf1afe5f972c77dd946ac1d5b102b8e34c8f757b0c8747f85e4f7bd2d6b58f318b27e238fb21d917d0c98c9f60bf691940bdbaf7e0baef1e32a16595e92edc8ec53204fd5633e91cf1c1d961752edd79fc9a3aa47dde9b8ff3b603bbc2ff560aa0e152b0ec9324368b583db6a9bdbf0745bdfe1aa2fe773799ccc62e7655f38e4174bf9cf82737e5fd7aefd0779fc3a5246449c546dde6b58b45f4b7f665f85ef65a8fceff7e03d7efe25b0275e9b5f2cfffb8669eb9e237683b0e0c79a38dcbe65dabac688b75ccaf9238bac8bfc8945d645d478315527fcb3e452e2e0f01779bd34fcbd5009b8a6ab67c4d34d776d839459c622fdb0ccb67fa4acdb8e546996f2c3f571be259f0b9583e7d4b7d6826bb2ff3cb40ed8b9165ce3c70aa9db73e0dcd26d54ae43ee7af9dcf3e0dbfcb8415e7f019cf3f7d2e479a5bc7fa943de46a053a5fdcdf4cfe4337f757ca38a85d3538b57fa0f0e0e5540d67a704dc980ed011bc0915f7f5186c17791df8c1b06ba6b7f93c79bddbf1baa6691e5ba6a79ac71f88eec4f1a25f3ffd16a6ca7f2d35b637f5bc9657f97e7c7b0c832b3ea3ffa01c8e3f75fc2656abf53ebb0a736f2bb427ebcb2a24ae3ff2165d4cb775e06e7fc58076cfea7bcd610be16527d60aaadcad9cfb4193cbb193ccb8f5b5864fd788bcd7fec770ed9eabdadf2f957c039ffd6bfe4f93679ff55795dc5d1ed40876de01a3fee90efbc06ce2d1dc6c8fc7fec73c8b78e95efbd0ecee137559fc21be09cdbb625f2f9d0f1f2b937c1b9620ce5bce590e3d02b7402b0f104a9cbbd71fc55726d6cafd8cc22fae0c6a874eafbc4e469af49fb99ec430bed7470db29efbf9e846cd58ef69194f9b6cbf7ff2d8f9fb2c8b870228b8c0b27cafb3fb3c6f241a68ab33fc9e32749e8ff95947f128baccb9c648771862ac7aabcebcb38df90f2d82ff2f81f29ef6429ff1d70ce8fa7b088381b52fd6569f2fc541691bf88734bafcc52879c5d0e39bb1c7ea5fac9de75bca7ca3a5fcafbef49b6aafef715b8ef96adf2d9ffc67e975f16c7d3c0733fcb6ba787af85541fdd194c9fceed01cfee01cff2e3992c329d3bd3e638fe7b876cf5de592c329d937d6ca1903c9ecdf4e9dc394087b3c1357e3c9745a673e7da3a647d68331fff12f2adf358647c3dcff14dd56ff606386f0ee4a97eb7bd40b7bd80393f5e2065bc0fcef9b1993c5ec822db092e747c43e97c11f886ea3ffb294ef8ef71f8ea1e16910666a93eecef13931779ad4548cc0198c3ca58b155cacd14068d62894fb9516fc69f6cc345b7e4bff8cf48f1d97ab6d57ab54c37e365b1984f53cf7258b676c64b1f3116597d7dbaf85d6c3d5121847e108afac4c3519fe0ca555affcac0749d3aebfa6c31db874fd8a9b0ee64b079d691bfb59a8d67cbad7f915296589fadb42aac65acc8fa5d23e4adb6d48e7e329e497c6a8ff39d024ba63df3a8cabaa280d658e79542c342f17b93d0b44c689f6f5dab17f3a036b2b56c9a75dc22be166d7badf5b7ee9b4512995e47fd0424ecba3dcd4905d30ccb1aae7da6f0c5ff0b91a608118ebee507213b1a36cf14ad47a74785c4ff31b41319de70982f658c17c84211d7b259263f158dbb5e6d8cb650efdf36ef3c961bd3163d191edcfd8405e1105e76e8f577ac285df14d8b48d37258a6e82eec1fc7b45860b9bc7431f2d78d092d5a34cfe28a3af18774f8c5d4ad421ff1dbcf5588e7dc07404b91f945068018f65464a56a8b40e6b958285f2954d31ba3b2e285d647d7cb34b35064839b656a1915a259fcf3ad44a04467b9f10cc382a5992e58446b7b5193c40a6c926cec8069dd68453860324539aa770cf7c5be250a58cd64294b45b0c7ee5fb8b1e8dc6fbf68a10f97b6225c92f91a163207e842a6addf11267e0e112b5cda35da150e17fea367d81ef1ed783a60049beb08b6f3dbb7f9bd6a21a5d87ad63d433e44778c33d1d103ec8838617c1530842d3408b338c24e1aad588b360eadb84288e496bac069df34d97172cecdfba87b3910b4409dbb4bccdcd4ad6bb7d2d11383b95793d253b5c442ab3a70b875afd87abe4c1439f9f54596c462ebdb5cde54f18570cd32f28dd864796fee3827592dd56e82ea3050e7f5aa1946bcb5867816f7d7ee1a3710699c333274c123431b2c9af5f01acdda62927b7a95dc0e93dccbabe4f698e4de5e2577d0451b317778852fd126dcb8a2fe9a66bdbbce326693a8313758efeb1a636247973e094797be22baa4315d13913b8db068d2511776fc623f9d92cea0eb8b075d274c707f8f823b63de36c0abb775d1799bb0633da9b72db6aed94d6933c5dd0a51a3e02d31c5423aac73f0b0c59e57fe355f2c70d3203489ed890313f6c441c213f9540c4a6d312fed8a25e6692948ccbbe984f37478308b2e0dffcffa8912de1e17de1dd37c8846f365739bb9d2bc071615867a8d0a3d31c9c3bc4aeea58b64224eeff43949d7b7b1ebdc587db75ab82ed74835b21658c772a105bfceb588df361f3b4a0e679aaab14899666ab381a6b2828f8268cb5305a4823d52241866e98c252fbdb114205d93027ca84b5e62a4007db0a834ca6b54eaab93cca3d2688d0f65711fe2dd5a6d45de1af59d91f877fae9a2ac4892b7356994b5ab625c5eb9e88eb2e52d607c11b8cd223a6db0f29c4dd2718aac676aad6f94c97cc94b24e553f70638ebf8ccfed1478771223a1c9a4074a0b40a8b00fd759ec4ebac3cc38f6a41e5d1a5c0aaa24d67ab44343c465ce694ecd0ad108f56b06dd651f52c45f95b2bdcdf06e8b4e155013e7a316ed1b11b2e78202638cba3e041581c1fef358ea7e924f3d486cfacf35af2198ca99de355ed21588a9aab49517f09b94b518762c22768843fd6cc9df0615854c84bc4476278f5704cf0445d1ce34f4f17cd7f69d6ff6aeb0dded8542c627f9ac80cc3a9419a15d72bacbf78197b2c78be3adc37e142cf1198534cf2ea1423b1703b50136e3fb80cb7744cf8411ae1730e70277c14167607ebc28e477a9e6ff062c93a99b745a68669a24f3d4df41f358866ac52117275225cd3d8762b453ad63ad65b4fa7897ca052dc4b136ba2d68ab4d64d988ec6f49facd3bf2dd07f11d0d0cd17c760e9d6219a742be432dd1aab13ce0b3e8732a4e0c3e7efb92ff88cc3b04dd161e3d9d64cabf8c24bae0de2f942e100658dd5dbd2146590191abd32453576236bca0219afe0f3412775e2ef7011857f3bdcd5e9a5e035954517bcd48fbee0c5673aa68b79e87e688f15b032b14475ba26510db94954b3b0b830038b0b33938a0be3753e275a376a9ad4e7f018552064f398e7bdc0cfe7b31ee0ac958be697dc043c2b553a8e116be7d68935af6d72753c31e5bd116bc0e2d6367c1125f47162b688137e6a8ec58b6c2cd79ea3c9b5ef6be12ed7ced1b9ac68d9aa6d52979d2124f8e1b6f93ab7152d707909047e2af51c24c626d68944b55426aa76d23d482cf05b2bb2cd32eb3a4f78e1fd3162c15a5e5e9a25785709f2dcbe6251efc59c7cae7072bfedc41c3d17cb000ed76400ae4ad513b028344f13857e711985f230b5e77b557b22a6f6028dda3b5aba537b12267ca146f8bc56ee841fa813ce13663ec9d54b0df1204c309f091f55dce41555554f2871d414d788ba82aaff958a2b5baddf95d6b51221224d8c33555dec6eb43c18635ba061dbd925dbc91882428f6c0fd109e6ee599488e018dd9187ea04f3f2d7628694bff89c7ff7e5afc330ec476ab05fe512fb142c9a2ff51acda762929779953c0d937c9457c9d331c9cbbd4a9ea193cc0371852610f928133781381313be5223bcc8a5f05958c43c5a97360d677c49e37021d5ae3e85db358a59b990526bfdbd49e6b9a511ed23bccda342569addc4f3d9989eab747adad35af840225ea628166d68fc8b0bd906575f9d83a15fad41bfc725fa7c4c78b146f8d72e85cfc578add1f1ea1d275c4bc5f893f0d5f1d655371c0fc7b429d169c34fc3e1e6e63bf330a4a51aa4fbdaba433a1f33a24c6704ef47b3f11d64215b201afc8ae5949c4d221b778f7101a641b94e039eb2cd6b2c182c4ab258b01043ba5683f43d9748176129f23aaf29f21198da15ba44b39d3bb50b30b5d77b55bb502799973a3630a4d4c1577e705fea28c2be53857d676352df59acfb0e2755ed95d4122c806b34013ca5bdbb003e12137e8c46f80e97c29762c26b35c29f73297c1926bc4e23bc7f0777c28fc284d76b8497ba14be1c13dea0117eb14be12b30e19b34c26f72297c25e6e49bbd3af9d198da5b346a77efe84eed5598da5bbdaabd5a2339530cc6f173ca8c73c0a2bb59057c084c624328f91a23bae932f1be8f352915ebc285e7d03b742ab9c8cad760de74acc69bbe7019094a30e1c76984af70e9aaa598f0e335c277bb145e86093f4123bc732777c2cbb1c0dce93130d76282f932265165c1b1c23bab451c4b13bb64f2d9a61be5a69c7cc67f99e8b82e16be1f6e70521dd77cfa729af4de5ae9d39596b7675857dd68bd0ed3fa249dd6bce79537e286cbcd7655d2ae86e8c615a6598511bbd43dd2955e15980f9cacf181fb5c3ad87acce8533cfac0068de04c312eb182349dc5867e1789c67bbedc40b9f094aa140f6b3f35e13479974893793f3f9dae58fa5da90b6e5eb6decd90b2355f21a52d57d955d9ba4af71deeb3a76b7c36d765bab511137e8646f85297c2ab31e17b34c24f7629bc46279c176bf87a3c9e8a35c7606a9fa5517b5267776ad76289c4d9ba9491dba31a6722d36a37e9471df6cd7374dfe4f16a918805bc116f8dab2fd563e8ced5a09bd2c51dba069d70deb9785e22e96b8ce19f9b303ee77b4cb8376382f7eac0734ecb1b83db6e365ae932e3dd8205c0059a0078cc65006cc5845fa811fe834be1db74c279727a11439253bea8b2fba68aedbaeff0d4e09244023b464fd20e4cf0a51e051f8b79d1651eddf3384cf03e8f828fd709e661cff768718e1ee402dc8c1e3c01f3c22b345ed8bf9b3b2fdca913ce5361beda9ba75ce5444cedab346a4f76a9f64998f0ab35c257bb147e321633afc162e6b549c5cc533077bc8e69524b3e766d95f58f3770f07ef1b58d995685950af23b35a29ac32b0f6e7cf7544c8beb755a746bd422cbfa5dc5ec7e157b644bf23aecc274b841a74357a9438ef5bf4414e4f93b5bacdfc96bb01bd3e0469d06ad4158f0f92fbca8ede66ba761ee7b93c67dc77677e7bea763ee7b33e6beb724e5be676089dead9a44ef009789de1e8cd06d1a425fbb24742626fc768df0d63ddc093f0b137e872e6c5d0a3f1b0bdb3bb1b0bd2ba9b03d078b0e77c74a9ab2539c349d8b69714feca4697c0a93a6f3301dee8d9534e5a630693a1fd3e0be7849d391e27beec6eaefc5dcf77e8dfbfee8d27d2fc0dcf701cc7d1f4cca7d2fc490f17da0bc14f42ec2e83caca173724f77742ec6e83c82d17934293a9760463ca631e26397465c8aa17fdc23facb30ad9fd0689ddbcb9dd6fb30f44f62e89f4a0afde598114f6b8c78cfa5115760c29fd108ffc1a5f02b31e1cf6a84f7eeed4ef85518fee730fccf2785ff6acc39f91e1568b69693e26ced1a4c8b17755a84b3b5ec14666bd7623abca4d341656b135298ad5d8769f0b24e83362c9cadcd149d35d52e07fc5c8f39f02b1a07fec2a503df8039f0ab9803bf969403df8819f1bac688157ddc19711326fc0d8df0c75c0abf59279c0717df3ac24bbe700ba6f55b1aadc7f675a7f5ad3ae1bc79846fd6e0a979e4364ced77346a17b954fb760cf6bbbab8c59bcb630fe92bb21ead1183eed68a74a7568c78b5676e958aced245cc5efed19ef55b6c5d2d15f381d78973d8bc6e77658e175d996ac6f05666af0496268612d8eb79a7896eac52398f7c83b852279e2a0392f59da515b2d31776afba1d997b071640ef6902a8d46500dd89097f5f237cb74be1776189d1075862f4aba412a3bb31233ed411eae7ce887b30e1bfd6089fe352f8bd3ae13cb2fe2691c42846d3f57d1ac19962dd9ba6e9b98e5e8f28b53dd71fe978697baef96e37b17baebdeb8af55cdf8ff9d26f75b1cda52f3da013ceb3884fbc66110f62923ff52af9212c7ff82c11ff8f91683eacf37fb11e537993f83fdd5284bf4bd8f33f179e3f3a86e7532c41f808e63cbff7ea3c8f62cef38547e7790c8ba67fd044d3cffabb8ba68f635af3ed99a28a447caafc5451d12a13933574d37cd2447129cde588ac27303dbed2e9c1571a7127ff494cfed71e43e7292c74bed184ced201ee42e7694ceb6fb1d0e171649d2c22aaf0286b5c0523d9f172cf6046fe5163e48a81ee8c7c1633f23b9d913c06aab111767936f90131cf615ffe93eecbbcb66fef3891d9b86c7566e352310bad0851cadc4eb7791ed3e0cf3a0d7a69359827feaa17f3eaed527f72b3a95ec074f98b4e977e09ea12bdaeb11b9d5ec41cef7b8de3ed18e4cef15ec20cfeabc734e1654cf0df3c0a7e0513fc778f825fd509e69c7fd070dee792f36b98f07f6884af4e7327fc750cc93f3d2279432798a73eff4a44708ccad09b3ac1bc1efa63e30d473d946f69e9be1efa1686fd270df64943dc617f1b33e267cc885f9232e21dcc88ff688cd8e2d2887731e1ffd508bf6ea83be1ef618ef93fa6494ef914b40206174f2915656c9590a7b35122c3db287f478ecd4f136776f633562c0a512b727d3bc9ad1363f7d344c21c9e1c6d372af169be358e9281fa0e6f4cb2b3d8f2c6e43c4d24e6a52e8723be8fb1e06bc645b1e04ba1c015d8ec526638830d4f54de2c34ac64e1f9b5b67e5ce77812b2ada7ddce67f80073185e228dea4a72e98dbfc2a254b31012a50e082513a53ec48c68ae31a2b74bafff3516d22d7421cd076feb9b4897cbc6553e1f84d72eec857b6285697accbba3c4105abb5935ecd79131a05a78866a428dbc572ffcaa5e138bd6080dab4103ac2dbb5ad64eddf8d76fb0a069a9099af461ee82e6239d70be2f42ab500219da205cf0c798e0d61e05ff16c3d14683638b4b1c9fe884f3fcbd6d225ac7c8df3fd509e6cfb74b44f0c7b8e0cfb0b8d55e17b7786561b18855fa5501a659c7c8d8e5c6537f87e9d241a74b4b19cf935991e073ec4b1d755fe2798a1be9bfc7a477d249e737ecbc273389f51cbec0dcb9b3c69df70c77e7ce7fc08477d108ffdaa5f02f314a5d1371e91848bec20477f328f86b0c47770d8ed75ce2f80613de43237cd10877c2bfc584f7d408bfd8a5f03f62c27b69847fe652f8775860f6d6c5a57a96d88a29deba54ed268a55119db46677b0fe090ba23e9a20fade6510fd190ba2beba20e2a34ba2fbb8dd18f317ddf77899b61f56a6ed9f5499f67bdd77f8120403124947b6e382ff8a011ba803c6b39f4c5780fe86c91fa493df9631ad47bbf9e2dfb12fa6e9bed853eb02f385a7ab85a3c277dc79fa0f982683759a7009bc9fcb6d4ef00fcd5732c54e197cd120bf56a748642b6d7d8fda90102fef46c210f143dbab3634c47bd57a44591673c76984dc3f75e1c34f8785a277c49e3b7f67ab7dfd5f6f1615342df0a0f917e600c3750ec0a778f2b16e76025f69fd552f8daa70e9783f62df1da1fb6e27f4bb1b6526e0e6dbffc692f7919ae4bd7586bbe4fd279d707b7b5a6f759a9f358233c5062f1b482351e28322d43ecfa9ebca1ea563a68d74a345a4e38bc3d3ea8b45d45f74a133d0ef246eba6822a94d22891b13e2513e927406c27a2c92c0c5fa3ac6ed3f3a6e6213a0553e72837bc8178af57cb93f2c140d4f7633565d124cc785dc6eb19021c80e8db23c59fd30eaffd525523c91cdf4d85cf43f4c709647c12c846484e33519219bf4d0de67bb6fcc71931186741fe09948b62e43ea183323ac73951d35d37d99e73039a1e8d98ada5d3363cc563c40279c0fb6c90d791c6cd31c933cc1abe41698e43caf925b62a8276a508b68ea02752bcc8326796c48698df138d02b8f3698e483bc4a6e8b493ed8abe47698e4c95e25b7c7241fe25572074cf2a15e2577c49cee308f4ed70953798a57953beb24f39ac5d444548eb1784c174ce5695e55ee8a519eee9172374ce5195e55ee8e499ee955720f4cf22caf927b6292677b95dc0bf3b9391e7dae37a672be5795fb603e37d7a3cff5c5041fee51703f8cc53caf2cfa63f9f6fc14e4db0334c233d3acd3105fbe937e73a34236831dde38802f435e877d7553c5175475d5be1ff956ec8ac88284abd10b45056484783275da61d5908198272ef2e88983748279901e9188600e01119c863962410a1c713026bc3005c2876091b3c86be41c8aa5ad8b3da6adc3301e4b52c06338c6e348af3c46e824f3e7977a6c011ca913cc07012f4b44f0e7b8e0742c1e1ee5311e8ec2042ff7287834167a2bbc86de182cf4567a0cbdb158e81ded31f4c661905779849c81095eed517026167ac55e432f0b0bbd351e436f3c167a251e432f1b835cea11720e26b8cca3e05c2cf4cabd86de049d64de7ab8d663eb611ea6f23aaf2a4fd449e60b425724a2f22e5cf0242cf8d67b0cbe0331c11b3c0a3e088b22951ea3c8c158e855790dbdc9188b8d1e591c8209aef628f8504c708d47c18761908ff10a790aa672ad4795a76282eb3c0a9e869568eb3d9668a7631a3778d47806a6f1268f1acfc434deec51e35998c65b3c6a3c1b13bcd5a3e039188a6d1e51e4631a6ff7a8f15cac02b5230515a8c3311cc77ac4310fc3719c471cf3b124ee78af49dc020cf4092900bd10537ba757b517616a9f9802b58fc0d43ec9abda0598e493bd4a2ec4809c9202204598daa77a557b3126799757c94bb048bedb63243f12137c9a47c14b31c1a77b14bc0c137c8647c1476182f77814bc1c137ca647c12b307f3bcbabbfadc46a80677bac011e8d350c9ce3b161601556013cd76305703506f93caf908b3195cff7a8f21acce1f67a74b8124cf0051e05976275d60b3dd659cbb0d0bbc86be895632c2ef6c8622dc6e2128f2cd661822ff528b802837c9957c8eb31c8fb3c42de8095302e4f4109a312e37185571e55188f2b3df2d888a54557794c8baab15ac4d51e6b113518e46bbc423e06837cad47c8b5188beb3cb2a8d309e663d2af4f4430efc44104d763826ff028b84127989fde18d28c23953f6ec6916ec222f84d2988e09b31e137a740f816ccb16ff1ead85bb1c2d7ad1e0b5fdb7482f9c4a2db12113c147793ed98e0db3d0ade8141bec32be4637592f9fcbb3b135139c6fcbbe33095eff2aaf2f15864bc3b4591f104dd07b83fdd93089318eb00ecc460dfeb11f68958c2779fc784ef242c14eff71a8a276b24670eb64e437c2ffaa698c2a1c622b99baef1808eb07694d483213e4aaa4f947589e8808d853a054bda1f4a41d27e2a16f80f7b0dfc5d98da8fa440eddd98f0475320fc342cf1792c4589cfe958547edc63543e03c3f2440ab0ecc1843f9902e167627ef894573f3c0b2b623cedb1887136561278c66349e01c4cf0b31e059f8b417ece2be4f3b05cef798fb9def998ca2f785579af2e731a629d860a987f99d354b1501c1f30eb3e5b7a31e16ce925912df58cb22bf6d7b10ce9022c2178390509c1855880bfe235c02fc28a7caf7a2cf25d8cd5ce5f0b692608ce606a0875e450e8058caf90bb59f0df208b0a19622a61be757fa17567a3f0327e453f2f59b7ec097f1a8639f7c56a662fd2e26e93b54b302b5fd759796aa3958b59a98807769ca9127fe7cbdd786ac56230769cc96f7c7266e392c8918b2ed64a1e85e26ea925b141d8c5e546d20b4be0cfbbd3039354c4f80ce6b5e26e245358b873f25e62c971bb02c2a518e937307f825fb46dcab1deb169555be9d42acb376a4598dbd616c965a89dda86dfc5afa7ca9f2ec3ac7c5367e5a10e2b2173dbce5922c4aa848d4e2d234308de891557e05b6e2cdb8759f696ceb2c3120abfa96229a50aa666757b0fb9f01d37b65d8ed9f6b6ceb63c876df345e8ac9396f1b32d4d66c9159825efe82cd9e3737a167e872f03a8a6d49482b5bbeb5c783964875bc1f39206510a80a91e2ff3a42e6dbb12a3feae8efad484e2c63c66ef2f6742aa761566df7b3afbe6117a15bf7a8cf80cb7ca2ea156884f57b06d221eea53926442f56acceaf775561f12d36a5cd302618bbd1ca66da3ca8df9d51249283a5e241f9ad760767da0b36b99eb925da1b81359b6d349c0a6d67929092613ced7623c7ea5e371b82f7936756e7e1d66f3875839c59d0f281fd62f04ebd623dc58763d66d9af75961d8458b658c4cf4a5936b16bbfaad6b244c6e2d2a8d0a0a9a3dc8059f41b9d45b308535f15aaf63a646b98bddd4bea2cbd11b3f4239da59319b6fa952ea588b4002efbc999cc11a15c2b6a4325568ebb358556dd8459f571227582c8efc212c262110ab5d6b33c1eae8d91fb45ca489d65376396fd5667d9f4b8296762b5023c0d8d55674d36a5bc05b3f1139d8db9487a82a56cb6ddb38557c2bbd3e502b4d1e94872f5825b312b3e8d5d824bcc8a708b9b6d4f8928efd7c62cb3bacb01c25f7063f56d98d59fe9ac5e99a2b0abf3609d3f5c6ec7b8fc4ec765b823de3a433b9cd79789d8c5ebc2a9f1da3b303d3f8f9df325e7b5b3a51da9f2593796de8959fa7b9da56584797ca1f4e75ab1c4ae5d2f5f22f2998ac63c3f352d51c994d5efc2387da1e3b4989813debe119b90770e77631cfea0e3300d2d29f1769835d6432a07b617568e5daed54b4a7548df8359f8a5cec27c97161e293c7a2312224d61efbd98bd5fe9ec2d20f4ec3ae6be949f0a02f76104be4e55e9df4edba682b23fbd55f763567da3b36ab64b3f9e29f2305d59ab297cf801ccd66fb17650b721384b3c11ed8dcef43571b96eec7b10b3ef8f3afb0ef6503fad17392f5fe7b65cb626e15615453debc6a687309bbe7317664eff849bf6c68b659439e5c3987d7fc2ec4b451d80f7abc6ae83a6aa7efa0866df9f75f60d63b1fb1e8a2cc2145a3e8a69f99754d43f234baeee4281d2f71ec3acfe5e67f538346e15358ed1816944788bc454b7163c8ee9fd579dde07b278ed3af9620402efe3a8141be4cd6455622defe856b65821907c3bd513983d7fc34acbb1e3086f735b244a90759a3244223d96bce4559e420b9fc42cfc7b222d71fa1ec87ce17bbcb7ad58b6844787979fbd904f6136fe80b50624d2da988895c9a518c95bfa3466e93f7496ce4928349dfdc9763c54763765b83e8359fb4f9db54be3862b6dff1b75cfdcb3188d7f61fd57fa3c237aff8fa62a613e8759f423d66613bfb692480c4ea4cee3be5e94bc9f3f8f71f8b78ec368171c5498aadd8152e58b2f601affa4d37844dc9849d752fc22a6e9cf3a4d27c62869393d3d52f31a91eb87dbf828e2cb4b982dbf24325212cbe7661a96c7bd8c59f91f6cd485bb74ceae9345df8d1e49a3362ac3c3335a4a72fd2eaf6036ff576773b6236461bc4fa6ef0293e5c68257310bfea7b36005a36ba55475ee58fd14306413f568f58e1b2aaf615458b3047af8d517ddc4d6b0659827a72696be8e5916d25976541387b79b704e3606bc811169a623e2ac85b82dc3782f87261ff66f62961ea0b3d4995a4d17a16a87603d685db2bd208fe5c6b14f9792f1b7dc58f0166641739d05fa71b9fc9b6e6226b40fbb9eaa107a1bb3af85cebeb98db1335f944deac5f7ea45fca96f4c7ff4f7dcb5a9d3b5c0bf8359dc5267f1bcb865a3f0ee72ce5051bbfbe1290ab6335dac5428b972c3bb98d5ad7456c76bbfb2fdb8d07a780db36b8125aca96760bc8759d83a91b4464f38b99251b275a5f7310bdae82c98cc628fa9e1fa955a77b658be15dd4e08c70bb94b41f1706965fd0b85c48e49e249bb8db35a90e0a5e64cbe4d6328ab310dc968ccb9332272f9f075fef52a4b239eb61535e6d1e14d5330096d9bd9d159fc8c94bb30db059b503973cef69c2ee4574aab551ccc10e16e8f3fe7f35733ac3a678578cbb91d0d6685aeb49201ca2bd0baf836ad44964708855a498b942c8b34efa4d9ef2c6dc743b5bf0cd56699c3b98d6392f4a6f85ab4e75f3b40ef43bda2c8c238afd3dd16b040e65d21be42d42af19945a231009fdc11f7cb30c6eabe3c4e0850e5fab8e2168368ae13d747b89b3dc0b696d90dc21f5b325bb56896c543a40325b64e005bb88f6eae4c63f8189320e07a68681857474a5c7cbd9519a2ba536301b3079ba98207e66f758140c8c7ea29849d281176b64e54cbdd1cd1875c284ab6b54260a9c562432080ddd53a0cac3325b0eeccdee7378b85878105195ce77661705d28c175d580e302375a2ff19ee20671351829dc6a1686d695dadb22a3e72ceb77851c70a886a2d85e170470e9edc3e0ba5182e36b9ef0311589660b4180b717640add29e1b50351756144c3631030b51f10c6d48312531b80293cca340888b6f40a23ea4989a8a5405417a834aa7987309c5e9470f83a590b1bab48aadfd41e9b512012fd06c647e0f3647e916c010d02c0eb4004ec4d09b03588805c4dde951c04404f750d03ea439d422d147d4ce155808251c2aa043ed4d72f1f52535e8200684ff730a07e9480f84a69aa083a936d11563734969bf818b95251aa2a101e562afcadd2fa601020f21f05b13f2544bec82784c75bc4f8247a1e1d1b64693ed885d3eea08d6c0025ca0e324d53feb655e6988b45fd3108a87683b46da05fb5475e1982c3065485284825b31f5b85c10da2ae3d4270703edc54519fe43d40e1997f4180b70334f4a451c26b0f72d4f094277b325e10405d074a6783a9db5ee78be8b7c1b14ed00cebf15af1a520005bdd2c0c6c88bfad619103a14a03969e558246eba1f46dafbc2831437c3ac8058d975a84a10da3f6b699a2c7a8417c3cbc505778e1b63aab0c57617d2f08e0be00e0865382eb08a269505bf8f9280e056b047d7f92dde55b2dc404bb1e301978d948ead6b3020bda7496f89a974100b85b14725bb57008770e934d7eb08b3beaf8b09c4eccaed3d688abf532ff8d18a6c3e7bb18a7793a1c66939e74fb467adc742e3de13ecf74d7fd55e9490e7e484fa8d499eeb1c122ddc500a0745749607ac26599745719787a52e949baab2a76baab026c7a426333d25d0d4848775db3d5e98c7741a74775f8a4c7ac0ea66b9bf0d3b58db2e9487f5b7a8ceeca74a4053c3d4e2b527a527d33e9098cdf0a8f21d58ffdcce2634847fd7f3ebc336b9875693487c0b7d8e03f7679620c7579827b913d9a97a7f1b15764196fe5ea0e1dfa47e910b9818c2a37e8b4691351b2e8988881c9942e7a833104634dc2991d489cf301ce7126e1cc0924ce4a8033c3249cb981c47921c09949dd92b94aa6899158ed9c933f4686af2f15be4f58185f961fdeb816f547a8fe2a3681e5d1e16c4f85f3368073bc4938730389f3228033db249c130389f30f00678e4938f30289f3558033d7249ce303897321c039c1249c3981c4b905e0cc330967762071ae01382752e2ec217196c8460ee72a0fb6eaf60a02e3e940b6a002c940817d922920b30208f29fc0230fa41ed8a7da1e136d07e6cfd78a678357a59c0ac01e44097610830dc389778c0419ee2000f760eaf16db19a3fa038d294b41515ca8e20259d4c3f659b17d37d6ff820f3c35b811f1ee207bc49fec3fb980ade7d00dea194f07ac5c9c32323316923075934fe2b8079984930270610e6df00cc2926c1cc0d20ccef00cca926c19c1040987f0630a79904333b80303f0730a79b0493b00b8d0ce6ef01cc1926c124ac9593c1fc0cc09c6912cc20d6707e0760ce3209e6a400c2fc3b8039db2498070610e60f00e61c4a98a325cc4aeba14a71d46fa5ee66a324d2f6ce6e54c8ab4173473e25f2b602f93a3166d21ec3b956c00b5e23477be0a5739bb2b12d72495242efdb4e857227f0bec32951f6774478bb45dd6e77cfb7a2f7fed51b741ac03a8f12ebc8a874b458089bc5d4f669d3acff3cd26f12adec0d2cd6a2cfa43e4c9669cd04b0e7fb911c2456020822cafe20655d408972a026654d74bb1952b4bba8d04e045ebad0cf9496efeb185e9c3b56064698d2926560e701ac8ba823ff5431a1aa5a4e23e18b88ab8dd2f9841335b9c69eb214bc62557310f98ff0633dd1f1d6ff2af9f1625116e0577de841224b3f8f03080bfc403871bf43f810405848bfd0b93d4c411d9dfb3a077538c20300629149b33148c77092e11c0e3299c526e1241d744886b300e05c62124ed221b1643877009c4736657348e4606dc20eb82e5428cf002897fa33ed2acbff013464d3aede00d9ce327346c105b1253e0378e2517ea084c360e759f599d972027db9f5d2163f0a4364283701af5c4edf4304dbd657b10d02dd34310d7f831435cb3a965922a2d6530a4014ef0060aef0a385a85e2cf351d7d817a4d62850475dfb2669e64386761f40bbd28f8d50b0d45359ba8a72dcc7d01011c67340ca79b41f1dc289ce1022cc86c8e6071d0c7c7295493009872a90c19c0460ae360926e1c0433298d90066b149300987c492c14c0730d798049370b03619cc890066894930833841750280596a124cc2ce3232984300cc3293601276e892c1ec0d60969b0493b0d04e06732480b9d6249884154932984301cc759430d358e450831a161e935927d610b4c9e0cdc484119fac91b83fa86056f881177aaabb01b184c527b201b1f300def54d39a0dbd93b44e8ab647d43234052b0c1249884c5273298990066a51fbd43bc4d7e1318bae5cbc80e327c3d01be2aeacdc515bee801b15c5878358f200f95790900dde8d706d0fbd768a36301c26a3f10e6ed77080f04086bcc2e0e11361a9315876a4171e8187f86241ce8ff90844154f8fe0bbcb3d6afe184e17e74d8154cde834ed633b90340ac3367864510d74b3808a0acf7ab10146f2b8a200f75cd03401b4c5a107242201be26e04383799849374110a329c67029c9b4dc2393190387f03706e3109675e20713e05706e350927e90e2d6438e7009cdb4cc249baa50819ce6a8073bb49384937bc21c3b91ce0dc415df24c6c4bb802a11adf948eb0e4399b0ae87800f4583fd6da6c821d5ac8a6436f00f08ea384d78f253ad33c723234e16099cfa9a0ae036d45c79b0895b0c64e06752d807a82895009071c92412d0550779a0895308727837a10807aa289500907d390411d0fa09e642254c29e7432a86301d4934d844a38d6830cea4800f5144aa8392cba953e7272161ffaa5b68fb50d89dc8c3672f7eaf0aebf45605530d24018471508dce154209c6ace14d820ae209f0efc79973f3d9f4db0150419beaf8027eea6c43786c51a05eaae8f7e2aab15c0b7d246ff852122e80380cf9e66eef458c271a1649dd06f037f3edd9c857e4957b4214b1c3603986798043388bb739c0260ee3109661077e7a80530cf34096610479bd401986799043388bb73ac0530cf3609661077e75807609e6312cc202edb3b1fc03cd7249841dc9d630180799e493083b83bc7a900e6f926c10ce29a60bb00ccbd668fb40fe24e1c9d41ddfd024abc1d245e7b79357b37045b7605e59a60747b5f03bfbcd0ef55e3136ff608e29a6059c0272ff26bb8f87cd1eab9c1d14a3fc37aad567c31c8c3c5fb005fbd981268c79891bc8e0e5d5b2a74cd00ba4b9a721648f0d70ee906505eea47d706df4867ff9949bc08e0bbcc8c6d4aec1ecf1ae1b1765f26a96792ed817d02c870f699b43637696592cc537b009c979b84333b90380f0638af3009674e207196019c579a8493745f57329ce7029c5751e21ccaa2e776ce645b181fbdd4c0d4e8fa85d6eba58cd7ca0b04587b97a24a7f0af064ab2f750579ffd526cd0a9910c8953f6f0238af3109676e20719e05705e6b12ce8981c4f95b80f33a9370e60512e73300e7f526e1241daa4086331fe0bcc1249c3981c4790cc079a34938b303897305c079935f4dc785a254d960499ecaf8be984be4accf5231ebb32cd04dc72b01d09bcd19da1dc4d11f7d404de9163fba85d54a8af63ce435a2aaa91e0afa026cc5c02f6ff5631e72136c5946066f3280779bb903b6093320b2becb1b00dadbfdf0cb89fefb2519bc7b01bc3bfc80d7048bfe9145ead701bc3be9b397759a65d50a2d2625ac442a542e16b9e04d6fc12bf6b40330ef3277740761833159241f038a41779bb3ae621007678f025e7a8f195dc24522fddc28a23f1757458b966ca99662e0a5f79ad44b443a8a932c3dcd0538ef330967762071ae0038ef3709674e20719e0a703ee047cd3cb1468eec408e7e5f0f603e6812cc208e7eaf02301f32096610e7ffae01301f36096610e7ff9600988f98043388f37f8f02301f35096610e7ff2e07301f33096610ab984b01ccc74d8219c41ea06500e61326c10ce2fcdf2500e69326c10ce2fcdf2301cca74caa5092f602915528fb019c4f9b8493b47844867321c0f98c493849c71c91e1ac01389ff563ffb7096c7fdbffed521646f89c1fa3dee3b7bc474fc682ebca11664aa34344904f047efa7c10201316a3c820d703c82f040132612d8a0cf2e900f28b4d398aceb7f1c76453612e00285fa244398045aef05926e71a856718ed5f3bbc1702b02ffbb1d08a02ab762be662c2634962d5b182585d9d0af0bed294c31e7c5bf37b3b15caef41e1eb554a948305ca7ceba102018c2f63b149be1ef6d6557233c96962a5ef0df2fe2ceb586689255cdb86ac82d006007ecd9f45a827ec4723f1be04f85e3767cc7c1053cd5620d57c831265f7382895a5a435a9a154e5cfed00e39b662fa246d8e344b688da6c80f72d73c7d3130e80201b2dfa179096beed470280159bc20900613a4a9600fc03607c877a99bf45b29554cd39ca179ec9a37df08a429d01b877fdf0bfac461f2c154d23f6b216415fbcea4180f13deace3a0e6c86f87093eec139970a660e80f9be1fe5cbac18b5f460b7e3bf0c507ee0475748ee7ed715520e10feca8f0639ee8d33451edd20949867bd522222f942b6593419f32d787801a9860579ea752e00fba11fb5f0eca698e43a880adfff00be5f9b33cf2888633d670394bff1635e66aeff7e48d7db0ee07d64d20a1f93289b32c856f8f813c0f9b14938270412e79500e76f4dc249ba1a2219ced300ce4f4cc2393190383f00383f3509675e2071de0f707e66124ed2758ec970ce00387f67124ed28579c97056019c9f9b849374483719ce6500e7effda83ee6b0fd69b9fd6900df17268d3926dd2e940ce768d045f607937092cebe24c35904707e6912ce9c40e23c0ee0fc8a12676b21a0cc4a27edae092e397843055b82b4f16b4a5c235974d35a648fb73d56b84afccd1b851b84c899023037ab4850f36108cc342ad81900f637fe0cc6cade8f9a813f06f8be3567e8356189922cdaef06a9e41ffde82ce3dd11b319efbde17d3c6b4577596da0fb7476026ffcce9ca181415c67661cf0c63f51a2ecc1f890169e9d943235f6171b5840b8c51d59b46e0d7cf2cfe68e5e0be25a871703b47f316727e09c402edff30280f9bd493083d8a5fb1e80f95793600671f99ee700ccbf99043388cbf73c0f60fedd2498415cbee76900f30793600671f99e6701cc7f98043388337b1e0730ff6912cc202edff30480f92f936006b162f93e80f9a3493083b880e9af01cc7f9b31818f301f279bbf733668ecf88912e3700d463713f87c5a0e652115e84100f4cf66cf9424acc393cd94cc07787fa16eb48bdf1a9f27461a13fa690b2a90c70390ffa14e5779f6043d70ae75850be03380e0f5e0f96303c89efe4bbf9444a43fda9d18bc7d73a38594f75cd6c41c8744e8a764a3900e0080ff67ce2c8c20b6328d0328395763c6c74da02c999279e6dd0067c8249cb981c47939c0d9cc249c130389f35b80f3009370e60512e73b006773937092aeca4186f34880b3854938491b49c8709e0870b6340927e9a6396438cb00ce569438f9895aec247883133a014cad4df2ba49944d74645ef76f80b38d4938270412e7f500675b9370e60612e71e80b39d4938270612e78700677b9370e60512e76300670793708e0f24ce990067479370920ea221c3b911e0ec64124ed22dc5c8701e057076a6c4d99f452e34ce393488fa81737971e72c36c29676b2a9059d408f50174aac231c58d7b0e8e1da890fec26444d5673da0a5077a544ad26c24c62fbdbaa718f8244a01b254235e940796b9df03f9e04cc92f0cab45dc3c1ddc86101f0ceee9468ddcd310ae258e48100650f3fd3d40ad987c9b3a312e1a1faad72664b01be6dea40364f732540ddd38f0421b9594884836ec8b2ab37415adb8b12ad5abe6fbc2359f021a32283770880d79b125e9a26357537208c704c3dd9009c1920daf7f1a36e05d732d645f16017ab5e01deda9712e730478655c9e004edfd3db39a00bcb61f25e6f09a0c93fc4f53c9b6c3fb1978697f3f4aa8890d0a0be2f8fac301ca017e644f2ac2f374b3d4312f7eff6b54690e22fa403fb227ac2e15bd0a1861d31f19ce9e00e720937092b6a492e13c0ce04c330927693b3f19ce0a8073b0493849bb9cc9709e0f700e31a9db6402e58a0d64dd2677809c7ea84938730389f3128073984938270612e7d700e7709370e60512e76b00e708937092ae3e4b86f3088073a4493849170f22c3b915e04c370927e962be64384b00ce51feb42635410b3d5963dc4700df683fba37f887cb85272ad91be523c16b3f0a01786328e12536215b6532c1eb754f03b59db1a6800ce2f0859600e43853401276ad91811c064066980292b021830ce4600032d3149084c369c8402e0220b34c0149b8140019c8b900e47853401216bdc9406e0220b34d014938c6880ce4060032c71490841dba64204f0120734d0149b88c1f19c8cd00e4047386c1067115d9ae00651e254a772b22924e6ca5ab710398134d8219c45564ffc5c2302799043388abc8fe08601e48dd9016dea2295f02adb05ee63b69f0d7c8e0918d13ee08e01d44096f00738e5fd78fb62c120dba1c6db9105645db1eb48b0a6c25007b3025d8a1cc39a4d51e251c9e27c405f276f2d8913f88e9e87490294df6734ea60d948f1be609c10c6d1934b8ab743600ac879833d0358899d370900c1ceac7fc20589c4f3c8525444b96c2ae025e7a989f91bfc25262090bef180c85fb3649603b15d66301d6297ef44b4ef0bf53972cbadf0ca2fb544a787c2fd345cceed22d6ebc1da4feef2e00d5343fea408935748c0fe4e60f7340a49d6e12cc404e4e01306798043388dbdf1d0a60ce34096610b7bf9b0260ce3209661017269f0c60ce36096610979c3804c09c6312cc20b6b54f0230f34d8219c4edef0e0430e79a0433880d6ed900e6e126c10c62db500e8039cfa4897ba45910d9c4bd2100e77c9370660712e71100e702937092ee0f4c86730bc0b9d08fd9127c00cc26d04ae9cb0a3164f8a6b030be454d392c068e2f222d10918d30da033cf1084a947c0fb645d689bd782917c557855b673d5e2d3a26b6897ef30a71163c8f6c013cb28012e320165e02caee715c65a95b67a9532278f0010953195fce84f7f2f0c6609e56963235e7a73e80700b00dc427fe6964df4bf1b826c54c74f005f91b9ab1212a69e6468af02681753a79e89ed0c4c58911c1a22c2b80d64424bcc5e9f90b06d936c7dc25900ef91e62600845d6d6409c0af4002b09412ed6081768ef0cf02c6871494c9dcbe54885243ba368800e07e5c62fd6d8b9f651dcb2cb1a501ccfbdb02c0cbfc4861b1d147d385c712aff63e962a85fd05603caa296764f8b4b7fa4b5420f782b474b91f6d9eb0a0af6a4de17a54b00bf63d8057aef063bc3184193f2d0d2ed8e900ec4a4ab06a73871cb6bf6dee70214078b439c35e8338ea631640b98a12e51017280bad6f7221f56ca1f5976a79aaa3cd9632a8b2a5ff00c4ab2911f76191c35f6b44b3ddba983e1bc4becd7290cf1753021de300bac97ab0445bf574575125844e56511d0aa0af31694dae499438c9d6e4fa2348144a4cc2493a4f930ce7150067a94938730389f32480b3cc249c130389f35d80b3dc249c7981c4790fc0b9d6249ca443c5c8701e0670ae3309674e207156009c1526e1cc0e24cea500e77a3f9a4bb2c46ffbc87bef0b99dd2615dc16a75500e1064a84e39973f2756d4467c70c51212d66b3c43031bea5d366666fe8b47fefe77a34a83b559a33262a88ab77ee0228abcc5975298873944601941bfd4a59ede63f2e688b4c557d6888fe9c0ae1c32065adf6a30794232c6b5cd946dd0e7a7bfe9300638dbf8320f6f79d047b01b4c7983bbe2488b9fa05006dad1fe967f67ed791370c20acf367f468138cb5276b931f08f0d5fb832fd75128f201dfc754f83e05f81acc59dc2f3b901dc9d700989b4c8219c4a2f9b500e66693600671f980f301cc2d26c10ce2f2015703985b4d8219c4e503ce0530b799043388cb079c07606e3709661087d8ec06307798043388cb079c03601e6b12cc202ea0761d80799c493083b880daed00e6f1664fee228cf864f5f35ea085fd043f9a87c737fa6ba968d5b407ce067d4981478097ee34a9477d02650a4ad6a37e27c079a24938730389f33280f32493704e0c24ce6f00ce934dc29917489c6f019ca7988493744e3119ce2500e7a926e1cc0924ce1300ce5d26e124ad1b91e12c05387753e2542bc267fbdf1b4456175a0fe09de6474f39f444fd3084e996902aebabd5e26ca3a88212d683c83ada2e02f5a0d3fd9864c887c9cc607cf9aa1aab325926eb43f6d4c23221b05808800b5bd5b1208ff11c0cbcf70c931601241ddb4186b33bf0d83d26e1246d4e26c39907709e69124ed22906643857039c6799849374b61b19ce3301ceb34d2a854ea0ec22262b85de02b2a2734cc2991b489c7b01ce734dc239319038bf0038cf3309675e2071be08709e6f124ed2a5d1c970ce0338f79a8493742d6f329cf500e70526e1241dfc4586f36880f3424a9ca39873251b5e972fb578f09918cacef0f417ac5fdea715ed1e0c11013f19944c2ff26369406cb04364ca4a06926cda601af0dc8b4d0119c4f997dd01c84b4c0119c4c5fd8f07202f350524e1205a32906300c8cb4c014998bb93816c06329b7da680249c704006f20ce0919753821ce12826ad61d1732bddccc224434d3607f32ce0b35750a2ce72a06e4041e2b38aa3bbf37c2a9f8ea62a9fd601fc57fa311837d18668c2de7bb266e82e00e65526c1241cd94c06b31b8079b5493083d841720080798d493009b32cbaeda800cc6b4d824958f82783d91ac0bcce249884555232986d00cceb4d82495809a0db1c05c0bcc1249841dc93b31d8079a3493009576a2083d91ec0bcc92498842b3590c1ec0060de4c0913df266596f5bb82d95b49165902b8e0e06f93b29885c1de4209b6bf003bcf7aa0448c0a85930f9b6ccf2eb22989ad00d65bcd593f3188eb8af40551ff3673975623ccefc99af5ee025e7abbd9f392096b4d6489c034e0b97750e2ed0632ad4d2253e223efed7d8f7d9a95bc9d0ae26ae0a377fa31b604e6fc5876459edf93f9e40080f32ebfa7dfecdfcb4f8f00d1fd6e3ff27cac632f32cf0fe22243a38197dee347713f993c9fb0bd9ecc47cf0660ef35156c1077413e1d80bdcf54b041dc5ffe5000f67e53c112964ec9c06601b00f980a36888325c602b00f9a0a368805acbe00ec43a682256c5d25037b3200fbb0a96009fb00c8c06e03601f31156c105bae8a00d8474d054bd8da4a06b610807dcc8ce5398a44db15afe8960b7155b425d95d54683782f681c729d1aa6d0426b026d88581cc33b703cf7cc29ce695202eee3a17a07cd2a4850d48572b23eb43cd0411fb299370922eaf45d7250d703e6d124ed2c5dfc8709e04703ed394e3509ccdd2415cb0fd1801b3550b87f05951c2a7337bef4d7b5333b5f455069bcdca44a1868328b1cee78952653d5b6da57dcbad7fee4260a5f54f773d24968e9bc9b6b01a7195cb2b15b2abacbb5cb33a96c5a7b53ccb1da29574887491f54db598d75bcf14b032f1f5adac90d94b7b2db47eab51300d0249ba5812799175ad81f1fe5bfe858d9626eb58adb03872e9aff4506bc1c9de59af5616f5d2a5ae6ab7bd7c99e9565836170b4d6aad679a8befd8f1313dd4019ca98ece7c511aaf135ab514f7b986e5e23e0fb250a88b0c25aee17c615db16595bd576a51a39ccc91d663a13ceb975dd2cf682ce367c8a92555f24c5d8f2f9387516c69cff18008e9636665cabc2b9e457684e0ef978ba13865426a7e5c4be3db877b6afb18a19299cec3627fb6ff791eee32d8859bf60ab5b3fe5a6c85bc2d9cef8e586bfdcd955a36b7196bf1ff0025561d75d9710300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/b97be6d130d617a4abf8503bd958ad12.asset.meta b/Assets/SerializedUdonPrograms/b97be6d130d617a4abf8503bd958ad12.asset.meta new file mode 100644 index 0000000..24d8f5f --- /dev/null +++ b/Assets/SerializedUdonPrograms/b97be6d130d617a4abf8503bd958ad12.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0e1bc996e3258df429a56ff62ccb6e9f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/b9f86c2b131382b49b78e104153e2bd3.asset b/Assets/SerializedUdonPrograms/b9f86c2b131382b49b78e104153e2bd3.asset new file mode 100644 index 0000000..c46712b --- /dev/null +++ b/Assets/SerializedUdonPrograms/b9f86c2b131382b49b78e104153e2bd3.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: b9f86c2b131382b49b78e104153e2bd3 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cc5f5f8e7dc7bef05cbfd5c254bb66c83c1bd811b966c0cb6b165155b58b6848ab1a9a6f7de7bef3d010209e984900009248490848490905042129210421208ff7db333ba777bf3f66e6ff54eb3feffe48fb5daf6e6cd77def437b36df285f3139becfc5a2fd68a8562aa58272a44add8edfcb5d039ee72feb967fafa1a51ef1cb73bbfcb9c7b93455e9a37e1677c6c90f37bb973d6201a9d379b44b973ac96f74b44a5f3f772e7dd4ae70cae5639ff2b9da762ed9c97d6894562b5582506c6faa711b15ebed4a0aec5205eb14eceef05629f73b7522a0581e4cb5b039d5f25ce9d06796f97a3b47e6ea3d82ca3b5cbb957eebc532f6a1c99dba4c44e8d5384fc43b88701ea38501d41c7ceeaefb6eaef4eea6ffc7c7b751c94e1f383d17b9dd1df40e8369ff787a8e327ceff0ece9f7bd039bcfba13a1feaca6bb3c347d670753c481d4728992764a07f4775cc4b135f3f192391ac4c987552c7d1ea384ae9bb37cbf0c7ba8c6237217970fc17d267340abb33ba0fc73121e2aed3f1534f3a7eeaa6639beb54fabda3ae8f53c7b83a8e57b29d67fadea5ae4d50c76169f49ae8be27668984cd3a61b6ad53e793d471b23a4e51c7ff285df7a1f3b0bae8349daa8eff56619c68b8ae9f87fb27a9f37c752cf0a4d734f5dcc9eabc30437d32b13fadd37f5518a7a0738763bbad3eb274ba7fe649f7cfd4bb97b91cdb3ded890fb63f93dc2225efd42ce2f1b9271e9fbbbab48f7b9e4ba783963f5d1dffa7e49e86ce41ee5501e3d64ebdf7843a9f21d2976d0332b837cb95d349b39eed86d3a19f7bbdc31c916ccb33d3e8a9d3f60b4fda7ea1e4d628b93afe07bbe731cd390fc981f7f727cb853fb15c790e727519a16d3c9d9e87a8e361ea385f1de789e67c3ce63575ed50759cabc28c89a432409ec3ff398977075c16909b5f1a2df0a4f530156e9b3432f5fb0bd5b17386cfeb671685d079b13a76c930cc2eeab82444985d5d5be8f491c71666a791b9d4e5dba911e9e0c8e9accbcd65eab85c1d0f57fcdb7bec40b77ffcec209d2e47285d044a0347972ebdd4f90a755c99ac8bd3964cd6e9f496d329d656c93c039dc3b19dba7e263a075dd7b8e174794ec95cad8e6b3c3a1fc9a7b3d37897ef75ef866c2393f7fcecabc48d5fd7025776d752755d1fb56e8b137a775a84ded57a64921fd62b161d3d8c3b2a1d34dba33ccf9d85cee1d821119efcdb79b79bb6ad21e83abc7b363a87fbeb32d4f568916ab320079537f26f085b95ffdd747a1e2352f39ee95d38a23a52fe0df2de54ef6d14a9f5987e0ee2760e3a87fb1b328cdb26837e4eb8dde7f9bcbb5924973f0b13f6d0f11575ed58a54f17919cb774393832f14eac465ddbe29ef7d4ba6c55ef209b8aa932b087ae4fcbd4b15298ebd972c441e547a73fd91cf6b037d4b56d3e6155a867aa3cf12e49c8e93a48e9aecbb1ed2239cf789f856bbabed3f1af55c7dd8967c7f553d776aae32ea55b3791dc4e3f0e5d87637775ff5c740ecf552764f77f415dd37d02adab293d8ff7c4dd5406f8d959bdfbeca04deabcc165dbf3598fdcadc2df6e1b5d39f176eabcc995d3ab5d40397b941cdd06daeb9ef7d2fae8feb1e6abfa2ab11e22a92c17aa8f12eb89eca607ba06cf9ee7e19b4e373f8ea7b87a36b7ef755f40b7bfe721d9fd951ebd1269d5dce63b19dd83f3b928be387e7ebaec57c7ee69e233003d07c7d343c4dfef9e2ed7751dd15b24f579e4b963277d86f9c83a5b18edb4afee279fe3deefadc723ce45718230fa245837db924aff585f146fdda6ea87aee93a108d47497970ef7c4ffa9cefb97f019261ba7f21d2c174ff2275fd0257f7beda662ff6c4659f47d77e22a99c1197a4c635d6cf13f68501d2f252f5ee004f5a0e50e9f29e8faccbcc69d9ef53757eb9272daff0a4e540435a5ea9eee131c0f1eada6043fa0e411cf478e355e8199c16fafed548aee9fe354807d3fd6b93d3b2bf6ebf5d47a425d61fa7e5f5a9718d0df6847d51066979a33adea08ea676af1e9f9ba0e45e9c81dc9bd5b1da47ee108fdc4b32907bab3adee223f73642df6cc2d3b6aec660624345b2adc3b963b7035ef39175bb30dafa403d6e708748b6f53b45b2adeb31336c1f6a9c2f363c91fe428d97c40e12a9b63e02d9892e63ef46cf605bd5f7ef41724df7ef453a98eedf27926c7dd03c75fd7e61b675ac3fb6f50752e31a3bc813b62e13fdd2f2410f67cd374f24f773f2dcf419e46dff3408ffbaf12157fe04dd867c58c91ba9e45f8acee138ca13ee2837dcc16afc6b886e5f7653d727bbd707eb39864784b1bd35b8d4f3dca322b93df5b887ff973cb6a2c7d5715c1e43f770dcc68ae436c997d5f57128adc6a26ba636573aae7adcf1490fbfd14ade65e81c9efb0ad25f97af4fa9e3fec4bdde7a6c45a76f37a4c7d3665b91baa2340bdc46d2717e264d9c839449ba2e3a059d3b7630d46f7cf6ebea19bf3ae29beaf82d75fc86921f17c9fd17ddaffbb63a9fe0b9afe37c4b82fd803ca487960def5c9e41fcbfab8e7a1ce23b2a9c8922794c6ca2ba6faa23b26dc7667baf5ce93429d97ee4b9930ec335436d8bdbd2d8c7f7d4f1797554fd6039f18c19e8b6b1df7856bab07ce2159b2a92c710f45cc5f7d5f914755fb5df62059ee7f5bc91eaefc6f23dcf177a9ed77c7ea0cea7253f2f7e88e4c0f98b89b8c5f43cda4be8da3475ede5049f110fa97b45c9618b1f89e4fe9deec34d57cf5d89dec30cf47dd5b68ccdf0c4a9589d5f8dcee138d323778687d54c8fdc591e7d7fac8e3f51c75713719cf42c7a07f114af24cbf4b5e917958cd9ea9d6bd0b963d323fcdafffadd83d5f11025e35a74eec8c8cb73f5cd9b4ecb8ae9f6c9d51e99ba3d71a8ba7f1d3a07d97e6d8697d4b38779e276987af7b90cded57336f33c719ba7647ce6c66d642f1f593f55475d77eb34d4360bf21618d275014a4f389faf74b81e9d3b3a8cbc4f3df73361b6edb99ef76f487e7f94ae9b5f57c79f7b745b2892c7c27ea18ebfa46d52fccaa3fba2c433cdfabde1d14f8f7369bd17ab706f447ae8eb705c2292eb2835f62bd4986e6ca9e7fe5275df34d7ee9747fa284eefb9ef8cd66dba5fab63267d2add37bf2983f0747f7e9948ae6796b97a8cae537a9c45cb8a1d9e1c5eec70a4079c2f57f76ff6847904b2cddeeaf81bcf3be77beebf25127d047cfdb7eabd95eafe2de81c8e2b0c61bd9d26acdf1161fd5ebdb7da13969a3b8aad4a8425e3a8c3d7f7e01ddd2f35a5cd3cf5ec1a4f9aac71d3646c3b374dc6eaba5af70be70aff7af98f1ef9472af9b7a173b86f1ab37e571d3f48969154bee8f1ecb522358feab1e7f713f726ebbec21fd07b70aeeb81b922fdf8a5e9da6e25afc4c34fcd898d5ba4e2a6c7ea35bf5d69f8a9e762a5e8391d169e7ffa93bab61ed9c13a740d8e4729dd6e47e78e6ee35ff0c8dda09ebb03850dc7a3d5f53bd139bca7fa34b16344b2af9596b709e9748c0a53cfd17ce80963a34894690eaff1bafe7b07ddef8cf4d4d7b40cdc27df8d8e70fd2e9506fb93c34c9b06a6f267b3486e1fa939add8b19ef43fd68d6f5ca57f5ca7bf6ed736f987ade58a3fabf32d22b9edb945ddff0b9207f7efa6651ac3d9ea89cfd6e470a5fc746daebfaae3c3c179cafe301c956f426c9b0aef1e740ec73224fb6fea5a39b2893275ac50efabf19f661bad44cf56a267e1582592fba8556eda4ddaef91addfdbae9ebf0f9d43587f57e73bd4fdfbd5759d47ab910e3bd035381ea7de79009d3b3a4c3ccbb59f491b88b0768ae47a61a727cc1a75ff41740e71eb96fc7c6c977aee2174ae1963390f7be478f48aed4671d4f9f0297fbbd05c9bc70c2a555827ba719fa0cba93f6526cf78ed5575fc870aa3d6c34dcfa1be9285ecf7958c3a91dc1eaf73194dd6631dbaec7f2f4d184a9ef8581dffa9e41dafe43f82cee1582f926c5e9e63dbd7e3427bd1b9a3d794591e398d1e39baacd6e9a2cb98473def35a178c1fdc7dc749bb2c2139f74f14ebad63e26fd6696894a5126ea443e3875c9d19a4c5dd7f59be99dd6417407f8053fe365b08d629ff36aa5c9737c9df44b6f1445a2d0e8393e58cea5ebd017cadf65ce13d552e8e3b194209e49090294ab71fe5522b7f706e7fa52e9350f8eefd5ce9da962857384b7b68a6962a3f32f59ca7a27d81aa762a814a5ceef3a296faba376ea93e9a2042ef2de77d63a325d0ffe5dce150db4ce39af911a96c8df7ba4a69552fbe5ceb546b99e60b7d82e1638c7bd32b4d4b8d73b7f9bc22c55c8cc3a9a1df9a9ebee72019d4c8b9cd880f6f9d216ff2f455a2345007d07c81ff0d32e5fce1c5c909212ffc7d02d6460c061b992314d228b255d2b14f9d25f706d0ac1e0714c8da1d9be5ddec562ba6f5ccc6420b987ca182452b8e4f94f5e3ff3fd615fb44f8e5a91c897d30cc3d244cd0f2cc88b4b6f80205168dfbe5d0128eac51f33e197ae862539c4ef3e572d9f0b9e001d64e5979c007208b6d429d5d6a0ca739d54be46aae68dcc5a594282c00aa508d837ac1e83f2b24aded965786a8d23afcc510ba29e92da05a05a479960a9d571ba485349d6c694647204afb455720cb510cd3fd13a35c7229168f9b28d35c8c7b4a9b064e3ab8d6a81e9ccf7ec93ab77975efec13bedcde9d245a64b36a15129d3d694325d729d99d2d71e7ee9d2b5395e8974811f33c36e846da7d38122d8ce44b06bae6d1beed54a2990fb833304b7bf49de02c90cb0076184e955a010b637202c00843d0d5a89f69d3d5a814284e40ea6c4e9d63a557576c60d7342033d08da93c6dddbb7a60d6ada1d4df4a483e856567aba0759e274158e70ee9539cf57cae6285cc7d5d77c1942a2d799fc863f59989199e2256ba4da57521d83fac36135a3887732102f007bed67300359c67933436f3a3374a6b259ffb0d9ac0b25794058c95d29c903c34aee46491e1456727753b691fee69b72926d12032ffaaf05cebb3b9cc8ec91bde926e77dd3408d7f76199c71761922b34b9e300d1f05d388ca263d4c690717879a94f426dd103ae97a5282878514dc8bb2b6e161adad37a5f2412155ee43a93c22acca7d4d1944a2cf6d0fceedc8809ce0f53298f7888c1b9d2305d5a1f2d781ca00fd4c04a58d55b3125ce75c73c75617cbbbd57240ced4ed84d8504f6b862be5be214d520f7fdaa3322e7c464bd2e0e1c5a72b952afd4d3906ea19683a84adbd07988443c53b56a4767fbe707e528477a3850fa4341f67d0fcad956d02693e882a48c6872d48065392e361250f31653059d49ece9ac1329d70592af708aa14ab9d42e238e18e94eb706ba5e982467ac41dc680aaa41670bd5c1536fe61f967c809cd7cd05888ac31168bcca78df86301aebf6d64c13049160c537d0a069336c18b0673b13459866e171baa181b4a9534530c25cd1ba662cca7a4194665d9a961b3ec709364c8b2f9065b2d005b059fe32eb2059412ce643a9c834c45836cd29cd8aa4583dbc7077955720ed495b74ac00e5e274853dde918f01e6538a5ce33f54e1895cac8c31406302532dc3b7824844f7ba8506687c332c80e9cb1a232c0089325c160083874a70cdb43f5b6d6e9fb2f145b64363c5e5e064a6eea56cb47abc589ce514f67a6d85b47dadef24cda401f135ca1d336f0fbd2824752826784143c8acae3c561f3f8689364286dc0053e6c0b6b0ca5f6acb06a8fa54ad4d98612f5b358b012751c25fc6083f067db04133e9eca0a876462233e561da704cf31e53100b850b6daf39cffb5ce1bd0572a93b93f4f568689d2204f4e74d5cb0a7b327abed679c2751f08a2e704939e60148786358a8954ba1d6648b78f03a6db244af85c83f0656d83099f4ca5dd3c53da41ed00f506344b76a8ba2db934cc938e1c79d277a7498e8f56c8946b90e99a274e726aea539c63a3f3749eac076ae4bd3cb9a165bd2c6b83a4e9144afff926fdbb20fdd7200d838438952ab71618caad58c0722bdf24bcb7507b6e991a3ee0281bbce15340615b6cc2365cded82b5bae4df2f912690095cd6de58a16aa20a719f4ca972324bb456b36c8a0b7009e4e0df2ef441305c24ecca1876978c162156fc34bff981b5eb07c252e17cfe5427baa81554815aacb0c856a2c48a15a44e585e5545e383cabbc30dd647372fca7ae556d8ece516ba56cc879e11bfcb0f8a5adb7f72f07a8a66760592da5e324b9c15883dcb0d825d70085294c736d433b13bbf0659630e78915324fe452732a5fcca06aed95865afb89f6c16aed6293c9ca81bffa5635d94552422ecc7695c96ce5e864710689df927a8e900eb10db250ad5085aa5b748f903b9ad5cb6ab3d2b90e052fbe3f49ee1206eda52592f72e49be568e696f974d50b391af96469eeb7852863e93aa00d6182a8040adea5954163ad290853e0b988566536aaf0dabf6c194da2506b54fee104ced4328e1a506e12b3a06133ec7241c0a66581917a6877828251896daa53437a1f3aefb09e59e9ee236d957d0fdbf0a79659ff3bbc6b9562e45e449e7e666a7c8005a1e46b13dcac0b65740b67329041b42b29d67120ce6797426827d268de79b0443fbeb1841b4bf606161f0f6d7020afb2603f6db02625f68120ed97c73d86cbe88927c6c58c98b29c95bc24a5e4249de1a56f2522a11cb0c8908ee4b41127119257c9b41786940e1cb4dc221bf959bcaa6b1028616128d54b7fb9418d7281355524abdf3f71e55e756248d8fc09847b5ea3407c9e787537a5698f474d75281871ab429cae4181a84b85aec0c14ea1114fa4a03fa8b02a25f4109af32087f2fa0f09514afed265e83d2a46b85746c4a5c9de65c0dc27115a5cd0e9336709a48b720e1aca690561b90ded42518d23554248e3345026a0417dfc10eb25572c0af4cad03db23abf1e0188fa434d869d2004ab615cd0d833559360bd652486b0c485f0b88b4842a9177852d914b29b5779b0acdaec1d45e47a95d1b56edf526c9d0eaa81344ab0396d3066f751c4585534f85d39055381b28528d61491d4d2570932181e7750b96c0c750c2f718849f1c50f8464af80906e1cf0514be8912bed7207c58f760c23753c2f719845704147e2c25fc4483f0eb020adf42093fc920fcbe80c2b752467e7258232fa3d43ec5a076bf1ec1d4de46a97d6a58b5cb0d92f3a58b5b2edd62bdde4fc1dc62618bf3cc1c35f70bb34b6cbaf0a921a50a53ba400d7dba49a500557925654d6718ace99d8099a08a127ea641f8a680a6ba9d127e9641f8790185efa0849f6d10deab6730e1d554629e1332318fa304c37e46296dc1c9d23a6b651ecb939f388425cebbd51715619b894a39715da65cc2f580939eb88635f379ca7aeb954dd738d63ed5b91a44eb9d94d6e799b486995718c44db49bddaea4db0d31f915e689f1aad53d3e905e35940d9c6fb08127021ad82e2ad21784b481dd26c1e03c7f61268247d3826b4d82a1797891209a87b0db5f17293148f3b0ce140e60bfc4807d7ac0ac773c25fc5283f00d0185d753c22f33083f2ba0f0069370a899612fe150357323a5f61506b55f0aa87613a5f69561d5de43a97d9541ed7ebd82a97d02953daf3695494030937e7d9e5c94d124cb582825d7087741b1ebee53e65cad908e403be4f91a59aac2e0d8365986b9bb276c91fdf7ed723aacdeb9aa1d87f60977a5599e6c51b87bc9e4c9a9820ae54eb6535e69904f55a270cc6566b52afb71291b74806e2f9544d71892684cc024da4725d1b5214bd01329c1d799d21e26e44b9d93baa4740912de4954c17a3d55b0c2f6b4c1fbdd2753f1bad1142f48a68dcd837daefd6e0e58b39f42a5ff4da6922560fa9f4a09bfd920bc5def60c24fa3d2e4162a4d6ecd2a4df69bc28142efb64c8cd867aaea744af0ed21059f4159d11d21b3dd9994e03b430a3ecb2418d2fe2e91ea9e080282b8279e4d59e1dd062b9cdc2798159e4309bfc7207c4540e1e752c2ef3508af0b28fc3c2affdc47e59ffbb3ca3fe75346f380a94c03b7c92dce3f18fba991a5b5ae63ab9dba0aeed4c9de0ed487412cec024a8b074d5af46dd6a2c0f90d352f4cafb80e2ed9eb7021a5c343261dfa281d8a9cffe572dc04ded9ebfcce5e838b280d1e3669d009a5052c8381965190d02ea6ccf71183f9cee91bcc7c2fa1ccf751ca7c1fcbca7c2fa58aa6c70d4553db8045d36514a12f19087d1a90d0e594f02f1b840fea174cf81594f0274c691b50f89554da3e49a5ed5359a5ed555476f88a5fd154d8c245d3d594164ffb174dd35ab068ba86d2e119bfa2697a0b164dd7521a7c355dd174940c2f98cbfe7594f97ecd60be9dfa0733dfeb4dc2c17c9fa5ccf7eb5999ef0d1432f8865198e6d88d149d6f1ae85c1590ce4d149d6f5174be9d159d9ba9487cc710890f0346e216937020fadd90e86fa5b47ecea0f5a201c1b4be8d42ff3d0afdf359a1bf9d8ac4f70d9178276024eea084bf6010de6e6030e17752c27f60101e0f28fc2e0aff0f29fc2f6685ff6eca38e17b4064b556d4c2d5da3d94162f9bb448546b852d58addd4be9f023930eba5a9bd182d5da7d94063f3669d05924aab5c572cea636e048d5fd9401bf6230e08f031af0039401bf4a19f04fb232e007a948fcd410899a41c122f11025fc3583f097020a7f984a6ef8ac55987ae1114aebd70d5acf191c4ceb4729e13f3708af0828fc310ac91ba61c007328fee3f4a923b9e1c6ecdd7153bb47e91fa712e81786046a0c98405fa284ffd220fcba80c2bf4c1519bfa28a8c37b32a329ea022f16b13a121c122f12425fc3706e11b020a7fca241c8681dfcaa4c8f01906fe8a4170bedc57aa75f6684bdd3ca865f768fbad8997d1f5e76d916e8fb6f0ba526e424f53b6f43b536e0b684bcf9884c3542e7c592ed454ee5729c9ef8495fc35aa7ef84326f6ef53683e6b109c2ff796aa6a15fb0fb3ad97bfe5ff3163cb7f575afe441fcb0fb7f9983925be4e19cf7b618de71b94f1bc1fd278be4965d30f0cd9f4a3a1c1b2e9b728ade1a357294d2258d53f5f76872ae5ca0ad39a9c3cd95cca0be83ef56d4a8f0f4d7ac0b620c1e47f8792ffe790a9f35d2a75fe62489d1dc382a5ce7394d67fa55207f2c80ed544d4e951d9bc6545b6ce6ddfa322f991219235c38345f2792a927f33451272a0f63370dbb3c99e8641a2f57d2ae4bf9b428616a1eb5593dfbc79797ef3be2eab45bdf4850cd6477e81d2e01f260d061a355821ff6a948be0dd567f764b9f7e40e9f2b14997a119ea92babb75109d7e68d2090cef9f06c3bbe8a06086f72215e14f4296092f5182ff1552f0cb94e04f430afe11c5f9df06ce0f05e4fc634af87f0cc2eb460413fe0a85e4bf2191bc6a120ca5cf679908f6e90cfdc42418faa19f37dff0f443ff27b2e987fe94c2fe8501fbb291c1b0bf4645427e99d11409a8b48347e2675424dac45223715ec048bc4e096f6b10fec4a860c27f4e1966bb98a13885e574eee7a9f44e2715b28dad0bf2b898202bbcddea77b2237d9ea86dae7e26cb1d1cea65adef16b90dd2d13e4f16cc8995cceea012acc9adf3b40c74383098e456b155cdc5799e2ccc2b02baf6bd41b1686f62015bffe0edd2dc5666a2824dac2a3e416a5823b0d3ec0e5905e5a59550e83c1d74f1c12f2883e960309876010de6975496ea4865a94e5965a95f5191e86c88443c6024dea452ba8b29a5c17bdf3c44ba510daec2e20de85db8bbecf8a569dcf7ee04e98eea0eab26ec3a3907d44acbd043a8c9f71aa55d351a72d136a9a1fe12424276adea9d06b1af5f5326d09532816e5999c06fa854ea6e4a25f81c054c0581039a1e97c87e1aea2d2aec1ee9c2868f9e363af6522bf717c8667bc4df5261f734853d0885edaf03dcad1741bb1f6f53daf4f22331ad4552e17754d8bd334b85b5b2d395dd2695bfa7c2ee132c15bc3a64970aef50daf435692384a13cf491fe074a7a3f9374b8e1d66df9596ceef047aa60ef6f28d8778c0d56b0bf4b091f6010fe5c40e1ef519406c6c235e2dfa7040f0a29f8030ac760038efb02e2f8934938ac7e1e9289d6fb69c11f5238869aac118c3d3f10953f53f28799e4c32e99a953a82b65fda9779049dc09364df9174a93e1264d40028ca107b582bf52a11c640ac5dd662e75595690103f3284982f3f24015bbbe46a617c269f8e36cf0f8c88413b33198c6cbe18e708f2623047d03f2566be5f5826c8fdcd9456703a3296fa05e8c3579edef1a6612fb749499af674d2fc9d328651266380ad2b758555e55c844add8d54754053ff0715ee68bfaa3c35dcddaa8b1724ec8f4de6383cd7e6b85036ceebb330c7310ea2b11e445309631c4b18a35fe89431fed3c44d7e4d654b0eb9e16f5897c86d1fa149bb5a7679dc265543164cc7c582eec43d5e921d9d12f36cf5a3a87f62ca29f21b59b190937fffa2244f082bf9534af2c4b092ff6d920cad9249b1f01f10f90f55284d0ed9f0fa2fc5634a581e9f5192a78695fc3925393face4ff51920bc24afe82923c2dace4c408b147726158c9319364b0a5a29046d78652797a5895db9a24cb0f0f65a2b2cf8787da512a178755b93d45796648ca1d2895678555b92325797658c99d28c9078795dc99927c4858c95d289b9b13d2e6ba522a1f1a56e56e94cd1d16d2e6ba5382e78614dc83123c2fa4e09e26c1301b3f3f13c1efd2827b9904cb0ff3b4407ba037651a0bc39a461f9364787e51263c7ce669fb52a0178704dd8f328d25214da33f25786948c103a8d45b1636f50652a9b73c64ea0da252eff090a93798827c4448c84328c12b420a1e4aa5decab0a9378c4abd5521536f38957aab43a6de4114e43521218fa0041f1952701e957a6bc3a6de4883e47cf9c14fd81a30f75ec92df1d161ffa189924cd262124d6c149516a561d362b449326cc4b72e13957d36e21b43d9e5fa90763996127c5448c1e3a8bcbf2164de1f4fa5ded161532f4eb13826248b0994e08d21054fa4046f0a29781205797358c89329958f0da9f2144af0969082a7521dadad213b5af994c66521352ea034de1652e36994c6e521352ea434ae08a9711125b832a4e0e9148aaa902866501a6f0fa97131d533dcd1023dc399148eea90386651388e0b89633655c4ed0c5bc41d4c81ae6901d087506aef0aabf61c4aeddd2da0f6a194dab561d53e8c925c1756f25c0ac8f12d00641ea5767d58b5e753921bc24a5e4065f2c690997c2125b829a4e04594e03d21052fa6049f1052f0124af0de9082975282f78514bc8cb2b713c3dadb729364707d382906df15cd20038ea4851f4e093fb905841f4175044f09d9115c61eaede739a7b1eda2357afbeb85dbc3879e79510bf7f34f8d19be6e0bd063d0b9e7d10850a25fc4b7674f8b81b7019f1694ebc34a9359814be1fe4ccc6a3f6d56ab4c66354ab4da20d2914e18eebe26f5f20978b7658deb74937141c68b4df549d696d0cb63627e767686b4336e85286b5b4d59db9921ad6d0d55639c15b6c638922a77cf0e59eeaea56acf7342d69e25148b73c3b228a5543e2fa4caeba8a1bdf3430eedada7045f1052f05114e40bc342de4041be2824e4a3a9cec7c52dd0f93886e27149581e1b291e9786e4b189cad99785ccd99ba90186cb430e301c4b41be222ce42d14e42b4342de4ab1b82a248b3253fb628c731a832f41d9b075d446d55a68b916c6d52666c66afe1a59cde78b20db4765a32f55d16f33253ba4ceb599243b684f082e370986d3eb62a9defafa2788b77e05554a5edf02a5642525fc8616105e45950e37862d1db69b24c3f33765929a3ed3f93b4c8261d5cacd9908cea3cda49a127c4b48c1c751906f0d0b7927d536be2d64dbb88652f9f6b02aefa232e31d2d9419779b02007bba3313266fd3826b29d87785845d47c1be3b2cece34d15de58e734061f8d6e8da521bac208b60ce49e8c2bb17b65253638257699e840554cf554097c5f0b94c00d54e2df1f36f11b29b51f6801b59b28e10fb680f03d54cbf2a1986115da2279bad6319612b1481cd1bc83d42a01cbb74f9009bc5325fd54b95e6db9737fb57367b73469b8626ebf989c88e0696c5a60f8b5c2dd7622d8d2f513a8583e6c8ae539cdb15ce7b4a420d3b9197497fc7bb97077f5ae971b5cb8197479f3938b9b376d4bde16a65ef12811eed757178a26192f909b4c2f21019e0fa60725a954c04ab7edf26e32539c59bdbcd73b7282ae6adc4b917e84b2271ca21ba722e71d9756ad5328c2b601f532cdddd896aa8df2bcda26dea5afb7943deda362f9a829968779628999bbf15c22536c978ca357cbe414c277fcf20a7e2b48cc4ea462f698296673334abff97273986a81377c089772893b41e2761215b7c74d712bf6c46da54c9d1d2a6670b6b7d562723215932f996272518ecbb3c43bb00d508d23759f808d0012bb0b3604b072cc8e8e05d4254db299814b3d6860b55cd9760a45fdcb26eaf333ca1b2b84fb9d0a1b4ab553a9f83d618adf0a46ab82abc7cb6020566e73b85a065d2d4e14c95bc7844dd5d3a8583f698af5a1beb1a6355d2be3e26e87e5c651d7c670b55c114acd17d9a7e67e2a5e4f99e27574e0965d89bc93dcb6334970afad692e07ea9dfa00ba3a615a82d9a4f3e9148faf98781c91933a9bbb363f838af3d3543b25980d681b866d51caa5209cce412d2248cccea462f68c29660713315b27f3678d6a9bb85d6ddd6b59af7271454a6af0f451cea262f455538c963096be3a55ddbd45b6097743ea968be9d9544cbf668ae91c418d929b4a8ae418e0efbe0093653295eb656fa8dca971f7b560accea162f56c267d82e470710b619d4c857ae759c887db7d6abf64192d17b373a9987ddd14b385694bcecc7a057419ead767cdb6a43c8f8ae3374c715c4ada24b478b7390fe9b8ba1b4625bec4e55f969865b6744d783e15d76f9ae25ac9dc7b6894df53024a6eef60bdb4f6eae692a765fac3d970ba80e2f42d13a775add6cbf227149ec38514876f9b382c0898376cc811175131fc8e2986cb03c6507f5ed69c22ad11df8ba9f87ed714dfb58c96dd90455ba325085c421178aea5da206ed9361fb540f863752915abef5123144163b5443e919a42de322773b941e2771915bfe74df13b2444cbb151d646b0535995eae7d1b12a4d7936489c2ea7e2f4fd6069e62d7bf0077fd2591e67ed710515bf17a8f805e933ba71d5db3b27eec28c877febb0a55a8e5752f1fb81297e6384ffa860a9439843cbab282d7fe83fb61724154ab24a054edbbb9a8af58ba658d39ff32b6d9eaac76544e2f30a501f3619db62d98def5f43e9fd9249efd9697b5ccbe5dc208c3ed6c8cdf5178b5d7237c6d4feaf5f0a64df83bc968acfcb540bd23f8f406f788d6c553518ead54ce612a03552d58231bc8e8ae18f32e9239be706964bdb3b5e3afcd728ab6ccdf981eba938fe981aa1ca641c209358665762641fd31ba898be628ae9b28c52d33bd3e3e6431defd64cd71ba9d8be6a8aed86b4e9ca3b32ce3d667e1345e327261ab302d619ae2703cc02b9774b84fb5920fcf5b726692fded8b831915ebd01627333159b9f66966713a1625b2e711edfa6dac86effc63c829778dbef4ecbc4f4162aa6af99627a8ce0ebd3ead668f6a35ab4950721722b45e4672622e53e96eceddf24b7f7923faa325ff60f4d1ff9304b4f5e38493d655af6d6122dc4db2846af53f34866fd52fdf55bab3f793b15a39f53a396e9c79c32a9af3319b90a3eba957dad7607c5e10d1307fa83c6f41881de79bfa56a9e3b298d7f61d2785cda7a38313b5b29af82f752cbf44feea234fda549d399814b16adb9fb91a4c42837477eb99b8acbaf32f158a45ab58b2d6bd1de43c5f24dcafb215839e7d679a977533d5af44740e8f44c95325fce9fc1a8429038df4bc5f9d7a6388ff5a46c224ceedc741fa5e76f4c7a167af4c4e59357e7a54ae74cfb10d9b634eea762f09629069b5ab9ed852d30d39ca7df0942e5018aca6f33f108d0210629551231a3725ccb94260f52317b3b935e45d09645f8be60f6317d888ae9ef32c99b0ba5cdbaf6d98846785d1b2f16d3d3c4cf946fe1ad203178988ac1ef33f75a853083d8218e1f75bda552e8112a7eef5023dbfef577e28b355e1df51783e85283fada8d5f49935dddf62815eb3f6433a21aa4579f2b1ff7c7a818fe31939c67269c5dad98be3ddfd1f9178bc152b2c5528a3b3e5d2bdf8136503e34d66305cdf5ded4e6fa6c6a52dd97b80ee1ef725203f2446973cd054be9fc25bcebc0e9d046b83fe3d517f2dce23f5625bc4bf5164af935aabcd1d63a551272bd7a6109e254a7cd532ddfd28b0ed3c5c254874f45b5388e5dfa386d261611c6e48737b12c87f478207da0c5f43d48d5e12a55dbe4c785da122b1b6b4aafc5fb105a5bb30d0d4c218b7387497757c02ad5578ec19e115b64306b64d78e76994f1bb277c3716fc853a400ddfa492b6e1d2a024ce2064b7373dd16eb853b98ffa623b363fb360590221f70628365b68b64abb6ce01e77a83e93a8702d8100984504d6b847fe244087bc7e84edc3239a19d187207a7a3d5626724803dd62901ec434e60fd44e213ce0d0700b85e5d13e0fecc09ae8f011c0884891e98b66e92572b22016dab4840fb0bb7b52567cf25ceef6ae511a8fd625cab8b02b878b704b8bf72821b20dba30d19570b51807715aa143ee284d71565d5d549e34b51c0346c5802d3df3831754698128b19a280e8bc0109447fe744d441226a885419d5ae7b02ce3f38e10c724e5637b7f9f5b48eeb28b25616fa4d7262178af9356a28280a009f4019f0634e809d5006043561a62b0a805ee99d00f44fee126ab59c4a486c16128d16d6c9c8863ee144d451da10781755284051c0336b7402cfbf7295c5f4929d2800baa96f02d0a79c80606737dd425f2cf6ca583735372bc19fb142363ad7ca0c5821b3638d13601420c28f86f86f4e88308a87e1c108182c45ae6cdeb4b322e26df77e684cec3f9c28bbab225fdbdb3ed5a05827bbd75140751d2afaffcbdf7ed71be5e8e98428207a615402d167b91a7f80ee34f62fd05dea28b5ed3fed9800f739f7f8030687973cbacea0d8e622d226434385ffe384d70d353a122bf8dc75c35100f5046adf7fc13d7abf5266bf9d9e0d6916398fd7cb90a2006c6b9b0430d126a7e3a9c91e5315112bcf6ad0b4478c135c9fe6ba72910c3aca6db117da27a0b5e1b6b6c572ceb149069ed8112ab1435883d3ccad76c28b02b87710b8b69ce07aa06c1ad53922706cd1b0da715b99761ea89562a2dd559a83acac3d2738187f5deb405b2832df5c310a00cf938ddc8eed3dc2bd1ea7d9fbff04a34e7b2af5146eb7bf4e5e6d54f56f92e7d204a8d86cd31c7cc99a3d8fe2590f01c5d39673f18c67cde381673ce359bacfc4336a75c6438ee9c403f844c5031581f18cdb32f14015783cabf2241ea88b1d0fd4808d67e4dd130fe4d2120fdcb335e94c3b31c453a60ce3beddc1b87112286e1cb78e1333b6719f09ef383187124f33d016cf6a762f4e8c49c50dd31409f75ab35b6c01b8d7766cf3ffb7e76b0178be760208f04d07f871db159db9db15604daea33394f5fe1b0d4d736a778f0ec3527448fe3c8a6e3f98b4e99cd4c2e8914904b369657445de285d6cc25918499c87229c5d6dc25914499c550867b75ce0dc4e02c5ea6f113344311fce6e5c381f11099cdd6dc2393d9238af43387bd884736624717e8070f6b40967712471fe10e1ec6513ce6991c4b916e1ec6d13cea248e2dc8b70f6b1096761247156229c7d3971f65738cb55b7d2bb541d2f832ee003d99e0be4df10c87e9c20878bc46045a60347f07cbd7c367a4df945086c7f4eb023041e49ca7c2435ca704721b80338e10e10fedd4e2c0e6a7a36941db950c65097732027ca9e0a65b107a83bc6080fb1c11bc205ef2964878372016f56eee1b159de2b08de604e7803d3d4e1c99998b56fce06f31d0473884d30674610e61f10cca136c19c1e4198bf433087d90473460461fe1ec11c6e13ccc208c2fc2d8279904d3019a72ed860be8d608eb0092663af9c0de66f10cc3c9b6046b187f3168239d22698b32208f3430473944d30674710e69f11ccd1ad3b8ce18a72b7b3672c314772a13c1c0d638ce1443951a1ac711eaa9147f3f792837d3f9b11795f2ee49b11f2b19cc8bb48e43ba4bf9aeb3fb75dc28bdeb8653794e1c7b566864fde9b96d1faf673a15c89ac6f3c27caf12919be4c0a5b22f427c31638ffc13af7c891f526e1b7ad2c2b6cb68a6a1a821dcf85dd6656eb4711e50854044ce0447990a108c8f4a30bac684773a11d8dac7422b795ce97cb036a955334ec12acbfec0ceed3da55dc75c08f5e45d50e59e924fe159a3075b6455e80c0cb64fd0e57a33cbd71264238391708671e7008bf86104ee144d85724e6d0f5d1fbd1dda8ce953f83204eb5c9459bd52f8e0de75054c9e4db8493d5918b0de77c84b3c0269cac6e866c38eb10ce699c387b35d7db0507904bc27ba8ac2cb4c7af288a639b43902516e50225762c5ce134c297aa358c55ce4b7b735183b3a1dc87ac723aff983b1e62db22764a740be40ac89d4ad412e758e98848d9d222022e5bdd11cc19b9e87f37ca95d60dcd43c27a79a83e9a468fa671cea7b3a1bd09a12dcec5dc50a63eee8ce5279b87fb6108e64c9b6032ce5ab2c13c04c19c65134c461f2436983310ccd936c164f48e63833909c13cd826988c7e9b6c300f46300fb10966149758cd4230e7d80493d107890de65804f3509b6032cef3b0c11c8a601e66134c46bf4d36981311ccb936c164ec01b1c11c8760cee384992752c78f82791c31d6ef6c1e47b3d098d2fcd6743ef40e163396a26c43c51390ad2eb0092663fdce06b310c15c988b717718eddc23f437937334d1cb866f30c2b78813df60842fd5910b8425569e477922e3450474712e9c0f0a0e38e7833310c225b940587cc0219c83102eb5bb39c438aac9d61cda8a9a43cb72e51e939862c3b344ec936b6c9316a7231b5d6e8f6b6b1417a71e8a501e9eab5a3cdd46c15176dd9a8d801e61d3a651332239d4713fc2b9c2269cac2b7ed9705e8670aeb409e7cc48e2fc15c2b9ca269cc591c4f94d8473b54d3859f7cd66c37904c2b9c6269cac1b3db3e1ac47388fb40927eb36e46c388f4538d772b73c33fb60c75aa91a7c3284b1e5b9820be87404b424171b9b1579faef3918f6605b87b61bc12be584375464bac42f79bd2fa33bc2bb5c50d7a3c18e75364265ecb1b3415d87a0aeb7112aa34b171bd47108ea51364265ace1d9a00e475037d80895d15d810dea2004f5681ba1324e05b341ed8ba01e63235446670536a83d11d48d9c508b44ea287df2ba8d8522f1512f3722c99f084bfeb660e29b6ca5b245ab87ab1913a1902b1160458b4e844df6ac8e8be276bdfd903d6fb6771512a39318db84de4f90951e6bcf0e75acabddd9ecf46404738b4d30a3b8adf4f908e6569b6046715be91310cc329b604671e6fe4404739b4d30a3b8adf4710866b94d30a3b8adf44e04b3c2269851dc7b6e0d82596913cc286e2b7d2482596513cc286e2b7d0182b9dd269851dc7ae542047387dd6eb751dcf7b82deabb5773e2edaef0babbd8d4c85ebc2bbb9a73eb15b66f0d0a6497c7e57aebd3cc873da2b8f5ca3064933b73e57abb528e68eef48c782e725eab972146d9f57618b2d51a4ea03d7c3379031fba2e5ce8da2074bb5ad3a33efa2bdd072094bb73b1ac103e637be02c2b2c41f86aedd86bdb9d3daa9316ebce0bb15ae6db5c6877a30aa7cea67d3b593b936c96da09e13cde269c8591c4391be1acb709675124711e83703670e21c2d5217762d167b05b82e3409ed5abbda79bd42403772ad04eb6eb95f939b16676f2ec8fd5165d568934bf88c486eacf620c2d964134ed6afb8b2e1bc1ce1dc6313ce9991c4f94784f3049b70164712e77711cebd36e1649d5b67c3b902e1dc6713cea248e26c44384fb409676124716e41384fcad55867896c55363992e70bf8c8d37ab5e4ab422ef9aa8cf458e75604f4647bfc3aa3e8aed00df5944ec9c53ca6de07cc5d84b84d7635f54351df3ea802d9e5a9b9588478207dca642e82779abd1ec68c1510db64db5d08edfe5cd8e5ccdcdb25dbc0f15710bcd3edf9042ee3a4ef7e2e94b5a8b239231776383bf776c896895f457678267f4dbdc3b03d5589c3a45c942b85aae46601308a19bd16645704f32c7b3d3b18c7ded9ec7420cae467dbb33f5d141db327232b3dc78ee960d3a79719d1b26d797124b2d2736d9a7063f5e0642b4fc7239ce7d984b33092384b10cef339710ecb38e3af572d4f1055c4eb03725a8c6b981861bd2017831d998d1b1546d2037e238279a14d30a3e801bf05c1bcc82698515c03bc16c1bcd82698515c03bc01c1bcc42698515c03bc04c1bcd42698515c03bc14c1bccc269851ec6a2e42302fb709661427d516239857d804338a6b8017209857da04338a6b8017229857d9d44f679d5863eba7f74638afb609276bf3880de76108e73536e16475e362c3791cc2796d2e3e0835431c681f84ba4524105e978b8504e907e2521764cd7784d6cb95eaacc372d7700dcb6d43767a3d27e4e10a728df31000ae542b3512eb33928b01ec7ac808966d85c65c04f6865cecaba0c1ea2f15264f1ffb35a7a2d8329d82f0ded89a339d39db2e753f17ca3fa172f6264e942325cae5ce436b253058b5be47bd9eb0d62dea3b5c0be426a93bd5fd25ceb1d211cbb895055b5ba033027cb33d2eb351ccf6ff41286fe144d92f0d4a1d53563f913cae5abf1a959eb7dabde90fe3e828dba63f4508ef6df6bad3324ed6b17938fd121500b7e7a200a0eafd4401c0588eb215001f218c77706f4bb546f5e8f59283e5d23221db47af2eef85c0dd990bfb2b68b6c10ad9217557b5477db395af228c77710f2c03b04532e056fdfed66a2e98c508e6ddf678c933368cf673a15c8d6aee7b7281b2c0a7c71eede1bb979055de9b8b11d0e907dc08683542785f2e06e7c01a17cbe64e935402bedb5e2ecbcbd5e20439e659efdc83b6669d88f222d69908ecfdf6f8c947d147e97084f2815cac2b9aeea982a2dc0c6a42f01eb469b1ff0cceda9b6db1ff1d08e74336e19c1e499ce7229c0fdb8473662471be8e703e6213cee248e27c12e17cd4269cac9b4ab2e15c8a703e66134ed65d10d970d6219c8fdb8493d5778e0de72684f34bb9d8db1896591d387b1b2f46f8be6c937317ebb7d9d870e6a151a2276cc2c9bacc850de73284f3499b701645126703c2f91427ce4e5240a5fc686dbd70bde5a2e7a8d501958d5fe1c4355e04f95a300cc3354991f8abc0402d07fe1b4bb9604f43b09fcec5a0308c682e15304a096399dbe5b0707da4c72e1b10c267ecf1268ae232eac1a8a4fc2a274ad8ae7b8dccc41542fbbb5173918c5f71612b433b219bfc9abd0e2f51dcd2e77a84f6597b3e765714c9d5e93f4030bf6e13cc28cefcfc1cc1fc864d30a3b83afdfb08e6376d8219c5d5e92f2098dfb209661457a73f87607edb2698515c9dfe3c82f91d9b60467131c0b710ccefda04338aabd3bf8d603e6713cc28762cdf4030bf6713cc28eecff52682f9bcdd8b5518fb446c8b5566a04190ef730f82f88d27b9aa174b072fc6ea88ed8bd5bb10c817f8d751268374473361a063b7385c0e1cd7f94e0347f103b76d5141f0037bbc36a3d8dd2c40287f68937bc20cce2a8acd32bf8470be6813cee991c4792bc2f9924d388b2389f3a708e7cb36e1645d82ca86f31884f34736e1646ddeb3e13c1be1fcb14d3859773366c3b903e17c8513279ce895bdd19b56eb8930bd6a93d5cde01c2466b3ba3b11ce9fd884737a24715e8c70fed4269c332389f31708e76b36e12c8e24cea711ce9fd984735a24712e43385fb70927eb7c251bcee311ce9fdb8493757372369c9b11ce3772f1391cbd8f2170681230deeeddbdd0eba6cd3896c9e6c5d9060d16ff8213eb380fd66d22d5332e731f3a46d46c4dfded08f52f73e1733c4b1c681b517c031502bfca857fa7b6d606697f50042c51f02a8db346d1dd27f660649d6fdae3ce1d45b7af1e08e5af3951f696b1f17e8cd1ddd414fe76f7338e5e49d91b65f3dfd8ebc6cd38cbce86f6cb08ed5bb9d826659a27b347f9f3cbf310bcdfdaed01c2e894c8e6015280cacdb773d163c29b9e99b278b41b4b2f236bfd1d27ce319ec6528dc02bdccc5f3058aa5eced9b6e593b8308f4456fb7b7bbc41a2e861b70a59ec3bb9fc560164fc0acfcab803afafff2f84f70f36ad6f671d2fe5db4e1f65fc3fda849375808f0de72108e7bb36e1641d7e66c3792cc2f99e4dc3cf33381719b20d3f3f8acacef76dc2393d92386f44383fb00967712471fe08e1fc934d3859f75562c3598a707e68134ed605da6c384f4138ff6c134ed66daad87056219c7fc9c51e74d35a63108fad93f93ec2f7d75c8c8042c055d212b5ecddea91e8c18b21781fb5fe222d5dc9446fbaad176a9effcd1690519cb7fc37b2c8bfdb029271f49d0de41c6491ffb0052463cf9b0d643102f9b12d2019e7d1d940562090ffb40524e32a4b36904723909fd80292b1e9cd06b21e81fc972d2019dd10d8405622909fda029271ca8c0d641302f96f5b40326e95c206b21181fc8f3dfe6f51dca9ab3d42f95f7b769d615dd1c606f3ef2201f3339b604671dbb37f20989fdb04338adb9efd05c1fc9f4d30a3b8edd95f11cc2fb84725133bb92f5740ab9d9761eb67782d7a7e993d103cd89d87fdfb94097f61b3775baa5336ebe0da682eb0b5086c8c13ec68e1752174bd3213ab2d40a0fb515abfcc1fc572341f3597da7042f6ae6c7381829f2614048b8c0dfae86e83568eb0b6e5c41acc2f338a95531c1503ed3851eaf518b86f947909cb8896ad843d025969fb5c66fe6a4789f522f161312c3c674ed9fbb9b0ee44583b7062d593bc330ea019f2875176efc8094f37ec331b0a9916c92d78a7234bec6413cc282e1098896076b60966143f423211c1ec6213cc287e84643282d9d5269851dc15368e6076b309661457a34f4030bbdb04338aa3f16310cc1e36c18ce268fc5804b3a74d30a3388a741082d9cb2698511cf0188160f6e684197ca5246315c4b6166d00c2d9c7269c8591c4390fe1ec6b134ed6afb4b1e1ac4138fb71e2d4eb29c045660f1a7acbc936136cf8168a04befe9cf8fa09d8e8b94c6dc607a2763b8fef701eaf9543c4f8e3b5d1c3d81e611cc0897184486c7ee2cefd6c71d46d70d429973c606a78be807d1060bcbdcc110019bc4244f95bd5eb10dc819c703bc8d824a6d5a23721d10fa11a948bb99eecf6de62ecefb0b929dc86d00ee62e29fdea6d1d53d6b99dbc1813c61da8be1ec28931cf8031d82e5c8c836f6cbb701522bc43ed2d0018e782d80a80d75001308c13ed48897699b44f773bc84a55b3574851da9166a74c00b0e372e76f57fc12e758e988ad88603ddf05011e9e8b1296f2f958282d9679a7e2b15c25ecc708e341b9184bc26d51ddb04f34f5a3ddf61c84608ec88573228699be08882ed825086c1e2758bd9f769138d0f6d3be01211c698f8f5c1467d3972394a338518e0a80b2c4091384348ad5ce5f7a70a481b75a1acf552dfd13211ecd8918b66ed1cdf9d5ce4b7820247ae5641f846d0c27b6c122d9c5b04e0ec8edf0cdea519c6a2b453da4b1b9187fcf7c6bbd287e4ef976649fe36cc2393d9238cf4138c7db8473662471fe0ce18cdb84b33892389f403827d88493d5eb830de7028473a24d388b2289b306e19c6413cec248e2dc88704ece450fbd40fe768f30a75922dc6190e80e726c4308a7e4a2879e995b57145db4fba366fbd45c59a3db4b07417b9525e660bce85d2e84cf226bcccfc5f83a20ac6c5eadae6f477dd8ed3b0863416ea7d80ef4afb10c4168a7d93a7bc95a9bb3cd5efe1aa12db4152d6b339e0ded95086d512eaaa6c2036e2a633c42383d175e9cb02776cebd38d9bc3e46227c337231e59bd94c506124e782ee41308b6d8219c566fbbd08e64c9b60467165e5b508e62c9b60467165e5dd08e66c9b60467165e5d508e6c136c18ce2caca6b10cc436c8219c5e9de8b10cc3936c18ce2cacaab10cc436d8219c5bd65ee43300fb3096614f796790cc19c6bf7b202c68ccfd6c1ec8246dfe7e562e8785ab3bd56c8114fd7f72deaab2dbf8eac74be4d339433384b50b619cac711ce0536e19c1e499c37239c0b6dc2591c499c3f463817d9849375f9151bcea311cec536e12c8a24ce5311ce2536e1646dccb3e1dc8e702ee5c4a9b72c2df4b442a33cfbb30bc15b968bd517e098b048c0d613754e13bd52b532dd351795526099148037a56888b427d2188478b94dbbceb04ef9b2e1ec88fa4387db849375908e0de72484f3089b70b23ac2b2e13c0ae15c918bdd68304eb38fd2910ea332194cbdbceff6e619e19e116382bb0ac15d6953c36906e7341c5bc3e9215431adb209e7f448e2bc02e15c6d13ce9991c4f92ec2b9c6269cc591c4f93d84f3489b70b2eeccc9867335c2b9d6269cac5b49b2e1dc837096d88493d5c1860d6719c259ca897382f0ae5c879e7d85c3033ce1753c13cb0fa8b9cff9ce5ff572ba8eb5657a2f57cbf478d4325dc7095c7f4d989a504e2e59d940b27d4d7834b2dcf5b68064b44836900311c8a36c01c9e812c606f22c0472832d20191d15d9404e45208fb60524a32f321bc84b11c863384116786af72672fd10bd426ea1f3c42e479f5a790651cd515d7f0d575d5f86eafa8db9701ecb74c49471f28e6dbcb41d82b9c926988c9e786c303b20989b6d8219c591fc4f50297bac4d30199bf56c303f4530b7d80493b121c506f3bf08e6569b603236efd9607e866096d90493b165ca06f37304739b4d30a3f8799dff2198e536c1645c59cc06f30b04b3c226988c2b8bd9600ad4ceace48449efccbdc4f95d2ddc0fec943a024070f477e6de80acb48a13acfb51fb15ce03e5d2df0e2f9669b5af1bb02da1e988b06ee7c4da5d24f63fdea6f0252c930ddc482e707d11b81df66ca216c50d04baa332b39a13a5773369cdc00bd415582398bf66c4669bcb11d0e3ecdd5589b1e5c9b6abd20328dbefb47b452763ff9dad3a9a8a2cb786136f5fd47cda232b21f0aedfa6327d4ed673eee782588e6c74572e3c46701b946a38b1b73cd96c320fe1dc9d8bd23435cb67529e46718fba3e28bbd7e6a21145cd7b2637a2a2b83dcb1464a575b9e8786653e733ce1cb1d9e82508ecf1b6828de2970bcf4360eb6d051bc56fc2ce47601b6c05cbd83a65035b84c036da0a96710e940d6c3e02db642bd82836b08623b07b6c05cb38cecf06f63404f6045bc132ce46b1813d0981dd6b2bd8288e5c1d85c0eeb3152ce3f0351bd8f508ec89b91e1f307b9696cab12be8e8564971bb785bb2a3b9d06e42e3032771a2d51bb0cf10adb0013b9b65ee479679b23dc32b51dc16732542798a4d7b41b06e9bc5369b3f0a65ec536dc2c9bacf131bce351267c7f61ee14b52842f949185e8968bc4164253c55251292b0e205bee9caf903577a3d8ead8d746e75fb034d8ecfc335d8fc97da2168bbda24e5e05791552f62ee72e68d6200a60dde46960129d9549c465f132df61dee83c03df9d87d0f78912e16e91045f53d63e2f4d12495c6ed8b9c6b9d624608e0c42d8ed68b243d4cb18276fa1148f75929cdc6f42d5abea34ae74d5df895aae0ab66a27ce6552937ae79976321cd784e2cac7c13dd39349cb658ba7416ad55bda82b76a5e2b5303feae90e1c7637edf8a8ec73a4829502bb9732e90f031295bc773a5bc5ee6c82b93c7d2e6b7f3273a8fc58a9d5f6e9b6c6a736b6caa5a8eb24b9de9ebe965424afb4bdb0fc91933e7f09a16b3d1743172b315bc5f25fd4f2aa5d4e569639a3e7eb4bd77f349957cf860d5011dffd321dd55b24b331d18ebeafcb5ce497957387c1d4c9bfd5b2bdb88f6ff0f39c6d6bea0350300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/b9f86c2b131382b49b78e104153e2bd3.asset.meta b/Assets/SerializedUdonPrograms/b9f86c2b131382b49b78e104153e2bd3.asset.meta new file mode 100644 index 0000000..1a34909 --- /dev/null +++ b/Assets/SerializedUdonPrograms/b9f86c2b131382b49b78e104153e2bd3.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f074edb41931eef4595e70835488661d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/bb160c19a747fc9478445e2f3d9933d5.asset b/Assets/SerializedUdonPrograms/bb160c19a747fc9478445e2f3d9933d5.asset index 3b2db38..ccf89c6 100644 --- a/Assets/SerializedUdonPrograms/bb160c19a747fc9478445e2f3d9933d5.asset +++ b/Assets/SerializedUdonPrograms/bb160c19a747fc9478445e2f3d9933d5.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5a6d53db46105e19646330d8bc240e4d4a48d3364aa1c8409abe270d90b6e90492e1ed4ba6439cd8801bdb303664927ee8f473ff517f4eff41ff41bbbb92ecb37427d9e0839ac61e4bb6ee6e6ff7d9e7f6eef61cb3015fc62c5eb6611d96610eb6a0000750c56fcb78afe0dbf9e53d7f0a35bcefe1358f65b3301dd1925eb78c2b787d84bfea70842d8fe125de4b5cbe0145fcfe08db16f1173dddc54f116b19fdd8680b56e009ac41d6b81421629b1bd5dd6706d9650ce07509de62699195a24e6c2ecae265034bea5c5641a5bd7acfe06736ab82652fb14d0dca28f3054b1c60b8f0631aacdd8f583f0f8760c7e8f9ed0e60f45a460348a2e331001749eaf608553d4401122bb618a323588405a91593464ad07b99af79ac5162a113c12efe0c7441ca95f15d145c50c7e73fb007c909252c9983c778a756cf611e417de693b28ddd96d18d45d8c4eb21cb7b8e6a076b469944eef2b75947990e9b2af8c403f4107f9759c30dbebe664d8bacfd237c76c4dcae22bb97f0fe867b0bda5ec3efb23e375dc8e43aca49a57aee50d773d30a5a43dadb7d44b3771e390f8f10f4f1097718f6db34468c3f029e7887a113644c0ed68e8c7986cc6879b60036fd34d60308766e63d04239bf1dbcefc29d505be4c890bbafb2054d0fdffeedef9a51fe2b6eb69ab608769c4cbb16615a18b024cf322e0724849b609afd3952d40fbf21833f410f37ce107ea75e89eb75ee8038cf4cad0e303e6c4cb814d9f6609f9701075c5c71d593973cc07b8123e56356e91504bc98a32e13ec88e0341b658cca1531992b06ceda15d1b127cc15030dbb9aae00674d244130a940304a0715827d320493e7134b4e86df20ea996d1bbfa1d050d0297afd12f472845e4aa554d2a714e9a3106eca5c43d61a9b67e81a2a3b602979acdbb97b8651d7197fa491fb66847d7345b295885241e59fb80cc2a1b30fd54e642b47ccfb7200d3a8e9f500957ebf27c730a38cb0e13aa8104cc8184e241c95f83548ef1135bd076492c93763528325c2336ae14995f0f12e081f54099f90bbea7e27c28754c22f7541784a15af2e4be2d53ff8ea245e0daba8929586800ea832221bc66c4b51eb30dec267ce4efe21979678fbe76d1069f0d0500aab450378953325c7dc7ff850a7d0d7e703ca66582917d27d6da6893fbe8b298f2b931c57f4a8a18a3d6915a1de3b6decc9a806d9557978f8ae9341362a632b53f8d5b9b195641ef06feacdcbc9758fb9d71a360bcc65ffd9119439bd66ef630f71705f09057fa798bffa955171794cc63822c575097239426eda67969f81536a068ecb18c89cffe55c18b8ce801658127dbacfbf1b32fef1409c0b717937f4faa01df6dd64f6e956c53413f8360c0a640fd9a9356cf7146b94f8571d6ca6610eda4fac13dc155c1f526cdf44685f345690e1122897a04ab3ef064878d28c6b9415ceae8edaef725adecbe2c9ac8bb6499d5d4eb81679b210691e8317cdd28f5ac9eef3ebf75db3f664a9aea05fd23c12de7054afb1bc82df4fb466ffcf69fe712bcedea0960fc61c0dea5bfff3f196a3f1668170a810b369c764cc9c30d845ab478be1789f1cf2ce539c8e80353e064601b4cc5de5ea34315396f5012a51f0f7739aac789245793532ed18117d1c4a9e7134adb1f7ebbccf4f98b11c79e3139d90a519b23c0e770fb2559e18090b3a3a7adb83e00d09e0cde8066f8d8b2bbc802ac1af5014f674757de08de8026f58006f56277859b6268fc57b40ff9d682eb9540729dac09cd205e69800e6a73ac11cf3817971201c15209cd30921ed409a43571b5093ba801a1180b2750245116207dfd4f12e56d969c82ee99c6b4d5dc081005c4e2770191640eba0036cb8ef36a44da7b72ad5089fb609c314e09bd7095f520a5fef2d4fe202600bba23da0a7e29e3038debb8215d40f50b402dea04ea861bd19ce54795635a8de7d163bc57e127f7bf6f3b2ddd8826ed60e4d006705217c03101e03b3a014eb1000274091fd55b16c9bd17f1d2026c9fe984cdd9cf8a9bb35eddcf2605c8eeea846c1c5a17c2abacc07e2055ac71297c531788e302889feb04310daa155ed5ada20dbc842ef00c01bc2f748247d33ba9f79a7976d483f12d2140f5a54ea892dcb5f72fc825fea792c6e8a66da1d22700f6954ec0c6dc09c149179738e9546f2490291ded1c7bf5de04911120fc5a37e79a8b0fe72450633cd3c6b99400d837ba2783d6a47aef678807c13921ba006771393abaf9960830ea12c052c455cbb721b4da4a48588a7db71598e82ce5f98ba55cc95a6dd0cb6ae390c2528c6bab8d1cbde54bfd59a1db15abed206cb59d95b54e900cb73a58ea3a87a1a32ebbabc8b1556e91c75a79be370f466dfa57a3416bf44e0e00c365461f0bde23021bf20856eedaa8ecc649acccd2d39ccaa642bc62132d2eb4fdf7c177669fe533fb2df47cc11d624fb0b243667a99ff02a951ad2f2f3c0000 serializedProgramBytesString: - serializedSignature: dd4a5f15f93d1b9f2bdd23448b64bbaa7a0775fd4b2deab3c666fcdfc8f01d9fd4d1892eb3f2a4ff17f8b37e52aa390acd26eb4f03e0f68b04792b784f7d630e + serializedSignature: defeaa34acb6c3e6f914e08dc742c1c82bb8fce28fd3a8ab0381959737e471aad1e0b20ac03ed850fe8f20f0430b9b4646b741d386ccf5addec19dbd72c5080f programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/bb7f0f1c83ce5af4ca88ed109558c275.asset b/Assets/SerializedUdonPrograms/bb7f0f1c83ce5af4ca88ed109558c275.asset new file mode 100644 index 0000000..47a6be3 --- /dev/null +++ b/Assets/SerializedUdonPrograms/bb7f0f1c83ce5af4ca88ed109558c275.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: bb7f0f1c83ce5af4ca88ed109558c275 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec7d077c14c5fbfede5de8bd77083dd484dea52434a942401014020910090926a1292a2a224dc5de50b1634745c58e8abdf7861d157befa8ff9dd999dc7b9379ef766e6e2ebbdfff4f3fbab92dcf3cef33eff4164cb7ec7f02ddedffcdb4a65999564f6b86956b155985f65f99f67599fdaff38bdf9f6a15dbd7c5f6ff73ec67ddadd4185f927f3a079adaff1f6fff2ab14aed2f57580bed6b3e7d3eddcab3ff1e6f7f9b67ff227717d9ffe5d96f0552ec8f665859d6146bb2d524d02806c44cfa5109bb17207605aadaff1f65adb19fe65152249074faa889fdbfe9f69312fa6c994d9abf37c73a9a9ab5cc7eb6d0fea6d82ab0311750c4aa3bceb4e81f967319caaec3d87588fd5f35f67788fd5d95fd0ddfafc4ae87b97c7f38f8ae1af89b28b423caf7239c6bb0ba7dad6cdffe1dfc26df7ec3de1be9e0059744c1ca64d72c761dcd30ff70c1bf0abb8e89616f348cb100cb8d6655d9753cbb8e637cff8c33fc098e4681ed008f685903f0190fc2ae069e937b876bd8cee3b1a6108f359d780c5ecce2ef007b7f22bb4e66d7490cdb7ea7d147ecde14761d1583d754e73b6ba015f6593bccd072f6fb08769dc6aed319b7da8ceb5fe0b72e171ea7d90cb3160be36fc97dfe3e797e88fd9ec1ae3385f83a92bdf70ffb3dcb251f37fec739d56161fc0b7edb3aa6cc8f82c5e3bdae10ef75d9b7db1c1d53f608f600ff93e2ce6678ffc561473dc18e7a0e974a6991efc5e4c0f18f6238f51d5c922d95fd26b8e72bda96c2bedbcd7ecfb162e76d435d3c3bc6c1a9cab59ee78453b9a173bf327f8ffbf2d13178f2b86d20c46d03865bc070b9fdf39ddf01aef3188043740b08b80d05dc860c97e711dcc763f1cc61d75c765dccae8bacb274bc6e1dbbb7905df358988dacc83ca0117bbe20fc6dd3e715758b16474b84b81ec5c26d1c03937f9fcfaed55cbecfdf395683f35276adee32cceaec5aa011660dc717aafe20f8c2bc1898cb1c7dab96020e364eb5b5ec7721bb16b12b2b2382cd043f68e6c20f6271398e71b1401cd85caad765bf8bd9b524928b551ac9292598384ec1260c13fe26d7a6ec7e0af84db8b2b2b5fa3e86b9825d570a9c5799e36cad76beab5513f8869befa2f9d71ac7be1a190e760d5e261c2f705b1ae65d350b7ccb79b8490fccf7822d048d5b300e5cdb1385f72a81dfe4da3c1c1efddbfeb626f7ad11e03ef9b632f84d9e9fe092ebc956799f2538ad40d8ad58d82cffafb98dbdbbce2a9ff664df926b4b70af25c3dbcfbe3bc52a5f8ef1f7886d55c06ff2fc2497b69d2ae167875b6b44946f4fb322f39ffcb03f547999dd5bcff8b4b622d3566bf67c6cf89b00d3c43addf95d8773d9c0be69037469e3f0abcdcbd333d8758b252f6737011d587ab43687c36ef336bbb7314a58bc0cdd2ad8bd268c53a329e3cef3b133adc83423be4bee9dc5aee7b2eb05ec7a7ef8ddd3783dee1c763d8f714bb522f2666b1bb84fae6d99ee55c16ff2ded961eca62ccd59170a5c65f1799160bb2c0f88e667acad73cad3ecf7258eb675b633ddf6091c3658d1fdf75276ed2389e7cb62c4b31d6e5d56ffab2bd6ff6285cbdb917d25e15eee22dcad2cdcdd8ae15ec1e2b11d788fdbbe033c23712e3ebf8a5daf449e5f0de256f6fc1a76bfba70ff5a166e07f6bc06f84daeedc35ce9dfb6fdf598fdf554edbf8ee17404eff138d8019e41fefc39b7ff7ae439663f7f2edacfef73fb3b0bf67766d74ec0fe4e8efdf599fdf555ed9fe5f2bd6869f04627ecb2b6e14dec7a33bb2e02d84318ef34ab7c7b612778467eb3768375831551cf89cae51676ad15c39ea1e03d72bd55c3fe68cf58ddc0dac56ceb6245b697bb38f1d7705614ac3b1c9d9a5fcc7edfe97cd388b76bee729e37e071cfafb7b230ba86b5aecffbe7ee66cfba01bb6f60f7ba837bb7b37b3dc2f7281e79768f103fe2f37b0186ecf91ec041f6fc3e2b9c3e48ff10cfcbef176cb941e0dadd8a28a3ac07cadb4adf8161f3faae9bb87c907ddb5388cb9e4ebc34ee1005eb21795c36e169ff61212e1f11e2325d12977bd9b30c106f93d8bd5e92f8ed0d744867cf1e45e2923f7f0ce0ca9e3f0e38c89eef8b8ccb26bc1efb041297903f8ccb27cbdb4adf8161f3341d2d2e797de1297695b5999eb1c27929c1aded02f759763d3b0aee0801b78e0b5cfeed7351705f40f8c6131ef775decfd7c78af475f2dbf6db6675a360bd68497dbd792afbfd9215e9ebbc4ec87dbdaf55ded75f61cffa85e39f6a41eef5b7cafbfa00e0273c8dbd0ade81beca9fbf067065cf5f071c64cfdfb0227cbd39ef0f79d392fb3ae40f7dfdadf2b6d27760d8d1f4e771f9b6a033d777a015d9461ec8e287f3e365d29d56f4b2f11d077f3dffee5d863788e1d703bfc975b010ee6027dc16acffa3e55486c3c6335ab07ebc96bc5ef09ef3fb74aef77ef6de36e1bdf79ddf1b787be44341ff8f045f191af6b7325b3e00cfa06dc3acc83ac9c7ec3e18c30b0e03f7605cf1ba592c5d3f61d74f05fd8630bcfae03779efb330ff0d6c3ccae2fdbbb7849f35582fc46f4dc0e373b9af50ae20ce94eb48dce62f62d8ac92270db722f3a4e18e1fb4ba360ad6d7ec9da7a3bcf32dbb7ec7ae6c5c3438c28a6cfb8e60cfbf67bf470acf475ae13c9be7d573010f8e4dbe69e0c2fe1f2de99843eb8dcefdd6dba360f0bedd2b19b7512cdc86e037c1e2fef293833991b567db2c1170ae67df650a38990e4e9bf9ecbd9f9def97ed063895c0f35f04dc5fc35a6ddc237cc3d37bbc75f1789f6d62b6655991f95696636b2acf6f787ada6845f7f1dfd8958dc5d0763dc1e363e87f81dfbc7c10cbfa292ec38a625770ac15d987c6c7d459de171cc39eb3719ae078e1fdf1ec7d36861e1c27bc3f41787f027b9fdb7778e4fbd6df0087fc3e14b62dc8fbddfe01f70e67f7fe0debd38eb5ff821323c3b6feb322dba8bc1dcaebb38dc1775003fe9cf7dd4f166ce275aaa6e037b94e1570f9d8fb9fc2738e7b44242e79955ef9ef60d8c64d73c13740cf40201233aa4fb331f0e034f64d33f0dbf6e97607a360f06ff9d87e36c3680e7edb18ed531dbeeda3a4dbe00c41bfe9e03eb9ce64cf5b80df047b63147e6cdc3e78a460db91ecdb7d2ebe656939385bb06d36c338e4d8d6214afd2bc0f2894025210eb9cf12bc3992789d03e293fc3e8a7168097edbd81d587f49a032e2dbb384ef5b457edf9195f101d6c71fa82a709b6b45e44701d64f15a881fb64a0a6c0fde8f03b9c5fa09ac0ef6881f7318c6f6bc083df27d779566439cbc62c02acdd179c2f3c9fcff065734da2a511566f0dd4b6e2ce63037500969bfea8018c738e1559d6e43871d6a9d4e1df89f10f708eac2e1860f588e08ac8b80bf2b1c4a7c21a34e17d652ccf0ad48dc191b73d1608dc1638dc3ad775703bb3f64ea0a1c0ad91416efd18d64281db42c6ed1607378de53381c602b72606b9f517f4cb0dbf1fe063c1d523df09f03c6b9115d907bc885df30006cf9b1687ef0579dfe90ef00cb655f9f3ab18460be439efc39e823c17fab0cbeef33eec7c817f3ebb2e015c973871d485b5ffbab0feb500cbef02ad92e73f657e04e670948ba37e421c150836f2b1d8a50083e765cb80dd7caec70ef00c6acc9f6371c49f6371c49f8b71c4eff3382a12f8b3f91ac142c0b5d089a3aebf38fa769bcf38b511e2c8603a0aa43adff5e5e55e5b86bddc8a4cf3cb1daedd7638ef77e765523b766dcfae1d0c72ed28e76a0d06dff1b4de89855b22c4039bab122c06f150ecd8d69db5f582a5ec9b36e0377f8fdcaf027e93eb7100eb3886c5e702f03430286c77f71f22b9963d237fcf72a745d4f28ee7892b85385ce970eb91ebf0e8c1fa06f9387ca08b1599279c2dc421ef7f9595f99c77e718bcc57c7b95e53edf5e23c4259bc7125c0df45fcdaec70bb61fefd8de73bec3bb276bf305ba0ab67733683bcf074f10b89dc0b8b1fa6f3aeb17087417b83531cfad8ce3da28f122e6d52709f17212bb9e08e285cf0d3a59b0fd64c7f6f43f1cde196cfe46a04712e345f4c953147cf234c1f6d3d8f55480d193dd5b0ff438953d4b07cf6039c39f67005b64cf7b45f22bbbdf9bfdde20f0dbc0aea7032ea7b3eb3aa093e80fa04f24a63f6c16c2e47d319b00069b9710dc02786c1234d922d8cc9f639af0e7a226fc3ed7e44c811f9bff13dc0ab8b0f943c133c0bd758eaff6bed6f1b3deac3d1f606df100d72156fe29e97ba2e1a438d335c8fd3e6c9e4ea0bf801d2b0f9061af63d7b3802d67b1f0d682f065efb8493fd1ca22de1618103f466020c072d3de63edb5c0208d3007032c3761f276595b8d3087002c176106863af13c7c9d8b77473aef76e4653e1bc70c6eb322fb73b6397ed18ff57ff7e7fd2d6c9e77204bc0c914f0ceb322fd92cd818bd6df1a88b1462b30daf9aecf5ee04b36affe6cee6e80f56306785f6b94f52f31c31ac1789f63459653e7b0307738b80378fd97f5ab96d57fc71bd46184c0f1dcf0fb01deef5b5d7897f50f07cfb722f3bcf301af6a911c8317083e718163fb0036ff6f20d77d22c2eb42055e170bbcd8b876f05a803149d096b7b1aeb322c60b83d719d018dac2fba9455b78ff3466cb4540e38b1c2d071e74f80d62e36e01363e1b3842622bf4233e0ea763235beb18bc44f07136cf73c80f91ef95bd7f699478e5eff278dd2e68b11df0af16694bf072c1df2e77780caee9d837f823863d0de1759902af1d02af1dc077447f9b0e9e91ebf582bf5d9fb8b890dac2c700445b6658d16db91a687c358bd3590ebf21ac9f3e3053f037682bf4b744a4a92305fe43c2587dbf71ae43791b94d7d96797f7b9e0a5c8f7b2740b7d55a8af96bdcbfd0df3551017c1cb045f4d01bfedbf87b271d561acff23c0d6dc95950bbcfd62223df3b10d6ed7e03056dfd5883e5728e883f9d995401f36066e3502b87c8ce12ac09f8f4bee00cf401dbeecf9550ca305f21ce99f2b7b2ef4cf95dde7790e7f5e03fc16d24e808fa1709f1c0874e5f522b666b113afafb375a3871d14be8d15877cbc653ebbe6a8fb4b608115591f74e93f51eb8d0b2d69dd6bf84e16d6cb4258c36284c5db467c9e580af86dff3d82f50906583f40706779df296b1fee94c77d59fb10f10db17d58769fb70f6f127c83cdbd0ede087c6336f896dfcb8b7c06b907799fa52c6d2e727ef7e0edc8ce8e1623d9786c6031b007f3c32542d83783b0d99c713a6ec6beebd450f0cf18f116c867d76371ac00eb030fb07555625b236a1e17cb6fa2f9285f3329cce11935d1b93f6a7e140cde6eb955f0c75b19c6c5c2f336e037b9f23960fc6ff2cdfe48ecb23e945b18466ae4fba40985f213fbb37709bec9e7c0df0e78dcce70f998c91d02f73bc07bb03f9bcff5be0d60ddc6b0785fbda43f3b736f2457d89f1d2864eff07d30a2c563913c1eb3d87ca9ac341c23b0dc92e653596cfc2b8ba7bfe3d895f5dd07f878009b5f5a96cfbe11c5676536b0fe82e05d4cd3b6e037b9f2b97eedc06f72dd2df8dd6e87f7e8a9c27b7cfe2baf4f9446f20cbe19c9df6a1d793f85cf9fe7f3a9781e42b0f8d80c9b0b19e07de8770bbec6d737dcc3ee7764dff171df95c06fd83a8600efdfb7f53b89c7cd1a213cb6663578af101e5beb10dc2384d74412de9e28e19d2084c7fbbcee13c2bb8f5def17c26b2a09effe28e19d2884c7fbc31f10c2e36b281e14c26b2609efc128e19d2c84b78e7df39010de43ecfab0105eaa24bc87a384778a101eeb730e3e2284c7d65904f70ae1b59584b7374a78a709e1b1b9b6c14785f01e65d7c784f0da49c27b2c4a78a70be1f13ef3c785f01e67d77d4278ed25e1ed8b12de194278acdc0f3e2184f704bb3e2984d74512de9351c2db2484c7fbe79f12c263eb38824f0be1759584f77494f0b608e1f1bef56784f09e61d76785f0ba49c27b364a78670ae1b17eece07342786cdd47f07921bcee92f09ec7c32b0b87f5c1075f10c2616b48822f86f1ac34708fbcdb49c0e26b845f12b05e62d79701562f704f86c5d623075f11b0f8ba8f5701566f700f6289f590d7042cb6be23f83ac06a03ee412c3ecf169641e73a9ae6f1f5e4d1ea09e759d2b27e22eb0f9fc8daef01d6c719e06bb5591b35c0d650876a5811fd3921be2f83db396d6c6dc7c4bdf83b01be169bebc7cbd6b704fdf8ba94b7055fe4735ddf61f73b83f708dec54043de9eb804f8ed3bec1eef0fb16dda3c42ce29c0fb2f39de65c27bbc9c7e57e0ced76fbc2770e76355fb05eeef49b81f2fe1bedf05f7e311eedb85f77819fcbec0fd7d76fd40e0cefb3e3e14b87f20e17e9284fb872eb89f8470bf5c788fd7573e12b833df0c7e2c70e7f37e3f11b87f2ce1be56c2fd1317dcd722dcaf10de5bc7303f15b87fcaae0704eea9ecfe6702f70312eeeb24dc3f73c17d9d25e77ea5f01eafd77c2e70ff9c5dbf10b8b765f70f0adcbf90703f55c2fda00beea722dc7708eff13ad29702f72fd9f52b813b6f977c2d70ff4ac27dbd84fbd72eb8af47b85f25bcc7eb5bdf08dcf99aa16f05eeacbe15fc4ee0fead84fb0609f7ef5c70df8070bf5a788fd701be17b8f3f54c3f84c32dab03fcc8de4d03ef10ac6b006f861b80e3273fb27bd701de4be47c02d708bcaf17dee375ce9f04de3fb1ebcf82e6acce19fc45d0fc6789e6bc1f0b6afe8b0bcd37022cc8fd06e13d5e7ffd55e0fe2bbbfe267067f5d7e0ef02f7df24dc374bb8ffee82fb6684fb4ee13d5e17fe43e0ced7cafc2970e7e3087f09dcff9470df2ae1fe970bee5b11ee370aeff17af5df0277bee6e890c09def0ff08fc0fd9084fb5912eeffb8e07e16c2fd26e13d5ebffe57e0ced769fc170e97d7af49952e229db2bd1d23d229c385e9947e172b9d6e035890f7cdc27bac2e1f0a44f2a6bfc915ae876175f9502892772828e17d8e8477c805ef7310deb708efb1ba7f2845e0cdfabd4295006fd66e085516785792f0ee24e15dd905ef4e72defc7908ee81cbbfe1eb76c5bd67f8f3dbacc871057e9ff5ab5ad9c877bb90ef583f6da89aa019b7b32ab099ed3fccfb78436cffe13cdebfcffa11cbe6eab13a7fa8a680cde6b584d8beaf623b24c4f69ce56937c4d607c56a8784585fb834ed0a9ccaa5ddbb84f7589d3f5447e0ced60585ea0adc593b24544fe05e57c25dd20e09d573c11d6b87ec16de6375fe507d813b9b27176a207067ed905043817b030977493b24d4d00577ac1d72b7f01eabf3871a09dcd9f859a8b1c09db543424d04ee8d25dc25ed90501317dcb176c83dc27beb186653813be7d84ce09ecaee3717b83793705f27e1dedc05f775969cfbbdc27bacce1f6a217067eb37432d05ee6dd9fd5602f79612ee927648a8950bee583b648ff01eabf3875a0bdcd9f844a88dc09db54342a902f73612ee92764828d50577ac1d729ff01eabf387da0adcb9beed04eeac1d126a2f706f27e12e698784dabbe08eb543ee17de63f5fe5007813b1b070a750c87cbdb21a14e566479cbec8ad50e09f1b25456de0a7ccad5131e10de6375fe90b04f5b886b992668ceda21a12e82e67c3e518c7648a88b0bcdb176c883c27bacce1fea2a7067ed8d5037813bbfdf5de0de4dc25dd20e097577c11d6b873c24bcc7eafca11e0277b60e23d453e0ce3886d205ee3d25dc25ed9050ba0bee583be461e13d56e70f6508dcd93c90502f813bd32dd45be0de4bc25dd20e09f576c11d6b873c22bcc7eafda13e0277b63e22d4371c6e593b84ef539406de11d3a9ac1dc2c38c964eb176c85ee13dde0ee92ff0e6f56738df9fb743060abc074878cbda21035df046da21fc7908ae05e0df60f579fe5caccff3fb587d9e3f17ebf3fc3eafcff3bd866a80dfe43ab83cc732fe43c3cf028f22f86c4c337498807f18bbc69a63c3d732f0ba3edb0ba82c7d8c60bfbb80dfe43a12c4159fe3f9387846ae7c6f1cbe0f614be13e9f9fc0ebea9942d85942d86cbe5d6834083b53087b34bb8e11c26e25dce761f3baf65821ec7142d86cce7f683c087bac10f678763d5c08bb85709f87cdeba11384b0270a61b339f7a14920ec0942d86cfe7268b2107673e13e0f3b95dd9f22843d55089bcd49091d01c2e6f3b7f68167e43a4d08bb83709f87dd96dd9f2e849d2d84cde6c9876680b0a70b61b379d1a19942d81d85fb3c6c5ed73c52087b9610366b43876683b08f14c266f3ee424709617712eef3b0795d718e10f65c216c36873604ce6c08cd11c266f35443c708617716eef3b039f63c21ecf942d8f3d93507843d4f083b875d170861f710eef3b0799d67a11076ae10369bff19ca03612f14c2ce63d74542d83d85fb3c6c5e67592c84bd44089b952da17c10f66221ec7c763d56083b5db8cfc3e6758ea542d80542d86cce5e08ec69105a2a84bd8c5d0b85b03384fb3c6c5e86f035fd6dc16f72657b15f0734ccaf5d9096be8436cce5ca8147064e3f621618d7c88adad5f4ac6abed727be937204cfebc1af89b5cc17afab2b2e83886cbe2b0ac9c10ef3745ee3743eea722f7db22f7db21f7db23f7d390fb5d90fb5d91fbdd90fbdd91fbbd90fbbde5f7cbe2634564fc95f5c5ae1070a2d51f24730c459f2a37375b367794cd77e2fbf7049e94e081fd240ad91c9d10dff7a00df86dfb60216f4f3c1d05b71f8e2b9db7f28ce57e7eeb938ccf2ac62f05fc26fcd8faff22beef139fe3c4e62905f81c24369f28c4e7db05c16f129ecb39ab0136bf2bb45ae0b3dae153c4f63f2fe26b6c5e44f8bc94203e2f47f20ab03d6143c2be0f21367f34743c888727856f4e10be61734043605f8310efb37d05e0b0ef03604e5488f731be16b663f33639d7009f63c5f1de10dee3fdee270afcd89cd110df4ba1a36017ffee64e13b36f733b42ef2bb10ecd38dd62fbf8edd93b46545cee5dab26f0aeff17ef953048ea7b0eba9886dfcbbd384efd8bccfd07ac1b65325b6c9faedd7bbb00debb77f4b788ff77d9f2e70647345431b10dbf8776708dfb1399fa18d826d1b24b6c9fac637bab00deb1b7f5b788f8f496c12386e62d7cd886dfcbb2dc2776cbe6768ab60db66896db2318bad2e6cc3c62cde11dee3fda0c29e0f2136473404f63b28b38b7f73b6f00dbfbf0d70e5fd3cb1fa48797e21e9c310b996eb7b7957786f1dc33c47e0c7fb64ce45e28b7f779ef01d5bf71d3a3ff2bbd0b992f85a27892f3ecf325a7cad0358d0b6f784f7f858c70502473687337421621bffee22e13b36ff3274b160db8512db64632117bbb00d1b0bd92fbcc7c7422e11385ec2ae9722b6f1ef2e13be63f33343db05db2e95d8261b2bd9eec2366cace47de13d966f852e1738b2b98ca12b10dbf877570adfb1b978a11d826d57486cdb20b16d870bdb3620b67d20bcc7fb68af12385ec5ae70cde893c237c23ad3105b671a8279039b4316b3ff96adfd8c9a8760fdb71f0aeff1bce23a81df75ec7abdc426fecd0dc2376c3e5608ac77a4df8b36c9fa7677bab0099b63f291f01e1f3bba51e07723bbf2759da20ff2ef6e16be63736f42b7447e17ba49e283b2b125be96359a0f62634b1f0beff1b1a55b058eac0f3b741b621bffee76e13bd6871dda25d8769bc436d9d8d32e17b661634f9f08eff1b1a73b048ebcbffc4ec436fedd5dc2776cbe4868b760db9d12db646353bb5dd8868d4d7d2abcc7c7a684b5742136b722740f621bff4e58131762730342c29ab8d03d12db6463577b5cd8868d5df1f6e27d200cfe0d329652f65c184b29bb8f8ca5943ddf857cc77d4358531762e3c9a1fb251c39ff07c1b347117c3e96f2b080cfc61e430f8531a2b6f9d939a3211e0e1fb35d05ee93eb5ef6bc07f86db7c14f66fbff9e3c4ec0e36bdc7a0a788f0978e99178ebf87e330704bcc7057efcfe3e219ccf84f01e07ef91eb13ec7d36bf23f045245ee04be077dc173f675736ff3df4a483c1d7b2869e00f7c995af53ab0a7e13cdddf633ac0436109c0cfc5d7ace1a0983af814b01bf899ebb9cf0d6f136159b2f6f817e6b29876f04fc67187e2ff09b3c979c2f19e0f3da7f88c488d80b9dd7e99f0d7f5fb69f78805dbf0f3fdbc2fde16bf01df9cdcfebc8b322fa7694d7e8b37336c4738b4ee57bbdf33e439057497563676888e7d49c3a4b11879da1c1cfb109fceafce6e7d804f8191aac6e136073c3437c0d219f43cbfacc43cf87c30b3d07ee9177c5336a627093de636dac105f5b98027edb7f9f3690f9c87cc10fcf8b1e167f2f04d726f2b05e0adfe3fb4a84c0bac3d04be01eb9f2beafdee0b7cd6dfd83022e5f5bd807844dae7c4d615ff09b7c379efd66eb08437f0a786f024eafb330791df20f210cbe8ebeaaa3d77ade47f215785e0df0e4f73806c87778f8166f37f76371501a1966ac3890c60bb7f15df56f437c6d21fc4dae7c6d610af86dff7d3adbfffe74be668efbe9fee86173dc00cfa7f91ac546e03779fe37c023cf1be298d270f87a43f81b841be0eb0fa29dd1c1cb2db6d620c4b9f407bfc9f5bdb0cd01b6de20f43ef009d65f11e2eb0507083efa2178f743f02eb97ec4fcf75ff0dbd67f63a980cdbffb98853110fc26bcf8f77c7d1f5fe7cbd3e8a780c327e01eb9f2f57683c16f9bc319ab1d1fd8381109eb332bb21ef49910e6e7ecf910f03bc5394a07be1fe26be68682df5c6388334cc01178850e021b59bd819ecb15cd5f99aefcacab105bdb19fadbb17d03df6361b63bbca863606ced5180cff7f832d2f7e96fdbae4d23d87bec2c9d511d9ceba671ecca9e07ad48dc60c02a2bbbcf1c87f021df57459e9130f93e767cbc86af09ac017e93f77858f1e8c0cae36028011829ea1801495f98f43dd6ef01fb2ba4efb132098e1949dffb9269c8d753a680dff6df9b0f3af1b385af41e05a1f8c8e1bac24e0f33592bdc06ff2adec5c7256272c2b13f93acaaa02265f477918f84dae7c4de370f03dbfcfb9c3f2d16d1cb1ef433fb0ef9b81dfb6565bf9fc46aed17731b4e76b2d2bb32b9f8bc0d7598e00bfc995af791c007ec33c9dad7de4f50efadbe675668a80f38b80c3eb903cbfe1eb13470adff1bc82eb3eca89b7339b46da13cbee686928c8e224c8bea7f907099bad8d2c6b6bf173d462b6a52a05e8594ce3ec96418eb5dc4aa7994817fb7f33ad6956a6d5d39a61e55a4556a1fd57a67d5d66ffebfce2f7f997ddadd418df10e8ca3407b4ffe94c832db5d6d89fe639fb614fb77f94d8b7f2ecf709c678fb9b52ab8fd59b622fb39f2db4718aad022bdfb6ab193d4f89879e49ff9f63bf914f413353ca05715fb92008b902fbdf3cfbb352fb4342b2c4be3fd6be5368ff576cdf5b68ff9e685fc957f3ad5ed61cfbdf48949976b005d60afb57b6fdffe5146fbe4dbbfc9bb14c3adabe2b7e33cdc62ca4ec96d977b8a0cbeddf0594e174faff9594691e653fdebe576adf23d62cb646d9d7d534b4f2b617db7fcbc2cc6692c9391ead743f408fcee2d194655b43d8a753bffebf18a9881821d25726e983fc93924e73bfcde562e2ff347432994ab40071307a51c90211f77a5be9b42c9f564e41751bcb5b28f76f47effe56dfa8b6c89521d1dd825a108ee17df57b8c7f677951fd4a91a6f5b1d269d1db328669d184257869f4443115132a554ac9204445f90332f969b5607a12e577decba7efa94740655af8454600dd0a35dbced5a682c273a6fd7f87dc0c6a4601252933ab98fe35d57e23c70e929835d27e2b97e69f33edffe759abac72719b418854a1d153bef08d65221641415904d13a4b7685a48f3931f2467914552db3221c45e9b4c6d5348a236361d1aa560aab6ff1a436f4bb1f3fbdeccc330ebcf9cacf330a267efeeb83774f29cc3ee7ab0395e4f1549dc6533ca163311592c554f56427a5d86547b478aa516657389ec83f720d6b22be1e8b03a6608a4cc11ac9f675f2ac88a2e4d8efaa6b4816fe7713b323b980b511278c4d0193b09244c20c22611d092bab523581152184205796454ecd8a29a8e3736ed2a3d04490a012eadcf5a296b3aaae5d45a61edd2262be51f578fb71badd5098603fcbb1dfcfa39551723fb280232184db9c915f445796ecd1d0435456aa6a03aa6a07d01ad66586295e55a27806f1d7861237a0799c9818eae189a11a96cc1ae926b3ea1872635de41a1872135de49a1872535de45ab26443774c999b946413ee76e17f8db2bf5d621bb392d60557d8dfcbba69a2279766ae934b739a5c522d59e7911a232c99d496c51db9d94246528cbae678d4d5c1805b6a02d7c5bcad95aeb7d59321939cbbb51bca5570e0fa18e536ba941b602aa76aaadc10036eab09dc08036ea709dc589657502fcc319a57ccb0ef395da4a3e9d37cdaafe6d482c977a462904bf148ba8cf676f45ca3bdeb5ca303cd353adaff4f1c372cff68228b4ea27a4737d1d9018fcea61870274de0661870674de0e63207a4b9d5bc0a74c06cfbefd5f6533de74b73ed7c5da8f3b58fe97c6e79618ed742168d44edae6ea2b10b1e8d2d31e06e9ac0ad30e0ee9ac0ad31e01e9ac06d641e5dafa2b3d46cfbddc5f6bf0457cfab7bbaf6ea749759aa0a37ccb353b10c2a4333836a8b01f7d2046e8701f7d6046e8f01f7d104ee802599be9a49a62306dc4f13b81306dc5f13b833063c4013384d064c728f816e80d371e02e98570cd2f48aae18f0604de06e18f0104de0ee18f0504de01e98570cd3f48a9e18f0619ac0e918f0704de00c0c788426702f2c818cd44c20bd31e0519ac07d64c0a4f196e906384ae3ad2f069ca509dc0f031ead09dc1f031ea3093c00031eab093c50064c7a21c83449ad5e884118e5f19a940763c0876b020f9101937e4cb265986eeff0501938e9d89d58f67218fc3ffb9f72e03571f06118f34912e63f2f082a313f0c7391c9ba2e321c439ea28b3c42829c4e7bdc4eb192db472c9fce37d6368b8436c55a601d6b39f3b078b845b4394018f1f95cd3eceb22ca82dc272c624f038cdec8995aa60f187ba7fd86a32df79312cd5b4136c80bd2c61619504c0b908a02d67c92b189d6dce25a4cb2afb9b60224b62b213303a6d3d0bda50dd6541c89e534d9929ce66d59361625a7198525d919ba493653865c9fe295f7d50ce2ab6457c1ea343f2f17ce743c9c2c59d6407bb68fafd0acc1194326788be80c5b076fb27d2db55651575d6a3bf04ae638d9f63bc5761879ccc9753203b262a0952070c072fe912787d934391ce6223998b40a4b00a3659e444662c8b692e5268535a599cb541b791e4d86c7d1db44252776f3e9abf9d6f1f6954f965519e719236343c630c9c69431ab2b0d70e0b118f05c4de071581a3f5a378d8f972193dc866cbaa95bc33a1ca33d4f97f6042c479d2fc9510f05d472d48918788e04fcc1a01af8242c292c70e32351bc7a3206bc5096c63a5a165d3b5068a7e9423b0595d259323934f5a7d2c2309c1ba4d22995c5b4c0ee0ede2fb2df7026a7abf09c823945aeae534c95219378cb93c4db2f8af1760406be48023e2ea4063e0d8bbbc5b2b8231d12a4dc20d59225ac6c8bcc0d53e9328154ba3264059d7f934b63ae84c66baa758295619d685f4bedb753693950409f91bf494c93bc56254ea763fc97c8f85707fca702862a216663f956be24df0a28e65b3364e0a4e273ac85547cc816b7ea159f99986c0532d9c8c0d468bbfa426aae2be8fbd3a903e495d595731354401e29e1954e6704145a15592123ad05b28ea684fe1daea290b0c373b6752a5e646b62b1e2c5ff9157bc88226981de56ec8a5722d86315ac5958a65a24c954032a99ea6c2c2d2cc7d2c27171a585a3643e47278b2caf509fc353d4348a4d529e7e859f6c1d1d125bff74d2465f179e95288edd02245320ef2f64ca9590cc944ca35c60d326a433e9e435223e4d12f2345142d344329963e9620e566a974a4aeddd95d44aedb93297a513628a2bd465b3284232dc7685cc6de9cc9dfe2e223f913cdbd0e596253453cd6599aa9375b709907cb098169b79f67d92f1c2e7dd02b568b5a1c46e171653c4e9b45e546c73594caba072275f499d3cd976628e7e345600ac9214004ab5ea63b024b45a92840e2926a17918ed35bab4e763b48f97d05e5b598d760e067e82047c621535f0053270923193bd7e745a880b3160b27977b9ea66076a8ed34e5828b41417d0b6026fffe5d23b6becff17d8f716528854ba7496af0d5061998b697b9244dbba8adae661129caca9ed22193071cf756e80a30c812d960193fad7291652ff22dbf9aad7bf9660b29f26917d87a2ecf958325faf9bcc8fc5904fd7455e8a216fd0452ec090cfd0455e8645e246492492e5312a915888816f9280672b8217610973b32c6fea6891d917e14aaad37c0af76be4d8e9b194e63ca976399dc32650c3fe11d2e791cf1acd2ae97c39c6738b8ca7b35307590145ea1439b40f8d8438c5f62e95508fc3a4df2a917eaba2f4c518f89912f0838ae025985e67c9f46a1a235e73e9c299f0dd5ef65d151d4b313667cbd8909fe1785309670526e93689a4dbabab49ba1233e21c9911a4a870e41b6c4b369976f8e5b05d4656d2625c5dc655188373650c48ce36b1ac623035ce6ac16a4cd2f32492beae28e91a2c473e5f37473e1ea37d812cd3aca146fb048cf685bab4d7ca90892b5d6421b50eb241997aade3442c9c4bb0702e8d2b9c9330a52ed355ea642c82b74b2278444db5085e87815f2e015fab087e0a067e85047c9f22f8a918f89512f096b5d4c04fc3c07748c07315c1d763e05749c02f56043f1d03bf5a02be53117c03e6e4d7e83af91918ed6b25b41bd656a3bd11a37d9d2eed4d12e474bafe2b997b7d88b39fd4b643b8de72bbf8856cf52cdbe72356f85897d26659bc90127aa78c924251be05f3a61b25de744031116cc5c06f9280cf5574d53331f09b25e01b15c1cfc2c06f9180d7ada3067e361699b76a46e6360c989c9850ae2ed89d7a67114d63a9744d2bd940ab90fe55483731cca303d739d4f7c31d4e7ce09aecc896cabcb798f97481eded3dedbb2aaccfc158df2e634d465e49276eb8deec34259d66886c5e61aad599d5ba3b2bf13a17f3815d121fd8ade860e76146dfa1e903e7cbf259baf233df683e8bcd23cda69df76407c545d4539629cf3a8d9e27dfe93a4fbe8be6c964958e39ae58fe7d812cba49dd7ab785d4adc9a12ed50965a5baf58598cfde23f1d9be8af9d64518f8bd12f0598ae01763e07b24e0eb15c12f9181936a0dd9fd53ab5a732946fb7e09ed438ab42fc332890764396303ead9cee05626dddfa4900e9a3933514acb72c912a5fc643b66e08312034bebaa19783966e04332034934382374c41cb26e9814048be8ac253262a762d61558827c184b90e4045af5c6ee9598857b651692795053ec4812232c323a55ecdc8185ff28e642f3ec7fc960608195cfb25b675e21b9bf9c56064811abc2e12a8cc363320e4d18870cfb3fa79baac02ecc4971bfd49acc8af7f8b95c8d71795cc6a59dc0a5302226260a0a4da2b1b6841607f133bc0663b82f965a23ed7073cbb19a6939a3dd8b68854ecd7baec5b83c21e3920ab8a871226f1753f554d85d87a5e127b134fc545c69f87a4c85a7652a548dc8a54652ff55b1ea062c34728c934ecd702706fcaccc0c92c5cf29ebec77faa58f56acd9df280b91003f67952f3baa36502b3b6ec2c09f97808f5004bf1973ad1730d77a312ed7ba45160e29e75e7213d95186aa6fc5805fd604be0df3a25734ddf3760cf8554de05d326012f7e4fc0d717a320150999e7c07e685af4bbc704943352fbc53064eaaade41429ad6aeb5d18ed3725b4372ad2de8d81bf2501bf4511fc6e2c65be8da5cc77e24a99f760ee484e8c2a975b921572e18a13d9d0662a2dd04801b75aa332702fc6e23d198b70f58d14bdcb2c67e0d6993a173f873d1887fd320ef519873eb4ca54c416b8916dabe267701fc6e07d1983aa202ec8023bd2965709ed7ecc7d3f90b8efea466aeefb00e6be1f62eefb515ceefb2096e97d2cc9f4428a99de4398429f4814eadb584da18731f04f25e0d98ae08f60e0076471ab08be178bdbcfb0b8fd3caeb87d144b0e5f44cb9a7a27386b7a0c6371307ad6d42b8159d3e318872fa3654d7d139835edc3187c152b6b3a9286a7b618e809cc7dbf96b86f561335f77d52064e34fb0673df6fe372dfa730c9c899543a15bda73175be97a8f3b2a23acf60eafc80a9f3635cea3c8b19f193c488b4a66a463c8749ffb3a6f4cf63ac7f91b05ea7c8fa05193891fe574cfadfe292fe45cc88df2546a4365333e2250cfc0f09f80845f09731f03f25e0b98ae0af60f2ff85c9ff775cf2bf8a39273967152dd6fa24b8587b0d63f18f8c45b858eb9dc062ed758cc3bf320ebc58eb97c062ed0d8cc17f3206d5ac70b1369a8e061729ce287c137360b25e5874e08ce66a0efc16e6c0e43452a90393230dd51df86dcc8890c4889d8a46bc8381a748c0abb650037f178bee4a01bd72e13d8c756509ebd58aacf7cbc049f748958066f7c8fb18edaa12da3b14697f80895d2d20495b64d276f439c3d9f6abcbe9acdec534df29a653ea9da5a1b97436c654cb3918c7d956208776c9930d0796d0df3cdfccb116b0b912bde85c09be25c11acb39232195ce5572baf053e920482edba86229bd5342dfca03c8f2d918f96c56099cbfa13a30f1211641d52511b44b31823ec2c06b48c05f5704ff18cb8c6a629951adb832a34f30236acb146aa966c4a718781d09f8f98ae00764e024b1d675931945e9bafe4c029c4ef72eaf98a931e5373c4becd4987a32bda45363ea07624d8dd1e78a4d8df91cf3a506b2d4a6e84b5f60454443dd22e22086dc4817f94bac7c68ac59187f25f37fbac5fea20af17f9dad08a37b7e13d79edf947a7ed7289eafb761a23c26bec69ca799aef37c83394f734de7f9164ba62d24c9b47b6bb564fa1dc6baa5ac4a4476bf19491b5a797435986c1d612aad2ea52a4ef9fc1ee3d14ac6836c65a486ff0386df5a33767ec462a78d2476962bc6ce4f1878aa047cbf22f8cf18785b097887366ae0bf60e0ed24e0b314c17f958193386aaf1999bf61ac3b485817a4aab1fe1d63dd51e6e224a7e173409c7a7be42c7015b3fec042ee240b9954899dd388d3cb0e2e4c2fdb736b8a9df09d53985418fc8931e82c63d044ca6022fdab946e50e2b46ee25b96fa17c6254dc6a5854b2ee54fb653e1f437e6785d248eb7b5ad9ae31dc20ceeaa995cfec180bb6902ff8b0177d704fe0fd3b98744e75b1475b60208784f5951d04e0d3c20032796a66b4a12940193dc2743b3d117920193cca517d6deee1d577b3b0593bd8f44f6711dd464af8419d11733a25f5c4654c68ce82f3162a3a2115530f00112f0dd1dd5c0ab628e3950969d924d15a7597017aa5cda96e019799ad585167885ecff918b9c52e9aff02180cbe9139ee596580574ff9d120bee32e1749e9139afcbadc825493c1cd269e614b18bcab2f3549a99e72a4ebbac86693148a60539ee036e65e9d4a6c3056c78c7875594618115dea8c0e14738c742e86dbfadba30ac3ae63083250e93a2e83035b02435044b5243e34a5235312386498c485334a21616d387c9629aec9722ef0a9ec33a9123d753448bd3b4a84fbbd0a9c24ef771d8af23534011f50cde551cf9ac94fa55a924152da00c8b4047b3835dc45ae12afe551b536fb866615607031ea1095c57064cfa0d46eaf61bd4c3dc7494c44df7745273d3fa981e99323725f6f02c27fed646032ccc2c599864dbc148e70f3f545b2fd5101372b444c8ecce6a4236c28c1a830919deec2593a611323cbe58c9a0c69841632506fda0685013cca07132839c337b7258875f71dc2635c5421d2f0b959c0de71cba302f62f94f78df6095b09b61611f2e0b9b6cc2c497d244e710df129ae6582938012b0527c6550ab6c0ac9e84f53a9065704e576a1e75de7817c0b5c4dc77b2c47dcfefa2e6bead30b3a6c8cc225ded6322fa284bd970ae530a8b2beef87327335431ba3516ad53b1683d22ae686d83893b4d22eec06e6ae2a662e0d3650d5945f0b6587b335bb3bdd90e633d43c2fa8022ebf698bfcd8c55909236c64afa285f310175c0c23c521626b134934d4222a341056cbc4825c48e9884b32412b6ecae266127cc9cd958921d498d201bac962f7bb891e16236de7a4367ac6a77946ed52e0d93738e44ce9d3dd4e4ec82c9395726673de091ab58cb31d772ce132242ae51cedebb62c61d2d31eeda9e6ac675c38c3b064b6efaf583ee9841f324068d485733a807063e5f023e34430dbc2756e8e46085ce82b80a9d742c5616ca6285cfd0cc48e892f60c8c432e569fe11c72686e127fc8bdb090f36421d707214fa36f1751af141764ab30e88d31582463d0c22abf283c1a93f8eab17d30df5b8cf9de92b87caf2f9680f22509e8606fb504d40f13f65899b0646f02596db218882bab532e623bebc753afec8f99bf54627e561f35f307602560816e093810435ea68b3c08ab46166a56230763c0459ac04330e0e59ac04331df384ee21bddfba9f9c6302c068b7563f0300cb944177938a674a9a6d22330e0159ac023b1285c2989c2598a51380a035f2501dfaf089e89659dab655927399a533c702f9f4deb0a1f0be274902fa6596ca1e56c789d5796cd8a833ea9ac03bb944e892318a934c375d64290c948f1ed429785c9b64622db0e45d94663e0c74bc01bf657031f83819f20011fa7083e168bf0b558259034e3489491de96354884abb53dc661069e286bea2b1a381e33f0249981e4e7b2b2de3215230ec7c239196bc085fb2123fd3dbe953f13b0f0d7c9c2279957f9fe508c477c75c98958b49e22f3db816ad13a0933f754acfb81b797f948ab9b6ca69772363319e3759a8c5763e006e36d56e18edaf1daa96a0ac664bd8c491b8943b861149f6b4cc55ce374591d67909a6b1c8119be018b02f9cc3cfd8c6d1a66e6191233f70c5633733a66e646ac015b4447859d31e6f04856fcfd8bd918834d5803167a962c747daf9f8171da2ce3d401f17af7dce2f3ff9998636c9138c6f6216a8e712406be55d6b656049f85819f29014f1baa063e5b064e8aaab3dc54c86fc0818fc2589f2d617d4891f51c0c7c9bac9c1ba6063e17eb903907eb903937ae0e99a33123ce93558f0f5333e2180cfc7c09f82e45f07918f805b2b264b81af87c2c3bb950969d74a7ef89d90476441399c63543722090d32e5a6839138cc8f9bacb1527e4e460ac2f92b126e693391bb20c4e25d40558445c2c8988a18a11b11003bf4402be4d113c174b64976289ecb2b812591e66c476594367849a118b30f0cb25e0bf28822fc6c0af9065fb23d5c09760e0574ac0e72b82e763e03b24e0b728821f8b25b4ab6409ad194b683d9432099524b81433f66a89b11f291a5b80815f2301dfa708be0c03bf5602de77941a7821067e9d04fce54c35f0220cfc7a59dd42117c39067e83047c60961af87118f84e09f8f98ae0c558d2b8519634ec5a28dd93016f7775a73d87f97480c6d9492195edb79047af8574127a2afd52769a462a4b5c7ca2ac53da0e574a5e25984d37c96c22cb2be1c97023eddbb93491eb36bc4a311e37cb789001ae899673d608af63a4951d745b4ca7e82f8c6044ba4256d2676b2c676a70a1e2ccc015986bdd2271add747abb9d64a1938995d78ab9b6642071c78950438bdb5fd33a9672b4d677a131cf5b3956e0b90c5aa911a907fe4cbb66f0fc8cf578ac5015b90bd1af3cc5d32cf247136851e8d5940fbfe9d02900cc62eb44a957b40d7603e7787c4e7b2c6a8f9dcf1986177ba49fa8933f204ccc8bb2446ee5634722d66e46eace74c9c759065ffe6b96eb8a389e4c96b94cc3c1133f36e89991dc6aa99791266e63d32331b0a719928134fc64cbc5756fa2a9ab80e33718fccc47af46711cbabb2589ce6b03275b2954767d8a818770a66dc7d12e352c6a919772a66dcfd32e3ea46356e8cb269a761a63d2031ad54d1b4f598690fca4cab1661da5836c2aa62cce998310fc95aa48ac66cc08c7918cb33c3c6cca4159115b4702da523350bed22378756a056284e093d0333f2118991d9e3d58cdc8819b91773c6916caf2ee2783c6dc56bda26ccb447656d3245d33663a63d8615e6d0b4315a866dc10c7b5cd61e3c5ccdb0ad9861fb648655170c8b279d9d8999f384c49c6b15cd390b33e749acd886e62432a59d8d31794ac684f4b08da6e5e7025ad10ca7fe89b479b29c8ed4aa31d88631785ac680547cc7d03a180915aa329d86ce1ba1e1a69b0a9773302ecfc8b8b4b4e01479c82593c643296d60c046e40adac0509d207f2ee68acf4a5cf18f096aae781e06fe9cacde36510dfc7c0cfc7909f84645f00bb0c87a4116599d2cd2625a4a17da2e2fd7839f5736633dd572261bf065de9123cce169342a117821c6f4452c5b96f742ccb4c8a151ab94c2be088b829724513077925a145c2c0327cdef97b136ad084e9ab308f825986aafb8e9348822c9a518eb5713c0fa324cefd7247a379daca6f7760cfc7559278d22f8e518f81b12f06d53d4c0afc0c0df94804f9caa067e2506fe9604bcea116ae03b30f0b765153645f0ab30f07724e0eba6a9815f8d81bf2beb8a9eae067e8d0c9ccc1e7e2fa0397bf85a2cddefd74cf7d76194dfd7a57c3da6f40712a57f5154fa060cfc4309f8ae6c35f09d18f84712f082196ae03762e01f4bc0d366aa81df84817f2201ff4811fc660cfc5309f8c547aa81df82811f90804f9da5067e2b967a3ec35ab76442d440fbbf9565b7e35fa3751b16fae7b2d06b59e1c95cce3e17f358679d6ad7dced58b85f600d2a1eae335592d4b5c27bc9956828b00b637210ebc7e34c9cd1347234e81afbdb45712a710716fe97b2f0e1ace2d83ce29b3a7727e6ee5fc97aac66abb9fb5d18f8d712f01d47a981efc6c0bf91d59de7a881df8d817f2bab28ce5503bf0703ff4e56515404bf1703ff5e56513c5a0d7c0f06fe83aca2788c1af87d18f88fb28ae23c35f0fb31f09f24e07b15c11fc0c07f9680af9daf06fe2006fe8baca298a306fe1006feabac6ea408fe3006fe9bac6eb4400dfc110cfc7709f892856ae07b31f03f24e0a9b96ae08f6285c09f582560122dec96d2eeed526b15ed615b1a6711f41816fa5fb2d09b812228168bf80aa0c7313e7fcbf8d8f7ecaa800afe3e0cff900c3f48f17b2985f004e62cffc8fad60bd59ce549193869ecfceba6bd156551e55318f07f9ac04f637258c1f2726c5594e3190c3c2001dfa508fe2c061e94808f2b52037f0ef3c35030c68e24f0e89bf8f7cb791e0b3f45163e59e1156db295b3b9d90a5a05e7e3f6e1b54d2abc5ec0785592f122087ca70095505ec4a2b6b2246adf568cda973013aac84c20594ca9e2d0c7cb18fdaa12fa3b96abd17f45029e4e16b0052ae6fc9989655ee76c6cb434c1a770540b92a3cf22354b4f25f6463b69469f15d934cfaa249f38563d18eba41bfdf0b14966af62ee5b23a8d7a5f79a0c9838564d490c64901860128961107590305ec7c8d792a53dd2a7517ef2181754c5b637b014595b9222d71ea79622dfc4c0eb48c06715ab81bf8581d79580f72d51037f1b03af2701af5baa06fe0e065e5f027e4011fc5d0cbc81047cef0a35f0f730f08612f0ed2bd5c0f763e08d24e0ab57a981bf8f8137968067af5603ff00036f22014f5ba306fe2106de54027e4811fc230cbc99ac3e71bc1af8c718787309f8ee13d4c03fc1c05b48c0b7ad5503ff14036f29012f38510dfc0006de4a023e629d1af8675839d25a568e90422c72953b5941e16c1fbec84aa5d56267b73db289b9537d27c5b5b3e13cd9845ca5acf91ce3d646c68db4e116b16dcc4b5843016e98af12f21798e4a9b21cf76435c90f6266b5d5ac777c290326f381dab90126bb8223c05f618cdbcb22c2b2247a44a1fd3586de41865ea5cc05d39983a984f50d16b11d2511dbf014b588fd1603ef24015fae08fe1da652674daff91e034ed304fe0193a38bac085594e3470cbcabac205204ff0903ef26014f3d550dfc670cbcbb047c8922f82f5864f690a5a5522bd661c67cc299ce01c6ce4159f3228e44f6f671c6bf6251d45356b3548ca2dfb0284a974511999b5ffe446915637e978547e6cc6604f903d01a25abd27b05e35995fe0766576f995da4944857b2e34f0cbf8f0cbfba65491d4f25c4bfb010fbca426c2c8da949d421f9ee0ce1276a0ef937c6a41fd659483a9f5433ec43b20eb1b6f6cfc01156f2d62d66dbbf965bf1ac59ec1f2487b6478a41dd58daf53480763d352a6759b4f0b1aea47f64f1437e0e0c92135923291d3ee9942adb5bbe102c173595f0a8f91773804158770f1f955a6491ed8d4b9951aabde7ff6139e160494ef8c746b59cd00a22e04324e0dd37a9810764e0c4d2a19ad59a20063c4c161575d0a82864c5974ad82159d864b2e06141cdc9822918f2705de44a582c8f90c4f2c42d6ab15c59029ede2ed95996b3cd7c711c59d6c82039e93552839e4886350ac9b0a2858e65585564bab527bacd4ba26ece7b4ed14856ca38eb5fa780fde54ae2d03433480e88163c96fd2357368b2adbbe9ce5f1f2c354af8a2585d1b221e233d59242352c5f1a23cb97881b91419425acaacd372d876b4ee2db21b73a96938cd5cd496a60c8e374916b62c8e375916bc990492c1e6e3f6822f1d272e0f570f0da58944fd02ce3ea607a4cd4d5a32e863c4917b91e863c5917b93e863c4517b901863c5517b921867c842e7223cce9a6693a5d638cf2745dca4d64c8a4929ced8672031cb8294679862ee56698ca3335556e8e513e5297720b0c79962e724b0c79b62e722b0cf9285de4d698cfcdd1f4b93618e5b9ba9453319f3b5ad3e7da62c0c76802b79301d3e37ddc004799ccd71e1379beaec81d64c884498e1bca5136a7ed8869b140538b4e98160b75b5e88c6991aba9451a56ebca4b40adab0ba6c7225d3dba6251b858330abbc980c95cc7256e809be22383ddb1949daf99b27b60c0c76a02f7c4626fa96eeca563b157a0197b1958ec2dd38cbd5e98c8859a22f7c6808b3481fb60b1b75c37f6fa62b1779c66ecf5c362af5833f6fa632297688a3c00032ed5041e88c5de0addd81b24ebcfea60ff0c1c6b55c45c5ed9d8646267f3ae741317d370c5066371b14a372e86c890c9b10dabdd50be0b071e8af9e51a4dbf1c86011faf097c1896f64fd04cfbc3b1d85bab1b7b23302d4ed4d46224067c9226f0284c8b9375b5c8c490d7e9226761c8a7e8228fc6643e5553e63118f0699ac063b196f27acd96f2388cf1e99a8cc7638c3768323e1c637c8626e30918e38d9a8c2762c09b34812761526cd6946232c6788b26e32958a3736b021a9d533139ced494e3084c8eb334e59886657167eb6671d331a1b72540e86c8cf639bab46760b4cf4d00ed9918edf374691f89219faf8b3c0b13e4820408321ba37da12eeda330e48b7491e76089fc62cd443e1703be4413f8680cf8524de06330e0cb3481e761c0db3581e763c0976b02e760fe7685aebf2dc090afd4455e8821efd045cec5fa69aed2eca7c9c380afd6045e84f5725fa3d9cbbd18637cad26e32558ec5da71b7bf99816d76b6a712ca6c50d9a5a2cc580776a02176052dca829c5328cf14d9a8c0b31b7b859d72d8a302d6ed1d4623946f9565dcac761c8b7e9221763c8b7eb22976032efd294b914a37c872ee51558a97aa766a9ba12a37c972ee55558fadbad99fe5663c0776b02afc1fce21e4dbf381e13f95e5d914fc090f7e822afc554be4f53e51331e0fb35814fc2a2ef01cde83b1913f9415d91d761c80fe9229f82a9fcb0a6caa762c08f68029f8645df5ecde85b8f317e5493f1e958ec3da61b7b1b302d1ed7d4e20c8cf23e5dca1b31959fd054791306fca426f0664ce4a73445de82317e5a93f1562cf69ed18dbd33312d9ed5d4e22c8cf273ba94cfc6aa44cf6b5689b661945fd0a57c0e86fca22ef2b998cbbda4e972e7612abfaca9f2f998c7bda2e971176022bfaa2bf28598c8af698a7c1146f9755dca17632abfa1a9f22518e53775295f8aa9fc96a6ca9761c06f6b026fc7447e4753e4cb3191dfd515f90a4c8bf734b5b81203deaf09bc0313f97d4d91afc2187fa0c9f86a2cf63ed48dbd6b302d3ed2d4e25a2cb7ff5833b7bf0e03fe4413f87a0cf8534de01bb0d83ba01b7b3b3187fb4cd3e16ec4287fae4bf926cce1bed074b89bb1e83ba8197db7605a7ca9abc5ad18f257bac8b761c85feb22df8e217fa38bbc0bf38c6f353de30e8cf277ba94ef942193a91edfbba11c65aac75d326032fbf60737c05126a9eec6b4f851578bbbb1e8fb4933faee91019373dc7e0eea9fe3762fc6fa174dd67b30d6bf2680f57d18ebdf3459df8fb1fe3d01ac1fc058ffa1c9fa418cf59f0960fd10c6fa2f4dd60f63acff4e00eb4730d6873459efc558ff9300d68f62acffd564fd18c6fabf04b07e1c636d85f458efc3580742faac9fc0580735593f89b10e2580f55318eb144dd64f63ac2b2580f53318ebca9aac9fc558574900ebe730d65535593f8fb1ae9600d62f60acab6bb27e11ab3ad50869569d5ec228d7d4a4fc3246b9962ee55730cab53529bf8a51aea34bf9358c725d4dcaaf6394ebe9527e036bd3d67743394a9bf64d0cb88126f05b98c80d35457e1bcb331a2520cf7807036f9c00f07731499a684af21ec6ba690258efc7c09b2500fc7d4c92e69a927c80b16e9100d61f62e02d1300fe1126492b4d493ec658b74e00eb4f30f0360900ff1493245553920318ebb60960fd1906de2e01e09f6392b4d794e40b8c758704b03e8881774c00f89798249d3425f90a63dd3901acbfc6c0d31200fe0d2649174d49bec558774d00ebef30f06e0900ff1e93a4bba6243f6095bf1eba95bf1f31e49ebac83f6162a46b8af1331685190988c25f30f05e0900ff1593a4b7a624bf61acfb2480f5ef1878df0480ff8149d24f53923f31d6fd13c0fa2f0c7c4002c0ffc62419a829c9218cf5a004b0fe07031f9c00f07f314986684af21f96fd0dd5cdfe48b7ac1479982e7240864cc4384c538c204679b82ee510863c421739051363a4a6189530caa3742957c690337591abc890c9fb596ec4883253a32a4679b42ee56a58fc8dd18cbfea18e5b1ba946bc890496fd538cd6ead9a9816e335b5a825032679f3e109c89b6b63e01312005e079364a2a6247531d69312c0ba1e063e3901e0f53149a6684ad200633d3501ac1b62e0472400bc1126c9344d491a63aca7278075130c3c3b01e04d314966684ad20c633d3301ac9b63e0472600bc0526c92c4d495a62ac672780752b0cfca80480b7c62499a329491b8cf5dc04b04ec5c08f4e00785b4c926334256987b19e9700d6ed31f0f90900ef804992a3294947ac8eb640b78ed609435ea88bdc19132357538c342c0af31210855d30f0450900ef8a49b25853926e18eb250960dd1d03cf4f00780f4c92633525e989b15e9a00d6e918784102c033304996694ad20b635d9800d6bd31f0a20480f7c12459ae29495f2cfb3b4e37fbeb872117eb22f7c7c428d114630046b95497f2400c79852ef220ac2767a5664fce608cf22a5dca43b0f85bad197f43312dd6686a310cd3e2785d2d0ec3b43841538be15876b43601d9d10809787a47fb67609195bcd305c7da0845d6026a45be75bc9563f153fb4828648ff552cb39537abc7d8f9c70ad7ed6e089b26808084ad133064f0a913306bb96b33f312cb1130747ca62a2138989b9498c89f1d618ca7519b56e2afd66253d8b362fae53334f76adfa3aaa7a6a395bd519610a8fc23a714fd1ecc4cdc452e8a90948a159327092424f73c39af832023c5a064c1c6ebd1be07538f0184ce7d335751e8be9bc21013a8fc3743e4353e7f198ce1b35753e1cd37993a6ce13309d372740e78998ce5b34759e84e9bc5553e7c998ce676aea3c05d3f9ac04e83c15d3f96c4d9d8fc074dea6a9f3344ce77334759e8ee97c6e0274cec6743e4f53e71998cee76bea3c13d3f9024d9d8fc474be30013acfc274be4853e7d998ce176bea7c14a6f3259a3acfc174be34013acfc574be4c53e7a3319db76bea7c0ca6f3e59a3acfc374be22013acfc774be5253e71c4ce71d9a3a2fc074be4a53e78598ce572740e75c4ce76b3475cec374be5653e74598ced769eabc18d3f9fa04e8bc04d3f9064d9df3319d776aea7c2ca6f38d9a3a2fc574be29013a17603adfaca9f3324ce75b34752ec474be5553e722ac33ef36ddcebce532e40ef6cfdbdd508eb24dca7118e55dba948b31e43b74914b64c8a467f34e376244db8b1ca37c972ee51518f26e5de49518f2ddbac8ab30e47b74915763c8f7ea22afc15c638fa66b1c2f036e63ffbccf7e1012803352ed9f4d69465a2e8cea41348c1330f2f76b925f8b917f2071e44fc4c83fa849fe24acf07a280185d7c918eb873559afc3583f9200d6a760acf76ab23e1563fd6802589f86b17e4c93f57a8cf5e309607d3ac67a9f26eb0d18eb2712c0fa0c8cf5939aac3762ac9f4a00eb4d18eba735596fc6583f9300d65b30d6cf6ab2de8ab17e2e01accfc4583fafc9fa2cac707f41b7703f1ba3fca226e56d18e59774299f83517e5993f2b9986fbc9200df380f63fdaa26ebf331d6af2580f50518ebd735595f88b17e2301ac2fc258bfa9c9fa628cf55b09607d09c6fa6d4dd69762acdf4900ebcb30d6ef6ab2de8eb17e2f01ac2fc758efd7647d05c6fafd04b0be1263fd8126eb1d18eb0f13c0fa2a8cf5479aacafc68a988f758b986b30ca9f6852be16a3fca92ee5eb30ca0734295f8f51fe4c97f20d18e5cf3529efc4287fa14bf9468cf2414dca376129f0cb04a4c09b31d65f69b2be0563fd750258df8ab1fe4693f56d18eb6f13c0fa768cf5779aac7761acbf4f00eb3b30d63f68b2be1363fd630258df85b1fe4993f56e8cf5cf09607d37c6fa174dd6f760ac7f4d00eb7b31d6bf69b2de83b1fe3d01acef938193fcfd0f37aca3cc31bf1f2b62fed42d621ec084fe4b53e807312dfed6d4e2214c8b43ba5a3c8c69f18fa6168fc880c928e4bf6e80a30c57eec5b4f84f578b47b17462a5e8a793c730f04002c01fc7c0830900df8781871200fe04e62629297a6ef224065c4913f8290cb8b226f0d398635749d174ec6764c82dec9f55dd50be0b077e16d3a29aa616cf61c0d535819f9701b7b27fd67003dc34cabee658ecd5d48dbd17312d6a696af112a6456d4d2d5ec680eb6802bf82895c5757e4573191eb698afc9a0cb8a6fdb3befd761337b9673d1cfc754c8f06ba7abc81e9d150538f37b1bca891665ef4960c981cf6d4d80d7094c39edec6446ea22bf23b98c84d35457e17d3a299a616ef4980d33bdb3f034b2d93cbeb66d8f7f2eda76bacd1f469befd7f8859447f93d0e6b08574d1be204bea26d9d75c6b05e5127df15d739966014133baf8ae450a597c976eff65962fb6346fbf2cda49ecb47413ed843d02fcbe0c98fc6c65bfdd4292894933b24ab85f7d80e592ad13904b7e8881b74900f84758ee90aa9b3b7c8cb526dbba89cd28adc94f64c06ded9feddc000fc067537d8a01b7d7043e8089dc4157e4cfb0f66f473794a3b47f3fc72877d2a5fc0596183b2728311e9405d0d2fe99e64693fa51f682c734e9a2abc957583476d58cc6af31cadd74297f835584ba6b5684bec56a153d346b15df61c9bba766f2fe1e639caec9f8072cf6327463ef47594528cdfe199861256f9f01e7bd7cfa1eaf48a8ed2cd0cb75e5a637addc342b679d1b0e5885e527ac64ee938092f9672cf2fbea46fe2f18ed7e09a0fd2b06de3f01e0bf61296d80664afb1d031e68bfdd59000e64d19fd36c2f9c6e6559136c1fcfb13d26cf9a6cff576aada29eb394f9544f6b9efdef78fbf914fb49214d2be48ebcc23cd64622a96c8aed75c7dad785f61be46de8b3244515d1b497637fa362e51f98958364566e28b372865d7527a9d949f9cbe8dfe3699e40ac59647fe2a4fcf1656f8eb6f303a781308d5a9167dbb792bedd93d9439ee6d21d53885d043752bd3002795f8d0786946dbf516c6b9d4751a1a6301710f59e69e3909d465494fe13537a30e64f3044c7a63ef6378e5a45766e3bcff68d621ae78eb5d9d6121aff22dbf0b7f8fd44f9d35f98954364561e2658093577ec847bbc882c2363083e899656e0572a96fd8d59365466d97057f137d2f6a15c9ae69dfd82f4632efc44c5b643986dc364b6f5176c9b44636709b38cfc5a5d6196fc83597298cc92ad49cecfc2df64d9d7021b758d7dcdb5bdbc98e5f2250a5e0eb5c3ad2065c90a5a7f81b91ea9b9252e6ffb17537db84cf591aed2c644aa46892772b5ff30fb46c8ec9b68d0abc8dde36830c42aa79e9d4f838edc792c11b14a0689a5568f94593d2caad538d369d416679734c7465e1a93bb0b9942e5d345fcb119c0ec1a25b36bb672cd6e3a7d1259b7932138f7a696e503c5767940da503a35c178e23988e99129d3634252ca6cd3a57908b3390baba7a8f900f7e189f6b3851408c6b3aa47a858968259365a66d960c4b219347d16b0ba89d386e7ad96992c15e7968b0d336d944a98456364168d3198fbf25825efe4d8b616d0d23b719656c62c1d2bb374a8850dcbc8728a480b72e83dc73aa2c9381acbc5b435b4d02e71d724d0aa2a9855e3dcb40922c38535841934168aed77493a5c1ca5f48bc4489c655531cbc6cb2ccb8c9973ba6b15e07968b4366bbc396535ccc6c36536e619ae51f39d3e17b31af34cea01f965a931316dc4784ad1ea984e13643acda8b096477485f475a881e93051a6c351067518abed2fb8c7a82852135364924c915168ae4eda8c0bec97786e3191da15bd0c962325daf76b61164e9659385ed1c223699c15ba889564d95b1bb3778accde69067dbc248e1a492214a88329303551351527b71f09ea29e6adaa8b597584ccaab18a7e3cda8eb562da56f0820fd7c36c9d86f5d9a8c6e018fa46796f14f358f7b82af6d5c7ec9b2eb36f88465dba94962d85b67d8b58cb17b72abbdcbb2a3635c06cca568b33d13f47d21e1692abc46ab799ad3b34c4ec9be1668c04ab4f8fa63d6639ac355bbe65135f7d3afe564323ccca99582caaf41544d67dc24fc94857f45641a25a0c8d31fb8e94d9d7c18ade1b9c6dab6c8265138ce5ace87dba2ab1303dae583099c29a6256cf9659dd03cd41b2cbe67ec09c7051d93806a9e1ac90b637e21bd76986f13e4ac67b50cc9c613c1d1326bdce0576ce5e6cdb46e6afc4ce1d12950734c7ec9983b509a2a711d20b3295d6934b243525376348a47eb9288116b6c02c9ceba66f443e26349efa5ef4dc3c99e3422d311b8fc67a26dd94576eac4c7699d50ab3f41899a5e35cc5a638c2e7a4436e7745c66b6bccda79326b67c58c57b32322a6c74ada606acc97a9d11b2929638f95903c79127ddb690f272e3e53310b72dc786ff99abf9357e6d1d93785b4551ef6dbf22395f1c556fcd6b6c5ac5da0d6362fbfb42332be1623e39166da73ed30ab16caac9aacec854e8d5967469ea911bdf698e5b9d8ec1cf59a2a8f5332ee5062df77de9acc2c4d544ed201b3240fb3441e0333ecefb3edebea329fe4fd60a5ecaee95eee8e98258b6496f41572944c9aa69c7ebcd288768ec350d6331d3d670f7fa7624527cc8ac558ad3a5a7c903e2e8743649c108f9a22e9a14b7cff5d67cc9e256aad1b62cf7436c65d7ef477651944a2e2210de39dafcebb7c3c2c568a0715de5d30dec762635e305cfcdc44f9a989626da190c684339a434aa7c8af442b554353d1a12ba6c3526cfc03f31af53e0fb1361ced54c444e5e3dd307b0b64f68e8e91cef2a8e5245fe3231862fec147487222de329f9f74c7ec5c26b33323cefcc499893933e1b94a0f8c7da1bbde54d12bddcdcb8c2cc3f02789ca837a62561625368ec8ace6c4c7513ac67e3936e2e4268edcad0b48764c6560b61ea75edb281f533cb770573a272277e885d9532cb36770dcedace48d2ff5c62c2ac1caf3d863956e7ab6dc8c78aa8f8ac6efa97d301d4a653a7455d081c76961825b567d31c62b648c3b95cb47c41eabf0fcd53c7a97acef484c4f7e3f8ce94a19d301a8b6e53d3d92f9725a370ccf7932915efa63b6ac92d93241390770fa24ca3f2ddfc7946dffbd9cf993db3046d2f908a49daf62f300cce6d5329b3b0a9e160ed3b49f0dc478aec17a2db1d6b6c8792ce3ecb61f3ade1eaf419805c7cb2c986b55ec4c3ae8816e7b5ef8372aaa0cc6543941a68a389b9887a8323f206c1996e21253ea0cc12c5beb663449b5ccadc81eeaa198a527ba499b58ef99e3e3fdadbe31ec93a55bf2958a05c3300b4ec2e670c8c354f143681f763f5131741866dfc932fbdac5f4452707c1d24c3cf9c0708ce13a19c3f651f3015e0a25babf7b04c6f1146c8e49f45ad974da339f2ff1e24cdac62b8ec23bfced143ad3c1e9fb8abede34be1ac248ccea53e399dbe0a48de9f6cb0bacd2b23ea08a5d2f3d0ab3f03437f9975ce1f8ea16b13db38afd6f20407609194d519c992245ac57adc44aef623fa2fd224eeda16759ada067440d227c9f84bfcc8e0d92b3649795ff649794e808eb6d712a072de79fce641526cde648320c2c123472be2c28eb19e4deda932ae48cd091dd657ada35c77cfa15df4f269615b29a504f501782d6c5b6e968647f9840a00ab38863d94a9386e2ff9ca5a79358edc0623598de8dd8d82d4e6f8acd6203092d24f7a126e59485a943c6dd01e0b97e806c9043125806ab36e5d3e8e0030679b1c383e59e2cbc1e1480973d31e16680842f836b469dcc592e566c39ddb223fa5956954ac10c1205679814ab01158bc4c9541a38bec2db0fb2ed4f09cbb6d1a46c64bba92cda905a6e0be72cd4e205342660892f243c10084bb8c9a48475ed1fbcc6368ece6e200039b4354056bf4cb196fa42b05d55c3826d3629584390af95fc0f0857b74658b82d2685ab2f118e0092395f64b6ed0a7a37d717a2cdb7c2a26d355d8af2e4e934d59dadff9c2a4eb12fc4dad1372cd699a69366645e36c6febfb38f626ed93c002789fa41b8b49a61e1ce32295c638bb4744a5c97a17e10ef7c50829e6d52bc1a205f9b12d1ffeb079966b50ecbb4cda44cd5804ce1c59b7e90685fd3b044e79894a83295a8c45779544aadb038e79a14c78e049abc9c06121f907426684da3993e99725648b3f9a9acabd60f02ee6e1316f03c930256b5221be4648cd60f02d56c1816e87c9302d58ba86b15b31e0b67c3297fe5584f770c4b7681e94c7d0a1d1d0dcf91f2470d7e2d487617262bd9f1cd37fc20d0db8dc2025d6452a0e620d98db65653ab57945535c93a366766da34ea61b9d4df0aec00fd2022f9878b78b1e984c84574ce82c9f349f9d71db40e2f31291139610cfa17e96525bbb3e5951d9c93ebf3264f43d0ef7aa949296bb16c9f27c935ac1e368376e1f841aa8b41f67f59b2fa2448131bce09e2cd6c3fd5f7ffa812166ebbe93e09281cdcbc6824eda52043b0e16d9afc20de5ad0d77ab949f16a824a47787f1a67e7243f08f54383b0505798ae9dcdb0b17259e57586fd921f043a901916e84a930255b7f8c86496e5ec934d9a41fea87d3504c3b73b4c8a4406d126d14c7ca9b0283acb7ebd9886e407c1e607c3825d6552b04642e63ed3223be6ae924e14f047d6bea74f58baab4d67ed2429fa754ec5eae161a1ae4956cdcb190d8a9c8f9debb39a570118e1bed6a470f5852cdfcf4da2a72b8545bbcea46864a0963489c28def4cb65270b16ff2b096a3c2625d6f3a698ea673719c65e2e18dfdc35b8694d8f2e5dbe1f941b803c0cb6e30ed65f07c2d3fce9d20b363b9583b4d7b199f54574461fcddbd331478d98d268523436dd36cd1322df767e4f841c08db4efa24a25015c5cfc13ff246235d5f1e9ce752ca7ab7239bd5bca2a2b11d39fbbdbaf788ef94d2960fa725adc3dfb6931f3b934d7b3c9d29427b7a4c539ad34cd5533304db31f3a4d61ae709a521698e6bae297a65480a7c5959fa429f59ca629d5f6d35ccd7a4d539aea99a6dc6129e38ccf574b2b373b242d6a2f5f9a74bc3f4d3a1c99864cce498b32b7290d19fb4d8b31389016d7448e349783f3698a3d0b69c8c059640e249b789986f68ca5c55cfa9016b5119f16b32d9126edb60caf4d92af29ca206b936e4ef9ff7bd950065936740b11e177567b72ea53b79aae4f117f70568991322eda8ada5eb6dff41239b42cc721f2d8705e6f92b1a91651b3bac18d81f1d4aeee0e85aba7b755a49ce2d655036d338cc959db949ca540cedbbd24e7205fcab913c8b9cb4b72f6f2a59c6dc048c11d5e92b3b72fe5cc0472dee92539fbf852ce8540cebbbc24675f5fca793a9073b797e4ece74b396f0072deed2539fbfb52ced7819cf77849ce01be94b33aa828dd6b52ce5a56b8954cced5247f3bbd01e40563c2353725dc5360c1d91e93c2d565c2919a63a43f2641be2aa6e4bb04c8775f3292f162342143faa4bdd3df9c9c354dc9390ec879bf97e41ce84b39bb03391ff0929cfd7c29e7fb5658ce07bd24675f5fcaf93490f3212fc939c09772d60389fd612fc9d9df9772fe02bcf3112fc9d9cb9772ae0672eef5929c7d7c29e78d40ce47bd24676f5fcab905c8f99849399b582a836abdeda2c87f436a8f83ae8dc7bd24a641cf3426e6a340cc7d5e12b39f0fc57c0488f98497c4eceb43311f02623ee925310df65f1a13f30120e6535e12b3b70fc5bc0f88f9b497c4f4e304997b8198cf7849cc0c1f8a793710f3592f8939c887623e05c47cce4b620ef4a1984f00319faf4831238f68339acc6f0f1812f30010f3052f8969b0003226e66740cc17bd24a6c1aa913131bf0062bee425310d56da8d89791088f9b297c434d89c3426e65740cc57bc24a6c18e0e63627e0dc47cd54b621aec823326e6b740ccd7bc24a6c1ce6163627e07c47cdd4b621aacb41b13f36720e61b5e12d36073d29898bf0031df34296623262679a590c2e087f9196cfd5472635a3c42fe032622bc6552c85656782ea6db35b7e4fd62faae31618d4d723dd60a0bfbb6773a3c06f97294f2563063f81d2f89e9c751ca9b8198ef7a494c3f8e52de08c47ccf4b62fa7194f20620e67e2f89e9c751caeb8098ef7b494c3f8e525e03c4fcc04b62fa7194f22a20e6875e12d38fa3945702313ff292987e1ca5bc0388f9b197c4f4e328e5ed40cc4f4c8ac9a7bd626d7408e76c7e62b00d646cf5da3ed052ffd44b72f6f2a59cbf00390f9894b38d05b76a72bf499c9f3b3fc65961713f33296ee318f9a8e8abfef3d346a0a7f3739352d66152f617044dc28a5f637eb81ff8e117c9106f60f2c5ab6f6c2e0710ef60322a43ee0a1ca3eb278d25e3faa0b8f9d24b62fab1ec6e00c4fcca4b621aec743326663520e6d75e12d36077b031316b0131bff19298063bdd8c89f9172880bef5929806bb838d89591578e6775e12d360a79b3131ff009ef9bd97c4f4630be74f20e60f5e12d360a79bb9e62248e63f7a494c83ddc1c6c46c02c4fca962bb31e0942d3faeb2b8077463fc6c52caae4cca02fba5027ae5e7064cb5ffcbb1a14987db3cb6e1f7742bcb9a608da23be3e7b17bf0bd9136ab7cb3923730e5bd6f81fef75f4c4adecc52df14c560de6a6ce389274076f0abd7043598bf9adb540a08fa9bd70435d8963726e84340d0dfbd26a8c1f6bc31411f0682fee13541fdb879cf2340d03fbd26a8c1be506382ee0582fee535410d569b8c097a1f10f46faf096ab07d6f4cd0fb81a087bc26a8c17e5163823e0004fdc76b821aec1b3526e88340d07f4d0aea1ce8b5841e5ae61ca24696c214fb70649dc40597ec3f9392a559d1bb46c6d216fe02c9049a4c7ad661293b3f909848cea79b67b2943f296448eeb9a02d4f168355584f54e4c4443f4e98ed007aa20226a5ec6c893d5139146c8c55cc5e1965ff47328395d46357d07e29bc0fd58f03258703b183c9f05b77ddd17e947234c8714326a5e4873f9035ebff3b53c1528027a69894afb524079d61398770aea107b43ad529a24a313dc7a584164cc5f6e7463df32e53d20e01d25632296d3b21472567032fb416321ae11382a31f9a63506263debb0e485cd9743e3a921e1a5dc48eca2db6e1c82c653267991c19cb0f1076aa55fe933205e4a3554c4ac9cf0fef65ffb78c059e432bfc493a87c85851743b90b06a32241cf03f27e19740c26a26256c6085971ff0eb484a81343cfdbdc7c21740c4ea2645543f0fd860dfbc3139578146660d2fc969749f056372ee0572d6f4929c460f25312667175005aae525398d6e94664cce6c20676d2fc969f48c1763722e0772d6f1929c4697cb1893731b90b3ae97e4347a189e31396f0572d6f3929c4627311893f33f20677d2fc969f4303c6372f60515a50626e5ac47e55c66bf906bff2cb03269ef7b216d508eb6565a7994ba31018d9d0b4c3629e40236342960436a4d9eb5dafe6ca6fd5a3eed7ccbb2af049248497e8fa1ed72633276312563472063239332aaedfe61747f05733b26813cb2b197c4f4e3967d3b80984dbc24a61fb7ecdb0ec46cea2531fdb865dfc540cc665e12d38f5bf69d0fc46cee2531fdb865df9940cc165e12d38f5bf66d0662b6f492987e9c81b40188d9ca4b62fa71cbbe5d40ccd65e12d38f5bf6dd04c46c539162462e78359acc8d2d797d168899ea2531fd78b0d8f340ccb65e12d38f078bbd0dc46ce72531fd78b0d83b40ccf65e12d38f078bbd07c4ece02531fd78b0d87e2066472f89e9c783c53e006276f292987e3c58ec432066672f89e9c783c53e0662a679494c3f1e2cf60910b38bf9b9ec6443e899f6e33c6b15259b4fb5e06bd9f26c62f3aca55474b247cd42fb6f278031f49b02fbb9ff867bc9a45e2e71d7642c64e9c526bf2675218bb199c3814058be6e26e5e347df11f1b2ac3ca97ffa79f6f030206477d3f966b6e5acf62579e3486b255da64a7c902c5225c045f6ab99744d059986604ccc745362f60689ba47452e508570f37cb9eb5c7f5004f54c8694f048c689d6146bac35959259647fb43a1949dc98943700af4c375f35824bfa2bacdc3636cba816103323192b284bad25169959c437eb9b619321ab7bf955b67cbab7c90e3963d2b60645512faf4a6bb4afd398b44f02afed5db105136c1df9b1a1f9242898fa24a3a1e976df193fee7d980bfcb2af97c4f4e3ce9c3940cc7e5e12d38f7b1ece0162f6f792987edc91f30820e6002f89e9c7bd0ee70331077a494c3feec4790c10739097c4f4e31e8713809883bd24a61f77e01c09c41ce22531fdb8b7e15420e6502f89e9c79d3727023187991433d52adf98543bb1c060f96eecc482234003f3b064f8ea424bbe5bdcffc296515380af0ef7929806cb776362ce02628e48c69825e9935f4907da565849dbedc8987cc3817c234dcad70cc8577ebf4d0246442c4d96a0c606360e0141472563072e22e8ffd60e5cb70109332b327f14472cfd78bced39600023cb4b62faf178db0b8098a3bd24a61f8fb73d1b8839c64b62faf178db6d40ccb15e12d38fc7db6e05628ef392987e3cdef62c20e6782f89e9c7adc63702310ff792987e3cde763310738297c4f4e3f1b6170231277a494c3f4e34bc15883929198dc8feff738dc8055658c2c9deee103698dc8d7508bf0b76869b6252de36a8bcee261d1a4cfec666c65501e24ef5b2b8063dd798b83bc150c6115e16d76095ca98b8e70271a779595c83957f63e26e01e24ef7b2b8069ba9c6c4bd14889bed6571fd38d5fb4220ee0c2f8b6bb0ebcf98b8570071677a595c839dd4c6c4bd0c887ba497c535389c624cdcab80b8b3bc2caec1813f63e25e09c49d6d52dc0e56e4d96fcbd8e83e69e2665251091c996752f23f3899e73820f351c93ebdd0bd0ffb317b580ca49de38d8321279675de4ca25ebed4ecaca9ea4143d2ae053d0c7393b3d3c32041623f772ebe0afa678f4ed61971e185e0702db3f125e0c692f7ad5658c463cc27ef4cfa09b1df398a74b4fdbb987e54610bc28df9673d20ed3cef1ceeecc789150b8194f34d4ad90224f5f156f90d5d1cea24d1175ace51bafedde0a52ec83f739235eb94e79fe368c94d809c19a7642fa7292c0bf0aba0f380972e48ce11e47dff87caf3ef813f2e4cc6b151eed7cffb716553169033d74b720ef4a59c1d819c795e92b39f2fe57c1be4958bbc24675f5fcaf9309073b197e41ce04b39ab80c4bec44b72f6f7a59c3f02efccf7929c46b7543726e77140ce63bd24671f5fca79319073a997e4343a866f4ccef540ce02d3cd4ad2e131d5fe3f01996ee5d1cf796b3d87aa42de9846a9adb0ef1b6c56969812f42820e832ef6c606d74eebeb14dda6e037dee855e12d38fa7ceec02621679494c3f9e3a73271073b997c4f4e3a933bb8198c779494c3f9e3a730f10b3d84b62faf1d4993d40cc122f89e9c753671e0562967a494c3f9e3af31810738597c4f4e366c08f0331577a494c3f9e3ab30f88b9caa4987598987d923fac76971b73e23a35db0a8bb73a1963e7b12770459e056bb0e0696aca235f061eb9c68ba21aac1a1913f52520eaf15e14d560e5dd98a8cf03514ff0a2a8069b97c6443d0c4c8a5deb45510d76801813b51f10f5442f8a6ab08bce98a81940d493bc28aac14e6463a27603a29e6c52d43e56f9999d91cb0dc8da8e65f6bfe4eff0e4c44574122d213bd92273e956d12096dad1408e4f236f65d31a2d9f8d67301266bb9125aef94d563812d699f6ece9f4512e1517ee1e31c5fe902cb821a7d439634d63a8f4a514ce98a81d4c89da04887a4a32c642ddcd59ee6576c9adb1298d7f837924a77a49ce0c5fcab90bc8799a97e4347af69731395f0772ae37296773abfc04f0682b41fc7ba2626d20e9e9de39e7d38f7be6f60095ac0dc9591dd73ff9dd7ec6e4bb1678e2195eca2b337cb919dcf340ce8d5e92d3e839f2c6e4fc03c8b9c9ab277afa733f87df81b49bbd2a6d2f5f4afbb11596768bf9d27db905b7295c61132102665a70378702fad47f520e06526ef5ce4ea5bd7c5955ba128879a697c4f4e3f1023b80986779494c3f1e2f701910f36c2f89e9c755f0970331b779494c3f767e6c03629ee32531fd78bcc03940cc73bd24a61f8f175809c43ccf4b62faf178815540ccf3bd24a61f8f17b80a88798197c4f46317c8d540cc0b2bb6ab18ce10f5e3cce57da0abf8a264ec64a3b2bed8604237b686f332d08774b1d7043598d88d09ba1d087a89d70435d8b03426e8b940d04bbd26a8c1c6a53141cf03825ee635410d76ca1913f47c20e876af096ab0943726e84540d0cbbd26a8c186a63141cf00825ee135410d36368d09ba09087aa5d70435d849674cd02d40d01d5e13d48f9bb39c0904bdcadb07b219cc518d1dc8d6043444af36296f9a445e0838d6be53647f567e2f9c4cb60fce0a4a9a98b8c8be6f74c5c8492143728f036b9bae3129772d2637097811159b639349e1c684ab64ca4fc93f5cb86b2bb2ef29722d88c15ae90da6a45c0392fc75de3d3ec5681fa9b159229b80b8d77b595c3f9ec1b811887b8397c5f5e3198cab80b83bbd2cae1fcf605c06c4bdd1cbe2faf10cc6b540dc9bbc2cae1fcf605c0dc4bdd9cbe2faf10cc65380b8b778595c3f9ec1782210f7562f8bebc789e5eb81b8b779595c3f9ec1782a10f776ef1e0ee8c7e2ac2b907657b28e109a4457e52d15b636c8b23f2ba621faf908a1515658d03b4c2f33839b1a8cb47d9174121269899425f4ef428bec22418426f78dc9d9c1949c5d809c777a37e9fbb16b662948fa779994b6b615adefb5c49c74d54d4917045eb9bb62f7868c3c18d08f6b9fbe076300777b494c3fae7dfa0d88798f97c4f4e3daa7778098f77a494c3fae7dfa1688b9c74b62fa71edd3ab40ccfbbc24a61fd73ebd01c4bcdf4b62fa71edd3b340cc07bc24a61fd73e3d07c47cb0220fa08e9c3be5c7a99243adb0940f2563332272b0ef4a3a7d67859547ef2461332263dd1a6b807c0f27bb1d2edf8534d3221b672ea71eeb6c8969d433eb070c497b1024f24792b13191bba93c6460d960696e6c3acf0340cebd1529e728fb53b2c14b1eed8623a7261b2c828c25fc6140ce47bd24a7d103d78cc9792d90f3312fc96974928e31395b823eccc7bd24676f5fca391cc8b9cf4b721a5d4d624cce1c20e7135e92b3af2fe53c01c8f9a497e434dab83426e7e540cea7bc24677f5fcaf93290f3692fc939c09772560615a5674ccad9de2abfb5f5686bb545da412b2cbee8668afdb933ce3e8d0a9b6bdf21d22765b2423d53220fb1c2223feba583d38d1eb36aac8f6934589bf79c97e41ce84b39d3809ccf7b494ea3a399c6e47c0724f617bc24675f5fcaf90890f3452fc939c09772560789fd252fc9d9df9772fe04bcf3652fc96974eebc31398b819caf78494e7feefd742990f3552fc9d9db97729e0ee47cad22c7dcc5c356fdb81cfc0fd08e7fdd4b621a9cdb694ccc5f81986f78494c8333e88c89f91310f34d2f896930cf3426e6f740ccb7bc24a61fc7dcbf0162beed25310dceed3426e69740cc77bc24a6c16e6463627e0ec47cd74b621a9ca9644ccc4f8198ef79494c83cbaf8c89f92f1073bf97c434b8138e3131ff0662be5fb1b38e1d28672b76a3c9dcd866ec0dc0d0db075e12d36001644ccc8640cc0fbd24a6c1aa9131311b03313ff29298062bedc6c46c02c4fcd84b621a6c4e1a13b31910f3132f8969b0a3c39898cd81989f7a494c835d70c6c46c09c43ce02531fd784e4d2b20e6675e12d360a5dd98986d80989f7b494c83cd496362a60231bf48d6463ed32d32ef6d858d3cd2fe3cd79ac9b6abcea53bd1e425636e9cb109881bacb0a007bd745ebcd1a505c696b2fe05e6777ce92539337c29e7ed40ceafbc24a73f0f997c09c8f975c51ee507e5f4e36e0aa9a02bee9b6494eaa4205a499756e7dbff5f404b71fe5292965d1b1373332884be3529661d2026f44e3f8b9707c4fb2e196bd64bad2516d9784f6dd3483fee25db07e497df7b555a7f6ed3fb02f0da1fbc73446f7f5fee2d371ef8e98f5e12d38f7bcb1d0ec4fcc94b62fa716fb94c20e6cf5e12d38f7bcb8d0562fee22531fdb8b75c6f20e6af5e12d38fada17e40ccdfbc24a61ff796cb0062feee2531fdd8e5d10b88f98797c4343894614ccc0940cc3fbd24a6c1a10c63624e0262fe65ba330e6e9b3fd322fb26aca00f1da085b63a64b17fbe7dd7e046e55d8ce5985658cabf2bb65f130eb1f971eed1fda05ff390b74e32363afc6b6cd5da4e90ccfff19aa006f34d6382de0804fdd76b82fa715de55540d0ffbc26a8c176ba3141af06825a953d26a8c1fe4d63825e0f040d784d50837d9cc604bd01081af49aa07edc77fb722068c86b821a6cb71b13f40a20688ad7043558b13726e89540d04a5e13d4609fa731417700412b9b14944f5a1890fc490bc6867f0f5861f1aa98142fcd8ade621f6bdf29b23f7366741e4f3b499cbd10336dcd0aac523aca9e474d5c64df9f67b2467a52c890dcd960da6c559372f363217ad9ff2db35f239b4916246b7e92316f1d01927a3593f2c5ea5f8a5cc4eac765ff8b40ff52f564e49a83fe87a67afd0a72cd1ac948c6bd6d7aff3bf27d0792714def24633f2eeb3f0d24e35a26a5744682c89cb712fa29f13e02956bff5a617fb890e72bb4b4263b151b13d3d81a8c1a2059d73629a6dee9bf069b91c64aee8ec04feb9894b64b8c24af5ecf34bac4c0584db300d434ebfa4d70833d4fc6045f0204af978c42cddd98bc1fa7844d03f970fd64e7c3f2d3dfb26965ab901670046e995969ef3225ed9bc04b1b98af2f449e7390493d96c014d13a421e2dce8cafd93456a8b505f5d88626c524359e6934502254b6fd6296450eb7cf6139a8ffa4eb0b92782393d2a91f9b67b01960ace6ba0d24ebc65e9273902fe57c05c8d9c44b72f6f2a59c0341e5bfa997e4eced4b396703399b7949ce3ebe94732590b3b997e4343a2dcc989c1701395b7849ce7ebe94733790b3a597e4343ad9db989c2150b2b7f2929c037c29e7402067eb643427f109df919d1e7e5cd5711d48ea6dbc24a61f57755c0fc44cf592987e5cd77e1e10b3ad97c4f4e3baf66b8198edbc24a61fd7b5af0062b6f792987e5cd77e3610b38397c4f4e320c63c2066472f89e9c775edf381989dbc24a61fd7b51f0dc4ecec2531fdb8aefd1820669a4931db48c4948f558e659f44ce6e3228ee3453e22e07cdcb2e5e16d76036604cdcbb80e776adc8ae10d14f337c795ad15dc057bb79a967c9e869ecc67a96560039bb7b49ce41be94f37e20670f2fc96974d7446372b60779674f2fc969b4156f4cce2c2067ba97e4347adeb5313997003933bc24a7d17d198cc9b915c8d9cb4b72f6f3a59c3702397b7b494ea33b7b1a93f30720671f2fc939c09772760415a5be26e5accfe4ec67cda33748e03974aaacdf77917fce0a4bd8af22fb97221b967d4c8e16196b56be0b92777f2f8969701cd398986f01310778494c83a345c6c47c0d8839d04b621a2c768c89f90a10739097c434385a644ccc97809883bd24a61f370a78018839c44b621a1cd03026e67340cca15e12d38f3deecf00318779494c3f6e24f01110f3302f89697026a73131df07620e3729667b8998f271cb4c1b64991d6a11fd45de1e69839226e61ab3e3972d520c89bc1fb4d44754ec340607cad96cda685e6a6cbbe9df80c78ef49298064b796362fe0ec41ce52531fdb811fa9f40cc4c2f8969b065644cccbf8098595e12d3609bdd9898878098a3bd24a6c1de246362fe03c41ce325310df6731a13b316a81a8df59298067be08d89591b8839ce4b621a6c191913b32e1073bc97c434d8663726663d20e6e126c56cc5c42cb05f2242e659ab2dd2429f627f4076962d16c40d9b62b46959cf8da9f1083b0b1446134c0a9b2a085b40f7572ca530e11d16a3cd9af7e302843140de8915b9555ad226711beb699a1d084b39c9a4946da994e3ad12ba1115d9ed339f6e4a493e0f7beb3c6b29157c94fd7ba1fdb7f37c8c7d25db4fe7fa703e48352b2cf0e4644cafc17c3532d9f7f2e97acd2048fa53bc2467862fe57c1424ffa95e92d3e8b46e63727e0ee43c2239dbf3f7136aa94998f8652cafbc06c837ad22f7f5f67f15a936c827a79b9e86080f25cdb25f2aa17f17d2527eb29547ef1b93d0d861a43d40c99d6d52c28631bc915b6a740de680a021193f058dcc19c9680b41199d4dd1a7db5e3981d629c906a8cebda9b4adb4c6228dcf9136837ccbe889300d4c79e94490d0672663af63b8212fa9cecfa495f355947a3e5586efd4ed343d8d6fcf6bac381a008aa32393216da9b584e69e6a9bf91bec7932b67d6f2520edac64e4ad58bd339cb71a2ce58de5ad87808cb39371080f49fc8bac623a17c4ef87413d09c43bcaa478b5ec1f532d67714b8efd9874198fa7c99a1447fecb17eb828ad19c8aada6c33e783fcef4d8034aefb9c9c80733caf2c25c565a93bf9394948d79e441e091479b1e1522826559ce66fac5a0ba133e98e4ff75771fe07115571b80471883718971c505030605cb145b96552cba2c59c2b80917d131b2b42ab61a6a2e806d7a87d03b21d40408091d122004428024103a04426fa1861248877f66eeaef65bd535f9bfbbe7f8e101a4d5eed5eeabb9f7ce9c39732628b54f2eaddfcec23c14300f97b3bb96c674ed49707a2f0d8332b3973920dd8b02ff0badf28830d655669b8d6d5de5d940581ec674af6b8db37cb73bd8a269ae7d4985bf5e2eb003c6067ffd6cf1639e26d503c5c3007619137618c0b6f8a7c466cf436999e92cc076e88a57f0e3e6957e94ddd41101aa8cee2c54651faf563892c987f65719ce76a299e14f3b0c648da29f85d61791b3f39ac6dac44dd012abc20848646f44d35f97005e35136facff342e09ab35210ebec054f83ca236fbf2602453ecf3305afda1f4cde04c00d01af6757111dc8f7142cc157c7407d27757de19f86ac3b8adb82dbedb7dffb02dbcee36edaebc3bdc569687915b51dde3481adfbe63268ea507b3380b80738524ce192a39b703ce3a499c392a399f826b65bd24ce6c959cbf00ce06499c792a39378593bd511267ae4acef7a0753649e2a46e354fe3ac07ce23257152578fd3382f04ce66499cd40d1a689cc701674b18a3a0e9a91805d1821a2b80af35aca046997d5aad4f3f2df359176dfe29c1e12aac51b90f01bb3087bea0c624006d9354af75063362496b9fab203db55d1267be4acec78073a524ce692a39a74002c12a499cd4ad13699c65c0b95a1227b5b2018db31938d748e2cc56c9790e701e2589334725e7cf80f368499cb92a390ddcd98f91c499a792330738d7323907f803b87cd1205dd51d99c645aba861853ab8d631b92699ae391a89ab715cae50bdfdc77dedb2dbdafc21677960f7b1167bb5581607715949030bfb00c05e1fce32e6acf0f3386849fd1743b4fd5876363aa61dc4c31ea1afc2a525216c076df13826a65ba119acc869b6a7788da77359bf95feead9ea4ddc23c498112d15613a201e1ff63ea878c0d9a6d8bfb8dea7c7941ab792acddc4d358893531d7f723e1ce833bf909927189d55b69b8b301f744c9b8c4a90d1aee2cc03d49322eb11345c32d00dc9325e312474f34dcc300f714c9b8c4eaaf34dc8300f754c9b8c47a1d34dc25807b9a645c62fd2d1aeefe807bba645c62cd0e1a6e0470cf908c4bac6b4cc32d07dc33c3886fc52bc6c6d664d6d9c316faa856ab27adf331d6ced5633b475f895d335aecf548c03e2b8cb5c46eb55c89715104b704b6dac71582559b5a97bcde66e28467cb29d5473cf5696be6b2609eea074cca51c6d5a17171e3cae88b16999e4a5810a35cb4398201d026cf915aaf8b9a04490b208e8390f6b95269a9d9cf34da07a1d59e17c68e0638b3d5f39594ba7109ed5afa1a609e2f0953e362ee4f01f30249981a4b433f0798174ac22406516898cf03e645923089532c34cc6700f3624998c4c9401ae6b3807989244c8d45cc1f06cc4b256112fb9934ccdf00e6659230358ed9ff0a98974bc224069669987f07cc2b6414da27dec769c5a03f85a8e69572caf26adc18ef3108c9fd90bd687143177813af97b445b40d103fba4a1a28b185d2401b01f447d24089e3731a682d805e2d0d943846a781ae00d06ba48112639b34d03a00bd561a2831bec9ab3b02a0d74903258ed769a01100bd5e1aa8c6da2355007a833450e21889065a0da03f96064a8c77d2406b00f427b2777723def369bbbbcd8781e88d4cde8c6e78f180253e516c5937992285d18d4e8212ffee2356d9c7a989616b595978fb4008e5263961bd192ae7e2d7c3a5e16649981ae7e28f03cc9f4ac2d438177f3460de220953e35cfc5ac0fc99244c8d73f1ab00f3e7923035cec5af01cc5b25616a9c8b6f01ccdb24616a9c8b6f05ccdb25616a9c8b3f0130ef9084a9712efe24c0bc33ec455ec9a77a53537068a9de7bc0f0f22ec9b8c41b146f1334c0bd5b322eb12b45c3bd0f70ef918c4becf4d370ef05dc7bd90bc07a5f58eb1ecff59baa112f01fd5990ef03e42fc258a5f4dd5a293164426ba3d91088fe2593766237b4c1225987d760f6f3f5f69a7a9d4cd13877ea3c63c0f7c9d984526378af0c28ef0f673bd4dc4e6d56f38e0dfde0547f80bd3a7eb109d6c3bb5cd178f942b74a7ea547f43b1eb008a7b20833a005fe4ad2162cf92a931d17c2a0f441499cd4313e8d3317387f2d89334725e75b70b23f2489335b25e793c0f9b024ce3c959c5bc3c9fe1b499cb92a39bf85d6f988244e9dcb18d603e76f25715257d2d1386f07ce47257166a9e43c0b381f4be596170bec4b96dbaf2a4cab3fd53399992237b0383f84f0dce34c4ef74da909ead4e90bb50d8556f73b492771beca94ef99d001fabd244e6a86128d737be0fc8324ce1c959c2fc0c9fe8424ce6c959cf703e7939238f354726e0627fb1f2571e6aae4fc045ae7539238752ee66a00cea7257152d310689c1701e7339238b354721e0f9ccf32398799d8266aaecc74e83bc7d38ab0ac849bcf7361e4752637faa6eede491b7be7c2d8fb794998c4956d34cce980f982244c8d51a14cc07c51122631f58586b92b60be24099398f44ac3dc0930ff240993d81da2614e02cc972561121712d030d301f3154998c4cc4b1ae644c0fcb3244ce294190d732fc07c55122671651b0d7377c07c2d959889153da9a7396d38b93760be2e09937803a2611602e61b9230895d231a660960be290993d869a761ce01ccb7246112879334cc0580f9b6244c62a08386b90830df9184490cc1d1300f00cc7725611283c334cc4300f33d4998c44e3b0d732960be2f09536321fe0ac0fc0b1373a83f80fb51b08b707c2d5a897d8a3b0c0d2f3d998ff39d52b54c1cef0326ded626714f61e7d0665c35ce8d71f7e0d1b03ef24326eb0413df3db8c804b5356bbd44ac0a6724faf65d8b6df08f6ade5378124cf87e14762d593c605f1b8c53ab73d3b618af856be9c74cde1d3b5d0e9699ae351092af96a0b116cd9b40fd49181b8ccfb0ffd6477f79b9a936a1657fd016f17f0c37af4fc3c846aa30c9d4437099721a6b217e03d7d6bf4ae2cc54c9792b707e2689935a459ec6f92e707e1e46e19ed8ada9c5df6c5c3fb5387aa58c74e90bc4131189b7a2612cda45d05bfd825d5c0a47500bec931db21b080495e28bed53dd749c3b84bed1d468b8217dc92ed0b3d87eb1cabeacc03ec515de5f69e6f962284157bfd073b6fa7e297185db6416e53640f9b7d4ee5488574f8dd5b77781d3fb2b76967181cf2e6ef5bdca22fba416ff75830f9314fb47f5b5c529d016bf96b5234cbecaad1ebf857bf9dfa5816a5c856ee014ff8734508d5b3d7e0e2df49fd240356ef5f80580fe4b1aa8c6ad1ebf04d07f4b03d5b8d5e35700fa1f69a01acb95be0fa0ff9506aa71abc78f01f41b69a01ad75f7e02a0df4a03d5b8d5e36700ea06b48af622248ea3687b111e017348694cee584cb4d5d4f831fd864cce6531bb57b4e9b94a68c99b48a5a56e524ea37dd1c469fb316963b5b7f34c0ad6bcd352206640cbdc94c9d777641493c734e62e3f006193fe4cca0dbfff67a90cec1d0f6d733369a01a037b2702e8e6d2403506f68e02d001d2403506f68e01d02da4816a0cecad03d081d2403506f68e05d041d2403506f69a0074b034508d81bd2301748834508d81bd3600fd9e34508d81bdd5003a94093ad4c42ad585be5b162de05165e2785b32f1b6333ded39b8c814993966a64f108b441f2bb53f2fb7bfcea58b15d877506b9632dbe60816ef6c18c50fd315742672d382ce7321e83c3c95f1a7c4f22d1a4bb1d541cb1dc1a48ca58867fabce6204bb4bb80b2eef520dfc07576641831fbaed7d9e47620d6770b9b0a2d75149336dd2466dfbb2b6ab55fade4e896986079e36a33cb1fd01d36587eeb5e9c7841208eac16b298f381797418fdd69eaead9d17e1ba4538c480346db2e44bb8596d250d943854a581be04a063a4816a5c2afe1c808e95064abc55d140df01d071d24089c1141ae81b003a5e1a2871ca8406fa01806e2d0d94388ea281be07a013a48112a74c68a09f01e836d24089937a34d08f0074db30729ea6f97a0f214750076e42e27b1ac2cfdb851173aa30c9aca5276694d08224ad264e399149d977ed31a4cc660e2f6998bf85d37a7b49981a5be6a380b983244ce20d8786f92bc04c978449ec0ed1301f01ccef4bc22476d66998cb01734749981a6b3b3400e6244998c440070d7319606648c2d458afa90a30274bc224068969980703e64e923089531834ccc30173e730d2716273996e22b8d294da1f35d8ffc7107b0b77689cd018047398bb8491d4905c7e0839fa4ecb11b91b5aebaea9e4ecdc3667a89ccc6806ce299238a92be8699cd703e754499cd4edca699c13e0da992989939a064ee39c099cd3247152777fa7712e03ce2c499cd4e1268d731d704e97c499a392f36ae0cc96c449dd718ec6f90c70e648e2cc53c939003a4ab9617026bb224967b1b6b930219c278973864ace5d81738624ce1c959caf9b3867be244eeaf41b8df377c0b99b24ce3c959c23e164df5d12277567441ae7d7d03af790c4394d25e71ae0dc5312e774959c3702e75e923875d612390338f74ee5445ce2e406b59b449bda180363a27d24611213be6898a300b340122631ad8686391c30674ac2d4b8ca7d2860164ac224a6d5d03007036691244c8d73eb5b00e62c4998c4b41a1ae6a680592c0993984443c34c03cc124998c4850534cc6d00735f4998c4252f34ccf180393bb5a988c1a182f2d3d4d39c56807a7bc0dc4f1226f10644c3dc0130e748c224768d6898198039571226b1d34ec39c0c98f324616a2cdabf3360ce9784490c74d0307701cc0592308921381ae614c02c9584490c0ed330a702e6fe9230899d761ae634c05c280993389ca4616601e6a2706a796c4cd5903781f483c54cbe582969f78bab7c4b8c1dbb21fa141a1e6ded9ab5ebc05b22279441cd7aa385322e8113b94c12a6c6f9c78b00f30049981ae71f2f00cc0325616a9c7f3c0f300f9284a971fef11cc03c5812a6c6f9c7b301f31049981ae71fcf04cc4325616a9c7f3c1d300f9384a971fef10ac03c5c12a6c6f9c7cb007329137390fd66aefd7185dfcfa5d0b8829055f689d50ac7dcb9268e7604136d88ff3411b3cabeaccc3eadd63e39d8a0c11d8206379905b723c09587913e5d6192293c4a2e834b0b5f3c0cb19f659238a93ba9d3383f02ce0a26e7a83e6e2c89cb4e6890c3589019b0d8b9520a24b1df48831c0290112990c471360d720940564981248eb169900b00b25a0a24312649837c0d3ade35522089f1481ae4b300592b0592387f4383fc0220974b8124f6236990af03e40a2990c4480f0df22b80ac9302498cf2d020ff0690f54cc8be36994d1c286aac6a3d163a400d4cca0926b1dc6dadeb7d9995c66dd1d9dc8975632874db086db4318cb06e72c10c6aee24ad95ee08a18c2649981af7ab980c98474ac2d4b85fc50e80d92c0953e37e15e980d9220953e39d7d3c60b64ac2d4b85fc504c06c9384a971bf8a3180d92e0953e37e15630173a5244c8d3bf6ed0c98ab24616adcb16f2a60ae4eed281d9795685c227a1f8cd2d73029633bee6e481541e2894eabd4f627689b474903259eec34d09701f46869a0c481250df479003d461a28717049037d0140d74a032506e568a02f02e83a69a01acb87be04a0eba58112079a34d0c701f45869a0c4c126afd63a801e270d9418a4a3813e09a0c74b03258e9468a04f01e809ecf5e3b34cbb89f8b7383b3a8a770b00caedffddcb6878b485006e3234867722132fc3f43e622fb18f34da9795fb97aff1a4b53e545268cdeaec776dfe4dbb8f58651fa726d6aced47e23e10a6884f4a65802471e58fc685a7b5102039398c34865653635c0ac352fb761bec57ee37ccf20771877226cd3e79a1c5b7cf66fb626a1ac3ed2cd80be092700a13760793981f52677fe00e566c9aa34f710774854d7a8f956a9c10d9175aefa94ce4f44ec88d908053665d0aed018bcc1c33d3e347a28f95fa3fc66affbc02fb4e6ab9cc2358ccb701f3694ce6ad3b3107edb6dafec8f5148abacdc6cb35d95cd6fe2cd657e136767a18b7b1e4264d344ee6cd87abed194cca6dbae911247f2323d2d26e648f432b3d93493bce1fc0fda8d25f31f1ea59641f6d8e76b482fe6cd0c375bf9d469ace221d0badf52c2669acd45996c9e9d46a432875463bd9d3e076747698b723d732cb7ccb6b33915e87021a8b53bc0b27fa0fd81180a57e767ee369932fc3297d4e2a8b5174be976bcc2639044ef07325616acc26391430cf9384a9319f7e1e609e2f0953633e7d29605e200953633e7d01605e280953633efd2cc0bc4812a6c67cfa3d01f36249981af3e9f701cc4b24616a0c1fe701e6a592303586e0f600cccbc2c0ccf4ff0dfe3f3b1a82abed98f98c985891f2561e266d11ec5e301b7f39133356d1aba796d9794531b5f0338db31d421b5748e2cc57c9793f705e298993dadba471ee0857ce1f4ae2cc52c9b91038af92c4395d25670370fe481267b64aceb380f36a499cd495ef34ce9b81f31a499cb92a393f07ce6b25715297cef0eeecd051ba8ecdb9d8feb83aba5ab3c0feb7ce6729cd8ba683b959f4423f73ee0eec68699c53599cdb9a38e7f561cc9bcfb0ffb6c384efd230e6286959cabbc1a0f28670d20e52c0473b996ba1f5fd98c937d27e536abf69332e95d01daac13ebdc69fb60d2631ad5b1f637f60fc0993715b138f130529842e4ed462df4e9045d4eeaf930df6adb9b4ad727b0077e5ac541d373a0a706f0ce31477338fa16771d0f8ae832be44d61747f92cdc8a48ec46921e12da03779b324ce4c959c0f41ebfca9244e9d93bc1f02e72d4cce51a6bbdd5b5c4aab3b64b9bfbb47ecd323feca4983a4ede6920e379d9f85917c1d5f4314acb35862df8c6ba9b1ffcfb44faeb12f6af79d24b7e2cdf54589d3bdb42efb1468a33f974a4b9d49a7d13e0eadf6567677beb75047ec9352b386dd543785f12d0871dcc664dcae1bc60d5b7a454ceba22dbd9a035da8db99bce33d6f6284a8ce042bdc567878075c61bf0e0e596cff1fb1cfa85478ea8f8453ff0eb9575562ea368db61fdcb0ee64d24ef4b4fbfa937ea189f82e5430a6aff4878a2d784d51dba50d510742dbbd2bcc75c52d56a2c233fb4468082b6f7c35e84f86abeedd61f40d7a1a6915facb4233977126ab6fb01930de13e6f2ecfa1e273d5afacc20d1d75a6f01e67bc389eb67851ff41b9e46e2fb006e59bf087bed70f2fd01e272195a6f20022df397329665cfed181604b7b015dc6beb40d6b5750d8cbbee63a7dbe2b2ec023fa51774b03ac7b08ab911ac74563bdd093a55f78795bb1c9b938a4df0c5a7fc74cf41ed05980f8451520831fb1e10e885ad03d85f3161874761a7fbae54f0cbcb3d714873f8b498ffa340f8a09c922b1a97c23602e5afd9754162d32773a3379c8809aa2fa5a42e086d22651c903ec424dd7e035ae722fb3b03d205f6ab18730bb7db54c4ea366d0e3dd28799c4b1baa1b1216993ef34d5f47a19d0b886ee49e887fe86093ac28336f95f1cab1e1a84471afcad295e5354df9d7d069cf88f301107fa5f1defc097d8ffba17ebbb564e05b2df86910c916c01e07c9515bff78020c8a3923867a8e4dc16381f93c449ddf88cc6f94738d91f97c499ad92f30ee0fc9d244e9dbb251838d97f2f89335725e7dbd03aff2089935ae482c659039c4f48e29cae92f35ce07c521267964ace6381f38fa92dc1121c2ad8eb90daeba4ed76782e8cc59f9284499c55a7619e0f984f4bc224d600a3615e0898cf48c2d4b8a9e9c580f9ac244c62822d0df352c07c4e122671490d0df372c07c5e122671828d86792560be200993586b9686791560be28099398e44dc3bc11305f928449accf4dc3bc1930ff1446564762ddc4167b982075466f62cc29264ef832bfcc4a908a90f2ed4968536be381f31526a78b2a74ad4f5365dc669034365ab26b0eb0fd39acbcb746d394d0e612b3dd630bb874d7add91be2ebaf8691b4d5f3ed06b3353496dc9f06e92faf8575b3a988b6c9e0ba19526b1cc3ba5f7f08a7f9eb92aa3064aadcebe5f77072bf218953e7d6395f03e79b61ac5c7327783c212bf663ed79c29fc149fe16fb969358b82f9e9cb5c834452b7dc58b9ad3286945fba601e5dbe12eb6ee7e055049f405a1edd8b69045bb0fd0be23751d3b755e92d6e71c04d7d177a5d252131268b4bf8456fb5e187d50373bbe712d63990784ef87b1e2779a4941254f5a519512e0fb4b387cd99d069621f0f1a6cce0daf84118e1dfe4baec592a9751dd036df14349981ac31bf702e647923035ee287817607e2c095363b1c9bb01f31349981a7714bc1e303f9584a97147c11f03e65f25616a5c0d790d607e260953e38e82d702e6e792303506867f0d985f48c2d4b8a7fa4380f9656a67243101466396db433023f9b73016e46fc86a1fe2894e5b51b10c46e75f4903259eec34d00a00fd5a1a28716049033d0440ff2e0d9438b8a4811e06a0ff90064abc29d1400f07d07f4a032506e668a04b01f45fd24035ae9b2c03d07f4b03250e3669a00700e87fa48112837434d00301f4bfd24089813a1ae8c100fa8d24d02ca5a7fc00187a7e2b0d54e34da93f809a01a2f78221b6575adac236c09bc6e4cde886170f5862dcdec2cb3ad212e3db91165ab33afb5d9b7fd3ee2356d9c7a9dc6bfb91b88b6061d6264ceec0c2fda86b856db75f9c4bba714f0c0e5a61a5caed336b7db1681a6b3aab15ef62e2acfd98ac7dc54e13f33f89c3d41b58942d7041d8944919cb63ca4d451a182d8a3f143a54fd997cffdbc60fc488142dc7b3125ae6664cdad83284691d334eeeca18bb1d69df72fc23b8566e2eb7856adca86c39b4d0014cda0daf1fab71d6a914aea55b48e2a45658a0716603e740499c392a39df80ebe820499cd92a39ff009c832571e6a9e41c0d27fb10499cb92a39ff0dadf37b9238a92b8a699ceb8073a824cee92a396f05ce2d257152d31a699c6702e7307e34699e7d820bd239ca8d6d57ec1140399c4939d4c4d76586bc268e164b3a0ff04630f1625b37b9ba0b45c695f96932a526120d7c041b3645fc01bb46e75b8ce62a5ffb01f1c830ae9cc9058ec95978b4e0f10330bd312a959c9db760a6d6dea6b5cedd8073b4244eea7e4434ceab81732b499cd49a0b34cef110ed1c238993bacc8b77b203e758499cd43d35689c0703e738499cd4ed9d689c6b8073bc244eeae66334ce4b80736b499cd4ed9d689c4f02e704499cd4cdc7689cfda1a3b48da47852becaa534c5108bdf5612277543081ae74ec0b99d24ce1c959caf9838e744499cd92a391f01ceed2571e6a9e41c0c27fb0e92387355727e09ad335d12e734959c6dc0f97d499cd355725e0e9c3b4ae2a4d607a3719e0c9c93989cb1f22cc94d6ee431571bd3a6364e84315186244c8d8b0c8e07ccc9923089a7390df358c0dc4912a6c619cc7580b9b3244ce2ea621ae63180b98b244ce2da771ae65180b9ab244ce23a4c1ae66ac09c220993182ee62d1904cca992308995c16898a70266a6244c6226270df364c09c964accc49a8ad4d39c5655b11a30b32461126f4034cc1580395d1226b16b44c35c0b98d99230899d761ae67ac0cc9184491c4ed2308f03cc5c4998c440070df304c0cc9384a9b146f249803943122631384cc33c0530f32561123bed34ccd30073374998c4e1240df30cc0dc9d8939c47e5364bfa8b20f04f5baca3a8afa104b4ad156aee59938dc1e4cb8c9d15658679fe45a6093710bb02aad871b79c73e677c13dcc4161aff5505f6ab665f938ebaf168d6a624f0cfa1a5eec9041f657adf4c22312d8106398cd5726743cbdd4b0a24b145d220f704c8bda54012879434c89f03e43e522089810e1ae462802c9002491c97d320ef03c8996157954d842cf62faef74baa4bfdbddf95410baa76ba1b10f116b49e55e6b41eeee5854cdecc4e9da7b61e2bcaf5bc777ba17d46bd7d3f8dfe3bf75143ea4a8d6775a55e01fea2548ea0ba2ec3a661d216c38c81b545b324611287a334cc7180592c0953e332ad81805922099378cba2610e06cc7d256112fba934cca180395b122671f444c3dc1230f7938449ecf8d3308701e61c4998c409391ae670c09c2b0993382147c31c0198f324611227e468982301733e13738289974eab36ae08da52b3afdf29a6d8feb7d63356dacfdbe80fec6ad1b51acd05d3d69a38ec02f606264bcd5cfb840a3f8f841beea4ac4e226d1b9ecd81b5348c956f3d05f6f070ae234fada544ab9cf8cfb438e7fe9238a97b70d1386f01ce859238a985d3689c4f00e7a23037819a6bbf0a0ed6e0bf2fb2dfbb37556162d53c83fa9eee1dd058d359ac63e01aba38959b4025b652e22889d6422742f769099b125ba8db9acc6d4716f16db3c577991afcf7c5bef3a4af554e845659c6a4dcf02d4b756e63f2365c3d0f90064a8cc9d340df01d003a58112af9e34d0d701f42069a01a0b59bc01a0074b0325c69a68a06f02e821d24089f1261ae85b007aa834508ddb3ebf02a0874903d5b831f99f01f47069a0c4394e1ae8ab00ba541a28719e9306fa1a801ea16b2b7262b79fb615792524899587b10f6caba9f163fa0dd905965a788db676e45068c9cba4d2522b2ed2689f3671da8a306649930b4553d780d2c27c47403bad9484491c02d030cb013322095363007a31605649c2245e3369984b00b35a1226b1db4fc3dc1f306b246112bbfc34cc4580592b0953e3b4f27cc05c2e0993182ea1612e00cc15923089537634cce58059270993386ea7613603667d6ad31c824305e5313416147a10d21c1a6485f07254cecddf0d6db3511aa8c6b9f97b00b4491aa8c6b9f9db01f44869a01ae7e6ef00d06669a01ae7e6ef04d01669a01ae7e6ef02d05669a01ae7e66f04d03669a01ae7e66f02d07669a01ae7e66f06d095d24035cecddf06a0abc2ae9713cc692e3245668e5ff2d5629f183c868bc20aec3ba835d4f5f2b4e55f2530105dcde41d61e2cb15db7d467dadfdefb2e818de151f748fb927d310793b279838e21a5df923c491142d7fa414f2478e4a651c2a71a30a8d3b7835c2e97f7418ebeb70b5724f4b6ce96b946957d362b8101cc3e41c6f7a5abde4be72b56feb3d61b37f74a17d59a5fdaacd10ebe1a6b3507700d4b54cd42da36d34cb7696124ffb106e4eb4a8fd5fa003b58e7d875f6cbf58655fb6c03eb1c2b7c396e80da8d8af986ff52fa7214e66216e0d6d70bd9c5b8ec69d91d6c22de75826e5f06e6e39f34ca3bf62d685719ba1a522e6c3297d5c18599e5dc744c9e47912234c34daeda1751e1fc6899edc84b1ca141bb8669e1046259cef928b4c9c9aa3b5d13b01f644a9b0c45b130df626803d492a2cf1524083ad06d893a5c212c37734d88300f614a9b0c489111aec12803d552aacc60e5621c09e26159638d94c83bd0e604f970a4b4c8ba0c15e09b0674885d5b8a2ee18803d532a2c718284067b34c09e15767ca0fbad2e16fbf8a91be856f9c3d5737bb2b7b3683f86b9a7b3c30846e744e74b83fdec429a29a5b5cc9ba165fe404e7845e3d28616a03c278ca9bb9e42d25db75ad1b8d9ca5970629f2b89335f25e713c0799e24ce692a39a74358fa7c499c592a390f00ce0b24714e57c9d90a9c174ae2cc56c97901705e248993ba348cc6792b705e2c89335725e7267067bf4412277585328d330f382f4ded9ef38913ce1ac7440b01f33249981a977b9701e6e592303516bcda0f30af9084a9b1e0d57cc0bc5212a6c682573301f38792303516bc2a06ccab24616a2c78f50274dc7f2409536336de206899574bc2d458f0ea266899d748c2d458f0ea798fb979ff4e072fee72f0423fdc7303bef8b6512df6f11213db56ca2d7699d2b1d9d41196e310fbcf86fd050eb3ff74f7785ada50fb8e669955f6edb947ddf12afdb1ebed4fdd3b6b3199bbd8a75ceb1a4446b44164f899a8026bee963e2c34c1a29cd5f675ee3d579a05a6a163bfc6606d5e46da48fb8a52fb985b3c11f1bfc16d4454637fea3e71e2babe8cb401de2962daa3020e3023fa5edbfd6f69f57f9416ff9a6aff5af7fe333c776974109d913604be8b2dcc74af5be2df4546da2893b8e4a8f7251e195d9628e11aafbe5efbbf6c1f969136ae97dfdcf72b179b6009cb86fdce31f0cae47f5ff24b6632fc82efee7e435faf1b0daf2bf0e74fa35969e6f9d5ccadfe0885fe55adbe7dd5757c9646db5682125bc9bd6aab4eea3d6fa835df44fc1476c6066fc215b4ebee5f51e2cfa2866e5a5ef28be382561ed34ae6138c4ceaf9b1773fa4db67c7dff9d86e7fdef7bb1edee92f167fed5cff776bf27fb796e8df166d0a7c7241b03f6ccf9fb2f3dfb6b757c53eeb96bdbc26fe893b9fe9f8ace43e77729f60581fcf8cbdeb819d9e177fa7a33bfda4ef7737bacb79147ff522ff3771d784d85aed48d4b9a75714faa3bab3bade7fddecafeec13524b846bbe7d4f84f541dbd37b977d61abdd7b977e4a2980bfd6dd7fdc4fda622fb5595bfd7b8d5e11969ae8e43d7b3bccadf3932d206d99fc657ed26feccb5edc4a39575a4adb4f81b7c9aff2bc4ee67f3fc7b705ec1275cdc71d799baab7d5a5aaefd4f90a635a523412be803d4db7f82ef628ff77d4c7747effd68d7b9db765af7fdb8baffb7be485f9f28e83eb9d757f9ab78c41f75769f9fb4efcfd773bf66702f7f95a953dcdf6263fefcd7bbbf7bf4cfee9be956be992fb17ff9e0e0117b8b6d8e5e9ebe5cb689e9ff7faf0d8fb7afee0700 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/bb7f0f1c83ce5af4ca88ed109558c275.asset.meta b/Assets/SerializedUdonPrograms/bb7f0f1c83ce5af4ca88ed109558c275.asset.meta new file mode 100644 index 0000000..b475c6f --- /dev/null +++ b/Assets/SerializedUdonPrograms/bb7f0f1c83ce5af4ca88ed109558c275.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4a212f3b4ff84b14c9c1c049d49eabec +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/bbb37b8d4f56ee5408fb40baaca6168c.asset b/Assets/SerializedUdonPrograms/bbb37b8d4f56ee5408fb40baaca6168c.asset index 8a24e69..9b6be46 100644 --- a/Assets/SerializedUdonPrograms/bbb37b8d4f56ee5408fb40baaca6168c.asset +++ b/Assets/SerializedUdonPrograms/bbb37b8d4f56ee5408fb40baaca6168c.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c1547d7f0e7e2dae24e811609451292e0ee0482074a154902a410a0095068a97b4bdd9dbaeb5377777beaee2e4fddeddb999dc93d3b9973b39bdd73339bf7831fec5d3b7bce7fceb8d5c964ce9f447fe7bf856c1e9bc806b205ac88ad656b9c5f139d63a9f3d73d53d7e7b032e7b8c2f97fa973af3feb5ec59bfc4f9f4407e7ff3ce7ac9cad77dedcc00a9d6389b83f9f153bbff39c778b9d337e75b9f3afd8792a51cf7969019bc466b359ac7da26d1522168a97cae5b504b72bd1c8f97f02dbecdc2d164af18f648a5bed9dffe63b77cac5bd524769f5dcee6c4f6156a973afd079a78cad76642e13121bcd59c4c40fe61efac9637f79dcd9f9d758feae2b7f3792bfe1f3fc3ab76e8f14cf0e00cf2a99039d7ff59d7fbfc9f34cf7bceedbf23ccb3d4fb4d16434013206c963b63ce6c863aef3af016375eafbd03fd5bdc1ae0ef32f95e7dda4dc06f2bcbb76de591edf023abee5f2491c2dcfbbc8e310709fcb68e87dbe4e0b793e547baf977cbe913c7f479e3706f7d5757e7c57de6f22cf87c9e370701f326b2acfbbcae3dbc096b7a56e05f27c07cd96b7355bd4f32a4c876aeff5a9c2963e55d832421e4756614b75c37f941bfe75948f2a1f6ccafcc50da5e7e82a9e4f2543d93026848c666e38f0685a651c6d06be33d6b59fa9f0d9591edf03cfbc278ff524f366daf5faf27a73ed7a03e47a43e47a23edfa38797c1fe8f2bef6ce07f29dedc0b9a367fdbf34191fcae7b6073a4379ea7e0bedbd8fe4f596c026f8de47c87b1f6bef35d4defb1879ef13edbd46da7b9f68efa9eb39e09cdf6fe5da58ef11797dbc7bde2083858b2f13e5f133f99dd6e09c1f3f95d7db8073273c1a6c95dfbf475e9f248f9f6b723eaf428eb2d7a4e314e6cd5f26686cbf605e5ff9c295d930c37dafe11296f4737efc523edf5693f7a526af9d575ea32df27c9a7b4cd491cfb597d7a77af5aab8df42bb9f03be0befcb30486c27af7700e7fcd818f95e7fedbefebd3c1036f0fe74ef7389ede5fd8eda79a71461a3c7e9afe43b9dc1b9c3aef11d55b09b51053b753f2a764a1ec64eddc7d8e57b9fab163b656b0b964c07958f2a9ffc9f94d3053cabaef3e35fccebfb7fb9329a2e61def450c9fb5a3edf159c03b98996defb09995e255a011d15ebd6c96be2bebac68f75a59c1dc039d74bc5fb069a5edf697a7da7e9a5fca11b3807e94dc5f7ba6bdf53652603ff0a9639e01ca4b18d9f91f7670663e9d4142ab1722a2cc96bf3e4712eb8a6647f03ae411f68ec3e3348c61fa72ee21ebf05cf7fa3f9c6b7ccebb3f383b1f7d8a1d27568872a4b423b94ecef0d76fc90c28e1fc1f3df83e7d53d68c702796ca8c9ff49b3e327831d0b7ddaa164ff6cb0e3971476fc0a9eff193cafee413b7691c7469afcdf343b5419b63a7628d9bf1becf823851d7f82e77f07cfab7bd08ec9cc9b16b506e74e1cdcee7dedb9bf9937fffd9b79e261859c765e39db5f8984fb3f1a2ffdfebfdafd7fdd23ff09f510e7303d90fe5ca787a6ff38664c93841eea3d787f47effb1569154c2b1dfb5a34d29eaba7e9a7f286fe9a9c769a9c17cc7e9550e5f9aec8fd06defb091997130d353d145fc54995ef754eeabeca5bbb013dd47bf0bee2a4e5818926cc9b0736d1e43765c974dbf4bebabf93bcbe0879ae99f69d66da779a6b762affda9525f341551eda8d55c4ad96aaac5eddb2b96c9f116d4fd06f5478b4619e32b538776c6b25cbbfad94bd7bcafbed3439edaa90b325858e7b316fd97c77e68d23ed99a77c22ceb9cc47a46eaa3e27c34234d1c1b46177701dca6be795d746deaf285f0e64def2de624d2f75bf85763f077c17de576190c9bce5cb4c79cc42bed75fbbaf7f4f952ff7d4ee2ff13e9718c4bce54b751ea06c9ee8c83c657371eeb06babf20d8cddd22ad8a9fb51b153f23076ea3ec66e99f7b96ab12bf4fa1f2b66c9fc50b5972e07d764dc622b5845bccf55e5c122f9dd4ec9e713eadb2be57967a9534f70cec346e5fd261d4be451951d555ce9c2bce9b86a7f5c65f8fe6a60832a9796826b2aadee0aaea9efec90b4355bb591ee2def7503dfea0a9e57f76078ad91c7069afcee9a1ddd7ddaa1fc19daa1f2b21e063b764c61c74ee05b3dc0f3ea1eb463ad3c36d4e4f7d4ece819c20e293bd1cb6047ef1476f401dfea059e57f7a01debe4b191263f43b343b53955c70e95f7f735d8a1fa2f4c76f403dfea0b9e57f7a01df534b9fd99377f57fd252a7f1fc0bcf9bbfebebaafca11fb78efb3320387f2a42d1d557db2bae500a5cf06f98d6ca94f2f70ee3cd3a97f0a59ebe5719c7c278779f3e71c29a3c8d5b9d379de6f2754fb7c5baf3c711dca6be795d7f924f9bcca6386336f9abf115c877287c9e77a6be78aafd27bb0bcde079cf3ef6ef13ec736c9e3bef2f90cedfe66ed3bfafdfde4f5be2918ebf9aed2ada7a69bca1ff6d7c2664bd267ba9e258f5b34d9ca678768b287b8b2bba8fadc019aec0393b27b774764ab7c77a8267ba894adfad40ed2641f9c94dde36d4d3616ee8778bf8d86ffcedab91efe23b4f01fe1eadab526c25fc5572dac98aa3fe8f514a9636224f3a44f15fe338a25d39551e0597e1ccdbcf177b42bb7c73629a3bef68db1cc9b868fd5e48ed3ee2b1d401f96f8cd8fe335e6e3dd6fefb0cdfdee0eaaeca2c27ea216f68782eb50c729cc1be7d57927e95b2a0c95cd13343d264806dde5738779795684438b2af453efe568f75b68f7557abbc57b5f31ad785fb521b7d2decfd3eeebf20fd7fc43c957e1309979cbd5aafd4071d3ed3942bbafbea7ca5f2a1ca66abea0fa0994af4c63def60f25ff48edbe927f94f7b9441ef394cb03c7d13ce4be1e4775bba66b764dd7ec9ae1b5ab82f30cafdc4ae13b0a842f4ffb54fa8ea5033de4791469c8c152877c664e4366b264fc9d099ee5c759cc9b86cc72e5f6fa58caa8af7d638ec66f8e2677ae767fae3c82f64bf19b1fe7316fdc9de77e7bc78fddefeea418ab385aa0f9f4a1e03ad47117e64d43d4b94c437aa9fe4a65f37c4d8ff99281acbb31550e1da785839e86e8faa9f772b4fb2db4fb2a0d39d87b5f31ad787f8116feeafd3cedbe2e5fa521f99a7c150e0b99370d59a871d3ed3942bbafa7212a1c1669beb048f3955d99370d51f28fd4eeeb69887c2eb11b0b9786ec86dcc7d21065976ae3e80acea15d7b78edaae0bc87576ea5f09d09c2d7f1d31db380bf51a721074a1d547b8a9e86ecc592f1772ff02c3f2e66de3464b12b7767c5b5bef68da51abfa59adc65da7dd9a69358027458228f85cc1b770bdd6ff791ed9f7d649855c4d162664e438a351d57326f1aa2ce651ac28ba49e34a448d3a3c8d5a3afeab738c6cb134d4374fdd47b39dafd16da7d95861ce8bdaf9856bcbf5c0b7ff57e9e765f97afd210adbdad221c56306f1ab242e3a6db7384765f4f4354389468be50a2f9cadecc9b8628f9476af7f534443e9758c5c2a521ab90fb581aa2ec5aadd9b55ab3abd46b5705e752afdc4ae1bb17085f5ecf53f5b3306988def6b08679db1ed6b8cfec7c650a59c7328fff27d6326f9ab156ca78dfd5bb5f07efb713eb98b7ede158701dca6be795d76f2bf3c6af7d347fdc08ae43b965cc1bffd5b99f36772cad55b6ab7621c8567d773df3a4bfe259759d1f3768dc36b83206a9feaafa9a3ce5bf5dc13994bb49bb2ffd3eb111e8d85093b99ff6ce7e9acccd5edfadf09b7d9232139bc1357edc5fbed30f9c3b760d68e47d5ef57da3cf0f03fac3f78e63de78da40b3698b66d316cda632af4d4a3e93fe953840f3cfe3e551a5732a5d6e05ced57bfc7890e6bf07b9f60c2cf03e57d13e73b07c1e9ef3e321f27a734dbf43343d0778af8be71a7bdf5136085b611aaa6ccb01e7d0cff5f737877c7f4bc8f7cb42be5f1eecfd8aeff5ade2f91e557caf6b35df2f0bf9fe9690ef6f0ef9fe46effb2a0e56e4718a8fcce3fa3d20ef87c9e3c649d987b1643c50e5f6c3a59cd6e0dc899bd9f5b4e70e639e3420a1b7211da1f9d95c709d1f0f95f7076a720fd5e40f70edceeee99553f11d4d8e7a9fcdd1e4646af76701db838e555fad713c9279f3a92325b307a4eeaa7d7095bc7f94979d9297384a93d7ce2b2f27cb2b47f415a5b2417def182d4c8f71e5e51ead3d779c572f710e591fabf95829b8ce8f476b61aaf41c07ee8373a6ca8559e01ccadbaa71dd2af53e580b07a59f9e361dabc93d41d37f15780feaa73f2fe7f9e4aa325fa9c12ee883b02fafba3ea6facb4f0432d4f74e6295cb54b24e97389979cb542781ebfc788ac6f41457c6901ba59cfa9abcd398377d3a4d937bba76ff74793c03e8b85c5e3b33794ddc57d7f8f15429670770cef55263101a687a9da57df72c4dafb399b70c73b67c7f85f6bdeedaf78ed6e428fef5938cd4bd0abf3b8979d2e8c16dc0bbfcb9a2107e70820c9314e37b2b9e55f3634e0cf13de9274cd9784ad2fea197fa78ff544ddf53248b7398370d3ac7e53d54b67f0e4d35fe43c5e77381ff9cebbe3f2c5ffbce79f23b83c0b97a9e5f6fa3bdbf2ec57755bd6c9c7ce77c29a32738e7325e97cf9de6d5859d9e643771758aef9ca1bd07e24945989e959435feaf14b254389c238fcaefcf4dbe3f3c952eeafdf3b4703c57da7c81168e17b80c865f2b653fe0231c2f04e178a1fbfe8836da77b669e1b80d3c0fc351bd9f2a7ee8e17891168e174919f21bec7caf2eec8224bb29a9be73a1f6de3643385e949435e9091fe1d0cad56d6433f79d9172fc01bb441e2f66a9e37a7b9fcfa5d2e172cd172e93dc2e961cb3c1393f5e22afabb26937709d9f5f2aefe756539fab357d64be9c50725b837387dda869eef3a3545c577a5c51051325f73229773038e7c7cbe5f521e09cbf77953cbf42de1faabda7ae0fd3ae5f09f45165bfab98b7ac384e5ebf3af9acf8ad9ee5c76b98378fbfc6e530e64a4db67aef5ae6cd4baf95c7ebe4f5e1e0dc91335a8ed518bdcd3d8e39587b4fd973bd7c7f043887f76f90f74782737ebc515e57fd9437c9f3d11adf9be4f1668df38de03a3ffe47de1f03ceeb25f5ae889b55f883e25591ef5fcd3cf9fe6895cef8f5af543e2e59b16b812f2a59d7010e322d19d5087c931faf09f1ed1b99377ea9b62d155e63ab29f7664d6e7779bc29a4dc5b107d55b88faba6dc5b6538dfc2bce90a3f77fc679c9aeba7c23d477bbea7f7f9f16a7cbaca076f65debcec5629f737d79ef12d343dd4f383bccf57c8bdcdfbbca71ca17cd2548ed851ca1def83c9edf2dbb7694c6e93baa8391977789f37e6a141be7b27b049c50b659beacfb82ef98d316a4c824cfb26e4bbd727f6f7ca49dccebc7998b2ef0e66cec3a45d893b99270f13e7fc3bcafebb347d4df69fe5be3351f9cfddda3bf7001b551a756f52ce54d5df61e2769f26cb6f59b41f789edb7597c647da95b85be3d31d5ce7c77be4fd09da7bf7225cef95c7fb34aef7b98c26c9f2cfa46b3579f76bf294de0fc8eb13b5efdcafdd9fe4bdcf7662deb4483e5fd166712c0813f92dd1de2ed9eeacc651a462fb803c6e63d5f2e5c9bf79df4f3ca885d183f2f810c2fa21797c5863fdb094bfc9fdee643526f6414d5f932f5d24df5563691ed2de81beacd222bfbefcb026cb6f79bc1f789edbf788c649ce574a3ccaccbefca83c3ec6bcbeacde7b1ce1fbb83c3ea1f17dc26534759126e74944ce93f2f894f7fba8afaaf9574a0ef455c920b0afcaf14389a735764fcbe33308bbe7c0b7ef95762bdf50f9e4b320fc954fafd4eea9dffcf8bcf75be21b4a07785fcdcbebe17e779a2cff4f93fdfa1569690fa0a30c6bf6983caabecf20ebb45c6290ab78bca08595bafe5f797d0af3a433899781fd2f0319fcf812f396ef5f72edcc6f0364c2f75e91c757e57b53c1b9f3de8cafb5e75e93cfa9b1d5aaffec75a0d36bf2f80612fe6fc8e39bf2a8d610ca03e7fcdb976acfbdebfd7642ad97a3b8bc27ef77d6f4785f5e9f0ecef951add7d31a9c83efb2c7bdcf074a8bf97b1f0026724d97c487e0da87eef7a6bf0e9e479e99a1da409ed074d2d3dbfa809bfae647cc5b96fc48ca2cd0be8b3da7dafb9ed4beada7b5e0dbcadf3d7ef1bae6532a7cd4ba4bba9fbcad85934a63a5ef56a4152f334f5d6bda6f9a9c1799277e8973e8372ace7406e73cce9ce5f5714fdc7d4a1ec3a4094fbbface54fd7e3b697a7da2e9f589abd7cc5ceff3894fe5736abd8e2ee03a3f7e2cef3792df9ba63df731b04bcdcf190eee05b54bf5c7a9f10e6a3d9d5ee09cdbf188d4e72fef7b89cfe5f3aafd36035c87f2da79e5cd527e390ebca7ec52f9a65a9b652c3887ccd5ba383dc13997adf2870d4057e9fbb3cef37e43dc83e9b6ce43ad99d10b9c43fd4d6c950cc5e20b4ddfa9cca3efec2bb5e7be61deb453ae9391506bab4c07e750c7d65e1d955cf6acf7794f7ba6caeb2e4a32aa68cf54e34e72c0b98abb55f9d573aeac39aaad4ecd41546b7728ffdf015ce747b506886a07795e1e4782fb417dbcb716a6df6b61fabdcb6bce9552e7f7bdef257e60deb6bbbee03a94d7ce2b6f9e1ae33d0ebca7d257b566c678700e7d5bad0dd2139c3b32e72ef1da227494e136af0533dbabd6f1e805ceb92cd9fe37f705ef7b899fbdf6267ef6ea58216fa626ef37ef73421e7f6e96a697ba3e3b98be153c4d61ad64a8b0516bb0cc01e7906b6b70eec89e5f4f7b4e31c806e7fcf80b3397f17fd174cf05e7f0bb6db4efaa74f305eff77db7f9487b2be2685fe63f8ea6ba27cb9e4ce5bf6a0d06356ea385abff42d5afabd65dfa43e3fb87fb5c811a1ba0c218aed7d21a5c8332fa81737e046bc288df5cee7aaf8c8ab176bf6b32e4f30b541bcd4b9ade7f017d5499659c3caa752c76d4ae4f00faa8f09858d92eb116912e7b72322c1ba8b60ba58b5a1fa63538e7ba2b5b15c37f81dc36e01a94d10f9cf3e3df40e7bfa5dc3bbc322a18feadc9f85b0bf357bc7af3e5632af479b50a86705db4c6e07d9da1d2699241b68961557d70fc3b09f0cd84b44995a56439b78e5a0b67103857cf83785cf1fe7729be2ffbfe76d1d7976d0f6c527dcf8a17acf34b9d02d7f995bd7593b2c46fae8b9a4f24eb7775ea69f6d603cf437bd5fbef576def2235a645a55fd0de37353f80f6bee1d7defa09b1c6d03456cc96b2752c5304124f01fd2ecbacdeac7a4166e10fc243195f99997f763ddbecbc5a6c5a157981587379bd635db67155e48e62ad1ef5f589e2ffa5ce132542e8bc3a953e7167a54f70e5563b7f8bc192cee5cef5a9624568bea87389736720cb778efcad256c10dbddf9eb95b2d0f9ec6a2741296605ceffeb84bc258eda959facca24befcb3fece3c47a6bb3a75a97345015de79caf161ace17ff6f149a160bedf39c6bebc55ad96bd80a277158cb3689af55b6bdccf96dfa66814466d6d1bc483576dd5d0a5b05d324c71aae7da6f0f3ff1f2235112222399a27e361bd4c91c21c5b2924fe3f433791e19da97952c620812ce1b996cd32c538c179950806b7b1b28566ff76790f712a70a96c3193e1c1dd5958900ce1e2efb3b67c78d43f1deb7b4dcb61990db8695daa302d15582e2f43ac3616c484faf5eb65714575fc09137e314d657e1af1bbcf9588e78207400391f97903402c7556e0fcd8e4fc5b2d7cb54c6466ab9cf322b69b50aa585c2d713eba42a85e29b4b2b8e8860278e5ecb42aa531e4754cc845cb42418d783cb649426ae88d2aac4842cf1465a50e295c13fb96283cd595252815791a8f6bb676eba2cfce7b7d66eed09159c32faa6f0e9f26227caaf3552c84ea9a42a849ba2345d5b940aaf0695a6157327cf81f33c366888f57a50346b09e8960d39af171ae7bf57c9c4f7b19a03134f3db2ea50fa6d2002358df4450cc4d5c904682b31d0df79665c7ea31dcde37c3168261c74ad6f9d101a3d8c040318b536c6952abb1a616d70811dc1013dc2aa4e04698e0d6210537363954f37447497e6fad90b2d47936b83bf11a7f3f3d5933fb535b244e56ad02e64d4d4c61c311b6336aa5074e5b3c709a6292db8795dc0c93dc21ace4e6268712a306d25f72af5e1ec9d39af6bef3c84e2c55c13b680eb99d899ed87f650f527a951b94d4af09cebb2b1d0e1b452bc106e77d5303546aa29d7da7f65d04cdeeccd42c164c238cf0f626cfe7d8bb62c1ae3b7f27dcf95b60d16a87b0d1aaa54932b7a59b9f0ca00b2eb815a6727783ca89202ab73649e639640f66a899195137c4a5b7c1a4ef1885f4b698f49da290dece14cb85ef9492c6f205ce35b7d976b2b85b226abbc9d6c012b17d5e5945790a7b7e8e13ff368b8df80a9dff678a6df736087d52a7033d7da703bd443ac0db81e875c6528af658cce81d363277c0d2a03e86342811300dea68722e917ca4b7edc66d02e1728267c17cf446378dc3b3cf3c33daec2c7d19d614935a072ce03b99828713dc19534b0f9ebe78f074c6bcaa5fd8f4b60ba6767f83da8c6d1b1744edae98da03c246861d30b50746a0763753641059de52d2c8a04a23f3d92436c35171a0735cea3cbd14fc9a2424a9de97a58ea4cda024a3de4c1d51327da7a8592292f4622c42ddb008d4dd14a49cfa2093ba7a7066e1c1d903f3c2ecb05eb8239624e7449024ef8409cf3508670185f734b9b8287bed5ee32eaeba0f83baf560df6e3d44b875379f6e8deb83b9722f2c751a6a4c9d0c41972275ea6d0a3a51b05d96c6a09be0e85f2e64bad7e73812973adfe6f2c68b2fa8b21544a6de4a1d90c37c07e4701190bd2b056438edb060ed8305eb88088235038bee232388ee7d31e1a32210be33267c7404c2fb9984f3c6b331150f2785ffebfca924bc192ebc3fa6f95883e675026a3ec0249c673be358c832db408cc9780393834d6aa7609289099f60107e5240e15998f08906e1db020a1f644a18459dfc90b4248c558dc59aea58c6bf063b21d477dd2e64ae911a8c33cf392e175af0eb5c8baac770a54e562755f001ddaca255613248406bde0aae4d13d1f8644ef4a78844df2e9db12c23dbe4f0bc91874f91a8d424c4f392c5b211987f7f8db835c7f9020fcd3cd94811a4d128074be1a61952b8a025d45c5384130d206b6a34c2f1369c0da2e2ce7f6f94c15b20be9d1c6311262af1c9815d0d399bc8dd8c4e3b5d386db60fa78d427bcc1d0763e9ef0c43fadb33112cfd1d6212ce5d9a4f01085b3c1a8a099f69147ef0d820c2879984f39c639621c9cce249e6ec641aa57f670afe9de1586a30c7941a7430a60613d94a9182ad722ce71296897be5ced512273a05491b466056cfc5ac9e572dab476256cff79f0626ad1eef387c51203b47614e5f6072fabac19c7eb449382fe5f1a115a11a17c660921786953c1603b28b0948bd6040c69984f31c872f2610b636301ed37c5783e6cd1a04d37c02a6f96e11683ed1203c5334e997b09aeabdf1167f52f583a87ccf7faf0d6f46f25787e77dd419622b3f3a5db1fc709229c87952b2a749fd0069ce6453708b4e96740eb982c34aab37e46a2fdfc1b89899875cf9d1010b9e2958745f6288eedf058cee534dc2f9f34b99a19e24ba77aa37a04cec9c528fb97f063a7f1a56ce3e530cb69a66d293a7ee85063d4536cda712d51181522c0265608ab865aa1a058f5d418a03795832bbdc90ccd60d98cc4ec722345f4eb7525983174c4d00bab3fd59163bc039babecb8779f3df6b9dffb9f12b648b308f97ddc57092f56c80735ceefc5f268682f141e0dd9d7faaf8ce250e1212978b985b2ade73078c73b4fc7eb6737f8473cc718e3d02a5363330575e6972118eaf249c4fe66398f736615e1209e6eac3eccef615c5e3d52250568a002a92896b77317fa64834f5f3bbeefbeb84dc15428b72e76fb0e09889255bab0cc9d64f4d83255bb30cc23345ff703a87ca8d779e2a134deac1f394d5bef39452661e2697faeb586e32db142c9cdc1a93427a9094e24132c71424a2633d9d8327f4143c58a0acf51d28eb9879e04455dfc78265ae899e183930378df4fccc3f3393dbc737b93241ae6d25ab524ed142a8cd333933a726f631d2d4d9c3948b96e10e3d1f4bc0d61b12b07b9a054bc00a30cd3718346f1850f30598e61b0d9a1fde3c98e60bb15c6f5f53aec74caaa7c83576c154df64503d7fbb60aa2fc2846f3608bfb26530e1bb9a84f3121ddf832a6cc579374cf8fe1108df1d13be2502e17b9884f32aff01a6144317bc072e784fcc0f0ff42338850bee8579c941062fd9da2a98972c3609e7cf1fcc90422aefb60b51485d82613ad4145d79b92a682195674636d6079662a80fc3501f1e0ef5320cf51126d4cb22431d9f3a41a189108f5a471aa2d6b6b6c1a25611968c1d154132568c093f3a02e1cbb134f2989069e40acc238f0d9946aec4701c67c0611c9092024709e6255b4d0970bb605eb2b74938afff1cef07498afacf2a4cf0092105afc6589f1881eb959a84f372e8497eb44e51065d8305e2c986402c681f2c10d762c24f3108efd22198f07598f0530dc23f0e287c1f4cf86906e137760c26bc0cf394d323f094724cf81911085f8f093f3302e11b4cc279cbc4597e7c7c1d2e78a349304f35f9364e95327cde791f34c35fcfe0721ac14a55c1b2e67d315bce31d9c26f74f77c35c8b73661df3ad7f42d3eaa77b1f337cbf95758a9138cdfe1ab6a9509b241b4d88c69719e498b56408b5259f8592ad8575f83fd300dce3769d00468b0d8a9289789ae8960f9f6fe58f27381296deb1c2cf9d98245e20b2388c407609a6f33683eae4b30cd0fc434bf2802cd0fc234bfd8a0f97901353f18d3fc9208343f04f3cf4b4dfec9479eee2ed3b23d9db46177990e8d90950ef7da22711cc0c638ff4f066956a110b4daf9c52725ae73aead14e9cb26d188592cae16054cd30ec5f4bfcca43f1fa193d4480d83ef5e61d30869cf9e868e1937cdd62b50a5e28972d9efeb56c55cfbca99db20bb59bc19c4a6c34c367107b9bce28656ab15fb973564ee9f81ee9f6015dbc33127bbd2e064f5023ad91198f0ab0cc2eb07147e2426fc6a83f00601851f85b9d73526f7eae92b7ab8f5f24ce7982bafb951657f36583e3bc439067198a33187b9167398eb423bcc31d837afc7be7943e86f1e8b05f58d11a484c79984f32224df0c2d4c11722b46ea668c94d826ad3e24158cd3f118a75b22e074824938cfeb6e6595f3ba7a4383e575279a84f3b1807c37b35063014f3248ce14b36b97309b6693556f26d9ed261f35f6cdf125a233444a15956658cfddc998a3dc697094a3033aca2926e13c38eff2135befc0059f8a697db741eb5b026a7d1a26fc1e83f0478605137e3a86e4de9048cec0b4becfa0758be1c1b43e13d3fafe905a9f8525250f844d4acec6547e30a4cae760a01f32809e1310f4b998d60f87d4fa3c4ceb470c5a6f09a8f5f998f0470dc2b78e0826fc020cc96321915c8869fdb841ebd7036abd0dd3fa89905a5f84c59827c3c6988b31c94f85957c0926f9e9b0922fc5243f1356f26558003e1b32002f3709e66ef79cc1ed8e1e19ccedaec0783c1f96c795188f1742f2b8ca2498cfbbe17ba2849da8753506fb4503ec0ea382c1be0683fd5258d8d79a2473d82f87847d1d06fb9508605f6f12ce61bf6a80dd736c30d8379884f3ea12dfae236c75e9464cf3d70d9a6f0aa8f94d98e66f44a0f9cd98e66f1a347f21a0e6ff3109e7ebb2bce5c70d87e0826fc1b47edba075c6b8605adf8a459e7742469edb30addf3568bd687c30ad6fc7b47e2fa4d677605abf6ff290805adf8909ffc0203c774230e17761c23f34691e50f8dd98f08f0cc23b4c0c26fc1e2c303f0e1998f79a04f32ce7131632cbb90fe3f1a981c79c803ceec7847f66107eeda460c21fc0847f6e10cee7c20511fe2026fc0b83f0f3020a7f0813fea541f8c701853f8c09ffca20bccb9460c21fc1847f6d4a0aa70613fea8493877dd6f2a6e6873ccf8569bc1a7823f66fa0e6ffbe6bb5efa9c003fdb39ce146d8a256cbd68e75b0046eb05e91f781c43fa9d01e9d6e9c1903e8109ffde20bcd98c60c29fc484ff60107e7440e14f61cef023e60c3f55cb199ec68cf8d960c423f9c18c780633e217cc885fab65c4b39811bf198cb8727630239ec384ff6e10fe5340e1cf6384fec008fd592d422f6046fc6530227f7e3023fe8b19f1376604df27d29d1ccb77924c3df1bc408e332a67cb4542534a3c35f64593357c48a2d89d52b7c6dd9082db9099c2067dc9e3ea2e771c6000e44b5888f3cd242b15f416040bf1974dc2f9c4ecba0646996229d7ea4d4aafe7c86b2066f1387f4c3d8d8b71255fc108d43710d863613002af62041a98bc84136818c294d74c5fe305eb46897005ebd731468d0d8cf27709c6e80d4ceb2621b57e13d3baa941eb518b8269fd964938af6b344b84ac6bbc8d496e1e56f23b26c9bc7d6bbb44f8f6ad7731e1db4720fc3d9370de4ad42211be95e87d4c78cb08847f808566abb0a1f9a1417266777e910ff2b761999aaa96ec0fbe544d6b5392601c24d0c6576e1b5e5f6ce8c04758cadfd64faa962291ff1813dc2ea4e04f30c1ed430afe148b021dc24681cf30c91dc34afe1c93dc29ace42f30c99dc34afe124bc7ba44908e7d85a9dd35acda5f9b24f3746c073f7ec7e33922f81b93609ea577f32338c5e0b4ff61a0bb4700fa5b0c478f9038bec3e2f78e21e3f7f718e79d4272fe01e3dc3302ce3f62387a85c4f11326b87748c13f639cfb84e4fc8b49b0bbb76578cebf6238fa86c4f11b2678e790827fc738f70bc9f90f9360ceb97f049cffc4700c0889e32f93609ef20f0c9bf2ff8df1c88c80c73f188fac903cfec5040f0a2938d972a4e1c88e004702139e1381f03a26e1bc353fd70f9214cdfe754d82b9ef0d0eeb7bf5301e4322e051df249cbbc8d0902ed200133c2ca4e086188ee111e06884091f1181f0c698ef8d0ce97b4d30ad4745a075534cf8e8088437c3848f894078734cf8d808846f67109ed9c3394df01511d2dfa611c5929ba95b34c6f9f1d2629cd8f698fb8f0fe9fe2db0709e104138b73409e77dc813fd689d622d91562607127b7f2daf1107a2739c49be9bc2268ba630bef50f85965803586b5310f39098e2278827e3f5d8365899606ad832415b4cf2b4b092db6192f3c24a6e8f499e1e5672072c0198114102d011533b3facda9d30b56746a076674ced5961d5ee6292dcdd399d1db2d9a7ab4930afcdce09599bdd01033d3702d0dd301cf342e2e88e95a0e7872c41f7c0381784e4bc23c67941049c77c2702c0c89a32726789790827b619c1785e4dc1be3bc6b049cfb6038760b89230313bc7b48c17d31ce7b84e4bc33c679cf0838f7c370ec1512477f4cebc511683d0013be2402e103b11ac2d29035844c93605e595b16b24e9385695c1852e34198e0a29082b3b1724171d872410e26797958c9b998d3ad88c0e906636aaf0cabf6104c724958c94331c97b87953c0cf3bb5521fd6e3826787548c1233016a561598cc4dc6e4d046e370a13be3602e1a33126ebc232196392bcbd73ba8f9f60ec820b1e8b15a3cb4216a3c7610d38e5211b70c66390d787853c0193bc21ace489582cdc1832164ec2dc79df08dc7932967d6f0a997d4fc1706c0e89632a56b8db2f64e16e1aa6f1fe2135cec3046f0929783a86e280902866601a1f1852e37ccc970f8ac0976762c20f8e40f82c2ce138246cc2311b4bf70f0d99eecfc1d2fdc342a6fb73b174fff090e9fe3c0cf2116121cfc7241f1956720116578e0a19571660ee7c7404eebc104bf78f0999eeef82e13836248e455862775cc8c46e574ce3ad2135de0d137c7c48c1bb63284e0889620f4ce313436abc27e6cb2745e0cb7b61c24f8e40f8622ce138256cc2b1044bf74f0d99ee2fc5d2fdd342a6fbcbb074fff490e97e2106f98cb0908b30c96786955c8cc595b342c695e5983b9f1d813bafc0d2fd7342a6fb2b311ce786c451822576e7854cecf6c6343e3fa4c6ab30c1178414bc1a4371614814a598c6db426abc068b7e17858d7e6b31c9178795bc0e8b7f974410fff6c1485f1a92741926f8b29082cb311c974780633d26fc8a08846fc05ce4cab02eb211cbbaaf0a9975ef8b65dd5787ccba376159f73521b3eecd98df5d1bd2eff6c312bbeb422676fb636e717d58b7d882a97c4348950fc0a2c98d1144930331e1374520fc200cf6cd61611f8ca9fd9f08d43ec4249cf77bdfe2272453f47b1f6a12ccb7debad58fe0145b6f1d86e1b82d021c8763a1787bd8503c0253fb8e08d43e1253fbceb06a1f85a97d57046a1f8df9c8dd217de4188cc73d61791c8bf1b837021ec761c2ef8b40f8568cc9fd61991c8fa9fd40046a9f80097f3002e12762c21f8a40f84998f08723107e3226fc9108849f82b9caa3615de5544cf26361259f8615281f0f59a03c1d2b503e11b240798649301f32fea41fc129868c9f89097e2aa4e0b3b062dfd3218b7d676365eb674296adcfc1fcedd9b0fe762e26f9b9b092cfc3243f1f56f2f998e417c24abe0093fcdfb0922fc424bf1856f2364cf24b61255f84497e39ace48bb164ff950892fd4b0cc23377724e133c154bd78e3b39ceaf498caf99b914fc2a70de58c5f8c235faae363955cc1c7a35c15760f392c9ecc9adea2eae85fb764b217931e3b387d689d034cf4a7a2dc1672545f1456c06d2a598d3bd1ed6e92e33f9452f4e7005a95f60f3b2163277ee160fdf9c88e799bd61f296dedcd67e0c9f51164e23ee15e03fc483de141e44a705e657979bfc8aaf74f65622fc4a675760c2df8e40f89526e1dc6fdf310472566f4f20c890d0bff6265e38ba0a4b9adf8d2069be1a13fe5e04c2afc1528ef7c3a61cd79a528e3e3c36d5dca26de1971c4d9d827ce0a7c89ac0fde83a2c343e0c1b1ad763f1e1238af87003f6b58f29be762396907c124142721326fcd30884df8c09ff2c02e1ffc19ce9f3b0ce740b26f98bb0926fc5247f1956f26d98e4afc24abe1d4b9fbf8e207dbec3249c97cbbf31c5245eb435944af5efbd86c7a53b314cff0b8be92e0cd3b71160ba1bc3f41d0da67b304cdf87c5742f66c90f3496dc8759f263584beec72cf989c69207b0effd4cf3bd073187fe2502877e0833e6571a631ec6dce0b7b06ef00886e9f708303d8a61fa8306d36318a63fc3627a1cb3e42f1a4b9ec02cf93bac254f6296fc4363c9539825ff86b5e469cc75599df0aefb0c8629518704d3b39831752230e63993f056ce69dd3a3e6a4459b8e0e7314af56828bd8051aa1f01a5ff9a84f37df41af8a194621fbd1731ad1b46a0f54b58fc6a542764fc7a1953bb71046abf82794e131acf7915c3d4342ca6d7304ccd22c0f43aa676f3b06abf8105c0763401f026f6bded69bef71646ae4558726f6396b4a4b1e41dcc9256612d791773ddd611b8ee7b98da6dc2aafdbe4932dfa8a5ad9f843ac5462d1f602ab70babf28798e4f661257f8449ee1056f2c758f357c73ae19bbf3ec1d4ee1456ed4f31b53b47a0f66798da5dc2aafd391617bb461017bfc092ac1d6892ac2f314cddc262fa0ac3d43d024c5f636af708abf63798da3b46a0f6ffb0f470a790e9e1b75854ea194154fa0e13de2b02e1df6321d93b6c48fe8085649f0842f2472c24334286e44f188fbe6179fc8cf1d839021ebf60e9563f9a74eb570c53ffb0987ec3300d8800d3ef98da03c3aafd07263933ace43f4d92f978c12c3fae9e6260e15f26c17c54e8203f82538c0afd1b63911d96c53f98e49cb092ffc528e786a4ccdbd88c940787a49c3009e62c8684655107933c34ace4ba98e4616125d7c3240f0f2bb9be49320ff011750cdb6a6f656a78dc0256240676b883404ac5efe476dbcb9d57dc412079154f4e661b99bbafdd3c562cee96882b656ca093502f16c347d638cf4e743ec5076d70b9c9772639c7d58ed4cdceb1884d11bbeb968a2fb8ef26077ac00d5abd775cfd721c0b17a7b0820f32d9c0f896aec9af1788412f4aa657ea42e72d3e5c2548b46980511f69a23eba82ba1a62a88621268f2562605989b060a963ff6649550d375b2cff069713c4ae86985da34c764d654c0b3997301fc2e36abfd6c9bc17b3a962d8ce52e95b056c25e33b2b570ef7e4dba9ee78eff161496bc51d2e3388ad8d305b479b6c9de8d3d64922569488614d6b23b312de0b626363ccc631261bf1a18ff304dd2211cb5c6b573857d73bc78d15af47a573134ce7b1269df37c86cb4c31b48cc78c7562785aa1f0471bc2a82966ef3893bd27589282cf1712d68ae783a4e15e82359b8a37c3c88f37911fa2795a32371aefd85a26c8544eb3b1fc0bbb939415c492e69825134c960cd32c81db7584b7c52c2d8835db61d64c3459331e0d1718fff3455c2847731f688f3f3bab9ff36c8fd937c964df343455aebce370f5422fb8f420d6b6c0ac9d8c9595fcfae67c9907f90b4928298ad4a32566d7143f710ea690e1e39c595a106b5a61d64c355933d6579c1bef102d129e65ce6783c7b9e49d20b6b5c66c9b66b26d84565a9fe0dc2a776e2c1076ac96f6b803e4b97e79ce2ff775ee41a952c3e8529036984579268bc668a1e5fd2e0cb10515b58659cedd1529ca485e19d159d616b36cbac9b25e9a657a4c52a5d47c9182ad707eaf8cc8a7da617ace30e939c3577c31d793663bbf27b37d1c415c5c4de65bed319bf34d36e31b84c138e10da735b2552055fa1644e30e98c6334d1a8f0a90d37af55ec12aefeb87e7aca65d008358d511b36a96bf9a6b92a56bc51491db940acff35f9237e7cc51855c27ccc6d9261b07a321c76b2dcb9c8794adf98ead2b9c27cac4c4a6ca796cd4a584ce981d734c764c0a914ed464cad005b372aec9ca2cdf35a9a95596f0a248cbbb62dacf33699f1da0841a54ffeaa6083b6016cc3759303f40caec7a5c32ff71dfc1d3366ffcf1f34c543ed80d6350e027145395c783866275d3bcee98050bfca41595d3753cecfcb6d5c03b5185530fccca85262b27f84a11e73b0f2f13da2e05eddf3555dfd811b370173f35de549e18acc69b2afcaa9397ed84d9b5c864d748dfa97c30abf0d0aa8e4d3d319b76ad7e5b5355312e9d39732fccbeddfca42941f203bc14455f1fee8d59b9bb9fda184589d8bfd5d5cd2dfa6036ef81796eb03c3f4fd478dcbe921296aa3e4313a619987d7b9aec2b66b4fd22ebd91c516358217bae178a769212e7ff65486f903f2f099f82f5c538ed65e2b4809813de7f949a50780e3b631c169b382caae134803a75e887d15862a231c56759324fc477bbca93fd314b979a2c9dec2b070fd25b9cae52e500ccce657e5a7df432d7446169e5d0832d397eae475b1a1b88d958e8a73456d9c6643b09d7933fc7bdabd0905e173077a0a95febaad7cb9289d95784b547a6b2cfcd97922ff82f85451b6a599855c526ab768fd833b1f817f4f968990cc2982c3731c9a9c895bd7d4eeeb53915e32eca1cabf8824dded6673eda88b76b161a7b08aa9fb2666336acc05a54aa6fc33a703fcfd08f56bd343307b360259637a41e5f975c36b0aa9232ee597ebf10c4ce5cccce12939df955da898f479c28aef0674a448a3ac311b839905dd1f9e760cceabdb11ef8e0fee9b6fdcd71342cd77ab2cd7521ef128141ac198259b3ca644d065a9ff36ae08d65a6d25af546ad0dc5b45d1d66f464552306d23b326f18666369f810298f3c448663daaec1fa60f0be4eb8849fd7838a457ae0d6792ba7d2d58fcb2330edd79ab49f1e50fb89ce95b58279b98ccd251575523f614611df476216af3359bc5720efaaaa55dc9fcd3545661446661facec143c252c776ab1654e3d6fa973c57d7783f098a862e368cc8632930dfd511b668afc73255baee93fd909e172311ea9aa743288d66330adcbfdf5409953f5aac65ea67be4ff58cccaf57ecab5414a4b2ab478aab4c1d80a56bd72ed38cc820d7e46b405b1c02dff248595fb28ebe58b1a49b01eecf198451b4d16e5862acb25ef461d2e13302bf6c5e6cf54375ce609e96b45eb6acd94be2762b66ec2468c06ab5b61a360f5d6528afad424ccb6cd26db16860847b7c41b2c04ab1bd6d569c7988c91d80f6bdba92e09536b969d4ca6604cf6f753ef0c9efaba756caa94772a66cd96d4fd4755e9e05a5020acd17391542d247e4392a780cb234ccfa6611c0ec0e6ca054bcf5459202fc2fc260fd3f94093ce45213c110fc7e8e368d4213b1da37410363a208ab2c504e798ba2553a757d59782d83c03b3f960ac0e0575745bf9dcbedd644c5e9bb23c9e6a3c5cf56a23f9980d876075a820291355d97c26a6f5a17e5ac6ccfd917efa5dd339aa681666e3617eda9babf2f3eacd87aade1782583d1bb3fa7093d57b46948e54cef7fd5b971e2e73302e4760630dc278839fd1b854a9ea5cccd22383b5ea60f3495cdb2adf2d97297055e1d3d0f99b4834757e4e16eff13c3bd9da59ce327923b568fb559b64a9b13d6a3b985279a6ae73c6a54e8d8ba713054cb5fc2637cdc2241c55c75d7057fce993e030d55a4e89e55a9a97dc36a618943ef8fcbaa9c2fe62316aa4d0395729b8beb1196685693c13bf6ab2ae6a9bd4b6347c567aa14891785abcccf18886d22225cb21cd5735ab75961ecd43b5b30cd53a997c8a17280907f3a6aab538867fadaed987da57220b471799747705cc62eedcab045fa26e31c0b646c45bb7a36fbdb8cea36d955f85ad11a6af0e1002d4e8922ac52d000999495c47e16a6ea34119739b559b39881ad6af93c543e3584a64db0b643c64602a3a5da62fbc3f280eb8568e4be23a8e125717816b31cb12ffeb9eb6c0f94a117307274d63eef22aab65869f1d0b901d7a27416eb513e4a058803ca96b12e4f1f4115881e44513aec20a99d5706471c0f57acb24ae1328713537a677bc376b794cb2862de393a84ea4cf4d9567415c5ce9dd6451360ec8d68d4c223b891219df9242b541e8c58e1259cfdf2f36b9ea49a010723225b6b6c648592044ac1040cb64e5272ee9d91e4393e84ea144d740a073474197c52405fb7a4812cea994705a0938c961b4714ec3be1e9184761a3d34b7d5a2408e335a25d22c6f0b561ca0b5189784763a25b4f6685e19e754ec3c908a9d4189af9d6f7c9b6253852f1a9e8477a69d55a99c58807cb94712e45994203bb264e96da6c81ab8afadad10611e65140784778c4d223c3bfd2d7013d94a61ff2aa9561c90bd3d3b89ec1ceab44f791d9edfc6cbdf96007f3b97baf5030ec28867452b1f54b4cea3c4d55444cfc9a27f6283f87c9c1ac5791f97c2743e25a60e55a4623385d86532175dc9f894e23800bc363f09f002fa56365524e1637fe2d62039aa4112d58594a8b6f3a460e5200b7045c4015607504fd896fe8839db397acb6bb0d01b0780674d4b02bc88ba886bae68e9d321e3d63ec24625115e4c8970a76a21f4d663e313b53f1e93c47a0925d636cc4f1b707caaff3d45f5bf617d4db8be2a4bf5478f04a38d8f73e145680e769db8ba9eb93b4178c6bdf0e120d6697e291cb79291a2689be1735c48868fda4446802e9e8c2a8a41193efa6e3342759487793b27d4dbd9cedb7ad7444695659d8c803d4119d56877cd0894d264046e9accf0ddeb90e1b38735a39ab9764684595546e0668a8c6a36a765f8ee80c8f0317829a38a0eff8c6a1529b1b752d710b174486f1d4b0ef8340fd4cce2033e2ffb3f3e16338b8fc5bc9c43a82f29b865942b28cb283bc8f8e40ebd5dc35633ff1bad2c6643747dba54d2679e8c0425e27baa7c62d2acb1a704b3871f63ab538ae13b76aae2df95e9e8c458ed3cc4b1565e3b081b195e693c5874583b51617d0460bd8abec2ecf5587cbac86236ac729f507438db52e1ac5b2789f36a9b700e8a25cef6c03bafb10967762c718e0738afb509674e2c716e0038afb309676e2c719e0b705e6f13cec1b1c4f91f80f3069b700e8925cea700ce1b6dc239349638bf06386f4a774dc9ffa20243e9d0be962042fb28407b733a3c7505eaab0b3cf5a3c19415cf66549efa024be2fc8f4d38736389f34180f3169b700e8a25ce3500e7ad36e1cc8925ce9b01cedb6cc2991d4b9ca7019cb7a763d83606d31bd107c7b0a1ae03c8d5efb005654e2c519e0050de690bcaec58a25c0e50de650bcadc58a2fc1ca0bc9b7e8e23afdbf005b7d5064a5c61be44f126716f9de829e72fc40fe48120d3b9271d3d45781e8eed624cd853d4820aeb0c80f5de74ad23c0bd7085832b4d3eb98e0ade7100de7d94f05a007825b5264aaf06f8ee4fc74a0343b58edf3401bc830ae03600f001ea750720b8e49092e4088d8d62b00919c4be5410fb00880fd66461078a23cd4c1a52a16c0c0a3b0f514f6a582c20b99949daa2722915ba55c00b1fa61f07bd583ce26e6f876d6a47e8816554180b00c647d2e18159b5c6036703748fd66c3ae88a72170cce8a6196f20e40f9583a22f3204fa54fdd4e93479265277b028c8f5362ec0622739031c8fc9d32f17cfc0adf3700b84fd46c7d1a0a4c537d7a3115d65701d627d3918a62f9b8b73449988a9245ff6c80f2294a943b82e81f7c3a431a1201b2f11a5700c44f5322eec9bcc3aff9f629d5db8a85d093c9c66e7c01ea45cf50afbfb0d233556abc686aabb4386c0c5a261b01df7cb626a0c5b139b72180f65ccd663f712fc40f01289f4f47012968f188b46f91ac80b41f480b5fb0112be9400232ac3d01d6ff52626de29cb8d3e9bcb32dc990655121eb0e22f88b368dfd251db3465696cc061ef8924d3849075991e19c0770be6c134ed2218064380f07385fb10927e9785f329c17009cafda849374343a19cedb00ced76cc239249638df02385fb709e7d058e2fc15e07c83ba3b63bda7ddbd360d34e8c59218dfb4777214615b115903dbddc043dfa21e0853265e75b751af4dfed905f8e7dbb68cfa1d44e98f649d6b4d813fbe630bca9c58a23c0aa07cd71694d9b144990b50be670bcadc58a27c1aa07c3f1d233c789fa4fba25a38ad9815a56b840759c9f22c90e57c60e7a0fedc18f6021d06b07e68cf90d6e1311c84300d44f48f2851f2d99ade5ec8e43823326cdb5161ab073cf0e3740ced1f2446612c755428715894a72b65242b8c5f07007e4209b03163868c257e59497b00ec53eab9385823453e73d7b724c337840a5f4f80ef337b46ff0e8b61d4fd0e64199fa7635338bfab0d10e6bf646b0dcc077ef9854d30093d930ce64c00f34b9b60128eb820833916c0fcca26988435163298a300ccaf6d8249b8541819cc2900e63736c18ce36237e301ccffd9049370782a19cc4c00f35b9b60120e5025833910c0fcce2698842b5792c11c0c607e6f134cc2d67132987023c51fd201131b85ae8fbf208ce6640d1b0300cc1f6d8249980191c1bc04c0fcc98e69f684119c6c9afd8b00e3cfd48d6d70e191e43e4b932ba63bc7af53a135c0f74b3ac6a7c189cd5cddca9b89c57916e36880f3d774ec6e999cc5985c8a091fc012bfdeed13410be66fb60125ccc3c9807602407fa704ca274d7a7b11cb63d87f5d1f44e83fd23152d23bf37b8af443efa683790caebb16d7651f8a00da3fed599f80b001982c175f0850fe95dea101e515b978fc72eb6600dbdff6eea647d88841b69bde3290cdfc63d33ae7a47bed9035633c0d3cf55f9b7092ee044586f33e8093d5b50827e92e7a6438f702381336e124ddf68d0ce7d500671d9b70926e4a4886f30480b32e25cecebe737938c297347f9f9c20827a26c8dfebd90895b02d930cea19006a7d1ba112b62091416d0da036b0112a612b1219d456006a434aa8e1269012fa2bd904d23b00da4694683b316f8be752e18feeaa82b5abcdf35d80b43125d21d35a4fc7fbe5c63b16c753227070b6552c0c5e6d0227e93ca6baf07889b50220e36cf877098175963de7080b22925caaa7ad9bd284997822283f9184bc26c66134cc2a1b164300f05309bdb04338e6df6470198dbd90493b0e64406733f00737b9b6012d6edc9601e0260b6b009661c970edf0460b6b409661c77f5d90c60b6a284a9b6301cc26ae71686070390ad2941c2bdf694d434c1231b723817c06b53b3751d57943b4195707e10d904d54f415da76d3a22f4e05a1aa1b7009f6c4709522d5fa29a387803c6be9e8d686a53cbd1b1c03fdb5362e5cb5f14564cde9f221e9c2744b9abbbc56f704d67e0911d28d135971ec93fbc5cf8a4925d42b97c447d2a700c80eb489d37178a665fee77452212af168f1631e2f19abda8e0b503f03aa5b3a9773dfbbfb285cc2b204dec4c89b8a9214d7455895f6ad815f86517ea8c044f0d09a374132a747500baaed41d62bcee0cb7db2a60703da2e49c1ff80c1952b2dd9a4f02487748472a0967fdcc6495b7eca87d9b1ade0410774b4781dc4f879877cf1ec2865eb2cd657607994f771bb192b69f93616d00b0f648479306d64a19ffb510fa8188bf63ba87c6f89f544088966c52414be0a53ba5b39103cefbcd135354b1460ec2fe1eb2acea1b80b5673ac61b6369aa3ead7f582c27f627ea2471f6b20927699f0f19ceb6c03b7bdb84333b963847009c7d6cc299134b9c6b00ce0c9b70e6c612e7a900675f9b700e8e25ce6b00ce9d6dc2392496381f0338fbd98473682c717e0670f6a7c4a956661fae15e5d3d4e94bd68c770f4b021c60ef2c0cc2c59ec93a399e04be3990ba9303fa64b2f5337e15c91d813f66da347175702c57227e16e0ccb209676e2c71de0f700eb20927e96400329c850067b64d38736289f37a8033c7269cd9b1c47932c0995b936334bd119d708c265dae0e8a42836d4199134b94170394436c41991d4b94eb01caa1b6a0cc8d25ca1f00ca61e95821c15ddb702ae3233b0a18dcbf0a8e03294fc7f80fb25dacfe0332a0e1e9e8ab0cbe9f24615f25d97a9c4b01d611e9c00a472ecd616b8540ae76ed5ab7780cc03ad29ee9fb719c3d3910a4a6a3d231e18fef37e95d93b3f64c6b29077e393a5df3d4a077c6b979f835006f0c75fb3ab60f65d217e3e77d1900e0587b26fa110e30249be877394815c751a2dcc980327557c524e7d9e4ca473cba6fa61d1f974505f93900797c3a3ad4726a5987da9520c24fa004d895e90b45a51abb092765917a6682aa3bed5ae099136b727cb1b77c19c7a54e46021f9d948ef225ac0125b7baa91db33476063027a723c51c52cb52ccd301c0299400f5fd590a59d533ce09a3379947ee0952caa9b6018de3e8f6c300d069b6018de39a082301d03cdb80c6718fab7c0074ba6d40093b7fc980be0080ceb00d28e15a8564407f0340f3d3592f726bf1bca0b451b4b5a76a16214c4bc99a453e066067da0a96304d2503fb2d003b2b1d05fbc1b5ac607f264b029c4d09b08fe699a50c2e0f30c379840bafaa112fdf79c3aded132603649dc5ff05de3a271d3df041bb8a096b52645dc53f030f9e6b23d438f6bfff0ea0ceb3112a61f42783fa0d803adf46a884250032a8df03a8053642255c4e9f0c6a2f90512db0112ae1f83b32a87d01d4853642256c032083da1540ddc546a884ed0064507b00a88b6c843a2c86500f015077a584da8cc1613aee6baafe14bfc10edd40febe9b4d93b107514e78251b013a0478e1ee36e1cc8e25ce4280730f9b70e6c412e75680734f9b70e6c612e74500e75e36e11c1c4b9cf7019c8b6dc2392496383f023897d88473682c71fe0d702e4dc7941988b3f6ee787925c0ba2c1de3f0fc4d99c98ee5368dff02988536c18ce3368d6703984536c18ce3368d7f0298c536c18ce3d8e57d00cce536c18ce344c3320073854d30e3b84de32a0073a54d30e3b84d6329805992ee122706d33b9c81b09f886c91feb300d6bd6dc44ababe0d19d60c80751525d66e06ace6fad154f90aece6201d2f524c05772180bbda66b884c52932b89301dc529be112666264703301dc3536c3252c6e91c1dd0ec05d6b335cc2fa3f19dc1500ee3a4ab8bc4b7ca9f8b477bd072e4e0d2c27c34736749c2f76acf0ed43892fdc063e848d29641bf89c0e3cb32c1d25d8e01bf8c47146de5d006b392556bed56e72f7ec49ce7199c36205cb775e594107ae0b593604a2fa7a9b7a9a8651663c643d4df5c0ce471b6cc249bac23219ce8e205a6fb4092769b70819ce0900e7be36e1245db09a0ce7fe00e7269b7092ae4e4f86f33c8073b34d3849f74e20c3790bc0b99f4d3887c412e74b00e7fe36e11c1a4b9cdf039c5ba80becfa906f5e998ceb0e337c753f05ee8074d7cdfdef7844e893643b1edd0f7cf2404ab4fd195c6a551de1cadfee3acbee0acbbcc9831bb39b6cfc28109f5a2156244bf693c677e5e56b80471f94ee8531fdb636c14e3ec221906da87cfb34e0db07c70132e13c2632c8fb02c887c4013261af1419e4af417271681c2013b6a79241fe10403e2c0e900947069041ee02928bc3e3009970840019e46f81271f1107c884bd5a6490c7024f3e320e9009ab276490bb01c847c50132e1503832c84b01e4a3e3009970ae0b19e43900f2319490836d4d18c7853e9b0394c7da8292b43b870ce5f100e571b6a024ed682443b900a0dc6a0b4ad25e3132942f0294c7a763c050f05df4e2b88cd7312c89f58474e4f36a1c167f98bfbe8eadaf68505fe028c67377759ce0bcc8f733db285a7f37b032da0a2ed9e0a28dc0774f8c0364c20a2e19e42500f24971804cd8e848067936807c721c2013363a92411e03209f624ba981742d2bba5d7d00ca536d4149baf01219caab01cad36c4149ba241819ca0301cad3d381b29099f7404bdbf4a175542837b024ca332851b69228b9d779f7d84dd3fafe64533196038467d664c486e248bd916cba7b1d10b1cfa244d94b2b1e79f79b80c3932638d7cb59b1bc06c7d68c77de2aa12d8792ed49f13f00faecb88026f46832d0ef03d0e7c4053461f5950cf48f00f4b994a0f9fee6ab9ddb85625226c4375ba4c99b633874ae15c8c2ce4b47296050ad2b05ec01109e4f89b00d4b5d26559692a697655418e7018c17d46c61ca1515df8dbbde05282fa44e115d6f5ccef880e20d4285e406c7e5314c115b0078db6ab6bb040a4cd37840b215825e06582fa2c4da5662cd75fe25e759e7890ca7986d4a577643d604b21e80bcb8269b40bc954ec2a13a6495ce6500e5259428d5827559950a3fb5c72f7703302fa584d9c839e10ff3714e93e498a6f865334d00aecb6a361ac7bdb83314a0bc3c1d13da544d3b99bd4c64b5739ff2f700da2bd251180a5a14221ddd4456185a0d9a2caeb4112be9504632ac3b01ac57a53321e0436bf9febab577a5fecb00daabd331791daf152df0a4aa8329b3ac66549efa044857afb109676e2c71de05705e6b13ce41b1c4b90bc0799d4d38736289f34280f37a9b7092ae8c4e86f30080f3064a9c2d59b2d65e2616e92c715894a7aba64e565fba0a00bcd1a6856848d73e27abc9e780a2d14d36e1245da19f0ce77c80f3669b70e6c412e79100e77f6cc2991b4b9c17029cb7d88473702c71de0970de6a13ce21b1c4f90ec0799b4d3887c612e7ef00e7ede918d9c107c7b82faac5b98a5951baca9b743be5b224c63bd2d12c07bdd2ff827384f3e3c8169cbb1778e89d9468fbb0cabd48deb944bc0ba4d4f9cb7ff3d6cf0d4264722c4881a0968631cad3a9fc3817f8f15db6cce3206d6122eb576a02fcf66e5b5092b62e91a13c02a0bcc71694a42d4b6428070094f7da8292b4459e0ce58300e57d762e3a40b84c16d9a20347832ce87e7b661c112eb54936f86b0af0d007a807c9aa66e46251272a4d57919e6cf2e01ce0870f52d78c788912ceb698ee5c717bd68b3cd7c930924d5db915607c281da9a41ab0c03d6f45c5edda3699703388da0f5362ed614825dd45b4f948f8358ea7f25ad0ba949d708480c9bae0ea02bf7d843a1b72ab947c580d7fccbb76b9ab7a9c77caeb04503e6acf706ec2e15f64d13e1fa07ccca67ef6c1946b2d9045f2d701cec76dc2991b4b9c8f009c4fd88493747d1a329cfb009c4fda8493748d1a329c77009c4fd98493749d1a329ce7019c4fa7bbcbc3fffeb784d3fdc9a65bcf0585fb67ec1c3b4fe8b16463e7a702accfa6637e660eab9df333cb40d47fcea69474306574274b499f04389fb709676e2c71de0d70be6013ce41b1c4b908e0fcaf4d38736289f37280f3459b7066c712e74100e74b94383b337d622c2f0eb9426a5be3f23050507a391d052505b524e52890f815945a0090afd802328e93b4df07d1fc555b40128ea62303391378e46bb68024cc78c8408e02205fb70524e1780f3290e500e41bb6808ce326287b01906fda0292704c3c19c89701c8b76c0149b87f0c19c89300c8b7ed19ca45984a9215c9070194efa4b39e53c8dc292e7a2d479ffe4258aa249bb5f13a80fa6e3aa0066d678f632bfb3f2c09f53d1ba1128ee42483fa2780fabe8d5009eb426450bf03503fb0112a61bd880cea2700ea873642256c472283fa3180fa918d50e3b85cef4700eac7364225ac3b9141fd0d40fdc446a884f52832a8bf02a89fda0895b0464506f52700f5331ba1c67179ca1f01d4cf29a17662c91947c9239c2ac395df4d0e05e3f7dc490bf1aba45e0a907e918e4614bcc338eebd48c703945fd66c7b942bca5d909a30a293cde9b811349d7c958ea9858334a069183f473627ee0de0875fa76379bf614cdf332b2d0310c9005e00007e4309b023ab3c37d33b3d6b32dbc4f848e478cfd23c1b00fd1f2550be4796777b88058ee422b1564d31cb67ee7059c2596e64994b7380f0db74147d540b3d2fe0ec2b4b8ede6c264dcd1ea554488f0699cc7794483334a44b59a1e0c0a33e5c3fc9ff4a4b84c523b29596de04b8bf4fe754ed124f51bdb6f5327d00b0fe60cff457c2be25b25ed07d411afba38d136348170522abb52f021efa938d5849570023c35a1f60fdd9de197284cdcc6433e4589d24da5fd29955c15a541e2b4ad14012c7418daf018ffd351d9313b08440cff78751e224cbf9eb002ffdcd269ca43391c870b603def9bb4d3849a7ce90e11c0d70fe61134ed2895d6438d7029c7fda849374162719ce7300cebf6cc2493ac7980ce77500e7df36e11c124b9c4f009cffd88473682c717e0970fe9bee9a92ff463dc2b123648d7a0f01b4ac9e45f38d4977f3209b6ffc124be24cd8849374af19329c0f019c756cc249ba4f1719ceb500675d9b70926e2c4586f31680b39e4d3849b73d23c37906c0599f1267b0cd25e238b36e0790ab37b005654e2c519e0c5036b40565762c51ae03281bd98232379628bf02281b53a2e4e3eb60a7c644b692f18d2456b17ce7712e960cde702a78bd4146d384129e1adaed8e3ece771e2c146b74d7c671c81703a84da93d52815a2ea2b692bd463e12bf810b0900af1925bc165a74e623ea968a3175c96dcae287af0dc0d79c125ff5b7da211c9944b6d5ce5480753b4aac6a1c72762d1b877c1900b87d3a000eaa6500cf05005b5002544badf8ab12c6afbcf83f00b2a52d20e33847e84b00b2952d20e3b8d2dc2f00646b5b40c67150d60f00641b5b40c671a5b9bf01c8b6b6808ce34a737f0090ed6c0119c795e612a095a7bd2d20e3d85cc600c80eb680249c614106b22100d9d11690842b769181ac074076aac9b670288eb40044d6fab33d40d9391db5ecdc5a56cbbe16e4d75d2801aa7e6cefaa1cae329399bb2fb09a7642de124e362d7516c0d9b566a3b62bca5d4682b09248b68cc415206aef408992cf3bd727f2f3b6f1e52cee53f76f07ded88d12219fe0eedda876aec3a258fc2b8a6187560f00ae3b25b8ae321aaf672b19ef52c526e715880c86cfdc5d2e8495d236a1fd4b05f6bf006c0f4ab0bc5b08e6d305ccddf49b672b0bc5ef12e7ff65227d8c5fb1a72dc0b82325c6f620d776e12d76d42d97fec88702a8d2637c7baf4f0430774a479e5dc8fc4cc227ec6a20f3cbe100654f4a94db01bf5c2a544853419ccc0bef05e87a51a2334db437673a0b99db97cd45e5d07ae49b54731c6e00a5c8dee94829fdd5b50751365c9045ef9500661f9b60c671c192bd01cc0c9b601236f292c1dc03c0ec6b134cc2ae073298c500e6ce36c124ec102383b92b80d9cf269871dcea663700b3bf4d30e3d8765e00600eb00926616b2519cc5d00cc8136c18ce326b3790066a64d30e358279f016066a5bb6289c1f42e8c17c78d17b600ac836cc44a5a9027c3da0760cda6c4dacd80d5ff720fa46551b2051f7e0170736c861bc725729f0170736d864b988991c17d1ec01d6c335cc28a0019dc3700dc2136c325ac1890c17d1bc01d4a0937dc4aaf84d919d94aaf9b00da61946883afa149d8b842d603d519e01c6e13ceec58e29c05708eb009674e2c711e04708eb409676e2c719e0f708eb209e7e058e2bc15e01c6d13ce21b1c4f92ac039c6269c436389f32780736cbacba0fe0bf88468c98af70f00b4e328d1065bb82c8eb3829b0194e36d4199134b94c70194136c41991d4b949300ca89b6a0cc8d25ca6701ca4994285bb1e4e850ef8e82691a254ad6e4319125114e4e47af53f0d58e08473c91ad76b415609d624b24271d234a16c97b83483ed5169439b14479154039cd1694d9b14479004099670bcadc58a2fc19a09c4e89522d03c0511557ac50982772f362b6295d793919c8dd41a633231d2007d55290bb0290f9e90039bc96822c0620675282d497224dae2c9c84193f7c7d01be59e9c8640a999f8984719ccfb104a09c9d8e0660ff5bd3108e4d22db5ee17180738e4d38736389f34e8073ae4d3887c412e79b00e73c9b70920e4424c3b900e09c6f13ce9c58e23c1fe02cb00967762c71ee0f702ea0c4c92de063dcca65119d8f839b24c7bcc5af0bb729c0b690125bb82edc380edcbe043468ec624bdb1069d64356036a04502eb2052569b64386f2608072575b509266396428fb0394bbd98292b4e64386f2768072f79a44e96de288e32a0b1301ca3d2851b661c9def064aba5ba9da6364b328c9340c168cf74148caa5aaa6faa7c01f68f93168c8aa9d04e0368f7aad9c8ee8a721733256ccf245bccf46610d91753a2f46e3ba78ef384b0b572b3afdab2d8eedec03f975042dd1e407597912c4f57ba4936d17a3280b794121e5faacfad879708fb790d7c9e58b4afc461521ec3c8dc11a05b461f9993bbf34d741edd20a3ed2ae181133cab704e718ec58e28c22577c94a96db03a885d4feb89e2557839de0fccf07096e14be49b8cc73172a742d01ba224a74d55fe18370b82a590a5902f2ec621bb1920ef327c3da1d605d6e537bfa60cae15864ede9af80c8bfc2269ca4a3dbc8703e0c70aeb40927e96860329ceb00ce129b70928e0826c3791bc0b9b74d3849470593e13c07e05c958e2638ef50d6dad204b702605c9d8e2638e893fe9738215cf7886cbecf3850582a4d4784c7a2bb3e117a18658b26592ffa3f00e71a9b709276f792e16c0370aeb50927693f2519cea100e73a9b7092f6a093e12c0238f7b1092769d72f19ce5300ce329b70920ec926c37929c0596e134ed231c464381f0638d7db8473682c717e02706e487791deff7043c24a27d970c3c701da8d76362b1362256b56ee07b0ee6b53d308e98266644d23cfb124ce4d36e1245d6e8f0ce70300e7669b70922e554a86b304e0dccf269ca46b6b92e1bc11e0dcdf269ca42bbf92e13c15e0dc428953cd472f64e679c0de881ebf31213900e401b6808ce3b0edfe00e481b6808ce312667900e441b68024dc73800ce43800f2605b4012663664200f07200fb10524e16e02642057029087da029270620b19c82301c8c36c01493869800ce41100e4e1e968290abed82361d643b6d8e36280f5084aaced59d03ef5f83514ff05601e69134cc22dc1c960d6056d9847d904338e5d186f01cf3cda269884357132986f0398c7d8049330032283f9018079ac4d30096be464303f05308fb30926611d880ce66700e6569b60c671d795cf01cce36d824958172283f9058079824d30096be86430bf02304fa484196c150fc214936cec7b1628b29f448952cd41e78b382ba9699a38504605af14f8e1c935eb87ae28778109c2cc866c4efa4dc00f4f4947a39b773519ae70ed58037b02f0c9532941769220573b0f717fe41355f6958d6b5eef840d6e843571b2753a0e05be791a25d2a6421a7f618598dc5fc6663a0f73bf8c9f1f76007e787a3a22f4b05a1aa18f0520cfa004d912a48c7071fb3401bc830ae02900e099e9c8a5b1fe1c6f6991b0b182acb4381da03c8b126557a62f56e60eaa5ee028c3e1aaa377f1930dc25b09c1922d81f228007bb6ad6009db2ac9c08e0060cfb1152c618b3a19d86100ecb9b682252c6d92811d04c09e672b58c2263832b0cf03b0e7db0a96b0ee4e06f61900f6025bc11236ce91817d0a80bd9012ac5a7553d5e5395c5795dad7affe1ea8cd6fb3a73a40387886ac3ab011f8e74594289b3b27de8d90938b4a12aec0493684ab0100773125b8e0eb78c47110d76010a52fb10927e9b252643817039c97da849374d133329cc7009c97d98493748543329cdb00cecb6dc249bafe2619ce7b00ce2b6cc2392496383f0438afb409e7d058e2fc03e0bc8a12273fe10ff3a5f8e287a9314b62ba9a1253f557d026ac2a92adc9311d78df353662255d768f0cebbfc25b1bd6d7844fa9247ca248c1781a56c8d4d60be5cef5a9ac580c37e0480a9df37cd160b19e2d7180eceefc0d16167b3a7f4dd71362ccd264b689ad1357b9bc2221bbd4b9cb352b6759fd9c47aee5aed15cba468678cbadf32f67bc277f83301c56583312552de2ef4a59edfc2e74aeae6673407fec6ce1209b9d67f46dc8270bf9deea71e5a7f2459eb0d1a3538658e2153e5500b45b287e9738ff2f13a1919162a4826b5baa0d333244cb48a9b8ce9f582bbe0665e555d8b15158efca2cacd8647d8a78076e0a939168ed3c5106ae78b764f74a6b6a90e6baa84b6ba9f88d4be0ce9b10fde5dc1bd638cfcc149cf87b6a9127c52a93cf5d4f0c71fe73db2a0756b4520e94abbc96ca3375bd6a99dc5b534bbb8ebb64c29c5aad8e2c9e55655192db72c6f7f9281652f3aab4b46afbf038db2c45a8640ee061519bedbf9e87bb0c76e1a6ed85b32f7042de15cef7f52a1311b54c3c53ffff0170683eb330580400 serializedProgramBytesString: - serializedSignature: eabcd29563f87874d7a12d7c2fdf2c0f4a368461b97cacd990a545a87c770b0ee53bbd3a53afe81b027c524158a2b208522843b91061cd4128108c121ff4a707 + serializedSignature: 11239c96114acd8aded102a3a5d0edc4e5339881ef8eee917c35bba1fee091f2f07c2e3e8e70766fff680cf6054ed1e54ce9d1f1b499a762691965bc8d37f800 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/bcc2d3efd1d3673448f4977e57b81bbb.asset b/Assets/SerializedUdonPrograms/bcc2d3efd1d3673448f4977e57b81bbb.asset index cf35246..5a77152 100644 --- a/Assets/SerializedUdonPrograms/bcc2d3efd1d3673448f4977e57b81bbb.asset +++ b/Assets/SerializedUdonPrograms/bcc2d3efd1d3673448f4977e57b81bbb.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9ce9721bc7118067490220445014c503bcc443bc20f10074583e9238d1659b3625d1bc9c5876288804293abc0cd2b652950750a5f208f9913f7984542555f9e3ffceff3c401e206f9074f7ce0a8dc10c16cbc55058da40018bdd99e9e9fe7a8eded95d346505bc9c59f85a17cbe2be98176b624b1c8a03f8751fb6fbf076f7bce34ba208db1df8ce43daac18f52989af69a70fbe1760ef589c40c96fc4266c77297d4514e0f702942dc01e1edd864f0172392d50684d3c104fc46391767a7c44ac53a16379cc41bb9c56f8be277e0fa905520a2bc952521abe5620e598d2f641692fdf53f12599b50f699b50a628f640e67392d89a02890ed9449b16b96d96db98dc76c2270e9f0cdbc7bc4b723fcecae1ef6b72bf093e49ac47fee67524e4f6b22c739ded639ebfcbfd56257f527e40b7a60735d473416ebb947abadc3ccea8dc6f53f2a74af5b4fcb7867adae5b65ba9a75bd6f34aee5f54f207ad47f54d8fe29b1e376f93e753cf371d35f8a699e54d56c91744bf5e45bf5ea9df9f14fdd4b6e31d1f64ba78b2fb64fa0ccbe31dc7ed904c9f65fb5067f38922c72b7745e69f63fb0eab7758b16158ca5bacc2c3937d89eda38c79974dd35f7c6cea53caf7b3f2de3e6ed301b80d18b80d54e7d6f24ad4c62d6d48cfd6c6a4f9df3efaa645b9be49457e9a95afd67e4d6d7544f1f3889b37e6f939c838e7e51d65ba78c7c635be99506c1d67c7713ba9f866d2d52dfe07458e576e4af1cd94dc4e8bf2f1695aca9950f2a594fc3925ff2ab38ffb745494b7d371257dbcdce7b11345ce98d0b7e7ab763926fe531f8e89bd601c13ff64767b76f27ab3caf14b6c3f00e7b85a8fb18fc41c8a543e82d8212f8e44961a347aa3d690ca2be91f4ca1e838cd540884aa3d81b0e5080468229a358a974ec42d71531bd1f43b29a6f77dface438e5d127aa3b28a7f545481caedc1bbc0c2b16338fe2145731890ed42cabc58842d967a06629fc2bb5cca3a54bb07215d41acc2f711c97b066a57e6f433094337b5cc32c87423cb7d38e2013d82fd3dd27085bebf254d0ba4fd021c3ba138f70022dd7bb07d49b555da5e84dfba3a572532bd8efa00d374dc0d633d373d006b50fb2cf5bb9f3cf2263c42d3d90dd90d5bb2343bfeb1c2133f317407190c1616a40c179a5376eca6c8523cb15c4130b88d9516eadbb7cbfb8eb85dd5163d1974f7205950f2f0dffeb5f0fdfb7f9dfa2c566eda2d91a5a977c8c7b46a60515ec6e9ad9050dd8458ac25878aaaf81d1d7e3a555c3943fc6ebe5dca17dc01719a99ca1de0e0e9e92a8d91fbe2114d632fa882c2eb1171974eff8ba2c24739149820cc9593a89faa26d04d3ad0ad670dda7f64a906baf5b55d25d0f8d2134c1a08fae96022d8ac234811d873ab04bd106c05e6da4f202d0ff90b349ee3f125909887ba51de5daac15b3072d3cb4b55e77be1b58525be593a38c5c2c77ae8d126835b7a25627a07a6c881f5aedae4de168d7b73d8e2da35adee7ff08a2515a56915482f3ca66b3b6d67ddfb9e40ebfe4a4662c17b1f2e7ccd291cf48eeb30f43cbffa4dae89ebe8a5decc1c7dba910b4fead2358f5c9d55a7d8a0e35642478f562f9f35d4b875ba31eb72cdadb28ba84e9c6238093a94b49a86926ecd5082ebe4418692a44e38bab347474215dc65167cc124b837a4e036138eb406c7a8130c47caa4755f48addb4d82fb430abe68c231a0c1f12a208e0e9d70cc3f588bd629b3e04b3ac1987f4833b439ba36dd6916dea91ba288d3ea190ef098764852f29037f8208fabe533ea20af1f8b86692ceaab30ce5f05d3987359e71f4438a2d54a75ceb0d9395d26c9a36125779b248f8595dc63927c35ace45e93e4f1b092d3a6ae3b11b2ebf699baeea4a6eb8a805db7df247caa0ec2074cc2a7eb207cd0243c5307e143a666722d6c33b9a2938cf3d2f55a9a49957969d8a4f24c5895474c9267c34a1e35f970ae0e3e1c3375c8f9901df2aa49eb6c1db41e3709cfd541f88449f88d3a089f3435939b619bc994a9cfdc0ad967a64d2adf0eab724627194fe5de129ad546bc91864712fc4c7b5e6cc0fb1042a40df1507c0d05f2144be065344c3195ab96529e561eb5545899305b79cd64e51d9d958bc23b772b3f0f339db7dd855f453ae63240dd319252f52f9d5763cae96a0862f57593d56febac7ecf60f51a05c1ae277765a88bfa2fc0af75e9e32d1f0fd7cb8f33268bded15934a9b456d54f3ba240da2d8a0205ed27e245159f05d173d6a4e7bb3a3def2a7a96eae47d6a91d81f8b55d012b9556b5de656571f3fcc99ec7b4f67df0721fbd387d24ff5ea4d412c9d3759fa339da5bfacc99377a1bf6cc9fe7458174f9eae95664db6fd5c67dba721bdb8e2ebc520d25539eb4012c7a120f6e74cf6ffc2d48a6b99fb16e8eadb9b9aff12f0761c5c0a7b48648b507e89d8e0deb1c8d2ca4deeb52ffd6fd3410df6412bac79156a7e4e1af8dfb4f3be30dfb4b32dea75ff869f156efbc2f2db7475d4bb2740679dbf4de67b5512d2224f1690a6a5acf366298e70f198f46a539656d4664ed99afcb5f815d6d6ac6f43c1af59bb021ed3b572108081f986706fee2f0d2f38cd6e8320dfdafcae32cd9100ef16873adcb5864dcc9d3a8a3214b8ede055cda65c27a55844854dd99d8539aa63e13e98e0de611005607f66c0eed904d6a36d5bab24628702cfa21ca0f15714d06d8912bafb36d1c5091d16cf4396687444c1e03cb009a7bba676f592c28e2880fb81c025628a7035d6aad7fd9db5de805539bf775044f512d43ba45659002394f99e2e8d349ae60ff97c9da9e85c9980235526500bccf8ccb1999a26965248ab0f4573e89b0f7ee4d166ce250910325e7046a3d1473647a359f2ee06246ec26783d07dc74efc4ebbc8b501a7668aae616e254d968d63a95a409c662c4bb34960c126f6b4c4be23cfea0e083e17b956765e7dc31ecca42d986d0ce6c78d04d362cbb406b395c1fca49160de8c20cc8b0ce6a24d98bd12660e3e476573eda154698352f2c27d28dd1aca2e5b28930ce5239b2887b41315ceb52e11f39aa4c5eede690beb28c3fad826d651899577f6608bb816f15a6bb55718de2736f1b64bbc450a9711ae271b03636be062b6c009066ec92638bc9fa7d6331a9e277a6d31c1907e7a1693d1a63c5752c7cce807492d0ce5f2598c9ade6474f4a31835a718de9537d952cbafb05944d9610b658ca15cb589d20be7bd968ad3cecb73162c5d6530d76cc21c1395c1122a7102448ab0ffb17cc2fdbc8dab4d0cf0ba4dc03d15add5dc522d2e89586ba9e30ce4678d02328a5d7e9081fcb54d90fdc27c06bf4c220fc5b7b08dfa797c8a01fd8d6da0b55d7a8876587f8101fddc26507b2bf81647586b2bf8630cfb539bd83b84e9ccfe4066b1062f610b9ec3e07d7116d393698939eaf37c3f03f965a3808ce23cdfc740feb65140de8a20c8090672a351405abc76640de40003f9cc2648bc17c574d745b443a37686306f132156c483f6aa773b4620b86966e09edb04c7cf7afceeedf182a08abbd52200b48301ddb409b4cf67542c7f2e60839e6cb08673d816ce698673eb2c2619d30271d4e3c74b0c64a1514046317e8c3390db36417aebecb576f07722d8bd4718cc9d4682f96e04614e32982f1a096614279e4e0673b791605a9c7cacc1bccc607ed548302d9e2e5a83d9c560feae91605a5cc4b006b39bc1dc6b2498b72308b387c1dc6f24986f4510662f8379d04830ef4410e6108379d84830df8e20cc61716e1ecfcb616472840dc2910d22e3b3c4e73e77d6296d3d801a1f095ca9ca436a9eb6a567d0b2f4ef85f86f42411e84af2ed3ff01b1afb9398a8ff6eae6a37a3cf4a6b334cc0370a92a5ec9d2ff3d9e67fb8ba2ec6fcd13b1343d1eb9069e778517c413c8e4feef3fbe62ff079416c1fef2700000 serializedProgramBytesString: - serializedSignature: 301f03ac1ff77039fb695a6687934179d762e986bbc73e2af256861fbe1e09cd82b5e3349edd7d6c8e421494072d93fedb9cd15b490dd2bef959a6b6aa7c9705 + serializedSignature: 6561b70a50f56edbc55a808a231865bb8b12f525ac828b45b8889e63f44ca2d8052fa6a9470bf5596c5a1d7be553459745899feacbaf88386324d6a9fe58ea02 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/bd60f315ac85c994cabd7343747235d9.asset b/Assets/SerializedUdonPrograms/bd60f315ac85c994cabd7343747235d9.asset index cef5db9..6dfc7af 100644 --- a/Assets/SerializedUdonPrograms/bd60f315ac85c994cabd7343747235d9.asset +++ b/Assets/SerializedUdonPrograms/bd60f315ac85c994cabd7343747235d9.asset @@ -12,9 +12,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} m_Name: bd60f315ac85c994cabd7343747235d9 m_EditorClassIdentifier: - serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1437f6c7b5801bcd608a21941852d88404374a7a009b10125ab0213d606c53121b1c175a1ae9bde712d27befbdf7de7befed92cbe5ee7297cb5d2e97bbfce76934deb75abddd19afb41ef9fef883e5d1ccfce6bdaf349246d268ba1533e75f642be7d702368f55b0716c3eab632bd90ae7af0a276c747edc2d2f7e2e6b76c2a5ceef1a67df56ac28c599f06f4c6488f37b86b3d5c25a9d33db58ad132ee7fbab58bdf3f70ce7dc7a670b629738ffeb9da3223d9c93e6b34a3687cd66859141292416f0935a445c04fc8ae43abfa7b2b5cede7a6e145ca498ef2a747e55397b5af8be46c768efb87dd9fedcad46675fad734e336b70341773c5dc634630fe07738342110e126177113638ffb39dff5fa16df06657b10d38b218ebbb8dd8eee6fccf037df137d61e2cc21e226c14da5fa36dd87795d81e1a405bb67b8564f70aa1fdb3abc99351659377ded7f1e7451649fa83842df8dcc1286e23f73a2386fbb0bdb708578a6bff1e6dc3b5bf17dbf9226c42d71926c283515c138ac3badfc4eb761b2fe98e10e17071fcb7d2fe9122fe0f3e7cda3880ff45018ecd1661b3f8fb3bb40de168118e12fbff9844d3cf755aa5ebb44ad76911fbbf47db0edbee6788ed9e226c13c7fd096d43b8a9a4f367b40de126285d3beac36ac987d5920fab241f56b93ef4a8967c5823f9b046f2c1d3f90bda8670b3347cc8956cdd3ccd7495f5c608bd1f34e94585de5f3ba8b725e3f7420fefde1be3a645f64c294dd74a69ba5684eb44fcdfc4f616527888d8ff233ade8b87f050b1ffefd2f5bcf89fa4f8c3842f8ecdd9dfb28ed9e8d940d97888b4ff5069bf5f1be1efb1cc7f9db29508b716e1e142f31f68dbcb0310ff4fb1ed5daba788ff596c8f0b70ed62111e2134fe85b6b14debc5fe5fd0b6caa612f7daddae63b1f2d1c957b95e3d28dbfc6fb15d1ac0e6d1e8da7984aec7a22c80ae978e47b2f8fc74a4088f12f1bf4ac77bf1727e381ad9551ec00eafbe9c28c263587c3e3c46849390ef78ff36eeb57a6c60b1b2cc4983bcab189d06cef13d3710fb3d96134478ac88ff8fd8de16c543789cd8ff5f49ef38111e2fd97bbc084f94ae7722b203c29324dd6d513c8427b3f83225478aff498a3f01d9e6a599e7db774cedd3af4cedcb6f92cef14c9d27f035b763fef3c4f62c3e4f9c22313c8525cf133b30659ee8751f91e6224ff47a8dd8efa591e7d7a912b75345789ac4ed34119e4e70f3e2656e67201b760cc06d27119ee56ac19feddb109e29e223681bc2b325bbcf16e1ce223c479ce75d2f3b3e3ec1fedf21fb3d9bce936c3a4f84e78af8ee681bc20d924d5e5a7a369d2fd93419c5a3b48b78cf115302709c2ac2eec88f8a00e7578ab0073a7f5a80f37711617f74fe74e6bf3def31bf4030c812db05281ec20bc5fe6cb4edd8dcf72be9b80264c7aeae1df9ef49d7ba486879e5cd00140fe1c5627f2eda76ae953f573a6e00bad60cf75afd2e92ae75098bcf4b03513c84974a7e5d2aaef59074dc4074addddc6b0df09e45fcf0bd4ce27b99082f67f1f799177f058bcfeb5efc95225e2e9faf62f1e5cce548c73bcf3bce3b0f74bc3ac48f0f574be9b6bbcba1fb5b627b33975dff06743c84d78af37a49f1d789f8de52fcf522be8f147f8388ef8b743d1def3cef380873908f905e7b89f8992cb12d06e135288daf11be3c27b667b1c47ac23b0ef71988f30a4e90d8dd286cc947db984d448af7d87497e23d369e9d5e5adc20a57f47d9cc76b7b3bcb2272afcb94d3aee6a14824ebf10a6b9df7c7d138b2f23e63065be1ee0950973ddfdbd9bd0f910de2ca5a5177f8b949637a378086f65f1f58f77de6d525adf8ae221bc5d3aef7611ee21c2be2cbeddd75711e2b6d03ce6bfdef1f2f19d2cb12fec2e1477278a83f06e71cd6fd0b663ffa05d25dd2a11de237cec8fb621bc43c417b8360fda4fc457a3fd9e0df3d5e939d8ab2b1688d02b4bef65f1f7525f140fe17d1257afad783f8b6f87787970b2081f60f1ed742fddf617e183527adc2fc2bd902f0f88706f14e7e5ab7d50dc8322dc17c5dd21c2fd587b9fc110af8edd53847d62fb0abd7afb00a6ec1329f4ead274b9f541dcf075177650ff47495f4e178f570d62e3a5c56214e7f1af5530ac8b711ae6d5778b2486f077bd0871fb2cd97db58f081f766d8e0c90e21f11f103a5f84745fc20749c170fe1632cbe0dfc308a87f07169ffe32c967f207c4262bb1f8a87f049296d9f14e112112e15e143e23a5ebfbf579fec2dc2a7a4ebec25854f4bfbf796c267a4fd4fa378089f63f165e632140fe1b3d2f9de7eafec7f41daff82089f67f1fd36cf4be18bd2792fa2eb41f892b4ff25297c45dabf5cd27955daff2ae209e16bd2fed7a4fdaf4bfb5f41f110be21717b43842f8bf842b48ded7e8bc597795e197ca008df96aefbb6e4d79b2c3e5fbdc962e55547fbb46b44f82e8bbfc7bcf8f758fc3de6c5bfcfe2efb1f7503c841fb0f87be85d140fe13bd2fea5281ec20f25168b45f8118b2fbf3e44f1107e2c9d5727859f48fb3f46f1107e2a31fe54845e3fd267521a7e2642afbff173c9afcf45582bc245d2f583a697d726f8425c6708da76f2e38826e9382ffc92c5f2c841c206e5d8595624e28ea9d63b69ddc48ab901d0dbed7728db3b33f520364867c32ff837865fb695ad754ead578d24cfe7e3d4adac9c9529479287f276b477f50afebbc6396239171d1a49b8c4fd099700e31a9c9f7a340cdee2c44fe7a3e83010bedcd933ce79685acecf5ac44a9d4a615f49658173d906d6e66c553bbf9bb8de22c7ecc42353b90443e6f239f31c4d7744bfd189f1803639db0ddcc22afe7b15b7b49e5b3fc3896be5f30b5638b7d954275cc3af96e87bb3f3b7ea9ad50299da46f5c03e15ef4e1ff092a9d2f106ac2fe6ed90ff4f91ce4811409f0df707fceb51cc6bb5931252e2ff19ba850c745acd101aa51c59242eae8c15f37ead79090483fb98e8a13a7fbbbc27b2f1497d519381e41ec63d88a5f005e7dffe6a59e4f41559f1ae95b362fef8313c856bc9c0825e94b77883b89095d5a3040c95f14754f87937505506f1bbc72de7c7054f806c5ef9c5274024da5ee142c9b6d4697ac354ac957c77a3306faeb3bd9cbba43ec69bd655e384e052426a96c0a57378822456b7a99ca292a49b2a4972339d24a9cba0644992dbee572c49e09f9a601e4130950d14c1ee2a82bced566f94e07c27ce6d2c4de37b97f31ad6ab83c16ef022d951c06e169f10d8c6af9f9c32740975972817f7f49a9bfaad298224947e65a993b4174f52336650c9de4395ecbd325f96b9b77c438a8a519da4d002df38e1c659bfb39a721fb2e8496e0345304b459077ae57679020ec5bc955a0e00dce107af2c6ca0cd500f339c02109cea536814298ad42c8c72196764ad903d38fa1e50f968fd75cfef453953fbc1f756c921b3f3d8b029441fd79e29a3385ca02398a2c500259a040c1aba46fa23fc2a93cc929f087b864aeea9250f40d5096278e8e2cde8716cfa3c4076a10ef49890fd220de4b7533f20e9d4c3e5c54b5cfe10f5e96413b3f5fa2f09b3abb1732f58341f2cb5399b8b72a5d207288b2749513259f4e943e548a0f55a6b853f70548f1be94f8461ac4f355d9898f55ef67343b2576027a7f4d75ce5de6f8b38af7ecb489c6947c7cf22c0603ad5b4b64d4396c38cf61454cd59519cc222ad7f5a372dd8874735d7f4a7964baca05aa5cc12fd7f9357eb9e61a1f5e0449a8f13900bfd56c708b625522ff4554f6452c48651fdc0a2ac70e50a53e8f3cb053527f0fe71a35fc8acdfc8895a2fdaa2f0f8c52e5013eba352e097d1d764939a18897dfeaec309a6707d306519962a0aab08122611305bb9202cf97d8afc4c65f115d000d525d0d1a6d9baaaed633f16ac4257bd1971c4c55b39b69a8660b55e2d0c2dd9c25f62afde6fc4b10cfa3c58750e26314e27cce6900f1a1947854217e5540f18d28f12d14e28b22c1c487a98a319eb132d97732c769901e288ae9e06d6578dbca5f43662c53f79ba4ba3e75bf0f57d1e3f7c89146e9f91d519ece5f8aae8ff3cfbbee4a5ebe8145de90e23c275cc2ada8171ddfa947a293a7cc56ed7c5095c16ff369ccffb8b8792fe03dac9e909844ad328ee79b70d94ce5c911aae202ba26e065b484e112b8ff173a3f25ce7fb02cd9b0c8427e4c0d735fb54f286572e8526624655389caa691c8a619a2565ece772f67eb9c03520ddf04b16c63aa702d5515aedd8215ae4594789942fc9480e2a354e2f060032fc3a5f560339aaae4c72b2bf9605d339b50664f48d7ec4d5585f1904c576595fce97771078701e005b4510ac28cfd4c0c054c22aab4547650c5c76654fa6c936efa6c4e296f9baef2184a79bb7495a394f2f6e92a6f41dd643b68b8c9b6a40a9e1d1505cf86ac6005cf584a7c2785f8cfd9c1c4b7528817f3e675e6a785746c081cde172c54a59ff2f69dcc92cdea083a00beb52a6980de1485511155a69a4c27cd382adda72ad2bd352758ba17539657503803585e42595ea9b0fc8780969752e2d314e2d1dc60e26594f82e0af1f501c5cb29f1e90af1dcbc60e2e3a9f26d570de5db044a7c8606f18994f86e0af109bf9cb64310f14994f8ee6acb0375a06c4325e84cd51d1a3041b7a52c9fa5b43c58d7cf7694e5b315960fef15ccf2ed29cbe768c82d3b5096cf55587e4240cb77a4c4f7508857f70e26be934a1c6aa279ed3b50f7a1dbc264ac1bafb6605a483402d50dd56d5acd1f13611edd125e713576a09335c19b71b4373b53893c5f91c82b0b8ede2e48224fa6c417a873d0e420e253a844de5391c817f50996c85355e2703cbc0a45f511fb989390a48fb882f2676f853f1f05f4a7924a897d34dccbd328cbf75595427d8359be8b4a1c1e25600c597e9488047994984e99bdbfc2ecfd029abd2b257e8042fcab80e23328f1850af1b9f9c1c477a3c41729c41f0a28be3b255ea3107faa5f30f19994f86285f8a1fd8389cfa2c46b15e2b705149f4d89d729c4371404139f4389d72bc42f1a104c7c2e25be44955b028aef41955a4b95a5d6e440f5c73ccaf2650acbcf1918ccf22a9538f4a7c2aba3093db7d07a88f5c9b638b54f73fb1654f42dce4f8573280cc62f717e82f4d456530c0f54302c2fbf73a7200ce7530c0f52306c18148ce1024abc4121be7e7030f13d292c8dcaac15ac42dc8b125fa1417c6f4a7ca506f17d54e280115ef334d3eed997f2e7600dfeec4789376b10df9f126f51887f983f2350f1740095fb5b15b9ffa680b97f2125dea6107faa3098f8220acb2a0dcc6ba80cbada58065d4cf9b346833fb594f85a0de27594f83a0de2f52a716898c38aa569f5f12fa1cc3e54795f3dff5810b39752e287a9c503ddb4cb28f1c395c0d707aa6c9753e247a8c503597e2025be5e9d5502597e904a1cda2c30dd23a13504b3c16064ff60be097dfbf39deaa74ecc3e8b7f2931484ba881cab047a59b611b29e5a3d3555e41291f93aef24a4af9d874959b14cac57c3616dcd8999fe229cf52d237b5f338e6770615acbc1a8dc0f8a2092ba971ad8355690c297182ca7039898fa793b8992a2d4e549716812a96162a679e946ece6ca5cc3e5983d96d2a71984701abe0aa2727282e3089bec02a8acba9e972594d71394d0397351497d33571594b597f8606ebd751e2676a103f84123f4b83f8a194f8d91ac40f5389c3f1b0d4b09977f60e575d1286ba6115e37487ba8fa0c4cfd520be9e123f4f83f89154326fd090cc4751e2e76b103f9aca431718cb43c750fe5ca8c19f6329f18b34881f47895fac41fc784afc120de22750c97ca9b1643e91f2e7320dfe9c44895fae41fc644afc0a0de2a750e2576a103f9512bf4a83f86994f8d51ac44fa7c4afd1207e0695fbaf3596fbcfa4fcb94e833f67a9c4c198eb55fe14f871a588bedad9942b376870e51c4afc460de2bfa3d2fd2663e97e2ee5cfcd1afc398f4af75b4ca4fb06ca955b35b8723e257e9b06f10b284eb79be074a1ea6af048082b25a7f54878914a19ded3bd53e5c740dff977347dc98b2967ee4ad7994ba844b9db44a25c4af9714fba7e5c46f971af093f2ea7ee93fb34dc275750e2f76b10bf92127f4083f85594f8831ac4af5689c36df7902a85b5dc76d750d9f5e174b3ebb514a9473490ba8e127f5483f8f594f8631ac46fa0c41fd7207ea34a1c8a8827541928dd22e226ea6a4f9ab8dacd14b8a73480bb85127f5a83f8ad94f8331ac46fa3c49fd5207e3b25fe9c06f13b28f1e73588dfa91287c10ff86a403a831f7751c22fa6297cb74a184a6258cf3fad92f81e95322c57f0b21f93c7d2c2f75229f88a8614bc8f127f5583f8fd94f86b1ac41fa0c45fd720fe2025fe8606f18728f13735883f4c89bfa541fc114afc6d0de28f52e2ef68107f8c127f5783f8e394f87b1ac49fa0c4dfd720fe2425fe8106f1a728f10f35883f4d897fa441fc194afc630de2cf52e29f68107f8e12ff5483f8f394f8671ac45fa0c43fd720fe2225fe8506f19728f12f3588bf4c897fa541fc154afc6b0de2af52e2bfd720fe1a25fe8d06f1d729f16f3588bf4189ff4183f89b94f8771ac4dfa2c4ffa841fc6d4afc7b0de2ef50e27fd220fe2e25fe670de2ef51e27fd120fe3e25fe8306f10f28f1bf6a10ff9012ff9b06f18f28f11f35887f4c89ff5d83f82794f84f1ac43fa5c4ffa141fc334afc9f1ac43fa7c47fd620fe854a1c7a14fec5d2ec51f852a50ccb11ffc27cf4280ca785bf5209c3ac6ef8b863c25c7178894f3d5336f6bd8c717c55b495ac49ac8be6ce2c0709f72cd89b4ac3cf110be36609c77f1221c83cf5af2902bfaa08c0fbd1f8baf85b167e3ca7ce4db64797a7bfa73cfd8fcad39d244fe3af8b7d85b482f5f6d6b2d9cedea50cde1c7057ac4d6ebb3ecfbea13cfbafcab3f9642ec6b3c23b9e8fb18abf637471f896e2f09b8a433ddf84d51bbdb51bf1ca8deeda4ef03ec0125623de0798d17ee434b68ab9ab43cee35ed43b7eade2478f13fed43bfbe6f27707968ab51817f05c026b242e56e66cfc49aaf83dc9682de0eb2cd605e2f4078a132c37a5cc2f2639ad708e85f78dc123d08d9d939c50fa1cbea33844541ca2e47d13ffa512d7b3a53c072c64ab93967b41acfd23656d3795b5953e4bea99cc7de3bb9a7f1820b154ca7429fd3de565779597b37d7a399dbfc5e2ad28eef93ac7f97b5a7bb9d6d99eff89f2bc87caf3f192e715fc7e73ef2daff4ae76e2f01293c93d8cdf87cf0be2c59f292fb2545eec2e7981af9a2c97264fb9789fe93dba52ee2f94cfd92a9fa7fbf4599d673bdbd71f285f73fcf81aecfeecec3bf2af94afb9e994b8d342d62efe1be5659ecacb72b2169cc5d36f99d30ef0ea76585524552aeaa91b7fa47ce8a9f26186cf949ac5e08d4768cd37f1d4aa4dd2b6ef58aa75d4dfbf53fef652f95be1d3df4ade3a834f4d87c1c79f281f7ba7df3a6b61ba5b67ffa0aceda3b276672945622bc9e2f498e2b467ebc4caeaaaf4889d45c7537b82f8f64fcab7be5409e1a765922ccfd01e74347d7ea67cc857f950e6bb9403ef5a3252c6fd8bf2a09fca8309be7258acef6216b7aa4de18beedcf40be5477f951f537df951c55b3aadfc49bbb6d3ef977f531e16a497d7aa7db48af4e4b55f290f06a4e7c11427953273b7fc87f260a0ca838901eef706de9bd3c44a5869463cf92fe5c92095277e7b68fddd3199adf17fa33c1dacf2741b9f9efa29e34c78039d694a6f0a55de6c4be6c0c4457ae37b981a780dd4e29c55c55ba89e0fa95b43e581fc8950fe0ce9787bac5cf2658d36fadd286b8752ed317ff73f6c27b7d27cceea4ef9b691be9448fe5c1ac4da1e94b5c3d2795649d536ce6c8a64513e0e57f938a9c3f77a13bfd7e3bdd67d9f6753be8c50f9b257a0dcd591f1a4781dbf47e9ea1dc9a1688c54d1d8aec3290b2345ad52ff825a49f56dcc201ee5521e6dacf2a886f4486547c75359a516ec585d299e47f129d257baaed356f2f4a4ac1da5b276b12f6bbd5e126fbba3656bc7ca633ff60521d48b22345a45686c07f2bbfed64b6fcae64d74dbacaf9eef43d9bca96e9bf5dd3d7d299b37d36db3be9ec67ccae6cd833dd9a6aa91dcd8d5fcd9a9ce484ba31fe5c9189527b33a401fea20b7e7b12569e942d528666ae0fe94df5195dffb3073f32fa6b374e7a9d03355821029a0886c91ced877b2967eb239351dbd3307505e6ca9f26273323fcbb309636d445d960ea42c1dabc7d2c49cd1514b0751966ea5c7d2c5da2c1d4c59ba35357325688fa3fe76981ecf0b29cfc7a53b827c30bfa333d15b3784f2a1987ace73cbe42a56c976779e366a780d339fc1f35b83784277d71076eba11671fa725197fa2d8bfc3cc7e4383f91084ce39ec6cb7ae8eb8c7d7fb98515f30fc897b4db9cfacbd86041a363155cb9babd2648fdbdeb1207567637e6fe1b1301d090c84dc02c713d66f79e6c109ebbf528109bceebac7a5ecbd43adbf0b51238cbef97d55575e238542b62effc7f3d5dfebe672492233cf2b41cd2fc63f35dcdd35248d5612255bb15f38f978fed606e4a6d45195cadbb3a0f257e4219b74654b6bb02b399fba5777e93c0cd58c5bbd2f0c7c9535e495e335bbed2d65ca05a08a4949b8f061755724379f672bb399b993bfded32e7d6cac9ea560229506e12137c23084aa212e6cd658e81aae2f3ca9a796e83d2769d1f6f43006f7d560cde7893f0faf20a2ef611817952d79e0db0cee9178335c124ac7e0939cdce5b73785e0cd8c44ce6aeb9d290800db05ecb8fc19a6412566f2e00b96a8a98616a57ae5ad63b066a1bd3f522ce55b1a1641b30350c8861dad624a66c5e5ab5f0e2bcd9923cd41a89c1d9ce249c020e07ca20b70ba9424ce35eca1fd3620fe03640837f1eb4ed4d42ebd35e42c59ed8ec2aa3cec98da1dac1242a784118daeef865b16a67c71ae7ef366e8e0db8cee811c3b5a3e9ba0f70d99aaf72bbc740ed94892668a9e54d507891df03b6b34960391c581b6a2ed880e73e54a44f3689274bdc7833599b2539e73354264dc944f78b9dadf197508934d5744d875be38943b536e06aea1bc3556112571ef31a9ed0ffedf556db806857d4a15769be438f6a9b7bddc82b444fc25a2be0ed870af46926e1f56489bda1b614edbd73629076c9640fc2bcf6fc6503a6eb06c6304d37dd2a8fcf4b763d18dfd627066a5793a0062a40d9fcdc7702ba1167982fada0a8afe4a38936d587ada83edc2d53dd2e35ac5944bb12b556a0da0175bbec9e997e043b4195a071bf99991dcab2b35df5032fe273b22471f9cdc28ecf6a0846999e7f018f49d39c6aa089c7825e5ddc5c8316563cd239247496cfc2f329a2befbcda3815bf15145574d346110234a3c4045c9aa249a641e453469c76334491740d4470f6f54ea5d89262d9ea281273244c9c67e34508b249aa28689a6e8f88ffa1a188ffaeabb8c261d068d266d92aaec50e5b3d43d16d19423d78947c83327a249c62913f7c59e406213e4d413db4ae0669cfd3f3e77ad04e6aecd01085f09086e9d393713138d6a05c0d6a4533db791af3f3ce1faf39c1b70054f91469e0ddd035596e4c5d5a47dfc38d791da747f166b7eec6112e5108172a9284c56b0060926361f8a8c89e670e699c23905e19c17269c6556e29c8d705699c45928705230e36ff432a7bab1ef563f13c1ac0e13cc520b619e8d60ce0f13cc320b619e83602e0813cc720b619e8b60ee192698e32d84b901c1dc2b4c30275808f37c0473ef30c134d8343206f37204739f30c19c6421cc2b10cc7dc304d3c647ca2b11ccfdc204735b0b615e8560ee9f89ae8e06e720003933294c1b9f7fde41280fc8044a7ff9d24694cd08e5c2ce4419ff6eb24194634da1bc07a15c647a4cd9eb8bf75ef36e6aeffb37066eb22970c5085c8d49703000161b9058c0fba3dbf8ae59bc0bbf8677e227cc8fd18770b82984f908e1e24ce4bd922e92f7b642e06a3b770002af7663b0fccb318572044259179eb11c1b6be5d10865bd499423597c5bd15df7d3efda9706bb7b8b4ca1bd0ca15d6212ed2809adbbf066b085c10c021e6d0af0d508f0d2b00336583818037c1102bccc24e001a8aeaf692f512b59bd58762b03f5beb112763c82b83c3c5d1ba5565657c72298078609a68de391c72198078509a68de391c723980d618269e378e4890866639860da381e791282b9224c306d1c8f3c19c15c192698368e479e8260368509a68de391a72298078709a68de391a72198cd618269e378e4e908668b4998dec4fe32d165e74ef8cfd003642f53f86a10bed6f08c41da785b1f8550b665e2b6f63bd5dae06d6d6ca2752982b92a4c300de64c63304b10ccd5618269b0916e0ce69608e69a30c134f8f8680c661182b9364c300d36d28dc11c8760ae0b134c1bdff4198b601e122698063b838dc11c8a601e1a26980687298cc11c82601e162698063b838dc1dc18c13c3c4c300d0e531883b9118279442660525367e2bf0263f436cf3705731704737d98601aac808cc1ac47308f3409339f0bc03223b0bec06a2712be74741037b98ec19217c6e0159a82d70bc13bca24bce12cb18fc8cfe74d8d563dfd4d613d03613dda24d6fe2c3601a6962fceb2922d717e6c9ffc8217b43c26137d97fe666ada38be538d501e6b1265f055376c6c556e87701e17269ce556e25c88701e1f269c465fc83786737784f3049338cb51c5e385150c965b6ae2d550bd722d2ff88c651baf9660813a687db6f1c6937b5958af6b19abe77b4113c284a5852d287117a144383153b53f80f330db5efbef8d009e6412e030e6b7551afff29fc1a2e1785350ef42504f0e235483dd22c6a0de89a09e1246a8069fe88d413d18413d358c500df6391983da84a09e66126a5fe6ae94dac0dfbd740d4db2eeaf05d5d16084ee7493e860f9517929d04afe4e508d859d20d908db1926b1416bba2be4b31e08d899e199b06563a7c79108e5592651c21acc158cf86c85059304bb2350679b04e5bd960f175ec2739ca70d2fe91b0397650a1c43e0ce31090eaf6bdd7526a7ee83f0fdce24be02e62e8a3e830b348b85dea1fba1da79566ee65d10f0d46cdfc0573f84f0dcceec23b77fde452142795e267a21a99a377140d6c621d92f10ce0d61ead435fa229eb1dcb903c2797e98701a5d67d518ce9908e70599987de1af993ddeca17ebf1a7642f0c134c1b5facbf1fc1bc284c306d7cb1fe0104f3e230c1b4f1c5fa0711cc4bc204d3c617eb1f46302f0d134c1b5fac7f04c1bc2c4c306d7cb1fe5104f3f230c1b4b10ff23104f38a30c1b4f10ddcc711cc2bc304d3c617eb9f4030af32dd3b3ea51d977da0f210a8abcd0f9aba3379629f74ccc02428637d406310ba6bcc0f2c34f10baf4a183e3506aec814b80204eeda4ccc7ef056a78c9f3f4e9779367653dc81a05e179ea1551b9fab572394d79b44394aca9f304d144e68e62c40a6861bdfd5f2eacb08f00d26017baba7c2c862575b3d757b04f14693103bfe6293c1ae0b63737a7e87b0ded499638e58ce68396a6c31fa2a84f2e6ce45697b953409a1bca5336bf74a3e9d6031f3565d3386729229946b10ca5bc3576e969badd38b4c613d0b61bd2d3c37bb8d9d174b10cadbc3d313546e655bf35a04f38e30c1b471f8f63a04f3ce30c1b4b14ebf1ec1bc2b4c306d1cbebd01c1bc3b4c306d1cbebd19c1bc274c306d1cbebd05c1bc374c306d1cbebd15c1bc2f4c306d1cbebd0dc1bc3f4c306d1cbebd1dc17c204c306d7c02ba17c17cd024cc810c7f4a537ec1cef62ee24a84f1219318bd651a4a1306d9ec065887003edc999d1af67f99791842f94878c6276d7c0a6f45281fedcc5c19df196c30571aeb0cde14a17c2c13b5b637d4bb8cbf5ed2b586759f41301f0f5fcffa78b3b7bbb111c9a311d627c2d3b36e63c93911a17cd224caf4bee96ce3f8cf0508ed5326d1067f23d2c645e7cb11cea7c384d3e8c085319c0b10ce67c284b3cc4a9c3310ce67c3d398b7b1abe31884f2399328dd3584a053602d5bc123973b871b03666cda751602f67c26f29e57874fed720df66711ca174ca21ca5b88ddd69ff6d4eb882ede684b0ae6a575b75a31b02fc62389f880c8e9c1b7b223a01617dc924566f65a212d69556269a8af0bd6c125f4f865f5ca9720ead61465f932a32856c2042f64a262b9d295daed2790aa17c354c4d71a39f103656c54c47385f0b13ce322b71ce43385f0f4f679b8db388764628df0853ce2cb5f2fb64db209c6f8609a7d1d997c6701e8070be15269c6556e2dc0de17c3b3cd35f265ad9447a17c17c274c306d1cf3790fc17c374c306d9cb3fe3e82f95e9860da3867fd0304f3fd30c1b4b1b5f92182f9419860da3867fd2304f3c330c1b471cefac708e647618269e39cf54f10cc8fc304d3c639eb9f22989f8409a68d03b99f21989f666230cdeb226ee087d70878fe6618196cc81799027c1302fc59d801db3885eb1204f8f34c7489786bc15538245a38bc46c74bf8ceb83b309c918f641a9ba8b039c2f9457826c9d8d8b85f87507e6912257850e9ec6816b7b3ed5f28cb41e0beca440d1f5bcaacebcd6f7f13c1fcda244cfcd55bf85824a05b274a439b5fa7aa45007f6f12601902a8fe76f3146e54cdffdc979bf74449f04d260b84d55db040781ac1fc364c6348a5269fed8d8d2155209c7f0813ce322b71ce4138bf0bcfd3fd042b6ff52711cc3f8609a68d4372cf2198df8709a68d43722f20987f0a134c1b87e45e4130ff1c2698363eb5bf8a60fe254c306d1c927b0dc1fc214c306d1c927b1dc1fc6b9860da3824f70682f9b730c1b47148ee2d04f3c730c1b47148ee6d04f3ef2661e633ead3ef2bc421c6e0195bbd3d82e0fd9489e10bafa7a8eb7defe27984f21f26510e4a7153c7f711190339d914c82310c87f8605a4c11c690ce4e108e4cf610169f0e9db18c8f508e4bf3251c5b863425d633c680b04ef97f08c90dbd871b116a1fcb749942304ca56b68cc1d7aaa80931d53c57c29b6d4bb858a3d992b2da14d89d10d85f4d82755f968677ccebc468a5fbb6b93164c6de2f1f8490fdc724b2de5c000fdbce139ff9b2f1539c7d10b6ff66a234ac657ebe3c65b09d68ecd9652442f95be7a2b4bd62d916a184f54c42f2e5291b171b6d432823265176fccb5336ce0b3e0f61ed6612abf72ce34d5b9ddbdef4ae1742b599981b646cc26a1481ec6e1264fc078de73907b6f21996863f683cda14b801085c0fd3e020e7cd1037f3723e2bdd7d18acb330c7f546e0b2c257228e375bd1189bf57b18c29a6d12abf7f984b276b45de9f3098b11c61c9318f13263ab9d03ea183c5ddb8e6f2f842f37132d477f8d701bc7abf74028f34ca21ccde2c762dcaf9057f1ce08c8975310c8ae3546f31042dcd324e20274b32fe1f537f4f37485afa54c40087b9944187c3ab48d8b8796219cbdc384d3e887608de19c8f70f60913ce322b71ee8a70f6358953fe9402bc91d3ecbb43c3c6f7706f4468f34da295dfd1a9ee826b5cbf8460f63309338f5fda8365fc955163c07a2260fd3bb3c3d7fe66fba1086541667b26570aac3399f77ea3cd3d939b2090034c82840e2900181b4774df06872bd887ad3fc2363013fd40a55db21f685f847150985a8ea526a7381b6b394e433807870967999538e7229c85e1e966b3f11d9bc908e510d3d54cfcc4952a66fce308c6b0f545d8869ac496eb6ce0b5826638b5b37db87211ae8d3251fe51a51fac71b192e73968ec18ee2633d6c8b91be11c16a6eaa4d4641968ac3ad911e11c1e269c6556e29c85708ec8445f8ebfa7e94956f6e57c8e608eccc4f38cf73c9db85a90cd4fd39b218c1b6712232ca204737dba06c651086351267a77a886b7ed2f236d8d408eeacc32526e10197c1c34962b2f4530478709a6c117888dc1bc06c1dc244c306d6ca83720989b8609a6c149cfc6603622989b8509a6c197388dc15c81606e1e2698065f18310673258239264c300d2ea1640c660b82190d134c83cfe2c660ae4230b708134c8363dbc6605e88606e1926980697503206f36204736c78e65cd83886730842b9552650c6264f75b5a9532f22945b67e216f737b2687498c218cca508e6b830c1b47101d9650866719860dab880ec7204b3244c306d7c5dfe4004b33413d3a2714dbec0e151e1985dc7017be154e7f065ce69ab18bc5f0bdfd5315a1d0d3785f64b84b6ac7327bae0f5310ce65263eb631c8450969b4499b85a50d7cea3c339d89c2c497c9704f10afecc02255dec33432d4efc74063327eb99bb9ac0383e5406672d72cac37d9d9f60a9b1bff3a38a8ff0e5c4a6b1357c40ae99ebd571ed46672f58d6c24aa084190f99235f648e68248b31b4325194cf797721e1f99e5e7c0bab74b6dc1530c19b289ff7047393dd23e33fae144df1f1a5a872fa8f6b536cde7d9498871fe51e57f14c06596eb5737e0dbf13c0fe3a061f1d8ba678bf3eaa98b7159b28acda1b9bd515e5effdc5063e17708a6d3cdfcee21a355ca5591ce95ad1ca636ada53a8da39b799df20a0124d3a5d19b261847f4aa88aa742ad739d7acea24e30a976febbeba9146fec1c1699e8fc726fcf71ed37e638f1dd9c46b1e5c5a7d6847c975c6d0264ae88bae469d076c7a4f2c8cbbfcdfc6dcc5a7e23436c2a4f53fb47df7dbd93a44a7111a44557f67f22a4bb48769e4d0b23b016d97c27e55df17a36c739b88e1b05ffb2fe0fcd02870f870e0200 + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1645fac7e70542e88100821a3160e1558434c42e4240446992805d08498068023185662fd87befbdf7de7b2fd8bba2a2a777de9d7776cff38aff796667f33eefbcf3bcefbb7967deece4fee443263bbbfbdbe7f9ceecccecccec6c9722c6ff45b6e2bfe6b2d9ac9c8d6173580d5bca96f0bfca79d8c07fbc2d3f7e166be2e122febb8aefdb8a15a63813fe8d8c0ce5bfa7f2ad66d6c2cf6c65d53cac13fb2b582dff7b2a3fb7966f41ec42febf961f15e9c64f9ac326b1996c061b12199c4262ae38a959c645c0af480ffe7b225bc9f7d60aa3e0224562d710feab82ef6916fb1ab8d1fe71fbb103845b0d7c5f353fa789d573cd0542b1c78b054cfcc1bc60880c07cbb0ab0c0fe6ffbbf3ff5fa06df06637b90d387218eb7b98dceec2fff7047df937d65e4f86dd64582fb5ff80b661dfb5727bfd00da7d64d82035bf44db5c33522cb7f364b8446ac1df1bc870298a5b82e2b0ee578aee0a45b740861bcae3ffa8ecdf48c6ff290d9f8679fe17cc4fe3d88d031cdb5d868df2efafd13684c3655828f7ff3989663ad76952aed3a45ce710b9ff2f689bb3edf28edcee25c36679dc5fd136849b283adfa06d0847a0746daf0fad8a0fad8a0f2d8a0f2d9e0f5d2f547c58a6f8b04cf1c1d7f91bda8670d30c7ce8a1d8ba5986e9aaea6d2ef5fe6e486fa4d4fbb69d7a5b30712f74db0ad9c7d322e74c254d972b69ba5c862b64fc77723baa842be5feefd1f17e3c84abe4fe1f94ebf9f13f2af1874a5fb8cdddb762edb3d1b781b271a5b27f95b23f5d1be1ef2d59fae5f22819fa7e1d26357f42db7e1e80f89fe5b67fad5e32fe17b93d3ac0b5c7c8f070a9f10fb48d6d3a42eeff156deb6c2af2ae1df1cb974226f255eefe84cdff94dbc5016c1e8eaedd93d0f5599404d0f5d3f148169f9f8e94e15132fe37e5783f5ecd0f4723bb4a03d85126c3ad65780c8bcf87c7c8701cf21defdfc6bb56d7b52c5696f134e8f135a3d3801fdf732db1df67395686c7caf87fc9ed6d513c84c7c9fdff56f48e93e16ac5ded5323c41b9de09c80e084f5474b745f1109ec4e2cb945c25fe4725fe78649b9f66be6f5f33bd4fbf31bd2fff517456337d9ec0d7dc8ea59f27b667f179e26485e1c92c799ed88169f3442f358d943cd17b10b1df4f23dfaf53146ea7c8f05485dba9323c8de0e6c7abdc4e4736ec1880db4e323c536afd176d4378868cff1d6d43789662f75932dc5986677bfbe1cf383bcf26ec3f07d9efdb749e62d379323c576a47d03684e72b369dafd8748162d378148fd22ee233da2500c70932ec8afc9818e0fc72197643e74f0a70fe64190e40e7efcad26fcffbcc2f940cfc67b77c140fe145727f37b4cdffee17558ecb47764cf1ecc82b50ae75b1d4ca91db03513c8497c8fdddd1365ceb5ce5b881e85abbc96bad53ae75298bcf4b83503c8497297e5de65d2b8f29c70d42d79aea5d2bffc1007c2f57f85e2ec32b58fc7de6c75fc9e2f3ba1f7f958cf7cb6a9fd1d52cbe9cb902e9f8e7f9c7f9e7818edf7e4ec7876b9474dbdde3d075a8dcded463d7ff4e743c84d7c9f37a2af1d7cbf85e4afc0d32beb7127fa38cef83747d1dff3cff380873918f905e7e5aeec112db62105e8bd2f85acf9701feb5a6b1c47ac23f0ef719f8e7ad51d8dd246de98bb6119bb6f4f7e37d361125de67e3a7bf1fdea8a47f7bd94cf7b6bbf965cf48e9cf4fca71d7a01074fa8530cdd3cdd737b3f8326206d3e66b286ec4f64c6f7fef7bd1f910dea2a4a51f7fab9296b7a078086f63f1f58f7fdeed4a5adf86e221bc4339ef0e19ce92613f16dfeeeba709715b684f967ebde3f749ddc512fbc2ee467177a13808ef91d7fc0a6d73b6834e557467cbf05ee9631eda86f04e19dfdfb379d09532be02edf76da8d4a7e7e075727b8e0cfdb2f43e167f2ff543f110deaf70bd5f860fb0f876889fc7fdf6c6832cbe9deed739fe33e0434a7a3c20c3bd902f7e9db3378af3eb947d50dc4332dc17c5f9e5f27eacadcf60c834193757867dd13ebfde3e8069fb44d6dbdb10b7be881bbeee81edd4ff5ed157d3c5e7351fb1f1d3a20ac5f9fc17681856c7386de0c7cd5318c2df3532c4edb364f7d53e327cc4b3393240897f54c6e72bf18fc9f881e8383f1ec2c7597c1bf811140fe113cafe27582cff40f8a4c2763f140fe1534ada3e25c35a192e94e1c3f23a7e3b6c2f16cbcf103ead5c672f257c46d9bfb7123eabec7f06c543f83c8b2f3317a178089f53cef7f73f2cc31795fd2fcaf00516df6ff38212bea49cf712ba1e842f2bfb5f56c235cafec58aceabcafe57114f085f53f6bfa6ec7f5dd9bf06c543f886c2ed0d19be22e307a36d6cf75b2cbecc7b4b8675327c5bb9eedb8a5f6fb2f87cf5268b9557ededd39e2fc37759fc3de6c7bfc7e2ef313ffe7d167f8fbd87e221fc80c5df43efa27808df51f62f44f1107ea8b0a892e1472cbefcfa10c543f8b1725eb512ae55f67f8ce221fc4461fc890cfd7ea44f9534fc5486c365f899e2d767325c20c379caf583a6975ff7af93d7590f6df372bbe05ee5383ffc9cc5f2c841d206edd8594e24e28d4bd672e68dac4818002301e90e07fb67a61e0806e9eef00bfe8d14976d612bf9a9b5bad1d83962acb78595b152ed68ecfaa25dec5fbd5cfcaee247d409d12191844b3c94700930ae9effd4a2a1e4661e3f458c44c360721ddf33863f00d589b3e6b3125ef8efa7a8cce597ad67ad7cab92ff6e147af3b9d98947a67209869dd57366734d6f54bc81c7f8401bf976bdb0b042fc5e262cad15d64fe5712d628c7e092fc227f27085b85aa2ef4dfc6fdd352b2532bd8dfac1712ade1b82f7936912f706ac2f12ed90ff4f918e481140df7d48c4bb0dbb1589d6dfc90929f1ff0cbd42063a7ca64a8d12812c121757ca8a449fd0ec0482c17d4cf4509fbf3ddee3d8d8a4bee8c940726f283c88a5f0c517ddf57a69e48c2539f1ae95b122f1f85190c2b56460412f2a6aad202ee4e4742b064355fc111d7ed145509145fcde7175e2b8e009d05d547ef1091089b655b850b22de24d5c98ceb454ec6e90e6cde2db75c225fd31fed4a82a1e824b09a9590c97ce15099258dda6728a4a922eba24e991ed24495d06254b921e6d7ec59204fee909f62408a6b28122d8554750b4dd6aad129cc3e3bcc6d264b1b74ed4b07e1d0c768317c98e0276d3c5a4ba5671fde494a14ba8ab42b9a897dfdc346f4d2124a1f22b479fa4bd4592da31834af66eba64ef9dfdb2ccbbe5eb53548cfa248516f8c60937ce51e3f594fb92454f721b2882393a82a2b3bc328b0461df52a102056f7086d093374a65a8079827000e4d702eb50914c2ee3a84629c665187943d3085175afe60f958c3e54f7f5df923fa514725b9f133b3284019344024ae3d53a82c90abc902c59005f235bc8afb25fa239deaa93805fe1097eca1bb24147d03b5e509d751c5fbd2e23d29f14106c47b51e2830d88f7d6dd8ca243279b0f17156df3e0839765d0cecf5328fcaecfee4398fec120f9e5a94cdc47972e1039545bbaaa899247274a5f2ac5d7d7a638affb02a4783f4a7c0303e279baec048560647fabd929b113d0ff6b223f7731f76799e8d969958d29f5f8e4590c5e1018ad90d1e7b00291c30a99ae2b33984554aeeb4fe5ba8d32cd750328e561992ae7eb7285b85cc7d7f865866b7c78b923a1c61700d2ad66835b14ab12c52fa2b22f64412afbe056503976a02ef545e4411d92fa7bf26b54892b36892396caf6abb93c305c9707c408ec9824f44dd8a5e48442517eebb3c308911d6c1b44658a41bac2068a844d34ec8af37d5f62bf121b7f8574013458773568b46daabb5aafc4ab1197ec4d5f723daa9addcc40353b44270e2ddccd5962afd2effc5f82784f5a7c28253e52232ee68106105f9f128f6ac4af0d28be81aea411699fcdee8d99bccd78902c49833767a14328bdb6c6964cdfb591eafad42db9a18e9ec8c6475ba597eea0ef14f1ee6f6d9c7ffe75978a22082cf247fd66f370a1b0a256f64da71e2c4e9e32a3daf8a0525ddc899359fa43d7f6bd806963bd0ae876c068916fc2653395270b74c505f41e40bd9530a20139781eff29e6ffc1b2642317f3c43155cc7ba33ca194c9a54b998d289b8a74360d43364d9515679dd85dc756f103528db004b16c1855b816eb0ad748b0c275634abc4423fe4640f1429d383c7bc0fb6a193d7b0ca7eae1326d3d1cacf7640465f6d84ccdde4457180fcd765536493ca02e68674f3dbc23365c4398b15f89defa71449596ca0eaaf8d8944a9f6d324d9fcd28e56d3355de9c52de2e53e59194f2f6992a47a99b6c070337d91654c1b3a3a6e059db2d58c1b32525be93467cc7eec1c44769c48b440b38fb3337da374a0daff40dd1a59ff6f61dcf924dbc083a46bd952e6980de2e1aa322ba4c359e4e9ad154ba4fd0a4fb8301d37d0c65f9440a6700cb8b28cbcb35968fcd0d667931253e49235e1f50bc84129fac117f36a0782925beab467c5a8f60e26554f936c540f9369612dfcd80f8d694f8548df8d6bf9dbe6310f17194f8ee7acb03f5716c4325e81eba3b3460826e4b593e4d6b79b0de99ed28cba76b2c9fdf2b98e5db5396cf30905b76a02c9fa9b17c4d40cb77a4c46769c42fec1d4c7c279d38d4447bb6ed403d7cd0c2842ab88ba8b6a0451d8d408d40f56c568ac74498eab650545c0dede8074df06634edcdce5422576a127969feb1db0749e4f194f81c7d0eda2588f82e5422cfd524f2ba3ec11279824e1c8e87b795a86edc34a60d24e9c69d48f9b3b7c69fc2bec1fc29a752621f03f7f224caf27d75a55040cb27ebc4e15102de53531f2522411e2576a5ccde5f63f69501cd9e42891fa0118ff60b26be1b257ea046fcdc80e25329f1791a71e01b447c774a7cbe46bc47ff60e27b50e2551af127038a4fa3c41768c47f0a283e9d12afd688af1d104c7c06255ea3115f971f4c7c26255eabcb2d038389cfa24aad85da526b9740f5c79e94e58b34967f10d0f2d93a71e84f85b73b137a6ea1f510eb936de6554153db1654f4cdfca79c1f0ae3e50bf94f909eda0a8a619d866159d93d3b07615849313c48c3f0ce41c118cea1c40fd6883f3b3898f85c0a4bbd366b05ab10f7a2c41b0c88ef4d892f3120be8f4e1c30c28aa776da3dfb52fe341af0673f4afc1003e2fb53e24d1af18ff3a6062a9e0ea0727fb326f77f1730f71f4889b768c47b0c09263e8fc2d26a80f97c2a832eb39641ab287f961bf0670125bec280783525bed280788d4e1c1ae6b05868467dfcb594d9876aefab979e0c62f6424afc30bd78a09b7611257eb816f851812adbc594f8117af14096d751e247eab34a20cb0fd289439be528a6690dc1842d18d93f446c42dffe1c5e17d4c80962f1ef0d0669091d4c65d8a333cdb0f594f231992a3750cac766aabc44a35c24a635c11d92fdb992ea5c227373248f63e9ce735acda07b0e06ea6c58498d3e2dd5a531a4c4f13ac3d5245e4d277123754f9fa0bfa70315ff875039f3c44c73661365f64906cc6ed689c36c075823403f8540738171f4055a282ea764caa595e272aa012ecb282ea719e2b29cb2fe7403d6afa0c4cf3020be92123fd380f82a4afc2c03e287eac4e17858b3d7cecb6f87e92e0903d2b01c70a603d28753e2e71a103f82123fcf80f89154329f6f20998fa2c42f30207e3495872eb496878ea1fcb9c8803fc752e2171b103f8e12bfc480f86a4afc5203e2c753c97c99b5643e81f2e77203fe9c48895f6140fc244afc4a03e22753e25719103f8512bfda80f8a994f83506c44fa3c4af35207e3a95fbafb396fbcfa0fcb9de803f67eac4c1981b74fee4a7e34a217db5b328576e34e0cad994f84d06c4cfa1d2fd666be97e2ee5cf2d06fc398f4af75b6da4fbf9942bb71970e5024afc7603e217529ceeb0c1e922ddd5e091109617cee891f0629d32bcf07a97ce8f4169e7df11f4252fa19cb93b53672ea512e51e1b897219e5c7bd99fa7139e5c77d36fcb882ba4fee37709f5c49893f6040fc2a4afc4103e25753e20f1910bf46270eb7ddc3ba143672db5d4b65d74732cdaed751a41e3540ea7a4afc3103e23750e28f1b10bf91127fc280f84d3a7128229ed465a04c8b889ba9ab3d65e36ab750e09e3600ee564afc1903e2b751e2cf1a10bf9d127fce80f81d94f8f306c4efa4c45f30207e974e1c063f60f9fd4c063feea6845fca50f81e9d3094c4b0307e4625f1bd3a655854e095744cde9216be8f4ac1350652f07e4afc5503e20f50e2af19107f90127fdd80f84394f81b06c41fa6c4df3420fe0825fe9601f14729f1b70d883f4689bf6340fc714afc5d03e24f50e2ef19107f92127fdf80f85394f80706c49fa6c43f3420fe0c25fe9101f16729f18f0d883f4789af3520fe3c25fe8901f11728f14f0d88bf48897f6640fc254a7c9d01f19729f1cf0d88bf42897f61407c0d25fe0703e2af52e25f1a107f8d12ffca80f8eb94f81f0d88bf4189ffc980f89b94f8d706c4dfa2c4ff6c40fc6d4afc2f06c4dfa1c4ff6a40fc5d4afc1b03e2ef51e27f3320fe3e25fe7703e21f50e2df1a10ff9012ffce80f84794f8f706c43fa6c47f3020be9612ffd180f82794f84f06c43fa5c47f3620fe1925fe8b01f1753a71e851f807cbb047e1739d32acebfb2b4ba347a18016fe42270c73afe12b890933bae16d38fd4cd9d88727c688b5cb96b246b97a9937ff1b24bcb3606f2a8d748e9817374b38fedb02416693ff8122f09b8e00bc6b8caf8b3f0a918ee7d4b9c9f698f2f44bcad37fe93cdd59f134febad857482b58156f259bc1f72e6230bfdf5bfa35b9ede63cfb8af2ecdf3acfe690b918cf0a6f7f3ec62ae91d638ac31f290effd171a8159bb0c6a2bfc2225e5fd15b8109de0758c8aae4fb0053db8e9ccc96316f0dc7d9c28b5aeed73271f418e94f2ddf374bbc3bb048ae983857e41258c970813667e36f3bc5ef49466bae580db12610a73f519cfe4be5179b9c96f063e1ad60f0087463e72427943987af290ebfeb3844c9fb26fe931f9e678b440e98c796272df78258fb67ca5a58ca2bc1da496996d4d398f75e76a558613fb154ca7629fd17cacb88cecb19697a3945bcc5e22fcdedfb3a93ff3db9ad5ceb68cfff4a79de45e7f958c5f37271bf79f7965f7a57f238bc1064720fe3f7e1f38278f10de545579d177b285ee0ab26cba5c9532ede677a8fa994fb1be573379dcf53d2f4599f673bdad7bf53bee6a4e36bb0fbb3a3efc86f295fbb6752e24e0e59bbf83bcacb5c9d9765642d385da4df62de0ef0eb7658fb23552a9aa91bbfa77ce8a1f3616a9a29359dc11b8fd09a6f14a9559da46ddfbe546bafbf3f50fef6d4f95b9ea6bf9344eb0cbed91c061f7fa47ceca5f33158ebac99996e9dfd4459db5b67ed78254562ebbde2f498c0dbb33572fd735d7ac4cea2e3a93d417cfb99f2ad0f5542a4d332499667680fda9b3ebf503ef4d5f9509a762907de3567a58cfb07e5413f9d075ba795c3627d17d38555ad1a5f4ce7a65f293ff2747e4c4ccb8f0ad1d269114fdab16fd277d4fdf24fcac3fe99e5b5ca345a4566f2da6f94070332f360024fa5ecdc2dffa23cc8d779302ec0fd5e2f7a731a59312bc98a27ffa63c19a8f324dd1edaf4ee98ecd6f8ffa13c1da4f374db343d4da78cb3e1cd7f296f06ebbcd98ecc81894be9c6f730d58b1aa8999f55215aa8be0fa95b436581fcf99df267bdf6b7c7ca145f5618a30f9d625a6b8750edb1f4ee7fd84e6ea5fd9c15a17c1b6a2e25923f9706b1b60b65edfa993caba46a1b673745ba523e6ea0f3719b76dfeb8de25e8ff7daf47dde8df265439d2f7b07ca5ded194f8ad749f72853bd2339148d021d8deddb9db23052d4a2f42fe895741f990ce25177caa38d741e55911ee9ec687f2aebd4821d6b2ac573293ec3cc95aeab8c953c3d286b37d659bb202d6bfd5e127fbbbd656bfbcae374ec0b42a82745a8504768543bf2bbf9d64b2fcae6e1a66d3657cff7a66c1e61da6673774f1fcae64d4cdb6caea7b12f65f3a6c19e6c53d5485eec72f1ec5463a5a5d18ff264339d27d3db411fea20afe7b13969e942d528766ae03ccaefcd757eefcbeccdbf98c2329da742cf540942a43f4564642663dfc95afac9e6d4b4f7ce1c407911d579b139999fd5d984b136a2294bf3294bb730636962ce68afa503294bb73463e90263960ea22c1d45cd5c09dae368be1d66c6f3c194e75b653a827c88b8a3b3d15bb71ee5c368ea39cf2b932bd824b6077fdaa81235cc1c06cf6ff5f209dd5b43d8ab879ae5e975b22e4db72c4ae7392697ff4422308d7bb228eba1af33f695e46656243e545edc6673eaef5783050ddc2ab872655b4d90faabd46338acee5d98f76f64044043223702b3c4f598bd7bb25e7aeed5a3406c8aa8b36a452d53cdb7e19b227056badf3fd7d5896350ad88bd4bff1be7ea573823915ce991afc5498bcf6f77364f8b20553790a9daa5487cce7b543b73536a2b8ae16a5df57928f143c7b835a2b3dd1398c1bcefb18b9b046ec60ad195863f219ef24aea9ad9ea95460b814a2990526e0e1a5cd4c9ad2fb297d7cdd9c4bce96f5f7234b9395d8a21054a6c62822ff9404954ccfcb9cc315015625e5993c86d50daae4ac7db10c07bb65b0c5ea94d78fd4405175bea7fb6d2b5e702ac0ff262b0ca6cc2ea9f90d3dcbc35e7f788011b9bcddc354b19127001d62094bbb6b609ab8f10805c3541ce30752b57ddda3b066a9ced7a11e7aad850b20b98eecc8f61dac626a6eea2b46a16c579932379089607f2e16c6b134ebe80036590d785542ea7712f128f69b1077017a031046d3b9bd0fab69550b12736b7caa80f7263a8b6b7890a5e1086b63b7e59ac92ef58c1ff6e15e6b880eb9dae315c3bd8aefb0097abf96a5a9718a81db3d1042d71bc09dad22b066c279bc07264ce9ac65a1d41b3297af6db391bfd0b6e3637fba3b269bceda21c373713c7225dc0756fdf18ae5d6ce2eac9fc961574f0faddb12e203a15f5584db0df6345353efd7ed225f25179a513f0e0c3bc3ebc8936e1f56289dd7dae14edb3bac7209567f31179765bfe7201d33703639826d96e76c6e725b79efc7eea130335d926a8411a502e3fd8ac4137e2aef64b2b28ea2789e13297eac307517d38255bfd0a55ac49467b12d54ea03a0af52bec969d07653741b5a0879ba9d91dab71b35d3556b4db73731471f5d5b9f60fdb07a34c4f3080c7a4c9bc1a6814b1a057a34e3818c60f099de5bbe30903d1b43b86a3815bf1d1841ef928f1b01425ab8d68924901d1a4bd68d1248ffbd134ba2ba34a4f4a346951140d3c2a1f251bf6d140ad8f688ada249aa2173b9ad6286f34ad8eb868d231bd68d2e6a7ce0e5d9e4add3b114d390c9b78843a0d209a64d02d715fec692336db4b3f4bab18667bedf13f3e11ab1826624d03085f48085efd383d1bb366aa25c096a4f316b755af5f9070fdd9fc065c2252a4416443ef409d253de36acdbee93897698fc40c9b28874a948b6461b284d52b30b1f950648cb387b3a72d9c1311ce9961c259ea24ce1908e72c9b3887489c14ccf81bbd945737eeddea6720987b860966898330cf423067870966a98330cf46302bc204b3cc4198e7229895618239d64198e7239873c204736b07615e8060ce0d134c8b4d236b30af4030f70a13cc6d1c84792582b9779860baf848791582b94f98606ee720ccab11cc7db3d1d551cf0f0290d392c274f1f9e71d8472bf6ca04c2f5fba88b211a1dcbf2351c6bf686b11e596b650de8b501e607bfcd8ef8bf7df596e6cebfbb7066ebc2d706310b8036d8283c1aed880c45cd11fdd2a764d175df855a2133f612e8c398405b610e62184f3b291f78a3b49de1b85c0cdefd80108bc748bc5f22fd716ca0284b22a3c63392ed6cac311ca0536510e63f16d456f11cb741772b4d8dd5b680bede5086db54db4c315b4de2a92c156b9b20878842dc0d720c03561076cb170b006f86204b8d626e081a8aeaf6a2b5127b15ab9865416ea7d6b256c1982b8303c5d1b254e5657c722988bc204d3c5f1c8e310ccc56182e9e278e46a04b32e4c305d1c8f3c01c13c284c305d1c8f3c11c13c384c305d1c8f3c09c1ac0f134c17c7234f46301bc204d3c5f1c85310cc256182e9e278e4a908e6d230c174713cf23404b3d1264c7f627fa9ecb2f326fc67e901b2b72d7cf311be43c23306e9e26d7d1442d9948ddb3adda9d6166f6b6b13ad4b10cce630c1b49833adc12c46305bc204d36223dd1acc2d11ccd630c1b4f8f8680de61608e6b230c1b4d848b706b308c15c1e26982ebee9331ac15c112698163b83adc15c1fc15c192698168729acc11c8a60ae0a134c8b9dc1d6606e8c601e1a2698168729acc11c86601e960d98d4d499f84f9a58bdcdf36cc19c8c601e1e2698162b206b306b10cc236cc2cc1302b0a408ac2fb09c47c2677b0e1626d73058f2c21abc21b6e0f546f08eb409af8025f611a5f3ad4eab55cf005b584f47588fb28975008b4d80a9168bb32c650bf98feb935ff643008fce46df657a33355d1cdfa940288fb18932f8aa1b2eb62a7740388f0d134eab6f905bc3b907c2799c4d9c65a8a4f4c37206eb03358a72b356bbf85485fc0439985b239a4bada2b6f72e0b0b4c2d66b5622f684298b0eead0345c43c9408abb3555d01381fb3ebd5d5de08e0f136016e9876332afe6d358b45c36a5b50ef46504f0823548bcff1d6a0de85a09e1846a8161f41ad415d8aa09e1446a8163b49ac415d82a09e6c136a3fe62ded592f5e16f40c4db228ad03d5d17a08dd2936d1c17a99eada9593c44b2c550e3eb57747d84eb5890d5ad39d219f7543c04e0bcf0c23179fd28f44284fb78912160d2e67c437151c98d5d615813ac32628ff3d72b8f04291e37c6d78abdc1ab81c5be0180277663666539674aad994fb207c67d9c497cfbc55bca70a8126b93239743f54f267e526d105014fcdee8dd4f44708cfeec84e5df7270a0c4128cf09532fa4d5579dace1dc11e13c374c38adae64690de73484f3bc6c8c6fa7d72e1cebe4abcbf72398e78709a68baf2e3f80605e1026982ebeba8cbf0d7e619860baf8eaf24308e6456182e9e2abcb8f2098178709a68baf2e3f8a605e1226982ebebafc188279699860bad869f6388279599860baf88ee31308e6e56182e9e2abcb4f229857d8eece9dd086cb3d503d11a82bed8ff279534f621fcdcbc2ac1d6bdd699b237457d9ef096f14175e9630de670d5ca12d70f908dcd5d918aef7d7ff8b9fa14b97792e7653dc89a05e139eb140179fab5b11ca6b6da21caee44f98d708273409162053258cef6c79f51504f83a9b80fdf5296128acb3ad4fb93d8278bd4d88ed7f75c462d785b54928e720ac3774e4201996b35a8e5a5bee7b36427963c7a274bd4a1a8750ded491b5fb2431febd80f9eb5a594339ce16ca6508e5cde12b37cbecd6e985b6b09e89b0de129e9bddc5ce8b5a84f2d6f0f4049539d9d6bc0ec1bc2d4c305d1cbebd1ec1bc3d4c305dacd36f4030ef08134c17876f6f4430ef0c134c17876f6f4130ef0a134c17876f6f4530ef0e134c17876f6f4330ef09134c17876f6f4730ef0d134c17876fef4030ef0b134c179f80ee4330efb7097310c31f2b54df0873bd8bb81c617cc026467f5d8192844136b7015623800f7664a786fbdfbedd00a17c283ce3932e3e853721940f7764ae8cef0cb6982bad75066f82503e928d5adb1fea5d2c5e2fe95cc3bacf22988f86af677dacdddbddda88e4d108eb63e1e95977b1e4dc1aa17cdc26caccbe9aebe2f8cf8508ed1336d1067f23d2c565bdb741389f0c134eab0317d6701e80703e15269ca54ee29c8a703e1d9ec6bc8b5d1dc72094cfd844e92d7ad3cc1bed2bd9121159c70fb706ccdab4eb1c04ecd96ce43dbf0e9fd8e91aeccf2194cfd944395c731b7bd3fe5b197c6c7d771ec242a09d6d99882e08f0f3e17c22b238726eed89e87884f5059b58fda5748a59675a4a6702c2f7a24d7cbd187e71a5821f5ac5acbe2655680bd92084eca56c563a133a5da5f33442f972989ae2563fd26aad8a998270be12269ca54ee2ac4438d784a7b3cdc559443b2394af8629679638f905a8ed10ced7c284d3eaec4b6b380f44385f0f13ce522771ee8e70be119ee92fe39c6c22bd8b60be1926982e8ef9bc8760be1526982ece597f1fc17c3b4c305d9cb3fe0182f94e9860bad8dafc10c17c374c305d9cb3fe1182f95e9860ba3867fd6304f3fd30c17471cefa5a04f38330c17471cefa2708e6876182e9e240eea708e647d9184cf3bb88ebc5e155125e7a338c2c36e40b6d01be1901fe38ec805d9cc2752902bc361b5d22fe5a70e59c44b380d7c0bd842f397b03c359f9aaa3b5890a9b219c9f8467928c8b8dfb1508e5a73651820793f88e26793bbbfe49ad5c04eeb36cd4f0b1a5cc3adffcf63711cc753661e2cfb436b34304ba55b23474f975aa0508e0e73601962280fa8f0d4f104655fdcf7d6a782e4a822fb259202cef8405c23308e61fc234865462f3d9deda18d22484f3cb30e12c7512e74c84f3abf03cdd6fede4adfe1482f9c730c1747148ee7904f34f6182e9e290dc8b08e6d76182e9e290dc1a04f3cf6182e9e253fbab08e65fc204d3c521b9d710ccbf8609a68b4372af2398df8409a68b43726f20987f0b134c1787e4de4230ff1e26982e0ec9bd8d607e6b13661ea3be55be441e620d9eb5d5db2308de77d918bef07b8a3adff72e5e4028bfb78972708a9b3abe8fc81ac8f1b6401e8e40fe1016901673a435908721903f8605a4c5a76f6b208f40207fca4615e38d09758ef1a02882f7737846c85decb8588e50fe6213e54612650b5bcce06b55d484984a912be1cdb68542acc16e4959610bec4e08ec3f6c82f55e968677cc6be468a5f7b6b93564d6de2f1f8c90fd6a13591f2180876d67cbcf7cb9f829cebe08db3fb3511a56b374be3c65b19d68edd9652384f2b78e45e97ac5b22d42f9af8eaca3dd5f6cb419a1fcb74d94edfff2948bf382cf4358ff938d67197fdaeaacb6a677ad14aacec6dc206b1356472290ffb50932fe83c6b3f9812d6286a5e50f1a8fb0056e2002f7bb6d7090f3a6ca9bb94ecc4af71e066b1ccc717d1038582c2b6425e258bb158db559bf8722ac119b58fdcf2794b6a1ed4c9f4fa84218bbd8c48897195bce0fa861f074ed3abebd10beae36f1056b84bb385e3d0ba1ec6613e508163f16e37d85bc42744640be9c804076ae319a8711e21c9b88f3d1cdbe50d4dfd0cfd319be96321621ec6e1361f0e9d02e2e1e5a8a70e68609a7d50fc15ac33907e1ec11269ca54ee2dc0de1ec6913a7fa29057823a729ed0e0d17dfc3bd09a1ed6513adfa8e4e65275ce3fa6504b3b74d983dc5a57d58d65f19b506ac1702d6271bcdf6f406655d6cb6af4228fbda4499d833b954629dc6fcf71b5dee991c8140f6b309123aa400606c1cd17b1b1caee01eb601085b5e36fa814a3a653fd0be0863ff30b51c4b6c4e71b6d672dc15e11c10269ca54ee2dc13e1cc0f4f379b8befd88c472807daae66e227ae5430eb1f47b086ad1fc236c826b61e7c03af153495d7ceeee1ea81700dce46f947957eb0c6c55291e7a0b163b99bcc5a23671dc2b95e98aa93129b65a0b5ea64178473489870963a89733ac239341b7d39e93d4d6fe3645fce6708e6fad9789ef19fa713570b72f9697a538471836c6284459460ae4fe7c05888306e988dde1daae1edfacb485b2190051d5946aa0d228b8f83d672e5b508e646618269f105626b30ef4130878509a68b0df58311cc8dc304d3e2a4676b30eb11ccc230c1b4f812a735980d08e6f030c1b4f8c288359887209823c204d3e2124ad660b620989b8409a6c567716b302f4230370d134c8b63dbd6605e82606e162698169750b206f3320473f3f0ccb970710c67254239321b286393a73adbd4a99710ca68366ef1f44616ad0e535883b910c1dc224c305d5c40761182b9659860bab880ec620473549860baf8ba7c1d82b95536a645e39a7c2ee751cecdae1180fd70223f7c313f6d1983f76be1bb3a56aba3025b683f47684777ec4417bc3e86c55c6a6d7d8c8310ca31365126ae16d4b9f3e886026c6e8e22be6b8278b9786681922ef699a1661e3f85c1ccc95ae6ad2630460c95c159f37979b81fff09961a07f01f5d7c442c273699ad1003724d42af466837f0bd6059332b8612a60832479ecc1cd1480e636865a2a898f3ee41c2f33dfd78f8a2c34ae6ad8009de44c5bc27989bec1d19ff71a5688a8f2f45b5d37f3c9b62f3eea3c43cfca8f0b8426432c872cbf9f9550c3aa5c1fe1a061f1d8ba678bf3eaa99b7159b28acdb1b9bd51515effdc5063ee70a8aad22df4e171a5542a5491ee959d12262aada52a8929fdb246e105089269dae0cd930223e25542152a19a5fa756b0a8914c2af97f6f3d95a28df9611158f8c4bb3dc7b4dd9863e477731ae4961f9f5a13f25d72b562c85c117dc9536fec8e49e5919f7f9bc4db98d5e24686d8549ea6f68fbefbfa244995a242488bceec7f09a4bb4c76914d8744602db2393ce53df15a36931f5c238c827f39ff075461c0d843090200 serializedProgramBytesString: - serializedSignature: bf8632c267bd785c74820621b9e45a5ace788a949e025221176a85dbfb44994e402175f1eec95931b9da59da5915344fa13cb1cbfd4b45dde9e6b3281f7ea807 + serializedSignature: 22514f2d59117bbe02d2e63764dfc13738a5e0c9b0c17f8994c0e58eb33a753d2012391235016f5de1130877ffc7bebdd994c1b47349ef6ba84eafdbb28f2809 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/be04a46bb90226248804f355bd3844dd.asset b/Assets/SerializedUdonPrograms/be04a46bb90226248804f355bd3844dd.asset new file mode 100644 index 0000000..b485507 --- /dev/null +++ b/Assets/SerializedUdonPrograms/be04a46bb90226248804f355bd3844dd.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: be04a46bb90226248804f355bd3844dd + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec5d077c14c5f79fbdd07b2f0a12a40569a1830202094d5a80501410024920128a49a83650eca8a8d81bf6deb163efbd2b2a2a2af6aed8db7f6776e6f6ed66deddcdcdcdb1cbffe7eff363b37bbbdf79ef3b6fdeb43733911ec4fecfea6aff338d4c2639a43b994a0ac952b2c4fe2bc7be2eb6ffe7dc89e779a4ccbe2eb0ff2db07feb4a32e37c49ffeb64b5b0ff1d63df95930afbcbe564be7d2d61bf4f2145f6df63ec6f8bec3bfab4d8fe7f91fd9655c5fe682ac92513c904d2dc6a1a07621afba89c3fb3a85e560dfbdfe164b5fd6b11138a26d283fdd4dcfe678afd4b39fb6db12db4786f2699cdd45a6cff36dffea68c94da98f318628d2a1710f607712eddf9b507bf76b3ff5f93ff9dc1ffaec1ff86ef57e5d7ec04dfef09beab09fea60c6d8ef17d2fe71a19675fabd98f37827bfaed37fcbdde0e5e64610cacbefcda8f5ffb73cc331390bf3abf0e88a36f2c8c81002b11ce6af0eb01fcba3f97f7ac24d31fec70645d0cf02897e3813c0780b46b82dfe9b3411aba8b7c9ce0cbc7094e3e46cee7f9b793bf3f845f87f2eb811cdb7ea7491dfe6c18bff68923d770e73b9677c266ed343396f1fb1c7ecde5d7115cb63c2eebd9e05e571691a72339e6449ec626c973f13efdfd1c7e3f8a5f47fbf26b0c7fef5c7e7f5082f224627f42a6493c8df3c0bdcd6395b931b044be4ff6e5fb64feed4687c72af7faf401f627c51dcbf1ce4f408f71fcda955fa1bd77e1d709e099c8cb896e3e4f6c0fde13df89f7f39c7726095b8825cb647e9dc4af53dc3426957a7f8b4ce13a5e00ee6dceaabee2e36abf385c89b4a7fa74863c086e5479e80ade9fc6aff9fc3a1de8f67b02f21decbc5b7306bf3fc4d1b7da16e779b5ed3eb966c4d15bd85e3ef1da5ebe835bbd8e835bbd0f7f7fa6736f6511d7d70b1cfafd853edca93edca91c773df196c17872cee2d739fc3a8f5f0b5cfe261fc99f1dcaaf73799ad388d747893c98ed7edb4c709f286fb1f2683ef1d6b39cbbc8f43898e2fb427ead99e0fbe29d220d998bf9b5568269d6e2d7051a69d6766ca1e6469f2d1c120773a1c36fcd2640061ba7562b7e5fc2af87f1eb22ceff213e3b3824013b88274ba9f35d8dcd200fa82cb7f1fbc5fcbac42b8bdde2f4ca7451ea648acce09817837b7a3d983fbf04dc53597f70d2a92dec4ed4f987fb642e3327b3dd0a67dfd5bd09d84622dfc5b2af0a47bfdaaf70fd76f1e7cb7db215bb72d7d809be157224521e56722e66f9389ee5c8504770bbcaf7dea5e09e5e67bae9b1bfe9b7c2b67a81e7f4dbcbc03dfd7d4582b2ae21956d96e21c0ad23ed449bb2ef7ff75b3f9bb4790ca654ff62dbdce06cf66733ce1a38f2495eb31f11ed56d33b8a7bfaf4e50b7a324f2d17477c4f8f668e2f53f85c01e44593886cb338778cb96a88f06badf58a28db2d6b96f206459c7bf990b7899ebc857ef19feceb1fc7a0291d7b3eb010fbc3c92e3ddb45b0b798fc3d3aa5f85bf73a24fef0a17a7f6bdceb5bef06327116f99f1bf4b9f9dccafa7f1abf0eb67b8ef4e15696fe0d7d3b96c05c4e39bc9a9e039bdcee3bf5f0eeee97ba7b8d8cd848d8abeaa9055969fa27f287497f980587676b6f3ee9427f8fd2687db0683789e17fa64584762dbef3e5caff9c46bfff339ee268ebb83bf2ffa3abc6d1f2974f12322edf35c9d8689bc3817e0d6047f2722632c3e2e72d289f68744ff99fbc1683b8dfedd8da72bda2bb0ed7621f88ddecfe5d70b88a7ce89290bf7a9a46e1c7dba83f7e8f5320dfd63fd568d5fafe0ba15136f1fb1d8c9e346eb63605de9f0d442d8db55ce378d459ff86ae7f786c23eae013ad134443b8dbe23fa27d7f2df1602bd453faa043c1365ee306033dcef93eb7cf97385eff7eb0186ecf71b800cb2df6fe4cfb9fe8d7fe0cf6ff2e972814fd612e2f117e4e6caba464a7c695fa59097b7f06f17f9f27291932f4df26260dd2acfcba673f9fd6dbebcbcdd9797a592bcbc83ffb618e4db81fcd91249fe2e053c88faea4e242fc5ef5b00aeecf7bb800cb2dfeff6e665d3adfcf93d485e42f9615ede5b59d7c8125fda57279097f7f3eb7dfc2a6bbf3e405c3f4e71af490057e8754a0cdc5e3edc6b13c07d885f1f8c81fb30226f32e9095b17635bcb88d7d6e9bd6db7cd07c5c07a84486dbd85186f7a94786dfd31e2b5f5c349655b7f9cff56e6e63fe1edc44839a96ceb15eeb388e8d33c01de81b62a7e7f12e0ca7e7f0ac820fbfd69e2b1f516c24f3e43e4b60ee587b6fe6c655dd93b306d811d2b2f9ff3f12cf85d4ebcfd95e54efeb414f289f6d1552476ddf8bc837fd41bfcfe058eb782e35f0feee975a52fdd953c5dde2fd84bb407eaf0e7bcfdb39718377bd1b93fba01bf7f89bfb7d5f7decbfc3da1f7ab3efe5ff3d98ae867405d5e01bf41ddd6106f9be475fefc0890576bc0339857c312e455c8f0a68fbf551cef06704fdf7bdb95ff18a1e35bfc7aa9fb5b43d1ae17f95b07c8b14d6e2b4c569067ca6d24a1f33b717456f1494712af4f3ad2b183bd5f8981f53e7f67578c773ee457c1c1071cff28e2ed871cc57fff88df1fedfb5df42d1f74b96f7612904360d36f6e4c40ff8ff9f5138e7f0cfff626706febd6ea7727add6c4b9b612f5c34e1fcea7ae5ceb36f9be792101794cfcc6dbc191b5c4eb23d63abab57e84786df7b838f6f419bf7eceafc773bc75c43b1eb88eb8be181bc78a97560cbd22c711efd801efa3932ff8fdb1fc77d1563ddef73e979b7cc9efd7fbde3fd1f7bee8df7fc5ef4ff0be4fbe0638f4fe1b57b7881887f8163c3b813ffbcee52793cf07464ef2a64dbe27defea0e8f39dccdfbb057c073910bfdfcaef4ff1e9742abfbf0ddcd3eb061fae687b7de9fb5de09ee69357f42b7ee6d79f5c1dd77d03be017c921fbd98316d5a609ccebfb91ddcdb369db9360686f8f60c7eddc831ee00f714838fd964c628b791337dfc9d019ed3eb59fcf73bc1bd8ddd3633867cdff277cff6e97636ff765602dff27e6ce41c9f6ee7700cee9bdac66aeb087ffe8b2f0f85cd523c302612cdd7f3407ed2fb73b90c5bc0bd2dc3be43f97bbf12b96d6ff27d7f97f7fb76a2cdfb1bbffeee93ed7ce21d03fb935fffc26d92fced93fd02f79da87c7ff8e4136d4e21f7853cddbb811ce239bd5e44bc759a68effcc3ef2ff6fd2eca942c0620561969caafff92a47d2cf90f602532f6d3ccb9d23f934dd3b20056226936e7df4534d2cc005889a4d9827f574523cdaa002b81342d1e0fc4e2b3ec6fdb89f9d07ff973de96b344fd42eb796a47f7807b91a7dc8edaf1768ec5e71faddab1b1239772cc7bc13d821953173e4668d5e7d77aeef77d781bdde27d11ab11bf3674dfe9cbc704acc6fcca6ddd6a02dee1f12a16b7c9c8655cf6fbc0bdc87bfe4d7b5ea62d6e5384a66de771472e536433c7b8df79bfe3175e19d9ef35c1df229f397e07ee4358689f7ddf8d8f6b592d9d743a099fc6db6216ec4748f8b4f6e2d7bd63e8cfe771add638d7a23d162fbd98658273d599f7932297134fdd68edc3ed633bf85df80a7a7f057fff01706fe365f13906ab0dbf66e2ba4a396acbf1ae017947efaff6da83b52fb7813cf0bbf02bf4fe5afefe56704fafd7f1e70f8274c4737abd9e78cbccf5885dd8d7cec266da2132b64f52c66be4324a6db3833cffa2f965b9dfb41779d1915f3bf3e77c3cc8e2f3536cde8d7fd34d94dd4e3ccf0ef0e5ff43defceff2b7ef7d31367425f1b60baef4bdbf9ff7bb88e86f3fecd847848f4f5b3c3609f521f6b52bcf4bab6b1c1b84eff2f680c5e35cadeeeebb5d795bc5e2736c564fdca62d3ed688965f98666f12df1ff451c0e3f1ab56bf1878fd15f0f8bcab7500ff9dcfa3593c4ed5e2f1a1161f038ddc40bcb1117c7c46d6a7b406c791833e1b12471f28ab182ff795c1689993d41b31ebbca1c00e288e988b7904dcd3df25f55c4c5ceebb4947e2fa6e11a7d7093c13754a4b92bc8fe7e53c720bf18e25887ee2cdc43bdf4aefed32d9bd8aa34ff7f6402e7a1de9fbee3c704faf37b9b2b2bf29168f7dec2eeaeae15eccc8ad2e7f83eb8067f4dd1c80057d0dc7ce16f5a1f081628ee551700fe5becd27f76d0e4e0f1ea3102dd7301f64fccaf2ab83f7b7c83d3cadc724bfd3e78f83f7e8f50efefc09704f6513fe918f355823f895eb64f178dfc8bdc45bf6445c82a41f12f59d71f48ccab685633f09eefd362c6ced4e9fadddc9f36a862383c8334bf8a331727dac837c7add4d52a69735d66b6fc2cee2d9494fd1deebc07f7f4ad16e448c9eb0fddb39ced3e01edac225e09ea67fb123772f510f7179acf15e0ea3f80a36e12fe3ec9e7e2bca6da236c375b044fc6f47e29d2312bf8bb8f62b7dcf455b49d8dc335e9b63f65413fc5dc559dac1d26a0bf4ace9c39d04de91c93319c863f3d25bb463a7f0eb54effbb2d85b2bdf970f73d5f341d40f91bb243a4c00bf011d52957731eb2d61e3d392c788d669f162816361b4e4181a6b4d585b436025327e20fa6d1a71d156138095489aa24d78b0469a0d015622631674ac12b6f3c4dcb6a8d3689b0a8e8fd27bbbfcf513f38d227fe3c4ad5a7cbed7e2b19bd61cf77dab805fe79268d93876077fc6e332fb3da1981e8f97b3e6f32b8f118bdc4fbc7320222622c61c48bcb462f25bec60f615fd2c11ff297cd103c4dba77ec0d17780f00d3c2ec812e33d32ff51c2afb1dad587c9f3d92a8ac3e322e43b3e2e14d9ea937f2b979fcf7388d8506b710cd99638f79df83cecc02f7c69f16f230ffad27a90a7c5e73eada57170383f91877c380f39380385cd897a40c436f86d43605705dff0d854abdcc717d66f7a9878eb878791b4e8371509e42f8ff18ed56f8aca2cfa972b92b38998f6be4a8e19f5278ff8b87fc4e17e7f5ee75babe3700fcbe5ca38b6bb2601de8e88c31bc5e66398914789b78df6a823fb01e77bdfb3f81cb925e6eaaff0fd2ee6cc793b28ead3e2e9c363b2adb5fcba8ecbf118f1fa34d1ffd0e02e661e1f47a46d69ebd8e431453b39da167a9cebf42cb8b7b91e24ea016e4f969813e6f13e837ef0e2459ee0bf3f0feec57789d4c9fb021d93e5eb788095489aad1d5d078b32c1e7a12d3ebf1d79d2c589f0fe9934f639964c27f3ef9f225e9b7eca497b4813076b8828bfc26e4e8aad83c5e7a72d1eef6e0959447e3cedca19edfbf3be9075ba8b1db529104b7f8228b3a7015e0596883f157ee61920a778f61cc03fd327c373de7423cf136f7ff0798797a18ff8f4e1df455e20de7edd0b3e9e5fe4bfbf00ee6dbc0379fcd781eb9deb50ee4ba2e5e025a0873fcd9738e68bfc9b5338265fff3394c748593cf6dfe2fec1dae4c37b569227cfa6304f847f8b633b116eefd13ef933c4d3a7117a477f7f0efc4e6d95c7fa587cad80c563ff2d31df9d267da37a081f256245925ca36f8975f0a20dd8c7c9e7613cfe61d80ee229a36ccd43ac322ae6c3392fd645ae0ed3c4d8d3854e1ac35b39cf878b7e2e1f8fb0be514b93ece7cd3b760ff29674e6e989feab981b1575eb4109a6138b473e176a8958d0975d2cf677327e74b3f3ee68316e7eb9a3474ebef33c67218e61897641fb1869f3588a9cab381eafdf2cde76b0c41c091ff38e8e87bc42bced4b111f286b13c4d28fcf43456d5956be637d7fa3f3ae7ffd766e85f33c77077f4fcc73f371654b8c57bf4dbc6d9bb763e8c16dd1ba36b68d582286f47590ffaf3b728d1079c179b4ae07bfc3181911fbfa1ac0788d63acf27dfb06f1c609bd01de8763f13c3637f22ac07c9563bee0c37c937ffb12b817ef434cfefd28ae9725c6d9c5f8128f3b928e6d89985931f63d9778eb1bf1bb18c7bd53febb25c68edb22dfdf027483bfdfe57d2f6a0b2ffb6c41d627be1ea429fc391f4fb6c4fcd1bdee777458953dbb27411b82f85496b788372ef52dce3bcf07ebbe14a6cdc72c2cde871265a592cd0abeee06f79a652766bb358b635c9e3c86b5156025327e25facda24db08d78db6ddb9c7c1823e2381ee557de47b21ef7e2443e245ebf29e2a26371f6606c592d3187f50ef1b6b5dfe1b2ad7570c788322efa284fa62e6d56c7089ff21ef1c60dbce7e3e05de26d777de07b9fc7869376fcfe7d1fe73cdefc20316ef114a95c478af76a82bfe9753b78b69de3dc0be482e96e27de3942f1bee8038a76671c8e3cb8c2573cedc3d8eae6c168e11f45ff4ccc3773feac47b85ce7aac911d3ce9f937068eb3a56d4eb9c130bb46dc78af6f0f3bedfe2a525f8dee1b3d71d4e9ae3b21dfc71a24e17b6784f1c7c7f1fff23e2ede37fc4f1b98f8cb6155b114f1f7fbce0ff05e269c347dbf71ff3f7c5b8600e784eaf9ff8ece61327dd28ee8b5edc4a73859f126ff9f8945f3f037242793ee3f7621ef855dff356c0ee5ef27dbbd3cdcf685f65a7572e4bcc35897a93d78fd62bc9e911b30f172f8f63d9d5eb44da8f99b0d6793e41e4bbb0a757e3a495609f6282180716ed305f9f226e3a32bfcadb5b44ccc3827548278b760f5f8714f9dcc58f883519220fbe205edff9852373de321fbe28335f126f99f9d2797fa2f00313c1f39abe77fef66245f775b265cee331ebd636f01bbd7f177023fa00ef816722afb6bb58a78871e4777ce9605cbe8fa729f8d24a73bc179f61520e5fc36542f73bfbca975f5f39dc4ecaf3bec7be4bc0d7123ed71cf99ae35e00ee29ae680f25ba075a15fe1d8fe1b43e20de3217ab7c8ab6ce747ebfc3e5f734d1b6fb885f852f85eb65f8da06743c81be03d6dc486529e0ef7d47bc75cf778e5e93f93af8c9621ce613fedddc3836f6a90fff7b8eff3ab8a7bf4bf6eeb0b89fb6bef46278d65b887d3d7e70bf8fae59e06b15ac2f009fc25e7782efe8bdf00f7389a71daaec6bbf72d2f1af43ce1775a5184fd91487b7af1d1cffbad3fc7c459c6f38ce0e7eff9d732fd6a55adc76c4ba548be74744ac39e23c589ca708e03ef2237846dff5d523f164933e13eb847ef6d9e1cf8efe53fb701b117e53d8e1e9b1d312ef457681f7445abfb8cfa2fefe57a0e72fe019bdfec6657b03dcdbb24dbbd787fb3b7fef4d9036bdfec19fbf05ee81af89fc49bce39602ef6f20d39f3c4d3ebf6efde84be32fe2ae95a1fe408c8d7c027eaf09e414cf0486f816a4cfaef4f9db3c0f9679d38c970731cb8de8f7fde3cbf77f1c3da77775d29c21fa6a3ff1abd0f73fe26d7bf23cb3f83a3b9a1c6ca3b07bf11dbdfe4bbc6dd37f9d7467d4f0be27c6543222fcfd6de09e5e33f8f377bcf26564f8e47ccdfbdc027629be89ea20d645bde87d1e1dfff9c5ab5bacfe2bfaedbb71d216fd325e3e58bd122bafdbfa787d09dcdbbc1e22ea115ea62c2e5f46156f99b1f81a36eb4ef03bbd56255eff14cf0efe48cc0e322caf1db07b2a6f83f0d901e388fe2e1ba74b931d88720dc741ac3f13ccb3bff4f26ce613def7c29067515e65e31eba79d6c6e165a118cbf8dbfb5d460d241ff8facb8c9abe7ca809bea3d75abe7ca8e5a4377b9cf7bd683ed4f6e503df8b31a30e920f757c72bee67d9e521feafb3ea39ac2f792389c0cb047986a3e46d37e3ab9effd769021d6188a7ca84e3cb186ecdeceb74345dfb6037f5e8fbff728b8a7bf1fe0c37900dc0bf985eeff7a65cc6888d89c28db8d7c36d7087c47af8d7d36d7d8917dce23def7a2ba36f1d91c8f15cd688ad85c539f9caf799f07c6e664dfd7d7b459b0ce58d96645da49da6cca6d5eacbf1676d0c067ab0d1cbb2910fd3661f3cd7d362fd6bf1e100347e82feac54cfe0cc44067f075adf3f8fa9f792d80deb277e915ac87667fd3ef73f9f73340bad8bb9b0137f479472efb7b3e9dc5f3ed1c9b7f47ab4976b5f87b20be3a5a5ef626d2f21c1175ac1853de04eec577f4da9a78cb338fc99abfd1fb5e341ff721def2ccf7b7cc6843e4e5b98d4fced7bccf53dafe12b1ec3371cc7497f1be7c6cc4e2fbe06664923da78c673ab65224f6a812e3cc71daa81171e57d8b086f3747fb22677bd3cf688bd8b828bbfbfaec605ff01dbdb6f3d9783b47eee20aef7b511b6fefb3713e7693d101b1f10e3e395ff33e4fa98d73cea27dcd00d878b27ddda0d973c27d6de1437dedf7681d55d3fdbe529b5db4d9ce03f7769e1e75be0f5b7cd7c92b63065f0f156dfb5f02ee695f63a793270bf938e451cbbcdf89755651ddaf40b815ba256b433535bfefa4f77d742e35d172d5c98b13ed2bf97c8e58cfc2daf4f0fbbae03b7a15ed9487c0bd9d3f877de17d2fea73445b7f1bb8a7d7787d3321a742dfecff5bdefad763aafa89687ac9faa94e9adfd7d4fcbe86def77b9afed1b2cee73233b2f8efcf807b7a6dec9621d1cf5d31ce9b06d69f8e087f1faf3fdd8278fd04ef3b2c6de07d2f0cfd693106cdda28357dcfaa022e05ff93c0fbffab8bf0efdb6aca5f55edfb4a756133c4c6457e36f77ddf1c7c47af2d7d36cefbe287eff2be17b571d157dc06eee9355e1f53c8a9d0c7fcff6e5baab6e1d94b20d6fb982f16e9fdaf2eda3dfcb5d5fcfeff39ff9e3e23e85f45f8be85913adeefd0f681e82f24d93e5899ed7d2f0ced0351afc03363fe5ffb63b00685c54159deb6d3ffcaa6daf7fef19c88e88bfb6318fce38b58fb46f4c1936cdfac79c3fbdeee68df68c730fcaf8c261dc3f1bff2e8fd5e8c698aef3df10d74cc92c7d6253a8f209d5be0f371ec2c0fc56f333a73792e06f7f42ae2ed2f01f776f93e9aefff77b498ff18c6af2fc54e5be046441fbf0bc7bf19dcd3df1b023cfa7bacfd8c65e974f5e9d3d59b6e44d4f9b1f6b9e76be922a25dd29d7ff33eb8a7d76eaece11beff47460ff75906df8334239b787c6d74ccbc2778b72778975ec519c4e7817b9bff75793e6cf15d6f9fddf1bd4823a22dd487ffced7778918d48cbe40863ee019bdf6e3df7c08ee6d19d6e63b36b02e0b49ab3fffee19700fd31cc07fdf01ee29ee76effb1903f97b1f817bc131c4f9d88be3972b637fa023dfab879d2313cb5e39afd172db9378caed31bebd1ce2e1c58a4b8df0766784d79984c7b36788354567837bfa7ba2ebbc79fc6a44d4dd837cf922f6fff83179d985df8ac4db473d96fe7b3bbaf411b15bfc4ceb48127ba5b27dc6a86e8389d77f0d766ce3b8064e5ac7897570622d5626bfb6e5ef8ff2721fb5ddd1c096c45e9dadc1b3d1fcd93eeeb3089f9b8db471f3ed7431f7c5712d70e66c2cbd227c2d60c6105f5ef2bd7533401b2683efa19b31d4c7c550878bf57cff87e3f93e5e113ee71b11fb4d7604f2ee92cb1111f3c35720720ef3c929781c0ee4e47bc8668cf0c93982cbf9844f4e5ebe239dbdf2063ecf12e0c2e267f066e48067c2a6732b7316d90f7c07f221fa7b178021fb5dd49757fa9e8bfa65a44f66e10f4700594624c6474c3fc27123ddd53122628f6fb14e07d4ab165f579071909b8f677705cfe8fba2ce1dc37515eb3d443d3d16e0f1f5b619e3809ce2bdf18093f100935e27106f7d3ec1b1ed932bbcb247bf13f3774f837b7acd23de3292e7e09cf4069015f0c9ee615f679c4f8f49fcf707c03dc51be07075f23844bec95ef9a2bf8ff3fd2efa1bc2d6a7002efd9853bcdf08aca82ee388a70e8eca360ca489614f9663c7e341a411c501f92e9e45e51bef95efc485de3c61fb0aa9d6676ffb74cce7693c0beea99ce2ec1cb18e53b447e8fac9263e2cb19f45ac73e564b2bceb9365aa4f96a98e2ca788b691d87b40ec8db03306b6880f1465699aafbc4ce3d8bb7c7a2682cde5ce98eed53b63ba37ed8c193e1b98e1a4b9419c37c3f72038f5079fac302e49a435d397d66cf09c5e67f9f49be5c58ee288b334457fe053eff3a8ed89b33db9ed9d3ad7976771ce298c7270b0974f549f99beef843e7779f5d970be0fe7108063cbb9e1261f0ed88f55f0bd81d7ff1bfc321decc37ccdfb3c9ece31eb231947228ee5509edeede0de96f334b12f1eaf3faccf63a72ff022a2ff24fa5fa22eff0cdcd3eb5c5f1eccf5d96101fffd2c706fcb75fa2c1fce3c1f8e387f5ed8d27ce219e3887e371fe8457fffdcc997d3c59eaa5f9084f496d6e1bccf19e17b7546c419f27c7fcf8c429ee6dde0dee2ed33fafcba18d81df93745fcddebc13dbd16136f9d5aecf076c62047bf33c43a5ede2f8d0cf0e1961279bb139c4b9d510af4a9097eb7126f7746d78d7688cd6f44f493857e0bb87c37807bfade016e1a678bfe10ef1f672cf471b2d0e164231fff3953f02ff6bc15fd8f52a0cb813e390ef3c97118d741b22e3b32d8cb9b58839db1846388357932ae457acbc0b32589f19f21e6b674f81f9a98de91e16e1a9b844d097d4a804c25fc2ace67bf04dcdb7c9d55c5fb5e5cf972f835579267237cb22ff6c9be78cfcc33294f3d7df21e4ebced9dc31dfecf1663a1626d75b62bc7d91bbd5811ff5860a2b288fe9148438c4d8a73b3df07f7f4f7d1ae0ce76ee6cf44df178c87259cfe705fba15be74793f26039c591e117d9fe520aff879df19e22c6dff9828d8bb98fd2ddea557714ef479e0dee6ffdc421fb6f86e35f1f6a1f8fed3d1714a71e6b57f4cf40820c31af08c5ec5becf1f827b5b86731672ae07216989b3969f01f7304db16ff40e704f717ff0be9f21ce48fe08dc0b8e21cec75e1cbf5c196b818e6b89eb7b628d89725ea3ed0471ee396f736e126db96189e149ed8cf7c933d6013be2e33319600fea0c7ea66fc671881dad07efae07efd2ebf13e3b3adee1e8fc677cd8e2bb137c767402978bf7eb324e44ece82420c389e019bd9eecb3a3931d19cebbcde1f2fccd485ae20ce167c03d4c539c29bc03dc570178fcfd8c0d40b60d80737a15e7097f01ee691aa2af2ccefdbd13dc57a92c73c619200db1bfc4a83836b6de6763ebbd3676ae18871c96189ef759558b9d89379a149102b28cf4600bc6e828e2343299e4d86dffa9a4902c254becbf72eceb62fb7fce9d782ebeec4a32e37cc3d67fb3d56cf67f9d58b21564b5fd699173bee514fba6dc7e5464bf4f31c6d8df5490dea417c35e6cff36dfc62923a5a484cc232dd9d99022f51cf66f81fd460903fd32a35212f7554a820a576affafc8feacc2fe900a596e3f1f653f5962ffbfcc7e36dfbe1f675fe95773494f32d3fe9f17659a9d6c29596edfe5dbff2e6378736db12bbf194fa5d9f653ff37936dcc254cbac5f61341e832fbbe94493885fdbb82495ac4a41f633fabb09f516d1690e1f675154badb2ee65f6dfb234f339657219672b3db7d8f1b0229b726d6da8f43d982dfe2f4776478e50eaabd1f241ffabd283b5544fa99413ffe3d071323410660cc7e8c928b33ccf7a911e2c5666722506d575acaca1dcbe1dbefb913e3175913343b37b6fa6819bc339a7edfaf9f369ed73aa7a55eb4d7a54a3aab58aa35a2c62295e163bf1584585aa55ab645341fdf45b32fad9760753d248bff35e097b4f3d03aab1cacf9b016ce97fbeedd5f240e53995095fca44f32b43a197304f28fe2ab2bf1a61ab53c4de2b477f196e3fa5220db38529b305584d2ae57a3615b13acbb8cad5723ce5b1ac8bc8b28ecd6ee7ef969233338ed794675e8da8166ee6f5606dad16314c1c4b8b35c2aaf29698288457fe37b4b8cbceaf9b1d7d727fabb8cd9535df7e766ed34bdb4dadb7f5ae894bf2cffc6a6755797ed562f9958c14588e65c872ac56ba0b5bfcda25567ed58eeae5e617fd4fce611dc4e6e3c980315845c660ed74db3cfd6d294329b0df55e79086a877f13b2c3981f510238c2f024661550985d994c2fa12a948d59a3ea9a84008723559e6d4d93d557972c64de3769afb28a88a1a77c39835b1aa695797b1c71633cc35ca9ee8614eb1bb1263eddf0aecf78b5873953ecfb311699546f186b114dc5ea9f78bd8ccd211bd6e7e66a5ac3666acb607fd655dc930c66b4818cfa6f6da446206ccc7f90b4343bc30d4c48a5953dd62560b436ea68b5c1b436eae8b5c07436ea18b5c57566cd8fa8259692936eec08cf86bb8fded425b9915acb7bddcfe5e369013bbb8b44cb8b8ecc58a4b26910d2fa9498415937ab2bca30ff79609e9cfbabdf0acab8f01b7d2046e80595b6b5d6b6b8889bc8fa6c88d3091dbe88adc1813395353e42618705b4de0a6b222cd8c25bd7d52a74b4671d45b127486bd4dc2cde47604eb1ac696012bb2cd6459437d30ad56756bb6e6b2ec6990eeecc9659e6c5e92d943276adb4a78c0b3a8239245f1e4c0b2a8852c8ba89177c22cc79f45edf02c6a89e57f560af27f2f0cbc730ac0f7c668d92f05b4b492592e73e98b8c5aee54fb9933893282fd5ac246de5dcca5ec9ea6264614627d41ed77bc7d2db425a4b2c4b6f42e519dc1f80aab6d6840b359c978d8b7f35f756498a51b2b58e685c10a626b99c5d19a9706e969d5bcfb60c83d7491db60c8d9bac89918724f5de4b63264dae9a541a795866f69df6ca29d9b93ed4725ac17575839b5ea786afb624eaa770a9c543b0cbc4f0ac0dbcbc029af347851a759d541e6fd58eb70a651efe7edc6f766756681fd7601f84bcc3efabbf0bde378b77e32efc61aa66d887f004135e5fe8978af01cc7be9278679a78e98350cd4b4864e980def9f021bcec2bcc801ba5ea433863c4817793f8c90c12920a48b04bc07ebe7a4b3cd2c66aa929ba91922296bd974fe9046e0527fcd261391723294c89bcff144c2ca4557596e51428761520ef74ae9cfbca178e675c32c23270596d15d064e87f872a32fbbe0ffd9ff5502af8383f7c0241f2191fcd7311125c9b3b1a23852b728f6c49047e922f7929543d65b5e67b41c261afa35ca568ba636d136fdc38813b353b9f92b627f26dbd7622645119f978e1f3216bb8c8f96949e1eacc33f82241ec0665e0b1af41b618ee520e6586829c23a033269d43b0f72b73696a51e2c6e3097d91bf334e3249e669bcc8dc5f0347db0223b5eb7c8f69521d3223b41e6e9a9add255acb5f6927af9b1783afd24e9f460a3346b76ab6b706613295e318bc674f026d8d70ab29299ea22108c926fbf5366a751e4696526e70ce82a9cd6fe8e1971fe93178749ac380c49a03898d40a2b00fd659644fb90747aba520fb405fb21cf469ec38ae1e1ec3165c9c9dd12f66a0959c3daf64e60a54a0f75804c9abac439d0336ecbbe310e3c1003ced704de1f2be35375cbf80132e43a0c4fbf853508137bbaaed883318f3a43e251ffb6d43cea100cfc6009f8d6881af88158513824111b8961d54331e099b2324687247258044ba6fdffa5f617b40750c04a7f26ab0c5d6f906997f512fb2f5a617705ef2fb5df70029955e41c2693931ac52c5da3188ee5db6c49beed52ccb71c0cfc5009f8e80c35f05c2cefe6c8f2ae2721d180c885bc6ef37ac34c36da91c956112ce7637834e7ca59be669223ec2ec451f6b5c27e3b93d503a5ec37fa37cd69ea6b55f2740426ff5c99fcb580fc794042951447627eab40e2b72c45bf354a064e1b3ef308d2f0a14ba7d51b3ea365e950a50b65b4d1e1f21176f385b65c97b3f7a73003288ab6950b5354418e91c8d583cd6c2d21bbb341467b0b74cd4539fbdb6da2d0b4dd285e9d8617ade3fc0d2ff19fbce14517936759bd48fc86572aa4c71a5807614e7581c4a95a2a4e752c5616166265a124a9b2300ef3af8749fc6b765535ff3a5e064ec7ace8ec63dc4a77280e3c01032ed5049e8865e86249862ad5927918d14b2444e72b123d49e639d8b4f5b2ddea3970bf38996153ffa9df6da38bd733fc63386c5ebd4f02fe21553276b1a86ba7efcfe7cc95d32ab126abbf9c31df1c163a41c9678e4deed99631cf964ec931ef361933d9c32526bb49d164a7c8c0a9c9964972337b6f56fc9409f6cbb30c97275f568458fc44d96e2d42b90c211dc5a85c568c58b040bf048c319572b661b3e1e5acaa2ee455b5d3206863d5662652c4982d61d539fcbd8b55975585e5764bb58c214e61ad6dba4c690173d9f24257c10a5dbaf5c40ade54ace02d9714bc01d5d40ade340c7c85047c9922f87419382d452b65a5ba35cb518379ed97bc02977c0656f3afd2adf90fc6085f2d21fc6245c20fc1c45ea32bf64c4cec232462b7aaae26f62c0cfc4809f8378ae0b365e0b4eea0bb7de88cf51c8a01d3ed402a751cdb33ae9c1eff7cdf98cf3c520446720ad993d5f6bfa5f6b3f90c22932d9816eb3d54a49c83717b8c84dbdb14b99d8b51b05693db02193035cf758900c788fb982703a63da96309d293a21b9aa8f7a4e663b4af97d03eb4861aed8558313f5eb7981761c827e8221763c827ea222fc0904fd2455e2843a69978b2241337d754cbc4120cfc1409f82e45f0c3b08279aacc3775203470c46d473b0321ee0865819d7b15ccf364daf5aed3ce29f48c74d2d1cb123efca552ce1761726e90c9e9eccf4257b5d1babd808d86d31427da382aa99662d49f26a1be6b2d35ea1763e0a74bc04f52045f82f175868caf1671f2950e599681a73deda72a3c2ec5a4d9289386debaf9a692ce328cd23325940eaaad46e9e1981267c994a0a1e30e7dfbdb944d6043f7057c6f9915ac1a57a7b10c93e06c9904d4b38d8b360cf2926c169463946e92505aa1486905e691cfd1f5c8cb31b1cf95394d45b15760629fa72bf64a19326d759c4f9056c705249956c72a2c9d0bb1742e4a2a9dd5185317eb32b506cbe04b2419bca38e5a061f81815f2a016f55570dfc480cfc320978a122f85118f86609f85645f0a331f0cb25e055eaa9811f83815f21011fa008be1603bf52023e5a117c1d66e457e91af9b198d8574bc4dea228f67198d8d7e88abd5e82dc83adf2496714b73f8e512d8afb5a92e8ca72bad9b52c643b5efad830def1b27ca135f4f5329114aaf213306bba41624deb15ade9440cfc4609f8df8ae02761e03749c0b3eaab819f8c81df2c01bf4d11fc142c336fd1cccc5331607a965aa5b66057669d4b5919a3cdf922b66dda12f6d712b67565110b412960b6ef0e38891014ba0f5f26b7de326ed3a5b6b577b79faa48bd0193fa3699d474a0970e9cbbed66a72be974436411c299a4136f75775292eb34cc066e97d840bea20d9c8e297d87a60d9c21f3b36ccd6389513f8b4584e7b34174ba6f6631b394c5295ea37b67c23e790bf3c974418a395931ffbd5196ddb46d7d1741dad6f418855a5464a5b6f59998cdde23b1d937146df62c0cfc5e09f8ef8ae06763e0f749c0db375003df2403a7cd9afb8966b3e61c4cec072462bfa028f6b998d85b75c53e4f864cdf7f3011f7136388fc7c193035f48730437f9824d389bc00f39f8f68facf0b31e04709120839333a24e68cdecc56acff2ec24ce8318909f569a866421763e08f4bc04b15c12fc132fb092cb39f4c2ab32fc5acf5294d6bbd0c037e5a1378336645cf689ae7e518f0b39ac057c88069de3f472a87e352009570dc2b312b7c5e62859b1aa959e1553270ea25e969cb5a5ef26a4cec1725626f5114fb1a0cfc2509f83645f06bb192f93256325f49aa645e8799e3ab44e22de9e60273ecffd189653a3dbd80e4b116140d595fc57e59c67a1bb40daf62bbd76352bc2693a271548a6cfbdfc5c499de70023d9297e1064c86d7653234e232f4b6ff3f9fb5a7e937abec7f9397e0464c82376412d40079411794d116af4a6a3761e6fba6c47caf6aac66be3763e6fb1666be6f2765beb7604e6f9bc4e965283abd5b3186de913034b7891a43b761e0ef4ac0d72a82df8e81bf27cb5b45f03bb0bcdd8ee5edfb49e5ed9d5871f820966bea9562d7b40593e2c3d8aea9670a5dd35d980c3b62b9a63e29744d7763127c14cf354d67e9a92d7eb90733df8f25e6bbaca99af9de8b99ef2798f9ee4cca7cefc328fb94e835f4eec7d8f94cc2cedf8aec3c80b1f339c6ce1749b1b31553e24b8912f9cdd4947810a3fe2b4dea1fc2a4fe5a22f54d8a523f8c51ff0d46fdb74951ff08a6c4771225c6355753e2510cfc7b0978a922f86318f80f12f08d8ae08f63f4ff88d1ff5352f43f214b87dadccf2446b5d63bc5d5da939814bb6452b8d55aaf14566b4f6132fc229341546b7d5358ad3d8d49f0ab4c829ac4add646b03993a58a7137cf6006fc9bc48067b55033e0673103fe1d33e03f9232e0e73025fe9428f186a212cf63e07f49c0fbb454037f01cb6e7ab4bb4ebdf02226f53f12a9af5294fa2519381d1ef997680e8fbc8c89fd9f44ec1714c57e05239bae05af54b668445aecc8ba7cfbd5652cf66d01f33b652cf0d459e355c8e62cf388732488b38cbec07e5ac816d82f64f7c26f1690797c46b1279b51144bf057136777f84c36a3ef9c0f97c966930af9c60c8bd89372f656114096cf5996f0b95738cba91a20fb2a964196553983b62b66d06b187844024ec74a55c05fc79c51868538a32a5632cee80d4c89aa32861495781303af26017f4411fc2d19382dacd52dbda1ebb725c03d32c96e9b40aebcc1576a27906bc8f8924e20d7b4e24d20ebcb8a4d206fc36ca996acb4edad664bef6055446d4bb38a781743aea38bfc1e563fd44dc4fe6338cded12e01e6de9c3e2dd62ff3a5befc5b6fc7a095b7e7d66f9fbc5b07cbd0d02e539f13e663c0d748de703cc781a6a1acf8758316d2429a6335aa915d31d98d48d654d226743d772bec258beda26933597321503a33ec2e4682293836edda386ff3186df5433773ec1809bc904a7f643b751cf676dc24564243362da2e5ba8dc12db89d94573895dfca068179f626ab5d0e4eb334cea9612a9abeca326f5e798d47b619921c22c9ca6b1371c5145ad2fb094f796a54c070e9cc3507b444f45eb11ddc669a25db60a89ea029a2f31095ac924682e95601cfbab82ad58773a10c9ad8ffa0a93a5b54c96bd1394a5f2b1592a327d8d19de3e12c36bdf46cdf0bec1146ea3595cbec580333581bfc380db6a027f8ff1bcaf84e75c459e7fc0c0db49c06b64aa81ff8851d25e93929f64c0d4fb74d0ec57fd2c03a65dda8e5897b653525dda5d18ed5912da77b455a3fd174c89ce9812fb25a5c4af98125d244a64eeaba6c46f18785709f8b8766ae0bfcbc0a9bd7593b953bac9c96402b7252964cd75e1c8b3486756e12de1ff7aa3ed33d99d53fd7465db3cd05f84cb2d67d1f899cc31bbcb9d9df129ba707719f1c6c68b74e8b89453c51647dd792673e6858a918d7f605c7497714137ab86bb233a0d56b78275971eaf6412961277c5ac231f95391e422ffb6dd5150a7f6206d3436230172b5ae35f5891cac68a54cfa48ad4df9812bd64a3518a4afc83e5746f594ed325d9f2d1d6997c9c96aef0a01d1567fba358799a15f3d7ce2c1ad719a175edda5b029632cb10a3b1dedf2a985d55484ad13c26e1523096eb602fe51d5d15fbfa57c61e3db8ad8fa57f70db7f1878df1480134b024eeda49fa5bff9b48581f74f017844064e4f621c6011fc78437f021df10432b00406a628812ab20468c6ee9f828cad8a811f9002f06a18f8a01480579781533f3758e2e7367550f3733530f02112f03c45f09a182d074a6879f1851706abd0520b937ca844f22f1425af8d810f9380dfa4085e47064e870187eb0e03d6c5c4ce91889dd5514dec7a98f7ca4d81f7aa8f818f90805b8ae00d305a46cadac78ab434c48c7c540aca7e230c7c740ac01b63b48c91d0b24c91962658861e94026b698a818f4d0178338c9671125aae52a4a539063e5e3602d9490dbc05063e4102de4411bc25e6b526ea7aadbd30b1f36476a828f6de98a94c92988a6a447c2b4cf2c9b2aa5951f2d698e4535260e4fb6092e7cbc6b2b2d4246f83814f9580cf5204cfc4689996829aa22d26f97489e4ad3aab49be2f063e43027e9d222ded30f08325e09b15256f8f811f22ab4015c13b60e03325e06f288277c4c067c9ec7c3f35f04e9829ce4e4109cdc2aafe435350f577c6689923a1e51b45cef79380f7606730d3cd9bd3b533ce54e21c2bd6db4e3db9334ee74ac6ab7ab0e39e5b56d22391d40a6cbc1a148e92b6d1b6b5adf6ffbfb0ff3fab0b21377521d806dcf32c3ad69d5c9a58284217cc00e64b0c608b62b9e88a81174ac077288277c3c08b24e075baa88177c70a5d710a0a5d0f0c7c81147ced812ae0d9182d0b25b4642bd2d213737425124717517474bd30c90f93489eaf28796f0c7c91047cad22781f0cbc54d6535004ef8b812f9680bfa208de0fcbd025920cada298a1fd31c9974a24dfa528f9000c7c99047c465735f08132703ace7db82519f5a7639f342c6c110bdd58c9e69adc986df59d4ff7c7522f93a54e575f88481e677e8d7ea392de011895e5b2eea2229583300bab4841db683026f97289e4472a4a3e04035f216b492b821f8881af94806f57041f8a81af9280f7e9a6063e4c064ef73b5c6d251047701d0e3c1c937a8d44ea8aee6a52e7606678440acc301793fc4859cfa5879ae423306f7094cc1b742270bd48219bbb9bcfe6f70aa37bc9d1eb0af649099bf1730f5674679d9d20ef32bb9da9e2494662b21e2d9395b669736d8f29bc974a4aa3b0948e91a5549fbdb784e9586273407d246d1b4f623fab46d28cc6b27bad24bb6fca56cbee319862eb648ab5f56477ec8cf4c71716101136a0a2fc41987cc76255a333f12d62eaf4e2e7c662d41f27a17ea722f5e330f0f512f02f7aaa818fc7783b5ec6db7e9e7c1dc772ae82388bafca58ded11ca4eb31ca5934ba888116b9eecd69b7b0ab703d0193f804ac88b94747ca0a9b4ada13b1b44fc4accc39077c4e4a4e42c8c3523f49963aed90d3e5af74d39d7852d0f7ca886a5cef244c9e9365f23401f214457364020f784a7e51f0644c8a536452d40652d06073d73654d29c8215c953254572596fb522998f29b441a650569c22292f7a34b3690cd06a7ec8f1221681b38cd7c52a544cc5a8384d424557452aa661cda3d353d03c9a2e03a7f67186a539633403137b630ac43e181ba6393305634087609c9ca5cbc94c19327dffec44dae731e27c676106b84962807ff75533c0d918f83912f00dfdd4c00fc5c83e5797ec3918d9e769923d17033e5f13b840064ca3322f88fee08bcabcd04a262a731e96a1174932b4467fb50c9d8f79ee8be37bee1c42d7ae77e24d60b116dee98188884a1a63e946693ab193f03473b5c64c2126ed2558432a9f35d8fd67a827d34f2ac23ce4a529f090c5581e5f26c9e3598a79bc0003df2c01bf4d117c21962597cbb2c459a7244c446c60500a2a777a3f8fb5729db69e4a1695608a5e211b3d5054f4300cfc4a598749117c11067e9504bcd50035f0520cfc6a59d34f117c31562cae91140bd5898c2598e4d74a245fab28f9520cfc3a09f8338ae0cb30f0eb25e0ed07aa811f8e95b91bb05e55bc32379f4f1253e7a85eeeca30656f9428bb5151d9720cfc2609f83845f00a0cfc6609f81645f0e518f82d12f06d8ae02b30f05b25e0bf2b82afc49a79b7e936f3566162df2ecbcdfdd5c45e8d81df2101dfac08be0603bf5302fe8d22f81118f81609788303d4c08fc41aaa77610dd5bb936aa81e85b9a57bb0d699d8774eb41a931f52391a4bfb5e59daf5883ba4e2b462692c4c6952edc263b0acbb4f9275db15b36e2da6d6fd32b5689ebacdf395a4c0b70adedb0856f3f1eb30491e9049426f8745db712ae91c8bb527b6a6a0997d1c96570f4af22a7b905a5ead978153611e4aa4a3d90d073e1ea3e4e11450720246c923b256d060354a4ec43ccfa398e7792c29cf7312565f3dae5b5f9d8c8d1e3ca1397a700a26f293ba229f8ae5e853921cdd3a442d473760e04fcbaa5845f0d330437f2605867e3a563c9fd52c9e6760523f9702a937627c3f2febbb29f27d2606fe82047c9722f85918f88b12f0bca16ae06763e02f49c0fb28826fc2c05f96805751043f07037f45023e74981af8b918f8abb25ea722f87918f86b326b51a4e57c0cfc75995f5194fc020cfc0d59860e5703bf1073e46fea3af28bb0bae72dcdbae7628c8fb7257c7455e4e312accedf86d5f9ef2455e75f8a29f1aeaccb94a3a6c4659812ef614a6c4f4a89cd9812ef4b9418a4a8c4e598657ea06b995760627f28117b83a2d85762e03b24e03f28825f8575633e927563687ec2a020b82d9e33bf51c69e393b54b83bfeaa7478aec624fa18ebb98ee13b93d3432fe80f3428608c2d53a9cc0dc448f91a8ce84f64bda15c35a2afc58c6fa7aef15d87b9c54f35dde2f5584e7c960870ac839f302e3ed7e5e2462c0bbf9064e12cc52cbc0903ff52027eaf22f8cd18d95fc9ccbe09f16fdeed6c80bd84c76c3951596b88eaa8c62d98145fcba4a087140c63139dfea09569ecdf121637a82ac3ad18cddf48687e62a41acdb749c07bb4b76fad74ae1c835bbf26b772ec5b49bddba303d5a3f22aae4452fbcec6ab4609a3ff75b7ffab8e2c15fbde922f154b24116ca9d8ed588eff20c9f11a8a397e07d674f9116bbafc9454d3e54eace8fc8cd55bfe42339ed0c9a6856c9b5f9502b305eb70ef9274b855a71cefc2d4fa45a6162d49392c0a57ec604cc3c21d4fd53d1ac856cc0ac962de44e8e53914803ee9addc68b81bb3a05f2516f4b7a205dd835557bfe95657f76255f7ef9a55f77d181f7f48f858354a8d8ffb31f03f651d5f45f007307bfb4b666f433cf5e07cf643295d086bff4d67779710b119df6256d8e8a112156cdc9ffa277a98cd32eeb39c462c3ca4621e594e44a0a577b341d76a556c742b66467feb9ad18318f23fbac80f6106faafa6813e8cf9acff523048f8880c9c5659d4fbb596804b1328c61378142b0156a47209c81aa356021ec34a4024222901fb127797e7c564395fa3318f385b04d2bfc5a681f4ef9ec0aec57c98fa32c2c73109336412525e4a7877ccddedb85c29c52730c2ab4808bf4a91f0273175aacad469c1d4a9bc08a132fdc92d8e780a53b59a44d5b907a9a9fa34065e5d66b863d5c09fc15a5a3522484bab66249996d6b398efa815d1f71dcf610cd596599a2243cf6392d79148fe9ffd9f8ae42f6092d795487eef3835c95fc4c0eb49c01b8c57037f0903af2f01dfac08fe3206de4002de64821af82b18784309f83645c95fc5aaf54611cd6afd35ac5a6f1cd1abd65fc7f86822e163a122d96f60fea529e65f9a25e55fdec494682e5162f4443525dec25c408b1438afb765e0f454939689e4eb501c781b46c95e324af2d4287907937a6f4da9dfc5805b6902bf876562eb1464e276acd8efa35becdfc772b18d2417b72ae6e2071878a6047cfb2435f00f31f0b612f05693d5c077c8c05bd9b7fb46e8e9793ebfd29af2c50edca6b31cf4acc27c3e4248d82f34a7bc5d46f87b17ab2e21ac2b3a920f824ce1ed47e76c5789a7aac025ff08a3a59d84967c455a3ec6dc6d7bccdd7648cadd7e8235bf3bca9adfd2d214eb18210cbd930c9dfee0f4a67a24d12ffa14cb8e2c5923698a5a767c8681779680972a827f8eb1b45f229e32d6c1411870174de02f313aba4ae8c853a4e32b0cbc9b04fc0d45f0af31f0ee325f96af06fe0d06de43025ea808fe2d9699d9b2b25441e21d30eb8e07277fa8ac73b2d21ccf31b5c13e62f63b2c8b7a4ab2a842318bbec7b2a8972c8b9c1d9efca7fcaa28f3035649f4c62a893e4955123f627af595e9456b891e4a7afc84654a3f59b999a196293f63cdc5fe92e6a225abe062341777c9c0e93ccc00590e74b06f07da3f5463e7421367aecf99eef3a7494d0949f3174ca1fd53d0fefd15cb8a036415dd216a59f11b6647836476e46e96228a3efd829e73b29a4f2088ad275c67b692cd0f971277a181331ae846c6a8b98bdfb11236182b6143922a617f60797a600a8cf44f2c4f874af23473965a9efe85493e2c0592ff8d493e5cd61498ad26f93f98e43912c955676effc524cf95487ed25c35c9ffc3241f21915c75d3731241241f29f300856a925b32705a9e4661e5697452e529224b87ca3526050c65600c1d246bfd2e5063a88a0c9c7aa8b1321fd99cc48b09f42fb452f17e553159c6c964a1b793a37e56259d6a586e8d4f416e55c7c02748c0ab2882d7c0c0274ac0ab2b82d7c4c0f324e05515c16b61463c4962c4d947aa19716dcc7026cb0c87eea723db7849767a6eea365eaa8311304542c086556a04d4c5b22e3f0559570f039f9a02f0fa58d64dc3a697659d40958c6880a5385d96623322eb358d676652cecdc0fd45adb5d7109364864c128a40230e55074f1a4952e941cf4db32691f44541e6db7734fc463dfaf1605bfe9a3e3258052d0d593c244243169b56d22c56fa58a8626359fed0db99117a18b657a483c6afab7e71ab172395b2a62a9e354d3003982533003a982c76fe2bb61fce615d13aa946ad84153cc17cd96cd64ae53f345cd30a50e952945738aee7abd900fd488d604ec6db967b0aa28d91c93638e4c8efa28b922ac4c25ed16b2b4e964c15cdd699d9698332e48416f7c2f193865665e447fafbabd31a39b2f0bb63856cde85a61e08512f08dc7a981b7c62ca948735c7b1f193075cdc5890053578700b79101b7b56f1724025c1f1f0ccac4a858282b54d4e2dd76d5922483a4da626996e0d5a4fa5616fb62941da649593b4cfc4532f1e926b4ded37dfdfbb7a9b576da6305a354523086ae572b181d64e0d4792d4e84b318a1251d31ce966896b84e18f05259665057299a9beee1083ad9918565c7324976e41eaf961d9d31e50e9729e7aeef73bb3beee40c3ced5c9cfbec749654d4dd0f93a80c6b0b889d69645197c9ef90d30593a33c565ba0674a76e7e98aa55d81b94cc181b3dc2a997d79ba61692e97a509b77a96a79ddc86d3ddb1b6ca8a14b4557a602569a5a424d53951ad24656392af4a81e43d65e0f4fdd58938b7189b71f492f5f4e8510e69ede90db7efe8dfea3dbd35b6fc0d2b358ea5ddbc23906e5eacc4b16e5e6f196d59e9a6cd59495596046d47daf277f0d1d61de1ed2884b758a963bcf591f1d699f236278dbc39ef39033153d82e8e25f693896ce2ce39cfa03c094e8f8ec4583c2265f618c66cbb4a9a272b1fc67a5fccb5afc526356792410cb994a10fb6fb68236c467b137ad05f1f32c4be9b6cff6fa2fdff41a407787388cd90d34098c9273c679364cefae88749bc4e26712ba9c4d9f6ff06b07fb36db99c3659656955a4ea8fd51fc74aea8fad67a8d51f0330958fc35a62f2101477e443d64653517720a6ee7a89ba991bd5d4dd1feb071cafd90f3840069c69df9e9008704dbc533608a3e344091d83ce54a3633096fb27c9729faa23dce152d6c2f68f7ac9dbe7f0a816154b18824977b24cba7d89e802d113420b59aa5399eb2a656edaefd89db1f229dce1395bead26f54243c10cb9c532499739da2ad0ec5c04f95806f56ccf9615841d8a05910866305e134cd829083d171ba848e1fce52a3231733b53364a6d64fd1d446f015bd65fcc912d6592b6546e8745bcac1df7afdf611184d1b2534cd52a46924067ea604fcefb3d5c04761267996a6498ec6ba31676b7663c660d32e9b24d32e6f5d77d0ae1633bffc5865dae5202c81732409949f7cd6a71f349b3f532581b198dd9f2bb37bb121af7c5e476dedec386ce2e13cdd8987f118f2f9bac81330e40b74912762ddf80b53d08dcfc332f922cd31ca49181f17ebf2311943be4417790a867ca92e723e867c992ef2540c79b32ef234cc342ed7348de998c857e88a3c43864c679caf4c44e4c638f0c198c857e98a7c08c6f2d59a2ccfc444be4657e45918f2b5bac8b331e4eb74910fc590afd7459e83d9dc0d9a36371713f9465d910b309bbb49d3e6e661c0376b02cfc7b8b845978b42ac6579ab66cbb208abb66f4b41b55d8cf171bb2e1f0b303eeed0e463a10c984e4ddf9908708ca9e912cce8b6681add6118f05d9ac08bb0dcbb5b37f74ab1dcbb4733f71663b977af66ee2dc148be4f93e4a518f0fd9ac0cbb0dc7b4037f70ec7726fab66ee9561b9f7a066ee9563243fa449720506fcb026f0722cf71ed1cdbd1512e41e74eac23a8c989c499acaf7505d4d4644f730a498b2c1783a4783bd2f668dc6b3ed1c9df1a5d8f34b8f26921707e18cadc4f2e231ddbc5825436e63df3e9e88c85b70e0d5985d3ea169976b30e02735818fc0cafe539a65ff482cf79ed6cdbda3302e9ed1e4e2680cf8594de063302e9ed3e5622d86fcbc2ef23a8c8c1734c93816037e5113f838acabf59266576b3d26f1cb9a121f8f49fc8aa6c4276012bfaa29f18998c4af694a7c1206fcba26f0c918156f6852710a26f19b9a129f8a750ddf4a41d7700346c7db9a749c86d1b14d938ed33117f78eae8b3b0323fadd1410bd1113fb3d5db1cfc4c4de9e02b1cfc2c47e5f57ecb331e40f74913761847c980242cec1c4dea12bf6b918f247bac8e76185fc63cd427e3e06fc8926f00518f04e4de00b31e04f35812fc2803fd304be1803fe5c13f81219308d03ff22a2bff2e9520cfccb14805f2603a7ab48beb27f682b019726d0114f603326fdd72990fe72cc3d7d9302f77405e644bed575225762c8dfe9225f2543a6b120df472ac782480989110b7235662b3fa4c856aec16ce5c714d8cab598f43fa548faeb30e97f4e81f4d763e0bb52007e03e6177fd1f48b376252ff9a02a96fc24ad16fbaa5e8660cf9775de45b30e43f74916fc55ce19f297085b76162ffa52bf6edd8c8fbdf9a23ef776022ffa32bf29d18f2bfbac85b64c8fbd8b7ff2542c67538f05d18cb747f1a1d96efc6accecad0b7ba7b64e3fa5d28f82c62725c7f9a8d96c3dec825636d11bbdb57ba88b000fc956f7f41f7835cc246e99d2fc4fbb1c7ee231995770aeed1956a95c99ee9a5ed2c807263000972365746065d6f928a14b19526f762954a95446c2e46a5721f56feaa666896bffb3191ab698afc002672755d91b762c83574911fc4906bea223f8421d7d2457e18cbc0da9a19f80826721d5d911fc590ebea223f8691514f938cc73191ebeb8afc045601364844e41815e0935805d850b3027c0ae3a2912e174fcb90696dd93811916304c83f83d5d94d5250673f8b49dd5453eae730a99ba540eae7b15c6cae9b8b2f6086d742d3f05ec4446ea92bf24b98c87b698afc3206bcb726f02b98a76ba5e9e95ec5486ead4bf26b18f23ebac8af63c86d7491dfc090337591dfc490dbea22bf8521efab8bfc366674ed348d6e1b26727b5d91dfc1903be822bf8b79e78e29f0ceef61e09d5200be1de3244b9793f731e4cebac81f6084ec9702423ec4ecba8ba65defc0f8e8aacbc7471872375de48f31a6bba780e94f30b17be88abd136b85656bb6c23ec5f8e899023e3ec3a4eea529f5e798d4bd5320f517582ef6d1cdc52f31e4bebac85f61c8fd7491bfc690fbeb227f83210fd045fe166b970ed46c977e8789bcbfaec8dfcb906998ed0189881c23ccf607ccfb0fd2f4fe3f62c08335817f9201d330db218900c708b3fd19cbbd0375736f17c6c5504d2e7ec1b818a6c9c5af18f0704de0df3092737449fe1d23395793e43fb0da64440a6a933f313e46eaf2f117c6c7284d3efec67cd1684d5ff40fc6c5185d2efec5900fd245fe0f338eb129300e3a5b27051f9702704b064e3919afcb4904137b420ac4ce9081b7b76f2726627d310eaeaa2203a6c5204fb3bc54c58027690257c37270b26e0e56c790a7e822d7c06c233f05b65113039f9a02f05a1827d37439a98d893d3d0562d7c1cacb0ccdf2521793fae014485d0f033f2405e0f5b19c9ca99b930d30e459bac80d314266a780904618f8a129006f8c71324797932698d87353207653acdc1468969b6698d4f3522075730c7c7e0ac05b603959a89b932d31e4225de4bd64c8f4fd62cdbefede18d30b52c0742b0c7c610ac05b636497e892bd0f26f6612910bb0d5620176916c84c8c8f525d3eda627c2c4e011ffb62e04b5200de0ee364a92e27ed31b197a540ec0e988d1cae69231d65c03434b12ca372745f368dee9304e6f9d3a35d1924bd4e98db2ad7745b5932601a71539108708c889bce3260ba68717922c031162dee8799e20a5d53ec8275cc566a76ccba625cacd2e4a29b0c989d05a03963d21d035ea309dc43064c6f8fc8a8bc79a6f8af520255f104b2317f72640afc494f0cfca81480f7c20cfb685dc3ee8d798f6334bd471f19305d22b33611e0182750f5c580d76902f7c3483e5697e4fe98273d4ed3930ec0445eaf2bf240ac301e9fa2c2b8bf2c814cfbf684443889b1eff40198ab3e51d3550fc272f124cd5c1c8ce5e2c9bab9380413f9144d910fc4dcc6a99a6e6328c6c5065d2e86615c9ca6c9c5708c8bd335b9c8c180cfd004cec580376a028fc072ef4cdddc1b89e5de599ab9370a7317676bba8bd1583db549b39e1a83b534ce49414be3200cfcdc14808fc5c0cf4b01f8380cfcfc14808fc7c02f4801f804acd45ca85b6a266205fd22cd829e87897cb1aec89330e44b74912763645caa49c6140cf8324de07c8c8bcdba5c4cc5902fd7459e86215fa18b3c1d2b8357a6a00ccec0c4be4a57ec8365c8f49cb4ab13b18ea138f021181fd7a4808f9918f8b529009f85917d9d2ed9b331b1af4f81d8876262dfa02bf61c09720f3a54624d25bbe7c0bb997ca1b2dae17637ca4cdaf2f1c01619df94411719b7aca45d223260cb8ae762997f730a32bf00cbfc5b74337f1e26f6ad29107b3e067e5b0ac00bb1b6f3ed9a6de7221930ddb6f78e448063ec6e5b8ce5e29dbab9b840864c43ddb62422728c50b78598c877e98a5c82b55beed66cb71c8671718f26178b302eeed5e5a21433e5fb344d7931c6c5fd9a5c2cc1247e4053e2a558c775ab66c775990c98ed789e08708c48e1c331b37848d72cca64c8d4233e9c88c831263bca31e04734812b30e0473581976323c28fa56844780556553d9e82aa6a2506fe440ac05761f6f7a4aefdadc65cf4539a2e7a0d56c89fd62ce44760c0cf68021f8991fcac2ec94761638bcf698e2d1e8d89fcbcaec8c76085f1851415c6b5b20432eddb1713e124c6f4cc3a4cf2975224f9b198037c59d3011e87b9905752e042d663e0afa600fc78cc0e5fd3b5c31330fff4baa67f3a1173236f68ba919330e03735814fc6487e4b97e45330fff4b6a67f3a1513799baec81b64031added5b6b3249df80c630fbad325b81d5490c65bc93f050c6bb6c28a35925bd62a78e0d629c863982f752e0084ec7327cbb6e869f81d517ef6bd6171bb16ece071992136f73d9adbb07dd7042cf682e2213083d2e7c25e37f111f5eeacecec61d63ff3ed1fe6509b332fa447e168fece41efa36cc736a8b4b99d516281e4c7e26a6e587322d4f886a294eb376cacc62f6f718569aa836c5f6274e9919137d73845d929c13ad27332de859c02bd8dbddb93e45ec18f81c3b29aa17c5f5b2e722d0f7d5e4c090e859da6536d7450c15720a0704fd7c4fb371e849c62a4c9f8531bd03b32798a2a3536ffb1b87ada5b69f9a63db4619cb7347db7cb290e5bf5f5af75bfc79aaece96c4ccb8f645a0ef169093977f41cc9726c31d3d12fa53787e02fb1ca0afc4a45b34d98661fcb343b30a1fc1b66db50212bf325cc72f573cefd4545b77330dd3e91e9d6cfa7db78963b0bb966f46ed56ed3e45c4c939d324d36a4d99fb9dfe4dad752564717d9ef8c64f5f5629642e2560eb9c3b5a075c972d60a805e8fb67952e7dbcec358ff54c6fab084cac638c6467920bcdaf9987e9fc9f41b67d0aae8d3c35932542ba7855ac2922e216b5839947b926472f5024cebcf655a0f8ea9352ee964a60b3d61b082eb286a63fa743e67a872b9483e372fc4f4fa42a6d7c1ca2dbb29ec176fdb4e86e03ccb8bfa8132bb3ea0bd0f9d966032f97c11c6c797323ec6a6a5ce365d9b5f8ce9fc15d64e51b30161c3e3ecdfe6332098cfaa16a1a2d92598665fcb34db1fd16c2a2b9fa5bc6de2f47e45af651a2fc5859572c34c1fe5524ca36f641a8d34e87d45aed2770a6c5d4b59ed9d3a4d2fc334fd56a6e920fb36714fe1d5a0803d73b4a39c8c66b95cc67a43f3ed1a77750ab5da8c69f55d227d026fbab0853095e54299fd2e2d870b62d47e5e8cd4697639a6d9f732cd72e27acec47a05b80f8dd5674dd6535e81e9f8834cc722c32dea0adb3bd211b805bcc53c8d594049b434a6a68f984c2d7a25c6d38f329ea6eeb69e476c86f479b80ae3e127190fc3511f467b48f3ec9744d918c7723d768d23474a754e5f8d69f8b34cc3318a1a4e6716bd04c991dda1ef3598bebb64fa4e3668d9e549d4bfa960e05a8c815f52552f3bbe6d18a895cd6b751da6d5af32ad4629daf108360bb194b77677b70d5f8fe9fa1b3642a19a8323d91b95add1ef5f13c755d1ef064cbfdf65fa1da0d172ac6035ef125bbf62decfc3b5caaff4ae8a4e37623afda196677efb1cc6c613a85789d74b315b53de84e9f76722330258eb71041b1f2ae07db7caedf8e45a8fc9b7916fc6b4fc0bcb45959eb1a3f928de32747fa5f33ab1dbc0a96a1fdf82e9f7b74cbff624f6d8273dd5ca8494b76252fe137b04532517a624950b264bd86d98d6ffcab4ee867a90fc688c00f484c5d1517bdac2592e6d5d27378b713b26f77f32b907c6f50c63d80c281d632db53d7b99ad1b8d7388ef1d52e503eec0f42155903e41ec3242fbfc79ac9d5c2e692925326342db97c529d4f04e4c434ba6a17f24403e033286d95e6c6f9ece59902d988e11998e2313acaf12d132dd75d65d98a619324d4727949bfef92ca71c0abd7767bede8d695b45a6ed8cb8f96a76fcdff4ccc03d181b55656c8c47eb0c312b5e1ced15d11a7199444e474667f42a995ff0df54f4be17d3bb9a4cef0313d65b1e0f905eddeec374ab2ed36d80623b6039ebe138b33c743c42bc45fb19b9ac65201f9b84bfa968733fa64d0d99367d35b57122159c13579df753952b0f607ad494e99158d440bcde4f3afdea564cbf5a89d497d03aa08653d853a717ee8c16c9e608bc7687ff921a8b7c10d3b4b64cd33e3e4d739806ce385f85a71f847b82585a246b8f0f615ad49169e19f075789d00b4eddff30a6735d99cebd7c3a4f0532b951c7b04f1e4bb73928968a068f601ad49369d02fe17a2b87f563693f299b2e944f432df528a6497d99265d89b78fde3b7a32b6b88eb3e52827fef1bb54f7551fc3a46e8079f164a416d8b1ed2936b27b62b88a7e8f63fa3594e9d75f51bfc90c7129f37ec394ca4b32e3214f60ba3492e9921d571797517f6eb9e30da9f3554f62d237c67c5572d23b630345cc732f61b350b166305434780ad3a0894c834e8ab694c359ad3ce3928cad3c8dc9da34919a0132a45b3324cbf6339806cd641a1c12653bf5f396627c3af9c885d430f22cc648731923fe1987ca734289b5b993ebbf27ef279ec3b46c818ddec85b04623dd85276b74462c9546ed90ca7d796d5d155b47d1ed3b6a54cdbb6be3cf56b447d882351aa6cee054cbebd12194bab6c7395bdb36b7f95a384d36d7b2f62daee2dd376b082d79c12d76b9a8c6e7a09d3ab954caff8eb7afc3312d3ed9677097b7b8a5d260aa4b5ae99b1de9731cd5a2732726f62f4d3cdf9548d69be82e9b88f4cc70e717c841bdb5cc424a1bda6d4f4255ec5e46c2393d33fef55d997d1fa69356be7f9e5831c9b6b6fbf86e99399886d61fa24aa4b7a747c1dd3b1ad4cc7fd156adbdd1577f206a6d1be328da6a21a61ed256cc62b914828f568a9e43de39b180fed643ceca7c083c8d3257cfe3c557eee2d4ce2f632893bc6f5e5e63cdddb98a41db05185442ddd2bf932d6cb70237f4d94976d982e1d65ba8c20898c9b8ee72bc24aec3b5a46e6133cba5f7dbc34b93c7b07d3b313368b9468db2eb17e447c34156ddec5b4c94a262643656e225df9f51ea661676c3c5f6dbc4878f3c5511b2d8959cafc5edac468e5764ce7fd643a1f105767ef0893b3324545f654b430dec774ea82e5a35a0bc3199da9fc6be5de643e710eca32dfabff00d3b9ab4ce75964f78e5d415e12edb1896f5458f91063a55b22bd5091a2cad895ab196607a9696bedc034eb9ec85cb16a4b73778e907c8469da239171656caed8b1f17ea44f1cfd64f50afd4a45838f310db2138f5ba069aac72d38fa61cf5395439f60faf594e987af76a91c0954b21b5b033b31ad7a2512a330dcfe9bfea5df72ab8ca4a2c5a79816bd131921c1b4501b5b1428a9a8db3fc3f4e923d3675cdc1edb14de16abac4d0e8bbd288b5143b9df4e64d1d14eeb35f68e2cc9e5e2e798d67d13f181f2f4939b5b4bb6a7fd05a6413fcc47c41ad9a2f215dabfacb299af1c958d8d63c5f7ecb88fa86effcfb2e80e7423d89b4e44f952c6046df9f5e861ff0466c0bb47db4bdd3d6d2bf7394d7db12d11f5b9f9d19611dd812f36427f9bb06a11e2fcd789868b13711eab55ece3cdf9b29421cf0716da9de5bbb3db08ed87748fb6dbc5fe84f1b490b511bb835622d42ebe4eb39103142cab3ad74860d94c5392f7384d07d05cedcd7335d2a327d5b14b92d6145f8a8134b50cb90d35afc42c2cf332d91d80097c6ccea287c2e6b141243198e44c7138db67c64d0d9652596add18806851c78583616232b896ccc49c8e6a197142eeffee4048f5aa916c9a0bfb9ba4aa967d43e365c7f0f610f503e5764f380c24e5f671493ac0244914373cb693dbdfa56590495ae891ca735869760a1bbe63561868db5ec5a56db049da5ab22257c6ba5179c4d9f84234e73002cb4341e14ecba57088490a1bd83762be6034f35814a080f5b0e90a808921f16079355dc20e344958135654e7906ce26e491166e26eabed1237d42471cd81a5d108106f811dc34676967ae67ac2405ff66897be6126e96b24b13b0a48c3a0e872d8e5ec696128489b4b5cd286a78b34186d2dfa0da2371106d2b60f7649cb31ede1bc55c248fb5f6763fcc2e826058ea70b0371cfd47189cb4d9787a3bbd2adb2ff92f93577c7df30d0b761ac4bdf0893f4d1c30c2a570ce16e0a6f02edb891a69bc2c2f6463018ba5eb3803746a6b0eb32bbb1bc9cd95e98289cdbcea57094490a6b83ca62a26772340c34ad6fe5d234da244d35014dee3e5f61a0e887662e45634c52548f793231d4b884f9ae896c32be90d5a26120ab7d8e4bd64126c9aac6eca93c544d8aabeabae48c35494e0bfb66627458c83f064bddfd726661b45596c7277dc340e0b8d62e81e34c125803782b2a268d710c0341031ab9048d37dd6815043922f83b47d3780bac989490b0f43073735dfa2698a4af296877f9892b6745b4800d062db13f5f1d0aea4a07b9d44d34dd90a0c4e410779b8470585713e0bdf2cccf0b88f18b02665f45d1910c0a1a26cbca9be0d236295d4e5f6ca91c0682aa3471099a6c92a0bd08ec2dae625a2f8ff60ae99abc42e6c1c2e8bfe87f82c4292649b49d80873c3a6d478f4fa05e6c391f2d0bf7e805dd994050996f92cababc2a10f6b69a3771a7327f1706aab2419530d57cf75b1cee25428dc240d12a30803d2d5d03d863782b4cc4b68b41c530f536cfafe11237dd24716d40bd39d5c62ce4adb23d6b40311b4404cd303da00ded10eef03f8c0d71c3221c8ea66f2b309972b049f2ea005b743771778e17080551a0037f8849a26804c778e6cd16f9ce24cbb55f2f63298581b0b91197b0992609ab058a253c80300c24fd0d02f5669924a92a4b7a1e7b211cd4f4d9dfa566b669cf24ecc75d1ae7081106a296f575893ad4245134fac2bbc71d8de9ae3c4a1606d2aa8001c5392649ab4f64433e619b3dba0a8445cd4d575bdf0956f1ae642d0c595bbf0e88632c305d389d7e642e4b3acce3143babbaa4cd33dff9f617ce305074d23097a2f9a60be4081667bd9c25ee1e82eb1e8a5cce36fc5a160ae2d65773892b346d5bc293393eab222cb6051aa5452629aae7a1289cb1af74c59b20abd87441146b4a963298700f462f044e7e8149e21a127c4a3787880db4c340591530e2bad074c174561fd3118822367be40e1286a385df02cc7b9798240b4eea3ac759f9e78dc2b4747027e84d1e6692361a9ee9b6b946b0e86a27bc2e0c34bd32dca56991499a5a309af26c4fe58c6e1dce56e187dffd67b14990ea557de0fedd70925f3baec63abeca9d76e0a9752ee363678e27f4ac7aa79b3a044ef2d22a60d57a56d2210259715b695909af65ca525e139095e49ad0ac8486d1b334e7fcb31416fa662935e0b212eecf6729f5d0b292f227594a53b0594a833859092d59cd525aa799a53c552793195f25955529c8392be6fc5696346c354b1ad7948504e467c558cf9085c4de65c509c4c84a2a1e392bc9c5295929988fce8ab3834516ba6d4316d221cf42e78fb262ce0c6429b4fbb2c03e0959bea998acb88ded2cc5a0d4ac047b3c5948ec89d79fc75a6699850ca065c568dc65c55d4d9195f044435612d1ce599e657d892d5cce4a6014df8b9bd872c12c858050779323d8f8703727caa69b1c2daef2ff7bffa16c3a1ab38492b091b7c79d16fa52d313f6340f7b93beecea6c3b4573cdf150f4355f9aad2aa53999174ae75446d1f296a55ed3d3366f988842c9b4cf5b82e9fb65a63b385eda62ed7d38870cb0d53046673d53740ec870e93c3c48740e0c259d33009d6541a2b36728e99c0f0a7b7990e8ec154a3a37023a2b824467ef50d2791ba0737990e8ec134a3a1f0774ae08129d7d4349e73640e7ca20d1d92f94747e0de85c15243afb8792ce06a0a1b43a1dbda03e768b32edbda0bd4cd1370a58e39a74d047db8f69a7afa66588beb7894bdf1126e9abcf9276c778fd23719536340981ed3506e41d990e4fb800f585507cda65ec678ece3aa6e8ec6cb9741e15243a078492cebd009d470789cebea1a4f33950d88f09129d7d4249e76d80ceb541a2b37f28e9ac0e0afbba20d1d92f9474ee04d6796c90e8ec194a3a4b009dc70589cedea1a4f32c40e7fa20d1d92b94741e0de83cde249dcd48ec010d6f41ef1bc239c91a6030e384a050d93b9454ce04549e18142a7b8592cabd01952799a4b229a7723e8fd4f09ff1e888ee9c1fd8cb1c91554d117910186c3b392844f60c2191630091a70485c8ec1012d9181079aa49225b13370e2cd1385bfa7e197b377cd31245a051b4c124b1ad48bc36a6fcf475a305ff7b53e3edbb403ffd3493b4362462baa2a7fdef0a224e87a4cfc21cf5d6041078ba49021b47099cc35e70809ca8cb3491686ce2e23a40e219e928dcd9ecdf4422b1c3ec330f01b46e34492b0cd35759ac136672f70715d299bbb33f04e18c5642d54d51390d349ace3249a508caefb707051c14003b3c3b1de40d483f795b4c917706206f9349f2c4b213acdfe32dc446a7d08c15e309a0ba39274864f60f2199130199e70689cc3e2124f32040e6794122d3e0e8a53132c70332cf0f12990647308d91390a90794190c83418ba6a8ccc3180cc0b8344a6c1914c63648e00645e142432c3d8c31909c8bc3848640e0821997980cc4b8244e6c0109239099079a949329dcd284a389125f647741c88be1ebe3e777be29276593ac67ef0c9086fe465f8c6cfff01f6b779f70ea3395074f0d7e8dc633b53545e0286d12e3749e57e9cca52fba5527615fb07e5d9ffa79361cea484b34dc314924bc692e16c3cbd883f83ef0db3a52a314b796353947706911c5798a4bc655c4750392ed360dd6e2cf6ed51e00eae0c1aa106eb7763843e0108bd2a68841aacb08c117a3b20f4eaa0116a703cc918a1770342af091aa1618c1fbe0f107a6dd0083538166f8cd0fb01a1d7058d5083cd2663845e0308bd3e68841a1c5f3246e88d80d01b8246a8c171796384de0408bd3168841a1c9b3746e8ad80d09b4c125a8b11ba906d70e96ca64ac3630d8e32198b30a2792128bb79770e8dc08057a3fdf4eb4c51b9050c8ddc6292ca7a8c4a7f7c2615986ed2ba2a8403749d8015de6a923a37429806ffa73d42d85831de0a3cdf6d26097437d4d90df16dc67684390014dddb4dd247f7107676b91e66ffebec45efee983d89d922fd7ff82c301314e13b4c5228c2abc5c0b0b3f0c4599e3286e44aa72ec2bb686a3918fcbdd324ad9d887fbcbd8081b9fb420fb7ff4f9b3c74cdcf52b6037aac99ca3086239c00dcc096747851a7b99d662f6a8cbecf4125749749fac4127db8c242beff799883ff1f0474de6d924eb15eb22732771ef6953fe781aae99e74f471128be508a387ec0fa8bc371d1eb2979d64da3de45053f4bd038af47d26e9db8754ee6d4f25ced923abd9b91ace5850115b9956c0acb598c12d366b99c65659ac0275f7fdbbb790873dc6a326b0d207d2d9942fb1859806fae4f8f890c1a6bcb1f1a1a340537eab495a45486136b3524a67a9fd123df36451f4a534d5e9c62aa2eb818d3e68bab80f63a7b02de5674f392b799dc5a7b4ad294ee472ce390b5f3bb30aa8d31f323df821da998b895859b8600fb0c6cb01850fa783c2fe7b1c85ef010a1f3149213cdc6a19f11e9f9626128dd5dcdd81577c345d24ba279d397ba8847d17987780253e968e610c6c4aacf219530623858cd13902347b1e0f129d46370c37466701a0f38920d16974975663742e03ddc6278344a7d16d458dd1790ea0f3a920d16974d35b6374de07e87c3a48741add3cc2189d2f023a9f09129d464f073046e7fb80ce678344a7d1906a6374fe06e87c2e48741a3d1dc0189d2d4143e9f9dd3920ec8dac343872692c3cab1fe856be900e2a31cbf4526930e6d71895ff8142fe6250a8ec1d4a2a7b8202fe5250a8ec154a2a9b002a5f0e0a954637db3146e57a40e52b26a9ec40fc015bfefd5a9d65d0e2fc7a7195857119ac948c4575740244bf1a16a20d4e071b23fa765065bd669268f7b4c9ecf4c77c189bd87881b8f4bdbe3b7d2b849b13ca7d64ca8125be910e2ae1c6f7e3c844328ae431618aed8f56a56392c318951700ab7cd324954e30025c243587ef783d9c8724385023ed6b910d5118420f591790f9964932e39f1b00c587e70618ac78e6995a95b11fe876be6d9256112d5761d7d7b46e57a9d18d36f88d59ec8980da6d41a5d6680fdf18b50f0067f08ee9e6522eab8c0ad87902153640f8cf976e08e87bd7247d4de2349784a6734c2e853e246288c6a5a077f49ef9fa5de5986e63641a5b573e0dd8e4f6209119c6ddb7a60232df0f129961dcd7681c20f383209119c65db77200991f0689cc30ee67341990b92348648671b7ad3c40e6474122338cfb180d06647e1c2432c3b8cb566f40e6274122338cfb170d0764ee0c129961dc5d6b0820f35393646692ca1d49b55d890dd6efc676253e0d8cc57f960e5bc5c26bfcd14a06bda8b158a561c0563f0f129906eb7763641e04c8fcc2f4009c9825da73b692ea09e8fbd2247d2d017d95779ba160ee89d2619e00fe0610fa9549421b0142f7acc5819b01855fef4effe89f430fe3118a0340cdfd4d90c80ce3118a830199df0689cc301ea1d81790f95d90c80ce3118afd0099df0789cc301ea1d81590f94390c80ce3118add00993f0689cc30eec8b51f20f3a7209119c62314bb00327f0e1299613c42710820735790c80c63e86b2e20f397747422fbed719dc8d9c4a5f0579314aa1da868d01a8d2d72a901acf1b7608fad1bf49cc6c6d6bb82e0addf4dd22bdb2632f1f84c83fd7563e1852f01cbfdc324b56253dd5e64cfdc54f7211041fc673a46d97bda9e32edab828cd13717d0f79749fae04e5dee5216b81ac3f8221663245e066af4bfd351a327d6c20ce368d1a180ca7fd251a38bd594740de54acf5215ef7ce46af6579a96b20c3545efc1a046ff375d936aa2b88f668d2477428d2e1098c81761857593be4380bdfe978eeaa7173b42644fa97e2e02d50f3dbcc4f85e33892f0f0863e0567b40a715243a078492ce6680ce4890e8ec1b4a3a1f05be32234874f609259dd7003aab0489cefea1a4f3374067d520d119ce3350df0474560b129d3d4349e71c4067f520d1d93b94749e0ce8ac11243a7b8592ce23009d354dd229068add3d908ad8a77459ff14fba562e23faf254d0b5b8c4d717c0e068a6b99a496f6d8e9a8529efd2f05a1478bd0cf0bd8eb6bd88071097b633213cd59ea6f8cd065a6089d046cb5b64942e1e63dce763d4e4fbd888c641f39cc8479f0a30ee81fd53149657d22cea94cfbd087313b9c02ecb0ae49f2f626899ec1e63ddbcae0b45a7dcb10a9cbc0f866bd20926a3050db18a9bf822aa87e10493538d1618cd45f00a90d8248aac1c06d63a4fe04486d1844520d36ee8d917a0420b55110493518c86d8cd432406ae320926a306cd618a98b01a94d8248aac10ea831521702529b9a24b50bf1f6ede7b3b5bf8e30d319b50b59c85785dd85a30b5ce9ff45a88377ae3efc0bb1ab81766c3393a4f72695234abc917739f6bf8bedffd1bf1d45e8b84031db34950a3b81d0ceeb4a96c422dbf6579022f6563eeb9b89b97f839930c95426f4236e26344fc748013644e80deb09e35acfc380136961924a374aafdf1e1426f113b0c496e9185f4d6e07da3006e2be01c6b0f60a2ab53d4349edcfc06af74e47a1ef4d06a4bfd01bdb3a751fe0335b99a44f6ddd92d1f335cd9dd30e6cb17590c80ce36603370032f709129961dc6ce04240669b209119c6f0f1eb0099994122338c9b0d9c0ac86c1b2432c3b8d9c00640e6be4122338c9b0d1c0ec86c172432c3b8d9401920b37d90c80ce366033702323b0489cc306e36702720b3633a06e0125b291fc6a3737f01c31c9d4c5299f87126061bebc6fae46bc0b87c96e9683cd5a8e6309ec2b106d865e7a0111ac633628e0084ee173442c3781ac772406897a0111ac6b362560042bb068dd0309ecab10a10da2d688486f1cc98d580d0ee4123348ca7732c0384f6081aa1613c3ba60c109a1d3442c3784a473920b467d0080de392b00a40682ff31d4e1a6bb7cafe900abac27e793e58afe46ee61fbe7e7b3be2d2d8db248d994477873b831593b11dee668039f63e26e9adcbe9754e6d2f6571200e76093178d4785553c41160977d4d12d79978a3422b5854c7140e40a33c2b58215709a73168a9c682694ac0c8533f9384b7411d4162914a069b53c6c83d1090db3fc8e486d172f702e40e0832b9069b59c6c8cd01e40e0c32b9063b05c6c81d0ec8dd3fc8e41a1c063446ee4440ee014126d7e0a0b531727301b983824c6e18e39aa700720707995c8383d9c6c89d0cc81d928ea0f1be6c838e34078d773345df68d0a13d301df4f5b109dc7316daec0fe81b9a8ed520c915ed3036a64a01b5c3d231c24a8bf578668b8b7c8b1473edcfca588a61de7da70f71091d9e6e5b95af76ce67059f86a31533b8c5c4e8e61c5b4c51bb18544239e959b9d433fd5eb4c2147d3bc0d87f6e70bda8c1f01e635ef45be0454798a4b61e8935605d6e8eba5aa6a88b007f39d22475838977c89a1663bae2d301c861d64785a20a94da0979373770842e2162f68aeebfe76e785048f6bccd0eea036f3b2a1d61be58ccb477e6358c8116dd818d8f4e4ff37f4f3a73be02d03726184daa1c42b7df58c62cd67119462db3a665aa67050af941e9d871170baff07bcc012667ac8c596a2f40e7d820d169f4c05563744e05748e0b129d46e7538dd1792868a58e0f129dbd4249e75a40e78420d1693478d2189d37033a270689ce3ea1a4f31140675e90e8ec1b4a3adf04744e0a129dfd4249e79780cec941a2b37f28e9ac0e1a4a534cd259c3be19c9624e2b18d012fbe5f0d145a317055df926e9a2230a93f93813dd7574090370ce590c1f6dfb00daa69aa4ad1da97c4ce508b28ad00d5b9713310437d1febc90d058e7c9acf8163282e9d05d1ae68f8c85967703244f0bd219380343b94eb40398f4981e243a078492cee680ce1941a2b36f28e97c0c14f6838344679f50d27913a0f39020d1d93f9474fe09e89c19243afb8592ce6d80ce5941a2d36830ad313ae7033a670789ce706ea8711aa0f3d020d1d92b94741e09e89c6392cef68cce31f64b7984ce4416f24fa9c8fe25b773c82246fd70764cc022fee648fb5a64831b5cf068ac4b9a05689ebb3b0f03f0fa5383f1f3c63a9eb5c118524150a834ba5389312ae7012ae705854aa3070118a3721f40e5fc74c527d343562b6c2696d9c2508f3a8d38c7ad16325f5a948ef125631e731df0988526096d48c4991fbd764734523b530436044320452609ecc8081cc100a8f68eed1532187a026a2e0b590c40ed6e8ceaa6c0568b4d52bd2ff1c6861613ba1481c279b7dbe86dff4b092f885ef36dd045ace16534002c23c310c5f78089b805e677c6858754ef367b355659ed05ec75a1f97adf994b722aa43d8dca9680ca92e09cf215c63dee0b40113fcc24958d41132ad77e4045a5a1b3f96cc27851a89b4dd341adbf281d3b8867f34613fdb4c07e8d86288897d2d484326691c783c25d9a8e13ea77c35ae2a1a6c81b0fc85b1cd4a3d18c0eda195bc6751928e44b824a6d38b7be781c58edd2f42c81e995fe426fac39d41dd4e1cb4cd7e1e398de4ecdbd9405d5d03365e9f072593a766d3456873702367878704e01e917caa3fb1e00beb22c486486f1e8bec70099e54122338c47f7dd09c8ac081299613cbaef2e40e6f2209119c6a3fb6e0664ae081299611cd6b80590b932486486f1e8beab0099ab824466188feebb1a90b93a486486f1e8bec701996b824466188fee7b1290798449325b91ca2b38dcaee344526c7732c52a22673633cc6b3608a0f5c8e09c8868b089648cca3f009547edde791f078a8ebb1ba5d2d8ecf96630667474b00e4fe913ca5311cf06b6794cd0080de3a9889b00a16b83466818a38e370042d7058dd0309e8ab811107a6cd0080de3a9886702428f0b1aa1613c15f12c40e8faa0111ac6cdfa8e01841e1f3442c3782ae27180d013824668184f453c01107a62d0080de3a988a702424f321d8f34868f2e95d89fd0e84dfab2bb93ac31f2069822af0371c93b391dc15cfdd31fd7616c40ee7440de29bb73b863a2fdc961846eb0526176b8e33a535466819542a7a6c30e07a6df0e8d85c66c0276b8211de159bd6cf1f61cfa2e0415c869e6272916b2b173faa9b39594b32a68b9fde17c2e50315b6341f7420a1f99b5812d9e1edc730ac278a2e60230247cc6eedcd3dd3b9916c6588e5c60a51b83b129b9ec9c1783d41a3be7e56f60a567a663d99f779fb97292e87a4be33396c6e686fe05d67b567a5601d3fa3eedab808dcd531e0f6afcb34d12b8b7a4f8630df761a48c11bada6cc1ffde32b5de1734e13705915483831bc6486d03483d2788a41a1c2436466a0620f5dc20926ab0756a8cd43a80d4f38248aac1296163a47600a49ebf7b9bfc610fa8e901eafc0b76e7605d2eeb84cee3541a2cea1d4d51793568e25f18a4fddf07980ca4313664320914f28b8244e7c050d2b908d0797190e8ec194a3a8f0485fd9220d1d92b94745e09e8bc344874f60e259d0f023a2f0b129d46633a8dd1f93aa0737390e8ec1b4a3a3f01745e1e243a8d2e803146e7bf80ce2b824467ff50d2d90e3494ae4ccf89ec7b52f4476b608d57a5636d1bbed8c53b1d17c685828f0132af0e1299615c28f80a20f39a209119c6ad52ee07645e1b2432c3b855cac380cceb82446618b74ab90190797d90c80ce35629f702326f081299610cafb90890796390c80ce356291703326f0a129961dc2ae50240e6cd4122338c5ba55c08c8bc2548fd71a3c7331aeb8f0f06fdf15b8344a7d1c3438dd1390bd0795b90e834ba07ac313a8b4161bf3d48741a6dbc1ba3f32c40e71d41a2d3e80178c6e8bc03d0796790e834ba1585313a9f02746e09129d464f0a3646e73b80cebb8244a7d13d628dd1f91da0f3ee20d169f4a460637436060da57b4cd2d988d3d9d7feff629e78015bbb11f633311e242e85f7eece384d577467d586312a8dadcdd802e234ef3349653de2ae1f1a66ff4c5fac20613ee66625a0ee7e93d4b593f845f9aab61c1b64b19dea527647df4e539c7b3753243f0b2a9f07c240b2c1613a63243f0d48de1a06920d7a5a63247707f5fe836120d9e05488319277024b7e280c241b9cbc33467205b0e487c340b2c16e823192cb00c98f84816483d126c6483e1690fc68500e1f373a606dac231101543e16142a8d8eae1aa3723aa0f2f1a0506974dcdf1895cd01954f98a4b235f19e8a5d445611ba2876a2fd4121a1a7c1e1d41aec321823761368683d6992d84c1fb1a5e02c047747a758b3fd610c9c3816d0fb54505c80d11575c62cb51e70014f07854aa3cbbf8c51b90250f94c50a8341a346e8cca7d0195cfeece216cef6696067da5b1cd2c878171d8e74c52d9965139c67e693223acc87e6905ffdcad8ee6f0d3db87dbf7f3edbf9ddf47dad7221bb6308403dd35894bf0f32609eee0abeb2b5877f3ffcf38ec67a0d67f211d4bc47ab2c9c13d6589d88fc04e5fdcbde72185bdfd99072cf1259354368943a5d0d4e8ecd521114334f605b5fccb2669accd6e9632dd8b6da061f6ebab093d8c3c7cd54d1b508c5f4947d712da9eb3a7ed14924bc6b21abcdc7ed17996c7ba9eab09edcb0fb32528313b7adfd814bd2781a2fd6a3a3663ad200bed9fcb89ca86c1461bf5c6b60cfe01b4445f0b2ab5467bf1c6a8fd0b3885d7d3512161fda5e1f6df15ac423258af1f61aa42ea050aff1bbb9346b75e3748a3b17abd11a0f14d9334d6b56ff278d863017176b11bc30a38ad98c257b73700c5f8ade09cfe6a7071b7b111a46ac006df0ecee9af069be9c636abbc1450b92d1d5e313bea190bd9c086bb497a984ff6781714ee774caff6a484e5b2848bd8a705ecd53560cff9c9ec577ab687c1e8d20a5364e60332df4d47987836fbd7b94eb67f2c61d4863940f75c40e17b2629ac0328745808f309ed45a017b33d38e76c19ac588c4d4d3c012a96f7d34165768c19f270aff9f81614e60f4c5249673bc631ef470196b0eaa53c849309ad00611fa6a302e943f6b47546a7000a77a4237a8816df11acbfbc9c0931cefe643e6bda4c242ba3b648c77c9685ba669e0188fd285d7eb188ac20ce3c613e6342cccfa4c5468b4d51f908a8ad3f4ecf6984d9e99f3334d6d8390dd0f78949fa5a11ffdc3625cd39496b8cdd93910d4ef4633ed5e03a8caaa6685d0726be76a663e31f6a93a3189913ec7f8b58cca57b1c5979a81be4c7021bfd34382711867147c445a0e2f92c1d07dff649bfaf343624311d90f779708ec709e388632350a4bf08cef13806ab1a63c7e35c0bfad85fa6a30144cfb24efbe18cc62cb12ab0c4afd2b1bb073e2333d5332733d064c1ae638ace7d019d5f0789ce01a1a4b301a0f39b20d1d93794743e046af06f8344679f50d27925a0f3bb20d1d93f9474ee02747e1f243afb8592ced7009d3f0489ce9ea1a47326a0f3c720d1d93b94749e08e8fc2948741add1cda189dcb019d3fa7e774a1ddd00b32b7dd2ea06f57bac62b1d9065761f7c39232ecd7140c6ba94d540a3fd97f4d8e26e186633668b2dc080c6af41da6f7380c9215f63744e005311bf0589ce81a1a4b318d0f97b90e8ec194a3a9783c2fe4790e8347ae295b9903f40e79f41a2b37728e97c00d0f95790e8ec134a3a5f0574fe1d243afb8692ce1d80ce7f824467bf50d2f927a0f3df20d1d93f9474b6060da5ff4cd259830138d16df4338a1cbe20976ac4a58bde18ef34f6b1fb3369ef34d6b40cd1371c145ecb247d6a5be287716bbb9e60f8226292ca4e122abdebb87308dde26631fb9bc6052f67902390405683641b0b5f1d038a7d463a8a7d4f6699692ef6c696c5bf05e8ab928e628fd5d9699bdf3156ecff001eb46a50a8343ab7638cca6cd0f4a916142a8dceeb18a3b211a0b27a50a8341aad618ccae3009535d251d5f462a1827bca4a89f740b3a8a649fae0826427a49f2e835ac0d64a9491302f7bba0ad4d6b57667618670745ec71895c602f99782dabab6492a9b12ba030b6d6e17f28fa6106cc70183cb448d15eb1ac026eb98245267cf2aa3cd20638d730bd868dda0526bb459648cda234165542fa8d41aed0719a3f65ee010ea9ba4765f50cfcf6743bd398cc225aca61f47bc4bf0c7b33a7fa10d97b6bd0c8cb5036e00d6dbc024c522da085f4805db01bd4d9ee163ac25f007b0d7864122338ceb23ff0164360a1299060f9f3146e65780ccc64122d3e0b6b5c6c8fc1d90d92448641a5c33f97feddd077855451607f009c8a2282076050444311624bd282aa1846e22095811420a79104224241445ecbdae6b5b7bc7b5f7b2ae65d7debbaebd77c5ae6bdd3b73dfe5fd534956ff9373f2edfa2d69efddbcf7cbdc7b67cecc9943c3fc1030379484492cec49c3fc0830379284a971e3f9770073634998c4ae3c0df303c0dc4412a6c688532e74da37958449dcce9b86b923606ec6c46c7b7d09e27d9cb60ff53898d2e8cb64dcd4b43fc58f7892d3d2a8a642bbec270d9478a2d340f705d0fed24089834a1ae83800dd5c1a28716049039d08a003a48112037234d049003a501a28312847032d02d041d24089834c1ae8ae00ba8534508dd9e7230074b0345062c79e063a1240b794064a0cd2d1404703e8569240d394f643f36171c31069a01a5be81800dd5a1aa8c66be828004d9606aaf22e0fa0db480355d90f05d06d99a003cdefad744a1c88d22a9d1e0bbcdbf949294c6dc4acb9fac510e0db9ebdc436da522a169ff288054fb50b6bed933c2df7a2ada87b06fa9e439990eb9ba6a5bcec06cfc5eef49e6b346f82bf3520ee2067fa2d47e59ab941706a0f9384a971cddc60c04c9184a971cddcc680992a0953e39ab9818099260953e39ab90d00335d12a6c635731b016686244c8d6be6d605cc4c49981ad7ccf501cc2c49981ad7cc6d0d98d9923035ae99db0630737c640fb71c7ec3e01bb15dd20693dd813297491915f68caafed9ad7cece63df625db12758b5b81d5b877d2245890b8a38f9851eb2d342ca048bc0dd10a282e07c89da440125b240d3217208733210738c8e2f83b2f301566924914e2b6fbbccf8887e06cb4bd34f83c3c747ef0b13c3864190f97567bcd1e25c2ddd9471a76d3098cb62462130321b4a0f1cd708bda85493ba819da30486cf1aacd04b7eb5c4dab13701a27dfba42dbddb523774c6cd837d518b41b0794237c74f3a3ee54b82d4be7ea428d871b569e9f6daab2fccf5a8e60f1bd08f34423997cedaf67a9317f6328708e92c4491dc3d3380700e768499c992a399f841bcf18499c192a39ef00ce7c499cd92a39d786937dac24ce2c959c2ba1758e93c4a93333b30638c74be2a466b4d338cf06ce099238d354721e0a9c137d4796a6061fc33a1a63dc61eccfcae39bf1d7b8517cb8fd3e75d3005aa9889360803989496bbf2834612d177d01b8ded002274b3aa1735566630c86ced06e9238a9ab91689ceb03678124ce4c959cf7c0c95e2889334325e7a5c0b9bb24ce6c959cdf01e714499c592a399f03ce22499c3af32cf705ce62499cd4bd39699c4703e754499c692a399702e73426671f131518b36957f5ae3c449d29379eb2d768f391bda0a7b94747162dd1bfe4e01258d3b12793b29f69384f6e1dea8ccdf06d3c5bdeb8d62a9195b69dfe1ec0ba978fb572116bac95a5071a2b644d86c8d0de522035aee178045ae43e522089776f1ae4746891fbca296b4b4c06a451ae056d723a937248a33639cb345d91d9f6b59bc4d39f163a4e8756bb1f933aa5c97dbe25c8da764c6be4058f5fe07600a1dec686b2f86b817f868f4a85b690f8bcf82f2f31b3fd75fa692b3a5f3709c2993ea6dfa2165ceb5aadeda7e6c7f1ca3b59dfe024b80e97c82902a931bf3d0694b37cded262f13e821d3395ba16dafcb5756cfc0005c121e7041f4b5dbf82d86a27b0a8cbe19a5a2a69ef2fbbf846e34ef35da1ed964903d5b862a40780964b03d5b8c3e78f10f8ab9006aa71a7f99f0174b634508d3bcdff0aa095d24035ee346fe01a1a9306aa31e2ff29b4d039d24035ee41fb3980ce9506aa717ef42b00ad9206aa711fefef00749ed4d2e469ccfb3d2daefa10d0564ba5a516eda1d13e6b12b4f3e56c2ea431c0f735b4d21a19b50d897d515a6dc3a321e2b4bf8f3cf8ec4eb56c27095ae1828e0d338787aa72a8c440c86016e50a1815d5caea22a5a98c7d5643db5c280d5463ec733e80d64903d518fb8c0168bd34508db1cf3900ba481aa8c6d8e75c005d2c0d5463ecb30a40974803d518fb9c0ea04ba5816a8c7dce02d003a4816a8c7d5600e881d24035c63e6703e83226686f1325db749e9deb763309bc8364578323b64d5a35b8236014bfbc2303220d17831147472b5894bb4068ee605f05cdaa5c24de1ea8dab545ed55e18e816be5217eaa1366fbbf5ad2f8f2e0743ed4479a6cd806c31dbd9b9bf7d1bde0fb73b8f91ce6a335a69b74ffad91c6f7219ccc87cbdd089d78dfa69de8fbc3897e0493764bd370917755f0d0d92e9bc3d275f605def5c07ca48fb1504bdda3c619c9369f9e385aa765252f864ed251d24035a679ef0fa0474b03255e5969a00701e831d24089f1241ae881007aac3450e2ac110df418003d4e1a2871e44e033d02408f97064a9c35a2819e08a027480325ce6bd2408f03d013656cfc5bec86a536e3b3c21d6e1e376c77138b760ed09ee4638c9fea32e33b4bc469068cf14f9653304a6329d3f92641798a8f82512d2f4e6c587b4b6361f22a38adff2c09536361f26ac03c5512a6c6c2e46301f32f92303516262f03ccd37c4c0f4771501b442e3385262cb61721b6d6f7d4185d9a0cf1cfd399bcb6d2ed28976650153c9006454b2cd816eedd67f898786beb8887ba913faddd65c1697da6244e6a3a2b8d731a709e258993bab7378d73265c15ff2a8993bae090172d02ceb3257152b74aa7715e039ce748e2a40e24699cf702e7b99238a93565689c2f00e7799238a9553b689c1f03e7f99238a93565689c3da0a374017fe2a230f8b15d4eb32a986ae63a64bbd6b834f83c3c5c7ef0b13c384c190f949625dcd724402f9454b743e75654db41b4fd22499c392a39fb01e7c592383355723e0a27fb2592383354725e0f9c974ae2cc56c9b9269cec9749e2cc52c9f93eb4cecb2571a6aae4ac02ce159238d355729e0a9c5748e2d4b90dc072e0fc5b47a609363cd1894bb9781567608879a514ca7495943381f22a2994d48d536894fd80f26a3fabe03a204b9d16377a02ae8fd7f848f1b7bfb8c2b5c3e8d8d5f187e85bc3910478d7faa80b97e2eed7e56661b321b81077a1c260db5e30c2b9ce4725cd963b3d98fa8795b3888b6056269158af03d6eb99acebc40f1096cf2933d356edbb495c123382d51ab783d3fa061f4900d1d2ac70bbd298695cd515efd21ab7d09d08f7e81b7d5c27dbd609d707590e9366374981d4d8220b00f2662990c405d634c85300f21629901a4be31e0790b74a81d45818f75a80bc4d0a2431bf8c06792140de2e05921883a441be0290774881d418ebb90520ff2e059298b047837c1b20ef940249dcfa9e06f93a40fe434ef55f8d798f7b03e55d3eb2cbec43569f8f9bc9bc52d2309741e4e76e4998c4fb370df320c0bc471226b15749c3ac04cc7b25616aac98be3f60fe5312a6c61b502960fe4b12a6c6c4fb32c0bc4f12a6c6c4fb298079bf244c8d89f7c580f980244ce2f887867930603e280953e3363a8700e643728a766a0c02ff06940fcb299748bc93d3d6665c06e3f247645555c956592ef159689b8f4a03d5582ef179007d4c1aa8c672898f03e8e3d24035964b7c02409f9006aab15ce29300faa434508d79124f01e853d24035964b7c00409f9606aab15ce28300fa8c34508de5121f01d067a5816a2c97f818803ec7cea51863ea4db97b89e3e3019158f0e492e0a37d1a0d8fb61db3cd7089f09e67e26d661ad7052a774f5d682a5b0982685ce4ba372cbb7e414e8944e2a94d2b91381c285f6452f68f53dad6680b24b667137b621ba56d627f329cf62f3161073739edc3da7ff96641fc21f6803691aff5d0b2c6f9a3c32184f76f5fc515a38fe14b99649a96fb2467abd172266f85fbfccb3eb2d590734af0434b591e7c660f3adf1dbcc05d7597a8667d1a585f61b2f60cbed8c3fd38daa84c77bedaf6700d7dd5477b8caea1e1f5324c481d6f4637db7dca3219dcab663716eb30b8e7bfe6a7a26f46a36e9487ccf2a12cbe54b8e9bc2ea7be8ac6250b23e0047fc3c7d808f3cc8bdcc16a82d3db6ee5684ff9e2b88ce68cf335e066f3a6dcba54c4d64aebd2af8413ff2d3fb5a753fc5f3769dda057a165beed832fcd64fae7a3053d5e00be773a32e831dad832ddb3e22b3f881da0212ccaf3e1447ed767bf32d6600b89d6624944565a2c291bfa95eff9d872a7034e6f5a5768267485de67e2d9eb7be3a0c564d7d9a90c9e44dcd19a463708e83e9053be2b55e5c2d733e0daf8a1244c8d0b5fcf04cc8f24616a4cfd3b06303f9684a931f5ef78c0fc4412a6c6d4bf8300f35349981a53ff0e01cccf24616a4cfd5b0a989f4bc2d498fab70c30574ac2d43875bb1030bf9084a9318ebe0430bff4b55f6bcc345d9e657fe661144e5bacb50f04d9be9254bc2b87792fa7857c474044e86b499cb92a39f703ce6f2471527b9a34ceb970d5fc5612679a4ace5381f33b499ce92a396f04ceef257166a8e47c14387f90c449dda08737990b9cff91c499a592f36be0fc511227352d95c6b90974947ef2b1d420c7449bdc8713bb5e4641b4f9f1ae300afab92357b8354c9ed2b8fbf53ca0fcc5cfa2970e6889b413b9cc24f87e95524f8a1abda4b54403d7c4dfa450a6aba49c009436a82782324d25e54640992485324325e50940d98549b941f04561f0459db1d93af650b63c52a559e0eee231b3d4858363ee2b7db79c6e70cbe9ca641c609aae491f1f3c25cf2d018cb934e8bce060656e3175497cc56599d19c0a550fb86b4839dda90bb568a77b4f38ddbb49a14c5749590a947f924299a69272105076675286e92745eee9cde7f0cc75d42383ef95aeca87cc0f3eda471297b9d2327b36816be79a4cda4441d8ec46ad55f350723f1889afc5e4eb03f7f5f1264c882a7649f97355dfbb3705c01efc531bb78a9816688c0a5e7499eb53461f47060fae0c9e54effa9a7566017b14445b76702ed0ae2d95961af6a0d1de0d57cd757c5c35d34daeffab66ef2412df009898e8c9e41b0857cdd677d898e6fe8d990a772fd73d1eba1c4efc5eec317b6b3dcfe89d5233cf6c25240a6306f43a7bfb68a5c8185e418b823ee844d7dbb44191f07b85c66ec6b3c4b5d7bce015c40cb560e2faac567a145c04d6957a7ba28e9768b7a7b7e102d0472a2d354042a3fd16eefceb3169934dc32c5f7b9b5a149cfce52e78171ec6befcfae010a5101bed5c9bf2bd0c1789f599dc831cf73877a5b55b459506ff0fa3a565ee50d156671d34fea7f5157a407bdec04794aa6d553434d65bed026d75431fddae9616388c72d7da05dc537e19abdb950e8c1b311957576d352f78e202d7d5a242bedc95958d09fdd78d7d0c52d3dca9db59b64639093a519bf8e84435edfeb7a51b45bc52d23a518fc129be2993364ad36ab8435738b59c986cd63dda4f813bf8664cccfecd60aebec3a4177636c0f665c2e23eb0e1415ada3fcec3f59436d3940cd7d37e4ccef54c14339de1be617f79896bb19e08691999b7438becefa3b3de520f130f47bd05d128e700e5e64cca2dda415914fc4e7b9085a620f82c1ad1d772fb9fcb69f153b8cb0f6012471533a250498d0b8734ae4fd0b0cd6acc6eff064007fa9975caf2dfa1a7dd803603be41be669d700d5e5b82777abb4b17c2fd7d0b1fdda5b616c8c95559116b10700e96c499a392b327706e2989935a639dc67927749fb692c499a192f31ce01c2289536735c12f80736b499c592a399f06ce64499cd44daa689c7b01e7369238d355721e099cdb4ae24c53c9590b9cdbf908d3e1da3c3b4a2a8a8f98f48e840e03c2ed3b66e6285c38961efc6b079725ab3e1607079b6bcadd5093d83abbb2e63487c09ce65026ed10d330a634cb349d7a6bcf32327d93744702f50e52f297a8777cda54f27b10791a2685927ab7a7516e09ad32450a25f54e4fa3ec0394a95228a9e3771ae522a04c6352f66da6d31455b6b473ef8dd31a3477a38e86905d3a13b5b93a6e8d2147b97b79b59f9e29ad9d8e02d20c1f3dd3d648c3752325c1cbf3588f9556c0f170a0cdecc8ab69c3794e8d6524aaa1bb94e56b081acecfdb032d8e9fe49a33ec5e3509c26c1f37245cded07cc1466fa5c868a85b40bbccf1b13239dc10bdccd82d5a1295d76b7db54eda6de86eb856e6fa3ac1b1426b893ba0e63bf97020dcd147b281252c777d4cfb52a31f6b5f51f7365c2777f29b29d7fc55726cfc09deae961358b469403b5c6a12223508420bcdfd0027ffce5269a941111a6d09d0ee2295961a05a5d1de0017845d7ddcf56d3ca9732d00df150847f8d9ada90336fea56d39900b7c793ef8325c124267c9884b81f1cf4826dffa7002573513d1d45c0cea36b8c18cf2730a67f86f83b42be07b700a8ff6913ad8b61498349549300f02e61849981aa3964f0166be244c8dc56fef07ccb192303516bf7d0030c749c2d458fcf616c01c2f095363f1dbfb007382244c8de9813701e64449981a8bdfde0c9893246112374da361be0998932561e62ac47c0b3077e347285b5b08d3419ba1d1021c5b006d818f49b596d67044ef7406b3bf49db38f500580d57d8b14b61c24355394ae2089d96b37e2584dc76f7b187427b52af88b7225a7acbce107e9b220d94783ba281ee02a045d24089a10f1a682680164b0325de8e68a0d9003a551a28f1a64403cd01d069d24089a1631ae84e00ba8734508d49ac2900baa73450623884069a06a07b490325869169a0e900bab73450622899069a01a0fb48024d53dab11f0e43cf7da5816a1c7ae602e87469a01abb4dd900ba9f34508d1dfb61003a431aa8c6a1673280ce9406aa3138b22580964803d5d86dea07a0b3a4816aecd8f705d05269a01a879e1b02689934508dc1917500b4dcc70ae470930aab50e40e556334675e4e83816605936fa0f9bd652189a73b2d476306b4ced91d3979dc300393d89d5fc1a2cc8779f84a1f57ce68b3b48af81a91b246a478f5d4b8cdcf43d036633eae9c76fb7defe957b4c50cbf9904df1c1fb9954daf9c6dc9ae240e34695945f743cb9ceb63e552eaaa5576b69e01d62ff0d042695b4ebd062db44a6e0bd55838f74968a1f398b4ed2f0fa13198bc3df442ab2571e6a8e4dc1c38e74be2cc54c9f9385c476b247166a8e4bc1538f797c499ad92b3079cec0b247166a9e4fc045a67ad24ce54959cf38073a124ce74959ca701679d244e6a2a178df360e0acf7b107086edd37c5bd883a5365746fc3bb27dc801631117b9bc4462a9e7700a18dd10ba0052ef63d466f7ed33e9b13372ff8adf3dd57d5ae751263ef6b25b14e6e08182f61d2464571edc93d3a78d0fce0b88506ab63da2a30f68025ee004b4da24666ad8f539fd67a8743eb5deae376d4d2cd6864f0d4f9c666c695b8c01db5ac238d735b68b10748e2a4161da5711603e7819238a93b1ed238a743cc7399244eea061734cee5c07990244eea2eb234ceab8073b9244e6a0d181ae75dc079b0244e6a85611ae773c07988244e6a0d571ae787c079a8244e6a85611a671274940e931455ca55b94e7e0804440e97c499a3927313e03c421267a64ace874c82f348499c192a39af05cea3247166abe4fc19388f96c499a592f30de03c461267aa4ace4ae03c561267ba4ace5380f338499cd49d91699ccb80f37826673fd37085bc75a833367ba3f11af9a6914f7da3a34f61b0790293759b46ac356e2ea92cf0b0591bd1fb4c142bc35f86bf2a2ff86c814b9fa126265cd595953403c3d11399e05165c252d3fc06ab0d87a2fa66e607c2c8e9242990c4752234c8fe0079b21448e2b59406b913dca24e9102a931796b1840fe590a2471cb001ae4450079aa1448e2560134c87c80fc8b144862379e06d91b6e36a74981246eaf4283bc065ae4e95220895b53d120fb428b3c430a2431879d06b921409ec984dcd8ac2ee0d1b027a9b10bd413c6e56749c2d4d831ef05987ff5b15145db46381a6f3b8fc2497e3693728869182f9a659a2657b7a70c338d9a9686bd042245e730a9534ce388674b907641775bd7d57b0ad40d65f10f05fe737d5c81dbbefc5b5f98791fb8029f27099318f9a461ee0b98e74bc2d4b83c6c12605e200953e36cd26e8079a1244c62cc8986b93b605e2409931809a5614e01cc8b256112070134cc22c0bc4412263122ca4be402cc4b256112635034cca9807999244c62649486b917605ecec4ec6f9a6e2030ce6d999a1ffc1b738c65c1fb9def0e6cf3e1bd6c2a40835d6212b02bf86b9926050f2875e9d9b8f36c87d584a5ed47db1d58aff0b1e2aea5301f1e8e5e99ab3b8b73229cfe7f6372465ba8da6d56bc6f7e3182c5f732444aaf64f2f572efc65e2de7ba9759eb1466bb7d18ec93f4453e378013f92a1ff1fa96eee20d4f6462579d7612cf8293f86a2665fb8b97e9dc7ef26338adaf9106aab178d927007aad34508d8577de02d0eba4816a4c3d780f40af9706aab178d9fb007a8334508de5f53e02d01ba5816a2cbcf31280de240d546369a8d700f46669a01a8b97bd0ea0b74803d5585eef0d00bd95091a6d56b9d054063fae6dd73a266aee266d3c7f03d0de2695969ab44da37dd824686ff731e1d1b6986736b35f4a0b96ac01c1923b246112fba434cc6e80f97749981ac3785fc215f44e4998c46b260df37bc0fc87244c623f9486f91960de250993d807a561ae04ccbb25616a9cbf7c0730ef9184491cbfd330df05cc7b256112e79068986b43d7e89f923089f34734ccde80f92f1f93c56dcb94d3b85dc04f7092dfc7a48c4a93b60419bd53ea22c4bdbb90188f82cca1fb3b76f94278a82a4749ecaad3ea105f0127f703b2a29c3acb3d5e04a7f883d240352e5fb818401f9206aa71f9c25900fab034508dcb17ce01d047a4816a5cbe701e803e2a0d54e3f2850b00f43169a01a972f9c06a08f4b03d5b87ce174007d421aa8c6e50b6700e893d240352e5f3813409f62820e344d079de12c7b91196d26ba7c22bb5b72f83dcc38ca0b5e41cc5093b169b94587c140f469262f16d3ad77e92fb6b2e6acf818deee9b4c4f8959c1423cdc24109ff1915194e1183d6714d1d67a6c056df0d98e8c2b15044f99137c6677eea6c695682d310f4274cff123f0a56e8d91fde5f685e6054f59127c56da49d2b586c069fdbc8fbc4bcc136e29b9959e1d4cbbd5e400e70b4ccebecd7016c71d0a4c45405be20e5ee47e418d0fd4212cd42ed03d7ad14f326baaff5b0f6d33b41381ef251f2b389bf62edbb286933856a75d3dcbe0aefe6f1f77f5b64d066b5c3e3306ae9c2ffbd8b0e27f59674c9ce4a0b5d1ab01f615a9b0c4e9381aece500fbaa5458e2a580063b0b605f930a4b0c84d0602702eceb5261356ef73b1660df900aabb1839509b06f4a85254edbd160cf05d8b7a4c212279869b06702ecdb52613566cb2d06d877a4c21217edd0601701ecbbbee303cdef485fec822d76a05be10e378fdb93bd89453b1b42d5eff998d8c370e06ec1c7c5c167f665d7c723ad0b5d5bad36f9f16856b98fc0206dcdf3c310d97a9fc9db33f8628adbced2ce8e16044fb3ad359adaa3c1d136b1ec0fa7fc073e22aa99f119d1aa40c2db5c28ed8a791ef07dc8e46b5ccf3816bc8869c0d8f2c41e71784a9bd83b16ae961fc989a66acc52aa8616fab18f69bd96a69b9b1640d15802a5105ae62792387355725602e7a792385355722e8259a8cf2471a6a9e4bc08383f97c499ae92f34ee05c2989334325e733c0f985244e6a4e1d8df32de0fc521267964ace5f80f32b499cd4cd06689c03a1a3f4353f7e94880a35bf84ac838a4ed0e247761c18f17ec3e4ed6512e1393b7aaff21502a1b5cc6321f4f6ad8f6d305a3ad11b8ed5a95d24da687d3b38cdbf9384a9714f919d00f37b49982a775504cc1f2461aadc551130ff230953e3ae8a3f404ff34749981a7755fc09307f9284a97157c52f00f36749981a97857f0998bf48c2d4b8abe28b80f9ab244c8dbb2abee130bb776b74f0fc26071fe502113614516aa2f517b5c1f7c71a9b5258ee204a83af2799987bd6cc80639fe0bff6fd05a607ff35f7fda4a4dec12b1a6316072fcf7ed71eafcc1d7b5ef053fbca6a4d4a5af090df6c835837de2092dd1c695e606e131ba79872f7db9704cfb3afb9cc2d8188ea7bd6399264b7315c61f0bd3a631749d8df60d3242b839fda771c334b61fd4972d29acea9dcd4c7052c6072fcb5d69b30d9b2b914cb64c75d180fef24bba519d157d1820cfbbca9ee5524bb1508a383cf2adc2bab32369e615f9555a8738fb6c7b40981935cdbb2afc4562b2d70afbe3c38b67d442232929cb456fcb1e1df26fc0bd6c65f49cb8b449293d669f273fb370d2ba22627adedce9ff9eedd5604168944d3e4a4f5829f85ef27f1dd84d2ee6e31409dfb1dbd9a796d93dd5faf32387659dc3d7f556427fa0ddd82ef8e8a87266a5db34e4aea136fc9f611e1314a822394b88fc5abded7b0f4e0614959c13fe12ab91d56ad8f0b5bfebce0bff0abe8fbab3fa66dc7ad1fcd046fe34f49cd5fbdaafeb0337075ef28bc68d8e757b89858b93beaf8d5bed3d5bfbf96cfe6755af9ab0ccbb07f8b4efdfeeddfbd4bfcefde65985d1e9e94fa07b4bdd5bfa22ef89bffe8fb65c3d34f7c7b2e74d7f41af748fb327f4f7beee1aedf78bc98fbbdc3b264b6e53feebd77c56b589761d9ff6b5b6eff2b5a83d996c3a3854ba71b1d7b6c1bde5df37f87c6ef39f1a89af89d3f6a0b78b75bbd447fd7cf69f96879c157b3dd7b8db9a3ce33d1ffec3dd2f6a5ed25a81bd3132ff8e50dd6fffdff4ae17e6f8abd52fca9c1c994624fa6eeff6fe57f502bb7ff6dec7aa85383e786f74cdb835d107c6e8ff7ddf82ea6db7f01f01f2f22f66f0700 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/be04a46bb90226248804f355bd3844dd.asset.meta b/Assets/SerializedUdonPrograms/be04a46bb90226248804f355bd3844dd.asset.meta new file mode 100644 index 0000000..79f3bc2 --- /dev/null +++ b/Assets/SerializedUdonPrograms/be04a46bb90226248804f355bd3844dd.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4111608a0858b5b4cb1b07b36f6bada2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/be7883807ac3b764bb7af9b46042b620.asset b/Assets/SerializedUdonPrograms/be7883807ac3b764bb7af9b46042b620.asset new file mode 100644 index 0000000..b7e55a6 --- /dev/null +++ b/Assets/SerializedUdonPrograms/be7883807ac3b764bb7af9b46042b620.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: be7883807ac3b764bb7af9b46042b620 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cc5f5f8e7dc7bc1bdcbfd5c25cbb65c30e022375c916463b08d2d4bb22d2c5b42c5d874d38be9cdf4de124248020112d24902092440480209a99084968424909004c27fdfec8ceedddebcbbdb5bbdd5acff3ff963adb6bd79f39d37fdcd6c9b7ce1fcc4263bbfd68b12b1484c15eb44a5a8157b9cbf1639c7ddce3ff74c5f5f2bea9de30ee777b9736fb2c8cbf026fc8c8f0d747e2f77ce1a44a3f36693a8708ed5f27ea9a872fe5eeebc5be59cc1d5edceff2ae7a9583be7a575a258ac11abc58058bf0c22d6cb971ad4b518c42bd6c9f9bd50ec77ee5649a520907c796b80f3abd4b9d320efed7694d6cf6d149b65b4763bf72a9c77ea458d23739b94d8a9dd1421ff10ee61803a0e54c7feceffceeaefb6eaef4eea6ffc7c7b751c94e5f383d17b9dd1df40e8ce34ef0f51c77f3aff3b387fee41e7f0ee7bea7ca82bafcdce34b286abe30875cc53326bb3d0bfa33a8ecc10df7432462159d930eba48e63d471b4d2b72ec7f0c7b98c62b7227970fc17d2670c0abb33ba0fc7b101e2aed3f1234f3a7ee4a6639b432afdde54d7c7abe304758c2bd9ce337dee55d726aae3b00c7a4d72df13b345c2669d30db6a8e93d5718a3a4e55c7ff285d4f41e74175d1699aaf8eff5661d41baeebe7e17e833a2f50c7699ef42a54cf35aaf3e959ea938dfd699dfeabc26842e70ec7765bd3c8d2e9feb127dd3f56ef5ee5726cf7a4273ed8fe4c726728797b7388c7279e787ce2ead23eee792e930e5afe4c75fc9f927b2a3a07b9d7f98c5b3bf5de63eabc48642edb0664716f8e2ba793663dd70da7435ff77a877922d9966767d053a7eda79eb4fd54c9ad517275fc8f74cf639af3482407dedf972c17fec472e539c8d56584b6f14c7aea781da38e0bd5718168cec7632ad5b5a3d571be0a332692ca00790eff8f4abcdbff2a9fdcd2a5d1224f5a0f53e1b6c92053bf5fac8e9db37c5e3fb33880ce4bd4b14b96617651c7a501c2eceada42a7f73db6303783cc652edf4e8d4807474ee733d4f972753c561d5728feed3d76a0db3fe9ec20932e2b952e02a581a34b975eea7c953aae4ed6c5694d26ebb4bfe5748ab555324f43e7706ca7ae9f8ece41d7b56e385d9e5132d7aae3711e9d4bf874765ac1f2bdeedd906d64f35e3afb2a73e3d7b5c095ddb54c5d5fe7d16d4942ef4ec5e85dad4736f9e178c5a2a3877147a58366bbc1f3dc19e81c8e1d12e1c9bf9d77bb69db1a82aec3bb67a273b8bf3e4b5d4f14a9360b72507923ff86b055f9df4da7e746919af74cefc211d591f26f90f7ba7a6f9348adc7f47310b7b3d039dc3f21cbb86d36e8e784db7d7e9a774f12c9e54f71c21e3abea8ae6d51fa7411c9794b9783a312efc46ad4b5adee794fad4bb97a07d9544c95813d747dba4d1db70b733d5b8938a8fce8f4169bc31efaaaba5691262c5d4feef0c4bb2c21a7eb40a5bb2ec7745d36917816ae55abe36e75d46df3dac4b363755b5b33d2ed826e22b99dbe0b5d87637775ff6c740ecf9d9c90ddef59754dcbd0ba9ad253b7d575dc4d65403a3b6b709f1db8499d37ba6c7b3eed915b2ed2db6d932b67bc6e5fed75e5f46ae753cea9ae9cb84edbfdee792fad8f6e9729bb15ba7cea2192ca72a1cba39ec86e7aa06bf0ec391ebe99744bc7f12c57cfe6f6bd4a5fa1c3588064f7577af44aa455739bef4c740fcee7a3f8e2f8a5d3e5803a76cf109f01e839389e1b20fee9eee972fd0215b7de22a9cf23cf1d3b3962681a59170aa39df6d1fde58bdcfbbdb57d5c8ce204611c9160dd6c4b97a87b7d50bc7579d8175d3b5f5deb97b826e5c1bd4b3de973c073ff3224c374ff20d2c174ff7275fd5c57f73e3a5e5778e2729a47d7be22a99c1157a6c6553e83c33ecf475aaa7a34d6df9396fd55babc9546d6d5e6b4ecfb913abfc69396d77ad27280212d55b923874675baa93a2786c70575fa0e461c74dcae27d252dfbf01c935ddbf11e960ba7f28392dfbe9b6d94d445a62fd715ade9c1a57f90c0efbfc2cd2528fbddda28ea676ef6dea3851c9bd200bb9b7abe3c969e40ef1c8bd300bb977aae31d69e4de45e89b4b78dad6d5184c4c8f0d34a173c76efbbf9246d6ddc268eb03f4b8c13d22d9d675bb42dbfa50916aebf7a97b783ced28756db848b5f511c84e74197b3f7a06dbaabeff00926bbaff20d2c174ff219164eb03e7abeb9f11665bc7fa635bff6c6a5c63c33d619f93455a3eece1acf9e689e47e4e9e9b3e03bded9f4691be6efc9c2b3faeb8884794bc914afe45e81c8ea33ce18e72c31da4c6bf06abb259769ae0fa64f7fa203dc7f079616c6f0d2af33cf7a8486e4f7dd1c3ff4b1e5b1993b0b7e6b87c01ddc3711b2b92db246a8c30360ea5d55874cdd4e6cac4f57175fcb2879f9e7fb8189dc3734f22fd751e7b421d0f24eef55ee649df6e488fa7ccb622754569e6bb8da4e3fc950c71f653268d17c965d278d70e86a41b9ffdba7ae6609a67bea98edf52c76f28f9baee3b1b9dc3fd6fabf3099efb13d4fd3b12ecfbe7213db46c78e7922ce2afc71fbeab8edf51e1e872fd1474aecb156f1d916b3b36d77b2aefc52625db8f3c77d2619866a86db122837d7c4f1dbfaf8e554ade640f03dd364e379e9529ac34f18a4d15c963087aae4af55f6353d47dd5468e15789ed7f347cfa9f37ccff3859ee70bd5f33f50e7d3929f173f4472e0fcf944dc627a3eed05744dcf5bfd28c167c4c3eadef4e4b0c58f4572ff4ef7e1f4dccf65e83dcc40dfd7edfc999e3815a9f3cbd1391c6779e4ea799de73cf7b5dcd91e7df5f8c04fd4f1e5441c27ad44ef209ee2a56499696dfa7925638e7ae70a74eed8f48874ed7ffdae1e2b3b52c9b8129d3b32f2f25c7df366d0b262f33cfce6a2eb70d4ed97abd039c8be388d7e2fa8678ff6c4ed68f5ee3359bcabe67762f33d719baf647cecc66d64af34b274bbf2a79e34d4360bf2161ad255cf29bda4ce17281dae46e78e0e2375fdfe3361b6ed633cef5f93fcfe283d27f873757cd5a3db22913c16f60b75fc256d93428fab6addd19857b37eaf79f4d3e35c5aefc52adc6b911efa3a1c9788e43a4acf19fd4a9d2ff5dc5763c3c6b9f67479a4b73afe5ac9bb2ecd3bd9c8f98dc8b9ac167dd4f1b70164e83189df0590a1dbb5bf0f20a39f3abe91838c052a4d9789e4ba18ce1d9b1e739d9bbe6374fb58b721e76708eb8f1ef9cb95fcebd139dc378d21ff491ddf49969194dff5f8f2b12235cfa8bc22de46f774defe037a0fce75b93c5f641e4f345d53fe49b1151e7e2b5c7e635f5171fbd8c36f4f067eeab9d84af49c0e6b15baf6aebab63a712db60a5d83e31aa5db0de8dcd16dfc068fdcb5eab91b51d8703c4e5d3f84cee13dd5ff89958864df272daf0ce954a2c2d4e3dfef79c22815893206fa717aeee14d74bf33d2535fd332701fb9161de1ba1a4f1ad72b39cc8c6960aa5fd789e4f68a9a738cadf7a4ff7a155f95fee375faeb76e6def4616bb9e2cfeafc7891dc1654f392e22f481edcbfd9677c3678e2b321395c293f531be8afeaf8887f9e42cf132a5f81d8892abc5bd0391cf13ce1dfd4b58dc8264e50c74dea7d3d96a76d74337a76337a168e2789e43ee3496eda4deae591addfdba29ebf0d9d43587f57e75bd57d3deea7f36839d2612bba06c76dea9d3bd0b9a3c34435fe31f12d22ac0af5de9de81c8759a9eedf85ce41eeadc9cfc7aad47377a373cd18cbb9c723c7a3576c3b8ae376a5cb13e9ed42736deec36f5661d5bb719fa06df2ddece419afbdac8eff5061ecf070d373a62fe520fb6d2563a7486e1fef5476a4c7f175d9ff568630943cf1813a7ea8e4552bf9f7a273389e2c926c3ea6c799b5edef1249e5b33c77f49afcac474e8d478e9ecbd5e9b25bddbfcff39e9e177e4bddbfdf4db7c9af7be29329de49d7dac7a41fcb32a7375f2eea443e3859c9d1936c5dc9f59b999dc8417407f8053fe365b08d62bff36a95c9937b9df4136f14d345a1d1937b909cdbd6a12f92bfcb9d27aaa5d0076229413c9512042857e3fcab426ee80dcef5a5d28b1d1cd1ab9d3b53c54ae7086f6d15d3c446e75fb294f54eb035a2c9392b737ed749795b1db5539fcc14257059f7be53e2c8743dea773b5734d03ae7bc466a582a7fef959a5649ed973bd71aa57fff1eb1432c748efb6468a971af77fe368559a6909975343bd653d75df77d9d4cc54e6c40fb7c698bff9722ad912280be03e40ff869972f5b8a97a6a4c4ff31740b19180058ae644c93c86249d70a45bef4df2b4921e83f8ea93134dbb7cbbb48cc481b17331948ee21320689143e6fd5ea5de3ef8abfd63e396ad345be1cf61f9a216ae9c082bcb89c9df71385f6eddb1580a25efc31137ee9fa571a227ef7b96af99cff04e8202bbfe4049043c7654ea9b616559eeba4f23552356f644a9d279a1c715af5b2a468bacbabcae51bfa4e4ada1680221d65f2a456be99a24825501b5302c9f1b3b256c91fd432b0f449d4a939168924ca972daa81690c990a4b36b5daaaf696ce6a8d8ffd79ca8182510f3ffdf89a3d6557bff3667b73fa7491e9934ba8540ab535a55097b0b350e63a235dfa746d8e57227de0c7ccb01b61e39974a008b63311ec1ab68dc3bd5a2905f2b97f86e07c37c95b0c9901f6208c30b30a14c2f606840580b0a7412bd1beb3472b508890dcc19438dd5aa782cecdb86134648007417bd2b87ba7ad5ffd9a7647133de9a6b995959eee37963a1d8415cebd72e7f92ad90885eb6b1d89e54ed8206f810c21d1d74c7e233d59984798e2256ba4da47521d837ac14135a3887732102f007bed6b300359c67933436f3a3374a6b259bfa0d9ac0b25b97f50c95d29c903824aee46491e1854727753b6915edf9b42c93689e116fdd742e7dd9d4e64f6ca3e34b4144dc333e9b3cba0acb3cb60995df28469d0c89f465436e9614a3bb838c4a4a437e906d349d793123c34a0e05e94b50d0b6a6dbd4dd626e311660bae58a6e23629c77f2507ae94230da59b202bba11c2dc8acba4076551479828f60a9b62a9ea63e5461172dc88acdbc12309829974a008f6315938101c45a9e535f291b491f7a5848f6e01e1fd28e1635a40787f9370a87bc68ae035fa009370a88cc789d42ed1a7ce4f8af06eb4f08194e6e30d9a7fb8b08d2fcd0751e5613c68793898923c21a8e421a6324216bf0758cb886ca75e96cadd7baac41a27979e2cdc31731d6ead1c2f078df4d87b8973dc2eb580eb152ab7a70f2b7df933b1990f1a279105eb6291fd04127f2cc0e1b58d2c0327cb32101c46d739d7dda9a2c53205aa6548538dda4008d4f39ac52a011b1335c9d46e4f8ce64c91a1dbc5862add875225cd544349f3aaa9184b53d20ca3b26c7ed02c3bdc2419b26c81c1560bc0566150bf8b6cc8a58433850e6784a9689035e269ad5a34b8fd7e90b75dce86baf2560bd85beb5469aabb1c03deab0ca7cc79a6de09a34a197990c200bca48779079484fb63ce0ed36576383a8becc0192b2a03e4992c090648c02d3865001feace12b1d691bc4566c353e465a0e4a66eb57cb45a9ce61cf5c4668abd75a4ed6da4491be877828376c67e4a1f5af0284a705140c1a3a93c3e2b681e1f63920ca50d3896076d618da5d49e1354ed7154893ad750a27e1cf357a28ea7841f6910fe741b7fc2e3545698978d8da4b1ea0994e0a34c790c9266911c6bce73fed73a6f4067a55ce6fe3c5919264a833c27af573b7f41853d193d5feb3ce13a12f8d173a2494f308aa3831ac5242add8e31a4db073ed36d32257cbe41f8b2b6fe844fa1d26e8129eda096857a039a253b55dd965c1ae649978e3ce9c5d324c74c2b65ca35c874cd13a73b55f899ceb1d1793a4fd60335f25e9edc6ab25e96b57ed2742aa5ff4293fe5d90fe6b91867e42cca7caad4586722be6b3dc2a300987e78b05d1f08176a8ff86cf340adb1213b661329c7db2e5da249f2f950650d5dc56ae6ca10ab2d0a057be1c45d8235ab34106bd05f0796a907f279a281076627e3d48c30b9689781b5efac7dcf082450771b9ac2d0ceda906d674aa505d6e2854637e0ad519545e3896ca0b2b72ca0b334d36270797ea5ad5e6e81c55226543ce0bdee007f7feb6dedebf1cfd9a918565b5948e93e4d65f0d722b61975c0314a630f5b50ded19ecc29759c29c2756c93c11a6e654be28a26aedd5865afbb1f6fe6aed59269395a38af5ad6ab2c552421866bbc664b672e8b3288bc46f493d4748d7d80659a856363b6ac1cf08b9d758bdac36ab9ceb50f0e2fb93e4fe5dd05e5a2279ef96e4217ee5b2df4b19f95a69e461c79332f4d95405709ca102f0d5aa9e4365a1124316fad867169a4ba95d1a54ed2329b5cb0c6a9fd1c19fdaf328e1eb0cc25776f427fc2893f08ec2dd5331480ff1684a302ccc4a696ec2c880ee2754787a8adb645f41f7ff2ae595fdceef1ae75a85149127dd9cb53f871f2d8fa1d86e30b0ede593ed7c0ac10901d92e300906f33c311bc169e6be179a0443fb6ba320da5fe027e1bffdb588c2bed980fd4e9fd88b4dc2219b9f14349b2fa6246f092a790925796b50c94b29c9e541252fa312719b2111c1a5c94f222ea78457188497f9147eac4938e4b74a53d93456c0d048a291ea769f12e31ae562bb9452effcbd57d5b99549e32330e651ad3acd7ef2f90a4acf2a939eeeaa2af05a833645b91c438310d7885dbe425d49a1df6e407fd027fa5594f01d06e16ff914be9ae2b5d3c46b608674ad94ce4e89abd39cab7e38aea1b4a9366903a78974f313ce5a0ae9c906a4b776f187f4382a12bb4c91801ac1c537d741b65a0ef895ab15617b6535ee1f6309a5418d490328d95636370cd6e6d82c28a590ee36207dc527d232aa44de13b4445e47a95d6b2a34bbfa537b3da5765d50b58f37498656c7298268754097d77fab6303154e03154e634ee19c40916a0a4aea442a81f71a12787e377f09bc91127eaa41f8193e856fa284ef33087fc6a7f0cd94f0fd06e143bbfb137e1225fc3483f04a9fc2b750c24f37083fe453f8564af81906e10ffa145e4e19f999418d7c1ba5f65906b5fbf6f0a77605a5f6d941d5ae3448ce97ce7361faa57abd9ffcf9a59e23b2f51c073f3a934f6aa6f0a921a52a53ba400d7dae49251f55f976ca9ace3358d39b3e33c10e4af8f906e19b7c9aea4e4af80506e117fb145e4d09bfd020bc574f7fc24fa612f3a28089b98b120cbbf3a5b405274bebac95792c4f7e7c10163bef51df3a840d27aae4c475b9f2c9d6034e7ae21a56cfe729ebad57365de358fb54e7aa1fad6b28ad2f31690d33af30889b6837bb5d49b71b62f22bcc13e355ab7bbc2fbd76533670a9c1061ef369607ba8485f16d0066a4de5ac7425ae662d67293fd23239780f2bb7b74b4bd9eddbeb347d997c30eb32f972592643c3944f57aafcae332537b4adaf1044db1a36b8ec022afb6a5b9f620a076cf62a83cdcef0596ed553c2af3608dfe053780325fc1a83f0f37d0a6f340987660d6c6919a859d344a97d9d41ede77daabd9752fbfaa06a9f4aa97d8341edbebdfca9bd8f2adb6e3415e89036d90c8ae4c94cd9242b28a862d60a7785b6eb2b55ee5cad945e543be5f95a99356164719bac00dc4d28b6c8c18f1d722eb1deb9aabdaef60b77e95e9e6c8eb95bf2e4c9a2a052f9e2ed92571ae45355281c738553ad2a4e5c45f91ddddc4f25d12143128df19944a751497453c0eae7744af0cda6b4076f8632e7a42e295dfc84770655b0de4215acb03b99ff418b33a978dd668a1724d3c6e69152d77e37fb6c169d45a5ffeda692c567fa9f4d09bfc320bc5d6f7fc2cfa1d2e44e2a4deeca294d0e98c28142efee6c8c38cd3cdfb994e07b020a3e8fb2a27b0366bbf329c1f705147c814930a43d6cd2e7f5ed04017e7c3b2fa4acf00183154e3ec29f155e44097fd0207ca54fe11753c21f3208aff329fc122aff7c86ca3f9fcd29ff5c4a19cdc3a6320d7c4eb738ff6054ae4696d6ba8ead766a7cb85327bb8a501ffab1b0cb282d3e67d2a24fb31605ce6fa879616ecaf50eca5d8783940e8f98743842e930ddf95f213b43f0ce3ee777ee1a5c4e69f07993069d505ac01a226819f909ed0a536860be8f1acc775e1f7fe67b2565be5fa0ccf78b3999ef5554d1f42543d1d4d667d1743545e83103a18f7c12ba8612feb841f8c0befe845f4b09ffb2296d7d0abf8e4adb27a8b47d32a7b4bd9eca0e4fa52b9a0a5bb868ba81d2e22be98ba6692d5834dd48e9f0d57445d38c162c9a0e511a3c9da9683a5e86e76fbdc34d94f97ecd60be9dfaf933df9b29f3fd3a65bedfc8c97c6fa1907d53046b8edd4ad1f99681ce753ee9dc46d1f93645e73b39d1b99d8ac4338648bce733127750e8bf1b10fd9d94d6df33685ddcdf9fd67751e8bf4fa17f3627f477539178ce1089377d46e21e4af80f0cc2db0df027fc5e4af80f0dc2e33e85df47e17f9ec2ff424ef8efa78c133ef143566bd35bb85a7b80d2e2c7262d12d55a610b566b0f523abc68d241576b335bb05a7b88d2e02593069d45a25a5b2c27bc6a7d8e547dc6141e18f0cb0603fec0a7017f9632e09f5006fc4a4e06fc3015899f1a225133d05f243e4709ff9941f8f33e853f4225377c6d2b48bdf0794aeb570d5acf1be44feb4729e1af198457fa14fe050ac92f4c39002668d28fd3a78ee4061bb377c74ded1ea5ff229540bf342450a3cf04fa1225fc7583f0433e853f461519bfa28a8c5fe754643c4e45e237264283fd45e2cb94f0df1a846ff029fc0993701806fe5d3645469a61e0270d82f3e5a65cad33479fbaf352cbced1ffdec4cb38470f9fa04b3f471f5c576a8efe29ca96de34e5369fb6f415937098cafd83083895fb554af21f834a7e9aaa1ffe948dfda72934bf66b27fb931d7f656b1ff207ba2a5b7fcb7b2b6fcb7a5e54f4c63f9c1766e33a7c4d729e37927a8f17c83329e77031acf37a96cfa9e219bbe3fc45f36fd16a5357ccf2ea549045b222c90dda12ab92cc5b4a0294f3697f27cfa9e7d9bd2e32f263d604f157ff2bf43c9ff6bc0d479864a9df70da9b373a8bfd4f92ea5f5dfa8d4813cb2533511757a5435eff791ab67e0f7a848fedd10c99a61fe22f97d2a92ff30451272a0f63370dbb3c96e9a7ea2f52c15f207a690a145e87ad5e437ef069fdfbc29ce1a2743540abfde1ccf511a7c68d26080518395f2af46b98380dbeacf6dddd80f285dfe69d2654896baa46e17ee47a71f5286f72f83e11d1ceecff09ea722fc51c032e1054af0bf030afe1125f83f0105ff98e2fc5f03e7877d727e9112feb14178dd087fc25fa2907c1210c9cb26c150fafc2f1bc1693a433f3109867ee8a7cd373cfd50d843cc7f3ff4150a3b549f5eeccb46fac3fe532a126d624424dae614899f5191686788c4c53e23f1734a787b83f0c746f913fe2a65981d6286e214d63c9608bc4d4ca56c63eb823c2e26c80a6f8ffa9dbc0a214f9eb9d5cf64b9fd45bdacf5dd22b741d4c80d321a045e06ee0e2ac182e63a4fcb40870383496e15bbbdb938cf938579a54fd7bed728161d4d2c60372ebcd79cdbca4c54b08925d9a74a0d6b04769add29aba0bc8c120a9da7fdaedcf80565309d0c06d3cea7c1fc92ca529da92cd525a72cf53a1589ae8648c47d46e25726e140b49b29a5619580798874a31a5c85952fd0bb70b7284a97a6f1b4772748775477583561d7c939a0565a861e424dbed728edaad1908bb6490df5771c12b26b55efd48f7dfdda440fbe67d03d16fc7b06bf310987cf8df470848f3408370630820ee0b794f63d5b40fbdf51c27bb580f0df53c27bb780f03728e147b480f037a9fcd6c794df8cd2d3d8e31f28e97d4dd2e1865b32e7e7b0afc31fa962a99fa158fa688cbf62e94f94f0fe06e16563fd097f8ba2342016ac09fa3625786040c1ef5038061970ccf689e35d937058f83c381bad0fd082dfa3700c315923187bbe2f2a7fa6e40f35c9870d3253270057c9d25f6f1e93b8e36f92ed2f9426c34c9a80041801f66b057fa542196e0ac5ddbe2e7551919f10df3784982fbf2101fbca84b5263e9bef479b47b747c4a035960c46b6bf8c23dc793118e1ee9712b3b49f5926c8fdcd9456703a3296fa19e863571de878ebd017daa4244d7b3a69fe4e19c3289331c0ae95e01de2ce5fd7387f35aa4855fb34f57f50e18e3685db930c778feaa0f809fb0393390e0fdb1c17c9a6657d0ee638c64134d683682a618c6309634c173a658c1f9ab8c90fa96c09911bfeb475a9dcf1b1dab9b24636d8dde67f430e4cc7c5fc6ec23d5e921d9d12f35cf5a3a8ffd39453e487b76201a7aefe45499e1054f24794e4894125ffdb24195a259362c1bf1df21faa509a1cb0e1f55f8ac794a03c3ea6244f0d2af9134a727e50c9ffa324170495fc2925795a50c92246482e0c2a3966920cb6343da0d1b5a1549e1154e5b626c9f26346d9a89ce69b43ed28958b82aadc9ea23c2b20e50e94cab383aadc91923c27a8e44e94e4b9412577a6241f19547217cae6e605b4b9ae94ca470555b91b65734707b4b9ee94e063020aee41099e1f50704f9360f0845a908de0b769c1bd4c82a13db0b005da03bd29d35814d4348e304986e78bb3e1916696b10f057a7140d07d29d35812d034fa5182970614dc9f4abd6541536f00957acb03a6de402af58e0d987a8328c82b02421e4c095e1950f0102af556054dbda154eaad0e987ac3a8d45b1330f5865390d706843c82127c5c40c17954ea95044dbd9106c9f979ce690cb61b0cdfa7b625be379c7e68a2349bb4984c131b45a54559d0b4186d920c19645d362a5f4e0b1e43d9e5fa80763996127c7c40c1e3a8bcbf2160de1f4fa5de0941532f4eb13831208b0994e08d01054fa4046f0a28781205797350c89329954f0aa8f2144af0968082a7521dadad013b5af994c6e501352ea034de1650e36994c61501352ea434ae0ca8f1744a705540c1332814db03a2984969bc23a0c64554cf70670bf40c675138aa03e2984de13839208e395411b72b68113797025dd302a08fa4d4de1d54ed7994da7b5a40eda328b56b83aa7d3425b92ea8e4632820a7b40090f994daf541d55e40496e082a792195c91b0366f24594e0a680828b29c17b030a5e4c093e35a0e02594e07d01052fa504ef0f287819656fa705b5b7e55477eaf480dda9632916670464b18262716650162b2995cf0aa8f22aaaa37676c08eda6a4af0390105afa1201f080a792d05f9dc80908fa3aa92f35aa02a29a1789c1f944729c5e382803ccaa89c7d61c09cbd8e6a2e5e14b0b9b89e827c7150c8c753902f09087903c5e2d2802c4e300d398e744e63f021121bb6b1d8a806105b6ed0f1321333a31fd4c118b822e50b3f5b59e4a22fe51f75a229d921752ecf26d9417b42f046936038bd2296ea7ba97ffcf85e6ea24ac92b5ba094dc4c09bfaa05849f44950e57072d1db69824c3f3d764939a692667b69a04830ff2b5d908cea3cda49c127c5d40c1db28c8d707855c61920caefa3764a3f2015a7025a5f28d4155aea232e3a116ca8cdb4d01c06af79bb261f2062d780705fbe680b07752b06f090abbda54e18d724e63f069d1d670f4d515863fa7de5bb3aec46e9395d8a094d865a30355319d4c95c0b7b74009bc8b4afc3b82267e0da5f69d2da0f66e4af85d2d207c0fd5b2bc3b665853502c4f4b1c632915c56245f36e16ab05ec2772aa4ce05d2ae9a7cad507cb9dfb6b9c3b7ba449c31573fbc534250c4f63d302c3af15ee12587f1b47d752b1bcc714cb0b9b63b9ce694941a67333e86ef9f772b5c368bd5c6ceb66d0e5cd4f2e6ede402679897abde2512adccfe82d124d325e2037995e42023cef4f0f4a529980750b3be4dd64a638b37a79af77e4f85da3524791be97b2271ca21ba7e9ce3b2ead5aa750dce2d846bd4c7337b6656ad31eafb68977e9eb2d654fa750b1bccf14cba33db1c4ccdd782e519f942b37587d720ae13be9f20a7ecb4fcceaa998dd6f8ad93159a5df02b950bd5ae8b51cc1532e71c74fdc1aa8b83d608a5b91276eab64eaec543183b37dad1693462a260f9a627230e4f22cf10e6c49a03f235f89763a6af061e5981d1d0ba84b9a643303977ad0c06ab9b2ad89a2fe9089fa82acf2c64ae1ee996d43a9b6978adf674cf15bc9685570f514190cc4ca6d0e57cba0abc569a29c2c497249d553a9587fd614eba3d2c69ad6b444c6c5dd9ac38da3ae8de16a8522949a2f724fcd7d54bc1e36c5eb04df2dbb527927b96d6792e05e5bdb5c0ed43bf501747582b4047349e7fd148fcf9978ac08a5cee6aecd4fa3e2fc08d54ef16703da8661917b851484d3d9af45f889d9e954cc3e6f8ad95c2266eb64feac516d13b7abad7b2deb552eae4c490d9e3eca19548c1e35c5680963e9ab53d55d29be4db89b63b65c4ccfa462fa05534ce7096a94dc545224c700ef410f4c96c954ae97bda10aa7c6dddf82b13a8b8ad517b3e91324878b5b08eb642ad43bcf423edc91a6f64b96d172313b9b8ad9974c315b94b1e4ccae574097a1e9faacb99694e750717ccc14c7a5a44d428b779bf3908eabbbfd47e2ab20e9cb12b3cc96ae090f50717ddc14d72ae6de43a3fcb60350727b07eba5b55737973c2dd31fce85d3b914a72f9b38ad6bb55e567a42c1399c477178c2c461a1cfbc61438e389f8ae193a6182ef71943fda93b738ab4467c2fa0e2fb9429be258c96dd90435ba325085c4811f84a4bb541dcb26d016a81f0c7ea222a565fa54628fcc66a897c223585bc654ef672fdc4ef622a7e4f9be27764809663a3ac8d60df99edaa9f47c7aa2ce5593f71ba848ad3d7fca599b7ecc11f1fc864799cb5c7a554fcbe4ec5cf4f9fd18deb52d58e48dc85198ff4adc3966a395e46c5ef1ba6f88d11e94705cb1cc21c5a1ea4b4fc66fab13d3fa9509a532a70dadee554acbf658a35fd69a1b2e6a97a5c4624b67a86fab0c9d816cb6d7cff0a4aef6f9bf49e93b1c7b55cce0dc2e8638ddce877b1d82df7d64aedffa64b81dc7b905752f1f90ed5824c9f47a037bc56b6aa1a0cf56a367309d01ad9de8231bc8a8ae133d9f491cd7303cba5edc13878b91aa34a4daf30e707aea6e2f85d6a842a9b71806c62995b89917b4cafa162fa3d534c9765959ade991e371fea78b766ba5e4bc5f6fba6d86ec898aebc23e3dc63e6d751349e35d198e1a1b148f67af6aa7617aed35d4d4c231ac5b2f6a0463b12eff989c5f5542c9ea3c6c7cd355faa1f726bb5936fa062f4036a3426735f3a9b72289b1eb9ff5e7beeb9f5468ac30f4d1ce88fc6d17d1fbd3f6c4be5a84394c6cf9b341e97b17c49cc3a55c9abe095d132edae9b284d5f30693a2b4d7bd16be9c99abb5fa54e8cde71e4979ba9b8fc281b4f2caab65e6c594d7d0b15cb1f53b3bafeca39b767997a3775a65e6f554da767aa9405725e007a4b7ee27c2b15e7174d711eeb49d94498dcb9e9364acf974c7a167af4c4e59357e7a54ae76cdb46b98e37dd4ec5e065530c3609be71523dc2916ea6045b60b6394fbfe387ca1d14959f6433d3a943f453aa246246e5b896294deea462f68a296627b6727afb49e75c73c05d14919f66d3e7f3dbd60adeeacf3dedefa662fab36c4a2baaddef5a41919891217ea6920cdef213837ba818fc3c7bff4408d34fcec4f1a3aeb7540add4bc5ef556a0c337d8b26b1d3bc5747bdd33f9dbfa85dead3e5c9dc6afbfba858bf96cbd8999baaa5b2bfe9f6dd2a446bfb65df4fc5f017d9e43c33e1dcda09997b381d9d7fb1182c1a5a2ca5b82391b5f21d6815e6c3c70d6205cd35c3d4e6127f6a52ed90b80ee1ef765203f2445973d90e8ba6d24bf8a503a7431be1fe8c575fb6712b44c3a7d21749f935aabcd1d63a551272fd3761b1d954a715582ddfd2cbcb32c5c254cb4d45f51c8e5de6386d26968bc5e407b3b02c87344ca51c76317d1d5275a44ad536f9d0788f4dcad19a326bf12b08adadd98606a490c5b9c3a4bb2b60b51a3d88f5569dad06e51a0a13fbee8200f82aa09e52c918aa7793506fa853a400dd16cc286e1dcafe267183a4a9b9ce69f5c21db2cd734cad63fb3605901abfe644061b2a6c9129b356064efb934701dbebed12d87ec3890dd6a016cba6729d03ce7595d2d53405b0211208df8c2510fe9613212c6e05df8e7d11cea665a313b07ec7090bbe48a9874d96c9a9f15281bf74ba46ec8a04b0473b2580fd9e13585fe17e8bac40243cbea20cae57d704b83738c11d61000702e1abd63001de24af564602da569180f626b7b52567cf25ceef6ad504d11e36aed545015cbc5b02dc1f38c1c1773ac15524db3a340af0ae4335e81f39e1754559754dd2085f14300d1d9ac0f4274e4c9d11a6c4b2882820bab87f02d15b9c88bac998b8ed2ef0e2c4fe015100d50bb5c3dee604d541da5243a40af376dd1370dee18433d03959d3dc93d433ceae6f4e89ac1d9b04ac4a80fa70ad1a938d02c0c75049f52e27c076281b4601ccb3a31260dee304d30915e1a02678274401d08bbd1380fecc5dc745b30bfd3a2abaffc28d688d9c314deced138d6ecc19a8fcf96b58d94c2f218b02a05bfb2400bdcf090876aed4fdbcc572e4aac2a9d374e704fc6b2b65d7a5445a58a5b4b71a27c02840841f0df16f9c1061d74d0c0f069d61697c55f326b29511ef01f645c3d07fe744d95d9569dadef6abd6d63a39481305548750d9f68fb0866860c4013bc1e8518728b5ea3fea9800f701f7100d0687d7972e908336302f9d58491b057867a0d1d40fb93bd6ba464d2c977417694701d463a801fb4fee098e5532fbedf2ecfe53ec3c5e2f438a02b0ad6d12c0fe15ee9073b25b5f65c4cab31a3433f411ff040734258a65d0516e683cdb3e01eddfdcd6b658ce6137c9c013db6f25b6636b70da70d54e785100f72602f71fee596ebc0b6e14a7d1c0b74cc3fa2fffa4adeb8c522bc544bb1f300f59d9c7dc23af250eb44522fb9d2ca300f062d4c8fd8413604f2960b71c9486e528d11c4b3b24c7d23ab6f708f7fac8e7eeb1e88f31ed5bd953b8430075f26aa36aae24f95ac2a23ceb34ff5f0cf94ac6731e0e8a67ac16e259fb61c47dcfa1c773f45e8b67d5488f071cdf89fb70498cfbaa31e25937fde2beda3bf19c8adfb8af1189b8aff67e3c2b7fb1b82f27a9b8ef810093ceb45b4c3c656e359eb6f71c374e0ac58d63d871c207209ec685224e4c18c4330cbac5739a068d27cdfdc5d34ec8c733ba4ec6b3a8cfe2c49c513c4b2feac4b204f37282025896f069ecffef1503056320e20e800ef0d513f9b76ccbc4da303706c1a6dd052250e3a4df8a6b9ad3c6f0e830344587e40f08e9568c499bce49ed9c1ed9443097b64e57e465d5c6269c8591c47914c2d9d6269cd32389731bc2d92e0c9c3b48a058fd2d62a628e2c3d98d0be7e74502677b9b70ce8824ce9b10ce0e36e19c15499cef209c1d6dc25914499c3f44383bd984735a247196229c9d6dc2393d9238f7239c5d6cc25918499cdb11ceae9c38fb299c15aa5be9dde2c355dddd3ea2800f647b2e907f4320bb71821c26124326d90e5fc1f3f5f2d9e835e51723b0dd39c18e10783c2bfbf1dc28c31d8de0f6e084db5fa4ef76627150d3b3a1ecc8853286ba9c3d3951f654288b3c40dd914e78880dde602e784f203bec1506bcd9e1c363b3bc9710bcde9cf00664a8c39333316bdf9c0de6df11cc236c82392b8230ff8160f6b109e68c08c2fc0b82d9d72698332308f3af08663f9b60164610e67b08667f9b60324e5db0c1fc338239c026988cbd7236986f2298036d8219c51ece1f10cc41618c15414f9cf2c208a1d73d820be46f10c8c19c20272a9035ce4335f268fe6ab3bfaf783316047db890af43bdf3219cc8bb48e43ba56792eb29b543c28bded8503764a5435b736c2879df6446eb3bc0857207b2be619c28c7a764f872296c89d01f2e5be8fc07ebdc2b472f9b44ba2d8f5961b35553d310ece161d86d76757e1451e6a122600427cae1862220db4fa4b0a2bd9c0bed6864a579dc56ba403a82d72af757d8c15a7f5f1a1c65b553b0eb6a1dbd8aaa1db2d2919c28f59a8069ceffdd2af07259bfc3d5280f219f8f108e0a03e1acc30ee1d308e168eede513aeff352d954aa95d93b65cfe3960339920b641f04720c27c83e22d1cdd447ef3794a33ab1fb150471ac4dfec4ac4e5c6c3887a0da7a9c4d3859bd8ed8702e4038c7db8493d5278e0de72e8433ce89b3577303a8e0309a3f7f0b959513ec7182991341948391254e0c0325f6825be9f46696aa657fdb650329841a9c0de569c82a27f14f5de0b1ca2d629744b7502ed7dba544419b13da9a299b6644c0bfa83b8239398c818c46b938b9a1796c5daf65d447d330dc34cec95f36b4b721b453c29862cbd6219bb1fc6473c73e06c19c6a13ccd91184390fc1ccb70926a3c30c1bcc2204b3c026988cae5c6c30272398d36c82c9e864c806f34804b3d02698515c0f3407c19c6e134c4687193698e310cc1936c1649c3063833914c19c69134c46274336989310cc229b6032f680d8608e47306771c2cc13a9e347fe5cb718eb7736d7add9684c69766bfa707a078b194b51b6a1e289c856e7d80493b17e6783391dc19c1bc6b83b8c76ee15fac3e821cd98b3e11b8cf01dc9896f10c297ea1107c212cba4a33c91f13c023a2f0c2f8e82c3ce8be33c84f0a83010161d76088f42088fb6bb39c438aac9d61cda809a43c784e51e939862c3b344ec936b6c9316e7221b9d6f8f8f701457521e8d502e08ab16cfb4b76e945db7e622a00b6ddae1686624873a3e83702eb20927ebf254369c57239cc536e19c15499caf239c8b6dc25914499cdf443897d88493759367369c2b11cea536e164dd95980d6703c2b9cc269cac7b66b3e1dc82702ee76e7966f78d8b12a91a7c6583b1e5b98a0be84c04f4d83076e19aeee9bf8730ecc1b6a0af16c15bc1096f88c876ad64f2c269467784b7b9a0ae46831d2b6d84cad8636783ba0a415d65235446972e36a8e310d4d5364265ace1d9a00e4350d7d80895d15d810dea400475ad8d5019a782d9a0f641508fb3112aa3b3021bd49e086a4918ce0a30b49c6e697508c3ca23b960fe5624609672c29c2e52a73c9217c12c1289cf79b91149fe3858f2b70d13df842b93dd033df6cf68d1d3b91261044a84327b961a4671a3debea8705867ef922e468f3bb6d9d19f202b5d6fcfae89ac5b07b0d9e99908e6f136c18ce286d29722981b6c8219c50da5f7219827d804338a6e10a7239827da04338a1b4aef423037da04338a1b4ad720989b6c8219c51d118f433037db04338a1b4a97209827d90493d12f940de66508e6169b6046711f9b8308e656bb7d98a3b81b775bd4772fe7c4db5de175b704aa91bd78577635e73e366c5f1914c82eb785bd216ff6c31e51dcc76628b2c98ab0fc9857c911cd5d9e11cf62e7b57a196294fd9887215bade404da236d2667dc02b50b17ba36085d556b2e4f88feb6010310caed61acd1840fd81e3e6b34cb10be1d76ec00efce1ed5498b75e785582df30d2eb4db5185b3d3a64d50593b936c96da09e1acb60967612471ce41384fb609e7f448e25c8f70eee2c4395aa4ae925b2c1d1a2ae447205c3fe535ceeb9502ba912512acfb21889a705a9cbdb920f74795558d4dfef53323b94bddc308e76e9b70b27ebf950de73508e71e9b70ce8a24ce3f229cb536e12c8a24ce6710ce3a9b70b2ceadb3e15c85709e6213cee991c4d98470d6db84b3309238b7229c0d618d7596ca566593237981806f13ad57ebe72ae5fab9509c6bd99af7e5086863583b2f1d5efec9bf47089bec718d8da2c74737d4d9dc1b96dffc5e39ca098b62dd0f34eb87a2be9d5515b2cb53c358147b387d5a673e82b7cf5e276dc63a9c6dbef23e84767f1876392b7cbb641b7b7f12c13b2d0c7873c287c766792f2378a7f3572f3b0d7b7c953a4c2a44855268bbdc7101462fa3d772ec8a609e61af4707e3983b9b9d0e40cda033edd9e42f8a0ed95390959e65c734b0e943e08c68d9f60d2943567ab64d136dac9e9b6ce5e97884f31c9b70164612e71a84f340185dc9ec7ae5859174d12e4530cfb50966145db48f4730cfb309661417a91e8b609e6f13cc282e525d8b605e6013cc282e525d82605e6813cc282e525d8a605e6413cc28f6898a11cc8b6d8219c5298bc508e62536c18ce222d58508e6a536c18ce222d54508e66536752859a72dd83a94bd11ce8336e1646d1eb1e13c1ae1bcdc269cac7e466c382b11ce2bc2f0e398290eb7cf3fdd211208af0cc3d33df35071ea8aa1058ed07ab9949a75edd0c11813e413919d5ec5097998825ce33c0480abd45282c40282e46200fbc63182655b42700c027b75180bff3558fd5dc2e479ce74cda928b64ca720bcd7b4e6945c689ba31ee042f92e2a67afe5443952a25c2e1ae45a219873af9653c3f07ac25ab7a8af6e2d94bb78ee52f7613355705264dc6b81ad2dd01901bece1e87c42866fbff2094d773a2ec9b01a58e29ab43431e57ad5f8e4acf1becde95867174946d579ae908ef8df63a2b324ed6b1b9e2fc12150087c22800a87a3f51003096a36c05c0fb08e34ddcfb26ad553d7aedd0bd5c5a2664fbe8d5e5bd10b89bc3b0bf82661bac941d5277d975d47703f92ac2780bf7c032002b9601b7ead7b6d672c19c8560de1ac6d09dbb086bb7ccd650f51c5eeb877e8770de164673bd204daf3dda43782f2094b787310a3ae3b01b053d1921bc238c013ab0c6c5b2c9d32495802fb557c832738d38558e7bd63bf7a0bd5917463667ab826623b077dae3d41d453fa51508e55d612c8299e1e95446b929b417c1bbdba615e933398736d856a4df8370de6313ce1991c47931c279af4d38674512e7cf11cefb6cc25914499c5f4638efb70927ebce876c3897219c0fd8849375ab3e369ca7209c0fda8493d57f8e0de76684f3a13036e0858f8a1f3e1bf02e41f83e63938317eb07c4d870e6a1399ecfda849375a90b1bce6508e7c39c383b490155f253a0f5c275f18a9e77510794993fc7896bbcf0f30d5618376a9222f1b756815a084e07cbb8601722d88f70573ca963e960ad7a0688f11b046ce3e97d11becf87b5a5d95201a3923076b9430e03d7477aacb211217cd41e0fa2282e9d1e842a9a2f70a2ec2760e6bb4a4ddcba3e6ed4fc2363b666ab823a219bfc62189f5e826c7d38cc2ffe1a81fb92bdde4151dca8e76684f6317b3e5d373d924bf97f80603e6e13cc284e91bd8a607ed92698515ccaff2c82f9844d30a3b894ff3904f3499b60467129ff7711cca76c8219c5a5fcdf4730bf6213cc28ae9cf81682f9559b60467129ffb711cca76d8219c51ef96b08e6d76c8219c5cdcc7e85607eddee953d8c7d22b6953d33d1e8d137b8478fd20dc4b9aa17494f38c6ea88edfbd35508e437f9179d268374478e60a0638f38564e58d4a59d2f8fe2e76adba282e05bf6b8b746b1bb390da1fcb64d7e1c3339ab2836cbfc12c2f91d9b70ce8824ce3b11ce676cc25914499caf209cdfb50927eb7a5d369c1b11ceefd98493b579cf86f34284f3fb36e164ddfa990d6735c2f92c274e38d1cba0a337add613617ace26ab9bc93948cc6675f7229c3fb009e78c48e2bc02e1fca14d38674512e72f10cee76dc25914499c4f219c2fd884735a24712e47387f64134ed6f94a369cf508e78f6dc2c9ba933b1bce9310ce1739710e15c99b3e02872601e3eddead1ebdcb0318c732d9dc5fdba0c1e29738b18ef360dd26523de3b2f7a16344cdd6d4df8250bf1c86b3f66c71b8edd8f10d5408fc240cff4e6dad0dd2fea00858a2e05519678da2bba9ee5c649dafd8e3071f45b7af1e08e54fedf542669c24662b431f4305c0cfb81b55ebe4a49bbb410f64fdc36ffd503f84f3e761ec2e33cd93f5a3fc89e50508deab76fb8330ba28b2f98314a052f4b5b0b6ded37bc5994acc68379d7e84acf5179c38c7789a4e35022f14347ffc61a97a39b41ddf2773611e89acf697dccda8f41b4546bd723a0259ecebf6b8d944d175710d42f92b4e941da58050ec6e0417acde08d6afc3fcbc085438959e85ad87df88d3bf10dedfd8b4bb07eba83ddf17305085f35b9b70b20e33b3e13c12e1fc9d4d38592741d8709e8470fedea64990999c4b5dd926411e4565e71b36e19c11499cb7229c6fda84b32892387f8c70fec1269cacdba0b1e15c8770fed1269cacdb04b0e13c0be1fc934d3859779563c3b903e17c2b8c2d23a7b5c6e0315b8ffc6d84efed3046de21e0edd212b5ec3dea91e8c18b2178efb4fe52415dc9446fd2b7176a9ebf6b0bc828ce9eff1b59e47bb680649cf56103390f59e49f6d01c9d8f36603598440fec516908cde1c6c203721907fb50524e35a5f3690c72190efdb0292b1e9cd06f26404f26fb68064f4266203b91981fcbb2d2019e717d940ee4620ff610b48c60d7bd840d620901fd8e38519c5fde2da23941f72f7b0137bb283a20d92c30eb90b31bc163ddf369810d2f0fe19c6a711132eac660fa13239d20368b74b61bb793b8a977381ad4360ffc50976b4f0ba61b99e6d09ff7510e87e0f355dd68fe2867cf928eb7f14e65a211728f8ba4141506cac9ca2bbb1d44684f5dff63864457197c309a818f84f184b04703d9f7d09cb8896ad845d8eacf4bf6166fe6a4789f522f14d2b2c3c34c7d6035c582b10d68fc398b0987918cdf63c82b2fb2761ecc3995db37e5a2437359d812cf17f36c18ca267f02c04f3539b6046f1b30e13114cd825d21a9851fcacc36404336613cc28eeb3194730dbd804338aeb7b2720986d6d8219c561ba3108663b9b6046f1b30e6311ccf636c18ce228d27004b3834d30a338e03102c1ecc809d3ffaa1fc62a886d5d457f84b3934d380b2389733ec2d9d9269cacdfbd62c3b913e1ecc28953fb06c374efe1f339f96291c0d795131f7c3e78ad73e26e6f06a2f6388fef741eaf9543c4f83baad1c3d81e61ecc6897184486c20e1cefd6c71d4850d422a240f981a5e20604d2f8cb7973b02dcfd64a2fcd9e4f5086e774eb8c1f638626cc4b3cdbddf85d0f6e0cefee92a231d53d6098bbc1813c6ada812eac98931cf80d1dff63c8c234a6cdbf31422bcbdec2d00182738d80a809fa202a03727da9112ed32699f25026627ab547555294569ef905d3201c08e2b9cbf5df14b9c23ec385319c1caab0b027c4418252ce5c8b0485a2cf386a663b94ad80f10c63e610c90e006966ead26daafd16e500d4230fb72c21c668099b908882ed8a5086c3f4eb07adbdde9e270db76f71684b03f27427f8e5f519c223e16a11cc08972940f94a54e9820a451ac71fed23dfe06de6a693c57b5f421423c9013f12091ec005627874b76a6b5d9284e84ac444dfd41618c8e66bf894f143f1f7a37b2cfc136e19c11499c17219c436cc2392b92387f86700eb509675124713e8e700eb30927eb9c3c1bce4508e7709b704e8f24cedd08e7089b70164612e72684332f8cae6681fced1e61c609b6de8d766fbd02211c194657333ba79b283ad0f643cdf6516159a3dbdd0441fb94258630f0f13617c2af216b1c1dc6403120ac6a5e4bac6f477dfce83b08e39870e78a0ef7ef0d0c4168c7da3b0d17c5efb55d87d08e0ba3fc2c3cec068ee308e1f8301cc1a6b5862318db1cfb28842f1ec6045b76e3ee85911c797f00c19c6013cc28b62d1f443027da04338a8bb30e2198936c8219c5c559f72398936d8219c5c559372098536c8219c5c559372298536d8219c539c9cb11cc7c9b60467171d6f50866814d30a3b83dc54308e6349b6046717b8a2f209885763b7133667cb60e661734443c3d8cf1cd69cdf65a2987e55c4fa3a82fd8fa3ab2d219364da3cde42c41d9a6d1be8870ceb409e78c48e2bc1de12cb20967512471be8870ceb20927eb6217369c27229cb36dc2393d9238cf4638e7d88493b531cf867327c2399713a7def5b0d0d30a8df2eccf1e04efc8307cdd61f6bc58c0eaf53acf67944b6553bd5ace0c25af6b6f88b4bbcc5884789e4d1b57b04ef9b2e1ec88fa4347d9849375908e0de72484f3689b70b27a6bb2e12c41388fb1a96e9fc93953c456b77f0e959df36dc239239238af453817d88473562471fe09e15c6813cea248e2fc1ec2b9c8269cacfbcfb1e15c8b7016db849375c334369ca7229c8b6dc2c9ea03c286731bc2b98413e76091e878ae939dc90ad9c584dd138a056c8f023b289429322174344772217d03215dca897482f02eaa86fe7ca5c3039cb4753c139ef1d48ce702e7af7a3949c7ead87d5b8c0978356aec2fe304ae3fa9474d232757566c20d93ea9370659ee725b4046f11bd70311c8636d0119c56f5c5f8040aeb0056414bf719d8f40aeb40564143fcd7c1502b98a136481a7766f22570dd18bb716394fec76f4a9956710d590eafa835c75fd09a8ae5f1d86cb58b6e3a48c53766ca3a4ed10cc3536c164f4bf6383d901c15c6b13cc288edfff1395b2c7d90493b159cf06f32304b3c426988c0d293698ff45304b6d82c9d8bc6783f931825966134cc696291bcc4f10cc7536c18ce27739fe8760aeb70926e37a6236989f2298c7db0493713d311b4c81da991b3861d2bb1f2f717e57abb1fb324700088efeeec727202b3d8113acfb35ec95ce03ee14085e22d36a3bc8b32d9ce988b09e68cf3655515cfdde1d65fd8df6ee60c358dfb3ed60f35964a59bec5e3dc7d86b622b04a622cbddcc89b70faab4f6ca4a093c99ddcf4885b476ee0017c44a64a32785e1fa806b7eaaba62afefd96c7224c2b9258cd23435cb67539e46713fb0235076df1a469d4fcd3625d7f951dc0a632ab2d2f2309afbb9d4f98ce3f56c367a2502bbcd56b051fc26d725086c85ad60a3f8b5c385086ca5ad60195ba76c606720b055b682659c7962035b80c06eb7156c141b58c311d81db682651c5d65037b0e02bbd356b08c73006c60cf4060ab6d051bc591ab0d08ecc9b682651c6d65037b3c02bb8b13acde9179a668851d99d9f01d40f86aec190388e23e79ab11cadd362d0e67dd47876da26f141a9dda63134ed68d5fd870ae90383bb6f7085f92227c918c2c44b74224f614992a960af04d76771da970ce57caeaa5516c75ec6ba3f3cf5f1a6c76fe99aec7e4c6318bc53e5127af82bc4a297bb773173473fa2be39c476ac124ba2a9388cbe26581c3bcd179063efb0ba1ef17a5c2dd33658df35b4f8737492471b9835fe25bcb10027c7d79a7a897314ede53251eeb2439b95f32817801c0b8d2557fdd64b92ad8aa9d38974b4dea9d67dac9705c138ac7baa3333de3b15c56cb0d52ab8e2a1cb798ac74aeba712b75e20f6f41b59eba10cffb06b8f7c36cf43e615eb8e77d1eeab6cc4f4146c9bc2830f92d30b958acb7b23220bc4aa64eb973b75cbda739e48f771e8b1539bfdc26cbd4e6c6ca54e523bf5b9de9eb9965828da5975607861433972d352d963b32c5c8cdd0f0fe76e9535025a52ecf18d3ccf1a3735ab734a9920f5fba38ace37f0aa4bb4a7669a603625da581d729e1f0359d7ae76f50eac3856d44fbff07cd32bd430d280300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/be7883807ac3b764bb7af9b46042b620.asset.meta b/Assets/SerializedUdonPrograms/be7883807ac3b764bb7af9b46042b620.asset.meta new file mode 100644 index 0000000..05e9c1f --- /dev/null +++ b/Assets/SerializedUdonPrograms/be7883807ac3b764bb7af9b46042b620.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 779da5b6acea8834e9158d858b8d5adf +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/c2029a2e73a06934c9165340cf29915c.asset b/Assets/SerializedUdonPrograms/c2029a2e73a06934c9165340cf29915c.asset new file mode 100644 index 0000000..54dd494 --- /dev/null +++ b/Assets/SerializedUdonPrograms/c2029a2e73a06934c9165340cf29915c.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: c2029a2e73a06934c9165340cf29915c + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec5d079cd4c4f74f76e955a423ca21ed9072f4a28074417a0701e1e00e38398ac7d114157b1754545454545454eca8d851b163ef1d157bffd9fb3f3399d9bce4decbeeec24cbc6bfc787cb25997ce7bdefbc79d367627986f563b6b57e4d34c61a038cf6c604a3c058642cb4fe1a605d1758ffec3bf97cb451625de75abff3ad776d8d9c245fb29f566603ebf750eb6e89516a7db9d4986d5d8bf8fb7146a1f5f750ebdb42eb8e3d9d63fd2fb44299e5ac8f2618038d51c648a3be593709c444fed112f1cc647a9995acdffd8d95d6db422e148b248fbfaa6ffd1a67bd59c2df2db08496e1a61ad3b95a0bac77b3ad6f4a8c620b731647ac34f01683ff61d8970ee2da515c199d95c5df71f17725f1370c5f5e5c3ba518be33f8ae32f89b31b4d1e7fb2ef635768a75ad60074fdcb39baf44b8ae365e6c9e0f567771ed21ae3d05a69982fc15c5f5c024fafa611c04b052e1ac92b8f616d75e42de589af11f6c73646e00788ccb53813cbd41dc95c17bf6ac8f86ee321d4ff3a4e369763ac6d68bf4db2dc2f715d7fee2da4f605b616abf229e0d10d76e49e41a687f9748f74e769cf1c5e27e90b80e16d743846c670859e3e05e571699a64304e6e9228e72c873199ebd97f96da8b81eea49af61225c05713f3c457952b13f29d399228e8ae0de92bbdc4c1f2c99ee6779d2fd2cf1ed5a9bc772db3cfa00fb43714708bc4a3e61a41e23f1f42fdfc0e7db51f637d37252c01f23aea3c575ac631fd3b6b8dfc5ce16725706f74c964d1efd0f48a2bf8c7b3ca1db8f3edf4eb0bf99bc5edc4f14d771e23ac9917fbac49d6cdf4fe895824c87d9612b4beea6da325558653faf20759579664a125da50d9de3b1a17304ee2b02f74f117e9a7d6fe61a8ecf9638ecfb2a1edc351edc35366e459987e435999cd3c575a6b8ce16d75980cf17c4b319e29a2fe25c6bb87dcd5af1fe70e7db7adb1579f34ba302c35d5e7613f19e9b04537e5f28ae95530c2fc3ccd19079aeb85649314e99cef334e2ac6adb42e5c91e5b989a04b3c8e6b7d23b40068623cbb723c475beb8160bfed779ec605d0a76904c9605421699d6736c59aaac10f70bc575915b1663b147a6aac1c9143b4f605603f7ec7abe785e1ddc3359b7d9f1546d2b308f14d7128fcc4bc293d9aa5bf3efaa9702db48e53b3ffb5a6aeb5755d47faade2f9e2ff3c836d791bbd216f0ad942395fc20d23b76a187e30b6d19aa496e577ac2d500f7ec7a81131fff9b7d2b6dab0b78cebead09eed9fbe529ca7ab451d6664d514fac0cfe66710bff5fed5711569433aebc877dcbae17816717d978d5078aef8e31ca9663321cd36d2f70cfde1f95a26ec722f2b17837fb7c7b9ce1f63f85c01e6419bd5ac873b1e1ce5b178bf70739df9832bf1c6fdfd794b29c20beb904f072892d5f0d59269d28aea71a78397b32e041e447e31427ee7da5bc27f9c4b5538439cda3f75207a7ea6a21bbf463b2ce3c8008cb9ec93afc39e27aaeb8ae75c2ce94befe6c715d2364bbd470f966e32cf09c5d3788f7b5c03d0b77a6835d57dae8791e59b1f43cdfa33be603fcec6c9d1d7686ace78abcba5739fbf95e6d3d329c60f8dbef7e42afcb0cb7fd5f267045bd6b2f69c7c25f18c2fe62978374be5cbc9379d2faae9fe4fd22805b19fc9d8a8c7e7c6cb0e349b46b24a6946516c0ce13f15ee1c897a8bb5d0adeb1fb7c71bdc4709539beb2c86fab27d1a70308c7ae1b35f4f77b27db8d570bdd361aeeb6de463b8df71eee83b5c9e6a981c817c635f637b5a789fb6bedf7b5a47d5c077462715ce970bd97ecd71161635701bd2f11cfae06cfae12cf36019bb952bcbbde933e7b7bdedf0030b0f7370219b0f75bc4f3dab6ecb5655bf6268f2e977864bdda70f90be3e6b2bac6aef6c45d47212d6f11df5ee3494b912e75fcdabfb7e2695957fafadb3c6979bb272daf45d2f20ef1ee3a906efdc4b3cd48fa5e0f78b856bcdb4aa4a57c7f27c0c5dedf0564c0dedfed4ecbbaa28c32b6116909e58769794f595d639b3d71d74d212def13d77bc515abbfca3ae300815b2f05dc07c4f54c1fdc2e1edcfa29e03e24ae0ffae06e377079d3894fdabaeca3bac170db3abbb7ecb67e391fac870dd4d61bc8bcf688e1b6f5470db7addf6894b5f51de2dd1627fd3917ecd94d46595bbf19d889f037c663200cb455f9fe71808bbd7f02c880bd7fd270d97a03d91ffa9481db3a941fdafad36575e56160dc7ebe46a6e5331e9e25bfb718eef6ca2d227da47cb24cbac6f02f1b77daf86b24feb302ef5681df10dcb3eb6d9e786fb3e36d28fa931bc9764235f15cd47f1a3516cf9f13f1c936fff322dc499e702fd8f76ba56f7bc9c3ffcb1e5bb9c3b1b7842e2f827750b7ad86bb4e22faab637782b4da0a9ec1b492f5c264bcbe2aaeaf79f8bb5de03502f72cdc1b8efc6b657df8757105f5ad5ab25e2fd3b71a90e34ddc560c59d6c9fa926a1d49eafc56129d557cd25d86db27dd65dbc13eeb7db0de1361eef709b34b5c3f10d7f705be2cc36a817bf6fe4371bfcdf35ed6571e74b8af371ac821b1d937fba4a0ff47e22aec3e768ff8b631b8b7746bbcdd8eabf193e2ba5d7cf7b107e71347aef3e779be5997823c61bc3b59e872afe1f611f7dabaedeb6db79e94c49e3e15d7cfc4f51481779fe1ee0f94f501bf7eac6471f9e8157bc070f71dc87ac2e7e2fe7ef17e5f71ff9027bc2cffbf10f70f7ac23fec09ffb008ffa5b8dfee0e2fc77763b23ef1b5a35b4ce68d6fc033c9c5b70e3f3932ae47dc711bdf19eef6a06cf33d2ac2ed07be831cc8f74dc4fd0e8f4e8f89fb1c70cfae8f7b707778b87adc83fb8447deefc5558eedfce0e878fe76f00de0d3f89f1bd3d7a6bf1618b25ed014dc5b369d33c407437efb94b83e2d30f607f70c63b548139f7c1b7bc6c3df53e039bbee14ef9b817b86fd998f7cdf88b0cf7a747bd6feb669f314be7d4e5c9ff7e826caf5a6a2fc6fbad807eb2771fdd99386d26619de8b48babe08d293ddbf2064680eee2d19f697b6fc8b81dbf6739eef5bb8bf6f26ebbcb25cfecd23db4b86bb0fec0f7195636f884d1a7f79647fd9099390ef778f7cb2ce23e57e45c4db12c8219fb3ebab86bb4c937592bfc5fd6b9ef7a2ae828ee5fbe511d966fbc748dbc7b23f1358a9f4fd88f691696ac4190358a9c429da5e665c23ce72002b953845bdd32caf1167058095429ca6b03f53d8403329cb3fe2b9a8b399622c31c6eaa9cc8e5a817b99a612438c0f99a2ce6d56f3c78ebd213073c13d81e9ab8b18a73145bfac59d3f9be8be88b3685fd9bb5c5756f274c57d1d7610a1f604abbab0bc2486c611fb13785ecadc1bd4c7bf14d73d1ff67ca76058bd37adf52c8147b4b601c60876f79ab5bc618a88bf3bf653a4b7cd12f6b36b4efdb493b6a64c7d34afa3451173393f4b99aa28e6b36f6d15fd44fccfd68ae657d2c597cbe794270952beb416f1baeb2d16c22ec6313782f7d05bb7f47846f03ee199e186330254e535a57942359f6ed0269c7ee653b41d883d94ca45103f05efa1576ff8108df16dcb3eb87e2793b108f7cceae1f19ee3cf3116117d6b5b518ff339b1332b64853c65db88ca86dca72cb937e89f48a39df3413f51853f81853e48be6a27f8afb47766ded7cd34ee65dd93fdbdb93feeddde9df668727bcec677ed770d70bdef5846fe3fe2ef69e089f67db474cb4174dc115e943ac6b5b514f32db25b1411856e8614a9f97e7846dbb5d3c137359cd4eb44d9b623e2a997f619ca25fd2d71f7455c013736dccee3e783d14f07a8a6b2ff15e8ca399623cd614f34e4d6913bb0df7dc08d93f85b429cd3e49e460cf0e4ea20f94b52fc863b0dc90790e29377ccbbc7ec00e18cec702b703b867ef9172ce1757ce3b6d6938be5bcecd6b059ec932a59191be8f97bee133c3dd9720fc40ec53c33ddecaee2d9eda89fecc765f01b9d87588e7bb8ae09e5d3f7164e57f5b58ed1bd858ed65593dc08d19fbdce1afd72be0190b3b1060415f23b03bc8f250fa94ef44b88ee01ecafd8547ee2f848c628e42225fe726e11c4baf16ee77b1ef455c9d90f7ec7967108e5dbf12cfbb807b4bb63ce91f0789eb60711573894da99b6c8f5705f72cbe7e0ebfb21d92f09d49f44cc8f68dc0ee0aeebd362c6ded6b8fad7d2dd22ac79641a69939545c0fc5f5318779f46a6904a69739dc6d6fd2ce92d9494759df6b21de4b7f9baaddc87e7969fb5f0a9ceee01eda427570cfe217732b3b8a36b439425c47ba394ce02bd884378ff37bf66d39459b113a98a3805dc03122f97eb4e18c11c1e7633c36d7c36d7331d84f276cabd39322aea640cfca1edcb1200c26cf38208fc54b67594e8e17d789eef0d8dc5b7382271df2d5d341960fb16f111d4681774087a0d2ceb7dc92363e297d8c4499365903438ca5f13a47babad40458a9f41f88712653635eb4591760a512a76c2b1ea611e7de002b953e0b36cf1cd6f3643927cb34d60707fb47d9bd6563dda45f93e99b64deaa29c67b4d592798e9843767896bbe91c81bebc438a23943c47796627cb3c5b5405c0b85fc3f1aee3110d9ffed3306922c2e5f7ee70a7e77027b62ef651be927c3dda6fec9d6b7bbf40db2bd5964d0fe43ccfff6ad57cfc7d3d99c9384c762e23b597ffcd923ffcfb6fc3dc4989fb9405c17fac8b6c8be6fb5d1bef6bcd51397f836f68b27ae5f445c62ecd35c9c04478e95fceac1f9d5c6e929c67f4d311fdc94f3c1bdb621b1cb836fc4dc54b3d4c317d56efacd70970fbf1171b16f96a690be628eb75fbb49cadc43f4af9bcbd3b3095f7b5f896326fcc9ef1eee7fb7b93f50cc07368f4ac23dcc972b92d8eed129f0b62a096f0c5bd657fe30dc75b43f6cd90f9ae90e671e2baec718ee325bbe3fce70d583123e2d993eabc5f5787195f3abff34dc3e4d8e9f6870e79bc662ce89b72e6d9e983ea6ac2727ea427f099d7a827b8beb5eb21c90b67ab20877a090699b1b2ff6b7787f10b897dfa55226ef0f744c97af5300562a71ee6bebda5be609b166d614f3006260bc2826faffd1b9cf7e3289b9ebec31b4697ecfe27ec7c6ea23c75da4dd9ceeaf8329fb15c57c7753ce8917e911371d39a5fdf0672cec1a073b6153602efd7ae96bcf01bc8a77bde57880b08b780cc8299f9503f8e7796428e78e375ede70b507f9bd15a6ef691e7dc477f10a86ab5d17afe0e1b9a278df0bdc5bdf1e2ce67f1d2cdaa77d671aae7c10af04f4f0c6594960cabc20d6d01e2cd6fff4ed2b9e8bb9ffa61827372ff0e0c974847cc8f40c224da47f4b623b7139ae3804dc83368dd43bf1be1c78cf6c55ac6330c55a0153ccfd37e5dca80ce99bd043a6cbe942ce34d7da9b17dbf8aef59596cefd56dbcffb0999127376c03a24348fca3998b2deb4c1d16196acb75d2ae2d86d3fef2ffdf365f6bdf9955a9cc601eeb4e3f7206d8dd6767cfd65fbe072f15e8ee90f4f311e3f1ec53a0973a348a7ca0e565c62aafad12bedb04c2d7e7f95adc780c6f6f3013ef3bf4cd106309afbc42dd6910d10f5f001a27c33c5189d798db85e2bc23715fa54315cf5cbb85cbf8ad509fcf493eb2aa42d63f9dbeffb2d76d8ca39e2b958bf3d508c2f0c94f949ccf135c5ba0553ac3788d7325c759bb89c27ec57b7d9ec6f23a698b31c0763a9fc6f2697b46bc1a37903780fe6c8c4657909e691c6c5dcdd417d3ddfd6305cf384e2354078d0171f1773b3e2600d665cac191eb4ce8359537cdb07dccbf010537c3f58e865ca3691983f6bca39be58dfd66deeb4e77d5bb0bc91ef65ffed56fcbd29d7513425bebf05e806dfdfe50e97b085833db6d0cf913dd126be01c429fdb998bb6a5e2faef738df0d13fd89a6cc5fc96c08e23359f6325cf352f9bdc5fb21b2fd7e6f80718b799ba698b328f34a199b957cb5f4f0a591777cebad621cd7bc2a7d0cf30180954aff95945fd609f636dcf53631e761a89cc721e65f9a8f8aeb0e374ebca1e1f69b0d53e0ec417f594d318f355edb70d7b56b0bd986d8b843651e7f4c5c1f0f2e6e5ec6489f52d770cd1b88d7f57050c770d7bb1a78c24bbf2ffa04e3f53d9cd7b7f53a54d475cd278cb265a40c5719fccdae604e19ff9be1ac0672c178eb19ae31c24478d90694f5ce241cb970a5af78d283f18093064364bdf02971bdd6cd9ff9b090ab829a1cbe76fe0cc2a1a5eb3059b7159c984f3b720e93f5e19d9e77c9e212ebcde28d3cf62ae6400dfbd5c61f9ee3b1c56d49f03d6dfcf83e86ab8dcfef2dfce172ceeb10f01d68e38f90fc3f6bb8eaf089fabd0cdf57841b089eb3ebbe1ebb11eded04ee736e5cef5861bc89e1ce1f623e743c07c809e5913cc971e07e9ee78d81dd3deff9763f273d136d95fddc7299724d842c3765f9fd627a7af8b6e192a5b19f5d89bd15bced9891c2ff8d94e92eede9a52471a5d8a61829eb3c725eafa74d91341e3f9dc49ccd7853c39d579ada718f6a6eeb364ace5991f331c5dc46b4bf57ce4b7ccd5fae44dcfb8bb8fb837b766d269ecb365a3bf09c5d9b8bf703c1bd25f3e899025fce277bd71d9ff9be23f3a572ae989c4f21e66cc5e578641cdc3319fa39df26ea6abb52d4f703fbbb895bdcf2c4e5d87c7f70cfae721cdaabbfa80f99725ea09c67f1918d2ff7a53277a72697af7d7c22e2ccf5d847aecdf518d1ff3346f6f57daa601f1f27e14bc6dddac34f6b7195f9c5cb8fc857f136e2fd6070cf6416fe7face80b333f13d72fdcf1a276f2b9c74eda7aec44ee2381d9891c134fa6f7571e3bf99a48d72438bee92ae61999622d8309e61f24786cefe8b041f81c53ccaf89e7b9b98fb707cfd9b59de1ce9b725ee337e9cb6c484c395741b6eb641a0c498e61fe20e4e9e8b16731ff2adec170b73f3bd83633beadcdc3f8551e9c4e1edb14730ee29d3db6d91e3c87f10cf4c4b3d1c72e649c5d3c718af957f1aeee3813e1bb89e743c13dbb7617cf0ff5c8d8d5f37e508a69c3bee921be1173a14c393e2de7c0feeca47f5cce57f905d88494fd57607bb24ffe2780e5b555b97fa9ec67937de6608fd2f881ee78e30719ee7aff41761a4c5c0b30e17772cfd14ee09e5d65bd68845bd7c477f2fd48f7f3443de640c3d50f3c619702df7ddc7ac7657fcac1866b5e61828fbe808fbe202cbbf6f3f0d1cfe663f22a0fb6fc6e80870fe90bfabbf9307f03cfd9fd1f4eda5e21eb1562cd537ca0e1ce97036d1926897eb8c9726e931c03fedb8dcdbaa825f654e92ffff2c42fc69ce2830c775b59da39e2bbe5b7f1c1065ee6c832e610c35de6f4f5a4755f775a4f94f33d55fc9e187b8e0f315ced84441a0f05693c148465d7433d697ca8cdefd41c0fb6fc4eeea52ae77199e039bb8f83b8840dc6c0bce52b6e05cf6418113e16b3e39e729a1d964d1be2cfcb8b6b054f5c7e692bfd8d4c5b3957af2ab8c7d296c5fbab1b232ef753f5a6b1b0e7f848c3edbb47da7a1cb65dc829e760564e2e7fac5208f28f22e41769e8ad37cab44ed8e850b78d4e4e612d604ca45d7c8c27eef6e039bb8ef5703756d8df3b1e9c71048ed897353e5ebc1f0dee257fecf918c1b3c85fb12ae07d9af58f98dc3742ae7d817b30c8f920707d93903d56c349b38d954038f99dcc0f35ed3057a6e213c4dcd0f804a16f65706ff1394dcea148750fe172f6ffe972de819873e3bb87b8e445f6cb4a0e202f922b555e40191f93f34f2689fbdace77578df6914fcccb8b4f34dc65ca445b57d6346118878b7edf98ec47cbf7e72a56cf833f49e08f05f7ec3d187795fbe8c5e45ac1466e0cd7da67b1c75e7cb2f37d62fdb05c37dcd07977955c8350177cc7ee65df47bee1f225ca76bf8f1d8f774fa01933c5bdac7381bd3051dec498a2770f98199b1571f6b571e41e3131b1ee4fee111313fd4b893d6272042f53dc3cc49a8ae760be6a7c0a78c6c27af77f49221bfa4cd627a77aec508c25ce14e5df4c59564a3b5ce31f970c179f06c2c9b8a63bcf12fd95873bcfe2d3c133769d21641b07ee2dd96655f3e0ce14e1c683b8d955dad804700ffc4f7c96e19e4320f10a804cb3ec38f345ff776c7f4f1cb305462d9baffc9d1e1e6603ac99e099c490df82f8f9953d9f28d260873bce6469e0dbd61473f4e2859e742f14dcaeb6e32cd828f410fd5a31d9ff33d770d5ef62a2df2726c770e719eefecf79e03b769d63b8fb89e7d8f1ce9ee60e27c737e34788f093c03dbbce17cf277be49bef91738afb390f57d9fd8dd4c194fb83f6763f4fac6769e9d6adcc58128269b451c004fd5164b8c392c4d33dbdef13bacb3338649bf7d224b626fd954cd73ee0ded269ae2cc7e45a1ad94f566cb8f26c4c8e736e05efd97581e1f68fc9ec50f6b325b3c3228f1d16d9f216ee8e9e1dc6c57cf0443d3c003b946dcca8d861e2cc1430261b6be38e83b419d93792a6cdcc6be00e17059b49f0fa008da96a33720c778fdb4c133b5d96cbfd9edab9bfe3e7ca607620d3f5488f1d1c09be63d7128f1d94d8f11d91e30e97b083251e3b10eb1ae2a5841d947ae49ce27e1ea41d78bf8f2fd4fb5ed566bc6b1ae24b816e19b6a384ee01d9615cae319176b048bc6f06ee2d1e8ae55c4599fecb0c573f695c9e35d0db83d306dc4bf92577796e19e32b099b17f5c2f8511e9b3f0a7cc7ae477b6cfe685bf60575dce112baaef2d8bcecaf95eb37bc367f8c47ce29eee7d96cf3f1e57b38cf1cbb07f3cc72cdef83ce73729d90b4c3159ebcb2c2b6db45728e8fb43fb97ea823b887790ec391facb7a498e7876bcf38cffcde27bc34ebb455f01bdb1b0ecba1a3c5b6d7fbf58ecffb0b82d88970a2bf7b7926d3d792ed3548fcef2b9d8174f7e1793fb3ec83114b0a77f22bf9e68e0fe448e259ee4b6f9f849e03b763dd970fb93936dd98f2c70874ba4e32986db9f9c22aea71ab83f39d523e714f7f340ebdf62cd98398dc68c9a8fe92ad70a0b9b899f66fce763a48f39cdb6d525f20c1439e729491b2526f72491fb7fc8316fd9168ebbe38f9f4ee43129873cffb01cb897dfb1ab3c0fb03db8b7c2963ee90e97c8636779f298e85b8dcb33f1bc79ec6c8f9c53dccf03cd63f23c1c9fbe96a8e5b13dd5d7936df929e5be26397fd3d37e4b94d1473adf9769b3c93a7345706fa5c39a620fb6fc6e8d5bc6b81cff906dbfeae09eb535c5f913cbb7dbd73503dddfc93d4712bacb7d53bcdc4addd2b5e12335bf5fa3f77d625e7126f210e037e193645bbbaffbfb989c37b3d4f3fd52f09d09ea79edc1bd1576e59fee70099f29db6a93c0bd9942db5ecaa9d0b6ffcf36d4be2fb3375286fd6c42df74fdec1acdef8fd4fc7eb1def7fff1e7fe3e5116c87927729caf07b83745df4a65f0b765cfa7e6b8e320fb73e4fcbe64fd39ab0db79f5b6dc773ec6e77b828f4e724c6a08a1dccc4b305804bc9ff5810febfb298febea9e6f78afeba8cfe0bd4be2f53173896c82362df92449f4f39702fbf33457f0ccc23c7db79e4844aee70893c22fb1a26817b33853e0a29a7421fc5ff7bdbccb06db9f635f40b4f950532beffcad2f4bed7ac8bec71fe9bfe977e81f51980f6754cce59eee3fe8eac1fc9750569d68f4e2be70e1785fa912c17e1f9b9ff95279e708a7d7789b386f385fca0eef99f6f57fc3e48dfc09ecbfe40ef1c326fff3a553f14f7e9d60fcfca7587db13f5c330e690fde72314be2fbfe7e6d0fde70fdcdfcb3efdc45a2238bf8bf5d98bfe9754c7f1d0b1bd7ee2ddb3eadfc6cf15f25403f7ec7a9e785e1ddc5b32af6d6ecbbd56ae4d90eb009ef78f5be2c6e4dcfbf305febee09ebd8778ec7d631a138d679d479f75ee7863728da6df9987624f87981c47b9507c331ddcb32b58fb101b249e81fdece2625fc6f87ac3e5eb1363461783b01783b0ec2acf75ae08ee2dfecf6feec196df5deab1bb4b855c83c5bdb44bb96fb74c87cb800c1bc03376957bf6cd00f7960ce7e5da3670de9f445c5788ef7a807b18e746f17e26b867b8b7bac3c7af14e1f2c1bde418e2ccf2e078e48a83fdabe262af227ea6b09fbd0a5e13f9f662c3956fcf2d76eb940ccf773d9158c71a1371f1336d599c571baeba03bf67ef53ddf34fac778f89f58cf14d9e74d924c2c1bd0e54f720906b5c0fd5d07f84ad4b67b9cf8d5cd7364c1dd394b6728de1f65fd7d8b6b16eb71dd705627e414cac418f897ed9985cef23cf1597b8d2766f05b624f6698b8d02cfe49aa5d1ceb3985c6730c649b74d923f39fe3cc35f57a9574cae27bad69396d78aeb754016b1d7637cb3878bcd3617177c67cb72515f812dcfc71075bd18586fb7e92c5c8e985cebb73721e7f51e39af17d71b809c727fbb9b3c72de64cb79e17a8f9cb2ec9dea9637ebd32c052ef8390aecd98de099b4e92d65398bc1f317403a24de4f0718d8fbc30d57df62e2b9f4f9377b64be19a44d65f0770a7cf8fa1159bf9aa98e1113fc98b20f1eac7b33e5b8d6ed4e3a6ede019eb1f0b2fcb84de82ad6c825cae93b009e987715df0ae494e1ee049cdc0930d9d573ce7b5c9cf37ee910b7ec89efe439edddc13dbbcaf3d9ab837b0be792cd4056c027bf876dadad1e3de45e636dc03dc313e7925e9a43c877af5bbec4fbad9ef7720f339917ef035c7a31ef737f23b112ba6c355c657042b6fe204e0afb5e1c3b190f328e040e4877f92c21df9d6ef92e96fba18834e17b4cab9667e2ecbbf8fd9e74bf5fc8b7d31dce94672e0e151ced12365e07bc579541acb18e3fe091e1015b860da3dde14c796e5a7f5b860d056eaef97b55197ef6a4b53c3bbe27b867b27c26c2fd22aef23c96213ed8226c221fcb73eb2b827b0bfbb281ee7029610bb9e3db0d571b80df83b8e30f7becef613bcecbe78970e24c93cbfb7a647d1cd8bc8c6b8727aec7c173767dcca3df636eec04cee3202e167ea4e7f910700fecfeb25bdd389c27bf725272f0889b4f529f1d9eefa43e2d0cb73e9f79701e0538969c97ffe9c179147029f8bea28e1df68a2e1eac473c9853dccf93e98cf220ce4b37e5992a056adfc7e4b59cfb7bb9d74c4ceebf5f5d1157e2c8356d738c44597abdc8fbb142a1ff138edefc6f68274f7aecee499be32bc7bbf11379fc29c39dc79fb2c36f94fb1cd400cf2b7bc2ec726325f6dbb064be52d8516c2e7827d3d653a6abeec5e5dad703e3721e1da7e44b27ce441a550798c03e7deb60953ce9f5b427bd9eb6b9bdaa8b3b5cd2bd54643baf485ce538f611c08ec4dc9f985c6f2afbcf77027e64f9419d6fc0c23c93847fb1ff73fc59a15b53706fe976b5e85f91e5652cc959f1122f26fab063726dcd7302bf10dcb3abecd7ea0beea13f7f41bc8f817b26d78f1e9c173d382f7ad2ee25c3d54f99f8ee25a0177b3fc7e67153258f3e49f446b9106b016362de734cfa0631ff38feb288b325b837451b8b3df7397f2026c627e2af88b00dc13dbbcabd60ab837b8bb74d624fa86bc498684cf4c7c64a3cb8f2ec6d6fdb11d497e26f037d2a83f752d714da8e097f94e40cc6989c132cf57b4dc8d708dcb3704b9d38ae17fb5ec5e43cdfd73d9cbc6e7372cd6776f86b45f91713f38663725dd9db4097951e39def4c821f735c5f6f6596eb8784bece3f3aec0a8eac3b58cef7df0ecddd4f88fbf1f00ff471929e91d5be5c47183e02f26ce298bbf0164127dcaf1b73c69f2969d26d76d70874b2a9f1cab97e38130cd8ef3c8fe8e47f677fe9d6986f234db23ef2ec35da7d865f37fbdd8df3471ae1d383fe3fa5c37564ceeddd3575196391e593ef0c8f28190658347964220cb5637167f97862c89321f9373b5e1f816138c83c87df2a6837bf6fe0447be2dbbc4b3e30dc717a9a6d92a4fbcbb3df1ca79c21f39d8b113c5b38f814d7d24ae9f78389265eda720eca7202cbb7e66b8eb3e9fd969b36593075b7ef7b9e1eeaff95cc825c744e479d4def1972f810c5f8067ec2acf909e01ee2d196edc2cb85e45c425cfefee01ee619cf25ce699e09ee9d6c11d3e2ecf28ce07f792638833cb83e3912bfe1dd051ee3f08e699a3e32f82d7447d469e572fda98377ce5d629191e6a6727096cd01f1113eb69e3604c242efb3fe4d9b95e3bfa1184fd11846557d9475011dc5b3adc52c9832dbf93e7af7607f74cae93c5fd2f841dfd0a64f8053c63577936e90c706fc97093e8ffbf791711976c87f600f7304e797ee64c705f0ee0c93d6cff04b2c9b139b96ff65f02632eb86771c87e3979de6333705faeaccc71b08f655cec19ca7d909f8dc9bd9887807b606337c9367fffd4f0dccfca9b66398e5d68e41b8b8d3c5ea16f6dfd9a688cb55a75ed8d094681b1c85868fd35c0ba2eb0fed977f2b9fcb2ad9193e41bdeaee73b855a3fad78b4a5c64aebd342c364fb2b8eb36e96588f0aadf00c63a8f54da9d1d9e8c4b11758ef665b382546b15164cc321a9ad580dc03f8ef7c2b4411079d57ae4c14f794898209576cfd2bb43e2bb53e64422eb19e1f623d5968fd2fb19ecdb6ee875b57f6d54ca3a331d5fae7469968455b6c2cb5eec65bbf1773bc9996d86543265369baf5d4fbcd580b7321976e81f54412bad8ba2fe6128ee3bf9771490bb9f443ad67a5d633a6cd5ca3bf755dc1632bab7b89f53716e77841192ee374a5e7a6590924d3404b1b267d1eb7c5ff52644fa408a3be02cb1feca75c1eef753ba34c4afcc7a1ed642c076bc56d6374e49499ae679d8c3c76cb174ce9ea585643dcbe6dbebb195d7c75c19961c9bd0fd7c049e1a7dfbab25d871bafdf56dead5a6723af0253ad7112d5fc886578b966bd3208fe2a942f5fae0313d44bbf89d1cfab2ce33248bf1dae8887534f800abcf0732780c9b6ac196f79b5d1a0f09cc0852fe6a27995196d3dcfb7e0990aed79440bb91a05ae374cc552a34caa76602254e40953b6d84da61c9534312c6978ed71fc1ec919539378453c712a25b47012278fd7a51af898301517af645514352d99c93e38bde4b10f5e7aefc7171b9dd1f983878c2baefea7ef9c36bbbfac77ece9ddcd394daeaefcfa5333eb5ede6c428dfbef1cb570fcb95fec2e8fa75f159e7ee94845a5601c4bc12a99ce5cc94b13bff4ab9ad0cb493ff68373588dc803c964a0182c87315835d37980bd5bc451f2adb0ea1cb22ebf365e078513588330c2e4225014964728ecc028ac89486594afec918a09442057c012a7da9e29bad3336ed6f757df434179d2b86bf996bcaaa65d11638f770ecf0c953dd9a21c67351d8659eff2adf085bc7aca9ec3c2ae1f8fc16985babff06796cd366be7651665b53667b539681feb4a46315e0961bc03b3d73a8819701fe7cd0cb5e8cc5099ca667575b359150ab99e2e72550ab9be2e72350ab9812e72752cdbf0f900d332926d9c8e18f9577febdb799632cb78eb7aa9f53dd671e39f5d1aa69c5d1af1ec926360dd496a1251d9a4069676ece13e9890dea46b44275d4d0ab8b126f05e94b5edab6b6db52891f7d314796f4ae426ba22d7a644ced114b90e05dc5413b82e96a5b9b164b60d6a37d1188e7a4d829dd0d124e56a7233836a2afacb4065d97a58d2301fcc8a55dd92ad3e963c7b653a7906724f362bcde469c1cc14e1814ea29644122593834aa206581231236f45598e37899ad149d4904affdc00d2bf1105de3a00f07d285a0e088096c698e572973e3f54cb9d603db3074d06f1b745bca7ddc15cc4ef596cb247c1ef0b66bf23ac6b81252193c5dfd2db247406fd2dbcb4619bb3872b99387ed6fea94874b3b4e3192b7c61a88cb82f6671ace4650beab54adefd28e43c5de4261472075de41c0ab9a32e72530c99357ad906df65ba6b59db6c94959a63ad4745bc15575036b68a746cfb534eaa73004eaa1905de2500f0e61838e3956dd8ac53ad6a81793f5e3b9c1aaaf77337e33bf33233df0a9d0ffe92a38dde267ce724dead1be6dd78c5b489e1ed40508db97b2adeab07f75efa9151dea925650d3d35ada11565c3070660c3b994173948d78bb4a6907be9221f4011d23b0042da20e079bc9d93f9b11bd63199ded84d1f2cb7f1b606354ae21717db048bb979dea94f64afbe86df188c1f3a95a1da62c9cc52a21fa25c07a65c7fb79cde54ef4ba77a3b2cd579f3297f8f7bdc811c49ce00c9b790562a7bdf01983df0864d8b141d626a520c4cc5130fe2a6126cc49411b5c78c8825ec60cc881823877854f05ad120da8af228c7342400c7d40103afc26fcb8ef3fd63fd9401af468377a4243f1491fc9fa13125c93b5125c130dd92a033853c5c17b90be6107863fdf88c388464330d0fb1d462b18db21ce811863d45ac6ceb4b4e351b6b5de770290ac5e488e43314fd1dca08cca1f0fe8641205fef792dd8fad718f73aa3b8d761fe806a8b62d2a8b75d719f379ac79e5ddc503eb32be569c6209ee60dcc8df9789a6e1838cbb26375b36c770cb921cfad88ab67b6ca6a745578cdbb4c3ca3e9787a60ae81f7861db5475d835dd3627873f8e45f1b6fa4c1e63d2de7a63adf32e065c270c6f3a2742e7fabeb0cd86629fb7afb0544098a6787893c3bf449213b84a91595017a6296c4ba30d86aa6321d200db8f18eb69067f06c78247fcc58b253b788072d328ee2151abb1aa3d2417220260d1b4c65ebbf92362c6bd3c00751c05334817b5179fc30dd3cde1b4366de86758ce8d6b0fa50624fd315fb60caa34e473cea9fa69a47ed4b811f8e80df1f5303ef878133639d918a8df858757f0a782696c7586361009f409563fd5f647dc1da91f93cf7e7f0c2d0f10639565e2fb2fe2a150d05197e9115c29e37af22e7004c4e6614f9ba4631904ab75948bafda8986e8328f0d908f890b81af8600c9c715880a51d6b5bc859b9f344d9e6f68639bcb32d872f5a592aba9059ca2de1e99a631c6d357e8eb1aea556e81c5e0e14f377ec6f96d2ccd7aaa4e92194fc8598fc5580fca381842a310ea1fcd61cc46f998a7e6b2806ce2a3e730da2e2c376b450aff81c4ad15684d1c6466b0659d51756735dcac38fe3065098a82b170454400e43e4cae323880b8d3d592163ad05b6c46709ffdba9a2b0b89d49e53a152fb61b87b7e2257ff08a171b3ecd353b19c92b5e41484f55b086534eb51871aaa68a531d8121b3bcb080ca0b0bd3ca0b2329ffba0873dee5d4fceb280a7c31029e5b5e0d7c34965bf8d0eae23d9a5b685f309663339fa1df54617b89c4bdfd167cf8b74b0a79222819db98cc9db1f0b305734b5831c066a2ceb2c46642b3e036f93c33e3b9b984e7e64c4a4ee5e83194c92e414c769ea2c98ec5c099c99622a9d9613fee439409f6ca5342cb330e91278f8ff497ecd12c34902364221b2dc5b2510e63a05b0ac618a49c4df8048425bc782a10c5935d083631abf22c52c8992de245187cdfc6acceeb2e4bacfa6c09471cc76b9825962c7379651ecf74cb78a6cbb49e54c61b4f65bce548c67b4131e34da0c05720e0e52aa8814fa4c05762a59c22f8240c9c65d1a3309791c3cd254443f24abe8c967c3245cbd1082d3d146999828133ed56199aadd9c328b18f41c42e50147b2a25f6b1ba624fa3c43e0e117bb7a2d8d329f0d508f8d68a6ae08763e0acd46303543a3d33332860b6cf4a99665e736e9976fb7cb6a78766965108fa5d0af89395d6ef62ebd96c0e91c357d3cbc5412a52cea4b83d11e1768522b7f914052769723b0b0366e679722ac03e93846663c0acdd738a41b47bd8a940eaed9e028af6d310da2b5552a3bd90cae6a7eb66f33914f219bac87329e4337591e751c867e92217518978369288f32aab25e21114f83908f8fd8ae0f3a98cb906f34d2d0c3659c86901d8dd164e7f62be6517a5dcf3e45825b25d432b70f54bb2bec622d159a592cf8b2939d76272da5344d812485671c8e77dd72cc65196be2ab12ea0a83f17a1fe4745ea1752e0e721e0a3aba8812fa2f83a1fe3ab419274651d8c25e06947eba90a8f8b2969d661d2b05b27dd54e23992a2f4028452b68da30aa525941217624ab07506367d075a948de41dedf962ded5325e8cabd3b88492e0224c027bda8eac188c4eb35a504a51ba1ea1b49722a54b298f7cb1ae475e46897d09e63415c55e4e897da9aed82b306456ebd86010b50e764e957aad632515cfe5543c57a415cf5114531b75993a9a4ae02b9104de5c4d2d815751e05721e0bb15c18fa1c0af46c0db5657033f9602df84809fa4087e1c057e0d02be53117c35057e2d02ce2c4305fc780afc3a047c2f45f0132823dfac6be42752625f8f88bd4a51ec9328b16fd015fb6404398f2f82cae43259efac43b509ffececa9d4b62160275261cb6393c54f75409e82a50b2ba16fc2445228ca4fa5ace966c49a862b5ad36914f82d08f80e45f0d329f05b11f0ef14c1cfa0c06f43c057d454033f934accdb3513f32c0a981db4846e01378ee7ac425e9d2fe47bea2de47f2de4fb9a16f20923f9dcf69d0e273961846dd29823acb744d874b165ededada72a529f4d49bd15939a8d48b12e7fa7de6c3725ed6608369f37c768256addad94e43a87b2813b111b68ac68036b28a5efd2b481b5989fe5cb3f8b42f5b3d4fcedf1bc879e6daa3a875bca82801774df9db24fdec67d325b84149eac94ff3e174b6e56b7bec720ead6ec5cb62a4c64a5baf57994cdde87d8ec06459b3d9f02bf1f01dfae08be8e027f0001ff4a11fc020c9c556bd8e9685ad59a0b29b11f42c45eb7979ad81751626fd7157b3d86ccc23f9c8afbf1e922bf9832f4472843670785a937222fa1fce70e4dff792905fc98414c5b9c9ae812b37b6fa62b967f1bb01819f0e38809fda968429751e04f20e05d6aa9815f8e81b3c47e924aeca7d24aec2b286b7d5ad35a3752c0cf68025f4959d14e4df3bc8a027e5613f86a0c98a53d3b20cb3b799601a84c9edd4459e1f388154edb5bcd0aafc1c099976447846979c96b29b15f44c45ea528f67514f84b08f84645f0cd54ce7c99ca99afa49533afa7cc911d3356c65bb29d286658ffd8f0371b9e9e6b41b31a149b60be82bf59cc5b1bac0eaf62bb375052bc8649513b214507ebf702c31edeb06791a42fc38d940caf6332ec2d64e86cfd9fcdebd3ec9b15d6eff425d84249f00626412590166cf917abf1aac4761365be6f22e65b5c5bcd7c6fa6ccf72dca7cdf4ecb7c6fa19cde3b88d38b2b3abd5b2986de4518caada3c6d06d14f87b08f81045f0db29f0f7b1b45504bf834adb5d54da7e9056da6ea5b2c3877eaea953c0aee94e4a8a8ffc5d53c7005dd35d940cbbfd5c5397005dd3dd94041f27734d93787c6a4b55b651e6fb0962be3deaaa99ef3d183833df4f29f3fd2c2df3bd97a28c1d1ea653d1bb8f62e70b849d1d8aecdc4fb1f325c5ce5769b1f300a5c4d788128deba929f12045fd379ad43f4449fd2d2275a9a2d4db29eabfa3a8ff3e2dea1fa694f81fa2449dfa6a4a3c4281ff80807751047f9402ff11019fac08be83a2ff278afe9fd3a2ff31ca38d9e17664b1d639e062ed714a8a5f31299c62ad5380c5da13940cbf6132c862ad6b80c5da939404bf631254369c626d101f3359a438efe629ca80ff400cb8790335037e9a32e03f2903fe2b2d037e8652e26f44890d8a4aeca4c0ff41c0ff54047f964a6eb69858a75c788e92da3491fa764335a99fc7c059f748ccd4ec1e7981123b8e88bd4e51ec1729b2cb9948de62b3e0fc67d68db7822ee673dfe672bf53c2279edaabd30af898e568c33e3fc65ef49e6f3d2de0cbe1e7f17be937f38d596244b1231f51940be6571af65102397c44df3e3c30878f2615886d14e6f3274b78a842808c8f591689b15738caa93a41f6252a81ca2309b44931815ea6c02b20e04f2a82bf4239a38a26e18c2a99e938a35729252a630c355253e2350abc0a027e9a22f8eb1838cbac555371463e5dd76f20c0797c8bdf3d33805c763bae600790ab617ca103c8d5cd6403c8fab25203c86f52b65403cb6d8ab6f41606cecfc0d22d22dea690f7d2457e872a1f6a6916c6ef62f6df9c3d9cb347ec5f67a3bc248750a56cf9b5b9e51fe063f97adbf9e129f11e653c75748de77dca78ea6a1acf2e2a9bd643b2694e63b56cfa0125757dac4a646fe2bb44ac8dc657dbe4f0ea528ee2c4a80f29391a6072b08d76d4f03fa2f01b6aa6ce6e0ab8112638b31fb6e7fe785e279c6f0ce646ccea65f3946b621f5376b10f6217db14ede2134aadc69a7c7d4a49bd2f22f5ce7dd5a4fe8c927a3f2a31e4340bbb6aec9e8ea8a2d6e754cc4db09859c7817d526e5ee208bdbcc4a64ba3acbc5560a82ea0f98292200793a03e2ac170fe57295f0e6f3720d25b1ff525254b534c967d5294a5ec196b2a327d4519defe88e17db59f9ae17d4d29dc4c33bb7c430137d704fe96026ea109fc1dc5734b84e76a4dd478fe9e026f8580bfa008fe3f8a925c4d4a7ec08099f769add9aefa1103664dda03a8266d9bb49ab43f61f130dadb22b46f6eaa46fbcf9412ed2825daa7a5c42f94127988129f292af12b05de0101afd34c0dfc37ca303b62ee94eda032d6807b9e14f0eaba74e4b9466b5ee02d14bfddb3ed73f89d5dfcb4e5db3cb037d2e52ee1b3f173b86376963bdbfd536ce1ee62c33d375ec6c3faa5ec22764ec29de770675ea038b3f1778a8b4e18176c476cb897a15d61750a5867e9f1722e61b1e1ac98b5e563322743e86485565da1f00765309d118329d85fcd60fec4c05996ea4265a9ae6965a9bf2825ba61bd518a4afc4da574772ca5d9d26fbcb775aae8a7652b3c5843c5deb8c92f4d737ddfb6e6b371ed1e5ac7aedd396011b70cd91beb7e57caedaa14c945b3b8848b405fae8dbd48347455eceb1f8c3d76ca5f0f53ff943fc324c07b06006e62e0fcd824537fabe818057e5000e0710c9c1ddbd9cb34e8b330bd11b4a423284745d03ba008ca5309db278084ad40811f1c0078450abc6f00e0953070e6e7fa217e6e5a0b353f579902ef8f80375004af42d13200a1e5d99d3b7babd05295927c2022f9ad8a9257a3c00721e0a58ae0d53170d60d3858b71bb00625f62188d8df298a5d93f25e4302f05e7b51e04311705311bc1645cba158fdb8a51a2d7b53463e2c80bc5f9b021f1e00781d8a9611082d3d1469a94b25e8c800aca51e053e2a00f0fa142da3115a8a15696940818fc17a2015c11b52e06311f07714c11b515e6b9caed7da87127b3c6687add4c46e4c99ca04c4545467c4ef4b493e112b9a1525df8f927c520046de84927c32d697a528790e053e05016f9eab06de94a2e5b0004a8afd29c9a72292ef5694bc19053e0d015fac08de9c029f8e80cf6bad06de82023f1c2b4015c15b52e03310f00d8ae0ad28f099989d2b82e752a6981f400e6d4d15fdb30228fa0fa068998dd0b25591963608789e55d9344cb63374a676c69960e81e875b80f457e5f1039b1b96d12395d80a2dbc4a0c8e9136f900c338c9fa7fabf5bf791bc3286d63505b87cf31d928407a7192c7e45206301731805507a819403b0a7c1e02be5911bc3d055e8480bfa2089e4765ba2302c8741d28f0f928f8ea8355c03b52b41423b4fcaa484b27cad12d401c5d4cd1d175a6245f8848deb88d9ae45d28f04508f81045f0ae14f862aca5a008de8d023f12015faf08de9d4ad0122441cb2926680f4af22588e4f72b4ade93022f45c073daaa811f8881b37eeea526d2ebcffa3ed9b4b0f97ceac6723ed6e4ccd956dff9f4202af66558ec6cf5859cc9638fafb16f54e2eb4551b91c6b2e2aa6536fcac256045037ea4349be12917ca0a2111c4c811f85d5a415c1fb52e04723e09b14c1fb51e0ab10f03f15c1fb63e04daddb63cc14e6116ca1810750521f8b48ddabbd9ad40329333c2e00331c4449be1a6bb9e4a9493e98f206c763dea09501d78b14f0b1bbd97c7caf20b1971cbb2ee39f14f1113fe7184467d4d99ee45d62d533553cc92194ac2760b2b23aed40cb634aefa512d3102aa613b1986af2700bb98e451607cc47b2baf118fe5a7526cd502ab94f4292bbb4835a721f4a297632a658535772fb27a4777e61be21a70da8283f8c92ef14aa68b407bee59c3abdf973c329ea4f45a8dfa248fd080afc3404fcd68e6ae02329de4ec7783bc095aec379ca951af6e2ab129e762c05d97a8c257c36ba9c032d53dd9dd24e6657e17a1425f1195416730e7ac4329b4adca3a9b8cfa4accc3eb57b462027218ca1623f0b8b9d35c8d9f257b6e94e322958b81243755eef584a9eb33179ea00790a132932524c784a7f51f0384a8a733029aa0229d86473c73654e21c4f65c9354896ecd1592d4b4ea0145a8b29949b244be2598f25369b03b4521c493c9fcfc0592cca62152a2652549c8b50f16327352a2651d5a3f302a81e4dc6c0997d9c6f6a8e184da1c45e1780d88751dd341704d0073495e2e4425d4ea661c82cfc45a9d4cf7de6f94ea70c703d62803bbaaa19e0e114f8c508f8f86e6ae03328b22fd1257b2645f6a59a64e753c01b34816761c0ac08bb2cf1c2332bf372339d5999b3a904bd0249d0171413b4000367be736372cf3dc0606bd75b892ab05c0b6fb740e48c4a36c7d299a569cf9d84678fab55660a2969afa42a52e37985dd7be2793aeda4399487bc2a000f39974ae3ab91346ede5d2d8de751e09b10f0158ae04554925c832589bd4e499a88dcc0a01814eeec7e16afe5da753d95243a8252f45aacf74051d1f914f87558834911bc9802df8c80ef56045f40815f8f55fd7aa8812fa4b2c50d48b6501dc85844497e2322f91045c91753e05b10f0b58ae04752e03721e05f2982975079ee66aa55952ccfcd1683c4cc39aae7bb2594b2b720ca4eeea9a66c29057e2b025e47117c29057e1b02be4a117c19057e3b02be51117c39057e0702be5d117c0555cddbaa5bcd5b49897d27969a07aa897d14057e17023e4f11fc680afc6e047cab22f82a0a7c1b02fe8622f8315445f51eaaa27a6f5a15d56329b7741f553b93fbcec95a63fa5d2ac75171df8fc55dc370ba54ec5a2c9b0b539c56bd703595740f2049b7e920b5a43b9e52eb414cad7a06ac9e2f37f23dabe0dd9560351f7f0225c9439824ecb65fa21ea712cf89547d627b00d5ec93a8b47a1849ab5f15d3ea640c9c09f3482a0dcd7634f02914258f0640c9a914253bb05a506f354a4ea33ccf6394e7793c2dcf733a555e3da15b5e9d41f51e3ca9d97b702625f253ba229f45a5e8d3488a9ed4472d45cfa6c09fc18a5845f0732843df1980a1afa1b2e7b39ad9732d25f57301487d2ec5f7f358db4d91eff328f01710f0fb15c1cfa7c05f44c01bf455035f4781bf8480ff79b01af80514f8cb08f84e45f00b29f05710f04afdd4c02fa2c05fc55a9d8a9cafa7c05fc3ac4511fc620afc75ccaf28d2720905fe0696a08ae097528efc4d5d47be812a7bded22c7b2ea3f8781be1e347453e2ea7cafc77a832ffddb4cafc2b2825dec39a4cfdd594d84829f13ea5c4aeb494b89252e20344897203d494b88ab2cc0f752df36a4aec8f10b1c72b8abd8902df8d806f5304bf866ac67c8c3563587ac24941705b3c7b7ca3843fb377a87076fc5569f05c4b49f409d5721d2a762667875eb0176c52c0504ba662cc0df8c47c1d45f4a7586b4891e8cd94f17da66b7cd7536ef1734db7780395125fa402ec77f013c5c597ba5c6ca192f02b24099b0f544bc29b28f0af11f0d58ae03753647f83997d1dc3bb79b7bd01f6423167cb9e957594a1daab710b25c5b79814ec90827e7ca0d33b696522ff5dc4e70daaca702b45f37708cd670d56a3f936043c8f4d6d3533b9720c6efd9adecab1ef9172378f0d4723abb85289ed7f165e054618fb696ffd5424968afd60e24bc55289845a2a763b95e23f2229fec220b514bf83aabafc44555d7e4eabeab295ca3abf50e59637d38c30d860d33cbecdaf4a86b9936a70ff8a34b855871cefa2d4fa0d53abb9753b80cfc2953b18b369e1b6a76a9f98c83687679205a28ad0c97528007bd259b9d270376541bf2316b443d1676ca38aab3f748bab7b306416fe4fcda2fb5e8a8fbf103efa1ea2c6c77d14f8df58c35711fc7ecadefec1ecad8fab1c9ccd5f145b9e861d02c14677171a7233be053cb3b143254a79bf3ff34fec309bc5c267d995587848c52c63a921275aba371b74ac56c5461fa0cc88e5492d337a90423675911fa20c3416d333d0ed94cf8ac7f43b091fc6c01b5bb7e5626c23e6b2e06804f3e9081ea17240f958d91cf0dd10b51cf02895032ac4901cb0bfe1ecf2bcc0582ad668cc32ec2d02d9df72d340f6774760d7723c4c7d19e10e4ac28a98847ce5b4688e39bb1d2f518af1318af04a08e1c543d5087f9c52a732a64e03ae4ed9450865e94f6f71c41394aa551055730f5553f5490abc2a66b88ae04f5135ad6a31a2a6553d964e4deb69ca77d408c0773c43315413b3b4616a0ceda424df0b91fc1feb4745f26729c96b2192af1eae26f97314f8de08f81b8ae0cf53e0b511f07923d4c05fa0c0eb20e0ef2882bf4881d745c0372a82bf4415ebf5748bf597a962bdbe66b1fe0ac54703848f0e23d5f87895f22f0d29ffd2282dfff21a954bf709c0bfbc8e8157b76e1ba7427d6d1af80d8afa7d11ea878c52a3fe4daa88dc0f2b229925b1cd8af38d9586bd84c9bd3058a5387c8b4a8c264862988a89f136c5590ec2598fd16a9cbd4371d614e38ca5acacc77967a3da9b94b34e75d5556eef520aee8f28f8a7a251bc4729d82c1553f691fa7d2a8f34d7cc23bb28636a8118936a4fc90714d72d11ae172b1ad38758bf656bebd69c6684d96f39d1421bc0430c34865922b6b7aeacc69b0ffe1a6f7d319f1b276b54db5fc8f0febd98ad62ece44b3733796c85b299c39fe9c55d8b23b3d9942b79339fdafd2a37c6ba34838891eae0fc88328dd68869bca0681abb29a33e2080e2ea630abc4d00e09f50f9bcad663eff94e2bb1d56a11ca3c6f76714787b047ce65835f0cf299f9a87151af541a1e19ddeea9c4c51c83b01ecbe661537fc05a5680744d1e68a8a7e49195647c4b054774dfd8a92bc1322f97a45c9bfa6c03b23e09b15c1bfa1eafc5d74ebfcdf5299adab6666fb8ee2a31b6626e3d4f8f89e3293ee01f89fff5194f4d0a4e4070ab8a726f08f14d70762edcd096a5cff8481b333110f4a45eabe34f0cf14702f4de05f28ebe81d8075fc4a65c53eba59f1372a150f465271d524b554fc9db2bdbe9ab6f7074576bf00c8fe93a2a43f4249e3c96a94fc4515aa03b042958da28fe5a116f14ab23d86696fc057768babc59e766e81e11cba942bfad65b2b15bb7f53540cc4bada14ade31f8a8a419a6d36234658c7e000acc3c4c0f9a9130825d3a6a85112c3c0593e1fa29bcfe314274303e0a41c06cef2f9a19af9bc3c45f63084ec5f15c9ae40810f47c0b72a8257a4c04720e0db0e5303af8481b30c311273222d5127c2969a2de6ae63b661efa6198603a94cd1300aa1a15491862a140da3a99ec009c648ab713cd218654cb27ee718a38de1463f638a31c8224845adaa945a63b09199696a6a55c3c0591565ac6615a53a053c4e13b806e5b6c6ebbaad9a14d11310a2d72a12bd17053e112be8a7ab81d7a2c02721e0272982ef4d814f46c0ef5704af8d8137b16ea7205d641d720cb64f5425ebb7dd295c608c17bd7d067fc3ccc03d6d05be6f63b26282f5070c1613b158ffdf223e343f971b4b19c997d192d7a11cc261984360f1ab64faba14fa540c9dbdb07d675e1ad31aea51093c0d49e082c3d512b83e053e1d01dfae08de8062e970cd5a5d430a78862670238a8e99081d9b14e9d88702cfc7a650cc50036f4c81cfc2baf915c1f7a5c06763351845f0fda8c42cc0f252a9e19d62ce06a6d85439dba3e480e99c8bf88843013f25163fa554f6438ee67e89ad1c99c527d2d907a3cfb07e2fb27ccf5c5e0b722683ae141bb9da8bf5ed79b20c7321c76493f9e61bf609a44bc1a9a2ec7a88986604a7253b9bbd482dec3a98da8064132a890a91247a52318972a8249a832591bd413bdb0317d2a7a24c532c3e36a43e971a529f97d690fafe945e45985eac94c853d2a319952847606d96d96a89d29c6ac6cd0f60d4b00506ce1624146329c0fa2616582f2ab0b29ffdb4173f15cb2607eb8424226d4969b4308086692b2a2d162169b17a8e5a5ae45286b418332467b36399f7d917ec9ce2956202b0dc3ad6f166cbf93869311849b167f3392bdbd4fc456b2a8b1d4965b192b4b2d801549a2e09c04adb50695a8a35dbe7a9a5695b4af2a50148de8e927c1922f96747a849de9e927c790083587994e42bb096d24235c93b5092af44242fa72879474af2a3300f50a22679272a3f1d4de5a75569e5a7ce1443c704c050178aa1631186762f5563a82be5238fc37ca433864cade9f56e94a4e2fdba51b2acc66461b763137e56259eee546a1d1f406af5a0c04f40c0cb2b82f7a4c04f0c00fc400afc2404bc9222f84114f8c908780545f05e540e3905c9213bce56cb21bd29ab3c15b34ab6d936b62b7b87507765ef4311701a42c0c6d3d50838984abad30348babe14f8190180f7a392ee4c2ce9185f5813532521fa53319e85c558cfc0da6423b8992c1166e0bc51ab4a0ea024391b938421b0697daa5d33039158f2da58b7e61823734ba4c78b497bea4ba3cfb1e4afec218397fee8e4bf353136f9af6e19cdfce2a7a6f90dc2d287ddaeb55eece311e9d011c757dcd0f8d95899a4294f27cd60ca00cec50c80f5f2ca6341e6580f9d9990aa93b00fa17cd179882fda72be9a2f1a4229753ea6144b297624de3cd10d24ab2ab029d74a3867b5f599432939d66172d424c9956b4e55e23e941accb94077306718e58c2f0ca0a93f1c0367cc5c14d33fc862046574eb11a35bb14ecde84652e017637dfd17a8818fa22ce912cd5ef3d1183073cd97a602cc5c1d013c06036e6edd6e4805b836ddd33496a2e2322c53318b77ea55e92e191947c579395d4caaef733b9ea2ec0a4dca2650e26fc4c46727540d34e0a112dec31dd46a3b13a98c71259231ea5ca896312661e0cc795d950a673eebce26539c5dad99e3a650c09bb0c460ae5256379d93537592e3302a39ae4192a3c1456ac9319552ee5a4c3967f32fa7b9e30cfd78279c3b03362aea4ea324ba8eaa0bc86dabb125d9e96f9f3d9d9263b35f5da063205b771f4ec57d3de5322507f65e4ce96cda3d838af3062c4e780e1c1e777aa7d1cda4ea2a37065057c9a772d2162427ed5aaf9693665192df1480e4b3317016fee6549c9bcf4ebd051425b72094b4dda846492145c9ad015032070367eee0b65428e94b03cfa528b91da3e44a354ae651e077605d3a8ae04514f85604bcf42a35f0233070363de9ce58964f4f9a4fd17217d67455a4a5180367631177536311dbd21a8b588075c9b43532dc25636fec55924697cc3d96fc2d3c74b4273a64ee253a64fc62a73a641662bc318768cec8206f7638bbeb6f9c98ff5b6a8ce2e3d0f6f1ba4bd2e0f4be98cf5e4628b3f773669b95d13c5df928d61751958907b0ca041ba39f6af4e2c8c51cbdb7d1cc186431dad9fad7c9e862f4e15385c75a128db5c2e581907d2c86ec2ae954317e3fdd48e7e8e9c594c40f6212374625ee60fdebc17f77b0e4b25b0165a55591ea48ca753d84b8aef1d7a8b9ae124ae5ed54dd1f9f52e5f4b561ad0215759750ea3e8ca8bb4d51dd52aae5f98866cb732906ccf2d8a3a90057a7bb01965174ec40e878e55a353a9653a9ff1896faac3c97ee70116fd379fb59f116213c395cc5125650d23d8e49b7bf211bdded8d0956bc2cd609dc75157337ed75ecf6e8cc38e1f0ec13ded8372a12aea412e7092471fa2a26ce5114f89308788febd4c08fa632c2539a19611595119ed6cc08c750743c83d071da66353a8ea54c6d27666add144d6d90d860b2443c61ef1858fb44437909f85bafa7e8388aa667119a7e54b49ad514f8730878af1bd4c08fa74cf2794d933c816a38bfa0d9703e110366b72fc6ca0ef4bdb6f9d01f1b4cfdfc439581be93a8085e42225872fa791fbf576ff65495084ea6ecfe65cceee5f970f848a2da568ea750435dafe80e759d4a21bfaa8b7c1a85fc9a2ef2e9542fc9eb01f4929c4125f21b9abde267527cbca9cbc75914f25bbac86753c86feb229f4321bfa38bbc86427e5717792d651aef699ac6b994c8efeb8a7c1e86ccba8a76a522b2cf82e7f329913fd015791dc5f2879a2c5f4089fc91aec81752c8bb75912fa2903fd6455e4f217fa28b7c3165739f6adadc2594c89fe98a7c2965739f6bdadc060af80b4de0cb282ebed4e5e272aa66f99566cdf20aaad8fe3a80627b23c5c737ba7c5c49f1f1ad261f5761c06c32c47729e513baf177356574df6b1add260af87f9ac0d750a9f7836eea5d4ba5de8f9aa9771d957a3f69a6de668ae49f3549be9e02fe4513f8062af57ed54dbd1ba9d4fb4d33f5b650a9f7bb66eadd4491fc8726c93753c07f6a02df42a5de5fbaa9772b829cd7deba358f30c21c499a208ef45a690c4a1ca9c330b1ce783646438597a34623f8e94276ff92fff8d2dfa9a4c5289ab1dba8b4f847372d6ec790592f305b629754e46d34f01d945d9aa900fbd8e5560a38a6097c2795f7e3a900fbe4fdbba8d42b17d74cbdbb292eca6b72b18d02aea0097c0fc545455d2eeea5902be922df47915159938cfb29e02a9ac00f504dadaa2999320dfc202571354d891fa224aeae29f1764ae21a9a123f4c495c5353e24728e0bd34811fa5a8a8a549c50e4ae2bd35257e8c6a1ad68eeb370d1fa7e8a8a349c713141d7535e978927271f5745ddc5314d1f50320fa694aec06ba623f4389dd3000b177526237d215fb590a791f5de4e728421a0740c8f394d8fbea8afd0285bc9f2ef28b54266fa299c95fa2807334815fa6809b6a02bf4201efaf09fc2a05dc4c13f8350ab8b926f0eb18305b79d022aebfd6ee0d0abc6500e06f62e06cdd522b0bbc29028e46d0928ee02d4afadc00a47f9b724fad03704fef504ee4005d27f22e85dc4617f93d0c99cd05691b2f3b170425c4672ec8fb94adb40bc8567651b6d23e005bf980923e2f20e93fa4a4ef1080f41f51e01d0300df4df9c54e9a7ef1634aeace0148fd09958bbae8e6a24f29e4aebac89f51c8dd74913fa75c61f7005ce11794d83d74c5fe92ea79ef998ae9f9f4bc7f45897ca0aec85f53c807e9227f832137b56e7ba542c6161af85b8ae5de9a2c7f47595d9f00acee7b0c9c9dab76701c59d8c4d62a20a78a79e3639b1412f1fd8f72837d35dde00f94c5f4d3b5981f2991fb6b8afc1325f2005d917fa69007ea22ff42210fd245fe95421eac8bfc1b9580876826e0ef94c8437445fe83421eaa8bfc2745c6a19a64fc45893c4c57e4bf29973d5cd365ff43b9ec119a2e9b0dc4a15c8cd4e5c2c490997f1f958ac83e53ba6318302b65460750cac429a9c7684a5d8e927a6c005297a752719c6e2a56c09059f8f19a865791127982aec8952891276a8a5c99029ea4095c0503660e6cb2a6a7ab4a913c4597e46a14f261bac8d529e4a9bac83528e469bac83529e4e9bac87b51c887eb22d7a28c6e86a6d1ed4d893c5357e4da1472be2e721dca3bcf0ac03bd7a5c06707005e8fe2a4409793fa1472a12e72038a90390110d290b2ebb99a76dd88e2639e2e1ffb50c845bac88d29a68f0880e97d29b1e7eb8abd1f550b2bd6ac8535a1f85810001f3994d40b35a56e4a11bd4897e8fd293e1607c047330c9cf5d81c194e8f4d738aa6125d9a5a50342d0980a696144da5e1d0d48a72904b351d642ec5ff325dfe5b53fc2f0f80ff0328fe5784c37f1b8aa695ba34b5a552f628cd946d47897cb4aec8ed316476d0c1aa54441e4403e751a97a4c38a9da81a2e8585d8a3a52c8c7e92277a2b2d5ea00b255672a018e0f2701ba50ca9c1080325d29654e0c47996e544e3e49332777a71439391c457a50a9724a00a9d2130367331c4f4d85a51e34f08194d4a70520f541547e3e5d373ff7a212f78c7012b73745d39901d0d4874adcb33413f7604aeab30390ba2f057e4e00e0fd28cb59a36b39fd29b1d70620f600ca2ccf0dc72c0752349da74bd320ca2d9fafe996075314ad0b87a243288a2ed0a568086549170660494329f08b02003f94e264bd2e27c328b12f0e40ece118385b0f70492a36e9b31e60046593978663932329fe37e8f23f8ad2e4b27034194db989cb35ddc4184a912bc251642c95241b7593641ca5c995e168329e8aefaa70e29b403177b52e731329e44dbac8933064b65af79a54ccd667b5ee642a3f5cab991fa650c0d769021f860137b76e37a7e454e9d5ba53a9d4bb5e37f5a6515cdca0c9c5748a8b1b35b9389c02dea2093c8322f9265d92675224dfac49723e5545b825802ac22c8a8f5b75f9984df1719b261f05942fba5dd31715525cdca1cbc51c0a79ab2ef25cca38ee0cc038e651e07705005e447172b72e274750626f0b40ecf918782bebf69e54accfe738f7622abfdcab995f1650c0f769022fa452f07edd145c44213fa08bbc98b28d0703b08d2329f08702002fa138d9aecbc9124aec870310bb94ca2f8f68e697a594d48f0620f5320a7c4700e0cba9947c4c37255750c88feb22afa408792200428ea2c09f0c00fc688a93a77439594589fd7400621f43e59b6734f3cdb194d43b0390fa380afcd900c0575329f99c6e4a1e4f213faf8b7c0286ccc2bf904a32fa4c0c3e9162fac500983e89027f2900f09329b25fd625fb144aec570210fb542a43beaa99214fa3f8784d978fd3293e5e0f808f3328f03702003f93e2e44d5d4ecea2c47e2b00b1cfa66ce46d4d1b3987eaa37c279c3eca3594db7a57d36dadc580d932a8f75201f65906752e06ccc63ade4fa9c788063e8f32c55dbaa6783ed530fb40b361b68ee2e2434d2e2ec080597ef82815609f69ac1752c0bb35812fc280d9edc7f1b26770c89f321194a723584ff9934f02f0271753e09f06007e0965d89fe91af6a594f7f85cd37b6cc080d9d1e95fa402ec7374fa6514f0979ac09753247fa54bf2159427fd5ad3936ea444fe4657e42ba9ccf86d4099f12a2c8266d6ed77a970e2737cd5d594abfe5ed3556fa252f17f9aa9780d958a3fe8a6e2b594c83f6a8a7c1de5367ed2741b9b292e7ed6e5e27a8a8b5f34b9b881e2e2574d2e6ea4807fd304de4201ffae097c13957a7fe8a6decd54eafda9997ab750eee22f4d77712b554efdad594edd46d534fe09a0a6713b056e94d307bf8302370300df4a81c70200bf93028f07007e17956bca95d3ddfb9bcae8e5cbe965f46d94c8157445be8742aea88b7c2f4546254d32eea3802b6b02df4f715145978b0728e4aabac80f52c8d574911fa290abeb226fa772778d0072f7c394d83575c57e04436607b9ef958addf5a5811fa5f8a815001f3b28f0bd03007f8c22bbb62ed98f5362d70940ec2728f0ba01803f4971524f9793a728e4fabac84f53c80d74919fa1901bea22efa48a81469ac5c0b394c8fbe88afc1c829c9767dd9a138c304fd97123dbe1ece3c1a78a33721658ef67f393718aad37b3929c9dd31863d8f4f0d0a18275bbaf1532d76c5846bb5464284fb0f83c957bf70b20f7be40257e13ddc47f91123b2700b15fa2c09b0600fe32d566db3f959ce6b7fd3906cc4e9d6a960ab0cfe14caf52a9d85c37155fc390d914cb16a988ec33c5f2754ae496ba22bf4139ca569a8ef24d8a8b5c4d2edea2b868adcbc5db94291fa069caef505cb4d1e4e25d4ae2b69a12bf477598b44b05d8a7c3e47d0cb8b975db3e15609f19eabb28b3c8d3358b0f28e40ebac81f52c3771d5321c367f8ee230ab89326f06e0ab8b326f0c7d418479772c18c717c4215825d0328043fa5c0bb0500fe19657fdd75edef73caf9f7d074fe5f50eea3a7a6fbf892023e5013f82b8ae4837449fe9aea2def958ac83ebde5df5022f7d615f95b2a33f60928337e470d381e9c0a273e038edf5392f70d48f2ff510eb09fa603fc817221fd0370213f52e0030200ff89b2c381ba76f833e59f0669faa75f28373258d38dfc4a011fa209fc1b45f2105d927fa7fcd3504dfff40725f2a1ba22ff89759574b06ecdb146e6ba4afa59a14a2c0556a6d149322ce54e92e1bc93a45e19bdfc63a7ba47fea21cc188001cc1df54828fd44df07fa8f262946679c14652d106d468eb452b0fb03990df8eb552719c31d018665947bec57ba131d2fa5f6a2ce7fccf171d57ed8d19d6bfa1d6fb51d69b85dccad813fc906aec486b161aa639b3c545dc6af3ad6f545a7326a5e5184ccb53125a4e300a783eb0f3cc02fef7509e9b983673ac4fec3c333411729095930a7988b15c8b424bbf653c747ba10f7b5b60212ee57a315c377b0e020baf26078534de0a5162715dc85121a7b0abd1cbf7440ba7c88a5985e918c5f458ca9e608cb64e9dad6f6cb616597e6a86651b253ccd6d6dc71bf378fa7ba575bea59f07654f714acb7198967d3c5a42ce6d3d07f3145bc075f44ae94e21f8c62fafc0af54342b4769361ed3ece094d2af9f6543053ccf1771cbd54f39e78d8a6ee529dd2660ba75f3e83682a7ce3ca119bb5bb1c734a940693211d3e4ac0cfb33e79b81d6b59897d1855698c1bcbc5ec06348ddca2177b416ac2c59ca6b01d0ebb13a4f70bead22c5fa248cf57e29e58de19c8d2559e1d52a51fa4dc6f41b1ea255b1a747f2689856760db588475d641cc5f321ee49d249d5ca94d65330ad7bfb6a4d4b3a96ebb2d47a5e2a7494a5317b3a5b3054365fa49f9a5528bd0ec3f49aa25cb31bc7dfb8eb761882fd6c74c20f9458e5016b7de8d404d349e7aa141f53313e8665a4cc0ebb34af46e93c8daaa7a8d980b4e1e1d6bbd91c08a6b3aa45a868569dd26c3aa6d98184661378fe2c167513bbf52b5b2d13452e2e28931ae1b4516a501a1d8e69343844ef2b539585c9b7742de6a577709ad6a4349d8169da8b55d052f6146e0df2f9335b3bc6c9109eca25bc3534db2a715706a8d55e945633536913b8e3853584093c154aacb02c1fcef529fddc18c169568bd22c1fd36c4052cf995aab80f6a17e6dd6743de5de948eb3301d0b43ae51975ade91f5c0cd1535e689dc028a12b9319836623aa5686d8aa7d9184f13f658cbc39f217d1eea503c14603cf4277d186b21cdb202c9bc319ca7ba7f898323059dd275290d0b310d872a6a38895bf4422245f684bef5287de760fa8e0dd1b297a451fe06c1407d8a81b94195cbb66feb074ae5f0b56a4069350fd3ea10453b1ec447211689daee9eb6e18694ae45540f856a0a0ee621ca5aa3d7bfa68eaba25f234abf2330fd0ed2a83996f29277a1a5df1cd1cea3b51a5f26ac8a4efb503acd574b33af7df6e3fd09ccab246ba5845b5236a6f42b4e654480aa3d0ee2fd43f9a2ed56b61e9f5eed31fd3af2be94960ba854546919db9a1f226a86ce5b36aee35f070eaa7ebc1fa5df424cbfe6867fdfe7788be530a46c4249b9c8bf07532515c6a5950a61e6b01c4aebc598d6ed480f323e3147007ac239895e7b56c3598ad6aed31bc5684ac97d242677cfa49e61281f01657dacc596672fb17463f31c927b87a07cc0fe943e25549bc03f8fb036ff685e4f5e82d49452193161f5cb39016ad88cd270492a3d01f808c8506e7bfede3c93a320cd291d4ba97eb854caab54b4cc7499d582d27429a6e9909452d33b9e65e743a9f79e4cd79694b6cb306d27274dd770fbffc31e196845b1b11c6363045966c851f1398956112b11172372da32dabd57e9bca1dfa9e89d4be9bd829adf909adef87c80ccead69ad26d25a65b0fc57ac052dec2b14779587f840cc5da190379cd00ef9b84ef54b43980d2e6284c9bae9adad833154aad7b193ea8546943e97174fab30692b57e32e957db52faad4aa5bc84d601351cc79fdaad70bbb7081b2370db1dfd26188b6c47697a0ca669178fa603b806763f5fa9ab1d447b023f2dd2b5c7f69416c7a6320eae32432f7bcafe3c4ae7e3309d3b79749e006472661dc336b99f6e33482c150d3a501aacc634e89672b93580b763593ba983158b7ff9158cfd75a434391ed3a4ade16ea377b67ee7733f2dafc32d399618defebba0dbaa9d28a94f48a57f2755a925b6bf3df923339f32df2854cc219d29fd4ec4f4ebaea8df588eb8887bbf7e4af9259dfe902e942e2761ba7448aa8bc3a837b59cfe86e07c55574afa93295f959ef476df4021f7dc0bf92894df08868a06dd280d4ec13468a5684b0304ab65475cd2b195ee94aca7a652324086744b8674d9ee4169701aa6c16109b6831fb794fdd3e9cf5c0886919e1423a7a732e250764c28b53a777aedf7f4fdc48194966750bd37788d40ae075bc4ef162296cce4c64638ddb6ac8eaea2ed4194b66762da36f5a4a95723e6436c8982b2b95e947c67a5d29756d6e6ca7a67c7fecace12ceb4edf5a6b43d1bd3b6b782d71c97d46b8639bba90fa5d739985ec9d7f5784724265935ef221e7a9c9527f2d152379cbede8329cdd6a4d2731f46efa793f241f569f6a5745c8be9d822898f70e63617724958ab2998b6443f4ace735319f72aebcb58f9b492d7f3bcf2418ec3ab6ff7a7f4392f951a6b6aa3ae32351683f743917928e9a5c8004a83f3310d0629d7b9e518d0022e3f5b695d94b46e18462b6f20a5e7ba54c6c7cb4a3190eb227be7ec59ca8e552ee4618a784feb300b70a5925ec1f9be4194d617605a4fd4d0da9ed3aca665ba7ca4935307534c5c883171880613b0c5bf6752fd104ad78ba85911e9db7a902dd22194dceba99e3edc87a4578b4f86a5a2c9504a938b294dd22f170a781f812c1d461af68c95a06a1687529a5c428d7184513e786b86619410c3284d2f4daff789ce3561f5d40ea734d8408d82a6ab81dddf61976c4b524811d98fa5a2cd084a9bcb306dda285b9ed397195c0a8ca464be1c93f9a0943d985adb30d83aee284aa72ba83ee5d47452ed254c2f454653d26fc4a41f1d40ae8623192a657f183e6d0ca5fd9598f67969e721bf967bba25cf584af6ab30d9d93ad754fbe1f6d47cf771944657631a4d2035a2fa69a99976a9acc0505fa5917efd743cc5c3268c870314789069ba30e05ad0044ae26b30895b1ac9fa90c2eb619948497a2d359a99aaa57b7b23f2450f6d6968f96512a5cb7554df44f2f91a23c44e144589fa26bdaa58bd7c4d2fcd26537a6ea6ea6da9f629abb77c7034156da650da5c9f4a7f2bd5c7976aff5e66fafd0ea374bc01d331d97c7795795f99b2c9a9948637621a0e53ae39d0edbed44aa2306a4bd3289db750b57795d1fb747ac8f42d753aa5d34d543aaad5a2ec5a7cd9b76547eac61bf6b1dae18f981e4ee97c33a6f3b4443aee99790190975447c3e4372aaccca058b92595113e19a3cabc004733ca0e82a94fcea434bb95eaa34a65d6432aeb56323dfa9c4f697a5b2a7376a879b8b68d7733ba24d10f2b57d8572a1acca234b81dd3009f13cee2549f136eeb473d0f2a856653fadd81e947ef2450769545d11eac0d14505a6d4da53690ee1adffed6d57fa4d35b9a06b9cf5621a5f39dd488a17f9b6f9ca8e994cd4903f8acf1121fffef7c3b8aafebb4eb86fe7b49a65776cea1b4be2b150f83c79f5e7f5fba6df5b99406775339d0affdc1e42bb0deacb0982fbb9e946a6d24f79b740eac68fd334db677f6201ed25e0bbb8833c1ea55791dad5760ee6efb446da4bdabe6e23c67b12fb024621e6d7ca2dec1f60ef747d86611562166d83fadd84ed2dc4db1c2db9ce3e1cdfeb29823cf0616da9ea7bbbd4f22abe5b74fd48ae5ceeac9b4c06a60ed411d0c6a975ca7e9c4a172a659516824b12ca69979ffeb34bd87a56a0f91aab1bcce4cc736695a537229ee65b1c5711baa5f865998e731d96d0039c66956b76e46f36e28d91d654fceb237fe4f1a1bcca5586ced3880acaf2685830b5c30b886dcc4ec666089612f16ded1c2302a968f7560a9705f985455b16ed84abfa1a2b6319e9794f3234152b52e0e49f7874912c38d8eed54ebeed0f24098b4d4b66e66f0dc6c67367aafdf28d0f64e3987b607c3a4ad26a0cda9881e2a8a72b6f43612748d73e87a284cba1a720f55c2db74a30d7b874359fba5ec6d492428dc6d3a146e0f93c2bdac1b394033843b780690cf9bfbccde4645c4e137a8ec10f6709884d5e1597486d1c170f61e8c32712baa3ac43d122671f581a5b1a9feee0c3b9477332d720dae4581be5f0f71e87b344cfaf646ec8e01b2f52e6cdfa3a5fc69340a88998643da8e4c910627d9ca66966c7c4581b44dbd1dd21e0bdbc3b98b84c1069b992e773259043c5d14885b5bcd21eef14c7938b6fdf80aeb2fccaf3947bb4481bef1c31cfa9e08933e766a5dd98221da2d8775a01ef764d85561697b83380cdb98275f5446c6f1eb62abb2bc94db5e9428cc6de650f8549814560585c528d7486d14681aded8a1e9e93069aa0c687236748e0245dbea39143d13264535b827933db30bb9ef1ac5670614f052340a647dd5df216b67986455e0f6b42452558ae2ea0e39cf86494e03eb6654a217cddb65cddcfd526e61ac56365a8c404781c03afb3a043e1726819580b76262b249a55120c8d8db21e8f9b02bad92205b046fe368a2a881cd318a8ca8b430ab0d74e87b214cfaea827a9797b8253c8be6f3cea085d6e72b23415d975e0e752f865d9160c40c309cfdf0a2615def80bad64b615254bd4ce684e30251a0eaab910e552f8749556d0376f5e4f3ac5898e8f461a051ca840d006daf64aa7c94c70c4581a09db51d825e0d93a046066c58afe05a2f3564039aed5353c03363145d3dfb9124be162689d580957937bb880251bbc73a44bd1e265156b5d865656ce49c9dbdc84ac6a5a20736da3d62ec2c3849e51b61979d2c33ca8cb952349b26f082210a54fd0aaa196f86dfa5234f0697b3fda240515f3028f256a60645868a9abd5cbc213baaa3d48331b39243dcdb6112d704b8fe09166681a8e9ffbb3aa97f6deed0f94e9874d6f3d8213c1eb01f1f368159381acda9dd600ac2bb99aa863827c0d967134682a85a0e51ef8549149b63ee6cd414056ad6833967ef87490d9b303582d332df73d63bdbe7a384c71405c266c61cc27685495815e0b1c6f2c8ede5f4512069079846fc41d819ae9f318b078806357ff674a8f9306ca72dedc759166b0b1105a27a747588fa284ca2d86427f7d9016cc549d94ee92890b6738043daee3049ab6960dd86511bac2d1ee2d0f571a69a41f6dc30f72af6828835835e01cda04fc2ae36603311a3d69f5f6d8c43d8a7617b33bb4f62208f3aca7d5edbca3ba47d167e478ed79b4581a2d1fd1c8a3e0fdb830de21dcf4b79e4acf5375bccd0599e2823d9cef38b2341dcf00a0e715f846d5b70f33ebbdb260a148d06b5f82fc3a4a8868ba268cecd67abc425595f859d11e55ab7451c26da031bbd8093ff3a4ce26a19f4941336b8b6343273567782a926df849d31edcd2458974d211fb2753a9ca3d124da759043d6b76192056752d8e7aa7bc720a3b4127c0b687e7f17266d6cfab853e71ac4577fd8d37fa340d37a30ddf7fb30696ac0691a6d792abb217424df5425faeeffbb8a8cc08ae53de0deadc3d2df0a448d757ad312d6e3c1ac73b1e86cb43da16b1313761a6fd649febf72601392dcb4e7e5e426ada5e5a6bcd6325779cd526e9a6bd673531a77c8d59c3f92abb06f43ae52052e37e5f67cae520b2d372d7f92ab349c9fabd4eb959bd292fa5ca575e4b9cac3be98ccf42acedc328b30727dc74a73d169f5b9e864c25c62c150aecf7aab5c626e706e92493db969ad97c84d73f15c6e00731b72936c48944beec2934b34c873c901b75cdfa1945c857a5f2ed8f626d73376959bb4b29dab38693e37c5164f2e318fc9edcffd9681e7121d68b93e953b5b5fbfd55eb9298fcce4a6b11ac3fe466d6385dc14863ddcb8a92d6776db90ff2cecdc2493db7353ea3277fb29efd4d25ccf4486dc1436d871f6d2839522670fbc0e6c2fbd1fcafdffdee6ae03dbe6ee47468251ce26c16e39fc94892194ce46577e2de2ea336bb23d270be689b3719938c70a6751c431658b008bbdb2abcdd0371585d21a5001f3307e0e93bec682be622b103b82bdece19010de516486658da1d15a2b2c5a87c51d5a7f0993d686c0ff24f356ec7d09f7a8d123f463d321f4d7b03b08dcd9db6fa3e519460f4b8dd0e8ac11169d2b807dfe964d74f68c249d1b019dbf67139d1d2349e765a050fa239be8ec14493a9f0674fe994d74768e249d5f003affca263abb4492cebf009d7f67139d5d2349e7dea028fa279be8ec16493adb003a8df2594467f748d23901d0698649a76cad77b16a94196fad87d60a82ab266261d2b71f628da91f02d63d3c6a73632151db0b58663c1396c9aae619b7cc466159e60f86435fb930e9abc9a376869fbc830465e6314780bcda80bcf2992864e692c5cc0457d75b4fabd40e8dce6a61d1d912f41555c8263a7b4492ce0680ce8ad94467d748d2f928c8ec95b289ce2e91a4f3264067e56ca2b37b24e9fc03d059259be8ec16493adf047456cd263a3b4692ce024067b56ca2b37324e93c07d0593d9be8ec14493a8f0174d6c844eb7cb698cb51aad43aef10c1d6f987a00e5a334c6aeb19fedd706e1fda35827d485d4047c75ed94265e74852790aa0b256b650d92992542e0154ee9d2d54768924952f022a6b8749655da4182a4ba57d5a79a7f0882c1f16912781def63ad9426488b3e14223f2444064dd6c2132c46a5068440e0244d60b93c87d0d675a61aa0b553230bd30b47149366b5a125b3f4c62e53458ba25041713c2d3da43ccf83f9821d1da02d86b833069ad65c841b58ed6ef657c11045b88c59e4579c0b72e68f7340c93c0da090267f0003690bd3c2043248636bc763d20b1512648ec6060f3dba36d8906c8cafb64c243c219edfeebc1a25cf04c05b6d9384c5ae162419525c35126b71728d5f7dd938d4a08176a495e312c2ad782ecbf5fd8f33b66f0f19e8c4f8e09cd0e2f0076d82413e4f5f81791f73c202f274cf2e4e257aaf1e8cec4a18e9687968d4781e2a669369119e294c1d0c81c0dc8dc3f9bc8ec1241328701329b6513992176018746e6484066f36c2233c46ee0d0c81c02c86c914d6486b8002034320f0564b6cc263243ec0e0e8dccc180cc56d94466145b3887003273b389cc1e1124730c20b3753691d93382648e05641e102699f696584582c822eb23d60fc48247afd3b7b9e190d626137d3ff4888e7b4a41f4ba7edb83be9fb67bb61bcd86629dbfa10ee0360b8bcad70195edc2a4f200c3bddd4eb121773174ef0803a70df6e7fde985e2190cd7cf92aa285cca6b8745f9b9603a4cfb3029975bf1a84cc10eb16c0f6d9aebbda038cacb3642432cdf4323f43e4068876c2334c4022bbc354180d08ed9466888fd49a1117a2b20b453b6111ac5a502b703423b671ba121f6c58746e8dd80d02ed9466888d5a6d008bd1a10da35db080db17f293442370142bb651ba121f6cb8746e87580d0eed94668887df3a111ba0510da234c42ab7042e7196c9b6d7b4b7736c738c45ea6d02627b0b49094f5dc935d2370d670a8edf42d6151f90de81a39304c2a6b702abd935c99c06cabf81511eca06b05acf0a0cc4cb3662b28323ecd3ab46cfc00f07cbd32b32dd91e98df56db0c6bb40764ddde61d2c74e32b0cfdae867fdb64fc471ceed18c36d91fd8f9e05e6802cdc2713d3ab65c7b0bd7ac75ee333d418880e5d4477e5d9c7a0f3f7e030696d6578fbdbf33998733a457feb3fabf2b085538bf8392c7e2395519c8eb01db881be99f0a27675fbdf32d13506e8eb9789dd38dc670660a7b04479f2ff83a04cef9f8945a71d89b1f3a82f9f5a0f8aa6019968e3a43697238a1eb227a07260263c6427a37be63d64dfb0e8fb1964e94199b044e821cb9e1115e5f3545e03540ecef44ec2130cfb30b995fca034bb5bad902ff2cbe7197f0e875b106e26df1616b5b78372fc903deb2fa33e5da60ab0d221996c151559424c04dd1b74575b88ada2d0badabe06ada2a199989dd9815b29a3b3d80ac40e8b9b9f0894a1ea516865fa0dc0460f0d3bbbf7e3c7ea2e128789da8ba2ed75bcacda2e8f58b50fae8d5e95bd1ca81e0d0bbb1f4956d91788c8f3792748d4adf12a40e1f04c50d8fd5f47e13b80c21199db2ec27d1e6e86480cade4ce035e7164a64874aaea4b0cfb88ef68ef4af416b0c451d974f84ca81bd98746e7f1a0da333a9be80cf59885d0e8bc09d039269be80c756febd0e8bc01341bc766139da16ec61cdeb61180ce71d94467a85b858746e70f80cef1d94467a8fb7084466745e03b2764139da19ea9121a9df5019d13b389ce5067a78746e74180ce49d94467a867aa8446e70c40e7e4ec3db52fc439c0a19d0b7000a076ca9eec6b77cfff0db15338b411a1eea0c57e5826c6cb618b7d00a7b594f75f2e14dd1f516db57f03889c9a2d5bd9770c337b8766932d40f69e962d54768e2495c7012aa7670b959d2249e51180cac3b385ca50f7d60a8dcaed80ca196152d9c2f0cecff4ee716d57942658c2b1a2485eb1599b2196eea14de25a03889e1915a2439cb2101ad15f828e92fccc9c23ddc1e32432306e543daca5046f180e7db3b267cbe6286e1b7513b0c4d9999a2d270f0b196e8c320e31467361e6581fadc844953e342a2f01565910fe8419b8267286d8e0bebf983663430db6ae85164441043d64754066e19e3d6b058a0fcf5a09b1e0991396e76c039a9d7332d1cb546a95d745bcad9e7a891e6a853f348b3d0d503b375ba90db5851f1ab5f70367302fecead2405e18e5f3e3434a2d00f7712251dce5b016a0af284cfaea24a92e494d6784b9f3c19ab0ba91df03ada32332312136d5ad24a2b89dd9046093f3b389cc286eb6371e90599c4d6446711bb39180cc05d944661437d91b04c85c984d644671fbb23180cc45d944661437d71b05c85c9c4d644671dbb28301994766139951dc54af2b20b3249bc88ce276650301994bb289cc286ea6d71790591a26993986ff1ca5e49b908758be87b609f913a02f7ee99e3c0fc33ba32e442f1ada049b01c056976513992196efa191391c90b93c13e3955d2df1fe3d5b52cc01197b4526e863836cff9e8df73a03eb5b99893d5c3b18d8de5c0c8c91589a2942431ba9fc1a107a5426d6ff3242ff5deb7faf04141e9d3d675785ba48303432a701ffb82a9bc88ce281b3d30199c7641399513c70760a20f3d86c22338a07ce4e05641e974d6446f1c0d97180ccd5d94466140f9c9d00c83c3e9bc88ce2fe8543019927641399513c70762c20f3c46c22338a07ce1e0ec83c299bc88ce2cce11980cc9333d188ecf6af6b441e6e38149e923dc7cf86688da1ad113a1058e3a9d93d3411a2e70c6d68621d98fb76da9e599d9ecaf4d610dbeba1cdceac04a83d3d134baa3b19ffce2dc81f0213b0cfc8cca2aa9e991fa408cd83ae05f49d99a9cdf89c954070314be86b8042b3c18da0443f2b7bb6c18f626fd10c40e5d9991af591f6388497e2ce880f5b00304a2cb28aea96135301a1e764e65c812eff22fff83df08f6bb26717992856d67b82cafada4c6c1d95fa4a8a28ce716b062cf3dc6ca2b34724e9ac05e83c2f9be8ec1a493a1f02c5cef9d944679748d2b909d0b92e9be8ec1e493a7f02745e904d7446f374e897019d1766139d1d2349e73440e745d94467e748d2791aa0737d36d1d92992742e03745e9c894e6167bba842fe29db01619c15688ee13d7e29436b80426b213d013a852f09bbf3833533475bbf19083b29887d9ecf831fc53b878b7888b15c347b5784d0082d098bd0d1c0562fcdd43e47f6ce4676a747a131987f643313e57ea4eaa07db4214c2a6b1af204df8cf72285d6413c0bd8e1656192b78f91ea918aeea3eac25c38658644eafbc05b5e9e8da48638293b34520f07a45e918da48638a8111aa9d301a91bb391d41027698746ea6180d42bb391d4102bf7a1917a27e8a3bf2a1b490d71d27668a46e01a45e9d8da4863845363452af03a46eca4652436c808646ea5580d46bc224b5162775be157c91b19c37449d197332d092f0081c948a4ae910d8de7008bc367bcf730931c387769e4b4b50de5f973d23f12156f243eb67da05daf29bc3a4b28de1eec29bcd7743b08599c43de83c3e8bb3d418c3d7acb3ff72f6128cf8dfb035c54260bfd787497a67c47edd93690758bf1758ffd8dfb622ccefcee1db483361471aac8f6a398f62bee52c9771b7516a71c4ba60e46ca9101361625889d003f8e71b32311690da4c3db6517f1497239680fac28dd9b3257f1457c36f02546ec9cc3ce66effa21ed67c50a4dd94adfb70778ae452855701b537672bb51d2349ed8fa038ba251399beb35502663cd32f0b8bbedac067de9a3d2b3b436d14845600dd006cf1b66c22338adbb1dc08c8bc3d9bc88ce2762c970232efc82632a3b8c0e67a40e6d66c22338aed9fb300997766139951dc8ee56c40e65dd9446614b763290164de9d4d6446713b962580cc6dd9446614b763d902c8bc279bc88ce2762c5b0199f766cf5e22513ce4be25684cde971de7658558590fedbcac2fc030c7fd9958c0adb216248ac73cad04dd6f0f641ba1513c84ec2840e883d94668148f7b2a05843e946d8446f130b2a580d0edd94668148f7d5a06087d38db088de2a164cb01a18f641ba1513cfe691120f4d16c23348a87932d0684eec83642a3780cd49180d0c7b28dd0282ea45d02087d3c9b08ed14d18afd71a005ff44b6111ac5a6e73180d027b38dd028569b8e02843e956d8446b162bf1210fa74b6111ac5a6e73240e833d94668143b4796004277661ba151ac361d09087d36db088d62c57e3e20f4b96c23348a4dcf2240e8f3d94668143b47e601425f087f688eade55c617dc8045d66059e0df6c3710e868cde086733c3a1f1c5ec3e2d21ccc5b361d17b1eb0d297c2a4b7baa097453c87932bb18b2c714223ae7c58c419c02e5f0e93b8d6867b3962a9c1e6bf8f13006c796129cfe42a0b0f42b4d4d0961dbc01c6e85f0993f026a423486d4d4788a57f68e4de00c87d359bc98da2e55e07c87d2d9bc90db165151ab95b00b9af6733b921b6b24223f74640ee1bd94c6e88bd56a1917b2f20f7cd6c2637c41eacd0c8bd1b90fb5636931bc515a03b01b96f6733b9218e0e8446ee7d80dc7732b1bcb62bdf00f6df72f6cd2cd0a07d3713f475b108cc387da1cd841e0de87b2f7b4f4f8c6265ea5a40edfb993a256c04b7c5f99edd71065a9f95f018a3bcbb7337c3217457a66d15df4d6f3ccff86ce1ce1c0eb7c00875f3d76d6151fb0e28843ec8cc1e0f1dff4585d01f6096d487d9eb45439c2f159a173d0158e64761525bc3f0ebb00e719fc72a61511703fe727798d43535dc5dd6cc332eb78429e1197aa541adc1832142ece8eb1b16c18f00dbfc384c825b7808663c2c35d8e854c1ff8b51abe180e84fc224bab78768669d6c97271b6000f7a34c28a640b115917b7f485be822438ec3b2934a9c3d230b3cf9e0dfb05fe47290309feec9fd4edd7308a2387fa003f0d69f65a6213bc3aa1d301b65d699a123d643b3c4a580becfb3a37130c0603b982ee6166bbb8c502d931d7e130ab557814cfe4526f623a5260a793d668f30c75e43b3d44580ce2fb389ce9e91a4f31240e757d94467a8330342a3733de8b5fa3a9be8ec14493aef05747e934d74863a6b35343a3f05747e9b4d747689249dbf033abfcb263abb4692ce9aa028fa3e9be8ec16493a9b033aff974d74768f249dffd7de7dc04759a47f009fa0282a88142b204d311684f4c44a28c12818a4d90f43b2814880080982bd7b56ecbd9ea7a7a767efbdf7de7befbdf7f29f9977d7fd6dc886cdfffccd3e4ffefff3734042f6cde6cbbcefcc3cf3cc33db02e7374cce2ef6830a1f876af2179a63bf581f97cbc34d707dcbe472118589f138933b9f698ebf40b55fb0d3c7b636b07d27f77021e25208ed70a10ab881bf67d20e36c905e5c4412a63cc42e34e0d6b3689e866957d79ad71a1e589fec958ebdbae8b8a065864a62de50d83f6fb83a483d8cb54ee2c5d0756467f94c459aa92b33770fe2489b34825e75d70b3ff2c89b35025e745c0f98b24ce12959c3f00e7af92388b55723e079cbf49e2a466dcd3387705cedf2571ea2cc1710470fe2189335f25e7dec069962372aee3392bed174d306e6a591b7fa97bcb2df7e5bbc3841dbd4bd2a9b17f8ebeb2c2fe1eb31727ee8aa6cdf673813987c9bcb4b315539fa7c44d36b489e75630bbef2485925ac18c467924502e2385927aae228d7201502e2b85b25025e5fb40d9994989fb41261917866bb6572ef79dd3549ff0e5329aabfde535ef0739083a9fe598a03d4ce234dafc6ce4cc0d6601f68468d2f24cc0e4d6c3b21637b9e6e37c0f84d5f32e4cbe219e6f8cbf80fbe9a35bb7d65f2666bfc7689f972c609c496ba9abc2adbe02937a90494d00af336ee79cbb5c7b569788599eb4d5a5afa035afc8245edd134ff4dfb6d97e4953f6da2badaf5f0bdaeb4a4cccc46c3e5d5e3c5e2eaaa7a3f16cbb46689b5df9a3d068fd3d1a1e75b496b926b4cc6ed91cd0a7b64c8d67819e09ad726526652f931cd08fb69f706fd56d3798ec936c66a91ec4ef0063d0eefc6e27425ce0479df5f6d7e93ead2bf1458106f4b4167918dcdcab3031bb0366e0e1fc3c16de44c0ebc1c45bd1e3359ae4decc49dc9b770c8b6c2890f564922592bddc5e4b9727d7beda211a0b5a9d07cfc55e526975d60abb175a6d6f266dbf94a764f4bbab18b2c88cf5373c6ecfc62e88dc97d3ba9f3fa0cdae1a229e54e803721da58ac836309e5c8d3d9e1ce77fee681439d7676ed6d8bf9ae0db6280fae1b4f1644fb8b9570f319ecc6ce65dccac4d47bba16f851b7a0d4998c4f51f1ae63d80b9a6244c621fce3b531e30d7928449acfe45c3bc1e30fb48c22496fda3615e0e987d25616a0cb15d0198fd246112577868981702e6da9230352e495c0498fd256112cff0a461de0b9803246112b709d230ef07cc814cccbe66c96d82c9a96395a9b393ccc42ee0285141f3c6c01c601d1462e12c7d82766a5aa13eca0d20d03138bb6b90d1a5dc1a1095929618f33250ae1322a9b03d9b5a341e277d02dce6eb4a03d578e0f989003a441aa8c6ad2d8703e87ad240351e277d3480e64a03d578e0f93100babe345062e898067a3c806e200d5463b1ddbd01744369a01a8f93de0740379206aaf1c0f3030074a83450622899067a08806e2c09345fe933f400987a0e63271b56c6c375f5f6252e35db7d71b2b43e0daf9485e74e7448e00d0f91a959123e518616e17c0cf0f2b2193faab22fd9ddb8b2684ddcf8d1652ccae360536a7e8876d8913600be00edb02044be5bbe7d7bc1f968a7babc013d7221932f51cf106fe3b637f3b903f36a4cf21c1797b349ddd6474bd1de186ef022fed2da4cbfe233c9240a9846db549bed0b6be26fa8ce6ffa736522f52517ae04377c3113b3b7492eade14681c4214e41b6a9d06efc2fe0c62f0991dbbee48d9f5976bbbe2ee97c18949786d9d25f1cbe4ba21d75d30c7c6521469699252268cc83ab8067e52621e6dbe906e94b9ecba2f328915fa027df541aa8c6c3eb7e02d0cda481126f791ae8ef00ba79e87e3df3039a89b4b4039a6b81768b100550526bbfcf3799569ea12778d15269fe800e6bcb30e5a4dc6c3e7839295a5ad76130ac1fc104ecb394e72986e5f08c61e28dff0d6b44ba2fdcf8e51251896b4134d4c30175a44454e2708a863a0b50474944250efa69a84d803a5a222a31838e867a0ca08ec9ee2c5f7bfef170e8f32bb2b91437da87eda6c72989b7fa1016e51b107b1a1ba2665ca6d3d15266de316d327a14dce45b49e22c53c9791370564ae2cc53c9793ddcec5b4be2cc57c9f91a706e2389b34025e70fc0394e1227750b0c8db31b3c3bc74be22c52c9d90f38b795c449dd2f4ce31c0b9c5592384b5472d601e784102bf005d9c8eda4f1ad0c5dcf76214a01a46b8d2d57e035d655f81530274ac2d458576145b8b12749c2d45859ee5b68999325616aac2cf713604e9184a9b1b2dcbb80395512a6c6ca725f03e6f692303566d43d07983b48c2d45859ee79c0dc5112a6c6ca72cf00e64e92303556967b1630770e51bf2b71d6156e34a8b46f287dd129621ba565278d84e1fb2e92c21ca5cc61126d9ebe3770ee2a89b34c25e785c0f937499cd4231e689ce7c133749a244eea9c88c6f92870ee2689b34025e7a7c0592d89935a108dc669e0d9395d1267914ace5ec0592389937a52018d733870d64ae22c51c939153863d9d93b9cc909c0445ada09c005405bc7a4ed69127b87a7f94fb86f5eed771b693f80f17693249c91cdcc629cade7310374b4f9fa7590593c9349b9b249ee782bb77fedbeb0c9683e537521d0d5872eacd2fa3ecc51f622b3ed779deb3f725f1d6867c65016f232f0b4dc5d033231684743ce01e4591a90894f5a1af22980dca00199b87847435e1b90676b40262e37d390df05e4391a9089d3041af2db803c570332313f8a86fc35203766735f5dea4482d85e6913897ca0dc430a2535704da33c0428e749a1a42ea9d028f700caf95228a9f17f1ae51340d914e23cf744c244cc2c346e477c957d41ad7169131d2b65e27158a76a66c20e6801db6092e7c625eb88b695eaa3316bea56e05d20e51140dd4e4b6ba9d5f008d8530a2575ef278df234a05c288592ba638446b917502e924249dd424ba3fc0628f7cae6c24a6ac97f62b7432bf93f125607f666520ef49495f68b267ab098fda205f197277bf6696696071f693faeb17f8efebec2fe1eb397ad55b8fcb2824902ef1362c53f5d5b4d1d22e5d9d6aa7143ce421826edcbe45cd7a48e429b7c4ce9ffce62cb0078c6ee1762e7729ecf00e828a781ec06cfd5fdb37baab1f699d19170cb1f10e29c857494899f94ba44bd9895d07336dcd007321957f21fccf53f7b9dbd50b9fdf245f6c5350a7beffed07b1f1422e8912ec16ca40f82c4e29f9b60963c0584b844473bfbe36eb8b50f0e91bfd76466dabf9e6fda73f20775ba49eb80d607da43a4d252e34b34da5fe1a17068880e29dd903ed92111fb755a87341a5ae8614cc66ef6830926ca77ae365155d04adf32dd13555fa7b40ab4bfc3438c2dd31f5e8ab12462b10c5a24a904dae0dfb33b4c8f2e45af584b2bfefb22501e11ea38b4e8c958eb67e4c943273497bc7a056eee23d9bbe71dd868ff8d63fea5d5fe4bf732c9333c26fabf7587f411739f17b0302701e6512136310cf7bf46bf4fb47f59ef6935a78f9f0a84473309bb0261a410808dd6b1d441fce71839a712133b16da12c5efd0b11c1b8272781b4907ba77247d0e37f36226a55bf518e79f7eee02737cf7325f6114bc2f801d17a20329341d6d17dc5140787c88842c77fb8ef1f3e566ff26c6d997d4f8a14d95d9f3cfb6e882158daa7be61d01f68450cf4537588b16b8267b89c4c24290363a8b457917f4d6278639bb7d78f8c52e5a4b3c13f84e0a59a42aea9ba393092bed4ca6b5e044b17fa61277097566b17e052b36278728a4e6dae4588fb9adfd35e6d35893c73bce573d203f18dae829720e73d65861b6013a9e539994dd615014f85949c35b0c78a7c9396e4c63c4b117dcd2a7cb396e8cd8d5d08e1b7b0be6d86784180095992c1c764b6b89cb414b3c3344925ffa159929296b3265cc1bbb2b8b7300709e2589b354256757e03c5b1267914ace5ba0073f471267a14aceb380f35c499c252a39bf04cef3247116abe47c1238cf97c499a7927307e0fc8724ce02959c0703e7059238a9c5f6699c7b00e73fc39cd6968559102d0c3c03f82e0c15af8c2ed268e7e0cd1e2e701e106d4ab93c0cda2f0ad316b31066a365962f0b018d7f492ab45bca0cf9d26eed436129e262499c652a39af07ce4b2471e6a9e4bc026ef67f4be2a49e2048e37c12382f95c459a092f33be0bc4c1267a14ace95e0d9f91f499c452a39d702cecb257116abe42c07ce2b247196a8e49c0e9c573239bbf80b44d96dee65eecafa925cacd09f5c57c93d0f8358179b761ec63068895787988f17daa962c7497bd9010641d7c8390b436321c67c880c5d2b85927a542d8d72536895d73129d76b8532759bfc28e32a08cdf67f76d9ebcdfe9263d2a45b13b16949d6db40e7747d988a42f91de809fa35f0dd20a57e2075159276db0f82befc462994d415481ae57e407993144aeaea238d722650de2c85929aa245a3fc0d286f9142494dcfa2515e0d94b786d91a5516bed7a605307e84c1fa6da12a10447b78dcbec7197e73d43ca3799fe38530f0b95d4e29c5528563c84b60be7307937255e34a2eb9994b6dfc45934cba1223c47de1b4a762176893774aadae461d51d2aaab35401bbd4b2a2d758449a3dd173aa3bba5d252a79434da9be081700f937610f4f3357e6d6794279ce37bfa7126b5e6c678dfe7cfb4970b56bc84360eb8145aefbd21d20bd3c53d53c70105cc23e56823819fa1bdde270953e386e8df01f37e49981a2bfc7f02980f48c2241658a661fe04980f4ac2246e92a6617e04980f49c224aea7d3303f06cc8725616a3c22e15dc07c44122671284fc3fc10301f9584a931e2b4090cda1f9384492c3c4fc3dc14301f9771120ab11fa7159ebf1296349e6032ae69dabfa7977893d3f64d8e8776f9a43450e28d4e039d0ca04f4903254e2a69a0a300f46969a0c489250d740c803e230d941890a3815602e8b3d2408941391ae838007d4e1a2871924903dd02409f9706aab1dcc49600fa823450e2c09e063a02405f94064a0cd2d140cb01f42549a0f94a07f68590dcf0b234508d53cf3c007d451aa8c661d330007d551aa8c681fd50007d4d1aa8c6a9e78600faba34508dc191f500f40d69a01a874d8301f44d69a01a07f6fd01f42d69a01aa79efd00f46d69a01a83237d01f41dd907c5130751b4727ef702efbb61aa2fe4b560d69c3abb35f0bdc7def791286cea5e34df2bccf0bb3ddc8b02e520d3d2bc9f8180c8fb4cc85e66c90365dd312393fded3dcb683e8a2917103f90931352aa32917b24dcda1f4ac2d498c83d0a303f9284a931917b73c0fc5812a6c644ee72c0fc4412a6c644ee22c0fc5412a6c644ee62c0fc4c12a6c644ee4180f9b9244c8d89dcb980f985244c8d89dc1580f9a5244c8d89dc5b01e657214a5aa40fbf61f08dd82e6993c952a0fc3ac4f1f289b3a75da93e579ccfbd657750f2c2366035d646bc16b2e4bf61c20e6e01db0831cb64e980747565c799faf84382885cca422e03e46f352013c70134e42d00f9bb10d1cfb69fb5d181f44448da81f45f00e4f7522089b73d0df27c80fc8109d9df434e8effe455a6cedecad5fe7293fc251beddf46c164b76e5463ff1c5dbac2fe1eb397ace5e1d2ceb2765749e0fec8de25e7c6a8b8c8b6b5fd8cbb40ccbe21fcbcbe25b76f204aff53766ac967522e881819a5ad227d0163d69f99b4035ba18d568d1cde1cdb5a5d99e9c63657e435aec62f038f805f422c1717d9ff822f17d3da6713b4cf5fb359613e75aeaf7111646b6889bf85089b2406f851edc58e3525bd0a864dbf87a9455b1cfeb61ec1e2fb0e7af43f987c7d5bb4c5e80d34db3fb7bcc15b9e52446c95b4e49aa1d02add8344cc21cc652ab7c86c04ad3447122735d4cccbf404ce4e92388b54723e0afdf93292380b55725e0d9ccb4ae22c51c9b902dcec9d257116abe4fc005ae7729238756e7e9d0d9ccb4be2a45603a3719e049c5d2471e6abe43c0038576072b616ef9c627f8f0e1d1de32f138590471977265ca30f8e44a7c0510bae75cb21d1fe0133a41599b4ee8309f129a5beb05b7768812b3199da7746a6c6ac904f6020d455d2b3b14ce5fecb41c0d94d122735ff98c6b93270ae2c89b34825e76df0dcec2e89b35025e7d9c0b98a24ce12959c5f01670f499cc52a399f06ce9e9238755656d809387b49e2a41e1141e33c1c387b4be2cc57c9d9049cab32397b98c491e16ea3f5027f4a61b3899940fbd569f3a0ee30d25c2dc49432b3d6a831a7e875488a599d49d972f5dc39341b57d3a3653e4747583d3f1e58d760b2aeda82b5becda087be5b7d1308b2ad2905526396d1b200b9961448e2ce601ae47500d9470a24711844831c01907da54012b3316990f703643f39117662410a1ae5cb30b25c9b4999c8c52c8ed7420a9a8b3994c577100c7bfa33f986b4b8a5a79b25f75064bedb82d89fd396d5ce849b7e00937ab86939704f0739bf1d4bbee5f6ebe7f97d44d47129ada5bf03fc0399fc3de3fca5669aff84fbe6d5c69d8a1d68164fdb44f08649120e0a1155ca6c3f860b9668ac58b3273c7b0787c8f4483c10e6fb87809bc757c4db62ac83cd9d1e02da75b2196f4a6da91a2b7e5d0094eb861c21d4c76f7d1753aaf12db4f5ae6a6cfc0255f692bbdbdf6b0cb90a43158bfa59e8a28630a9db7f6e4c99ca53399683b6bb9e34508dc989cb0368ae34508d671efc0ad3d7f5a5816a3c95e37700dd401aa8c6736372e096df501aa8c6938d3a03e846d24035ae887e06b7fc5069a01a4fe5f81240379606aa317fe45b001d260d54e3c9463f01e8f010a1932633d3b8da73ed0952e733fb7b5a98fa21a0cd934a4b3d828f46fbac49d2e687884a65566e5563806f1d18441530297b9bb6037c899f741a732cbab81389f14788381586583d2d311d29adb1133c2b8bb21b668e2ed5e051898190c12ccab7e1862e963544ca5719fb6c80b659220d5463ec733680964a03d518fb9c01a065d24035c63e6702e826d24035c63e7707d04da5816a8c7dce02d0cda4816a8c7d4e05d0cda5816a8c7dee0aa05b4803d518fbfc1b806e290d5463ecb30640474802cd573ab09f0153cf7269a01aa79eb5003a521aa8c6615335808e9206aa7160bf13808e9606aa71ea391540c74803d5181cd916402ba4816a1c368d07d0b1d240350eecc702e856d240354e3db700d04a69a01a83239b01e8d64cd0ee2651b625f8ced0052cbced4d126f1b26de0093eedcade818c891fea4b858fc73789859b97d076e6b38b13ba21d6b7607b4cd71d95c3a4edd36431c2a5dc6a2bc089218c687486228f24fc5c0373a2d8921062d715b265faf389fdb3fefbe20bad01c7f2b07ca04a1a5761d0941b9aa106db0d0a7d2749493deb687363821c4cee2a80d464790b69660a87ba3f617d0776f17a23516d8ff3ace137119688d1343a4c02e39f4c924099638eca1dde89702ed2426ed3a2675377183fdd219be0a83a3ebe83b89af04e6c921a692e946972d4b03ba5a0dc435225a79c0c7608c39451a28718d8806fa30804e95064a8c1ed1406f03d0eda5816aac087a2b80ee200d94d8f7d340ef00d01da5811223f034d0db01742769a0c4554c1ae87d00bab3345062688e067a1780ee220d94980942037d08407795064acc04a1813e08a07f0b3dd76f7d1a3ad9074e5cf1ab3a7fb9d9dcb8fc8d2cda9780765a8828549eafb9d8514ab32e8690f26e2156886a4c26d51689b3775a3cb4d12429ab9994ab2fe5a9994a59c89cb9d3305f83db7aba244c62f743c37c06306b246112074734cc5700b3561226b1f7a6615e00983149981a8ba85e019875923089610f1ae66cc09c2109536311ea130173a6244c62c89886590398f59230890b1a34cc06c0dc3d44026262a9d8adb3d79a09c6e526d5fe89d856f043e3f2c6e1b0443c8bc9dbd97e30ca97fc69b05fa82f1b640393846a6042f56fd10e1b4d32d57594cffa706fbd63d5f12a859b7cb6645c8d47f16d09b8734264d5651a2c2e55b9dc360f38e74ae2a41645a5719e039c8d9238a92768d338cf80fe7c0f499cd4dd6dbc7521e09c2789b34025e787c0395f1227350442e3fc05389b247116a9e45c05baa266499cc52a397381738124ce12959c1381734f7ecec704fbd72e573ef1eda799591ed9edc3acb17f8e2e57617f8fd9cbd4f24069b566fb9824e8c2ececef88b6b616d85fab8d3be22cf1fb647bb1592616bff969b4b9ac82d225d0561785b8f533ddc3aef3ac98f52007642f499ca52a39d704cebd257116a9e47c089ea3fb48e2a4a62fd038af04ce7d257196a8e4fc0d38f793c459ac92f34de0dc5f12679e4ace7ae03c401267814ace1380f340499c3a0b4eee079c0765b33a4dea8d4e9c11d116e1368719d1c152280b54521e01948748a1a41640a5513603e5a15228a929dc34caa781f2b030db5cb250678e96e6f53e74358733f91245fadc37aef3ed3071ed39f12fd1879703787f67e2ad6a9275935c1195a65603c5116e93c290f04e10193a8209d9d72c6dfc88d567caed65e6f93c256a7ad7373924d6ab80f548266bd7f805e6d82f8ad93730d524ce1824a61c8e60b5c60de1b63e8ac9d6e3cf2e2535232e5001345a75cdf7a1dd1d1d629b7422ad303adbb2debe958e95a7790d0c728e0931bf765fb2f4cda8e45de7b47efb50c8df383644bf9dd9fc5a5fbb3c1720174b81d478831f0190c74981246ea8a2413e0290c74b8124a6bdd020ef03c813a44012379fd2203f02c813a54012b744d3205f01c893a4401297176890abc268f26429901a638f5f428b3c450a24b1420c0db22fb4c853a54012abc3d020d700c8d3b2b9b0903a51d458e7e024b8b94f0fb19b3cb3397791ca19f77e10113a4312a6c6423bfb03e69992303516daa907ccb324616a2cb4330f30cf9684a9b103aa05cc7324616a2cb41303cc7325616a2cb4330930cf9384a9b1d0ce14c03c5f12a6c6ea980702e63f24616aacdb7a10605e106232993e2b437b1078384c26ff99dd79797429b72b97bac243cb157a13282f0c915cd09e9d10c467262ddbfc49b8cd2f92064a7c6ed2409f02d07f490325ced169a08f00e8c5d24089dd110df43100bd441a2831be49037d1c40ff2d0d54e316a82700f45269a0c4393b0df46e00bd4c1a2871de4e03bd0f40ff230d9418efa4813e00a0974b0325ce9468a00f02e815ecbd3d63cc0213f36fb1321e10a9b72f766575dccb6878b4a3925d3da904de954cbcb54ccba39263fea54d66661b41108d49aef74072c255d90c82a49e304dbcb52f6351fe1328af6652f68b53bad6586fdc2eb3cc4f4d23b651daa969c7c36d7f0d1376f012b77db5bf58859917ff127741b707a8edd0b2c6f5a3db2184776d88ed2cc3fdafd1efd15b19e75b73937fd626b65c91774fd22a14de08fdfc7521764f22e744fb978e3266ffe42e3ad75fbcca3f7517a9667d1a58af67b276b31f6cefff3a51de51f7fec98de0197a4388f698788646cfcb688374a519ddeaf0a9d814729f9a9d59aca7429f7f63884a07859eaaa3543aa8824ee7a610a3cfcc968635a62c8c841bfce6107323ac7b30c95facd1dedeae006e54b53592d15c01a1337436b73049ffbb839089ad9536a4df1e9e9bb786786e16c40748419f9bb4cdfc3f43cbbc2d045fbe29ea407c5f03dfedd90c7a8c36ee98a5e9f1cc0fe20068088bf225e8c1ef0839aeac4f2969d2562c89c84a8b259d0bcfc73bd961e2693e812bf8ed4deb5c8e83a1d05d4c3c37cd6d19b418ef073b33ed8b88e700d046910381eeee10b99ae973e25207e41a135f9f8267e33d92303526be3e0d98f74ac2d4b8f5ef1ec0bc4f12a6c6ad7ff703e6fd9230356efdbb11301f9084a971ebdf2d80f9a0244c8d5bffae05cc8724616adcfa7703603e2c0953e3d2ede580f988244c8d71f46b00f3512666ff5630333f098ddabbd3ce429b0c618dc724e3127b7b1aeeb180fbb8645ce23396863b1e709f908c4b7ce6d270ab00f749c9b8c4712b0d773bc07d4a322e711c4bc39d04b84f3371f1b4817ab3643277a0f2e4b4d4ee5d6049ee9910e987e9c6b02d0f482e658e056879720740bb7c561267994ace8b81f339499cd4912a8df34298633d2f89335f25e763c0f98224ce02959c9f01e78b92380b5572768667e74b9238a9e5fc689cab01e7cb92388b5572e601e72b9238a9452c689c3b03e7aba15366339f6c6a0cef1501ed6b21723e4b4de2f0a628c32ec8049396a8b82c4c305fcfe65683e45b274794687b86e700e51b61b28fb3d01269cfc89849f2bd99cdece3d496a8f164a1f5e199f89614ca0295940703e5db5228f355523602e53b52280b5552de0b94ef32297bdb0f26d80f9afd03da5dca9d9b3ad3ccf3bd78bdd9cb8f22ebfd47faba9cced0e5bc17620d08370756da9794fbbd18f5be1e4db9bd58addfd5561ddffa526b34ef49df1370df0f311c2af243f3c0bb35bae590f8f68170db07529e96d40d07b4a765253c2d3f944259a092f268a0fc480a65be4aca4540f9b114ca4295941f00e527fcf0da24fff2d6b7f5cff2d423ede76afe2c9152617f775f49dcf946dbecbf06f4e29f86e8c5dd6697e0bd38ad651e0b31a1cf42c4d1d385d7f07251b2a1c69d1bfbc1a0e87326670f931cb0579aa8e4c464e3ca9ecd523d285f0bdae31721162292c5f8a2658829f6cdb8169af87da4fde299f6450bfc24b2d9cc63873768a95ae700ed975269a9f14c1aed9dd0097d15a62c4a59f84e88f6d45c039e9a5f33f906c053b3ed1a8653fdaff5a6ce0f8d74073a2e861bff1b7630aead817ce227a5d6f658cc5ac83d0b06f1df8668a5e9d6c847fa7e3e16ffdc04e3ca9d2ef2edb5dcbe837a433d929e56dce72e78087c27b57ba2cee469ddd340a0fd5e2a2d357447a3fd1e7afe1f98b4b926b58e92eba6f6b4377fcc47e5a3cbb8b7bfc05ea206163d3a56d9f3def00cfe91c93dd0736fe59fb4ae186f8dfd7fb40c52eb2f9528269da5700a6dacb022b4e79f4204fd323ba79058ac85d6560be0a9fb7398f5a5bcf09382a12cbe1ae0fb25c4a8355d646a94efaae6719f9837b346adb381f1d7103bddd2ddcee5f685f3fc48950a396e5912e4afd0f5fc16267b2ebf03cdf15f8749e8efd9c930ce64144aec686863d0e5a065fe11a28e486a09e928e5269984a33b58920f0320d325c0693088b9f4f1a65ed899009bc384c5834aa28ba42b701ee0794a5bf75c1f9ea79d989c3d4d22e43ccd7fc27df36adf620311d2baa49ba1452ec3246cdf29061a0b53ce02ca65999483da4139c97e4f7791265365ff940888cce78e3f6f650de4e7c040be33933871a46322d2d4e8a3492d0fd04b6db31acbafed02c3a6e598a0c945bbe2f003fa112cbe6ed01e9767f20d6865a0e4729333897dea1d2efd03faf72e21864b999ee05aa6f2c8e6fec0b98224ce52959c2b01e78a92388b5472de08c3a795247116aae43c0538bb4ae2d479dcfda7c0d94d1267b14acec7817365499cd40a9f34cea9c0d95d1267814ace03817315499cf92a39e700678f10613a4c6d74b3a449f11993de99d02140d89349f8dfd5a6d1581d793084407a6533029ada0d114f93a1657bbc0b33a2de4cca2126353c37dd2cb98ad99e84467deb9ddf43ab5d3544abcd2443893a78a2b5dafe40b99a144aeac08946b90f50ae2e85923a68a251ce00ca35a45052234b34ca6f81724d2994d4a8128df274a05c8b49d9c72c39949fe82f35d76784b4dcaba479707f040c9bfa3051d7324bae22b5841ce5874573c2cc9768ed743490f60d315f6a8b34ca66aab66fafca3f141685a0a5e5241f0ab4fdb2f9344d5d7dd778fae6c5b07cbc76a8c04834fd74175a18bfc903acc0f7ca2111be669284fd437448387b9f62a2a2038b7c45b02888170b77823b0d7532b4cb014cd4d493616a8d2ba856116f8beead046a9db46ee84e78560e0c758327b3929b7c882ea6ba27df1c080731097b0361cc8f31dd5b4dfcb5f63ccf77e0393938c48028b9fdb5f5a7e4d8f80b823d2dab58b48540bb4e58dacc639cd478122dca990f1dd1ba5269a9f1251aed7478ae0e914a4b0d28d368af8107c27a217a7d174fea58db12ca813037445eb2db351cbc4c3fad8ec8a6c0b77e08be42bf3526705a376d5fd138e8763660f2f5821bb8a19588a6e653316f820e66c330b77061f836480b0a4f03be8d987c890dad99ec26722d55e3d6ac07e179385412a6c6a8e55380b9b1244c62c52f1ae6fd80394c12a6c6cab30f00e6704998c40c231ae60d8099270993581c9586791f60e64bc2d4b869f53ac02c908499a710f37ac02c948449ac8448c37c0b308b24619629c47c1b308bf911cab61261b254e190b6a83608684b422caaa5cbe148fca4d4636d69d5903f816cb8d2eca6c244976af094c4193a2de4f61e84dcca4254f668cf8640625744db745506f1a34da48112bb231ae86600baa9345062e883065a08a09b490325764734d02200dd5c1a28b153a2811603e816d24089a1631a6829806e290d54e3d6eaa1003a421a28311c4203dd1840cba58112c3c834d03c001d290d94184aa6811600e82849a0f94a07f67d60ea395a1aa8c6a9e75a003a461aa8c661d3ea005a210d54e3c07e35001d2b0d54e3d4b327806e250d546370a40780564a03d5386c5a0540b79606aa7160df1d40b79106aa71eab912808e9306aa3138b202808e0f91811c15a9700a93fca51a8de69d97dbc34473db10c5cdb135b6efac57e2ed4edba3713ab4ceaa6c2e1ea7eec0240ee72f63515e0eebf013421e0b5117cf11a96d418a4f4f8d657e3a01e876219e9cee5088e0dbaf68c90c069e9c13b353ad3393dd95c489266d57d11ff0d49c14227329efcf2c3b77ca069eaaa17977d1eb26c93839c40d5e644a5ab454cd7bdbf686563845ee0daef130f115a0eb992aa9f67699ca58fc06d0156d2f89b35425671fe0dc411267914ace47a01bda511267a14aceab807327499c252a39bbc0cdbeb324ce62959cef41ebdc4512679e4acedd817357499c052a394f04cebf49e2a4ee84a371ee0f9cd3429450c1ca8713fd9b68360d467715e31da103da8d89d8dd24ebd0049ea3d3b60f56430bac0e3d476fbde6e1287b91d9f6bbcef51fcdf1ad93b874d12d8744fb25ccd1a78738e9dadddca3ed17cdb5d79d60f0c85b77b493bb60b5bfc05e2679f0edfc10b73e2d40b705b4de9a10dd51bace68a47de95ce3361656fbb827f5ac561a673db4d85a499cd49384699c2700674c1227b560248df3540827d749e2a4d607a171de049c332471528bf0d238df07ce999238a947e8d0387f04ce7a499cd4c39d689c2b4357b4bb244eeac1cc34ce81c0394b1227f5d8701ae7d6c0d920f7dc56628489766eeb28a09d2d296057a67207c7ba106b9a2389b35425e7eac039571267914acebb4d92b3511267a14ace7f01e71e92384b5472fe089cf3247116abe47c1e38e74be2cc53c9b91b703649e22c50c9792470364be2a4d6eca671ee039c0b989c7d4deade0de7d06cdcbea296bb37960c2aeb9b783e02b3a33d99acebb7606df4cb74b5d6c3ed274afc9cc963f4f09be1b72ab77f9ae7377651b7ccf45b9604fe38802f0c7166668d69bdf46fea54545fd2c34098392d9202490c90d020d706c8bda440129fa5bc2348a18bda5b0aa4c66d857900b98f144862310b1ae40500b9af144862110b1ae45600b99f1448e2309e06b90a7436fb4b812416fea1415e012df2002990c4a26934c8bed0220f940249acae40835c0d200f0a71a849fa8047ea4852e310684bc8fe385812a6c681f908c03c24440995cc66381abb9d47e1263f944939c4a4c68ba69b25f7adb7e780701a356d87fb4710293a8c493ddcb48c78a68374b9f2996e590814a81bcae23f19f80f0ff104ce3cb35e5f98f9647802ff5d122631f249c33c05308f9084a931f3ee30c03c5212a6c6d5a4bf03e65192308931271ae6518079b4244c622494867934601e2309933809a0611e0398c74ac22446446998c702e6624998c418140d7331601e2709931819a5619e0898c73331fb99256b336ce58bf956d85feb3d63addf88e02eec4a0d04a9d74083ddcb24614fe0e7328db35f50e377be634de4ac9d564cab94bc3cb09e1822e32e5d980f2f473f338e5618632edcfe2785a8fde92ad804af2b428b94fe0091d293997c2bfb9fc63d2d67f9b739df2bccf0dbb7dc8bf4453e7bc38d7c4a76cfcbc61b993854a7ddc467c14d7caaa4c322f29456f6fc186eebd3a4816a3c56ef53003d5d1aa8c623a1de02d033a4816adc7af00e809e290d54e3b17a1f00e859d240351efcf821809e2d0d54e39150cf02e839d240351e5af622809e2b0d54e3b17aaf00e879d240351efcf81a809e1fa2044b939969ff7a7ebbf298a87b3769f3f96b80f61f5269a99bb669b40f9b24ed0521163c328b799630c7a5b460496f0896fc531226714c4ac35c15302f9484a9318cd705302f9284497c66d2305704cc7f49c2248e4369981f41df7eb1244ce2189486f91b605e220953e3fae54b80f96f4998c4f93b0df355c0bc541226710d8986b93674409749c224ae1fd1300700e67f422c1667b6534e63b9808d80f2f21087e6a6834cfca4d424c4c5ac8ab33fc0cea12bb29bbe105daac1531287eab413b2df811679a5ac28a7ce9334cf857efc2a69a01ad317ce07d0aba5816a4c5f380d40af9106aa317de17400bd561aa8c6f4853300f43a69a01ad317ce06d0eba5816a4c5f3809406f9006aa317de16400bd511aa8c6f4855300f42669a01ad3174e05d09b99a0034cdb27c88cf45b1162f1cfe18ea372fb0eea0d7533366d6fd16d3011bd25d439c50bfcf6177768e9f4f81cded54da66f89b98c8578a84922de1a624751a167ec282715af096df0b66cc695aaec4b76b77f7295bba971255a4bbc044274b7f323f0353ec7c87d73f746cbed4b16d93fd57490ed5a43e0b6be23c4be4bdc279c6e732b7d7730adabd90438ef6472f669857372dca1cad459da6a7ff149fe1b3486401dc2425d0686477785d9cc9a17beeba1dde26701dfddd9399f30931c4ee25c9d467b0ef4eaf730697bc0edded8e25919a06dd29e972f40dbbc379bd53d5357d335e61f8d85aee7be10153ffe3789dac45522da4d7e39c0de2f1596b89e4983bd18601f900a4b7c14d0606b00f641a9b0c448120d763cc03e24155663bde44a807d582aacc6116a09c03e221596b8eec91bfa03eca35261892bf434d8d301f631a9b01ab71b2e02d8c7a5c212b39e68b00b01f68910eba1e962fb4b96a1ce535924fd3b88f03f290d546309ffcf01f42969a01a8ba53f07a04f4b03d558caff49007d461aa8c6a2e92f03e8b3d2403596f47f01409f9306aab178fa5b00fabc34508da5fddf04d017a4816a2ca2fe2980be280d546389ff0f01f4a5d04bd1ad1f7e36d9af9dba25c13a7fb9d9dc98ff8d2cdae781f6e51039a49879b2adfd7da1fd937bdb0b4c94d4d3e467f5734c8599177f69801c14daf6da8761a1fa15266f37fbc1447f72824bc4adb22f73ad359145aaef9677c1a004dcab219277dcceb9e0c93b0b587cbb4386c96b61f8a2dce5062b112c6b99169a3b175adfebfcd33a92e770d6db37311518d3a7e012e742b414dc9fa1b379434eda8ec67a2273a185be19220137d33126b5c43fef144368996f49e22c53c9792370be2d8953671cfe2ae8cddf91c499af92f355e07c571267814aceef81f33d499c852a39bbc2b3f37d499cd4ea3734ce3ec0f98124ce62959ca381f343499cd4b28034ce18707ec40fbf25836aad6ff6cad2f190b4f09b9b0726783f661fc897886ebad97b43a81008ef2872885c7e92cd637553e7ead421126db6be23dce69f4ac2d458fd7337c0fc4c12a6c6f30f2600e6e79230359e7fb003607e210953e3f907c580f9a5244c8de71f8c01ccaf24616a3cff603dc0fc5a12a6c6fdc71b01e6379230359e7fd00330bf9584a9f1fc83353de6f29d5b5cbc62898b8ff28108178aa83189f495f9f6f3638d2bfe13f31035f6e371a6debf6a37cbb1b3fdaf7dff02bbdaff5afb7c4e4e77fb8ec69885f6edb9cfbaebd5fa6bcfb67febded97c33bcd07ec977ae41ac126f10b97e8db4dc9abb1244134dcc7ff745f675ee3dd7fa0c920a9f4fd2e0b7d8c4ec2b5c09f709f673cd2e70e1bf832b6834d3feadfb89ebcd5e90be939bd3c53bb91c8748c001e6c6dfeb02139545aa344b1643caf5dc13e2e19d5c9fd992f82891cfe25e37c5bf8b5c9f8130dafea9cebfb306e3e219ee5d398566ffd5ee9aae14c538dfb6dc3b996caf56e5df7dcc5edb7d453232929bb342fc6ba37f9be85f707efc9da4cfb1c9cde9bac4dfbb7fd36aff6f929bb392bf7fe6fa9fb6ce5a244b42e5e6f4b47f17fd3cc9cf2695b6f3c900cdfe7bacdcca7b1beffff566da6bd7c6dd2bfe8cec24be4367fbd951f1d0c47cdfac737c7590c45744d7a8b657a8f6bf4ffef3e71a5664bf2ca7d8fe126dc7daf8cf8d5851cb9f6dff8b3e4a7c7ee9d774edb8edab7def1a6b4eeb4faf86bfec0e5cda4f143d34dcebeb7c4c2ce6af5ab9d49f74e93f5ffabbb96b1bff2ac3dc3f4387fef97f70ffee9de2ffee9d86b97dc839797f41db5bfa3bfa11bff35fdd5fa6de7ee2dbf304ff4c6ff45fe9dee67fd39e57f4cf6fbc5ebdffbec34a65b6e5bfee67ff099f619d8695fd6fdb72fbdfd1cfccb61c5d2ddaa3dbe2da6333f8e95aff7768f93327bfaa31def327da02f6764b97e8e7c739e9af566e3f9ae17fd67a7fd5d926f13fd747bab1b47b04fdc2f4c4077e2c25ffefff9f14fefb0e774f8a5f536ea6e1ee66faedff5bf95fd4cadd7fabfb11ea14fbdaa8cf7423d879f6cfee7a7f5476329dff073d79d80d1c580800 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/c2029a2e73a06934c9165340cf29915c.asset.meta b/Assets/SerializedUdonPrograms/c2029a2e73a06934c9165340cf29915c.asset.meta new file mode 100644 index 0000000..c2a3697 --- /dev/null +++ b/Assets/SerializedUdonPrograms/c2029a2e73a06934c9165340cf29915c.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3910f71bfe473244fa34b47fbcbbbd4a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/c23e7e9bbdcab5d46aa1459f4e7e8392.asset b/Assets/SerializedUdonPrograms/c23e7e9bbdcab5d46aa1459f4e7e8392.asset new file mode 100644 index 0000000..7001664 --- /dev/null +++ b/Assets/SerializedUdonPrograms/c23e7e9bbdcab5d46aa1459f4e7e8392.asset @@ -0,0 +1,33 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: c23e7e9bbdcab5d46aa1459f4e7e8392 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e70eb7e20e2578d0842438a540d0a22501dad216421220254823145aea465beaeed4bda5eefaabbbbbbbbbebbb333b937d6e6f9ecb6d36cf6586f74f3f65d9bddd679ef9ce33fecc4c3483397f22839dbf16b2f92c970d650b58115bcbd638ffca75aeab9dffdc3bf57c1e2b73ae2b9cbf0b9cdf06b3b46abee47ffa473a397fcf70eeca5985f365252b74ae25e2f73c56ecfc7b86f36db173c79f2e77fe2f76de8ad4773e5ac026b3b96c0eeb18695f8d8885e2a372f92cc2e31569ecfc3d896d747e2d164af14032c44f1d9dbff29c5fcac56fab1da5d57b8bd95e225aab9ddf0a9d6fca58a923739990d8f8d2994cfc83b9971ef29a26af3b3aff3791ffae27ffdd58fe1bbedf405e7b26f97e2ff05d13f06f4e686b82ef7bbbd7c8e1ceb52163d1c5e09e7ffbb57caf8f2b2fba3281ac7ef2da5f5ed3a5cc3d93d0bf91bc0ea826be89640c04b29261d6585e07cbeb20a9ef5e350c7fa8cb28721e90c7591e01f4190cc26e027ee7cf868488bb4ac7237de978a49b8ed1b364fa7d2cdfcf90d761f29a29653befb49d279f65c96bdf6af4ca76bf63a39867b34e98f5d6c9fb1c791d2eaf23a46e474b5df706f7617551693a52ca3c4a86b144f35cbdcf7f5f2aef551c46fbd26b8c7caf40de8f4d529f64ec4fe9b45986b10cdc3b1ceb2f4d204ba5fb31be743f467e7b92cbb1fe1dbef800fbd3ca1d27e515d6201ec7fae271acab4b83f4d8f7aad541c9df49ca394eca2d02f75cee6901e3565f7e778bbc1fcfaa2fdb7a24f1db44574e63c57a921b4ec376eef386e358ac2d4fa8464f95b65b7c69bb45ca2d957255fc73ddfb88e23c00c8e1df17fbe41eef937bbc94abca88b149ea39595ea7c9eb2ef23a8355e5e331b3e4b3a9f23a5d8679028b2d034e90bf4ff1beed10945ba2349ae94bebbe32dc13ab91a9be57f16892e4fbea9dd921749e23af4d930cb3a9bcce0d116633d7161a7fefb38549d5c89ce7f26d5c017470e434d924ef7795d7f9f29a27f99fe2b3835392b083ea74c997ba3090068e2e4d5bc9fb05f2ba305617b6c8a7d3f2dad329729294b902dcf3ebc9f2f94a70cf75953c9b3e2c65ee26afbbfb74de834e67b6d8fdae4573601bc97c97c8bef674e3d72cd395dd2c5f3e576d2fa5db1c4fefc693c1b74a8f64f283acfb23a7f9189f2675506c97fade2b01f7fc7aaa179ef8b7f36d73655bbdc173feed3ee09effbe7792ba2e63f136cbe59c01c23e43862dcbffe6d28658218bcf7bba6ff9f574f0ec7429ef6df95d118bafc7d47b3c6eabc03dffbd20c9b8156bf473c26d3121c1b7d28eabca9f599e3d347a5e3e5379e94c169bb7ce94bf0ff4be8994ca672bddfb964a1795d667012e67b9faeda0ea5399a6a2cbaaab674b0107991f9d3e6255d8dd543b7f5582b064dbc6e955c6c67b4f4f4eb34e5277558ea9767616f22e7fb6afbc56caeb0679ddcf7b77dccbf29962b25eea76368b299b9d5eaff79c5fcf91bf97827bfe5e9927bbbd92b9d1a7ab2e3df7f7c55d570624b2b303dc77c7aa76d126976dcbf324b7877d3a94b0c4f67ba0fb5d862a770e92f2be769fb76a1750dec1ee7743b7f9e259dd7789e27c982bb3aa2d7eb8bc2a9b9b0164ef28d3e95c8f6b55fbec50f01bbf97ed3476088ba95712ea72a4bcb6a8263e3dc07bfc7a5488f827faada1bc1e23e3761e8bed9f9ce7a667ebc713c83ad6e5d449f1957d8f36afcbfb2deeefadfbc8fbe3419c7818e77bac5ba9b6a76ceb462e00f13e443ebb103cdb2c9f6df59e0979fcb7137de9b3daf7fb494086eef793810ebadf557b4296796d555ffe545f5c0ef1e97a218b2913d8692c2eaee21d18b62af392494b59f7442ef2a5e5456ebab43d2d81ac33f469d9ee52797fa62f2dcff2a5e5c59ab45465e12520dd32e5b34b35e97b19e070b1fced1cf00e4c0bf5fbb940aeeef7f3800ebadfcf8f4d4b3e5c2a9e5f80a425d41fa6e5852c2eae914b7d61ab3a29515a5e24af5be555d74655ba6749b9fb2621f712792d4b20b7b74f6e5912722f93d74b13c8bd1cd1b726e1295b57e32a97b3585be7f78edd76382481ac2b98d6d63baa72e14a166beb57b1585bbf82c5dbfad5f2b72bbdf4172cf8b3ab58bcad5f0dece40af9db35e01d68abeaf76b815cddefd7011d74bf5fcf626cbda31ac7be81e96d1dea0f6d7d5b7c5c2357f9c22e4f222d6ff471567caf61b17d926bdcf4e9a4f4536d83e358e2baf12657fe78d5b6b959cabb56caaf00f7fc7a9d2fdceb64b80fb8723a3f20e53497cf5f97cf5559788b7bbf3393f7b7baef7566bef76e93efa9b6dd1d3efe77fa6ce506cfdeaae2723bf80dc66d1b8b6d93dc259fdf08d26a1b7806d34ab5d5aae37ab7bcdee3e3a7ecab12dcf3f7eef3f49fa0da85f7caeb91de6fad7ef6a56f73a0c7fd7a5b616afc33d13865221b54717ea09a380729936e62b165d24dae1d746d9740d6c3f29d5109de79545e1f93d747a4fc9b596c5f43da02936db7c82dbedfd518afaa8379bdf734d043c9e6dfac4f22fe4fcaeb53f2fa840ce756163b7e752bf3ca157f1d51d3766c4d7f532c6e8bb51f71efa44337d5ef53b6b8aa1afb50fc9e915755f6deee63707b020659498695205e913b596c7f5f9525cfcafb3be4effbc9fbbb7defabbcfd9cbcbfcbf7febdbef7553e966559e49ed8f7d90b400ebf7fd18b5b448da5bc049ec93285bdecf1e921c7f722f7c586cd5e61b1fd3bd587bb5fbeb7017c0719a8df65bf3bf2802f4e0fcafbfdc13dbf3ee493fb808fd5433eb9fff3e9fbaabcbe21afaf7b719cb4097c0378b2d7626526b4e917a58c87e53707807bc7a67b246affab6f5599f2a894b109dc73194fcb34791f971579ccc7ef11f09c5f1f97bf1f08ee1dd9693909f47b49befb842f6e4fc86f13b5add5b7b29c8a3ce58bdb5352866cf7a5dd9340d69bf2fa962f0d95cd7279cf68d255950bafc9fba7a50e07817b47879e6accf76da6b7ed277ddf1f1cfb7dafa5f2fd77e4f55d9f6ecfb2d8712b958e1fe036c93ef4e9fe9cf74e957eeff9f47bcea7f7f332dc43801eea39bfbec062eb28596eb08fe4fd8bbedfa5bd6ae7c513e591d6f2fb97a4bc43c13de777ad2bab979aef53d74fe435d9baeb5379fd4c5e377bdfb556e34f9fbbf77d2e4d20c7aff7cb3ebd5f76f5ee2dc7a77b2b3f8b2fe4f5cb807a7f25afaa6fa0d3fb1bf7beefdb09e4f8f57ec5a7f72baede7dba4906caeebf95d7ef02eaade6e47e48a0f78fee7dbfc609e428bd7f72dfcd55ed809f5d7dfb2a3d7f91d75fe5f53719af57596c7dafca7c5d3c241bf6bbbcaa7ef06adfef7f30afdf86e9fda72b7bc403f2fe2ff73e4bb597ff96d72ecc2baffce18f0d11bee2f68f1b6ecef424defdd77d77549abcff4f3263f21a6131be5291a84c93cdd5cb8e34605abf837e724cb2df565c4644b6e72332bdfc731ac23f4efe3659fa57441a49f972fcbbbf1c938fc879e7889c1f8cc8f9c288aad7f706f701ec3d22c78723ea7e072f5d850720bfb6f4640d97f93922e747222a5fb689659c90695b3dd3feefcb38ff9c405fd9f7111e843aa61d0053295ff82e3af2d3d57c70271fcb36f2faba8fa51a7f4eb6ece822bf3f4c7edf5932bb3209265df44cd27f769f0f4850d644def0852bdb859137596c9fe44d57e680e952a6b4dd48571f8f88bcbee3e3a1da02c9da5637794d93ef28ee6f7936260635f8b3b73d992a4d23b26d14e90e6c52d61511e8eba9d2be8727634a127359919e7ae603e5fce5c04d0964b49557d5577f97c5b645df75650d527948fa9046e458654496a791f77c8cdf0bc8b8affbce103546dc4f863bd87d3e48f97349bfd1886295eec91ff27502f9caefb38bbc1fec7d37f87df96c900c73ab7caeec6d88efdbf7655c0f97f743c1730d8baaef3e90cf65fd1bc900cff9f5433dc3886c6f463e62b16d3ed5164c96811aab57fe9cba36812a0755df1ba90323d92ce93a30a2ea844f7cf1976dc888ece7443e96bf1f09ee9df418b2d427e7531fff4f9390a3d2b7a6635a2a0dfbb150e36b91e120cdb0fce14f03a41d14280da43fad28bbf83747f99e7796cf8fae5e16ebe0b38dcdb1cf239fc9e7c7c87b55b67c2e9f1f0bde83cf8ff3c9f9c227e70b5fb8c9cc8fc8f1aac89720ed55ddfb158b6d837fe5da5bc656373d32643b30a2c620659f3522fd7e23dfb1d8fc9aa88d9ea5d1a3bd7cf6b54f8faf5d3d32d35d199987c8e7637c7a8cad253d14ef6f7c7a7c23f5d8e6ca1826ebeec8389f1e3bd58e1e11e9633b4cf5313bcae7dfb2d8faff5b57af61b2fe1fb6553edf595e27c8ebc45ad24bf5190f62352e3f2293dc70a6a8b9ef5c10c744327bb0581653e5f57b19a72de09e5f7f007acbbe5f44cd5b4d66b1e5885fe68f3e993fcaeb4f40e64ff23a2d49993ffb64ca3671e4172053f61d2333e4757a35327ff5c9947dcec86f40a6ea7f2a3f635f3d56f5fb4c165b86fac3fadd17962a13fe0061fd21afca3f66b02f2cf5fbecd8b0aa9e4bdfddc85fbeb0fe92d73f93b39188f4e5ab2adffe96f28ef73dff473e3f01bcc7afb0cff48fbceafa4c6a5c49955ffffac251cffff385f3afbcee0ac2517ddcf9209c44e39e2aae79409673e55de12a99d26f381a01cf549dd93cf63bf12ed7f1c424c294631d556d5ee51bacd67d9c94840ce9471c59c4f4fdbe111e87a1aacdabc6fb7707e9c4e31705f16b299fd5f3be57b2c57bfc1dd0ff88aa36612df43ffc79265a3fd68ea3b2ef106d00c26f20bf916553b4a1ef1b3587d8553e3f1909ab91ef3bb9462cda1884a5ea2d5966459bf8be51f1ef564d584d7ddfc9b18c28f0318eaabea72ccba2cd7ddf28ffe8eebeb092e01bdd81c5d4835165072de4f355e0de613e4af6ff463dcdf4f169e9d34dd9502b101f393e126ded0bbb75e2b047cbfa34a27cced5fa9189f22ac757a2aa3dba1cdc735d931dabf0c7a98d2f4e724c24da16c4a96daced55d91852df44dbf964ca7234da1ec854659e5adfd2ad1a991d7c32651b2c0ada0351f5cd0c9fcd28993a1ecaee547b7e25b877d265cc2697e918d5cf56bef4d359c23a26b2c4275f8d119d02eef9ef1a5fe1c852792d8c9511335724e7d5a35dbdefabe65bd43ccb32efb769d27724b237f88edf1780f800bb0adc5e93f3077e9fa8b16a8c5fcd836faa865b31d3fac08ceb1350ce7216e3231391795bf9c844d49cea21f2be44725176283944a47f7a14d605ddc033feaedfffa51addb4cfe47c7774479f1deee8c67fa7faaefe3ba93ebdb2c3f5d57090ef457b80f7545869e0996cd3447b8278a68167fcda4bea762ab877f41abfd927b7b77cef341036bff691cf4f07f7fc3b19a7685ff9fb5e3e79fd814e7d65986aec62952f0c35de20d7718c9feee3d00fc8ea0d9e291960bc48852faefcb9f471dd69426c98d5a581365d54183707ff369ace62fc02a2aadd32c0673b035c563b4f70f5de598dc1283bbd3571d84a6e44969fd1812cc637232ac708236b803cfefb99b84c6d386a8df80a700fc215f2f9ef897c18a48f4644fa3b4787c86fce02f7fcaac631f9bb72ce3f3a14d884b2c50cf9fdd93e1bcd04ef668277f97598fc6619b877f84f9ae093adbe53e354e7807bae97f46f8daaf12ae5a3acf2680ed0211b3ce3d7e1f29bf3c0bda3c3c4c9ae0d4cea84843582c5d6af237c618e94bf9f0feeb9dca763df8f8e92ef5d00ee156328e7c258397ebda2a3411cd5baf17babb157c9558dcd47954ff71237ee135439f57772f2b4cfe4dc50448ea545555f660bb8e7efbd5603d9be39ef5a9d572518a7aefaa6bc1a9915d5cb8caa6fb7827bfeae1c77606a5ce4c0604ca36acdfd45e0deb1b7c9b2ad14dd89c5cca145d5d85c63dff7e7837bfe7b75fb61e87419efd365bcabcb1415d6ce3e5dd4f85c07dff717837bfe7bfbe0ba4454bbadbbbc2a3f1bb5964d954d972490c1eb3d275f4d576354aa5e9820bfad00f7fc3a91c5d64f1365fcdf77e54c5575f5469fdc0d3ef95359ccf864d5bdf28351e333b989b944f6f7e9972be554827bfe9e6acf393acd50e92ffdc7a260bd6e54aee98caa31be95e0de89e7d4cf63dfab56bf837cfa4df1e9a7fa63ba3e84ca276abde1441fabe5befb80ecb4faaa7a6f9a947900b877e23f4dc65fb5c544df2351fc95ffb3f2513b44ca537d95cbc03dbfce6031757654f59b54bdbb0b8b695f8a7b47afe977f8e4ccf4c99929e5a87a6596fcfd72df77b340bcf8ef729dc8f4a77df1a926de5a1687c6a66344b549f70e2847f913aa76d21c16db4e9263ab51b0b74244954760ef83a85c431d9d17cbaa8a3518b38cee0adee5573586b80cdc3be93073a54fb6fa2e8fc5b693d458a66abbe4337d3b6901d0211f3ce3d7852cb69db4d0d56117d96f983901096b118badef17f9c2dc8dc5d617bb49b93fc7be1fdd9dc5b69376078ca19c0b63e5f8f58aee01e2a8c68e0e486c5f8a6b953defca62da4933d41adabf939317fbac4144f80f4d67c5ac80ad6319623095f74492ddea4c7d59fd26675c74433192cdf86e673cd80ab6d1f9b458b7d3d802b18f5905cb76ea36dd4e639dc558b70a3d57fc5de0bc5122845e198d0be2ceb820b872a5ce7fc5609bb472e7f934b1cb1adf28adc4f965289be55cf9574bd930b6d8f92f56ca4227d85256e9dce53b7faf13f2963a6ac7bf595d94f8966afe6fe63b32dd1ddf563b4f14d075ce7da9d0304ffcbd5e685a2cb49fe13cab10fbcfad612bd824e7ba4184161ff732e7dfba30f32532bd8efa8ddfb0e7eef6722a99263bb1e1da67085bfcbf14a98b14e1e81b5e29f361fd0c317b716c5c4afc1f43b790e1133933a48c61025924e65916cb10733df3e308068f637c0cf5f6edf21ec17212c6454f8627775711032f851fd9f384c7cecd6d734683d8a865b30c314dd5ad9aa82502cbe5a58b1e5190283468503f932beac71fd1e11753627929c4efbe5722de0b9e000d45e5179b00c2b523df29d5e681ca73a1f3b7abdc02118d52a1a43f5af942f90aa98e773fdb11be81cd75be2f1481a82d3f673bffae10efcc739e17382aba1b82c6a57d2657b49148bef8cab93a04580246750928fad3f975927fb06d4c132761e3aa58784998215a5c9d12183a1696688ad593ed319515bfbae5b8ccdf27ac5a7bcfad73d7e49ffce5c70df4e9d354a44f4d42c552a89e2e859aa63a8b555fa7244a9f6655f1f2d287ffd1336c8ed878753a6004ebeb08364bb58df3dfd60a2905cebbc119f289ee41fe624a0f7007c408ab570143d840833093236ca9d18a3568e2d38a2b84486ea84b9ce6755381d7ccb8b9c742471f8206a871b74e58ff0635ed463a7a6269ca52527aaa5f99e77420663abf1538ef178b462a7f0e2bb2892204af2f1afb4562b2dc9762889fac966a5b41b50fe82587d50c23de58433c93db6b3b8d198832ce9f195ae399a10996cdda87cd664d31c91dc24a6e8649ee185672734c72a7b0925be8b28df06eda3325d9c61b8e51ff9ae47cbbd289cc7ad12aac74bed70ddf24ce2e9d93ce2e5d44764963ba41a5601a61d964075ddaf1875d754afa93ae0b9e742d31c1dd420a6e85595bf7b0d6d61a5379c7902ab7c104f70829b82d56c8a5d54221d74e97f944b2969066be05ce33772c728af8b5440c60f10e5a99680f95b3e52223b9c743606fabcc365b9ccb5029f4489c2d7b269d2d7b896cc93d2de874c5326c7b5d92f354e99d8c2df5c293bb832eb945665b5327c9edbea5c6354bc4e11a650931ce73cac18da2bf5ee8fc9d7cc2f7493ae1fb8a84cf4a90f0b5a93566021db1e2a45fc8e2a493ce0444a9b8a24e4c809fb9c287b3793265d7726ee7be76f5fc4311a2a01e942079c369c44b65f0173234912e8c8c4e0bccac3aeb525fd430fbd449eaefea845120422c136fac957de1dab381013a1b10d5ded004f46b432f9f2524328781c21ca815c28ca28baeac11431cc994356df1b2a6abceda44e596da1169772896cb093ea2c07d007a243d5c36846143c28975c092a69b2e6938c1a1985afee41982274f774c78462d08df51279c375bb92363d8666b0f9d70dead1ec6e20737ff73fec4096f8e0b4fc334cfd2687ee4ea6820cd7bea84f39e0df7550cd5b3e98549ce092bb9b72e1b8ba6e4a1a4d93859278b69e21cb96236d7c948fbc86a5385bb5694875c2335cb3edfb92e175af0e7853243260e2b711131bc8a0fa86244036e0a4bde55843e16dcad392a8aa991d5d6373a6d82d737fa42729408dd2c365801dc072b69466b4a9ad775c5588292a62f9665c784cdb2fd749279961dabb1d54c6eabdc17b4a9e837c485330a0fa7bfae68105d8cfdebb4687047f0b9bce5c2efc9953787f1531ef713a6baca31e0f5d270f29d77ca9c308aa59187290cb8cf75771fe00873ffe8b3c378911dc627911d2863856580749d25f1a90e3e2b1f3755cf937ebed3ddcd654b4436dc573ce694dcd42d11af96b0fd4563d66dc6c6d95b23dcde06e8b4e14dd5092c5c53752026786248c183b03c3e296c1e1fac93cc4b1beeee1cb6853504537b7258b5876225ea144d89fa772458899a81099faa117e4f3498f04c2c2b4c4bc6461258f5304cf0745d1eeb2b92988f3ca639ffaf75bee0fd890291fbd34465e89506694e5e2f71fec52becc1e0fdb5ce1baecb60103db330a39811d628b2b174db45936e3f074cb71c4cf84c8df0e9f582091fae13ce19ced2a51d4f695e6ff066c94a59b7c59686698c3b6fa6097fdd4a31fb592452ae5ca46b1a3bc031c3039d2b1f194a13f540a9f82d4d1c7a5c26cada20693a02d37fb64effa640ff7940c320218ec4caad399a722b12b0dc1aa513ce1b3e7319d2f0e18efcc11b3ea3316cbbeab07517c5db06d172753dccf284011457b5958b6aa9821ca3d12b438cfad18ef057d774e1bd05eedd5c2efeed355178d89ea75c9886177751f137bcd41f7dc38b0f42b923fda9d01e6b608dd559122f54f335856a2448a13a0ecb0b0bb0bcb0b0467961279dcd8941c575756a73788e9a2f64f39c17bec1cf17c1c40d308b91cf9c242cabb6741c241671968b43ed5d72e5bc30e54e2ccbc0e9f52e7c9125f4796237912752a939962fc663b5f6ee9a5afb9606c16aed9d75262b065bcbead464270b09a930db3d74662b4684472491f8b5a9670fb108a65c14aa45b250758bee1e6237df32516d163bcf79c10b7f1f24767ee6eda5a982f76a417ead98975f219aa07a235f2c8c3cd5f1c40c7d025601eca9a90002b5aa276259682f4d16fa3b60169a84a9bd7758b57331b59768d4ded43098da9331e14b35c267350a267c8a4e382f980b58b81ee2544c305f761ad7dce48396aa9f50e8eb292e137d05d5ff2b124f363a7f973acf0a858834b1a049796606d1721ac6b650c3b65540b6d331044521d9ced009e6e6599c8ce004ae16bbe804f3f6d77286b4bfb80b46f0f6d74c0cfb4a0df6ad01b1cfc2b27949d86c3e1b93bc4f58c97330c9abc24a9e8b492e0d2b791e9688ab3589c89d938324e2ae98f0351ae1f90185cfc732e65a5dd9d497f13155af91ea769fbc718d02277754889227cda9ef0ba483151c1fe1631e25b2d31c249fe7617aaed3e9e9ae9fe6fee7bc4d5120c6d07888731d230a126a3e867e5f0dfa2d01d12fc0849769847f1e50f8428c57b98e57a76ad2b548b82d7b4f87394f83705c846953a1d386df7ae916249cdd30a4951aa4e7350d8674772c12eb7591e09e6a2ebe310eb23962c0af40aefd5e2faaf1e018f7c034d84fa7012fd96655350ce6d5b059b01843ba4183f4e58048f7c44ae48d614be4bd30b5f7d7159acd82a9bd37a6f60161d55ea293cc5b1d9b18d2eae0dbeb046f752cc5c239080be7e01a855380913a242ca96558021faa49e009cd8325702126fc308df04d01851761c20fd7087f38a0f0624cf8111ae1dd5a0413be1c137ea446785140e12b30e14769849f1550f84a4cf8d11ae15706145e8219f9e6b046be0fa6f6311ab5dbed104ced5598dac78655bb54233943f814a6d275d4effd14cc75946f1b9cdc9a03be0193ce6db4baf0b121a5d5ba74e135f4f13a950254e56b306b3a41634d1f07cc046b31e1276a84ef19d054d761c24fd208df1c50f8be98f09335c25bb50c26bc0c4bcc53422666392698ef891cd7161c2cac73adc8636962cd0bdfd6648df8d71ab1b554b198b82e10b6ef0d38a9896bbe4f4e9ab4de3269d3a58eb50f759e06d1ba02d3fa349dd67c449b0fe27aed66b72be97643747e8569acbf6c75f70fa457256603a76b6ce0968006b61e8bf419216d603f9d60bed4eccc640427586ab6412798370fcf6248f390efbad754480cd23cdc88613f47833d2760d6db1f137eae46f86e01851f80093f4f23fc8880c237e984f39a99efe517aa663e1053fb028dda2f0754fb204ced0bc3aa7d30a6f6568dda7d5a0553fb102c7b5e14327b1e8a09be5857d8f1e82cae1a71710707f60a58bc1e8671ba44c36943404e8763c22fd508df1650f8115889731956e2f03d4f8377488fd485c32def8a64123bc17cc15198e02b430a3e1ab3a2ab429ae7664cf0d521051fa313ccd3fe1a16ef23c60504f1113b16b3c26b3556f87aeb6056781c56825d17b604db82a97dbd46eddf03aa7d3c26fc068df06e6d82093f01cb99dbb09c79638d72e6899839dec434a5255f04bac4f98f0f99f1d9cf156c9e6898723fca0de29775a231cb9b88416cf7244c8b9b755ab4add222d3f97b357347cf5dff859aeb7032a6c32d3a1dda481db29dff0b45b7987fb3c1f9bbe61a9c826970ab4e83c6202df82a07bea34290d04ec5ccf7368df97e1ed07c4fc3ccf776cc7cefa891f99e8e157a776a0abd7a010bbd3330427769085dda3618a13331e1776b843f1c50f85998f07b74691b50f8d958dade8ba5ed7d354adb73b0ec707fa2a229ab968ba673312d1e485c340dabc5a2e93c4c870713154d39b558349d8f69f0507545d322115e308fec0b30f3fd9fc67c6f6917cc7c2fc4ccf761cc7c1fa991f96ec5903dcac235f42ec2e83ca6a133a17d303a1763741ec7e83c51233a97609178521389b30246e2520cfd5321d15f8669fdb446ebef036a7d3986fe190cfdb335427f051689e7349138a943b0485c89097f5e237c5b40e15761c25fd0087f39a0f0ab31fc2f62f85faa11fe6b30e3e447b7a0d55a762d576bd7625abca2d3c2abd6b26ab15abb0ed3e1559d0eaa5a1b5e8bd5daf59806afe93468c2bc6a6d8a18925f1bd0ade306cc805fd718f0d68ec10c789b4e3837e03730037eb346067c231689b73491e8d42958246ec284bfad11be21a0f09bb1e47e8785ab176ec1b47e57a3f5e701b5be55279c0f8fbcc7420e8fdc86a9fdbe46ed569d83a97dbb4e3867f8812e6ff189b5c48e5bf9ceabeb846bd50a51ee9409bf46777d4e9198129bc7dcbda1ddb59d05ced322b1ea73a5b857e566015b2627ac8689092bb52e742373b7094d1313c6eef1205cca1a2185af165e259e948bb78a8164fd9458899cda83936841fd2fefc012e8434d02a5054ca03b31e11f69844f0e28fc2eac30fa182b8c3ea95161743716894f7584ba048bc43d98f0cf34c2eb07147eaf4e38cfac9f2753182518babe4f2338436cff54371b94c6ef3a53bbdbd57da1e3a5f519f99255b74169785d31ff92fb315bfa4a97db02dad2035815f175d82ae2414cf23761253f84d50fdf2663ff090acdffe9ec3f8d3f5c5e27f61f663fa8c496ff5dd296ffbdb0fc81092c3fdcae55fa947818339e1fc21acf2398f1fc18d2781ec5b2e94f9a6c7a5ed760d9f4314c6b7e3a605c93886f2b385174b48a854bbe6e31479a682ea505f4bb791cd3e3179d1e7c3f8960f29fc0e4ff1a32759ec452e7374deab4eb162c759ec2b4fe1d4b1d9e4756ca26a24a8fe2aabd0e6aea15f53416c93f3491ecd43d58249fc122f9a72e923c072adf08b73d1beba216245acf6221ffa50b99f7f6dd03ac32aaceb4c8a8da1064ae9321dc2da48368f01ca6c1df3a0d3a6a359825fe5521564fbbadfe9aad99791ed3e51f9d2e5d93d425fed083203abd8019debf1ac31bb56330c37b118bf07f21cb849730c17c239c30825fc60447420a7e05e31c8d685ce402727e15135e4f23bc5b8f60c25fc390d40f89e4759d6051ff2723384167e80d9d60de0f6d1841faa18d2235e987be89616facc1fe735a30ec6f6191688245a2698d22f1361689669a48e4f40c16897730e1cd35c297f60a26fc5dcc305b4434c5295f18399fc12d328a441b5b15e4e96c80a8f0d6c8bf633db0d3c49d7782c13af18b2a72cb8587769a2898bd25b0eea0125fccb9ced73250e1f0c124b78a5d5e559ca789c2bc28a03be27b188b1d742cf8666c709f2db795e955b0de72d4fd8486ee36edeee099ab1fd7b93a0959cedb41bdd6dfc70ca6a5c660b605b4c60fb02cd50acb52ad6b94a53ec422d1461389970346e2232ca5dbea529a2fe7d00f912e9683abdceb9ff72edced5912a5697ac25f0708175a7758d5b3ebd81cb05658861a428dfdad42d8558526172d131aae0503b0aeecb5b2771ac4be3ec692a69d26699e0f58207d82254d7b5dd2f0a55b8bd93851d0948ae8edc47a3bd9cefb6f7cd50e39dee1ade39c36a0f7c578013d5eca28e7eb1c365c4ac967f078579d04f586bb776e8978972bcaf7f12916dd4dfeed7af9cc1d6177bf48ab9a972b63ead8ed602dd04fb124e9a04992c6bd8325c967589274d425499e35491204f0e718e04e1ac09d0202fe0213de59237c7340e15f62a9d745977ac546a69e3bda489b85bec212a1ab26111e0898085f6389d04d9708b30c4e842048bfc19076d7551401917e8b09df51237c429f60c2bfc3d2ab872ebd4a8c4caf5ca64efc5de0340f6833cff75862a469126343c0c4f8014b8c9ebac4986741620441fb2386b697ae720888f6274c786f8df05b020aff59279ccf62f489849cc5f80553bbafaeb9d33798dabf62e6d64f676e7c177895cc69a279cdcf212811ff2a079d40b8cf5d795523dfdd21cfebc8aa3bb7f9ee1e2812c4587ed3e9cee3da3f12efd61f651a3009dcfa7fc7c0a4ebc028b733bed42476afd89abb9dfd81693040a7415ba0814a225d3b30986bc99f98ed0dd4d85e5140dbfb0b133e4823bc22a0f0bf75c2f93e178393192bdc820bfe07d37a8846ebaf036afd2f267ca8aee5dd2f98f0ff74c2f9684606369a9159a3d10c16d184c3b7311b1649b093b83f80f17800115d00dc8ab374398317c2eae814af66aa0c5833457561f294c9d6a4ccf48029534f279c174e3991f8cd8433796193c658ecf187fed0d2f1d0eaeb42e3e5c7705d68ede24343821c8807d900a3374297d503d26b88091fa91b3d0b28bc914e3837a95161ebf5c63ac97cdfe5d1c99450094ec66982f118a3e17147401e4d31e16335c233fb0713de0ccbd8e374199b9bf80231a4b7416c995228be296269725bbdd2aa96876a972c97bb59d7ceaebccd316d77c22a68550ccd73422f9755336f9acf8b692f05d1a105961ce335c9b1296072ec80154b3b53144b2db162690259b1d44a1724af11276235e2a41ad588adb11a31575323f296aa8849801ab10d668a9375a6080f13e36d455e27ae133d39f7f4bf35f2c89bd5ac6667a5b4c58c728ac6281f0f6894ed30e15335c2d3d383096f8f95f6d3c296f61db0d27e7ac8d2be23c663868647f3803c3a61c277d1152f018577c684cfd408df165078174cf82c8df0b7030aef8a099fad11be654030e1dd30e17334c2fb0c0c26bc3b56a4cfa528d277c48af47964457a0f2c9fed1a329fa561c9325f932cef074cf39e98f03c8df07901d3bc17263c5f23fcfb80c27b6335cf025dcdc3fd21bd053cbcee71879294c3609918765f23471983d4397d303d16eaf4e075fc6451f3b9cdae22d1375c291a91abd85c317e532afc3482d77e7d31dc8b34b8db0d0a86bb1f5641ed16b682ea8fa9bdbbce0403aa9d8ea5ce1ec9e4ca04b007608217eb929d1f443497b9638f65be96bf7ba263518c3172f3749779041b361b88b1dc53c372734096833013d82bac090cc6cacebd43969d43301e4b343cf20707e331143381a53a13e055c7bc98648f75595ecd2a413752b7a7263f16988fe78ea9ea5872ffae20e69181695ca0d398ef9331d5176290d03231f8cb748d9580f087615129d445856f75ea15faeb848b917bce258f5a6cb2f0d98295a22280eb331755f5ecdd64f3922b08922c4ceb229dd66a707f582d0eee67631a14eb3468cde207f7d52224de790b4e2047173eaf9d9747f8bc6f6cf86bdb1c3e264ef8105cf870cce256682caed5d0601637022ba456862ca446624952a24b125ee04e1153cc2572a517f7c5e4d3ca41926114466a1f0da98f3382911a8d4568952e422d7d05e3b0b851aa20111b8345ac5413b1d2cc60111b8b456c753211cb0a15b17158c4d66822f673c088ed84456cad2e625c902a0f73a52f43490d56bc8cc7a2b44e13a54ec3824569674cf8bebada27a0f00918af321d2f5e48a8916055dd7b7b03042136110bb71cebf440039ce83c2e12a6971bd213651206b742678c01e1e6ea84f3d6636532056d82d51693b1ba67bda6eee17f82d43d53b0a4d90feb07ce124d890ae66ee650e6f40b4baada7c6ef9e0ce9ef355ae4112672aa6c906ac91e19d08e48dc2ae6095a2795193b26a1aa6c1469d06ed7c665a5b1ca663c9bdbf36b90fd9394872cfc0a278005615c477ee79e39a4732e83e3dbb60616fd285dd8ab96db851ceffebab1ed7bc0539130bfd40acecf31c54788b71894ce0a0c9390b0bf7202c83a97079cde49a97b716314c1b7a36a6c9c1d5b5a1e788d2bfc4c9601b9d6f97d790c41c2cfc4374e17701e157af077fa38c055d3d3b17ab0f0ed5d407db7282d507f330e187e99a09c38309df55279c27d9e1118271e9f9bad078d7e0085d68b5322e9da70b92e78e23ab7ef04d351e15a9c954633e16ced158389b6b14ce02ac543f465baa6f9d10a4545f8899dab11a534b1b11ccd41661c28fd308af1f50f86e98f02d1ae1970614be3b26fc788df0a50185ef81093f41233c7d7430e18bb1a2f244ac25a21aea6be5dac06131cd76cfb13b48f1b827a6c5493a2df80937899aedbad699bbdf09afe682e8b517a6d7c93abd44d11340fade98f45374d21b55b1cfa8c129984b30233a556344ef8f0966444b31e1a769848f1b1b4c780146e9f4647a3b09902cc3049f1152702186e34c5d211910471126fc2c5d391650783126fc6c8df0af030a5f8e093f47233c675c30e12bb0c43c5797972a5872e7cc86dba2d0ddf26349cca687666f58b8124ba2f334493439601295604974be2e89f86eadf17b460689cc3e5883eb02acc175618d1a5cabb0786dd5c58bd7121981e2518ac9bf48275fb80f680c2f4888abb1102fc67a92f129355b18a43a15dbfb259841aec134b944a7099750215c158215d86b35a164f4746e23fc18f9541dbd99efdc716fd9e0c76e5e1ae17b89c4c210661cf131109bc95d16e16b65dac7c52c51f8d81671eb74e9c36f2f8ff025abb12aed32fbd046e7757b261a97340df0a4d91733802b120da6b8e570a9f3af0a19a9a02dd2322cdc2bb1e12b7db86b64591d24ec722cecab7461ab49d0ac5a9c04adc034b8baba019c7ca62641d57a0e9ee583ae36acd465487e5062640369865ce848cb156f4c6633abb6ea1a2a9f2f719eab9a7ab290e5ed7ac1b3ca20e777ce7b3fb99b460973e71dbd5e08cf5aaeacd8101267ef6b22f1bec8a2b38166f16b45161f27bea89b186105c67aac85719da68571d694602d8cfd30b3bd3e648b7e0326f8065d7ee0ce14d59db39a26d6fe16c778b8f0e51225d205237631a6d7420ca2f5468cf5360debef03b2de1f137ea346f8115383093f40279ccf70dd944c422698e1daa413cc3757be3919c15fe2820fc42ce4169d850c4aca42d4ee4c6b447fc11b59f17a2785ccbfdf7110fb38084bc25b3549d8675ab0243c585784f74e759b2a57402cab419beab6085fc71dcb602852dcde8eb4a812858e159087e8b8f5e1dc96a4909bfb9edb76cf13be4c25ce93b9a262700bfef21a30bd435391a93f7ab2770ab2bde3625e53fd30ea8762d9f72e6c284ef5b182bbfd1d86b599efd6b499afd9f26183ce1d5f3e2c489bf9705d00dc2dea9e48483fd42330c9f786957c2426f9beb0928fd249e605d7fd91f8cd088425fa8527d88ce068cc6e1e08d9e2d88cf178302c8f6330c90f85957c2c26f97f61251f87497e38ace42d98e447c24a3e1e93fc6858c9276046f75848a33b1153f9f1b02a9fa493cc7beb4f24a37202dfd09331959f0cabf22918e5a742523e1553f9e9b02a9f86497e26ace4d331c9cf86957c0626f9b9b092cfc46ceef990367716a6f20b61553e1bb3b91743dadc3998e097420a3e17ab5d5fae85daf53c0cf42b61419f8f75305f0dd9c1bc402738cdb97d2d19c1dfe3822fc452f0f59029b81513fc4648c11761a9f766d8d4bb184bbdb742a6de2558eabd1d32f52ec520bf1312f26598e077430abe1c4bbdf7c2a6de1558eabd1f32f5aec452ef8390a9771506f9c39090afc6047f1452f03558ea7d1c36f5aed58d4ff4756e23fbb0ba389e49378c56bbc7347d924c5a8cc4895d87a5c5a761d3e27a9d643e17f559322af7c205df80d9e5e721ed721b26f88b90826fc4f2fe9721f3fe4d58ea7d1536f56ec6587c1d92c52d98e06f420abe1513fc6d48c1b76190bf0b0bf9764ce5ef43aa7c0726f8879082efc4ba2d3f86ecb6dc8569fc53488defc634fe39a4c6f7601aff1252e37b318d7f0da9f17d98e0df420abe1f43f17b48140f601aff1152e307b19ee19fb5d0337c08c3f157481cffc370fc1d12c7c35811f74fd822ee110cf4bfb500fa514cedffc2aafd18a636df672dacda8f636a47a221d57e02931c0d2bf9490c48bd5a00f214a676fdb06a3f8d496e1056f23358266f180d97c99fc504370a29f8394c70e390829fc704370929f8054c70d390825fc404370b29f825ccde9a87b5b79731c92dc24a7e0593bc4358c9af62985b86c4fc1a26b85548c1af63825b8714fc065675b749467082aafb4d2cf5da864dbdb774927929de2e4ab0b8f26d5d683cdeed75a1d5cae2ca77b0c4ee1032b1dfc5d2a463d834790f53b9534895dfd709e64e439da3e17757f80013dea516847f8821e91a12c94798e06e21057f8c9947f7b0e6f109067ac75a00fd2926bc472d08ff4c27bc2fcfd6c9c04e30c0f939d670ed590b0dd72f30ad7b85d4fa4bcc447a873591af30c97dc24afe1a93dc37ace46f30c9fdc24afe1693dc3face4efb0d2233d64e9f1bd4e303fa264403282131c51f20336f5353019c109a6be7ec4341e1452e39f308d0787d4f8674ce3212135fe05d37868488d7fc534ce08a9f16f98c6992135fe1dd37858488dffc034ce0aa9f19f5861911db6b0f80b63911392c5df581b7e38451bfe1fac0d3f82ac0dff2f16c1911411fc0f8be028b208f201476d0447534430a20b8d47700c5904a35804c75244b01e16c1716411acaf0b9267ee9d4266ee063ac1bc94191fb2a06b8869bc73488d1b6182278414dc18433131248a2698c693426adc14139c1b5270330cc5e490289a631a4f09a9710b9d605eaf4e0d5bafee80499e1656724b0cc6f490305a61c9372364f2b5c658ec1296451b8cc5cc902cda622c668564d10ed37876488ddb631acf09a971074ce3b92135ee88693c2fa4c69d748279bf76d7901de0ce9821cf0f6bc85d7492b9cb5a5e322a277059eb8ab1c80fc9a21b26784148c1dd7582d3b8b86404277059db114bbd456153af07c662b7902cd23016bb8764d11313bc4748c1bd30c88bc342ee8d41de3324e43e3ac17c9c76af5a18a7ed8bf1d83b2c8f7e188f252179f4c7caa2a521cba2749d603e1359107226720006795958c80331c88521210fc25814856431582338a39f731b59c5eac2113d376e2f86c5d2adbcf65cd18b75cc223e6662e1fcf2285f38cf8f85a7d5175b503f4497ec3c75562493ec5c7b44f0509d607ebb321abf7a5efd890ba0016e5719582959520ba56426267c9f5a103e0c2b1d56852d1db2b0166c69c8166cb64e704fe776753282f9e22744700e26784d48c1c331c86bc3421e81f53fd685ec7f8cc454de37accaa3b0cc58564b9971b42e00be5f4f79324c12ecd73306835d1112f6582c8757d6420e1f87a5e4fab029b913564def17b29a1e8fa9bc21acca3b632a6f0ca9f2049de0beceedfec9084ee0723011637140581693b0027a53c8023a176b231f18b28d3c1963715058165330950f0ea9f254ac8d7c48c836f2348cc5a161594cd73592fb3bb79105ac6e7693528dcc603b471d9674c3f770d1f0ed1c17bb6474c01ab333b032fd885a28d377c112ffc8b0893f1353fba85a507b1626fce85a103e1beb3d6c0ed97b9883093e26a4e0b9584be8d85a6a09cdc3781f570bbc77c5846fa905e1f331033f3eac81e761b5de09216bbd7cacf77062c8dec3024cf04921052fc4209f1c16f222aca57c4ac896f26e98caa7865579772c339e564b99710fac5b727ac86ec962ac89714654b30fe164711bbff92e3f08b982ed276ab655b2ce1b2ab6689ee1fc3e576ce7cbeb72fe443fd8a3db556189d82ed8ab53798dbf96a96d9e83b477f6c46279a62e964755c57281d834778d6c99ac16ff9e21da2c3c36fce005b76532a3eacd29e23807fec67c118b6279c04399e491277e2d7224568a7871b9b1f43c09fcfd607a6092f219df157405734f7b834c612bc5cf7ba12327e836e67b61a4cfc2ec0986e8c629dbf9c6a5b5d6690d2e716ca34ca4b91bdb7cb1c7e99a386dbd6ff1e7b5654f7b63b13c5b17cbf1be5842e66e3ca78a145b2de2e8d7323685e02f89f20afc2a48cc9660313b4717b39d934abf89e2d89212a6764a0d9f72de2f41e2b6148bdbb9bab88df0c56db6489d953266fc6e439dc5a4008bc979ba986c497179e67dc3b77857c76615c59df5989c954376782c785d5229fa57b0d4e33dcbda2bdb9661d4cfd7519f9854de98c5dca3134c28d50ab1f85da08bdf2c42abe24ff715c1f058b9e3002522e812b63ff30e03a88d542dc2627da12ed63b258c35aee97c11173e855521e3a86ae3f823346a27358bb1786dd5c56bf7c02dbb3cf14b6cdb4e27c17d167b7c1e1fe309d312ac493a2fc7785ca4e33133257536756dbe028bf3c5583b25980d281bf68eab86e91cd42282c46c2516b34b74311b83c46c81c89fa5b26de28e31aa5ecb42998b8be25283a68f5282c5e8525d8ca61296be2a55ddc3849689d8c453a8794cf7c1627a992ea6fc5099e44b8ad818c023f63893e92295cb446fa8d0a97137d662ac5661b1ba3c993e416cb8b085b040a44299f32ecf872b12d47eb1326a2f66a558ccaed0c52cb7da9233b95e015e8626eab3d6b4a45c8dc5f14a5d1c8b895bd415e268477e829ddb625e282ca0a42a37d64e1fb126b5e81a8cd3553a4e0beaace7919850780e6b310e57eb384c42cb30de435ae6bca4f2867b6e61e21a472fa9b6537a1d16c36b74319c1130868b8445af4152a42ee2bb2f16df6b75f19d4f68d9e535a87f6b83401946e0badaaa97ddb26d22a895e963558ec5ea7a5daca605b4e3294eaa958996b109365c81c5f5066c8422680a4e156fc45ba3bf7c4d5e6e90f85562f1dba68bdfd8102dc70a51f3f2539d96cb7e1e1eabfcb87783c4693d16a71b83a599df3e278af1045eaa54d74ba1ad29f7c3e2771316bf207d4637aed3649bc9fb95cf78246e1dd656cb710316bf9b75f1ebc3128f0ae63b8429b4dc8869794be2b1bd20a99057a354a0b4bdfdb158dfaa8bf510346fe557f928c1326279d57836affb2bb5edce9a8def1f80e97d9b4eefd1d5f6b86688b9413efa582a8e559dc2568b93ebe2fbbf8952a0e63dc84d587c6ec75acb89f308ef0dcf132dc8724d1b2299b904def25a5e8b313c108be11dc9f491f573033384edf171f0023946159f5ea99c1f38088be39dd8085532e300c9c4b2662546cd637a3016d3bb74319d9e546afa677adc7ca8e25d97e97a0816dbbb75b1ddadda74a51d19a71e333f14a3714fb0f6587cdb52d9fb6a797e68a1f80a6f57d28c331f86c5ef5e5dfcf27c2d81ecaa5e6cecac40aef8a454f24ef45b6c1d1afb5baa660f0ec718dc87f5236ada26755b2dbc8f3f99b9476df3f4e2f77344dac5f71bf3240bb1d82d409c8ec0e2747f90199170719a5aab313a128bd103c9cdd879a1d6bc1c865212fd525bb9f3282cce0feae23c2a546f69adf36eecf8bbbe1c5a28cb209e9bb303c5e6682c360fd5763e9bcfd60a3bac3e36bb8a947647e7d6c8b783c4693316a7ff051b25cb1516e2ce30d6fdd8df3158ac1e0e1eabd845beb1e5fd0a64769f66bce8582c568f60be1d7a3d665559de6c6193ab64ace648fd78afdd7b27489faa66fdc3e3b0783d8a95f541c7c1941d96a2b1c25ba235b1bf2d588c1ed3c5688faa92a2f647df55e958f3f937bc8d1a84c8f11891c7754446a2691c3f3a199b23d7a5a01e38018bcb13c1ecb5bab894a5ac1638118bd193ba186d25b457b33dcac3f7e36a529a9c84a5ce53bad43921c5a983f9c7e609096bc5fb413c64635ba275eb237b3246fe691df91c5f9b3d57e8e9f2ab881911c7dbda89c7006ad6f338058bc533c1caabea5a43a99b653a158bd1b398df46d0510dfd285e32231ba91cfd380de3f09c8ec3c0001c549aae916daada1a8f3a1dd3f8799dc6fd5875a3739ecf66b178cad734d44eabf40c4cd3176abbc5c2eb1eaf46a3c82f676271793199754cd858f714c3c6b9cfc262f91236c212ac9c73dbd2f1bfc6d76ef9cebfd7c95c936c181385ef05af3d83c4f96c2cce2febe2dcd797b25e98d4b9e91c4ccf57747a66f9f484e5935fe76952e764fb7335edc19c8bc5e0555d0cf6ace33e1db4c064739efa260895f3302aaf25e327ac420c52aa7831c3725ced9426e763317b3d99f9c1a02d8bf03d8b9ac7f4022ca66f249337b156ae6be323584ea036aef75590185c88c5e0cde4d7b2f13083d8218c1ff6bcb652682b16bfb7b07e486d781dd5b61fc845582cded6c562175f2c6a7bae6e062aa9f6d2ed622cc6ef24d3eec2ca90ea2c33d5e5c725582cdfd5c5f2f41a59673e2b16baad136955214a9864c7f6828c9a259aa5e5bc0a45cdecfa27f2dd8f785dba4e869427daf27c05e15cf1dcadc3e1f81dedacc7a5583abca74b87e168fb379c6f70f8785c86c5e37dccbb2f716f254f7a28c46b972b664dcb12b491bc6fe78a74765332f17856cd5af29763b1fea0265e656e4991e7bcbc8cb9e33285acae772cb8028be187c9b433f4846bd607a87ef4a291f35f24c2b7d39922a4b83e7a6bc537bcc797c14ff0896456956543ab6aa7a1312d7def390f7fb5931a3ccfe757b5d3f93e6a89257c14754fec167ffa4738d80ad9d88d2c67fe7ddad43c6c31486fbe0e749a2cb7ca84afc350274fbbbe0e6ac7b9ea62a1ebb10c057d1618bbeae3b417b2835c24d248c648c972480fe0a4b7b7987ecc53b5974cd568061f9a8b0caaa13555afc5273cb47a7a1bea184716e60e9deeae00355b1ce9e0dcc40efd2f11052b4f98554eb1c9b703281513066e22551b3eac4f74e10f1102548faf5a710b4041a013d759189dbb80b38cb9ee34a39c0469d4209ac9d3e5534a785caebb73a40d5806f7f6b07c4689856f2fbb4458cb3c1138be15850dd8deaeef61fb9c125b679115cb44ed3f8fb97375aa1d83012cb702213f915a21fc8212a138a6c781972b4a31d53caf74a4db80e9e1740fd39794985a3937aa273d5df492f2445fa74c082c7258acb202d8b6c61eb0af2881b51325da1296c93c77249bc1b56ae681fb9a125c1b0d382e90fbe8f2553395e2699115d096320fda37d4d6169b3db933738974c054cbf25cabb3015c7a730fdcb7d48d59bebe2cd9dad30678a781baf33beaba5365d5b931135936607abcab87e97b4a4c3c68af69b1c092a6c5c7a0edff03259e26c08abc41471b10e574f010fd4889a8a928a5dcb15baf544a22560640aae8e541fa89ba0fa95af2fee521709ac18e0ed09efd3c6c3f53626b28b25fb955cd83fa2d3c38bf50c2e9e4dcccad1a9550ae5bee12d1f9a2bd55292693780b6b9e9ce0b101e0d26e1ec05f29013606853b57937bb3d90068536b0fd06fd4b51fb7b05ce66d136e47e7261dd8d0efa9b221b5f3960d80a6b7f500fd4109881fcda17a7f53d80611ebcaaaba8f4f4ebb8bf4e60b0b2b12f656ea04680344fe4741fc93126277c662e0158bd9ff95223b56ca8eb4ddfdc2766058fa2f4a942d6499a6ec6da3ac311788a11b1b504d0665dbdfa91ab8e1e310d003548d45d8d432fbbd9107ee1fea811b080e6ecb37510ce5f0897c6f11b20df0368131d67f29e1350735aae7fde3fafdd8006a29689dfd47ddfe577d4abf4b9aeb08bbdcf94c6d17634f55b0adbf0790d5239e379a2dcaaf553eefcbc9025c8525cd107efa8a0216a104163f921fbb28a0c8b20aa1144cb84529c1b9f3463c03babe9a36b7d41e6fe041ab476d6d53845340a508dc3b0ac13b1aa3dc690497d832680dc0d5a704b703c8a6b6ce4e726f4605ab01b59529ef9eb5428cdd1da971c0ca1a528283cd8f644f15b201e066d14b68d4c027dcbfa8aae64e9fc1a8e3eea92d993b28a0da7c6efd1be3aecabd388dd3bc513de06e9a5ee301a2f46acbb9f4a4fd35d203cfb5a7d7d0bf2d3da956677ac8119ff4004e8be9818ac0f4a4db32e9812af0f41a9527e981c628d2033560d393f22b4b0fe44c951e786840a733ee3e931e3763969eb03f9dae9d0349d78e6aa72393e1e9095c2dd2912984f46a86e1d26b34b9958ece45a703dfe6748dcf437a8009daf41a75bcd3133873a607765bf75684e8577264f215218debfdffbd5823932fd668c2212c9614dc565153ea5611cf0beeda1c5e53255e6937cc699bf874e816a7c37cb9f4d5dd2a5db57e74da3489691fed904c046bd2463a0b7871353309679695381f07389b9b8433db4a9c5f019c2d4cc2996325ce5e6078710793700eb712e73480b325f5f0f61259c5c462759b53fc35327c6da9f0350699bb552aac71056a8f50fd256c341b4187b33915ce8e00676b93708eb212e73fccc3d9c6249cc3adc4791bc0d9d6249c3956e2bc08e06c6712ce9156e2fc02e06c6f12ce1156e27c05e0ec6012ce6156e25c0c7076340967b695380f03383b998433cb4a9c6b00cece9438db4b9c857244d3bf0d99abbabb45de303a900dc8ec1234e0bb980232d34290eb00c8ae9420bb336fba24d9a92bfe7e9978d7be018fd920ab77a304db83c1b9ace4e7726d863b08c0ed4e09b7034b3c3807c59196a48da8509e000a801d2951b6942847a47e588ecc0e6f0576d82315f046a51ede9754f0ee03f0d228e175aca60e8fcdc4a4831c64d9f80f00b3a74930475a083302cac45e26c1ccb110e6afc0327b9b0473b885307f0730fb980433cb4298df01987d4d824938c14b06f30700b39f4930097be56430bf0430fb9b04d3c61eced70066ba4930475908b319681a0d3009e6680b6136073007d6ed30862bca3d0f91b0c41c4285f27d80721025ca811265a9704ee657e5de0f1da6131d62117fc0062972329fa474e0d23598127953817ca5f098773df8570878f68d17350755d190baccf0b10786105adf162a94df830c3f941265375f86772727dc298c194ef6debe26d6e6824c9d4189b57f5c395a20844d95e399c54ea9592c32fd7a316151c9121d12436ac364f5ff3dc0863353511c24d798b211653a28598751a2dc5153b2267b602c29da5e5468af07569a55b7566a7b2b3507a0cc4e65a5c50f00f34e764ad41620acb4c8da028b40a595436da113c5cae4b5723d263f958acfb1af916bb4d52a5577edaf7d2dd4faa01c1d4ebf390cb7b725e2010fbc4034abf8d314cc6b9255459b01c211a9403872bb43f81040389212615be639cfa8eb44a1827b98aecd4e320f0088a34c5ac146ea594c86f37250778f360927a92b2c19cea701ce3126e12475d426c3f92dc039d6249ca4ee346438878116e538937092ae6823c3b910e0dc2915b346c98d7b92564464bd9d3100e6789360123ad490c1ec0060ee6c124c42572f3298ed00cc0926c12474a82183d906c09c68124c42572f32982d01cc4926c1b471b8ad3980996b124c1be7319b029893eb724ad8539d3893b7a642390fa09c929a3d66327d485330e8d6850adfebccc337d59c4555363a765d057ae3d3528112aeaa9ce5948bd3e416927c4bc60da918c524437908b0cae9f4950df42f5ac256097493c4168eaba4a8a9ce95ef5919b7a3b80559bc0580392315b3e41562a3dbf22a7f38b5bfa5baea7c3cb2282b1f32b4f920cbef622a5ad27a9d0cede5c06a6752a2559b1a6315938ae912ca0ee56511228c0b40f368562a9aedc9ef214706936c278f69c026679b049370510119ccc900e61c9360128e6892c11c0f60ce350926e1882619cc1c00739e493009975593c1cc0530773509a68d5b494d0430e79b04937044930ce6500033cf249884239a6430fb0098f926c1246cb493c1cc063017980493b02349063303c05c4809338dc57724832d0824acdfc91604fe0f0c812caacbb5c17ea719c25294cc65260bd8ea6e26c124acdfc9608e0530774fc5cc101f8f5f0fd65ba4c41d9bee2c0c806f0f4a7c9d01bef805815c98b731a4cdfeed2f02a08b53b1448003ddbe96081c0d10ee69ce4614a3ad5c3d7928a8b9f74a853d8ed8eeec710ab0c7bdcd6e5b120e1193b52ddf0016ba24d5eb7b939f60236cb6934daffd01d02e4d8ddbcce8edc86d2617e02b48d55a35cfd703ba2b907b7990413c0a949ecbccd909c1c62d22a7029485a9b2477e102c3c3c3645b5793a15c47a205317a5aac753dda9cb362f469d04acb23815954c96d882677bd92b7b13b0c7e594f8d4310ddec611e572e308be85c4f637ccf62500bb22150bfd92778ab171baa205c0b9d2249ca3acc4f90b28354b4cc2497a082d19ce1b01ce7d4cc249bae53319ce3301ce5526e11c6925ce8f01ce5293708eb012e79300e76a9370922e4725c3990f70ae310967b695380f0038d79a8433cb4a9c2b00ce75d4fd753ec0314f0c785430fc7cb5f942b54ae739617f7d372aa03b01a0fb520255275b65a7beb74eb663e67e005e1925bcae2cd9cd4863974a133abc7e4f05b52758be526e2254c2c16232a869006a85895009170d9041ed0ea0569a0895b08627837a2318595a6f225442875832a85702a8fb990895d0d9900cea2500ea0613a1128ed39341bd0040dd4809359bc54f10c7fa7fe43a7faf76fee3ff7623c2bb00cbc526015cd9398c4fd1ed278258e524c37a562cdeca67dec111a4c5c578aa44680d1261ffed2111088b17b2446020110ed81e1281b038224b047e7a894a844de6ec9563e3c9c55b813d1f981af7b33a38829ccc53a53bc07790b9fb8ed8e818f916c8e4079be3624eba6b2d59363f09c03cc42498361e507e328079a849306d3ca0fc5000f3309360dae87d7a228079b849306d3ca0bc1cc03cc22498361e505e01601e69124c1b178ced0e601e65124c1b0f28df03c03cda2498361e507e0a80b9d9249836ee637b0e80794c2a964104f1a1b2713fb183406ffd58d380dab8d9d04a00f438d380dab815d67a00748b69406ddc746823007abc69406df4f5db1f003dc1ec95f684252ad94afb9300de1329f1b69078dd7dea4bc5d0b22b9b2f352303d7800a1c038da593ea724e2876b69f707c93ec509486c083ea644a943dd02c9edcb406610d4f36add10ac03dc564b884a52719dc6600eea926c325acf9c9e0b607704f3319ae8da72cb405704f37192e61bf9f0c6e4700f70c73b72fb2d16eaf00edd53353b555c76ce131b2cae7e134d9f9ac4c8468f3561d7d9907f42c736d95703c95cc561b8362e06c4ab43bb0447dab723a744da9d04581559e53973b44d9bf417b0f80f2dc5478dcf19d78b69fdd70f704f8ce4b75f9a8f7ef771d71d7098b755d6c492d936c9ba3d1a07c3c3f15aba2b12194f84daf6ddcf6fa74d034bac0249c5956e27c18e0bcd0249ca4334d6438df0538b79a8433c74a9c9d41d979914938875b897322c079712ada9bee9ef76b9d57794309ce26a5a8c14436a3340264f44b2851f60628d5eaa2296c03e35321954c6dcc31d7f9bc48809d2f6c946faec9ad3825bd76b2c3cf79635141bed4a40d65465be9a8d316d8ec6526e11c6525ce3f81755e6e12cee156e2bc09e0bcc2249c3956e23c0be0bcd2249c23adc4f929c079954938475889f36980f36a9370924ec591e15c00705e63124e3b3d9a0f0438af35096796953857029cd7a56a36334ff4792a1dc9139dcf8bc086ef0542bccdb3992500e8f5f4fdf812393e5f12d78b9fef7c5a01f687244339900a656780f286ba44e96ebe59428f926cd7864e00e5364a94bca05a2400968a59a25299b13946326c7da9b07500d86e3467db151b97c39e0d06386ea244e99e28b24c6c0ab44a5432b3588914b746d8a1eb36e3fa2bbb19daad7eb80e6460875081ed0a6cf4e6542c405467cdbadb102f1323efea25db4f555c0d60de425d4e2e1135f44a59c578d58d7d23ee5d00b65b29b1a9dd9b337da5a5cd36371dc0bbcddc1d956c7483dd06d0de6ecee2ec1156eea83415d4e0779804d3c61d95a60198779a04d3c61d95260298779904d3c61d95a60098779b04d3c61d95760230ef3109a68d5dc80900e6bd26c1b47147a5d100e67d26c1b47147a5b100e6fd26c1b47147a51900e60326c1b47147a55d00cc07eb7604d315c5478b4817fe910db47d02503e948a418e91a91fe420eb89dfcb3c78ff3367b30a423b24dbace26760870fa7c20e476f47836daf013b7c24156bd1b2eae2a439b26c7c00b0bd4729f18dd4d4cdf85e483c8bf32320f8fcce64a16aa1086c9df31d0f224f40df8fb9ced825cc5db3e6cd8d93ae5ebb364294189520311ea34c8c2e0c8ebabbd719ce2770d262b6f0782f76d4b3d97b631040fab839d51461cb93ac9a6a0216b43c41df8c5f290a843c91adcba425e6394c0a59a15468b9381c95afbbb0cf2e9b816aeb4973f748b0717baa8b41967faa2e17fac776376d1ced1c0eacf4693356aae78ba6d61a91fdb9b8d5b468c98ef8ed0f4ad367ead64a6defc74f0719fe599316ae92eed94d5635dd04703e6712ce2c2b71be02703e6f12ce6c2b71ee00cacd174cc2996325ce7100e78b9438bb255dc32f94bd242e2a9bb6274fe69efd16c8f42fa562ca23393fe32c2be78fde01305f3609a68df347ef0198af9804d3460fbad700cc574d8269a307ddeb00e66b26c1b4d183ee4500f3759360dae841f72a80f98649306d1c537a1ec07cd32498367ad0bd0060be65124c1b3de89e0530df3609a68d1e74cf0198ef50c2d4ed06afef584e939fc44ec511c21d4905f70b00f75d93e112160364703f0370df3369848974c916d908d37900e7fb26e1246dd893e17c02e0fcc0249ca4bbcf90e1fc1ae0fcd0249ca41ba1d11dfd0086933f320927e9367d64387701383fa6c4d946e21ceefcbf5a065e20b640b57d03804b9987f0134a84bd936e2ae532ff66fb131da165c2f38eb43dba3c4a04790eb0d34f6d804cd82e25833c0440fe8c7ec315be9974a1005c2c7740e6aeb6eec63fb165ad171552b0643b1f3f09da009f53824df3812d152e8e15428ce7e498682cc0c661953b00de2fead2d329655d533217dcbf4165f62525ca9e022577099f2f80f1639fd6cbcf3d6b5dc25609e093e4de4ceeef5319f7c72f658447f09235b89a00c05fa56235c930d1e44af16a12b26d833a80acfeb539dbabd9586a1e0d507e4389b25d3528554c495ba697458830e68046d3b7a9a8dbe3fdec933deb9d7066942cc3df07acf43b73b7bab2f1a8c7ff4055f47d2a0a00acd9e4150084e5285901b01658e80f94185b3837f3e4a893da457186b04c9eeded6b0ab502f6f7a3391b0d105642640b143e0036f8532ab2726655762e62de2ec7b69f9bf920b0c89fa9e7e7393077e57131733746e5afee0fd618cf17bff22588840b631753c1dc19c0fcc59c85b184d99bac57fe23c8debfa602656682b123bb47eb5f0256f95b2a263c72b6bb098f3280f0f7540c13736b9c225a8e954289594c9d413857ecd0c0cbcf72d16c5fc76cde4a600200fb476a761ad99e76452e00a5e49fe62ccbb6d1533e0f58e25fa9d8302827f57648968d3701787f9bb3f0dac67ecd6490a5ff4985b747f2478612e2243bbaa909c0f9af4938475989f34790d1ff330927e979d66438af0238597d8370929eb64e86f35480336212ce9156e27c1fe08c9a849374ff63329cf7039cf54cc239cc4a9cf300cefa26e1ccb612e74680b381493849976a91e12c06381b52e254031b7c578ff56284a892a56cc08dac433907e06b940a6b4c7ebd10e1e00619ce6b402fa8b1493849775520c3f912c0d9c4249cd956e2fc13e06c6a12ce1c2b710e07ee59cd4cc239dc4a9cbb019ccd29713616028a9d5adc9d1de792c9709139fe370435770b4a5cfd19b6f9b9f25b7397abac16ffe693699542e4140198472b5f504b81436b1e15ec3100f60ea968650e134df2ed65daa211a8785a52e2abce5f2365bd71b26c3f0b9492ad28512a27033e8d3b8df1596f3e37be42b81994593d177e1cc8ccadebd21a6327736ddcddf03290b1db50a26ccfb8832aaf4e8a985ac983f9b6955b98ad1b039b6c4b09328c2f3ae90811992f7a1eb0d176a6a225ad8ce84e2b0056db9e12adda742a39b7986c2bf7e37c0fc0ec60124c1bbd8c3e02303b9a04d3c6fd389f07303b9904d3c6fd38df05303b9b04d3c6fd389f0530bb9804d3c6fd389f0330bb9a04d3c625d04f0198dd4c8269e37e9ccf0098dd4d8269639ffd130073479360da7822c16700660f4a98c9ef7440588f932d74ce07a39a6994183bb3e02e5b84999cce690b0c7af4340d2861462703ba1000ed651a50c24e2519d0f100686fd38012762cc980ee0c80f6310d28e1801c19d04900685fd380120eca91019d0b80f6330d286127930ce87000b4bf69406df4261e0580a69b0694b0614f06740c003ac034a08483746440c701a0032981a6b1b07bc211d6f9647bc23d00f00ea2c4db9629472fee48b39655000786142d2a184805713e8038d89c11a651564e0b970398434c8269e3b470058039d42498364e0bef0b60669804d3c669e1320033d32498364e0baf0630879904d3c669e13500669649306d9c165e0560669b04d3c669e1520033c72498364e0b6f0030879b04d3c669e10301cc119430dbb36416bc8c109ba01166f1065420770713c3234d014958f190811c05408ea204a9d60d8d66dbdbe6a4e920538fa644a81612c40fbd25b39480b02b49b690e02780760c25da9e1ab4ee3a360e6f0ddb452c5e5d9770e8d8c69922ce53011e4b0938d806a6360e7b8c0628c751a20cbe71a48d8e355d40d6dfc9249ca42d4f329c0d00cef126e11c6e25cebb4166dfd9249c3956e2bc02e09c6012ce9156e2fc16e09c6812ce1156e27c1be09c64124e3b5d660b01ce5c9370922e3520c3b905e09c6c12ce2c2b71ee0b704ea1c4093d3df891dee52ce5a75aa55341dc15b436a75242e437ea803afb86375a025b9b6652d61d6da55361536075d34dc2493a5b4e86f327609d334cc239dc4a9c37009cbb988433c74a9c67009c334dc239d24a9c1f029cb34cc239c24a9c8f029cb34dc269e772815d01ce3926e124dd1e850ce7fe00e75c93706659897339c0398f12673789b3d4798983e41c2a195f6d51e4c3eadffa99706e926c3fce1341737e574aacfd7c5897b1f8d9f3e4e7d90951937544b38017c87c4ad49971168c81e4fb242e707e71f7e19e2202e0c114cb6da5d789efdc8da4273aef97897546a4de4ccba344f86703fc7994f89513cea8edce09e7115006e75322544e38ca82cb85d5f21278aa8457ac751123f71121db83f611500e2f48c5886836dbfed6beb504101752420cb6b9b48d4b622e042817a522abd76ce35ec2458564ed80374029ba1b25dae0cbb2b3acdc6fa918d8eaeea601b5717a6e3900ba8769406ddc6f690900bad834a036eeb7b41400ddd334a036eeb7540880ee651a501bf75b2a0240f7360da88d5ef48b00d025a601b571bfa5dd00d0a5a601b571887a7700b4c034a036eeb7b40700ba8c12684be6b989a5f8dc37b26ee60ce6c12ba48497c6c26e5645689b649b55dd0d6cb3a82ec79ae63a9fece3fcab905530d2455d5ba850fe0e501653a25433a5996268b94008d28d2bd93d4aff32c8f8cb533174179ff19319bc23ccf46465ea0fc0525750a2edc36227404a193cfe513f65374d7e1c5b201036f5475261be16605e996a0bd6c3cd17c5015f54bb5c885b4d5bd6f6a2423b05cc829650a2f50ed31d95fa461559addf0358e63e94f87a82aa6abaa8aae60b416b8540d8889a2f547367ea8b98eba562eff9b0fd00e055a9685615b264d6cadbb80fce22d00e28a544a93ca6aa2f4517ca6a898bca66a4c7a5902dbbf91758e8ea54f4ab541b8037a08a7c07f16e7f0e694700bc6b52d119c0fa557e98a44ebd6438cf0038d79a849374888f0ce7a300e73a937092fa4893e1fc18e0dcd7249ca4cb75c870ee081af76526e1245d4c46867332c0599e0a9cc9af1cb57146b413c8ec1526e124dd4e9d0ce7bfccc3596912cee156e2bc03e05c6f12ce1c2b715e0270ee6712ce9156e2fc0ae0dc6012ce1156e27c15e0dc68124e3bcf96db0be0dcdf249cd956e23c1ce03cc0249c767ae2ad053837a566caa30efc48c87a413f037c0752e2534e383ce0e5c21295ec35f215fbc6e02300de4194f07ab3d8c1e2e5629e7d8d980ddadea78b27807efac1949093dba75ed5e46420c916219e0b7ae8879802d2c6d59c470190879a0292d0e1860ce46300e461a680241ccb2403f9200079b8292009571e9181ec032a9b234c0149e8894406f2736091479a0292b07f4306321358e451a680245c0347063203803cda1490849e4764206700909b4d0149b8b29d0ce45800f2184a90c136b4b0f158d2534075732c25ca8e2c8863e1702bcfc51e06601e67124c1bcfc5ce0230b79804d3c603a2860298c79b04d3c64d803200cc134c82696305d407c03cd12498369e8b3d00c03cc92498369e8bdd06c03cd92498369e8bdd1bc03cc52498369e8b9d0d609e6a124c1bd7038d04304fabdbcea42b8afb07934e4b0ca142f92940793a254a3e273e456c7dca559c216db3c4f998efdac93f238347b6889a7b2a287867d4a51dc6ce7c13da21d9ce09bf023b3c93126577e6dfa533f965d2844d22b265d21b808d9e4509566dc79bc9b6bfed78eb03eb3c9b12a2dff945edede16d169d27c0965553afdbd878bf0b403e8712b2ff5c041728df9282574c93b523ef23580e2dd6065458878291f77353514925d7f2b4b147340c94a5e751a20cb79b07215ab26aaa0bb0d2f3ebd64a6d6fd22f00e5e805a92c474b1c25163a3f963a44fca71aa4cc3793ac853a0258e885d43da525a26f9e72d76bb292f36650726ea5cfdecb9cdb42b6caa1b0ceb1bc42619ffce423b7353a55fc4adce924cbdedd01ca8b5291bdabaf84fc9ba1105640649ba1fc0d4acd8b533140979c83c2302b473b1f02302f3109a68da39dcf0098979a04d3467f8fdb01cccb4c8269a3bfc7fd00e6e526c1b4d1dfe31600f30a9360dae8ef712b8079a549306df4f7d806605e65124c1bfd3d6e0630af3609a68d43c6570398d79804d3c6d1cd1b00cc6b296106dfaf90b00a225b6d7e11c0799d493849cfc922c3f914c079bd4938b3adc4f90dc07983493873acc439000c0e6f330927a9bb3619cef900e78d9438d546277c59d57a307591127705327cb39887efa6544ca661d6e8a94edc5c275bb7b62bb0c49b2951b6736ee639377c9aa258885ae3bcbe929589298b12b63f70a7b1cf221b008bbc8512630fe67921b91e1d4b1c75cb1d750a050fee803891f1dd64f804468123809795769f34b037807b6b2a4a4b3e5a99f2b94932e7ae1d4153e8364a7c610e08273df68ecc41761f80f67653d192564c6468af0699fe0eea8a29511daf624aead57159846a5d06a8dfefa4c498a6c118ec6c41c2490db25386ee0505c05de616008473ec6405c007a000b89b126d4f81d63bbaa9d0f9df6d48150951ca1b7995488049d2f5c6153fd5b9163b628b2c6c56350580ef31bb6820746b202b1a068192f7de54546098c767ae2810ca682bb0dba92ab08341097b1f25c6aeccef59072d71b2f349192b96bdacb5a26fc5c5f0f0edf3b1eb06b2fefda9197fcada8ebc3df70336f9402a6afdf89233997a9fd07f89acd6ff0da07d9012ad9af18403296a54ca1ba7b27be0a427c8e60f51c2ecae81597d83ca5eb07301d8ff5182558b0eb3c588fd5a562eaa9c942e3a24f348de0164f5872921b6011057cbc00b849dda7e80f85660878fa46222045f5504fd436c749c9d0f503e4adf24e2154c91c8c8b902698598082915a3f5366e15d011e07b8c125faf009698e784e936d2e73aff52e566396d4fe84eaa9ed021a0bc7c9c12716716bbee6d9d989a5b9930cbdbe85dd703f4d09fa0045af395468463a264f57a14607d92126bf0c31809ad94ec509c8620db3f6512ce5156e2fc1e54544f9b849374473a329c57029ccf988433c74a9cc7039ccf9a8473a49538df01389f3309e7082b71de03703e6f124ed2d51d643867029c2f988433db4a9c9500e78b26e1ccb2126711c0f9522a86e732c5dfee95bb34e6317720d9de61e25500e1cb94087710b1291602b68ff1a4d600dd2ba918d94ccec5dbc623ee6682fef8ab75893276c4c8c60d012e057df1d752552616ca0c5dcc36c8f230055316df5321fc1fc8d8af53226c071016576dccab7eb67de6e70980f10d4a8cf18e87dbfb21b5bd01da37538b3688bf3c215ab25abd15283fdf32152d692d4f86f64260b56fa7a26acadaee66d33301c27728117aeb8cea60552699c3eb4080efddd4e0cbf1b5376d5ed4da1e948def51e2539e6fc9f9726459e9cd713db0c5f74d826963afe77600f3039360dab80ddab500e68726c1b4711bb4eb00cc8f4c8269e33668e703981f9b04d3c66dd0ae01303f3109a68d8e5ae702989f9a04d3c66dd0ce03303f3309a68d1b413f06607e6e124c1b37827e1cc0fc8212a672700de25e40689d6453b8434097f24bd380125a2819d04c00f42bd38012f686c880f60240bf360d28618f880c685f00f41bd380128e249101ed0f807e6b1a50c2d12432a00301d0ef4c036aa3a3565700f47bd38012f690c8807603407f300d28e1c81219d03400f447d380128e2e9101ed0980fe4409348d85ddba87b000209bc93c13e0fd99126fb073af099b4f64a70ad607ce87bf50a2eccf6217ad2aaf39e8061bc40bc4461f904900f6af94b01b3a37f345a095ce0b84aed964a8b8178b42f51b252a7eda252c17b39cbbd87d3cc8e0911d66db1ec0fb3d95f0866d07f0da01787f50c20bb77914e1e00759a6fe05d4db7f52a255bec5c3aa2a9a2296f28d79c83c911e0616fa97b9166ae3a6a60d400dfd3725dae07b23d838c1d11964f87f4cc239ca4a9c5180f35f93700eb712e79da01cfdcf249c3956e2bc0ce0e4076e188373a49538bf01382326e11c6125ce3701cea8493849777f27c3b90ce0ac6712ce6c2b711e0b70d6370927a9db1719ce750067034a9c2d99b7d86a7bd93d7b3d80d790129eae7ba95fbc9aeb0859cdd689aea6bb4e9874e2e24b2ab47b80ee65234ab46a174ebeb87ab21863e7dbe517cb811077efcd6221d0dd261f9eee56ce6cded36308b0dec6a92849b17234fe1461c2290b329ca7812e67139370927aca93e1bc0de06c6a124ed22da5c870be097036330927e9ee8664385b83eaa9b9493849f7de24c3391ee06c4189b38706a7be21b5abc3a8400453267e77a74308e1929d9af936c8fa3b980c97b09d4a06f71f00b7a5c97009bdedc8e0fe07e0b632192ea1e71d19dc0828735b9b0c9770350819dc7a006e1b9346a9465bb916a41d2808da9a8473949538ff621ece7626e11c6e25ce5b00cef626e1ccb112e70500670793708eb412e7e700674793708eb012e70b00672793700eb312e76e0067679370665b89f36080b38b493849776522c3b90fc0d99512e700e63fa88ccf4415393cf88219154f6fcb5f18180c6aa2f3af32e1644e3a5675789408f874d06fea4609bc3d4bbc0b496cc94a06926cabf4c1c072bb9b02d2c63de7d300c81d4d014938de4406f21800b2872920094745c9408e0420d34c014958bb9381fc0d80ec690a48c2d14e3290a70390bd2841f6f3359396b1f8c53441b64727434db6ec260f34907a53a2cef4a1ae4441e22729c43ba3a5a87dba9caa7d3a18e0ef43895fed9297ecbc3fa1ef29d9acffc96054bfaf49300937742383792a80d9cf249836faa31c0e60f637092661954506f3480033dd2498848d7f32989b01cc0126c124ec9292c13c06c01c68124cc24e0019cc6301cc4126c124ec9a92c13c0ec01c6c124cc29d9bc8606e01308798049370d34b3298c703984329617667dec21c7e26171f34992e36699beafc5d22301639f15d2b04f34564761fb15bc03cb0199460bb09b0b39c170ac59a26b82dd112b64a40e4bbe1153aff76854e75aec5ce5b457458c976c06b04b06652624d03f63a51043f91f1edda263bffe221f00565fcef4201b39c2d940bca8aacb6da8300de619478831dc96be3794ae78092352b15ab496b76a4a48ddb69dd05ac343b152d006ca43fd64a475a7922dd5ec04e734c8269e389747b0398c34d82696309ba18c01c61124c1b4fa4db13c01c69124c1b4fa49b0d608e3209a68d27d2cd0130479b04d3c613e9660298634c8269e38974b300ccb126c1b4f144ba1500e6389360da78225d0980b91325cc8642408558c759c9ca2df466e243510ad5f8548c18c1218d604752103685c806e4ee0496b83325deb6cc1b905b2f0688f91e4ecbc4c0718a36b6263b8ca214d8e884ba1c768b3dd783b09f4386f22f608f132951f60c9ddd4937c622cbf03b019fb949a603b6f1909f9d01e0dc542cfa825372d83c12f9940619ce01a06c9d4c89b315535b620ef3d9adcd9b622e03e5e91473aa26c21e1059d5d40864eca9a9de5f74fb3e60ea7c60a5d328d1b60665e63a5f0999826c4e564a0e0600a7a7229b27d73bb7713c7304a87066a4c2a5a62613bf84831e6499fc6c00761753c1da78f8cf6900ec4c53c1121605646077016067990a9670d4890cec380076b6a9606d5c90380a809d632a581b5ba8fd00d8b9a6822574b921037b02003bcf54b0848e6164608f0060773515ac8dee8b4b01d8f9a6822574182303bb0480cd33e300977c3122c03bbacb85b8d5b42d59b2c38173c1d8557e2a465187cb69be528744ca26f8c82cf34860990bcc195eb1d18f642140b9d0a4b31a48cfb3235bf1711d18f85b64124ed203d8c870be0c70ee66124ed2e301c970b600d5ceee26e1243da9960ce74880730ffa4589c934901632774a8f8bcaa66d1ca553616500ebe2ba5c91ec9f3cb1b17e1f0860ee69124c1bfd44a702987b9904d3c69572bd01ccbd4d8269e34ab97e00e6129360dab852ae2b80b9d4249836ae94eb0660169804d3c69572df81fed0329360dae859d2095866a149306d5c29f721b0cc229360dab852ee2301b351039ff0a971c273452f9af7a30b9977eef650368d158bee200751e8dccf121316156ca98363b1f35fb014d8cbf94ff73c22cead9fc236b075e22997572464af767ee59a95b3cc41ce2bc5dc209a48834817a3aa131de6bc9b3a9f158bd037b23ce66e0333d7f95b6d62542990a447da395fcc739ef13553c52204be55cc4a5626621c7bee787aa4b1e054ccd64b021c60bad4753d73f7da9d21c7734b9c381730b7c39c2e70cf936313e99116e04ead8d9921267aca85562dc5ef9ed7e230f176b90851e9e27f274bf30e3fa16391189c2fad4a51bef50d7f9f9b4144f849aa58cf16c40a9cdf0bc435bf4ab70c7eae41843bccb9135343aba6a486cadd8657cb3bf5bc7a993cdd134b5bce1337a2cfeda5b566b1d5c5c8cd64fcfbe56277a662217546b531ad3e7eb8f5374f902a19fc00f9ed3afe2b78bacb641766da31d2ccf9d70227e55de1c54e562e93667ce4ea286bf0ff00de24ee8e6df80400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: + - _maxEventsPerSecond: 5 + _name: RPC_PositionPlayers + _parameters: + - _name: __0_position__param + _type: 14 + - _name: __0_rotation__param + _type: 16 + - _maxEventsPerSecond: 5 + _name: RPC_TeleportConfirmation + _parameters: [] + - _maxEventsPerSecond: 5 + _name: RPC_Cleanup + _parameters: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/c23e7e9bbdcab5d46aa1459f4e7e8392.asset.meta b/Assets/SerializedUdonPrograms/c23e7e9bbdcab5d46aa1459f4e7e8392.asset.meta new file mode 100644 index 0000000..c350d1b --- /dev/null +++ b/Assets/SerializedUdonPrograms/c23e7e9bbdcab5d46aa1459f4e7e8392.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fa0c1f0a5bd6a04449708edacb488a2a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/c2ab708fc88b7d5479ee17a6527522c0.asset b/Assets/SerializedUdonPrograms/c2ab708fc88b7d5479ee17a6527522c0.asset new file mode 100644 index 0000000..f9e8c5d --- /dev/null +++ b/Assets/SerializedUdonPrograms/c2ab708fc88b7d5479ee17a6527522c0.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: c2ab708fc88b7d5479ee17a6527522c0 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c1547d7f0e7e25aa07881123c684208d6528a4bd142a0022d8408a424904628d4ddddbdd4dddddddddda9ebd3f6a93cb56f677626f7ecde39f7debd9bb3ccf07ee55796ddbb7be6cc7fced8196b90c39cff62439cbf16b3056c321bc616b162b696ad71fe35d9b956387fdc3bf57c3eab72ae2b9dbf0b9ddf86b0ac145ff2ff06c4ba387fcf74eeaa598df3652d2b72ae65e2f785acc4f9f74ce7db12e78e3f2d75fe2f71de8a35723e5ac4a6b0796c2eeb1ceb9842c462f151b57c16e3f18a3573fe9ec43638bf9608a5782039e2a7cece5f0b9d5faac56f158ed2eabd256c0f11ad0ae7b722e79b2a56eec85c212436633b32f10fe65e3acb6b1779ede4fcdf5cfebba1fc7733f96ff87e6379ed9ae6fbdb80ef9a837f73421b937cdfcdbdc6a638d726cef54770cfbffd56bed7dd95d760551259dbca6b4f79cd9232ff9386fe4de5b5578af82693d11bc84a87593379ed2baf7da4be3f65187e7f9751ec7c208fb39c0af4e90bc26e0e7ee7cffa8588bb4ac769be749ce6a66383b365fa6d92ef0f90d781f29a2d653befb49f229f0d92d71e29f41aec7ec7c6b0b8cd3a6136ac94f743e475a8bc0e93bacd90bafe0ceec3eaa2d23447ca9c2ec3f845f35cbdcf7fffafbccf95d7e1bef4ca93effd2aef47a4a94f3af6a7749a29c3f80ddc3b1c1b2d4f224ba5fb4ebe74df497e7bb2cbb1d15dbef800fbd3cacd97f27ecf201eb37cf198e5ead238dbfb5e4a1d94fc9152ce6c29f70f70cfe59e1e306e8de477b7c9fb512c75d9d6398ddfc6ba729a29d6dbb9e134e9e03e6f328e796d794c0a3d55dacef1a5ed1c29b75cca55f1dfdebd8f29cebd801cfefdff7c72e7fae4ce9572551931224d3d55bc7694d749f23a91d5e5e31c55168c97d70932cc79cc5b06cc93bfef10ffb693ca93e9724b9646937d69dd43863b3f854cf5bd2a8f9aa7f9be7a676a8af793c99826af2dd20cb385bc4e0f11664bd7169afde8b385ed52c89ce1f26d56037470e434df5fdecf94d79de47596e4bfd067070bd3b08354bacc96ba3090068e2e2ddacafb39f23ad7ab0b9be7d3e9cffad329b6b394f917b8e7d705f2f9dfe09eeb3adf0da7c56352e67c79ddd9a7f3023a9dd942f7bbd6ad806da4f35d32fb2a70e3d732d795ddb2403e5fe4d36d5a5cef6653c0b74a8f74f2c32e92c5221fe3455207c57657df7bff807b7e2d88871793fab752b6d50d3ce7dffe0beef9ef8bd3d475779668b35cce2e20ec5d64d8b2fc6f75b27c77094bcc7bba6ff915e823fecde5bd27bf5bca12eb31f59e13b7060cdcf3df774b336e7b68f473c26d3d21c9b77b326ff933256e0f4d5f92cf96497d7665debc25d353f40be437b172f96cb97bdf46e95228bf017111ff76f4db4ad5a72be4b594e9ebd962c041e647a7b7581776f7f5f2595192b08ae53b2b7df12e88cb69d945eaaeca3155970d42dee5cfcae4b5425e557dbc36feee70d5d6538cd648dd76679eb299ad06cff97589b48b18b8e7ffde2b2ebba3d2716f9faebaf4acf2c55d570624b3b3ada51e4b9937bf2f7519b7794dbe57edca1ca1ea38680bc9ecb9565ed7c9eb3e52fe1e5e4ee23e55d99b2aac64f1dcd79559d7fede4f5e555d3b11c8ee2475da33ae4b5d9b6c03f88ddf4f90d7f5cc539724d5e500796d9d223e9dc17bfc7a6088f827fbad89bc1e22e3b68c79fb24cb5c5b68775f125987ba9c3acbf2841de67eb3f573f2fe70f7f7762a8f1d01e2c4c3581e67dd76a9fced48f91b4c77592ec456806707cb6745f167421effed286ffa3468e0fbfd682043f7fb314007ddefc7cae70d5ddddbab72ee385f5cd633afae2b98a71c60c727c635b6c21776a300697982fcb6d89796c56ebab43f3a89ac13f569d9e16c797f922f2d559daad21294e375f13f45fe560ad24db28aadd4a4ef2ac0a144fe762a9296eaf7d3805cddefa7031d74bf9fe14dcb0eca0f72269296507f98966725c635b6d217b6f259264bcb73e45571d7958de7caeb2029b7491a72cf93d7bd92c8ede693db340db917c8ebf949e45e88e89b4978ea5be54b29635e5be7f78edd76aa4922eb22a6b5f5ce87cbfb8dcc6beb1733afad837abbce3e2e91bfad8ea7bf60c19f95b3445baf0076a2d2e452f00eb455f5fb6540aeeef7cb810ebadfaf601e5beffc917c7e25d3db3ad41fdafa55897155edc6bab0559d9b2c2daff671567cd7306fbb648d9b3e5d947eaadd73184b5e375ee3ca1fa9da81d74a796ba58ecdc13dbf56fac2ad94e1dee6cae9aafc61ade4f3e7e473598eb3eb6478b3e5fdf5f2bd5f7cefdde0de8fea2eef6ff2f1bfd9672b55717bab8bcb8de03718b76ae66d93dc229fd780b4aa06cf605aa936572aaeb7caeb6d3e7e7b4b792dc03d7fef8eb8fea396cb67b7cbeb01f1dfda7ee94bdf56408f3bf5b62274056916b88da4e27c578a380729936a99b74caa75eda05bb23c719f7c674892771e90d707e5f57e297f1df3f62f54bbfb2179bf8fef77d91e1765b6ea7f3c04f450b2f9372d93e8a3e2ff88bc3e2aaf0fcb7054fbf867708fd51199b66333fd4df623631bbcf623ee9d74e8fe14f3da2268676ae52a1f89622fdb17b17d7d0cf64dc260509a612589576c7fe6ede3abbecee3f27e3f99aed257153bd0f7beca574fc8fb037cef1fec7bff60f9fe93f2fe20effbec292087df3f1d8f5b4cf5c79e01cf0e92cf9e8df3e929cbd3d821deb0992c7febfa77aa0f77a8d4a135f80e3250bf6f25ef0ff3ca8d1d2e7f6f03eef9f5089fdcc37cac8ef0c93dd2a7eff3f2aafaf12fc6e338e629f00de0c95ef0ca4c6ad34f4b1947c96fda827bc7a67b266bffab6fe53bb163a48c76e09ecb7848a6c96bb8ac98ea1fb5f1c93c565e8f93bf6f0dee1dd959d949f47b46be7bbc2f6ec7cb6f8bd3f856f58f4ef4c5ed4429e37c376e59372591f5b2bcbee24b4365b35cdec99a7455fda517e4fd495287f6e0ded1a1971ae37d95e96dfb04dff71dbcdff756fe54953eaffb743b85797d556fcaeb5bb84db2b77dba9f1a7fa74ebf377cfaa97e9bd2fb34a96f47a0877aceafa7336f1da5c6ecde91f767f87e3f43feae1b0b4f9647549a9f29e57502f79cdf4657566fc5e33df77eacaa97df97d77759f2325ad9f659cc5bbf9ce586d3a7992bb78f2afb3f4853ee875ef9daf452e9743690f51188bf7af631788fdf7f1a973556f9233f4953af64cc3749a69540160ff71c20f33379fd5c5ebf481dbf64fac6ce8dcb8ec93e75ec3c5f9a9fe7a645dfabc037fc0ada457d5559fda5ef9d73c0bbb0bdddcdfbbc413a6d11652b17f86ce50257bf7ef9ae2efd1e92ef7fed0beb6a19966a1b7f039ef37be57fbdc6ababb8e7bf276b8b7c9522dd557ebed0a7fb85aeeefd55baa87952dfc9ebf75eddebda474ae783e23ab55bea0d8b75003aa9f6592a3d7f70650d5d2eef7f94fac9f91ffdd5584ebaf156e5f645be785f24e57ee9ca1da0ca6335c74bcd9d82f1d5c53f4c9ab4f7e9783178ff1716f701c077e5fc9ed8a5f2f7aee09e5f2f89cb88295fc746f06ca3bc5e26bfdf06dc3b3c06fceec6253b2b605c7ef5c9bf9c79fb98d2e7c17e8ff3da4eb5c57fd3d88baa2faff0a5db15ae9ed91b5d1903d55c2d399786a9b9212a9fabb6a24abf3fc13d927e7571b81670bb56c607fac2d2e1a2ca8c2be5f7ca9720e3c7fef6fddec017ffab7cdfa9f158e6951fb8fcfdc7cba7ae3cf673bacafb5c9593b1984fcf86f13086a97e400337ad06a976b9e42aca02e8474cb36c88491f7b4cf967c3e4bd647d33a957ec3ae61d3fbfce8dcf60398774b06419936dab980a4fd7d691ed86589314716cc1b473af063f247f6fe9fe3e44f9b75ba52957f58554ff44c72e4d1d93b26ba3d77f889cff3144fa2d62aa5fa0da792a9fdcc4bce5ec4d69e8db2a85be1dbcd7d8f5f1f763ed99b79c55efa8eb8dcc5bce2a7fde0d40c60d69ea918c9baa9fa54f51ccda96f1dd610878a6de51617772f90e95bec9a1aa3dacf2c18f29ec4285770bf394d76a5cbdeeb99c5f56975753c84dda8e923244f99029afae7a3b1b7697fb3c47d997aadf949da9b6d86d3e3b533ee3347d5e31d9868bdd0ae2a06ca63b784757a6f7f0d99c2e9e13e5bbb7336ffd77bb1bcf9c8d329eaaacff485e27a448ef9e3ef977485db605f7fc77cd7c8a5896bcf6f2caf0f4add55c8b3be3dfa7531fc5b605dff177547f66024b3d769fcc4efa30ed18129f16edb14535b706e3d69769c70c86cf0828a71ff38c29c40630cf9842acbffc568d29a872fe2e2f87d84079bd3b1e5eec2ef04c335e904a37ed333566700ff3dae13d6efcf3b25dfdf3d47cbe8f801d240b4bbe17bb17bca7c2ba0f3c5365fcfd209ef78167fcfa808c6f4f70efe836e23a9fdc0799a7ff25c2e6d787e4f32c70cfbf93f3b0630fcbb8ffe493f728d0e96119a69a7b37c817c6232cee17e17375d4dca48fc0efcd819eea999201c7f5d6822b7fde4ba641b137cc9469902cdfc8b510b9caa67abbf1cb9773b6f227786d8bd5240f4b2cbce27d63354fe22b296f959427fd6031b9b622a6d656a8b19ac798b7bc567d87646dc0143ad5d565a9ded3c54785756d06df3ecebc7e6ce5ef7e8279f3d8132ea391c7bbf11ba9ea2815bfeb93875d2757ae01893dc9bc63046a2c200fc8e3bff7c6656ac379ca179fa77ce1ca3527497de3b2de89a972f419f94d1f70cfaf4fc7e31ccb97d767c1b3a7e5f539f9bd5a4ba1f2f2f3e0dde7c1bbfc2a7df875e3812fb8fcc71cef93adbe7b5186d10fdcf3ab5ae7f192fc5d95e9aa2c7b19e8f01278c6afafc86f06807b4787d1d2ff31a61809eb55e66da7beea0bf335f97b36b8e771ebe27d3ff6ba7c6f20b8578ca19c413e397ebdde0071943e6731969ccc5ed5b84b0eb8e7e921c7e547295ff907e9c9d33e53fa8d92d7377ddc949ffd850c64fb7cd7c2071d54c6a7528fb79877fce42d97f358d5defd485e3f49118692375a5ea5bf24f6b6943f18dcf3eb3bcc936f62d2af5f977fde659eba50dc3b7a6d77b44fce7b3e396a4eb64adbf7e5ef437cdf29bffd27f2f7a16eda6f77be373e29e3ad7ba6dab1aa8cf99079cb18e9b38f7d10971d1b2baf1f81672a4f7dccf4650cd02df60978975f3f65de32e65397dfb81f7db2d5779b98b78c916b9aeaf2fd674c5fc67c0e74f80c3ce3d72f98b78cf9c2d5617b99cfc63d8584f525f3e6952f7d617ec5bc658cace3c7edef7d3ff635f396315f03c650ce209f1cbf5edf80384a5fbaf025262b6354bf2207dc8332667be54ffc203d79da30d43a83cecc3b7f49b5adbe65de7afe5b377e3bd4b83a8c5776b4bdbceee893abaedf316fdf48a5c3f7808bf4e3c7c68167caa7bf037836415ec7b3baf6d478358f4da543aa35df23d27c2f1ddfc0c40cb8cbf57ab1c9207e2aeefcfa03f38e6dfe00e20cfb4b1ed98d63c2ef388395b04256c97244679e5b6ebadb08a82f536f20c0453711ab5218df4980075bc336389f96e856f12f127b04d438c4f2b4abf8bb0a7f940a7db2f8bbd079a34c081dd6202188bb1382e0ca953b7f4ac01604d5cef3e9620703be094199f3cb3036dbb9f2af963bfdea25ce1faf94c54eb0e5acd6b92b70feae14f2963b6a27be992a4a7cbb02ff370b1c99ee6e0a15ce1305b4d2b92f171a2e147faf139a9608ed673acf6ac4de0e6bd84a36c9b9ae17a125c6bdcaf9b72ecc02894cafa37e5305ecb9bb75834aa6294e6cb8f639c2a6ff7f8a6c8e14e1e89b0c93f9b0518ee8b11e9b9012ff9fa15bc8f0c198995286f0aa39160d9fe5b11c315eb3208160f03826c6506fdf2eef512c3f695cf464787277133188a7f0991fbc99f540c5c26b1a7ba33682e5f0a112e1ef4d16b56460b9bc6c5163068942e3c68d72b9a27efc311d7e319cb53042fcee7b65e2bde009d044547ede0410eeb402a7549b0f2acf4542f972a19a3f32f39d377849398c4d13955e8d10be81ed22aabf5575bf27a4682e0fbea94894c42a3755c4b06469a04b16d1da28d82cb902dbf82779c234ab8b453c6172441bad4b12f3c5c2120dac46b295a532d8374757ee3be6bc6bfff8beefcf9fbd34fab0eef7dd3e6f4dc1295f6f6aac4fa716229d32091d4ba986ba946a1175064a5d63244ba79675f18aa713ff4fcfb01562eba974c00836d2116c19b5ad4f92f99bb7aad664c0900f970ff617427a805b2146985a050c61630dc25c8eb08d462bd6b8b94f2bae1022b9892e715a6d9eea3933e3e6feb0ce3e048d51e36e97b4760d6ada4d75f4c4c48ae5a4f454af71a1d33d98e5fc56e8bc5f229aa0fcf97c4762a113369737518410ef697abf484e96cfc018ea27aba5da5e50ed0bfac06135c38837d310cfe5f6da416306a28cf36786767866688e65b38e61b3590b4c72a7b0925b62923b8795dc0a93dc25ace4d6ba6c23c6829646926de2ce16f5af49ceb7ab9cc8ac133de85ae77b9d73267976e99a7676d94664972ca6731905d308cb265be9d28e3feca653d29f74dbe049d70613dc3da4e0b698b5f5086b6ded749279c9cd679824f42bb46546535cfad618909e2181b4c704678514dc0113dc2ba4e08e98e0de210577d209e6c5131fa7095be877d609e7e5755f96d86afed7f92f41782b5c78174cf37e1acd97eed42090e65db12cd33f6c96d906933c20ace46e1ac939a2503984455bf4eb7df3d3c5d6be256c9ed3eadb8bb94e5515ee5ae150e51a29e7ec02e75a2ab4e0cfb916a97dfac92b91ec3a3ea04b2dcac6a92cfd1106fa58f0f18e06a232e38e986c313b6791f3dc1d4b982a52a04c84344cab0d0f017b5fb198c3f8aec5b522b51b231dfec12274b3d860957277aca419a22969ded21563494a9a1e58961d1a36cb6eab93ccb3ec308dade6725be543a92d44799e10ce603c9c9ebaa24154defb6ed6a2c1ed1a7279a5c273e8ca9bcbf8c6dbfb08535ded18f03a693805ce3b554e1825d2c8c314067c4a590f5d038561dddbe1223b8c4f233b50c60acb00593a4be26d2b3e1f2ca125c6ebce054e9771325b26b2e1dee231a7e4a66e9978b58cedeb5cd5c85790965b2f9d36bc6bc2479c533657dae3827b6382f3430aee83e5f19161f3785f9d645edaf05951615b58fd30b5478755bb3f56a28ed194a87fc58295a80330e16335c2ef6b104c78b64e3837d6edd2b19124563d1013bcbd2e8ff1a4992cdc9159ceff6b9d2fb8f3ab50e4fe2c5119c64b832c27af9739ffe215f610f0fe5ae70d77a439889e8330a31817d6280663e9b68326dd7e09986e4330e1e335c267340c267c2896763bead28e97f5bcdee0cd9255b26ef396865962cc3f4b4cf3a8156eb5629172d5225db3d87e4e0d738073e5636159a21e2817bf65897328aa44591b244d8761fa4fd0e9df02e83f1f681824c41cacdc9aa829b76201cbad5c9d70def099c490860f9f6714bce1331cc33645878d37f4a63acd17de72ad15ef2f14065052d7562eaea70a324fa3578ef077ac619bb341c67b0b7c524cb5f877bc89c2c38e0fc5866978f1fe84bfe1a5fed337bca631def0ca63a91b5ef5a13dd6c01a8115aad335856a2c48a19a8fe58519585e9899515e18a9b339e10aabdcac3687e7a8054236cf79e11bfc7ceff886fedebff0d7e5a76159f5a5e360b1deb95a9c33e492abe685291f1d59010e1472e18b2ca1cf13b3449e8852732c5f8cc26aedd99a5afbb6c6c16aedd13a9315bed0aacd6ab253848428cc768ece6c85d376541a895f9f7af6147327ab45a15a2c0b55b7e8ee2916ca57896ab3c479ce0b5ef8fb60b1209eb797a609de15823c8f5fa1e8f762463e571879d4f1c40c7d0c5601ccd35400815ad563b12c345f9385fe0a9885b6c3d4de39acdadb636a2fd0a8bd7f93606a8fc3842fd4089fdd3498f01d74c279c1cc67cd84e9218ec704f3d320129a9bdc33a0fa0945be9ee20ad15750fdbf62f16483f377b9f3ac4888c812f360d5907f102d77c4d82ed6b06d1b90ed040cc12e21d94ed409e6e6b96b3a82930c814dd209e6edafdd18d2fee26718046f7f4dc6b02fd160df1810fb142c9b2f0d9bcda76292f7082b791a2679cfb092a763929785953c43279927e2724d22f2592f4112712626bc5023bc20a0f09db08cb9425736f563bca31f6fa4badda7b85fa390950a2955cebfd7c93ab7d8e31fe13e8f32d9690e92cf67617a16e9f47497ddf0894dbc4d51287c683cc4796c75a0506763e88b35e88f0f887e0e26bc4423fccb80c2e762bc4a75bcbaa448d762311f26fe74b8f33408c77998362b75daf0db78ba0509673e86749506e9f92d8221dd198b44992e12dc6de3e2dbce41365738fc0ae592a175a21a0f8e7101a6c15e3a0d78c936bbae61303fc366c1420ce96a0dd2d702222dc04ae4f2b025f2224ced0a5da1d93298da8b31b5d784557b179d64deea58cb905607f7d2046f75ec8a85b337164e5546e1eca60b8793aa0e4b6a772c816b34093ca155b0045e8209afd508df3fa0f0a598f0751ae18f0514be07267c1f8df0eead8309df1313be5e23bc38a0f06598f00d1ae1670714be1c13beaf46f8550185176246be5f58235f81a9bdbf46ed0e5b0553bb0853fb80b06a176b24e788697f512ee1f1cf7e0ab6ca81efee9fdee462beffae6ef94eaaf0319752892e5d780d7db04ea500557929664d8768ac6953c04cb012137ea846f8d280a6ba0a137e9846f8d101859761c20fd7086fdb2698f0bdb0c43c226462aec6041fc9346dc121c23ad78a3cc69bf3256235ec1af1af356247821231705d286c3fee705203d77c797596b4de2a69d3e57c0f03e76910adcb31ad8fd269cd475eb91337de6e76bb926e374437af308b0d90adee0181f4aac06ce0688d0ddc16d0c0d660913e26a40dacd508ce1133a0cb48cb596c1e698170def3ed104a85a554049e759abc4c3e36ed32f9385126f3e91d74ba62e577a52eb979dbfa7886b4adf949102dc4918841dad67bebc2e1367ba2c666f303965b5598f09334c2770d28bc1a137eb246f8750185d7e884f3660d3f472354b3a61653fb548dda5dda06537b1d56489ca62b19b996ca39e34e39f296d8414a917db0904fd785cc07a5e78b72a146fcefeeab1024bcf5587867842c0e376082cfd445c4f5b12b88ae33668f80d5d9be98459ca5b188f28016b11f26fc6c8df0cb020adf1f2ba4cec10a297e9c477007c001ba70b8f59e974e6227199f3910137c7e48c1076156744148f33c18137c6148c187e804f3b4e7276cf8e7e4710141e6e41d8a59e1468d153ed72e98151ea613cecbea8b59c8b2fa704ced4b346a7f1b50ed2330e1976a84b7dd3a98f023b19c791996332fcf28671e8599233fdf23a1b4e473a296397fb89f868f36af1495408998b7ba5efc52293a0fbc491ec4768fc6b4b852a745fb3a2d729dbf2b983b5ae1ce17c95c8763301daed2e9b0b5d46184f37f91681ef36fd63b7f67aec1b1980657eb346806d282af2ae10dd820a11d8799ef351af37d2fa0f91eaf13cecdf75acc7cafcbc87c4fc00abdeb35855ec38085de8918a11b3484ce6e1f8cd04998f01b35c2ef0a28fc644cf84dbab40d28fc142c6d6fc6d2f6968cd2f6542c3bdc9aac68caabe7a2e9344c8bdb92174dc3ebb1683a1dd3e1f66445537e3d164d67601adc91aa68da4584176c06fc9998f9dea931dfab3a0433dfb330f3bd0b33dfbb3332dfb33164fcc486300dbd73303af76ae8e4770c46e75c8cce7d189dfb33a2731e1689073491383e6024cec7d03f1812fd0598d60f69b4de1450eb0b31f40f63e81fc908fd4558241ed544e2f04ec122b11113fe9846f86501855f8c097f5c23fca980c22fc1f03f81e17f3223fc9762c6c977d546abb511f55cad5d8669f1b44e8b78b596578fd5dae5980ecfe87450d5dac87aacd6aec0347856a7417316afd6a68a2190b501a7d15c8919f0731a033ebd733003be0a33e0e731037e212303be1a8bc48b9a48b4ea122c12d760c25fd2082f0f28fc5a9d709e5cfcd08f30f5c27598d6af68b47e2fa0d6d7eb8473f7083f2a24947be4064cedd7346a37ea1a4ced1b31d8afebf2161f0c483e51aec079b5524c655b29ca9d2a318fd45d0f552c8620e733779347772d6da1f3b458acb25d25ee55b959c856c801c2e1628050adc3ddc0dcfdbeb2c400bdbb8b7796181c2a96abb3578b27d5e2ad1220593f0459268752e1a065d0f9ae376109f48626813a044ca09b31e16f6a848f0928fc16ac307a0b2b8cdecea830ba158bc43b3a42db048bc46d98f07735c27f0f48e8769d709e59df4ba7304ae2babe432338476c5ab579c6831377f9a9dff1e0f775bcb4e3c1fc5c8ee4e3c1e175c5c683efc46ce9435d6e0b68a877e984f32ae2a3b055c4dd98e48fc34abe07ab1f3e49c7fe93149af7eaec5f6cad56ba59ec3fccfe5bc92dffd3b42d7f93b0fc41492c3fdc2e61fa94b80f339ecfc21acffd98f17c1ed2781ec0b2e9179a6c7a72b760d9f4414c6b7e2053429388af659e283a5a256209846ef14c96682e65059ce7f410a6c7573a3df8fe1dc1e43f8cc9ff3a64ea3c82a5ce379ad469d63d58ea3c8a69fd2d963a3c8fac924d44951e25757b4b643a0bed312c92df6922d9aa47b0483e8e45f27b5d24799fdb3ded21a76e8be89cba6d50e6396659cc822e257902d3e0079d069db51acc16ffaa116bc6ddb677662b859ec474f951a74bb7347549dc4338884e4f61c9ff1f4df20fd93658f23f8d45f8a79039f3194cf0cf21053f8b09fe25a4e0e730ceffd5709e1d90f3f398f05f35c2dbf60c26fc050cc96f2191bca813cc6be1dfd3119ca44bf2924e30ef0dfe51f783af37f83f96496ff0650cfb9f1aec5f6605c3fe0a1689bfb048fc9d51245ec522f18f2612d9bd8245e2354cf8bf1ae105bd83097f1d334cbe07584271ca57b92d6070639062d1d2550579361b28dc286be4dfde79e759e2cead7e86880d0faa44ddeb16b9d5625e7a962898e30b7f5dd70e5fc25ae9ab9f5538dca5e33a6e4aeb8af32c519817079c14f806c622a663c1f75f82bb8bb96dbd78051b5f84bb8fd0b09cc5d78ebafa719d5349c873de0e3a57ff4dcc60f829e809033a01adf12d9d709ea51ac6902cd5289649967a1b8b44634d249e0a188977b0946ea24b693e2f5cefa85c225d9c7cad036fe3bb9bd2244bd3eca4bf0e1413595de766dcaebd3960adb00ce5c8f4fe5623ecaa46938b56080dd70237a82b7badec2306b1af77317a4d63e12ab3f7b0346fa649f39b029674ef635a370fa9f5073ac1bc11dc221dc107e1823fc470b4d4e028e8130cc747188e56ba2cc02b84204c3ec6546fad517d6340d53fc154df2a644a7e8a096e1352f0260c475b0d8e5f02e2f80c13de4e237c7edf60c23fc7846fad119e1f50f817585dd21eab4b3a6454977c89a56b479dadc7378058e6148fa562a4ba4abace78336659061b407ca5d3409c6a140be956fb1a4ba0ce9a043abb5fb004fa0603d74507ae3d830382aaa5137695cbb75804bb6a2238a47fb0087e8745701b5d04f96c824509bbac0489ccf75878dd30a0f344d5ee3614f80fdea646dd599c0174f80103da5d03747d40a03f6286de23aca1ff07537b5b9d1d0c08a6f64f58baf4d4a54b4b165fc495b961ff8c85998585a952db7b2e6b90307fc1c2eca50b93a7c664d1647447c2678a659735c27d5a14b00afc2f16726f5dc8bcf9c4e7edf0d502c934e0ef540526ff2b664a7d34a6b4343b9829fda613ce49f64da71191c423f3bb4e301f24ee978ee00f70c17f6038fa6b707c1b10c7ffb0741fa04bf79e3e8b2b06dd68d5655e23ba47aa7ae1efd588fce06eec1dc40efec474cbc67243a5cc81baf9234142fe0b0b79a02ee44620ef0709e56f2c944158bb4785e2cf6770264e100dfec134189cbc5c552d2f3795ab0385f92f66ce4334e6fcd2c060e6cc6288f0a11ae1b705141ec3840fd335b6070513de40279c13cf095b3337d449e6efe7862cf11a613c866b785c159047639d706e56793ad3e49b334cf38ce2ba5e1a775a2b9fdabbb26e9259650659b589469b1c71041cdf8824fa1910f5711259f2991023d2318e4138b1a6baf4e39dc77cacf33832a3ce6333cc0847698c70c2e06046d81c33c2d13a23cc628967d0c0be698974369778de28113d87152cf8de9d2db0a88fd1f5140246bd25267cacaee31a50782b9d709e9db60b6975ad31adb7d768bd29a0d65b61d6304e670ddcd6e7ca342e93d932be5f7ad0b46e83456c074dc4c60c0916b1b698f0f11ae1a70714de0ea3b6a38e1a5f9de19db55c3ffcb6c6b49880a5dd7c4fce0dd3b76a8f853d5117365f533b9d05ed3375c0c298a40b832797eabfb96165d653eb8819ce648de11c3e3498e174c25a4453c2b6883a63c5cfd490c54f174cf0b49082bb62a0a7eb1cf6c38281de06133e4323fcaf80c2bb6186395367987c66e5026186b581d7b876c742da0973dea92cc0db8a30d4cc973ff5c07498a5d3a105d021d3586f8b85385b1762d3bae235270337794fcc50e6680ca5516e3043c9c284cfd5085f1e50782f4cf83c8df0290185f7c60aaaf9610baa3e98da3b6bd47e2aa0da7d31e10b34c2db0e0f26bc1f267ca146f8ae0185f7c76cbe4067f3352cbd1dc3c32d7e72a7312ef32ca7327b29d4002c891669926855c024cac69268b12e89f8c84de26ab420911988753777c1ba9bbb66d4dd1c84c56b375dbc9c674e411b241e83b144d95d9328fc30bb2089320413be44237c7e40e14331e14b35c2af0b287c18867d0fac5e556ee94c0fc6c8c142dc5317623bf15e622725f3a1a05c2cfc65588c75255090108763212ed785d8499b65e78892490dc1c67f09c63e0fd3a450a70997c0fd6741677d8cd0f9f4c4d1f6fc448aa876d32e903b3d06df497b458c4f8ef2c210e59976bd52518c8f9b744c8859b2f0b15548f9baf4e1b7c5313e54ee5569a73987343dbffbf30d1292a6319e3423310328d119003fef4ef55f4b9d87bc41ef46aa2ca0e18dc2c22dc5bc04fa70d7c84a3b48d8a375e6d8236a739c2cc6f1aa3230c795313ed4e945340c31c6558831260b1d3d2950c76d5bce6d5984dcdcf7dc626fa1382b8e570570764875064ccb62418fefdd4b90ed9310f34cf5c3a88fc58a80d59a2260d09827b63fad66da01418a80edb0ac588e1501aafe8375aebbff7a906cb83dd68ca9d039437608d68c1987456a4d3afea1245aefa013ccebb2b5e908e675032278bc4e30af652ad311bc09d778470cc5debaf4e5676ae87b42ee294c6ad40fae3f50032cf15e9d9a9dad7e59275b6aee61f2252213a8fe5719730767d68b164d8dec6fb952fcbd2fd8972b143ab92b0adc104b19dc1c2348aa4ec0e05785843f11f3585487f5584cc292b54697acdce3b9848d13254eb9489c1d581f36d5296947387ff29cfecd78e76e81f3679ef3ff38a72f157f73bc5372ba89bd04ec32ed2ec908027932a671ad4ee3ee5a8d739d3f63c4dfb98e5e6e4194a86d10ada66029b42e6c0a4dc524ef1356f2344cf2fab092a7eb24f37276432c7153525139fa8527d99474066600fb862c9467623cf60bcb63274cf2fe6125cfc2241f1056f26c4cf2816125cfc1241f1456f25c4cf2c16125cfc38cee909046371f53f9d0b02aefac93cc1b5e87a5a3727b5cf0024ce5c3c3aabc10a37c4448ca0598ca478655791126f9a8b0921763928f0e2b79174cf2316125ef8ad9dcb1216d6e374ce5e3c2aabc3b6673c787b4b92598e013420a5e8ab138312c8b3d30954f0aa9f29e5883e0e47a68102cc3789c1296c7729d64fefea9e9f0483215b310eb299c16b2a7b0024bc1d343a6601126f88c90828bb1d43b336cea9560a97756c8d42bc552efec90a9b712837c4e48c8ab30c1e786145c86a5de7961536f2f2cf5ce0f997aabb1d4bb2064ea9563902f0c09b902137c5148c16bb0d4db1836f5d6ea24f3995517a7a3729299559598ca978455796f9d643e51fdd274543e0e175c8525df652193af1a137c7948c1355816b9226416a9c552efcab0a9b70e6371554816fb6082af0e29783d26f89a9082376090af0d0b795f4ce5eb42aabc1f26f8fa9082f7c73a243784ec901c80697c63488d0fc434be29a4c607611adf1c52e383318d6f09a9f12198e05b430a3e1443715b481487611adf1e52e3c3b10ed41df5d0813a02c37167481c476238ee0a89e328ac88bb3b6c11773406fa9e7a007d0ca6f6bd61d53e1653fbbe7a50fb384cedfbc3aa7d3c26f981b0924fc0803c580f404ec4d47e28acda2761921f0e2bf9642c933f1232939f82097e34a4e05331c18f85147c1a26f8f190824fc7043f1152f01998e027430a3e13b3b7a7c2dadb5998e4a7c34a3e1b83f14c4818e760829f0d29f85c4cf07321059f87417e3e2ce4f331955f08a9f20598ca2f8655f9424cf24b61255f84497e39ace48d989fe495907e928b31f7d9ab21dd6797601abf1652e34b7582f9ce35afa72338c9c67f9761a9f746d8d4bb1c7319bd19d2657405a6f25b6155be124bbeb74326df5598e077420abe1a2b89de0d59125d83097e2fa4e06b31f7d9fb21dd67d76166f14158b3b81e2b2e3e0c595cdc8099c54721cde246acb8f8386471711366169f84348b9b31149f8644710b560c6d0a590cdd8a69fc59488d6fc3187f1e92f1ed580ef9226c0eb90383fc6548c877622cbe0ac9e22e4cf0d72105df8d956fdf842cdfeec152efdbb0a9772fc6e2bb902ceec3587c1f92c5fd98e01f420a7e0083fc6358c80f6290ff1312f2439833e7a77a70e63c8cf1f8392c8f47301ebf84e4f1285616fd376459f418a6f1af21357e1cf304ff16d213fc04967abf874dbd2731167f8464f114c6e27f21593cad119cc3f7808cad66669c7bb8442e9faabf7dcffed4318bf99889a5567fc5f852ab1c16e4ecc34cf4c596603da34b769e3a7fa793ec5c7b44f0b33ac1fcf69f58e2da2ef55f42008d71bb7a0e2b7effad87e2f7794c386b105ef80b58e9106b10b2747811eb30356810f2a4209d60be8ca5613a828b7033791913dc28a4e05730c88dc3427e15ebe3354947e5247dbcd730959b8655f9752c33366b503f99f10d5d007cdfe2e6e93049b26ff19b18ec162161bf85c16e1916f6dbba0a2f8b67ef456cf3ac25561546b075c3ad7484b59558eb06bc12eb9a10bb7474c02aa677b01278ab7a2881dfc512bf4dd8c47f0f53bb6d3da8fd3e26bc5d3d08ff006b096c9d4e4e4bd212f81013dc3ea4e08fb052ad433d956a1f63bc3bd603ef4f30e19dea41f8a79881770e6be09bb0264697904d8ccfb09640d7902d81cf31c1db8414fc0506b95b58c85f62b55ef790b5de5798ca3dc2aafc359619b7ada7ccf80dd6c4e819b289f12dc6242b2c93efb0ce7aaf74544ed259ff1e33e9de214dfa074ce33e2135fe1113dcb7816681fc1471bbc0698a2c6453d8acba637de732bebfe53ea2f9b05a362c8689ed73663abfcf737e59231a4cfc89be77acdbff81bf0d1b2e93e4deee7cdfbe60fb68fe078b653f5d2c8fac8be522a79fce9b746ef3af42fc7ba66818f2d8f0ddc7dce6dfccba37a7d69d67ed3dabb34af258287e2d7624d68a7871b95e7a7109fcfd607a60920a18df786725733703864c6153d0cf7bb12327e8264b3f61a4fb63f6044374e3c437877069ad759adc7c13e3f8a124554e5cdc33c4fddac6bfc59fd7973dfd8cc572802e96e37db184ccdd784e13295621e2e8d7d29b42f0976479057e152466bf6031cbd6c56cc7b4d26fa2d85db38ca9cd88c2a75cfc972071fb2f16b781bab88df2c56d8e489d553266fc6efd668bc9af584c06e962727cc4e559fc1b7e605ab9237503e33bf8c48f7caf0e60e5901d1e0b5e97d48a4e2c2cf578f7bdfecab6df30ea8375d427a69537660b1ad546946abf63f11ba28bdf6c42abe24ff716c1f058b9ce96f8ce9b8568499249aafe81c57aa82ed63b248d35aee9021117f7e040378eaa36e64f8b24a1c47c91796afe0f8bd7305dbc760bdcb25b287ef1b6ed7412dc67f3ebca812aa73ee08eb4302dc14cd2f94f8c478e8ec7ac48ea6ceadafc2f2cceb9583b25980d281be67bc1ba7bb5c1740e6a114162f63716b3e1ba986d87c46c91c89fe5b26de23a7255af65b1ccc5c509a941d347f9078b519e2e46d3084b5f95aadec38bea2fa6ff62311da18be938868dc1ea4a0a6f0ce02e7e9cc90c91ca55a237c4f7f1db508fb1e22390da58e5a7d327f0860b5b088b442af01da6793e5c99a4f6f3caa8bf98c5b0988dd4c56c72ca9233bd5e015e8626ebb3665a5236c0e2384a17c712e216758d3ca068a56c312f16165056971beba78f98492dda10e3345ac769d166eb792427149e43238cc3181d87496819c67b482b9c9754de7077554f5ee3e825d5774a37c662385617c3990163b88bb0e835488a6c8ef836c1e2bb9d2ebe0b082dbb3a83fab73e0834c5086c5f5ff5b25bb64d04b5327dac9a61b11aa78bd5f480763cd549b52ad13236c1869b6371dd01f350044dc169e28d446bf497afe9cb0d12bf1658fcc6ebe2b77d8896638da879f99ed1a5b29f87c7aa20e1dd20716a89c569c76069e6b7cf89c29fc04b9554bd14da9ab21516bf0958fc82f419ddb84e976da6f8af7cc42379ebb0be5a8eadb1f84dd4c5af2f4bee152c70085368b915a6e5a4e4bebd20a9b030a354a0b4bd3658ac27eb623d14cd5b057513c16019515ae7cfe6757fadb6dd99997fbf2da6f7149dde6353f6b8668ab141ee7d2c77cabc2a276e15e27088c4fe6fb214c8bc07d90e8bcf54acb59c3c8ff0def07cd182acd6b421d2194be02dafd27a8ce1d6580ca7a5d347d68f0dcc14b6c7fde085d24795985e518e0fb4c7e2381df350a5e30748279699951899c7b40316d319ba98ce482b35fd233d6e3e54f1de9ce9da118bed4c5d6c774d99aeb49e716a9f79278cc64e998dedfbcbde5dc4f921fced85e21cdaa29425587da573672c66b3b0f1efd4bd166f8f551d8d45ed7de982c564b62e268302c46465809804d1b82ba6f11c9dc6bb333aef826a2b67ee5fc4f3601022db6044e606ebf724a6a1aa572ae4515845e22bbcff46339ed30d8bdf3c6c842addf84d61eeb8384fc10d19c62b935cd71d8bd1fc60fea1c49573debcb7121901a6f129f4c062b533d6724bd70be02d1bdd33c7e3dee974a5d447ca6d8bc57141305b4c9572d1794d7a62315a888d43042d3df4add274725a94a54c16c6a140c7a17fcad64a7c44bf443ce533deeaa74fdb0bd374914ed3d181f399d23cd37c16242ebdb1b82c4e67962bd6139a6a582fa80f16cb5db01933c14a0db72592f86be22c28758e2d9e9e8952260acf3cf7440589735f2ccebbeae2dccf97b2f130a973533f4ccfdd747ae6f9f48465915fe7e952e774fb9d99d6bbfdb118ecae8bc1d2cddc228616986ece53df04a13200a3b2249ddea70a3148a9128f1996e3eaa734c9c662b6341def51d07a3abcff20f3980ec462ba473a7973b2b059d73e6bc0a8806be3a3587e8af8e9f22dff2a480c066131d833fd99ce3ccc207608e3873dafaf141a8cc56f19361a92bcfe8e1fbaecd7511d7a8d971ad881cdc94a9acceab62158ac9767e285775375a1f3f20ae6b6fb8bd8e65ee131148b61613a394f4f38b35a31b59fa8a9f32716e3eb19a70a29ee98c65af10d6f03e5f4727e8ae5d6d57bc3eaeab3619eba2ffe9c875fe1a406cf13057535175fdc9f5cc28a06ee1e19e2bf01310e569d751f2b65fecd03260bf9e5b2bc51d63a4c10726782738fcb30a7cde39eadacb64148150b5d1d3e0cd4e23076a9e3b407b2ad412cd654c648c97248f7e6a4b7b49816f154dd56a66a831c7e6a7c6c7086d6945a8b621e5a43bd0d754e200b73874e7757c05ce9d989f15dac968960e68bae1dbecc2265c8b0aed4853c540850ad9f94e21681224027aeab303777aa6b15730780de7364366ddc2097a748092536be087b8a68d5563ae0dcd992aacec100565b81906f76a0109652226cebdca84edc0c3109820b28144d333e296f1e5b6d05b09b9ac581ada404d64164d5652c17783e6d06d7b6651cdc2a4a705b6bc071816b9c8ff854875af1b4d80a68cb591c5a19b5b579b3e734e7ef32396356cda572adce0670d9ade2e0f6a204d749b447abd3ae166c80773aa8145653c26b09b2ea3c8f7fc9064cf7758b632aa7c4d41c608a4f93b6015176a738a20a4a444d04a26aabcaa846ade370d650c2e15b14cfab6bf3ab611d7772d10251e8d732be848417f3f3a52bc8068005dde300d752026c06322057938f74d900a8b25d1c50257509354f0c25c43798b1a385d51dd8d0de51d9905ab36503a071ede380aa2801f19df35413742a5b2f625d5bd76ee213fe8a45ab6a81b0b062616fe54e803640e4ff2988d594107b30e681c75d3c7c7d7649dd3ed9c596374e3b00a74f0d25cad6b24c53f6b641d6988b44ffd106546340d9564bdf4055bb07297fb90d88deeb1347b42eaa0e36ef2fc20174d567b4a9f1fa7bd338b87da83bd8101c5cf33a5174b9a1cdd9d1e8d81ff8c2d653c26b051a1df1658dee825b1b40158006ec064a502d0028d825b201d2d1c3e290f6a5f6e1cf1165d46adf5646539cd7ab44483600e3a3f40ad87ed17a55bdf3a68a2d2bf4cbc1e0c7fef43e7cdea070a7e8dbdc607daa711cda01d4d636558c3cd68ac0e37b89c5f796ab166ba62aad00b709803b90121cdfe01a7a2e660a883562325491250dd94d83e2b00ea28605f73fb671588dcf0552b00ea61fc475e75bac1562ecee7c8f0359f2106a97f50207da6496fe1ea636003c5a749b9a36f609f74fd2cd7cca5430eaf8e4ae36cc7524558aa735b2b1e299ecd5d779c538cd0f8593b5b233762a66a72ce7b2d39e68901d7890383bc31947d96935d1b3437a09b3034c23cb0e540466a7ddf0cb0ed4dac9cea83cc90ee4b4c90ed4dacf4e6b425476a05940d9817d253a9df1791fd909a3acd9491d0cd9da71b36ced48483632c89d9d648e403632ec949dc2759b9dd1806836e2e5cc4ed97ccc46bd0bf199cbfa19c7b97ce6f261ffc72715e7f249c5877308fc8815fe9fdbfe3882bafdc153cc9d43ceeb84e4fb7e0d775a013e1dba27e8e03d0b4fb53374da34f7b444b64a278299b4467603137d8e3409679e95388f01388f3209e7082b715e04701e6d12ce7c2b71be02701e43ed265e26cb442f56b7a6e5af91e16b4a85ef5316c7776c14d6b812b547a8fe3236968da2c3d98a0ae736c01a8f3309e7182b71c600cee34dc239d24a9c3781cc7e824938f3adc4791ec079a24938475b89f33380f32493708eb212e7f300e7c926e11c6e25ce8500e72926e11c6125cefd00ce534dc2996725ce5280f3344a9c1d25ce22e982f3ef98e2aaeeeec6319c0e64632a9063418bf3745340e65a08321f803c8312e46016f7424f743ead118edc55c2cbeda5328db97b90ac15e2b99ad859823c120973972c7086fc088a8133a927e42be8e90e25d90c762a007b1625d89e0c8e2da53fb66a33dc3e00eed9d493ae937944a138d2ea8bcc9d370f94bae750a26c23518e8ade174a6687d7033b3c370a7863a287f70115bc3b00bcf328e1754ed170f2666252cf125936fe05c03cdf2498a32d84f95f00f3029360e65b08f32700f34293608eb410e6cf00e64526c1ccb310e67700e6469360128eaa93c1fc1ec0bcd8249884ae1032985f0298979804d3c61ece3700e6a526c11c6321ccff019897990473ac8530ff04302fa7843948c22c775e2a175735471c9eadb92cd0099da44ee6f654c81f07ee8e2be81752af12d3aedd69e02b053cfb9c1cad80955eb9399d6d5e9f3ba1f51d4485f252607d5751a2eceecbf0ae47ddf5bbcf74b2f7963504f711c07a3525d60109e568a110368da9737b2739fff34cbf4e78d96b59b27dfa496d98acd23a08c0be268ae220bd16808d28b340c97a2d25ca6d35256bfaa7c511a23d8e0aeddec04aaf8bb2a4e507e9c54f844856811196b46415d89700ebf5d4997fa25893b956ae14e3a759f0d1cc357275aa5a9fe7ae7ab4af59d50864fe1ba2d8077cb8f37f850cbc50b405f8539b97221c0c10de1805c2d15b1cc27b00c29be84fdc70a729c427df54337769b3dd733dee02106f36698116e9c459329cc5a092b9c5249ca4333dc9709e0870de6a124ed279c86438af03386f330927e9c405329cef029cb747b31a3337fa4934db50e17b11543d7750d7dff03841dec3e11b5df05d10f8562935d88ef91640ec0820de69ce74421b87345681ec7c571428e17ce2d98e854e979b99943a1fad8fa2554986723db0cabbe987dae020c532b65aa09b24e6bfaf96a2a6313e07be9c25ec6d6741166f0d60de1385abad466cb9545d37a8a6f67f51579da37838e5341a32b41702b4f74671121c567aaa982ea39c40531423c2f8392839ef8b62643dfd7d15c86092ad6edb11d8e4fd26c1249cf34106731c80f980493009677092c11c05603e68124cc2b9c564308700980f99049370d63b19cced01cc874d8269e3f2eab100e62326c1241c752483d91fc07cd424988423e36430bb03988f990493b0d14e06733080f9b84930093b9264300700984f50c2cc62891dc960535f09eb77b2a9af47820ee6939b73eab67fe082b014251bb618046cf529936012d6ef64304700984f53c2eccbbc93b54ac1fe1e1beae2a95edfd2a61b9e0b0a8067a2186ae3bef975602e5c245365c8ac741b60a5cf52e2eb0af025ce30e6c2e2dba3d83cf7e86900f4b928a66fe56e71d3b70e02089f8f02e1a82d0ee10e00e10b66b73a099dc764adcea740a5f36234f33bc6463fbf83cc3ac7017c2f45353f333e9e0e8784c947d2c946280f0459fc657396acd8b801c57880f295a81a41a98e07b279eef07600e8ab266d6b3ad64a875c5b505ebe6612ce3156e2fc0358e7eb26e11c6925ce6b00ce374cc249bae70c19ce9301ce374dc239da4a9c1f029c6f9984739495381f0338df360927e9196d643867039cef988493f45031329cd500e7bb26e1243df28e0ce73280f33dea7e517a87c82e10aab96b33c880cea2023a12007d3f8aad7537c3196d64bb1fac05f03ea084d78da5bbb18477ef03c2f1f34d5450ef075dcb0f4d844a384f8e0cea7d00ea4726422574d29141bd1b40fdd844a884738dc9a05e0ba07e622254c2661319d41a00f55313a112cea32383ba1a40dd642254c2394a64504b01d4cf4c844a3823890c6a2180fa3925d4112c7160cebb2e73b2f37785f387ffdb8d08ef57b913c4b8b273191f5fda4704b1da498675ac44bc55007656244d84e15489c00f105289f08539abdf6d3c856305b0e72fa399ecb0251da7d309e0fbcadc45da849d57b22910af804cfeb539fb76936e504596cd370098df9804d3c6c3768e0230bf3509a68d87edac0330bf3309a68d739df60130bf3709a68d87edac06307f3009a68d87ed9403983f9a04d3c665313b0398ff3109a68d87ed2c00307f3209a68d87ed1c0d60fe6c124c1b77a63b06c0fcc58c6daa085b9864db547d0ffae8ff357bb98c8de713ed0cf0fe4a89b7b5c4ebee95e89e11e3cae627189081233b038681ecfd5bd46769a4ef3db27183bfbd804dfe1ed59a8f39c28fb9dae7779fe27c562542b479cd470f60ab7f50021dc6bcebddab3c24a681d5ef6542356ca469ba1418d988d3202af437035bfe1f25faad9296afd574e85a50a16b00acf6cfcdb98acefe3d983a03947f45314ec44f76db7276622800f8fe36e3dc2c77f8b85258ac3b304c6a991f50a17d03948fff9874ba01a93b84cc5217039cff9a8433cf4a9c1b004ed6d0209c23acc47901c019330927e941e364389f00381b50e2ecc312d7c64f65eb45c3bc96a9f51ff39ccf8b1977882c1060dd63f3caa3e93bb5a382dc09d4fd0da3b0d9f4d7cbdbb883724760b38d4cc239c64a9cff02eb6c6c12ce9156e2bc0ee06c6212ce7c2b719e0970363509e7682b717e0c70363309e7282b713e057036370927e95430329c7300ce1626e11c6125ce5a80b3a54938f3acc4b91ce06c4589532defce153e4fb79b1991ff936c40ae2168b4b7a6840707e4f84603350e894a47197e06fb62b9e540b1d872a0c4ea01b942608d5b51020db604c6c6a989bb03db6c438952cd59529b4cbb9b60ac105ea4f80ede76ef4d5b02ecb26d54a5e496b275ea0400af1d25bc70ab89086b6fb20ae82a8076eb2832797a13134759b99a68102831db9b04d3c6d544c300cc0e26c1b47135517f00b3a349306d5c4d940d60763209a68dab897a00989d4d826963937d5b00b38b49306d5c4dd40dc0ec6a124c1b5713750730b73109a68dab897200cc6e26c1b47135512e80d93d8a9ef9e8e87be664ddc7db591c5e8fcde96e8b6cafaf83a850be09ec70db28ec704b3a5ce70560873de94bc4559ae34b163a4c8a589154a8546cd7cba768d9e7436f09606645e16ecb6c0116613388acbc2c0199bc5714e5657a35b78d1dc7a1c04a7b476da5faa50305a2fc5c23b23f1757418b966cd3e95b8095f6a144db4aa0ad747e5eeb045f2b6aeff97268d7beccdd0158645f932661932ef327ab862a8115f63309679e9538cf0238fb9b84738495381f003807988433df4a9c5f019cd951b834d29bb79167a57fe81a0073a049306df40fdd04600e3209a68d23e4e70398834d8269e308f9d500e6109360da38427e3a8039d42498368e909f01600e3309a68d8e8e5301cc1c9360da38427e1a80996b124c1b47c84f0630879b04d3c611f25300cc3c4a983d3530836c164598edc9368bba01c01d61325cc20a8a0cee55006ebec970098b0532b85702b8234d866be31e729700b8a34c864bd8a322837b2b803bda240f29e94a0d320fe95280738c493849fbfb64388f0338c79a849374513519cecb00ceed4cc249babf0719ced700ceed29716e2d718e74feaf606a0d2ddf8acaf61597e7b338c2719408fba45db74f66fead25273a42abc476e7a4add3bf6244903f0476ba830d90095ba964909f0190c75342eec1bc9b4c97c89de8e631b5ff9cb7ac8d4785142cd90e742700b03b5282cdf2812d17f3476b8498f80cd2643e2d1bdd83fb01bc1328f1b667f135effca36a81758d988c1b513546d68bea02204edc9c334623ebed93cdb0ff00b4082651a2ec2550ce64d562bf4e6e856562e632ff3c9ee597b1d502383ffea4c8f9b7fbfb34c637f02f6784277790b55a9b03c0932901c70fcd1de96b154490d5c976ecfe1de09bb23917d3d85ff5cc00a5e6544a94e91f1145d8bc2fa26a79be0c304e8ba2810431063b228a709a04d911518700bcd3a358c290d9be3684b3f6c8e6e27f01cad21951140058b3295e001096a36405c00860a1332931f243ccd4ca0fb5f7d74c61993cdbdbd7146a0bec6fa728ec2fb7ce068b8553c4dd39def6f361ee06186751cf30e1c0a688804b98bb071d7f755fb12ba28b7381f895afec24dc1b712e15ccd100e6eccdd9be8c6c549eac2b79232817e74481323789d7c86e3ffd33c02ae74631898ca39c2c8277b73b9da9f118116f7f4ae62d6a02ec725e14e346f95bdcb8d15ec01ee747e16de7f63855d860ad5062b6f34991a87ce6b17dc4204695f31b6fb85746619b6475f9180076e728bc43799b631354b2a6f80e206b2fa0f75ec6072b6a65e730de3e515bf26e593ea3b301e0859bd3d3ee4569e3caa45920ab1750a2547bd9e4479fd1c9cac91a006f51145369d23f178bb0a94e763e416b90ad179b84738c9538ff03ac731793708eb412e79500e7ae26e1243db8910ce78900e76e26e11c6d25ceb701cedd4dc249ba092a19ce0700ce2526e1243d92990ce70c8073a9493849cf1026c3b937c0b987493849d77392e1dc03e0dc330a77c708e61e9f53ee9088cc0d47d60b9a06f02d336941c170ca1e3919ce32d00b5a6e124ed2ad57c8709e0470169a84738495386f073857988433df4a9c9f029c4594389b0901254eb5e38e9873c964b8c896013401554d3125ae012cd1f1eb9d88e52e5ea910ffe66342b542e454019847ab40508bc0cb3e8d0a761e805d12cd1ce1bce89dc3649ef54f00bed2cd398723b2ee2359b6ff0494922ba3182be7a391d3191fbce543bc2bc5687995d543ba87016b5c65ce8c751bf7ec5c09acb18c12e510e61dde554729eb379ed8d27700d908b0ef4589bd23e3135c792d5eccd44a206c9a61b585a569335014ac36752e3ba927896c2efb4060a3e5a6a2256d0390a13d17586d4514930fd39bf331c2cacd7d5f0730d79804d3c629346f00986b4d8269e3e6be4f00989526c1b47173df2701ccbd4d8269e3e6be8f02985526c1b47173dfc701cc6a9360da381df64100b3c62498366eeefb1080596b124c1b5d25ef0098eb4c8269e3f1261f0198fb50c24c7fa704c27a9c6c75c667a08fbe9e1263960663b09d1208bb96643b251c06f06ea076d3a51ef61825161c1056448da9407e0d40ee6b0a48c2e61119c8d701c8fda270ca2566f874dc7284bd7532a7dcf500edfe51ac748368dda1380e6f0ddb498cbf57269d9c4868bb6453131b823aff802886edd26b40d9e8591a0e501e68d2a4d9b194ad5132cbec05b2fe4126e11c6325ce1600e7c126e11c6925cedb40663fc4249ca467be92e1dc08701e6a12ced156e2fc16e03ccc249ca3acc4f91ac079b849384937e423c3b904e03cc2249ca46e3b329c47009c479a8493f49067329c6500e75194385b3837d3c486cf35e2a50d6c96f39870d63c59cfa71d40763425327ea3b686b4cf99d106603ac6a48c3a96d2cf4e9651db801ecdb126e11c6325ce5f81751e6712ce9156e2bc1ae03cde249cf956e23c09e03cc1249ca3adc4f91ec079a24938475989f31180f32493700eb712e74c80f3649370924e2c24c35905709e6212ce3c2b71ee09709e4a89b33bf3efbec95701f3191dfe03c2fc6bd5094722c91610ce07cdf9d328b1f6f7615dc112c7cad31f5527444dd6117d11a03e9d12756e82056320f90aa3ff2b27657e00f09f41895fad361ec3b6b49db9ef0765f099514cb951165c2dac9697c0d3243cffeec711cd08215bbd7934b0ceb3a2981182b515bc33426c5c1eb30740797614569ad96a4dc259a06455d84ba0003887126d5f5f0150e9bcb8d651a456f8ed553cb7d48dd0cf01167c2e2566b57bf7705f911041254566a313818d9e67f64470c2255e6413c10f04b6797e14dd5a78f08eae24b5bb49f52cb0d60bcc9dc54c68a96405c1c5c0522f8cb2b22a677073a12d7d0397b500f345515bb01e6e81280ef87ce75221ae8291ce6d3e8e0aeda300ed464ab4f1addac644df1220f36df506f82e366796bd8d8b14e7816aea92281a55aa2ce51551b16fdfa62dcf0b3b1558eaa55134aab0de7fe25ecb84630564387701382f330927e9d00b19cea300cecb4dc2493a304886f34280f30a937092ce5121c3f902c079a549e3ac6329b7bd221b67ed09705e6512ce3156e26c04705e6d12ce9156e2bc99c5715e63124ed27deac9705e00705e6b12ced156e2fc1ce0bcce249ca3acc4f932c079bd4938494fa021c3b908e0bcc1249ca4fb8392e13c14e0bcd1249ca407fa90e15c0970de148daf73338c7a9239e8de07f86e8e62c898075c2a2c51c95e235fb10f5e0cc0bb85125e7a7b32a94ac6be594c7b82deceada680b4713ad87400f2365340120e0293813c1680bcdd1490846e36329087039077980292707a2219c8e700c83b4d0149383a4e06f22100f22e53401236bdc940be0340de6d0a48c2e9b164209f0720ef310524e174033290ef0390f79a029270a76e3290ef0190f799b3acc0c68322160294f753a2eccc82cc261a69e54945ed00cc074c8269e349455b03980f9a04d3c6fd649b03980f9904d3c6a5585b01980f9b04d3c60ae81f1687f98849306d3ca9a831b0cc474d8269e37ab5bf80653e66124c1b4f2afa1bc07cdc2498369e54d41e64f3274c8269e322800e00e693d4638c53c5827faee24c09b4ccf9981fd1cc3f238347b61a6d2b90ad9fa284d783f957a5a7bf488ab0f2215b245509c03e4d09b60ff32ff37317a5c6b7a4e002f91482e499dfc61afe0090f59fa184ecdf7dc905cad752f282608ad63d67ef1946cf02accf9ab342cdc666d340500c3c478932dc325442b46425ece5c04a9f8f32f397394a2c767e2c7788f877f9886ce1f44154585f05585f8862cad6c82d68bedbb520bbbf1845c33ebd818de156f6920e0596f89249306dec251d0160be6c124c1bc789d60398af9804d3c671a27d01cc574d8269e338d13a00f3359360da384eb40f80f9ba49306d1c27aa0230df3009a68de344d500e69b26c1b4d18b540e60be65124c1b1d1e1500e6db51ac3fc36026ee19435805916d23b10ce07cc7249c7956e23c1ee07cd7249c23acc47905c0f99e4938f3adc4f916c0f93e254eb5d894cf1f5e073c99916c5a4a866f0a8be3fb80125f07c64f1e2c94e76f70516b9cd757b12a318c51c6f61503c265e2ce3e8c8d01c60f2931f664f1ad74dda1b4658eba7cabe422c1838fb44f647c833d3e7c51e808e019bc98a975be3516c25d0ce07e144516e73ea1c8fdeb64bbba760625e4c7510ca765b689be8dfb125f022cf313ead233595dae624a3a7c561423c2f812b0d04f293166693006dbe79dd0bf49b6cffbc100ef26730b00c2e136b202e02d50007c4689b697403b43d8e7029e179dffcbe4413a5c949aabb45a2400b7e322e7dfaef869ceb5c4115b6c61dddf0200fe9c12704b163f19db7ba8b87d56d91e40fb228a6a099b8b34596473e253de5651554ba341b9f965345dcbbce8db9d64597722c0f755142e62d827521dcc7897d3ee3e505790a5bf8e62ce318499badab117ec7400f61b4ab0ea2cc1116c4b3b4bf06c80f05b73a6beda3849662780f23b4a94bd03a05ce884c985d4b079cebf9493ae9ab656df8baa561f03aaa5ef29117765fe83ef0a45cf684b5b50702f00fa4314031ae9efda4e88936cf7cc9600e78f26e11c6325ce1f4089fa1f937092ae0f26c37931c0f9934938f3adc4791cc0f9b34938475b89f34d80f31793708eb212e79d00e77f4dc2493a678e0ce76480f35793708eb0126705c0f99b4938f3acc4b914e0fc3d0a4748aef8dbbdf2290c0b99eb6db2d797540410fe11852304b3c7c8ca4ab2dd0e3f06bda0ff6d4e94defeb98d6b858a00ca3fa3cad8ae5f890b5a2f3375041ece4d5408ef0519fb2f4a84dd58a25b4ebf223db245d364502700bbfc9b12ea369a0a67b2005ccaf84e34b5422535f86b7305d40020fd278a815f8eb2a46e7b1ff5b3ed031a0f83ecfe6fb41366b6f423e6bb01b4ac91a17391481bf064b33e9a82cc1f33152d696b940ced59c06a1b50a2554da8bc2d6e90381b206c4889303e897b33acd3209bc3d91be06b140dbe7c5fbf28027c6419f83780af31253ed8d69c29ebf23261857c894b896f6aa1cd6dcdaf00d2269448d5f4aef4667de45939efe33200b3a949306d74785c0e60363309a68d9ba39c0160363709a68d9ba35c0a60b63009a68d9ba39c0660b63409a68d9ba39c0e60b63209a68d33e28e05305b9b04d3c6cd514e0530b73209a68ddb435e0160b63109a68ddb43de0860b6a584a9661207991e43d8d6249b8230187830db990694b0bd4906740800bab5694009fbe964408702a0ed4d034ad8572703ba3d00dac134a0364ee3ea038076340d2861fb930c685f00b493694009fbed6440fb01a09d4d034ad87727033a0000ed4209348b85dd3e85b000201b7adb15e0ed4a8957cd33e66347f319df18add861c1975ccf947d28be511fbf8f60dc886c06482b80731b4a9c6a8ed2f0ba6e68b11c8ee3ffb67de3befb581c63374a8c6a4a22b7cae9c2e6a06dd6d4c5144efe22b64db21efdbb006af728b27afa4b5909bd4d64155316c8ea3d4cc239c64a9ccd00ce6d4dc2497aa02819ce5b4166ef6912ce7c2b715e047066998473b49538bf06387b9984739495385f05387b9b849374df43329cbb039c7d4cc239c24a9c87039c7d4dc2493aca49867315c0d98f12a73a8e71336cdb47d6075a03e0f5a78497fee9ab931d21154ea86bc51d7f9bd493f40115da6f40037e00255ab5bb17efb34f11bdf54aa7d75e225d20ee9e5e2542a09a991cdf7cbf3a8a1e3c995ba41fb0deec284a52ac1c4d3c4a877034890ce72260b1034dc2493a318c0c672dc039c8249ca43b8090e13c0fe01c6c124ed2cda8c8703e0c700e310927e956696438bf0538879ad4a81f6be55ca6ae00e73093708eb112270338734cc239d24a9c37b038ce5c9370929eea4686f31c8073b84938475b897313c0996712ce5156e27c0ee01c61124ed2f35ac970ce0738f34dc2497ac02819ce7d01ce9126e1245db349867305c0398a12e740e6df2f3ef9341b18180c6aa2f3af2a31f38e748ba0d60d8880bf0d5aa6a329817764c9d728794b563290647b28f605963bc61490366e46d905801c6b0a48c299ca64200f0120b7330524e11c7a32903900e4f6a680245c724806f20400721c25c8febeda7d054bdc1c2dc8366a64a8c9f660da04eaf51d2851e7fa50d7a220f11d1713879c236a56fd1523c2ff34c03f9e12bf5afa9dae779f708609996f7f0180b9a3493009d7d193c12c0030279804d3c651a72900e64493601256596430a70198934c8249d86625833913c09c6c124cc29e1419cc9d00cc2926c124ec0490c19c05604e350926a1bf940ce66c00739a493009f71b21833907c09c6e124cc2bd46c860ce05306750c2c4cfd0e6dbff96098cc54e7cd70ac1f69fa1bd1b8b839d4909b6bb003bdb79a148cc5c865b0c2c63ab05c4496287e5d552e834e75ae2bc554c87956ce381a600eb4e9458839d8164e32eb64b40d69f458932dcd90884f53d995bef1660a5b3a3a8a23057b4d74a475bb90ff82460a7734c8269e33ee09301ccb926c1b4b104dd0ec09c67124c1bf701df11c09c6f124c1bf7011f0960ee6c124c1bf7011f05602e3009a68dfb800f0730179a04d3c67dc0f300cc024a98592cec2e7784a5285967737f80771125def62cee1c59279c1f7c15f20ae114896853b683a82016b338c4c594109bf38603e3f3436bc4ffae5cfb3a8f5b0360bb5002837b2b2a971ce6472277c49165e25e00e7ae9438d52971796277c588b7bed844856f3c2803778bc24b9458c5a4e327b2f104cde500edee51f832d36b0ad9d8441f0632f99228863132f16512ce4322b3d15300d8a5a682259c2d4706f67800760f53c112160564602701b07b9a0a96b0374406361f805d662a581b2781e702b0cb4d056b63036b5b00b6d054b084a34864608f046057980a9670ac930cecfe006c91a9606d1c91df15802d36152ce1182819d85d00d892a8fd03fa754a05c2d9c23bbaa5425c056d4bf6382ab47700ff4069149eab91d2fd5cee9088ccf14c66990700cb5c698e7bc5c62352e70294aba27049a7bf80c6c695726b40c62e330927e9d6d66438cf0438f7320927e9c6eb6438ef0138579b8493f40c10329c5f009ce59438532d57f07bf96dac887e00302b4c8269e3c4da2701cc3526c1b47162ed7700e65a9360da38b1f61100b3d22498364eac7d0cc0dcdb2498364eacbd0bc0ac3209a68da3f60f0298d526c1b47162ed6d00668d49306d9c587ba780d9b4b14ff8b404e193450f85f7518a58fcb49861e25458ee8be4208a9cfbd9c2195cc3963b3896387f82a5c01ece1fddf398386d692a5bcf2ac5532eaf58c8ae707ee59a55b3dcbece2bb5dc205a4883c8161eab890e733e5172012b11a16f600b997b1ace3ce76fb528b75620c9160707cf779ed5323ecd9787c04f5d5ec5aa448cbda7e564c79a094e256c9d24c001664b5dd73177efa899d25756e6c4b9506852e5bcd34884e3f6fbb263adc19d9a0f3b5338d1ab85563c46d3c4da56f7fb0d6c96f39c87a59f0c9a1d6b09247abfcc16b370e739efa9787047e814e7ab5211ef725653f725378d58ac9db4064e628ea058e8d02b14d7823a7d73f8f13bb151ce5fee40c0b0ba2180617247ad0a79a79ea796c96d21b9b4753cc163fa12a0bcdeac38558cdc8cc7bf2f15ac4b84d49929639a3a7e788e6895245572f88e735b74fcf7e1e92e935d98696761f28b9c9477859738265ee5fc9b2bb574a706acf1ff035d2b077fe6150400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/c2ab708fc88b7d5479ee17a6527522c0.asset.meta b/Assets/SerializedUdonPrograms/c2ab708fc88b7d5479ee17a6527522c0.asset.meta new file mode 100644 index 0000000..8c56c19 --- /dev/null +++ b/Assets/SerializedUdonPrograms/c2ab708fc88b7d5479ee17a6527522c0.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c8887f4a4f373b84d81212e4b2286b31 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/c616df865137d78498ef7d6d7fb05e54.asset b/Assets/SerializedUdonPrograms/c616df865137d78498ef7d6d7fb05e54.asset index 3bfef9b..85f4a25 100644 --- a/Assets/SerializedUdonPrograms/c616df865137d78498ef7d6d7fb05e54.asset +++ b/Assets/SerializedUdonPrograms/c616df865137d78498ef7d6d7fb05e54.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d07585dc97580e74954016a08a15e76a515bb92e081a455dd554108a1cad2a445850e4202c402d24adb62a7d889e392e2c44ee2249b1ea73a3d4e75ba9338bd383d9bdefba63b71e6cc9dcb3b6fde9c5bdee53cee550c1f6fde6d67cef9e74c9fb92c6910f227b5477ef4880ed12cea45b7181677c594fcd62cc349f9eb1cb9e7dbc58c0cc7e4e780bcb6476cf379127e76a5d6c9cf3679342be6e493f7c4900cc7d5f54e3122bfb7c96747e4119c1d957f23f2ae54917ca85b9c1697c525519baaf111d1a31e9ad5e7526057aa4c7e9e120fe5d511a51444d2a02ed5ca8f4e7965565d9b944abbf75d1337945993f2da907c66464c4899834a6259fb72a1be082728d7e1321d2ed56185be562cffceea734bf4b932fd1d3fef3e7744fe95c8bf49742c29a43ea08fab7478ccf2ec0a1d566a1953c6f595e859dbf5553a5c4e5c5fadcfdfd5c76b74f88c872ed53eba3ce3a34b4d405dd6eab014e952819e31f53b6a703eea705e7a4b1fd77a705eefc379830fe78d3e9c37e9701d717db361fb168f747075a5d261037ad64b572a1d5c5db706d4d53dbf4d87cfeaebd3e8d84d4738ff82f0cf3b253a3c6ea4e971274d8b0ee9e3c77478d2f22c9577dceb2bd1b3b6ebaebf3e4e5c37fd753bba6eea72c2b0e3846347b1cb6c87871d946fbad737086f3bdcf4a6ec70d37b2771dd4cef20659e6b57b3c8f685661d9e12d9be508ace43785a5f9f41c79257f93b8dfbaa75d8a2ef9f45c7f2feb237f5f1133a6cb5e8ba4b876d86ae6d3a3c8b9e396bc83ba39f9943c732ded28fa23483f0029251a4c38bfad97be81ef73c84e7f4f5fbe818cb2e329ebbacef7f111d635d2f19ba5ed2f26e11f2da0d79ed3a3cafcf3f30983c679c3f8fcee3f81f1af1bfae8f8b8df85b51fcc5c86ef77a353a86fb5e72ee2be947cf63fb5d9e2f67f3043786e7ca0e19cf9976baf6d419f21e1af23e24b2f38f6bf7a4c8b2bbec03c67d6ed82132bef2a4f0cf7baebe65e8b9a774b85b877b74b857cb7bc5b1b9dcb5cdcd4faebfba7e3d8b8e8bd0fdaeae2e834991c520e7be20b6b93ae0fa3e481dd169e8d0a97578431fd76b5b3f1142e6361d7689ec32a14b87dd22bbfcead661830e7b0c7e3d8e4e556f11d965cf5543f7abce7d1545c67d6ef83cd2356df073ef69d4e13543f76b3aec45327a3df480f00abaf78ad6ed75226daf7be8e6dee3ea76d3d0eda60e6f20193750bc58b72b04cb261df61bb2fb75d88764f739322addbc5c62c81830640cd032e6f530790c86e0316cc437acc321915b5fb9e188877cd317c60cf9633a1c45324675b8cf90e59edfafc37143d6b80e6fe9f3af22dd213c605c9f32ae3f6dc417247fde16d93e71db498be5c744a62c84f08ee5d983e81e5b7be71091566e3881641ef6d2bd38a57abb67654a0d485a0dca1828f58276cbdd27fd3be420ba043ee067978a764e564cd35280a557dcadfadc7332a59bacbde2f5a94aa477b3fa1c90778c2ba1afe546f1e19c2840b909f93b82baf4b3f27cab1a11804efdb8bc522f2bef71f554bf74d56bf2375b4a8f8c764236904664c17b4f4605f2faa5dab977fa9904dd7ff3990e29d3199d9894675ca0d3f2784269d8a93eef2b4d4794f66df2dc9c1a2b999259e8940c1fa8d8726d9f91df6d71766964761ded8314d4796728c44da6d3d21ad0be41e5fd4fa5c862a408a02f794d67c3a206558bbf2327253ec5d02964a0c1dfa665342a64a9ac734da241f5093a720886b731d742bb7f3bbc9f96959d972d763290dc1b950599149eeefae0968f6dfc786371b669fb4483aa4e36f998e60516e4d5a5d6e648f036a1b8b8280d8a9af85336fcaa5bde5940fcce7de3eabef00950a26aa6ec045043cc5df2cb03f937216f3e0da9a2ca3c7774ba533e7e4f0a006573d2290d424b15eadc8ad44f5d0af6121becb242c3f62f5dbc6097cddb95810d3f7682e504413f1d28824b6d0455abec3a2bc1dc6698fbed947cf69624715fd5ade04fb6669b37539872d86b30b5f3ac503cb7591b93e134a20817d9082f2b1ce14e9953cfcb6b03f2fe11556bc2f96ee519ee748e732efb4e6fc295f356650837a85905cc32dfb8ab747740fd9416db936e794ed2e51b1d9574c596a44b43d2adb0589f06eb571a8a971b8a83ce446425b6c82027aeb239b329b882165c6a73c0cac56910e45744c20c41ad41e093f2c7ee17d59ef579d802b2cc464f4d35f62e7af6cd2febae095c38d628925b02e6b0b0b9abdce6f0807bada54654c96d3a7d39edf4cb28e1b516e130aa1b4678059555d745ccaa9536c17072bd2507089bd6d5b4f02a9b274381947a6b413cd96f94a6552d9a181197656ebc2d9ceeb51bef5dd5b5068ddc6e7a870c479516707e488c0418ddf1ce171b6c559a2ae95baccd83c5b202e621972927b2e7da4d2ad7c64b67aa0c586e7378a8b060b234a70b0205439f2ec721fe2975e9b20c7ba4274237e4ae8c7f5a7e1b5077e4e48e523a77aca034d962d3a44669d227efe99387f735a136dd197aa0aec1589fb310288c1e2b293db6daf458adf568947fd04485f89d1c9abf06ab280db6d934588334c890b8a43d2a7f2d56535a6cb769b1426b91569fdd5207f0ce313d04073cc2c45d4d15c38f598ae154c862788d4d38e483c72de54f1a0cdb91c9f0663c9be8786a28803b6d00d79359ab4b25de90b8a3fbe7f966b0b514d4272c50add5bd07d45a0aea2e0a6a5d5e50d7d9ea509565bb59eb507ab8845a91e75dd73d69abeb54c65f9f634790d8609edcb7c3b65b554cf945405520eb292fdfe3556ca717bcd8de40e9b1d7abd84e2f60b1bd91d2a0deabd84e2f70b1bd89d2a2c1afd886d8c664aae71ff7662aeeb42deeaaac2aa3234275b1852a7c1aa9c2a729afc267ab2d1e287cf6d9e281dcbc5f780f47eca623db46c13c608309b6c004cc80ccd84ed936974715b1dd1627f4ab606a3b4abfea312a850e52297428af147a9c8276d8068dae739db1f5e88dda1d94dd4728bb8fe665f74eca338f519ee92eaacdc3339fb044d6a09a8b851cf4c77da5f0f5efb33687b6569ab052d736e0ef173f5561eeb22515b8d0099b8bc230ca901af29ed1558433d613c609eba8184fda62047f0823fd494afa299bf44a95e5ba5473634cfeba65d55de91361627d8aca58cd54c63a9d57c6da4d59d762b3aed65aa03865f18cfccc9db20b63f31e5bbeab2e74beebd40d4590133edfc1facbad0636213e72c29ef75a89bce7a70395f7f6da08aafee0142b41bf71a016f9794f5901dfddc660978a3b33291b656c0dd6366fcee1eefcd8d9b729f64dc27f146b21b4a752acde96ff6018f9dcfccd1983de280f378cdc60130e2514ac90367bc44b6ce5a2478f384d951c176c2507d4d5501acec9f223d3ecb8a8ba2603ba9c0c53563452b15fb4c5ee34849ca6b89f1670df8cba278c3e4d943e976cfa40410e331723e28e3c39a8725cd6e2861031efa362be6c8bb9ca9a0e5dba140813ef7e2ade765bbc6b3d53c08d3f3ff607284d9eb36982bb847328defcba844f537177d8e25e2570973063bfb387329f543848c5df49f99d1bff3d559be46ff9212ae62ebf98fb64c9e80c4a8027846fef1da662eeb6c56c6b91b5eb9e6498588f58626d5063a05da270ad13b8765749017ee1db27b0bf61b7594fda2b4858be5fa7f60e875581aaec8eda120e105eb56a6526ce153a718ed912470d088fb3260e4c048c0b585edda2ae8eabc9ac7acbe41670f2ba1b12e7a2804dd2f7941edec908db4b8275ef7a552aee55b9834b572abd9fb1a537a4ca359bfa6672f7d2c9fdac4d30f4d0af07117c9c167c9cf2d01b513df40425f96654c92729ca7d11299fb20986e2b45f445f2cd06c130e49381031094f53a007a3826ea1240f45957c86923c1c5572ab4d323402478260aea1059fa5048f4614dc4639c65844c7384741be1515f2799b64684a8c0751d9a3cd7181ca81b71720075ea484df5900e19728d81351615fa61c6f32a2e3b55382a7220a7e8e728fbb11dda3c32618c603a68308f698cee8a452ef85a8a9d745e5ee9988b9bb9bf2e6d905f0e61e8ac75c541e5728c9f7a24abe4a49be1f55f2f394dbbd18d1ed7a29c10f220abe4679ddc3885e779dd2f8a5881adfa004bf1c51f04d0ac52b1151f451fef66a547feba7547e2da2ca0394e04f8b2878904abdb7444cbd214af05b230a1ea6507c7a44142394c69f1151e3514af06746143c46a1f8ac88286ed90443adf336619b34b26492565af838a5f5db236a7d9bcad79f1d355fdfb1498606d7e70451d9a3c13541b9c63b22bac6a44d3034d03e5758461ea1636e1f46c173ebf56a4414e68761667552ad7219d77bf8ddb5a6de12e02e3c4c943d4017a6413945d9f74e9b7d23c29d3b73e7bcf08c57669678542def84a1b4b6f93b33f3681dca8a1169d77d7577bdb60746c4b35f77d8a3c6a9c7e7674c4cbbf132bfec2b5eb47a640c300e1f86d35d8ad3bb6c9cba9939c16c7bb38c0a2c02b99967bc0945e7304d7178b78d432f2387d6c8fe427b4c18222f5044de632302b38638d66665ab63975b3274c973999d655e7a9ad7324f85b16086b2e0f36c16341b1664e2cc2ed7a0cc7a413e32a04a3728cd686de9f30b55cecd52367e3e558efbdbd81223fbe628fbbec066df19c33eba76f24fc56c7f0ceaa9f95b7a8fb2f40b6d96ee342c3da9d69dc14ca063a73b337d41953563f2fbad05ca55f7293ddf9bbfc75d5065e4ac2c219cd9d4c5f4b81729fbbec866df91f99a207b2727deed69a64dab4e1b2f5bfc6486b1e80165d117db2cda11c0222f3b705d1446cb879496efb36979daf02b1c6b98b28c6e6979d5a9f97bd74b9495efb759793c50ee39295b16c3ca3ee7154bd1734f7e25c3cb946d5f122405a9b2da2f050b5d4ebf4259f9a5362bdfcdd852f46e31c30a567797c1b0ba7748491dd61b4782e682ccfacd3e0f4b322b0bedeb0a17a28dfe2a45fecb6ce4f7076c91665b18dc83f073762b4ae56f4aedf768513c66e4d3edca6e389a150d6a2b5e7ade43fc771f43fc935227f0dcaef9de80ff9a4d78ef2bf5aebe51612e2bc9f7b56d7e56d8bcbd1ef93bb62ef82adadc57d4956a8b5c5992b4da8cf8a859fae590aaa53a559734a8fd7dbbf3f4267f2dbe02625b6af7a1f0afa97204b89be852b0232fb3a8ee947a70587582a10819505927b3c8b05d64b64ff96ae2b7fb63af12e0bef56c015e64e9ecd7802a7946376b4f08d8b8b3240d29f4959c18b758313a7b198605decd905c98af2ccdc07c9d13668982098f3b5b42920047204ffb2a4e38f96dc84b02c237cb3308bf9a1361f82d4849c0f7deaa0cbeaf591c0ff47a0d431210be8e3cf06b3911867d494c12e0ed2f0678a5c58670736470a15e4eec479c6ea5c2ee8d16f1402d579e51f286cd56ab7a5342dc34ff3a815a9d7539b5645d84b65c5de4064c5d689faecbb320f17aceab0aaccba3dccf7424ed1dc03488fc7af1ffbb8f97863ede370084490dc12941bf91b3045da7fdd5e9d24f8909cf61a63eb5c9cdd021cafb98cbb3cad32b410ccca74ced43adca0ff2574834ceec71aa463e94a55c289f4328bf891325ec951ece29490275fb160e630517c61284f19b17d723f1e8619a0f652b17ca5b08e5b72c26caecc1564694c7b9503e8b507e2b27ca4d1ae558a0923233ffc85a66eee6c2ba1561fdb64278e8906e0e99134ad9d50fa387b2553fcb11ca6f5f5c94492f37f720941fe244591baadc6c4c64c9398e607e472160d22527569fb5bc2ce782598f607e679c60327a261bcc6508e67771c274873e30caecf976fa9f6cf48983096cc48f20b4df1d9f7afd4002ebf51a84f27b3851c20b9d0695d741a7d2590dc686ab860b5719c2f5bd9cb83690999a5e5cc75ae9b0216d4748bfaf10954eb0cc0cef354a5e76de8d607e7f9c603256336c30d308e687e304737f0261d621983f10279849acb59f44307f304e309b1208f37104f387e2049371c6870de62e04f387e3043389836e9b11cc1f8913cc244ea06d43307f344e300f2510662382f99138c13c9c40984d08e68f71c2748733e04d253006943ba19bfd2ed4e48d0c6d47287f9c13a5fb9f4d20e251d5f7766503563670c55ce00402f71385f0c16093128cdd46b629890184f2273951461bf8656caab365ef5e84f6a7e28b96b11262433b81d0fe34275a7821cfb408bd3f2701089722843f538832946a14257ff2ac1ca1fc68a133bafd7543cef252fc8e6856b4bd5c688f21b43fcb8936fc1257c66e25db12d72b08e7cf1522d3076b3831d6ee6c0da73684f2e7e38392b13667433986507eacd0e567f08612638667abe59f47687f61316bf9eca18f248ebcaf44287fb11028d38fecc0470542f94b9c28dd15c413f226c8eceeffd0f15f9cc0d858625b9c701661fd654eace11b4b8c93c06c8da5db08e7af70e284e1b9dc4d2c8e27cef2815bce05ae1881fbd542666fe8ebbca88438bb10e917413166ef6a2eaca710d65f5bccba3cf95b589e40287fbd1028836df54be2b4ef7984f2371613a5b94120795ed98c50fe6621cacdf01bab183d946d63d53a84f5e38b596e6667f6242e32dc8050fe1627ca5d1694515ecbc7e8b76d5cb0f722d8bfcd093bdab00863d39ead037a03a1fd9d42a0755ba893aa653aa45e53fc6876425b11dadfe544bbdde2b5ceff2206bf9c12e7549130fdc8cd362d41807f2f3ed559129779af46287fbfd0256cf0893bc6d152b689bb9308ed1f70a2ad314ad8f147acd77f0181fc434e90f96de262f44db62aea0e42fa46214ad0605d56c61294adcb7a0da1fca34297a0c1dba88c9b13d8daa8d711da3f8e4f3d9fc435cb9b10ca3fe144197e6284b1fc649b18b98a70fe2927ce15825ab73ca56f499e2fa610bc3fe384e7368c285fc40d23c6d152b686513702f9e7710199c416e64504f22f0a51d1046b0e31d6d96ccda12e84f22f3951e63f82cf58e1b08de0ef4458ffaa101e1aac2994c48d852b10cabfe64419adc1cef83a0bb606fb1042fb37f1f1d224be19643d42f9b79c28f31bf448e2b8fc6584f4ef389186db04db9448ff3c8c60fe7d9c60267114fe2082f90f718299c497ad1c4230ff314e3093b8e4fb0082f94f718299c497ad3c8d60fe739c602671d5dd3e04f35fe20433897da2fd08e69b9c30c30d8030368cd80640fa11ca7fe54419ad7bc958b3b3752f0711da7f8b2f5ac61704b1a11d4568ff9d132dec8c8087adff682c0143c5a508d47f708282a4ce7eef4272b7c3142168ff59e88c1b7c951163cdcdb6cae81984f6bf38d1869fd8656c55b24decf6209cffcd89d39d52a35a95499f9bac46203f111790499c9bac4420ff272e20197bdf6c201b10c8ff8d0b48c6312136906b11c84f7282747bde41ab1cc686375b857309c1849531b181c9b8ca8d0d662782998a13cc2436858e20984be2043389af9d3a8a602e8d13cc24aebe3c8e6016c5096612ffe7ef0904b3384e3093f8c294d30866499c60320ef7b2c16c41304be30493715a820de61904b32c4e30195f02c006f31c8259ce0933dc74196326679b2ebb89502e8b0f4ac6ae241bca6184b2821365b4e931c6be10dbf45807425b59082f0db6d820898b60562194559c28376b9473d203c7e5ad8ffa6ec92d08ecf2b8824de27f31a8456057c4156c125fcdbb06815d1957b049acaeaa10d85571059bc40d2e4f21b0abe30a36894bbb7620b0d571059bc4f77c3d86c0ae894fcb3589ff446fa342595a6c083f9323bc590d70c010c790d2df01522f5a05ac341a511886e4f105e58173a25fd6ded7e46f38fe37e4afed7c4abd34a0453c10d3ea2cc81b56b227c5a0d26c56a461d7570d7687bac0ffe8a7ce63695a9dcf9b9c015f2ab54a139b927a5f14f0beb20179e7800abbe4dfa062d700bc53b066dec9a1f5f379b33eebd58799f3fe328197b7b4b52967e4d6964726162ca5fd2c729c139e1f95ba0f290784b37e96fadb477b4da547aa3440f67ca4edaf8574d7c9aedcb456b979b74cf961bd58f5b2bc795829053fc5ff07c4861c350c010100 serializedProgramBytesString: - serializedSignature: 7243203ec15635bb7f9567146b5de991e4d28e858ba025f64530eadc222fd42047cc351dd2a66400eb466eb8a10dd9cc8dc6ab66ab52166ed8c999c5806ec904 + serializedSignature: aa2d4206a8d08c970626570cb9a5b54133b66c69016ac45893da8baa81a801b14d812fa5d4ab0db35f357a382abd96db38cf90abe2d824bd60723221e7f1d400 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/c6adc17bfe41c8845ace2781c5353885.asset b/Assets/SerializedUdonPrograms/c6adc17bfe41c8845ace2781c5353885.asset new file mode 100644 index 0000000..9ab4ae7 --- /dev/null +++ b/Assets/SerializedUdonPrograms/c6adc17bfe41c8845ace2781c5353885.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: c6adc17bfe41c8845ace2781c5353885 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e782bb3b94e0411342b0022d6ec54a02a5050a21099012a411a4a56ed4bda52d7577a3eeeeee6ed4e557777977666772cfeecd73777b7bcf6696f71f3e64b3f6ccf37ce71997cdc866d64f6480f56b3e9bcb26b0416c1e2b666bd91aebaf09d671b5f5cf3e53d7e7b072ebb8c2fa5d68dd1bc03213bcc97ffa44da5bbfa7596715acd27ab38a1559c752713f9f95587f4fb3de2db1cef8d5e5d6ff12eba9486deba5796c229bcd66b17691360944cc172f55c86b116e57a4bef57b3cdb64dd2d114af140b2c5ad76d6af7ceb4e85b8b7da525a3db7902d1666adb6ee1559ef94b3324be63221b1feab6398f883d9870ef2d8511eb9990de4dfb5e4dff5e5dff0f93af2d829c9e73b83f71a80bf39a18be2bcdfc53e468658c7bad6f15d70cedffd463eb78b2d2f63651c5999f2d84d1ebb4b99ef25a17f3d79ec91c0de78327a0259c930ab2f8fbde5b197d4f7fd14c3cfb21945b601799c651ed0a73708bb01b8cfaff5f161bb8ac7a1ae781c6ac763c656197f3be4f37de5b1bf3cf693b2ad675a5d26af0d90c7ae09f41a68bfc746b0a8cf5a61d65a27cf07c963b63ce648dd864b5d3f00e77e7551713a58ca1c26c3f850735d3dcfef7f24cf73e571882bbef2e4731fcbf3a149ea938cff299d46c8303e01e716c7da4be3c852f13ed215ef23e5bba7d81c6bdfe9b207f89f56aee2b623ce33981dbbbaecd8d5d6a54e96f3b9843a28f9d22f22a3a4dc4fc139977b8647db6acbf7b6cbf3112c71ded621897ba36c39f515ebd17638755bdbd7eb8e664e5fde35819e2a6e47bbe256c92d937295fd63ecf388e2dc03c8e1ef7fe6923bc625778c94abe27c68927aee268fe3e471a23c4e60d5e938fb41796dac3c8e9761eec69c798092b57bf4ddb6a778e4162f8e26b9e2baab0c77f70432d5fb93e5b14192cfab67a6f8d079aa3c364c32cc86f238cd47988d6c5fa8ffbdcb1746279039dde65bbf12e860c969b0599eef218f33e471a6e43fdee507e393f08344bacc92ba301007962e0d9bcbf3d9f238c7a90bdbd3a5d3e7e9d3293256cafc029cf3e33879fd4b70ce759d6387d3f0512973ae3ce6bb742ea0d3d9aa618bf79a3406be91cc7bf1fc6bbe6d5fa31c5b7623a93fdbcba5dbd4a8def5278277951ec9a487bd258b892ec613a50e8aed3eaee7be02e7fc38211a9ef8db7ab7b1f2ad2ee03a7ff76b70ceef2f4852d7452cd667b99cc920ecc9326c99ff3756f1b998c5a63dddbbfc38095c9b24e5c97280edcb62cb31f51cb7ed1b70ceef2f4cd2b6251afdac709b8c8df3ee52e6cc7f942d969c7a2fca6b85529f29cc99b6243bd12e90ef44cae4b565f67933a54b917c47f99bfadbd2afa92a4f8be57125d397b3cb0107e5cf2ba261777e535e2b8913960aa3d465f7fca89c46eda5ee2a1fdb8f39d38cfb597e6d953cae95c77279dc3ffaec60e5736be451d6df23d398236fb6dabdd1ebfc385ddeff169cf3e7caa2b2db3c29af55b874d5c5a78a1365bb2e0f88e76755f6b3ed17c9f3f536db66f7bae416b1f87ebbc19693abcac08db69ce6b53dcad964cb19f2a03c3fd03e6faef439401e55197990e4b80773e4e5ec60797d06f09b3dc035feec772ebe89748bc7f1505bcfeafafd61f278b83c82fc90493f8bcc8cc655759def10708f9fab3269b3cbbe78ba1c218f4d12d8d3013cc78f47fab03fdebdbaf2788cb46d1673b67966d9bed2b2731c595b98d64f5ba9b83bd6bedf62a33c3f0ed8c4c3981d655ded4bc7cb7b7380ddd2af227b826b47cb6b73a3d722aa3e74822b7efee7ba7f2290a1bb7f12d04177ff6479fd7b5bf7565be4f5535cb66c76e9ba2773e433ecd4585b237bbac2fec1435c9e26dfcd77c565be8c972fe2c83a5d1f97ad7f97e767b8e2f24c575c1668e2f22c796f1e88b77ef2da7c161bbf7b010eaafc391b894b757f2b90abbb7f0ed04177ff5c675cb651d7cf43e212ea0fe3725bacad91f9aeb07f4c222e2f90c7f3e55157efbd501e0748b93f2521f722792c8b23b78b4beecf49c8bd441e2f8e23f75244df54c253beaefa6a1630a7aff373cb6fdbbe1a47d6654cebebed54bfc1e5cce9eb5730a7afefcd627dfd4a796f9f68fc0b16fc1aac5f2a5f5f04fc44d6efd955e019e8abeafed540aeeefe354007ddfd6b99c3d7db8f95d7af637a5f87fa435fbf3ed656f10c0c5b95e3f1e2f2061767c5773173b67316dbf1d3de5dff59cfe2978d37daf2f3547de726296f5f29ff1770ce8f4b5ce12eb1c3ed20fbbf3ab696721acbeb03eceb1dd418c3cd4c5bdfea50e07aee16e6ac4f6d77f1bfcde52b85517fabb6e556700fdab68c39eb24b7cbeba01e259e51d77475ae445cef90c73b5dfc964a79bf8273fedcdd407fe57377c9e311d17b2d543f918adfc6408f7bf4be22740571e6b98ea46cbe3781cd5ef2a462e6cc938a6d3fe814af7ff641f9cc09719e79581e1f91c787a4fc12e66cbfc8f61993fd0291e5aefbcbe5fd8ba3ecdb66023d946cfece6f49d8ffb83c3e218f8fc9705630679fd80a16cd57dc6544aaf5d854ef490691954eff11e7563c74516d63e58b2509fc43b50f9f9247696ba4d4c540b58be3f567250a2b8e5d9155ccd987a0dacd4fcbf3fde47d59af8bac763d2fdbc6ec19795ee67a7eadeb79d51e7f569eaf713ecf9e0372f8f9f351db22aaddff02b8a6daee2f46f974bd4ede5be70c9bbdc49ced3bd586db5f3ef707780f3250f7ff94e7e52e9b2ae4f95fe09c1f2b5d72551fc433aefb4a6e954bdf97e5f135797c356ae3b0abc03b80277bc52933ae4f3f2f65a83cf16f706ef974d778f57ff5ee0679dc2865fc03ce2d199999b6be9979b8acc82617bf0de03a3f1e20efff0bceb9ec2d71f47b413e7ba0cbb603e5bb8f26f1ae2a4f0f72d9769094f1b76d5bb7e67164bd2e8f6fb8e250f92c977788265e0f01f1c9cf0f963afc07ce2d1dbaa93ae09b4cefdb9b9def6730e7fbddd598e05bf2f8b64bb74399b32f4cf599aa390e1a9f646a3e81d2fdb0e833d5fabde3d2ef3097de874b7d23400f759d1f8f60ce324af597a87cf348d77d55feebc6dae3a5910fe5b1953c7e1c8dbf886ca7b34fa23287d706d7d4332abe3f92d78e02328eb2e3a187aaa7ec70c9fe0cc856ed8f4fe3c8d9ee7adf3d16aab3f5735b7e96ca73bf60b1ba7fe992fb35d04bf5f37e0558a9f7be618e71754f7aa932ea18e90b19f27a3b797d8bbc5e0b3ca7aef3e7dac8fbb55def1deb7c8fa976ca77e03e3f97732032ea24d691c936d2a0ac249efdd17eb68fac03448e93e1d405e796cebdd438b7d2fb7897deaa5dfc1db8ef556f555ffb2581bf59faf4ce94e7aa8ef3338867d516ff1d5cd385db52ea7a2273d6a3641f5be404e61c73394186adfa6d6459ca7e4da0af7ab7814b8e7bac3f151b54d9aa98c54b0bcade93649cd403e7963e7d545de32f0f769d04ec3ac9871df1fc429597b2ef3243e5db2de4f15fa0c3c9f2da7f203c5937e57f2a3b46283bfe01b21a38e5464e91e125d1e71d8930473aaa9671aa94a1e605f496d74f033a9f069ee5c7d399b30d76ba1d3f7d37bb64abf7ce9061c8b1e14806b89e201df52d703dfb45fc78526156b7174f63d1395e3cdf5675865ac9c98bcb54e519ca5e35b7d0ba3e6aacbca6daaf8aeb99cce9db67da76f693f313c59c5398df9de5f22925e76c103f678367f971ab2b7eb6da610c94797bc4ed47e7b87c40f6c544c09c9288eaeb85e3ea8ab1ea4be0763f0bde55b25ce155cb3fd7e517e7cae379cc99df9d67ebdf7fac1dc60035e6dec4c5aaa9cbaef393b0eb7c8d5d8a71baeddae6b26b9b6dd780f62ebb9ac9a3aa2bbbdbb3fc59352f4b95d7ad64988d9d618a3c155e6fc19c750cf59cab8ee1d639a3894b67d9071c69c9a265791de0636a6c61303807e9b09fec8f8ab4b2cf7baab18178e9ed02e62cfb2f907eadfae72e648eba4fe42279aefca20db8ce8f17cbfbcdc0fbea3a0cafb933bc418ae525ccd9b655fdf56e96ad9df7459cc9f8ecfb6062bb595bf9dea52effb954eab340c68194155176aaf7549de84ae6ec2fb912f12f7e4ffa64f71771fd222a5e2e03694185d911dc03fde5d5f73bb1687f39bc2ec744235748f62dc0393f5e1e0d4bfc6dd99f2dedcf567d196abecd2e3eecef9ad87e31c6cd9fbdca152f5749bd643d3747b5d332e57be359fc32acbb4bfed592454b70ceef6be667447ac8636fa70c475b5acdddb826fa7e757b54b5437b45ef8d96edad4837f01e3faa39f5ae79654997a3fb4b396aece44b706ef11b2ce77f0d5ee0e2b72e013ff95ce43af09c0aeb7ae03feaf91bc0b5ebc1357ebc51b26f05ce2ddd72b7bbe4de249f6b0dc2e6c79be5f536e09cbfa7ca985ba4edefbbe46d073add22c35c2acffbb8c2b89545dbef7c8ca4d2c5e15620eb26704dc9006d7f153e93fd78196d651c9439c34c1407da78b98d39f34b391613b9dd15ffb7dbf60e91f13f44c67f751feec604f1afe4caf665e40ee6ec6795632c91be401eb7b59d477bee74d973a72bdcbe2c61ff62448e798b3126aff5d0bba50cb94e2372b7b4a33d38e7c7bb40fcabb6c63de09a1c2f8adccbf46d81fbc0b3f78167f9f17ee6ac6bde6fc7ddb032976cf5de03328c0ee09c1f07cae383f2be2a3f14a787800e0f826bfcf8b07ca71338b77418bacef69f611391b01e61ce32e61157988fcafb9dc13997fbbbebf9c7e4735dc0b9620ce5ece29413a3d7e3c0c6c7651c80b8d3fa8fe45a5dcfba8f39ea5979aa8fab5672f2b4d7545d4faed5893ce1e2a6c6a65e4941b65a33f38994d9159cf3e3472cb5314855f77ad2f9be38b7d80fdfa67faeba9eabdac99fa660939adffb942beca7ecb047643a9f13fd1faa8ecedbfeb2ff3f920dee7bd541f5ff2b3f795a869109ceb92e6a1eafec2b17fd0dfcb96e7164ab6755fef00c73e601cfd8b247b6763e97946ca5f7b3cc9117459e75861d798e39dbd1cfd961ee2ad799f147c5797397ae2f03962aac175d61bd0caef3e34b2efb5e72c9fed7f55e8e94d7dd79bd3a8dbecc1c6974e4a14e398253bcf8560c9e77f1c4ec79d1f59eb4a77a7c43d973a74bce0b408ea5e7aeee3880638b8af70efbd951b55db29e77c9ece1bc9ed0665ddea7e25e9dcbf1bc6a1f7fc5d669941af7573e509745dbf597b964d575b24b5a9746ae305e75f9e7abb62ea37bba9e4bb06e47f53744549bf335e03bea1c842f9ee7e1f68c23b3973cbece9ce37daf4b1d557f8ae2d833818e4a9ef26fb94e32f286d4a51738e7c7375dfea9fa811593b798a34e2cce2dbdc66c75c979db25478dc7293dde91f77bbbde7b07d8c5eff7b17d61cc752e7b12d8edbc562722daf55359092bb46ac7d9a21382d700935d1aafde4cbc289e8bae2b522fe3abe379b0956c93f56a896e65fa3cb1eebd920d61b9da95e91d846fa9d02788df85d613a5426856464c1077c504c1952bb3fe958065f515d6f52962553e5f585f6add19c4665847fed6522b8a165aff9c52e65bc196b12aebacc0fabd4ec85b6aa91dfb642293f8127cf73b732d99f60e01abad2b0ae83aebbc4c68982f7eaf179a9608eda759d72ac57e056bd80aab91bbd66a28f0d0626d2fb7fed685592091e975d46f14805db7b72350d134d1b2866b9f2d7cf1ff62a4266284a3af9b25d361ed6c51e21d171313ffc7d0ce64f860c9342943f456591e0dafe5b26c319e323786a0771b632dd4fbb7cd7b18cb8b6b8b9e0c8fee4ec282680c7f3bf8e7bf4bfee9794f1da7694358b6e8b2ee9cc0b47860b9bc2cd1a3ebc5843a756ae77045ddf8233afca2aa921f207efbb952f19cf708a82b0a3f6704882a488195abcd0185e73ca17c9950cd6d0c17bd46e48473ad67f9bd62f1d732a196babb529a53ca0e10c6c6c46f0e57a69e88a2d802389199582465e822498c0316d4481ac1b6b6891f4df5abad884653b6a855b58fe3cc5858a2ba9521eb5c2ab9dd7bdbec3505a77eb5a38e3e5e1a8a784925342c666ae962a661d0c9277179112f5e1a55db158d17fea367d818f1ed443a60046beb08360adab7f9bdb5424aa1f5ac7786bcb3a8bf3b0bd2036c8a3861621530847534087338c2661aad589d062eadb84288e4babac8695c3385736acecd7b66dab910d4419dbb45dcb2d5ab6bd7d3d113dd8a4b49e9a93663bed538d8c3ba57683d5f222aa0fcfa1c4b62a1153697374e84106d673adf884f968f410e7493d5526d25a8f6042d60bf9a61c4eb6b88e7707f6dad710391c7b913430b3c3134c092591bbfc9ac2126b9ad5fc98d30c9edfc4a6e8c496eef5772135db21133371605926ca25d2deaaff1d6bb2b2d63d68bf67395f5beae6b267e72e9907472e928924b26d3751879d3084b264d7571c72f76d229e98eba8e78d435c30477f629b839e66d5dfc7a5b0b9db7093b96199549ab9aa9f78c7a97a43dafabf0bcde2964d4f1b4c3bcb025965967a621b36e8509ef9606e1ad31e1ddd320bc8dce2185ff07db22b79ba95c8ef75a171fd3e99a7493a227c39acbf175c01cab2d960bf5f2990bb5c3e2bdb726de6b798cf7f698f03e6970aa0e3ae1a239cc621b7fff593f31c21be3c23b629af7d568be607a8627cd3b61397f3fbf397f674c727fbf92bbe892b028680e234dc2c90e304d117b2e97b0d95622da8fd923032adcb56254806ba44618e65ac7e5428b12d1075692c4c054fcec6140351fd013248a83492cf961327a2bf8f4a00c91450d125914ff3d4ff4fef121b04922064a454883b4daf010b0e7158b998c6f275d2562bb0ed26f952d42378b0d96f9ee82e534399a9ce64d5d361627a7e98a25d9c17e936ca64e324fb2b91a5fcde1becaf7fe6d280a8b9870b2f170bae9b206515939a046b306bb8783cb5b2ec67c6d79b318df117d8370d5559603af978e53603d536e8551229ddc4f66c0e7387571779d31fb479f1c868ae4b05b12c981d22a2c0174d77912ef0ae29b25c70c53f0527fae55a19ec0968864b8bfb8cc29d9b15b2a1ee5c30d854c0ddfc6f85b3ddcdf7ae8b4e12d6cbe5d72c2ba502b5c704f4cf0089f827b61697ca4df34de5b2799e7367cab60bf35ac3e98daa3fcaa9d85e5a8a33539eadf116f396a5f4cf8188df07b33bc09ef872585dd92f191385edd1f13bcbb2e8d718f9a207ad533adff6bad37785ba250a4fe4c51184673834c2bad975a7ff1027b00787eadf5843d5dc28b9e03747a72a718ebd7290662f1364e136f3f7b8cb74198f0f11ae1536b79139e8dc5dd045ddcf1825d37f81acd0d33c5c4954c3157a94a7438148b98ab10f19ac90eb46a1e0759c74aebe94c510e94897b99e20321e522aff512a73998fe1375fa3704facf011a7a097130966f4dd2e45b118ff956ae4e387f7e32432a3e7cc35cef159f2118b6a93a6c5d84751b45cdb54a3c9f2f1ca0a4baae5c9ca602324fa357b6e8e059c36ab242c65b0b7c665785f83b5a45e161476710f8a9784d63b1152ff5a3af78f12d7bb3c4a4ce20b4c72a5843b14c750f4da61af192a90ec3d2c20c2c2dcc4c292d0cd7f99ce8f75b57a33e87a7a8b942364f79fe2bfc7cd3db5aeed6bfe8b3cb4bc2b3d2a5637f31d1bb427c00ca2657c133533ec8b70c7ce9c9862f92843e4dcc16692248cdb17431022bb5e7684aeded75bc95da23752e2bfa43cb6bd465270a0941b8ed9e3ab7159db6c39288fc74ead9554c00ae10996ab1cc54edacbbab98fd5f2e8acd12eb3acf78e1fdfe62a7045e5f9a2c78af16e4b97d85a2dd8b39f95ce1e441db8939faae580190af29003cd5aa476149a8409384fef6988446636acff3abf6184cedf91ab537d7f5a6f66e98f0bd34c267d4f3267c779d709e31f395be7e5a886331c17c9bde98ea26efcc50ed8422574b7199682ba8f65fb1b8b2c9fa5d665d2b122232c5646e3520ea45cb7118db7d346c9b7b643b1e43b0d027db093ac1dc3d17252338cef8da449d605eff5acc90fa17df14d77bfd6b12867d8906fb451eb14fd609e7c97ca9df643e05935ce857f2544cf232bf92a761928bfc4a9e8e4562b12612f9e42d2f91b80726bc4423bcc0a3f0193ae13cbd2dd7e54dbd18efd4895652ede653b45fa3d07aad52e43c9956796f97b9c58efe11dee7512a1bcd5ed2f94c4ccf153a3dedb5637cca07af53148a3e341ee26cb6ca53a8b330f42b35e84ff0887e3626bc5423fc0b8fc2e760bcf6d3f16a9f205e8bc5b4aee8d5c1d6552f1cf7c4b459a5d3869f46e3cd4b387331a4651aa4db1a7a439a8f19b15a67042f116c7cbb5ac866890ebf42b9ee6dbd28c6bd632cc03458a3d380e76c33aa2b067352ac16ccc390aed5207dd523d2f9588ebcce6f8ebc17a6f6feba4cb39137b517606a97fb557b6f9d645eeba86048ad83770878af75ec8385538585b33ea5701662a436f825b5088be08d9a081edbd85b042fc6846fd208dfec51f8be98f00334c21ff5287c0926fc408df0ce4dbc095f8a09dfac115eec51782126fc208df0ad1e852fc3841fac117e9547e14598931fe2d7c98b31b50fd5a8ddbaa937b54b30b50ff3abf6728de46c31ed2fc869a3eed94fdea68df26dca939ba97c04d34f194d143ed6a5b442172fbc843e52a79287a27c25e64d4769bc6987c744508a093f5a237c914757dd0f137e8c46f8168fc25761c2b76884376fe64d78191699c7fa8cccd59860bed83fa62e384078e75a91c67875be442ce95e23fe5a23b6d5281103d785c2f7a31d4e6ae09aef119029bdb75cfa7499e5ed83acab5eb45e83697dbc4e6b3ef2ca3b71a3f566bb2969374374f30a33591f59ebeee349afb5980f9ca0f181ed1e1d6c1d66f4893e7d607f5d3e2b66409792e6b3d83cd202d179cff7f4582e3c65b5e759a7f1f3e49392ce934f1679329f9842a72b967f97eba29bd7ad4f6148dd9a6f61de90abeca96e5da10b87fbec691a9fcdf3986f5562c24fd7085fe051781526fc0c8df0233d0a5faf13ceab357c53735fd59a0d98da6769d47ed6a3da1b31b5cff6abf6264cedad1ab55b37f7a6f60158de768e2e43e75e954ca748a64894f6c617bc8899c3ecb5e8f65ca942eb6ab19845b5529ccf114993f72c2e130580bdd5c612d1f9b1428c25965b57d5acab4dcc5ea49829aa63f6c64399222b289673f156892b15e2a912108ebec0299505272ca2bcf66e1e8845d1b99a28eae9318a366351749ecfe2e7204cf0365ddcf3d90c05d6c93a47bc7809ef602c633d1fcb58f9dee8de3b2d0ec1ecba5067178fa685d53da5b6ff2ef6582d3a148bff8b74398bc7f83f0c137eb14678ed16de841f8ec5c925589c5c9a529c1ca10b87677a9725e3c471c6f98ec4045fee53f05198175de133d91d8d09bed2a7e063748279dcf36dd8dd733bb9002f733bb7605e78b5c60b07b4f4e685c762c2afd1089fe151f87198f06b35c2d779147e3c967eaec3d2cff529a59f1330a7b94197a7f139a74bac7fbc3fb14ce4d6aa8c2db52a2afcce3ad154e4e5a1170f3b11d3e2469d16adaab5c8b17ef392978f4dd9b38352d7e1244c879b743ab4943a0cb1fe1789c6107f67a3f53b750d4ec634b859a7417d10177c0d11af197909ed145d68dc7d6fd1b8efe856dedcf754cc7d6fc5dc777b4aee7b1a9635dda6c99abcae763e1d2374bb86d0ef1e099d8109bf4323bc7d6b6fc2cfc484dfa98b5b8fc2cfc2e2f62e2c6eef4e296ecfc692c33df1b2a6dc34674d5b312dee8d9f350d4e63d6740ea6c37df1b2a6bc34664de7621adc9f286bda4b84e76dbdc37998fb3ea071dffa6dbcb9ef36cc7d1fc4dcf7a194dcf77c0c19ffe0839fead805189d473474cef048e7428ccea3189dc752a2731166c4e31a23bef168c4c518fa277ca2bf04d3fa498dd613db7ad3fa520cfd5318faa753427f1966c4331a23767834e2724cf8b31ae1b5db79137e0526fc398df02c8fc2afc4f03f8fe17f2125fc5761cec93f7c80166b43d25cac5d8d69f1924e8b68b1969bc662ed1a4c8797753aa8626d681a8bb56b310d5ed169d080458bb54962c06badc79eaaeb74e171077e55e3c03f7b74e0eb31077e0d73e0d75372e01b3023ded01851d6de9b113762c2dfd4087fd6a3f09bb0e8e6df6cf0532edc8c69fdb646ebd11dbc697d0b26fc1d8df0628fc26fc590bcab4b017c68297e3f7d6c4faebf3e7bbbdfd4ec5efaed5804bda789a04a8f11741b26fc7d8df0ad1e85df8e65191f6059c6872965197760467ca423d4d19b117762c23fd6085fe051f85d3ae1bc1bf89364b28c38ddc0776b04678b8dc46a668c3e76e7a5f48ed1efd0f1d28ed17fca128dd1fbd7151ba3bf07f3a5cf74a9cda32fddab13ce8772f9a7487d0de5de8749fec2afe4fbb1f2e1cb64fc3f4ea6f980ceffc57677cb6bc4fffdec8916dff3bf4adaf3bf169edf2f8ee7fbdbb94d1f130f62cef38d5fe77908739e6f7d3acfc35832fd4e934cbfefe42d993e8269cdbf0a1d5325e25b228c13cda112b12c45b7a029535497323dce3d7b14d3e37b9d1e7c4f156ff21fc3e4ffe033761ec762e7474decacecec2d769ec0b4fe098b1d9e4656ca2aa28a8f92eafd3e529d19f82466e4cf1a23cbba7833f229ccc85f7446f214a8e619d8f559e7344d2f663d8d85fcab2e645e23b467d564576fa59c5dbd29ce6c2b411433afb3399ec134f84da7413bad0633c45f95620701bbd69fdabab167315d7ed7e9d229495d623746f7a2d37398e3fda171bc1376f1e678cf6306ffe9334f780113fc974fc12f6282fff629f8258cf33f1aced779e4fc3226fc5f8df0755dbd097f0543f29f4f24afea04f3dc87efe8e5a731f49a4eb0bdeb3dd20ecd88a4d20e7d1dc35e2b128b7d6a376fd8dfc08ca88d1951272523dec48ca8ab31628b4723dec284d7d308dfdedd9bf0b731c7ac1fd164a77ca9e65c06b7892916756c959167b1bea2c05b237f3b5721648a33bbf81920b6bf2817a5be9de55688550a9922638e2e03b73b95f882e675ae9a810a877726d945ecf2eaec3c5364e6c51ea7f6bd83b168a063c1f713837bcdd9b5cc68011b5d92bd416858c6e0a4d995a208ca4c2821d77adaebca8d77318769a87198da1e1de63d2c4935c29254e39492d4fb98114d3446647934e2039d704eb4a92ea6f9a2107d17e942d9b9ca57bef0d685bd4551bc38cd8a7bb7af988e6a77ab46fdda9902d60acf505da8ce7b95c2af2a35a96899d0702de880b565af95ad532ffef5211635cd345153bf87b7a8f948279c377d9b477c367d3fd649e69ab488f8dfc7f7139d70be6b56cb64cae138fb1aefc060b7d2c02ef608fb530c766bbfb03fc378b4f1c9e3738c475b0d8f473df2f802d3ba9d4fadbfc4b46eafd1fa6f8f5a7f853976873438f6d718928e3e917ca313cc15e98415249d532a48bec5c2e98285b34b4ae17ca70b87e7a25d75650a6f242f6113442e5ec456596580da28ba42e4cdf6d7152a4553d4de40cc4b0efd3f2cd2327d46daf7981f77d365fdbdbcf9f10f98d6dd7d6afd23a6750f8dd6791eb5fe09f3af9e987ff54ac9bf7ed685c3f3eade7ef3ea5f30ee7d7c72ff15139ce553f06f5884f6d544e8ab1e23f4779d70be2542bf64b43e0217fc07a6757f8dd647f6f6a6f59f98f001ba94d9c79bf0bf30e10335c2177914fe37267c904678cf2c6fc2ffd109e7dfe9cb4e2632bbe282ffc504e7f814fc9f4e30b770701a4a73164132915cbf9948442799c7e2104d2c6ef6188b1998f03c8df0ce7dbd09afa513ced3fb509fe9bdb64e30cffe86f9ccfeea6038866b70ecf088a3ae4e387f7e441afcaf9e4e384f35237da69afa18925d7599483f6f481a60c2476984bfeb5178438cf7e834f06e84091f9306e18d31e1bba54178138cf9ee1ae673fa7b63de14133e56d7a5ea5178334cf8388df0d103bc096fae13ce5b02e375ad8c51e2b93560834fe7a6c3aa0fd579ad4cf40df15e243526ebdc2e94ef30a3b60ab5f77751bd51eacd6e9e5a2b2d743671d79880d5a027a654836e8945cc245dadd163c4b4c2844fd6086f3dd09bf0d698f0291ae18d077913de06133e55237c9b47e16d317f9da6f3575e1351bde6a90f98b7c3c29cae0b934f218f8e60a88fee7809af3d06700f0dc0eb3c02ec80258e1958e2989952e2e888419ba583c62771a879f7a5626b1e9e19ac109902ef644e7dfe7f274c8fd958e4f1b072c477f00a45f6e36d00b53316de1c5d782d4178b1e1f22be59eddb50be63e7bead25fb637f7d905336faece3c5ee79cec9825658f4594579ba846b5bc18d81533305f973e3c1a98891958a03390318df438aa77c3a4cfd349af579d7d65a7b06570770cd37c0da6821c6f987a60c2f7d208bfc9a3f09e18a505c9d4eae320e98509dedba7e0de188e7d3438cef088a30fa6f5429dd3709fccf6a47c16267f914e3eff4452ec129099223dabedc3a377bcf533f7c53459acd3844be07380bd46563f2c947d75a1d8df5d89dd56ca4b88fd3521668bcf73f3edd183da15b5c03ae37b3f7adf117549844f5a7082113502ed1ce7a511de23db26c6b278e163339707e8e28a9f1646f8c88e53a5e9330fabb7adf37319315153078f9a8198332cd33903ef6d51a5f272ebe21256298d2af5e8ea83b0708b74e13643c35d23a7a878093b1b6b68176b1adaff593f5e1ada39582f5589cf5eaac1ba44b44bd08968829812519e42225a1ee143354efb07214968059284e2858e25a15c1d37f109f3250172b39fb38b877cd141506a5d992d269ad8d3562a5260ba32e2f5e391a5826c8f18cb53d50fa33e44970c787b74bf88cf9ef13c4cf22abf92876292cbfc4a1e86e538abd3d0b5371ccb4ad7f8acd58dc078acf5cb632426799d5fc9bb6292f7f72b791426b9dcafe4d198e40abf92c760922bfd4ade0d73ba2a9f4eb73ba6f27abf2a8fc54ae60d3e4be67198ca1bfdaa3c1ea3bcc927e50998ca07f855792226f940bf9227619237fb953c19937c905fc953309f3bd8a7cf4dc5543ec4afcad3309f3bd4a7cf4dc7041fe653f01e98e0c37d0a9ea113cc57f01e918ce0af71c133b1fac09169a80fccc25ce328bfae315b27993f7f74323ce2ac8e9983813ec627e83d31d7d8e2d335e662828ff529381f8bbde3fcc65e01167bc7fb8cbd7958ec9de033f6e663904ff409792f4cf0493e052fc062ef64bfb1b737167ba7f88cbd7db0d83bd567ec2dc4209fe613f2224cf0e93e052fc662ef0cbfb1b7afae1322d33a8df00ffc04bf17846eaba0f4ee0971663271310827b6048b8bb3fcc6c5529d649e40ce4e46e59371c185985f6ef5e997cb30c1e7f8145c84a5fd737da6fd622cf6cef31b7b25188b6d3e592cc7049fef53f00a4cf0053e05afc4205fe8177229a6f2453e55de0f137cb14fc1abb086d6253e1b5a6598c697fad47835a6f1653e355e83697cb94f8dd7621a5fe153e37598e02b7d0ade1f4371954f14e598c657fbd4b8026b195e938696612586e35a9f38aa301cd7f9c4b11ecbe2aef79bc56dc040df9006d01b31b56ff4abf6264ced9bd2a0f60198da37fb55fb404cf22d7e256fc680dc9a062007616a6ff7abf6c198e4dbfc4a3e044be4b7fb4ce4876282eff029f8304cf09d3e051f8e09becba7e02330c177fb147c2426f81e9f828fc2fced5ebffe763496f7dfe733ef3f4627b8b9757a7f84af024e2265f7c4856fc1843f9006e1c762c21f4c83f0e3b0987cc86f4c1e8fa9fd701ad43e0153fb11bf6a9f88497ed4afe49330c98ff9957c32566a3d9e8652eb149d703e85ea896452649c5561a7625a3f9906ad4fc3843f9506e1a76331f9b4df983c03cbfe9ef199fd9d89a9fcac5f95cfc2483f9706d26763c29f4f83f0ad189317fc32390753fbc534a87d2ee6232ff9f491f3301e2ffbe5b10d93fc8a5fc9e763a45f4d03e90b30b55ff3abf68558e1f87a1a0ac78b30e16fa441f8c598f037d320fc12ccb5dff2e9da976231f9b6df98bc4c27993fff4e322ac71949bb1c53f95dbf2a5fa193ccd7d4bf978cca71d6d45f89b537def7d9deb80a63f1815f1657eb24f358f9301995e30cdf5c83b1f8c8278b6b31161ffb65711da6f2273e55be5e27980f0ced4846709c81a11b30c19ffa147c2306f933bf906fc2207fee13f2cd5849f8451a4ac25b301e5ffae5712bc6e32b9f3cb66329fb6b9f29fb36ac90fac66721753b06f95bbf90efc0207fe713f29d188bfff964719746707637eb34b28a99f1b9978572c242fa26397caf6316713113eb2e7e88f075177cc138adbed87a8cbb75d1ce63e7c764a29d6b8f08be4727989ffe14895da1a67e6202a883fbd5bd582ef9731a72c9fb30e1bfa441f8fd58eef0abdfdce101ac0afb9bcf2aec833ac17ca5e6efc9085e8abbc94398e03f7c0a7e1883fca75fc88f6095eebf7c56ba1fc554fedbafca8f6189f19f3425c6c77501f0af42fc9b0c934f71c14f60b0fff309fb490c36cbf009fb294c72c4afe4a731c9197e253f8349aee557f2b3584e5a3bc37f4efa1ca6761dbf6a3f8ff595d7cdf0d757fe02c6a35e1a78bc8809af9f06e12f61b01bf885fd32a676c334a8fd0aa67623bf6abf8a496eec57f26b1890266900f23aa67653bf6abfa1abea77e739df3c56334baa5555d9dbf2e966ba34aeadbe37cfe0d5f70e31d625a30356257f138bfc166988fcb7b0c86fe937f2dfc6d46e9506b5dfc184b74e83f077b136759b0ccd9e1313c5e95ccb59f2d944b647f5f7ae6631be23d50611c1ab64d40f12bb534cb3ee47371ee757f42d37dde47bfe34742deef86b99fd918c359e1af8ef6156b6d5597974b595f3ac36244f7476025d2dfe9e26bf415e2e3ec76127d069d54f4eaafec49cf32336e59247beb85b6c49ac127671b94e7a5109fc796f7a60920a18df216285b8eb640a13ab9bf77c4b8ed73d4cdec748b7c3fc098668db34c47ac7a6b5d6ca149758be512ee2dcb6b6407ed6cfad6df45dfc7abafce903cccaf63a2b7773590999db764e1631b65ad8e8d6d21943f04ebcb402dff262d98798651d7496ed9e54fc8d139fb229656ad70cff3117bde3c5b68f30db3aea6c1be6b26da6889d95d2327eb6b1c62cf918b3a493ce921302cecfa2eff08f16a96d5f8bc1b7102b3c783964875bc1cb922a51cd80b91eaf60a52f6ffb04a3de59477d5c52696386a0516144aeb603b3af8bcebe19845ec5afee2f82e156d9d5e1521174293b8015a239492ab1fa2966f52e3aabc7c4b51ad774aeb0c5fe78976da32a8df9d5224928365da41e9b9f617675d5d9b5b7e79a5dbeb8e3acdbe924d8d7e6b0e8f6cfe34453c74f4d309578fe1ce391a9e3b1472065367569fe05667337ac9ee2cd07940ff34d108b842018cf5e3dc28b655f629675d759b62b62d93c913ecb64ddc46e6aab56cb7c998a8b636283a68df21566510f9d459309735f15abf64e82cb98bd516ffa2cfd1ab3b4a7ced2d10c1b1fd4e5144e0b0ac535db3ace64aa88e572d11a2ab24adc4d69b4ea1bccaa5ec9b4099ce1c21ac23c110be5d6b33c1dae8853fa3965a4cfb26f31cb7aeb2c9b9030e74cae5580e7a1f1daaca9e694df6136f6d1d93805f5495ee35d663da46cb5b7879d243e51ab762dc7f312bdcc749784ffc36ccdd2d95a42dc7aa8b44a827241c96e1dcc17de5e5a9df3a4a73d9c0aa7ef314e7d759ce6d5582b2b3e21ff1c7ec038f4d37118ef316d9890227ec42cecafb3709a470bf7121ebd0689919ab0f727ccde013a7be7127a76450a758d7410f8192330305d75103b6f1b076a20f456fd82593508eba1f06ad564f1446c0cb9f39ce4e57ab1ef57ccbe6c9d7da37cd41c2b4569c477f85d2edb79b8550531cf7ab1e937cca61c6f71e6ce7bc689fe8412f1c999449e47597afc8ed93718b3cf4b9bd1b6758aac4744eff2118ff8b5c374d51cffc0eccbd5d9d793c5ef152cb0085368f927a6e590f87d7b5e62213fa558a0f4bdbf30abf374560f44d35641f5503dcc239657f767f3f2b04a5b174bad7fff6f4cefa13abd47266c714d136383bcf7b1cccaf3ca2ddb568b5dcc63dbbff16220f516e43f983dc3b01a64fc34c25bc37344ad4a7d13c9eb5802af8d2c4fa385ff62160e4fa68dac1f1b98267c8ff78317ca3eaad8f80a727ce03fccc611580f5532fd00c958995a8e91baa57c1ea4d6d2913a4ba726159bee911e3b1d2abb6b325e2398b5bbeaac5d90305e697bc6a9fbcc33301aa3b051622f65869af4952f9ee2ed21ee17bc7550265a8b85dabab56d8558cbe0c1925a9825a375960c71c5eb04d17e5b2f6b90b07612d5269ed7a6c786da980d6392eb7b8c86eaadef11da88df498f8d75301b77d3d97812aba97e26e7687ebe90b0563cef653cdf49b06647f4eb62e477d791cf456ac589c7c778fd6ba678da8e9bf4e5ddf5300bc6a63e27619241758efa987de374f6e5a5a9f598eefa7c03cc8af13a2b16a7c90a3b557a91344e8c5314ca384fed4d2f5c1a625c26e8b8f472796f344cf768748948837cb6567ae2af11a6e7c4f863b35ed9c1988c5fb6528dab37c62c9de425478cefa92a9ee027c1a769ea3da9c55513cc82c9e9cb319405a564f97a53cc8a29e9e8b928162539ff20b5ba9faeba4c334cefa9c9b511f5f5b57cebf165ccee932d32a4d6d61cb3741a36629c8ca5c9cd754ecdd2d4bdb10566eb749dadfb10d650552997fa8831de82f442a42546640f6cfe913e7dc6ae70afa9718856984533b0d1eec46395c9f4f32433e2e97d5434755f6f8d7198a9e3d0cf030715a7eafbace9eab16883693c4ba771ef989cc8dd7f43578f6a8b693a5ba7e9f038a59adbd3dd358b42918faa1a3c457a6987d9322799952e586f68a2b657d03da1ed312bf7c466cd7acbe7ecfc3cf66e6c8f82fa54341e9fb152526b9574c06c9e8bd581b11225959a7d3a4aa78e9805f93a0b16d570790d6336598f56ef78a1d209a35290cc0c4d15a297d41ab50cf3e4f4a4d2ce9865f392a9757b2db1fdf7cda76e6917ccd2f9c9a44dac4fdbf6f1612c2f817dba74cbdff262c12e98057b25df63c7c3f4de6367db875d4f570c75c5ec5b809518e9e8eb1a6f1de3f72150f69a646236ef9d4c5d004b7f896235e8b4d70db3729f74cc217197955c77dd8ce9d46334b5da4077ccea853aabf7f469757ec21a82b73556fec7487a60f62f4a6604ce6ddf04e1dbb1be0c7b9e93b98ed79952b1b12766e3629d8d63b579b27b1465aeb85728e74bea7a07bd8fa3a4d6eaea8559b72f966ee3b754f245cf6da9c64f2788feaaf238f5b8e8bbb3c50c24bb272ffef8616ae9b63766f59254e61c79e9870c2a5efb60162e4da62ea4279c5a3b2571cf453deb5f24c2375b9924a4d833b8d68a77786b2fbb87752b92539d7b0eaa6e610c72b446a2d779f8abadd8e0655941755b826f36135f426186bd9195f8e913e1602b65853cb2dcc5c87eb34c482e02de3a4810b2d7bdf24d7a06b119622ca0b27a5b9e4456e85a558340bb0a5a97d8a6c5c8363b91483d6991926591e65350773a4b97f158ed266335239b0f1546faa7e84d89b528e2a1d5d2fb50bb18b23075e874b705cc92bd8211be9fec1211cc1cd189852f2a4f18b2fb53b6ee90070a01aa3d9a50dc3c9005e8c47510ee664fae2967f674b7772d99f5ea64e4f01829a6c4d60c608bd683a6cb3c86cf580903aecebda2b84a82f1b2e812fe0aabf82eb5e43bb75f0803b6ab00b6e594d8f8766713456fd63acbcfecd952aa668325d38a5020e4bb7f28842b2811f2cf6ca88efaa9a201c305148a2e199e4c67b355a1007653fd28b09594c05a8ba4ba84e5b0e87ab930836bde280aae94125c4b0d382e904fbce5cb07aac4d570140c4b5914da7e94d0b880b90256152bd7160fbcc714ce7a0903be27bb47f1ada24eaccedc6db2e804b017b6aae55d76a20d03b8acc651706594e0da32de68ac48ba540d03bc334099ba9a125e639968ed5c4e4deae29358c3e165337a4641ada104d5081409b31de39761c0d4b97314d35a4a4c0d00a6e8e6256140b4a56d14d13a4a447505a28a5065e6b59b44e1ec4f09a7bd7532bbba07434dc7b11786c1ca052f0fe7c801a93000dc0e126039752d0c6b9ec3794b25227186a512fb3dc8e62b28f1d507f91757934ff00a03a0175b4401555267f0b3c54c9fe87ce370f8d0669004ab82f221b5854f18006d6b1505b49e1210ff66926aea4c621b85d555d5f573bebed91ef79c2b3cac58f85b9915601820f21f0571032544febd27088ff7f7f3ad097972ac92adc67037825a8311808d94289bc83c4df9db2659e198279a456140b515e46d9b82eaa5e08d6e38795335bcc354b1fdbd5e14dc01d4bd14101cdcdf6b9ce8b7e0e3dbd19dccc2006f33e88f3d90ba974295a8d1edaaec4df2c2006a3ba89d6da61e22992992df2ad7eaf289d6e3e522a43000e3135114b08382ed75754e472f0e597e5606c6960ea66f674e10158e22cbbff483c1aab91e961c2d6b6014df21f4234cbc263691d9bdafe1ada73d59270aed50eac43a49f45f5489c0a3bbc7c77a5f18c0ed00e00ea304d714e472611dc7e453fc14acc3e947cdedf9406b85987037a346032f3b82baef76ae056d024bfe432c6100b845b411ead5710977af864a7d26a437eaf89ccd66ccee125827ae56caea8b630e275fc46b9ce647c239985929770f6525cce7b2929ed991e57958392bc5295e594955dab37cf6f76479981d9ae5290bcc4aba2e93e5a900cf4a293fc9f2d44391e5a9fe9f95d40cb42c4fd3aeb23c770ce874c6678a64c50c3766c56d4d67694740b2b47dda59c8686f569cc1f22c6400212b41275c564a238359294c4aca8a3b27222b8501b6ac24a618c3f499685e6d560a8dafe8320afdf2871cbe8ce2a8ffcf5738e4f4b42e1dcd21f0afdbf21fbbd6740c65ad69804c2b65d6437c3b578e6e8363f95aaa1bb1e5b875ed1ca3abf383d2aa16a5d3ba81a39ed5351910a9d4b59e07139fb650575639767b1dd11a811e0a74ef743fd832830c67532a9c5301ce634dc2991b4a9c07009cc79984734828719e09701e6f12cebc50e2bc05e03cc1249c434389f32580f344ea419b25b2887162b56bb9fcb1f0e1fb9445f19d148437ae40fd11aabf848d64c3e87036a6c2d90678e3c926e11c114a9c1900e72926e11c1a4a9c3783c47eaa4938f34289f33c80f33493700e0f25cecf01ced34dc2392c94389f0338cf3009e7e050e29c07709e6912ce21a1c47920c0799649387343897325c07936f504c9788d4a67421f4a87b20515ca37419d732b25ca36126591ec9377eff267ab6eefde48d8495c870ae40000f21cea595a6a74d8390ee4fc8851f87cb11d48d6e7522f53504381c90ecbf2e7cbc5b3e1ebf69802c09e4709b62b83e3b4c9cf530833dc5e00eeb69a2c8ca0385e1c91a1ac4785723790879e4fbfbd166feb04deb7d9910ade5dc00f2fa084d78b3907875733f8cd206f3bba1296f4ada8401f0dbcf4c2b08026cc0ec8405f02405f1444763022f8ec802c2f7d05640717d32fbac02bf6ce6289b4ef930c6667e08997980473780861ee02605e6a12ccbc10c2ec08605e66124cc2ce1032989d00cccb4d82991b42986d01cc2b4c824938ef830c663b00f34a93601256e0c9607e07aa46579904338c6df6e6c033af3609e68810c2cc0430af3109e6c810c2ec06605e5bb31d73b628fb73ae8439664f2a94c70094d751a2ecc79c5d1e654c2dc6829d1aff3ff432dd06905f4f89bca140be52ac6fb2d75bad609a8d9043d013df1894eb37d46482777eb18cd0fb8ea0427905f0be1b2951f68949f0761fe764d9f1566225ef12e19debc55851158bf7412652d86405d51a00fba620fc36b9523f8c28bb832ce0e620e6c7e7b2e13b51a7712fe089b750e2db45938326fb5d6b52cf3c990aed5280f656ea443e4ecc07592b57dcf2cf93f1b1f735725f02b532db5eef1ebe72be3648e4db83f8e4c66031f866075e28aa47fc6a9813fad100e16d41201cbed321bc1f20bc9dfee356f6a41a751c2754b0bffc1ce6c933f702887798b43c9074da3619ce05a090b9d3249ca4f38cc9701e0c70de65124ed259f06438b7019c779b849374520219ce8701ce7b4cc249ba5c900ce7eb00e7bde62c2a201cfa259bc8fd2c40795f30abd473826f859379e247a05274bf39338ac33806b417f0c4078240099714ccb05adb53e4de60cbad97360651552743b91978e583f46393702862095b25d08d177b6fad92a2265bc7124b44cc56b12198acdd04c07c28888eb64ab1075b45f5d099da984c1d75bdecb994850f19da9f00da874d454b5aae93a1bd10a07d2488e909c96f9f4206936c11eb3800f3519360124e9c2183b91b80f998493009a7c192c11c01603e6e124cc209da64300701984f98049370e90019cc3100e69326c10ce32e0aa300cca74c8249380d960c661680f9b4493009c7cac960ee02603e63124cc2a5036430070298cf9a0493b0054406b32f80f91c25cc4c16db35e76dd22b61f94e36e9b50a74d73d5f93f3dfdd431a84b9285937f200e0ab2f980493b07c27833914c07c3188210dde91bc5ecc7ce79f580868b20c19bece00df4b94f83a007cb17389b9b0e8763e619e7df43c00fa721013b87276ba095c470184af048170d84e87707780f055b3ab4384bd9a64d5a13b4175e8b560c6d147063f8e4e360de13fe09daf073543333af80bc72fc9877dc9c67c8e0410df3067714a18b797180b50be1954993d45f81dfc985800de4896237e0110be15543d32d1d7f5c23c017b3400fa76300ba6f276a222a61128a1df316963e791a1ecab6c0970be6b12ce11a1c4f91748dcef998493f4e34b6438af0338df370927e99e4664384f07383f3009e7f050e27c1fe0fcd0249cc34289f36180f3239370927ef4930ce72c80f3639370927ea5920c6715c0f989493849bfa14a86b310e0dc41ddac4cee13f6f6c7beabaceb84cdcad954408703a09f06b175730d7ca5926cab88fd01bccf28e17562c9eec2e1dcd18870b6dbd754506f004dcbcf4d844ad8a34906f57a00f50b13a112ce1826835a04a07e692254c2129e0cea3e00ea572642259c0d4706751e80fab5895009671a91419d03a07e632254c2b97064506700a8df52421dc26247319dcb022758bf575bfff8dfb621bc09b05c2c6d2d112d653e92b44104b1ca8a86f5ac443c55206ab46a2c8a30128652454237168d84efcc59d71ec60f92ec09fcf97fc1cc0ca9816f65910d237f0d3cf17b73d708134ee1269b2ff21a40fb83395b9893eee74596cc0f01307f34096618bf3b740280f9934930c3f8dda10300cc9f4d8219c68961070198bf9804338cdf1d5a0d60fe6a12cc307e77680d80f99b4930c3b839793e80f9bb4930c3f8dda10200f30f936086f1bb432702987f9a04338c7bce9d0460fe65f6a298307e18672ce8faf89b126f1389d7debeaf4cb4e26dd9a58c70cfb93a54e018f0cb7fa83b9679f29ecd3688eee372eb71defdb14e4c6ad85f2c68e5c29d67a4df1c22f3c65f00d47f83fe628697adfcc2d793b43748e8ff05b5d663a6e8d55ce5ea859f68bd562e420cf35a8faec057592d42a04de3e69c1574e81a52a1cb00e82294e812ad820bffe63e1d00ca0c4a946ae882af37da797652980ff0d5a2c497fc279aec11cd75c263edb14a52cffc940aede3a0c0a94d89d6fbc748c2b865ca2480b38e4938734389733dc059d7249c434289f32480b39e4938493f034e86f35a80b3be4938878612e7330067034a9c3d58ec3af7496c23e393bdaa985a8c30db7abd98f116fa5c01d6fe8e605930ed21b2c5dbed4155aa61103e9bfce2ed30ee74dc0af86c2393708e0825cebf8177363609e7d050e2bc01e06c6212cebc50e23c03e06c6a12cee1a1c4f921c0d9cc249cc34289f37180b3b9493849277b91e19c0d70b63009e79050e2dc0070b63409676e28712e03385b05d1378fc1742674c229b2642da2774015be35254a38e4c6d7c0575a24d659caf04fd4cf97abe18bc56af892500fb91501df6c5393be09c591aee0249b56330df8665b4a946a8e92da81dbde9f6199e853520f857de3de15c02fdb51c26c066006bc7a880cde7800af7d104370a97dbc91b02c279bf3d10124f20ea6a225adc493a1bd12786dc79a2d8a6c5165221f259c99d4930ae5b1c04b3b05917b0e0f3ef7241b65bf1bf861e720e0d5c096e66489f85500af4b109367726b626725b2f64d43907077a1af43aed46c189d6f3129624552a1e562872f3e9016beb64d23e08b5d839e89e4a5b40e5f322f007e9a5993d30d9dcdc6302e07cc065edacd8cf9720522ff5c23923f17b79a162dd93e75db8197763769ce07e9ba21b2fcb418e0ec6112cedc50e23c01e0ec6912ce21a1c47939c0d9cb249c79a1c4f914c0d93b88decce43a867343b97cf52600b38f4930c3b87cf5560033cb249861dcc0e74a00b3af4930c3b881cf3500663f93608671039f2300ccfe26c10ce3063e470298034c8219c616fb6100e64093608671d4fc700073904930c3b881cf210066b64930c3b881cfa100668e490d4ad2e15db206e52c8073b0493849ab4764380f0438734dc2493ae5950ce756807388493849575f90e1bc1de0cc330927e9da20329caf009c432971aa0f330fb5feaf66eadb537cdd65d827145ecca2088705b16035f130db04e6de96629c25b45c6c8246ba41c50f11aaa933c04f879b33d39d30c993cd04790da01c4189b28b4459663dc43196c8c5d5b3995a528da325f45132b09b01d8919460335d60cb98fd897b2e263add265ebb298c4dd0fd00de5d83c00b6786ecfc9b4be600bca36a72e24d609fdc39820a652d80723425ca6e02e534eba1b90218df656ebd7c3d9a192c61ab0470eeb745d6dff6fdc9d6b1c4124bb89f2759adb501a8728d09622ee860516fdd59e6827e05f0ed66ced2ac30164ac34152df9d1265eb042895a5a4b33e975255ef1f0218c70651b6c74ea84db66c271ca4232bdbd701bce3cc5d5b443867846cbef27b202f1d1f440680559ba21900613e4a9601f4071e3a811223dfda7c8eecba534b5ba709cfe4c93e7c55a1e6c0ff269ab3b68db010ea4985720bf0c1494124e59ceae45c2c3af1ec1de7c2be4def7dc02327530f1573601345c025cc5eadce1f3d40ec9f60e39c2beef2b54684bb28cca5823912c09c5293c93bb0af0b93b5ca9f00c97b6a102873e274cd857bc8e305e095d3821835cadbe9468dca00c2e941f4c2736f9c246a8e55428919d62b4522bf8cfd584998f79dd91580dd239875c235b0c307193e0672c919e6acbf0ce3a4ed99c0136706b1dc3f6f27f2c38d00de2c4a780d8400553a73516bacc7c3d711d116009b6dd2d67a23296b8b645beb3505f9e01c93708e0825ce3f8077ee69124ed24df2c9705e0e70ce350927e9271cc8701e0770e69b8473782871be057016988473582871de0970ce330927e9c799c8704e0738e79b8493f46b4264382b00cebd4cc249ba36880ce71280734110dd177c93b39de71b815301bebd4d5a1e40ba2b3619cec5a015b48f49384997f193e13c0ae05c6812ce21a1c47901c0b9c8249c79a1c4f928c0b9d8249c434389f32d80735fea1e4c3e3c562845945bca12ceea259b96da0a94dd4b2881d517024aac6a8f3d69804b0e1faeba00d7524a5c7d18b61e424de79bc0f87ab3d5e26f3ec65825444e1280b95905825a00f37ca753c1ce03b00b8399719e1bfc680ed904d44f00be65e62cdf236c209225fbfb40b15214c4dc0b3eba3d85f1c9007ccac00a31fba23cd45304d6036f2c3667fd4318f71f9c0fbcb184122567617f8fd73d5905ee29ccaf73d58a1d53f7c3975ffe0f78e8724aac6d189f0ecd4be962a6d68d6133292b42985bd607205798baf281b4a7926cc2c1b700ed4a53d19296f16468b701b4a541ecb695dc24ac21a1dc88f45900733f936086714edbdb00e62a9360867123d2a701cc329360867123d26700ccd526c10ce346a44f00986b4c8219c68d489f0230d79a04338c0bee1f0130d79904338c1b913e0a60ee6f12cc307685bc0360969b04338c9f62f800c0aca084d98bf9db1022a08df5ba52813e0574e0559abdf30661e393ac23af1ce0ada2eec84b3cf0314cac1122f4d33a54201f0320d7532fcee7f92af4c0e9d69552d1ed1cf68ee51f40beba817e6b32a73fdae345bc636e8d85940f12af8b3b8393d04fc9e66fd60280379ab37e328cdd234300ca4dc1ace41d16fc983b19be9e20c73cc0a489d923296ba46409bb2bc079a0493847841267038073b34938878612e76d20af3cc8249ca4dfa824c37909c079b04938878712e78f00e72126e11c164a9caf039c879a8493740b47329c8b01cec34cc249da754786730bc079b84938493f4a4b867315c07904254e7ea276c60cdf94996600d3912679dd48ca016032af6b06aae747998473442871fe09bcf36893700e0d25ce2b00ce634cc299174a9ca7009c5b4cc2393c9438df05388f3509e7b050e2bc07e03cce249c834389730f80f378937092ce9423c35909709e60124ed22fa093e15c0a709e48bd9e087e438d73a8627c0282fbcb69eed5e884a392642bde7607d5f993829886a0b0966aa721a8fc930c24d97aa29701c8934d0119c68f259e0d409e4209b2b70be43216bb4a28f9f54484a8c9ba461e00a84f0d62c5f008b6b3edd6fe1028964e0b62ad9bf2d60ae17fbc509a2ce195ec6419c106e09da79bb3183b8c4b60f60028cf30774526e13c4eb23cf47690019c59b35e6a8bb23fb34438adab2715ca0b81979e4589526d8b3f38f8495d647e3801f8e1d9664fd7265caa45363d7635f0cdad94785bb0e8e62a70e7ae802a4a64006b0380e704d11d023fb2a42b6ec25def7c1124f7738328d163937b32653a615227cb492f039e7a1e25da9ecc59a52f637017a57996187b07ba4942a0bdcc608a7c39b06fa10fa2c2bc2fc0bc2d988dd346045fde932dcffa176400e753e26b24f095b08da2f42e17d6db14c257c36c03a05d60ce1a8c30aec3dc13a0bc3088faa6ca25791153ecda9a6ae7eb97cf03b9e3459478bbbaf0ae0315f609a21c5f13e3bd61ef593a0bc0bd98126e7d01172225dc2a8daca8690192fa254154ddb12e8ed8adf3094732c992f664e07d979a8493746098ee7b8000e76526e1249db64086f37480f372937092cea023c37923c07985493849e77792e17c0ee0bcd2a449352319e1a67d64936ada039c57998473442871d60138af360927e97732c870dec2a238af310927e9575cc8705e00705e6b12cee1a1c4f925c0799d4938878512e74b00e7f526e124fd3e1b19cebd00ce1b4cc249babb3119ce4301ce1b4dc249fab93b329ca500e74d353969c699d009e71f91f565be0dea9c3753a26c2a501689815d1e385734902dcfc8d0b5045e784b3023903530e3880cdfc700dfad414cd7e2012f174958c95e231f09dff05904c0db1ec47281e472c0f079e14c90ffdd660ac8300e8a0d03206f370524e1fc2132909b00c83b4c0149d8d94b06b20280bcd3149084d3ffc9409e0a40de650a48c219ea64204f0620ef3605246103900ce43900e43da6800c63f3ef3400f25e534012ce672303793300799f292009bf764106f27c00f27e7396ed85f1634be301ca072851b6635ea6ab0e0de5a6e10301cc074d8219c605a58300cc874c8219c664de17c07cd8249861fca65a3f00f311936086f19b6a7d00cc474d8219c66faa6501988f99b3529c3091f7a442793c40f938f5d0c324b1cf0657719af4cd52eb65fef5f3b594c35e64eb1bf9409e82f70425bc8eccbdbeb144bcca3787d8b9face5f00fef82425d22eccbdbf867e9968811855e4deba5c085b4d0bf6642ab0e5c0579fa204db23c657ed95e3d1cd75b8403e581bbf680a63295f06bcf7694ac87d5d90b9a76e64ce69045e379320044eb617c2b900f83341ee65687b305f61ce0bb389da5c38bc5f02bc07607dd69cd5bd61acabf607f9ee73416f2f917c91468896ac48bb1a78e9f341cc3acab5da4b3bcfaca3c600df0b41e69da59612f3ad9b651611f7567b81edc6710415d64700d6178398cc55033e49965bde0472cb9782e826496ec8637028bf96be3ff0c4974d8219c65d3a2a01cc574c824938d64e06730580f9aa493009678090c12c05305f33096618c7364b00ccd74d8219c6b1cde500e61b26c10ce3d8662180f9a64930c338b6b90cc07ccb249861ecf55c0860be6d12cc30f6172d0230df31699b13d222886c9b937c80f35d9370e68612e74100e77b26e11c124a9ce7019cef9b84332f9438ef07383f300927e9d444329caf029c1f06d3bfbe84ad071dc3816c2c4eb73b218be2fbc89ca5f9615c08f822f0c48f2951b666fc03dd85f233755cd41aebf195d6e36bc550da0162b652a9380b9f47d6011ef9092546b5152eff72803d46bec452b7c252a748f0e0d3c0c631beeb301f972cb404f0bcb298a9b5e9952184bb00c0dd11cc1e08c3831ff921db1af71f80efd320c6c953f9b0526e283fc3d002e49e9f998a96b46022437b29f0dacfa90ba67865bcb29474cc7c698408e383c043bfa0c498a9c1e86d961ce1a006d92cb9b500ef97e666008463ec6419c01b2003f88a126d378176aaf0cfb98c4f90299115a962214a4da85d252280fb7191f5b72d7eb2752cb1c41687b05ad51000fe3a881c169b8a3841782cf1076a5750e5b0834116f00d25c6262cbac554a548da6bc064aff04de7fa1df8dfb7c17482e4ee44d5fa7ac0efbe0b626c08363955fb3ddaa20f7713b313f0c5ff05b13806c24c5cf48417ec3400f67b4ab0eaf3dd43d8cef6f9eef301c21fcc593210c6d9713300ca1f295176f780329fad13422ad96ceb2fd5075a415b1d2aa5aa0ee58262e9274ac41d98fba360852c76d5a6d367c33807e43a00f4674aa0fd5d40d75b0f16695bea3bffeab73300f45f8218ef4cfe1b2e8438c9f6d26e0270fe6a12ce11a1c4f91b28c67e330927e90e2264382f03387f3709675e28711e0b70fe6112cee1a1c4f926c0f9a74938878512e71d00e75f26e1249da14c867312c0f9b74938878412e75a80f31f9370e68612e7be00e7bf41f43ee588dff6914fcbc96776175f783bf04a00c2ffcc996b17c61d98ee05ad2056db985d67c3b832732e4019a1440913b6dd99c7056d94893a806ee5afa9103e0012760625c2d6006149f53e75ea76d87be71f03186b51628c9d01a2df83668a7c21b0fd3e0651a1ed02d0d60e16ad97898b8468c926d77c03d0d631152d69294f86f62c80b66e104553ee4e37e2d90f20ac4789303ae1bb0696c7900d5ef404f8ea07832f2ff8893564f83e03f81a50e253136b921b6fcf0de588fbd5006643936086b1d5730d80d9c8249861dc8fe65c00b3b14930c3b81fcd55006613936086713f9aad006653936086713f9a7300cc6626c10ce35ca49301cce626c10ce37e346703982d4c8219c61d39af05305b9a04338c3b72de0a60b6aad9810a5b94fd1518c2f64f4f2a941783818ad69428d574582fd30dc238a4db1d006d631a50c262880c680f00b4ad694009abef64407b03a0ed2881666a724f6f53b309fd95ac7b6e0ac0db9e12af1ab71c5c5dda17b352a6d667847d0fa5074119df8112a3f719ee84f54fb244df0578654793708e0825cefa00672793700e0d25ceed20b1773609675e28715e0470763109e7f050e2fc1ee0dcc5249cc34289f36580b3ab493849f7a121c3b908e0cc3409e79050e23c0ce0ec66124ed27e4f329cfb019cdd2971aa6f62d5c0162a64fd9ceb00bc1e94f0d476007c0aec44c6b73c5d67b5c74b6493d2de04a044082c1402e066a8152ccccb07fa00c43d8348ee58628fdd749fb0f7930ce744d02eea65124ed2f14c329c2b01cede26e1245dbd4686f34480b38f493849175293e1bc0ae0cc320927e9327f329c4f039c7d4daa798ea49cf24556f36c0d70f63309e78850e28c009cfd4dc249fa850d329c37b228ce0126e124fdfe0b19ce3301ce8126e11c1e4a9c3b00ce4126e11c164a9c4f029cd926e124fdb21b19ceb900678e4938493f4546867313c039d8249ca44b0dc87016039cb99438fb32f70693bce3aed8e2c197542b3ba3ebd8b159a0e3acbfcac5d41bd265d8cd338880bf016aa6432881b761f1a7d63a7356329064fb7ff4069e9b670ac8306ea4d211801c6a0ac8307efded18007298292009e77c92811c0c400e37052461e94e06321b1436234c0149b8bc950ce469c023475282cc715593aad01d3df03d6b26584facb6f4592bceb8a901559a7e8810e1bf0bf8f1ae94f8d57aa464fbee09273990f5dc8f03304799049370711719cc0900e668936086714c69088039c6249884ed2332984301ccdd4c8249582325833902c0dcdd249884ed2432982301ccb126c124ac9992c1dc15c01c67124cc2f61219cc5100e6789360122ed62683391ac09c60124cc2cdaac8608e01302752c2c43fa937d9fa5d2a30165bf6ae1582c3ff49bd852c0a761225d8ce02ec0ceb8122312f19ae20aeb1cfe192ad2bae07b04ea6c4ea6d77ee306ead361d24fd299428fded2e4b58de93ed2e7b3df0d2a935eba5b6287b6b1642943da9505e04bc741a25ca4c0d4a6ffb34103640c9f2d35500ef744abcad40f9bf5e94ef7c19cd32e99981ecd240f68dece520b9ef410fb148e48d3c70ae28f444ae7a31e35f3e08df50486b0071062544350107d644b1ea1379fd932c61f700386752e28c7eb77db02bff0c20499379635d902fce0aa272145bec24533d0ae3d6fbb301dad941548eb0c16367153e8cdba6e680443e2788d67b2a5578c2e137321f3d1580ddd354b08483c464608f0760e79a0a96302b20033b1180cd37152c610b890cec3000b6c054b08403c964607301d879a6820d63052b13809d6f2a58c2c11232b08703b07b990a9670488f0cecc100ec0253c186b1237a1f00766f53c1120e9e9081dd1b80dd87122cb780839bcd36303eed964fd0e588d7594c4ad8fee253685cf82cebb8013c15be1eab5f01d28541f4580d6535f03d39328f3c02e05b4489af33835fd14ec637c33c8eff33c0bad89cdeaa307efd630e40b96f103dfcc94fc30de37cfb25a01f7589493849f76824c3791cc0b9d4249ca43b8892e1bc14e02c340927e966d664389f04389751e24c34e9d13d6812c60fa4dd2160d6abe3123e3946f804e139dc778a5874a7cf416c0a2b91159e52ebce203643b4792ad952ab285968fdf316038bad7fbaeb11b19deb24b691ad1357b9bc62217bb575976b56c172f872f522ee10f5a54364899ac4388b79a5f5cc5c51ed2ab7dec967f64ea6b3addf6aca65954092253ea231c7ba56c5f80c171ec21a4b9395ac5c58ecdce9342b525f702ab1eace36010e304beaba9ed9b312a6c93a4ca96573a1d0a4dc7aa6b608c74e8f599126e04c4d059926da8a1542ab06221c3519546995156929e3899f1548af5a2beccd1731657f04a442447124d2023c3d53d028b4ee168a634175b8d97c0bd408efebb5dbad83aa5bac83e4bac7d5f24c5d4f2c93c7697c69c53ce222fa945c96366f4c64919d80f8fbcbc53cd11221755a424b13db877b76e338b1929dc5e36267b6bf84c77b868cf78c6cbe874964701a7c2fb146cb61c8e92e3b9ab2f8d3938cf7f039ccdef5b944e4389b7c79784391bb4179a522dcec7e667a77fa6c5f0173b58cecfea97ab7778d56527ab72dcdeede74c99e928475fa7870db1c7d6a9d2c17952fd8697d25e39b1b2526d145d4027069e3acb315c2d652217535533fbcd4e4354d9e299552f26c20728bd5625aadade4b4d825093b733ac1f3881c9e47ece74846393c19adfa3fff4e937ff37fed228dacf379d6bb76f95962d58dcbc5fcd972b6607a06abf3ff00e7afc6af120a0400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/c6adc17bfe41c8845ace2781c5353885.asset.meta b/Assets/SerializedUdonPrograms/c6adc17bfe41c8845ace2781c5353885.asset.meta new file mode 100644 index 0000000..1201f1f --- /dev/null +++ b/Assets/SerializedUdonPrograms/c6adc17bfe41c8845ace2781c5353885.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5eeed5441479e1148bf763f53365a676 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/c8df303ceb45ae84f85a11591f741734.asset b/Assets/SerializedUdonPrograms/c8df303ceb45ae84f85a11591f741734.asset index 2ad503c..e1c139d 100644 --- a/Assets/SerializedUdonPrograms/c8df303ceb45ae84f85a11591f741734.asset +++ b/Assets/SerializedUdonPrograms/c8df303ceb45ae84f85a11591f741734.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5a4b531b4710ee155a24210106ec801327761227c8e1b10b54e59043628cf3200fa02c2007574ac86671618b472139766e39e71fe53fe59863aa4877efac19cdce6859a41111b154dad5ce4cf7747fddd3d3d352c6037c39b378d98647b002f3b005bb700487f86d05ef07f80e9fa2f60d38c1fb33bcd6b06f16ee2450d26bda99c2eb2a3e35a089942fe129def7b9bf02017e5f45da009fa8750f3f018e72b248b4050f611dd660d2b991c0629b891aa2cd21bd9c3c5e1fc06fd81bb0503489c75d9378a9604f83fb0e50e868dc63f885d53ac0bea748730275e4f98439e6ff265ad629bac1207e46a467477ca87d547a266dfe12df330a5d46dc8744fb35a59d680b4a5b518c1d53da0735634ba27d5c69cf6bc60e8bb113f87185cceee9e9e93faec316f90e31aac131784c702f85eb4494c94ec3f86404a0d33c6d13cd738c0c3496db62bf68c2122c6a2d77d3294972aff0b58623f699294da64cf1676c0a12ae8eef4072bb06b67fcb5e4b8eb78f3df3f023de896a0716d0911e2b5cb671da3aba6e009b783d667e3b28767c64924ae4a22acd23e419aea0036c89003dc6e73a4b58e1ebaf2c69c0d2af625b93d7f321aee807787fcdb3c5753fc1efba393705647a19f50bc9d41e2ed7c84c0f511b92de1b20377b6b91cbb008413f785d2cc3ac476bc4f9236689b7188641c6e50d2ae4b1106e052d6d8be0d1a3538921985ec7b8867aff5e47c99e8b35d24e1b3d3664f039d6e1ccc66eab524be0d166e1dc4a50aa1da4c4afac89eb49c2bb6ed6271155e81d1df4396adcec21f4d477c45c6a38363df804eb8c027e1c7d9f86e518c0294d4a93248209c28c0e420acfce8e5508a3b4a082f1ff07ecabe1f880630cb56f20c71ace4dfc967986b354a295a23db4f9f3f8b51f255265e7ae94e4742a9909f1011de2855ec78b0ad2d0987a42f4d3e34ae9eb6dd565c1e4b545c3b24f92c184605683a09f17d96fccdc05452482dac0d8d5312e885459abafcabc68663e68927aa443a97326a947bb2075de24f5b50ea52e98a41eeb82d44326e6e35ae6f7efa7615e34319fd04b9e8a79c9c4fcba96f9efa9980f9b98dfe882e423bab836d4fbb8d6e413018d4b1fd7de013a22b6e2e07c09a00df06b40d588574cfa424c390f557c3fe39e2a1e498e707262246f1b3442c7cfb4c1e883eaa431a8b607c014544775be41e69bd261f28501932d366a9d4fdcfbc274a4ef2a7e0bc9f761975b64a9e5fc4fed6b4d6d620e396976c86b268d6eea345a366864b2cabc90942cfdbd38c2aef2f5258e254a551379bb53fbb6514742268d7e6326fdded5e9f75507fafdcc6c5ee01365f681c682ddd66ddca4db7b6956e879740b4351ef349b306976abdb5e1946821aece1930dfd72f8761cda11bee6607e82941b4c414f0df078a3f4e1fc75439afb006301adf74d94fcc99bd4b03d87f7c15c45dc8b45c88b169492b4084b1e44bfc755c7a848a1d32e592773f12c27348a7821d29c355c354d3f20ab46c5f68cc7c9cbcc05bd29598adb34db80de87d2efb2218335fee90419d0865d65f21a0e6926f34faa88cc3183a8d6d285c23939d53202b3cb795003dff4a225ae30ffa66b5e76b1c42dbe1e463902bd46f18e185c8a72cafae0dcf4bf26f91dd9bfcb311f390baffab0e853d787fff3c8e753e4fb8840188902854f81e2639babb9c496aa324168af4356ba8aab4b99ab936a69a1658d17cea3c845d639d715dd10b6bb36611b12b0851353964cd9be6f0fb29c2dc81c09b24f6c42567ce369ad070b8ba0156d81362081f6a96dd09e6b4f64fd07da9004daf4e5c4b4853e8c695909b6b24dd8a8127aa29c20fbcfcb4a125cf72ec7cb96fad0cbf2126c9f5d0e6c1637026bb06524d8666cc2461abc8a95aefa6f791625c0666def9ce1bfeed4aa51ff81362c81366713b428ad3d6a29625b5c98ae2dc840826cdef6c2acf261f7ac2ad98f29ad2b01e6f51a308b799935c07212607eaf01b37838b7065801ae4c11cea70a0dfd5d6e302b8c5e6e73542b1b76efb236e52eb7d9bac23ada98408c12a79f20e0246a173f743faba979fc2be8e790aec8dc9e6772c16b11a442a062e97ad72cdd8d229e4ed34e0a7aa53656f1f8f7dbabacff12847fc0171b6fce9d6437de42cb87cc0358c7c1bb2c14bddc7f018e249ae5c7310000 serializedProgramBytesString: - serializedSignature: abf0ea4c7a12a390129ed328ce202bd917675674bdd30fdd9707e2d29aebbbeb7f96e9a8b0a5d5633eb8a57d1dd3af19bb1854bd8d5d59474e257d05edbdc90e + serializedSignature: 1db4303a0b496541d729dc0e97d4cc66f5391ffc7fa565aa8590665fcc4c974f96c15a3f463fd2fbfae6e53e18a99ae1d79539e31357933eb9a771cc26893007 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/ca0eb6f2f88bf1f42b34faa8adaa2f2d.asset b/Assets/SerializedUdonPrograms/ca0eb6f2f88bf1f42b34faa8adaa2f2d.asset new file mode 100644 index 0000000..89d7863 --- /dev/null +++ b/Assets/SerializedUdonPrograms/ca0eb6f2f88bf1f42b34faa8adaa2f2d.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: ca0eb6f2f88bf1f42b34faa8adaa2f2d + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d097c55c5f5f8e70161dff79db087451292101611818425b29a044401216481482098050171df70dff77db7ad6db5b58bad6d6dabd66aed6aab565b6dabadb5b6b5d6bab7feefcc9dc93defbe39efbdfb6ececd0cff5ff8909bbb9d7be63b67f633331d7299f3139beefc5acfca58319bc1d6b16ad6c0763b7f153bc75dce3ff74c5d5fcb1a9de376e777a5736f3acb4ef126ff991c1beafc2e75ce9a58b3f3660bab728e75e27e39ab71fe2e75dead71cef8d55ae77f8df354ac93f3d23a56c2d6b0d56c486c500a11ebc54b4df25a8c872bd6d5f9bd98ed77eed608a5f84772c5ad21ceaf72e74e93b8b7cb515a3db7916d16c1dae5dcab72de6964f58ecc6d4262d7771c5431112671e82f8f03e4b19ff3bf9bfcbba3fcbbabfc1b3e9f258f03d37c7e1078af1bf89b13ba23c9fb83e5f11de77f67e7cf7a70cedf7d5b9e0f71e575d89144d630791c2e8f23a4cc5d69e8df451e47a6086f3219a380ac74987595c731f2385aeabb3bc3ef8f7519c56e01f2f8f15f409f31e0dbddc07d7ecc0e1176158feffae2f15d371e3bdc20e3ef75797d9c3c4e90c7f152b6f3cc00f5cc44791c9a42af49ee7b6c0ef36cd6f966c73df27cb23ce6c8e314797c4feada00cec3eaa2e274aa3cfe5b7e638fe6ba7a9edf3f599e4f93c7e9bef83a423ed728cf67a4a94f3af6a774fa8ffc461338773876da9a44968af7f77df1febe7cf70a9763a76ffac203ed4f273757ca6bce201c1ff8c2f181ab4b568eefb9543a28f979f2f8a194db02ceb9dc6b0286ad937cef11793e93a5cedbfaa771afd095d355b19ee57ea7f340f77ae7f92cde960b52e8a9e2f6235fdc7e24e5d64bb92afc45ee794c711e09e4f0f7f7fae47eec93fbb194abd29cb2f1547ace96c779f278943cce67ade978bcb291b9f278a43c7ec2e2f3804fe4718ef7eee09f07e4962c8e16f8e27aa83c7e9a42a67aff6879ec96e6f3ea998521745e248fddd3fc6677795c1ce29b3d5c5be8fa8ecf1666a59059ecf2edda0c7470e4743b28cf4be471893c2e95c7cf7c76f0591a76904a9765521706e2c0d1a57b5f79be5c1e4b7dba1ce3d3e99436d4e9bf52e63e70ce8fff93d7f78373aeeb5af73bdd9f90d757c8e34a9fceab08755eedbed7ab27b08d74de4b665f6bdcf0f5c87365f7a890d7d7fa745be4e9ddb504bcabf448273d94b9c7582c9e714c96053d14db72df7307c079cc7d447d4ffcedbccb91c03c555ce7ef9e0acef9af63d3d4751d4bb4592ea723f87647f96d99fff7bc423ebb9e25a63dddbbfcd8015ceb20e5bd22df3b8e259663ea391eb683e09cdfaf48336c1b34fa39dfedb530c9bbc7b3f8fce768cf1eba283b3e41ead389c5a52d71ceef8ff2de692deb36bae77d942e9be43ba0fd1493eda7deaa3cdd2c8f954c5fce6e011c547adcea7d7b942a6b4e4cf2ad6af9cc365fb8d778727a0c95baab7cac8ac5a719ffb3fc9a92abcabd9df27892f7ec446547dbe5b14eead699c5e7cdb5e03a3f7691f74f03e7fcb91a4ff66055fe2bfe4a575d7caaf6a20abb2e0f486667bbdd6727a8bca4c165dbe716c9ed099f0e9b5852fb8da936c23e70ce8fdde4f5d3c1b9f39dbe9ddceff4556d8819e97d87a9368aaa37278b23d50e5171d43d3e8e62aa0e70b2f76ebf4fe535955781fc53fccddf3f23a0cec9e261affbddd6f6812a9354d9371fc8ee27f5e8e9e9db5a676c01f7f8b9aa3b36b3f8b22e992eaa5ced95223cfdc173fc782044f893dd936987a9bcb4178b6b338973c78efa6f4a22eb3497d350d5df70bafbce0095c6ce90f1aef2f1334198f8377a7bacfb2adb384bdeeb03c22df3c8585f704d956fa03f4bc8e3f7cef6c5cf99befbe70019bafbe7021d74f7cf93d7cf72751ff0b4bc7ebe2f2ccd2c5ed7be2c2e9f6217248635d6d7f76d159674e2f2907cb7bf2f2efbbbf132302789ac0bf5713948f5a95ce48bcb8b7d713940139797c87bb00f71bcbc364813bf830107d55f79291297eafe6540aeeefee54007ddfd2be2e372906acb5e89c425d41fc6e55589618d0df27d5bd95db2b854dfbf5a1e75f5e66be571a2947b6e1a72af93c79a247207fbe49e9786dc1be4f1fa24726f44f4cde47bcad6651f8ee82587b6cecf1dbb1d323089ac9b98d6d687aabec89b59bcadabe794adab3e37681fb7ca7bc3bcf857fd91b1e12cd1d647003b5175a4dbc033d056d5fddb815cddfd3b800ebafb77b2385b1f2aefb3bb98ded6a1fed0d6ef4e0c6b6cb8efdbe7a71197f7f8382bbe23597c3b69a48c1fa59faa1b9cce92978df7baf227ab70de27e58d92f22f00e7fc38daf7ddd1ee778755b87286ab36624f795db67f86ab7ad6fdf27b8fc9f307e473d7f89efb9c7b9e23f347f6051fff077db692edd95b6b583e0feec1b08d65f175922fcaebe3405c8d05d7605ca9fa682aae5f92c72ffbf88d91f20e8173fedcc39efe392a4f78481ef77bf7fa1df2c56f4fa0c757f4b6227485fd1641eb482acc5f4d11e62079922a8b9ac0b96307231e4822eb1bf2999f2479e65179fc963c4a16b1092cbefda3f2b16fcbf389befb2accd77bec076f057a28d9fc9d0bd308ff77e4f1bbf228ed3f3689c5b70926c9fbba3222d37a6ca6f7b6489d26c7db8f3877e261946aa72a5b3c31857d7c4f1e1f9747c953b4d1210355074bd61f96ea5b49c2159bcae2db8a6aace3fbf27c8abc7f913c9fee7b5ee5513f90e7d37ccfcff03daff8fc509e1f11ff3c7b02c8e1e74f7a6113baf06b4f816b47c86b3ff2f88c9163c0b1dcf86fb3a7597cfb4eb5e1f2e4731783f72003755fd54f67fac2942fcf2f05e7fc58e0933bd3c7aac027b7d0a7ef8fe551a5f167bd304e9b03de013cd933f13293daf49352c62cf9ce65e0dcb1e9ec64f57ff56e913cce96322e07e75cc65657dfec24e37231553fb9d427538571aebc7f0538e7b29f4ea2df53f2d979beb0cd73df1ddb298d7765bb3d36df17b6f952c67c376c63d72691f59c3cfed41787ca66b9bc059a785d00e2939f1f2575b8129c731dde94cffd8ce96dfb48dffb57c5bf3f4e8d61ab3ce5173edd8e66f17d69bf92c7e7719b64bff6e9bed07ba655bf5ffaf45be8d37b91fceed5400f759d1f17b3f8324af61db3dfc8f362dffd62797fbca74beb58bd2edee4d867ac84c5e7f7252eb7f1735c19e3b7cae75f90c72359f2bcf8259ffc2552fe35e09cdfd7f5a1fd561e7f172f23cea654ffda524dbcc8f860af807baafdf822788f9fbf0cc293aacf2a591ef37ba66d3b4d50ed40551e34a4e0f62ad3d69527bc1650ce6b2cbe2efd47165f97fe833caafcea4f92cb321f07693bb1e5def7c433ea9aae9e9c4a37ddb593a4cc52166f87a56ef8273e2e6d44e503ca0eeb527c4b3e173b063ca7beb5025c7b435e5b09c2b9025ce3c75552b76bc1b9a3dbe4129fdcd5f2b9ebc0b7f9718dbc7e3d38e7efc9f6406c2d8bf77352f2ca804e6bdd6f4e52e3bf7ff67de358e6e507dc8e54feff02b8df0de8a9ae2919b03d7b1238f2ebd25769e2a7f1df4c1907ba6b7f91c7fb82bf1b2b67f1f512353e58e1b39d0a193f9fba7ae7a8fabfb2d307927f5bc965d2e662eb587c9d6f9dbcff57208fdfbf1197a9fdce7a5f78d6c77f57c84f55d779581edf923236c8776e02e7fc781c08f3dfe4b5e3814d1c278f27c8f76ff6d9e846f0ec46f02c3f6e62f1edbb4d2effa99ffa64abf736cbe76f01e7fc5baa5e7ba2bc2ffb905ad32818cf8b9d08aef1e356f9ce6de0bc93db04e53630f579e45b95f2bddbc139fce63679ff0e70cee51e8a7f3e56259fbb139c2bc650ce5d3e393ebd62d5208c6a8cf0a114f62ab9b6b6b737ca6fed71c33e45e5536fa4274f7bed5979fcbbfc468d8f9bea477d2603d9729c3b56cbe2ebb2b52ea369aa1ea3f2fe97537c438d9bff431eff29e56d97f2ef06e7fcb883c5d97c4cb57595edd7b1b8fc599c3b7a4d7fc427e7249f1c958faa78d929efdfe37b4f8d2bbe2cefcb7ebae94ffbc2932adc71d7b26262bc7d39ab61956c0fcb15ce01bc8599aedbb87a33b5c3b8f043e0bff8cf64f1d966b6df79b546e7b5bd4ef88437b30296aff5da1e26c615d5d78bc5ef4ae7893a21f4be58c2271e4df80457aedef957035cce9b9cebcb84c73a773aaf73eecc602b9d237f6b2b9bc9363affe2a5ac773e5bcf5a9cb30ae7f71e216faba376e293a982c4ddd3fdef9439325deff95dce1505748f735e2f342c17bff70a4d6b84f6a5ceb566e1cbbf9b6d678b9de33ef1b5c4b0373a7febbe592191e975d43bd163d75d577d154d254e68b8f6b9c216ff2f46da234638face3c7df09f4eb9a2067851424cfc1f433793e18df5522963a640168bbb96cf72f9a9a884870d636208f5f6edf22e628549c3a227c3a37b84088117c33bb696e53dbeeedad959f1412b60b9a28b7e648aa02503cbe5e58811ea2041c8caea94c715f5e38fe9f00bb7a5f208f1bbcfd589e78247406751f8c54780e8deae7072b5b5a0f05c2794af17aaf903b3d6b95ee988e74198e1e4aa3572f2548373ad94d53aa21b59426ce6f14f7711119258dca60a1416251d7451227ab72ada25456093bc92474ad7d6507891922bea504393982ef62d51b9ea206b582a713df6b535bb2bae7cebf52c7dbc7417f192c9d7b098e9a88b99ee512796d4a543b278e9d11a2e2f5ef88f9e614fc4b653e98011eca423d8236adbe6f71a84944ae7d9e00cb94bda347f86a307d81b31c2d42a6008b33408f338c23e1aad5856379f565c214472675de4f46c9fa23833e3e63e6b437c08b250e3ee97b4240d6ada5d74f484f3e456527aaa8558ee145a2b9c7b95cef335a2bac9afc3626d91f882d7aa8c7f233959deeb7e849fac96ea0041750268ef86d50c23de55433c8fdbeb408d19883cce9f18fae189a11b96cc06854d66dd31c983c34aee81491e1256724f4cf2d0b0927be9928df06fdd1449b2f13a56d45f8b79fddd09cc5ed15a6e71ded775c4244f2ec3d24e2ec34572c966baeea1601a61c9a4b72eeef8c5113a25fd51371c8fba3e98e0912105f7c5ac6d54586beb876519a3db20cbe8af13ce53fb189658e7faccf94910de13173e00d33c5ba3f9fc051d02693e10033e362cf04198e47161250fd6651cc224cf8a38e3d0f7e22e138b7ed4b0354e9de124e676bfa9ef3688ae37ae91eac62b738eb5420b7e9d6b91baf7377916349e691a6022652dd16636ed150a5e53e820b2c289222be4e3edeb9ceb6eaff312110375e24b33b4daf02f60cf2b16abc47a262d22b6b390e6e224f175b3d86059fa102ca799acc9695ed4656349729aa15892cd099b6487e924f3243b4563ab79dc56f9004e775152247c6712fe9de1baac4164fd07da356b701b165c5ead185871e5ad667c499e5384a9ee740c78af349c0ae79946e71b35d2c8c36406dce97194bfc5cadc1f7d72982e92c38234920365a8b00430426749bc05c6bd3613fa02b94597390d8e62b64524c393c5654ec98ddd3af1681d3be01cd5184982bd75c1ed6da44e1b5eb1e57959ca8ad0005cf0284c706e48c1a3b1349e17368d8fd149e6b90defea0f5bc3cac6d4ce0fabf6582c472dd0e4a89fc682e5a8e330e1851ae18f7508267cbc4e3837d659e9d84812ab9e80092ed2a5315e78178bceac6ce77f83f306ef3aa914a93f5b14865e6e90eda4f53ae72f5e604f07cf37384fb8639241f49c8819c5ecb04631098bb7399a787b2f60bc4dc684cfd5085fde3198f01c2ceee6e9e28e274d5e6ef06ac90e59b6c5e786d96274385b3804b4884e996a11734d225eb3d9a94ec6719a736c769ece16e540bdb8972d56a86b14796d90389d82e97fa44effee40ffb540c3205f9c8ae55bf335f9562c60be354d279c577c8e6248c58717bcc12b3ed3316c47ebb0f1d26589537de135d716f17cb930809ad6ba72751b15904768f4ca15cde5ddac3d2b64bcb5c0dd279ac4df5e15857fdb1bb80b53f15ac8122b5eea475ff15ac478c52b9fa5ae78b585f658056b0696a92ed664aab120996a2e96168ab1b45092515ac8d3d99ce845d9d3ae3687a7a832219ba7bcf0157ede8eede86ffd8b6e9ec2342cabad749c26564069122b90bae49a7866cafbd6b781a5465df82249e8d3c4529126a2d41c4b1733b1527b99a6d47e242b58a99daf3359d183d6d8ae26eb7a434461b6cb75662b7afa8ad288fcb6d4738cf0b26b12996ab5cc54ddac7b8c5822a651149b35ce759ef1c2fbd3c49225bcbeb454f0de25c8f3f0558a762f66e4a5c2c8a30e2766e8055801708ca6000854ab2ec492d00a4d12fa3460129a85a9bd32acda4598daab346a1fec1c4cedd998f0d51ae12bbb04133e47279c67cc7c3a4c9816e25c4c309f339350dde4ed49d54ea8f2b514b789b6826aff558b2bfb9ddff5ceb52a21225b784caa01e3205acec3d81eab61db3720db2331046521d9ced709eecddcb5f9c20cae1da513cceb5f150ca97ff15937c1eb5f0b30eceb35d8ef0888fd682c991f1736992fc4246f082b791126f9f8b0921763924f082bb958279947e2464d24729f892091588209dfa4115e1150f8122c616ed6e54d13196f78799554b7f9e4f56b54b25a21a5d1f97baf2c73abe3fa47789f479d6c340749e74b313d4fd4e9e94ed0e06e31bc4e5129fad0f817d7b09d81beba0c43bf4583fe9280e89763c2b76a84bf19507829c6ab52c76b688a78ad16de14ded599ced5201c8fc1b4d9a6d3869f7af116e43b2b30a4551aa4b7740f86742516886a5d2078b78d8b6f9e836cb5e8f0ab94934bf68a623c38c6559806353a0ddcea9caa18accdb05ab01a435aab41fa7c40a46bb01c797bd81c792da6f60e5da6d92398dac7626ad78555bb4c2799d73a4e6248ad83cfcd0b5eeb28c7be538f7d675746dfa9d07d8793da1d96d43a2c821b3411bcb067b0085e8f09dfa3117e30a0f0e330e1276b843f1150f8064c78a346f8c85ec1841f8f096fd208af0e28fc044c78b346f80d01856fc484b768843f1050f826ccc8f78635f2cd98daa768d41ed83b98da27626aef0babf6168de45ce18c13e50410bff753301f79be56437aaea9dc594637f923d5f7b12ea5adba78e125f4a93a950214e59598351dd458d3eb0113c1364cf8691ae19b029a6a1526fc748df04301855763c2cfd008efdb2798f01a2c32cf0c1999b59860eed69950179c2eacb341a4b16cb167199f37b95b6e91c6e7aed78881eb4a61fb5e87931ab8e61371b3a5f5364a9bae77ac7d86733588d6db31adcfd669cd475e7927ae576f769b926e3344e75798cd26cb5af7e4407aedc06ce01c8d0d3c12d0c0eab0409f1bd2064ed208ce157e8975a4f92ce6475a213aeff9c4f95a6129bb027b9d26cf93cf4b3b4f3e5fe4c97c3c9d4e572cffdea98b6e5eb7be8021756bbe564b77ae72a0ba75bdee3bdc662fd4d86c61c07c6b1726fc228df00d0185efc6845fac117e6e40e10d3ae1bc5ac357290a55add983a97da946ed6bfa0653fb642c93b82c6426d18809be5c97e5f69659ae37ab3bbe2f28c8979b305e57e86c2820af662c585786e4d58209be4ac7cbede455fd646e97cee68085e25e8cd3d51a4e3dfb05e3740a26fc1a8df09280c2f76159ddb55856c7979e0bde8db05ff71d6eaad7a713d94946790e60826f0829f854cc8a6e0c699e0775827914f105d5fc0e785c401007bcd33063b959632cf5fd8319cbe93ae13c63e6cbac85ca98cfc0d4be55a3f62501d53e13137e9b46f84301859f8525a0dbb10474474609e86ccc1cefd4656adc016a8bf38fb7e4f9d0f276b145738d7052dd27eeec112d055eff0e62bbe7605adca5d36240ab1679ceef5dcc1d9a709d4332d7e15c4c87bb753af4973a1438ffab445d98bfb3cff99db906e7611adca3d3a02b880b3e8584d756837ced7ccc7cefd598efc101c1ccf7029d706ebef761e67b7f46e67b08cbf41ed0647a1d03667a1762843ea72134676030421761c23faf11be21a0f08b31e15fd0c56d40e1976071fb2016b75fcc286e2fc592c39792654df96d9c355d8669f1e5e459d3cc36cc9a2ec774782859d654d88659d31598060fa7ca9a8e13df0be6ee7e2566be5fd198eff241c1ccf72acc7cbf8a99ef231999efd518b2afb17015bd6b303a5fd7d0793e209d6b313adfc0e87c33233ad7618178541388e9838305e27a0cfdb742a2bf01d3fadb1aadcf0da8f58d18fac730f4dfc908fd4d5820beab09c48421c102713326fc7b1ae1250185df82097f5c237c4740e1b762f8bf8fe1ff4146f86fc38c936f1482166b056d5cacdd8e69f1844e0baf58cb6fc362ed0e4c8727753aa8626d561b166b77621a3ca5d3a01bf38ab52562bca321a0cfcc5d9801ff4863c085438319f0dd98013f8d19f08f3332e07bb0403ca309c4830103712f26fc598df09ec38209bf4f279c4717dfc7274cb9703fa6f5731aad0f06d4fa019d70de3dc277ae09d53df2394ced9f69d4be27a0da9fc760ff5c97b678977072afb80ae7d13dc26f6dbbc8771a85d3a83bf9a95a8c37ae65ee7a80eec4d94ae76ab59852bb439cab7cb3926d93a38133c568a09a74bb9fb94b43658bd1787771e76c3112542da762ef14579ac4533540b27ebcb14e8e9bc211caa0cead5fc022e8179a087a2460043d8809ffa546f88b01857f11cb8c7e856546cf6794197d090bc4af758486070bc49731e1bfd108bf21a0f08774c279627d219dcc28490ff3c31ac1b962e998f619fc4d5cd2a76d077f5fd4f1d20efef22d9e920ffe86d7151bfcfd0a664bbfd5a5b680b6f4559d705e44bc1cb688780493fc4a58c95fc3ca87dfa563ff4932cdafebec5f2c6954db2ef61f66b1ade496fffbb42dff5561f95393587eb825c1f431f10dcc785e0b6b3cdfc48ce70f218de7512c99fe51934cf346064ba6dfc2b4e67b99255489f8c4e545a2a15523e63be866ca648bea527640a7a66f637abcaed3832fd6114cfe6398fc3742c6ce77b0d8f9b326761e08183bdfc5b4fe0b163b3c8dec905544151f35ad0b4964ea72f63d2c906f6a02f9e0a860817c1c0be45f7581e42950b930b8f5d978ffbf20c1fa3ef6e5b7745fe6ad7d77fb81dcd6758c735b575b59e324886a1674c6ca0f300dfea6d36088568395e2af663135ddadf5673621e987982e6feb741991a62e890bdd06d1e909ccf0feae31bc9f8c0e66784f6201fe47c83ce1294cf03f430afe1126f89d90829fd609e69cffa5e1fc7640ce3fc684bfab11fed09860c29fc190fc3b249267758279eef35e3a829334867ea213ccdba1ff69bde16b87becf3269873e8761ff4083fdd0d860d87f8a05e2432c101f6514889f6181f8581388a70306e2e798f04f34c2df1b174cf82f30c3e43b392664a77ca2551983eb8f548b3ab6cac873d81451e0ed96bfe3dddbb3c5995bfc4c17eb2a348a52dfcd729b84fb7bb6c898bdf9c56ea7129f29bbc7573350dfe19d496e115bdb9a9d678bccbc3aa0d7e02f3116ffd5b1e00b7ec045ccdc5aa657c07a737d4f111ad6336f8aaaab1fd73995847ce7e9a053027e8519ccff34065312d0609ec792d4675892e28bd6054f52bfc602c1abd50943560103f11b2ca63bc43431cdbd94f55da41b65e72af7efe5ad0b77ed9b64719a93f4ee14e1e9ea76ab7a761d9f021a8465a82ed4f87bcdc2ae9a35a9689bd0b00174c0bab21b64eb34887dbd80d1eba8a3c72d2088f41731e99d74d2dd595c3c9de56630fdfb25ccc8b2344676cbf86046f65b4c78678df00f030a7f19a3d42516ae42f10a26b86b48c1bfc37074d3e07825208edf63c2bb6b846f9d104cf8ab98f01e1ae10f0414fe1a26bca746f83b0185ff018bcc5ebab4d4ccd25b6021dcf091db1cdb12372065f660d21fb128eaad892236315814fd098ba23eba28e223e989e3794102f3baee7bbcfcee1b43caef7e1995df6fe8bec3bb06faa7938f1cc005ff19033640078c173fb98100fd05933f5027bf3b635a8b0ef2c537b12f0ed27d71b0d60456094b57ebcc78778259fa5f314d06eb34e112789f7ed092e02dcd5772c5c2fa7c1990a826b3a7b387ac7ef460488c175af13044fad08e200c8df111844109214bbad52a42ee6fbaf8c9120f266e057bccaab3badc32f2b90e0951938547cddb98010cd719005f6e92fbf5b8197cbdf397daa1bb2ea0e1fd1dfbee08dd77fba0dfdd2d0b8120dffe87ce1c47466d8ec5a2eade9881398e74104df4219a8118e328c418937d1d33c67feab8898d23b644c80d6e765b2e966aac73aeac110d22b5e97870a6a3634157cf1e23c88e4f0879a6fa61d4dfd1a5143e34981d0b3934f82f4cf2d8b092dfc5248f0b2bf9df3ac9bcb6353e167ed38ff7b04c6942c8a6d07f301e13c3f2781f933c29ace40f30c993c34afe10939c1356f24798e42961257f8c499e1a56f22798d14d0b69749f622a4f0fabf27f759279dde08874544eb259d0ff3095678455f9338c726e48ca2c86a89c1756e51826796658c91d30c9f9612577c424178495dc492799db5c61489bcbc2549e1556e5ce3ac9dc948a42da5c174cf0ec9082bb6290e78484dc0d833c372ce4ee188b792159f4d009e6adbe23d311fc2a2eb8a74eb0d8ffa70daa30bd30d0478505dd5b27993fbf201d1ec936f7c5401f1d12745fcc341686348d7e98e0452105f7c7626f71d8d81b80c55e71c8d81b88c55e49c8d81b84415e1212f2604cf0d290828760b1b72c6cec0dc5626f79c8d81b86c55e69c8d81b8e413e2624e41198e01521058fc4626f65d8d81ba5919c2bf6c5e4abcf45ef66dd167b1b27ef4d59954e5c4cc4898dc6e26275d8b818a393ccd7fb5b938ecae7e382b331bb5c1bd22ec762828f0d29781c96f6cb42a6fdf158ec95878dbd09188b8a902c266282d785143c0913bc3ea4e0c918e4e3c242cec154de1052e52998e0e3430a9e8a355b4e08d96c998669bc31a4c6d3318d3785d4f8084ce3cd21359e81697c62488d7331c15b420acec3506c0d896226a67165488df3b196e1b6366819166038aa42e228c4705487c4310bcbe26ac266714518e8da36003d1b537b7b58b5e7606aef6803b5e7626ad785557b1e26f9a4b0928fc480ec6c0320f331b5ebc3aa7d1426795758c90bb044be3b64223f1a13dc1052f0424cf09e90821761824f0e29783126b831a4e0624c705348c12598bd3587b5b7255873aa2564736a29c6626f4816cb30c1a78414bc1c6b4eed0bd99c2ac5626f7fd8d83b06637120248b15188b5343b25889093e1852f02a0cf2696121afc6209f1e12f21aacf03ba30d0abfb5188f33c3f23816e37156481e65585e7476c8bca81cabe09e13b2825b81413e372ce47518e4f342425e8fb1383f248be3749da4639cd318df0cc284b55836ca2ecfb6eb26bd40c74ceb6c7628c6bd63725990f55832d1177342dba08b761e3b17a613ed5c7b44f0f13ac1fcf4a258a283abfa09e2e07a02964b5edc06b9e4464cf8256d207c13963b5c1a3677d8ac93cc9fbf2c9dd84c329c74a24e3077f4be3c1dc1437133d98209be22a4e0ad18e42bc342aed449e6f321ae4a47e524f321b6612a5f1d56e52a2c315ed34689b15af701bee0d6b5e9307909175c83c1be2e24ec5a0cf6f561616fd71578d9ce698cefcbd91eded4aac008e6397d43da85d88da2101b9610ba7474c00aa61d580e7c531be4c07558e4df1c36f24fc2d4bea50dd4de8909bfb50d84d76335cbdb629a891b25e2b4cc31967256c256b42ec9b29af145714e1111bc5346fd0c31c5a3d4b9bfc6b9b35b9834bfa2afbfe806b1f9d3d0b4b8e1373077ae62b075d57761a1bc5d17caf35b43b9cea949f144e726d05de2ef52b9006fa39813e926d0d2d62797b4ae8214bfce42a3e451cedc4d068b598b0817971b4fcf93c09f0fa60726a982f1c921dbc5dd78a630b1fa79af77e4049d08b41b237d07664ff08b6e980a9c775c5a0d4ea6b8c5b18d4611e76e682be4ca537e6dbd77f1eb6d654f0d5828efd48572812f9490b91bcea572c3bd4a8dd5c7c710bc932cadc0b782846c0f16b2bb74213b3aadf85b246614d7313561267ccc79778284ed642c6c77ebc256e40bdb2a113b3b64c8f8d9be760b492316927b7421b924e2fccc7b87afab51ef48ddcff84c566fb9aea600560ed9e1a1e065498ba866c05c8f57b0da2e6f6bc2a8dfaba3be28adb4b192b94bca9b90ab3563e1bb4f17be958456c5af9e2c3ec343e55687ebc4a7eb9cda7d259a936412ab2d58a8efd785faa8a4a1c6352d136171d79771c3a84a637eb54a124a4c1799c7e65e2c5c0fe8c2757ce09a5db9b8135fb7d34970afad6dcd071a9df2803775c2d4043389e753301e9fd3f1581149994d5d9aefc3c2fc79ac9e12cc06940df3f50aaa842018cf412d2248c8f66321fb822e64f39090ad13e9b35ed64ddca6b66ab5ac97a9b83a213668da2807b0103da80bd152c2dc57c5aa3b1d7f1b7357786dbb909e8a85f48bba90ce67582fb92ea7880f015cfd8633592e62b951b486aa9c12777f1b86ea2016aa2fa5d32688ff2eac21ac13b1d0e83ccbd3e1f624a55fbc8cb60bd96958c8beac0b5971ca9c33bd56019e87266bb3669a539e8e85f1215d18f391fc04cbd9bc5c651d7357b5e6d6c89f6ebb583a030bc1c3588ea84f5589a9297ef76bbc0fa7ad4bec33b1107d4517a21ae2564eb358098bafcbe3b662d68b5459d79a43b64dbb3d134e67619cbeaae3b4aedd5a83c90985e77036c6e1111d87c5680ae0f6becd7948e557ee6a4cc96b01d1a48873b0107e4d17c2d28021543b56ea63a43dc27b2e16deafebc25b4668d94d19d489da82c07918816fb4555dc9cddb16819a127da8cec742f54d5da89605b4636f8b3a136cf8022cac8f62bd46416370a97822d11afdf96bfa728384ef1016be6fe9c2776488da7cb32879f9824bb5b2ed8d87aa22e1d92061ba100bd3b783c599df3ee1ae26a952196549791116bec7b0f005afed2e937526ef2e1f854a5e636fabdafcc558f8bea30bdf0496bca7b6c2214ca1e5259896df4ddedf1a2416ca338a054adbbb140bf5f774a1c6f72cab68759f807984b7863c2ffb5bb4f5ceccc65c2ec3f47e5ca7f75c96aa155c2ac66b798f70bd58417c09db2516954bec9348160399b7172fc7c2f37dacb69c3c8df01e8ab5a206d9a4a943a433bec36b5eb56d18c22bb010fe209d7e0bfd784da9b03d3e365129fb0d13e32bca319b2bb130fe10eb354ca76f269d50669663641ed2abb0903ea10be9f2b462d33ffae6a64315eef68cd7abb1d03ea90bed8694f14a3b5a413d8e710d46e3a9607d5b895ed5ed55c3bc160bd18fb03e9b747beb92a7e074da3cc1db4599dbf9751887a7751cf07d1cf156835a52b8ad6cf17a4ce31feb349e9432657a636835e22af731699b1acb0d98a6cfe8349d9da4a6e5b7f478cddd2de8bd3e3e8af47223169667d3f12bc3cab9258695713761a1fc0936461d2c9f73db64897713fd0ed4eae6787c264a5924fa5d783b2348986fc6c2fc9c2ecc137d31eb7d933a35dd82e9f9536c84082b15fd3a2f933aa75babc8b4a7e6562c043fd3856013a3eb4d557d03c9c653a005a69bf2d43b41a8dc8651f9793ae3b6ea8b4172152f64588a6b9bdce4762c64bfd085ec84768eef20f19c690ab80323f2cb745a4b41eb5ae1ebcb99c7fd9d58487f954e6e552c62d58dc166d00be65a41112b4c113e5d4ec6df0a1282bbb0103c9fbeb725ff66909409c3875d6fab18ba1b0bdfafb1debfe4351a6f7302bf8e6a73083c7d611b1b244b939995f6f760a1fe4d26bd4e6eac963b0f6f636edbad8ab5b797f9bd58085f4827e5e90967564f48ddc2e9e2fc8bc5f814a825428adb87d720dee1b5c2dcb1cead585e6bc930a335c79f11573a78d7f9f77739b1c1d344456bdecea7802597f0a203a77307e6fe4c965b13b90562ac96f9a798150bf9f532bf51d63a431072bd51f9d4b9194e2db04ebca526cba50a85ae949b01ca3918bad461da8c4c7e8b895d0fa12c87f4384efa700be94b3c5647c858ed90cb7757894dcbd09a526bf15bfeb58e7a1b1a924016a60e9deeae80d5b2f720c6d73ad8223ee36e8887bb7aa7fcb27fa156ff978f1002547d30a5b875200bd0891b26cccd75b76b646e87e72b8ecc2e591df2788cbc4c898d4f0f2d11f5be3d0e38d73b48953918c0262b10be1ef310be428990efe1a79ab5cbc5a01f17e06d0ebb86edb402d8435d3d60bfa3043690b9db8be531cf6fc766707d7b78e07e4f09aebf061c17c83702e7437b2de26ab515d0b6320fdaabd4d6169f3c973abfeba48798f21d70adce0670393d3d70af51821b2ceaa34d69170b36c0bb06140a7fa084d70324d535713d303660da34d2c3f4474a4cdd0026cf2dd006444f0ff610fd8912516781a8c9aa3caa532f0fceeb9470c45602ad757e35d0e50ea697894c9f6f63bd5b64f36b6557900d00df0309f00d4a805d4102e46af2b13f1b00f5edef01fa33750eb54674b67b8b5cd851c37a0cd8d05fa2b2213547c10640af0cf000bd4909882fe1a6aaa04bd83e11ea96d67a13776aaa16b5aa326161d5c2deea9d0fda0091ff28887fa584c8773e86f078170f9f235ad3ba9a62b5e595d381a0d3e72d4a94bd649ea6ec6dbf2c31ddc98f36a07a11e46d7f8baaf5c81b4370fc5435886caa997dd8c503f73675eb11828313981689f6241fd2f0a66ad900ef20e8e8f93b25bc9ea044f5e6a8b8b3a76c00f55e3f0fd43fa8fb5e5789e4b7d3b70c4689f378a3f8920dc0b676f080fd33dadeb0788f906acbf2b37ad069fd0e7ddf2baf4ab8d3ed6dae683c9de541fb17b5b52d1123462de2e3de3a34deba444d4e1daecef99e0de05e07e0dea504d71b24535b7bf8b95b8282f56ffaf12477e8b74188b1bb1d301f58d97bd4bd67650eb46296fe926e36003c242ab95db27cc2fdfe82997b6f04a38efb99f4616e9b768fb8da2ccbdf38bf9309ce23c669fe1fe837929371ff464eca7c2e27ed31cf9cc0e35539193a3fe4a455ebcc09d9619113c0a3252750169893765d262750019e93517e9213a8899d13a8029b93966f464e2087849cc02d5b9dcef810744ec2804f4ed2e6608eb60b3f47db299b838cb7e52419aecc417ac07352f422e5643436e3393cea1d15f3b8c3e3fbff9ffb22e6715fc40f3804be3a3cff71eb0a1f52d715b885b8aea73cff4ebe3cc64ca7c4f6e930324187f88d16549d40a74db7b85a43ef74029849cd210bf8077c6412ce7c2b71ce06383f36096781953837019c9f4481733b0a14aabf85cd624574387b52e1fc1cf3707e6a12ce422b715e0370fed7249cb3adc4f97b80f37f26e12cb212e7d300e76726e19c6925ced50027eb6010ce022b71ee05386326e1ccb7126725c0d98112e72089b34a362bfd9387e1c4d43c3a90595420ff064076a404398a791d10e97606f1e71bc5b3f655e51702b09d28c18e61b07728fdde519be18e0670b328e10e66c99b9d501c2fe9c95076a142f90940d99912651f89b2c807d4ed37e40fd967870f00785da28037277a782f51c17b18c0eb4a096f488a323c3e1193b6cdc992f15f01cc6e26c19c6d21ccb701ccee26c12cb410e65f00cc1e26c19c6521cc3701cc9e26c1ccb710e69f00cc5e26c1241cba2083f96700b3b74930095be564305f0430fb9804d3c616ce1f00ccbe26c19c6321ccbf0398fd28614e9530eb9d87eac551bfc365b01d4f0933830154c8cbc1a0707f4ae4dd05f21dc2d7c7f53dda2ee0d9d72eef09ac74407bf60fc5afca48687d07a850d600eb1b488972724282af14c2bc4dcb173bffb975ee153d982d2cd9828aa4b0c972d72300ec4151d86d7a45958d2847802c603025cad19a2c20dd05d849d19e4f85760cb0d221d456ba48b85637488752be3ea6dae392bb9e2a375bd779d9be82aa13b0d2a194289597fd4ce7ff2ea6065179f9ceaf46d08d4c96d04f050887458170f66187f06b00e1704a8403983756a98efe2df96c1d93fc2a8038220a0f8ff41db5090734c870f60785cc489370923acc90e19c0f708e320927a93b1719ce5a80733425cebeade5765ef443bfc3a9f03d0bf2ca31e6f86fccb5b0ec1e0c2c313b0a94d0816ba553095f26e77fd53a2fed8ba2042743d90cac722c7d4731ec62dbc2760a748bc54cb39d5214df57bac61191b01c800549bc1780392e8af677b398a5dad4da25aca6e1a9a3aef76826e5b82519da1b01daf1510c68a4eb4b4c987f927912cf0330279804937074880ce66c0073a24930097d3dc860ce043027990493d00b890ce6640073b2493009fde3c8601601983926c1b4712a4b218039c5249884be1e6430c70298534d824938ce430673088039cd249884fe716430270198d34d8249d8022283390ec03c821266364bec3f0ae6714458be93791ccd047d4a33dad363cedf594c988b9275154f04b69a6b124cc2f29d0ce60c00332f8a7e77dedbb997a9dd42231ae825c33708e09b49896f18c097e8c8c58579337c6d1e397f1200cd8fc2f920efb0733e3819202c880261d16187700e405868767588b05793ac3a5408aa43b3a2728ff186d8e02811f9e01ad9a0c50160a345e6b8b6da3809702e40393baa523cd522ab36bb6ecd0240e798b438cf2c2bbb3aee0138e79a849374662519ce8b00ce7926e19c6d25ce9700ce234dc2596425ceef009cf34dc249ba3e3119ce6500e75126e1245d50970ce76e807381493849977b26c37902c0793475cd33bdcd0eca846a7cbb05c29ae7522aa0700b9d85512c2055e06bbf47d0ed41360fed24006f1125bc112cdd297ef1f37d09c77e5ea582ba1274762c36112aa18f0719d415006ab1895009bb41c8a02e07504b4c844ae8274706751c80bac444a884d52632a8c300d4a5264225f40121833a10405d662254c2f17532a87d00d4e5264225f4002183da03402da5845ac012873ee227c314336f472a3720f1fb5bc56f76e76d1256219a096a0c803012a65345021fd85291708c39530e6d5c6bb62fb0e715e64eed226c7d918d92fe1458e94a73d6aa235d4280cc4ecf0630579904d3c63591cf0130579b04d3c635911b01cc3526c1b4d11da205c05c6b124c1bd744ae05308f3509a68d6b226f0730cb4c8269e3827e2b01cc729360dab826f22a00b3c2249836ae897c2e80b9ce249836ae67731e80b9de6c5f661b1793fe2fc07b1c25de5e12afbb3450bd68c5bbb2eb28d7b321db288f01701ba25e4f36fd6e0f1bd7b3190afa938e8fca9f7995e8d1dce9ebf12c715e6b145fb4d99f7928b0d5132881f64e9ac89be8d075a742d701a0dbd89ed314ec5f3ea03f40b9298ab99a7c0fd6c367aee61a806fb3190b98bba3477b84c5bae342a49649b6f3603528704e34693154d2c62499a5760038b7988433df4a9c9301cead26e12cb012e75a80b39212e77896385b6e09dbc7b8eb420b53feca6b9cd7ab196f469609b0ee3e06f5d1d438fb5141ee070aab6d26f9d9cfb272b5ba7b01ce2a9370926e414a86f36280b3da249cb3adc4f95b80b3c6249c4556e2fc1ec0596b124ed2b175329ccb01ceed26e12cb012e71e8073874938f3adc4b911e0ac8baaafb35cd42a5b1cc98b18df396bbd9c47572de6d1d558ddd7b909003dc91cbf4e1bdd153a8396d2ce28c631d5e26aeeccce6da2a9a91eb27d4da6adc02eeba398d9d90efbc390c13b12c0db65ae873161014436d8763740bb3b0abb9c1dbd5d92c17b08c06b8802dedcc328513f03e0eda12f5e766816aa2a779854b12aa67c1df9b201bcebcdbe6a4f0f00f36473dd11083b8cc912f900500d6a3467a53a1bbd8973809536993186a9db8499102dd9e21765c04a9b4d1a2522753b24cb4f47039c2d26e1ccb7126729c0b9378aa6647aadf27c2bfd8b570398a79804d346ffe26301cc7d26c1b47186e5520073bf49306d9c61b90cc03c60124c1b67582e06304f3509a68d332c8b01cc8326c1b4b14db410c03ccd2498360e592c02304f3709a68d332c170098679804d3c61996470398679ad4a0241db6206b50760338cf32092769f5880ce75c80f36c9370923ac990e1dc0a709e13c51e46b3d8e1b687d1f5cc43786e146edaa9bb8a13a7bb2c7284368a79c0a4135f0ec588206f00767a1e25e4511272bdf310075c23fde03deff7f86c003a76118225f37f3f12803d3f8a59eb0aacda5c2f7e9c335975cac69ae91480f782f61c928b6c31ca035428df00f9ec214a946305ca52e7a132018ccf09de2b5ff7ac758bdc3a6ab1588272a7bcbfd439d6386209170aa0aba902c0179ae3906863b27f0fa0bc8812e5c014285548491d1a865295fa5b40ee79b1d94baa10f68e922da93203e0bdc45c6745c2c13a32579cd74106706914190056ee7b1900613e4a9601bc05305e46bde8cf5ad9a2570edda5c23279b2b7af2cef0bc05d1e85fde5b5da60b56890ba73866d5fcae21180f10aea8e650eac447cb85db78c2aa582990f605e1945fd12eee1ee6f66dadde7f41440795514dd7685875db75d0d407875143d4adc1a978832ba4528c1f7c7ae12897c0d3b4574d4353af77805690fb3795e5b01007b8d395ec8363ad62c0528af8d62d646a1af156473d9dd00e05d67d2fcdf59946d71b2f9bfb7009cd79b84b3d04a9ce7039c37988473b695387f0570de6812ce222b717e05e0bcc9249ca4ebcc91e12c06386f360927e9c2686438eb01ce5b4cc249eaf045867303c0796b14cb9df2ad9c0f9fe54e17017cb799e49144ba5d1319ce216050e276937092cecd20c37914c0798749380bacc4590770de4989b3ab105023f6b16c64ae8b977dde459d41de781725aec92cc806a2bc1bae4588841b85726a11381d2ca2827d04807d7714e5f84c51e9395c56f97805e0bb278a3e75de21bc8cf14e5ede15bc5df4aa375addf57b3a4078af391e44364e9d1e040a9afb28510e627ce4bb460edcba3e6ed8f823e1be18644550576093f79bebe462e37a33d702b40f98b37d58819533d27f01607ece2498360e9cfd12c0fcbc49306d9c91fe0300f30b26c1b47146fa0f01cc074d8269e38cf4c701cc2f9a04d3c619e9df0730bf64124c1b27007c1bc0fcb249306d9c91fe5d00f3219360dad8b0fc0d80f9b049306d5c93eb0500f32b664f50216c13914d50c9059d205fa5ee0449d69fe4aa5e24fce3088b23b23d80ab00c847e8e74ec683747b337947c76e768ce877df937414ddc62d433b828ce06be638bddad8dc9c0e507edd24ef8e5994451499657e09e0fc8649380badc47913c0f94d9370ceb612e71f01ce474dc2596425ce9f019cdf320927e92c5e329ceb01ce6f9b8493b4b54486f30c80f3319370922e084d86b31ae0fc0e254e7ea22647db374ad90760faae4956378bb2cf9dcceaee0238bf6712ce422b715e08703e6e12ced956e2fc35c0f97d9370165989f35180f30726e19c6925ce1280f38726e1241dfe25c3b90be07cc2249ca4ebbb93e13c1ee07c9212e74816bf1424e7d0c2f8f0857f0148ffa401c2ae6132a7d84f01d6a728b14ef261ddc6121d0dd3774924444d56d5df0c86397e14850bf71c76b82d8bf24d60ad4f47e12eabacb549d81fcf02964a7835da41387b97da2d02d6f96373bce36df4a2eb0e503e63ae5337e1983b591efa1390013c1bc59a33337db66af336cbf301bc9f98ed0f42e8a248e60f321524fbe7a2a8f0c315e47449dceeb2fe47c05a7f4a897382afacaf6770be9b7e0f8365f2e5c8162e9f48857914b0da9f99e31b62a3bfdd31c0627f1ee56e053ce157fbe6c91d7e4dd57f01bcbf3069b100d2ee3e329c1d41c2ffa5493849fba7c870ce02387f65124ed2de53329c1500e7f326f59ecea29c7248d67bfa059077feda249c8556e2bc0ee0fc8d4938675b89f35580f3059370165989f3c700e78b26e1245df38b0ce75a80f325937092ce7e27c3790ac0f95b9370922ea14686731bc0f97234eb2ab5439f28599bfd6580ef95283a94f9876b85252ad9bbe523f6c18b0178bf6bff1970aa90b16ff0ad2768edfcde1490368e62fe1b58e4aba680241ccc2003390758e46ba68024ecc82003990f40fec1149084a3ea64204f0020ff680a48c229ac6420d700907f32052461d59b0ce40e00f2755340127a759081dc0840be610a48c2114832903b01c83f9b0292701d1a32902701907f31c71bcec665d03e631eca37a95bd8de8ad95cd126c161bb582396bf669fcb566f00efaf51ec03e8b912ea1d5f2a444f0f475b2b84eda26d289e4f965302b06f51821dcffcde45aec396e747cc05ba9b7f1e6e1bcd4f03b9e8dfa29cb3e102e52e5c3c2328d1164ef6ae97743cc0fab6392e5b362ede370164037f8fc2551b96f3e9e7b08468c972d825c04aff1165e2af739458cfbc0d9ca0f0c8fc350f5061ad0458ff19c580c5acc368b4e73e90dcdf896279c9f4aaf533ad5cab330f58e2bf4c8269a3ef700180f9ae49306ddcad601280f96f9360dab85b410e80f99e49306d5c3e720280f91f9360da38cf722280f9be49306deca6cb06303f3009a68dbb158c05303f3409a68dbd48c301cc8f4c82696387c70800f36393a6a990164164d3547a019c9f988433df4a9cf300ce4f4dc249ba9d1319ce6d00e77fa3f00de6c3bd87cfdee947330fdfff28f10d647c09d34ab9cc1417b5db797c87f37883e82286bb5cda87310b60fc8c12e318e6ad8be08efd6c71d46d72d4a9123cf8d0f022c6a748f3fef64a47004fe0d5cce64d6d8f0570f93e0f86ae35435889271b7bbf15a08d51a21d98a2305221251db0181a23c2782228843a5062ccd6600cb6ea0c618f12d9aa33d301de8ee6660084031c6419c0f32003e8448976ac40bb5cd86719e3a39335b2b8aa16a29477c84e1101dc8eab9cbf5df14b9d638d23b6dac2c2ab3b009c6576d64038a6449635ac075943e7280a30cc4fa4586408c4eb768ea22ac0fe01acb40b2546d5ff04ebafaa31e0350fecaeaf0e0430bb52c21ca581993a87b517ec6200b61b2558b5ba6c013bdc5697bd1a20ec4e8930985f9d8d23f04b00ca1e9428c7054059ee7c930b69666b9cbf54874a136db13486aa58fa2740dc9312f13016ef5fb747f446ed486ab3368e331d03aa4bbd2881065f72cac64d476f06f6d9db249c8556e23c13e0ec6312ced956e2fc39c0d9d7249c4556e2fc32c0d9cf249ca42e0f643817009cfd4dc2596025ce1d00e7009370e65b89f338807360144dcd3cf1db3df201bd72e6b6e7ed6dad9f08100e8aa2a9999e4f938dfec9fd40b57d7054d6e83637b9a07dd21223e8f878950ae1d781350e89a2a39823ac699daaad6edbde7ff418c03834daa1b8c37d9782c100ed307347396ddc96ec2a80767814f967fe61d7713c1e201c4189d05b83b31dfcecc8c62947017c23a318604bafdf3ddfca9ef73b00cc5126c1b4b16e79278039da249836ce7dbb0dc01c63124c1be7bedd0e60669b04d3c6b96f970398634d8269e3dcb72b00cc7126c1b4714cf2520073bc49306d9cfb76198039c1249836aefef1790073a249306d5cfde35b00e624b31d6109133e5903b313e8229e1c45ffe6cc567bad16dd72aea791edf3e1be01ac34c7a461b459943928d930da8300e7149370165a89f3068073aa4938675b89f33580739a49388bacc4f91cc039dd249ca453b3c870ae03388f3009678195384f033867988493b46d4486b30ae0cca5c4a9d6e8ccf755ea6d1e4cab03f0f2a2983ac09d114a185f6b618f6f0ff572d1f2a913036df1ab303459ed7d940d10cf8c22b963893d7111201b37a68f81e665be493849fb3cc9708e07380b4cc249eafc4a867315c0596852d93e8b72e08dac6cbf1fe49db34cc2596825ce2b01ce229370ceb612e7ef00ced926e12cb212e71300e71c937092ae9648867305c039d7249ca4cbfb91e16c0238e7998493d4a5860ce76680f3484a9c53987f42356f7c563b3cb883b60aa7e7158f8d762e72fe6a140374a44edd37c688806f0735d3f994c0d56e85d810727cce4a06926cb7c231c0728f3205a48ddb870f0020179802d2c6edc30f0290479b02d2c6edc3a702900b4d0169e3aed78700c8459420f37ca57b0b3a63089fb855ec3cb1cbd1a7419cf1a04654d61fa22aeb8f0365fde228dcc5d2edd4231c5f22ebd2fb1fb0e562936012fade91c164c0324b4c82696367f33bc03297980493b05a4f06f35d0073a94930092b526430ff03602e33092661f59e0ce6fb00e672936012d64cc9607e0060969a04d3c62d4f3e04308f310926e15c6232981f01982b4c82493897980ce6c700e64a4a98f8cac74b9ddf75ccddf4a4c211c005dbbff2710500bb8a12acbbd1f84ae7812ae11206a7c7b4dbe2fc649366ba00acab29b1065ba2cac699ef5d4013730d25ca70abd71096f764abd77c1158e95ab367ce11b69ac83281aec0728fa5c43b00145a7b45a1c4dd6edd1dba229a3777800ae21660a365518cd3c3921f2baec8cb7b329b1c09709647919b2626f974f2531bd702eb0d927b4514653e36da145fe6dbb80cc61460a5eba2a8ee6752e613f6d793d9e82500ec7a53c1dab8ddd90500ec71a682b57123c9a300d80da68225ac9d9281cd05608f37152ce1c81319d86900ec09a682b5b182350c80dd682a58c2de5532b06701b09b4c054b38064006761f00bbd954b036f65c9503b0279a0a96b0b7950c6c1900bb8512ac5a8d79166b87d598c9f0ed07f8b69ad30760e31a79a5006565141d7fe97b43d9e8f63812f44e6d330927e92a2564384b00ceaaf61cddf777f6d9b850eb3a01b34b964ff8d204e1c5c272b8ed54316f3591196c19e38edeee7a2355cef94a515637b3ad4e62dde8fc0b16039b9d7fbaeb31b164cc12a756b7475ce5f2aa85ec5dce5dae5913cb9be03c52cd0da2b334881c91572f7298373bcff0fd93f9d7f7b372e6ae96b2c6f9ad7c0b5a04921cb114a2b76935ff02dfc67a076b14218e5f4d2527d6557072b784e1e1e20073a4ae6a9b9852594ad43961ae149a343acf7412df71d3634eac173853c347a5a28ec3b5e011148bf59371c2f55925c252e984a1521c2b5adfcae57b99c48a9c5f6e6d69466b3d698674cfdf25cfd4f5d432798c249756c3b1c7f4e9b0becd6c2955885cf3e7efd70a77861a21b534654853870fb7cb9e49622577128f8bc339fcb53cde65b40b331d12ebe1fcb5ce89795738dfc4a7d1f99b2b357f410796f5ff003f6e319f7e1b0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/ca0eb6f2f88bf1f42b34faa8adaa2f2d.asset.meta b/Assets/SerializedUdonPrograms/ca0eb6f2f88bf1f42b34faa8adaa2f2d.asset.meta new file mode 100644 index 0000000..b399fad --- /dev/null +++ b/Assets/SerializedUdonPrograms/ca0eb6f2f88bf1f42b34faa8adaa2f2d.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f0dfa7443c0397347a782332702bf354 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/cb31e78c53dfaa5428df595dc23218df.asset b/Assets/SerializedUdonPrograms/cb31e78c53dfaa5428df595dc23218df.asset new file mode 100644 index 0000000..0b55b06 --- /dev/null +++ b/Assets/SerializedUdonPrograms/cb31e78c53dfaa5428df595dc23218df.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: cb31e78c53dfaa5428df595dc23218df + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec5d077c14c5f79fbdd03bd21524f42825103ad2137a87501414024924120226a15941114551b16317c58ebd616fd87befbdf7dedb7f6776e6f6ed66deddcdcdcdb1cbff871f59766ff73bef7de7cd9bf66626924dec3f5637fbaf59643ac9253dc84c5248969132fb5fb9f675a9fd9f73279e4f25e5f6f560fbef02fbb76e2433ce97f44f17aba5fdf738fbae8254da5fae208bec6b09fb7d0629b2ff3dcefeb6c8bea34f8bedff8becb7ac6af64733491e994226931656b33810b3d84715fc9945f5b26ad97f8f246bec5f8b985034916cf6530bfbaf19f62f15ecb7a5b6d0e2bdb9e440a6d652fbb745f637e5a4d4c65cc8106bb53e83b07f10e7d2835fb3f9b5bbfd7f6dfeef0cfeef5afcdff0fdeafcda33c1f77b81ef6a837f53862e89f17d8e738d0cb1af35ecc795e09e7efb357fafb78317591c03ab2fbff6e3d7fe1c734502f2d7e4d70171f48d8531106025c2592d7edd8f5f077179572699fe108723eb028047b91c0ae4d90fa45d1bfc4e9f0dd6d05de4e3305f3e0e73f231b285e7dfc7fc7d91e6707e1dc6b1ed779af06fc9087eed1347ae91ce772cef84cdda69662ce7f7b9fc9ac7afa3b86c23b8acabc0bdae2c224f4773cce13c8dd592e7e27dfafb1a7e3f865fc7faf26b1c7fef307e3f3e417912b13f21d3489ec6e1e0dee6b1da82185822df737df99ecbbfddecf0586d874f1f607f52dc091cef8804f4e8c6af5d01e64427ddc96726f0fd647e9dc4af53dcfc9ffcb3f7b7481e97eb48706feb597dbd4fbf7de3e827d2ee0a7410ef4fe3d7a9fc3add9567cada0430f39d776b3dc0ef673a32d668ed3caf21ca81b0e919716415793cca97c7a3386e25c7157e6796736f6511d7a70a1cfafd513edcd13edcd11c57f8fef109ca399b5f0fe0d703f9759ecbdfd46afcd9fefc3a97a73986787d81288773dc6f9b2f50e42d561e1d44bcf5591f9eeed804ed663ebfd64ef07df1ce020d990bf8b54e8269d6e1d7851a69d6756ca1d6ef3e5b9819077391c36fad23800c364e6d514e0bf9b5885f8b39ffc2efac02f7f1ec209e2c07735984bf5de0c852a725bf173650e295851ce293e9e8d4c91411f5c95a704fafe3f9f375e09eca3ac749a7ced31c7309bf96fa645e6a4e66d654b7bfabdf14d84622dfc5b2af658e7e750738d875e7f1e7a2ed20642b70e5ae35117c2be448a43c94732e26f9389ec46510dc56f8de3b06dcd3eb44373df66ffbdb7ac2b672c073faedb1e09efe7e6882b2ae20556d96e24c01694fe16973ff5f6f0b7f7725a95af664dfd2eb64f06c32c7136dc455a46a3d26dea3baad07f7f4f7ca04755b2d91cf4eb7fed818df8af699f03ff35d7ba8f93a7fc6db6691a9c45bb6443d3ed0fdc612e5e670e7bea190855f23d3002fd31cf91af4e4eff0b6075947e4f5ecd180075e1ec95a37edd642dea362a425e43bc6a7f73217a76e26975df8316e6bd132e37f973e13fef7047e3d895f4f74df9dbe893f3b9e5f3772d9a6138f6f261bc0737a9dc17f3f0edcd3f78e73b19b091b1569085965f979b24f77990f886567a738ef4e13ef9eea70db701be7ed699f0c4790d8f6bb37d72b9f78ed3f9fe3feede0361276bc995fcfe0ef013f19e165899ceeea345cd4b1a701dcdae0df89c8188b8fb39d74a2fd8e73f855e4c93c80dd9da73bcb952fda763b0bfc46ef791b8e9c493c754e4c59cee5d7fa71f4e901dea3d7f334f48ff55b0d7ebd90eb369b78fb62b39d3c6efc750cac8b1c9e5a8afed0c5ce377bfccdef2f717e6f2cec632bd089a601eae646a27c5cca7fdb1fe8cdfb549103c033def68fcc05363387ff76992f7f36f87edf063064bf5f0e6490fd7e057f7ebc237b13f1fc4a9f2e67fa643d8078fc05b9aaaaae91037c690bbf95485e5ecdbf9de7cbcb794ebe34d91103eb1a795e367d9cdf5febcbcbedbebc3c509297d7f1df0e02f9368c3f9b4faae6ef02c083e84b5d8fe4a5f8fd06802bfbfd462083ecf79bbc79d9ac237f7e339297507e9897b754d53532df97f6c604f2f2367ebd955f65edd7db89ebc729ee8909e0dec1afc7c5c0cdf1e19e9400ee9dfcba2306ee5d88bcc9a4276c5d8c211510afadd37bdb6e9b6f8b81753791da7a0bc1f93dc46bebf712afad8bfe25b48ffbf86f8bdcfc27dc2f440a49555b2f0276c2dbabe47ef00eb455f1fb030057f6fb834006d9ef0f118fadb76cc49f3f4ce4b60ee587b6beb3aaae91425fda022b565e3ee2e359f05b4cbcfd9562277f5a0a4cd13eba98c4ae1b1f75f00f177dacc738dec11cff64706ff1b11198ee629eeec70e4e2bd14fa8c79ff3f64fab7bf8f3c7797aa27df184f35eab8ebef79e74ee8f10fdf0a77dfc3fe3b395435c7b8beaf214f80deab68478db24cff2e7a520af96806730af4624c8eb73fcfabc8fbf128e770ab8a7efbde8ca7f84a8375ee0d773dddf1a8b76bdc8df7a408e97e4b6c2640579a6dc46123abf1c4767159fb494787dd252c70ef61a1003eb75fecebc18efbcc9af6ff1eb1b1cbf8c78fb2165fcf7b7f9fd32dfef621c6187cb7db3ef811c029b7e736a02fabfc3afef72fce5fcdbcde0ded6adf50227add68bf97501ffee3d1fcefbae5c47b7f67dd32701794cfc26c6950e255e1f71a8a35b1bd12716b67b541c7bfa805f3fe4d7b51caf9c78c703f9184ecc71ac7869c5d02b5249bc630762fee9237e5fc17f177db495bef7c5dc21f78d9115bef757fbde17f3529ff0fb55def7c9a70087de7fe6ea16e1e354e473f04cf4cdbf70f969cb7d4c648d376df225f1f607459fef30fedee9e03bc881f85df46b0ff7e97404bf3f13dcd3eb913edcc37d5c1de9c33dca27ef57fcfa2dbf7ee3ea787425f806f0c9e6af01664c9bfe8c631ccdbf390bdcdb36ddf6f31818e25bc1c13a8e7136b8b73132331d79336394dbc8313efed682e7f47a2cfffd1c704fb163f58db8ec91f53eddd6f36f7726f0adf0971b7cba6de018bcfe6fd72806d677fc2afcabc84361b314ef0449be0add78ff3b723c97610bb8b76568c7fb90e40722b7ede37cdf9febfdbebd68f3fec8af3ff964db48bc6360bff0ebafb84d92df7cb283b1b6a87c3ffbe4137d0221f7493cddf3801ce239bd6e22de3a4db461f89852e464dfef626c4d36d71eab8c34e3d73f48d23e96fc09b01219fb69ceaf7f69a4f937c04a24cd16fcfa8f469aff02ac44d214edbdff924f93fe338a95409a56845f331c1b68ff3cc85ffadce2573ef617a16d596a47e7837b91a7dc8e3af0f9218bc73059356263474ee59817807b0433a62ebc2c597cded3aaed7edf67307fc6e7ac2c3e9e68d573dfe9cbc73aac06fccafd98d510e0f0f113ab3197753397fd42702ff25ec8ce6dcfda83ff46af369f9db94c91d338061f3fec3cd52b23fbbd36f8b7c8678edf91cf95594d9cfb6e7cecc16acad3113e8db7c5ac38f151162fe356f318faf3f261b5c4b916edb178e9c52c139cab2ceecf22a7134fdd68b5e21ce781df85afa0f767f0f72f06f7365e17deaeb7f6e4d7bd705da51cb5e678e780bca3f7677bedc16ac3e5db017e177e85de6fe1ef5f02eee9f55cfe7c2b48473ca7d7f388b7cc9c87d8857ddd47948bbd1119db2629e3397219a5b69929cfbf687efded7ed381d7f5563b7ee5e3051dc5f8d47ffc7907f79beea2ecb6e7efece7cbff4bc1bd9dff5d0b7def8bf22bc69ace05f7f0fd4edeef2267f1f72f73ec23c2db55566712db87d0722a7eeb12c706e1bbbc5f65edcbaffbb8ef765bc09ff19826ab1b6ed3166f57a0e517a629fc6b2c7f90ad80c7e751ad5e31f07214f07af36b3fe7796fdee6b1781bdbe271a9567f9e67e7136f6c04afcb647d4a6b401c39e8b38171f481b28a98505f198c963949bd11b3cedb0fd801c5117338dbc03dfd5d52cfc5c4153ebc33717db788adeb029e893aa52949dec7f3b212f18d5d4584cfbe8878e75be9bd5d26bb973afa74df04e4a2d7d1beef0e07f7f47aa12b2bfb37c5dac1b1445d3dc48b19b9c4e56f70257846df1d0ab0a0afe1d83d0597dc7744aee4ef5d0eeea1dc5b7d726f75707af07e74b45cb78fc3b92cbf3a797f8b5cc5d3ba42f23b7d7e25788f5e2fe3cfe1bd2d5bb6f08f7c3ec81aceaf23f875247fff6ae22d7b57f3f424fd90a8ef8ca36754b6cb39f6d5e0de6fc3c2d6b6f96c6d1bd7e30147069167562ebfe6c9f5b146f9f43a8fa44c2f6bb4d7de849dc5b3939ea2bdd789ff7e8da2ddb4067643712fe538d7827b680bebc0bd9d7eaf6a8edcbd783bc1e2b19cd6582f87517c059bf09771764fbf5dad68335c076b1cb00b3847247e17f178c7fb9e4ff0d9dc76702feca936f8b7cd498e98df6807f4acedc39d08de91c93309c863f39223dab13c06cb9aea7d5f167b6b4df1e5c35c204fa26553f45dae90e8300efc06744855dec5acb7848d4f4b1e235aa74dd7c068c531fa6be8521b6025327e20fa321a71d1aced22b0124953b459f335d2ac07b01219b3a0b138b09dc7db75d13a8dfa3b383e4aef6ddbef2be61b45fec6895bb5f87cafc5e39c2c106f63f179294bc4dbd8f2ace5e5dbdadf49af5f37c5f4780c867510bf8a78896b89770e84fbe1587320f1d28ac96f8183d9a714d813fd5db455b7136f9f7abba36f7fe11bf8fcbab588e0fe43b41762b5ab8be4f96c2d88c36331f21d1f178a5ce793ff3a2e3f1f93b6f8fcadb538866c25ce7d97e1ce75e0545f5afcdbc8f5beb4ae77d21a20fa1587c4c1e1fc446ef0e1dce0e00c14752a9fc38ec6b5fa6d43605707dff0d854abccc717d66fba9178eb871b91b4e837cb12c85f313610a3df24641e20fa318726671331edbd428e19f5272226ea62706f733f48f463854d63dcc372591ec7765724c0dbca38bc51ec265cd69b89b78d76b3233b550dbe67893a58cc3f6ef0fd2ee60e454cb0f069f1f4e131d9166fa35a622ef016e2f569b7e87317338f8f22d2b6b47564f298a29d1c6d0bddca75ba0edcdb5c0f16f580e8ab8bf9c5ebb94c73bc7891dbf8ef37807bf15d2275727ba063b27cad055889a4d9c6d175882813dcde2c316779bb8b1311f17ab2d8e7583289feff1dc46bd377f0b48f70b0868858376137c7c6d6c1e2b66e71dbb644dc9dc80f101712edfb8b31f68d2e76d4a6c0fcde7ad14e10639a6b01966f4d66e44e20a7787637c0dfe493e16e6fba917b88b73f788fc3cb70118bd1dafb5de45ee2edd7ddebe3f93efefb8de0dec61bcae3bf867ecdf38e106f39b81fe8e14ff37e8e7913ffe6380773185fff33ec7dfe9ccf4f5a7c7ec93ad5877797244fee4a619e08ff16c7762222de7334b8077d1aa177f4f7bbc1ef9443dedfb3f8bc9125e677c4b8789af48dea217cd4b15cce24d7c25b6738f89ef595763e8fc8749e8f10716bbc8c1230c7252da3220693f3629dedea90cfedd53a8ba7b19ea7c1dbfbd639cebdf5b55a9a645f6fdeb17b90b7641f9e9e183314f324622dd1f804d389c5239f87b0c4b8d2032e16fb77327ef47ce7dd3197f0fb0b1c3d46f238df91cfe31816ef03908e31d23ecdc1cbade73ccf15fd283efe6af17694c5d38f8e873c48bcedcb07f9efb236412cfdb612af2daf2555cb77acefaf70def5afdfce7ddb799e27dacf7c6cd4e2e38f161f2f893c4ebc6d9bc763e8c16dd1ba34b68d58625c6927c8ff9d8e5c7962fc9bf3686d03bfc3181911a7fc30c0789863bceffbf611e28d137a04bc0fc7e21fe6d78700e6430ee6a83e3ecc47f9b737837bf13ec4e4df8fe67a5962fc928fb159bc7d251ddb127d6331f63d9778eb1bf13b2fd3d6f5f2df2db18ea21df2fdd54037f8fb8ddef7a2b6700bb8a7dfcbfac4db409ac29f0bdccbf8f516f7bb09a27f7a73823604f1a92c8f116f5cea630eef63c47cf1ad294c5bb46179db4f94952a362bf83a0fdc6b969d98ed56319f7a41f218d61d002b91f12bb1fe43b4099e20de76db134e3e8c156d4c518f89f6d97d5e9cc8f3c4eb3785ff8ec5d98ed8b25abc3d10799278dbda4f72d93e7770c78932ced76a580fa42e6d56c7089ff234f1c60d3cede3e029e26d773de77b5fc4e877e0f7cffa387fd6d16b1c8f11b71e2455eb48f15e6df06f7a7d063c7bc6c1199f09e482e93e43bc7384e27dd10714edce381c797085af78c88771879b0763788cadc5fdb5a87b057f9668971ea626474c3b7f44c2a1adeb0411f7cf39b176ba724e10ede1477dbfc54b4bf8d7177cf6fa024f93ef7f3441d8a7b0c59be3e0fbfbf82f126f1fff45077fa288791d0dbe037dfc8982ffc788a70d1f6ddfbfc4df173e7728784eaf2ffbece6659eaec07ddc8b5b65aef055e22d1faff2eb6b404e28cf6bfc5ecc03dfe67bde1ad8dd13be6f5f71f333da5779c52b9725c67f44fdf624bf3e959c1e31fb70f1f238965d3d4ba4fd9849dcff4d16f92eece9e9386925d8a7982cc681851ff3f529e2a613abceabe5e3f475e2f5857cedcde4d7bdefb1ef12190b127b4b88353347827b1b774a1eb0ad4470abf1efc49cc1f3be3c89957f625d15dfa3c0026baf8e1fce9ff13266bdcce57ccb9527c2d716a1fd4dface9b71e4e7fdefc8dbc4eb9bde76f49adac7c19d2afae9bcac90b9b171add77cf8ef70fcdbc13dfd5db2b78325e68ddff26278e2f137729c77ddefa331edbc2f6dbde9fe763cdfa3c07a157c47efdf00fa80768a7259e4fd2fff3ad569626c40f4b74f8dc3db3b0e8e7f5de2b4b71571de7570c4ba45eb7de75eac5bb4c43a2e11abfa01e7e53d2f0f165ff314791fd8dd7be0197dd7bf26318e6cd2677c4d41e4039f1d7ee0e83f9df7ffa78b3a45d8e1c6d86989f7221f82f7445a1fb9cfa275e8c740cf8fc0337afd84cb7607b8b765cb1feec3fd94bfb703a44daf9ff1e777827be06b229f13efb896c0fb12c8f4b993e60c61e31ff9d2f882b86b29aa3bdbbd7978f802607d0a9e090cf12d489f5de9f3bb781efcee4d335e1ec42c37629dce57be7cff8a737bab93e62c517e45fe0bd9bf21deb609e7d4fa84fffe2df1d6c9df82efe855acc1ba14dcdbe9cedcec7d4ff4b923dff3f7ef06f7f4fa037f7e8f4fbe1f7c72deeb7dcedeabedfd26aa8388c3bcc9fb3c3a3ef09957b758fd1bf4dbfbe2a42dc61478d966f54aacbc6ee7e3f566706ff33a47d4239ff3eb97fcf71fbd65c6e236695d0f7ea7d79f88d73fc5b383af12b483ef7c76f09d23efec2ddef7c2600711b12e4c368e93263b10e51af693c51877dc3c137992649eed3f317c7916e555d62fd6cdb3b60e2f450ff0dfbff5e9f92b920f7c3d64e4375f3efc06bea3d7df7df9f0bb93de012f7bdf8be6c31fbe7ce06bae227f22f9f0a74fce7bbdcf53ea437ddf477e56f85e12a71101eb0255f3319af6b5c97defb783c85fbe7cf8857863d17e71f26d9e18efe9c49fffcddfbb1cdcd3dff7f3e15c0cee85fc42f7efbd3246fe436c8e972dea4660beb07bf11dbdb7bc36c7ee6dd90f1ceb7d4fe89a11f1da5c065f5b989121b7b98c0c9f9cf77a9f07c6e664dfffa367b319d5346c56a49da4cda6dae633c4dc8bb0f97f7db6faaf6337f3456c33b7f98cea5e9b67f7d0e66538427f512f66f26fc11a43f66f9a1e8f97987f09d05bf62ebdd600cf6af0eff93e34f3df07e922ef2e10f308bc4ece68ca65177b1875f23d7fc0c18e7ec7db5e166f57648031916879a94de4e559e855c76bb31975c077f45a9778cb33dfdbb7a0a5f7bd6879ae47bce599c7e966d427f2f25cdf27e7bddee7a92ccf19628e6a168e99ee32de57f49ff8de8e190dc8ee53c61b38b6b288701c310e19af8dcaeb294bb44f44bb46f44556f96ca82162e3dc7f6634f2d94123f01dbd36f6d978632ef7dfdef7a236be87cfc6f91aed8c26888d37f1c979aff7794afb18620f8a393866ba6d3cd9be6ed0ec39e1beb698d3f0b5dfa375d46feef755daeca2cd7638b8b76df1f04c1f36ff2ea39957c60cbe0e3fdaf65f07ee6d9c62befeb198efff7cd8efdeefc43a9ca8ee1b106e856ec9dad06f7adf47f54ef2fbe85c5ba27547332f4eb4afe4f339d1f50e7f79bf176dfc689f4ab4532e05f776fe2c5eee7d2fda3e126dfdbbc1bd9540df4cc8a9d037fbff96b7fef57aaa7e229a5e927ec65f8695fddc6f9adfffaaf7fdeea67fb4acf3f59a19cdf9efdbc13dbd5a6e1912fddc8a97bd69a0fd695e0ee3f6a76b106fdba486934ee916ef7b61e84f47c7a07f7431a3cf7e025c0afe2782f7ff5717e1dfb7d3d4ff27b5effd7521ebcbcb6c9cd779d13efb6a702fbea3d79a3e1be77df1654778df8bdab8e82bde0deee9355e1f53c8a9d0c7fcff6e5baab6e1596b1eeb7dcc178bf4fe5717ed1afeda697effff9c7f4f9f11f4af2cb1dee35fef7768fb40d4ffc45bbe126d1f54eef0be1786f681a857e09922ffaffd3158a310dd6f03b49dfe5736d5bef78fe75862af3a7f0c837f7c1169dfd0a2c37e4fb27db37a9ef7bd5dd1bed18e61f85f194d3a86e37fe5d1fbbd18d38cc618c3f8069be722dfd9a271c761656b202cfedb63eadf66b4e0f2ac05f7f4da923f5f07eee998edeb8edcb41bc33047f0eb13b1d316b8115137b7e2f8a7817bfa7b06c0a3bf6fc631a5e9ece9d3674f6fba11d12688b50ffa8bfc5de1eb844d3f08eee915ecd31311feb18dfb2c83ef0994b137f1f85a31669ed116bcdb16bc4baf99fc9bc3c1bd2dcf51affbb0c577edbc76c7eea95c35f87d7bfe3b5f1b23625033c0ba998cf6e019bd76e4df3c0cee6d198ee4f1c747dd88a4d5897fb71ddcc3343bf3df77827baa5ba1f7fd8c2efcbd47c0bde018e23ceac3f1c99501d6a365883d005e8863af9c57516ed93d28b747667a758a87172b2e3552935fc57a84f7799afb104fddcdeee9ef89ae0316b16b4277b1c6623bb8a7ef7d9dbcecc26f45e29dc51b4bfffa8e2ebdc53e38fcdce948bcf34c65f3acbc4d99d19578fd5757c736d6f2f54feb86f334f81ed7113edf1911f39a7dbddc476db71fb025be2f50a42178d68f3f6be43e8bf03dbb238ddd7c3b41ec4fc3fda705cfb58ba15784f72732baf9f292af05c8e80e64e17bdb66f4f071d1c3e162dd36479663c49efb7c0c38227c714b57de8df5e4724444fdb1019133db2727df1f37a3279093ef9592d1db27676f47ce6326fae4143e7d2fafbc81cfb304b8b0f8397f19bdc03361d33955398bb406df817c88fede0660c87e1775d3f1bee7a25ee9e393b90fc89bdae0df09f011d38f88f651a63a46a41d4f7f23bf07759ac5d715640c70f3f1e43cf08cbe2feabdfe5cd7c7785aa29e1e08f0445d3308c829dedb0f70b21fc0a4d7c1c45b9f0f766c7bc3df5ed9a3df0d21defa9cefc39b31d4574686729c794056c027bb87fdb8413e3dc4f98817837b1befb8071cae36bc8cc837dc2b5ff4f741bedf457f4394c511804b3fe608ef37022baacb20e2a983a3b20d066962d8c3e5d8f1781069447140be8b6751f9f6f3cab7fe7b6f9eb07d67922d1f32ffc2cffdca18c9d33d0bdcdbb21fcff71210eb71d8fab358fe8ae345f89e2611d10ecbe5f88f837b7acd239e766d866f3d63c628fefb4a706fcb7542a50f67b40f67b48fd731c4d3e78a7e3706e8457f7fc2e1fd8413bcfac4d35bea533af32b6f7346787c5544c4578de5699e07ee2d5e5fd0e731ce398c8838c371fcdd93c13dbd8ab9fb75e0dee66d63bea3df461127c1dbb2917d7cb8e2dc6f7f3d08f643cd980af4a90d7eb712af07a3ebd8e29ceb12d9d7a7df042edf29e09ebed7cd4de364718620dfc33f439c23bf0edcdb9c9cb8d879ff24b19f9e382748d4ad53812e3d7d724cf6c921ce6f97ac138df4f0f226d6846688b3c0c51a2119d7223db0376c86382b3c0eff19f929e0bf57627a477abb699c22ec839f3f903109c834895fa7f8f2648a93279b5a7bdf8b2b1f6f5344fa4af2ac9f4ff6693ed9a7ed9e7926e5a9834fde995c8febc0bdcdffc962cc44c4e6b577e538f92a2f56448c0bdcaa288b5873c2fb1dd1b19259c43b56c2f70c8e0c7465d82ce67144fbab6b125cf4f6a53bc7972e5f5792311bd892689b80762afb9d5e45fbd93f4603d69e67cc05efd2eb3ce26dd3cd73f8df7c840f5b7c7720f1b6e9f83ec7d17113711eb47f8c069c899d71107846af0b88778c668123c3a96b39d7f9485a05c4dbae2ff0a5b99078c7681672dd6a79dfcf5844bc63348b00c710e7511f8e4fae8c42a0231f078a80fe8e748c86f31a6d27883e0e6f7f9db2d3ab533c3ca99d093b280276c4db7319c540e6627e3d18b1a3c5e0ddc5e05d7a2df1d95189c3d1e9effbb0c57787f8ec889ff51b117927cefaf5db1138eb3763097846afe26cda87c1bd2dc3697c3f95d3772069893366b7837b98a638637627b8af06f0f8fb19cb816ccb01e7f42ace567d12dcd334844d89b351cf01f7d5aaca9c5101d2e06786460690d83626f6d6180dee818d9d26c645062786e77d56dd62e7c98d2545a4802c27d96c909ab6e66691e924d76efbcf2485641929b3ff956b5f97daff3977e2b9f8b21bc98cf30d9b2367b37bf69f2e2cd94ab2c6feb4c839c36c867d53613f2ab2dfa718e3ec6f2a496f92c3b097dabf2db271ca492929210b492bb657bd483d97fd5d60bf51c2409fcaa892c49d5592a0c295daff15d99f55da1f52212bece763ec2765f6ffe5f6b345f6fd44fb4abf5a407a91b9f67f5e945976b2a564857d976fffbd9ce12db0c5aefa663c950eb49ffabf996e639631e996da4f04a1cbedfb5226e10cf6f74a266911937e9cfdacd27e46b539988cb4afab596a55752fb7ff2d4b339f532697f140a5e7163b0a5064539ead0d953e9bd9e2ff726457e4089b7e7a2ac32986d5b259ebe5c42a39f13f0e1d274327d5c6718c5e8c32cbf32c8764b379b7e9551854d7b1aa8672fb76f8ee47fac4d445ce0ccdeebd98066e0e5fb7e9c73f3eda3a2db3ba57b5de249b35d55ac7512d16b1142f8b9d56a7a242f5ead57a5241fdf45b32fad9d4d58c34d2efbc57c2de53cf801aacf2f366003b2e2fdff66a5341e53993095fca44f32b43a1cb982714ff2ab2bf1a65ab53c4deab407f99c9c4ac92d33da95835596655ad8ae3298c655744965dacf59ebf4b4acbdc389e529e61b5a25ab81996cdda572d63983596166b7855e7ad2f51f02efb6f7871d78fbf6a7ed4c6fe5671dbcb6abff6c48266177598d9e09edba694e59ff6e5c7d5e5f95587e557325260399621cbb13ae92e60f16b9458f95537aa979b5ff48f9cc37a88cdc7930163b09a8cc1bae9b679fadb32865260bfabce219d0eefea775272021b2046185f048cc2ea120a7b520a1b4aa422d56bfba4a20221c8356499536fd754dfc919371de36be1a3a03a6adc8d63d6beaaa65d53c61e0b865c60943dd1ab9c61771f26d8bf15d8ef17b1262a7d3ed5462cb0d3a67823580a6e4fd4fb456c6669f445773fb352569b30563b823eb2ae6418e3b5248cf7a4f6da546206ccc7f90b4363bc30d4c68a5933dd625607436eae8b5c17436ea18b5c0f436ea98b5c5f566c58cccfbcb4141b773046fc6ba4fded625b9995ac87bdc2fe5e367813bbb8b44ab8b8ecc98a4b26910d29a94984159306b2bca30ff79209e9cfba3df1ac6b8801b7d6046e84595b1b5d6b6b8c89bcb7a6c87b6022b7d515b9092672a6a6c84d31e0769ac0cd64459a194b7afba14e978ce2a8b724e8ac5bdb849bc91d08d6358c2d0356649bcbb286fa605aadead66c2d64d9d328ddd993c73cd9c224b3a7133553090f78167546b2289e1c5816b594651135f22e98e5f8b3a8039e45adb0fccf4a41feef8981ef9302f0bd305af64d012dad6596cb5cfa12a3963bd37ee64c9c8c62bf96b0d176177319bba7a9891185585f50fb9d645f0b6d09a92cb12dbd6b546730bec26a1b1a406356321ec2ecfca9890cb3746705cbbc3058416c23b3385af3d2e012ad9a776f0c395b17b92d86dc5317391343eea58bdc4e864c3bbd74d2beca902ded9b4db17373bafda884f5e20aaba656134fad3de6a47aa7c04975c0c0fba400bca30c9cf24a83a7749a559d64de8fb50ee71af57ede6e7c6f566716d86f17807f8919477f17be771cefd64fe6dd58c3b42df10f20a8a6dc3f11ef3580792ffdc430efd419b386819ad6d005b3e14129b0e12ccc8beca7eb45f6c19007eb22ef8b113224058474958067b37ece01692c7bfe213467b62ab901bda132fb93169161ac88ec5da588a8498315906eb26ca3cc0e4fa4800cc3b3ac3b660f2352600f3d64e074606f64f46517fc3ffb4f15f07a3878362679ae44f27fc6459424ef8915c03cdd02d80b431ea58b9c232b7dac8fbc2e2da52f5e90d7185b2d9ada14bbbf780871a273aa367a4594cf74fb5acca428e233d0f183c36297e5d144528bb26efe28506a77bd1674394884f994b1cca7d05284750164d2a87719e41e6d1c4b3d58dc60feb137e669c64b3ccdeb323716c3d3f4c18aec04dd22db57864c8bec4489adf6a4b64ad722d4610d9e2ae98cc3d3e92749279b8dcd1cb64b5d83338748f18a59dca58337d9be569255cc549780b0937cfb9d723b8d224fdb32396740d78ab4f177c788f3475e1ca6b0e2303481e260522bac00f4975912ed39d2452355fa9d34eba7db3fe592f9ac181eca1e53969cdc2d61af9690c3588bde09a154e9970e904943e7b0e83297b8cd952638f0400c78ba26f020ac8ccfd02de3fbc990a9b7a1b11cba2dacc198d83375c51e8279d459128ffab7a5e6518762e0b325e0f744d4c0876145614e223612c3aa8763c0fbcbca181d88c865712b99f6ffcbec2fe8b079012bfd99ac3274bd41a65dd64bec7fd10abb1b787f99fd8613b2ac22e708cc280ed0358a9158becd95e4dbcf8af9968b81cf93808fcd5003cfc3f2ee4059def522241afab898d76d5e6f98c9c63832d97a81157ce48ee65c05cbd74c72b8dd8538d2be56da6f67b27aa094fd46ff4d739afa5a953c1d85c97f904cfe3a40fea94042951447cb52a40ccf97f82d4bd16f8d9181d386cf0282347c0a48320d9fb1186d0b65b4d141f25176f385b65c57b0f7673003288ab6950b5354418e93c895cde6b3cac8ae6c90d1de025d5d51c1feed365168da6eecae4ec38b2eacf337bcc41f79c38b2ea3cbb27248fc86572aa4c71a58e331a75a2471aa968a539d80958562ac2c1c9c545998284b877a8ac512ff4ac38b55fceb249941b339d4e5bbd4a0f1e23a9d61d362addf9ba02b1d33fc430b6c92b74f02669b2a19bb5ad4e3d0f71771e62aa8a7aecddcdd1a26742e9bc7a7e4b3f2262f7087b002974ec9b142371933d92512931dab68b25364e0d4644b25b9d9732f56cc9509f6cb73082ecf5459116293f9e5bbb408e531847414a3a5b262c466aefb25608ca994b32d9b9aad60354821af419c7aaaad459dbe5393d1824f6b19f87b578b764769e37034e37b29639eea57c03af958a12b63852edd7a62056f1a56f096490adeeb8a056fba0c9c1afa7259c16bc34837981d7ec9cb70c967608d8043258d00a59e553e4678b984f06a35d4089f89895da12bf62c4cec4a89d8eb15c59e8d81af9080e7d754039f2303a7ee9deef2a4334ab03f064cb731aad2e5a07110a2afb8c8375ab0901481318042f6648dfd77a9fd6c1183c8648b6ac5fa0015290fc0b85d2de1b6a522b773310ad668723b4f064ccdf3b0448063c4091c28036ecef2066983d3cd51d4dbe00761b41f29a1fd2a45dae763c5fc28dd62be00433e5a17b900435eab8bbc10435ea78bbc08cbc463249958abb65a261662e0c74ac0e7298217610573bdcc377522340cc06dea3a5d68776cabc0eea15632cf93697b4da72952e819232b66716dcec0894a392fc6e43c4e26a7b387070da0a0757b011b47a5294eb1bb092aa91e8c51bf4142fd998ad42fc6c08f97807faf085e82f175828caf9671f2b5902d9e719ff6b29faaf0780826cd469934f4d6cd3795749660949e28a1745b1d354a4b31254e922941438d1dfa06d9944d6683be057cff9195ac1a57a7712926c1269904d4b34d8c360ca626d92c28c3283d5942e9db8a942ec33cf229ba1e793926f6a932a759574dec4331b137eb8a5d2e43a6ad8ed308d2ea389d24d3eaa8c0d239034be7cca4d2a9c4983a4b97a91558069f2dc9e0b1f5d4327825067e8e047cbd22f82a0c7c8b04fc6945f0d518f8b912f08ef5d5c0d760e0e749c04b15c10fc3c0cf97805fa2087e38067e8104fc4645f0233023bf50d7c88fc4c4be482276eb066a621f85897db1aed8474b90b3d9aa9074ae94f347c0a9ad94bb84241ae7bb95c857c8c54b1f1b695b2bcb175a435f2a1349a12a5f8759d365126bfa5ab1101c83816f9380172a9aeab118f8e512f0cd8ae0eb31f02b24e02d1baa811f8765e6959a99b90103a6fbe056690b7663d6b98c9531da9c2f625b6b95b17f95b1ed0d8b58f04201b37d77c049042fd0bdda32b9f596739b2eb5adbd87fd5445eae331a9af96494d077ae9d8b6db6e76ba924e3744165b9a49baf056771725b94ec06ce01a890ddca368601b31a5afd5b48113657e96ad912b31ea67b158e27c36884ef7562c6696b234c56b3ab727ec93af633e992e6530272be6bf4f9265376d5b5f4f90b6353d4ab00e1559a96dbd09b3d91b25363b58d16f9d8c81df24015fa0087e0a067eb3047c9322f8a93270daacb98568366b366362df2a11bb4f2335b14fc3c4be4d57ecd365c8f4fddb13713f3186c8cf90015343bf033374ba6fb17a27f24ccc7fdea9e93fcfc280ef224808dddce89098337a73a062fd77366642774b4ce80245133a0703bf4702feb222f8162cb3efc532fbbea432fb5ccc5aefd7b4d6f330e0073481cfc7ace8414df3bc00037e4813f8421930cd7bba47ba3f909302a804725e8459e14e8915fedd58cd0a2f9681532ff908d1f4929760623f2a11bbf51e6a626fc5c01f93800f5704bf142b998f6325f389a44ae6659839d2ddebab784bba187dbefd1f9d84a4d3d30793a9ac0545839d57b35f96b3de066dc3abd8ee364c8aa7645234894ad1d3fe7b2971a6379c408fe465b81c93e169990c7b70197adbff2f62ed69facd6afbefe425b80293e0199904b5405ed0a548b4c5ab92da9598f93e2b31df7a4dd4ccf72acc7c9fc3ccf7f9a4ccf76acce9bd20717a198a4eef1a8ca117250c3daec8d0b518f84b12f0cf15c1b763e02fcbf2b6a91af87558debe82e5edab49e5edf5b274a841bf16cb35e5a4d835dd8049f17a6cd7d42b85aee9464c863762b9a63e29744d376112bc19cf35cd66e9a92d9bb81933dfb724e6fbbaa2f9de8299efdb98f9be9394f9de8a51f62ed16be8dd86b1f39e849dc2666aecdc8eb1f33ec6ce0749b17307a6c4871225ee5154620746fd479ad4df8949fdb144eaa6cdd5a4be0ba3fe138cfa4f93a2fe6e4c89cf244adcaaa8c43d18f8e712f09715c1efc5c0bf9080ffae087e1f46ff9718fd5f2545fffd9871d273cdd16aad778aabb5073029be9149e1566b3929acd61ec464f8562683a8d6faa6b05a7b0893e03b9904b5895bad8d627326cb14e36e1ec60cf87b8901ef6ca166c03b3103fe0133e01f9332e04730257e922831b8a59a128f62e03f4bc02f50047f0ccbee5f885ebdf03826f5af12a9ebb55293fa0919381d1ef98d680e8f3c8989fdbb44ec3e8a623f8591fd87ac6cd1d8a5d89175f9f6abcb59ecdbc1ccef94b3c053671956219bb39c4a9c23249c05d805f6d342b6347b31bb177eb3802ce4338abdd88ca258bcbd8638bb8967b2197de70cb14c369b54c897f42f614f2ad85b4500593e6759c2e75ee12ca76a80ecd35806fd29c9a03cc50c7a0603ff4b02be5811fc59cc19fd8d39a37f927246cf614afc2b63684f35259ec7c0ff9380672982bf2003a78595aeb2d719ba7e51029c9d4976d90472d5ada1523b816cc9f8924e2047ac7813c8fab26213c82f61b69461494a9ba22dbd8c5511d52ccd2ae2150cb9ba2ef2ab58fd502311fb8fe1345f93d93fdbb0b77897d8bfcea66db12dbf66c2965f8b59febe312c5f6f6b39794ebc8e194f6d5de37903339e3a9ac6f326564ceb4a8ae9037ba915d3b730a9eb59922611ddf77304eb6815b13513b2d53699acb994a91818f53626477d991c74d31735fc7730fc069ab9f32e06dc502638b51fbaed763e6b132e21a39911d376d962e596d87b985d3492d8c59cd66a76f13ea656634dbe3ec0a4de432275691b35a93fc4a46e82658608b3709ac6de704415b53ec2526e2a4b990e1c380766664737e0cd8e6e0034c52e5b85447501cdc79804cd6412b4904a3091fdab92ad58773a10c9ad8ffa0493a5b94c96bd1294a5ea314b2a327d8a195e0b89e16dda5bcdf03ec3146ea9595c3ec7805b69027f8101efa909fc25c6f35e129eb72bf2fc1506de5a02bebcad1af8d718256d3429f94606cc4eb5d2ec577d2b03a65ddab616d2a5cdb492e9d27e87d1de4e42fbd8766ab47f8f29d11e53a243524afc8029d151a2c4098a4afc8881779280dfda5e0dfc27cc303bcbdc29ddbc623a81db9214b2e6ba70e459641f56e195f1bfbdd1f699eccea97ebab16d1ee82fc2e556b068fc4ce698dde5cecef8145db8bb9c7863e3453a745ccaa9628ba3ee3c9339f342c5c8c69f312ebac8b8a0db1cc37df59c06ab5bc1ba4b8f5731094b89bb62d6918fca1c0f21c77e5b7585c22f98c164490ca69aa2c1fc8a15a97db022b56f5245ea374c89ae1225b21495f81dcbe96eb29ca60b71e5a3ad73f9382d5de1413b2ace0e45b1f2342be6affbb0685c6784d6b56b6f0958c62c438cc67a7fab6476552929450b9984cbc058ae83bd8c777455eceb0f197bf4a0afee96fe415f7f62e03d5200fe970c9cda49b6a5bf6df1df1878cf1480ff2303a727f7f5b2087e1c9e3f81ce7802ff6209e4a42881ffb08ced9d828c251602de2705e01606de3705e0111938f573fd247eeeef8e6a7e2e0303ef2f01dfa1085e0da365808496679e7e7a880a2dd531c9074a249fda494df21a18f82009785345f09a3270768092ee30602d4cecc112b1372b8a5d5b06cece504a81f7aa83810f95805b8ae075315a86c9dac78ab4d4c38c7c780aca7e7d0c7c440ac01b60b48c94d0f2ba222d0db10ccd4d81b534c2c0f35200de18a3659484967a9dd568d903031f2d1b8154046f82818f91801fa108de14f35a6375bd56334cec71323b5414bb39662ae325a6a21a11df02937c82ac6a5694bc2526f9c41418792b4cf249b2b1ac2e6a92ef89814f9680ef5404df0ba3654a0a6a8ad698e4532592afcf5293bc0d063e4d02de48117c6f0c7cba04bcd63e6ae06d31f019b20a5451f24c0c3c5f023e5851f27618f84c999d2b82b7c74c71560a4a6807acea9f9d82aabf2346cb1c092df98ab474928067b3337be98ebce9da196726710ea4ea6da72e8e9456db1d677fc97855363b1eb855153d1249ed001b8f1e30c0569bfe6e93da715fdbb1d8ffefb4ff6fda95607b64cfb5e8c05c7269a247cf6206304f6200adf75533802e18f88112f0b18ae05918f84112f04a45f07db042373f05856e5f0c7c81147ced3015f0ae182d05125ab628d2d20d73740b258e2ea2e8e8ba63922f92487e8fa2e43d30f04209f8e78ae0d9187891aca7d0550dbc27065e2c011fa008de0bcbd08325195a4d31437330c9174b249fa728796f0cbc4402fe8022781f19381de73ec4928cfad3b14f1a16b684856eac62734d6eccb6facea77db1d497c852a7ab2f44248f33bf46bf5149af1f4665a9acbba848657fccc296a6a06d340093bc4c22f9c78a920fc4c097c95ad2ddd4c00761e0cb25e0798ae0fb61e0874ac02f50041f2c03a7fb1d965b09c4116cc5818760525748a47ebbbb9ad4433133ac4c81190ec3245f21ebb964ab493e1cf3062b65dec0ee4403df53c8e6ee16b1f9bdc2e85e72f4ba927d52c266fcdc23f9dc596727c8bbdc6e67aa78921198acab64b2d2366d9eed3185f75249692496d26a594a0dd97b654cc7129b03ea2369db781afb5935922617cbee3592ec6eda532dbbf330c50e9329d6ce93ddb133d21f5f584044d8808af2a330f90ec7aa4667e25bc4d4e9c5cf8dc6a83f4242fd4445eac760e0474ac0a7f652031f8bf176948cb77d3df93a91e55c2571165f95b3bca33948d76354b0687411032d72dd9bd36e6157e17a1c26f1d15811730f1d94153695b4c76369afc5accc39417a7e4a4e429880a5be4e963aed90d3e5af74d39d7852d0f7ca896a5cef444c9e6364f23405f214457364320f784a7e51f0244c8a636552d40552d06073d73654d29c8c15c9f59222f97a8e5a919c8229749c4ca1ac3845525ef46866d318a035fc78dc252c026739af8b55a8988a51b14142c5998a544cc39a47c7a7a079345d064eede3044b73c6680626f6c614889d8f0dd39c988231a099182727e972324b864cdfdf9448fb3c469cef6ccc004f961860615f35039c83819f2201ff59117c7f8cec5375c93e00237bb326d97331e0d33481e7c9806954e6e9d11f7c51996758c944651e8865e899920c5dde4f2d430fc23cf759f13db773287d17de04166be19d1e8888a8a431966e94a6133b09cfc1566bccccc7a43d1b6b48e5b306bbfff4ed64fa490b300f794e0a3c640196c75b2479bc53318f1762e0e74ac05bf657035f8465c979b22c71d6290913111b189482ca9dde2f64ad5ca7ada792458598a2e7cb460f14152dc2c02f90759814c18b31f00b25e0eb15c10fc6c02f9235fd14c11763c5e26249b1509dc828c124bf4422f9e78a921f82816f9580f71ca006be0403bf5402be4911bc142b739761bdaa78656e119f24a6ce51bddc2dc594dd2651f6774565cb30f0cb25e0b72a822fc3c0af9080b71ea806be1c03bf52023e5c11fc500cfc2a09f80245f072ac9977b56e33af0213fb1a596e2a8a5d89815f2b01af35480d7c0506be5d029eaf08be1203bf4e02be5a117c15d650bd1e6ba8de9054437535e6966ec45a6762df39d16a4c7e48650d96f64db2b41b107748c569c5d25898d2a4da8587615977b324ebf2f653cbbac331b56e91a9e59c332c9ae7ab48816f15bcb711ace6e38fc024b9552609bd1d116dc7a9a47324d69eb82d05cdeca3b0bcba5d92575b14f3ea68193815e68e443a9add71e0b518253b5240c93a8c923b65ada0216a941c83799ebb30cf7377529ee758acbeba47b7be5a8f8d1edcab397a701c26f27dba226fc072f47e498e761caa96a3c763e00fc8aa5845f01330437f300586be112b9e0f6916cf1331a91f4e81d427617cef94f5dd148be7260cfc1109f83cc5cc3c19037f5402be63981af82918f86312f00b14c14fc5c01f9780972a826fc6c09f90805f355c0dfc340cfc4959af5311fc740cfc2999b528829f81813f2df32b23d4c0cfc4c09f9165a822f85998237f56d7919f8dd53dcf69d63de7607c3c2fe1e34c453eb66075fe0b589dff625275feb998122fc9ba4c23d594380f53e2654c89579252e27c4c8957254a6c5354e202cc325fd3b5cc0b31b15f9788fdb3a2d81761e06f48c0e7e4aa815f8c7563de947563687ec2a020b82d9e33bf51ce9e393b54b83bfeaa74782ec1247a0bebb98ee33b93d3432fe80f3428609c2d53a9cc0dc448792b46f4dbb2de9022d19762c6f78eaef15d86b9c57735dde2362c27de4b0438d6c14f1817efeb72710596851f48b270a762165e89817f2801cfcc5303bf0a23fb2399d93725fecdbb9d0db0cb78cc9613957518511dd5b81a93e2639914f49082116ca2d31fb4328bfd5dc2e2065565b806a3f91309cddd46abd17cad043cbba37d6ba573e518dcfa35b995639f4aeaddec4e548faaabb81249ed331baf06258cfee961ffa9892c15fbdc922f154b24116ca9d8762cc7bf90e4f8f2516a397e1dd674f9126bba7c9554d3e57aace87c8dd55bfe423389d0c9a6c56c9b5f95027303d6e1fe46d2e1569d72bc1153eb5b995ab424e5b2285cb183310d0b773c558f68205b312b244b791321c77328007dd25bb9d170136641df492ca850d167dc8c5557dfeb5657b76055f70f9a55f7ad181f3f4af8785f918fdb30f09f641ddf316ae0b763f6f6b3ccde867aeac145ec8752dbd3d04320e8ec6e19119bf12d65858d1e2a51c9c6fda97fa287d92ce73ecb69c4c2432a16921544045a7a371b74ad56c546efc0cce8175d33da8121ffaa8b7c2766a0bf691ae85d32606a16bfa76090f06e1938adb2feb0e86ea755c1a50914e209dc8395803f252560f358b512702f5602fe929580f6c4dde5792959c1d7682c24ce1681f4df62d340faef5ec0aec57c98fa32c2fb3009ff9649c8964ef2ee98bbdb7185528af76384ff2321bcde3835c21fc0d4f957a64e4ba64ed5450855e94f6e71c48398aaff49547d5c51d5873070da2ea862b8e3d5c01fc65a5a560469694522c9b4b47662be2323a2ef3b1ec118aa2661a8de0435861ec524af2e91fc3ffb8f8ae48f6192d790489e39514df2c731f09a12f0d58ae04f60e0b524e0b526a9813f8981d796801fa108fe14065e47023e5c11fc69ac5aaf1bd1acd69fc1aaf57a11bd6afd598c8ffa123e9e57e4e339ccbf34c0fc4bc3a4fccbf398128d244a144e5153e2050cbcb1047c9b22f88b32f0d6f6ed1e117aec918fa13684ae36a14707d3f15a7aea5a3e1feb20ec176a6adec62ffcbdab559f10d6a81ecdbb7333784de89c5229e1bc0c97fc258c9626125ade56a4e565cc709a6286d32c29c379056b48348f481a1294449586c1ab187a0b193a5b38cbda85d949b4f05ec3b2a3a5243bb64c55cb8ed731f05612f09f15c1dfc058da3311d716eb9c220c782f4de0b7303a5a4be8785d918eb731f03612f079d3d4c0dfc1c0f796f93245f07731f0b612f0af15c1dfc332335356962a49bca332dd91ade48fc774ce8899ef397033d88765be8f65513b4916fdad98451f6059d45e9645ce5e35fef34a5594f910ab243a609544c7a42a898f30bd3ac9f4a2b544b6921e1f6399d259566e66aa65ca275807a68ba40363c92ab8181d984f65e07444394b96039decdb7dec1f6a502ee89f1ece9f9a557383ce5920697e8629b46f0afa929f6359d15556d1cd56cb8a2f303bea26b32377db0751f4e917f4c486357c28542ca2779dd92a36d3554adc9069675cc39de35773175f6225ac3b56c27a2455c2bec2f2343b0546fa3596a73d25797ad5fe6a79fa0d2679af1448fe2d26798eac2930574df2ef30c97b4b24579d83fa1e93bc8f44f24607a949fe0326795f89e4aadb37ff8849de4fe6010ad424ff092b4ffdb1f23420a9f2f433c6d0c01430f40bc6d02059ebb7508da15f311fb99fcc47b620f1a29bfc4b4654bcdf6f982c8365b2d0dbe9513fab92ceef586e0d49416efd81810f9580575304ff13031f2601afa908fe17063e5c025e5d11fc6fcc8847488c78c71a3523fe07339c9132c3a13b83c8b690919d039aba2d64fec508c89510d074a51a01ff6159979782ac2311047c540ac02d1938a571b42cebd88ee4924ea04a4644b014c7c8526c4e64bda649cc4c2ab819b8bfa8b5f6323049c6ca24a10834764a75f0a49a24956c7a0294657737d316cf956fdfd14002f538ae71117a36b7970c56414b83afc64768f055b32a9ac54a1f0bbaaa2ecb1f7a3b21420f33f58a347ed2ba9a17b47e2652256baae35953033380893203a083c9620fb362fbe17cd635a14aa94ea0d694a5cb0e9e90f8a20547abf9a25a985293654ad19ca2fbf72ee60335a235017b5bee69922a4ad6c6e4982293a3214aae08905149bb8e2c6d3a593055775eaa2ee68ca7a5a0375e4f064e99991e49c1314a98d1cd90185db7b56a46d70003cf9780b75ca706de10b3a4999ae3da8d64c0d435cf4a0498ba3a04b8b10cb89d7d3b3b11e05af860d01e18157364858a5abcdbae2a4b32dca30996e6fe7835a9be28bf2946d9019a9435c3c49f2b139f6ea7e93da7d4bf13955a6ba7395630e6490ac6e38a05a3850c9c3aaf033527c95b629c1da459e25a61c0f36599415da5686ebadbbceb64c79e58762c9064c7d3c7a865c75e98720532e5dc954a6e77c79d9c81e7368b136c9dce928abaad318916626d01b1c7862c7e2cf9bd3eda60722c8ad516e895927d46f6c6d22ec45ca6e0c0593892cc0e236db1348b6469c24d6be56927b7756e26d656294e415ba51d56920e9694a433d7ab95a4f698e48b5320790719387dbf2411e716635b818eb29e1edd943ead3d3d67714379123dbd436cf93bf9f4ef81f4f39620fdbc58a963fdbc4e32dee8c695d6fc34f2e6bce78c28cc601bab95d84fa6b01928678bf18a24382d8dc488e79632bb9431dba18ae6c9ca879e7e85f9a8326c766e2e19cc904b19fa10bbb331ca66b437a1676ff52143edbbe9f67f53ecff07936cf0e6509b21a7a69bcb67ee0e24c96cbfdf059378994ce2d652897bdaff0d607ff7b4e5721a1755a555912a0b7384cb258ef0e58d6a8e701f4ce543b126853c96c2edc2cb1a1b2aeaee8ba95b2e5177c0896aea76c51ab4159a0dda6e32e04cfbb63211e008debbe88ed1b1424247fe496a74f4c0727fa52cf7a93ac21d2e634d45fff08dbca1094f4f50b1846c4cba5532e9da13d196a787f615b2546732d755cadcb4dfb13b83be33b8c37376b9a4dfa848d813cb9cd592cc7940d1567b61e06b64332a8a399f831584c3340b426fac201cae5910fa60741c21a1a3d6c96a74f4c54ced4899a9f55334b5517c915d397f52c67a1da5cc089df67705f8b75e07b41f46d351129a2a37a9d1d41f033f5a36c7758a1af800cc24d76a9ae440ac3dbe4eb33d3e089b3f3846327ff0ea55e37f6e39f78b0f55e60ff6c31238569240c5c6d33f79b7f9a2b92a090cc6ec7ebdcceec51e99f2090ab5e56c43b011f4e37447d08762c81b74918761c8c7eb220fc7faa327a4a03f3a02cbe48d9a836d23313e4ed4e52317433e4917390f43dea48b3c0a433e59177934867c8a2ef218cc344ed5348db198c89b75451e2743a653a7a7252272131c783c26f2e9ba224fc0583e4393e58998c867ea8a3c09433e4b177932867cb62ef2140cf91c5de4a998cd6dd1b4b96998c8e7ea8a3c1db3b9f3346d6e06067cbe26703ec6c505ba5cccc45a96176ab62c6761d5f64529a8b667637c5caccbc71c8c8f4b34f9d85f064ce758b726021c638ef500cce82ed534bab918f0659ac0f3b0dcdba69b7b0762b977b966ee1d84e5de159ab9371f23f94a4d921760c05769021760b977b56eee2dc472ef1acddc5b84e5deb59ab9578891bc5d93e4220cf83a4de0622cf7aed7cdbd8325c8d9fbd8b7d621c4e44cd24cbeade11a322abaad18c5940dc6d3391aec7d316b3489edb0e68c2fc59e5fba2191bc188b33b618cb8b1b75f3a24486dcd6bebd291191afc3810fc1ecf2664dbb5c8201dfa2095c8a95fd5b35cbfe522cf76ed3cdbd328c8bdb35b9588601dfa109bc1ce362872e178762c877ea22976364dca5494605067cb7267025d6d5ba47b3abb50293f85e4d89576212dfa729f12a4ce2fb35255e8d49fc80a6c46b30e00735810fc3a87848938ac331891fd694f808ac6bb833055dc323313a1ed1a4e3288c8e4735e9381a73718fe9bab8b518d18fa780e87598d84fe88a7d0c26f6932910fb584ceca774c55e8f213fad8b7c1c46c8332920640326f6b3ba621f8f213fa78b7c0256c89fd72ce41b31e01734814fc4805fd4043e09037e4913781306fcb226f0c918f02b9ac0a7c8806940f3ab11fd253ca762e0afa5007cb30c9c2e8778ddfea19d045c9a40673c81d330e9df4881f4a763eee9cd14b8a7333027f296ae133913437e5b17f92c19328d057927523516444a488c5890b3315b793745b6720e662befa5c056b660d2bf9f22e9cfc5a4ff2005d29f87817f9802f0f331bff891a65fbc0093fae314487d21568a3ed12d451761c89fea225f8c217fa68b7c09e60a3f4f812bdc8a89fd85aed8976223ef5f6a8ebc5f8689fc95aec8db30e4af75912f9721ef6ddf7e9308195b71e02b3096bfd564f94acceabe4b81d55d2501cfa64b12ac79c4e4b8fe2c1b2d97bd914726d822f6b0af74355c01f857befd05ddd8b08c8dd23b5f88f7638fdd7f1fa9bae56d7657aa55267ba697766386ecc60012e4b89c1f2274bd492a52c4569a5c8d552a3f6a562ad760e5ef27ddf2772d26f2cf9a226fc744fe4557e4eb30e45f7591afc7907fd345be0143fe5d17f9462c03ffd0ccc09b3091ffd415f9660cf92f5de45b3032fed624e3564ce47f7445be0dab00ffd5ac006fc72ac0ff342bc03b302ee816667a87e7c890696d6965e805c8df89d5d9910cfd3afb2e4cea0c4da9efc6a4ae9602a9efc172b1ba6e2ede8b195e8d44f8886178f76122d7d415f97e4ce45a9a223f8001d7d6047e10f3747512018ee1e91ec248aeab4bf2c318723d5de49d18727d5de44730e406bac88f62c80d75911fc3901be9223f8e195d634da37b0213790f5d919fc4909be8223f8579e7a629f0ce4f63e0cd5200fe0cc649735d4e9ec5905be8223f8711d23205843c8fd9752b4dbb7e01e3634f5d3e5ec490f7d2457e0963ba750a987e1913bb8daed8af60adb0bd355b61af627cb44d011faf6152676a4afd3a46743b5da2dfc090dbeb22bf892177d0457e0b6b8675d46c86bd8d89dc4957e47764c834aab4732222c7882a7d1773765d349ddd7b18709626f0fb32601a55ba4f22c031a24a3fc0726f5fdddcfb10e3a2ab26171f615c74d3e4e2630cb8bb26f02718c93d7449fe1423395b93e4cf3097df33052eff738c8f5eba7c7c81f191a3c9c797982feaade98bbec2b8e8a3cbc5d718725f5de46f30e3e89702e3f81603ef9f02f0ef304e06e872f23d26f6c01488fd830cbca37d3b2811eb8b71e0d08f5879d94fb3bcfc84010fd604fe19cbc121ba39f80b863c5417f957cc3686a5c0367ec3c087a700fc778c9311ba9cfc81893d320562ff8995975ccdf2f21726755e0aa4fe1b031f9502f07fb09c1cad9b93ff62c8637491ffc308199b0242e8548d147c5c0ac02d1938e564bc2e27114cec0929103b43064ecbcd44cd72530d937a520aa4ae8e814f4e01780d2c27a7e8e6644d0c79aa2e722d19327d7f9a665fbf36c6f4f414305d07039f9102f0ba18d9f9ba64d7c3c49e9902b1eb6305729666816c80f1315b978f86181f7352c047230c7cff148037c638394097933d30b1e7a640ec26988dccd3b491a632601a89776086e4fc761acc268943f3a747bb32487acd30b77590a6db6a2e03a60126f313018e1160d242064cd7e82d480438c61abd96982916e89a622b19323b2640b363b627c6c5224d2ef69201d3f250a83941d01a032ed2046e2303a6b7c51955f78a147faa24501d4f606fcc9f1c9c027fd216035f9c02f04cccb04b740dbb1de63d0ed1f41eed65c07445c8924480639c1cd401032ed504ee8891bc5497e44e98272dd3f4a49d319197e98adc052b8ccb535418b3640964dab78726c2498c6d96f7c15c75b9a6abde17cbc50acd5cec8ae562a56e2e76c3445ea1297277cc6dacd4741b3d302e56e972918d71b15a938b9e18176b34b9e885011fa6099c83011fae09dc1bcbbd237473af0f967b476ae65e5fcc5d1ca5e92efa61f5d4d19af5547faca5b136052d8d0118f8ba14800fc4c08f4901f8200cfcd81480ef8781af4f01f860acd41ca75b6a8660057d8366411f8a897cbcaec8c330e41374918763646cd4246304067ca226f0488c8b9374b9c895206777b36fad9964d71c2835972f04543b3c6a938c61cbc7035bc47772065dc4d7aa8a7689c8802ddbcbc3bcc22929f00aa3b0cc3f5537f34763626f4e81d86330f0d352003e16abac4fd7acacc7c980e9b6986724021c63f7c8f1582e9ea99b8b1364c834b6e6ac44448e115b331113f96c5d9127618ef21c4d473919e3628b261753302eced5e5622a66cae7699af2348c8bf335b9988e497c81a6c433b096f2859a2de57c19300d4dbc2811e018a1893331b3b858d72c6661a3ab97688eaecec680b76a02cfc1802fd504de1f1b82ba2c454350076055d5b61454557331f0cb53003e0fb3bf2b74edef40cc455fa9e9a20fc20af9559a857c3e067cb526f0028ce46b74492ec00633aed51ccc588889bc5d57e4455861bc2e4585b1101b0fbe5e733cb80893fc8614495e8c39c01b351de0c1980bb929052e6431067e730ac04b303bbc45d70e0fc1fcd3ad9afe6909e6466ed37423a518f0ed9ac04b3192efd025b90cf34f3b34fdd3324ce43b75455e2e1bd0a065cb9a4ed237a031c27eabdc56604d12431977253c9471371bca685e45afd8a963831887628ee09e143882722cc3efd5cdf00aacbeb84fb3bea8c4ba39f767484e94cc63b7ee1e4f23093d03b5884c26f438de558cff257c78a9073b7b729cfdfb14fb97326665f489fcac0bd9c918f46d98e7d4169731ab2d503cf87705a6e503322d3744b514a7c53a656629fbf738569aa836c5f6274e9919177d73945d929c1363a7332de8599b2bd9db3db83e45ec98e55c3b29aa17c5f5b2e722d0f7d5e4c090e859b5e536d7450c15720a0704fd7ccfb2714a148f035f8931fd20664f304547277a7ebcc3d632db4fcdb76da39ce5b9a36d3e59ccf2df2fadfb2dfe3c55f6b40ad3f2219996437d5a42ce1d3d47b31c5bca74f44be9cd21f84bacb202bf52d16c35a6d9c332cd8625947f236c1b2a6465be8459ae7eceb9bfa8e8b606d36da74cb77e3edd26b1dc59cc35a377ab77992687619a3c22d364539afd99fb4d9e7d2d6575343d1f7b34abaf97b21412b772c81dae05ad4b56b05600f47ab4cd933adf7638c6faa332d6472454362632362a02e1d58ec0f47b4ca6df448356459f1eca92a15a392dd412967409398c9543b9274926578fc4b47e5ca6f590985ae3924e67bad013bc2ab98ea236a64f177186aa968be473f3284caf27647aedafdcb29bc17ef1b6ed6408ceb3a9513f506ed707b4f7a1d3124c269f8fc6f87852c6c784b4d4d9a66bf3b598ce4f61ed14351b10363cd1fe6d110382f9ac6a112a9aadc3347b5aa6d92044b399ac7c96f2b689d3fb15bd9659bc141756c90d337d9463308d9e916934daa0f715b94adf29b0752d65b577ea343d16d3f45999a683eddbc43d85578302f6ccd18e723296e57239eb0d2db26bdc3529d46a3da6d57389f409bce9c216c24c960be5f6bbb41c1e1ca3f6f362a44eb3e330cd9e9769961bd77326d62bc07d68ac3e6bb29e7203a6e30b321d8b0cb7a82b6def4847e00ee62de659cc024aa2a531357dc4646ad1e3319e5e94f1347397f53c6233a4cfc309180f2fc9781889fa30da435a68bf24cac64496ebb16b1c3952aa737a23a6e1cb320dc7296a389b5974199223bb42df13317d5f91e93bdda065572451ffa682819330065e4d55bdecf8b611a05636afd5264cabd7645a8d51b4e3516c1662196fedee6a1b3e19d3f5756c8442350747b337aa5aa3dfbf268eaba2df29987e6fc8f4db4fa3e558c96ade325bbf62decfc3b5caaff2ae8a4ea7623abda996677efb1cc1c613a85789d74b315b536ec6f47b2b911901acf5388a8d0f15f0be5bd5767c72adc7e4dbc8a7615abe8de5a24acfd8d17c0c6f19babfd2799dd86de054b58f4fc7f47b47a65f47127bec939e1a6342ca333029df8d3d82a9920b3392ca059325ec4c4cebf7645a77473d487e3446007ac2e2e8a83d6de1ac90b6ae939bc5380b93fb7d99dc03e37a86716c06948eb196da9ebddcd68dc639c4f70ea9f2016763fa7c80f509629711dae79fcadac915929652223326b47d599c420dcfc134fc30919100f90cc838667bb1bd793a6741b6603a7e848dc325525f25a265baebac73314d3f96693a36a1dcf4cf6739e550e8bd2bf3f53c4cdb4f64dace899baf66c7ff4dcf0c9c8fb1f1a98c8d49689d2166c58ba3bd225a232e97c8e9c8e88c5e25f30bfe9b8ade17607a7f86c53724a6b73c1e20bdba5d88e9f6b94cb7018aed8015ac87e3ccf2d0f108f116ed67e4b196817c6c12fea6a2cd4598365fc8b4e9aba98d13a9e09c68e8bc9faa5cb918d3e3cbe4a306e2f57ed2e9572fc1f4fb2a91fa125a07d470067beaf4c29dd122d91c81d7eef05f5263915b314dbf9669dac7a7692ed3c019e7abf4f483704f104b8b64edf1524c8b6f1299075789d00b4edd7f19a6f3b7329d737c3acf0432b951c7b04f1e4bb7f928968a06db300dbec362d712abb772593f96f6937ad2d54569a8a52ec734f95ea64937e2eda3f78e9e3c2bae136d392a887ffc2ed57dd52b30a97f48647c2751a905766c7b8a8dec9ec8aba2df95987e3fcaf4ebafa8df7486b88c79bf114ae52599f190ab305d7e92e9d233ae2e2ea3fedc72c71b52e7abaec6a4ff19f355c949ef8c0d1431cf5dc666a162cd60a868700da6c12f320dba28da522e67b5ea8c4b32b6722d26ebaf89d40c9021dd9a2159b6b7631afc26d3e08028dba99fb714e3d3c9472ea48691eb30467e4f64c6a1ea9c50626deee4faefc9fb89eb312dffc0466fe42d02b11e6c19bb2b935832955b36c3e9b5657574156d6fc0b4fd53a66d3b5f9efa35a23ec491285536772326df5f898ca555b5b9aaded9b5bfaa51c2e9b6bd9b306dffc662a613f59a33e27a4d93d14d37637afd93dcba1eff8cc46cbbe55dc2de9e6197890269ad6b66acf7164cb37f938be1d31ffd74733e55639ab7623afe27d3b1531c1fe1c63617314968af29357d89db303949b504e6bdaafa325a3fad61ed3cbf7c906373ededdb317d2c993e83146aa25d15937107a65144a6d14c5423ac2d81cd06251225a41e4994bcd7d881f19021e3615f051e449e96f1b9e554f9803b3189abc924ee1cd7cf99f302776192569749da1fe5b6aaa57b255fce5ae06e54ac89f27237a64b0d992ea34822638a93f86aa912fb8e969145048f7c571f4b4c2ecfeec1f4ac29d3738042bb27b136767c34156deec5b4a925d3c6df26c0eaa144eba0f4d44df7613ad696e9182f2643656e225d36793fa6611d99861388ea7891a8b19646cb61494c4fe2af894c8c563e80e95c57a6f37e7175f68e30392b5354644f85a53e88e9540fcb47b55694333a53f5d7aabdc97ce29ccc63be57ff10a6737d99cef3c8ae1dbb82bc24da6313dfa8b0f230c64a03192bfe5ea8485165eccad50cb383d4b42777629a359469e69f2b566d4defca119247304d1bc934f58f2b6373c58e8df7237de2e827ab57e8572a1a3c8a69d058a6813c6e81a6a91eb7e0e8873d4f550e3d86e9b7874c3f7cb54bd548a0925dd81a781cd3aa894cab8971fb3f3378ad5fd5aa72d92c7f790c5fe87e3b85c5e13aeda4d87b7f24578f3c8169dd3491d2264f3fb9599c64fbad4f621a34c3ac31565b9cca5768ffb2da66be6afc2fd6f28eef43706bac69ff675974afb351ec4d277679196382b631b27bd83f81b9d61ed19ab987a716779fd3d497da12d1d29d1fad83e95e6fb1119adb84d58810e74f173a0445c4518356b18f37e7cb5286bc0858680f96efcebe16b4c5db23da42143be1c5d342d61ae901da2350bbf83a1d886cd56f5935b94602cb663a9b32bdbb69da82e66a0ecfd548363524ab6b92d6145f8a9634b50cb90db5a8c22c2cf332d91d80c97ca4cba2e71d4e6543326268c6194c77366a8c9b1a2ca5b2d4ba3300d1768b0b0703926470ad9889395da272e20477177622a466f5484f9a0bad4c5255c7bea19199e378cd4bfd4085dde70a0349db7bbb24ed6992248a1b1edbd9decfa5652f93b4d0d342e7b3d2ec14367c6fa630d0f6763597b6d626696bc58a5c396bb04f25ce160ba239871158110a0a3fb65c0adb98a4b0917d2346dfc7328f45010a585f8ec69a4f098907db51cb256c6f9384356545753ee949dccd0fc24c5ccbba2e716d4d12d702581a8d35f016d8716c0c619967e6240cf46d19e3d2976992be3d2476470169c00d5d78b9823d2d0c05690b884b5abb749106e37a45bf41f426c2405ade1097b4f6a63d9cb74a186dffed6cc15e185d0eef78ba301047b74c17c475489787a3fb9fadb6ff25f36beedeb261a0efe7f12e7d1d4dd247b7cdaf5a3184bb297c2668c77532495e5de0e9a678e690c240d3d77bb934753649536d4093bb1d5218289ad3dca5a88b498a1ab06228c6c9ca58c19bc2e62c0b59151006b2368d74c9ca3249560d664f15a1aa0febd577c9d9c724392ded9b29d1310dff0022ad2757300ba34d8aa97c6e2c0c04dedada25705f9304d602de8a8a49c3ddc240d0258d5d82ba9a6e7109821c11fc2dfb59bcf9504c4a4858ba47db735dfaba99a4af19711bac7ee22a58112d60231965f6e76b4241ddcbfbb9d47537dd90a0c4e41277357938aceb08e0bd7a981fd4169def02665f45d16e38050d9365ed98e4d2969d2ea72f769e0d0341a54d5c827a9a24684fe0b546d99d6caaf58a68af902e5d2a641e2c8cfe8bfe1124f63249621b423ce4d13927bacb3cf5622bf8504fb8bbde349c4650996392cafabc2a10f6b686377167327f1706aab6802aa1b7f9eeb7380349c4c98481a2f707bb14f549d7e8eb38de0a1321c062442c4cbd4d0226e6fa9a24ae2da83767da9885bc55368a41d27db2442b6d06bb2e2779acff192eafb6a5a34b673fd3a3b1d00ee146e823d8f82c2cc2e168faae07739dfd4d92570fd8a2bbd7b5b30b7b2888021df8012689a2e1079398375be23bba29cf7ebd9ca51406c216445cc2069a24ac0e2896f09cb6309054d8c72569904992aab3a417b217c241cd05035d6af633ed9984fdb82b881c21c240d4ebc086069b248a860e78b702a301c95547c9c2405a2918501c6292b4864436e413b6d9a37a635dba86a6abadef445a7817fc1586acad5f09dafac34c174ea71f99c7920ef338c596ea2e69c3cd77befd85330c147d3fdca56884e902398a0509af6089bb6785ba67c756b07d91968782b8af816d8d346d5bc293393eab322cb605963ee49aa4a88187a270066e5292045979a60ba25810b18cc1847b30ba352888a34c12d798e053bab944ec331c06ca4ac188eb68d305d3593a4b47208ad8ec913b48188e16fe5a30ef3dc624597052d739f5c73f6f14a6756f13fbbab48d35491b0dcf74db5ca35868b0135e17069a068070ba7126696ac9689a6a7b2a6774eb50b6843cfcee7f734d4a60cdea3e70ffa621c92f7c56631d5fa24d3bf0d43a97f3b133c7137a966cf7b25f099ce4e3ab8125d75949870864c56da56525bc10274b39a03d2bc9058d59090da36769cef96729ac52cd526ac06525dc9fcf52eaa16525e54fb294a660b3940671b2125a6f99a5b4c8304b79aa4e2633bec427ab4a907356ccf9ad2c69d86a9634ae290b09c8cf8ab19e210b89bdcb8a13889195543c72560ae695b3e26ca39085ee1d908574acb3d079a0ac9823fc590aedb72cb0583fcb37a59215b7d19ca5185c9a9560cf250b8921f1fae5586bfdb29081b0ac188db4acb8ab22b2129e30c84a226a39cbb3b62cb1d5b359098cc67b71135bb396a510d8e9eeb4031b11ee0e393de94e3b13aafdffde04a727dd04672225a192b7ab9d96f624d313ef340f7b93beeceaec7d4473cdf150f4355f9aadaba4399d174ae7103ad18296a55edbd3c6ee9e8842c9b4b33b8069f8c9a63b2a5eda626df5369f0cb0d5304667035374f6c870e99c12243a078692ce9980cea941a2b35728e9cc07857d5a90e8cc09259deb009dd3834467ef50d2b915d039234874f609259db7023af3834467df50d2f904a0736690e8ec174a3a3f0074ce0a129dfd4349670dd0509a9d8e5e106d00a5bd17b4a729fabe212e7d734cd2d79025ed0e36fa8792aaecac1102f29a00f2f64f47513e182dcc507cdae7e9678ece7aa6e8ec62b9741e10243a078492ce5680ceb941a2b36f28e97c1c14f67941a2b34f28e9bc19d0796090e8ec1f4a3aab83c27e5090e8ec174a3a3f05d6393f4874f60a259d8b019d0b824467ef50d2b919d05910243a734249e7e180ce8526e96c4e62f7c8bd05bdaf392a1b9ba2f25730b8b1282854f60e2595a3c1c0466150a8cc092595b501954526a96cc6a95cc4430dfc67b239a23be77de59823b2ba2922f703c5bb382844f60a2191830091070785c89e2124b23a2072b14922db10379029d1804ffa7e397b377ce3ea0b40a3a8c424b1ad49bc36a6fc4468a305ff73cb54c712f4d30f31496b6322a62b7ad97faf24e28c3dfa2c0d1316c6eaf28680c02526096c1225703e7bc10172c206d344a2b1898bcb0089a5e928dc3dd9df89841287d967ce04b42e35492b8c3357593512667207810aa96c57f687209cd14aa8a6292ac78046d33293548aa8f27ee99f31376687a7023b5c9e0ef206ec46e43d01c83bd4247962dd04d6eff11662a35368c68af13850dd940789ccfe2124733c20b3224864f6092199a30099954122d3e0e8a53132c702325704894c832398c6c81c09c85c1924320dc65e1a23330f90b92a48641a1cc93446e67040e6ea209119c61ece0840e69a2091392084644e00641e162432078690cc8980ccc34d92e9ec8a50c2892cb13fa2e340f4f5f08d5776242e6947a463ec079f8cf0465e866ffcfc3b607f47eeda6134078a0efe1a9d7bec608aca53c030da5126a9dc9753596abf54caae62239ba9f6ff7432cc999470f6199841f2c80432928da717f167f0bd11b6542566296f628af2162092e3689394b78aeb08aac6651aacdb8dc5be3d08dcc1daa0116ab07e3746e84380d0754123d46085658cd05b01a1c7048d5083e349c608bd0d107a6cd0080d63fcf03d80d0f54123d4e058bc3142ef07841e1734420d369b8c117a25207443d0083538be648cd06b00a1c7078d5083e3f2c608dd0e083d2168841a1c9b3746e84d80d08d2609adc3085dcc76687476f5a4e1b10647998c0527d0bc10949db82b874660c0abd17efa5653545e0e86464e3249650346a53f3e930a4c77195d1dc201ba2ec00a3799a4ce8d10a6c1ff698f1036568cef009eef649304d25d5c9dfd8247d87f3bbb7abb7b0f4f6364d2ffc3476126b0c1534c5228e283c5c8a6b372c2595f318ee449c7dec3bbea677f307a79aa495abb10ff807101037377e61d69ff4feb6cba686519db833ad6545b18e7d357812a68b349b2dded7173d21fa9698cbe9680bed34cd227d698c32502f21da8c31cbdbe03544aa79ba4532cf8eb854cfe867de9cae9a06a3a231d8df4c48211c2e821fb032acf4c8787ccb1934cbb873436fd5b0f78c8b34cd2b737a9da5d9c499cd31fd6b0930d9cc18c22b6b4aa80596b31835b6ad632af33456d09a0f6ec5d5bc8c31ea4500d543ce7a4b3295f620b310b742af1010e834d7963031c05a029bfc524ad2226ae27b3524a67a9fd123d756249f4a534d5e9c62aa26dc046cf355ddc47b0f3ac96f1537c9ca5a8ceea49dad614671b39274685af9d590dd4e9e7991efc10edcca5a250b09e7bd8adf10240e1f9e9a0b0ff6e47e1ab80c20b4c52088f175a4ebc0758a589446335f73ec02b5e982e12ddb3a62a8873b65eb8b731791958e245e918c6c0e674aa9ef26330d4c5189d4341b3e7e220d16974c76b63742e04745e12243a8d6e336a8cce02d06ddc1a243a8dee8b698cce0d80ce4b8344a7d15d5b8dd1790da0f3b220d16974f7036374de07e8dc16243a8d6e6f6f8cce67019d9707894ea331c1c6e8fc0ad0794590e834babdbd313a1b8086d295bb7240d81b1a6870e4d2587c512fd0adbc2a1d546296e9a5d260d0aa312abf0185fceaa050d93b9454b60505fc9aa05099134a2a2380ca6b4d52d989f8a38cfcbb643a8b4fc5b1d7e22a8b3d32e8498d85223403446f0f0bd106e7308d117d29f0b3d79924da3de3af67fa0315229621fa5e242e7dd7ef4adf0ae1e68772f78e42608937a4834ab8ddf84432858c21539930c5f647abd331326f8cca338155de68924a67061d2e4d99cff7191ec9e7d11da8d1f6b5c886280ca187ac0fc8bcc92499f1776b87e2c3ddda0d563c734d79ce4ea0af74b3495a458857a55d5fd3ba5da54637da4a3566b1c7006a6f092ab546bba5c6a8bd1d38835b4d3797f2586554c07671afb401c27faa6f6340df6d26e96b1aa7b924349d6f7201eaf888211a6780ded1ede6eb7795c3918d91696c35ef2c6093770489cc30ee79940fc8dc112432c3b89bcc4440e69d4122338c7b1de50232ef0a129961dc45661a20f3ee209119c63d8e260332ef09129961dc3d660820f3de209119c6bd8d7a0332ef0b129961dc35662420f3fe209119c63d8d8602321f30496626a9da9154db0bd660fd6e6c2fd8a3c058fc83e9b0552c26c41f6263d08b1a0bb019016cf5a1209169b07e3746e67840e6c3a607e0c42cd1eeb3814f2f40df4e93f4b502f455dd228582b9e7f8867939d66780d0474c12ba072074f75ad1763ea0f0d15de91ffd73e8613cb86e1f50733f162432c378705d0f40e6e34122338c07d77506643e112432c378705d1740e6934122338c07d7ed0dc87c2a486486f1e0bab680cca783446618b7916a0dc87c26486486f1e0ba3680cc67834466180faecb06643e172432c318fada1790f97c3a3a91fd76bb4ee41ce252f882490ad58eb133688dc616b9fc09c2075f0cf6d8ba41cf696c6c7d4f10bcf592497ae9e4cb6cf6b308c376f78c3346db3053b4750305fc6593b4c9b6844c3cacd5e03087b1a8ccfb41f5f38a496ac506ba3964f7dc40f74ee0395f4dc7e4442fbb8249fb622a6315cf8980bed74cd20777e5725700c1452cc6d7fe18b3c1f3809f7c3d1d0da1c41ae6611c64db1f50f946ba26cb843d8e658d1f77a28c06fe4fe18babc2ba63dc4c40e89be9f08f39ec3c8bdde5dc8037817f7ccb247d62e393c4c3fec31890d50ed0f97690e81c104a3a9b003adf09129d7d4349e7c3c057be1b243afb8492ce6b009def0589cefea1a4f33740e7fb41a2339c274abe09e8fc204874f60a259d8b009d1f0689cedea1a47313a0f3a320d199134a3a57033a3f36ddada47df3a9f6df14841ec6403f2f60af1fc686dd4ad81bd39968ce3a7363841e628ad04980d04fd231e441fbe9ce5e314e77b2888c661f39cc84b9875e1334e23f35496543224ef64b7bffdcd8d0db3c60879f99246f2f92e8a955ded3800c4e4ed4b24cad2807d3659f0791548351c2c648fd18ccf87c1144520d0e171b23f52340ea974124d560d4b03152df07a47e1544520db6408d915a0a48fd3a88a41a8c223646ea2240ea374124d560cca631520f02a47e1b44520d46151b23757f40ea772649ed4abc9beb2e620b4f1d6166336a17b3c0994a328d4525d1ffc584314c78775805fc3320fd7b93a4f72655e7e5bdf14bb9f6df4bedffe8bf1d45e8b84031dbb1930a3b99d0ceeb2a1e3a368aac2445ecad7cd6371313d40633618aa94ce847dc4cf8211d2305d838963738228c0b0de7027bfed124956eac53bfdd68ac602e1868f9c9247d7adb9f86319cf13940edcf41a5b65728a9fd16f8cf5fd251e87b9301bb51a1cf013ef35793f4a92d9a317a22a1b993ad812dfe162432c3b8d2fd7240e6ef4122338c2bddcf0264fe112432c318847b1920f3cf209119c695ee1b00997f0589cc30ae743f1e90f97790c80ce34af75240e63f4122338c2bdd970232ff0d1299615ce97e0520f3bf209119c695eed7033249f5c02cd30ee361a39f81610ecb2495899fa561b0b16eec2c8d83407c49c4248d6291974ae86d188f80380cd86546d0080de30125470142ab058dd0301e05510108ad1e3442c37850492520b446d0080de391102b00a135834668180f2c590908ad153442c37834441920b476d0080de3c125cb00a175824668188f88580e08ad1b3442c3b86ee95040683df31d4e1a6bb7dafe900abad27e791158afe4ee241fbe7e7b07e2d258df248d9944777b35831593b1edd5c68139f60626e9adcfe9758e0c2f6571200e76093178ce757553c41160970d4d12b70ff1468556b2a88e191c80467956b242ae124e63d0528d45834c02234f8d4c12de16750489452a196c4e1923b73b20b77190c90da3e5d602e4ee1164720d36b38c91db0b90db24c8e486f1fcf69e80dca64126d7e030a031728700729b05995c8383d6e6624701b9cd834c6e18e39a4700725b04995c8383d9c6c81d0ec86d69925cbd9d9bc3589d1d083abbadd231c645773e99c422f097f89689e5d99f95b314c3bcff491fe212ba67ba6d55bede349f8d75d180a06206b79418dd1ee13a53d44e036e602f93d4ba6b477af9280ef3da9116a0a8b70eae17351860618cdab700b56d4c52db80c41a32ac30475d1d53d44580bfdcdb2475438877d0901663bae6ce01c865d64785a20a94da097997973b429710317f40774073979c1792dd6fb9f93fc0a6dba623d0128b5af5ce7d8571aabb07b0f1cc74545c74cff2dde7c8e96580be76c16852e512ba01c27266b18ecb306a9911cb10b559a049d5de24b52d25d4c6f298034279b67c6740678720d169f4bc4563744e0474760c129d4667b48cd13905d4e89d8244674e28e93c14d0d93948741a0d5f3346e74580ce2e41a2b34f28e9bc09d09915243afb8692ce47019dfb0489ce7ea1a4f30d40e7be41a2b37f28e9fc17d0d9d5249db5ec9bd12ceaaf920195d92f878f2e1a3f26e8ea66922e3aa2309d8f33d14de9ca1880731c5bf868db1bd0d6dd246d1d48d5d3ec4691d5846e99b9828821b829f6e78584469b4e67c5b790114c87eed2307f642cb8b73b20b9473a3c63e247b48571a55e4710729e1d243a078492ce6680ce9e41a2b36f28e97c0414f65e41a2b34f28e9bc16d09913243afb8792ce0828ecbd834467bf50d2f91eb0ce3e41a2d36838a3313a0b019d7d83446738b7343819d0d92f4874e68492ce3580cefe26e9ecc8e81c67bf3495d099c842fe2915d9bfe8713e3ffd7b24dba87d097f73b47d2db2c10d2e3933d625cd02340f4847900266b35e7f6a3082d958c7f30f3086343028541add2bc21895078079cb4141a1d2e856ecc6a8ac07a8dc2f5df1c9f498cb4a9b89e5b630d4a3ce22ce819785cc9716a5637cc998c73c0278ccc126096d4cc4a90b39bb221aa983318b04bda2212609eccc081cc500a8f68eed1532187a6e681e0b590c40ed6e8cea66c056879aa4ba3df1c6861613ba1481c279373ce86dff4d092f885ef36dd025ace1653400ec07539b175e056afd6126296ec12886c704ef327b355659ed09ec75b8f97adf994b722aa4dd8dca5680ca11bbb20905e18c9ed5686cc7dce9a0888f34496513d084cab31f505169e86c3e9b305e12ea66d37450ebe79af7930e892b5933891eb7be9085288897d2d4843266916b41e1ce3349664340669a9771193bab7e0a206f543aa2e1933bf72b8c2be4cf03857c7450a90de7e603f701ab1d63ba129ac8f476aa9e652c2a841e4b49c747cbd3b1f19bb14a680f40e2d8745442d8922c6fa3a85f284fffba1d14f6714122338ca77fdd0bc81c1f2432c378fad7f580cc094122338ca77fdd08c89c182432c378fad75580cc494122338cfdf2ab019993834466184fffba18903925486486f1f4af4b009953834466184fffba0f90392d486486f1f4af070099d34d92d99a545d82e0761da79062bb932996c138d371615e74f01771699d119c43d50c36918c51f915b0d0fc5d3b71e140d18163a3541a9bfe3d0d4c5ccc0cd6f90b7d4279b0da66609bb3824668180f563b0d103a3b688486316c761320744ed0080de3c16a270342f70f1aa1613c58ed1440e8014123348c07ab9d0a089d1b3442c3b8dbdc3a40e8bca0111ac683d53600420f0c1aa1613c58ed7840e8414123348c07ab9d04089d6f3aa0661c1f5d2ab13fa1e187f465772b5463e40d30455e27e292b7201dd148fdd31f8d646c40ee31405ec1ae1cee98627f7208a13b84549a1deed86a8acae660a9cbc274d8e1c0f4dba1b1f8a217801d2e4ac716bb39b678bb4f317e03542085e6272916b3b173faa9b31792b3ac6585fde1222e50315b244037f3095f98565d608b45c1dd683f8c87f2cd0143c2c5bb725372ef645a186339f280951e1c8c5db565079518a4d6d841255f022b5d9c8e756bde8dd22a48a20b068dcf581a9b1bfa03586f497a96b1d2fa3eedcb588dcd53ae0535fe212609dc4b52fcb186fb0852ce085d63b6e07f6e1922350334e19704915483831bc648ad0f482d0d22a90607898d91fa03a8a29606915483ad5363a4fe09482d0b22a906a7848d91da0414ff65bbb6c91ff6809a7d419dbf7c570ed6e5b14ee8424ea5c1a2ded914956783a27e689036301f603290c6d890c92850c8cb8344e7c050d2b90cd05911243a7b8592cea5a0b0570689ce9c50d27926a0734590e8ec1d4a3aaf0774ae0c129d46633a8dd1b913d0b92a4874f60d259d2f033a5707894ea30b608cd1f90ba0734d90e8ec1f4a3a334143e9b0f41c29be0ba23f8c1d1fda0d58e3e1e958db862f76f14ec78571a1e02d80cc2382446618170a3e08c83c3248648671ab946b0199470589cc306e95722320f3e8209119c6ad52ce0764ae0d129961dc2ae56a40e6ba209119c6f09a4d80cc6382446618b74a391990796c90c80ce35629270232d70789cc306e95721220f3b820f5c78d9e2f68ac3fde1bf4c73704894ea3a75f1aa3731ea0f3f820d1697413536374ce0685fd8420d169b4f16e8cce63019d1b8344a7d113dc8cd17919a0f3c420d169742b0a6374de01e83c2948741a3dead6189d4f023a3705894ea37bc41aa3f31340e7c941a2d3e851b7c6e8ac091a4aa798a4730f4e675ffbffa53cf102b67623ec873aec202e85a7eeca384d577467d586312a8dadcdb801c4696e36496503e2ae1f1a61ff4c5fac24613ea7a51c50779a49ea3a48fca27c555bae0db2d44e7519bba36fa729cebdbb2992ef0295cfe96120d9e0309d3192770092cf0803c9063dad31925b837affcc30906c702ac418c9af004b3e2b0c241b9cbc3346f21c60c96787816483dd046324cf02249f1306920d469b1823b91890bc2528a7671b1db036d691f81e78de738342a5d1d1556354e601ab3c2f28541a1df73746657540e5f926a96c43bcc73a1791d5842e8a9d627f5048e8697038b506bb0cc6883d0e14f70b4c129be923b6149c85e0eee8146bb63f8c81131580de0b83e2028caea83366a97f032a2f0a0a9546977f19a3f260e04d2f0e0a954683c68d51d9085079c9ae1cc2f66e6669d0576e3545e560300ebbd52495ed1895e3ec97a633c28aec9756f2cfddea683e3f7e7ca47dbfc8feb7f3fb68fb5a64c3168670a0bb367109bed424c19d7c757d25eb6efeff19877d0d545597a56389582f3639b8bb6ccc7a007004db76ed7948616f7f8e009678b9492a9bc6a152686a74f66a7cc4108d1d402d7f85491aebb29b654cf7621b6884fdfa1a420f230f5f75d316543757a6a36b096dcfd9d37606c92313580d5e61bfe83c9bcaba9e6b08edcb8fb02528313b7adfc414bd6b40d1be2a1d9bb15692c5f6cf154465c360a38d7a6315d087a002ba3aa8d41aedc51ba3f657e014ae49478584f597dc0ac960bd6eac42aa060affb52669ac6fdf4ce5f17a05c4d97e6d1cb34cea51c357293502f6b73d38c7961a5c956c6ce8e377e025af0bceb1a506db97c676593c1514e7ebd3e1157b463d6321eb91bbbb7ba7a1e368ac70bf020af70da6972952c2f258c245ecd302f6ea6160b3f4e9ec577a2885c1b0c83253644e0564de988ef8e69eec6fe73addfeb184511be6c8d2d300853799a4b01ea0d06121cc478b2f0015cbcdc13920ca60c5626c4cfd3650b1dc920e2a7bc698da0df76285cf4161bed5249574987e22f37e95ccbfd3eaa52284a3e0ad0161b7a5a302e94376b70532c7010a6f4f47d80b2dbea3587f79051362a2fdc922d6b4994256456d910e562c0f75cd3c03107b47bafc621159499c09ae7cc6849858488b8d169aa2f26e505bef48cf317a3dd33fd965cc12cf02f4dd6992bed6c43f294b49738e801a67f764648313fd984f35b880a0ba295a8bc08ccd5de9d8b186dae41846e664fbef22162ce89ea35511ea06f991c046ef0ece117a61dccaaf18543cf7a4e3c4d63ee9f795c6c8db08c8bb3738e7ba8471c4b13e28d2f705e75c1783558db1735db6803ef6fde96800d14398d37eaaa0314b24c0121f48c7b614f88ccc4ccf9ccc409305bb9e293adb023a1f0c129d034249676340e74341a2b36f28e9bc07d4e00f0789ce3ea1a4732ba0736790e8ec1f4a3a7f04743e12243afb8592cee7019d8f0689ce5ea1a4f30040e76341a2b37728e95c0fe87c3c48741addd5d8189d2b019d4fa4e7589c5dd00b32360c5c00e87b325de3950ec872bb0fbe821197e63820635d4a0b34da9f4a8f2dee82613663c3bdedc180c6d341da287280c9215f63457b18988a782648740e0c259d2580ce67834467af50d2590c0afb7341a2d3e8514dc6e83c1ed0f97c90e8ec1d4a3ab7033a5f08129d7d4249e74380ce17834467df50d2f902a0f3a520d1d92f94747e0de87c394874f60f259d8d4143e9159374d662004e741bfd8c2287afd75383b874bd1a9ccdc8c3b8a95837d0ff7ecd24955d24547a57d0e612bab9c852f66f1ad8ba82418e4222310d925d688aec71c06e5f4fcf662339bb514cd1d780be3782b21796d1090a63c5fe33507fbf19142a8d4e4e18a3726f5077bf15142a8d4e4c18a392002adf0e0a9546c30d8c517928a0f29df484fa0f4c7f55636cd38646c03fbe9bae15b54e4c3a5dc773300bf62f27615eb77331a8addf0bced6600342d8f05900acf17d93543623740b11dadc2ee41fcd20d8927983eb1c8d79c55ac0263f08ea6e41469b41c6760bfa0974243f0c2ab5469b45c6a85d05a8fd28a8d41aed0719a3f616e0103e36496d7b50cf2f626395b98cc23256d34f24de35e493589dbfd8864bdb627c63ed80cb81f57e928e70197c25106c07f436797a8ab196c0cfc05e3f0d1299615ce0f73b20f3b3209169f0d80f63647e02c8fc3c48641adc30d418993f0132bf0812990617fd1923f32340e6974122d3e0918ac6c8fc1890f95590c80ce396dfef0232bf0e1299069bf2c6c8fc1090f94d90c80ce388531fd068ff3648641adc48d918997d0199df0563677f83f5b8b131f97e604ae37b9334b622ea6bd40c167263eb80e600bbfc2168841a2ce8c6083d1010fa63d00835d8a93446e81840e84f4123d460c7d218a19301a13f078d50830372c6089d0a08fd2568841a1c943346e86c40e8af4123d46027d318a14300a1bf058dd0302e9f1e0608fd3d68841a6cd81b23341710fa47d008353848678cd0d180d03f837d9c97c13adfd8715e8783709cbfd2115b474310d31e5b676cb3f18180bebf4d473389ed274af8e85289fd298d61a21fa56966dd58f0c233a098ff6392c826a4eab11f7433c87c56bc97a4234cd1dc0e0a80c47f8333d2392094e1094d40d1fe2f486486313ca11920932e790b0c99610c4fa80dc8b482446618c313f600644682446618c3136a00323382446618c3136a0132ab0589cc308627440099d583446618c3133200993582446618c3135a01326b0689cc308627ec05c8ac65924cb573760ddaa5b1cee41fa03359db2495e21030714210dd3581ee934045a6c7d9ac8e416c18b7a91804623fea9824568c19c5b650e7b02583d590b1c396160122eb0685488316698cc82e80c87a26896ccb88cce79a4f21c56422710feda47bc2cee7437074b47d91fd6f077ab47d2db2210bcd916bec9c168a22c8ad6f925cb1e2adea0446226bde0c0e84181b34be02d4f60d4c52db4e42ad33484cc92b23e3d9063fcb634ec08571be3d03d86ec37434a7126b9b8671d06e2ca0b2513a9af9a239e5ac80dfbd9a50fd4185d5d82499ee8e20fdd23f6b698cbebac06fee61923ef5b3afc2182adb1df4949a04894ea37d786374b60174360d129d7d4349e733a0e26916243afb8492ce3b019dcd834467ff50d2591714f61641a2b35f28e9fc0e5867cb20d119ce4530cb019dad8244a7d1c583c6e8bc08d0b96790e8cc09259dc7003af74af7c8d24cfbeaecb93d8ac1d0df8af8bec7cb592fded9e9d8e8facc886588da0ad0c16c6d925a7a339538fbbe876f00ae21b0c036412ad00343b97820133486f60e129d46a3918cd1b907a0b36d90e8ec1b4a3aef05853d334874f609259d57023adb0589cefea1a4f3174067fb20d1d92f9474be04e8ec10243ac3b92cf0204067c720d169741b3463749e00e8ec14243a734249e72a40676793743626e22c17baec2aedc7281b9b50ab0d5a9a5dd2314f9e9835fe5f7be701266575f5f1bb18a201050b9f1a91041bdf0a22db8b7d290b08b82b8b1845c5650b3b6c61dd6557c0de124b344654c48e319628b16b148dbd1b359aa8893d554d62d41493d872ef9d7999ffcc76f57fe71c9ec8e396d977eebcf39b73ef39f7dc5334861c9c076793d94c94db9ad47372c7a1c3b80cdff4d3f2f4be6c44acb4cac5d300ebce2162e522acb15e420f343623d91d3c4363a580d418c3b11624725c26638b52259298c34643f911a89f5d9828c7a4c9e402d33590b0ff218744a9a5793cb783e93f9e893aa78b7aea0964fb00bcf165f6fa365fb882bafad2ea2d1c08f87765e28f7a199598f9fe01f7e2d56661385b951688f82b93443821c4a95124c1ed5e6a9d79559e8057b79ea9b4e341a5e564721b80c3cd5799967d30a0cc0da9d262091bc199fa355e42bb5f5ba72606a8b0432eb2df6bbc5d4194da692cd4d3614dcd63a21e78c9aa5295b5688781ece64b03aa31d0614b005a200da8c65ab41fc386a1501a508db5683f05a045d2806aac45bb214cf962694035d6a2dd0480964803aad151fd2e4cf952694035d6a27d0f80ee260da8c663bd0f00e8eed2806aac45fb0f00ba4708d7c9e7eb0b4bd4f734bfea8380764fa968a965fd69689f3649b47bc9a989a3d1c1f77b90d2bd9928fbdffd88688bd2ba1f3581c7699f10e9dbc5eb55b4c9c730a1cb32eb668e0fd5e4a1121d213bb050ae825dd1445926529e4adf6723ac9093a401d5e8fb6c06a093a501d5e8fbac07a053a401d5e8fb5c0840cba501d5e8fb8c01d0a9d2806af47d2e02a0d3a401d5e8fbac06a0d3a501d5e8fb5c0040f7950654a3efb31680ce900654a3efb30e80ce64021d6ea21c91e005d75a58f0669b24bc594c78a3cd176d6246944d5a13b34ed8c5ef974987486a30187177b49a85721770cd553051621fae26ef895fe267609dd1dfccec64582b2b43a427c621c62b29777770a13b62f96d583df70fe12ece37f9e1950fcd5d3c1a56c7d9720b5013150f6da22f00b4554cb43b9ad428e5267be9429f8ee0d0adef11ca0b01f39c10c67c4ffa3d3d13d4e5316bcc066d032d7f808cca6173fcfaea62efebfd70cd5c036a0d0bed7e80766e086595eb7394d69786baa781e974a09c8af31a7b212d02b3e95b212acef77c4c9c5abc5f6367c34a98d6074982a9b1b3e16c8079b024981a3b1b1602cc7992606aec6c380d601e12c2511719f46e37546b2a4dbc5b4704b137db53a3ddb91718f28732f1ba5659937cc05793bd50df9e7d2ce8eec3427890fabbe3a15602a5c9dd3898d6f325e1a42616d0705600cec325e1a41607a4e1dc1f56c56a4938a947bf349cc701ce059270526b2dd2705e06386b24e1a46e2469386f069cb59270528b52d3703e0a38eb24e1a496fda5e17c0570d64bc2492d4a4dc3990586d242fec145a5fdb33b178a5e3e63cd7469f91a234d126883a4c2bf3a8b026483b73d260967894a9cdb00ce45927016aac4f9044cf64649380b54e2bc0d703649c259ac12e75761b2374bc259a412e73b209d2d9270e6aac4d90838174bc299af12e7f980b355124e9d0959c700ce233219b09d3ad189c982b493a20f61c7de260565be4a945361b7de2e0525358595867208a05c12260a2e03f942b4308437607dec08916ce55eb8decb6134764be2127df0b2005e67880e1d395e5fd79925ddbae0e270972874b6cd811dce91215af1f46cf4600c3bf6302006c1bc9545c27a1d605d1a229a3d8a318a57408a99f4fe46a86e3456e52a0565b32cc484ef9f35a90fe45cb025974b01a95122f70190474901498c14a6813c11401e2d0524f1249206f26800798c14901a7b6d5d0e208f95029298284503790e803c4e0a48a2338d06f2290079bc14901a9d165703c813a48024669ed1403e0f204f940292584d9306f2190079929c86621a13f86600ca9343a449b94bfa4e2c2d64ae9434984bc185718a249844fd4d83b90c607e5b124ca2554983590330bf2309a6c6268c4d00f3544930352aa0c300e66992606acc209f0f304f9704536306f92c80798624981a33c82b00e67725c124ee7f68308f0298674a82a9b11eccd100f32c397d80343a81df0794df93d38185a8c96941062b615f7eb6ac42cdc52a3bb0fc1c64f3fbd2806aecc0f23c003d471a508d1d589e00a02ba401d5d881e549007aae34a01a3bb03c0d40cf93065463c0ffb300f47c6940357660791880ae9406546307964701e805d2806aecc0f218005d250da8c60e2c8f03d00bd94901534ca7a9f3b7383de11089d92757dbefee693478b44aedaec44704ef22392d428872b89a85722c845b5fcc4439caa4b7eaee7fe970a24ea7950e3f0364f41226d81d4c7a378178eb9072d396b8c40de8d2a77af7836a3cece8007fd3a5a17ab344dfe3b732d3746d7743ce11e2953303a57459881c21c439dbfed1a1acb33fb94117fbc12bfcaabb4c35d6a700ebe521b0464b417cdac7b3d9a69bc9ddfaed8b4c0177f20f66611d05aa6bb59cee021acf39f70165750513e53630f1a32ccb2a3f58ab954f57c8ccc9ec9c0419cdf9969f01d21fc8edca4294569a69f52a68fd2bc3b410cb49431c201f7da32c12becd00df0f43e0739dd083e3a369f32180efaa4c6e3e271bd76d6d41e2b898a8c1c7b0509e0d28af0e6918b9b4e9b93e81bac3c3eb794f4fc44adbd3ef0486d135210a4e64607ad394cbe9a0b7af65c2730b54fae6719637761aec9388f55c6956e47680ee47729ad7e4aa8c963b15d6c6eb24c1d4182d771ac0bc5e124c8df942cb01e61a493035e60b1d03307f2c09a6c67ca1c500f306493035e60bb501cc1b25c1d4982fd408306f92045363be500bc0bc59124c8d47687500f316493035fad11701cc5b43552b8c99ae311dee6f0176e1b4088fb97064769ba4d635254c5d4ef359ee011ea1db25e12c5589f370c07987249c544b9386f31058357f2209679e4a9c2703ce3b25e1cc5789f34ac07997249c052a71de0d38d74ac249adea41c3f933c079b7249c452a71be0538ef9184939acb46c339140ca59f86083528315165ecf8c16e905d10ed7cfc5393c4776f2623dc52332e3496cc6d800de57d61825e322089b4893c1f24f17e29dd54a8de4b9a24be0b2ae6012928f355a22c01f5f2a01494792a517e05503ec44439c2fe52697fe9302ed4df0dd5622f6f306d5ef5c4cc72efc38cf9dff4ad9383619d7c9889f19ba66b20f574fb94321fb716f3097f6576b05a1f015c9d0813ac359af3288e00b88f4899eed4e822da74ff0894d0a35250e6ab44390f56cec7a4a0cc53897238a07c9c9f3351e59fde7de249a3473dd13e56637f8e0f5c6ebfbb2b89b199b47494ad61ed7c224c0fbfe234690db0ffa149e6a9b07d7c92896f33d0ebd34d3c8b678ecfe86d54adbb4700c0a742a44325f3cce75a1a93ec4dd77a9b32fa3ed15edc609fd4e96dcd0e7f664e35dd6967e51700da9f49454bddabd3d0de05abe6d36132cd4ac3af9a83b248f8f2c1ca7c86896f34ac9abda7e7cff55f63a6deeb72ddfba12b60e23fcbdeb3f7667946ef949a2eb5ef2012c6edc1eafc790829458cf115b4cadaa033bcb5e99c22f1c72a8dabe4b1cccb6b99bd8398a1b606db8225a54b6111784eaa7aa2ee9768eae917b0003c2f152dd5414243fb1e68fe5f30d1669bd4d454a7a68eb493bfce3befe2c3b8dbefb443d4806f74fdeab1fa242c12bf64e2decee39ee6575a5767a6c6fe1ff796d6faa1a23a4919dafff3b2d6419e5f90532f5e6367c1bfc3aafb2213e5d0c4002d5e4a31639d066d6f16b471207f2f85b0557b0a6598e415541b779d6c64d9aa3bc23af9ab4c36632cb34f6cf3f62915e4da0d48205bc1e8ff75987890bcf03bfb16d6747e0ed6c097435737eabfed49542f34cbf31e98e2af8448c84aadc5155737c9137add2e921c503baf86286f8a30fbb632f5825d00605f0b5579333e484f95e202aca7b4e3b91d603d7d9d89737313399ae7fb07dc8b577b890d8490967b792b48e41b72ca416aacf0510728df64a2dc7e0028abec6bba4196980afb53e40669e7da9fcd2c437e27d0f2bf0951503ff22fb57a1f5243af32ab318ffd3700f4b7618eea8ac21bf434ab731ce0fb5da8a33a0c5cec8fc753afb97431e8f7df873097fadb3fa35465c39c6f00ce3f48c259a212e730c0f9474938a92d986938d782f9f496249c052a715e0e38df96845367b3b1f701e73b927016a9c4f90ce0fc93249cd47254349c0702ce3f4bc299af12e74980f32f9270e6a9c4d90138df0de1a6c38046b74baa4aec98f4ee848e05847fcdccc9513cda2edf7e759bcbea75dfe7d8c11a4d9ddf6a12a5f37d964f69049c69bec7443bc6a4fa941698ae476f0389bdd3e72e5904a8df9792f445d5f8b4709a17c0f3f4811494546d4f43b93948e5dfa4a0a46a7a1acacf402aff2e052575ffce2bbd0252f90f26ca91dd184d512f4177f69e9e0ba2d98c3a095c76ff0cddb12d1de424afcb5bc258a63439dd0b907e18c232ed0d693c6ea4dade5ec00e98e359688f03b4ffcae46a9a7acea9b161c47c504cff0eb5058d9fcfbb81962626b9e606782f9a24c2ff84504818ded07d6bc6604dc7685047805c7e14aef479ad71756d92bdaedb4349274d0ddd056be5c7a12638f662adf6036ad6e4c580f09310c9060e619db731ddad467fd61e51f72aac939f864d2fec7e959c9a7842b0d5721a0b6d1ea0fd4c6ae626d5094273cdbd0393dfcd0d9168a94e111ada43006d9654b4542f280ded1a58100631d1465adff993d6af00f0bd01e1064c84c912571928f14babd3500af8bec2c4b705486053372e39cd61b4b7c00a39388c0c16a4393c3497993e08f07d95892fca7deb5f0e479eca2c8e0760426f2809a646b7db93007323493035f669bd0f607e4d124c8d7d5aef07984324c1d4d8a7f526803954124c8d7d5aef05981b4b82a931bfed0680b98924981afbb4de0830874982492c954683f932c01c2e0966a94298af00cc4df92eb6de22393254028d762ab43da0dd8c89b6ffe55289f626ad5cea7c08e7da9c89b1ef588ef8504d1e2571874eabfa71319c996fc1441915011848ee105115d1f2337603ffd108694089ea8806747700fa7fd280125d1f34a0f900744b694089ea8806b408806e250d285129d1809600d0ada50125ba8e69404b01e8d7a501d59885b92b00dd461a50a23b84067402001d290d28d18d4c039a0340b7950694e84aa601cd03a0a32401cd536ad817c3d6f31bd2806adc7a1601d06f4a03aad16c2a00a0a3a501d568d8e702d0eda401d5b8f5cc01a0db4b03aad139321e80ee200da846b3692c00dd511a508d867d3600dd491a508d5bcfed00e8186940353a47b601a0ff1f2202395e65c151a8f243b51acda983fbc346339b896fb4f9a2cd2089d39d96645009d2b973260f8f53530889e6fc6a16ca0238871f1b62e58caa7dd52762446ad390e2eaa9b14ecd9d209be342ac9cae7e7cf0fc215a30c37f4c12df2e219203bbae9cfd490f246e34695945b783648e0f11b994bb2ecace15e4c702fc9ab38b5e0209dd55ae846a6c977b1f48e80426da81f737d0e84c1e0756688e249c252a716e0b387325e12c5489f3295847f324e12c5089f30ec0992f0967b14a9c1bc1642f9084b34825ce3f8174164ac299ab12670be02c9284335f25ce9580b358124e6a2a170de70980b324440d10ac3d37dbdf44876932baebc85681022a65421c6e928554025700a1e5bfcd0309dc2df41ebdfbaa732e27aed9beea62ff5b8b974ea2ef7d5016096d2d388c7767a28dbababac93dd95eb4d88e5b69b0bda36b63e206acf6032c37c9268fed21a63ecdc3b40748ef1e21d4514fca68a27dea62e332e3aabde38eda979086734790d83d25e1a476cda4e1dc1770ee250927b5641f0de77ee0f3dc5b124e6a810b1ace56c0b98f249cd432a8349c9700ce324938a94d4c68386f009c1325e1a4b6c8a5e17c18704e928493da849477b20938274bc2496d914bc3f92fc039459257a954659cfc187088944bc259a212e7568073aa249c852a713e629238a749c259a012e7f58073ba249cc52a716e00937d5f49388b54e27c13a47386249cb92a712e049c3325e1cc5789f32cc0394b124e6a65641acee580733f26ce6d4d6a84bce3d0615cf6467a8c7c57cfa7beddd1af617754c1c4ba731ad6567f96546b79b8ac8de87d26bb6de18be14b95d99fda7cfa0c3531e1cc0d48c02781dfbe92093c6aad5763ba2fb09aba15d577323f128ca9fda58024c689d0406e0d20674b01495c4b6920770715552505a4c6e4ad0900728e1490c4920134909700c803a48024960aa0812c079073a580249af134904340d91c280524b1bc0a0de4b52091df920292589a8a06724b90c883a48024e6b0d3406e0a200f6682dccaf4e5f048b524359a409f01cc7992606a34cc0d38390e0951a8a27f3b1c8d6ae71190cb439928c798547fd102d335b97a207d8469a86969d88782a7e83026ea1c93eef1ec0964cfdddcbbc6d50772d48d67e11f09f8e7875881fb1ffeadcfcd3c1356e0c325c1247a3e69306701cc6a4930358687ed0930174882a9f134696f8059230926d1e74483391160d64a8249f484d2604e02987592601237013498930166bd2498448f280de61480b950124ca20f8a06b31c6036488249f48cf2520c01668c097394e95a40609a2f995a6ebfc63cc65afb7e17fb815d3e7c90a20234b04b4c12ec227e2cd34c7b418d4fcfc6cab319eb094bab47bb21606d0c1171d7939b0f87a377e6a2556fd803a67f1313675442d59559597f8a5f0c077ccd4c7cc3fcbb71ab65a3bfcd764f61a1afc3e09ea4cff3390226724b087f7d4f5a3c7522134d759a145681142e66a21c78f3329de527df82039056694035362ffb33003d421a508d8d775e05a06dd2806a4c3d780d80b64b03aab179d91b00748934a01adbebfd0e80764803aab1f1ce8b00b4531a508dada15e02a0474a03aab179d9cb0074a934a01adbebbd024097318146c52a979806fbe7f601c53151733769fbf9358076b954b4d4a46d1ada874c12ed51210e3cfae7f32c66daa53467c93f414e8f9604936893d2607e08308f910453a31befb700f3584930896b260de6db00f33849308976280de6eb00f37849308936280de69b00f3044930359e5ffe12609e28092671ff4e83f902c03c49124ce219120de62700f364493089e74734985970c2794a88c3e2fe65ca692c17f01790cb6f335146ad497b0219bd536a10a20b6fa3606c84cca1ef64367c213e5493474934d5697d882f84c97daa2c2fa7ce768fab618a9f260da8c6f085ab00e8e9d2806a0c5f580540cf90065463f8c24500f4bbd2806a0c5fb804809e290da8c6f0854b01e859d2806a0c5f3807807e4f1a508de10b2b00e8d9d2806a0c5f3817807e5f1a508de10b2b01e8394ca0a34dd74d67fc94bdca4c36337c3e91ab961c7f0c338ecaec1dc40c35199b965bb40436a22b9878b1996ea74f7f719d351724f6f0ae6e323d2566350be2712609f1dc101945051e63e08c225aac4709c8e07999f42b55d8a72cb23fb9cadd54bf124d1227808bee7cbe07bec6c718b91777375a669fb2ccfe54b39ea46b8d8169bd3244de25e609f794dc4acf0ea6a99a12c0790113e7c86e70ce4970a830f5166db51fbccabf406b08a86358503f01a8abc224b3e6ae47aae77cb02e2f0c11c1d9d5baec4f0c2771af4e437b0068f58b4268f5fe1d066b0c9f990293fce210052b3e4f9c31f1908326a3d700d84ba482251ec7d1c05e01602f950a96b814f08aa702d8cba482253a4268606700d8cba582d558ee772a805d2d15ac4603ab10c05e21152cf1d88e06f60200fb03a9608907cc34b02b00ec9552c16acc966b07b03f940a9618b44303db0660af0aed1fe8be22fd1cef6c711bdd7a3f5c33d7925d4333b8c0557d7588833d7407ee67bf2fb53fb9dbee4c785a9778596d31e5096f565d08c7202de6f921f06c5dc3c4bb89fd65b62f67e94e472becd39cb446477b3470b42296a360ca5f1bc2a35a9838116db224829d85d256cc5580ef474c7ce9fd8c63f626e602c69e0ff688db53dac15e0bac96d7c9f1a66acc528a81845e1fe258afa7e3e6ae0d5034b640990892b94612ce5295389b01e78f25e1cc5589b3014ea16e9084334f25ce1580f3464938f355e25c03386f9284b34025ce0701e7cd92705273ea68389f039cb748c259a412e75f01e7ad9270528b0dd0706e0d86d26d7cff51d22bd47d0859869a4ef0da479b24dedb99788799a47bceedde9b42b9406892790ab8deee085106a3a7899eba57a79a48b4ddfad7619aff44124c8d3545760698774a82a9b1aae207a0cfef9204536355c5bf01ccb592606aacaaf8078079b724982aab2a02cc7b24c1d45855f13580f9534930358685bf0e30ef9504536355c5c700e67d92606aacaaf8ac87b9e1e0b4c1cbbb0c3ec93b229c2ba2c644f117edf6f1a9c6a514d6791035f6f79926e69f75b8c531cffe1bd82770a8fdd7dde35959c3ed1d4d314bededb947dd78b57eec66fb577767ed2627d75e72bf13884d130291edcf48cb2c7397d838dbd4f9575f669fe7eeb9d6874044fd3d3b3c926c5f18aed23ed6615c90847b059726d960ffeade71cc2c87f893ecac8d3ca73ad39920e0006627eeb5d3c4932dbb4bb1ccf6b82b13ee9d6c1f9a11fd160564b8e71de0ef22db47204cb63fd5fb3b6b32ce9fe1eeca51e8f057bb315d42e04c2f5bee4e5cb7d20a7ff775766c7745d233929df5b5c4b5f1cf26fe09b627eea4e72091ecac8dbbfcdd7da6f18ea8d95943fdfc59ecdf6dbd65914c34cdcedadcfe2dfe7e928f2629edef83013afc6b0cebe6de66f94fafc18e5d9be05ebeceb313bdc260fbe8a4846ba2dd8b7556d66609497657c4c7a8b62354fbef73d6bdaf0979f6b2ac22fb251e25b7ebbaf8b8b8e437db7ff1dfa2c7fb1ed3c971efa33de08435abfbd5abe94b9b817dbda3f8a2e19e5fef7d62757ed4e97dbed3bedf5fcfb379e35e3e9509f9eeb3589fdfff83ee731f94f8dc074d2870ef37f74b90bdbeefe8217ce52f5b5fa64e3ff1f25ce9d7f4567fa5bbcd2f22cf43fcfa8de3c5fceb4e289429cb5fde7b7f18d7b041138a3eaf2c0ffc8e1e61ca727cb478e874dad853fbf1eebaff1cd2df73f2aad684e68f6401b55ddf2446793ba7e7d1caec6f0bfd7b8df9519b4df49fd391ce96764bd0a34c9e4361c1af4b89fffbdf3ae16c57b74e3c96329572dc547afc7f32fe25c9b8fbb79517c303ec73e31ad3d9af6df66737de27d30799c1ff0526533bfdd8370700 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/cb31e78c53dfaa5428df595dc23218df.asset.meta b/Assets/SerializedUdonPrograms/cb31e78c53dfaa5428df595dc23218df.asset.meta new file mode 100644 index 0000000..5d8bbf6 --- /dev/null +++ b/Assets/SerializedUdonPrograms/cb31e78c53dfaa5428df595dc23218df.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 61f8e2c7cc27cd84f9f38057d7ae57c1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/cd57870fe56735e48851d8a49df54c5a.asset b/Assets/SerializedUdonPrograms/cd57870fe56735e48851d8a49df54c5a.asset new file mode 100644 index 0000000..8a1159b --- /dev/null +++ b/Assets/SerializedUdonPrograms/cd57870fe56735e48851d8a49df54c5a.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: cd57870fe56735e48851d8a49df54c5a + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cc5f5f8e7dc7bef05cb5d6e922cb961aabb0d6eb8510cd8b224dbc29265abb88029a617d37b0ba6f76e3a845e426f21404842024948482109e924f9ef9b9dd1bddb9b77777b7b6f35ebffcf7cd0deb637ef7de74d2fdbac5038ff62639d3f2bc41231431488e5a25cd4888dceaf19ceb1daf9cf3dd3d7178b5ae7b8cef95beadc1b2bf2d2bc09ff46c6fa387fe7396775a2de79b3419439c74a797fa9a8707ecf73dead70cee0ea5ae7ff0ae7a9580be7a5e562a65824168adeb19e6944ac902fd5a96b31b02bd6c6f93b5d6c77ee5648a520904279abb7f367a973a74edeab7694d6cfad14c748b3aa9d7b65ce3bb5a2ca91b9464a6c53542ce40fe11efaa8635f7504a96dd5efe6ea771bf51b3fdf521dfb65f87c7ff45e5bf41b08ed4ef1fe00f72849b6728e17a373f8ff77eab981aebc66eb53c81aa48e79ea3858c9bc2403fd5babe39034f6a6923114c9ca84591b751cae8ec394be976619fe489751ec3a240f58e238198ec26e8beec3b511016cd7f1d8ca138faddc786c76958abf2fd5f3f9ea385a1d4729d9ce333d942c31461df749a3d758f73d3145c47dd609b3f926753e4e1d0bd4b150e9d646e97a193a0faa8b9651a464b656615c6eb8ae9f87fb57a8f3f1ea58ec89af12f5dc95ea7c4286fa64e27f5aa7b62a8cabd0b9c3b1c5ea14b274bcb7f3c47b3bf5ee452ec7168f7bec41fe67943b51c9bb3a0b3bda7bec68efead2323ff1b9b43a68f993949c0e4aee35e81ce45ee6d33695b7b5dca3ce278bf4795b9f0cee4d75e5b4d1acf773c369d5c3bdde6a7f91e8cbfba6d153c76d474fdc765472ab945c6dfffeee794c731e82e4c0fbd77ae476f2c8eda4e4ea3c6242867a1ea08e07abe30c759c2e1ad3f108ade341ea384d85d95924e6019dd5fd03e3eff6d6fe9529b7547134d313d7fba870bba491a9df9fa58e6d337c5e3f333b80ce73d4b15d8661b653c7b901c25469b6cd371e5fd82f8dcc792edf36f54807474edb1deafc10753c541de72bfedd3d7ed03d033f48a7cb02a58b4071e0e8d2ae8b3a5fa88e8b1275712ab0893a5d973b9d625d95ccebd1391cbba9ebdf43e7a0eb62379c762f299987a9e3128fce4bf97416cbdcf73a7640be91c97ba9fc6bb96b5ffb225776fb65eafa0a8f6e73e27ab79989ded57a64921e8e502c7a7a18f7543a68b6477a9ebb019dc3b1473c3cf9db79b783f6ad01e83abcbb1b9dc3fdc333d475a548f6599083da0df23784adf2ff0e17a9678f16c969cff42e1c7ba16bbd94bccfd47bc788e4724c3f07b6dd88cee1fe5119da76ac413f27dc8e07a778779548cc7f66c5fda1f5bbeada6aa54f1f9198b670bb40bd13ab52d74addf3ce5a9735ea9dbe884b5f57bf4eba3c2d53c775c25cce56200e2a3d3a4dd5c6b007aa7cc56963d261a97b42974fdaeee57139edfb28dd753e562912d38cf759b8769c3a6e54c7cdeab829feec285dd7ae56c71aa55b3f9190378b2a741d8efdd5fd9bd0393cb7212ebb978ee35a8faea6f8acf3d86eca0352f959bdfbec48edcf0d2edbced7296e2f7974582352fbef1675ec6688e7ad69e2d909b78baaff75f1d6ffd285abe343971937abf36de8ba579fed19e8738bd2e74d9ffa1cef899713e2610c9debb9974e56aaf83bc995d9d8ae38591d4f51c7e948b6cecf06c47569ac6b9e88eec1f93475dc2112cac894baec54c78e69ece9839e83e3a901ec4f75af953a9ea16c1b2812db5a03dd38ee76590a5967ba9cfa7ca8cecf72dfe97e8b3a3fdbbddf55d7fdce41364118bacd0bcfe8f83e57dd1b84ec5675be581eba76baba36387e2da6eae0e23c4ffcdce2b9bf0bc930dd3f1fe960ba7f81ba7eabab3b244b79fd428f2d3b3cbae68984fc4d5c946cab7c06877d9b8fb8d4edaf219eb81ce2c64b8fd529645d628ecb9ebaefe5524f5c6abfd07189cac646fb555f496c188ab751eada7043fca27eab98ee83bb023d83e342dfbf12c935ddbf0ae960ba7f75625cf6d479d935445c62fd715c5e9b6c6b6cb827ecdb33884b55e7103a4f31d5b755bd53e6b720f78e0ce4aa3aa82c4b29b9033c72efcc40ee8deab83b85dc9b8459df6cc2d3beaefb88468a445f8773c76f7bcf4f21eb6661f4f53e47ab7355ae35fafaad22d1d7f345b2afab741a1b158f7fc902ae8d16c9be3e06f989aeffdd8e9ec1beaaefdf81e49aeedf897430ddbf4b24f87a1f5d2fbf5b987d1deb8f7dfd9e645b63a33d61df95415cdeebe1acf98e1589edabb16efcf4d5fae9e35988ab299cfb5cf963747bf37e256f9c927f373a87638127dc0215ee2e574e3f5d6ea8fec2beca4ffae9baf6032a3c5d8779503df7a6e7b987dcf3b19ac31e0fff473cbe5214f7b7465b1e46f7b06de345629de45175bd18c5d578740dc795aebfa5e3fa983a3eeee157a8e4dd83cee1b927e3fa8fd569ec0975dc19bfd7f5394ffc76407a3c65f615a92b8a33df75246df3d3696cf69327e93efeabd0b9e307fd3f4f21eb39f799012d523cf3823abea88ecf2bf9134462bb49f353ed93d844cffd89eafeee38fb5e57213db46c78e7de0cec7f451d5f55c79755389344625f9cea7f379611d9d663b3bd57a1749a2c12d3fc64371e06ee1689be589ec63f5e53c71fa8e35a256f8a87811edb4ad58f962eac1476c5a68ac4be8ba9eafeebea7c5f75ff3e75bebfe779ddb67c439defe779fe40cff3aa8c10aade143b20f179f1169203e76fc76d93bac0b577d0353d06f06e9c4f9e1eff3c28316cf19e486cdfe936dcc1eab9fbd17b9881beff803a9fe6b169ba3a7f109dc3718647ee340fab191eb9333dfabeaf8e3f54c70fe33616bc84de413cc507893253faf4db4ac62cf5ce43e8dcf1e9bcd52964e877753fe11c25e361740e32d4f86fde3db4acd85c0fbfd9e83a1ce7a9fb7bd0790b77989fd4ef1df5ec211edb0e51efee9fc1bb6aac2036df63db7c2543f5f70c3e3b85ac8fd4f1479e38d43e0bf2161ae2558f117ca0ce17281d1e41e78e0e43f2d4731f0bb36f1fea79ffd1c4f7878e55cf7fa28e9f7a745b2412fbe074dfd64f689f143ff5e8be38fe4ca37e3ff6e8a7fb8ab4de87a9701f437ae8eb705c2212cb283d2ef13375bed4735ff78b8e8aebd238c69f2a8d9ca08ea8df3ae5f3ba6ffaf334cfa792f173611ccf1dfaa57b7de83f52c8f8853aea3eba2fe27ac4f458c797e89a1ed3f8659c4b611e7a4ebfd7163da7dfd3d73627ca97f780bdd6ff57aedc61fa3c95ed7a5c6a8592f1043a87e3e122612ca071fc435fd76d4235fe143b425d7f129d3b2c879fe2096fa57aee29746e3a1ead9e7bda138ebefe8cbaaec65f62477ac23fd20d1fba2e12c23f463df77d746e3a7ac3ef4184afc78e8ef2847f940adf6bffb1eab967d1b9e9e80dbf2711be298e75b9b84a24d6a156299d5e72fd64849efbf56b759c2652a7a5df78e4af56f29f43e770df34e6f05b75fc7da28c847c5a8f47948ae4bc4ee57172be9aba57a4fb09be42efc1f9d7c89e74fdc0a9d2c81f84b13f225fd57b1aeba00d69b8fd5118db9ff9553ee57c2312dba77f1689edd33fa9a3ee27f88be2b2c6c3e15b75bd2c1e5e6c0dba666a7ba6d3cd744df551c6ca45a21faa718a51f3958fe8313aed873569c252cfc5f0b8880e6b2dbaf657756d1db2732dba06c7f54ab7e7d1b9a3dbe8773d722bd5732fa0b0e1789cbafe223a87f7741fe30675ff528fbc6aa4d30615a68eb7bf79c2a812f132d6e1355a8f07ff1add6f8bf4d4d7b40cdc47b4091de1baca0b469d9d1866da38305dfbbb3adeefffddd8469158d757e398b11a8fefd4b8acc6a8318c31bafeadfdf4c1d4616bb94295ed31cde13e740ef7ff89e4c1fd977ddab3d963cfe6c470a5fc74ed075596887f291975ea9d57d0391c6b91cdff56d7ea914fa831d958837a5ff707681fdd829edd829e85e35691d867b2d5e55f70b647b67e6f9b7afe35740e617da7ceb7abfbba3daed3e8f14887ede81a1c4f50efbc8ece1d1dc6a9febf82d54458babff60d748ec33c51dd7f139d836d3d129f8f9da49e7b0b9d6bc658cedb1e391ebd6227231bf598e71369fc558f4d17a17308eb72d7f6b13a9ffa6b66f28cd774f9f61f15c6291e6ea7a8fb1f6421fb0b75fcaf92b553c97e079dc3f13475fd5d740e473d16f81e3a0779ff53e7a7aafbefa373877de19789f2651d1bcbd7d77fa9ae7f90de06f8298f677a6c38531dcf489415d363b83175d47da21f7ae49eadaeffd073fd1c75fd23f4bebe0ec773d5fd1f2139fa3ab6f9e3447d1adb2094bdaa5e183b4f24b6e9cf73d98ed7f51f5d5e7f9da1bc66eaa87d7b9792ff093a87e3f922219f8aa971dfc6fc4a8ff35e8ace41af6f3d722ef4c8b950c9d169e92275ff53cf7bba7cfd5add8736b493d68adb24da93d6ee846b2d6372cdc55c51214a9dd2b750c2805672a6cb6ef49be917dc80e856f007fe8d94c1d68bedceab15a6552fcbe59a9a7a51228a8dab5efaca79d83af419f26fa9f344a514fa592c298827928200e5aa9cff2ad0929d3ae7fa1cb9e20716ed543a770ac47ce7086fad16e3c54ae7bf44292b9c60ab9c8a688558e6fcdd24e5ad76d44e7e329d49b0bcc7fbce1247a6bbfaa8dab9a2816e72ceaba4864be5df2d52d30aa9fd3ce75abd5c0bb551ac731a3435629b0c2dd9f65ae7b729cc650a995947f32224eababbd44947d34cc71ad0be50fae2ffc54853c408a06ff559cc4d862d0ae508d2b94931f17f0cdd4c063a2de72919e325b258c2b5625108a7b20332a88dc9169afddbe53dc969a0a7b2c54c06a2bbbfb4201ec37b8eee56f2c57eef6f6f99685a892894439503d298960a2cc8cb973376fd98d0b2658b2250d48b3f66c22f97542d0d11bffb5ca57cce7f04b492855f6204c8a1ad654eaeb618159e2b9cbfae72cba519555249af59339dbf6b9c6beb9cff5c950ad09b4b9c20e05a85730d72cc061964a5385e1a9f14df45a05c6b1965c905723ab3a9486b668a34596759d62469865a469b3adada345a118fb64259cbea93c2b9a9b064f5ab99aa83e9e4f7f4238b362ebbf8b75fb634c74b3b192fd98446c54c7353ccb40b3b39a52f3f52c54bfb46bbe2f102ffcc0c3b10be9d4e078a600b13c1f661fb36dcab915220b5fb67089387c778b32433c04e8413a6578142d8d280b00810763668255ab6f568050a11925b9922a743d314d6d93937acb4e8ed41d09274eeae29cb5abfaeddda444f4e335fcd4a4fb721973a45dba1cebd52e7f90a59a8c1f5c58ec452276c90374d86106f7726be919a2caca918e7256ba4da5d521d865ac44135a388b731102f027fed61700399c7791343573a31b4a59259cfa0c9ac1d25b95750c9ed29c9bd834aee4049ee1354724753b281e7e510297fb28977bde85fd39d77d73bc66c91ede906e77d53574deae4d237e3e4d24f26973c61ea40f2a711954c3a99e20e2ef63729e98dba7e74d475a6040f0828b80be56d03837a5b57936470c17d3251b93b2db81bc562504016dd4de94392af644d1fcb9d6b6ed7e02c79b752f62741af40adacb2d489b5d2d7dd9d83a8a7757a5820b7ec69907aa44e397919a79cc132e5c0e4683e5da934d5c314dd102b433289eec17474f7a4040f0d28b81795a686054d53bd4d92a1c0807efea0c5701f937028414788e476ccff9c7f49c23bd0c2fb529a8f3468de50d1cc97e6fd28e0f94181f7a7248f0a2a798029b391b9f14ed6cc26d3b1933972abb20ab1c8a9871f27dc4e6f1d6e8d4cc6a091ee3c5fe21cd74a2de03a68917ecc2575e634ba910fead49065ca2c91f90810bf15308ba299cc24c7ca4cb220452669d2c67f3669cea2c7c9d0ed624365e903a99ca6c090d37c6ccac652e434fb5049b63068921d64920c49b6c8e0ab45e0abd02bdf4ed63892c21947879367ca1a64ade7f826cd1adcc63ac85b2b87335d790b056c24b855baea06c781b728c759e63c532bfb77eb036706b0bc6ba0b71748b8ffccc9a14426870333480e9c56510960b0c993a05703e62526f5c043c1bcc469c4cf10ab6432dc2c2f032537762b1b7bce4b851e994cf2b7d6b4bf0d3169033575585d15a4a63e94123c29a0e061541a9f1c348d0f374986dc06563b05ad618da0d4de37a8da23a91c75aa2147fd2ee62f47cda784ef6710fe74337fc247514961ff4c7c2485578fa6041f604a6310ef33640b26cff9bfc67903ba234b65eacf9385613c37c873d27aa5f30b0aecb1e8f91ae7097726801f3dc7504e716050a7184bc5db418678fbd667bc8da3841f6c103eb7b93fe10554dc4d33c51d94b2506e40b564bd2adb1273c33c39c29827a7e134c88ece72197375325ef3c4094e117ea273ac779ece93e54095bc9727f7d5ad9579ad9f382da4f49f6ed2bf1dd27f31d2d04f8845a6103b0877e7416fbe15f3996f8d3709878acf4c41547ca01eeabfe2534c619b6dc2365086b34dd65c1be4f34ba5035434d695cb7354409618f42a94bd451b455356c8a0b5009396eae4ef781505c28e0f8607a978c15a496fc54bff3357bc60c546be5c8f1f86f654056b0295a9ce3364aa313f99ea442a2d1c42a58543b34a0b934c3e27fbc23635a9cfd1296a89940d292f78851fd6b934f7b6fe6587dd840c3c2b573a8e917b22d7c97dd35d72759099c278d51ab441ba0b5f2609739a5820d344989a53e96232556a2f3494da7b5afa2bb5a7985c567686d636a9cbce9412c270db4526b7959db6933288fc5cea3948ce6dad93996ab9ca54ddac7b90dc7cba56169b15ce75c878f1fd31723365a82fcd96bcab25f91ad9bfbf4e5641cd4ebe583a79d876528ebe2f55001c6628007cd5aaa75249688921097de73309ed47a9bd34a8dafb536a2f33a8bda3953fb50fa0842f37089fdfda9ff0034dc25b0b7763dc202dc48328c1b0623ba9ba097d0eba9d50e66929ae916d05ddfe2b9757b63b7fab9c6b6552449e9ca7ac2761f8d1f2608aed1106b65d7cb29d4621383220dbe926c1e09e47652238c520ed0c9360a87fad1444fd0b2637f8af7fcd348503d88f3160dfed13fb2c2a991f1b3499cfa624af0a2a790e25797550c97329c9a54125cfa322718d2112611e929f483c84125e6610becca7f043a984596eca9b860be81a895752dde653bc5fa354ac95526a9ddf5b54995b9ed03f027d1e95aad1ec279dcfa7f4ac30e9e92e8b82a96650a728957d6810e222b1c157a80b28f46b0de877f944bf9012bece20fc2b9fc21751bcd69b78f54913afe5728652fcea78e7aa1f8e8b296d2a4ddac0693cdefc84731885f43803d2ebdaf943ba84326283c908184773f14d75902d941d7ea56a49d716598cfbc7b894d2a0caa401e46cf31b2b068bb3ac162ca390561b907ee813e9722a47de1834475e41a95d63ca34dbfb53fb704aed4d41d53ec224196a1d9b0551eb8026afff5ac7915438755438f55985731445aa2128a99526c910c15b0c117c70077f117c34257cab41f80e9fc28fa1846f33087fc9a7f06329e1db0dc20774f4277c1525fc7883f0729fc25753c24f3008bfcaa7f0524af80e83f03b7c0a5f4339f989419dbc8c52fb2483da3d3af953bb9c52fbe4a06a57182417ca697f612eaaf2ce7ef2b7eee41491e9a4559847675a50952e7caa4b69ad295ea0843ed5a4928fa27c1de54da719bce94b9f89603d25fc7483f0a37dba6a2525fc0c83f0b37d0a3f8e127ea6417897cefe846fa022f3ac809159450986ad4692ea8263a577d6c8349627bfb40aab9537aa0fbbc28e111572e0ba544dd8d61d4e7ae01a96bfe729efad553e5de5787b8173d58fd6d594d6e798b4869157e8c48dd79bdda6a4db0c31cd2bcc132355ad7ba42fbd36523e70aec107f6f874b01acae8f302fac02693609859be2b13c12966966f360986eae1f982a81ec2462feda4443fd5c35a0afb8506ec137c26bd3a4af84506e147f8145e4f09bfd820fc749fc21b4cc2a164864f8e042a99b7506a5f6a50fb3b9f6a6fa5fcfc3253e28651d6c405830d72be538d2c8237aa42be4a5503fc248b6d9491971b8cdcd5c59f91db2923af301909f58355594ed83a9e32e34a8319dff834e304cac5ae0aea623b28405707cced4ea4045f63220fa056367660b97d2dc7f82cad4ea262e05a430cccecea2f064ea6845f6710bec3a7f0534cc22103bf5e101938ece2e8bf7dbfd3140e38c70d9944768ae1975329c1bb030a3e8df2a21b03bae7e994e09b020a3ec32418e2fe66913ce50e04f899727726e585b718bcf0966efebcf02c2a93b93568267336a5f66d06b55ff2a9f63994f0db0dc2bff229fc5c2a65de41a5cc3bb34a99e751ee08db0727e59630e16b95f31ff4f1c060f23aa768867a3e4c4bdd26ef6c926d03a871fbf1dd5d9416779bb4e8dea84591f317eaf63018e14e07c95e87f3291dee31e9d04de950e2fc5fa62a22150e83fa001a5c406970af498336282e60d1082c74f513da8594fbde6770df3dddfdb9ef4594fbde4fb9ef0359b9efc554a6f7a021d36bee33d3bb8422f49081d0a61efe085d4a097fd820fc229fc22fa384ef31c5ad4fe1975371fb0815b78f6615b75750c9e1b1545953718eb3a62b292d1e4f9d358dcf61d67415a5c313a9b2a60939cc9aaea63478325dd674b80ccfdf04f76b28f77dcae0bea7f4f4e7bed752eefb34e5becf64e5bed751c8e0c315412a7ad753749e35d0e9d0cb1f9def51749ea3e83c9f159d1b28235e301851eed388dd14fa1703a2bf91d2fa2583d64ffbd4fa260afdcb14fa57b2427f3365c4ab06238eeeedcf885b28e1af1984eff029fc564af80f0cc277fb147e1b85ff750aff1b59e1bf9d724ed8c49e2cd64a725cacdd4169f196498b78b1569cc362ed4e4a87b74d3ae8626d620e8bb5bb280dde3169d056c48bb5597284a3c6675fdddd9403bf6b70e0aa3efe1cf81eca81dfa31cf8fdac1cf85eca880f0c467ce9d388fb28e11f1a84cfeceb4ff8fd26e1105db06f7f9072e1014aeb8f0c5aeff1a9f58326e1d03d025f0d08d43df210a5f6c706b53ff3a9f6c314ec4f4c690b466152cf835be63cba49ce545b27f39d5a394dd45dee542e4718170b77574d77a96ca973b55c2ea25d2fcf75be592ad6a8f1bff172fc4f2fb3dd2edc0dd6f2e4f8bbbb893a48d928a5c0e2eb0df24a9d7caa0249368f3056aa91523c26e9773aeb1e2a823e3544d0ef7c46d02394f01f1b8477e9e74ff8a35466f4199519fd24abcce831ca889f9a08f934e2714af8cf0cc2dff529fc09937048ac9f679219a5e8ba7ed220b8506e78d534fbc6256fe293db7de37e6ee2659c82039f7c4cbd6f5c705da9e93a4f51bef48529b5f5f7e74b4f9b844311f165d022e2194af22f834afe3e553efc2a13ff4f91693e6bf27fb927dbda26f1ff20db6ba5f6fc5f67ecf95f49cf1f9dc2f3836d02668e89e728e7f94d50e7799e729edf06749e17a864fab52199ae1fe02f99be48690ddf2332ce7c98261b5a15728583696d4c9eac2ee5f99cc6f412a5c7ef4d7ac0f61cfee4bf4cc9ff43c0d879858a9d3f1a62e7739fb1f32aa5f53754ec401a59afaa883a3e2a1ab78ec87692d96b94917f3218f9e5407f46fe8032f2cf26232105eab9116e7d3671c69f1fb35ea742fe8b296468edbb9ff9286cdc0dbcb0717f95454e8228177e67cabc4169f0ad4983de460de6cb5ff57231ba5bebcf6e09d29b942e7f35e9d23f435d92b78bf6a3d35b94e3fdcde0782d06f973bcb72983ff1e304f788712fc8f8082dfa504ff33a0e0f74c8281f3bf0c9c87f9e4fc3e25fcdf06e15ff914fe0185e4bb80483e340986dce73f99084ed118faa14930b443ffdb78c3d30e85ef52fa6f877e446187ddadbcd89f1bec0ffb8f2823a06c361ad12c968d111f534634371801fb34fa31e2134a780b83f0b143fd09ff9472cc963143760a0bf39608bce348b9ac63eb8c3c5f8c9205de46f53771427b9e3c738b9fb17227855a59eabb596e9d9cf09e2733e6f88a62b75309d6c66ef2d40c7438d099e416b16b1bb3f33c999997fb9c8ef8638a452b130bd8400a6f5be6d632e3056c7c75ef56a96195882f4a75f5039dd34928769ef6bb08e033ca615a1b1c66874f6ffc0995a4da5049aa6d5649eaa79411ed0c46ecf669c4cfa8986e6f8a69580660ee225da93a57611105b42edcdd6e52c5697ecabba3e4145ab75b35eed78929a0467a86ee424dbc572ffdaade908ad6480df5f702e2b26b54ebd48f7f7d6ea207add30eb180add39f5391ded110e96ffaccea7e4109ef64103e73983fe15f9884c3064c9d63c1b6c8fdd220b8506e670fcbcdc2ef9459a1327370a5921c77cb748919b6dd921becc3e6aa3c1ae5415523fe87d814ab6b0cba81f8b4a03a827e698a7db9edfa714d12fb878906351e532b9f807773eb03dd4c3e20f7824fb5237f2ef4f278422a77e81e4bf789805c284439c5afa88cac872123bbce6746f66baa68ec692a1a25231f45c75794f45e26e970c3ad441566b19bc76f284cbd0d98f247fac3f45b4a781f83f0d37d0aff9aa2d43793c2240592df5182fb0514fc7b0a477f038ef53e71fc81123ec020fc773e85ff91123ed0207c42be3fe1df50c2f731d5c47d0aff131599834c69a95e64b65f4eb0b9016e5fdbaa84d90676cf14f8331545798628dae5338afe4245d1605314c134a9e4c91a7e8cf9d6141e34ce86508db3a15935cefe6a0a0736a01896493eb29316fc370ad8701330287e0a7d01fa3b257f8449bebbad66b247fb09f11f5488234d21f632bac002e9e97adbb0f81d7f9efe4f4a937c932620016a877e4b827f194229945fdc81cdc3c2da9b24d5f7e253d73f47c5a0c72211864c1fc68ae0685911ec996459caefd513e4fe6d8a1f381d1383723451a54316ec6c7ddd80b79a25454d4b3a6abea31c60acc901a0f10a9336dd0cbecaf955af8caaf4e978ffa1c21d670ab73319ee465508f809fbbf86b00bf3e0e2665677f4fb21df31eacb8b654e11e826f399b2382b4d7025ff1f212e88f9ddf8bf50baf444f94658365049e27fa6d81b0c17c3dce868a9b2a62aab0ca5280635b2c418a8e976da5433fdf131f36647e974a0088a9821ed81ff171b1ca385760c6f02039f200288990280fea9124343be083a732074f873ca41f25772c5a32b1d5a3343688543c22e5d66c86ed6da2c9c61420caa3289500a88843891285b52854eb941731337f959af55a126a47aa1b7395d2a37d286ae9045b2f3daed22a9cb82e924df59dc644976a8219165a71f45bd85296d4047f994a01de52d29c9fb0695dc8a923c35a8e4d626c9d078da2f16fc936c6d4cc2a15eb07fc09e8db6148f0382f26847493e30a8e4f694e483824aee40493e38a8e48e94e469412577a2244f0f2ab933e57433023a5d174ae5994155ee6a920c55fd5999a89cea6bee94cab383aadc9da23c2720e51e94ca7383aadc93923c2fa8e45e94e443824aee4d493e34a8e43e94cfcd0fe8737d2995170455b91fe5730b03fa5c7f4af0a280820750a5ebe21c94ae0329d0870505bd8f49323cbf24131e29e6af0d320986e7976622f82b5a701e1583cb02c6e0604af0f280828750b1b72268ec0da562eff080b1378c8abd2302c6de700af29101218fa0041f1550f0482af656068dbd7c2af68e0e187ba3a8d83b2660ec8da6201f1b10f2184af0aa8082c752b1b73a68ec8d3335e98789269b1a621aa2cbedd490d24ce2622c4dac808a8b3541e3a2d024193ab2cb325179302db888f2cbf2807e399e125c1150703195f6d7064cfb2554ecad0b1a7b132816eb03b2984809ae0c28781225f8b880822753903704853c8552b92aa0cafb5282ab030a9e4a355b36066cb6ec47695c1350e3fd298d3705d4f8004ae3cd01353e90d2b836a0c6075182eb020a3e9842511f10c5344ae386801a4fa75a865b72d0329c41e1d81a10c74c0ac7b68038665159dcf6a059dc6c0af4f139003d8752fb84a06acfa5d4de9103b5e7516a9f1854ed4328c92705957c2805e4e41c00994fa97d4a50b5175092770695bc904ae4a7064ce48b28c1a70514bc98127c7a40c1875182cf0828780925f8cc8082975282cf0a28789949308cfc9f1d4b33f2df38b9dec7c8ff725368b012e21c5368fb24874604d99d0e720595a0ce0d9aa00ea7249f1754f21194e45d41251f49493e3fa8e4a328c9170495bcd224199adb17c69227e548fff00a1f4fbbc7d194ff5fc4e1ffc750a65c9c03538ea5845f9203e1aba8e8bd3468f4aea6ba5d2e0bd8ed524ae5999707cc33d75082af0828b88cea76b93260b74b39157b57058dbd0a8ac5d50159aca5585c1390c53a4af0b50105afa7205f1714722505f9fa80908fa32ac9dfcb41257903c5e386a03caa281ebb03f2a8a6f2a21b03e6451ba986f04d011bc23514e49b8342de4441be2520e4cd148b5b03b2a835082e1cee9cc6e00393366cfdb8520d8de46e38e5361333e37cc9db63305fb250f8d9fe311b7da9799475a66887d8b9239368bf9dae9ad49b04c3e99db1e42517fa9f9f25170d542e79570e72c92d94f0bb73207c2b953bdc133477d866920ccfdf9b496ca61876de6e120c4b8feecb44f068da4d8ea704df1f50f00914e4078242de61920c2bf41ecc44e59db4e01329951f0aaaf24954627c384789f1645300b0bfef9e4c98fc82167c0a05fb9180b0779a8aa511502c55b3164bb95bf993ddaaa5470d2de8c29160f778798d5bbbe6f24b3c509cd5c9c2cb9dfc6f6cc3bb8fd6cadd1d4be38fd21d50e622f63159c486631d55cc9e4a25edc78326edd3a8ae922738ba4a4ea77a339ecc416fc61926e1d00ff994c9949cf4439e690a127281a74d41423261f55fafe68fd19a9f45c5fb331cf17e3615daf739423b87f2b26773e065e752a63cc761ca7954c27f3e68c2df652ac0f29dd3d872d134ebce74bbc4df1ab317326e2bbd2833f2be49d665a20395319f4f55f45fca4145ff022af25f0e1af917526abf9203b52fa284bf9a03e117531d18afc50c2bd6670a612c67170ad8ea79ab8c605d3617c8b5edf39cfb8b1a3f5a0e57cccd64d39c4a781abb16387e8d703769f1f7b5c04b282b7f60b2f2cc462b973b0d7648746e02ad96bfe709f7b352b57233183781ce6b7c7256e3dede89bb87d62a1e4be5dd72476283b40be426d28b4b80e7fde941495a266019ed3a793791294eac5ede2b1c397e7740b89422fd3ae54f3844d7a612e71d97568d9329ae727c43ce8955d62e53fba97bb58dbf4b5fcf953f5d4659f986c9ca033d5662e6ae9db3658c554b1bbd5a26c610be932aade0b7fc58763965d99b26cb0eca28fea6c9ad94e2b5b3e03117bfe3c7b62b28dbde32d936c963db02193beb956570b6adc92cb992b2e46d9325bb42cecfe2efc06eb1ba15578e36a1aff3e1e5981d6d0594250db29a81733da860e52e6fbb8aa2fe8e89fab48cd2c67ce17e28d1865ced6acabe774df6cd67f42ab8ba59060356b9d5e14a1974a5381e35de7211abd75056bf67b2fa809456d39a2e91b6b8bb26bb36ead218ae962942c9e922fbd8bc96b2eb7d935d47faaed92d957712eb762609546f4e909a6036f17c1dc5e303138f434329b3b94bf3eb299b3fa4ea29fe7c40fb306cd4562605e178f6eb117e2cfb1e65d90f4d964d252c5b2ed36795aa9bb84d6ddd6a59a1527179526cf0b4516ea02cfac864d16cc6dc57c7aabb0fd91ae17eb7287796eea62cfd91c9d2fd0535186bca29122dc0db7e0293b932966b656ba8cc2971b7e7d0aa1b29ab3ecea44d90182eae212c97b150eb3c0be9705d8ad22f5146ee2cbb89b2ec13936533d2e69c99b50ae83c34559b35db9cf266cac64f4d362ef49d53ce319496feca3fae9cf416caf21f9b2caf606e4bd4cb8d7661db4fb7adb042fa7e65633e949bd67136f5875b294e9f99382d6fb236576a42c139dc4671f88989c37432f786b6e11ae7219d42dccd5e5397b56649b98ee9db290b7f6ab2709e4f0b0f971ebd918891a6b0f70ecade9f99ec5dc2e8d97559d43c7241e04e8ac0e7b9aa91b879db34541fe1b7ea2ecaaa9f9bac9ae3d38f67895a9953d75ae1c37753b6fe82ea9bf11b83b3e513c9dee8cd5f3397ebc7be7b28fbbe30d9b75f803a73bd2c796103c8b5aa854b5bb52ce9593f36dd4bd9f4a5bf38f3fa27fe226eba54c65952de47d9f74bca3e3f753c5cafc47761ac2775bd385775e6fb29fb7e65b26f9848dd1fbacc21cca1e5039496bf4eddabe927169666150b9cbef72065f55726abe9efdd2f6b9ca480f388f8f707a1ec6f30d63bb31bd97888d2fb3726bdf74ddbd69c274745a1dfb54a7e7d6e96a8969bdc26b7fc53c540f66de787297b7e4bd59653a711e807582c6b9075863a4426a32850f35a9b430bf750167e9d49ef807954649ef43d18012855bd73c9f115e6c8c823948dbfa3fae632e901c9c4caec728cec2d7d94b2f4f7264be766149bde312e371d6abb9b325e1fa3acfd83c9da23d2c62bef9800f768c1e3148d3f9a6894a52833bcb5c2c4523271aee63459ab5e2212a765d275cec4cf0f524f99be4a978b72f5098ad13726462559d52674290b9fc2898face4ceeb9fa46cf893bf7a77721b42e76bd56a4bf932f9161d973c23294f51f6fd996a2b655bef763d08fa3166cad8aa97bac2f942a97772db187fddc28f4d4f5336fd85ea7dcc24f5b8b6e8f354ba667727b334ec87c33314876f4d1c66f9cea3740f545563ba5baa8e99db938b7ce6fb949d7ff533be19cc8767e7d4839fa52cfa1b35b32cb8452b640ed2205b2a6e9958e6bc5f2ac79d1a0cb32db2b5ed39cab6bf53b165f6a3e4c5a54dd537f33c65d13ffce537741961aefb66524e845996bc4071f8a789c3681f1c749cea6f7de5aa16f722a5f1bf4c1a8f485ba78dcff1a89057610e646edafa2f519afedba4e964df79b9d67c93ccc7e2a3631ce9e565ca96ef3299f74cb5106759d63a7c85b2f23fd41c2a7ff99c9b7f27df4dcea9f577d6e8f84c96324d8e5840b9e1c7e657299bff6bb279b82766e36172a7a6d7283dff67d2b3d8a327ce9fbc3acf513a67da1ecf768ce3079405a299c182a31b6b08b91f87d4bdeaa96622600fcc34e5e977fc50799da2123351f1ce2bd221fac955e29651292e37b9c91b9465cd4c961dd5c4f1ed279eb34d016f52449a9b8878fb19fdd6b582f734651ff76f5196b63059eacdad66c8587563b01e8d1fb95e30494c48639f292783b7fc58f03665414b9305e6d50010a69f9489eda3aee72a86dea1ec6b65b2af5e64df5ea356f5fb9df596ee9bacb992e787e2bb14c5d6268ab37c52a434f4d67f137b5c39fa65dea3ec6c63b2b384ac199afaa7e22b25368b5ab9f26a9d7ab7c1c9df4d397376adf8f7291bda9a6c989354878f87ea7ff562e63d6ab949dd1f50b6b633d93a97c52fbd5b31d07e69eacdf763ed8794b5ed4dd69692de69d203c7f502b5c2a752f67fa7ead1308f4f64dabb98ebd4fb438a4f07139f2901f27aefe80f87351f51d674a44ae66cad99e6d4415ccf86114d786aaeac5bae735279bd9c87b4403e5721c7eb73954ffd88b2af93c93e7f63017efdd8eb9b618e057c4c71e86ce2b0320b0ea6350a414625f953f22714932e2626f393ca306f3f54fce3d05eefd51fe7a65b45d487a553b5a4b2eba3f994b2baabc9ea74b36cdcb85fea3cbc46d4ab92aca9d7aeff98b2b05b26ed2533e1ec7a77d2f74bb776fe8bc560639559528a3b67a946be037d7985a39c5bb1a2c67cb7a0b19d5e90d0a68f5f87f0ab9dd880baceb2c616797cd72f4a42f7666e7345fe1b1903b0f5aa31105b2bbc1bd7cc90f2ab54dad3de5a2009b9ab7660fca840cc57e364de3de4282b4c7d1305a877025b97dea663882d7562b1d6ca222dcb210d03127b9da53d205607aa586d5638066c1c93a537a5d7a22784d6dcec43bd93c8e2d461d2dd15b0508df9c460a3de553298c5b299402f204f1bb2f76b84de90c74901ba2d9c56dc72940598c4f595eee61690b5c29de0f59923b375cb66451019bd38b1c1a6533365fb619303ce5d0da5cb1c0a605d2410c2d4778db03727c22ece896e88cd9555dea5aa220b02cb1d161b2201ec813671607d3881f5904975952812f159225106d7a57d1c5c5f4e70dd0ce040204c3281a9cc0df26a7924a0ad167168fdb8bd2d3179c26c1c7783c0f2c6b512aed745015c7e8738b8fe9ce07ac9fa685dc6c54214e05d860a85019cf0daa3a4ba48e071b348601a10c7349013535b8429be0c320a8844ef38a27d3811759688dc91877aa71de1f6752e77ae94abdf51c0b567681cd7204e5cad24aeba4865e92d3ac6e1e471c281fde517353691f46c2e77adc512594636c85e74281517ab119128001c3b300e703027c03628bf023561825b1400cded160734843b43070f9b81c6eaa25121fd16957943c3f221bd85451400f5e81107348c13107cae45d7d867896dd2ea86c66a26ac792b9795d025d2c3caa5bfc1d84a1420c23f0d71382744e8d5c3f0a0470c36eaaa68fc725279c4ebf23d501fd9084e941d559ea6fd6dbb2a3197cbe67614507541e5e3c8b01adbd076c4930475fb314a35b37fb48e83cbe76e6c6370787f1b775d278c00c577f28902bc1da85f6c1427bc0ea8448d6f61e26eae1305506351ed6c34775b32ee65ee78793cfb8f8a5f6d426dc931dc3dfb0b646eb5c1b321212cf0ab95214501d8ea66716063c3ed6b4d9c255e1eb1ecbf0a0d898ce3efd9879ad74c197494eb65afb58c432be0f6b659723cb241061e5fe11fdf1db4cea9f2c2dcab2880fb12812be404d70925d3a88e1fc1a4170dab887fb4d29d58e0f6c146bbd9b43ff2b2f1dc9d8d4b1c683344e69f218802c0b3659ba0754b8f70ef1aa2ece706f9a34ecf62ea2cdc2e804df26abd2a7f1366358d751eb14ef3623c2b293febeea0fcb4f95c7ec623eaf9be4743f3b39c5a939f51ad333f60ff4ebe8ff952f9beb2c0fc8ceb32f9be0af0fcacf2937c5f3d12f9be2ab0f919cdfcc9f735dd25df77478049677a82437ed2f8587ecad673be71c423dfd8879d4f8ce6e6a7180ccf27060cf2d374bae5673594959f4103383f8301d7f8b45cf374da2298965bf2fff98cd92298313b0120c09711e19f5be798c85de7004f7327484339907ad3daf14ec9efd16140920e891f19d5750b93366d136a1f9d3231309b1a485f348b65924d388b2389731ec239d9269c2591c4598e704ee1c439d68033176b2ba1a062c30e1b65b2603f1361df97bb577495ca3b13f1bba5303cc686af3b17be5f8a38bea9616402ebc86c00abbf4a4c1493f87076e0ca041e4038f7b309e78448e2bc06e1dcdf269c932389f35708e70136e19c14499c6f219c07da84737c24712e43380fb209674924711e8f701e6c13cee248e25c87704ee3c4d953e12c539d21deedb45cd5ddad9a182bec2db940fe1b819cce3d155077bf65da150acfd7ca67a3d7009d8dc0cee0043b48e0bed1ccc706a20c7718823b937b465caace122c0e4a7a3694adb95076462df659fc4b88a076197a7b9dcd0f1f447e383b0c7853c287f70b2e784f22787338e1f54e5386272662d6b6395b32fe078239d72698932308f39f08e63c9b604e8820ccbf219887d80473620461fe1dc13cd42698c51184f9270473be4d301907dcd860fe05c15c60134cc656391bcc5f23980b6d8219c516ce5708e6229b604e8920ccef10ccc536c1dc378230ff83601ed6b4dd18ae28776b57c61c733cd7c8f9e9a81b630927cad10a6595f35095c05f96c3733bfccd016145de9dcb7b3722e44b3991b793c8d7cb1998ee8cd075125ef4fa8b3aa004bfac29137ce2f73318bd6f2717ca5390f72de744393229c1974a61b385fe68fa74e77ff0ce2db267bd41a4da449915365b41750082bd220cbfcdacd48f22cac1280b389c13e53e862c20d34fe5b1a21dcc85b61079e9114deba551af4efd0f79e991dc28a7c9b543356ac5046c2f0ea3961bd52a2abd8ec45d9d13bd32bf05427954181bb38e77feaf568197caaa125c0d61a4882dcf3c1d215c1906c2c97b1dc2ef238447f36f81ee4e47d0c7695205f7eb6e519e76f03482788c4d6b3458a718b2e11c89caeb636dc2c93a278e0de7028473954d3859676cb2e1ac41385773e21c2c121b98ee77d4fc7d698cb3ff88ab8eb91c012e0d67ad5051f8d367fa71f9e787a8305a63cf1cb828f6c38f469e5816064a3c0976bed3ca99a35690af755eda164615890de50ee495e5fce343b83b7895d820d14d4f584f39db395638229236148a4012ef88605684d157542ff7b9a86b1cbed00bf0f5d1d4d3399e73ee071bda9b10dab59c68877b4af72d02be9c0633de670a771705a824c1f96c61fafe5ed47b928e4179eb3a4ed0233206bd50d64cf73ed42b11eaf5618ccd67bac688b14ec0b6c2e860944154da049371d6081bcc0310cce36c82c93807940de6640473834d30196727b3c11c876056d9049371de3c1bccfd11cc6a9b60467189eb540473a34d3019e780b2c11c8960d6d80493b19ec906732082b9c926988cf3e6d9608e453037db0493b155cf06331fc1ace584992782edfac55abeb3cdf89c891a98754d39f9db3bc2c4988bb28d2f8d41be5a6f134cc6f29d0de60404b3218cb1a422d9c3542ae72585363b840d5f7f846f0bf797de35bee489b4202cbef34794a7dbbc8d806e0deb6bdc7bd78ca5d310c26d61209cb4d7213c1021dc1ec68c90c4cd7d4c3b5b4779fad7e708e7f176d72e193b89d96a979b51edf284b0a628c647e1f14032bb8fb28d6b9e8a7c74873d2b35a2b8d7c24108e58961558ad27dc921caf9e77e08e84936ed813825923d477f46384fb609e7c448e2bc1be13cc5269cacfb81b0e1bc04e1dc6913cec991c4f95384f3549b704e8a24ce1710ced36cc2c9fa2d18369c0b10ced36dc2c9faf112369cf508e71936e164fdb40e1bced508e799dc15f9cc3e50b744aa069fc863acc82fe0023a09013d2b8c6d4f9be01b2f83b9e06d42f0cee684d75f64ba0140e26e208c9365bee282ba0ef51d9d632354c60e1036a86b11d4736d84ca38e1900d6a19827a9e8d50194b7836a8c508ea2e1ba1324ea661833a0a413ddf46a88c1315d8a00e43502fb0112ae3541a36a88310d40b39a19688e4418fc495723344fc43b5ae21899fbd4dfc9676fc1bc4cb648d56f7fe334642095724e48978245c64cf7ae4286ee63f18f9f3c5f6aefb649cc2c8363efa23e4a597d8b37f2deb062e6c7e7a228279a94d30a3f8d189f310cccb6c8219c58f4e6c45302fb709661427426c4730afb00966143f3a5185605e6913cc287e74a21ac1bcca269851dc9976098279b54d30a3f8d189a508e63536c18ce24727762198d7da04338a9b5d9d8f605e67f72ce6287e15a12b6abb5fcf89b7a3c2ebee1b56255bf1aeec4acecdaed8be442c905f7e2fec8dd133eff688e26657f9c8276f086b26f302d9a3b9c1d3e3097b31d5ca10a33c93791fe4abbb3981764a99c8ebf8d0b5e342d70ca1bbb1291728447f1f863e08e54d612c7a858fdcef3d8b5e97237c37dbf1250e77f46893f458775c88d533d93eed7c322a706eb1692b6ad6c6249ba7f642386fb50967712471ce42386fb309674924711e8570de6e134ed6cf95b2e1bc00e1bc8313e75091bcec7096d82660264883d033951739af970b68952f9160dd8ff254855381efca05b9372afbefb46986fdc448eea2782fc279974d38274412e7a508e7dd36e19c1c499c3f4738efb109e7a448e27c05e1bcd7269cac5315d8702e4438efb309674924716e4138efb7096771247196229c0f70e21c2092bbebcc9d242b843b57194495f07690c0600e0bd618aae43f18568ffc5259596f70244f13f075cd156a6162b9703f2815e51ef935c84f1fb267f6711427d5f443bef97018a3ed7a2f4577a9ec1ad982d70f457d0bb6b5c82ff784b154b6093e71c6066f1a82f788bdf3e019cb75b621e17b10da47c3f0cbc9e1fb251bbc2710bcc7c280b7ef5e94a83f40f01ee784d7d339499c55d4e0a8010977864ccc200cba8babe4dde879613704f2094e904522f1cb5aa5b2b47677a65b22fbdcebe5b11e6d70b1f77fbef40c544d7a92bf9ab4deb021e052874999286bac6a34486fde1ec1ea7b7be4cb4fd93bf98b713c892d9b188afcf4697b76048de2da8d02e4a5cfd831636499ac076c94c91fc455f3a21dcc85b61a79e9f76d1a44669de4cd969f96209ccfda84b33892388f40389fb309674924719e88703e1f46a772fa7c746fe8543e1a617d218c8ebbccfa408b23b9e6a80ac17cd12698515c73b409c17cc9269851dc75610d82f9b24d30a3b8eb422582f98a4d30a3b8ebc25204f3559b604671d7855204f3359b6046b1e57e1882f9039b60467180780982f9ba4d30a3b8ebc22204f30d9b604671d785c508e69b36b5d3590789d9dae90311ceb76cc2c95a3d62c37908c2f9b64d3859677ab2e15c8f70be13c60722278abded0391bb451ce1bb61ac354adf110763f3894b60a739426be5283e6bb7dced5cdd7275c84fdfe3843c50248ed357a8c55cf1255c89d9009e9dccd9dfc9e5bd8722b0ef87b1938d06abbf5c9c381a9faa3a15c59ae9be08ef074d39701cda06d53bb950fe15e5b31f72a21c2c51ce83469a0406fb846c51afc7bd7595fa90e474b92df506757fb673ac70c4326e1ec45617688b00ff308cad30c6cbdac0de3227ef7708df47f6cc9e8f62aed906e59a3fe244d9230d4a6d29ebaca5d15c95a6e311c68feddea58eb173996d97ba8310de4fec9d59cf38d6c936dfee5b94977e1a460640559be21900633eca9601fc0b61fc31f73e8a8b5587885e7d344f7a2624fbe85585ba20709f356d59ee8aaae22e84c673f9e0392897fc491849b9a8313997cbae113d3f3eda1bad3d833cf2a7dc431c006ca60cb849bfbdb9980be61404f3676124efa2141d1ed1eefd7c07a1fc3c8c0ee4097b5d07f20684f0e761f46d8237ce92d59d06a9c47ce7953299c81789adb2cbb8d6b90775cd4d22caebd9f745607f61cfaa8d284ef19a8f507e11c66acd09e1f70cb1f9610382f765180d45ddc70e234075e428d1de305d7b19aa5dfe328cf59b3889fbe9e270d718c53b8a67aad59fa134300bb9f0ff1779f6af6cda28680a675b896da3a03f229cbfb609e7c448e2bc05e1fcca269cac9baab2e13c07e1fc8d4d38274712e72708e76f6dc2392992381f4738bfb60927eb76e96c38e7219cbfb30927ebfede6c386b11cedfdb8493758e321bce6311ce3f84315501da477bcf573be6207c7fb469122deb5787d9708e458dd06f6cc2c9ba9c900de70a84f34f36e12c8924cead08e79f3971b691022a9c7cd21d3502c97c3d4a5cb85aa1bcf12f9cb8460aaa4749cfe770a77157cbdfd071d72045ce9280c1ac65925a0813bde672c12e41b0bf0d67ca6171f81dcb6cbd9f5f227c7f0d63f00d468ee608180d8231a37572f8ad36d263446721847fb367d6661477fb18810a9abff36f4a097960b9d0d3b2a9890a8c9f77642b82da209ffc87bd130ba3b891dff710da7fdaf315ec92486ea2f22682f92f9b60467184fd5304f3df36c18ce2262aaf2398dfd904338a9ba8bc8160fec7269851dc44e55504f3bf36c18ce2262a3f4030ff6713cc282eba7a11c114cd2d8219c54d545e42306336c18c62c3f2c70866339b6046711bc99f2198cd3961e689a08b0219db446c8b02a7a14e90169c787b1af06281aeea93e4445ac6e2a82517c89310c8969c20071b40babd99d0d1b1511c22fbdd37a51c456704cc3686de1c6504ad3801fb9b1d1fc5e6663142d99a13a5ff799b8c45149b673e8270b6b109e78448e2bc11e16c6b13cec991c4f97b84b39d4d38274512e74708677b9b70b2ee9cc086f36884b3834d38595b4b6c38cf44383bda8493f51b066c388f43383b71e28413bd2145f446293b234c9d6df2ba299c7dee6c5ef70dc2d9c5269c132389f35684b3ab4d38274412e7850867379b704e8e24cecf10ceee36e19c14499c4f219c3d6cc2393e92380f41387bda849375349d0d671dc2d9cb269cac5f7861c3b90ae1eccd89537f53506f54011c1a048c0679b780f6aec160ec69e7db4d0e0d65f4e1c43ac283758d489eb799f90c4f46d46c2da76d08755f4ed4ad24ea9ac6fd92a23752d91525f67edc6df185320133621acc85a93bc2d49f13935e633145ec6d1b9c3d8f100ee044e8ddffa84ee66850a8cc56f02a8ca3e4d1fd7cc36c94df0d0c631037b3e52b519ce69a8750ee13869766b7ea8271520c5ba9fc4394010ce244ab778f1beff1d510724f3678d311bc3cbb276c31ce2166ab06ed8f92fde0309a90782f5853128f7659ff2ef2d6219c388779cafa2a8117a49a773c9ca35e0eed633863b9308f435e3bd49ec95b519c10bb1879ecb0303a3d70fe9ad9ce9c8c7d496c6bd3cf461e3a3c8c624b6704909f967bd607ef7d7d4a2d11de1161145b54c53f790b1f466f65c3d91be11c69134ed68e64be0da610ce7c9b70b20e73b0e15c85708eb269986322e7526bb6618e8750893fda269c132289f37a84738c4d38274712e76f10ceb136e19c14499cef219ce36cc2c9bad7211bce150867814d385977fd60c37912c25968134ed6ad23d970ae47388b3871c6f7936b82ae66b6bed02f10bef1fc5d21f354e7477cdf2e77fec7def661e55e086b7118c31f10f05a99c0b5ec8dea91e875cfc510bc124e78207776442729f440902634fdaa735dc189de78fa00d4d29e680bc8284e4c688d404eb20524e3f8241bc8b908e4645b40720e4870819c8e404eb10524e3441936900d08e4beb68064dc36820de47108e4545b403236fbd8409e8f40ee670b48c6895a6c20b72090fbdb02927152011bc88b10c8036c01c9b8f71b1bc80b11c803ed99e01ac5ad47bb23940771a26c2be213fe43e8b7616b5543dad2c00ee6eeb7897fd60314ad931cd6c98dec6b38bb24d8a6ad7642f0a671c2d35f358f4fa7364faa72bfc00b68d74a61d5bc2d6b36afdc8cc04ee7043b54786758ba9356e36b29402024f2d49302a3b819ee7e28af9c11e64a4817284c63858c60a6b1348feea68ef508eb4c7ba6ad467187e1d1281b9815c67295f4d3564d392c235ab61c7635f2d2d96126fe4a47891522fe95492c3cb439eb3bb9b0ee4058e784310c3631fca159b6e47e3f4aee73ed9ca5ce39de1363c27a1af2c9799c587b1bb0a62a90a2b84ffb0c04f3109b60467159ca4204f3509b6046f14b555310ccf936c18ce297aa0e463017d804338a5b874f443017da04338a4bf82721988b6c8219c5eee2f108e6629b6046f14b551310ccc36c8219c5ceb93108e6129b6046b11fa908c15c6ad3523dd622886daeef108473994d388b2389733ec2b9dc269cac9ff264c3b901e15c11c6fa089876b005f56886b2b9091bbe59228eef704e7c309f7bb173e2ee8909a2363a8faf771eaf915d71f80be7d1c3d812613c8213e32011df72c71d52834527758e3a6592078cb84f13b04d04f46b963a022081970bbd86a23e82700f47708fe4843b4678072feac42201a3f0b0050fde1e6aaefc821ae49b35728863efdb8de35494af1e65efde718c2d27b67924b7217f5ec99de7a6aa01684b593d7434d740c776e4a147dbbd8b1c63371edbcac90311de63eccd00184795d832809fa00ce0584eb4a33d05da16595c95495fad9135d86a5927a8955797c86da62a6515cddb2be00659c59d598ce7ca2c8e45debc8a13f960897caecc1296880a09bb526dd90ba2f4e4b2bd6d45703be4d3abc328d4a87950336426c1bcdbfb442e3f6d86fcb4348c8e40dc90d0adb2783b2dda0d877ec827d78439af7413aa032c179b329e6fc2b92c96cb63cf421e5b16c6ac68ecb1e9f3d9e87aef5ce4bde59c60f536fde081d5626fdaa6ff3a84b0c29ec9b9519c6f722842b99613e5101f2897ca9c16f2d545ce2fdd7d58c79b934ee6ca499ba39c741d27e2be49c555a96c7ded6d4b1e2a10d0f59c408b0c3eeba787c09d661e6f08cc9411528a3a6818c7610bb9fc5920fc9536ed043685d39bd97602fb03ca818fb309e7c448e2bc19e1dc6013ce0991c47936c2596513cec991c4f931c2596d13ce4991c4f918c2b9d1269cacd3d5d870ce44386b6cc25912499c1b11ce4d36e12c8e24ce6310cecd61749c14c9bfee1126632c156eef5474fb9eca11c25a7bf62889e2da92e1a81554179637ba0d5110b44d796208dd785f71217c1679637d18634b80b0a271f7127d3beabda12f238c0de18ee8efed1f2f1b80d06eb177b24414bf7f7d2d42bb358cfcb378af1b061985106e0b638ef478d10473a4d966420d45f8b687836f82a7521465effb1ae13b3e8c290d990dc215477218ee0e04f3049b6046b16a7e2782b9c32698515cf67d358279a24d30a3b8ecfb7604f3249b604671d9f79508e6c936c18ce2b2efab10cc536c8219c5090a1720983b6d8219c565df572098a7da04338a1b5fdd85609e6613cc286e7cf5308279badd2b9518133e5bfbbc0fea613f238cf6f9a4a6e8de601beb390179e79961f4ae8f6f4ceee5c2fd581efc8e3ac6e710c6b36c1ac49dc85900b10de2ee4138cfb609e78448e2bc01e13cc7269c932389f3b708e7b936e19c14499cef239ce7d98493757d311bce9508e72e9b70964412e7c908e7f936e1646d5ab2e1ac44382fe0c4a9374d2fde8b06d36a10bc0bc35886055361660ad8a56993d360ac50957677f1558514a8bf741ddfbfa92ed273df4620c417d9b4411bebfc0d369c3d51ebfc629b70b27619b3e19c8c705e62134ed6a9d76c388f44382fb50927eb2a20369ce7219c97d954559ac8390ccc5655ba0f154597db84734224715e86705e6113cec991c4f90b84f34a9b704e8a24ced710ceab6cc2c9ba6d351bcec310ceab6dc2c9bacf321bce6d08e73536e1649de0c586b30ce1bc9613e728e1ddeb03daf2e50e0f586da1ed8c2f71a1c6dea739bf6ae57031eb0a8d17634cc077a19ae9759cc0f5e7cba9090d89392b1b48b6cf970f479e7bbd2d2039374ee302d91781fc9e2d2019a724b2813c0381bcc116908c1365d940162190bb6d01c938179e0de4c508e48d616c3ca54bf70672f91fbd0a7386f344b5a34f8d3c0353432aeb6fe72aeb6b51597f5318931733edd4631cae63ebd2eb8660de6c134cc699a06c307b2098b7d804338a9dcd2d10cc5b6d82c958ad6783d90ac1bccd26988c152936986d11ccdb6d82c958bde7db591ec1bcc326988c35533698ed11cc3b6d8219c56fcf754030efb20926e3ca7636981d11ccbb6d82c9b8b29d0d662704f31e4e98f4a6fcb39dbf95c2fdfadc324700088efea6fc478938d87b39c10e9060e73b0f94c9197678b156937d3d866d09576b84f53e7bf69b8be23e0cfd51d2bfdfdeada818cb7bb6ada81e455efa80ddeb38195b4d6c99c054e4b90f72e2ed8e0aad2db2508259cceea752435a86b8930b6205f2d187c218a7c7253f555cb197f76c3e3904e17c9813e75491d8935f23ccdf9d855a69b9cfec80fabc046bb7df635cbdfb3b5136b1278c022e3917cea4888be25e8bfb20b48f84510da3060013ab6151dc27a710651c8f86d102cba61ac63884c2e6a39723b08fd90a368a5fa5bd08817ddc56b051fcdef70c04f6095bc1323618d8c04e44609fb4152ce360201bd8f108ec53b6828d62056b1002fbb4ad60193bbcd9c09e8bc03e632b58c6611936b0a720b0dfb7156c143b138f44609fb5152c6307381bd82310d8e7c2d80e6ea26882ede0d8f0ed44f89eb7a70f208a9b682e42285fb0697139ebb6466c63af05a877ea459b70b2eec3c386f37084f3259b70b2ee12c5b78d26c2f932ffcc80449ce699fd2b84fb4d251055c2db79d295abb7ff5c89b5754b8ff0d949c267481faa5226eb8d880ac41c51216100e132e77cbeac04d58bd54e2eb8d2f9cf5f5c1ce3fc67ba1e93bb4dcd12dbc4267915e4954bd9d5ce5dd0ac4e14c1e7a75e01d768a75c235f1682d31ce610494b44850c7dbb582adc8d9616397ff53c9a0689245feea2bad8b9d62060c80742d8e868b25ed44a8b133762ca8fb5919cdc6f99d52a17c957baeaef9bcd53c56fa56373a972977c897bb14a99f9b18ee84c0f95ce9395c73aa9554f791f0f3cc15214d06286703f4557db183f5afa4299e2e10c92ca6cf5bb2dba139fd2022e108b7555b10e162f90b460304c7f2b5deb5538ce792c36c9f9e356740b1aabb8056ab14bb53ad3d7d3cb84384f2ded5588d89839cd57e5cc5bd359e42630787fad1cf2ab9052e7a5b534bd7db4e77748112b850510177bb3fdaf41bcab68976eda3bd6def9b5dc897957387cdfaed6f90d4a355434132dff1f5a81bbbba97b0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/cd57870fe56735e48851d8a49df54c5a.asset.meta b/Assets/SerializedUdonPrograms/cd57870fe56735e48851d8a49df54c5a.asset.meta new file mode 100644 index 0000000..4936094 --- /dev/null +++ b/Assets/SerializedUdonPrograms/cd57870fe56735e48851d8a49df54c5a.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8f625373fb7757a40acedd7bf6daf9b0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/d0a19d57caeb67b47938757e7cb80897.asset b/Assets/SerializedUdonPrograms/d0a19d57caeb67b47938757e7cb80897.asset index ac35851..177119c 100644 --- a/Assets/SerializedUdonPrograms/d0a19d57caeb67b47938757e7cb80897.asset +++ b/Assets/SerializedUdonPrograms/d0a19d57caeb67b47938757e7cb80897.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed59dd52d35010ded336fd111011a53a70a1e385382209e0702fe00f8e02d2960b19a794923a75dad269ab83f75ef9163e86be908fa1df6e529a26694381205349a6e724e767cf7edfeed93d81884eb8d41c8a1ddaa6559aa71c1dd021d5f0b48aba8adb7a6bb76f5103f5479405f4cdd1bd80997c3d547750aee3ad492dccfc4c45d465e9cf9089e775cc35f1c6ad25fc4c8c52314ccad11a6dd206a5d5ed00113b32a969b729c6a5922857e82b7a4d518a17d1a52b8d22839ea6f455a1747bdc2e7d105855f41531a74115c8dc1789c9199e2b98a48ada7504bf14f7f3b3a644f3579055a03ae9dca91e0d40717b6630b92c3a1eb1f401cbbc6c0b30ea10e0833027fcb56889167d11de55a30ebd57a52c60445984c6bc4bfcf42cc1ca55709b0ef334d1fe52accb062aa3679edea0e6597bb400c2775d5276b06c052636298bb22ef2f6a0b67764102436a57bce36645a9e56454b9bd03ade2ba26146ca2fa2a929daafa3ad257e5f83e7afa03e92d5bcd81b78f65b336b53e6afa3bfc3f56ab7dcba6da635a061ed75f1c52b8bfc0b8b30f5f198bd0d633a3fa9ef1e4b5c716805194d02b92563c10aa55d6d8ba4f3abdaf6303838462f427fffb6f85ea6a77db1f833c3e69e16041d0beb3f1ebcfff5edf7a4d60d6d89f438439b0980d68f589637aba63c12fa43d0b498c18abae9577ef427b8317381f45be3ca326e7003c42533751b404de3750303b6f02b8bda4d4c2fca048e7cef6458f338266625cd31108fcd0c5e2021b47b936a90eabd888ff8119fbc68e283234d3fe293c7b83ac4f3e5cf60aa0783413af46230eac3a0c12a5df351eb0f2e2de5528b35d212b8951ac1e37351a301e59c4ea3f328650c707e63785528ce89370b0df6c54cc1a7b9913ea7b9d2b925f620149631787e494e7fed64e1872e1853ef434cc246d49605a6d970438794cfd471fb9b81223a1b593d3ea537056b31c6ab454ffa451014bc2c011bf2a90701bc8bf332bd8021ad60f99b90f1c9b69b9ffc2722a09dedcee103869dea19883990f8d4c4cd176f7197f017211d944f9ac9bcfb615c22d011d43b14724d8070ed0f76a54ba7f975a77fcf7a7ca4135efdc3a2c1e175fc3f8f7c0647be1bceaf8888c1944d84b99bc7c45279d929250cc91fcb2e03906bb5b39c58535dbb5c3b0994d3ef748bb89b611237651357b43daf8567a740a7f27932c2a33215169551079593615279dfa6d23a6cd5c40b5989161869e0fdb5fdd78d612338e220f85698048ff7dce4357b4868e425c2224f0d4f4a3738a5f35fb6e3b6fded7c396163a941e25bd90f05cc2d48ddc99d3a8770b54c831d26fbcb0c4e6c53ce84efb241e552256b3fa46749dca37daca2f33968a8f1a7dd6e9a96635d0e96b7849b38ef37e47f2c0d19a3fd05c9dd22295f1a0000 serializedProgramBytesString: - serializedSignature: c32504896931080b75a18c3d5dbe87e84d00d542d8800e77362a206709b95f5652dc3d9bba3a7ee511d3013ee3c4562f071678c106187824f1c0d31534df5002 + serializedSignature: d4c4b5b5893d0f559903e9c7fcd75ce12a570bf99fb1cf3c7796a1cd84643707b1176efe1e17cb22422f5b9d5381b7b4891191f878a2e72dcf3f9b84d7dab502 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/d18e451e2b012944899ec95f8a380e52.asset b/Assets/SerializedUdonPrograms/d18e451e2b012944899ec95f8a380e52.asset index a0fa36e..f1ffdaf 100644 --- a/Assets/SerializedUdonPrograms/d18e451e2b012944899ec95f8a380e52.asset +++ b/Assets/SerializedUdonPrograms/d18e451e2b012944899ec95f8a380e52.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed59db6ed340109d4de22485d202054a69b93f1004c2e622dea1855204a5b449858450096d8222252124018ac417f0037c011fc13ff1c80770666ca78ebdb69bb42eb4102beb782fb333e7ccecee382993f051d751acd232cdd20d2ad106bda3267ecde2dec0653fb9f54bd4c6fd2dca32daaed3859891fcb9a24ea35cc05387ba18f981d671af49fb0a55f07b01632b78e2da2abe15f452190c2ad11c3da3459a54276344accaa08e53a7d82e9547799f3ea3b5224af124a6344da258414b47da1a50daedf7925e89590db4ad634c9bea90f94624e6052e7c0d25da3d42ff32b5c84c71fdd501607447c603c8a2b3292207499eb60b555b10a0b1a2241875e936ddd25a31a5463d7acf4a59468f9a08cd07a7f811988295abe3aa7828e8a07e5e1864126a68b9414f70e751afe926407de993b28a69eba0b14245942d91f71a6a077bc699c474f9c72c43a6ed4d0dd4b880b6f05c170d57a4fc289a5644fb05d475c5b79bf0eefbb86fca6c41dbdbf8ad9bb3e840a6d751ef5461f5b6ebba34cdc11ad6de4cb39bfd67e44f30c2d067f34e18664c8e11f535c0c47f0ced45c690c5da96715320537d75b7c8e447b51c4070701b8316eafddbc6fb2edd89b4458f0cd33d2d166c31fce2d7b72ff33f8f7f37fa4dbb4d66964d9b89312d0a58965750a70212a24d308c8cc58afae1573af8735cb9b287f0dbfd6ad26f7002b2b233f513a08ee271111d96f0ad89da1d7a2e4d9dde3a1860c76251390138b87dc6291906714a07717eaf218e5f53a220cef7ecda8298ecb38e06c1911004e374084330ad41d0629a0ee99817bd467c7a71ef10e99930e9877743baa1639f0152a53f14606187d8680f18edd9b10586c9f8aba9c848099bed08ef99ce96493943ef4863e248c34d10e64c591ddd4cc8b8c6428b2d3cea53d5cffe5838fb391dfbec57aab8e7bb1b47dd70dc1fd3712f0e713a641b8a9aeb3839c912031642fc84103f8c74c3c8e1528a417e20bddb90e0dd054c763d65d1f61332d6a101d97c922e028137c2487c7a7682c2d3b36ac0b6614fea7156d898f1f8aaa473eee94f675dbc4de15949ceb1c89505a439320e9ca527fb97031faf0f77cddae18e48415ec6251236a11ed7b2bc0d3f4fb2f4fd6d9a9feac7d90d6a7d305a1cd493ff78bc591c6fbc68f692d194c99b97ba36e46217af1eefcdd9b41ef2c18fd0b68045797d0801cce91a2ede83aae8b2d6935d8332bed97692538d8828b787b11d53e25fa6313ff7a0e786e8dfc1653b72ca624ece2409dc4507387bcb6b0a74ac441788b4f1fcd87969b4d6378dd7a435b2920378242980531e80a79304980f3f65592f3e49a47bcf1789c13691146c390f6c3349c2361e1ad04da74b62e0e592024f79c03b9b2478877c3ec7aa56d13d31c8c69282ccf040762ee90de4bdefa54f51fecfa8ef4b5f4b7b803bbf97be5644b90911fbcfd7b21ec82e2409d984c6d7e6e4695dc4b47ab5fbcfef32649fc00f40ae6371173e1f650dc7110a31cb4461006a0ba1ab74b0c58da942e469c24e7c8e39483731e35339c895615959ee5b4990292f6aeed26087fd6899f129c0250653e9a3aabe6b1eb21b5997ced29d6460a311ac98fc9aeb40db7f997cf9f9a4e4e725306f0bafd03374de10a5f863fc067e006eb653220000 serializedProgramBytesString: - serializedSignature: 967e265dfd9279030c900c6bf85aed8418281b7a7a18314b15546e386f7b679281bf2daa3b946bfa6051e1fde46d9afb9c7dc7361752fb277ff56c2d575db607 + serializedSignature: aea013c4718b1aa28c96ab797c8a2e18ea70f4acb12d5d5968eb2630776486ed0ecc8cbdd026e0ca437eb5ce77631bbabf2ceff3ff1a43e42007584434ca9d0f programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/d4d68ac0fcade3b4483a4d2569fc2d54.asset b/Assets/SerializedUdonPrograms/d4d68ac0fcade3b4483a4d2569fc2d54.asset new file mode 100644 index 0000000..9ebe13e --- /dev/null +++ b/Assets/SerializedUdonPrograms/d4d68ac0fcade3b4483a4d2569fc2d54.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: d4d68ac0fcade3b4483a4d2569fc2d54 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c1547d7f0e70682bb532c140b1a47aab8b4582150a12d8424404a12688442dd95b6d48dbabb5177777737eaf2d45dbe9dd999dc733773eeddbd9b7333c3f7f6f93d6ceeca9973fe73c62d2d8b39ff454638ff2c64f3d824368a2d60256c15ab74fe9ae45c2b9cffb9bfd4fdb9accab92e77fe2d729e8d601909bee4ff0d89f470fe9de1fcaa6635ce97b5acd8b99689e7f359a9f3f70ce7db52e717bfbbccf97fa9f356a4a9f3d1023699cd61b359f748d70422168a8faae5bd08b72bd2c2f977225be73c2d154af140b2c4a3eece3ff39d27d5e25985a3b47a6f11db4b9855e13c2b76bea962e58ecca542628b8ddb30f107732fdde5b587bc7673fedf52fedd44fedd42fe0ddf4f97d79e3edfdf0a7cd712fccd095d14e7fb5eee3592e95c9b39d757c16ffeed37f2bddeaebcb4157164f595d77ef29a2165bee643ffe6f2da3f81bdf1646c0d64f961d6425e07caeb00a9efeb49863fd86514d908e4719643813e0341d82dc1737e6f5008db553c0ef3c4e330371ed3ce96f1b759be3f445e55d89952b6f34ed7ede4bd61f2da27815ec3ddefd85816f55927cc26abe5ef11f23a525e4749dd46485ddf00bfc3eaa2e2344bca1c2ec37853735fbdcf9fbf257f67cb6b8e27be72e57b6fcbdf793ef5f1e37f4aa791328c77c06f8763d3257164a9781fe589f751f2db0d2ec7a6777aec01fea7959b2fe5bd9b841d591e3bb25c5dd23363df4ba883925f20e5644bb9ef81df5ceee9016d6b2abfdb247f8f6689f3b6ee3e9e8d73e5b450acb771c369d6c5bddfccebcb6313e8a9e236c713b739526eb994abecdfd6fd1d519cfb0339fcfbf73d72733d7273a55c9547e4f9d453d9b5a3bc4e94d709ac2e1d6717ca7b3bc8eb7819661e8bcd035498db47bfeda1ecf1cb2d5e1c4df2c4751f196e7e0299eafbc9f2dad2e7fbea9d2921749e2aafad7c86d94a5ea78508b3b5eb0b2dbef7f8c23609644e77f9b6a8013a38725a1e287fcf90d79de47567c97f8cc70fc6f8f08344bacc94ba3010078e2ead3ac8dfb3e47576ac2e4e6d3256a70f1a4ea7488194f921f8cdafa3e5fd8fc06faeeb5c379c568f4a9973e575178fcef3e874766ac1e2bbb66d806ff8f92e9e7f15baf6b5ce7665b756f9c3028f6e53a37ab7980cbe557af8490fbb4a16e33c8cc7491d14dbdd3cef7d0c7ef32bc877c4dfceb76d946ff502f7f9b79f80dffcf9429fbaeec1eafb2c97b32d087b5b19b6ccffdb6c90ef2e62f5d39eee5b7e05711791e5541b55d6efc9ea9763ea3d6edb66f09b3fdfdda76d7b69f473c26d3b3eceb77bb3d8fc6772d41f9abf28ef2d96fa6cc762d3962a97b68e7e132997f796b8bfdb2b5d8ae4372a9da8bf1dfddaa9f4b2545e97317d395b0238c8f4e8b416ebc2eefbbbbc571c27ac12f9ce728fdd855139ad7b48dd553ea6cab261c8bbfc5e99bc56c8abaa9baf8abe9babe25f31aa94baedc062f266b612dce7d71de5f34fc16ffede3e51d9dd97c87bfb7a74d5c56795c7765d1e10cfcfaadd7773543bacc665db7ea3e4f6a847872216df7f6be5b5a3269ed724886727dc0eb2fed7c15bff4b14ee7ef2da4913ee5a1fe1ae97e16e0a18ee3a79edac0977ffc4e1766ceadeef382260b89d63af91f1e0fd0398eb639f79de95f58ac844f9fc73f09b5f27446588bfb97e97b9fa7552e9e720793d38d6c6c824165b2799249fc72b4b13d998e7f3bd78fe7d981b765dbbeb70793d425e81cda2bf89eb0ed2595d5dfc50f08cff1e2faf87b0983a445c5d8e94d7b609ece90edee3d7a342d81fef5933793d56da3685c5b645651db0f3a638b28e7339f5fc59fe3edefda68bca374e709f7756feb31ed8c4c300f95527c5fa44f90cd6c90f91f7a6837bc7c87b33a2f722aafe7f92277ebef03c3f19c8d03ddf0074d03d3f8545d318ef7bc990f74ff5d8728847d7e92c26ff67a7d5b755bc03c3fe32405ccaf66d64274f5ceee4c64bd743e3c83a431f97dd549de94c4f5c9ee589cb9d357179b67c3613c49bcc0722b334f13b1b7050f5f57390b854cfcf057275cfcf033ae89e6f8c8dcb6eaa1ff77c242ea1fe302e2fa86f6b649627ecaf7cc4e545f27aa1bceaf2d08be555f5617eed43ee25f2ba4f1cb9bd3c72bff121f73279bd348edccb117d93094ff9baea439bc3627d9dff76fcb647791c595730adaff7546def2b59acaf5fc5627d7d2eabefeb57cb67bb44e35fb0e0f7e6b1fabe3e1ff8896aab5e03de81beaa9e5f0be4ea9e5f0774d03dbf9ec5f87a4fd5d77b03d3fb3ad41ffafa8df56d8dccf384fdad8fb8bcc9c359f12d64b1ed4fd906de4ae9a7ea06c7b3f865e3cdaefcfc67e5ef5ba4bc0552fe77e037bf2ef484bb50867b9d2ba797e42b1ab3fcfea3f2be2adb6f757f17a8fac626f9de379ef76e93ef29fe7778f8abf6a4f295dda2fe5667cbede019b46d77165b27b94bdedf03c4d5eee01e8c2b55374bc4f56e79bdc7c36f5729ef7fe0377fefbea8fea37bcb7bf7caeb91d1679d3ef4c46f1ba0c7fd7a5f11ba82380b5c4752363f90c0e62079d222169b272d72fd8077a1a2b21e91ef0c8cf3ce63f2fab8bcca7a56644f16dbaedc533e7f42fedecbf37c2ff9fcd228fbee77023d946cfecdf771f451f63f29af4f49f97bcb6f7f00bf1ddbfa3695ef3ded863974b37bed7bac47ce33f2bbc51e398ba59c43e57bcfbadf8fb80cc84907cf9ff3c87d3e6aefd8f59e6f54da4bb63e9dec33d98f1159c262f39e25aeadfd647db02e4d14b3f87efa82bcaa3e825229af88c5b6d18ae4f3786db44461c5b12b52cc62fb98645f0e7b49fe5e2a9fff287f977ade977ab397e5ef12cffbcb3defab7ea057e4ef65b1efb357811cfefbb5a86d11d55ff53ab8b74cde7b23caa7bfcc7b232b62c3666fb2d876a66a4b96c9f77e02df4106eab9ac8744f6f1d8b452fefe05fce6d7728f5c55a77bd9f35cc9adf0e8abc670553fd63b511bc76e06df009eeced5899717d5ace638854ca6f7e05bf1d9fdeba451c19eadb55f2ba5acaf80dfce632c6bbfa6e1d27dd46f6f5f05b05eef36b957cfe3bf8cd655f15473f39e72152edb1ad5a7ebbd9c7b7b22f3552ebb1add6953140ce2119901d47961cdb656aac52c5a1f2592e6f3f4dbcaabe32393e1f592375f803fce63aa83cf303a6f7ed1acff77fc67e3f50a637a67cee238f6e6b596c5fa91c07608a9fc62799aa7f2addd745dfa9d3ef638f7eaa8f4ee9bdbf0cf72fa087bacfafaaffec53f09b7f2ffbd322077a9eab3643665497bab918f1d2c8e74c3b063e48f6590f1a114786aad71f04e25cf5b97e099e813640dd73d5067d0a79aeda66c390e7dfb0d8fe45755fd62123aaedf239f8cdaf074775157f3bb60e96fd9f83557d45d6c799ac3faa3ee3c811b1be1251fd77174699778f97a7c83a4ce450c04bf5157f099e417bd573c5eb19e439c64b3df7f252f715afc33dbc641f65e430c0eb3097d7907cd7d621aa4ffb070f2fe5cb6179291ffd91697d74c8bd528f17e3c8506593aadf435ff9193cd3f998ccaf591ef2fc57c407553e7ab487e9d1f20afa52c5df8e2d99b2fe97a9da55aa8ffe0f8f0faa76c61be037c654e585c768fced67f04ce72f98edeab9d776755fd97e9cc7f6e3e4f55860fbb1aeed438f74f51eaaf2fabf3cb62b7f0a627b3c7ffa5bef4fc3dab8f78765c491a1c631fe913a9ce0b1f304795d0f987795f74e94effe0dde51f7f9f524f9fc1ff09bebb51109fb644fd8b23f39b20184dd45de3bc513f606709f5f4f95cfff05bf9db047a876b2bccffe9357d5c662f27a268b9dc710f1847f9627eece04f7f9f56c165b9e79794f88c6b11a0f89a4c967e3e5ef733c619c0deef3ebb99e30549fadaeede127ee4ff3f057fde8a76bf89fe1e17f3ab8cfaf4de5f3ffe284afda34e97aff1da1daa11f06b0e13c8f0daa9f7aa3c686f33d366c04f7f9f5028fff5ee0ea35b2c4d56b948a37d54fa16c55ed6ce54b57787ca9b9478f2b3df17c05b8cfaf5779e259e509417ce96a4f185781fbfc7a8d270cd567aaf3252ff30b3dcc651f7be422563fcfb8d8c3fc22709f5f2f61b1e9f6129779966a672a79de74db0a61ddda137e50d66ace512a58fbadeb7af95feae12fc70c229769f85feee17f19b8ef37dd4e90ef5ecb62fb56ae75e32a5b967fd9aadf5c8db98e07fae8da95ed3df2af73e573bc75bff973cd9c9188ecbf8c748e9511d37e53f349ae8f7e5fd706526d9f4ed167e3547cb603dff1abaa178d8ff5b5c07d39725e8677bc24c73bffb52601b7ae4cdb3f9e3b22a09c6e2ca6ff3c22db4caaff3ca2ea1baaedd1535e6f88e510916b41223746c313efa87bbabef104ba69efa97e879b3c7e78936b7f9eacffe4e57bfcb0320107f95ee466f09e0aeb1660939a73772bb8770bb8c7af9b5cddd222e0b7a35bfe068fdcdbe47b69206c7ebd5dde6f027ef3ef647f76e40e69fbeb1e7977019dee9061ca3c25d2db13c69d2c9a1ff1b190b91e0e770259b7817b4a06c8cb54f8e2caf5966dd1bce9b161268a036dbcc8b9d2ec9624bebd9bc5f601cab196c83d1edfb9c7655530ddd5bb40cd53537eba2981ef28b9722d52e45e16dbbf2ac76722fd803cd017efdb9efb3cf6dce709b71f4bdcafa8bec990d707649ca583dffc7a3f88fffef2fa20b877bfbc3e24bf57f521e5a30f83771f06eff2eb232c764c478ed78c9dee91adbe93e32769cdc16f7e956baf228fc9e7322fac4ba38f031d1e03f7f8f509f94d4bf0dbd1618c9cbf3d360309eb49165bee3ee90953f605a5b502bfb9dc573def3f2ddf6b0d7e2bc6504e9b5839f5f47a06d828eba0623c309ebf4aae75636c0f4b9b64dffb68d5aeeae54f5edcf26e80bcaab1b8e7e5ef67596c7d49f519f86dc728df1924afcf79e2458d57bd1d5cf788ec07883ccf62fba59f77e3609ce2a3f2ca8e09782b7983e555ae838bbc20e3b82df8cdaf2fb2983415517d432a6dbdc462f27ff1dbd16b9b251e392f7be4bcec89f757e4f3769eefd4b84f47f9bcbd1b1fdbd478ec496077ecbdf488a8674e67a5ac88ad6659a2d01bcafc2ff1555f265edccb4537133548c657f9f2606bd83ae7d352dd0adb0562fd6e8d5363cad5aeb0ed29da032af449e2df22e78d3221b4435abd20eeaa170457aedcf95f29581e5ceddc9f265617f305c265ce93516ca673e55f2d61396c91f3bf58290b9d60cb59adf3abd0f977b590b7c451bbfe9b894ce24b89bddfcc7364ba2b9d2b9c3b0ae86ae777b9d070bef8778dd0b454683fc3b95723d65d57b2e56ca2735d2b42ab6f7b95f3b72ecc42894cafa37ec13376df5d56ada269b2630dd73e4bf8e2ffc54863c40847dfac834c874db3c48c85e3ebc5c4ff317433195e019b2165e4086491987bb92c4bd4d1e6d52318dcc6fa16eafddbe53d9ae5c7b5454f8647772f614134865fdcbb807d756ec15de9b1a6e5b12c5144f54e605a3cb05c5ea668cd0631213dbd693657d48b3fa2c32faa9ff35388df7daf4cbc173c029a89c22f3602c472db4227579b0b0acf85cebfae720b8419e54249af59531c358b8461e5d28cc94eb095e21eff7aae50758d281ad7b17a319ccdd5692e22a97e119cc8502c9ad274d1245a01858d924ab04d3ae247548b3a2ba2119525ea553de2b8331696a870a5c95a974a70f7de36a7b2f094af36a7ebe3a59588976442c362a6892e665aa53a01252e31e2c54beb3abba2f1c2ffd3336c83f876221d30824d75045ba7dab7f9b355424a91f36e7086bc6933dc9b09e901b6439c30b10a18c2740dc26c8eb0bd462b96ded2a315570891dc4c17396d1aa7784eceb979df79770f8274d4b93bc62d5d83ba76731d3dd1085e424a4fb51ae73b45d7ceceb322e7fd525105e5f7e73a128b9cb0b9bc092284684b33f68bf86479eb78a497ac966a67417520680387d50c23de42433c9bfb6b178d1b883cce9b183ae289a12596ccba864d66ad30c9ddc24a6e8d49ee1e56721b4c728fb092dbea928de8bbd93325c926dad9a2fe9ae87cbbc231668d6841d73adfeb3a67e227979ebe93cb5622b964305d9751308db064d24e1777fc662f9d92dea8db0a8fbaf698e0de210577c0bcad4f586feb88a9dc37a4ca9d30c1fd420aee8c09ce0829b80b967bf66f80dcb32b267ceb0610de0d133ea0018477d709e759f64056bfe2fc9ff35f3de16d70e13d30cd076934af2e4d0ba4794f2cd50c0e9b6ab6c2240f092bb997467296c8570e63a9cdfdf5ddf3d3444f40299be354fcf6616ebfaa0a7795e853e51aa9fed979ce7599d082dfe75a24eed68f5f8e64d6f101ad68913d4e61fe0719e8ade0431e69a23ce3c3cb9962d3bc05ce7d7738618a88813211d228ad363c04ec7dc56216e39b8ad68ad84e47dafcc345e866b1c1cae5de584e334293d3bca9cbc6e2e4347db0243b326c92edab93cc93ec288daf66735fe52373ad4449542f9ce17838fd74598328bff76fd4acc16d1d7279cb44b7a02b6f36e3fbe2ee275c75a5e3c06ba4e3143aef543961944a270f9319f0d53e7dbcdd0eccfd4f9f1c724472d8c14772a0b40a4b00193a4fe2cd68de9f5baf9397979df39c56e324b65824c37ddd42d2f9d28ddd32f16a19dbdfb9aac1af7afed61cf7b7fe3a6d78eb844f3a4b58d1ea8c0bde1a139c1f52f0002c8d17844de3037592796ec337d30b5bc31a84a93d26acda83b11c75ac2647fd3b122c471d82091fa7117e6f5a30e1993ae1dc59b7f1e32371bc7a2826785b5d1ae3513349f4486638ff5fe57cc1fbbf8a44eacf1085613437c870d27a99f3172fb04780f757396fb883cd41f41c8639c576619d6238166fdb6be2ede780f1360213be8346f8f426c1848fc4e26e475ddcf1bc7ebe18bc2a662b64d9169b1b668861ff0c31d3a356f4ac958898ab16f19ac10e704a98839c6b8df376862807cac5b30cb14d7c95c86b83c4e9284cfff13afd5b01fde7020d83849885e55b1334f9562460be95ad13ce2b3e131952f199c492a9f8e460d826ebb0f18a1e1fc5e435d75af1fe7ce100a57575e592062a2073357a65897e8f4ad6981532de5ae0f362aac5dfd12a0a0f3b3afa1aa6e2c5db13de8a97fa4f5ff19aca78c52b9725ae783584f658052b0fcb54a76932d548904c351f4b0bd3b1b43023a9b450a0f339d125b6ba517d0e4f51f3846c9ef2c257f8f9b66c4dbcad7fd16f97efc3b31a4ac7e1629957b53806c42557cd33533e40b2149cf7e1c21749429f2676166922959a63e96234566acfd494da9bd28395da63742e2bfa43ab1ad565270b09a970db593ab7159db6a37d447e43ead94f4c9fac16996a89cc54ddacbb9f584f57258acd5231c5a734e6f970310f9ad797a60ade15823cb7af48b47b31279f2d9c3cd576628e3e162b00e6680a8040b5ea7158129aab49427f074c42db606aef1256ed6d31b5e769d43eb05930b5b7c384cfd7089fd93c98f0ed75c279c6cc27ce846921ee8009e69bb6d5ab6ef29e01d54e28f6b414978ab6826aff95883beb9c7fcb9d7bc54244869868a746fd8368b923c676a1866d87806cc76308760dc976824e3077cfddfc088e337837512798d7bf766748fd8b6fe517bcfe3509c3be4883fda280d82763c97ccfb0c97c0a2679afb092a76292f70e2b791a26797158c9d3759279242ed144229ff81224126760c28b34c20b030adf094b984b7579d320c61bfad14aaadb7c8af66b14b165424a95f3f71a59e696c4f48ff03e8f32d9680e92ce77c6f42cd6e9e9aebce1739b789da248f4a1f110e7b09581429d89a12fd1a05f1f10fd2c4c78a946f8170185cfc6782dd3f1ea91205e4bc49498e8dd1ce76e108e73306d96ebb4e13fa3f116249cb918d2151aa41b5b0543ba0b664499ce08de6de3e2dbc641365b74f815c955436b44311e1ce33c4c837d741af09c6d665dc5606e92d582f918d2951aa4af06445a88e5c8e56173e40598da15ba4cb37530b517626a5786557b579d645eeb58c5905a07efa5095eebd80d0b675f2c9caaa4c2d95d170e27551d96d41e5804d76822787c9b6011bc08135eab117e6040e17b62c2d768843f1a50f85e98f0fd34c27bb70d267c6f4cf85a8df09280c21763c2d769849f1d50f8124cf8fe1ae15705145e8439f901619d7c29a6f6811ab5bbb40ba67631a6f64161d52ed148ce12d3fe52b98ac73bfb29d84207be41a6bff9c57c8b1bdd0a9e44e1635d4aa5ba78e125f4a13a950214e5cb306f3a4ce34d9b032682e598f0c335c2f70ce8aa2b30e14768841f1b50781926fc488df00eed8309df078bcca34246e64a4c30df69b35e5d7084f0ce55228d658883c3f982d84a794e39df94a0540c5c1709df8f7638a9816bbec23a437a6f95f4e972c7db47397783685d8e697d8c4e6b3ef2ca3b71a3f566b729e9364374f30a33d81059eb1e1248af0acc078ed5f8c0a6800e5689197d5c481f58a5119c2566409791e6b3d83cd242d179cf774458263ca522f0acd3f879f2f1bef3e413449ecca777d0e98ae5dfab75d1cdebd6eb1952b7e69ba0b612277505a95befab0b87fbec491a9fcd0f986f5561c24fd608df2da0f06a4cf8068df023030aafd109e7d51abedd6ba86a4d2da6f6a91ab5ff0ea8f61a2c93384d973372afd1b7ed2738fec973f560dd6bfb61a69dae31ada64330d3d662a69da133ad136ada3cf1ed2ad17d12ccbc759879676accfb26a079fb63e69da5338f37a1e70813aa44971a8fab5d459eb322fece0801cc3d00d3e86ccc97dc89c68b1ba4d3f4402cf47374a1f335358b9dff653bff4fa4057faf4abc13449f83b0c83f5713f95f740c16f90763c69ea73396cfab517daaaa8a55268b9ce8187550ef3e04d3816f521ca67e712826f87c9d71eea09532cfeddddc2b60fdf0302cae2ed0c45549a76071753826fc428df08d01851fa113ce4bfd8b1852ea5fcc92e9513b52170e2fb42ef113d971063c8fc2045f1a52f0d198175d16d23d8fc1045f1e52f0b13ac13ceef90ed0de49ae5c409049aec7615e78a5c60b1fed1ccc0b8fd709e7951fbeaf74a8cacf0998da576bd4de1c50edf598f06b34c25b740926fc442c655e8ba5cceb924a992761eec8f782ae975bf24986bc3ce31d9f7cfac67251de978a89e06bc593d5a2f4e3b58120be7b32a6c50d3a2d3ad769c1cb5fde32e4c37fee04ace475d880e970a34e874e52873ce7ffc5a2bdc9bf592b6a02c96a700aa6c14d3a0d5a80b8e0cbb4788b304868a762ee7bb3c67d5f0de8bea761ee7b0be6beb726e5bea76399de264da6d72460a6770646e8360da10d5d83113a13137ebb46f84d01859f8509bf4317b701859f8dc5ed9d58dcde9554dc9e832587bbe3654db90d9c359d8b69714ffcac29a701b3a6f3301dee8d9735e53760d6b411d3e0be4459d3ae22bc604b4acec7dcf77e8dfb5ed42d98fb5e80b9ef0398fb3e9894fb5e88217b8885abe85d84d17958436744f760742ec6e83c82d17934293a9760463ca631e2c880465c8aa17f3c24facb30ad9fd068fd6e40ad2fc7d03f89a17f2a29f45760463cad31e2c01ec18cb81213fe8c46f8c680c2afc2843fab11fe6040e15763f89fc3f03f9f14fe6b30e7e43b92a3c55a5e03176bd7625abca8d3225aace53660b1761da6c34b3a1d54b156d080c5daf598062feb3468c9a2c5da14d113ba2ae0bcb41b30077e45e3c0eb7b0673e01b31077e1573e0d79272e09b30235ed718d174ab6046dc8c097f4323bc24a0f05b74c27974f16d54c2940bb7625abfa5d1fad5805a6fd209e7dd23fcb88750dd23b7616abfa351fbef806adf8ec17e5797b6f8e85afc99a785ceababc520cb7291ef548989d9ee02c31231a63f97b91ba7ba8bd38bc498125fb6be42fc56f966115b2a47dc73c488bb5ad8be8eb97be86588192feecef81962b4b5446e77b052dca9166f9502c9fa31fd32393701ce0208da497e071641ef6922a84daf6011742726fc7d8df0ec80c2efc232a30fb0cce8c3a432a3bb31233ed211ea1dcc887b30e11f6b847f1f90d0bd3ae13cb17ee227338ad3757d9f467096d805ae712658d4df36ab6127586cd6f1d24eb0f894259a60115e576c82c5fd982f7da64b6d011df5019d705e447c1eb688781093fc4558c90f61e5c3977efc3f4ea6f9b0ceffc55e85cb1ac5ffc36c6817dff3bff2edf95f0bcf1f16c7f3c36dbba78f894730e7f926acf33c8a39cfb7219de7312c997ea749a6c7f609964c1fc7b4e607b1d7ab12f1cd0126888656a99850a05b8d9621aa4b1901270e3e81e9f1bd4e0fbe214e30f94f62f27f08193b4f61827fd429ce5b8c731c640d39e7e869cc3f7ed2f8c7df01fde319ccbc9f75e675896b5ef2f38e9ec54cfc4563e2e4bec14c7c0e13feab46f8da80c29fc7f8fd16d2ef5ec0b4fe5da3f5fa7ec1b47e11d3fa0f5dacf34c514d57719b18b1d39e8398f51216f29f5872728fd3c9aadb833fab6e93a9398ecf95b0a00bf55ec634f84ba74177ad0633c55f3562470eb72196dc3acc57305dfed6e9d2cba72ef537690fa2d3ab3a9db8e3fda371bceb328239de6b98c1ff864c2eaf6382ff0b29f80d4c30dfb52d8ce03731cebcf4f3727e3620e7b730e1691ae11bfa0713fe3686a4494824efe804f3dca7a91fc171daa7efea048b63372348d740b348325d03ef61d89b6bb0af18100cfbfb98112d30235a2665c4079811ad34465c15d0880f31e1ad35c25f1d184cf8479863b68968b253be86781e83db2e9588668fcac833d95039edd4fd3776554f86f8e5163f23c47632fc89ca72ab59b9d870a69ac1b9b96e3f1f9fadbc9ac5aec151e1f0fe3db7885d56979d6788ccbc24e00cd18f31166d752cf8ee7670ef46b7e21f2d60a35b1cec27342c67d195f9ae7e5ce74412729db783ae84fa047398761a871918d061366349aa3d96a43a2495a43ec58ce8a831627a40233ec362ba932ea6f9aa1b7daff522d9dfcd5792f1069fbbe557bc38cd8cfb74a898d5ecf67447fd3a3605ac129ea17ab5639fd508bfaad1a4a2a542c355a04fdc95bd4a761804f1afcfb1a8e9ac891a362858d47c81f95717ccbfba26e55f5f622ed04de702d1a1553ec05b267b79dc9d92931fd8fc0ad3a1bb4e87ee2cba9cc16d49963bd1ca872e56b2d932e34b5e97af315d7ae874d9daa34b259b245caf520cfaccf4109ac54a85cbf1bea8e435fc06d3b067225a6e278257ab85ccddbf6f9958a21aacf5fd2da6cb563a5d32802ec1744a6e59ca775802eda5cb3b07074ba0ffc34cef8d45c3d498ae303777838948dd73cbcb20867e8f65167db0cca26f5299c50f18d07e1aa06b870403fa23263c4323fcb280c27fc208f5c7086d9d14a19f31af18102f3bcd6ed0ecf4174c87813a1dda011ddccc34f9907fc5421ea40bb913081976007a3383201afc86693058a7412f4d86144f93e4b2a1df31c71ea26bae670673ec3f3083337506f743b2a16a715dedc990d43600c9664b7f62896e2896e8862595e8fec2000fd7007e726830c07f63c2476884ff1c50f83f58ec8dd4c51e9ffd1fbb6455d536b87b963b324a9cb80b1243ff62c68dd218d7624430e3fec38ccbd219c7e7ab45e7d4a8f66110635804092f1b4bfbfa1196448883e814c174cad1e9d4a38e819a8f532ef21bdece5a57d7d2af95ad2f7763da20daa461dae4eab46952a74d90309ae8c2e02e95a771a9eb860773a9a61ae159e2fcbdd41cb4ea9ee99b2776be2e124dcbe85f85ce172b45bee93d03382fc1c8787e44b3d7b838592d43dc0b177647217931e3a3e37c4b1a6cd7ef8288f710d76443444ffdc65c63b4c6353605cc6d9a61c2c76884178e0a26bc399670c662f9b4770d7a74f29f4ac64112550bccb8711ae37e1f19ccb89698f06d34c21fcc0a26bc15466e5b1db9de9e4c99771295b19a06cf965b635a6da7d3aa27f38e623674c6dc068b82ed35515012300ada62c6eea03396318df438aab7c3a4efa893debc0e655612bbb3b6c7308dd760fa223b18a60e98f0091ae193738209ef88519a180937f0d509133c29a4e0ce188ec91a1c99017174c1844fd15512020aef8a099faaabb10714de0d133e4d237cbbdc60c2bb6391395d97966a98bffd8fc3cd3c77a70d2c8e99cb6ef63cf41e5814cdd044d1cc8051d4138ba29db0464dfda500418cd94a171e6f43ef8cb5a16726d586eea50b87f75acef2938f1c820bee8d019bad03c68b9fac4080fa60f2e7e8e4b7624cebd14142ec8b853857176237ad0bcc129eaeb6818f3e09e6e9fd304d76d169c225f0064ed0922043d7e8126733f3fdda53b5d76ca16cbe04df67765e84cf67888521d287b619345f3483bad6b32c5ef85883a7bf2e7ef8cfc2081f84885569a7598735dfd8fbb9b47a51938e47cdd698032cd039003f0d4a75612e131dbdaa4d5816d0f1066059ec424d16fbe2d86059ec40cca85d7546f198e2d3bf57c85247756c96d69d4398ec8ea583303d76d3e9d11e855b294bba20610fd6a5b9bea94e736e23ab2a8934b77b8477fac7221a85a4b83d9014172f742cc50dd17113a7b02f4e2137f73d376f9f2f8e8be28dd8396276823bd7a13a09a68b22414ff0dc53901d50cff264f5c3a867ea528a38aa281272e9c4504cf2de61250fc3242f0e2b79b84e32cfef9644c21f3c3e02cb948a42b6f746623c9686e5310a935c1c56721626b924ace46c4c726958c93998e4656125e762929787959c8739dd8a904e978fa95c1656e5029d645e01dac78fca9d71c1a33195578655790c46b93c24e5b198ca1561551e8749ae0c2b791b4cf2aab092b7c524af0e2b793bcce7f60de973db632a5785557907cce7aa43fadc8e98e09a9082c7eb04730b6bfd088e33d37f0206794d58c813b1be95fd42f6ad4cc220af0d097932568559d70055982918e8fdc3829e8af9c601217d639a4e307fff403f82bfc6054fc762f0a090313803137c7048c13b61b17748d8d8db198bbd4343c6de4c2cf60e0b197bb330c88787843c1b137c4448c173b0d83b326ceccdc562efa890b1b70b167b47878cbd7918e46342429e8f093e36a4e0422cf68e0b1b7b0b74fd2619cecf083f5e29f5db50e846871af8a41b3f71310c27b6108b8b13c2c6c5ae3ac97c6ad87a3f2a9f800bde0df3cb1343fae5ee98e093420ade034bfb27874cfb8bb0d8db1036f6f6c4589c1292c55e98e053430ade1b63715a58168b31c9a78795bc04937c4658c94518e63343625e8a093e2ba4e062acd97976c8666709a6f13921352ec5343e37a4c6cb308dcf0ba9f1724ce38d21355e81093e3fa4e0320cc5052151ec83697c61488d57628dce8b1aa0d1598ee1b838248e0a0cc7252171546259dca561b3b85518e8cb1a00f46a4cedcbc3aabd2fa6f6150da07615a6f69561d5aec6245f1556720d06e4ea0600528ba97d4d58b5d76092af0d2b793f2c915f173291afc5045f1f52f03a4cf00d2105ef8f09be31a4e00330c13785147c2026f8e690820fc27a266e09d9337130e6c8b78675e443b01ee34d217b8c0fc558dc1692c561188bdbc3b2381c637147481647600e776748873b12837c5748c8476190ef0e0bf9680cf23d21211f83b1b837248b633116f78565711cc6e2fe902c8ec71cee81900e7702a6f18321355eafeb16eceffc8c14b1c65e6f375948521396f844b1758157de3da4e3a39d4af570844fa51a24de6c28ddb0e95427eaa293af727c24527fa120df7d59b7c6cf1bcb7c420412de4958527a346c523a1973ccc7423ae6069d60ee988ffb11fc30cee2148cfd1334ec4fc5d83f1996fd6918fba742b23f1d63ff7448f66760ec9fa1617f26961f3f1b323f3e0b13fc5c48c16763829f0f29f81c4cf00b21059f8b097e31a4e0f330f77e29a47b6fc4dcfbe590ee7d3ee6deafd0b8f70558d6f26ad8ace5428cfd6b21d95f84b17f3d24fb8b31f66fd0b0bf0463ff6658f69762ecdf0ac9fe328cfddb21d95f8eb17f8786fd155896f36ec82ce74a4cf07b21055f85097e3fa4e0ab31c11f84147c0d26f8c39082afc512ce476113ce753ac97c58fd633f2ac71956bf1e63f14948163760823787147ca34e306f6b7fea47709c61f59bb0d8fb2c6cecdd8cb1f83c248b5b30165f8464712b26f8cb9082376190bf0a0bf9360cf2d72121dfae13cc472abe89841fa9b803e3f16d581e77623cbe0bc9e32e2c2ffa5fc8bce86e9d603e1af9bd1fc1714623efc120ff1016f2bd18e41f4342be0f63f1534816f7eb7ac5f856b09195cc8c33cb16c95eaf869b2ef7b3ef9eb25f444f59160b726e5932fa62bd670fe8a29dc7ceaf7ea2fd17bc5ef9a04e30fff95ba4fe6a6ef55fbd00d271bf7a08cb257f6f805cf2614cf81f0d20fc112c77f8336ceef0a84e327fff2f3fb11967fce0319d60beabc1df7e04cfc7dde4714cf03f21053f8141fe372ce427b136e57f21db944f612ab3b4902a3f8d25c6485ac324c6677401f09dc0d2d27c30f91417fc2c56de35f123384e79f71c168b4dfd088e138bcf63b1981e36165fd095a47cbd7a64016b9ce5faaa240ab634bf998eb0b6746c9ec64bc79ef5acf3a30356e2bd8865ed2dd2c267ed2f6191df326ce4bf8ca9ddaa01d47e0513deba0184bf8a25e136699a9d4126333568e80efca903b86633be93f47e228257caa81f25f61099e13c9fe33c89ee3aadaf18e95649f0b7a16b71c75fc5dc1dbf2a03e527af6156b6d55979749d950b9c2ada2a7114024fa015e2ef1922e9726bf8ce626e029d51f7e694babd5a624fd5a9923ce68ba7258ec45ab9557585875e54027f3f981e98a4423170bb5c3c8d650a13ab97f742474ed0ed745ec748b7c3fc0986e8da94e77ce3d2e21b792f767cc3dda0d2b5b650ee8fe3d536fa2d7ebfa1fce90dcccaf63a2b77f0580999bb764e153156216cf46a191b43f049bcb402bf0a62d99b98651d7496ede82bfedcfda8cb989a44103ee6a24f82d8f616665b479d6da33db6cd12b1b3425ac67fad6d344bdec62ce9a4b3647d8af3b3e837fc1425b5056e09389cb13a80974376b815bc2ca915d50c98ebf10a56c3e56def60d43beba84ff09536660a1ad546e46aef62f675d1d93793d0abf8dd7d4530dc2ab73a5c26822e63fb8b74a8cf499289d5f730abbbeaacde3eaed5b8a6f3842dee6962ae8daa34e6778b25a1fae922f9d87c1fb3ab9bceaedd03d7ece68b27b1753b9d04f75eecf904bca913a626984c3c7f80f1e8aee3b1734aca6cead2fc43cce61e583d25980f281fd61f851dd4238258f61166594f9d65db20962d10e9b35cd64ddca6b66ab52c94a9b8a45e6cd0b4513ec62cda4a67d154c2dc57c5aabbdfe352e6ee43d970967e8259da4b67e9760ceb7ed7e514b116c03da43993e92296ab446ba8d82971d735a0559b31ab7afb6913c4860b6b080beaa6ddf274b83c4ee9172ba3e12cfb14b3ac8fceb24909734e7fad023c0f8dd7664d36a7fc0cb3b1afcec6058d56a38e4f297c29f939c6a19f8ec31e841ca689343c57747b2e972d8785222594d5e54a4168c05c2208912f3022193a22a5c49e118e88df522c19cff912e3d45fc769229aabf336e352e725955bb83b8ac72f83f5921adac2af300bb7d6593823a085bb8a98acf4e1bda9b2f76bccde013a7be7117a7e751235928620f00d46606043d554dc343d01d453e8adfa16b36a90ceaa6901fd780aab12395495113efc1d66eb60accf26680c4e156fd4f7466f59e45f6e10fbfe87d9374467dfb621ead235a2c4e1fb692f932d5fdcaac27aef06b1e97bcca6cc6071e6f5cf09a28785e72a89da6db475ac1f30fb86fa1923c1ead353448f59916ccdd66fd924579f4ebed5f02366e5302c1683f415c4d611a34ff94857fc564143b5187ec2ec1baeb36f208bdf1bcc0f21a4d0f2674ccb11f1fb7483c4c2fca462813285fd82593d5267f548340729ac9ba20173c26575e318bc8653ab6d972537aef32ba6f7289ddee312e60c33c49830ef752e7772767e08618538192151eed05079c06f983d59589b207e1ae1bd2073453db95a5353f23386c4eb97cb1ad0c2df310bb3fdf48de8c7846608df8b9f9ba7725ce80fccc61cac67d24f79e5c7ca5497597f6296e6ea2c9dee2b36bd237c6e3a54763766bcfe85599ba7b376b784f14a3b22423d56f23746235f47638aa7a4cc031b26788f158ef5fa0a794a4db1f0f978f1bfd8770841ecfc07b3b3006bfdc5d742b74144741497b7fe55abd6af350de7e1ff62b68ef653fb0962eb247187bf5326da3d3b3b02d73592d5ff61568fd159bd3084d56e1f7e302b93e5914c3d90cfcdd692188b8d12eaeb81f597793456db388259340e1ba748dccfe2a754f6d35b13bc4727791f4fc3386ca3e3302c000715a7eaacbb862a5f9a601a6fabd37870c2d2363af65e2aeef2b9690dd30a698a69ba9d4ed331715a4f5e4f8fd57cb5c84ba2e35a14e9251db3657b6cd647b01cc0ed81a8ffb4fe4c1e75ea266e697d2913445f2a6f5507b1b91966f30e3a9b07793c2d1a26b59f35c7f4dc51a767ae474f9872bd3a4f933afbad4327dbfbda02b360bcce823deb4adac6192d851ee8b72da5be0942a5254665829f99102ac4207d9b51cbb014d730a54e2bccb2897e5ac241cbdcf06da1e42d6d8d593ac94fda746bc3ae7fd6801e4ed7c747b3fc04f6e9d22dff2a88056d300b26fb9fadcbc30ce287d03eec7e43c5505bccbe2958db267e7d227a7aaa5747757a2d9e6b6027afc6cb69922bdbda61564f4da647d18dd5f9cecb4b995b878fb673c2f7cc24572ab6c72c9ce627e5e90927572a26aee93677fe1789f02574538414b77f7695f886d781b2f8b04724bbaedc1b55579e8d8a29fba2f779f8154e6cf0345158577245379cc4244c77e0f07a8ff86f883c20decdfe23cb987789e22421bf5ce637ca5b470942ee6c66dee21de5d479cac457decd3c312b7465f828508a43eb12dbb417b2783212692e2d52b21cd2bc1ab7c5593a83c76a1f19ab6959bc5114199ea43725d662271e5a13bd0f75af4716a60e9deeae80d9b21519e19b702c16c1cc158d1e7ca940c290bd274979431e2904a8da4f42710b4016a013d753b89bdbd553c5dcceec771d99cdd3d3b2798cec4c898d2f2f9e2c6ab5ab1d70eecc4855e66000abad40c8e70b2b8433291176707ea846dc7431a0cb051489aa199f463587adb402d84d2da2c0665102eb2292ea6296cda233cf6c06d7a17514dc6c4a709d34e0b8c04ae7233e6c5b2bee9658016d098b429b43ed6db1c973aa184570e738aa7921aed7d9002eb34d14dc5c4a70dd447db4da77b16003bcd341a1b00b25bcd620a9ce89e95fb201d3a63e514cf32831b50498a2135b6d4094d1238a683e25a2660251b5557954d3b65138859470f8468873eaeafc6ac0c39d28314f64fab58c4ffae7d9fc5cd9156403c057fb46012ea004d8022440ae261f03b201d08ace51400ba973a839622821ba498a1d35ac8dc087764d950fa955363600caef1a05b41b2520beb7a0aa824e616b85d5b575f5263e61ad44d4aae6090f2b11fe56ee04680344fe9f82b83b2544de4d05e1f12e1ebec6b8b46e9bcf12cb2ba75d40a7cf1e9428dbca3c4df9db3a59622e10ed471b50dd09f2b645f41554b5038eea2fb701d11703a388f64c55039bb717e100ba6a33da5479fdbd7914dc5ed40d6c080eae529c209adcd0e7eca8741c08fac2f6a684d706543aa20bd1dc259236809a092ab08ba9bba76789e4b7d2b3d30c9f775a2542b201d892b428b025a9ed308c9d125462597e560efaf58be8bba779593959046d735decc9f428b4a594d05a01687c88d8a62ac6fa215148c5d449728a1879ac158147f7c38aee8f56edb405ca9cf06c00b71978570925b876202fb375a4884f6f51b04ae9c725dd2904ab8418bbdb93db012f5b46dd0b3bcf813689f9df5ad20680c78a9640f3748f70efbcd3e4670105a38ecf576acfdcbe91d5e26e8daca4c4cc5f72b26af3345f0ee71f6526dd4f9699309fcbf43d769e1978dc3333c9493499beaae699213bbe3203cc8cca0c940566faaef065062ac03393ca4f3203f5436406aae567fa9ae3931968624b66e0e6bf4e677c2a4366bd81c3ccb86de64ced5050a6b6733f1319b7cd8c33ec9d898ca46426e88dcc4c6a8c2f13e9b8cb44ebdbd1a9b6fa29b2d9039d472bfe3f9f059bcd67c1967108fc5c0bfe9f5bbbd887ba76c17dca9df4cc73fcf85b0be53865bc4787def574883d2246d52274dab48ca967b4f3636032758dedc1cc949526e1ccb512e71280b3dc249c7956e23c16e0ac300967be95381f01382ba93b7f17cb3c3116ab5b8ef2d7c8f035a7c2d709e05b950a6f5c8efa23547f311bc746d3e16c4385b31bc0b9da249c63adc4990e70ee6b12ce022b71decca238ab4cc2996f25ceb300ce6a93708eb112e7a700678d4938475b89f35980b3d6249c3956e29c0f70ae3109679e9538d7019cfb998433d74a9ccb00ceb59438fb4a9cc5b20b8ef79ffadf262d9b0e6d4184086d5350075d4789b6ab062d14e8aaeeeecc4108329dca47fb0390fb534f6f563de77e4731f8fb55e25dfbba40a680c47f0025d87e0c0e6bf81fd6b319ee0000f740ea29acf1baeba0385e89b2afaf290f64000751a26c2f518e4e7d471d991f6e027e78702ae08d4d3dbc4fa9e0dd07e01d4209af7b82323c361193767b9025e3af00cc434d8239c642985f039887990433df42989f0198879b04b3c042985f029847980433d742981f0198479a049370c8970ce6c700e65126c1246c9593c17c19c03cda249836b6705e01308f3109e6580b617e03601e6b12cc7116c2fc16c03c8e7a9a4c744a72ec396c2562d279bda5320d876f2b2a7c1d01bee329f10d93be58eebc542eae3a94b17dee898ebe23ed2eee4c85fc6ed05b7402fdb2c11562c2b43b817bb980675f1f511be0a5eb1bb3af32768b7442ef3b840ae544e07d2752aff4d5e797f04c2a1bf3cc4ec01b4fa24438a45e9e5924844d65eaf0cb89ceff79025f2306246a59bc0de249fd95ac7c5f06fcf5e454247d7f95251b516600bfdd908ab174988bfa3d588814ed09546877055e7a0ab5974e104bfc56c9854d7cbf7f3e425929173baae55eee223afbcafaa6c04b4f4dc54ec939ceff2b64e045a28ac4efda3cf7fd1880f0b454201cb3c5217c08203c9dfe4c0277ea81ba4e102ab807f7d83cc5e00100f10c93560491ced424c3b9132864ce340927e9d442329c5500e75926e1249df84a86f30280f36c9370924e4620c3f93cc0790ef5c6b373e43971fc33de93b9aba8aaaf609319dffc82bfc857a1cf15cfd788f5e4f5f683b3a0ddde191447e7a6bafde37f2e31e13030d95ce23380b79e978a210d7f1d743994836d645d74cf01981b4d8269637fe7a500e6f9a959469d9dfa098664eda0b7419e798139b3846d1ca99c0d3cf1c254a084cb04663a89799adc1e6799f3d1da54342cc9501e02bcf2224a94bd9c1ffaa1ded8ca907b3c6ba5e8d32c770c221cd6e84805b50b807a317db1034724173b951fee8f1305ce9552d454e7ca71da3846d416c0bc241575cd1ab1335a755d4d536de4a4aeba91a25ccaba2619da3f01da4b4d459b6325dacb01dacb5251f3f4bf690a194cb2a5ab3b0298979b049370ce1c19cced00cc2b4c824938039e0ce66800f34a936012aecd20833902c0bcca249884ab86c8606e0b605e6d124c1bf74e1807605e63124cc24e3932988301cc6b4d8249d8294706b33780799d493009570d91c11c0e605e6f124cc2161019cc2100e60d94303358fc31a2c473df09cb77b2b9ef15a00ff4c6c65cfae21d2426cc45c9868887015fbdc9249884e53b19cc3c00f3e6548c13f1def935626e3c3fb82045f3e5c8f06d05f0dd4289af27c0577f3e3c1716ddf7c8e681b7d700d05b5331879303ddb2e6701e0d106e4a05c2d15b1cc2ed01c2dbccae0e11f66a925587ee03d5a1db1b6746929fc10cc29a26d950c63100ed1da99ac01d1d6d87639be4e3ec64108f02c9ff4e73165fd9b8ebcc0e00e55da9aa20253a8ecae6c505db00a0779bb4d1ee382b7b913a83fcf21e93708eb512e7dfc03bef350967819538af0238ef330927e9465364384f0538ef3709e7182b717e00703e6012ced156e2bc1fe07cd0249ca4a70692e19c09703e64124ed263eec87056039c0f9b8493f41046329c8b01ce47a8db45fe0e2d9e2754e3c72613b68b76a6025a00803e9a8afdb41be1d440b27d3c5601788f512f2cf0b7454aec222cc279485f5341bd15342d1f37112a617f1219d45b00d4274c844a3897930cea8d00ea932642252ce1c9a0ee01a03e652254c2794a64507701509f36112ae11c1032a83301d4674c844a384b890cea3400f55973775d20f457b25d174e01689fa3449bc7b0c3f1d4b0f124e7df0a5621fe760de1adab65623d27577636e3a34cfb8920563a1ebe4660af7118f1c6821aa722f4ef1c2affe66787a94878de9c15f2361ec0331df8f30be6aeecb4713ac4fbc04b5f3467cf79d28dd8c8fc747f00f3259360da7850d40100e6cb26c1b4f1a0a83500e62b26c1b471cace5a00f3559360da7850d44a00f3359360da7850543980f9ba49306ddc167d1700f30d9360da7850d43c00f34d9360da7850d48100e65b26c1b471fbb58301ccb7cd5eca60e3a94605a0edfe0e25deb612afbb935db968c5bbb2cb28770a4ba702c7805fbe6bced946844d49b2bd3e4f033ef89eb9cb696cdc196c6780f6fd542d5f98253a87577a3a8f273b9f5589106d5ebed00724fb0f2881b68b9b5f56d3a16b45852e0da0fbb0315725d9bf114b7780f2a354ac7acf675bd2aaf74280ef63334ed47207e2560b8f7587d8483df3532ab4cf8002e713938e93206d97d3ad960338379b8433d74a9c7b039c9f9a8433cf4a9c87019c9f998493f4b476329c77009c9f53e21cc0eaaf359ec2d632de88ac656a3efd1ce773be69ba7bf26b1173cf292c4f4d059e6cbbf46ea0ecffc2a47520e3acdc46b50bf0d92f4dc239d64a9cff02effcca249c0556e2bc01e0fcda249cf956e23c03e0fcc6249c63acc4f921c0f9ad4938475b89f33180f33b937092ce4922c3390be0fc9f4938f3acc4590b707e6f12ce5c2b712e01387f48d5c0c67cd1e6a975244f60fcdcf685721572895898506af5c0461100faa339f3e16d9ce6b5036813fd948af91f6a4f5a775dfc52d111a25eb27d2bcb52e0973fa7625dfc96740ce47800ef177357661016406423eb3702b4bf9a33c96bb4952b33ba831cf3379360dab832a32780f9bb49306d5c99d116c0fcc3249836aecc680760fe69124c1b5766b40230ff3209a68d55f6d600e6df26c1b47165461a80f98f49306d5c99d11cc0fcd7249836aecce80d60fe67124c1b5766f40130599314b4ccc7a4be654ed67cbc9745e14528e1055b3e405811225b3e7038f0c3b454f8e1b82da887e879e0874dccf143c2fc90cc0f2f047ed89412e5000dcaf83b26f1b517c54c4dece2deba8eb66ffde10811e48d0072ba0d9009735432c8a703c8cd6c804c58b12783bc01406e6e0364c2a62819e4f500720b1b201376eb9141be0c406e690364c28e6832c81701c8ad2821bb4dd715acfed153f31d26c5ac582ab44c6cb5cea783db37d9a1358bc26c4d0933dc8a63c2628dac613b15f8699b543428fc75b1d8d8c33f127869db547ba97e9962a168e8568ae4cfc555d0a2253b30e02ee0a5ed28d1065fa648d8f425cb4f17029ced4dc2996b25ce350067079370e65989f32680b3237dd5c9efd4c65c2b8750ce02303b9904d3c62194b301ccce26c1b47112d9f10066179360da3889ec4c00b3ab49306d9c44762080d9cd2498364e223b02c0ec6e124c1b9b98fb03983d4c8269e324b20300cc9e26c1b47112d95a00732b9360da38896c1d80d9cba40625e9da0fb206e50480b3b7493849ab4764382b01ce3e26e1245d694c86f32480b3af49384937bd20c3f904c0d9af71c68afc1c84468896ec20b48b01da0c4ab49d24da02e7ff154c2d78e65b5fd9be3cf6521645d83fd563ef7eb7b29ce008e580896791fc42e5a70f003fdd9a12721f09b9dc7989032e959bb2cd616a2bb6d81c366a0a2958b2cdd86a00d8019460333c60cbc5f4861a21263ac1215ec5dfc636d452807760638ec5a7ec3854b2c9bdbd00ca419428fb0b943358b5d875914fb629137342f8e7516f5dec94fb1c383f94a2d8f9db7d3ed5b9963a6209cf5320ab66b50405d9e0c69c886e7fb21f017c750825ca2e09502a4b496732cda72af51f0718335351386115ffc427cf10f6e3939d3cb302e01d9a8a7655727b93100e2b93cdc1fb02e4a5c352910160e57e340320cc47c932800ce0a1c32931f2b391e6cace12b57fd30ce1993cd9db57967700fe372215fe975de78325a241ea4ef7b6fd988a0701c691d443201cd86411702973f711e3afee2f7a9a5c9cf3c4533ee99b707fbbd95430c70098a3cc59e8485831226b0b1d02f2c5ac54a0cc8ed362b7bbfbee75e095d9a9e801cddfe27a40f701087352d139c7bd718aa8eed40a25663a9f148bfc720edb4ff47956f1eaad236235b37947d0b1006cae392b396c9c4db7334099978a2d0af23d4590cdd5a01a002f3f15e399fe4fec202cbdc9764e6e0f4aef0293708eb512e7efc03b479b84b3c04a9c57009c634cc2497aa41419ce1300ceb126e11c6325ceb700ce7126e124dddb8e0ce7dd00e73626e1243d2c920ce77480735b9370929e6e4886735f80733b937092ce4126c3b917c0b93d254e7566711edb92ce2c9e0af0ed60d2acce1cca163919ce39a015b4a3493849970b92e1ac0638c79b8433cf4a9c97009c134cc2996f25ce9700ce8994385b0801a54eb1e30ea271c9f6cdca6c068a9a49e6ce78275c224836e3fd7ce0899329d10e61f5fbd463a7bdb8d3b42bc4df7c38a356889c227c979b5528a8a5601edc542a3fce057e3c251535ce1c513ddf52b606ee087c756a2ac626f9c0da34c607cbf890da72313a5965f510daf1c003a79933a9d5c67d6766016f9c4e89b22be393b1781e58c2d4b46b6c4a4cb585a57b0be093334c9d7749dac54136eff22780762753d192f66d92a1bd18a0dd3915db01f89b8c9067e54e494f0198334d8269e3dc8e6700cc5926c1b471a7a4c701ccd926c1b471a7a42700cc3926c1b471a7a4eb01ccb926c1b471a7a4db01cc5d4c8269e372bf6b01cc7926c1b471a7a4eb00ccf926c1b4b1cdfe22805968124c1bf78a7d09c05c60f67254c23611d972d47d40ffd242eafea5785d75aeeaa3c5146ec2e2289d0ae4d300e4ae8d337ae4a71b84b07544d609721040bb1bfd2614b168dd3e780eaf92ed24468b56c79da544e8bb6473949a803c76777396bcd8d892cf0128f73069f6dc58cad29fcc335b82a4bfc8249c0556e2bc0378e79e26e1ccb712e72500e75e26e11c6325ce1f00cebd4dc2497a503919ce5701cec526e124dd5d860ce722807389493849dbf564380f07388b4cc2497aa40e19ce32807329254efe436dda635f53b23dc0546c92d78da31c1d22f3ba0ea07a5e6212ceb156e2fc0b7867a949380bacc47925c0b9cc249cf956e25c0f702e3709e7182b71be0770ae3009e7682b71de037096998433c74a9c3300ce7d4cc2493a8d860c6715c0b9d2249ca4e7b791e1dc1be02ca7c4d99bc56ea0cf39d4323e0cecdd36dfbb6490701c886cdd463ea8ce5750621decc1ba94d51fa9f43fa649889aac21fa28405d998a554663d996b603e2a3201358958a1177e5add5c2ff78163055c22bd54e66b0f7809255c03b579bb380cbc6d9c89300ca7dcd5d1c433877892c0f7d17640055a9d85e32c7e3ab29c83dc9e04d00f0aacd9e574738d59b6c5e5d2948f6358d9983c6eebb4d38a5866cdfede300cada54b49de0bedbbadcd2ee6ad31b20e1af3177a22261a227cb53e7024fdd8f12ed40e63dd70d6e1ca03f9f709afc386587920da3c2bc00605e6bce74451b67d7cf0199c1ba542c55f057d1271d202183f92cf0cbfd4d8269e3f2ae3b01cc034c8269e3f2ae7b01cc035351d95705132fd54b3cfb8a6c79fda64301de834cdab78e74ec890ce7b600e7c126e1241d2c21c3b918e03cc4249ca4437964388f02380f35092769a5890ce73d00e761268d8c8ea3dc96856c64b407c079b84938c75a89b319c0798449380bacc4792b8be23cd2249ca41bfc92e13c1fe03cca249c63acc4f939c079b44938475b89f33980f3189370926edd4f867301c079ac493849f7af23c37910c0799c4938494f4220c3b91ce03c9e126774d3e92d6934fe1d80ef84544c65e0012f139ea86457ca57ecebdd8c0078eb1b7f0f1b55c8d837ed6b3268ed9c680a481be7cf0d07204f320524e1883a19c87d01c8934d0149d8cd4606722500b9c1149084f339c9403e04409e620a48c2695d64206f07204f35052461d59b0ce48b00e469a680249c4f4c06f26100f274534012ce2a2203f90a00798629200977922503f9320079a639eb306c9c9c3506a03c2b15f389fc4d1a2cb0f2248d7f5814e6d926c1b4f1248dff00cc734c8269e3fe9bbf0198e79a04d3c6b56b7f0098e79904d3c602e8170073a349306d3c49e35700f37c9360da38d5fa7f00e60526c1b471aaf5cf00e68526c1b4f1240d062aed179904d3c6b53e1100f362ea31c6e881ca3324d032e7637e8428ffccbe01da7620595f62ce7a5ec2b29b6c3defd1c00f2fa544d987797744d0af8c2c6455620a75355b268455d08e3a9e40057635f0d1cb28c10e60dee5a7ee62e9e876285c209f8d113f1fb5b1b25402bcf7f2546e3de502e56b7c799e3a59dbd369eff1390f02ac5798b3a6d7c61ae850900d5c99ea05fefe735842b46439ec75c04baf4a65e22f739458c8f849ecb5ccbbd954ca16f493d5089e0458af4ec5ecb782d44f1d244beeb780e47e8d390ba573ac6c7096034fbcd62498363638f70330af3309a68d436e4500e6f526c1b471c8ad0cc0bcc12498360eb9ed0960de68124c1b87dcf602306f3209a68d436ebb0198379b04d3c621b7dd01cc5b4c8269632fd23c00f3569360dad8e1311fc0dc64d28e1ca44510d98e1c5300cedb4cc2996b25ced500e7ed26e1ccb312e7a900e71d26e1ccb712e75300e79da9ee2c86db40e739fff2e1e1a2ba6ba1236c252b157009d1164488d05e0ed0de958a25d17c96fb1ad0499c927d8ac93c73328be2bb9b125f17c64fb42c92e7ba705195ceeb2b9cd75789c18cfd853f96895ff6614c0718efa1c4d88f4577cf764729173beaf28de68b050f3e1f6402e3db40f291a1224700cf3b4b985a8d5e6321dc8500eebda9c83d9339dc21d7cabdb4b702b9e77da6a2256dc993a1bd1a78edfdd4396bbc2a94b29474d4723e55f9fe18f0d00728316624a83a253e4183b05b99ec048de500ef83e6660084a39c6419c06690013c4489b6bf403b5df8e73cc6a72894ca9a408910a5a688ad1411c0fdb8d8f9db153fd5b9963a624b2cac17b402801f4e450e8bcd669a243c96f890bc3da872d8c1200b78a4711aa77e32011bcfce3a12a07d34151dd0b059a0da58d15697ddcd809e20b93f968a19cd1066e2dcd55eb0d300d8c729c1aa5332f3d896764ae68500e113e64cacb5710ace4e00e5939428b70e8072be13261752c3e6387fa97eaa6ada127f4faa127f0828969ea244dc93c54eb05d2d3af956c4f5591b079a6f06409f4ec57089ffedf50971926d73da06e07cc6249c63adc4f923c8519f350927e9426e329c97019ccf998493f40832329cc7019ccf9b84738c9538df04385f3009e7682b71de0970be68124ed21979643827019c2f998433cf4a9c1500e7cb26e1ccb512e79e00e72ba9e808c916ffba573e8a3f9fb9bd4df6f625150384af9a3bd389d03bc9663a9d085a45af35e6e618b1ed751b5726cd00285f4f554277fb99b8a0b53291a7a0c7f36b2a840f8384fe462a06df38c2d2bafd6ed463db3b8e9f0418df4cedf8fb967e807d2f80f62d53a736905694c8c635bf0768df36152d690b890ced0500ed3ba9289a72b7b8c1b84c80f0dd544c09e76764a57c4a38d994b0ad01bef7ccd90e30d7cad1cc7301ccf74d826963b5fd3c00f3039360dab8a1c02900e68726c1b47143817300cc8f4c8269e386022703981f9b04d3c60d053600989f9804d3c6791e8702989b4d8269e386022701989f9a04d3c62dd53602989f9904d3c62dd5ae01303f377bcd1161c2276b606e077adfbf68cc818cd83e4ec2e625d99e9e2703945f9abb7683b04a4fd611772840fb552a063872ea72d512d12fefce31b67d838147405efab5495314c65196f36453140600affcc6249c63adc4d902e0fcd6249ca427c990e1bc0d24f6ef4cc2996f25ce8b00ceff9984738c9538bf0338bf3709e7682b71be0070fe60124ed2ed02c870ee0170fe6812ce3c2b711e0670fe64124ed2fe25329c2b00ce9f2971aac323723dcd4d9b2724540278bfa462492b9f2b3799f1add556b3b9ac543629dd85aca54260911000375dab6636cf3b1e0410ff9a8ae48e25f6fabbd3120e7490e11c07da45bf99849374dc880ce72280f3779370922e7b21c37930c0f987493849576092e1dc0470fe695255691c65c7315955a92bc0f9974938c75a89b309c0f9b749380bacc47913a828fd63124ed29dbdc9709e0970fe6b12ce3156e2fc04e0fccf249ca3adc4f934c0c99a1a8493f4cc0e329c7301ce884938490f9920c3b91fc09966124ed239c8643897029c4d28717216702ed214b69695096125ce7d2e688dd863769ddc18b592f18585e58e4984bbcc76a4c2da15606d4a897528f36e96c63bf04a1c1e7c7e92b233baf0159b7537c1f9ab4a440eed666a6954e34aa0c29f4e09bc2b8b3f9531b6c0b2cf730702cf6d660a48428f2403d903806c6e0a48c2c50864208f05205b98029270890c19c82c00b2a529200957c191813c1d806c450932db53bad7a2d365f1bd1926396f5438faac12bfb8a9292aeb7f8910e1bf1f94f5ad29f1ab650b7e7bf209c7e8c9faf14703986d4c8249b806840ce65800b3ad49306d1c61ca0430db990493b05a4f06731880d9de249884152932982301cc0e26c124acde93c11c05607634092661cd940c661680d9c92498361ec09b0d6076360926e1a243329839006617936012ee6943063317c0ec4a09133fd568aaf36f1973cf89e59ba472c1f69f6ab43b8b82ed463d1cb298cd745e2816d36ae1d048a31dba47b678bb39c0da9d126bb05d686ddc81694790f47b50a20cb78ba28d8bb7ef025eda33154514d63f1aeba563acf4d341c04fb73209a68d9b5b6d0d60f63209a68d9b5b0d04307b9b04d3c6cdadfa02987d4c8269e3e656fd00ccbe94303334d5a4605b0811e6a264b5d06280b71f25dece2cda6a5a235a457ceddc52d15a4ad1d62c649b0795804a52466356e563f76122ac6f92a13c01f8637f4a946a2a236cc5634d4ff2b63b59f2ee0f3c736b733c93705098cc33cf039e3920158dccfa05919f66a68d5bf58f076807a6c24bfd55986cacc88f02097e502a7a4193e90a219cc640e6a36703b0834d054b98af92813d0d801d622a58c2ac800cec440036d354b0846d2632b0f900ec5053c112b6f5c9c06603b0c34c056b6305ab2f003bdc54b08483ce64604f046047980a96706a0419d82300d891a682b571406f37007694a9600907f7c8c0ee0ac06651825587a515b046382c8d0cdf91005fb6397d00361e61311ba0cc49451faaff49e236ae062904bd53b926e124dd00930c672dc09967124ed2ed59c9705e0b70e653e24c3487d4db776a63ce7903805960124c1b0fffb90dc01c6d124c1b8f3fbd06c01c63124c1b8f3fbd1ec01c6b124c1b27355e05608e3309a68dc79f5e0d606e63124c1b67885e01606e6b124c1b0796af0430b73309a68d3344cf0130b73709a68d3344cf15309ba77b844fad277c9268eef1065f318b6ed63f8a4d637c0f10773bff62e7f74cd15f59c39638381639ff0b16037b39ffd3dd8f881319f8166fabc55d2eaf44c8ae709e72cdaa59f610e7951db843b4960e9129faab2638cc6b9c77e6b15211fa3a369fb98711cc71fe55cbce6a05924c710ede5ce75e2de3f3557908958e262b5895b038f6b082cc480bc1a994ad910438c04ca9eb1ae6ee8e3243f69495393617094daa9c779a8a70dc467466a42df8a52676ce10fdbcd5422bde6da99f60e74627a79119e984be354ff05f2574e26ff29ec839526bae3797b0abd07f059b2c6ce66980c768ec567a99915e8c21e127da742f33d4967ddc4923918ed22f799ccc12f159e43c2b12d7c23a725999ce6b91d1ce3f6eaff9a8bafef25172f79a0af94bdd4f2c937b657c693b72d78be8f3a2f2064b4f892c72b300fefd32c1b254489d91d0d2c4f6e169b34d9c58c9e21b0a6ed1f68fe7f12ea35db869f708cf80163831ef0a2f75925a95482455acba348da5ff3f6d3bb3355ee40300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/d4d68ac0fcade3b4483a4d2569fc2d54.asset.meta b/Assets/SerializedUdonPrograms/d4d68ac0fcade3b4483a4d2569fc2d54.asset.meta new file mode 100644 index 0000000..7497e1d --- /dev/null +++ b/Assets/SerializedUdonPrograms/d4d68ac0fcade3b4483a4d2569fc2d54.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e28f5e3c05524544ca9fc6dac2b690d2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/d62a7e56981557a45885059f71241f95.asset b/Assets/SerializedUdonPrograms/d62a7e56981557a45885059f71241f95.asset new file mode 100644 index 0000000..0351383 --- /dev/null +++ b/Assets/SerializedUdonPrograms/d62a7e56981557a45885059f71241f95.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: d62a7e56981557a45885059f71241f95 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec5d077c14c5f79fbdd03bd21524f4282540a85204129a7408454121a440241493d01415145114153b7654ecd81bf686bdf7de7befbdfd7766676edf6ee6dddddcdc1cbbfc7ff89165f776bff3de77debc79d323d9c4fe6375b3ff9a41a6925cd2834c274564295962ff2bd7be2eb6ff73eec4f3c9a4dcbe2eb0ff2eb07feb4632e37c49ff74b15ada7f8fb5ef2a48a5fde57252685f4bd9efd348b1fdefb1f6b7c5f61d7d5a62ff5f6cbf6555b33f9a4ef2c8243291b4b09ac58198c13eaae0cf2caa9755cbfe7b04596dff5acc84a28964b39f5ad87f4db37fa960bf2db68516efcd260733b516dbbf15dadf9493321b733e43acd5fa0cc2fe419c4b0f7ecde6d7eef6ffb5f9bf33f8bf6bf17fc3f7abf36bcf04dfef05beab0dfe4d19da1ae3fbdece3532c4bed6b01f57827bfaedd7fcbd1c072fb23006565f7eedc7affd39e6f204e4afc9af03e2e81b0b6320c04a84b35afc3a885ff7e3f2ae4832fd210e47d605008f723914c83308a45d1bfc4e9f0dd6d05de4e3febe7cdcdfc9c7c8169e7f1ff3f7459ac3f8757f8e6dbfd3847f4b86f36b9f38728d70be6379276cd64e336319bfcfe5d73c7e1dc9651bce655d09ee756511793a8a630ee369ac923c17efd3df57f3fbd1fc3ac6975f63f97b87f3fb0312942711fb13328de0691c01ee6d1eabcd8b8125f23dd797efb9fcdbcd0e8fd576f8f401f627c51dc7f1d624a047377eed0a30c73be94e3c3381ef27f2eb047e9de4e6ffc49fbdbf45f2b85c47827b5bcfeaeb7dfaed1b473f917657a083787f0abf4ee6d7a9ae3c93d6268099efbc5beb017e3fdd91b1466be7790d510e844d4f8b23abc8e391be3c1ec9712b39aef03b339c7b2b8bb83e55e0d0ef8ff2e18ef2e18ee2b8c2f71f90a09c33f9f5207e3d985fe7b8fc4daec69f1dc8afb3799aa389d717887238cbfdb6f93c45de62e5d121c45b9ff5e1e98e49d06ee6f26bed04df17efccd390b9805feb2498661d7e9daf91665dc7166afdeeb385e971300b1d7e6bad0132d838b545392de2d7627e2de1fc0bbfb312dcc7b38378b22ce0b2087f3bcf91a54e4b7e2f6ca0d42b0b39d427d3d1a9932922ea93b5e09e5e0fe0cfd7817b2aeb2c279d3a4f73cc45fc5ae69379b1399959a86e7f57bf29b08d44be8b655f4b1dfdea0e70b0ebcee1cf45ec20642b70e5ae351e7c2be448a43c94732e26f8389ec06510dc56f8de3b06dcd3eb78373df66ffbdb7ac2b67a83e7f4db63c13dfdfdb004655d4eaada2cc59904d29ec4d3e6febfde16feee0a52b5ecc9bea5d789e0d9448e2762c495a46a3d26dea3baad07f7f4f7ca04755b2591cf4eb7fe9818df8af84cf89fb9ae3dd47c9d3fe3b1596432f1962d518f0f74bfb144b939c2b96f2864e1d7c814c0cb1447be063df93b3cf620eb88bc9e3d1af0c0cb2359eba6dd5ac87b548cb4847cc7f8f45eeae2d4cde4b20b3fc66d2d5a66fcefd267c2ff9ec0af27f1eb89eebb5337f167c7f3eb462edb54e2f1cd6403784eafd3f8efc7817bfade712e763361a3220d21ab2c3f4ff6e92ef301b1ecec14e7dd29e2dd531d6e1b6ee3bc3ded93610d896dbf7b73bdf289d7fef339eedf0e6e2361c79bf9f50cfe1ef093115e96c8e9ae4ec3441d7b1ac0ad0dfe9d888cb1f838db4927daee38875f459ecc01d8dd79ba335cf9a2b1db59e0377acf63387226f1d439316539975febc7d1a707788f5ecfd3d03fd66f35f8f542aedb4ce26d8bcd74f2b8f1d731b02e72786a29da43173bdfecf137bfdfeafcde58d8c72540279a06a89b1b89f27129ffed40a0376f53450e02cf78ec1f990d6c6616ffed325ffe6cf0fdbe0d60c87ebf1cc820fbfd0afefc7847f626e2f9953e5dcef4c97a10f1f80b7255555d2307f9d2167e2b91bcbc9a7f3bc79797739c7c69b22306d635f2bc6cfa38bfbfd69797db7d7979b0242fafe3bf1d02f26d7ffe6c2ea99abff3000fa22d753d9297e2f71b00aeecf71b810cb2df6ff2e665b38efcf9cd485e42f9615ede5255d7c85c5fda1b13c8cbdbf8f5567e95c5afb713d78f53dc1313c0bd835f8f8b81dbdb877b5202b877f2eb8e18b87721f226939eb075d1875440bcb64eef6dbb6dbe2d06d6dd446aeb2d04e7f710afaddf4bbcb62eda97d03eeee3bf15baf94fb85f881491aab65e0cec84c7abe47ef00eb455f1fb030057f6fb834006d9ef0f118fadb76cc49f3f4ce4b60ee587b6beb3aaae91225fda022b565e3ee2e359f05b42bced9512277f5a0a4c111f5d4c62d78d8f3af8478836d6631c6f01c73f19dc5bbc6f04a6bb90a7fbb183d34ab413eaf1e73cfe69750f7ffe384f4fc4174f38efb5eae87bef49e77e8d68873fede3ff199fad1ceada5b5497a7c06f50b745c41b933ccb9f9781bc5a049ec1bc1a9e20afcff1ebf33efe4a39de29e09ebef7a22bff1a516fbcc0afe7babf351671bdc8df7a408e97e4b6c2640579a61c23099d5f8ea3b38a4f5a4cbc3e69b163077b0d8881f53a7f674e8c77dee4d7b7f8f50d8ebf8478db214bf8ef6ff3fba5bedf453fc20e97fb66df03390436fde6d404f47f875fdfe5f8cbf8b79bc1bdad5beb794e5aad17f2eb3cfedd7b3e9cf75db98e6eedfba64f02f298f84df42b1d46bc3ee23047b736a24d2c6cf7a838f6f401bf7ec8af6b395e39f1f607f23e9c98fd58f1d28aa157a49278fb0ec4f8d347fcbe82ff2eda682b7cef8bb143ee1b23cb7defaff2bd2fc6a53ee1f72bbdef934f010ebdffccd52dc2fba9c8e7e099689b7fe1f2d396fb98c86a6fdae44be26d0f8a36dfe1fcbdd3c1779003f1bb68d71ee1d3690dbf3f13dcd3eb913edc237c5c1de9c33dca27ef57fcfa2dbf7ee3ea787425f806f0c9c6af01664c9bfe8c631ccdbf390bdcdb36ddf6f31818e25bc1c13a8e7136b8b73132331d79336394dbc8313efed682e7f47a2cfffd1c704fb163b58db8ec91f53eddd6f36f7726f0adf0971b7cba6de018bcfe6fd72806d677fc2afcabc84361b314ef0449be0add78fb3b723c97610bb8b76568c7db90e40722b7ede37cdf9febfdbebd88797fe4d79f7cb26d24de3eb05ff8f557dc26c96f3ed9415f5b54be9f7df289368190fb249eee79400ef19c5e37116f9d266218dea71439d9f7bbe85b938db5c72a23cdf8f50f92b48f257f02ac44fa7e9af3eb5f1a69fe0db01249b305bffea391e6bf002b913445bcf75ff269d27f46b11248d38af06b866303ed9f07f94b9f5bfccafbfe223496a576743eb81779caeda8031f1fb2f81c26ab466cecc8a91cf302708f60c6d48597258b8f7b5ab5ddeffb0ce6cff89895c5fb13ad7aee3b7d795f87d5805fb91fb31a021cde7f6235e6b26ee6b25f08ee45de0bd9b9ed597bf0dfe8d5e6b3339729721ac7e0fd879d277b6564bfd706ff16f9ccf13bf2b132ab8973df8df73d584d793ac2a7f158cc8a333fcae265dc6a1e437f5e3eac9638d7221e8b975ecc32c1b9cae2fe2c723af1d48d562bce711ef85df80a7a7f067fff62706fe375e171bdb527bfee85eb2ae5a835c73b07e41dbd3fdb6b0f561b2edf0ef0bbf02bf47e0b7f7f2bb8a7d773f9f34b403ae239bd9e47bc65e63cc42eeceb3ea25cec8dc8d8364919cf91cb28b5cd4c79fe45f3eb6ff79b0ebcaeb7daf12bef2fe828faa7fee3cf3bb8df741765b73d7f67902fff2f05f776fe772df2bd2fcaafe86b3a17dcc3f73b79bf8b9cc5dfbfccb18f088fabacce24b60fa1e554fcd6258e0dc27779bbcada975ff771dfed368f3fe3739aac6eb84d5b3cae40cb2f4c53f8d758fe205b018f8fa35abd62e0f556c0cbe1d77ecef31c1ef3583cc6b6f8bc54ab3fcfb3f389776e04afcb646d4a6b401c39e8b38171f481b28a39a1be32182d73927a23669d3708d801c5116338dbc03dfd5d52cfc5c4153ebc33717db7985bd7053c13754a5392bc8fe76525e2ebbb8a089f7d11f18eb7d27bbb4c762f73f4e9be09c845afa37cdf1d01eee9f5425756f66f8ab5836389ba7a881733b2d5e56f70257846df1d0ab0a0afe1d83d0597dc7744aee4ef5d0eeea1dc97f8e4bec4c1e9c1dbd1d172dd3e0ee7b2fceae4fd2d72154feb0ac9eff4f995e03d7abd8c3f87f7b66cd9c23ff2f1206b18bf0ee7d711fcfdab89b7ec5dcdd393b443a2be338e9e51d92ee7d857837bbf0d0b5bdbe6b3b56d5c8f071c19449e59b9fc9a27d7c71ae9d3eb3c9232bdac515e7b137616cf4e7a8a78af13fffd1a45bb690dec86e25eca71ae05f7d016d6817b3bfd5ed51cb97bf138c1e27339ad315e0ea3f80a36e12fe3ec9e7ebb4ad166b80ed6586017708c48fc2ee6e31def7b3ece6773dbc1bdb0a7dae0df3627bdc5f8463ba0676d1fee78f08e4c9e09401e9b97de228ee573b0acc9def765736fad49be7c980de449b46c8ab6cb15121dc682df800ea9cabb98f596b0f129c96344ebb4a91a18ad38467f0d5d6a03ac44fa0f445b46635e348b5d045622698a98355f23cd7a002b913e0b3a1707c6793cae8bd669d4dfc1fe517a6fdb7e5f31de28f237cebc558b8ff75a7c9e9305e6db587c5cca12f36d6c79d6f2f26d1de8a4d7af9b627a7c0e867508bf8af912d712ef1808f7c3b1c640e2a51593df0207b34f19b027fabb8855b7136f9b7abba36f7fe11bf8f8ba554870ff21e285587175b13c9fad7971782c41bee3fd4291eb7cf25fc7e5e77dd2161fbfb516c690add4b9ef32ccb90e9cec4b8b7f1bb9de97d6f54e5a0344bbe2d038389c9fc80d3e9c1b1c9c81a24ee563d8d179ad7edb10d8d5c1377c6eaab5c4c717d66eba9178eb871b91b4e8374b13c85fd13710a3dd24641e20da318725671331edbd428e19f527624ed4c5e0dee67e3fd18e15368d710fcb65791cdb5d9e006f2be2f046b19b70596f26de18ed664776aa1a7ccf1275b0187fdce0fb5d8c1d8a39c1c2a7c5d387cfc9b6788c6a89b1c05b88d7a7dda2cf5dcc3c3e8a486369ebc8e431459c1c8d856ee53a5d07ee6dae078b7a40b4d5c5f8e2f55ca6595ebcc86dfcf71bc0bdf82e913ab93dd03159bed602ac44d26ce3e83a4494096e6f9618b3bcddc58988f97ab2b9cfb16412edff3b88d7a6efe069af71b08688b96ec26e8e8dad83c56ddde2b66d897977223fc0bc9068db5ff4b16f74b1a33605c6f7d68b3841f469ae0558be3599913b819ce2d9dd007f934f86bbbde946ee21def6e03d0e2fc3c45c8cd6deef22f7126fbbee5e1fcff7f1df6f04f736de503eff6be8d73cef08f19683fb811efe34efe79837f16f8e7330f7e7eb7ff67f9f3fe7e393161f5fb24ef5e1dd25c993bb529827c2bfc5b19d8898ef390adc83368dd03bfafbdde077ca216fef597cdcc812e33ba25f3c4dfa46f5103eea582e67926be1ad331c7ccffa4a3b9f87673acf878b796bbc8c1230c6252da3620e26e7c53adbd5219fdbab75164f633d4f83c7fbd639cebdf5b55a9a645f6fdeb17b90b7641f9e9ee83314e324622dd10109a6138b473e0e61897ea5075c2cf6ef64fce8f9cebba3b7f2fb0b1c3d46f079be239ec7312cde06201d63a47d9a83975bcf799e2bda51bcffd5e27194c5d38ff6873c48bcf1e583fc77594c104bbf4b88d796d792aae53bd6f75738effad76fe7beed3ccf13f133ef1bb578ffa3c5fb4b228f136f6cf3780c3db82d5a97c6b6114bf42bed04f9bfd3912b4ff47f731ead6de077384746cc537e18603ccc31def77dfb08f1ce137a04bc0ffbe21fe6d78700e6430ee6c83e3ecc47f9b737837bf13ec4e4df8fe27a59a2ff92f7b1593cbe92f66d89b6b1e8fb9e4dbcf58df89d9769eb7af9ef965847d10ef9fe6aa01bfcfd46ef7b515bb805dcd3ef656de26d204de1cf05ee65fc7a8bfbdd38d13ebd39411b82f85496c788775eea630eefa3c578f1ad294c5bc4b03cf61365a58acd0abece03f79a652766dc2ac6532f481ec3ba036025d27f25d67f8898e009e28ddb9e70f2618c8831453d26e2b3fbbc3891e789d76f0aff1d8bb31db165b5783c1079927863ed27b96c9f3bb8634519e76b35ac07529736ab63844f799a78e70d3cede3e029e28dbb9ef3bd2fe6e877e0f7cffa387fd6d16b2c9f236e3d48aad691e2bddae0dff4fa0c78f68c83734026900ba6fb0cf18e118af7451b50c49d7138f2e00a5ff1900fe30e370f46f339b616f7d7a2ee15fc59222e3d5c4d8e9876fe8884435bd77162de3fe7c4dae9ca394ec4c38ffa7e8b9796f0af2ff8ecf5059e26dfff689cb04f618b37c7c1f7b7f15f24de36fe8b0efe7831e77514f80eb4f1c70bfe1f239e183e1adfbfc4df173e7728784eaf2ffbece6659eaec07ddc8b5b65acf055e22d1faff2eb6b404e28cf6bfc5e8c03dfe67bde1ad8dd13be6f5f71f333da5679c52b9725fa7f44fdf624bf3e959c1e31db70f1f238965d3d4ba4ed9809dcff4d14f92eece9e9386925d8a69828fa81851ff3b529e2a613abceabe5e3f475e2f5857cedcdc4d7bdefb1ef12e90b127b4b88353347827b1b77521eb0ad4470abf1efc498c1f3be3c89957f625d15dfa3c0026baf8e1fc69ff13266bdcce57ccb9527c2d716a1ed4dface9b71e4e7edefc8dbc4eb9bde76f49adcc7c19d2cdae9bcac90d9b171add77cf8ef70fcdbc13dfd5db2b78325c68ddff26278e6e36fe438efbadf47e7b4f3b6b4f5a6fbdbf17c8f02eb55f01dbd7f03e803e214e5b2c8db5ffe75aa5344df80686f9f1a87b7771c1cffbac4296f2be2bcebe088758bd6fbcebd58b76889755c62aeea079c97f7bc3c587ccd53e47d6077ef8167f45dff9ac438b2499ff13505910f7c76f881a3ff54defe9f2aea1461871b63a725de8b7c08de13697de43e8bd6a11f033d3f02cfe8f5132edb1de0de962d7f980ff753fede0e9036bd7ec69fdf09ee81af897c4ebcfd5a02ef4b20d3e74e9ad3848d7fe44be30be2aea5a8ee6cf7e6e1e10b80f529782630c4b7207d76a5cfefe279f0bb37cd787910b3dc88753a5ff9f2fd2bceedad4e9a3344f915f92f64ff86786313cea9f509fffd5be2ad93bf05dfd1ab58837529b8b7d39dbed9fb9e687347bee7efdf0deee9f507fefc1e9f7c3ff8e4bcd7fb9cbd57dbfb4d5407310ff326eff368ffc0675edd62b56fd06fef8b93b6e853e0659bd52bb1f2ba9d8fd79bc1bdcdeb2c518f7cceaf5ff2df7ff496198bdba4753df89d5e7f225eff14cf0ebe4ad00ebef3d9c1778ebc33b778df0b831d44c4ba30593f4e9aec40946bd84e167ddc71f34ce449927976e0f8f0e559945759bb5837cfda3abc143fc07fffd6a7e7af483ef0f59091df7cf9f01bf88e5e7ff7e5c3ef4e7a07bdec7d2f9a0f7ff8f281afb98afc89e4c39f3e39eff53e4fa90ff57d1ff959e17bc93c8d085817a89a8fd1b4af4dee7bbf1d44fef2e5c32fc43b17ed1727dfe688fe9e4efcf9dffcbdcbc13dfd7d900fe762702fe417ba7fef9531f21f6273bc6c513702f385dd8befe8bde5b539766fcb7ef018ef7b42d78c88d7e632f8dac28c0cb9cd6564f8e4bcd7fb3c303627fbfe1f3d9bcda8a661b322ed246d36d5369f21c65e84cdffebb3d57f1dbb992be636739bcfa8eeb579760f6d5e8623f417f56226ff16ac3164ffa6e9f1f91273b702bd65efd26b0df0ac06ff9eef4333f77d902ef2ee3c318ec0ebe48ca65c76b1875127dff3071cece8773cf6b2785c9101fa44a2e5a536919767a1571dafcd66d401dfd16b5de22dcf7c6fdf8296def7a2e5b91ef196673e4f37a33e9197e7fa3e39eff53e4f6579ce1063543370cc7497f1bea2fdc4f776cc6840769f32dec0b19542c271443f64bc1895d75396884f445c23da222b7d36d410b171ee3f331af9eca011f88e5e1bfb6cbc3197fb6fef7b511bdfc367e37c8d764613c4c69bf8e4bcd7fb3ca56d0cb107c52c1c33dd369e6c5b3768f69c705b5b8c69f8e2f7681df59bfb7d95985dc46c47807bdb168fc8f461f3ef329a7965cce0ebf0a3b1ff3a706fe394f0f58f257cffe7c37ff77e27d6e14475df80702b744bd6867ed3fb3eaa7792df47c7da12ad3b9a7971a26d259fcf89ae77f8cbfbbd88f1a36d2a11a75c0aeeedfc59b8ccfb5e343e12b1fedde0de4aa06d26e454689bfd7fcb5bff7a3d553f114d2f493fe32fc3ca7eee37cdef7fd5fb7e77d33f5ad6f97acd8ce6fcf7ede09e5e2db70c89766ec5cbde34d0f6342f8771dbd335883736a9e1a453b6c5fb5e18dad3d13ee81f5dcce8b39f009782fff1e0fdffd545f8f7ed34f5ff49ed7b7f5dc8daf2321be7755eb4cdbe0adc8befe8b5a6cfc6795b7ce91aef7b511b176dc5bbc13dbdc66b630a3915da98ffdf6d4bd5363c6bcd63bd8ff96291deffeaa25dc35f3bcdefff9ff3ef693382f69525d67bfcebfd0e8d0f44fd4fbce52bd1f8a07287f7bd30c407a25e81678afcbff6c7608d4274bf0d103bfdaf6caa7defefcfb1c45e75fe390cfefe4524bea14587fd9e647cb36a8ef7bd5d11df68cf61f85f194d7a0ec7ffcaa3f77bd1a7199d630ce737d83c17fbce168ddb0f2b5b0361f1df1e53ff36a30597672db8a7d796fcf93a704ffb6c5f77e4a6cd1886399c5f9f889db6c08d88bab915c73f0ddcd3df33001efd7d338e294d674f9f3e7b7ad38d889820d63ee82ff27785af1336fd20b8a757b04f4f44f8c736eeb30cbe2750c6dec4e36b459f79465bf06e5bf02ebd66f26f8e00f7b63c47bdeec316dfb5f3da1dbba772d5e0f7edf9ef7c6d8c98839a01d6cd64b407cfe8b523ffe661706fcb70249f7f7cd48d485a9df877dbc13d4cb333ff7d27b8a7ba1579dfcfe8c2df7b04dc0b8e21cea33e1c9f5c19603d5a86d803e08538f6ca7915e596dd83727b64a657a77878b1e6a5466af2ab588ff03e4f731fe2a9bbd93dfd3dd175c062ee9ad05dacb1d80eeee97b5f272fbbf05b917867f1c6d2bfbea34b8ed807879f3b1d89779ea96c9c95c794195d89d77f75756c632d5fffb46e184f83ef711de1e39d1131aed9d7cb7dd476fb015be2fb02451a8267fdf8b346eeb308dfb33bd2d8cdb713c4fe34dc7f5af05cbb187a45787b22a39b2f2ff95a808cee4016beb76d460f1f173d1c2ed66d73643946ecb9cffb8023c217b774e5dd584f2e4744d41f1b1039b37d72f2fd71337a0239f95e2919393e39731c398f19ef9353f8f4bdbcf2063ecf12e0c2e2e7fc65f402cf844df7aeca59a435f80ee443f4f7360043f6bba89b8ef73d17f54a1f9fcc7d40ded406ff4e808f987e44c44799ea1891763cfd8dfc1ed469165f579031c0cdc793f3c033fabea8f7fa735d1fe369897a7a20c01375cd7e404ef1de20c0c9208049af8389b73e1fecd8f686bfbdb247bf1b42bcf539df873763a8af8c0ce5387380ac804f760fdb71fbf9f410e7235e0cee6dbce31e70b8daf03222df30af7cd1dff7f3fd2eda1ba22c0e075cfa31877bbf1158515df6239e3a382adb609026863d4c8e1d8f0791461407e4bb7816956f9057bef5df7bf384ed3b936cf990f9177eee57c6089eee59e0de96fd78be9780588fc3d69fc5f2571c2fc2f7348988382c97e33f0eeee9358f78e2da0cdf7ac68c91fcf715e0de96eb844a1fce281fce281fafa389a7cd15fd6e34d08bfefe84c3fb092778f589a7b7d4a774e6571e7346f8fcaa88985f3586a7791eb8b7787d419fc738e73022e6198ee5ef9e0ceee9558cddaf03f7366f1bf31dfd368a79123c968dece3c315e77efbeb41b01f6ac664a04f6df0bb95783d185dc716e75c97c8be3efdc671f94e01f7f4bd6e6e1a278b3304f91efe19e21cf975e0dee6e4c485cefb2789fdf4c43941a26e9d0c74e9e99363a24f0e717ebb649d68a4879737b12634439c052ed608c9b816e981bd6133c459e171f8cfc84f01ffbd12d33b92e3a6718ab00f7efe40c60420d3047e9de4cb93494e9e6c6aed7d2fae7c3ca688f495e4593f9fec537cb24fd93df34cca53079fbcd3b91ed7817b9bff93459f89989bd7de95e3e4abbc5811d12f70aba22c62cd096f7744fb4a66106f5f09df333832d09561b318c711f157d724b8c8f1a53bcb972e5f57923113d892884d409cca7ea757113ffbfb68c0daf38cd9e05d7a9d43bc31dd1c87ffcd6b7cd8e2bb838937a6e3fb1c47fb4dc479d0fe3e1a702676c621e019bdce23de3e9a798e0ca7aee55ce7236915106f5c5fe04b733ef1f6d1cce7bad5f2be9f5148bc7d3485806388f3a80fc727574611d091f70345407b47da47c3798dc609a28dc3e3af53767a758a8727b5336107c5c08e783c975102642ee1d705881d2d04ef2e04efd26ba9cf8e4a1d8e4e7fdf872dbe3bd46747fcacdf88c83b71d6afdf8ec059bf198bc0337a1567d33e0cee6d194ee3fba99cbe03494b9c31bb1ddcc334c519b33bc17d3580c7dfcf5806645b0638a75771b6ea93e09ea6216c4a9c8d7a0eb8af5655e68c0a90063f33343280c4b631b1b7c628700f6cec34d12f3238313cefb3ea163b4f6e0c2926056419c9669dd4349a9b41a6925c3bf69f4e8ac852b2c4fe57ae7d5d6cffe7dc89e7e2cb6e2433ce376c8c9c8deed97fbab0642bc96afbd362e70cb369f64d85fda8d87e9f628cb5bfa92439a437c35e6cff5668e3949332524ae693566caf7a917a2efbbbc07ea394813e955125893bab2441852bb3ff2bb63fabb43fa44256d8cf47db4f96d8ff97dbcf0aedfbf1f6957e358ff422b3edffbc2833ec64cbc872fb2edffe7b19c39b678b5df5cd782a1d6c3ff57f33d5c65cc2a45b6c3f11842eb3efcb9884d3d8df2b98a4c54cfab1f6b34afb19d5660119615f57b1d4aaea5e6eff5b96663ea74c2ee3c14acf2d7614a0c8a63c5b1b2a7d36b3c5ffe5c8aec81136fcf45486530cab65b3e8e5c42a39f13f0e1d274307d5c6728c5e8c32cbf3ac37c966e36e53ab30a8ae63550de5f6edf0dd8ff489a98b9c199add7b310ddc1c5eb747e3bf8fe9bc665575af6a39249b856aade3a8168b588a97c54eab5351a17af56a3da9a07efa2d19fd6ce86a5a1ae977de2b65efa967400d56f97933801d5b976f7bb5c9a0f29cce842f63a2f995a1d04b982714ff2ab6bf1a69ab53ccdeab407f81c257c9ef9e54b89a2ccbaa56c8f1d4c6322d22cb3416c3e7ef9232333b8ebf94675bada8166eb665b328ab650ce3c6d262e157751e8389e277d97fc34aba7efc55f3a336f6b74ada5e56fbb527e635bba8c3f406f7dc366949fe695f7e5c5d9e5f75587e252305966319b21cab93ee6216bf5e89955f75a37ab9f945ffc839ac87d87c3c193006abc918ac9b6e9ba7bf2d652805f6bbea1cd241f1ae7e572527b0016284f145c028ac2ea1b027a5b0a1442a52bdb64f2a2a10825c439639f5764d259e9c71d39ebe163e0aaaa3c6dd38661dac6ada3565ecb12991f38cb227da96d3ec46c438fbb702fbfd6216a8d2e7936dc4023b6d8a379ca5e0b647bd5fc46696cec1e8ee6756ca6a13c66a47d052d6950c63bc9684f19ed45e9b4acc80f9387f61688c1786da58316ba65bccea60c8cd7591eb62c82d7491eb61c82d7591ebcb8a0d9bf933272dc5c6ed9211ff1a617fbbd05666056b672fb7bf9775e1c42e2ead122e2e7bb2e29249641d4b6a1261c5a4812cefe8c3bd6442fab36e4f3ceb1a62c0ad35811b61d6d646d7da1a6322efad29f21e98c86d75456e82899ca92972530cb89d267033599166c692ded6a8d324a338ea91041d7b6b9b7098dc81604dc3d8326045b6b92c6ba80fa6d5aa6ecdd642963d8dd29d3d79cc93cd4f327b3a513395f080675167248be2c98165514b59165123ef82598e3f8b3ae059d40acbffac14e4ff9e18f83e2900df0ba365df14d0d25a66b9cca52f326ab9d3ed67cef0c948f66b29eb73773197b27b9a9ae85188f505b5df09f6b5c89690ca12dbd2bb467506fd2bacb6a1d368cc4ac627323b7f6a22dd2cdd59c1322f0c5610dbc82c8ed6bc748a8956cdbb37869cad8bdc1643eea98b9c8921f7d2456e2743a68d5e3a745fa5e396b6cd26d9b939d57e54ca5a71455553ab89a7d61e7352392970521d30f03e2900ef2803a7bcd229543a61552799f763d1e16ca3decfdb8ccf61756681fd7601f8971877f437e173e278b77e32efc602d3b6c4df81a09a72ff44bcd700e6bdf413c3bc5367cc1a066a5a4317cc86f74b810d67615e6490ae17d907431eac8bbc2f46c8901410d255064eddd75099f393a2c77076dd30f4fd13319218c0dd314e86a580931e3270dab9353cfab20bfe9ffda70a783d1c3c1b937c8444f2bfc6469424ef891961aeae11f6c290f374917b4b90b3594b7b1d496f3f997cbad3685b2d9ada24bbcd742871e6a9540dfcc47c97a9f6b5844951ccc762e34f938a5d938c24929a84b5a34792c4276d99d7824e568bb0aa872e91c8b26829c2c2609934ea61b3bce21bc3520f163758259a83799ab1124ff3bacc8dc5f0347db0227b806e91ed2b43a645769cc4567b525ba52b27eab04abf4a3a63f074fa49d2c966bd3c87ef52d7e08ca351bc123603d1c19b685f2bc94a66aa8bc0048c7cfb9d723b8d624f7c959c33a0ab1bdac86a6582750f4d64c5616802c5c1a4565801e88f050874594795f083764d4d25936de4b9ac181ec61e53969cdc2d65af9692c35954eb4c2654892a06c8a4a1e338743147dc70a5090e3c10039ea209bc1f56c6a7ea96f14132e47aacd8e947588331b1f375c51e8279d4e9128ffab7a5e6518762e03324e0f744d4c0f7c78ac2cc446c2486550fc38067c9ca186d8ce7b2b91b99f6ff4bed2f68d771012bfd99ac3274bd41a65dd64bed7fd10abb1b787fa9fd8633795745cee198511ca86b1423b07c3b48926f3f2be65b2e063e5b023e26430d3c0fcbbb39b2bceb45487412e0425eb779bd61266be767b299f3cb79ef15cdb90a96af99e408bb0971a47dadb4dfce64f54019fb8dfe9be634f5b52a793a1293ff6099fc7580fc9381842a298ec2fcd62112bf6529faadd132701af8cc2548e0338f2413f88cc1682b90d1463b8a47dae10b8d5c97b3f7a73103288ec6ca4529aa20c74ae4ca6603464bc8ae0cc8686b81ae33a860ff7643149ab63b7f5527f0a24bc8fc8197f8230fbce8a2b42cab37891f78a5427a2cc03a0073aa4512a76aa938d57132645a168ab1b250925459188ff9d70512ff4aa7d8aaf8d7093283668394cb76a941e3c5752ac3a6c55abf3541d79565f8bb16d8286a9f04cc36553276b5a8c7a1ef1772e62aa8a7a6f3d4e6db6253a173d95836259f953779812b65052e9d9263856e2266b2874a4c768ca2c94e928153935d24c9cd9e7bb262ae4cb05f9e525c9ec9b222c446cbcb776911ca6308e9284665b262c486f4fb25608ca994b32d1b9eac60354811af419c7aaaad459d7e398b118aede7b49681bf77b5eab32254610750e50c711a0b02cb6d5916b0785b5ee816b342976e3db18237052b784b2405ef75c5823755064e0d7da9ace0b566a41bcc0ebfe48b71c9a76141c0324910a0d4b2cac7083f4c4278b51a6a844fc7c42ed7157b0626768544ecf58a62cfc4c02b25e0f935d5c067c9c0a97b5f4ef47a090ec480e9464a559a1c742e80682b16fa7a0be69362d00750c49eacb6ff2eb39f1532884cb6bc54cc915791f2208cdb95126e5b2a723b1ba3609526b77364c0d43c5727021c63acfc6019308dc10f27480c4eb77b508fc10fc1685f23a1fd2a45dae7cac069313f52b798cfc3908fd2452ec0908fd6459e8f21afd5452ec432719d24136bd556cbc4220cfc1809f81c45f06219382d6fc7ca7c53274247eadd50d76942bb7d5b057643b492799e4cdbb939a14891a78fac84cded723a4e54ca790926e77a999cce6e16742510addb0b583f2a4d71921dc9aba4ba00a3fe3809f5672a52bf1003df2001ff5e11bc14e3eb78195f2de3e46b115b40e23eed653f55e1f1504c9a1364d2d05b37df54d2598451ba5142e9b63a6a9496614a9c2853824eb775e8dbcfa66c22ebf42de03b71ac60d5b83a8d8b31094e9249403ddbf868603039c9b0600946e92609a56f2b52ba14f3c827eb7ae46598d8a7c89c665d35b10fc3c43e5557ec7219328d3a361324eaa01beeab471d15583aa763e99c91543a95185367ea32b51ccbe0b324193ca69e5a06afc0c0cf9680af57045f89819f23017f5a117c1506be4502deb1be1af86a0cfc5c09789922f8e118f87912f0ad8ae04760e0e74bc06f54045f8319f905ba467e2426f68512b15b375013fb284cec8b74c53e5a829ccdd65ca473b5987f069cda6a31ba717462ab71b712f92ab178e9633d6d6b65f9426be84b64222954e5eb306bba54624d5f2b16826330f0cb24e0458aa67a2c06be4d02be59117c3d067eb904bc654335f0e3b0ccbc4233333760c05712492cd88d59e75256c668385fcc36995ac2feb5846df457cc262f1430db773b9cc4e405ba6b5926b7de726ed365b6b5f7b09faa487d3c26f55532a9a9cba07ddb6edcec34259d66886c6e6926e9c2a3ee2e4a729d80d9c0d5121bb847d1c036624a5fa3690327cafc2c5b81566ad4cf627389f359273add65b08459cae214af6bbc36619fbc9df964ba94c19cac98ff3e4996dd34b6be8e20b1f5f5f6ff75a8c84ab1f526cc666f90d8ec6045bf7532067ea3047c9e22f82918f84d12f04d8ae0a7cac069587333d10c6b366362df2211bb4f2335b14fc3c4be5557ecd365c8f4fddb12713f31bac8cfc00cfd76ccd0ef20c93422cfc4fce70e4dff7916064c3753954ea19b1ded12737a6f0e56acffcec64ce82e89095da06842e760e0774bc05f5604df8265f63d5866df9b54669f8b59eb7d9ad67a1e067cbf26f0f998153da0699e1760c00f6a025f2803a6794f7718f74fe4a4002a13392fc2acf0618915fedd58cd0a2f9681532fb993687ac9ad98d88f48c46ebd879ad89760e08f4ac08729825f8a95ccc7b092f9785225f332cc1ce9393d55bc255d903dd7fe8f0e42d2e1e90564328ba0e864e755ec9765acb541637815dbdd8649f1a44c8a2651297ada7f2f26cef08633d12379192ec764784a26c31e5c861cfbff42164fd36f56d97f272fc11598044fcb24a805f2822e45a211af4a6a5762e6fb8cc47ceb355133dfab30f37d1633dfe79232dfab31a7f7bcc4e965283abd6b30865e9030f4b82243d762e02f4ac03f5704df8e81bf24cbdba66ae0d7c9c069debe8ce5ed2b49e5edf558717835966bea9d62d7740326c56bb15d53af14baa61b31195e8fe59afaa4d035dd8449f0463cd73493a5a7b66ce266cc7cdf9498efeb8ae67b0b66be6f61e6fb7652e67b2b46d93b442fd0bb0d63e75d093b45cdd4d8b91d63e73d8c9df79362e70e4c890f244adca3a8c40e8cfa0f35a9bf1393fa2389d44d9bab497d1746fdc718f59f2445fddd98129f4a94b85551897b30f0cf24e02f2b82df8b817f2e01ff5d11fc3e8cfe2f30fabf4c8afefb31e3fc8ac4a8d672525cad3d8049f1b54c0ab75aeb9dc26aed414c866f6432886aad6f0aabb5873009be9549509bb8d5da483666b25471decdc398017f2731e09d2dd40c782766c0df6306fc435206fc08a6c48f122506b75453e2510cfc2709f8058ae08fc9c06976d143cb75ea85c731a97f91485daf959ad44fc8c069f7c8af44b37be4494cecdf2462f75114fb298cecdf65658bce5d8a3db32edf7e75199bfbb680f99d7236f1d4598655c4c62c2713e7180567017681fdb4882dcd5ec8ee85df2c20f3f988622f36a228166faf26ce8eda996c44df394d2b938d2615f125fd8bd8930af6563140968f5996f2b15738caa93a41f6692c83fe9064509e62063d8381ff29015fa808feac0c9c3aa3bf3067f47752cee8394c897f640ceda9a6c4f318f8bf12f02c45f01764e0b4b0fe9788338ad175fda204389b6d34ba6b0690ab6e0d95da0164ba2b416203c896156f00595f566c00f925cc962296a4b429dad2cb32705a4564589a55c42b1872355de457b1faa1ba2c3f159ce66b32fbcfa40f4b7689fdeb6cda16e7a4b4842dbf26b3fc7d6358beded672f29c781d339e5abac6f306663cb5358de74dac98d69114d307f6522ba66f6152d7b5242111ad2d87b38656315b33215b6d93c9c2a54cc589516f6372d493c941377d51c37f07c3afaf993bef62c00d648253fba15b4fe7b398701119c58c98c6650b9523b1f7642953bb6828b18b59add5ece27d4cad469a7c7d8049dd582275591b35a93fc4a4de03cb0c31cdc2098dbdd31155d4fa084bb9892c65da71e01c1d991d3d492a3bba01d024bb6c1511d505341f6312349549d0422ac178f6af4ab662dd694024b73eea134c96663259f64a5096aa470da9c8f4296678cd2586b7696f35c3fb0c53b8856671f91c036ea909fc0506dc4a13f84b8ce73d253c6f57e4f92b0c7c2f09f8b2b66ae05f6394b4d6a4e41b1930f53e6d12018ed1aefa56064c2be9bd2da449dbd64aa649fb1d467ba684f631edd468ff1e53a21da644fba494f80153a2834489131495f81103ef2801bfb5bd1af84f98617692b953ba79c55402b7252962e1ba70e459641f56e12de17f7b67db67b23ba7fae9c6b679a0bf08975bc166e36732c7ec2e7776faa7e8c2dd65c43b375ea443fba59c2ab624eace3399332f529cd9f833c645671917749b63b8af9e13b0ba15acbbf4782593b08cb82b661df9a8ccf1107adb6fabae50f80533982e1283a9a66830bf62452a0b2b52fb2455a47ec394d857a24496a212bf6339dd5596d37421aebcb77536efa7a52b3c6843c5d9a128569e66c5fc751f361bd7e9a175edda5b029632cb10bdb1dedf2a995d554a4ad17c26e152d097eb602fe50d5d15fbfa43c61e3decaa9ba57fd8d59f1878f71480ff2503a776d2c3d2dfb6f86f0c3c3b05e0ffc8c0e9e9753d2d821f09e74fa0339ec0bf5802bd5294c07f58c6f64e41c6120b01cf4901b88581f749017844064efd5c5f899ffbbba39a9fcbc0c0fb49c077288257c368e92fa1e599a79f1ea2424b754cf20112c927775293bc06063e5002de5411bca60c9c7603eea7db0d580b137b9044eccd8a62d79681d3f707a7c07bd5c1c08748c02d45f0ba182d4365f1b1222df53023df3f0565bf3e063e2c05e00d305a864b68795d91968658868e4881b534c2c0735300de18a3254f424bbdce6ab4ec81818f94f5402a8237c1c04749c0d7288237c5bcd6685dafd50c137b8ccc0e15c56e8e99ca5889a9a8ce886f81497e80ac6a5694bc2526f9b81418792b4cf2f1b2beac2e6a92ef89814f9080ef5404df0ba365620a6a8ad698e4932492afcf5293bc0d063e5902de48117c6f0c7c8a04bcd63e6ae06d31f0a9b20a5451f24c0c7c9a047cb0a2e4ed30f07c999d2b82b7c74c717a0a4a6807acea9f9182aabf2346cb4c092df98ab474928067b7b36f2dba236fba76c6994e9c03a972ecd4c5b1ca6abbe3cc92f45765b3f3775b55d12391d40eb4f1e801036cb5e9ef36a91df7b5cbbefdff4efbffa65d09b647f64116ed3b4b2e4df4f855cc00664b0ca0f5be6a06d005039f23011fa3089e85811f2c01af5404df072b7487a4a0d0ed8b81cf9582afdd5f05bc2b46cb3c092d5b1469e98639ba0289a38b283abaee98e4f32592dfa328790f0cbc5002feb9227836065e246b29745503ef8981174bc0072882f7c232b44492a1d51433b43726f90289e4731425cfc1c0174ac01f5004ef2303a7fddca596a4d79ff67dd269618bd8d48d956cacc99db3adbef3695f2cf54365a9d3d51762268f33be46bf5149af1f46e52259735191cafe988595a520361a8049be5822f9c78a920fc4c097c822e96e6ae0fb61e04b25e0798ae08330f06512f00b14c107cbc0e9e665875909cc23d88a030fc1a42e9748fd767735a987626658910233dc1f93bc52d672c956937c18e60d96cbbc81dd8806bea7888ddd15b2f1bda2e85e72f4ba827d52ca46fcdc23f9dc5167679277b91d67aa7892e198ac2b64b2d29836cff698c27ba9a434024b69a52ca586ecbd254cc7529b03ea23696c3c85fdac3a932617cbee5592ec6eda532dbbf330c556cb146be7c9eed819e99f5f5840c4b40115e54762f21d8e558dcec0b79853a7377f6e1446fd1112eac72b523f1a035f23019fdc4b0d7c0cc6db9132def6f5e4eb78967395c4597c55cef28ee6205d8f51c166a38b39d022d7bd39ed167615aec762121f851531f7d04159615349fb002ceda3312b734e909e9b929310c661a9af95a54e1be474f92bdd74279e14f4bd72a23aaf773c26cf3a993c4d813cc5d11c99c8273c25bf28780226c5313229ea0229e86473d73654d29c8815c9632545f2f5de6a457212a6d07a994259718aa4bce8d1cca6738056f3e37117b11938cb785dac42c5648c8ae324549ca948c5142c3cda9082f068aa0c9cdac7f196e688d1344cec135220763ed64db331057d40d3314e4ed4e564860c99be7f5222f1798c79be333103dc2431c0a2be6a06380b033f5902feb322f88118d9a7e8927d1046f6a99a64cfc680376b02cf9101d35999a7457ff0cdca3cdd4a6656e6c158869e21c9d065fdd432f410cc739f19df733b87d277e121b0580befb440c48c4a3ac7d29da5e9cc9d84e760ab0533733169cfc202a97c16b0fb4fdf4ea69d340ff39067a7c0431660797c8e248f772ae6f17c0c7c8b04bc657f35f0422c4bce956589b34e499888d8c0a00c54eef47e3e8b729d584f258b8a3045cf93f51e282a5a8c819f2f6b3029829760e01748c0d72b822fc0c02f94857e8ae00bb1627191a458a80e649462925f2c91fc7345c90fc5c0b74ac07b0e50035f84815f2201dfa4085e8695b94bb15655bc3257c80789a973542f778b31652f9328fbbba2b24b30f06d12f05b15c19762e0974bc05b0f54035f86815f21011fa6087e18067ea5047c9e22783916e65da51be65560625f2dcb4d45b12b31f06b24e0b5f653035f8e815f2b01cf57045f81816f9780af52045f8905aad76181eaf54905aaab30b77403169d897de744d4987c97ca6a2ced1b656937206e978a13c5d2b9306549c585876359779324ebf206a965dd11985a37cbd4728e1316e1f94a52e05b05ef0d82d57cfc1a4c925b6492d0dbe1d1384e259d23b178e2d61484d9476179759b24afb628e6d5d132702acced893434bbe3c06b314aee480125eb304a76c8a2a0216a941c83799e3b31cf7357529ee758acbeba5bb7be5a8ff51edca3d97b701c26f2bdba226fc072f43e498e761caa96a3c763e0f7cbaa5845f01330437f200586be112b9e0f6a16cf1331a91f4a81d427617c3f2c6bbb2916cf4d18f84e09f81cc5cc3c19037f4402be637f35f05330f04725e01728829f8a813f26012f5304df8c813f2e01bf6a981af86918f813b256a722f8e918f893326b51043f03037f4ae65786ab819f89813f2dcb5045f0b33047fe8cae233f1bab7b9ed5ac7bcec1f8784ec2c7998a7c6cc1eafce7b13aff85a4eafc7331255e94359946a829711ea6c44b98122f27a5c4f99812af4894d8a6a8c4059865beaa6b99176262bf2611fb6745b12fc2c05f9780cfca5503bf186bc6bc216bc6d0fc849382e0b678cef846397be6ec50e1eef8abd2e0d98a49f426d6721dcb7726a7875ed01fe8a480b1b64c6532371023e54b30a2df92b5861489be1433beb7758def32cc2dbea3e916b76139f16e22c0b10e7ec2b8784f978b2bb02c7c5f92853b15b3f04a0cfc030978669e1af85518d91fcaccbe29f16fdeed6c80bd84cfd97266651d4e547b35aec6a4f84826053da460381be8f44f5a99c1fe2e65f3065565b806a3f96309cddd46a9d17cad043c9bcea6b0d2b9720c6efd9adccab14f24f56e7647aa47d5555c89a4f6a98d57831246fff4b0ffd444968a7d66c9978a259208b6546c3b96e39f4b727cd948b51cbf4e06ce4e19c142972f930a5daec78ace5758bde52f3413081d6c5ac8b6f955293037600deeaf250d6ed521c71b31b5be91a9452d3097cdc2153b18d369e18ea7ea119dc856c20ac9621e22f4f61c0a409fe428070d376116f4adc4828a147dc6cd5875f59d6e75750b56757faf5975df8af1f183848ff715f9b80d03ff51d6f01dad067e3b666f3fc9ec6da8a71e2c643f94d99e861e024147779710b119df6256d8e8a11295acdf9ffa277a98cd32eeb39c20161e52319f2c2762a2a577b341d76a556cf40ecc8c7ed635a31d18f22fbac8776206faaba681de85f9acdf52d04978b70cbca57dfbbb453725ad0a2e4da0104fe01eac04fc2129019bc7a895807bb112f0a7ac04b427ee2ecf8bc972be46633e71b608a4ff169b06d27ff702762dc6c3d49711de8749f8974c42ca4b296f8eb9bb1d5728a5783f46f8df12c2eb8d5523fc014c9d7f64eab464ea545d845095fee416473c88a9faaf44d5c715557d0803ff4f66b807a8813f8c455a34e890465a562499486b27e63b22117ddff108c65046446269e3d4187a1493bc9a44f2ffec3f2a923f86495e5d2279e67835c91fc7c06b48c05729823f8181d79480d79aa006fe24065e4b02be4611fc290cbcb6047c9822f8d358b55e27a259ad3f8355eb75237ad5fab3181ff5247c3cafc8c773987fa98ff9970649f997e731251a4a94289aa4a6c40b18782309f83645f01765e0f4fc81c6117a32918fa1d684ae36a14707d3fe5a7aea5a3eefeb20ec176a6adee017feded5aa4f080baa47f1e6dc345e133aa7544a385f8c4bfe1246cb1e125ade56a4e565cc709a6086d33429c379050b249a45248104255125307815436f2e43a73f387161761211de6b5876b49064c796c96ad9f13a06de5202feb322f81b184bad12716db1ce29c280f7d4047e0ba3632f091daf2bd2f13606de5a023e678a1af83b18781b992f53047f1703df5b02feb522f87b5866b69595a54a12efa84cb7672bf9e3319d3362e67a0edc0cf66199ef63599429c9a2bf15b3e8032c8bdac9b2c8d9abc67f5ea98a321f6295447bac92e8905425f111a65747995eb496c856d2e3632c533ac9cacd74b54cf944064edfef2c69c058b20a2e4603e65319381d9be922cb01dad59c65ff50837241fff470fed4ac9a1b74cc0249f3334ca17d52d096fc1ccb8a7d6515dd4cb5acf802b3a3ae323b72b77d10459f7e414f6c58cdbb42c5227ad799ad64235d65c49d32edf46bb863fc6aeee24bac8475c34a58f7a44ad857589ef64881917e8de569b6244faf3a502d4fbfc124ef9902c9bfc524ef250b0566ab49fe1d26796f89e4aa6350df6392e748246f74889ae43f6092f79148aeba7df38f98e47d651ea0404df29fb0f2d40f2b4ffd932a4f3f630c0d480143bf600c0d9445bf456a0cfd8af9c8fd643eb2058937bbc9bf6444c5fbfd86c93248260bbd9d1af5b32ae9fc8ee5d6e014e4d61f18f81009783545f03f31f0a112f09a8ae07f61e0fb4bc0ab2b82ff8d19f1308911ef58ad66c4ff6086335c6638345e926d21233b0734755bc8fc8b1130424240d3156a04fc87655d6e0ab2ce1d9bf081e7a500dc9281531a47cab28e6d1a2e6904aa6444044b71942cc5e644d66a9ac0cca4829b81fb8b5ab4978149325a260945a073a7543b4faa4952c9ee64df5a7673336df3b9f2ed3b3a91407d1ed798083d41db4b06aba0a593afc646e8e4ab6655348b953e36e9aaba2c7fe8ed01117adea857a40326acab7941eb672255b2a63a9e3535300318273300da992cf6302bb11fce654d13aa94ea006a4d59baece009892f9a77b49a2faa85293541a614cd29ba7fef42de5123a209d8da724f935451b23626c744991c0d5172c5041995b4ebc8d2a683059374c7a5ea62ce78720a5ae3f564e094992991141ca38419dd5489d1755bab66740d30f06912f096ebd4c01b629694afd9afdd48064c5df3f44480a9ab43801bcb8033295c4212e39d417b6054cc94152a6af16e5cb524c9e91e4db03467e1d5a4faa2fca61865076a52d60c13ff2099f8743b4def39a5fe9da8d4a29de658c1982d29188f2b168c163270eabce6680e92b7c4383b58b3c4b5c2800f916506759522dc74b779d7c98e3db1ec982bc98ea78f51cb8ebd30e5e6c99473572ab9cd1d7770069edb2c4eb0751a4b2aeab6c6242ac06201b1c7866cfe58f27b7db4c1e4981f2b16e895927d46f6c6d22ec45ca6e0c0593892cc0e236db1348b6469c24d6be56927b7756e2616ab14a72056698795a41249493a73bd5a496a8f49be200592779081d3f71726e2dc626c2bd051d6d2a367fda6b5a5e72c6e284fa2a5571aa107da7bf5ef81b4f30e45da79b152c7da799d64bcd1cdfcadb969e4cd79cfe95198c636562bb59f4c622350ce16e3154970ba2812633eb794d932c66c872a9a272b1f7afa15e6a31663a373b3c960865cc6d087d88d8d9136a339849ebdd5870cb5efa6daff4db2ff1f4cb2c19b436d869c9a6e361fb93b9824b3fd7e174ce22532895b4b25ee69ff3780fdddd396cb092eaa4aab225516e608974a1ce1cb1bd51ce13e98cacbb090423e97c26dc2cb820d1575f7c5d43d4ca2ee8013d5d4ed8a05b4e59a016d3719705bfbb62211600b6f5d74c7e8a894d0917f921a1d3db0dc5f2ecbfd4c42a2ee70290b15fddd37f240139e9ea06209d998742b64d2b5272296a787f615b154a733d755c6dcb4dfb13b9dbed3b8c37376b9a4dfa848d813cb9c9592cc7940d1567b61e0ab64232a8a39df1b2b08ab350b420e56100ed72c087d303a8e90d051eb64353afa62a6b646666afd144d6d245f6457ce9f2c61ad8e3266844efc5d01feadd700ed87d174a484a6ca4d6a34f5c7c08f928d719da2063e0033c9a3354d7220168fafd58cc7f7c3c60fd649c60f5ebdea809f5bcefee24395f183415802c74812a8d878fa27ef362f9cad92c060ccee8f95d9bdd823533e40a1b69c6d08d683be5eb7077d28867c9c2ef2fe18f2065de461587bf4f814b4478763997c826667db088c8f8dba7ce462c827ea22e761c827e9228fc49037e9228fc2904fd6451e8d99c6299aa6310613f9545d91c7ca90e9d0e9e644446e82031f80897c9aaec8e330964fd764793c26f219ba224fc090cfd4459e88219fa58b3c09433e5b1779326673e768dadc144ce42dba224fc56cee5c4d9b9b86019fa7099c8f7171be2e17d3b1c8f202cdc87206566d5f98826a7b26c6c745ba7cccc2f8b858938f0365c099f6edd6846c036ffc1d8419dd259a46371b03be5413780e967b97e9e6dec158ee6dd3ccbd43b0dcbb5c33f7e662245fa149f23c0cf84a4de0022cf7aed2cdbdf958ee5dad997b8558ee5da3997b4518c9d76a925c8c016fd7042ec172ef3adddc5b2041cea647a0598712932349d3f9b686abc9c8e8b6621453d6194fc768b0f7c5a8d104b6c39ad3bf147b7ce9fa44f26234ced8422c2f6ed0cd8b5219f2def6ed8d8988bc1d073e14b3cb9b34ed7211067cb326701956f66fd12cfb8bb1dcbb5537f796605cdca6c9c5520cf8764de065181777e872711886bc4317b91c23e34e4d322a30e0bb34812bb1a6d6dd9a4dade598c4f7684abc0293f85e4d89576212dfa729f12a4ce2fb35255e8d013fa0097c3846c5839a541c8149fc90a6c46bb0a6e1c329681a1e89d1b153938ea3303a1ed1a4e368ccc53daaebe2d662443f9602a2d761623fae2bf63198d84fa440ec6331b19fd4157b3d86fc942ef27118214fa780900d98d8cfe88a7d3c86fcac2ef20958217f4eb3906fc4809fd7043e11037e4113f8240cf8454de04d18f04b9ac02763c02f6b029f2203a6139a5f89e82fe13915037f3505e09b65e07439c46bf60fed24e0d2043ae3099c8649ff7a0aa43f1d734f6fa4c03d9d81399137759dc89918f25bbac867c990e95c90b72355e7824809893117e46ccc56de4991ad9c83d9cabb29b0952d98f4efa548fa7331e9df4f81f4e761e01fa400fc7ccc2f7ea8e9172fc0a4fe2805525f8895a28f754bd14518f227bac81763c89fea226fc55ce1672970859760627fae2bf6a558cffb179a3def9761227fa92bf2360cf92b5de4cb65c86decdbaf1321632b0e7c05c6f2379a2c5f8959ddb729b0baab24e0d9fbd8b7d61c62b25f7f868d96cbdec823e36c117bd857ba1aae00fc2bdffe826e6cb884f5d23b5f88f763f7dd7f17a9bae56d365d686165b2677a693766c8ee1c40821c97f37d84ae3749458ad84a93abb14ae507cd4ae51aacfcfda85bfeaec544fe4953e4ed98c83feb8a7c1d86fc8b2ef2f518f2afbac83760c8bfe922df8865e0ef9a19781326f21fba22df8c21ffa98b7c0b46c65f9a64dc8a89fcb7aec8b76115e03f9a15e0ed5805f8af66057807c6c57fba5cec9021d3da926e8ea63341fe4eacceb632f4ebecbb30a9239a52df8d499d9102a9efc172b15a86662ede8b195ef544f8886178f76122d7d015f97e4ce49a9a223f8001d7d2047e10f374b513018ee1e91ec248aea34bf2c318725d5de49d18723d5de44730e4fabac88f62c80d74911fc3901bea223f8e195d234da37b0213b9b1aec84f62c87be8223f8579e72629f0ce4f63e04d5300fe0cc649335d4e9ec5909beb223f8711d22205843c8fd9754b4dbb7e01e3a3952e1f2f62c87bea22bf8431bd570a987e1913bbb5aed8af6051581bcd28ec558c8fbd53c0c76b98d46d35a57e1d233a5397e83730e476bac86f62c8ed7591dfc2c2b00e9a61d8db98c81d75457e47864c6795764a44e418b34adfc59c5d674d67f71e06dc4513f87d1970a67d9b9510303eabf4032cf7f6d1cdbd0f312ef6d5e4e2238c8bae9a5c7c8c0177d304fe0423b9bb2ec99f6224f7d024f933cce567a7c0e57f8ef1d153978f2f303e7a69f2f125e68b7a6bfaa2af302e7274b9f81a43eea38bfc0d661c7d53601cdf62e0fd5200fe1dc6497f5d4ebec7c41e9002b17f9081d341f28189585f8c03877ec4cacb7e9ae5e5270c789026f0cf580e0ed6cdc15f30e421bac8bf62b6313405b6f11b06be7f0ac07fc73819a6cbc91f98d8c35320f69f587919a1595efec2a4ce4d81d47f63e0792900ff07cbc991ba39f92f863c4a17f93f8c90d12920840ea848c1c7a400dc9281534ec6ea7212c1c43e20056267c8c069b919a7596eaa61528f4f81d4d531f0092900af81e5e444dd9cac89214fd245ae2543a6ef4fd66cebd7c6989e9202a6eb60e05353005e17237b9a2ed9f530b1f35320767dac404ed72c900d303e66e8f2d110e363660af8688481cf4a0178638c93037539d90313fba01488dd04b391d99a36d254064c67e2cdc9909cdf4e27b349e6a1f9d3a3ed2424bd6698db3a58d36d359701d30926872402bc15076e210366670725021c638d5e4bcc14e7e99a622b19323b2640b361b627c6c57c4d2ef69201d3f250a83940d01a032ed2046e2303a6b7c51955f78a147faa24501d4f606fcc9f94a4c09fb4c5c017a4003c1333ec85ba86dd0ef31ea59adea3bd0cb8937d7b6822c0314e0eea80012fd204ee88915ca64b7227cc932ed6f4a49d319197e88adc052b8c4b535418b36409d06d969725c2498c6d96f7c15cf5619aae7a5f2c17cb3573b12b968b15bab9d80d13b95253e4ee98db58aee9367a605cacd0e5221be362a526173d312e566972d10b035ead09dc1b033e5c133807cbbd237473af0f967b6b3473af2fe62e8ed47417fdb07aea28cd7aaa3f16691c9d8248630006be3605e00331f0752900df0f033f2605e08330f06353003e182b35eb754bcd10aca01fa759d08762226fd015797f0cf9785de4611819276892311c03dea8093c02e3e2445d2e7225c8d95ded5b6b3ad935074acde60b01d50e8f3a49c6b0e5e3812de2db944117f1b5aaa25d223260cbf6f230af70720abcc2482cf34fd1cdfc5198d8a7a640ecd118f8e614808fc12aebd3342bebb13260ba2de6e98900c7d83df2002c17cfd0cdc57132643ab7e6cc44448e31b7663c26f259ba224fc01ce5d99a8e7222c6c5399a5c4cc2b8d8a2cbc564cc94cfd534e5291817e76972311593f87c4d89a76191f2059a9172be0c38d3bebd302189f13e86e998595ca46b1633b0ded58b357b576762c05b35816761c09768021f8875415d9aa22ea883b0aaeab2145455b331f06d29009f83d9dfe5baf67730e6a2afd074d1876085fc4acd423e1703be4a13781e46f2d5ba2417609d19d7687666ccc744be5657e442ac306e4f51612cc2fa83afd3ec0f2ec624bf3e459297600ef0064d07b800732137a6c0852cc4c06f4a017829668737ebdae1a1987fba45d33f2dc2dcc8ad9a6ea40c03be4d13783146f2edba242fc1fcd31d9afe692926f20e5d9197c93a34bad9b7d65492be0e8de1f65be5b602ab93e8cab833e1ae8cbb585746f32a7ac54e1debc4380c730477a7c0119463197e8f6e865760f5c5bd9af54525d6ccb92f4372a2641ebb75f7781a41e819a8c56422a1c7f1ae64fc2fe2dd4b3dd8d99363eddf27d9bf2c6156469fc8cfba909d8c41df86794e6d7129b3da02c5837f97635ade2fd37243544b715aac536616b37f8f65a5896a53627fe29499b1d13747da25c93931762ad3829eb5b982bddd83eb53cc8e59ceb593a27a515c2f7b2e027d5f4d0e0c899e555b6e735dcc5021a7b043d0cff70c1ba754f138f01518d30f60f604537474a2e7c73b6c2db5fdd45cdb36ca599e3bdae693852cfffdd2badfe2cf53654f2b312d1f946939d4a725e4dcd17314cbb1c54c47bf94de1c82bfc42a2bf02b15cd56619a3d24d36cff84f26fb86d4345accc9732cbd5cf39f71715dd5663ba3d2cd3ad9f4fb7092c771672cde8ddaa5da6c9e198263b659a6c4ab33f73bfc9b3af65ac8ea6e7638f62f5f5629642e2560eb9c3b5a075c972160540af47639ed4f9b62330d61f91b13e3ca1b2319eb1511108afb606d3ef51997ee30d5a157d7a184b866ae544a8a52ce95272382b87724f924cae1e8969fd984ceb2131b5c6259dca74a1277855721d456d4c9f167286aa968be473f3284cafc7657a1da81cd94d63bf78633b1982f36c72d40f94dbf5016d7de84482c9e4f3d1181f4fc8f81897963adb746dbe16d3f9492c4e51b30161c3e3eddf0a1910cc67558b50d16c1da6d95332cdf643349bceca67198f4d9cd6af68b5cce0a5b8a84a6e9869a31c8369f4b44ca35106bdafc855fa4e81ad6b19abbd53a7e9b198a6cfc8341d6cdf26ee29bc1a14b0678e769493312c97cb596ba8d0ae7157a750abf59856cf26d226f0a60b2384e92c17caed7769395c10a3f6f362a44eb3e330cd9e9369961bd77326d62ac07d68ac366bb29e7203a6e3f3321d8b0d47d495b677a43d700b78c43c83594069b434a6a68d984c2d7a3cc6d30b329ea6efb296476c86f4793801e3e145190f23501f465b48f3ed9744d918cf723d768d23474a754e6fc4347c49a6e158450d67328b5e82e4c8aed0f7444cdf9765fa4e3568d91549d4bfa960e0248c815752552f3bbe6d38a895cd6bb509d3ea559956a315ed78241b8558caa3dd5d6dc32763babe86f550a8e6e028f646556bf4fbd7c47155f43b05d3ef75997e833422c74a56f32eb1f52be1ed3c5cabfc2aefaae8742aa6d31b6a79e6b7cfe1ac3f817a9578ad14b335e5664cbf37131911c0a2c791ac7fa880b7ddaac6f1c9458fc9c7c8a7615abe85e5a24acbd8d17c348f0cdd5fe9b84eec183855f1f1e9987e6fcbf4eb4862f77dd253634c48790626e53bb17b305572615a52b960b2849d8969fdae4cebeea807c98fce11809eb024da6b4f239ce5d2e83ab9518cb330b9df93c93d30ae6718cb4640691f6b99edd9cb6ddde83c87f8de21553ee06c4c9ff7b13641ec3242dbfc93599c5c218994121931a1f165490a353c07d3f083447a02e423206399edc5f6e6e91c05d982e9f821d60f97487d958896e9aeb3cec534fd48a6e9988472d33f9ee59443a1f7aeccd7f3306d3f96693b2b6ebe9aedff373d32703ec6c627323626a0758618152f89b68a688db84c22a723a3d37b95cc2ff86f2a7a5f80e9fd2936bf2131bde5f301d2abdb85986e9fc9741ba018072c672d1c679487f64788b7683b238f4506f2be49f89b8a361761da7c2ed3a6afa636ce4c05e74443e7fd54e5cac5981e5f243f6b205eeb279d7e752ba6df9789d497d03aa086d3d853a715eef416c9c608bc7687ff921a8bbc04d3f42b99a67d7c9ae6320d9c7ebe4a4f3b08f704b1b448d61e2fc5b4f83a91717095197ac1a9fb2fc374fe46a6736f9fced3814ceeac63d8268fa5db5c144b45836d9806df6273d712abb772593b96b6937ad2d54569a8a52ec734f94ea64937e26da3e7444f9e15d7f1b61c15c4df7f97eab6ea1598d4df27d2bf93a8d4023bb63dc546764fe455d1ef4a4cbf1f64faf557d46f2a435ccabcdf70a5f2924c7fc855982e3fca74e919571797517f6eb9fd0da9f3555763d2ff84f9aae4a477fa068a99e75ec246a1628d60a868700da6c1cf320dba28da522e67b5ea884b32b6722d26eb2f89d40c9021dd9a2159b6b7631afc2ad3e0a028dba91fb714fdd3c9cf5c480d23d7618cfc96c88843d531a1c462eee4daefc9fb89eb312d7fc77a6fe41181580fb694dd2d915832955b36c2e9b5657574156d6fc0b4fd43a66d3b5f9efa35a23ec491285536772326df9f89f4a555b5b9aaded9b5bfaab384d36d7b3761dafe85cd994ed46b4e8beb354dce6eba19d3ebefe4d6f5f8472466da9177297b7b9a5d260aa4b5ae99bede5b30cdfe496e0e9f7eefa79bf3a9ead3bc15d3f15f998e9de2f808776e73319384b69a52d396b80d93f3bf44c6bdaafa325a3fad66719e5f3ec8b1b978fb764c1f520d998b9d685db1abe664dc816964c9349a8e6a84c512d8685022b384d4671225ef3576603c44643cecabc083c8d3257c6c39553ee04e4ce20c99c49de3fa39735ee02e4cd26a3249fba3dc56b574afe4cb5804eece8a35515eeec674a92ed3652449a44f71025f2d556adfd1325248f099efea7d89c9e5d93d989e35647a0e50887b128bb1e3a3a968732fa64d4d9936fe9800ab8712ad83d25337dd87e9584ba663bc39192a6313e9b2c9fb310d6bcb341c4754fb8b448db5385a0e4b637a127f4d64a2b7f2014ce73a329d07c5d5d9dbc3e4ac4c51913d1596fa20a6535d2c1fd5a228a777a6eaaf555b93f9c43999c77cabfe214ce77a329de7905ddb77057949b4c526be5161e5618c95fa3256fcad5091a24adf95ab196607a9892777629a359069e61f2b568da677650fc92398a60d659afafb95b1b162c7c6fb913e71f493d52bf42b150d1ec5346824d3403e6f81a6a93e6fc1d10f7b9eaa1c7a0cd3afb14c3f7cb54bd59940a5bb301a781cd36a0f9956e3e3b67fa6f15abfaa55e5b251fef218bed0fd76129b87ebc449b1f7fe48ae1e7902d3ba4922a54d9e7e72a338c9b65b9fc434688a5963ac589cca5764ffb2ca66beeafc5f2cf28eef43706bac69ff6759ecac60f6a6337779296382c618d974da39186bed11ad997b786a71f7394d7db12d112dddf9d13a98eef5161ba1994d588d0871fe74a11d36441c356895f87873be2c63c885c0427bb07c77f6b5a0116f8f68842876c28ba7852c1ae901e211a85d7c9d0e46b6eab7ac9a5c23816533dd8332bdbb69da9ce66a0ecfd5487636d5b16b92d6145f8a1634b50cb90db5a8c22c2cf332d91d8089bca7cba2e71d4e665d32a26bc6e94c77366a8c9b1a2ca5b2d4ba330011bbc5858313926470ad9889394da272e24cee2eea4448cdea919e34175a9aa4aa8e7d4367668ee5352ff50315769b2b0c246dcf71496a6592248a1b1edbd9decfa5654f93b4d0d342e7b2d2ec14367c6fa630d0f6763597b6bd4cd2d68a15b97216b04f26ce160b229cc308ac0805851f5b2e85ad4d52d8c8be11bdef6398c7a20005ac2d47e79a4f0a8907db51cb25ac8d49c29ab2a23a97f424eee6076126ae655d97b8bd4d12d702581a9d6be02db063591fc252cfc84918e8db32daa5afad49faf690d81d05a4136ee8c2cbe5ec695128489b475cd232d3451a9cd72bda0da2351106d2f286b8a4b533ede1bc55c228fb6f670bf6a2e87278c7d3858138ba65ba20ae7dba3c1cddff6c95fd2f995f73f7960d037d3f1fe0d2d7c1247d74dbfcaa1543b843e133411cd7d174282c6c6f2483a12b030b7830328d5d97d9c1f272667b61a2f0f1f62e859d4c5258175416933cc37061a0e9ebbd5c9a3a9ba4a936a0c9dd512a0c14cd6aee52d4c524450d9827135d8d4b98ef9ac4867d8b582d1a06b2368d70c9ca3249560d664f15a10a29ead577c9d9c724392ded9b49d16e217f1f2c75f7cb9985d1a86c321f5e0c0381b7b67609dcd72481b580b7a262d219836120686b6397a0aea6835641902382bf713483476025a49484a585b93dd7a5af9b49fa9a81b8cb4f5c052ba205ac336889fdf9ea5050f7f22097baeea603094a4c2e7117e487c3bad600efd5c3fcb880e8bf2860f6551cedc9a0a061b2ac1d135cdab2d3e5f4c5e6bd6120a8ac894b504f9304ed49606b7115d37a79b45548577f15310f1646ff45ff08127b9924911ebb08c9a3c37674a37eeac596f3deb270f75ed0f93c82cade26a9accfab02616fab79883b9df9bb3050b505540939e69bdfe2182931d5280c14bd3fd8a5a84fba3ab0c7f2284ccca2169d8a616a6d1230b6d9d724716d41bd39ddc62ce251d9eed5a1b8a5a34b673fd31ddad00ee15ef2c35917372cc2e1087dd783e1e2fe26c9ab076cd1dd2edcd9c83e14448106fc009344d1191c1398375be43bfd2acf7ebd9ca51406c2e6455cc2069a24ac0e2896f0a8bb309054d4c725693f9324556749cf672f84839a0b06bad40c32ed9984fdb88bb01c21c240d4ebc086069b248acebef0eea646e77457ed250b036965a043718849d21a1259974fd8468fea8d71e91a9aae58df99ace25d335914b258bf12c4fafb9b2e9c4e3b328f251de67e8a2dd55dd286996f7cfb0b671828fa7e984bd170d30572249b67bd9c25ee1eb7ea1ebf5bc1b6965a160ae2be06b635c2b46d094fe6f8accab0d816583d926b92a2061e8ac239f7952e2b1464e5992e88624dc9520613eecee8d6a0208e34495c63820fe9e612b1557318282b033daea34c174c67f531ed812866a3476e27613822fcb560dc7bb449b2e0a0ae7370927fdc284c4b07c7f775691b6392363a3dd38db946b2d9d5cef4ba30d034004ca71b6b92a6968ca6c9b6a7727ab70e63abf0c3effe37d7a404d6acee03f7efbb92fcda7135d6f155eeb4014fad7319ef3b733ca167d53b8d010227f901d5c0aaf5aca4a70864c58dd2b2125ecb94a5bc26202bc935a1590975a367698ef967292cf4cd520ae0b2126ecf6729b5d0b292f227594a43b0594a9d3859092d59cd525aa799a53c542793195f25955565927356ccf1ad2ce9b4d52ce9bca62c64427e568cf50c59c8dcbbac381331b2929a8f9c95e4e294ac148c4767c5d9c1220bddb6210b699067a1e34759314706b214e2be2cb04f42966f28262b6eb09da53829352bc1164f1632f7c4ebcf632db3cc423ad0b26204775971575364253cd09095c46ce72ccfb2bec4162e6725d08befc54d6cb96096c28450779323187cb89b13f5a49b1c8dabf6ff7bffa19e74ffa1f194844a1e8f3b11fa04d303f6340f73485f7675b69da2b9e67828fa9a2fcdd655d29cca0ba573fe9f88bc65a9d7f6c4e6dd13512899f8bc0318be9f68ba81e3a52dd62e7b73c9005b0d6374363045678f0c97ce4941a2736028e99c0ee89c1c243a7b8592ce7c50d8a70489cedea1a4731da0736a90e8cc09259d97003aa70589ce3ea1a4f35640677e90e8ec1b4a3a9f00744e0f129dfd4249e70780ce1941a2b37f28e9ac0102a599e96805d10028edada03d4dd1f70d71e99b6592be862c69b793d2df955465478e1090d7049077603a8af202b43043f1699ba79f393aeb99a2b38be5d2795090e81c104a3a5b013a670789cebea1a4f37150d8e70489ce3ea1a4f36640e7c141a2b37f28e9ac0e0afb2141a2b35f28e9fc1458e7dc20d1d92b94742e0474ce0b129d39a1a47333a0b3204874f60e259d47003ae79ba4b33989dd22f716f4bee6a86c6c8aca5f41e7466150a8cc092595a340c7465150a8ec1d4a2a6b032a8b4d52d98c5359c8a71af88fc37344778e5aeb6d8ec8eaa6881c048a77495088ec154222f703442e080a913d4348647540e4429344b621ee44a644278ad2f7cbd9bbe1eb579f0782a25293c4b626f1624cf961dc460bfe6796a9862568a71f6a92d6c6440c57f4b2ff5e41c4f186f4591a062c8cd5e50d01818b4c12d8244ae05cf68203e44c1b4c1389c6062e2e032496a5a370f7647f27329538cc3e733aa075b1495ae13c7395d5266126773f50212dd995ed210867b412aa698acad120685a6a924a31abbc5ffa47cc8dd9e1a9c00e97a583bc01bb11794f00f20e33499e583781b57bbc85d8e8109ab1623c165437e54122b37f08c93c009059112432fb8490cc9180ccca209169b0f7d21899630099cb8344a6c11e4c63648e0064ae08129906e75e1a23330f90b93248641aecc93446e63040e6aa209119c616ce7040e6ea2091392084648e03641e1e2432078690ccf180cc234c92e9eca650ca892cb53fa2fd40f4f5f0f55776242e696bd2d1f7830f4678675e86affffc3b607f47eeda6e34078a76fe1a1d7bec608aca534037da5126a9dc97535966bf54c6ae62039cc9f6ff7430cc199470f6199846f2c8383282f5a717f367f0bde1b654a566296f628af2166026c7d126296f15d711549d9769b06e3736f7ed41e00ed6068d5083f5bb31421f0284ae0b1aa1062b2c6384de0a083d2668841aec4f3246e86d80d06383466818e70fdf03085d1f34420df6c51b23f47e40e8714123d460d8648cd02b01a11b8246a8c1fe2563845e03083d3e68841aec973746e87640e8094123d460dfbc31426f02846e3449681d46e842b643a3b31b289d1e6bb097c9d8e4049a1782b2137765d7089cf06ab49dbed514959783ae91934c52d98051e99f9f4905a6bb8cae0a61075d1760859b4c52e7ce10a693ffd33e43d85831be0378be934d1248777175f6191e6effedec06eeee593c859149ff0f1f8599c0064f3149a1981f2c7a369d9513cefa8ab1244fdaf71ede553f0782decb534dd2da85f83b8c0b1898bb33ef08fb7f5a67d3452b4bd91ed4b186dac2389ebe1254419b4d92ed6e8fdb3bfd33358dd1d712d0779a49fac41a73b84440be03759867afef0095d2e926e9140bfe7a2183bf615fba723aa89ace4847909ed86484307ac8fe80ca33d3e1217bdb49a6dd431a1bfead073ce45926e9db9b546d2e4e27cee90fabd9c9064e6746315b5a55c0acb584c12d366b99db4d515b0aa83d7bd716f2b04f52a8062a9e73d219ca97da42cc008d4abc83c36028bfd514ad052094df6292563127ae27b3524a6799fd123d756251f4a534d5e9c62aa26dc046cf355ddc87b373b096f2d37f9ca5a8ceea491a6b8a33919c93a6c21767560375fa79a63b3f449cb958140ad6720fbb355e00283c3f1d14f6dfed287c15507881490ae1f142cb88f700ab349168ace6de0778c50bd345a27bd6540571cee40bf736262f034bbc281ddd18d8984ed5537e0c4e753146e75010f65c1c243a8dee786d8ccef980cead41a2d3e836a3c6e82c00cdc64b8244a7d17d318dd1b901d0796990e834ba6bab313aaf01745e16243a8dee7e608ccefb009ddb8244a7d1eded8dd1f92ca0f3f220d169744eb0313abf02745e11243a8d6e6f6f8cce062050ba725776087ba7061aecb93436bfa81768565e950e2a31cbf4526970d2aa312abf0185fceaa05099134a2adb82027e4d50a8ec1d4a2a2380ca6b4d52d989f86719f977c974169f8a63afc55536f7c8a027353615a119207a7b5888363886698ce84b819fbdce24d1ee197f3dd33f51c1b20cd1f72271e9bb7e57fa5608373794bb7714014bbc211d54c2edc6c79349643499cc8429b13f5a958e9e7963549e09acf24693543a23e87069ca5cbecff0083e8eee408db2afc5364451083d647d40e64d26c98cbf5b3b141feed66eb0e239c894e7ec04da4a379ba4554cf1aab4eb6b5ab7abd4e846a35463167b0ca0f696a0526bb4596a8cdadb8133b8d574b894c72aa302b68b7ba50d10fe537d1b03fa6e33495fd338e192d074aec905a8632386689c065a47b79bafdf550e473646a6b1d5bc33804dde112432c3b8e7513e20734790c80ce36e32e30199770689cc30ee75940bc8bc2b4864867117992980ccbb83446618f7389a08c8bc2748648671f7982180cc7b83446618f736ca0164de172432c3b86bcc0840e6fd4122338c7b1a0d05643e6092cc4c52b521a9b617acc1faddd85eb04781bef807d361abd89c10ff141b835ed4d8049be1c0561f0a129906eb7763641e00c87cd874079c1825da7d36f0e905e8db6992be5680beaa5ba45030f71cdf302fc7fa0c10fa884942f70084ee5e2bdace07143eba2bfda37f0c3d8c07d7ed036aeec7824466180faeeb01c87c3c486486f1e0bace80cc27824466180faeeb02c87c32486486f1e0babd01994f0589cc301e5cd71690f97490c80ce33652ad0199cf0489cc301e5cd70690f96c90c80ce3c175d980cce782446618a7bef605643e9f8e4664bfddae11398bb814be609242b563ec0c5aa3b1452e7f82e9832f06bb6fdda0e734d6b7be2798bcf592497ae9e0cb4cf6b39886edee1917be02de0d14f0974dd226db1232f169ad06bb398ccdcabc1f543faf98a4566ca0db9bec9e1be8de093ce7abe9189ce8655730695f4c65ace23911d0f79a49fae0ae5cee0a20b888c5f8da1f6336781ef093afa723104a2c300f6327db8180ca37d2355826ec710c0b7edc81323af17f125f5c15d61de3a60342df4c877feccdceb3d85dce0d7813f8c7b74cd227363e497cda7f182764b50374be1d243a078492ce2680ce77824467df50d2f930f095ef0689ce3ea1a4f31a40e77b41a2b37f28e9fc0dd0f97e90e80ce789926f023a3f08129dbd42496721a0f3c320d199134a3a37013a3f0a129dbd4349e72a40e7c7a69b95b46d3ed9fe9b82d0c318e8e705ecf5c359b75b297b632a13cd59676e8cd05253844e00847e928e2e0fda4e77f68a719a93c56414fbc86126cc2df49a2088ffd424950d8938d92feded73635d6f73801d7e6692bcbd48a2a756794f03323907d332b5a21c0c977d1e44524dce123645eac760c4e78b20926ab2bbd814a91f0152bf0c22a926670d9b22f57d40ea574124d5e41c4d53a4960152bf0e22a92667119b22b51090fa4d1049353967d314a9870052bf0d22a92667159b22f54040ea772649ed4abc9beb16b285a78e303319b50bd9c4994a3285cd4aa2ff8b016398f0eeb00af86740faf72649cf2155c7e5bdf39772edbf17dbffd17f3b8ad07e8112b66327157622a18dd7957cead848b28214b3b7f259db4c0c501bcc8489a632a11f7133e18774f41460fd58dec911615c68381bd8f38f26a974e73af5db8dfa0a66838e969f4cd2a7b7fd6918a7333e07a8fd39a8d4f60a25b5df02fff94b3a0a7d0e19b01b15fadec067fe6a923eb54533464f243477b235b0c5df8244661857ba5f0ec8fc3d48648671a5fb5980cc3f8244661827e15e06c8fc3348648671a5fb0640e65f4122338c2bdd8f0764fe1d2432c3b8d2bd0c90f94f90c80ce34af7c580cc7f8344661857ba5f01c8fc2f48648671a5fbf5804c523d30cbb4c378d8e867a09bc3324965e26769180cd68d9da57108985f123149a358e4a532f5368c47401c0eec3223688486f18092a300a1d5824668188f82a80084560f1aa1613ca8a412105a23688486f14888e580d09a4123348c0796ac0084d60a1aa1613c1a620920b476d0080de3c1254b01a175824668188f88580608ad1b3442c3b86ee93040683df30d4e3ad76e95fd21157485fd722158afe4ee241fbe767b07e2d258df248d9944777b35831593b1edd5c68231f60626e9adcfe9758e0c2f63f3401cec5262f09cebeaa68823c02e1b9a246e1fe29d155ac966754ce300749667252be42ad3690c5aaab1d9201340cf53239384b7451d416233950c8653c6c8ed0ec86d1c6472c368b9b500b97b04995c83619631727b01729b0499dc309edfde1390db34c8e41aec063446ee10406eb320936bb0d3dadcdc51406ef320931bc679cdc301b92d824caec1ce6c63e40e03e4b63449aedececd61acce0e068ddd56e9e8e3a23b9f4c6033f017f99689e5d99f95b314c3bcff491fe212ba67ba6d55bede349ff575d10941250c6e3131ba3dc27653d44e016e602f93d4ba6b477af9280ef3da9116a0a8b70eae173538c1c218b56f016adb98a4b60189d56558618eba3aa6a88b007fb9b749ea86106fa7212dc674cd9d0390cbac8f0a451528b313f22e2f77842e2562fc80ee80e62e392f22bbdf72f37f804db74dc7444b6cd6aa77ec2b8c43dd3d808d67a6a3e2a27b96ef3e474e2f05f4b50b4648954be80608cb98c53a2ec3a8655a96216ab34048d5de24b52d25d4c6f298034279b67c6740678720d169f4bc4563748e0774760c129d4647b48cd13909d4e89d824467ef50d27918a0b37390e8343a7dcd189d17013abb0489ce3ea1a4f32640675690e8ec1b4a3a1f0574ee13243afb8592ce37009dfb0689cefea1a4f35f4067579374d6b26f46b1597f950c6889fd72f8e8a2f3c7045ddd4cd2457b14a6f27e26baefe31206e01cc7163edaf606b47537495b0752f534bb916415a15b662e27a20b6e92fd7911a1b34da7b2e25bc408a65d7769183f3236b9b73b20b9473a3c63e247b48571a55e4730e53c3b48740e08259dcd009d3d834467df50d2f90828ecbd8244679f50d2792da0b37790e8ec1f4a3a23a0b0e70489ce7ea1a4f33d609d7d8244a7d1e98cc6e82c0274f60d129de1dcd2e0644067bf20d1d93b9474ae0674f63749674746e758fba5c9848e4416f14fa9c8fe458f73f9e9df23d846ed8bf89ba3ec6bb10d6e70c999b1266916a079403a26296036ebf5a70667301b6b78fe01fa900606854aa37b4518a3f220306eb95f50a834ba15bb312aeb012a07a56b7e323de6b2d26662992d0cf5a8338873e06511f3a5c5e9e85f32e631d7008f39d824a18d893875a1f7ae988dd4c198458256d11093047666048e6400547bc7f68a180c3d37348f4d590c40ed6e8cea66c056879aa4ba3df1ce0d2d2174290285f36e789063ff4d092f885ef36dd0452cf0323a01ec7b539b175e056afdfd4d52dc82510c8f09de65f66aacb2da13d8eb30f3f5be3396e45448bb1b95ad0095c377650805e1cc9ed5688acaa9a0888f304965131042e5d90fa8a874ea6c3e1b305e14eab0692aa8f573cdfb4987c4152c4ca2c7adcf675314c44b690aa18c59e45a50b8f34c92d9109099e6655cc6ceaa9f04c81b998ed9f0c99dfb15c615f2e781423e2aa8d48673f381fb80d58e365d098d677a3b55cf52362b841e4b49fb47cbd3b1f19bb14a680f40e298745442d8922c6f50d42f94a77fdd0e0afbd8209119c6d3bfee05641e102432c378fad7f580cc714122338ca77fdd08c81c1f2432c378fad75580cc094122338cedf2ab019913834466184fffba18903929486486f1f4afad80ccc94122338ca77fdd07c89c122432c378fad70380cca926c96c4daa2e41709b8e934889ddc814cb609ce1b8302f3af88bb8b44e0bcea16a06432463547e052c347fd70e5c3850b4e3d82895c6867f4f030317d38375fe429f501eacb619d8e68ca0111ac683d54e0384ce0c1aa1619c36bb09103a2b688486f160b59301a107068dd0301eac760a20f4a0a0111ac683d54e0584ce0e1aa161dc6d6e1d20744ed0080de3c16a1b00a107078dd0301eac763c20f490a0111ac683d54e0284ce353da1662cef5d2ab53fa1d30fe9cbee56a8c6c81b608abc4ec4256f5e3a6623f54fff6c24631d728f01f20a766577c724fb934309dd21a4d26c77c756535436074b5de6a7c30e07a6df0e8dcd2f7a01d861613ab6d8ed6d8bb7fb14e337400552647e906221eb3ba79f3a7b2139cb5a96db1f1672814ad82201ba994ff8a669d505b6581cdc8df6c37828df2cd0255cb22b3725f70ea685712e471eb0d205c1d8555b765089416a8d1d54f225b0d285e958b7e6dd28ad8224ba60d0f888a5b1b1a13f80f596a667192badefd3be8cd5d838e55a50e31f6a92c0bd24c51f0bdc87937246e86ab305ff33cb10a91920845f1444520d766e1823b53e20b52c88a41aec243646ea0fa08a5a1c44520d46a7c648fd1390ba2488a41a1c1236466a1350fc97eeda903fec136af60575feb25dd95997c71aa1f33995068b7a6753549e0d8afa6141dac07c80c98934c6ba4c4682425e1e243a078692cea580ce8a20d1d92b94742e0685bd324874f60e259d67023a970789ce9c50d2793da0734590e8343aa7d3189d3b019d2b834467df50d2f932a0735590e834ba00c6189dbf003a570789cefea1a43313044a87a7e748f15d30fbc3d8f1a1dd80351e918eb56df86217ef705c18170ade02c85c132432c3b850f04140e6914122338c5ba55c0bc83c2a48648671ab941b0199470789cc306e95723e20736d90c80ce35629570332d70589cc304eafd904c83c2648648671ab94930199c70689cc306e95722220737d90c80ce356292701328f0b527bdce8f982c6dae339a03dbe2148741a3dfdd2189d73009dc707894ea39b981aa3732628ec2704894ea3c1bb313a8f05746e0c129d464f703346e76580ce138344a7d1ad288cd17907a0f3a420d169f4a85b63743e09e8dc14243a8dee116b8cce4f009d2707894ea347dd1aa3b32608944e3149e71e9ccebef6ff8b79e2056ced46d80f75d8415c0a4fdd95f3345dd19d551bc6a834b636e306304f73b3492a1b1077fdd070fb67fa622509f3392de580bad34c52d741e217e5abda726d90c576aa4bd91d7d3b4df3dcbb9b22f92e50f99c1e06920d76d31923790720f98c30906cd0d31a23b935a8f7cf0c03c90687428c91fc0ab0e4b3c240b2c1c13b6324cf02967c76184836d84c3046f20c40f2396120d9e06c136324970092b704e5f46ca31dd6c61a12df03cf7b6e50a834dabb6a8cca3c6095e705854aa3fdfec6a8ac0ea83cdf24956d88f758e762b28ad045b193ec0f8a083d0d0ea7d66093c118b1c781e27e814962337dc49681b310dc1d9d628df68771e24405a0f7c2a0b800a32bea8c59eadf80ca8b8242a5d1e55fc6a85c00bce9c541a1d2e8a47163543602546edd955dd8decd2c0dfacaada6a81c0cfa612f3149653b46e558fba5a98c307af2f20afeb95b1dcde5c78f8fb0ef0bed7f3bbf8fb2afc5366c51083bba6b1397e04b4d12dcc957d757b2e6e6ff9f7ed8d7405575593a9688f5628383bbcbc6ac070147b06dd79e8714f6f87338b0c4cb4d52d9340e954253a3a35763238668ec006af92b4cd25897dd2c65ba97d840c3edd757137a1879f8aa9bb6a0bab9321d4d4b687bce9eb6d3481e19c76af00afb45e7d964d6f45c4d685b7eb82d41a9d9defb26a6e85d0d8af655e9d88cb5922cb47fae202a1b061b0dea8d55401f820ae8eaa0526bb4156f8cda5f8153b8261d1512d65e722b2483f5bab10aa91a28fcd79aa4b1be7d3399cfd72b20cef66b639965528f1abe4aa911b0bfedc139b6d4e0aa64635d1fbf032f795d708e2d35185f1adb65f154509caf4f8757ec19f58c45ac45eeeeee9d8686a3b1c2fd0a28dc37985ea64809cb630917b34f0bd8ab8783cdd2a7b25fe9a11406a7452e3645e66440e68de998dfdc93fded5ca7da3f96326ac33cb3f43440e14d2629ac0728745808f3d1e2f340c57273700e883258b16c3545e56da062b9251d54f68c31b41beec50a9f83c27cab492a6937fd78e6fd28c01256bd5484b017bc3520ecb67454207dc8eeb640e63840e1ede998f6428bef48d65e5ece84186f7f52c8429b496465d4166967c5b250d7ccd300b177a4cb2f169315c419e0ca674c888185b4d868a1292aef06b5f58ef41ca3d733fd835dc62cf12c40df9d26e96b4dfc83b29434e708a8b1764b46d639d18ff954830b08aa9ba2b5188cd8dc958e1d6ba84d8e66644eb4ff2e669305dd73b42a421d901f096cf4eee01ca117c6adfc4a40c5734f3a4e6ced937e5f698cbc8d80bc7b8373ae4b187b1ceb83227d5f70ce753158d5183bd7650b6863df9f8e00881ec29cf653058d59220196f8403ab6a5c04764a67bc664069a2cd8f54cd1d916d0f96090e81c104a3a1b033a1f0a129d7d4349e73da0067f384874f609259d97003a770689cefea1a4f34740e72341a2b35f28e97c1ed0f96890e8ec154a3a0f02743e16243a734249e77a40e7e341a2d3e8aec6c6e85c01e87c223dc7e2ec825690b16ee00240df93e9eaaf744096d96df0e58cb834cf0332d6a4b440d0fe547a6c711774b319ebee6d0f3a349e0ed24691034c76f91a2bdafb83a188678244e7c050d2590ae87c364874f60a259d25a0b03f17243a8d1ed5648ccee3019dcf0789ce9c50d2b91dd0f94290e8ec134a3a1f0274be18243afb8692ce17009d2f0589ce7ea1a4f36b40e7cb41a2b37f28e96c0c02a5574cd2598b0138b3dbe86714397cad9e1ac4a5ebd5e06c461ec64dc5ba81f6f76b26a9ec22a1d2bb823697d0cd4516b37fd389adcb19e4486426a641b28dcdbf1c0becf6f5f46c36d27b379a53f435a0ef8da0ec85657480c258b1ff0cd4df6f06854aa38313c6a8dc1bd4dd6f05854aa30313c6a82480cab78342a5d1e906c6a83c0c50f94e7aa6fa0f4c7f55636cd38646c03fbe9bae15b5ce9c74ba8e67019bec5f4ec2bc6ee762505bbf179cadc1068430f09907acf17d93543623740b111a6e17f18fa6116cc9bcc1758ec6bc622d60931f0475b720a36190b1dd827e020dc90f834aadd1b0c818b52b01b51f05955aa3ed2063d4de021cc2c726a96d0feaf942d65799cb285cc26afaf1c4bb867c02abf317da70695b8c6f2c0eb81c58ef27e9982e83af048271408ec9d3538c45023f037bfd344864867181dfef80cccf8244a6c1633f8c91f90920f3f320916970c3506364fe04c8fc2248641a5cf4678ccc8f00995f06894c83472a1a23f36340e6574122338c5b7ebf0bc8fc3a48641a0ce58d91f92120f39b209119c61ea73e2068ff3648641adc48d918997d0199df0563677f83f5b8b13ef97e6048e37b9334b622ea6bd40c167263eb806601bbfc2168841a2ce8c6083d1810fa63d00835d8a83446e86840e84f4123d460c3d218a11301a13f078d50831d72c6089d0c08fd2568841aec943346e84c40e8af4123d46023d318a14300a1bf058dd0302e9fde1f10fa7bd0083518d81b23341710fa47d00835d849678cd05180d03f837d9c97c13adfd8715e4780e9387fa5636e1d9d8298f6b975c6361b1f08e8fbdbf46c26b1fd4429ef5d2ab53fa57398e847691a59373679e11950ccff3149641352f5d80fba19643e2bde8bd2314dd1dc0e0a80c47f83d3d3392094d3139a80a2fd5f90c80ce3f48466804cbae42d306486717a426d40a6152432c3383d610f406624486486717a420d40664690c80ce3f4845a80cc6a4122338cd3132280ccea4122338cd3133200993582446618a727b40264d60c1299619c9eb01720b3964932d5ced9356897c61a937f80c6646d93548a43c0c4094174d704ba4f0215991e67b32a06b161dca6623f30f7a38e4962459f516c0b750e5b32580d193b6ca91010593728441ab4486344760144d63349645b46643ed77c122921e3897b6827dd13762eef82a3bded85f6bf1de851f6b5d8862c3247aeb1735a288a20b7be4972c58ab7aa031889ac7933d81162acd3f80a50db3730496d3b09b54e2731256f0939806df0b32ce6005c18c7db3380ed364c473895586c1ac64ebb3180ca46e908f34538e5ac80dfbd42a8fea0c26a6c924c7747907ee91fb534465f5de037f730499ffad957619c2adb1db4949a04894ea36d786374b60174360d129d7d4349e733a0e26916243afb8492ce3b019dcd834467ff50d2591714f61641a2b35f28e9fc0e5867cb20d119ce4530cb009dad8244a7d1c583c6e8bc08d0b96790e8ec1d4a3a8f0174ee95ee9ea5e9f6d5d9737b2483a1bf15f37d8f97b156bcb3d3b1d1f599f4c42523d4568006666b93d4d29bc9c4d9f73d7c1d700d8105b60952811e18cac503992018da3b48741a9d8d648cce3d009d6d834467df50d2792f28ec9941a2b34f28e9bc12d0d92e4874f60f259dbf003adb0789ce7ea1a4f32540678720d119ce658187003a3b06894ea3dba019a3f3044067a720d1d93b9474ae0474763649676322ce72a1cbaed27e8cb2b101b5ff6bef4ce0a32eae383e8ba52a287850b5222d78d00822b9c8e11d8e40044c248055540c39c84212624210f0be5aaf5aeb8d8aa2b51e15eaad15b5deb755abadda7af754db5ab5876dbd3a33bb7ff6b79b0412e537fb1e9fcac71c9bffcefef7bb6fe6bd79f38e4dc1d2fc568873f29e49a3c690830be06c3287897207937e4eee38741897e19b795a9ed9978d889556b9781260dd3544ac5c8435be96d0038dcd48f604cfd008292035c670dc0d1239329bb145e91249cc61a3a1fc18d4cf6e4c94c33364728ee91c48d8f39043a2d4d23c9ec360fa8f62a2ceeda49eba03d9de0b6f7c99bdbecd17aea0aebeb47a0b0701fedd99f8a35e462566b67fc0bd788d991bce56a50522fedaa4108e0e716a144970bb975a675e9527e1d56f602aed045069b9d9dc06e070b355a6651f0228f342aab478d24670a67ead97d0aed7d689c9012aed90f38c6bb4ba902bb51359a82b604dcd67a2ee7dc9aa5295b5680780ec164803aa31d0611b005a280da8c65ab49fc086618c34a01a6bd17e06408ba401d5588b766398f2c5d2806aac45bb39002d910654a3a3fa3d98f2a5d2806aac45fb3e00dd431a508dc77a1f02d03da501d5588bf69f0074af10ae932fd61796a8ef697ed58700edde52d152cbfad3d03e635268f791531347a383ef0f20a5fb3251f6bcfb11d116a5753f6a028fd37e21d2b78b37a868934f60429765d7cd9c18aac943253a427662a15c06bba2b1b24ca47c95becff9b0428e930654a3efb319808e970654a3efb301804e900654a3ef732e002d970654a3ef330e40274a03aad1f7390f804e920654a3efb30680564803aad1f7390780ee2f0da846df671d009d2c0da846df673d009dc2043ad0443922c10bae35b3e04d3329785399f0869a2fdbc48c289bb426668b60177f40361d22e9c160c4ddd10a16caddc03557c944897db89abc27de0dd4e265517b33b35360adac0a919e988098a8a4dcd5c185ee88e57760f53c3084bbb8c01484573e3477f150581da7c92d404d543cb4893e07d05633d1ee6cd2a3949beca5737d3a8243b7a14728cf05ccd34318f3dde9f7cc4c5097c7ac311bb40db4fc0c1995c3a6fbf5d5c5de37f8e19ab906d44a16da0300edcc10ca2acfe7286d280d754f07d3e9203915e735f6429a0766d3b743549ceffe9838bd78bfc6ce865530ad0f9604536367c36900f31049303576361c0330674982a9b1b3e12480796808475d64d0bbdd509da932896e1d11c4b5d99e1aedce7dc0903f8c89d7b5ca1ae703be9aec85faf6ec2340771f1ec283d4d31d0fb512284dee46c2b49e2d092735b18086b312701e210927b538200de781b02ad648c2493dfaa5e13c1e70ce9184935a6b9186f30ac0592b0927752349c3790be0ac9384935a949a86f331c0592f0927b5ec2f0de7ab80b341124e6a516a1ace18184a73f9071755f6cfee5c287af9ac35d3a5e56b0c3629a08d920affea2c0a9003def6b8249c252a716e0f38e749c2394625ce2761b2cf9784b35025cedb016793249cc52a717e15267bb3249c452a71be0bd2d92209679e4a9cf301e70249380b54e2bc1070b64ac2a93321eb58c079643603b6d3273a3159907652f411ecd8dba4a02c50897222ecd6dba5a0a4a6b0d250f603940bc344c165215f881686f026ac8f1d2192addc0b3778398cc66e495ea20f5e0ce02d0ad1a123d7ebeb7ab3b04b175c02ee4285ceb6e9b0c3392a442b9eee8d1e8c61c71e06c420983fc548586f00ac8b4344b3473146890a487193d9df08d58dc6aa5ca5a06c968498f03db326f5819c09b6e4522920354ae47e00f26829208991c234902701c863a480249e44d2401e03208f95025263afad1500f23829208989523490e702c8e3a580243ad368209f0690274801a9d169712d803c510a4862e6190de40b00f224292089d53469209f059027cb6928a631816f32a03c25449a94bb64dd89a563982b250de66270619c2a0926517fd3602e0198df9104936855d260d602ccef4a82a9b1096313c03c4d124c8d0ae8708079ba24981a33c86703cc3324c1d498413e15609e2909a6c60cf24a8079962498c4fd0f0de6d100f37b92606aac07730cc03c5b4e1f208d4ee00f00e5f7e57460216a725a90c145b02f3f4756a1e662951d587e01b2f90369403576607901809e2b0da8c60e2c4f02d0f3a401d5d881e529007abe34a01a3bb03c03402f90065463c0ff7300f44269403576607904805e240da8c60e2c8f01d08ba501d5d881e57100ba4c1a508d1d589e00a097b09302269845a6dedf6245d22112b74faeb1dfddd368f06895da5d898f08dea5725a8410e570050be50808b7be8c897288c96cd5ddf3d2e1449d4e2b1d7e26c8e87226d89d4c66378144eb9072d396bcc40de8d2a7d6ee07d578d8d101fea6cb43f56689be276e658ae9dcee869c23c42b67064ae98a10394288739afda343596f7f72832ef08357fa5577896aac4f03d61521b0464b4162da27b2d92accf82efdf645a6903bf9fbb2b00e01d575a59cee021acf39f70365751513e5f630f1a32ccb6a3f58ab954f57c8ccc9ecf42419cdf9969f03d21fcaedca4294569a69f51a68fdabc3b410cbcd401c221f3d46c2b725e0fb51087cae137a707c346dde0ff05d93cdcde778e3baadcd491e171335f87016ca7300e5b5210d2397363dd32750777878ddefe9895857b0b0ee0286d175210a4e64617ad394cb19a0b7af67c2730b54e6e671aa37761aed9388f55c6956e43040f76339cd6bf25446cb9d066be30d92606a8c963b1d60ae94045363bed05280b94a124c8df942c702cc9f4882a9315f6801c0bc51124c8df9426d00f326493035e60bcd0798374b82a9315fa80560de2209a6c623b47a8079ab24981afde8f300e66da1aa15c64de7980ef7b700bb705a84c74c3832bb5d52eb9a12a62ea7f92cf7028fd01d927096aac47904e0bc53124eaaa549c37928ac9a3f9584335f25ce5300e75d927016a8c47935e05c2d0967a14a9cf700cebb25e1a456f5a0e1fc39e0bc4712ce229538df069cf74ac249cd65a3e1ec0f86d2cf42841a9498a83276e26037c82e88763efe9949e1bb2f9b116ee919171a4be636c286f2fe30412f599044da449e0d92f880946e2a54ef254d12df0315f3a01494052a5196807a79480aca7c9528bf02281f66a21c647fa9b2bf741817eaef866ab197379a36af7ae266a9f761c6fd6ffad6c9beb04e3ec2c4f84dd33990bac23ea5ccc7adc57dc25f991dacce4700d724c304eb8ce63c8a2301eea352a63b35ba8836dd3f0625f4981494052a51ce8295f3712928f355a21c08289fe0e74c54fba7779d7832dfa31e6b1fabb53f27062eb7dfdd95c4d84c5a3aca76b0763e19a6875f7186b406d8ffd024f334d83e3ec5c4b725e8f50a93c8e299ee337ae7abd6dd8300e0d321d2a15279e6332d8d71f6a6ebbc4d197d1f6b2f6eb44f5ae46dcd0e7f664e35dd6967e51703da9f4b454bddabd3d0ae8655f399309966a5e157cd588c84af00accc6799f886c2aab9f6f4fc99fe6bdc34785dae7b3f74154cfce7d87bf6b5599ed13ba5a64b55f42161dc11acce5f849052c4985841abad0d3ad95b9bce299278accab84a1e4bbcbc96d93b881b6a6bb0ad5952ba181681e7a5aa27ea7e89a69e7e090bc00b52d1521d2434b4ef83e6ff25136d8e494f4d756aea283bf9ebbdf32e318cbbfd4576885af08d6e583d569f8245e2574cdcc33cee497ea57575666aedff096f699d1f2aaa9394a5fd3f2f6b1de4f94539f5e2357616fc07acba2f3151f64f0ed0e2a51433d669d06891f12341fe5e0e61ab7617ca30ce2ba836ee3a398f65abee0cebe4afb3d98cb1cc3eb1cddba75490ab3722816c05a3ff3761e241f2c3efec9b59d3f97958035f095ddda8e7b62751bdd02ccf7b618abf1a22212bbd165742dda44ee875bb487241edbc16a2bc29c25cb795a917ec1c00fb7aa8ca9b8941baab1417603da51dcfed04ebe91b4c9c5b99c8d13cdb3fe05ebcc64b6c2084340bf33690c837e59483d458e1a31e50bec544b9632f5056dbd774832c3495f6a7c80dd2ceb53f9b5886fc2ea0e57f1ba2a07ee45f6af53ea4c6b5caacc63cf6df02d0df8539aa2b0a6fd0d3acce9180eff7a18eea3070b1271e4fbde6d265a0dfff10c25cea69ff8c52950d73be0138ff280967894a9c0300e79f24e1a4b660a6e1bc1bcca7b725e12c54897305e07c47124e9dcdc63e009cef4ac259a412e7b380f3cf927052cb51d1701e0438ff220967814a9c2703cebf4ac299af126707e07c2f849b0e031add2ea93ab963d2bb133a0e10fe2d3b27478968bb02fbd56d2e6bd67c9f6e079b6feafd5693289defb37c4a83e04cf37d26dae126dda734c7743e7aeb4dec9d3e77c93c40fd8194a42faac6a785d3bc089ea70fa5a0a46a7b1acaad402aff2e052555d3d3507e0e52f90f2928a9fb775ee91590ca7f32510eeec2688a7a09bab3f7cc5c10cd66d4c9e0b2fb57e88e6d9920c7795dde12c632a5c9e93e80f4a31096e9da9026e2466aeced05ec80398a85f67840fbef6caea6e9e79c1a1b46cc06c5f49f505bd0c4f9bc1b687172926b6e80f7924921fc6f088584e10d5db7660cd6748c067510c8e5c7e14a9fd71957d726d5ebba3d9474d2d4d06a582b3f0935c1b1176b8d1f50b3262f06849f8648367008ebbd8de96e35fab3f688bad7609dfc2c6c7a61d7abe4c4e41382ad96135968f301ede7523337a94e109a6bee5d98fc6e6e88444b758ad0d01e0a686352d152bda034b4ab6041e8c3441b697de74fdab002c0f705841b3111a64a5c65a1c42fad4e4329e0fb0a13dfd620814d5db8e43487d1de0a2b64df30325898e1f0d05c66fa60c0f75526be28f7ad67391cf92ab3381e8409bdb124981add6e4f01cc4d24c1d4d8a7f57e80b9a924981afbb43e0030fb4982a9b14febcd00b3bf24981afbb4de073037930453637edb8d007373493035f669bd09600e900493582a8d06f31580395012cc5285305f05985bf05d6c6b8be4c8520934daa9d08e80764b26da9e974b25da9bb472a9b3219c6b2b26c675c77224866af228893b745ad58fcbe0cc7c6b26caa808406f728788aa88969fb107f88f0649034a544734a07b02d0af49034a747dd0801600d06da40125aa231ad02200baad34a044a544035a0240b7930694e83aa6012d05a05f9706546316e6ee00747b694089ee101ad0d10074b034a04437320d682e00dd411a50a22b9906341f800e9104345fa9615f0c5bcf6f4803aa71eb590440bf290da846b3a910800e950654a3619f0740874903aa71eb990b4077940654a373641400dd491a508d66d30800bab334a01a0dfb1c00ba8b34a01ab79ec300e8706940353a47b607a0df0a11819ca8b2e02854fba15a8de6d4c10361a399c3c437d47cd96690c4e94e4b32a802e9dc359b87c7e9298444737e050b65219cc38f08b17246d5be1a92312275194871f5d458a7e62e90cd9121564e573f3e78fe102d98e1bf26856fb710c9819d57ce9ea40712379ab4aca23b40324785885cca5b1365e70af263017ecdd9452f8384ee2e574235b6cbbd1f247434136deffb1b6874268f042b345712ce12953877009c7992708e5189f3695847f325e12c5489f34ec059200967b14a9c9bc0642f9484b34825ce3f83748e9184334f25ce16c059240967814a9c1701ce624938a9a95c349c2702ce92103540b0f6dc347f131da6c9e8ae235b0d0aa8940971a0491552095c018496ff360b24708fd07bf4aeabceb99cb866fbaa0bfc6f2d5e3a89bef7588c84b60e1cc67b32d1465d5ddde41e6f2f5a60c7ad32d8ded1b5317103d6f801969a5493c7f610539fe661da0ba477af10eaa83b6534d63e758171997135de7147ed4b48c3b93348ecde927052bb66d270ee0f38f79184935ab28f86f300f079ee2b0927b5c0050d672be0dc4f124e6a19541acee580b34c124e6a13131ace1b01e7584938a92d7269381f019ce324e1a43621e59d6c02cef19270525be4d270fe1b704e90e4552a5519273f1c1c22e5927096a8c4b92de09c2809e71895381f35299c9324e12c54897325e0ac9084b35825ce8d60b2ef2f0967914a9c6f81744e9684334f25ceb980738a249c052a719e0d38a74ac249ad8c4cc3b914701ec0c4b983498f90771c3a8ccbdec88c91efecf9d4b73bfa0dec8e2a995877cdc0daeacf92ea2c0f97b511bdcf54b72d7c317ca932fb539b4f9fa126269cb51109f838f0db57318147adf56a4dd70556d3b7a2fa4ee607833175a01490c438111ac8ed00e4342920896b290de49ea0a2aaa580d498bc351a404e970292583280067239809c210524b154000d6439809c290524d18ca781ec07cae620292089e5556820af0789fcb61490c4d2543490db80441e2c052431879d06720b00790813e4b6665d0e8f744b52a309f439c09c2509a646c3dc8093e3d010852a7ab6c3d1a8761e05b93c8c8972b849f717cd319d93ab7bd34798869a96867d18788a0e67a2ce35991ecfee4076dfcdbd735c7d2047dd2816fec1807f768815b8e7e1dffadccc5360053e42124ca2e79306732ac0ac9104536378d8de00738e24981a4f93f60598b59260127d4e34986301669d2498444f280de63880592f092671134083391e6036488249f488d2604e00987325c124faa06830cb0166a3249844cf282fc51060c699308798ce050426f992a9e5f66bdc63acb3ef77811fd8e5c307292a4003bbd0a4c0cee3c7324db117d4faf46cac3c9bb59eb0b47ab41b03d6f92122eeba73f3e170f4ce5cb4ea0d7bc1f46f62e28c4aa8ba322b1b4ef18b8180af99896f807f376eb59cef6fb3dd5398ebeb30b827e9f37c0e8289dc12c25fdf9d164f9fc844539d2685d520850b98287bdfbc4c67f9c9b7e100a4551a508dcdcbfe02408f94065463e39dd700689b34a01a530f5e07a0edd2806a6c5ef626005d280da8c6f67abf07a01dd2806a6cbcf312005d240da8c6d6502f03d0a3a401d5d8bcec1500ba581a508dedf55e05a04b9840a362950b4da3fd737bafe298a8b99bb4fdfc2a40bb542a5a6ad2360dedc32685f6e810071e3df3791633ed529ab3e45f20a7c7488249b44969303f0298c74a82a9d18df73b80799c2498c4359306f31d8079bc2498443b9406f30d8079822498441b9406f32d8079a224981acf2f7f05304f920493b87fa7c17c11609e2c0926f10c8906f35380798a2498c4f3231acc189c709e1ae2b0b86799721acb05fc15e4f23b4c94516bd2ee4046ef941a8458d18784713e640e7d37bbe10b89a19a3c4aa2a94eeb437c094ceed364793975b67bbc12a6f8e9d2806a0c5fb806809e210da8c6f0856500f44c694035862f5c0a40cf92065463f8c27200fa3d694035862f5c0e40cf96065463f8c2b900f4fbd2806a0c5f380f809e230da8c6f085f301e80fa401d518be7011003d970974a8e9bce94c9cb2579bf166b2cf2772d592138f61c65199bd83b8a12663d3728b16c246f43c265e6ca6bbc8a7bfb8ce9a73927b785737999e12b38205f1789382787e888ca2428f317046112dd6a30464f0826cfa952aed53e6d99f5ce56eaa5f892689a3c1457721df035feb638cdc8bbb1b2db34f59627faadd40d2b586c3b4be2844de25e6097797dc4acf0ea6a99a12c0793113e7e02e704e4f72a8340d166d8d1fbcdabf406b08a8c359503f05a8cbc224b3e66d40aae742b02e2f0911c1d9d9baec490c2771af4e433b03b4faa521b47acf0e833586cf4c80497e598882155f24ce9878c84193d1eb00ec72a96089c77134b05701d8cba582252e05bce2a900f60aa960898e101ad8c900768554b01acbfd4e04b0574a05abd1c01a0360af920a96786c47037b3180fda154b0c403661ad8f300ecd552c16acc966b07b03f920a9618b44303db0660af09ed1fe8ba22fd74ef6c711bdd063f5c33d7925d4933b8c0557d6d88833d74071e60bf2fb63fb9db5e94f4b42ef4b2da62ca93deacfa108e415accf3c3e0d9ba8e897773fbcb345fced29d8e56daa739698d8ef668e068452c87c094bf3e8447754cf244b4c9920876164a5b319701be1f33f165f6338edb9b980918bb3fd8236e4f57b0b0b6c06a79831c6faac62ca53848e8ca10c77add1d37776e80a2b105ca5890cc55927096aac4d90c387f2209679e4a9c8d700a75a3249cf92a719e07386f9284b34025ce5580f36649380b55e27c0870de22092735a78e86f379c079ab249c452a71fe0d70de260927b5d8000de7766028ddcef71fa5bc425d879065a9e904af7db449e1bd8389778049b9e7dceebd29940b842699a782ebedce106530ba9be8e97b75aa8944dbad7f1da6f94f25c1d45853645780799724981aab2a7e08fa7cb524981aab2afe1d60de2d09a6c6aa8a7f0498f74882a9b2aa22c0bc57124c8d55155f07983f9304536358f81b00f33e49303556557c1c60de2f09a6c6aa8acf79981bf7cd18bcbcd3e0e3bc23c2b9226a4d147fd16e1f9f685c4a61bd07516b7f9f62e2fe5947581cb3ecbfde7d0287d97f5d3d1e8b0db47734c12cb6b7e71e75e3d5f9b19bed5fdd9db59bdc5c7bc9034e20b6480a448e3f232db3cc5d62e33453ef5f7d897d9ebbe73a1f0211f5f7ecf048727c61b82afb5887714112ee155c9a64a3fdab7bc771b314e24f72629b784ef566519280039893bcd74526916cd9558a658ec75d9574efe4f8d08ce8b72820c33d6f86bf8b1c1f8130defed4e0efacc9387f86bb2b47a1c35fedc674098153bc6cb93b71dd4a2bfdddd7dbb1dd1529cf484e6cd3e4b589cf26f109b627efa4fb20919cd8669dfeee3ed34447d49c587f3f7f16f877db6059a4124d73625bd9bf25de4fead114a5037d3040877f8d015ddcdb54ffe935dab1eb92dccbd77876a257e86b1f1d97744db47bb18ec5b64c4ab2bb2231468d1da1c67f9fbee67d8dceb397c58aec974494dcee6be2e31292df6cff257e8b1e5ff7984e8ed73eda834e58635daf5e4deb6d06aeeb1d25160df7fc06ef13abf7a356acf39daefbfd753f9b375bcba7323adf7d161bf2fb7fc87dee7d929f7b9fd105eefde6ad07d95bf71d3d8cafbcbef565faf4132fcf557e4d6ff557badbfc32f2dccfafdf385edcbfeee84299b2bcfedefb23b886f5193de68bca72efefe851a62c27464b844e678c3db107efaeebcf21f33da7ae6a4d6afe481650dbad9bc4106fe7743f5a99fd6dae7faf713f6ab389fe733ad2d9d26e097a8cc9b33f2cf8f569f17fff5f279cedead689c7d3a652ae9b4a4ffc5fc6d7938cbb7fdb7a319c619f9bd098ce7e6db33fbbf13eaee863fafe0fa92772475d380700 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/d62a7e56981557a45885059f71241f95.asset.meta b/Assets/SerializedUdonPrograms/d62a7e56981557a45885059f71241f95.asset.meta new file mode 100644 index 0000000..e747306 --- /dev/null +++ b/Assets/SerializedUdonPrograms/d62a7e56981557a45885059f71241f95.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6d84be9cf05d7484e823f3d0d3bdcb6b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/d64743f497e1d0643b0507eda6089565.asset b/Assets/SerializedUdonPrograms/d64743f497e1d0643b0507eda6089565.asset index e7bac78..1ff060e 100644 --- a/Assets/SerializedUdonPrograms/d64743f497e1d0643b0507eda6089565.asset +++ b/Assets/SerializedUdonPrograms/d64743f497e1d0643b0507eda6089565.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed585953134110ee49b20410413c38442d2c1fd412dd052cdf053cf082e27a510b430e8c95c4140996fe005f7cf1f7f8bfacf251bfee9d0d9becec2ec1ac58e86e6566768e9eeeefeb99e949ca263c6a06c916add122dda14d2ad07baaa1b488bc8ad7fdf2ea57690ff92ed21cda66683a66243fd7d504d2657c35a88991fb94475e96f6752aa2bc8cb1457c716d09bf227aa90c066dd212add00b1a571762446cc9a086ae536c97ea47ba409fd05a14a578125b9ac691aca3a5216d5528edf57b49afc5ac2adaf218b34715c8dc1189fd9778acd82499a5f3347e03dcce654b89e68f212b4775b253dce96617107b23e3c165d17d29571fa0ccd33661461d020c166e0a7e4d9aa739a385936ac8a7f7a2a439f4288bd0bee014df0253b07215bc451f3d0dd43f127699a0325aeed033e43cea0dcd02f0971d52b6306d0514176903695de4bd81dac19e712631959d63d620d3f5b42a6a3c40ebf8ae8886eb927e104d8ba2fd32ea9ae2f73578fe02f28f325bd0f63d944d736e68c8cc3a9a1d2eacde756b8fa62558c3dadbec83ff1939164618fabe3ebd0c3336af11f525c0c47f0cdd4dc6928ddc9531eb6ea56d757364cbbeba1640b07b1b83169afddbc5fb1edd8db4c58c0cd33d25161c30fcfd73fdfbd36b5f7f58eda6cd93cd6ea22ec59816052ccbbba1c60212a24db0ac8cc38a76c2af4cf067b972fd0fc2eff62b4bbfee09704fa67602d4a0a89fd75d7690e7502a50801187876705d4e09119a75818ac2913acbc6dab8d63f1eab0a0261ad8fe961507c0da1ce7483cd7ed5c1220291d25b51688998f41e1e328b3843192363132f8a71d3d7e678fe2e354cbae033ef831633814e2d3713a8421983121c82aa9578922180c81bdd202c6be05121f24aed9c77853c81c8de969e87ebb0353339ec382e7b43190ef4ea330842d03c20efbe88881f89f78ac810e4599732b8b572966e68190b007c357317159be1a64732fe574712361e8aab289567036e550aae8d3295ac29988fb49a967a16a9c15aebbf3f892dc67bcf0c7645dbc4de16179565be4c902d2ec5d27ced2516655df822965f3ba50b78ee84df15a9ce5d9d287bde3c61dd8ae8017f2e70504b0836e425601152cc21431c4ceb982ceef3497a6396f8b002fa6ebc1359d1ded3e342b88a60dbcfcf0b2ef10feb0679e77b4782db846466457fa08f5b896e5153ad70c77f9eb343fe7f7f91b87f29b836dd8bc7d3abc0d9fffc77748877748fe6baf757f4e39bca18c25b9ea79ce6dbccc57095db65bb2cbc1f5fe3b77b581b6956f1dc694a3af7e17b8f124811b8e04ae911c7483494197f24137912474631ababc5eb44d94fd02fdca6f93931c9443494169f9a09c4c12caab1a4a379ead891fb2124d09b86bf444ff257ad2004efb00be9824c023a1cbbca6bb24065e3629f0940fbca9a40f17fe733707217ca23e478961db95afc4801b4e0ab80c9d98d0d2e12e0cb92f928ba6cb8de146b5ad35ccf85c369a9c8efc72be78cee6a050dda3ee2e42d132e383adcb7e733a38aaf48ca35e0490264b7f27981c8a60c566ca4eb4fd5798774dbbb8e9b85c35fc979215b986b052fc58bf007ce061a6ed1f0000 serializedProgramBytesString: - serializedSignature: 8976bc04c00e4ad253a5e0878fd4e5bcae5b4478244cccdc7dd6b61e347b1e24eb5e081faedecdb4ff66edc5a4d443e46ed6c0702fc4c961c3a7adf98753a904 + serializedSignature: cbf8913d23aab3dbec18f0ed024f4c6dcd846ec8b590c390a5d935feb732a7d3d161b5bb477f129e7c877e572392d9a9db5b77e2e8252b2226df3aa9ac74570e programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/d722b6db295ca634790a0beebd593b48.asset b/Assets/SerializedUdonPrograms/d722b6db295ca634790a0beebd593b48.asset index c30e040..6f887f8 100644 --- a/Assets/SerializedUdonPrograms/d722b6db295ca634790a0beebd593b48.asset +++ b/Assets/SerializedUdonPrograms/d722b6db295ca634790a0beebd593b48.asset @@ -12,9 +12,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} m_Name: d722b6db295ca634790a0beebd593b48 m_EditorClassIdentifier: - serializedProgramCompressedBytes: 1f8b080000000000000aed5d077c1cc5d59fb32df7debbe52e57c9961b065c2437811b966d3a46b66423906423c98d6a7aef107a0d25f45e424f420d35040209bd04022474020408dfbed919ddbbb97977b7b7fba45d7f917fd66867675ff9cfcc9bf666a659be707e62639d5f2bc532512cc68b15a25cac1735ce5fc54e58edfc739f74fc5251eb84eb9cdf65cebbb12237cd97f03332d6dbf95de23cd5897ae7cb8d628d1356caf7a5a2c2f9bbc4f9b6c27982d8b5ceff0a2755ac85f3d10a31472c118b45af588f342456ca8fea545c0cf48ab5767e1789adcedb0a291430c997af7a39bf4a9d3775f25db523b44eb7b7d857aa55edbc5be37c532baa1c9aab25c5d6578c17f20fe1067355d84d85739cff6dd4dfcdd4dfadd5df38fd0815cecb30fd7c158e72feb774fe1ca49e17a87092115fa2c2d146fc2e2a1c63c4efaac2b146fc42158e33e217a970bc11bf5885f946fc12151618f14b5538c188df4d85138df8652a2c34e24b5538d9885faec22946fc0a154e35e257aa709a11bfbb0a7730e2f750e174237e4f15ee64c4efa5c21d8df8bd55b8b311bf8f0a6718f1fbaa70a611bf9f0a6719f1ab5438db88df5f8545467c67e7bf53fb9afd24e8b259a6c29bd4b7b9225e4671fc6023fdcd46fad146bc99fe16153f44c4cb3a8e1f6aa4bfd5a05f68c46bfaab55789b917eb2116fca73bb917e8a11afd3af51e11d46fa6946bc99fe4e23fd0e46bc99fe2e23fd7423de4c7fb7917e47235ea72f57e13d46fad946bc4e5fa1c27b8df44546bc4ebf56c4cb5a2636b05885f7293ac3d0b35356737ea39e5ba3f836469aa7d4f33ae77f8e10ed1ef3c057d3fdade23f1c3d3bb45b2e30d21523fead8d340778e05fe9a695dfc0f378151ea8e41891018d833cf0abb2e44bb5fb7d8769197cdf4e85f72bf946aae7f52a7c08d17d08a585f061f54d1e7a76706b7dac415b7ff7884a3f0a3d43f828e2b14185bf43718fa238087fafe88c46cfc0771f826f8d4a3f063d4358abc283d5fbb1c6fb3a112ffbf8bd0d4fcdab1e3dc337e3dcbc6835cbc04ea77b10a5d3cf103ea0e275f96987e2717ee55be253e94ce96462b2d178ff00922393fadf5e857f10f672f504a2f3044a0be19322b15c3de9e66fdb370cdafabba74462b9d276e369915caefe88e29e4671103e2312cbd5338aef5d04df4d06c69b0c0c371b18eaf75eca95e6558f9e51b96a7381819d4ef7b8482c578fabf0319158aedaa3789c5ff996f8543a533a99986c31de3f86e4c8a45c7575f3a4dd3f52a45d8bd26a9a5b55788881d3a14a9e820c78ebb6e23944f739579ef687a9e7c3503cd09d809e217c167dfbacfaf63ef57c388a876f271ae9be57cf4764a00bd87f9db7ba8dc0781c29326f23b689c436ed2815be60e8f8820a9f17896dfef3aefc1dce543c1f35f47dd1d0f7c53474743fd74bdbda45856d55f827f54d217a7668775c6ea4eb8230d3e5aa138ad3f6ac9b25ae8725aea725ee1314a7edfc1b22d16e7e82e2217c4924dac8975cf93be93cd763dcb2d4e92159025fcde7539168533f55e12b22d9a6fe05c5bd82e220fcb348b4a97f56725ee29685aeaf19f4ffa9d24f42cf10be6f9491f75d3a9d2719df1fadc27fa9f493d133847f55f153d0b32e43984f217a86f035a4e36b8af74d06ef6354f899c1fb33157e8e687caec263114df8662a7a86f055f4cdab2edf2efd0dbec7a9f00b83ef172afc10d1f810d1c2754bd1ee7a9f41fb78157e69d0fe52851f23da1f2bf94e34689ca0be9d66c4eb745f19b4bf52e1d788f6d78ab62e0f3d54588f9e717ba7799ca4c26f0c1edfa8f05bc4e35b85819ee7e869f0e869f0d0f646d7b54fd4fb1d8cf87af46c9351e71f6e3b6d7543a7ab42e9709dad37e4507d848e571bf274178936613a7a76f4ef5e6ea4ef2512c7883abe1f117fb20ab50ddb113d43d887f8ae2f11df9b881f2a12e71a74fc292a7cd3e0ffa60a8713f44e55e1dbc6776fab7018f11de099caa67f62a4d736310f3d3bb80fd0b66c84f1ddbf55fa9d8c78ade77786bcfabdce87ef89f75adf1f8cf7ed105f5dfe6c6d01551ef5fbd35448d9e2ff208cf4bcd027e81d7cb3b341f374155236f64744b39741f347f5cd0c83a6b6db94fdb4d9ed9f55da99062dddfe50f6d26c7f7e46f110fe57bd9f859e21fc49c5cf36f89da142ca865ada8f5e3a9fb4bd7843a5716c452fcd77bdf10ed7dfbf295e7aaee82723bed888ff05d1e86de489d6cbcc93335548d86df8b38166bf449af29d8de659ea7d2c91a67c86b0599c664cf51b63cd55da398a869e47face783f2331be015b6d834c9b7fb6fabe85214b0b15e620597254d89290e54de3bda9f739ea7d2b83572b15b646581ae374f9ce46f35cf5be8d4153cbdcd642b31ebdb3d13c4fbd6f67d054f628d6de42f314f4ce4653b5ffb10e06cd0eea3deed7f555ef70ff5ef5f5fa6e33e8fe4aa5ed6cd0edacc28ea2a14ef5555889f38d779a172ebb1dd3e46117839f1ad7c4f0d84eb72bebd13b1b4d357710eb66d054ed54acbb85663d7a97aa5cf43068aafe5aaca785e629e89d8de685ea7d2f83a6b2ef72b9d2a479327a97aaacf53168f651615f0bcd8bd03b1bcd4bd4fb7e064d659f62fd2d342f46ef304d73be4cc925f41cc0c92afd5c839e4eaffbf53fa8f054237d9a3e63f72d063d2cbbad8fa3c79de9c6ad54dfe731c407c235a9d30fee6df00d7adcaac747a3d1b3c377e072179f5cdd37e8a4e20f33f85d2aec631e6a7cfba1481cdf7ee8d21dd4ddf8deeff856f32944cf10be8fb05063eb41a71abcfd8c6ff5b87a2a7a36edafb2b5837e32f8a61bdf9a63504d0b8f6f15eddc170ddae9c6b7963168ee01060d737c3b50249665735ca8e3ebd1b387716143d9f3392e1cb00ffa4e97e5362251c60122b11e4e47cf500f5f34d20f128963241d9f4bc40f26e28710f103446a3bf489915ed7e33cf4ecc89df7b29157d84ee1b116b66b36fba2db6f4b391eb2cdc579c85de85b082f13a9ebb08dd61b060dcabea41b935d2e52d6e118c6577f7305c1eb4a91ba5e5a6ccad0735d4c861718b4ae2278fc5aa4ae9f1f221eca660ed37d105d76b54d9c67d0d6f322d4d8498f674c5bfa3715beaedecf37f8e9f862235e8f4d91fe0defde4a2323357ff5ae21e35b281ec2f7d4fb0506bff70819f1584dfb977c82d2a41a3f537994cdf899ca93a0c7cfd7a4c1d72c03e9c6ba78fe2137113f72ac7badc2379628831e9726e4c96083e62f06cd2189efe14ff9bec4e0799d7a4f8c3f1bcaf0144407c7ef92861f254f73421ee50f428e5107aaf85dd133ae370b117d1cbf288d1c949c2d0939af57ef8971af591f251d1cbf380dbf1989f154db3df80315aff5f5dabf7d59d1d3be7e7abdf706153f02a58390e84f8d2a77e519a5fb797a8e73bdf1dd52f40ca1655e6a945eb7ef6fd078d5a0a1d28fd665d5cb3ae0cbea5bdd2eeafeb62e0fda9751eba1ed8d9eeb1a63c46b5e7a3dc29c1b1b6bc4ebf47a6de17523fd54235ea7d7ede59b08b7964a176d7b2cf379633a1b58dae6f3de326478d388d732e875de77108d56ae0c63b61932bc8d6438d790e16df4bd9e5b7fd790e11d235ecba0bf7bcf483fce88d7e9cdf2a8c721d3d1b323ff585d9f74bf4ecf35687babdb853e46bc6e17fa1af17a7ca7d728f4fcb61e77f533d2eb71666f235eeb37cc889fadc2e146bcae3b1f18f8ec64c46b7c3aaaf0ef46fa9d8df811067d8da71e4f4e47cf0e9ee375ddd4639e5c434eddcf1b64c46b3a838d78bd3631c488d7fd073da7a8e59c45c4eb79bf8f44b2bdfc078afb08c541f8b148b4976aad73bc2eef33107d6c47b46dbad19023c136e5c464bbbb40548832479a7c69aca02466eae6afbf4cefe00fa45bc22ff81929d9d68badcea715362ffb15d287bfde29b513ad5ef67de4bcabe65e2c7f9739292a25d165b12416bf4d6201c25539ff2ad016813a277ebedc61009b042a9d37e3c5422784aff677ccd0decebf442a2b1db65562a3f3b4dcf9bd41d2dbdf113b39653a95603b81f9cd3287a6bbdba1da89d1806e709eaba484a5f2f72629698594bec489ab977b2f6ac43aa712af175b24b764dd6b9dbf6d3c972bc8ec32da373d50f1eed60a9d4d731c6d40fa7cd977f85f8e34458ec8ee06d40ff869912fade5c94939f13f0c5d23030b60258ac60409592c216ea2c8976b64cb9210f4ae63b286f6f2ede23dc569e853e9624706b2bb9fd4209ec3f78fbbf88987c79dd83b2751b542912f8710fdd3a8960a58a097275757bca89093d3a2000435e18fd9e097c3b4d24684df4d5729d379cf8096b2f14bcc00e946e2369e60d9d68903e436b5f5f275b512cffe669143a4c6f9bf4eaa93948305c0ae95cc84e426369d22543634b36543ebc6ce86f476275536b46ed02b9e0df06347b00d81603a1928049bdb1094fdbf75ac08ae70e2dc0ed25cf9b652b6aa601b2b9c54f50ea75a5591a9941abf457293e44629436aa4a11b3cce40da8e723b89320c7379e4a472a3852d37a4176e650872a3d0e935059b23ed33ce910e3247c6659c23d9c84ae54a8e2d57a43fc6c626c9956287077004cacb647fb45c524d44406f0a0e2eb73a36e010cfad7cb936b4438a7ce193b6933b9c747f5ae5d80b4e6759709a4640aa40b5b4152839285fde88cd16bc5b2fa940c3edbde102af9b3166ffc19e095d6526f44e522ebd081484ad2c10160084ddac52b531a4028108caad29cadd2d948517ca6d6cd9deb169faecd9f5556082b79701410bb2afd2336597db6b4fa5ad0dbd4e8ddfe5767ba95522f5f8cd8e1ff4db0619f81516de39c38e5f6fb2b79c5a060ac1763604e5dcf8414dd48eb934d7cb67e0167c9bd5c7d666497fc1fc944d421092f5cda47dea2733995f18aa50b4b7993b2814fd2dc8150072030cb54c0bd88fb6801d6cccc02c0eb475044dc2ed68c21d6d84217290c562c14f12f19e34f14e548b90ebb745e84c511eec9772171b6550640865824ce2bd69e25d29b187fa15bb1b958fc302c8c7ee14f1e116e2bf383f5e88f7a0888f0840f29e14f1910110ef65219e2fb3b869069d702ad21ad91faf1593189a843c8b61cb97052fd5f0d2bf54a34406cd012c81a61ee7fa17846a0a7adb4a1914843116c40a00b1b1227553309a2e757d2866e32866e3b367d69762964f312bc89e593f8ad9048ad9c4ec99f5b73103cb501880651840119f6421eed5600eb4991d69a21b73101c1f8b5087a8a53626936dc644b605c9a3ddf4bcc091a2f5362157d5fff7f3fffc876821c039ca369792be7451765fbab8da0c16f8a7a4ed95a7304eb914e11d7c121e4c119eee93f0108af08e3e090fb510ce97ddbaa6197bc36a9dbbe6b6c5b1e65b583a5a3b098b6d94bdcd54c3dd602453c712ba3f54676b864837f60e4618aae20da34adb4c0b72b2a7304b64dd53184e319b4d312bca9ed9081b3368dc8b6dcca0bd84fdbcadc16084a1e94bd615ac2ea1abdce5670376ae208085fd0d2d9b2b5e2df265bf3bd562636297df6be9cb052ec62f4795dec9b1695f792b04f1819601cc7c0a18d8a0d15217b9ec446ccc57dee0186583a3a3708fbef5db551f4d11df2500e26328e2bb06407c2c457c6100c4c751c41705407c3c457c7100c4f329e24b02205e40115f1a00f10914f1dd02203e9122be2c00e28514f1d200884fa2882f0f80f8648af88a00884fa188af0c80f8548af8ee01109f4611df2300e23b50c4f70c80f8748af85e0110df9122be7700c477a288ef1300f19d29e2fb06407c06457cbf0088cfa488af0a80f82c8af8fe01109f4d112f0b807811457c7500c48b6dc4619d0a0ed6f0b54e358712bb3c00b1e7da88835b4a4543e234d3ae6d68e2f36cc46164b6566430c391621834df4618dc74c091d4ea67bcaa617b8edda31866b43639efd63bf9051fce7552837771a9a8967e43f5ce174912b6a2255c404978804dc281194bb8bb9a632b4f982ef02259092559a54db21e1948e6ee5f01b9bcc8b10b25c7817ee47067b3bcc8b12b25c7413639066420c76ce76db91c32573a3996ad5c0b29b9aa6c720dcd422e28415b9c3e3efc5debbc813b6b367b9271112563b54dc65e19c808530c658e4186c984724fb22ca664a9c95696c42b73bcc8b2849265bd4d967e19c8e2de2bb45ac01c6c9144a7c6233e4b299936642b53a91353e6c8b541ce036f9412d5799269374aa6836d3275ce40262fdc9751dc6bb36d4596c996a24ce85d7cbb39f1659276ad9c44f35a8e4a2909eb6c12f6ce40c2154e6ddfecd0755b396f782da7a4a9b749d33f0369963872ac914fba96b9f279916a0525d5469b5499b4b4c9526567c15752926d4adfb22c757e574a8e943d582fa5abcfa254ed4ec9b5d926575f4f7265d717d88392684bfa3c4c27d11c2716a6a9d76485d59e94645b83c1ca7ba9da8b92e810ffa50a6f4f287190f322d7de945c87facf43906b75d688ed434976587abb954eb2e5026fdcf022d5be945487a72f5971598ae408c0fdbb46f60eea245a90876b9d7f5e24da8f92e888f439385bea5fc624d92a4ab223b36d07cd96da8b34fb53d26cb349d32d0369bcb77a6536196052e028913c29902bbc4d0aaca6881f6d21bebf47e26b28e2c758886ff348bc9c227eac85f82c8fc42b28e2c759883fea91f85a1b71983f3a5ef8dc64b4ce4619a6784e68481ca7fc548e45ec14533c0750c44fb4105fd0d21bf14a8af84916e2f51e891f68230e5eeb702c84e9b52e6cb999c26bfd204af2532c92dfe751f22aaaa89c6a292a9ea61aab29b14fb388fdbd47b16b2cc4f3a56b2e34d07c6e49c9e7f3e8bf8a9c6f6108bb493602d084dbcef349ed7804f72364b6ad186e0ec88be50adb2943de24a27c7cd65306ea4c8b81b216e914066a832dfba4b37363ee895be2344e07aadebc770fdab332ceacb3857d3f5c3afe54d61c6c434f7a6f1fd5c885df7ea0d57c51a6c6be71fd923783e9138d60ebf25a2905c48314e90fc24a9d33e734e083fcf7a4c3f95c6b85692a2de068bdb650930937bff364b90997cc5499acb5990be873c25d0b49fd586836323a8dc5432fb68e92e07c9b041d64ba3a51a21cd22ae5ab4a67e0eb75aeb89e329417580c65cca3a1dc68230e55fd424b192f80327e51bc50997ccea3f96cb2f181f6f4629b9533099f4113de4c297009a5c0a55929b085e27319c5e7f2acf86ca5f85c41f1b9322b3e8750a5f92a5b698675d0154e8d2e5733c489271fb9f3fdae7df736a77ea8ada591bb6b6a9ab4a581959d8db2bd84bf3729bbb65cf28e9fc6e4a70d81a3cb07587a39f063b7d6574b6b3d31036b1d84f4941d3e8c2a9fd750e5f3daaccae7e1149feb283e7048743389d4f512a9f182761cb6b563de9dd7bde87304a5cf0d943e376685db91363e302aba49248f8afa77f0362ada4611bfd9427c8147e2475108dd4221746b56081d4d59bedb6c96af8d4c572353d6a8558cad9e6cdc3114bfdb6dfce031bb7589636db6546e26ac60b5a5a9ea8cab45b0bb67ee70b4696ef6bee556ad51296a7cf6d2e482494ef8b56d26d1a1be531a1e1e3128837c1c55bceeb215afae42774beb6516c39278bdec922e77bacab5721cbfcea3fbd0f1940477d315aa4ecc71b4ae9166180a99177e2750fceeb1f1eb2412bb2ecba5d65095d74a94ab3df13e91e27daf8d775ba5abe9cce285e34914c7fb6c1c61d851e43c1e246c4bc35ef89e6ce30bc30e3813d81c76c09e1d2fc38e5328e2f75b8837f348fc548af80316e22d3d123f8dca8e076dd9d151b51e41f8c29d4e717ec8c6b94703e7d47e826e7fd08b1c6750723c9caabac7d7b0bc8e7fcfa4f83d62e3077e3730ef50a5d6cba0baf9593f3b8be2fea88d7bf70cb8c3f36651e0498ab329297ee74f8a099ea4388792e2f7b4298afb5ab9eb868b6489f3a6fdb914df3f78e5eb4ddff328be8f79e53bd113df5f517c1fa76a3ac5d75f1370be458efc5c886c9a3370fd6df74cddab7c4224f72af506c76d8f18bf88eedf9322dde9b8fe34a0ba801750e5e5292fe514fc6bbdd5cb0b29be4f7be5ebad5e5e64e30b4ded1f05710ca38706fe628af83316e2391e895f4221f6ac57c4bc59944b29becfd9f8b613895de665b2c3bcce63c7f5328ae7f3369eed85ee27685eae2f9cd7d1f6e514d71728aea677e21ca9759927ae57505c5fa4f0758705a61f92179e57523cff64e3097d8255cebf02e7bf9d37bc85386f525c4549f1924d8a1ca5f942e95be585cfaf293e7fb6f1e96868ebf2cb4ec3ab29ce2f5325aa541c2c36caa135f475b3f35fbe86e2fa8a8d2bf4b2670b7df6693625f85a8adf5f28cb94ecab9a0ddfeb28beafdaf8c25ca31fbfcfdf50dc5eb371eb24f3125c1cca656fb9daf9abce195a9708f7286c6fe3b7eb29de7fcdac1c6567856fb07105c5e0ce398be7d02c2f9e433752c45fb712df36d30bf19b6cc461fe0a6ea6f373e4d0cd14e1377d12bec546187a036f654278064df8564ae2b77d4a7c1b45f81d9f846fa708bfeb93f01d14e1f77c12be9322fcbe4fc27751843ff049f86e8af0df7d12be8722fca14fc2f752843ff249f83e1b6168a4e0863e5f5e86bfa5287fec97f2fd36cad07181db5cfd3ac03d60230e73639f6682748a93aa1fa4a4fe6700523f4411ff5700c41fa672f233bf39f9888d3238b77c9e09d8299c5b1eb510ce9767fc810776e34fc0f8592e4f3dfdf2850d29eb240bdc1b9e17035bc0212535c5f23b5b16434e7c9549167f4967f1efa952f9b5df52f907aa327d1340657a8cb22fdffab42f8f5352ff3b00a99fa0887f1700f127a99cfcde6f4e3e45d9971f7cda97a7a952fd1f9fa5fa8f14e11f7d127e8602f927bf203f4b51fed92fe5e728cafff54bf9798af22f7e29bf4051060f535f945fa428c7fc52fe1345b9995fca2f51949bfba5fc678a720bbf945fa628e7f8a5fc0a55b95bc6fc55eebf50845bf924fc2a85456bbf58bc46516ee397f25f6d94616ea56dccff96afbf51c4db0540fc758a78fb0088bf61230e4d788798ff26fc4d8a78c70088bf45c1d2290058dea624ef1c80e4ef50c4bb0440fc5d0a96ae01c0f21e45bc5b00c4dfa7ea7e77bf75ff034aec1e0188fd778a78cf00887f4861d2cb2f261fd92843e3d0db67e3f00f8a701f9f843fa6b0e8eb178b4fa80ad92f800af9a98d388c36fa6782478ad1c63f2d84f3e5c502b0bdb9f1673382d804907a56634026885d4f23f62f5b56c036d68199103e9b26fc194578904fc29fdb0883137a6ecce25f035edbb922f957b23fff9d34cb2f285d06fbd4e54b8af0109f84bfa2080ff549f86bcae20cf36b71bea1441eee53e46f299147f815f9df94911c198091fc8e229e1700f1ef29e2a30220fe03457c7400c4ff63219e2faf78699a2bf392af2909d6c08fb158b5fc61a06faa9beafc4b3528061ef7d5a2409e582f1a9e2718cf138de742e3b9404c30be9f607c3fc1f87e82f1fd44e3fb89c6f7138def271adf171adf171adf171adfbbcf8403e6d858ba4b02fd434fad10fc68ab57b902ac23ed599a41cbf7245ddb7ea2588e6763f9b38d25b4eff96cedfb7f2996056c2c7fa1809dc0062cccab5a594e646319b3b18436bdd0679bdecc42387fb80885df7861c02dc0245b0b206f79cad40fdcbb4449996e358693635ebcd1bd4b4119c2e654499ec256925b502579aacf929c63230c25799a4d971199a801d942706b4921b7031b72ad28e4a6fb44ae35a5cb8e6cbab4a174d9c9a72e6d295d7666d3a51da5cb0c9fbab4a77499c9a64b074a97593e75e948e9329b4d974e369630082dca4497141e6c9d29908a7d82d485223cc727e1ae14fa73d9d0ef46e932cfa72edd295de6b3e9d283d265814f5d7a52ba94b0e9d28bd265179fbaf4a674d9954d973e942e0b7dead297d265119b2efd285d16fbd4a53fa5cb12365d06502c97b2b11c681bc78c741e63701b43639d2259eabcdd2a9fbc9f21b95b0c969713b121fc2a97c9e142cf24c552b327afceb6e5166c53298d5936bbec2c1fe138aa523147ec2a4fb0a813150d71ee161c0070bcdcc4e51e38b641c6c06065b9f3045b81e01d96de85d83de2c07c17bf16dccb769a5c4aafe536bde6086af095b8111836e3c1a9245b957efa0d2df32a794cb717ca5eb41c4c69b9c2a6e5de1e730faa42bd982fe01c9cd5920c96392e712aedbde96e5282e3eb2a3d1e433184c264a50d930564ce27cf400699fba9a87bd17628a5edee366df7f55d02b0dc7e4a402afd832805c3285cf6b0e132c3b0a645f2d8156810602b9f8b05d831571bd8e8b7552c76deae13f1833a4ca91369a47eeb45b3e194667bda342bc958b312992fee46c62a9563e9746a0c7d4750faee65d37717df257c9efc1bf23555a94e6cbd2a1bb6f406517647521aef6dd378b891c3a6955a27355c25168a0a29251c26144c1b9b47c9b98f4dced9869c719eb8142e14eee1a4cb654e2597232a0f126d6e30256f14a5dfbe36fd261afa616f15334fe6ab3cc954074ccb8b06a3290df6b369504ab685983fceadb9167b919e42666982cac5311406aba81e6ea6b9589a3617294a415889b1945efbdbf4aa68b08bfa18597c88ac3e38b356ac753e71073e250d29e347d32e93f257a8a3aa126da8dbd75f2711aa96aca175d7d72ea6eef173e2348ec2a9cc86d3cc8cac143e27d0d6f67bb752d959e0f1946eabbdf575938f860fb2af9b8aba176df3296dd7d8b42d4ed32e16cbbc4ceee3e07e6826f1749e66535a0b281dcb6d3a9eca5cabe1f80c7c8c47fc9b39c23db66eab80232fe6a95a0f1c32afe918395a8bf821d9f623b283407d02857a850df5798ca8ebde5a85c057d606d71a4ea4345d6bd37427d262d87c721335285307ce807680c902e76f7d92ed1aa777976e74e145ab424aab7554fe51fd77af23a2c4be7fa6a382ec359d44697a80b7fc4bb6c989b9b7ce92bfb485b795062f5a4da6b4aab469b51763fd9befbb2f134ccf7d0a85c8813644261925ba58eaeaeaa57316e65e5395c954fd2efc9d172da6525a1c64d36259cad2ea9ec69d49fd4c4723931441d5d76914025536045634597beea54c67d3c2ee40e1506dc36147b217ee6f0c166c5f6d3aa5534d26fd51fbc8229336a731e74076a4745c6fd3716e463a2e928e69d037d820755c936216b5b146523b517a6eb0e9599071f9f43ad3939df43b53d21f6c937e116967d3af79a4af6f99520ea206cea0f4aea5e6c2b359e5cb56e744aa41e83b93d2b7cea66f7ec6eda9eef555a9f765aa0d4cf7b517d96751b2d7db645fe2b12f90685332ed07a4eaaf07a9fb6c4af78dde56a3a97e50758325ad4cd94f4fece164526abd68594469b9c9a66561007d56da8e66db632da674d86cd3212f438be26a53a76ad9e6c0a49d4349bbc5dbfc9f4d5aaf652bd1499da37ccda5b4dd4a793b0439ff47f544bca60fb60f3a8fc2e410ffe5755de0e5753e25eda199f498a9799a3972a45329f4d509c1ccd164abe3024ac7c332599fa774f4d2676e5c7d4b287d0fa73c2db2e98365d28f0edadeec42697644706dc196c0f261574ada233359ada65b5fed55e86dbe487fe54583859406dbb8fa0fb476d9e6c2224a87a3822b33a967a1bd48bb9892f6e8e0a43d2430699750d21e43cda579f366f0369fd8741e0d4b291c8ecddeefc6e6c9d154734ebb51fa1d47cd1afbf3f85a2ee08a807a875cadc512a41fe7a7fe3e75afae95f32f262f1a992bf98067e152f9053cd5897ca87472be29d3abdf8177b5a3d97aa9995eb3487f91f0f10eb82de10a3ff81919838c0145c179db728ab13b92ac12f85a893a79564f85c4a456f651c6cb6b4be0ab4c2f74b6cd718f47b3dc58bbccaf7636bde163b1564a234dcb411aae03ddee343d0172b5bdcad566f9b0b14d6e35cea634a597e244e0d6dc5e867a25218bd7186cb2bb0416abb5c586dbf20e96f51ec8d0379da7e56d9e2565f21e27092c5704d2925b81cc848d5c1f59e05cb7a15ae1ba383ee8d4fa5639cd0a204f4ee2040e8e7bd66339b03271bf02c83b773b4c1400831f0dd8c99c80c1a11560c60b54a7a052567cb7713cc4491037d0f15b9970f98b0298e56de2609ec209664b09267ceede611c05709e6d1907e7544e70a41faa536ae2762c0af0bc911387e7344e783a92960b769145c3cc1720ab753a27586d6459d22e731aaa28407405aa6e67704204e7d545bbd30047ee69a8cee46f03a134b9ee4fc56a43c63a39c4992de09ebef51107b31cd9b1b3b8bbae3454aeb7d91a255414809bd63e0edcd99cc0b56d288573e4f02a4a566d1f64d5cee104a98f48dd5d8d6e27b57d2b80b0558e41dc74e0cd7e90ee0d777a3a018ee59e2bb64887da5a49afdc9c5e805177e8243f174f0fe4653452cc4bdb2bcbf3dd78e4593ac679a431c823ba3e7949638fbc2ceb4a9eef21619ea7e98b3c4f2d465e9a7e4d7c8ed13e375800738ce7fd3f9ffe2b80e9bf5f0108702406fcb896fb7c4ecbdd5b952ab7e4d4388952efa98663570d19fa27c99078c289b6cf3669da2458f0ae9928988d1587bb7374437801279cdd249c95721970a1ac205041e73aa280e12995a562bd800dd06c208ee602b11702f1424e10c7a93259e52482f2e8da4ed7de635f17ef7bfd56c9bded4cc0f7e302fe3104fc455105be2082c03f8080bf98db0a57595b6d77f5b0d6e153a4fa3fe5a24ef672d8e0ecc905e70404e7259c70f652e5788dea15d4272dffe3ad2593c4143e305b7181790102f3d23081393582605e88c0bc2c4c604e8a2098e721302f0f1398932308e6af1098578409cc891104f31c04e695610293714cc506e6b908ccabc20426634f930dccb31098bf0e13988ce3253630cf46605e1d2630a74510cc4b1098d78409cc1d2208e6a508cc6b39c1ec29524feb25baa4335accde5c50fe1541795d534299e861cd08e5d95c50fe0b41f91b4e28fb4928816d95da3c049b2596c919d1f866a2dda41bb83b075fa3e2a2375bda0f817a3d27a8fd2de533b3dde08cd31e4f72c10a17ac68586fe09ec98f2fa4b9cb5daba51045d26ad6c8e3f78058f496435aa2b27923b7d7897d35b244b5f1b0aae42eb2456f7ab81d82f1a6c6688232eb1a4571fc331f417973d34219f58ed18108ca5b38a1ec2adcb5ceba8485ff44070370c9889e7dec8a20bc355cabef8c6d361b9cef23386f6bcaca8d37d24de09cda605b42bb1841797b638cc6331bf54ce05cf5611bf7f4417dc93bc2042663256703b31702f3ce3081c9b8eac306660f04e65d610293713d920dcc6e08ccbbc30426e3aa0f1b985d1098f784094cc6f54836303b2330ef0d13988c5d2336303b2030ef0b1398519c126e87c0fc6d98c0645c426303b31f02f37e4e30dd2d0bab91a360f4e6cd61278006eb01fec1228caee17603cfdb092330ee2e46503ec809256c69b1bbaf2e713e5b239ff4d1782bc426b139a20eac5310a00f7102da29a922bbb0950a774341d266b70854ec3e08bc871ba3495947362a2b1266821807886db8c03c1281f94898c0641c20b281598dc07c344c6032ce03b181b90d81f9bb3081c938a66103f30004e6efc30426e398860dcc7508cc3f84094cc6792036300f42603e16263019e781d8c0ac44603ede1860520b64e67a236335671bf5ac45603e112630191b203630ab10984f728299bd171ba3f564f3626b8e66849ee21e99a73b18627b70c56a8fcae9d3e171c58ae28eb38508ca3f7242d951425926e21719833770b1200e048dc0fc500f04dd339cd00dcdd85aa6ba4f8bb57d9fc105f22d08e46739411e9265939478dc0423c46c5375f722889fe33701e0425822924f348aa2eb606704ddf39cd07597d0c13e0a20616be3a36c490720185fe086d1be74917cae58f4601c8f607c911346d7177803510add0bdfa209e10e08c23f7142d82fe3e626714d9cd1f3f24b2e50ff81407d298ca032cebcb381fa1102f5cf6104957134c406ea5f10a82f871154c6053736505f41a0be12465019e794d840fd2302f52f61049571669e0dd4a711a8af861154c6496536507f87407d2d8ca0328ed9d9407d1481fa574e5007640caa3953cf3a19c23657df1dcdd5ff2dacc0329a0136607b22605f0f2bb08c8d161bb0bd11b06f8415d8282edbf545c0be1956601907046cc0f647c0bec509aceb21bfa6614e2a8a1ef2bd514bff36f7e2b1be7120dd9d0c90ae56a689de14df1c04e83b4de93192b878ccba0f986df9787704e6bb6102338ae712ef81c07c2f4c6046f15ce21508ccf7c3046614bd445622303f081398513c97b81481f9f7308119c573899723303f0c1398513c976b3704e6476102338ae7122f4360fe234c6046f15ce23d11981f8709cc289e4bbc1702f3134e30bd9d4bccd865673b7eefef08ca4f39a1eca0a004c66b857b5d934bbb92d3732e870b388180fb675396c14673af613b70a2059a4efb172794f4bd55f60373a3e90286ef4fff8cdb8bce0e677ca22d9a108e41107ede18959b6aada3bf8d752e82f20beecaeded70d228ee70fb1382f34b4e38dd333de04ad0c40351a2eca6dd1381f715b72787dd3282d09bc4eeead3f2840d2fd1b4959310a85f7382ea5e566b77dade28c9c2859e259cbd49b645b22108c46fc2333c9c12c959a0df2030bf0d1398519c05ba1e81f9eff08cb519e7cdd9c6daaf2328bfe384127675c5ad236e7e663bcfee262c36f8da71c1d71cc1f77d7846dc513cc9f50b04e50fdc43447aa3559487883b2108ffd3188d0cedd60200d635864bcb542e30e721307fe40473b0a56a7bdd24cdb8fecdd6bfbc0301fc53d80166f4d66003f87604f0cf6107987192980de0bb10c0ff0d3bc08c9e706c00df8900fe25ec00338ea4d800be19012c9a851ce0289e0372130238167680197d95d800be0d01dc2cec00338ecbd800be1501dc3cec00337a8eb0017c0f02b845d80166f4736203f86e04700e27c0de266918cb2adb244d1be416d19213caec0fb38ce2e6ad9608d6569cb00eb4c0bad2c1a3d811bb5cb8974bb8619193fc00e7b34da252ce8ad5f2f670cfe082f62954f95b3746e5cf6ce1258a3ef62508ca369c50ea5d7355729ddf8554ef91c3841bc90f856dbef67e0468dbb0011ac5bb5dff80006dc709685f4b65b7374fc5426f94652da37772417a2c82b47dd3dacfa8afb5de88a0ecc009650f4b2b9f086591f3542f98ef675f1663027220ea2e756c8c6a9ebe171af56afe392a9b9d3821f5ee12c9384e627389fc1ac1d9397ce3a442de523a99abe2374315bf0b27ac83328675befaa4d18ebfba9eabccfe1395d9aee132018c637a3613f02a82b31b776b6f77ec5de6fc5d2f9d795d3fe9687ab5cc4640766fca1e68a35571b6e9bb0d08ca1e9c507616e90fb38ede44722e82af27bf858c57ea22f9b1fb778dd057d3bad7edae75fe45b362cf4470f6e21f0f65e2a51f4d20774440f66eca058ec4313ae30c12db18fd6f08ca3ee1592b628492adb1f90c41d99713ca7eaa7a03e34da872d7a5b59bd12b9f5d10a8fd3841ed22596f7f37bab74600f6e704b09b64adb736c0ed3240caddd4bd4609031f3382d8990bc41c04e280f04d6f4ce2b5986ccbc0bf20580772c29a7a977c94ef9a198d201c149ee5de289e9cb8184199cbdf7ebbbb496c9d745c3e57c93465a2567e1c3d77844d08d4c1e1594e8b6257fd0604e59070cd57325677b68ed18708cea14d5932139d10a2e8d771118272182794232d5026ba7315cba98d6af9377497364a9273e53db1a0d672899a6ea618c1be9a0bec4311d8c339c186d3c260f0b85a7e5ee650ad8bf4c9231d1170239a6e3238aaf0f547f08de4844fdf64a09db7a0e2e28db6e5db9957dcbf11b0799cc07a3b2aa3309267c99f86c01c152630a338223a1d81393a4c6046f12cf913119863c2046614cf923f098139364c6046d1cffd7804e6b8308119c5b3e44f40608e0f1398513c45ec1804667e98c08ce22962c721300bc2046614cf923f038139214c6046f12cf933119813c3b9bcc6082bdbf25a57e43d5cd8d81baddd63b0601f658dd8454ec36d10dbdbb9cacd50b99d14ce721bc5cb48052ab7939bc6937885d824363be4d6384961de299a8bc39351f99c129ec5e1288ede7745504e6d8cbd6c7af6b332e56a51f4cae41308c8696101328ad3c60f212077080b908ccd0d1b909f2020a7f3af0b252e672c6d5825724f1065836f2a177c03117c3b72c2373ca91cba4d0d38218083a197933d182b3c9b2bcda708e89dc2e3f5ced89ab3b9d2bc8ba0dc99db29d6be14ec3ac8560abd578d0d44b6dd4183108833c2b37580b13cb26d1df80a4139b3310692f18351321d48325a4cb681e44f08d659dcae3266cb1e655f8f6e08b8d98d51b5e36d7ae176d64dff1e415914beb33b183bec6c6777fc17415a1c9e698d28cebc2f4550cee12e9df6a9365720b723b44944ffdec2b108d2b99c90bab7c34172ea323336f0667081371481378fbf6adb3ae6739cbf6a55e727cac7484c4750ce0fd77601c646876dbbc04b08ce05fcd5da7649738d4a12bd662686c02b69ca93e0a23e7bfe38027297b00019c56ef98308c85dc30224a3bf1b1b906f2220178605c8282e43bc81805c141620197d83d9807c0701b9382c4032ce4ab201f9360272092790dd053538845948383222ca1df17c04e3d2f0b80a4e8ee4fe9eab1198bb8509cc28eeefb90681b92c4c6046d143e82a04666998c08ce2fe9e5f2330978709cc28eeefb90281b9224c6046717fcf9508cc956102338afb7b2e4360ee1e2630a3b8bfe77204e61e6102338afb7bae4560ee192630a3b8ca781d0273aff078ae31363f6c9e6b6f2128f70e8fd31523946c4e575f2228f7e1f6fb4db5cd249ad31a4508be7db9efa6b0c3679ef7bf9b13ef9eda0abbcea23c675488c0dd2f9c3bcb18273cd81c02dbc7e2b0ae0a8fe750147b9b0b5009dd3f7c7e6d8c90b2f9b5fd8c202de39e6fcfd4f9850d4636bff4c108c6d5e1b39d85bca593ed2eaa1c643bd734e6f96f95a20e1d2c9edab788711284cdb3e865545ecbc3e5a8c53875cc06e76b08ce8aa67121d4a76646dd95756704e55aee13b1ed5dfc25ce676be4935e048e3aa85311a8ebb837a5d8418d267013117007f0b7eb65927119aad6dbe7ad54b310ac954d338e07a1e1221bb82804cedb98eb88b7ce892f15d5b249aa77be8826b8a310b80736465f140f38b7df8d7de723580fe284b5bd8475b56a72ca9dc4a5429f0913bd91d148045b15276c0345a62323bc5d6592fccf5a22c7728d8efe83a0ad0edfa033aa15fd47046b4d7826eca2e839b70841b99e13ca215996d0d9ce6fb8e666ab1c7a324e91b0d9d74e688a6403ff5d6b89fb26c1926e71c64bf077ad14aa4c6c8e6097a90d2aa70773dff8e76eb3aa526b48009db9a614bd52381c0158db34d7cc9a879b44b3f33e0d0159c73d1f1f072f7173b49ef72c92bf197b9d1db8606c8160ac6f8c5e270c1761d2986a76e6ab0f1aed7ef3ebb9a03d1c41bb313c5e4a1323d941aa45606e0a139851dc5a5087c0dc1c2630a3b8b5601502734b98c08ce2d682fd11985bc3046614b716ec8bc03c244c6046716bc17e08cc43c3046614b716ec8dc03c2c4c6046d1d96b1f04e6e16102338a5b0b0e41601e112630a3b8b5e06804e691e1d95ac038fe61db5af00182725b78b6163042c9b6b5208626828fe25e9f2c71922c932e5bb066ee7a700287e8b96e754225f0684ed8e02ae062e953048b0fd58e6615628b70afab0151d8a06bc7055d0704dd31e15c7f646cabd9d61f3ba28a7c2c27aced44f209c251bd1160042a8bc77182962b323d54d4be3816cd65897108dee3c3e52f1c45f7eb17119c2784094ed671371b9cdf22384fe4bf5a01bb6625fb0abbfb2ba3b784db17817812ff1ab8bbc2582f5befede300fbee08c0931bf700fb29823e052e8a2765fe80a03ca5318ed3a3a62b30908c53156c409e8a803c352c403276cad9803c0501795a58808ce269c2ab1190a78705c828dac83204e4196101328aa709972320cf0c0b90513c4d780d02f2acb00019c5d384d72320cf0e0b90513c4db80201794e58806474ad6203f26404e4b96101927195860dc87a04e4798db1109be9cc0f63a79c6ddee77904e6afc20426e350910dcc171098e78709cc28ce48de87c0bc204c60320e19d9c0fc2d02f3c2308119c53ba51e46605e14263019878e6c60fe1e81797198c064ecacb381f92402f392308119c513899e41605e1a2630193bed6c603e8bc0bc2c4c60320e25d9c07c0e81793927986d85b9581bd5a5d96108b22bb85716170aeddc5297f6f4213628d91c4edb2228af0c8fef2e6313c306e57b08caab1a638fad5eef86dddff44edbede1089201c805f0d78deb4a30713b5b26fb0e95d2abc3e361ce58e1d93cccbf41505e131e2819672ed9a06c852af8b5e1749d662ca16c76b33582f5bac63e6c6ca58347b12376b970dd00ddb0c8497e80f3d92651297ba2b5bc76f40c2e681f4195ff37e139152b8a7b6e7741505edf18a75ac70f27c9bc8c3202cb5646b720606f082bb08c93c66cc06e46c0de185660199736d880dd8880bd29acc046b1b93a18017b735881659cbe6303f62804ec2d6105967192990dd82310b0b7861558c641011bb08721606f0b2bb08c0b766cc06e45c0dede18438202395365db7bb94a4e0bc2f1f9f049f4a0ac4150dec1bde7b75496be5a8762115a1c89de4a522b04da9de1199246f17c982508cabbc2b4217542241d133f4670dedd34b7aa2d17f8788968ee3a9f21616c9563109f9744bc5896192835f14be4ea9cf8f9a242ce6d02a26b9ce785b25dae17fb3be56a6fe79f37ecf775fed9e26331384464ae03f706190bf4ca25ed6ab9fc5ce5a42f18e324b9078a42075514f2e41dadf10cb31fc19be7e9a0de3c754ab78e77cf4486b3916b055c74a2b717d44acadd1228bb6956cb344512cb1a799c01a09197a2ddc8931b7a67ab55e115cedb72e15e888a65ad6b902d934312f23caf44a7c2a944196db0286b942c7d9cd44b2dd526dd77e94e71c9935720e9cbb8aa9d6f374849f5b6e6bc58aae373a0b0c7249e507a80eb22e73d48e0625ae6f0d39ba5f3c73ac962539c5f6e2f737c43ffd2ad0fd5a25a3de9f8f434a174a7a6762f14e198dd9a5505562fd369e49a12f87ead23bb9b37109b4ed3f4fad175bc7d8a5cc987f331b66bfdef837c57d92e8b692f691270755f222b3008053f39ff0720f1e9bfbf8b0200 + serializedProgramCompressedBytes: 1f8b080000000000000aed5d077c1cc5d59fb32df7debbe586e52ad972c5c64572416063e346c7c8966c04926c24b9514def35845e4309bd27a12440e83df410ba13134c422f0142fbf6cdcee8decdcdbbbbbddd27edfa8bfcb3463b3bfbca7f66deb437334df285f3131be5fc5a2e168b6231462c136562ada876fe2a76c22ae79ffba4e317891a275ce3fc2e75de8d12b969be849f61b19eceef12e7a956d4395fae17ab9cb042be5f22ca9dbf4b9c6fcb9d27885dedfc2f7752c59a391f2d13b3c542b187e811eb9686c472f951ad8a8b815eb196ceef22b1d9795b2e850226f9f2550fe7d712e74dad7c57e508add3ed270e906a5539ef5639dfd4884a87e64a49b165ee1821ff106e3047855d5438dbf9df4afddd44fddd52fd8dd3efa4c2b919a6efe8fc0734ce4891769e0a873bff9b3b7ff653cfbbaa70bc115fa2c21146fc6e2a1c69c4efaec25146fc7c158e36e217a8708c11bf870af38df8852a2c30e217a970ac11bfa70ac719f18b555868c42f51e104237ea90a271af1cb5438c9885faec2c946fc5e2a9c62c4efadc29d8df87d5438cd88df5785538df8fd54b88b11bfbf0aa71bf107a87086117fa00a671af12b5438cb883f488545467ca90a6f56f1fd45bcfce1f80146fa5b8cf4238c7833fdad2a3e57c4cb318e1f68a4bfcda05f68c46bfa2b5578bb917e82116fca7387917ea211afd3af52e19d46fac946bc99fe2e23fd1423de4c7fb7917e6723de4c7f8f917eaa11afd397a9f07746fa5946bc4e5faec2df1be98b8c789d7eb50ac1b66562038b55f8074567107a766c63ce0deab9258a6f65a4794a3daf71fee708d16676067c0f76d3ca50db33082b941c8333a07188077e875a70a974bf6f7b6f06dfb751e1bd4abe21eab95a850f20ba0fa0b410fe517d33143d3bb8b56c66d0d6dffd49a5df093d43f820e2b156850fa1b807511c840f2b3ac3d0b3c3b3c5db04df2a953e0f3d4378980ad7a9f7c38df735225ef6f07b1b9e9a572d7a866f46b879d1fc61033b9dee7e944e3f43789f8a1f69e8749f915fa32cf1a974a6743231a933dedf87e4c8a4feb555e19f85bd5c3d86e83c86d242f8b8482c578fbbf9db7a7f83b6feee099158ae9e50e19322b95c3d85e29e4471103e2d12cbd5d38aef7882ef7a03e3f506861b0c0cf57b2fe54af3aa45cfa85cb5ea6960a7d33d2a12cbd5a32a7c442496abb6281ee7d7284b7c2a9d299d4c4c361aef1f41726452ae3abb79d2e6e0146957a3b49ae626156e36703a5cc9333a03debaad7816d17d56c9f3a37a3e02c503dd31e819c267d0b7cfb8dfb6d56dfc91281ebecd37d2691d8eca4017b0ffbaffafdb088cc7d122f336e21891d8a66d51e1f3868ecfabf03991d8e63ee7cadfaea34ba7dd4c43df170c7d5f4843477fe7a56deda4c2d62afc8bfaa6003d03ed578d749d1066ba5c754071da9e75b1c475b3c475b7c46d4771dacebf2912ede676140fe18b22d146bee8cadf5ee7b91e6396a64edf798bc157f3f94824dad48f54f88a48b6a9afa2b857501c842f89449bfa92cbb7435fb72c74dedba0ff2f957e2c7a8670ab5146b62a3af718df1fabc27fabf4e3d033847f55f185e8599721cca7003d43f83ad2f1759777c75106efe354f8b1c1fb63157e82687ca2c2e3114df8663c7a86f035f4cd6b8aef6506df1354f8a9c1f753156e4334b6215ab86e29da9d271bb44f54e16706edcf54f821a2fda14ba3534b83c649eadb0946fcc92afcdca0fdb90abf40b4bf50b42b45bc6e61dbd74d24b6779ac7292afcd2e0f1a50abf423cbe523c5e14f1ba8a79743778e8baa1ebda76f57ea2115f8b9e6d32eafcc36da7ad6ee87487a274b8ced61a72a83e42fb21863c5d45a24d98849e1dfdbb6c33d2f7108963341ddf87883f5585da864d46cf10f622beeb4dc4f724e2078bc4b1be8e3f4d856f19fcdf52e15082dee92a7cc7f8ee1d150e21beeb2a52dbf4ed467a6d1387a26707f7beda96ed647cf7b54a3fc588d77a7e63c8abdfeb7cf80ff15eebfbadf1be0de2abcb9fad2da0caa37eafdb22ca167f8730d26df776f40ebed9d9a079a60a291bfb3da2d9c3a0f9bdfa66aa4153db6dca7edaecf60f2aed3483d6b12aa4eca5d9fefc80e221fc51bddf053d43f85f153fdde077960a291b6a693fbadf2212edc59b2a8d632bba3f2c12cbf19be87b5d7fdf50bc6620d970fc4c23fe2744438f57b68b44bdcc3c395b8594ddfe19d1ec63d0fc99a0798e0a7f3168fee286f0a7a629ff8630a6d2ce5269759dfdc6783f3531be1e5b6d834c9b7faefabe49a22c31d55f8d3545b2345561334296b78cf7a6dee7a9f73906af1c15364758ea7e5a357a67a3f92bf5be8541b3850a5b5a68d6a277369ae7abf7ad0c9a1a87d6169aa7a177369aaafd8fb531686a1b87fb75bdd5bb7622a9afd75b18747fadd2b637e8b657a11ecf3a18f7d6eded05c63bcd0b955df92e551e7630f87550219effd363f36af4ce46f342f5be9341538d95629d2d346bd1bb54e5a28b4153b57db1ae169aa7a177369a17a9f7dd0c9aaa0f18eb6ea1792a7a97aaacf53068aa36432e419a342f46ef6c342f55ef7b19347ba9b0b785e625e81da669d443a168c8b65ceb07e98b0c7a3abdeef37dabc2d38df469fa8c5dbe33e8f515a9fb387a1e29ddb895e8fbf49b8df840b82a75fadc8b0cbe418f5bf5f868187a06395f75f1c95da7e23ba8f81f0d7e9709fb98871adf6e1389e3db6d2eddfee71bdf1fabc26cc7b79a4f017a86702bc262abcb7b405b83b79ff1ed569138beddaa42cbb87ac09106df74e35b730caa69e1f1ada29dbbc8a09d6e7c6b19830ed86ed030c7b77a7ca0cbb2392ed4f1b5e8d9c3b8b0beecf91c17f67d1b7da7cb722b9128a35ebfd5f570127a76b018b8c8483f40248e91747c2e113f90881f44c4f713a9edd07623bdaec743d1b323779e5ec7ef6f7ca7ed971e6b61bb66b32faafdb595635001701e341e7d0be1e522751db6d1dadfa041d9977463b22b44ca3a1ceb8378eb6fae24785d2552d74b8b4d19dcd5c564c81d06adab091ebf11a9eba739b7e5f018d215e9826d62b141fb1a155263273d9e316de91b2afc9b7a3fdbe0a7e3671af17a6c8af4af7ff7761a19a971d07b868c6fa37808df57efe718fc74bc29231eabe9b5f7ed284daaf1339547d98c9fa93c097afc7c6d1a7ccd32906eac8be71f7213f123c7bad7a990189726e4c94083e64f06cd41c67b3d169e6bf0bc5ee52931feac2fc385880e8e9f97861f214ffd78d994e7b7ea3d3546d56de4aee819d79b12441fc7ef96460e4ace66849cca6f841af79af531d6cc88df3d0dbfa989f154db3d50fbdba8b901cffddb97153ded8fa7fb9d37aaf8c1281d84447f2a6f9b2bcf70ada79ee3ac36be5b809e21b4cc4b0dd7be877d0d1aaf1934747addd67959077c597dabe7c0745d6baabed5fe865a0f6d6ff45cd748235ef3d2eb11e6dcd828235ea7d76b0b7f33d24f32e2757add5f7f0be1d6dcd56584ee2f5be6f346e839af54f3796f1b32bc65c46b19f498e55d44a3852b03c09220c33b71194676356478077dafe7d6df336478d788d732e8efde37d28f36e2757ab33c6e1589fdd8adaefca3747dd2fd253d2fa0db40dd2fe965c4eb3e7d6f235ef7f9f41ac540f5aced691f23bdeefbf734e2f5787d88113f4b85438d785d77fe6ee033cd88d7f8a8f92af10f23fd2e46fc6083bec6538f2727a16707cfd1ba6eea7e74ae21a75e6b1860c4ebf9fe81463cb6d3385ecbabe7ffb49c3389783ddff68148b697ff44711fa038083f1489f652ad758ed66b24d3117d6c47b46dbac99023c136e5c4a4fddf55948b52b14ee44b6305253153377bfd657a077bd9dec32ff81926d9d689cdcea7e5362ff765d287bece29b5e3ac5eeebde47ca5e65e2c7f973a292a24d185b12416f725b100e12a9d7fe5c845bfd6899f273dfcc149bfc2793346cc7742f8ea20c70cede7fc4ba4b2dc615b29d63b4f4b9ddfeb24bd831cb19353a65309dcf9cd6f163b34dddd06554e8c06749df35c29255c227f6f9092964be94b9cb83ab9f7a15aac712af15ab149724bd6bdc6f9dbc673a982cc2ea37dd30115ef6e6dd0d934dbd106a4cf977d87ffe54863e488ec6e40fd809f66f9b2f7745a524efc0f43d7c8c020a044d1182b218b25c48d13f9729cb0380941ef3a266b682fdf2ede139d863e952e766420bbfb480de2397cffe84b9f7870f4293d7312552b14f9d0cd93e39d54aaa50216e8e5c995102f2ae4e4342b00414df86336f8e5f0674903c2efa6ab90e9bc674073d9f82566801cdab88d2758b635e260b94d6cad7c5da5c4b3bf59e010a976feaf91ea24e56001b06b213321b9894da708950d4d6cd9d0b2a1b321bddd49950d2debf58a6703fcd8116c4520984e060ac1a6360465ff6f0d2b82cb9c38b7833447bead90ad2ad8c67227559dc3a94655642aa5c66f81dca4b85eca901a69e8068f3690b6a3dc46a20ce3391e39a9dc6866cb0de9855b1182dc28747a4dc1e648db8c73a49dcc91d119e74836b252b99263cb15e93bb1be5172a5d8e1011c81f262d91f2d93541311d09b7283cbadf6f538c4732b5fae0d4d49912f7cd22a3710f7a7458ebde0749405a77104a40a54735b819283f2a50dd86cc1bbb5920a34dcde1b2ef0901969f61fec99d0596642cf24e5d28b4041d8c202610140d8c52a552b432a1088a0dc92a2dcd5425978a1dcca96eded1ba7cf9e5d5f0526787b18103423fb2add5376b9bdf6545adbd0ebd0f05d6eb7975a29528fdfecf841bf6d80815f61e1ddd3edf8f5247bcba965a0106c634310ec63ecd0466ac75c9a6be533700bbecdea656bb3a46f5f7eca262108c97a67d23ef59199cc2f0c5528dadacc1d148abe16e40a00b97e865aa605ec435bc07636666016fbdb3a8226e13634e1f636c21039c062b1e0278978779a7807aa45c8f5db2274a4280ff44bb9938d32283288324126f19e34f1ce94d883fd8add85cac72101e463578af8500bf15f9c1f2fc4bb51c4770a40f2ee14f1610110ef61219e2fb3b871069d702ad12ad91faf11e3199a843c8b61cb97052fd5f0d2bf54c34506cd012c81a61ee7fa17846a0a7ada4a1914849116c40a00b15122755330822e75bd2866a3296663b267d69b62964f312bc89e591f8ad9588ad9b8ec99f5b53103cb50188065e847111f6f21eed560f6b7991d69a21b72101c1f8b508798a53626136cc644b605c9a3ddf4bcc091a2e516e19e5cf6bf9fffdf3f440b014e26b6b994f4a58bb2fbd28dc466b0c03f256daf3c8571caa5084ff14978204578679f84075184a7fa243cd842385f76eb1a67ec0dab75ee9adb26c79a6f62e9684d1316db287b9ba986bbc148a68efc737fa8ced674916eec1d8c3054c51b4295b61916e4644f61a6c8baa7309462368b6256943db39d6ccca0712fb63183f612f60fb404831186a62f5957b0ba84ae72779c0dd839820016fca99b3755bc9ae5cb7e77aac5c6c42ebfd7d2970b5c8c5f8e2a3d9363d3bef25608e2032d0398791430e0fcdc5c17b9ec446cc857dee0186e83a3bd708f95f5db551f4111df2d00e22329e2bb07407c14457c7e00c44753c41704407c0c457c8f0088e753c4170640bc8022be2800e26329e27b06407c1c457c7100c40b29e24b02203e9e22be3400e21328e2cb02203e9122be3c00e29328e27b05407c32457cef00884fa188ef1300f19d29e2fb06407c2a457cbf00884fa388ef1f00f15d28e20704407c3a45fcc00088cfa088af0880f84c8af84101109f45112f0d807811457c6500c48b6dc4619d0a0ed6f0b54e359b12bb2c00b1e7d888835b4a797de234d3aead68e2736dc46164b65a6430c391621834cf4618dc74c091d4ea67bca27e7b8edda31866b43638efd63af9051fce71528377f1125125fd86ea9c2f92246c414bb82b25e1c13609fb672ce15e6a8ead2c61bac08b642594641536c9ba652099bb7f05e4f222c76e941c87f891c39dcdf222c7ee941c87dae4e897811cb39cb76572c85ce1e458b672cda7e4aab4c935380bb9a0046d72faf8f0778df306ee8cd9e849c605948c5536197b6420234c31943a06192613ca3cc9b207254b75b6b2245e59e3459685942c6b6db2f4c94016f75e9f9502e6608b243ad51ef15944c9b42e5b99963831a58e5cebe43cf07a2951ad2799f6a4643acc2653c70c64f2c27d31c5bd26db5664b16c294a85dec5b7a7135f2a69d7c84934afe568092561ad4dc29e1948b8cca9ed1b1dba6e2be70dafa59434753669fa6620cd42478e55f249d732573e2f522da3a45a6f932a93963659aaec2cf8724ab20de95b9645ceef0ac991b2076ba574755994aabd28b936dae4eaed49aeecfa027b53126d4a9f87e9249aedc4c234f5aaacb0da87926c733058792f55fb52121deebf54e1ed09250e725ee4da8f92eb08ff790872adcc1ab1fd29c98e4c6fb7d249b654e08d1b5ea43a8092eaa8f4252b2e4b911c01b87f57cbde41ad440bf270b5f3cf8b440752121d9d3e076749fd4b99245b4149764cb6eda0d9527b91e6204a9a2d3669ba64208df756afd426034c0a1c2b9227057285b749819514f1e32cc40ff2487c1545fc780bf12d1e899751c44fb0109fe991783945fc440bf1873d125f6d230ef34727099f9b8cd6d828c314cfc9f589e3949fcab1889d628ae7608af82916e25f7b245e61230e8ee57018afe9582e6c80a7702c3f8492fc348be4939b7b93fc502a374fb7e4a6a7d9c04a4aec332c626ff22876958578bef49e853694cf7328f9081dfd5791f32d8c3237483b0dadacedc89dd4be41708541663b7fe170ffbc58aeb01d04e44d22ca0da79ab221675b6c88b548a7b0216b6dd927fd911b72dbda42a7fd384475b8bd3bb99e9371669d2bec5bd6d2f1a7b2669d0d3de9607d6c03177efb9953f344a91a9ec6f54bdeafa50f1d82ddc5aba514100f52a43fab2a75ce9c578f0f72b1933ee173ac15a6b1b48013f15b434d263cf1ce97e5265c325365f2309bb9806e215c8790d4d5846623a303533c74346b28092eb049d04ea6ab1525ca67ac42beaa70c6a65ea7736b294379a1c550c63c1aca3a1b71a8ea1759ca780194f18be385cae4733ecd67bd8d0fb4a797d8ac9c49f82c9af0064a814b29052ecb4a818d149fcb293e5764c56713c5e74a8acf5559f1d94c95e6ab6da519962a973935ba4c4de2261e4ee44ec9bbf6dddbb4f7e1b696466e80a96ed49606165fd6cbf612fedea0ecda52c93b7e60929f36044e17ef67e9e5c08fdd5a5f23adf5b80cac7510d25376f808aa7c5e4b95cfebb22a9f47527caea7f8c039ce4d24523748a4c608dab7d7d68e79f72ff7a2cf51943e3752fadc94156e47dbf8c0a8e866913c2abaacadb751d13114f15b2cc49ff2487c0b85d0ad1442b76585d0b194e5bbdd66f95ac974d53265b55a68d8ecc9c61d47f1bbc3c60f1eb35b3a38de664be57ebf72565b9aaaceb85a04bbc1e54e479ba666ef5beea61a9ea2c6672f4d2e98e4845f5b66101deabba4e1e1118332c82750c5eb6e5bf1ea2c74b7b44e6631ac5ad7c92ee952a7ab5c23c7f16b3c7af89c4849700f5da16ac56c47eb6a6986a19079e17712c5ef77367e1d4462d765a9d41aaaf26a89729527de2753bc7f6fe3dd5ae96afa9b78e1780ac5f10f368e30ec28721e0f15b6d55b2f7c4fb5f1856107dcdb6d0e3b605b8d9761c76914f1fb2cc49b78247e3a45fc7e0bf1e61e899f4165c703b6ec68af5a8f20dcd5cea438ffd1c6b95b3de7d4ae7c6e7fd08b1c675172fc2955758f2f33791dff9e4df17bd0c60f5c6360dea1522d694175f3b3c4750ec5fd211bf7ae197087e78da2c09314e752523cec4f8ab19ea4388f92e2cfb4298abb43b94b7b0b6489f3a6fdaf28be8f78e5eb4ddff329be8f7ae53bce13df5f537c1fa36a3ac5d75f137081458efc5c886c9c636afdedc84cddab7c5c24f72af51ec42d0f19bf88eedf1322dd01b6fe34a0ba801752e5e5492fe5145c60bdd5cb8b28be4f79e5ebad5e5e6ce30b4dedd3823829d143037f0945fc190bf11c8fc42fa5107bd62b62de2cca6514dfe76c7cdb88c42ef362d9615ee3b1e37a39c5f3791bcfb642f713342fd75dcdeb68fb0a8aeb0b1457d38170b6d4bad413d72b29ae7fa1f0758705a6ab90179e57513c5fb4f1843ec10ae75f81f3dfce1bde429c3729aea6a478c926458ed27cbe747ff2c2e737149f976d7cda1bdabafcb2d3f01a8af32b54895a220e13ebe5d01afabad9b9185f4b717dd5c6157ad9b3843e9e349b127c1dc5ef35ca3225bb9366c3f77a8aefeb36be30d7e8c735f3b714b7bfdab8759079092e0e65b2b75ce5fc55eb0cad4b847b5ab5b7f1db0d14ef37322b47d959e11b6d5c4131b8e6cde23934d38be7d04d14f137adc4b7ccf042fc661b7198bf824be2fc9c0a740b45f86d9f846fb51186dec03b99109e4e13be8d92f85d9f12df4e117ecf27e13b28c2effb247c274578ab4fc2775184ffee93f0dd14e17ff8247c0f45789b4fc2bfa3087fe093f0ef29c2fff449f80f36c2d0487d287c7a19de6ba30cdd0bb816d5af9bda7d36e23083f5512678a438f2f97e4aea7f0520f50314f17f0740fc8f544e7eec3727ff64a30c2e289f6402760a1794072d84f3e56179e0cadcf0d3247e16b5534f927c6a43ca3a15021770e7c92b8339a4a426421eb26531e4c4e79964f16774163f4c95ca2ffc96ca3f5395e9cb002ad323947df9caa77d799492faeb00a47e8c22fe4d00c41fa772f23f7e73f209cabe7cebd3be3c4995eaef7c96eaa728c2dffb24fc3405f27ffd82fc0c45f907bf949fa528ffe897f27314e59ffc527e9ea2fcb35fca2f50947ff14bf92f1465f05df545f9458a72cc2fe59728ca4dfc527e99a2dcd42fe557a8cadd2ce6af72bf4a11cef149f8350a8be67eb1789da2dcc22fe5bfda28c30c48cb98ff8d596f50c45b0540fc6f14f1d601107fd3461c9af03631ff4df85b14f1b601107f9b82a55d00b0bc4349de3e00c9dfa588770880f87b142c1d0380e57d8a78a700886fa5ea7e67bf75ffef94d85d0210fb1f14f1ae0110df4661d2cd2f261fd82843e3d0dd67e3f04f8a700f9f843fa4b0e8e9178bed5485ec154085fcc8461c461bbd33c123c568e35f16c2f9f2847ed827dcf0b31941b8eaa79ed5e893096237d088fddb9615b0d9b46f2684cfa5097f4c11eee793f02736c2e02ade3f66f18201dfea5c91fc2bd9ebfe2e9ae5a7942e037ceaf2194538d727e1cf29c2037d12fe82b23883fc5a9c2f299107fb14f92b4ae4217e45fe9a329243033092df50c4770a80f87f28e2c30220fe2d453c2f00e2df5988e7cbbb521ae7eeb9e4fb3e8235f0c32d562d7f08e89beaca37ff520d88815f7c95289047bf8bfae7b1c6f338e3b9d0782e10638defc71adf8f35be1f6b7c3fcef87e9cf1fd38e3fb71c6f785c6f785c6f785c6f7ee3375db5e2cdd6d7bfea1a75608beb7d5ab5c01468cf6ffcca0e57b82ae6dffa5588e6263f9838da57bdb2b57fbfe23c5720c1bcb9f2860f3d980fd996259c0c6f2171b4b68d3c7fa6cd361be35a915182a42e1dd5d18700b30ced602c8eb9232f5d6f62e5152a65b8d6161cc8bcfb87729284318b3e4be2cc9e3d94a72131b4b28c9137c96e4a636c2509227da74d9291335205b086ecd28e426b12197432137d92772cd295da6b0e9d282d265679fbab4a47499caa64b2b4a97693e75694de9b20b9b2e6d285da6fbd4a52da5cb0c365ddad958c220746626baa4f0336b4f8134cb27481d28c2453e0977a4d02f6643bf13a5cb6c9fba74a67499c3a64b174a97b93e75e94ae9328f4d976e942ebbfad4a53ba54b099b2e3d285d76f3a94b4f4a97ddd974e945e932dfa72ebd295d16b0e9d28762b9071bcbbeb671cc30e73106d71a34d4598f4b9cb79be593f7931e17c6609136111bc2af72911c2e744f522c357b6a10d0cf965bb09964cf98654bca2ef2110e8d5a22668bdde53913b5a2bc3ecedd2803008e915baddc63c1d6c91818ac2c759e60c30ebcc3d2bb10bb071198efe2f76b7bd9f4d29fd26bb14dafd9821a7c256ed7852d737076c866a59f7e43cbbc429e77ed85b2172d07505a2eb169b99fc7dc83aa5027e60938ad66a52483658e4b9c4a7b6fba9b94e090b90a8f8745e452982cb561b22b99f3c9339041e67e2aea5eb41d4869bbcca6ed01be4b0096db4f0948a57f10a5601085cb721b2ed30d6b5a240f4781060136dcb958801d73b581ed789bc51ecedb35227e9c862975228dd46fbd683698d26c2f9b66bbf9cef1b9f26fd033552e275af38afa8da841e4e5104ae3bd6d1a0f35f2d2acb56ba4862bc47c512ea5842370826973865272ee6393739621679c272e6ff3857ba4e6529953c9e588ca83441b144cc9db89d26f5f9b7ee30cfdb0f7869927f3549e64aa03a6e54583619406fbd9345842b60d983fcead396abb6ea5fa86b6ff9842666982cac53c0a83fda91e5fa6b9b8246d2e529482b012c329bd0eb0e9555e6f17f5e1a7f8e8537ddc638d58ed7ce20e044aea53c60f545d2ce52f57072c25da50b7efbb4622542559436ba7eff34bdd03e6c4690485d381369c666464a5f0e976b6b6d0bb95cace028fa4745be1adef977ca079907dbf54d4bd683b8ad2f6209bb6c569dac5629997c9bd2fdc2fcb249eced36c4aeb684ac7529b8e6730d76a38f4011f3e11ff66b6700f5bdb2ce0a086b9aad60387cc6b3a468ed6227eb4b3fd60e720501f43a1bed286fa5c46d4756fad5ce0bb50836b0df3294d57d9349d465a0c9b8f6aa206a5ea9814d00e30d9d5f95b9fbfbacae9dd25d7bcecb52aa0b42aa3f28feabf632b5f22354deee1d07dff4c4705d96b3a96d2b4dc5bfe25dbe4c4dc5b63c95fdac2db4a8317adc6515aadb669b52f63fd9be7bb2f134ccfbd9042648d0d91f146892e96baba7ae99c85b9c854653255bf0b7fe7458bf1941607dbb4589cb2b4ba674867523fd3d1c8244550f575028540850d81658dd69e7b29d3d9b4b013291c0eb1e13095ec85fb1b8305db579b44e9746826fd51fbc8229336a721e74026533a56da749c93918e0ba4a316f40dd6491d57a598556ca891d4144acf2a9b9e0519974faf333dd949bf33257db54dfa05a49d4dbf0690bebe654a39881a3895d27bad4def1252efd4ab5ed9ea9c4835087da751faaeb3e99b9f717baa7b7d95ea7da96a03d37ded45f65d28d90fb3c9bed0635f20d1a664da0f48d55f0f52f7e994ee35de5667a97e5055bd25ad48d94f4fece164526abd683983d2b2d6a66561007d56da8e66db639d49e95067d3212f438be26a53ab6ad9c6c0a49d4549bbdedbfc9f4d5aaf652bd1699ba37c1551da6ea056ff839cffa37a225ed307db072da630d9e8bfbcae09bcbccea6a4dd94498f999aa7992d473a15421ff81fcc1c4db63acea174dc4cf54932d1d14b9fb961f59d4be97b38e579904d1f2c937e74d0f6661ea5d911c1b5059b02cb875d29698fcc64b59a6e7db5979db7f922fd95170d4a280d8ee2ea3fd0da659b0bbb513a1c1d5c99493d0bed45dadd29698f094edac30393763e25ed166a2ecd9b3783b7f9c4c6f3685840e1706cf67e37364f8ec69a73da83d2ef386ad6d89fc7d7520107dbd739e46a2c9620fd383ff5f7a97b752d9c7f31793dc61cc9073ced16c92fe0a956e443a593f34d995e580ebcab1ccdd64acdf49a45faeb6f8f77c06d0e17cfc1cfb018640c280acecc96537ddd9164a5c09721d4cab36bca252635b28f32465eb6015f657a0db16d8e7b0c9ae5c6da657e21b1e91d1e8bb5501a695a0ed27089e50ea7e90990ab6d54ae36c9878d5e72eb6d36a529bd142702b7a6f632d4230959bcc66093dd25b0875a5bacbfe3ed3059ef810c7d3f775adee6d94a26efd192c05245202db965c84cd8c8f59205ce751baa11ae8be334275b5ae43429803c3989133838fe588fe5c0cac4fd0a20efdced2151000c7e346027730206873880192f509d820a59f1ddc6f1702741dc40c7ef12c2e52f0a606e6b1907f3144e309b4b30e173f7e6dd288033bf791c9c5339c1694f564dd836140d3b5680aae5699c60b5922549fb8469a8a200512e2a4fa7734204079445bb55bca36d1caa33f88d3c9426d7bfa758ed385823fbf0b3c47a399e8d369865397130cfe4ee9bd150b9ee54ab94505100ee5ed4373b8b13b8d6f5a570b61c3f44c9aabd8d4ad7d99c20f512a9fb63d1ed859d211b8616390671d34335fb51a837dce9f1329cc33c476c921ea335925e99397e866165e8243f078f7ff3321a0ae5a5ed95e5f96e3cf2c88a9f477473f2923ad27959d68b3cdfe39b3c4f63f13c4fad435e9a3e4c7cc2cc3ed155001366e7fe3f9fcb2a80b9acf3000438ef007e5c2bfd2b4e2bdd53952ab7e4543b89526f108633350d19fa26c990787c85b6c536695a2558ebce9928988dc5862b3b74a3773e279c5d249c15724d6bbeac205041e738a2809159224bc55a01bb79d9401cc105620f04e2af39411cadca64a59308caa36b3b5ddb8e1d37bc6f5c5b21b7d73201df870bf84710f0174415f88208027f1f02fe426e2b5c696db5dda5b01a874f91eaeb94895ad9a36183b33b179c63119c1771c2d94395e355aa575097b4968df7498c1713f9c06cc105e68508cc8bc304e6a40882791102f3923081393e82609e8fc0bc344c604e882098bf46605e162630c74510ccf310989787094cc631151b98bf42605e112630197b9a6c609e83c0bc324c60328e97d8c03c1781795598c09c1c41302f45605e1d2630a74410cccb1098bfe104b3bb483dad97e85fcd68317b7241f95704e5358d0965a2bb302394e77241f96f04e5b59c50f6915002db4ab513063cff17cb19d1f8ce983da54fb33b075fade2a2375bda07817a1d27a87d2de533b3adcd8cd31e4f70c10ab7676858afe79ec98f2fa4b9cb5d2ba51045d26a56cbb3e48058f496439aa3b2f95b6e0f13fb6a64896ae36155c95d648bdef4701b04e30d0dd10465d6358ae2f8671e82f2c6c68532ea1da30a04e54d9c507616ee5a676dc2c27fa28301b85f44cf3e764610de1caed577c6369b0dce6d08ce5b1ab372e35d616339a736d896d02e4150deda10a3f1cc463d6339577dd8c63d3d505ff2b63081c958c9d9c0ec86c0bc3d4c6032aefab081d90581794798c0645c8f6403b31302f3ce3081c9b8eac306660704e65d610293713d920dccf608ccbbc3042663d7880dcc3608cc7bc2046614a7845b21307f1726301997d0d8c0ec85c0fc3d27982d24982b91a360f4e6cd61278006eb0ffc8345185dc351fd9eb70e4660dc5d8ca0bc97134ad8d262775f5de87cb64a3ee973de96890d6263441d58272240efe304b443524576615b22dc0d05491bdb2250b17b21f0ee6f8826650dd9a82c4b9809621c20b6e202f31804e6036102937180c806e6d108cc3f86094cc66e381b98072330ff14263019bbe16c60ae41603e18263019a72ed8c0ac44603e14263019a72ed8c03c0481f970438049ade9984b648cd59cada3be1a81f9e73081c9d800b181792802f391703a5e315a4f36c7ab189ac478947b3099ee2c831dc17ba82d2aa78f85c77b288a9ba4e623281fe784b2bd84b254c42f920507d662411cc81881298d6e08ba2738a11b9cb1b54c759f116bfb3e9d0be45b11c84f72823c28cb2629f184044688d966977e8f207e8adf0480d75b89483e84278ade6e1d11744f7342d7554257298ffaaeb3b6f151b6a4fd108ccf70c3689f6d4f3ef62a7a308e41303ecb09a3ebbeba8e2885ee855bd184700a82f0394e08fb64dcdc242ee3323a0b7ec605ea3f11a8cf87115446a74136503f40a0be1046501947436ca0be8a40fd4b1841655c236203f51504ea8b610495714e890dd4a710a82f851154c6997936509f44a0be1c4650192795d9407d0881fa4a1841651cb3b381fa2002f5554e50fb650caa3953cf3a19c23657df19cdd5bf16566019cd001bb05d11b0af871558c6468b0dd8ee08d8bf8615d8282edbf544c0be1156601907046cc0f646c0fe8d1358d7a97b55fd9c54149dba7ba296fe4deec5637d487eba2b03205d8d4c13bd29bed908d0b71ad3632471f19875eb2adbf2f15e08ccb7c30466148fd2dd1b81f94e98c08ce251bacb1098ef8609cc287a892c4760be172630a37894ee1204e6fb6102338a47e92e45606e0d1398513c4a6a4f04e6dfc30466148fd25d8cc0fc4798c08ce251bafb2030b78509cc281ea5bb2f02f3034e30bd1da5cbd865673b31ee1f08ca7f7242d94e41098c570bf78621977605a7e75c0e17700201f7616396c10673af613b23a1099a4edbce09257dd592fd8cd768ba80e1ebbd3fe2f6a2b3c3199f688b2684231184ff6a88ca4db5d6d1dfc63a0741f96feecaeded3ccd28ee707b11c1f931279cee3114708b65e2191e5176d3ee8ec0fb84db93c36e1941e80d622ff56959c2869768dacaf108d44f394175ef57b53b6daf9764e10eca12cede24db22d92004e267e1191e4e8ce42cd06f11989f8709cc28ce02dd80c0fc223c636dc67973b6b1f6df10945f724209bbbae2d611373fb39c677713161b7c6db8e06b8ae0fb2a3c23ee281e3efa2982f26bee2122bdd12aca43c46908c26f1aa291a1dd5a00c0da86706999c405e65c04e67f38c11c68a9da5e374933ae7fb3f52fef44007f1b768019bd35d800be0301fc5dd801669c246603f86e04f0f7610798d1138e0de0bb10c0ff0d3bc08c232936806f4100ff107680a3780ec8cd08e01fc30e30a3af121bc0b723807f0a3bc08ce33236806f4300ff1c7680193d47d800fe1d02f897b003cce8e7c406f03d0860d1243493348c65956d92a605728b88714299fd619651dcbcd50cc1da8413d6fe1658973b78143b629709f73e04372c72921fec7cb64154c859b11ade1eee595cd03e812a7fd386a8fc992dbc44d1c7be0441d98c134abd6bae52aef3bb90ea3d72987003f9a1b0cdd7de8b00cd091ba051bc8ef4cf08d0e69c80f6b654767bf3542cf44659d6327a1717a4c723485b34aefd8cfa5aeb4d08ca969c5076b3b4f2895016394f7582f94af145312620fba2ee52ab86a8e6e97ba151afe69fa0b2d99a1352ef2e918ce3243697c8af109c6dc2374e2ae42da5855c155fa08adf9613d60119c33a4f7dd260c75fddc05566ff85ca6cbb709900c6313d9b09781dc1d99ebbb5b73bf62e76feae93cebcae9f7434bd5a6621203b34660fb4c1aa38dbf4dd5a0465474e283b8af48759476f223917c1d789df42c62b7591fcd8fdbb5ae8db54dd1b62573bffa259b16720383bf38f8732f1d28f26905311905d1a738123718cce3883c436467f0341d9353c6b458c50b235361f2328bb7142d947556f60bc0155eedab476337ae5b31302b53b27a89d24eb1def12f29608c01e9c007691acf5d606b85d0648b99bba57d5f7c758cf4fecc805620e02b167f8a637c6f35a4cb665e09f10acbd38614dbd4b3eca77cd8c4010f60ecf726f144f4edc0341d987bffd767793d83ae9b87cae90694a458dfc387aee08eb11a87dc3b39c16c5aefa8d08ca7ee19aaf64acee6c1da30f119cfd1bb364263a2144d1afe36204e5004e288759a04c74e72a96531b55f26fe82ead9724e7c87b6241ada51235dd4c31827d0d17d88723b07339c186d3c260f0b8527e5eea50ad8df4c923ed1170031b6f3238aaf0f545f00de2844fdf64a09db7a0e2e28db6653b9857dcd708d8c19cc07a3b2aa3309267c99f81c01c122630a338223a138139344c6046f12cf99311983b8509cc289e257f0a02735898c08ca29ffb8908ccbc308119c5b3e44f42600e0f1398513c45ec3804e688308119c553c44e40608e0c1398513c4bfe2c04e6a8308119c5b3e4cf46608e0ee7f21a23ac6ccb6b1d91f7f0184e58075a60758fc1827d94d56237390db74eec68e72a3741e5363f9ce5368a9791fe8c602d681c4fe2656283d8e8905be5248579a7682e0e4f40408e0dcfe2701447efbb2328c735c45e363dfb599172b5287a65f23104646158808ce2b4f10308c8f1610192b1b96103723b027202ffba50e272c6a2fa5522f7045136f82671c1d71fc1379113bea149e5d06d6ac009011c0cbd9cecc158e1d95c693e42404f0a8fd73b636bcee64af31e827232b753ac7d29d87590ad107aaf1a1b886cbb83062010a78467eb00637964db3af0398272e7861848c60f46c97420c96831d90692ff45b04ee57695315bf628fb7a7441c04d6b88aa1d6fd30b77b06efa7f1094bb84efec0ec60e3bdbd91d3f2248a787675a238a33ef8b109433b84ba77daacd15c8ed086d10d1bfb7701482742627a4eeed70909cbacc8c0dbce95ce00d46e0cde2afdab68ef96ce7af1ad5f989f231123b23288bc2b55d80b1d161db2ef01282b398bf5adb2e69ae5649a2d7ccc41078b31bf324b8a8cf9e3f8a809c131620a3d82dbf1f0139372c4032fabbb101f91602725e58808ce232c49b08c85dc30224a36f301b90ef22204bc20224e3ac241b90ef202077e304b2aba00687300b09474644b9239e8f60dc3d3cae821322b9bfe71a04e6fc308119c5fd3dd72230178409cc287a085d8dc0dc234c6046717fcf6f10980bc3046614f7f75c89c05c142630a3b8bfe72a04e69e6102338afb7b2e47602e0e139851dcdf730502734998c08ce2fe9eeb10984bc30466145719af47602e0b8fe71a63f3c3e6b9f636827279789cae18a16473bafa0c41b917b7df6faa6d26d19cd62842f0edcd7d37851d3ef3bcff3d9d78f7d456d87516e539a34204ee3ee1dc59c638e1c1e610d83a168775dff0780e45b1b7b92b2aa1fb85cfaf8d115236bfb61f10a4fb73cfb767eafcc206239b5ffa4004e301e1b39d85bca593ed2eaaa6c8761ed890e7bf55885a74b0786adf22c6491036cfa29751795d112e472dc6a9633638b722380f6a1c17427d6a66d45d5977415096729f886defe22f743e5b259ff42270d4419d84405dc9bd29c50e6a34811b87805bc5dfae974ac6a5a85aef98b752cd44b09635ce381e84868b6ce0a210386f638e23de1a277e89a8924d529df34534c11d8ec02d6f88be281e70eeb81bfb2e40b0aee684b5ad8475a56a72ca9cc44b843e13267a23a36108b6359cb0f517998e8cf07695f1f23f6b891cc1353afa0e417b70f8069d51ade8df23582bc233611745cfb90508ca4338a11c9465099de5fc866b6e36cba127e314099b7d6d87a6480ee5bf6b2d71df2458d24dce7809feae9142958a8d11ec32b542e5b492fbc63f779b55a55a4302e8cc35a5e895c2a108c0aac6b966d63cdc249a9df7c908c86aeef9f83878899ba3f5bc6791fccdd8eb6cc705633304e3da86e875c27011268da966679efaa0c1ee37bf810bda2311b4ebc2e3a5342e921da4c31098878509cc286e2da84160d68409cc286e2d5881c0ac0d139851dc5a701002b32e4c6046716bc10108ccf56102338a5b0b0e44606e08139851dc5ab01f02736398c08ca2b3d7fe08cc4d6102338a5b0b362330378709cc286e2d381681797878b616308e7fd8b616fc1d41794478b6163042c9b6b5e01704e591dceb93254e92c5d2650bd6cc5d0f4ee0103dd7ad0e08b6a3386183ab808ba54f112c3e54399a958b4dc2bdae06446183ae0d1774ed1074478773fd91b1ad665b7f6c8b56748ee184b58d483e4138aa3702ec84cae2164ed07245a6878ada17c7a2b92c311ac17b6cb8fc85a3e87efd1704e771fc7701605fa264e756774360f4d61c7b23108fe75fb47597c4ea6473b3639cb8de15017842c39eb83e51d0c79645f168c76f11942736c4f96fd4f81a03c938b66603f27404e449610192b117c906e46908c893c30264148fbf5d89803c252c4046d1469622204f0d0b90513cfeb60c01795a58808ce2f1b7ab1090a78705c8281e7f5b8d803c232c4046f1f8db7204e499610192d117880dc853119067850548c6650536206b11906737c4ca61a6333f8c9d72b6799fe71198e784094cc6a1221b982f2030cf0d1398519c91fc0302f3bc3081c938646403f38f08cc5f8509cc285e82f43002f3fc3081c938746403f37104e6afc3042663679d0dcca71198178409cc281ea1f30c02f3c23081c9d8696703f35904e6456102937128c906e67308cc8b39c16c2dccc5daa82ecd0e41905dc2bdb2385f686f8cdab4c7e544cf43b23582f2d2f0389b3236316c50be8fa0bcac213685eaf56ed8ae4c6f0ddd11cecce8837cd62e6f585782713bd832d937a8945e111e9768c60acfe612fd2582f2caf040c93873c906650eaae05785d3d797b184b2d9cde608d6ab1bfa74ace50e1ec58ed865c2750374c32227f9c1ce671b4485ec89d6f0dad1b3b8a0fd13aafcbf09cf314e51dc24ba1b82f29a863886397e9a46e665941158b632ba11017b6d5881659c346603760302f6bab002cbb8b4c1066c1d02f6fab0021bc5e66a1d02f6b761059671fa8e0dd82d08d81bc20a2ce324331bb04721606f0c2bb08c830236608f40c0de1456601917ecd880dd8480bdb92186040572a6cab65970859c1684f3dee193e8415985a0bc857b93ea1259fa6a1c8a456871247a2b492d1068b78667481ac5034d1622286f0bd786d4283a267e81e0bcbd71ae015b2af07908d1dc263d5dc2d822c7203e378978b12c33506ae2b79ed53af1f344b99cdb04445739cff365bb5c270e72cad57ece3f6fd81fe0fcb3c5c76270eac51c07ee753216e89549da5572f9b9d2495f30d2497207148576aa28e4c94b45e319663f3336cfd3c9b279ea58691def1ee20b87f9d608b899c3851564ac5569e394dd342b659a228965b5dc7f0f68e4a56837f2e486de596a557899f3b64cb8377862596beb65cb64577f9ee795e854389528a30d16659592a597937a91a5daa4fb2eddb12379f2ce1e7d7b5495f3ed3a29a9ded69c174b75de0b14f698c4134a0f705de0bc07095c4c4b1d7e7ab374fe2827596ca2f3cbed658ea9ef5fbaf5a14a54a9271d9f9e2694eed4d4ee84221cb35bb3cac0ea653a8d5c5302dfaf766477f30662d3699a5e3fba8eb74d912bf970a0c30eadff5d90ef2adb6531ed214d02aeee0b650506a1e027e7ff0031210d8ac9850200 serializedProgramBytesString: - serializedSignature: 0abb85df9258a1ff4d0ee230009fa3a786e11f4b4059ee7b8d4397698202a295def1700a188939cf981ea0aee663b133c5eb81edbe9c4918641ec034a606b90b + serializedSignature: abf6148c0f4104c1861db352a563cc38c5077a29d20cf7ea724b17af78f90c76bfbb092127ec7af2aad39428ebfcac3275e84580e7997101be0ebe8c2f564902 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/d7af48bb7087228448a645c0f71cb27f.asset b/Assets/SerializedUdonPrograms/d7af48bb7087228448a645c0f71cb27f.asset new file mode 100644 index 0000000..fc612ca --- /dev/null +++ b/Assets/SerializedUdonPrograms/d7af48bb7087228448a645c0f71cb27f.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: d7af48bb7087228448a645c0f71cb27f + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c14c7d5c0e78ede4c371d4417a64808d1dc85407484692ed80621099011c52a1457dcbb8d7bc3bdd7d88e7b25718913f7c471af716f71ef76fcedcccee8deedcd3bdd68ef1d337c38bf70dadbbdb7effde74d7f3313cd61de7f9161de3f0bd81c56c846b0f9ac8cad66abbcbf0abdcf95defffc2bf5fd6c56e57d2ef3fe2df1ee0d6359f5fc92ff3738d2d5fb77aa7755cd6abc5fd6b252efb342dc9fcbcabdbfa77abf2df7aef8b74bbdff977b4f451a7b3f9acf26b262368b758974ae47c402f1a36af95d84db1569eefd3b816df0ee960ba5f84b72c4ad2ede3f73bd3bd5e2de4a4f69f5dc427680306ba577afd4fb4d15abf4642e11129bef3f8b893f98ff31567e8e939f63bcffb7907f37927f37977fc3e79bc8cff1293ebf33f85d0bf03727747992dfefe27f46feed7d36652cba025cf3df7e2e9fdbd597175d9e44d6eef2730ff9b9a794599982fecde467413df626933101c84a855973f939517e164a7d5736f0fd453ea3c866208fb37c09e83311bcbb05b8cfbf9b14c276958e2f07d2f1653f1da317c8f47b5f3e3f597e4e959f53a46cef994ebbcaefa6c9cfddead16bbaffbb3a1f1fefbfb3d11a793d437ece949fb3a46eaf4a5d5781ebb0baa8342d96325f91ef58adf95e3dcfef2b5d67cbcfbd02e935473e77b0bc9e9ba23ea9f89fd2e935f98e2a70ed716cbc38892c95eeaf07d2fd75f9db4d3ec7c6f706ec01fea7953b4fcaab4ec18ef9fe3b767d505e2ff0af27ac4fe1b77b4b7ddf90efab01d79efe4d54baa4aa7763f9bb4df27a1f567fb9a574d94f7eee2b3f17b23a3f9ca0fc657fffbac5d3f2fa00f9be9ffcef9bb64ef29e03fd67f8ebc4f522ff7ac03bf27ab12fabe944294b952325f27389fc2c958cde64f1f9e74d86e71f9d3e652cde97cb63bf1b7881fc6e298bf351b63cf64cce0549642ba607e97935cbf6bf6fa6f29bcadf15f5a4aff2f7b758bcbfbf25e56e9472af97cfaff0af23d9f2ba00c8e1bfaf0dc87d3b20f76d29f7a700abfaf454759e2a77649e6607039f5275ab4c3f267d3df24e205d957fac8cfdb68bb227556ec9d2a89ac5e791dde47bdfad47a6fabdccb3e27e2acfab676a43e8bc567eb64cf19d2de5e7ba10ef6ce5fb42cbc6015f38a01e99eb7dbe2d4e043a7039aa8cda203f0f919f874afeef07fc40d5ddc9fca03e5d0e93ba740269e0e9d26a80bc3e5c7e1e11af0b3b32a0d3daf4e914f98f94b90e5cf3cff7e4f7ebc135d7b5cc7f4f2b55266f949f4705743e9a4e67768cffbb1db2806fa4f2bb64fe75ac6f5f6b59feb756f9f1b8806e6b637ab7d807fc56e9914a7e3841b2f830c0f843a983627b62e0b90de09a7f7e107b9ff8dbfb6d1be55bbb80eff96f0f01d7fcfef129ea7a324bf4592ee763f0ee8fe5bb37facfb6b95a3e7b0a4bcc7bbadff2cf8fc0771f49795fc9df9dca12eb31f51cb7ed5070cdef9f94a26da769f4f3debbc3bc24bf3d9dc5973f35317f68ae7cfb0ca9cf272c3e6f7d22ef4f88fd26a2ea2ad9566ca7743953fee653c0e5535fbfb6aa5d7196fc3c8fe9ebd9730007991fd9b9b177f75275e0d949dea5da91e707ec3e3626a7f530a9bb2ac754db641af22cffee42f97989fcbc5c7e5e167b7692aadb545bec52a9db672cae6c661783eff9e7e7f2fe61e09a3f77514cf68e8be577570474d5a5e79501db7565402afdc32fa45eb29c8ffc37e01f5f80eff9e797f2fe11e0da4b93f64ccabd8ac5b7fdaf66f1fd866bfcfb13f3e5f5b5c0b71a5a4edee0cbaceb3fdd283f6f929f0703d963a4de5fc578d5b5bbae07f7f8b5ea6b5cc7e2ea8ba4badc2c3fdbd463cf58f01cffbc2584fdc9ee35959fb749dbbe66f17dcaaffdf4eb70671259b7fb9cba7e27afeff07fd3f13179fd67ff7e8776f25ac9ba45bee39b18ebf6aa1cbb4bdefb16d87d9dfcee3bf0dd9fe477dfc7be13f2f8bdbb03e97364e0fe3d4086eefebd4007ddfdfbe4f71b7ddd3b65c9efef0fd8725d40d7ef585c5e670f24da1af92ef0eea30cd252e6adc80f81b4fcc14f974e1b93c87a489f969d55dbf3e1405a3e1248cb1f3569b945defb09a4db14f9ddcf9af4fd0570f851defb0b9296eafe5f815cddfd47810ebafb8fc5a7656795e71f47d212ea0fd3f289445bc533f0ddaa5e4b96964fcacfbfc94f5ddbf3eff2739a947b4c0a72ff213f2f4a22779780dc635390abda394f2591fb0ca26f43dea77c5d8d85fdcae27d9d5f7b7edb25d958f2b34cebeb5d555a3ec7e27dfd7916efebbfb1445f7f41defb3d96fe4c8e0f47fec7127dfd0fe027bfc97bff04cf405f55f7ff05e4eaeebf0874d0dd5763f71ba5fdaaedfe12d3fb3ad41ffafacb89b68a67e0bb555f24595abe12e02cf946198beb6b886b2f7dba29fd54dbe60e96bc6e7cd5973f598d5fbd26e5493f8a1e0faef96734f0dea87cefcdbe9ceeaa0e6f2dbf7f4c7eaffcf675f9becbe5b51c9becf679e0b937fdeb29aa1df17680ff3bf1e9106d1cf3b73a5bde02f7a06d4d587c9be45df97dd318ab6813f01d4c2bd5aeac8fabec77b3f702fc1a497927806b7e4ff5fdb8cdaa0da0daab37c7eeb55776abf46d0df4f850ef2b42579066c66d246533e8d319cb089449d1662cae4c12d75e3af56449647d269f1990e419d9e666b2cdade6dca26a6ee23070cdef7f29af5b04ee2b3b9f8ab1dff15ea08792cd7f7362127d94fd5f33edd86dcff7fdef7bfe9444866a53cbb655b4a57cef49e0da93d54bf5afbef5658e91b27bc971aabafbdf05e4aaf6a1f7ccf40181df4c49c1368a7be748db5ab1f8f2468e1bf6567d66950fce66c97df307f9a9da34e74a79ad595cdf33aae61c928d67d5f7ae2476457760717d4471cdefcbf48fb691f74f96d7ed02cfabbc2ddb4dd1b681e73b049eef209fff455eb78f7f9efd0ae4f06b556f2b5df877a00e13bfe7dfa9fadae393b545deeb18ff6ef6078bef5bcafe63b4937cee14f03bc840dd3f555e770ed8b4a3bc3e0d5cf3cf2e01b99d03acba04e4768d97cb1f159f6a2c351ab371fa77e037806724122f33a94fcb3646b49bfccde9e0daf3e9acdf92c850bfed2e3f7b481967806b4f46df7c5fdfbe49f26db467805f77f03dffec25ef6f02d75cf6e624fafd2e9fed1db0adb7fced2b29fcb68ffccc0ad896e5cbe8d7ceb7ad5f92f23f22ebfa4893401a2a9fe5f2fa69d2b51f484f7edd57ea7026b8e63aa8fe6353c4b7fb047e7f56fceffbcbbe4b44c668449a0774ebcfe2e729e45c4ba415ee9391d601dd07c49e51fa455a04f41b10d07ba07cefd9400ff53dff1cc4e2ebc74152ae2c23a28303f7074bf9a9ce9faa3c22cb97c80eacc1656ca42d9095ca3892ac4322ed1afece3a19f5bd33990c55562f0e617b07202b15db65d91be91842ef72202b9577cab98748a710767606b25278a70889d3ccd50d92f35fdc5dc573dd98b69d36e8d4c073b2cc8cf4909f3de33fa3c3595c1f435c737949da15911d93db12e9e5ffaebfec174464db219acde2cbdc6c5fe7c17b4a9d65dd11e92d3ffb20baaa32a76fe03d5981f78d887f5ed926bee79f392cbe2cc84983edfd9836be235bcda9c9f22a3220b96d6949872e52d61016df361d2275bad7973b44ce8d4464191a1914af5b6430a1af04dbac9a7894c890787b449e92cf0c5275ca50f91b556fa9bcbb9394fb0d8b1f471916785ef9c64e317deb648c00f7a00c753f077987ba9f0b6cd4dd1fc9626339f0fb3cf9de61f2fe39e09a7f0e8de92afef6d2742799ff87ee29658c929ff981341dad4fd3c81860cbd6ca43c1baaa434cd640956fc6f9d703e43c98a8133dfb87de1cf86d7def1a2f3f770ef0d9c5dce723325e76988a7d4cd1dea4f5c1ee4c5b9e0cab91efda1c78573db189913d98369f4473597c1991ebbf67b89a27df33f0bb02f9dc4896985f26807b3a7f2f0469a4bb3f91e9f3c3242977148bcf0fd2c7a379315dc4df5cffcdbede757614c9cfc9f1e95c971ff203e9ade63035edc3c8149936320d449bca7be708396716992a3fa725b2127f6365d9f4409aeafc7f4640763e90adf27adbd8ef06a83ca8f2457d7e32b381baab38df625c87888cff8becc5b4ed84a4654788d8dbc81cc9508ecd8ab6a4975e395bfcef733e8e67c496d5c3682ed3c6a84447b3b8f81071edbd2757cd37cd63dab812f477ca9fe6cbcf05f253c6d1467765f165b4eabf241b1baacf3619431b2c7772e5f8f74855eecab8d9c87e19d06921d3975d63587cd935c6d775a48c7fcf53beb9bffc1c14af6b5dde573aaf4d9fce2276967faaf1e4b12c7e3c79acafeb28e90b910302361e289f1bc712cbd945e09eae1c5dccf4e56889fc9d8a873d075cf3cf9d63ef127f7bfae5c931da5132c62a22e3922365fa3451edaee86e8177ec06d82a7b4a93a407ffdc9dc5f7f9d59a9330e9926a1e2f0fd8b734313d541a47c1ba9d3a0ecbea49a3e54086ee7e85bc3f07b97f1092c62bccd338ff49dfd6d1aaaf22e75d232bb7ed344e5a67ac62f16dba64cfae66da32734c96fffd1895462ae65bae2b89a8f96e5576eec1e2cb21b5b6ead6188b0e496205232a0e2b498c7f44cdb13434c63f1907155faffa6b2a6e8dffad6249614cb61cab8eac8fe9306336f8ad92a564a898e96e1af9876ae4774f417e372043cd8df7d0c83f5c23bf670af27b00192aceba9746fe911af9bd5390df0bc8907ec6d4f8c951e09e9cb78e1c0de467c9ef8e01f2d783df2a594a869a63eeabd1ff788dfe6acc3a99fe7d810c39e7ccfa6be49fa8913f2005f9fd818c93e4770335f24fd6c81f9482fc8140869cd7618335f24fd5c8cf4e41fe602043ce8730352e02d3f7744dfaee9442fa0e0132e47c061baa91bf49237f580af2c1584544ce55b0e11a3e6769f88c4881cf702043d6212c4723ff1c8dfcdc14e4e70019724e968dd4c83f4f233f2f05f9b01fad629e4769e45fa0919f9f82fc51e0f96465b78a8feeaa79f7459a777749e1dd5d810c19335d572643f99b35f2bba520bf3b90a1e2ba7b6ae45faa91df2305f93d818ccbe477bd35f22fd7c8ef9582fcde40c615f2bb2c16cb3fea9e8c078fcb7baa8c4f96f7b2808cabe477fd58a2feaa6d0ff5ef9b82fefd808c6be4770334f2afd5c8ef9f82fc0140868a671ba4917fbd46fec014e40f02326e90df656be4dfa8913f3805f9d940868a575765324cdf9b35e9abcaf864e90bc7ac552cd5308dfc5b35f287a6207f189021e39febca64c847c59f433eaa8c4fc667049071bbfc2e5723ff0e8dfc9c14e4e702197f96dfe569e4dfa9913f3205f960dc312263deebca6428ff6e8dfc5129c807637b49dbe46a8e5e8d35ecc9e2c71af8b5d71f99f060fc73f5aeaf4ed6e6977d9868018b1f8329f0df55d8d3b7a950aee58ea878fd35c9df19b92f207f82947f2eb8e6f735eb7622f7cbcf87e265c4c558c8ba205a18fb7d5d9c42447e3e08d2e472f9ddbde077fcfa01600f8cd534ed67ca98fc601cf344d517517db96bebe1f608d3c6ad4e7ccc50ce161617d71af92b8b8b6b8dfc45fe56c5403f2ab9a8b17b359f24df1b9d147b5f7422f84e17b35a8f6edaef64bd1c2d0af861916fffa4aba58fa87136e58797d6c3413e179d0c9e53ef9a12fbae6e9c7c2ab0730af88e7faaf9bff3c0b5a7dbe4ec80dce9f2b9f3c1bbf9e70cf9fd05e09aff4ef19c29efaf0cc82b063acdf4df59a4e2cb1f0fbc63168bcde779bc8ad4bcc93de07e0ba0a7fa4ec980b1e597814ffefd85320dde897f677d69a04d9727e4bdd7cc7f1b9dcde2e3f464791bdd2be03b7bc9f479c7d77b8a2a5f959fbe91fcdd4a6e44aeff88aa31bc93c135bfff249007e26553b647cda3ad03d7e0bd427e7db17f1fc867ff2e65cc97bfb9085cf3cf79319b23721d4a7401f009593e44f796bf57ed7de5a3fb8067f701cff2cf7d597c7db5afcf7fda3b01d9ea77fbc9e737836bae975cbf125d28efcb3e415d1edd1fe8b0107cc73f0f90bfb9145c7b3a4c95e3dfd3ee45de75208b1f033d30f0ce45f2fe65e09adb5619ff7c74b17cee7270ad1843395704e404f48a96001b4b641abc5f8fbfaa35a5c5e09abf4b8e6b4e556de269a9c94bda96f85e7eaa388325f1be2fae3dbba6ab714a393718793af0fc9581e755dc235ca7c43f3563a0da72e5d978fd22cfc57e37ab7192df45e5a75c5f142d0df8831aff8e98338ba8f6f8dae4bf156d78fe79543dcf4946d132161f8f55e6339c21e3ed55992fda3829c88ba8755372ed53b45ccabf0a5cf3cfa52cae6c88ca3995ba3262198babc7c4b5a7d7cc2d0139cb037282736d15f2fed581df5500bbf8fd6bfcf49df962c09e7aec4eda9e93ebbb224ae673f2dd6abe6615b8e6bfd3cd73c4c96f121131c3533c4f2ef15a9b39c2e178ef30d52dfad42febdf9c4fac9d122bb518dfa58fbfb6866df07e5aaedb216fbed87fafc6ebc9e46977c8eb26e27ed5db0bc5bf25de131542e8b5d18457dc97f00aae5ca5f7bf72b0bd5fb5f7fd64b13b20dfe0afc2bb3382cdf03ef9af167bddb685deffe2a52cf05e5bc96abdab79debf6b84bcc59eda894fd66712df0a30f89b399e4c7fa7c295de370ae81aefba52683857fcbb56685a2eb49fea7d5723f64d5cc596b109dee77af1b644dbabbcbf75ef9c2791e975d46f58887def6f8ba89269a2670dd73e47f8f5f614d91a29c2d137bd56e6c3c639a2f639392125b633f40b19afe0f4deedcb18299045e2becb6339fc52040185b531d142bd7ffbbcc7b0fca4b6e8c9f0e4ee212c88a5f0cfbf45ee39ecf861794de24d1bc572f8320f11bb98ccb46460b9bc6c11a968624293268d73b9a241fc111d7eb194646e06f1fbcf5588e7cc13a0a9a8fce21340849fcdf34ab5d9a0f25ce0fdeb2b375f98512994d4995525fe9aed3d51e2bd929b55e03d5526cacf42218bef72bbccfb8eefa3abcad599728bda4a9690eeb95cc96622e9122be6faccc7122faa4b3cd1f79db755f20eb6f56ef2e46b5e67452cf972446bae6b1227c7de259a618d655b4c65c3f60bce5ad1efd8c3aa5e7ae1dbf995333efcfec1bb8a57cd3bf3d3f79be8d3a9a548a786bc1d4ba946ba946a99e96c567fbd922c9d5ad5d9154b27fe9f9e616bc4d7ebd30123d85847b055a67d9ddf5b2da49478cf9a33e48bdb86068b2a3dc01d1027ac5f050c61130dc25c8eb0ad462bd6a445402bae1022b9a92e715a6f9d4abc61cecd572574092068823a77fba475b0a96b37d3d113cb201793d2537dcbb95e2762ba77afc47bbe5c3454f9f7f1951f7f43ac3f1aff8be464794cfcf020592dd58e82ea00d0530eab1946bcb986782ef7d74e1a3710655c3033b4c733430b2c9b750e9bcd5a6292770c2bb91526b94b58c9ad31c95dc34a6ea3cb3662f471ff8c649bd8908cfa6b82f7dbe59e316b457b90b70d754338c9b34bb794b34b77915db2986e60c94c232c9beca04b3bfe650f9d92c1a4eb8e275d5b4c70cf9082db61ded62bacb7b5d749e62577ef54546e860bee80a9dc27acca1d31c959612577c2d2af6fc8f4eb8ca9dc2facca3bea4a0be18715a4a5c57cef3b7f007592b85b2146ddf8789baac2668aca6a85c899d8d3aa74f07b98b5428fe4e5080fd76a14ec5589ecc1037de8b4ea9ae555ae48bf6a8028b168df8f95655d74e92f327566073afc5e3e9763de481dc84b85947b60831836da905c078c60575ddee40407636a05b3e7203c7b76c38467a74178774cf8903408ef8109df290dc27b62c287a641782f4cf8b03408ef8d091f9e06e17db06a6284a69a889854135998e41c8d64a30aa82f0624370d40fa61c247a641787f4c789e56f8930526c20760c247a541f38198f07cadf035469a0fc2848f4e83e68331e163d2203c1b133e360dc2876039685cd81cb41326797c58c94331c93b6b241b9527c330c9bb84d579389688bb6a13316b8249228ec084ef96060fc9c184ef9e06cd7331e17ba441f39198f03df59a1b95277998f08234683e0a133e210dc2f331e18569103e5a233c47749a79644ee63b6e05e2fb9560daaf500cacac95cde9f475e126d6590eba70a253cf5d2513fa4df2de13cd11bdfd11495e39ddfb77035b2acf148d1dc169f22a110eae42991ae78881806106ef347d5f17b129e75ae11011e1a6bccfb4922d62f3a4fb30f16d33f92d74e08d7bf411db27f2eff990ff3c3115b38cf927a0fabf6b2def177bbfa9d13cd1456c74e8bf0fde5373c8fe333bc867f6f6bee1f3cdcb859394c53dd5476ce9a874814ffa775bc56912bcefe5bacee255f5e378b2e0ff018e664d7a37975e58f707329cc1a3e2b3339617b16ef9185de1eb07f2859fcb18ab13de525c264e06ffe1fd9720bc352e7c1ca6f9348de68bcba3469a8fd709e769cfd742846a78ed8c499e1156f22e1ac93962e092070a677246431f983a5996b5c56c093b88f91185eabdab85eb728d5464e21cef73a9d0827f5f2a5d3ef9bb9257883399a64214037b9358eae1b5f456f06536515144148b222259dda9d3c6bc68d01750b3c5dbed62831563bb6225cd5e9a92e6155d3196a4a4d90dcbb273c266d9dd7592fdc080445fcde5becac3555a8a299084f7ccc6dfb387ae681023b2876cd5a2c18f78e0f2968a58715fde2cc64f745f275c7585e7c06ba5e3f0babd4ad4ed35a10b03becea957b06bae2a6c6d765820b2c3ee2964074aabb00cb0a7ce9378738b2fba4a086fec2a9c77b6277991c886078baf39253f752bc4a315ec10d0f63099952cd069c39b687ca951bd337c1d71c11330c1fb86145c88e5f1fdc2e6f1893ac9bcb4e14bd2c2b6b026616aef1f56ed22ac443d4053a2fe16312b512763c20fd4087f306a267c0a961516a5e22349bc7a2a2678b12e8f0d644cac8259e5e5e9555e0eaa1193652522f76789ca30561a6489e0e02a51610f03cfaff69ef0975998e8390d738a92b04e311d4bb7259a74fbce30dd6660c24b35c2a73432133e53279c332cd3a51d1fa9e3f5066f962c97755b7c6998c5f882972cb1c6a956448b958994ab16e99ac50e65b9ec70efb3c67b3a4bd40395e25e9608fdae1265ad499acec2f42fd7e9df12e83f1b6868f2c662acdc5aaa29b72286e5d66c9d70def059c690860f5ff467def0d90bc356a1c3c6a7342779cd17de72ad15cfcf150e505ed7562e4b53053947a3578e98c5a61d96acafe9c27b0b7c4558b5f83bd644e1ef8ead3008d3f0e20b21830d2ff59fbee1c5b7b8f4074a32a13dd6c09aabf3245ea8566a0a55a3499e79585e5889e585550dca0bf3b1f275b5aef06e6c56be2ec084afd1086fdcc44cf8debadc22c232d66cd5dc82970573846c5e6684efaaf06d6d1262b144dc487e0a79225d3a0e1583b7fcf95249ae9a57033c5c7989a736579a3f5e5b37268b8c2a5489dc9c49cdb11cbd0fe6b2d51a97dd64e8b2fbea5c56c4e3546d55979d282464c26d6b746e2b8286c6a490f8e9d4b38f58f25c2daa83b2c0044d2be192e5826c85a832e0fda1625e81b7f48a04ef9582fc6a316db44c349ef54e5e2b9c3cd376628ebe1fe6e86b358efebca1a32fd409e78ebe4e93feb9bd0474c2e4086a5e8b6bbe3f8665bd06cb3b86580ec09a0b1b34cd05a33ed88198da8768d4eed9d44ced4598f04335c287190a5f8c31392c2c93124cedc3356a9f68a8f6129d705e19f2fd9d13fa10fd45f1bec2f3d235a208e74574ac3b58223a8daa7bbf81f99dc50a395a1f2b024c3b6ba5988e47ea74e41db362ef9dc90b1f93f7976109b05193005b0c13a01cf39ba3c2facd524ceda3356abf6fa8f6324ced63c2aabd5c27996b722c0b3fa45881a97d5c58b50fc2681fafa1ddae9919ed1598f01334c237190aafc4849fa811beb8b999f0953ae13caff13db2c28c57aec2049fac2b147828ad2aa64a03e3964b5839188d2c13df6cf0feadf4be2b1522b2c496246af9858996ab31b6a768d80e3064bb0643706a48b607eb0473df3f2d15c149d63055e904f3d180d3eb6e044603f836eee6a301d518f64d1aec771a62afc1ca9033c39621b598e4b3c24a5e8b493e3bace47598e473c24a5e8f25e2b99a44ecd4d22c113760c2cfd3085f6e28fc102c639eaf2b9b06321ec71a1b78486c562d1552aabcbfd7caa64c59dc683d1f81af9043b826f9fc504ccf0b747afa8153bc91c73b2625624687bfb1d8ab9e4cde7a1886fe420dfacb0dd11f8e09bf4823fc3743e14760bc2ed6f1ea5a4fba968978b7d8b75c79138e4762da6cd669c32f63e966f29e8d18d24b34486f6b6586f428cc884b7546f0d8661fdfce1eb25962faa944eedeb65654e3e6188fc634b84ca7811fcca61a06b31bd82c3806437ab906e9c786488fc54ae42bc296c8c7616a5fa92b345b9ba97d3ca6f65561d53e412799b73aae6648abe31ad69056c789d87baec5de735d83de731246eafab0a44ec612f8064d02cf6b6396c0a760c26fd408df6428fc544cf84d1ae1af180a3f0d137eb346386f289b083f1d137e8b46f87a43e16760c26fd508bfd950f8264cf89f34c21f34147e26e6e4b78575f2b330b56fd7a89dddd64cedb331b5ef08abf6391ac9396229712657e9076371cd56e9f3834b52dbc1851f63a25ba15fdffbb169827375e9c26be8bb742a1954e5e761de74b7c69b7e32cc04e763c2efd1085f63e8aa1760c2efd508df6c28fc424cf87d1ae103da9909bf084bccfb4326e6c59860be8b76425b7098f0ced5228f658945367c63d255e2af556273e87231225e227c3f36e0a4c2a8f84eb759d27baba44f577ade3ec2fbd644ebcd98d60feab4e6b3547c6c3cd66ef6bb927e374417e59ec506cb56f76023bd2ec17ce0218d0f3c69e8609762463f1cd2072ed395b3625785adb31bce3c3103c877a65e2a3c65659a97523e927299bc85d5b7474d785db1f2fb725d72f3b6f55f18d2b6e687fdb4e42a1bb5adafc07cf6518dcf4e312cb7aec4843fa6115e6928fc2a4cf8e31ae15f190abf5a279ce37f02c3cfcf6d31efda5c8319f1a4c68876edcd8cb856279cb7cdf87931a1da66d76185d13f421646d763829fd215ed1cd4c2baf1257f28e400c3cae4062c059ed6a44099610adc88097f46237cb3a1f09b301f7d16f3d1e71ae4a337ebdec39de3f954123bc9ecc82d98e017420abe15f3a27f8674cf3f6182ff1552f06d3ac13cedf95124c149602ec06412f876cc0bffadf1c2c73a9879e11d5821f352d842e6cf98da2f6bd47edf50ed3b31e1af688437ef6826fc2e2c67be8ae5ccd71a9433efc6dcf175a6292df9de0d8bbcfff1c0203ed7bbcc13cd9b237c0dc37a71678d68baf306b189efde8369f1864e8b8e755ae47affae64fe5c811ff2d5701deec5747853a74307a9c328efffa5a271ca7fb3defbb7e11adc8769f0964e83e6202df80a43de7c3479dbfd98fbbead71df170dddf701cc7ddfc1dcf7dd06b9ef8358a1f71f4da1d7c8b0d07b0823f49e86d0a64e66841ec684bfaf117e9ba1f04730e11fe8d2d650f8162c6d3fc4d2f6a306a5ed5f74efe10efd71b2a2292fcd45d35f312d3e495e348d4c63d1f428a6c3a7c98aa6fc34164d8f611a7c565fd1b4b7789f59f4e0e398fb7eae71dfcb3b9bb9ef133ae1dc7dbfc0dcf7bf0d72dfbf61c8be64e11a7a4f6274bed2d019b6a3199dbf6374bec6e87cd3203affc08cf85663c4b186463c85a1ff2e24faa731adbfd768fd86a1d6cf60e87fc0d0ffd820f4cf6246fca431e2b02e66463c8709ff59237cb3a1f0e731e1bf68846f3114fe0286ff570cff6f0dc2ff4fcc397f6749aab55169aed6fe8569f13f9d16b16a2d2f8dd5da8b980e7fe87450d5dae834566bffc634e00b98133468c162d5da243101b1da3088e525cc81f9f9b041073eb5ab9903bf8c397034823870a348431cf815cc88c61a231a773333e2554c78138df03243e1af61c9dd3412ae5e781dd3ba9946eb170db57e43279c0f8f348f841c1e791353bb8546eddf0cd57e0b83dd5297b778f871f230b579dea36b4420d93251ee5489284e7f85699998009ccdfc73acfc7d154abc6fcbc48e0bcbc5b52a374bd812393d37524ccfa93d193630ff48932c313dee1f679a25a666cae44e1d2bc437d5e2a97220593f0158212732e194a169b4e9db5802b5d22450ebee6609f40e26bcb54678aea1f077b1c2a80d5618edd0a0c2e83f98116d75847a9819f11e26bc9d46f8578684ded709e799b57d2a855192a1eb0f348273b2d8569b8d4ddcf12dbdb3b11d74bcb4b3b11d23f5cdc686d7159b8dfd10f3a54ebadc66e8a81f615544e7b055c4c798e41dc34afe04ab1fba84ac8c3fd5f97f5ffee5d2ade2ff61f6624ceef95d53f6fc6ec2f3774ae2f9e1768cd4a7c46798f3740feb3c9f63ced323a4f37ca113ccb3694f4d363db1a75936fd2fa6752f5d93886fa45c203a5ae56201826ee94a96682e651946197d89e9d15ba707dfcbc94cfe5798fc3e2153e76b9d609e3a599ad479da3075bec1b4eeaba3c29d93af998e9dd25c28cec6f3379b366be67d8b99d54f63d6b85e66667d8709efaf115e6928fc7b8cd9809029fd03a6f5408dd61b7b9b69fd23a6f5202ca555804845dc7a7d3f2ad1c4ac9fb0370fd6bd990f79f8a78ee7d41d429a53b72359b1572a9431d375343f631a64eb34e8a2d56086f8ab46ecbae1777d1ab64cea174c97213a5d7aa4a84be22995263afdaad3893bde4e1ac7bbbc8f99e3fd86193c346476f91d133c2ca4e0ff6182878714fc07c6798486f31643ce2c8208cfd1083f36cb4c7844279c5b9a1b1249542798973e2343f6081be904f3ce781ed6191fd5a0ce78630c7bbe06fbfefdccb037c18c188d1931a6414634c58c18ab3162b3a111cd30e1e334c29fec6f26bc39e698e375c529df446f0e835b2b95898e862ac8b3d910e66f45e3ff1b1f749f25aefcea877717d6883baac8ad1641f959a2608ead7af647d6aac45638f121f2ea3d7c44cdaf626347b16489c2bccc3026b305c662671d0b7e2a10dce8d36f6ac72ad8d80ae47542c34a165b38ebebc775ae4f429ef7b4e942859698c3eca27198ae860ed30acb52bb62596ab70665a9d69811bb6b8cd8d5d08836584aefa14b69be01887e9c78a11c61e60b3d7817cbdf652d599a6627bd3b44c411fb63cb31bf8ecf01ab8567a871e4f87b35c2af6a34b96889d070351885f665af965d7413ffda01a3b767c8caac2d26b820a4e0763ac17c506142d84185f698e4c2b0923b6092278695dc11933c29ace44e586ba428646ba43326787248c13b622ca68465d10553796a4895bb6225e3344dc938639059c9d80d133e5d23bcc65078774cf80c8df0570c85f7c00a8f99ba329def931d9b3bf46b65358b989eedf47a62faccd2e9e39f6895f84e9337f6c2f0166bf0b61b6c86b737267cb646f88b86c2fb60acf6d2b1da3d2eed82e723e8522e4bc49d94c816639910a3ead9602b344bd6a83562009fcbc81275b31fb9b1b3615b2c0bb36c8ece327ed9b045a07db1e499ab499ef586c9d30f133e4f23bc75b699f0fe98f0f91ae18b0d850fc0f02fd0e1ef1ae75805ded755a2d157263a26e18b848198a97b6b4c6d3cc4ccd44198a9fbe84c6da729ff7c13d74af3cc4c1b8cbd7d5fdddb79055b0a86be631bed9bbc331bc3b99f06e76c439c4330e10b7515a1a1f09d305afbeb68f146c30cd15eaf617e8c49159bc9dfea115c6d984e4331b30ed09875aca159c330e1076a84df69287c38d6f15c84753c1737a8e339024b9b125ddac4a21c17895c03d3a8e1318639980e4b743a74913ae48a2847fe75a5d7dfe351442bbcf68c3f22d2705d72315d4a75baf40be8b22a6e8a2b9917375cc391988665f5d12a10fdf8a0560b98bf9df152b1b58459fecac37429d7e992057431d3893fedef906fa2dd282c832ed58d0c0d35cba0f998e9cb74a6f70dd4b565e2f82a7f770cbf61a62aa575a2d65dceb2129cdbac29361ad36f3956451586aea2c660efacd0bd93c385039c0ddd70722c96cc076992b9cc3099c761c257e82a4643e1e331e1951ae13f190adf194b8c95bac41819e7a0897d336c67503e5a3b3f6e1fca91e014af52398ec80f195a6338eeb60ba6ff2acc99f8b864d85ee5ae5892acd62449f3616649b21b36fcb226ecf0cbee98da076bd4dedf50ed3d30e1551ae1371b0adf13135ead11febea1f002ac155583b5a26a1bd48a9a80f9eada64ada8dcb4b6a20a311dd661ad6ca5835fcd34fccd13b137afd7bdb90378f31cf1f46a51d904db00261a4cc234d8a0d3a0074b6c8724d3a461ad8f22ccb10fd138f6c7c3cd1c7b3266f0a1f5b73e622d0d3ec1b3caab7bd586f5aa108f77ca32599c9b183f0533fe305dcd6668fc544cf8e11ae17b8e30133e4d279cef887844248581ec3b71c1d331ad8fd435530cb59e8109dfa811bed950f84c4cf8511ae1bf190a9f85093f5a233c2bc74c7831964d8ed165133e4acedb10c38dda3f26d9623666ecb11a63e7191abb1726fc388df07186c2e760c28fd708bfde50f85c4cf809bad2c250f83c4cf8891ae1b9b966c2e763c24fd2e53b43e10b30ef3d59e7bd9d58707d587a6676f6c6b43845a7053f6ecc7f37efbd6ff07eb3d4cb53eaa46693f7ee83a13d5583f64543b4fb62c24fd339c54833e1fb61c44ed711eb1e976eb160e9e4733c6669b81033f70c8db9cb0dcddd1f13be49d78237147e0026fc4c8df0197966c20fc4ba076761dd83b31bd43d588439c4393a87e0ab1ad4206b85d8f79227fd325105ad0ed545588ce971ae4e0fb598db6f1e978836a15967ba047bdf79f5750c12dfdbb046f812cc7dced7b8cf61a3ccdca71433ef029d79bde3f27911834b54fcd192aa3a63638df4c1322ace6c7eb40c33fb425d8bcd30d79463c22fd2087fc390e9522c4b5e8c65c9cd0dca92cbb0b4bb245996cc4b7b965c8ee97169323d72851e65c27f6261fdd521f4a8c0f4b84ca7c78e408f72edb1e10dd7e4204c93cb759ab4d516527cd9d154c9c7e4dd2bb0775fa17b77d7a40516d4a16185572596d1aed464b4c5a3cd32da4a4cf8551ae1efe49b095f8509bf5a5744186abe1a137e8d6e88768c99f03598f06b35c22b0d851f8cb9d7753af7ca8eab307427a48e243d21b50ad3f67a9db67c4733eef27c2d2cdf40c234eb5563e06fd080bfda107c0d26fc468df0270d85d762c26fd23551c79a095fab13ce7764bc39c2178bc60be7ff25081f840b5f87a5f02da98c752549ccf598d6b7a641eb0d98d67fc22a886271605aa50878f307718a98bfed88e9f6448760697d9b26ad6f364ceb4331c36ec7da02f0a8b0f419791866e41d1a235b8f3333f270ccc83f630d8de070bc3f9c502eb78d592dca9b4ab912dfc4cc233033efd415f586661e89997917367603d3325d266ec44cbc5b63e2d386261ea513ce6733ef89849ccd3c1a83776fc872e9184ce5fbc2aa7c2ca6f2fd58571756940bbc34f637d09821ce0c5e232af56a23db8ec3d2fa014d5a0f1b6f96d6c763e63da833afbdb854264d94f9b7442c912b67b358b9e8189818770266dc431ae34e3534ee44ccb88775c6b54b6a5c91b1692761a63da231ed7343d34ec64cdb828df8c44c9bccfc107213634ec18cf98bae2db4b39931a762c6fc15ab1f63c6f0bff88d95a2795c25bee57d351e86556b98d34ec38c7c54d7083034f274ccc8c77446f201902251c173230be4266a25625f9e3572d28a3f5ce03d5e26aa121343cfc00c7d5cd710d8c5ccd04d98a14fe80cedc9980851af14e52334b450a45f8dd896286626ffb64a8c4c98a5ed9998c97fd3350a0c4d3e0b33f949aca08186aa72b3a16e7b3666dadf758d0143d3cec14cfb07d62887a6158532ec5cccb0a77435dfae66869d8719f6b4ceb09601c31a52869e8f99f38caeae3334e702cc9c67b1e63734279da5e8859899cfe98671763333f322cccce7f1e1cc6aaf71ed57e26569ec4c5d8c99f982c6cce586666ec6ccfc275686c69b49d37fbc0433f95fbad11643932fc54c7e516772af0493a97a93976146ff5b6374f6ee66465f8e19fd92cee81e49d3395d065f8119fcb2c6e0130d0dbe1233f8159dc1dd120c4e77e7ea2accd85735c67e6c68ecd598b1afe1b30ed0d8f476b5aec14c7d5d63ea943dcc4cbd1633f50dac759baaa9e61dafeb3043dfd4187abda1a1d76386be8535f530431bd284b80133ed6d5dddbaa799693762a6bd935aa543d329bb0933f95d5d3d6b68f2cd98c9ffd199dc3bc164ba2eda2d98d9efe9ea5a43b36fc5cc7e5f6776ff04b333d161fb1306e0035dbd5b6006e0360cc087a91557e9ecbedd8e19fa91aebe3534f40eccd08f536b2fa7af33f767cccc4f7435ada1997762667e8a0d63e26636a45cbe0b33ee335ddd3ac1ccb8bb31e33e4fad654cd5d1bb07d3eb0b9d5e8c69ac4e22fd5e4cfa7f75d2c5120931a79e23e7cf4dde751f967c5f6a926f63a159f2dd8f09ff4a23fc0d43e10f6094be0e39a3f22026f89b90821fc2707cabc1b1c510c7c398f0ef34c2274e3413fe0826fc7bddf88da1f02d98f01f34c25f3414fe172c317fd4e5a51a56df81242a4225cc2124fe7eb68be28e35b1fb4892bf6249f4932689de374ca247b124fa5997447c4227f1541813631ed3bd8fd7ffbfd4dd08c463fe1a69483ce6e3985dbfe9ece2b5448e911d4f60f27fc78671758e67f2c6bf616ffc1fd6a44a4ca999c221d5eaead81d33877c12d3e40f9d265c02aff24d0becbf6bde92c337c888ecc5280f9588973ccfbb5ae3fd3d4c64ff6ab9272b1fdf5a52cf51112cca4f758a8721dc381260208e8b8844f97ee09d132c4bf67eec10887fe8d2875f46a3fcb8867895a6cd3caad9e69ecf441392a6099e344f610ed0288a2ce15101ab4b195f185c238d32dd26e969acf0681c450a8f26d186141ecf60256ed3a8662467ba5989fb2c26bc9946f83b86c29fc352a679345cf3e9794c700b5d92ab28eac4245f25ab499377bfa02b09fa67ba24f0b733a96a4049d032ca0f518847340229075a21e540b2b763e5c03f75dc06706e8b32c86daeecf0f1e7f808953f37502cf6dcf5e70baa1bc0b475949fe112cf54fda727db4690ed9f607943f5c3a8ff0bcbdf3b68f2f7945966f9fb452c1bb6d56543ee46fc54a1e5b205ab9607c59658643570c3c47febf4e0816feda22103df5ec224b70f2bf9654c7287b0925fd149e6a9d831ca0fd74af4d204e1ed71e1af6249de296491fe1ac6a373581eaf6392770c2bf90d4c7297b092dfc430770d89f92d4ce56e61557e1b93dc3dace47730183d42c2781753b9675895ffa393cc9b9ebd5251b9232ef83d4ce5de61557e1fa3dc2724e50f3095b3c2aafc2126b96f58c91f6192fb8595fc3126b97f58c99f603e3720a4cf7d8aa93c30acca9f613e3728a4cf7d8e091e1c52f01718e4ec9090ff8b091e1252f09758eaed1436f5bec21a1a43d3d0d0f81a537b5858b5bfd149e6cf0f4f857492cdfcbfd509eeeb5d8e484530dfad1f11fc1de6cd3921bdf97b4c706e48c13f60a937326ceafd88a55e5ec8d4fb094bbd512153ef670c727e48c8bf6082478714fc2b967a63c2a6de6f58ea8d0d997abf63a9372e64eafd0f833c3e24e43f30c13b8714cca248eaed1236f5221ac93903bdcbc8416c6b9cacac9be54aef09cbbba69216c538b1289616bb854d8b463ac97dbccbdd5351790b2eb8b14e3077b73d42fa65134cf09e210537d509e679bf2064de6f86a5de84b0a9d71c63511892450b4cf0c490825b622c268565d10a935c1456726b0cc6e49030da6082a78414bc834e30ef054c0dd90b688b693c2da4c6ed308da787d4b83da6f18c901a77c0349e1952e38e98e059210577c250148744d119d37876488d77d409e65dc3bdd2d035ec82e198131247570cc7dc9038ba6145dcbcb0455c770cf4fc3480ee81a9bd20acda3d31b5f74e83dabd30b5f709ab766f4cf2be6125f7c180ec9706205998da0bc3aadd1793bc7f58c9fdb04c7e40c84cde1f137c6048c10330c18b420a1e88095e1c52f0204c704948c18331c14b420acec6fcad34acbf0dc124978595bc934e327fbe3ce498c7504ce5a561551ea693cc17fe2c4b45e524dbc40fc71c637948c7188109ae08293807137c5048c1b958eaad089b7a233187ab0ce9707998ca2bc3aa3c0a73b855211d2e1f4bbed521936f34c6624d58166330c90787953c16935c1556f238cce5aa43badc78ac5d54938676d1ce188fdab03c76c1fc796d487fde15f3e77521fd79374ce3f52135de1dd37843488df7c0041f1252f09e985b1c1ad62d0a30c98785953c011b0e3e3ce470702146f98890942762828f0c297812361cbc31e4707011967a47854dbdc9188ba343b29882b13826248ba998e063430a9e86413e2e2ce4e918e4e343429e81d55127a4a18e9a89f138312c8f59188f9342f228c6caa293439645b3b1f1b953428ecfed85413e352ce43918e4d342429e8bb1383d248b791ac1397cc3e2c80ab635267995ccd5e29abf6da19cb24ddf34ef193a6691003311b7bf29cae3f6731823d6178be79faf4b769e3a67a692ec5c7b44f0029d607e795634719996fa2fe1054d70bfda1b2b25cf4e4329b90f26fc9c3408df172b1dce0d5b3aec87759bce0bd96d5aa813dccfbb3c3f15c111dc4df6c7045f1052f00118e40bc3423e10ebd95c14b267b30853f9e2b02a2fc632e3e63465c612dd0bb2bccb4b52aa3df0e6db128cc9a561999462c97859c8642cc354be3caccae5baaa74b0771999cfb6ce92375515992d6fbb22e5eaf14a513d764bb02e151db02a6f2956b65f9586b27d1996f857874dfce598dad7a441ed0a4cf8b569107e10d666bd2e649b750526f8faa866bde0447139c7f3c2b96c229beef9b8bfab06df6aaa86ad139eb342fad408b1c077aa77bfd8bb133bd858dfe4d2c50df2a7a1cff21cb59aa903de4dacacc4acbc4167e5f17556cef71a7f3c37fb397fa5f87baa2813b8357ccf103fe74fad7b7252ddcac939c28a72b9374995e43157dc2d8bdb932c9e5e4c027fde4c0f4cd23cc697062f1377e399c25220c8dbdf37cf6c05fe4a8cf48d983fc137fa368df27ee3d35aed95b68b3cdfa81269ee5b3b4fae560d6a1bfb2dfe7dbafc691566e54d3a2b770f580999fb76fadbf5ad143606b58c4f217827595e81bf32b16c3566d9cd3acbf64829fd0ac48e3b154c2d970e9f72b13b26b6adc16cbb4567db98806d3345ea2c9796f1abf55bcd9283314b6ed559726a86cbb3d86ff8e1d66a23e0b284830353f372c80eb782d725b5a2fd32093d1e306cd9568551ff938e7a414a796386a0516d45a9568dd9779bcebe19845ec5bf3d58bc865be5b7b37547a3a723556b30ab6fd759bd5b52ab714de7085bf840528db451d5c6fcdb524928315f343c356b31bbeed0d9b5af71cb6eaeb813dfb6d349f0bf831b8217883e5498966043d2792dc6e3cf3a1ed333526753d7e6eb309befc4da29663ea07c986f14562a04c17436f50813cbd66396dda5b36c67c4b2f9227f56cab689df8757bd960532179725a4064d1f650366d1dd3a8b8a084b5f95aafe664cfe9ef689141a6ee92198a5f7e82cdd956103fbba9222de02b83b24673245a47295e80d957a35ee86345a752866d5bda9f409e2df0b5b08f3452a5479cff27cb82c49ed172f237d961d8659769fceb2c27a4bced47a0578199aaccfdad092f270ccc6fb7536ce322e29276b6a4bb3fa8faa243d02b3fc81547aec8979cf4fdd49a2fd56c2d4411fc9cb50fad2f548ccca0775569613f7986ac4aeb37c734dbf47b440e4f08abad2363d63000d69256dc4383da4e3347fabf52c93130acfe1288cc3c33a0e13d03a8af78097780fa972c0df5235796ed04b4a774a1f8d59f888cec2a98616ee2d3c7a1592225bc3de63307bb7e8ec9d43e8d9d50d685fa583c0b11881bfa4abdde5976d05a0d5456fd57198557fd55935d9d08f2779a95625ea731b7cf878ccd647b11128d3142c124f247a63b07c4d5dae897d2760f63da6b36f97103d831a51f3f2ad3b97ca7e3c6ed5bc84674d6c3a11b3e971b3340bfa6781182fe2a54a7ded24da9af224ccbe2752693f62bd83fada8f0deb1d34bcfd783266e5dfb0543469afc33e02bccbe7ed92f771d2d5ff3905b3ef499d7d0358f2b1ed791e650a2d4fc5b4fc7bf2116a935498dba054a0cc61a76156ff4367f570b404995717c9024bc2a575b332bc8553ab6d5d376c96ea744cefa7747a8fafb764982a66b8f9187aa557b25779b6ad149b30d7573aa4ab0c3803b3e769ac4f903c8ff0319dd9a29d5cad6929a53223c6db974bd368e126ccc2675219e9d1cf704d15be97bc34cfe42cd799988dcf62e3aca9d457a95899e93aeb2cccd2e774964e49293583f3957e3e54766fcd743d1bb3f6799db5fbd49baeb4f33bd4333fe760345ed0d1d88fd1f57655aba6e1e35d382d1322e76244fe89cd18e96bd1c4c5045bab67711e66d1bfb0b1bafa7ba9a99469a9f475cdfbc30dcff9e7631c5ed471d8c980834a53752849ba72e70598c6ffd6693ca8deb22a360f5b2ebee5714ae969c35d8869fa924ed3b149da9e414f8fd77c8d28116263bb14f9e522cc9697b10800b312c02fe912ef264675a8439b704b13a514889128de2731b1f962cce65774360f0c785aec9dd47eb619d3f3559d9e790c9f850aea3c59ea9c6a0ba4a1f5cb259805afe92cd87f2bd7b8d00353ad79d56f4ca85c8a51793d955971f5469391a19865588e4b4fad731966d91ba9f4234cebdcad39777a3966e99ba9e4cd42e1b3be7fd680f121dfc7c7b0fc7aecd3e55bfe2b130baec02c782bf5c84dfe4e133f84f661dfa72b85aec4ec7b3b959e5ea22ffae30ae5b246e6254cccdac4da2cd3fe781566ed3bd82860f2d653ec50afa08eea5035bc8cc40e044b56ae36ac26bf1ab3fadd868c3ef93e3cd77b7809f37b2ca56c6bc7e75f8359f89f54ca193de186b501ea6fd737f3fe178988cd9685147f2c6fb5f80d6ff1e5647bb722b975b5fc88bada7b445c4d1ffb9ebf7fa5971a3c4fccababa7f9aabce412de8bfac74e8aff06cbd354fdca2eb2940557fd150af995324f2a6f1d2108f991497c35e308af8557217ea5d62fd66785aec53202b459a075f5db7400b21e3122ce5387b23cd24338e96dcdd2f779aa0e94a91acde19dd6c8d0067a53fd5a7cc0dfd648ef435d12c8c2dca1d3dd17304bf699237c4126cf60b9b2795321924385c897d7ffbee05902c1f70d1702540baf5e71f341c6d789eb269ccc0f4fac62fe7067bed7076fd6249acbd3e1434a581d052c9e26feb9e4f88a0217b0bdd13886ed234a6c7c79f344d1e159e381f303c754058d01ac7602213f034e21fc9812613bef42f5efa78899522ea044b4da797c52315be104b0c75ac4807d4209ac1328d7aab70170035ac7c07d4a09ae83061c17c87b1a7c3eb4567c5be604b4c52c06ed336a6f8bcf9e45debf15327850055cf85ee702b85ddbc4c07d4e098e1fffce230752ad165c80770ea814bea084d70a64d5e2b8a1471730ddd93386e9bf94985a004cb18851171065758921fa9212515381a8daa932aaeb0e31385f51c2e9ea5d14d7b5f9d55c981f81304714fab58c47d3f3627eb61c377301e093bd6200bfa604d89cc5f731f9f4a00b8096778801fa8612507bd07c28143fac11e31fbcfe73abc47aa37f0cd9b7d4857ab198988b6d3fe346a37413c876df51b7ad9457f13696bf5d26dff34337d0e306bc5706c4e07d9fa9324b2d977201507ea718a01f28017507de3589ad1756d7d6b5d379e4619968c5cf11d9b34c64d64aef852e40e4ff29883f5242f48a8238787c48912f7d2fafdbd7b6ccf1ce502730c8f81325ca36b24250feb641b6d0e68bf10a1750dd0c2a869fe93b446a63263599e502a2af46c710fd92a9011d5e77c2581e3546e15267a9351877fd35938d0eb8dcb4400cf1409f73a3d1b1098cbdfe4609af356874c45614fa6b5d5d00350374987ea704d5b2ae049bc8fc6dc87817c98dc6c563a00cfb1ff59cd14c5146ad08ec7d32d17bbc4abcc905607c736f05ec0fea6eb8ca7eb3bcc778b9b5d41338d5fbd72d649b7262c85823e2565770b6c831540363a82294a878e1ce4b2b57a32c260e8b818a52824a9c4c8b8fa42e73acedb511b4bd1a5182eb10a8155dee375edd2406ad31b5b74d120127b5e2e5b1dd1263fb81557b5df20aef7d2e80fba9690c5c134a703b806cea6a80000f0155b09a527b998a1c5b2dc4b83dacd31564cf6694e0da323835e22f6be6d76ecd756f018d8ce694b85a005c6eb5c36600442d2811f1e9dc395e362c64a96f65ed02c0cdcd39c0664d02c2836b9b1a1e7b6d461d8f126fcbfc41ef35e2db1ad9a28b8b1ae7c1d4d669deb21188face6ef0044876bd356776ca4178d9c60154d90d8cc6cd4e6938213be48c46b6418875b651a59a9d72eb38dba84998dda0f224db688039dba84b949d52b070b651846cb6f1b8ae4e673c26323b2102293be96068b636a6245b3b6b9b8d04806527899fcb46e20bb2eb9966ca6e50b050768a012089a950df947e36d220c8ae67e0263b85765776bd6b47b2938e7964a738de968d8ef666233359b1e55ffa655bb97cf957ab46ffbf5766e5f29559ad3984159282dff66a43ddf6e229ee2fc4e3f561f2ad11477a2da0800e3d1374883f0950b5b174dab4886b85ed908a810d69897d09028077b009679e93387b80f1ffb636e11ce524ced100673b9b70e63b89735f80b33d25ce7612272f13e3b1faad0cfe1819be4154f8d682b2b24326bc7119ea8f50fd456c3c1b4387b33515ce510067479b708e7312672f80b3934d38473b89f36916c3d9d9269cf94ee2bc1de0dcd1269c639dc4f907c0d9c5269c639cc4f90ec0d9d5269c239dc4b902e0ec6613ce514ee23c1fe0ec6e13ce3c27711e0770f6a0c4d959e22c954370c14dcd7cd5fd0ddc72e94036a102f90fd0e2ec4909b2178b0dbea63a11c19faf12cfbad74faf051eda2b13191ef350288e5746b95e73890c67332a9c77033fed6d13ce914ee27c1ee0ec4389b30f837336a9cf1bbb9cf50b41d6cfa284bb234b3ee219f455f7fcf44de0a77da9e3be1689be4fc6c73ac9e0bd06fcb05f26e08dcb3cbcee54f0de07f0fa53c2eb6254e1908e1c9179e260908d07d804d3c5ba7b270073a04d30f31d843900c01c6413ccd10ec21c04600eb609669e8330fb0098d936c1249c3527839905600eb10926e1981119cc1e00e64e36c174b187d313c01c6a13cc710ec21c01600eb309e6780761e60098c32961ee2461567a0f558a4f15ff0e0fde5d64747c2fe9687c472ae4b34170d7084ae4dd98f91c26618140364ff457e0c339b601252c14c8803e0380e6da0694b0034a06f4210074a46d40093ba164401f0640f36c03eae25cfb2300e828db80120ee09101dd0280e6db0694b0d94406f4cf00e868db8012764ac980de05808eb10d28e1601e19d0fb00d0b1b601251cd023037a3f003a8e12a8bf1874b9587ceb2f06e6d14b09bba33b1096c0d342211bbf35c312e20f0225ac70eea442390cf4d377a64439980587464a84b02256251f99e0fd9f7b278f9e5b2d167b271b897271b8b93d80bd4b26fc36b5413d1751ee098a805de95156337f0b11be354081e7a13cbc8b478414897fe78832b5426c2e4286926c2121dcca6b374a94bd35a5e97ce6ef6fb041ec43e0d7f59c4a9558da5a2d76a7a8f27e4eeaa55ba8d03602197e776a2f2d10dbc6ac969b65f0937b7950e22ab9818eda42c4df98c5bd3abf31f0d23de8f782e4edc945e20bfef212d154e2dfba1c45f7278070cf4c201cbbcd21fc04202ca044d891c5a28dd56781508137d9dd5e50f0118038c1a67d1448d7b791e1fc1574200b6dc249ba208b0c6716a8b327da849374b92019ce9d01ce4936e1248d3f26c3b904e02ca28f0bc1fa3db30446d77b3e2340453439333bd0e4067cd4e5c6d0f700df944c2c5d551b1a4e65899be2b9dc20da0dd4e053a9fd708177bb426469be5360b5c8d07e16f70733dccbc6fd811f4eb367959a8b9172bf004f9c9e09947011f50c56cc26cbfd3f977a3f5a9f894c4d86f23ae09533e86b6a38a3b388ad10e826889d3157485145de27dff034e1800107d6b0b501306766628cb246ec525c5d17aba9b60d559fbac98a3cca095d32b407822c3fcb56b4239d44fb77e0b5c59468fdbd954bc5d41a6f8afb2bcf678a29b61574e0065081db11809b9da96ac8df0e9a075fc7e624ab333562d99e0ae57280722fea463a8c5e4ff4c722511dd50811eeb532bb01907332b12223f5fd36dd0b7ad91fc09c6b134c179706ec0760ceb309a68b41d7f301ccf936c1747149c00c0073814d305d0cb6de07c0dcdb26982e2e05580060ee63134c1783ac8b00cc7d6d82e9e212805d01ccfd6c82e96270f5740073a14d305d0cfd9f0c60ee4f09338b258eb39b2d9926acdfc9964c770453bb076ccd25ffc19972c252946c4a6d1af0d5036d824958bf93c19c0b602ecac43c391f8e5b2b2677f98980191a82a30b8101f8166762c914c797b8be820b8bed46ec72e0c16f00684926025973b7b940d65b01c225f6ec2f437a761019cccbc1145aa94d305ddc14f24a00b3cc26982e6e0ab919c02cb709a68b9b425e0a602eb509a68b9b425e00602eb309a68b9b425e04602eb709a68b4b4bcf01302b6c82e9e2a690e7019807d904d3c54d21af063057d804d3c550d76b01ccca4c7422c76c739dc8952c8670a5dd03c284d99d6c40b83318105e451d053783554801ab0438be38802b52cad44136fe5a0bfe56f782b77a004f5d9d99953ee3031eeb72467f0094956be8f155b3d8aab3d87295c9620783550e7adf20e07d07676ad5786c55055c1840be9e822c98fa1600b18a3e4ebd50fca446f81e2ff92679d755e2475b6d7505ddbe44006db53dfb12b93846b404a0aca144d9036475dd7a485f759ee9fd9adbe5f591ed40f5539ba90934557e4e116dcbd8e459b9d8506785d3400f005eba967a51fe14c6cf445dc6967b3f9de73d1aabd10bc50fab98bfee42b533c9704ea6c2391ae05c97893d0e525f1ae062d0d61090ddd7db84739c9338bb029c1b6cc239da499c8f83cc7e884d3849cfb322c3790dc079a84d38c73a89f33b80f3309b70bab939f3eb00e7e136e11ce924ce3280f3089b708e7212e72680f3489b70e63989f370807323753793f774667bff7221f8e1f173846ab5def784ddcc2a2aa07b03a047510255c7768fda86c6dc2f05f08ecec44812ccdafa6d99e3b7bb278cd4ec1621823a154ca91d632354c2314f32a85300d4636d844a18b949067512807a9c8d50096b7832a84d01d4e36d844a18c94906f57730be74828d5009e3e6c8a0fe04a09e682354c2c84e32a8df02a82751421dc512e739e3373be3531f2bbdfff1bf6353754bc5943257966fb05bc3d68957acf092612d2b174fcd132d5a35374598080b52c1d29044d883c512e1e44ceded552a76945b25c0c5606628fe8e2c24a20bf0e75332d1ff4f6dde9eef72ece292849b01ce536dc249bafb2119cec701ced32871766789b3f6c9c277dcdd53760780f4f44c949dd8705fbc87bab866f33b80f28ccc44848ec9fce8145904c95100df269bcaca5c271723dc0b709e491fdcd8d04d7809d7139335921a01b467d9b36886f4ac21323fbd9ec5609e6d134c1757badf0d609e63134c1757ba5f0c609e6b134c17a398370398e7d904d3c57ed05100e6f936c17471a5fbd100e60536c17471a5fb1100e68536c17471a5fb9100e64536c17471a5fb3d00e6c536c174b27309606ecec4f2199320461737dc3f0174292fb10da88bc7419c04805e6a1b501737de3f0c00bdcc36a02e1e0b7104007ab96d405ddc807f23007a856d405d3c1ee23800f44adb80bab8117f35007a956d405d3c26a20600bdda36a02e6ec85f0b805e631b501757801c02805e6bf7865684252ad98656ff0178afa3c4db46e2f54f12ae14f39dbeec0aca0d5a9a5081e3ff2970d767627a38d12f533b00d7bde9e1df804fde90a9bd45668ac88f1581284f7fcb35fe4697f716d90df8ea8d944077489ac9abe9d0b5a4421705e86eda9afb30b97f8ad65880f2e64c8477e5b36de9c8926301be5b325de1e8971ff811f36b84c7aaf06dca465084086d095883746b2622e7b0267be2c9442e9e4df431a8bfff6413ce3c2771b602de799b4d3849873cc870e6029cb7db8433df499c3301ce3b2871f667894b0a26b1f58caf7eab656a778662efe7658cf7cae708b07c63408e3e230df8f65490c780baffcf36ed2a427a040f594b7428a8a0eeb409e7382771760338efb209e76827713e0932fbdd36e1cc7712e70d00e73d36e11ceb24ce1f00ce7b6dc239c6499c6f029cf7d9849374c90119cea500e7fd36e1743366e92c80f3019b70e639897323c0f960a62636e68a3e4fad27b9c0fb393fbdc3dfd3ae4cec6957eef4c4c69900e843762d7975315efe46d0907fd8269c6e2e3f7814e07cc49ead015c5c63f43e40b98512657b163ceda840cc21f9474db87bde511e2829ff9289d51bb972f2cddf44758918e7540fb97ec8deb900e65f2961b6053033bc4d452d15bc8500dea3b6eeab40dabe240b9c790c94928fd98a96b4634986f605e0b58fdbb3fa6d8c935b56ec07fcf4099b60bab865c52200f36f36c17471cb8a0500e69336c17471cb8abd01ccbfdb04d3c52d2b260398ffb009a68bddc96200f3299b60bab865c54400f3699b60ba38663409c07cc626982e6e59b118c07cd626982e6e595102603e473d9a0907dd168828b95a71d31754ead1e1a15d15deb7848b0ac806e3f85ee40ae5f3f4e3ec70343376d2eb44d173af11c187fc9a2f7ce1b8ddc3d90fe07cc1ae3597f94e6ea67231c8eaffb40da88b9ba95c0280fecb36a02ecea49f0d80be681b50173753391700fdb76d405ddc4ce57c00f425db80bab899ca8500e8cbb60175713de62900e82bb60175713395d300d0576d03eae2662a6700a0afd906d4c5cd54ce04405fcf44e0c2d8cc072e90051bbec162f0ded89ae15c193b9ff04e2a94bb8045836f66c20fc767de0fc956ab7f00fcf02dfa51cde562df23fe538e8c8b2af3ae6abd1f96321574cf4fc3e66b2cddcbd4ad00ccb7edddc687b039441632f323a86cded99a5ba7c48fbebb38f93b1378e9bb76ecfd314f949fab44f6e7e256d2a2dd4285b6185445ffb1693b00d28dcdc9cad36600e77b36e1cc7312e71080f37d9b70926e6a4e86b308e0fc201313c2a9adc8c87372763d1fc0fcd026982eceaeef0a607e64134c17e38b4700981fdb04d3c5f8e21c00f3139b60ba185f3c18c0fcd426982ec6170f07303fb309a68b5dcc8100e6e736c17431be781080f9854d305d8c2fee0f60fed726982ec6170f0030bfb4a94349ba2c90ac43f93518e3fcca269ca4cd23329cbd80777e6d134ed2ed7bc8708e0138bfb1092769d02119ce0300ce6f2971f661895b9d4e657c1a6035e39b9b560ae52b041b7f339f43189f9673792b9fc52c06f73b4ab81d24dcd1deff57ca979708ccae6f4bf11440f83d25c2fe9aec9eea0ef1059e500e780323dd2b7e539408f27c5008fc4009b997845ce93dc40197cbbd8e8b99dae138be8c85f1498460c9f638ee03c0fe4809362b00b6520438d40831b11087644d7f177b516d00de9fb6e66c7c7cf412214ab2e8a569a0d1ff3325cabe0225aff9e70860fc189db5f2e7316f5dc45608e0fc80b252ef6fff7e91f7c95b0a84676b91b5055a808aec179bf6a1cb7572d0f936e0afbfda8493b4cf4f86f36f00e76f9438d5394623455b35c3e18b64ab35d7037cbfdbb32ba28b75faab00e5ff285176aa07a5b29434503142d5a4df1f348dfec844cb33310634d5234609a7e9c88e186d07f0b2c6d6ee4a471835421662db0a1400114ab4aa00c06af6580140588e9215007f0718a39418f921b8b3e558a8da1475aaf04c9eeddd6ba8f3168a02d72813fe975be7836572fc73b5185076fb68c78f01c6c69418b9000e6ca2787139ab0203c8257538e788bb7c4d07e14032d9feb2fb02984d28619a2dd3226c18910d748c023577d34ca0cc4d321ce7f6d8fcefc02b9b51a254d31bf9dbdcf4c6450061734a846ae49d7be324d1dca9154accf07e522acacb62b64e4c685479f7785b738dd3536f15006c0b4ab06a40236f6b6c684ee6970f82d6634b4a7c4d053edef0f18fa477cfd33a024f6b95890a25b5914817c3b2570194ad2951aa25d4f999cfb25ba8e05d06e0b5c94489c7d79f67fc287ab26187cea0c4db81129ff971b42eee1b3310e06c6b13ce714ee26c0970b6b309e76827713e0ccacaf636e1747393a82b01ce0e36e11ceb24ceaf01ce8e36e124dd7e9c0ce72b0067279b70929e0048867311c0d9d9269ca39cc4793ac0b9a34d3849d70291e1dc007076c9442f68d4d6e805910d66ac05f8ba66c21b535f4a4538a041869381c9866e36e1245db64f86b32fc0d9dd269ca39cc4b927c0d9c3269ca49b3993e12c03387b52e26c2e04947b85b53fdb4d3a6e4eb636a229a86a7a51e21acc12c7cde383a8fc153d2bc5df7c72ac56889c240073b3e6096a1988aa5c41057b0e80dd3b13cda291a20d99e1b175b2c1e128187eeb4389af270b1e6e0323268b19dfa0b4529c10e487b51489f5113542201956b2b0e9eec02bb328b1aa00023e453b99f1196d3eefbd4c841054393dcf7d0740d89712a159e4b98b7bbffd0c32793f4a949d198f98e4554b19530b9fb0b835c2a3c0c86af6e6c027fb53820c771aba8bfb0f17001f1d602b5ad2714d32b44f00af1d4889566dc9935a1cc72827772bfc05c01c64134c17c3629a834c3fd826982eae74fc097866b64d305ddcadf0670073884d305ddcadf01b0073279b60bab85be18f00e6509b60bab826f7bf00e6309b60bab85be19700e6709b60bad8676f019a46236c82e9e27eed6d00cc1c4a98e647d38d74f2cce97d01d05cdb80ba78e6f4420074a46d405d3c737a2e009a671b5017cf9c9e07808eb20da88b674ecf0740f36d03eae299d3fb00a0a36d03eae299d3b300d031b6017531867336003ad636a02e9e39bd17003ace36a02e9e393d07001d4f09348b85dd5d8bb0ce27db5dab0388a4db99de5f61b80d0fff52bb182df07e5821bee7d122ebd81a019b70469e2c4a84bb9102ba8b3dc324e39c9cdb3c1564fe5d6d82e9e2dce6e900e66e36c174716ef3440073779b60ba38b7793280b9874d305d9cdb3c16c0dcd326982ece6d1e0f6016d804d3c5b9cdc301cc0936c174716ef34800b3d026982ece6d6e023027da04d3c5b9cdb300cc4994303bb3e471f2beea63c4d65384e565132a908b41dfbc8812646f0dc8d46390099bef6411c82301dac9d419be48dce6831b0562fdbabf31e95c31c8a1ce602bf0089509a8ee0d790c613198532861f6d5f8a9bf9a887be22a364d2c275c93741cd4c5698f4600f0544ac066fb1ebad86fdf0ba09c4689d27cef3917a344c683ba7eba4d38499b4e6438fb019c336cc239da499ccf83cc3ed3269cf94ee2bc1fe09c6513ceb14ee26c0a327bb14d38c73889f343e09db36dc2e966fc6735c0b9974d384903bec9705e0270ceb109679e93384f0538e752e2e417eac825f78639da024cf32831b515af8e0d6e14897fe778fff2410dbe890a193cb22d537200bcf93665d9f14e46c66583e6ce029b70924ef392e16c0d70ee6d13ced14ee27c0464f67d6cc299ef24ceab00ce7d6dc239d6499cdf029cfbd984738c93385f053817da84d3cd98f71280737f9b70926e4e4186f30c80f3009b70e63989f33080f3404a9c3d25ce4a562a40720ebce7e39f3f09450737e1259c93249bf47d17b43f17516285c729f28367b9aafed9bd6a0bbf72a97eb998042e11f0dddd66b23d00bb9812eca080bf2e6189b11da9478110fa30d9f0c87e200aa48412b51ff655cd628b5f620b5e26b20a21b844def3874edc1b2e1900cad9259430d50eb3e3d8b67644ede7006169266afed4e23cf85a611783b76f052569994d3849576292e17c02e02ca7c4a9c21155c5542daa1a5e6a16c9ac5dae8df4240ff022dbc6b73ba8889652a235db5adac5b5449f032f5d4689b23b8bb54bd5e72cef71ce62a92778aaf72fafdbfdc3965d6e912e03d5d2f24c64fc86ed844cb8c095ac05fa2e405b4189561d1631966d4b6768750099fd204a7ce6bb2de439b98dda6a0074856d405d0c5458038056da06d4c56dd4ca01d095b60175711bb54a0074956d405ddc466d2500bada36a02e6ea3b60a005d631b5017d713ed0f801e6c1b5017b7513b0000adb20da88b93764b00d06adb80bab88d5a19005a4309b42d53a71266fc4c42b231a5352c06af96125e160bbb071da16f92ed41f75fe09b6bb7e6e867b1f79383bcbff8318fa4cb5befa442590a0692d76562ca23578cd3970841ba6139b727e4fe0732fe7a4a9c7c4e73dbdc0fb10f40b8211383c78965672ac3c784e526d9e0f14e20b31f428976008b9f90ab64f044d7f9cc0fc8d9203cd86f4895b3c9f2c7f1652a616fa9980a7304603e341363f423456843861b4f6405c031a0763f2c13b57b6ab3f02eeeac7428284b0fcf443b5465f8e56221d76c060fd2ddf6421a5f029e7a44261a4f583b340893342c9c0ce7a700e79136e1241d1221c3d90d54431b6dc2491a654f86330fe03cca269ca40bbec870ee05701e4d89b3bfc039d57b68a6f75099f755a536249cc7dcaf10e0f9a049a9f7b7ff8a22ef93ffa6cc41c81d40fd7f4c267c36f515c92ece2b8d0515d4b136e124dd5f9e0c676f80f3389b708e7612e7b320b31f6f13ce7c2771fe19e03cc1269c639dc4c940663fd1269c639cc4f91fe09d27d984d3cd83f72a01ce936dc239ca499c17009ca7d884d3cd78a69301ce533333a0bc2dcdc64740d5731a253e15cac05fbc5478a292bd4a3ee2203ce07ba7d38fc657b3d892d762ef930f27f335f115628cbe48f4cc6b84103294640b5ebb029467506763b8b9da2c56be0d6caf361ce0db44898f1f13119b4f5f2006db6ac52d5f4ca9e320070390675282ec9590a567b00a298e4ff956c9f56efe64af9fc5fd0139ae837b607b02b06765a2d993dacc255f8eede2618e77827afb6c9b70922e1d24c3f914c0790e75f959ff313baabb4806926cf1f55700e4b9b680747115fb2b00e479b680240cec2203d9134ca69d6f0b48c2594932903b029017d8029270912019c81900e485b680240cd02603391e80bcc816908483686420f701202fb60524613b920ce4de00e4665b4012466792815c0e405e620b48c24d28c8402e05202fa51fa34c753724170f037f0734c92fa344d98599f4b9473bd9e3de19c0bcdc269884f53719cc5d00cc2b6c82e9e2a996a301cc2b6d82e9e20e726300ccab6c82e962059407605e6d134c1777e0cc0730afb10926e1682519cc5c00f35a9b60128ea193c11c09605e67134cc2fe0f19cc0900e6f536c17471cd6421807903254cf39d64c63ab979d4b300e88db6017571f3a87f01a0375102e5f16c93c44eda5cc5a932cb57783fe69145a44158647b20f0b5560adecd5b73ac287e9f03c2d625d9de31bb8161b75b2851aa135d62db3cebb79098c7aac49ac86ab654085b493b2fbe850aece5c0476fa504db9f05f7e9f037e6896d9bcf05f2d0c1e435bd8bcdf9b6c07bff4409b9070b46c1c17db8b6ad08b8dec0736fa3841a3c3bcbf752bec30cafa8266a2738c6b07c5a5f6d42857501f0d5db335169a51a09e75eb69f0a3cf40e4a94baeda552afb608d192555b138097fe99122d9f48c4cfc352d1eeee959e7d816fde99c9d2b382f103c662873ce0ed54c2d293ac9d7a20f0cbbba8fb4b8bc4c0c7b6b31bd7b5c027efa66fe4c366125cc2b2edadc2c80760efc9c4a05d6a410b239d1c01ed02b2f8bd36c1747104b41f80799f4d305d8c01690d60de6f134c1763403a01980fd804d3c51890e600e68336c1743106a40580f9904d305d8c01690c603e6c134c1763409a00988fd804d3c541e3ff81a9b72d36c1747128ee0f00f32f9980094f5e9dca12b78074f9ccd51d01ccbf52f7d30bbc5b7c4ff7756ca69c31e253198562d0980be37d757e0e41a9801b1b5972f13c02be7842817d9412acf926cf840d25329c3f003f7dcc269ca4873192e1ec0d6af7c76dc239ca499c6301ce276cc299ef24ce4500e7df2871aa8dcbf83918dbce69d5e5a0ea793213f8f2b6297c3500dfdf29f175f22e667b17b522cdb8283e85b15c34845689b6650953d11dee616c0230fe8312631f166ba6fb911cfebeed05323886072216307ea0083cf9aacce966fbf100ee5399c8e27ce077dbd9daf168d09a7c3a13f575aa8131b94e8e62de01703e63134e3707859f04389fa5c4a9628d6201b2a91f64477a3c2d5918f75280f6395bd1920e1893a17d065449cf53379b92f58194a5a45147fcb03e128c0b41dfe7054a8c591a8c66670013ce5e929d01bc03c0fb4f7b0b00c2601ab202a009285bff4589b6af403b45f8e71c562ec2befc667e9910a5161e6c6bc732b50425ec8b76170d84f14b644543575034fc3b131518d68a2d140542156d05d68aaa027b0114032f5162f4a39161e4e7b6bcfb7636c8fc2f536285b39e6a38458d4dc546abdc1e3e190f60be4209b3970666fd1597bb60d701b0af5282ed20c18ef2febf52bebc4420ced0f03359efff6f00e16b9408cd166db918445b0a50be4e89b29f01cab9de3bb9901a56ecfda5c6f7ab696bfb3654b5fd3f416dff062562b54b835a7bb4464c8e2c4feab32e868a4d06add0372981b664f1a7bd4cf6feada09c69226b1a8d04d9fcad4c0c3fa77e5cad8b1baff40759fa6d9b708e7312673380f31d9b70926ea74686f32190d9dfb50967be9338af0038ff63134e3737adfa02e07ccf269c639cc4f912c0f9be4d3849972190e13c10e0fcc0269ca39cc4791ac0f9a14d38f39cc4b91ee0fc281338e1a09c3fe6be4a5cc7f6aecbc0501cd9745c27d0eefc38134371f1cb64aa3d31e5994148369a7936f0c84f3231148765ef8c553d64676d5480618d4fa9678562eb8ce00047a198bae01b50aef4beaf157341abc5b75522c3bbb8ca6828f0d0cfb6a687c60fbcb9b849c0f7a0bcfc3c53e5a53f60cc05ad97656506a62eba4588107e0abcf18b4cd4e0a987d5bab83bcd3dc023ff6b134e3737fb7911e0fc9212a78aefe019bcbcae2da96ebb3e3ff915c8e45f51624c8ca0d3ef833859fe20633bce1553a1dd05a0fd3ab3684d02bf09d192f5868683ccff8dad68499bf66468b700affd36130da7bc6d2ee6630a40f81d25c2d872aeadb062932c727302c0f77d66f0e5077a432e7bdf3a5036fe40894f8516a6d6cecc7332e6e85fc0177fb409a68b7df21701cc9f6c82e9e2c67d8f01983fdb04d3c5359aff04307fb109a68b1bf7fd15c0fcd526982e6edcf72880f99b4d305d8cc6bc0fc0fcdd26982e6edcf71700f37f36c1747134f3df00e61f36c17471ebf2b7004cbe710df1e850358bad592b120ff3bfe15ce55cb6466efec3fbe8b1d94af76628770268239468cd8f71249d15220b9399017aeb51db8012667e32a03301d046b60125ec6892012d02401bdb0694b0b34906740a00dac436a08483746440a702a04d6d034a38504706743a00dacc36a02e06c3ee0a8036b70da88ba75fef0e80b6b00d28e1a01d19d03d00d096b601251cb82303ba2700da8a1268160bbbbd0f6101403649fc09c0db9a126f0b068f19757759f5401603d68612989a551fb3358212c8c694da027fdb817e4c49979d53893922ec0f91451c8d038b09da52a255919c23ebc63ff9309cdab3c3f58dce3f0319bc1d35c66df7f0fa5e00637b4a8ce6db4fb838be390e949b1d6cc239ce499c7d01ce8e36e11ced24cee74066ef6413ce7c2771de097076b609e75827713606997d479b708e7112e77bc03bbbd8849374011619ced50067579b708e7212e7850067379b709206d490e13c05e0ec4e8913aeff55db4ff83d22fe0e97f74be808aa9f1e9408dbb2d84aa00cafc2201bd43818f85f4f4a786ab3d25ce177fcb0b1355eefbc5c0e6ef85b94960b81ea88dbd83164d54efbe72480b857264a4cacbc4c3c9395708e920ce74720bbf7b6092769ac31ddf10e6054b38f4d384977e7a2db1a05e0ccb20927e946916438a7019c7d6d6a6d8e7732a46b18283bfbd984739c9338bb039cfd6dc239da499cff000da50136e1243dcf9a0ce78d00e7409b708e7512e7af00e7209b708e7112e7db00e7609b70929ede4a86f3208033db269ca39cc4791ec039c4269ca4ebd6c9701e0370ee443d4457ec3d502ac2b9aae5f851112b11511ffc67ee457a7401f08652c21bc28287ddf061ba328f0787a7ec8ced28075f065f55e0fd5525c26e483744bb92ea74a172d0e91c4609bc334bbec835be5a220349b6fdee44e0b9c36d01e9e23ec6e300c811b680248c762703791b0099630b48c2751864208b01c85c5b40122e5b2503f92000399212a47f702d76e2c0563ab59aee1c0280358f126b6ea0d1548b46bde37bc91632be3bfc1af13b3f4132d484da44d5849a079a50a328f1ab7d42529d06218c11219b04f9000c33e7db049370df0532981f0298a36d82e9e2f4dcbf01cc3136c124ec2d91c17c19c01c6b134cc2f62919ccd700cc7136c124ec3591c17c1dc01c6f134cc2063f19cc3700cc9d6d824938b04c06f32d0073179b6012ee4f4306f36d0073579b6012ee4d4306f33d0073374a98bd586260f714b1974291d80480632cf3ec5d2d04f34865b78fc73b89c5c0ee4e3f6032c37ba054c424c3b5c45b6dc0846ca38a6600eb1e9998f1c406f4a038f29d94c8f661b81e64ff3d6dc2491af44db7892fc0594089d3ecc4411737e4ff0ca09c90891d421a76dc938b3b843c0dd016da8a9634be890cedcba07a9a9889b6696ae5e958274f8b3918f8e9249b60ba785a4c15805964134c172ba78300ccc936c174f1b4981500e6149b60ba785acc720073aa4d305d3c2da602c09c66134c17fb46a500e6749b60ba785acc320073864d305d3c2d66038039d326982e9e1673288039cbae9d8fdddc54ed4f0068b16d405d3cd2e4760074b66d405d3cd2e43a00742fdb80bab80ee90600748e6d405d3cd2e4260074ae6d405d3cd2e41600749e6d405d3cd2e4320074be6d405d3cd2e40a0074816d405d3cd2e42a00746fdb80ba78a4c93500e83e761f6942e8af6491225f00bcfb52e2edc862914d6b45e412df1c70898868cad029087752413c87c520ee4709b13f0b9efd5ae03d58e9fd605ddcd9af8562bd3c5f23bf129cfc5a28268dd70aa5dd0b151b06202fa484dc377441401a96435614cc05cbbcf6cf4494130c72c422f3c8431bc97016007f3d2013671fe589336632bc972dd908e973a0623ad0deb38f08333a59f8cd3700eda24cc4dfa53692efe2dce72c90c917672230bc21416284c3cf643efa00005b622b58c2891232b07701b04b6c054b58149081ad02604b6d054bd84525033b0f802db3152ce1e01f19d8d9006cb9ad605d6c60ed0ec02eb5152ce1840a19d89b00d865b682259cfa23037b3500bbdc56b02e2e75381180adb0152c61380519d81300d8833231bc329a6d85a3a5c9f0dd0cf0adb0670cc0c5c0c84300ca4a9b4e09213de28f6c9c3f0a86a157da8493f44c3a329cd900e72a9b70929e984886b300e05c6d134ed2c37bc9702e0338d76ccd5d4a8243d12eae049d03601e6c134c1757821e046056d904d3c595a0d301cc6a9b60bab8127416805963134c175782160298b536c1747136742280b9d626982eae04dd1dc05c67134c175782ee2160366b12105e9420bc5034aa79b3ba94c54e2c1ec12633be97b77fa671a9773d430cb2d5b0c51e8e85deffcc52e000ef7fbaef23e2cc9b496c3d5b23bee5f2ca84ec95de5dae5935cb1dea3db29e3b4457e910d9629085c7f9f188bf39ac5cbc7d039bcbfc13998bd9aabaede36a0592ec08df527db6f71d8f132c176fe01185cb5995b038fec4e6ec4873c1a95cc40e72bb38c06ca9abda767eaa1cdea9f06c2e61fef93cd902f76cd955c98eb401572af873aa189cac165af51276a888c69922d0ae46bcb350685223f4ab04d1620bea46e4aaa5fcc413837c392ba4c6c94f14ca166714c018b4fa9ee7ec9537281ff1cf62873ee49f83ed73eb147843f2a73b08caabea782df09ea810d19f3304a535c23a6e3d3fd6207677a2d4a984f9b1a2b358b918afcc16239af87345f2a916714f4d16feb34af2897dbf40a447adc8e7353277ccf19ee511a7b5422b9e818b042bfe3c8c529d2b74e736737b6371aad9a244696864ab6f1ffc8db23c5eafb681a78a34cfb40c3c13a3b063e04efd1c786e9de2dde5f96339ab119b38c638160a42dc0b2a41cee3455644a4abcaa133857c2ed77ff3bc3abfc8e101b291312275f8c0ff88ba21ff11f24c8295f24a7d5fbf4c5e462597b6811744117dcd5499b6d2b53e8bfc0a81ff7ea9c89be542ead47a2daddf3ebca46e9d24557286f3b4d896ed3f84a77b5b99eed19c11dcde9169f0bdfa353a94bf394ad416f2672b6080bdd10174f6a5f86c5163ae114f7235c3787c4b516f417915e2bd3939767a7bfa6c3f0c9672d19cdc867abbb94687537abb2fcd9f2f0ec89e9c8275fa7408da1c7b6a8d6cf7295ff0f3fe72c68f25ac9f442f91397169bcbdb04cd85a21a4ae64ea3f5e8bf29e142fa48ea0e4d933a1f448bd21b9bd24e17d1b5e921c1997d9727966dbb83d17a435171c45c9b357422e30e91e6dcf072a1f1c9d980f8ed99e0fd29a0f8ea5e4d923696db03d0fa492078e4bcc03c76fcf0369cd032750f2ec9690075219cadaeeffcaff4f4cf4ff93b6fb7f5afdff644a9e5d13fcbffe01daeddeafbcff9444ef3f75bbf7a7d5fb4fa3e4d9c5c0fb8bb6fb7e9cef9f9ee8fb676cf7fdb4fafe264a9eed92f8be9a46daeeedcadbcf4cf4f6b3b67b7b5abdfdeccc8e7ca63e45bc3d17a85c704e622e38777b2e486b2e388f9267ef845c6016f8b03d27a89c707e624eb8607b4e486b4eb8909227d94675ff8ff3c4458979e2e2ed7922ad796273667bc3f505a96df77de5fb9724fafea5db7d3fadbe7f5966e3aa92875e6ef77ce5f997277afe15db3d3fad9e7f2525cff6493d7ffb4850d0dfaf4af4f7abb7fb7b5afdfd9acc46ff9884c96fcf072a1f5c9b980faedb9e0fd2940ff8ffba445a79d7f3bddffab1e7e5acd87bbe4cc85b5c1e654dfe0f8a0a6aa6283a0500 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/d7af48bb7087228448a645c0f71cb27f.asset.meta b/Assets/SerializedUdonPrograms/d7af48bb7087228448a645c0f71cb27f.asset.meta new file mode 100644 index 0000000..50f571e --- /dev/null +++ b/Assets/SerializedUdonPrograms/d7af48bb7087228448a645c0f71cb27f.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a31789e63c84c8448917078903d99942 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/d99cf00050db1bf4da77939e479c824f.asset b/Assets/SerializedUdonPrograms/d99cf00050db1bf4da77939e479c824f.asset new file mode 100644 index 0000000..3987822 --- /dev/null +++ b/Assets/SerializedUdonPrograms/d99cf00050db1bf4da77939e479c824f.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: d99cf00050db1bf4da77939e479c824f + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c15c7d6c0e706772f502c78d08410b4b425c55b2829042ad0424802a424248d50a85277777777777777376aeff5d55fdb577bedebb7333b933d77ef9c7befdebde732c3d7f0239bb5b3e7fce78c5b562e737e22239d5f8bd902368d8d668b5819ab666b9dbfa639c72ae79f7ba6ae17b15ae7b8caf95de2dc1bc9b213bcc97f86467a38bfe7386775acde79b381953ac70a717f212b77fe9ee3bc5bee9cf1ab2b9dffe5ce5391a6ce4b8bd874369fedccba47ba2510b158bc5427af45b85d9196ceef1dd806e76eb9508a7f2457dceaeefc5ae8dca913f7aa1ca5d5734bd89ec2ac2ae75ea9f34e2dab7464ae10125b5e3f95893f987be82b8ffde4b18ff3bf95fcbb89fcbba5fc1b3edf4c1eb3937cbe3f78af15f89b13ba38cefb03dc6364ba736cee1cff01cef9bb5fcbe706baf2b256c79135581e87c8e35029f39f49e8df421e7312d81b4fc630202b19662de571843c0e97fa7e91e2f747b98c22e703799ce50ca0cf08f0ed56e03ebf363284ed2a1c67fac271a61b8e5967cbf0fb4c3e3f5a1ef3e43157ca769ee9f987bc36461e0725d02bdf7d8f4d649ecf3adf6c5223cfc7ca63813c8e93bacd96bafe0b9c87d54585e978297396fcc6979aebea797eff2b793e411e952d2abc26c9e7547c989ca43ec9f89fd2698efcc637e0dce1d874791c592adc77f485fb8ef2dd935d8e4deff6d903fc4f2b771b29efdb14ecd8c967c74eae2ecd72a29f4ba883923f45ca992be57e07ceb9dcd303dad654be77bb3cdf96254edb942edbcbe376f2389535faeaf88df25aa1d46fbed4f77b70ceef4f03ef28dd7790cfecece92efe76f46caec2bf27f20c3fce03d7e6c9f7543ad41b5ce7fafc3bfab91667b3689fee0df8f590c7e9f29d0552c60fe09ccb503acef0bd37d3b3b5b74a573bc9a38a8363a4cc1f7df755faf0539c70f1cb9a9ca4acae52ef9b5ddd5a3c1ee71b73a4ad45bef02c4a109e8efc96921bdb511e7792c7b92c3a5df94f9cefcf93dfdbc5f7fd5d92f8be8cff2d2f8f233fc9306ea5ec953ec7e647bf1fd98345a7e77b24e1034a26e603ca66156ebde47181fcc64279ff6770ce75958cd842792c26d045c752e9d74dea532cdff9059cf3e32279fd5770cedf93c7c86279ff3770eed8d55ad9b5581e778dfe9efa7e6358fc4e1816f1ecdf4a7e77579ffd52dfc86e3efb77f3d9bfbbcffedd5dfbdb28fbd5f3bb477f6fb3dbef9785a547c9c85279ce1257df0e1de5f9529745db4af77a5b15e75519690f163fff536586252cbaccb044ca7d5cca55659d3dddf388cabf73801cfefe7f7d7297fae44a7ddb4d014c92d1732f795c2e8fa5f2b8c20bc3098ac932792c91dfdc9345a7457bc609ff64b9c50ba332165d861824bfbb570299eafd72796c95e4f3ea999521745e258fad93fc666b795c1de29b6d5c5fe8a0cafaca1796269059e1f26dff3cd081cb795d9eef2d8f6be4b152f22ff1f94149127e9048972aa98b4a8356baba745461bf561eaba37561353e9d7e4f9f4e91652cba6c20e34364b9bcfe0738e7ba5eed7ea7932c1bb27de4b1d6a7731d9dceacde7daf4b19f08d64de8be75f0dae7d9d8e96f65d2fafaff3e9b6cad3bbfdf9e05da54732f161bd6451ea635ceaead059b1dde07bee4f70ce8f2bbcef89bff9bbcab70680ebfcddff81737e7fdf2475dd9fc5fa2c97530ebe5d2ebf2dd3ffce2a3c0f60b1714ff72e3f96816b65aebc2eaade7f208bcdc7d473b05ea2fc61bf246d3b48a31fffeed971de3d9845a73fca162e47e56f1ba53e2b5974dc92ec447b937c27a2e2cb21ee7937a5cba1f21de56fea6f47bfae523e3b4c1e8f62fa7cf608c041c64776a4f7ed81aa0de7f038dfba5f3e73b4cfee064f4ea71aa9bb4ac78e61d171c6ff2cbf76ac3c9e288fa7c8e3c9deb3135559e804793c49eab69a45a5cdec78709d1f2be4fdbfc0397fee384f76ef6c79ed549faebaf03ccd67bb2e0d88e767a7bbcff655ed0667b86cb7eaea937b288befb767ba72264f95e76749394b03ca916d7adba8f874ae7bde5de9738e3c9e278fd2c6c8de2c2a2d6717c8eb6b80dfec0dae39cf66311fdf44bac5e37891ab6763bbd1c5f278893c82f450b4974764fcf297f92e04f7f87909b017da174f974be5b15d027bfa82e7f8f1b210f6c7bbd75c1eaf94b655b1e8b6b42ad7577ad4c7917515d3fa694f993e3099f7777f599e5f036ce2df58ebb16ef4a56be5bd6a60b7f4ab480db87685bcb68f772da2ca43d7f9c2e747dffdeb810cddfd1b800ebafb3732af4ec5db8e37c9eb37f96c39cfa76b0d8b4a67d8cdb1b6466aa2bf9d15091096b7c8776b7d6159eb86cbd653e3c8ba551f96bd549a7a9b2f2cd5732a2ceb34617987bc570fc22d575e6b60b1e1bb0e7050f9cf9d4858aafb7701b9bafb77031d74f7ef890ecb5eca37ee45c212ea0fc3f2be585b230dd1dfceca4a222c1f9047958feacabd0fcaa36c3fc84a262d78481e8f8b2377804f6ed324e43e228f0fc791fb28a26f2adf53beaefa00f665d1bececf1d397d46c691f518d3fa7a5fd56e20cba58dbefe048bf6f5f52cd6d79f94f73678e12f58f06bb07ca97c7d7fe027b27ccf9e02cf405f55f79f067275f79f013ae8ee3fcba27cbdaf2ab73ec7f4be0ef587befe7cacade219f0edc67c3c5e58bee0e3acf81ec0a2eb3907b8e1d3cf5ffe3983c5cf1b5f74e56fa3da645f92f20e943a3603e7fc7890efbb07c9efcaf6af6c95ffb795d70f97d755dbfbcb4c5bdeea77bdefb957587479ea351f7fd5d6a07c65a3e76f8db6bc0aee41db0e61d1659237e475508e12cfa86bba325722ae6fcae35b3e7e074b79cdc1397fee1da0ffc9f2dadbf278a977affbc5bef06d0bf47857ef2b4257106681cb48cae6f712d81c244d3a8c45a74987b97ed0ffe138b23e92cf7c16e7998fe5f11379dc24e51fcea2eb2faafcf5a93c3fc277ff0879ff618f7deff5400f259b87658b38fa28fb3f9747d90ecba40d912359749bd891cc4b57fc7944aae5d854ef490691a358749c3fca0d87811b59b42f1e9ec03fd4d813658fb43572b48f81aa17c76bcf4af4ad3876458e65d16d08aadeacbe7f8c0c5759278a1cef7b5ed68d991cc71039cef7fc89bee7557d5c8e6b889c10fdbc1ad71351e58e6f3cdb22aadeff2db8a6eaeedf797c86c87241e4a4e86fb3ef5974fd4ed5e14e963ab402ef4106eabe6c678e9ce2b3e95479bf0d38e7c7d37c72551bc497befb4aeee93e7d65bb13537d313f7a366efb2b7807f0643f44cb8cebd32abd916962565b70ee301c32358e0cf5ee99f2789694d10e9c7319eb65981c8fcb8a9cede37726b8ce8fe7c8fbedc13997bd298e7e727c48e45c9f6de7baef0eed9dc4bb2a3f3ddf67dbf95246b16bdbd078e33354fff9cfbe30543ecbe55da809d70b4178f2f30b5874dff705ae0ebc09493cf70bd3fbf679d1ef6775887e7f98e4c2e477d96f3edd2e62d16d61aa4f4de59f1a9f647ffa74bfd87ba651bfdf7dfa5decd3fb12a96f47a087bace8f97b2e83c4ab597a876e8cb7cf755feaf1bc3152f8ec87ed1c8e5521f78cef9ede6ca1aa6ca29ea7b2a5c92ccbb2211795475be2bbcf77ac876d44813f77c44112e2746ef2b7c7a5fe1ea3dbca32b6bb8ecef8aa834b35940bd55d94de5fb3abd5bbae7a3b203e87da54fef2ba5de4f4b06926f44a5ad2abd4b566f95d628ffd7e9dd4eeabd1497d3988f5e25f5ed0ccef951a55957b3e834ec6ad79e91ca0e152f55195f67471ac7274514d76b58745ea6dadca679dff78fdd1939d7bd3e52b6394494cd5d32a37b63b9078e0753d77a7ad722b27e1451635eb692b29318f72b4659c3777b0478b7a7efddad7def2af66a4c0a321623d23b0916ea9b2addbcd6179ed7260ecfd13971e4ab7ebeeb58f4d889ebe4bb32fd1bbd515ebfc1f7fd1b801c7edd3f26e37a9fdceba55c39fe6db42a67abf4a10708df7ee05a90b88fe818c976af67493f8edce87bee4629538667565770ceeff797e7bde47d35f649d509a06f0e6051e3322203e5b79218d71a5163386ef2e97753e2b0ceeb1a47bed2b3aba7a71acf26c671f9af6d05ae4906ac3bb8a6da2f60980df6d93d24daeec8cd3e9b6ef63155e3a9e2e521720c659e6cb71ad3127f27324c1e6ff17df796c42cc72c8fa38bf2ef5b59b47fdf2adf95e31fc7a8f6e6bb7cdfbf0bc881f146c394a9b44a8debbf4dbef3333877be99aff2b511d1ef3195b6a9329e8e538eef5bb7cb777e01e7fc7887bcfe2b38e7efa9f17377cafbbf8173ae9b6cc38a8cf47d27c7a7639cbeb3c850e0ab307ec68b4ba3e4f16e1f7f352e3d4ef88f95e5ffb171caff917b7c72ef615edc813afac7badecba2cbfbf7badf2c506138daf75ebc3cd7d0f18311d537729f8fd17d89d917bc1f87f9fd3e79aa6f04cb831e60d171f401f71be30adc6f8f936394238abd4a67e2306fccdb11e649e5edaa4c934a7aacae25488fb5e5a6312c3a8dce67d169f4833ebeb27f2992cda2f2cfc06d6dd3a49c8758741bdb436e788c7f5dff5c567770ae7c24687b981cb71479d8f7ed87dd6f4f98ea3299a0e2ba625912ff5b91029ffc47a4ce3dc039bfaf19971251f3912646cb886a435063561ef5de6fac87abb46382776f7b257b2c788f1fd5dc971296309dd55e93f5dfc8633e7e8fb9fc266e94b65dede3775282b052e9e1e3e039f5ad27bc6b9149f2f824b8f604b8c68f4f49f63dc1b9a3dbe4a63eb94fcbe7b606dfe6c767e4f55ee09cbf27f3d388ea2ffbc227ef79a0d3b3ee3727a9befcc9be6f3cc7bc760b87d72435ff633ab8df0ae8a9ae2919a0cd437d9fa9f6cbde320cee8ffe66c230d0f9f50b2c3a0d78411e5ff485ff8b92b10cffc92afc55ba7356fc6f37cadd461e5f62d1edcbaa1f6b0a90c7eff70968cfcb3e7b5ef67d770a4bd8ae1ad956de7b29384fd1e7c565c8f95b9157e5f7fa82737e7c0584bf9cf315790d5c7b451e5f97efab3a92f2d137c0b36f8067f9f14d16dd0ff5a61b76dbdeef93adde7b4b7e231b9cf3e354797c5bdeef2fcf551c7d07e8f036b8c68fefca770680734787290fbbfeb3ede9c8b7de93ef0d04e7f09befcbfb83c039b76db6eff90fe47383c1b9620ce50cf1c9f1ebf521b0f14319066f27f075c9b5b15ff00d191e5fbab64f691a6d532279da6baa8fbf501e3ff27153fd793fa420dbd7861778ee5b3232d3397f258ded3011393f37b28945f7376c72fd63fb8be5bb2a1d1f9fc017943c35ff5295793e96f28782737efc8445c5f788eaf355f1fe53169537897347afa9353e399ff9e4a8fe65e5939fcbfb39bef73e0776f1fbbc5eedf8ecd4c37df624b03bfa5ab38868979ecdca9d72490dcb158de35c72b24b3ea837132ff6c0453717231b185ff5817fb69e6d705e2dd7adb8b048ace750cfc6b27ced8a0b3d45bbb2fafa34f1bbc479a242081d9e15f3897b623ec195ab74fe9583e522ea9cebb3c46a137cc1880ae7ce6836d739f2b7963b59ea12e75fb494c5ce672b59837356ecfcae11f2963b6ac73e99c824beb484ff9d058e4c77e58b2ae78a025ae39c570a0d178adfeb84a6e542fb39ceb57ab10ec75ab6ca29a857b3f5e26bb1b6d73a7febbe592c91e975d42f80815d7797d950c134ddb1866b9f2b7cf1ef10d91c21c2d1371f2ee361d35c91e31d1b13127f33741319de593747ca18239045a2aee5b35cd19fb7208660701b632dd4fbb7cb7b3c2b886b8b9e0c0fee5ec2022f847b753bb47a55cea28f9b459b3696e58aaec7de094c8b0796cbcb11bd42414c68d6ac691e57d48f3fa2c32fba45176610bffb5c85782e78003417995f74008825498a9d54ad08649e8b9ddfae728b8419954249bf59c542f97aa98e773ecf11ee7ebcd679a75cc8a970cce5778b1c59258e72fcde6c717d155bed3c3bcdf95d22e494b3185fc8e38ab710c1199b592742820568962e4045bdb378b3c4276c79a7f841dab2d10a2f48734509ac471cc7c7be258a664d64f94c45cdaf6e3f2eefd7a96baaefbf63fedae253befcac993e7c5a8bf049e5ab580835d18550eb4c47b9c4794cbcf069d36897173efc47cfb02de2e38974c00836d5116c93691fe7f7aa85141ec38333e4033546f8932d3dc0f6881326560143d84c83308f23eca0d18a356be5d38a2b84486eae0b9cb69b27434fcdb9f96896ee3e04cd50e7ee14373f0eeada2d74f4c410bee5a4f4543d73a153a1d8c9b9c7b3ba725168e5d761f65628bee0d54da3df884f968fb919e527aba5da45501d046acd6135c388b7d410cfe3feda55e306228df347864e7864688545b36e61a3596b4cf2566125b7c124770f2bb92d26b94758c9ed74d1468c5a5b9a9168e335cfa8bf7670dee565bf75a2cedde0bcaf6bce891f5d7a261d5db616d1259be91a998269844593f6bab0e3177be994f407ddd678d075c004f70e29b823e66d7dc27a5b274ce5be2155ee8c09ee175270172c91cb4e4322d71503dd3f2ce86eba682d1c26b3b553b71ac6e5042f4df03ea17e4917950732ac3a185f072cda6ea50b1b4e7010a6963f7806e2c1d31d133e380dc27be884f3e211efc48aa9ee6ba5b7c0a5f7c47c7668589fdd1a8392930628bd30e1c3d220bc37c6647858267db0e467441a929fbe3ae1bc783492c55652ff727e6284b7c585f7c3341fa5d1fcd0aaac409a6763c0478705de1f939c1b56f2008de45c91d51ec2325bd2d2779ecd12eba497b3f94ea2b837737b3dd477ab458f07d748f59ef076bc95420b7ebd5426aef1bf153fb9cf6be4035aae448161064bbe0b90de0adef29e25b21c3e502e470ccd5ce45c773bfb668810a8105f1aadd5867f017b5eb198c7f812f00d22b49b21ed6b63c5d7cd628365a603b194a64093d2bcad4bc6e2a43483b0283b2e6c941dac93cca3ec788dafe6715fe5fddead457132e63b63f1ef0cd1250da248bbdf664d1adc96182e6fa5e8cf76e5edccf82e06fb0a575de338f03ae938c5ce33b5a2c1be3e7462c0c740f6d115551856fe9b24a2c3764944074aabb0083054e749bc94c507a1c494c978096e012b72242f13d1701f7199537243b7423c5ac1f6738eaa6b3a48192e47a70d6f09e0c3df12d696bae082876182a784143c1c8be3db868de3237492796ac35d296c096b24a6f6f661d51e85a5a8533529ea1f916029ea684c78a146f8fd59c184e762516187647c248e57e76182a7e9e2d8607183b7fe673bffab9d3778ddb044c4fe6c91197aa941b613d72b9cbf78863d123c5fed3ce10e0509a2e718cc29a687758a7c2cdc6668c2eda780e13616133e53237c769360c20bb0b09ba50b3b4e90e71bbc58b25ae66dd1a961b61894932dc661358856ec32117275225cb3d9fe8eb71ce81ceb9da7b3453e5029ee658b4d7d6a455a1b244cc761facfd6e9df1ae85f04340cf2c5f1ba2fb615a7b1e9562460ba3541279c177c766448c1876f2810bce03311c3365787ad8ff0e4f5a2e4da209e5f281ca0bcb1ac5c96a60c729246af5cd114b8966dce0219af2df0516b75e26faf88c2bfed8d780853f0e29b3cf80b5eea475ff0e2db30e488494399d01e2b604dc612d5f99a4435122451dd068b0b45585cd825a5b83045e773a285b866b3fa1c1ea31608d93ce6852ff0f32eee26fedabf68c52e48c2b3d2a5e308b1b0459dd8b4cd2557c71353de19b902eccee6c21751421f27168a389149cdb178b12d966b176b72eddb9b05cbb5b7d3b9ac6838afddac2e3b5d48c884db2ed2b9ad68dd1f9f44e0a753cf7e6270739d4854cb64a2ea26ddfdc4ea27b50c0ebc83f74788954f787969a6e05d25c873fb4a44bd1773f2c5c2c9336d27e6e8db638ebeabc6d17f0ae8e85375c2b9a3efa609ffbcee023a6170f8355f8c6b5e8861d95d8325a779302c3b6099ee1e9a4c37504d669a4e32e7c2378709d390305d279827fa7cb843e8ceb11918ed3d35b4bbb608467b26a6fa5ec93089a3f52c4cf0321d93cee2c632a702b5cc9753f2ab35a20acddb998368301bd360b94e832e408362e6368ccd912dea5e0213b44235070bbb124dd8fd1a30ec76d409e785c8150c294496b2540a913b6120cb7420b31913d359ea9d64629d48914b7cc3b079caadc68995394ff1c4cc4dafdd2e836088e7eab4e39db0e54cd7099b5d18a413761e167e2b35e1b7be65b0f0db1913be4a23bc47ab60c2e76381b65a1768bc033e7a147d9968b670f38a6ce73af77fb76e35b9b1a92348301561fa54c44b0fc6a4313dd805d3606f9d069d34e9812a5e560af70e9a162cc01c758dd651838d165888f952a5c6972e0fe84bc518b92a1d393e2a82b7a8d430b737d0f5a5d52001c866fb8a61a05ea3a7db841684e6228ce65a0dcdeace874d0e42733146b35a47b375309abb62346b74348bb431339aa61b1baba2626cf413a560e64bb6f35fb593b88dd065bee6ea7af13c7f2e7e28eeef587360c058b81b86761f1dda36c1d0ee8ea1add5a19d9322dac5ce5fa59ab1ce9987b987ce5e5e56e65b4d842a2b2fc182a95e134cc56d8305d3524ced86b06aef89a9bd4ea3f6eb01d5de0b13beafce75db0513be0c73ddf53ad7e5c313547743a9afc3698588e3aa1ba94c5cd9e0fcae74ae950a11d9220f53ce1bc4e1966308366810ac0e88a00443c0072c84a98bacd0096ecfdc9de3c20ce42dd509e625f003185202e7fb16042f819761d80fd260ff3520f6722c361e1c3636aec4246f0c2b791526f990b0925763920f0d2bb9020bc4c33481b85b876081b83726fc708df0eb030a5f8345cc237469d360c6fbf4bd12bbdb0be3758f96387e512f529e6c5141ac149926ec66e55da715b2ef2d483cafc4f43c52a7a7bbbc062f872e94955437639eefd81be4ab5518faa334e83f0b887e2d26fc688df0a91d8309afc6781da3e3d52341b89689592cded531016b88359836c7eab4e1a75eb805f9ce3e18d2e334487f0a88b41633e2789d11bc9aebe2e395ea9dc5b88112b934c83a918d07c758876970824e039eb2cd6d2c1814a5582ca8c7909ea8413ab25330a40d588a7c52d814791da6f6c9ba4433a0dafb626a9f1256edf53ac9bcd4712a434a1d7c9790e0a58e0dd8774ec7be73464adfd90f2375665852fb63017c962680cfee1c2c800fc0849fad11fe7a40e10762c2cfd108efdd2598f08330e1e76a84d707147e3026fc3c8df0fb030adf88093f5f23fcfb80c20fc1845fa011cee7d905117e28e6e4178675f2c330b52fd2a85d1950edc331b52f0eabf6111ac9b9629a59266713fa2751049b4d78094b764a30df5b46379330d1f7b19ee92375e1c273e8cb742a05c8ca8fc2bce9728d374d09e84d4763c2afd008bf3da0f06330e1576a846f0a28fc584cf8551ae1abbb05137e1c169857870ccce331c17c8b9698b2e048e19dd5228ef1e27cb968af5c2bfe5a2b561e2c178df625c2f7fd8df7d98c2fa3962dbdb756fa74a5e3eda39dab41b43e01d3fa5a9dd67c0027ef51f4cacd6e55d2ad86e8a62765b3a1b2d43d34905e27623e709dc607da06f4819330a3af0fe90327ebd25931e1b682349dc5a6a3158bae3bbeece14ae129558127afc54f936f483a4dbe51a4c97cd2039dae58fa7d8a2eb879d9fa268694adf96adfadb9ca81cad6a7eabec37df6168dcf1e1fd0674fc384dfaa117e7340e1a763c26fd3087f3fa0f03374c279b186ef4112aa587326a6f61d1ab5076d154cedb330b5ef0cabf6d998da7769d4ae0ca8f63958da76b72e41e78d09c9348a648b48d92032289ec5143177e92d77ca458973b54c4cc6582dce8b44d4e42d8b2b4406e0ae46b84c347eac12fda2b5ce553579630373d764c916c531776dd66c911494c96ebd35e24a9d78aa1c7c479fe154c88c136651415b37cfc582e81e4d101d103088cec382e8de90d9cff998e0fb7461cf0745173b273551e112e47b176009ebfd58c2cab76a09de68712166d7833abb78302d696c2975fd77cf80c5a28bb0f07f4897b2740f16fe1763c21fd6085f1a50f82558983c8285c9a32985c9a5baeff044efb1649c384e3fdf6598e0c7430abe1cf3a2274246bb2b30c14f86147ca54e300f7bbe138a7f8a181710648ad85598173eadf1c2c37b04f3c2ab31e1cf68845f1e50f83598f06735c29f0e28fc5a2cfe3c87c59fe7538a3fd7614ef3822e4de3d388d418bd4a915aab3cb6c2a906a43e4eef7a4c8b17755a7469d4828fd4e3392fef9b7247b5a7aec30d980e2fe97450a315c73aff4b456588bfb3def99dba0637621abcacd3a025080b3e6a99978c827ced26ddd7b8fbbea271dfd37b0673df9b31f77d1573dfd75272df5bb0a4e9754dd2d42460d2742b46e80d0da1a2ad8311ba0d13fea646784d40e1b763c2dfd2856d40e1776061fb3616b6efa414b67762d1e1dd7849537e9a93a6bb302dde8b9f348d4963d27437a6c3fbf192a68234264df7601a7c902869da557c2fd8b4e97b31f7fd50e3becb7b0573dffb30f7fd0873df4d29b9effd18b28f59b8e2d803189d4f3474be0e48e7418ccea7189dcf52a2f31066c4e71a23a6f70e66c4c318fa7f8444ff08a6f53f355a9f1f50eb4731f45f60e8ff9512fac73023bed41831a54f30231ec7847fa511be34a0f02730e15f6b846f0c28fc490cff3718fe6f53c2ff14e69cdfb138d9dad834676b4f635a7cafd3c2cbd6f2d398ad3d83e9f06f9d0e2a5b1b97c66ced594c831f741ab4625eb63643747855076ca97a4ef73deec03f6a1c786edf600efc3ce6c03f610efc9f941cf805cc889f35463c1ed0881731e1bf68840fea174cf84b5870f3ad6fc3e40b2f635affa6d1faf4805abf8209ff5d23fcfe80c25fc590fc571703f840c3f8edf4b12db9e1daecdd7653b35be95fc302e80f4d003d1f30805ec784ffa911fe7d40e16f6049c6ffb024e3af94928c373123f8d4f81842d9c18c780b131ed108bf39a0f0b775c279337056245c33f03b1ac1b962e9eacdd3471fbb806b7afbe89be87869fbe89b4612f5d187d715eba37f17f3a5661a5ffa3ea02fbda713cebb729b474276e5be8f496e1156f20758fed03219ff8f93687ea8f37fb1bafacacde2ff6196568eeff9ad92f6fcd6c2f387c7f1fc700b40eb43e223cc79da84759e4d98f3b40de93c1f63d1b49d269ace1e102c9a7e8269dd3ea22912f1b5c50a4575a85c4c4bd14d68ca16c5a5ec8063cf3ec5f4e8a0d3c3b91650fe6798fc8e2143e7732c743a6942e7e180a1f30f4cebce58e8f038b25a16115578c0e9f0a98d0cfc276664178d918f0f0c66e41798915d7546bad35add71061521d758f817f6e56eba2ff33ab93baa26b7719bafdcc6b535e73b11a28c051dcdf125a6c1563a0dba6b3598cbdc9d4267ca3681f214e78d7d85e9d25da74baf247589dd072a884e5f638ed743e3789f0d0ae678df6006f70c99267c8b09de3aa4e0ef30c1bd420afe1ee3dc5bc3b9e9e0609cff8d09efa311fe7440e13f6048fa8644f2a34eb0d81d2b6465e8279d605e0fcd8e20f5d0fe9154eaa1ffc1b00fd060bf786830ec3f63460cc48c18949211bf60460cd618b129a011bf62c2876884b71d164cf86f98630ed525a77cd19cd8b55abc843c870d1319de5af93b7a1642b63873b31f5e52ae117754925b276629648b84d99b06ee362af109cd35be9281fa0e6f4c72b3d8958dc979b648cccb020eedfb1d6391a363c1d705874b56bba54c2f83f5a664ef2b34ac6470d0ec6ae62ebd944842bef374d0991bffc51c6698c66196e60473983fb028351c8b5223528a527f62468cd418b131a011ffd309e74447e9429a4f89d737912e918dab7ce60baf5db82b9dc60bd39cb8778789e1a86eb3aae7d7d131a05a78866a428dbe572ffcaa5e138b56080dab4103ac2bbb5ad64e83f8d75f58d08cd604cd01011324164182265717347cad89256c8a48682a8579dbb2814eb4f3fe6dd7b8d8acb7bffd14a70ce8bdb19d801e2b65a2f376011b27a5143377f539774a934e827ac2dd86a68245af5839592658ebe435b785dd7d23bbb1f7ac56c8ac0c5c428fe8a8f120c9d304c9ed0183240b0b9231ba2059684d900401dc04039cafab5b0604dc14133e5623bc607830e1cdb0d02bd0855eb991a1e7b636d246a1e658208cd3044265c040688105c2785d20cc35381082206d89219da0cb2802226d85099fa811fe7540e1adb1f09aa40baf0a23c36b9a2cb2f06fd610479e3658604cd604c6a011c102a32d1618dbe802a3c882c00882b61d86768a2e730888b6bd4e387f7edb48ec60ed2ca6111e67b076074cf3ed748592809a77c49c627b9d53f05566f93680aaa979bd1c5fe05639f359f45a8c75a010ae62882a320709ba4e1880a9baa01b190c40674c78a146784d40e15d30ba3be8e8f2c9ffd191219a271f05d22039baeb6256c916d8a0e94c579d5ebcf6390dab7d4e4fa9f6d94df71ddeb43e2312671325ff0726e11fd80a033c5307b89d705f9e62cd03e054993608c0ee18c05918c0d92901ec81d9372779fb944b05b1af2766df8e987d3ba564dfd6987d7375f675d4dae7e5090d01f3845ed8d7e7e9beae8669e6a77119f7de98063beb34d02fe3aeace78972d05cb10f96facdd7a47e4d47074bfdfa62c615e98ce30bb6cc8cea5a567987b76c859b0a7a9b4ad689dca4a6f1d974ac0adc0f43b28b06c917019164eb84f385de174474cbe66fdc3e46789c85defb63c2176a85b3a941840fc0b0146bb09c9c1b0ccb402cb9598425378b534a6e066146ecaa31e2fb80460cc684efa6117e745e30e1433042bb6384f64889d050dd77c4b6429170db0ae560ceb954ef9cb1c2e338e7300cfd9e1af453c604433f1cd37c2f8de6573fb9d37641341f81a591cb746924ef388add8dc2df01c44be61b98db7d93789f0add225723996e897fb7495c35e0f3bff39c2a593eab12e5d10671659594adb61a0892f28ec4582cd7b1189b56164adf91513604dfc46014e689253a4f1c1bcc134763c25768847f1650782e26bc5423fcee8260c2f330e1651ae1bb8d0b267c0c26bc5c237ce4f860c2f3b184772596f0ae4a29e11d8b39ff6a9df3f31baecbe6a6b0aa720106ac4203ecf209c1808dc384efad11cef7370e227c3c46694d32d9531c241330c19521054fc47054e9e26c40d69374c2f9b2a36b93d1fa525cf0640c47b5ce1b9d6b8e1f06a1b20d26bf46279fef23193bfd669e6848524bb77b77824d71998269b28f4e132e815748827ac1b6d8576a755f71779f8d5dd22bc817b7d37c31b7b7731ae15b87656a45da62e78c67d0c157a3ad73f46fe503231255edf8f2fa081f5ed22dc6b278df47f749d585153f6d88f0b177d12aed38ef9016e7f77e212b26689ae141331573867558a30eaff4bbb3c72a9dbfeaa55115015dbd10fbeebebaef7640bfbb560e0f0af2ed1d74eed827d3ee384d0ceca84dc11dd747f828b46844a31167dc803863bcaf63ce384dc7ad2fe7b62c83dcdce7dc8476a16859a970aecc17c365dcc137752930dd2f12a711584b767f4176608ce5a9ea87519fae8b297ce2c801919013476660920f0c2b792626f9a0b09267e924f352c9c191d8de2d1178017ab7666389d2c69005af39188f43c2f2d811937c6858c93b61920f0b2b792e26f9f0b092e761928f082b79674cf2916125cfc75ab98e0ad9ca5584093e3aa4e05d30c1c78414bc00837c6c58c80b31c9c785955c8cb5c81d9f86b6c44598f013d2207c31c6e4c4b04c76c5d43e290d6aef86093f390dc277c7989c1296c91e58de726ac8bc6509a6f26961555e8a493e3dace43d3118678484b117a6f29961555e86257a67854cf496632a9f1d56e5128cf2392129afc0543e37accaa598e4f3c24a2ec3249f1f56723926f982b09257623e7761489f5b85a97c51589557633e7771489fabc0045f1252f0de98e04b430a5ea313cc67af5e968c603e5c15115c89d5812e4f431da80a738d2bc2bac65a9d64fefc95c9f08833afb11a037d5548d035986b5c1dd235f6c1045f1352702d167ad7860dbd3a2cf4ae0b197af558e85d1f32f41a30c8378484bc0e137c6348c1fb62a17753d8d05b8f85decd21436f03167ab7840cbdfd30c8b78684bc3f26f8b690820fc042eff6b0a177a0aee1b59f731ae1bb53677e151fdd226fe95dcde78e64c2221f277610161677860d8b837592f9ae5f7725a3f28db8e08d985fde1dd22f0fc104df1352f0a158dcbf3764dc3f0c0bbdfbc286dee1188bfb43b2380213fc4048c14762821f0c29f8280cf24361211f8da9fc7048958fc1043f1252f0b15845ebd19015ade3308d1f0ba9f1f198c68f87d4f8044ce327426a7c22a6f19321353e0913fc5448c12763289e0e89e2144ce367426a7c2a56337c360d35c3d3301ccf85c4713a86e3f99038cec092b817c226716762a05f4c03e8b330b55f0aabf6d998da2fa741ed7330b55f09abf6b998e457c34a3e0f03f25a1a809c8fa9fd7a58b52fc024bf1156f28558247f336424bf0813fc5648c1176382df0e29f8124cf03b21055f8a097e37a4e0cb30c1ef85147c39e66fef87f5b72b30c91f84957c2526f9c3b092afc2128d8fd290685c8da9bd29acdad760d9ecc721b3d96b31c19f84147c1dc6e2d3b02caec7247f1656f20d188ccf43c2b81113fc8f90826fc204ff33a4e09b31c15f84147c0b26f85f2105df8ab9c59761dde2364cf2576125dfae93ccc7437c1d093f1ee20e4cf83769107e27c6e4dbb04ceec21ce4bb900e723726f8fb9082efc104ff3ba4e07b31c83f84857c1fa6f28f2155be1f13fc5348c10f602cfe1396c58398ca3f8754f9214ce55fc2aafc3026f9d7b0921fd149e64de4bf2503234e13f9a358f9f6f790e5dbc73016ff0dcbe2714ce53f42aafc844e306f7cff3319c1711adf9fc404ff2fa4e0a730c87f8585fc340699af6f1406f23358493f9215bea4ff2cc6232b2b248fe7301e4d42f2781e8bd94d93111c2766bf80a59fcd92111c27fd7c1183dc3c2ce49730c82d42427e1963d132248b57348273b3b937af61666c86b444760aa7715b181db3888f99bb2d4c169fcf93cb826c88948abed83c9f5775c1ce43a74d32c1ceb54704bfa613cc4fdb66c5ce21543f311f6886fbd5eb582ad92e0da9e41b98f0f66910fe26963a74089b3abca593cc9fef984c68c61970f3b64e309f4bdb2919c1f578f6fc0e26b87348c1ef6290bb8485fc9e4e329f72de351995e34c397f1f53b95b58953fc022e356698a8c1fea3ec0fda97b324c9ae2c1f81106bb4748d89b30d83dc3c2fe5897e1f5774e238bd8e699b0aa328c609353b74e3a13eb2532b19e31d625a30396317d82a5c0bdd390027f8a057e9fb081ff19a676df34a8fd3926bc5f1a84ff032b59666769e6c64f17a70b1c6759c8a6b39d1af744e26ba3d6b37d4500af91413f5acca29fe3dc9fdfb86e1dbfa22fbfe886f9f1a7a16b71c7af666ad9bf20c5dc7f6256f6d7597964a3956aa15f37825689bfe730779fea5ab165831b41e7343e39a3711bb2e88d4e6a258f85e26e9923d15dd194cb8da6e749e0cf07d3039354ccf8fcfb55e26e34531859fdbc173b7282aeb5f005467a00e64ff08bae4d7cb4a54babda49149739be512bc2dcb5b6586efde6d7d67b17bf9e2e7ffa1766e5409d95dbf9ac84cc5d3b678a10ab1236fab58c0e2178275e5c816f05b1ec4bccb2413acbb64f2afc0ac57627154cad49103ee4bc3b416cfb0ab36db0ceb6f13edbe689d0592d2de367eb379b255f63960cd159727c86d333ef1dbeb18d5a8db40cec975717c0cb213bdc8a1962195c5ecc80a91e2f60a52f6dfb06a33e5447bd30a9b83197b94be99a90aa7d8bd997a3b36f2ea157f1abfb88cf70abdce2b0b7f54a099a92a412aadf61560fd359bd6d5cab714d17085bdc0d9e5c1b556e1cbba4727a42f37bccaee1581e15ac64a7f49fdbb8f67011f3561ef6ca2ed1f2dc6bf0c94251f10962d9bf31cb462493fb46138571719158e1a9d679965bbd2a8e9f45cb485f98fd8059365267d9cc84e50ad7ae39a284cde393eb97bcec9d7cfa1baf8498baa53f62968ed2595a4e9c83d53b1e592b169c7373a8c5c20f783c5e21ac4b4f992c95d4e9278cd3681da7459b2da78f4f283c87ff601c72751c4e34a4c4b35048a816cf0729f32c94575ddfdbbca59e9f31f2793af23bc5a4499e25f1ca3d7c13c3198d69542c29c803bf93aed4e917cce631c9a5c37a9b173a8faf60eebafea568de929aadf05e104b7fc52ccdd7593a326e9da8d0b14ee7e5e9d7fa374cebb13aad6725193ec9b53364da177fc76c2d482efe51b43550b742fc17b3799ccee6dd03975ddd3c3fba5d324869354c2b662a69f01f188ff13a1e93111e6abb32b725c6ed58506db48b65d9b02c465f9a16d93f318b2660292c557eaeea31eefaae6e792f9642ea96fe0fb374a2ced2290c1b13a0f3ad680b54aec2ade34c668b50ae1565d95227358b2df5a76ed55f98559374564d4bb2a692a8a530b55a4aaaa9101fd1a5b5713296cbe8438e9709f93e11ca567769eb1962ef896a99fae0314e2f33dd294c04b3751b9dad3b04b4d5040bb3300ba7e82c9c13d0c25d452c5b8b78e0e6b0b70966efb63a7b1710a6b07529a4b0e920d01423b05dba525eb71c5108d25d7aab9a61566d8fb54207b56aa678223684fc696cf27283d8d71cb36faacebe6d42e497708735b74c8c5b551cf36c109b5a603615060b337fda5328ead03ca6252a9bd1b6ceb4c4ecdb01b32f4869dbb5751673dbe9bcbbbc573b7e6e9fae92402bccbe693afb06b1f83d3fc50e610a2d5b635a4e8fdf7f13241416a6140a94bed706b37a86ceea5168dc72dbcdca7d69c4cac63e4b9e1f3668db3a53ebc36d8be93d53a7f7a48425685e8bdb59f43055cad6b42ab10f40a2b6fe74d508da61f6ccc24a90f1e308ef872912a5aa3a4dbe9a4c7f312f8dac4ca385ed310b672753e7d1f7ff26d33793c93ee00e988d737436ce4ecac6606dbd99b4b62366ed8e3a6b774b180769dbd6a85bdd3a6134760a564a892d71295faf927b94948ab7f0d2164d9b5367ccbeb93afb0ad2544a4977bed105b3629ece8a5d42e4f2854e8d867b728988affca9d9ccdb4b7207e7ca3c39a2a14286ab6a4b4db6553c95fcbe2b66ffcee92e6bc6b79f97bde789e7dc1d99d3d5b7d10db36f3ed64e914cdf863fa44ae38c6ec86c0fd45698bd453a7be711fb7372e1990e3fee8ed9bd4bfa5223558aad10beea6d1d9fbe34b50766c502ac67429fe2c7ce77db5c75f59e98450bb111174173417d892f999c3093b9e5d61887621d87e10138a83055fbe9a5abfcd20bd378914ee321094b73de08b7727195f774a7270fef8d69ba58a7e904946daca7476b5e23d23a6f840e457ce983d9b26b3223feb19ea019868d57eb8b59b91bd60b1f2c9d734b1cb17763f321b5b5271e9eb1520a455f13cf2182d8dc0fb379779dcd837d21eb7d933a3665637aeea1d333dfa7274c9ffc3acf923a275b134db5cdbb3f66c1129d054b1bcb02e9efab51f59778a321a107261bf3d43b41a80cc0a82c4d669caffa629054c5b30c8b71e9494d066296eda9b36c8fcd1cde41c239d518300823b2573223ee8296b5c2b7b1a41ef683314b9725935a4d13a1ea86603de84f70bd603c2b48609f2e25e36f05b1600866c1f2e4e7c1f06f068999d03eec7aba426828665f09d68f12bf44e3edccebd751ed8c8cc72f6c57df787132b5dc3e07b37a452aedf74146bc066ff14dad9c300cb3b0349998a7279c5a3921710da785f32f12e193d36708296e6f48b57887970a730738b722798d39c3e8c6147f7454eee05de7dfaf724283c789e2c6b49d4fce8f2fa12ccb5dc048fc0c8d70b06a43f4c84a1f23f7cd4a21b91478eb6841c81d6bc9db9e463ba5c00af1965ac6209115ba5c6e34c8e7a075896dda135996201269212d52b21cd27c55c92dced2721eaa0365a866e5f22eebc88814bd29b1162bf9d79ae87da87b0c59183b74babb027696ad07112ed75d5123a164ff26427ec9a3840055de4b286e1188e23a713d853bb9831a6b99db09f6f630c65a34cbcae3c4575162e18b732d13f48bc4c7f1b98936607bbfa9876d352536be9ec974511cae71c0b9537d54568c01acb302215fa44421aca044d891bbb6cc11678b56672ea0449458f9c8bff96c8d15c05a76f080ed4d09ac9d38e19e041be9e7c8c61d1b503d3dca43b58612555791aa2d6379cc1b576ab38fadeee481aba404d759038e0b5cebbcc487d93488ab6556405bce3c6855d4de169d92cd747e57c811cc6a1c9feb753680dbd8d903b79612dc568cd768ea92ce416d80773ac83fab29e1b50151757e541b9e0d98ea0778986a283189f1b78d0d3c8b1ca936e03979b887671f4a3cad801779738d6c40b4a9b787a89612516b914ab9a52c2f554ac22a032065837a641d25a4e6c28feaaccae79676f1e0d453c2e16b92ce6fac62abee767718e802517068607c5a182f2a14c906691b00b61de8016ca004d812a4525c4d3e02c10640393d3c40eb2801653b27b1c311e1c0b5e825470a4579cb5d6eca1d02604799de79b811e8bed4f9e27cd187eaadf66007a2d741c96a7da622a59ad86a03a09f7a7a80365002e26b5cab7ae10cb65e58ddd05899e1f31bca44556781f0b032e16f95ce076d80c87f14c4fd2821f6612c0a1e6fa2e6cb1494376e5f5066798db12b68b4de9fba0191fb98f2b70db208b24834ead880ea7b90b61d90a9261dde420187c5a8560a9b8aba45ed3d70075237e9407070d6bb5be8e03dd5defc7e1be0bd0e5a5f0fa284d716e4a8de246e77e9081b40b505c5dd83a9fb8ee689e8b7c6b77ed374e7f15af1251b80f1a1500ad846eafe4ab79b37fef4966972f2e52a7b22679e87f090ccb6f2478f952cb32c4b781c640987d2f72971df9b2e3e6d7359ede9661eb4c3a8bd6d861834d0203eeead9fecad4757e744d60a4b1ab4a7b4f5c01d4e09ae3d88a6b6f65cf2017b0ad611f4fde4eee89f6a21c6eeaad414103d8fccfc588c62e62e456f03aadb733d54475197d56251795d720d96a460071478c08ea6ee2d58e044c8692cf92d0e6c00b8a91d07d8a2994fb87f9646ea63668351c747f776606e93538db85a2fcb7651a37df93436e3343f068ed6cd49b9f93127611e9a93f438a19cc0633c72521c5b999354a53027647b624e8001b33981b2d79ca4cbc939810a873929a52739815ac07202558e72921afa991368105f4ee086279dcef8b0ad9c980eee9cb8ad3539da2ecb1c6d9f490e32082327ce109f1ca4832a2741236f4e4a7dd139e818881c30ae3e4733d62627c1a855ecbe2a49e5a4d8729113c966e17b4473922abc789370f49367f2f8249c63ff9fcf8fc9e3f9d2711c02df4b92ffb825a9e3a94b523cfeb8d3a178ee167ff1cb314e79c6a743ef181da2b7655525269d36ada2ca54ed933130a5612c60c4e10926e1ccb712e70100e78926e11c6b25cecb01ce934cc2596025ce0700ce934dc239ce4a9c9b00ce53a85b4196c92c261aab5b04e38f91e16b41856f3cc0776a26bc7115ea8f50fd656c121b4f87b32d15ce7e00e76926e19c6825cea600e7e926e11c6725ce079887f30c9370165889f32280f34c93704eb012e7f700e75926e11c6f25ce5700ceb34dc239c64a9c7b029ce7988473ac95388f0638cf350967be9538d7019ce751e2ec267196ca164dff5a6aaeeaee3a5d7974209b5181dc1e9438cfa71e15af7a0692eda5e1cfd78a67edaba7af041e7a0125d87e0c76db24df6d6933dce100ee85d483c3e3b52941713ca7b7af41640f90005c4489b28344393ef3ad493752c13b19f8e1c5998037710b6a8a7b09c0bb84125ef7047978742426ad9b93c1fc0ac0bcd42498132c84f91b80799949300b2c84f92f00f37293608eb310e69700e61526c1ccb710e63f00cc2b4d8249d82f4906f30b00f32a936012d6cac9607e02605e6d124c1b6b389f0298d7980473a285307f0730af3509e6240b61fe0fc0bc6ef33663b8a2dc5d310853cc8154288b4133c6f59428874b9495ce4395e2a846b2c3cdea9605dad48e1479172ae42f00e437502f67b74c0c962e9383d5570978f6b55bb60511fec6cd19e1a3374f21f4be4ba9507e04bcef264a94fd35288345ee7cca7a3b59f47e1900bed974c084d54f32c0f703c0b7980e98b04a4a06f84100f856d301db5802b80700becd74c084555732c0f701c0b753021ecafca55a77eed84cd9bb54ee202e174530de4b5f2d66dcc5ab8fd9d8e87202807d47260a67c9556d6d44c9dd49a1bc9312655f4dc290ec66c0a468c9ba9c0f065e7ad7e6f552dbdb0ce6022fbd9b1a65a198bb5f2d672cf36deff8d09cb5721503358fdb9d1d6f5fc5b62940794f26b67b19e3fcaf921f2f11ed01fcaacdc321ae0008efcd04c2095b1cc20f00c2fbe8f7a073c7dca963a150c1ddbfd6e6b175ef0188f79b345f93741c3d19ce52905f3f60124ed281df64388f02381f340927e9b404329c57039c0f99849374141e19cec700ce873333393bcf873503f9379fa54a82ef1d90f53c62ceb06e1bbb961b80273e9a0994705ec75ca74e334baed7b4d279697d260a446428cf035ef918fd9007d8c3b98cad11e876106b1fad91a2663a47be1054ccd2b0e983b93515cc7600e6e3996819aa17abcad5353618ab85a1d451d7ae49da9f4486b63b88f24f988a768c9568ef035efb6426463d25bf6a08194cb2b99b7300cca74c8249381e8f0ce60c00f3699360128eae2783b92d80f98c493009c78f90c11c0b603e6b124cc2194964300b01cce74c8269e3e201db0398cf9b049370880219cc5100e60b26c124ec9124833910c07cd1249884c3bfc860e603982f990493b0064406733480f932f5bec0e1867a11e6ef6403bd4e0475f75736e7b41a7f3b3c612a4ad60a3f06f8eaab26c124ccdfc9604e06305fcb4497066f485e2726d4f04d1f323424810c5f7f80ef75fafd125d7cb1a337b9306f4d259bc7787c0380be91896132795bdc3099cb01c237338170fc1687702640f896d9c521c2564db2e2d049a038f476a6067279bd97b0038ebcdf92acd3e232e0a3ef98339eddc66557a60394ef662a174fb4df94cd830c9702a0ef99b41cea242b9b3a3a81f4f27d93704eb412e75fc03b3f300927e9962564386f03383f340927e94a4b6438cf04383f3209e7042b717e0e706e3209e7782b71be00707e6c124ed2adf2c8702e06383f310927e9de6e64380f01383f350927e90a0b6438d7029c9f51d78b92db95d8dd0f95ef8b4c582f5a4805740a00fa79261694de92f6762b01f0fe4109af174b76d679f43a4b8483655a53cdc97812542dff692254c2f62432a84f00a85f98089570c02119d44301d47f99089530872783ba0140fdd244a8848369c8a0d603a85f99089570a00219d46a00f56b13a1120ea52183ba0640fd86126a7b01b54262740bf6b319df166a155b4d5994275b5d86f7eb2974df52a21bcb62bbdfa227644d737e5739fff8dfae21bcf6b4524c2ae4caeecc782fd2bee2136b1c0f5ec7cac553c5a232a0faa1081385495481d00df8ef775b422010262264813004c484efcd99d66de3363f7b037ffeb7b9733c0987e0920d97780378e90fe6ac6c4fbaea0d999fae01307f3409a68ddb515502983f9904d3c6eda8760730ff63124c1bc7452d03307f3609a68ddb51150398bf9804d3c6eda87605307f3509a68dcbf9160198bf9904d3c6eda87601307f3709a68ddb51550398ff3509a68d6b86d500987f983da9c1c6dd12e683bafb9f9478db49bceef26b95a216efcaaea05c33ac19153806fcf27f995e4d3ec8aa61f6357aac073ef957a62636cc132d9a6b7c2d9ed39dd76ac5176d9ed83008f82a6b42de618245f23ac2be262a7459005d84125da2f94af6af23d217a0cca244a9266d17b02d69d27603c0d784125ff2db97b8bd4735c263dd7e2152cf245be2f74390e134a5441b7c75791b5767d81de06c66124ed2fdb6c870d6029ccd4dc239d64a9ce7039c2d4cc249ba913919ce3b01ce9626e11c6725ce7701ce56943807b2d849dd33d87ac607863530357161bef37a19e38d1c0b04587763a8caccd4873a5141ee038a52ad33e1b3c94ff4b67151d5cec067db988473a295382300675b93708eb312e7ed20b2b7330967819538cf0638db9b8473829538ff0970763009e7782b71be087076340927e9b824329cbb019c9d4cc239d64a9c87019c9d4dc2996f25ce7d00ce2e9438613fd14251e76970241732be51ee6239ddbb4c4cf72eb7ba9fe85000b46b263a3b921b136fe350af125088ef4689528d01512bd4ba0b10ac100d21ea21db17b63c12f8e55694303b0098195e80603115bca9005ef74cf41ba5b6b9196106443650612088e43d4c454b5af22443fb28f0da9e99483f931b4337deca892f63819f6e6d124c1b27be4c06307b9904d3c6892f2300ccde26c1b471e2cb4800b38f49306d9cf8d21bc0ec6b124c1b6b437d01cc7e26c1b471e2cbd60066b649306d9cf8d20bc0ec6f124c1b27be6c03600e3009a68d135fa6009803376f639c2b8ab728914e28205bf5665780725026da8f2664befd88ac51f82ce6c11b9c097893320f8fac19e36d006f087d8ab85ab32bc7428749292b950aad14abd0f2015cf679621b007368a647c0076970b3cf4feb400a99b339a7b944e7dc36561c0b80970e33639e46b1483fd78ae8cfc555d1a2bd910aedf3c04b876f5e2fb5bd48b40878e90893866d93ce5227cb9a5601cf1c6912ce7c2b719e03708e3209e7582b71de0a708e3609678195385f04387333d1cc91dc30997c2bdb8c9e0630f34c8269639bd17300e6189360dad86b7e1980996f124c1b7bcd1f0530c79a04d3c65ef34b00cc029360dad86b7e298039ce249836367e5c04608e3709a68dbde6170398134c826963aff96900e6449360dad86b7e218039c9a40a25e96057b20ae5728073b24938498b4764380f0238b7310927e9ac35329c57009c534cc2493a819a0ce74300e7b626e1249dde4f86f35380733b4a9c9d25ce71ceff2aa636f7e44ba7d83ebdea61e621dc3e136bce24eeb19cc6fc2bcb153a426bc592bbb49b966511417e15f8e9544ac87d24e44ae7210eb85c2eea339fa9a57ca29301cf1452b0648bf99c07c0165282cdf681ad14836dea85186fb84dbcc2be8df5a66300de1d36679f7bc6f62dbc940ae52480721a25cae87d0b555aca737ad747edcbe57b832c6a3a25bafe02dd1ce7a105c2d7f8cac5ebe4eb5e445fc6d6085fe56bc2973a7fbbf7673ac77247ac8d805b01c033cc99fa6f638a391b44f3999428bb2640a92c251d92c8b70d26c1f80ec0382b13f97aec68cf64377e20ecf620dbf8e1588077b6b973d7097be1c906d3fe0cd2d239994800b02293970010a6a36409c076c04377a4c4c8b72629928d216ae99439c23379b4b72f2fef08fc6f2773660e11664274c364810fcecd4454ce6b8cce65ccdd74bc5a34ced9bd77c1fbc023e75177be7160d3c587cb99bb1a127f743fb13e978b7381b8cb27c210aed245b6a0cf7600e6ce9988de79711a3bec6ef9fc16a09c9f89c6e3822daef1f83880b02813ed9adc1b6788e24e835062aef34aa988e4f3d9bea2b9b8d6b9c7cb9a35cce6c5f8f600607731674a968d830f6703940b323185b5c0572cb2790aeb0a006fa13993ae6c2c4d2e00288b29518e92c5a042b124a49b63cf108d16b3196fd15ce5a48fbc6178b5e8fa5d25f2f222a1e63acd7385cec7e631b7f198a7adf681cf01c5f84599e8734f7ec307423f265b78b71dc0b9d8249c13adc4f95f902cec6a124ed22d74c870de0470ee66124ed20d9ec8709e0670ee6e12ce0956e27c17e0dcc3249ca4eb7791e17c02e05c62124ed2ad1bc970ee0c702e350927e95e8364380f0638f7340927e9b403329c7b039c7b51e2543b088f655bd20ec2ab00be65268d3c1e43d9aa4486b30cd482969b849374863019ce3300ce1293708eb512e77500e70a9370165889f32980b39412674b218037c4b9bd975c32192eb241d9cd41565346896b288b6d348e1e5fe40e7fad127ff37ea30621728600cccd2a16d43230e070672ad89300ecf24c148bc68832e496d2c1f123c0b792121f1fcb074715f35677d8ceeef9a47d2decdd00c45599e849e7ddc0b318ef94e01dc0ab442746add51dbe670084abcd19826de3a252fb80dcba82122577fb221169cb989a24808d3a22ec3823cbc75b029fdcdbd451c2a48d1964d94e57e0a36b4c454bda8a4986f60ee0b5959958eb23b9a13363ad5c06ed6900b3ca2498368e447a06c05c6b124c1b9741bb07c0ac3609a68dcba03d0560d69804d3c665d0ee0230f73109a68dcba0dd0d60d69a04d3c6c9a93702987526c1b47119b43b01cc7a9360da58677f16c06c3009a68d0b41bf0a60ae337bf234619d886cf2f4f1a0eebe2f75fb52bca63a57f5f162c2016176d48c0ae40700e47afa753da241ba0dc5bca1632ddb51f40bd5c41d344308986cc84c1390106c306716918dd5cd8900e57e260de69a4499459179e66010f5f73709e7442b71b602380f3009e7382b713e0622fb8126e124dd32870ce7d500e74126e19c6025ce5f00ce834dc249bad53219ce3701ce8d26e1245dff880c6719c07988493849ebf264384f04380f350927e91e5964380f04380f33673e3b618d886cd0577f50e63c9c12253f512b74d9371ca103f0b8234c8ac093283bd7c8227007e075479a8473a29538ff04de79944938c75989f35680f3689370165889f37480f31893704eb012e7c700e7b126e11c6f25cee700cee34cc239c64a9c0b01cee34dc2493a0a890ce74680f304937092ee6d4986b30ae03c9112676f16bdd108e7d0c0782fba7f7b11ffdc4ac21e4ab2692f7b81e2fc49945887f8b0ae60b1e3dd931f194f889aac22fa16407d722626694d645bda72a79b4022704a26666d286fad13fec7938099125eb9762c88bd1b399d09bcf3544ab4ee2a9d7c5f2c2eaf5488899e89695f535c2fe097a7993379d0c691f015c00f4f377562563ee5b839b20c281fa03dc354b463ac44fb3c4800cea4443bc03999e14b3bd5dab12ec43aed1ab2de4ab4eec84ffbd2d8ee00f1599b378db5bde7e87690109c4d9fd7f3489df1052bc86a4c3b003f3cc7ecc1dd84f38dc806772f03be796e269a4de0fe1aba0cc9ee1ad377c05bcfa3c43988f9f76785eb82e8f7199e255fced8e6a2f954980f045e7b3e75d12af8daf25ed2605f823014a0bdc09c31f436ce4b9a0f12830b339175a9c4807b63996fa9962daf2d7506f0d48b3291756125d4d8153e095bfcc9702e01382f36092769070a19ce7d01ce4b4cc249dabd4786f30280f3529370928e3421c3792fc07999493849c741d16df908705e6e52e7f324ca8583c83a9f07009c57988473a295389b039c579a84739c95381f621eceab4cc249bad83419ce8b01ceab4dc239c14a9cff0638af3109e7782b71be06705e6b124ed26d24c870ee05705e67124ed21516c9701e03705e6f124ed25d39c870ee0f70de4089d35b5b7e3374d591b577fe00f0dd98897e4efee195c21395ecb5f211fbe04500bc9b36ff2a4b2a93b16f645d25a8eddc6c0a481b8728ce02206f310524611f3b19c8b301c85b4d0149d8cc4606f25400f2365340128efa2403f90c0079bb29200987769181bc0a80bcc3149084456f32906f0090779a029270682c19c8d701c8bb4c0149387a830ce46700e4dda680245ceb980ce42700e43de6ccd6b071a9fd3d01ca7b295176674106678db372af978e00e67d26c1b471af972e00e6fd26c1b471f1ddd600e60326c1b471865b5b00f3419360da98013503301f3209a68d7bbdb400301f3609a68d7bbd3000f3119360dab8d74b1680f9a849306ddceb652b00f3319360da38a7a20780f9b839d35209b31fb269a9bb01944f5077d77adb7dcf91bec9274ff12955fc3532786433d0f9506205ef494a787d987f72bf7e725f31ab1543a8ebd84a21ac8ab6d7f1462ab0a700b04f51821dc8fc3328dd49a9de8a335c201f8d113f1db5b1b0741c88fa4f6772752f17289f27c91382e9da964e7b37787a0d607dc69cb993369640f34032f06c26164f81f97cf2292c215ab214f611e0a5cf51a26de79ccc9128a7398ff12dc72a45d4e7d3a4c9c091cdf2e9097cf2f9cd1bbd6d2f7b66031f7c2193195085a3c462e766a543c4bfa65cc6d645b8940aeb7b00eb8b991881396e0b1abe7a1288de2f65a29e9e5c3fe5182b1b3d8e069ef8b249306d6cf43819c07cc524983676fb1e0160be6a124c1bbb7d8f04305f3309a68dddbe870098af9b04d3c66edfc301cc374c826963b7effe00e69b26c1b4b1db772380f99649306d6cc95c0760be6d124c1b1bddf60330df31695518d22c88acbd6805c0f9ae4938f3adc47918c0f99e4938c75a89f34a80f37d9370165889f36180f3834ccc1de7d301d68196cc8c2c9c4b86af9c79f83ea4c4d795f1dd554be41e435cd45ae7f1d5cee3d5a2ab623f3128a1429cd987b119c0f81125c67ecc5bced9edce5de6a85be7a8532a78f0d11e858c2f3fcabbd04a1c013c829731356d9f70db11ba251d01dc4d99e8934c6daf0cc23a11d9709a9e20f5fcd854b4a4d54d32b40f02affd843a658d97cf2b4b49bbd6ea234418df061efa2925c66c0dc660fb1010b67d922d3bbe12e0fdccdc0480b02b8e2c01f80924009f53a2ed2fd0ce16feb980f17ef47259122813a2d458ba352200b81f973a7fbbe2673ac77247ac8de3425a03c0ff303b6920ecfd244b1a4e0149c33f33918161c36edc6d1e88f7c3dc409581ed00307e4189912fcf36c3b9592b1e99c7e08e98f6b589f60091fb5f99686086352a553df52aac76d7a0b201cc2f33316a1ec24c9c31d90b763500fb152558b5d9ed58b6a56d767b3f40f8b53983b76d1c62330ba0fc8612e580002817b21a21a49ecd77fe524d7c75b4b9f9fe54b9f934909b7f4b89b8278b1e405b23da4757c7f5591b3b921f0740bfcb447748f25b3810e2245b4ab70dc0f9bd4938275a89f35790a2fedb249ca48b0590e1bc06e0fcc1249c0556e23c15e0fcd1249c13acc4f916c0f9934938c75b89f37180f33f26e1241d714786731ec0f9b34938c75a89f32080f3179370e65b89b302e0fc35130d2179e2b77be403201632b7b5c9deb6a4c301c2df2811b617d6940b01d3446dbc5e341a578ab12236ae0ad209a0fb7d73ae4e93b16c866cd5d8cf4105f2bf9b77a11fd8b461e324ad1a80f28f4ca589a5324297b3f5323dcc40e3706baae6b60f41c4fe33137d901c6179e39a49eab6ed6dec9f018cffcbec280ffd9a1eb3e40b199bfa9f4f85760040fb97a9036848cb9464b9fa1f002d6b6a285ad25c9e0cedcd006d8412adca9af2b7b87ecb5c80308b12a1b769dd6698784036ba6818c0d72433f80a7ce54d9bbd6f02285b36a5c4a786c724d76b9e6f65bff985c0179b9904d3c65acf750066739360dab834c53900660b9360dab834c5f900664b9360dab834c5f100662b9360dab834c50900666b9360da38a2a816c06c63124c1b97a6a80330db9a04d3c6c5f9ae0730db9904d3c6c5f96e0030db53c2542331830c2f20f44eb22edc89a04ad9c134a084857732a079006847d3801216e0c9808e01403b990694b0e1830c680100dad934a0848d1f6440c701a05d4c036ae3b8a261006857d3801216e8c9808e0240bb990694b021840ce86800742bd3801236869001cd0540bb5302cd6661a7f5132600641d6f45006f0f4abccd9d9305e2a30dce03842332c97ac979e7b542d59312951a7d34a6b1ce5ec62a989a2b69fb1a731f018c5b53620c3ec5cfc67afa2010817b998473a295385b029cbd4dc249baeb2a19ce474064ef6312ce022b715e0570f63509e7042b71fe07e0ec6712cef156e27c1de0cc360927e98a71643897039cfd4dc239d64a9cc7029c034cc249da7b4986f30080732025ce60db301276640ca442391c94390751a254fb05e6fb1a3a6c1e393c0df8e1604a785c807fd9b2d9e2ef556cb523aa500cc7769731735b84ecf3c4ad00cc219430d592517c82d574c6a79bd6b022562e9b3adc85a2ca85c0122100ae075fc76c9ed73b12201e9a896c08cb8462777721ec1122c3b918a49d3926e1241d2d4786b30ae01c66124ed26525c8709e0b700e370927e90a4764386f03384798849374fd2d329c6f029c234daa114db2723c521f8073944938275a89b309c039da249ce3acc4792ff370e69a849374a331329ce7029c7926e19c6025ceaf01ce3126e11c6f25ce9701ce7c9370926e214a867309c039d6249ca47b5e92e13c0ae02c300927e94456329cf500e7384a9cc3987f1172de7057e6f0e00bf6283bbd5592a25be9bd4f15b25ad1dcbc81912ef2d32b8b08f8c7a0643a9e12783716bfeb233a65250349b6badc08e0b9134c0169e3327dfd00c889a680241c6d4c06f24a007292292009c7c193811c0f404e36052461ee4e06b23dc86cb6310524e1fc4b3290b7008f9c420932cf574c6a40d78bc357449ce63c51e5e8532dceb8a9192a34b5a62a34bd02fc785b4afced98b79e315f0ada25b1560ab0af95be2bf0dbed28c1a9650292edf4201cb544067301f0c2ed4d8249b8e60219cc8500e6549360dad819371dc02c34092661c5920ce64c00730793601216e5c960ce0130a7990493b082490673470073ba4930098bf4643077023067980493b0a24906732e8039d32498844ba990c19c0760ce320926e1322a64307706306753c2c4f7ab9ee9fcae1018cb1c7bab8560fbf7abde8f7960e75082ed2dc0ce751e281503bae1ea09cbd81a0191afaf50eafced0a9de91ccb9da7cae8b0924d496801b0ee488935d8a63936ae78bc1a44fd9d285186db4f8330bf275bce6208403bd754b4a4e345c8d03e0912807999c8fdb136fbe8046082954b4b17023fddd9249836ae86bc2d8039df249836ae863c15c02cdabcf9bc2bcade29b0770094bb50a26c2e04d48be9840dcea3f6f563760199cb024a54d91aaf0bb6201a6176435678df0578e2424abc5d9857d95c272a937cb2eb0a198933b2c6d7a554108f003e5a4c09b17f681f1d43d9be44e6a537032f5d643a60c2362732c0b700c08b4d074c58b327037c2300bcabe980098b5464806f028077331db08d25856b01e0dd4d074cd8574a06f80600780fd30113b60690013e1d005e623a601b5757be06005e6a3a60c2f17c6480ef0280f7341d30e1183f32c07703c07b51025673f560df2bd66148dee34a86338779389751e2549d2eb1fe9a4cb78b8d9b98af059eba3c13adb1c9356ddbb801e538e0a5259428d5808b54ba06095353321fbd16805d612a58c2720019d84b00d85253c11226056460770460cb4c054bd87a4006761b00b6dc54b084752e32b01300d895a682b5b1803518805d652a58c2be0632b01700b0ab4d054bd84b46067603005b612a581b07b8ad0760f736152c61af1819d85200760d25d88e12ec3839faa0d22191b1710764f82e05f82acd6903b07177fa9d00caaa4c34fc253f1fd5c689e7e5a0756aad493849771f21c37916c0596d124ed2bd71c8705e0f70d6988493749b36329ccf029cfb50e24c34fbcfdf146de390f59704cc16cd7cc267c6089f263c87fb4e29f3f60a19cd6631be828ebb9b48a9733e579424ebd972272b59e2fc0b16027b3aff74d72362779d194ed1b8465ce5f2ca84ec2ae72ed7ac8ee5f12a742d7788b6d221724449a2d0615eef3cc3b797e15fdfc01632772f94f9ce6f35f7b04120c911dbc31639d7f8f0e572f185b58e26ab59adb0387aaf949c484bc1a95c6c58c3ede20073a4aeeb98bbb6d01c5986e15bd994084d6a9d679a8aefb8f131472caba3ced430d539a2045e27b48abfec4e8e18ee1a6ffb1c4f9b1ce138c1b6dac9113bcab8f4ddf0e7ef140962aa4e50e7dce73d888924b515926a05cf5a364fba6189e89574ed9cc3dc359bb8c7f1559a2a45b8f12f72478d443a49dfe4e1324fdc2b71eeb9df296ea4973bc4792cc2174a73eb34a31b6b33a3a5e42a79a6ae2796c93d33beb43aee7e117d7a5499b63895c8223719e0efaf14d33ecb85d439092d4d6c1f1e3fdbc60995dca13c2cb664fbeb79b83797e19e95cb3ba22363d2e07b89356ae05fce22ca0103adf6655ef8163177efab7291636c08e5dfad450a0de55588efe60e33d3b7d367fb3a98a665e50e4fd5b7836bb42fa56fbbd2dc862f9fec594958a70f07bfcdde5335326f57bee0c6f4d58c2ff19c98441f5192c1a5153a67ab84ad15426a15533f3ccfe4a5659e24ada7e4997c11e4ef7483975679bab1212a6ae5f1a8b5dfdf3e9f569fdf9f9267f0a2f4dfbeaf7cff8058df3ff06fdf4fabef1f44c9335d55c2bf63848a1107c7c6888d7fc788b4c688432879c66bdaf8dbcb95971f1aebe587fdede569f5f2c3a9db04f026babffd5cf9f911b17e7ee4df7e9e263fe7ffba47da38e78b9c77ddd6b27236df79be4cc83bb42a8b35fb3fba51e1b5dd2e0400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/d99cf00050db1bf4da77939e479c824f.asset.meta b/Assets/SerializedUdonPrograms/d99cf00050db1bf4da77939e479c824f.asset.meta new file mode 100644 index 0000000..6456e01 --- /dev/null +++ b/Assets/SerializedUdonPrograms/d99cf00050db1bf4da77939e479c824f.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d665997a3b7cc9a4fb23ce4433b55f6c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/d9cb23a6fff21ad4aae7c7556dcba43c.asset b/Assets/SerializedUdonPrograms/d9cb23a6fff21ad4aae7c7556dcba43c.asset new file mode 100644 index 0000000..6127c86 --- /dev/null +++ b/Assets/SerializedUdonPrograms/d9cb23a6fff21ad4aae7c7556dcba43c.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: d9cb23a6fff21ad4aae7c7556dcba43c + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec5d079c14b5f7cfecd17befc8d14fda1d475740cad194ce8105140eee0e4e8e03ef8ea6a8a85850ec5db0636fd81bf686bdf7aed87beffa9f64929d377379bb9bcd666f86ff0f3f32cceccc372fdfbcbc242f2f49249bd87fac3ef65f73c84c3296f423b34921594ecaec7f8db5afcbecff9c3bf17c3a29b7af8bedbf0becdffa90cc385fd23f3dad36f6df93ecbb0a52697fb9922cb2af25ecf759a4c8fef724fbdb22fb8e3e2db6ff2fb2dfb26ad81fcd2679641a994a5a5b2de340cc611f55f06716cd9755c7fe7b0c596bff5ac484a28964b39f5adb7fcdb27fa960bf2db38516efcd2507b26c2db37f5b647f534e4a6dcc850cb14ee1a984fd8338975efcda9b5f77b7ffafcbff9dc1ff5d87ff1bbe5f935ffb24f87e5ff05d5df06fcad02531beefe75c233dec6b2dfbf101e09e7efb357f2fdbc18b2c8981d59f5f73f97500c79c9b80fcb5f975609cfcc6c21804b012e1ac0ebf0ee1d7c15cde7949a63fcce1c8da02f028973d813c4340da75c1eff4d9508dbc8b72ccf2956396538e91f378f9ede4efefc1afc3f9754f8e6dbfd3bc943f1bc1af3971e41ae97cc7e4173a6ba799b182dfefc5afa3f8753497ad1797f54070af2b8b28d3311c73779ec64192e7e27dfafb7c7e3f965ff37ce5358ebfb780df8f4f509e44f44fc8d49ba75100ee6d1e6b2c888125cabd8fafdc7919d438cde1b1c65dbefc00fd93e24ee0780b93c8475f5f3efa3ab2d4ccf2be175706813f91e3f4e3b88bc03dc53d4b316f35f877b7f1fb4924be6deb95c06f931d9c3a82eb294e3ab55a38cf6b89ba2674799f38728ab2cdf6956d36c72de5b822ff539d7b4bf03c10e0d0ef0b7db8393edc1c8e2b6cc4f804e59cc6af33f97536bfe693683daee0654866f0eb2c9e667fe2b501a20d99ee7edb6a3f45de6295d11c5f59e7f07473e3608aeff7e5d7ba09be2fded94f43e6fdf9b55e8269d6e3d70334d2acefe8429def7dba30250ee65c87df3a9540061ba7ee3a7e2fda565ede84dbe5c8209f1e88b63c961ec493653e97858032b065a9d784df2fe0d702af2c64a14fa6a2d4c914117da262704faf03f9f3c5e09eca3add49a7dea31c93db3e22eab29019ca98629949b1f35dc306403712f92e967e2d76f2573fc7c1ae9fcf9f8b7a2964dbdf95bb4e1ef856c891487d38987331c4c7f1102e83e076a9efbd25e09e5e07bbe9b17fdbdf3610bad50f3ca7df96807bfa7b4982b22e23557596e20c03690fe36973fbdfe034fe6e19a95af764dfd22be86bb27f53bc77f877cb49d5764cbc47f37630b8a7bf972698b71512f9ec741b8e8af1ed21c46b7ff675f5a1f60bfc593997670fe2ad5ba28f3bc8fdc612fdc90ae7beb190855f23a2ef29fe6dcbd748b4a72bf9752d91b7b3ab010fbcfe91356eda1d84bcab62a425eaf5a1be7c2f7671eab7e1b20b3b7618f1d619ffbbf499b0bfebf9f5187e3dda7d77a590ef487e3d8acb369c786c3339023ca7d711fcf7a5e09ebe77b88bdd52e8e8069facb2f23cd69777990d88a567c739ef568a348f77b86dbc85f3f6a84f864a125b7f77e3f91a49bcfa3f92e3feece03619c5df3f815f4fe2efed05ca598c854e74f3344ab4b11b016e5df0ef44648cc5c7294e3ad17efaa9fc2af8c907d87c5c1419e5ca17edbb9d0c7ea3f7bc0f4736114f9b135396d3f9b5619cfcf402efd1eb191af98ff55b2d7e3d9be76d34f18e5d463b65dc74670cac731c9eda74e3f7e73adf34fb99dff3b17753c1dbf9204f348d312ed74d44fdb880ff3616e47b137f96079ef1be7f649cfb2c22c6579b7de553eafb7d0bc090fd7e219041f6fb45fc396fb39a4fe7cf2ff6e565934fd63ce2b117c23f05f31ac9f3a55da6509697f26fc7fbca72bc532ecdb7c5c0ba4c5e962d1ee4f797fbca72abaf2c2748caf20afedb44506e7bf2679324e5bb37e06102ffed4aa42cc5ef57015cd9ef57031964bf5fe32dcb961df8f36b91b284f2c3b2bcae6a5ed93b30ede50994e50dfc7a3dbfcafaaf3712d78e53dc1509e0dec4af87c7c0ede7c33d2401dc9bf9755b0cdc5b107993494fe8baf0b9ec43bcba4eef6dbd6db52506d6ad44aaebad05e7b711afaedf4ebcba3e9954d5f53bf86f706cc0ed42642aa9aaebd3809e4ce6bfdd09de81ba2a7ebf0be0ca7ebf1bc820fbfd1ee2d1f536a25dbc97c8751dca0f757d7bd5bcb27760dae50994e57d3e9e05bf227f8bc1bd5d3e6d847ca27f742ee05596cefd0efeea07f9fd031c6f06c7af00f7f43ad397ee4c9eee3b0e4e5b314e68c09ff3fe4f5be14f7b90a7f737bf7fc879af6d07df7b0f3bf76b9ee1f78ffaf87fcca72bc09f14cdcb23e03798b7d9c4db27799c3f9f03ca6a367806cb4af40be3f1fa04bfeef0f1378be355827bfade53aefc6b45dffd497e3dddfdada9f84d946f0320c7d3725d61b2823253ee23893c3f1327cf2a36695fe2b549fb3a7ad03e2706d60bfc9dfc18efbcc4af2ff3eb8b1c7f3fe21d8708bbfb0abfdfdff7bbf0ab6d73b96ff939904360d36f56c69047e4ff557e7d8de31fc0bf5d05eeedbc75d8cf49abc3027e1572beeec379c395ebb0f5be6ffa24208f89df56f3bccc255e1b31d7c95bc74ce2d5dd5571f4e94d7e7d8b5fd770bc79c4eb0f147ec3587eac7869c5c857e420e2f51d08bfdadbfcfe40febbc8ff02dffb0bf8fbdc3646e6fbde5fe87b5fccabbccbef0bbcef93f7000ebd7fdfcd5b448cc33f00cf781d231fbafc74e27dd3c8226fdae423e21d0f8a315f217f6f0df80e72207e5fcbef8b7c792ae6f787827b7a5decc31536f91ddfef0277894fde8ff9f5537efdc4cde3616f806f009f64a71733a64ebfcf314af83787817b5ba73b7d1003437c2b7c024b39c63a706f6364729f4d668c7a1b29f5f17730784eafcbf8ef87837b8abd3e867c5cf648992f6f65fcdbed097ccbfbeb9115bebcade018bcfdef5c2706d667fc2aecab2843a1b314af5c52aea24de6e3efc8215c8623c0bd2d43e74bf87b5f10b96e2ff77d7fa4f7fb2ea2cffb25bf7ee593ad82787d60dff0ebb7b84e92ef7cb257baef44e5fbda279ff0470ab957f274d70339c4737a5d45bc6d1a6f6b08f7294556fb7e17f64536c71eab8eb4e4d71f48d23696fc08b012f1fdb4e2d79f34d2fc19602592666b7efd4523cd5f015622690a1fed6f1a69fe0eb01249f34f7efdcbd1812e3b40f9d2eb1ffccafbf0116abba91e1d05ee4599723dea2ae687fee1d77f636347d672cca3c13d8619232ff49fec1ae157cbfd7e20f7cd5bfc1b8bc755b1c831fece20eeebb078ffd5e275d3aa0d70b8ffc412ededa15cf663c0bd287b213bd73d4bccc73623ccd6f4e032450ee3181b9cf77b4cf4cac87eaf0bfe2dca99e377e36d9e55dfb9efc37d0f161f97f510364df4c5fe8bad1b16f7b55a8d62e4bf31bf36c1b98ef6c7e2a417533f3957597c2c1859473c6da3d594733c1cfc2e6c05bd3f9cbf7f2cb8b7f17af27ebdd58c5f9be3799572d482e31d05ca8edeaff7ea038b45a4f26d03bf0bbb42ef8fe6ef1f07eee9f518fefc78908e784eaf1b88b7ce88b1b25f2f6a3a4d0893a5152263eb24653c4a2ea35437dbc8cb2f5a5e3fbbdf74e5e95b6df995fb0bba09ffd46ffc797bf79bbea2eeb6e3ef88b95a51fe2778cbbff73cdffbc2ef7f04f1f60b8ef0bddfd1fb5de448fefe46473f22fc3b8bcf15a13684d653f15ba7383a08dfcde4d72efcdad97db70f1f07595df9b51baed3567712bbfec2347b90f8f6a0a7021e9f2fb5768f81d74b018fc7d45afd9ce703789fc7e27d6c8bc7c45ad9bccc8e25ded80831cf2819535a3971e4a0cffac7c90f943517d431d86e709d97b51b31dbbc01400f28ce711cf744704f7f97b4733171850def415cdb2de2ea601c2b6f532ce89b52b5f15cbf221b89d797b0915f4f20def9567a6fe7a76fa1939fbe1b805cf43ac6f75d01b8a7d7e35d59237c4eb8ef368e25daea415ecc0898a71d5e0a9ed17707032c686b38768ee092d7b9c8e9fcbd93c03d94fb249fdc273938fdf898205aafdbc5e15c565eddbdbf45cee0696d92fc4e9f9f0cdea3d793f9f353c0bd2d5bb6b08f1cd7e23121168f33b1780c46e44ce2ad7b67f2f424e390a8ed8c93cfa86ca772ec53c1bd5f8785ae9de2d3b553783eee7264106566f1f92d6bb83c3fd6085fbed6a72e5fd648afbe093d8ba72739a2bfd79dff7e9aa2de08fb20745fccbf9c0eeea12e2c06f734fdbf1db9fb8b7479ac8335cacb61145f4127fc759cddd36f0f52d4199e076b34d00b3847247e1f43dc3922f87cac4fe7a00e0a7daa0bfe6df392bb80a7256cf599e01d819b07de91c9330ec863f3922bfab1c20e4ff4be2f8bbdb526f8ca61169027d1ba29c62ea749f2301afc06f290aab28bd96e091d9f943c46b44ddb5b0343f45db335f26201ac44c6f2bc4f6a69c4455bb501562269b6e7df4dd648b306c04a204d8bce15c37e1eefd745db3411c77238b8b7d31824e61b45f9c6895bb5f87cafc5e772ad99eefb169f97b2669168dd58c7e72fad194e7a83bb29a6c7e721ad39fcca63cc236713ef1c081fabc49a038997564c7ef777300716027da2bf8b31d239c43ba63ec7c9ef10611b78bca925d67bc9ec87e82fc4ea571f282f672b4e0cbd7510f21df70b45cef5c9cfe31d86709fb4c5e75aac0531642b70ee7b0e75aec326fad2e2dfb2f55630adf39cb4868a71c5c238389c9fc8f93e9cf31d9c61a3f87b7c8ec61271a37edd10d835c137dcce5bc53ebeb071d305c4db3e5c80eba1b53881f215be8118e32621f3501e33669524a71331f57da91c336a4f36fbb8dfec70bf8718c70a9dc6b887f5f2e038babb2c01decae2f046bfe1be84c816e2eda36de1b2ffee7dcfe23148d672e26db3c5ef62be84cb17b569f1f2c3e76d2c3e5f618958880b89d7a65da8cf5dcc325e45a47d696b65f298a29f1ced0b8938c833c1bdcdf570d10e88b191988b398bcb34dd8b17b998ff7e36b817df25d2260bdfd0e038efc7e26b0dc04a24cd8e4e5e47883ac17df896f0f35de2e2b07fd36f64b1cfb16412f38d9712af4e5fcad3ae74b046885837a137c07f2ed5513e876809dfdd31bef2b8cc95333af6bf8cbf7b948b1dd529104bbffe41fe6c3de0556089184161672e07728a675700fc0d3e19aef0a61bb99278c783573abc8ccaf4e5877f17b98a78c77557f978be9aff7e0eb8b7f146f2f8af913b9deb5edc9644ebc135201ffe34afe198e7f26fb83f762fbefe672f3e676a715b6b09ffd5f13ebcad9232d99ac23211f62d8eeeb032a3bf8d01f7604c23f21dfdfd0af03be5908ff72cee33b2b8cfcb3a31bdf98de643d828312795ec1a78e17fbc9678ebeab54e798fce74d21f2364e3be304bf895aee7df9dc79ff371b525fc5137f878be017c47afd711af2fee3a9eeedfdef72ceea388dcc4df3f1fdcd3eb36fefc029f7cdb7c726ef63eb7c0f85f7c23f2c0b88175403c1f03eee1b818c69ffafb59d8b75be2a42d7c8e628e6e636c3d8ffa2c04af17827b9bd73c3eb76b715c4bc4f8dfccdfbf883fe77e12eb4cf03bbdde423c7dcbb87a20dac6787a70a34f0f6ee4f2d6089f1e4444dcb86c3c952e3d1076a91bc8d7390996d9797a6536eeaef09559b40f226288ed325b5619e7db44cbac93c3cb4c315e3bdf97cfdb9172106b8aeef095c31de03b7abdd3570e773ae94d18e57d2f5a0e77f9ca4194d7dd4839dced9373b3f7794a6da8effbc8ad0adf4bc686917b806c8ae5184dfbf4e4bef7eb01930596c36dc4ebffbacd29b78962bda39887ba9778e7a1eee5bf0ff1e11c0bee85fc22ef9b7d657a3fa2733c2f91077c3af700f88e5e1ff4e9dc838eec936ef3be17cdeb433e9d7b885f1f4674ee619f9c9bbdcf03a373b2efb76beaec231a3a2bd24e526753aef38ff8f4e03e9faedee7e8cd3e628d90d0f9477d3a2feac490183822ffa25dcce4cf1e779fb17fd3f47e77b89fdc00e45bf62ebd3e069e3de67c3f99fb01274f06e962ef8afd5e445ffb652efbc5be3c8be797706ce14be37d388bf7cd224f54d5fdc80e22afcf3c8dc8935e9d65f7e23b7a7d8a78ebf3538eec533678df8b96e3d3c45b9f9fe6d76788bc3e3fe39373b3f7794afb5f7c9d8f3515c74c771d1fc4f5c4127b333c4b769d3afeaca32bd3842f928fc9e3f551ad4bf8f5527ee5be9ae858e4409f0e3d87e8381f13479ef7e9c1f3e03b7a7dc1a7e37cedd2f425def7a23a2ed6129d0feee9f52544c75ff2c9b9d9fb3ca53a2ed6af4ec731d3ade3c98e7583a6cf098fb184cfc7d77f8fb65177b8df57e9b38b3e5b01b8b77571f1261fb6f8ee15af8c11b1464ef4fd17837b3ad678c32993991f38d7c585deefa2f11422ef627ceae756e42d591dba43f3fb57f4be673caad4ab57bc38d1b192cfe644e758eff17d7f0ff8ce02fd9413c0bd5d3ef9ef78df8bda1cd1d73f1fdc5b098ccd849c0a63b3ff6f65eb8f1152b61322bd64edd42b9adfdfa1f9fded7adfef6af98fd6751123f62afffd0c706ff1b16d5df06fbbfe2e18e54d031d4f8bf99478e3e9c788d74ef0b1c3fe35bcef85613c1df541dfec62469fdd02b814fce781f7ffd716e1df77d694ff16b5efabb4858f203a7e25fffd51dff78f82ef2c3e9e863acec7e2733ff7be17d57131563c1fdc5b098c31859c0a63ccffefbaa5aa1b9ef8d658ef63b658a4f7bfb6a87af8ebacf9fdff73fe3d634630beb2446cc635deefd0fec1b5fcf724fb0705ddbcef85a17f20da15b88fe1ff6b7b0c62fea331fea0eff4bfbaa9987f9f3fc7ba1a700a6da7dfbf88f56fc41e7949f66f0a7778dfab8efe8d760cc3ffea68f2311cffab8fde71f71ddeef3df10dd46729e289c7f36b3c3f6cac585411832262575e73b122af01f954e25b6f74de5d26d606dc44583d5fc2cf9358b200c7b044dc62b718696fe4787cffe32562bd03b75f16af9b169fb38c8ead5fe73c16817bfabb2c563b56fec4fa1b1163288bbb8cf5fdddcebbfe73354af8fee725227654c443701fa725e650df231efb1c792f463e44dcceedb175c412fed8b740f9bfe5c875b05847c979b4ee04bf53398e00f7f4fa26c0789363acf07dfb36fff630702fdea7cf0f06f7f4fa06c07c83633eeac37c877f7b21b817ef434cfe7da9887be773e316ef535a0ff2fccad61cdeef2d7b22f6463cd7f7bba8fb67ca7f176d5c159f85f8fe529037f8fb43def7a2ba70a94f1764b175778234459b25faafdce6588fbadfad10f1d0a25d8ea743109fcaf22e976d15b8a7bc8bfec363294cfb717e1573dbdbbdb2447544f0b5dec79746dd89193f2cd611dc943c86752ec04a600d83f594570723eff33c17807bbb1cca844e8bfed1b3fcfa9c1727f229f1dacd4f13e06c479cf212f1151f70ecc5e09ecab6c6c12d1375fc797e8d1143ac9a368cfd8c7cc4e53814dc430e3e24defedf27bef73fe1985df9fd4e1fe73b9d7c2d1775f10552b58d14efd505ffa6d78fc1b38f39ce3620174cf763e2ed638bf7791b195d0f1087230faeb0152ffa3064b1a0622eff562f7f96888759a026474c3d7f45c2a19dd7153bbc9c582fbb72aee06d82f5aaefb7786989b1cc673e7dfdcc49f3902c07ff10b1064ae8e22371f0fd6baf3ee7f867827b8a7f09f1d4e9689f99afbd2a17fcbf463c6b2ba2f3e45f10efd86d30784eaf5ffaf4e64b27dd28eeeb5edc2a7b387c4dbcf543ec03f80d9013ca23f61b14fb735ce67bde01e8dd1bbe6fbf72cb33ba86e42baf5c96188b8a7693f723acb792cb47ccb535f1ca58f68cafbb8e7cebd3a76f1dde2bb8fdabe0e56ef1fe1199153b2deb5d1ffe771cff72704f7f07eb6ac43929166f0bad0fbd189ebd2d8fe238dfbbdf47f787e4f6cafac0fded1831e679077c47efdf07f9016d8bb20df8c849c7bfe77ba590498c91c05e3952de3e7670fc7b7cafcc54c4e16bc9c41ee0d6a7cebdd803dc12ed84d86382ef231af9c1cb8325e67c7e74d38bfc009ed177fdfb7bc7914dfaec688ef9934f0f7f72f24fbb6e54fe55a21f23f4f0a8383c88fefccfe03d9116d88b326af77e759f457e01cfe8f5372edb56706fcbb67a830ff777fede45206d7afd833fbf02dc0bdb43efffe4bfcff3e1fd0d64fa93a729da9a2f7c69fcc531f81aecd5623ddcdbe0f7ba404ef14c60886f41faec4a9f5fc9cb60b837cd7865202d17b11fec03eadf46fee1f214837b7afdd7a73bff3a5cad19eec8bd46ac27177afa50ecb405aec56d7ae43f8ebf1adcd3dfbf0678609c91687ee805e687dd83742dd116c4da7359f46f78bb9511e1df5c05eee9d572f36c7dcb9f65b8cfd8eff45a8378da69a1a31935c1bb35c1bbf45a8b78fa9aecdefeedb0e13e6cf15d6de2f13765f0bd522cde3664d4e1bf73bfb0a8a31975810c75c0337aadc7bfb906dcdb321c3acad181c35a2069d5e7df9d01ee619a0df8efd7827b8abbc3fb7e4643fede75e05e700c71aef7e2f8e5ca6804f2d88897c193b1f555f02afa10ec1ef8ebd66ef0e6291e5eccf64eb49f62ef59dece6534261e9f10bba7bf27eadbe2ed92c5f734ce68e22b17718603189f288f85457f4963ff63eb57272f03c49e1b93f8f567754c8bcf256534251efbc5ee6ddd58c7f7ff3a5cac4f16fb7572bb6df1be42467b2ff751dd057dd80cb1bfd0efe099e8fbffe13eb384edfbd32db70d628f0b31a698113baf225fd6bf3c9d66beb2e47bc5663407b2f0fd31325af8b868e17071441d479623450c33b7c1116edf22962befb1f97239e8ab0cbb1491b3a54f4ebe477706d8eb3a83effd9ad1d627675b2ee736af9c11d1a6d4f0ca1bf8324b800b8b9f4f9c01f6e58eea34d8375b7016a909be03e510fdbd16c090fd2eda8d65bee7a22d68e793b91d289bbae0df09f011d38e88b15a5d758c08dfbb9aed3540efc17e9f16ef7765ece696e3c64de0197d5fb4371d795ec5b95ea29dee04f0b88f212313c829deeb0c38e90c30e9b50bf1b6e75d1cdd3e668157f6e8775d89b73de77e8f8c6ec45b47ba3938473f0864057cb27b30f66572c37c74e7bf1f0bee295e3787ab638622f2f5f0ca17fd3dd3f7bb18ab8bba08f6fbac82d9d3fb8dc08ae6259378dae0a86c03419a18760f39763c1e441a511c50eee25954bece5ef98ecaf79609dbe342b53dfb80636411cfdc0abba7f2095f061f9358efc74e43e045785f2ac2fb4319bb73fc1bc13dbdf6229ebe6b86a8af42e77b13cf388bdddb726dd8eec3e9e3c311678c08eefa12cf7c6af43bb1cf97f077dfe470bbe1056f7ee2e55b6a37787f2a22f6b3e263488bdbf98c7ec433afc0eee9ef626c19e3dc34d676d26fb2f9bb15e09e5e7388b71ee738bc1dcbe73f8f13f1c14df9b5990f579ce1ec6febc039ca1983417eea82df455e1368eba26379129bdf88e86b88fcf5e7f255827bfa5e4b378d13c5beeba2bf9eebe324d7e1e438defe1f2ffcb5a28d6a03f229c6e16d7d720cf4c921faeb125f59a4b59737e117cb184abc7e1c19d722bd3dc033619fe2f09f21f6ebd5e1bf1d4928df910e6e1a278a3d2f789f2863009089efdd9d21ce6a5f0ceeed3239a1d0fb5e5cf9783b18d94d52669d7cb20ff1c92ee66577b13293f2d4c027af382bf54c706ff3bf51f84285bfabbe2bc7c6efbd5811311e3f4f51964ce2d6592a93f0870c275e7f88f061757165a05b21b1679d895bc755b9e8e04b77a42f5d7eee74c608a04ba29f04ceb3cee0fdf58c513e1e441b361abc3b1abc4baf62fd5401b8b7f9dff4a80f5b7c379678fb6d63791e846f248fc8fd30e3800c79e019bd8e275e3fcc7847869376385c6fda82a4358178fbee137c694e245e3fcc449eb7e9def7332611af1f6612e018e25cefc3f1c99501f62c66ff16b627961f86f31aed278c269e3ed649befa120f4faa677c9e2103ec4dcc74993e037b0767f0f5ec19e2dc54bf1e81b5f7ecdfe25d7a9de6d3a3690e47a766f9b0c577e25cd5d3c13d958bef9b9021ce45f5eb11d8073863067846af620c780db8b76538a589c3250d5d93a695efd3a37c5f9ae21cd36bc17d0d8027fac1e05cd38c3980737a15e7706e03f7340dd13fdf8fff7e38b8af5155e68cfd411afcec4c668362e9d8549f8e4df5ead8c9befcc6c3f33eab69b13da4279222524056906ce6aca0bddb396426194bfa91d9a4902c2765f6bfc6dad765f67fce9d782ebeec4332e37cc3fcd4acd5b1fff464c95692b5f6a745ce393ab3ec9b0afb5191fd3ec598647f534906905c86bdccfe6d918d534e4a49095948dab2733344ea63d9df05f61b250cf4e68c2a49dc5d25092a5ca9fd5f91fd59a5fd2115b2c27e3ec17e5266ff5f6e3f5b64df4fb6aff4ab05a43f996bffe7459963275b4a56da77f9f6df2b18de025becaa6fc6cbd281f653ff37336dcc3226dd32fb892074857d5fca249cc5fe5ec5242d62d24fb29f55dacf686e16db4ab39cac61a955cd7bb9fd6f599af99c32b98c072a3db7d8d6f4a298f2ecdc50e9b3992efeaf44aaa34428f5b56ece70aa618d6ce6a53cb14a49fc8f43c7c85007e6248ed19f5166799ee5926ce6e39c598541f53c56cda15cbf1dbe07938131f322678616777b9603b784ef7c7cf2cef7776efeb8a6376b03483673cf768893b558c452bc2c767a9a4a166ad6ac914305f5d36fc9e867d368b3d248bff35e097b4fbd006ab1c6cf5b00ec08b07cdbaa4d078de76c267c2913cd9f9971b6e045ec09fd75b4fd6b21b396eef32a65994313aecd8aa36a631b2f4b5881446405c27cf3f9d5521fe6c6b185f222a913cd855b24d9ac07d52686e26269b1ae550ddebf1255eb888d43ace24e97d77dfdc9052d2fea3abbd1f6dba795e59ffee5ce9af272aac7ca2999d4b192ca909554bd74579df86d45ac72aa1fcd975b4ef48f9cc30688aec7930163b0868cc1fae9d675fadb72865260bfabce2175acf7f69b1f39818d10258c2f0246614d09853994c2c612a948cdba3ea9a84008722d59e134a89e863939e5a6a3dcd63e0a6aa2cadd3466bbaaaadab565ecb129980546d913e3c559f6c0601ffbb702fbfd22d6f9a4cfa7db880576da146f344bc11d637abf88cd2c9d9be8eb6756ca6a73c66a3730fad5950c63bc8e84f11caaaf2d246ac06c9cbf3234c52b435dac9ab5d4ad66f530e456bac8f531e4d6bac80d30e436bac80d65d586cd58ce4b4bb571dd2ce25f63ec6f97d89959c57a832bedef656e99d8d5a56dc2d5a51dab2e9944e62c529308ab268d6465471fb69709e92fba7678d135c6803b680237c1b4ada3aeb635c544de4d53e46698c89d74456e8e899ca929720b0cb8b326704b599566ca92de11a63314a338ea3d093a37d029e16e7257820d0963cb8055d956b2a2a1369836abba2d5b6b59f1344977f1e4314bb630c9e2a1d3169d253ce045d40329a278726045d446564454c97b629ae32fa2ae7811b5c5ca3f2b05e5df0e03df3d05e0ed315a7aa580960e32cd65267da951cd9d6d3f73a644c6b15f4b981fddc55cceee696ac2a310eb0baabf53ec6ba12d219525b6a6f78ee619f855586b43431bcc4ac603ba9c3fb511374b5f56b1cc0b8355c48e328da32d2f0de5d26a7977c390b375913b61c839bac89918727f5de4ce32643ae8a5215c559cb1746c36cd2ecd99f6a312368a2bac9a5a6d3cb52e98911a900223d515031f9802f06e3270ca2b0dabd2e9567597593fd63b9c6bd4fa7987f103589b5960bf5d00fe25e612fd43f80171acdb609975631dd34ec4ef40504d794822d66b28b35efa8961d6a907a60dc334b5a127a6c37ba44087b3302bb2a7ae15d91d137b780ac4ee2503a7ee9611d1975df0ffec3f55c01be0e0bd31c9474a249f54145192bc0f46f85eba84f7c59047e922f793d92336f63b2a2df6285e50cd043b5b34b569762ffe60e2444354ed8a88a88a99f6b59849419f2f22450904e3c4b66da365b68d8decc6017353fdb9a0215111660cc7326348cb15eb98c9a451efc8c94d711e4b3d58dc60663d1bb334e32496e60d99198b616972b02a3b5eb7caf69721d32a3b41a2ab395457699c673dd60c5549270f4f2757661a98dfe1d06a350dcecc0ec52b66716e0ede54fb5a495633555d0aa6fff3ed77caed348a3c2d7e72c680c6d376f4779289f3475e1df666d5616402d5c164aeb00a3040a649b43f4f833dab8c06a8b36426996e23cf67d5f010f698b2e4946e097bb5841ccafa594ec89aca6861a04c1a3ab340436ee3f6b29ae3c08330e0299ac08365c0b48e4fd5ade34364c8d4dad07064dd1ed6504cece9ba620fc32cea0c8945fddb52b3a87b60e03325e0db236ae07b62556156223a1243ab8763c0f9b23a46878763593441a6fdff72fb0beacc2c60b53f933586ae35c864a14ee5acc1ee03de5f6ebfe18488aac83902538ad9ba4a31122bb7399272fb59b1dcf6c2c0f795804fcc50031f8595dd7eb2b2eb4f9c5691764b96f0b6cd6b0d33d9c83393c567afe4fe145a7215ac5c33c96176afe170fb5a69bf9dc9da8152f61bfd372d696a6b55ca743426fffe32f9eb01f9a7030955521c83d9ad032476cb52b45b6365e0b4e33397201d1f3afbacdef1c9c3683b50461b755d8eb3bb2fb4e7ba92bd3f8b294051b4af5c98a206729c44ae6c36855146aab34346470b349abdc2138f99cfd2762329753a5e748187bfe325fec83b5ef309ed78e592f81daf54488f75b0c663467581c4a85a2a4675820c99d68502ac2e2c4caa2e4c94e91c9bd95a51ad3a87d7a8990c9bd63cfd0eff223b8f19fed13f9b7a1b988066a54ac6de16350af4fd459cb90a6a4cebb2425dcb841ecb264029f9ac4ac8eb4421ab13e9941cab1793b056bb48d26adf5653add5de5ba6b26c4ab3bc5a55368f21a4436d8b656acbe65d072750f8a994b3139b43aa6046b5901b55c77477b2a81d742a5991fd9c1a5ef87b6f8b8ed0687f693ce37b19639ee6af808d7b31255fcc943cddf9c4147d1fac0158226900947ad593b12a5422a9427f2b56a12998d807eb8a3d15137ba944ec75b5d4c49e8681974ac027d756039f2e03a78699eec8a433429c8101d35e5d95ee269d9914e38445be91e242365610e3bf42f664adfd77a9fd6c1183c8640bd844c4ae8a9433316e974bb86da2c8ed2c8c82159adce6cb80a97a1e9208708c99bbd932e096cca221fd2fbab18c7aff6b0e467ba584f64b1469df17abe62b75abf97e18f22a5de4fd31e4d5bac80760c86b7491e7ca906921ae9514220d5a5729c47918f8a112f07c45f003b18a7998cc3675b76f47834eaa337c72fd1a0576cfa492599e4c5b119c36b7d0e31f29669126cea059a59e1f84c9b94e26a7b35e9eae4ba07d8a02e643a3294eb35b219554e763d41f2ea17e9322f50b30f02324e09f2b8217607c1d29e3ab4d9c722d64e1eceed3fef653151e1762d2ac9749436fdd725349671146e951124ab7d453a3b410cbc4d1b24c3423a219dfc3a66c2a73f815f0b5feab5833ae4e631126c1313209a8659b1ced184c4fb25b508c51ba4142e92b8a942ec62cf2b1ba16790926f67132a3595f4dec124cece375c53e58864c7b1d2710a4d7b19124d3eb588aa5732296ce4949a5538a31b54997a96558019f2c29e0510dd40ab80c033f4502be4e117c39067eaa04fc5145f01518f86912f00e0dd5c00fc1c04f9780172a829763e06748c0cf5304afc0c0cf94805fad085e8929f959ba4abe1213fb6c89d82d1aa989bd0a13fb1c5db1574b90b35904783ad7aef8a39fd4d6aed0ed69135b1b48371f93ad5989973ee6525a232b17da429f2f1349a1295f8b69d305126ddaa958090ec5c0374bc0e729aaea6118f81609f8098ae0eb30f00b25e04d1aab811f8e15e6459a857904067c3191f405fb30ed5cceea18edce17b16d6ccad8bfcad85662456ce2ba80e9beeb701213d7745fa44caebde55ca74b6d85ea673f5591fa484cea4b64525393419db86ebfd9194a3ac310595c6126e9c97bdd3d95e45a8fe9c0a5121db84d51c18ec2327d99a60e1c2db3b36c3d4c89513b8bc591e633e73dddc7ac9869cab214afb2ba3c619bbc95d9641a556d4e56cc7e1f232b6edab7be82207deb2bedffeb519195fad61b309dbd4aa2b30315edd6b118f8d512f0fd14c18fc3c0af91806f50043f5e064ebb3574534cad6ecd0998d8d749c4eed3444dec8d98d8d7eb8a7da20c99be7f4322e627868bfc244cd16fc4149dee19af3e88dc84d9cf6d9af6f3640c989e752d0d9f9a1b758939de9b0315dbbf533015ba45a2426729aad0a918f8ad12f06714c14fc30afb36acb06f4faab04fc7b4f50e4d6d3d0303be5313f84c4c8beed254cfb330e0bb3581cf9601d3b2a767a2fb83f828804a10df399816de2bd1c29f9baa69e1b932706a25e929175a56f23c4cecfb2462b768a626f6f918f8fd12f0a18ae0176035f301ac663e9854cddc8ca9e34344622de9f2d0f9f67f7412854e4f2f26d379e84a89dd93a4bfac60a30dda8757d1dd2d98140fcba4681e9522c7fe7b1971a6379c0093e465b81093e111990ccdb80c03ecff17b1fe34fd668dfd77f2125c8449f0a84c823aa02ce83214dae35549ed624c7d1f93a86f8de66aea7b09a6be8f63eafb4452ea7b2966f476488c5e86a2d1bb0c63e84909430f2a32743906fe9404fc0345f0ad18f8d3b2b26da1067e0556b6cf6065fb6c52657b25561d9e8b659a72536c9aaec2a4783eb669ea9f42d3743526c30bb14cd3c0149aa66b30095e8c679af665e9a985cc5f8ba9ef4b12f57d41517dafc3d4f7654c7d5f494a7dafc728a3672ee874f46ec0d8794dc2cebc966aecdc88b1f33ac6ce1b49b173139689372599b84d3113db30eadfd2a4fe664ceab725523768a526f52d18f5ef60d4bf9b14f5b76299784f9289eb1533711b06febe04fc1945f0db31f00f24e0df2b82df81d1ff2146ff4749d17f27a69c1f9318cdda8014376b776152ec9449e1366bb9296cd6eec664f844268368d606a5b059bb0793e05399047589dbac8d637326cb15e36eeec514f83389026f6fada6c0db3105fe1c53e02f9252e0fbb04c7c29c9c4c0366a99b81f03ff4a027e9622f80332705a5cf4984f9d76e1414cea6f2452d768ab26f5433270ea1ef99668ba471ec6c4fe4e22761f45b11fc1c8fe5e56b7682c47ecc8ba7cfbd5152cf66d31b33be52cf0d4594055c8e62ca71367537767f16d81fdb4902dcb5dc2ee85dd2c200bf98c627f36a32816eeae25cefebe996c46df39af2793cd2615f2e5dc4bd9930af656114096cf5996f0b95738cba91a20fb2856403f480a68b862013d8681ff28015fa008feb80c9c1aa39f3063f47352c6e8092c13bfc8186aa796891d18f8af12f04c45f02765e0b4b2fe9688318ae1ba7e4a029ccdb63dac9e09e4aadb02a57602f977195fd209647ac268ec09647d59b109e4a7315dfa5356db1475e91919386d22fed26d229ec590ffd6457e0e6b1ffe4944ff6318cde765fa9f491f16578bfeeb6cd8155bf3ff4d58f3ff639adf2b86e6eb6d2b262f891730e5a19b486829cf8b98f258969ef2bc8455537a34b8bf9aded55ead9abe8c499d6149ba44b4b51ccd065a456ccd846cb54d26eb2e652a0646bd82c951432607ddf0430dff550cbfa666e9bc8601d792094ef5876e849bcffa844bc978a6c4b45fb644b927f6ba2c65aa17b5257a31bd839a5ebc8165ab8e265f6f6252d795485dd8514deab730a9eb618521c22c9caeb1371c51255b6f6329d797a54c1d07cee174d9d1736db2a39bbf4cb3eb5621515d40f30e2641039904ada5124c66ffaa642be59d014472eba3dec564692893a57d82b2543df84445a6f730c56b2451bc0dbba929defb58861b6b56970f30e0269ac01f62c04d35813fc2786e26e179ab22cf1f63e0cd25e04b3aa981efc42869a149c92732606a7d5a26021c635cf5a90c9836d2ad2c6448dbda4a6648fb19467b1b09eda33aabd1fe399689b65826da2595892fb04cb4976462bd6226bec4c03b48c0afefa206fe15a6981d65e6942ec69f49e0762885acbb2e0c7916d99d357865fc6f6fb47d26bb739a9f3e6c9b07fa8b30b9152c1a3f93196677b9b3e39fa20b7757106f6cbc4887faa59c26b6386ace3399312f548c6cfc1ae36237191774c74eb8a79ad361751b5877e9f16a2661297157cc3af25199e321e4da6fabae50f80653984e1285f95b511bbfc5aa542656a53a2755a5bec332d14592894c45adff1e2be9aeb292a60b12e5ded6b9dc4f4b5778d0818ab3154fac32cd8af9ebee2c1ad7f1d0ba7aedad01cb9966086facf7b74aa65795925ab49049b81cf8721dece57ca0aba25f3fc8d8a347ef74b3f48fdef91103ef9e02f09f64e0544f7a58fa5bd6fe8c81f74c01f82f32707a96569645f003aafc09f4c013f8154b60f71425f01b56b0bd5250b0bf63e0bd5300fe0706de2705e07f6276aeafc4cefddc4dcdcefd8581f793806f5304ff1ba3255b42cbb3cf3c334285967f30c97324924fecae26f9bf18787f09780345f0ff64e0d40d98abeb06241622f60089d827288a6dc9c0d9514529b05e110c7c9004dc5204cfc068192ceb1f2bd25243064e957c480aea7e4d0c7c680ac06b61b40c93d0f282222db5b102dd2305da520703df3305e075315a864b68a9d1438d967a18f80899075211bc3e063e52025ea908de4006cece05d2b55a0d31b147c9f45051ec4698aa8c96a88a6a447c634cf231b2a65951f22698e46353a0e44d31c9f364beac9e6a9237c3c0c749c0b72b8237c768199f8296a20526f90489e4ebb2d4246f89814f9480d751046f85814f9280d3b3cf54c05b63e07bcb1a5045c9db60e0fb48c0072a4ade16039f2cd37345f076982a4e49410d6d8f35fd5353d0f477c0689926a165b2222d1d25e0d99ded5b8bee379aae9d716613e730a20176eae29057b5dd71a64bfc55d9ec34d0b655f291486a336cbc3a148e92f6bd4d6a875e76ddb7ffdf6effdfa037c136839e69d1417c726962a108bb610a304ba2002d7aa92940270c3c5f023e4a113c13039f2d012f5504ef8c55ba3929a8745d30f07da5e0ebf75201ef8ad1b29f8496d31469e98619bafd25862ea268e8ba63921f2091fc3645c97b60e07325e01f2882f7c4c0e7c9460abdd5c0b330f00325e0398ae0bb63057a90a4406b2816682f4cf2f912c9f31525ef8d812f9080dfa508de47064efddc0532af3ff57dd2b0b0a52c7463359b6b7263b6d5773eed8ba5be50963a5d7d2122799cf935fa8d4a7afd302a17c9868b8a5466631a569882be510e26799144f2771425ef8f8117cb7ad27dd4c07331f0c512f0e18ae00330f02512f0b314c107cac0e9e6652556027104e7e1c08330a90f9648fd4a5f35a907636ab834056a380493bc543672c956937c28660d96c9ac813d8806b6a790cddd2d62f37b85d1bde4e87515fba484cdf8b9c7b1b9b3ce4e9077b9ddcf54b124c33059cb64b23a27ec2e8f5a2f9594f6c0525a2e4ba9317baf8ce5b1c4e680da48da379ec17e568da4d9132bee1592e26e90a356dcc3b18c1d22cb58674f71c72e487f7c61011161032a991f81c9578e358dcec4b788a9d38b9f1b89515f21a13e4f91fabd30f04a09f8c4fe6ae0a330de56ca78ebe529d7c9ace42a89b3f8aa9c951d2d41ba1ea38245a38b186851eade92762bbb0ad7a33189576155cc3d704e56d954d21e83a5bd1ad332e7f4e0f9293909612c96fa1a59ea74404e97bfd24d77e24941df2b27aa71bd79983c6b65f2b400f214454b642a0f784a7e51f0384c8a436552d40752d06073573754d21c8f55c9c32455f2855cb52a3901cbd03a5986b2e2544979d5a3854d6380d6f2a35197b2089c15bc2d56a1622246c5e1122a3629523109eb1e1d9182eed1de3270aa1f475a9a3346fb6062af4f81d8933137cd5129f0014dc138395a9793a93264fafe3189f4cf63c4f94ec31470834401e70d5253c0e918f8b112f0af15c16760641fa74bf64c8cece335c99e85019fa0099c2f03a651991ba33ff8a2324fb49289ca9c8d15e84992025d3258ad40e760967b537ccbed1c48de937781c55a78670422222a698ca51ba5e9c44ec23390d53a33fb62d29e8c75a4f25987dd7ff27232e3a4fd300b794a0a2ce4fe58199f2a29e3ed8a657c00067e9a04bcc91035f0b958919c2e2b12679d925011b181412968dce9fd42d6cb75fa7a2a45340fcbe81932ef8162460fc4c0cf940d9814c10fc2c0cf9280af53049f8f819f2debfa29822fc0aac539926aa13a915180497eae44f20f14255f88819f2701cf1aaa06be08033f5f02be4111bc10ab731760a3aa78756e119f24a6c651bdde156199dd2cc9ecf78a992dc6c0b748c0af57045f8c815f28016f314c0d7c09067e91047ca8227809067eb1047c3f45f083b16ede25baddbca598d897ca4a5351ec520cfc3209b8dd8551025f86815f2e019fac085e86816f9580af50045f8e7554afc03aaa5726d5515d8199a5abb0de99d8774ef41a9377a91c82a57db52ced46c475a938bd581a0b539a54bfb01c2bba6b2445377c4fb5a2abc0b275ad2c5bb4e8dceef96a52e05b05efed04abd9f84a4c92eb6492d0dbd1d17e9c4a3a2bb1fec4f529e866afc2caea0649599da65856ab65e054981b131968f6c581d76094dc94024ad662946c93f58246a851722866796ec62ccf2d49599ec3b0f6ea56ddf66a1de63db84dd37b703826f2edba221f8195e81d9212ed3052ad448fc4c0ef9435b18ae0eb3145bf2b058a7e14563defd6ac9e476352df9302a98fc1f8be57367653ac9e1b30f0ed12f07cc5c23c1603bf4f02be6d2f35f0e330f0fb25e06729821f8f813f20012f54043f01037f50027ec92835f08d18f843b251a722f88918f8c3326d51043f09037f44369c19a306be09ebbb3c2aebbbd053cd4b24b3ae341478258f09a04bbb939d0d3e19b3178f49ec85a5682f4e918067d3d993b4468ac3adde928b147f5cd241c8ee46a491e289a4f6848d57ab3671fef473fed446a2c37758f2e8f044d2c1a2c34fc50afdc9143412a761e04fa5c007773a56339f96d4cc05796a35f30cac663e23ab996e2c87f063153185ade493c2ee1cbd3b89bc9aa9732918073975970e314b581c8d5aed3d1393f8596ca0e99fe09e42a88f6d09dbdd5025e5b3b0cef4735867faf9a43ad36763daf4420aecd3399836bd2873b88d57d3a673b13ef54bba7deaf3304e5e4e0127e7639cbc22e164c704354e2ec0247f3505b6613326f96b12c9d7edad26f9164cf2d72592abae33bd1093fc0d99559baa26f945584d7d13aba96f2555532fc6187a3b050c5d8231f48e84a1bc196a0c5d8a59d1776556b435f1c666c2dd499d6966bf6f4bc5ae5e86c9f21ee6d99a196d3b54d2b91c2badf753505a5b31f00f24e03514c1afc0c03f9480d75604bf1203ff48025e5311fc2a4c893f962871b7623525be1a539c9d32c5a19d7059ac9b6cc3d2d4c5ba5d8311f0898480f50bd508b8162bba4f535074d761e09fa500fc7a8c96cf25b4d459a246cb0d98f9ff0233ff5f2665fe6fc432f19524130315337113d697fa5ab72fb50d13fb1b99934251ec9b31f06f25e09f2b82df8255f8ef64159e9667ec56cb1d83c0e34254aaf7ad9844df63a39149fc58237a621efd8146144fb265526d356fc388fe41427456891ad1b763caf7a3aef2dd2143a6efff64e9f9f3efc44ae2e74480639da38571f18b2e17776345f8aba408f3158bf01e0cfc3709f83645f07b31b27f97a97d0be23ff9c7393da78c2ff8709c7887125557c0764c8a3f6452d013ce46b328497f2f600efbbb842d3a5295e13e8ce63f25346f5faa46f3fd3270da8ff94bd69051efdcdfd4cd46a1e81fee63f32748dd6b48820f60b9f947921ba2989b07b166f95fac59fe2fa966f9214c2de8f0ba8a5a50d6c6b2755ce20c8cc5d16e61bfa817ab98b95d97f17622d773ac147d3240b9e57818a3da8a54a5fa6745aa1fc16c5624a269b31ec5ec774644cf7e3f86f15143c2c78a52353e1ec7c06b4ac0bf56047f02d3b75a327d1be931868bd80fa56421a1c7882d654310b19df33266a696b1f90f3aba763cac6bec6188e302777a32f098b385646574f8e2ddaedad55a151ddd81a9516d5d357a1253a33a9a6af414366aa91bd1f7f33f2d03a7d355f52274f3f0aae0d204e6e3093c83e9697d899e6696a9e9e9b3989e3690e96917e2fafafdf36ece9a4db13934fd777fa07d22ee497dbb88e730091bca24a4bc94f09eb37baa4585528acf6384379210be4591f01730f0c612f0fd96ab81bf88813791a9ca0a35f097b0a6ba690469aa9b459269aa5fc66a6bf314d4d65730865ac8ca5691a15731c95b4a24ffcffea322f96b98e4ad24926f3b444df2d731f0d612f03ae56ae06f60e06d24e0e72982bf8981b7958037a850037f0b036f27017f4151f2b731c3d65e66d8a48a1eeba8220cbd830cbd76d4b0672761a2dfc568ea28a1e91dc532780f03df4d023eb4520dfc7d8ca54e897439629d298401676a027f88d1d159424707453a3ec2c0bb48c02f5104ff1803ef2a01ff5c117c2706de4d029eb3520dfc13ac30bbcbea52258977a6b13b804cfe1c63e730aff99e9391837daaf1a75811f59014d128c522fa0c2ba29eb222723615f31f2cad9299cfb1ce5016d619da3da9ced01758be7ac9f2455b896ca57c7c89e1f7c67ad732c55349f12b2cc53eb2145b494b6a0a53c80aee99717f5153c8af3149faca24a10834d04ed5607f234925bbbb7d6bcd20e90bfecbb7efa88f403de8af5f849e1be92583a9b1344c2f3b42c3f45a56c959acf4b1f0bc6f65e5436f7322f44031af487b4f39aaf6960ecf46aa144d4dbc68bec314a0bf4c011a1212dde0a6d87e4857483999520d36fd1eb384b9124bf8e8616a96f0072c53036499a2254537775cc21b07311706a3f6dca3c65432f92326c740991c8d517285ef4b25ed9f301fd5205d1fd5cfd8106f700a06a7bfc8c0d9191b11fd2d597ec5946ea844e94e5ba7a674bf61e0c324e0eb0e5703ff1dd3a43d34fbd27fc880a969de3311606aea10e03f65c099f6edf04480ffc325fe0ba36284ac52518d776359ca920c8dff1b4b7324de4caaafd8fc07a36c2f4dcafec5c41f25139feeb5e63dc4cebf4d895a6fe73fac628c96548c3e47a8550c12918053e33546d3616ec980692ec76ad6b808069c272b0c6a2a4577d3dd0358a7383264e9b3233b64c3c423d58aa30696b9f1b2ccb991286e88993b2084877a8ae30d9d619c4a766b62124dc0fa026201b66cad4df20bc16b61724c8cd517e89f9245e8b5b1b42761265370e0040624b3fcbc0e96e6deb234e18e86f2b493db57b1ae4c0aaabffba4a0af520fab49932535e9f7f56a35a93e26f9941448de40064edf9f9a88718bb1e6b4a104389b1e0499d6919e13b7509ec4486f5a841e2eeacd7f3f649c371d19e7c54a1d1be73592f146777ab6e6a79137e73dc7a3308bedba53623f99c6563239fbcf5624c1e98c5893c05266673266bb56c979b2f261ac37c66cd42c998da2abbce692e10cb994a18fb0071be36c4607107a30cb4032d2be9b69ff37cdfe7f38c9066f8eb419725abab9dcf5792049666fe62698c4f932893b4825ceb1ff1bcafeceb1e5723a1755a55591aa29660867cb1cf2c7a919c2665896e7605d0ab9ff169e165eb5b3a192dde65876f7956477bd62765b601ddafd343bb42d65c09decdbfd1301fe03076e85d171806c3ef978353a5a63a53f5756fa998444cda1739ab5df7d23ef68c2adb55534a10d26dd3c2c74c4a96ef444a74296ea6c66ba4a9999f61b76c7e93b8b1b3c670b34fa8d8a846db1c2395036abad5838ed30f08324e0e40435f0f6584598af59113a601561816645e888d15120a163fa46353a76c3546da14cd5062baada381e3f57ce9f94b15147295342a7ff5d01fead3700ed84d1b44842d37645adc9c4c00b25e0f34e5403ef8ca96491a64a76c1fae3c59afdf1ae32607abb58327ff0dad57bffdc66ee171fa9cc1f74c312582249a062e3199fbcd76ad15c9504ba637a5f22d37bb1819a7c82422d06ae872c653a383e58d783de13435eaa8b9c852197ea22ef8e8d4797a5603cda0b2be4324d675b6f8c8fe5ba7cf4c19057e822f7c5900fd145ee872197eb226763c815bac8391872a52e727f4ce9566a2a5d2e26f22a5d9107c890e9a4ecea44446e8e030fc4445ea32bf2208ce5b59a2c0fc6443e5457e42118f261bac84331e475bac8c330e4c37591f7c074ee084d9ddb1313f9485d9187633ab75e53e74660c04769028fc4b8385a978bbdb03eeb319a7dd651588760430a3a04a3313e8ed5e5630cc6c7719a7c8c950167dab7c727021c63f6360f53ba1334956e1c06bc5113783c567a27ea96de04acf44ed22cbd8958e96dd22cbd4918c9276b92bc37067c8a26f03e58e99daa5b7a93b1d23b4db3f4a660a577ba66e94dc5483e4393e46918f0999ac0d3b1d23b4bb7f4664890b3e9c93bd6c1c4e41cd56cbe207e2d19175d8b4c31656e7e3afb83bd2fe6a3a6b01dee1ccf55ec99abb313298bb1386333b1b23847b72c66c99077b36fcf4d44e4ad38703ea697e769eae56c0cf87c4de03958ddbf40b3eeef8b95de66ddd2db0fe3628b2617fb63c0176a021f807171912e177331e48b7591e761645ca249c68118f0a59ac0076143adcb34875af331892fd794780126f1564d890b3089afd094782126f1959a122fc280afd2042ec4a8b85a938a224ce26b34252ec68686d7a66068b818a3e33a4d3a9660745caf49470966e26ed03571076344df9802a2976262dfa42b762926f6b61488bd0c13fb665db1cb30e45b7491976384dc9a0242566062dfa62bf62118f2edbac8e55825bf43b3925760c0776a025762c0776902afc480efd6045e8501dfa309bc1a03be5713788d0c98864a6f8fe82f0e5a8b81df9702f04365e074a1c5fdf60f9d25e0d2047ae0091c8649ff400aa45f8799a70753609e0ec78cc843ba46e4080cf9615de42365c8ec54908824f0494648acd386305d793445ba7214a62b8fa540578ec6a47f3c45d21f8349ff440aa4df8081ef4801f8b1985d7c52d32e1e8749fd540aa43e1eab454febd6a21330e46774913762c8cfea229f8899c2e752600a4fc2c47e5e57ec4d98e7fd054dcffbc998c82fea8a7c0a86fc922ef2a932e48ef6edcb8990711e0e7c1ac6f22b9a2c9f8e69ddab29d0ba3324e0d9bbdbb7d63c62d2af3fc7461bcbdec823fbd822f6b3af749d5d01f857befd05dda6a58c79e99d2fc4fbb17df7afd9b9caf031934d97705899ec995eda4d19b21b5d4890239b5e8fd0952ca948115bc37226d6a8bca1d9a89c85d5bf3775ebdfd998c86f698a7c0e26f2dbba229f8b21bfa38b7c1e86fcae2ef2f918f27bbac8176005f8be66016ec644fe4057e42d18f287bac81762647ca449c64598c81feb8a7c31d600eed46c002fc11ac04f341bc04b312e3ed5e5e23219326d2d3f4b44e418a1f797636df6e72968b3b762527fa129f51598d45fa640ea2bb152fc4ab714afc214ef6b4dc5bb1a13f91b5d91afc144fe5653e46b3191bfd315f93a0cf97b5de4eb31b5fb21056a770306fe630ac06fc438f94997939b30b17f4e81d8db64e0d40bf04b22da17e3a8849bb1e6f057cde6f0160cf8374de05bb112fc5db7046fc390ffd045be1dd38d3f53a01b7760e07fa500fc4e8c93bf7539b90b13fb9f14887d37565ffed5ac2ff76052ff9702a9efc5c0e9397ebae0dbb192b432344bf23e0c39a28b7c3f4648460a08790003af9102f007314e6aea72f2102676ad1488fd30566f6a67e8d59b4730a9eba440ea4731f0ba29007f0c2bc97aba25f938865c5f17f909acb3da2091628cd159dd8131dd30054c3f8981374a01f85318d98d75c97e1a13bb490ac47e06ab904d352be4b3181fcd74f9780ee3a3790af8781e036f9102f017304e5aea72f2222676ab1488fd12a623ad3575e46519309d6a689351d55b9f43bdf51247bb3f3dea6347d27b05335b6d35cdd6ab9807ad5d22c0313c68af6112b7d794f8756cf8d42111e018c3a737301defa8abe36f62c8bbe922bf852177d2457e1b43ced4457e0743eeac8bfc2e86dc4517f93d4ce9ba6a2addfb98c8dd7445fe0043eeae8bfc2166b27ba4c0647f8481f74c01f8c7182759ba9cecc49077d745fe0423a4570a08f914d3ebde9a7afd19c6471f5d3e3ec790fbea227f8131dd2f054c7f89899dad2bf657d8144a4e226518630ae56b8c8ffe29e0e31b4cea5c4da9bfc5881ea04bf4773264ba56716022226fc581bfc76ae120cd5af803063c5813f8471970a67d3b2411e0186b157fc24a6fa86ee9fd8c71314c938b5f302ef6d0e4e2570c784f4de0df309287eb92fc3b46f2084d92ffc06cd1c814d8a23f313ef6d2e5e32f8c8f519a7cfc8dd9a2d19ab6e81f19305d3c362611e0188bc7fec5481eab4bf27f18c9799a24d3c9052917e334b9b064c05441c76b367e110c78822670860c98de4ecca8ba3da2f85325819a7802356409d00a3e290515bc2606be770ac06bc9c0a962efa3abd8b565c8f4fdc99a3e943a32e0eef6ed944480631c965317039eaa095c0f23799a2ec9f565c8d403365dd303d600137986aec80db1ca38334595b1912c01bab3f0ac443889b1b370631930dbf65dd35437c14a71b6662936c54a718e6e2936c344de5753e4e698d9d84fd36cb4c0b8d85f978b961817076872d10ae362ae2617ad31e0799ac06d30e0033581db62a577906ee9b5c34a6fbe66e9b5c7ccc5024d73d1016ba70a34dba98e584f63610a7a1abb61e08b5200de09032f4c017826065e9402f0ce1878710ac0bb60b566b16eade98a55f4259a15bd1b267289aec8dd31e48375917b60642cd524a327065caa099c8571b14c978bdd25c8d9bded5b6b36a99e3394e6f2156a6ae72595c918b67c3cb0d565cb33e8eab2b6557297880cd87ab25e9855589102abd01b2bfc43740bbf0f2676790ac4ee8b8157a400bc1fd658576a36d6d93260ba5fe3ca4480c7e2c0395829aed22dc5fe3264ea9e5bade99ecbc5445ea32bf200cc50aed5349403312e0ed5e46210c6c561ba5c0cc654799da62a0fc1b8385c938ba198c447684a3c0ceb291fa9d953de43069c69dfae4f0438c6ecc69e985a1ca5ab16c331efead19aded51118f0319ac02331e00d9ac07b612ea86353e4821a853555c7a5a0a91a8d811f9f02f03198fe9da0ab7f633113bd51d344e76195fc44cd4a3e0e033e4913783c46f2265d922760ce8c93359d191331914fd115791256194f4d5165dc1bf3079fa6e90fde0793fcf414493e19338067681ac029980939330526642a067e560ac0a7617a78b6ae1e4ec7ecd3399af669066646ced534233331e0f334816761249faf4b723e669f2ed0b44fb3319137eb8a3c47e6d0e863df5a3349fa1c1aa3edb7e891f36b9370656c49d89571217365b4aa92afd8a9634e8c7d314370510a0cc17e58815fac5be0fb63edc5259aedc501d830e7d20cc9218a79ecd6dd7c680ca1c77e1691a9849e40bb9af1bf94bb97fab1e31627d9bf4fb37f29635a469fc80f61901dd940df86654e757139d3da02c5b36ee762b9bc4c96cbe3a2b91407a43a756619fbf724569b686e8aed4f9c3a3329fae638bb263987a4ce64b9a0c74bae626ff7e3f92962270b8fb593a2f9a2b85ef65c04fabe9a1c18123d9eb5dce6ba88a1424ea143d0cff71c1ba744f104ec7918d39763fa045374f2448f4c77d85a6edba9f9b66e94b33277729b4f96b0f2f74beb7e8b3f4f953e1d88e572ab2c97237db9849c3bf91ccf4a6c19cba35f4a6f09c15f62d515f8954ace0ec27276852c677b25547ea36d1d2a6475be8469ae7ec9b9bfa8e46d3e96b72b65791beccbdb14563a4b78cee8dd9a6acbc9022c2757c972b229cdf6ccfd26cfbe96b2369a1e093d9eb5d7cb580a896b39e40ecf056d4b56b25e00b47ab4cf933adb5680b17eb58cf5d109d58dc98c8d8a4058b58558feae91e56fb241ada24f0f61c9d05c393dd4129674093994d543b92549a6541761b9be5696eb1131738d4b3a93e5851e2d55c9f3285a63fa741167a86abd48be340bb17c5d27cbd7feca3dbb59ec176fdf4e86e03c9b1eb503e5767b40471f3a3dc164cab908e3e37a191ffba4a5cd36dd9a176379be01eba7a8e980d0e1c9f66f8b18102c67558d50c9d9622c6737ca72b60792b3d9ac7e96f2be8933fa15a39639bc161756290d33639425588e6e92e568bc41eb2b4a95be5360e7b594b5dea9cb690996d36db29c0eb76f13b714de1c14b0674eee282713592997b3d1d022bbc55d9bc25c1d8ce5eae644c604de74610f61362b8572fb5d5a0f17c768fdbc18a9cbd9522c67b7c8723636aee54c6c5480dbd05863d6642d652996c75b65792c32dca3aeb4ad23f5c02de63de6394c034aa2b5313563c4645ad165184fb7c9789a5d6d238fd80ce9f35086f170bb8c8731a80da323a485f64ba26e4c66a51ebbc59123a5baa4976339bc4396c3498a39dc976974195222d591df15587eef94e577a641cdae48a2fd4d050387600cdc95aa76d9b16da341ab6c3e57e558aeee96e56a82a21e8f63b310cb796fb7ba75b802cbeb3d988742b504c7b337aa6aa3dfbe268eab92bf4a2c7ff7caf2b7a746cfb192b5bc6576fe8af9380fcf557e957755f2b412cbd376b532f3ebe768e64fa05625de28c56c4bb90acbdf7d89cc0860bdc771cc3f54c0c76e55fbf1c9f51e93ef23afc672793f568a2a236327e71378cfd0fd95ceebc4ee03a7aa7fbc06cbdf03b2fc7523b17d9ff438131352aec5a47c30b60753a5146625550a266bd8a158ae1f92e5ba2f6a41f2a33102d0121647bdf6b487b352dabb4e6e16e3304cee8765720f8b6b1926b11950ea632db52d7bb99d371ae710df3aa4ca06acc3f2f3083626885d47e8987f3aeb2757487a4a89cc98d0fe65710a73783896c34713f104c867402631dd8b6dcdd3390b720496c7c7303f5c22ed5522b94c779b752496d3c765399d985069fae7b39c7a28f25d9de5ba1ecbed13b2dcee17b75ccdfaff4dcf0c1c85b1b143c6c614b4cd10b3e2c5d151116d115748e4746474bc57c9fc82ffa692efa3b17c3f89c53724966f793c407af3760c96b7a764791baad80f58c94638ce2c0ff54788b7e838238ff50ce4be49f89b4a6e3660b9795a969b419ab97122159ca3f69cf753552ac762f97826f9a88178a39f74dad5e3b0fc3d9b487b09b503e670167bea8cc21d6f916c8ec0ab77f82fa9d1c8e3b19c3e27cbe9405f4ec7b21c387ebe4acf3808b704b17291ac3e9e80e5e2f944e6c15522f482d3f66fc4f2fc822ccfb9be3ccf0632b951c7704c1e2b6ff3512c951c9c88e5e0452c762db1766b2c1bc7d271520e8d904b432b75129693976439e943bc63f401d12351c575b22d4705f1fbef523d56dd8449fd7222fe9d44a516d8b1f52936b27b54ac4afe4ec6f2f78a2c7f4314f33793212e67d66fb4527d49c61f720a9697576579c9899b1797517f69b9fe86d4d9aa5331e95fc36c5572d23bbe8122676309360b156b06432507a76139785d96839e8aba3496b35a75c625195d391d93f58d445a06c8906ecb902cdb6760397853968303a26ca77ede52f8a7938f5c480d2367628cbc95c88c43d539a1c4fadcc98ddf93b7136761b97c1bf3dec87b04623dd872765726d1642ab76c86d3abcbeae82ab93d1bcbed3bb2dc76f695a93f47d4863812a54ae7cec1e47b37115f5a559dab6a9d5dfdab1a259c6edd3b17cbed7b58cc74a25673565cab6932bae93c2c5fefcbf2d53d8e96b9d1b145ac46d07e776a7aa3e763727e2093731c49640c378547a797d877d4c62d2278a461bad6b95c80e5f343cca395a89e2566d3e2a3a9e46633969b8f12993da96ac368b9556d87dcf7127b9edabef7162c8f1f273307a6e20b4a974e5e88e570672271bef1672df7b5ad44097b7b969dfb0269cfdccc7cd04558ce3e91e5ac17daa3c0a36acaf84c72aa66312ec624fe14f365a98d95c4dcddb2a84d2ce12d4d62f15c2646ea976079fe0c8b8152195d3951d92ab2a7c26a5c8ae5e9f3e422ccf5e7e6a0b54c8dae5e86e5f18b44a21d30eb4fcb21d11620b596fe722c3f5f622b70121d21545724de562c475f61b1ed89dabfd8310089d812f5f8d1e4db812b301ebe96f1d0236e6d34d70fbe1293f41bcc6b99a8de78255fc1bc18eeca0213da771596976fb1b64cad3e39de99aabf561d4de613e74455f3a3faabb13c7f27cbf33c52bdbe2bc84ba2bd31f18d0a2bd760ac7c9f480f53a4a8e2bb727386e9416a2ccbb558ce7e4864ae58d5ae56a787e43a2ca73f26e257c6e68a1d1d1f4c06c6c99fccb6d2af5472703d96839f128f5ba069aac72d38f9c39ea7aa846ec0f2f7b3da6a97aa914025d5383abd11cbd52f580474ecb67b161ff954d5aab16c96bf3c862d74bf9dc6e2709d717becbd3f926b476ec272fd6b22b54d9e7e72b338c98e0eb66139f80dd3c658a3032a5fa1fdcb1a9bf9aaf1bfd8f820be0dc1b5b1b6fd9f65d1bdcec6b1379dd8e5e58c09dac7c8a661e760aeb55fb465eee769c5dde734f565b644b476e747db60bad75b6c84df6dc26a4588f3a7a745c91647c45bc53ede9c2f4b19f222a0a1fd58b93bfb5ad0517fbfe82859ec84172f17b2de483fd01f81b98b9fa70391adfa2dab36cf91c0b299ee4799ded572fa072dd55c5eaa91ec6c9ac7de496a537c29fea4a965c875a8751566619d97c9ee004ce5be2f8b9e77389d0d27c4b0c27157381b35c64d0dd652596a7d1980e8bbc58583014932b8b64cc51cb750397182bbe77527a476cd480e2d85bf4c5255cfbea191999378cb4bed4005591a0a92b60e7049fadb244914373cbab375b04bcb3f2669a1a785ce67b5d9a96cf8de4c61a0ed9d1a2e6dff9aa4ad2dab72e5acc33e9d385b2c88ee1c4660452828dc69b914fe6792c226f68df01c4d64168b0214b0b11c8d359f16120bb6ad8e4b18a96190b016acaace2739c4ddfc20ccc435a9ef12679924ae35d0343a8fe8adb093980f61b967263f0cf4652d73e98b98a4af9944ef28200db8a10b2f57b2a785a1206d017149cb48176930ae578c1bc468220ca40d1fe19256c3b485f33609e3edbf9d2dd80ba3cbe11d4b1706e2b21ab8c4d54c9785a3fb9fadb1ff25b36beedeb261a06fc30a97be5a26e9a3dbe6576d18c2dd153e0bf4e36a9b24af2dd0bd710c86ae0c2ce09d9159ecbac2ee2caf64ba17260a1fece25258c72485f5416331cd330d17069a76b67769aa6b92a6ba80267747a9305034bd954b513d93143562964cb81acb98ed9ac6a67d0b592b1a06b23a2c71c9aa6f92ac5a4c9f2a42d5a5a8d1d025a7814972dad837d3a26e21bf0f969afb954cc368af6c3a9f5e0c0381d77770096c6892c03ac05a513169b44b18083aafa94b5023d39d56419023827f703487f7c08a490909cb087378894b5f6393f4b504fd2e3f7115ac8a1630675099fdf9da5050f7cc9e2e754d4c772428316389bb203f1cda5509ac57d374592fb10b6d18082a6cee12d4cc2441ed081cf6ac61b95e191dded0250a85ac2a86b122d23f82c4e62649a4e70742f2e8fc13dd719e56c795dced13ee61788b1a2e952d4c52d990db34a16f6b795f6d36a90849bfff3460db5a9a1f478af39044cc4c18287a63b84b51ab74796227f1ee84080716deb1300d9b7eafed12d7da24719d40bb39dbc62ce4dd8b5dcb33765a3797ce36a63db3500fe1a6e8a399af1656e170f4e1d68179cfb626c96b0074d1ddf7dad9913d14448191683b9344d1508429cc9a2df51de39467bf5ece520a03610b222e61ed4d12560f544b78665b18489a37d025a98349926ab2a417b217c241cd59c35c6a3a9ab64c427fdcd5448e106120ea05a043bb99248a861178b705a3c1c955dd3d6120ed6fe0d7ef6492b4c604c65e1430b28a42370db205c4f764a6abafef445d7817ff1586acaf5f0a02f23a9bae9cce38328f251d663fc58e9a2e695dcc0fbefd95330c147d3ecaa5a8abe90a398e050caf6489bbe786bae7c856b0fd4f568482b89d40b7ba99d62d61c91c9b551916dd02cb20ba9ba4a89187a2700671d2f57182ac1ea62ba2581cb19cc184db193d1c54c49e26896b4af0b9c9b144ec391c06ca0a81c735cb74c57496d1520f44119b3d729d84e1e8e1af0113b8bb9b24ab39e844382700f9e78dc2b4062e6f904b5b2f93b4d13843b7cf358e85093b716261a069c76297a6de26696ac3689a6e5b2ac7bb75085b4e1e7ef37f029b04a95dd307eedf4024f945d06aace3cbb5e9009e6ae70aee3b732ca167f936ed03044ef23e35c0f2ebaca44304b2e2f6d2b2125e9493a51cdc9e95e4e2c6ac84dce8599a73fe590a2b56b3943a7059098fe7b39446685949d9932ca529d82c25274e56426b2fb394161c66294fd5c964c697fb645589d6cd8a39bf95258dbfcc92c635652191e5593102f3b39020b2ac388118594905d66625b9ca222b05f3d15971b662c842f71fc84206e459e8fc5156cc99812c857e5f1658f09fe59b8ac98adbd9ce528caecc4a70c49385c49e78ed79acf5825988032d2b46e72e2beeb280ac84271ab29208dbcdf2ac4f4b6c056e56025e7c2f6e62ebdedc1d786087c2dd392787eec0d3b7c6ffefcd7172e8e638fd280907f03eb6d3ebce363d094fcb7b0019c4aece9e48b47e395687bee64bb343953467f28ae61c4e277ad3b2d4eb7afadbed12c950327deece604a3ec7f4a0c54b5bac2de0e693a176368cd1d9c8149d6d335c3afb0789ce61a1a4730ca033374874f60f259d7b82ca3e204874e68692ce1240e7c020d1392094746e04740e0a129d034349e71640e7e020d139289474de07e81c12243a078792ceb7019d438344e79050d2f92da073583a4641b403b4eb8c82665a2e7d7b98a4af314bda753cfadd4355b68b080179d4e925c8db331d5579315a99a1f874cc33d81c9d0d4cd1d915e8e2f020d139349474b600748e08129d834249e7a3a0b28f0c129d034349e74d80cebd8244e79050d24940651f15243a078792ce8f81768e0e129dfd43496731a0734c90e81c104a3a4f05748e0d129db9a1a4732da033cf249dad48ec11b9b7a20f324765535354de0f46e3e38242e5805052d907cc008d0f0a95b9a1a4f245a095134c52d99253b988871af8cf6a734477ce01cb3547644d53447603444e0c0a91fd4348645740e4a4a01099134222bf05e39ebd4d12d991b8414f89067fd2f7cbd9bbe1f3abef073a45fb9824b60389d7c7c4ceb53658f17758a63a48405f279ba4b52911d315fdedbf571171f61e7d9686090b636d796d40e0149304368f12389fbde0003961836922d1d8c4c51d80c4a9e9a8dc39ecef44c283c36c33a7005aa799a415c68eabac200933b983418334bd3ac74310ce682354db1495fd41ef7386492a45a4f8e0f4cf981bd3c387801ece4c077943d34fde1fa6c87b0a9037cb2479622d0436eef15662a35368c6aaf168d0dce40789cc212124730c20737690c81c184232470032e704894c83de4b63648e0264ee1b24320d7a308d91b9072073bf20916930f6d21899c30199fb07894c839e4c63640e05641e102432c338c21906c89c1b2432878690ccb180cc794122735808c9cc03641e68924c678784124e6489fd11f503d1d7c3e7afec465cd20e4a87ef079f8cf0465e86cf7f7e01d0bff9d5eb4673a0a8f3d7e8dc63575354ae016eb40526a9ecc5a92cb55f2a6557b1a9cd74fb7f3a19e64c4a38fb0ccc2279641f3286f9d38bf833f8de685baa12b394373745f93f80f2029394b78d6b08aac6651a6cdb8dc5be3d06ccc1c2a0116ab07d3746e8e380d0454123d46083658cd07b00a1854123d4a03fc918a1f701428b82466818e3871f008416078d5083be7863843e0c085d1c34420d769b8c11ba0d10ba2468841af42f1923f466406849d00835e8973746e86d80d0838346a841dfbc3142ef06842e3549683d46e812b6eba2b3c3270d8f35e8653216d941cb4250565a9dae1118f06a749c7e9e292a4f05e3f46526a96cc4a8f4c7675281e9cea16b42e8a0eb09b4b0cc24756e84300dfe4f7b84b0b16a7c2eb07ccb4d1248776675f60e1e6dffedecf0edee433c839149ff0f1f859940075798a450c4070bcfa6b372c2595f3189e4497defe15df5b31758d27788495a7b12bfc3b88081b9bbed8eb1ffa76d365db4b29ced2b1d6baa2d8cf3e905a0092a3749b6bb3d6eee2e14a9d912d05761923eb1c61c2e1190ef2a1de6e8f51da051aa3449a758f0d71f99fc0dfbd2951341d3b4321d9df4c48211c2682107002a57a5c342e69221e9b790c6e8b380855c6d92bedd48d5e1e26ce29ce8b0969d56e038338ad8d2aa02a6adc50c6e9959cddc6a8ada5980da35d55bc9c31ea4f037a8e46bd3d9952fb18598030695b883c36057de98836302e8ca1f6a9256111397c3b494d2596abf444f9d581a7d294d6dba314b7a27e81c1d66baba8f66675b2de727fa384b519dd593b4af29ce39724e8f0a5f3fb306a8eeeb4c3b3f443f73991872b1917bd8b5f12c40e1e1e9a070c82e47e17380c2234c52088f9d5a41bc8752a58944632d776760158f4c1789eef95115c439672fdcdb983c0334717d3adc18d89c4ed5537e0c86ba18a3b33be8f61c15243a8dee786d8cce6980cea38344a7d16d468dd1391e0c1b8f09129d46f7c534466719a0734390e834ba6bab313a4f01741e1b243a8dee7e608cce2b019dc705894ea3dbdb1ba3f37140e7f141a2d3684cb0313adf07749e10243a8d6e6f6f8cce3f019d1babd321ec0d0d34e8b934165fb43b18569e980e2a31cdf452693068d518957701ad3c2928540e08259535c148685350a8cc0d25954f03ad3cd92495dd893fcac8bf4ba6b3f8541c7b2daeb2d8238396d45828c22b80e853c242b4c1394c63446f02449f6a9268f78cbf9c5d2850612771e93bad3a6d2b849b1fcadd3ba6024d3c3d1d54c2edc6279369640299ce8429b63f5a930ecfbc312a3701ad3cc32495ce0c3a5c9a329fef333c86cfa33b50e3ed6b910d5118420bd9109079a64932e3efd60ec587bbb51b6c78e821a64668ed08c64a6799a455847855daed356ddb555a74a3bd54631a7b28a0f6eca0526b74586a8cda1b813138c77477298f3546056c17f74a1b20fca7fa3605f49d6b92be1671ba4b22a7f34d2e40cd8e98da820f8ce8cf33dfbeab1c8e6c8c4c63ab7967029d3c3f48648671cfa36980cc0b8244661877939904c8dc1c2432c3b8d7d15e80cc2d4122338cbbc84c05645e182432c3b8c7d16440e6454122338cbbc70c03645e1c2432c3b8b7513620f392209119c65d634602322f0d129961dcd3680f40e66526c9cc245507926a7bc11a6cdf8ded05bb04f8e22f4f87ae623121fe101b8356d45880cd08a0ab5b8344a6c1f6dd5c1c3220f30ad30e38314bb4eb6ce0d317d077a549fada02faaa6e9142c1dc737cc33c01fc3e20f42a9384360384ee5a2bdace04145e5d9df6d13f871ec683eb9a8196fb9a209119c683eb5a0332af0d1299613cb8ae3120f3ba209119c683eb9a0032af0f1299613cb8ae3620f386209119c683ebea00326f0c129961dc46aa2620f3a6209119c683eb6a0132b70589cc301e5cd70690797390c80c63e8eb6e80cc5bd231881cbccb0d22a71397c25b4d52a8768c9d416d34b6c8e50a103e785bb07deb062da731df3a01c15bb79ba457b6b761e2f19906c7ebc6c20baf0176f40e93d48a9d6073c9aeb913ec93c004dc990e2f7b7fdb52ee3aab823e00f4dd65923eb8bd94bb9405aec630be88c5980e9e015af4bbd3d1a227d6c30ca3b76806a0f29e74cdfa087d9cc85a7177c68746b04fe3ab84c2baf5d91440e8bde9b08fb9ec608634db4763f1eb7f00fbb8dd247d62078fc4e3d7c31859b41ba0f3be20d139349474360674de1f243a078592cefb81ad7c2048740e0c259d5b019d0f0689ce21a1a4f32f40e74341a2339c4723be09e87c384874f60f259df3019d8f0489ce01a1a4f33840e7a341a23337947496033a1f333daca463f3e9f6df14849e2a403f2f60af1fcadc6e25ec8d994c3467c1b431420b4d113a1110fa783a5c1e749cee6c7ae20c278bc878f691c34c9847e8ff012a9f30496563228ea84bfbf87cab29f28e06e4ed30495e7b92e8f14bde636d0c4e4efc678ad43dc0bccf934124d560b8ab31527f05333e4f05915483ee6263a4fe02487d3a88a41a0c7f3546ea8f80d4678248aac11ea83152e700529f0d22a906c3618d913a0590fa5c104935187c688cd48980d4e78348aac1f05863a48e05a4be6092d4dec4bb4bec22b682d211665f46ed121638038fa61713c630e15d6139ebad80f4174d923e80549d97f7c62f8db5ff5e66ff47ffed6484fa058ad9d69354d8a9840e5e57b32496dababf8a14b1b7f2d9d84c4c501b2c84bd4d15422e710be1a574780a303f963738228c2be6c6017d7ed924956eacd3e0f4fb0afa9aa2ef28305bfa8a49faf4f6f10c6338e34b80da57834a6dff5052fb29b09faf99a4566df982d1b3e18c59d02d80ccd783446618d71c5f08c87c2348648671cdf1c980cc3783446618a348370332df0a1299615c737c0420f3ed209119c635c7470232df091299615c735c08c87c3748648671cd711120f3bd209119c635c7170132df0f1299615c737c2520f383747890125b301bc6631f4f05e3f40f4d5299f8a906063bebc65685e48100898f4cd2285629a9c48e867133feb5402f3f0e1aa1613c2ae20840e8cea0111ac64df99701423f091aa1613c32a20c10fa69d0080de3e6fce580d0cf824668188f8e580508fd3c6884867193fe2580d02f824668188f902801847e193442c3b859ff5240e8574123348c0b6f4a01a15f9b1f70d260b135f68754d055f6cb8bc0821b774feff08ddbbb1297c66f4cd298497437ba32d83019dbe86a0008acf9d624bd0d39bdcee1cda52c90c1c12e21064f1cae698a3802f4f23b93c4ed4ebc618d952c16691607a0618a95ac92abc48318d45463d1200380e7e97b938477420d4162a13606bb53c6c86d05c8fd21c8e48651739b03727f0c32b906bb59c6c86d03c8fd29c8e486f124edd680dc9f834cae4137a031727b00727f0932b9069dd6c6c8ed0ac8fd35c8e41af4b71a23b72720f73793e4eaed8e1b468b3b018cc77e4f871b86ee2e31852d6d58ea5b8a93677f56ce520cf31e1339c425f48f74ebaa7c4d5f3e73c7d098956206b78c185d82bed514b5438019f8d324b562510e7555a77d518eb1aade0254f5bf826b450dc60018a3f63540eddf26a96d446279b52acc5157cf147511602fff3149dd08e2f56bd16a4cd73539006399f651a168064aed84bc4b781da14b887071d35da6dc65bd8564d75bd2bb1de8f4bf260b26de56dbe13f32bd17d0f1ffd2d170d17da1779df3691703faa8833d005daab1842e325fc134d631194635f30f53d436025d2acb24b56d24d4c6b29843437910755340672448741a3d9ccd189d83009d1941a2d3e8a48b313a878216bd4690e8cc0d259d07003a6b06894ea31156c6e83c1ed0592b48740e0c259de7033a6b0789ce41a1a4f33640679d20d139389474be09e8ac1b243a878492cecf019df54cd24987c833b9e3846e1657c6009c339cc247db6ec4a5adbe49daba92aa47608d236b08dd676f25113ea569f6e7858446f8cd64fa58c808a6bea8344c88180ba8dc1d90dc201d553df1739dc2b83aaa1308f36d18243a878692cea680ce4641a2735028e97c1054f6c641a2736028e9bc16d0d92448740e09259dff003a9b0689cec1a1a4f33d4067b320d1693484cc189d0b009dcd8344673897919f00e86c11243a7343496705a0b3a5493abb313a27d92f4d27746aad907f4a45f62f349bcf8f0c1ec376775ecadf1c6f5f8b6c7083cb7c8c0d49b300cdad4cd21c6f0f67af3d35b8a8dcd8c0f321e014691d142a8daecf3746e5283011d72628541addbfd918959f00ad6c6b924a18704bcfc6abb49958610b432dea1ce29c9257c86c69513afc4bc62c6625b098ed4c12da9488adda73ab23bca6ab29026b0017487b9304f660048e630034f78eee1532187ad8601e8bc10b40eb6e8cea9640573b98a4ba0bf1063b16131a5b4fe1bc8bcc07d87f53c20ba2d77c1b7429eb78198d687addd486716700fbdad124c5ce7e90f06cd16ad357638d553ba0afbb996ff79db924a741dad5a86c0ba8ec549d5d280867f4803763bb940e07553cd32495cd41172acf7e4045a5b1a0f96c6b8ea5a1ee36ed0d5afdcee6eda443e22ad64da267342f6473eee2a53475a18c69e41a50b9bb9824b3312033cdeb928c91370b90d7351de1ddc91d1614c655c917814ade2da8d48673c1f71d406bbb9b6e8426b37c3b4dcf72161542cfb2a3fed1f2746cb665ac116a0648ec918e46085b63e4ed140d0ee5894bb780cade33486486f1c4a55b0199594122338c272e5d06c8dc3d486486f1c4a5ab0199bd824466184f5c3a1390d93b486486715c7e2920b34f90c80ce3894b9b00997d834466184f5c3a0390d92f486486f1c4a57b0199d94122338c272e6d0764e69824b303a9ba04c11d3a4e23c5f620b380c18be9b8302f3af889b8b4f64f87b73db183ac0c76918c517936d0d0dcea9db870a0a8e3d82895c6a67f0f03131703d211fba112301bc6c3ac4e04ba3930688486f130ab9300a18382466818c3668f03840e0e1aa1613cccea7840e890a0111ac6c3ac4e00840e0d1aa1613ccc6a23207458d0080de3f669470242f7081aa1613cccea1840e89e4123348c87596d00840e0f1aa1613cccea5840e808d3013593b877a9c4fe84861fd297ddbd3d8d9137d41479dd894bdec87444230d497f3492b1b88e2701797b55a7bb639afdc9c184ee105269d6dd719e292a5f05ee8e51e9d0c361bb5054dc1b400f479b244fec199b6b8bb7ebd0f73b6840c6989fa458c27ce7f453672f246759cb4afbc3455ca062b648806ee613be30adfa4017c7a67b035e9540c2f0353763808dcc4b477393d8645a18633946012d1d178c6da265276f18a476ab296aff065a3a3e1debd6bc1ba5559044170c1a9fb1343637f403d0de09e959c64adbfbb42f6335364fb906b4f8134d12d85e52fdb18efb6852ce085d6bb6e2efb00c91fa30a8f8938248aa41e78631529f01a4ee1d44520d3a898d91ba0d90ba4f104935d83b3546eadd80d4c94124d5e094b031525f02a44ea9de2e7fd8036aba80367f6a753aebf2d8207421a7d26055ef618acaf5402ba7056947eea1260369cc1d0309764c9a1e243a878592cefd009d33824467ff50d2391354f69941a2333794741e0ee89c15243a078492ce73019df941a2d3684ca7313aaf0374ce0e129d834249e70b80ce3941a2d3e802186374ee0474ee1b243a878492ce7aa0a3b45f3a1667e1ab35bcf349615ce97621d0cdfd8344661857badd0cc83c2048648671af8fb301997383446618f7fab80090392f48648671af8f630199070689cc30eef5712620f3a0209119c6f8905580ccf94122338c7b7dac06642e08129961dceba3129059102432c3b8d7c74a40e6c2200d288d1e90676c40d9050c281705894ea3c7371aa3733ca0b33048741add85d3189d2341652f0a129d463befc6e85c0ae82c0e129d468f203346e74980cec541a2d3e85e0ac6e8bc08d0b92448741a3dabd5189d0f023a4b8244a7d14d4e8dd1f90ea0f3e020d169f4ac566374fe04e85c6a92ce669cce41f6ffcb78e2056cf141d84f25d8465c0a4bab33d0d015dd5976608c4a638b0b4e038186cb4c52d988b80b6046db3fd3172b49980f1a391850576692baae12bb285f9635d6065966a7ba9cddd1b7d314a8ddd714c95b81b55c1e06920dbae98c917c1920794518483668698d911c010e9243c240b2c1a91063247f0534b93c0c241b9cbc3346f248a0c9156120d9e030c118c9c301c9956120d960b48931922703925706e5f867a30e6b6303897b81e55d15142a8d7a578d51d90b68e5eaa05069d4ef6f8ccae78156ae31496547e23d97b888ac217455e734fb8342428f33c3a93538643046ec7240ec5a93c466fa882d059bf9bb5b12c59aed0f63e0c48180de438362028c2e0933a6a98f022a0f0b0a9546d72f19a3720a6898d605854aa341e3c6a8fc1a68e5e1d5e9c2f6eec668d0561adb8d7120f0c31e6192cace8cca49f64b33196145f64babf8e76e73546d27bc1b7374d7252ec1479a24b8bbafadaf64c3cdff3f7ed86f8051589f8ead31fbb3c9c1346f8d69cca6ae0786e0a8ea3dd027ecfdcf5e40138f3649658b38548a9c1a9dbdca8e98b29ca0c3748c491aebb39be52cefc536d068fbf5b5849ea61dbee6a613686e36a463680975cfd9947516c923fbb016bcc27ed179369d0d3dd7123a961f6d4b5062d67bdfdc14bd8b40d53e361dbb89569225f6cf15446dc75b839d7a637bde7e0b34f7b874584dac53ef5a4d838d8f31abf90d68c78f37496343fb663a0f2a2b20ce2657939866d26a1f3ecbd904e8df09c1391cd2e0d259637dc9cb810e6e0ccee190063b41c6f6b25b0b1a9c13d3611573a296b1900d1bdd3d94d330ba3156b99f0595fb24d36be92861792ce122f669017bf550b025f54cf62bddfadf60ecde625364ee0dc8dc948e20dc1cf6b7739d69ff58c2a80d73f8e34640e1c926296c0028745808f301cefb8186e594e01cc363b06131e6f8bd18342ca7a683ca9c18f38fe18ea8ff0054e6d34c52497dc99399f5a30065ac79a908a1abb60320ecf474342003c9aeb68ae37040e119e988cda0d5771c1b2faf64424cb63f59c4ba36d3c8eaa82e5267c58a50b7ccfb0062cf4c975d2c22ab88330b93cf9810deefb4e8e87c53543e0d5aebb3d27358594efa6764ccad7503f49d6d92be0ec43f734849730eda99648f6464ce89c1cca61a8c72af69ac8283698573d2b1ad0ad5c9098ccca9f6df452ca2cd3dada822d41df2954047cf0dce416561dc6fee20d0f09c978e733107ee42b6f27840def9c1393d238c1ec79aa04a5f109cd3330c3635c64ecf381a8cb137a7a303448fba4dfbd96dc634f17750a9b7a463ef8444cf4f1f66b2621b3b3dbd2da8d8170689cea1a1a4b33ea0f3a220d139289474de0b2afbc541a2736028e9bc0cd0794990e81c124a3abf03745e1a243a078792ce97009d970589cefea1a4732ea0f3f220d1392094746e00746e0d129d46b7de3546e70a40e715e9180555cb09d6c65c1bfb03faae4c97bfd201919fa51ee621e51f80ccabd2a38bd5e066fbc3147d1d8043e3ea20ed6638d4a4cbd758d5ce025311d70489ce61a1a47316a0f3da20d1d93f9474ee032afb7541a2d3e87942c6e85c01e8bc3e48740e08259d67013a6f08129d034349e7d580ce1b8344e7a050d2f914a0f3a620d1393894747e00e8dc16243a878492ce7f019d379ba4b30e0370a2dbe86714397c412eb5884bd72dc1d9313b8c3b5f75039366b79aa4b2a7844aef0adab184ee80b18cfd9b06b6ae6490e390484c83641b8bbf1c07f4f6b6f4ec8891bb0bc514cd00ba7a7b50366c323a4161acdadf011a9c3b8242a5d1c9096354d6004e8e3b8342a5d1890963543e09b4f2aea0506934dcc01895fb02adbc3b3da1fec3d2dfd418a3af3ed0c47bd2b5a2d68949a7eb7816b360ff7212e6753be782cecebdc1d9bf6aa8392a8d45a2ef0db471bb492a5b12ba8508ed6e17f28f66116cc9bcc1758ec6aa751da093f70575b720a36db7b1dd829683cef9fd41a5d66867dd18b5d701ad7dc024b55d4063b48839d4c6320acb5873349978173a4f610dd3121b2e6d2bc68d35567701ed7d301d311d892d9b1a60f21c0a63cdd5d7405f1f0a1299615c85f63d20f3e1209169f000056364be0bc87c2448641adc7ad118995f01321f0d12990657a61923f36d40e6634122d3e0e174c6c87c0790f97890c80ce3e6c9af01329f08129906bbf2c6c87c0b90b923486486d12dd20774da9f0c12990677fb3546665f40e653c1d823dd603b6e6cb7df0ec0effeb4491adb12f58554062bb9b1c52afb03bd7c2668841aace8c6083d0010fa6cd0083538a83446e84440e8734123d4e0c0d218a1d300a1cf078d50830e3963844e0784be1034420d3ae58c113a1b10fa62d0083538c83446e89e80d09782466818d7f88e0484be1c34420d76ec8d11ba1720f495a0116ad049678cd0f180d057837d3092c136dfd8c148452066e43593f4362755cf04a03bc5e5335a97a62386c958bc483ba0a3af07c7c3343494d3c27f0332df081299619c16fe1790f96690c80ce3b4f08f80ccb782446618a785ff0264be1d2432c3382dfc1d20f39d209119c669e11f0099ef0689cc304e0b7f05c87c2f486486715af86b40e6fb4122338cd3c21130f2f920486486715ab80620f3c3e01cc269502f8d0d26b7824afe513a4e0812c787d025d574113515999e75b12606b1615cc39e09e6dc3f36bd3c26feb241e7241683cd90b1935826012277068548831a698cc88680c84f4c12d9891199cf733e8d1493c9c43dd18f6e18399fbbe0a8977391fd6f077abc7d2db2210bcd916bec10078a22c8fd341d2b8daa3a8e13596b64d011626ca5d169a0b5ffcc24b59d25d43a4e624a5e19d99bedfeb122e6c44718e7393380ee7e1e9ce399c2e8b4cb03547e918e6ebee84e39cb6377ad2e5447d0607d999eed0206fb0c401a960f1ab39b04d8cdaf82b441f9b0508628f60423a5af8344a7d131bc313a5b033abf09129d834249e70ed0f07c1b243a078692cedb009ddf0589ce21a1a4b32ea8ecdf0789cec1a1a4f34ba09d3f0489ce702e3e280374fe18243a8d2eda3246e7f980ce9f8244676e28e95c07e8fc39dd9ea5d9f6d5d990771c83a1bf15f14d5157b051bcb30daad17571c60e2ad91f0c307f31492dbd994e9c4da1c337906c0c34f0d72055e861a10cdaee003a43bf05894ea3d148c6e86c08e8fc3d48740e0a259df781cafe4790e81c184a3a2f0774fe19243a878492ce3f019d7f0589cec1a1a4f37540e7df41a2339ccbb1e6013aff09129d46b79f3246e7b180ce7f8344676e28e93c04d0f99f493a9b1271d0035d7695f633568dcd475aa0a7498f7ba9b6cda3c31f727024989bb44c52d98178e7c9290f2b095d59e99f2df71fda649056633bc6e6025a2326696de9a3b52446e841184f2ae80c3c43194121328c311c57008dac910e9b89c5167935d2e01a366354be0a9a9f9a26a9ece1d3c985a46a2061e2218706b5d698c7b336a8feb54c529d53a579c288ac50f0c68fb6df2f671b0618b5be7d4dd13f02d05fdb24fde2a093a1643e7b40132f60fbcaa7a9af6a2c10f145e25258c7248562d648687005d35adabd1acfc92bdac59ab483419356b73a8701106e7e289765e7012aeba5b3492be17d04dad55fc434546e5b2770806936e4c1f67511eb5718d4dab1a6a8ce0636b5be49aad5b70a1a16ca3d403b02dd6d103442c318e8d00910da30688486710fd0e680d0464123348c7b80b60284360e1aa161dc03b42d20b449d0080de31ea0ed00a14d834668181dd5ff01a74bb3a0111ac63d40338086360f1aa1619cd6ab07086d113442c3b80768534068cb74b84e923b8fd3607b6fccaffa20b0a6ad824aadd1edd48d51fb3871a96d9d0eaf54627be284d1c17732d0d23626a94cfcd419837d5163a7cecc041ea7b6266914cbb787ec52d1263f830addae7addcc0e542923d5a023a4ab292a8f012d7afb6075917243e9fb2c0616b243d0080da3ef733120b463d0080da3efb30010ba5bd0080da3ef732120b453d0080da3ef7311203433688486d1f7590408ed1c3442c3e8fb9c0708ed123442c3e8fb3c1010da35688486d1f7791020b45bd0080da3ef733e20b4bb49421b13b14664d7d9702d9fb8e4f530495e26d13d3ccaa06e1a3b3c6a0118c5f7ac4e87883718cce0e8e83c53543603aeb92c9354c273b84a99279e0295315d4c9383ce58755f076ce5ee26496ce321d1d94959367111ee88e50f81f5ec950e77f100fbbf5da7f1690fac63ef744cad556d7c12995c33d8f018a37632a0b68f496abb116f9472a9fdea62b61c8152b7ab4728cf0034f74db706cbc9cd67e680868a1733b86566dbfbada6a81d08dafb7ee9b0adfdd9929a34db56634dd3fba0a5cfaece458c106e7e288fee59085af91c9354b69654729c4aa39b0b19237330a8d6fd834466180fe21b0ac8cc0d1299613c88af3d20734090c80ce3417cfd009903d3e15712fd4fda792f24d38973b884201126b12b6c9ad113f43b07a5631c8fe9aa9f4ca3fb311aa3b305d0d6c141a2d36878b7313af704740e09129d46b7683346e73050d98706894ea31370c6e89c0be81c16243a8dee78678cce13009d7b04894ea3e32363746e0674ee19243a8d6e0d6c8cce3b019dffd7dd9d8057555c71009f40714570d78a28a2a65164c90eee618f200924041511421612080408099b1bee4bb5daaac5ad6a5d70b76aad4b6dada2c5ba5b54dc5b71416cad4bddadda99b9eff1fe49de83d0afff79e7f0f17d647d3737bfccbd77e6cc9c39074be2a46ebe4ae37c15380f91c449dd1a98c6f901701eca5f0b526abfeca2f3eb564ea4aba4296dd57c0f93003d2c44fbecf8b6ff1a9727ee0b41e4c325710e54c9b913701649e2cc57c9f9185cec832571e6a9e4bc13388748e22c54c9d9192ef6a192380b5472ae81d6394c1267b64ace3ae01c2e89335725e725c0394212a7ceb49845c039329dcb665b5fe8c4942d5a4af64330c42c964299ab92b22f4c6b1c2185929a4848a35c0dad725498c55d9b52d6c6bb707f1c1d22e5c5fde05adf0ee3c79e15fb167d4b133200efc810751206f8e7758d9997340417e1ce53186c1b0d239c31210aa2a4eef4e04a62dc499eb8b6e3f10c12ebf9c05a12224130be7426da87a6deb4ad32838f1b8d7b23ed09cfedd210177cc77a93fa200f87a7f65829901a5be47e00394e0a2471012c0db20120cba4401267226990b500592e055263c5a3730072bc144862fe0f0df27880ac9002490ca6d1206f05c809522035062d2e04c8a3a4401213aa68907700e4d15220897b1ad2206f03c863e49475d29897960f94134364ffb86fd970be643ef34e49c39c0d218c632561129fdf34cc398039491226b15749c39c0898c749c2d4580aaf1a30274bc2d4f800aa00cc2992303526464f00cc4a49981a13a38701e65449981a13a347006695244ce2f88786d90498d59230356e73320f306be45463d11804be02286be5d4c1203ec9698b0c96c0b87c9aaced720b55d6c17805da669d34508d75305e05d07a69a01aeb60bc00a0d3a5816aac83f11280ce9006aab10ec62a006d9006aa71c1ffcb003a531aa8c63a184f01e82c69a01aeb603c0ba08dd24035d6c1780e40674b03d55807e379009dc34e0a18665a4c8d3fc5e25840a4debeb8d2be752fa3e1d1322adc161f71bcb9720a3510db21ad50c3b6b0dcba8949d9d3b42d98dcf11db189cff4eb58b0a7421b9dc784dddbb4ddd33d2ae030dccc8d7d8b3ba04b9f5a7f1c54e364c76488373587aa90117f1b9dca68d3bee808394788b6c3d1727828b584c8118ab7d9a87d466957c56668d2007381c9e3b6d22e2cd6ce708f9d2f6777778d137207c35d7501937237b8e0e3e98065fe60b36dfb743b6eb9365b1e93d19c18f825902e945b1583d85a697d808fe0f1b4284cc5a1016d8803244ef765f17505bec521f85ce1e4e07c3fb0f8be81a7f9f1e91c250d35ae38d3d4d8bc26f1099ec9a25c042df184901d2397df5be1337d9b3d5eeac127919536f8dc1a3a462786d819210d9737ad2bf4103cb74f62e2b9e146db51ce91beb353675f44dc789446b717d09d2ca77848b6ca655d73e1deb84412a6c6655d4d80798a244c8d892dd58079aa244c8d892dd300f33449981a135b8e06ccd325616a4c6c391630cf9084a931b1653c609e2909536362cb51807996244c8d733d258079b6244c8d71f472c03c27d4b67af5a6fde2834045e5694b11c64090ed5c49355606329fe5b419c87d2022f453499c8354728e04cef32471527b9a34ce22b86b9e2f89334725e74ce0fc9924ce5c959ce701e7059238f354725e039c174ae2a46e3f41e37c0c387f2e89b34025e71bc0f90b499cd4a42b1ae797c0795188a506034d7c0be7686237c82888363ffe8549f05d9cce156ead530334eeed3a050694978459f492869648bb9027404bfca594b21fd4e825ad253e00f7c4a55228735552ee01e3f04ba550e6a8a47c065ae5654cca1ded07a5f68366fb6d35fe50b3ecb7d799b9fed1536f16f91866bdff48df7db20bdc272f6732ee69da2fa42e76b114bf6eadde67a615d98355fb15c095b16582d546731e453de05e21e572a7ae2ea25deecbe172bf520a65ae4aca227808fd4a0a658e4acab5d02aafe2e74c94f997274f3cd9d48ac2ef0af7ceabc3149b2b6cd35a038c7f682df314183e5ec3e4db0e9eebc526cae229f7a9a733543fbbbb02e0af43a4432512a22bacc6107bd2d5be4f197f3bd87e739d7d518bef6b36fb39736ad79d36577e11d05e2b95963a56a7d1de0577cdeb98b4bde0b25f7f227485ffbfded4fa8791ee0efd3dd072af670f3ad7d7758affa6d47c9ffe9d488c5b400ff48610ad1419a35b4099ed448df2dd2537aa8f3e576adc9e090b7d7b2db267506fa845987660b5d2a9d02b5d26f5fe4aedf0d3eeafefc30de046a9b4d4113e8f161e5d373169b34cebdc4af7989a6f2ffe1a1f7d8a0ee34ebfc51ea20a827b9b5635cbb7e0267133937b2fcf3dd2df69c71997a65a130bf755fb43c577a449d30096d657d80adaf32d7276e6d658c3ed2ab8ebde1aa2db956a5a7988bfd7cee55ef2a5ac6ed73670c9df96ce0a6e818a7d5fd999045901fdd7dbc3cccde7848f4dd1427b9fc3e57c47e89d663ade8d22de29699da8657089ff2644724ceb7d91a2b9d1c46ca9eed1fe01f004bf33c49e8888b9e10e935ed86300f6ae50dbf5450749b56b97e6fb690fb89fdecde4dcdec4b7979aec3fe17e78a56fb18108697970b7428bfcad9cadf934eeb6300928ef6152f6de08ca32fb33dd41e69912fb5e7c44dfc4ed7f8e6375e4bbc153fe772176e18e874a66fb7048dd7adbacc69ce2cf00f4de301bf41584efd0d336e8eb0d7cf7859a75c245641d09dee9ed2edd01cff7fb4374973abae9fe209555367605ce0724710e54c9b91570fe5e1227b56e2b8df31ee83e3d2889334f25e755c0f907499c3a2b147d089c7f94c459a092f349e07c481227756b201a670570fe491267ae4ace9381f361499c392a391b81f39110613a5c9be7464965b11193de91500b102e4fcfcc51b4702cd7feef069795ebde96db83cd30357ea8496c9dab5831a59530867f94499b695ac794a69af6536f1bb38c4cdf245d294c1f3f26250187fac4a7ad0cb9075aed9fa550529ff634caaf817285144aea939e46f938503e2e85923a7ea7518e817be55f98943d92749ac6f94335fab9f7b6690d9abb518b2164f744e8ea596d2187f867f9ac303d535a3b2d00d22743f44cd7471aad1ba9b4a757e26f0a0b43d0d26697e603ed53e9bc9bb69ee7d4b8797f313c989e0e35048de6e7dd8116c42e72cdd5b49e3509c267423c90707943f23279c10a40d150bf834bfcd970db50571bb7c748a2406e53a8d6497b0c3d0190cf85bac0b12e66a53fa0e627797f207c3e44b28123ac5957993dfe65ed2bea5e84fbe45fc366ca25bf4b8e88bd20d8dd72088bb61fd0ae949a84481db9d34273e570f1bf2095961aaaa3d15e0fadf6c5108f2617f4d8b456291f04842f85d913270d7b82d2f2e2f3816f15936f0768810d49e2469a0b9d3c0a77c897c3b4c1bc36a372cd7c65c0f74a8804ad8e251ae4a84c3578002ee85725616a8c0d2d07ccd724616a2cec781f60be2e09536361c7fb01f30d49981a0b3bde04986f4ac2d458d8f15ec0fc9b244c8d4958cb00f3ef9230351676bc1130df9284a9b1b4fd4ac05c2d09536369fb1700f36d7e886d7dcb0dd2b4e5146deaa237d0be23637b4a627f93b63de5305873f46e7a171c44876af094c4113a6d6b8a3360c1c17b2132d53726c185f828a22511e443fc688d3450e2e388065a08a0ef4b0325863e68a0030074ad3450e2e388069a0da01f4803253e9468a03900fa0f69a0c4d0310d341740ff290d5463aa6016807e280d94180ea181ee0fa0ff92064a0c23d340fb00e847d24089a1641a683f00fd5812688ed27b682f187a7e1262a1429431e414cafca1661bcdcb608ba13d7e2abb4607f181445b8b7420b4ce7fa733c6d47a392cb13bbf9445b91b84eb3e0bb91b626d2c945c6d52675d6accb9bc16dae6e721ee9c05e95866488b797e6a127c5fc8ddde9c180aa1ad9ebb1a5ae697212638b2d74dc6b9cd257133c9002d9496fffb1cb4d0afe4b6508d558c56400bfd5ad29e4983544e7764422ff41b499c035572ee0c9cdf4ae2cc57c9b902eea3ff91c499a792f36ee0fc4e1267a14acecde062ff5e1267814aceb5d03a7f90c4492df748e39c099c6eb19918ce5c959c4b813343122775c5278d733170766272c65305711f8571fe249a4d83d1bd27d22878007566227637897ccbc08982b465b24ba005fe8889976c8c9e7c0705b77476a6fda98dfea368092d31f6fe358bf60808187761d2c62b14b98b7ba8fda6467bdc5283a54adc96bcee8095fe008ba0604953884b9f16611a08ad77b3108fa3540fa3c1f6a58dc62da0adf4813b6a8d0d1a675768b19b4be2a45680a171e600e7169238a93b7bd0380b21e6b9a5244e6a1e1c8d7302706e258993baaf318df344e0dc5a122775435e1ae752e0ec2a89935aee89c6793b706e2389935a5087c6f932707693c4492df744e35c039cdd25459506a9cce4e80501916d25710e54c9b93d706e2789335f25e72326c1b9bd24ce3c959cb701e70e92380b55727e0f9c3b4ae22c50c9b91a387792c499ad92b30a387796c499ab92f37ce0dc4512277503351a673370eecae4dccfb45e213fdb4f7a54db1370e905f1df33b1c539fe30fc5145f6bdb93ecf83ba82beb133097c3f0830ff98091eaf675065926f18d47acca46f0a7907e8e2ef260592b8a08106b92d40f69002499c3ca64116c2bd747729901ab38cfa00644f2990c4cc611ae4c500b9871448624e3b0d723040ee290592d8dfa4417682874d2f2990c4bd946890d7408bdc4b0a2471871a1a64376891bda5401293ad69905b00e4de4cc85dcc8646e6ad7b921abb403703e63e92303576cc6f01cc7d9998f11d153a36c2d1f8d8b9012833999499a675bc68aa699f05bc3175b168d4b47ce1211029fa09937a401beae69490a94be8b55f001e285047ab2d9c01fc5921eec01d5fa7ac6fb5481eac16d94f122631f249c32c00ccfd25616a5cc79409987d2461121f5934cc2cc03c40122631e644c3ec03987d25611223a134cc0300b39f244ce2208086d91730fb4bc22446446998fd007380244c620c8a86d91f30b325611223a334cc018099c3c4ec69da67ba8ff47b7b0eb7ffd77bc66afbfb36fa03bbc4ed20d9ef34d8069380cd65c2ee6ea23a478df69b5c1e316e919ab61a47b48d533707d6bc104bc35285f9f070f49de669db0cec0b977f3e9333bed7a7db0f24f82e0db448e996c057c0e4ebe67f1b77b79ce14fb3c92b4cf31b06b817e98b7cee0817726188787daaa778eb0b5963b5e143a0150e64526efc66fc3af749fc022640064903d55865eb4b003d501aa8c62a5b6f03e841d24035ae917f07400f9606aab1cad67b007a8834508d55b63e06d043a5816aac10f306801e260d546395ad3701f47069a01aab6cbd05a045d2403556d95a0da08343ecaa38cfd41957807c63d63151930c69e3f9db807688545a6a76318df64193a01d1a62c2a36331cf4266bf94162c7917dae9304998c43e290d730d600e9784a9318cf71a608e908449bc67d2305f07cc91923089fd501ae6d380592c0993d807a5613e03984748c2d4387ff930608e9284491cbfd3305700e6684998c439241ae65ac03c52122671fe8886f901608e093159dcb14c398ddb052c05ca122665bc86662ac8f86f4a5d84e8d60a5218c742e650697a972f44876af094c4ae3aad60ee69b07c61acac28a7ceba84b7c2253e4e1aa8c6e50bb703689934508dcb17ae04d07269a01a972f5c0da0e3a5816a5cbeb00c402ba4816a5cbe7013804e9006aa71f9c285007a9434508dcb172e01d0a3a5816a5cbe7029801e230d54e3f285cb01742213b497693fe88c66d9cbcc5033cae71335d96f8c3e87194745f60cea0d35199b965b741c0c448f65f262d5d7169ffee24a404e8d8de1ddbec9f49498a52cc4f9268138299d819112fb92e9f63db7f534353042a3dc09624cc7f143c8557e918cfbe1ee448bec4b16daf7aa36917ca34c68979343240e62a26baaec4c7a7a2bed5e99079c53989c3d927096c71c4a4cada5adf4072ff33f607608d44c16eae7805a19261b33bbcd3d547336e667d03d9a1a620962fbee5147162112079bb4bbe761d035aa0af154efd86ca6c6f51f4570915787d871e17f59284b8cd2d3dae8d5005b231596389f4483bd0c606ba5c2126f0534d8f1003b4d2a2c71244f831d01b075526155ee570bb0f552613576b0b20176ba5458e2bc130df602809d21159638434a833d17601ba4c26a4cf79a01b033a5c212579dd060a703ecacd0f181e45baa97fb608b1be8d6fac3cde4f664afa33dbe2054dd1862660ac38163ecdb05f63d77da2db148eb3cdf566799e1b168564d88c0202db2b512225bb399bcdbd80fc6f9fd18ddf45e897d996badf1b9291a1c6d17c69e70c9cf091151cd8f4de9355889609379b43be685c03797c9b7bb695d9ea2de9e440530a69ed8230e4f69137be570b76c92134dd5986653092d745e8869bd54d3cded2b7868ace1d1075a66b324ce412a39c703678b24ce6c959ca5300b355f12678e4ace39c0b9401267ae4ace4b8073a124ce3c959c3703e722499cd4a4301ae7d3c0b9581267814aceb781f378499cd46c791ae766d0513a811f3f4a4485922f214b53d5045afcc88d03e3bc273279bb994478ce8dde1b428540682df30408bd9d14621f8754177aebb13ab58b441badff0077cd9325616adc14a33bdc339748c2d4b82de057d0324f9184a9715bc06f01f35449981ab705fc18304f9384a9715bc04f00f37449981ab7057c1330cf9084a97159f87b8079a6244c8ddb02de05986749c2d4b82de02a8fb9799736071fdeeee0437c20c28522aa4c7cfd4593fdfc08e3520a6b3c4495fd78b4a9f7af9a623926da7f1bf7179864ff25fb7c4646777b46c3cc027b7aeeb3ee78d5fed833ed57dd9935990103ecb79ced1a44b75883c8f273a445d6dc25368e3335fea72fb4af73e75ced9740c40b54367b922cbfb359a9fd5cb3718b24dc4f70699275f6abee37ae378b60fd4956c616dea9c6b4c4041c6056ec5c5b4c946c992cc532cb7397c6c23b597e6946fca3f8820cf7baf1fe2cb2fc0a84a1f6bd5a7f660dc6c533dc59398566ffddee982e2170b46f5bee4c5cb9cd127ff635f6d8ee3b129191ac8c2d63df1bfd6da2bf6053ec4c522f12c9cae8daeeebee6f1a95f4cccad8da5f3f8dfeb7adb5168944d3ac8cededd7a2df27f1d984d258bf18a0d9ff8c6e49ceed48ffd7abb3c7aef60d362363bb581b75c789be5a69bf56e9df96af3be3fe6ef16d4681fd2f5affd66fddcab7a84dcfb4ffa28fe29fdff0315d0b5dffd1ce71cd3023f97da9e1ff766d6de8378a6e07eef5b53eda55e38f5abcc1df74c3bf5feaebb4eb7afe2afd73dcdf6253fefdcf757ff7d89fdd37d35dfc2531defee5a383bb4b66ae7ddf9d54714d27d3e5bf0b92b70b99ff0600 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/d9cb23a6fff21ad4aae7c7556dcba43c.asset.meta b/Assets/SerializedUdonPrograms/d9cb23a6fff21ad4aae7c7556dcba43c.asset.meta new file mode 100644 index 0000000..5494677 --- /dev/null +++ b/Assets/SerializedUdonPrograms/d9cb23a6fff21ad4aae7c7556dcba43c.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 743180108f8ea7240b1a31b81b58708f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/d9d0ec50b1b879f4aa23a3ef00f47b9e.asset b/Assets/SerializedUdonPrograms/d9d0ec50b1b879f4aa23a3ef00f47b9e.asset new file mode 100644 index 0000000..4f5e553 --- /dev/null +++ b/Assets/SerializedUdonPrograms/d9d0ec50b1b879f4aa23a3ef00f47b9e.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: d9d0ec50b1b879f4aa23a3ef00f47b9e + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c14c7f5f8e7e8bd98de8c30eda8129210e00a8826530d0217b04148026424812544b131ee36c6bd631bf7de7befbde1de3b8e4b9cc4499cc4499cc489ff3bb333ba777bf3ee6e6ff55633fc7fe28356dbdebef9ce9bf6a635c966ce4f64a4f36b119bcf0ad968b69095b135acdaf9abd0395639ffdc33757d1eab718e2b9ddf25cebd912c2bc59bfc6768a4a7f3bbc839ab65eb9c37eb58a973ac10f717b072e7ef22e7dd72e78c5f5de1fc2f779e8a34735e5ac8a6b0b96c0eeb11e99642c422f152adbc16e1e18ab4727e4f669b9cbbe54229fe916c71ab87f36b8173a756dcab729456cf2d66878b605539f74a9d776a58a52373b990d8aa5501137f30f7d05d1e7bc823d7b1b5fcbba9fcbb95fc1b3edf5c1e7ba6f97c2ff05e6bf03727747592f77bbbc7083fb6708e378173feee0ff2b93eaebc26ab92c8ea278f7bca637f29f3e634f46f298f5929c29b4cc600202b1d66ade471a03cee25f5bd25c3ef0f7619457600799c651fa0cf40f0edd6e03ebf362840d8553cf6f5c4635f371e9b6c97f1f78d7c7e883c46e571a894ed3cd3e57a796d983cf64da1d770f73d369ec56cd6f966d3b5f27c843c8e94c75152b73da5aeb782f3a0baa8381d2d65f693dfb84d735d3dcfefdf2ecfb3e531c7135f63e47377c8f3dc34f549c7fe944e2abddc09ce1d8ecd962591a5e23dcb13ef59f2dd735d8ecd1ef68407d89f566e9e94775706e118e009c7005797e6d1f8e752eaa0e4e74b392a7dde0dceb9dc0b7d86ad997cef7e793e96a5cedbbaa7716fbc2ba795623dc1fd4e8baeeef516fbb2785b1e97424f15b7033d713b50caad947255f8f776cf238a731690c3dfbfc723779047ee202957e511b969eab98f3cee2f8f93e47122ab4fc7c3952efbc9e301f29b83597c1e3058dedf37f66ef7737d724b1647933d71dd577e77480a99eafd42796c9de6f3ea992901749e2a8f6dd2fc661b799c16e09b6d5d5b68f5a3c71626a49039dde5db6a1dd0c191d37ab33c9f218f45f278a0e43fcc63072aae93d9412a5d664a5d1888034797369de4f92c799c1daf8b53978cd7e9de86d3293254cabc0f9c47649ae5d7ef07e75cd779ee77da3c2f65ce95c7791e9d0fa2d3d9a9bc8bf7dab703b691ce7bc9ec6b811bbeb639aeecb6c5f2ba3a2adda6c6f46e3505bcabf448273d2c922c4678188f903a28b6077b9e7b009cf3e3f0d8f7c4dfcebbed946df506d7f9bb0f82737e7f619aba1eca126d96cb1905be3d4a7e5be6ffed547c1ec612d39eee5d7e1c09ae8d94f23e93ef2d6689e5987a8e87ed2170ceef1f9266d89668f473bedb7e6292770f67f1f94f61cc1e5abe25af1d21f519cde2d396aa670c88bd13a994d796bae71d952ecbe43bd9804bb6ab5f07559e96c86339d397b3a580834c8f4e7bb2fedb7d3f92d79627f956997c668527dc0b6272daf694baab7c6c258b4f33de67f93555dea9f0af91c7ead8b3232403b65a1eaba46e392c2e6f664782ebfca8eac60f8373fe5c454c76b797e535d52650baeae2f3284fd8757940323bab719fedb9449ed7ba6c3b3eee91bb8c25b7db75ae9c512aafad73e5746ae653ce7a57ce6865271bddf34e4a9f0df2b8491e8f961c73595c5ece8e91d7f380dde4826bfcd9473c7c53e9968ce3b1ae9ef5f5fb2df2789c3c4e04b2bb493df26371555fe7db0ceef1f303407861f892e972bc3cb64f119eeee0397e3c2140f893dd6b218f27cbb08d65f16d1e7eeed8c91e7d93c83a8569edb48bca574f75ef77de28cf4f0361e2df2888b1aeb7a5adf21eac234bbb8a8c07d74e92d740192ee4f17ba77be2e751cffd6d4086eefe194007ddfd33e5f5c75cddbb489dd9599eb06cf2e83a9ec5e533ececc4b046c67bbead64a51397e7c877f7f6c4e5de325ebe4f22eb5c7d5c76fd599e9fe789cbf33d71b98f262e2f90f754dd8d5f53f5c5fd34f1bb3fe0a0da64178267605ca8fb1701b9bafb17031d74f72f898fcb6eaafeb61d894ba83f8ccb4b13c31ad9cff3ed27d288cbcbe5f13279d4d57b957f4ed5959f4c43ee15f25891446e6f8fdca7d2907b953c5e9944eed588be997c4fd9baf2d51cc0e26d9d9f3b76dbfdbd24b2ae615a5befa1fc06d7b2785bbf8ec5dbfa449668ebd2cf1799148b7f26fd2591c92cd1d60b63d7843c7eef06f00cb45575ff46205777ff26a083eefecd2cced67baaebb730bdad43fda1addf0abed31a3c03bfadcaf16471799b87b3e23b85c5b77364bbb7a7b7fe53cb92978db7bbf247ab3aa9f47d46a64af94f83737e9ce6f9aeacdff792feafde5da59c76f2fa48f77a2fd5c77027d3d6b77a157b9ebb8bc5d7a7eef1f057f509652b3362f6561f96bbc13d18b622165f27516d8903415c15816bba3a572aaecaefa8da978adf7429ef1970ce9f7b08e87fb5bc26db97a25e24ef75566151f1db0ee8f1b0de5684ae20ce7cd79154981f4911663f79d24c169f27cd74eda04f32ffec13f29933933ca3f2c7a7e551e6a391592cbefda2fc422a1e667bee2b7fd19531f6ddb3801e4a367fe7d934c2ff9c3c2a3f847c273287c5fbc4a45f4a5b46645a8fcdf45ea9d4696ebcfd8873271efaa9b6b1b2c5e529ece305797c511e653a8dccf330507943327f56aa6f250957643e8bf721cc97f75f92e707c9fb32ce22c59ee755fd47b677230b3ccf2ff23c2f7d53ec1579be30fe79f62a90c3cf5f8b852da27c0c3bc1b585f2daeb313efd65df56e4e0f86fb337587cfb4eb5e10e91cf3d0fde830cd47d196791433d613a4c9ebf08cef971b147eea11e568b3d729778f47d531edf91c7b763611cd30abc0378b2b7e26526b5e9d7a48cc3e53b2f8173c7a6fb27abffab77952f6aa994f1323877646465b9fa66e5e3b222cb3cfc8e00d7f9b144de7f059c73d95b93e8b7533ebbdc13b6e5f2dde7d37857a5f9324fd8caa48c5fdcb00de89444d6bbf2a8ea972a0e95cd72792b34f1aafc61d2471429973abc0ace1d1d06a8b106ef33bd6d977ade7f2dfefdbd5439f8813c7ee8d16d258bf7857d2c8f9fe036c93ef5e8be2af64cbd7e1f79f453659dd2bb427e7727d0435de7c723597c19257d744cfa7423ab3df7958f4fd7d79e2c8d7496ef57b2f87cbfd2e53790b9b206aab6c0e7f27e358baf3356cb6395474e9594b35dbeff85e7f9352cbe8ea4fc98bb007755c7fb12e8dcdaa3d757f2f81b79fcdaa3ef5a16df8fa2fc963a9fa66282846590acff0e52e594d2e13b205ba5816f93e8c38f4779ece0a8247ae9e251eaca545ef65b16d7d6a9bfff3b166beba46b13359ef0d7b8e11f2cc33f389a865e7f90c7df237afde043af3de4f18f2ce3fa00fb1390958edfb18b3cfe39c0377f04b2d2f9a66a57fd25c037ff0a64a5f3cdbfb9711a5571fa933caafade9f58bd3d0e7e3a0d797f97f254fde91f1e797f8dc91b72731af2fe29e51d9fc6b33fcb676f4fe3d97fc9673f4ae3d97fbbcf0e6b96c6b3ff719fcd4be67751cfca7236efc7349efdaffb6c7ebb349efd9f7c36593a55cffe2a9f4da33f86ff299e5d96c6b311c94c95954d3c76f023b0832475a87a79ea7c18febe1845cabff94b1af29acbb06c4ee3d916f2d9ed499e9d289ff5b4c323d2a7365cf6ff0f97edf6881a2779004b9a4e23ad3df2d749f9af83737e5fd3ff1791e34722ede365c4d5d554df605decfdfafa8e8abb76b17bf9aa0dd20abcc78f6a2c81f24326eb0bd25d53f582f51e7eeb5d7e23a45f7e84aaf7287e5529f8c9e7221bc073ea5b1b63d7221de47113b8b6115ce3c7a3a56e6f807347b7515d3d728f91cfbd09becd8f9be5f5b7c0397f6fa03c3f96c58f5b55f28e033a1deb7e73e4d3f2bca3e71b5b58ac7ee8f01af99e87c31620eb18704dc980fecd6a70e4d7df9671b033fe9ba9e2401b2fc7b3f8b6e6f1f2788227fe4f908c65fc8f52baa97ca02ef9b7ebe5cab64ce44416df8e3f511e3b0379fcfe3bb84ced774ef284e724cf773bb394edd788aae7dce19f2753633964bd25728afcdebbe09c1f4f06f12fed36722ab8a6fa414f93efab724cd9e856f0ec56f02c3f9ecee2fd7da7bb7197b3d3235bbdb74d3eff3e38e747d5563a43de976db8fa347a26d0e10c708d1fcf92ef7c08ce1d1db2df72ed27e77ae45b67cbf73e02e7f09be7c8fb1f83731eb6433ccf9f2b9ffb049c2bc650cea71e395ebdce03613c4fc6c183296c5df90d468373fe2dd9bf90dd353e4ca9e469afbd2d65a8b2f17c0f37d51ffa5606b277796cf8428f0dcb3ed0c805808d9c8f11b9085c53fdad1723367c0978f612f02c3f6ef7d8f076377ef2cef5c856ef5deab161d5ffa9ecea32c4862f073a5c06aef1e30e8f0def7075c8bdd08dc7bc55c8b7aef0c4c5159e6f5ee9b1e12b65d8fa7a9ebfca63c35701c650cea71e395ebdae0661bc5ac6c197296cf8128f0dab7e6969c36354d83aa4272f747fba01f722b28d10b986c5fb08af71e3295fd68febeb0429c65fd6cb9363d022728e52e45a29ff3370ce8fd7b1b87427ce61fabb9ec5d573c4b9a3d7d89d1e393778e4a87e61651b37cafb9f7bdebb11848bdfffc2b59db1bb3ce14935ee34ee5af388685fcc60e5ac84ad65d9a241c36b21e94ea7536fa69e48c745b7e0bff8cf50f1d9756c93f36ab96e36db4231576e1dcb73da56bad96cbd4478d5d70bc5ef12e7890a21f4cb48c2271e49f80457aed2f9570ea6e2d53ad7a78b997c7c325e857367349be51cf95bcbd818b6d8f9172f6591f3d94aa78255ce8a9ddf6b85bc658eda894fa60a129fb6e77d67be23d39d5558e55c5140d73ae79542c305e2f77aa169b9d0bec8b9b64ecc71ac662bd964e7b8517c2d31ec35cedfba6f164b647a1df5930bb1ebee1446154d539cd070edb3852dfe5f8c34468c70f42d78fae03fcdb285f7675b424cfc1f433793e10e952229638c401689bb96cbb2f9a9e8880d1ac6c410eaeddbe55dc0f29386454f8647771f1182580c7779fee42ec3de88ce6b1e1fb43c962d863ef44d11b46460b9bca8a855fb0942f3e6cd72b8a25efc111d7e51dc2f0811bffb5c8578ce7f04b410855f7c04886155c5cec95a50782e14ca570ad5a63ad778c1c645704b2e1782dd3b1b05fc1a19501e642ed6bdc3f3d1bafaf7f8951201812398ecfc5fe59caf17f96c9df34442fce770655b8a284c2ca05361c022b1892e1285dfadb851d210365d3e7934b6aa0f452c1ab345adab671263c7be25aa634d659d4c25c76bcf5a33f9ab2f07f77dfc81b9d5c5e7fdfe9be6faf86923e22793af6231d45417436dc24e66a9cb9564f1d3b63e5cb1f8e13f7a86ed101b4fa50346b0998e60dbb06d9cdf5b23a49438cffa67c81dec23bc59951e6007c40853ab80216cae4198c31176d468c59ab7f668c5154224b7d0454ebbc629c433336eee7dede141d01c35eece49cb60bfa6dd52474f74c52c23a5a7da960b9c46c44ce75e89f37cb9a8a8f2ebf31c8925ceb7b9bc49e20bb1f668fc1bc9c9725ff5282f592dd52e82ea20d0520eaa1946bc9586780eb7d7ae1a3310799c373174c613436b2c99750b9accda6092bb0795dc1693dc23a8e47698e49e4125b7d7251be1ed5b124ab289b964d45f89f53f9d0b277972e9957672e92d924b16d33996fc698425930ebab8e317fbe894f4465d6f3cea3a6282fb0614dc09b3b67e41adad33a6f29e0155de0353b97f5095bb6092b3824aee8a491e105472372c67deab0172e6ee3ae13c531dc812abb6bf3a3f09c2dbe1c27b609a0fd2687ed0ac26be34ef89011f1c14782f4cf290a0927bebf26791f24f08397fd6bbd9a78b967b399beb54cd8e64ae7f547d778df08d728d949f75be735c21b4e0d7b916a9ddf3c973faa14cd3de1519d8546d9ede58a1e083c39a88126798287178a7ca42e7badb2d3055c44085f8d268ad36fc0bd8f38ac56cb1105f9d88ede648ab7cb8f8ba596cb092b30f96d38cd0e4341fe9b2b124394d5f2cc98e0c9a64fbe924f3243b4a63ab39dc56b931b411a55bc27786e3dfd95397358812f6e846cd1adcf61b97b742f47cb9f2e630be96e40661aaab1d035e2f0da7d879a6c6f946b934f22099015f0da49fd731c0dc1f7d72c811c961ff34920365a8b004d05f6749bca1cb3dfe09ce5a5ebccd77da75856ca948864789cb9c921bbb15e2d10a76b473549d5809f6d612b7b72c9d36bcfdc00799a6acbc75c1050fc004e70514bc1796c6f383a6f1813ac93cb7e10b5804ad610dc2d42e08aaf6602c471da7c9517f89f8cb518760c2c76b843fdec49ff0a13ae1dc5827a4632349ac3a8a09de5b97c638c042e133cc72feaf71dee01eaa1291fab3446118cb0db244e7488d28b04782e7d7384fb89dc67ef41c8619c53e418d6238166ffb6ae2ed279ff1360213be9f46f88ca6fe848fc4e26e7f5ddcf14c93971bbc5ab24a966df1b96196e8becf122336ea84efab4cc45cad88d72c768c535e1ceb1c79c7559628072ac5bd2cb1b4728dc86bfdc4e9284cff0374fab701facf031afaf9e2682cdf9aa8c9b7223ef3ad6c9d705ef199c4908a0f5fbec17fc52707c356a8c3c6ab63b0cfb1dc81c80da0bcbeae5cd64005e4188d5ed9c23351cd1ab342c65b0b7c7c8bdb2f1baba2f06fc7fa498354bcf874166fc54bfde82b5ebc051215cb7085a13d56c1cac532d5699a4c35e22753cdc3d2c2742c2dccc8282de4eb6c4ef8acd636aacde1296abe90cd535ef00a7f9113c6a6ded6bff0abe5a761590da5e30831b4b3562c9def92abe59929efc2580ed6c877e18b24a14f13078a3411a6e658ba188b95da3335a5f6fdcdfd95da053a93152ecb9a4635d929424218663b4b67b6c2af5a9046e437a49efdc530c85a91a996c94cd5cdbafb8bf1ba35a2d82c77aef38c17de1f21e6b9f1fad234c1bb4a90e7e12b11ed5eccc8670b230f3b9c98a18fc30a80399a02c057ad7a3c9684e66a92d02f3e93d0044ced7941d5de1b53fb208dda9b5bf8537b1f4cf87c8df0592dfd09df5727bc2573d7750dd242dc0f13ccc7cc24543779e35db5134a3d2dc5e5a2ada0da7f65e2ca26e777a573ad5488c81283e054bfbc1f2df7c7d82ed4b0ede493ed0118824501d94ed409e6e679703a829374084ed209e6f5af431852ffe2cbeaf8af7f4dc6b01fa6c17eb54fec8558325f1c34994fc1242f092a792a26f9f0a092a761928f082a79ba4e328fc4a59a48e44353fc44e20c4cf8328df0629fc28bb08459a2cb9b0633de168f5552dde653ccaf51c256082935cedfeb65995b16e71fe13e8f0ad968f693ce0fc4f45caed3d39d41c3471ff13a4589f0a1f12fce65ab7d7d752686be5483fe4c9fe86761c2cb34c2bff7297c36c6ab5cc7ab678a782d1383566257c73857fd709c8369b342a70d3f8dc59b9fefccc590aed420ddd1c61fd279582056e902c1dd362ebebd1d647384c3af44cefe592f8a71ff180fc234a8d069c073b659f515837919560be663488fd4207dcf27d205588ebc3a688e5c8ca95da9cb34dbfa537b21a6765550b517e924f35a4735436a1d7c212effb58e83b1efacc5be735446df3944f71db75d1890d4a15804d76a2278623b7f117c18267c9d46f8669fc21763c2eb34c29ff7297c09267cbd4678dff6fe841f8e09dfa0115ee653f81198f08d1ae1db7d0a5f8a09dfa4117eb34fe1cb30233f3aa89197606a1fa351bb6b077f6a2fc7d4de1c54ed528de46c31322fcc7936ded14ffea622f0857bd21b01cc97e3d1cdb149f57dcca554a68b175e421fa753c947515e8e59d3f11a6bfac667225881093f41237c894f535d89093f51237cab4fe1ab30e127698477eae84f7805169927078ccc2331c1a7304d5d70a4b0ce35228d6589cd76f9dcca6ab9b72f5f5ca05c745c9708db8f399c54c7359f299d25adb746da74a563eda39dab7eb45e8d697daa4e6bdef3ca9db8b17ab3db94749b21ba7185596ca8ac750ff5a557256603a7696ce07e9f065685057a6b401ba8d608ce1683942b48f3596c1c69b170def3950d56084ba9f23dea34799e7c7ada79f2369127f3e11174ba62f9f71a5d74f3baf5190ca95bf3c5b0da70957dd5add7eabec36df62c8dcde6fbccb78ec2849fad117e884fe13598f07334c24ff629bc56279c576bf8925081aa35eb30b5cfd3a8bdd3a7da7598dae707557b3da6f6051ab5bb76f2a7f6062c6fbb5097a17382e93845b244a2ac1305142f62e63177a6ad3b56aac4b95a264651ad12e7f344d2e49ec5e5a2002866b39c6b4b85f363a5e84bac71aeaa51579b983b052b4b54c7dce557b244565026c7e2ad16576ac553e5e03bfa02a742169cb088f2ebdddc8845d1459a281ae4338a3661517471c0e2e7684cf025bab8e7a319dca52060bcf8f9de3158c6ba1dcb58f9ca66fe9d169bb1705da60b178fa6c5f59e52d77e0ff7592d3a168bffcb75398bcff8df8209dfa111deacb33fe1c761717205162757661427c7ebbec333bdabd231e224fd7c276082af0e28f844cc8aae0998ec4ec2045f1b50f0c93ac13ceef98270deb19d5c809fb19da7605678bdc60a47eee1cf0a4fc584dfa0113ecba7f0d330e1376a84aff5297c2b967e6ec2d2cfcd19a59fd331a3b94597a7f111704b9d7fdc715629726b55c656386515bfb35634157979e8c7c2b6615adcaad3a24bbd1639ce6f5ef2f2be29777450e63a9c81e9709b4e873da40e79ceff52d118e2ef6c747e67aec1999806b7eb346805e282cf21e235233f5f3b0b33df3b34e6bb6f177fe67b3666be7762e67b5746e67b0e9635ddadc99a9afacc9acec508dda321f4b34f42e761c2efd508efd9d59ff0f331e1f7e9e2d6a7f00bb0b8bd1f8bdb07328adb0bb1e4f060b2ac29b781b3a68b302d1e4a9e358d69c0ace9624c878793654df90d98355d8269f048aaace960f13d7ff31db6ebbec6cdf7518df9b6eae6cf7c2fc5ccf731cc7c1fcfc87c2fc390f12d098354c72ec7e83ca9a173a14f3a3b303a4f61749ece88ce1558209ed104e2079f81b81243ff6c40f457615a3fa7d17a4a777f5a5f8da17f1e43ff4246e8afc102f1a22610dff80cc4b598f09734c29bf5f027fc3a4cf8cb1ae1519fc2afc7f0bf82e17f3523fc3760c6c9b7be438bb5bc062ed66ec4b4d8a9d32256ace53660b17613a6c3eb3a1d54b136b6018bb59b310dded069d09ac58ab5a9a2c36b8d4f4fd52d9801bfa931e09f7c1af0ad9801bf8519f0db1919f06d5820ded104a2b2a7bf40dc8e097f57237ca74fe17760d1cd57a60f522edc8969fdbe46eb7d7bf9d3fa2e4cf8071ae1653e85df8d21f9509702781f4a723f7da2273798cfdef59b9aeda5bf078ba08f3411b4ce6704dd8b09ff58237cbb4fe1f76159c6275896f1694659c6fd58203ed311eaed2f100f60c23fd7083fc4a7f00775c2b91bf88b74b28c246ee0873482b3c5725f8dd3479fb8f252c3f6d17fa9e3a5eda3dfc552f5d107d715eba37f18b3a5af74a9cda72d3da213cebb72f9a6b781ba721fc5247f1d54f2633ac93c2ffc261dfb4f92693eaeb37fb128dd8a46b1ff206ba225b7fc6fd3b6fcef84e50f4f62f9c1566ed3c7c41398f1fc36a8f13c8919cff7018de7299d609e4c7fa749a63ff6f1974c9fc6b4e67b20275489f8fcf249a239542ea6a5e826346589ea5296cfb167cf607afc41a7075f53c59ffc6731f93f048c9de7b0d8f9a3267656f5f5173bcf635aff098b1d9e4656c92aa28a8ff2faf53e321d19f80216c83f6b0259d9cf5f205fc402f9a32e903c05aa71066e7d367e98a69f60bd847df92fba2ff336b93baa26bb7e55efecfa4571e63a09a28cf91dcdf132a6c15f751af4d06a304bfcb54eac20e0d6fa339b37f60aa6cbdf74baf4495317cd46243e747a1533bc9f348677e69efe0cef352cc07f0f9827ecc404ff23a0e0d731c1ff0c28f80d8cf3cf1aceb7fbe4fc2626fc5f1ae16bfbfb13fe1686e4df0191bcad13cc739fffa423384963e81d9d60de0efda5fe86a71dcaf751f7df0e7d17c3fe3f0df61903fc617f0f0bc4af5820f84268fe03f13e16085e07f00662abcf407c80096fa2117eff5efe847f881966d388263be57311e733b84c4c99a863ab8c3cca868902af5afe8e9f859025cedce267a458fea24694fa6e965bcb2ac50219b50c4e03779d4a7c42f35a4fcd407d873b93dc2276457d769e2532f3329f43fb3ec25834d3b1e0eb26c1b5e6dc5a66ac808d4dc9de2034ac6470d0ec2a510465a59490eb3ced77e6c6c798c134d7184c339f06f3894e384f522d2248926a995192fa140b442b4d20a23e03f11916d3ad7531cd47efeb5da48ba57395cf7ce1ad0b7789a264711a4d7a7798188eeaba5563761d9f02d608cb502ed4f87beb845dadd3a4a2e542c335c001ebca5e235ba77eeceb738c5e1b1d3d5edf77292d157b66f215c30b9d945e2a887a7788f3a3c7179889b4d598c8e681fe4ce44bac606d170956b0eed209e65ec6f6e908de850bfe0ac3d14183e31b9f387e83c579475d9cf3115cf1c3ac630da058d7839fb8fe1afb7e27ddf779a8759d0b7ebef80d86b3b3ceba06f9c3f92d169c3d74c1e9adc1b941389956d5171241017f8769d445a7d15416c66691aae7aa21338ddf62e55757acfcea9651f9f53dc6b3bb8e671673fbb1f9e8d97548a813dba899f7b2ff0ed3ae874ebb76403b5efd5bc92aa453d51ffbdf63ec7b62ec7b65c4fe0f58e87a27633f2624f63f60daf5d169d701b0e76eb39a00fcffa8fb32772bf78d04742bff0993dc2fa8e43f6392f70c2af9474c72ffa092ff8249ce0a2af9af98e4014125ff4d279917777b698abbef87f82bee7ec2840fd4086f37d49ff0bf63c20769848ff729fc1f98f0c11ae14b7c0aff27267c88ce6de053f8cf98f0a13ab7814fe1ffc2844735c277f914fe6f4cf8309db544fd09ff0f267cb8ce5a7c0aff05133e4223bccca7f0ff62c2476a849feb53f8ff30e1a334c21ff729fc574cf8685ddee253388b20c2b335c2bb0ef3273c8209cfd1089fe85378134cf8189db5f814de14139eab117ebd4fe1cd30e179babcc5a7f0e698f07c5ddee253780b4cf8585dde32dc9ff0963ae1bc3e56a0abd931a6919ea4f6d60a933e4e279ddf70db8cd9192c5fd81ac3345e17c13e31b5c1844fd008ef34c29ff0b618a5bdd371af2441d20e13bc4f40c1ed311cfb6a70fce49375079d70de43bb5f3a5a6fc10577c470ecafb3466eecd9bea874c2e41fa093cf17d44f1ce73a5bb493d41aa9b13bfe3c239d314d26ea34e112f84027bf56b007f6954998834bb776869f2f76d17c315becc3c8172f0d6be9b762e78cfb83fc2ffb3639c2fdf5f16084ab403b90ab30c22ba7dd124296ecfbd8f0acaebab8e2a75322bc151fafd281b34f68b9a3efeb4d12a2a6391e35dd306398aa3306be39037711b8c3b42b851bc30d54854f53ef8e7d779aeebb1dd1ef564bdfab9f6ff7c0a04ed740ddf4f0ac2386b47c7eb51fa83d75f6de376c7b2f147ea49a0cec7d4684b73ae3398c46acbd08b1f6645fc7acbd978e9bd8f8746988dcdce7dc9c7c81d839a1c2b93257747cb9dd68b519303d30e27733ab9982ecc0849067aa1f46bdb72e398875a2837a7afa6092670795dc17933c27a8e47e3ac9bcda3337127c0fce3db15c6f5ec09a5d7f8cc7414179646192e707953c0093bc20a8e4bd30c9c541250fc4242f0c2a791026795150c98331a33b38a0d10dc1543e24a8ca43759279e5e3d074544eb2776f1453f9b0a02a0fc3282f0e487938a6f292a02a8fc0241f1e54f2484cf21141258fc2242f0d2a79346673cb02da5c36a67249509573309b5b1ed0e6c660824b030acec5049705149ca713ccdb68e5e908fe0e179c8fd5075634407d602c661a2b839a46814e327f7e553a3c920c2a1a8781ae08087a3c661a4706348d0998e0d50105ef8dc55e65d0d8db078bbdaa80b1b72f167bd501636f3f0cf29a8090f7c704af0d28f8002cf68e0a1a7b13b1d8ab09187b93b0d8ab0d187b9331c8eb02422ec404d705143c058bbdf541636faace09b1a7731ae1abeb873f375537bab061e7a86e48272e86e1c4a66171b131685c4cd749e66bd96f4a47e56db8e019985d1e1dd02e8b30c1c704147c2096f637074cfb33b1d83b3668eccdc2586c09c8623626f8b88082e760828f0f28782e06f984a090e7612a9f1850e58330c12705143c1f6b689d1cb0a1b500d3f894801a17631a9f1a50e38598c6a705d47811a6f1d6801a1f8c093e3da0e0433014db02a23814d3f88c801a1f86b50ccf6c8096e1620cc75901712cc1709c1d10c7e15816774ed02cee080cf4b90d007a29a6f67941d55e86a97d7e03a85d82a97d4150b59763922f0c2ab914037251030029c3d4be38a8dae598e44b824a5e8125f2ed0113f94a4cf0a50105afc2045f1650700526f8f280828fc404ef0828783526f88a80822b317bbb32a8bd556192af0a2ab95a2799379aaf0ed8b65c83b500af09d8025c8b45dfb501a3ef284cf0750105d760b1777dd0d8abc524df1054f23a2cfa6e0c187d7518e59b02525e8fb1b839288b0d98cab704547923e61ab835a06b601326f8b680828fc620df1e14f23118e43b0242de8c555eee6c80cacbb1188fbb82f2d882f1b83b208fe3b0947d4fc0947d3cd640b9376003e5040cf27d41219f8841be3f20e49330160f046471b2cec9dddf398df0cd584d588074b17459379c9bfb411d33edc8bb87227ce45d36f3b3086926fa6223f24ed1453b8f9d87d38976ae3d22f8549d607efa482471e4abfaf133f2f5342c977cb40172c9ad98f0c71a40f8e958eef078d0dc619b4e327ffe897462334977e0193ac17c58fd93e9082ec4cde44c4cf05301059f85417e3a28e4b37592f9ec9367d25139c9ec937330959f0daaf2b958627cae8112e379ba0ff0f55f9e4f87c92e5cf0f918ec1702c2be00cbf85e0c98f15d88097e29a0e08bb0487cb98122f1622cd37ba50132bd4b30e1af3680f0ed58ca792d68cab914cb517706cc512fc332bed703667c976382df0828780706f9cda090afc012f95b0113f99598ca6f0755f92a2c31bed34089f16a2c477d37608e7a0dc6e4bda04caed5d5f4b39cd3c842d638736a544dd9dffc99f7d3aebd7f206aefbd1242978e0e588dfc3a2ca3fcb00132caebb1c8ff2868e4df80a9fd7103a87d2326fc9306107e13d6a4fe34a2991f38459cce778c65019bc266d62fc03c87f125b03788085e2da37eb4984958e4dc9febdca91626bd542e7994d870d38dbee24f43d3e286bf86b9ab36fadbebf0662c949fe942796a7d28d542686e02ad127f17c94db16ac4fa906e022daa7f726afd9ae7f1abaad6481e0bc4dd3247629d0817971b4f2f26813fef4f0f4c5231e35304578abbf14c6162f5f25ee4c8f13bdff4168cf4e7983dc12fba61ca73de7169ad116b4c4e171953890c6db15c67deab6dec5dfc7a43d9d3ad5828bfd085727f4f282173379cd3448c5589307ab58c8f217827595a816ff909d96d58c8bed485ec80b4e26f92585bb582a96993c1632e76c74fd86ec7c2b64b17b6024fd8668bd8592543c6cf36365a48eec042f2952e2467869c9fc5dee1abe8563a523731be44436c71fe5a1f560ed9e1a1e065499da866c05c8f57b01a2e6fbb13a3fe1b1df54969a58d59ccdde6d1845ced2e2c7c5febc2378bd0aaf8d5a3c46778a8dcea7085f874053b5aa4437d4e9249acde8d85fa1b5da8f74b1a6a5cd3f9222cee6ad26e185569ccaf964a4289e922f3d8bc070bd7b7ba701deabb66b740dc89afdbe924b8d7e6d5e703354e79c09b3a416a8299c4f3bd188fef743c668652665397e6f76161fe2d564ff16703ca86f98235a542108c67bf16e12764f76321fb5e17b2bd9190a9058eddba89dbd456ad964532159725c4064d1be5012c44bfd385681a61eeab62d55df5653973f7736ab8903e8885f4f7ba90eecbb0ee415d4e111f02b86d2a673243c4728d680d953a25eea6060cd54358a8fe904e9b20febbb086b050c4428df32c4f872b93947ef1321a2e640f6321fb4117b2c29439677aad023c0f4dd666cd34a77c040be31f75619c8eda24aff12e771e52617597f28a6d649d3c2fd1cb6ce892f0512cac7fd285b59cb8f5b04e6c47cc29b9ad8345c2da2bea739e86690f67c2e9318cd39f759c16365a2b2b39a1e01c1ec738fca8e330d967da3021453c8185f02fba1016f90ce1c1c2a2ab9118698cf03e8985f7afbaf0ce27b4ecda0cea1a0d41e0298cc0df1aaa0ee2e66d93400d843e544f63a1fa09f350f80dd534f144620c79f39cf4e5fa09df3358f8feae0bdf3e016a8eeb4469c497785b21db7978a88a139ef513a667b130fdc35f9c79f31eb85f6e2acba32c3d9ec3c2f74f2c7c7eda8c6e58a7cb7a44ec2eeff1485e3b6ca89ae3f358f87ed6856f104bee152c76085368f902a6e5bf92fbf6fcc4c2828c6281d2f65ec442fd6f5da847a169abb8beab1ee611b1dd09797958a7ad8b65e6df7f09d3fb3f3abd27a46c711589be41ee7dac147bd34d65556219cbc4f66fb218c8bc05f932169e5fb01a64f234c25bc3f344adaa5653aea6d397c06b232b1a3084af6021fc6f3a6d647ddf4091b03dee072f913eaac4f80ab37fe0552c8cffc33c54e9f801d20965663946e6217d0d0be9afba90ce482b36bd3d3d6e3a54e16ecc78dd89859635d184f69094f14aeb19a7f699bf8ed188e868ec8d96198953171aab86f90616a226ba102d444394585b4e9e82d369cbfa6fef666ee76f621c9aea380cf7c141c5a95a25bda16cf12d4ce3663a8d87a44c99b1fe9a7271958f6768981acbdb98a6cd759a8e4b52d3f25a7abce6ee067d31bf17457a79070b4b0b5d58bc6398b0726eaa6165dcbb58285bea4239d3773ee7b6c912ef26f671ab0d1bf0f84c94324978d4793bc34f98dfc3c2dc4a17e6c19e988d7d933a35bd8fe9d95aa767ae474f983f79759e2e754eb75691a9a7e6032c046d742158c2e83c8cca3790ac8f015a60ba294fbde387ca871895b63a2ade3e42f5453fb94a2c64588a6b98dce4232c64ed74213bac91e3db4f3c679a023ec688b4d711f1b696fcd6b582d797338ffb4fb090764827b72a14b1eac6e03ae00573ada080e5a7089f2e27e36ff909c1a758083aea42a01fd9c7bfe92765c2f061d71b2a863ec3c2d74917be59296b34b1ed50bc3aaaed68f0f4856da5922c4d6656da7f8e85bab32ed4a9bc4e6eac2e701e5ecedcb65b296bec11cd5f6021dc239d94a7279c593d21750ba7a5f32f12e1d36da60a29ae0f6f8d7887d70ab30738b72239f525436c1bfad171a543ec3aff7e95131b3c4d14d7e7ed7cba5172095d9ab85579f13354eeefe616889115cc3b9da950c8af94f98db2d6d182903bf2914fd31a2db618e76fa98959a942a12be54683720e862e75980e47265a45c4b6915096437a2f4e7a770b69571eab4365ac36c9e6fb39454664684da9b5e8c6bfd6546f433d12c8c2d4a1d3dd1530477a0f227c4191a5e233f34463171f569cf2cbded5acbd5f1e2504a8fa604a710b4116a013d74b989b3bb4ab86b90ecfcf1c992d9b37c9e131d29d125b27a6b68c742758ce62ee9ca185ce9532f9b70dc05e1e1a03d68312189fbb39455494d73a96e60e315285346671b55620e463f715c29ed436a7fc0033442f29175022eab27c24cb5cb6da0a6077b78a01eb4509ac2b73b798cc61b1c13f3683ebd43606ae3725b8ce9edc8d8fc4d92850d996bfad05f95b1f4a647b686c8d0bac765ee2ddc775e26a9915d096b118b4bed409343e479be6fcae9023f3d4f81437a1da002eda2e06ae1f2538be63351f68916e496a03bc0b4139ba2725bcb620a9ce8df3f2d980a96fdf18a6fe94985a034cb149053620dada3d86288b12510b81a8d6aa3caa59fb189c019470f8c2a173ebdb95aa33d51db0315f64fa758c0f55e7d9fc3ce96eb401e0fd2001ee455d3ac25a1887c485d9dad6fc09d4c50686d5507201f2b292bb0263c3fe6d00f6fde018b04194c05a81ac9eabc94732d800e8adce3140832901b5f32445db92de0e90f48650571ae68a3ed6d83a3a7624b6cd205b1f1a566253d3b56c00b4a34b0c5034fcec3bde656303b0254362c0865102eb0d804d158e9a522797526d3f3ef8b78c95cb5a5789f077553b8236590191ff2888c32921f6632c0e1eef0ae1f3f6cbeb97f62eb3bc81dd15748e8ca044d95e1602cade36c95aff42566b4979b91d140623e91bd96a5529553db501d1cb7bc5108d0acb49c80b0238144bf9bd6c6a80ffdc32066e34b593108283f3832709b7a17d4da2cda00b249bbac6af6a69b1e9aeee247b1b40dd0f9a4639d4b5b5d922f9adf6acde34c579bc467cc90660cb9ac4808d09b7d3237e70699965f95925e8cecda5ef62e365e514f1699beb622f378f41cba384d60640e343a96caa627c362806299f3a494e15034eeac4c7636bccc5d61cac75da0215cef76c00f70db0aeb194e03a305d537d9203adc42900ecb0b275c0cb5a405dd77721d956d78f0e8b211a17963dd93a7a820f2b56b0c6d30f6f5a037a86ecf64fec0b72ad09e124c483653eb5d0928cfd2de052dc9b1251cb7a445cc90a4baaa259a09b631feabeedf94eb22b64e92f206d03c0adc237d1b2b947b877c658e6e3f7fd51c7671a7464aeb776adb8eaf60978661e389547f334df17ce1c8866ecb98fa62c29a3698f488cfa1e4d16cd703477342d674134a02b3eea634e43d457211a4dbb091af5d5a48866949f447d7946a3befc0ed1b4069b477d8db08efa7648ea74c607884613866345937af1a2da610f516dff6c14190d174d3298308a74864753f48f44331a391545ba12a2a807209ab2f5164d6b240df654bc0544915a575453d588a639003d9a745c4634ad493a515fc3aca248232e36e1101642b1898239039c5bfbfd7f3e173087cf05dc9f43e03b81f11fb7a67600754d8da74f77ea272f3d932f4f39c6a92f7974e89ba043fca67aaa46a6d3a6755c9dad433a01cca4de960dc64e4f340967ae95384b00ce4926e1ccb312e7b100e764eabea8a53211c763750b51fe1819be9654f8da017c856158e34ad41ea1fa4bd904564087b31d15ce1600e71493708eb712e72f2c8673aa4938c75a89f34e80739a4938f3adc4b91de09c6e12ce7156e2fc06e09c6112ce022b71be0a70169984738c9538e7039c079a8433cf4a9c1b01ce9926e1ccb5126739c0398b12673789b354fa8cbc2bf3b9aabbabbe8da103d99c0a640f50819f6d0ac81c0b41760520e750cfad504ef2743b2cf8f335e259fb1c1e5340529f4b0f16f3b92f65ab05c6c9c2d1abb653e5be74be5576c2681a0bc0760560e75182edcf60d750fa5da3365bed5e00ee41d4131392793da138d2228acc653718e4acf329517694280bc2f777f6a682f720b0c30561c01bbf1b398bdf02f08a29e1f54851398a4fc4a4de233298bf0330179a04739c8530ff00602e320966be8530bf03300f3609e6580b617e0f601e6212cc5c0b617e0d601e6a124cc29e733298df029887990493d0dd4106f3730073b149306d6ce1fc06c05c6212ccf116c2fc01c03cdc2498132c84d912b4bd8fa084395cc2ac741eaa144735c41bee4bbcd4d7eec6a48ee42e54c88f07c897d2cf665e25464dbba3b8570a78f639dbda8124bfac319d6df13b1c115adf162a94e703eb2ba144d9d793e05d5fbbdba151e424efddab9bed2280753925d6a109f9688910368da93dcf273bff79a25f2fbcec752cd99e4fa4364c56682d04b04bc3c80ed2ab01d888b23fc859cb2851eea9c959d3dd239614ed362ab4d38195968799d356384ac476174b568011e6b46405d81500eb0aeac43f494ca95c232792f19dd1786f66b59c5caaa6d7b99316edab563503897f6518fb7d8c71fe57c98f9788ba00bf6a730fd24900e1aa30108edbed103e061056d0efdee60e5350c749cc1d6d66fb209a4700c4234d9a84453a38960ce701a090596d124ed2d19c6438cb01ce4a9370928e3526c37916c05915ce14c19cdd68c8cc9720afac3667e8968deee3fd8125ae0903251c143bcba9844f97eb3eac607ccd83104a7032949b8055aea5efd6800ee1461bfa4a96c4db039847d157cbf9ad15ce69a123aa54142f70459e35943e7732849d01c29a303c43ebc4023fb5f57d406a0d0d75d4f935c7508efa2043bb03a0ada544db87c58f788fad56b3fb8d76df03405d17c646b958a9ae42ba9472104d618408e3e5a044af0ba3773dfdf513c86092cd62db1fd8e47a9360128efb2083b90f80b9c1249884a338c9608e0530379a0493707c3119cc1100e6269360128e7c2783b9378079b449306d9c463d1ec03cc62498843d8f64300703989b4d8249d83b4e06b30f8079ac4930092bed64308703985b4c8249d83a27833904c03c8e1266164b6c48fa1bfe4a58be930d7f5d021a98c737e6f06d6f5f10612e4ae6f418066cf50493601296ef64307301cc13c3e856e39d19ebc140ad50c67190e1eb05f09d4489af17c09738fc950b8b2d8a62f3c098d700d093c3185b94b3db8d2d3a11203c250c8405bb1dc27d01c253cdae0e117a35c9aa432781ead069618d7e8bf5a0c34e60f2be73b20eb513808d6e356742808dd3fbf703284f0fab144fb5778acd23332700a0db4c5a18728295ae8ea620bf3cc3249ce3adc4f92f609d679a8473ac95386f0138cf320927e98a1e6438cf0538cf3609e7382b717e0a709e6312ce022b713e05709e6b124ed26d99c870ce0438cf330927e93e4264386b00cef34dc249bacb1519ce2300ce0ba8db45e9edb0395fa8c6f7f8246c171d4805341f00bd308c854b1b61972bb2b9e5d500de45f42388d399b61f3fb39c70b0cc7754503781a6e5c5264225f4279141dd08a05e622254c2018764500f0450b79b0895b08427833a0940bdd444a8848369c8a0ee0ba05e662254c2810a6450c701a8979b089570280d19d43c00750725d43c96d887143fe3ad90c5f68c760312bf03f51cc6bb4236884fac069ba8178325d6482321872a12f85c40150957983335dbc6e5f8c7037bbed2dcf99b844318c9ba9bdf01567a95392bd0922eb54266a79b01ccab4d8269e3b611a70398d79804d3c66d23360098d79a04d3c67125470398d79904d3c66d238e0430af3709a68ddb46ac06306f3009a68debc9ce03306f3409a68ddb461c0460de64124c1bb78dd80660de6c124c1bd7fd3a03c0bcc5ec41e1366e113114b4dd6fa5c4db5ee27597507397e9776557502e0244b60c3f0376795bd8cb99a7eff6b071d1aa89c0266f0f6b60f86ce1d15cedf1784e715eab115fb47960785f60ab775002ed903491d7d2a16b4385ae0940776763cef7b07f1d86ee00e55d614c7ae53bbcec3e935e17007c779bb17f86db7bb45658acdb2f446a99bba8d09e070a9c7b4c5a349ab4314966a92301ce7b4dc2996b25cec301cefb4cc2996725cef500e7fd26e124dd70940ce73500e703943807b2c4599c70ed6377a4f25ce7f532c65be5f3055877fb9cca702af09da920770365ff83268db09f60e52a8acd80cd3e6412cef156e2fc37b0ce874dc239d64a9cb7019c8f988433df4a9ce7019c8f9a84739c9538bf00381f3309678195389f03381f370927e9401a329cb300ce274cc2996725ce7500e79326e1ccb512e75280f3a9b03a361688364f9d237912e3db892e92f33bcbc4fcce72ab3b369601a04f9b3388dbc6b14939a04df44c188316d49294ee8ce3e5c211a21eb27d25bb326097cf8631e3b81136cd2383770080f79cb9d309080b20b29ef5eb01dae7c3b0cb71e1dbe52e2a780f01782f84016f42f8f0c82cef6d00ef45fae265956679bf050e9352562a155a2196b3e08e61fbaa3d6d01cc97cc1d7b44d89d4166a7fb806ad0cbe6acef69e3d48191c04a5f3163c042b1c83fab45f2e7e2aa68d1922dcab20e58e9ab26f561928e3126cb4f67029caf998433d74a9c3500e74e9370e659897307c0f97a182df3f49c1cb956cecda80330df3009a68d73338e0130df3409a68db3d3d702986f9904d3c6d9e94701986f9b04d3c6d9e9470298ef9804d3c6d9e9ab01cc774d82696313731580f99e49306dec01aa0030df3709a68db3d35700981f9804d3c6d9e92b01cc0f4d6a5092f602913528c7029c1f998493b47a44867339c0f9b1493849c71c91e13c01e0fc248c8df4c6b2dd6d23bd2b590ce1a761ccc948ed792f64dea982931ca135620d05d29ea2872244902f0476fa990d9009ab5164904f01903fa784dc4f42ae741ee280cbe5cca2d87ca2f8bc160e4624044b36a3a81480fd228c65551458b58d2e1713eb9b4f5667b5b1fa7f10c0fb6563762387b65af2162a941d00ca5d942807089445ce43f30530be68c57af97acc5a97ca4d22278b359257cbfbd39c63b9239670251bb20a576b505bf8ca9c41b43626fb3d81adfe861265d71428554849ab568554a5fe9900e3d766aff945e882265bf3eb6080f71b7307d812f688920d1ffb04e4a5df86910160e57e2c0320cc47c932802ec042bfa35e956e9e749ba8490845c23279b2b7af2cef04ecefb761d85f4ebd0d968906a9bb0a83ed6b2d3d0a307e4fedbde7c0a6880f37eaf67bb3a960160098bf0ba37e9993a49969b7636f2740f9fb307ca3f9bb9d6fb40220fc43181e256e8d5345195d279498e5bc522a12f95cb64138ea6a9c7bbc82b496d93c17731c00fb833923e76d1cbd742040f9c730661ae57b5a413697dd7500de9f4c9ab33e81b22d4e36673d02aae27f3609e7782b71fe1358e78f26e11c6b25ce6b01cebf98849374313f329ca7019c7f3509e7382b717e0070fecd249c0556e27c00e0fcc9249ca4cbf492e19c0e70fedd249ca4ebca92e15c0b70fec3249ca4633ec9702e0138ff19c66af1796c775a2d7e2ac0f7b34983124977bb24c33905b482fe65124ed2e95964382b01ce7f9b8433cf4a9ce7009cffa1c4d94a082817db80d7307700a27d63df5a80bcf1174a5c43999ffdd7b993b84e8884fbac736a210c89994a057b0c80fddf30caf131a2d2b3bb2c86d61624edff35e6e0acd0da3b64c9fe4680f2d7303acf78cfcf74c67b73789fcf4ad17d5663751f4f2d48ccaca93143056d5c88623f608d114a947cef8879a23829636a302b36d080708736b264dd0ad864134a904146b391b6c1c946b3fd1ea06d6a2a5ad2c2880ceda5006d334ab46a7e707abde579562e9df20a80d9dc2498360e3ef810c06c61124c1b974e7909c06c69124c1b974e7919c06c65124c1b974e791ec06c6d124c1b974e7911c06c63124c1b27513d0d60b63509a68d4ba73c0360b63309a68d6df68f00ccf626c1b471f1c8cf00cc0e9430d39f2b49588e934d95ba0cf8913a5262ccd260f4375792b069493657f25080b713b59b2eb5ffbd400cd5262c889a5381bc0a80ec6c0a48c2ea1119c87301c83d28410ed080743b2eb8e3ad9a1d287a2bd7261d7b4408986ce45153503075a1049ccdbc4ba354b015bcac7084968a4109707feb35c2dba95ff867ba1419da6a1fc3a8e05703ebee1a460f537a552c1b7d4f39c08ebb51a2f43f1186b0be4a962db40796d9dd249ce3adc4f92bb0ce1e26e11c6b25ce7b01ce9e26e1ccb712e75500672f93708eb312e7df01cede26e12cb012e7bb00671f9370922eda4386f33080b3af4938491d7b64384f0138fb99849374931d329cab00ce3d2971f213b516927d036a3a024cfd4db2ba09946e6532ab6b025a3b5926e11c6f25ce9f81750e3009e7582b715e0770ee6512ce7c2b719e05700e3409e7382b717e0c700e3209678195381f0638079b84738c953867009c434cc2493a8e8e0ce75100e750937092eee84686f37080331ac6109b1c8194f76a2e7542c7270bf215e027b10dce83ab99bb1080add3b5fe08600ea384d997c5f764720e758c8f06f16eede09d704dd84749867508681b0da7c43ac48375394b9cfe92fe441942d464adfa6d00f5084ad43909168c81ac457be10bd9eeb6c7d10500ff484afcbd92e6c61cb25a9dbbccea1cf9cf20471e450954cd411ecf76b7057c9f04084753225493125596502bb2016e81d324bc72edd0327b37853a0224f7ec3006df603559288e748f0d322bcd052873c2b0d2cca6ce120ec925ab13dc073280319468d58a22e3d8eeb432d88f005f2e253eb5b8f4184f520f011e99ed4d04f0f2cc1e6d4f388f8e6cb47d31c835f3c370a6c0ad227439a4dd55a5d781b58ea5c439c85355aa6470bd9bdd7dccf25460b505e68c59b67152d81c60b1e3c2c85f95c5f2845fe6592767f7f35cf501963a3e8cfc15abe027ae0a4ae8ac26c3390ae09c60124e52df3f19cea500e7de26e124ed9922c37934c0b98f493849074990e1bc1ee0dcd7a48ebe0994cb0c9175f4b50638f73309e7782b71fe17549cf63709e7582b71de05701e6012ce7c2b715e0e704e3409e7382b71fe0de09c6412ce022b71be01704e360927e95e0964388b01ce42937092aec74886f35880738a493849b79e20c3b902e09c1a46efd198c6e800d945856f17c0372d8cde23fee115c21295ec6af9887ddecd0880379d125e7a6be0a842c6be810af9a0f138c31490368ef8e8074016990292b0e7920ce43200f240534012bad9c8401e0640ce340524e108243290a70190b34c0149b88e1219c8cd00e46c53401256bdc9405e0c40ce310524e1083832905b01c8b9a680241c6e4006f23a00729e2920095746260379090079903923876d5c987f1840393f8c1970e98d261a6be5ce30dd01cc0526c1b47141c93d00cc629360da3841a01b80b9d0249836e6999d00cc4526c1b4713393ce00e6c126c1b47133935600e62126c1b47133938e00e6a1d49d0fb14d988b24d00ae765be57267f8d0c1ed9d4153e304ec13b8c125e3fe69d91a69f00502c3ac138da15425815ad0f7d1b15d83500ec624ab003997796853b7125361d950be47d8bc913bf8df9e80290f4975042f62e65e10275e7a417b129da76bbbd9b499c0ab01e6eced4151b0ba728c8068ea044a966fc421748fa392c215aba1c1658e9d230137f85a3c42230f3170a0f6ddeda162aac6703accbc218cb3136fc813064c9fd0e90dc4bc2a8d8a7e7f11c63e5c67a87004b5c6e124c1be7502e06304b4d8269a303790e805966124c1bb7169f0760969b04d3466ffc2c00738549306df4c6cf0630579a04d3466ffc0c00739549306df4c61701981526c1b4d18b3419c03cd22498363a3c0a01ccd5614c4cc160262e2641580491cd2fdf1be0ac340967ae9538cb00ce2a9370e65989f37480b33a8c69537ce1d2dd67d1bdbfb218be3561e0cbddadf015027c6b29f175657c0fac12b978391755ed3cbeca797c8df0b01f2d3a802bc4997d189b038c475162eccf1297737697d52f153c78cffa24c657dada7d96765e08e0d684d1ff93d98aaf846d20b2a10b5703b4b5d4c93f5959ae424adadfc3ebd52418cf0065f83a4a8c591a8cfe162f2574c8912d5eba08e0ad33370320ec1f22cb00de0319c07a4ab40304da19c23ee733deb95b2e8bab32214a0dae592d2280db71a9f3b72b7e9a732c77c496595878b50180378491c362e3400a85c5126f57524495c3f60459c0c630fc4bb082a56aabb1faabdd15aa9ec0263785316011c24c9d05d80b761a007b342558b509491edbdd3621b90c203cc69c717336f6b01701949b2951eee503e502e79b5cc83a36d7f94bb5f86b698ba59954c5522f502c1d4b89586de3a4c6cfad15ee9255496dd6c67ea40d00e896309ccbe9af054b88936c4d2e06701e6712cef156e2fc07c8518f370927e9142e329cd7009c27988433df4a9ca7029c279a84739c9538df07384f320967819538ef07384f360927e9801b329c9301ce534cc2996725ce4a80f3549370e65a897331c0795a188e901cf1db3df2fed005ccf536d9eb4b5a0e106e0dc31182d963687925d91a4a378056d0e98d8932be7d6ee344830900e5b6b012b6eb57e28236ca441d8287f33b2a848f83847d46183d421c6179fd9a0beab6ed8ee26701c633c3ed14deddb75dec0dd09e656a7f3b69c588acbffdb700edd9a6a2252de5c9d05e00d09e1346d194bbdb75be0d0508cf0d63302ddfc021f4c1b464e39406007ce785314821bdbecb5c2b7b2f6f0430cf3709a68dd5f69b00cc0b4c8269e3fce04b00cc0b4d8269e3fce01b00cc8b4c8269e3fce08b00cc8b4d8269e3fce08b01cc4b4c8269e3b88e3301cced26c1b4717ef08500e6a526c1b47185a49b01cccb4c8269e30a49770398979b3d118630e19335304703effb8e30dae7058dd13e27eb52fb13b0ce2bc2f0bc8fa94fee65c261ec0e76b51de31300e39526f5954fa02c80c8facadb80447d954938c75b89f37fc03aaf3609e7582b71de03705e6312ce7c2b715e01705e6b12ce7156e2fc09e0bcce249c0556e27c13e0bcde249ca493abc9701e0a70de6012ce3c2b716e01386f340927a9e3830ce74a80f3264a9cee2ce062c69725e76333bd2bd3ec6e53febb00b037538255abbfe77a5c21360f41a802f06e0963800c4ce2fa815d858e902ae7ab6bc4197f9ad47bb48b0aedd5a0a1792b255a351f980f3c9cc2f80a5f6bd93c81ae4c0ae1c3b3b9c0122100aefd55cb6c1eb43d0858ef6d611451580195b8722761af1119ce11c0626f37092769271c19ceb900e71d26e1249d334486b316e0bcd3249ca4d357c9705e0970de6552f57e02e5c01ab2ea7d7380f36e93708eb712e77f40c97e8f493849376926c3793bc079af4938f3adc4793ec0799f4938c75989f32b80f37e9370165889f30580f301937092ee674086732ec0f9a049384917e027c3b91ee07cc8249ca403bac97096009c0f53e21cc6bc4ba2714f5399c383cfbc54e18c4d77c5c6da4d72feaa11c3c348676b7e1021027e2da8e83f4209bc1b4b3e80313e67250349b64cc04060b98f9a02d2c6f5167a00908f990292700a0219c89301c8c74d01493831860ce46800f209534012ce7d2303790e00f92425c8219ed27d394b9ca7ee67463b196ab2f9ec978272fd294ad4391ed47528487cf18bc43ed290aa550f5155ab4e06f89f0e635e48bade7dc2b12664befd2880f98c49300927d990c11c0e603e6b124c1b7b9d7a0398cf990493b0c82283d917c07cde24988475563298fd01cc174c8249d8922283990560be68124cc2460019cc0100e64b26c1b471ffd7bd00cc974d8249b8681019cc8100e62b26c1245c34886e302380f92afd0071dd3651d39cdf15cc1d285eec08e082eddf26ea101603fb1a25d8be02ec2ce7815231d416ce836fb471f764b3e35b02ac3b29b1fa5be6d7c625aec680a4ff3a254ab5af114cfab19922b1e46efb967b7f01b6f94618d31a325bf793b00245e627bd15a07d93126d9626d9fb5b7384b0194a96abce0759c15b9478bb80ac60bd48f615f5d3c4425a32630b15c45260a36f8731c604e6a758f94f9e9b92d96416c0f94ed893c4d2cf4f6d5c45b90024f777c3a844613da5f195281b17101c05acf4bd30da4f9994f9841d2064367a3600fbbea9606ddc0d7e2b00fb81a96009b30232b09300d80f4d054b583b25039b07c07e642a581b479f6403b01f9b0ad6c60a563f00f61353c112baabc9c01e07c07e6a2a58c24e1532b0c700b09f990ad646cfd5c100ece7a68225745f93815d04c07e11b67f403f40b258f8ae784377851057455b93dd4696cb02ffc0979468d512c46359232c414c6699c703cbdc658e7bc5c685db6703945f85e1534d7fe49e8d4374a78184fd1b937092aeae4786b30ae0fcda249ca46b3f92e1dc0e707ed398037bbc6e691b3763d902607e6b124c1b37633951c06cd9dc237c5a82f042910c79422c65b1d5ee46b3e9ac5cd410398852e77c96a8a2af63cb1c1c8b9d7ffe62e070e79fee7a44ac1639956d646bc555774805975de5dce59ad5b29c41ce23df718368210d222aea11931ce6eb9c67e6b372f1f54d6c017357f39bebfc5663b4ea0492a8d8fc609e73ad8ef1ce70fe856a479355ac4684387eb5bf68a495e0e46e4f5c23ebcd51a9abdab2b848d6602a9c3097084d6a9c679a89efb8995b34d21e9ca95ee322d1b4e15af0088a443acb38e1facc16612971c250228ec5f56f650f761e8b1438bfdc46d2e8fae6d16839cda94a9ea9eba965f218492eedb71c7b449f0e2b1bcc965285c8357ffefe0a312cac5c482d4a19d2d4e1c3edb25d9258c9e6d30077ebf07fcfe35d46bb30d31e91b6ce5f0b9d987785f30da56b9cbfb95207cd6ac29aff3fa4a00b3141970300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/d9d0ec50b1b879f4aa23a3ef00f47b9e.asset.meta b/Assets/SerializedUdonPrograms/d9d0ec50b1b879f4aa23a3ef00f47b9e.asset.meta new file mode 100644 index 0000000..151d52e --- /dev/null +++ b/Assets/SerializedUdonPrograms/d9d0ec50b1b879f4aa23a3ef00f47b9e.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5627ae3521c621449ab9b0a9be2e6916 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/da113172081f2ba40b9cc46674a846d0.asset b/Assets/SerializedUdonPrograms/da113172081f2ba40b9cc46674a846d0.asset index 093805f..2f3a0b8 100644 --- a/Assets/SerializedUdonPrograms/da113172081f2ba40b9cc46674a846d0.asset +++ b/Assets/SerializedUdonPrograms/da113172081f2ba40b9cc46674a846d0.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5ceb53144710ef3d590e8e973c0f05a3891a310a7b3cd53c4c0011898816afaa94953a0f38f4125ee1c0987ccbd7fc47f97ff2317f42aa4c77ef2c37bb37b37b0b370718ef8adddb79f474ffbaa7bb676635e1007eacbb7859854598862158810dd8851dfc358df76dfcba4f5ef90bd8c7fb6bbce6b0ee2e5c8be8499f5b562f5ee7f0a90807d8f310d6f15ee0fa25c8e3ef39ec9bc7272addc4bf3cb6b2eab0d30a3c82e7b00069ab3b82c42a772a8a328be4b21af03a05bf616d9e99a2411cae4ae365096b8a5cb78d4c7bed5ec28f2cd636d6ad639f7dd8429a6b4cb16103af16cbc4b77671a7711aa5df96f8abc7bf2ee999fe2ec21109aeef969e49e2bfc5f30551df233d5ba20d95a74378f0fe9252992df124f3d72b7e378ae74ba22df161bf7ffffe5f51df21ee2989a6274b93e87b596a2397f705786d9168b448b4a86dbf37ae6db1053c419de4600f9c0435bc1dc354bd9ed1464aa4eb134209b778d80334873d24a0b09415b6c303188511a5a55cb29a25bea7f99ac31605264a830586f8ab6c08626e0bbf79c9cc8b583ecbb3840cbd803543308f77eaf50a86d1705f06a8ace2b05b3855f2b08cd73da6f70ad92e6f1925124d89609f45a4e9ced86d2cf100ddc3e72de67089af6f99d33c733f876507ec3f76d0834ce1fd1d8f562efb3efe568db92c2053f3a89eb8ba72d73d786a7a84d210f70ecfb38f1a390d8db0cbbbe2f94287e688f56799263e62e83a199b03a24b63d80d49beb21170d8e72f9721185fc67209d5f64d75bb4c25876dc3e451a3432abfc35294b40cb65fae51703886f547c815862ad11be0ac242effb65d97212e83f85b2afc29fe5a4b35c47f09fb509bad086b52a34fb05e0da20f0a0564ea457231a0088f513ce8104c2810cc244566a364ab31c01635d610bfa0520fa76aaf8caac7cb3b9630c03cc5ba1cb6cfb313a3f2174831876313bd491ea194abf87b842b8e72a9c100426aa5a5586937a42ceaa49ce9d459a7429c93be3f6a8278547638cb0b983cae2ed6e02711d6bd717739a413475e7ab088f74de682cad78569878f15aeb3a6237c4a3a7338719e8991e39a978272d904db4e0bdbce10d0aa6c4764b333ac81028f34a4e48646d0b5f7b078c66bb343d6b66dab2db795473f5bd8e86cdf56b932b2fd3685d23329b1fa71516e6739af29e5f47e4d61b73748e02d27a287c8b38a574432e8215bf51eb25e355f9b6a1fc00e3895a676f10358072fdffcf05a244391bb6f305b512eb2531bd7c259d3194352056c73ad810d4ec978c076551c60ba35e8458daf43af41851eef19e48ca2a77359b4a6a07e257b0a7370d43a1cd99e8a914d33b23743dc6f7cde74a837ea1c58afce81d1b6518a7c572ca793526997da5bd953d4ee32fe7e1711baa2357bb962cdf6b166af476ab652be745a6d5269950afb55ac06d5d8a95763b38a30f93d5acc9f34756f5111a7c24f2ae13aad27dcaae3fa6a15b86e531127acafa9621425e413701ffb6df2fd3ede07f1d71a64601c7f8dc13d78c0656b38ec38960e629b31fc0ee3d338ef704ce07d02e77d1cc55dd441f069152068d729eeb3132aae434598b479bd12c27d7ac29d2ac264dc372a21dcad27dca5b3869b2a6b18d47a8215de6d2af9f721c8e2f735d00148167d9f47824a65af24afc9e3d847b78eefcf557c3f0ef86c795497d35df4d759de95cbc32fd829c7b29094611c87d5f8ebfcfb377124edd1497a4b25e94300e562788135f12b47809f059f7e1dcd63dd3a139297d8d442454fb7188f23595a27d9804ab21f624be61ebf3dc7ba9d63c992d5d8ba6af916d4f72af25388e9f37a7578dc56e1913fc2c35b56c90b40777f9964d9e4231eca3be68e5acee08c7417998bcc7f1e797d2bcd5b1739ff892a0d4dab8c1c4aadb2707915e2afa9364e9774387da1c269de204e8bc25be4591e37cf2b08dff13bdebdf3986a487d5927f51d95d437233dde32f2e0d7995e9f71f8ecd3f17957c5e7446844f1f24a97e3a2f05407a234dc024f8e78bf4e924195240f62c6464f9aca62633c7992f8b5787f6186ad771f7bbee01ef454048793c00c54be6545636fe33ca618b67ce403a237a268534e7780bd09d53acb8ce24135cb87a4792e4b57f9f669f9b96d5248e4d142a43991fdd0247564ad261ccea7ef1cd39aa2b9203badbfa0b6a1f8bb612e810511c32dcace9f63e3d24c9ee61dcc1d4e8c36a2c78bda3f1a6402de995f15dee120239b44ce3678315fc42f7d927622437a18360916652859d6899b0dc85065357b99e701c07f18c0a41d201e5c3654eb658b4af792cb1d4c1bbbf4777c4eb0cff436820e87d7a0678df311d9610c444eba8163595a29eaa9a35586d01bfd9f07a40c05a43102a1cbf3dfec37c64dfa8d246b93f449533d8b1e3d30c2495e9968f4f987964ad83f8e8fa8939cec8449b09a05580570df2925b35f67b31f31075bbb29d81a25d8ee9d0e6c63e6604b9a82ad5982edbe49d81a046c3ba2c0e8e4ec3405579b04d783d3b1b2e17338396d09b62f4dc2d62460f36f831ab535db14682081f69549d0520234ff3e80413b33e6cd1212645f9bf6668758216fb718832b6d0aae7609ae6f6a61617bbe1d7f839332650ab20b12640f4d7bb28a16bae7605a5e9440fbf674a2e6a839d8fa4cc1969260fbce246cf5c29b79dbe0e70faa0e09aac9d3b13083decc58006890609b32095b8b808d063ee0f735776ae1d1ba4d01d72901375d8bc8e9cfcd0cda9ab1206049903d3a9d293a7e0ea7688b04db8c49d85a056c45286de32d9cebc57abd04dd6393d0350ae8e4235683cb276380354980cdd61a308316662c0c2425c09ed41a3083bbb4c682402b7c30076019ca39e7c077dea4da1618284bafddf3a376213305a7679c16e5b0478eefa5b32487dfc8a473803867dee134a30f7abe27b12cb52d6f554d57d538bc52497a9283ace610ad38fc12eb872cff5359ef09875f7e1dae82ed4573340f71fe030a537b29674fb7eebb917bdc92d83c896dd35ac24fafc0e33a3d67d3aeab27fb33bf5da78f6bd7f1395a3069d72eb5370c7f80f66c05d2a9f51094b9d46a8feda1f4b6a93bcbdf00fdd3d56824ae583d0021d426f1e935cb5a60aadbe07d92b6f74df3545ec1beae67a177a3f7c5a4a68ffd1f253bed9bd0490000 serializedProgramBytesString: - serializedSignature: 3572d0cd8cc0f28b556a5ab55b8a9770896cde73b750487f85dc06e54918109f03c7b87bf76f1e4256b8fd97d9dd85c6a9cc42c0565ee9b6af165a167cd48108 + serializedSignature: 4eb497e40aa5f557288a992bc587830d06206c44e5e9054d9bc9ef29f7365c8aac73ffc277f9fbee9609e75ef590bdecca19ef400f39e4482bd55bbe05541c0b programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/db575be8fd5633c43b95932365680d15.asset b/Assets/SerializedUdonPrograms/db575be8fd5633c43b95932365680d15.asset index de5a21d..e817e43 100644 --- a/Assets/SerializedUdonPrograms/db575be8fd5633c43b95932365680d15.asset +++ b/Assets/SerializedUdonPrograms/db575be8fd5633c43b95932365680d15.asset @@ -12,9 +12,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} m_Name: db575be8fd5633c43b95932365680d15 m_EditorClassIdentifier: - serializedProgramCompressedBytes: 1f8b080000000000000aed9d595f1cc711c07b11cb6149081d082490842e840462974327ba0049802424c4655b92831020810d48e6902de7766e47b92f2771eec3399cc4499cc3491efc1df298973cfa219f202f49574f0f5b3bd33507bbb5ecae0d3fb6777a66aabbfe5d5d5dd3d33314c484fc8934ca8f113120ba4493181613e2be9893dfba643a2b7fad2d3bbf5fcccbf49efc1c93fb1a45adcf99f0732052253f7be5d6825894672e8971994eabfd8362527eef95e74eca2dc8bd2bff26e551914279d2b0382fae89aba23252e12362449db4a0f322a057a4447e768a4772efa4aa14141253bb2ae5c7a0dcb3a0f6cdca4adbc7dd14cf28b566e5be7179cebc989132ef2889258f8b85fa22aca444a7a5f22f2ac49ab7f476a14ef7c8bf22f9d785b6217d42e79f771c5facf32fe8ed022dbb447fc765ae7394192564dbf97b75fe45b40de93e9ddfadb7d7eb74bf2edbfe6e1f0b699d3ea7076d4b1d22af3964dbe71dd0c7f7a26d48eb1d7cea757a10957d501f73c921b30c6dc3fecb5ad7771d7a1c42b2d63a74be828e09a0df9a57f5f6061fb6453add88cab6996c12cbf65258aef3ecb4011dbf19e5417ad851c6619d562079ffd0795b74da88e4351ad86ed5699383b79d07694c97db87b681c50307539b615c1f7fd5b1bfd950974ac739d71cfbab747ebfa38c32b48dda3ef2a6f0ef37765f6b11c9b6d7a2d36dc2dc7f9cf9a632b6a37687b426d136c5b66d55ebb415f168d5699ba38ddb44c266701dae3bce2b47b24cf532e555e874874e8f6ad903681bd22348f64e9d1e437947747a5c24f729bbff9d40c79e40c7427a5224f7b39356fb14bdeb906d9fd7ae8f1f44db90eed2e929bd7f4824dbf769548753280fd233fa9c61b42deb10fd8fd56e45ef10659dd5e78da06d5ce639bdff49b40dba2d3a8eefd0c73d85b66dc658ced30e39ce7a75221d3b45c20f78d985cdb50c6da3fe148d3b74f29367caab1109bb07d937429e6f975d4b951d8da848a1478edd63e28188a9130f8ae0218d7da67f3003a28be0037e0ea8621765d8f0400a304414c32a5e5994bdb4c518516c8bac43f5ee529f63f2886925f4a6bb88b75d4540e566e4ef240a8716647eb78aa620209a967b9a64a79c5667dd966ef8a6fc4d9632228b9d9121d5a4ec384bb22890775b56db7da49f4a103a39cf199032adc86e56e6d8401fc8ed1955c341f5f950d57452d5be57e62daa38734e469a9d327d5195e6d67d5e7e379539a49199eb680ef0a87c2b8cb49be9bcd4066a1f5b0366f67e8bac468b00faa29bba1b16c6d488fe8aab25de6768391908607ab58c66852c9294d722622ac61970110cafa35b43b37d5bbc8fca00c74b17331968ee6aa541a285df99b9fdd2cbaf57ff3b9aac5aab88a950bcc647352fb020af3eb2d525c15b8568b4300e1575e28f98f0c3655f643083f8ade3a6d571e11ba0488d4cc90d108110e2aa3ca05ffe4dab6a2fc8d3c7d509e0f95c2d130731c50aae7be8f4ab2085b7c084b724d378fdfd8917de9265bd1278e1c74cb09420e857078ae01a13411577dd6225e80ebcec6f9df2dc2949e2a11a4d97e4f9a640cd9b294c8a1c763035f35cab78d61ac3c77035a208179a08430523cfb0121e9297f0d6ec5d93fe3e2ad34979c4a2aaffb03cc70a3d9b96f3fb94d4297d9e37e3758119af578c770b91863a5194a326ca6a2ee25956ca891a5f507ba755d407f1df98927e4df6bd67757498ac61f2f136d53e356db9a46ae2cdbf2c30ff0d8a3f4cf070d6966a992243cbc4a165ca4d0a943a1480ba13828b4d8221736310c1c5b4e0129360c8dc6470d5ff933f2ee1a5b4f0524af866837098100b23fc09532f808e1a19cae07808fbee2b2963f2d8f023224c3b3438030eb3695728d3ae7229e75f05ca5cd79a10aac9ade1558ad8a83b14de10b706760f958ae136cfa08caa0345711d65e555062b7f1cd2cad79b9a48cd6965fe9a6665311fc0ae0c1cf36d175e97246123be3253d34066b5a1521153d36ca79b6603d5ee358676ef2908d7eee5d448b223c59164232578678a8237992c55319a66b5546adc1e52f7716186eaaeb294d934c724bb023b9d5a65d370538bafae540fd84c19e96e8391be1ad248b79884c3f17b82d8d25a5a7085c996ca57cf966c99f7d5f65cdae3dbbd816d699faf2da55e57ca96b69a5a45f9934cce4038e3f670a3d1fec0a4eb8479f6c1af7c8a5ea5a9b340640e2b065c734ed00346e56f5cfe599ee105450cc641f011b00f6ea9586b55c244fc55543dea4df52843f5e8d53634ad764f8b974cbddaa3e46da692217a823b5ace20d82db98296bc9df272870c5eaead309c97aba646cc861447cc1a4a70638a8277983aaa1a9faf67b0a30699d2377752706fa50efdd56861eca84daaa356b834f39cf926c8ed3435096cc2d210e7cc7cc33ffff5dfc755b7ba5c4d13a59b6617d5fbe2a6deb75ef73e807257668e0afb86e9b4f4d661fa5e2d656bcd29dada6e4a704b8a82f750825b5314bcd724188e6f0b22b89616bccf24181c28acf5305e0285b8dad84f093f9a06e17526e1e09961a5464a9ef90005fb788ab0eb29f33891a2791c34394f1546df65759e5484c637ab7ad244cae862db958b85c194a39694333e4499fca934987c03653fa753b49f469360082fce0411ec71517498ea4a6753ec4a4d26c160f1e782086ea705c728b7d291aa5b899b24c3f0d719a4ca1ee364b349300cc35d410457d2825b287b3b9fa2bdb552822fa428b88db2b78b29dadb119387557309cfad8a87755f31db53c0e9f3b5dd817d6d8ff2b5310f5f9b9efa525ef7a8a9d9b7a8cd00cdde4337fb319360d884e5efced8dafe09135b1f371500e305acf94c75bc384109bf9206e1272947d997aaa36c374986d1e86a90d6f4188d4e9904c335e6b520829b68c1a729c1fd290a3e4341be9e2ae4b326c930313610a4ca75b4e07354950753ad7207d51987d2d4193b4d05c014ee701026fb68c15d26c1c5c25aadeeba823e25283feaf6a24dea5afb9e8047ae2075af1380fd6669a6550561e28ef394564f86d3ca540f4b2feb51b20ebd76f7a1dcb27213a355f28d64e7de11b5fa2ddcacc3054aaba74c5ab508bc6ac6b966c6d26241b7cea2ce75d612dfc84d870617290d9e3669d0be8276b9b7ac91f31e106d6deefb456174eaa674ba41b54ad05a246b342ea6549c36a1fa9a15c739db24715f378c063d9406374d1a7408419469d5f7bef402a3721c87f871416a3565b4ffc45974be577f0aa35f2fa5df2d937e9da15ba85bb550d772fb78e9ca638397280d9f31697892d4d0dd9fceab76b4ae011e79d4dfe9d753f51497298d3e60d2e86c209bec907598d0f75ceea7c52657d6dfae50ba8d9a74dbefd0ad43b605d8ca23877fb8a2c6dd7bf2fb549aead947d5f3b6a99ec321acca6a8f5eb5f77979ba75076c31848585b7c295fb8fab148731cac35363a8b3edba75db05b5372c2b8c06d7280dee98349814f69a667b85327eb4cdaa1dcc13dc550fa1817fe85d3ef2828a85e08801d50e933a3a9a4f8a9b92df0d30a2eebcc27dd03baa7dbca310bc27dd5ea79fe2344e593c27a73935d62f298d406ee21cee38ed3ac561c2c4a13ff488695bc1989a47b1350a2a833bce1ea0b49f34697f99d49eba26b2e305e7de0557eded9bae341db794848f09a3f320a5f3dd203e0ef7c3547ddc4aaff986280dee9934b8c5d877bb03f838dcb2417bb27d4e182ac31495291395338e76b54bc4a3f605c3886db659ca92d3332a8f509a4d9b34bbb1caed1da69d57da039ea4883c6b2272d1a30f0789d2e87138e808bdf2b67f8ad2f4b920deaa4bb5aad582b6ae43322ff1a0a6b77e264f066785d1e0694a83199306e66b6e28334ccfc4fa51f9e96aa11b947eb326fd2e2df74efbc54d63c2ba4f35a6ceb6b434ef0b378b988e39c762f91b89583705e7543f7e94f4346b4c2db88d2febe4ff6209603e2bcb05d643cb3ec3ff3513f0d62cea3513eef5152b7de3809f1626efd984fc27d6ce5f27faed0ac55a235b9624ad16d1e69ba6f7a155d7e8562d88a9a5ae0d2bb426ff5a3cc0a5f9beaac4ef796b4bc055dd975427e95101f8a4c00f792ff897e4b732f8b01260c7156978c70a98973545342facc9cb372496e268411ca43dcf89a94c09989207bc20abe05e9f9c0bb0e0754536ac794e581b11aceb6afc5858eee443cab1cf04d1310b900985ac38ea10ee8cccd2f5ae183fceb4e7dda0c6ba17d575e6bc9237e1f4c46a217cb6d57c01db617d40cba9f7ed8ef51e7e2d111c9807f578856aeaf7f6b81d87717b092074d9c39cf21b0f39fd86fd10c8b806e8bc54c16170dc597a2a2f86294df224d120aaadc49bec440ef8054e908d1ae48c3c68465d7d243ca969b62ef8bc1e23f65a2eec6d08fb8b9cd83768ec47d5a775b131270f4d3cb8c4066f0317bc1a04ef5126e01dcf2378bb11bc9738e1c17a45d3637343c25a38da2fac476ac6964fcd258c4508e30739316ef5198092e704197d613117ca4a84f2439c28776a94898e9cefc3cc5e84f6c39c680f3a46f7694767b7ae9bc2cdb9310267730b0d08f8473881576ae0f792ac198bc4d51f9501071bcc522e98db11cc8f6613cce61c84b90ec1fc5836c164ece66c304b11cc8f6713ccd61c84b919c17c399b60b6e420cc0d08e6273201938a4b9d2b6c18bb790517cc2710cc4f66134cc601880de63604f3539c30c3bdb7850d642517c8b508e4a73941dad31fad999ffe58cb056f0b82f7194e78d522e8c566f2550f63d76ee782da84a07e361ba1320e3e6c500f22a89fe384eafd869bdcbba52110b85738c1f94dcde5fe754e0942f9794e94c1a7e6dc6b9759d1eee342db89d03ee61ec5e744f2bf4ee85381d1987a0c683e0747f13508de17b8e1d9b164bedc012a47f0be980978c7f2085e2d82f7254e78b0ece47972b9c990b09ebd6603b89e0b602102f8e5d51c9d936f9c31cef5b0dd38db85507e8513e5aec0a3b3f94e0e235cb68ede82e07e359be1325e30b2c1ad4770bf96cd7073f11ee41e04f7eb9c70f70686eb0eda130ffcb142eee1827c1441fec66a0e6319b3d73a2e945b11ca6f66022575f727f797d2c411ca6f71a2dce283d2d69475786ae2c2781a617c351318a9ce9dc0c8688d6c1877208cdfe6c4685f68b665fe42936d7ea802c1fb0e273cfb7619d595737d857b0702f95d4e90bb0d20a1128b02fe87e39cb824acffed9c6f93c40508f06b9c80f788e44586e3e8e559f9bd8ef30042fcbd4c3883c43a4efa0d1c8c20b773813c84407e9f13649d03e41de1fca7aea38e574bd0fffe951535db1c7d3b42fd034ed4a69bc254589fa1cb4eb6b51fcd08ea0f39a1da2155731ecddd6f44f07ec4092feef2a2a677504c047a3b5dfecc4bb522fc3fe6b65dd3c2af7e953b294fca3d785104ef2799e8f8eed52073fa90dc9b168920783fe58417ec5a8afd2102b6f0693f02f9b36c01998b71e83e04f2e7d90292f1e10136902710c8d7b30524e3fd4e3690c711c85f7082ac11c9c1d1a28a28ad1712f78af37936fb740c61fd2527d670cb1d18071fb651bc0aa1fc1527cad49e1366445bcb85f63042fbeb4c767e58619c78a55fbeddd93c8bb0bec189d50eda8fe4d1d57a3582f71b4e78c1ef65e6e24db85308e36f3931fabd02c05eb298eff39e8d08f8ef32d1e95b32dfe9d906a24d08de9b9cf082bdd72b77afd4cb10c8df670bc85cbc525f8f40fe8113a473d27889f48b0befa175764710fe3f72e2aff48902f2e179f63a04f3ad6c82998bcfb3c710cc3f65134cc6d92736982711cc3f67134cc6395136986710ccbf64134cc69750b1c13c8760fe951366b9483c6ab828ec07bd32f4b20ab649bb6291376fab8ec304e4db600285da04ea033c5c5b1ff049befa00b7adeb43bd54d37aa9f4464d7a4eeadb2760927d4c6a36a6d2c40ba663f07696083cd410e6ff0578cb04ceded2fe063023e6fe3493360b49c71bad4d9afaeb475bdb3a8f5689c1b54c5eebff776877ddecca4c2bd5bbcf8765cb4fe8c531d7e4c113aa52f013fd3f0d3d71444bb00000 + serializedProgramCompressedBytes: 1f8b080000000000000aed9dd95b1cc711c07b11cb6149800e04124842175a09c42e874e747148802c24848024961c846025b001c91cb2e53897733bca7d3989731fcee124cef1907c5f1ef23fe4312f79ccdf9097a4aba687ad9de99e83dd5aedae0d1fdb3b3d33355dbfaeaeaeeee9194ae242fe445ae5c78418157da24d8c8b19f1402cca6f7d325d90bfd6969d3f2296647a5f7e4ec97dada2c9e74cf8391ca9979f43726b59acc83357c5b44ce770ff4d9194df87e4b949b905b9f7e45f521e152995278d8b7e715d5c1375915a1f111378d2b2ca8b805e910af9d92b1ecbbd492c145c248ebbeae4c74db96719f72dc842dbc7dd12cfa35a0b72dfb43c6749cc4b997751624553b9c02fc24a2a545a29ffa2426cf88bda2e55e97ef95726ff2e926d489f51f93d8ee3cb557eafda2e51b22bd4777acd4d8e6b460db2edfc032abf8f6c437a50e5f7abedcd2a3da4ae6d7fb78f85b4599d73896c4b1d226f3964dbe71d56c75f26db90c61c7c622a3d42ae7d441d33e0905945b661ffa0d2f53f0e3d8e12591b1d3a0f916302e8b7e14db55dedc3b64ca55bc8b56d265bc59abd94d6a83c3b6d21c76f2379901e735ce3984a6b89bcbfabbced2a6d25f25a356c77a8b4cdc1dbce8334aeae7b856c038b870ea636c3843afe59c7fe764d59ea1ce75c75ecaf57f9c38e6b54916d52f79177857fbbb1db5a8748b7bd0e95ee14faf6e3ccd75d6317a977481b537553f65795d7a0d24ec2a353a55d8e3aee12299ba165b8e638af86c8d2954b9757abd2dd2a3da1645f27db901e27b2f7a8f424c93baed25322bd4dd9edef3439f6343916d23322bd9d9db1eaa7ec35876cfbbc6e75fc08d98674af4acfaafd37c836b5f3736aff28d986eb55388e3faf8ebb49b66dbda99c31871c7bdb2ed705a2fb05916a9b5e7565eb5a45b6898d47130e9dfce4e9f21a45ca1641f678c8f3ed6b3799ae1d8d60ef3d28fbd329f150c4f144f02c41c30cfb4cff00034497c107fc1cc6cbaec8aefca114a0e9e5c7318658912da743dbcbef8c6c22e5eec3cf2979c41c0a9d705fe26fae4b40e1e6e56f928428cb327f00231c0852e6e49e36e9ece6f0ac3bd235de92bfe95226e465e76598939446b62a2f05f2eec862bb8ff45309c219e739a352a6156d2dc81c1be843b93d8f25bc899f8fb0a4492cfd90cc5bc1d86f51467fbd327d05afe6d67d497ed75d734c21d397511f7499f2add0ceaea67ea90d943ebe01ccecfd1a791a3502e8cb2654332c8d632ffb86ab26de67683919082a86948c76441649cbeb10718c3b465d04c3ebe8d6506fdf16ef1332e8f0d2454f06aabb013548d5f03fe6efbcfafadb0dff8ea6abd629e2181e37faa8e60516e4c5223b5c12bc5588464b13505027fe880e3f0cc522377388df3a6e0e8f0b5f0165d833a557400442886bf28011f93787c55e96a74fe309e0f95c35930031e508d7dd75fa15d084b74487b722d778fdfd8917de8a35bd5278e1474fb0d240d0af0c26821b740431eebacd4ad01d78d9df7ae5b9b392c423ec4d57e5f9ba40cd9b294c541c7330d5f3dc883c9bb4e163b812990897ea08430123cfb3121e93435b6b46ad4d7d9f9469521eb182e51f97e758a167db5afe304a9d55e77933de1498f16664bc4f882c94c94439aaa38cf3032fb0524e95f812ee9dc3a80fe2bf29947e5db6bd17547498ae61faf136d5619c4a5cc59278f3af0accbf1af9b7e1608cafb4a69a29d3d44c026aa646a740a5430128bb4170b94e30646e0922b8dc2cb842271832b76a5cf5ffe48f4b78a55978a549f8368d7098a40a23fc195d2b80861a19cb617f08fb1ea09429796cf81e11a61d5a9c0187deb46bd1b4eb5dcaf917c164ae1b750871c269fc29456ca6bb06de107704760f75c870a76750662a8389e2269395d76bacfc49482bdfacab229cd3cafd98667d311fc0ae0b1cf3ed125e4392b0115f95ae6a20b34153a888ae6a7699aba6da54ef8d9a7a1f2c0957ef35a69e6477863dc91693e03d190adeaab3546434c76aa9a67e7b0cefadc20cd53db494852cc7247b033b9d26b469b8d1c45756530bd86632d27d1a237d33a4916ed70987e3f707b1a58d66c1b53a5baa797ab664cb7c80db8b598f6f0f04b6a583beb69479594db6b443572be84f723903e18cdbc3f5468702936e16fad907bfeb9be8d5e91a0b44e67017df35e7042d6052fe26e49fe5195e4662d00f828f807d704bc55a3f1226e2af379523a62b471529c790b2a139dc3d275ed5b56a8f2befd45d19a227b8a3e50c82dd926bcd927799bcdc518d97eb2a0de7e51a4c3d664b863d66a349706b868277eb1a2af6cf3772d850834ce9eb1b29b8b74a87fed85b681b6a1b36d45a97669e33df06727b7455029bb05cc33933dff2cf7ffdf749fded3e57d544cd55b3d7d4fa12bad6b759b53e80724f664e0afb86e99cf4d661da5e93c9d6da33b4b57d26c11d190ade6f12dc99a1e0033ac1707c5710c14d66c1077582c181c2fa0bed1028c468e39049f8892c086fd60907cf0c2b3532f2cc874db04f65083b66328fd3199ac7119df3c430fa1eabf33445687cb3aa6774a4b42eb61b5d2c74a61ca53439e3a326933f9b05936f31d9cfb90ceda7552718c28bf341047b0c8a8e999ad2850c9b529b4e3058fcc52082bbcd82e326b7d293a95b49e82443f7d71ba4c81efd64bb4e3074c37d4104d799057798ecad3f437beb3409be94a1e02e93bd5dced0de8eeb3c2cce25bcf8543cac7bc46c4f0167cfd70e04f6b583e86be31ebe363be53579dd13ba6adf8e9b01aa7dd05ced277582611396443b636bfb274c6c7d4a7701e82f600d75a6fdc56993f0ab59107ec6e42887337594dd3ac9d01b5d0b529b1ebdd1599d60980cba1e4470b359f039138b914c599c3719e08d2c19e005dd0560da723408938366c1177582cb85b5b2da356a3c6bf41d6ecfd186e3cbfb021efd81d47d6f1cf6eba5e9eea487e96b7b4c5a8d85d34a570e4b2feb91a61eb55ef591dcb272531e3afde6a973ef04aef80a37d2ee356935aed3aa43d09522ce75229616cbaa765654aeb394f4e6653634e8336930a1d3a07b1df5727f4d23e77d0fb3b5b9ef9184d1a9dfa4d3074cb512b414e91a4d8b598c4d66b0ad59b18bb34e52f732c36870c9a4c107751af40861b8a655de07d20b4ccabe0b62a665a9d5acd6fe536799f3bdda5318fd2e9bf4fb904ebfded035348035d4b7563f5ebaf2d8e08049c3e7741a9e316ae86e4ffd588f56dcfbd8a3fc4ebf9ea9a7183469744ba7d1854036d923cb30a3ee333cc88a4daeafbd0d9974bbadd3ed9043b71e5917602b8f1dfee12af6bbf7e5f7d92c95f38aa99ccfebca391ec2aaacfa18c2bd2fc9d3adbb3e2b212c2cbc15aedf7f3c6be2f061938737f5a1ceba1b507517d4dea8ac301a5c356930a9d32029ec75bcf6aa5cfa3897553a181bdfc307afc03f0cad1d79096321386214eb21a9a2a3a5b4b829fd19f509bcdb08f7feee62fd784721744fb6bdceb089d31d93c573725ac4be7e153502b9a973b8e3b46b260e533a0e23a17b4cdb0aa670eec0d628a80cee38fbba49fbbb3aed9f356a6f1a13d9f18273efb2abf4f68d46331db794948f09a3f38849e7e9203e8eb6c34c7ddc7ac77c374c1acce834788eb1ed0e64ece3b24364d44424a92372d9a34e83f4da66bf1cd463afbf87be69d2f45e10ebedc35ab56ad0d6754ce6a51e56f3d64f67d97056180dc64c1adcd769a01f83c135694d5df2a925aa9f293f5b35346ed26f56a7df95b5d669bf50664a5873f55378b6a5a57e5fb859a56ccc4195cbdf48c4ba31b288edf871da137d715c749858d3c9ffe17a60be20af0bacc7d67c86ffa3f6b086d1f4a8bdfb1ef37a9fbaf6d342e73ddb88ffa4daf9eb647ec2bc5c6964cb92a4712161b1690acf5e956d50b55a12c7e57e2debb426ff52bc48afe6fbba06bf674e2d01d7545bc2463288015952d0075d97fdafe4b73af2180ab023a62cbc6702cccb9a325812d664d63b124b79b42401d2e6393155a1805979c0cbb208ee359a85006b45a4602d70c2da4260ddc0fe6379ad918fa1639f0fa2631e201388ac3cea10ee8cccb2f5be0c3fce66cf5b8d7ddd2b38ee584279334e4f8c8b81f3ade48bd40e63012d27e6db1c631e7e2d151ce83bf50404070fdee3fd7602fa6d785f59d945bb9b43bff112a7dfb017c24f2b80cea10a0d8313ceab67f2728cca344f120da2da7abcc91ee280973841b62a90f3f2a0791c7da43ca96ef626f83c0f23f6262eec5d04fb3227f66a85fd047e5a838d457968eae10d3678d55cf01a09bc955cc03b5544f0f61178ab9cf060cd96eed1a131612d9e1b518f154cad9d5a4818cb08c6479c1877f87440e973828cbeb09c0b651d41f93227ca3d0a65aa21177b377380a07d8513ed1147ef3ee768ecd6b829dc9c1b237036b7d042803fe6045ea780df4fb3662a92167f52061c6c302bb960ee22305fcd2798ed0508731381f9917c82c9d8ccd960561298afe513ccce0284b98dc0fc683ec1ec284098d504e6c77201d314973a575c3036f35a2e98cf10981fcf27988c1d101bcc9d04e6273861867b77051bc83a2e901b09c84f7282b4a73f3a733ffdb1910bde7602ef754e780d22e860337dd4c3d8b4bbb9a0b611a89fca47a88c9d0f1bd42304eaa739a17abfe5a3f06e690802ee339ce0fca6e60a7f9c5341507e961365f0a939f75a5656b407b9d05e20683fc7dd8b2f8af4d7c70f636034858f852c15602fbe81c0fb3c373c3b962c963b403504de177201ef6411c16b22f0dee08407cb4e5e322e371913d6b3b86c003773012c2500bff8347be7f41b678c733d6c37cef612944f3851ee0ddc3bebefe430c2656be81d04ee97f2192ee380910d6e8cc0fd723ec32dc47b90fb09dcaf70c23d1018ae3b684f3d00c60a79900bf20902f9ab4fb31bcb99bd3673a1dc41507e2d17284d777f0a7f294d82a0fc3a27caed3e56696bca8ab18d0be36e82f11b9c18ed115257ee47486c131bb504de3739e1d9f7794ccdb9d097669f2720bfc509729f0624146245c03f605b145784f58f598b6d76b38400fe3627e0fd227d75dc34790b50712f403c4c107f2717ce20b500d1fc2a014690bbb8401e2520dfe404d9ec00795738ff23e3a4e39d08e6ffddc88a9a6d72b99ba0fe2e276adddd4c533c9aa3f112dba2857602f57b9c50ed90aabd88269db71078dfe78497707951ddcb136602bd66ab7826543a09feb7b86d57b76269047393f2a4c2831725f07e908b86ef5ec6b0a80e29bcf17c84c0fb2127bc606329f6d5ef6ce1d32102f247f902b210e3d08304e48ff30524e3aa773690a709c89fe40b48c61b756c204f11903fe504d928d283a3158c28ad37ab0e89fe229b7d3a49b0fe8c136bb8fbf48c9d0f5b2f5e4f50fe9c1365660fb832a26de2427b8ca0fd452e1b3f2c8d4dbd8baed86ec99d25587fc989d50eda8f17d168bd81c07b9b139edf43d7f622b1629fb06b25c07f950b6bedc8bdb5b279d0ad04deaf39e1057b9352e10e31ab08c8dfe40bc8421c626e26207fcb09d239dbb96af48bcbefa1954dc709fe7738f1d709ef8169313c41dc4c60fe2e9f6016e213c47102f3f7f9049371da840de61902f30ff9049371328f0de63902f35d4e983522f53cd28ab09f06c9d113ed6c1324e5a2685e699b80c99e3f8209942a13880578022f16f0719f58805b84b1506fdeb3de3cbb45915e94fa0e0b98d09c929a4d619a7a0b6d1c5ee1108195cf615e2aee2d13387b4bfb13c08ce8dbd37cd62c241bafbdd569eaaf9fd9da3679d44a1cc2efa2d6ffcf50efaadad14cebf005c9e3b2e667d44284ebf2e0192c14fc44ff0fc073db5908a90000 serializedProgramBytesString: - serializedSignature: 70d7aae371b79cb6f1569f29634310e954c7e70cee9f790fab3d9f0f87cc4f561224b4440ce582da8a1475f28e046ae5ad97a2db267bf8e082f5044a6e27ad08 + serializedSignature: 12a1d36c4307dc6a23b0129d47ba1e0d780ed5b95edd48b985f404a98e237733bbac32de778add627e2ec181fd2772c02e747a60abc6cfeb24e6916ee90aa807 programUnityEngineObjects: [] networkCallingEntrypointMetadata: - _maxEventsPerSecond: 5 diff --git a/Assets/SerializedUdonPrograms/db6800030179ae1458053ad75bf72d56.asset b/Assets/SerializedUdonPrograms/db6800030179ae1458053ad75bf72d56.asset new file mode 100644 index 0000000..175e11d --- /dev/null +++ b/Assets/SerializedUdonPrograms/db6800030179ae1458053ad75bf72d56.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: db6800030179ae1458053ad75bf72d56 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c1547d7f0e7e256dca58462411320584b5b5c5aac58954220015202492314eaeeeeeeee42dda8bbbbbbcbd33e6d9f7afbedcccee49edd3be7deddec3d9b19de8ffecab27b77cf9cf9cf193f33532f8f397f12839dbf16b1796c121bca16b22256c6d63aff9ae45cd738ffb977eaf95c56e15c573a7f173abf0d663919bee47ffa273a3b7fcf70ee2a5995f365355bee5c4bc4eff359b1f3ef19ceb7c5ce1d7fbac2f9bfd8792bd1c0f968219bcce6b0d9ac53a24306118bc44795f25982c72bd1c4f97b22dbe0fc5a2c94e281e4899f3a397fcd777ea914bfad719456efedce168b68ad717e5bee7c53c14a1d99cb84c426474f64e21fccbd7490d78ef2dadef9bfa9fc777df9ef26f2dff0fd86f2da29e0fb9dc1774dc1bf39a18bd37cdfc5bd26863ad746cef53b70cfbffd56bed7d595576f551a59dde5b587bc6e29657e1f40ffc6f2da33437cd3c9c801b282306b22af5bc96b2fa9ef7f6a197e1f9751e27c208fb3cc03fa6c05c26e0a7ee7cf7a4788bb4ac77c5f3ae6bbe958ef6c997e9fcaf7fbca6b7f79ed27653befb4bb5c3ecb95d76e19f41ae07ec7c6b0a4cd3a61d62f97f703e57590bc0e96ba0d97bafe00eea3eaa2d2748894394c86f1a3e6b97a9ffffe5f793f545e559aa8f4525c7f92f7c302ea13c4fe944e2364183f837b876383a56964a9742ff0a57b81fcf664976383bb7cf101f6a795abd2e6975ac463a42f1e235d5d1ae67adfcba883923f42ca1925e5fe0fdc73b9a7878c5b03f9dd46795fc032976d1d02fc36da95d344b11ee386d3a8bdfbbcd138e6b5e55119f454693bda97b6a3a5dc522957c57fac7b9f50f27b0239fcfb5f7d72c7f8e42a7d5519312ca09e5bcbebb6f23a5e5eb76735f9786c1ff94c31d84e86399679cb80b1f2f76d92df763c3924b7746934c197d6dd64b85b6790a9be9f28af4d03beafde991441e7c9f2da2c6098cde4754a84309bbbb6d0e4079f2d8cc92073aacbb74915d0c191d3747f793f4d5ea7cbeb0cc97f5b9f1d285b4a67079974d941eac2401a38ba346b2def7794d7995e5dd82c9f4ebf654fa7c43652e6efe09e5fc7c9e77f807baeeb5c379c668f4a99b3e5758e4fe7b9743ab39ddcefb668016c23c877e9ec6b9e1bbfe6f9aeece60be4f3f93edd2627f56e32197cabf408921f164a16dbfb186f2f75506c17f9defb13dcf3eb76c9f0c4bf9d6f5b28dbea029ef36fff02f7fcf7050175dd85a5da2c973301843d41862dcbff162a3d7765a9794ff72dbf8e07cfc64b79efcaef7663a9f5987a8fc7ed6f70cf7fdf3960dc76d7e8e784bbc5f834dfeec1bce5cfc4a43d347e513e5b2cf599c8bc794b95d539c96f12a5f2d99eee7d2ba5cb12f90d28a713b2bc68a96c71a9bc16317d3dbb0c7090f9d1e91fd684dd43a553619ab08ae43bc5be78cf4bca69de59eaaecab115cc9b67fceff2672be575b5bcae95d735c977b75661ef25af92556232f394cd4e5f37f99c5fa7c8dfff01f7fcbd5549d91d9e94cfca7cbaead253f51b54dc7565403a3bdbdb7db7b3b29d0a976dabfb7c7297b0f4765be9ca19a7caa62a574eeb0621e554bb72b6556da07ddcfbd64a9f75f2ba5e5e37488e5399a72c67fbcae7d380dd4c05cff8bbfffaf866d22d1dc7fd5d3d6bdaf707c8eb81f2ba3d90dd5eea313d9956356dbefdc06ffc5e9589eb7df14ba7cb41f2ba4586f87400eff1ebc111e29feeb746f27a988cdb0ce6edf3cc706da56df734b20e675a3b6d27fbc7ec08f7f736ca2e8e0471e261ec90645d634b47c9df7604f196df2766826787ca67b392cf843cfedbd1def4a9c77cbf1f0364e87e3f16e8a0fbfd38f93ce1eade4e8577bc2f2eeb9957d799cc53ceb01352e39a98e90bbb5e88b43c517e3bdb9796b365ba7c9946d649fab46caf6cfb645f5a9ee24bcb399ab43c55fe3617a45b3ff96c274dface4b3e4ba8f6e169485aaadf4f077275bf9f0174d0fd7ea6372d3ba8b2f22c242da1fe302dcf4e8dab7807861d24cf9e2bafe7c8abaedd7b9ebce64ab90d02c855637aabd2c8ede293db3080dc0be5f58234722f42f4ad4d78cad6d558cd7ce6b5757eefc8eff86a1a591733adad7752e3069730afad5fcabcb6aedac2d03e2e93bf2d4ca63f537da3452cd5d6419b33a16cee72f00eb455f5fb1540aeeef72b810ebadfaf621e5bef3c5e3ebf9ae96d1dea0f6dfd9ad4b8261679c3aea9c7d3a5e5b53ece8aef2eccdbcfd9c54d9fcefef64f054b5f375ee7cadf56d9fcf552deae92432370cfafbbf9c2ddcd0db78b1cffea2adb08a2d3c49f0f769f7751730c37306d7babcb02df7b37326f7bea661fff5b7cb6b247d2de6ae27213f80dc66d31f3b6496e95cff70469b5183cd3b5b93271bd4d5e37faf8ed2eb93606f7fcbd3b80fecac66f97d78392bfb551ed2b95be2d801e77ea6d45e80ad22c741b49c5f9ae0c710e53262d61de3269896b07ddd28dcfde27df393ecd3b0fc8eb83f27abf94bf9479fb2f4be5ef9be47da1eff742f9fb0549f61d73801e4a364fcb2669f451f17f585e1f91d7876438cb98774c6c194b962bfe3aa2b6edd8475d39e355de7c4c5edb80f454cfda82678fcbab1a737f22a953ef670384fba40c373f64b84f450c57324c2c67deb26ab96b3f3d3e64de3c54c8d2dbf5d3f2fa8cbc2e97f28a7c69a7fad6e9c6e1328595265e8915cc3bf6a1c604249344b1fb7b3d5586adf2bdaff2d673f27ea5effdbd7cefab3182e7e57d89f77df60290c3ef5f4cc62da1c6365e02cfe498027b39c92747324bacf686cd5e61de7ea9ea7b964a1d9a81ef2003f5bb1cbf4cacf1c569adfcbd05b8e7d7329fdc353e56653eb9e53e7d555bea0d797d3d19c7f193c13780277bcd2b33ad4dcb7193c4def29b2dc0bd63d33917a791a1bead90d74a29a325b8e732de9469f22d2e2b51e5e357019ef36bb5fcbd15b87764f71a9f46bf97e4bbeb7c715b27bfdd3fc0b7fbc8ab6a17b604f75cc646376ebd9e4c23eb4d797dcb9786ca66b9bc7d35e9ba2f484f7ebf41ead01adc3b3a6cb554bef736d3dbf63ebeefdb78bfefadc635df91d7777dbaedc7bc6378efcbeb07b84db20f7dbaef9f7ca746bff77cfaa9f4507a1f20f56d0bf450cff9f540e6ad5bd5d8d247f2fe20dfef6a1c48e723902e8fb493d78f59adcb5851d7285941c6a0647f287130f3d63507bb69d647b67ffbc8be2ffb4c5e3f97d72fe4fbc779d34edcf3dfd3d5259f64d0f14bf7bbde6aece5637995f56ae210996eedc0bda3735fd5be92f6a7eae8c411f2fdf6e09ebf9f23df3b117cc7dfebe093a3eaf34fe5efca5fea2b79553e03bafa5ed5d599e2fcb5bc7ee34d1ff65d52e600d5a7f8364d78df23ec54fb558e8bd5f89c287fa29fbd714e1c0e641f0d9ef1777e047151f2ff0b9e29dd7f4acac8536d7b65278781f7db064baf7e9b5c59fd7ef37e973852bedf09dcabb80279356d7629af7f8ef73d210fa47fe2309fdd1dc53c3e58e29ecb3918b197b6beef0f93f23b7b7faf09c7675f35faab71dca3e5ef5dc03d4cdb637cfa1de3ea977bb02f1cf5fef15e5b4809ef045f7827f8be3fd1fb7b8deda870da8270e0fb9d7def1fabb105d0d64e1c0b7e53effde24bbb28792f5d3929fd79d89f3e9d4f62a9f9e324f9ce6f2c357ffc0e9e499f16f647524681b2693937cbfef6d9d4bfc97787ab31363566a3893b7fac2d07be8dc042d9f1c9206d1af8189cec0d2f710af3e63d7eef7c335896658986deef12ca3fd2793e58d6d7093596732a08578d3f9fc6bcf5d769aefc81dfba3206a93a47952df59332547d9448a4679290e3f489d335e13701efc07139f57b53961c9783cf557b5d8d517705f7fc7a0608eb0c374e8336c938fde59305e3342c609c543a0d01f7aa2c70c218a8da5911b8a5ed132a9f5a655367f9ece42c6927affaf46894215ecdbdf21367b3d47caada34ca46cf9169d00ddc3b610f991b326ce583a2ca8896c9b0c75f2c9fa9b93f15ef7399b72d73ae0cfbd99061b7f2c6b14687f398a76eac89b39c6710fec0b0ce38df0d7fa8ecf325545f409543ba765d501d557dd0ceab63e8b24db50b541a83b1ae9a345673162abe17faeceb42379e79053e5e4a6623c9adbb2b374f8d5f068c6bda72f4479fac8b98b7bd7391d44d8e1de77d28df97febd898b99b7ccbbd82ba7c60746cac997f56d4285ff4306dd956d5e02de53cf2e4d3e4ba8b913e99f9cb8ccc7f83237fc619bbcf156df252e078cd53dbf5ee18bdf15321e9b5c1ef9727c6ed8d9beef54bbe94ae62d53d5dc899a23516b007ef27d77b5efbbabe5f51aef77428e7aceafd7326f1eba56c65bd56997c8f086807b50d60e93feef8a530dd721e01ebc9f3fde2737537aa6b345353fa06cf13a9f2d5ee7c665b89a8b506ddb7f02dad0f5c05e54d97f83c6ae6e04cfa44e899b98b75d7f2378ceaf37fbeced6657d7828d3e39eabb5b7cf626e76212b7faeced5629a73d88034c8feb417aa8f8c0f8ddc6bc6349b749792d10bd367af5aaf9fd06dfefaadfa9d2ea760db31bc16fb02f71832f0e37786daae0789fec8d69646fd4cb4e897f3b70df2019468d1c6007ea598d7e377af51baef2ba4a8b4cf697cee6555b5bc5f50e9fcddfe1ea3b52d5ffaa0df96b863055bbe84e8d7d8339a884f25d5463bb77fbecf86e37fc51aa9df29bf7bbc43d3e3bbe475eef05e12a5bbe0f847b2f78c6af6a1e684b70cfc355e3bd8acf0340ae5f97077cb6a9da9f8a41c3643c6ae23d04dc83341eb91e7c1b8477baf6a5aaf31e64debcfda01bc7d12ddc3047ab30551f568e6f25541df010f38e6f3d24df4b33be95c8b02e2e21db9981da898ad5269f8d6c92f1f8395cd835f6f830b00bd9c6a9693ba9393fd5767ac417f6236ed86394cf511bef7789477df6f9a82f4d1e93bff704f75cde269f0d65e2a8f41c02ee813d8d51e3c041d9e89e29ffeac77d76f4b8abf35839ff3f56f55555db62bbf461257afae43f2199e4807bfebbc60736a1dee9ed95e119f757feb14f02db527d3a3566be55f2b7096adddb96e03b7eed05e2c3e39fce1f52f74cce47259ef2f17bcae5b7f5e9326eaa4c52fc4a33f0536db1a7c17b2aac67c03355863d9b7c9678063ce3d7e724fb5ee0ded16d5c679fdce7e57b5b81b0f9f505f9bc37b88779ed45e6691fd6c87b19e8f4a21be6362aaff4f185f1124bce3538bcb679d3c701ce573e0f9e2919609e4285cfe41c63bd3e320d5ef48699290db4e9f20af3ce5bbe22afaffad2ff55c958a6ff38e59ba0eadaaa0ce9afe4f695573527d914dcf36b3f208fffde37647c5ef7c5e7755fb8fd58c6b9d0845ac70adac281f3cf1d52862ac3de94e1f503f7fcfa0648ff01f2fa167826e777136f33ef7880b2d177c0bbef8077f9f55de62dffdf75d36efb177db2d577ef316ff9afe6e1e45adbc4fbf277c545e5d10f800eef8367fcfaa1fc2617dc3b3a6cf7aa6b3fdb5f8d84f511f3f6e93ef285f9b1fc7d00b8e771dbc3fb7ee213f9de4070af184339837c72fc7a7d0ae2a8e649603b5e673f6ade7408b807f5dc76aa9c7a2c98bc5afbe3e87e53f941c5fb331f6f356ff85a789d122d7d69f539f3b6d33f77198f57f361ca96951f3eafd71a786589dfa0fd07d545c9fe8279e7fabf707598e0abff13bd32a4a992a7ea5d95b65f4af983c13dbf7ee5d55bdcc3387fcdbc63105fbb7a4d9ce993f38d4f8e9a6f54e17fcbbc733e5f82e72a5efcf7212edf894b7df1c9106fefb38609317f309d15b34256cef2c4403bcf8941b7f3505f66dec8438ccf8bd179c677f4e0c156b10dcea7c5badd34168abd3aaad808365cbb9b461731d6ab429f24fe2e74de28114287d64b09e2ee9420b872a5ce7fc5602b904ae7f934b19308df0ca4c4f965289be95cf9574b9d66f1eece7f5e298b9c604b59b573b7c0f9bb5cc85beaa89dfa66a628f16d43fcdfcc7364babb9aac719e28a0e5ce7da9d070bef87b9dd0b458683fc3795625f65859cb56b289ce75bd082d35ee15cebf75612e90c8f43aea3737c19ebb5ba8a8649aecc4866b9f276cf1ffa7485da40847df68a8cc870df244e97c6c4a4afc7f866e21c32747674819c304b284e7d9709627e64fe7a5100c1fc7d418eaeddbe53d8a15a48d8b9e0c4fee6e2206c9141eb9e7bd6d164d9939a7a1376a23589e98f6ed9e216ae9c07279b962743f4c141a366c90cf15f5e34fe8f08be9a2f931e277df2b11ef854f8046a2f2f32680d8b2638153aacd0595e722e76f57b985221aa542495db42ac4bfe63a6f143a41f2684d70de2a12e5e71c278afc0957986f5ea54ace94b4cee78a3516c9955a19678a329660f5740926c68416d4497ec1b6e64a9f644d6a62914cb23cd1c2ea9cc6b0b1b044d3ab9e6c7fa9ac77dfed73d62e38e5eb4f1bead3a5994897da8486a54c7d5dca348b3b2b65ae3bd2a54bf39a7825d385ffd1336c81d876261d30820d74049bc76ddbfcb73221a5d079373c43de891ae42f8ef4005b22469859050c61430dc27c8eb095462bd6b0a94f2bae1022b9912e715ad44d455d3be3e65e1f9d7c081aa2c6dd266d3d1bd6b41bebe889eef652527aaaff38dfe928ece8fc56e8bc5f2c1aa3fcb9b782e32124fb9cde2fd293e53e3043fc64b554db09aa7d406f38aa6618f1261ae2f9dc5edb6bcc409471feccd006cf0c4db16cd6216a366b8649ee185572734c72a7a8925b60923b4795bc852edb8851af3d62c936c96117f5af89ceb7ab9cc8ac136dc16ae77bdd304dfaecd2257076e92ab24b0ed30d1e85d308cb262d7569c71f76d329e94fbaae78d2b5c204778f28b835666d3da25a5b1b9db58978ac26b5b685ce3377906d8af8b5448ccc246596897b1e9a6a93a6fb825bd82cb1b16eb5d025bd2d6e19d8167b0a5be4db74d2ea8b596a5b5dbaf3d4c90962503df1646f87d514bdb25053b4c7846f9505e11d74c2790dd29ba5b6e3ff75fea4086f810bef8869de47a3f9e2e27aa134ef8465e2be513371674c72bfa892bbe88a07511a1d127365a49f379826b6ff2e66739c76e85ecc1df04dcd926ae0789e735d21b4e0cfb91699e71bd21725fd99a6532fcad429da0aacae62c1675beb89226d8028d286a629d274da842fd0f405ea4011ba596cb0c2b72b56d20cd294346fea8ab134254d372ccb0e8e9a65bbeb24f32c3b4463abf9dc56b9313413ad8f947006e2e1f4d0150da2c2dab74e8b06b7b3cae5ad105379aebcd98c6fcebf8f30d5d58e01af9386b3c079a7c209a3581a7994c280b7137af8474198fb479f1df24576d82e4076a08c159601b6d45912efd5f3298c94d1675e09cd733ab193d812910df7168f392537754bc4ab256c5fe7aa66e552ecad316e6f3d75daf0ce12df453c635ba81d2e3807133c22a2e05e581e2f889ac7b7d249e6a50ddf053d6a0bab37a6f6a8a86af7c14ad4d19a12f5af44b812b52f267c8c46f87df5c209ef876585b1416c248d55f7c7046fadcb633c8e93c400698ef37f99f3051f8e2b14b93f475486c9d22047ccdd54880a7b3078bfcc79c39d050fa3672e6614db44358a0158ba8dd3a4dbcf21d36d20267c5b8df0e9f5c3091f84a5dd76bab4e38526af3778b36495acdbbca5618e9855cb112e28d562a0af48a45ca548d71cb69f535f1ce05cab9cb773443d502a7ecb1167d554b8337221d27430a6fff63afd9b01fde7020dc38438441722273c5e536e2542965b4375c279c36702431a3e7c5fe0f00d9f3c0cdb241d36de4c9ae2345f78cbb55abc3f5f1840714d5bb9284b1564be46af3cd1d15fcbeab241c67b0bdc61a752fc3bd944e161272783a334bcb83fbcbfe1a5fee81b5ebc07922bce8289437bac81350c2b54a76a0ad544984275389617a66179617aadf2c2089dcd89f19ff23ab5393c47cd13b279ce8bdee09fe1c4b1bebff72f06a80a025856b6741c24d63a578ab3c85c7295bc30e5f335cbc0a1632e7c9125f47962079127e2d41ccb170558adbda3a6d6ded8305cad3d5267b262e0afa24e4d76b2901087d9ced499ad189d1c1520f1b3a9674fe1d759290ad52259a8ba45774fb1014485a8368b9de7bce085bf0f120ee0bcbd3455f05e23c8f3f8158a7e2f66e4b38491c71d4fccd0476115c06c4d0510aa553d1acb42733459e8af9059680ca6f6dca86a8fc5d4de49a3f6fe8dc2a9bd35267c9e46f8ccc6e1846fa313de98b987cd44e9218ec3047307a194e626ef62ab7ec2725f4f7199e82ba8fe5f9178b2c1f9bbd479b65c88c8113ebaca09218c96db626c176ad8b60ec9763b0cc1a2886cb7d709e6e6b97310c169266cc7eb04f3f6d72e0c697ff1fd99c3b7bf26e8c2e1d877d360bf3824f6895836df3d6a369f8449de23aae4c998e4c551254fc124ef1955f2542c1197681291fbe18449c46998f0a51ae10b420a9f8e65cc425dd9d497f1be78b291ea769f92e31a856c859052e1fc7b9dac738b3ce3237ccca344769ac3e4f319989ecb747aba4b82b8ab156f53148a31341ee21cb63a54a83b60e8976bd01f1f12fd8e98f0228df02f430a9f89f12ad6f1ea9c215d8b84874ef2e930e769188eb3306d56e8b4e1b7c9740b13ce6c0ce94a0dd2f39b85433a078bc42a5d24f83c9a8b6f6b07d96c31e057289733ad13d578788c73310d4a741af0926d664dc3606e2d9b053b6148f7d2207d3524d2795889bc3a6a893c1f53bb545768360fa7f6024ced3551d55ea893cc5b1d6b19d2eae0bb8a876f752cc2c229c7c2d9bb56e1ec8c91aa884a6a179d649ec0959a041edf225c02ef8a09afd208df3fa4f0dd30e1d51ae18f8614be3b267c9d4678f72dc209df0313be8f46785148e18b31e1eb35c2cf0e297c4f4cf8068df0ab430a5f8219f9be518d7c29a6f67e1ab5dbb70ca77621a6f6fe51d55ea6919c275cdce25c54e4f77e0ab7ee82ef3c1fccc594ef45af5b5094297c6c4869b92e5d780d7d904ea510557911664d076bace9d39099a018137e8846f81e214d750526fc508df0a3430a5f89093f4c23bc75ab70c25761897978c4c42cc1041fc1346dc1c1c23acb441ecb110b40f94addb5e25f6bc56e09c562e2ba50d87e72c0494d5cf3a5df39d27a2ba44d97f2fd159ca761b4de0bd3fa489dd67ce6950fe226dbcd6e57d2ed86e8fc0a73587fd9eaee1f4aafd5980d1ca5b1818d210dac148bf4d1116d608dae9c150ebf25a4e52ce647ba400cdef3ad1a56084b599365b7ff630297c9c78a32993b2bd0e98a95df6b75c9cddbd6c731a46dcd77e36cc6550ed5b62ec36cf6048dcd16842cb7ca31e1276a84ef1252f8de98f09334c20f0f29bc42279c376bf8de90919a359598daa768d47e36a4da5598daa74655bb1a53fb348ddaed5b87537b1d56b69dae2bd07924830c8ae4884c592d2a285ec5cc65eeb262d757aad0795a24bca85689fbb9226bf291c565a2027077505822063f568ab9c40ae7a9f2badac0dcf56639a239e6ee2793238a8222e98bb75a3ca9146f158370f4154e89ac386115157674731f2c89ced024519f9049b41e4ba23323563f1b30c167e9d29e7b332c706eca3de91226bc7db182f56cac60e5c707841fb4d80f8bd7b9ba78f164dabd66a4d4b5dfc5219b45fb63e97f9eae640999fe0760c2cfd7086fd0269cf003b134b9004b930b6b952607e9c2e185de45418c38cd3cdfc198e08b230a3e04b3a24b2266bb4331c19746147c984e304f7b7e7a80dfb7930b08e3db79386685976bac7070db7056780426fc0a8df09921851f8909bf5223bc3ca4f0a3b0fc7315967faeae55fe391a339a6b74651af7ff5be2fcc7c7b64a4569adead812a73ae1bf948bae22af0fc358d8319816d7eab46857a345bef337af79f9dc94eb1d547b1d8ec574b84ea7435ba9c308e7ffe5a233c4bf59effc5d7b0d8ec334b85ea7411390167c0d116f198509ed78cc7c6fd098efb876e1ccf704cc7c6fc4ccf7a65a99ef8958d174b3a668aa1fb2683a0923748b86d06f21099d8c09bf5523bc73fb70c24fc184dfa64bdb90c24fc5d2762396b6b7d72a6d4fc3b2c31de98aa6e1592e9a4ec7b4b8337dd1342c8b45d319980e77a52b9a0ab258349d89697077a6a26967115eb8f50e6761e67b8fc67c9b740867be67eb8473f3bd1733dffb6a65bee760c8f8191e519a63e762741ed0d0393d249df3303a0f627436d58acef958241ed244e2db9091b840279c137d3822fa0b31ad1fd1683db96338ad2fc2d03f8aa17fac56e82fc622f1b826129f868cc42598f02734c21b740a27fc524cf8931ae1b921855f86e17f0ac3ff74adf05f8e19273ff302add64664b95abb02d3e2599d16c96a6d7816abb52b311d9ed3e9a0aab59159acd6aec234785ea7415396acd6a68809afb2902355576306fc82c6807f0e69c0d76006fc2266c02fd5ca80afc522f1b22612a59dc345e23a4cf82b1ae1cf86147e3d96dcfc888a28f5c20d98d6af69b41ed7259cd63762c25fd7082f0a29fc260cc91bba1cc0673ad28fd3a78ee4461bb377c74dcd1ea5bf194ba0373509541532816ec184bfa5117e7648e1b76245c6db5891f14ead8a8cdbb048bcab23d4355c243662c2dfd308df25a4f0db75c2f930f0fb418a8c34c3c0776804e7898d89ea668e3e75e7a5ecced17fa0e3a59da3ff90659aa38fae2b36477f27664b1fe9725b485bba4b279c4fe5f29388224de5de8d49fe24aae47bb0fae1d320f69fa6d0bc5723384fec9db5a24eec3fca9e68e92dffb3c096ffb9b0fc81692c3fdace6dfa94b80f339e2fa21acffd98f17c19d1781ec0b2e9579a6cfa43b770d9f4414c6b7e60534a93886f0a304174878ac5b214dd82a61cd15cca09e97bb609d3e31b9d1e7c4f9570f21fc2e47f1b31751ec652e73b4deaacea1e2e751ec1b4fe1e4b1d9e4756c926a24a8fe29afd3e6aeb19f82816c9ff68227973c8483ea613ce1da57f08923407e2821fc7b4fe51a3f55f21b57e42279cbfcf4f9f8fba77d99398e63f6934cfed114ef3a730e13f6b84578514fe3426fc178df03e5b8613fe0c961dfea7cb0ebcac561e296ecfc7ebd01b26033c8b85fcab2e643e7ae3fa5fe5d56c769f57b37dd21ca7e82c6261fd7e9ec334f84da74127ad0633c5bfaac45e136effb0762b0c9fc774f95da74bb780baa4ee861e46a71730c3fb436378937b8633bc17b108ff19a4884aa3f54b98e0bf220a7e1913fc7744c1af609cffd1702e0ac9f9554cf8bfba722f279cf0d730247c8bb628485ed7097677e78fd66d7e4327988f58d44b202316f513b519b17813c3de20918a9defda1906fb5b58241a62916854ab48bc8d45a2b12612e34346e21d4c78138df0d2dee184bf8b1966d384a638e5ab49e731b8a15091e88da9823c970d1015de5af9b777bd4a8eb873ab9fc162a3940ad13e748bdc4a562ab652a96470c30077f8912f7d2ff7b52155387cd8d1ad6257d414e739a2302f0ae904fa1ec6a2998e05df040bee4ae8f64792156c72f1fe3e42c35206ddab57892a2827a384e1cedb61d7f8bc8f194c738dc1dc17d21a3fc0b2540b2c4b6d51ab2cf5211689969a487c1832121f6129dd4a97d27c29867e307d77390ccfd748f17ea8bb9955ba34cd4dfbeb00e1b8ec0ec027edda9b03ca8465a8c176ef6f55c2aeaa34b96899d0b00c0cd5bbb2cbe4384618fbfa58478fd36e9d88defdf844279c0f92b449441c24f914ab2adb46ac2a3fc34cb59dc654cbfb8433d5cf31536daf33550e2ad9ef580bf6800993c05f606176d085c977915bc7d41999fe732ec384fb2506b2a306e4d521417e8509efa4115ed4379cf0af31e19d35c25f0d29fc1b4c78178df0bb420aff16cbcc5db39099bfc3b25cb78859ee7b0c49770d924f4322f90f26bc87467855bf70c27fc0786f9905de3fea84f3c38e7a06e19de6b0a3ff625ae76441eb9f302be915d14a7ec612722b4d42e6874cc85f30e1bd750d94dc70c2ff8709efa3117efa8070c27fd50917a72845ad627fc3ecaf5f44fbfb1db3bffe59b0bf3f30fbcb8d687f7f62a93840938a7343a6e25f98f0811ae1ef8614fe37267c9046f8a690c2ffc11273701612f35fcc04874434419640900cd520f9362492844e38cf927951b3643d9d64de64cb0fc223cdd12cf57582b922c322e69a0618e8e11ad00b068603dd10133e42d7c40c29bc1186a4202292c63ac1e2b09a2ce498263ae1bc953e4ad7dae782946f26dce9b6f6bea14db1f047ebc2ef24c3cf17abb12a3ddbea4d14ff5ece56b399a27beb767ec3e8d20cd3658c4e971ca04b389df8dbbc2b1e6eeea33966bc6335c6fbdbe070c6db0213beb5aed53b249cf02d3003de260b06dc52279c17f9e32216f9ad3024dbeaaad890485a63c2b7d3089f3e349cf036981d6fafb3637e1c8bbfdfce0787c6b16d598eef50ed6a71265299e6fda18e85170be7183ebc54fb9d66db6260c6ebbabb21c1b4c3844fd0083f3fa4f0f698f0893a7b0929bc0396852669b290f6d4d63459a823662f9375f6c2979dcd15295f26fee66e516152b813d6da9912b5b5d319ab81a746ac81bb60493b4dd7941f1d2e69bb62f4a7ebe8f3365979a03c19264dba61119ca1cb182123d81d13be834678e731e184f7c0e8eda8a3a7ad5cd270d912933e53279dffe08ebfe6d5627be19e18a659ba926f6c384c3998f0d91ae1edb70e27bc1746694e907c9706c95698e0b91105f7c670eca46b4b8564dd07d37a9ece68b84de68552be2f267fbe4e3e3f992775b9c82cd11c555b8d277f095759f7c33459a0d3844be0fec26113ab3f16ca425d28cd18d36e411526c45c4d8879e25c60be1f775c3ba82e70eef83e91e1774f5d94e053f85e30a27ad3fa43ef9ce0835d1d5262962e7ccccb79802eadf8ed2e093eeeef5569875987343ebffb73f55292a6219e34033163d8159b9d52bdad15cec325a2b5c2231576566c1016ee6eba705ba1e1ae954e0a61c21eac33c71e719be32431bd5c510b73dc3dc14797bd888622c6b807628ce942c78c71888e9b389479498cdcdcf7dc8276be68bbf136f31c3169efba0054d682e9e244d8231bf714647ba7c4bcb6fa61d48762edfb2551dbf77998e4a55125e763920ba34a1e8675dc966561ec633856282d8fd83e1a81f1288acaa300935c1c55f2484cf28aa8924761925746953c1a93bc2aaae43198e492a892c76246b75744a3db1a5379755495b7d149e66d83d2202aa799061987a9bc26aacadb6294d746a4bc1da672595495b7c7249747953c1e93bc7754c91330c91551254fc46cae32a2cd4dc254ae8aaaf264cce6aa23dadc144cf0ba8882a76282f78928789a4e305f4fb23e88e0cf71c1d3b1f6c0862cb4076660a6b16f54d3d8011b5add2fe2d0ea8e18e8fd23829e8999c601114d631626f8c088826763a97750d4d49b83a5dec111536f2e967a87444cbd9d30c88746843c0f137c5844c1f3b1d43b3c6aea2dc052ef8888a9b7104bbd2323a6de220cf2511121ef8c093e3aa2e05db0d43b266aeaedaa1b84e0d3ce097e1a4bfc3b30e836e8c9ee4e0cc706498b0138b1ddb0b4382e6a5aecae93cc4f6c393e88cac7e282f7c0ecf2848876b918137c6244c17b6279ffa488797f09967a27474dbda5188b5322b228c4049f1a51f0324cf06911052fc7209f1e157211a6f21911552ec6049f1951f00aaca37556c48ed64a4ce3b3236abc0ad3f89c881a97601a9f1b51e3bd308dcf8ba8f16a4cf0f911059762282e8888620da6f18511355e8bf50c2fca42cfb00cc37171441ce5188e4b22e2d81b2be22e8d5ac45560a02fcb02e84a4cedcba3aa5d85a97d4516d4aec6d4be32aadaeb30c9574595bc0f06e4ea2c00598fa97d4d54b5376092af8d2a795f2c935f173193ef8709be3ea2e0fd31c13744147c0026f8c688820fc404df1451f04198e09b230a3e18b3b75ba2dadb2198e45ba34a3e14cbdab765216b1f8609df9805e187eb84737790db8324631a77f42330d87744857d24c6e3ce2cf0380a53fbaea86a1f8da97d7716d43e0653fb9ea86a1f8b19c8bd110de438ac00b92f6201723c06fafe2c803e0113fe4016849f88097f300bc24fc2127253c4843c19d3faa12c687d0a66d80f4735ec53b161ea47220e539f86a9fc6854954fc73a2f8f45ecbc9c81a9fc785495cfd449e67b563e1144e5347b569e85a9fc645495cfc6ecf9a92cd8f33998da4f4755fb5c4cf23351259f870179360b40cec7d47e2eaada17606a3f9f05b52fc4d47e21aada1761925f8c2af9624cf24b51255f82a17e390ba82fc584bf9205e197614c5e8dcae472ac7e792d62fd7205a6f2eb5155be122bacdf8858585f8525e19b5948c2ab31addf8aa8f53598d66f6741eb6bb1547c276a2a5e87497e37aae4eb3120ef6501c80d98f0f7b320fc464cf80759107e1326fcc32c08bf194bcd8fa2a6e62d5801f571c402ea564ce54fa2aa7c1b26f9d3a8923762303e8b08e3764cf0e71105df81b1f8222a8b3b31c95f46957c179653beca424eb91b53fbeba86adf83a5e13711d3f05e9d60eed5f06d10c169bc1aeec3047f1751f0fd18e4efa3427e0083fc9f88901fc454fe21aaca9b30c93f4695fc103638f6df8883630f6339f0a72ce4c047301e3f47e5f128661cbf44348ec73095ff1755e5c731c9bf4695fc844e32770bfb2d088c346e614f6256f77b44ab7b0a63f14754164f632aff1951e567b012f4af8825e8b398e0bf230a7e0e83fc4f54c8cf6390ff8d08f905ac3462f5a297462f623c12f522f27809e351af5ec4c328b09c5d3f88e03439fb156ce4b84110c169468e5fc520378c0af9350c72a388905fc758348ec8e20d9d603ec3d22488e034332c6f62829b4614fc964e30bf6d562f75fb03f52725808678006f6319bc791632f83b98f0165910fe2e66d85b4435ecf7b0b64ccb20a999a62df3be4e30df06a45510c17cad0222f8034c70eb88823fc420b7890af9236c50b06d1095d30c0a7e8ca9dc2eaaca9f6099b17d9632e3a7ba00b83d7508c2e4435cf06718ec8e11617f8ec1ee1415f61798e4ce51257fa9919c97e3dc2616b2bad9c56377b9fc25dc8e1d5d746997f071103b7574adc777eae89212bb203a60bb727c8595edddb250b67f8d257ef7a889ff0da6768f2ca8fd2d267ccb2c08ff0e6b6ef5aca7d93068b2b89de718cb7c3699ed58735cdd6cc6b789dd4724f06a99f443c5d6427cabd939ce2f6b99da8057bf824bb7de8bbf0d4d8b1b7e1973cfb8591baaedf73d16cb1c5d2c8fac89e5425624329d9b41d7887fcf105997c7866f1eea66d019356f4ea9394bd47b065585e4315ffc5ae448ac16f1e272bdf49212f8fbe1f4c0242d607c53a295e2572f539859fdbc17890353c26d40f51f8c742fcc9e60886e9c4638dfb8b4ca9c427189631b1522cdddd82e90e7b7fab54d7e8b3fcf963dfd80c5722b5d2cb7f3c5123277e33955a4d81a1147bf96de1482bfa4cb2bf0ab3031fb118b596f5dccb60f947e13c44954254c6dd4143de592bf8489db7fb1b8f5d1c56d942f6eb344eaac9231e377ebeb2c263f6131e9ab8bc9f1319767c96ff899636a13d82270946965082b87ecf058f0baa45a343360a9c71b58d92bdb7ec6a8f7d3519f10286fcc14342a8d28d57ec1e2d75f17bf998456c59fee2d82e1b1729bc32522e812b6afc887fa92a436a9fa3f2cd6b9ba586f9b36d6b8a6f3445cdcb3f7dc38aada983f5d2e09a5e68bdaa7e6af58bc06e8e2b56be896dd7cf18bb76da793e03ef36ed0cebb3a515a82b549e7df301e03753c768ca5cea6aecd7fc7e23c086ba784b30165c37c07dbe542104ce7b0161126667f60311bac8bd9d648cc168afc592adb266e575bf55a16c95c5c94921a347d943fb1180dd1c5682a61e9ab52d5dd067619738f47c85e4cffc2623a5417d371ce6df092c21b8342f1cc8d1d67325da47285e80d2d776adc0d598cd5df58acf282f409bce1c216c242910a15cebb3c1fae4c53fb7965642f66ff6031cbd7c56c52c6923358af002f43d3f5596b5b52fe8bc571982e8ed3509be42dde65ce4b2aaeeedede53c4810765b24cc4cb12bdcc6cd7847c96551bd7e1bab81613f71eaac4311d9c92db3b5824acbda4a6e4c94e7fb8369c1218a7113a4e0bebac97959e50740ef5300e053a0e1343e60d1372447d2c862375319c1132863b0b8b5e8ba4485dc4b70116df51baf8ce23b4ecca5ab435b241a021466074b6da206ed93601b440e863d5088bd5186c84226caca68a375253c85fe604971b267e8db1f88dd5c56f9b082dc72a511bf14de557c87e1e1eab0529ef868953132c4e5b874b337fd933418c27f09c96a997425b7b34c5e2b70d16bf307d4637aed3643b22f92b9ff148df3acc56cbb11916bf71baf8f561e9470517388429b46c8e69b96dfab1bd30a930bf56a940697b2db0586fa78bf510346f2da899aa8765c48a9af16c5e1f566bdb62b51bdfdf02d37b7b9dde6333f6b86688b9413efa58ea9479154edcd688833352fbbfe952a0f63dc896587cc6632dc8f47984f786e78a5655a5a65e0d3297c05b232bb218c356580c2704e923ebe7066608dbe3e3e085728c2a35bde29c1f688dc57122364215641c20482c6b5762d43ea66db0984ed2c5747aa0d4f4cff4b8f950c5bb2ed3b52d16dbc9bad8ee92315d6947c6a9c7ccdb6134a6d47e966f8a41b9b83d16bfa9413c34525bccc16258bb34ac7d2c3b60b19c86e5607dcdaf5cf3cac41d4f8d09622c8fb770dcf873bd75237bdeb40b2f3d4c6c3b62b19d8ecd616229e08fdd7cd9d60966afd91ea7e884c56b862e5e7d7df1f2c725395b953c023a3bedb5ce989e3be8f45c9141cf49cc3dcecced83ba9652249e966b7256f2eb606914f67dbc0caa4d8a76c148ed589b96a05bf6cc775e5e2669b9a32d75e965d4158be14c5d0c776374636baa575cfbd1753c778721d20d23322bc8cc7b189f4073da54ddb138cfd6c579788812795ac612393ba9d6038bc19c203170cb30d71aabc0d846303db39313b7c46230571783f9681b204c9b27c8f87df831fedadb614f8cc14e417a32a93177fbcdc522f7ad15654e9242aaf752dcadbe1c2cb6f330af90a0edb2ba1a1dee85c5683e360719ce86b1deb76976bc15c661818ec3c0101c549aaa238fb3d58fec8d69bc50a7713f96a9574dd77aed8369ba48a7e968946daaa57b352f176d8fe49c35457ee98bc565e720bd5b6c8c2a53ef36eef1a97e582c77c15a54e1ca39b78d91fa6b6a09af4e5fa7efe3f6c7e2bcab2ece7bd471bb1a72096a0fea9b305472312abb05f13a532186b1f564cc303bc88e8d0fc062b67b90d1e6b0f55d5db65a066231dd237a4b7b142ba8454b9b7f15260683b0182c0e3e66cac30c3f66eac60f7b9ead141a8cc56f4f6cf6347dad923cc0deafe324d193ad48536a24bf9d23e6f04ae46851ba92a67625ee102cd64b82d8a53efcdaf56133b7c11a3bff25127c31ef1421c59d212c13dff07a2baf97f35322bfa656185a53da0ff5d40cc9e73cfc354e4ee116b3a0a65ce78b99d34b585acfddab44fce99fe060ab64e19832f2e77e592a242f076939541072d755f045e0439d565f89f84a2dfbce140b5d0d3714d471307699e3b41859c69d4834963152b21cd25b71d29b5b4c0b79aaf692a95a2faf378fe3a05a5a53662d96f1d0eaeb6da8530a59983b74babb0266cbfe4d82ef79a39ae47364c55121067239ba8ca1f94fe4f48736440850ed818ce216826caf13d7459898eb2c5ec1dc29d4831dfc8d1bd6cbe7a9b09c1215dff567894891b922707c7d970dd8de6d90c45644898def093159348fcb1d70aeebb2aabc308076581edf4b45212ca644d81a64d2e9c2fb8a0b28146d3c3e1b3487adb602d8cd4d92c05650026b2fb2ea1296cf924ec536836bdd3c096e2525b8b61a705c201fdde53e56d5e2699115d096b224b45594d01a03686e63d6063c558393784aa833a3b7f49a2a66b25def7ee5e3ea664a1bc0e5b64882db8b125c47c67b3695816b4d1be09d0eeaccd594f09a834c39c7338e6703a6eedd93984a2931350598920b136d407474c724a23594885a0144ae0afe8e920db87e06dda4b594b81a095c955615e90db648c229a384c337449c53d383547360ae8fec3c51475633be3a90d78a73e508a50d005bf748022ca704d8046446ae269f16b401d08b6d9280f6a62ed0e78819aea44f941dedf5fd419d5711970da9e5b836003abf5d1250252520be1fac6ab14f61eb45acab6b9a99dcafae48d47ff3848515097b2b7502b40122ffa3205651426c01accc9d96ab920ebc768c6ebd3a2a09aa9a1294537578ac8c8facf2fd5878b9552d7b8976777ada83b1d675d4a3f93c33aa8cb941362d168a611b1b509d0d2a817de21a95e09d6ce8dda13ada3635617f6b9c04b79e7a540282839b1a4c10e3147cd235b97d830df0f607e3ab1be2aa14926bf4dd9d416c00b5113463f7a59ef29825b2df6adf9673939dd72b44483600e30e000ad87ef18eb27afdd58a2c2bcf4ac15cd1fe714d79b8a3f7ee76be73859032f1b72dd6963b3009ed007a68bcfd3559046d73ebecc9864968075267d129a2fd5f2d024f6e9499dc38b5d269f89638e1d900ee5300eea0b8b2e83c21a24c9469368ec3761f9084763025b496a042b0750a97bbe8295887d03b0cb8be3d65428cdd3dce71206b1e4a3da03dcf81368905dfa8db0680478bee54e3863ee17ecff2da7b3286a38efb5cb662eee849b9785a255b7a1e1fcc3ece2bc6697e18f4a1ccadf590636ec6722e37b0534b6ee819f7dc5a7ab7e506eadfe4461c1acb0de1b2981baa08cc0ddc00cc0dd5eac9ad5579921b6a3027375457293790f35d6e288fb3dcd063283a9d71279adc9439d8dcb4030fb9da59b55ced3c492ee231909bc6e122179994cacd305e995babe9d2dc0c3ecdb90126f4730337397303f71f73357e62de74f1cf12249731e8971fe4f3e2f3f0ffe32b0cf2f90a832338047e7a19ffe3b67a8ea46ef5f054731794f09a28fd969ac39cb6874f87ee293a780f0254ad1b9d364d3ded9f964122589b36d024e0ab75944938875b89b31ae03cda249c23acc4791ac0798c49380bacc47905c079ac4938475a897313c0799c4938475989f36380f378ea79a725b2c6f662755b9ffc35327c8da9f06d05f09d108735ae44ed11aabf848d75ec910c670b2a9cad00ce134dc239c64a9cbfb024ce934cc239d24a9c37009c279b84b3c04a9c67019ca7988473b49538df07384f3509e7282b713e0e709e6612ce6156e2dc09e03cdd249c23acc4b90fc079864938875b89b308e03c93dac7335da7d29bd147d2a16c4385f205d0843f8b12650789723953fb78e33b54e5d3816c48057200007936f5320135531274ae8fbf5fc1342bf22d18f2980432fb39710c79e4cb0ccfa7b5d68b27310c799065f0c6c02ecfa5c4b725c0c737634b1e86552d7c01ca52e60c6342db950aed77c032cfa344db93c169e9e06e193667fb5e00eef97559c74371bc96b76fd4732c28022e8863878051f10f199365f2db811d5e1807bc319bd178fb6b00de4594f03ab1f4ad4b6f26261d802383d91164e38b4d8239da42985d01cc4b4c82596021cc6600e6a526c124ec9193c16c03605e6612cce116c26c02605e6e124c42e70332984d01cc2b4c8249385e4406f373d034bad2249836f670be0030af3209e6180b61f600d9fc6a93608eb510e69600e6359430074a98a5ce4ba5e2aa9697c0b3e797843ac19e7424be1d15f25700f26b29913713c85789151bee0a9295029e7d836d2d40f9795d5d0eb6794f6121b4be03a9509e09acef7a4a94fd53327ca11036558e16153bd9bb5858e73a311c5ccdd21da0420a9bac742d01b06f88c36e83555536a2dc12140137c6314f048b80a087de91a23d960aedeec04a6fa2b6d20962816c995c16c84ffce1f3436be55261b558d25d826a5f45d50058e9cd716cb531ccf97f8d0cbc50d4ef31cd5a9265f44301c25be240387ab343780f40786b1cee5cdc0ad7317e7017f7f0d8dce6d17f02386fa33fb9c89d474f2e7cae64eeb27dbbdd64ee0210379ab4d08ad401960ce77c5067df6e124e528f4d329c1b00ce3b4cc249ea4f4c86f31c80f34e937092ceac93e1bc19e0bccb249ca40bafc8703e0e70de6d124ed2a52d6438bf0638ef89bb7904f77cb1b979f42b681edd1b879f3b8438897937b4b1196427608df799b3f682d03981cc35fb2a80f2fe7816f3e7fb90daecd9be05c0f780391ec236ce52ce03281f8c03255cbc3293cd61d3e4d6662b9c8fd6c7513e92a15c0f2a9a4df4b3e770de71095b2dd04d145b8fad96a2a63ad7624744ca4eb7168c0c6d01603e14c7a44495d880b1b2669e5cedcba6aeba2935d2ca870ced7900edc371787904df0a850c26d982d46d01cc474c8249e87f4406736b00f3519360127a1393c12c00301f330926a19f3b19cc8100e6e326c1245c814106732c80f98449306ddc11613480f9a4493009bd89c960f601309f320926a1f30b19ccae00e6d326c1245c814106730080f98c4930097b406430fb0298cf52c2cc61a9e347e1dcb009eb773237ec7230a6f45c5d2e23f0cf021196a264a3eeb9c0569f37092661fd4e06731880f9425c3bcaac136b31f8211e31b96b91e1eb0cf0bd4889af0bc097eaddce85257737b2d99df04500f4a5b8ce8fdbbc3c320f01085f8e03e1a8cd0ee13600e12b663787084735c99a43a783e6d0ab71949a6a5d10ff506d6586cd9f133689c8a67f2f01405f8b7bc14af0d921c2a63bd9dcd00300edeb71791c25a783e18c26f9443019c4834179fa86396bd36cdc12651c40f9665c2dce4c67ddd9ecc43506007d2bae1e90f7c8379bb37623503ebe6dd276ce63ad1cd56c0870be6312ce3156e2fc1e64ee774dc2497a821519ceab01cef74cc249ba891419ce9300cef74dc239da4a9c6f029c1f988493f47c35329c0f009c1f9a8493f4e454329c3b009c1f998493f4a84f329c7b039c1f9b8493f4205a329c8b01ce4fa8bb95c10e949f2754e347da13f68b76a0023a0200fd348ebdb2ebe06c4ab25d62d600789f51c2ebc6826ec0e3dd8d8b70d4fd732aa8cf82aee5e72642251c1e2683fa0c80fa858950093d38c9a0de07a07e692254c2816332a8f702a85f990895d00b9e0cea9e00ead72642256c8b92415d08a07e632254420f4f32a87301d46f4d844ae83d4706754700f53b13a1123a3390419d06a07e4f0975044b9d2cf63a334c72fe5ec3d6887fbb11e19dd515624d31577636e39376fb8820563bc9c07706e16f2d107d2f356b4a9808f95489c04f565489f01f733614b0f1aca299c09e7f3077e1b68dce396f002bfdd19cedf949b7f923b3d3fd00ccff9a04d3c633b58e06307f3209a68d676aad03307f3609a68d0e641b00cc5f4c8269e3995a2500e6ff4c8269e3995a7b0198bf9a04d3c6330ce60098bf9904d3c633b5e60298bf9b04d3c633b58e0130ff3009a68dbbd51d0b60fe69f64a251bcfcfda06f4ddffa2c4bb85c4eb6efc572a7af1ae6c7eae0119b88654e018b0cbbf29c1f564a94bbcd419065cedcd71b9d761c02affa184db44c4867f5ace668a312542579c9e54b8da025bfc378e01386e57e59e12b0da51870fb66d6ec795fc01d0b2fac62e3cb47153ca0520932728d1c2855eb3842daef64d6c4c763eab1021dabcd0ab1bb0d57a94405ba6adcb2be9d035a342570fa0ab4f892ed3fa4dfbf700eb005036a044a9961b16b0cd69c39579005fc3b82b1cfd8cbb3b495c2e2cd69dfe25b5cc0fa9d07e0a2a9c469468c39f9a65e3ce4ae301cec626e11c6e25cebd01ce2626e11c6125ce6300cea626e12cb012e7c500673393708eb412e7fd00677393708eb212e7bb00670b4a9cbd59ea9e2153d87ac6dd11ab995ad835c7f99c0f7e5488255e85cc3d8eb9349eee25d9a05c7b9684bc451c361b7c230c1bf7976f0e6cb6a54938c75889f33fc03a5b998473a49538af05385b9b84b3c04a9c27039c6d4cc239da4a9c6f039c6d4dc239ca4a9c0f039ced4cc249eacd4986734780b3bd4938475889b312e0ec6012cee156e2dc13e0ec18c7540706d39bd1097de0c97a44ef80267ca7b86630f97e22550e89724719eefdb148ee2c52247616b1fbe0e625c0363bd7a56d4271a46b8cc9fce62603dbec4289523921aa730fdcbd6e96893125f592eddba52f0776d99512662b0033e6bd6ec8e06d07e0758b6346b376cb0309eb7232179acb00daee94687b30af1362851053269cbd8a320c29db7804cf9da0f4ec1147861f1d7f86ff900ade1dc02ab7accb5a3cb64d2d0ea4427935b0c39e71d8e1d8f8ed90ac747c1dd8610e253c3e33e25d1080b9c312fac6917917b701187bd1b7245769b6e09fef3059ce964b8556883d13f9749a7d154b7300732b73fd89092781c9b2fb1c5056f6ae4b1f4e6fe7d1c655bf838095f631c3097181a886d68aeccfc5ada1454bb6f3e7cbc04afb9ae4f941ba3c906ec408e0ec6712cee156e23c02e0ec6f12ce1156e2bc10e0cc350967819538ef003807988473a495385f043807c631441c6cb47db8958bfe9f0430079904d3c645ffcf0398834d8269e3b667c70198434c8269e3b6670f0198434d8269e3b6670702987926c1b471dbb38300cc7c9360da3800b23f8039cc249836ba221c00600e3709a68ddb9eed0b608e3009a68ddb9eed07601698d4a124754720eb50ce0038479a8493b4794486731dc039ca249ca47ec46438cf0038479b849374490b19ce6b01ce3126e1245d704586f3118073ac49384997b490e1fc1ce0dc9a12675b8973a4f3ff1a1978a1581b6cbbd3eb052c89701b4a84bd35161974279a09ac4200de40ebb440e65c7312b0d371364026ec3391413e1c40ded606c88443266490df0490b733675d1161e545b6aee8268072fb38ddba8be556167398dac062f3da57761f00763c25d81c1fd852e1d45825c424dd1ad30da8d83836550cf04e30a708209c0125b3d46f00ca8975e9cc18db717b643ef48fb124ca4994287b09943358a5d8f6877b2b9708a75afe7932e32f61ab0570be9ffc72e7dfeeef539d6bb12396702b74b2be565300783225e0bebe52b54a34a1feefb4638f0585c294ba2c5fedafaa86039453a9d786a443a9624ada7ddd394184f10380715a1c0daad4e50c414fe7209cd3273b9d6335c03b3d0e3ffcda2d9d256c6091ad16f900545a33e22800b00656b200202c47c90a805c60a13b5062e4e7c7cc9543d36a7b8119c23279b6b7afd1d41ad8df8e71d85f7e8d0d1689c692bb55a5eddba5df0d30cea47687e0c0268b808b99bbcd057f755fb1f18a8b739ef8952f4f24dc7e651615cc9100e6acba6c5f7a3b9d840d23b24ee795a05c9c1d07cafc34a34c76cf43bd04ac724e1c5379059bdd54de2a80706e1c03cadc1aa788e64eb55062a6f3c972515ece61fb88fe788550ab44f4dfedddb06a1400bb535d0ed3797be4367ad6cf0028e751a2545b5d14f8aa209b9b415500defc38bc47dcddbeca9c57f838e7e676eadba700e782387006dfea9cb03144b6e524038da18526e11c6325ceaf81752e320927e9591c64382f013877360927e9493164388f0438773109e7682b71be0270ee6a124ed29362c8706e043877330927e919706438a7029cbb9b8493f4d032329c6500e71e26e1245dde45867377807331254e7514e908b6391d453a19e0dbd3a42509a4bbc593e1dc05f48296988493742706329c07039c4b4dc239c24a9ce7029c8526e12cb012e7ad00e73293708eb412e75300e7724a9c4d848062399ee93a1592e122f31e6e046aee224a5cfd59eab484d773c8f5c25c23fecd6784aa85c82902308fd602412d0657c22954b0f301ece2385a99c344937c73391ea217c8da2bcc593440d8df21cbf61700942be39829e7b340d3189fbae513bc2bc55c7985d513ba152033af32c7c5dac61d117702d6584289b21bb046759d2744b90794e866276d3d84f95b609f7b5142edc0b8bf25afa38b985ac28279bd119e6a4006b20900b9da5cd76a1b37e23f1ba02da5f6c90cee1433c2cadd3b9f0730d79804d3461fa37701ccb526c1b471f7ce6701cc329360dab87be7730066b949306ddcbdf31100736f9360dab87be73300668549306d5c76fa20805969124c1b77efdc0460569904d3c6defa7b0066b549306d3cbfe02300735d1c9dcb11c2d520c80984b6bb667706a34afb50a2cd6151579c137637c9569caf0178d7c7b15248ede5a106eb66881127be11d5e6b5f5d40d00ec06ea81bbccd31ca3c4f21742900da9407e0240ee1b47d99a5a000419bab3f138f18d00ed7e94687b69d0ba23f21cde5ab68398262e4feb924868bb640e89f541bb60ffb8a744dc89ba19a2d1c5aba92a4f596bef94c80f00ea01714cd9056bb9da38a49707501e18074a6e972b85dd2dd19c956db3557e0c501e64922bf758ca1e1559c9d90e544d079b84738c9538ff02d679884938494fd224c3790bc079a8493849cf7925c37921c079984938475b89f34b80f37093708eb212e7d300e71126e124dd888f0ce7ae00e79126e1241d7a26c37938c079944938494f2226c3b912e03c9a1227bf51fb1bda3772d40a603a861293dabc6798183a2e91bdf058a634c8b675fe0dc03bd6a42c3b96d2fb832ccb36005dc5e34cc239c64a9cdf00eb3cde249c23adc47929c0798249380bacc4793cc079a24938475b89f35580f32493708eb212e79d00e7c926e11c6625ce6900e72926e124759325c3590e709e6a12cee156e2dc03e03c8d126777e6759de11caa199fd4f51f29e65ffc4f38674eb622736bd09c3f3d0ec71985b5248d07928dab832f0520cf3005a48dae5c270390679a029270690119c8bb00c8b34c014958f59081bc11803cdb1490369ebcfa3000790e25c8360c8e63168bcff80ae198c632c900fe0e1a41e75202ece7b3c4652cd50733b8b72661354436e6fe1eb0d5f32851abdd3ec6b0cded5c8cfb81b59e1f872fb1b2d64a617fbcc13e55c22bdecc1a4915c03a2fa044db55a0d5390fd6d139ab6448db016bbd300eef4cacb70ec5911eac4896f1a702ebbc288e8c5fbbdd3f08571091554bb7022bbd38aea9e09837432383b73d807789d9abdb083b9c64abdb56816c7f691c239ef054365d16b7bbf9f432b0d6cbcc5d8a4568a96405c12dc0522fa744abce54cf977da82a21a8c297e5b1d5c495d63bdffc086cf80a4ad07d98b70b50cae08e89fa23eca7c98fbde761127607065061de15d8f395e62cd2b271738159c062af8aa38da02c9697ab45be4d0137bff9a63c60a957c7d146c07a59a9a71e100e4d93e19c00705e63124ed24966329c9500e7b526e124758120c3790ac0799d493849bdf1c8705e06705e6f124e525f51329c0f029c37988493d41b8f0ce78700e78d26f93b8d65849ba992f93bb506386f3209e7182b71fe8f2571de6c124ed21363c870de0870de62124ed2f38cc8709e0b70de6a12ced156e2fc10e0bccd249ca3acc4f924c0b9d1249ca4271592e19c0f70de6e124ed25de7c970ee0f70de61124ed2831fc97016039c77d6a51b8437a313ced5937994bc0d9af07751a24c1e5d5607b3f56473472d01bebbe37075e001af1076a864af95afd8378d9100d9f81e4a785d98771ac33da0b92465b18ced1e77d7036bbc370e27f060e5a27d20a70390f79902d2468b1c0640de6f0a481b17ca5401900f9802d2c685326b01c8074d0149e8404b06f26800729329206d5c71742400f990292009bb8564204f00201f3605a48d9dc2e301c8474c0149e8a84506f26c00f2515340129e4d4406f24400f2317316bed87834deb600e5e394283bb1307e9823addc2e7f2080f98449306d5c923508c07cd224983666f37e00e65326c1b4f104ccfe00e6d326c1b4f104cc3e00e63326c1b4f104ccbe00e6b3d4131053c4da1faee20c09b4c4f9b8d0b9f2cfc8e0912db1e27e860ade7375d9aaf4aeee212c210fa442f919b0c3e72951aa530393cba9f50ba7168839456ea52b84b035b423e8c752815d0b6cf4054ab0bd997f759abb6835b93d0517c8a76ad397a33656492b81f5be4809193f956d96f3ca7a3657082b137ff3506338ff8accd93a01a0be4409d5bf1ba26ba5eea16233d864ed5088bda75fbe05b0be1c47a515acf96463e3a93f285b5fa144a95bbd1ebcda22444b566d3d01acf4d538333ff7ea5824fc3baa997f47a5d816519335b33e02585f8bc3df6864fcce5a64d9fd7a90dd5f8fa3e3196c107918e5883c19cc5260896f9804d3c605fd6500e69b26c1249cbd2483b90cc07ccb24988473ea64308b00ccb74d8269e36cd15200f31d9360da385b540860be6b124c1b678bf60030df3309a68db3458b01ccf74d8269e3d0dc2200f3039360da38e0b13380f9611cebd03098a93b1b11564164239cb301ce8f4cc239dc4a9ceb01ce8f4dc239c24a9c67019c9f9884b3c04a9cd7019c9f9a8493d4d98b0ce76300e76726e11c6525ce2f00cecf2971aa75bcdc93781d18678f650f58327c135912df1775e909021db5497b3f64aedad7004bfc9212657bc6cf4b2f9407df71516b9dd75739af9789a9b57d85675289b8b3cf221b028bfc8a12634f96744970e7cc9738ea563aea2c173cb8cbd704c6f77be5f394858e005e561659ed9ab000c0fd9a12ee28967a4651b8fdb537f7338c2e07c5c537e694bc362e92f90aa0fc360e7786da1d6962e366fc178102e33bea4a2d9d95aa989266763e4c4482f17d60a1df5362ccd1600c77b809e1fc12d9e1267b01bcff31b700202c5bc90a80b74001f00325da5e02ed74619ff318f7552a968db022214a39e0d6d1d166644db26600f08f66170d841e266445c3eba068f86f1c1518e6353a491408c4add53da82ab0c100e34f717b8c062f636d3c35ee1e80f6e73826fa6087578d1e24c713eceee07602a5e92f712cc7813033575ef6829d02c0fe8f12ac3a727704dbdc8edc3d0720fcd59c050c36ba3a4e07287fa344b9550894f39d30b9902a36c7f9971a81ada4adf1f7a4aaf187806ae9774ac4fe4d2acbc5f0f5aab4366ba343cfd300e81f71d8ac02eaae5cae601b36fb31d55301e23fe3985b0d7ecc09214eb2eda6ff06a5ec5f26e11c6325ceaf00cebf4dc249ba9d0619ce8b01ce7f4cc2596025ce2300ce7f4dc239da4a9c2f009cac814138475989f336803361124e52e772329c1300ce7a26e11c6125ced500677d93700eb712e76e0067034a9c6aac09ee4ac25d80e6337740cfdee1ba4280b02125c25600217fa15282b3f970937f01bc4694f0c2b9e6d8780ec279a047ded81494a4a52219ca6f01ca267589d23b1467e3e2ee590065d3b82a187708990b5a1f5f19f93915c27b4119d92c8e260faca327c991f532f1499118302e8ea3be26cbdcff009ccd2971b607388b6bb6b5543fdb3ec5f610c0d8821263aa23987e5bab69f283d876601a4085b60b40bb45bc68c3f8d859396d01d0b68ca33a1abed9cdadf703085b51224c1ee75807cbc0c8bce47200bed67164ee610258b07520b1a025cbdcf5415bb30d255ae5de15cceb63b8957e1f57003b6d6b124c1b7b41570298ed4c8269e31657670298ed4d8269e316579703981d4c8269e31657a703981d4d8269e316576700989d4c8269a347dc710066679360dab8c5d5690066179360dab8c9ef550066579360dab8c9ef4d0066374a98ca93388cef06615b936c7ebc27e85276370d28617b930c680e00dac334a084fd7432a0bd01d02d4d036aa34b4c7b00b4a76940099b4b6440bb00a039a60125ec669201ed0680f6320d286157930c687700742b4aa0392ceac600840500d994c74480b737255e9d0383ab8a6eaac35687c34f5812679f3826e046d5c5041c99ffc713005fdf3826e052337b90f975c2c63dd904dced20a3f7a344ab5c6b86d5f4e7f98ca65a076cfb4ea1f7010bed6fae85dab8c7d2a3c0427329d1b6015511dfcc927fe62eb5b6bbf4fc2fb0cd0171d4e5c1d7fd12da2359cbb32db0c78126e11c6325ce3f81750e3209e7482b71de0c700e360967819538cf073887988473b495383f0338879a84739495389f0238f34cc249ba9b2719ce5d00ce7c93708eb012e70100e730937092ceba93e15c01700ea7c4a916ad0ef775346df6802f05f04650c253db4bf14ee464c60f9d28677359b11cee7037422b16020b8500781c45a5d5639cbd01e28238b23b96d9534f91239cd324c3b93de8668e340927a9371d19cee500e728937092eee94186f3288073b4493849b79722c37911c039c6249ca49b9f91e1bc1be01c6b124ed2eda5c870be0a706e6d52437eac95fe742d00ce6d4cc239c64a9c3fb324ce7126e1243d81930ce77500e7b626e1243d1f960ce72900e77626e11c6d25ce7700ceed4dc2497a3e2c19ce4701cef126e1243df99d0ce76c8073824938498f2a27c3590d704e340927e9ba61329c4b01ce499438d5d9b16a8b7d3efc5ae688e019a498150b6fce221f6088d7c6fde70e058dfac9947007f8e0968b41e6228707df3d49c533b965150c0c0635815588d1fc0db4c0bbd62302fe25003e85127807967e11a2b7dab2cf72b702c5c2545340da5804740420a79902d2c6b3e20f0320a79b029270d51119c82100e40c534012369dc840760095cd0ea680245c9c4d06f24460913b5282ccf73593aa51af787c7bca49ce1b6b1c7dcac41d8f6a4c8d26b2bdbbdf00763c9312bfdab921e8c408a1430ed9b4c838007396493009b7c12083b91d8039db2498364ed80d0530e7980493b07f4406331fc09c6b124cc2162919cc1100e64e26c124ec2791c12c0030e7990493b0654a0673248039df249884fd253298a300cc0526c124dc2e880ce6680073a1493009b7f525833906c05c4409b3074b3a82f33de4794f7ebad82b64aaf37789c058e4c4b74c08e69ef5769fa9b5334b82dd99126c770176a6f3c272e1430fb75c59c2560b887c5396e5cebf5da1539d6bb1f356111d56b28d581a03acbb50620d77ae918d9b504f01597f574a94d1cee8b07117916b8095ee4689364763a5e1766322ec359115022b80e5ee4e89b71da8b4d6894a89af535a262aab98b6c138900ae23260a37b5042845b5aa99a1fabaec8eb7b329bec09702e8ea3344dcdf241ca531b4f3cda0164f73d29d1c21d6fca7d7669f3813df500c02571349ab0e93a6fa3c9c62dfd07836cbe348efe526d1a4d84131e6499fc0400b6d054b036ee17761400bbcc54b084450119d8f100ec7253c11236efc9c00e07608b4c054b387547067628005b6c2a581b5ba8dd01d815a682251c9e26037b2000bbd254b08493286460f7056057990ad6c6a1bf45006c89a9600987abc9c02e0460f7a204abf60c1fc9ea60cf70327c07017cabcd1903b0f1bcaf990065691c23a7c1ddc96cf41bdd0d8c4ead310927e9be7864380f0138d79a849374d746329ce7039c6526e124dd40980ce76d0067b9493849b7b726c3f91cc0b93725ce4cbe50fe917d1b4f987d09c0ac3009a68d27ccbe2660366ee8133e3545f824910d79465cce923b7f0e65d3185f63e4ee0dbadcb99f297a39556ca9836377e7bf7029b0d8f94ff73c21b6779dc2d6b372f194cb2b12b2d738bf72cd2a597e1fe7954a6e108da441e48a56ee04877995f3ce3c562c42dfc0e6337767d339cedfcaadad5a20c91507becc759e5533ee90c14358eb68b28a5588187b773ecd4d34119c8ae5994fee5aac5ca9eb3ae6aebe9a21dbd7254e9c0b852615ce3b0d44386ee1969bd802dc29cf8519a277c8b5e0099410d39e4a9f59222e854e1c0ac57541cd57797d9dd712a39cbfdc7ee6d09a1ee650b9326c8dbc53cf33cbe429925e5a15c79ed0e7c3d2acd952a618b9e6cfbf5f213ce98a85d41919639a397eb85db648932a79fd785a6ccef1afe6e92e935d9869a74473e75f0b9d947785173b99ac821509a51617d7630dff1faf9f111034180400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/db6800030179ae1458053ad75bf72d56.asset.meta b/Assets/SerializedUdonPrograms/db6800030179ae1458053ad75bf72d56.asset.meta new file mode 100644 index 0000000..020a554 --- /dev/null +++ b/Assets/SerializedUdonPrograms/db6800030179ae1458053ad75bf72d56.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ed5f9be543ac55e4c88483f3bc1d5ea9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/dbb59f28325d2bc49aa98c7c3e2eb6fe.asset b/Assets/SerializedUdonPrograms/dbb59f28325d2bc49aa98c7c3e2eb6fe.asset index d846ae0..ce43a75 100644 --- a/Assets/SerializedUdonPrograms/dbb59f28325d2bc49aa98c7c3e2eb6fe.asset +++ b/Assets/SerializedUdonPrograms/dbb59f28325d2bc49aa98c7c3e2eb6fe.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed59eb6e1b45143eeb787d895dd25048280dd00bd0ad285db745fddfa40482daa6ca4d42154a9d64ddbab55dcb76a2f4157821c45bf004fce62de03b67c6c9c63be38dd3dd824d77e5bdcdcc37e77ce73217677cc2e1dcc4658bd668896ed126edd16b6ae16909f7264ef5d6fffe843ab83fc7b58ab29b7439a6251fd79d4f705dc15b977a68b94fbbb8d7a57c9d023cafa06d8037fe5ac32f402d278b469bf48056e931cd3b1fc7406c49a3aefee6b05e4e01d7457a83d24084e24e7c299ac7651d255d296b42e87ebda7f48ba8d544d92eda74a801cc1d412c2c705bd1496e257dcfe057e4727e761d91fc476055a94d3e173a3746a0b8df329e5c86ce65943c6099bbed418d36000c1a6e0a7f3dba4b778c1a5e74ca21b997e45a458dba8096a35dfc1ee982856be00c42e6e9e2fb0f625d36501d25b7e821eedcea19dd06e14f0750b6d06d03260e6803d7b6e03d83d8d19a712ab12907dbac0153795a135ffa84b6f1de1009d7e57a20920622fd0abef5c4ef5bf0fc45dc0fa5b7a8ee1d3c9bfadcd0949965343b9cedbb72ebbe991e401b96de9f62377b6f917fc3224c7daeacc330eb738c38bf462cf19e4395645c49e40ae3b64aa527bedd219f5f9db50883a3eb18d5d0ecdf8aef7bf4dd505dccccb0b92f8906c716fe63e7af3f7f5bbe71cd3da9da5df273acda428c6ac388653ccf998b200c57c175b3151674907ec7447f9e3faebf43fa55bdbad41bdd003919994e1a4086bf0d3c1ce2d7902e76a572703487698bb83c983d924c1ab1558581f3427774308d13d94678c64478e15d131e9f6186115e38d2eb98703ecc0c162d0cc6c9606370cac06085cd346df20391ab382017d7b6a0676de8a524d05d1b7a3909f49c0dfd5c12e8791bfa0749a0176ce83349a0176de8e793409fb6a1cf26815e32a1335d1f1ac2f06f1c1170d6decde3741c06fb5ec2ae83607c8270abcb5b977ce1a842a75fa770383711a83cc1dc80043b9296e2572d17c8be6aa945d2c45927b0715aa8e4c3ed6bb2cae94f8a4cdac5eb649face7b5467d2c302dfe32699a7ec456d56b63caf8e2b5df9cd19be2a5e0dd80dc94d987461fac15c063d9d20000e7d16d695e9519422cfe2a305e6abb99f0bf1580feac2e81853a3bd57d10b327e37117271f1ce203e0cb8979d9d9666cd17898910c7408f15e0bb9019418880f1e0cff7392cf85fddb8bf8c8717a35a7c50aa7d7f9ff79e6ab70e6e3bdc0a3d572a6c2945d4c339a590cae7ca0e7fb3f0ff6f036abb1e289c8ce9f46fcb344b72bd1adc8fa344db266058d5dfa39f1aeea7d546f6b0f5cc377e587e347603144e0a53409e48ebaa1b5e6b26c9f8e1f61f910610b6912764e12e9b6745c4395ed23ec3ac4498d38372de22844dc67691237a789dbd503430fcf61c0b0f0db54498fca625a549642547e9e26953c2cf116106fcabec1f85a95d1ad3a86619b0b51f6459a945dd1dea7968f2d09dc8e0c19fbb8b7e827fdbfc4a4f9642644f0e534099eb1e6c596ae327edee984c8bb927e401fe89dde257a215398576348593644d9d534292b09659331db2b8448bb9626693c7909cff6d43f0e2a078e63804e8588fb324de278cf985793fb7a79bc88a71ace40444971de971a75d334311b30155e9d7fc5e62f68f37b319eee5933ae67587f7bd6099767593f7943d29377ca45ab17eb746a0f67565bac85f68f04af8ab2aadc8ff7737c26c4b947a36d700ec78cdf6cf99a429b50039ed648ccd392d8403269fa369b49e52156f1d9b013adff75b6bb36bbb8e9bc04c4262cafc0035a45e53d118a0ff71f8d69a006db270000 serializedProgramBytesString: - serializedSignature: 2f1ed534e8cb3bf41703f2f124d9fda0ef7d45b83a1d7a7956187290bbc4e009e0342ceb8963a3fdaad668d220b2db6def7af27bf625ad73df0a7f8cc3c76004 + serializedSignature: eb2d669e05ea0854623988b88c4a713e09d0b12b658b0db7d5a9920db6dfb50355fb54ac59820311ef206043443571ad36b6ddc111e1ca757d437a4d3d648306 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/dd425f9b633169946a84e0ce9b333aab.asset b/Assets/SerializedUdonPrograms/dd425f9b633169946a84e0ce9b333aab.asset new file mode 100644 index 0000000..696a638 --- /dev/null +++ b/Assets/SerializedUdonPrograms/dd425f9b633169946a84e0ce9b333aab.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: dd425f9b633169946a84e0ce9b333aab + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c5447d7f067535c8abb856229969004a72d10b4c50a810a500824404a203482d4dddddddddddddddd85ca537797efcedc99ecb977e7eceeddbb6733c3fbf5f93ddc5cd93367fe7366e68c67e532e7bfc860e79f056c2e2b6243d97c56ca2ad95ae7af22e7bac6f99f7ba79ecf6155ce75a5f36f89f36e30cb4ef04bfedf804867e7dfe9ce5d35ab717e59cb963bd772f17e1e2b73fe9eeefcb6ccb9e34f5738ff2f73be8a34707e349f4d62b3d92cd629d221818805e247d5f25984c72bd2c4f97722dbe4bc2d134af14072c5ab4ece3ff39c37d5e2dd1a4769f5dd42b658446b8df36eb9f39b2a56e1c85c262436797532137f30f7d2555ebbc96b17e7ff4de5df5bc9bf9bc8bfe1f70de5b57b92dff700bf6b0afee6842e8cf3fb9eee35b28b736dc458563f70cf7ffbb5fcae972b2f6b551c59bde5751b79ed2365f64f42ffc6f2da37417ce3c9e8076425c3ac89bc0e90d7fe52df012986bfadcb28722e90c759ee0af41900c26e0adef3673921e2aed271375f3aeee6a663d69932fd36cbef07caeb60791d24653bdfb4bb543e1b22afd909f41aeafe8e8d62519b75c2dc6a9dbccf95d73c791d26755b2875cd01f7617551699a2f65ee2ec3d856f35c7dcfdf2b1e05f25ae84bafe1f2bb41f27e4492fa24637f4aa745328cc1e0dee1d860691c592add17fbd27db1fced892ec70677fae203ec4f2b77a4943724ce37583cf6f0c5630f57978639deef12eaa0e44bbb8a2c917287827b2ef7d480716b207f77abbc1fcd12976d5d937837ce95d344b1dece0da7517bf779a371cc6bcb6313e8a9d276a92f6d974ab91552ae8afff6ee7d4471ee0be4f0dfe7fae496f8e49648b9aa8c50369e48cf1de475a2bc4e96d749ac2e1f8f6e2f9f4d90d72219e632e62d0396c9f7e3a3bfed7862406ef1d2688a2fadb365b8cb13c854bf9f2aaf4d93fc5e7d332d84ced3e5b55992613693d71d4384d9dcb58526dffb6c61bb04327772f936a9013a38729aee2bef67c8eb4c799d25f9aff0d9c18a24ec20912eb3a52e0ca481a34bb3d6f27e8ebceeecd5c57156bd3ae5a54fa748a994390cdcf36b997c9e0feeb9ae73dc709a3d2a65ce93d7629fcef3e97476fc66f1bb962d806d24f3bb78f625fdcbe679aeece62a3eca1752ba4d8feadd6412f8add22399fc20ebfac82a1fe3555207c576a1efbb0270cfaf2ba3e189bf9ddfb650b6d5133ce7bf2d04f7fcfd6e49eaba98c5da2c97b327087b4f19b62cff5ba8f4dc83c5e63ddd6ff9b51c3c2b97f2de95bf5bc262eb31f51d8fdb7070cfdf2f4a326e4b35fa39e1b61c1fe7b725cc5bfe4c8dda43e317e53359674456336fde5a2ddff78bfe2652219f2d77ef5b295d543eac005c2a5cfdb656f56999bc96337d3d0bec43e547b62a1a760ff5dd8a3861493dd89ebe78ef1295d3bcb3d45d95632a9e43906ff933156fe59357cb6b55f4db312a0f56caeb5e52b735cc53368b26bb7aceaf6be5fb11e09e7fb7262abbc393f299e2ad74d5a567ad2feeba32209e9dad77bfedbc48de6f70d9b6bad727b794c5b7db8dae9c712acc4dae9cd60d02cad9db95b39df281f675ef5b2b7df691d7fde4757fc9b19279ca7276807cbe0ed84d2578c6bf1de9e39b48b7781c0f72f5acf3ef0f96d743e4751290dd45eab15734adea7cbe03c13b7e5f04e20be3174f9743e5b56582f87405dff1eb6121e21fef5d23793d52c6ad8a79db3c55aeadb4ed1e47d6514c6ba7ed549bfc68f77d9b8df2fe1810271e467594759d2d1d2bdfd580784bbb8ad4826747c867eba3cf22aa4c38ce973ea37cef8f073274ef4f003ae8de9f289fcb76573bc9909de48bcb7e3e5d6b99a79c6127c7c63552eb0b7b4c80b43c45fe76832f2d55ba7c1147d6a9fab46cffbbbc3fcd9796a7fbd272a3262dcf90ef36817493fd0f91bd35e9bb0fe0a0c23913494bf5fe2c2057f7fe6ca083eefd39deb4eca0ea907391b484fac3b43c2f36aee21b18f6d824d2f202793d5f5ec747b9d6f9bd17caeb1029775c12722f92d73571e4f6f4c9dd2e09b997c8ebc571e45ecaf4faa6129eb275e503efcbbcb6ceef1dbbedf86a1c599731adad7752fd069733afad5fc1bcb6be1f8bb5f52be5bbfda3e92f58f06707b0585b3f10d889b2adabc037d056d5fbab815cddfb6b800ebaf7d7328fad7796fab1eb98ded6a1fed0d6af8f8d6be4005fd8aa1e8f979637f8382bbe07316f3be720377d3afbfd9f0d2c7edd78a32b7f3bd526bb49ca3b58cadf1edcf3eb21be700f71c3ed22fbbfba2a7fa0857c3ed87dde458d31dcccb4fe569762df77b730af3f759b8fffed3e5b513e008ccbade01d8cdbe1cceb93dc219f1f01d2ea70f04ce77325e2aada5577f9f81d2ae5ed00eef977f700fd555fdfddf27a68f45d9b69bef46d01f4b8576f2b4cd575aa4f36a88fa4e27c5f82380729938e64de32e948d70ebac5eb9f7d487e736c9c6f1e9157d5de7f58ca3f8a79db2f47c9f78fc9fba37def8f96ef2f8eb2ef980df450b2f96fc62711ffc7e5f50929ff18f9db09e0de895bf76be5774fba6116ecea5ebbdf2aafeafd533eb94f47f51cdf00d187ffbe06790775a57827fb4822c7326ff971ac1bef1e4a2f65d72b587c5b7b465e9f9557d57f731cf3f6312a3f773c48477fdf58a2b0e2c42b7202f3f64748bf983d27ef8f97ef65bf79e424dff727c9ef9f97f727fabe3fc5f7bdf45fd90bf2fe64eff7ec452087dfbf148d5b44f9f42f8367d2bf66af44f9f492fe6ce4546fd8ec55e66d2baaf6e069f2bb22f03bc840bd97657ee4745f9cce90f793c13dbf9ee993abfce9e77def95dcb37cfabe26af6fcaeb1bd1388e5f047e0378b2d7bd32e3daf44b52c6d9f23753c0bd63d3d9857164a8df9e23afe74a1953c13d9721fbffb20fc46545cef3f13b073ce7d7f3e5fb69e09ecb8ee7ffbd2cbfbdc017b70bdcdff66e9dc46f2f94d78b7c71bb48ca98e6c6adf7a238b2de92d7b77d69a86c96cbbb4493aecae77e5dde5f2c75980eeeb90e3fcbefde617adbbed0f7fb1dbdbfefc3e4f7aa5ff53d9f6e97326fbfda07f2fa216e93ec239fee9745bfa9d3ef7d9f7e97f9f4be5c86bb13d0433de7d72b98b7be53fefbc7f2fe4adf7be9bb6bc7ede3e59136f2fa094bb98c659b81ac64fa853a4a9daf92719801ee799a3de8eadf57f5c17c26af9fcbabec03885ce34dbb886c3bc4ad4b3e4da0a3d2ed6a297b26b85772603bef7fd2361e94f75f26194e3c3eaa8efd2a848cb6f2fa750819df0059c9a46b3b79fd364498df0159c984a9da1fdf8708f307202b99307f74d33cefd624befdcdfdb68fea83fcc4bd46543b760ab8776cbfbf6c230c50f37854dfd59f3e397ff8e4ddc0bc79e10696382ffc9c20be7fb9bfebabcae0af5d1d07a872e56f79fd87e1654fb261fd2af5be8e79fdcfeb6498d2b7c9192fbfff575eff93df31420ebffa74bc3efa7d24c2a2fd11f09b2c79bd51be9f05ee955e4dbd3a466ef2d9c44d6edc735e74f5de56d511985e3707d0eb569f5eaa2dfe2090d1c0c7f641797d8879c7b71f22600ce3d210894ba30471b905c8b8c56539b0bbabdf40356620e73c469a68e20aede8c134c4f11729eb36e6b5f1db5cdd86f4f57e57f7fded71d2557da3d2f54e1f8b3b35e9aad2f12e9fbddde5ea3168bc1bbfc1b26c8d3445f4ba23805ef7faf4ba17d88edfde9a79ed2aa2daf179e03e4d69a18d4b73242e2d12c4e57e20e37e97e5e063254bd5666be9b3371857686f69c85391ad7d71fd212aab7fb67b1da2fcf156f2da5a6373b723bfd7e55bf8bb364c9f6fdb26b0559816aaef4fd96a3eb8e779e66b579fa1b24f31a27c10552f281b7e90a53d3f8bb9ee90c1775159fdaef5bd5371bf3b001fccceee0132ee91bfed009e291f16f6074a5dc58c7af50ef4afd7bd5773159e40de77018c74efbbfae2a49ecbb9f791077c717a80c5e61de5e3283ff81bc0558d07f470effba834fbd4b5873cff6f13a5a19a33d44b5eb383db4ba437f3fa83c99641f1faadb6615adf2bef5df7f9b006beb07e4a10964a874798371f3de2ca1df6a1bcef23af8f6a6ca72f78a74bfb7e096ca33f621b72ce70e4719f6dc8bed3c863c0365a83dfaa6739de7750f788ea67d6e4cdc8b692b1f4c9447bcb6191aff2999a8fae18ebec70902fec2740d8b22f59b48fe5effa2c655efb4c906e11d5ff3e0497155173b17399b6ad11b78c4b6437f16c54ce1beca7c604be95cf9f040ce49ca388ea4b7cda97c64fcbeb33e037b2ef38f294fc76b694afcab5e7e4f339e09e5f9f0732541fe40bf2db9dc13dbf3e2b9fcf0561f1eb8bf2f93cf09d7aceaf2fc9f76a8c5d95a7f9bef76aee99b26dd8a7fbb22fcc579877ace515d70e7936d1327ccdc750f6a3465e0761bcee0beb0df99b05e09e5fdf94cf7701f7fcfa2a9025fb21236fc96fd5f85d67f09c5fdf96ef7703f74e3c460cf6c9f90891f391bc7e2cdfef0eeef9f56b9fae722c32f20dd055f659440a4098701c59bd2f649e71e4512adec37db6f62ef3f403d5a5f77b204cd9b71819099ec97ec6c82816ed3f94ede588eab37b077c3f1a3ce3d70f98771c52f64b463ef4d9fe87f23a361ace04358e2fe7dd44ded7a4a52f0d22aabff263965cda2cf4fd0ee3adde43def0f927bef8a8fe8ccdf2f92270cfaf9fcae78b7df6fd997cbe07b8e7d7cf99373fcb3ec4ba7cfd05f3e4e7ba70fe279f2f01e1aaefd57b7efd527eb7d4a7bf7a5ee28bef575e7b12f79cf308e6e9578cc8f92511d5cf7878347ddba8fa49c6bd6eccf6652943d66b85aaacd795e16a4ce65be6f507f83d2f7b26b93246cb39ab1139cf40cc1b8c575f8df7c9ffce97beaa7f4f33e73532415e27796578c614d47cd8efa3bfafeb9757655e51f4dd24552fef007ec7af6a3cae8879da9649d7815552ce0f3e7e3fb8fcc61c2ae3a67c0dc54fcdcdc4f8a9f91c3f82ef5458a0aeaef337808f29deab67fcfa8bd46d19b877741bd7c427f757f9dd721036bffe269f97827bfe3b55a7fd2edf0ff0c9fb13e8f4bb1be658d52733d917c61f2c3a8ee1f01aabeabaedc1fba6404ff54cc90063202a7ca6e68196c93478d01b66a234d0a6cb5fcc3b26fa97bcfeed4bffbf256399fee3543b50f95b9be2875d2757f5c9fcc3bce3cdb2af353215c8e3ef27048ccfbfbef8fceb0b772a4b38ce1a51735d6e0ace93c9766b64ba7be5dd4422bc15e09ebfff0fa4bf1cdbcb8a8067b29d9f95257fafd67a489bccda2afa6dd656e05b7e6dc03c7e57965c93b8c3833ed9ea77aa1f7215b8e7dfc931bcac46f27d39f3e4d12cb0163aab1178c6af4de46ff604f78e0edb3feadacf0e67226135651e1f30cb572e643593ef57837b1eb719deefb3545f5705b8578ca19c353e393ebdb2c03ca72cb54609f475e86c407155f597b807f5d7f64dbc714a242f6e5b458d312a3f4eb63bb25a324f3b3f4bcd591fcf62db4c3af9ca8f56e9b0b52f5d541f1cf0cd531e0ffc32b88c886c3b45e4fcb8c8ced1784d5675bbac9bb35a813494fd8159ad99c70fcd52f58e6adbabb6fe5aefef848f1b545739b7b8ae4c68cbbc6582ec17cb02e3cc11d97ecb02e38559724c3bab3dd39709a0ef20ab03f8965f3b326f99c0ef1d7b2f7ad5275bfdae13f39609aa7da0f26967a62f13c01e14599dc1337e557d687b827b4787896fbae956742d1256379fed75f385d99d79cb04b94740d152eff7593d98b74ce8011843396b7c727c7a65f5047154fd6c63e2db85e25a572674609e326162776f9c12c9d3da599194dd8b79c63fc4bd138f4992479d0f32317e184a5e44b531a43f9b952de557827b7eededb54b710fed731be6f1abc4bda3d7e43c9f9c3e3e397d7cecfacaf7eb7cbf53fd7813e5fbbd5cb69327f9e29320de5a16aa9f658e945d15f0f72a5de76361378c8871a269ac8c95b0752c5754e6dc3a92dd1a47fd32f1a638c2a7109e084f1c116c8de370ad73046876a6992ff6bda961050e7fddce345dc4f8910abd48fc5be27c512e845667c50471574c105cb90ae77f65605b9d6ae7f954b12b0fdf58a7dc793394cd70aefc574bd930b6d0f99f57ca0227d80a56ebdc153bffae13f2963a6ac77e99284a7c0b1eff6fe63a32dd1d82d6384f14d075ce7d85d0709ef877bdd0b44c683fdd795623f62b5acb56b289ce75a3082d36ee55cedfba308b2532bd8efa8d82b0e7ee76442a992639b1e1dae70afbfcff29521f2922dcc26a990f1be48a918fa36352e2ff33740b19ee904f973286096411cfb37c962b7cf6b9310483c73136867afb76798f608571e3a227c393bb9b88413485bf7beff52ff6e87d7b8f86dea815b05cd1bcea9e206af1c072793962043548141a366c90c715f5e38fe8f08ba6dfbc0ce277bf2b17df054f8046a2f2f3268018f62a764ab539a0f29c2f94af10aaf923532c54ae914a44efe78a6badf3ab1ae73adf791f93a6795c81c62259622bdd4451c312264b9730a2bd595c2ff902dbce2e7ed234a98b4534697285d7d4398e0163610917ab81f4b354161bf7ed0f9f9c73dc119b5f7fe9a7f915333efbe5dedb66af2d3ee9cbcd0df5e9d44ca4532aa16329b5952ea59a653a0b25ae33e2a553f3ba7845d389ffa767d802b1f5443a60041be80836cfb4adf37795424a89f36d7086bc636690bf18d203dc1a31c2c42a60081b6a10e67184ad345ab1864d7d5a718510c98d7489d3a27e2ae8d48c9bb7d83af91034448dbb4ddcfa35a86937d6d1135d784b49e9a976e33ca781b093f3aec4f9be4c38a1fcf91c476289133697374184106d6b7a7f119f2cefef1ae227aba5da4e50ed0b5ac16135c38837d110cfe3f6da5e6306a28cf36786367866688a65b30e61b359334c72c7b0929b63923b8595dc0293dc39ace496ba6c237aaa176524db44bb5bd45f139ddfae7222b35eb4a16b9ddfebba67e267972e496797ae22bb64335da751308db06cb2b52eedf8c36e3a25fd49d7154fba5698e0ee2105b7c6acad47586b6ba393cc4bee9ec9a8dc1817dc1653b9575895db6194b343526e8f09ee1d5270074cf036210577c404f70929b893ae1012e6bd86b4109aef3c73fb5c278bb7e5a2a36ea8688af24ebc62b1693aefc65b210a1677fb74ec57aaf09929f62daf15fac42fa6fa265d4cf513c514efc4a1d7192bc83aeb524994152519a92a5cafa4c0f96b9213c31ae7ffd1bf260949aadbb5c491b429c69f2948901afd99a6092d4aac7eccef4d85d1828fe5f03415ff35465acf3922c1d31b3096b05d74f99abb1c7c2c25ac23d755279cfb6003596c4bf83fe7bf18e12d70e1dd30cd0769343f69595620cdbb6375cae0b0754a0f4cf290b0927beaf2a8a81c0fca481e4d34e236551c4251c6663b2db93d6589a5c2ad146512d7480db9f0326d85d0823fe75a241ea98b9fc787eaf2b8a8e227339d0b585fb1e0f3f7b3444190270a82a1714a7e9d36c1cb7c7d31344c846e161bac18eb859534f99a92e64d5d3116a7a4c9c6b26c41d82cdb5b279967d9428dade6715be513d39b09772a269c617838dbe88a06e184ee5daf4583dbddc3e5ad1083e0aebc598c1f11b34198ea6ac780d74bc32916b5db4af1366c61c02726f5f0f723ca7a599f1d468aecb07d12d98132565806e8a3b324de68e233b462c66db83b3797cd71242f11d9702ff198537253b75c7c5acef6163e86eb59046992f5d569c3bb1bf8bcff84ad8576b8e07e98e0312105f7d709e6797c6cd83c3e40279997367c6e7f580f2b07537bbbb06a6f8b95a8db6b4ad4bf23c14ad48198f01d34c2efcd0a267c109615c627632371ac7a302678822e8f71532d12cdb16ce7ff95ce2f78877689c8fdd9a2328c9606d94e5e2f77feaa91bebbfabed2f9c29d3f1244cf2198514c0c6b144375929b3177fd843fdd7e0e986eb998f0491ae1d3b60a263c0f4bbbc9bab4e35529af37b85bb24ad66dded2305bcce4c91693b76a455779a948b96a91aed96c1f27c4fd9c6b8df375b6a8072ac4bb6c71625a95286b83a4e9304cff293afd9b01fde7000d8384988f955b5335e5562460b955a013ce1d9f690c717cf86ce0e08e4f21866d471db61ec21e360acfb5567c3f4f1840599daf5c9aa60a72b846af5cd179b796d5a743c65b0b7caa5bb5f83beaa2f0b0a3d32bc2385e7c96b2dff152ffe91d2f3e673f47acaccd84f6988335022b54676a0ad54890427524961766617961764a796194cee644bfeeba7ab5393c47c1694161ed8ecf44decadffa179dcf85495856ba741c24761aaa162762bae4aa7961ca473c9781a32f5df8224be8f3c4ce224f6452732c5f8cc66aedb99a5afbd686c16aed313a93157dd155f56ab29384844c98ed3c9dd98a4edb1149247e3af5ec256644578b42b55416aa6ed1dd4b6c955425aacd32e7392f78e1fb4162bb23ee2f4d11bcd708f29562b062a57041f5465e2c8c3cd3f1c40c7d2c5601ccd7540081bcea7158165aa0c9427f07cc42db616aef1256eded31b577d5a8bd6fa3606aef8009df4d237c46e360c2c7eb84f382996f3511a685380113ccf749887137792f896a272cf7b5149789b6826aff958a279b9c7f2b9c67cb85886c31bb5d4de309a2e5448ced220ddbd601d91661081687643b4927989be71ec9088e33023d592798fb5f4b18e27f2d65a9f85f5330ec251aec1706c43e15cbe6cbc266f36998e4e561254fc724978695bc2326b92cace49db0445ca149443e932d4822cec084afd4082f0e287c26963157e9caa67e8c776b459d54b7f914edd72871225c234a9e6ca7be77ebdc524fff08eff328978de620f97c16a667b94e4f77311d9facc87d8a12d187c6439ccd56070a7536867e4f0dfa6303a29f83095fad11fe4540e13b63bc2a74bc3a2748d75231c72dfa7498f33408c7b998366b74daf0db68ba0509671e8674ad06e9b9cd82212dc62251a98b04af2a5c7c631c64b344875f899c92b15e54e3c131cec73458a7d380976c33ea1c833929ba050b30a47b6990be1a10e92e58895c15b644de1553bb5a5768360fa6f66e98da3561d5de5d27999b522d43bc0e7e3e6070af632116ce062c9c8d2985b30823b5292ca9c55802efad49e0f12d8225f01e98f07d34c2f70d287c09267c5f8df047030a5f8a09df4f23bc7bcb60c24b30e1fb6b84970614be0c137e8046f89901852fc7841fa8117e6540e1a598911f14d6c8cb30b50fd6a8dd7eeb606aafc0d43e24acda2b359273c5b4bf4c2ecbf3cf7e0ab672e95096ec4cdcc3987e495ea2f0b12ea555ba74e135f4e13a950254e5e598351da1b1a6cd0133c19e98f02335c2170534d5d598f0a334c28f0c28bc02137eb44678eb56c184afc112f3989089b91613cc37958ff105070bebac14798cbbf365628dfb5af1d75ab1cf489918b82e11b61fed705203d77cd3846c69bd55d2a62b1c6b1fea3c0da27525a6f5713aadf9c82befc48dfacd6e53d26d86e8e61566b301d2eb1e1048af75980d1cafb1815b031ad85e58a44f08690355ba7256cc802e272d67b179a4d4ab234e4cba4c3e4994c97cca0b9dae58f95dad4b6eee5b9fcc10df9a9f0bd84c1cae1dc4b7aec16cf6548dcd16062cb76a31e1a76984ef1a50f87a4cf8e91ae1870614be41279cbb35fc64c2506ecd464ced33356a3f1b50ed4d98da6785557b6f4cedb3356ab76f1d4ced7db0b2ed1c5d81ce4d36994e916c91296b4505c5ab9839cc5d98efce952a719e968a5954abc4fd1c913579cfe2325101b87b8f2c119d1f2bc5586295f354cdbadac4dc159bd9c21d737762ca164541a99c8bb75a3ca9165f958170f4154eb9ac38611515b477735f2c89ced52451df8049b41f9644e785ac7ef6c7049faf4b7b3e9ba1d8b959e7499720e11d8015ac176005eb852c954e8b03b1785da48b174fa685753da5aefd2e0ee8161d84a5ffc5ba922560fa1f8c09bf4423bc419b60c20fc1d2e4522c4d2e4b294d0ed585c30bbdcb9331e238e37c876182af0829f870cc8aae0c99ed8ec0045f1552f0913ac13cedf9f996feb99d5c4090b99d476156788dc60a07b70d66854763c2afd5089f1150f83198f0eb34c2d705147e2c967faec7f2cf0d29e59fe330a3b95157a6f145404b9cfff1ceca0a515aab3ab6dcf182f89b75a2a9c8ebc32016763ca6c54d3a2ddad56991e7fccb6b5e3e36e5ce0e4a5d8713301d6ed6e9d056ea50e0fc7fb9680cf1df6c74fe4d5d8313310d6ed169d004a4055f43c43da320a19d8499efad1af31dd72e98f99eac13ce99dd8699efed2999ef2958d17487a668da2a60d1742a46e84e0da1df03123a0d137e974678e7f6c1849f8e09bf5b97b601859f81a5ed3d58dade9b52da9e896587fbe2154df9692e9acec2b4b83f7ed1342c8d45d3d9980e0fc42b9a0ad358349d8369f060a2a26917115eb0f50ee762e6fb90c67c9b740866bee761e6fb3066be8fa464bee763c81e65e1dcb10b303a8f69e89c1a90ce85189dc7313a4fa444e7222c124f6a22f175c0485c8ca17f2a24fa4b30ad9fd6683da96330ad2fd509e7e89fc1d03f9b12facbb0483ca789c4e68091b81c13febc4678834ec1845f81097f41233c27a0f02b31fc2f62f85f4a09ff559871f293b8d06aad20cdd5dad59816afe8b488566bf969acd6aec1747855a783aad686a7b15abb16d3e0359d064d59b45a9b2c06bc2a03f6545d8719f0eb1a03fe39a0015faf13cea9bd8119f09b2919f00d5824ded244a2a273b048dc88097f5b23fcd980c26fc2929b1fa018a65eb819d3fa5d8dd6e3ba04d3fa164cf87b1ae1a50185df8a21795f9703f81056fc7efad89edc707df66ebfa9d9bdf4b76109f48126816a0226d0ed98f00f35c2cf0c28fc0eacc8f8082b323e4ea9c8b8138bc4273a425d8345e22e4cf8668df05d030abf5b279c77037f9a4c9111a71bf81e8de05cb19158fd8cd1c7eebc94de31facf74bcb463f4fcb4d5f863f4e175c5c6e8efc56ce90b5d6e0b684bf7e984f3a15c7e2e6ca8a1dcfb31c95f8695fc00563f7c958cfdc729341fd4d9bfd8ee6e45bdd87f983dd1e25bfed7495bfe37c2f207c6b1fc703bb7e953e221cc78be0d6b3c0f63c6f35d48e37904cba6df6bb2e9f7dd8265d34731adf931bd312e11df866382680e95896529ba054dd9c25dca0e38f7ec314c8f1f757af03d5582c97f1c93ff53c8d4790213fcb34e716e3fb31d64aea93a2d06c77857098f6e65604fec49cc2e7ed1d84569f76076f11426fc575ddd1050f8d318b3df4226c63398d6bf6bb4beb34730ad9fc5b4fe034b69351fc2f5bbbdd3498344eb392ce43f75217397d69dfd935b7758416edde63db39d8c5bca82ce3a791ed3e02f9d069db41acc107fd5889d0edcd6496aebdb5ec074f95ba74bb7247589ddcd3e884e2fea74e286f78fc6f0deec19ccf05ec222fc6fc8ecf23226f8bf90825fc104f3ddb0c2087e15e3ccab849851ca809c5fc384676984dfdb2b98f0d731245b8544f2864e302f7d1a2423384ea3ed4d9d605eb8348c20ede5469154dacb6f61d81b6bb09fda3b18f6b7b14834c122d134a548bc8345a2992612af068cc4bb98f0e61ae17cbfd320c2dfc30cb34544539cf2c5aaee9efa6a3b9b52d1165005790edb5654786be5bfded512d9e2cead7e068b6d3af81b55e456b30ab191473583cbd5ddce2fbef07a1df3ae6d50e1f04e2fb78a5d51579c678bc2bc34e014c4f731162d752cf84e75704f3cd71b8e56b0d1a5e31b8486150c4eee5d25aaa0ec8412f29daf83ae30f9003398ad350633679b6006f32196a55a6159aa754a59ea232c126d3491a80918898fb1946eab4b69be3246df95bb507602f3153abc15e46ea5142f4d73e2bedd564c9b75bb7fa376edcd0195c2325457aff75d8db0ab1a4d2e5a2634ac041dc5aeec4ad98a0e625f9f60f4da85accc366382db8714fca94eb038382b12b2ddff1966a61d3566daa06f3033fd1ce3d14967a63c3eaac849bdb5f1051666675d988d44d6888e630409e97f18ba2e1a741501d17d89a578d7b029fe1526b95b58c95f6392bb8795fc0d26b94758c9dfea24f3ef7b86f43fbfc304f70a29f87b4c707648c13f60827b8714fc239651b6d16494a5fd8365949f30d3e813d6347ec624f70d2bf9178c74bf90a47fc504f70f29f8372c09076892f0d88049f83b263c4723bcf58060c2ffd009e7a5fab6bafa806f7de8dfdbbd5c76dc4777a0745da895a2db987f592a7eac1c1f7fb3205bba383562d083cbc816ce923b27658ca75110a4fef913c33650d7680b98267f61c20769844f0b98267f63c2076b84ef1b50f83f58820fd1253877f027383755c23b2e152d385d8207ebdcfe178be0504d043be7048be07f5804731379553c62eb65a4824588459030f37461f2db3575630441c28960e10cd385c31704b8e7ab2c7172ad378fa536eb2b0b0b3f5f173e2f30f92c33beb625b11efccbaac0feec563a8db82915e8f2cab6c14ca90116dd425d747b005352edff648ab661818bb686985ec3757a75046630ddd12a3a3c353d744e6e84693242a7492f8d4124a3516aa6d118338d913abf6a6030d36882457c149604faf1a2f08569532c9aa335d1fc7a50b06836c3a23946174dde4f5429fa2ad4a18c1562fc9ecf78e0365f21673904895e734c83b13a0dbaf96c5d177a78ab6f81e9344ea7535fc4ea93d72d35fb6f8919c6761ac378717030c3d81a13bebd4678f721c184b7c284efa011be28a0f0d63ae1bcaa1a9f4c23e0305c701bcc2a26e8aca295a7728e4e13889edf1124addb62614fd485dd595b31eb7448cdf2da61e957a449bfbca1c1d2af3d16d549987f171e6f072c4293755e46c00875d409e745e914accb7d6a4a5dee9d3070d330cf3fba40ba5cce06730fe54a7d9942674c87e93a1d3a013b75fda70ab68cf129ceabd92c391694ba2e5d305d76d4e9b28d4f97b51eb39ae1233453e49955c2af495dc3ae98863b25a235418c60f8b55ac0dca3225688ddd082d579dd305d66e874c906ba04d329b512a73b964167ea1afbb9c132680f4cf82c8df0cd0185f7c484cfd679a979c184f7c2126d8e2ed1068beffc0e08b6b7391fb69cafd949dbede5592e07d4f8c154eb020e4065635aefacd39a479f0fd0e95ca720a1f6c61262ae2621d6054c886d30e1f334c21f0d28bc0f5681146315c8fc942a90be58ba2c885781e4a5b502e987e9b08b4e87ad810e6ef5917ac8fdb19077c59a422ae4b9e2eb4ae179f88bbf201a0cc034d80d6b0af98be0789aa456f0e66086bdbbae2b2f3f98616f8b095fa8119e1350f8404cf8225d2323a0f04198f0c51ae1a706143e1813be8746f88701850fc18c6c89cec8bac8c27748a08a2388810dc522bb5413d9f605c1229b8b092fd108ff3d20c93c4cf8328df05501351f8625d372acc7b998b9275d5707c29faf0927b7a7734b7c121db61cc49d9e56a3d9dc7490e3606e14655a7a17bd9446829e985e1651e7b7653216d8a29802cc525624aab56ba4c51431776254ea756721a6c3ca44b57658af6e389609576932e189238265c211baccc13bb9237bd64be6d02d0c4e6f66284fa68f2c0f273652971c9cd89e21058fd209e62ed0ea64049f840b1e8d195085ae8a0868406374c2b9f9af4946eb381312c6ea04f335b96b9311fc392e781c86a35283e3cd51c1706c871513ebb0fe0eb74fa14c2ebc778bab6c61a9eae04b3ee2e6f6b26f0a54706c8fe9b2974e1751190490be0326bd4a279dbf709bd7b9299ca9341e4bb26a4d925d393a58924dc084d768843718134cf8448c526d32561c07491126787d48c193301c1b3438be08c87a32a6f5469dd1709bcc0da4fc144cfe269d7c3ea619bb47c64ce1bba85ea1e89b609d8d53314df6d669c225f00c1e34b1a661a1eca30ba51963da7db78384385de730643bb7117e9a5da68e8d2976eef8e118c18f8cd937c297d078c1885a48eb07ef27fce00e31318b173ee6c5eea84b2b7ebb7f844fcdf5aab4e3cc831a9fdbfdb9ac98a4698827cd4e98311ca033067eb0b3ea305921ba956a64a4824e1d9a819518076a4a8c69e383951833b1481da48b144f29ee2abac31aa54c2df92eab1b334b752ede2c4c8f83757ab442e1ae950e6e90b06763800fd100ce9e100cf01ccc9f3d34a43fbb3326f8b09082e76219e9704d466a9cf34493fd9b4cea1e2423cdd39571bd335dc6b98373552994714744f844632f87a14809772452c2c50b1d2be18a75dcf8a863644906b9b9dfb9b5f73c71d2366f38ce06937aaa53607a94a60f45fda7277bb420db2726e6a9ea87519f8fe5b36342e6b30598e063430ade4527984f73382e12f644514cf2f16125ef86493e21ace4dd759279817d622476db6c616e7ee171b6cd5e88555b27856c262cc2789c1c96c7624cf2296125ef81493e35ace42598e4d3c24a5e8a493e3dace4124cf21961252fc38ceecc9046b71c53f9acb02a97ea247317f9ec64546e870b2ec3543e27acca2b30cae786a4bc1253f9bcb02aafc2249f1f56723926f982b092f7c4245f1856f26acce62e0a69731598ca178755790d66739784b4b9b598e04b430aaec4045f1652f03a9d60be80e2f264047f830bde0bf307ae48833f508599c695614da35a27997f7f55323ce20c04d460a0af0e09ba16338d6b429ac67a4cf0b521056fc052efbab0a9b7114bbdeb43a6de262cf56e08997a7b63906f0c09791f4cf04d2105ef8ba5decd61536f3f2cf56e09997afb63a9776bc8d43b00837c5b48c80762826f0f29f8202cf5ee089b7a0763edec3b43b6b30fc154be2bacca87ea24f3b1eabb935139ce58f56158f2dd1332f90ec704df1b52f0115816b92f641639124bbdfbc3a6de51188b0742b2381a13fc6048c1c7602c1e0acbe2584cf2c361251f87c17824248ce331c18f86147c02d620792c6483e4444ce3c7436a7c12a6f11321353e19d3f8c9901a9f8269fc54488d4fc5043f1d52f069188a6742a2381dd3f8d9901a9f81b5a09e4b430bea4c0cc7f321719c85e17821248eb3b122eec5b045dc3918e897d200fa5c4ced97c3aa7d1ea6f62b6950fb7c4ced57c3aa7d0126f9b5b0922fc480bc9e062017616abf1156ed8b31c96f86957c0996c9df0a99c92fc504bf1d52f06598e077420abe1c13fc6e48c1576082df0b29f84a4cf0fb21055f85d9db0761eded6aac09f861c826e035188b8f42b2b81663f1715816d761923f092bf97aac9b6473c86e921b30ca9f86a47ca34e3057e4b364041f860bbe0983fc7958c8376390bf0809f9164ce5ff8555f9568cf2972129df86a9fc5558956fc7287f1d92f21d98e06f420abe1383fc6d48c8776190bf0b0bf96e8cc5f72159dc8309fe21a4e07b31c83f86847c1fa6f14f2135be1f4bbd9fc3a6de03188b5f42b278102bed7f0d59da3f8409fe2da4e08731c1bf8714fc08967a7f844dbd473183fb33a4c13d86a9fc5758951fc70ceeef9006f704967cff844cbe2731c8ff8684fc14d6a0fc2f0d0dcaa731ce2c2b1ce767348273f904cec84246397f758123ad487c3189ede4a838d4b9f2a5e725e02fb5d7019f19ea7eafbe8e3f6f35a263a29daf9a95c5e7abf6125f86d1079ba7faac8e6e5f4e771e295dffec5b77e62d97137c16f056597c7b6f8df96a893610443bc5c42e910e18c1e77486cf47dd1a2663f87146dd9ed709e66b181a2523b81f2ef8055d9af3ef23a5a4699e68d57a7a971437cee2c7247929e5f6e7b1cc618957d007d5259b1b9cef9f867a036c220c904209cc445fd45912cfe44db19ce3b7269e6910e12f61c29ba541f8cb5895d53c2b7c95f50ae674b4c80ae974bc8a55e12d93c9ba71aaf0d7b05a76eb90b5eceb3ac1bc966d958ce02c3c05dfd015360378365c54efd577b1f30b7e18fadac015786b5de1c2b374243bc9aa3a5ed86d84e4e8f234ac2469234a92748488951c6f62f6d636a4bdbda513cccda29d866c1e27ab811293d771337c1bcbebedc3e6f577b05ee20ec9208ad34bfc2e26b86348c1ef611e4ba7901ecbfb58b1d73964b1f701a67197901a7f8809ee1a52f047987d77a3b1ef8fb1f0bad384f70906ae4748709b75f5c5b6bc645d495a5f607ed602e98bf172bf20cd2e6a4f5d2dc20f378f0c62b877184e235e5b24f6517b899a854e0bacbef9147326b3d3e04c7e863993bdd3e04c7e8e69be4d1a34ff0213de270dc2ff8709ef9b06e15fea84f3ecdc4f572e0d649a46943fb45e78685f615566ff9055e6d7981f3420a41ff40d5665e684ac32bfc51c9e6dc33a3cdf6145ffc09045fff7588feaa06404c7e951fd016331382c8b1f3195878454f9279d603e8179683282e34c60fe19139c1b52f02f18e4bcb0907fc5200f0b09f937ac42c84f4385f03bc6a3202c8f3f301e852179fc89e5ece12173f65f3ac17c16e5886404c79945f93706796458c8ff6090478584fc2fc662744816ffe93c67eec24556b3faf09c954cf7ac601eda42e90da7cf831e93f440ca58e1d1e632dca34d8fbe9867cb87c162929da7ceb864927d2ceef3447482f9ed7659b11befa8ff62026888db55962e005e4a6e9f8652722b4cf80e6910de40279c970ee3c3960e0d7592f9f71342ba6d8d7482b39ddb89c908e64b0e11c18d31c145210537c1204f0a0bb9a94e32673739a4d3dd0c53794a58959b6399716a9a32630b5d007c03d669c93089b3016b4b9d605e8d4d0f59df6d8da5e28e2153b1954e306feced14b2b1d75a2798bb413342ba416db03a6066c83aa02d26785648c1ed307b9e9d267b6e8f95ff73d250fe77c084ef9c06e11db142646ed842a41356b9cc0b59b974c6ea80e2907540174cf0fc9082bb6290178485dc0d2b967609592c75c754de35acca3db0ccb85b9a32634fac72d93d64e5d20b63b2302c936c8de45c7ee054643eab9fdd0d55a321d81ca645493764168b864c9798d825a303d638e98d15947ba4a1a0dc064bfc256113bf0fa6f6d234a8dd17135e9206e1fd306f6b599666e3da494c8df0bbe3f513997b70c62cc68f55da201278b54cfaa1628b5b7e0eec6ce74df408267d1b5677b203ff1a9a1637fc4aa68e5d0be2faf5c762b95c17cbc3eb6239df694df34ce766d035e2efe922ebf2d8f0337fdc0c3abdeecbe8f19beedc29be5ff27af1f550199f32b1f5709113148f1797eba5e73d9b34981e98a462c6376b5527a142a630b3fa792f70e404dded790046ba14b32718a21ba702e7372e2d7ed6f212c736aa449abbb12d96db37fbb58dfe167f9e2e7bcac16259a68be5f6be5842e66e3ca7c8c3714a3456ef4d21f8265e5e81bf0a12b36db198add0c56c87a4d2cf3dc3a29ca90d6cc3a75cf44d90b80dc4e2b65217b711beb8cd14a9b34ac68cdf6dacb7980cc262b24a179363335c9e457fc34f4eab70a46e627ca3f529f260251e42f2560ed9e1b1e07549ad703360a9c71dacf4956d8331eae53aea1392ca1b33048d6a234ab52158fcf6d4c56f06a155f1a77b896078ac5c775877ee5e3a52752816ebd5ba586f1737d6b8a67359f4c41e378eaa36e64f974b42b1f922f5d4ccc5e255a18bd76e813dbb79e28dd7b7d349709fcda92b07aa9cfa803775c27882a9a4731ec6638d8ec74e19a9b3a96bf361589cd7627e4a301b5036cc8f8b71cf2f87e91cd42282c42c1f8b59a52e66639098cd17f9b342fa266e535bb55a16c85c5c1a931a346d94022c46eb74319a4258faaa54758f2359c6dc6352d217d3422ca67be9623a8e6123a5ba92c21b8312f1cc8d1d67324da47295680d2d776adc4d698cd5702c5655c9b409bce1420f61be48057eba1bcf872be3d47e5e19e98bd9082c66d5ba9815252c39936b15e06568bc366baa25e5482c8e35ba384e456d927bbccb9c8f545cdd83b4263b3a5589f2337e59a29799ee9a701416d75a5d5ccb885b0f354e4d502528b9ad8305c2dacbeb4a9ef4b48753e1341ae3b45ec7697ebdb5b2e2130acf610cc661838ec3c48079c3841c31168be1465d0ca7078ce12ec2a2d72229521ff11d87c577932ebe73092dbb3a055f231d04b6c308ec9d2e1fc42ddb26000f843e56db63b1da07eba1081aab29e28bd814f29739c9cb0d12bf1db0f8edab8bdfd8109e630df31f5c8ec72af690f320711a8fc569bf6069e62f7b2688fe049ed312b552686b8f0958fcf64f664400f31e278bfea112d9768bf5e353f31e53f7912762b13c004bc5202d6337e653a5b7147dcbc775e2fbc0e9f28f8bb0f81da88b5f5f16bfef93af00a6d07212a6e541f17b3083a4c2bc94528132874dc6627db02ed643d012a4b86e42022c0957d4f5daf35abf56eb71a6368a3105d3fb109ddea313960cd3c50828ef63ad704af62a276e6bc4b189894a8774950153b1f81c8af9c9f1f3086ff3cf11be63b5c67b4866c484fb5c2bd218c369580c0f4ba627403f02325dd85efcd23c93a320d3b1381e8ef5c325535f2513cb4cd7593b62313d4217d36949a5a67f3ccbcd872adef599ae3b61b13d5217db5d13a62b6dff3ff5c8c00c8cc651c1bcce580f5ad9fb1a7978ed72f12bdc7ba6e94d9f89c5efe860edbbd8b538deda7125325a45d3fe9985c5ea185dac766774ed76e58ba6de7387db781022b33122c7ea880cf6797c05757bd2f837aef3a672ba3d9f3998d6c761a357a95967e65ab13b63313a5e17a34234466ac7b1586dbc31ab4a98d7e6a6604d73b1589ca08bc5c084b1f0eabc4ae4a295ce55578e4737fd0ba2f13c4ce313751a17f86ab52261396ebeaef1b4cda2dac4abb3d31387622c0e2761bdaf58a8b0069a29675b94d7d543f8c89937bef89bf4c4773e16df9375f15d9d725e715baa5ccbbd9dbf761112568931842a917f783a4e70fee523a195a295913837c58635816d146566f2dc5269e32ec0989d924cff4ab2e5bc921ddfe6e34b8eee6e16247ebb60f13b5517bffc84f18b6ae18da1db222c93e9bf5c933aa9d6c4bb6231380d9b5f132c0661fd4a8a54db0d8bf3e9c9f437c56a3149c44b9552eea8bf1b7bb7a4e6df948bdcb793237053a078a5cfb7de1d8bf519ba58cf09116b5dbe0c125f8a345f88c5fe4c5dec178488bd3b4322589c53b58654cae4451889b382b5b112f97a15607659a5f355b9a71ed7cbf4ee0a1624568bb1589dad8b15be7bae57036f8c62678ea7ea4bec81697b8e4edbe12c993e9ce88ca39942ab5a163b2f35dd33da9760f138377dd4f74e1bf5a598b6e761334392d756dda7eaa3c6f3c2d29d574a300ee7633d88c14a00353b207c09908ef26e1916db0b82a53ade67a6ef234ec6bfc964dfda728cc385c15ac9f8e8fb5ad94f96aedece524ce38b741af78f6961fafb7ea3f39ecbc453deae4a4f395886697ab14ed39129d7a9eb44091f9d3f46d127b4028bcb25588b20582f97db0719fb36b6b62a66eed6b2784c63a54c10ad643ec61b24ce2bb1385faa8b733f9fa545c3a4b6b355989e9761ed4dac8de8d779aad439597f21d5f666391683cb75315854e787d74f5f38b4c064fbc4d56f8250d913a3724532b3d055884166da446386e5b8f4d43aabb1985d99ccb86cd03a37fcc85cea31adc0627a55327913ebd3756d7c042b4c103f5dbee5bf0a128335580caec67aebf46106b143183fec79ba52682d16bf6bb01e9060b5b49a63945a1d4d3dcbb4128bfdb558af577c6f6a9eecd18bb5be22318ba02a4e9919fded6c31d7c76d15c45f5f9c5acdbe0e8bf575a9ccee716d7a9ef3f132e68ed245fb80c2cf9248cd27d80b8be1f5c9943b7ac2a9f904a9faf955580c6ed0c560c73a9f60bab0991a91436a44ad5d53570beadf051be34fc78c80c6ceff2211be5dcd64a1893b3bac52c8e13e6f2e9fd817c9ab8bd3d03aff65a8c7d7893ee7c4d738e1f2d2a1b8ce53899ec98249b831cb3dfa4bfc3720c213429ddd1059c1fcdb011509f915326e2a7f0e1536e1ae1ce6fd9f43eb4664fce7e660b1d0f96c4381d7066397384e8b918d8a2291c632464a96437a2827bda5c5f4269eaa7d64aa66e5f20d6ac5b90ba95853622d6ee6a16da5b721dd9178d1f240a7bb2b6096cc4b11be5313cf727932fb96cb8c5b21874213860773a32ebc214280f271138a9b0f8a3a9db82ec2c8dceefe2ae64ea0abe9cf58e38659793c1d6ea184d54ec0e2693247048eef616003b6771b44b1dd4a898def7b364934f9d639e0dce579ca25c100565b81901f7ca310de4689b0b573a37a38a6313ef77e9ea867ab84c05287c56a2b80ddd8240aec764a60ed41b956bd05806bdd3c0aee0e4a706d35e0b8403e0382b7b26ac5d3522ba02d6551687752d7a27002a4eb742a17a7ca0a58aff68bc2ba8b3a6b7acbb22962ae86bb9e55ad7772b3a80de0725a44c1dd4d09ae23e32d9deaa4eb501be09d0a6ad07b28e13507e5da6c4f4fb50d98ba778f62ba971253538029ba15870d888eec1845741f25a2460251b555655483965138f753c2e9ecdcccae6b20a9a1537701d05c51e8f329b56b45313f4776b7da0090f588027c80126013e66d90f39e6a1b00bdd8260ae8414a406d3cbe5695ecb170a7bcd85562b5ef1345f61075a13e5b8ce3467707b6c3837f12d47b0f672adba94d686c00746ebb28a04728017505d96e32db28625d5be76af2b5aba5c2119d2b2cac54d85b8513a00d10f97f0ae2a3d4195141740f202bb3a4fe5b0a5a878f5122e2c75a42fbe2bdaccbc57a30755a5ba9e54d9ef6a0dff5714a942d65b1afb2e426e987cd175d3836a0da0c8aff2732d527c19bd870f6926a66dbe4efffde380aee49ea3e09080e6ee23541f452f021d8e8766536c0db17f4b53e4509af05703aa27b52b93be1d900ea56e0f33f4d09aa1953036f9398bbd139f7f2ed702ea681d1c967a8c788668a326ab56f1f6abe6eaa4a84640330be6244017b961258075fd9b580f12d8f3768c7c1ed28b9beee1b45f71c75c9c5b3a2ad5306aecd8b827a3eb3831dde89d1a5963916156000f705fa71c868916fb3c7ff64c328b417a9c721b9c71f6d5b16c9cda5565a5386cd2988c27a893a6b4e16534d6a45e0d19319a22775543bf8f8ae183680db0cacece54c8d76db3a35804ffe54b05ea19f88e2ce19ab1462eceebd1807acec55ea91a4b90eb42296fc214736003c5234cd1b37f409f7afc2497d8e6c30eaf86cde56cced895b279ed64867c533bb97e722e3347f0dcececd49b9e33a2761399793f464a99cc0733772529c3599935433302764376b4e80a9b039818ac09ca41dbf9c4015784e4ae5494ea08ec19c40de7e4e52933a7302cd64cc09dc1fa7d3199f8e951333f921276e27568e76383b473bda9683cc3dc9893375270719dacc49d0f79d93d23c859c24c79e7302f62ce420e342de124837af3007ed19cb4938b33f276e233e27615b22bac846bf38268f2fb279fdfff8fa973cbefee50d0ea19fa4e07a4e6f527b4e3ce5dde54ebc368bbfcc7198e3bff874e81ea383f72076e521e9b469eaf1a1b64e268229f5448099836f998433df4a9ce7029c6f9b84b3c04a9cb7019cef9884b3d04a9cbf039cef520fa22c9165a217abeb23f0cfc8f0e551e11b09f0bd97096b5c89da23547f091bcd46d0e16c4185731b80f37d93708eb212675380f30393700eb712e7cd2c8af3439370165a89f35c80f32393708eb412e7ff00ce8f4dc239c24a9ccf009c9f98847398953817009c9b4dc2596025ce7d01ce4f4dc2996f25ce7280f333ea9951ee06bb6e179c7f3337577577a3b06174201b52819c0b3ccecf4d01996721c81d01c82fa89705a8deec64c763f8f755e25bfb3a3ca681acfe3f4ab0fd25d80ae7235e66f27ef60d60dfac607b7711da3059e7c83bc086bfa444dd8bc11199e4c7826db6e3fec08ebfa2843bd867c795c02e75fb3e26bf4324a14d9f4485bd359843fd35f5fa8f78ddcf501ca9afd0980ae532503c7c4389b295443922f31dcf5da9e0dd0db2ffb79980372af3f0c82cef6900ef3b4a789d587c2fd59b8949bbf1c860464036fede2498232d84990560fe6012cc420b61fe07b2f98f26c11c6e214c062cf3279360e65b08f30f60993f9b0493700a0319cc7f00cc5f4c8249d8be2183f93980f9ab49306d6ce17c0160fe6612cc5116c26c002aa0df4d8239da42980d01cc3feab71bc315e59e0e48586236c82242f92240f92725ca81ccdb11070f24ac60fca00bdecfe93d7e75a2587750269fc1ef26385a95d3226f4765bd7f01e47fd16f8fb14a2c7470175eac649a6d872de82e6e01aaa2bfeb33c3676c58e3302a943702ebfb871265775f867787dfdc41bae94ef6deb2868edb819ef57f29b10e8829474b84b029b23fb3cc2935cb44a65f2fc6896a59bcc39f486d98acfe3f19d8f07f99280e9273a66c44d90794ac6c2b42943d3525eb963dd87628b0d208255a7f49cb4fa38b1ed215af02232c69c92ab06ea0a4cda2c4da5104cd574157cab59f7ce2031f8f5f2bd783ab15b1ee3a63fbdcaa0620f36f4589522d881fe6fc7f8d0cbc44f802fca9cd83714700840d328170e41687f00180b02125c2762c3ad1465d270815dc935e6d9e50731f80d8881262f055c484c3c26438f705757763937092ce5026c37911c0d9c4249ca4f3e7c9703e027036350927e91c10329c4d8047d92cd36d20d8df59e0fccbe77796d45df93e23ab85c7b98472a8b80d55f7f247c0529b53a26d23d0f29d3862372541cf74b260a65c0750afb7a004a8c68d92ebf91c6665dfe7d620a3b7a46e3ac683e95d114799b1a950f60528b7a644b98d409978b7a4254e39c9914f145bf9ac96014c11bfa96031bb4f5a502db50559bf1525e2e8e616793eabb5798ef11b005f6b4a7c6a3197dae94c679f36372d7f0220dbd467a9e9ed6db771e2c23ec01d6a9b0994705ddc0ca70e9f2a77b65be1fc686326ac920ce57ec02adbd13b4670fcbcdeaa1ab2b2b22580d93e132da01ab1ff66755dfb476da9a7aeba314c5247890ced85006d074ab46ac5261cabd40fb0cd65d8fab7094ea1e0260ba17b5f1621429d0f4ad78e94a8d5deab5845a562ba847246f27e5418bb00d7be53269a9cc9ef0a4606936c6f868920fb77360926e1245a32983b00985d4c8249b824860ce66800b3ab493009176b91c1cc0530bb99049370192119cced01ccee26c1b47173a07100660f936012ce3d2283b92d80d9d3249884ee3a19cc5e00662f9360123aed6430870298d926c1246cb393c11c0860f6a68499cde20f08275e004358bf932d80390bb4d3b7c984ad62d3b7fdd317084b51b2def921c056fb980493b07e27833902c0ec9b892137de3fbf1e4cd5cec84c4e327c3d00be7e94f8ba007cb10b60b8b0e8567f364f8d7d0900ed9f89d9c5796c4b9b5d7c384038201308476c7108c703843966bb4384bd9a64eed0bfc01ddab67ea61f2633fc46e869d2ed3307d00ecccc149ad1999f4243b605ea1c806f50a6566644a72bc01177f2890a64367818283d07d3676ffcfcc17a9bb6405631b501688764623a0dd6f681e2484783c8504e00288752a2ec06b2ba6ea69cab3acff46bc5539b67ce7d0aa0e666aa3d94e8e8589b816e0780e66562e14bf253136cec34ee01eaf76126e11c6525ce7f8175e69b8473b89538af03380b4cc249bad12419ce5301ce4293708eb412e70700e77093708eb012e72300e7089370929e824d867336c039d2249ca4c73693e15c0f708e320927e9a1e2643897019ca3a9db45bcc53ec7f9970bc10fd3992b54ab759e13b68b76a6023a0a001d4309549da7510fa76093edd35505e08dcd44d707ccdafa151adec5d684d30ebfa182fa33685a8e33112a61271d19d49f00d4ed4c844a38759b0cea1100eaf6264225ace1c9a0ee0fa0ee602254c2698964503701a8e34d844a38e58b0c6a0d803ac144a8849312c9a0ae0350279abba312a1bd92eda8f416405b4489b680c58e797a678b1439ffae616bc4dfd161bb156278992b3b8bf151a60d2288d56017a66216dd099cd4be4752d937df944625c224ca4418c6fc9ba8fb976cf36912ea1c05dec875c753ddf361f5c5cb0259b4f0df17d026402faa5cb019e482c99409d095c58eacc69b6261ef861a9f009b9e62ce362f361e2a590bac736a66a69dd5c3e9b09f53e11b0bf04da3c437d457bafa0f39ffbf7740f42700fdf44ccc5889566c65425835c377ca23044ab64fde5300e88ee6eeac63e3e4de374185b5537dae7cf25658a41b5e935559070298334c8269e339c8c70198334d8269e339c8fb0098b34c8269e334dffd01ccd926c1b4f11ce4b500e61c9360da780e722580b9b349306d3cd5ab18c09c6b124c1bcf419e0f60ce3309a68de7201f0f60169b04d3c6ed844f0030e79bbd30d7c6837a4b41db7d0125de9612afbb33b3db1de2ca2ea75c974776182a0376b94b7d76257b4752099b92644756bc066c70574a94bd98b743ae4a629b26ac70255ba529415de1f61e7efe2c80bb5b26e0c6969fc975cf11ba4d64dd73df00b8bb9b0c97d072c9e03e0ae02e3477cf081b376cdf0fa05d94a945bb33c570dd6adf948949cecfaa4488362fdacd06dec0e24cdb6af2c37584dd7964c375df015bddc3dc6280b06d45560cdc07d02ea144bb358be7fc57d3a16b46852e0b64f8a5f5b92d87fd7be47605284b323193a4906d491b12ee02f02d33a3ea71274dae1316eb4e8724b54cb2493a2dc02921cb33b124126be3c7ee3b6ae3cea3e5a0ba29350967be95388f0538cb4cc2596025ce9b00ce1526e12cb412e70f00e74a93700eb712672f5015ada2c4d987c54e069fcc3632de535acbd4bcfbd9cecff921d45562517909e3db6e71f41969c5934d64ec025ca97293b640186de581413d4111b0a74938475989732b8073b54938875b89f30690d92b4cc2596825ced300ce3526e11c6925ce8f00ceb526e11c6125ce2701ce4a937092ce5726c33907e05c6712ce022b716e0438f7320967be953897039c55991add9c27da3cb58ee409cecf4bd902b90157a958935f66f5e86629005a6dceb2591ba780af014e7c4d26e686aad397dc2de196898e10f591ed87b6ac0276599b892de1f27cd66933bc22006fbdb9ab36092b20b271f52b01da0de64c001f61e5aacd7ea0c4dc68124c1b576df60730379904d3c6559bd900e6de26c1b471d5665f00731f9360dab86ab31b80b9af49306d74d97b0198fb9904d3c6559b5d00ccfd4d8269e3aacdae00e60126c1b471d5e60000f3409360dab86a7308807950fdf618b9a2dc055c847539d902ae4f01ca8333d1c93132f39d1c643338ef615178876466973a7e3272a5981c5391a90e36b28e8c5f01be43cd59e44a988dc916b9de09b2f16199c8c6f570482f5975f23ab0c3c3cdb143c29a99cc0ebf06767804bd9bb38ac59ed039cf61b29c2d970aad1027d2f0a983f60d8c35077679a4b96bd36c5c5abd11d8e951f5b9c0caeb8edbd81b9407acf468335608e916a712a2255b9cfa1eb0d26332359c1bdda3bb5228ccf7e5ae102d1cbb4f91ff1ed8e9b1262d1920dd3989ac723a12d8e67126e1ccb712e7b500e7f126e12cb012e7db00e70926e12cb4126757b03ee8444a9cdd93aee3b7843338be04567a5226eaf7e466bee55bd9c3fe108079b249306dec617f18c03cc5249836ce31ba01c03cd5249836ce317a10c03ccd249836ce31ba12c03cdd249836ce31ba06c03cc3249836f62a5d0e609e69124c1be7185d01609e65124c1be7185d0a609e6d124c1be7185d06609e430953b7c5a9be613955fe246383c2795470bf0270cf35192ea1e592c17d17c03dcf64b884652c19dcab01dcf34deabe235d3144d67d5705705e60124ed2561319cef301ce0b4dc249ba3e9d0ce75d00e74526e124dd2a850ce7df00e7c59438db4a9cc3c5a44437f012317c6cfbcadf8b5914e12599d80e2d71ddce47e3bd9b9e4e605502f0265a076a2cd5e0475b30a674a90d90091d2932c80c40be8c12720fe63dfca44c6eea379ba9adfcb6ac53892f04a5ece59460b37d602bc494c71a21263ae9315ecf808d9d2cc703bc57d4e7fcbc8cb5a5c8a6e4b60628afa444d95ba09cee7c345700e3dbefaf973f8f5aeb12b65a00e7079e2d77fe76df4f71ae7c4903e1595d640e5753e02d5c95995520c37d159acdab40c600fbbcda9ced7f6c2c35170294d750a26c9f00a58a29a967ca8f1922c1d818384dd766a26e8f9d779feca19084e3a46487429e0aacf4ba4c4c1887b39a79f5b44054361b84eae5828cbb99daded295b2772bb5af415574bdb9bb2ed9789ad18700ed0d99285b318f345ab61256516465eb7490f96fa4c4389079db4d6b45962f166ad4080fb55a2c0dab0964bb369e74f83e407e1325727e08ef1cd987aa36039c2e80f24accbed2b435c8f2375382533b7d26eea1725b56c44dd12654bd512f004bbcc59c7d1b087d54b27d1b5e02286fcd447594575725954aa7a9520c92d87dbcd9fd208bdf463d9987039b24022e6355c0eb2ca9c309ab253298c55430c70098b79bb38e9e307b9375dadd0ab2f71d99409917a76bd9eec1bc978155de9989f1d0c22d6e3c740d407857264691b8354e16ad9f5aa1c40ce727cb457939db71e2d78af2b35a343dd759dd5e1f0bc0de9d89aee3fcfad8649a6c9ad8cea094bcc79c5d1c6c5c56330b58e2bd99d840a830f37648968d370178f765221bf3dd97327ec6305907c50f00dffd99980096fcc17884be23d901251d40a9f8804938475989f32f609d0f9a8493f4a851329c97039c0f998493f4205c329cc7009c0f9b8473a49538df01381f310927e916d26438ef02381f350927e911f764387702381f330927e999ec64386b00cec74dc249ba96930ce75280f3894cb4820aeaa31544d6889c0ef03d69d2329861941d1a64380f02ada0a74cc249baed0a19ce8b01cea74dc2596025cec700ce674cc2596825ce6660c6e6b394389b0801654eb5e30ee172c964b8c816af340255cd73999826884d702d70fee5a3df2575d76247d86a5626b3361d5aaa79191f838cfd3c25da012c7648c23b8fad88f1d56c6bc4df7c30ad56889c2c6c9747ab5850cbc07cf71954763c1cd8f10b99597991bf050d9f8d00b6fa627dced7c858cb9cac44ed032aa0973231c9800fe34e657cd49b8f8daf14d30c32b23f37591dbe0164e697cd590764e356a87b838cfd0a25ca0e8ccff8e5d549a9fcd13c86cd6dabb6305b370136f9aaa9eb29487b8bc8067dfb001b7dcd54b4a4951119daf380d5be9e891dea929b165360e5e6bd2f00986f9804d3c65946ef01986f9a04d3c6cd7b9f0330df3209a68d9bf73e0f60be6d124c1b37ef7d02c07cc72498366edefb2c80f9ae49306ddc21e15100f33d9360dab879ef6300e6fb26c1b4b1cdfe3e80f98149306d3cbee46300f34333364221acc7c916eb7706bd9a1f6562017490e95b84d50fd9149949a0d3e363d380da38e7680600fa89694009b33c19d0d900e866b3f73e22ec4d22dbfbe87480f753736af9515636336701989f9904d3c696d14e00e6e726c1b4b1653413c0fc827a002ef1c8fa08b1da921064432a903d8007fa3f534012666f3290cd01c82feb67ca5732036e84fdf064c36d3783ccfe1525dade1ab4ee6c0f0e6f2ddb514cf15a17d72fb5b1d5c4792ac05f9bb3ccdfc631a34280f21b9396bc8ca6ec6722b3cc8120eb7f6b12ce5156e26c05707e6712cee156e2bc1d64f6ef4dc2596825ce4b00ce1f4cc239d24a9cbf039c3f9a84738495385f03387f320927e976cf6438f700387f360927e9801c19cea300ce5f4cc2996f25ce0a80f3574a9cdbb0a03b1317b32ab194b09aad1062d7d0363afb51217e1ef8a2bf5122e6376ad76cfb3a3f5a014bfcdda48c3ddacae1b7eec0eafe300927e9081119cebf8175fe6912cee156e2bc02e0fccb249c8556e23c09e0fcdb249c23adc4f92ec0f98f4938475889f35e80f35f9370da39b16606c0f99f493849971890e1ac053859038370e65b89b304e08c50e26c2170d630f718a6c94251fe737e4f862d870a5b67802d8b125b77e63dcd8a73a8657c7e9cffec5fff863e846d6fb2ad00968356d0569458e17903fc6496e92cf6444057fd3231c25e22e0dbbbc7c257c05e1b508255d36994bd966ba7d3904f4920db18e06560a10d2941f6f7815cc66227cd6cd9c7d7350433971a51a2ce8b29633190d5682f6811e37b2ead13bf7377599ae07c5f25e62e93cec01b4bb5a1551b80bf31257eb5b3cd28b6a51d9ff33028759b50225473ef9405570babe53ec21409af6c0b2b87cf01e570534ab4c1360db271057c2540d92c13569ada862c84ab3ec8aab03b4001d09c12addaa76e24db927646fe06e06b51bf99dc15e51e1b4a38ff93ecd8d02f40266f4989521df334cc07d4e6738a26013bdc9a125eb6c60e83ad8d23dce8826c6ddc49c0365bd56736f71e1f4a98cdc98e0f7d00a06c9dc93613ff21175622799408c1a53ea4fab6d35429d4fb2da1574ab6b16a2bd0666a9389ce69787aabce6db2bbfdf40a2877db66c2338d2d7793f14d09cb5cb22aed7a5050b4a344dbd757505430b86bed965e201c0c30b7cfb405ebe1eae6e91156752751a1fd10a0ed9089b6d530d14395619f96ac6c2d02f83a66c2e94a6e6d9d8d9b0ecd05d554274a94fd7c65a91a4d5567286ce923024f029bed9c89769802cde195fa36bcdef2465f770578bb64c27bc5da61b10751114ead20c3b927c0d9d5249ca43355c8709e0d7076330927e93c2a329cb7009cdd4dc2493aa5970ce72f00670f9370924e3827c3b90de848e999099cc9af2e21dc7e9d6c965f0eb0ce5e26e11c6525ce960067b64938875b89f31616c5d9db249ca4672292e1bc00e0dcc6249c23adc4f923c0d9c7249c23acc4f922c0d9d7249ca4a71d93e1dc15e0ec67124ed2736ac8701e0470f6370927e9e1d16438f704380764a68fbe1ee69d90b582be04f87228f1a9493b3ce015b26bd995bd567e625faf7c04c0db96125e723b88aa4a860c24d954dbbd406b67a029206d9cb3bc3b0039c8149094676d53813c0f801c6c0a48c26e363290670090434c014938879e0ce46f00e450534012ceea2003f91900996b0a4842d79b0ce456a0073dcf1490846b38c840660190c34c0149384d860c64070032df14908427c691816c0f401650820cb6f6cdc693645680eaa690126527166416dc702b4fcc6e0b600e3709a68d2766b70730479804d3c6d30f5a0098234d8269e37ae13600e6289360da5801350330479b04d3c613b39b0398634c8269e3b9708d00ccb126c1b4f15cb82600e6389360da7862762700733b9360dab878a53380b97dfd36265d51ee1e0b84d50fd91e0b9f03943b50a2e4c3b593c5063f5cc5e9d236cb9d1ff37540fc6764f0c8d6f6f04174056f7c7ddaa177d129a11d926d02702fb0c3099428d52e8ad10d7d925f724ae812912d39ad06363a91126c1fe65f34ed2ef18feee6c505f2892df1ab241bfdce1381f5165142f66fadea02e52bd379993a49db696cef39b011d0693c2913e56b724e938dcefc60500c4ca644196e513f215ab212f63990f9a76432f3973b4a2c001ba7e11e0161e627f3089a82cc3f95da335d22da425bce4e093781ec3e8d125e23c60f8472e76096d4bdb6c989ef08504dcf44cb3cb991c9615676739c09cac21d4d82696337c72500e64e26c1b471a0f73800738649306d1ce83d0dc09c69124c1b077a8f0230679904d3c681dea301ccd926c1b471a0f73000738e49306d1ce83d1cc0dcd924983676b81d0060ce3509a68d7d43070298f33201334ffceb5ea7b3d8538c6c3eb5e8671685594c0933f8866484f53919ce0dc036e79b8433df4a9c17009c0b4cc2596025cefb01ce5d4cc2596825ce06a0cb77574a9c6ae93ddf1c37e3478f90f5647e07aa9edd32812fbf3ef09159df54806f774a7ced19ef332f91676272516b9dcf57399f570a67686f3125a65cdcd987b121c0b89012632f16f526dd1170ee4d563bea2c173cf85ca3098c6f7ecb471df9e0042f1f4badf62e7703701765228bf3fec92d67586c22a8af1753e20b776c988d87335c0a2c730fead2339e2ba4624a3aeabd5f846a063b7081965062ccd6600c766c13615f3bd9b14da78002602925de6e026f91c8e435a266af10d50fcfe0ab05780e78b9f3b72b720ae3c78a5738aada97f5db83ac5f626ea94a389e4e86f66d80761925dade02ed3491e9e7323e6fa84cba50a542949ab7594fb64be6503503809767a2dac2a61816098b253ee5e248aa6a6b1e28574b33d3f4cccfbc5f4a76e4d20280af2c1325686cad9f4c196ae571b600ed8a4c0d6ea8e6a86adb475bfb76373fbb83d2722525cc1e1a98892b277bc1ee08c0aea204ab0eae2f605bdac1f5e70384e59408832d16b071aedc4c80724f4a94db044039cf09930ba961b39dbf54ff6835adc3743495c3540caaa5d59488bb30efa28175a27379555c9bb57146c88f0068452686e2923f7d851027d92ed8ed00ce3526e11c6525ce3f4189bad6249ca4fb7c90e1bc0ce0ac340967a195388f0638d7998473a49538df0238f73209e7082b71de09705699849374ea2c19ce290067b549380bacc4b90ee0ac310967be953897009cb599e808f1ce45ae76c4b8bd4df6f625ad0008d7d74f67b23b845c5077c8b7ba163bc25633be0510ed691854bb25bd015a451b32d1c78465f58c5543641b42f706131d3666aa2bb912f41cf1698bfaf179bb6781fe02b2ff264ab0bc0e5000dd5dbde688d9c77c28980c5b3f2a6c9d00b6bdeb336b7bbbe26c5c1dbc1e9492fb64aa0e5f5e67891b65fd9d814cfc0d15c2078135ee4b89b03d405856b73d9f7a6dfb98d0e300e37e99708512ed2a3755fe2063dbf3904d59e809d0ee9f59b4c94f58206d03d1ed4803cacf034c454bea7592a13d0358ed8199a89af2b7b871f64100e1419408a34b10ea619511d90ce47e00dfc199c157e8f33733808f6cb3bd51a06c3c84129f9ace95dc2c8f7c2be7795c0d6cf1509360dad8eab906c03ccc249836ee89740e8079b849306ddc13e92a00f3089360dab827d25900e69126c1b4714fa4b301cca34c8269e30cb81301cca34d8269e39e48670298c79804d3c65d61af05308f3509a68dbbc2de0a601e470953cd1c0e321d86d03ac9a61c8c074dcae34d034a68a164402700a027980694b0354406340f003dd134a0842d2232a0c301d0934c034ad89344067434007ab26940097b93c8808e03404f310da88d130b0701a0a79a0694b08544067430007a9a6940097b96c8800e05404f370d2861ef1219d05c00f40c4aa0d92cec5e4a840500d948e66a80f74c4abcc14ebf24749fc8ceba7a1aa03c8b12a51a141e511f63ea645d229b5914dfd994f8c26d9f42d852229b30733bb0cc7328d1aa8988c3eabaef4a99bb2f3cffdbf6bd651f02167a6ea62d34f9e31709cb4eb219217f020b3dcfdccc6fe3ee73f700b4e753a20dbea7828d1dcddb029c17988473949538b706382f3409e7702b71de06aaa88b4cc2596825ce8b00ce8b4dc239d24a9cbf019c979884738495385f05382f350927e936bd643817039c979984b3c04a9c07039c979b849374fa0d19ced500e715f41d75339d0f4a599940b9a56d75de0ea0bc9212a53a94be1e763926eba6db0bc0bbca8c4e902247c81a27d44a71c7bf26ed8bff9c0a6d4fb09bc2d59468d58e9d7cbdf024c6f74d58c7e60874a55208df40850b54c73946cf32aa66366fab9203acf79a4c544a5895147bb023e1783c19ce55a0f57ead493849277f93e13c06e0bcce249ca4bb7a91e1bc0ee0bcde249ca41b4c92e1fc16e0bcc1249ca4db9fd26dc30f6afb1b4d6a1f8db67236686f609d379984739495381b039c379b8473b895386f64519cb7988493f48c61329ca7039cb79a8473a495383f03386f3309e7082b713e0570de6e12ce6156e29c0770de61124ed2e3eec970ee0d70de69124ed27d19c87096019c7751e2dc96f9cf80a9127df4b562caac8a6774d33f18180c6a82f3579598bb4cba67dd62aaed7bb341bbe96e4ae01d58fc75c8de92950c24d9e6bd0380e5de630a481b7741ee0640de6b0a48c2b51e64208f0420ef330524e12a243290f900e4fda680245cb44d06f21400f2014a90fd7db5fb32163bfb38c8be9ef68dca7702f5fa8394a8f37ca86b5190f816c0b143ce1972abc652b955ff810ebf8728f1abed5d92eddd279cac43d6b75f06603e6c124cc29d48c860ae04301f3109a68da34ebb00988f9a0493b0ca2283b91b80f9984930097d5632988b00ccc74d8249d8922283b918c07cc22498848d0032987b00984f9a0493b0bf940ce61200f3299360122e9b2583b914c07cda249884bb3591c12c01309fa184090f33e38749f04e936962779129cebfe5026329e3c7ec71c17caab8dd67192e6251b0cf5282ed2ec0ce703e582e662ec34d5aea6d1903d9d62d8d01d6e728b1f663de0e931aa1400d2b923be204e999b2f1bc995741c1f03c25e860a7cad97824c05a80f2054a94e14e45b2719397eb4171f062267c01accfdf6ba523ad3c546532b0d3974c8269e3a12a5300cc974d82696309ba3d80f98a49306d3c54650700f3559360da78a84a2180f99a49306d3c54653b00f3759360da78a8ca3000f30d9360da78a84a0180f9a649306d3c54652a80f99649306d3c54651a80f976fdb6d35d51bc238fb497be01d56c90ff0194ef50a2ccd6a00cb6eb32a1ab44d6757702c0fb2e25de762cdad5bc5e7425f33d1d9649cbccc876ac64fb2daf645188efd56776f76e5d4d98ddc9503e0eecf17d4a946a4d081cfac0faebc9073cc8b2775f60991f50e2543b81e78b1d9733bcc5501e15bef9c01a3f34276313fa976419fb4d80f2234a946d35191bee21469e99c9fad5bf0599f9e34c0c59c4ba425beac05a35b0ce4f28d1f640d1ba5e6681f32fdfe2aaa4ee3a438c1ad5d082cda272df9f0160379b0a96b0f3830ceceb00eca799a89a926bafdbd8c3390c94ab9f65c24653190a26ec06212b554f06603f3715ac8d27291c0bc07e612a58c2a2800cec6400f67fa68225ec6722033b1280fdd254b0362e562c0060bf3215ac8d4d82de00ecd7a682259c844306f61000f61b53c1124e1523037b0000fbada9606d9cd0b81080fdce54b08453c8c8c0ee0ec07e9fe91eade4cfb123f464c9ceb1fb00f40ffc90899effe1ac1ece0025b3cc438165fe684ef78a8d334b7606287fcac4905ef20bbd6ddcd1e11090b17f360927e969366438af02387f310927e9594b64385f01387f350927e9b17f64383b82ad887ea3c4996859adbf97dfc6050bff00dbfcdd2498362e5868092cf30f9360dab860e15760997f9a04d3c6e1bc3f00ccbf4c8269e382852700ccbf4d8269e38285ef05ccc60d7dc2a7c4082f12ae0b775e96b3e8716743d95456263a293888e5cebd9ac2b0d4c1b1d0f95fb01458ecfc4ff73c228e0b9ccc36b275e22997572a64af71de72cdaa591e9f73f70f378826d2207244537682c3bcc6f9662e2b13a16f62f3987b9cdb6ce75fb5ab44ad40921369effc628ef3ac96f199d53c84b58e26ab589588b1f7b8b79c4813c1a98cad970438c01ca9eb7ae66e7e385d36a2cb9d3897084daa9c6f1a88705c873027d212dca929c8d345ef5ab5d0aa9178cf355c21dee744f89edd45428b1a19ce1ce156f219653c41239136320db9fe3345dc4b9c38bb134d8aeb42c9e5530d22239c7fdc7ebda1753d7a43e5468e6be49d7a9e58264fc1f8d2fee5c914d1e7db8ab4d95ea2184d97f4aa04d5e5224bf0a789629a387eb81db788932ab97c6bda2d3afefff17497c92eccb453a4b9f3d77c27e55de1654ea6ac121323abd849cbb258c3ff073ec729020a970400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/dd425f9b633169946a84e0ce9b333aab.asset.meta b/Assets/SerializedUdonPrograms/dd425f9b633169946a84e0ce9b333aab.asset.meta new file mode 100644 index 0000000..348f2f1 --- /dev/null +++ b/Assets/SerializedUdonPrograms/dd425f9b633169946a84e0ce9b333aab.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3a2fa57491c1c7446a73b167beb5aec1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/de61bb1bbef83b8409027ccffd980bc8.asset b/Assets/SerializedUdonPrograms/de61bb1bbef83b8409027ccffd980bc8.asset new file mode 100644 index 0000000..210ea46 --- /dev/null +++ b/Assets/SerializedUdonPrograms/de61bb1bbef83b8409027ccffd980bc8.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: de61bb1bbef83b8409027ccffd980bc8 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec5d079cd4c4f74f76e955a423ca21ed9072f4a28074417a0701e1e00e38398ac7d114157b1754545454545454eca8d851b163ef1d157bffd9fb3f3399d9bce4decbeeec24cbc6bfc787cb25997ce7bdefbc79d367627986f563b6b57e4d34c61a038cf6c604a3c058642cb4fe1a605d1758ffec3bf97cb451625de75abff3ad776d8d9c245fb29f566603ebf750eb6e89516a7db9d4986d5d8bf8fb7146a1f5f750ebdb42eb8e3d9d63fd2fb44299e5ac8f2618038d51c648a3be593709c444fed112f1cc647a9995acdffd8d95d6db422e148b248fbfaa6ffd1a67bd59c2df2db08496e1a61ad3b95a0bac77b3ad6f4a8c620b731647ac34f01683ff61d8970ee2da515c199d95c5df71f17725f1370c5f5e5c3ba518be33f8ae32f89b31b4d1e7fb2ef635768a75ad60074fdcb39baf44b8ae365e6c9e0f567771ed21ae3d05a69982fc15c5f5c024fafa611c04b052e1ac92b8f616d75e42de589af11f6c73646e00788ccb53813cbd41dc95c17bf6ac8f86ee321d4ff3a4e369763ac6d68bf4db2dc2f715d7fee2da4f605b616abf229e0d10d76e49e41a687f9748f74e769cf1c5e27e90b80e16d743846c670859e3e05e571699a64304e6e9228e72c873199ebd97f96da8b81eea49af61225c05713f3c457952b13f29d399228e8ae0de92bbdc4c1f2c99ee6779d2fd2cf1ed5a9bc772db3cfa00fb43714708bc4a3e61a41e23f1f42fdfc0e7db51f637d37252c01f23aea3c575ac631fd3b6b8dfc5ce16725706f74c964d1efd0f48a2bf8c7b3ca1db8f3edf4eb0bf99bc5edc4f14d771e23ac9917fbac49d6cdf4fe895824c87d9612b4beea6da325558653faf20759579664a125da50d9de3b1a17304ee2b02f74f117e9a7d6fe61a8ecf9638ecfb2a1edc351edc35366e459987e435999cd3c575a6b8ce16d75980cf17c4b319e29a2fe25c6bb87dcd5af1fe70e7db7adb1579f34ba302c35d5e7613f19e9b04537e5f28ae95530c2fc3ccd19079aeb85649314e99cef334e2ac6adb42e5c91e5b989a04b3c8e6b7d23b40068623cbb723c475beb8160bfed779ec605d0a76904c9605421699d6736c59aaac10f70bc575915b1663b147a6aac1c9143b4f605603f7ec7abe785e1ddc3359b7d9f1546d2b308f14d7128fcc4bc293d9aa5bf3efaa9702db48e53b3ffb5a6aeb5755d47faade2f9e2ff3c836d791bbd216f0ad942395fc20d23b76a187e30b6d19aa496e577ac2d500f7ec7a81131fff9b7d2b6dab0b78cebead09eed9fbe529ca7ab451d6664d514fac0cfe66710bff5fed5711569433aebc877dcbae17816717d978d5078aef8e31ca9663321cd36d2f70cfde1f95a26ec722f2b17837fb7c7b9ce1f63f85c01e6419bd5ac873b1e1ce5b178bf70739df9832bf1c6fdfd794b29c20beb904f072892d5f0d59269d28aea71a78397b32e041e447e31427ee7da5bc27f9c4b5538439cda3f75207a7ea6a21bbf463b2ce3c8008cb9ec93afc39e27aaeb8ae75c2ce94befe6c715d2364bbd470f966e32cf09c5d3788f7b5c03d0b77a6835d57dae8791e59b1f43cdfa33be603fcec6c9d1d7686ace78abcba5739fbf95e6d3d329c60f8dbef7e42afcb0cb7fd5f267045bd6b2f69c7c25f18c2fe62978374be5cbc9379d2faae9fe4fd22805b19fc9d8a8c7e7c6cb0e349b46b24a6946516c0ce13f15ee1c897a8bb5d0adeb1fb7c71bdc4709539beb2c86fab27d1a70308c7ae1b35f4f77b27db8d570bdd361aeeb6de463b8df71eee83b5c9e6a981c817c635f637b5a789fb6bedf7b5a47d5c077462715ce970bd97ecd71161635701bd2f11cfae06cfae12cf36019bb952bcbbde933e7b7bdedf0030b0f7370219b0f75bc4f3dab6ecb5655bf6268f2e977864bdda70f90be3e6b2bac6aef6c45d47212d6f11df5ee3494b912e75fcdabfb7e2695957fafadb3c6979bb272daf45d2f20ef1ee3a906efdc4b3cd48fa5e0f78b856bcdb4aa4a57c7f27c0c5dedf0564c0dedfed4ecbbaa28c32b6116909e58769794f595d639b3d71d74d212def13d77bc515abbfca3ae300815b2f05dc07c4f54c1fdc2e1edcfa29e03e24ae0ffae06e377079d3894fdabaeca3bac170db3abbb7ecb67e391fac870dd4d61bc8bcf688e1b6f5470db7addf6894b5f51de2dd1627fd3917ecd94d46595bbf19d889f037c663200cb455f9fe71808bbd7f02c880bd7fd270d97a03d91ffa9481db3a941fdafad36575e56160dc7ebe46a6e5331e9e25bfb718eef6ca2d227da47cb24cbac6f02f1b77daf86b24feb302ef5681df10dcb3eb6d9e786fb3e36d28fa931bc9764235f15cd47f1a3516cf9f13f1c936fff322dc499e702fd8f76ba56f7bc9c3ffcb1e5bb9c3b1b7842e2f827750b7ad86bb4e22faab637782b4da0a9ec1b492f5c264bcbe2aaeaf79f8bb5de03502f72cdc1b8efc6b657df8757105f5ad5ab25e2fd3b71a90e34ddc560c59d6c9fa926a1d49eafc56129d557cd25d86db27dd65dbc13eeb7db0de1361eef709b34b5c3f10d7f705be2cc36a817bf6fe4371bfcdf35ed6571e74b8af371ac821b1d937fba4a0ff47e22aec3e768ff8b631b8b7746bbcdd8eabf193e2ba5d7cf7b107e71347aef3e779be5997823c61bc3b59e872afe1f611f7dabaedeb6db79e94c49e3e15d7cfc4f51481779fe1ee0f94f501bf7eac6471f9e8157bc070f71dc87ac2e7e2fe7ef17e5f71ff9027bc2cffbf10f70f7ac23fec09ffb008ffa5b8dfee0e2fc77763b23ef1b5a35b4ce68d6fc033c9c5b70e3f3932ae47dc711bdf19eef6a06cf33d2ac2ed07be831cc8f74dc4fd0e8f4e8f89fb1c70cfae8f7b707778b87adc83fb8447deefc5558eedfce0e878fe76f00de0d3f89f1bd3d7a6bf1618b25ed014dc5b369d33c407437efb94b83e2d30f607f70c63b548139f7c1b7bc6c3df53e039bbee14ef9b817b86fd998f7cdf88b0cf7a747bd6feb669f314be7d4e5c9ff7e826caf5a6a2fc6fbad807eb2771fdd99386d26619de8b48babe08d293ddbf2064680eee2d19f697b6fc8b81dbf6739eef5bb8bf6f26ebbcb25cfecd23db4b86bb0fec0f7195636f884d1a7f79647fd9099390ef778f7cb2ce23e57e45c4db12c8219fb3ebab86bb4c937592bfc5fd6b9ef7a2ae828ee5fbe511d966fbc748dbc7b23f1358a9f4fd88f691696ac4190358a9c429da5e665c23ce72002b953845bdd32caf1167058095429ca6b03f53d8403329cb3fe2b9a8b399622c31c6eaa9cc8e5a817b99a612438c0f99a2ce6d56f3c78ebd213073c13d81e9ab8b18a73145bfac59d3f9be8be88b3685fd9bb5c5756f274c57d1d7610a1f604abbab0bc2486c611fb13785ecadc1bd4c7bf14d73d1ff67ca76058bd37adf52c8147b4b601c60876f79ab5bc618a88bf3bf653a4b7cd12f6b36b4efdb493b6a64c7d34afa3451173393f4b99aa28e6b36f6d15fd44fccfd68ae657d2c597cbe794270952beb416f1baeb2d16c22ec6313782f7d05bb7f47846f03ee199e186330254e535a57942359f6ed0269c7ee653b41d883d94ca45103f05efa1576ff8108df16dcb3eb87e2793b108f7cceae1f19ee3cf3116117d6b5b518ff339b1332b64853c65db88ca86dca72cb937e89f48a39df3413f51853f81853e48be6a27f8afb47766ded7cd34ee65dd93fdbdb93feeddde9df668727bcec677ed770d70bdef5846fe3fe2ef69e089f67db474cb4174dc115e943ac6b5b514f32db25b1411856e8614a9f97e7846dbb5d3c137359cd4eb44d9b623e2a997f619ca25fd2d71f7455c013736dccee3e783d14f07a8a6b2ff15e8ca399623cd614f34e4d6913bb0df7dc08d93f85b429cd3e49e460cf0e4ea20f94b52fc863b0dc90790e29377ccbbc7ec00e18cec702b703b867ef9172ce1757ce3b6d6938be5bcecd6b059ec932a59191be8f97bee133c3dd9720fc40ec53c33ddecaee2d9eda89fecc765f01b9d87588e7bb8ae09e5d3f7164e57f5b58ed1bd858ed65593dc08d19fbdce1afd72be0190b3b1060415f23b03bc8f250fa94ef44b88ee01ecafd8547ee2f848c628e42225fe726e11c4baf16ee77b1ef455c9d90f7ec7967108e5dbf12cfbb807b4bb63ce91f0789eb60711573894da99b6c8f5705f72cbe7e0ebfb21d92f09d49f44cc8f68dc0ee0aeebd362c6ded6b8fad7d2dd22ac79641a69939545c0fc5f5318779f46a6904a69739dc6d6fd2ce92d9494759df6b21de4b7f9baaddc87e7969fb5f0a9ceee01eda427570cfe217732b3b8a36b439425c47ba394ce02bd884378ff37bf66d39459b113a98a3805dc03122f97eb4e18c11c1e7633c36d7c36d7331d84f276cabd39322aea640cfca1edcb1200c26cf38208fc54b67594e8e17d789eef0d8dc5b7382271df2d5d341960fb16f111d4681774087a0d2ceb7dc92363e297d8c4499365903438ca5f13a47babad40458a9f41f88712653635eb4591760a512a76c2b1ea611e7de002b953e0b36cf1cd6f3643927cb34d60707fb47d9bd6563dda45f93e99b64deaa29c67b4d592798e9843767896bbe91c81bebc438a23943c47796627cb3c5b5405c0b85fc3f1aee3110d9ffed3306922c2e5f7ee70a7e77027b62ef651be927c3dda6fec9d6b7bbf40db2bd5964d0fe43ccfff6ad57cfc7d3d99c9384c762e23b597ffcd923ffcfb6fc3dc4989fb9405c17fac8b6c8be6fb5d1bef6bcd51397f836f68b27ae5f445c62ecd35c9c04478e95fceac1f9d5c6e929c67f4d311fdc94f3c1bdb621b1cb836fc4dc54b3d4c317d56efacd70970fbf1171b16f96a690be628eb75fbb49cadc43f4af9bcbd3b3095f7b5f896326fcc9ef1eee7fb7b93f50cc07368f4ac23dcc972b92d8eed129f0b62a096f0c5bd657fe30dc75b43f6cd90f9ae90e671e2baec718ee325bbe3fce70d583123e2d993eabc5f5787195f3abff34dc3e4d8e9f6870e79bc662ce89b72e6d9e983ea6ac2727ea427f099d7a827b8beb5eb21c90b67ab20877a090699b1b2ff6b7787f10b897dfa55226ef0f744c97af5300562a71ee6bebda5be609b166d614f3006260bc2826faffd1b9cf7e3289b9ebec31b4697ecfe27ec7c6ea23c75da4dd9ceeaf8329fb15c57c7753ce8917e911371d39a5fdf0672cec1a073b6153602efd7ae96bcf01bc8a77bde57880b08b780cc8299f9503f8e7796428e78e375ede70b507f9bd15a6ef691e7dc477f10a86ab5d17afe0e1b9a278df0bdc5bdf1e2ce67f1d2cdaa77d671aae7c10af04f4f0c6594960cabc20d6d01e2cd6fff4ed2b9e8bb9ffa61827372ff0e0c974847cc8f40c224da47f4b623b7139ae3804dc83368dd43bf1be1c78cf6c55ac6330c55a0153ccfd37e5dca80ce99bd043a6cbe942ce34d7da9b17dbf8aef59596cefd56dbcffb0999127376c03a24348fca3998b2deb4c1d16196acb75d2ae2d86d3fef2ffdf365f6bdf9955a9cc601eeb4e3f7206d8dd6767cfd65fbe072f15e8ee90f4f311e3f1ec53a0973a348a7ca0e565c62aafad12bedb04c2d7e7f95adc780c6f6f3013ef3bf4cd106309afbc42dd6910d10f5f001a27c33c5189d798db85e2bc23715fa54315cf5cbb85cbf8ad509fcf493eb2aa42d63f9dbeffb2d76d8ca39e2b958bf3d508c2f0c94f949ccf135c5ba0553ac3788d7325c759bb89c27ec57b7d9ec6f23a698b31c0763a9fc6f2697b46bc1a37903780fe6c8c4657909e691c6c5dcdd417d3ddfd6305cf384e2354078d0171f1773b3e2600d665cac191eb4ce8359537cdb07dccbf010537c3f58e865ca3691983f6bca39be58dfd66deeb4e77d5bb0bc91ef65ffed56fcbd29d7513425bebf05e806dfdfe50e97b085833db6d0cf913dd126be01c429fdb998bb6a5e2faef738df0d13fd89a6cc5fc96c08e23359f6325cf352f9bdc5fb21b2fd7e6f80718b799ba698b328f34a199b957cb5f4f0a591777cebad621cd7bc2a7d0cf30180954aff95945fd609f636dcf53631e761a89cc721e65f9a8f8aeb0e374ebca1e1f69b0d53e0ec417f594d318f355edb70d7b56b0bd986d8b843651e7f4c5c1f0f2e6e5ec6489f52d770cd1b88d7f57050c770d7bb1a78c24bbf2ffa04e3f53d9cd7b7f53a54d475cd278cb265a40c5719fccdae604e19ff9be1ac0672c178eb19ae31c24478d90694f5ce241cb970a5af78d283f18093064364bdf02971bdd6cd9ff9b090ab829a1cbe76fe0cc2a1a5eb3059b7159c984f3b720e93f5e19d9e77c9e212ebcde28d3cf62ae6400dfbd5c61f9ee3b1c56d49f03d6dfcf83e86ab8dcfef2dfce172ceeb10f01d68e38f90fc3f6bb8eaf089fabd0cdf57841b089eb3ebbe1ebb11eded04ee736e5cef5861bc89e1ce1f623e743c07c809e5913cc971e07e9ee78d81dd3deff9763f273d136d95fddc7299724d842c3765f9fd627a7af8b6e192a5b19f5d89bd15bced9891c2ff8d94e92eede9a52471a5d8a61829eb3c725eafa74d91341e3f9dc49ccd7853c39d579ada718f6a6eeb364ace5991f331c5dc46b4bf57ce4b7ccd5fae44dcfb8bb8fb837b766d269ecb365a3bf09c5d9b8bf703c1bd25f3e899025fce277bd71d9ff9be23f3a572ae989c4f21e66cc5e578641cdc3319fa39df26ea6abb52d4f703fbbb895bdcf2c4e5d87c7f70cfae721cdaabbfa80f99725ea09c67f1918d2ff7a53277a72697af7d7c22e2ccf5d847aecdf518d1ff3346f6f57daa601f1f27e14bc6dddac34f6b7195f9c5cb8fc857f136e2fd6070cf6416fe7face80b333f13d72fdcf1a276f2b9c74eda7aec44ee2381d9891c134fa6f7571e3bf99a48d72438bee92ae61999622d8309e61f24786cefe8b041f81c53ccaf89e7b9b98fb707cfd9b59de1ce9b725ee337e9cb6c484c395741b6eb641a0c498e61fe20e4e9e8b16731ff2adec170b73f3bd83633beadcdc3f8551e9c4e1edb14730ee29d3db6d91e3c87f10cf4c4b3d1c72e649c5d3c718af957f1aeee3813e1bb89e743c13dbb7617cf0ff5c8d8d5f37e508a69c3bee921be1173a14c393e2de7c0feeca47f5cce57f905d88494fd57607bb24ffe2780e5b555b97fa9ec67937de6608fd2f881ee78e30719ee7aff41761a4c5c0b30e17772cfd14ee09e5d65bd68845bd7c477f2fd48f7f3443de640c3d50f3c619702df7ddc7ac7657fcac1866b5e61828fbe808fbe202cbbf6f3f0d1cfe663f22a0fb6fc6e80870fe90bfabbf9307f03cfd9fd1f4eda5e21eb1562cd537ca0e1ce97036d1926897eb8c9726e931c03fedb8dcdbaa825f654e92ffff2c42fc69ce2830c775b59da39e2bbe5b7f1c1065ee6c832e610c35de6f4f5a4755f775a4f94f33d55fc9e187b8e0f315ced84441a0f05693c148465d7433d697ca8cdefd41c0fb6fc4eeea52ae77199e039bb8f83b8840dc6c0bce52b6e05cf6418113e16b3e39e729a1d964d1be2cfcb8b6b054f5c7e692bfd8d4c5b3957af2ab8c7d296c5fbab1b232ef753f5a6b1b0e7f848c3edbb47da7a1cb65dc829e760564e2e7fac5208f28f22e41769e8ad37cab44ed8e850b78d4e4e612d604ca45d7c8c27eef6e039bb8ef5703756d8df3b1e9c71048ed897353e5ebc1f0dee257fecf918c1b3c85fb12ae07d9af58f98dc3742ae7d817b30c8f920707d93903d56c349b38d954038f99dcc0f35ed3057a6e213c4dcd0f804a16f65706ff1394dcea148750fe172f6ffe972de819873e3bb87b8e445f6cb4a0e202f922b555e40191f93f34f2689fbdace77578df6914fcccb8b4f34dc65ca445b57d6346118878b7edf98ec47cbf7e72a56cf833f49e08f05f7ec3d187795fbe8c5e45ac1466e0cd7da67b1c75e7cb2f37d62fdb05c37dcd07977955c8350177cc7ee65df47bee1f225ca76bf8f1d8f774fa01933c5bdac7381bd3051dec498a2770f98199b1571f6b571e41e3131b1ee4fee111313fd4b893d6272042f53dc3cc49a8ae760be6a7c0a78c6c27af77f49221bfa4cd627a77aec508c25ce14e5df4c59564a3b5ce31f970c179f06c2c9b8a63bcf12fd95873bcfe2d3c133769d21641b07ee2dd96655f3e0ce14e1c683b8d955dad804700ffc4f7c96e19e4320f10a804cb3ec38f345ff776c7f4f1cb305462d9baffc9d1e1e6603ac99e099c490df82f8f9953d9f28d260873bce6469e0dbd61473f4e2859e742f14dcaeb6e32cd828f410fd5a31d9ff33d770d5ef62a2df2726c770e719eefecf79e03b769d63b8fb89e7d8f1ce9ee60e27c737e34788f093c03dbbce17cf277be49bef91738afb390f57d9fd8dd4c194fb83f6763f4fac6769e9d6adcc58128269b451c004fd5164b8c392c4d33dbdef13bacb3338649bf7d224b626fd954cd73ee0ded269ae2cc7e45a1ad94f566cb8f26c4c8e736e05efd97581e1f68fc9ec50f6b325b3c3228f1d16d9f216ee8e9e1dc6c57cf0443d3c003b946dcca8d861e2cc1430261b6be38e83b419d93792a6cdcc6be00e17059b49f0fa008da96a33720c778fdb4c133b5d96cbfd9edab9bfe3e7ca607620d3f5488f1d1c09be63d7128f1d94d8f11d91e30e97b083251e3b10eb1ae2a5841d947ae49ce27e1ea41d78bf8f2fd4fb5ed566bc6b1ae24b816e19b6a384ee01d9615cae319176b048bc6f06ee2d1e8ae55c4599fecb0c573f695c9e35d0db83d306dc4bf92577796e19e32b099b17f5c2f8511e9b3f0a7cc7ae477b6cfe685bf60575dce112baaef2d8bcecaf95eb37bc367f8c47ce29eee7d96cf3f1e57b38cf1cbb07f3cc72cdef83ce73729d90b4c3159ebcb2c2b6db45728e8fb43fb97ea823b887790ec391facb7a498e7876bcf38cffcde27bc34ebb455f01bdb1b0ecba1a3c5b6d7fbf58ecffb0b82d88970a2bf7b7926d3d792ed3548fcef2b9d8174f7e1793fb3ec83114b0a77f22bf9e68e0fe448e259ee4b6f9f849e03b763dd970fb93936dd98f2c70874ba4e32986db9f9c22aea71ab83f39d523e714f7f340ebdf62cd98398dc68c9a8fe92ad70a0b9b899f66fce763a48f39cdb6d525f20c1439e729491b2526f72491fb7fc8316fd9168ebbe38f9f4ee43129873cffb01cb897dfb1ab3c0fb03db8b7c2963ee90e97c8636779f298e85b8dcb33f1bc79ec6c8f9c53dccf03cd63f23c1c9fbe96a8e5b13dd5d7936df929e5be26397fd3d37e4b94d1473adf9769b3c93a7345706fa5c39a620fb6fc6e8d5bc6b81cff906dbfeae09eb535c5f913cbb7dbd73503dddfc93d4712bacb7d53bcdc4addd2b5e12335bf5fa3f77d625e7126f210e037e193645bbbaffbfb989c37b3d4f3fd52f09d09ea79edc1bd1576e59fee70099f29db6a93c0bd9942db5ecaa9d0b6ffcf36d4be2fb3375286fd6c42df74fdec1acdef8fd4fc7eb1def7fff1e7fe3e5116c87927729caf07b83745df4a65f0b765cfa7e6b8e320fb73e4fcbe64fd39ab0db79f5b6dc773ec6e77b828f4e724c6a08a1dccc4b305804bc9ff5810febfb298febea9e6f78afeba8cfe0bd4be2f53173896c82362df92449f4f39702fbf33457f0ccc23c7db79e4844aee70893c22fb1a26817b33853e0a29a7421fc5ff7bdbccb06db9f635f40b4f950532beffcad2f4bed7ac8bec71fe9bfe977e81f51980f6754cce59eee3fe8eac1fc9750569d68f4e2be70e1785fa912c17e1f9b9ff95279e708a7d7789b386f385fca0eef99f6f57fc3e48dfc09ecbfe40ef1c326fff3a553f14f7e9d60fcfca7587db13f5c330e690fde72314be2fbfe7e6d0fde70fdcdfcb3efdc45a2238bf8bf5d98bfe9754c7f1d0b1bd7ee2ddb3eadfc6cf15f25403f7ec7a9e785e1ddc5b32af6d6ecbbd56ae4d90eb009ef78f5be2c6e4dcfbf305febee09ebd8778ec7d631a138d679d479f75ee7863728da6df9987624f87981c47b9507c331ddcb32b58fb101b249e81fdece2625fc6f87ac3e5eb1363461783b01783b0ec2acf75ae08ee2dfecf6feec196df5deab1bb4b855c83c5bdb44bb96fb74c87cb800c1bc03376957bf6cd00f7960ce7e5da3670de9f445c5788ef7a807b18e746f17e26b867b8b7bac3c7af14e1f2c1bde418e2ccf2e078e48a83fdabe262af227ea6b09fbd0a5e13f9f662c3956fcf2d76eb940ccf773d9158c71a1371f1336d599c571baeba03bf67ef53ddf34fac778f89f58cf14d9e74d924c2c1bd0e54f720906b5c0fd5d07f84ad4b67b9cf8d5cd7364c1dd394b6728de1f65fd7d8b6b16eb71dd705627e414cac418f897ed9985cef23cf1597b8d2766f05b624f6698b8d02cfe49aa5d1ceb3985c6730c649b74d923f39fe3cc35f57a9574cae27bad69396d78aeb754016b1d7637cb3878bcd3617177c67cb72515f812dcfc71075bd18586fb7e92c5c8e985cebb73721e7f51e39af17d71b809c727fbb9b3c72de64cb79e17a8f9cb2ec9dea9637ebd32c052ef8390aecd98de099b4e92d65398bc1f317403a24de4f0718d8fbc30d57df62e2b9f4f9377b64be19a44d65f0770a7cf8fa1159bf9aa98e1113fc98b20f1eac7b33e5b8d6ed4e3a6ede019eb1f0b2fcb84de82ad6c825cae93b009e987715df0ae494e1ee049cdc0930d9d573ce7b5c9cf37ee910b7ec89efe439edddc13dbbcaf3d9ab837b0be792cd4056c027bf876dadad1e3de45e636dc03dc313e7925e9a43c877af5bbec4fbad9ef7720f339917ef035c7a31ef737f23b112ba6c355c657042b6fe204e0afb5e1c3b190f328e040e4877f92c21df9d6ef92e96fba18834e17b4cab9667e2ecbbf8fd9e74bf5fc8b7d31dce94672e0e151ced12365e07bc579541acb18e3fe091e1015b860da3dde14c796e5a7f5b860d056eaef97b55197ef6a4b53c3bbe27b867b27c26c2fd22aef23c96213ed8226c221fcb73eb2b827b0bfbb281ee7029610bb9e3db0d571b80df83b8e30f7becef613bcecbe78970e24c93cbfb7a647d1cd8bc8c6b8727aec7c173767dcca3df636eec04cee3202e167ea4e7f910700fecfeb25bdd389c27bf725272f0889b4f529f1d9eefa43e2d0cb73e9f79701e0538969c97ffe9c179147029f8bea28e1df68a2e1eac473c9853dccf93e98cf220ce4b37e5992a056adfc7e4b59cfb7bb9d74c4ceebf5f5d1157e2c8356d738c44597abdc8fbb142a1ff138edefc6f68274f7aecee499be32bc7bbf11379fc29c39dc79fb2c36f94fb1cd400cf2b7bc2ec726325f6dbb064be52d8516c2e7827d3d653a6abeec5e5dad703e3721e1da7e44b27ce441a550798c03e7deb60953ce9f5b427bd9eb6b9bdaa8b3b5cd2bd54643baf485ce538f611c08ec4dc9f985c6f2afbcf77027e64f9419d6fc0c23c93847fb1ff73fc59a15b53706fe976b5e85f91e5652cc959f1122f26fab063726dcd7302bf10dcb3abecd7ea0beea13f7f41bc8f817b26d78f1e9c173d382f7ad2ee25c3d54f99f8ee25a0177b3fc7e67153258f3e49f446b9106b016362de734cfa0631ff38feb288b325b837451b8b3df7397f2026c627e2af88b00dc13dbbcabd60ab837b8bb74d624fa86bc498684cf4c7c64a3cb8f2ec6d6fdb11d497e26f037d2a83f752d714da8e097f94e40cc6989c132cf57b4dc8d708dcb3704b9d38ae17fb5ec5e43cdfd73d9cbc6e7372cd6776f86b45f91713f38663725dd9db4097951e39def4c821f735c5f6f6596eb8784bece3f3aec0a8eac3b58cef7df0ecddd4f88fbf1f00ff471929e91d5be5c47183e02f26ce298bbf0164127dcaf1b73c69f2969d26d76d70874b2a9f1cab97e38130cd8ef3c8fe8e47f677fe9d6986f234db23ef2ec35da7d865f37fbdd8df3471ae1d383fe3fa5c37564ceeddd3575196391e593ef0c8f28190658347964220cb5637167f97862c89321f9373b5e1f816138c83c87df2a6837bf6fe0447be2dbbc4b3e30dc717a9a6d92a4fbcbb3df1ca79c21f39d8b113c5b38f814d7d24ae9f78389265eda720eca7202cbb7e66b8eb3e9fd969b36593075b7ef7b9e1eeaff95cc825c744e479d4def1972f810c5f8067ec2acf909e01ee2d196edc2cb85e45c425cfefee01ee619cf25ce699e09ee9d6c11d3e2ecf28ce07f792638833cb83e3912bfe1dd051ee3f08e699a3e32f82d7447d469e572fda98377ce5d629191e6a6727096cd01f1113eb69e3604c242efb3fe4d9b95e3bfa1184fd11846557d9475011dc5b3adc52c9832dbf93e7af7607f74cae93c5fd2f841dfd0a64f8053c63577936e90c706fc97093e8ffbf791711976c87f600f7304e797ee64c705f0ee0c93d6cff04b2c9b139b96ff65f02632eb86771c87e3979de6333705faeaccc71b08f655cec19ca7d909f8dc9bd9887807b606337c9367fffd4f0dccfca9b66398e5d68e41b8b8d3c5ea16f6dfd9a688cb55a75ed8d094681b1c85868fd35c0ba2eb0fed977f2b9fcb2ad9193e41bdeaee73b855a3fad78b4a5c64aebd342c364fb2b8eb36e96588f0aadf00c63a8f54da9d1d9e8c4b11758ef665b382546b15164cc321a9ad580dc03f8ef7c2b4411079d57ae4c14f794898209576cfd2bb43e2bb53e64422eb19e1f623d5968fd2fb19ecdb6ee875b57f6d54ca3a331d5fae7469968455b6c2cb5eec65bbf1773bc9996d86543265369baf5d4fbcd580b7321976e81f54412bad8ba2fe6128ee3bf9771490bb9f443ad67a5d633a6cd5ca3bf755dc1632bab7b89f53716e77841192ee374a5e7a6590924d3404b1b267d1eb7c5ff52644fa408a3be02cb1feca75c1eef753ba34c4afcc7a1ed642c076bc56d6374e49499ae679d8c3c76cb174ce9ea585643dcbe6dbebb195d7c75c19961c9bd0fd7c049e10f4e2f79ec8397defbb1bc5bb5ce465e05a65ae324aaf911cbf072cd7a6510fc55285fbe5c0726a8977e13a39f5759c665907e3b5c110fa79e001578e1e74e009375358db7bcda6850784ee0c21773d1bcca8cb69ee75bf04c05f71d53abd42893921d58b4157962942d6a93294425470c4b0e5e631cbf4772c3d4249e104f904a092d9c04c9e3f5a7063e664bc5c52b561544ed4a66ac171b9dd1f983878c2baefea7ef9c36bbbfac77ece9ddcd394daeaefcfa5333eb5ede6c428dfbef1cb570fcb95fec2e8fa75b159e6ee94843a55c1c4bb92a99ce48c94b0ebf74ab9ad0cb4937f68373588db0fd6432500c96c318ac9a69db67ef1671947c2bac3a87ac7baf8dd719e104d6208c30b9081485e5110a3b300a6b225219e52b7ba4620211c815b0c4a9b6678ae9f48c9bf5f3d5f750509e34ee5abea5acaa6957c4d8e31dc13343654fb61ec759cd8461d6bb7c2b7c21af8ab2e7b090ebc763705a9cee2ffc996533cbda79994559adcd596d0edac2ba92518c574218efc0ecb50e6206dcc77933432d3a3354a6b2595ddd6c568542aea78b5c9542aeaf8b5c8d426ea08b5c1dcb367cec7f5a46b28dd3e922ffea6f7d3bcf5266196f492fb5bec73a69fcb34bc394b34b239e5d720caceb484d222a9bd4c0d28e3ddc0713d29b748de8a4ab490137d604de8bb2b67d75adad1625f27e9a22ef4d89dc4457e4da94c8399a22d7a1809b6a02d7c5b2343796ccb637eda619c351af49b0d3389aa45c4d6e66504d447f19a82c5b0f4b1ae68359b1aa5bb2d5c79267af4c27cf40eec966a5993c2d9899223cd049d49248a264725049d4004b2266e4ad28cbf12651333a891a52e99f1b40fa37a2c05b0700be0f45cb0101d0d218b35ceed2e7876ab913ac67f600c920feb688f7aa3b988bf83d8b4df628f87dc1ec7784752db02464b2f85b7a9b84cea09f8597366c23f670251347cdda3f15896e96763c63852f0c9511f7c52c8e95bc6cf1bc56c9bb1f859ca78bdc8442eea08b9c432177d4456e8a21b3462fdbccbb4cd72c6b9b8db25273acf5a888b7e20acac656918e6d7fca49750ec04935a3c0bb0400de1c0367bcb2cd9975aa552d30efc76b875343f57eee667c675e66e65ba1f3c15f7264d1db84ef9cc4bb75c3bc1baf983631bc1d08aa31774fc57bf5e0de4b3f32ca3bb5a4aca1a7a635b4a26cf8c0006c3897f22207e97a91d614722f5de40328427a0740481b043c8fb773323f66c33a26d31bb3e983e536ded6a04649fce2621b5e3137cf3bf589ecd5d7f01b83f143a732545b2c99594af44394ebc094ebef96d39bea7de9546f87a53a6f3ee5ef718f3b9023c9d91ef916d24a65ef3b00b307deb06991a2434c4d8a81a978e241dc54828d9832a2f69811b1841d8c191163e4108f0a5e2b1a445b511ee5988604e0983a60e055f86dd971be7fac9f32e0d568f08e94e4872292ff3d34a6247927aa2418a65b1274a69087eb2277c11c026fac1f9f1187906c56e121965a2cb65196033dc2b0a783956d7dc9696563adeb1c2e057bcea4483e1bd1dfa18cc01c0aef6f1804f2f59ed782ad758d71af338a7b1de60fa8b628268d7adb15f779a379ecd9c50de533bb529e660ce269dec0dc988fa7e98681b32c3b5637cb76c7901bf2dc8ab87a66abac465785d7bccbc4339a8ea707e61a786fd8517bd435d8352d8637874ff4b5f1461a6cbed3726eaaf32d035e260c673c2f4ae7f2b7bace806d8cb2afb75f4094a0787698c8b3439f14b243985a5119a0276649ac0b83ad5c2ad301d2801bef680b7906cf8647f2c78c253b758b78d022e3285ea1b1ab312a1d240762d2b0c154b6d62b69c3b2360d7c10053c4513b81795c70fd3cde3bd3164e66d58c7886e0dab0f25f6345db10fa63cea74c4a3fe69aa79d4be14f8e108f8fd3135f07e183833d619a9d8888f55f7a7806762798c351606f0095439d6ff45d617ac1d99cf737f0e2f0c1d6f9063e5f522ebaf52d15090e1175921ec39f22a720ec0e4644691af6b1403a9749b85a4db8f8ae93688029f8d800f89ab810fc6c019870558dab1b6052b3758b5649e28dbdcde308777b6e5f0052a4b4517324bb9253c5d738ca3adc6cf31d6b5d40a9dc3cb8162fe8efdcd529af95a95343d8492bf1093bf0a907f34905025c62194df9a83f82d53d16f0dc5c059c567ae41547cd8ee15ea159f4329da8a30dad868cd20abfac26aae4b79f871dc000a1375e582800ac861885c797c0471a1b1272b64acb5c096f32ce17f3b551416b733995ca7e2c576def056bce40f5ef162c3a7b966272379c52b08e9a90ad670caa916234ed55471aa233064961716507961615a796124e55f1761cebb9c9a7f1d45812f46c073cbab818fc6720b1f5a5dbc47730bed0bc6726ce633f49b2a6cdf90b8b7df820fff7649214f0425631b93b933167eb6606e092b06d84cd45996d84c6816dc269f67663c3797f0dc9c49c9a91c3d8632d92588c9ce5334d9b1183833d95224353becc77d8832c15e794a6879c621f2e4f191fe923d9a850672844c64a3a55836ca610c744bc1188394b3099f80b084174f05a278b20bc12666559e450a39b345bc0883efdb98d579dd6589559f2de188e3780db3c492652eafcce3996e19cf7499d693ca78e3a98cb71cc9782f2866bc0914f80a04bc5c0535f08914f84aac9453049f8481b32c7a14e63272b8b98468485ec997d1924fa668391aa1a587222d533070a6dd2a43b3357b1825f63188d8058a624fa5c43e5657ec6994d8c72162ef56147b3a05be1a01df5a510dfc700c9c957a6c804aa767660605ccf65429d3cc6bce2dd36e9fcff6f4d0cc320a41bf4b017fb2d2fa5d6c3d9bcd2172f8ca79b9384845ca9914b72722dcae50e4369fa2e0244d6e6761c0cc3c4f4e05d86792d06c0c98b57b4e3188760f3b0148bddd5340d17e1a427ba54a6ab41752d9fc74dd6c3e87423e4317792e857ca62ef23c0af92c5de4222a11cf4612715e65b5443c82023f0701bf5f117c3e9531d760bea985c1260b392d00bbdbc2e94fccb7eca2947b9e1cab44b66b6805ae7e49d6d758243aab54f2793125e75a4c4e7b8a085b02c92a0ef9bcef9ac538cad25725d60514f5e722d4ffa848fd420afc3c047c741535f045145fe7637c354892aeac83b1043ced683d55e1713125cd3a4c1a76eba49b4a3c4752945e8050cab66c54a1b48452e2424c09b6cec0a6ef408bb291bca33d5fccbb5ac68b71751a9750125c8449604fdb911583d169560b4a294ad72394f652a47429e5912fd6f5c8cb28b12fc19ca6a2d8cb29b12fd5157b0586cc6a1d1b0ca2d6c1cea452af75aca4e2b99c8ae78ab4e2398a626aa32e534753097c2592c09baba925f02a0afc2a047cb722f83114f8d50878dbea6ae0c752e09b10f09314c18fa3c0af41c0772a82afa6c0af45c09965a8801f4f815f8780efa5087e0265e49b758dfc444aeceb11b157298a7d1225f60dba629f8c20e7f14550995c26eb9d75a836e19f9d3395da3604ecf4296c796cb2f8a90ec853b0746125f44d98480a45f9a99435dd8c58d370456b3a8d02bf0501dfa1087e3a057e2b02fe9d22f81914f86d08f88a9a6ae067528979bb66629e4501b34395cad405db72eb5cc4f318abce17f2fdf316f2bf16f23d4c0bf984917c6efb4e87939c30c23664cc11d65b226cbad8b2f6f6d65315a9cfa6a4de8a49cd46a45897bf536fb69b927633049bcf9b63b412b5ee564a729d43d9c09d880d3456b4813594d27769dac05acccff2e59f45a1fa596afef678de43cf36509dc32d6541c00bbaef4ed9276fe33e992d420a4f56ca7f9f8b2537ab5bdf6310756b76065b1526b252ddfa3cca66ef436c7683a2cd9e4f81df8f806f57045f47813f80807fa5087e0106ceaa35ec2434ad6acd8594d80f2162afdb4b4dec8b28b1b7eb8abd1e4366e11f4ec5fdf874915f4c19fa2394a1b343c1d41b919750fe7387a6ffbc94027ecc20a62d4e4d7489d9bd37d315cbbf0d588c0cf871c484fe5434a1cb28f02710f02eb5d4c02fc7c059623f4925f6536925f61594b53ead69ad1b29e0673481afa4ac68a7a6795e45013fab097c3506ccd29e1d86e59d3ccb005426cf6ea2acf079c40aa7edad6685d760e0cc4bb2e3c0b4bce4b594d82f2262af5214fb3a0afc25047ca322f8662a67be4ce5cc57d2ca99d753e6c88e142be32dd94e1433ac7f6cf89b0d4fcfb5a0590d8a4d305fc1df2ce6ad0d568757b1dd1b28295ec3a4a89d90a283f57b81610f6fd8b348d297e1464a86d73119f6163274b6fecfe6f569f6cd0aeb77fa126ca124780393a012480bb6fc8bd5785562bb8932df3711f32daead66be3753e6fb1665be6fa765beb7504eef1dc4e9c5159ddead1443ef220ce5d65163e8360afc3d047c8822f8ed14f8fb58da2a82df41a5ed2e2a6d3f482b6db752d9e1433fd7d42960d7742725c547feaea96380aee92e4a86dd7eaea94b80aee96e4a828f93b9a6493c3eb5a52adb28f3fd0431df1e75d5ccf71e0c9c99efa794f97e9696f9de4b51c60e0ad3a9e8dd47b1f305c2ce0e4576eea7d8f99262e7abb4d8798052e26b4489c6f5d4947890a2fe1b4dea1fa2a4fe1691ba5451eaed14f5df51d47f9f16f50f534afc0f51a24e7d35251ea1c07f40c0bb28823f4a81ff88804f5604df41d1ff1345ffcf69d1ff18659cec203bb258eb1c70b1f63825c5af98144eb1d629c062ed094a86df301964b1d635c062ed494a82df31092a1b4eb136888f992c529c77f31465c07f2006dcbc819a013f4d19f09f9401ff9596013f4329f137a2c40645257652e0ff20e07f2a823f4b25375b4cac532e3c47496d9a487dbba19ad4cf63e0ac7b24666a768fbc40891d47c45ea728f68b14d9e54c246fb15970fe33ebc65b4117f3b96f73b9df29e1134fedd569057ccc72b4619f1f632f7acfb79e16f0e5f0f3f8bdf49bf9c62c31a2d8918f28ca05f32b0dfb28811c3ea26f1f1498c347930ac4360af3f993253c542140c6c72c8bc4d82b1ce5549d20fb129540e59104daa498402f53e01510f02715c15fa19c514593704695cc749cd1ab94129531861aa929f11a055e05013f4d11fc750c9c65d6aaa938239faeeb3710e03cbec5ef9e19402ebb1d57b003c8d530bed001e4ea66b201647d59a901e437295baa81e536455b7a0b03e76760e916116f53c87be922bf43950fb5340be37731fb6fce1eced923f6afb3515e9243a852b6fcdadcf20ff0b17cbdedfcf094788f329e3abac6f33e653c75358d6717954deb21d934a7b15a36fd8092ba3e5625b237f15d22d646e3ab6d72787529477162d487941c0d3039d8463b6af81f51f80d3553673705dc08139cd90fdb737f3caf13ce3706732366f5b279ca35b18f29bbd807b18b6d8a76f109a556634dbe3ea5a4de17917ae7be6a527f4649bd1f9518729a855d35764f475451eb732ae62658ccace3c03e15372f71845e5e62d3a55156de2a305417d07c4149908349501f956038ffab942f87b71b10e9ad8ffa9292a52926cb3e29ca52f68c351599bea20c6f7fc4f0beda4fcdf0bea6146ea6995dbea1809b6b027f4b01b7d004fe8ee2b925c273b5266a3c7f4f81b742c05f5004ff1f4549ae26253f60c0ccfbb4d66c57fd8801b326ed015493b64d5a4dda9fb07818ed6d11da373755a3fd674a89769412edd352e2174a893c4489cf1495f89502ef8080d769a606fe1b65981d3177ca7650196bc03d4f0a78755d3af25ca3352ff0168adfeed9f639fcce2e7edaf26d1ed81be97297f0d9f839dc313bcb9dedfe29b67077b1e19e1b2fe361fd5276113b27e1ce73b8332f509cd9f83bc545278c0bb62336dccbd0aeb03a05acb3f4783997b0d87056ccdaf23199932174b242abae50f8833298ce88c114ecaf66307f62e02c4b75a1b254d7b4b2d45f9412ddb0de284525fea652ba3b96d26ce937dedb3a55f4d3b2151eaca1626fdce497a6b9be6f5bf3d9b8760fad63d7ee1cb0885b86ec8d75bf2be576558ae4a2595cc245a02fd7c65e241aba2af6f50fc61e3be5af87a97fca9f6112e03d03003731707e6c92a9bf55748c023f2800f03806ce8eedec651af45998de085ad21194a322e81d5004e5a984ed1340c256a0c00f0e00bc2205de3700f04a1838f373fd103f37ad859a9fab4c81f747c01b288257a1681980d0f2ecce9dbd5568a94a493e1091fc5645c9ab51e08310f05245f0ea1838eb061cacdb0d588312fb1044ecef14c5ae4979af210178afbd28f0a108b8a9085e8ba2e550ac7edc528d96bd29231f1640deaf4d810f0f00bc0e45cb0884961e8ab4d4a512746400d6528f021f1500787d8a96d1082dc58ab434a0c0c7603d908ae00d29f0b108f83b8ae08d28af354ed76bed43893d1eb3c3566a6237a64c6502622aaa33e2f7a5249f8815cd8a92ef47493e2900236f42493e19ebcb52943c87029f828037cf55036f4ad172580025c5fe94e45311c9772b4ade8c029f86802f56046f4e814f47c0e7b556036f41811f8e15a08ae02d29f01908f80645f05614f84cccce15c1732953cc0f2087b6a68afe590114fd0750b4cc4668d9aa484b1b043ccfaa6c1a26db193a533be34c30748fc32d40faabf2f881cd0dcbe8914a6c85165e2506c7489b7c80619c64fdbfd5fadfbc8d6194b631a8adc3e7986c1420bd38c963722903988b18c0aa03d40ca01d053e0f01dfac08de9e022f42c05f5104cfa332dd110164ba0e14f87c147cf5c12ae01d295a8a115a7e55a4a513e5e816208e2ea6e8e83a53922f44246fdc464df22e14f822047c882278570a7c31d6525004ef46811f8980af5704ef4e25680992a0e51413b40725f91244f2fb1525ef49819722e0396dd5c00fc4c0593ff75213e9f5677d9f6c5ad87c3e7563391f6b72e66cabef7c7a1015fb322c76b6fa42cee4b1c7d7d8372af1f5a2a85c8e351715d3a93765612b02a81bf5a1245f89483e50d1080ea6c08fc26ad28ae07d29f0a311f04d8ae0fd28f05508f89f8ae0fd31f0a6d6ed31660af308b6d0c00328a98f45a4eed55e4dea8194191e1780190ea2245f8db55cf2d4241f4c7983e3316fd0ca80eb450af8d8dd6c3ebe5790d84b8e5d97f14f8af8889f730ca233ea6c4ff22eb1ea992a9ee4104ad6133059599d76a0e531a5f75289690815d389584c3579b8855cc7228b03e62359dd780c7fad3a93662895dc2721c95dda412db90fa5143b1953aca92bb9fd13d23bbf30df90d30654941f46c9770a5534da03df724e9ddefcb9e114f5a722d46f51a47e04057e1a027e6b4735f091146fa763bc1de04ad7e13ce54a0d7bf155094f3b96826c3dc6123e1b5dce8196a9ee4e6927b3ab703d8a92f80c2a8b39073d62994d25eed154dc675256669fda3d23909310c650b19f85c5ce1ae46cf92bdb742799142c5c89a13aaf772c25cfd9983c75803c8589141929263ca5bf28781c25c53998145581146cb2b9631b2a718ea7b2e41a244bf6e8ac962527500aadc514ca4d9225f1acc7129bcd015a298e249ecf67e02c1665b10a1513292ace45a8f8b1931a1593a8ead17901548f2663e0cc3ece3735478ca65062af0b40ecc3a86e9a0b02e8039a4a7172a12e27d3306416fea254eae73ef37ca75306b81e31c01d5dd50cf0700afc62047c7c3735f01914d997e8923d9322fb524db2f329e00d9ac0b3306056845d9678e1999579b999ceacccd954825e8124e80b8a095a808133dfb931b9e71e60b0b5ebad441558ae85b75b207246259b63e9ccd2b4e74ec2b3c7d52a338594b4575215a9f1bcc2ee3df13c9d76d21cca435e1580879c4ba5f1d5481a37efae96c6f328f04d08f80a45f0222a49aec192c45ea7244d446e60500c0a77763f8bd772edba9e4a121d41297a2dd67ba0a8e87c0afc3aacc1a4085e4c816f46c0772b822fa0c0afc7aa7e3dd4c01752d9e206245ba80e642ca224bf11917c88a2e48b29f02d08f85a45f02329f09b10f0af14c14ba83c7733d5aa4a96e7668b4162e61cd5f3dd124ad95b106527f75453b69402bf1501afa308be9402bf0d015fa508be8c02bf1d01dfa808be9c02bf0301dfae08be82aae66dd5ade6ada4c4be134bcd03d5c43e8a02bf0b019fa7087e34057e3702be55117c1505be0d017f4311fc18aaa27a0f5551bd37ad8aeab1945bba8faa9dc97de764ad31fd2e95e3a8b8efc7e2ae61385d2a762d96cd85294eab5eb89a4aba0790a4db74905ad21d4fa9f520a6563d0356cf971bf99e55f0ee4ab09a8f3f8192e4214c1276db2f518f5389e744aa3eb13d806af649545a3d8ca4d5af8a69753206ce8479249586663b1af8148a924703a0e4548a921d582da8b71a25a7519ee731caf33c9e96e7399d2aaf9ed02dafcea07a0f9ed4ec3d389312f9295d91cfa252f46924454feaa396a26753e0cf6045ac22f83994a1ef0cc0d0d750d9f359cdecb99692fab900a43e97e2fb79aceda6c8f77914f80b08f8fd8ae0e753e02f22e00dfaaa81afa3c05f42c0ff3c580dfc020afc65047ca722f88514f82b0878a57e6ae01751e0af62ad4e45ced753e0af61d6a2087e3105fe3ae6571469b984027f034b5045f04b2947fea6ae23df40953d6f69963d97517cbc8df0f1a3221f975365fe3b5499ff6e5a65fe159412ef614da6fe6a4a6ca494789f5262575a4a5c4929f101a244b9016a4a5c4559e687ba96793525f64788d8e315c5de4481ef46c0b729825f4335633ec69a312c3de1a420b82d9e3dbe51c29fd93b54383bfeaa3478aea524fa846ab90e153b93b3432fd80b362960a8255331e6067c62be8e22fa53ac35a448f466caf83ed335beeb29b7f8b9a65bbc814a892f5201f63bf889e2e24b5d2eb65049f8159284cd07aa25e14d14f8d708f86a45f09b29b2bfc1ccbe8ee1ddbcdbde007ba198b365cfca3aca50edd5b88592e25b4c0a7648413f3ed0e99db43291ff2ee2f3065565b895a2f93b84e6b306abd17c1b029ec7a6b69a995c3906b77e4d6fe5d8f748b99bc786a391555ca9c4f63f0baf02238cfdb4b77e2a124bc57e30f1a562a944422d15bb9d4af11f91147f61905a8adf41555d7ea2aa2e3fa75575d94a659d5fa872cb9b6946186cb0691edfe65725c3dc4935b87f451adcaa438e77516afd86a9d5dcba1dc067e1ca1d8cd9b470db53b54f4c649bc333c9025145e8e43a14803de9ac5c69b89bb2a0df110bdaa1e833b651c5d51fbac5d53d18320bffa766d17d2fc5c75f081f7d0f51e3e33e0afc6face1ab087e3f656fff60f6d6c7550ecee62f8a2d4fc30e8160a3bb0b0db919df029ed9d8a112a5bcdf9ff9277698cd62e1b3ec4a2c3ca46296b1d490132ddd9b0d3a56ab62a30f5066c4f2a496193d48219bbac80f51061a8be919e876ca67c563fa9d840f63e08daddb7231b6117359703482f974048f5039a07cac6c0ef86e885a0e7894ca011562480ed8df7076795e602c156b346619f61681ec6fb96920fbbb23b06b391ea6be8c70072561454c42be725a34c79cdd8e9728c5f81845782584f0e2a16a843f4ea9531953a70157a7ec2284b2f4a7b738e2094ad52a88aab987aaa9fa24055e15335c45f0a7a89a56b51851d3aa1e4ba7a6f534e53b6a04e03b9ea118aa8959da303586765292ef8548fe8ff5a322f9b394e4b510c9570f5793fc390a7c6f04fc0d45f0e729f0da08f8bc116ae02f50e07510f07714c15fa4c0eb22e01b15c15fa28af57abac5facb54b15e5fb3587f85e2a301c24787916a7cbc4af99786947f6994967f798dcaa5fb04e05f5ec7c0ab5bb78d53a1be360dfc0645fdbe08f54346a951ff265544ee871591cc92d866c5f9c64ac35ec2e45e18ac521cbe4525461324314cc5c4789be22c07e1acc76835cedea1386b8a71c65256d6e3bcb351ed4dca59a7baea2ab7772905f74714fc53d128dea3146c968a29fb48fd3e95479a6be6915d9431b5408c49b5a7e4038aeb9608d78b158de943acdfb2b5756b4e33c2ecb79c68a10de021061ac32c11db5b5756e3cd077f8db7be98cf8d9335aaed2f6478ff5ecc563176f2a59b993cb642d9cce1cff4e2aec591d96cca95bc994fed7e951b635d9a41c44875707e4499466bc4345e50348ddd94511f104071f53105de2600f04fa87cde56339f7f4af1dd0eab508e51e3fb330abc3d023e73ac1af8e7944fcdc30a8dfaa0d0f04e6f754ea628e49d00765fb38a1bfe8252b403a268734545bfa40cab236258aabba67e4549de09917cbda2e45f53e09d11f0cd8ae0df5075fe2eba75fe6fa9ccd65533b37d47f1d10d3393716a7c7c4f9949f700fccfff284a7a6852f20305dc5313f8478aeb03b1f6e60435ae7fc2c0d9998807a522755f1af8670ab89726f02f9475f40ec03a7ea5b2621fddacf81b958a0723a9b86a925a2afe4ed95e5f4ddbfb8322bb5f0064ff4951d21fa1a4f164354afea20ad50158a1ca46d1c7f2508b7825d91ec3b437e02bbbc5d5624f3bb7c0700e5dca157debad958addbf292a06625d6d8ad6f10f45c520cd369b1123ac637000d66162e0fcd40984926953d4288961e02c9f0fd1cde7718a93a10170520e0367f9fc50cd7c5e9e227b1842f6af8a6457a0c08723e05b15c12b52e02310f06d87a98157c2c059861889399196a813614bcd1673d731dbb077d30cc38154a6681885d050aa4843158a86d1544fe00463a4d5381e698c322659bf738cd1c670a39f31c5186411a4a256554aad31d8c8cc3435b5aa61e0ac8a3256b38a529d021ea7095c83725be375dd564d8ae80908d16b1589de8b029f8815f4d3d5c06b51e09310f09314c1f7a6c02723e0f72b82d7c6c09b58b753902eb20e3906db27aa92f5dbee142e30c68bde3e83bf6166e09eb602dfb7315931c1fa03068b8958acff6f111f9a9fcb8da58ce4cb68c9eb500ee130cc21b0f855327d5d0a7d2a86ce5ed8be332f8d690df5a8049e862470c1e16a095c9f029f8e806f57046f40b174b866adae21053c4313b81145c74c848e4d8a74ec4381e763532866a88137a6c06761ddfc8ae0fb52e0b3b11a8c22f87e5462166079a9d4f04e316703536caa9ced5172c074ce457cc4a1809f128b9f522afb214773bfc4568ecce213e9ec83d16758bf1759be672eaf05399341578a8d5cedc5faf63c5986b99063b2c97cf30dfb04d2a5e05451763d444c3382d3929dcd5ea416761d4c6d40b20995448548123da99844395412cdc192c8dea09ded810be95351a629161f1b529f4b0da9cf4b6b487d7f4aaf224c2f564ae429e9d18c4a9423b036cb6cb544694e35e3e607306ad80203670b128ab114607d130bac171558d9cf7eda8b9f8a65938375421291b6a4345a1840c3b41595168b90b4583d472d2d7229435a8c1992b3d9b1ccfbec0b764ef14a3101586e1deb78b3e57c9cb4188ca4d8b3f99c956d6afea23595c58ea4b258495a59ec002a4d970460a56da8342dc59aedf3d4d2b42d25f9d200246f4749be0c91fcb323d4246f4f49be3c8041ac3c4af215584b69a19ae41d28c9572292975394bc2325f9519807285193bc13959f8ea6f2d3aab4f253678aa1630260a80bc5d0b10843bb97aa31d495f291c7613ed21943a6d6f47a374a52f17edd28595663b2b0dbb1093fab124f772ab58e0f20b57a50e02720e0e515c17b52e02706007e20057e12025e4911fc200afc6404bc8222782f2a879c82e4901d67abe590de94559e8a5925db6c1bdb95bd43a8bbb2f7a108380d2160e3e96a041c4c25dde901245d5f0afc8c00c0fb5149772696748c2fac89a99210fda918cfc262ac67606db211dc4c96083370dea855250750929c8d49c210d8b43ed5ae9981482c796dac5b738c91b925d2e3c5a43df5a5d1e758f257f690c14b7f74f2df9a189bfc57b78c667ef153d3fc0661e9c36ed75a2ff6f18874e888e32b6e68fc6cac4cd294a79366306500e76206c07a79e5b12073ac87ce4c48d549d88750bee83cc4176d395fcd170da1943a1f538aa5143b126f9ee806925515d8946b259cb3dafacca1941ceb30396a92e4ca35a72a711f4a0de65ca03b98338c72c61706d0d41f8e8133662e8ae91f64318232baf588d1ad58a766742329f08bb1befe0bd4c0475196748966aff9680c98b9e64b530166ae8e001e830137b76e37a4025c9bee691a4b51711996a998c53bf5aa74978c8ca3e2bc9c2e26d5f7b91d4f51768526651328f13762e2b313aa061af05009efe10e6ab59d8954c6b812c918752e54cb18933070e6bcae4a85339f75679329ceaed6cc715328e04d5862305729ab9bcec9a93ac97118951cd720c9d1e022b5e4984a29772da69cb3f997d3dc71867ebc13ce9d011b1575a751125d47d505e4b6d5d892ecf4b7cf9e4ec9b1d9af2ed03190adbb0fa7e2be9e729992037b2fa67436ed9e41c5790316273c070e8f3bbdd3e8665275951b03a8abe45339690b929376ad57cb49b328c96f0a40f2d918380b7f732acecd67a7de028a925b104ada6e54a3a490a2e4d600289983813377705b2a94f4a581e75294dc8e5172a51a25f328f03bb02e1d45f0220a7c2b025e7a951af81118389b9e74672ccba727cda768b90b6bba2ad2528c81b3b188bba9b1886d698d452cc0ba64da1a19ee92b137f62a49a34be61e4bfe161e3ada131d32f7121d327eb1531d320b31de984334676490373b9cddf5374eccff2d3546f17168fb78dd2569707a5fcc672f2394d9fb39b3cdca689eae7c14eb8ba8cac4035865828dd14f357a71e4628ededb68660cb218ed6cfdeb647431faf0a9c2632d89c65ae1f240c83e1643769574aa18bf9f6ea473f4f4624ae20731891ba31277b0fef5e0bf3b5872d9ad80b2d2aa487524e5ba1e425cd7f86bd45c5709a5f276aaee8f4fa972fadab056818aba4b28751f46d4dda6a86e29d5f27c44b3e5b914036679ecd15480abd3dd00cb283a762074bc72ad1a1dcba9d47f0c4b7d569e4b77b888b7e9bcfdac788b109e1cae62092b28e91ec7a4dbdf908deef6c6042b5e16eb04eeba8ab99bf63a767b74669c7078f6096fec1b1509575289f30492387d1513e7280afc4904bcc7756ae0475319e129cd8cb08aca084f6b668463283a9e41e8386db31a1dc752a6b61333b56e8aa636486c3059229eb0770cac7da2a1bc04fcadd753741c45d3b3084d3f2a5acd6a0afc3904bcd70d6ae0c75326f9bca6499e40359c5fd06c389f8801b3db17636507fa5edb7ce88f0da67efea1ca40df4954042f21112c39fdbc8fdfab377baa4a04275376ff3266f7f27c387c24516d2bc753a8a1ae577487ba4ea5905fd5453e8d427e4d17f974aa97e4f5007a49cea012f90dcd5ef133293eded4e5e32c0af92d5de4b329e4b77591cfa190dfd1455e4321bfab8bbc96328df7344de35c4ae4f775453e0f43665d45bb5211d967c1f3f994c81fe88abc8e62f9434d962fa044fe4857e40b29e4ddbac81751c81feb22afa7903fd145be98b2b94f356dee124ae4cf7445be94b2b9cf356d6e0305fc8526f06514175fea72713955b3fc4ab3667905556c7f1d40b1bd91e2e31b5d3eaea4f8f856938fab30603619e2bb94f209ddf8bb9a32baef358d6e1305fc3f4de06ba8d4fb4137f5aea552ef47cdd4bb8e4abd9f34536f3345f2cf9a245f4f01ffa2097c03957abfeaa6de8d54eafda6997a5ba8d4fb5d33f56ea248fe4393e49b29e03f35816fa152ef2fddd4bb1541ce6b6fdd9a4718618e244d10477aad3406258ed4619858673c1ba3a1c2cb51a311fc7421bb7fc97f7ce9ef54d26214cdd86d545afca39b16b763c8ac17982db14b2af2361af80eca2ecd54807dec722b051cd304be93cafbf154807df2fe5d54ea958b6ba6dedd1417e535b9d8460157d004be87e2a2a22e17f752c8957491efa3c8a8ac49c6fd1470154de007a8a656d5944c99067e9092b89aa6c40f511257d794783b25710d4d891fa624aea929f12314f05e9ac08f5254d4d2a4620725f1de9a123f46350d6bc7f59b868f5374d4d1a4e3098a8eba9a743c49b9b87aba2eee298ae8fa0110fd342576035db19fa1c46e1880d83b29b11be98afd2c85bc8f2ef27314218d0320e4794aec7d75c57e8142de4f17f9452a9337d1cce42f51c0399ac02f53c04d35815fa180f7d7047e95026ea609fc1a05dc5c13f8750c98ad3c6811d75f6bf70605de3200f0373170b66ea99505de14014723684947f016257d6e00d2bf4db9a7d601b8a77728277280ae137997426ea38bfc1e86cce682b48d979d0b8212e23317e47dca56da05642bbb285b691f80ad7c40499f1790f41f52d2770840fa8f28f08e0180efa6fc62274dbff8312575e700a4fe84ca455d7473d1a71472575de4cf28e46ebac89f53aeb07b00aef00b4aec1eba627f49f5bcf74cc5f47c7adebfa2443e5057e4af29e4837491bfc1909b5ab7bd5221630b0dfc2dc5726f4d96bfa3acae4f0056f73d06cece553b388e2c6c626b159053c5bcf1b14d0a89f8fe47b9c1be9a6ef007ca62fae95acc8f94c8fd3545fe89127980aec83f53c80375917fa19007e922ff4a210fd645fe8d4ac0433413f0774ae421ba22ff41210fd545fe9322e3504d32fea2441ea62bf2df94cb1eaee9b2ffa15cf6084d97cd06e2502e46ea726162c8ccbf8f4a45649f29dd310c989532a3032865e294d46334a52e47493d3600a9cb53a9384e37152b60c82cfc784dc3ab48893c4157e44a94c8133545ae4c014fd204ae820133073659d3d355a5489ea24b72350af9305de4ea14f2545de41a14f2345de49a14f2745de4bd28e4c375916b51463743d3e8f6a6449ea92b726d0a395f17b90ee59d6705e09deb52e0b30300af477152a0cb497d0ab95017b90145c89c00086948d9f55c4dbb6e44f1314f978f7d28e4225de4c614d34704c0f4be94d8f375c5de8faa85156bd6c29a507c2c08808f1c4aea859a5237a5885ea44bf4fe141f8b03e0a31906ce7a6c8e0ca7c7a6394553892e4d2d289a960440534b8aa6d270686a4539c8a59a0e3297e27f992effad29fe9707c0ff0114ff2bc2e1bf0d45d34a5d9ada52297b9466cab6a3443e5a57e4f618323be860552a220fa281f3a8543d269c54ed405174ac2e451d29e4e374913b51d96a7500d9aa339500c78793005d28654e084099ae94322786a34c372a279fa49993bb538a9c1c8e223da85439258054e98981b3198ea7a6c2520f1af8404aead30290fa202a3f9fae9b9f7b51897b463889db9ba2e9cc0068ea4325ee599a897b3025f5d90148dd97023f2700f07e94e5acd1b59cfe94d86b03107b006596e786639603299aced3a56910e596cfd774cb83298ad68543d121144517e8523484b2a40b03b0a4a114f84501801f4a71b25e97936194d8170720f6700c9cad07b824159bf4590f3082b2c94bc3b1c99114ff1b74f91f45697259389a8ca6dcc4e59a6e620ca5c815e12832964a928dba49328ed2e4ca7034194fc5775538f14da098bb5a97b98914f2265de44918325bad7b4d2a66ebb35a7732951faed5cc0f5328e0eb34810fc3809b5bb79b5372aaf46adda954ea5daf9b7ad3282e6ed0e4623ac5c58d9a5c1c4e016fd1049e41917c932ec93329926fd624399faa22dc1240156116c5c7adba7ccca6f8b84d938f02ca17ddaee98b0a292eeed0e5620e85bc5517792e651c7706601cf328f0bb02002fa238b95b97932328b1b70520f67c0cbc95757b4f2ad6e7739c7b31955feed5cc2f0b28e0fb348117522978bf6e0a2ea2901fd0455e4cd9c68301d8c69114f843018097509c6cd7e5640925f6c301885d4ae5974734f3cb524aea4703907a1905be2300f0e5544a3ea69b922b28e4c775915752843c1100214751e04f06007e34c5c953ba9caca2c47e3a00b18fa1f2cd339af9e6584aea9d01487d1c05fe6c00e0aba9947c4e37258fa7909fd7453e014366e15f4825197d26069f4831fd62004c9f4481bf1400f8c914d92feb927d0a25f62b01887d2a95215fd5cc90a7517cbca6cbc7e9141faf07c0c71914f81b01809f4971f2a62e27675162bf1580d8675336f2b6a68d9c43f551be134e1fe51aca6dbdabe9b6d662c06c19d47ba900fb2c833a170366631defa7d46344039f4799e22e5d533c9f6a987da0d9305b4771f1a126171760c02c3f7c940ab0cf34d60b29e0dd9ac01761c0ecf6e378d93338e44f9908cad311aca7fcc92701f8938b29f04f0300bf8432eccf740dfb52ca7b7caee93d3660c0ece8f42f5201f6393afd320af84b4de0cb2992bfd225f90aca937eade9493752227fa32bf2955466fc36a0cc7815164133ebf6bb5438f139beea6aca557fafe9aa3751a9f83fcd54bc864ac51f7453f15a4ae41f3545be8e721b3f69ba8dcd14173feb72713dc5c52f9a5cdc4071f1ab26173752c0bf69026fa1807fd704be894abd3f7453ef662af5fed44cbd5b2877f197a6bbb8952aa7fed62ca76ea36a1aff0450d3b89d0237cae983df41819b01806fa5c0630180df4981c70300bf8bca35e5cae9eefd4d65f4f2e5f432fa364ae40aba22df432157d445be9722a3922619f751c0953581efa7b8a8a2cbc5031472555de40729e46abac80f51c8d57591b753b9bb4600b9fb614aec9aba623f8221b383dcf74ac5eefad2c08f527cd40a808f1d14f8de01803f46915d5b97ecc729b1eb0420f6131478dd00c09fa438a9a7cbc95314727d5de4a729e406bac8cf50c80d75917752c54023cd62e0594ae47d74457e0e41cecbb36ecd094698a7ecb891ed70f6f1e053c519390bacf7b3f9c938c5d69b5949cece698c316c7a78e850c1baddd70a996b362ca35d2a329427587c9ecabdfb05907b5fa012bf896ee2bf48899d1380d82f51e04d03007f996ab3ed9f4a4ef3dbfe1c0366a74e354b05d8e770a657a9546cae9b8aaf61c86c8a658b5444f69962f93a25724b5d91dfa01c652b4d47f926c545ae26176f515cb4d6e5e26dca940fd034e577282eda6872f12e25715b4d89dfa33a4cdaa502ecd361f23e06dcdcba6d9f0ab0cf0cf55d9459e4e99ac5071472075de40fa9e1bb8ea990e1337cf71105dc4913783705dc5913f8636a8ca34bb960c6383ea10ac1ae0114829f52e0dd0200ff8cb2bfeebaf6f739e5fc7b683aff2f28f7d153d37d7c49011fa809fc1545f241ba247f4df596f74a45649fdef26f28917beb8afc2d9519fb049419bfa3061c0f4e85139f01c7ef29c9fb0624f9ff2807d84fd301fe40b990fe01b8901f29f0010180ff44d9e1405d3bfc99f24f8334fdd32f941b19ace9467ea5800fd104fe8d2279882ec9bf53fe69a8a67ffa8312f9505d91ffc4ba4a3a58b7e65823735d25fdac502596022bd3e82419967227c970de4952af8c5efeb153dd237f518e6044008ee06f2ac147ea26f83f5479314ab3bc6023a968036ab4f5a29507d81cc86fc75aa938ce18680cb3ac23dfe2bdd01869fd2f359673fee78b8eabf6c60cebdf50ebfd28ebcd426e65ec097e483576a4350b0dd39cd9e2226eb5f9d6372aad3993d2720ca6e529092d2718053c1fd8796601ff7b28cf4d4c9b39d627769e199a0839c8ca49853cc458ae45a1a5df321ebabdd087bd2db0109772bd18ae9b3d078185579383421a6f8528b1b82ee4a89053d8d5e8e57ba2855364c5acc2748c627a2c654f30465ba7ced637365b8b2c3f35c3b28d129ee6b6b6e38d793cfdbdd23adfd2cf83b2a738a5e5384ccb3e1e2d21e7b69e83798a2de03a7aa574a7107ce39757e0572a9a95a3341b8f6976704ae9d7cfb2a1029ee78bb8e5eaa79cf34645b7f2946e1330ddba79741bc153679ed08cddadd8639a54a034998869725686fd99f3cd40eb5acccbe8422bcc605e5e2fe031a46ee5903b5a0b56962ce5b500e8f5589d2738df5691627d12c67abf94f2c670cec692acf06a9528fd2663fa0d0fd1aad8d32379344c2bbb865ac4a32e328ee2f910f724e9a46a654aeb2998d6bd7db5a6251dcb75596a3d2f153acad2983d9d2d182a9b2fd24fcd2a945e87617a4d51aed98de36fdc753b0cc17e363ae1074aacf280b53e746a82e9a473558a8fa9181fc3325266875d9a57a3749e46d553d46c40daf070ebdd6c0e04d359d5225434ab4e69361dd3ec4042b3093c7f168bba89ddfa95ad968922171794498d70da2835288d0ec7341a1ca2f795a9cac2e45bba16f3d23b384d6b529acec034edc52a68297b0ab706f9fc99ad1de364084fe512de1a9a6d95b82b03d46a2f4aab99a9b409dcf1c21ac2049e0a255658960fe7fa947e6e8ce034ab4569968f693620a9e74cad5540fb50bf366bba9e726f4ac759988e8521d7a84b2defc87ae0e68a1af3446e014589dc184c1b319d52b436c5d36c8ca7097bace5e1cf903e0f75281e0a301efa933e8cb59066598164de18ce53ddbfc4c191824ee9ba94868598864315359cc42d7a2191227b42df7a94be73307dc78668d94bd2287f8360a03ec5c0dca0ca65dbb7f503a572f85a35a0b49a87697588a21d0fe2a3108b446d774fdb70434ad722aa8742350507f31065add1eb5f53c755d1af11a5df11987e0769d41c4b79c9bbd0d26f8e68e7d15a8d2f135645a77d289de6aba599d73efbf1fe04e65592b552c22d291b53fa15a7322240d51e07f1fea17cd1762b5b8f4faff6987e1d795f4acb05542aaab48c6dcd0f113543e72d1bd7f1af0307553fde8fd26f21a65f73c3bfef73bcc572185236a1a45ce4df83a9920ae3d24a853073580ea5f5624ceb76a407199f9823003de19c44af3dabe12c456bd7e98d6234a5e43e1293bb6752cf30948f80b23ed662cbb39758bab1790ec9bd43503e607f4a9f12aa4de09f47589b7f34af272f416a4aa98c98b0fae59c00356c4669b824959e007c046428b73d7f6f9ec95190e6948ea5543f5c2ae5552a5a66bacc6a4169ba14d374484aa9e91dcfb2f3a1d47b4fa66b4b4adb6598b69393a66bb8fdff618f0cb4a2d8588eb131822c33e4a8f89c44ab8895888b11396d19eddeab74ded0ef54f4cea5f45e41cd6f484d6f7c3e4066756b4de9b612d3ad87623d60296fe1d8a33cac3f428662ed8c81bc6680f74dc2772ada1c40697314a64d574d6dec990aa5d6bd0c1f54aab4a1f4383afd5903c95a3f99f4ab6d29fd56a5525e42eb801a8ee34fed56b8dd5b848d11b8ed8e7e138c45b6a3343d06d3b48b47d3015c03bb9fafd4d50ea23d819f16e9da637b4a8b635319075799a1973d657f1ea5f37198ce9d3c3a4f003239b38e619bdc4fb71924968a061d280d56631a744bb9dc1ac0dbb1ac9dd4c18ac5bffc0ac6fe3a529a1c8f69d2d670b7d13b5bbff3b99f96d7e1961c4b0c6fff5dd06dd54e94d427a4d2bf93aad412dbdf9efc91994f996f142ae690ce947e2762fa7557d46f2c475cc4bd5f3fa5fc924e7f48174a9793305d3a24d5c561d49b5a4e7f4370beaa2b25fdc994af4a4f7abb6fa0907bee857c14ca6f044345836e9406a7601ab452b4a50182d5b2232ee9d84a774ad6535329192043ba2543ba6cf7a034380dd3e0b004dbc18f5bcafee9f4672e04c3484f8a91d3531971283b26945a9d3bbdf67bfa7ee2404acb33a8de1bbc4620d7832de2770b114b667263239c6e5b564757d1f6204adb33316d9b7ad2d4ab11f321b64441d95c2f4abeb352e94b2b6b7365bdb3637f65670967daf67a53da9e8d69db5bc16b8e4bea35c39cddd487d2eb1c4cafe4eb7abc231293ac9a77110f3dceca13f968a91b4e5fefc194666b52e9b90fa3f7d349f9a0fa34fb523aaec5746c91c44738739b0bb924acd5144c5ba21f25e7b9a98c7b95f565ac7c5ac9eb795ef920c7e1d5b7fb53fa9c974a8d35b55157991a8bc1fba1c83c94f4526400a5c1f998068394ebdc720c6801979fadb42e4a5a370ca3953790d2735d2ae3e365a518c87591bd73f62c65c72a17f23045bca7759805b85249afe07cdf204aeb0b30ad276a686dcf6956d3325d3ed2c9a98329262ec49838448309d8e2df33a97e08a5eb45d4ac88f46d3dc816e9104aeef5544f1fee43d2abc527c352d16428a5c9c59426e9970b05bc8f40960e230d7bc64a50358b43294d2ea1c638c2281fbc35c3304a886194a697a6d7fb44e79ab07a6a87531a6ca04641d3d5c0eeefb04bb62529a488ecc752d16604a5cd6598366d942dcfe9cb0c2e054652325f8ec97c50ca1e4cad6d186c1d7714a5d315549f726a3aa9f612a69722a329e93762d28f0e2057c3910c95b23f0c9f3686d2fe4a4cfbbcb4f3905fcb3ddd92672c25fb5598ec6c9d6baafd707b6abefb384aa3ab318d26901a51fdb4d44cbb545660a8afd248bf7e3a9ee26113c6c3010a3cc8345d18702d680225f13598c42d8d647d48e1f5b04ca424bd961acd4cd5d2bdbd11f9a287b634b4fc3289d2e53aaa6f22f97c8d1162278aa2447d935e55ac5ebea6976693293d3753f5b654fb94d55b3e389a8a3653286dae4fa5bf95eae34bb57f2f33fd7e87513ade80e9986cbebbcabcaf4cd9e4544ac31b310d8729d71ce8765f6a255118b5a56994ce5ba8dabbcae87d3a3d64fa963a9dd2e9262a1dd56a51762dbeecdbb22375e30dfb58edf0474c0fa774be19d3795a221df7ccbc00c84baaa361f21b15566650acdc92ca089f8c51655e80a3196507c1d42767529add4af551a532eb2195752b991e7dcea734bd2d95393bd43c5cdbc6bb195d92e887952bec2b150d66511adc8e6980cf096771aacf09b7f5a39e079542b329fdeec0f4a3771228bbcaa2680fd6060a28adb6a6521b48778d6f7febea3fd2e92d4d83dc67ab90d2f94e6ac4d0bfcd374ed474cae6a4017cd678898fff77be1dc5d775da7543ffbd24d32b3be7505adf958a87c1e34fafbf2fddb6fa5c4a83bba91ce8d7fe60f215586f5658cc975d4f4ab53692fb4d3a0756b4fe9926db3b7b100f69af855dc49960f5aabc8ed62b3077b77da236d2de5573719eb3d8175812318f363e51ef607b87fb236cb308ab1033ec9f566c2769eea658e16dcef1f0667f59cc9167030b6dcfd3ddde2791d5f2db276ac57267f5645a6035b0f6a00e06b54baed374e25039d3ac2834925816d3ccbcff759adec352b58748d5585e67a6639b34ad29b914f7b2d8e2b80dd52fc32cccf398ec36801ce334ab5b37a3793794ec8eb22767d91bff278d0de6522cb6761c40d65793c2c1052e185c436e627633b0c4b0170bef68611815cbc73ab054b82f4caaaa58376ca5df5051db18cf4bcaf99120a95a1787a4fbc32489e146c776aa75776879204c5a6a5b3733786eb6331bbdd76f14687ba79c43db8361d25613d0e654440f1545395b7a1b09bac639743d14265d0db9872ae16dbad186bdc3a1acfd52f6b6241214ee361d0ab78749e15ed68d1ca019c21d3c03c8e7cd7d666fa322e2f01b5476087b384cc2eaf02c3ac3e860387b0f4699b815551de21e0993b8fac0d2d8547f77861dcabb9916b906d7a240dfaf8738f43d1a267d7b2376c700d97a17b6efd152fe341a05c44cc3216d47a64883936c65334b36bea240daa6de0e698f85ede1dc45c26083cd4c973b992c029e2e0ac4adade610f778a63c1cdb7e7c85f517e6d79ca35da240dff8610e7d4f84491f3bb5ae6cc110ed96c33a508f7b32ecaab0b4bd411c866dcc932f2a23e3f875b155595eca6d2f4a14e63673287c2a4c0aab82c262946ba4360a340d6fecd0f4749834550634391b3a4781a26df51c8a9e0993a21adc93c99ed985dc778de233030a78291a05b2beeaef90b5334cb22a707b5a12a92a457175879c67c324a78175332ad18be6edb266ee7e29b730562b1b2d46a0a340609d7d1d029f0b93c04ac05b3131d9a4d2281064eced10f47cd8955649902d82b7713451d4c0e6184546545a98d5063af4bd10267d7541bdcb4bdc129e45f37967d042ebf39591a0ae4b2f87ba17c3ae4830620618ce7e78d1b0ae77405deba53029aa5e2673c271812850f5d54887aa97c3a4aab601bb7af279562c4c74fa30d02865c20680b65732553eca6386a240d0ceda0e41af864950230336ac5770ad971ab201cdf6a929e099318aae9efd48125f0b93c46ac0cabc9b5d4481a8dd631da25e0f9328ab5aecb2323672cece5e6425e352d1031bed1e3176169ca4f28db0cb4e961965c65c299a4d1378c11005aa7e05d58c37c3efd2912783cbd97e51a0a82f1814792b5383224345cd5e2ede901dd551eac19859c921eeed30896b025cff040bb340d4f4ff5d9dd4bf3677e87c274c3aeb79ec101e0fd88f0f9bc02c1c8de6d46e3005e1dd4c55439c13e0ecb3092341542d87a8f7c2248acd3177366a8a0235ebc19cb3f7c3a4864d981ac16999ef39eb9dedf351c2638a026133630e61bbc224ac0af0586379e4f672fa2890b4034c23fe20ec0cd7cf98c50344839a3f7b3ad47c18b6d396f6e32c8bb5858802513dba3a447d1426516cb293fbec00b6e2a46ca7741448db39c0216d7798a4d534b06ec3a80dd6160f71e8fa3853cd207b6e987b157b41c49a41af8066d02761571bb0998851ebcfaf36c621ecd3b0bd99dd273190471de53eaf6de51dd23e0bbf23c7ebcda240d1e87e0e459f87edc106f18ee7a53c72d6fa9b2d66e82c4f94916ce7f9c591206e780587b82fc2b62db8799fdd6d13058a46835afc97615254c3455134e7e6b355e292acafc2ce8872addb220e13ed818d5ec0c97f1d2671b50c7aca091b5c5b1a9939ab3bc154936fc2ce98f66612accba6900fd93a1dced16812ed3ac821ebdb30c9823329ec73d5bd6390515a09be0534bfbf0b9336367ddca9730de2ab3fece9bf51a0693d98eefb7d983435e0348db63c95dd103a926faa127df7ff5d454660c5f21e70efd661e96f05a2c63abd6909ebf160d6b9587436da9ed0b589093b8d37eb24ff5f39b009496edaf3727293d6d272535e6b99abbc662937cd35ebb9298d3be46ace1fc955d8b72157a902979b727b3e57a985969b963fc9551acecf55eaf5ca4d69497daed23af25ce5615f4c667a15676e994518b9be63a5b9e8b4fa5c7432612eb16028d767bd552e31373837c9a49edcb4d64be4a6b9782e3780b90db9493624ca2577e1c9251ae4b9e4805baeef504aae42bd2f176c7b93eb19bbca4d5ad9ce559c349f9b628b279798c7e4f6e77ecbc073890eb45c9fca9dadafdf6aafdc94476672d3588d617fa3b6b1426e0ac31e6edcd49633bb6dc87f16766e92c9edb9297599bbfd94776a69ae6722436e0a1bec387be9c14a91b3075e07b697de0fe5fe7f6f73d7816d73f72323c128679360b71c7ecac4104a67a32bbf1671f59935d99e9305f3c4d9b84c9c6385b328e298b24580c55ed9d566e89b8a42690da88079183f87495f63415fb115881dc15ef6704808ef2832c3b2c6d068ad1516adc3e20eadbf84496b43e07f92792bf6be847bd4e811fab1e910fa6bd81d04eeecedb7d1f20ca387a5466874d6088bce15c03e7fcb263a7b4692ce8d80cedfb389ce8e91a4f3325028fd914d74768a249d4f033affcc263a3b4792ce2f009d7f65139d5d2249e75f80cebfb389ceae91a4736f5014fd934d74768b249d6d009d46f92ca2b37b24e99c00e834c3a453b6d6bb5835ca8cb7d6436b05c15513b130e9db0fb1c6d40f01eb1e1eb5b9b190a8ed052c339e09cb6455f38c5b66a3b02cf307c3a1af5c98f4d5e4513bc34fde418232f39823405e6d405ef94c143273c9626682abebada7556a874667b5b0e86c09fa8a2a64139d3d224967034067c56ca2b36b24e97c1464f64ad944679748d27913a0b37236d1d93d9274fe01e8ac924d74768b249d6f023aab66139d1d23496701a0b35a36d1d93992749e03e8ac9e4d74768a249dc7003a6b64a2753e5bcce528556a9d778860ebfc435007ad1926b5f50cff6e38b70fed1ac13ea42ea0a363af6ca1b27324a93c0550592b5ba8ec14492a97002af7ce162abb4492ca170195b5c3a4b22e520c95a5d23eadbc537844960f8bc893406f7b9d6c2132c4d970a111792220b26eb610196235283422070122eb8549e4be8633ad30d5852a19985e18dab8249b352d89ad1f26b1721a2cdd12828b09e169ed2166fc1fcc90686d01ecb54198b4d632e4a05a47ebf732be08822dc462cfa23ce05b17b47b1a864960ed04813378001bc85e1e902112431b5ebb1e90d82813247630b0f9edd1b6440364e57d32e121e18c76fff560512e78a602db6c1c26ad70b1a0ca92e12893db0b94eafbeec94625840bb524af1816956b41f6df2fecf91d33f8784fc627c784668717003b6c9209f27afc8bc87b1e909713267972f12bd5787467e25047cb43cbc6a34071d3349bc80c71ca6068648e0664ee9f4d6476892099c30099cdb289cc10bb804323732420b37936911962377068640e0164b6c82632435c00101a998702325b6613992176078746e6604066ab6c22338a2d9c430099b9d944668f0892390690d93a9bc8ec194132c702320f08934c7b4bac22416491f511eb0762c1a3d7e9dbdc70486b9389be1f7a44c73da5207a5dbfed41df4fdb3ddb8d6643b1cedf5007709b8545e5eb80ca7661527980e1de6ea7d890bb18ba778481d306fbf3fef442f10c86eb674955142ee5b5c3a2fc5c301da67d9894cbad7854a6608758b68736cdf55e501ce5651ba12196efa1117a1f20b443b6111a628115de9a204068c76c2334c4fea4d008bd1510da29db088de25281db01a19db38dd010fbe24323f46e4068976c2334c46a5368845e0d08ed9a6d8486d8bf141aa19b00a1ddb28dd010fbe54323f43a4068f76c2334c4bef9d008dd0208ed1126a15538a1f30cb6cdb6bda53b9b631c622f53689313585a48ca7aeec9ae11386b38d476fa96b0a8fc06748d1c182695353895de49ae4c60b655fc8a0876d0b50256785066a659b31514199f661d5a367e0078be5e99d9966c0fcc6fab6d8635da03b26eef30e9632719d8676df4b37edb27e238e7768ce1b6c8fe47cf02734016ee9389e9d5b263d85ebd63aff1196a0c44872ea2bbf2ec63d0f97b7098b4b632bcfdedf91ccc399da2bff59f5579d8c2a945fc1c16bf91ca284e47d80edc40df4c7851bbbafd6f99e81a03f4f5cbc46e1cee3303b05358a23cf9ff4150a6f7cfc4a2d38ec4d879d4974fad0745d3804cb471529bcb11450fd913503930131eb293d13df31eb26f58f4fd0cb2f4a04c5822f49065cf888af2792aaf012a07677a27e109867d98dc4a7e509addad56c817f9e5f38c3f87c32d0837936f0b8bdadb41397ec89ef597519f2e530558e9904cb68a8a2c212682ee0dbaab2dc45651685d6d5f8356d1d04cccceecc0ad94d1596c056287c5cd4f04ca50f528b432fd0660a387869dddfbf163751789c344ed45d1f63a5e566d9747acda07d746afca5e0e548f8685dd8f24abec0b44e4f9bc1324ead67815a070782628ecfeafa3f01d40e188cc6d17e13e0f374324865672e701af383253243a55f525867dc477b477257a0b58e2a86c3a7c26d48dec43a3f37850ed199d4d74867acc426874de04e81c934d7486bab7756874de009a8d63b389ce5037630e6fdb0840e7b86ca233d4adc243a3f30740e7f86ca233d47d3842a3b322f09d13b289ce50cf54098dcefa80ce89d94467a8b3d343a3f32040e7a46ca233d4335542a37306a07372f69eda17e21ce0d0ce053800503b654ff6b5bbe7ff86d8291cda885077d0623f2c13e3e5b0c53e80d35acafb2f178aee8fa8b6dabf01444ecd96adec3b8699bd43b3c916207b4fcb162a3b4792cae30095d3b385ca4e91a4f20840e5e1d94265a87b6b8546e57640e58c30a96c6178e7677af7b8b62b4a132ce1585124afd8accd104bf7d02671ad0144cf8c0ad1214e59088de82f4147497e66ce91eee07112191837aa1ed65282370c87be59d9b3657314b78dba0958e2ec4ccd969387850c3746198718a3b93073ac8f5664a24a1f1a959700ab2c087fc20c5c1339436c70df5f4c9bb1a1065bd7420ba220821eb23a20b370cf9eb502c58767ad8458f0cc09cb73b601cdce3999e8652ab5caeb22de564fbd440fb5c21f9ac59e06a89d9badd486dac20f8ddafb81339817767569202f8cf2f9f121a51680fb389128ee72580bd05714267d75925497a4a633c2dcf9604d58ddc8ef81d6d1119998109bea561251dcce6c02b0c9f9d944661437db1b0fc82cce2632a3b88dd94840e6826c22338a9bec0d02642ecc2632a3b87dd91840e6a26c22338a9beb8d02642ece2632a3b86dd9c180cc23b389cc286eaad7159059924d644671bbb28180cc25d944661437d3eb0bc82c0d93cc1cc37f8e52f24dc8432cdf43db84fc09d017bf744f9e87e19d5117a2170d6d82cd0060abcbb289cc10cbf7d0c81c0ec85c9e89f1caae9678ff9e2d29e6808cbd2213f4b141b67fcfc67b9d81f5adccc41eae1d0c6c6f2e06c6482ccd14a1a18d547e0d083d2a13eb7f19a1ffaef5bf57020a8fce9eb3ab425d24181a99d3807f5c954d6446f1c0d9e980cc63b289cc281e383b0590796c369119c50367a702328fcb2632a378e0ec3840e6ea6c22338a07ce4e00641e9f4d644671ffc2a180cc13b289cc281e383b16907962369119c503670f07649e944d644671e6f00c40e6c999684476fbd735220f371c0a4fc99ee36743b4c6d0d6081d08acf1d4ec1e9a08d173863634b10ecc7d3b6dcfac4e4f657a6b88edf5d066675602d49e9e8925d59d8c7fe716e40f8109d86764665155cfcc0f5284e641d702faceccd4667cce4a20b89825f43540a1d9e04650a29f953ddbe047b1b76806a0f2ec4c8dfa487b1cc24b7167c4872d00182516594575cb89a980d0733273ae40977f917ffc1ef8c735d9b38b4c142beb3d41657d6d26b68e4a7d254514e7b8350396796e36d1d9239274d602749e974d74768d249d0f8162e7fc6ca2b34b24e9dc04e85c974d74768f249d3f013a2fc8263aa3793af4cb80ce0bb389ce8e91a4731aa0f3a26ca2b37324e93c0dd0b93e9be8ec14493a97013a2fce44a7b0b35d5421ff94ed8030ce0a34c7f01ebf94a13540a1b5909e009dc29784ddf9c19a99a3addf0c849d14c43ecfe7c18fe29dc3453cc4582e9abd2b426884968445e86860ab97666a9f237b6723bbd3a3d018cc3fb29989723f5275d03eda102695350d79826fc67b9142eb209e05ecf0b230c9dbc748f54845f75175612e9c324322f57de02d2fcf4652439c941d1aa9870352afc84652431cd4088dd4e980d48dd9486a8893b44323f53040ea95d9486a8895fbd048bd13f4d15f958da48638693b3452b70052afce4652439c221b1aa9d70152376523a92136404323f52a40ea3561925a8b933adf0abec858ce1ba2ce8c3919684978040e4a45a574086c6f38045e9bbde7b98498e1433bcfa52528efafcb9e91f8102bf9a1f533ed026df9cd6152d9c67077e1cde6bb21d8c24ce21e741e9fc5596a8ce16bd6d97f397b0946fc6fd89a6221b0dfebc324bd3362bfeec9b403acdf0bac7fec6f5b11e677e7f06da499b0230dd647b59c4731df7296cbb8db28b538625d3072b65488893031ac44e801fcf30d99180b486da61edba83f8acb114b407de1c6ecd9923f8aabe137012ab764661e73b77f510f6b3e28d26ecad67db83b4572a9c2ab80da9bb395da8e91a4f647501cdd92894cdfd92a01339ee99785455f6de0336fcd9e959da1360a422b806e00b6785b369119c5ed586e0464de9e4d6446713b964b019977641399515c60733d20736b369119c5f6cf5980cc3bb389cc286ec7723620f3ae6c22338adbb1940032efce2632a3b81dcb1240e6b66c22338adbb16c0164de934d6446713b96ad80cc7bb3672f91281e72df123426efcb8ef3b242acac87765ed6176098e3fe4c2ce056590b12c5639e5682eeb707b28dd0281e42761420f4c16c23348ac73d9502421fca3642a37818d95240e8f66c23348ac73e2d03843e9c6d8446f150b2e580d047b28dd0281effb40810fa68b6111ac5c3c916034277641ba1513c06ea4840e863d946681417d22e01843e9e4d84768a68c5fe38d0827f22db088d62d3f31840e893d9466814ab4d4701429fca3642a358b15f09087d3adb088d62d3731920f4996c23348a9d234b00a13bb38dd028569b8e04843e9b6d8446b1623f1f10fa5cb6111ac5a6671120f4f96c23348a9d23f300a12f843f34c7d672aeb03e64822eb302cf06fbe1380743466f84b399e1d0f862769f9610e6e2d9b0e83d0f58e94b61d25b5dd0cb229ec3c995d8459638a111573e2ce20c60972f87495c6bc3bd1cb1d460f3dfc70900b6bcb0946772958507215a6a68cb0ede0063f4af84497813d211a4b6a623c4d23f34726f00e4be9acde446d172af03e4be96cde486d8b20a8ddc2d80dcd7b399dc105b59a1917b2320f78d6c2637c45eabd0c8bd1790fb6636931b620f5668e4de0dc87d2b9bc98de20ad09d80dcb7b399dc1047074223f73e40ee3b99585edb956f00fb6f39fb661668d0be9b09faba5804669cbed066428f06f4bd97bda72746b132752da0f6fd4c9d123682dbe27ccfee3803adcf4a788c51deddb99be110ba2bd3b68aefa6379e677cb670670e875b6084baf9ebb6b0a87d0714421f64668f878effa242e80f304beac3ecf5a221ce970acd8b9e002cf3a330a9ad61f8755887b8cf6395b0a88b017fb93b4cea9a1aee2e6be619975bc294f00cbdd2a0d6e0c1102176f4f50d8be047806d7e1c26c12d3c04331e961a6c74aae0ffc5a8d57040f4276112dddb4334b34eb6cb930d3080fb51261453a0d88ac8bd3fa42d749121c761d94925ce9e91059e7cf06fd82f723948984ff7e47ea7ee3904519c3fd00178ebcf32d3909d61d50e988d32ebccd011eba159e25240dfe7d9d1381860b01d4c17738bb55d46a896c90ebf0985daab4026ff2213fb91521385bc1eb3479863afa159ea2240e797d94467cf48d27909a0f3ab6ca233d49901a1d1b91ef45a7d9d4d74768a249df7023abfc9263a439db51a1a9d9f023abfcd263abb4492cedf019ddf65139d5d2349674d50147d9f4d74768b249dcd019dffcb263abb4792ce9180ce1fc2a4b392753398f7439572a085ffd7de7dc04759a47f009fa05841a45801698ab120a427f65082513048b31f86640391001112047bf7acd87b3d4f4f4fcfde7befbdf7de7befe53f33efaefbdb241b36fff337fb3cf9ffcfcf5192ec9bcd9779df9979e69967ec17ebe37279b809ae6f995c2ea230311e6772e733cdf117a8f60b76fad8d602b6efe41e2e445c0aa11d2e540137f0f74cda2126b9a09c3848658c5968dca961cd2611ddacb22faf352eb43cd13f196b7ddb7551d1008bccb4a5bce1d07e7f9074107b99ca9da56bc3cae88f92384b5572f601ce9f247116a9e4bc0b6ef69f257116aae4bc08387f91c459a292f307e0fc551267b14acee780f337499cd48c7b1ae7aec0f9bb244e9d25388e00ce3f2471e6abe4dc1b38cd3244ceb53d67a5fda209c64d2d6be32f756fb9e5be7c7798b0a377493a35f6cfd15756d8df63f6e2c45dd1b4d97e2e30e730999774b662eaf394b8c98636f1dc0a66f75da450522b98d1288f04caa5a45052cf55a4512e00caa5a55016aaa47c1f28bb3229713fc824e3c270cdf6cae5be739aea13be5c4673b5bfbce6fd200741e7b30c13b4a7499c469b9f8d9cb9212cc05e104d5a960998dc7a58d6e226d77c9cef81b07abe1c936fa8e71be32fe07efae8d6adf59789d9ef31dae7250b1867d25aea2a70ab2fcfa41e6c5213c0eb8cdb39e72ed791d5256296276d75e92b68cd2b308957f3c413fdb76db65fd294bdf64aebebd784f6ba221333319b4f97178f978beae9683cdbae11da6637fe28345a7f8f86479dad65ae012db37b3607f4a92d53e359a06742ab5c8949d9db2407f4a3ed07dc5b75db0d26fb249b59aa07f13bc018b407bfdb891017f85167bdfd75ba4feb4a7c51a0013dad451e0637f7ca4ccc1e801978383f8f853711f07a32f156f0788d26b9377312f7e61dc3221b0664bd986489642fb7d7d2e5c975ac7688c68256e7c173b1b7545a9db5c2ee8556db8749db3fe52919fdee2a862c3263fd0d8fdbb3b10b22f7e5b4eee70f68b3ab84882715fa805c67a922b20d8c2757658f27c7f99f3b1a45cef5999b35f653137c5b0c503f9c369eec0537f76a21c69399cdbc8b99b5e96837f4ad7043af2e0993b8fe43c3bc0730d7908449ecc37967ca03e69a923089d5bf6898d703665f4998c4b27f34cccb01b39f244c8d21b62b00b3bf244ce20a0f0df342c05c4b12a6c625898b007380244ce2199e34cc7b0173a0244ce236411ae6fd80398889d9cfb4de26989c3a56993a3bc94cec028e1215346f0ccc01d6c12116ced22768a7a615eaa35c1f021d43b2bb06195dcaad0151296989312f03e5da21920a3bb2a945e371d227c06dbe8e34508d079e9f08a043a5816adcda723880ae2b0d54e371d2470368ae34508d079e1f03a0eb490325868e69a0c703e8fad2403516dbdd1b40379006aaf138e97d00744369a01a0f3c3f004087490325869269a08700e8469240f3953e430f80a9e77076b261653c5c576f5fe252b3dd17274bebd3f04a5978ee448704de8810999a25e113656811cec7002f2f9bf1a32afb92dd8d2b8bd6c48d1f5dc6a23c0e36a5e68768879d6903e00bd00e0b42e4bbe5dbb7179c8f76aacb1bd0231732f912f50cf1366e7f339f3b30afc624cf7171399bd46d7db414ed8de0062fe22fadcdf42b3e934ca28069b44db5d9beb026fe86eafca63f5726525f72e18a70c3173331fb98e4d21a6e14481ce214649b0aedc6ff026efc9210b9edad6ffcccb2dbf57549e7c3a0bc34cc96fee2f05d12eda89b66e02b0b31b2cc2c1141631e5c053c2b370e31df4e37486f7d2e8bcea3447e819e7c1369a01a0faffb09403795064abce569a0bf03e866a1fbf5cc0f6826d2d20e68ae05dacd43144049adfd3edf645a79869ee0454ba5f9033aac2dc2949372b3f9e0e5a468695d87c1b07e4b2660df253c4f312c87670c136ffc6f5823d27de1c62f97884a5c0ba2a11e0ea82325a212875334d459803a4a222a71d04f436d02d4d1125189197434d46300754c7667f9daf38f47409f5f91cda5b8d13e6c373d4e49bcd587b228df80d8d3d81035e3329d8e9632f38e6993d1a3e026df4a1267994ace9b80b35212679e4aceebe166df5a1267be4aced780731b499c052a397f00ce719238a95b60689cdde1d9395e1267914acefec0b9ad244eea7e611ae758e0ac92c459a292b30e38278458812fc8466e278d6f25e87ab60b510a205d6b6cb902afb1aec2af80395112a6c6ba0a2bc08d3d4912a6c6ca72df42cb9c2c09536365b99f00738a244c8d95e5de05cca99230355696fb1a30b79784a931a3ee39c0dc4112a6c6ca72cf03e68e92303556967b0630779284a9b1b2dcb380b97388fa5d89b3ae70a341a57d43e98b4e11db282d3b69240cdf779114e628650e9368f3f4bd817357499c652a392f04cebf49e2a41ef140e33c0f9ea1d3247152e74434ce47817337499c052a393f05ce6a499cd48268344e03cfcee992388b5472f606ce1a499cd4930a689c2380b3561267894acea9c019cbcedee14c4e0026d2d24e002e00da3a266d2f93d83b3ccd7fc07df36abfdb48fb018cb79b24e18c6c6616e36c3d8f19a0a3cdd7af83cce2994cca954c72c75bb9fdb4fbc226a3f94cd58540571fbab04adbfb3047d98bccb6df75aeff9bfbea403b3386b1909782a7e5ee1a9089413b1a720e20cfd2804c7cd2d2904f01e4060dc8c4c53b1af25a803c5b033271b99986fc2e20cfd1804c9c26d090df06e4b91a9089f95134e4af01b9319bfbea522712c4f64a9b48e403e51e5228a9816b1ae52140394f0a2575498546b90750ce9742498dffd3289f00caa610e7b92712266266a1713be2abec0b6a8d4b9be85c29138fc33a55331376600bd806933c372e5947b4bd541f8d5953b702ef02298f00ea765a5a4bad8647c09e5228a97b3f6994a701e5422994d41d2334cabd807291144aea165a1ae53740b957361756524bfe13bb1d5ac9ff91b03ab037937290a7acb45f34d183c5ec172d88bf3cd9b34f33b33cf848fbf71afbe7e8f315f6f798bd6cadc2e597e54d12789f102bfee9da6aea1029cfb6568d1b7216c230695f26e73a267514dae4634aff77165b06c23376bf103b97f37c064067390d643778aeee9fdd538db5cf8c8e845bfe8010e72ca4a34cfca4d425eac5ac849eb3e1863e90c9b8a2ffcb5cffb3d7d90b95db2f5f645f5ca3b0f71e00bdf74121821ee912cc46fa20482cfeb109a6f52920c4253adad91f77c3ad7d7088fcbd2633d37e7abee9c8c91fd4e926ad035a0f680f914a4b8d2fd1687f8587c2a1213aa47443fa648744ecd7691dd26868a1873119bbdbbf4c3051be73b589aa8256fa96e99ea8fa3aa595a1fd1d1e626c99fef0528c25118b65d0224925d006ff9edd617a74297ac55a5af1df1781f28850c7a1454fc65a3f234f1e3aa1b9e4d52b70731fc9de3defc046fb6f1cf32fadf65fba97499ee131d17fd61dd247cc7d5ec0c29c04984785d8c430c2ff1afd3ed17eb2ded36a4e1f3f15088f66127603c24821001bad63a983f8cf31724e2526762cb4258adfa163393604e58876920e74ef48fa1c6ee6c54c4ab7ea31ce3ffddc05e6f8ee65bec228783f003b2e440752683adb2eb8a380f0f8100959eef61de3e7cbcdfe4d8cb32fa9f1439b2ab3e79f6dd1052b1a55f7cc3b02ec09a19e8b6eb0162d704df612898585206d74168bf22ee8ad4f0c7376fb88f08b5db4967826f09d14b24855d43747271356da994c5bc18962ff4c25ee12eaca62fd0a566c4e0e5148cdb5c9b11e735bfb6bcca7b1268f779caf7a407e30b4d153e41ce6acb1c26c03743ca732297bc0a028f0b39286b718f04e9373dc98c688636fb8a54f9773dc18b1aba11d37f616ccb1cf0831002a335938ec96d61297819678668824bff42b325352d664ca9837763716e740e03c4b1267a94ace6ec079b624ce22959cb7400f7e8e24ce42959c6701e7b992384b54727e099ce749e22c56c9f924709e2f89334f25e70ec0f90f499c052a390f06ce0b2471528bedd338f700ce7f8639ad2d0bb3205a187806f05d182a5e195da4d1cec19b3d5ce03c20da94725918b45f14a62d6621cc46cb2c5f1a021aff925468b79419f2a5ddda87c252c4c59238cb54725e0f9c9748e2cc53c97905dcecff96c4493d4190c6f924705e2a89b34025e777c0799924ce42959c2bc2b3f33f92388b5472ae099c974be22c56c9590e9c5748e22c51c9391d38af64722ee72f1065b7b997b92beb4b72b1427f725d25f73c0c625d6cda7918c3a1255e1d623e5e68a78a9d27ed650718045d23e72c0c8d8518f3213274ad144aea51b534ca4da0555ec7a45cb70dcad46df2a38cab2034dbffd965af37fb4b8e49936e4dc4a625596f039dd3f5612a0ae577a227e8d7c0778394fa81d45548da6d3f18faf21ba5505257206994fb01e54d5228a9ab8f34ca994079b3144a6a8a168df237a0bc450a25353d8b46793550de1a666b5459f85e9b16c0f81106ebb785aa4010ede171fb1e67f8cd51f38ce67d8e17c2c0e77639a5144b158e212f81f9ce1d4cca558c2bb9e4662eb5f1174d32e94a8c10f785d39e8acb419bbc536a7535ea8892565dad01dae85d5269a9234c1aedbed019dd2d95963aa5a4d1de040f847b98b483a19faff16b3ba33ce11cdfd38f33a93537c6fb3e7fa6bd5cb0e225b471c0a5d07aef0d915e982eee993a0e28601e29471b09fc0cedf53e49981a3744ff0e98f74bc2d458e1ff13c07c401226b1c0320df327c07c5012267193340df323c07c481226713d9d86f931603e2c0953e31109ef02e62392308943791ae68780f9a8244c8d11a78d61d0fe98244c62e1791ae62680f9b88c935088fd38adf0fc95b0a4f10493710dd3f13dbdc49b9cb66f723cb4cb27a581126f741ae864007d4a1a28715249031d05a04f4b03254e2c69a06300f41969a0c4801c0db412409f95064a0ccad140c701e873d24089934c1ae8e600fabc34508de526b600d017a4811207f634d02d01f44569a0c4201d0db41c405f92049aaf74605f08c90d2f4b03d538f5cc03d057a4816a1c360d07d057a5816a1cd80f03d0d7a4816a9c7a6e00a0af4b03d5181c591740df9006aa71d8340440df9406aa71603f0040df9206aa71ead91f40df9606aa3138d20f40df917d503c7110452be7772ff0be1ba6fa425e0b66cda9b35b03df7bec7d1f89c2a6ee45f3bdc20cbfdbc3bd28500e322dcdfb190888bccf84ec6d5a1f28eb8e1999ec6fef5946f3514cb980f8819c9c90529589dc23e1d6fe5012a6c644ee5180f991244c8d89dc9b01e6c792303526729703e62792303526721701e6a792303526721703e66792303526720f06cccf25616a4ce4ce05cc2f24616a4ce4ae00cc2f25616a4ce4de0a30bf0a51d2227df80d836fc476499b4c9602e5d7218e974f9c3ded4af5b9e27cee2dbb839217b603abb136e2b59025ff0d1376480bd8468859264b07a4ab2b3bced4c71f1244e452167219207fab0199380ea0216f0ec8df85887eb6ffac8d0ea42742d20ea4ff0220bf970249bced6990e703e40f4cc8011e7272fc27af3275f656aef6979be42fd9683f1b0593ddba518dfd7374e90afb7bcc5eb296874b3bcbda5d2581fb237b979c1ba3e222dbd6f623ee0231fb86f0e3fa96dcbe8128fd4fd9a9259f49b920626494b68af4058c597f66d20e6a83365a357278736c6b7565a61bdb5d91d7b81abf143c027e09b15c5c64ff0bbe5c4c6b9f4dd03e7fcd6685f9d4b9bec64590ada125fe16226c9218e047b5173bd794f42a1836fd1ea6166d71f8db7a4b16df77d0a3ffc1e4ebd7a22d466fa0d9feb9e50ddef2942262aba425d70c8356e91e24620e612e53b945664368a5399238a9a1665ea627707691c459a492f351e8cf9792c459a892f36ae05c5a1267894acee5e166ef2a89b35825e707d03a9791c4a973f3eb6ce05c561227b51a188df324e05c4e1267be4ace0380737926675bf1ce29f6f7e8d0d131fe32510879947167c235fae048740a1cb5e05af71c12ed1f30435a8149ebfe32213ea5d41776eb012d70452653c7cec8d49815f2090c84ba497a3696a9dc7f391838bb4be2a4e61fd3385702ce95247116a9e4bc0d9e9b3d247116aae43c1b385796c459a292f32be0ec2989b35825e7d3c0d94b12a7ceca0a3b01676f499cd42322689c8703671f499cf92a399b80731526674f933832dc6db45ee04f296c36311368bf3a6d1ed403469aab86985266d61a35e614bd0e4931ab31295bae9e3b8766e36a7ab4cce7e80cabe7c703ebea4cd6555ab0d6b71bf4d077ab6f0c41b635a4406acc325a1a20d7940249dc194c83bc0e20fb4a81240e8368905b02643f2990c46c4c1ae4fd00d95f4e849d58908246f9328c2cd762522672318be3b59082e6620e63f11d04c39e014cbea12d6ee9e9a6f51e8acc775b10fb73dab2da9970d30f64528f302d07eee920e77760c9b7dc7efd3cbf8f883a2ea5b5f477807f1093bf579cbfd44cf31f70dfbcdab853b103cde2699b08de3049c2c121a24a99edc770c1128d156bf68467ef9010991e8907c27cff1070f3f88a785b8c75b2b9d34340bb7636e34da92d5563c5af0b80729d902384faf8adef624a35be85b6dd558d8d5fa0ca5e7277fb7b8d215761a862513f0b5dd4502675c7cf8d2953792ac732d076d79506aa3139715900cd9506aaf1cc835f61faba9e34508da772fc0ea0eb4b03d5786e4c0edcf21b4803d578b2515700dd501aa8c615d1cfe0961f260d54e3a91c5f02e846d24035e68f7c0ba0c3a5816a3cd9e827001d112274d264661a577bae2341ea7c667f4f0b533f04b4795269a947f0d1689f3549dafc1051a9cccaad6a0cf0ad0d83a80226651fd37e802ff1934e638e4517772131fe0811a7c210aba725a633a535768167655176c3ccd1a51a3c2a3110328445f936dcd0c5b28648f92a639f0dd0364ba4816a8c7dce06d05269a01a639f3300b44c1aa8c6d8e74c00dd581aa8c6d8e7ee00ba8934508db1cf5900baa934508db1cfa900ba9934508db1cf5d01747369a01a639f7f03d02da4816a8c7dd600e8969240f3950eec67c0d4b35c1aa8c6a9672d808e9406aa71d8540da0a3a4816a1cd8ef04a0a3a5816a9c7a4e05d031d240350647b605d00a69a01a874de30174ac34508d03fbb100ba9534508d53cfcd01b4521aa8c6e0c8a600ba3513b48749946d09be3374010b6f7b93c4db868937d0a43b772b3a0672a43f292e16ff181e66566edf81db1a4eec8e68c79add016d735c36978e53b7cd10874a97b1282f822486f12192188afc5331f08d4e4b6288414bdc96c9d73bcee7f6cfbb2f882e34c7dfca81324168a95d474250ae2a441b2cf4a9349de5a4b7eda10d4e08b1b3386a83d111a46d2518eadea8fd05f4dddb85688d05f6bfcef3445c0a5ae3c41029b0ad873e9924c112873db41bfd52a09dc4a45ddba4ee266eb05f3ac3576170749d7d27f195c03c39c45432dde8b265694057ab81b846442b0ff8188c31a7480325ae11d1401f06d0a9d24089d1231ae86d00babd34508d15416f05d01da48112fb7e1ae81d00baa3345062049e067a3b80ee240d94b88a4903bd0f407796064a0ccdd140ef02d05da48112334168a00f01e8aed24089992034d00701f46fa1e7fa6d4f4327fbc0892b7e55e72f379b1b97bf9145fb12d04e0b1185caf335173b4b69d6c51052de2dc40a518dc9a4da2271f64e8b87369a2465359372b5253c3553290b9933771ae66b705b4f978449ec7e6898cf00668d244ce2e08886f90a60d64ac224f6de34cc0b00332609536311d52b00b34e122631ec41c39c0d983324616a2c427d2260ce9484490c19d3306b00b35e122671418386d90098bb8748404c2c15bb75f65a33c1b8dca4da3f11db0b7e685cde381c9688673179bbdabf8cf2257f1aec17eacb0659df24a11a9850035ab4c346934c751de5b33edc5bef5c75bc4ae1269f2d1957e3517c5b00ee9c10597599068b4b552eb7cd03ceb99238a94551699ce70067a3244eea09da34ce33a03fdf43122775771b6f5d0838e749e22c50c9f92170ce97c4490d81d0387f01ce26499c452a395786aea8591267b14ace5ce05c2089b34425e744e0dc939ff331c17edae5ca27befd3433cb23bb7d9835f6cfd1e52aecef317b995a1e28add66c5f93045d989dfd1dd1d6d602fb6bb571479c257e9f6c2f36cbc4e2373f8d36975550ba04daeaa210b77ea67bd8759e15b32ee480ec2589b35425e71ac0b9b724ce22959c0fc173741f499cd4f4051ae795c0b9af24ce12959cbf01e77e92388b5572be099cfb4be2cc53c9590f9c0748e22c50c97902701e28895367c1c9fd80f3a06c56a749bdd1893322da22dc6630233a580a65814aca2380f2102994d402a834ca66a03c540a2535859b46f934501e16669b4b16eaccd1d2bcde87aee670265fa2489ffbc675be1d26ae3d27fe25faf07200efef4cbc554cb26e922ba2d2d466a038c26d521812de092243473021fb99258d1fb1fa4cb9bdcc3c9fa7444deffa2687c47a15b01ec964ed16bfc01cfb4531fb06a69ac41983c494c32d59ad7103b8ad8f62b2f5fcb34b49cd880b54008d565df37d68774787d8269d482b8cceb6acb76fa573e5695e03839c6342ccafdd972c79332a79d739addf3e14f2378e0dd16f6736bfd6d72ecf05c8c5522035dee04700e4715220891baa68908f00e4f1522089692f34c8fb00f2042990c4cda734c88f00f2442990c42dd134c85700f2242990c4e5051ae42a309a3c590aa4c6d8e397d0224f910249ac104383ec072df2542990c4ea3034c8d501f2b46c2e2ca44e1435d63938096eeed343ec26cf6cce5da472c6bd1f4484ce9084a9b1d0cefe8079a6244c8d8576ea01f32c49981a0bedcc03ccb325616aec806a01f31c49981a0bedc400f35c49981a0bed4c02ccf324616a2cb4330530cf9784a9b13ae68180f90f49981aebb61e04981784984ca6cfcad01e041e0193c97f66775e1e5dcaedcaa5aef0d07285de04ca0b43241774642704f19949cb367f126ef38ba481129f9b34d0a700f45fd2408973741ae823007ab13450627744037d0c402f91064a8c6fd2401f07d07f4b03d5b805ea0900bd541a2871ce4e03bd1b402f93064a9cb7d340ef03d0ff480325c63b69a00f00e8e5d2408933251ae883007a057b6fcf18b3c0c4fc5bac8c0744eaed8b5d591df7321a1eeda864574f2a817725136f4dd3f2a8e4987f699399d94e10446392eb3d909c7055368320a9274c136fedcb5894ff04caab9994fde394ae35d61bb7cb2cf353d3886d94766adaf170db5fc3841dd2eab6aff617ab30f3e25fe22ee8f600b51f5ad6b87e743b84f0ae0db19d6584ff35fa3d7a2be37c6b6ef2cfdac4962bf2ee495a85c21ba19fbf2ec4ee49e49c683fe92863f64feea273fdc5abfc5377916ad6a781f57a266b77fb97edfda713e51d75ef9fdc109ea13784688f896768f4bc8c3648579ad16d0e9f8a4d21f7a9d995c57a2af4f93786a87450e8a93a4ba5832ae8746e0a31facc6c695863cac248b8c16f0e3137c2ba0793fcc51aededed0ae046555b2319cd1510ba4267730b93f4bf3b0899d85a6943faede1b9796b88e766417c8014f4b949dbccff33b4ccdb42f0e59ba24ec4f735f0dd9ecda0c768e38e599a1ecffc200e8086b2285f821efc8e90e3cafa949226edc59288acb458d2b9f07cbc931d269ee613b882dfdeb4cee538180addc5c473d3dc96418bf17eb033d3be88780e006d143908e8ee0e91ab993e272e7540ae31f1f5297836de23095363e2ebd38079af244c8d5bffee01ccfb24616adcfa773f60de2f0953e3d6bf1b01f30149981ab7fedd02980f4ac2d4b8f5ef5ac07c4812a6c6ad7f3700e6c39230352edd5e0e988f48c2d41847bf06301f65620e680333f393d0a8bd3bed2cb4c910d6784c322eb1b7a7e11e0bb88f4bc6253e6369b8e301f709c9b8c4672e0db70a709f948c4b1cb7d270b703dca724e312c7b134dc4980fb3413174f1ba837ad93b9039527a7a576ef024b72cf84483f4c37866d79407229732c40cb933b00dae5b39238cb54725e0c9ccf49e2a48e54699c17c21ceb79499cf92a391f03ce17247116a8e4fc0c385f94c459a892b32b3c3b5f92c4492de747e35c15385f96c459ac92330f385f91c4492d6241e3dc19385f0d9d329bf964536378af08685f0b91f3596a128737451976412698b444c5a56182f97a36b71a24df3a39a244db333c0728df08937d9c8596487b46c64c92efcd6c661fa7b6448d270bad07cfc4b7a45016a8a43c1828df964299af92b21128df914259a892f25ea07c9749d9c7fe6582fd4bb37f40bb4bb97353679a79be17af377bf95164bdff9bbe2ea72b7439ef855803c2cd8195f625e57e2f46bdaf47536e2f56eb77b555c7b7bed41acd7bd2f704dcf7430c878afcd03cf06e8dee3924be7d20dcf68194a72575c301ed6959094fcb0fa55016a8a43c1a283f924299af927211507e2c85b25025e50740f9093fbc36c9bfbced6dfdb33cf548fbb19a3f4ba454d8dfdd571277bed136fbaf0ebdf8a7217a71b7d925782f4e6b99c7424ce8b31071f474e135bc5c946ca871e7c67e3028fa9cc9d9d32407ec95262a3931d9b8b267b3540fcad784f6f8458885886431be6819628a7d33ae85267e1f69bf78a67dd1023f896c36f3d8e10d5aaad63940fba5545a6a3c93467b2774425f85298b5216be13a23d355787a7e6d74cbe81f0d46cbf86e154ff6bbda9f34323dd818e8be1c6ff861d8c6b6f209ff849a9b53d16b31672cf8241fcb7215a69ba35f291be9f8fc53f36c1b872a78b7c7b2db7efa0de508fa4a715f7b90b1e02df49ed9ea833795af7340868bf974a4b0dddd168bf879eff07266dae49ada3e4baa93dedcd1ff351f9e832eeed2fb097a881458fce55f6bc0f3c837f64720ff2dc5bf927ad2bc65b63ff1f2d83d4fa4b258a4967299c421b2bac00edf9a71041bfccce2924166ba1b5d50278eafe1c667d292ffca460188baf06f87e09316a4d17991ae5bbaa79dc27e6cdac51eb6c60fc35c44eb774b773b97de13c3f52a5428e5b9a04f92b743dbf85c99ecbef4473fcd76112fa7b76328c331985123b1ada18741968997f84a823925a423a4ab94926e1e80e96e4c300c82c17e03418c45cf278532fec4c80cd61c2e24125d145d215380ff03ca5ad7bae07cfd32e4cce5e2611729ee63fe0be79b56fb18108695dd2cdd02297621276ec14038d85296701e5d24ccac11da09c64bfa7bb4893a9b27f4a0444e673c79fb7b206f2736020df95499c38d23111696af4d1a49607e8a5b6598de5d7768161d3324cd0e4a25d71f801fd962cbeeed01e9765f20d6c63a0e4729333897dea1d2efd03faf7e5420c97323dc1b54ce591cd03807379499ca52a395704ce15247116a9e4bc11864f2b4ae22c54c9790a707693c4a9f3b8fb4f81b3bb24ce62959c8f03e74a9238a9153e699c5381b38724ce02959c0702e7ca9238f35572ce01ce9e21c27498dae8664993e23326bd33a14380b01793f0bfab4da3b13af2100881f4ce660434b51b229e2643cbf6781766447d9894434d6a786eba69bd8ad99184467deb9ddf43ab5d2544abcd2443893a78a2b5da0140b9aa144aeac08946b90f50ae2685923a68a251ce00cad5a55052234b34ca6f81720d2994d4a8128df274a05c9349d9d7b41eca4ff4979aeb33425aee55d23cb83f02864d7d99a86b9ad6ab482d2147f961d19c30f3255a3b1d0da4fd42cc97da238db299aaeddbabf20f854521686939c987026dff6c3e4d5357df359ebe79312c1faf152a30124d3fdd8516c66ff2002bf0bd734884af9924e180101d12cedea798a8e8c0225f112c0ae2c5c29de04e439d0ced72201335f564985ae30aaa55c4dba27b2b815a27ad1bba139e958342dde0c9ace4261fa28ba9eec93703c2c14cc23e4018f3634cf756139fd69ee7f90e3c278784181025b7bfb6fd941c1b7f41b0a765158bb61068d70e4b9b798c931a4fa24539f3a1235a472a2d35be44a39d0ecfd5a15269a901651aed35f040583744afefe2499d6b5b423910e686c84b76bb868397e9a7d511d904f8d60bc157e8b7c6044eeba6ed2b1a07ddcefa4cbede700337b411d1d47c2ae64dd0c16c10e6162e0cdf066941e169c0b721932fb1a13593dd44aea56adc9af5203c0f8749c2d418b57c0a3037928449acf845c3bc1f30874bc2d45879f601c01c210993986144c3bc0130f32461128ba3d230ef03cc7c49981a37ad5e0798059230f314625e0f9885923089951069986f01669124cc3285986f0366313f42d95e224c962a1cd216d506036d498845b574391c899f947aac2dad1af227900d579add5498e8520d9e923843a785dcde83905b5988ca1e1dd91048ec8a689baeca207eb4b1345062774403dd14403791064a0c7dd0400b01745369a0c4ee88065a04a09b490325764a34d06200dd5c1a2831744c032d05d02da4816adc5a3d0c40b794064a0c87d0403702d07269a0c430320d340f40474a0325869269a005003a4a1268bed2817d5f987a8e9606aa71eab926808e9106aa71d8b41a80564803d538b05f1540c74a03d538f5ec05a05b4903d5181ce909a095d240350e9b5606d0ada5816a1cd8f700d06da4816a9c7aae08a0e3a4816a0c8e2c0fa0e343642047452a9cc2247fa946a379e7e5f630d1dc364471736c8d1d3beb9578bbd3f6689c0eadb32a9b8bc7a93b3089c3f9cb589497c33afc8490c742d4c573446a5b90e2d35363999f2e00ba5d8827a73b1422f8f62b5a32838127e7c4ec54ebcc64772571a249db55f4073c352785c85ccafb33cbce9db281a76a68de5df4ba49324e0e7183179992162d55f3deb6bda1154e917b836b3c4c7c79e87aa64aaabd5da63216bf3e7445db4be22c55c9d917387790c459a492f311e8867694c459a892f32ae0dc491267894acee5e066df591267b14acef7a075ee2289334f25e7eec0b9ab24ce02959c2702e7df24715277c2d138f707ce69214aa860e5c389fe4d349b06a3bb8af18ed001edc644ec6192756802cfd169db07aba10556879ea3b75df37094bdc86cfb5de7fabfcdf1ad93b874d13d8744fb25ccd1a78738e9dadddca3ed17cdb5d79d60f0c85b77b493bb60b5bfc05e2679f0edfc10b73e2d40b739b4de9a10dd51bace68a47de95ce3361656fbb827f5ac561a673db4d85a499cd49384699c2700674c1227b560248df3540827d749e2a4d607a171de049c332471528bf0d238df07ce999238a947e8d0387f04ce7a499cd4c39d689c2b4157b4bb244eeac1cc34ce41c0394b1227f5d8701ae7d6c0d920f7dc56628489766eeb28a09d2d296057a67207c73a106b9a2389b35425e76ac039571267914acebb4d92b3511267a14ace7f01e71e92384b5472fe089cf3247116abe47c1e38e74be2cc53c9b91b703649e22c50c9792470364be2a4d6eca671ee039c0b989cfd4ceade0de7d06cdcbea296bb375a0795f54d3c1f81d9d19e4cd6f55ab036fa65ba5aebe1f613257ecee4317af8cdf05b95db3fcdf31bbba85b66fa2f4d027f1cc017863833b3c6b45dfa37752aaa2fe96110cc9c16498124064868906b01e45e522089cf52de11a4d045ed2d0552e3b6c23c80dc470a24b198050df20280dc570a24b188050d722b80dc4f0a2471184f835c193a9bfda540120bffd020af80167980144862d1341a643f6891074a81245657a041ae0a90078538d4247dc0237524a97108b405647f1c2c0953e3c07c4bc03c24440995cc66381abb9d47e1263f944939d4a4c68ba69bd6fbd63b7240388d9ab6c3fd2388141dc6a41e615a463cd341ba5cf94cb72c040ad40d63f19f0cfc87877802679e59af2fcc7c323c81ff2e099318f9a4619e02984748c2d498797718601e290953e36ad2df01f3284998c498130df328c03c5a122631124ac33c1a308f9184499c04d0308f01cc6325611223a234cc630173b1244c620c8a86b918308f9384498c8cd2304f04cce39998fd4debda0c5bf962be15f6d77acf58eb3722b80bbb520341ea35d060f73249d813f8b94ce3ec17d4f89def5813396ba715d32a252f0bac2786c8b84b17e6c3cbd1cf8ca315c6980bb7ff49216a7fba0a36c1eb8ad022a53f40a4f46426df4afea7714fcb59fe6dcef70a33fcf62df7227d91cf3e70239f92ddf3b2f146260ed56937f15970139f2ae9b0883ca5953d3f86dbfa3469a01a8fd5fb14404f9706aaf148a8b700f40c69a01ab71ebc03a0674a03d578acde07007a9634508d073f7e08a0674b03d57824d4b3007a8e34508d8796bd08a0e74a03d578acde2b007a9e34508d073fbe06a0e78728c1d26466da4fcfef501e1375ef266d3e7f0dd0fe432a2d75d3368df66193a4bd20c482476631cf12e6b894162ce903c1927f4ac2248e496998ab00e68592303586f19603cc8b2461129f9934cc1500f35f923089e3501ae647d0b75f2c09933806a561fe06989748c2d4b87ef91260fe5b122671fe4ec37c15302f9584495c43a261ae051dd065923089eb4734cc8180f99f108bc599ed94d3582e6043a0bc3cc4a1b9e920133f2935097131abe2ec0fb073e88aeca62f44976af094c4a13aed84ec77a0455e292bcaa9f324cd73a11fbf4a1aa8c6f485f301f46a69a01ad3174e03d06ba4816a4c5f381d40af9506aa317de10c00bd4e1aa8c6f485b301f47a69a01ad3174e02d01ba4816a4c5f3819406f9406aa317de11400bd491aa8c6f4855301f46626e840d3fe093223fd568458fc63b8e3a8dcbe837a43dd8c4ddb5b741b4c446f09754ef102bffdc51d5a3a3d3e87777593e95b622e63211e6a9288b786d85154e8193bcb49c56b401bbc2d9b71a52afb92dded9f5ce56e6a5c89d6122f8110ddedfc087c8dcf3172dfdcbdd172fb9245f64f359d64bbd650b8adef08b1ef12f709a7dbdc4adf1d4ceb6a3606ce3b999c7ddbe09c1c77a8327596b6da5f7c92ff068d215087b2509782e1d15d6136b3e685ef7a68b7f859c0777776ce27cc2487933857a7d19e03bdfa3d4cda9e70bb37b6785606689bb4e7e50bd036efcd6675cfd4d5748df94763a1ebb92f44c58fff4da23671958876935f0eb0f74b8525ae67d2602f06d807a4c2121f0534d81a807d502a2c319244831d0fb00f4985d5582fb912601f960aab71845a02b08f488525ae7bf286fe00fba85458e20a3d0df674807d4c2aacc6ed868b00f671a9b0c4ac271aec42807d22c47a68bad87eeb32d4792a8ba47f0711fe27a5816a2ce1ff39803e250d5463b1f4e700f46969a01a4bf93f09a0cf4803d55834fd65007d561aa8c692fe2f00e873d24035164f7f0b409f9706aab1b4ff9b00fa8234508d45d43f05d017a5816a2cf1ff2180be147a29baedc3cf26fbb553b72458e72f379b1bf3bf9145fb3cd0be1c228714334fb6b5bf2fb47f726f7b8189927a9afcac7e8ea930f3e22f0d908342db5efb302c54bfc2e4ed6eff32d19f9ce01271abeccb5c6b4d6491eabbe55d302801f76a88e41db7732e78f2ce0216dfee9061f25a18be2877b9c14a04cb5aa685e6ce85d6f73affb48ee4399cf5f64d4c05c6f429b8c4b9102d05f767e86cde9093b6a3b19ec85c68a16f8648c0cd748c492df1cf3bc5105ae65b9238cb5472de089c6f4be2d41987bf0a7af3772471e6abe47c1538df95c459a092f37be07c4f1267a14ace6ef0ec7c5f1227b5fa0d8db32f707e2089b35825e768e0fc501227b52c208d33069c1ff1c36fc9a05adb9bbdb2743c242dfce6e68109de8fd907f225a29b6ef6de102a04c23b8a1c22979f64f358ddd4b93a7588449badef08b7f9a792303556ffdc0d303f9384a9f1fc830980f9b9244c8de71fec00985f48c2d478fe4131607e290953e3f9076300f32b49981acf3f581730bf9684a971fff18680f98d244c8de71ff404cc6f25616a3cff600d8fb96cd71617af6875f1513e10e14211352691be32df7e7cac71c57f621ea2c6fe7d9ca9f7afdacd72ec6cffebd8bfc0aef6bfb63e9e93d3c3bea33166a17d7beea3ee7ab5fedab3ed67dd3b9b6f4614da2ff9ce358895e30d22d7af91965b73578268a289f9efbec8becebde75a9f4152e1f3491afc169b987d852be13ec17eacd9052efc7770058d66dacfba9fb8deec05e93bb939cb792797e3100938c0dcf87b5d60a2b24895a67531a45ccf3d211edec9f5992d89bf25f259dceba6f87791eb331046db3fd5f977d6605c3cc3bd2ba7d0ecbfda5dd395a218e7db967b2793edd5aafcbb8fd96bbbaf4846467273968f7f6df46f13fd0bce8fbf93f43936b939dd5a7ddefd9b56fb7f93dc9c15fdfd33d7ffb475d62259122a37a797fd5cf4f3243f9a54dace270334fbefb1521bef6dbcffd79b69af5d1b77aff833b293f80e5ded4747c54313f37db3cef1d541125f115da3da5ea1daff3ef9cf9f6b7891fdb29c62fb4bb41d6ba33f3762452d7fb6fd2ffa5be2e34bbea66bc7ed5fed7bd75873da7e7a35fc6577e0927ea2e8a1e15e5fe76362317fd5ca25fea44bfef9d2dfcddddaf95719eefe193af5cfff83fb77ef12ff77ef32dced43cec9fb0bdade92dfd18ff89dffeafe32f5f613df9e27f8677aa3ff4af736ff9bf6bc827f7ee3f5eafdf71d5e2ab32dff753ffb4ff80ceb32bcec7fdb963bfe8e7e66b6e5e86ad11edd16d71e9bc14fd7f6bf43cb9f39f9558df19e3fd116b0b75bb2447f3fce497fb572fbb719fe67adf7579d6d12ff737da41b4bbb47d02f4c4f7ce0c752f2fffeff49e1bfef08f7a4f835e5661ae16ea6dffebf95ff45addcfdb79a1fa14eb1af8dfa4c37829d67ffecaef77b6517d3f57f003cab7e0908580800 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/de61bb1bbef83b8409027ccffd980bc8.asset.meta b/Assets/SerializedUdonPrograms/de61bb1bbef83b8409027ccffd980bc8.asset.meta new file mode 100644 index 0000000..4ae7286 --- /dev/null +++ b/Assets/SerializedUdonPrograms/de61bb1bbef83b8409027ccffd980bc8.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 758b8d9391a69f34d91414a01f0ddbcc +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/dec74772d2e265041a93ed28927b06e9.asset b/Assets/SerializedUdonPrograms/dec74772d2e265041a93ed28927b06e9.asset index 07d651a..b71544b 100644 --- a/Assets/SerializedUdonPrograms/dec74772d2e265041a93ed28927b06e9.asset +++ b/Assets/SerializedUdonPrograms/dec74772d2e265041a93ed28927b06e9.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1dc5f1f8f7d996e58e6ddcabdc052eaaeebd5bb862cba6d8c64db22d2c1724b9514d6f06d37befbd9750420b2190d00224f416208104121212428084ffeddeaededcbe9da777ba9bf39efe3ff9639deef66e6ef6bbb3b37daf511e737e12439c5f4bd84236950d638b5919dbcc36397f4d758e1b9d7fee99babe805539c775ceef554ed8109653c793fc6750a28bf3bbc439ab6635ce935bd91ae75821c217b172e7ef12e7d972e78c5f5debfc2f77ee4a34711e5acca6b1f96c1eeb9ce858878825e2a16a792dc1e39568e6fc9ec2763aa1e54229fe923c11d4d9f9b5c809a916611b1da5d57d4bd97211ad8d4ed81ae7992a56e9c85c2d24369b3485893f987be8298fbde4b187f3bfb9fcbbb1fcbb99fc1bdecfaff3d82d4b736f6f70af9299e3fccf72fe7f27cffbb8e78d73e4795ff73cd14193d102c8e8278ffd35dd0738ff9b3a7f1e9f81fee9c2dacbe31552de09e0dc897342e93e501eaf04baa967af92cf9e08ee51d7f9f16a197e123887b2db6bcf5d23ef3f199cf3635b79fd14edfe5ee09c879f2ab92e90d707c963ae3cb6d3189e1690e17eeefb1a8dd3d2b125cbccbe5ac8e3fe75dc9f4e464b791c1c40462b375d1a4f4b736f6f70af7acf1037fee23e95aff8f15a70cfb5f2d844323f5dbb9e25af9fa15d6f8a5ccf46ae37d3ae2bbbbd0ee8729df6ccf5cc6b9fd7bb7a664dd264dc20ef3b13e80ce5a9f0ddda7337caeb678138c1e76e449ebb497b2e5b7bee26e4b99bb5e79a69cfddac3da7aef702e7201f3551cf0f75cfb32ad3d8474f4d976e9a2ee99ec993c75b99d717dd2a8fb7c8eb6783739e4e9fbb7a35ed22afe7cbe36d9a9cdbd2cb69aaf2af49c742e6f5ddc3b478deaed9d0ed52e64952b7c759d2fef9f10ee6f599c3c075286f8f575ef65bf2bc581e9f95f79d23cf8b34bd54f86e2dbc17782f0c5769f0aabc7e2e38e7c7df20ef1bae85ebef1b01d206868fd4eefbad0c3f4f3b3f3f4ddab4d6e27ca77ce60270eeb06baeca598cdda83ad8a9f0b0d82979183b158eb11baddd571f762aaeafb1a47f5436aa6cf21e29e74270afbace8f4f30afed3fe1ca68a16c3e4b937717f396ef7769725fd7c25f97c737808e8af5efc0b537c0357efca594731138e77a6d91e7ca0f2bbdeed3de7b9fa697b2878bc139f437ea7d9768ef537668e2af64f702e7c0f736577596313e598e33b01a0fae4d94c709e09a927d37b8066da0b97b4fc1a7f2da5879bc17dc7fb7661bf732afcd4ef2c91ec6437186f1986c8887927dbf211e0fa489c783e0fefbc1fd2a0cc6638a3c666bf21fd2e2f190211e53338c8792fdb0211e3f4b138f47c0fd0f83fb55188c87aaeb35d3e43faac5e3d100f150b21f33c4e3f134f1f839b8ff3170bf0a83f128605e5f74023877f2609b71da7d4f326ff9fb24f3e64325678f57ce3eca37eae9fe94c64b0f7f5a0b7f5a1e9fd1f47846d3e31732fc524d7fbd8cba18e8a19e83e19769cf2b5f750238e7f12bd3ee7b4ed3ef39791caec9d9e395d3768896f68ac3af340e7af8f35af8f3f2f882a6c70b1aa75f239c54b82a5b2f067aa8e760b8e2a497812f326f19f8a226ff2596f4dba6e755f8e5f27c3a72dfcbda7b5ed6def38a164ff5dc0c96cc2bafc8e34c569bb7dae5c86be9eadf3398d7b67e2fdf75053877f46da7ea33b3e4b104bc8f1fdf94cfa9f6793796ea3bde6475fb0e934fe806ee4f1797d9f2f836f3daf9dbf2f816f3b601de72e3d6bed87d6f7b950fe6c8e33b9a9c77ea9093ae4f612ef3b6250ed0b8bfcbbcf5a977a5cc57dde7f6557946d9ce7bcc9b370e00d7a1bc3d5e791d549f92aa0fff8379eba7f334bd54f86e2dbc17782f0c5769f00df3d687bf91c77f22ef1bae85ebef53f5e1395af87cedbe7f316f7d589dfb694bbccfbc6d89f75d761d57d6c16e81264767a7c2c362a7e461ec5438c6ee40edbefab05b08e2c28fa52c9957557c16836b2a6f2d61b5f97db8ca378be4f10370ff07f278903c7ec8bcfee943376d3aa97c61d2f1607954755da5eb47cc5bee7c248f871adebf145c53f5e865e09a92fd31b8a6def387645c8b54fe3b441e3f01f77f0cee576130bd96cb63534dfea75a3c94ffac2b1ecaf7c27828d99f19e2f1c734f1f813b8ff3370bf0a83f1384c1eb335f99f6bf1f83c403c94ec2f0cf1f8739a78fc05dcff05b85f85c178ac90c7669afc2fb5787c19201e4af6578678fc354d3cfe06eeff0adcafc2603c9a6872bf66defac8d7ccebb7fecebcf511fd7915aeea3d2bb5f055060eab9371e9aafabbd295f5abe451f9da6f99d72f7cebead56dbd3c5f238faa5e02d36275066961629c69bd44f12997c77f4b5daf02e75cd7e7d3c852751315dfef98b7bef09d2ba33b7375ed3e4a7bf77f98b7be5006ae43797bbcf27aa83abd2af3fec7bc65d05a701dcafdafbcef6aed5c95256de4f17b79fd1a70cedfdb45bb4fa5e33a79ffb55a7885f61e3dfc70795df57b67520f50ba5dc1bcbaa9f26a8316e7caa4adf49275ca5e5d34d92a0ffda0c9fe41ca56be7ba3267b5352f6c0c711d9aa1ef0a326fb475776cf49f27cb3267b4b5276df1d9a6c2cdd8fd0de8da5fff575a4ff4f5afaffe4eada6b6fa4bfcaaf7a5ab566e6769e1c13e17f7afca5b49f4482d5fa07f1b7ba971f1b314ffe15e78edcbeaacf224b7b871a433b199c43b9595ab87c3ed118e820e39968ea652ece1d79bdc7b9efedadeabd32ed136a7c4da57d15b80e756cc93c79bef6fc7c695baa2f5ea649225bd323dbd5a38feaefa9f6f2ac4d87dd75e8a79eeba585efd6c2557ea9f4862ba6b5cf37d7d25f3d3f420bd7e5d768f6a1e4ab7468c13cf5fc440b8d9b1e9fad5ab87a9faab3a97468a5d9422bcd5614c78b35f9dbb470257fbbf7be441be66d27f8cca3b5cfd79547f578eda3c56b1f2d5e6aaec0c51ae7b65eb929e99b00e9cb7d9ff2ef981f50f59e307c881c9748b463661fd29e25f36f7b702f3feecbbc3e645f57eec05d524696f68e8e1abf8e9adc4e5a782779ec0074907958ccce8179b7b3fbee7ebbdcf7f6d3c62c135d359bae02d7a18e3d98d787a873e94306aab69cf2215d343dba48064cdeb7c3cb13f521ba7eeab95e5af86e2d5cf9902dde70c5b4f67935267eaaf6fc082d5c97af7c483b4dbe4a87eecceb43ba6bdcf4f86cd5c2751fa2d2a1a7660b3d355be9c5bc3e44c9dfa685eb3e44de97e8cd82f990de4838e64354bc72b478e568f1eae38d572de73e5eb929e9db1ea42f2feb545f71143e6493d4a12f33fb907e2c997ffb817bf9b13ff3fa90feaedcfdd5386796f68e811abf819adc415ab89c879518007418208fb9cc9b7773dd770f7ad67d6fae9a53a4f2e8feccec43f6d7741ccabc3e449d4b1fb2bfaa172b1fb29fa6c77e92811a27dbe9e589fa105d3ff55c2f2d7cb716ae7cc8266fb8625afbfc602dfdd5f323b4705dbef2217d35f92a1d8630af0f19a271d3e3b3550bd77d884a073557e264700e6d258f797d8892bf4d0bd77d88bc2fa1e646d4d787e423e1980f51f12ad0e255a0c5abd01baf5ace855eb929e9db0fa4af63a783da027babaf0fd1fa1e1245ccd3f720ce9d7b06a79bff7724f3d87fa298797d46b19471b4abf7e007bcef4e0c67debe8723c175286f8f57de10350f42e5af119a3dae05d7a1dc91cc9bffd57926630098af55711fc552e7cca8f78e661eff9b1805aef3e3188ddb185746c12d524e96266f9c6667e334b9e3b5f0f1f23816e898adc99ca83d33519339c16bbbb57633222953dc03b82726c9676e00e74ebc86dee0bd5fcd1d40ef7f03e80f9f3b8a79f3a9ca8f2a4e93b5384dd6e2a4d2ff62af7c76b43c9fa2d9e731f2a8fcdc54af2d24a682e7f8719a66bfd3dcf80cfbda7b9ff2f389e9f2fe1bc1393fce90d7cfd0f49ba1e97993f7bab8afb9f71915071157e84355dc7a817368e7faf313023e3f39e0f323033e3fcadff3b5efbbae8efb2fade37d27d7f3f991019f9f1cf0f909019f1feb7d5ee5c1da324ef19165dc10b5be224819a77cf32c96cc07ca57964839278073276f165ea3dd378b797c406296579f841aab557636015ce7c79932fc664dee4c4dfe4d6ebc0b9ff2caa97d8f26473dcfc66b726ed1c2a1cff7bb0660a9c67136f39653b35d6645cb5cdd8b54ffe0a1325c8d2b9fe8959798a3c9dba3c97bd12b478caba48b837adf3c2d4de7b9f286f7d7ee5ba0a5a936fe9e98afd9d832709d1fe76a69aaf41c08c2c1b98837bfff56700ee51da8713d50eaddc37b7fad7e0bbd36a7e4d4ca5da4e97f28780eeaa7df7fab9b8ec3559d4fe541182f68834a4e5de993cec6e4f87d02ce0f50ef83f303549daa54862d61de3ad562709d1f0fd2981ee4ca18a9e6196469f20e615eff748826f7502d5c31856383ea5e304e9b580aaef1e3c152ce45e0dcd16b845affd454d36bb9f6dee59a5e87316f1d468da12fd1de7789f77d23fb6b7214ffac242315566b778b99c7470fbf073ccbef5b14c00e8e9569322a837b8f73ef1da5e6152bdb5076b342b38d155af84a197e013877648c526b5976b9f227aa31ab8edaf3abb4e75769cf1fef3e3f563dafe6890559733610e892c9d8b2eaa35dcdbcbe6e35f3c429b146865f01ce9db88c51ba9eecbd9fc93a68a28c797c907a1f3b15e837591e4f4b5e4b2826a727ed6d92f2f7a700594ac699c8fbd76befef9ce1fbd767f0fece2cd5efa8b457f1be9079e3a3f248b9661be592a79ab3a2e619a8fed8b5ccdbaeda0daef373956eaacf428d9b2bde1db5f0cba4ed3533df27e4a9fb2037157e9216aeaef702e7907b3a1b9463b5890acd062bbcb213aa5fe53670ee301bfb9ea683ead33f4bbbde55bbdec9fbfe5a9d6fd2e2dc15093fcbfb7c62830cbf5d0b97cf272ab570652b1b811ded2bafa9bebc13c13dea3a3f6e66de726bb3cb62fc024d8e7a4e8d2f9c0ccea1cecaa63b68cf1da13d7784169753bcf7d7daf746e62903c6a9f533e9ec40cd57543e6c18e0a2e6cae6816b6aae493eb8a6faf20a586dbecdba465e3b5f93758141d685e09aea27ba28296b829acf902e1e2a8faa78c03a8baafbc23a8bea6f4f33a7315195bc3f21fbad6beb44d5cceb9bab5d5b98f0a22b6ba2f24dd2a7246a34dbaa02d7a1bc3d5e791395af37c5bd9ba6db45cceb1f32697f6d65b83fddc6bcfe742bb8ce8fdb99373f6c77654cbac77bbff0a7fa9c4bf58e9dcc6beb3bb5771da985abfea31d4066534de651da334769328f66de7ad90eedfa759afebdc039c85f13d5f8593aceaa1d702cf3b67f8e75594d96e9cf94ed9d2ec3559bfd664dce719a1d1da73db74b86dfa13d778c162edbb4932fc8ecfdea79510ed7b71e491e969510736c66b172b68a6d61797c828e1819ca741b0ef564dd1b7088b940fc17ff19245e5bc3763a8f969b76c1582cf6d8a86145acd0b80b465731df43bd7daaf8bdcab9a34208bd3391f28a47525ec195ab74fe95832d3caa9deb33c50e207c138f0a2764189be31cf9532b1d77bdd4f9e795b2c4796d25dbea9c953abfb708792b1db553efac2b4a7cbb0ffd99858e4c7737928dce1505748b735e29345c247e6f139a960bed4b9c6b35626f944d6c1d9be21c7788b7a5c6bdcaf9dbf4ce5289ccaca3795312ecbabbf5894aa6694e6cb8f679c226ff2f45f6468a70f44d79fee03f4df2440976464a4afc1f43d7c9f0c2b744ca2810c8129e6b852c4f94cf0b5308fa8f636a0ccdf6edf21ec18ad3c6c54c862777771183640a77aaa8fae4eedb5efe3ecb1bb5229627aa093dea885a3ab05c5eae9861e5270a59594df2b9a23afe8409bf18fa5b14217ef7be0a719fff04682a0a3f6f0288a97ba5ce1f3b9cff95cecdd39ce36a27689d78d92a21242575f2b9a86c0138b5f8ac4b490c71231362d1fa2edd2b168e6d82951e72b3da582421e7893a589734a688bd4b54961ac91a93ca2c6fcd2d1e39367ff4b559e6746921d2a53e6fc352a6b129655a446dfc757bfb74e9d2b2365ec974e13f6686ad10dbae4b078c601313c1967bc7b6b9eef5b36d3e6438546368e6d726ad0da6d3002398652228e65d2f8e90e07c47c3c3651db17e0cf7c998615bc1b06b4aec32d101a3d8d440319f536c6752abb9a616d708119c8d096e1f5070334cf0be010537371954eba8b3240fdb2ca4ac72eef56f4ebc3772b0eed6ccf6d411c99375ab8059530b53da70849d8c5ae989d3114f9c9698e4ce4125b7c22477092ab9b5c9a0c48cc7e86be8f52b23b9afe99c7119d98da5ab60fb2d21db98e889f527cb48e9a5761ca9bfa638cfae77386c13bd015b9de74d1d4de98976cfd8dbf710347398a9fbcb9f4618e17d4c96cfb1f7c4925d37fe6eb8f1b73509e78502ef8e4d6974705554a26d16dd2b3c39736093437f7736feee7626d3110a45db36739b3c5c8effacc7575bf44e49835d13cdc692c3b0a6577a1d30d3686f2228b0ae2225b8d8b9e6f69a4e17a115c216dc6af630d92c4d5672d2dd9d9e6e1f6668948948f39903e16921e7ffbb3fd948fbac9f48bc705f8c25ecbea66cc913b6bf81483e2732408b829e0ffbe1f9b003f6b281d8cb06d5ff651d316f961b8237eb64ca0f8265948d0dd89152bfc6c67e26bb17c994daacc8e46d627d4da14caf61be7fb01c3198995b3a99a884597e67937df0241c623246ce6468e0c8e9163618b7b02e987ac330f5f2eac82b695ed6157b593ef6b282fabfac1bf6328eb6ce065b1ac1ddb11c5f14428eef81092f0e41784f9370de781ace523ba57e727e5284b7c285f7c2341f61d03ce153f3de26e1bca1c367d1ebada5849fd6520ec6649481c92e93da6998f4c1848f36083fc7a7f0be98f03106e1d7f814decf203c4f9475c7b3689b41e631f799e29317e59e4ea8d49abc1a745de81cd70a2df8f535b2569afe5de94bb4b1068f95278aebe92cf39903f4b1e0ab135a70a78214797cb541ae653a6345697f93c1f3f6185f5a91d2b6e315be15b21380bf7f93085ae0bc81a76689acc4fa69df0d30e50951be6fdaab798257c3b78a0a09ff7b9b4c8152f1eee4f057106be76b077b1a0a1f510019ed6a92b0abc20cec2a0ced318b1968b2185e264d0ea1341d6412ce5de414836fc8e7be616a3233eaef198fbf271733fb6926b3cf1666bfd831b5b27a7461ec677a172f53a61bca94f58dfc9529fb9b84f3427c060bd8e53918933c33a8e42118905926208dfd01198a092f31085f90e54ff83093706efb078460fb79265728da1215a4ae10eb7b482d80d2f55428b73697f1cf506d157aa477807c215b66fda77384e3e3294ba72be6eef24d49ce73fb5c93fa3edc428149306f4bcdcb44709ab654219603e61b72c09ca6fe7240914938bf7f81c141e789c669fd4639c572bf26ccfd41dae06946008b4d7a729fb4d0a067be3bd0c15823616ea5c2dc86a53137537dcdbfc1f929b086639e67b1c1f334f2e9794660c297188437f6297c249681f804fe94a296677513dd1c769493158f718e6eb751b9c391ffbdd9f9cdc9ae935337b9dbcb110328354e51b0d9a9270f655562f0739d1396e3fc57b5212eb140485c2b1ce346f11c97eda61b0f2f74c2c738c722e7d8c757ee1e85e593834df6c7b3c821c10c7e3486f95013e695a160ae3fcc1cb69dad97a5558e18f7dae4bca952cadd0a6a5a39f2f92d4c7d97919767d53e93630ce613971a7ce28296fe7ce25883f03cd15516e5e0f064e72e6ee93bebd197bccc54e4188be2e5cc3c309cfeed58e13ace942c9cdc61999481cbf124196f4a12d1c918e5b0a15e3cf84b94151927ca4a661e32acebfd58b24c30d113bda80746482f9399d56672ab3226b75a90eb9812abb4938f116a134dc6cca9f1d5c2cdf57a97a9145d8d1bf424cc8195191c589756fe1cd8644cf37283e6d93e359f8269bed6a0f9473e359f8a957aeb4ca51e33a99ea6d49886a9bedea0fa2dadfda93e1d135e6110dea49d3fe1334cc2798d8eaf1a0eda509d8909df1082f05918964a0396c77d6229c1cc65a3c95c5a08b7e04ec65923aa226ee5c88f091d80b1da1402abd926e1bcc780af87aeb3f89c830b9e8371da9289e03438e662a97b8421752f69ef2f75e79984f3fbab1852e7166b7deb5fe79e8f61aa31991357cf6f9d9b97ad36366f1660a8b762a8b705437d20867abb09f5ead050c7a789b3d0448867ad1d86ac7547477f596b11e6c67686e0c64a31e14786207c31e6238f0ae8239760167974401f791086e318030ee38c8234380e3609e75672acc90177f2672587988473658ecb04499ae6dca198e05d01052fc5581f1f82e92d3309e7d5ea1332d13a4d957a399688271a127165677f89781826fc2483f0dc2efe84afc0849f6c10feb54fe12b31e1a718843fded59ff05598a59c1a82a5acc6849f1682f0351896d30d584abbf9c35286697e46089a979b84f35e9c3333c9402b71c16b4d82b94be61b4ba5d426780fb6dfda448dac19acab4795cd5fb9bf0e8bcb59a6b8f0801ccf5bfdbc6b3df6aeb34defe2930d5738fff29dff6b5206e87808df5ba34a90f5a34505a6c51e9316ed81161b65cd6a95605f7f0d0ec73438c7a4410ba0c10aa778af126344fe2a051bb04c7cae2113efeae12f13576299f8bc1032f1464cf3f30d9abfe753f34d98e61784a0f9664cf30b0d9a8feae94ff32d98e61785a0f911987d5e6cb24f3e12bd54fab2e58e6f582afdd018d9a271af1d2c8e43d904e7f774e0b3d6084195ce5f65ceb52dceb5f5c2bfec107d26e5e26a994f9f5685e97f89497f3efe92d4688a13502d3cab8ad318199fe586412cd767ebadb38de28e6a3957ca6de7b9f1ab666ee7f54ef1a49f38559be2c40de4d2da00adc9cc770f6b9acddc1f7c267a9a56730d6664971b8cac894f23db8a09bfc2203ccba7f06d98f02b0dc29bfa14be1d33afab4ce6d53fa3ece136faf39c63b1bce66695a3d87079ef089f5d873b3083b91a33986b021bcc4eec9dd762efbc2ef03b8fc492fafa103ce15126e1bc0a79030b56853c1a237523468a6ff4d6340b92f2c7e9188cd3cd21703ad6249c9775b7b0d4b2ee9a91fecabae330e1b71a84bfe853f82e4cf86d06e14346f9137e3c26fc7683f04a9fc24f3009e7639177984c888fb9dfc9ea33d9f544d37b7896bd2b933c90c6439d8409be3ba0e09331ecf718b05f30da1ff6534cc279d6b83713add374269d8a09be2fa0e0d34c82b919dc9f89e0341d49a7632ee581105cca1998f0070dc20b7d0a3f13b390870c16d2618c3f0bd98dd9f5c30c69527b2b9a7e4cfd2cec5d3f33bd8b0f61b7f025ff6c937cdefffd4826b693a6ff7b0fa6f8a30133ff3998e0c7020a3e17b399c70d36f3e2787f36739e49389fcefb736670e6bc6be40956ef7598e7633179d210932e13fcc5e402cc629e0a6831176209fb74c084bd0813fc4c40c117639c7f61e0bccb27e74b4cc2b97f7c960577be9762c27f1982f0cb30e1cf8520fc724cf8af42107e8549385fd4f23c0bb8a8e54a4ced174250fb2a4cf8af43107eb5493867f29ba04cae3148ce130ba6f938d0dede7a24d8b6232f9a5c8b718ee14b8ccf31e48b7fc3d10b9b7f78ad291db991bc1c82915c87097f2504e1d76316f86a500bbcc164816255fd86bd6281a9eb94eada01c6ffbaaadf666c99af09cbcc4b6399e1e88b59ec8da674e775a6d74d51f0513fba0913fc4640c13763827f1750f02d5816f87dd02c702b26f9cda0926fc324bf1554f2ed98e4b7834abec32499fbb17742f06377626abf1b54edbb4c92b91f7b2f13bb7b0d177cb74930afb4be9f89e034bd95f760a03f0801f4bd188e0f03e2b80fcbdf1f05ccdff7639c3f0ec8f9018cf31f42e0fc2086e39380381ec2047f1a50f0c318e7cf0272fe19c6f98f21707e04c3f1a780381ec5047f1e50f06318e72f02727e1ce3fce71038ff1cc3f19780389e3009e69eff4b16d0f33f89f1f82a041e4f613cfe1a90c7d398e0bf0514fc0c86e3eb1070fc0213fef710843f6b12cefb9efe910992349d54bfc46cef9ba0b6f71cc6e39f21f0f8156622ff0a6822cf6382bf0d28f8050cc7bf43c0f16b4cf8772108ff0d667bff09687b2f625a7f1f82d62f61c27f0841f8cb98f01f4310fe0a26fcbf21087fd5203c4f6ce6c7a72546dfa711c66618e97b34fe97899596e2c47e8b99ff4f01cdff352c9df95ad3a0e9fcba49b8bbb768b07198374c0694c32faedd2b064467388d4ca48c5d618d13bc2b8cefa645a125d601f63b5312f39468924912739d11c1bf3709e67582ac44c03ac19b585e6a9a89ca69f2d25b98cad941557e1b93dc2ca8e47730c9cd834a7e1793dc22a8e4f7309fd532049ff53ea676aba06a7f80a9dd3a04b53fc4d46e1354ed8f4c92794fd53e996497343d551f9b04f30678db4c04a76980ff0103dd2e04d09f6038da07c4f1a94930aff4ef9b89e03495fecf30ce1d0272fe23c6b963089cff84e1e81410c7e798e0ce01057f8171ee1290f39f31ce5d43e0fc170c47b78038bec404770f28f82b8c738f809cff8a71ee1902e7bf61387a05c4f135a675ef10b4fe3b263c2704e1ff3009e7f5ab3e012b62df9804f3f665df4c04a76986fd13d3b85f408dff8509ee1f50f0b726c1bc5e302068bde0df98e48141257f87491e1454f27f3073ce0dc19cbfc7d4de2fa8da3f6092f70f2af9474cf2e0a092ff8b59f4908016fd3f4cf0d080827fc2580c0bca82f7a518cd2e2f04b34b60c2f34310dec8249c332908caa4b14932fff25a6126c9d80317dcc4249857d08b0256d0b34c82796f5671c0deaca618e4e14121676392470495dccc249967ae9101736173cc9c478560ce2d4cc279c56074c08a414b0cc79880385a9904f36ae3d880d5c6d698c6e3026adc06133c3ea0e07d30141302a2688b693c31a0c6ed305b9e14822db7c7844f0e41f8be98e39812d47174c0fcfed4807ebf23e6f7a705f4fb9d30bf3f3da0dfef8c419e111472174cf2cca092bb62796556c0bcd20d33e79210ccb93be6f70f08e8f77b60386607c4d113737673023abb5e98c673036adc1b133c2fa0e01c0cc5fc8028fa601a2f08a8715fcc960f0cc196fb61c2178620bc3fe6381605751c0330bf5f1ad0ef0fc4fcfee2807e7f10e6f79704f4fbb918e4838242de0f937c7050c9fb6379e5908079653066ce878660ce4330bfbf34a0df1f8ae1581610c730ccd92d0fe8ecf2308d0f0ba8713e26784540c105188a95015114621aaf0aa8711196fd5607cd7ec598e43541250fc7f25f5908f96f0446ba3c20e99198e0b501058fc270ac0b01c7684cf8fa10848fc14ca422a8898cc58aeec30316dde3b0a27b43c0a27b3c567457062cba276076b731a0dd4dc49cdda680ce6e1266169b839ac5644ce52d01559e8265932342c8265331e15521089f86c1ae0e0a7b3aa6764d086acf3009177be16792926946d4679a047345b6652238cd7e42b3301cdb43c05182a5e28ea0a97800a6f6ce10d49e8da97d6450b5e7606a1f1582da73311b393aa08dccc3781c1394c77c8cc7b121f05880093f2e04e107624c760565b21053fbf810d45e84093f2104e1a598f0134310be18137e5208c29760c24f0e41f84198a99c12d4540ec6249f1a54f2215885f2b48015ca43b10ae5e9012b944b4d82739cd3333211cc07d111c1cb30c1670614bc1cabf6ed0e58ed3b0cab5b9f15b06ebd02cb266787904d5662c6bc27a831afc2249f1354f26a0cc8b921005983a97d5e50b5cb30b5cf0f41ed724ced0b82aabd16b3eb0b03daf53a4cf0450105afc7405f1c02e80a4cf82521083f1c4bc54b83a6e2060cf66501615762822f0f28782306fa8a10406fc2845f1982f0cd582a5e153415b79824f3fddcaece04f64bb8e02330c1d704145c8581be3604d0d518e8eb8282aec1d4be3e04b5b762c26f0841f8364cf88d2108df8e01bf2928f01d5827edcd013b69776275ea5b02d6a98fc4ead4b706ac531f85d5506f0b58433d1a73d5b70774d5c7607d207704ec033916b3b73b83dadb715836b92b846cb20b137e7708c28fc752f19e8461bfeadde274219bca16b332b128dc5d40be51fc5d229696f305e46b9d47dc05e425b577263fe9b290958bd00a71a58a0d131f525a2442cb1c895bc5d26f2e37f9cc34e758c956c90fb5cc901f79e26f709f4d2e177717acbb9f7af186b8fa1539315c9126167cf9f756c6bf129e7c7ba95830af647aa52e719eaaf0f9f1981330eaf79aa88fa9a5bec8e130bbf693388b598d58b85f218eee727dae5d89f397fb38d74bd7172e7cd7c3f802ffcd8c2f71e71fd0f113a313b118dd678ad100e6dd9860b29362552275dd18f0cf7971ede608feeb18ff0891ae6b3235fde87912a6e7fd263d276b7a26dfe9eab9996d915af2cf0b95ca0f0fe19ae2d7c34a8793b1f83d608a5fa1163f681b7a9acc946992691ca02c3f3138058bc183a6188c60d8160f7c6fdd52e6eec1ebc6a05ac6a0465e4def3982e7f253b1983c648ac9c48c6c6db2a34399ccf19b43b1b5fae5a3d3b0b83d6c8adbd996941b8b8484cde27e3f25c7227995e7c8bd5d769c8e91ff19963fcca9ade7ef35825d958f1c6e92e5272667603179c41493513e7c95ffb898a5f989cd99586c1e35c56616eab752f768ae5fecfc4bf713dbdd586c1f33c576bc8fb45b54673993696da63eb9eb2c2c5e8f676293d08304b749b3343fb1391b8bcdcf4db199a0c5c65b0b81a510b72dfea1d59d6c1ee31f605c8596475e19e1d573f660317bc214b3d91995ad33c5464fab6459a46a73f39dbfa7b3231c415cdcdeacdb9d83c5f949539cf1cdaf609ef1d6b737c956553a4bf4a3f1b998c64f99341ee7c3277af55ec752f7acc37da069873b3fb13a0f8bd5d3a6584d4de323dc58cc107e61a3b0bccceb24661f1a56ca9d8fc5f119531c87a329c7eb5fab9d9b545ce738715de7dc512536954bf58661fbf30bb078fcc2148f6901fcc4def40c1762b17cd614cbfc8ceb847edb7cf56b4b5c8469ff4b93f68b7cf83537bd92dedb7d06f70c5eebcbe49eb052f0628cc17399b4dbd3d53bfca6617d3dc625580c7e95494e4bf58a78da65da66c35bf3f54fa74bb1583e6f8ae5948cfcc922e7e6d542db55c2aaf66ecbfe322c862f6452b34f6789fe6af661f7c65c8ec5ebd7a6788dcdd847fa8b159e5af589d315589c7e53ffdeccba725c94e5da9558fc5ecca4fd4251d30acb5b5e85c5eca54cbca59f920e8f09fda8c0d5582c5fcea49546937ed4297b0d16e757b03ce9af3653225a4295628be60a96ae9d4393a6d762f17bd514bf7246dbf35bc3168896c43a3922b844f44b5438bf57cbdeda3072797d7cf37518a7df9a382d26e684f790538f825c8f7178cdc4e1e0bdec03a8bdc30d188dd74d346664584b2e11f9ddae9af28d584cdf30c5747a467593b98c6fc0ce6bc8ca03e23d8f51d5976fc2e2f9bb4c7a83f4dae45411d3d4d4833d3c995c0fb79e793316c7df6752cf4c8d63b2ff84ebc9efe3d6b5c6e0af4b9dbfb788eb99c5ae7efde4b760f17b13eba74c173fb75c4a3e90792d2cdc54bb158bd55ba6582d0dd932b1fce7f7fe7099dc8631793b93dc6af64a9978df285b4db763717c2793dc9a5ac61c2038a77ad8cc4a94f0fba6efc0e2f76e2623e07385e7592fe336d718b3f0cb8e6ce75f22d1d2f973bab8938f9d2d905c6b1c29797d9c20d133ebd60287d5d6ee86796a82c9ebfced1b1d4fc26da4b4b6becb3f65925ec27b0ea4a68d98fb3328c101d748276bf860cc5421bf527a2bb7a4ad165f092a17565f254ae1616c8e73e44fa98fc3d4150b538d7618a8d3c2d8d51d27f5d9183ef3628da81ff27cb8dab1926c192325cb21dd97936e68317d9fa76a5b99aa8df2f8e7c91383eb694d756bf1017f5b63b30d754e210bf3b9497757c03c392a9768e79cac00d83689bccc330b1759229bba75be55ffc08ffed6a14280aa5fd4296e31c8e226715d85a9b9d3b3aa983b21708193cdb2b31ae5f3d4f89012590f816c05cb672b0ce8163b6f2993f5ad59a2342963eee79eaa9dc8c401e4030393203fb21364412c400ee99504f93125c82602e47481280e60968d4d82f90325987d3c16c63beeb80aeb64a1c26d290eb83e6d97c4f509252ebe5245cdf2d08b800a59df3e9295c7c4cade0005c2a794d89a0a2b731bd65531292d4f1b9984f319251cb11f9fc799c701cf0300cf1fed2c038b6201724bdf24c83f51826ced01a9f70ac501d55ba392a83ea72e15959b8faf7b3f07b8f72fa2ab44b8963555b4ccb8c01d3171f843262471fd9912574ba62aa3d54ed6e3af8f532b92770a294c7f89ce5f2d8c61b5f492ac24aa2fa346552d2c2a2ea8cac627517d455f159d22ad69532ce0dc22cabdec2c4db83e1c5bff4e437f44f1ee4d5e104c771cfe1671b586b98bdc3cdd9dfd9d5bacd3fcafb0bb32378d83cecdb03b3037832a44ae8fd6646e1dde303783867c6ea0eea4204f17057abad0795a6f40e61a5a4db929795ba7a6d779733dfd4266c64937aa3336d57392e32ae6f1907c3eaef2b7ffcf873cf2f990c7d71c02dfee81ffb87effef947ebf974c3b77846b13ab6499af495cc146e8faf448d167a163529b440af1f7a9f2c0a459734f89312793c8d6a7d4e07bb8a822f51f9468bb18d0e243c72b1cfb4c69998787b32315ce7740bdf71b9b7016c612e74f00e73f6dc259144b9c4520b3ffcb269cc5b1c47930c0f96d1438d7a140a1fadc77121645ada8702e0799fddf36e12c8c25ce5d00e77794383bd591d9bd96399c0e65372a94af0094ffb10565512c512e043ef37b5b5016c612653780f2075b5016c712e53680f2474a941d25ca91cefff2dae52c25a26b81770ef0b02da2fb823f103f909b80a7fc6f1403be78198eed359132e9293cac6da9b08e0258ff17d5201db7c2757cf7fd686c722515bca300bc9f28e1b505f02a1a4c965e0af0b1467bb19881e248b3713615cadf0094094a946d24ca02998daba2b2c2e554e80e05e81a51a2eb20d1ad917de8fa72271553520b5c4d857132c0d8380a0bcc6f3016380ea06b4289aebd4457e4fc5fef19e68a0821d960c3d90061561499b8c053cd56c11161242b46e6008c4da3c8c4850d26139f0ad06553a2cb12d2f8b821cfbaf1b3b1b60054b328bc5d416d99ab86c9e39e4d2f02089b475171c6aa2cde8a737e0c51f607285b50a2e49332bc65ee64d10a4e597216834e8366005acbbd012d8e3d2dd9005a2b4a68aa032b93d62eecbe22edab1e4c857522e8606d6d2356d2812932ac9f036b6d4389d5ffec1dc22153b201fd0f01ce7d6cc2493a024d86331b64fab636e12c8a25ce4900673b9b7016c712e71a80b3fddeecd7f6ce8f20ac69920d11bc08fce6beb6a02c8a25ca03805576b00565612c51fe1d5865475b5016c7126505b0ca4e5174dc1635c88edb3dc0223b47d10af23f3ba238866df66a80b58b3d23d4a36368a12d4146ef4a89924f7bf5f619f115352e0d326c6da8b0350116d88d125be73a33b677ea32a10d924d5c9e026076b709e6a818c29c0460f6b0092661771b19cca100664f9b601296da6430870098bd6c8239328630c70098bd6d8219c795338500668e4d300907d4c860f60130fbd80493701c9c0c660e80d9d7269884cb37c960ee0760f6b30926610f1119ccbe0066ff286062935df4c109c26c4e3634d11bc01c400913ae58d8c6e0b71fe2dccd7612c037308a81b27c96fcac2f5737756b1e7e5795b8237ed6b83fc0398812675789b3d2b9a99279d7d0e00366f1eb4d2f059d6cb9b60125f49764403f0016ba9f6d40e338de53052c747f4aa07c8ea2b71bb83a86031059c0fe0653e252fb53b97b8ba9e30c6987de3dd14a185c81485cf89059e2228076883d93a8097b2fc9aa452500e5d068c776aab1cd6b6350fd6905b00d8b2273c34662e69bcf11b6c0c9d6830d02c54c5e1415f5cc3bdae2d8a13117586abe4d3849379f23c3b919e02ca0c4a9365d28d2b27f9c770db81cc02ba484d73d63afe9fd8425a145364e10415d06fc65918d5009db3a64509702a8c5364225ece22083fa3b90fd87db0895b09b830cea1b00ea087be6b9110ef192b585fe05508edc9bc3155e94a4cba6c860ee063047d9049370260719ccb300ccd136c1249c634406b30ac01c6313cc38f61f6d0730c7da0493b0d64906f37000739c4d3009db4564308f0030c7db04338e7b6dac073027d804338e3bfe550098132961aa8d6547b086b9b1ec16007252149d717c684d498d081ed9ae7f1300bcc95158e1f0066a859500e4942816f0a98906bc03633b5822d5b0e66fcc075d705329b1aa6f77f117af156095ec0a96f2b9d6f0c065518163c01ea75182eb66b44777e1a8d716bd7b15912125db21f018608bd3a3d85cd16c8b84d3605a50a16b04ac71868d9b3c91ee6340b6c9530eb0c8993662256d8193617d1e58ebacbd39b328fecb527a029425f64e9121444b3645e67580f6009b367d226d8f934de67a0be09c6d13cec258e2fc01e09c6313cea258e2cc0525fd5c9b7016c712e78100e73c9b700e8f25ceed00e77c9ba617928e4d92559a1602dfb9c0269c85b1c4792cc079a02dbbbd914e4120eb8efb0340b9d0169445b144b904f8cc45b6a02c8c25cae10065a92d288b6389721740b9d8ce7d0809a721902d035c00fce69228b0c275e70b9cdbb9c012d6d0d69f0f06580fb267da6b1c27cabc09501e1cc5dc0efe551fef52c0863318bc1ac03c248a5e4f35f876b873abdbcb59c696886cded0bef753090aa843a39aedd150965e5d02ec722925bce6ce89bb6bcc1487c15ae71fcfe0f11b09ea0a802db3678d791ca7b58e0428974751c0c02ad0f4da194770a24c7cf73ee801601e16e5b6266b32986714c76d4dfa826265856d4009eb9364406701a02b6d031ac799700c005d651bd038eeb5d50e005d1df542d44c3a3ae2f865c98741c1b4c646a871ec3d7a0c402db3112aa13f25837a37805a6e23d4387e23f57e0075ad8d500917519341fd02405d672354c2810e32a85f01a8eb6d841ac7cf2d7d0ca056d8089570713519d4cf00d4c36d844af8f11b32a83340e57f834d13c00a283fcc443610f71db0d14a9b7016c6126717609d1b6dc259144b9cb301ce4d36e12c8e25cecd00e7e6287af2331b752fa42c88c886458e0630b7d804338edb4dad05308fb009661cb79b5a076056d904338edb4d8d0430ab6d8219c7eda60e03306b6c8219c771f9420073ab4d30e3388b6e0480b9cd2698719cea9507606eb709661cb79bca073077d8b855006925896c82d8728075a78d5849d7199161fd9225b11e4989b5b701ab79db8099f291c8f68a2fa582db1dd8ec5136c325ac4e91c16d01e01e6d335cc2428c0cee37c02d1c63335cc2ea1619dc5701dc636d864bd8fe27833b04b885e3ecdd0787b037806c1f9c4301da5d9468db4bb4c54c5fb914d17a2532841780ac7f3cf52e8bc9dd3fa731beb3e956e7d139ce23ebe8c0f5a002d706803bc1a69125d28d2fc84696de05384fb4092769a73319ce46c0339e6413cea258e22c06384fb60967712c71ae04384fa1c4d92f40950876a5108ed5bf4605f91000f9d43840261cc327833c0e403e2d0e9009dbfe6490ef027583d3e30099b00f800cf20d00f21971804cd8ff4a06f92300f9cc384026ec8725837c2f80bc3b0e9009bb5ec820370105df5971804c584f2683fc09b0e4b3e3009970c0910cf24060c97be20099707a2619e48e00f239b6ecd347da5346b678fd65e014ceb5052569b70e19ca05c02acfb3052569872319cae600e5f9b6a024ed1d23435903505e60e7469c715c4bbd13f8cd0ba328e7d52e2afc66fef816c6c759973864a63a112813a5bb3a4e711ee4038bdb9cfbf89e2b55b43556b251b11dc0762f8a0364c25e0432c86301e48be30099b017810cf20000f992384026ecd92583dc0140be340e90097b76c9203706902fb3a56a46bad89dac6af6675087b8dc1694a42bb3e9364a065679852d2849f70c20433905a0bc726f6e551bd94cd8955428cb4106bf2a8a1985850d6e46e16280f06a7b76e68fe332b86701ca6ba2b0c6d49df9e36e8db301c26b291176a8c337aa98925ae26a2a8c1301c6ebf66e9f141418d1a40bb2c56ee701acd75362edc89213d893b3b04b5843f9ec46190079833dbbf5c771f38f0301ca1ba3daadbfa17e0e662680791325cc66ce49851c4c9e26078ec970914d0c6e0170ddbcb7be9e33dbf9bdb3c1d525378046e22d51a22d377e80036b81c7717ffe6b81d5de6ae34e00a443ca6495a30260b1b7d9889574fe0819d63f016bbddda64f0c17500e61907d62783ac079874d3849bf764f86f37c80f34e9b7092eefd43867303c079974d0bd74837a721ab9f7e0b70de6d134ed22d94c870ee0b4af87b6cc249fa5d71329cd300ce7b6dc249fa416c329ce500e77d943807b1d43e25ef94047742f846f1379f28be55884c7edab054508ba0793a890af600e059efb7653898b4464ad61cfd3540f9802d28496ba36428a70317f0a02d28496ba26428bf0656f9902d288b6389723db0ca87ed9c201ec7afedec0016fa337b262ec4f1d306cd80853e12d5a7dacb458d73635463462ba9e08d0776f828253cbe85d55647569973818b7055e50370ee07dcc9d0e550a16b07d03d16f507b3cc6b3979344a191fcb249e13f71215d46b00d4c76d844a58869341dd023ce4cf6d844ab866830cea1100ea1394509b3b271b181f269ee23058ebfce35e337e63415d40d67e328a9aa41a14e6a5f3badae08636d63e01d8e1539458fb18323757a2462c57d9c40e103d455bd20e6c1002261bd6680cecf6697ba67bc5f1f3445301ca676c1a70235d214466992b01ce5fd8849374690b19ce3301ce67eddd3c9bb0b2443633be1328a47e69e7f41a428b25ab52b502589f8b624a77116b9853ba5781acff2b9b3c6901657627f3a4b300cee76dc259144b9c17039c2fd88493f45384643837029cbf8ea23b24393b991738ae9086d60cfd2f80fa9b288a2205b522cd905b1c17586f0565fa8bb680241c172203b911807cc91690711c02be0e64ed976d0119c7b51b570290afd8029270532a32900990b55fb505246155880ce46bc0227f6b0b48c2f91c6420fb018b7ccd169071dc90b23d00f9ba2d2009671493815c0c40be610b48c2bd3cc9408e02207f4709b2295303bd53c58c763254fda850ed0b8a93dfdb33ab8db040216b4fff13a07c33ea391b99f498c7b1bffc2900f52d1ba112b6b3c9a0fe1c407ddb46a8842d1c32a8f701a8efd80895b0b54306f56600f55d1ba112f60e9141bd09407dcf46a871dcabeb4600f57d1ba112b688c8a03e0aa07e602354c2d61119d44700d40f6d844a58f92783fa1080fa918d50e3b817cd8300eac751344ef151f4b80f641c0350fe218a2557059a95c679aed1a500de27d41bed7af73a5ccc920bb0e630772217613f1319c2d600e1a79408bb316fdf269f85b95d7a426f968ea81abf9c0ae95cd0cbf959147b177b77874daece8864222159b7dd85c032ff68cf6201c2ce3a3294eb00ca3fd9386798746f04b26a504f90d13fb7112be9462864587f05acf50b9bf643229d414cb61fd2db00e79f6dc2493ae5950ce78f00e75f6cc2493a219b0ce77ec0877e6913cee258e23c08e0fcca269cc36389f35880f3af362d1720dd87936cb9c061c077fecd269ca4fb7092e13c1ee0fcda96bdb90a623933e93d80f2efb6a02c8a25ca45c067fec3169485b1443918a0fcc61694c5b144791c40f94f4a94fd0d28335d91ee6dbb130e67bc46857927c0fcaf288633f88bd70ac84af626794bfcbae912a010fad6ce0d22096d926c83c82280f5df514cdfceac9a143f1f7a0700f99d2d20e338e87b1500f91f5b40c671f5da0300e4f7b6808ce3eab57b00c81f6c0119c7d56b8f03903fda02328eabd77e0640fed71690715cbdf60c00f93f5b40c6b109f92400f9932d20e3b82fc7730024df13d20a9071dc97e3170064821224dcafbddab9e14816d9fc223278a703788d28e1f1fddad7889d5df9abb99a53459f0f17c7376d8e1fbaee005d634a74fe16a71256bcc9fa7c7e0b5036a144a986c4f2c56f75749599cedc4f30a87d31d56ec4f19b7b3916e0cc8ac232339b3448d8db436699b90065534a949d7d65f282587e59657fd02f9e6d13cc384e671d0a6036b3092661ab860c666f00b3b94d3009dbda6430fb00982d6c8219c72dee7b00982d6d8219c74d507a0198ad6c8219c74a7b5b00b3b54d3009c770c860760530dbd804338e7b07b70630f7b109661c5b406d00ccb69430ebbf6c2a8efb1c4c0658dbd98895b4224f86f52f2c89b53d25d660df5c21ac89927d73653cb0d87da3e8a4c32c3675451a615d946c55c5fbc0523bd884b33096389b02ebec6813cea258e21c037076b20967712c71ae02383befcdb122efeccb38ce767b09f8cd2eb6a02c8a25ca39c02abbda82b2309628ff03acb29b2d288b63897213b0caee9428dbb3e460b0775fa38866759055d5f38035f688a271e97f0d05e1c006d91a8aa301d69eb66472d2a160b24cfe4780b2972d288b62897205f097bd6d4159184b94a301ca9c28e66472540df1fba70780ecdd270a90050d14e40c00b26f142047375090a500643f4a90fcab2bdb9c934a87007f75fcfad03b0354fda39850cdbda0921a919dada682771a803780125e73218d0f37548a98134fa3ee4705ac3d0036d09ec9aa719cc5361fa01c1445a76de61b35114e2320db59681ac0996b13cea258e23c17e0dccf269c85b1c4b906e0dc9f12278f011fbdae96f5415ee44c93a3d9f11b896909b00db6a5b54cea1fc9aad42f0094436c4149ea1bc9504e051d0f436d4149ea17c950fe1558e5305b5016c7126519b0ca3c4a9459ce49456d5743fc4075043697bf376dcedb8689e3e291ff019405518dfeb94dc21ae6b6a1e3fecd887300c2424a841d00c286f7e98d7c80b1288aa9a4356cbd135c8d4e249d291f8043aaa45b7f9552a12d06688b29d1aaef9179d77b2f14c2360b8b6d38abbe0f01508747d16dcb61f2ecbd4ed86c24999daccfbb00c01b410dcf3bd964aaa7f089e3804137006f247d769e5e5bd470745b65c6dd206c708a73eb1ae76f57e40ce7c8bf485616c33ae53e00ea281b1788904ed423b3d561a04d33da46aca4b372c9b07e0aac758c4d9dbba4d3a3c83a7757009c636dc2493aaf870ce7c900e7b8285a44de793d0da545b404601c1fd5c48086f299d6cb00bc095134276186ce7c6522e11265b2e9ce59a04c9f68d36225d2711db221b2df034b9d64134ed20109329cdf039c936dc2493a544686b33fc8ec536cc2493ac64386731ec039d5269cc36389b31ae09c6663f392b4024fd6bc3c0a609d6e2356d2662619d6bf81a269864dcd4cd22d1dc89a9907039c336dc249baa50319cee300ce5951ac7dc066064394715cd674060059620bc8387efb69200079802d20e338b3a8170039db1690715c2c3f02809c630bc8387efb69380039d7169071fcf6530d0039cf169071fcf6d34100e47c5b40c6f1db4fdb00c805b6808ce3b79fb602900746d10af7bfad0861d143b6adc83c80752125567eb2c1f9838b885f67452780691125a6cecc5f4f25619390ac9ff20900b3d42698849fe22083f94b0073b14d30e3d8837e0580b9c42698841d166430af06300fb2092661394d06f37a00f3609b6012765c90c1bc05c03cc42698844d453298b7029887da04338e7bf5de06602eb509266193910ce6ed00e6329b6012766490c1bc13c05c4e09b30d4baef0711b8c719fba7a22407718253a7f2b74e3f845b27f00942ba29805ccf7f65352e3be3dd832006f65147d91deb5b95ce186b19fdf3000721525c86e1264a57313cfcc7caaf476d9e7e8cddab01f92b0e54db68074269864b53a8ab2dabb2a7711733fa90e31c67735ee29c03ed74491d14735d08c7e2400591645c98d8dde784bee387e64703440594e89b227d3773458e2d098ea285d26e0aae314e766be187a9b73175fc95b45db33d4830aec0900ec5a5bc112f65f92811d04c0aeb3152c61594f06b61f00bb9e126c723be4a9a2fd4d86aa1f15aa0e0055853d0510e1a8235901b416a03c9c12656ba6efb291dc348270ec9b6c8a4053006e834dab7448d73d9075a4fd1be0acb40927e9ea1c329c9d41c371a34d38493fe84286b304e0dc6413cee258e23c1ce0dc4c3dbd8adfcc17dac70f5373e013b74431b9cfffca45c28a36d9acb57d80f51d612356d23d0ac8b03e2dac353b4b133e2345b8dbeae03e6c8dd0dfad5a0f6333456db05c2059e39ccf11cdbe1ab6d201b2d4f9e72f2d963bff4cd7136210633adbc1b688ab5c5e9990bdd109e59a55b3fcfece2d55dc34b2a469e48a0d71931ff7c81503725b1d19654ea271192e30aebddbb6ca453e07922bda5fee109e4b2237a545c6312612ed24b94d8efe7319ef735d25dfb6ca91b6cad196cbcd1be0dc96e08b4edce6f1b0da86f130b99bc84679a6aed72d93734b2fad9ac34998f34d6568295e578c92ccd78a4de6ca85d4923a635a77fc70eb69952655f2f86ab4061dff1a9eee32d98599764ef0edfb17838c30dfb9b94c28c57fb2fe1f466973389c2c0300 serializedProgramBytesString: - serializedSignature: d87726984956401d933014d4b84f2ea62e3dfc8fab0332ee1495ba14f9e60f879bb6fdf98f86ed5b424aec730f9b532a90f80186d3959f6510c82a46672b880d + serializedSignature: c93c8eb59cbf8fbce583c61c10ed6ad78d787bf84f978749d760f38abaa57b5ebf3ae8d33a19f2e4a4aa0cc068584ab1b6cc3d7709c5261da647a2ba94335604 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/df28128702ff35643981e315b0e8a974.asset b/Assets/SerializedUdonPrograms/df28128702ff35643981e315b0e8a974.asset new file mode 100644 index 0000000..8f8b9c8 --- /dev/null +++ b/Assets/SerializedUdonPrograms/df28128702ff35643981e315b0e8a974.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: df28128702ff35643981e315b0e8a974 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c94c7f3f0f7825b81e25682074d488296b6b8b4582150a12d8424404a203482d4dddd85babbbbbbbbbbbbdbafdebecfeeb39b9b7b6ee7eef69eccb1cbfba79ff2708fccce7c77d62d2b97797f2243bcbf16b2796c121bc616b05256c9567bff9ae45d5779fff9bfd4fdb9accabb2ef7fe2ef69e0d61d949bee47f06443a7b7fcff07e55b31aefcb5a56e25dcbc5f3f9acccfbf70cefdb32ef17bfbbccfbbfcc7b2bd2d0fb68019bcce6b0d9ac53a44312110bc547d5f25e84db1569eafd3d916df09e9609a57820b9e25127efaff9de936af16c95a7b47a6f11db5d98b5ca7b56e27d53c52a3c994b85c4a64f6ccbc43f987fe928af9de495ebd84cfebb81fc7753f96ff87e2379ed9ce2fb5dc077cdc0bf39a10b127cdfd5bf463cad5963effa33f8cdbffd46bed7cd9797b52281ac1ef2ba95bcf694327f4941ff26f29a9dc4de44327a0159a9306b2aaf7de4b5b7d4f7d734c3efe7338a6c04f238cbed803e7d40d8cdc0737eaf6f08db553c8e0fc4e3783f1eb3ce94f1f7897cbfbfbce6c8eb0029db7ba7d338796fa0bc764fa2d720ff3b369a457dd60bb3c11af97bb0bc0e91d7a152b78952d7ff81df617551713a4cca9c20c3f84d735fbdcf9fff2e7fe7ca6b5e20be86cbf7fe90bff353d42715ff533a4d9261fc097e7b1c1b2e49204bc5fbe440bc4f96df9ee8736c7847c01ee07f5ab90552de5f69d8312560c7145f974639b1ef25d541c92f9472a64ab97f83df5ceea986b63594dfdd227f8f60c9f3b68e293c1bedcb69aa588ff1c369dcdebfdf38e8cba392e8a9e2765a206ea749b91552aeb27facff3ba238670339fcfb7f0272a707e44e9772551e919fa29e5bcbebb6f2aad2d67856978ef397c87bdbc8abccf32233586c1e30433e1f17fdb6abb227556e89e2686220aebbcb70b74f22537d3f495e9ba5f8be7a6772089da7c86bf314c36c2eaf534384d9c2f785a63f047c614c1299d37cbe4d6b800e9e9c66fbcadfd3e555c5f3f692ffac801fcc4ac10f92e9b283d4858138f07469de46fe9e29afb36275f1ea92b13afd5b7f3a45769032ff03bff975a67f3f8b81df5cd7b97e38cd1f9132e7c8ebdc80ce3bd2e9ec55dec577ad5a02df48e5bb44fe35dfb7af459e2fbb4591bcafae4ab72951bd9b4e06df2a3d52490f0b258b3901c673a40e8aed4e81f722e037bfce8e8627feed7ddb52f95657709f7f9b057ef3e70b52d4751716efb35cce8e20ec1d65d832ff6f79a27c7757169ff674dff2eb5c706fae94f78efc6e118b2fc7d47bdcb606e0377fbe738ab6eda6d1cf0bb7d5f804dfeece62f39f49517f68f282bcb787d4671e8b4d5bf3e4f35ed16f2215f2de62ff776ba5cb12f9cd7cc045fae8162abd14cb6b19d397b3258083e4ecb527ebc2ce566da9a509c22a95ef2c0bd83d3f2aa74567a9bbcac796b3d834137c97df53e59db2bf525e5747df2dfc42de5b29afaba46e452c266f667b82fbfcba40fa4543f09bbf571e95dd45f265aa4da074d5c5e75e01db757940223fabf2df2db842feaef6d9b6de28b93d12d061094becbfca47da69e2b936493c7be1b691f5bf36c1fa5fb270d7caeb969a70d7a510eeb132dc5b0cc35d2fafed35e16e481e6edb86fefdb6430cc36d177b8d2c04efefcd7c1f6b1478771ff9eecef27963f09b5f778aca10ffe6fa5de2ebb7a54a3faa6eb25f6c9c4616b3d83ac962f93c51596a6ae32ee0fdfd111b0f90ef2e0ad8b8485e7705320e94f7760376ef2a9f1d0c9e71394d02cf0f91d78390e787025b75cf0f8bd5bfeefee1f2f71e01fd55bebd3bd075773f8eda4df7f9b6fb40ca38425e8f0ab0191f8d8bba36c691f2aafa558e0ec4e7bfe077d8f8546944e503ed62d9b0637cb9b9cad7f253949b287f3bde9759d7ee3e415e553d603c90dd41daaac2839c8e03cf20af63633925d4e524796d95c49e8ee03d7e3d3984fd899e49df62a749db8a596c5f04ffedf957875b12c83adde7d44df55b9ee17fd351951bb22fad838ad3b3804d3c8ca551d6ed557df66cf90ce6a5c7ca7ba5e09e6ccb47caa2f722b2bec0ce898d9fbaf4a79e6f043274cfcf053ae89e9fc7a2e997f7bd65cbfbe7076c3936a06b298b29ff557f33b435521a085bf96e2a7179a1fc7659202e97f9f1d2e9c004b22ed2c7656795562e0ec4e52581b85cae89cb4be5b31520de06c87be52c3e7ef7041c545ded32242ed5f3cb815cddf32b800ebae757c6c6656755465f85c425d41fc6e5d5f1b68a7760d8a9a4fb6be5f51a79d5e5b9d7c9ab2a5f9aa720f77a792d4f20b76b406e8b14e4de28af3724907b13a26f3ae1295f577da82b59acaff3df5e9c74ad4820eb66a6f5f56eaa7e730b8bf5f55b59acaf57b0785fbf4d3e5b158d7f26ebb191d52cded72b819f285d6f07ef405f55cfef007275cfef043ae89edfc5627cbddb1bf2fedd4cefeb507fe8ebf7c4db2ade8161ab3e904471796f80b3e2bb86c5f63facf1e3a7bbd24fd50dce6089cbc6fb7cf923959df74b797b49f9adc06f7ead0a845b25c3bdc697d343a5c996f2fe23f2beaaef3de0ff1ea5ea3a0fcaf7be09bcf7907c4ff51f3f12e0ff68c0576aa2fe5667cbc3e019b4ad96c5d6491e93f7d782b8aa05f7605ca9ba5c32ae8fcbeb13017ed552de16e0377fefa9a8fea3559ef0a4bc9e147dd6fe8340fcb6047a3cadf715a12b8833e33a92b2f99924369be449eb586c9eb4cef7839e89747c41bed337c13b2fc9ebcbf2faa294bf9ec5f62ba876e92bf2f786c073d536bd21cabecb1d400f259b7fd33a05fb5f63daf19c9e9ff8f77bfe9e40c6abf27a90d44db55fdb80df9eac6ce5e7afb3683b81b7a9f79557f5fc8d80dc37a3368e3d33f0cdf4047aa552874ef75989b46d1f169bdfece3dbda4bf57fa874a0eac998dcb7e4f56d795575c87d596cbb5c956f89da71c9c24a605744b6cbebfa15f797cf657f69643f696f5bf9fbc0c0fb07caf7df95bf0f08bc7f70e07dd94e67efc9df07c5becfde0772f8ef0fa2b645541fc687e09ef441f651944f9f07e4b34362c3661fb3d8b6a56a3f1e2a75d8127c0719a8e7aa5fe3b0804d87cbe7edc16f7e3d2220f7b000ab2302728f0ce8abca9acfe5f5b3a88d637f00df009eecd35899097dfa0329e328f94d07f0dbf3e93e7f2790a1be55fd0fc748191dc16f4f46df425fdfbe09d26d44d59dda0764aab2f438f9bc13f8cd656f4ca0df87f2dde303b61d2fbf7d23856f65df43e4c4806d27fa32fac9fcac5fa2fc5ff53b7f198843e5b35c9eea2f80f1aacaca4fe5ef93a40e9dc16fae83acd7b1af98deb74f087cdf25f6fbfeb23ec0be96d76f02ba9dc262fbc7bf93d7ef719f64eaaa743f35fa4e9d7edf06f453e3fc4aefd3a4be5d811eea3ebf9ece62cbc7d3e5f73fcadf67049e9f219febe6df244a233f316d3939a0a57f7f4076021972ee415d9be9d768d85babf1d95fa43c397e34407150bcd5dc1e5dfeaf0b5395db2a4f3933fa5d704c27729664d42d70ff6c16cd5fcf94cffe087cd324f0fc4f16dbbf9b88e95f7aa6394bfcfb39350964287f3887c5ceef3847ca50e94dd9bf316a4b5dbfaa9ae7f477ac2d75cf4d6cf9476fcb4039af87fdcb62fb4813c9fa0f91a5faa298bcafcad648346e87cc4c2e3f9205ece6bfcf95767607bf797809e6342a1911d59fd603fce6d7f3596cfde87c5fe6a071be9e83e626d05395930d026134093c6f18881f755ff5cd5fc862fbe22f94d70ba2be20fecdf5fa20057d1a27d1a709a28fcceb221707f4b9585e2f02fa5ce4eb33b854c6a79ca31751cf5b0438ab3e69efdd71b2af2022fb6822b26d18b984c5d6255bc7eaa71b5f88c87660dd1ca64b03322e01f7f9f532169bcfaabebf54f32be59b91806f5e1ef0cdcb7d3e434ec4652919912b02bea9fa1355bf2103bfb9cc3724f36f12e819f44d1586a96f5e1df005d5077915f085ab7cbd86aef1f51a7a680a7ab549a2575b442f75bd36a097ecd38c5c03f4bac6d76b58535faf61329f88a8bcb603d001f35155c7533e7a5dc0bf3ac5eaa7f551955f2a1fbd3e20e33a709f5f6f08f8a8ecf78ca8bad48d81e7aa7fd4b0ae10e9e2bf9ba77cb8abcf2bf719f95b95b389f2efe018ea4d807ff7401caa77949fdf128843390e14b94ddedf0afc567a04cb465db85b21e1f64c12eecd40c6cd3e8bbcc992d1ce38cf4836a2d3ad062c6e0fe8747b6216a25c937131f0065cb7bab23aa8db9d06bcee0ee876b7bcde0564dc25af77b0d8794977f81c87cbf90ff97d03fa28dfba273e6e23f71af0bb3fa0a3eaabbc2fc0ef1e701feadb09fc5669c1b48f62bcfcf601169b6f3fe033c897f3bff35518bde477db250e2bd22720ff4129bf27f8cd9f6be60f4524efc880581931ed3a35b7e8a1e8f763836da2fed167dba8bcb137f88e5ffb017b60ffb0691f4f0ed38e9d1404e7bf5627e1369069fbca0b471bca916b2a545fba588005fad2236a4d856affab35150fc77288a8bedb47a2e1451e06f774fde44974d3de53e3248f06fcf051dffe1172ceda08e54fca0f57250e4bbd17790cbca7c27a1cd824d76d449e00f71e07f7f8f549a95b36f8ede936726340ee53f23d1836bf3e2deff706bff97732ad449e91ec7f0dc87b0ee8f48c0c53f6f544f202613ccba2e52c1f17d92dc0e15920eb29704fc980e359abc195dfef23e3a02836cc6471a08d97e1f2d9fd697cfb3c8bed1b7c5e5e5f08f88e1c3b1855e4eb3d4af5f32a3f7d3089ef28b932cd4554df7f5bf09b5f0b803cd0479fb23d2f05ec792910ae5c4b93b0bf51c5a55aebf28afca62ff8cdaf2f83f81f21afaf827b720c25f29afc5ee58fca475f07efbe0edee5d73758ecf8ce1b3effb14501d9eabb376518fdc16f7e1d29af6fc9e76a6e814aa36f031dde02f7f8f51df94d0ef8ede9306667df07c60e41c27a97c596c5ef06c27c4f3e1f087e73b91f04de7f5fbe3708fc568ca19cc1b172e2f4fa00d828c310638389fc5572ad1b6f7b5dc6c76fbeeda337c6da944c5ec2f26e94bcaa7249e9fd218b6d277c289fa7da56fd4c7ea7e68c7f148817d9672aca7853dd65be1af998c5e6131ffb71b0b51cffda5acde151f9c42f49b87fc262d3ef2781f0d478c110f0db0b6f9c2a37f30dc251727978ffe8c31372407829e7439fc9ef545d40cd03f85cde1f06de53f7f9f50bf93c17fce6d7b1f2fa65e0b992fb158be91b8d7c09eef3ebd7f2791ef8cdaf72bd58e49b805cd9b720dabdfcfe70dc56adfd2a1ffa96c58e677cebc7d736aa1ede4b5efb25892f254fcd17916bd722df49f9f9e037bf7ecf62f2dc88eaff5779ef0f2ca67e207e7b7a6d7b6c40ce8f0139b2bfbe2e5ff8493e2f087cf713b08b3f97e34adb5e10b02789ddb1f71a45447fcd7456c68ad91a962b3a3779ca4a753b00f565f28d00b8e8c6225533be23000fb6866df03e2dd3adc65f20d6fad7b0022ffde956e377117ea4429f24fe2ef6de2817424764c50571675c105cb90aefbf32b09540b5777f9ad889806f2650ee3d19c6667a57fed512369c2df2fe8b95b2d00bb682d57abf8abcbfd708794b3cb5e3df4c6612df7620f8cd3c4fa6bf2bc22aef8e02bac6fb5d21349c2ffe5e2b342d13dacff0eed5883d1a56b3e56ca2775d2f428bb7bdcafbb72ecc22894cafa37e7304ecbebf05838aa6c99e355cfb5ce18bff17239b224638fac623643a6c982b5a1347c7c5c4ff31f43319de393443ca182e904562eee5b35cd17f342f8ea0b98df116eafddbe73d921526b4454f8647773761413486fb6dbc6fc93f5ddbfcd828d6b402962baa75dd939896082c9797237aab4d4c68d4a8611e5734883fa2c32fbaf9e76710bfff5eb978cf3c021a8bc22f360244b3b0c8cbd5e682c273a1f7b7afdc02614685503268d6144fcd626158853463aef86aa548b5b3c4bfb9516bd80a21b58cc5c5721e57a98988a8f8623899b1585465e9a24a8c06166d9294826dea9338b29ad659118dac5c51b7ea9cc0a5b1b044a52b4bd6bc54a2bbe7d639ab8b4efaea9346fa78692ee2259dd0b09869a08b99e6994e44c94b8d44f1d2a2ceae68bcf03f7a862d11df4ea60346b0a18e608b4cfb367f5629a4147bef9a33e4cdbcc1c18c480f700bc40993ab80216ca44198c711b6d668c51a350b68c515422437d6454ecb4d5344a7e7dcbc7fb253004123d4b9db262c614d5dbb898e9ee81058424a4fb51ce77b4d841dbc67c5defb65a21acaefcff524167b617379134408d1d666ec1789c9f211f5a141b25aaaed04d5bea01d1c56338c78530df13ceeafed356e20f2b86062688b2786665832eb10369935c724770c2bb90526b95358c92d31c99dc34a6ea54b36621ed16e194936d10e17f5af89deb72b3c63d68a5674adf7bdae83267172e9927272e92a924b36d3751b99698425932d7471c76f76d329198cbaae78d4b5c604770f29b80de66d3dc27a5b5b2ccbd84a9365fce7fd31c932b6c478f40cc9a31d26383ba4e0f698e05e210577c038f7ae87acb9a34e38cf55fbb0f8baad36125be2c23b619af7d568beb42ccb48f3ce9863f70bebd85d30c9fdc34aeeaacba045d23f28c319b4be177d9a68c497b1395edd6c4fe6777faa70fd663bd74875a3cef3aecb8416fc3ed72279ef7be2ac7e00d33474450e36459ba96f2a2bf8d864962872068a22878f992cf0eefbbdfe53440c948b908669b5e12160ef2b16b318df27b856c47623a4593e48846e171bace8ec86e534833539cd1bba6c2c414ed31d4bb243c226d91e3ac93cc90ed5f86a1ef755ee0ccd457e1e17ce203c9cad7459832862f7dea45983df80e3f29689812d5fde6cc6b7ba5e275c75a5e7c06ba5e31479ef5479619449270f9319f001db1ec19e01e6ffd127873c911cb64d2139505a8525809e3a4fe22d5ddea11fd717cb8bb7795ec36e125b2c92e15ee236a7e4c76eb978b59ceded5dd518559cbf35c1fd2d5ba70d6f40f0f1e6a4d59576b8e05e98e08290827b6369bc306c1aefa393cc731b3ef7296c0dab2fa6f6c8b06af7c372d4519a1cf5ef88598eda1f133e5a23fc9e2c33e10374c2b9b38e49c5471278750e2678ac2e8d71809344a761b6f77fa5f705efa22a16a93f5b1486d1dc20db4bebe5debf78813d04bc5fe9bde18f099be83910738aadc33ac5202cdec669e2ed17c3781b8c09df46237c7a0333e143b0b8db5617773cd3e4e506af96ac90655b6c6e982d46e7b3c5848c5ad1f9552a62ae5ac46b36dbc72b2ff6f3ae35dedbd9a21ca810cfb2c5c90f5522af3589d3a198fedbe9f46f0ef49f0b3434097118966f8dd7e45b11c37c2b57279c577c2630a4e2c377bd36aff8e461d826e9b0f1ea181f6ce435d75af1fe7ce100657575e5d27a2a20876bf4ca15dd12abd9a6ac90f1d6029fbe522dfe1dada2f0b0a303a4612a5e7c6550b0e2a5fee82b5ebc059223662267427bac82958f65aa5335996ac424532dc0d2c2342c2d4c4f2b2d14ea7c4ef458add9a43e87a7a87942364f79e12bfc333c1b1b045bffa25bad3005cfaa2f1d078b55c4d5e2641f9f5c35cf4cf918c65270848f0f5f24097d9ad85ea4894c6a8ea58b1158a9bd83a6d4bea59159a93d52e7b2a2cbb26a93baec642121136e3b53e7b6a25f75640a915f9f7af614b31cab45a65a2a33553febee2996ad578962b3ccbbcf335ef87cb0986ecdeb4b5305ef55823cb7af58b47b31279f259c3cd376628e3e0a2b00666b0a00a35af5682c09cdd124a1bf0d93d0184cedb961d51e8ba9bda346ed7d1b9ba9bd35267c9e46f8cc2666c2c7e9843761feb6f3615a88db6082f9a499b8ea266fbcab764249a0a5b854b41554fbaf54dcd9e0fd5de1dd2b1122b2c57c3835306fa2e5b618db051ab66d0cd96e8721581892ed789d60ee9e3ba52238c110d8049d605effda9921f52fbee3b979fd6b22867d570df60b0cb14fc292f9a2b0c97c322679b7b092a76092770f2b792a26798fb092a7e924f3485cac89443e37c52412a763c297688417190a9f8125cc625dded48ff1b678b492ea379fa2fd1ac56c999052e5fd7bad2c734b63fa47789f47b96c349ba4f3ed313d97eaf4f417c8f0e947bc4e512cfad0788873d84aa35077c0d09768d01f6b887e2626bc5423fc0b43e1b3305e653a5e9d93c46ba998b512bd3bdcbb6bc27136a6cd329d36fc6734de4cc29983215dae41bab1b919d2b998112b7446f06e1b1fdf580fd96cd1e1572c17f7ac15c5b839c61d310dca751af09c6d665dc5606e9ad5827918d23d35485f31443a1fcb915786cd918b30b52b7499660b33b517606aaf0aabf6429d645eeb58cd905a07df97dcbcd6b11316ce1a2c9cbdd20a67675d387ebb3024a95db008aed644f0f8966611bc2b26bc46237c5f43e18b30e1b51ae18f180adf0d13be5623bc7b2b33e1bb63c2d76984971a0adf0313be5e23fc4c43e18b31e11b34c2af3014be0473f2bdc33a7931a6f63e1ab5db6f61a6f6524ced7dc3aa5da2919c2b66e66572a14d70f693d95a04bedf746a5380f9aed9ba4536c9c2c7ba944a75f1c24be803742a1914e56598371da8f1a64f0c13c1324cf8411ae1bb19baea724cf8c11ae1471a0a5f81093f4423bc4d6b33e1e558641e1a3232f7c4041fc63475c121c23b2b451ae3d5f932b16e75b5f8d76ab177409918b82e16be1fed705203d77c4965b6f4de2ae9d3159eb70ff3ee9a68bd12d3fa709dd67ce49577e246ebcd7e53d26f86e8e61566b301b2d63dc048af0acc078ed0f8c02d860eb60a33fac8903eb05a2338574c522e27cd67b179a445a2f39e6f5cb04c78ca2ae359a789f3e4a352ce938f1679329f1e41a72b967f57eaa29bd7ad8f6148dd9aef93d29cab6c54b75ea30b87fbec711a9f2d34ccb7f6c2841faf11beb3a1f02a4cf8091ae1871a0aafd609e7d51abe6364a86a4d0da6f6491ab5ff3654bb16cb244ed6e58c7cd0cd5fe2ee7b6499f7c024e7588b99728ac6949a3666a6acc34c3955670a9f6b10bb98b056cc7babf432f6b5e24e95e84534cb1ad763069ea631f01b43033760069eae33b0555d5c4d089463a6f383f6c6c23d43172ecf59fc09c48beba533741f2cf43375a1f3152d8bbdfff2bcff9369c1dfab12ef98e8b32f16c56769a2f88bb66651bc1f66ecd9980f4f053ddb6a865f759da9aa2fd5c4c0fd311dced1e9d01a44f724b1de70b5f81d9df26412f60158d81b756177d644b65e87f4a2fa409d36dce0731952a4f2adf2cdbbab0ec2ac3e5f67352f2ae6785645b36068b3d9f8c6c158c81760fec649f28e8d0a562eab4afe9c607e7f8df03a5e3d36d1e1104c870b753a740271ee7731577815f162b103cb6c59354f5f9743315d2ed2e9d23ba0cbea9898981920344bf8df0a116be96b7818a6e1c5c9684df0c22d8dd36a21f367aa2c138d3133ef391cd3e5129d2ed94017339dd24bbd476019f5a59a8cfa8e766619f59198e997e94cef8364d43011a97baa25394c8ed40cf0ee95a595991e8501b85c03a0c610c0d118802b74007845387ce9700c66d0951a83dab43733e858cc207e344698e6f27198e0ab75a4b8398bea46407d17d8ddb0bbe3788cd3351a4ea5869c4ec0845fab11bed150f8893ae1bcc4bd8e21252e3f70c3bcc43d49170e2f586f4825b213ccdf3919137c6348c1a7605e745348f73c15137c7348c1a7e904f3b8e7677504d76c7001266b364ec7bcf0568d173ed2c1cc0bcfd009e759183fb923545bfe4c4ceddb356a7f62a8f65998f03b34c29b7634137e369632efc452e65d69a5cc733077e42796c4e5967cce7cb4465ae9952d73454d81d71cd687a8656dc4b4b847a745b45ecceb34bc06ca67b3f8f389d3d7e15c4c877b753a6c2975281075d14ab9ea77bd6cfba4a7c1799806f7e934680ae282af3ae61d9c26a19d8fb9effd1af77dc5d07d2fc0dcf701cc7d1f4ccb7d2fc432bd8734995e03c34cef228cd0c31a4227763223743126fc118df01b0c855f82097f5417b786c22fc5e2f6312c6e1f4f2b6e2fc392c31389b2a6fc7ace9a2ec7b4783271d634bc1eb3a62b301d9e4a943515d663d67425a6c1d3c9b2a69d4478663da05761eefb8cc67d2fe86ce6be5763eefb2ce6becfa5e5bed760c8f8b92e612a7ad762745ed0d019d2c58cce75189d17313a2fa545e77acc889735461c6a68c40d18fa5742a2bf11d3fa558dd6ef186a7d1386fe350cfdeb69a1bf1933e20d8d11fb763533e2164cf89b1ae11b0d85df8a097f4b23fc0143e1b761f8dfc6f0bf9316fedb31e7e467f8a0c55a413d176b77605abca7d3225aace5d763b17627a6c3fb3a1d54b136a21e8bb5bb300d3ed069d08c458bb52962c4b2d2709af5dd98037fa871e063bb9939f03d98037f8439f0c76939f0bd98119f688c68d8ddcc88fb30e19f6a84971a0abf1f8b6e7ea4509872e1014cebcf355abf62a8f5833ae1bc7b841f7414aa7be4214ced2f356aff6da8f6c318ecaf74698bcfe748bc90a2c87b758d58eab05ce43b55629d91bf5ebe544c519bcbfcadbafdbd568ac55807efe65f217eab7cb3982d95ddfeaabbdf1f08d8c0fc5d5bb3c5044e7f6c245bf4a097cadd7b568a3bd5e2ad3220593f45ad5c4eb58393014c477c1ec122e86b4d04b5ec6116418f62c2bfd108cf3314fe984e38cf8cbec532a3efd2ca8c1ec78cf85e47682b33239ec084ffa011fe8321a12775c27962fd3195cc2841d7f5531ac1b962ebd14d335f307e17c8fa9d2ff8938e9776bee0cf2cd97cc1f0ba62f3059fc67ce9175d6a3374d467b022e2d7b045c4b398e4ff8595fc1c563efc968aff27c8349fd7f9bfd82077d926f1ff30fbb326f6fcdf53f6fc3f84e70f4ae0f9e17691d5c7c40b98f3fc19d6795ec49ce7af90cef312964cffd624d3237b9a25d39731adf9519a715522bed7cd04d1d02a1393cb748babb3457529db701efc2b981effeaf4e0fbbb99c97f1593ff5fc8d8794d2798c70edf842e183bcf18c6ceeb98f08846f8e86c33e16f60c2b334c22b0c85bf89f16e1009c7fb2d4ceb861aad0fec65a6f5db98d68d22c8343c354dc3af5ac7ae5e3131eb1d2ce4c6ba9079c7837f78596edd6927b9757b05cef1d26629335d6ffd2ea641139d069db41acc14ffaa111b2bf90d90f496d3bf87e9d254a74bb71475893f0ec344a7f731c76ba671bc0b7a9b39de0798c1cd4326970f31c12d420afe0813dc32a4e08f31cead349c1f30e4fc09267c0b8df043fb9809ff1443d23a2492cf748279eed32615c109da659feb04f32671db08d224de32924e93f80b0c7b3b0df6ddfa9961ff1233a23d664487b48cf80a33a2a3c6888d86467c8d09efa411fe447f33e1df608ed959979df22d1ae631b87b5ea9a8eeab8c3c870d1405de6af977ece2cc6cf1cb2f7e86885dc1f81395e556b30ab16f58747d822fbd5a9c9959eebd1dbb945285c3fbb5fc2276595d769e2d32f352c39991df622cbae858f0ed24e116bc7e85375ac04677aa592734ac60d10d567cfdb8cec924e48bc9be66767c87394c578dc374367498efb124d50d4b52ddd34a523f6046f4d01831ced0881fb198de4a17d37c51a3beb77691ece7e50b827943c7dfb931519ce6247c3a50cce6f57b78a37e1d9b022a8567a8dedcd86735c2af6a34a968a9d0b012f405fbb22b6543d9c4bf7ec2a2a6a7266a7e318c9a9f31e1d91ae193079809ff45279c37f17b454236f17fd548ce1567bdf045f199efc6a98fe3761277e7f44ea582311027f63f2ca2fbe85a6b8611fd1b96c0fbea12385f2aa65b815153378c123ddea05a249d354609e677ccd47e1a53ef3034f50fccd4fe3a53f904c2e86cd4b5750fd21f95fe130b7f00d63056eb7bfca6f062cf27fd4ea31986e34d7f6158733458a7e79861fd5b279cbf3f3012fe58bf7f30cd0769346f3fd04cf37f31e18335c20b0d85ff87091fa211bec450388b20c2876a849f6a283ca213cedf1fa68950fec72442b330e1b9f520bc814e384f17798952789e48d1d135ece9a7f08658f8c393a5f0195eca9ee0d53b96c912c87444b91116723ed6f1145c43a8d320bd15838d315d0a74ba744162a1c82b4aa03ee9c74a134c9f429d3ead5870ad67ba9b2f36c5c21da10bb7a3264ee2c34f2f469a61d9c5484d769137c42cbb688e99390a8b6e5d0d423514a00b441b8626c6b6c08c1dad31f6c4c166c6b6c48c1d13b27baa954e30f7c5b1a9084e700ada1698c65beba2870f2afa1162bee3416b0cfc380df8570cc1b7c1ccd8c634539927beae149d32e9672a6d317db6d5e9d306e803c34f376bd9120b7dbb64349269915e06d30e8bfaf1ba86ee30b3a86f8f193b41676c772483a90206d74736d3013379a2aef268687247cce4493a93b984744ce88499305963c27a43133a63264cd199d0cffb99e3351d8be5106099dc3d48150c7e4c46fb31634f5d53f1c97b01b6f39ad22610ba6010a66a2064e79a41e8aa13cebb51a685ed46e986a93d5da37691a1daddb1b89ba18b3b7f8bee702dd41e5888dbeb4254f3d6e18e3530e4f432b1ad301d76d0e9d01458cdebce730c1743f5c4429b99acad120c353d6bb331079aa571a00ff2cc1ca81766dc6c9d718c69a42750bd37267d8e4e7a93badc31378d5ddbfb6098e6ea4ab67c334c7d31e13b6a84cf2d3013de0fa3342f6455b53f26787e48c103301c45ba22d510470e267c81ae6bd150f8404cf8428d707e6a9f89f04198f09d74bd7786c2076391b9b32e2dd5b0d4ce45083785df9f87b238665180dd13fa876051b48b268a76368ca2a15814edaa8b22be9a297e4d858931c374e1f181cb45750f020397bb45d219b8ccd585c3bba6764f251fd91f179c8701db43078c173fb946808663f21763d5239d479b84988f85b804eb4a8a778159c2d3d5f130d127669e5e8069528cb54cf8809c694950a8092597b7ec22fc14954ced415fe4fde23b6d9bef3fbf34c2a7b4c5c210e9433b8bbb24c247623ac45996287cf4ec4e5dfcf09fa5113ef32056a5ed671dd46463f767b3e2a2a6111e3523310728d33980ea4df533f80aef5f35d2a87243c71b8565b1cb3459ec3b63cdb2d8d19851cb7546f198e2c3c32b64a9a33a1aa2fbcba5bb93f9184c8f153a3d5aa37057cb92ce24ecb158d8e5bab0b3bc9fd95e93dd2484adb110f6c4f265b3a6fc385daed123d3b986bf415f551ab9c6ca081fe88ec5300cc9332a903c2351e8589eb18d8edb569cdbe20c72f3dff34ba7f9a243a7dcbb33474cd8f1a7ff54a7c17455c4f46cf2d5826c9f38cbd3d50fa3be2dd6375419b66f683b4cf29ab092c76392f70a2b79824e32cfb1ab22e1c7852762194f75c816eb248c474d581e9331c9b561254fc124af0d2b792a26795d58c9d330c9ebc34a9e8e49de1056f20ccce9f60ee974db632aef1356e51d749279156edf54544e300839135379bfb02acfc228ef1f92f26c4ce503c2aa3c07937c6058c97331c9078595bc2326f9e0b092e7613e7748489f9b8fa97c6858958b309f3b2ca4cf2dc0041f1e52f0429d606ee111a9084eb0f865270cf2916121ef8cf50e1d15b27768178cc5d12159ec8a093e26a4e045188a6343a2d80dd3f8b8901aef8eb9c5f161dd620f8cc50921592cc6d2de8921d3de12ac667b523dd46c8b31d0278705bd14f38d5342fa46894e307fffd45404ff810b2ec562f0b490315886093e3da4e06558ec9d1136f69663b17766c8d85b81c5de592163af1c837c7648c87b6282cf09297825167b1bc3c65e05167be7868cbd5558ec9d1732f6566390cf0f09b912137c4148c16bb0d8bb306ceceda593cc57385d948aca09160255612a5f1c56e56a9d64bed8e79254543e1a175c8345dfa521a3af16137c5948c16bb1247279c824b20e8bbd2bc2c6de7a8cc59521596cc0045f1552f0de188babc3b2d807937c4d58c9fb6230ae0d09633f4cf0752105ef8f35adaf0fd9b43e00d3f886901a1f88697c63488d0fc234be29a4c607631adf1c52e34330c1b784147c2886e2d690280ec334be2da4c687632da8dbeba105750486e38e90388ec470dc1912c75158167757d82cee680cf4ddf500fa184ced7bc2aa7d2ca6f6bdf5a0f67198daf78555fb784cf2fd61259f800179a01e809c88a9fd6058b54fc2243f1456f2c958227f3864223f0513fc4848c1a762821f0d29f8344cf06321059f8e097e3ca4e03330c14f84147c26d6cc7e326433fb2c2cfd3d550fe9ef6cac5c793a64b9720e96fc9e099bfc3662a09f0d09fa5c4ce5e7c2aa7c1e46f9f99094cfc7547e21acca1760925f0c2bf9429d64dee9fe522a301274ba5f84a9fc7258952fc6547e25a4ca9760b9d1ab2173a34b31c1af85147c1926f8f590822fc762ef8db0b1770596fade0c99faaec4547e2bacca576192df0e2bf96acc95df09e9cad7602abf1b56e56b3195df0ba9f275982fbf1fd297afc7047f1052f00d98e00f430abe1113fc5148c13761a5f5c7214beb9b317ffb24acbfdd82f9dba721fded568cc5672159dc8655113faf872ae2ed188e2f42e2b8038bc12fc3c6e09d18e8af4282be0b53f9ebb02adf8d51fe2624e57b30dff8b61e7ce35e0cf4772141df8769fd7d3d687d3fc6fa8790ac1fc0dce3c7b0eef1a04e321f53fb291595138ca93d8465fc3f87ccf81fc604ff1252f0233ac1dc957e4d45708231b547b1d8fb5fd8d87b0c63f15b48168f632c7e0fc9e2094cf01f21053f8941fe332ce4a730c87f8584fc349617fd5d0f79d133188f7fc2f27816e3f16f481ecf6179d17f21f3a2e7b1861acb0ad7507b0183cc579e853b6306839c958aca0920bf84b1681092c5cb1ac1b93d398b95cc8e93bf16c93558f5b7696e431db348809958afd5288bafd7ca6526a77fa5a32fb68eeb155db4f3d8699c4ab473ed11c1afea04f39f4db2e297f2aa3ff101e07ef51a964b36cd0a9f4bbe8e096f560fc2dfc07287e661738737b1ea718b54623341f5f82d9d60bea4bd652a82f9a45944f0db98e0562105bf8341de222ce477b1da7ceb54544e509b7f0f53b94d5895dfc71263db7a4a8c1fe802e03bf76d990a939f71c11f62e55dbb90e5dd47582cb60f198b1f63b1d8216c2c7e8215d11d4316d19f622a770aabf267bac23fdbfb99d1c5d945cc3f933b7619f4442f3c2e3b7a5289d9e2ecce2917f25db2f48bb2d3d50b2bcc3fc7124bd79089e50b9d601e8ddd5211dc05af257c8909ee1e52f0575801dea31e0af0af31adb70aa9f53798e09e21057f8ba5f0ecb029fc3b5d0aefc553f8820ca670987e54f5d82c35f74a3935f716a9b94b9c75a9e880a5dcef3177ed530feefa0316f97dc346fe8f98dafdea41ed9f30e1fdeb41f8cf585639204bb39bcb64f1739ee72cf3d964b643dd1983b319dfb8729d88e09532ea87895d6dfced2dd569228bc5169fbad69a6e5737fe36742deef895ccdf83ce6c9bce5f302b7374561e5e67e502aff0e189ce4fa0abc4bf6788a4cbade17bddf9097446dd9b53ea760f8a3d38ac4af2982f9e967a126b855d5c6e2cbda804febe991e98a422c67793515b8e42a630b106792ff4e4986ef0f42b467a20e64f3044dfa602ef1b9f56a597292ef67ca34ac4b96f6d91dcb129a86df45bfc7e7df9d3ff302b07e9acdc36602564eedb3955c4d82a616350cbd818824f12a515f8958965bf61960dd659b65d4af1e71f8050ced40e3be1632efac4c4b6df31db86e86c1b19b06d96889d15d232fe6bfd26b3e40fcc92a13a4b8ecd707e16fd861f14a7b6682f05e7cf561b783964875bc1cb925a51cd80b91eaf60d55fdef627467d988efa8494d2c64c41a3da8a5ced2fccbe5c9d7d3309bd8adfdd4b04c3adf2abc3e522e872b6b74887fa9c249d58fd1bb33a4f67f53609adc6359d276cf10f4cf46d54a531bf5b2209c5a78bf463f31fccaee13abb7631aed9cd174f62eb763a09fe3d783ac504d1d40953134c279effc578e4eb78ec9091329bba34ff0fb3b900aba798f980f261be0f6d8910143c85c4c4234c2ce323935acb0a75968d452c5b20d26785ac9bf84d6dd56a59285371695c6cd0b4512298452374164d25cc7d55acfa3b902e65fecea8f567691666e9489da5e3183626a8cb29622d80bb9a7326d3452c5789d6508957e26ea847ab1a60568d4aa54d101b2eac212c10b150e5bdcbd3e1f204a55fac8cfab3ac2166d9689d659392e69ca9b50af03c34519b35dd9cb21166e3189d8d0b36598d3a31a5f0a564638cc3581d875d09394c136978aee8f65c2e5b0e0b454a28afcb954c68c05cc28448138cc8d63a2265c49e118e48aaa5583a9ed314e3344ec769229aabf336e352ef25955bf87bdc272e83f592eadbc2669885dbe82c9c6168e14e222657a7e0bd99b2b73966efb63a7be7117abe3a3ad9a446521f045a6004b6abaf9a8a9fa627807a0abd552d31abc6ebac9a66e8c753bc58ab126d051b7cb81566eb04accfc63406a78a37e2bd315816a52ed7c4be2d30fb26eaecdb3a445dba4694387c7ff465b2e58b5b5514f7ae894dad319b2699c559d03f27881e169eab246bb7d1d6b1da60f64d4e658c04ab4f4f113d66c5b2351bdfb249af3e9d7eaba12d66e5142c164dfa0a62eb88f06cd8e224ad82fa6a316c89d93755675f5f96b837989f694ba1653b4ccb6989fb744d62617e5ab14099c2da63564fd7593d14cd418aeaa668c09c7059dd3806afe1d46adb65e98deb74c0f49ea1d37b4cd29c61861813e6bdce155ece5ee5d9b64a9c74912c77a8af3ca02366cff6589b20711ae1bd2073453db95a53534a650c89d72f97d5a3859d300b7748a56f443f263443f85ee2dc3c93e3429d311b67623d93a99457a95899e932ab0b66e92c9da5d3538acde0089f9f0e95dd9b325ebb62d6ced659bb73d278a51d11a11e2be986d198a3a3919f5649a94a107870f90c4ddb21bdd2a33b66c1dcf4c7a793d52a33e9af3d30fb76c446f0eaa34639d1bb268e23ca71aead309be7615e09759c247a57fc9e941a50d3c4632751ca4acf2b7b6216ccc746eaf475b1f8f55f9baa7d9a8d5954848d1524efeb48a5644ca5c7c4bc5725fdf4d80be3b040c76190010715a7ea04c4facae37b631a2fd469dc3f6989171dff2e1377f9fcb0fa49357d304d77d2693a2a410b26e8e9c192a858ccae546d188af4d217b365672cdf36cb01fc3c3bfe69fc6c1a75162b6e69bc9409a23f93e7e02636f7c36cde456773bf80a745c3a4f6b3fe989ebba652bec0941bd4799ad439d57a41ba3da003300b16e92cd8adae56b069462ca107a6da9e51df9850c9c1a8ec96ca6c0415a2494d306a1996e2eaa7d4198859b67b2aad51d332377c7b247d4b076196ee11beee379215a651f7e35f99583018b36071ea2d121ea6798bc4b70fbb5f5f313404b36f89cebe45488bc464f54ca66658a6cf6428c6a438953ecc22e62f0585f961ec42509f0cd7598d31c6e744c96498d8330cb36729b66a20fd7e013e1faabaae7760763dd77e73314b4ab071df746286dbe59f5e9e7c4c942ed6f2305b4b532925eac356bca653bf960ec72c2dd3599a97a6a554e353f998f6cbb0f1a9c42db2e899de410dd599eab8ded879e0896c4daf75508059bd3c9d7111bf5c9cefbdbc94f9bd20256c53afb52ac42c5c914add454f38bd764572cf6ce2fd1789f085c05384147f94a9527cc35b91b9bdbd4722e5f8b9f8b0ba16c1b098d643f43e0f7f95171bbc042daaabfbf385d089259467f91b0e893f03221c6c8dac4047960518f95f5608c925c05b8709427e8d812f201fe6b51acbc5576ac978322b74ada061a01d04ad4b6ed3eec812f048a489b448c9f248f3bd21363b4bf7e4b1da53c66a562e9f0a10199ca63725d762250fad81de873ac59185a943a7bb2f40d544227cf394c52298b9a2db085ff094346458fbd4853c540850edc7a4e216802c4027ae8b70377fd27915f387e4def16436699495c763a482121bdf2461b2e81758e381f3eb0baaccc100563b8190efc5a310aea244d886978e32eb9f2e2ad55c40b168dcf2c9a073bca6930bc06e681a05b69a12587b915417b33c169d3feb32b8362da2e02a29c16da901c705aef63ee2934f6ac5dd5227a02d6151686ba8bd2d36794ef5fe2e9733b555ebc1f73a17c0e5b48c82db8b125c47511fad4eb9587001dea9a050a8a284d70224d539313df42e60baa56714533525a6660053747abe0b88b2bb4611d5d023f22bb6bc2db1d2cbe6d73881e89dfe5144b594881a0b44d54e65e30d5b45e1aca584c3b7e19e53d72c52a3eafe8cb879a25cac657c75172f09e7cabe7517003e911d05b88e12605390477135f944031700ade81005b49e3a879a23c6aba3bb61b951093d11f8d0864cf9905a4ee902a0c24e51407b5302e23b5bab5afa14b65e585d5b57b5e43393fd3eff79c2c34a85bf557801ba0091ff5110f7a184d883b11878bc178c6f265156b7c97ca9e3f5f7f6a05f6c5f4a94ad649ea6fc6d832c31178826b60ba8ae0179db7e99a9a0f2410a35a4e002a2bf73a288f6cf541f046f52c3595aaa59ed52e5f5f72651700750f74140707039fa04d12b017dce8d4ac7bea0bbf0404a782d41a523bae2d85f0bef02a899a0027b10750ffe2c91fc5606a63c4df65eaf1221b9008ccfed52c00ece6c9f6aecbcd352c7f2b30a30f471087d0f3e2f2b278ba05dae8b3dd1280aed504a68cd01343e8aee521563fac028a4c3a893e41431385b2b028f6e7c189da659edb505ca1de93cfc0478d7e194e0b6007999ab83697c0690827504fdd0addf195d29c4b8dd9e1c07bcec484a704d401ee6cfb670014f1e68201d45dd493dcff3a9492cf52d965d0078a46828356914101e9cd59bfe3c3233eaf88cb7d6ccef3a5a23eed6c83a5ccc0c38be14cc3acd8f8633d872d2ee46cc495a0ce4a43cfb22c778e43c27cd69583929b55c7242f60be618ccadcb312a217252ae0fe718d56f72d2ca4f728cba69728c1a413929cd12cb319a1a9563dc3ba2d3199f0c931337ae9a93b04b21473b5296a31dfbc84146fe73124c9cc841069a729274d6e6a435049a830cbce7688af21ca40f34076dba442776eb2764e7f189ddc7fc7f3ee73a8fcfb93e9643e06741f13f7e4de438ea9a08f73f7f8a3d2f1d126fc737dcab0f0474e81ea743ecb16aaac6a1d3a6594c9d648b540c4ca75e321fcc833ade269cf94ee2dc07e03cc1269c054ee2bc00e03cd1269c854ee27c14e03cc9269c239cc4f903c07932f5b0c46259c4c462f5ab30fc35327c03a9f0fdcaa2f84ec984372e47fd11aabf988d6123e970b6a4c2d90d78e3a936e11ced24ce7f81779e6613ce114ee2bc15e03cdd269c854ee23c1fe03cc3269ca39cc4f915c079a64d38473a89f36980f32c9b700e7712e73c80f36c9b70163889733dc0798e4d38f39dc45906706ea4c4d941e22c913d9ac11dce7cd5fdddb3f2e84036a202390254e0cfa59e1dae7ad6531de5e0ef578977dd6ba74f061e7a1e25d89e0c0e7ba43eece732dcde00eef9d4338013f5294171bca42743d9840ae50c90015c4089b2b5443932f3bd49647ef820f0c30b33016f74e6e1fd4c05ef2900ef224a789d9294e1b18998b46d4e968cdf06302fb609e6280761be03605e6213cc420761be0c605e6a13cc110ec27c05c0bccc2698f90ec2bc0bc0bcdc269884e39264301f0630afb0092661ab9c0ce61d00e69536c174b18573278079954d30473b08f35d00f36a9b608e7110e67b00e635943007499815de4b15e2aaa62fc39dd74d77d127cc59db51217f1e74775c4bbf6c70859811eccf505e2ee0b9d7c9d11278e9759bb2b32df65c0642efdb9f0ae5cec0fbaea74439202ec1170b6153993aa277a2f73ff7ceb5a23bb89625da009e143659ee7a10807d4326fc36b5a2ca45943d4116702325caad345940aa47af91a23d9a0a6d35f0d29ba8bd748258805529979df0fdfcf9f8d06ab9144d2dc6f19738b9575035045e7a732676421eeefdbf4a065e2cca777e37037df26409fd5480f0964c201cb5d9217c0e20bc95fecc017fe0575d27307f7684eba3e7cf0088b7d9b4688074321719ce6250c8dc6e134ed2d94764388f0338efb00927e9dc38329c57029c77da84937428980ce70b00e75d99e8a24badbd3e9cb2f398acc5fe118079b74d305decfeb81fc0bc6753f624c54ecf261cbb6c4b85f27b80f2decc2c03cccbfcdc23b24afaa72c8aef3e7b2610ba3888b127f0c4fb338112ce209ee9e58bd3e4ce1acbbc8fd667a2d54386f258e0950fd01736705862315b29d04d14bb6ca8d396a77ad732c64f3c2583d9950a662b00f3c14cf459d688fd7faaeb86d1d41624eaaaeb71272d7cc8d05e07d03e94894a51ea8ba8c960922d65d916c07cd8269884d313c8606e0d603e62134cc2c98664304700988fda0493701a2c19ccc100e66336c1249ca04d06732c80f9b84d305d5c4b391ac07cc2269884fd456430fb01984fda0493b0bf886e771900f3299b60124ed026833908c07cda2698842d203298fd01cc67286166b3f8fe23b3599a84e53bd92ccd23419fd2b39b7296717044883017251b0f1a087cf5399b601296ef6430f301cce733d1efce7b3bd78aa9da7c0fe90c4d8e21c3d705e07b81125f17802f7ef22b1716dd62c2e5818c0f00d0173331612b6fb39bb0750a40f85226108edcec108e03085fb6bb3a44d8ab49561d3a1b54875ec9f4f4ebd40733086b9a6443196702b4af666ab66674f4120ec0918f5b92413c1924ffd7ec5969e1e202ff6d00cad73355414a763288cb3389c700a06fd8b4f1de18277b913a80fcf24d9b708e7612e7efc03bdfb20927e9e6f864386f0438dfb60927e99e1e64384f0738dfb109e72827717e0c70be6b13ce914ee27c14e07ccf269ca4873291e1dc01e07cdf269ca4a70891e1ac02383fb00927e919576438f700383fa46e17a5767ee43ca11a3fc192b05db43d15d04200f4a34c6c5dba094e11225bb4bf1ac0fb98125e3796ea7e08b1eb8308e721fd4105f509d0b4fcc446a884fd4964501f07503fb5112ae15c4e32a88f00a89fd90895b0842783ba1640fddc46a884f394c8a0ae0250bfb0112ae11c1032a82b00d42f6d844a384b890c6a0980fa1525d402163f86143bc63989454f8cf60d893d7f3af6a8fbe811e145a246ab06530823218f2a12f8f8af8a84afed5916ebe286fca5c09fbfc9cc02ed4d70b20619be7e00dfb7f6aede7471cac3e720917f67cf16bea43b2b91f9e90600f37b9b60ba78eec6de00e60f36c174f1dc8d5a00f3479b60ba382d671d80f9934d305d3c77634f00f3679b60ba78eec64a00f3179b60bab8cff15c00f3579b60ba78eec68e00e6ff6c82e9e2b91bfb0098bfd904d3c52dabf603307fb77bb9828b676cec00daee7f50e26d25f1fabb7f558856bc2fbb9c72cb2ab2c39819f0cb3fed396983b02949b6d5e42dc007ffcac4f1cbf1493cb51e24c2929dac07e94e00f76f9be112e69e64706f0570ffb119ae8b3bd7dd0be0fe6bef4a3a17d1ee0ad0fe97a9954bb3c410c7cac090dc64efb32a11a2cb2b97ba83da006b60adaf123600c87cf526e0ab114ab45bb04435d46a3a74cda9d06501afcca244976cada7fbdb5b7504281b50a25443c4856c73da4b643ec0d730d3f9a37e1a8e3f73648df0587f4e08a967fe4c85f603903f36a2446b7efc8e8b9b06cd05381bdb8433df499ceb00ce2636e12c7012e7b90067539b70921e374e86f32e80b3994d38473889f35380b33925ce3e2c7e438c296c3de3bda0b54c2dfa9ae37d5eca780ffd3c01d63f39b322334d4db2d3643a80aa548b4cf86cea9b64b8b8d77727e0b32d6dc239da499c7f01ef6c6513ce114ee2bc19e0dcc2269c854ee23c13e06c6d13ce514ee2fc04e06c6313ce914ee27c1ce06c6b134ed249b5643867029c5bda84b3c0499c3500673b9b70e63b897331c0d99e12271c829b2fda3cb59ee409dee7a56ca1dc2aa3546c9551e6f410dc1200b44326063b30ef84e248977793cdb92b026da28e9428d50446b571babf79cb52d111a25e727dbfe552e0979d2861b606303797a585db01789d33316e94ded242c202886c5cfd3680b64b26d0fa7340cabd5767781fcc61cbbcff7817dd02c6a7d55679b05788de4fdea157ea7451d415e49f5d33917fa636017ca493ab36b70430bbd904d3c5559bed01ccee36c17471d5661b00b3874d305d5cb5d916c0dcca26982eaeda6c0e60f6b409a68bada12d00cc6c9b60bab86ab30980d9cb26982eaeda6c0a60f6b609a68bab363b02987d6c82e9e2aacdce0066df4c747a8cca7ca70759cbfc491685d76f53f664666c4f45b2a5857b003fec9f093f1cb31975bebd09fc70803d7e48981f92f9e1ddc00f73e80b97159ac3a1e67b4c4a5889546899d80c9dcf8573af7bad05f0cb81f62eb67271b5f02ec04f076dca1543b1952017dbe04380970eb663c94b91288a568be4cfc5ada2454bb6a5ff73c04b87d8346d9b748b15b2fc740dc039d4269cf94ee23c09e01c6613ce022771de0c70e6da84b3d0499cef019c7999e8e6486d9a4cbe937d46d70198c36d82e9629fd1f50066be4d305d1c35bf14c02cb009a68ba3e69701988536c17471d4fc0c0073844d305d1c35bf04c01c69134c175beca70198a36c82e9e2a8f9e900e6689b60ba386a7e0a8039c626982e8e9a9f0a608eb5a941493a8f98ac41b913c0b9b54d3849ab4764388f0238c7d9849374d51a19ce8b00ce6d6cc249ba809a0ce79300e7b69438b794384778ffaf9281178ba501aeaf07ba8145116e97894d52928f0b4d62c1add0267842abc406e7a49ba235ca2282fc0af0d3f19b72ea425475e2f29d6cbf999f00ca0994287b489415de4b1c6399dcd087af11f2b7f1c1d112fa2819d81300d8899460b303602bc4ec901a21263a3f245145dfc536d37e00efa44d39952163e7bd92cd5eca05282753a2ec2550f2e581f30430bef5ee5af979d45b17b39502383f91a3c4fbb7ff7caa772df3c4121e264156ad6a06ea04532801470f201d91f9898a648798b402fe39d59ea5ff2ee69a1301ca699428db2741a92c259d47571221c2f836c0389d3ec74c849157a36a62c44ef468958b9cd2af5411fa6917aa0afe6700f00cdb01137a3019e02f00e0ed6d074c38da4406f84b007807db01138e409101fe1a009e693b60c29e0132c0df00c0b332d1808d9f879fead17c8463fb64b5da4300ded9f6ee7de3e29932dfb328da3999a8e5627d03d15a2e61258cac965b083c742e25467e78e45c3980a2f6079b213c93277bf7dafb6d80ffed9809ffcbabf3c152d1ffef6f90eefaa932cf028cf3283136e5251ce35b57cdf25ee265768583b95e3b806b3ef52c12ee5f9345c065ccdfd68fbfbab7d868d2f7be79e2295f8648b8c7d72c2a982301cc227b16c7123635c9ba9717816264412650e6251804717b70f943e0950b33313e5fb8d98dcf9703843b6562bc937be314513bac154accf43e2911f9e51cb64e8cc85779cf78d57c0d737957c45100eccef6ac2d767141c2f600e52e99d8d6a230f3a345647e580de0ed4a098fd7b7623b236a45f5bbd24bd86bc51d2eac94b205435697dc12405c94897975a99f4244580522db0dbe35a802ed6613ced14ee2fc1978e7ee36e1243dd78d0ce7b500e71e36e1243d75900ce7f100e7629b708e7212e75b00e7129b70926e2a4986f32180b3d8269ca4e70993e19c06702eb50927e901b86438d7009c2536e1245d0b4786733780b33413130f0bd8e674acfd1480afcca6d545c329bb35c8702e03ada06536e124ddb6820ce7f100e7729b70163889f32a8073854d380b9dc4f906c0594e3d78cb0fbef3bbdcfcd56f64b8c8560b350645cd9e94b806b0f8def3d8f94093185f2eb84afc9b0f5cd40a915304606e5691a0968159f053a8600f07b05766663d46fe66d4c3fe0bc05761cfea4bc20a3a59b2ff0ae492ab28510e65b18b044bc46864954cd2fee41775529be9ec4bc22c806cf6e51500fcea4c8ca4f361e0698c0fedf201e0e5622cbdcae901df3340365069cfb22c17379a2c07deb886126507c6c72c79a22f951fcd67d804ae6a07f3d3a6c027f7b27752b58b7bc75f0dd056656293aad4e6771438b97fe7e50066b54d305d9c2e7305805963134c17f7ef3c0fc0acb509a68bfb775e0660aeb509a68bfb776e0430d7d904d3c5fd3bcf0530d7db04d3c55d158e033037d804d3c5fd3bcf0130f7b609a68b0dcb2b01cc7d6c82e9e20906b70398fbdabd209ab04d44d6257718e804d9cf1e5f1ded6403736b00737f9b60bad8261a03601e60134c17db446301cc036d82e9629b68248079904d305d6c138d06300fb609a68b6da27c00f3109b60bad8262a00300fa51e1f4a3ee23e522c18a4dc389a0ae4fb00e46199181f8aafc2a73242445849221b1f5a0ad01e9ee9fdb8fc31740e6f35db5ecc585ac3124de726f45db2c9dc9ca7027c843d0bac5dacd0e7019447dab4cc600c65c7089967f60549ff289b708e7612673380f3689b708e7012e77d20b11f63134ed21386c9705e02701e6b13ce514ee2fc01e03cce269c239dc4f93ac079bc4d384977d224c3b92bc079824d38494790c8701e05709e68134ed223c5c970ae00384fa2c4c97fa80d4add6b99b706984eb6c9ebc650f6b993795d3b503d3fc5269ca443186438ff07bcf3549b708e7012e7f500e76936e12c7412e70900e7e936e11ce524cef701ce336cc239d2499c8f009c67da8473b89338a7039c67d9849374c23619cebd00ceb36dc299ef24cedd01ce7328717667b16b8539875ac6271c068f110d6e554138ac46b68c757b509ddf4889b57f00eb52163ff09bfa1031216ab286e89b00f5b99958743d9a6d6edb97bf083281f332318141796bb5f03f9e054c95f0cab47343dc3db0f968e09de7dbb39eddc5399e8b01ca0bec5d864d38b19b2c0f7d0c64001752a2557bc30f0ff86a06724f3278e301bc8bec5ec1413881966c05c78120d95fbc2973d0d84373086728911d9a733140794926da4ef0d01c5d6ee976b5e92390f02fb577de2761a227cb5377039e7a1925dabe2cb6465ac1e03e4a0b3c31fee67f5384402eb68c4d931fc7660884b5d3815498f702982fb767f6a78beb386783cce08a4cd40294c7f2e45e1ad87f69f3eb50d90e78ea959928bab05a40fcaec984dd7e6438770438afb20927692f2a19cebd01ceab6dc249dac74f86f37c80f31a9b70920e3793e17c00e0bcd6269ca49321c8707e0b705e67d308d41846b8d11ad9085436c079bd4d38473b89f33f16c579834d38473889f36e80f3469b70926ee04f86f32280f3269b708e7212e7d700e7cd36e11ce924ce9700ce5b6cc2497a340f19ce2280f3569b7092ee484b86735f80f3369b70929e7444867319c0793b25cee8791d9bd3a8e76700df1d991832e6012f139ea864af96afb8d7591c01f0eedcf45bafa842c6bde9354b40e3f12e5b40ba384f69020079b72d2009472ec9401e0b40de630b48c26e363290870390f7da029270de1c19c8db00c8fb6c0149387d860ce45900e4fdb68024ac7a9381bc0f807cc0169084f336c940de03403e680b48c2d91b64205f03201fb20524e1def064209f06201fb667bebb8bdbf0ce02281fa144d989994cce1ae1e4d6e50d00cc476d82e9e2d9580d01ccc76c82e9e2b6917fb028ccc76d82e9e21aa13f01cc276c82e96201f42380f9a44d305ddc07fe3700f3299b60bab80ffc3700e6d336c174711ff86f01cc676c82e9e2d9588d40d5e8599b60bab8a6a23180f91cf518e314b1129dab3843022df73ee62757f3cfdc1ba0dd0224ebe7ed593749587693ad9bbc10f8e10b94287bb0e0ca73fd0ab4225625a650f3590c5cd82ada51c7a3a9c056021f7d91126c1f165ce6e72f4a8d6e3bc105f2d91889f351172b4b0700ef7d29935bfcf840f95a4a9ea74ed6f674ba7beacbab00ebcbf6ac9d74b1069a03b2815732bd903af51c96102d590efb20f0d2573399f8cb3d25167a0f2b3c22c14d7d32b6709aac46f02ec0fa5a2666bf8dc8fcd441b2e47e3f48eeaf67a28d94da18d170271b9c47004f7cc326982e36384f0630dfb409a68b436efb02986fd904d3c521b74301ccb76d82e9e290db7a00f31d9b60ba38e4b601c07cd726982e0eb9d50098efd904d3c521b75a00f37d9b60bad88bb41ac0fcc026982e76785402981fdab42307691144b623c7ee00e74736e1cc7712e73100e7c736e12c7012e7e500e72736e12c7412e73300e7a79958b7cba762af053d9919d9b4940cdf2416c5f7d9a61c168633dd49eb976473dd7f049ef83925caf68c9f14582ccfcbe0a2567bafaff05eaf1483177b8b690ae5e2977b1ed90878e41794187bb2e8aec4fea8e4624fdd6a4f9d12c183cfff98c0f82e9a7c24a8d813c0f3ca52a6569fd73808770180fb6566763918b5190d55f40749fcab4c8c4ca677e6808b5b3cdf043cf36beadc335141a42c251d892c8910617c0b78e8379418b33518cd4e1f20ec2a263b7de06080f75b7b3300c2914bb20ce04b90017c4789b6a5405b2260f1c0b9a20b84af12ceeb24ab75b605d8bea7c4d64b609b2e92f53c9e8579ff97cbe39ab828355b6ea5f05b9efc4bbc7ffbe2a77ad7324f6ca98355a6e600f00f76e7a88463ec6439ea4b2047fd9112af3aaf8d57f7f994ae7575893e436d78b22c200b20fc291355276ceae1245114119f1c584155751a0730fe9ce96987a997ee2e1e285601d0fe9289d122d8a6571d24d12e13b7dbf09d4181f46b26961f4098c9cb7f77c14e0560ff9789a2a8806d6e47875e0310fe66cf2c7817e7cbcd00287fcfc49c629ecc6b37932a510414387f50c2eb6de087f3bd30b9901a36c7fb97eaa1afa6ad2eada6aa2e6d0310ff4989b80b8b5d4ab0460c6fac4898e05d9c52f31800fa1725d0c101a06bbd174bb40d4ab3e6272174b2e6e72700fadf99188d4ffdf416429c64bb68b70038ffb109e7682771fe04ea00ffda8493749f10329c57019cffd984b3d0499cc7009caca14538473989f30d80336213ce914ee27c00e0ccb20927e9846f329c1301ce0636e12c70126705c0d9d0269cf94ee25c047036a2c4094791d4954f1a9bcffcfe51777b3f9702848d29119acd0475f1f48cd7412ba8c9a64419db29e2e242d73280b269a612b6df99c705ad97893a037da17f50217c1e24ec669408db03846575dba7a9c7ae0f6dbc0a3036a7c4183ff54bbf27cd34f941c6b64f194885b62b40db22b368531f7727ad18918dbc0f03f9674b5bd19296f264682f055edb2a134553fe66375c3c0020dc8212617439c22658bc453678d10be06b9d197c8581faa6cbded712e48d6d28f1a95949a94d56c87772bac261c017dbda04d3c556cfe100e69636c174717b9f4300cc7636c174717b9f4301ccf636c174717b9f8300cc0e36c174717b9f8301cc8e36c174712ed2fe0066279b60bab8bdcf010066679b60bab8c1e9910066179b60bab8c1e9d10066574a986a0ea7c91839615d936c1c7208685276b30d28617d930ce82800b4bb6d405d1c291f0080f6b00d2861e94e06340700ddca36a084ad2232a00301d09eb601256c1991011d0480665302cd666157b013660064bdf0f300de5e9478cd4ed622ec44263b47e35a80b23725ca56de8f59de8312b0db5706364d231b8be4532f14b83e94e006b2d8b543fe4e0a3ecae87e0a9bffbaa1f380a7f6a5041e6eb300c22a3f992f2f0768fb51a255f39586d7b5f24b59795d26e0face9e2f802ca1bfbd1eeae256551b81870ea0446bbe6890102759fdb40fc0996313ced14ee26400e7409b70921ee14c86f35e908f0eb20967a193382f063807db8473949338bf033887d88473a493385f033887da8493744f4f329cbb009cc36cc259e024ce2300ce5c9b70920e2593e15c0e70e651e2543b2ce507da492e4f9e5d05e00da784a77658e2ab8a26337ec6c11a369795c9d6babfaf529910582c04c0d30faa99cb2b32fb02c4f99948ee58628f3f168ab0cb8e0ce71cd02e2ab00927e91431329c550067a14d3849370420c3790ec039c2269ca47bd390e1bc03e01c69134ed29d93c8707e0c708eb2a9e639c6c9594d5d00ced136e11ced24ce7f4045698c4d38473889f3168073ac4d38494f2824c37916c0b9b54d38473989f30b80739c4d38473a89f30980731b9b70929e3d4c86730ec0b9ad4d38490fcb25c3b916e0dcce269ca4ab37c97016039ce3297106a789ad111d77a51e0f3edb4ed919dd1a080606839ac0aa440fe906da6962bdb3a886e740457f0225f00e2cf16aa5d89c950c24d9966a7d80e74eb405a48b7bd375022027d902d2c5e39e4f032027db029270bd0719c86100e4145b401296ee6420ff0620a7da029270152719c80b01c8699420f302d5a45a74a22cbe0de024ef8d559e3e95e21737354395a6465495a69741a5693a257eb5c43bd5be7bc2490e643df73301cc1936c1245c2f4f06733680b9bd4d305d1c53da16c0dcc1269884ed233298e301cc9936c124ac9192c19c0460ceb20926613b890ce6640073b64d30096ba66430a70098736c8249d85ea23bef15c09c6b134cc2a5db6430a701983bda049370ff4f3298d301cc799430f1239ea77a7f970b8ca59ebd9542b0fb473cefcca260e75382ed2ec0cef45e2811f392e1baf7c56ca580c857c69778fff6854ef5ae65de5ba57458c956c33701588b28b19a1d78e2e26eb50b40d25f408932dc86fd2e6e2c700ff0d2859928a2b0fed1582f1de5e47edf83819fee64134c17f7fb1e0a60ee6c134c1773d05e00e62e36c17471bfefde00e6ae36c17471bfefad00cc4536c17471bfef9e00e66e36c17471bfefee00e6ee36c17471bfef1e00e61e36c17471bfef3c0073b14d305ddcef7b3880b9841266360bbb132861f94ed60db23fc05b4c89b71d8b76dbad15dd727cf5fb52d15d97a17debc8f6002d6151884b37655f52ec76aa849577329457037f2ca144a966cfc36e64acef93bcf3982c796703cf2cb5c733094b7532cfbc1d786659267a39e30ba254fa395d3c96742140bb2c135e9a5a85c9c526e65090e09753a254c370e9f4c513d643c97cf402007685ad605ddc99f66c00b6dc56b084590119d80900ec9eb682256c3391812d006057da0a96b0178a0c6c2e005b612b58172b583d00d855b682251c0525037b2200bbda56b08463f564600f04602b6d05ebe28c929d00d835b682251cc3a76bc402b07b51826d23c18e903da9151e898cf5a192e13b09e0abb2a70fc0c5f1a75900657526fa50535fa5e4e272c495a077aac6269ca45b5893e13c11e0acb50927e906eb6438af0138d7da8493f4ac0f329cef009ceb2871265b1312ec8a76b120fa1cc05c6f134c17672fbf08606eb009a68bb3973f0430f7b609a68bb3979f0230f7b109a68bb3979f0530f7b509a68bb3971f0230f7b309a68b43cb0f0398fbdb04d3c5d9cb37009807d804d3c5d9cb370a984d1a05844f8d133e49b450781bc53f41dbef011ac6a631be0d957f244f89f77ba6e8b1ac614b3c1c8bbcffcc626077ef3fddfd883855690a5bcfd688bb5c5ea990bdca7bca35ab6679fdbc570ee40ed14c3a448ee8b19ae031aff1de99c7ca44e81bd87ce61f2834c7fb5bad7cae154872c431c173bd7bb58ccf58e521acf63459c1aa84c5b1070ee5449a0a4e656cad24c001e6485dd7327f83ae19b2afacdcb3b9586852e5bdd35084e3b7fb72c409e5ea979ada3943f4f4560badda89e770de2cdf3c8c6b314786cd432f15ef729dfc23ba67b14a714f85809f81ce5d2012692b637db5f896d32af6be2f16d7a23abd72fb7baf45467a7ff9bdd2c3eafaa387c9edc956c95fea7e72993cce134b3b88476c449fd22beacd5b9359e42730fefd32b19cbb4c489d91d4d2e4f6e19edf3241ace40ee071b139db7f308f7719edc24d3b455a78ff5ae0c5bc2fbccc4b0255c2cdabd8d2b22cd6e8ff01c8c1de6f62210400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/df28128702ff35643981e315b0e8a974.asset.meta b/Assets/SerializedUdonPrograms/df28128702ff35643981e315b0e8a974.asset.meta new file mode 100644 index 0000000..25cfc47 --- /dev/null +++ b/Assets/SerializedUdonPrograms/df28128702ff35643981e315b0e8a974.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d7fdf1d884b4a21418c2fa6244a6eddb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/df7bf03dbc945794f8b9e02b16d9e562.asset b/Assets/SerializedUdonPrograms/df7bf03dbc945794f8b9e02b16d9e562.asset new file mode 100644 index 0000000..7fee5e5 --- /dev/null +++ b/Assets/SerializedUdonPrograms/df7bf03dbc945794f8b9e02b16d9e562.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: df7bf03dbc945794f8b9e02b16d9e562 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c5545f6f8e7d1ab807469a108a1260408a0584247692601514108498048203185262a2af6861d3b76ecbd77c5de7befbdbbbbeeaebbabbbff3b7367f2cebb6fce7defbe9bf332c3ff871fb9dcf2ce3de73b67da99721b6531e74f6498f3d77c96cf26b1116c1e2b61156cb5f3af49ce7195f39f7ba6aecf6555ce71b9f37791736f18cb48f04bfe6750a49bf3f70ce7ac9ad538bfac65c5ceb14cdc2f60a5cebf6738bf2d75cef8d565ceffa5ce539126ce8fe6b1c96c0e9bcdba463a2710315ffca85a5e8b70bb222d9cbf27b2f5cedd52a1147f4996b8d5d5f9abc0b9532deead729456cf1dc21609b35639f78a9ddf54b17247e65221b1c5f45c26fec1dc437779dc4d1eb9992de5bf1bcb7fb790ff86cf3795c71e493edf13fcae25f83727b4cde7f7bddc6384ffbe9973bc0d9cf3dffe289febedca6bb4c24756863cf695c77e52e6ed49e8df5c1efb27b0d74fc600202b19662de471a03cee2ef5bd23c5f767ba8c229700799c652fa0cf40f0ee96e03ebf362884ed2a1d7b7bd2b1b79b8e8db6caf4fb523e3f581e87cae31029db79a6dbeff2da3079ec9340afe1eeefd83816f559e79d8d2be5f90879cc92c76ca95b86d4f54e701e561795a623a5cc3ef21d7769aeabe7f9fdbbe5798e3c8ef2a4d768f9dc3df27c4c92fa24e37f4aa7bef21df78273876393253eb254baabbc761b38e7bfdde2726c729fc71ee07f5ab9b952de7d3ecf6076f4f7d8d1dfd5a56966ec73097550f2c74a3903a4dcfbc139977b6e40db9ac8df299f18c712976ddd93b8b7a72ba7856236c17d4fb34eeef5661358ac2fef91404f95b6aa5cba0d9c73b9e552aeb27f2ff73ca238f70772f8ef1ff0c81de8913b50ca5565c49824f5dc5b1ef3e471b23c4e6275f9989b2caeed2b8f13e53b07b1d8326090bcbf4ff4b73d943ec972f34ba3299eb496e58060968c2f4e95c796493eaf9e991642e7e9f2d82ac977b692c71921ded9daf58516bf7a7c61420299fbb97c5bd4001d1c392d37caf3fde571a63cce92fc877afc40d54b7e7e904897d9521706d2c0d1a5557b793e471ee7c6eac20ef0e8f460fde914192c653e04cef97188bcfe3038e7bace75dfd36a8794992f8f051e9d0be974765ad8e2776ddb00df48e6777efe35dfb5af75b62bbbb5d49f1de8d16d7a54ef1693c16f951ec9e48783248be11ec6c3a50e8aedc19ee71e01e7fc382cfa3ef16fe7b76d946ff502d7f96f1f05e7fcfe8224755dc8e27d96cbc902efce92ef96e57f9b2df2d9452c3eefe97ecb8f23c0b51152de87f27787b2f87a4c3dc76d7b0c9cf3fb872469db628d7ece7bdbeeebf3db252cb6fc991af587e6afca6b45529f6c169bb7643b53f40be46f22e5f2da52f7bc9dd2a558fe6624e032d2d56f17559f96c8e30aa6af6797010eca9f9747dfddef4579add4e75dea1d651ebbe747e5b4ee267557e5d8612c36cf789fe5d756ca63853c56c9e3e1d167479c24afad9647d97e8fe4b098b2d9e9f746aff3e32879ff7170ce9f2b8fcaeea1faa7d51e5d75e9a9d244d9ae2b03fcfcacd67d76b8aa37d7b86cdb5d22b9edf0e850ccfcfdb783b44bf5011e06e75cee6faedcf64be4f36be5719d3cae97cfef1bcb519c639c92d56d57296b8c47b731ae6eed65fbbffd1ff2f90d1edd8e20d4ada39495ebd12dd7d5adc330576e87adf2f98d1edd8e24d4ad939435d6a3db58a9dbb3aedc5d47cbe78ff2e87634a16e9da5ac711eddc6b9baed5a227553f9659347b76308753b56ca1a0f9e932cd966708fbff709cffde3e5f138e4fe094017ddfd13e5f5273dd765b915d953dedf01cef911f417c4bf1d861db7bbf67752324e96c753d290bea74a59b0fdd4d9c370828781baaf189e86dcc718aafb5e86eaba62b8b787a1ecdb45f6020cf7721976fad1b5bff30229e3740f434a3fec228f674899fbc8773c05ce1d1d3bab3af74c79546da5b312e8a68b41a9fa28916e7e75d3b9aeccba98c979f278be3c4e02b265dd1dc98bea52d78f3e07dce3e7b23fcdce6631ed7f5f5d2e90c7b609ece90e9ee3c7ad21ecf7bbd74c1e2f96b64d64b171a4896e9a76adf49125ebf85e32a6c12e757fd36d933cbfccbddf45f9c5e5c026fe0e10b3e8a2da57dbe4bdc9c0eeb3e5b529e0da45f2dad4e835218fdfbbc2933e4f78ee5f0964e8ee5f0574d0ddbf9a45f335f759d596bfc663cbd91e5da7b098b61bbb36de56f10c7cf7d301d2f23af9db699eb4947df1ee137c646dd7a7e56e2a7670bd272d6ff0a4256837d6d97fa3bc07632343e4b5fd34e9bb3fe0a0da93372169a9eedf0ce4eaeedf0274d0ddbf35362d77db2eafdf86a425d41fa6e5edf1b68a67e0bb9f49222d55bb5f8d8be862092a96aaea9d679390ab62eee53e727b79e43e97845ce963ec1e1fb9f731bdbea9bc4ff9ba8a7fcf64b1bececf1dbfed99e923eb7ea6f5f55e6a4ce50116ebebaa7c57be3e8bc5fbbaea07cf8ea6bf60c1afcd61f1be3e17f8898a2b3d0c9e81beaaee3f02e4eaee3f0a74d0dd7f8cc5f87a2f15cb7e9ce97d1dea0f7dfd09f09e96e019f8eee79348cb273d9c15df03586c5bfc00377d7a2bfd54dbe052e65f37ee70e567abb6ba6aafe44bf92f80737e2cf0bcb740be57c620faa838761b797d93bcbeafbcfeb47c9fca9fcfc8e7b67b9e93fd9d91b2fdc99ef7f07fc1e32bf3a2fe5667cb73e01eb46d3e8b6d9348b69103415acd07d7605aa9f66022ae2fc9e3cb1e7e8552de8be09c3ff76a54ff912aefbf228f1744ef755163b92a7ddb003d5ed3fb8ad015a459e03692b2f9f5043607299316b0d8326981eb07190ff9c87a5b3ef3a9cf33efcae37bf2f88e947f108b8d09c9182c7b5f9e1fecb92f63afa2cc5665750dd043c9e6bf79c9471f65ff07f2789c947f88fcedcbe0dcb1adaf4abb0fdd7766eef091ad649e26652cf4c85ce8caeca77cec2357e6e01a446653f0ecc79e777c12e5305a8e4ff693b1e17e7ef54832edec54ef2d93762e62b165d222d7eefeaa0fa7f24a29f3f75fe5579fc9e37229ef5016db273b54def71bc348f42e1fbb224b586cdc7889bcffb93c5f2cefcbf221b2d4f3fc52f9fc17f2bcc8f37c89e77915e39536448a639f675f0139fcfceba86d42177eed1b70ad585efb36ca67f76df25e69ecbbd9772cb6ffa9fa98cbe473af82df4106eafe6bf27cb9c7a615f2fc7570ce8f651eb9cb3dacca3c720ff3e8fbbd3cfe248f3f466d1cbd05fc06f0643fc4caf4f5e9afa58c95f2376f8073c7a777ffd04786faad6cbf465649196f827347c64039fe3fd027df46567bf89583ebfc5821efbf05ceb9ec8d3efa7d239fadf4d856297feb37b743fdf67079acf2d8562565fceada36a8898fac9fe5f1174f1a2a9fe5f26a34e9aacacd1fe479b5d4e16d70eebc7790aaa37f457cfb70cfefdf89fd7da6ea5ffd451effead1ad96c58e7ffc268f7fc77d92fdc3a3fb9ae83375fafdcda3df1a8fde6be57bdf057aa8ebfcb88ec5d6a1aa1df64f79bede735f8e4368635b7e79443df32f9fdfab31920df29def81737e5f8d4fa8fe941ab738c2f3fc11c8f3ff76df3754f50ffcf4fd8f3caa310f3f7d377adebf1179bf1acb38d2f3fc91c8f3def8e451f2fefbe0dcf1bd21aa7ff767f2f6458e96b2545ba12bb8ce8f9be47d5576fd3756a7c831f2fe47e079759d1f8ff5e87aacd4f55b1fdd144f15db7f0f9cf3fbdefeb4e2b9d9f3fc66e479e52fc77b9e3f1e79de8fdf09b1fc222a66aed2acabbcafda64ff93cf31cf736a3cf0139f77caf85c44c5dd1f06e70ed36172fec33019438f44e4ef2632dff64cc42bff2429ff5370ceef6bc67723b2ac8e348f9511532eabb1df93597cd9a6cab466e09e9c271c69047ec78f4d813d89e2d27e69d68269e323c3954eaacda9ca598c9beab37afac3c3df0d28a7158be92f47dab098fe7244cd9151fd65193b8f9c12cb21b28b3c9e1a7d5fe414704dd7174ea09bf69aaa63d4b8d1c3e0dcb17fc47dd24794ff283fac4cc0413e17391d3ca7de7506b0a99d3c9e09ae9d01aef1e316a9db67e0dcd12d7b8247ee59f2b9cfc1bbf951c5a8be00e7fc7703e5f939f2fe1d1e79e7019dce71df99a5eafef69e779ccba275aac32beb0f0f877381acb3c0352503c6ac0e07477efd4b9906bfc5be33511a68d34596c7220613f4b7e7b3d8b6bd1c9b8a5ce0f19d0b64fac8f90f23bd6378cf24f01d255795ed5b596cbf49c5de3a0279a0bf9db43d177aecb9d0f3de8e2c717f41f55fd4bc818be56fbe02e7fc7811487f358e7f09b8a6c65d548ce86b8f8f5e069ebd0c3ccb8f97b3d818cee52eff51bf7964abdf6d93cf7f03cef951b503ae90f795afab3c7a25d0e10a708d1faf92bff90e9c3b3ae4fceefac0a8179177a9f1a91de01cbef31a79ff7b70ce6ddbe479fe5af9dc0fe05c3186727ef4c8f1ea751db0518e5189f89f9fbf4aae7531b5cbe4bbee726dcf51f3e4da2527cfb7be536d3a357f4bb63122db596c6c44f55d74b1119d7cc545bde77a4fba5c2f9ffb21b8ee1119738cdcc062fb9b37b8693046f1516565d304bc953cb9762ad2431e6f94f27f02e7fc78138bc95311354ea7f2d6cd2ca6fc17e78e5eb96d3c726ef1c8b9c593ee6a7cee67cfef6e0576f1fbbfb8e9919be1b12781ddb1d79a46447b6d3a2b65454e4d90251a588359f2cbf1d42f132fc4e3a29bf1bff89f41e2b5356cbdf3d352dd6ab87962ad5d0d1bc572b4abe1ba8b36917afb24f17791f3449910fa6b24ee15f7c7bd822b57eefc570a96f2553bd7a78995807c315f997367049be91cf9af9638497488f35fac94f9ce6bcb59ad7356e8fc5d29e42d71d48e7f3291497cd99ff737f98e4c7755e22ae78a025ae99c970b0d0bc4df6b84a6a542fb19ceb51ab14672355bee348c2bd83af1b678dbab9c7febde592891e975d42f4ec4aebb4b2055324d76ace1da67095ffcbf14698814e1e89bf1fcc1ff34c912bdb553e252e2ff18ba850c2f4c6748192305b248ccb51c9625faa0f9710483db186fa1debf5ddeb96cb4af2d7a323cb97b080ba229fcd7c72fc85f71cda3b7358d356d14cb12554acf04a6f981e5f232452b2d88094d9b36c9e68a7af14774f84598a1208df8dde7cac473c113a099a8fc6213404cbd2d744ab5b9a0f29c27942f17aa798d99e2285724cc2997ca1f281528f12c439fe298e8ae6b5765a62a49e3523b9babd65c24587c759cc8682cc91ae9924c44a80b1b24c7608bebfd13ad459d15d144cb126dac6e3eae8dbd4b34be1ac91698ca7c0fdd3d6775e159df7fd9549f2ead44baa4f2362c651aeb52a655ba3353e2dac32f5d5ad7d9154d17fe47cfb00de2db8974c00836d1116c9d6edfe6f72a849422e7d9e00c79e870a8b740d203dc0571c2c42a60089b6a10667384ed345ab1a62d3d5a718510c9cd7489d3a661aaead49c9bc706bb7a1034459dbb836f4d1bd4b59bebe88920f312527aaa0759e07415f677ee1539cf978ae628bf3ed79158e4bc9bcbcb136f88f63a637fe14f9647e6867bc96aa97614540780fe7058cd30e22d34c4b3b9bf76d2b88128e3bc99a1039e195a62d9ac73d86cd60a93dc25ace4d698e4ae6125b7c124770b2bb9ad2edb8831988569c936d1c08bfad744e7b72b1c63d688f660adf37b5da0c63fbb744f3abbec26b24b06d3858f82698465935d7469c72ff6d029e94dbaddf0a46b8709ee1952707bccdb7a85f5b60e3a6f137694907adb3ce79a1b669b22ee96891ec50811845bedc8e0051d4f53ec39dede9a2536c3aa156ff7f7bede497b5f1fe17d7c1a547d6b8879e3aeba14684f9f02858e76ee3e683cae51eadca971aef05fad90d7e7b169c28a582bb1a7fd532023e914e85b9702f5ad2196021d75b98ba740bf64b26d5f3c7375c2ca83fe21cb83ce98e001210577d139a32823d21b1d7183045c4ef036efee3c1bc73576b6e5e9dd6d20c38215fe3a60ced45597349ce020ad5a9ad27a209e3cdd74c2459794856fe075d709e76db3c12cbe87fc3fe74f9cf036b8f0dd30cd876834df63ef468134ef81558f43c3568f3d31c9c3c24aeea5cb69a22e388634a7253b26374d04074bd91cc7d70f63ee608a7a6f85a8e2b8466a5026df392e135af0ebc532cff8bfcb3f170fafe303c265a2a49ec2921f59a4b782ef30d348942459a22419e1d374d069e3d784502c629b11fa722c5bbcdd2c365819d91b2b69466a4a9a7775c5984f49d307cbb23961b36c864e32cfb2a334be9acd7d954fbf6c25aadbb8f764e3efe9ab2b1a445b624383160d6e1888cb5b2686c95d79b319dfb876ad70d59560aca0d079a6ca7947a974f23085019ff2d8cb1b5f64ee1f7d76c815d961ef24b203a5555806e8a7f3241e2fe37bbbc48decf05a3fdf69c34e628b45363c5c5ce694dcd42d138f96b10dce518d78c7f95b73dcdffaebb4e161083ea494b035d911173c00133c3ea4e0ddb13cbe47d83c3e50279997367ca796b02dac4198da13c2aa9d8995a87b694ad43f22c14ad4c198f0bd35c21f6a144cf8102c2bec938c8ff878f5504cf0beba3cc63dcaedd96738ff5738bfe04dfe2291fb334465182d0d329cbc5ee6fc8b57d8c3c0f315ce13725c34809ec330a7c80beb14c3759279ba4dd4a4db6f01d36d04267c9246f8f4c6c18467616937599776bcd5c0eb0dde2c5921ebb6d8d230438c5b6788e95db522845e2252ae5aa46b063bc2a98e8f748e35ced319a21e2817f732c43eee55a2ac0d92a6d998fe5374fab702facf051a0679e348acdc9aaa29b72201cbad1c9d70def099c690860fdf272478c36714866d860e5b2fc1739d68b9d68ae70b840394d6b5954beaa9821cadd12b4bc46056b3866c90f1de029f0c572dfe1d6da2f07747a759846978f1bd58bc0d2ff547dff0e2bbd1648a7d17d3a13dd6c01a8315aa3335856a2448a19a8be58559585e989d525e18abf339119eab6c509fc37354be90cd735ef8063fdf17a5b1b7f72f426ba393f0acfad271a8587f562dbed3e192abe685291f095d0a3ec8e1c21759429f27e68a3c914ecdb17c310eabb50fd0d4da77350d566b8fd7b9ac08595635a8cb4e1612d2e1b6f93ab71571d5dc2412bf3ef5ec23e64c578b42b54416aa6ed1dd472cfcab12d566a9739d17bcf0fe50b11090b797a60adeab04796e5f91e8f7624e5e209c3cdd76628ebe075601146a2a8040adea3db12c344f9385fe08988526606acf0fabf65e98da076ad4ded82c98da7b63c2176884cf6c1e4cf83e3ae1bc60e61bf684e921ee8b09e63bfdc43537793043f5138a3d3dc5a5a2afa0fa7f25e2ca7ae7ef72e75ab1109121e6d9aae93d41b4ccc3d81ea261db3e20db8918828521d94ed209e6eeb92819c13e239493758279fbeb5086b4bff87e34c1db5f5330ec4b34d8b705c43e15cbe64561b3f9344cf2d2b092a763928bc34a9e81492e092b793f2c114b3589c867b80549c4fd31e1cb34c20b030a9f8965cce5bab26977c6c345d146aadb7d8ac6358a1c9d6a44c9932166aef03ab724263ec2631e65b2d31c249fcfc2f45ca1d3d35d6ec767cef036459188a1f137ce612b03bd753686be4c83feb480e8e760c20fd308ff36a0f0b918af953a5edd12a46b8998fb16bd3ad2b91a84e3019836e53a6df86934dd82bc271f43ba4a83f49256c190166046acd619c1ab0a17df1e0eb2d922e05724970aae11d578708c859806153a0ddc30846a18cc4db159300f435aa941fa6640a4f3b112f9f0b025f28198da55ba42b37530b517606a578755fb209d64ee4a350c6975f09db082b73a0ec6deb3067bcfda94de7308466a5d58520bb1045eaf49e07ddb044be04598f00d1ae11b030a3f14137e8446f88e80c21763c2376a84f76c1b4cf8124cf8911ae12501851761c28fd208df1a50f8524cf8d11ae1db030a2fc69c7c5358272fc1d43e46a376a75d82a95d8aa97d6c58b597692467899979e99cdde99dfd146c7627dfad2db989c49b997e6667a2f76321a5e5ba74e135f4f13a950254e52b306f3a41e34d5f06cc046598f01335c2170674d5c330e12769849f1450f84a4cf8c91ae1eddb05135e8e25e6292113731526986f9516d7161c26bcb342e4b10cf1656fbe0a7eb5fc9038df89a4540c5c17c949f42ae0a406aef9b60a19d27baba44f978b29f01981b45e8d697d9a4e6b3ef2ca83b8d176b3db9574bb21ba7985196c906c750f0aa45705e603a76b7ce0ae800e5689197d46481f385c57ce8a49ca65a4e52c368fb45004eff93628cb84a7ac0a3cebd4bf4c3e33e932798b2893f9c4143a5db1f2bb4a97dcbc6d7d1643dad67c77be56e2f37441dad6d598cf9ea3f1d9d101cbad1a4cf8b91ae10b020aafc5849fa711be39a0f0353ae1bc59c3f7d80bd5ac598ba97d8146ed71ed83a9bd0e2b24b6ea4a466e8f0acec496d541ca8ff5d83b2fd4bd93e72bb8282dc89b3660e82ed2a07b3320ba2330332ed699d151140a95322e59caf2843965223cb25464ec42e6aeea0a62e046ccc04b340656760866e0919881976206c66eac3249fcbd4cb43b792d998a814761065ea631b0cdaec10c3c1a33f0729d819d12a660749a4f10133761266ed398b83da089c760265ea133b167c2349c23c2b5b5b23d5692a2c9c7eab4e275d5950ca9abf82e97c1e340c761d65f8d2570749320ffa40e62ed664c8b6bb07cb4d8f98f0755ca59ec8644fc7aa5682df33668101d8ec774b856a74357a943b6f3bf1bc72d77ece6ede1956cb66cffa6aecb09982ed7e974e9e7d185fbe40a71e4d335bc5b36cd12b5d10ad15e4a5dc313310db727a295e7bcb7244e2b374f9589e9b64187a04ec274b95ea74b06d025984efce9aac075f9c958e17583a6f0fab163b0c2eb14ccf41bb164980ac6f9d47c679889d435b71113c4d053b122eb26acc8ba39a522eb34cce65b309b8315d8416c3e1d4bdc5b35899bdd3958e29ea113ce6769f30de6c3ae243e13d3fc768de62f06d47c0b964477e892880fffab36f304b697f37736dbd3f93b5ad364883a349a846ec40326a26a6dbbb9b5180c6df3e8c95ae1f2e5751375aa45f9b7562e0c70a32dcbc4bfca84be3c8212c40dcec2ecbd5367af3b2758afad9a88572166b407d1e16c4c07bef5739860c63998e0bb75c6b913935472ba43a98b0206a3cec57cf31e8d6f667409e69be761c2efd5085f1050f8f95819781f5606de9f52197881ee3dbc87fc403289ed33bb6a2b26f8c190822fc4bce8a190ee791126f8e190822fd609e669cfbf27ea5d51d34457fcfaaca8b904f3c247355eb8a96b302fbc54279c47261e6321232d97616a3fae517b5b40b52fc7843fa111be23a0f06d58ce7c12cb993b52ca995760eef814433a54d1ae4c85d3609f2b5a21bc5a5817a2797e25a6c5d33a2da21d2ade18e6d50f9f6be4cef64e5d87ab301d9ed1e9b0abd46194e8c454c835d93c1892ba0657631a3cabd3a005488b19a2715111e86dd760eefb9cc67db7740be6bed762eefb3ce6be2fa4e4bed76185de8b9a42af71c0426f3b46e8250da199dd8311ba1e13feb246787940e13760c25fd1a56d40e1376269fb2a96b6afa594b637e9dec31dfa75bfa229a79e8ba69b312ddef02f9a46d663d1740ba6c39b7e45d3e87a2c9a6ec534782b51d174a0785fb0f5abb761eefbb6c67d17ee16cc7d6fc7dcf71dcc7ddf4dc97defc090f1efec8569e8dd89d1795f43e7db8074eec2e87c80d1f930253a7763467ca43162df1ec18cb80743ff7148f4f7625a7fa2d17a6b40adefd309e7e83fc5d07f9612fafb31233ed71831ae6730231ec0847fa111be20a0f00731e15f6a846f0c28fc210cff5718feaf53c2ff30e69cfc9b6268b536aa9eabb547302dbed56911add672eab15a7b14d3e13b9d0eaa5a1b538fd5da639806dfeb3468c9a2d5da14117fad083809fe71cc817fd038f0f45ec11cf809cc817fc41cf8a7941cf849cc889f35463c16d0881d98f05f34c2337a0713fe1496dcfc33d761ea85a731adffa2d17a4b40ad9fd109e7e111fe51ed50e1916731b5ffa651fbbe806a3f87c1fe4d97b7f82424ff652e85cea3956221ca7251ee54895560ee6e06256202e15ce67e8ec1dd09a7480c92f1f1a115e25c959b7cc0d79dde37524cef532348eb99bb337786985eeb0eaa658861c912b9b7d24ae606e36be5e44625593f81b04c4e8484530e838ed73c8f25d0df3509f46cc0047a0113fe0f8df01f030a7f112b8cfe891546bfa75418bd8419f12f1da13ec18c781913fe6f8df09b020a7f45279c67d6ff245318f984ae5fd508ce121bc336cc6ccef83d3aeb7736e71f3a5edad99cfc8bf0feb339c3eb8acde67c0df3a5ffea725b405f7a1dab22fe17b68a780393cc37e50a25f94dac7ee01f330d5319bfa5f37fb17df1b206f1ff30bbe7fa7b7e231d29ade7378e70cf1fe2e3f9e1f6f8d5a7c4db98f33409eb3cef60ced334a4f3bc8b65d36691f86c3ab96fb06cfa1ea675f388a649c4376ccb131dad52b18059b7f43d4334973202ae52781fd3a3854e0fbefb5e30f91f60f25b864c9d0fb1d469a5499dfb02a6ce4798f0d61ae16dfa0513fe3126bc8d46f8cc80c23fc178b70dc9fb534ceb5d345a2fe91f4cebcf30addbe9bc9017066a9a86dbb44e7dbefae7d89bdbebdecc5badee872ab3eabe689555b793e31c276f96b0a0abe1bfc034e8a0d3a0ab568399e25f3562db2bb70392da66075f62baecaad3a54792bac47ff228884e5f618ed751e3789b060473bcaf31833b85cc2edf60823b8714fc2d26b84b48c1df619cbb6a386f0bc8f97b4c78378df092dd8309ff0143d23d24921f758279e9b35b32827dfa653fe904f3c2a54704e912f78ca4d225fe19c3de4b837dc2a060d87fc18ce88d19d12725237ec58cc8d018b131a0117fc184f7d508df9e194cf85f31c7eca72b4ef9fe22f90cee6d58229afbaa20cf6483e5a44ff7efd8a5b319e2ccad7e78a3bd52dc51456eb598189a210ae6e8de456e7c8b4f14af64b10b5dd57b785ccbad6297d515e719a2302f093833f26f188bfe3a167c135cb841b2dbe08d56b0d17d84d60a0dcb5974fb1b573fae73220939ced341971bff8639cc008dc3fc1ed01bff8e65a9ddb12c3530a52cf50fcc88411a237a06f4fa7fea8473a299ba94e62b99f5d1da43649c972fd7e61d1d775f4dbf34cdf4bd3b58cce67523bc51bf8ecd0115c233543437f65e8df0ab1a4d2e5a2a34545f8b8bcaae901de520fef53b9634833549f36dc0a4f917963443b0b6269cc95e0b564d6588f65cecbaa9be810cfd3766e8508da10b060733f43f98f0611ae15b030aff03a3385c4771ac8762ec7a00ee26256236bdfb85a21122de5222fbf7b19f7251bb14f03dc6973b4ee66edf5925b2ce4ad90b5a1bd0ddfec4408dd0801a372418a8ffea84f359765991f865202fbdf8e25e419681fc0f2b2bb3b1b272644a65258b20a99da34b6d6edd74b1456129ba5222d83ae708f6fe51baf733a649221fe98d30e9a375d2f90db7e2cd4a61afb9c6ba77715f1ba3f1b5738705f3b52698f05c8df05f030a6f8a511a1bb287d10c133c2ea4e0e6188ef11a1c6f06c4d10213be87aee81e1e4c784b4cf89eba7e6840e1ad30e11374b56b40e1adb1c4dc4b97976a5872bb39861bda76e3338b6306cbcd1ee86e8325d1deba0676c0246a8b25d13eba24e2b37ce2e71a04316617ddfb7825b52f5649e5a55449b5d3bd874b99984c39b21917dc1e033649078c573f59810075c0e44fd6c96fc598d6a383bc7157ec8d53746feca2758159c2d3d5a6b6d13bc13cbd23a6c9549d265c021f6f0c5a1374d2bc254b7cc6926fa19bae9df30a9d33be3f58f05df3a645f860512c0c913fb4a39bd323bc9fd939ce32bff76363969d75e9234e233c5217abd27eb38e697e49cf971ac5254d533c69ba600eb09fce01f8b72dd4427ebe7c7831ab9146950574bcae5811bbbfa688dd383a5811db0d336aa6ce289e527c7c7985ac75d4586669ddde23a9eebfd61dd363964e8f7628dcd5b2a60bf2eedd7479ae4fbaf39cbb9746550a796e7684879c62118d4072dc1c24c7f9bd1dcb713d74dc3238b7c569e4e63ee796ed05e2e317658c6fb650097a70c199ce8d04fd1ed901826cff38cb53d50fa3de539753f8dc8cfc48d82f8563920bc24aee8d492e0c2bb98f4e322fefe645c27f4635032b94e687eceff5c5781c1896473f4cf282b092fb63920f0a2b790026f9e0b09277c7241f1256f2404cf2c2b09207614eb728a4d365622a1f1a56e5c13ac9a201948cca3e9f5f1e82a9bc24acca4331ca4521290fc3545e1a56e5e198e4e2b0924760924bc24acec2249786959c8df9dcb2903e3712537979589573309f5b11d2e7466182cb420a1e8db1382c2c8b3198e4956125e76292cbc34a1e8b495e1556f2384cf2eab092c7eb24f3e72b92710d9f49317b602a578655794f2c3a7678c8e8d8048c455548167b612caac3b2d81b63511392c53e98cab56155de172b8cd6842c8cf2b0a6feda7a68ea4fc478ac0bcb6312e675eb437add649d60be5c62433282f9f01e22780a968247844cc1a998e08d21054fc352efc8b0a9371d4bbda342a6de0c2cf58e0e997afb6190378584bc3f26f89890826762a9776cd8d49b85a5de7121536f36967a9b43a6de1c0cf2f12121cfc5049f1052f00158ea9d1836f5f275f1c5bece69847f0e26fdebc174a3a8f5bb2eeca464d2220b275680a5c5c961d3a25027992f2938251995b7e082e7617e796a48bf9c8f093e2da4e003b1bc7f7ac8bcbf004bbd33c2a6de41188b3343b2381813bc25a4e0433016678565b110937c7658c98b30c9e784957c2886f9dc9098176382cf0b297809169e393f6478a608d3f882901a2fc534de1a52e3624ce30b436a5c82697c51488d4b31c1178714bc0c4371494814cb318d2f0da9f10aacd379593d743acb301c9787c4711886635b481c2bb122ee8ab0455c3906faca7a00bd0a53fbaab06aafc6d4beba1ed4aec0d4be26acda9598e46bc34a3e1c03725d3d00a9c2d4de1e56ed6a4cf2f56125d76099fc869099bc16137c6348c16b30c1378514bc16137c7348c1eb30c1b78414bc1e137c6b48c11b748279dff6b6905dc02330c1b78714bc11137c4748c1476282ef0c29f8282c4fdf15364f1fad93cccbadbb23e1bf98b209137e4f3d083f06137e6f3d083f16037e5f58e0c7613e727f481fd98c097e20a4e0e331c10f86147c0296820fd5430a9e88a5e0c36153f0242c80f448c800d2c95811fd68c822fa144cf06321059f8a05901e0f19403a0d4bbd27c2a6dee9188b2743b2380363b123248b3331c14f8514bc0583fc7458c86761909f0909f96cac4dfe6c3db4c9cfc1783c1796c7b9188fe743f2380f2b8b5e0859169d8ff5bb5f0cd9efbe0083fc5258c85b31c82f87847c21c6e295902c2ed208cee2dfa68cac64666c9379881ce4a9bf81a15775ccb4d3d05f8bf069e8bcfd40ab2f363dfd625db2f3d4793d99647f0d2f772fd109e6a76f44e2d7f7a83f712f688afbd5a55829f9663d94929761c2dfaa07e19763a5c3db614b876d3ac9fcf97792494d9f01f42b7482f93ab77793113c1d77932b31c1ef85147c1506f9fdb090afd649e6ec3e4846659f495ed7602a7f1856e56bb1ccf8513d65c6eb742fe07b217f9c0c933f71c1dbb1faee9390f5ddf5582a7e1a32156fc052f1b3b0a978a3ae26e52b9822f358c32ce0523551b0c55a9f275d3b7e216ac7ee71d625a30356e3dd8415ed5fd643d17e3396f85f854dfc5b30b5bfae07b56fc5847f530fc26fc3b2f0b711cd5ad1c9e234df7196023699ed5fb7f7a56eb79e116255e90ce7fe1cf1d55ef5a5777dc348371f883f0d5d8b3b7e0573f78008f62daddb312bbfd35979429d956a3f223783ae12ff9e213fba5225f69a7033e88cba27a7d4adde8dddd0ae4af22810774b1c89b5c22e2e37965e54027f3e981e98a442c6d7a32e17776399c2cceae53ddf91137481f51d18e9ef317f826f746d1ae5fcc6a555e1148a8b1ddf70777a72ad2d942ba6bdda467f8b5faf2f7fba13b3f2079d957b7bac84cc5d3ba78a145b256cf46a199b42f08e5f5e81bf0a62d95d98653fea2cdb27a9f4cb133bb59431b546377cca45ef04b1ed6eccb69f74b6e57a6c9b25526785b48c9fad6b304beec12cf95967c969692ecfa2bfe11b18f25df2d633beb741745fe4ea005e0ed9e156f0baa456343360a9c71b58f557b6dd8b51ff45473d2fa9bc3193b99f1133a154bb0fb3ef579d7d3309bd8a5f3d5cbc865be53687cbc4abcbd80616dd4fae3e52f57ecceabfe8acdecbd76a5cd37c618bbb91a76ba3aa8df9d56249283e5fa49e9a0f6076fd5567d741815b7605e24e6cdb4e27c1bd36b7ae1ca872ea03ded509d3124c259d1fc478fc4dc763ffb4d4d9d4b5f94398cdbf61ed94603ea07c98ef03552c04c1740eea11412c7b18b3ecef3acbf6402c9b27f267b96c9bb85d6dd56b992f7371495c6ad0f4511ec12cfa87cea2a984a5af4a557707207787db780aa95bfa2866e93f75964e6058f85d5752c45a007715e44ca68b54ae12bda162a7c65d5f8f563d8659f57b327d82d8f7c216c23c910a55ceb33c1f2ef7a9fd6265d49f658f6396fd4b67d9a484256772bd02bc0cf5ebb3a65a523e81d9f86f9d8da5c42dea1ab19b25df5bcf6d31cf171e5056971beba78f984a2dfa24c6e93f3a4ef31aace7e14f283c871d18873f741c0e26e4302db4bfe01e1384c85318913f936b5fb9da706dfdfa477c53fb29a26fc045c5db1595e277a7be4ac6a7319bffabb379225a93f17ef252e7215542bafb6afab73bf492ea3bbf3f8359f83f9d8533025a78a0f0d3d5497862baec7d16b39735d2d89b4f98afab536885d50781e73002111d81545a676e0d9707da66f4563d8f59d54867d5b4807e1cfd10ba093efc02666b639dad7929a4e054f144bc377aeb95e4e506b1ef45ccbe263afbf60cd17fa811f529df557299ecede35615c63d1bc4a697309b9a064b33af7fc26f6726ca6594eda59731fb9ae9ecf38e0b617d88684bc025513f7d88d4db03af605636c75231487c24b6bd17bdcb47f7fc7b42f5d54b7a15b3af85cebe01cc3f025ee850a6d0f2354ccb963a2d67a6940a0529a502650e7b1db3ba95ce6afcfbdf8575d352604918fd081a6fe1d46afb58a98d65bd81e9dd5aa7f7f88425c30c310ece23ede5b2b7b04aec0f9ca874a8af32e04dcc9e363a7b2626cc233cf23357b493ab352da564c6cd78fb72593d5af81666615b9d85de78907e1c6c86f03dffd23c9d63616f6336eea2b3716a92f5553256a6bbce7a07b3b49dced2e949a566b05e7b3ad3f55dccdaf63a6b17244c57da5120eaf1a1f7301a1d82f5f5e2a7c1c7d61ecb91313d9afec1fb9855bb627dbd642251c9cd424a7704ea03ccd68e3a5b7303d6fa6a8aaaab3b8f51f09ccd7bece5a2e75ba4ed0346ed0c62c98798259d922b71f5a956e03cbe94b9fd3837dea01f6b4825d552b5f423ccd2ce3a4b672469e92c39bba04c7e17017e77af61edfd18b3b74b32ed05ccdec4e347e9b4f113ccc6ae3a1bcf607471c32033b20a84840af17c903959b1041b7656d6a718f96e3af27ba45c87a52f16f4196651779d45f3508be2e35afeadd064a293c12398a9d76d9f631c76d371181280834a53f585a3fa6a4f7d8169dc43a7f1c084adcbe8fc9a527195cf3fad9f5ef79798a63d759a8ef56937783d3d56f34ad1738d8ec952e497af305b7ae96cd93f7009e046dce2efc69798ea5b6bb8a5f152f2c4d8012f9183d8fc3566736f9dcdbb7b3c2dfa4e6a3ffb06d3b38f4ecf1c8f9e30e77a759e26754eb6cf986a6fe25bcc820c9d050b096bf66446faa107261b3b50bf0942e53b8c4a5f1d15ef6c27f5c620b1fca865588eab9f5ae77bccb27ec9f44382d6b9e1fbfea95bfa036669ff64f2e624e1b3ae7fd68088beebe3b96c7402fb74f996ff2a88053f62160cc0c65bf4ef0ce287d03eec7a7da5d04f987dbb632319feed89e837f3bc3aaa6f16e2a506f6bd3dbf9226b5baed67ccea81a944d083c40182472253ab157fc12c1c944cced3134ead564cdcd26deefc1789f065b2538414773ca242fc86b781b2f8305f24bbaede1b51579f8d88a9fba2d7f9fb5739a9c1f344615dcdc59709fb4bc86ce40e178b3f83e46781dde23fb28c7997214f12f2cb6579a3bc758420e4ae58e03192114e9ba74cfc4a2da84e6485ae0e1f016a71685d629b16210ba42391e6d22225cb21cd9b713b9da58379aaf696a9da288b778a224353f4a6c45a0ce16f6bacf7a1ae716461eed0e9ee0a982d7b9111bed1ce62f11af763f4f872a0846ff67e17c1fbe6e142806afd2414370f14013a71dd85bbb921b52ae60ede7ce8c86cdeb451364f91a194d83a392707cadb258eaa95cedf6e9c3dcf695f14b13211b1724b091bc03d941905378c121cdf7b61b2e80e543a1ee786fd54658d795eb51508797842211c4e89b0bd73a27abfd3c5cc0f2ea048b4697984740e5b6905b0db5a44818da0ceacbc1191cda253546d06d7be75145c1625b85d35e0b8403eaec6e777d48aab2556405bc2a2d0b2a9bd2d367b4e95150247a52690b95e6703b8cc3651702329c175152da852316ba8ac2e0eb5da69c9b96383bc17c7571dd78afe832d7e573e388a2f87125f17c6c444b2646b551be09d0bead45194f05a83926e4e4c5cd3064c957da3984653626a0930451710d880e8c31e5144632811351388aaad2ae29bb48dc2c9a584d3cd399953d7d754036dee84b47c5167f2c27db5a825e7ca10a40d00b7f78b021c4b09b005c8803344dd586105a0015da380c65197507344d3213af5cd8e864225f0a1f1e9f221b59ad10640bf768b02da831210dfb553b5e0a7b075c2eadaba76139f185c225a55f9c2c34a84bf953b2fb40122ffa320ee490991efb50fe1f1d022dfbfa2b46e0be912cb1ba79d40b0710225cab6b24c53feb65ed698f344f7db0654a781b26daf7475be796708ce4a501d229b5a66bf378f82db9bbaf708c1c1a5ce79a23fc987d2a28bba6d80b711c4c9f6a184d706d4a8d1d5acee3a6b1b40b500adb37da943d7b344f65be9d9a26bb2f3789578930dc096348a02cba304c6b741e63b40f106c76ce7319e2597b1d899f2760c8fcc1c12453631bdf1d7d8a96925965501e5609864127db49f7bd464f16a9bdb66cf368d429b4ced6d534426ac152f8f6e2b18dd66b2da69f6f2252e3680fb12809b42096e17904d6d1d53e2338814aca9f42398ee2c8d0a21c6eeaed304e065d3a8038ef90eb4492cf91d7a6d007892e817346fea11ee9dda9bfa44ab60d4f12961ed981b06a814576b64fd1b33456c90f388719a4f8753bc32530e0965262ce732931e65cf0c3cc49799e2749bcca41aea9921633c9901269f65062a0233936ecb6406aac033532a4f320345253203356033939a0d9419680a4c66e060804e677cd24366dc1859a66f0f3a533bea91a98d6367224394993e23bc99c8a0416682c05b664ac3599981e60e66a6302b2233c95e637496b47e7673f6005edcfc7f3e81399b4f60de8f43e09f1de27fdc56cbfed4ad16eeabee7c755e93f8ef8236d2693b7874e819a743ec17bc54eb44a74dcb98f6cb2ec918984a1b662498dc31d3249c3956e29c0670ce3209e7282b7156009cb34dc239da4a9c17009c73a843ccbcc5bacef9d93ce701b71e747fae768c21c337900a1f97a2f0cda5c6b7585629b15ee9366ff86364f89a53e16b06bcef807464e6e5687686ea2f66e3582e1dce3654389b009cf926e11c6325ce0740e62e3009e7682b715e0e70169a8473ac95387f0638e7998433d74a9c2f039cf34dc239d24a9cf300ce034dc239ca4a9c1b01ce0526e1ccb112e70a80f3204a9c9d25ce621972f3eec6e2aaeeeef4914d07b22915c8cea0c57930f5b45515264e3664cf9faf12cfdad72f9f063cf4104ab07d188ce1273f866533dcdd01dc85d4b337fd6248501cafe9edebc10f0205c0224a94ed24cadcf4873fc8fcf019e08787a603deb8f4c3fb930adeab00de62eaf5cf7e75786c2626ed9b9365e3cf00cc2526c11c6b21cccf01cc2293608eb610e67b00e65293608eb110e6fb0066b14930732c84f918805962124cc271483298cf0198a526c124ec9593c17c04c05c66124c1b7b388f0298cb4d8239ce42985f00982b4c8239de42985f0298650d1bc67045b9dff0202c31c9e6711c0dc2188751a21c2251963b0f958ba39ad60c3f00a93e8492dc6724499177a4427e3e40be9212792b817c859829ecce5c5e2ee0d9172f6a03327c794366f8d8edd709bd6f3315ca3d81f7ada2dec8d77f9e78217367c59141ec4b05b123f0c7d5941007c5959a4542d854a63e253bd1f99f67f13502722df3db7e9ed463c96afb62e0b115e9c8fcc9359d6c44d90ff86d2525cade9a7234d9cf1691a2dd4285b61078e9e10deba5b6b749cf005e5a458d324f2c14ac90cba3f88719d4c7fff8422ab568cc5d8a675fc3a90940599d8e9d99473affaf922f2f12ed4d7ed5e6a9da17018435e9403876a743f82640584bfff108774e873ae60915dc2f2cd93c77e37500718d49eb7f48e76992e1cc05f5f55a9370924e2c24c3590070ae330927e9b457329cd500e77a937092cef220c3790dc0b9213dabd5b2d33fe388acfefe01543d4798336dd0c6a18bfd81276e4c074a386f78a6d3a799263787e0db2fac4b4783880ce5d9c02b8fa41f528311f4c56ca54037516cfeb0528a9aea1cf997e1e3f60aab3f98bb51c16c0b601e958ec8508dd8c2a6ba6ec447ed8ca18ebab8660ee5741932b4bb802c7fb4a968475a89f676e0b59bd231aa9eecea20c2aa896c6d501e80798c493009e77b90c1dc1bc03cd6249884b337c9608e03308f330926e1bc6232982300cccd26c1249cf14e06732f00f3789360dab838754f00f304936012cede24839909609e68124cc211493298bd01cc934c824938e39d0ce67000f364936012f680c8600e06304fa18499c1e24373c1e66a12d6ef6473350f037df7531b72dab6370e4f588a9245e187015f3dcd249884f53b19cc3100e6e9e918d2e081e43562c236df613a4d5312c8f0f504f8cea0c4d71de08b9fbdc98545f7ecb0798ce86b00f4cc747d037ee79a26732140b8251d0873773a84fb00846799dd1c228c6a9235872e04cda1b3d335912b3a7a0907e0c8c72dc9062db6021f3d871a22b6dbbeda79b8424c7f2583483647b80b8078ae398b026cdc1b615f80f2bc743585127d21c4e6999a1300d0f34ddab3709c95f1a2ff009c179884738c9538ef0638b79a849374ff0e329ce7019c179a8473ac9538bf02382f320967ae95389f07382f360927e91782c870ce06382f310927e9276dc870d6029c979a8493f4834b64388b00cecba81bf2c97df8305fa8c63fbd48d8909f4b05742c007a793ab6296d804fdc902d883e1cc0db4609af074b76ad79ecee1d8453641a4788a09e0902705798089530004206f50c00f54a13a1124e3324837a2a807a958950096b7832a80702a8579b0895700a0d19d4d900ea352642259c9e40067506807aad89500927d090419d0ca05e470975148b1ff4885d4b3489453f5fec1a12fb31e4d86fb447bf6d5d285ab42afa4f9808b9c960492511fab268226c376731ac8d9bef4f01fe7cbdb92be308272e920d32bf08bcf40673f69b25dd2b84cc4f8f00306f3409a68d1f893812c0bcc92498367e24621d8079b349306d9c08b11ec0bcc52498367e2462158079ab49306dfc48c46a00f3369360dab8096a018079bb49306dfc48442180798749306dfc48c4d100e69d26c1b471a7a56300ccbbcc9e0a6ee3570c0683befbdd9478db4abceea655e5a217efca2ea3dc6989eccbc10cf8e53de9de833bc85e4bf6053d26019fbc375d3399678988e64a4fc473b2f3b32af1469b6732f701be7a1f25d05d7c3379351dba5654e81a0174f737e40205fb775fe80e503e908ea5aefca3f43bcf52d7f900df83667cf4c11d3daa141eeb8e0b917a26d9a798af0315ce43266dd34bda9924f3d41100e7c326e1ccb112e73e00e72326e11c6525ce9500e7a326e124fdbc2819ce2d00e7639438fbb3f8658753d83ac66782d4323553798ef3f312c67be5f902acfbfd97f2f434e03b5041ee06eafec74d9a613fcecabd13ff04389f3009e7182b71de0b703e6912ced156e2bc04e0dc6112ceb156e2fc0ee07cca249cb956e27c01e07cda249ca4333fc870ce01389f3109e7282b71ae05389f3509678e953897029ccfa52b125f201ae9b58ee43cc63fe0385f2e482c110b124bad8ec41703a0cf9b33ebd8c6c93439a0e3f9423a46d9d5ce89ee12d9a5a2e7ae1eb27dc3b5e5c02f5f4cc712d99de9bb5a1301bc97cc9dff4e5801910d05df07d0be6cce549a5c2be7bf770725e62b26c1b471ca761700f3559360da3865bb1b80f99a49306d9cb2bd2b80f9ba49306d6c65760430df3009a68d53b6db03986f9a04d3c629db1d00ccb71ab62be98a2a17fd20c212936c17da6300cab7d3d1fb199bfede0f5913fd151685f74e43fa61dab6b0d84c85f27ae087efa6c30fc7ef44bdf04f801fbe475fb9acd0ec785ce0302966c552a16562c3343ef5c0be38656b00f37d7367b713d6db64e5e50490c93f3067cb731b7b3a59c04b3f34634a6ca1283f578beccfc5ada2454bb6eddf79c04b3f3269961ce92a36b2f2740f80f3639370e658897321c0f9894938475989f34480f3d374f4cb931b95ccb172f5efb900e66726c1b471f5ef5600f3739360da38fe730a80f98549306ddcffe82c00f34b9360da3898b61ec0fcca2498360ea69d0c607e6d124c1bbb986b01cc6f4c8269e360da3a00f35b9360da3898560b607e67124c1b07d3d60098df53c2eca381a98f244d933f49db76e75954708f04707f30192e61054506772380fba3c970098b0532b84700b83f990c97b0022383bb01c0fdd964b8847d7d32b8c703b8bf980c97b0874506773380fbabc97009630164708f0370ff62526c9f74063d596c7f34c0f95793709246aac870ce0438ff66124ed2f59a64382b01cedf4cc249ba750019cecb01cebf53e2dc55e21ce3fcbf8aa9ef56f26d596c5f09770f8b22fc473af6b3495cb74f62de6dd6f21ca15562ff59d2a6ff6b1122c817033ffd2725e44ecec93c47965a3b9c27567096b1f2ba159cd16f1ad93795ac13f0d5df2931f692be5aee3cc4fdb454eebb3487a9dd96624bd3a829a4fe49b6dfd2e1c03fff958e4da715d87231abb4468889ce2bf58bb7da18ba5e0cf0febb21a740a62d88b2990a653b80f23f9428fb0a94339c87f20530bea5ef1af9f3a8b72e662b0570be597ab1f36ff7fe54e758ea8825dce79bac49d51294b17f98b363838dd93e03f8ea9fd4b5be1f4a652969507a3a55e3e94a80f1bf667f118130b847f645845280f77fe6eee640389b8facbdfa0b284b59e334140058bd1f2d0008cb51b202a013f0d0082546fecd8eb93230a2fa4b338467f26c6f5f5dde1ef85f234a70c196cc125642644b6637011f6c9c8eac9c5d979d4b4488c4ddeed7f64dfddf001ed984122317c0814d162f2e65ee2656fcd10d2234e2e2cc1777f9b245c270480115ccf10066d386ccde699bf840d6addc1b64ef66e94099ed13fcb03ba0fc0df0cae69428554c7ef44e17932f07085b502254714eee8d5344cbb1562831d3f949b1282fe7b0b5220a5fe5dce3cdf64a66f376947b00b02dd391cdb106796c70c3c6f520b300ca569428d5de0da33d5590cdcda035005eeb86f543db1be6ff0528db50a20cba03f2784a9c643b20b7010da1b626e11c6725cedf8177ee6212ce3156e2bc0de06c67124ed26f1991e13c13e06c6f12ceb156e2fc18e0ec60124ed20dffc8703e0d70ee6a124ed2af1492e1dc0fe0ec68124ed2cfea91e1ac06383b99849374412219cec50067674a9cea63b9a3d8cef4b1dce9005f97747863f28b0808831b6438c7825e5057937092ee1d42867301c0d9cd249ca3acc47914c0d9dd249ca3adc47903c0b91b25ce164240a99880cd7fc62593e1229b2bdc0c54353d28710d62f1b1cbd81943ee428155e2df7cf8a256888cce702f14d4d23085707f2ad8a301ec9ee968168d146dc89d658fe4a6206bf74ac758241f489bc6f8e0181f425b2e4623abac1e32bb147860ef869d430487cc6cdc29713fe08d7d285176667c1e1b2f034b989ab18e4d81a9b6b00a6a017c328312649829aba4fd70b229abff0368fb9a8a9634004786f64680b61ff5dcb7e4271f8cb2726fcf9b01ccfe26c1b4712ec72d00e6009360dab8b7e7d500e6ee26c1b4716fcf9b00cc8126c1b4716fcf2b01cc4126c1b4716fcfab00cc4c9360dab852f21c0073b049306ddcdbf30a00738849306decb3df0a600e3509a68d5f377818c01c46093383855dc94bd827225bc9bb1cc4978653c797fc4275aeeab962ca366175d4940ae4b500e488740441e2fd349930888d1fb89f05d06651a2edab41ebc6e039bcd56c3f315a54e93b9586d077c926d23406656cb6394b5c6cecc98f0228479a34c56b1c65ed4fe6992d41d6cf3109e7182b713e09bc73944938475b89f37a8073b44938c75a89f33780738c493873adc4f921c0996b124ed28d79c8702e0238c79a8493b45f4f86f36480739c4938493f0249867325c0399e12273f51fb1dd9d7956c0730ed6192d78da71c1d22f3baaea079bea74938c75989f3dfc03b279884738c9538ef0438f73209e7682b719e0b70ee6d12ceb156e2fc14e0dcc7249cb956e27c16e0dcd7249c23adc4b93fc09967124ed2693464386b00ce8926e124fde23019ce2500e7244a9c3d59ecb70738875ac68781bd5f1cf0ae6b231c07225bb791099af39329b10ef4605dcae2472a931fd324444dd611dd06504f49c72aa3716c67dbf1f01d50084c4dc788bbf2d66ae17fbc08982ae1956a2733d8fb6d9772e09dd3cc59c065e36ce47d01cae9e62e8e219cbb4456863e010a80199468d57692233dbe9a86d2930cde24006f3fb3e7d5114ef5269b57b71464fbfdd3d1e0879b43ebb2b8dd75fdb7c05b679a3bbb8ed053c90a82e9c0536751a21de069469533b8da7d67ff927b3ec03cdb9c3976364e093f00140673d25175298fe5d9bdc4b34a7ee78b02f4029e3ad7a4ad824823a96438b300ce034cc2491afa23c33911e0cc37092769609a0ce72a80b3c0249ca463a46438cf01380b4d8af38fa3dc64802ccedf1ce09c6712ce3156e27c10349ce69b8493741340329cd7009c079a8473ac95387f053817988433d74a9caf019c07998493747b5f329c07029c079b849374fb20329c47019c8798849374b764329c6500e7424a9cd13d3f77a6c1901f01be45e91849e22f5e263c51c95e2d1fb12f1c1701f00e6df82d04542563dfa87b1ee8ed2c3605a48dd317fa00904b4c01493836440672350059640a48c2b81019c81500e4525340124ea72103792900596c0a48c28d2ac8409e0d4096980292b0e94d06f22600b2d4149084d3b9c8405e06402e330524e1f83819c85b01c8e5a68024dcc88f0ce42d00e40a73a6c1dab88fec5080b2cc9c3d11c758b9917904c03ccc2498366e64de08c05c69124c1bb73ffb834561969b04d3c6a5030c78e62a9360da5801fd1378e66a9360dab891f9bf00cc0a9360dab891f95f01cc4a9360dab891f9df00ccc34d8269e346e6ad41055465124c1b67adb70530ab1bb633e98ae2732d4987250652a13c01a0aca11eae8d7e1a7486f4cd32e7c7fc6378fc67f68d75ef024ac85a4a78bd987741aa7e8d4f21ab12737eabd932216c15eda8e3162ab05500ec1a4ab0fd99772195bbec2fba1a9d0be4b331fccb511b1b4b4520ebaf4de7ce1f2e50be5a8d170493b5914e7bbf5e7009c0bace9cd56936b640878262607dba97aa265fc212a2252b614f025eba219d99bfcc51623ee31fc2ad65debd3ed2b634753315d6ab01d623d231fb6d4cfaa70e9265f7a74076df988e3e5272634423adec7096014f3cd224983676386b00cca34c8269e390dba100e6d126c1b471c86d1980b9c92498360eb91d04601e63124c1b87dc0e06308f3509a68d436ef300cce34c8269e390db7c0073b349306d8c22cd01308f3709a68d018fb900e609266d21415a05916d213106e03cd1249c3956e23c00e03cc9249ca3acc45905709e6c12ced156e2bc0ae03c251deb76f954ec35209299966d21c9f04d65517ca752e26be69c4c129eb6460cb691a1ea4385aa0340751a25aa4e8c7f20ac486e93cf45ad761e5fe13c5e2106273688b1f33271669fc73505184fa7c4d88745f77575471d173bea563bea140b1e7c52421ee3fb10f2919e2247002f0b4b985a5d5e6321dc0500ee19e9183a4b6daf6c1b7779bd0ba03d933afbfbd5dbca52d2a132bea72d09c62b407dbd851263860663b05db309639964bb669700bc67995b00100ead9115003f8102e06c4ab47d05dae9c23ff3191f172f95d5558910a5e625ad1409c0fdb8d8f9b72b7eaa732c75c496585879b50280cf4947098b4da199243c96f8c33873a84ad8dd4011706e3a4273b081a55aabd1f6abdd0daa1ec027cf4bc75c4f08337111602fd81900ecf99460d5e79b46b19dedf34d770084179833e5d0c6c9093301caad9428fb054059e0bc930ba961739c7fa91e7f356db5740055b5d403544b175222eece62a71e568a70c90a5f9fb57108ee7400f4229336801c4f89936c03c85600e7c526e11c6725ce7f8012f5129370922e7125c37903c079a94938475b89f37480f33293708eb512e74700e7e526e1ccb512e70e80739b493849e72a91e19c02705e6112ce5156e2ac0038af3409678e95380f0538af4a4720245bfced1ef978680173a34df6c6924a01c2abcdd965cec6850553412fe89a7479a31b0ce182d6494f4c4358ae3155a0e32de08dd7a6631883232caddb6341ddb63dbaf901c0785d7a473277f62fa9f60268b79b3a484c5a9b930d12ff1da0bdde54b4a4cd7832b4d702b437a4a36acad9e9468c86008437a663b22cffc44dda27cb924dae1900f0dd64ce6e5e39560eb99d0260de6c124c1b9beda70198b79804d3c6f5c0270298b79a04d3c6f5c0270198b79904d3c6f5c0c70398b79b04d3c6f5c0270098779804d3c6c908c70198779a04d3c6f5c09b01ccbb4c8269e38e485b00ccbb4d8269e38e48670198f750ef1f379ff1d518d5cc9df73649fcbd4c3cce436f739cbf8b4540832b57027699b52fb4d11960bdd7ec453184e52959bf3d1b0c6adc978e88fcc8ba62a04404925d0fb67dadf0dbc04bef3769e0771c65c54436f0db0278e50326e124dd6a9f0ce7e3c03b1f3409e7682b716e07381f3209e7582b71fe05e07cd8249cb956e27c17e07cc4249ca44b5bc9702e04381f3509e7282b716e02381f330927690f9e0ce76100e7e39438d5eeda399e3e92cd43be9500de13e958d9c667234d667caf9a4aa703592afb40ee7ab65221b0480880bbd8545b3dfd701040fca4493b7a91cef320c3391cf48b7698849334324f86732f80f329937092ce7e27c3b908e07cda249ca40bb1c8709e06703e635253691ce5683b5953a931c0f9ac493849bf1f4c86f37e50b33f67124ed2bd3ac9705e06703e6f12ceb156e2fc1ee07cc1249cb956e27c09e07cd1249ca4bb7093e1cc07385f320927e9b6d1643837009c2f9b8493745a2219ce1280f3154a9c839977371a1e1a297178f0490ccacee8a22d6cc6481eab1231a8f58c74cdd1171122e0378296e9ab94c03b33ff6938b1252b19c80e549e3b1078ee6ba68024f4483290bb0190af9b029270222d19c88b01c8374c014938bd9b0ce44800f24d534012aee02003791d00f91625c86c4fed5e8baebac4d715f3898dab1c7d2ac41937354d75fd6b5475fd45a0ae7f3b1d536e938d91128e7e924548870098ef98049370fe3219cc6100e6bb26c1b43176df13c07ccf249884cd7a3298bd01ccf74d8249d8902283d917c0fcc0249884cd7b3298fd00cc0f4d8249d8322583d91fc0fcc82498367efb6d0080f9b1493009f7632083b93b80f989493009f76320833910c0fc941226fed988a9cedf65ccfda459a123800bb6ffb31187b028d8cfa817202e66339d078ac58445b816aec13ebd43b642ae39c0fab9393b28dab87bc82890f5bf30770730c2fa9e6c99ec43c04bbf347b992c61af89ac1058023cf72b4abc1d41a5b546544a7c52b8fbfdcd342d92dd4c057119f0d1afd3314e0f6b7eacba22afefc97cb23fc0f94d3a4ad3f82c9f4c796ae37e8ae34176ff361d753e36da145be7dbb8955036f0d2efd2d1dc4fa5ce278cd793f9e83600f67b53c1daf831d3f301d81f4c056be367a22703b03f9a0a96b0754a06361780fdc954b084234f64607300d89f4d056b63032b0380fdc554b084d15532b0a702b0bf9a0a96700c800cecb100ec5f4c056b63e4ea6000f6afa682258cb692813d0880fd1b2558b5a3fd18d6003bda93e1bb00e0fb8d3ae437cf915522767d2875d45823c7a754e0af90b99fff2183d8970ae2ae00e2dfcd09a4d8b859eb5c80f21f26adae27ddd7896cb4741c08f1fdd3249ca41b11d10d3e039cbf9b8493749b2c329cc7029cff320927e98e8d64386f0638ffdd901378bcf17c1bf7b3df2e60366fea113e354ef824e139dc778a59743bab116c1ae36b39dc0daf8a9df399a2395ec3963855c921ce7fc1526091f39fee7a44ec5936c56938558aab5c5e8990bdcab9cb35ab66d97c7faaff708768231d2253b424f21ce635ce33f9ac54bc7d3d2b60ee765d739cbfd5f4a15a8124536c6d3cd7b956cbf8c0377fc36a479315ac4a581cbb9d5766a485e0e47e9490dbc501664a5dd536dd33641ba6ccb1b9486852e53cd344bcc7cd8f9991b6e04c351467886e4cb5d0aa99737f92c8b56bc4907c668086a6fbacff26e3d1673b25941bb52c33d4f6e5ae5eb39de7399b65e2f928db4299472a44ea71178d443a48afe429324ba46691d4b3c8795ee99795e93c16c9159af12ee188bacee008b90669953c53d713cbe43ee92fed0fee78117d49545e6fb92991456e01c07fbf4cccd92a15526724b434b17d78ce6ce3932a597c59f84e6dff9f3cdd65b20b37ed1a69edc942739c874b84527becdd8835fd7fd29857aaa2a80300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/df7bf03dbc945794f8b9e02b16d9e562.asset.meta b/Assets/SerializedUdonPrograms/df7bf03dbc945794f8b9e02b16d9e562.asset.meta new file mode 100644 index 0000000..e025709 --- /dev/null +++ b/Assets/SerializedUdonPrograms/df7bf03dbc945794f8b9e02b16d9e562.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 133f00eef27dd044b92505231752ed4a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/dfad1df8db705f24a87a495a863b9ae3.asset b/Assets/SerializedUdonPrograms/dfad1df8db705f24a87a495a863b9ae3.asset new file mode 100644 index 0000000..832b2c2 --- /dev/null +++ b/Assets/SerializedUdonPrograms/dfad1df8db705f24a87a495a863b9ae3.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: dfad1df8db705f24a87a495a863b9ae3 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aec5d077c14c5f79fbdd03bd21524f42825f422454a28911620140585900291504c42535450445154ecd851b1636fd81bf6de7befbdf7f6df999db97dbb997777737373ecf2ffe14796dddbfdce7bdf79f3e64d8f6413fb8fd5cdfe6b06994a46911e643a29224bc912fb5fa3eceb62fb3fe74e3ccf23e5f67581fd7781fd5b379219e74bfaa78bd5d2fe3bd7beab2095f697cb49a17d2d65bf4f23c5f6bf73ed6f8bed3bfab4c4febfd87ecbaa667f349de490c964126961358b0331837d54c19f59542fab96fdf748b2dafeb598094513c9663fb5b0ff9a66ff52c17e5b6c0b2dde9b4d0e666a2db67f2bb4bf29276536e67c8658abf51984fd8338971efc9acdafddedff6bf37f67f07fd7e2ff86ef57e7d79e09bedf0b7c571bfc9b32b435c6f7bd9d6b64a87dad613fae04f7f4dbaff97b7d1cbcc8c21858fdf8b53fbf0ee098cb1390bf26bf0e8ca36f2c8c41002b11ce6af1eb607edd8fcbbb22c9f4873a1c5917003ccae53020cf6090766df03b7d36444377918ffbfbf2717f271f235b78fe7dccdf17690ee7d7fd39b6fd4e13fe2d19c1af7de3c835d2f98ee59db0593bcd8c65fc7e14bfe6f0eb682edb082eeb4a70af2b8bc8d3311c73384f6395e4b9789ffebe9adf8fe5d771befccae5ef1dceef0f48509e44ec4fc83492a77104b8b779ac362f0696c8f751be7c1fc5bfddecf0586d874f1f607f52dcf11c6f4d027a74e3d7ae00738293eea43313f87e12bf4ee4d7c96efe4ffad9fb5b2487cb7524b8b7f5acbedea7dfbe71f4136977053a88f7a7f06b1ebf4e75e599bc3601cc7ce7dd5a0ff0fbe98e8c355a3bcf6b8872206c7a5a1c59451e8ff6e5f1688e5bc97185df99e1dc5b59c4f5a902877e7f940f778c0f770cc715beff8004e59cc9af07f1ebc1fc3ac7e52faf1a7f7620bfcee6698e255e5f20cae12cf7dbe6f314798b954787106f7dd697a73b2e41bb99cbafb5137c5fbc334f43e6027ead93609a75f875be469a751d5ba8f5bbcf16a6c7c12c74f8adb506c860e3d416e5b4885f8bf9b584f32ffcce4a701fcf0ee2c9b280cb22fced3c47963a2df9bdb08152af2ce4509f4c47a74ea688a84fd6827b7a3d803f5f07eea9acb39c74ea3ccd3117f16b994fe6c5e66466a1bafd5dfda6c03612f92e967d2d75f4ab3bd0c1ae3b873f17b18390adc095bbd604f0ad902391f250ceb998e8e378229741705be17bef18704faf13dcf4d8bfed6feb09dbea0d9ed36f8f05f7f4f7c312947539a96ab3146732487b324f9bfbff7a5bf8bb2b48d5b227fb965e27816793389e88115792aaf598788feab61edcd3df2b13d46d95443e3bddfae3627c2be233e17fe6baf650f375fe8cc766913ce22d5ba21e1fe47e638972738473df50c8c2af91298097298e7c0d7af27778ec41d611793d7b34e0819747b2d64dbbb590f7a8186909f98ef1e9bdd4c5a99bc965177e8cdb5ab4ccf8dfa5cf84ff3d815f4fe2d713dd77a76ee2cf8ee7d78d5cb6a9c4e39bc906f09c5ea7f1df8f03f7f4bde35cec66c246451a4256597e9eecd35de60362d9d929cebb53c4bba73adc36dcc6797bda27c31a12db7ef7e67ae513affde773dcbf1ddc46c28e37f3eb19fc3de02723bc2c91d35d9d868b3af634805b1bfc3b111963f171b6934eb4dd710ebf8a3c9903b0bbf37467b8f24563b7b3c06ff49ec770e44ce2a97362ca722ebfd68fa34f0ff01ebd9ea7a17facdf6af0eb855cb799c4db169be9e471e3af63605de4f0d452b4872e76bed9e36f7ebfd5f9bdb1b08f4b804e340d50373712e5e352fedb81406fdea68a1c049ef1d83f321bd8cc2cfedb65befcd9e0fb7d1bc090fd7e399041f6fb15fcf9f18eec4dc4f32b7dba9ce993f520e2f117e4aaaaba460ef2a52dfc5622797935ff768e2f2fe738f9d264470cac6be479d9f4717e7fad2f2fb7fbf2f260495e5ec77f3b04e4dbfefcd95c52357fe7011e445bea7a242fc5ef37005cd9ef37021964bfdfe4cdcb661df9f39b91bc84f2c3bcbca5aaae91b9beb437269097b7f1ebadfc2a8b5f6f27ae1fa7b82726807b07bf1e1703b7b70ff7a40470efe4d71d3170ef42e44d263d61eba20fa980786d9ddedb76db7c5b0cacbb89d4d65b08ceef215e5bbf97786d5db42fa17ddcc77f2b74f39f70bf102922556dbd18d8098f57c9fde01d68abe2f70700aeecf707810cb2df1f221e5b6fd9883f7f98c86d1dca0f6d7d67555d2345beb40556acbc7cc4c7b3e0b78478db2b254efeb41498223eba98c4ae1b1f75f08f106dacc738de028e7f32b8b778df084c77214ff76307a7956827d4e3cf79fcd3ea1efefc719e9e882f9e70de6bd5d1f7de93cefd1ad10e7fdac7ff333e5b39d4b5b7a82e4f81dfa06e8b88372679963f2f0379b5083c83793522415e9fe3d7e77dfc9572bc53c03d7def4557fe35a2de78815fcf757f6b2ce27a91bff5801c2fc96d85c90af24c3946123abf1c4767159fb498787dd262c70ef61a1803eb75fece9c18efbcc9af6ff1eb1b1c7f09f1b64396f0dfdfe6f74b7dbf8b7e841d2ef7cdbe0772086cfacda909e8ff0ebfbecbf197f16f37837b5bb7d6f39cb45a2fe4d779fcbbf77c38efbb721ddddaf74ddf04e431f19be8573a8c787dc4618e6e6d449b58d8ee5171ece9037efd905fd772bc72e2ed0fe47d3831fbb1e2a51543af4825f1f61d88f1a78ff87d05ff5db4d156f8de176387dc374696fbde5fe57b5f8c4b7dc2ef577adf279f021c7aff99ab5b84f75391cfc133d136ffc2e5a72df73191d5deb4c997c4db1e146dbec3f97ba783ef2007e277d1ae3dc2a7d31a7e7f26b8a7d7237db847f8b83ad2877b944fdeaff8f55b7efdc6d5f1e84af00de0938d5f03cc9836fd19c7389a7f7316b8b76dbaede73130c4b78283751ce36c706f6364663af266c628b791637cfcad05cfe9f558fefb39e09e62c76a1b71d923eb7dbaade7dfee4ce05be12f37f874dbc03178fddfae510caceff855f8579187c26629de09927c15baf1f677e4782ec316706fcbd08eb721c90f446edbc7f9be3fd7fb7d7b11f3fec8af3ff964db48bc7d60bff0ebafb84d92df7cb283beb6a87c3ffbe4136d0221f7493cddf3801ce239bd6e22de3a4dc430bc4f2972b2ef77d1b7261b6b8f55469af1eb1f24691f4bfe045889f4fd34e7d7bf34d2fc1b602592660b7efd4723cd7f015622698a78efbfe4d3a4ff8c622590a615e1d70cc706da3f0ff2973eb7f895f7fd45682c4bede87c702ff294db51073e3e64f1394c568dd8d8915339e605e01ec18ca90b2f4b161ff7b46abbdff71dc29ff1312b8bf7275af5dc77faf1be0eab01bf723f66350438bcffc46acc65ddcc65bf10dc8bbc17b273dbb3f6e0bfd1abcd67672e53e4348ec1fb0f3be7796564bfd706ff16f9ccf13bf2b132ab8973df8df73d584d793ac2a7f158cc8a333fcae265dc6a1e437f5e3eac9638d7221e8b975ecc32c1b9cae2fe2c723af1d48d562bce710ef85df80a7a7f067fff62706fe375e171bdb527bfee85eb2ae5a835c73b07e41dbd3fdb6b0f561b2edf0ef0bbf02bf47e0b7f7f2bb8a7d773f9f34b403ae239bd9e47bc65e63cc42eeceb3ea25cec8dc8d8364919cf91cb28b5cd4c79fe45f3eb6ff79b0ebcaeb7daf12bef2fe828faa7fee3cf3bb8df741765b73d7f67b02fff2f05f776fe772df2bd2fcaafe86b3a17dcc3f73b79bf8b9cc5dfbfccb18f088fabacce24b60fa1e554fcd6258e0dc27779bbcada975ff771dfed368f3fe3739aac6eb84d5b3cae40cb2f4c53f8d758fe205b018f8fa35abd62e0f556c0ebc3affd9de77d78cc63f118dbe2f352ad013ccfce27deb911bc2e93b529ad8171e4a0cf06c5d107ca2ae684faca60b4cc49ea8d9875de60600714478ce16c03f7f477493d171357f8f0cec4f5dd626e5d17f04cd4294d49f23e9e979588afef2a227cf645c43bde4aefed32d9bdccd1a7fb262017bd8ef17d7704b8a7d70b5d59d9bf29d60e8e25eaeaa15eccc85697bf2195e0197d7718c082be8663f7145c72df11b992bf7739b887725fe293fb1207a7076f4747cb75fb389ccbf2ab93f7b7c8553cad2b24bfd3e75782f7e8f532fe1cdedbb2650bffc8c783ace1fc3a825f47f2f7af26deb277354f4fd20e89face387a4665bb9c635f0deefd362c6c6d9bcfd6b6713d1e70641079668de2d71cb93ed6689f5ee79194e9658df1da9bb0b37876d253c47b9df8efd728da4d6b603714f7528e732db887b6b00edcdbe9f7aae6c8dd8bc709169fcb698df37218c557b0097f1967f7f4db558a36c375b072815dc03122f1bb988f77bceff9789fcd6d07f7c29e6a837fdb9cf416e31bed809eb57db813c03b32792602796c5e7a8b3896cfc1b2f2bcefcbe6de5a937df9301bc89368d9146d972b243ae482df800ea9cabb98f596b0f129c96344ebb4a91a18ad38c6000d5d6a03ac44fa0f445b46635e348b5d045622698a98355f23cd7a002b913e0b3a1707c6793cae8bd669d4dfc1fe517a6fdb7e3f31de28f237cebc558b8ff75a7c9e9305e6db587c5cca12f36d6c79d6f2f26d1de8a4d7bf9b627a7c0e867508bf8af912d712ef1808f7c3b1c640e2a51593df0207b36f19b027fabb8855b7136f9b7abba3ef00e11bf8f8ba554870ff21e285587175b13c9fad7971782c41bee3fd4291eb7cf25fc7e5e77dd2161fbfb516c690add4b9ef32dcb90ecaf3a5c5bf8d5cef4beb7a27ad81a25d71681c1cce4fe4061fce0d0ece2051a7f231ece8bc56bf6d08eceae01b3e37d55ae2e30b6b37dd48bcf5c38d485af49ba509e4afe81b88d16e12320f14ed98c392b38998f65e21c78cfa133127ea62706f73bf9f68c70a9bc6b887e5b23c8eed2e4f80b7157178a3d84db8ac37136f8c76b3233b550dbe67893a588c3f6ef0fd2ec60ec59c60e1d3e2e9c3e7645b3c46b5c458e02dc4ebd36ed1e72e661e1f45a4b1b47564f298224e8ec642b7729dae03f736d743443d20daea627cf17a2ed32c2f5ee436fefb0de05e7c97489ddc1ee8982c5f6b01562269b671741d2aca04b7374b8c59deeee244c47c3dd9dce7583289f6ff1dc46bd377f0b4d7385843c55c376137c7c6d6c1e2b66e71dbb6c4bc3b911f605e48b4ed2ffad837bad8519b02e37beb459c20fa34d7022cdf9accc89d404ef1ec6e80bfc927c3ddde7423f7106f7bf01e8797e1622e466bef77917b89b75d77af8fe7fbf8ef37827b1b6f189fff35ec6b9e778478cbc1fd400f7f9af773cc9bf837c73998fbf3f53ffbbfcf9ff3f1498b8f2f59a7faf0ee92e4c95d29cc13e1dfe2d84e44ccf71c03ee419b46e81dfdfd6ef03be590b7f72c3e6e6489f11dd12f9e267da37a081f752c9733c9b5f0d6190ebe677da59dcf23329de723c4bc355e460918e3929651310793f3629dedea90cfedd53a8ba7b19ea7c1e37deb1ce7defa5a2d4db2af37efd83dc85bb20f4f4ff4198a7112b196e88004d389c5231f87b044bfd2032e16fb77327ef47ce7ddb15bf9fd058e1e23f93cdf91cfe318166f03908e31d23ecdc11b55cf793e4ab4a378ffabc5e3288ba71fed0f799078e3cb07f9efb29820967e9710af2daf2555cb77acefaf70def5afdf1ef5b6f33c47c4cfbc6fd4e2fd8f16ef2f893c4ebcb1cde331f4e0b6685d1adb462cd1afb413e4ff4e47ae1cd1ffcd79b4b681dfe11c19314ff96180f130c778dff7ed23c43b4fe811f03eec8b7f985f1f02980f3998a3fbfa301fe5dfde0ceec5fb10937f3f86eb6589fe4bdec766f1f84adab725dac6a2ef7b36f1d637e2775ea6adebe5bf5b621d453be4fbab816ef0f71bbdef456de116704fbf97b589b78134853f17b897f1eb2dee77e345fbf4e6046d08e253591e23de79a98f39bc8f15e3c5b7a6306d11c3f2d84f94952a362bf83a0fdc6b969d9871ab184fbd20790ceb0e809548ff9558ff2162822788376e7bc2c9877122c614f59888cfeef3e2449e275ebf29fc772cce76c496d5e2f140e449e28db59fe4b27deee0e68a32ced76a580fa42e6d56c7089ff234f1ce1b78dac7c153c41b773de77b5fccd1efc0ef9ff571feaca3572e9f236e3d48aad691e2bddae0dff4fa0c78f68c83734026900ba6fb0cf18e118af7451b50c49d7138f2e00a5ff1900fe30e370fc6f239b616f7d7a2ee15fc59222e3d5c4d8e9876fe8884435bd7f162de3fe7c4dae9ca395ec4c38ffa7e8b9796f0af2ff8ecf5059e26dfff68bcb04f618b37c7c1f7b7f15f24de36fe8b0efe0431e7750cf80eb4f12708fe1f239e183e1adfbfc4df173e7718784eaf2ffbece6659eaec07ddc8b5b65acf055e22d1faff2eb6b404e28cf6bfc5e8c03dfe67bde1ad8dd13be6f5f71f333da5679c52b9725fa7f44fdf624bf3e959c1e31db70f1f238965d3d4ba4ed9889dcff4d12f92eece9e9386925d8a69824fa81851ff3b529e2a613abceabe5e3f475e2f5857cedcda4d7bdefb1ef12e90b127b4b88353347827b1b77720eb0ad4470abf1efc498c1f3be3c89957f625d15dfa3c0026baf8e1fce9ff13266bdcce57ccb9527c2d716a1ed4dface9b71e4e7edefc8dbc4eb9bde76f4caebebe0e689763a2f2b64766c5ceb351ffe3b1cff76704f7f97eced608971e3b7bc189ef9f81b39cebbeef7d139edbc2d6dbde9fe763cdfa3c07a157c47efdf00fa803845b92cf2f6977f9dea14d13720dadba7c6e1ed1d07c7bf2e71cadb8a38ef3a3862dda2f5be732fd62d5a621d9798abfa01e7e53d2f0f165ff314791fd8dd7be0197dd7bf26318e6cd2677c4d41e4039f1d7ee0e83f95b7ffa78a3a45d8e1c6d86989f7221f82f7445a1fb9cfa275e8c740cf8fc0337afd84cb7607b8b765cb1feec3fd94bfb703a44daf9ff1e777827be06b229f136fbf96c0fb12c8f4b993e63461e31ff9d2f882b86b29aa3bdbbd7978f802607d0a9e090cf12d489f5de9f3bb781efcee4d335e1ec42c37629dce57be7cff8a737bab93e60c517e45fe0bd9bf21ded884736a7dc27fff9678ebe46fc177f42ad6605d0aeeed74a76ff6be27dadc91eff9fb77837b7afd813fbfc727df0f3e39eff53e67efd5f67e13d541ccc3bcc9fb3cda3ff09957b758ed1bf4dbfbe2a42dfa1478d966f54aacbc6ee7e3f566706ff33a4bd4239ff3eb97fcf71fbd65c6e236695d0f7ea7d79f88d73fc5b383af12b483ef7c76f09d23efcc2ddef7c2600711b12e4cd68f93263b10e51ab693451f77dc3c137992649e1d38217c7916e555d62ed6cdb3b60e2fc50ff0dfbff5e9f92b920f7c3d64e4375f3efc06bea3d7df7df9f0bb93de412f7bdf8be6c31fbe7ce06bae227f22f9f0a74fce7bbdcf53ea437ddf477e56f85e324f2302d605aae66334ed6b93fbde6f0791bf7cf9f00bf1ce45fbc5c9b739a2bfa7137ffe377fef72704f7f1fecc3b918dc0bf985eedf7b658cfc87d81c2f5bd48dc07c61f7e23b7a6f796d8edddbb21f3ccefb9ed03523e2b5b90cbeb63023436e7319193e39eff53e0f8ccdc9beff47cf6633aa69d8ac483b499b4db5cd6788b11761f3fffa6cf55fc76ee68ab9cddce633aa7b6d9edd439b97e108fd45bd98c9bf056b0cd9bf697a7cbec4dcad406fd9bbf45a033cabc1bfe7fbd0cc7d1fa48bbc3b4f8c23f03a39a329975dec61d4c9f7fc01073bfa1d8fbd2c1e5764803e916879a94de4e559e855c76bb31975c077f45a9778cb33dfdbb7a0a5f7bd6879ae47bce599cfd3cda84fe4e5b9be4fce7bbdcf53599e33c418d50c1c33dd65bc9f683ff1bd1d331a90dda78c37706ca590701cd10f192f46e5f59425e21311d788b6c84a9f0d35446c9cfbcf8c463e3b6804bea3d7c63e1b6fcce5fedbfb5ed4c6f7f0d9385fa39dd104b1f1263e39eff53e4f691b43ec41310bc74cb78d27dbd60d9a3d27dcd616631abef83d5a47fde67e5f25661731db11e0deb6c523327dd8fcbb8c665e1933f83afc68ecbf0edcdb38257cfd6309dffff9f0dfbddf89753851dd3720dc0add92b5a1dff4be8fea9de4f7d1b1b644eb8e665e9c685bc9e773a2eb1dfef27e2f62fc689b4ac42997827b3b7f162ef3be178d8f44ac7f37b8b712689b093915da66ffdff2d6bf5e4fd54f44d34bd2cff8cbb0b29ffb4df3fb5ff5bedfddf48f9675be5e33a339ff7d3bb8a757cb2d43a29d5bf1b2370db43dcdcb61dcf6740de28d4d6a38e9946df1be1786f674b40ffa471733faec27c0a5e07f0278ff7f7511fe7d3b4dfd7f52fbde5f17b2b6bcccc6799d176db3af02f7e23b7aade9b371de165fbac6fb5ed4c6455bf16e704faff1da98424e8536e6ff77db52b50dcf5af358ef63be58a4f7bfba68d7f0d74ef3fbffe7fc7bda8ca07d6589f51eff7abf43e30351ff136ff94a343ea8dce17d2f0cf181a857e09922ffaffd3158a310dd6f03c44eff2b9b6adffbfb732cb1579d7f0e83bf7f11896f68d161bf2719dfac9ae37d6f57c437da7318fe5746939ec3f1bff2e8fd5ef46946e718c3f90d36cfc5beb345e3f6c3cad64058fcb7c7d4bfcd68c1e5590beee9b5257fbe0edcd33edbd71db9693386618ee0d72762a72d7023a26e6ec5f14f03f7f4f70c80477fdf8c634ad3d9d3a7cf9ede7423222688b50ffa8bfc5de1eb844d3f08eee915ecd31311feb18dfb2c83ef0994b137f1f85ad1679ed116bcdb16bc4baf99fc9b23c0bd2dcf51affbb0c577edbc76c7eea95c35f87d7bfe3b5f1b23e6a06680753319edc1337aedc8bf7918dcdb321cc9e71f1f7523925627fedd76700fd3eccc7fdf09eea96e45def733baf0f71e01f7826388f3a80fc7275706588f9621f60078218ebd725e45b965f7a0dc1e99e9d5291e5eac79a9919afc2ad623bccfd3dc8778ea6e764f7f4f741db098bb2674176b2cb6837bfaded7c9cb2efc5624de59bcb1f4afefe8d247ec83c3cf9d8ec43bcf5436ceca63ca8caec4ebbfba3ab6b196af7f5a379ca7c1f7b88ef0f1ce8818d7ece7e53e6abbfd812df17d81220dc1b3fefc5923f75984efd91d69ece6db09627f1aee3f2d78ae5d0cbd22bc3d91d1cd97977c2d404677200bdfdb36a3878f8b1e0e17ebb639b21c23f6dce77dc011e18b5bbaf26eac27972322ea8f0d889cd93e39f9feb8193d819c7caf948c3e3e39fb38721e33c127a7f0e97b79e50d7c9e25c085c5cff9cbe8059e099bee5d95b3486bf01dc887e8ef6d0086ec7751371def7b2eea95be3e99fb82bca90dfe9d001f31fd88888f32d53122ed78fa1bf93da8d32cbeae2063a09b8f27e78067f47d51ef0de0ba3ec6d312f5f4208027ea9afd809ce2bdc18093c100935e87106f7d3ec4b1ed0d7f7b658f7e379478eb73be0f6fc6305f1919c671e60059019fec1eb6e3f6f3e921ce47bc18dcdb78c73de070b5e16544bee15ef9a2bfefe7fb5db43744591c01b8f4638ef07e23b0a2baec473c757054b621204d0c7bb81c3b1e0f228d280ec877f12c2adf60af7cebbff7e609db7726d9f221f32ffcdcaf8c913cddb3c0bd2dfbf17c2f01b11e87ad3f8be5af385e84ef69121171d8288eff38b8a7d71ce2896b337ceb193346f3df57807b5bae132a7d38637c38637cbc8e259e3657f4bbb1402ffafb130eef279ce0d5279ede529fd2995f79cc19e1f3ab22627ed5389ee679e0dee2f5057d1ee39cc388986798cbdf3d19dcd3ab18bb5f07ee6dde36e63bfa6d14f324782c1bd9c7872bcefdf6d783603fd48c3ca04f6df0bb95783d185dc716e75c97c8be3efdc673f94e01f7f4bd6e6e1a278b3304f91efe19e21cf975e0dee6e4c485cefb2789fdf4c43941a26ecd03baf4f4c931c9278738bf5db24e34d2c3cb9b58139a21ce02176b84645c8bf4c0deb019e2acf038fc67e4a780ff5e89e91de9e3a6718ab00f7efe40c64420d3447e9deccb93c94e9e6c6aed7d2fae7c3ca688f493e4597f9fec537cb24fd93df34cca53079fbcd3b91ed7817b9bff93459f89989bd7de95e3e4abbc5811d12f70aba22c62cd096f7744fb4a66106f5f09df333832c89561b318c711f157d724b8e8e34b77962f5dbeae246326b025119b803895fd4eaf227ef6f7d180b5e719b3c1bbf43a877863ba390eff9bd7f8b0c57707136f4cc7f7398ef69b88f3a0fd7d34e04cec8c43c0337a9d47bc7d34f31c194e5dcbb9ce47d22a20deb8bec097e67ce2eda399cf75abe57d3fa39078fb680a01c710e7511f8e4fae8c22a023ef078a80f68eb48f86f31a8d13441b87c75fa7ecf4ea140f4f6a67c20e8a811df1782ea304c85cc2af0b103b5a08de5d08dea5d7529f1d953a1c9dfebe0f5b7c77a8cf8ef859bf119177e2ac5fbf1d81b37e33168167f42acea67d18dcdb329cc6f753397d0792963863763bb887698a33667782fb6a008fbf9fb10cc8b60c704eafe26cd527c13d4d43d894381bf51c705fadaacc1915200d7e66686420896d63626f8d31e01ed8d869a25f64486278de67d52d769edc38524c0ac83292cd3aa9693437834c25a3ecd87f3a29224bc912fb5fa3eceb62fb3fe74e3c175f76239971be6163e46c74cffed385255b4956db9f163b67984db36f2aec47c5f6fb1423d7fea692f421bd19f662fbb7421ba79c949152329fb4627bd58bd447b1bf0bec374a19e853195592b8b34a1254b832fbbf62fbb34afb432a6485fd7cacfd6489fd7fb9fdacd0be9f605fe957f3482f32dbfecf8b32c34eb68c2cb7eff2edbf9731bc79b6d855df8ca7d2c1f653ff37536dcc254cbac5f61341e832fbbe8c49388dfdbd82495acca4cfb59f55dacfa8360bc848fbba8aa55655f772fbdfb234f3396572190f567a6eb1a3004536e5d8da50e9b3992dfe2f4776458eb0e1a7a7329c62582d9b452f2756c989ff71e838193aa896cb317a31ca2ccfb3de249b8dbb4dadc2a0ba8e553594dbb7c3777fd237a62e72666876efc534707378eca06e6f9e7dd88d3755f7aad68764b350ad751cd562114bf1b2d869752a2a54af5ead2715d44fbf25a39f0d5d4d4b23fdce7ba5ec3df50ca8c12a3f6f06b0a3edf26daf96072acfe94cf832269a5f190abd847942f1af62fbabd1b63ac5ecbd0af4973136e2523be14a5225b77b52d16ab20cab5a1dc7531acbb2882ccb58049fbf4b4accec38de529e69b5a25ab89996cd62ac96314c1b4b8b055fd57904260adf65ff0d2fe9faf157cd8fda38c02a697b59edd79e98d7eca20ed31bdc73dbe425f9a77df97175797ed561f9958c14588e65c872ac4eba0b59fc5a25567ed58deae5e617fd23e7b01e62f3f164c018ac2663b06eba6d9efeb694a114d8efaa734887c4bbfa1d959cc0068811c61701a3b0ba84c29e94c28612a948f5da3ea9a84008720d59e6d4db35557872c64dfbf95af828a88e1a77e39835b0aa69d794b1c72644ce33ca9e68594eb39b10e3eddf0aecf78b59984a9fe7d9880576da146f044bc16d8d7abf88cd2c9d81d1ddcfac94d5268cd58ea09dac2b19c6782d09e33da9bd36959801f371fec2d0182f0cb5b162d64cb798d5c1909beb22d7c5905be822d7c3905bea22d797151b36ef674e5a8a8ddb2123fe35d2fe76a1adcc0ad6ca5e6e7f2febc0895d5c5a255c5cf664c52593c8ba95d424c28a490359ded1877bc984f467dd9e78d635c4805b6b0237c2acad8daeb535c644de5b53e43d3091dbea8adc0413395353e4a618703b4de066b222cd8c25bd6d51a7494671d423093af2d636e130b903c19a86b165c08a6c7359d6501f4cab55dd9aad852c7b1aa53b7b7298279b9f64f674a2662ae101cfa2ce4816c59303cba296b22ca246de05b31c7f1675c0b3a81596ff5929c8ff3d31f07d5200be1746cbbe29a0a5b5cc72994b5f64d472a7dbcf9cc193d1ecd752d6e3ee622e65f73435d1a310eb0b6abf13ed6b912d219525b6a5778dea0cfa57586d4327d198958c4f6376fed444ba59bab382655e18ac20b691591cad79e90413ad9a776f0c395b17b92d86dc5317391343eea58bdc4e864c1bbd74e0be4ab72d6d9b4db67373aafda894b5e28aaaa656134fad3de6a4faa4c04975c0c0fba600bca30c9cf24a2750e984559d64de8f4587b38d7a3f6f33be0fab33692f7901f8971875f437e1fbc4f16efd65de8d05a66d89bf034135e5018978af81cc7be9278679a7ce98350cd2b4862e980def97021bcec2bcc8605d2fb20f863c4417795f8c90a12920a4ab0c9c86357486bf6e58d30d03df3f05e0dd315a86a780961e3270dabf3522fab20bfe9ffda70a783d1c3c1b937ca444f2df73234a92f7c4ec7094ae1df6c2907374917b4b90b359637b1d496f57997cbed3585b2d9ada64bbd974287126aa548dfdc48497a9f6b5844951cc0763e3cf938a5d998c2692ca8435a54793c4676d99d782ce568bb0da87ae91c8b26829c222619934ea91b3bcee1bc7520f1637583dda07f334b9124ff3bacc8dc5f0347db1227b806e91ed2743a64576bcc4567b525ba54b27eab07abf4a3ae3f074fa4bd2c9661d3d87ef52d7e00ca551bc123605d1c19b645f2bc94a66aa8bc00c8c7cfb9d723b8d624f88959c33a0cb1bdaf85b25c4f9232f0e9358711896407130a915560006c82c8936a0e8ba8e2acd2fda3b3595e4d9c87359313c8c3da62c39b95bca5e2d2587b3c0d6994da8d23c1b2893860ee5d0d51c71c3da2638f0200c788a26f07e58199faa5bc607cb90ebb162a71f610dc1c4ced7157b28e651a74b3ceadf969a471d8681cf9080df135103df1f2b0a3313b19118563d1c039e252b63b43d3e8a4ddfc8b4ff5f6a7f417b8f0b58e9cf6495a1eb0d32edb25e6aff8b56d8ddc0fb4bed379cd9bb2a728ec08ce2405da31889e5db41927cfb5931df4661e0b325e0e332d4c073b0bc9b23cbbb5e844467012ee4759bd71b66b2a67e269b3abf9c7760d19cab60f99a498eb09b1047dad74afbed4c560f94b1dfe8bf694e535fab92a7a331f90f96c95f07c89f07245449710ce6b70e91f82d4bd16f8d9581d3c0672e41029f792499c0671c465b818c36da573cda0e5f68e4ba9cbd3f8d19407134562e4a5105992b912b9b8d192d21bb3220a3ad05bad0a082fddb0d5168daee14569dc08bae21f3075ee28f3cf0a2abd2b2acde247ee0950ae9b100eb00cca916499caaa5e254c7cb90695928c6ca424952656102e65f1748fc2b9d65abe25f27ca0c9a8d532edba5068d17d7a90c9b166bfdd6045d5896e1ef5a6003a97d1330db54c9d8d5a21e87be5fc899aba09e9a4e559b6f8b4d851ec586b329f9acbcc90b5c292b70e9941c2b749330933d5462b2e3144d76b20c9c9aec22496ef6dc9315736582fdf294e2f2e4c98a101b302fdfa545288721a4a31895c98a111bd5ef9f8031a652ceb66c84b282d52045bc0671eaa9b61675fae52c4628b69fd35a06feded5aacf8a50851d409533c4692c082cb76559c0e26d79a15bcc0a5dbaf5c40ade14ace02d9114bcd7150bde54193835f4a5b282d79a916e303bfc922fc6259f860501cb24418052cb2a1f23fc3009e1d56aa8113e1d13bb5c57ec1998d81512b1d72b8a3d1303af9480e7d754039f2503a7ee7d39d1eb25381003a63b29556972d0e900a2ad58e8eb2d984f8a411f40117bb2dafe9bae432b6410996c7da99826af22e54118b72b25dcb654e4763646c12a4d6ee7c880a979ae4e0438c670f9c132601a831f4e90189ceef7a01e831f82d1be4642fb558ab4cf9581d3627ea46e319f87211fa58b5c80211fad8b3c1f435eab8b5c8865e23a4926d6aaad96894518f83112f0398ae0c532705ade8e95f9a64e848ed4bba1aed38476fbb60aec866825f33c99b673734291224f1f59099bdee5749ca894f3124ccef532399ded2ce862205ab717b07e549ae2643b925749750146fd7112eacf54a47e2106be4102febd227829c6d7f132be5ac6c9d722b686c47ddacb7eaac2e3a1983427c8a4a1b76ebea9a4b308a374a384d26d75d4282dc3943851a6049d71ebd0b79f4dd924d6e95bc0b7e258c1aa71751a1763129c2493807ab609d1c0202fc9b0600946e92609a56f2b52ba14f3c827eb7ae46598d8a7c89c665d35b10fc3c43e5557ec7219328d3a361324eaa03beeab471d15583aa763e99c91543a95185367ea32b51ccbe0b324193cae9e5a06afc0c0cf9680af57045f89819f23017f5a117c1506be4502deb1be1af86a0cfc5c09789922f8e118f87912f0ad8ae04760e0e74bc06f54045f8319f905ba467e2426f68512b15b375013fb284cec8b74c53e5a829ccd965da473c1987f069cda8231ba7374620b72b712f942b178e9633d6d6b65f9426be84b64222954e5eb306bba54624d5f2b16826330f0cb24e0458aa67a2c06be4d02be59117c3d067eb904bc654335f0e3b0ccbc4233333760c05712492cd88d59e75256c668385fcc76995ac2feb584edf457cc262f1430db773b9cc4e405ba6d5926b7de726ed365b6b5f7b09faa487d3c26f55532a9a9cba07ddb6edcec34259d66886c6e6926e9c2a3ee2e4a729d80d9c0d5121bb847d1c036624a5fa3690327cafc2c5b84566ad4cf627389f359273add66b08459cae2142f6dbc36619fbc9df964ba94c19cac98ff3e4996dd34b6be8e20b1f5f5f6ff75a8c84ab1f526cc666f90d8ec1045bf7532067ea3047c9e22f82918f84d12f04d8ae0a7cac069587333d10c6b366362df2211bb6f2335b14fc3c4be5557ecd365c8f4fddb12713f31bac8cfc00cfd76ccd0ef20c93422cfc4fce70e4dff7916064c7753954ea19b1ded12737a6f0e56acffcec64ce82e89095da06842e760e0774bc05f5604df8265f63d5866df9b54669f8b59eb7d9ad67a1e067cbf26f0f998153da0699e1760c00f6a025f2803a6794fb718f74fe4a4002a13392fc2acf0618915fedd58cd0a2f9681532fb993687ac9ad98d88f48c46ebd879ad89760e08f4ac0872b825f8a95ccc7b092f9785225f332cc1ce9413d55bc255d933dd7fe8f0e42d2e1e905248f455074b2f32af6cb32d6daa031bc8aed6ec3a47852264593a8143dedbf17136778c399e891bc0c9763323c2593610f2e431ffbff42164fd36f56d97f272fc11598044fcb24a805f2822e45a211af4a6a5762e6fb8cc47ceb355133dfab30f37d1633dfe79232dfab31a7f7bcc4e965283abd6b30865e9030f4b82243d762e02f4ac03f5704df8e81bf24cbdba66ae0d7c9c069debe8ce5ed2b49e5edf558717835966bea9d62d7740326c56bb15d53af14baa61b31195e8fe59afaa6d035dd8449f0463cd73493a5a7b66ce266cc7cdf9498efeb8ae67b0b66be6f61e6fb7652e67b2b46d93b442fd0bb0d63e75d093b45cdd4d8b91d63e73d8c9df79362e70e4c890f244adca3a8c40e8cfa0f35a9bf1393fa2389d44d9bab497d1746fdc718f59f2445fddd98129f4a94b85551897b30f0cf24e02f2b82df8b817f2e01ff5d11fc3e8cfe2f30fabf4c8afefb31e3fc8ac4a8d6faa4b85a7b0093e26b99146eb5d63b85d5da83980cdfc86410d55abf14566b0f61127c2b93a03671abb5d16ccc64a9e2bc9b873103fe4e62c03b5ba819f04ecc80bfc70cf887a40cf8114c891f254a0c69a9a6c4a318f84f12f00b14c11f9381d3eca2a796ebd40b8f6352ff2291ba5e2b35a99f9081d3ee915f8966f7c89398d8bf49c4eeab28f65318d9bfcbca169dbb147b665dbefdea3236f76d01f33be56ce2a9b30cab888d59e611e7240567017681fdb4882dcd5ec8ee85df2c20f3f988622f36a228166faf26cea6da996c44df394e2b938d2615f125fd8bd8930af6563140968f5996f2b15738caa93a41f6692c83fe9064508e62063d8381ff29015fa808feac0c9c3aa3bf3067f47752cee8394c897f640ceda9a6c4f318f8bf12f02c45f01764e0b4b0fe9788338ad175fda204389bed35ba6b0690ab6e0d95da0164ba2b416203c896156f00595f566c00f925cc962296a4b429dad2cb32705a4564589a55c42b1872355de457b1faa1ba2c3f159ce66b32fbcfa40f4b7689fdeb6cda16e7a8b4842dbf26b3fc7d6358beded672f29c781d339e5abac6f306663cb5358de74dac98d69114d307f6522ba66f6152d7b5242111ad2d47b08656315b33215b6d93c9c2a54cc589516f6372d493c941377d51c37f07c3afaf993bef62c00d648253fba1bb4fe7b398701119c38c98c6650b9523b1f7642953bb6828b18b59add5ece27d4cad469a7c7d8049dd582275591b35a93fc4a4de03cb0c31cdc2098dbdd31155d4fa084bb9892c65da71e09c1d991d3d4c2a3bba01d064bb6c1511d505341f6312349549d0422ac104f6af4ab662dd694024b73eea134c96663259f64a5096aaa70da9c8f4296678cd2586b7696f35c3fb0c53b8856671f91c036ea909fc0506dc4a13f84b8ce73d253c6f57e4f92b0c7c2f09f8b2b66ae05f6394b4d6a4e41b1930f53e6d12018ed1aefa56064c2be9bd2da449dbd64aa649fb1d467ba684f671edd468ff1e53a21da644fba494f80153a2834489131495f81103ef2801bfb5bd1af84f98617692b953ba79c55402b7252962e1ba70e459641f56e12de17f7b67db67b23ba7fae9c6b679a0bf08975bc166e36732c7ec2e7776faa7e8c2dd65c43b375ea443fba59c2ab624eace3399332f529cd9f833c645671917749b63b8af9e13b0ba15acbbf4782593b08cb82b661df9a8ccf1107adb6fabae50f80533982e1283a9a66830bf62452a0b2b52fb2455a47ec394d857a24496a212bf6339dd5596d37421aebcb77536efa7a52b3c6843c5d9a128569e66c5fc751f361bd7e9a175edda5b029632cb10bdb1dedf2a995d554a4ad17c26e152d097eb602fe50d5d15fbfa43c61e3dbba19ba57f76c39f1878f71480ff2503a776d2c3d2dfb6f86f0c3c3b05e0ffc8c0e901763d2d829f0ae74fa0339ec0bf5802bd5294c07f58c6f64e41c6120b01ef9302700b03ef9b02f0880c9cfab97e123ff77747353f978181f79780ef5004af86d1324042cb334f3f3d548596ea98e4032592e7755293bc06063e4802de5411bca60c9c7603eea7db0d580b137bb044eccd8a62d79681d3f787a4c07bd5c1c0874ac02d45f0ba182dc364f1b1222df53023df3f0565bf3e063e3c05e00d305a464868795d91968658868e4c81b534c2c047a500bc31464b8e84967a9dd568d903031f2deb8154046f82818f9180af51046f8a79adb1ba5eab1926f638991d2a8add1c33955c89a9a8ce886f81497e80ac6a5694bc2526f9f81418792b4cf209b2beac2e6a92ef89814f9480ef5404df0ba365520a6a8ad698e4932592afcf5293bc0d069e27016fa408be37063e45025e6b1f35f0b618f8545905aa287926063e4d023e4451f2761878beccce15c1db63a6383d0525b40356f5cf4841d5df11a365a684967c455a3a49c0b3dbd9b716dd91375d3be34c27ce81547decd4c5c9ca6abbe3cc92f45765b323785b55d12391d40eb4f1e801036cb5e9ef36a91df7b5cbbefdff4efbffa65d09b647f64116ed3b4b2e4df40456cc00664b0ca0f5be6a06d005039f23011fa7089e85811f2c01af5404df072b7487a4a0d0ed8b81cf9582afdd5f05bc2b46cb3c092d5b1469e98639ba0289a38b283abaee98e4f32592dfa328790f0cbc5002feb9227836065e246b29745503ef8981174bc0072a82f7c232b44492a1d51433b43726f90289e4731425ef83812f94803fa008de57064efbb94b2d49af3fedfba4d3c216b1a91b2bd958933b675b7de7d37e58ea87ca52a7ab2fc44c1e677c8d7ea3925e7f8cca45b2e6a2229503300b2b4b416c3410937cb144f28f15251f84812f9145d2ddd4c0f7c3c0974ac07314c10763e0cb24e01728820f9181d3cdcb0eb3129847b015071e8a495d2e91faedee6a520fc3ccb0220566b83f2679a5ace592ad26f970cc1b2c977903bb110d7c4f111bbb2b64e37b45d1bde4e87505fba4948df8b947f2b9a3cece24ef723bce54f12423305957c864a5316d8eed3185f75249692496d24a594a0dd97b4b988ea53607d447d2d8780afb597526cd282cbb5749b2bb694fb5eccec1145b2d53ac9d27bb6367a47f7e610111d30654941f8dc9773856353a03df624e9ddefcb93118f54748a89fa048fd580c7c8d043caf971af8388cb72365bcedebc9d7092ce72a89b3f8aa9ce51dcd41ba1ea382cd461773a045ae7b73da2dec2a5ce762121f851531f7d04159615349fb002ceda3312b734e909e9b929310c663a9af95a54e1be474f92bdd74279e14f4bd72a23aaf770226cf3a993c4d813cc5d11c99c4273c25bf28782226c5313229ea0229e86473d73654d29c8415c9632545f2f5de6a457232a6d07a994259718aa4bce8d1cca6738056f3e37117b11938cb785dac42451e46c571122ace54a4620a161e6d4841783455064eede3784b73c4681a26f60929103b1feba6d998823ea0e9182727ea723243864cdf3f2991f83cc63cdf9998016e921860513f35039c85819f2c01ff5911fc408cec5374c93e0823fb544db26763c09b3581e7c880e9acccd3a23ff866659e6e25332bf3602c43cf9064e8b2fe6a197a08e6b9cf8cefb99d43e9bbf01058ac85775a206246259d63e9ced274e64ec273b0d58299b998b4676181543e0bd8fda76f27d34e9a8779c8b353e0210bb03c3e4792c73b15f3783e06be4502de72801a78219625e7cab2c459a7244c446c6050062a777a3f9f45b94eaca792454598a2e7c97a0f14152dc6c0cf97359814c14b30f00b24e0eb15c11760e017ca423f45f08558b1b848522c5407324a31c92f9648feb9a2e48762e05b25e03d07aa812fc2c02f91806f52042fc3cadca558ab2a5e992be483c4d439aa97bbc598b2974994fd5d51d92518f83609f8ad8ae04b31f0cb25e0ad07a9812fc3c0af90800f57043f0c03bf52023e4f11bc1c0bf3aed20df32a30b1af96e5a6a2d89518f83512f05afba9812fc7c0af9580e72b82afc0c0b74bc0572982afc402d5ebb040f5faa402d555985bba018bcec4be73226a4cbe4b653596f68db2b41b10b74bc58962e95c98b2a4e2c2c3b1acbb4992753983d5b2ee084cad9b656a39c7098bf07c2529f0ad82f706c16a3e7e0d26c92d3249e8ed88681ca792ce91583c716b0ac2eca3b0bcba4d92575b14f3ea68193815e6f6441a9add71e0b5182577a480927518253b6451d050354a8ec13ccf9d98e7b92b29cf732c565fddad5b5fadc77a0feed1ec3d380e13f95e5d913760397a9f24473b0e53cbd1e331f0fb6555ac22f80998a13f900243df8815cf07358be78998d40fa540ea9330be1f96b5dd148be7260c7ca7047c8e62669e8c813f2201dfb1bf1af82918f8a312f00b14c14fc5c01f93809729826fc6c01f97805f355c0dfc340cfc0959ab5311fc740cfc4999b528829f81813f25f32b23d4c0cfc4c09f9665a822f85998237f46d7919f8dd53dcf6ad63de7607c3c27e1e34c453eb66075fef3589dff425275feb998122fca9a4c23d594380f53e2254c89979352e27c4c8957244a6c5354e202cc325fd5b5cc0b31b15f9388fdb3a2d81761e0af4bc0678d5203bf186bc6bc216bc6d0fc849382e0b678cef846397be6ec50e1eef8abd2e0d98a49f426d672cde53b93d3432fe80f745240ae2d5399cc0dc448f9128ce8b764ad2145a22fc58cef6d5de3bb0c738bef68bac56d584ebc9b0870ac839f302eded3e5e20a2c0bdf9764e14ec52cbc1203ff40029e99a3067e1546f68732b36f4afc9b773b1b602fe173b69c59598713d55e8dab31293e9249410f2918c1063afd935666b0bf4bd9bc415519aec168fe584273b7316a345f2b01cfa6b329ac74ae1c835bbf26b772ec1349bd9bdd91ea5175155722a97d6ae3d5a084d13f3dec3f3591a5629f59f2a5628924822d15db8ee5f8e7921c5f365a2dc7af9381b35346b0d0e5cba44297ebb1a2f315566ff90bcd4442079b16b26d7e550acc0d5883fb6b49835b75c8f1464cad6f646a510b1cc566e18a1d8ce9b470c753f5884e642b618564310f117a7b0e05a04ffa28070d376116f4adc4828a147dc6cd5875f59d6e75750b56757faf5975df8af1f183848ff715f9b80d03ff51d6f01dab067e3b666f3fc9ec6d98a71e2c643f94d99e861e024147779710b119df6256d8e8a11295acdf9ffa277a98cd32eeb39c20161e52319f2c2762a2a577b341d76a556cf40ecc8c7ed635a31d18f22fbac8776206faaba681de85f9acdf52d04978b70cbca57dfbbb453725ad0a2e4da0104fe01eac04fc2129019bc7a995807bb112f0a7ac04b427ee2ecf8bc972be46633e71b608a4ff169b06d27ff702762dc6c3d49711de8749f8974c42ca4b296f8eb9bb1d5728a5783f46f8df12c2ebe5aa11fe00a6ce3f32755a3275aa2e42a84a7f728b231ec454fd57a2eae38aaa3e8481ff2733dc03d4c01fc6222d1a7448232d2b924ca4b513f31d9188beef780463282322b1b4f16a0c3d8a495e4d22f97ff61f15c91fc324af2e913c73829ae48f63e03524e0ab14c19fc0c06b4ac06b4d54037f1203af25015fa308fe14065e5b023e5c11fc69ac5aaf13d1acd69fc1aaf5ba11bd6afd598c8f7a123e9e57e4e339ccbfd4c7fc4b83a4fccbf398120d254a144d5653e2050cbc91047c9b22f88b32707afe40e3083d99c8c7506b42579bd0a383697f2d3d752d9ff77510f60b35356ff00b7fef6ad5278405d56378736e1aaf099d532a259c2fc6257f09a3650f092d6f2bd2f23266384d30c3699a94e1bc820512cd2292408292a81218bc8aa13797a1d31f9cb8303b8908ef352c3b5a48b2634b9e5a76bc8e81b79480ffac08fe06c652ab445c5bac738a30e03d3581dfc2e8d84b42c7eb8a74bc8d81b79680cf99a206fe0e06de46e6cb14c1dfc5c0f796807fad08fe1e96996d6565a992c43b2ad3edd94afe784ce78c98b99e0337837d58e6fb5816654ab2e86fc52cfa00cba276b22c72f6aaf19f57aaa2cc875825d11eab243a2455497c84e9d551a617ad25b295f4f818cb944eb272335d2d533e9181d3f73b4b1a3096ac828bd180f954064ec766bac87280763567d93fd4a05cd03f3d9c3f35abe6061db340d2fc0c53689f14b4253fc7b2625f594537532d2bbec0eca8abcc8edc6d1f44d1a75fd0131b56f3ae50b188de75662bd948571971a74c3bfd1aee18bf9abbf8122b61ddb012d63da912f61596a73d5260a45f63799a2dc9d3ab0e54cbd36f30c97ba640f26f31c97bc94281d96a927f8749de5b22b9ea18d4f798e47d2492373a444df21f30c9fb4a2457ddbef9474cf27e320f50a026f94f5879ea8f95a7014995a79f318606a680a15f308606c9a2df2235867ec57ce47e321fd982c49bdde45f32a2e2fd7ec364192c9385de4e8dfa5995747ec7726b480a72eb0f0c7ca804bc9a22f89f18f83009784d45f0bf30f0fd25e0d515c1ffc68c78b8c48877ac5633e27f30c31921331c1a2fc9b690919d039aba2d64fec508182921a0e90a3502fec3b26e540ab2ce1d9bf081e7a400dc9281531a47cbb28e6d1a2e6904aa6444044b718c2cc5e644d66a9ac8cca4829b81fb8b5ab49781493256260945a073a7543b4faa4952c9ee64df5a7673336df3b9f2ed3b3a91407d1ed7b8083d41db4b06aba0a593af722374f255b32a9ac54a1f9b74555d963ff4f680083d6fd42bd20113d7d5bca0f533912a59531dcf9a1a98018c971900ed4c167b9895d80fe7b2a609554a7500b5a62c5d76f084c417cd3b5acd17d5c2949a28538ae614ddbf7721efa811d1046c6db9a749aa28591b9363924c8e8628b962828c4ada756469d3c182c9bae3527531679c9782d6783d193865664a2405c728614637556274ddd6aa195d030c7c9a04bce53a35f0869825e56bf66b37920153d73c3d1160eaea10e0c632e04c0a9790c47867d01e18153365858a5abc1b572d4972ba47132ccd597835a9be28bf2946d9819a9435c3c43f48263edd4ed37b4ea97f272ab568a7395630664b0ac6e38a05a3850c9c3aaf399a83e42d31ce0ed62c71ad30e0436499415da50837dd6dde75b2634f2c3be64ab2e3e963d4b2632f4cb97932e5dc954a6e73c71d9c81e7368b136c9dc6928abaad31890ab05840ecb1219b3f96fc5e1f6d3039e6c78a057aa5649f91bdb1b40b3197293870168e24b3c3485b2ccd22599a70d35a79dac96d9d9b89c52ac5298855da6125a9445292ce5caf5692da63922f4881e41d64e0f4fd858938b718db0a7494b5f4e859bf696de9398b1bca9368e99546e881f65efd7b20edbc4391765eacd4b1765e27196f74337f6b6e1a7973de737a14a6b18dd54aed2793d90894b3c57845129c2e8ac498cf2d65b68c31dba18ae6c9ca879e7e85f9a8c5d8e8dc6c3284219731f4a1766363b4cd681f42cfdeea4b86d97753edff26dbff0f21d9e0cd6136434e4d379b8fdc1d4c92d97ebf0b26f11299c4ada512f7b4ff1bc8feee69cbe5041755a555912a0b73844b258ef0e58d6a8e701f4ce5655848219f4be136e165c1868abafb62ea1e265177e0896aea76c502da72cd80b69b0cb8ad7d5b9108b085b72eba6374544ae8c83f498d8e1e58ee2f97e57e26215177b894858afeee1b79a0094f4f50b1846c4cba1532e9da1311cbd343fb8a58aad399eb2a636edaefd89d4edf69dce139bb5cd26f5424ec8965ce4a49e63ca068abbd30f055b21115c59cef8d1584d59a05a10f56100ed72c087d313a8e90d051eb64353afa61a6b646666afd154d6d345f6457ce9f2c61ad8e3266844efc5d01feadd700ed8fd174a484a6ca4d6a340dc0c08f928d719da2063e1033c9a3354d7210168fafd58cc7f7c3c60fd649c60f5ebdea809f5bcefee24395f183c15802c74812a8d878fa27ef362f9cad92c010ccee8f95d9bdd823533e40a1b69c6d28d683be5eb7077d18867c9c2ef2fe18f2065de4e1587bf4f814b4474760997c826667db488c8f8dba7c8cc2904fd445cec1904fd2451e8d216fd2451e83219fac8b3c16338d53344d631c26f2a9ba22e7ca90e9d0e9e644446e82031f80897c9aaec8e331964fd764790226f219ba224fc490cfd4459e84219fa58b3c19433e5b17390fb3b973346d6e0a26f2165d91a7623677aea6cd4dc380cfd304cec7b8385f978be95864798166643903abb62f4c41b53d13e3e3225d3e66617c5cacc9c78132e04cfb766b42b68137fe0ec28cee124da39b8d015faa093c07cbbdcb7473ef602cf7b669e6de2158ee5dae997b733192afd024791e067ca5267001967b57e9e6de7c2cf7aed6ccbd422cf7aed1ccbd228ce46b35492ec680b76b029760b9779d6eee2d902067d323d0ac4389c991a4e97c5bc3d56474745b318a29eb8ca76334d8fb62d46822db61cde95f8a3dbe747d22793116676c21961737e8e645a90c796ffbf6c64444de8e031f8ad9e54d9a76b90803be5913b80c2bfbb76896fdc558eeddaa9b7b4b302e6ed3e46229067cbb26f0328c8b3b74b9380c43dea18b5c8e9171a726191518f05d9ac0955853eb6ecda6d6724ce27b34255e81497cafa6c42b3189efd394781526f1fd9a12afc6801fd0043e1ca3e2414d2a8ec0247e4853e23558d3f0e114340d8fc4e8d8a949c751181d8f68d27134e6e21ed575716b31a21f4b01d1eb30b11fd715fb184cec275220f6b198d84fea8abd1e437e4a17f9388c90a75340c8064cec6774c53e1e437e5617f904ac903fa759c83762c0cf6b029f8801bfa0097c1206fca226f0260cf8254de09331e09735814f9101d309cdaf44f497f09c8a81bf9a02f0cd3270ba1ce235fb8776127069029df1044ec3a47f3d05d29f8eb9a73752e09ecec09cc89bba4ee44c0cf92d5de4b364c8742ec8db91aa7341a484c4980b7236662befa4c856cec16ce5dd14d8ca164cfaf75224fdb998f4efa740faf330f00f52007e3ee6173fd4f48b1760527f9402a92fc44ad1c7baa5e8220cf9135de48b31e44f7591b762aef0b314b8c24b30b13fd715fb52ace7fd0bcd9ef7cb3091bfd415791b86fc952ef2e532e436f6edd78990b11507be0263f91b4d96afc4aceedb1458dd5512f0ec7dec5b6b0e31d9af3fc3461bc5dec821e36d117bd857ba1aae00fc2bdffe826e6cb884f5d23b5f88f763f7dd7f17a9bae56d365d686165b2677a693766c8ee1c40821c97f37d84ae3749458ad84a93abb14ae507cd4ae51aacfcfda85bfeaec544fe4953e4ed98c83feb8a7c1d86fc8b2ef2f518f2afbac83760c8bfe922df8865e0ef9a19781326f21fba22df8c21ffa98b7c0b46c65f9a64dc8a89fcb7aec8b76115e03f9a15e0ed5805f8af66057807c6c57fba5cec9021d3da926e8ea63341fe4eacceb632f4ebecbb30a9239a52df8d499d9102a9efc172b15a86662ede8b195ef544f8886178f76122d7d015f97e4ce49a9a223f8001d7d2047e10f374b513018ee1e91ec248aea34bf2c318725d5de49d18723d5de44730e4fabac88f62c80d74911fc3901bea223f8e195d234da37b0213b9b1aec84f62c87be8223f8579e72629f0ce4f63e04d5300fe0cc649335d4e9ec5909beb223f8711d22205843c8fd9754b4dbb7e01e3a3952e1f2f62c87bea22bf8431bd570a987e1913bbb5aed8af6051581bcd28ec558c8fbd53c0c76b98d46d35a57e1d233a5397e83730e476bac86f62c8ed7591dfc2c2b00e9a61d8db98c81d75457e47864c6795764a44e418b34adfc59c5d674d67f71e06dc4513f87d1970a67d9b9510303eabf4032cf7f6d1cdbd0f312ef6d5e4e2238c8bae9a5c7c8c0177d304fe0423b9bb2ec99f6224f7d024f933cce567a7c0e57f8ef1d153978f2f303e7a69f2f125e68b7a6bfaa2af302efae872f13586dc5717f91bcc38faa5c038bec5c0fba700fc3b8c9301ba9c7c8f893d300562ff2003a783e48312b1be18070efd889597fd34cbcb4f18f0604de09fb11c1ca29b83bf60c84375917fc56c63580a6ce3370c7cff1480ff8e71325c97933f30b147a440ec3fb1f23252b3bcfc85493d2a0552ff8d81e7a400fc1f2c2747ebe6e4bf18f2185de4ff3042c6a680103aa022051f9702704b064e39c9d5e52482897d400ac4ce9081d372335eb3dc54c3a49e9002a9ab63e01353005e03cbc949ba395913439eac8b5c4b864cdfcfd36cebd7c6989e9202a6eb60e05353005e17237b9a2ed9f530b1f35320767dac404ed72c900d303e66e8f2d110e363660af8688481cf4a0178638c93037539d90313fba01488dd04b391d99a36d254064c67e2cdc9909cdf4e27b349e6a1f9d3a3ed2424bd6698db3a58d36d359701d30926872402bc15076e210366670725021c638d5e4bcc14e7e99a622b19323b2640b361b627c6c57c4d2ef69201d3f250a83940d01a032ed2046e2303a6b7c51955f78a147faa24501d4f606fcc9f94a4c09fb4c5c017a4003c1333ec85ba86dd0ef31ea59adea3bd0cb8937d7b6822c0314e0eea80012fd204ee88915ca64b7227cc932ed6f4a49d319197e88adc052b8c4b535418b36409d06d969725c2498c6d96f7c15cf5619aae7a5f2c17cb3573b12b968b15bab9d80d13b95253e4ee98db58aee9367a605cacd0e5221be362a526173d312e566972d10b035ead09dc1b033e5c13b80f967b47e8e65e5f2cf7d668e65e3fcc5d1ca9e92efa63f5d4519af5d4002cd2383a0591c6400c7c6d0ac00761e0eb5200be1f067e4c0ac00763e0c7a6007c08566ad6eb969aa158413f4eb3a00fc344dea02bf2fe18f2f1bac8c331324ed024630406bc51137824c6c589ba5c8c92206777b56fade964d71c28359b2f04543b3cea2419c3968f07b6886f53065dc4d7aa8a7689c8802ddbcbc1bcc2c929f00aa3b1cc3f4537f3c760629f9a02b1c762e09b53003e0eabac4fd3acac7365c0745bccd313018eb17be401582e9ea19b8be365c8746ecd9989881c636ecd044ce4b374459e8839cab3351de5248c8b7334b9988c71b145978b3ccc94cfd534e5291817e76972311593f87c4d89a76191f2059a9172be0c38d3bebd302189f13e86e998595ca46b1633b0ded58b357b576762c05b35816761c09768021f8875415d9aa22ea883b0aaeab2145455b331f06d29009f83d9dfe5baf67730e6a2afd074d1876085fc4acd423e1703be4a13781e46f2d5ba2417609d19d7687666ccc744be5657e442ac306e4f51612cc2fa83afd3ec0f2ec624bf3e459297600ef0064d07b800732137a6c0852cc4c06f4a017829668737ebdae1a1987fba45d33f2dc2dcc8ad9a6ea40c03be4d13783146f2edba242fc1fcd31d9afe692926f20e5d9197c93a34bad9b7d65492be0e8d11f65be5b602ab93e8cab833e1ae8cbb585746f32a7ac54e1debc4380c730477a7c0119463197e8f6e865760f5c5bd9af54525d6ccb92f4372a2640ebb75f7781a49e819a8c56412a1c7f1ae64fc2fe2dd4b3dd8d993b9f6ef93ed5f96302ba34fe4675dc84ec6a06fc33ca7b6b894596d81e2c1bfcb312def9769b921aaa5382dd629338bd9bf735969a2da94d89f38652637fae668bb243927c64e655ad0b33657b0b77b707d8ad931cba3eca4a85e14d7cb9e8b40df57930343a267d596db5c173354c829ec10f4f33dc3c629553c0e7c05c6f403983dc1141d9de8f9f10e5b4b6d3f35d7b68d7296e78eb6f96421cb7fbfb4eeb7f8f354d9d34a4ccb07655a0ef369093977f41cc3726c31d3d12fa53787e02fb1ca0afc4a45b35598660fc934db3fa1fc1b61db50112bf3a5cc72f573cefd4545b7d5986e0fcb74ebefd36d22cb9d855c337ab76a97697238a6c94e99269bd2eccfdc6f72ec6b19aba3e9f9d863587dbd98a590b89543ee702d685db29c4501d0ebd1982775beed088cf54764ac8f48a86c4c606c5404c2abadc1f47b54a6df048356459f1ec692a15a39116a294bba941ccecaa1dc932493ab47625a3f26d37a684cad7149a7325de8095e955c47511bd3a7859ca1aae522f9dc3c0ad3eb71995e072a4776d3d82fded84e86e03ccb8bfa8172bb3ea0ad0f9d4830997c3e1ae3e309191fe3d352679baecdd7623a3f89c5296a36206c7882fd5b210382f9ac6a112a9aadc3347b4aa6d97e8866d359f92ce3b189d3fa15ad9619bc141755c90d336d9463308d9e966934c6a0f715b94adf29b0752d63b577ea343d16d3f41999a643ecdbc43d85578302f6ccd18e72328ee572396b0d15da35eeea146ab51ed3ead944da04de746184309de542b9fd2e2d870b62d47e5e8cd469761ca6d97332cd46c5f59c89b50a701f1aabcd9aaca7dc80e9f8bc4cc762c31175a5ed1d690fdc021e31cf6016501a2d8da9692326538b1e8ff1f4828ca7e9bbace5119b217d1e4ec0787851c6c348d487d116d27cfb25513626b05c8f5de3c891529dd31b310d5f926998aba8e14c66d14b901cd915fa9e88e9fbb24cdfa9062dbb2289fa37150c9c8431f04aaaea65c7b78d00b5b279ad36615abd2ad36aaca21d8f66a3104b79b4bbab6df8644cd7d7b01e0ad51c1cc3dea86a8d7eff9a38ae8a7ea760fabd2ed36fb046e458c96ade25b67e25bc9d876b955fe55d159d4ec5747a432dcffcf63982f52750af12af9562b6a6dc8ce9f76622230258f4389af50f15f0b65bd5383eb9e831f918f9344ccbb7b05c5469193b9a8fe591a1fb2b1dd7891d03a72a3e3e1dd3ef6d997e1d49ecbe4f7a6a8c0929cfc0a47c27760fa64a2e4c4b2a174c96b03331addf9569dd1df520f9d13902d01396447bed6984b35c1a5d27378a711626f77b32b907c5f50cb96c0494f6b196d99ebddcd68dce7388ef1d52e503cec6f4791f6b13c42e23b4cd9fc7e2e40a49a494c888098d2f4b52a8e13998861f24d213201f01c965b617db9ba77314640ba6e387583f5c22f555225aa6bbce3a17d3f42399a6e312ca4dff7896530e85debb325fcfc3b4fd58a6edacb8f96ab6ffdff4c8c0f9181b9fc8d89888d6196254bc24da2aa235e232899c8e8c4eef5532bfe0bfa9e87d01a6f7a7d8fc86c4f496cf0748af6e1762ba7d26d36da0621cb09cb5709c511eda1f21dea2ed8c1c1619c8fb26e16f2ada5c8469f3b94c9b7e9ada3833159c130d9df753952b17637a7c91fcac8178ad9f74fad5ad987e5f26525f42eb801a4e634f9d56b8d35b241b23f0da1dfe4b6a2cf2124cd3af649af6f5693a8a69e0f4f3557ada41b82788a545b2f67829a6c5d7898c83abccd00b4edd7f19a6f337329d7bfb749e0e6472671dc336792cdde6a2582a1a6cc334f8169bbb9658bd358ab563693ba9275d5d94865aea724c93ef649a7423de367a9fe8c9b3e23ac196a382f8fbef52dd56bd0293fafb44fa7712955a60c7b6a7d8c8ee89bc2afa5d89e9f7834cbf018afa4d65884b99f71ba1545e92e90fb90ad3e547992e3de3eae232eacf2db7bf2175beea6a4cfa9f305f959cf44edf4031f3dc4bd82854ac110c150daec134f859a64117455b1ac559ad3ae2928cad5c8bc9fa4b2235036448b7664896eded9806bfca343828ca76eac72d45ff74f2331752c3c8751823bf2532e250754c28b1983bb9f67bf27ee27a4ccbdfb1de1b794420d6832d65774b24964ce5968d707a6d591d5d45db1b306dff9069dbce97a77e8da80f71244a95cddd88c9f767227d69556daeaa7776edafea2ce174dbde4d98b67f6173a613f59ad3e27a4d93b39b6ec6f4fa3bb9753dfe11899976e45dcade9e6697890269ad6ba6aff7164cb37f929bc3a7dffbe9e67caafa346fc574fc57a663a7383ec29ddb5ccc24a1ada6d4b4256ec3e4fc2f9171afaabe8cd64fab599ce7970f726c2edebe1dd3875443e662275a57ecaa391977601a59328da6a31a61b104361a94c82c21f59944c97b8d1d180f11190ffb2af020f274091f5b4e950fb8139338432671e7b87ece9c17b80b93b49a4cd20128b7552ddd2bf9321681bbb3624d9497bb315daacb74194d12e9539cc8574b95da77b48c14127ce6bb7a5f627279760fa6670d999e0315e29ec462ecf8682adadc8b695353a68d3f26c0eaa144eba0f4d44df7613ad692e9186f4e86cad844ba6cf27e4cc3da320dc713d5fe2251632d8e96c3d2989ec45f1399e8ad7c00d3b98e4ce7c17175f6f630392b5354644f85a53e88e95417cb47b528cae99da9fa6bd5d6643e714ee631dfaa7f08d3b99e4ce73964d7f65d415e126db1896f5458791863a5be8c157f2b54a4a8d277e56a86d9416ae2c99d98660d649af9c78a55a3e95dd943f208a6694399a6fe7e656cacd8b1f1fea46f1cfd64f50afd4a458347310d1ac93490cf5ba069aacf5b70f4c39ea72a871ec3f46b2cd30f5fed52752650e92e8c061ec7b4da43a6d584b8ed9f69bcd6af6a55a3d8287f790c5fe87e3b99cdc375e2a4d87b7f24578f3c8169dd2491d2264f3fb9519c64dbad4f621a34c5ac31562c4ee52bb27f5965335f75fe2f1679c7f721b835d6b4ffb32c7656307bd399bbbc943141638c6c3aed1c8cb5f688d6cc3d3cb5b8fb9ca6bed8968896eefc681d4cf77a8b8dd0cc26ac4684387fbad00e1b228e1ab44a7cbc395f9631e44260a13d58be3bfb5ad088b7473442143be1c5d342168df400f108d42ebe4e07235bf55b564dae91c0b299ee4199dedd346d4e73b50fcfd5487636d5b16b92d6145f8a1634b50cb90db5a8c22c2cf332d91d8049bca7cba2e71de6b12e19d135e374a63b1b35c64d0d9652596add198088dde2c2c1094932b856ccc49c265139712677177522a466f5484f9a0b2d4d5255c7bea133337379cd4bfd4085dde60a0349dbfbb824b5324912c50d8fed6cefefd2b2a7495ae869a1735969760a1bbe375318687bbb9a4bdb5e26696bc58a5c390bd8f388b3c58208e730022b4241e1c7964b616b931436b26f44effb38e6b12840016bcbd1b9e69343e2c176d472096b6392b0a6aca8ce253d89bbf94198896b59d7256e6f93c4b5009646e71a780b6c2eeb4358ea193909037d5bc6baf4b53549df1e12bba38074c20d5d78b99c3d2d0a0569f3884b5a66ba4883f37a45bb41b426c2405ace5097b476a63d9cb74a1863ffed6cc15e145d0eef78ba301047b74c17c4b54f9787a3fb9fadb2ff25f36beedeb261a0efe7035cfa3a98a48f6e9b5fb5620877287c2688e33a9a0e8585ed8d6630746560010f46a6b1eb323b585ece6c2f4c143ededea5b093490aeb82ca62b267182e0c347dbd974b53679334d50634b93b4a8581a259cd5d8aba98a4a801f364a2ab7109f35d93d9b06f11ab45c340d6a6912e595926c9aac1eca922542145bdfa2e39fb9824a7a57d3339da2de4ef83a5ee7e39b3301a95e5f1e1c53010786b6b97c07d4d12580b782b2a269d31180682b6367609ea6a3a6815043922f81b4733780456424a49585a98db47b9f47533495f331077f989ab6045b48075062db13f5f1d0aea5e1eec52d7dd742041891945dc05f9e1b0ae35c07bf5303f2e20fa2f0a987d15477b322868982c6bc74497b6ec74397db1796f18082a6be212d4d324417b12d85a5cc5b45e1e6d15d2d55f45cc8385d17fd13f82c45e2649a4c72e42f2e8b01ddda89f7ab1e5bcb72cdcbd17743e8fa0b2b7492aebf3aa40d8db6a1ee24e67fe2e0c546d0155421ff3cd6f718c94986a14068ade1fe252d4375d1dd8b93c0a13b3a845a762985a9b048c6df633495c5b506f4eb7318b7854b67b75286ee9e8d2d9df748736b443b897fc08d6c50d8b703842dff560b8788049f2ea015b74b70b7736b20f0551a0013fd024517406c744e6cd16f94ebfcab15f2f67298581b0791197b0412609ab038a253cea2e0c2415f57549dacf2449d559d2f3d90be1a0e682412e35834d7b26613fee222c47883010f53ab0a1212689a2b32fbcbba9d139dd557bc9c2405a19e8501c6a92b48644d6e513b6d1a37ae35cba86a52bd67726ab78d74c16852cd6af04b1fefea60ba7d38ecc614987b99f624b7597b4e1e61bdffec219068abe1fee5234c274811ccde6592f6789bbc7adbac7ef56b0ada5968582b8af816d8d346d5bc293393eab322cb605568f8c324951030f45e19cfb4a97150ab2724c1744b1a6642983097767746b5010479b24ae31c187744711b1557318282b033dae634c174c67f531ed812866a3476e27613822fcb560dc7bac49b2e0a0ae7370927fdc284c4b0727f473691b6792363a3dd38db946b3d9d5cef4ba30d034104ca7cb3549534b46539eeda99cdeadc3d82afcf0bbffcd35298135abfbc0fdfbae24bf765c8d757c953b6dc053eb5cc6fbce1c4fe859f54e6380c0497e4035b06a3d2be929025971a3b4ac84d7326529af09c84a724d685642dde8599a63fe590a0b7db39402b8ac84dbf3594a2db4aca4fc4996d2106c9652274e56424b56b394d66966290fd5c964c65749655599e49c15737c2b4b3a6d354b3aaf290b99909f15633d431632f72e2bce448caca4e6236725b938252b05e3d1597176b0c842b76dc8421ae459e8f85156cc91812c85b82f0bec9390e51b8ac98a1b6c67294e4acd4ab0c59385cc3df1faf358cb2cb3900eb4ac18c15d56dcd51459090f34642531db39cbb3ac2fb185cb5909f4e27b71135b2e98a53021d4dde408061feee6443de92647e3abfdffde7fa827dd7f680225a192c7e34e843ed1f4803dcdc33ea41fbb3adb4ed15c733c147dcd9766eb2a694ee585d239ff4f44deb2d46b7b62f3ee8928944c7cde010cdf4f32ddc0f1d2166b97bdb964a0ad86313a1b98a2b347864be7e420d1392894744e0774e60589ce5ea1a4331f14f62941a2b37728e95c07e89c1a243afb8492ce4b009dd3824467df50d2792ba0333f4874f60b259d4f003aa70789cefea1a4f30340e78c20d139209474d60081d2cc74b482680094f656d09ea6e8fb86b8f4cd32495f4396b4db49e9ef4aaab2234708c86b02c83b301d4579015a98a1f8b4cdd3df1c9df54cd1d9c572e93c2848740e0c259dad009db3834467bf50d2f93828ec73824467df50d27933a0f3e020d139209474560785fd9020d1d93f94747e0aac736e90e8ec154a3a17023ae70589ce3ea1a47333a0b3204874f60e259d47003ae79ba4b33989dd22f716f47ee6a86c6c8aca5f41e7466150a8ec134a2ac7808e8da2a050d93b9454d60654169ba4b219a7b2904f35f01f87e788ee1cb5d6db1c91d54d11391814ef92a010d92b8444ee07885c1014227b8690c8ea80c88526896c43dc894c894e14a5ef97b377c3d7af3e0f0445a526896d4de2c598f2c3b88d16fccf2c530d4bd04e3fd424ad8d8918aee865ffbd8288e30de9b3340c5818abcb1b0202179924b04994c0b9ec0507c899369826128d0d5c5c06482c4b47e1eec9fe4e642a71987de67440eb6293b4c279e62aab4dc24cee7ea0425ab22bdb4310ce682554d314956341d0b4d42495625679fff48f981bb3c353811d2e4b0779037723f29e00e41d66923cb16e026bf7780bb1d1213463c538175437e54122734008c93c009059112432fb8690ccd180ccca209169b0f7d21899e30099cb8344a6c11e4c63648e0464ae08129906e75e1a23330790b93248641aecc93446e67040e6aa209119c616ce0840e6ea2091393084648e07641e1e2432078590cc0980cc234c92e9eca650ca892cb53fa2fd40f4f5f0f55776242e696bd2d1f7830f4678675e86affffc3b607f47eeda6e34078a76fe1a1d7bec608aca534037da5126a9dc97535966bf54c6ae62039c3cfb7f3a18e60c4a38fb0c4c2339643c19c9fad38bf933f8de085baa52b394373145790b3093e3689394b78aeb08aacecb3458b71b9bfbf62070076b8346a8c1fadd18a10f0142d7058d5083159631426f05841e1334420df6271923f43640e8b14123348cf387ef0184ae0f1aa106fbe28d117a3f20f4b8a0116a306c3246e89580d00d4123d460ff923142af01841e1f34420df6cb1b23743b20f484a0116ab06fde18a1370142379a24b40e237421dba1d1d90d944e8f35d8cb646c7202cd0b41d989bbb26b044e7835da4edf6a8acacb41d7c84926a96cc0a8f4cfcfa402d35d465785b083ae0bb0c24d26a9736708d3c9ff699f216cac18df013cdfc92609a4bbb83afb0c8fb0ff76760377f72c9ec2c8a4ff878fc24c6083a798a450cc0f163d9bceca09677d452ec991f6bd8777d5cf81a0f7f25493b47621fe0ee30206e6eecc3bd2fe9fd6d974d1ca52b60775aca1b6308ea7af0455d0669364bbdbe3f64eff4c4d63f4b504f49d66923eb1c61c2e1190ef401de6d9eb3b40a574ba493ac582bf5ec8e06fd897ae9c0eaaa633d211a4273619218c1e7200a0f2cc7478c8de769269f790c6867feb010f799649faf626559b8bd38973fac36a76b281d39951cc965615306b2d61708bcd5ae67653d496026acfdeb5853cec9314aa818ae79c7486f2a5b6103340a312efe03018ca6f35456b0108e5b798a455cc89ebc9ac94d25966bf444f9d58147d294d75bab18a681bb0d1734d17f711ec1caca5fcf41f6729aab37a92c69ae24c24e7a4a9f0c599d5409d7e9ee9ce0f11672e168582b5dcc36e8d17000acf4f078503763b0a5f05145e60924278bcd032e23dc02a4d241aabb9f7015ef1c27491e89e3555419c33f9c2bd8dc9cbc0122f4a47370636a653f5941f83535d8cd1390c843d1707894ea33b5e1ba3733ea0736b90e834bacda8313a0b40b3f19220d169745f4c63746e00745e1a243a8deeda6a8cce6b009d9705894ea3bb1f18a3f33e40e7b620d169747b7b63743e0be8bc3c48741a9d136c8cceaf009d5704894ea3dbdb1ba3b3010894aedc951dc2dea981067b2e8dcd2fea059a9557a5834acc32bd541a9cb46a8cca6f4021bf3a2854f60925956d4101bf262854f60e25951140e5b526a9ec44fcb38cfcbb643a8b4fc5b1d7e22a9b7b64d0931a9b8ad00c10bd3d2c441b1cc33446f4a5c0cf5e679268f78cbf9ee99fa8605986e87b91b8f45dbf2b7d2b849b1bcadd3b8a8025de900e2ae176e313c8643296e431614aec8f56a5a367de18956702abbcd12495ce083a5c9a3297ef333c928fa33b5063ec6bb10d5114420f591f9079934932e3efd60ec587bbb51bac780e32e5393b81b6d2cd26691553bc2aedfa9ad6ed2a35bad128d598c51e03a8bd25a8d41a6d961aa3f676e00c6e351d2ee5b0caa880ede25e690384ff54dfc680bedb4cd2d7344eb824349d6b72016a6ec4108dd340ebe876f3f5bbcae1c8c6c834b69a7706b0c93b82446618f73cca0764ee08129961dc4d660220f3ce209119c6bd8e460132ef0a129961dc45660a20f3ee209119c63d8e260132ef09129961dc3d662820f3de209119c6bd8dfa0032ef0b129961dc35662420f3fe209119c63d8d8601321f30496626a9da9054db0bd660fd6e6c2fd8a3405ffc83e9b0556c4e887f8a8d412f6a6c82cd0860ab0f05894c83f5bb31320f00643e6cba034e8c12ed3e1bf8f402f4ed34495f2b405fd52d5228987b8e6f9897637d06087dc424a17b004277af156de7030a1fdd95fed13f861ec683ebf60135f7634122338c07d7f500643e1e2432c378705d6740e6134122338c07d77501643e192432c37870ddde80cca7824466180fae6b0bc87c3a486486711ba9d680cc67824466180fae6b03c87c36486486f1e0ba6c40e6734122338c535ffb01329f4f4723b2ff6ed7889c455c0a5f3049a1da317606add1d822973fc1f4c11783ddb76ed0731aeb5bdf134cde7ac924bd74f06526fb594cc376f78c33469bb12d7bba8102feb249da645b42263eadd5603787b15999f783eae71593d48a0d747b93dd7303dd3b81e77c351d8313bdec0a26ed8ba98c553c2702fa5e33491fdc95cb5d010417b1185ffb63cc06cf037ef2f57404428905e661ec643b1050f946ba06cb843d8e63c18f3b504627fe4fe68babc2ba63dc7440e89be9f08fbdd97916bbcbb9016f02fff89649fac4c627894ffb0fe384ac7680ceb78344e7c050d2d904d0f94e90e8ec174a3a1f06bef2dd20d1d93794745e03e87c2f48740e08259dbf013adf0f129de13c51f24d40e70741a2b35728e92c04747e18243afb8492ce4d80ce8f824467ef50d2b90ad0f9b1e966256d9be7d97f53107a1803fdbc80bd7e38eb762b656f4c65a239ebcc8d115a6a8ad08980d04fd2d1e541dbe9ce5e314e73b2988c611f39cc84b9855e1304f19f9aa4b2211127fba5bd7d6eaceb6d0eb0c3cf4c92b71749f4d42aef694026e7605aa6569483e1b2cf8348aac959c2a648fd188cf87c1144524d76179b22f52340ea974124d5e4ac6153a4be0f48fd2a88a49a9ca3698ad43240ead74124d5e42c6253a4160252bf0922a926e76c9a22f51040eab74124d5e4ac6253a41e0848fdce24a95d897773dd42b6f0d4116626a376219b385349a6b05949f47f31600c13de1d5601ff0c48ffde24e97d48d57179effca551f6df8bedffe8bf1d4568bf4009dbb1930a3b89d0c6eb4a3e756c3459418ad95bf9ac6d2606a80d66c2245399d09fb899f0433a7a0ab07e2cefe488302e349c0decf9479354ba739dfaef467d05b34147cb4f26e9d3dbfe348cd3199f03d4fe1c546a7b8592da6f81fffc251d85be0f19b81b15fadec067fe6a923eb54533464f243477b235b0c5df8244661857ba5f0ec8fc3d48648671a5fb5980cc3f8244661827e15e06c8fc3348648671a5fb0640e65f4122338c2bdd8f0764fe1d2432c3b8d2bd0c90f94f90c80ce34af7c580cc7f8344661857ba5f01c8fc2f48648671a5fbf5804c523d30cbb4c378d8e867a09bc3324965e26769180cd68d9da57108985f123149a358e4a532f5368c47401c0eec3223688486f18092a300a1d5824668188f82a80084560f1aa1613ca8a412105a23688486f14888e580d09a4123348c0796ac0084d60a1aa1613c1a620920b476d0080de3c1254b01a175824668188f88580608ad1b3442c3b86ee93040683df30d4e3ad76e95fd21157485fd722158afe4ee241fbe767b07e2d258df248d9944777b35831593b1edd572c1187b0393f4d6e7f43a478697b179200e76293178ce757553c41160970d4d12b70ff1ce0aad64b33aa671003acbb392157295e934062dd5d86c9089a0e7a99149c2dba28e20b1994a06c32963e47607e4360e32b961b4dc5a80dc3d824caec130cb18b9bd00b94d824c6e18cf6fef09c86d1a64720d76031a23772820b75990c935d8696d6eee2820b77990c90de3bce61180dc164126d76067b631728703725b9a24576fe7e63056670783c66eab74f471d19d4f26b219f88b7ccbc472eccfca598a61deffa42f7109dd33ddb62a5f6f9acffabae884a01206b79818dd1e61bb296aa70037b097496addb523bd7c148779ed480b50d45b07d78b1a9c60618cdab700b56d4c52db80c4ea32ac30475d1d53d44580bfdcdb24754389b7d3901663bae6ce0118c5ac8f0a451528b313f22e2f77842e2562fc80ee80e62e392f22bbdf72f37f804db74dc7444b6cd6aa77ec2b8c43dd3d808d67a6a3e2a27b96ef3e474e2f05f4b50b4648358ad00d1096318b755c8651cbb42c43d4668190aabd496a5b4aa88de5310786f26cf9ce80ce0e41a2d3e8798bc6e89c00e8ec18243a8d8e6819a37332a8d13b0589cedea1a4f3304067e720d16974fa9a313a2f02747609129d7d4349e74d80ceac20d1d92f94743e0ae8dc274874f60f259d6f003af70d129d034249e7bf80ceae26e9ac65df8c61b3fe2a19d012fbe5f0d145e78f09baba99a48bf6284ce5fd4c74dfc7250cc0398e2d7cb4ed0d68eb6e92b60ea4ea6976a3c92a42b7cc5c4e4417dc64fbf32242679b4e65c5b788114cbbeed2307e646c726f7740728f7478c6c48f680be34abd8e60ca797690e81c184a3a9b013a7b0689ce7ea1a4f31150d87b0589cebea1a4f35a4067ef20d139209474464061ef13243afb8792cef78075f60d129d46a7331aa3b308d0d92f487486734b8393019dfd834467ef50d2b91ad039c0249d1d199db9f64b79848e4416f14fa9c8fe458f73f9e9df23d946ed8bf89b63ec6bb10d6e70c999b1266916a079603a26296036ebf5a70667301b6b78fe01fa900605854aa37b4518a3f220306eb95f50a834ba15bb312aeb012a07a76b7e323de6b2d26662992d0cf5a8338873e06511f3a5c5e9e85f32e631d7008f39c424a18d893875a1f7ae988dd4c198458256d15093047666048e6600547bc7f68a180c3d3734874d590c40ed6e8cea66c0568799a4ba3df1ce0d2d2174290285f36e78d0c7fe9b125e10bde6dba08b58e0657402d8f7a6362fbc0ad4fafb9ba4b805a3181e13bccbecd55865b527b0d7e1e6eb7d672cc9a99076372a5b012a47ecca100ac2993dabd114955341111f6992ca262084cab11f5051e9d4d97c3660bc28d461d35450eb8f32ef271d1257b030891eb73e9f4d51102fa529843266916b41e1ce3149664340669a9771193bab7e32206f743a66c32777ee571857c89f070af998a0521bcecd07ee03563bd674253481e9ed543d4bd9ac107a2c25ed1f2d4fc7c66fc62aa13d0089e3d25109614bb2bc4151ff509efe753b28ecb94122338ca77fdd0bc83c20486486f1f4afeb0199e3834466184fffba11903921486486f1f4afab00991383446618dbe5570332270589cc309efe753120737290c80ce3e95f5b0199794122338ca77fdd07c89c122432c378fad70380cca926c96c4daa2e41709b8e934989ddc814cb609ce1b8302f3af88bb8b44e0bcea16a06432463547e052c347fd70e5c3850b4e3d82895c6867f4f030317d38375fe42df501eacb619d8e68ca0111ac683d54e0384ce0c1aa1619c36bb09103a2b688486f160b59301a107068dd0301eac760a20f4a0a0111ac683d54e0584ce0e1aa161dc6d6e1d20744ed0080de3c16a1b00a107078dd0301eac763c20f490a0111ac683d54e0284ce353da12697f72e95da9fd0e987f465772b5463e40d34455e27e292372f1db39106a47f3692b10eb9c7007905bbb2bb63b2fdc9a184ee105269b6bb63ab292a9b83a52ef3d3618783d26f87c6e617bd00ecb0301d5becf6b6c5db7d8af11ba00229323f48b190f59dd34f9dbd909c652dcbed0f0bb940256c9100ddcc277cd3b4ea025b2c0eee46fb613c946f16e8122ed9959b927b07d3c23897230758e98260ecaa2d3ba8c420b5c60e2af91258e9c274ac5bf36e945641125d30687cc4d2d8d8d01fc07a4bd3b38c95d6f7695fc66a6c9c722da8f10f3549e05e92e28f05ee2348392374b5d982ff996588d40c10c22f0a22a9063b378c915a1f905a1644520d76121b23f50750452d0e22a906a35363a4fe09485d1244520d0e091b23b50928fe4b776dc81ff60935fb823a7fd9aeecaccb618dd0f99c4a8345bdb3292acf0645fdb0206d603ed0e4441a635d26a341212f0f129d834249e75240674590e8ec154a3a1783c25e19243a7b8792ce33019dcb8344679f50d2793da0734590e8343aa7d3189d3b019d2b834467bf50d2f932a0735590e834ba00c6189dbf003a570789ce01a1a43313044a87a7e748f15d30fbc3d8f1a1dd80351e918eb56df86217ef705c18170ade02c85c132432c3b850f04140e6914122338c5ba55c0bc83c2a48648671ab941b0199470789cc306e95723e20736d90c80ce35629570332d70589cc304eafd904c83c2648648671ab94930199c70689cc306e95722220737d90c80ce356292701328f0b527bdce8f982c6dae37d407b7c4390e8347afaa5313ae7003a8f0f129d4637313546e74c50d84f08129d46837763741e0be8dc18243a8d9ee0668ccecb009d2706894ea35b5118a3f30e40e74941a2d3e851b7c6e87c12d0b92948741add23d6189d9f003a4f0e129d468fba3546674d10289d6292ce3d389dfdecff17f3c40bd8da8db01feab083b8149eba2be769baa23bab368c51696c6dc60d609ee66693543620eefaa111f6cff4c54a12e6735aca0175a799a4ae83c42fca57b58db24116dba92e6577f4ed34cd73ef6e8ae4bb40e5737a184836d84d678ce41d80e433c240b2414f6b8ce4d6a0de3f330c241b1c0a3146f22bc092cf0a03c90607ef8c913c0b58f2d96120d96033c118c93300c9e784816483b34d8c915c0248de1294d3b38d76581b6b487c0f3cefb941a1d268efaa312a7380559e17142a8df6fb1ba3b23aa0f27c9354b621de639d8bc92a4217c54eb63f2822f434389c5a834d0663c41e078afb052689cdf4115b06ce427077748a35da1fc689131580de0b83e2028caea83366a97f032a2f0a0a9546977f19a37201f0a61707854aa393c68d51d90850b9755776617b37b334e82bb79aa27208e887bdc42495ed1895b9f64b531961f4e4e515fc73b73a9acb8f1f1f69df17daff767e1f635f8b6dd8a2107674d7262ec1979a24b893afaeaf64cdcdff3ffdb0af81aaeab2742c11ebc5060777978d590f028e60dbae3d0f29ecf1e7086089979ba4b2691c2a85a64647af72238668ec006af92b4cd25897dd2c65ba97d84023ecd757137a1879f8aa9bb6a0bab9321d4d4b687bce9eb6d3480e19cf6af00afb45e7591e6b7aae26b42d3fc296a0d46cef7d1353f4ae0645fbaa746cc65a4916da3f5710950d838d06f5c62aa00f4105747550a935da8a3746edafc0295c938e0a096b2fb91592c17add5885540d14fe6b4dd258dfbec9e3f3f50a88b3fd5a2eb34cea51c357293502f6b73d38c7961a5c956cacebe377e025af0bceb1a506e34b63bb2c9e0a8af3f5e9f08a3da39eb188b5c8ddddbdd3d0703456b85f0185fb06d3cb142961392ce162f669017bf570b059fa54f62b3d94c2e0b4c8c5a6c8cc0364de988ef9cd3dd9dfce75aafd6329a336cc334b4f0314de6492c27a80428785301f2d3e0f542c3707e780288315cb565354de062a965bd24165cf1843bbe15eacf03928ccb79aa49276d34f60de8f022c61d54b45087bc15b03c26e4b4705d297ec6e0b648e0314de9e8e692fb4f88e66ede5e54c8809f627852cb4994c56466d9176562c0b75cd3c0d107b47bafc623159419c01ae7cc6841858488b8d169aa2f26e505bef48cf317a3dd33fd865cc12cf02f4dd6992bed6c43f284b49738e80cab55b32b2ce89fecca71a5c4050dd14adc560c4e6ae74ec58436d722c237392fd77319b2ce89ea35511ea80fc4860a37707e708bd306ee557022a9e7bd271626bdff4fb4a63e46d04e4dd1b9c735dc2d8e3581f14e9fb8273ae8bc1aac6d8b92e5b401bfbfe740440f410e6b49f2a68cc1209b0c407d2b12d053e2233dd332633c864c1ae678aceb680ce078344e7c050d2d918d0f95090e8ec174a3aef0135f8c341a2b36f28e9bc04d0b93348740e08259d3f023a1f09129dfd4349e7f380ce47834467af50d27910a0f3b120d1d9279474ae07743e1e243a8dee6a6c8cce1580ce27d2732cce2e680519eb062e00f43d99aefe4a076499dd065fce884bf33c20634d4a0b04ed4fa5c7167741379bb1eedef6a043e3e9206d1439d06497afb1a2bd3f188a782648740e0a259da580ce67834467af50d259020afb7341a2d3e8514dc6e83c1ed0f97c90e8ec134a3ab7033a5f08129d7d4349e74380ce17834467bf50d2f902a0f3a520d1d93f94747e0de87c3948740e08259d8d41a0f48a493a6b310067761bfd8c2287afd55383b874bd1a9ccdc8c3b8a95837d0fe7ecd24955d24547a57d08e22747391c5ecdf7462eb7206391a998969906c63f32f7381ddbe9e9ecd467aef46738abe06f4bd1194bdb08c0e50182bf69f81fafbcda050697470c218957b83bafbada050697460c218950450f97650a8343addc0189587012adf49cf54ff41e9af6a8c6ddad008f8c777d3b5a2d699934ed7f12c6093fdcb4998d7ed5c0c6aebf782b335d8c010063ef38035be6f92ca66846e2142c3ed22fed134822d9937b8ced19857ac056cf283a0ee1664340c32b65bd04fa021f96150a9351a1619a37625a0f6a3a0526bb41d648cda5b8043f8d824b5ed413d5fc8fa2a47310a97b09a7e02f1ae219fc8eafc85365cda16e31b8b032e07d6fb493aa6cbe02b81601cd0c7e4e929c622819f81bd7e1a2432c3b8c0ef7740e6674122d3e0b11fc6c8fc0490f97990c834b861a831327f02647e1124320d2efa3346e64780cc2f8344a6c123158d91f93120f3ab209119c62dbfdf05647e1d24320d86f2c6c8fc1090f94d90c80c638f535f10b47f1b24320d6ea46c8ccc7e80ccef82b1b3bfc17adc589f7c7f30a4f1bd491a5b11f5356a060bb9b17540b3805dfe1034420d167463841e0c08fd3168841a6c541a23742c20f4a7a0116ab061698cd04980d09f8346a8c10e396384e601427f091aa1063be58c113a1310fa6bd00835d8c83446e85040e86f4123348ccba7f70784fe1e34420d06f6c6081d0508fd2368841aeca43346e81840e89fc13ececb609d6fec38af23c0749cbfd231b78e4e414cfbdc3a639b8d0f02f4fd6d7a3693d87ea294f72e95da9fd2394cf4a3348dac1b9bbcf00c28e6ff9824b209a97aec07dd0c329f15ef45e998a6686e070540e2bfc1e9e91c18cae9094d40d1fe2f486486717a423340265df2161832c3383da13620d30a1299619c9eb0072033122432c3383da106203323486486717a422d4066b5209119c6e909114066f5209119c6e9091980cc1a4122338cd3135a01326b0689cc304e4fd80b9059cb24996ae7ec1ab44b638dc93f4063b2b6492ac52160e28420ba6b02dd27818a4c8fb3591583d8306e53b11f98fb51c724b1a2cf28b6853a872d19ac868c1db6540888ac1b14220d5aa43122bb0022eb9924b22d23329f6b3e99949009c43db493ee093b9777c1d1def642fbdf0ef418fb5a6c43169923d7d8392d1445905bdf24b962c55bd5018c44d6bc19ec0831d6697c05a8ed1b98a4b69d845aa7939892b7841cc036f8591673002e8ce3ed19c0761ba6239c4a2c360d63a7dd384065a37484f9229c7256c0ef5e21d4005061353649a6bb2348fff48f5a1aa3af2ef09b7b98a44ffdecab304e95ed0e5a4a4d8244a7d136bc313adb003a9b0689ce7ea1a4f31950f1340b129d7d4349e79d80cee641a2734028e9ac0b0a7b8b20d1d93f94747e07acb36590e80ce722986580ce5641a2d3e8e24163745e04e8dc334874f60e259dc7003af74a77cfd274fbeaecb93d9ac1d0df8af9bec7cb582bded9e9d8e8fa4c7ae292116a2b4003b3b5496ae94d1e71f67d0f5f075c4360816d8254a0078572f140260886f60e129d46672319a3730f4067db20d1d92f9474de0b0a7b6690e8ec1b4a3aaf0474b60b129d034249e72f80cef641a2b37f28e97c09d0d9214874867359e02180ce8e41a2d3e83668c6e83c01d0d9294874f60e259d2b019d9d4dd2d99888b35cfeafbd33018fb2bafaf81d2c7507173eb5222db8d0282ad9c8226e2110882c0904b08a8a210b1948424c08022eb8b66eb55654dc456b5d2ad65d2b6add77ab565bb575efaab6b56a17fdead67befccebfc679240a2fcef9cc35379cc3279e7ce3bbf39f79e73cf3d8b4bbb0ade469976a0b631589adf0e714ede3b69d41872702e9c4de63051ee60d2cfc91d874ee3327c334fcb33fbb211b1d22a174f00acbb8688958bb0c6d7107aa0b119c968f00ced2605a4c6188ebb4022476433b6285d2289396c34941f83fad99d897278864cce315d03097b1f7248945a9ac773184cff3d98a873bba8a79e4076f4c11b5f66af6ff7852ba8ab2faddec281807f4f26fea897518999ed1f702f5e6be686b355698188bf31298423439c1a4512dce1a5d699571549780deb994a3b0e545a6e36b70138dc6c9569d90703cabc902a2d9eb4119ca95fe725b4fbb5757c72802a3be43ce31aad2ee44aed7816ea4a5853f399a8fb5eb2aa54652dda0120bb05d2806a0c74d80680164a03aab116ed27b06118250da8c65ab49f01d022694035d6a2dd10a67cb134a01a6bd16e0e404ba401d5e8a87e17a67ca934a01a6bd1be0740f7920654e3b1de070074b434a01a6bd1fe0b80ee1dc275f2e5fac212f53dcdaffa20a0dd472a5a6a597f1adaa74d0aedbe726ae26874f0fd11a4743f26cade773f22daa2b4ee47cde071da3f44fa76f17a156df2094ce8b2ecba991343357ba84447c84e2c9417c0ae688c2c13295fa5ef733eac90e5d2806af47db600d0b1d2806af47d3602d071d2806af47dce05a015d2806af47dc601e878694035fa3ee701d009d2806af47dd602d04a694035fa3ee700d003a401d5e8fbac07a013a501d5e8fb6c00a0939840079a28472478c1b51616bc6926056f3213de50f3559b98116593d6c46c11ece2a764d321921e0c46dc1dad64a1dc1d5c73554c94d887abd97be2dd40ad5e16b537333b09d6caea10e9890988894acadd1d5ce88e587e1b56cfa921dcc505a620bcf2a1b98b87c2ea384d6e016aa2e2a14df43980b686897667931ea5dc6c2f9debd3111cbaf53d42792e609e1ec298ef49bf676682ba3c668dd9a0eda0e567c8a81c36ddafaf2ef6bed10fd7c235a056b1d04e01b4334328ab3c9fa3b4be34d43d154ca703e5549cd7d80b691e984ddf095171bee763e2f4e2fd1a3b1b56c3b43e48124c8d9d0da701cc8325c1d4d8d97014c09c2509a6c6ce861300e621211c759141ef7643f5a6da24ba754410d7647b6ab43bf70543fe50265ed72aabdc077c35db0bf5edd97703dd7d58080f526f773cd44aa034b91b01d37ab6249cd4c4021ace2ac079b8249cd4e280349c536155ac9584937af44bc3b90c70ce9184935a6b9186f332c059270927752349c37933e0ac9784935a949a86f351c0d9200927b5ec2f0de72b80b351124e6a516a1ace18184a73f90717d5f6cfee5c287af9ac35d3a5e56b0c3629a04d920affea2c0a9003def6b8249c252a716e0f38e749c2394a25ce2760b2cf9784b35025cedb0067b3249cc52a717e1d267b8b249c452a71be03d2d92a09679e4a9cf301e70249380b54e23c0f70b649c2a93321eb18c079443603b6d3273a3159907652f421ecd8dba5a02c5089723cecd63ba4a0a4a6b0d2506e022817868982cb42be102d0ce10d581f3b43245bb9176ef472188ddd9abc441fbc18c05b14a24347aed7d70d6661b72eb804dc850a9d6dd36187736488563c3d1b3d18c38e3d0c8841307f8e91b05e0758178788668f628c121590e226b3bf11aa1b8d55b94a41d92c0931e17b674dea0339136cc9a552406a94c8fd01e451524012238569204f0090474b01493c89a4813c1a401e2305a4c65e5b2b01e4b152401213a56820cf0690cba480243ad368209f0290c74901a9d1697135803c5e0a4862e6190de4f300f204292089d53469209f019027ca6928a631816f22a03c29449a94bb64ed89a5a3982b250de66270619c2c0926517fd3602e0198df9504936855d260d601ccef4982a9b1096333c03c45124c8d0ae8308079aa24981a33c86703ccd324c1d498413e19609e2e09a6c60cf22a8079862498c4fd0f0de65100f3fb92606aac077334c03c534e1f208d4ee0f701e50fe47460216a725a90c10ad8979f25ab5073b1ca0e2cbf04d9fca134a01a3bb03c0f40cf9606546307962700e87269403576607912809e230da8c60e2c4f03d073a501d518f0ff2c003d4f1a508d1d581e06a02ba401d5d881e551007abe34a01a3bb03c06402f900654630796c701e885eca48071669169f0b758997488c4ed936bed77f7341a3c5aa57657e2238277919c162144395cc942b91b845b5fcc4439c464b6eaee7de970a24ea7950e3f1d64f41226d89d4c66378144eb900ad39ebcc40de8d2a7d6ec07d578d8d109fea64b43f56689be276e6592e9daee869c23c42b67064ae9b210394288739afda343d9607f72832ef08357f95577896aac4f01d69521b0464b4162da27b2d92acdd86efdf645a6903bf9fbb3b00e01d575b99cee021acf39f70765750513e5f630f1a32ccb1a3f589b954f57c8ccc9ecf42419cdf9969f03d21fc9edca4294569a69f52a68fd2bc3b410cbcd401c221f3d46c2b725e0fb71087cae137a707c346dbe09e0bb2a9b9bcfb1c6755b9b933c2e266af0e12c946701caab431a462e6d7aa64fa0eef4f07aded313b1ae6461dd050ca36b42149cc8c2f4a62997d3406f5fcb84e716a8cccde3646fec34d92711ebb9d2acc86180ee27729ad7e4a98c963b05d6c6eb24c1d4182d772ac05c2509a6c67ca1a500f37a493035e60b1d03307f2a09a6c67ca10500f306493035e60bb503cc1b25c1d4982f341f60de2409a6c67ca1568079b324981a8fd01a00e62d92606af4a3cf0398b786aa5618375d633adcdf02ecc269111e33e1c8ec3649ad6b4a98ba9ce6b3dc1b3c42b74bc259aa12e7e180f30e4938a996260de721b06afe4c12ce7c95384f029c774ac259a012e7958073b5249c852a71de0d38ef9284935ad58386f31780f36e49388b54e27c0b70de23092735978d86735330947e1e22d4a0c44495b11307bb417641b4f3f1cf4c0adfbdd98c704bcfb8d05832b7093694f785097ac98224d226f26c90c4fba57453a17a2f6992f82ea89807a4a02c5089b204d4cb835250e6ab44f93540f91013e520fb4bb5fda5d3b8507f3754abbdbcc9b47bd513374bbd0f33ee7fd3b74ef68775f26126c66f99ae81d495f629653e6e2dee13fecaec60f53e02b8361926586f34e7511c01701f9132dda9d145b4e9fe3128a147a5a02c50897216ac9c8f494199af12e54040f9383f67a2c63fbdfbc493f91ef518fb589dfd39317085fdeeae24c666d2d251b683b5f389303dfc8a33a435c0fe872699a7c0f6f14926be2d41af579a4416cf749fd13b5fb5ee1e04009f0a910e95ca339f696994db9baef73665f47d8cbdb8c93e6991b7353bfd9939d574a79d959f0f687f21152d75af4e43bb1a56cda7c3649a95865f35633112be02b0329f61e21b0aabe69ad3f367faaf71d3e875b9eefdd01530f19f65efd9d7647946ef949a2e55d98f847147b03a7f19424a11636205adb136e8446f6d3aa748e2b16ae32a792cf1f25a66ef206ea8adc1b66649e96258049e93aa9ea8fb259a7afa152c00cf4b454b7590d0d0be079aff574cb439263d35d5a9a923ede46ff0cebbc430eef617d921eac037ba7ef5587d1216895f33710ff3b827f895d6d599a9b3ff27bca5f57ea8a84e5296f6ffbcac7590e717e4d48bd7d859f09fb0eabec844b9697280562fa598b1aecfff3402e4efa510b66a4fa10ce55e41b573d7c9792c5b756758277f93cd668c65f689edde3ea5825cbd0109641b18fdbf0d130f921f7e67dfc29acecfc11af872e8ea46bdb73d89ea856679de0353fc95100959e9b5b812ea267542afdb45920b6ae7d510e54d11e6daad4cbd60e700d8d74255de4c0cd253a5b800eb29cd3cda09d6d3d79938b73291a379b67fc0bd78ad97d8400869b997b78244be21a71ca4c60a1f0d80f24d26ca1dfb80b2c6bea61b64a1a9b23f456e900eaefdd9cc32e477012dffbb1005f523ff529bf72135ad516635e6b1ff0e80fe3ecc515d5178839e66758e007c7f08755487818bbdf178ea35972e06fdfec710e6526ffb6794aa6c98f34dc0f92749384b54e21c0038ff2c0927b505330de75d603ebd250967a14a9c2b01e7db9270ea6c36f63ee07c4712ce2295389f019c7f9184935a8e8a86f340c0f95749380b54e23c1170fe4d12ce7c95383b01e7bb21dc7418d0e8764935c91d93de9dd0b180f0efd939394a44db15d8af6e7359fbc5f7e976b0f9a6c16f3589d2f91ecba73408ce34df63a21d6ed27d4a734cd7a3b7bec4dee97397cc03d4ef4b49faa26a7c5a38cd0be079fa400a4aaab6a7a1dc0aa4f21f525052353d0de5e72095ff948292ba7fe7955e01a9fc1713e5e06e8ca6a897a03b7bcfcc05d16c469d082ebb7f87eed89609b2dcebf2d63096294d4ef705a41f86b04cd784341137526b6f2f6007cc3d58689701da8fb2b99aa69f736a6c18311b14d3ff87da8226cee7dd408b93935c7303bc174d0ae17f4228240c6fe8be3563b0a66334a883402e3f0e57fabcdeb8ba36a95ed71da1a493a68656c35af949a8098ebd586bfd809a35793120fc3444b28143d8e06d4c77abd19fb547d4bd0aebe46761d30bbb5f25c7279f106cb51ccf429b0f683f979ab9497582d05c73efc0e4777343245aaa538486f610401b938a96ea05a5a1bd1e16847e4cb491d677fea4f52b007c3f40b8011361aac455164afcd2ea349402beaf31f16d0d12d8dc8d4b4e7318ed2db042f60f238385190e0fcd65a60f027c5f67e28b72df7a97c391af328be30198d01b4a82a9d1edf624c0dc48124c8d7d5aef03981b4b82a9b14febfd007313493035f669bd09606e2a09a6c63eadf702cccd24c1d498df7603c0dc5c124c8d7d5a6f04980324c124964aa3c17c19600e9404b35421cc5700e6167c17db9a2239b254028d762ab423a0dd9289b6f7e55289f626ad5cea6c08e7da8a8971edb11c89a19a3d4ae20e9d56f5e3623833df9a89322a02d097dc21a22aa2e567ec05fea341d28012d5110de86800fa7fd280125d1f34a00500741b694089ea8806b408806e2b0d285129d1809600d0eda40125ba8e69404b01e837a401d59885b92700dd5e1a50a23b84067424001d2c0d28d18d4c039a0b4077900694e84aa601cd07a0432401cd576ad817c3d6f39bd2806adc7a1601d06f4903aad16c2a04a043a501d568d8e701d061d2806adc7ae602d01da501d5e81cd90380ee240da846b3693700bab334a01a0dfb1c00ba8b34a01ab79ec300e8706940353a47b607a0df0e11819ca8b2e028d4f8a1da8ce6d4c1a9b0d1cc61e21b6abe6a3348e274a72519548374ee9acdc3e3f41442a239bf9285b210cee1770bb17246d5be1a933122f5194871f5d458a7e64e90cd1121564e573f3e78fe102d98e13f26856ff710c9815d57cedea40712379ab4aca2db4132f70811b994f745949d2bc88f05f8356717bd0412baa75c09d5d82ef73e90d0914cb47def6fa0d1993c02acd05c49384b54e2dc0170e649c2394a25cea7601dcd9784b35025ce3b006781249cc52a716e0493bd5012ce229538ff02d2394a12ce3c95385b016791249c052a71ae009cc592705253b968388f079c25216a8060edb969fe263a4db3d15d47b60614502913e240932aa412b802082dff6d1648e05ea1f7e8dd579d7339712df65517f8df5abd74127defb118096d3d388c4733d1465d5ddde41e6b2f5a60c7ad36d8ded1b5317103d6fa01969a5493c78e10539fe661da1ba477ef10eaa8276534c63e7581719971b5de7147ed4b48c3b93348ec3e927052bb66d2701e0038f79584935ab28f86730af83cf79384935ae08286b30d70ee2f0927b50c2a0de72580b34c124e6a13131ace1b00e7184938a92d7269381f069ce59270529b90f24e3601e7584938a92d7269383f029ce32479954a55c6c90f07874885249c252a716e0b38c74bc2394a25ce474c0ae70449380b55e25c05382b25e12c5689730398ec0748c259a412e79b209d1325e1cc5389732ee09c240967814a9c6702cec99270522b23d3702e059c5398387730e911f28e43a771d91b9931f25d3d9ffa7647bf85dd511513ebae1958dbfc5952bde5e1b236a2f799eab6852f862f55667f6af7e933d4c484333620012f07bf7d351378d45aafce745f60357d2baaef647e30185353a58024c689d0406e0720a74901495c4b692047838aaa91025263f2d64800395d0a4862c9001ac84b00e40c292089a50268202b00e44c292089663c0de426a06c0e940292585e8506f25a90c8ef4801492c4d4503b90d48e44152401273d86920b700900733416e6bd6e6f048b724359a409f03cc5992606a34cc0d38390e0951a8a2773b1c8d6ae71190cb439928879b747fd11cd335b9ba2f7d8469a86969d88782a7e83026ea5c93e9f1ec0964cfdddcbbc6d50772d4edc1c23f18f0cf0eb102f73efc5b9f9b7912acc0874b8249f47cd2604e0698b592606a0c0fdb0760ce910453e369d27e00b34e124ca2cf8906730cc0ac970493e809a5c12c07980d92601237013498630166a32498448f280de638803957124ca20f8a06b3026036498249f48cf2520c01669c097388e95a4060822f995a61bfc63dc67afb7e17f8815d3e7c90a20234b00b4d0aec3c7e2cd3247b419d4fcfc6cab359eb094bab47bb21609d1f22e2ae27371f0e47efcc45abdeb0374cff6626cea884aa2bb3b2fe14bf1808f85a98f806f877e356cbf9fe363b3c85b9be0e837b923ecfe72098c8ad21fcf53d69f1f4894c34d56952580352b88089b2efcdcb74969f7c0b0e40daa401d5d8bcecaf00f40869403536de791580b64b03aa31f5e03500da210da8c6e6656f00d085d2806a6caff70700da290da8c6c63b2f02d045d2806a6c0df512003d521a508dcdcb5e06a08ba501d5d85eef1500ba8409342a56b9d034d93f77f4298e899abb49dbcf5f0f68974a454b4ddaa6a17dc8a4d01e15e2c0a3773ecf62a65d4a7396fc1be4f46849308936290de68700f318493035baf17e0f308f950493b866d260be0d3097498249b44369305f0798c7498249b4416930df0498c74b82a9f1fcf2d700f304493089fb771acc1700e689926012cf9068303f0598274982493c3fa2c18cc109e7c9210e8b7b9729a7b15cc0df402ebfcb4419b526ed0964f44ea9418895fd4818e743e6d0f7b21bbe9018aad9a3249aeab43ec417c2e43e4596975367bbc7cb618a9f2a0da8c6f085ab00e869d2806a0c5fb800809e2e0da8c6f0858b00e819d2806a0c5fb804807e5f1a508de10b9702d033a501d518be703600fd8134a01ac3179603d0b3a401d518be700e00fda134a01ac3175600d0b39940879aae9bcec4297b8d196b26fa7c22572d39f118661c95d93b881b6a32362db768216c449733f16233dd453efdc575d69c93dcc3bbbac9f49498952c88cb4c0ae23921328a0a3dc6c01945b4588f1290c173b3e957aab24f99677f7295bba97e259a248e0417dd797c0f7c9d8f31722fee6eb4cc3e6589fda96e3d49d71a0ed37a4588bc4bcc13ee29b9959e1d4c53352580f37c26cec1dde09c9ee450651a2dda5a3f788d7f81b6105087b3a07e0a502f0893cc9ab71ea99ef3c0babc3044046757ebb237319cc4bd3a0ded0cd0ea1785d0eabd3b0cd6183e330e26f9c5210a567c993863e221074d46af01b09748054b3c8ea381bd02c05e2a152c7129e0154f05b09749054b7484d0c04e04b02ba582d558ee773c80bd5c2a588d06d628007b8554b0c4633b1ad8f301ec8fa482251e30d3c02e07b0574a05ab315bae03c0fe582a5862d00e0d6c3b80bd2ab47fa0fb8af4d3bdb3c56d741bfd702d5c4b7615cde00257f5d5210ef6d01d38c57e5f6c7f72b7bd28e9695de865b5d55424bd590d211c83b498e787c0b3750d13efe6f69769be9ca53b1dadb24f73d21a1dedd1c0d18a580e81297f6d088feaa8e48968b32511ec2c94b6625e00f87ec2c497d9cf386e6f622660ecf9608fb83d5dc9c2da0aabe57572bca91ab394e220a1ab421cebf574dcdcb5018ac61628634032af9784b35425ce16c0f9534938f354e26c8253a81b24e1cc57897339e0bc5112ce029538af079c3749c259a812e78380f3664938a93975349ccf01ce5b24e12c5289f3ef80f3564938a9c5066838b70343e936beff28e515ea3e842c4b4d2778eda34d0aefed4cbc034cca3de776efcda15c2034c93c195c6f77842883d1d3444fdfab534d24da6efd1b30cd7f2609a6c69a22bb02cc3b25c1d45855f103d0e7ab25c1d45855f11f00f32e4930355655fc13c0bc5b124c95551501e63d92606aacaaf81ac0fcb924981ac3c25f0798f74a82a9b1aae26300f33e49303556557cd6c3dcb07fc6e0155d062ff78e08e78aa83351fc45877d7cbc7129850d1e449dfd7d9289fb671d6e71ccb2fffaf6091c6aff75f7782c36d0ded138b3d8de9e7bd48d57efc76eb17f7577d6617273ed25f73b81d822291039fe8cb4cc3277898dd34c837ff525f679ee9eeb7d0844d4dfb3d323c9f185e1aaed639dc60549b8577069924df6afee1dc7cd52883fc9896de43935984549020e604ef25e179944b265772996391e7775d2bd93e34333a2dfa2800cf7bc19fe2e727c04c258fb53a3bfb366e3fc19eeae1c854e7fb51bd325044ef2b2e5eec4752badf277df60c77657a43c2339b18d93d7263e9bc427d891bc939e834472629b75f9bbfb4c131d5173629bfaf9b3c0bfdb46cb2295689a13dbcafe2df17e528fa6284df5c1009dfe350674736f93fda7d764c7ae4f72aff8c2b313bd427ffb6879d235d1e1c53a16db3229c9ee8ac418b576845aff7dfa17ef6b649ebd2c5664bf24a2e4f6fc223e2e21f92df65fe2b7e8f1b58fe9e478cda33de08435d6fdead5bcce66e0dade5162d170cf6ff43eb1063f6ae55adfe9dadf5fcfb379b3357c2a23f3dd67b13ebfff07dde7de2ff9b9f71b59e0de6fde3a90bdb5dfd143f8caeb5a5fa64f3ff1f25cedd7f4367fa5bbcdaf22cf9bf8f51bc78bfbd71d59285396d7dd7b7f18d7b07e23477d5959eefb1d3dc294e5c46889d0e98cb1c7f7e2dd75ff3964bee7d4556d49cd1fc9026abbb59318e2ed9c9e472bb3bfcdf5ef35ee476d31d17f4e473a5bda2d418f32796e0a0b7e435afcdfffd60967bbba75e2b1b4a994eba6d2e3ff93f17524e3eedfb65e0c67d8e72634a6b35fdbedcf6ebc8f2afb99feff05bc5ec21c5e380700 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/dfad1df8db705f24a87a495a863b9ae3.asset.meta b/Assets/SerializedUdonPrograms/dfad1df8db705f24a87a495a863b9ae3.asset.meta new file mode 100644 index 0000000..58f6063 --- /dev/null +++ b/Assets/SerializedUdonPrograms/dfad1df8db705f24a87a495a863b9ae3.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1841f3a0ad7aacc48a192bd06f8fc293 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/dfcb9d6121fc4084e97b5303b0054618.asset b/Assets/SerializedUdonPrograms/dfcb9d6121fc4084e97b5303b0054618.asset index 75f622b..d7603ef 100644 --- a/Assets/SerializedUdonPrograms/dfcb9d6121fc4084e97b5303b0054618.asset +++ b/Assets/SerializedUdonPrograms/dfcb9d6121fc4084e97b5303b0054618.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed57db4ac340109dada6515b101fa4fae69b08d254053fc07a2b78c35e5e4430d55402492d4914fd34ffce339304355d1b8a8a524dc86e7676e772e64652b008975ac7d0a173aa5395da744377d4c75b1db38f3b5ea5f4330a30df62b4b1b74e2b399c7cadaa258c0dac428ac0794fd7985dd96f9283f706781dac98dac3e3e0949a06539b76e9944ea8a21673447484294c688a71a9198c3bf4845d478c6225966c553034b113ca9e0fa3d373177429b07cec5d8327200f32bb227146dc85c75062dd21cedb3420abc0f4b531dc9872e63b9045170b448927596d04530710a041d1161f45b4459b5a14cbaafcc6eeba8c364eb822949565543c0fa960e33cdcce9b1084a01f480439082e76aa748499b9ae68034ebdc848e940ad87303ad4c238107957307bf8641e240e5796e71c32e36cf241491d3ac0da130b9b323e88a58e58df002d92dcee23bb77303f8ab661ec01de753a5b89cbf436ea93ea237a9cba6998768186adb7a638cdfe23f2131161d717932a24d330d1014a78db135001149de1b02bab902c2e21551ba31fb0e13ed470205b084457dc92df1da6477487de97254a1e8a381d98bf27dd240da00e5d3ea68f8bc24c10a5b2e069833d3d69488df7c99689ebfe373580b8dc5c29b7f19ad5bc54c223cc632acbbbc9c689e1fc3acb8bfaa2d617638d8360fef17aab19c967d064a5678de1cc0e67c34282a50f89c7f2996983d796f935332cf693da1eb3dd8f96991fb6393657e953d1fb55a9a843fa99b42c8f888ac5c939d1f84bd934ad48d36a23f2b170077f4c81fceb0472c67801bf86115ae70d0000 serializedProgramBytesString: - serializedSignature: 7c3fa0fb391db52a3f6e7f35ebeeb2c163eea7f1fc9ffb8a0c2d0926c2a205df5c7ad1d5738423d2e79f68093fb25a0e9e637c19b640918d42cf7e5d75703708 + serializedSignature: 7b2e67ee83eaa1ad00ab0d92a7e63eaf5ac2719e097f50d206f83e1182c9f1a96ace65a127c595880f0a8d698c9ec8c80e739911b789b93508796f39fc4a000d programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/e1610184bce31a546b1836594e84ec27.asset b/Assets/SerializedUdonPrograms/e1610184bce31a546b1836594e84ec27.asset index e364fe7..addb66f 100644 --- a/Assets/SerializedUdonPrograms/e1610184bce31a546b1836594e84ec27.asset +++ b/Assets/SerializedUdonPrograms/e1610184bce31a546b1836594e84ec27.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d49771bc711801b24418222294adc409194048a1b242e804859b6b39ba46cd3d6166e596487e2024a70b8c824a448b79c7372fe415e7e81aff90f39fa27e4f9e09763ee49554d0f511874cf60001435500c3e6080eee9eaaaaf7aa9ee19804d19058fd80cbc6caa55b5a4e6d486da53c7ea08de2dc1f110fe9c4f6efa637502c767f0ba0d79332a1550121f53b141785d814fa7aa00255faa5d38e6297f4de5e0fd0a94cdc1274cdd87670ece8ab540a10db5ac1ea9872a19eb0f10b149854e755a0ced8a25e07551bd81dc1c29859564282b092f6b90734a7987a0b47bde13f52599750879bb50e6441d80cc1d9298f836aee88d720e6dfad8a28fbdf06cd7ef13fad8c7d27a591a1ed1a65678de629f5156417f6ed26513fa3dafab553fa77dce75f56bd6c7a441bf4196966469781cf0e837e0d44f5c91445aa7c73d32dd72339e72f77d7475655cd165673de9434c4fd79e0b9e32739efc0e7d6cb7e477eaf44c08862306865759da084bc3e3b087e1b0c3a2e9be635bd38185a15b6ec653ee9b0a185eb330bceec3d02d6363d8554786a306863758da284bc363cac330e5b068fec6b1adf95b0b43b7dc8ca7dc7715301cb3301c3730ecf694f132baa48f172df997ab6038696038c5d226591a1e273c0c271c162ddf39b6b5fcc7c2d02d37535a2eee8e117e0cd31686377d18ba656c0c7baa61188fd16cf2298cefdbea85ca90a2a845a5d39e5b3278c243d1adf8828fa998339cbf81a239d3acb341735a412da879e3ac7325d6c9f45ea2d76d38234f42b3e555fca3ac0a54ee00fe726cca3c85f44f68c6c549330f3973ea3e1cb1d453751b26c1271e299b50ed014cbb39b50eaf2f48de5350bbfccc2093707af596590599ceec7f08292ed017f0f980345ca3d757a4698eb45f81b402c52247108d2cc2f135d5566efb09bc37d5b9ae919975340701b67427d470ddb40cd6a0f6196a9b3f7ae46d7804d1b76675376cc950d4f497324ffcc8d0196470605ed1326e13b25849dabccad0d8bd5a4630bc8de5169adbb7c3fbaebae36b8b990cba7b982c287af887bf7fffefbffe73f9cff152d3165406a78dd84880697e60515e3a365026c1df8478bc258b8a7af1c74cf869fa5f3b47fcce79793a2fbc035a69662a75400cc39f6578b3031f9fc14af200b2de9082ab50ec4faacc33d9561df8a40d5367908236bc4d26bc89f3c61b3c9ef8e14d9cd955c48b0f33c1760bc1201d6c049b4d04299efb42946079e0e5be5b84b2cf81c42b9a4d5f427953a0e6cf141742b31ea6669e1dc433650c1fc3696423dc62224c2bb53d51c2ebea81dee1c1992407390548c152cf75fa064429d86ed09a0d90e004a2b6b3fd8977564cbc8b88e3d2a0de1ada3c10377980d6c24fcfa58dafc148f939e46dc3f9398a54309d8f991f510dc556555ac29ffcc58ac97713f971d6d66bd5cc46bcd5403cdba6577e65cab67b94c5132d82db4c82137ac9e81d45ff0b8f32e1ed76e109533be93cefd9e4118cd65f29673d117e36e9a9b835f45a6692a0fa6d3e6fb7f9bccf143fa0849d2a1ac0055b2dfda65ad0c62df85b80e70bd6aa718f7a8bd2b6f5ee77181d3a6c3a0c9874e8d63a64e18967636dd5d7dd69ab3b69aabb83d5ed6cadaf6b0dc2d4d965ab73d054274614d812f742d571d1d4f7a8e2f35fa75417c7e1c675d20b43d9e2b821e5b7cc081bc575db3c34ecd72be6ebda2b2ed9741831e9d0c75a26c6fdbbc410fd89f657afc5659b16574d5a74322d3e02ebf7c01bbbda9f616aed31d58aadf79aa15118a7a521bbf05e53d7a0feb22fda358a01d73dcacdd38656f904613bcfed180fe86add4bd2c0bf0b5daf78f24a51f7c1fd6f092d6dddaccfe466f4c4a84971af8b537617f79b5c4c9d7afd1c473fcc3b2629db706ef811102ff14c7b57b266ff8d91ff06cb8c0b56c1e69b01936f10e1b8512baf73c6ecce49dabc3e51a3d7076d82276b147cc5361c4d1986237c84198e864cc269195d89d6dd76c1c3360fdeacd5832336d0b76a047dd52678ba46c1d76c1e9ca98307afdb3c385ba30753360fced5eac1511be84c8da06fd804676b143c66f3e0ed3a7870dce6c1f91a3d3861f3e042ad1e9cb481be5323e8299be0f76a149cb679f06e1d3c78d3e6c1f76bf4e02d93600c5d3f508600183736cc91118f9fe628483e8620630bcef91a8a6ed36c8c653027584265e76c954403a5b14098707cdac6e04313034c2c6e45e202d9be11e990c0adaf825ecebf3668ce2f6778f336415a3ee4e278c666cf4f4cf62cabd2a82a8c276de5fc72eae5b5599b953f355939afdc6dccd22d49db16a663f933ed39d3b2975b515c8687b160ce66c1cf4c16e4ce2c702f21f07b4f1c0d50bf7dba4b045be3cad999f720c07796caabe4871c58f88ace9ed3b6a09da537786ed2823a0faf3be41fff565ba9bfab69cf191ba79f9b386d08733a827397a02ab408e516cbd4af5fb7c15f8cb6e3ee91e41328f9984ae0a75395a1dd93ec99a5c1773161dd87e017ec6beb673e0dbea7e917ca7e4f53f97e42b5b7b7045961f2da1cf31bb72ed826fbad3c6dda22571690a61da277cdd25fa257e3daab4d19da8f9aaeb235056bf12bacadd9dc86c25fdc77043ca4310a04749180979051a0816b970632b7ab04d61674f9629604b87780d4e1a63e6c62cedee10939f7541d80ccb67853b6877204515d20017c5b1f47b9bd8680f4af5811d2a224a48e32488b7a6669044c7f53454c4b92981267553756674b3717012d4b02c279a3f45adae39220f20806f8e38640a6a84db5c53dc23faedb9c58dddd67e5b37737c54baf413d4c2dd0d8e699cde9e248d434bfc767e374852d27ed3352a5ad437ddad871d301b368311c358791590c473ffe3f8f14b3e8b74f10c22d37b0a251e653c9516640b7955d0dd0bbf42e5d8264bdf5d772e76b7bc9c8d3568971d58c3eed6c465b890ecaf71a10653743f99924ca618dd2193d8ee0a4ca36f43e94839a92823ac5a07e1e45a81f3420d44906f57e14a1bedf80506f30a80fa208f56e03421d65501f4611aae0442506f52a83fa288a50ef3420d41106f57114a12e3420d44106f5d751843adf8050930cea6a14a1de6e40a87d0cea5a14a10a2e4ec5a0f632a8eb92505306a8612e678be2ed96c23bc4f06e48e2edd278b1e27d82ebcace975f1fa91fb8b81438c5c06d4a820bda34e1ca8bb6c17629946d0ce56fde26cad2fd27c1795d6cffa983a1fceddb44796e134faf14ca0443f9bbe8b44ac16d11b1567999a1fcbd24ca51c31c8e4a14e83be247ea33fddb31efda08dac4003f894e5b155cc38bb5d52e86f20b499478fdb0f4a647e3f5eafa21eb9242d6c2907d29892c65e8dee14274c10d10b110fd26c3fb0749bcfc7bd179dd1a4bbff7d978ddb995c1db3a0f78e5eb9b237d4ae3c18b31784f25e1f51b3ab6f9e66fd19da1212990d718c8eda880140c74c4405e612077a202527052110399662077a3025270c52d06728c81dc9304192ef4161c25c5a69b0b0c654e122546c23cf47e40df8cdaa6ef229dc881eb9002d7ccc0ed47a70d0ade6c20d6062f3194cf2451a60ce362b8b58c6017175bcb5c67789f9fc7b4636ba98d1e51f63090f9a8806cc488f22203f99524c8a4a1c37381a55fd31585392605b39fc1fc6394600a76713198030ce64194600a86e962308719ccc328c1145c3c8ac14c31984751822978c1410ce60483792c0913b742f9aaa7f1a2c73843f5421255cad0eec205e78263a418de7186f76b49bce196918223a4d832b253bd335fe8cce21d1627bc39a4033650d2d66b9be9b241c8f9dee365cd057f75147fe6a700f97bf0c463f13b9019fab547fcada7303fa2e02f13a9f84bc35bbd5a63e69e7050377fd6e34b97264b83edb3b78d4e1faf64e80732df65fbf1df04b66ab753334dd2d77337c0f38e70bcbbf644ed9152f888ff0fafeac1e2f1710000 serializedProgramBytesString: - serializedSignature: 8691f3f151db4d05fced3c72d817a9ed0410b098d523e5b7e1a8325019a1a183cf75d46e730d7f546ce71e93c5131c6c3602184862af8c3487f1d534435bbb07 + serializedSignature: ee8bc5b5196c91c5bd16106d000a2f882de3367af3b4bf804f5bb4c61c48726b3d6a5adbd093485fe1fe8c528827f5ee39b4289667241a463a057d460a192a01 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/e26c954fa0295b545952e174da0e0193.asset b/Assets/SerializedUdonPrograms/e26c954fa0295b545952e174da0e0193.asset new file mode 100644 index 0000000..4576eb7 --- /dev/null +++ b/Assets/SerializedUdonPrograms/e26c954fa0295b545952e174da0e0193.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: e26c954fa0295b545952e174da0e0193 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d097c5d45f5f8e775dff77da1e99e2e34699aa62d94d2bd0d5d529ab42ca5b46992b6a1691392a6b4a5ec5bd9f71d1415151411b1282aeea8a8e08a8a88228b8a8088eccaf6bf67ee4cde79f7cd79efdd77735e66faffa59fe6e66e67ce7ce7cc7e666ebb02e1fdc4a67abfd68bb562919826d6896a512f76797f2df28e3bbd7ffe99bebe46347ac76ddeef4aefde549197e64df899181be2fd2ef5ce9ac46eefcd6651e51d6be5fd7251e3fd5deabd5be39dc1d5addeff1aefa95807efa57562b12813abc5e0d8c03422d6cb979ad4b518c42bd6c5fbbd50ecf3eed648a5209002796bb0f7abdcbbd324efedf494d6cf6d101b65b4767af7aabc771a459d27738b94d8e59e2942fe21fc433f75ecaf8e7dbdff5dd5dfedd5df5dd4dff8f98eea3820c3e707a2f7baa2bf81d05d29de1fa48eaf7aff3b797f56a3f30eea08e7837d79edb6a79035541d87a9e37025b32603fd3babe38834f14d256324929509b32eea384a1d8f50fa6ecd32fcd13ea3d81d481e1cff85f41985c2ee8aeec3312f42dc753abe1648c7d7fc746c778b4abf17d5f531ea384e1dc72ad9de33fdef56d7c6abe390347a4df0df13b345dc66bd30db37a8f389ea98af8e93d4f175a5eb36741e55179da693d5f1df2a8ced86ebfa79b85fabcea7a8e3d4407a1da99e3b4d9d4fcb509f4cec4febf41f15c60e74ee71ecb039852c9dee6f04d2fd0df5ee353ec70e0f07e283edcf24b740c9abcb221e6f06e2f1a6af4bc7fcc073e974d0f20bd5f12d2577273a07b937848c5b07f5de21753e5da42fdbfa6570afd897d345b39ee987d369807fbdd35c9168cb33d2e8a9d3f6ed40dabeade4d629b93afe25fe794c731e81e4c0fbbb0272df09c87d47c9d56584b6f1747ace52c7a3d4f118759c2b5af2f1586d2373d4f168757c57249601efaae3ecf8bb83ae09c92d551acd0ba4f510757c2f8d4cfdfeb1ead835c3e7f533f323e8bc401dbb65186637755c1821cceebe2d74d165b2b6859969642ef2f976d98d74f0e4743da0ce17abe312755caa8eef07ece0fd0cec209d2ecb942e02a581a74bb73eea7cb93a960674392ea0537d2beaf45f25b3019dc3f17feafae9e81c745de387d3ed51757d853aae0ce8bc8a51e7d5fe7b3d7b20dbc8e4bd54f655e6c7af7ba12fbb7b85babe26a0db82b8de5d16a377b51e99e487b5eaf86180f1874a07cdb63cf05c233a87e30728bc0ffc7701494299fa817ab7099dc3f1f80c755d27926d168e1fa3f73f5661abf2bf874ecff52239ef99de85e347e8da474ade33eafc04915c8fe9e7206ebbd1391c2b328cdb8906fdbc707bce4ff1ee4922b1fc39366e0f9d7fa5ae9dec1fe14f9cb7629ae1c8f83b2ded990dfe796fadcb29ea1d5466cbbf3dfd7ae9fa74a33a560a733dbb0971d0f971733cec114fa96ba7a6084bd7c55b02f12e8bcbe93e44e9aecbb12a91986782cfc2352d57d77bba6d765afcd971ba3cd465b06a13c7da89c4b2792bba0ec7f6ea7e333a87e76ae2b2073ea6ae69fe5a57537aeaf69d8ebba90c486567bbfc6787a83415f53edbde8f04e49e2252db6d832f6782eed79ceecbe9d321a49c465fce44dd06daed9ff7d1fae8b242f1137b14c70e22b12c3f435d477dfc5807740d9edd13e09b4eb7541cf7f97ab6b4eff7abe399ea3817c9eeabf4e8144fab9636df5e740fce75dbaf3910bf54bae8f643cf34f1e9879e83e35911e29fea9e8ecbb92a6e9d45429f479e7b69d36f440a59e709a39df6d77dcff3fdfb7d153f71018a1384a1fb39d8962e54f770fb54e74bdc7e3c475d4375684ca7d74581f4392370ff6224c374ff12a483e9fe41757dafaf7bff83eafaa581b8340774ed2612ca197159725c63dd0261ef0b919697ab777b04d2b2874a979752c8bac29c9603de53e75706d2f2aa405a6abbc6f1bf5addeb85d26dacbad6db90be7d10076dffd7a067705ae8fbd722b9a6fbd7211d4cf7af4f4ccb81ba1d77039196587f9c963726c7553e83c3d6e54faab4bc591d6f524753bbf716751cafe49e9981dc5bd5b12685dc4101b90732907bbb3ade9642ee1dc2ac6f36e1695b576330b1be22d1d6e1dcb3db414fa69075a730dafa603d6ef0099168eb9f1489b6de4f24dbfa5dea5eff78faebf1c4181e03d7b63e10d9898edba7d033d856f5fd4f23b9a6fb9f413a98eedf2d126c7dc87c75fdb3c26ceb587f6ceb9f4b8eab7c0687adebf15469f9f90067cd578ff79c8ecebdf419126cffd48bd475e33dbefc89baaf79af923758c93f0b9dc3714820dc217eb843d5f8d7301547a1cad3a153fdeb43f51cc31784b1bd35b422f0dc1745627bea4b01fef7076c6558dcde5ae2721fba87e3a6e72c749be4cbea3a9a9790cfe86ba636573aae0fa8e35702fc862a7967a37378eeab487f5d573ea88e07e2f7faeaf6bb4edf1e488f43665b91bae23e71d836928ef34369e21ca64c1a2912cba491be1d0c4f353efb0df5cc15299ef9963a6a3bf9a692afe77d9ad139dcffb63a1f15b8afc7996f8bb31f9487f4d0b2e19d733288ff77d5f17beaf81d154e9e48e877c57418a63a22db766cb6f736299d468bc43c3fda4f8791ba6fac6df1d434f6f17d75fc813a6e56f2c60418e879ab54e359e9c24a11afd838913886a0e7c77ea8ce753be95c753e21f0fc04f5bc1a538a8d0f3c9f1f785e73fa913a9f98f8bcf8319203e73f89c72da6da52e231744dcfb5fd34ce67942eeb2625862d7e2612fb77ba0f37593d771e7a0f33d0f7cf57e75302719aaace2f40e7703c322057cfb53d1ab8afe54e0be8fb7375fc853a3e118fe3a4d7d13b88a7783c51664a9bfe8992a1e7be2e44e79e4d8f4ad5fed7efaab9aad87425e32274eec9c8cbf3f5cd2ba665c58a02fc0ad17538ce50f72f46e720fb600afdd4f84bac3810b762f5eea319bcabc601632581b89528191ff8711bdd2785ac5faaa31eebd169a86d16e4a1bcdd92aeba4df0b83a9fa574b8049d7b3a8cbe473df76b61b6ed9981f70f26be3f46cf09fe461d7f1bd06d8e481c0bfb9d3afe9eb649f18780ee47c59f69d1efc9807e7a2e4deb7db40af752a487be0ec7b922b18ed2738d6acc31764ce0be9ea31b1bd7a565ae3d551ef963a26d665cbe2a7d62f344627d31cfe73e76b6afc3d8cdeaf9a7d5f16891ba2c7f2620ff5825ff32740ef74de39c7f56c7bf26ca48b0493d063adf90ae2a3dc5b3f17b9375fbf24fe83d38ff0b8a4fba312fd335e577105b10e0b7c0e7374ef549c6dd15e0579b869f7a2e86e70a75588bd0b5e7d4b5c5f16bf2bebe06c7254ab7cbd1b9a7dbf80f027297aae7ae4061c37199ba7e253a87f7547b2bb65c24fae76879c7219d96ab307539f07c208c5211cf071eaff1ba2df834badf15e9a9af6919b81f771a3ac2f5ab541a1c4a0c336d1a98ea801522b14e55f37eb19581f45fe9c777824aff093afd757be1f4d4616bb9e20575be4a24b657f43cc68b481edcbf3a647c5607e2b33a315c293f5d3dfd3775bc373c4fd98782e3df55f86b5478d7a073389621d9ff50d7d0dc5d4ccd3dc6d6aaf7f5f899b6d172f46c397a168e1522b15f53e1a7dda44301d9fabd75eaf9ebd03984a5da21b1f5eafef5eabacea327201dd6a36b703c51bd73033af774c87fd8b79f495710619da4debb119de3304f56f76f42e710b7f989cfc736a8e76e46e79a3196734b404e40af189ad788e971a80753db85e6dad2cf2c57616df7e33e519753cf6526cf78ed0975fca70a6363809b9e437c3c0bd9cf2a19a78ac436dca93ea3c97a9c5097fd7f49138692275e56c75794bc4d4afeade81c8e9b4582cdcb736cfb9522a17c96e79e5e53ea0272b604e4e8b94e9d2e55eafe6d81f7aa50bce0feed7eba4d3937109f74f14eb8d63126e7d0968b1a51291a44819cd4841e4fa6eecefacdf48ece721e157ec1cf4419ec6eb1cf7bb5c6e46dbc4efa32ef16334491d1db78a89c97d0a12f92bf2bbd276aa5d03b6249417c23290850aecefb57835ca59bbcebcba4a735384bd77a77a68995de11deda2ca68b0ddebf4429ebbd60eb44b37756e1fd6e90f2367b6a273f992e4ae0561d7c67ad27d3f7fadee95dd1401bbcf33aa961b9fcbd476a5a23b52ff5aeed963ee8bbc436b1d03bee95a125c7bdd1fbdb1466854266d6d1ecfc4d5df75dcc75322df66203da17485bfcbf14698b1401f49d207fc04f870239837e59524afc1f43bf90814e6aa992315d228b255c2b1205702a1b3951e3981c43b37dfbbc4b4471cab898c940720f973188a7f0030fbe75e88531656f754c8cda0c512087a647a4895a2ab0202f5fcec0848942c78e1d0a41d120fe9809bf5c3a519e43fcfe73b5f2b9f009d049567e89092087332abc526d0daa3cd749e5eba46ac1c8947b4f347be2b4ea4bd56a237f118fff2c486af064554a154c4f24a5772128d759265972859c2eda54a2b533259a1cf7a968933c432d5f4a9d6c5d5a62114fb602d9ca1a92c2b8a9b064f3abbd6a83e9ec37e995fb8f383460d4bc471e2adb5571edcb2f7634a74f37993ed9844aa5507b530a75cb75b64a5f8fa44a9fee2df18aa70ffc9819f6206c3c9d0e14c10e2682dd736de370af5e4aa9f49e0dcf109c5aa6048b2633c05e8411a6578142d8d180b01010f63668253a760d68050a11923b9912a747db54dad91937cc280c0e20e8481a77df94756e58d3ee6ca227dd9f36b3d2d37dc972afd3b0c2bb57e93d5f231ba6707d8d27b1d20b1be42d9021c4fb9f896fa4260be3fa4706c91aa9f69754c7a19e7154cd28e25d0cc40bc15e0718cc409671c1ccd097ce0c5da96c36306a36eb46491e145572774af2e0a8927b5092874495dcd3946de079395cc79f6de24330faaf85debbdbbdc8ec91fd6a683d9a866c526797a11967976132bbe409d34052388da86cd2cb94767071b849c960d20da393ae3725784444c17d286b1b19d5dafa5245c611ad5064f4330987dc3e4a24b7b93ef67e9284f7a085f7a734cf33687ecdc276a1341f40011f1d15f8404af298a89207990a0e6992e7e5b8e0308ff72e53ddc832afcd709af007ea74b8f572900e34d2037e6bbde356a9055c072dd28f13a72e82c60a43474ce6ac25c6c2a6ad62012d8576b2281c2f8b42f0cc59e75df7c7a797c814a895214d336a032150cf6b16ab04ecd8d12c53bb23d15d9c2043b78b0d55a40fa64a9a898692e629533196a2a4194265d9fca85976a8493264d949065b2d045b85a99e6eb2a6480a67021dce3053d1208bfefd6d5a34f81d0b90b7554ec1f8f2560bd874e60c69aa3b3c03dea30ca7c27ba6d10ba346197994c2005ce846067bacc2ff316787a9323bcccb203b70c68aca00c34d96043d30f00d4c1a35048b5eeb753816894d321b9e2e2f03253f756be5a3b562bf1c03f4675392ecad336d6f234cda40c316cab2b40da1feb4e09194e08288828fa0f27861d43c3eca24194a1b981488dac2caa3d42e8aaaf668aa449d6128513f88852b51c750c28b0dc21f69174ef858937030d69999d8480aab1e47092e31e531a8bc17c9c1ac3cef7fbdf7060c9d54cadc9f272bc3786990e7e5f55aef2fa8b0a7a2e7ebbd27fcd9cb307a8ea78c625654a39840a5db6c43babd1532dd2652c2e718842f6f1f4e783e95764799d20eb226d41bd02cd9aeeab6c4d2304fce23e749d781663928532d53ae49a66b9e38d32b38cef28ebbbda7f3643d5027efe5c93dd81a65591b264d2751fa1f6dd2bf1bd27f0dd2304c8893a9726baea1dc8a852cb7a6988443c3e71841347ca0e20ddff0994a613bd6840d6a97255ef3055aaecdf2f9726900352d6de5ea56aa208f34e85520bbcbbb445b36c8a0b7008e164df2ef781305c28e4fe0456978cd17c90d2ffd636e782d10d0f02a12e91b5eada13dd5c09a4615aa0b0d856a2c4ca15a40e58545545e589c555e2834d99c1c456968539ba373d45a291b725ef4063ff463db077bff7298a73803cb6a2d1da7c8fd0d9ae41e9b3eb926284c616c7d0bda4cd3872fb384394f2c957922979a53f9623a556b2f33d4da873a86abb58b4c262b47d01adbd464174b09b930dbe526b395237d2519247e6bea394afae335c942b55a15aa7ed13d4a6e86d128abcd1aef3a14bcf8fe14b9e901b497964ade3b25f97ae957b24d3641cd465e2a8d3cd7f1a40c7d0655011c67a80042b5aa8ba92cb4c290853e08998566526aaf8caa7609a5f62a83da073a85537b16257cb541f8cacee184cf3609878219161244e921cea104c32a89a4e626f427753fa12ad053dc22fb0abaff572dafecf37ed779d7aaa4883ce95ba9278cc3687914c5f67803db3e21d91e4d21581b91ed5c93e05ec2df7d2ecae4da3126c1d0feaa1044fb0bd652846f7fcda3b0af3760bf2b24f663a96c7e42d46c3e9f927c6254c90b28c9274595bc90927c7254c98b4c922111371812117c26c224e2624af82906e11521852fa132e64653d9345e40c72bde48f5bb4ff1718d4ab1554a69f4fedea3eadcea84f11118f3a8559de630f97c29a5e7a9263dfda51ce016036d8a4a3986062196891da1425d46a1df64407f4548f4cb29e19b0dc25f0a29bc94e25569e235244dba564b6f8af8d5e9ded5301c8fa3b4d962d2064ee3e916269c1514d22a03d23bba8543ba928a44b52912306ce3e33bca43b65a0ef855aa65287b64351e1ee32a4a831a93067e734e370cd664d92c584d21dd6a40fa6448a4655489bc2d6a89bc86527bbba9d0ec1e4eede329b56ba3aabdd624195a1da709a2d501ab5fc3b73acaa970eaa8707666154e85291c20b52b2aa9755402d71b12787e8f7009bc9e12de60107e20a4f01328e1a71b843f1a52f88994f04683f0113dc3093f8912de64105e1d52f8c994f0dd06e1b78414be8112de6c107e4f48e1a75046be27aa916fa4d43ec3a0f6805ee1d43e95527b6f54b53719241748679c5c2e00097a3f85f391879d4e33734d056719d3e28f74e153434a9b4de90235f49926954254e59594351d3058d38b2133c1164af85906e1a78434d52a4af8d906e107430aafa6849f6310dea77738e13554629e1b3131b75282c1ad33a92d38555a67bdcc6379f2ab5cb0c27297fa0818ac72af9113d795d2f6e3034e7ae21a96ece629eb6d54365de759fb34ef6a18adb7515a9f6fd21a665e611037de6ef6bb927e37c4e457982726aa56f7c4507a6da76ce002830d1c0a6960b554a42f8c6803a719041748bfc45ad67296f223ad9083f7b0c47eabb4949da1bd4e5397c917655c265f2ccb64984fe7d3952abf7798921bdad69708a26d0dbba675039543b5adeb4ce180cd5e6ab0d9e290e5d64e4af86506e1278614be8b127eb941f8852185d79b8443b306f6bc89d4ac69a0d4bed2a0f6e321d53e9d52fbaaa86a37526a5f6d507b409f706a375165db35a6021d9af2990c8ae4c94cd92c2b28a862d6087f09a8ef2b55e95dad965e54dbe5f91a99356164718bac00fc95ef9be4e0c7363997d8e85dd55e57fb84bf36284f36c7fc7d40f2645150ad7cf176c82b4df2a91a148eb9c2a9551527aea2c28e6eeea692e85a43128d0b9944cd54125d17b1fad94309bede94f6e0cd50e19d3424a44b98f0cea00ad61ba88215b6890a3f68b1978ad74da678f9c3fc7aa4d4b7df8d219b45fba8f4bfd954b2844cfffd94f05b0cc23bf40d27fc4c2a4d6ea5d2e4b6acd2e480291c28f46ecfc48853ccf39d4509be23a2e0b3292bba3362b63b8712fc898882cf350986b4872f0e047d3b414018dfcef3282bbccb608553fb85b3c2f329e19f32085f1952f80594f04f1b843784147e21957f3e43e59fbbb3ca3f175146f3595399061e709bbc7f309453274b6b5dc7d67aa523dc69905d45a80fc358d8c594169f3369d1bf458b42ef37d4bc3037e57b0765afc325940e9f37e9d04fe930c3fb5f253b43f0ce5eef77f61a1ca434b8c7a441179416b086085a466142bb9432df7b0de63bb77f38f3bd8c32df2f50e6fbc5acccf772aa68bacf5034b50f59345d4111fa9281d07b21095d4909bfdf207cc88070c2afa2847fd994b621855f4da5ed0354da7e25abb4bd86ca0e0fa62a9a8a5ab968ba96d2e2aba98ba6e9ad58345d47e9702855d154dc8a45d3f594060fa52b9a4e90e1855bef7083293430dfaf19ccb7cbc070e67b2365be5fa7ccf7e1acccf7260a196c4719a539763345e79b063a3784a4730b45e75b149d47b2a2732b15896f1b22f16ac848dc46a1ff4e44f4b7535a7fd7a0f5e241e1b4be8342ff3d0afdf7b3427f2715891f1822f162c8487c8212fe4383f00e83c309ff2425fc5183f0fc90c2efa2f0ff88c2ffe3acf07f8a324ef8b60959adcd68e56aedd394168f99b488576b45ad58ad7d86d2e1a7261d74b536b315abb5bb290d7e66d2a0ab88576b4be484577dc891aacf5206fc738301bf15d2803f4719f0e394013f9195017f9e8ac42f0c91a81b122e12f750c27f6910fe7848e1f752c90d9fc989522f7c81d2fad706ade70e0da7f51729e1bf3108af0e29fc3e0ac96f4d390046f5538fd3278fe4461bb3f7c74ded1ea5ff1295404f1a126877c804ba9f12fe3b83f05b420aff325564fc9e2a32fe905591f1001589a74c8486858bc45728e17f34083f31a4f0074dc26118f8e94c8a8c14c3c05f35082e903bfcb4cd1c7df2ce4bad3b47ff27132fe31c3d7c6b2af51c7d745da939fa43942dfdd994db42dad24326e130950b5fd2883495fb354af2b351257fdd2419cac2bf6662ff290acd874df62f779edada26f61f654fb4d496ff5cc696ffbcb4fcc9292c3fdace6de694f806653c2f44359e6f52c6f36244e3f996493064d3bf19b2e9ebc3c365d34728ade1a356494d22585fbe4076876ae4b214d382a63cd95cca0be97bf66d4a8f7f98f4803d55c2c9ff0e25ffa588a9f35d2a75fe69489ded23c2a5cef728ad5fa65207f2c876d544d4e951d3b2df47b69e81dfa722f98a21927523c345f20754245f35451272a0f633f0dbb3896e9a61a2f5432ae47f9942863eb9ef5553d0b2dd7441cba638655e86a81661bd391ea53478cda4c160a3062be55fbbd1d728b25b37f6234a977f9b74199ea12ec9fb1187d1e9c794e1bd6e30bc2b8e0867783fa122fc9f8865c26394e037220afe2925f8cd88827f46717ecbc0f9be909c7f4e097fdb20bc615438e18f5348de8988e4099360287ddecd44708aced02f4c82a11ffa5ecb8d403ff4bf229b7ee82f29ecff33605f3e3a1cf65f5191789f8ac4075945e2d754243e3444e260c848fc8612fe9141f8a131e184ff9632cc8f85a13885f5706b05de26a65ab6b175419e2f26c90a6f97fa9db80a214f9ef9d5cf54b9fd45a3acf5fd22b749d4c90d329a045e06ee0f2ac182e68640cb40870383497e15bbb5a538cf9385797548d7be272916b03b5e120bd89705ef35e7b732e3156c7c49f61952c33a819d66b7cb2a282fad8422efe9b02b377e47190cb44893267c421accef4dc2214bb58b1159aa7d2c9b2cf5072a121d0c91c80f1989a7a894ee684a697026370f916e5083abb0f2057a17fe1645a9d2343fe5dd49d21dd51f568ddb75620ea89796a1875013efed9676b5db908bb6480debd100ac2fbb5ef54ec3d8d71f4df48076a758f40d719fa692a6b329698cd253a8fe274a7a1793747f251f64e2822cb6007886b2e0ae060bbe636c380bfe3325bc9b41f87b2185ff85a2d43d16adb5f22c25b84744c17fa570f434e07826248ee74cc2a197d32b13adf7d3829fa770f4365923187b41282a2f50f2fb98e4c3a674c97345ab6441a1f71989df09371ff322a5495f93262001060bc35ac1dfa850fa9942e9268471fd499810ff6e08b1406ee50e1b4fe46af97426df37350f84f68f417194084656d5c6c1d00131180c1d9814b3949f0125c8fdc39456703a3096fc99d2e3569dd7f98e114fb44b4a9a8e74d2bc4419c3209331c00687e048e04f75d6797fe9af47d78634f57f52e10e3685db9b0c77976acb8609fb6593398ec8b5392e92ad90c62ccc718887687c00d134c2188712c6982a74ca185f3171939f2ad894436ef833abe57273c05aef4a996cdbe90f6287673a2c1676bfe6e192ecd8a49867ab1f45fd55534e81598e11b188b31cffa2248f8c2af9354af2115125ffdb24195a25a35aa155fd3a5528e5456c78fd87e2313a2a8f3728c963a24a7e93923c36aae4b728c9e3a24a7e9b923c3eaae47728c913a24a7e9732ba89118dee3d4ae5fca82affd72419da0693325139c5e769fe47a93c39aacaef5394a744a4fc01a5f2d4a82a7f48493e32aae48f28c9d3a24afe98925c1055b28811365718d1e66226c1a0f2f4a82ab7334906532a8a6873ed29c133220aee40092e8e28b8a3493074a1666622f8795a70279360680f94b4427ba033651ab3a29a46179364787e76263c524c4875a540cf8908ba1b651a4745348dee94e0a3230aee41a5dedca8a9d7934abd6322a65e2f2af5e6454cbdde14e4632342ee43099e1f51705f2af516444dbd7e54ea2d8c987afda9d45b1431f50650901747843c9012bc24a2e04154ea2d8d9a7a830d920be4670d61f3b0dcbb5fb6c6a769530f4d2ccb242dc6d3c4865069b13c6a5a0c354986edda4a3351f9625af030ca2e8f8b6897c329c12b220a1e41e5fd9511f3fe482af556454dbd232816ab23b21845092e8b28388f12bc26a2e0d114e4e3a3421e43a9bc36a2ca6329c1e511058fa33a5a15113b5ae3298dd745d47802a5f1fa881a4fa4343e21a2c6f994c62746d4781225f8a488822753284e8e88620aa5f186881a4fa57a86a7b442cff0480ac7c68838a651384e8d88a3802ae236452de20a29d09b5b01f4744aedcaa86a17516a6f6905b567506a574555bb98925c1d55f24c0a484d2b0029a1d4de1a55ed5994e46d5125cfa632f9f688997c0e25b836a2e0a328c1a745147c3425784744c17329c17511051f4309de1951f03ccade7645b5b763a9ee547dc4eed47c8a454344160b2816a74765b19052b931a2ca8ba88e5a53c48eda624af0ee88829750909ba3425e4a41de1311f232aa2a39a315aa92e5148fbd517994523cf645e4711c95b3f747ccd92ba8e6e299119b8b2b29c807a2425e45413e2b22e4d5148bb323b228330d398ef24e63b033be0d3b1e6c500388ad37e8788e8999d10feadc187814c0d7dd79f5a5fca3d698921d52e7bc4c921db427041f6f120ca7e7c7927d2ff54f18dfcbb5542979412b9492e594f00b5b417805553a5c14b5745867920ccf5f9c496aa6989c596f120c3ec897642278006d262750820f46147c2205f9d2a8904f32490657fdcb32513985abfec994ca97475579039519af68a5cc788a2900d8d6e6ca4c983c430bde48c1be2a22ec5329d8574785bdc954e1e579a731f848615b38faea0a239c53ef35195762d7ca4a6c6852ec32d181fcec1955025fd70a25702595f8d7474dfc2d94da37b482da5594f01b5b417835d5b2bc29665853b0589eaef58ca55c2c162b5a363e582d60eb89336402ef50493f4dae3e28f5ee97a94fd537ca2be6f68b694a189ec6a605865f2ffcd592e1f618aea16279b3299617b7c4729dd792824ce767d09df2ef52b51965a35c97e967d0d2962797b4ec3592b89ab951f12817fe17d7168966192f909b482f2e019e0fa70725a942c0ba856df26e22539c5983bcd77b72c2ae51d94a91be85b2271ca21fa719de3b3ead7aaf50dce4d946a34c733fb6156a7f97a0b6f177e9ebad654fdba858de6a8ae5bc402c31733f9e4bd5d7c72a0d569f9842f84eaabc82df0a13b3ed54cc6e33c5ecd88cd26f815cd35c2bf45a8ee82917bf13266eb554dc6e37c5ad2410b7553275b6ab98c1d9de368bc969544cee30c5e48a1c9767f17760f5bafee27835da14a72984956376742ca02e6996cd0c5cea4103abf5cab61d14f53b4dd417649437560a7f7b651b4ab53a2a7e9f30c56f25a355c1d5d36530102bbf395c2b83aef55af7956449924daaeea462fd4953ac8f49196b5ad3b5322efe2e0e7e1c756d0c57ab14a1e47c917d6aeea2e27597295e27856ed995cb3b896d3b9304ffda9a9672a0d1ab0fa0ab13a525984d3ad7533c3e65e2b122277536776dde40c5f9d3543b259c0d681b8645ee5552104ee7b016112666a75331fb8c29664711315b27f3679d6a9bf85d6ddd6b59af727175526af0f4511aa918dd6d8ad152c6d257a7aabf527c8bf0f7516cbd98365131fdac29a67305354a6e2a29126380b72b0726cb652a37cade509557e3ee6bc558eda662f5b94cfa0489e1e216c23a990a8ddeb3900fb7a5a8fd1265b45ecc9aa9987dde14b345694bcecc7a0574199aaacf9a6d49b9878ae33da6382e236d125abc5bbc87745cfded3fe21f90485d969865b6764d780615d77b4d71ad61ee3dec969f01004a7eef60bdb4f6da9692a775fac3d970da4b71fa8289d3ba36eb65a526149dc33e8ac3174d1c1686cc1b36e488fd540cef33c5b034640cf557d1cc29d216f13d938aef974cf15dcb68d94d59b4355a83c0018ac0fdadd506f1cbb605a805c21fabb3a8587d991aa1081baba5f289e4140a963999cb0d13bfb3a9f83d608adfd1115a8ebb656d04fbce6c55fd3c3a561549cf8689d339549cbe122ecd82650fdea73e9de571d61ee752f17b908a5f983ea31fd765aa1d11bf0b331ea95b87add5723c8f8adf574df11b27528f0a56788439b43c9fd2f250eab1bd30a9509e552a70dade0554ac1f32c59afe0a4d45cb543d2e23e2bb02437dd86c6c8b6537be7f21a5f7d74c7acf49dbe32a95738330fa5827f7845d2276cabdb592fbbfa95220fb1ee445547cbe4eb52053e711e80daf91adaa2643bd9ac95c02b446b6b6620c2fa662f870267d64f3dc40a9b43d1807af546354c9e995cbf9814ba8387e831aa1ca641c209358665762641fd383544cbf698ae9f28c523338d3e3e7431defb64cd74ba9d87ecb14db13d3a62befc838f798f965148d47a89165739d91ecc1db562dcccba9187d9b1ac748df0bcd240767d2970ddfdfcddeceafa0387cc7c481fe3217dd6bd03babb6962d5e4969fc5d93c613d2e6ccf87c4d8dbc0afe0cadd362b98ad2f47b264d67a56869052d3d5173ffd3bff1712f8efc72351597ef67e2c344d5734b2cabe3aea162f9036a3e345c39e7f7c992ef26cf71eb4d9ee9f44c96b2408ea8433f234c9cafa5e2fc43539cc70752361e26776eba8ed2f351939e45013d71f914d47999d239d35645b62335d75331f8912906a708be11463d36906a8e015b60a6394fbf1386ca0d14951f673247a8430c53aac46346e5b8d6294d6ea462f61353cc4e6ee3f40e93ced9e6809b28228f65d25b0adbd68ade5ece3eed6fa662fad34c4aab453255fd14dc8d46c17c2b2811c569e2672ac9e0ad3031b8858ac1cf32f7ec8330c3e44c1c3fea7a6ba5d0ad54fc7e4e8dfea56ed1c4f7680feaa8f7c8a7f317b5bf7baa3c995d6d7f1b15ebc7b31975f253b5dc7b788bf0fb6e55a2ad3d9a6fa762f8442639cf4c38bb7642fa1e4e67ef5f2c06cb6d964829fe185ebd7c075a8505a3bd5bb1c2969a615a4b893f2da176885f87f0777aa90179a2a2a56c87e546a925fcc283d3a99df07f26aa6fc2f815a2e17bd48ba4fc3a55de686b9d2609f99e8fb04c6b9ad70aac956fe98559e96261aae5a6a17a0ec72e7d9c36120bad62f253535896477a0c903edc62fa4b48d5112a55db15c047266253b2b4a6f45afc0a426b6fb6a1c1496471ee30e9ee0b58ad460f62b0ae7e930c668dececd26ec569430e6eb1190cf9482940b707d38a5b878a0093b8a1d2dc7cd7ae46e10f783ee3c9ecdcb15d21a4c8af39b1c152c4c5b2ddd7e081f33d66749d43016c7202e18bb138c2df702284af2aea6eed7239e90702e29ffb2b133b9c00f6409738b0df72021b20fcaf2c158ab82f8bcbe0fa748f837b92135c3f033810089f7685a9bd6679b5da09689b451cdaefb8ad2d317b2ef57ed72aaf29ed3be05b9d0be0f27bc4c1fd9e13dc20d91e6dcab85a7001de0da852f80327bcee28ab96258cc0b88069c48838a6a73831754598e20edf2e203a38288ee88f9c88a05b185f05ea029ac7c6c4d13ccd89a693b49e26a78aef0e3de370fec40907b67d2b6be90ee93940dfcf60adac0f9b057858430db8468d92b900f0102a9b9ee104d805954da0264c8bba00e8577de380fecc5d7897c97988f85e136e343e0f201bfa4bae6c482f697001d01dfde3809ee504043ba9e9d6f912b157c6bab9a54909fe5ed5b2c1b9565a58b5b4b73a2f401720c28f86f8574e88f06d5c0c0f46bf60a9664dcba686d58eb7db07a0f1b0e73851f654659ab6b77daac65c27bbd62ea0ba05956dcfe7aa630dfd443cb5acfb8a2eb5ccdeeb1c07f70277c71a83c3eb9d16c8ae36ccf6c45776b900ef001a037b91135e0f54a3c697eff88b065d007508b5cefec63d2cbd4a66bf1d81dd28167b8f37ca905c00b6b95d1cd8df733b5098e82c53ed58795687c6f3ffc13f2c0d4d89c53268971b1a8f758c437b89dbda96c8c9b46619787c3b98f8f6404d5e1baed60bcf05702f2270ffe404d70b655357273fc06343c37a997faacd9f15af9762dcee07cc4556f60af7e8d95a0fda2291f9ce6a2e003c281bb99d3b0684075d29b3776c09479d76c1e92dfc3e6d83bcba5bd5bf092e39e3bc47acd3fc55ec52939ff5f8467eda722e3fe3e9e0fcd05379f959fa85e467d4eacc8f3860911fc2d9273f5411989f715b263f54059e9f5579921faa8b9d1faa019b9f91db4a7e285f8dfcd03d5b93cef4ec7c7ed2844f7ecaee60be71083fdf38289b4f4c45e6a798c9cd2746c0f3d38c22e5673537931f98098cfb869a7d3a0bc137f45fff9fbb6d1682dbe66b0001366d871fbfedf06feeb603588cefa50be579ea9d44a67b3578408711493a247eff40b7114cda744d6845f4ca2482d9b42462c895e2759b701639897306c2f91f9b70ce7012e78908e71bb9c0b98d048ad5df24668a123e9c3db8707e41c471be6913ce622771de8070be6513ce594ee2fc2bc2f9b64d384b9cc4f96384f31d9b704e7712e76a84f35d9b70ce7012e76e84f33d9b70163989b312e1fc2f27ce810a6795ea5606d759e335bc857c203b7281fc0702f93f6e6f1f3d2091e9e0103cdf289f75af293f1f817d9f13ec2881478b321f2d7519ee1108ee07dc4e2fa9ba9d581cd4f46c283b73a17c17a1fc9013656f85b22400d41f478487d8e00de382f72082f7512ee0cdce3d3c36cb7b1cc1fb9813dee0347578622666ed9bb3c17c09c114ed2c8239cb4198ff44306336c12c7610e68b08663b9b60ce7410e6df10ccf636c12c7210e6f30866079b60324e5db0c17c01c1ec68134cc65e391bcca711cc4e36c174b187f32704b33327ccc90a669df7509d3c9abf9518eedb998cf6db9f0bf90a348fd985137937897cbb7457f1dd67b64978ee0d69f44056da951359ba218dc43d1719ad6f3f17ca8dc8faba71a29c9894e12ba5b0b8bbd342ef3f58e71e39e8d62c526d97c80a9bad749d886077cf85dd665655b98872382a027a70a23cc2500464babd3a2bda8bb9d00e4556da93db4a1748efe07ae51309bb5feaaf3a82f7a4f614f5fd6fddaba83a202bedc589523b8a4ff7feef147ade0fea77b8eaf2c8e7390861ef5c209c75d821fc3a42d88713617f119f5ed3c7e007f75c9d467b0841eccb0931bc6f31e3183c1bcebea892e967134e561f0f369cb310cefe36e164f54062c35989700ee0c4d9a7a5de2e3c8c662bff82caca816dd93f4fece7cc7110651f648983728112fb1cadf41ae1cbd412a6adde4b7b735183b3a16c465639987fa0180fb16d123b24ba857271d40e250abe1a5de389485ad1ee8037474f0473482efadfbbe542cba6962161bd724c1f4da347d339a7dad8d0de82d00ecdc58446a6eeaf8ce5279bf3eb5108e6309b60ce7610e62c0473b84d3019dd13d8604e473047d80493d171860de6440473a44d30195dbad86096209847d804d3c5d517c508e6289b6032ba27b0c11c8d60e6d90493719e870de6600473b44d30195dbad8604e4030c7d80493b107c406730c82399613669e481e3f0ae771c458bfb3791c4d43634ae3dad2632e3858cc588ab20d158f47b63ade26988cf53b1bcc6908e6845c8cbbc368e71ea1bf059aa3895e367c0311be899cf886227cc98e5c202cbe28d5e5898c9f20a0f9b9703e283cec9c0fce460827e50261c9618770364238d9eee610e3a8265b7368356a0e4dc9957b4c7c8a0dcf12b14faeb14d5a9c856c74aa3daead2eae5b9b83501e99ab5a3cdd3ea12ebb6ecd4440a7e5c23926f3690b17873a3e8b7016d884937531201bce2b10ce429b70ce7212e71f10cee936e12c7112e7b710ce229b70b26ea9cb867319c239c3269cac7bc0b2e1dc857016db8493758762369c27239c33b95b9e99edd7bf56aa065f0c606c792ee5028abf0253c20954ef793423d07fcfc1b007db3ab4d310bc599cf0868b4c97f825aef7657447789e0bea6234d831db46a88c3d7636a88b10d43936426574e962833a02413dca46a88c353c1bd4fe08ead136426574576083da0b419d6b2354c6a96036a85d11d4636c84cae8acc006b523823a8f13ea0c913c4a9fb86e6391887fefc78f48e2d783123f2d16ff2453856cd1eae16ac64498ca95083007a313e1587b56c7b9b893673764cff3ed5d85c4e824c636a1f70b64a50becd9568d75b53b9b9dee453017da04d3c51d672f423017d904d3c51d679b10ccc536c17471e67e0f82b9c426982eee38bb15c15c6a134c17779cdd86602eb309a68b7bcfad443097db04d3c51d67572198a536c16474656483793182799c4d305ddc7ae512047385dd6eb72eee7bfc5f84772527de9e0aafbf8b4d9decc5fbb26b39b75e61fb0c9940e056e57aebd3cc873d5cdc7aa51f1a4f5a9d2bd7db557244734760c473b1f75aa30cd165d7db21c856cb3881f64a99c99bf8d075e342d70ea15bd3961ef5eeaf74ef87501e9f8b6585f085cbc367596119c2b7d68ebdb6fdd9a30669b1febc10ab653ec385f61454e194dbb46f276b6792cd523f42965a6113ce2227711620eb5c6713ce194ee25c8970aee7c43956242fec5a22f60a705d6816dab5b6cc7bbd5a403772ad04eb6fb95f979b16675f2ec87d511170824d2ee1339ddc58edf308e78936e164fdc0231bce2b11ce936cc239cb499ccf209c27db84b3c4499cdf453837d88493756e9d0de77284f3149b70ce70126703c2b9d1269c454ee2dc80709e9aabb1ce72d9aa6cf6242f10f091a7f56ac957b55cf255e3f458e72908e8267bfc3a5d745768877a4a9b73318fa9f701f317216e915d4dfd90ebdb076d467659998b458887d3a74c8e46f0b6d8eb61cc5801b14db6dd85d056e5c22e67e5de2ed9068ebf8ae055e702de9cdcc363b3bc2710bc1afeea65bb614fa5728f4995a812dad71156b8c3d09b7bcd9eee08e6567bdd1118078cf93eb2839a41dbecd954cd456fe27c64a5dbed98c3347d2f98112ddb3e0dc7212badb5699688d5ed90ad3c1d89709e6613ce2227712e413877e4a22b9959afbcc849ffe25204b3ce26982efa17af423077da04d3c51596f311cc5d36c1747185e55204b3de26982eaeb09c8b6036d804d3c51596c72098a7db04d3c53ed1510866a34d305d9cb2381ac16cb209a68b2b2c672398bb6d82e9e20acb390866b34d1d4ad6690bb60e656784738f4d38599b476c388b11ce336cc2c9ea24c386f36484736f2e3eb733531c6e9fdbb94dc411eecb859b76faa1e2e4e52e0b3ca18d721d30ebc29773634c90d7203bddcf0979a4825ce73d04806b941f7cdcfb3db118c08e5d8c60d9fcdf6722b067e662d5ba06abbf039738cf99aa39e562cb742cc27ba02da7e472b619e57e2e94cfa172f62c4e94a325ca52efa1b51218ac09dea35e8f5beb26f595a385720bca1deafe52ef58e38965dc2880ad2dd015013edb1e874417b3fdeb08e5399c2807a441a963caead03080abd63f01959ee7dabda50ae3e828db962a9310def3ec7556649cac6373c5f93d2a00cecf450140d5fbf10280b11c652b00fe8e305ec0bde9cf1ad5a3d70edda5d23221dbbb5797f741e02ecc85fd15b6d860b5ec90fa6b865ddfcae26b08e345dc03cb006cb10cb84dbf6e54ca05b308c1bc3817ed4bfcb9f16037d3ed31a7c710ca4b72316c577cd80ddbd52084077331a204d6b844d6d1cd5209f8947395cce465e20c3950d7e8dd8306528370795ddb0c04f6527bbc909d74ac41282fcbc5aa8de2402fc8e5bafb7404ef729bd6ffcee4ec8bb3adfffd04c279854d388b9dc47901c279a54d38673989f33708e75536e12c7112e75710ceab6dc2c9bacf1c1bce4508e73536e164dd188d0d671dc279ad4d38591dbed8709e88705e978bed4ee1abc387cf76a70b10beeb6df24862fd5c131bce416852e2069b70b2aecd60c3390fe1bc9113671729a0467e78b151f83e49eeb9c3744299f9264e5c1345982f5ec2b851b31489bf6c09d472304bbe800bf69108f6cdb918c58421b8650286d560f06d9b1cc76c747ab0ad1e21bcc51e9f0d1717abf64625e5ad9c28070a986bac515365be571135e3c3f82502b632b40bb2c9dbec752b7071878f1b11dadbedf960d30c27d700ff08c1bcc326982e4e55fc16c1bcd326982eae01fe2182f9099b60bab806f85104f39336c174710df0f710ccbb6c82e9e21ae01f20989fb209a68b2ed78f20989fb609a68b6b80bf8d607ec626982e762c9f4430efb609a68bbb203d85607ed6ee25018c7d22b6250153d020c8e7b80741528d27f9aa97488f24c6ea88edabab1b10c8cff3af564b04e98f66c240c72e719c1c386e48396fe9e2471adba382e01e7bdc0c5dec6e4e4528efb5693e7d266715c56699f7239c5fb00967b193386f4738bf6813ce122771fe12e1bccf269cac0bfdd870ae4738bf64134ed6e63d1bcef310cefb6dc2c9ba672c1bce6a84f3cb9c38e144af9f746f5aad37c2f4804d563793739098cdea3e89707ec5269cc54ee2bc14e17cd0269cb39cc4f93b84f3ab36e12c7112e72184f3904d38a73b897331c2f9904d3859e72bd970ee4438bf66134ed62da0d9709e84707e9d13e70891b85b1c70681630de1edc232ee8a6cd3896c9e6c5f91ec2fa3027d60901ac5b44b2675ce63e748ca8d99afaebd0b8fc3772e1733c5b1c6e3b277c1359eb3773e1dfa9adb549da1f14014b15bc1ae3ac91bbbb711622ebfc963deedc2eba7d7540281fb1d70b99719298ad0cfd322a00be9d8b6d29a6076cd5e58f89ce45f0be63b70303a34f1d9b03c30494edbfcb89b79788af29c2d511fb5a22b6cae78fc832bf978bbe12de9fcb543abadd4cfa29c2f97d4e9ce302cda43a81d7b69977885fa65eced9b6d0e3b9300f4619fe07f6f881b8e85b771cb2d81fe6722f78c8f8d5813571875f2fff5f08efa336ad6c671d2965c3f931c2f9239b70b20eedb1e19c8ecad11fdb849375e0990d6705c2f9139b069e67722e2f641b78fe22caec8fd984b3d8499c37239c3fb509678993387f8670fecc269cac5b00b1e15c8370fedc269cac4bb3d970ee43381fb70927eb8e4a6c38b7209c4fe462bbb4e96d31fec9d6c97c16e1fb452e068f21e0add212b5ec5dea11f7e0c510bc5fb6fdf22c5dc9b837d6d90935cf7f650b4817672cff8d2cf2d7b680649cb8600359842cf237b68064ec79b3819c8a40fed616908c33e86c20d722904fda0292717d251bc86508e4ef6c01c9d8f46603b91981fcbd2d20193d38d8409623907fb00524e394191bc82a04f2295b40326e92c206720b02f9477b3cdf5cdca3eb7d1147f934770f3bbe1f3128da24396c931b98c26beeb967f542f0fe948bcf82c5dd06cd9e1a1572a407d06e95c276f276142fe602bb03817d8613ec5861fed07cdc490b04ea8f78d359dfc54dd0c6a352f4cfb95c9fe103059f232808161b2b277737f3391e61fd8b3d3e462eee2c370e1503cfe6c22d1bd7f39997b08c68d94ad8639195fe359799bfd653623dfa9e0b169e3307c3fd5c584f42589fcbc584c5ccc368b6e75e94dd9fcfc5de879935eba73bb991e46464892fd804d34567d72311cc176d82e9e256fa7908e6df6c82e9e256fa6310ccbfdb04d3c5bd0d8f4030ff61134c17d7548e42305fb209a68bc374c310cc7fda04d3c5adf48723982fdb04d3c551a40108e62b36c17471c0632082f9aa4deb2a58ab20b675153d10ce7fd984b3c8499c2508e76b36e164fdd6101bce5311ce7fe7c23718a67b0f9f4f291f2be2f85ee7c43740c076a5956a4b2910b5cb7b7cbbf778bd1c22c69f60740f634784f13f9c184789f8427e7fee6793a72e7c12bb4af280a9e10502d6f4c2787ba527003278b570f98babc723b86fd8bbaf0c63239e6deefd0e84f64deeec9faa32d231659db08056360bc6f5a8127acbee1d66184794d87698c94778dfb6b700609ce0602b007e850a8077f83f9ab35cdae75a01b39335aabaaa96a2b477c80e990060c755dedfbef8a5deb1c6135bed60e5d50d017e3717252ce5c8b0485a2cf3269243b94ad89711c6f7723140821b58bab51a6fbfbadda01a8060fe37171e771866fa22c05db00b11d8ffe562abd319e270dbeaf42684f07d7b1cbf5c9c225e82507ec089724c0894e55e982064b728f3fed23dfe26de6a693857b5f40a42fc2127e2a122d101ac410e976c4f69b32e4e842c444dfd8f6cda3961a6939f6cbc13d9e7c736e12c7612e7f908277c0ed31a9cb39cc4f96b84336613ce1227713e8070b6b30927eb9c3c1bce7908677b9b70ce7012e77684b3834d388b9cc47902c2d99113a7ee6a16cadffe11669cca85df9f77b7b77e2a42d8891361b805b02e3ad07647cdf6ceb9b246bfbb0982f62a4bccc1c0c7f35c081f46d6d88513e10084b0a6652db1beedfaf8d17710c6ae9c1893e78a0ef77ddf0721b4dd728b36cc349c8bdfc8ba1aa1ed9e8bf2b3e8b01b381e8b10f6e04418df24b20d1cc1d8e6d847227c3d39f1e909b6ccc6dd8b9c1c79ff3482d9cb26982eb62d3f8360f6b609a68b8bb3ae4730fbd804d3c5c5599f4230fbda04d3c5c559d72298fd6c82e9e2e2aceb10ccfe36c174714ef2208239c026982e2eceba06c11c68134c17b7a7b81bc11c64134c17b7a7b80fc11ccc09334f4475e266ccf86c1d4c81868887e4627c737a8bbd56cb6139dfd3c8f5055bdf40563ad4a669b4999c2528db34da9710ce6136e12c7612e7ad08e7709b70963889f3e708e7089b70b22e7661c3b90ee11c6913ce194ee2dc8f701e61134ed6c63c1bce2a847314274ebdeb6151a015eaf2ec4f2d8297c7094ffbbac3ecf96201abd71b029f512e974df55a393394b8aebdc96977993c8478742eb23b95d993b75571f1dbd41f229c636cc2c93a48c7867334ea5e8eb50927abb7261bcee508e7389beaf6999c33456c75fb3d28b38fb70967b19338af423827d88473969338ff8c704eb40967899338bf8f70e6db849375ff39369c2b10ce4936e164dd308d0d6723c239d9269cac3e206c3837229c5338714e12c115c0d0f9acf6788047b18e67dc8d9b9a9e5be0fdd528679458bd90af8d3101df845aa6533981ebefbf51739e89252b1b48b6efbf8d42967ba42d205dfc20737f04729a2d205dfc20f3b90864812d205dfc20f36404b2d016902e7e47f87204723a27c8c240edde4c2e71a1571a2df29ed8e9e9532fcf20aa39aaebcfe5aaebcb505d5f940bffa64c07f518e797d886f4fe876c79864d30199dc5d8607e806016db04d3c5c1e65711cc9936c1646cd6b3c17c0dc12cb1092663438a0de67f10cc5936c1646cdeb3c17c03c19c6d134cc696291bcc3711cc3936c174f123126f219847d9049371f12b1bccb711cca36d82c9b8f8950de63b08e65c4e98f456bd4bbddfb5c2ff8c4485270004bbbf556f05027b0c2758ffd3cd2bbd07aaa44b185ecfd166db9db3adf2e88cb0cee3c41a6e4f2517976ab747831fc772a28cb6dd0a637dcfb6ddcae79095ceb77ba91763af89ad1018872c770127defea8d2da232b2570bbf5bf7994a3855efbb9206e4236ba3017f3f4b8e6a7aa2bf6fa9ecd2647209c8b72519a2667f94cca531737afea82b2fbe25cd4f9d46c53629defe2be0d9390952ec945733f9b3a9f71bc9ecd462f436097da0ad6c50f485d88c02eb315ac8b9fe63b06815d6e2b58c6d6291bd80204b6d456b08c334f6c60a720b0c7d90ad6c506d650047685ad60194757d9c09e89c0aeb4152ce31c001bd83310d855b6827571e4aa1c815d6d2b58c6d15636b06b11d8324eb07afbe099a20db60f66c37700e15b63cf18808b9bba952294c7e762e02f736f2817dd1e87a0d1a9b536e164dda5840de70289b373c780f0a549c217c9c84274ab447c038c69629900df647f8b8c2aef7ca5ac5e768bcd9e7d6df0fe854b838dde3fd3f598dce56489d82b1ae45590572d65eff4ee82664da2701c280d26d1499944be2c5e1678cc777bcfc0376a21f47da25cf81b7c9479bff57478b344922fb79b8b7f181842804f056f178d32c6891b80e4c7ba484efe6737205e00305fe9aa3fc551aa0ab65a2fce95529346ef990e321cdf84f2633dd1999ef12895d532680109148bf5556902faac9271a9f4e250298f152d6f15c0f7226225de2fbf829fd652b54f531ee53bd599be9e5e26a4486a6915803d66ce8975ad664be962e49b3fbcbf55cec0d748a9a569639a3e7eb45df648912a0513202d0ee7f8af837457c92ecd7470acbbf7d73a2fe57de1f0a19446ef6f50ea9a85ed44c7ff07520350a6760c0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/e26c954fa0295b545952e174da0e0193.asset.meta b/Assets/SerializedUdonPrograms/e26c954fa0295b545952e174da0e0193.asset.meta new file mode 100644 index 0000000..22f80dc --- /dev/null +++ b/Assets/SerializedUdonPrograms/e26c954fa0295b545952e174da0e0193.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6927d13c1c1c26740b5b974784182013 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/e4d9c8e9ec3e9af4e9bbd288b60f982f.asset b/Assets/SerializedUdonPrograms/e4d9c8e9ec3e9af4e9bbd288b60f982f.asset new file mode 100644 index 0000000..a4da100 --- /dev/null +++ b/Assets/SerializedUdonPrograms/e4d9c8e9ec3e9af4e9bbd288b60f982f.asset @@ -0,0 +1,25 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: e4d9c8e9ec3e9af4e9bbd288b60f982f + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed5d59431cc711ee452c87001d0884904042b2245602b10b48e84092c525091d087128716c07615849d820614092ed1c8e1327719c3b71eefbbe9cdb79c85b7e861ff390bce53d8f49574d0fdb33533d3bc36c2dbbd8206deff4f454577d555d55ddd333942485fc89b5cb8f5b624c0c880e312966c503715f7e1b90e582fcb58eecfa51b124cbbbf2735a9e6b172d59ae849fd6d82ef9392c8f96c58abcf2a19891e51c9e1f1769f97d585e9b9647507b47fe4fcb56b15279d1a4181437c4886888d56721710b2f5a567531902b56213ffbc5cbf26c1a99824e9278aa417e8ccb33cb786e41326db77b5a3c8b622dc87333f29a25312f693e87142b26ca047e115651a3ca83f2bf3c23ce69c7506e92ff2b5d75d5aaed79577d95aa7f521d57a8728baabfa08e4b14cd0af55de7639b2a37abb256b58dcb7fff5175db557948e3ed902a5b555f7dda31943b5479589defd78ea1dcaaea075cf4122e7a767f475cf509ad1eca3a757ed045efa8ebbaa3aaac57f5430130daa9ca3675cd45ed585a5cec5f165e25d5aa3ee5d26d4aa303f597d471bbab9d7d7dbd2a8fa9f397b563d95fc95beab8c1ea7755efa5c2691736b67155eed2ea65dda6db1a1f507608a79d556bf550265dfc24ad3e57e9340aaf0dd76bb4ecbadd1a9f765d36def7b8ea6d996dbd5f50c74dea7838805ecb54d9a9be5fd18ea1ec52f557b56390f79f3eb48fbb747a5c95ddc23956bb55d9acca13eafc35176f3d2ede4e68f5509e345c774ac3b65c957b5dd75c779ddfa7ea475cb45ad4f71b013035e9d16ddba785d3964e5bd7c6ed634aefe093de55f5675c389f5165afa06db85795675dfd9e55fdfec3d5ef2e43bff6f9fd2ef9284c6a45c67f42db519fb6549d3d9e0e68ba74b48bc730e25d9631685a2c8a245e081e316868b6afcc1e948174197cc04f2b76bb22c3dfa2244044c6498cbb2bd2cabbc8c8d818abd6f81ec0cf69d9620e89def476f1774f17c0dcbcfc4d6b617d59d65fc2ac0002fb9c3cd32107c61c5e755b0eeba7e5af93ca2dd9edbc4c0dd262427e2e22bddb926d6fcb6c22410ae0be664cd2b4329405596303ba288fe791c371fc7c849ca691fb6159b782f9d27d9931f5cbf225eccd2bfb92fc4ef539a120a379a4131553bd950ed96a1a94d200f749f0efef6b645d3402d097dd54c3b03489def64d8f26dec7d07232e0ac87158d4e842ce6a8eb1249f4e7631e04c3cbe89590b66f0bef1e9918f8c9422303eade83126434fcdf86ebfffedbe1993d71a768dd2289e1bb298b687ec002bd446ca78782bf08f178690a1875c31fa3e0c7d4633c8ff05bede6b05d7805946164722a200629e8886c302affcf21dbcbf2fbbc6cf0b26276062f062fe8d1520a489623d0de309a8d5913d42514d415f9863abb6ff183ba6255ae0cd4f04323586940301b0f2604375108620e769b15413b091b97d1f6aa3c372ddba7d1a343bd6e557dd8432671735ee18f2d4cf68fb9b0a571ad425c0f6a296554ce4c88975288e3aac42c2be213721a64ad50419449cb332bb206aebaa7ea276506037604124d4a0a56926a6aed8f7c7560e46b107958e6c83587260dc4090da440035b28a62b5d4c03bf06c265946ac1b2623379542d7c9f4277b028fb58111771d1705ece7672a1d8ad8115bb0d15dbea516c54fe4c6a2da7d0c769f13379716599f9a4fdad5f5e7b4fa2f40827090fe5f5d4fcd31fefed81f1ae45bc5bc85971388e4c08575008e382c8f3ac08676c6208cfcee1340b265cd348fd860c70cf0b6b3ae6b421677b1bd3ebb8defd1039f1477f4760f4eb107d5841e4e4d6a4994acaa58166ea83b8b43ab34bdb6c22bc3322e12a8a300ce1062af5ac54b8ce60f8b56c6ad6db5fb9b9bf6aca76c1e1afc3a4686d8922acd435044e141b85df9c266c9a5843690bdcc16ee1cd5eff277f3caaa934ab660ba51a8833b1893caa06ce3d402ad3b26d78f5c0026e9bdb6e69dd34a16e767984cbce82493f5b4da3a939c830f51936db4c8adf4b28fe1da01342f1db4dce655f44e7526b22dc1291f00eca5411a39b7934d5208b44b491c26a7ea54bfe1aa30f3980765aef91cc772dc5805c1da51230db278871e3d549935927f51465f029074d0ed34dbcd14c7c27a570b4dbd758151ef4c6069554d8fd3ec0440238b257b6c7647907b94863304d07b821e26f508756f1c9609cc4e1372482df9ee197026ec76fc6814d9b7a2b9a7a61f16c1a4a0d269f9c207cf23325e17cf22e532481db6d9ebc0c8699332f6b712e038608358dd45043879bcfc53c77761ecebf1ea5e20b69706d825ec8cbd6bfc928769bf4d64ee92d7a3ebdc7d4df31aa3fc8be077260234d54afe08e3b083f94023f047b3736d7e2c077f7d36aeea7d9245d8a92ae0a338b65797057fea6519bcbe28cac0b23db5e539f9d549f10f5a6e46f4afe77f66cdd90847370afd9da8c16868f7d263eba283e6a353ec6519fb3b2f4f2138683161307dd14076448f7a1bedf44fdb8c9c3e9d6daa2d971d8317380ea19d2af1394db0891963e6122dc1391f0418a30388f9341085799091f32717c2a22c78729c2b08a713a08619fc5dd56827012b3da39b11e8b5f1338b461e7c11d0c0f0b395efa3a43e1458632d872948881dfe7e3d514f61294ba412b6783a8bbd7acee2326c2e722123e6a227c3e22e1368a30ccb0602b5ea41956bbc90b5c88e8058e9958ee8bca720745197c39eccf8d3a294c9ad81e88ca76ca84f46044a43b29c210aa868210f689695d262c2e46c5a2dbc4f2a5882c1f37817c3922c8274c1c0f47e4b8c744f84a44c2274d84af46247c8a220cd05d0b42789b99f06993bd5d8f6a6f674c663112d12c7a4dbee8460e7cd159131ea351f13867b20d6bdbaa2b4f3e2feca513e7368811014fa03cc690fe82dae2d3813386bb78664a5ac403990601217d7305b4a0e899b6618431cef326c9c628c9ba0c929938714ab7a89d874779a6709e9449b832f763c248f0a44982714a829e4812cce236565b8e11b5ece59643dfc21546920b2649262849c0dae9b4915a8eeb505c821c7d6ab3ee238277e77d17f7d95bb8dd2ddc4cafcf24d5242555ef1aa4b2b5b3e249ade12c4dcd9b868791a9df24d32d4aa6c34699bc8ba49644975022ef593837118ad30113a71fa0383d2df41d2a13c26fe391c5e9f22af6565bbfb1900b6b1a34c9f3414a9e5123f25efdeb236414578b329807a5c13d96864cd23f4549ffe41aa51fc7d5d579a5b5615cc702ed9afd752e64bb6892ed43946c83a163ecb03c7f439eb9bf1a5383fb197f2f1946ca4b26299fa6a47c2ab49496069d728689775150598bd62f9bf07886c2a34f0883055ad23f90324c49be5f94cda7d182410e3fbb0d66cf6bd7f7b049be6729f9aeadeadbbe0da6df04b3f8035ddd11d36ab96c78b5e510c673683186fa49ab08bfa4b081da17b19b651ce3d6c339164aafc8525f2d8faad52b26a93f4c49ddee8a3ae65d91ee789f3de684e1faaa89eb298aebf32e5bd47bcd789c115cb49b97e3664986dc7b689169d9765169304cbc5cbb155e3349769b926c20ab64d638eb931a99458968cb71ca1254cab56aefba49c6694ac634e348b37308fd1508b730a380f1f61c6a303856b9f6b823269c9ea3709a64c609728b01d91548047433d7706792374c38cc50389c0ae9a3f29d178f9aa499a5a4b9b2aa55fb5d19d3ea26cd345e6dfb2fea5cf8cc29786b5ae272f91bc33bcb43c8c992a4a43f7895c46d4fa95599b26f5801b41764bfe04d2756c764f66d28e0354c4f44df11ee5b5f6b7d38369b14d4a8ebd0c69d2e5df04d4dde0781cb9544362d8934ee01db6892823c6571a5d59224ee296a5ba33565e7e22ef4b689b6a1f08f035a04ec9528dc0a711907ec2caac376b1fde8a45684fd6e1e0072397befd976e01c4302f61ec81cbc22004cce4a2b6c1e5f975095c74b5240ed1e2774e05f32fb19f47d0ec50013fcd830cd71c2646d72013b1ac4ae4dd3886200edddd20c68cf7382b6d3352c337656bc03f3ed5806bc1738c1ab59ed9ada4c550c50bd8183b33cee227e316771746dcfbb7b23fe56ccb15ec235e725a437ebce0070536ca1713eaf47f0848f2b4f64b1a644e8a19a08197313813d6826eda5d3d51474bcf01ecf4853a02f787f60d9393b81438ff480d323c13d796aa3a9a5e53ba821579f51dec951e9f0507541045a8b97daaca5108bdcd110e685d6fcedbe6ce43737eee483b29c0bca6e0dca1739a16c26a00cb64c01db94d980ddc605ec290dd8254e603b14b0f3f85cc0147ac7c764c8b0f28b706b228cd0b3b987431af4cb9cd04312e27c1843bf4d051b47d8c06be402af5a036f8513bca32ebb9d17f48ea270f70419edb58a0bf2760df287f90867332a9d5af10d678c50b285b35d1a948f38a1dc4b84b3e07b2f18a1ede582b65583f63127b40d0adabbc6b44b679f35edaae402b34103f3a5420293d132d9c0dca681f9723ec034f94ff7362a46309bb8c0dca281f94a2181c938ccd9c0acd3c0fc48e144f6134518d9f769507e9413caad0aca6e577ccf3c975b7c33a22734f03ec6095e8bf0a6451b3f814f69f07e9c13de1a05afb578378fbb362cda739c93cd3817704203eed5f5f48fc59f04d568507e8213cae0eb4d13c2de511474a73e2bf4355cd01fd6a07f2d1f561c6c39babb08a37c8f06e527f311e5531b28ca6fd7c0fbd47a7a53a71d7615a11deed1a07c9d13ca68eb488cd0b2ad231dd1a0fdf47a5a69de6e74b47141d9a841f999c2093cc5b870dca941f9594e280f0967faa43f6afc5e982b1dd4807e8313e8ba2cc3df969415c6035c30eed060fc5ce1c4fa934538f4f76b50bec96d91d4661c6ad343f16d7828d360fc3c278cfb8960044cac087835fe7d7145587f096ca3cdf04b3480bf503843fe78110ef9bd1a945fe484d29e66766ea06966ad06de9738c183f9ac9e1ed9270685fe6e93e25b2f2ad500fc3227802081797f52f1e58e9b34e0bec23d6c33c0e9dba3edf5cbe2b3bab806de57f3e1f3bc3729eeab26c51730621a785fe3046f8bc1e7b1db1d1b74551a745fe784ce7eb9b26991224f7b86d87666f66a40be5528403226d26c407668407e8313c870cb66c5b84e7e4283f29bf98032d89ca4189fc4d8ad41f92d4e28a3dd72608496ed96434283f6db8563a53d4568a52d1a94dfc98795aee0ab88968d36ba711e5bd9a941fb5d4e68615e4dad43e6695ecd0660a506e0f738016c213c68b83b378c5e946df67d5c83f7fb9cf08204b3d8e90be23a06a069b454c6258b5a2ed0ca35d07ec0095ab83f2d537c8167ab06e40f3981b4972fba36d092ed010dbc1fe5c30a4d0950b14f1deb35207fcc09a4fd748469eab8111e3569d3c0fc492181598c8f9a1cd3c0fc692181c9b8acc106665203f367850426e39e5e3630bb34307f5e486032deb96603f3b406e62f0a094cc667cad8c03cab81f94b4e30c32d0417e38e8a931a94bfe284b2858032dcdc9b3120b1cdbdcf68f0fe9a135ef88bc4d0d8da8f36261b3e2ec2f94e8506d76ff231b0832df816e31339cd1a94bfe584d27e415466c1d7f9366fbbec978defc98b1ee1c2066cf9639dfdb0ad0c3569c0fe8e13d868f77b186d96ed7ecf51b161de62998237dabc0de651a9cc2391655b5722e0beb944805d4e89507b96133e2bb70932b22402de8b48047a91a15b22ea855cd6ab2ab72b4b80bfa50e4fa2c29be367c5349699d75626f18fdb67fe0e5bb0f76bfbd3043bf0a7f67b50768cf605f339b3e05cbc27939234bb7ce6d150eda39524dc1edfd0f2ff4168ef472d49c21388b1ce1cd85e768efea8f7bcce1bda0a4fc3d613ea8bd812d88c62e1f0e25227bd39ec37d95498d69d3bd9ffa47bb59264f35aad3b3c477fe6b46e8b9a95b0ba685f0a201dad07b7cc99568b680f99172f5b63fd9e803fb99e1d89669cae98a9f5c9a3bb28eb1c525d10f64f39fe6593921438a5bf70e219fa8d9a1b79cc98fd450afcc55f1d432a0543ea9df76d3d47b60ebf0d98cf4eca6bad589ac6bf8d368bf4e027fe7f7c76889d6fac0000 + serializedProgramBytesString: + serializedSignature: e0881a6d0cc397d40fc24f5da3e7bef42106860b34e7de5898ffa5964ca3d05c78405c4d4e56b32be90a142b5c6d20cb5f02bbe2b5b84534c2d4da9f5d6b0408 + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: + - _maxEventsPerSecond: 5 + _name: AddSuggestion + _parameters: + - _name: __0_suggestion__param + _type: 37 + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/e4d9c8e9ec3e9af4e9bbd288b60f982f.asset.meta b/Assets/SerializedUdonPrograms/e4d9c8e9ec3e9af4e9bbd288b60f982f.asset.meta new file mode 100644 index 0000000..ae3d44a --- /dev/null +++ b/Assets/SerializedUdonPrograms/e4d9c8e9ec3e9af4e9bbd288b60f982f.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 14514685a562edb4e839700a8ba17202 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/e4ea5e45ddd871547baf1d3abd65fee6.asset b/Assets/SerializedUdonPrograms/e4ea5e45ddd871547baf1d3abd65fee6.asset index 935f76a..ea05dd6 100644 --- a/Assets/SerializedUdonPrograms/e4ea5e45ddd871547baf1d3abd65fee6.asset +++ b/Assets/SerializedUdonPrograms/e4ea5e45ddd871547baf1d3abd65fee6.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed595b57134910ae0e9984282cbaaba0c2eeb24fc6b3e88ce8faae7863cf7a394078e1ecc10003664d0227891efc0bfb7f7cf0c7f85bf4abea99cc90e999219ac6957572984b5faaabbefabababa29b8844b2de0b64e2bb44437a8463bb44f6dbc2de1d9c24f7f85e5cfa983e71eee75d42dd07c4e4fbeaeaa4bb82fe3ab4b3df47c4ddb7836a47e957cbc2fa3af8f2f2eddc59f8f56aa884e35ba4fcfe829cda88b3922d6a5533728536c971ac7fd1ebd45ad2f4af120ae54cde0b68a9aaed4b5a074d86e83fe16b35aa8db469f0e3521734b248ecf715fb1491ea5e059c05f85ebf9dd51a2f963c8aad301b95ca9ae0d0171d8331f5c165d2a687d80320fdb8319071060b0b026f8f5e8162d1a2dbcac26627a2fc9bd8e160d115a4e0ef13e31042bd7c4cf8fb9a78bf247e25d7650033537e82f3cb9d70bba09c03706a4ac63d8265cecd31aee0722ef05d44eb6cc33895d39d867053235d35a2809013dc07753345c95fb1bd1d417ed9751d613deb7c1fc7b781eca6849db3b78378db9164066d6d14cb8b4724debd04df7610d6bef8e31cdbe7be46b7884a12f9583695874798ea87f139ef88ea10e328e04722de3a60ea547ca16c9e54fb5924070781b93169af9adf1be43b7336d3123c3ee9e150b220ffff1e1fdc6d6fcbb0de7a869b7c89525632ec7b42c60595e554d2724649be038458f151d845f99e0672aabd513845fb76b48bbe11d509295e9a803d42c3ed7f07288bfa6ccbe862cfffb10b28f261d51f22ede76242a3e1245795e267ce6f10065813db9a8e6a99e067cc104fcf849039f1f69b2801fefdb1501cf9719c14a0a82793aa421386640d063379d31f141f4aa0ce8c5ad53a4174dfe6113d42babfea9a14c275c0fa4b621ab7424735fbe79b43051cdeac15e7a2289ef6bd125db9f67fb3647c0b98ca6722515b7a9d944904ecb5576cc149a140ad957268d728e8914825afbab90220a5ff1a0966771d4ebf8d4f8c1440df6995accf0c628f59b3a0e41ce09414e4aa5349a944c918983e57943c0fc882b119838d03865fc94627a3d102675a0d6730cdf90af2eb93c1d9447c7df59b26f5b08a9bc255883065b6246fe3ef3474adf67ee8e6ccb9167855e26b8ffaeec4bc334d6645dbe4de9dbab726051280b480bfd4f9ba53fb15783d30c2ab83cc1d4ef9fc9a67c2d2ef06863660e0d9f5669014fe5100a0278c66d4af73a9af4f2e53f838c7f02bf99e45f1701611e3e82a31526d55d00b323e1b48b9f8e63656740f8c391b1ecf372ece47c9892087428ab6a47e4ed0cce0f8ebbff39cd2fc6f95d4d70240aafe6b0e871789dfe9f473e8f231ff3bd7fbe51f0980f976cce665efdf6fafbb1b07860942fd943578ecc6ec3c9e66866f898cc700dd8659b80f1f4dba697f86c0bcf9ac0c207577c51a52d8cb106dfa42df88a31f8aed8846f5222c3a60cbc8b269b7dd97c66600d38c7167014036ed62670d30170db41a4ebe13d2e30aefc2679f6a0acd882b2148372ce2694bf0550eae4be2d2c64257ab24769d39fc139ff6903b81003f8679b004fa54ef2f637bbc0a81878bfd8046f22b1c0443b626bb09db3059b43a726f3f618a45fe3aeafa6a44fd5636509d54c57eb94f97c8013f7782221aa8efaba3ca3f4d9e566ea0e0db79fcc96999fdbce532ce71ff06f7364fe1d45be6eb2f44b72f7890cafb87c8073aaede7e533763a58766664675783e7b5701f5bfe8efc07a8236d9c4f0add5c85fc220000 serializedProgramBytesString: - serializedSignature: 65dcf7babbe73e0c210a2570ae5f53cfb572730d17f39f3d44ae42dc443849381933551fc6150ec401366823572c0001ded9df47fb8e5e92d3ab858b12514806 + serializedSignature: fc77364b71936aa7df4c8004546c86843e9131977b13fa44fbc0c9c604cffb24543823bd1364c46da7d2a8fce63c57699c0cbda7633095523c0d2e8cc7e66800 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/e5bfc452c834dd24ba5c3f13dba714f6.asset b/Assets/SerializedUdonPrograms/e5bfc452c834dd24ba5c3f13dba714f6.asset index 8689c38..b913989 100644 --- a/Assets/SerializedUdonPrograms/e5bfc452c834dd24ba5c3f13dba714f6.asset +++ b/Assets/SerializedUdonPrograms/e5bfc452c834dd24ba5c3f13dba714f6.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9df77f1c4715c0e7649d4e7293edc8967b2f675bd69d2cb91759922559b664d96a495c225f546c0515c73e1b9b9a406821f4167ae81d02249040e801023810e0f3e1c31fc0eff0437e8779b3b3d2bbd999bddd5b3d69d744fae846b7e5cd7bdff7a6cfed15a518ff8955f1973ed6c59a5835eb65836c828df3ff9a783ac67fad77f6f133ec1a4f2ff3d70c3f57c5d6e7b9137eb6c596f3d736feee3acbf23b6fb0019e8e88f3dd6c88ffdfc6ef1de2efe0e830ff1be257c58af94dbdec38eb64a759656c691e117de2a6ebf2580cec8a95f2d746769b9f1d124a41262971aa92bf74f333d7c5b931aeb47ddd7976519835c6cf0df07baeb1512ef34121b1345bc6c43fcc4a16cab49cffc5192b7942be8fcb14f096889ca6de73ab628b94ebecf7bbe5f53de83da465f20fdfb358a6b5ca3db5329dabb967894ceb947bea643a4f73cf3d32dda3dcb347a6f3d13dc5324d2b76a7a5dd8fc9f71532add1dcbb149d2b1111907b7e993cde27df174919a5f27fec17fb9ebd8a3e7ba53eaf5876c6fee522ab52a60b90aea532dda7c8dd67c92d7a4ec97fb94c0f280c0fc874bf3c7eaf22ffa03c7e1fbace3e0ee92179fe7ef41ee75faac83f27dfafb0ec8e9f90ef576a6c74e33a47a68715fb0f5bf9cf6957aeb3d32348fe2a1f7e5c20e53ee172adcdfaa8a2d351eb5cf17ee5bad532ad577c522fd36348d763326d90d79e5764ad51ceab31bbd6bfadc5b73cd8daa8d8da28ef55fd6fb82e5ea55cd7c472e3cd3e7e9c39cbe93ae51ed5e6f53e6cb6ef6956f46cb6ce955c95ef4b64daa25cd722ed795abe4fb85f37294f8d855625165a657a02d95f828ec1ff170cb2da14596d323d89649d94e929961b5709e5b89d871b43db57ed8acdedd2e6179828f309fbba0d32dd22d34d48afad32dd2c8ff1fb4a9f91c736a2fc54261d4ade1d56de89fd326f9bfb3699ee90e9f6a97c12afca634924dbcec7e6725ac9e7b4cce72929e39ff2f84e995679c827c1bcd57dbb902c483ba52e17d17b48cf283a9eb1742c3d2e798ecae3d5480fb7fc3bd17520f701976bbde8bf49a66715fdcfcab44bd1bfcbd2bfacd8d2bfcc666aebbf318ffeb6dccde87a90dfefd58e784cf4084ff03e5a865d6529711178c16bd7d5be337fa7154497c00bfc6c13d96679f7f02a17a0e939f68a7e6996f7bc766b7b8e2b62f391de4de235c3af1811422f39b378de91052837ca7f8750b7f73a3fde2a7acdd0f11de167aa79611f11775de2dda7f3fc37574a1fcf7694779d8778a574836705f22e71b59d57e63309bac8ea3d5d5ca6d5831fe3476ca057f9fb51a161b778bd29341d12dab7f16359319e18e7238a469ede12b9396dbfc6ffd7e5d92391e975d477e44dc7ade182eda6e3dc1ad03e25fa2eaf7964363c02e84b2ec962589c122dece30e4fbcc6d0aa6460c0d62665d40864b19c63bb594a8ce9ba1c04fddbe8b4501fdf16efbd7c80e9668b9e0cb87b95b060cac34f3ebba8f21fff4e9e8be79a56cb52a20bb23a8f696e60415e32b6cc21c1dd8478bc380d8aaaf8633afca2fbd23d83f8adeb46c475fe1d50225aa65c0788e6af87ff738bff8d8afa6d828b84d34d42214bb1512eae5b6432c61cbe4a83e084c0ed6c4cf3a96c025ea4035e3ad3c0f3d7306ec04b27ed9a020e3f7a82650682f97430119ca323287a741748093abb62f67f8dfcde2b9cc44dd1bedee0f7ebba6eee4c611a6c97c254cf739ee0b95edba1f4a7918970b186701a08cfd72959a62809fa1904c74d821704145ca28b09401a7b8834267af931ab7bdc2cce8e883e15f4ae32427a278fe38764df0b3c60bade8e820e31f97b4368e21e2f0b3dc74bb9881718fe506a6b8aa584cee5e099455e5c5e6e7679a9cee51022b1ccacb81caab36ad9980c0a796e08e16a77072ff6ece025c2c15b5c1cec5f37933bcb74d4a15a880dcd0a756b783391c722ffc50b5613e628f453504b8991fcf46bc3abf347ead1cbcb77daebe37a77570877d3a86172fb5c5d2906b72fd5704a0327689fead1cbcb77ee1c8d3bca7785b97ccf3365b9cc2dcb49903ccbdadada7a5f59ce37655969cc727878b8dece571aed2bcb05baf224a6c07a48cb93baa638214206a614c60be810c2bad14eb543a88fde15227a973b8ccbaf82293617eabc06adc34ae6eca6fe97ff38fc5366f64fb949f82a8d70b0ca8ff0453ae1d060c2f8d031a28102312e788c4d8e63ac52eec83361ce73b129cf35ba3c213c07c5cc50867b00bc335860be4b4cf9ae35d99a91335637d9508179de63ca739d2ecf8522cfacb8d22a6650700acbb94257ac452c3d4a5aacbd4e31eb7a7c76be13a27d008dec39c62e9e0e0b2de03868917f6adabdc2583fc90735afa2383433ef13e5f456c0e2d35c31eed0d7661b456d162e9d4df5e4525369d8a42b0d5076faf96f9aff0d283326701c9606acbd357ecac532930e9b753a2c453af40b1697e52c351051e771fce851a9d3032a802d9a962ce690bcc22c79b9c9c2ad3a0ba17301b5b96d539fb0e58688103ff6ac303553db34cdd44b45fe9aa9952658490d2ca7641758ab4cb0b6eb6025443874894af0b6280e7e10ad36e5b54397d75cc5311dfc70d6a753d69872dca9cb71110a76c83523ee29bca8ad35e55ea5cb7d494e51b376aa7504b47f9d49835df9ecbf3979b870fbd79b72afd6e55e91c7fe420be60653c14c690ae6ab25fe0ae6468df094e8e08db0d91a8ce7b663d33b2887ed79dea644605d29198338a3d3d5d4ce6e3205de6e9dfa3e6269b3cedda25f7d96d4ddfe17fdf4eeabf5ecbe3ae1bea50eab5cd7c50cd4b698dcb147570f40ad99dbb16810ba677881c57540ab380bcbb8a99c79353ffedcaad30cfc09db3ecb14cde0b843789d59f83653c5b34f53f15c48f8ab78923ae1d064eef712e22e93badb4dce3a10b0ecec30093ea88b82aa02a2c06e211b459a1577a7786e56e7d93e3be84beb9d26271ed238f1459f4eac322139ac43b26bda9114daa4eed2e90d31758439079569e856c0d6da2251b1d4e76d177a445703f6c80ccbb916ffed82c39a8d666baa7595ba98b898c9f56075e5c75fc57ecc73c5dec0f46bc1f9f23755ee295d2cc0d004760e071a9aa44d929b824aaed149865edb712f755c8d59f06e9d6008a5662f821bcc826b4d825b020aae33096e0d28788f49f0898082f79ac2a22d6858ec33493e1954f27e5d155331d3554cb7dc2c335a50df117698af532130d32243bba19ac9a783a99a39600aa78e80e1745027185c73da64af2abcdd2cfc9029a23a8346d46193e43341251fd149864ecc592fa45d76881c35a9dc1554e57a537074070c8e6326957b82aadc6092dc1b5472a349725f50c94da6a272ef341495e33ae1104df779f1e112b3e066138ffb83f26831493e175472ab29a0cf070ce81326952f0455b9cda4f2c5802a9f34a9fc4050954f9924f70795dc6e927c29a8e40e93e44c50c9a74d921f0c2ab953233925d6c266679234f800d3bda734e025e2ebcdbcce983c3118d413677592c113430155ee32a93c1c54e56e9d64989bb8cc3473240799bd0edccd5b94533c20600161883b372b426844a456e0c032431bffcfba1da60fad85872997e231b17a2e77b78c9fd9931e93455774169d9bb4c85e6bc62bcdd6fe6d2812c362b70658d6367965b3d8b9015774092b86e45e8e6bd27af8045256794e439f58ea1999dc6da2da8d77ddbbf1f243a4d744644447648890487760225ee307e6de467c4e46f699383da4e3d44bcc695cec44ba212c02b953f7f889994238dc6be2f03a1d873aa591b1e6502d6bb2d29e1e7e0c0f4dfdd404f83e3f56dc67b26254678579c614360be30510cba2cb2292d585dce9d0fb7e93de633abd5b14fa38574bd309debcf78b781c620ff39b32b29ebeedaab1db99e9aaa9cf992c1dd7597ac0a787aefbf2d074949bf3267b2674f61c553c97cb11fb0eac863af236ef44c20ea10cb3f7eeb9fb62fa3c75c164d9559d65878d9ed2ed0dc32d4303da11e9cfb642fc75d164d5c33aabea8d56393bbc964d2de2bcb3dfa3d6d75ea5fab1ed01936dd7fc79ccb98b20b7febbacf1a8d9269dfffd58d56fb2eabaceaa66df56593d36e759d583f632bdd952a70cbd9d09fe1b13bb819be5cae36dde3f9a1052b23cbf94d850989eec6be4df7f097a8e71be50567a267b55f977556699f9510bc34c1d4816faa9fb7c56e8fa4dd5a8e784adf3be47d7f9848184b4c896c5498b2d93779ba537c0ab71e9d5a294d8bcb9b3c068caafc54dc86d8e3e86fc7fc2d812705ad61972c36e2f973628f70ee20576dc01c89b73bed5d85d42805dcaa7e1b923106e0d5cbb413183719dffb6c36372e24569f0c8eb29b12d16d87ac488cbeaeb606cf60e862820bb34670ad92dfa486be068064581ef100d7146347ad77222300ad89e8c4d61bb4d89cd7a8890b5b517c67e5180033f369c3750c271eeed8e029eff14019e445c11ae8e3aa7eb293c5e1f93e16ccfcb450fea96e8715d13f206d5f65d7c84206c9abf11b7cf4947114afaa88b929a184b7aacfe933e5ad7a92eabbeab99862eeb9bfecf7b9369287f6f0608dd76e74bd4316fa1ac6396336b8fbf357818e717b90fa161e393a2439007f794e5d4472bbc1858489d741255d96fa5c4b92c0fcedcf9a3341dca762a940711ca47661365eef40121ca062a94bb11ca476702e580ac25b3aeb34b84281354281721946fa344697d38d16a01710bd9c90590612ba7c25682b0bd9d12db0223b661fe1b3d700904eeb170b5cf7b23d83e77209cefa0c45929715e3602c5eaf7b33a3a98655430772298ef0c13cc9a08c25c8160be2b4c30095b693298e508e6bbc30493704c4306731b82f99e30c1dc1d41981b10ccc76702a6a92baeb6e784c59cac35af4430df1b2698840d1019cc9508e6139430616433c0ec073b591beee0eb9c001f19b67954d8e208dbfb28b1f91b5bef89e0d87a1942f9fed92cceb9286b283be764307720981f0813cc2846661582f9c130c124ec0291c15c8f607e284c30093be76430b720981f0e13cc284eeeae45303f12269884fd493298eb10cc8f52c22c67534f0fb3a5e63eb98c0c5e1d15bccd08dec728e12d90f020e36131deb665c3923a19b838153886c07d9c129cbf55c37d115c356c43283f411d83e6e71c9381aba0023717817b722662d0d48c447f22772142f9494a946b35c5d9ebee7952b43554686b10da4f51a2f5bfb218c5e9b31684f3d3e16978080788640d4f1d42f999d9ac3f73bbe1511c6b2f41283f1bae427e208285bc0be1fc5cb87012ce5192e13c85707e9e12e71acfadbbfa795dd2b67d0915d8e308ec539460612d2763d8ff1dbdb59c6284ed0b94d85631fcc0733bb53f93abeb615a2374c7e75622d0cfdc88a07e71365bf3e8efe3ad4628bf4489b2220f4adb52528c64936b5b11c62fcf44447adba44f38ea21dba4df84507e653651e6166e42946485bb16a1fc2a254a7baa63945f644df87a7fcc0329da7a2ab46711daafcd6613943ba0249c14261b50ae4228bf4e89d2ff08881027d908e834c2f90d4a9cf622598d5c18cbb22b33b54846168b9b10bc6f52c2dba08945ab3b0e5fee3dce4e8a4fa25ebdeb66df8b10e06f85a7de8ce276aca508e5b72951ae666e434bdd438e66607049f6f1a824c2fa9d9988506ffd4fc20825eb7f1e4028bf4bddb2c3c5f833fc4d0c7fb98df5bc5f97679944a0655f80707e2f3c7527e1ac3b59ddb906a17c9a3a32fdf53909d784c822f304c2f97d4a9c769fd3b9b7685c5e12bd588c21783f084f8343b87595acc1d98350fe9012a5bdfa03631ed865e467ba83b0db4e36ddb10b817d263c4d4f1437b12e46289f0d57d343f8390ab2a6a71de1fc11254e5822ccb0a907f646793be13c04edc733d15ea7efa239a2ed08de7394f0ac2f62c98adb2d02f663f7a31a77f311bae729d1055b9088620bdd89d0fe243c2d34e1135dc80af87284f2a79428ed3d1b7694de44d31777dbb3d7f623a82fcc447c7a1be510c627d928a715a1fc19254aa8ae714cba3c743a023bd84a11b69f53629b27b059a026d8197e51868b8be6feb53908da2f28a1f91fad44f1f122cd08e72f297156fac4b93f82301b10cc5f85096614f7a1372298bf0e13cc2816f31482f99b30c18ce2c7a0d208e68b618219c5959abd08e66fc304338a8fe6de8760fe2e4c30a3f8c99d4308e6efc304338ab3e28711cc97c204338a4ff83d8a60fe214c30a3b83df51882f9474a9830241e9753baf01d79519e372f43d0fe4409cddfe41961cd483679568f50dea144a97bfc43ee1728db6923bffc0abfeda658e181fdbfa4a31eb2b9a22308edcb3311a5de9620a2f80cb67b10ca3f53a2746e64b9bb63b40281fd4b78629470fa8d2c46572394af50a2f43f351cc5d9cc33ecaef9eeb93440fa2b8444890c89a4cba24832e6f6917febec00d33fdcd93a6bfa529b649eef6e49baae70595ffcb658f287af97eb60f091868cdc429e61535f029782475dc76072c5cf37cdbacb04faeed2fe068863fa52373a6d71331ddf3aa7b334bf7de6189cefe295142cabdfd5f6ff1dfc2edd2ec2b452142ffce9864e7eb115c6f013ff1fbf1794d571c70000 serializedProgramBytesString: - serializedSignature: beb518076df664ed6c0e1a9baefe337110bde5853c6691b1a2bd8378bd769c70a06de52c0f5d181bec666b2a64f2e80065ecbf236c6a7a9a1970d631e601db04 + serializedSignature: 8eb0a9313ddff7af2118b93aa8b36fceba50fef529343deb45d20749609f49fd50867da90ee056db8f42cd0c0c33a6796fe30f363323ed5e7fddec5a3232ad0c programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/e69aa5eaa18f2cf4180ab73180684557.asset b/Assets/SerializedUdonPrograms/e69aa5eaa18f2cf4180ab73180684557.asset new file mode 100644 index 0000000..157edfa --- /dev/null +++ b/Assets/SerializedUdonPrograms/e69aa5eaa18f2cf4180ab73180684557.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: e69aa5eaa18f2cf4180ab73180684557 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e702c1b53885128a1d9a9084002da504a738099496b610488094582348dddddddd5da8bbbbbbbbfeeaee7d77666772cfedcd73777b7bcf6696f75f3ecddedab3cff39d67dc32b299f55f6884f567095bc4a6b0516c312b65d5accafa35c53a565affec33757d01abb58e6bacbf25d6bd112c2bc19bfcbf21a19ed6df59d6591dabb7de6c60abac63b9b85fc4caacdfb3ac77cbac337e75b5f57f99f554a8b9f5d2623695cd67f3588f50b70422968897eae4b510b72bd4cafa3b996db2ee9609a5f847b2c5ad1ed69f22eb4e9db8576929ad9e5bc6761766555af75659efd4b20a4be64a21b1d5136399f8c1ecc340791c248f03acff5bcbdfcde4ef56f2377c3e531e0727f9fc10f05e6bf09b13ba30cefb61fb28ac6d611d1f05e7fcddafe573436d79196be3c81a2e8f23e471a494f95812fab794c75109ec8d27231bc84a86592b791c2d8f3952dfc753fc7e9ecd28742e90c759f604fa8c06df6e0deef36bb91e6c57e1d8cb118ebdec70cc385386df27f2f97c792c90c73152b6f54c974be5b5b1f2382c815ee3ecf7c451f9acf5cd6635f27cbc3c6e278fdb4bddb696ba3e01cebdeaa2c2748294d95b7ee349cd75f53cbfff943cdf411e273ac26b47f9dcd3f27c5292fa24e37f4aa73ef21bcf80738b63f3157164a970efeb08f7bef2dd136d8ecdef70d803fc4f2bb750ca7b36053bb671d8b18dad4b6638fab9843a28f993a59c7e52ee73e09ccb3dd5a56dcde57b9be5f91496386d1b98c4bde9b69c568af50cfb3b2dbadad75b28bb952f4f4ba0a70adb2c47d86649b91552aeb27fa67d1e529c470139fcfde71d72fb3be4f69772551a3129493d67c9e31c799c2f8ff358633cce563acd96c7b9f29bdbb2e834605b797fa7c8bbdd4f74c92d5e182d7084f530f9dd64f3e585f2d83ac9e7d5338b3ce85c248f6d92fc661b792cf6f0cdb6b62fb4fadee10b3312c85c6cf36d550f74b0e4b4de579e2f91c79de571a9e43fd8e1078393f08344baec227561200c2c5dda7492e7bbcae3b2685dd86e0e9d5e489f4ea18152e68be09c1f07c9eb2f8173aeabf4d7368f4899bbcbe31e0e9d97d3e9cc56d8efb56f077c2399f7e2f957896d5fdb1c5b76db62797da543b7a288deada68277951ec9c48752c942a5832f8173ae83625be678ee6570ce8f4322df13bfad77db29df82cff0775f01e7fcfeaa24755dc3627d96cb01e50cf19b7f5ba6ffed5478ae65b1714ff72e3f0e05d7864a79efc8f7ca596c3ea69ee3b6bd0acef9fdd549dab6a7463febbbed27c579771d8b4e7f1646fca1a5f4715621f519cea2e396aa8f6447de09c967adba9b38efa874a992ef8c005c46d8fa75507957b53cd6317d3ebb17e020e3a355376cfc769f37e4b59a38df92beca945ecaee92889cb63da5ee2a1d6b60d171c6f92cbfb65e1ef796c7fde471dfc8b3392a4fdc248ffb48dd543d4ea6cd6c23b8ce8fa3e4fdd7c0397f6e43447637f5eefe0e5d75e17980c3765d1a10cfcf0eb49fed29d3717690cdb6e33d0eb9552cbedf1e6ccbc95569ec21b69c4ecd5dca39d49693a7fce570fbbc93d2e730793c421e8f941cb359545ace8e92d77380df64836bfcd9d71d7c13e9168fe331b69e8de5fb63e5f138799c07640f907a8c8e84556399ef68708f9fcf05f642fbe2e972bc3cb64f60cf40f01c3f9ee0c1fe78f75ac8e3c9d2b65c165de7c9b57d65ab3e71649dc2b47eda45b59f9c6adfef2ce31b3b0dd8c4bf911761dde84ba7cb7bf9c06ee957a131e0da49f25a01f0a53c79ef0c47f8bce1b87f2690a1bb7f16d04177ff6c79fd4d5bf72ed2dfd9390e5b8e70e83a8645a533ecdc585bc533f0db6fb908cbf3e4bb631d61395686cb1771649daf0fcbaebfcbf30b1c6179a1232cc769c2f222796f3c083765df769af0dd1e70506d31172361a9ee5f02e4eaee5f0a74d0ddbf2c3a2cbba972dce5485842fd61585e116b6b683bc7b7df4e222caf92c72be55157eebd5a1e5538bf9384dc6be471431cb96187dc7793907b9d3c5e1b47eef588bea97c4ff9ba6aab99c0a27d9d9f5b7edbfd9538b26e605a5fefa1da0d6e64d1be7e138bf6f51d58acafdf2cef4d8c84bf60c1afedc8627d7d12f013d566770b7806faaababf19c8d5ddbf15e8a0bb7f1b8bf2f59e93e4f5db99ded7a1fed0d7ef88b5553c03bfadf2f1786179a783b3e25bc8a2eb398576f8f474967f0e62f1f3c6bb6cf979aacc7cb7943759ca7f0f9cf3e314c777a7d8dfed25dbbf7a779572dac9eb23ecebbd541fc33d4c5bdeea55ec78ee5e165d9ebadfc1ff0187afa8f62268cb7de01eb46d3a8b2e933c28af83baae78465dd395b912717d481e1f76f09b2ae5bd0fcef9738f02fd55baa6eaacc747ee759ee908df76408fc7f4be22740561e6ba8ca46c7e3c81cd6ed2a4992c3a4d9a69fbc1d6f1da679f96cf1c1be719d5962ddb8f99923f8b45d75f547ba66c2f0dede4b82fe3b548b3555a9d05f450b2f93b1f2461bfacaf321506aaed66368b6e13536da7ba3c22d5726caaf7f6923acd89f61f716e85435f153727c9634d02ff906d2d4ce53bb552de5c0703557788d79e95e85b71ec0acd67d16d08aa2d5bb579cc93f73f94e70b1dcfabf661e52b0b1ccf17399e576dbb320d092d8a7e9ebd01e4f0f33723b6095df8b5b7c035d95ec4de8ef0e927cb16a1e2e86fb3775874fd4ed5e116cbe73e02ef4106eafec7f27c89c3a69de5f927e09c1f973ae4aab6e0d71cf795dc5d1cfaaaf2cd07f2f87ec4c6824ee01dc093bd172d33ae4fbf2965ec2adff9149c5b3edd2f5ef95fbd2bdb9243bb49199f81734b465696ad6f563e2e2bb4bb83df32709d1ff790f73f07e75cf69171f493f5a0d072876dcbe5bb8f24f1ee0a792c71d8562265fc6ddbd6bf531c59caaf3f7284a1f2592e4fb595c2705d05c2939faf943a7c01ce2d1dfaabfcf163a6f7ed158ef7bf8c7e7f5b55465465d94f1dba95b2e8b63019064cf986c627d9970eddcb22cf34eaf79943bf3287deabe577bf027aa8ebfcb88645e7516be4fbeaf9b58efb2a2fd5f5b5c78b23b27f2e54cea2d3fd729b1f5797cb1aa0ca70ff934795aecb325c68cf688ee29cdfbf32a24fb79a38fa7c633f33e4c62474fed67e76e49c249efd4e1e65bf57689dd453d9f183bc5e21af7fedb85e29af7f039ee3f7b791e755f2feb7f2bc469e7f07eeabebfc582defab7eb81fe5314b1e7f6691b45fbecb7e895c639de5f1d708d7e117ca6b3fc9f7f662d1edfa7bd96139f019fbf941721c0bfb4d1efbcbe31fe0dbaa6dfc4ff0edade4f1afc8b747a838f17bfc6f0f51ed0b8a5bad7c4e7266aa2ed117dce7c73af9dc8f8ef7ebe5756933ebe6785fb6b7871a90f7d7cbeb3fcbebdd1defcbf6f5d006c7fbfde451b503aa312fbf8073fede46877d3d1cf2559bfb26877cf5fede0efb7a3ade97edfea17d90f7f775d8d7cbf1beecbf0dede778bf77f473caced0fed1cf35fa6696c667fa47fc63c852f09cf33d2eef5779bd12f055f2605c53d754ff515fe097c9a46f07b0e8f4ed00e9971fd87a86957ffe2d8fcef4ed40169dbe1d28ef279bbe7595efab38d7cd71dedd71dec371ded371decb71dedb71de459eabf6ca7f34dcd4d80c35be47a57dffc6866de3b5fee0da7f2ce273ad1ddfe99364f8c8781f0ac9e34152973f002778ff60c7fdee8efb8744df17f2d47bea7ec87e553cf7671c1de3e92de3494895f10e75e8d5c371ff30c7fd9e8efb873beef772dc3f22fa7ee830f09ebacf8f4746db25f452d7f93143deff2b45bb557c3a8a45c7277e6ec5a7e1ea7bb24f2d7474b41f8664df91c897957f7491c7ef35bef9036b8c5f0392291ba8f44ea6c7a163e4f7ff06e7fcbe4c77449ec9efff134776bcefa9f03856caf9179c83f8103a4edeff0f9c5b8c46a8e7fe8c9627f253eb791e5ca80e2a8c4fd07f3ba4da0f4f6451659e90ac5f878e97df088173f8beec0fcac800e7fcd9bfa2754c999dca8b4f66f1cb02aa4fee14a6cfcb4f65f1cb02723c5de834e4fdd359fcb280ea833bc3f17eb26581331df639cb02b2ff2d749643be7a5ff5af616581b3e5f11ce4fd731df639cb02aadfed3cc7fb5859e07cc773ba30966d19a10b58743ac1cf2dbfcfe6e502dea77ca0bc9e29df9bcbe2e61ba1960ef9174a1f6d06cef97dcd388890ac9b85da46cb88aab3aa31121745de6facf7a9fa5e1b704f8d556901dee347254fb577c5eb13d75d53e5b38b1dfc2eb6f9e5c8f1df390f38f8ed93809f7c2e7409784e7debd2c8b5901c1b16ba0c5cbb145ce3c7cb25fbe6e0dcfa9ddbc721f70af91cfc363f5e29afb700e7fc3d39ae207495b4fd7187bc6b804e57d9df1cadca65ed1ddfb89a45eac9d6f747bfe3e07035907505b8a664803ab6fa3e9365eb8c96320c5e89fe66a230d086cbb52cbacd4db5f15de708ffeb246319feb932fc1bdb4a0f4910fe4a6e0779bc9e45b767cabec95047208fdbda0a97a9fdce0d0e7b6e707cb7234bd88e1752f1ee6ef73c991a032debcba19ba41dadc1393fde08c25fd66f4337836bb2cc11ba45beafc6e22a1fdd0c9edd0c9ee5c75b5974bfc7ad76d88d79c5215bbd27fb2333da82737e94e5a3d0edf2be8a9bea7807d0e176708d1fef94efb407e7960ef96fd8fe33e65ae45b77c9f73a8073f8cdbbe5fd8ee09cdbb6c2f1fc3df2b94ee05c3186723a3be438f5ba17d878af0c834712f8ba6afb9b00ce79783c69db9eaff2b376c9c9d35e537d7baa1e739f839bec97147987db3441fa5ae87e16ddc67bbfcda840b1546959eb043c943c55a75275a707a4ce5b81737e7c30dae7c539f4fd875854fa2cce2dbdc61eeb90f3b043cec38e707944deefe278ef116017bf2ffb9dc75ee8b02781ddd1d73243a26e329395b11256c3b245e176284b7e3aa47a33f1444851d7122578c66744f2cfd6b34dd6ab65bad9888bc55cc77a96c772b5b3117b093f555f9f22fe96584f940ba1dd32623e7167cc27b87215d6bf323095b2ceba3e43ccc4e49329cbad3ba3d81cebc8df5a6105f532eb5fb49425d6672b588375566cfdad11f256586ac73e99c8243eedd2f9ce224ba63d2bb4d2baa280d658e71542c322f177bdd0b44c683fcbba562fe6a856b1356cb275dc28be166b7badf55bf7cd62894cafa37e722876dd9e82aa8269aa650dd73e5bf8e2ff854853840847dfa29b8c87cdb34569f5e89890f83f867622c333935952c668812c14752d97658bfc66510c41f736c65aa8f76f9b7701cb8f6b8b9e0c0feead850591105e50ffd09c8f77e9bc2833dab43c962daa227d1298160f2c97171639ab1b1332339be770459df8433afca20a5ce4237efbb972f19cfb00682132bfe8001043c78bad546d01c83c170be52b846a4e63168914920b2c958a70ffe62b12f0f472b5b85319f5143736267c73b8322d4510c566c089ccc40229431748a2be54dc2471045bce207e30b56ab422124cd9a254d5338e3363df12c5ad0c59e652d1ed9e5be757159ff4d52799fa706923c22595af6121d34c17326dfc8e3e89f38b78e1d2b6d1ae48b8f0fff40cdb21be9d48078c60731dc1b67efb36bf572da4f0f8ee9e21affc0e7726417a801d10274cac0286305383308723eca8d18a65b67668c5154224b7d0054ebba6c99c53736ede2ad0c381201375eece71f356b7aedd52474f3493ac20a5a7ea8c4556e560b675afc47abe4c1440f9f50596c412ebdb5c5ea1f842a49e19fd467cb2bc2e3fd249564bb58ba03a10d480bd6a86116fa5219ec3fdb5abc60d441ae78c0c9df1c8d01a8b66ddbc46b33698e4ee5e25b7c524f7f02ab91d26b9a757c9ed75d146b476ede64bb48934b5a85f93ad77d75ac6ac17f5e706eb7d5dd34cfce8d22be9e8d25b44972ca66b3072a711164d3ae8c28e5fdc5aa7a433e87ae341d71113dcc7a3e04e98b7f5f5ea6d9d75de26ecf0b70264d70ab81cf7991cef66ee1793ba6515eafdab1fc36a27f175c0bc692b5dd87082591ab59e7de6991d6282a71f1e3c5d30e1fdb5366bc23e8ef0aebab017ae56451af68bad6b76a3ea3471b75cb4c48db232bd2a21bf84a996ba29226eaf972182bda7fc60ae588eae416814df63b6659aba98880a7c1ab21ffaf171bf19d9c27746c5f9e46cebef26abfa6d2f0d185949cfcda778c9a30593ffb5ccdca695fcd9f803a92e0e1211c52f2058f4eaa68b01dc49076bc2308787215f41242387a30d27b6dc195d06e1d1a53ba6c9504c93618d9a0c4fab263d304d46609a8c6cd464545a35e98969928d6992d3a8c9e8b46ad20bd32417d324af5193fcb46ad21bd3640ca64941a32663d3aac9d61a4db24596c2673bf89fc0f3f54479370c8ffd79694ed2f9f8e266ce245de4703ceed16894c54324f2074947f96cfc30a11658cad947e787bcecc09709f05a76e88b09df3e0dc2b7d109e77e3b4113c8395da302214b1f4bc6e35feba78b2522dbd9b34962c942eb1b25e28bb5e2896ad91e96beb8b2832eae88ec2d5e59241d7a39c2295eb49928a20db54258e4c9c25c70470a17ec8f7d6d12c5d7b6d57c2d5b9429ca9bc4e163fb99d2ebee852cd9b687c9c2e746c6f139efba621e3740e703bc99690af3de783750279cb7bb4d6d7c3822fc3febbf18e1ed70e18330cda769341f5d9ee14af3c13ae1bce9633af3d8f43104933cc3abe4b02e8289a2f241a4112cd9115633646d723e5bc9f694650ff5dd6ae1ba5c2335c48677faae165af0eb5c8bc423b3e247c8992cb6209c2d0af0d358f2e3c4e8ad98c578b99c270c3b25cc8c74dab84f1af4c9d26cf175b3d860c9d8505dace229cd1c4d4af3862e198b93d20cc3a2ec5caf5176b84e328fb2f334be9ac37d952f74d1a6b736ef9d8d7f6784e63bd9a2c6b87793260d76171f97b75a0c7ab4e5cd637c1b880dc255d7590ebc5e3a4eb1f54cadf58d32e9e45e1203be50475f07e010b3ffd3478785223a4c4c223a505a854580913a4fe27da1bccf38669c4e4f7163812579b988867b89cb9c921dbae5e2d172b63768648bf1b796b8bf8dd269d39ed96b8426ec92e8820bcec604177b149c83c5f1c55ee3f8689de476cc5e63db6b092b17537b67af6ae76129ea524d8afa77c85d8a9a8f09df4523fc9e0c77c2c7e8847367dd35191f89e3d50598e065ba38c6cba75344a93dcbfabfda7a83f7ee9488d89f2532c3486a9025c6bfd58a0c7b0478beda7ac21e2fec46cfb19853ece6d529c661e1b6bb26dc7e76196ee331e17b6884cf6ce64ef87658d82dd785dd6866e78abc58b256e66dd1a96116e323b7b3c460fd06313ca254845c9d08d72cb68f95a2ec671d79f35a96c8072ac4bd2cb12b52ad486bdd84e9f698fe2b74fab701fa2f001abaf9e2042cdd2ad1a45b2197e9d60e3ae13c575ac990820f5f59c87dc1672286ad54878d372f4eb38a2fbce4da209e2f120e50d658562e4d5306b9a346af6cd1704edb099aa8e8c26b0b7c6a439df81d29a2f06f4786d07a2978f13cce59f052ffe90b5eab99ea11f4437bac8035094b54d76812d5909b44b5108b0b6bb1b8509e525c98acf339d15c5fd3a43e87c7a84542368f79de0bfcbc553da6f559f427e427e159e9d271b898e9ce9f5f25c9d5f1c4b4b548f922dbdbd9f04594d0c78975224ef8a939162fa660b9768526d7de9ce92ed79eaa7359d14f53dba42e3b5548f0c36d2b756e2bfa8e0a9208fc74ead94fcc80ab13896aa94c54eda4bb9f587aa156649b65d6759ef0c2fbc3c5f47d5e5e9a2e78570af2d5a24d7b8d2882ea9dbc4a38b9df76628e3e0dcb00aa351980ab52f5742c0ad568a2d0df2ea3d00c4cedbdbcaa3d1353bb56a3f6be2ddca93d0b135ea7113ea7a53be13be984f38499a7b95e6a88b331c17cbdba98e226ef1e51f584558e9ae24a515750f5bf52716593f5b7c2bab64a88c812b319d5d06d375acec1d8aed7b0ede492ed5c0cc1068f6ce7e90473f7dc988ce038c35ce7eb04f3f2d7268694bf78a3a9fbf2d7020cfb3e1aec17bac4be108be6fb7a8de68b30c9fb79955c8449dedfabe4624cf2015e252fc602f1404d20f2d90b6e02710926fc208df06297c277c622e6c1bab46910e39b8b460aa976f529d2ae516255cbea45ca9365251b769e5b1ad53ec2db3cca65a5d94d3c5f8ae979884e4f7bf1043e418597294a441b1affe27cab88ece6abbb60e80fd5a03fd625fa5d31e18769847fe152f8328cd7e13a5e3d13846ba9184a1bb93adabaea86e36e983647e8b4e1a7917073f39ddd31a4476a909edbc61dd23d30238ed219c14750daf8b6b390cd130d7e2572e187f5221b778f7139a6c1d13a0d78ca36a7b160b020c562c10a0ce9311aa4afb8445a82a5c8c77a4d9157626a1fa74b34dbba537b15a6f6f15ed52ed549e6b1f30486943af8fa8eee4b1d65d8774ec2be73724adf598d913ac52ba93558009faa09e049eddc05f05a4cf8691ae1fbba145e8e093f5d23fc1197c2f7c4849fa111dea7bd3be1eb30e1676a8497ba145e81093f4b23fc4c97c22b31e1676b845fe9527815e6e4e77875f26a4ced73356a77ede04eed1a4cedf3bcaabd9746727616f379229f73f493bb897c7cddd3e4066af2554e7593f8127d1f6b52aad5850bcfa12fd4a9e4222bafc3bce9228d377de23212d463c22fd608dfcda5ab3660c22fd1083fd2a5f0f598f04b35c23b7574277c03169897790ccc8d9860be306b4c597084f0ce6a11c7b2c482397c4da32af1ab4aac2b57263aae4b84ef471a9c54c7355f242b4b7a6fadf4e90acbdb475957dd68bd09d3fa0a9dd6bc238637e246cacd7655d2ae86e8c61566b121b2d43dc4955e7b633e70a5c60736bb74b07d30a3aff2e803fbea04f384e8ea64044fc605efa713cc8b87d730a478c897f06c2324ba291eee8f61bf4e833ddf65d43b00137ebd46f85297c20fc484dfa0117ea84be107e984f39c992f22eb29673e1853fb268ddacfb854fb104ced9bbdaa7d28a6f62d1ab5bb7672a7f66158f4dcac4b93783e974cbd3e4b4cca6810692c4f2517307b3d217bb84f8975b5540c045a2bce17885495378ead146998bd5cda72517f5f23bac36aadab6ae0d026662f3491254a14f6e29159a2aba0540e275b27aed489a7cac077f46966b94cfb612aebb681ee702c886ed504d140974174041644b7794c418fc404dfae0b7bde215f6c9dd444858b9bef1d8525ac7760092b5f46d47dbdfb68ccaebb7476f1605ad6d8d867fbefee2e73f663b0f0bf5b97b2b80cff6331e1f7688437efec4ef8715898dc8b85c97d2985c9f1baeff044effe649c384e57d50998e0073c0a3e11f3a2073d46bb9330c10f79147cb24e300f7bbe0cb573782217e06678e22998173ea2f1c2115bb9f3c25331e18f6a84cf7129fc344cf8631ae1352e859f8ec59fc7b1f8f3444af1e70ccc699ed4a5697c62ea72eb1f6f35af10a9b5ca63cbadba13bf53236a3b3c3f74e36167625a3ca5d3a24ba31639d65f9ef3f2ee157b804bea3a9c85e9f0b44e87ada40e79d6ffab44bb097f67a3f537750dcec6347846a7412b10167c1a0c2f19b9f9da3998fb3eab71df095ddcb9efb998fb3e87b9eff329b9ef7958d2f48226696ae632693a1f23f4a286d0ef2e095d80097f4923bc675777c22fc484bfac0b5b97c22fc2c2f6152c6c5f4d296c2fc6a2c36bf192a6dc34274d97605abc1e3f691a9dc6a4e9524c8737e2254df9694c9a2ec334783351d2b4b3f89ebb21fb9763eefb96c67d5b7573e7be5760eefb36e6beefa4e4be5762c8f8a6dd5e8a63576174ded3d039d5259dab313aef63743e4889ce3598111f6a8cf8daa511d762e83ff288fe3a4ceb8f355a4fedee4eebeb31f49f60e83f4d09fd0d98119f698cf8c4a5113762c23fd7086fdec39df09b30e15f6884875d0abf19c3ff2586ffab94f0df823927df5c12cdd6f2d29cad6dc6b4f85aa745245bcb4d63b6762ba6c3373a1d54b636268dd9da6d9806dfea3468cd22d9da34d16753edb2a5ea76cc81bfd338f0cf2e1df80e9d70eec0df630efc434a0e7c2766c48f1a232a7aba33e22e4cf84f1ae1cfb8147e3716dc7c5f4f2ff9c23d98d6bf68b49ed0cb9dd6f762c27fd5082f7529fc3e0cc96fba18c03bbbe3b7d3c7b6e47a6bb3b7db4dcd6ea5bf1f0ba0df350154ef32801ec084ffa1117ea64be10f6249c69f5892f1574a49c64398117feb08f57667c4c398f07f34c297ba14fe884e386f06fe379924234e33f0a31ac1d96299b8a659a32d76f1a0f4aed1f69f8e9776e80f9fe11e7f8d36efba62c3841ec37c2914d2c43697bef4b84e38efcae5fb877beaca7d0293dcccabe427b1fca179c85b96f994ceffc5c285ab9bc4ffbd2ceb15dff33375a4b49edf4278feb0389eef6df1317d483c8d394f4bafcef30ce63cad3c3acfb358346dad89a6df6fed2e9a3e8769dd26a42912f175640b4575a84cccacd0cdc9c912c5a52c97c3a79ec7f468abd3832f0be24efe0b98fc761e43e7452c74da6b42676d1f77a1f312a675072c74781c592b8b882a3cca1a97ac487570dbcb98911d354656f47567e42b98919d7446f218a8c619d8e5d9e891866ecc7a15fb7267dd97799ddc1e5593ddb8775176e3ba2ef359e336822e34780dd3602b9d063db41acc11bfeac52478bbd49fdad4a7d7315dbae874d93a495d6237b771a3d31b98e375d538deb1dbb873bc373183bb794c13dec20477f728f86d4c700f8f82dfc138f7d470bed625e77731e1bd34c26bfab913fe1e86a4b74724efeb048b7d9592111ca732f4814e30af87f60921f5d0bea154eaa11f62d8b7d1609fd9df1df68f3023fa614664a564c4c79811fd35461ce9d2884f30e1db6a846fded69df04f31c71ca04b4ef92c6a7b3f5ab5d249a92863ab843ccc868a0caf4afe8d1e489fc522bbd8f292728db8a392dc3a31d03e4b24cc9199cc76a3129f935be32819a8eff0c6243b8b8d6cd9932512f3529743fb3ec3580cd4b1e00b2dc2e5d2ec526624838dcc2ade2034b497e2578366d78a2c282ba1845ceb69b7930f3ec71c6690c6619abb74982fb02835188b5243528a525f6246843546845d1af11516d2437521cd2790e99b4897c9c6553e7983d72eec5576e2856938eedda16238aaddac1af1ebe818502d3c4335a146dfab177e55af89452b8586d5a001d6965d2d6ba76efceb7f58d00cd304cdd401ee82e66b2c6886eb828657d1e112c26eccf806336384ae4ee4d28c6f31e12335c24f7529fc3b9d70be11cca890f78d60bec78467a741f80f3ae1bcc290934c7125ce4c9e1f31dea335bccf1de88ef74f3ae1bc3926d76b73cccf3ac9bc6b372f44b009c92fd8d7f229bef62be64863d2e048bf61e15da009ef9e83dc85f7ef58788ff51ade7f6021308e2204fec4be369ee26b7f61e1bd5d1ac2fb6f2cbcb7d784f7c0b0bbf0fe07d37c421a34ff170b841d2802e13fec6b1393fada813bbafa1a0b215fdb91c2b690ee6b3c9826a521983274c2454bb2ce94eeb1a620f64cc43fd90cb367721aec69ae13ce23cc144d843974b8bb0893a913ce8b5a53758534adea710a662d30e9d374d2f90dbba6959dc252432d314cd33598eec97687a915267c862e93ca7127bc354669a6c726a53698e0591e05b7c570eca4c1f1b74bd6ed74c2799c9c9d8cd617e082db6338e6e8bc913b7bb62b2a1d30f97375f279c2133ba067aea8cda9f5cc2277dc0d9ae98869324fa70997c07b74dd7a4127ec2bf3755f69c3987692b09b2f76d67c315b6cfdc6d78df46b999662eb8c2f46e17e89960521de8b1a0d46b4a7687bac1786781b49b718cbe27d1fdd675d1756fc745188b73047abb4d3dc835a9edbe7d98c98a0c9c483a60be60c453a67e00b29f3d19ef678b40aeb57bd34aadca5ab77c5be5bacfb6e47f4bb55b2c1d1cdb7bbe9dc71a0dfee38453415d5a6e08e8b43bc25311ad128c4199720ce18efeb983376d7711bc4b92df7919bfd9c9dd016894588cbad2bf345039cdd9c579702d39d436ef785582ac80e88b13c55fd30ea3d743185d78577f15a17ee8949ded5abe45e98e4655e25f7d649e6a592dd42deb7b3da1a4b9476f758f0ea83f1d8c32b8fbe98e4e55e256f83495ee155723f4c728957c95998e4955e25f7c724aff22a795bcce94a3d3add004ce532af2a0fd449e66583d5c9a81c671bbc4198ca6bbcaa3c18a3bcd623e52198cae55e550e6392f7f42a792826799d57c9c330c9155e250fc77caed2a3cf8dc054aef2aaf248cce7aa3dfadc284c708d47c1d998e0bd3c0aced109e6239b6b9311ccdba310c1a3b1f2405d1aca03b9986bd47b758d3c9d64fe7c43323ce28c1acac740aff7087a0ce61a1b3cba46012678a347c163b1d0dbe435f4c661a1b7b7c7d01b8f85de3e1e436f3b0cf2be1e216f8f09decfa3e00958e8edef35f476c042ef008fa137110bbd033d86de8e18e4833c429e84093ed8a3e0422cf40ef11a7a93758d1083add3105f91dcff3932ba2994e99d2b73683261b1134e6c0a161687790d8ba93ac97c30c9e1c9a81c6730c934cc2f8ff0e897d331c1477a143c038bfb47798cfb33b1d03bda6be8cdc2581ce391c54e98e0633d0a9e8d093ecea3e03918e4e3bd429e8ba97c824795e761824ff428783e56d13ac963456b01a6f1c91e355e88697c8a478d17611a9fea51e3224ce3d33c6a5c8c093edda3e0c5188a333ca25882697ca6478d77c66a8667a5a166b814c371b6471cbb6038cef18863572c893bd76b12b70c037d5e1a40ef86a97dbe57b577c7d4be200d6aef81a97da157b59763922ff22a790506e4e2340029c1d4bec4abda2b31c9977a95bc0a8be497798ce4a598e0cb3d0a2ec3045fe151f06a4cf0951e05afc1045fe551f05a4cf0d51e059763fe768d577fdb1353f95a8f2aafd309e6632aae0b791fe758a113ce33a2eb430443502b755fe3c31b6ed07d2d2da344ab30036fa430b01afbda4d145fabc13ce3e63478c65e584cb9c56b4ca9c5d4de9c06b5ebb07cf0d634e483f598e6b7a541f3064cf3dbd3a0f97a4cf33bd2a0f9064cf33bd3a0f9464cf3bbd2a0f9264cf3bbd3a0f9de98e6f7a441f37d30cdef4d83e6fb629adf9706cdf7c334bf3f0d9aef8f097f200dc20fc092c407bd268907628587873c161e0ec242f2e13484e4c198f047d220fc104cf8a369107e2826fcb134083f0c13fe781a841f8e097f220dc28fc0843f9906e1476265a3a728ca46476171f569af71f5680cd2336980740c26fcd934083f1613fe5c1a841f87017fde2bf0e331b55f4883da2760c25f4c83f01331e12fa541f84998f097d320fc644cf82b69107e0a9649bf9a864cfa544cf3d7d2a0f96998e6afa741f3d331cddf4883e667609abf9906cdcfc4347f2b0d9a9f8569fe761a343f1bd3fc9d34687e0ea6f9bb69d0fc5c4cf3f7d2a0f97998e6efa741f3f331e11fa441f8055836f4a1d76ce8429d643e5ee2a364cae871c64b5c8415fe3ff658f8bf1863f189571697602a7fea51e54b7582f9488ccf92111c6724c66598e0cf3d0abe1c83fc8557c8576090bff408f94a2c027e9586087815c6e37f5e795c8df1f8da238f6bb098fd8dc7987dad4e30ef0ffe3619c171fa83afc3207fe715f2f518e4ef3d42be0163f1834716376a04670fb14e43eb9819ebce2f932304d337aaf0471db390839998e8f853884f74cc666ed69e4f455f6c02e44dba60e7a1f37332c1fe139eeedeac13cc4f7f09c54eae56ffc57c2013f7ab5bb054f2d734a4929b31e1bfa541f8ad58eaf0bbd7d4e1369d64fefc1fc984669cd1d7b7eb04f3e9b97f26237821ee26776082fff228f84e0cf2df5e21dfa5939c659dfe938cca71d6e2b81b53f95faf2adf8345c6ffd21419efd57da03f97929104138607e37d18ec503282e3c0be1f839d91e111f603ba0c2fcc555ecc9a6626bfca30dccdda6fa623accdc49a67f04cac578c75c9e880654c0f6229706686f714f8212cf05b780dfc8731b55ba641ed4730e1add220fc51ac64d93a43b368c85471bac87296223695cd6e5c7e7e1ee30b956e1001bc4e06fd28b1bcc82cebfe7ceb4e9570697e455f7ed1cdf9e04f43d7e28e5fcdec356bddedf4fa1866651b9d9587375ab9d82a49f1486747d04af17b96dc12b056ac8e6b47d0598d4f4e6bdcf1217a4de95ac9a348dc2db5243608bbb8dc687a1109fc79777a6092e072b2d14c616475f25e62c971bb08cde318e9b6983fc12fda36e559efd8b4aaad4471b9e51bb522cc6d6b8be52e1b4e6d23efe2d7d3e54f4f6056b6d35939d16125646edb395d8458a5b0d1a9657408c13bf1e20a7ccb8d654f6296b5d759b66352e1572856962e676ab116ef2117b9e3c6b6a730db3ae86c2b70d8365784ce5a69193fdbd864963c8d59d25167c9b13ea7679177f81ae21596d44d8cafdb16d99aa4ce85974376b8153c2f6910c50c98eaf10256fad2b66730ea9d74d40b938a1b7398bdc9ad09a9dab3987d9d75f6cd21f42a7e752ff1196e955d1c2e179f2e677b8b78a84f495209d5e730abb7d259bd435cab714d17095becb5f46d1b556eccafae928462e345eaa1f93c6657179d5dbbb82ed915893bd1653b9d04fbda82c674a0d6ca0f7855c74b493095707e01e3d155c763b62f7936756efe22667337ac9ce2ce07940ff3552c570941309cdd7a841bcb5ec22cebaeb36c3bc4b2c5227e56c8b2895dd556b59625321697c684064d1de565cca21e3a8ba613a6be2a54eda52057327b37bbf459fa0a66694f9da51318d64aae4b29a22d809b467326334528d78adad02a2bc7dd9446ab5ec5acea954c9d20fabbb084b0588442adf52c8f876be2e47ed132d267d96b9865bd75964d49987226572bc0d3d07875d65453cad7311bb7d6d93803f5495ee25d693da46cb5d7f79d26768caa9669229e96e865a63b277c03b3b58fced632e2da43bdd88c9d53b26b074b84b79737a63ce9a90fa7c2e94d8c535f1da7c54d56cb8a4fc83b87b7300edbe8384c7619374c88116f6316f6d35938cba5853b0b8fae4242a429ec7d07b3374b67ef2242cfae4ba1ac910e02ef6204faa7ab0c62a76d85a004426fd57b9855db622d146ead9a2e9e880d21679a93bc5c37f6bd8fd9374067dff61e4a8ef52237e20b4baf96f53cdcaae29867ddd8f40166d3407761e64c7be06ee1893c8f32f7f810b36f10669f9b3aa36deb0c598e88dce53d1ef14b87e92a397e84d9375867df4016bf55b0d8224ca1e5c7989643e2b7edb90985a2944281d2f73ec1ac0eebac1e89c6ade2c6ae7a984644f666e5f96183b62c965afbfea798de43757a8f4f58e39a25fa0679eb6385d899731aab148be7c7d67fe38540ea35c8cf307b866125c8f87184d786178852559d265f4da62f81974656a7d1c2cf310b87275347d6f70dcc12bec7dbc14b641b556c78f9d93ff00566e308ac852a99768064ac4c2dc548ddd22f314b47ea2c9d9954683a7b7aec78a8ec6eca70fd0ab37694cedaa509c395b6659cbacdfc7f188dece4bcdcfe6245636e61877e91f5f84a59aab46b04fa36afc8dbf1eee0f7dc58fa3566698eced2b171724767f9373a9fe4a398eb1c2d7d7a494b6458722979ae6cf906b36534d61f909a2dbca5aaded106ab97b450c46cbb665c259f7663d1b79845b93a8bf6402d8a669a9c4f262329d9a7d21fd6df6164f2d251aae3bb9657883056f7d315dfbec7f4cec7da13dd86e854d1d2502e629bbbb08c97d6a43bfc7ec0388cd17108bbe2a04231766c4eaaa1f623a66d814edb9d506d0bc5d54a9076f0d6dc5ad132a46aecbc4764b675ae2b01a59233a456fbf809b3786cfac227be856eb4fd19d3765cfab4dd3b6ddafe82693b5ea7ed12545b5dee126941286cd4add08a09e5daf15611fd555d28192efa7a532a75f35f3112dbe9482c4b2135d4f5309a9db3fd8631d91e1b8b946a5aa3f45b2effb997e3c6aedf31bb2660232fdde4d86a2285edd3bc8f81d7b5d68b7c9cf7c09468dbab538bbf7f6096eca0b364928710e23d27b6203b9ec7cf11d263dd9f987513bd9750a0c7a592b3f95942f90be3b0233676ce6d2aed2e85f69a2279ad8bfc8df198a4e331df955f14ba0ec9e469a4234efc83d95e98dcb8417d7b80bbd6a0d44a7fa9b708fd8bd93c5967734e4a65aa4ad13760bfd5206a5de90ab1ff30eda7243307050bb16909db28fd0d233ec7526be554772549bcfca4b3982e7ea64e22849198a623918b9250333c5637a64c2b13a6cbe9f1d80ccc82e9c98db0d37bacae35a0e95a1b9b6136ce70d74217bb324253f5dc37c72c9ae9aeb4143b0a217ecf48326384dc8f234a3dfe65621c66e9380c73c14185a9da923e5d6dfc2d308d77d2693c3826be397b3c22e3e0cbc4559e8aa4a72da625a6e9ec74b7d1f3ded4c878428af8d20ab3654e72f9b2beff3071beec6fdf616bcccab95879d15d3a678f7589bd1b9b53155bbf6b58bc7275ac94423152998fdf7063731bcce6793a9b07394236f24dead8d416d3733e5652c07a1b9d3acf903a27db5b9bea08b87698050b7416ecc6e8466eaa3157f1c66e430f4c36e6a977dc50698f515998ccdc0bf54537a94ac4322cc6a52735e98059b64867d9ae4d1cde6ec239d518d0112352944cffbcdbb296f77108a9877d27ccd2e26452ab292254ed10ac077d03b61714b0fc04f6e95232fe961b0b3a63162c4e7ec634ffa69b9809edc3aea72b84b6c2ec5b828daa8c5fa229b22cb4ed72ea3845b413d5c6895f9177e78bb17d769d2ffe4cfbd472fb2e98d53ba7329acfcdf818f7a3a2522b2774c52c5c9a4cccd3134ead9c90b886d3d2fa170af1658ca60929f6d8c86af10e2f15660fb56e89363a3b6718d598e28f8aca1d22d7f9f72badd0e071a2b8316de7cb38c597b04b86bd9492f86f488883ad9719626835732e133545c8af90e98df2d65182903da39c2f7f35ca2a05968bb7d4825789acd0e572a3403e07ad4b6cd3eec80256a1504b6991926591e655db2dced25d79a866c950cdc81ece6d1c9ea23725d66219ff5a33bd0ff588210b63874e775bc03cd97a10e2eb952e179f59202abbf8720d09bfecdc9bdcf9e59142802a0f2614b71824013a71bd84bbd91ddab5ccee3a78c792d93233238707c66e94d8f8126f5345b9afc60267cf4454790e06b02e1008f9fc008570774a849dac1355ad9dc9f8640a2ea04414cdf884b7f96c5d2080ddd82a026c0f4a605d45545dce7258648e6090c1756a1b01b79c12dc561a705c201f18c1a74c3488aba58180b68245a0ada0f6b6e8e839ddfa6b2fc759da3827cbf6ba20800bb78b802ba104c77703e5938b92cd168200ef549029aca484d71644d5f9512d3041c0d4a74f04d32a4a4cad01a6c8421a41407464f708a2524a441d05227b9e45bd558fb0c7fa2cb6ae94cadf41c0f5fbb008ae324a5c2d04aeba4025e9cddb47e0aca684d3d33a99df584552fd82f69cae45228fe4e314ab44aeb840b69c0501e066905eada104d80aa4575c4dde551a04402f748e005a4b9da0cf177d1391757d835120dd17f850397d826efb90ea78899e4417045c33874670ede9579453abed0401d0b95d2280d65102e29b7ca80ace34b65158ddd0e84b7cf069a928b32f1211b25444cf0aeb834180c8ff53102b2821f6652c0a1e6f40e4ab089635eeb7531af0aa4f57d0a4584989b2bdcc0294bf6d92058cc5a2752208a8ce045941157df547ad71ad7a638280e8896d2388aafd6abee1ad117000836a91085259fff796117035d4cd37101c5cadac5034e8409f0b48190db4b4ee4509af1d28744416dfb297fc0b02a8cda0bc5f4bddf9315744bf758eb5a4f908f55af1a52000e34dd00a589dbfcdd1d143b24a03969e55805ea37aface0f9e574e159f0e7259ec89cc08b4064a686d00343e002148458c7d074420ada78e92d344bf7683f87864c5fbc80e0875565da0dcfa5e10c07d02bc6b0325b80e202d0b6a3f241f3ca5606da4eff5b607a8d86df9c1ae4f4e005eb6c9dff6b2452c7aa1a620e062a003646fea36fe45968f4d61c9efb5130480478a8a53cb4c8770e720f0d487e4b9a38e0f1eecc8eca6a41a71b55e96e9a206138eb01e314ef37de060c070cacd8ae184d94238e9812c61d78310c2298e680b275593097b6c270cbb18a61876956384932e1f875d9577c229a5276157cd36615795a2705203eec2ae4699855db796e874c6c7158563baa5c3719b18c2da8ec6b0b62f248c0ca208c719831246fae9c2091a6fc329f520879176ce305a3d0927d149a67bc659300827317a2232c65e3f363e878fb1dff7fff3e1ef397cf8fb7e1c02df5498ff679764f6a72ec9f0f0b5673bf0dc25fe4af7a3adf28443873e313a44efcfad4a2c3a6d5a4795693a2463602ae59a116048da0126e1cc0d24ce3d00ce034dc29917489c17039c07f981730d0a14aabf9c8d61057438db51e1bc8745701e6c12cefc40e2bc1ce03cc4249c630389f35b80f3509370160412e71b00e76126e11c1d489c2b00cec34dc29917489c87039c47988433379038eb00ce232971f660f1cb9dd1ebbbe55ab5633298fda860c2693a479904737400619e0e601e6d12ccdc00c23c13c03cc6249884954b3298670398c79a04333f8030cf05308fa31e58180f667449730c1dcace5428cf01288fa744d94da25c259b889d6b4fd9aadbeb1a11e6e3995420b702204fa01ebeafba0292ed76e2cfd78a6783d72cc7b76d56604fa404db8fc17ea8e4fb61830c170e093aa9295352286e3965d9b32515ca6d410270b21f83840a1c40ed1e4afe1019bcde54f01e017e788a1ff0c6f90f8fccf3de03f04ef5a36c89e5e1d19198b49d9d0c6627108d4f3309e6d800c2ec02609e6e124cc25a0f19cc0e00e61926c124acf790c1ec08609e69124cc2962232982d00ccb34c8249d8524406b33d8079b64930096be56430bf0645a3734c8219c41a4e26f0cc734d82392e8030bb0298e7356dcd1b360807b10bad06a03c9f12e53089b2c27aa8421cd568f205d6ff7c756cde46b45c0e462d6253d96c36598c972e93d7e073859656e5b4c8bb5021bf1620bf807e56e75a3140db1e30be46c00b5e535b3b90155dd894113e7a7f0442efbb800ae57dc0fb2ea244392426c2970861d3655b519915bdcb8477ae178dc10d2cded606a4b0c932aa4500f6c5f4cb9af3c65fbe535a19db20e68a5430de89c1affbd044379e0ae29f20f25fe247e44faee814447f1c09505e4a89721b4d3a9aec7e72a4682753a19d0aa2fa654deba5412f93fe03bcf4726a9485627e66b59c95c6774ee1bd955572a6aa9aab67cf800c5ec1a939407905f5023fcea97733993d6fad5a60dd850edf202a7cdd00be2bfd58b29fe7df95f2e325a2b8ee53ee4d96e59c04105ee507c2b15b1cc22701c2abfd2845e688bff6b150a860ef2017e4d11a8f0388d79834e18f74960519ce09a0b873ad493849a70590e15c09705e67124ed2492b6438af0338af3767c4f0e84016c70f05306f3009661067591c0660de6812cc20ceb2381cc0bcc92498419c6571048079b349308338cbe26800f3169360128e372283790c80b9d924988445233298270098b79a0493708c2619cc1301ccdb4c824938aa830ce64900e6ed26c11c1f4098270398779833cd8fb0944936cdef3480f24e5350924e8b2643f9304079177577c47259e3de7226abb406f8ee3667c61961fa4886727b80f21e3f50c229a773d87c3643ae8db9da7a69a31f2deb64288f601194f7d2e7db7024db72b64ea09b2cd6b95c27454db78e7cf04bcccaf20198ccd71ec0bccf8f111af56205dfbac691976a115075d40dd222cdc7c9d05e0dd0deef57375ab5f0c32d6730d6cf00e203e60cbd0e627de76090053de8477d27d995b508f373b275b5e600bf7cc82498849e4906731680f9b04930095b2fc9604e01301f31092661bb3a19ccf100e6a326c1246cbd24833913c07ccc2498415cd8713a80f9b84930097bc9c960e601984f98049370fc0619cca100e69326c124ec252783390ec07cca24988435723298f900e6d39430b3586c65d2dd4453c2fc9d6ca2e92ea082f94c53ce39770e2a244c45c986148e05befaac493009f37732989300cce7fce807e24d71ebc56c73be2b994f8d7064f886007ccf53e2eb05f0c5cedfe5c2226b6406b963ed4d00f4053f26a970a05bd624951301c217fd4058b0c521dc09207cc9ece21061ab265971e806501c7ad9affe9f48972fecb524efec25eb443b01f8e82be64cc60fe2327ab301ca57fdcac5136d881ae4297e3300d0d7fc28a2c3799245f2e61c5626c4f07ef520c3fc1dc07cdda47d7fc605b2dda82dc87cde3009e79840e2bc1d78e79b26e1245d37930ce7f900e75b26e11c1b489c5f029c6f9b84b32090389f0538df310927e9443f329cbb009cef9a849374eb63329c07029cef99849374b32f329c1500e7fbd4b5225eb5b4572daa67f826358b846a0d62042719d07554402703a01ff8b13d489ea36dc9872639b255ddf605f03ea484b7354b76c1bce825480987caf095e949a05e06ea421f990895b035890ceaa500eac72642251c6e4806750680fa89895009737832a81301d44f4d844a3894860cea7800f53313a1120e5320839a0fa07e6e2254c2813464507300d42f28a18e64d10b90af12b3d7b81a5ce545d68bf50cee44a907bed07aab44a8502beedbcf12829f980c8a54c05702f05f5282cf63b15d77d1930ba7587f2bad7ffcb76d08c7bb5acce2e4cace63bcd36483f8c43a2b38d6cb402b165509d5874518080ba90261048b04c2577e242991e5f761bf54744faa2d34b80b461f0b3cfb7fe6cc8b0fe2168e6300caafcd9d7f4c381c976ce8c40720ea7f63ce1650a4cb5891f9e9d100e6b726c10ce256a3670098df990433885b8d1e06607e6f12cc208e913a12c0fcc1249841dc6a742380f9a3493083b8d5e82600f327936006715fa23d00cc9f4d8219c4ad46970398bf980433885b8d9e0960fe6a12cc202eba761680f99b398b070571e5d983403dfd77b3e78a04718fd68100ef1f9478bbb2c850722ec41e8d5f2c49f834a389cc4bbf0711fe4f4a8ced25467b45c50ad1ae64cb2e6784cb006652816300dc5f7e6fd4987c435c109701dc0144edbffd9a76335744e2758e8e8da9d66bb5e28b419e29320cf8ea3f9440f998437bd154e58375962a1b45f3311936b29514b706d8fea5c4d6216eda4888ae0d15ba0c80eebfa69c8418fcc581060294ac990f2b31e4b32d69258612802f44892ff90d95edbef51ae1b176af39a96732aa7122f7827c3a8312adfb0d1b83b8e4ca5080b3994938730389735780b3b94938f30289f3388033d3249cf981c4f910c0d98212e70016bbb4c034ab485e2646dba9b175f3add74b196f135a24c0da7bab57f853ef21dbcc6400c8fb5bfae1b3c94fe90ee2d2be77029cad4cc2991f489c17009cad4dc239369038ff0770b6310967412071be0870b6350927e99823329cbb029ced4cc29917489c07039ced4dc2991b489c950067074a9c7d586c739dbe916409b3a7d0705179b40d24640dc8ff02ac1d29b1badbe291b0379dac287f3ea82f75a24409fb848a44bda7c1925c68bd5e6af9a4bdf440a99c6f14e43ea12ae09b9d9bd237a387cd0471a0e148e09b5b51a2e47de8ce5971aa7b6d291db84154e07a001fecd254e0760920b89e005cd7a602b76b00c1f502e0ba5182538305d5b2e6f6ba352b45bba57a28e8ab21d70298dd2961aa2158a3993d1bcd56602db3b76e0cfa10acbf00c61e9418d5f23f5bd286cb7301bc9e7e74efa6361b92b05248360ceb6680b657d39610e15860c2116d6451bc1e94107bfb11c5c7fa1fc5c986193c0afc706b3fe08df71f1e59247e1fc0eb435fe059ab59b4bcc862b28aad920aad16cbf4f19ec5e0d599db02987dfd1e4be426bb099e9f8e0329e4367e6436c9cde209e224d2ed8097f63363c45bb1483fab44f4e7e22a69d1922d36790df0d22cead4d41e7b6eb782db35efe298ba4f6163c1287885a2cec04ffb9b34a28874ea1e59e63413f8e6b626e1cc0d24ce0300ce0126e1cc0b24cebb01ce817ef43026ce94b6841ec62301d6417eb46726d78b931bc899e4170198834d8219c499e4570098434c8219c4b5b4f60430c326c10ce25a5a070298434d8219c4b5b4d60098c34c8219c4b5b4d60298c34d8219c466903200738449308338c465358039d22498415c4b6b158039ca2498415c4bab14c0cc36a99e4edae94b564fcf0538734cc2495a3c22c3b91ce01c6d124ed261ff64382f0738732971aa2decc7b02d6d0bfb6b5904619e1f134f1337c44d61cef5100a59ad00bc89b659ee27aa210b37013fcd3767e03f6194271bf87f1640398612655f16bd1d43999c243d9fa9a9d1385a421f2503bb02802da0049be5005b21c688d40b31915122f14aa6412ce4cf0378c79a93041036259379ea2d00e5b8a61c1be2dbd64e1750a16c07508ea744d95fa09c653db44800e34b99ad97af4722fe72b64e00e74b94aeb27edbf7a75bc73231bc217825d4d6a078b59d39d3aa8298826e0d7c757b3fa617602895a5a423eb16529545ef001827f891cfc70e5a4c761d62c2367bb275888b01de1dcc9d804098ef938d09fd02a4a513fd4800b07c3f9200506e6847950074061eba23f564c105b29d49cd759b253c9347fbe0e5e59d80ff4d3267020c61264436d6b316f860a11f7338eca9825bc61aedcd00bcc97ea483398d6961a968ae537baa067b25d82740749e42ddedc6814d151f2e63f6dc5ffee8de601af52271974f86215c3ea28a0ae6540073aa1f69634e9c96a360b7c8bf05504ef3a353237f8bebd4d800104ef7a391987be33451566c104accb15e592522f97c4b992a11e9eb4441bd86057995986900ec0c73a6650571d8e1528072a61f45a07c479932c879f72100de2c4a78bccccfeb3075a0e03353d4b7ed89029b02b9d04e57806f279396cb1b47599b215b2eaf252890cf3609e79840e2bc1178e71c9370922e2d4e86f3348073ae4938c70612e72700e73c9370160412e7c300e77c9370926e1a42867331c0b9c0249ca4bb5c90e1dc1fe05c68124ed2c1d96438f70438175117db970bafdb92f6ae2a02f88a4c1a3d4cba863019ce42506c2f360927e93c4a329ce500e7629370e60512e7ad00e7124a9cad8400be45a7dd35c125076f50600b9036ee4c896b088b6d998c1e79618f5faf14bf79a3708310394d00e666d97b45fb30146b3515ec1d01eca5e60c66252c1291f9ed29209aef620a4ad2d22519ca0701ca5dfde838e3bd3e3318efc9e1fd3d6b44d7596da0fb770e02117b9939c35583b87acc76c01b77f36b94c696b71af6afc02377a7c4d88df19e1e9e439732352e1d1bab41b8053759ead80a80dcc3dc81a9415cacf40a8076b91f13f893eb15cf0be4da46af03982b4c8219c441069f02982526c10ce2da46af02982b4d8219c4b58d5e033057990433886b1bbd0460969a0433886b1bbd0260969904338893f69e0330579b0433886b1b3d0f60ae31096610ebe79f01986b4d8219c4d55dbf0230cbcd991a458892acc1e310d06eb4a7d9f37309ab9764f3739700bceba8673fc66e9548be3d03d998e1de208a575037c425eea82810e3d9098b44995420ef011e5849bfe6463448bb638237b655b19d44cf644ddc71468480c9461935039e5a65ce24952036794c0428ab4d1aff3686326f27f3cc0700ce1a9370e60712e77500e75e26e11c1b489c7f039cb526e12c0824ce0f01ce3a937092aefe4286732dc0596f124ed21a3b19ce5300ce069370926e6f4386733dc0b99e12273f518bea04afa7bc23c0b4817ede2effac1a5e5017338f970c1fd9f65edb007c1b4d8ab4e328bbcdc8226d2b5013df6412ce3181c47913f0cebd4dc2991f489ce7009cfb9884736c20717e0e70ee6b12ce8240e27c0ce0dccf249ca303897309c0b9bf49384907c490e13c00e03cc0249ca47ba791e15c07701e488953edd6abf606e01c78d13d764700e7243fc28e0ab2d9160340f9f320bf6b43cebe49327c13a9f0f5035e793025bec10eaf5cc96247ae273fc69dd053c9eaedb7014f3dc48fa955e3d896b626e133c05b0fa54438c0e1ad7cf5c10d62f1d10a11e1b7e4fdcfab809f1ee6c7241705b94e44729e4d4d971e5aa61db610dcfd819601b4879b3335308863dfb301ca23cc9d8a4538bc8b2ca37a10a4b2479a33109170ec07d940c48dc04b8fa24409d768f7798152323f9c07fcf068b3477112ced1201bc5b910f8e6319478bb00dfb42754c382942f2552b2c2d21fc0478ff5a39104aed9aecb72825dc07f1be03c8e12e740e6dc40112e3ea12fdccf902ffbb665dd4e54982783a87fbc39a33b83386b6337e0b127f89149298fe511bfd4b1dac296d7bcd71378ea89262d8846da4542867318c07992493849dbf4c970ee06709e6c124ed21e27329c17009ca798d4e3348672e10ab21ea77b41d674aa4938f30389f32a80f33493708e0d24ce1f01ced34dc25910489cef009c67988493745d63329c2b01ce334dc249ba861219ce6300ceb34cc249ba4c3419ce7a80f36c4a9cfd58a4d5491df906f4534483499da051cda65aaf72d55631b8af6550d7effc09c03dc78f813ab07124b96e65c28557c85a4aff0358cf6dca5ea5e8cc89b0838eac1bf93c504f3a8f7acc93dd72df04fd4a644d766d00bef3fde894e31f5e2dfc50c9ae928f040f5e0844e30ba8d7fe708eb7f361ed0fb2aee03e00dc857e0f54e41908cfb15731e2bd09c8b28ffe00df454dbf748aca3e8297798c06a9dfc5a6800ce260aede00e425a680241c884006727700f252534012b69f9381dc1980bccc149084830bc940360090979b029270fc1b19c83a00f20a534012b6f89081dc04405e690ac820d69d3700905799029270e00b19c8fd00c8ab4d0149b8882e19c87d00c86bcc991410c435dc070394d7fa393fa886452f8bb225cf0faa0090afa384dc8ec14d997c1ada3a990adb0f2c82ed7a736655105618c99ad2d6030fbc81ba0137b2e7e42cd94b536ebd5c222331193cb259151d801fde4809af2f734e9cd2a789c5224a73b4ab85b04ada74912c82ef07c0dee467e6a3a60344664d72813ca58c3fdc3a887b612c0051ff663ffa6eecccc7b63fe8fb008600bc5bfc5c82c2f6463ebb82a7a253b505f8e02e467e33c0bad98f89543962804b89b47fcbf0cdef40ea79ab39535282b8c54d0140799b1f53a3614933f93c9e102d591e7f2188eab7fb15d563179f08f69cc95f807fdee16736546e29b184f1ad681b98736909df26f55d4085f52ee09b77d20f30886ef098298af8769d6813db950e1fd9de2cdd8157dee547c972cc1634a4ea6e00ef6e4a783d34594ebcdc3b88bbaa2d0611f91e936006717eee5200f35e936006715fe9d900e67d26c10ce2bed27301ccfb4d8219c44d966601980f980433886b6bed04603e6812cc20f6494e03301f32096610f7959e0e603e6c12cc20b6a5ef08603e6212cc2036ba4d02301f35692908d22c886c12de5880f3319370e606126709c0f9b84938f30289f32a80f309bf2741451a8283d7f49bc522e09ef463e6221f14b81e34f9fad2724ee6770b01bea7cc99431bc44927678028fcb42928730389f21180f2194a945d456a582277b3e0a2aaacc7d75a8f578b5ec7bd990f5b319045ee4c10b99ff56b51077b4c86bda84321b31770e0e3ddf84cdb52d1855b6209e0f975290bf2a20eab00dce7fc2800c11533660868cecd427cc049b66d480688f2cf53e26c21ac898c1e0ade90816d81e7bd604a4643da314696d15c09bcee453f06b6a4b6e63f611e4e362af87ae0a52f51e7e1f1bc54594a3a06832f7d4e82f176e0a12f5362ccd26074b7643d612f0fd992f54500ef2bd4b9789190c50b3e7c7dabd5d6bf32a1082f73721a6ba55a6b99bda87df0c65c6e0522fdabe6a6a7845915597afa1140fb1a25dafe02ed4c11dd17b132e19be5721ba522169906b04e04004f165659bf6df1d3ad6319adef9215e8db00c0affb916161e385a7088f25de946e095586d50da4a86f504fe673b664aab1ebc14b39fb02ef7bd38fae335857570d1f91a69060d7cd0703986ff931230dc24c9c7206176c3100fb362558b5e3249fd25cc9b6a41d27af0408df31675a4a10070fee0c50be4b89725b172879219f0ba967f3ad5faa69ae8e36375f4a959b7707b9f97b94887b31e7fa0725a270bfa54d37bd04007ddf8f66e364d7ad1e4789936cddeae600e70726e11c13489c378014f5439370e60712e7a900e74726e11c1b489c1f039c1f9b84b32090381f02383f310927e9e057329c0b00ce4f4dc29917489c7b039c9f998433379038cb01cecffda8b93b37f8286276f348701b3f6a00c22fcce9770fe24ad7fb8362fb97a6a0248dd864283703945f35ed2a70b06e1ec4f9930500e5fffc4a23ed36252e6823f36d4dc21654ed454f8134f26b3f862b44962c2b13aff23623b8b049b487dae2ed750a09233b592fd1f1c043bff1a38f927b6859e37a85ea76d0dbe05f005efaadbfc314b6f48de0c300ed77e68e0021444b3602e42280f67b3fb2a7dc2daef36d0c40f8831fb385f82e67becf16221b2d970df0fde8c72085e4fa2e7303d97bb919c0fcc92498412cbadf0a60fe6c12cc202e7d721980f98b493083b8f4c92d00e6af26c10ce2d227970098bf990433884b9f5c0a60fe6e12cc208eeb381bc0fcc32498415cfae46200f34f93600671f1c7db00ccbf4c8219c4c51fef0330ff6edad676d8964958ff216bcbdc17b465fe63f6cc36c23494acae3e1ce0fdd78fa6e2d18d51bf94c17dab82bd40cad320c2ff478971308beed0b0d768776eb3bd256f03560d3c96353768c4c718ca7c9f6cc4c7fdc0734326e1cc0f24ce6b00ce0c93708e0d24cedf00ce6626e12c0824ce7701cee626e1249d6c4d86730dc0996912cebc40e23c16e06c61124ed21a3d19ce0680b325254eb5b148aea3fe14e42ee07d00bc5694f0d4a4413e84662ae32bcad55895cb32593fb2a70a9609812542005c6bae8e0579a06c2e40dcda8fe88e45f6d8958b09eb456438c3a05ed4c6249ca42df56438e7009c6d4dc2493a4f830ce75100673b9370924e1924c3793fc0d9dea4a2d218cade77b2a2d25d202bea6012cefc40e2bc10e0ec6812ceb181c4f90dc0d9c9249c0581c4f932c0d9d9249ca43b6690e1dc1de0dcca249ca45b3c90e13c14e0ec62124ed271756438ab01ceae94388732e7ca34bc2e5f6af1e01d6ecacec8d4186cc843a1f5ab56742d9376cf35cf2002fe00289976a304de8dc51f47129db29281249bb1391a786e7753400671eaeb2000b287292083b8dfc6c900644f5340128e4f2603390180ec650a48c229086420cf03207b5382cc71e4ee0de8b4417cf6e614eb894a4b9f6a71c64df529afff294484ff4690d76f4d895f8d194db6518fb0bb8eac496f1080d9c72498840370c9600e0130fb9a0433888dcd3d00cc6d4c824958ac2783d90bc0ec67124cc2821419cc3e0066964930098bf76430fb0298fd4d824958322583b90d80b9ad493083b8ed6d3f00738049300927d490c1cc0230079a04937041013298fd01cc419430f12d24a65b7fcb99bd5366b125800b0efe1612ab5904ec604ab07d04d8398c4f9ee123ece0c4ae26dbbd886cba574b807508255677cb000671f98b5120ea8729513af73c500cb6b455ebd601a04329817a5b138cb00045b626d81d20da0f6bda680fbd9410259997ee0dbc743825ca2c0d4a77f391096bf46419d47c80770425de2ea040b55e1498f808fb95d2337d998d7c0115c4bd40741f490911df747c81f5521d8b9ee04d5c16259b71cc804f8ef20ba72ae4632553729c64517c14f0ce6c3ff2f9d81434999c3e886b7fe6014fcdf1239fc73a96a38bf7415cf66a7be0a5a3fda8d9a7521a25ec9a23f3d17301d85c53c10671ebe7d301d83c53c11226056460e703b0f9a682252cec93812d0460c7980a96b093990cec0e006c81a9608358c01a0ec08e35152c61470a19d8e300d871a68225ecee23037b14003bde54b0416c532d0360b733152c61c70a19d85200767b4ab06af78531ac09765f20c3773cc037c19c368020ae89bb0ca0dcc18f86bfe4073e067184f314d03a35d1249ca4eb3b91e1dc0be0dcd1249ca4ab8f91e1bc13e09c448933d1b82867db6910d7b9bf1ac02c34096610d7b9bf1ec09c4c09b3b510a0868f154b02c1eba3ef22f2ed96990ee1d363844f11e9164fb956b1c8a26aa3441f269fa4c5d9adb2cee78882773d5b61f9cf32eb9f3bcabb5bff74d74362e5bc696c23ab1157b9bc5221bbd2bacb35ab633923ac47a6f0406f2d033d2c0a5e851673be8ef3225626bebe8915317bd1b8f9d65f3526b04120098bc5b71758d71a44bd857fa1cad2642dab1516472f2a170eb5129cecfd1cb95d1c6058eaaaf6789c258b7ce596cd25cc5e513a2c702f90b94138d41e9ca9aef559a2c25227b4e2813dd592501bc5bf58e8c50372ad78b3d4b2550d19098bbca848042767c5df5e6dfd2b136f709bca34ef87432d84d771b7b6bb55b97384429da53ff0f7e68aeb25d6d325e258dca871f648ebb15081f5c7ae768d6aac708d9253fa2ae599ba9e5826f786f8d2a6f2200fe9e37945dafc38914576d4e3efaf164320cb84d459092d4d6c1f1e27dac509956cde77bc45db3f8d87bb0c76e1a63d426dad5f8bad90b785f3dd3f6baddf5ca9d1e5192cf3ff019d3c6555b8dc0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/e69aa5eaa18f2cf4180ab73180684557.asset.meta b/Assets/SerializedUdonPrograms/e69aa5eaa18f2cf4180ab73180684557.asset.meta new file mode 100644 index 0000000..aaeae22 --- /dev/null +++ b/Assets/SerializedUdonPrograms/e69aa5eaa18f2cf4180ab73180684557.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b76d62e19818dc84cbe8e649478e8eee +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/e830bf7c2caff4a44956e929a89ae771.asset b/Assets/SerializedUdonPrograms/e830bf7c2caff4a44956e929a89ae771.asset new file mode 100644 index 0000000..bc4df95 --- /dev/null +++ b/Assets/SerializedUdonPrograms/e830bf7c2caff4a44956e929a89ae771.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: e830bf7c2caff4a44956e929a89ae771 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d079c5d45f5f8e7a5f7deeba6bf90b29bb609102065d3208dec260492906c7637c9924db26c490142efbdf72abd294ab0a2a2828214515151515041114151114150fef7cc9dd977de7d73ee7bf7dd3d77e7e6ffdb7cb2776f3bf7cc77cef43333ad0a85f39398e8fc5a235689f962b2582d2ac52eb1d3f96bbe73dce1fc73cff4f595a2ce396e757e973bf7268a822c6fc2cfb8c400e7f712e7ac5e34386f368a0ae7582def978a2ae7ef25cebb55ce195cdde2fcaf729e4ab4715e5a2d4ac40ab15cf44ff4cd22628d7ca95e5d4b40b8121d9cdff3c43ee76e95540a3e52286ff5777e953a77eae5bd1d8ed2fab97562830cd60ee75e85f34e9da871646e96123bd44c12f20fe11e7aab631f75ece5fcefa8fe6eadfeeea0fec6cfb755c7be393edf0fbdd711fd0d84eef479bfbf3afec3f9dfcef973073a8777df55e7035c79adb6f9c81aa48e83d5718892b93307fddbabe3d02ce1f593310cc9ca855907752c50c7e14adf5d797e7fa4cb28712b9207c77f227d0ad0b73ba2fb701c1122ec3a1e3ff0c4e3076e3cb6ba51c5df9beafa28751ca38ea3956ce799def7a86b63d5716016bdc6b9ef89592265b3ce375bd7aaf3a43a8e57c743d4f143a56b2d3a0fab8b8ed309eaf82ff58d930dd7f5f370bf4e9d4f54c7499ef89aac9eab57e78539ea938bfd699dfeadbed180ce1d8e6d36f9c8d2f1fe9127de3f52ef5ee9726cf3554f78b0fd99e41629798d7984e3634f383e7675699bf43c974d072d7f8a3afe47c9dd8dce41eeb501c3d646bd77409d4f15d9f3b6de39dc9be1cae9a05917bbdf69d7c7bdde6eb648b7e5e959f4d471fb89276e3f51726b945c1dfe99ee7942731e8ae4c0fb7b3c723ff5c8fd54c9d57984b6f16c7aea747fb83a1ea98e4788a6743cfa0575ed3075d42cfe2bd2f380ffaae3a1a977fb5d19909b5f1c1de589eb81eaf8bf2c32f5fb73d4b1638ecfeb67e686d0799e3a76caf19b9dd4717e886f76766da1c3fb1e5b28ce22b3c4e5dba101e9e0c8e9789a3a5fa08e0bd571917b4c24d2ed409e67b3836cba2c56ba0814078e2e9d7aa8f325ea7874ba2ee2188f4e7b9b51a7cf94cc7de83ce1fe29af9f82ce41d795ee773a3dad9e5faa8ecb3c3a2f67d47985fb5ed72ec8367279cfcfbe56bae1eb5ce4caee5ca6ae1febd16d5e4aef0e25e85dad472ee9a154b168ed61dc5ae9a0d996799e3b159dc3b155ea7bf26fe7dd2edab6faa3ebf0ee69e81ceeafca51d73522d366410eaad72754bdbe8bcaffbbe8f83c4e64a63dd3bb706c83aea9f2b0cb6beabdb522b31cd3cf41d8f6a373b8bf3ac7b01d6fd0cf91d1758ecfbb2788f4fc674eca1edabfacaead53fab41369694b9ec3fd61a9771235eada7af7bcbbd665837a07b51de4df8e7edd74797aa23a6e16e6727613e2a0d2a3d3046efaf69057d5b58d3edfaa54cf5478c2bd3225a7b36a8b75d7f9987e672cf12c5cab52c76a75d41cb6a79e1dabd3b72e1b4f52bae93ab22ea3b7a2eb70eca8ee9f8ecee1b92d29d97d9f55d7745d43eb6a8a4fdd5ed46137e5017e76b6cb7d76c07a755eebb2edfea447ee06e16fb727bb72c67daaceeb5c393dda049453efca49ea3a50a37bde43eba36d50d76b553d2dd149a4e5e542e7e928df4b7442d7e0d9333c7cb3e9e6c7f11457cfa6fabdca0f852ecb8f40b27b293dbaa4e2aaa9ceb70fdd83735df7dbed099f9f2e2acf115db384a7377a0e8ea78708bfdf3d9db79ca5c2d655a4b579e4b96327bd86f8c83a5b18edb4b76e839ee3deefa9f99c8bc204dfe89662dd644be7a97bdd51b8955d257aa06b67aa6b3d53d7a43cb877be277ecef4dcbf00c930ddbf10e960ba7f91ba7e96ab7b6ff5bcb8d81396dd225dd71e222d9f1197648635d1c3f3edb303c4e5a5eadd5e9eb8eca5e2e56d1f599799e3b2cf47eafc724f5c5ee189cbde86b854e57aa20f8ab7d1ea1aee17d4f1db0f71d061bb8a884b7dff6a24d774ff1aa483e9feb5e971d957d7e3ae23e212eb8fe3f2faccb0ca67f0b7cfc9212e6f54c71bd4d154efbd491dc72ab9e7e620f76675dce223b7bf47ee7939c8d57d85b7f8c8bd8dd0379fef695b577d3009dd37d080ce1dbbedf78a8facdb85d1d6fbeb7e833b44baaddf29d26d7d80c8b4f5bbd43ddc9f76a8ba364864dafa606427ba8ef339f40cb6557dff6e24d774ff1ea483e9febd22cdd607cc51d7ef13665bc7fa635bbf3f33ac89419e6feb72dc2f2e1ff070d67c75bffb29e8dc899f01defa4fadf02f1b1f74e58fd7f5cc8794bca14afef9e81c8ec33cdf1de67e77a0eaff1aa4c740baa8eb13ddeb03f518c3c3c258df1a58e679ee11915e9ffabc87ff173cb65290b2b7a6b03c8aeee1b08d10e97592c7d4f59128ae46a06ba63a5736ae5f54c72f79f8e9f1870bd0393c7700e9afdbff8fabe3fed4bd9e8b3df1db05e9f184d956a4ae28ce02d7917498bf9c25cc41f2a451223d4f1ae5dac160bffed9afab672ef57946dbc737d5f11b4abe2efb4e47e770ff5bea7c8ce7be1e33b925c5be5f01d243cb86772ef4d14787ff2975fc8e3a7e5b7d47e7ebb5e89c2a23f2adc7e67b6f93d2695cbafdc873271e86eab6b1b6c58d59ece3bbeaf83d752c57f2921e065aae5f7f56b66ff9842b718848ef43d06355aa8f28315eddbf489d4ff43cafebeecfa8f3099ee7277b9e9fac9effbe3a9f94febcf8019203e7cfa6c22675816bcfa16b7adcea87293ec31f51f70ad3bf2d9e17e9ed3bdd86d3633f17a3f730037d5fd7bfa778c234559d5f8acee138cd23578feb3ce3b9afe54ef7e8abf3fb1fa9e34ba9304e3880de413cc58be9327d6d5af5512466a8772e43e78e4d0ff7abffeb77755fd94c25e37274eec8282870f52d984ecb4accf2f02b46d7e1a8eb2f57a07390ed97d73ca79e3dcc13b6c3d4bb4fe7f0ae1adf49ccf6846db692f1a91bb6113d7c64e93e9e1f7be250db2cc83bd210af7a4ce945757e84d2e14a74eee830e201f5dc4f84d9b60ff7bc7f55fafb23f598e04fd5f1158f6e4789f4beb09fabe32f689b14badf4feb3e27f54c937e3ff3e837c7a3f75cf5ddab911efa3a1ce789f4324a8f19fd529dcff7dc577dc3c6b176bf34d253bd5fa2e45d83cee1b8405dbf169dc37bbf52d7aff3f9462edf5de8f9ae1e47fa75fa7703cb7f4dbd7f7d9eefff46bd7f439eefff56bd7f639eefbfaedebf29cff77baaf76ff679f608c57c91482ff3e1dc493ba355fa1fa3eb4f6fa8e36ce15f1effde237fb1927f0b3a87fba6beea3fa8e31fd365a4e52bba1f7b89c84c9b2a4d8ab752f726eafceb77e83d38d7ed5b9dfff9f55b9aae6d57f28ef6f03bdae53776b60a9beecfd7fc4ecac24f3d9738063da7bfb5145dfb93bab62c752db1145d83e372a5dbade8dcd16ddc531eb92bd473b7a16fc371a5ba7e3b3a87f70ad4f9b122ddc74acb2b453a1dabbea9c728def67c639548e565d05e3cd3c3018db5493df5352d03b7c5b7a3235c577d1763f7a67f336b1c98caf132915e2fd2e38bab3df1bfda0d6f52c57fd23b9e53e7ff6d2d57fc599daf11e975ce35eafe3b481edcbf3360788ef384e7b8f4ef4af9d9ea5a7f51c78782f3143acdaa7e80c4f1ea7b77a17338ae45b2df53d74e4036b1561dd7a9f775bf5181babe1e3dbb1e3d0bc70d22bd6dbac18dbb097b3db2f57b27aae7ef46e7f0adbfaaf38deabe2e7b751add8474d888aec1b15cbd732f3a777438e434d77e26ac24beb559bd771f3ac7dfac50f7ef47e710b636e9cf272ad5730fa073cd18cb79d023c7a357a20a85518f4f3eee6f179a6b535fc17af52d355637fea9f430659367bcf6923afe4d7d638b879bee037e310fd96f29195b457a3d7cabcb68a28ae3a6bcffcd2cdf50f284f6d3f9bb92b74dc97f089dc3b15aa4d9bc3cc7b67f9248cb9fe5b9a3d7a4228f9ced1e393a1fd5f152a3ee3fec794fe7e96faafbaa2f6f921ed77d0bddcf996ddb84f445582caa44b9a81585d2e9025ac7b9baaceb37b33bab4bff0ef8053fe3e4671bc43ee7d52a93c7f86ae98fde20a689a9468ff181724c547f7dbefc5dee3c512d853e9ac8f8c4d7323e01cad538ffaa90bb7bbd737d91f4960787f76ae7ce64b1d439c25b9bc414b1cef9972e658df3d91ad1e89c9539bf6ba5bc4d8eda994f660b12b8c67bdf59e5c8743df777385734d05ae7bc466a582a7fef969a5649ed9738d71ae43c829d62ab98e71cf7caaf6586bdcef9dbf4cd3285ccaca3d9819fbaee4e13d0d154e28406b42f94b6f87f31d2123102e8db41fa809f3685b284ba382326fe8fa19bc94047c31225638a449648bb3655144abfb0551904838731338466fb7679178be9be61319381e81e2c43908ae1b59b9f3fe182f9fb2f699b1eb469a2500e2f0cc912343fb0202f2947d78304a16ddb3645a0a8177fc2845f4e7f298d10bffb5cb57c2e7804b493855f7a04c86ee13227575b890acfd552f91aa99a3730a5ce138d8e38ad7a19bad3e0dcab157b1ce10dcefd6d4df73262b70854692f2328b3f8cd16482a8a5a99a248f6d495b5480aa1269cf9475287a650a422a950d6a906f89832f52d59d96aad6a5c3ab1351c786fd25945231f79f289153bcbae7ae7cdb6e6f8e924e3279faf5231d4da14439da24e44d94b0dbff8e9dc14ae54fcc08f996117c2c6b3e940116c6322d8396a1b877bbba49472e7d9e00cc1cd6e8237233203ec461861761528846d0d088b0061778356a26d478f56a01021b99d2972bab44c119d9f71431f6a7f0f82b6a471f7f42d61839a767b133de910ba89959e6e39963a4d84639c7be5cef355b21a0ad7573a12cb9d6f83bcb9f20ba9d666fa1bfe646144689297ac916a6f4975346a0787d58c22dec140bc08ecb58fc10c641ee74d0c3de9c4d0914a667dc326b34e94e47e612577a624f70f2bb90b25794058c95d4dc946faecae8f24d9a43a5cf45ff39c77b73981d92d5bd150573475d0f82797813927974132b9140853b751308da864d2cd14777071b049496fd40da2a3ae3b25784848c13d286b1b1ad6da7a9aacad3b7f269d2eb9c479a7dc7966a7f34cbdfc4245d3fbe92d10af85f95bdd3061a87b4b98a3334297bf0ee0204854b90b9af2fee6fa1865d4bda8bc7f4433e4fdbd4dc221db1e29322bcf9f393f19c2bbd0c2fb509a8f3268fee1bc568134ef4ba59cd161534e3f4af298b092fb9bd2a44ca867455c0298bbe917c91565aac40aa7f2779270fb57f57777c9be55d048f7d3ae728e5ba416701db4c8debdef9faac79a52b5b4ff05c652a3a542014e98ad64369094d9003819ae76aebbc30a0b640c54cb2f4d366a035fa09ed72c9609582ca751c6765b22131a2fbf6e171b2a1b1b40e5348718729a574dd9984f4e33904ab213c226d94126c99064271a6cb548b61d9cff9d64919ff19df1f477069bb206993b9fd2a25983db4204795be4c8992b6fb980f59ef64853ddee18f06e653865ce3375ce37aa949187c90c20510df5763d08f7c79c1c0a6572383287e4c0192a2a010c31591234a5a15f37a3b31792cb2aa7e5385f6c94c9f064791928b9b15b2d1fad16a7c8fa843b0896616fed697b1b6ad2065a28307e91b546db9b163c8c123c35a4e0e1541a9f16368d179824436e034ec4616b582328b56784557b2495a3161b72d44f13c172d45194f09906e14fb60a267c34951466e562233e563d86127ca8298dc1d3f365af6481acaf37c83eb07299fa0b646198ca0d0a9cb45eedfc0505f644f4fc2ee70977d039889e634d7a82511c16d628c651f176b821de3e08186f494af86c83f0c5ad83091f4fc5dd11a6b8836c0aca8d9db22de5966de9b961811cfe2f901e1f8db277ad52c65cbd8cd70271aa93f1ee778ed02e2b90e5408dbc5720973fac93796d90383d84d2ff4893fe9d90fe2b918641be3881cab78e32e45b8980f9d6449370787e8e202a3e73453e159f4914b679266c506c2d70aa2f50736d94cf974a03a86aaa2b5736530139d9a057a16cd1ee142d592183d602f8c7d4cbbf535514f8766a24364cc50ba62e782b5efac75cf102e7b2a49c861485f65405ab90ca54171832d544904cb5884a0b0ba9b4b028afb430c56473b2a3a3b6456d8e4e51aba46c4879e12bfc300da1b5b7f52f3b63a6e76059cda5e304b95450bd5cded625570f99290c926c46ebd8baf0659230a78925324d44a939952ea652a5f6d18652fb40db60a5f63493c9ca7eaeba1635d91229210ab33dc664b6b2b7a33887c86f4e3d874b37ca7a99a95636b9f4c0cf70b97e519d2c36ab9ceb90f1e2fb13e47a3a505f5a2879ef50fdd575b22fbb8a34f2a5d2c8a30e2765e8d3a9026099a1000854ab9e4125a1e58624f469c024544ca9bd22acda3329b5571ad43ead5d30b56751c28f35085fda3e98f0434dc2216306ff8c302dc4c328c1e0d79451dd8486aa6e2754785a8a9b655b41b7ff2ae5957dceef1ae75a851451205d62f5c87f102d0fa7d89619d8f608c8763685607548b64798047713eea28b6146498f340986fad77182a87fc134a1e0f5afa328ecc71bb0df1910fb1c2a999f103699cfa524af0b2b791e25797d58c9f329c91bc24a2ea122f144432482f34b90485c4009df68105e1650f8429370486f9b4c79d318014dee5425d56d3ea5fa35cac51629a5cef97bb72a732bd3fa47a0cfa35a359a83a4f345949ee5263ddd1938e0df04758a72d987065f5c21b607faea620afd6603fa4b03a25f4209af30087f3ba0f0a3295e95265e03b2c46ba5748b495d9de25c0dc2f1184a9b2a9336709a8ab720df594a21dd62407a6ba76048975181d86a0a0494082ebec31c64cb65875fb99a3db45b16e3c1312ea734d866d20072b6a54d15839579560b565048ab0d485f0988742595239f1436473e96527bbb29d3ec1c4ced5594da3561d52e3549865ac70e41d43aa0673078ada38cface2eea3bb5797d673545eae4b0a4d650115c6788e0395d8245f07194f07a83f0d3020a5f4b096f30087f3aa0f0e329e18d06e143ba06137e02257cb741786540e1eb28e17b0cc26f0c287c3d257caf41f80301856fa08c7c5f58233f9152fb1483da7dba05537b23a5f6a961d5de64905c28fd65a29cc9e3f57e0a36d901165ec8cdc718966b34cde2c9f67daa4ba9dc142f50429f6e52294051be99b2a6330cd6f466c0445041093fd3207c7d4053ada4849f65107e6140e15594f0b30dc27b740f267c0b1599e7848cccad94e07385a12e38515ae72e99c60ae48678303176a7da7f0f1627a89203d7e5d2f6531d4e7ae01a665a1728ebad53365de358fb64e76a10adb7515a9f67d21a465ea11337556f769b926e33c4e4575820c6a95af7b8407a55533670bec1060e0434b093a8405f10d206b69bf259e93d58cd9acf527ea465b2f31e5646d8222d654760af53ff3cf9c29cf3e48b649e0ce3fc7cba52f9778d29baa16e7db120ead6b0b85227503950dd7a87e93b60b3971a6c767ac07c6b2725fc3283f0b50185efa2845f6e107e6e40e1b526e150ad81a53543556b4ea6d4bed2a0f60b01d5aea3d4be2aacdaf594da571bd4eed32398da0d54de768d294387a773e914299089b251165050c4ac14ee5c5ed757aadcb95a29bda8b6c9f395326942cfe2665900b80b166c949d1f5be558629d73557b5ded13ee24af02591d73976f29905941a5f2c5db2eafd4cba7aad077cc054eb52a38711115b477b3918aa26b0d51343a6014eda6a2e8ba90c5cf1e4af0f5a6b8076f8632e7a4362d5e827c6f2f95b1de4065acb0f266f04e8b7d54b86e32850ba2695d534fa96bbf1b02568b4ea1e2ff6653ce1230fe4fa584df6210dea66730e1a75171722b1527b7e51527fb4ddf814ceff65c8cd8679cef744af01d21059f4159d19d2193dd9994e0bb420a3ecb2418e21e1684f3fa76828020be9d67535678b7c10a27f60a6685e750c2ef31085f1a50f8b994f07b0dc26b030a3f8f4a3ff751e9e7febcd2cff994d13c60cad3c0e774a3f30f3a896a646eadcbd86a2717863bb5b2a908e561100bbb80d2e2419316bd9bb428727e43c90b6353ae7750fe3a5c48e9f09049875e4a8769ceff0ad9188277f63abff3d7e0224a83874d1a744071017388a06614e46b179bbe06e6fb88c17c67f70e66be9750e6fb2865be9fcfcb7c2fa5b2a62f18b2a6d601b3a6cb28428f19087d1490d0e594f02f1a840fe8134cf81594f02f99e236a0f02ba9b87d9c8adb0379c5ed55547278c22f6b9adacc59d3d594165ff6cf9aa63463d6740da5c357fcb2a6e9cd98355d4b69f0d56c59d371f27bc1e63b5c4799efd70ce6dba16f30f3bd9e32dfaf53e6fb8dbcccf7060a196c4d14a63a762345e79b063ad706a4731345e75b149d6fe745e7662a104f1902f16ec040dc42a1ff4e48f4b7525a7fd7a07549bf605adf46a1ff1e85fee9bcd0df4e05e2194320de0c18883b28e1df37086fd33f98f03b29e13f30084f06147e1785ff590aff7379e1ff1c659cb0ed0c59ac4d6be662ed6e4a8be74d5aa48ab5a9cd58acdd43e9f08249075daccd68c662ed5e4a83174d1a7414a9626d811cf0da15b0a7ea3ed3f7c0805f3218f007010df87eca807f4419f0cb7919f00354207e6c0844cd806081789012fe1383f017020a7f888a6ed8012a4cb9f030a5f52b06ad670f0ca6f52394f09f1984570614fe2885e4e7a614004306fefdf4993db9e1faecdd7e53bb7be93f4f45d02f0c11d4103082be40097fd520fcc680c21fa3b28c5f5259c6aff2ca32be4805e2d72642838205e24b94f0d70cc2d70614feb849387403ff26972cc3a71bf8804170a15c79a765c6e833575e6ade31fadf9a7819c7e8617b33ff31faf0ba5263f44f50b6f48629b505b4a52f9b84c350eeef44c8a1dcaf50927f1f56f257a9f2e10fb9d8bf4fa6f93593fdcb7589b6b488fd875913cddff2dfccd9f2df92967f888fe5875bb9cd1c135fa78ce78f618de71b94f1fc29a4f13c4925d3b70dc9f4fdc1c192e93729ad61efb38c2a112c8930573687aae4b414d384a602595d2a08e87bf62d4a8f774c7ac09a2ac1e47f9b92ff9790b1f314153bef1a6267db9060b1f31d4aebf7a8d88134b24d5511757c5435adf791af67e077a940fed510c89aa1c102f93d2a907f33051252a0f63370ebb3e96e9a4182f534f5e5f74d5f861aa1eb5553d8b46e7861d3a2382b9c045129827a733c4369f0779306fd8d1a2c957f35c81504dc5a7f7ef3c6be4fe9f20f932e8373d4257361e9203afd8032bc7f1a0cefd261c10cef592ac01f84cc139ea304ff2ba4e01f52823f0c29f8798af3bf0d9c1f09c8f9054af84706e1b5c383097f9142f27148242f990443eef39f5c04fb34867e64120cedd04f9a6e78daa1b0ff70f076e8cb14f6ff1ab02f1e110cfb8fa940fc8f0ac4677905e2275420605d356f202e0c18889f52c21306e107460613fe0a6598ad1286ec1426dbad127899984a59c7d61979d28154206bbceeeff4590805f2cc2d7e26cae52fea64a9ef66b9f5a2462e90512ff03470b753092634d77a6a06fa3bd099e416b15b9ab2f3029999570674edfb19c5a2b589052cfa82d79a736b99a9023635257b8fd4b04660a7d96db2082ac82a61aaf374d0991b3fa70ca68dc160da0434985f5049aa6d824852ed12f924a957a940b4370422193010bf340907a21d4c310d6eeae62ed275aa731566be40ebc25da2c82f4e93be77c74b7754b75b3565d7e9296097b40cdd859a7eaf41da558321156d961aee421db0aeec5daa751ac4be7e65a05728570c8e760b3d777611c8093e67b0630296bd4a8f6821add8c3c1dd412d41ed70e7af03d5beffb589e0b0a80996c87c77739e043b3b4c461808d214bb1014b3e941517ccd948ac10ebb5291eb3572885742f86f28e1dd9a41f86f29e1dd9b41f8eb94f01ecd20fc0d2ae7ec69ca398dd27d7296df51d27b99a4c30db78c2dcc63858edf53054c6f4301b3694cb002e60f94f03e06e14f0614fe2645a96f225c63e22d4a70bf9082ff48e1e86fc07167401c7f32098729ec0372d17a3f2df86d0ac740933582b11706a2f2674afe20937c58ea34732877992cc7f53240a93bc1864bdfa134196cd20424400913d40afe427d6588e92bee7a7699d3c3827cf15dc3170be54e01b0e84c54e56c2ebb469bcbd8a10e988e1e30b2266d2c5f87c9f2b56f46c87c375726c8bd678a2b381d9ec8dcfcf9e86567b5bf75c88bad32a2a62d1d357fa58ca1c0640cb0fe28f8f9b89e0835ce5f0d2a50d5014dfd6fd4774798bedb9dfcee4ed5d40cf2edf74de65810b539ce978d84ba3ccc71a483688c07d164c2184711c6e8f775ca18ff6ee236022e6e8c901bdeceba54aedd59ed5c59219b5e6e43ae3e0fa6a3134197531f23c98eca0879befa51d4ff614a2930083936117210f29f94e47161257f40494e8695fc2f9364a8958c4f84df05e6432a533a2464c5ebdf148f0961797c44499e1856f2c794e4496125ff87923c39ace44f28c98561257f4a492e0a2bf9bf94d14d096974ffa3549e1a56e5cf4c92a16e302d17957d768f120942e5e961554e982403bc192129b7a2542e0eab726b4af2ccb092db5092678595dc96927c6858c9ed4c92c1e60e0b6973ed29950f0fab7207cae66687b4b98e94e023420aee44093e32a4e0ce26c1e0d376542e82dfa20577310986fac09c66a80f74a54c636e58d3e866920ccfcfcb8587df1ed814e8f92141f7a04ca324a469f4a4042f0829b817157b0bc3c65e6f2af616858cbd3e54ec2d0e197b7d29c84b4242ee47093e3aa4e0fe54ec1d1336f60650b1b73464ec0da4626f59c8d81b44415e1e12f2604af08a90828750b1b7326cec0d35482e949b6cc2a281d17b4737c7ced1fe5d13c7e61217499ad8302a2e56858d8be126c990404a7351f9225a700165976521ed720425787548c123a9b4bf2664da1f45c5de7161636f34c5626d48166328c1c787143c96127c4248c1e328c8ebc2424e522aaf0fa9f2784af08690820fa11a5a27866c684da034de1852e38994c69b426a3c89d2b83ca4c693298d3787d4b890125c1152701185a232248a2994c65521359e4ab50cb73443cb701a85636b481cd3291cdb42e298416571d561b3b8620af449cd007a26a5f6f6b06acfa2d4ae6906b50fa5d4de1156edc328c93bc34a3e9c02b2ab1980cca6d4ae0dabf61194e493c34a3e924ae4752113f95194e0fa9082e750821b420a9e4b096e0c29781e25787748c1f329c17b420a2e313540611838015bf744e7cce2ca2c95ebbbeccc63c47b6fc2b023ee6808c7c08c70e4f2b52142fd10bbd0ee4bc0f06f7eb2a9b1f105a6480607de53123e5eb1194e6d0932b2179a3e00917daa815e11d04318bcdfd9477f671195899d1636135b4cb5d1f7876ca32fa112d8e92113d8d1148b33c2b2388652f9cc902a2fa55aff67856cfd2fa3049f1d52f0720af2396121afa0209f1b12f24aaa7e725e33d44f8ea5789c1f96c72a8ac7052179945229fbc29029bb8c6a835c14b20db29a827c7158c86b28c89784847c1cc5e2d2902cd69aaa11639cd304ec5163c32a37eb54f5a1f97ab22f33313356162e979585421164a59b7cf4a52a16c79ba21d62e78a5ca2fd72baa03fc124184eaf4c643af4ea9f200ebdeba85cf2aa66c825d753c2af6e06e11ba8dce19ab0b9c38926c9f0fcb5b9c4a6cf88df469360706cbf2e17c1c36833d94409be3ea4e0720af20d61216f364986eafe8db9a8ec33ffa38252f9a6b02a575289f1e6664a8c55a60fc06218b7e4c2e4755af0160af6ad21616fa560df1616f6365381375644dc6ec6ded9bac008d66ebe3de742ec0ea2c59b8b0e54c1544de5c07736430e7c1215f977858dfced94da9f6b06b56b28e1773783f01d54cdf29e8461a24a893c5de5184ba92811c7342d76b35cc072437b64046f57513f594e6959e2dc5fe1dcd9294d1aae98eb2f263f03781a9b1618fe2ee1ce900fb6aefc4e2a94f79a42797e5328573b352948746e02dd21ff5ea21620ae9373f1dd04baa4e9c9054deb4ba5af6051a778940a7797cdf9a251860be4a6d34b4980e783e941492a13301966abbc9bce1427562fef358e9ca0139f7651a4efa3ec097fd10dd334e71d97d62e2753dce8d8469d8c7337b4656a4d2fafb6a977e9ebcd654fb55428ef3785f2484f283173379c0b85bbe364b9c1ead36308dff14b2bf8ad20213b990ad903a6901d9553fccd95eb58540b3d41287ccca5ee04095b1d15b6074d612bf6846d998c9d6d2a6470b6b7c542524f85e42153482e8d383f4bbd032b96d43852f709982b9c5a08ad3e809563767428a02c6994d50c9ceb4105abf9f2b6068afac326ea73734a1b4b85bba4be0db95a2315be474ce15bca685570f564f91908955b1dae969fae16a788723227c927567753a17ed414ea237c434d6bba4a86c55db9c70da32e8de16a852294992ef28fcd3d54b83e6f0ad7f1816b76a5f24e7addce24c1bdb6b2291fa873ca0368ea84a909e613cf7b291e5f30f1382692329bbb34df4785f931aa9e12cc06b40dc3ca091552108ee7a016112464a75021fba229648711215b2dd3678daa9bb84d6ddd6a59a3527165466cf0b4514ea542f42553881632e6be3a56dde507dc15933229e41fd2d3a8903e6e0ae96c41f5929b728af410e02d2a80c96219cb75b23554e194b8fb9a3154fba9501dc8a54d90fe5d5c43582d63a1ce7916d2e1569fd22f5d46f385ec742a644f9842363f6bce995bab80ce43fddaacf9e694675061fcb2298c8b489b841aef66e7211d56774d99d4a641fe79895966739784675261fd8a29ac55ccad8706b9f50b50725b076ba4b55737e53ccdd31ece87d35914a7af9a38ad6eb156963fa1f01ccea6387ccdc4615ec0b461438a38870ae1d74d215c1230847a274c738cb44478cfa5c2fb0d537857315a767d1e758de620701e45e0c9e6aa83b879db5c5403e10fd5f954a8be49f550040dd542f944660c79f39cdce50609df0554f8be650adfe1216a8e0db23482c58cb6a8761e1daab28c678384e9422a4cdf0e1667debc07ef4d92cdf2384b8f8ba8f03d45852f489bd10deb22558f48dd85110fffda6173d51c2fa6c2f71d53f8460bff5ec1328730879697505a7ed7bf6f2f482c94e6150b9cb6772915eaef99424def3ca69db8d3f388d44af0501e361aeb62f9f5ef5f46e9fdb449ef43b3b6b896c8b141e87dac91eb802f103be4826d99ed5fbf18c8bf057939159e67a81aa47f1a81d6f04a59abaa3794abb98c25406d644b3386f00a2a84dfcfa58d6c1e1b58226d0ffac1cb551f55667c45393e702515c61f503d54b9f403e412cafc728cfc437a1515d2674d215d9c536c7a477adc74a8c3dd92f17a3515dae74ca15d9b355e797bc6b9fbccafa168fcd0446396874689ecb9d82a60232eb8062e5cf55217b0823d924945d328b22e4916c832b356e66699756bef14a220a1b9960acdf3a6d0147a42e3fd72bad6505769902f97ca38d8255b0699635878e5fd20ba5f47e9fe8249f7e91edde74b7d76ab1a30ae5da57653f0d334d39e52ef0509c5f554285e3485626ae03a48b5dce9a3528db5437ce8279b2b0437502178c91482690143502ffb11c092b63186e1462a0c3f6a8e9a60259bde37517abf6cd27b4640bd1b65abd51db9e3b5a19ba970fcd8148ec9a172d552a177a5698e36c42d94e63fa1461acd319039a3a3a57a1c6ea542f453aa5f3b7baf642e35ba5cfa3683f77fe65fefb98de2f08a8903bd3b2fdd8ba4976f6faebac9ed94c63f33693c366b4d2d357e5f25af421edc3c2dd83b284d7f6ed274a64fbee5b5f474cd6b654a4f8d8370a4973ba9b0fc22179f56aaddb3c0b236cf5d54285fa5fc6382e5736e1f5de6ddccfaa2de49828ecf4c2973e5082bf43b0509f3e7a830ffd214e6319e984d7d933b35dd4de9f92baa0e49b592bc3a2f523ae7dacaccb7e7fe1e2a04bf368560bde01b71d27dc57e63ced802734d79fa9d2054eea5a8bc968bcf88fe62905c2515322ac5354f6e721f15b2df984276420bc7779078ce3705dc4f11f96d2ebd6741eb5ae1fb4ff28ffb07a890be9e4b6e45b5db5d2b2816d3b384cf9493c15b4142f02015823772f7f4866f064999387cd4f5e68aa187a8f0fd8e1a0df2afd1a43682f1eaa837e2a1d317b5898c5f9accafb47f980af5eff319857063b554f617b96db70ad1d2335c1ea142f8875c529e99707ef584ec2d9cf6cebf4402a65f2e9052dc319d5df21da815168e736e258a9a4a86c94d39fee4b4d221751dbebfc3890d4813654d793b4c3ff597f0a603a75d2be1fe8c531bcfb90562628bf04e6f9d2fe5d7a8fc465beb6449c8f58487de89c94e2db05abea527ea660b85a9949b8cca391cbaec61da404cbc4dc8fd2cb12c8734acae7cd085f42d88d5912a565b15c226d08909795a53762dfe085f6b6db621d38ebea9d461d2dd15b05cf51e247aaac6967f575dd6af7ad7f0f67e759214a0eb8259c5ad46c9df246ea03435d7cdb74eb8835f9b460bd1be6dab22888d3f712283a56936ca9859293f4ecfcc8903b6d7daa4b0bdcd890d66f397c8aa72ad03ce753ad5c53405b03e16082193d708ffcc8910960958e8332a130758778e4ac17a8713560fe744779b2c964e46a9ce7bc0b7426c8f05b0c73aa480fd8513581fe16e155a2452beb37106d7a3730adcbb9ce07a19c081c09dce4be04ad428dcc1f73840db2452d0dee3b6b6f4e4b9d0f95dadaa20da57d1b5ba38804b764981fb2b2738d8461b9cee722d43e300ef5a5482fe8d135e67945457a4f5f0c501d39021294cef7362ea8830a52698c501d185fd5288fece89a88b0c895bef027f78ecdf13075073503dec1f9ca0da495baa8f5566dea66b0ace3f39e10c704e5634b524f588b3ebe5b84a968e8d02e6774179b852f5c9c601e00194537dc009b00d4a867100f3ecc814987f7182e980b2705013bc13e200e8e59e29401f729771f16c4217a09eae7f73235a21474c53aba4c5a319731aca7f3e8a2a99e9c9b87100746bef14a08f3901c11ac0295ff4bd32d48d4d8d1398a950299b2eaba485554a7bab713e180788f0a321fe8713e25021d2e041a73338a556352dc75d19f316601fd40dfd0927caae2a4fd3f6b64fd5b656cb4e9a38a0ba11e56d9ff2b702f512787ad0330e88ee4425e47fa3eac5824e19ec27a43b66e2d4f0f9a87d0adcffb87bb13038bc98c15cd9af856d2e26950ed4e1fc1977df83ae74a4e6e6bb2b82c401d40154c717ad98c78096c9e4b7ddb3d41c4cfba8935f8a03b04dad52c0129cc0327be5d33d1f2b63969fd5a0c1b3569ce07a35959525f2d371ae8b3ddb3605ad35b7b52d90c3fc8df2e3a9b51e536b7fd63bd5dc6ae77b7100f72602d786135c37944ce33ad208ee771a565b6e2bd3fe3aee1cbf78379566232b6bc7090e3aa75739d0e68bdc974d8e03c00b5125b73d27c0ee5280df1ce438e07a438e14b56feb11ee9d4690bf536730c6b4fb6977e1f692d4caab0daaba92e68e0a332dadd3bc432be44e9accbbc72c99b55848e6ecaa920cec6690ccd3c12f9953253d19b20b2c19c06b3319a8c448e65cf54b06aaef24f3ca7e93817a249281eafbc99c5cea9281fcc892813b024c3ad39e43c98ce1e7a46feb39691c374b1abbf993849b44d2c7cb24498ca924b3f44b26f31a294ea60d8f267d7d169259bd4b933994674962582d99a3a37992e8744ccde830cfc42882191d1d5bfdff3dd9a208265b740208b0f516fcb8759ccedc9544b075776e0d9444feeb414e71ea1e1e1d8664e890be8b9daedd98b4e99856ffe9964b00f3a903b5470e6a5d6cc2393596380f4538bbda84735a2c7196239cdda2c0b995048ad5df286688623e9c5db8703e2c5238bbdb84737a2c715e8770f6b009e7cc58e2fc23c2d9d3269cc5b1c4f90384b3974d38a7c412e70a84b3b74d38a7c5126723c2d9c7269c5363897333c2d99713675f85b342352bbdaba3b8aabb2b6f14f1816ccb05f23d04b21f27c8a122d595926bb7163c5f279f8d5f557e2e02db9f13ec7081fbb972efe78d33dce108ee004eb8fd847fb3138b83929e0d657b2e94ff452807728fa16d94b5cb74a06e0f283cc4066f1017bcc711bc4151c09b153d3c36cb7b11c11bcc09af7f96323c3d11b3b6cdd960fe15c11c6213cc993184f9370473a84d30a7c710e63b08e6309b60ce8821ccbf2098c36d8239358630df46300b6c82c93874c106f3cf08e6089b6032b6cad960be81608eb409661c5b38bf43304745d157042d71ca3b23825677970413c85f2390a339411ea240d6380fd5c8a376afc21b076e0cb4fd206bf75c6f2edb2d4303c26338917792c8b7498f25d7836aab8417bfbea12ec84ac7b664df50fa92d38cd6b79f0be516647de338518ecb48f0e552d842a177cf9ce7fc07ebdc2d7b2f1b85df6ad1acb0d98aa9490876320abbcdadcc8f23ca21280b18cf897298210bc875771956b41771a11d8eacf4106e2b9d2b1dc47729b75858fc1b8633762a5779ed2cecba60c7afa06a83ac7402ff9446189ed8282f484f3359bec3d53877219f89104e8c02e1cc830ee15711c2499c087b8b54eb481fbdfbcfc7753cf2cb08e2649bdc60597d8fd870f647854ca14d38599d65d8701e817016d98493d5958b0de74908e714ee452fdc72bbe8201af67d13e59553edf1dd38348628fb214b9c16054aecbcb5d4a9842f52b3d8dc1da62328c1d950ee4656399dbfc71d77b16d14db25ba797296d976250a26f0c1a4ba8c352062e016d315c19c1145fbbb41ceb5ad6fea12d653f0f4d1d47b348573cc920ded4d086d71142343b9fa1133e69f6c5ec4872398336d82392b8630672198b36c82c9e8e7c106732a8279a84d30193d90d8602611ccc36c82c9e81bc70673268279b84d30e3388d65068239db26988c7e1e6c3047229847d80493719c870de60004f3489b6032fac6b1c11c87601e65134cc616101bcc5108e61c4e980522b3ff2898c71163f9cee671341df529cd6d49d7436f6731632ecad6553c16d9ea3c9b603296ef6c300b11ccf951f4bb436fe76ea1b7428f68a0970d5f3f84af8413df40842fd3910b84a566f7c67920e35904744114ce0745079df3c11908e1c22810161f74080f450817d95d1d62ecd564ab0e1d87aa438ba3728f490db1e15122f6c135b6418bd3918d2eb1c7b5358e13000f43288f8eaa14cfb6546c9c5db78a11d0636c5a9867462cbb3aee433897da84937556251bcecb10ce6536e19c194b9caf229ccb6dc2591c4b9c4f229c2b6cc2c9ba36311bcec508e74a9b70b22ea6cb867317c279ac4d3859977a66c3b90ee15cc55df3cc6dcb86555235d83482b1e6b9840be81404b4348ac5a3a679daef11747bb0cd43db8ee09571c21b2c729de2973edf97d11de12d2ea8cb5067c76a1ba132b6d8d9a02e4550d7d80895d1a58b0dea4804f5381ba13296f06c500722a86b6d84cae8aec006b50f827abc8d50198782d9a07647504fb0112aa3b3021bd4ce08eaba289c15a06bd96f9faa08ba953b259860be265230d773c29c2632873cd227c1cc17a95da8dc80a4ef6995be555f6a8bb332d93cd07dff8c165dc865d18351246cb067aa611cd797ed813287135b720eb1ce1c4a65f395d9316c1f57f65082706eb477861ca30323db60f38f50a2df64cfda89ac2b31b025fb7d0866b94d30e3b8acf4f908e6669b60c67159e90604b3c2269871f42ad9836056da04338ecb4a6f4530ab6c8219c765a5b721985b6c8219c775119721985b6d8219c765a5972398db6c82c9e866cb06f30204b3da2698715c16e84204f324bb5dc2e3b826f76708ef764ebc5d155e7785a51ad98a776557732e0bc4b6d7a040e06aa25e9637f76e8f382e0b3400f527ed88ca2d7c99ec20deeee9402e715eab935f8cb35bf84064ab3b398176f34de4f58c431f5ce85a2174bb5a72b647fc5761e88d50d64631e515b6b13d78a6bcae44f84eb6631d787730ae565aac3bccc66a99af73a1ad42054e9d4d6bcab23626f9d6824738eb6dc23935963867209c0d36e19c164b9cab11ce464e9ca344e6a4c305d23fa4426e05e1ba7daf705eaf14d08c5c25c1badb41d44453e3ecc905b9172aac76db345d61462c17fd7b00e1dc63134ed65d5cd9705e8e70eeb509e7cc58e2fc3dc2b9cf269cc5b1c4f914c2798a4d3859c7d6d9702e41384fb509e7b458e23c19e13ccd269c536389733dc2b93faabece5259ab6c7424cf15b001d91a351db1524e478cc45799ad7abf01013d3daa85ac0e2e77efdf228467d8e3691c478f8f0ea8b1796654d31076cb5e4e9863ec6ed3ac1f8afbea60e5c82ecf8a628ef1c1b453d16c04ef6c7b9db419cb70b6f1cabb10da73a2b0cb99d1db255bdffb0104efdc28e01d1a3d3c36cb7b09c13b8fbf78d9665832add46152212a94425be40216d07b19bf9a636704f37c7b3d3a18fbdcd9ecb437aa065d60cf9a897174c81e8facf4423b86814ddb8133a2655b86a51459e945360db4b17a6eb2e5a7a310ce8b6dc23935963897239c9744d194ccad553e35962edaab10cc4b6d82194717ed3508e66536c18ce324d52508e6e536c18ce324d51508e61536c18ce324d57908e69536c18ce324d5f908e65536c18c639b680e8279b54d30e338643117c1bcc62698719ca47a248279ad4d30e33849f52804f33a9b1a94acc3166c0dcaae08e7f536e164ad1eb1e13c0ce1bcc1269cac7e466c382b10ce1ba3f0e398210eb6ddb46e1129843745e1e99ebdab3873c6d05c47689d9c4acd3a77e8722e6799e3919ddecc0979a8825ce33c0480abd45482d40482f46c00fbc63182659b427038027b4b1413ff3558bdcd63fa38a75f752a8e35d3f108efad2d392417d95ab3fbb950fe09e5b3b771a21c21512e711e5a2581c1b4eaddeaf594b56e549b98cd938ba26e57f7616d5a7052645c6b81ad2ed01101bedd1e87c43826fb0f11ca3b3851f6c982528794d5a1611857a9bf09e59e77dabd2a0d63ef28dbaa348508ef5df63a2b320ed6b1b9e2fc0265009f8b2203a0cafd5406c0988fb26500ef228c7773af9bb452b5e8b543f712699990ece35796f740e0ee89c2fe8a9a6cb0523648dd69d7715f0de42b08e3bddc1dcb00ac447eb845372f5bca05731a82795f145d77ee24ac1d325943d17370cd1ffa0dc2797f14d5f5229f567bbcbbf09e43281f88a21774fa41d70bba05217c308a0e3ab0c605b2cad32895808def2b649eb942ec91fd9e75a25ed6376ba348e66c45d07404f6217b9cbae3e8a7b408a17c388a4930d33d8dca385785ea10bc476c9a913e83b36b836d46fa1d08e7a336e19c1e4b9ce7229c9fb709e7cc58e2fc29c2f9059b7016c712e79710cec76cc2c9baf2211bce1284f38b36e1645daa8f0de70e84f34b36e164f59f63c3793cc2f978140bf0c21eed07cf02bcf310be03363978b16e20c68673081ae379c2269cac535dd8702e4238bfcc89b3831450257756ad13ae8b57fcbc8bdaa1c4fc154e5ce344902d6da1dfa8518ac45bd702b5089c0e4ab8604f46b0bf1ad59a5c8b0474ab41e7db56d98f5917ebceb65a84f06bf6b8c0c471ee6f5f94537e9d13655f0143b7556ae4d175d2a206d018f7c660cb433b209bfc46147b0741b23e1806c87e85c03d69af7b4b1c579ab91ea1fda63d7baf4d8be55cf4ef2398dfb209661cc7785e4130bf6d13cc38ce457f1ac17cca2698719c8bfe0c82f91d9b60c6712efa7710ccefda04338e73d1bf87607ecf26987174fdff2682f9b44d30e33817fd5b08e63336c18c638bfc6708e6f76d8219c7d5b87e8960fec0eea9298c6d22b6a9295350efd1b3dcbd477e1d71aeeac5d2958bb13862db40b912817c8e7fd6643a48b7e7083a3a768aa3658f7badef806f1cf75b6d8d32821fdae39f19c7e6e62484f2799b1c11667016516c96f90584f3059b704e8f25ce5b11ce176dc2591c4b9c2f239c2fd9849375c2291bcee310ce1fd98493b57acf86f36c84f3659b70b2ae5dcc86b30ae1fc31274e38d1f378e337acd61d61fa894d563783b39398cdeaee44387f6a13cee9b1c47931c2f98a4d3867c612e7cf11ce9fd984b33896389f40387f6e13ce29b1c4b900e1fc854d3859c72bd970ee44385fb50927eb52e46c384f40387fc9897388485fb5103834ca0aad77ad42af7f3b635f269bfbebff10d65f71621debc1ba59647ac6e5ee43c7889aadaa7f22ea97ff7514cedab3c4c1b6e4c43790b5be16857fa7b6d67a697f90052c54f0aa8ca346f15d15b61859e76fecf1838fa3db572784f2b7f67a21330e12b3e5a18fa10ce0f528d6f398e2b1d5386f6a7b0482f786dd0e0c8c3e756c0e0c1351b2ff5d548b9de9d5b94c493cde65fd0f91b5fe9e13e7684f595f23f0cc36f372fb8bd4cb91adb19de4c23c1459ed1f38317794021a9c076ac51e3941abc2b1583660055cc07a22bb7cd31eef8f387ad41d8350be15e54e049053567aa6101e7c6dfb7f22bc7fb4692100d6fe51369c6d514ef9279b70b276e8b1e19c8970be6d134ed6ee66369c1b10ce3fdbd4dd3c837352215b77f32328ef7cc7269cd36389f34684f32f36e12c8e25cee711ce776dc2c9ba62121bce6311cef76cc2c93a219b0de72908e75f6dc2c9ba00151bce0a84f36f51ac2e37a5257a3dd91a996f217cef47d1650c1fde222d51cbdea91e891fbc0482f7f7969f94a50b99f80daf7541d5f37fd802328ee394ff4216f94f5b40320e57b0819c852cf2035b4032b6bcd9404e4520ff650b48c671733690eb10c80f6d01c938ab920de44a04f2dfb68064ac7ab381ac46203fb20524a3df061bc8f508e4c7b680641c326303598340fec716908c4ba3b081dc8e407e628fbf5b1c57e64a20949f72b7b053cb3783a2f592c356e94e00afc5cf290b068434bcff46b18b5aca59d0ecda52267b7a00ed16296c076f43f122b69c1281fd1f27d851c2eb3fe4ba64a53c8541a0de429e4efa715cfa6c024afa9f45392bc3050a4e5a901194180ba7f82ee17302c20acbcd58e26314c7f5e4c6a06c20c189523b63e3723ef71c96112d5b0ebb185969ab28ac94aa4295489757770b6fde25a5125c732f11cad69c28bdf968b5a3c41ab49310161e9973eb7e2e0bdd8cb0b6e1c4aac77e661c4403670fa19cb32d273cbd78646e2da429b15c89b30859623b9b60c6d16f781a82d9de269871dc8b602c82d9c1269871dc8b20896076b409661c17871c8d6076b209661c27a58e41303bdb04338e3d9e050866179b60c6712f82110866579b60c6b1436e1082d9cd269871ec3b1a8c6076e784197c02156311c43645a517c2d9c3269c5363897336c2d9d3269cac9b35b1e1dc8a70f6e2c4a9ddac61e4fce0d9c47b8e48e1ebcd89af8f80f55ecbd59a5c206aa78099e4757208237df3cff8616c8b30f6e1c4385ca416917087d1363aead63bea54481e30ca3e57c0f46818ba2857bdeb9522ce7bfdae4270fb46311694dfc23c8c9578363786db10da7edcc9dfaf30d221651db018c6350eb4111542fd3931161830065ba287b147896d899ec908ef007b3300c6010eb60ce0c7280318c889768444bb58dae72a01a39355aab8aa94a2b4a3cd76190160c715cedfaef885ceb1ca115b19c3c2ab13023c288a1c96f209992f2d967915ce515c39ecfb08e3e0283a4870054bd75653f5d77857a8fa22984338610e35c0cc9e05c417ec7c0476282758bd56ec3471b0ad157b034238cc1e1fba380e112f44288773a21c190065a9f34d10d22056387fe9167f3d6fb13486ab58fa3b425cc08978a0487700ab95dd25db7c6d368e0321c7a0aafe88287a47735f0f298e7b5ede8eec73a44d38a7c712e73908e7289b70ce8c25ce9f209ca36dc2591c4b9c5f4438c7d88493754c9e0de75108e7589b704e8b25ce6a84739c4d38a7c612e75a8433194553b348fe768f30e2542adcf67c7c5beb1b11c2f12d391126bdda1e4707da9ea8da7e4854d6e8363741d05e658911747cbcc585f06bc81a27b4a45f489962522a71ba7e4b6c38f771b5cc17228b9c1845bf3b586455d32c777d3beedd71df46563929daa1b7837d0b87fe08ed647b4735e3b867db95086d6114c5d1d483ae1f7e34425814855f1d2c5e1ab95f1d9bcbc230846f4a14e395b90d634c8de540c6dd08e6549b60c6b1aa7e0f8239cd2698719ceb762d8239dd2698719cebf6390473864d30e338d7ed6a04b3d82698719ceb760d8239d32698711ce2bd08c19c6513cc38ce75bb0ac13cd42698715cede35e04f3309b60c671b58f4711ccc3edf689674cf86c0dcc76a87f737614fd9b539aecb55276cbb98e5b719ffff67564a547d8342a39833307651b95fc3cc279a44d38a7c712e7cd08e75136e12c8e25ce1710ce3936e1649d3bc486730dc239d7269cd36289f35484739e4d38592bf36c382b11cef99c38f52292533db5d0388ffe9c84e0954431750046cf4b042c0650ebd9e0bb5456d5abe5c850fa3201f5b1f63e1a81102fb0691d10d6215f369cad517b68a14d38593be9d8708e433817d98493d5f9950de7b108e7629bcaf6199c23456c65fb8328ef5c6213cee9b1c47905c279b44d3867c612e71f10ce636cc2591c4b9cdf453897da849375393f369c4b11ce6536e1645d7f8e0d673dc2b9dc269cac3e206c384f44385770e21c24520dcfd5b23159219b98b018458980d56660410aed0b1f4143b3139727fceb08e94a4ea4e385778e3ab4e72b1d1ee0a4adc399f28ca7463ce73a7fd5c9413a56c7ee3bb8806f4395fd633981ebcd1ea961e4f4c28a0d24db668f05c87257d902328ebbaff741204b6d0119c7ddd7cf4220cb6c0119c7ddd7272090ab6d0119c74dc32f4520d770822cf294ee8de4ac217af2d67ce7891d8e3ebbe4190435a2b2fe72aeb27e2d2aeb8f8bc2652cd77e52c6213bb65e528160aeb50926a3ff1d1bcc5608e6f136c18c63fffd3f502e7b824d3019abf56c303f4030d7d90493b122c506f3df08e67a9b603256efd9607e84606eb0092663cd940de6c708e68936c18ce33627ff413037da0493713e311bcc4f10cc4d36c1649c4fcc06f35304b39c1326bd98f442e777b5eabb2f730480e0f82f26bd1a81ddcc09d6dd5c7ca9f3803b0482a7c8b4d882fc6c1367da23ac15f6acfa15c7d9ef1d5113b3d2de156c18cb7bb6156cee47565a65f7ec39c656135b267008b2dc2d9c787ba3426bb72c94c093d9dd952ba2b973fbb9206e4236ba350ad7075cf253c5157b79cf66934311ce6d51e4a699493e97fc348eeb817543c9bd3a8a329f1a6d4a2ff3e3b814c621c84a4f8aa2ba9f4f99cfd85fcf66a39720b0db6d051bc72dcece43606b6c051bc7cd238f446077d80a96b176ca06b60881dd692b58c6912736b01311d85db6828d63056b10025b6b2b58c6de5536b0a721b027db0a96710c800dec5e04b6ce56b071ecb92a4360eb6d05cbd8dbca06b614816de004ab57649e215a604566367cfb11be467bfa00e2b84eded108e56e9b2687b3aea3c336d0370cf54eedb10927ebc22f6c388f9638dbb7f5085f98217cbe0c2c04b742a4d614992c1609f04d76571da970ce97cae2a5416c72ec6b9df32f581c6c70fe99ae27e4c2310b9c8a48adbc0af22aa5ec1dce5dd0cc6908426fdb5e308976ca2492327b99eb306f709e815d94e1ebfb44a970d74c59e1fcd6c3e18d124952aee097daba1abe009b596f137532c4e96baa24131d24277727130817004c2a5df5ee264b54c656ed84b95c6a52e73cd3467ec735a164a22b3ad3231e4b64b10c5a400425123d559c803ecb6458ca9d30940b77ea9d7eab10260b248a9d5f6e013fb9a9689fac3cca77a8337d3dbb4c88117f69fb007bc29c126b9acd96b285c8357f787f8b1c81af925297640d69f6f0d176d9c527560aa1097d5087ff14887715edd24cfb273a3b7fad7662de150e7bcfd4397f83521fce6b25dafe3f5ad9cc6d3e2f0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/e830bf7c2caff4a44956e929a89ae771.asset.meta b/Assets/SerializedUdonPrograms/e830bf7c2caff4a44956e929a89ae771.asset.meta new file mode 100644 index 0000000..3c92fbd --- /dev/null +++ b/Assets/SerializedUdonPrograms/e830bf7c2caff4a44956e929a89ae771.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 01cccdb6134562c4c90fdd8f6f9c56e7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/e9b544610899b644c8396e19baa7ba11.asset b/Assets/SerializedUdonPrograms/e9b544610899b644c8396e19baa7ba11.asset index b8bad09..73e3808 100644 --- a/Assets/SerializedUdonPrograms/e9b544610899b644c8396e19baa7ba11.asset +++ b/Assets/SerializedUdonPrograms/e9b544610899b644c8396e19baa7ba11.asset @@ -12,9 +12,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} m_Name: e9b544610899b644c8396e19baa7ba11 m_EditorClassIdentifier: - serializedProgramCompressedBytes: 1f8b080000000000000aec9d057c1447fbf8f72eb8bb5342b1a00910b4b410dca11028b458200102098410acee4af5adbbbbbb97ba5177f7be7577fdefcccee49e9bcc73b77b93e732fbfe7feda7ddecdeee33cff39d67dca2d98efb4fa49ffbbff9ce1c679c33c099e7143aeb9d75ee5fe3dc6ba9fbaf77279fcf76caddeb2af7ff05ee6ffd9ccc245fb27f7a45dab9ff9fe2de6d742adc2f37392bdc6b31ff7dae53e4fe3dc5fdb6c8bd634f57baff15b96f456ab91fcd73c63bb39c994edb48eb2422e6f38f368a67116657a49efbffb1ce36f7d722ae140b249bffd4d6fddf5cf7978dfcb7525769f9de3ece626e56a9fbdb0af79b72a7c495b99c4bacf7dbbe0effc3f12ec3c435c3bb468e72af75dcdbb1e09e5931dcfdafb6fbdf22f1fe70f1de38711f75ffabcfe48bbf81cc4ad9478b77d8b311e2fbf1e2be9778e71825fc6344f89fc5bfe7ec26ae23c5fb1394df4729f277f7f45ff19db8af2de41f2bde9b08eeddf022ca7bce1ee2f713c5fb93c03dfbbd37b04d7e335abc7392f2cd49e2f73e9a6fc688774e56be3959fcde57f34d9e78e714e59b53c4effdc037ad80beecddc9e27eac27af7e99b8ef21aee3c47b53c47d4fe4792d11e6710acfe3bcdfa2f78af7447c44b6039d6ac5c729ff0dc6a9fc7d8212a7d2af8e57c23cdefba69e60e9481eff01614adf9c2aae139530e5efd3c0b7badfa78beb64e4f719e23a05f97da662d36c11dea909749d9544d75393e8ba67125de7f8d4355f84775a025de726d1f5b424bace4ba2eb7c9fba2e10e19d9e40d7bd92e87a7a125d1726d1756f9fba8a3c367246025df749a2eb1949745d9c44d7253e755d26c23b3381ae4b93e87a66125d93a5ad029fba36115735ef93ef2f17fa20797ce4ac988dfc6f763dc189cf7bd83dcc7b54d9485910391bf05b219e9d03c23b5b61aae45795bf4f03dfea7e974c0b91df25d322e477956956620ef595f7dcaa9113979f4e05f7ec7a2eb0f95c713d4f917d9e225b325e9542fc9d5d353c6735f80d3290bf172b0cd638bcecccfb49dcebea42b29ed5505cfb283ed80879de1879de0479de1479de0c79de1c79de42d87cbe135f1f3bdf63dfa02cfe3dec7b67ad782efcd2698dbcdf0679de16799e88b1ac8b5ca0f8cd05de6f0d6b79f1d5b05d025925e29a1bf30f671721e74245ee8542ee57f1e1bbf56feff78b9d787fbc585c2f12cfa72bf22f11cf6780f7e47376bd54fc3e13dcc3f07751e4cf12cfd779762fb915c48d6a6322aeeb1dff7e5e16e0dd0ddebbfd6ff4f16eb9f76e6e2b1fef6ef4de1d52cfc7bbb22e799912b797796c1b8bf64fe3e90964e588eb20c0b38eb80e147245fdce6da779d74de2ba595cb788f7f6f4a1b3901db93c5e76e40a713f47794f3e9f0bf464cfaf8ce9cbff76ed6d323cde26fe9c7d9bafbcb728819e325fdeaae8a996d3db9cf8fc742d085b72dc37803fa9edceab809cfd94b0e4bbfb8b77af71e2d3ea35e27a356074b5677bd3e99e4e4d4f15320e10d783bde78b1e11f78788eb81408f43c5f520f1cc7dbff7e1fe6d8b5cebc4fbe9b542a7f7854e8938497fb84ef19bebc4f57af17c1eb867d71bc4f3f9e09ec9933adc287edf0bdcbb3a357b5e09f7a6f8702b9fdf0cf8c878394cf946f59dc395f8f4c3ee1685dd2d9e9ecd3b79ec9ae72490a5fad6ad017ceb76c5b76e17d7db806fdd2674791909ef0e10de11203c57ef169dc4f323c5f5a834f8e19d0acb3b3dfd5bac163aed1f80e55d0158dea3b0bc475cef062ceff67469998984772f08efe878962d451dd039465c8f4d03cbfb1496f709fd6f153a3d1180e5fd402fd92713248d3ca0e8f280a74bab319e2eadf27de8b25d7cbb4389ab1de2fa2088ab879cb8328bff269fb3ebc3e2f705e09ee9f37600268f04f0afc7149d1f13d74781ce8f7a3ab4de81d8fdb822e371717dc2a99acf6d05bf252b235dfe6d649de678713dc1a1f7cf27159f78d2b3bf4dbed069750259d20ed9167b4a61f394b83e0df8ee547ce269f09c5d9f517ce219a1cf773ef490363d1bc0279e577416e55ae439a0f3739e0e6dd5fc5bdafd8222e305717d31814fbce8cf27dac9fc5ff62f9f9c069f7849f189973cfbdb89fcbf5d90fcffe50071f1aac2f155717d05c4c52b9e2eed3391f05e03e19de2c4b16c2f7d59f44b38a7a681e5eb0acbd785fe22ff6f1f24ff7f2300cbb714966f89eb9b80e59b9e2e1dc678ba74907d21a789ebe9047c72c015b43d9c339cc06d81c8db0adbb73d7b3a36f36475ec1e80ed3b01d8bea7b07d4f5cdf056cdf15ba3c8184f73e08ef4c27ce4f3bc97e1dd19fe59c4d100f92a5ec131902649de37ddfa79f8fefd76abe3f57d871ad8fef87081e1f00761f78ec3abd2ee4c83e90a1f8bb9d9b25084bb23f4f7cf391127f1f89ebc74e5cdf0dbf67d70fc5f385e09e85b9d5d3aff3f348389f28e17c22ae9f2ae17c2abe3b5f096f6f25bc4469430dfb33256c31d61af93c3e6ca78b78fe8513df3ff53978ceaeff15bfefa3847781f2bb5a9e5de804aea73a1709995f2936083f887c2d9e2f02f7ecfa8d78be18dc3379a26f24f2adf87d09b867d72fc5f3a5e09e5dbf53e4c93a886c0b7fefc4b78dbff7e2a98bcc472f06f264dab8243e0ce752a732bd66caef1231ba2c5e76e0ef2f17d72b52fcfe4a71bd2ac5ef65fef783139f77ffe0b1cbdc2964bd9f40969a97fee8f8cfbb7f567cea6771fd292683ffedead27581a74b57d9b77ab5b85ee3547f7e7ca908fb1727cee72af5bf56f95d4d67b2dfc74f3acbf5ecdb35d1bbb2bffd57259e7e15df7e17ff9e23fb937e53f8fe26aebf03bebf8beb1f4e7c1d40caba41f95d9d3320fba402d8da2d51ff8fb4f54fc5d63fc5b7725c649724ef7dacbcf7971397a7563eff1bf889b4e926e51bd5e69b03d82cd3c5bf8a9eff8aeb3ff1dcf9bd1b4ef7c99e9f76bf365e8e1c8363c1c0b8e5f7ec1a89d9c3ff66d7687cd8d16892b06519aab34b8c334633149919deb73d1de5bd5ae2bd65e09e5d6b2bfe96a53c2f509ed7899723c7ada2f580bd753c1d7a9c29dee92b9ed7752ad37d0fc9b3b7f29b94259fb1b0e458d82de22af39edbc4558e252c4fc02b916f2863b6d10642de5470cfaef5818ef2da50e1df50f03f29fe3d47f68906f0d5686345b618238d368a8f337ecfc2fcc963db6b01e2ab4d145f1563abd1a6c02e31ae1a6da684dd2c71d8bdfcb47fa51ecd153dc4d86cb405d0438eabde11cfadf2f99de2be95224b8c97455bc664f962dd46b1578cd3465b2bf6b6f6eccd5ae6b1ce7ac4d1dbd856d14ba69376c046312e1b6daf84dd3e49d8728ea01fd61d143d3a886b47a04747f1cd5d0a6bf9fc6e71df5991d5595c3bf9647da0b8f607ef8bfe6c47ce9b3bc8894fd3727cf03ec77f5bf87e4d380f04f85e32dc21eceba2d82dda07d15dc473318f45b6dba2bb2af1b6ab176f7d44df4a9f5bc1f7ecbbbd94ef0ac13dbb760571d555c87a5fc892f6e420efb26b267896e97ddf37d3fbbeaf6ceb4a9b1f14ef75536cee26aedd81acee4026b4578621fbe77cb4cda23d95f07a8a6b2f27ae6d1615f35ea359e27911b867d7dee2f94a70cfc211fdebd11ee2f755881e7d153d64d9d52f5e0fd9468cf677e2ea33d17ee039bb0e70e2da88fc9e5db315fdb3c53547d13f47d1bf8fa2ffc3e039bb7f54dccb71f8d5e05edacfae8394dfc518b923c70e5cdf5828db2e320d9538f17502512e56ce7d91cf1f1357310ee0c8fe9e2063fe6a1acc55e225575c073b716990dfc33435c4894f53433cdf1c90e9d93840c8a94c3fa0cfa6f2dd0509f455d3cd50454fd13f131d06e40ef3e40e16ed1b478623fa3f079fabc87e527c375c912de62e44e51cf3e9ca7762ac213a52f96ea4b8ee16ff1d97239fb3ab9c5b5e0cee995c313e11dd5dfcbe06dcbb76e488fe7c478c5f38cff8f02dd587a46fa93ea7dab687629b98bf1e1d8d30912cc728df8d11d73c85c968f09c5dc78adf651f5fa6f27c161287e73981f4ad0c77bc139f4fc8b259ce115f09ee613e31ced1e773929b5ffba5dd93143de47793153d262b7a4c54f478163c87f9d514273e3f9a02ec60d7a9caef727e6875e457b20c1c0abe55e36d9ac26b9a12efd3c13dfb4ef45b46a73b71fd9695e5c6cc5858fc1d37dd0c7a42f97646ccb6c1658a5e321e67297a893970d1d98edeffa53d7b2adf893c393a27febbe86cf09c5de53cf7b5e05eeaca9e9700fbe07339374fa61bc99ad926fa439ce7c455b67b53c92fd4e77eca183136199573f027817b769d0fe24acc098ae68b77e7817b264bfaab9c632fe646ca7526d18540d65e5ebce7ee10efbc289e2f88d99dfbb2227701f87e2178c6c29a12c066d9eed907304dd24f189573e927817b765d047412fdcfd1bd9daa69e925f1db3245ce32712d007244fc45e59cfa7c70ef321bf2bec767c84f203cf97b7df037bb2ed1e822ed5f017e7b19b1ff15f16e91a2b7cc0b578ae7ebc03dbb16025d64fd63397826fb2bc4986e749590b31edcbbb60e93e5ae9cc32cf3b569ca7359f755e62647578be763c13d939b1bff5edc1c6697edf0c3153d5f53e4ad57e47dec53cfbe889ec58a9ec542eedb01f57c5d91b73e5e9e7cbf521f75eeb6d4a754d1a754f95eeaa3da299fab76aa6d7319ee2470cfae25c047647eba063c5ba3e837315ebf11d3e3df73de10f7eb94f0a4bfae77e2ebd0829733510967aff870c6c8faab98eb1edd087414e349d10de0d906a1df4f8a7e6f3af1fd0ef2b9189f8f6e52f4167389a315407605121ebb968167659e0e23b72a61bd8de8f08eb8dfa2e8b0455c3703d99b13842759c9fece72a7328f1f29fab29c3eca6f92a97c067d49f64f6dd530df173cdbd70b7f37596ff2cb7c7fc55e5906ec0764ef8784c7aedbc0b36d4287af94b0de4574107307a2072a3a88fea3e80140f6017878a3e4ba07c91c8c3b8d92e3f87d94df2453f90c32977d788728cc5958872b611d0cc23a5309eb60f0fd21e01908cb773c1da9303a525c8f00611c21ae878367877b7aef7ea522f77d24bc0fc4fdd14a78478bab5c4fbd08dcb3eb31e2f962700ff396c3c5ef65e09e5d0f03ba1ee6e9ba4777452799af1dabe874acb8caf9a02bc03d0cfb30273e5f1373b0a38782b00ff5c21e73b812f687e27ebb12b69813193d1ec810eb7447ab69b0a7b83f21f66e52fecababaa81c67906bc116817b7695ebab17837b264fd6dbe57c309177381f81e7ec2ad7af6d00bac2e7533c1f1fb3bfa3b70daeef4d669b5c773a09dcb3ab5c3bbb08dcb3ab5cfbb918dc43dbe41ca2254a78d26fce52c213738ba2723d9cecd7fd18c893bfb3ab5c7b580e6c85cf251bd976114ce2d694b33e69399e595d6bc674e100fb799904eb0da28cca93f5deac24efbdaebcb741bcb72c5eafb8fa8028fbf3e4b89fec5705e560de0e273e0ff5530efa19db39d789afc79debe932f6abf8f72adf3f0ff8ac9cafa4b6093e15efcab57793c03dbb9e0f7497edf90b153d2e147a5cebd93f56d69fff2bae9f8beb6731467bcb3abb6ab7fbdb38913f3a627e92f36580ef751c2e061c92b50d2f553888fa4ef412c041ccf3895e04e4aa6dc32b1439624e4e14acdd8aca32eb7227be6d78b9c773dc5f9eade39b81f0e4eff5c1dfec7a994617e187d1ab155dc45c97e8554e7cb922e61f45af01f2aff174192fd74ce5e0ef4c907d07724dabda6e9073e095feac4abbe43a2629a78ef25ca41d47fafbd709fc42ce0f13fd0d55fa60dceb841df1fa46af033689758413a4dd322d5f1b933341ce97eaa3fc2665c967b03e7495f84696d5d2b60a70ef863b51b2ca71b46ce47b93655aa9a3b095aca41cb53f49ac6b8e82f549d2e689472b36df1eb379a22c03fa28bf4959f2198cf766409eae1d29e6ea45e57ab549e09e5d6f046188356a93e478925c870d7dcdd573d24ff1bf47ef53ec6457b07e8dffcde4aafddd0f8adf6f5274bb29810cd9ff29f9c9b53d4c2fd907d047f94dea289f414e5d80deecb95c83fa9d135b87eb5ef3b783b86657386f175bc71eb41f124bc3d2af659d45cee3aa00f72e9ba96fc7eba3f3bf29320c8dff4d916b26aac3ffb035fc39428ffdbd30a7cabecbef15df90e5cb9d80a39cfba8962f3f3a897dfc1660c72db86f4d1da5c8957d1001fc73aa5c2b21e647461f88f19d2ae7bffca2fc26ffc6f25b2cfff9d5499a0f4bbfadf421d9f72fe7c5553871facf96f50bc9e037ff6cb57e27d6934e3b18f7bb69b21c4883df4d13f39f66cbb492c8df92d5eb30bf006b37f9dfecba033cdb21e4fc1e2fbff2f91fe2fe5645be9c13f290135fb790e3680f823044deeafc29ee6f53e25bacad9db95309fb2f44a7bfc5fddd8a4e72decfc3206c39dfe011454f390f4ab615e4bad53270cf743a53795fce8b7854bcbf19dc83f79d7fe2bf8b3e26de67fd70f5c43d7b4fcee7741c7d9a73af33858c48445ca33ede95f3476bf978b7b6b8d6f1f16e5d71ad97e45de6d799f1f11f917122d75f5680fb5ae07d11cf1139af5189ff884cdbf72af12fe664459f54e2fa49717d02f88528bb23b2def094a2d3539e4eb384cc8898cb1891fbbb68ec9edd4e912deb9b4f2bb29f16f68af72322ff88344f221b30ad9c1f2cfbfeb1b400d6b0cb74365bd4fb222dc5b515126e04d4d965fa50ebecf2b9280722b24f20483920ebc872fd7f05b877f5dd53acffdf7394f2ddc4c4df550947be8fe43f7bbe2fde93f52ab85f0856afc2f6efd1e5fdae0d73b7c7cbd3d58be6c838d6944f7372815cf89b94259f5567bdfc1e1086c817e7c8ba2f522fafb43351bdfc51f04ce49f737315dd44de81966f3a19cb147ea05e3e57eeef12a45e2ecaebb9972afe1b306df0f7995f0a1b23b29f2c41fb3622fbcc7ca4a7483be55d9d3c315737d2c1d1af7fd1cd6150fb3c7cb4dfe4fe5895ed8369882cbff55998ce25e726ca732c0caceea2c91be77da5e80fd3a788bf793b14ff02e9739e6c43f4537e4b943e4dea7d58beafa9f7453ac6cbaa7c2eda5a6879aa49ff0bd539fb322dec5464c83a9ddc136011b867df89bcb9b23eb515dcbbe1ec25dbffa2ff2322e7748bbee885b31579b2ffed71459ea863ec75b0226f9724f2c41abdcafac15670cf3888fc6ea1daef23cb1aa4ec5f504fd1a38ba2c79878be914cf1fdb30a5f393fed3985af9c9b24f93eafe8ffbcd0e324458fae7a3d2ae549be2f28f25e10f2de57e4ed9a449ee4fba222ef45c157ecefb570b8939c17bbb603f1e85ef7ba53dc97c57faf8e3544ba79eff9da934cccd78fbee4c4d2697ff08c5de5dc9c52705fcbdb6a94bfdf157c07ecd8bb9df2fb23f17afad2eb158d5e724ed0ab8a5eaf0abd64bba59b860fd3eb46e5f7cffceb157d4dbcbb4d3c1f0caeecf9bef1cfa372bf05315e5f9996c0de09d137c0bbec2ac79df707f7ae5d8bae5464cbefe4de0a07807b767dc7891f4392f329e47c8b7c70efcadf47f8d73e9f2972e45c8103c17d02392cd9f2f2f860458edca7e02070cfde1f13ff9e23e7e7abdfbf2f9e1f02ee6b550dc719a07c2f3855f6f3bd217e5f22eccdf4e18fb26c10f39ca21f38f179d707e2fa218857394e2dd7f78f05f7aede8b453e1b91e9f810e0eb3a5d06003e4ccec742eea1e09ec93dd8b36bf185f1ef57ce63c4be137d54911e4a788788f737e0ba457aea75acfcb63c815d09b847b23c5bf696fbf1f4f6ee97251a4b93dff655beede7ff5bb9ce352aeb2c13c1bdfbdb52d9cf25d7747daabcf7a9784ff6fd764cf2dedbf1e1caf5cb51b98fc12470cfaeb23e0c7590f9580122eb7345d6e7e2fa05f059317e19957b10e42bfa7fa98491887fff78de91018eff7560b2ec50e707b6479eabe953d9ab212ae73f7d0d6c156d95a8dca76122b877d92d7bc2d3b760b51286acdbfe09e240f697fc157b1691f99852df8dc8f1b11f141d7f10d7ef808e7f8167d05e0dbba8dc4fe230700fbf9d08ee5dfb0aae14f6dd8bcbacc215d3f97ba0b3187388c8754f3f29dfc8fe7fb04f02ffdbd569f97445f71f9df83243be27fbfca59fc079a0ae4d2b5e5674116baca2bf28bac831839f812e3f8b305e5774917b351c12ffde8a7a017591e5b7b23741548e09fc0a7411fb1bacb8569121d7648d579ecb75907f28b265df37d8f720fa7b82f064dbafbdc6a6646957a68fbf15bffbdb935d98e97129926beee53e3a620d5486ac671f0eeed955ae8b3c02dcb3ef863b956dd6ad72af73a84b7d45af7f14bdc49aff22359d8ab55a19b25d3509dcb36b9798ec0cb96fcdeee22ad7774d507e97677c8c427e976b91c62b8cc688e7b23fa46e125b0e17dfcb3edf3c71153646c6c59855887a65642c902d99095ba3cade0dfc9e85f3952763a568d3442628e14c8ac98ac8f6c9e458d89b455d3d321184a7946b2c3a60d8fcde0d7be56a11f6854286dce75dee4f9fc8c60e201c51b66544947022229ce73d19ab443a8fc87d9266f80807acf596fda419ca5e14fcde0d6795681fae127e1f917b6fcfd2b094fbe92662d910842dfa2e333294b03344d862fd2343ca6588354991392986dd08842dfa9f326a2961d7f2c25e9d23c2967be2c8fd91f2530cbb31085bf4ab65d456c2ae2dc216f3bf56cb7d61e47ec4f3530cbb09085b8c9964d451c2aee3855d2ceab6c5a23f2522f76d5a9062d8602f09d94f9e515709bbae085bf4ff168b7d7322722fb1bd530cbb19085b8cfd64d453c2aee785bd26d393b146acaf888871c8c8a214c36e0ec216634819f595b0eb8bb0453ff31ad1c68dc8bdb4965443d8a27f3ba3811276032fecb5a23f676da19021f7f75a9662d86d41d862dc2b43d9132543ec89b256ec7fb0f67d21a3405c97a718762b10b61827cb68a4842df6272911fb1f96c8f815639991c214c36e0dc216e30e19ca7e2dfc9e85bd5d842dea729122715d9962d86d40d8a2be97d14409bb891776693d4f46a9ccc7c4daa3c8ea14c306fb97c87a59465325eca6226c51fe97cafd638bc5754d8a61b70761cb3a8fb24f0dbfafe51d01c164ac93750231061991e93d5179591f8423ea4419cd95709a8b7044f9bf4e8c81444a957082d63d407d4ece25cb68a184dd4284fdb12763bd68df47c47aaec87a1f363600e1640ab92d95705a7ae1ac17fbffaf97ba9629e104b53113842dea3319ad94b05b89b045fb9705c96588fe9f48b90f1beb8170ea08b9ad9570c49e3a65a2fc2f93e5ff46251c68a32c2b13d95807842ddb0eca1e43fc9e852dcaff3259fe8b798a91cd9ab0b7f8087b5710765711565b25ecb65ed81b44f9bf41da24f762de9662d85d41d8a26d94d14e09bb9d085b94ff1b64f92ffaad23fba518763710b6e8cfcc50f656e2f76ed8e5999e8c72994e65bc1f9062d8dd41d8a2ef32a38312760711b628ffcb65f92ffab42307a518760f10764f11564725ec8e5ed81b45f9bf51967b078beb212986ddd3a99ac63a2b618b7da2323a3971fd79fc9ee924f74d3468f356ca9e182fbb623b223b53919d29aec07f3344da41dbd3f277d99e3e14f91db6a7992e3efa2d32ba2bf674f7ecd9d4c9d1dbd343b147fa20889f8c9e4964bf8ec8eea5c8ee25ae59c057447f5f44f40d64f476e2faebf9bb8958cadff750be577f5758cafe9aca70e5fca023c13dbbf6556ceeebd9bc59e47f9be5192d62cc8f9721d2af35f125e546e4fe1f4725885b3ff1dd4fd1af9fa7df9646f1ef55c6891ce79c04eed9750088ef0149643f8fc8ce56648b71940c704e5144f60f887722621c2943ee3b550ebe4914eff2f73d94efd5dfb178973acafdac8e04f7ec2ac74427827bd7f6ad995ebc6f95734664bc4f4c12eff22ca9c9e07d26ffe860f11f91e3efa20d9021f7a93a06dcb36b2e602efb1cc13e3519625c236398a31de3cd180ede1d0ede6557b96fd4fee0de65b3efbd8a6cf99ddc47ea5870cff492cc65dcca75b68269c628a0c36ee019bbca3da4b6837b57876d3bbcf8d9f754242c651fa58c3d9430a5bf1c0fee996d93e3dfcf1823de3b01dc4bc650ce898a1c45af8c3c60639ed015ecf9a5f525e90373c13d0b4b8c096f936367f7fb9317ffac7684cf559eec1439056ef5399bbfc47255bfc787cb2f931f1ccefb12d9ffd83fbd78b015ce36f7d322dde9ddf3f8d9e015ce606790f6f4eef67c0eb10c7d1cff7f81fb4631177a52469520eeaa120453aec4fdb7081c3dbed17d3e899f5cce0e1f2f767f19e04c77afecab65ce40671ff7df7829f3dd604b9c4dee5dbefbff322e6f99ab76d5379399c48e2957bf99e3caf44e512f759f48a065ee7d09d7702effff66ae6911d77e8afbac829fe9bece59e58c75af5b7968556d2f77ffd685992f90e975d41fa68e3df78e6c97d134deb586699fcdcb92ff8b919a8811dead7e5286970c6b65f3dce3d82a31f17f0cbd4c8675be4f113206726491b867839c6c76cb071f4c6dac6aa1debf3dde439ddc84b6e8c9b0e8eec82d88c5f0db27b57ca0ec9ddf5eab1d6fda60279b37d53a25312d1158262f8bcfb80e6242eddab57298a22afe880e3f1f5e9c9b46fcde7bc5fcbde0115087177ef111c09782e4bb7f6c75ff2b715f9eedfebfc0fd9ca9388eabe4a956e20aac124b394c645d0eba6a319a4c590c755487ba5eba5127cf5b12a1ae5769570c35fb474fb03e4230990e18c10c1d415e2f5b444ab06a254cfe35d6fd76b54b62332f5937b9dfeb2a6d8999b20ee1fe0a533dcf869c67a6b62a194c238c702d0de11c46b8914ec9fa8a924c3f44706d4c706343c175743ec1fbef8bd3e21373dd1ad83457c598b4f5bc5ec5c2d9c84b7df6de3ceedbccebcb5c1d2adc466231cf970a41ec484989bda5896f6f69cabda53ff096ead715f3a3baba58e13320d690c6ca3cf799d75c99c07f2de6f6b1da6e01973ecbcd5dd688ba30b3067b5fd29ee15e0b5dfd4a780d2851bc34f31d2fcd79bcb02e224a6db198a9a74b882c665af84988cdf184581f13dcd25070034c702b43c10d754ecabbfd96d58893b26291d5e34a5d6b5689da5fa277133b646bdf0ed9863b64f7040e195433ccf91ae9a2923d6ceb272adbe051d91813dcce5070134c707b43c14d31c11d0c0537c304773414dc1c13dcc950700b4c706743c12d31c1bb180a6e8509ee6228b8352638d350701b4c705743c16d31c1bb1a0a6e8709ee6628b83d26b8bba1e00e3ac1ac90e9e147708282aa2326b8a7a1e04e98e05e86823b6382b30c05efa2119ccd73ff02a7e6caecb9bce15ac8e59995dabd757cb4a5361b07cde2abb5aa4f37acdceea28b4e46bdaf9fe8ec8347672626b89fa1e0ae3a3fe185f9d21af413af432a71653eb98ff4f7ed2303b88f744bea237ef5c2fc63575d3432dad97ea271001e8ddd30c1398682bb6382071a0aee81091e6428b8272678b0a1e05e3ac1ac3597eb477082ae992cac1018625808f4d6256e5ea12eaa91c4ed8db1ad4f92c106ef536043e1190aa76c5ebfef9d2049a7ae8d9b1b1f3c1afcef999dd347d7d6e72cc378ce42a30696cbf4d1f9138bf6e11a4e398c132b5e4683ff3db373e71eb5ab78da30dcd3fa62418e481464254837c8c183078f0e14643f2cc89168902b57ae1c2dc31546070ab2bf2e48d685b79b9f845a17173c0013cc26a15419b261ca07919e8d49dfbd3aa4e7e83219de06ce27cd64e225b3dfd6732905eebbc1076cd86c9bbe0a0aa4b2309a27e976558c4bae02966007ea10f2d6fedea408e3fbbbc7ba7a6fe43261ffb6da972ddf4a8c738c2e416869e6719abb386aef7b306d30b28374aecf9c73ac36be55b71f8dbbfd605d9cf18e94e535186770f4368f87b08f88a7e07138aed24250aaf21e9d9e49632b981e6cca641d36df9bfd33200dffd4454aeb09dc19abdb3ccc397331e79c68ea9c4330c9934c250fc5244f36953c4c27b91ebfad3a96feaffb4f15e1f571e1c3b12270aaae08646fb394e67507ac779b7d0b9ce96ebd22d1dc88c53cf2e517997cde927c3793a7a795fc6f368ab882d7214bf94cb28d6286449022770466cd349d35ac25b194572737f271ee22678aa864060973a42ebfe3ddb087a425bf4b36195437165875f456ce069c53253e924f224d9c5b4ed7e596bc377902c84e6ade0ab61cbf016f8ceab3c0993c0bb44b672c03dd0d4b07b374e9a0254f074bdd0aeb525e2b83a9973d679378cbb92d41d2c5284c87d93a1d9a011d96f274505175965580d077c732cd3d3599265bbd1724d3dc03336d0e96cdace389a1943f8cb56b8318341a0b73ae2e4cd6035ac8b3d102d7f958e6529862b863b070f3315b0bc444e1cdbcaa944a98795898f3746136e16156f037bdcc95b94d6a218fc5dc66bec66dda4583b9cd38ccacbd7466393aa74ca0fa789d74560e2dd064c0392c035e18cbf1d47066e2e14cc0acd85b6745ebb874cdf2b8554eb1282534f32803d83b51a347361f4c4cffbcdfd4e642b28d2bdaaa3543076b5d2f72124ddb0d3a137212e62d8b316f599292b74cc6bc65a9ce5b9af31f62b545160b05fcbb796e6c158abf8378c9149d97f091e17969f41238e357368882f9ca324db464f381e8f655ecf0131a1becace3887fb056df72ee72a9058039de54cc215624cb3e8a7889c22288b93c7390ad06d59369981e853a3d5a003d56f36eac42e114a96b301dd3a048a7412b2d8999a28a99ba1633302d56eab4680ab460a1ad32aa22cec4c25ea50bbb71c2a22448b8b374e1b2a263b526476673c6ab085f840b9f8de5acc558ceba26a59c754f0cde5a1dbc664ace3addfd6f85fb6aaaf9ea1c5de82c5f2dd159c9b2905225c751035b8e0736178baf759af88a048caf7c2cbed663f15596527ccdc3e26b039edc614f4b39af58af15d96eaaf1361f8bb7722cde36a61e6f7b61f156a189b768c0785ba013cee26d13166f9b538ab78558bc6dd1c59b5750cc72e3281677acb85ae95e538db3bdb138db8ac5d9b6d4e36c1f2ccef6d5c459ad8071b6088bb3fdb038db3fa5385bac0b87113ec04f5a93bd9925a2784935de9660f17620166f07a51e6f4bb1783b58136fb503c6db322cde0ec1e2edd094e2ad0023761846ecf0d4892dc79ce4089d93b0da07cb80bdaaff46a5e91ac42d5660308fc4601e9512cc42ccbea375f6351589a040ccf6f3dc3d0f581cc4c6222c228fc122f2d8d42372a526b06c3e9796d591d2d5c6f3b39659dfb6639b6ed45798f0d8d636cad8761b59bc61e43f7cac31b60a7391e3752ec2bab6367199731d6f65e08a8039e26a2cbc1374e1c17ee932254f4ebdd1518ce970a24e87f8fe2b393e34917b4469959222881e6b747ab0aec6932a5f060bfeeb07eb6a5cab13ce7a574e760c47234b30c9a768244782482ec522e63fba8861f3ed4bf938b2d7fe9bcff3e14d3c590789867558349caa8986bf1a068b86f598f0d334c247350a26bc0c137eba46f8ea80c23760c2cfd0083f35a0f0724cf8991ae13b020adf88093f4b23fcab80c22b74c2591e71b68394dde738a994dd9b74e1302f3e579716bc0aec64d02fa52ec11def1489ac2a48dad8acd1229baf2549efde0e5e93b724a5c2f53c57d32e6a86c7e6376a0bd7f31d6ccb86c43a6005ec161d41be68661d29c16443d46cd2c3266e05fb5bf626e6f3b0631b53980cfb5fe0dad7b92a77fe8f9efd859cfd2027f9007b75688fc5d8564d8cf19477912ee5357162d503af6a947ac5641b16f2c5c9425eea5ae6f54aafaa4cfb4142de17cb322fd164997736099665ee879975a9ce2caf19328e1b93effe7fad5364d0d4da1f0bfb325dd8ed14a4b80eec77e6e4c16a7c0760982fd7603eb56930cc0762a65ee1984dc13e482798150257ea73d6aac2cfc7851f8c21b94a83a4302092433024571b22391443728d16c9983141901c86697d6da26c60703564408763215fa70b190e482d8deb23db93bfc0632c85cce8084c8beb755a34e25ae4f3e1c8553cfb2be7c5e27a579f20a11ea90b9539e20d1a47ecd42298231e8509bf5123fcabe6c1841f8df1ba49c7abb186d76cf7e74dde84dc00c48ec18cba5963d4ea96c18c3a16137e8b46f8f080c28fc388ddaa23e64d5698c3ab5cdbf8ccbc2094b66361dda60b8bed54b282a7e37251a9099e7e8ec7d0ddae4157af4d30742760c2efd0087fbd7530e12762aceec4e2a544740004a7741266c85dbaf4de2e98212763c2efd6a5f7b6c1849f8251bac76ffe28c77e83f0fa0f66d2bdbad4de3e9849a762c2efd3a5f680c24fc384dfaf117e748760c24fc7843fa011be20a0f03330e13b34c21f0928fc4ccc8d1ed4b9510b8d1bb12c917538b342df5b7d19ac00390b33ef218d79cd3a0533ef6c4cf8c31ae1ef770c26fc1c4cf8231ae1b3036a7e2e26fc518df093020a3f0f8bf5c774b1ce2a0b1595130fc6f382a9c091336c83c4f5f9ba70598df971c7bc11710166d4133aa3e01426d9d9927a9df9422cec27f164143fcb3d5f4ca4f2fef6f409a2c14598064fe93460b576b802078ee4cce25d29e53c91074dcc176bb4c8e69bb8a47f362e5b8c15bca3f06957cf96553c51df55c58e84c6e7e262e1635d4e976029fe194d8adfd125588abf54279c45ccb37a7b55d13b71d197617a3fa7d19bad2a0fa2f7e598f0e735c2c704147e0506e5050d9448202857627abfa8d1fbe0807a5f85e9fd9246ef6820bdafc6f47e59a3f7855d83e97d0d26fc158df0b280c2afc532c057751920ccfe4b45ad25f5ecff3a2cecd7fc66ff30034ea516753da6c1eb3a0d5803138e9acee0a343c142bc010bf10d5d887061170bd5eb224a9df88d58e86ffa253ec3d0fe9b300dde4a66ffe6cac7a9db7f3316fadbbad05b25b13fd551f35b745ab071d0772a7f50c641df75521907bd15b3f63d9db56db8b573ddb4e475d3975499a0312eae732588c5b7e934610385ef3b55e7d7b16416647edded98991fe8cc6c5dc5cc7cf71a6f5a6cbe701023efc0f4f850a7477dae07cbb458bd71a6e36d011624bc3bb1f03e4a9e98d570531b93b90bd3e0e3e416cfe6e16d0e14dedd58789ff8b758869b9ac5f76049f7532ce9fe37a5a47b2f66e967784635cef1768929af5cf9c5faa54dda25f7e9b460358fcf9daa358fe77b07ab79dcaf119ecd37984ce7fc087593ef60cd9e2f1cbf1bd27ce9e8e746240b1f6bf63c8045cd579aa869d62758d4ecc0bcef6b9df731e78e6f15cb8a4a105f7b100bf31b5d986ce48e8db914b979b45ca49deabcca87b090bfd585cc4aa7d5eebf8b9c910e9b0ec1ae4127f83e8c45de779ac81bd53f58e43d8299f3bdce590368fd2826f8071d27b6f22bd3c976ff0b12c66358fefa2396bffe9452fefa3866cbcf3a5bdaf2fc158ed2aa2b8ac6f3fb55626bbd60fbae3ca1d38575effde254edde7b66e7cedd8374ef3d8919fa2b9694637d96b0732d88414f6161fea60b33be9f74b69b8837f269c2c1fb499fc640feae01c9f6080c0272279666ffd0a4d933b383a5d96730627fea88b156d15c319cba5a9472c5cebec2f506f07f83707b1633ed2f8d695f0d0c66da7398f0bf35c29f181c4cf8f318b77f74dc1a716e15bce4662dc75479bd8085faaf2e54a6fe06a3491d2f62e1b1e59a55c263b58d3ddd5026f0ffc6070ae9252ca408165289180e65960509e9652ca4a82e2456dc7bf9d052e391b357b0903374217b59bfd78848a4416acd895735ba64f3edbed3b9f866ac7bc7fe4ee1f03d1759733563d557806b47f42b6f12058e557e5fd34521c35647a34fd565144c1544f2eb98e4ba1ac9d12092dfc0dcae9eceed582d3356288ee335dba09d2e6f6221d6d785d8122431b5e3874d198e6d85144487b7301d1ae874e8a4496c8975492dd9bd8d69d550a795370bc49bd16ad25ff30e166a235da8f16ba7f4a1a766fdbb981e8dfd5a9f4adfcd7b58a84d825a6fd683f33ea647539d1ecd40aa88ef238c6da31224f40fb0d09be9426faf490f9816a9d1f810d3a7394603e64aac002ce05580552915c51f61a1b7c0f2c47cb718cc73439ee6b6ba339dfd5c3207040af1632cc49698bdba10bd76ed7e7c567a90d03fc1426f95ccf762ebeb67f0b45020a6110509fd532cf4d67e7d0fd32235dffbaf4e1fd6326813d1f42e8e0dd632f80c33b66dc4ac17e4734c703b1dc50efcbd7562f08ad1cbe45534fd7eae1b39c34d01675f7f81716cafe1d86c5c308e5f62e676d099db2d90b9ea7699a902f80a03d05103206b4230005f63003ae900b0318709dc28cf44b877ef3c3727999e4273f31bccbcce1af3a60734ef5bccbc5db0161f1b79f526bc07ab0a7e8799d1456346a7c9c1ccf81e139ea9117ee6d460c27fc018754dd6569dcc3dbb10b841b08ee21fb19077f5db56d569905a76fd13a64b379d2edef6d0b1b4cfdacc05eedfc1d6d0fe8c85d95d1726bb4d2d9c5fb0707a601511360dbc80ef129b5a1fd2af98c3f6d438eccb011df637cc9c5e580ddf738772171bdb7d6902af6106ddfef5772cd42c2ca7944e3a5d4caa88853bcef15627044b2e7f601af4d669d051935c1269925ab2f953a7134ba97d22e6dbaffd8519dc576770e384c88318f537166e3f5db86d7c814e0def3f1a4db233d9c3746e513acf896d249bda16a5fd2355c7b7b2bb323baaee20ea27b401aebc7a4c1c8376e64cc719e3fe57e2fed7cafdefb3190eb6517b7644bf6ba99f30b1eeba7fb1bc2e4793d7359a192caf7322882b0ed4b962262f22bc31bc4cae76291f6c2a12e7ab6f717f63f7998eb71d44a6c81533795ba78067f741dc33a2d38e993e4863faf080a64731d30763192e7e9444514af94006665eaec6bcc280e6d5c2cc1ba233afb353b5e9e1d5b833b959ac71119b1fc09ead74ff2d71bca3d082185d1b337aa8c6e893021a5d07337a98cee8ee4a9c2e8f1b8fe9c7e335d65d9a29f2bf725e7ff79c5e420a56d0d6c5100cd720b83720827a1882113a046ceed3449e324b8441151c4589a8a0c106681013ebebb460e5f6484db91d74fbcd069889bb25eb08aa5a6e7ac7c80431ad2116fa28bf1d419816a995e18d30d4bb574315a931e6aa7b685cf5d659c15cb5094672b48e243baf31cf7d309b33cb74b23843391adddb7dc24ebaa8e05915eb0329e364653a651955269f1b51ea6ce2797745e0fcba29467a8c86b4139074338c749eae1f6a7630d2cd31d263b1c12c76e6e55a4e740b27172be11879cf5f7b07a2d702d3611cd60f00e37722ffa9846f1f1f746a714b0ced780ddaa303a26d85993501cb0ee638b2b5e8357f3379769019676e7c791bc4d8d698b11335c6be1dd0d83698f0491ae1f5f283096f8b099fac11de2fa0f07698f0291ae10b020a6f8f099faa11be3da0f00e98f0691ae165018577c4bc773a565b88758d31af9dc13353d6282ce33508b91368b00a51274c8b19585db56a475d626d522b5a3b637acdc43ad0e6bb6f8e770bf65981c2d9050b6716d68d3c978fac4d700bc4198142ea8285345b17129390e71605f901edc9c442d913eb41c3d6050709b52b16ea1cac1b52da969962bced8a853817ebd48d85986a0c76c3b2837c4d7670f0c260d94177cca0793a8358078b7a8c52665c1b8ab5a9bce67f6c2f6775e42a88f13d30fde663194532fdbce60e5c9798cac0784f4cafbd747af535d22bd6b9e2d5cde46f4187d37b6974ceded5bd8d2c736c3a2c37b583721744fcae2d5918617d765e5f40f56886f5e4656149776f4dd29dbe2458d2ed8d09df47237c5140e17d74c299af2cd261560533c288e0be98d68b7555f3805af7c3842fd1083f33a0f0fe98f0a5baaaf0b260c20760c2976984b70b283c1bcbac0a74991537c97d73a3ebf4854e69e03edc1c2cb4e5bad0bc53d8627b9ec35053abc30dc4c25fa10b9f75f37a0d4d96b9b21e516fe1f83ab14b89cc7083683008d3a010ab25c434800ba6838439180bb3086b6cc7c2dccb592d7af553d95b3e170b79251edfdeae60ec61d5b0834e94188285bf4a177e87387f4ba6476a1e38144bccab3589b9a23058621ea613cede2ff6933337c4050fd7550fd80ca5083bc580ae7a304f9c73b08dcf045a254618623263a717b3e237d1db2ca6bc79959bb81e892b0c6b7c5718d6f20a437fc721d415ab428cd045379bee5b52f983b2c2afd4fd21caf55e97546f6f5d1ecbf3563adea1c1c1f50eb28e70249656d76325111b8958eedeaee26935d84ac1ddb0d0cab03c31d1d9f241421e8585bc4117f240f7768603cfa1cfacdcff33d909f62cbe568af50e5e1381c59577cd14db7e04df8062774cff72ac97089ee91d9f1252df7e640f4c8b8d58491edb6cc76b7a7a336e53d76034a64105d6c3102b5bf672ca45891224c43158889b74218e31f49c02eed9eb45139da568e643725865259799d8abba06b22e0f2b19376b4ac62b8b82958c6375c25981b7c54fc9d81c173c0e8b93ad7e0427c0311e13bc4d17d93d78647b932a66f36c9b5556b2f942eb32c7db259355e7b21db8d3ce249e81b1f1b16cb7202c1183bbc12a9713b068db57136ddd57068bb6893ae1acdeb19f1fba6bf1a6e6248ceefe86d136592798552c0ff023783b2e780a26f8c048d553bbfa381ace09844fc522f1204d246e0f1889d330d607eb3c79b0b127cbbdb4c6f26b05cf98b2ddb0bd9e46f96bb086c4740cd0211a403f050434030374a80e502e31a054b7e29a89213a4c83a86c553044b33044879bf9507c452e3e3ff436efd7434a656bffd9580a3e429382db044cc17b62f48fd4d0ff2a20fd3918fda374f4875403fdd851007afea91d1530178374b406d2ead5c120e563908ed1411a85409aced14048b1c3b3bcc92eab78fd8ad5eab2e37a84e46eea7a60f2d7a019df3c0cd9b11a641f0744361f43769c0ed91e6946c69abaa9eec9b017866dbb06dbb2e260d81660d88e0f525e04c3261769e0de551010d1420cd1091a446f0744b43786e844b32255ee1503f32a7824871e4faa8776ec83213a498368c19a60881661884ed6211aea1b1144a062925b7de098e41b41302dc6309da2c1f472404c4b304cffd1611a91664cb3024fb95e8ac13a55036bf6da60b09661b04ed3c11a690c4bddd102ab2ca47e3a6e0186eb740dae9d01712dc7709da1c335c81817cbe05987a01e93fc35089e15189e333578269704c35388e1398baad22f7703d1034a65a792220cd0d91a408f0404b41203740e1520b9610896d0826f66b20a0374ae06d098d26080566380ced3011a5e2d35a5f8a921b1a94eb00b22b571dc620cd5f91a54f70644b5064375810ed56e69426536fcbc160376a1ae6f725d30602518b08b74c0b2ab0598ba5766aa9db6a518988b35602e0c08661d26fc128df07aeb83095f8f51bf5447bd6fb5509795fe54699761402ed300393c20900d98f0cb751d3f01859763b4afa0a31dfb6da22ba9888f3b05a1bd110372a5ae93a72c18900aac0fef2a4d1f1e3be223481fde264cf3ab757d2d0135df8c45e53541da31e651c93231af1ae515836bc19320d1bc058b896b35313120604c6cc562e23a5df7cd866031b10d8b89eb29b3b0d836f6a9d0de17037283aeb3262090fd302037e2e3dae9724daf8ac22a26ab1d6ffb97a0b9fffe18ba9b749d38e5c1d01d80a1bb99d297cc4e0a3a1003728baebb262090833020b7d20181e74ca792b80ec680dca6eb92d9180cc8211890db7540fa570b10b5c325152887627adfa1d37b9ae388ad5de3a7a9783ab184cbb6bb8c6d63505ca97da6665ad248fe065b87b14df8ba9cdb9f2966f7b3d518f1536bbcdfbd1da9636c4607b2f930cce63b75367770aa4ef0617b8b64ba2d76369989d90bcfc448652dcbe1984677e934ea846a547512a4d466640aab558ed069c56eef8eb09dea9416c66967eff96ad3f1e55502a88d07702466f63d3ab3bdb3cc978a7954250e3bcfd35b6b581cb0ee7a942e5c36fbe8de08db88283edcaa9247e3928fd64966d9c67d11b3a9c1c7602adf6faaf2b198e4074c251f8749de612a79bb4e329bb0f4a01fcc09262c1d8fa9fc90a9ca2760921f36957ca24e323b96e8113f30bec4059f84097ed450f0c998e0c70c059f82097edc50f07f30877bc2d0e14ec5043f6928f8344cf05386824fc7043f6d28f80c4cf04e43c16762829f31147c1696db3f6b98db9f8d097ece50f039188ae70d519c8b69fc82a1c6e761f9e68ba6f9e6f998e4974c255f80497ed954f28598e4574c255fa493cc369c7c35627e64fbc558befc9a61be7c09a6f5ebd5a0f5a518ec374c615f86497ed354f2e53ac96c5dc65b7e48e7e182afc004bf6d28f84a8cc53ba62caec2f2a4770df3a4ab3195df3355f91a2ca1bc6f9850aec554fec054e5eb30c7f8d0d031aec75a871ff9119ca0f977834e30db53ece388f99e623762a03f31057d1306fa5343d037eb04b39554fff523b8292ef8168cc567a62c6ec592f6e78649fb364ce52f4c55be1d4bda5f1a26ed3b30165f19b2b81363f1b5298bbb3095bf3154f96e4ce56f4d55be078bbeef0ca3ef5e8cc5f7862ceec358fc60cae27e4ce51f0d557e0053f92753957760d1f7b361f43d88e5cabf18e6ca0f61827f3514fc3006f93753c88f607ef1bba15f3c8aa9fc87a9ca8f617ef1a7a15f3c8e09fecb50f013985ffc6de8174f6290ff3185fc14c6e25f43164f632cd8fec6262c7662822386829fc12047a386909fc5125f861f951324bee730956b99aafc3ce617b5fda89cc02f5ec004d73114fc22e617750dfde2250c723d53c82f637e51dfd02f5ec1546e60aaf2ab58f435348cbed730168d0c59bc8eb1686ccae20d4ce526862abf89a9dcd454e5b7b0e86b66187d6f632a373755f91d8c720b43caef622ab73455f93d8c722b43caef632c5a1bb2f80063d1c694c58798e4b6a6923fc228b733a4fc31d673dd3e6ade73fd09a6750743ad3fc5b4ee580d5aff1713dea91a847f8621e96c88e4734ceb5daa41eb2f30e15daa41f8973ae16c03dfcc283b5e56155e45f44e5cf45718edae86b4bfc674ded558e76fb06ee16e51f36ee16f31e1ddab41f87798f01ed520fc7b2c6fed699ab7fe8049ee652af947ac08cb322cc27ec254ee6daaf2cf588ae96398627ec19ca36f3538c7af188f7ea63c7ec378f437e4f13ba6f2005395ffc024679b4afe13939c632af92fac8019580d05ccdf3ae16c1ae7203f71d80717fc0fc663b0298f7f31c9b9a692599794d6a187183a744427986576430d33bba84e306331cc9445062679b8a9e45a98e411a6926b6392479a4aae8349decd54725d9d6436603bcafd2143919cc34e6dcb74aafeafeafeb2c3f020ebe98264c78deceec71bdbe082eb636ebe87a19b37d0096673e246fb119c604e5c432c5ec798c66b234c729ea9e4c698e4b1a6929b60f9df38c3fcaf29e618e30d1da319c66282298be6188b89862c5a602c2619b26889b1986ccaa215c6628a218bd698ca534d556e83499e662ab92d0663ba218c769863cc30748cf6188b99a62c3a602c6619b2e888b1986dc8a213c6624f53169d3116730c59eca213cc5a8773aba175d805d33adf50eb4c0cf43c53d05d31c9f34d25ef8a49decb5472370cf30243ccdd3195179aaadc4327994dd9dcdb8fca894e05c358ec63c8a2974e306b282faa8686729646787677f73632d7a13cf8235ef278be0ad73b799b6d4d5feafec656edb2b5b6c5eef3c487792c766de8aae1c059441416fc708c2551763846db2a1626d3033ba8a3b78e620f46715e1a29e60b9973f926fdeb5220b954d338cbeec9ec685fc50e3fa175aa8c067d3c2ce3f1909a6c2c2efa6009bcc03081f7c512f872c304de0f4be02baa2181f7c784175683f00198f0a26a109ead13ceb2a69589d2bb1a004bea480039ba0058aa5da5eba360c900f8b31ace323c9c819847ae36f4c84198e06243c183b1bad99a6aa89be562e968ad613a1a82551a4a4c2b0d4331954b0d551e86a9bcce54e5e198caeb0d551e81a5f9b26a48f32331ad37186abd1ba6757935683d0a13beb11a84ef8eb94885a98bec81c1de64087b34c6637335f0188369bdc550eb3c4cebadd5a0f5584cf8b66a103e0e2b07f6352c07c66345f07ed554044fc08ae0fdabb7089e88113ac090d0248cd081d544683246e8a0ea2534052374b021a1a998e0430c054fc33282430d3382e9588e7b98698e3b03cb050eaf865c60a64e381bf33ec20f8f0463deb330d0471a829e8de138aa1a70ec89697db4a1d67330ad8fa906ade762c28fad06e1f958523cce3029cec3586f37643d5f2798ad7a38de8fe004ab1ef6c2d2f809a6697c0106f94443c80b7582d9c1a527f9113c0017bc37c6e2645316fbe824b3f18e53fca89c60bc6311a6f27f4c555e8cb9f2a986aebc0453f93453959762924f3795bc0c837186218c024ce5334d555eae93dcc5bd3dcbfda17952c9b5f149152b30673edbd0990b3195cf3155b9088bbf730de36f25a6f279a62aafc23ce37c53cf588d49bec054723126f94253c96b309fbbc8d0e7d6629e71b1a16794601a5f62a8712906f95253c8eb30169719b2588f75a35e5e0ddda865188f2b4c796cc0245f692ab95c2799cd0abc4ad798ad9659811b7541b2598157fb89dc04b3022b304ad79852da84f9e3b586feb81953f93a5395b7602a5f6fa8f2562cfa6e308cbe6d188b1b4d59ec8b49bec954f27e98e49b4d25ef8fc5df2d86f17700a6f2ada62a1f88a97c9ba1ca076199d4ed6499d4c15890779005790896b0ee344c588762317e97698c1f8649bedb54f2e198e47b4c251f8149bed754f29198ffdf67e8ff47e904b3858ef7474d173a1e8de9fc80a1cec76035ad1dd550d33a16d3fa4143ad8fc3b47ea81ab4de8e69fdb0a1d6c7632efd88a94b9f80f5703d6ad8c37522e6d28f19bbf44918e6c70d319f8c39c713d5e01ca760c29fac06e1ffc17a409f32ec013d15f38fa70dfde334cc3f761afbc7e9987f3c63e81f676051f86c3544e19998f0e7aa41f8591892e70d919c8d69fd4235687d0ee6d52f1a7af5b9587efa92697e7a1ed617f3b2615fccf998e0570c055f80b9c6ab86ae712106f93553c81761925f37957c3146f90d43ca97602abf69aaf2a558fcbd65187f97612abf6daaf2e598e4774c255f81c178d710c69598caef99aa7c159683be5f0d39e8d5188f0f0c795c83f1f8d094c7b558c3fc23b286f97558c3fc63c386f9f518a54f4c29dd8045eca786117b23a6f27f4d55be0953f93343956fc654fedc54e55b30c95f984abe1583f1a5218cdb3095bf3255f9762c617e4d9630efc012e6378609f34eac9cffd6b09cbf0b13fc9da1e0bb3187f9ded061eec11ce6075387b91753f9474395efc3dce22743b7b81f73f19fc95cfc01ac8df38b611b6707e689bf1a7ae2835885e5b76aa8b03c8409ffbd1a843fac119eddcbbd8d143b946b06bd734c0788734e070369b1b33b9984f9fc70cb22f729fc7b822bb59cafc2636bf23c595252e2b5857fb8f676d630e3dc220a37be3af0cf285b1dd89f7f41a533b68af0112ceaffaa86a87f14cbe5fe36cde51ed34966270dff13952f27513bc149c38f636aff6baaf613186d27c39cf69398f04835087f0a6312cd3064f2342639c354f24eac28ac956156143e8375a3d6ce30ed467d16d3b98ea1cecf613ad735d6f9792c06eb99c6e00b98e4faa6925fc424373095fc1256b768e8270613d42d5ec6546e64aaf22b98ca8d0d557e1553b989a9caaf61995dd36ac8ec5ec78437ab06e16f60c29b5783f03731e02d4c81bfa593bcab7bdbd28f8f2cc427c2be8da9dcca54e57730c9ad4d25bf8b496e632af93d4c725b53c9ef6392db994afe002bb3da1b96591f62ada90e7e0427684d7d84b1e868cae2634c722753c99f60923b9b4afe1493bc8ba9e4ff629ed1c5d0333ec354ce3455f9734ce5ae862a7f81a9bcaba9ca5f6292bb994afe0a83d1dd10c6d758caee6198b2bfc158f43465f12d5600f6322c00bfc354ce3255f97b8c726f43ca3f607ed1c7d02f7ec458f43565f113a6723f43957fc654ee6faaf22f98ca030c55fe155339db54e5df3095730c55fe1d5379a0a9ca7f602a0f3254f94f2cf50d364c7d7f613df1b97e0427e889ff1b833cc414f23f98e4a1a692ffc5240f3395ccfae4b492879b4a8e609247984a8e6292479a4acec024ef662ab916267994a9e4da98e4dd4d25d7c124ef612ab92e2679b4a9e47a98e431a692eb6392f34c2537c0248f3595dc10933cce5472234cf27853c98d31c9134c2537c1244f3495dc14933cc95472334cf26453c9cd31c9534c25b7c0244f3595dc12933ccd54722b4cf27453c9ad31c9334c25b7c124cf3495dc16933ccb54723b4cf26c53c9ed31c97b9a4aee80499e632ab9232679aea9e44e98e47c53c99d31c9f34c25efa293cc1a29f30d1b295d74825923652fc3464a26a6f102438dbb621a2f34d478578de0ec2c877ca2ca3cf759b1fbeb366702ffb5984ff5609b43973b6c53e88dce4a3ea9a3944febc0de96d34f66b8d742573ba647e2892a7bfbe1b50eefb7eaa68b08c66b1f43c1ddb164b4c83419f5c09c72b1a153f6c49c7289a153f6c2345e6aa87116a6f132438d7beb04f37dc90d0793fb60feb6dcd0dffa62feb6c2d4dffa61920b4d25f7c7fca2c8d02f06607eb1d2d02fb2318d57196a9c8369bcda50e3819827171b7af220cc93d7187af260ccdfd69afa5baeae70eccd0ac7b5355238569d17b98f28ecaaaf802cd1c58676066769069bc199edfe45ab2f368b73882ede59ecacf3e3504c7b44f0509d6076bbdefda1a3ea50e29f2a01d4c6fd6a982e00361ba62cc37c36cc704cf8866a103e024b6be5a6696d2496a16d34ccd076d309eee0de56f811bc1d173c0a13bcc950f0ee18e4cda690f7c08aa32d86c5d1684ce5ada62a8fc112e3b66a4a8c79ba00bab9b7fbfa6192e09cceb15849ba9ffb432f4570240fcd476739cb9d35ee7585fbcb0067a9fbef7a374f5dea4a65796b092f51d857ec97e412d85b30e76725cf7a9ecfb2665790027d1c66dffe3afb86a0f68d77ff5beebeb44a5837ddd5671598d7af6a9cc89af9ee176c6540103bc663761ca0b3631ebf65ab0ce6b9e1b092cd2be54af9df537829c74afa95ee275e493fa5f2cd096ef9ef958373b8fe45aeae9bf9db038425ecd74257e2266e11931bfb46b5d5ab3f147392d5c16102c6e1401d8722620e15ce6c1effab788740290f9a595b204ef04a4c83d25f26629c0ed2711a59c9c95b9532d6fd69a3fbc33c5e572ce1e9a158d40897f254bd517ccef40ae2fba9a7e449984507eb2cda9b30e62719c73cce2b0891c91891437444f640f3b679eef793b81d65ce6a9e537b766ee4762ee5679e9554e6727a19e3e2de31f5de29986587ea2c1b9ad0b27cf7bab5b25492365588a7d4f9d554cc92c374964c442d99c4bd4c57ce7ade58b515a36a9feffe5d263c138fc37819412c9d86597ab8ced2dd12c619ab3514b84f8a9458635ac9145635df89cf5baa23f6a663361da1b329d7896f6f8fe324bd9c43c656befb6caef02f5d3e9128ef84df05b1620666c5913a2bfa278c99b922cf8fe586ab44dc6cae14515d7acfc4f43e0a4b3b58a8f1355266cb06f7a30251b26d4ba871a25faaab6c9b85597ab4ced21101636863a018aa8e74331bb3e7189d3da394dac760edda5a599ab3d337591c96b91f57381379bda4c4d50fe686de5bec5e57ab81928258b52766d5b13aab4ea8b13af8784ea4c08d43964bcee512d6f3f73706a891c6fb046e09f3bf4d0e3b1b35a681777a6af595a27330f2c7e9c80f406ab330dee3f3ae09dcdb644e509d3e3317d37cbb4ef3c9d59812e6064c09d5114ff998b5c76335523cff8479f63c5eee97bbefce747f5de5fecdda23eb35a57ce23a40ea39f43cccb213749675f7ed81938407e2a9328896f3312d4fd469d9b34a89190b353e7d4ce7beb7cafd7b75155dbd9c6cb01b52104df7c2343d49a7e97845d35898d04b26f15ef90291afe6bbbaea7c20f62dfebcbabc660166e5c97eacc4fad42624a9bdc4d721e95be60b312b4fc15a6b89eb69537859b8ce2d198b2b6b39416a2ca95bb23766c97f74964cf359e39cce4bf78d951e39cbf5ce581cd674dd731fcce65375364ff169f30c3e2ec67269d9fb8be7d9a9599c6aab621166ef693a7b07f96cd379b9c7406768a0165decab20162cc62c385d67c1c04016e8f23fdcb6d4f2fe2598fe67e8f41fed2befcf736b2a85a29f52e763c173fdd46c5b8ad976a679dc248e81eaf1ad6598fe67051b2fc1fbab649da2803ff3da35acae5ae2e6f7d597ab1560769c8db54083dae1d5aff38015f4fd51cb31abced159b5ddb1a3053a51f49117056a7f42cfaed9d6e70a8cfab9e625862ee5262f3182e64a859805e7e92c18e72bc7f5d38f96ceba761166e3f9267db5e3ddff36a1633a78ed047e17c48a9598151760e376f17dfcdeccaeb96e0cc5dad013f9485569929ea04496aa728358b40ab3e842ac44496e91d78b8e8fd4f8fd2d881dab313b2ef29386aab6adfdd55b12f5cf55bf8dc5988d179bf4b8cfe57e55c14b8115092c4d672b600d66e9253a4b27f9b4d45f0f44ba5b786b315b2ff5e7b97a5bc7f31a41b1fb9e0df15982d97859b011e3193cf656bb7522cfd671bc1ec37a607358ed3e0d969462965cee2f0deaf3197fa35ea9e435a9fbe53accd22b7496e6f82cb1c7baef5468e22371df97f74d10edd763da5fe9afafdb0b3148bf5ecc32fdd3ea8a9732ccb2abfcf48205e99b4ddc1396cedae306cce6abfdc466d55437d1f116861568bc0d4f678947ff532bd3cb31cbaef1d7a7496119b5cd1b319bafc56caeae513739d6ee797ba16bdd3af7575d5aaeeebe810acce6ebb099bcc9536db21c299d29741366dff53afb26a025bc3747a288ebc07c4ece278a8fbfe2cade9182b8b7e8e3713366e70dd88871f2780c360291ce58dd82597ba39fbe957940a73c3e179bf539251a59c56d80b28258b015b3e026ffe98ef5d2064f775e7fb0bf9efad463681b66dfcd58bf0a3ef23dbbb257b0dc8d2fb6ee2c7e466decd771bc3742378f31b558da17b3e2169d158babc90aaf972588a49817a7fe65102efb615c6ed571e9a178af9ae6e8e60bec8fe9795beaa59b9a2bd6643e780066dfed58ab2f35dff09f3706911fc4d203314befd0599a9d524a4cbc3e21f5583a08d3fd4e6c8e7370dd651a2a76bc59101b79ed631d1f8399e56ce17598aab3ec53b7e960cca6bbb09e93d46d2ae4569589b7668a51a1eaaaf51f82597277f59554307666f02f2aaa393e0ec5acb8c7cf9c21acff27598d22dd7d3f876156de8bb5b775713593c7c616de225d8bcc5c5bcfe79e94c4c52865fe763866d97d3acb86a1ed94aa9bccc45bc6c643ca9dd85a0fbf5282d8720466cbfdd86894df9525f1b65454d192caa223318b1ec0e69e048b9d89fcf7aa658e9a8a286c3b0ab36d47b0390fc9626b9553754e046e936e064510ab8ec6ac7a3058bb1fb3ca96f553c760763e84f559558f9d55478253b134b5d6c7b198cd0ffb69fd438f326dfda7ea9dc761163ca2b3605165395633ab5261ccfa2de3e53741a86cc7a83ceaa7375d8618a4fe12b30cf3e4eaa9b71c8f59f6989fd1397c9784e4a373e99ed57d0266e9e3e6b39e863ab949ecd3a55bf655100b4ec42c78c27f9f010b3378cf9c671ff63c780cd575ff8d44d8fe3113b81cb6126636ef5bf672f0ec3eee4f7c84549e5329738d0171394cec39d3a0d425ce42ceafcc1f62a75362129e74d1d5893ade3fbd220c7b85486491950ac1016255b8ec69f7e609b03d0426f19cac88e7396cb5f974de9eaa70d41342312b7439e500905742eb92db24f79a62b30857f07a178bdde5aeefd4151649592ee9be8cf4ff9aa54fb158ed2762359acdfe8af44dd19b926bf174867768a2ce87da56210bcb269dee9e00d9971061a72d2c7526f3c454c82364b6fbf726debc4b1a16cc837461f5e70264a992541c1c52d0896bcf1dcc9b0256ee789d91392d1ca76eed680e8b839d94a05a7250f35c6985625c7e3e8fbf4d8e37df2eb68a380cd86a758b617b86125b538e8db931ec26982a326336dd390cb87297c4703d4b89ab0dc735d77da55ce490125b89c809d90cf2f2ca9e8c30c06bd53306ef394a78ad38bcd831d2f962385a7675c1c41b0670fb378a817b9e125c33051c5395f5a8840dd89500d80b94c01a56290c24b230606a941bc3f42225a64e9aca856c6f7baac072739c18575c159a62e1d24e31902f51826cce41e67374de145958f998c1a756852389b6db3586ec654a64ed92fade58a748f4d08de705c5aa5000ec0e7cee154a808db5353736096065482a1e65a0d6f62a7d71007dcd1b475b1b0a4c39ed62985ea36f42e5b9b955216ff2cfe0c0bc8dcbca4357d9d8d92086edf5f4b63cd53641982a1fce9018b637d259a99549326c7e361b546adfa4f7b3f81233decfd8fc81ad21c9fc2f05adceb728b1d5e1d8bc6947e52181c3fe9170dea6af44409f9ac355d8e6b0195a6140b57fcb18aa77d29bfce63aeb7967cf0afe7785e32d92280d05b65699316cef52626b50a574cce3fd666180f4555e0cd27bf4bdb089b2f630e0fa0d745abf9ffe5cabccf156e48501d5eb1d62a83e48679fabea5761ab6dbd0c6a5b1fd283833ea6ae951be7783b8185a315b9b3490cdc47e96d6c33016cba4118307ddc2c86e9634a4cad7df857acbf350ce8ae6c1a43f709fd201c5613f38eb12a0a59f2bc719718bc4f29e1b540ab1ae11bb9acd72a06edbf35533f9b2e164d840157a736315c9fd1979de31c6f165839ff9c5531d8b4955962165db9a8928401dcc7bd63e03ea71f146195d99522f0d5caf28d15ce0aa1d414c7dbfc2a0c00fb2d8b01fc22bd45833aaa3481ff12a611a54230a2f465cd5679631b218601dcad8d63e0be4a6ff1a0820b032e07e0fa3abd5510587f8bb555c3002d3f3306ed1bfa29063138b24c2d0a5d13be3b68c27f4b9f2c211e75c65918705dd93f86eb3bfab273a99323e6f4b3f53761afb9ed0f6a6edfd7ece0dc6caed4e650606b9615c3f6037d128ded6d20470862d5dc30e0fa6e690cd78f94b8da26cdd164c576558872b8ee7d62f87e4aff3ca08290cc66dcbf7d0cd3cff4550d36fb67ad0337e998211429084d97e4bd8b62c87ea147865569f3781b201c15da97bb3064756b2bc2d5a59fa92f110bc6195fccc68a8e09ce56a78c3f65f20ab96cb0b88d9dfd689de6bfc2c5695955a6a76405988697e5b35590e56bb25556a0051a5565ea5625549599680032cb474b3a2b5037859fb763030559014765b2120c766545122dddcb4a32f326cb773fbd8e99da39add3537a00f61b2b15312de5487b564ab3b8b302f7d26519ad54d0859778c028cb677e9e156052902e46f5dd1e593e9713c8d0fdac794ce425322566055edda6b31f9b93e8e75dd944ca0adc16cd0a34e6909542453acb47774256828547bad8c2e60967a1b3a6b27c56ceb27c2ceccc4ab28420cb47eb2c2ba5218bd8fa7f5860c7d6ede7b0f5ffbffd7fbe343f87ad58ff9d41182b6aad5e3df60fca7aec2e22dd793b31b0bd9efdef99b3d419aaead3a98a3e73c436a8de3128b226abd3ac7e5c5d776dc487b1a9d477cf8cc49a087fd28fedc5a38502d5ad9787bb6690e11cedc7c054701e1e8de1fccb269c234289f34680f36f9b700e0c25ceab4162ffc7269c834289f35180f35f9b700e0e25ce0f004ea7964538734389f35f80336213ce21a1c4d9121445519b700e0d25ce610067864d388785126729c0598b12276b997b817a3d75c834bcea43d6860a19ebbf95c86a5322eba4f140fc309b294ea9e8c4584ae98964580f019e58271d097b159ab4a1faac0544d83eaf4f85735f508ad7b509e7f050e25c0570d6b309e79050e26c0d70d6b709676e28717e0f8aa40636e11c164a9c73817736b409e7d050e2ec077036b209e7c050e23c1e24f6c636e11c1c4a9c0f009c4d6cc239289438cf06389b52e26ceb246e9fc76f243fc82d8ac8607e4905b32d681335b30926a16792c16c056036b709e69010c26c0e60b6b009666e08613601305bda0493b01f890ca60360b6b209e6a010c2fc0d54dd5bdb0473600861fe0c60b6b109664e08617e0560b6b509e68810c2ec0cf2cc7636c11c1e42981d00ccf69430db248119dfd54158cb5c4485f21180b203254ab6e6409e471c9b551cd6114a264562eb4889adb5f0400fd446473d92ce53dd3bee8cb090a94d05f20850c874a204d9419394f19389bdb535a4f386f3a890ee04483ba7a3bb0df34d288ee58fb9943d4475a9702e033877b109e79050e2dc067076b1092769ff2519ce5c8033d3269c834389731ac0d9d5269c39a1c4d904e0dcd5269c034389b32bc0d9ad26db3d2acef0a11c08da3ddd2951b64ae29963ddbfd95fa4186b478830bee6c430f6a8498cd252528cdba9bc710a48d83dd3d13be42f9f249daa4596b4af073ed9cb2698612c726e0030b36c8249380a4906f35a00b3b74d30097b2ec9605e0760f6b10926e1282419cc0b01ccbe36c1241c1f2783791180d9cf2698841dc46430cf0330fbdb04338cad9e0b00cc0136c1241c852483792380996d134cc2f17132983701983935dbb5e18962cb4e4987d4cea7427909684c0eac4994f1530dc23805e644807210254a363abe8923f4f6be63bb60857774bc0948cc8329b1c9f5bbf8847f2830cf611badb10908a4bd44cba9b0ce01587329b1b2f82b73f05d0cc9d0f5a142d705a01b42892e53786489fb52092fb3d9de05e37842ae70bccd0b13ef7240984f92ed71b037e84d1f9a8e22c75f55288ced9de1c0538751a26c9fa4f4aebaaf1669cd92cc375b65c4800eb70d2861bb876ebb1d0074846d4009cb7532a08d00d091b6010d6371d41000ddcd36a061dcc3a809003aca36a084fded64401b03a0bbdb06947034880c683300740fdb80128e5592016d0a808eb60d28e1483a19d01600e818db8012cef32003da1c00cda304ea7feb716fdb7dd6305dc9c595d23642d7514debda15a01d4bddef592a4e8d80a74acca2ecf76c4ee5916c8d89c436ae66bb41c23e88b119a01c5f938318e31d7612ca728192b0f2be244a847212e89c9b90cebe4f7604c3469e4b7aa75e78e2fed766124f04782752e26d8ce6952bdd7fc3975b7604497c1225b8e0e75b84b13a742ef0c3c936e124dddd950ce76d00e7149b70926ea94786f31630923ed5269ca43b6d91e17c0ee09c66134ed21d0ac970fe00704eb70967385be6b540de39c3269ca45b3993e16c0f70ceb40927e966b96438f7023867d98493742b67329c1500e76c4a9ca91fd640d801423687ae1ec0ba2725d6601b46912e9c269bc7f91128dfe7d804338cbbbcbe0760ceb509661877797d0bc0ccb709661877797d15c09c6713cc30eef2fa028039df269861dce5f57900732f9b60867197d7a700cc0536c10ce31297c701cc8536c10ce32eaf9f01987bdb04338cbbbc7e0260ee539330e347d3499339d978fa08d09c5c64134cc202880ce66e00e6629b6012568dc8608e023097d80493b0d24e06733480b9d4269884cd4932987900e6329b6012767490c11c0b6016d80493b00b8e0ce60c0073b94d30093b87c960ce063057d80493b0d24e06730e805968134cc2e62419ccb900661125cc60e75c10d632c9ceb9381ba05c4989b2817bc376f1287003cfe3edef6267b3fb43f80676739c18b25535e97d50dcd250ee6ef412f0bed5942859d09bf88ff9eeed56f763325803a860ed0afcae9812969c9f21e7ab97baaf16f2e2a26adec7ea89a413097652e1fc1274a3ad49074e2c19e70b2673ddf0e46441329ccba856534c0649792d25cee47b1b41f5e1de46845e9a1d21c2fa0f48f4259458d972868dae8075ee4b704fa3710edca2870c20d96a8a060060292540b91ab2c259edb063bc96561e9954c811caeb58f7e5d5ee479b1db6fa87154ac475c78654681f0368d7d56c4508b669c2d83cec0f72cff5e9681efa3d0a9eb056497610fcbec02fcb6c8249e89964303702981b6c8249d8d94b06b30cc02cb70926e1300419ccf500e6469b601276f692c12c07302b6c8249380c4106730380b9c9269884930ac8608e053037db0493b0394906737700738b4d3009bb3cc860ae0330b7da0493b0314906730d80b92d1d305738d8c173e1df77782d80b9af4d30c3b80d690980b91f254cff4722122670b223115f0718f7af498cd252528c644722ce06c31607d464d256471fc37824e2efc0270fb40966188f44fc03c03cc82698613c12f11700f3609b6086f148c4df00cc436c8219c623117f02300fb50966188f44fc19c03ccc2698613c22e40700f3709b608671fbc61f01cc236c8219c62311ff02308fb4096618270dfe0d601e4509b38b5375da81ff391d8328e192cde9b80b4c4438da66b884d90019dc3b01dc636c864b586091c1ed08e01e6b335cc2aa1519dc7600ee7136c3256c0490c15d01e06eb7196e182729ee03e01e6f335cc28e1532b8e701b827d80c97b00b900c6e09807ba2cd70093babc9e05e0ce09e64335cc2611532b8e703b82753c2ade7deb08d4dd982aef01e0bdeda89e13a851297eec026ffbe18c6647e2f182dfd0f25dad44f5c274ce06427ae17018f3d953a81cbe587f94e58576e7607b84ea3c4c58e0d633f97f057663b6cd1d64af7453601277c89b736c0763a25b60e9a7c51bf83f6b84ab8a409771815d2fb41c97c0625d26007d28771507934f0ce33295136e628cbdc1f5981c1d6648e7559b0b3add8df64e02650811b0cc09d95eeea0e9eac4b9d32eeab45fc6dd219c96ba9e6d89d06aa3b6753a2956bdafd2f230ce304ef8d00e73936e11c1e4a9c0500e7b936e11c124a9c8d01cef36cc2991b4a9c5f8162e97c9b700e0b25cee9c03b2fb009e7d050e2cc02382fb40927e97eb064388f0289fd229b700e0e25ceab01ce8b6dc2493a204c86f37480f3127b5b48845370c85a480d4007c8a5e9e8104e8e563d958db033846c08e30e80f5b27477d5794318739df1ce3467acfb22eb9f96c31ae5fc0dc2f94c7954486f0225fee594485b3b89bbea3cd5bd8dfe0841926df47705c84dafb0056418774cbc1880bcd21690847392c8405e05405e958eea92bf5e7806348c2b920e0539e5d536e1cc0d25cef900e73536e11c124a9c6b00ce6b6dc2493a9f930c6736c0799d4d38078712e7ee00e7f536e1cc0925ce5a00e70d36e124dd61960c672780f3464a9cc1b6da0fe35617ff012df49bd2e19918caaadb9d13b685c8b63bef0d70de6c5342cf0de59ace4290d06fb109e79050e23c00e0bcd5269ca48b62c9708e04386fb309e7e050e29c0570de6e13ce9c50e26c0170de61134ed2c3c5c870760738efa4c4d9d4bdf16675ae70d86a0b36b3d83b7323df09eb4cf76e4e0cde5d94f0e4c8a53ca368834ba288ff575839ea83fb661877b7c90735cebb29d1662a68cb5c12c54eb0e34cc8f0922d36a80ff0de438937d8162da4e7b092f9ea9e201bb8d7269861dc57711e80799f4d30c3b8afe20c00f37e9b60867109cc4c00f3019b6086b1af731a80b9c3269861dc57713a80f9a04d30c358f39c0c603e6413cc30eeab3815c07cd8269861dc57712180f9884d30c3d8f1b118c07c94bae363296f852fad94ba9437340b9c72fe12193cb26df927835ea3c728e1053b0b93b0bd437616663fd0127f9c1225db5c82bdbcd27d25bcbbc7b402c9f6094a5c8d85e7b1805772bf93b2d959c164e06a53817300b8276b32c9ce723f59e3feb582172b8449f64b2a94f780dcef294a9466bb699196cb643d932d407ef8b4cd70c3b8256f530077a7cd70c3d8a7fe32c8169eb1196e18b7e47d16c07dd666b861dc92f70d00f7399be186714bded700dce76d861bc62d79df07705fb0196e18b7e47d07c07dd166b861dcab3302aa622fd90c378c5bf2fe083cf7e574c08dcd1e89ed5bc7441570c1baf59ce467172fa2827b15f0dc576c864bd88820833b18c07dd566b8848d0832b8bb00b8af51c235db7a3a8cb5dcb3418efb3a75bf6ca1fbc346f7c172deef5f08f6a92503378c0a5c1f2706ee0d7b7d328c5d898f009f7c93126d6a3b2a13b6b7c8bcf5769083be958e51046c087a5eba0a23b26daf868184ff76ba13beff6daf08d1926d7bb51d24fc7728d1265bfd39d6fd743d2fa4bcb59fc329eba4a3a93cf50090e8dfb50927e959b36438af0138dfb30927e9b00b19cecb40627fdf269ca4074b92e17c00e0fcc0269c834389f36d80f3439b70e68612e79f00e74736e11c124a9c8d4151f4b14d38878612677780f3139b700e0b25ced500e7a794385b38708aae673febf8a848d7445db2d9a507393184ff4d8747fa3f2285704494accdbe09143f9fd98473782871ae00383fb709e79050e26c06707e6113cedc50e2fc06e49d5fda8473582871ce04def9954d38878612676f80f36b9b7092ce7522c3790c48ecdfd884737028715e03707e6b13ce41a1c47906c0f91d254eb9f2d3dfe29ddc502edf590b9a95dfdb049370a61d19cc2200f3079b60128eae93c15c0660fe68134cc23c930ce66200f3279b6012ae102183390fc0fcd926988473e5c860ee0960fe62134cc24e623298b300cc5f6d82493871860ce63400f3379b60124e3f2483b909c0fcdd2698842b97c960ae0330ffa084996cfb82f8ae0ec2f60fd92cf82701ca3f2951a6767a21615d338f0ae913a033eeaf74747760d362a1386ff15618770d3b04e0fcdb269ca45524babd9401ce7f6cc2493a69860ce76a80f35f9b70924e3824c3d913e064db1f59839374c22119ce510067c4269c39a1c4190538a336e10ce77ea01d01ce0c4a9cc18e380be3a6bf534035be16254ab88125049a867971644b0387013fac4d094fb6cdfd25eba1a13cffe0792706b38e4d30c378fec10b00665d9b6086f1fc83a700cc7a36c10ce3f907cf0098f56d8219c6f30f1e07301bd804338c55a12701cc8636c10ce3f9070f01988d6c8219c6f6cea30066639b6086f1fc831701cc2636c10ce3f9072f01984d6bb625ee89f2b6f0272ccbc916597d0a1a93cd6a1265fc406f18a7c69c0c5036a7eed4d8c47f644a96f1c57ee378726762d8da493278cda9e0d50349ba0525bc4e4eb249d750609efb5739df5b8eb4a36d3915d6bd01d69694585b3bec885ce67dab2a039fcb5ff50eca0dbb7fd607205bd9934f86716ed163209f6c4d89d26cd7b8306ee37f1640db86122dcbaed9c7eb5d79e13d90a72148d46dd391a8fd55cac3d827b41b40d98e1265fb24f963d58da10651e692641b48381931a0ed6d034ad8022703fa2f1873ec601bd0306e71f21d00dad136a084bd976440bf01403bd90694b0f54306f46700b4b36d40094b7932a03f02a0bbd80694705c920ce8ef006817db80128e9a9301fd1500cdb40d28e19c0e32a0ff00a05d6d034a38e3880ce8df00e8aef423419b5c6985fc440cefc3d9093ae9c20773a81383d9ad665bf0611f093a1fa0ec5e933d9ce37917dc728192b065b4244a84321b24f11e9428533bbc81b06d348cca3beb02a43dd33197dd6f31343c94bd4b97039cbd6cc2392294381f0738b36cc2497a8e3619cebbc130466f9b7086b32bf97580b38f4d38078712e7ef00675f9b70926e354186b321c83bfbd98473482871760538fbdb849374aa2119ce028073804d38878512e7be0067763aa679c92342bdf9727ef6f0206c1de55161bd1c144939e99e52e3ff3c36c21e7ab2f3d8ce006807da9401906e9b4f96011c0132804136e1243dd4810ce7cd00e7609b7092eea44d86f35a90d8736dc219cec1b82701ce2136e124dd989c0ce78700e7509b70926eb24b86330af2ce6136e1243dc1850c676b8073b84d384997ff93e1dc1de01c61134ed2135cc87096019c23a967c6b381b60237f0f0ce8c674bcc24aedd287175d6789fbe41c9cc809315488786fb50819d09fc7094ad6009bb40c8c0fe0d2a47bba7a367c91fd829ee4705ee13e259216419c156e0af7ba463ddbabf756f8329e7d291ad7c1b09608eb60966184f6f190e608eb10966184f6f190a60e6d904338ca7b7e40298636d8219c6d35bfa0298e36c8219c62d2a7a0298e36d8219c6d35bba0198136c8219c6d35bba0098136d8219c61d16c60098936c8219c6d35bf600302753c2eca681e9776c1dee534398fc4b3388200f01abdda75042eeeec4cf0b29e5bd9a5e0bbddc09b23f082166b2fd4176005f9e5a936b3c62aa130f15939d44f41040398d126523f7a6c0b5be90fbde8c387f0d9f07329112db744a6c1d1db8f3bbbc4ee4020ab5b3939672252b4238476922e8fb9c614fb226ac3a9125eb3740b29e59930b0ae3ab4e61acd2df0f92faac74af824b3ecf93b003996c9ee78b20a1cfa6449aa954930ac4f57fbb7af43d48fc7bda74604e384f30381c78eb1c9b7092ce5722c3b937c039d7269ca4f395c870ae0738f36dc2493ad7930ce74080739e4d3849c790c8708e0638e7db8433279438eb019c7bd98493b4f3830ce72e00e7027b8ec20be39125d703940b2951f670e2abf465eeff598731ecf7d4b5976683f7f2dcaf8a6967de2da4ea24f91654eef70e0b68428f2603fd1600bd0f25e856493287b1eedfec2f527fad4d857125c0b8a826314a4b49316ea7ca5f478191a5c594181b38de96e86cabb54dee5ff9eec3ad0e6177f2002a645d9d18b225e9f03cacb2144bc084f92059027e15605c5a9318630998102359025e09302eb3e7b027c2bc906c8bbf8f415db3c09e434cc238f9eb248072b99de715112676b2f38aa680c4be221d1b59c84a7a053ad9269f035dc7732226ae94d663d7511547834045a890126d63f78605caa4b1cad02c8e31bc6be15a009f2ca206271b8bec05266836f7bd22278c67666501702bed395e278c27abe70194abecda853b9cdba47507b9e16adb8086f1789dce0068b16d40c378bc4e1b00748d6d40c378bc4e6b0074ad6d40c378bc4e3b00b4c436a0613c5ea72d005a6a1bd0301eafd301005d671bd0306ea3d21e005d6f1bd0301eafd309002db30d68188fd7e908806eb0e744983076171feac45096db73220c61c94e7622cc783098bb911265138172a0b394bfba8adf95b93f97f357c2d7f5f108f0c28a744cddc27bdaa1fa6cc758c2445d9f0a671918b8d86413cee1a1c4b918e0dc6c134ed24e0f329cb501ce2d36e1cc0d25ceff82bc73ab4d38878512e704e09ddb6cc2393494383b009cfbda84736028711e0c12fb7e36e124ddde870ce7e500e7fe36e11c144a9ca7029c07a4a30594f33fd3023a10a03bd0a6ada08787b2cbed42d0163fc8269c234289f31e80f3609b700e0c25cedb40a5e8109b7086f3f8fa9700ce436dc249ba833119ce9f00cec36cc2991b4a9cb541de79b84d38433a9806701e6113cea1a1c4b908e03cd2269cc342897333c0791425cea64e6c0ca88c4fc15e1dfa36d02450f01c5d93c3baf1fd4484f3e0c8b6386b0a501e63e7491984c99b6c99c05f20791f4b89b597c643e3f7e51ae7b0dd0d4bf9df0cf3262e7282b3d9f1f63acce7d4e47c78421fbe900af6162706fb387b763c24ec9823cb0ece047ebbdd1694a47d9c64288783b947c7d7c4161372d5d0fffa467d6b80cf9e908ecee441ff339dc99f819cf3447bb6ee215cf24286f201e08527d564fb285f3099cb3d731ded1cb9655473e426009c27a763ed2f6b17b1fc32486e495ac693e597f780447f4a3a0e84c027c5c2444f7af01859b2df0e60fec72698615cd87a228079aa4d30c3b82ddfd100e66936c1245c3b4406f33800f3749b601296ed745b41039867d8049370dd2519cc2300cc336d8219c6fd37f70730cfb20926613d930ce66100e6d936c10c63f3f21400f31c9b6012eef74106f34c00f35c7b7691234449b62c700068a79f678f5f0e0f6563f273e097e7db04338c8dc92f01cc0b6c8219c6c6e42700e68536c10c6363f25300f3229b6086b131f9118079b14d30c3d898fc18c0bcc42698616c4c7e00605e6a13cc3036263f04302fb30966181b935f039897db04338c8dc96f01cc2b28617671b0932dfd8c5592767b908d55e680493457da0c378c03c15f83b6fb5536c30de3aca40f01dcab6d864b584f2583db05640bd7d80c97b0454506f74fe0b9d7da0c97b0ed4f06b727f0dceb6c864bd84b4506b72b807bbdcd7009fb53c9e00e00706fb0192e61cf3f19dc2c00f7464ab8ad3570a1404f7576c438ed395b5420c7009037519fb3c57c101ed438d57de2ad612a8c7b4e8691ecd8c65e6059d8cd94183b6afc115f1696ef78c7e891fa26d9517a0b41c5ea161ba1123662c9a09e00a0de6a2354c2260019d45301d4dbd231fb3eb5b23e8c75d45b41ce7abb9d67c511b6abc8ce8a2b706258efa0c4da55e3b14c890aee93ebdc3a005b605ba6a08edfb48db0f022dbb22d0a00df4909b8997b53e05a5fc813fa2067bc6bdb7af7536f96d42c67a5fb2f193eb2e3cf3a037c77d973fc5918e7a2ec0150de4d7d045fb180c856d2ade0feb78597f184957a3270d900dc3d94e0ea39ecec4216ece6101ff5d806e0bad7a63d3f47508e93d2ed480b2a3ef7d9849374d8990c6729c079bf4d38498f8024c3d90ee07cc0269cb9a1c419013877d884735828712e04381fb409e7d050e21c0a703e6413ce81a1c47932a8283d6c134ed2d54964389f05381fb109e7a050e2bc04e07c94126723a7ea89edb21b387c5dc03d01b6c7a87755525bd933dcbf3c81616c670f00e81eb7e7d441c2be1eb2e5854f03944fa47b20423fba33ce61fb299671e4de0e8aa4633c6ba986784f0595a0276d2a664650e2242b6636009c4fd9849374591719cea500e7d336e1243d4c9c0c675d8073a74d38734389f30b502c3d6313ce61a1c4391578e7b336e11c1a4a9cdd00cee76cc2393094388f0489fd799b70922e2f20c37925c0f9824d38078512e76900e78be958cb89c19ce57eb2c6fd6b056f11911e72f22515ccbbc1bcb7976c824938a79d0ce6ad00e6cb36c1249cdf4606f32600f3159b6012f62a91c1bc01c07cd52698846b31c9605e0d60be66134cc2d29c0ce61500e6eb36c1245c1a4006f35200f30d9b6012ceff2583790180f9a64d3009c724c960ee0430dfb20926e11e216430ef0530dfaec9dd3cc33fc9ff3180f21deaa9d54cd23a3ecd9f7d34d765b1dc29e5036e64e0f2a8c00d7462e0deb5f3183dc28a3ad914eceb803fbe970eac39fcfff23a910b28742689d7e2734bb9ee870c2bd96294b1a083f87d4aac3d9df8a3c9963b5517f1fd6f1f4e3612ac47ff801275074dc6e0a19deb8c77a6b940d9949aa24adce5fc0dc23612595efb20f0de0fd3d181ec6f29d540daf63bdd36fd00e74736e1cc0d25ce0500e7c736e11c124a9c2500e72736e11c144a9c3900e7a736e10ce7e13b7b009cffb509674e2871d601383fb309e7c050e2ec0c707e6ecfe9ae61dcb27f0168887e418932d3510f73dee4bef6bfde4a3a1778ea97f61cc813c619f35f00945f51a26c2a500e5480a6e13c6cb239f1c301bcaf6bd20fe37b9ac238c67e3140f94d3a73cc429e0f1670162c8ff4c4252a90c278b8440f50207d5bf31b46b2ce0fd2927d2715c8e700c8ef6c014998e0c9403e03407e6f0b48c2690b64208f02207fb00524611e4906f26b5004fd680b48c2862419c8d38047fe640b48c2a10b32902702903f537770b097e7bbaf94f01d09bd85abebb818f68cb570ca5d23ca5cf50a783064384753e1cc7562387fb1779bd2309eb07115c83b7fa544db3e49921feb7eba9e7b2bdb1cc0ebdb249cf245e6abef80a4ff9b6d4009a77d91017d1b00fddd36a084f54e32a04f03a07fd80694b0fe4906f42900f44fdb8012164a64405f0040ffb20d28617d940ce8f300e8dfb60125ec4d2203fa3200fa8f6d40097b95c880be0880fe6b1b50c225ae6440df04409d3a9601255ce64a06f455003442095437c313dfa2aa840b22ed26194685f42080344a8934d866f9613c9d78821343994189b2b3133f0cc71428e389bbc299e17e56e81455c900b6f1bf680f1aa31a2a5e0e7cb4162558b39de9088b28b251f87340df536d4ab45d1c75b24decccb671bcfb6e5d952c21660ea9df2ea2ca105e037e5b8712ae9c63e7b7fc27dda78eacf43f0ce0ac6b134ed25d14c9705e0f70d6b30927e9d6556438af0439697d9b7092eeb54486f36180b3814d3849770223c3f92ec0d9d0269ca49b5292e1fc07e06c64134ed22d53c97036034551639b7092ee6c43867308c0d9c4269ca45ba692e12c06389b52e26ce0de6c70ad2fe2ff15ba9685f544831e4e0c59b37478a0ff0dcf095be9647b85ec0f8a9be636e11c1e4a9cc500670b9b700e0925ce3600674b9b70e68612e7af20ef6c6513ce61a1c4390f78676b9b70926edb4b86b33fc0d9c6269c034389f30490d8dbda84737028713e0c70b6b309e7a050e23c07e06c4f8933d8de89a4d524b2559a27816664079b608671c3f3ed0066479b608671c3f36301cc4e36c10ce362eca301ccce36c10ce386e7470298bbd804338c1b9e1f086076b1096618373cdf1fc0ccb4096618373cdf026076b5096618373c3f0bc0dcd5269861dcf0fc7400b35b3aa6c76230e3bb3a08abec64b3e19e0028bb53a294bb25b18057729052f63af10a193cb2b9c5112706af873d897a7828db3bd960a3e89e36c10c637ba73f80d9cb2698616ceff40230b36c8219c6f64e0f00b3b74d30c3d8dec90430fbd804338ced9d5d00ccbee95ec796fca402c2323d8f0ae9d3605cb25f3a467ed82bfeb6d627acac93d53797009cfd6dc2493a5c41867333c039c0269c8342897330c0996d13cec1a1c4391ee0ccb10927e92a75329c0d01ce8136e124ed3722c39909700ea2c4d9ddd12f51652f33a179bcce59ec6c76aa2eaf8e9fe71ec61d940e05dd73832931fbdb7852f67486af9ff31be0afb9b6800ce3f2e91b00c821b68024ec552203f91d0039d41690843d4a6420bf052087d90292b0b54e06723d286c86db0292b0f79d0ce42fc02347d8029270762619c8e380478eb405641887798f012077b30524e13c0e3290a70090a36c01493887830ce4c900e4ee35398723be3d4e5801226b8b0f0228f7a044d9d2bdd9ecc436d49fcb5f631b9b952b9beb9341243b129c3d911047a76328cd5fff50387bd6ef0630c7d80493b0124406f35e0033cf26988455733298770298636d8219c64341ef0230c7d904338ca5f8ed00e6789b6086f1e4df3b00cc0936c10ce3518b370398136d824938104106f3560073924d30091b916430770098936d8219c69db21f0430a7d46c8bdc13e59d414d58fc909d41fd39e8009e4a89b2857bc33c72b613dbb879bac3565854c43d2343b8304284b00f40382d1db33173f8ff67b88fd7ba8f67395b9c751cdd0ca150812baec8914b5808f77f234be08780043ebd261378fc6ce1302e09380578e78c749c2a50e1ac76d884176cebfb7ca79c4f73d9e8267d26ac94767ac13aaa643f02809d4909b6b17bb385436502e46ca229a2842703d786ca23db83c43d8b125c2727d9263b50609efb57392f8648fbd69753619d0fb0ce4e075639cfadc2fda19c1739cc2bc76b477f863ab9b4c9bc3615d6a160adc59e94583315ac2b782e193f58916ce3fbf04d1bbc088c08cdb1e7fca030b6d747800c60ae5dc7850d0ee539c00d40d2cfb70d6818cf01ae0f80ceb30d681873cf28003adf36a0619cc51e0140f7b20d6818cf01ae05802eb00d68184f13c8004017da06348ce700d70140f7b60d6818cf01ae0d80ee631bd0309e035c0f005d641bd0309e035c17005d6cc781a0ba5e51c21a2959af6837807649cdb6e7c33e34f7841343b9b4260741c63bec7cd5e5022561b57e4994086516e8655a96cebe5136e778befb63093f9229d1d85218f7a1d90324f602fbce5327cc3f8751212d079ebabc26f74952fb43c338517120f0cf1536c10ce3dcba57806716da04338c7df5bd816716a57354891d39bf91e79bc5bce2e4894b04388cbeda07f8eaca7496f79bf88b7e364923f4da3c2aacd781290fabec6837b1f2be947b35bb5bc7ab52849d266ba9da4da703b4ab6d3a7395748b5eb216fef1200328b609e78850e2bc05e05c6313ce81a1c4792348ec6b6dc2392894389f01384b6cc219ce0191ef01ce529b70e686126706c83bd7d9849374252719ce3600e77a9b700e0d25cee90067994d38878512e70680730325ce86ee4d8113db50f2ff757727d05155671cc0ef94820107620a16a90b1417c604420c218b686b1ac4538f9cc4126bcfc116864c123912924e26104a5dbab8215a5bda5aebae506db59bd6ad2dd6a576a5da455a4505ac0b6e6dadb56ac1d6de7b6726efff6026134efb9f7c9f72c0e46d33eff7eebdefddfbeefd6ed0eea9afcdb3c20468c962d4d60b572bdd697cd8ee941d4a43acadd3fad9f7425aec9533f790c60888f70165aa18730f55f9a6bab871836916657e4efa8df435c635c1f3641f13afc47d805fe9be648ffd9938f6ad94c5350a4ac31572b2adc6c85d8f42b65d296f9e0c2229ad09f8a340dacf7e0be48eb4dc7e787aa77926e91b7b4fb2ffc6edd266ffe093f4077591bdf43d2d5643565f2529d23bb52e43bbd19c07379a4f49e2a4365cd0384f03ced592387586a04a02e7a72571521b7d79a12481f34c499cd4465f1ae771c0799624ce2a959c6380f36c499cd4176634cec9c0790e93738229d44ab9caffc41dcbceea64908087f7cf0c2763f64ca98c6b59a9710e74defa6cb15a83baec6609d35eacd6a04d2cbcf526c0fb5c31d260be92314883c416495a1a4c4189f87926e318fb8b7bb1d0e6834d2514c79d190b29ef5c26d938637cd3addb3d2de0c034bfa1990e74e715bbe35fb6d12ce119b3ffff90ddfc74bbdb0acfeb9a7da9f35deccba2bd1b32f2f9c5a00dc2f6bcd3237495c37dfa0239b1653486c93f0e0a800b650d41ad5519b9633aa4cd35d2403546eea800d08ba4816a8cdcd100a06ba5816a8cdc310b402f9606aab1b3d50701f41269a01a23771c0ba05f6082468d0b06dd335037ea352d9ece8537d5f7083f0d1e8e2e2d46636ffe80a6a7847a6d3430efe4a3599ccba146f445499cf52a391702e797247152a718a1718e00ce7592386b54723e0c65e7972571d6a9e46c84d4f915499cd44a258d7312707e5512273584048df34cc8ec9749e2a4062ba5716e00ceaf49e2ac56c9b90e382f971bdd8018499b16dda0112a965f9739c287d82a4f7ba3b911fa735cc164adc8c18afddb67e548a9bda1deeec1888c79f628ae9e9fe0be55a28dcfb8159e09ae94333e8348491b9f7119a4dfaba450526f5e34ca3a2861af9637d48548dac822bd1132fa354cd2034df8cd3c4e5c3f585053222a2da8e975807a2d3f8a9cfb607787efccecd862dc18a2ce81afb3c0efecfad511bbe5d0daeb679b00f33a26a67be6769d0efb7cd6d6db052c0a60d70fefc4a1d8238418949cd623e40ab877df309c81235a33260b7c0a25cf83b59815a1b80a38d74b1a3050a372bae525709bd9208953e7ecd5ab81f31b9238ab5572ce06ce1b257152a715a371ce07ce9b247156a9e42c03ce6f4ae2a406a1a0714e05ce6f15a35939988079e83de7a9ed47b48e37b79980f6e66284241f5a4aad56d9c5bb0f306f9184a9b176d40f98df968449ec9648c35c0a98df9184a971287517607e5712a6c609463a01f37b923089030e6898a703e6f725616a9c01630960de2a0953e36c2d09c0bc4d12a6c6fad02ac0fc81244c62c71a5ec31c60decec43cd484df51ba3e1e71939e13b0c903a7fcabb5424363340e2dfc04b4cddfa10159e380d80d807ce7f0be9ac377ecc49a3ced1dfb34a0bc8b1d9fc6bd144ef896a46a33d79e5bb77fdbeef09a99af88cb58780741897af770a6c3f0f4a0c474489b1ef40e68f9fc2193b23c07e550ba27a67b7e74c34fc79ba42f6193dc5bd52ed66be40720ebff486ea01662c309adb1f94e48cd3f2e461fe6fcbdedf1808d3ec5c6ed5aeac4774b680f5750de6e6407b2eaf29d13dd01928a7b311d0064f7b087696367c4a2f4962b67b11d026c3f915b3612ebf4b4b2f11e281bef95371138b15cac6391de0277f2fbd8d1eadcce2e629debdf59b4b0fab446911990d1ef674fc2b462e0d9b1c56ee4eec3d4d29196854700da0392061336304b44da60c2b3a044fca924ce7a959c6700e7839238a9fd39699c1381f3679238a9bd8d699c6f43d9f973499c752a394f85d4f90b499cb52a392b81f3979238a9fd39699c974266ff95244e6ae76d1ae726e0fcb5244eeadb751ae795c0b9496e100be21b4a5a108b75508efe46d254c9d4b874b417beaba181e321499cd4a88934ce9b80f361499cd4a10534cef590d97f2b8993da1d91c6b911387f2789931af98bc6b905387f2f89931a8492c6b91338ff2089931a2295c619855bd123923875ce6c301538374be2a48648a5717602e71f2555381b98dd626815ce7e283bff2489b35e25673b703e2a89933ae9328d733c703e2689933a25388df31513706e91c459a792f364489d8f4be2a4ce0743e3ac00ce27247152275da671ae81ccfea4244eea0ceb34ce8dc0b9551227751c3b8df372e0dc568c6184f930c3e334ea98e12a6823355e873ad17649981a87bdbc06984f49c22466731ae6ab80f9674998c43ec534cc9701f3694998c4701534cc1700f3194998c4402a34cc1d80f9ac244c6247051ae65380f99c244c6273310df321c0dc21099318ae8286b913309f978449ecea45c37c13305f6062ee6f060fa4127e894183a4cd9d118576a317a5401253240d723440be2405927807a741369b00f26529901aa7c59907907f910249acedd0204f05c8bf4a8124d67468900b00f26f5220892d4334c84500f98a144862ab100d722140fe5d0a24b1159d06b90b205f9502496c41a741de0e90ff9037991df1feddc822bd1f1ecd5f63925699700cc3bebca14e5c113ed4114318e588f81cda3582c45f03d333fe73381b3ef61c3ba4af07e73590965f9784496cfca0615e0b986f48c2d4d8b7f87cc07c5312a6c688b01702e6bf246112ab9d34cc3580b9531226f1618a86791160ee928449ac7ed2302f06ccb72461121b4568989700e6bf256112aba134ccab00f33f9230898d2334ccab01f36d7650bee57eb58bf6ba0c0241d2d0ea5868479a00cdc54b143315237524252d30e4d99006239238a9c3a6699c1f01ce7749e2a40e9ba6717600e708499c3a67c03a1c38df2d89931a7282c6390738474ae2ac52c969807394244e6ab81e1ae704e0dc87c95978f620e4d438dbea89d0adb0844939a140cacc9e2995712d8b7125a4c8d14cc6890518c329923aa48a96269f3401e61849981ae7a6de0a98fb4ac2d4585a3e0e985149981ae7a67e0230c74ac2d43837f56380394e12a6c6b9a9b70066a9244c8d0feb8f00e67e923035ce4dbd1930cb24616a9c9b7a1b60be4712a6c6b9a9b703e6f8e1ad93a70f959ed197f860449bd1f72da84c4e184ecaf0b8498d01256e06cafd9994534cb8236cc2777a8d7b0b97e9d3871bbc314e5fa66f82d6a3f73279dd749eee43ddd11caadee93ccba09c9c2827736b1c127d2f64ee039894ffdb149fc48776dafc801700eda462a4d2a13d1a69ac4c1e0319fe7d4cca833394299b02979adebd4aa3c4274e5a1a4d01ec81526135ceefdb06b007498525160534d816803d582a2cb1f593067b02c01e221596f8804f839d0bb093a5c26a7cc03a1a60a7488525beefa4c12e06d8f74b8525be95a7c19e06b053a5c212dba868b01f03d843a5c212dfd6d3605b01f63026ec24b3b7e3338f52397af82568ee3b5c1aa8c6b1ed2f02e811d240358e22de06a0d3a4816a1ce3be154063d240358e267e1a408f9406aa71acfb76002d9706aa7154f1b3005a210d54e398f7670074ba34508da38b9f07d019d240358e7d7f0e402b99a0aeaed76b2b977da6c3fe71707adfe48f3701da4c26da6413ee5b92b22b9276d776fb536bc663b03e50c4e74e5a1fa81df002ba8a899b2b2860fe3875e9d002d4b74fb4f002e740263f4ace3b7d8d3d479b20eb5717633ce7506f40f52a9b416e8094394b1267834ace0781b34612a7ce46babbe056345b1267b54acecdc0592b8973964ace3780b34e12678d4ace515076d64be29cad92730a703648e2ac55c9b908388f96c4491d0046e35c059c73d8c317ecc7d9cddbecae6e93845d4c8c51574ecbd0c691ed3372b783cfdbe3e0e9dab24b216d263b08a6d72e3fc1b4fbdab4d36bb3bf9f6496fabd16dba7c385f6cfde397fdcfec9b53c1229b5dfe878d36f7afc5277bc843f76975debbe59afa99a613739c65df62332973de6dba756642e4fb769b1dbb928f4eedbc62251bb2eee23dcbbb399ef537edc37c364d7b60db410b4d8bfdda6c36ee904629112bbb6cf7f3b47de637f4ed9a5e3fda7b97dfafcf5c5a4d1e4c552fe38cbecb6a5398eb0fb366ea6881eff5be7c0051bec98657992e5eedb95f8ed52f6b79e81f6ba5864b4ff3427e2264d0896bbc4ee14dacc195e3d5813f5e7b03ccfda92cc7ef1d0d2ecc89fecf7dc734d8f098f098a45c6eeb6a6d9a7b8607dfe56c8f4b770e9adc3fe1e5eea8ed11ffa9c928c77bbbd8ae1b3ecc9a49c6599d41dfed65d7ea28994b70e7feb95be6b8e5bb3e79e51bf679f5fdbeaaf71ba81af7960efdc6bdd39a6d34f907aabcddc1cc7d8afc036e923450749b5b1c8b802693096b730ccae49f96be652556b463ce60ba274ea0f96950e38b719d761c97da3f491826d4abc4ab75f1e2c759ff3497bbc76ff37016b725dbbf05a970782f2acc59702ed3e978ccdb16fb0de159a119fe31664ce7dbe69f7e79af0e71bb79f13b76593939e5969378bd4da7fd21db42a07ba66556666cbe8cafc965d5ef898ae941cfc68c7baa23092fb0eb8ecff56be173aa3f42dc9eddf91b9b2bd7e69a1332d7c7ef9ef15d141aecacc99ee5abc93cfff03eeba672ebb4fa6137d01798abdf2e983bbac9fcc642df7dfc8ff023c170d7916bc0600 + serializedProgramCompressedBytes: 1f8b080000000000000aec9d057c14c7fbf0f72eb8bb4bf0a00910aca58540b0a22581b69416020941120849b02a6da953777777f796bab7d4ddddddeddd999dc93d3799e76ef7264f98fdbdfff6d36e766ff799e7f9ce336ed14cc7fd2732c8fddf7c67ae33d119e2cc730a9d35ce6af7af89eeb5d4fdd7bb93cfe738e5eeb5d8fd7f81fbdb20273dc997ec9f7e910eeeffa7b977154ea5fbe53a67a97b5dc17fcf738adcbfa7b9df16b977ece932f7bf22f7ad481df7a3794eae33db99e5b48fb44d22623effa8423c8b30bb220ddcff4f7036b9bf1671a5582099fca7f6eefff2dc5f2af86fa5aed2f2bdbd9d7db859a5ee6f4bdd6fca9d1257e6122eb1c1cffb39fc0fc7bb8c12d734ef1a39d6bdd6736f73c13db362b4fb5f5df7bf85e2fdd1e2bd49e23eeafed790c9177f039955b2b78a77d8b331e2fbc9e2be9f78e73825fce344f89fc7bfe7ec2cae3b89f7a728bf8f55e4efe2e95fb8a7b8af2be41f2fde9b0aeeddf022dfc7bfe7ec2a7e3f55bc3f0ddcb3dffb03dbe437e3c43ba729df9c267e1fa0f966bc78e774e59bd3c5ef0335dfe48877ce50be3943fc3e087cd306e8cbdedd4ddc4ff0e4357c5ddcf711d789e2bde9e2be2ff2bc8e08f30485e709de6fd17bc57b325e4f043ad5898f53fe1b8c53f9fb24254ea55f9da4847992f74d03c1d2117222678230a56f4afb272b61cadfa7836f75bfcf10d7a9c8ef33c5751af2fb2cc5a63922bcb312e83a3b89ae6725d175f724bacef5a96bbe08efec04bae625d1f5ec24bace4ba2eb7c9fba8a741f392781ae7b24d1f59c24baee9544d7053e7515796ce4dc04baee9d44d77393e8ba4f125df7f5a9eb6211de7909745d9444d7f392e89a2c6d15f8d4b599b8aa799f7c7f89d007c9e323e7c76ce47fb3ebc94e7cdec3ee61dea3ca46ca82c80580df52f1ec4210de050a5325bfaafa7d3af856f7bb645a88fc2e991621bfab4c33127368981bff9e5b3572e2f2d319e09e5d2f02365f24ae172bb22f56644bc6c529c4df05d5c3739683df2003f9fb0a85c14af1fb29e2f94c70cf7e1f229ecf12f7ab1c5ed6ee9d2dee4bc4b5545cf3c475b5f86eb6b85fe37d3741d6c174752e599f6b2cae039c785f6f823c6f8a3c6f863c6f8e3c6f813c6f893c6f25585de2c4d7fb2ef1e2b8d1ebf1ef61df3b65e2b9283f9db6c8fbed90e7ed91e78918cb3acfa54ebc7f5eeafdd6b8c48bafc69b13c85a2baed94e2cfd7713722e53e45ee6c96d921f1fbe5bbff77ebfc289f7fb2bc4f572f17c7745fe95e2f95cf09e7cceae5789dff3c03d0cbf9b225f3eaff0ec5ed405c48d6a6322ae958e7f3f5f17e0ddf5debb433af8787783f76ef6013ededde8bd3ba2ccc7bbb2ce7ab512b7577b6c9b5ee8c96a7a6b025959e23a0cf0ac27ae4385dc79e27e93b8ee27aefb3bf179cb7c1f3a0bd9916be26547ae15f77b28efc9e7b2ad354c3cbf2ea62fffdbb5b7d985f136f1e7ecdbbd94f71e49a0a7ccff0f50f454eb03073af1f97619085b723c28803fa9eddbeb819c8395b0e4bb9bc5bb373af169f54671bd0130bac1b3bdf9ad9e4ecdff16320e11d72ddef37d0689fbc3c5f550a0c711e27a9878e6bedfff6bffb6456e72e2fdf4264fa716533d592d127192fe70b3e237378beb2de2f90270cfaeb78ae77b837b264fb08cdc267e5f08ee5d9d5a8e56c2bd3d3edcaae777003e325e8e54be517de728253efdb0bb536177a7d053c45bcb3313c8527debae00be758fe25bf788ebddc0b7eef67469351609ef5e10ded1203c57ef565bc4f363c4f5d85af0c3fb1496f709fdb70b9d3e0ec0f2fe002cb7292cb789eb0380e5039e2ead8f42c27b1084b7359e65ebede2f971e27a7c2db07c4861f990a77f9b2e9eac36590964a9b63d0cf4927d3f41d2c8238a2e8f085dae14badceb439713c5b78f2a71f5a8b83e06e2ea7127aecce2bfc9e7ecfa84f87d1f70efead336d7871ed2a62703f8d7d38ace4f8beb5340e7a73c1dda652832a4ddcf28329e11d7679deaf9dc01e0b76465a4cbbf9d2c234f12d7936bc13f9f537ce23961ffbd42a7ed0964493b44db2bf2bcc2e67971dd0ef8bea0f8c476f09c5d5f547ce2454f9ff67bfad043daf452009f7845d1f915717d19e8fcb2a7430735ff9676bfaac878555c5f4be013aff9f3890e32ff977ddfa7d5824fbcaef8c4ebc27e91ff770892ffbf11202ede5238be25ae6f82b878d3d3a52396ffbf0dc23bdd8963d951fab2ecab3fb31658bea3b07cc7d3bf93c8ff3b05c9ffdf0dc0f27d85e5fbe2fa1e60f99ed045e4ff9d651bf72c713d9b804f16b882b687738e13b82d10f94061fb81674f67d146ecbc3500db0f03b0fd58612bd243e423c0f6234f972e5948789f80f0ce75e2fcb4cb46f1fc3c713d9f201e244bd9273202c8bac0fb7ec0a93ebe2fd37c7fa1f77dd7363ebe1f21787c0ad87deab1eb3a5ec8917d1d2313bcbb31415892fd45e29bcf95f813e39d912f9cb8be1b7ecfae9f89e7fb827b16e6fb9e7edd4623e17ca984f3a5b87ea584f395f8ee6225bc45f1e1754b9436d4b0bf51c2fe465cbf8d0fdbe92e9e7fe7c4f74f7d0b9eb3ebd7e2f7c54a789728bfabe599ecaf0b504f752e13327f506cf8415c7f14cf0bc03dbbfe249e2f01f74c9eec53fb59fcbe14dcb3ebf7e27921b867d75f1479bf0879b2eef2ab13df36fed58ba774998f5e0ee4c9b471457c18ce954e557aed21bf4bc4e8aa78d981bfbf5a5caf49f1fb6bc5f5ba14bf97f9df6f4e7cdefd9bc7ae47b6903535812c352ffdddf19f77ffa9f8d49fe2fa474c06ff9be9b2cdd3a5a7ec5bbd5e5c6f706a3e3f96fdc07f39713e57a5ff8dcaef6a3a937d477ed259b6675fcf6b13bc2bfbdbff56e2e96fefb75e7bc6bfe7c87ea67f14beff88ebbf80efbfe2fa9f135f0790b26e517e57e726c83eab00b6f64ad4ff23e4b25b682bbf67dfca71916e89dfeb3d43792fe2c4e5a955cfa50ed0a6db946f549b655f59807c345a47d153da9916cf9ddf33fd998fb97edaa74dbc1c39d617ad1b1fb7513127265a2f664f54f4fb45eb2b61d74f1c761f5986eaec126df16803456603efdbbecb95f71a8af78ac03dbb3652fc2d4379be4c79de385e8e1cb78a3605f636163a38e29d81e27913a72addf785f380e06f52967cc6c29263617788eb9de27a97b8aae3943a5e897c43191b8e3617f266807b766d067414e392d1160aff16c2f6dfe3df73ee4ec1575b29b2c55863b4a5e22f2dbd30fb2df4d8f6db86f86a6bc5575b8b6b1b60978897685b25ecb649c2f6d3fe957ab453f41063a2d1f6400f391e2afb92272bcf45bf5cb4a322aba3b87688c9f2c5bab3626f6771eda4d8dbc9b337e3098f75ff418edec62e8a5ea2bc8c7605367615d76e4ad8dd1287dd5f8e31fb61dd5dd143d46da3e9408f74f18dece39eac3cbf5fdcf75464f514d71e3e591f2aae83c1fb0f88abf4d9c39cf8342dc7071f74fcb7851fd284f37080ef254331e617edadd8dd5b5c7b89e782b56cb745fb29f1d6cf8bb7017f7b3a0cec02be67dfeda17cb71cdcb36b5f10577d3d5903c5f8d740694f16f22ebbf601cffa88ef8f12dfbfacd82cfaaca3198acd32ffef0f64f50732a1bd328cdf7df8e945e29b814a78b2cc18e4c4b5cda222bd45078be72bc03dbbcab92e2bc13d0be731712fe757ac42f4c852f4905c87c6eb21db88d1614e5c7d86bf279fb3eb7027ae8dc8efd9355bd15fccc5898e50f41fa1e89fa9e8ff3878ceee9f14f723c57b25e05edacfaea394dfa5ef3fe15495d10b643d4ba6a1b54e7c9da091b89629cf9f12573196e088f1804063fe6a1a94f3b5a7817b7695f3c08bc13d4c53727ef67270efda3544f8ff90739df8f4b313f06ff9ee361f7e2cd3cdce8a9e624e71742c903bd6939b2de7428df0ee3345ff67761d45f6b3e2bb5d14d9bb88ebae8a6fcaef9e13bf8f53be13f3c2a3e3e3bf8bee0a9eb36b8ef8bd14dc33b9620c233a41fcbe1adcbbba67bd2fde937dcb2ff8f02dd587a46fa93ea7da3651b16da2b8e6224c24cb49ca77621d4174b2c224173c67d729e2f735425ebaf23c1f89c38b82e95b15ee34273e9f90dfede6c4e713b28e2cf389a98e3e9f93dcfcda2fed9ea1e821ebc633153d662a7a4c57f478113c87f9959cd75902eea51dec3a5bf95dd6f56b22bf92fdbd23c1b76abccd5178cd51e27d7770cfbe13fd965139d75df45b56951b79b1b0f83baeeec3b3946fe7c66c1bfebaa2978cc77c452fd12f1c9de7e8fd5fda335ff94ee4c9d13de2bf8bce03cfd975cf78ff8fee097465cfcb807df0b9ecaf967de392354b2b8bc5b397c455d64952c92fd4e77eca1831be1995f3e3a7817b76dd1bc4959813149573ed17807b264ba6e785e277e95b623d4b745f206ba117ef2364fb538c9146f789d93d62ac22771ff0fdbee0190b4ba6293f36cb76cf62c034493f617489c247f4c7450b804e05e2bac8a99e965e13bf152972649fc4322047b6c5e53cf1bdc0bdcb6ca4a8ff8e5c08c293bf37047fb3eb528d2ed2fee5e03739c6abdaff867877a5a2b7ccf35689e7e5e09e5d57005d64be590c9ec976c39be2be44c8a900f7aeada32e15efc939cc325f9ba33cefefc4f797c8fe8252f13c17dc33b9e7c6bf173787d9653bfa6b45cfb7147915f1f246cff0a9e74044cfd58a9eab85dcdc807abeadc8ab50e47dade8a3cedd96fa942bfa942bdf4b7d543be573d54eb56d2ec39d06eed9752df011917f44d780676b14fda6c6eb37e6d6f8f79c77c47d85129ee452e9c4d7a12bc57793957016c6879323ebafb26f6823d0518c2745d78367ebbdef765aa8e8f7ae13dfef209fbf27eef753f4167389a39b80ec4d4878ecba0e3c5b2774785f09eb7d44870fc4fd018a0e62ce4a747f207b7f3cbc9d252bd966dee054e5f13ba78bdf0628bf49a6f219f425d96776a086f9c1e0d9c122fced01991fa2d87b88b86e06b23723e1b1eb41e0d9419e0e63f395b03e4474f848dc1fa6e820fa86a2604c297a6882f0362bccb7c4988f95e3f80394df2453f90c32977ddd4728cc59585f2b611d1e0b8b35d3e2c23a1c7c7f047806c2f21d4f72bdf43470cfaec78030c43cd9e8d1e0d9d19edebbb650e47e8c84f789b83f4e094fcc1b8dca79a505e09e5de5fae625e01ee62d478bdf2bc13dbb1e05743d4ae8ba55d149e66b27283a9d20ae721d6f31b88761cb39d50bc13dbb1e09c23ed20b7bfcd74ad89f8afb9394b0c53cc5e8c94086588b364e4d837dc5fd29b17793f257d6ef45c5fabda85c735600eed955cef75a02ee993c593f976bb645dee17c069eb3ab5c27b70ee80a9f4ff77c7cfcc7886d701d7132dbe4fad669e09e5de51add0270cfae728ed012700f6d93eb3a972ae149bf395f094facc98bca7577b23ef13990277f67d70bc57bb29c394b792ed8e4c8b68b6012b7769dfd2ed7dfd5d49a315d38c07e5e26c17a8328a372e4d87746e2f7268c57de5b2fde53c704617d4094fd13e4b89fecdf05e5e004d90e52cb48294b3e83b6fa19dbb9c889afc75de4e932313ffebdaaf72f063efb45bccf56bd2be62d45e55c9e69e09e5d2f01ba8bf940d1cb143dc47aba896d3cfb27cafab39cfb24e627395fc7182d903eaedacdbe9773fbc43c25e7bb00dfeb385c0138246b1b5ea570b84a5caf8cc9888af91cd1cb815cb56d78ad2247f86414acdd8a8a793651b9ce6a2f70eff2cc2df46ccddd08c293bf37047fb3ebd51a5d649ff30d8a2e3788ebf54e7cb922e60f456f04f26f14bac8355359f83b93e41a03b9a6556d37341057a53fabca2eb98e49f641d4539e6f10cfe5fcaa1f12f885983726fb1baaf5c1b8d7c9329dca71f19b814d621de12469b74ccb37c5e44c866b74e16f52967c06eb43729e91ec8792b66d04f76eb893e19a3a0d1bf9de549956ea296c252bc95ced4f12eb9aa3607d92b479b2e42b6dbe2766f31459060c507e93b2e43318ef2d803c5d3b52cce58bcab93fd3c03dbbde06c2106bd4a6c8393fb23d027dcdd573eac2f8dfa30f2976b22b58bfc6ff663cd5fe6e391e72bba2dbed0964c8fe4fc9efe118bfa9b20f6080f29bd4513e839cba03bdd973b916f56727b60ed7bde6ff0ce29a5de1bc5d6c1d7bd07e482c0d4bbf967516b9b67023b877d94ccf8dd747e77fd3a4fe1aff9bb6a506fd0f5bc39f25f4f8d80b73baecbb947344d5f2e53ec051ce1b55cb97df9cc43e7e27b0e34edcb776bb54912be7e704f0cfdde478d61fe2f92331bebbc9f92f7f2abfc9bfb1fc16cb7ffe7292e6c3d26fab7c6836d017fa90d07f7759bf900cfef6cf56eb77623de9f4cf71bf9b2ecb815af0bb1962fed3ee32ad24f2b764f53acc2fc0dacda89c17f3287826f23de79f78f955cfc53ccfe85d8a7c31972d2ad70716837b767d0c84f19890f59fb89773cb36827b97c7ececf8b0d9273a9d221171ff80a293989b137d0284fd84b83ea9e8f9a4d049cadee6c4b7ebb7099d1ce57d399ef294787f3f700fde8f44e3bf8bca758baccfad81b867efc9f9cfb23c52d39c7b9d2de69044c45ccd483d1fef8ab99a91063ede15ac228d7cbc2bd255a4499277ddeb1cd93f21e23f22e749caf5971bc17d1df0be8ce76648fccb7adc834afc3f28ae723d6431b86757b0be332ac6d523b23fe97945a7e7854e62ee5444f4bd47645fb9c6ee399b15d972bee27645f676215bbc1f116dcc48db24b201d3aa79f3b25f154b0b600dbb4c6773e4da08d1ee8d7440c28d803abb4c1f6a9d5d3e17e54044cc670c540ec83ab25cffbf11dcb372608bf7ddee972adf4d4efc5db570e4fb48fe3357ae5790f512b85f0856afc2f6efd1e5fdae0d793fc7cbd3d58be6ca38d6944f73cf0572e16f52967c5693f5f26d208c6d9e8e79b2ee8bd4cbabec4c542f076bb665fe9977aea25bb27ab94ec6130a3f502fcf7b5be1e7a75e2ecaebfc268aff064c1bfc7d2647d818e924de4fd0be8d8879bd7ed253a48bf2ae4e9e98c31be9e6e8d7bfe8e630a87d1e3eda6f727facaaf6c11c4496dffa2c4ce7927333e53916065677d1e48df3f315fd61fa14f1375fedf703e973be6c430c527e4b943e4dea7d58beafa9f745bac7cbaa7a9e2eee1f54643d08fc5849ff7b6d53f4b94cfcfe822243cca58bca3d010ac03dfb4ef68dc9fad401e0de0d670fd9fe97e5700f27ae2f7aaf3b1579b29fec19459ea863ecf1b922af671279328d3fafc813f583bdc47a9bbdc4daae6a650d52f6ef59a6e8d14bd1e3ca78be11f15ef42585af9883147d59e12be72449beaf28fabf22f4f85dd1a38f5e8f2a7992efab8abc57058fa98abcbe49e449beaf29f25e13f22e14df5de88317bb6e06f1e85ef74c17f7afc77faf8e3544fa79eff9da934c9613afc7d28533183c63d73784fcb5e0deb567815ce7d4037c07ec58b059f9fd89783d7de9f5a6462f3967e72d45afb73cbd58b386bf2fe7f82b633e7b77507effdabf5ed1b7c5bb629cda190eaeecf941f1cfa372bf0531365f9596c0de09fc6ff92ebbbe27bed90cee5dbbf669a1c896dfbd2fde3f04dcb3ab1ce39f0aeed9f50327be5ff6034ffe42e15f0be728723e12ef1f0aee13c9592ee47caec891639087817bf6fe95f1ef39729efd2ce5fb4fc4f32de0be4ef570d43d3725a7aa7e3e39aebf54f883aca3fa99bb27c73b3f75e2f3ae4fc5f53310af723cf773f16e2eb867f129d7d0ca3218cc4dd0ea22d75388f50651599e1e0eee99dccf3dbbf66d10ff7ed53c46e4bb7de57eacfd95f0e4fc8875b86e91017a1dabbe5d9fc0ae04dc23a2fd2df74b8d0cf6ee17271a4b93df662adf66f9ffb66a0daedc33612ab8777f5b2cfbb944bd37fa95f2de57de7b8b64df6fe7c4ef55c993f554391623f3a669e09e5dbf01bed2093c63ef2e43647dabc8126395d1ef80cf8a71cba8dc83602f45ffef953012f11f1acf3b32ccf1bf0e4ce6d1eafcc08ec873357d2a7b354445bb24fa23b0558cb745e53e0d53c1bdcbae40f84bc176250c716597aa3810faa64562cf22b24c50eabb11d937f89ba2a3ec6fff252683cb93cfa0bd1a7651b99fc411e01e7e3b15dcbbf62d69e1d9b7a4372eb31a574ce75f01d75f859d724dde1fca37b20f1fec93c0ff663addaae8febb135f66c8f7649fbff413380fd4b5a970aca28b5c83f597a28be8eb8ffe0974f9d30b63e9784517b957c316e5bdb280bac8ba84b2374154ec4d10fd1be822f637286ca3c8906baf262bcfe5daacff14d9b2bf1aec7b10fd374178b2edd7516353b2b42bd34734deeff83d932dd67f15893664642771156baad2e45acc23c13dbbca759147817bf69d5cdfe5cadc28da00919d812e0d15bdd214bdc49affa26be3df8b88355969b27e3e0ddcb36bef98ec345997cf1157b9ee6b8af2fb04711d8ffc2eebaa931546b9e2f924a163fd24b67ced7dbf4cca15df45c47b91293166eb44bd323219c896ccc47ae8b43a4a3875bc7096893557cb2e1432a629e14c8fc98ac8bdd167c4c266dd49fcd96e203ca55c4babab845d57842df67f2b16f59c88a8ef4566fbb0b1130847946d69f59470ea79e1148bf36f8a453a8f883410d9dd47389d4138a29f344dd98b82dfb3702e14e188323e22f73e92fb054196f2fc8d442c1b83b045df655a0325ec065ed8cbc5fac7e5a24d1791fbf5ce4f316cb0a784ec7f4a6ba884dd50842df6bd5b2ef2f488dccf68cf14c306fb61c87eb5b4464ad88dbcb05788f95f2b160b1972efe90529860df6a9907374d21a2b618b3d3a569c28c216fdb811b9e7f1c214c36e0ec2167e98d64409bb8917f64ad1ffbb523296fb5bee9b62d82d40d8627c29ada912765311b6c8ff578a7e9388dc576c718a61b704618b31adb4664ad8cdbcb057897ee655320d1788eb921a085b8c41a53557c26e2ec2de2cc2967bb48ab9b191c214c3067b76c8b39dd2943d51d2c49e28abc4fe0725325f2e12d76529860df62d917367d35a2a618bfd494ac4fe8725622e46449ed5b13cc5b0db82b0c598619ab25f0bbf67618bf946a5e3858c15e2ba32c5b0db81b0659dbfb512766b2fecd23211b62cc3c5dab448498a61c37d5544bd2cad8d12761b11b628ff578b35f911b18e3cb23ac5b03b82b0659d47d9a786dfbb61af16fd3fab2f1432c4dce7882c3f1395970d4138620e595a3b259c76221c51feaf11634591b54a3841eb1edd41d862fe405a7b25ecf65ed86b6688b0455b2022cfe1a8f0616323104eba90db4109a7830847ecff5f2675ad54c2096a633a085bd49bd23a2a6177f4c22e13eddf32994e45ff4f64bd0f1b1b8070ea09b99d9470c49e3a65a2fc2f93e5ff06251c68e3461f36d603618b7d72d2943d86f8bd1bf65a51feaf5d2c6488798a91fd3461efef23ec9e20ec1e22ac2e4ad85d44d8a2fc5f2bcb7fb917f3812986dd03842ddb285d95b0bb7a61978bf2bf5c96ffa2df3a72708a61f702618b36479ab2b712bf67618bf2bf5c96ff9bc5f59014c306ed30b9d63badbb1276772fec0a51fe57c8f25ff469470e4b31ec3e20ecbe22ac7425ec7411f66611b62cff65de71788a61f775aaa7b19e4ad8d2ff7b3871fd79fcded5a952ee9b68d0e6ad923d5591fd3322bb8f225bc619b0274db044dbd3f277d99e3e02f91db6a7992e7efa2dfa2bf6f4f7ec59b705b16780628fe80b4f03e775a60d4c2c7bfd7844f62045b6188b4f03fb6b45e4f925d27639feb10ebc9b88a5fc7d82f2bdfabbc252f6d754852bc76d8e06f7ec2af7759a0aee99cd22ff5b2ff71414637ebc0c917ead892f2997bfc7e41e93206efdc4f75045bfa19e7e1b2ae3dfab8a13b9efd43470cfaec3417c0f4f2c7be3684476b6225bf415a78179f111d1ff1591e3bd62dc264dee3bb51e7c9328dee5ef1394efd5dfb17817e1a7c9fdac8e06f7ec2afb28a7827b66bbc8ff37dea8c4fb6e49e25d8e2bcc00ef33f9c7068bff88ecdb146d9f34b94fd55670cfae63007369dbce208e455f6bda58473bc69bb60b787717f02ebbca7da336837b97cd7e772ab2e57732ee8e03f74c2fe1fb69e315bf191fcf362d47fc7e3cb867e1e5c6bf9f26f7953a01dc4bbba19c13153927c6eb953611d82ec61d23809d367e85ad729c364deeb925c66937c9b59a0ff99317ffac6e84cf4b9eea1439056e753a93bfc4725fbf4787cb2f931f1acefbbdd9ffd83ffd78b095ce26f7d322ddc9ddf3f8b9e095ce706798f6e4ee8e7c7eb20c7d22ff7f81fbc60a2ef4a4b46a41dc552d08a65c89fb6f113876bcc27d3e859f5ace0e1e5fe1fe32c499e15ed9578b9da1cedeeebff152e6bbc19638ebdcbb7cf7ff655cde6257edea6f2633891d51ae7e33d795e99da05eea3e9140cbdcfb12ae611effff7aae6911d77e9afbac929fe7beda297626b8d78d3cb4eab697bb7febc2cc17c8f43aea0f52c79e7bc7b5cb68ca75ad61da67f2fcfdff626447c4081f1a3929cd4b867532f968f831d562e2ff187a990c1b549926640ce5c82271cf863999ec960f4a98da58dd42bd7f7bbc473ad9096dd19361d1dd995b108be1b74f6cfd40d93bbfbf5637deb4e14e266f3e7549625a22b04c5e065fc110c484ba75eb64314555fc111d7e3ee497578bf8bdf756f0f78247403d5ef8c547005f1e92effeb1d1fdafc47d798efbff02f773a6e244ae92a75a892bb05a2c653191f539e8eac568326531d4511dea06b58d3a79de920875832abb62a8d93f7a820d1182c974c008a6e908f27ad9425282d52b61f2af09eeb7cb5d12eb79c9bacefd5e57694bcc9475d20e5698ea7936e63cd3b555c9601a6184eb68086731c24d744a36549464fa2182eb62829b1a0aaea7f309dea7bea2567c22cfad814d77558c495bc3eb552c9c0a5eeab3f7e671df665e5fe6ea50e936dc56f07ca910c48e9494d85b9af9f696e6dc5b06036fa9795d313faaaf8b153e2b612569accc739f79cd9549fcd715dc3e56db2de0d267bbb9cb4a511766d660ef4bda33dd6ba1ab5f09af01258a9716bee3a5258f17d6f545a92d16330d740991c54c2b3f09b1259e101b62825b1b0a6e84096e6328b8b1ce49f9f495c53bc44959b1c8ea71a5ae35c5a2f697e8ddc40ed9d6b743b6e30ed93b814306d50c73be26baa8640fdbfb89ca76785436c504773014dc0c13dcd15070734c702743c12d30c19d0d05b7c404773114dc0a13dcd550706b4c703743c16d30c1dd0d05b7c504a71b0a6e8709ee6128b83d26b8a7a1e00e98e05e86823b62827b1b0aeea413cc0a993e7e042728a83a6382fb1a0aee8209ee6728b82b2638c35070378de04c9efb17383baecccee30dd7422ecfacd4eeafe3a32db5d9d86f065f795a73ba61e576775d7432ea03fd44e7003c3ad331c1830c05f7d0f9092fcc17ed403ff13aa41257e693fbc860df3e3284fb48afa43ee2572fcc3f7aeaa291d1cef4138d43f068ec8509ce3214dc1b133cd450701f4cf03043c17d31c1c30d05f7d30966adb96c3f821374cd646085c008c342a0bf2e71f30a75d10e49dcde18db9a24196cf03e05364d224de194c9ebf7fd1324e9d4b57173e3cde3c0ff9e7d66c6b8bafa9c6514cf5968d4c07299013a7f62d13e5ac3298b7162c5cb38f0bf679f7966d7bad53c6d14ee6903b120c7240ab20aa41be4f0e1c3c7050a721016e44e6890cb962d1b27c31546070a72b02e48d685b7b39f845a1f173c0413cc26a7541bb261ca07919e8949dfa526a467e93219de06ce27cd64e225b3dfd6702905eebbc1076cd86c9f810a0aa4b2308e27e90ed58c4bae02966087ea10f2d6fe025284f1fddd135cbd2bb84cd8bfadf665cbb712e31caf4b105a9a399c663747ed7d0fa60d467698cef599734ed0c6b7eaf6e370b71fae8b33de91b26407c6191cbdcde121ec2de229781c4eacb21094aabc47a76fd2d80aa6075f4acbd65cb17f86d4c23ff591d27a1277c69a360f73ce6ccc39279b3ae7084cf21453c92331c9534d258fd2496ec06fab8fa5ffe7fe534d78435cf868ac08dc4d5704b2b7594af3ba03d6b8cdbe3d9d196ebd22d1dc887d78e4cb2fd2f9bc25f96e3a4f4fcbf8df6c147129af4396f29964156286449022770c66cd749d35ac25b18857272bf8387791334d54328384b9932ebfe3ddb087d44a7e976c32a86e2cb0fae8ad9c0d38b75a7c249f449a38b79ca1cb2d796ff224909dec782bd892b446bc31aacf0267f12cd02e9db10c74672c1dccd6a583d63c1d2c722bac8b78ad0ca65ef69c4de22de7b604491763311de6e87468017458c4d34165f559560142df05cb3477d7649a6c278e2099e6ae986973b16c66354f0ca5fc61ac5d1bc4a071589879ba30590f6821cf460b5ce763994b618ae18ec7c2cdc76c2d101385d7f3aa522a61e66061ced385d98c8759c9dff43257e636a9853c01739bf91ab7e9100de6361331b3f6d099e5e89c3281eab93ae9ac1cda53930167b10c78af588ea786330b0f671266c5029d156de3d235cbe38a9d15a294d0cca30c60ef648d1e997c30b1f6e7fda63617926da2d15ead193a58eb7aa19368da6ed0999053306fd907f3967d53f296a998b72cd2794b4bfe43acb6c862a1807f37cf8dad42f177102f99a6f3123e323caf16bd04cef8950da260beb258132d997c20ba63353bfc84c6063beb39e21facd5b784bb5c6a01608eb71be6104b93651f45bc446111c45c9e39c84683eac9744c8f429d1ead801ecb793756a1708ad43598816950a4d3a08d96c42c51c54c5d8b999816cb745a34075ab0d08a8daa88b3b0b08b7561374d5894040977b62e5c56742cd7e4c86cce7835e10b71e173b09c750596b3ae4c2967dd1d83b74a07af8592b3ce70ff5beabe9a6abe3a57173acb574b7456b22ca454c971d4c096e081e561f1b55a135f9180f1958fc5d71a2cbeca528aaf79587cadc5933bec6929e715eb5522db4d35dee663f1568ec55b45eaf1b607166f959a788b068cb73d75c259bcadc3e26d7d4af1b617166f1b74f1e61514b3dd388ac51d2bae96b9d754e36c0116671bb138db947a9ced8dc5d97e9a38ab1330ce166271b63f166707a41467fbe8c261840ff493d6646f6689285e528db77db1783b088bb783538fb74558bc6dd6c45bdd80f1b6188bb743b0783b34a5782bc0881d8611db923ab12598931cae731256fb6019b057f5af509aae41dc622906f3080ce69129c12cc4ec3b4a675f7391080ac46c3fcfdd7380c5416c2cc222f2682c228f493d22976902cbe47369591da9b6da787ed632ebdb766c5390860a131edbda4619dbfa2383378cfc878f35c68a3117394ee722ac6b6b1d9799e7782b039706cc119763e11daf0b0ff64b97297972ea8d8e15980e27e87488efbf92e34393b94794562b2982e8b112cb064ec4b281935836d0326836b04a170eebd23cb9eae558385b1a06ebd22cc18c380533e2d494f2b2522cd24ed3455a071e69de804a394fc6cb9591e958ae364d0c790489bad5ba0c87cfb15f4d9ae1241b78624399eb78e2677fcb3e827c1e766cb9b9c960dee9ae7d5d15dcf21f7d767506cfae8639c987cd6a427b2ca35ba3f31f9608ced424827b032682329d70964ecf720c87fed76292cfd6488e04915cae93cc5cfe1c5d82628b5b4af9a40dafb3653eaff4ace32e1d24e15460d170ae261a0a9b048b864a4cf8791ae1970614be0e137ebe46f8f680c2d763c22fd008ff3ba0f00d98f00b35c2339a0613be11137e9146787e40e19b74c259e172b183142e9738a9142efb6169e1525d5af05a8b534127b0bade3dd72912854d90b4b1bf468b4cbebeaa763752f1b2da92946ab297b99a76af5e3c8cd3170d973bd8fe288975c032f903b078bc42178fcd9c58cdceabd5a65ea73c100bf9ca64212f72d979030ac5559e1424e4837421b30478952601a6370f96000fc6ccba5a6796d7829cc88dc977ffbfca293268256fc6c2be461776070529ae03fb9db96ab0cafa2118e66b75397440cc8762a6b253244d66cf1fa613ccb294ebf5e9b4baf0cb71e15b30243768903c1310c9e118921b0d911c8121b9498b64fcf820488ec4b4be39513630bc0632a0a3b0906fd1850cc71217c5756feece5fe0b5af1432a3a3312d6ed569d1846b91cf47928b79f657ce8ba935ae3e41423d0673c4db348eb8a55530473c16137ebb46787e40e15b315e77e87835d5f09ae3febcce9b4b1d80d8719851776a8cdade3a9851c763c2efd208bf30a0f013306277eb8879f34ce6f22ad0263ea93208a513b1b0eed185c5369959cad3b13781b33285f4731286ee5e0dbab276c1d09d8c09bf4f237c7c40e1a760aceec7e2a544342783533a1533e4015d7aef10cc90d330e1db74e93da0f0d3314a0ffacd1fe5b07d105e6760263da44bed1d8399742626fc615d6a0f28fc2c4cf8231ae1df770a26fc6c4cf8a31ae1db020a3f0713fe9846f8a0cec1849f8bb9d1e33a376aa571239625b2b10256e87b0b67831520e761e63da1316f639760e69d8f097f52237c6a40e11760c29fd208bf33a0f00b31e14f6b84ff1e50f84558ac3fa38b755659a8ac9a3392cb0ba602474e8e0e12d717ebc26535e6671df346c4259851cfe98c82b3cf64e747ea75e64bb1b09fc79351fc02857c3107cefbdbd327880697611a6cd769c06aed70f1141c849bcdfbcbcb79220f9a982fd76891c9f7dfa9fd89d46c1d5df06ea7175c3d5b57f3447da7d38b4ea269d458f85897d315588a7f4993e233d283a5f82b75c259c4bcacb75715fd222efa2a4cef57347a2f0fa8f7d598f05735c2af0c28fc1a0cca6b1a28914050aec5f47e5da3f7e701f5be0ed3fb0d8dded1407a5f8fe9fda646ef063d83e97d0326fc2d8df0d77b04137e239601beadcb0061f65f2a6a2da967ff376161bfa30b5b97fdc30c38955ad4cd9806efea34600d4c380637938f35040bf1162cc4f77421c235792c54af8b2875e2b762a1bfef97f84c43fb6fc334f82099fdebab1ea76effed58e81fea426f93c4fe54c760efd069c146d53eaafa411955fbd8496554ed4eccda4f74d6b6e3d6e6b969c9eba62fa936b766625ce74a108befd269c2869d3e75aa4f8d64c92cc8d4c8bb31333fd399d9b69a99f9ee35deb4d854ef2046de83e9f1b94e8f865c0f9669b17ae32cc7dbbd2d4878f762e17d913c31abe1a63626731fa6c197c92d9ec3c35b1f28bcfbb1f0bef26fb10c37358b1fc092eed758d2fd26a5a4bb0db3f45b3ca39ae8781bfc94572dda63fdd226ed9207755ab09ac7774ef59ac7e801c16a1e0f698467f2bd416b73b45ddd9f3d58b3e77bc7ef5e423f38fa91f664e163cd9e87b1a8f95113351b0346cd2398f7fda4f33ee6dcf1ad62595109e26b8f6261feac0b938ddcb1319722378f96ebeb539d12fb1816f22fba9059e9b4dcfd77a1b393c3e6bcb16bd0b9d98f6391f7ab26f22e1d1c2cf29ec0ccf94de7ac01b47e1213fcbb8e135bb497ee64baff0509e3292c7ffd03cb5fff4c297f7d1ab3e52f9d2ded79fe0a4769d5c560b9fcbe58ec8a186ccb9c6774bab0eebdbf9deadd7bcf3ef3cc2e41baf79ec50cfd074bcab13e4bd8b916c4a0e7b030ffd58519df4f3ac74dc4157c8677f07ed2e73190ff6940b2ed1d8380dc8ea559b6dc514db36ce7c12069f6058c582482b48af2c470ea7251caad70f613ae3784ff1b84db8b9869518d69f9c38299f612263c4d233c2b3b98f097316e7574dc9a706e95bce4662dc75479bd82855a57172a537fadd1a48e57b1f0eae9c263b58ddddd5026f1ff720385f41a16527d2ca412311cca2c0b12d2eb58480d7421b1e2decb8716198f9cbd8185dc5017b297f57b8d88441aa4d69c7853a34b26dfa9bd36d74d4d70efd8dfc1ebbf8d5c642dd5bc0f39f82ca25f34952870acf2fb962e0a19b6261a7daa4fca67aa2092dfc62437d5488e0691fc0ee676cd746ec76a99b1427122afd906ed7479170bb1b92ec4d62089a91d3f6c5d486c17ab203abc87e9d042a743174d624bac4b6ac9ee7d4cab9658b12167b49af4d77c8085da4a176afcb2377de8a959ff21a6476bbfd6a7d277f311166a9ba0d69bf5e07c8ce9d116ab6a494f8cef238ced801324f44fb0d0dbe942efa8490f9816a9d1f814d3a73d4603e64aac002ce05580e2948ae2cfb0d03b607962be5b0ce6b8214f775bdde9cefe2e99030385f839166247cc5e5d885ebb767fbeec2048e85f60a1774ae67bb1ad1166f2b45020a6110509fd4b2cf4ce7e7d0fd32235dffb4aa70f6b1974d1b40c464f0cd632f81a33b66bc4ac17e41b4c70371dc54efcbdd562f08ad14be75534fd56bc159ce1ba80b3afbfc53876d770dc1890e37798b9e93a737b053257dde9345500df63007a68009c382918801f30003d7500d898c3246e946722dc76799e9b93cc48a1b9f923665e2f8d79b70634ef27ccbcde588b8f8dbc7a13de8355057fc6cce8a33163cbd46066fc8209efabeb9d991e4cf8af18a37ec9daaa53b96717023708d651fc1b167286dfb6aa4e83d4b2ebdf315dfaeb74f176f68ea57dd6662e70ff0eb622f30f2ccc01ba30d96d6ae1fc89853310ab88b069e0057c83dfd4fa90fec21c7690c661c70674d8bf31730663357ccf1dca5d6c6ce3ac49bc861974e7de7fb050876039a574d2196252452cdc898eb73a215872f917d32053a741674d7249a4496ac9e63f9d4e2ca56645cc77ce631f680d1eaa33b86942e4418c8a60e10ed385dbce17e8d4f046359a64a633e6b5b9bbec3c27b607706abbcb0eafb223062eb307b3a3fae6af7e42cb76e53560e21834b6dde695b31ce765f7bf03dcffe6cc72b03df64744f41bcefa0913ebae4bd3790bcbeb466af2baca59c1f2ba3a982b8ed2b9623a2f22bc31bc74ae76291f6c62951966d206f737769fee789b0ba48b5c319db7750a78761fc43deb62a68fd6987e6140d3eb61a68fc1325cfc1490a294f281fa98793b69cc7b26a0790d30f376d699d7d5a9def4f06adce9dc2cd6b888cd0f60cf96b9ff9638de2976418c6e88193d5663f4ef018d6e8419bd8bcee8de4a9c2e891b8f19c4e335d65d9a2ef2bf725e7ff79c5e420a56d036c610ecaa41d07b7630044d3004e37408d8dca7c93c659608832a398a125141830dd0202636d569c1caedf19a723be8cea9cd301373927504552f37bd13808298d61c0b7d82df8e204c8bd4caf01618ea893550456a89b96aaec655bbcc09e6aaad3092937424d9519b39ee83399c59ba93c119cad1e8feee1376484925cfaa581f4819272bd329cba8d2f9dc8852671dcfbb2b03e7d7ad31d29335a49d80a4db60a4a7e8faa102926e8b919e8a0d66b1e34a5771a21b38b95809c7c87bfeda3f10bd76980ed3b07e0018bf93f94f257ce7ffa0538bdb636877d3a0fd3e20da0e9859d3b1ec60ae235b8b5ef3379d6707e971e6c697b7418ced88193b43636ceeeec18ced84099fa9115e961f4c78674cf82c8df053030aef82099fad11be2da0f0ae98f0391ae13f0714de0d13bebb46f8eb018577c7bc772e565b88758d31af9dc93353d6282ce33508b9896bb00a513aa6451e5657adde5197589bd48ad61e985ef95807da7cf7cd5cb7609f1d289c9e5838f3b06ee43c3eb236c92d1067060aa91716d27c5d484c428e5b14e407b4a73716ca1e580f1ab62e3848a87db050f7c4ba21a56de929c65b5f2cc4bdb04edd5888a9c6603f2c3b58a0c90e3edf2b5876908119b4b7ce20d6c1a29e80951ed786626d2aaff91fdbb0561db90a627c7f4cbf855846914c3fafb903d725a632303e00d36b1f9d5e038df48a75ae787533f95bd0e1f4811a9d337bbab791c58e4de71ca776c6f1be11bf6b4b1645589f9dd71750339a613d7983b0a4bb5893746fdd3758d21d8c092fd0087f24a0f0213ae1cc5796e830ab821961447026a6f5525dd53ca0d65998f0428d70b7821048f8504c7891ae2abc3898f06198f0651ae19b030a1f8e6556c5bacc8a85ca368eaf709dbed0290ddc879b8d85b65c179a77805e6cbb7a186a6a75b81158f82b74e1b36e5eafa1c93257d623ea2d1c5f2d762991196e100d46621aacc46a09310de082e920618ec2c25c8535b66361eee12c17bdfaa91c0b301a0bb9048f6f6f5730f6b07ad841274a8cc1c22fd585df29cedf92e9919a07ee8425e6d59ac4fc7661b0c4bcb34e387b7f8d9f9cb9312e78acae7ac0662845d8011474d58379e2888a4d7c2650b1186188c98c1d3ccd8adf446fb398f2e655aee37a24ae3094f9ae30ace51586c18e43a82b5685d84517dd6cba6f79d50fca0abf0af78728d7bb32a9dedeba3c96e72d73bcf39e83eb1d641de1ae585a5d8795446c2462897b5bccd36ab09582e3b0d0d6637922acf2991cf53b1e0b79832ee4a1eeed4c9eeb5454f510cafd3fe3871d19fdea47ae2f13eb1dbc26028b2bef9a2eb6fd08be01450ea6ff46ac97081ec71e9f1252df7e6402a6c526ac248f6db6e3353dbd19b7a96b3011d3603fac872156b6ece1948b12254888b95888fbeb421c6fe83905dcb3d788263a4bd1cc87e4b0ca322e33b157f50864dd24ac643c405332b65816ac649cac13ce0abc03fd948c2d71c153b03839c88fe00438a662820fd645761f1ed9dea48a393cdb6695954cbed0baccf176c964d5b94c07eeb4338567606c7c2cd32d084bc4e06eb0cae5342cda366ba26d6bc068db4d279cd53b0ef143772dded49c8ed13dd430da66e804b38ae5617e046fc505cfc4046f89543f706d80a3e19c40f82c2c120fd744e2cf01237136c6fa089d270f37f664b997d6047eade41953a6238fc692bf066b48ccc1001da901b4b03818a0dd314047e9006513034a752baeb918a2a335885e0f88280f43748c990fc557e4e2f3436ff37e3da454b6f6cfc752f0b19a14dc2e600a9e87d1dfaaa19fbf3c18fdf918fde374f447d400fdd851007afea91d15b00706e9780da4ed0121ed89413a4107692c026906470321c58e62f226bb143be5a2069b19d723247753d70393bf06cdf8f6c2909da84136634530640b306427e990ed5acbc8585337d53d19f6c6b09dacc1f644406c0b316ca704292f8261938b3470ef2a0888681f0cd1a91a44b92b8321da1743749a59912af78a8179153c92438f27d5433b1661884ed720da1610d1620cd1193a44237d238208544c72ab0f1c937c2308a6020cd3991a4c635705c3b404c374960ed3985ac6343bf094eba518acb335b0ee0c08ab1083758e0ed64ec6b0d41d2db0ca42ea071b1761b8ced5e0ca2e09866b1986eb3c1dae61c6b85806cf3a04f598e4af41f0146378ced7e0b931209ee5189e0ba82afd7237103da054762a598101ba500368506930402b3140175101921b8660092df86626ab3040176b005d1910500906e8121da0d1355253c2cee6865d10a98de39662a82ed5a0eabd3a18aad518aacb74a876ae255466c3cf6b306097ebfa2603022bc3805da103965923c0d4bd3253edb45d8b81b95203a6c19a6060ca31e15769849705145e8151bf5a477d608d509795fe5469576240aed100f93a20907598f06b751d3f65c184afc7685f47473bf6db645752111f770a427b0306e47a5d274f40201bb13ebc1b347d78ec888f207d789b30cd6fd4f5b5ac0da6f97e5854de14a41d631e952c13f3aa515e31b80a3c0912cdfb633171b3262686048c8903b098b845d77d1330260ec462e256ca2c2cb68d7d2ab40fc280dca6ebac290f06e4600cc8edf8b8766db9a65745611593e58eb7fd4bd0dc7f3386ee0e5d274e40748760e8eea4f425b393820ec580dca5ebaea90806e4300cc8dd7440e039d3a924ae2d18907b745d3201811c8e01b9570764708d00513b5c52817204a6f77d3abda73b8ed8da357e9a8aa7134bb86cbbcbd836062baab44fd74c4bda89bfc1d6616c12be2ee7f6a78bd9fd6c3546fcd41aef776f47ea189b71816c3e12b3f97e9dcd9d9cea137cd8de22e96e8b9d4d6662f6c233315259cb7214a6d1033a8dbaa01a559f0429b5d92985d52a47ebb462b7db226c0b46a5f972dad9bbbfda3cb7bc5a0075f1008ec1cc7e5067b67796f922318faac461e7797a6b0d5704acbb1eab0b97cd3e7a28c236d08a0fb7bae471b8e4ad3ac92cdb7838623635f8384ce5474c553e1e93fca8a9e41330c98f994a3e5127994d587adc0fe60413964ec2547ec254e59331c94f9a4a3e4527992d147aca0f8c040b854ed50966e71d3ded47f00fb8c6a761829f31147c3a26f85943c16760829f33147c26e6c9cf1b7af25998e0ed8682cfc604bf6028f81c4cf08b8682cfc504bf6428f83c4cf0cb8682cfc78a91570c8b910b30c1af1a0abe1043f19a218a8b308d5f37d4f8622c437ec33443be0493fca6a9e44b31c96f994abe0c93fcb6a9e4cb75925915f69d88f959f05760f9f2bb86f9f29598d6efd580d65761b0df37857d3526f90353c9d7e824b3051f1ffa219d830bbe1613fc91a1e0eb30161f9bb2b81ecb933e31cc936ec054fed454e51bb184f2996142b90953f97353956fc61ce30b43c7b8056b767ee947708276e5ad3ac16cb3b2af22e69b95dd8681feda14f4ed18e86f0c41dfa113cc96687deb4770735cf09d188bef4c59dc8525edef0d93f6dd98ca3f98aa7c0f96b47f344cdaf7622c7e3264711fc6e2675316f7632aff62a8f20398cabf9aaabc0d8bbedf0ca3ef418cc5ef862c1ec258fc61cae2614ce53f0d557e0453f92f53951fc5a2ef6fc3e87b0ccb95ff31cc951fc704ff6b28f8090cf27fa6909fc4fc82ed636be2174f612a47a2862a3f8df945d48fca09fce2194c709aa1e06731bfa8e3477002bf780e835cd714f2f3188b7a862cb6632cea1bb2780113dcc050f08b18e486a6905fc2125f23c3c4f732a6726353955fc1fca289a15fbc8a096e6a28f835cc2f9a19fac5eb18e4e6a690dfc0fca285a15fbc89a9dcd254e5b7b0e86b65187d6f632c5a1bb2780763d1c694c5bb98ca6d0d557e0f53b99da9caef63d1d7de30fa3ec054ee60aaf28718e58e86943fc254ee64aaf2c718e5ce86943fc158743164f129c6a2ab298bcf30c9dd4c257f8e51ee6e48f90bace73a3d6ade73fd25a6750f43adbfc2b4ee59035a7f8d09ef5503c2bfc190f43644f22da6759f1ad0fa3b4c78df1a10febd4e38db19b85f949dd9ac0aaf26fa455cf40f18ed0c43da3f623af737d6f927ac5b7840d4bc5bf8674cf8c01a10fe0b267c500d08ff15cb5b079be6adbf619287984afe1d2bc2320d8bb03f3095b34c55fe134b31430d53cc5f98730cab01e7f81be331dc94c73f188f6c431eff622a8f3055f93f4cf24853c9acff4c2b7994a9e4884e322b6046d7400113d50967f343c7f889c301b8e0348cc74ea63cea60927736955c57279939f4584387aea713cc32bb5d0c33bbfa188b5d4d5934c0248f3395dc10933cde5472234c728ea9e4c698e409a6929be824b301db89ee0f698ae42c761c5cba53fd7fd537ae1d8507d95417243bc724d78f37b6c30537c3dc7c92a19b37d7096673e226fb119c604e5c0b2c5ea798c66b4b4cf25453c9ad30c9d34c25b7c6f2bfdd0cf3bf3698634c37748cb6188b19a62cda612c661ab2688fb19865c8a203c662b6298b8e188b39862c3a612aef6eaa72674cf25c53c95d3018798630ba628e916fe818dd3016f34c5974c758cc3764918eb1d8c390450f8cc59ea62c7a622cf63264d14b2798b50e17d440ebb037a6f5de865af7c1402f3405dd1793bc8fa9e47e98e47d4d25676098171962ee8fa9bcd854e5013ac96cca66811f95131ddd85b15862c86210d6505e5a030de5c11ae199bddddb489e4379a248bce45cbebcd73bd29bed795feafec69603b345bc2bdce7894f0929746de8a1e1c059441416fcd48da2283b75a37d350b93e9819d00324447b10fa338af1629e60b99797cf7ffd529905ca6699c65f6657674ac66879fd0ba5445833e1e8a793ca4261b8b8b4c2c812f374ce05958025f6198c08762097c650d24f06198f05535207c3826bca4068467eb84b3aca934517a570360491d0960842e00966a57ebfa28583200feac86538c873312f3c835861e390a135c6628783456375b5b0375b331583a2a374c473b6195860ad34ac3ce98ca95862a8fc5545e67aaf22e98caeb0d55de154bf31b6a20cd8fc3b4de68a8f5784ceb4d35a0750e267cbf1a103e017391fd4d5d642206fb0043d8b9188f036b80c7244ceb830cb59e8c697d700d683d0513beb906844fc5ca81430ccb816958117c680d15c1bb6145f061355b044fc7086d312434032374780d119a89113aa26609cdc2081d6948683626f82843c173b08ce068c38c60772cc73dc634c79d8be502c7d6402e90a713cec6bcb7fae19160cc3b1f037d9c21e879188ee36b00c77c4ceb130cb5de03d3fac41ad07a4f4cf84935207c2f2c299e6c98141760ac4f3164bdb74e305bf570aa1fc109563d2cc4d2f869a6697c1f0cf2e98690f7d5096627a29ee147f0105cf0228cc599a62c16eb24b3f18eb3fca89c60bca30053f96c53959760ae7c8ea12b2fc5543ed754e5424cf279a6928b3018e71bc25886a97c81a9cac53ac9dddddb0bdd1f5a2695dc189f54b11c73e68b0c9d7905a6f2c5a62aafc4e2ef12c3f85b85a97ca9a9ca2598675c66ea19a598e4cb4d25afc6245f612a790de673571afa5c19e61957197ac65a4ce3ab0d352ec7205f630ab9026371ad218b4aac1bf5ba1ae8465d87f1b8de94c77a4cf20da69237e824b3598137ea1ab335322b70a32e48362bf0263f919b6056e0268cd2cda694f6c3fcf116437fdc1f53f95653950fc054becd50e503b1e8bbdd30fa0ec258dc61cae2604cf29da692376392ef32957c08167f771bc6dfa198caf798aa7c18a6f2bd862a6fc132a9fbc832a9c3b120ef270bf2082c613d6098b08ec4627c9b698c1f85497ed054f2d198e4874c251f83497ed854f2b198ff3f62e8ff5b7582d942c747a3a60b1d8fc3747ecc50e7e3b19ad6e33550d33a01d3fa0943ad4fc4b47eb206b43e09d3fa2943ad4fc65cfa6953973e05ebe17ac6b087eb54cca59f3576e9d330cccf19623e1d738ee76bc039cec0846faf01e167623da02f18f6809e85f9c78b86fe7136e61f2f19fbc739987fbc6ce81fe76251f84a0d44e17998f0576b40f8f91892d70c915c8069fd7a0d687d21e6d56f187af545587efaa6697e7a31d617f396615fcc2598e0b70d055f8ab9c63b86ae711906f95d53c8976392df33957c0546f97d43ca57622a7f60aaf25558fc7d68187f57632a7f64aaf23598e48f4d255f8bc1f8c410c67598ca9f9aaa7c3d96837e560339e80d188fcf0d79dc88f1f8c294c74d58c3fc4bb286f9cd58c3fc2bc386f92d18a5af4d29dd8a45ec3786117b1ba6f2b7a62adf8ea9fc9da1ca77602a7f6faaf29d98e41f4c25df85c1f8d110c6dd98ca3f99aa7c0f96307f264b98f76209f317c384791f56ceff6a58cedf8f09fecd50f00398c3fc6ee830db3087f9c3d4611ec454fed350e58730b7f8cbd02d1ec65cfc6f32177f046be3fc63d8c67914f3c47f0d3df131acc2f25f0d54581ec7843b69e6c29fd008cfece7de465638946b06bd035287880354870369b143419984f9fcd4cc22f729fc7b922bb59cafc2636bf23c595252e2b585119759570d33ce2da270e3ab03a3696c75e060fe0595ced82ac227b1a84fab81a87f0acbe5eaa4996e2aaf93cc8e30ae9b265f4ea27682238c9fc1d4ae67aaf6b318edfa3540fb394c78831a10fe3cc6a4a12993ed98e446a6925fc08ac2c6696645e18b58376a9334d36ed497309d9b1aeafc32a67333639d5fc162b0b9690cbe8a496e612af9354c724b53c9af63758b567e623041dde20d4ce5d6a62abf89a9dcc650e5b73095db9aaafc3696d9b5ab81ccee1d4c78fb1a10fe2e26bc430d087f0f03ded114f8fb3ac93ddddb4e7e7c24c1e1ca1f602a773655f9434c721753c91f6192bb9a4afe1893dccd54f22798e4eea6923fc5caac74c332eb33ac35d5c38fe004ada9cf31163d4d597c8149ee652af94b4c726f53c95f6192fb984afe1af38cbe869ef10da6723f5395bfc554ce3054f93b4ce5fea62a7f8f491e602af9070cc64043183f62297b9061cafe096331d894c5cf580138c4b000fc055339d354e55f31ca5986947fc3fc62a8a15ffc8eb11866cae20f4ce5e1862aff89a99c6daaf25f98ca230c55fe1b5379a4a9caff602a8f3254f95f4ce5d1a62aff87a93cc65065d679aa4d7d3b19a6be884e30eb89dfd98fe0043df1519d600679ac29e4344cf22ea692eb60927735955c17933cce54723d4cf27853c9f531c939a6921b609227984a6e88499e682ab9112639d75472634cf22453c94d30c9934d2537c5244f3195dc0c933cd55472734cf23453c92d30c9bb994a6e89499e6e2ab915267986a9e4d698e499a692db609267994a6e8b499e6d2ab91d26798ea9e4f698e4dd4d2577c024cf3595dc11939c672ab9132639df5472674cf23c53c95d30c9f34d2577c524ef612ab91b26794f53c9dd31c97b994a4ec7242f3095dc0393bcb7a9e49e98e485a6927be924b346ca3e868d94de5823655fc3464a1f4ce345861af7c5345e6ca8713f8de0cc0c877ca2ca3cf7d90af7d74dce24feeb0a3ed5836d0e5deeb04da12b9c657c5247299fd681bd2da79fcc74af85ae764c8fc413550afcf0aac4fbad327411c1782d3114dc1f4b464b4d93d100cc290b0d9d7220e69445864e3908d37899a1c683318d8b0d351ea213ccf725f72338c1607226e66f2b0cfd2d0bf3b795a6fe361493bcca54f230cc2f4a0cfd6238e617a5867e918d69bcda50e31198c66b0c351e89797299a1278fc23c79ada1278fc6fcaddcd4dfc6e80ac7feac705cb5430ac7eaf322f716855dcd159015bad8d0cee0ac4c63333833ddbf68f5c56671eea48b77163beb7c39541a1aed3beb04b3dbf5ee0f9d558712ff540ba02eee57637501b0d9301bd2cc67c3ec8209df5803c277c5d2da26d3b4360ecbd0f633ccd0c66359f0fe8659700ec6e20053161330073cb0861c70a22e805eeeed417e9824389b32172b3d0e767fe8a7088ee4a079c76c6789b3d2bd2e757f19e22c72ff5de3e6238b5ca92c3f29e1b928fb8afd925c027b0be6762cb75dc3f316d6d40852884dc2ecdbacb36f046a5faefbdf12f7a56261dd0c579f6230975dd5389135f3dd2fd86cf820764cc6ec384467c73c7ecb66d6cf73c361b9b997b397f2bfa7f19c9d956ecbdc4fbcd26d5ad59b93dc32cfcbfbe772fd8b5c5dd7f3b787084bd8af85aec475dc222637f68d6aab5766aee0246b82c3148cc3a13a0e45c41c2a9d393cfe8b7923b89407cdac2d10a75625a641e92f53314e87e938ed54c5c95b8931c1fda9c2fd611eaf1f95f0f4b042d48216f1545d213e677a05f1fdd453f234cca22d3a8b1610c6fc14e398c7790521b21b46e4701d915dd1bc6d9efbfd146e4799b39ce7d49e9d15dcce45fc9caf92aa5c4e2f6362dc3ba6de3b1db3ec089d6523135a96ef5e3756954ad2a64af1943abf9a815972a4ce92c9a82553b897e9ca59cf1babd7dc55edf3ddbfcb8467e271182f2388a533314b8fd2593a0bc97166716b36704f5a25e201da39dbfd6d354f8bb81d3a56ec6d5d78deb339ae5a05ae14263787b70183583e0bb3fc68cc5b8368e2595f2cfcb6d07d52c16b54ecad59c2d2445e1cc492d99825c7e82cd9bac36a19ac362639153a93451ecc42f05fe27afa0d772d5c94c00ae657eb1c76da612c74ef3cc49acb23e660d48fd551df39616ec7eadb05dc5be2f33ba6b92c9baa97d8f1a5724dd8b43b66d3569d4dd94e7cefcc44cedef30799cfe5bbcff204755d099ba8d601bf0b62c55ccc8ae374560c4e183379a2b614f37199a6d75789a829bdf330bd8fc74a1d2cd4f8b61cb365adfb5181a8136e4aa871a25f6aaa56988f597a82ced2310163a822500cd544ba9987d973a2ce9eb14a59325cbb125be66eecac56168765eec7956eaeb982e7a28571e5abf756e2d2d27b278855f331ab4ed25975bc25e54a1e97b086bf1fa46489f7891d5bb6ec81913f59477e48c2ba8917eff179d724ee6d3227a8499fd913d3fc149de6536b3025e4054c0935114f7b61d69e8ab5e5f0fc13e6d9f378b95fceeb8a456eac1538ac25bf4653ca27ae03a49e432fc02c3b4d67596fdf1e38457860cdd47cf7c6b43c5da765df6a25662cd4f8f43183fb5eb1fbf7f26abac66aa041345d88697a864ed35c45d35898d04ba678532d44be9aefeaaaf3015863c69ed794d7ec835979a61f2bb1dee849496a2ff17548fa3ead7d312bcfc25a8e89eb69d37859b8da2d195754d57282d45852b7641166c9d93a4ba6fbac71cee0a57b459547ce76bd3316873bbaeeb918b3f91c9dcdd37cda3c938fa2b25c5a8e9be079766a16a7daaa28c0ec3d5767ef309f6d3a2ff718ea8c0cd4a28b7d15c482259805e7e92c181ac8025dfe87db965adebf14d3ff7c9dfee37ce5fd396e4da550f4f0eb7c2c78ae9f9a6d85986d1798c74de218a819df2ac2f4bf30d84823ded32beb1405fc99d7ae6175d51237bfafb95c6d1966c745580b34a81d5efd3a075841df1f558c5975b179dea5f3a1e47957d0f4b11cb3e0129d05137da57d3f3d3ab559eb5b81d978a949af61aefbdf3a745c0e2f27e17741ac588959711936f61a3f4ee3cd48cb736328d69a9bcc471b4b93f44924b254951bc4a25598459763795b728bbcfe5c7cb4cdef6f41ec28c1ecb8c24f1aaadecaf3578226ea29aa791b4b311baf34e9fbcde37e55c9475a965a521f5d8d597a95ced2293e2df5d716aeedb6c61accd6abfd79aeded65c5efeb211451be2b30cb3f19a60a3fe3379ec2d776b459ead13799f2eeb0bcc622dd55ab0642d66c9b5fed2a03e9ff137fe924a5e93ba5f9663965ea7b334cb67893dc17da752131f897b61bc6f82685f81697fbdbf5e572fc4203d4c31cbf44f6b2a5e2a31cb6ef0d31f13a49730719f4c6dd61ed76136dfe82736aba7bac98eb7a0ad40e36d783a4b3c0e9d5a99be1eb3ec267fbd6b149651dbbc01b3f966cce69a1aff91a3be9eb717bad6ad767fd5a5e59a6ea56ec46cbe059b8d9d3cd526cb916a33856ec2ecbb5567df24b484f746eb8bb80ecce7e4cc96f8f85be1c891e282b8b7e8e3713fcccedbb0b1cbe4f118ac2fbc3663757fccdadbfdf4adcc033ae5f0f9f46cfc3dd1181f6e039415c48203300beef09fee587f61f074e7f54cfaeb334e3d860ec4ecbb13eb57093e4351ce8a8efd3a91f746e8e6a2a6164b076156dca5b3629f1ab2c2eb65092229e6c5a97f1984cbc11897bb755cfa28deaba639ba91ebcd989ef7a45ebaa9b9e28ecc070fc1ecbb176bf5a5e61bfef346aa19cf876296dea7b33433a59498788d49eab17418a6fbfdd86cdbd4676bb39e15162315bcf6b19acf478b9fc15e33366dc16c7aa0e6f27768d34cfe45650d5b713866c5363f733eb05e9364e5706df7981c8159f920d64a0db64e22967fafe173074ae2629432573812b3ec219d65a3d0da7df52d65e22d63a308e54e6c958b5f29416c390ab3e5616c0cc7ef9a9a785b2aab694965d1d198458f60730782c5ce64fe7bf59c5a4d4514b61d83d9f668b031eb64b155ac19d3c66dd28d8007b1ea58ccaac782b59631ab6c5939b615b3f371aca7a766ecac3e7e9a8aa5a9d5d98fc36c7ec24f9b197a94699b3955ef3c1eb3e0493f631cf87e01c9c7386a7b96e60998a54f99cf1d19e96427b14f178fecab20169c8859f0b4ff96170b3378ff86671ff63c780cd577ff8d44d8ee2193b81c36b37d0eefa1f35274e600f7273ece244f29942b2fe4ee36a5e24e3e671a94bac459c8f9557d84b1b3093109cfb8e8ea451def9f7e1186bd52641f91650ac121627db4ecaff4465bd96afa293c1729e225245b773d83d7af2b1df57c48cc0add6a18f654675d729be44e436c4dca525e0eb3d85de2fa4e7d619194e5921ec848ffaf59fa2c8bd5412256a399ecafc8c014bd29b916cfa579c735ea7ca87d35b2b026a5d3dd1320d70447d85efb8b9ca93c3115f20899e3febd8e57f7938605f3205d5883b900595e2615073b6675e23a7207f326d2f04daddc7fcf6ce538f5eb46b3581c3c4f09aa350735cf9556284637e7f3f85be778b39662ab02c380ada4570cdb764a6ccd3936e6c6b0d9b89bc88cd902ba30e03a77df18ae172871b5e3b8f2dc57ca450e29b195889c90ad492caf6ad98601de017d63f05ea484d786c38b1d229c2f06f564d7074cbc6100f7719318b89728c1b550c079ab83d6840e588ba631602f53026b5cad3090c8c280a9323b86e9154a4c5d34950bb91f92a70a2c37278ad199e2d0140b4dbac640be4a09b2250799cfd179130d61e563269fa0128e24bab9670cd96b94c83a24f5bd094e91e8b1c9e505457128006eed1203f83a25c0a6da9a1b1b4a5d16928ac7eba0d6f6067d71007dcd1b5759150a4c677688617a93be0995e3e65685bcc93f9303f336222a0f5d6523bb710cdb5bb5dbf254db0461aa7c2c1f11c3f6766d566a65920c9b9fdd095a01efd0fb597c8919ef676c3c79634832ff26fd62d8dea5c4568f63f3266f9487040efb47c2798fbe12017d6a2e576193c3e6b98401d5c7ad63a8deafdde497e7ace19d3d4bf9df958e37d5bc3414d80e488f61fb80125ba36aa5630eef370b03a4fc0931481fd2f7c226cadac3806b71ef18ae8f6a3fd72a73bc754d614035be730cd5c7b5d9e7aafa55d86a5b634117e227f4e0a08fa92b8e263adece3ee1684566378f81fbb4761bdb4c009b6e10064c335ac6307d4689a9ad0fff8af5b786015d8b1631749fd30fc2613531ef10a3a29025cf0edd63f0bea084d70aad6a846fe4b2ac4d0cda973ba67e36434ca20f03ae2ded62b8bea22f3b273ade2cb072fe39ab62b0692bb3c52cba7251250903b8190362e0bea61f146195d96522f0e5ca74fea5ce52a1d434c7db42280c004f5d1c03f84ded160deaa8d224fe4b9846949e01234adfeed82a6f6c6bed3080ebd22c06eebbda2d1e547061c0b51c34adbeafdd2a08acbfc5daaa6180766f7a0cda0ff4530c627064995a14ba26fc563060f2237db28478d4196761c0d562480cd74ff465e72227cb89edef19f69adbc7fd63f07edeb1837373b852eb43816d63460cdb2ff44934b6425c8e10c4aab961c0b5e7e218ae5f2971b54f9aa3c98a6d718872b8ada079f55bedcf032a08c96cc68f3bc630fd4e5fd560b37f563970ab8399429182d07449f6de2786ec0f7a6458953687b701c251a11d9bce90d5afab0857977ea6be442c18677c311b2b3a26391b9d32fe94c92be4b2c1e23676969b759aff0917a765549b9e9211601a5e86cf564186afc956198116685497a95b95505d66a201c80c1f2de98c40dd147ede8e0d1464041c95c94830d8951149b4742f23c9cc9b0cdffdf43a666ae7b44e4fe901d86fac54c4b49423ed1929cde2ce08dc4b9761b45241175ee201a30c9ff97946804941ba18d5777b64f85c4e2043f7b3e6319197c894981178759bce7e6c4ea29f7765132923705b3423d09843460a15e90c1fdd091909161ee9620b9b279c81ce9acaf05939cbf0b1b03323c912820c1fadb38c94862c62ebff61811d5bb79fc5d6fffff5fff9d2fc2cb662fd6f062157d45abd7aec3f94f5d86e22dd793b31b01d73fdefa1b2c819a9ead3a59a3e73c56692de6112b226abd3ac615c5d776dc487b1a9d477cf8bc49a08ffd28fedc5a38502d50d6c47bb6690e11ce7c7c054701e1d8de1fccf269c634289f33680d3a96311cea1a1c4790348ec119b700e0b25cea700cea84d38878712e7a700679a4d38b34389b30ec83bebd88473442871760038ebda84736428718e0538ebd9847354287196039cf52971b296b917a8d753874cc3ab3964eda890b1fe5b89ac0125b22e1a0fc48f0499e6948a4e8c45949e4886f508e0890d6b236117a3491baacf5a4084edf38654380f0095a24636e11c1d4a9c2b00cec636e11c114a9ced01ce2636e1cc0e25ce9f4191d4d4269ca34289731ef0ce6636e11c194a9c990067739b700e0d25cee341626f6113cee1a1c4f920c0d9d2269cc34289f33c80b31525cef64ee2f679fc46f2c3dca2880ce60f5430bb8036516b9b60127a2619cc8e00661b9b608e0821cc7600665b9b60668710666b00b39d4d3009fb91c860d60530dbdb0473580861fe03aaee1d6c8239348430ff04303bda04332b84307f00303bd904734c0861f6047966679b608e0e21ccee0066174a98ed92c08cefea20ac652ea442f92440d99512255b7350e6a8b38ac33a42c9a4486cdd28b1b5151ee881aa70d423e93cd5bde3ce080b99ba54208f06854c774a909d3449193fa9d65b5b433a6f38870ae90b00697a6d74b761be09c5b1fc319bb287a83e15ce2500670f9b708e0825cefd00ce9e36e124edbf24c3390ae0ec6513cee1a1c43915e0ec6d13ceac50e26c0e70f6b109e7d050e2ec0d70f6dd91ed1e1567f8508e04ed9e7e9428db24f1cc09eedfec2f528c8d234418df72621833762446692929c6ad54de381324ecfeb5d13be42f9f249daa4596b46f023e39c02698612c726e063007da04937014920ce66500e6209b6012f65c92c1bc11c01c6c134cc251483298970098436c8249383e4e06f3520033d32698841dc46430cf0530b36c8219c656cf4500e6509b60128e4292c1bc05c01c66134cc2f1713298b70298c3776cd786278a2d3b251d52bb9c0ae595a03199bd2351c64f3508e314985301ca119428d9e8f83a8ed0dbfb8eed8215ded1f16620318fa4c426d7efe213fea1c01c876db4c6262090f6122da1c23a17601d458995c55f9983ef6248866e0015baee00dd684a74e9c2234bdc974a7899cdf62e98c81372a5e36d5e98789703c27c926c8f8345a0377d4c6d1439feaa42616cef8c069eba1325ca8e494aefeafb6a91d62cc97cb3635a0ce8ceb601256cf7d06db703808eb50d2861b94e06b42500ba8b6d40c3581cb5004077b50d6818f7306a0d808eb30d28617f3b19d05600e878db80128e0691016d0b80e6d8069470ac920c681b0074826d400947d2c980b6074027da0694709e0719d07600682e2550ff5b8f7bdbeeb386e9322eae94b6115a4935adab1f403b89badfb3549c1a014f95984dd9efd992ca23d91a13896df28eed0609fb20c6fe00e5941d398891ebb093509608948495f7a22811ca19a0736e6a6df67db223182a782ee99d7ae189fb5f9b493c1de09d4689b7299a572e73ff0d5f6ed91924f1dd28c1053fdf228cd5a18b801f4eb70927e9eeae6438ef063867d88493744b3d329c778291f49936e124dd698b0ce7cb00e72c9b7092ee504886f3378073b64d38c3d9326f08f2ce3936e124ddca990c67378073779b70926e964b867321c039d7269ca45b3993e1dc0470e651e24cfdb006c20e10b239744d01d67c4aacc1368c225d384d368ff37350becfb30966187779fd18c09c6f13cc30eef2fa3e80b9874d30c3b8cbeb5b00e69e36c10ce32eafaf02987bd904338cbbbcbe02602eb009661877797d1ec0dcdb2698615ce2f20c80b9d0269861dce5f51b00731f9b60867197d72f01cc7d7724ccf8d174d2644e369ebe2b684e2eb2092661014406733c80b9d826988455233298390066814d30092bed64307301cc2536c1246c4e92c19c0c602eb5092661470719cc290066a14d3009bbe0c860ce05308b6c8249d8394c06731e80b9cc269884957632987b0098c536c1246c4e92c1dc13c05c4e0933d8391784b54cb2732e2e00285750a26ce4deb05d3c0adcc07378fb7b85b3defd217c03bb594e0cd9ca1de97d50dca250ee6ef43af0be55942859d0ebf88ff9eeed46f763325843a860f5047e5742094bcecf90f3d54bdd570b7971513def63f544d289042f52e1fc1e74a395d6064e2c19e70b26796e7872b22019ce62aad5143341525e4d8933f9de46507db8b711a1978e8810618d022f5d4389952d67a87005ac765f827b1a4d74e0163d6400c956533402b966192540b91ab2d259eeb063bc16551d9954c811caeb04f7e5e5ee47eb1db6fa87154ac475c7c654681f0068d7eed88a106cd384b179380ce49ee5b5d13cf47b143c61ad92ec20f88dc02f2b6c8249e89964303700989536c124ecec2583590960aeb30926e1300419cc0a0073bd4d30093b7bc960ae073037d804937018820ce63a0073a34d3009271590c19c00606eb209266173920ce62e00e67e36c124ecf22083b906c0dcdf2698848d493298ab00cc036a03e652073b782efcfb0e97019807da04338cdb90ae05300fa284e9ff4844cade22aa9eccb701c68377244669292946b22311f34187f0e61d99b4d5d1c7301e89f837f0c9436c8219c62311ff01300fb50966188f44fc03c03ccc2698613c12f14f00738b4d30c37824e26f00e6e136c10ce39188bf039847d804338c4784fc04601e6913cc306edff82b8079944d30c37824e2bf00e6d136c10ce3a44107b4808ea184d9dda93eedc0ff9c8e619470c9e674dc0f26221c6b335cc26c800cee7d00ee569be11216586470d301dce36c864b58b52283db15c03dde66b8848d0032b8cb01dc136c861bc6498a8b01dc136d864bd8b14206f76200f7249be112760192c15d0be09e6c335cc2ce6a32b85700b8a7d80c977058850cee2500eea994701bb8376c6353b6a02bbcc782b77562b84ea3c4a53bb0c9bf2f8631993f08fa0a4ea7449bfa89eb84099cecc4f522e0b167502770b9fc30df09ebcacdde00d79994b8d8b161ece712feca1c872dda5ae6bec826e0842ff1d605d8cea2c4d649932fea77d09e58059734e18ea242fa302899cfa6441aec40fa300e2a8f03de790e25caa61c6599fb232b30d89acc092e0b76b615fb9b0cdc242a70c301b8736bbbba8327eb52a78cfb6a117f9b7446f25aaa39766783eace799468e59a76ffcb08c338c17b1dc079be4d38478712e75280f3029b708e0825cec600e78536e1cc0e25ce6f41b174914d38478512e72ce09d17db8473642871f603382fb10927e97eb064388f0189fd529b700e0f25ce6b01cecb6cc2493a204c86f32c80f3727b5b48845370c85a48cd4107c815b5d1219c1cad7a2a1b616708d910c6bd00eb95b5dd55e70d61e439b9ce746782fb22eb9f96c31ae5fc0dc2f94c3954486f0725fe559448db3a89bbea3cd5bd8dfe0841926df4770dc84dafb6056418774cbc1c80bcc61690847392c8405e07405e5b1bd5257fbdf00c681857241d0e72caeb6cc2991d4a9c7b029cd7db847344287196009c37d88493743e2719ce0100e78d36e11c1e4a9ce301ce9b6cc299154a9cf500ce9b6dc249bac32c19ceee00e72d9438836db51fc6ad2ece042df45b6bc3333194d5b73b276c0b916d773e04e0bccda6849e1dca359dcb4042bfdd269c234289f36080f30e9b70922e8a25c33906e0bcd3269cc34389737780f32e9b70668512675b80f36e9b70921e2e4686b32fc0790f25cee6ee8d37ab73a9c3565bb099c5de991bf94e5867baf77262f0eea58427472ee519456b5d1245fcbfc2aa511fdc37c3b8bbcd5ea0c6791f25da74056d994b628513ec381332bc648b0d9a01bcf753e20db6450be939ac74253cc8061eb0096618f7559c07606eb3096618f7559c09603e6813cc302e819905603e6413cc30f6754e07301fb6096618f7559c01603e6213cc30d63ca702988fda04338cfb2aee06603e6613cc30eeabb81780f9b84d30c3d8f1b10f80f90475c7c722de0a5f542575116f681638e5fc25327864dbf2cf00bd464f52c20b761626617b87ec2ccca1a025fe546d7474f89b4b3cc7892dc0ce71355841db8fb4886a06fc29c0539fa6c4cbf6ee602f2f735f09efe63c6d40aef80c25aea6c21b59c0cbb82f4ad9ec2866327075a9c03900dcb33b32479ced7eb2d2fd6b292fb50973c41fa8506e0349f6394a94669b9591567bc83a7edb83e2e6799be18671c7e33600ee769be18671c8e20d902dbc6033dc30ee78fc1280fba2cd70c3b8e3f1bb00ee4b36c30de38ec76f03b82fdb0c378c3b1e7f02e0be6233dc30ee78fc2180fbaacd70c3b8156a3d50157bcd66b861dcf1f877e0b9afd706dcd8e49c58af141355c005eb96cb921f0dbd900aeef5c073dfb0192e6123820cee6800f74d9be1123622c8e0f60270dfa2846bb6b377186bb917801cf76dea7ed942f7870af7c1123eac5208b6012603378a0adc002706ee1d7b7d328c5d894f029f7c97126d6a1b5613b6b7c8bcf51e9083be571ba308d808ffbcda2a8cc876151b0512fefbb59df0fdef2a4688966c57b11341c2ff80126db2c5b513dc4fd7f042ca5b5a3b9ab24e3a8eca530f0589fe439b70921ee54b86f34680f3239b70920ebb90e1bc1a24f68f6dc2497a6e2719ce4700ce4f6cc2393c94383f00383fb509677628713a20effccc269c234289b315c0f9b94d38478612677f80f30b9b708e0a25ce5280f34b4a9cad1c3803dab39f757c543ab5340f9a6cf2ee614e0ce157b5e191fe4fa0211c11256bb36f00a5f9d736e11c1d4a9c4500e73736e11c114a9c2d01ce6f6dc2991d4a9cdf83bcf33b9b708e0a25ce39c03bbfb709e7c850e21c0470fe60134ed2b94e64388f0589fd479b700e0f25ceeb01ce9f6cc2392c9438cf06387fa6c42917d6fa5bbc931dcae53b65a059f98b4d300967da91c15c0960fe6a134cc2d17532984500e66f36c124cc33c9602e01307fb70926e10a1132980b00cc3f6c824938578e0ce67c00f34f9b6012761293c1cc0730ffb20926e1c41932987300ccbf6d824938fd900ce67e00e63f36c1245cb94c06b302c0fc971266b2ed0be2bb3a08db3f64b3e09f0328ffa34499dae1908475cd1c2aa4cf82ce38b68587357b7e938ea3936d7d7518c019b109276915890ce77c80336a134ed24933643857029c6936e1249d704886b33fc059c7269ca4130ec9708e0338ebda84332b9438eb009cf56cc219ceed563b009cf52971063b412e8c7b2acf02d5f8069428e1fea010682dcc8b235b1ab833f0c38694f064dbdc5fb21e19cae3255e7062301bd904338cc74bbc0c6036b60966188f977816c06c6213cc301e2ff11c80d9d42698613c5ee24900b3994d30c358157a1ac06c6e13cc301e2ff12880d9c22698616cef3c0660b6b40966188f977805c06c6513cc301e2ff12a80d97ac7b6c43d51de0909846539d922abaf4063b2cd8e44193fd01bc6a931a703946da93b35d6f11f9992657cb1df449edc9918b676920c5e4b2a780d40926e4709af8b936cd2351498e3fe55cef79623ed685b42857501c0da9e126b5b879d40ccbcafb82af03cfeaa770e71d8fdb32100d9c19e7c328c738b9e06f964474a9466bbc685711bfff301da4e94685976cd3e5ee3ca0bef813c8d41a2ee5c1b89da5fa53c8c7d423b03945d2851764c923f56df186a18652e49b68144ddb418d0aeb601256c819301ad038076b30d6818b738f9050ce276b70d2861ef2519d09f00d074db8012b67ec880fe0980f6b00d2861294f06f47700b4a76d4009c725c980fe0b80f6b20d28e1a83919d0bf01d0deb601259cd34106340d549bfad8069470c61119d02800da977e24689d2bad909f88e17d382741275df8608e746230fbedd8167cd847822e06283376640f672eef825b225012b68cd896052428b34121d49f12656a873710b68d46517967138074406dcc65f75b0c8d0e65efd23500e7409b708e0925ce6700ce4136e1243d479b0ce703601863b04d38c3d995fc0ec039c4269cc34389f35f8033d3269ca45b4d90e16c01f2ce2c9b708e0825cebe00e7509b70924e3524c3b90ce01c6613ce51a1c47930c039bc36a679c92342bdf9727ef6f0206c1de55061bd061449d9b53da5c6ff796c843df464e7b19d0bd08eb0290320dd369f2c0338066400236dc2497aa80319ce3b00ce5136e124dd499b0ce74d20b18fb609673807e39e0338c7d88493746372329c9f019c3bd9849374935d329cf541deb9b34d38494f7021c3d909e01c6b134ed2e5ff643827009cbbd88493f40417329ceb00ce5da967c6b381b60237f0f0ce8c674bcc24ae7194b8ba6abc4fdfa06466c0c90aa443c303a8c0e6013f1c6f2b58c22e1032b0510036a7367a96fc819de67e54e03e219e154296111c08b04ea88d75ebfed6bd0da79c4b47b6f26d1c8039d12698613cbd65170033d72698613cbd65670073924d30c3787acb180073b24d30c3787a4b168039c5269861dca262208039d52698613cbd2503c09c6613cc309eded21bc0dccd269861dc6161128039dd2698613cbd652280398312662f0d4cbf63eb709f1ac2e45f9946047927b028662625e4de4efcbc9052deabe9b5d0cb9d20fb83106226db1fe451e0cbb376e41a8f98eac443c56427113d0e50cea644d9c4bd2970ad2fe4be3733ce5fc3e7814ca4c43687125b6707eefc2eaf93b98042edeca4455cc9ca10ce51da0d0c0cef6e4fb226ac3a9125eb7741b29ebb231714c6579dc258a57f0824f5bcda5e05977c9e27610732d93ccfd74042cfa7449aae54930ac4f57fbb7af42b48fcf36c3a30279c27181c09bc75be4d3849e72b91e15c0870ee61134ed2f94a6438cb00ce3d6dc2493ad7930c6736c0b9974d3849c790c8704e003817d884332b94381b019c7bdb8493b4f3830c670f8073a13d47e185f1c8925b00ca7d2851f671e2abf465eeff598731ecf7d4b597e680f772dcaf56d0cebc5b44d549f233a8dcef1b16d0841e4d06fa7d007a1125e83649328709eedfec2fdabdbca930ae02181753626ce4787b79b33dc2d6b97fe5bb0f373a84fda043c88a252786aca0363c0f2be5639e47d90d42e5796f028c4b7624c6aaac8a12e3562a6f5c06302eb5e79422c2bc906c6fba2f4025a9d09ed337c2386be93480b2c8ce837608133bd9413bd340625f561b3b30c8da65253a4b249f035dcd732226ae94d6632ba98aa351606e483125daa6ee0d0b94496395a1d91c63781771b5023eb99c1a9c6ce5b01798a039dcf78a9c301ef69401c0adb0e75c98301e099e0350aeb46bfbe870eeefd51fe486ab6c031ac673617a02a025b6010de3b9309d01d052db8086f15c984e00e86adb8086f15c98ae00e81adb8086f15c982e0068996d40c3782e4c770074ad6d40c3b8ff473700b4dc36a0613c17a607005a611bd0309e0b930e8056da73944918bb8b8f706228d7d973940961c94e7694c934300ab99e1265338172a8b388bf5accefcadc9fcbf92be1ebfa780278e186da987384f7b443f5d956a78489ba2115ce723070b1d1269ca343897311c0b9c9269ca49d1e6438eb039cfbd984333b94385f0279e7fe36e11c154a9c9380771e6013ce91a1c4d915e03cd0269c434389f31090d80fb20927e9be346438af02380fb60927e931f76438cf003837d7460b28eb7fa60574284077884d7b188f0e6597db65a02d7ea84d38c78412e73680f3309b700e0d25cebb41a5688b4d38c379eefaeb00e7e136e124dd7a970ce71f00e71136e1cc0e25ce4620ef3cd2269c211d4c03388fb209e7c850e22c00388fb609e7a850e2dc1fe03c8612677327360654c6a7602f0f7d1b683a28788edd91c3baf1fd4484f3e0c8f6e66a0d506eb5f38807c2e44db64c2002261e1c4789b59fc643e337949ae8b06df94af9df0cf33a2e7292b3def136e9cbe7d4e47c78421f3e830af66a2706fb787bb6ea23ec9823cb0ece03c5d209b6a024ede32443b90bc8024edc117b23c85543ffeb3bccad013e7b526d74260ffb9fe94cfe1ae49c27dbb3e70ce1921732948f002f3c6547b68ff205933cee99ab69e7c81553cd91db0de03cb536d6feb27611cb2f83e496a4653c597e790748f4a7d5c64906f8a45898e8494fcc224bf6270098a7db04338c0b5b4f0430cfb0096618f7933b1ac03cd32698846b87c8606e0530cfb2092661d94eb787318079b64d3009d75d92c13c0ac03cc7269861dc38f26000f35c9b6012d633c9606e0630cfb30966189b97a70098e7db049370bf0f3298a7039817d8b38b1c214ab26581c3413bfd427bfc7274281b935f02bfbcc82698616c4c7e03605e6c13cc3036263f07302fb10966181b935f009897da04338c8dc94f01cccb6c8219c6c6e46700e6e536c10c6363f26300f30a9b6086b131f9098079a54d30c3d898fc0ec0bcca2698616c4cfe00605e4d09b3bb831dc9e867ac92b4db836cac72049844738dcd70c33810fc2368bb5f6b33dc30ce4afa0cc0bdce66b884f55432b8bd41b670bdcd70095b5464701d00f7069be112b6fdc9e00e04706fb4192e612f1519dcbe00ee4d36c325ec4f25833b1cc0bdd966b8843dff64700703b8b750c26dab810b057aaab3b3b1492783d7a502390180bc95fa9c2de683f084c1dddc27de1aa6c2b8e76418c9ce1b1c089685dd4689b1b3c61ff16561f98e778c1ea96f921da5b72f6812dc6e2354c2462c19d45300d43b6c844ad80420837a16807a676dccbe4fadac0f631df52e90b3de65e7597184ed2ab2b3e20a9c18d6bb29b1f6d0782c53a292fbe46ab70ec016d89629a8e3376d232cbcc8b66c8b02c0f750026ee1de14b8d617f2843eccc9756d5be37eeacd929aed2c73ff25c34776fc595780ef5e7b8e3f0be35c945d01cafba88fe05b2120b295744bb9ff6de0653c61a59e0c5c2600773f25b8060e3bbb9005bb3ec4473db603b81eb069cfcf3194e3a46405c8a1a0e2b3cd269ca4c3ce6438d7009c0fda8493f40848329c9d01ce876cc2991d4a9c6900e7c336e11c154a9c7b039c8fd884736428710e03381fb509e7d050e23c1554941eb30927e9ea24329cdb01cec76dc2392c94382f04389fa0c4d9c4a97e62bbec060e5f17705f80ed49ea5d95d456f64cf72f4f6018dbd94300baa7ec397590b0af876c79e1f300e5d3b53d10a11fdd99e8b0fd14cb38726f0745d2319eb55443bc67814ad0333615336328719215339500e7b336e1245dd64586b300e07cce269ca4878993e16c08703e6f13ceec50e2fc0a144bdb6dc2392a9438a701ef7cc1269c234389b31bc0f9a24d38878612e71690d85fb20927e9f202329c57039c2fdb84735828719e0970be521b6b393198b3dd4f56ba7f2de52d22d2434e7ea082f90098f7f6aa4d3009e7b493c1bc0bc07ccd269884f3dbc860de0e60be6e134cc25e253298b702986fd80493702d2619cc1b00cc376d8249589a93c1bc16c07ccb2698844b03c8605e0560be6d134cc2f9bf64302f0530dfb10926e1982419cc1700cc776d8249b8470819cc0701ccf776e46e9ee19fe4ff3440f93ef5d46a2669359fe6cf3eca73592c714af9801b19b81c2a70439d18b80fec3c468fb0a24e3605fb66e08f1fd606d62cfe7f799dcc05143a53c46bf1b9a55cf74386956c31ca64d041fc1125d6be4efcd1644b9cea8bf8feb70f271b07d6a37f4c89ba932663f0d0e639b9ce7417289b52535485bb9cbf41d84622cb6b1f03defb496d7420fb5b4a3594b6fd4e365be90880f3539b70668712e70280f3339b708e0825ced500e7e736e11c164a9cc301ce2f6cc219cec3777200ce2f6dc299154a9c0d00ceaf6cc239349438d301ceafed39dd358c5bf6ef031aa2df50a24c77d4c39cd7b9affdafb7922e029efaad3d07f28471c6fc7700e57794289b0b944315a0b5701e36d99cf8b100def73bd20fe37b9ac238c67e0540f9436de698853c1f2ce02c581ee9894b542085f1708901a040fa71c76f18c93a3f484bf617a940be0c40fe640b48c2044f06f24500f2675b40124e5b2003b91580fcc5169084792419c81f4111f4ab2d20091b926420cf061ef99b2d2009872ec8409e0a40fe4eddc1c15e9eefbe52c27724f416aeaee662d833d6c229778d2873d52be0c190e11c478533db89e1fcc3de6d4ac378c2c6f520effc93126dc724497e82fbe91aeead6c7300af6f9370ca1799af7e0892fe5fb601259cf64506f40300f46fdb8012d63bc9806e0740ffb10d2861fd930ce8f300e8bfb601252c94c880be0a80fe671b50c2fa2819d0570050a79e6540097b93c880be0180466c034ad8ab4406f43500346a1b50c225ae6440df0340d36c034ab8cc950ce85b00681d4aa0ba199ef81655255c106937c9282aa45b00d2ba9448836d961fc6d38927393194f528517675e287e19802653c71573a33ddcf0a9da26a19c026fe17ed9405aaa1e262e0a3f529c19aed4c475844918dc25f08fa9e1a50a2edeea8936d6267b64de4dd77abab6509317348fd76215586f036f0db869470e51c3bbfe53fe93e7564a5ff510067239b7092eea24886f31680b3b14d3849b7ae22c3791dc8499bd8849374af25329c4f009c4d6dc249ba131819ce8f00ce6636e124dd94920c671ac83b9bdb849374cb54329c6d01ce1636e124ddd9860ce74e00674b9b70926e994a867335c0d98a126723f766ad6b7d11ffafd0b52cac271af47162c85ad78607fadff09cb0954eb657c841a0f46e6313ced1a1c4b90ae06c6b13ce11a1c4d911e06c6713ceec50e2fc05e49ded6dc2392a9438f700ded9c1269ca4dbf692e1cc02383bda84736828719e04127b279b700e0f25ce8701cece36e11c164a9ce7039c5d287106db3b91b49a44b64af334d08cec6a13cc306e787e1280d9cd269861dcf0fc0400b3bb4d30c3b818fb380033dd269861dcf0fc5800b3874d30c3b8e1f96100664f9b608671c3f34300cc5e36c10ce386e7070098bd6d8219c60dcfcf0730fbd804338c1b9e9f0360f6ad8de9b118ccf8ae0ec22a3bd96cb86701ca7e9428e56e492ce0651ca494bd5abc42068f6c6e71c489c1cbb027518f0e657b271b6c14dddf2698616cef0c033007d804338ced9d4100e6409b6086b1bd3300c01c6413cc30b677fa0098836d8219c6f64e2f0073486daf634b7e520161999e4385743b1897ccac8d911ff68abf930a082beb64f5cd6300ce2c9b70668712e7628073a84d3849477fc870ae073887d984735828718e043887db8473782871e6029cd936e1245df44f86b319c039c2269ca4dd7064387b019c232971f676f42b7ed9cb4c680eafc2af70d63bd557abc72f1b08e386544782dece519498fdede3293b8ec3d76dfc13f0d7d1b6800ce36af45b01c831b68024eca42303f90b00b9932d20093be8c840fe0c40ee6c0b48c2ce0f329095a0b0196b0b48c2c10c32907f018fdcc5169084935dc9409e083c72575b408671d4fc7800729c2d2009a7c590813c03801c6f0b48c2293164204f07207376e49498f8f638610588ac2d3e0aa09c4089b2b57bb3de899d4f90c75f63fbc4952b67159041243b619d3d911027d6c6c8a4bffea170f6acdf0760e6da0493b0124406f37e0073924d3009abe66430ef013027db04338c67acde0b604eb10966184bf13b01cca936c10ce341ca770398d36c8219c6932b6f033077b30926e1400419ccdb01cce936c1246c4492c1dc0660ceb0096618371e7f04c09cb9635be49e28ef486fc2e287ec48ef6f4107f02c4a94addc1be691739cd83ed8331cb660a532ee1919c2451122844300c2d9b531b9358bff7fa6fb7895fb78b6b3c159cdd1cd140a15b8e28a1cb92288703b3db2047e3848e0737664028f9f7c1dc615166700efdcbd360e69a874963b6cc20b769240be53cea7b954b8499f092ba59d5e504995ec770160e752826deade6ce0509900399b689a28e1c9c0b5a3f2c88e2071e75182ebe224dbb3080acc71ff2ae7c51069dffa122aacf301d6fcdac02ae7b955ba3f94f322877965ae76f467a4934d9bcceb5261dd192c5d994789355dc1ba94e792f18315c9ce1108dfb4c1cbc188d07c7b8e630a637b7d0cc800f6b0ebf4b5e1a13c56b93948fa7bda06348cc72a370340f7b20d681873cffa00e802db808671167b3d00746fdb8086f158e58600e842db8086f170860600e83eb6010de3b1ca8d01d07d6d031ac663951b01a08b6c031ac663959b02a08b6d031ac663959b00a005769cafaaeb1525ac9192f58a6600b44b766c7b3eec4373cf3831944b77e42048aec38eab5d22501256eb8ba2442807835ea6c2daec1b65738ee7bb3f96f013ae128d2d85715b9ff120b117d9773c3d61fe398a0ae906e0a9cb76e4b6536a7f6818272a8e04fe596c13cc30cead7b1378e6729b6086b1af7e08f0cc15b539aa54e6be5ac1f3cd15bce2e4894b04388cbe9a097c75656d96f7ebf88b7ef69c23f4da1c2aac3783290fabec6837b1f2be947b35bb5bcdab52849d266ba9da4de700b425361d614bbae331590bff64900194da84734c2871de0970aeb609e7d050e2bc0d24f63536e11c164a9c2f029c6536e10ce780c8af00e7daffd7dd9d40c755957100bf432da424695a5ad616286069e89634cd5a6ba5a4b47a0e9c44138e7a2acb9049433569c24c1252965a1414a505a9a22828c85a1004dc1059d42214eb5e54162d050ac8525617c482f5de3b3379ff496632c991ffcbf7414f4bf2b699f77bf7ddf7de7df7fbae24ce4a959c055077c62571522339699c5380332189b35a25e78781b35b12678d4ace5ee0ec617216da5fa226482819b47bea6bf39c6502b4de309ed6f33f56baddf8905d291d4a437c5aa7f5b3ef83b278869ca19c3466407c0028fbc218caa9dc37d5458d0ba63939f573dc2fa4af316e19dc4fae66e215b84ad7cf745fb2cbfe4c8c7d2b6171ed09b5e199724e5b8d99bbb6c1697b96bc614788a4b426e0e5407a36fb2d90dbd22afbe1c995969ab86fec3dcefe1bb5531bfc8d4fdc6fd465f6d277b75801a7fa399232bd539f6568179a0be042b3461227b5e182c67912707e5a12a7ce145409e05c2b8993dae84be3ac02ce732571521b7d699cf5c0f919499ce52a398b80f3b39238a92fcc689c8703e77961743c089258a46fd9631e38fdff63ecc2a7d9957a8deb46e31e3ac94d1b852cda2d26a03d9f493bd9e46b005eed7fa2f6382a64f5df5809cf459f0bab85a8c32e1633ad61b5106d6595c18d50063f1f4619cc555ba6f7941a30b08ec5d807b5e4054cc6bded2fee65438b4f4015539c8ba6184ade179864e38df1cdb96ef5a48003d3fcd66636d07d31ecce80c3bf2a13e3d368d7e47be144be300cda2095cfbb3d6b571974bc5e2727df8cc6d4f9474305b05e56586ab5ca6c1ef3a06c5e240d5463368f7200bd581aa8c66c1e8b00f44bd2403566f3a805d04ba4816a4c3eb118403730418b8ccb67dcd57f2b9f308d9ece65e8d477c73903aee55f0ea3bd32774ece13323a1ed4312f3ce3589ca7c30dfc572471d6aae43c11382f95c4491d2583c6391638bf2a89b35225e756a83bbf2689b34625e702289d9749e2a43e03d138a702e7d7257152b320d038d7c0c9fe0d499cd47c9b34ce1b80f372499c152a392f05ce2be406e8139341d302f4ebe1c1f29b328354888dc8b417709be0bdf9b798acb3b2b06217edf9594a6a22a3c3761054b0d46ec53de7c7b82f4168210677c03dc19572420c8894b410832ba0fc5e2585927af1a2512e841af6dbf2a23588a48b59a437c3897e3593748ac97c918c63af0f959793884acbcb793da05ec34f8416f36fdedb5257fd36d3685c184c5bffd7c1a1edf5b5d7579900f35a26a6bbe7767de47afca9adb7c75211805d37ba635f6207068dc3d55f05d7eeeb4733f74173caa4c99750f2504e6dac24bb55c07983a43eef952a470c8ec16566a3244e9d03309f039c374ae2ac50c9590b9c3749e2a48e8c45e36c00ceef48e22c57c9b90f70de2c89939a4781c6391d386f0937fc2a7bcbe7b2d40aa1a5d09fc8a2fda40968bf2b37b28d1992c5a25d0db4b78691b07c78954085cacede71c0bc4d12a6c607cf3301f3764998c41e9f34cc9580f93d49981a03ad3b00f3fb9230350e3fd206983f9084490c3da0619e06983f9484a9717c8c5301f3479230358ee51203cc3b24616a7cd43c1b307f2c0993d86789d7e609987732318f3099af7f5df799a8498e1858ef81dde63a07bdf8181875a431c8b0055e7bfc4403b2c6d0d89b00f9aed17deb89dd17884ff2b4ee0bb381f2ee30420e47d2215c63a7dbf3a075f41e76ea1fd78121e69be62acc12bb6f9dbe67882b8d0d86d89d81d6fe39152e51f78ee6899dd9944c3cb169a3b1de05e5f0a74cca99592887d39536d94ba9137e3ad6c4fd252bcebdf6ef318644fe20d4a53f939b0387d812456bbdbf1b4af3cfc3e86f9ffb32851b5cec4b6cd4cea58e33782a8bf524a86f37b1738475f88eb46e0371c53dee0e00b2fbd82905b0e36c283d3b67b2d80e01b65fc8ad1b898d24b4baf13ea81bef9737ee3ab15eac6191de0e57f207d88900ddca2e19a0eb8b1cda2806b456a63970a26f668f79d5db7fefd8681772d7616aed483b85c700da8392025feb983522ed197c2dd488bf94c459ab92b30338b748e2a4f63da6711e049cbf92c449ed194fe3dc0575e7af2571d6a8e4fc3894cedf48e2ac56c9390f387f2b8993daf798c6b9014ef6df49e2a4061ad0383703e7ef257152bb2bd038af04ce3fc84db8427ce54b4bb87219d4a35b258d4c4dcda1487b83be161a381e92c449cdf049e3bc0538ff2889931aab41e3bc114ef63f49e2a4f6efa4716e02ce3f4be2a466a9a3716e07ce8725715213a6d2387703e7239238a9e97c699c13e152f4a8244e9d8346cc00cec7247152d3f9d238db81f32f921e38eb98dd62680f9caba1eefcab24ce5a959c6dc0b94d1227758c6b1ae764e07c5c12277504761ae7eb26e0dc2e89b34625e747a0743e2189b35a25e71ce07c521227758c6b1ae77a38d99f92c4491dd09ec6792b70ee90c4494d0c40e3bc1c389f0e232e331766669c460d33ff072d5263173c133d23095363d8cb9b80f9ac244ce2694ec37c0330ff260993d8a79886f91a603e27099398ff8386f932603e2f099398998686b913305f908449eca840c37c16305f9484496c2ea6613e04983b256112f37fd0307703e64b9230895dbd68986f03e6cb4ccc7dcdd09969325f62d02069e3bc4c8076a357a440124b240db218205f950249bc82d3201b4c00f99a14488d43382d05c8d7a540129f7668901f05c8bf4b81243ee9d0209b00f21f5220892d4334c89301f29f522089ad4234c8e500f92f2990c456741ae46e807c430a24b1059d06792740fe5bdec08bc4ebf76216e966b8357f93495a6e329342f6e44c75927b348d7a33306208b31c11ef43bb5979b9ea6028d1ff8c66c3c7e0d8217d3d38af85b2bc4b1226b1f18386791d60be25095363dfe20b01f36d49981a53ecae07ccff4ac2243e76d2302f02ccdd923089375334cc8b01d3a5b11283497cfca4615e0298114998c446111ae606c0dc431226f13194867935608e9184496c1ca1615e0398ef6162ba0c79abfc6c97edb51d1241d2d06a58684799006d2c136da4c386522329698921cf8532b8a7244e6ad8348db30938f792c4490d9be60d28069c059238750e29560a9ce3247152534ed0381701e7de9238a963b4d03823c0592889939aae87c6b91f70163139f30fc7849c1a87af6d806e85c54ccac9794a667a4fa98ceb588c6741891c1fc6c3e3f04e706a4815ad4c3e6102cc1249981a07fb7e12302748c2d4585b3e0e981325616a1cec7b3b60ee230953e360df8f02e62449981a07fbde06989325616abc597f1830f79584a971b0ef4700733f49981a07fb7e0a30f79784a971b0ef1d8079c0e83e932737951c22997863441b223902cfe4078e266566dca4c68412b7c173f9414cca6926b3236ccc777a8d7a0b77d227373774639cbe93fe835052a73079dd709eee43ddd61caadee13c27423d3955cec9ad3124fa7e38b90f6652fe7f437c126fda69e303ae03da43c228a5c3bb35d2f830b9104ef843999407a728bb6d095c6912232aa3c43b4e5a196d07d8695261358eefdb02b087498525560534d846803d5c2a2cb1f59306bb0c608f900a4bbcc1a7c12e01d8f74a85d57883b50060a74b8525beefa4c19e02b0474a8525be95a7c17e026067488525b651d1603f06b0a55261896feb69b0cd007b1413f64033d2f8cc792aa3875f85e6be99d24035c6b6bf02a0b3a4816a8c227e1a40674b03d518e3be0340e74803d5184dfc1c80ce9506aa31d6fd19002d9306aa31aaf805002d9706aa31e6fd79009d270d546374f14b005a210d5463ecfb8b003a9f1dae9db00f973d6685fde3e0f4bec99f6402b44a26daa126b36f49b79d11b7abb6da9f9a531e43f58122de77d2fa40ed8417d0554cdc6c490173e7a94ba616a0be7da2a517381f4ef26a39eff435f61cad8753bf268c78cee15e806a5536836c8492592b89b34e25e716e0ac93c4a9b391ee1eb8142d90c459a192f331e07c9f24cef92a39df02ce8592382b55721642ddf97e499c552a39a703e722499cd52a3963c0f901499cd400301ae71ae03c9a1dbe90b01b5865176af28bc4ec64628eba992cb269c691ed3576c0c6970eda78f269d9959016930e8249d8e9cb4cab7f9a767a2df6f7e3cc4abfd629f6ee70b9fd3332e713ed9f6cd3239112fb8d8e357da6cb4f75db8bf96d77d8b9ee9b254cf91cb777eeb01f993aeca5be7daa3775783a4da35dce65a177dfb6345264e7457d867bb737c7fb921ff5cd30e9b92dfd2d048df66fa75961977402a591023bb7c77f3b47de657feeb65327f94f73ebf4f8e38b45a3de8b75fbedb4db654bb26c61e0326ea4882eff5b5bff011b6a9b137314cb81cb15f8e5baed6f5dfded75a59171fed39c881b342198ee0abb5368319ff2eac19c22bf0fab72cc2d48ad17cd989a8efc497fcfc173ba4c664c5069a478c09c065fe282f9b95b2193dfc295b715f6f7cca96e1b7d199f5390f26eb54731732fbb5225a73d55ba33bfb54b55992ce3f101dffa0cdf35c7cd19bc66915fb3c7cf6df6c738d9c0d7d0bf76f6b96e1f93e52728bd156649966d4cc8b34c724b454394dad2c8f83c65b0346765989ed3ed8f992b55cd29f1525f11254b7f30ada4dfb9c5b80e4bee1b25b7142c53e0553afdf460aafb9cd3edf65afddf18ccc976ec32e7ba7320a8cf1a7d2dd0eacf92e22ceb06f35da519f1675c536adf8f37ad7e5f637e7fa3f673a2b66e72d26573ed62916afb4fb283d6dcfeae597353a36574a47e4b4fcfbf4d574b0ebdb5635c5518c97e056c7fc7eaf77c7b94bc24b9f557a48e6cc24fcdb7a7f9f72ff7b5a26888a35256e68ec5bb79ffebdd714f1d765f4cf7f715e409f6c82737ee4efd78ead472ff8dfd1f7d2889eafabe0600 serializedProgramBytesString: - serializedSignature: 85fdf2aee4695d7a57082e85bdce22633c54275c61a17b8ea75820bd4d92b73cd91e5790c33a27b599a19cedf0f2490703be7d143fc212915f8d4fd2d9e50103 + serializedSignature: bd4f426fe3ed390c0f904a4e073e064e51c47a3fff9b89d52f4b0d82afb7f3d36a641e4fdb5e031703d225afe1a63a63f951db996f20f468682490345a648f0a programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/eab8b7e5f6d76be4fae1338f67a79da2.asset b/Assets/SerializedUdonPrograms/eab8b7e5f6d76be4fae1338f67a79da2.asset new file mode 100644 index 0000000..860da6c --- /dev/null +++ b/Assets/SerializedUdonPrograms/eab8b7e5f6d76be4fae1338f67a79da2.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: eab8b7e5f6d76be4fae1338f67a79da2 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d079c55c5f5f8e7d17bef7529c2a3eeb20d54443aacd26417440161d95d606561d72d082a2a56ecbd636fd81bf6de4bd41863d4749398688c26269a448d89ff3b7367f69e7bdf9cf7de7d77cfddb9fc7fcb87bd7bdbb967be73a69f996991cdac9fd878ebd772b694cd6213d93256ceaad916ebaf59d671b3f5cf3e53d797b05aebb8c1fa5d6add1bcfb252bcc97f46c7fa59bf8bacb33a566fbdd9c0caac63a5b85fcc2aacbf8bac772bac337e75bdf5bfc27a2ad6ca7a69199bcd16b345ac6fac770a11cbc54b75f25a8c872bd6cefa3d936db7ee5608a5f847b2c5adbed6af62eb4e9db8b7d9525a3db792ad16c1da6cdd2bb3dea9655596cc754262bb732731f107b30fbde4b1b73cf6b4feb7977fb7947fb7937fc3e75bcb639f349fef0bde6b0ffee6846e48f27e3ffb18e3cfb6b18e678173feeee7f2b9feb6bc161b93c81a288f83e471b09479761afab795c72129c29b4cc650202b1d66ede471983c66497dcfc9f0fb236c46b1dd401e67d906e8330c7cbb3db8cfaf0d0f1076158f6d3df1d8d68ec71657caf8fb583e3f521e47c9e37e52b6f54caf97e4b5d1f23820855e71fb3d368539366b7db3658d3c1f238f63e5719cd4adbdd4f55c701e541715a7e3a5cc76f21be769aeabe7f9fdf3e5f904799ce889af6cf9dc05f23c274d7dd2b13fa55307f98d0bc1b9c5b1d5da24b254bc77f4c47b47f9ee8536c7568f79c203ec4f2b779294775106e1e8e40947275b97d671f773297550f273a59cce52eec5e09ccbbdd467d85ac9f7f6caf33c963a6feb95c6bd425b4e3bc57ab2fd9d36bdeceb6da632b72d17a4d053c56d174fdc769172aba45c15fe29f6794c711e02e4f0f72ff1c8edea91db55ca5579444e9a7aee2f8f2a7c07cbe334d6988e47ad95d70e94c783e437bb31771ed04dde3fc079b7effd3eb9258ba3e99eb81e20bfdb3d854cf5fe0c796c9fe6f3ea999901749e258f1dd2fc6607799c1de09b32ff68f7a5c71626a79039c7e6dbae1ee860c9697f823c9f2b8ff3e471bee4dfcb63074a8f6476904a9722a90b037160e9d241d9d821f278a85b17b6c0a3d3a54da753ac8794791938e7c79ef2fae5e09cebbac4fe4e07550e2e94c7451e9d17d3e9cca40e9d3b01db48e7bd64f675981dbe8e39b6ec8e25f2fa528f6eb31cbddbcd06ef2a3dd2490f5276ac8f87b1aca774546c97799ebb029cf3636fe77be26febdd4ecab6fa81ebfcdd2bc139bf5f9ca6ae87b3449be572fa816ff793df96f97f2759ceb2152c31ede9dee5c7bee05a5f29ef57f2bd23586239a69ee361bb0a9cf3fbcbd30cdb911afdacef769e9ee4dd95cc9dffcc70eca1ed3bf2da2aa94f7fe64e5bfde5fda1ce3bb12a796db57dde55e972947c07d4e7c4df967e5d5479ba461ecb98be9c2d051c647ab45a858ddf1efc8dbcb636c9b7cae533eaa8c27d9823a7633fa9bbcac72a983bcd789fe5d7d6cbe3d1f2b8591eab9c67e39fca6b95f2b849ea3690b9f266b6115ce7c741f2fed5e09c3fb7c191dd47c9dee2d155179fd59eb0ebf280647656633f3b7a8f3c3fc666db75b7e4e66d531cc592db6fad0cd7108f7da978af07ef6f95c70647e7b11fca6b75f2bdc1e0f963e5b52c29fb1a70ce8f43e5f5dde05d7e1c2eaf5f0bcef9711873a7d16176d8bbddef797fa8e7f9ebdccf775775b96df2b8dd1dbec6f795bc9152cef5e01cb38174b91f27658df0701f21ef9fa0e1bec3b9a67464273a3a8c536dd29c34754866673b6d998ded9f53e4f154799c0664f7943a81b66d639df864708f9fcbba313b89b9caf2a4ba9c268f9d5384a717788e1f4f0f10fe64f7549fc62e19b651ccdd26e4e7969df59c9a44d65936a7feaaee78b6fd4e2f593f63e7d8f77bc8b296a9fce974f98dd10eebeeaa6c93fd0022ef56e13e495e1b03ae9d29af8d75aec594dd9e0fdee361bac173ff02204377ff42a083eefe45f2fa8db6eebd543e76b1272c2779741dc35cf930bb2431acb1319e6fdfe4232e559d729c272ec7d9f1d2bb5d125997e9e3b28f2a9f2ef7c4e5159eb81caf894b55c79a00e24da6a1d8444dfc66030eaa0fe22a242ed5fdab815cddfd6b800ebafbbbdd71d947d537ae45e212ea0fe3f23af09df6e019f8ed9bd3884ba91f93f9b4b65d70a33c8e96726f4943aeb2a30d49e4f6f3c8bd350db9eadb3727917b2bd3eb9bc9f794adabbeac1ce6b6757e6ed96ddfaf93c8ba8d696dbd7f2b797e3b73dbba4adfcad627b1445bbf43decb75e25fb0e0d7f258a2ade7033b9924efdd099e81b6aaeedf05e4eaeedf0d74d0ddbf87b96cbdff5a79fd5ea6b775a83fb4f5fb12c32a9e81dfbe2d8db8bcdfc359f12d60ee7660818c1fa59faa1b9c0db8eabef3802d7fbcaaef3e28e5154af9b783737e9cecf9aeec1f1c906fcb19982fe5c8fed2010be475d5ee7e487e6f853cdf2b9fabf73cf7b07d3e41b54f1ef5f057ed3a652bfb3bf6d6189647c03d1836651baa4ef2b8bc7e2088ab03c0351857aa7c4bc5f509797cd2c36f8a94b7079cf3e79e76f49fa0da774fc9e369cebd1eaacf4fc56f27a0c7337a5b11ba8238f35d4752617e364598fde44953993b4f9a6adbc1a05d4964bd289fb93bc9332fcbe32bf228db49b18398bb7da7eaa7afcaf3699efbd3e4fd9b1df67da7033d946cfece1d6984ff75797c431e5f93df3998b9fb0c55bfb3ae8cc8b41e9be9bd52a9d374b7fd88732b1e86a87e3b658b6b53d8c78fe4f14d795c27e5cdf030989184c1e834bf95245cb159ccdd16537dd36fc9f399f2be2c6b62733ccfcf91cfbf2dcf677b9e9fe7795ef513ff589ecf753fcfde0172f8f94f9cb0c564df197b175c53fdcf3f75f86449a6b1f9ee6fb3f798bb7da7da7045ccdd265771f996e7be2c4f638778c274a83cbf1b9cf3e3028f5cd53ffdb6e7be92bbd0a3efcfe451f5377ce08431fb3df00ee0c9de77cb4c6ad33f9132163177df033fb76c7a58b2fabf7a57f5532f9132ee01e75cc6745bdf6125b8acd8611e7e8bc1757e5c2aefdf0bceb9ec3d49f47b573e5bec095bb17cf7e334de55fdcccb3c615b66cb183ec80edbf09c24b27e2e8fbff0c4a1b2592eef704dbc1e0ee2939f2f67ee7e9de552079977b25f32bd6d9778debfcffdfe08f93da6ea12bff6e8b682b9fb0a7f2b8f1fe136c97ee7d1fd08e79946fd7ee3d1ef088fde473277ffd30a709d1f57327719a5fa957f2fcf5779eecb3e65ad2f42b234f2b1fdec7eca07e48ff2f807293f5979944cee2788dc3fb18cf372f6a9d4e9810cdfffb37cffc10cdfff4cbeff5086efff45bebf37b3f763ab992b1f61ddc1757e3c4ade7f189c5b6960946ac7f50071912c0eba7bbea3c6001ff12947774dd6b5626b98bb9eb146ea2afd3f46a93abff2e73a28c5b7feea91bf56ca7f149cf3fbbaf183bfc9e33fdc325c79991a5b286589f981cc07d8df9d7b392acffc02bcc7cfd5f8b4aaa326eb2b4d664b5f316d9b7db477fcfb9814dcbe66da365a7c8a4f39ff64ee36dcbf99bb0df72f79546d6939b6145be7e1f0adbc5ee67c2fb60e5cd3b5cf52e9a6bb26db5db172e6b6c3723bfc63e498d598e9cc6d879b527c4b3e17ab00cfa96fad07d7be93d73638d762ebc1357edc28757b0c9c5bba8ddded915b299f7b1c7c9b1f8f96d79f00e7fcbd61f27c93bc7f8e47de66a0d326f94d5567fc8fe71b55cc2987f8d8912a873e07f7db033dd5352503f6a3548123bffea48c8312f73753c681ee9aecc78c6df1c4f7163b7ce3f2ddcf89f1307eac63eefabb4ef677e059bf7ac9f41babf6e8552df5fac8fd9c182fe2c71399bb1eacd2e9f12974189de673ba6bdfcbe383fedf8dd530779b428e6bc58ef1845b8e7d8e97fe9fe39ff3e8bd37f9b7955cf65f795eeb8ebf981c1b65ff03f2f8fda77099daef28bbb80c9c83ef0af9a9da294fcbe30f5246837ce76970ce8f60bc963f2e8e5bc13565dbc7caf79f61ee74be0d3cbb0d3ccb8fdb99bb6f66bbcd3ffb4a8f6cf5de71f2f967c1393fc6e4f178795fc59bcae7c0d8a778465de3c71df29de7c1b9a5c34439fe9d5d837c4ba58117c039fca6ea377e119cf3b08d743f1f3b593ef71238578ca19c973d72bc7aed0461dc2975792a85bdaaf1eaf1e09c7feb3c3bec133e728729953cedb50fa4ec16f2788a879b1a077e3f03d97f97324e65ee76e8a936a31cc9b2b1fcfc32c537943cc547d65d63a749f9af80737e3c9db96c3ea6fa4195ed9fc15c659c38b7644e5ae29173a647ce999e78d925efbfea794ff5617e29efbf66c7dba47277785286db75ad754c847b3eab60a5ac86658b881bc3d29fd2a2de4c3d99858b6ec37ff19fd1e2b3f56cbbf56a856e46c932315fa59ee5b15ced8c92fec2775a7d7d96f85d6a3d512984be1e4bf8c4e3099fe0ca5559ff2ac074983aebfa3c319b864f88a9b4ee4c640bac237f6b2d9bc4565affdc52965b9fadb20af10a5662fdae11f2d65a6a273e992a487cea8cf79da5964c7b66cf66eb8a025a639d57090d8bc5efad42d30aa17d9175ad5ecc33dac236b099d6719bf85a62d86badbf75df2c91c8f43aea27f860d7ed69442a9a665ba1e1da670b5bfcbf18698e18e1e8dbbc1eb39361ab6c91eb9d9d1013ffc7d0ce6478475b91943149208bb9aee5b26c7e2a3a5283863131847afbb67917b2fca461d193e1d13d5084c089e1e55b177eb57df56177b776072d8f658be1b5412982960c2c9717175ec27e82d0ba75ab1caea8177f4c875f4c8f2b0e11bffd5ca578ce7f04b411859f3b02849b408995ab2d0185e732a17c9550cd1b9862eb89064b9c52bda4f1ce7271759198d479acf8e4a6c6bb09f19bc395692ba228b1004e154c2c925ae82249f45597344b1ac1a6a4268fa6768da170a2295bd4aafa253166ec5ba2bad552d6b95472abdffbc5849d39c3ef7eeae1c55b4a2efaece3d6faf8e920e22793af6231d45217431dc24e46a9cb8d64f1d3b1315c4efcf01f3dc34e888da7d20123d84a47b063d836ceef550b29a5d6b3fe197247d771deac480fb00b6284a955c010b6d620cce108bb6ab462addb7bb4e20a2192dbe822a753f314d29919379fbdd0d783a0356adcdd9396b17e4dbbad8e9e70895e4b4a4fb51d8bad46c2a1d6bd52eb79bb40e3d79758124bad6f737933c4179cf6a6fb8de464f978d2042f592dd59e82ea48d0120eaa1946bc9d86780eb7d75e1a3310799c373174c713437b2c99f50e9acc3a6092fb0495dc1193dc37a8e44e98e47e412577d6251bfebc182ea74f364e978bfa6ba6f5ee462b305b453b9ad716755d34c9934bffb493cb00915cb298aee3c89f465832e9a28b3b7e71a04e496fd40dc0a3ae2b26785040c1dd306b1b1cd4daba6359c69026c8327ae84c59400ab37a385b98c83a21c77f09cae7370dd370102cb4069cc5f455c4547a60e6da138ba2614d1045bd74c279863c9c25568b7fb07e128477c285f7c6341fa1d1fcdb992d7c69de074b132383a689be98e4fd824aeea74b102271ef0c396fd777c1cf13ab4955b0c596391ecdecbe53f5dd6ad16fca35527db04bade37aa105bf5e26cd3af9b79227b6514cd3561659d41c6d79d05ca1e003bb2d44628f8bc4ce27092db3aedb430673440c548a2f4dd46ac3bf803daf582c647ca1ac0611dbad9116fd18f175b3d860d9587f2ca719abc9693ed4656349729a0158921d1734c90ed449e64976bcc65673b8adf299621d44619ef09d31f87706e9b20651801ed7ac5983ddf6e3f2d68b51315b9ebb5b708ef52ddb704aac676aad6f5448230f9219f04435d8dba990b4e4cd16c9615a1ac9813254580218acb324de48e66e30091db9bca8586ab50967b13522191e232e734a76ec568a472bd971d6510d7025d85b5bdcde86e8b4e16d0fde839cb2aeda13173c14139c1b50701696c6f382a6f1613ac93cb7e10e56416b58c331b50b82aa3d02cb510b3539eaf7317f39ea484cf8648df0a75af813be1f9614a6a4632349ac7a1426787f5d1ae36acc12fd8d59d6ff6aeb0d5e2b2f15a93f4b14864e6e9065a5f54aeb2f5e608f07cf575b4fd803ca7ef41c8d19c501418d228ec5db819a78fbda67bc8dc1844fd5089fdfd29ff0b158dc1da48b3b9e4df17283574b36cab2cd9d1b6689a1fd2ce1cdd120facdca45ccd58978cd62c75b19ef0eeb586f3d9d25ca812a712f4b2c7d5a2bf25a3f713a0ed37f9a4eff0e40ff2540433f5f1caffb22277cb026df8af9ccb726e884f38acf7486547c66b04c2a3e13316c3375d878213ac7aabef09a6b8378be58184045635db9bc890ac86c8d5ed9a22dbe853567858cb7161a44e7c1445715857fdb19630d52f19ac5122b5eea475ff1e21303e362da7818da6315ac1c2c539da3c954637e32d549585a988ba5857919a5855c9dcd892e9a9a66b5393c452d15b279ca0b5ee1e7eefa2dbdad7fd187949f866535958ee3c472be7562696b9b5c1dcf4cf9f0c73ab086b50d5f24097d9a281269224ccdb174918795da87684aedbdadfd95daf93a93157d73b5cd6ab2b3858430ccf6509dd98a3ec4c23422bf29f51c2a5c24eb44a65adee8acc37f868ab58a6b45b159615de7192fbc3f4eacf3cbeb4b7305efcd823c0f5fa968f76246be401879d8e1c40cbd002b00166a0a005fb5ea422c092dd224a1ef7d26a1c998da8b83aa3d05537b8946ed13daf8537b7f4cf8611ae10bdafa137e804e38cf98b9e7459016e28198603e249550dde4ad60d54e28f3b414d789b6826aff958b2bdbaddf55d6b53221224bb8bbaa317d3f5a4ec5d89668d876f3c9f6200cc1b2806ca7e9047761f6e2a541c63f0fd609e6f5afc31952ffe25343fdd7bfa663d88fd060bfc127f61958323f3268329f89495e1954f22c4cf2aaa0926763925707953c078bc4a33491c8dd5afc44e25c4cf81a8df0129fc2e7610973ad2e6fda8ff126b75349b59b4f4ebf46295b2fa4d45a7f6f95656eb9ab7f84f77954ca46b39f743e1fd3b354a7a73dbb867b2ef13a45a9e843e35f5ccc36f9fa6a11867e9d06fdb93ed11f82092fd308ffd4a7f043315ee53a5efd52c46bb9707871ae4eb2aefae1b800d3a642a70d3f75e2cdcf77166248d76b90eeeee00fe9222c101b7481e0e36836be032c648b44875fa99c19b45514e3fe312ec634d8a8d380e76c0b1a2b064b32ac162cc190566a90bee713e961588e7c74d01c7929a6f6265da6d9d19fdac598da5541d52ed149e6b58ecd0ca975f09e41ffb58e65d877aab1efd464f49de518a96382923a5c27994770ad2682a777f217c12b30e1751ae127f8147e0426bc5e23fc259fc28fc4843768840feaec4ff84a4cf8568df0729fc25761c28fd508bfd2a7f0d598f06d1ae17b7c0a3f0a33f2ed418d7c0da6f6711ab57b75f1a7f65a4cede383aa5daa919c2d1cd1c274c2f47a3ff973c2e48b2ea4e73dcc9761d0395fa6fa3ed6a5b44e172fbc843e51a7928fa2bc0cb3a69334d6f4b1cf44508e093f59237c954f53adc084efd408dfe553f87a4cf8291ae1ddbafa13be018bcc530346e6464c305f7121a12e385e5867b548635962334c3ee9758bdc7b932f3c502106ae4b85ed3b1d4e6ae09acfa2ce92d65b2b6dbacab2f689d6553f5a57625a9faed39a8fbcf24e5ca7de6c3725ed6688ceaf308b8d96b5eed1bef43a1ab381333436b0d7a7816dc2027d66401ba8d2e5b3c2e9b192349fc5fc484b44e73d5ff560bdb094cdbebd4e93e7c9bbd2ce93cf127932f727a0d315cbbf37eba29bd7adcf6648dd9a2fbad281abecab6ebd05b3d97335369bef33dfaac6849fa711bec2a7f01a4cf8f91ae1a7f9147e8c4e38afd6f0ed3b02556b6a31b52fd4a8dda99b3fb5ebb04ce2a2809944bd4e301f7abb381dc1499c231b308d2f09a8f1564cf0a5ba42c2eeec4fb270808f2f1f8b25ddcbb0a4cbd763f3df2cde8659d2151a4bead5dd9f256dc7f05da9c3c7870866c8f27e23b3bb6e2b99bdd976a9f4c0e7434eeb5dddbc5522372cb5f2423efc546105c85ed3a64ef476d93d5b592c2e64f23b63acb361ec20712f57de73be38c657241d87c1bb4a03ef4a9ff08ec7728fab83e61e2760e9f09a80e9700716dfbb03a6c31331c1d706147c1226f8ba80824fc6045faf337d6e332b1b8dda36dad53e2bb43b3163bc41638c9ffb34c65330e1376a848fece14ff8a9585e771396d7dd9c515e779aee3b3c9ddc924e642719a13d1d137c6b40c1676056745b40f33c13137c7b40c1bb748279dcf3a5f1bd5eb95c801fafdcb3302bbc4363850b7afab3c2b375c2797ecb17220d94df9e83a97d9746ed2a9f6a9f8b09bf5b23fc429fc2cfc352e63d58cabc37a394793e668e7c738084dc92fb84aeb1fef15e49ee6fb2812d119500eeb9be4ddca911dd07bc51eec7762fc0b4b85fa745cf462d72acdfbc7ec7c72b6d8fb1cc75b810d3e1019d0e3da40e79d6ff32d140ae1755a0fa001a5c8469f0a04e8376202ef8bc32de84f5f3b58b31f37d4863beab7af933df4b30f3dd8b99efc31999efa558a6f78826d36be933d3bb0c23f4a88650bfdefe085d8e097f4c237c8a4fe15760c21fd7c5ad4fe1576271fb0416b74f6614b75761c9e1a96459536e13674d57635a3c9d3c6b9ad48459d335980ecf24cb9af29b306bda8d69f06caaace970f13d7f7360aec5ccf7398df9c6fbf833dfeb30f37d1e33df173232dfeb31647c89ed2015bd1b303a2f69e8ecf549e7468ccecb189d5732a273131688573581e8d4d75f206ec6d0bf1610fd2d98d6af6bb42ef7a9f5ad18fa3730f43fca08fd6d5820ded404a2553f7f81b81d13fe9646f8489fc2f760c2dfd6089fef53f81d18fe1f63f8dfc908ff9d9871f26dd4d0622daf898bb5bb302dded569e1146bb94d58acdd8de9f0539d0eaa582b68c262ed1e4c83f7741ab4674eb136470c8256fb74a4bb1733e09f690cb8577f7f067c1f66c0ef6306fc4146067c3f16880f358138d767201ec084ff5c23fc739fc21fc4a29befc817a45c7808d3fa971aad570df0a7f55e9d70de3dc2f78b0ad43df230a6f6af356a9fe653ed4730d8bfd1a52d3ef495dc55b6c47ab44638b36e10f94eadf024b76744960b278425cc5ec7d59e4dcf0726cac53cfb8de25ce59ba56c9d741198245c04d44cfcedcc5ed22f4bb8e8d8cbf56789e18f72b93ec32671a54e3c550124eb9d102aa53305745bf0ebf1fe281641bfd544d0a53e23e8314cf8471ae18ff914fe389619fd0ecb8c7e9f5166f40416883fe8080df417882731e11f6b846ff329fc299d709e58ff984e6694a4ebfa698de06cb15255f3788424aef3d5b41e217fd2f1d27a84f08d36937b8404d715f3087906b3a54f75a9cda72d3d8b15117f0e5a443c8749fe2ca8e4e77592795ef89774ec3f49a6f982cefec57a6aeb9bc5fe83acc097dcf23f4fdbf2bf10963f3689e5075b27501f132f62c6f3d7a0c6f312663c7f0b683c2f63c9f44b4d32ed36d85f327d05d39aef7c955025e24b50cc100dad0a31094a377d2e4b5497b27c7a3abe8ae9f10f9d1e7c051f7ff25fc3e47f1530765ec762e76b4dececf2193b6f605aff138b1d9e4636ca2aa28a8f8ac6d56532f543fd1116c87f690279ee107f817c130be4bf7581e42950f946d8f559b753b09f60bd857df91bdd97796bdfde5026bb71fdf9ecc62598165b09a29cf99dc6f636a6c1b73a0dfa6a355820feaa17eb55d8b5fecc6629fe18d3e53b9d2e03d3d4257181723f3abd8319de7f348677f7507f86f7132cc0df07cc13dec504ff37a0e09f6282ff1750f07b18e71f349cdff4c9f9679870be125b825742963fe1ef634878211104c9073ac13cf769918ee0248da10f7582793bb4650c6987b68a65d20efd3986bdb506fbc6e1feb0ff020b441b2c106d330ac42fb140b4d304628fcf40fc0a13de5e23fcbd11fe84ff1a33cc0e314d76cae78d2e657051a27251c75619795cf8aa56b22df2b77bce4b9638b38b9ff162b1955a51eadb596e1dab12feb0750c2e3a60772af1e9f3359e9a81fa8ef292e5f53b959d6789ccbcdca73be26f30161d752cf8e245706543bb96e914b08ec7efb142c32ae6cc5bb7f5e33aa792c0fd7dfdce13fa2d66309d340633d2a7c17c8425a9ce5892ea925192fa1d1688ae9a40ccf71988df6331dd4d17d37cc685be8b74a5ec5ce5f3ac78ebc25e102b599cc693de1d235c68ed6e55c7aedd29a05a5886ea4275dfab177655af4945eb8486d5a003d6965d2d5ba77eeceb0f1a7ad9623df4703763b4e7b265b64d48f7185f64cd1dd14c943a1e0ea217a0470cdb2931b90e58fbfe63ccb87b6a8c9b2fedecc7b8ffa813ce7771e965091fa609b308b7f70359f807fe847da077137de0130c4f1f0d9e153ef17caa13ceadb72f66125ee1dc1a10e17fc684f76b02e19f61c2fb3781f0bf60c2073481f0cfb1fc76a02ebfd54a4f921f7d81491fa493ce6fd825737606abc8fc1533cdc11ad3fc7a943fd3fc1b267c8846f892d1fe847f89511a1ab009f2774c705640c1ffc0700cd3e0c8f789e32b4cf8708df0c77c0aff1a133e4297bfc7fd09ff27267ca4ae66e453f8bfb0c8dc4f9796ea597aeb34051b70b63b70d6b886b0cd1e7efe371645a3740598cf28fa068ba2d1ba28e2be37891e007e02f3adee7bbcc61fc76afc6332aaf17fa7fb0e5ff8646c3af9c80e5cf07f3060e374c078f193ed0bd0f798fcf13af9f6aaa08916ede78bffc5be3841f7c53e5a1358282c5d2d57e7dcf167e9ffc33499a8d3844be0b57bbf25c10f9aaf648bfd79f8226861b538926d779fbcb5911de3bd356e18227d685b1b39a2b5d13b2164c9be8fb534584c133ffc74528cd7bedc2a1db27067dbdd83de6a911035adf1a889e93ec0a3325767007cca2ef704b433f82aebaf7a19a84a9f86d702fb6e9eeebb5dd1ef6e9185809f6fb7d47c3b7b48d8e6384b34f66b3330c7fc182fcfdd882622c658801863b2afa39ba7ebb889fda7d684c8cd7ececef68ac58acf95d695c5a20bc5ee90a9cb806961ccef261c9305d9110921cf543f74bf755d4ae1ce04536241f75bc724ef1f54725b4cf2014125b7d349e6b5ad03634db0e73696294d0dd814ea80f13828288f8e98e469412577c2241f1c5472674cf2f4a092bb6092670495dc15933c33a8e46e98d1cd0a6874dd3195670755b9874e32af1bcc4947e524cb79f4c4549e1b54e55e18e5790129f7c6549e1f54e53e98e4a2a092fb62920f092ab91f26f9d0a092fb6336b720a0cd0dc0545e1854e58198cd2d0a68738330c18b030a1e8c095e1250f0102cf60e0b187b43318d9706d4380bab68143741456318667325416d6e3826795950c923b0285c1e300a4762517878c028dc0f8bc2154d1085a330d04704053d5a27993f7f643a3c92f804c57582b98bddca74047f810b1e83c5e0aa8031381613bc3aa0e07158ec1d1534f6c663b1b72660ec4dc0626f6dc0d89b88412e0d08391b13bc2ea0e01c2cf6ca82c6de242cf6ca03c65e2e167b1501632f0f83bc3e20e47c4cf08680820bb0d8db1834f60a751d5459d6698caf711cfe0c18dd0855d3ce84a94c272ee238b1c9585c1c1d342ea6e824f3f59937a5a3f259b8e0fd31bbac0a68970760823707147c2096f6b7044cfb53b1d8ab0e1a7b07612c6a02b29886093e26a0e08331c1b501054fc720d705853c0353b93ea0ca3331c10d0105cfc2da005b03b60166631a1f1b50e33998c6db026a3c17d3787b408de7611a1f1750e3f998e0e3030a2ec2509c1010c52198c63b026a7c28d6323cb1095a860b301c2705c4b110c37172401c8bb02c6e67d02c6e3106fa942600bd0453fbd4a06a1f86a97d5a13a8bd1453fbf4a06a176392cf082ab90403726613005986a9bd2ba8dacb31c96705957c3896c8cf0e98c8576082cf0928f8084cf0b901051f89093e2fa0e09598e0f3030a5e8509be20a0e0d55832b9b00992c95198315f14d498d760922f0e2a792dd60abc24602bb0148bc24b0346e13a4cf06501059761adc0cb03b602cbb1d8bb2268ec55602cae0cc8623dc6e2aa802c366082af0e28782306f99aa0902b31c8bb03423e1acb8cae6d82cc6813c6e3baa03caa301ed707e4b119cb8b6e0898176dc158dc1894453526f9a6a0926bb0b6c4cd01db12c7602adf1254e55acc306e0d681875188bdb02b2a8d7f5470fb34e637c5b3c1356245b297b979bae47fa761d33ad03e59e1877a0cc667e5625cb445fccb1b24117ed3c76ee4827dab9f688e0ad3ac1fcf4ce58a2d3b6faf1e3b47d2c96b3dfd50439fb364cf8dd4d207c3b963bdc133477384e27993f7f6f3ab19964e4ee789d603e79e1be7404e7e066720226f8fe80827760901f080af9449d643ec7e7c174544e32c7e7244ce58782aa7c329618f7365162dca9fb00b7a787d361f2092ef8140cf62301619f8ac17e3428ecd37405de70eb34b68c35cf0c015560f89b0df058da85d8e3a210eb9f10ba7474c00aa6d3b11cf88926c881cfc022ffc9a0917f26a6f6534da0f62e4cf8d34d20fc2cac66f94c4c331969b6385d6a194b319bcd0e6d5c98ccbd05a71df513c5b4a522ebfe62ebce1661d2fc8abefea2f317e04f43d3e2865fcdecf9b7fe7617391b0be5b3ba509ed118ca65564d8a273a3b816e167f17c965e86bc53c5f3b8116353e39a7712d40f76a43b5924731b3f7df9ec51a44b8b85c373d47027fde9f1e98a412c6273c6d1077dd4c6162f5f25e6ec9f13bb9ed1c8cf473983dc12fda61cab3deb169555b99e21acb36ec5d47edd096c8f517bdda3aefe2d79bca9ecec542f9bc2e94d33ca184cced70ce65f65ed4a51aab77c710bc932cadc0b7fc84ec3c2c642fe84276705af13743cc92af646a1258f09873eef809dbf958d85ed485add013b685227636ca90f1b36dcd16920bb090bca40bc9b921e767ce3b7c75a92a4bea76c667673b8b56d6f9b072c80e0f052f4b1a443503e67abc82d57479db8518f59775d467a4953616307b63151372b58bb0f0bda20bdf0242abe2578f119fe1a1b2abc395e2d395ec38910ef5394926b17a3116ea5775a13e2869a8714d978ab0d8abacd96154a531bf5a260925a68bcc63f3122c5cafe9c27584ef9a5db1b8e3aedbe924d8d79634e603b55679c09b3a416a8299c4f3a5188fd7753c0e0da5cca62ecd2fc3c2fc06564ff16703ca86f91a1c6542108c67bf16e12764976321fb912e640720215b26d26795ac9bd84d6dd56a592e537179426cd0b451aec042f4a62e447309735f15abf61213eb98bdce79d385f44a2ca46fe9423a9561bde4ba9cc21d02b8a21367325fc472ad680d955925eef6260cd55558a8de4ea74de0fe2eac212c13b1506b3dcbd3e18624a59f5b46d385ec6a2c643fd6856c56ca9c33bd56019e87266bb3669a535e8385f11d5d1827a23699688bf3842d72ebb35736dd22525c91950f354d5b6037a6f94f749a8f4c512b2db1e28282efb59896efeab4dc3fa50d1589de0e5e9faa12abd0ce619bc5322389293a5968324f13d761e1f929965ba793268a840df19a6fa92c955285873ea4d763217d4f17d215cd5c6fa2ae51dd80d1f8998e460561296dd7bf978861810db265bd5c9414958da576d3f4256552dbbe11e3f4be8ed332624e780f859fdc22130e37611c3ed0719889962bbc27659df5904a45f6aa77c96ba6a94ba8a608e1cd58083fd485b0c86708d55ee2fa18698ef0de8285f7e7baf02e25b46c7b431e7ff5f4a620702b46e0174d557fb7f3b619a0f64e1faadbb050fd5217aa793eedd8d93cd8041bbe1d0bebafb09e4cbf3138573c91688ddefc357db97ec2b7070bdfaf75e13b30400bb35e94bcbc6ebf5ed66bf05095243ceb274c776061fa8dbf38f3da27dc6f2e552aa32c29efc4c2f75b2c7c7efa96605b0cdee523a3c95b394d5573bc0b0bdf47c97bd7fd84af38a3f051c6eadd58a87fa70b35be4f6b49a3b30c4c7dcebe39bc546dd0d6e8326b55df83e9fd7bacde96bc55cdfb6f9688ba4c9da6344b67f48bd701d63761bbee5e2c847f48a757473f9a954efb35cc11adfbb0307eac0be3fcb4c2e81db1b37b1f54989b33b4f763a1fda32eb4f99ed0ce1275ceadb22480bd41ce4e315e5d678b5487b5359df7fc84e2012c147fd28522d7778e512976312a9763d3bc474e3dd9542178100bc127ba10e4f90c419d683bf02d39371286e1212c0c9f3645be5d4ea6f75e4cef3febf42ef0a97783a8bdd9235db436f430168ecf32f735986350cefc0816bebf6035747f2393764d4f39d2da35213b867868f8f53291df956bc6dc61aee6274c8f6261fa1c1b93d4db5ee2dc8fe66a733c8685e80bac172fdd5191e4f585745ac1fe5bca995bebe31887bfea38e07baee3ed48b5987f53b5369ec034fe9b4ee3512c55afbd33d25f21aef2d2a7696ada4f629a7ea9d37472921cdb6be96ecd6b44eddbe9f5a5482f4f6161f97b3adeafd8a850aa7c3bec11a1a7b150fe03f3a4f197cfd97977e2ddc49c5aed2b82c767a29419a2278eb78ffd84f9192ccc5fe9c2bc9f27669d6f52a7a667313dbfc66acf585fa457e77952e774eb0699f6dd3d8785e09fba10ac6274fdebaab728d9081bb4c074539e7ac70f95e7312aff4ac7bb447dd14faee2840c4b714d939bbc8085ecdfba901dd9ccf1ed279e334d012f6244be49c7b7c06f5d2bf8587ae671ff1216d26fd3c9adb01e0bdb0a0a597e8af0e97232fe969f10bc8c85e0bbf4db69fc9bfedb6976f8b0eb4d1543af60e1fb0fd66b9dbc46e36c0be4d5516dcb84a72f6c4ba1646932b3d2fe552cd4df67d2fb6bc76ab16853da6db732d6dc73615ec342f8df74529e9e7066f584d42d9cb6d6bf588c4fd49c23a4d87de9d5e21d5e2bcce63b51c5721a4b86898d39fe4457e9e05ce7dfdf6cc5064f13258d793b9fa89a5cc2ff2c386d5a30fb67b4dc14d02e1063eb997722ec2c21bf4ae637ca5a270a42b6cf3c9fe03bd1aa05568ab7d494de54a1d095721341390743973a4cab9129ba31b1df30946591e6ee83fb5c487fe0b13a4cc66a8b6c5e798f8dcbd09a526bc12cfb69d3526f43ba7dda9dd4a1d3dd16b048f61ec4bacbc656f24eca945ff5aedaedfdea042140d505538a5b0692bf4e5c7f616ab643702d93c32b5634b46ddd2247c4062532be88cd1a1133f6eebdf81c9e2860fb552b075b0b4a6c7cdeff6c5155aeb1c0d92e76aa98c600d64502211f1b54085b5222e40b0acc4d321e150558978e7460b5a284c5b76d56dd26f345f77fb180552b04965b2c364502d8fded1c60ad2981f562f6c6b139ccf1148c32b86e1d1d706d28c1f5d080e302f9c40deec2d120ae964702da5ae6406b4b6d6deee439d7fa5d29ab206a56896d75510017efe4806b47098e6f71ce27b3a45b864601dea5a0046d4f09af2348aa8b5d3d7c51c03475b083a90325a6f60093e3881c05447bfa3a883a5222ea244262d7bbb8472cf4018802a8e9a01ed68912541b614b7591cacc5b7576e074a684c397a85bdcd8925423cef68cb7a5a2746c607c360b2f0f97c83ed928007c0fe4545d2801b602c9300a603e1de180e94a09a61dc8c2b99adc3b210a80beece100ea465dc645b309dd0bf47475a746b4588c983aeba945a319b31be43f3dc24a666aea6114003dd5cb01d49312105fdd55b5f3e6889eab32ab4c538d13ee0b5f2e9a2e4b8585950b7babb23e180588fc4741ec450991af740ce1f14e67be1c4945e3c2dde5116f01f602ddd0bd29517696799ab2b7edb2b6b54c74d24401d563206feb1356170def71804e30aad7214ab5fa6fda3ae0fa5277d14070705ef20cd169c3c7a59d19d851807702e84ded47ddb05625aa33f5d49e141d0550ef810a6c7fea018e8522f96df2cc6b986d3d5e2bbe1405606b5b38c00684dbe5ec76eb2b8f587e5605468606d20f70f0aac46cf1e92857345e6bed401b446d6d73c4187683f8b8b3e4a1b304669d5587abb4be1705701f037083a947b9e1cae3511c46e3be650ad610fa415bdb19a55a8889763b602ab0b2a1d43daf4b2d68b358faab074701e02e50c9cda204d855084836b5380ab8de13c3206d5b7b847b7de433f758f4c718f7adeccaec2e801a71b55e56575cbe967c529e719a0f6b017c25e3197707c553160bf1b4fd30e2bec7d0e3197aafc5d3aaa4c703f6efc47db824c67d9518f1b4ab7e715ff59d7846d96fdc578f44dc577d3f9e96bf58dc979354dc7747804e67dc2d269e30b61a4fda7a8e6b0785e2da3eec38e203104fe2421147060ce2293adde2190d83c65d637ff1a403f2f194ae93f134cab3383266144fd38bda9996a09f4e90c3a7250c6ff1fff78c811cab4066233804bed314ffb1eb3223a92b83dca6ed0922bcc449beacd924ab8ee1d16150820eee4ddb542d46a74d7b573da74b3a01cca4ae33007859ed6712cedc48e25c04708e3209675e24716e02384753f79bae9189d88dd52e78f863d1c3b79739f8e26158e306d41ea1fa6b58012ba4c3d9890ae74300e7189370e64712e7b500e75893704e8e24cebf029ce34cc25918499cef009ce34dc23929923897009c134cc29917499cc7019c134dc2991b499c6500673625cede1267996c957b5748b155b757dfc8a103d99a0a240315f61c6aef37d5e3946eef1f7fbe563c1bbdaafc4c60a19328c10e65b03b30fdeef028c3cd027073a99dc092b5daa1385ed293a16c4b85b21bc800f2a8871ad788da65e8edf59e54f0ea811de687016fca3ed4d9713c80574009af6f8a32dc9d8849dbe664c9f8bf0066a14930274710e6ff00ccc926c1cc8f20ccff0098534c8259104198df0398fb9b0433378230ff05601e60124cc2911f3298df0098079a0493b0554e06f3730073aa4930a3d8c2f902c03cc8249853220833069a8bd34c82b97f0461b600300f0ea31793f71161ee5521f407655181fc1348e2d329418e9520abac87aac451f947c2edf7d6f8dac48fb4e398aceba306d8ee8c303a8e15f24ae9f299cede17512cfb8702b03329c1761060370a5f4edbb77483b0cae8f5247502c97f56737607bb579a27b4be1d54284f01d6379b12e5e8849cb454089bcbd4e69e33adffdc3ab78a018b06966c91f86826f5b900f69c30ec36bdca5414510e0659c05c4a9443345940ba9b4a91a23d8b0aed1460a5f3a8ad7486983a532d270cf035fff908e6163989484da3b027a744afa06a05ac747e18abd94eb2fe6f961f2f15e53bbf1ac2a81159423f13202c0a03e1e47d0ee1f300e121f48becdbcd4e75f46e3c1f5517846701c443e957bbad9213b1b818646a6e04dae93d00b40526cdb620f5d124b3c151a0645e68124e52a742329cc500e722937092babc92e13c06e05c1cce5ca09cf0dd63c84ae91d20af5c628e8f5b14fbd9b381251e16064ae8e4bac06ab9cc9393a2d7333e7939846a0f19ca9380552ea51fff81fd926bd826816ea698ccac367ee7f3c1f91ced8425859a0ee6002a989d01cce2303a2deac5d20d758d03146aa6b73aeabadc2651fa7690a1bd11a02d09639c32ddf91684f927d96c8ba900e6329360128ea093c1dc1fc05c6e124c427f3832987900e6e126c124f4d424833906c05c61124c421f6232985300cc234c8219c5e97e8500e69126c124f48723833902c05c69124cc2c1313298fd01cc5526c124f4212683190730579b0493b0054406732480791425cc2c96d87fe4cfff8db07c27f37f9b0ffa94d634a723acb7b398301725eb2a1e0d6c75ad493009cb77329870d9ead230fadd796fe756e104cb97ff0c69749c0c5f5f806f1df55eea0a5fa2f71b17e6ac8210e5818c9f00a065616de1bc6f796c9c0110968781b0709f437800405861767588b05793ac3a7408a80ead0f67b077ff7d68b0f7efc03a3784e592e58c50c24136f2b149b2319fd301c48de6b85347719ef9810065655895a0540bb747d95d7032007ab449ebbf1544b2a7e85e80739349384927ef93e1bc0ce0ac3209e7e448e2fc1dc0b9d9249c8591c4f932c0b9c5249ca43b0890e12c0238ab4dc249bae43d19ce1a80b3c6249ca41b3290e15c05701e435df34c6f03a5a54235be851361cdb3880a682e005a1bc61a85cdb02103d9dcc72a00af8e12de4096eeb452f71c73426f8e2fa8a06e007d45f52642256cb193415d0fa036980895d0238e0c6a1980bad544a884253c19d40301d4634d844ae8ed4106351740dd662254c2917432a81300d4ed264225f4f520831a07508f0bc3d783772d27db3532846ee51e3122989f3207e6f19430f358e290877b0ed12ce6ec156907c4bdf3a47be35c67c3d112d13c507dff84169d4d65d18340249c60ce4ccd282e633e06640e3bc219466e86fd08c8f0bd0f2cf14473271412fa7b920d2e7f08d09e64cec2a7a40b5790d9e9c900e6c926c18ce26e05e703983b4d8219c5dd0ab60298a79804338a5e24db01cc534d8219c5dd0a360298a79904338abb15540298a79b04338a6b6f2e0230cf30096614772b580c609e6912cc28ee56700180b9cb2498515c45e94200f32cb33de8a3b8a07e0fd0f5713625dece12afbd20559568c5dbb22b295751a2dbc216d8e539612ffd9c7eb7471457519a046cf2dcb0dcc0178a0eb84d9e0ee3d9d66bb5e28b5176031f006cf53c4aa05d9226f23a3a741da8d0b500e8ce6fced91dd15fb4a21740794118bdec7c77f47d6786f06100df8566ec35600fbed5088bb587d5482df3132ab43b41817391494bf0923626e9e6b2039c179b8433379238a7029c979884332f9238cb01ce4b4dc249bacf2519ce3300cecb28718e60897336e708f79a32b17b8bed35bfd87abd9cf156f95201d6dec1a52a9c0a7c772ac83d41d97fb949b33d0a22b9e4e4fd00e71526e124dd6b9d0ce7e500e79526e19c1c499c1f039c579984b33092385f0738af360927a9ab0219ce4300ce6b4cc29917499cb500e76e9370e64612e76a80f3dab0ba8e8b45adb2c1923c83f13d0397cbd99ce5ccde3d2bca5dc74701a0d785b58cdabee52dff194078bd398eda5174a019081a9b3784358b63abe834e653b4ed2debd543515f9b6e1db0cb1bc398a2bd2fed937510807793b93eef846538d9f0ef1d00edcd61d8e5e47dc82e1b00bc5bc280d70ceb219239c39c00e0dd4a5fbc6cd4ac38576c3129636552a1f562fd0fde7b19bd9a634700f336731d6408fbdcc972c8f1a01a74bb394b4e46d1bf7d2cb0d23d668caa9788fc738b48fe5cdc665ab464abd86c06567a8749036da48eb064f96901c079a74938732389f32880f32e9370e64512e74900e7dd61b4ccd3ebe4c88de404824a00f31e936046710241158079af4930a33885ba14c0bccf2498519c42bd0ec0bcdf2498519c42bd12c07cc02498519c42bd0ac07cd02498516c621e01603e6412cc288e001d0960ee35096614a7501f0e603e6c12cc284ea15e01603e62528392741488ac41390ce07cd4249ca4d523329c4b00cec74cc249eab64586730bc0f978186e31056c5fdb1aef66e6207c228c8903a97bde13e7b3cdb084d68a89fea433dbf650f91e35003b7d9212f26009b9ca7a8803ae9033339cf918ee6c00ba1a1282259b915102c03e15c6b2140aacdab3d53d6c9cac3a15c59ae94c80f7e9e61ce10c6de5e31d5428bf03f9ec33942887099445d6434b05303ee97fab7cddb1d635724bbd996289de4df23e5f2999fb7c12ae04425617680f003f1bceeab105e13bdd904dbe7e1ae07bce1cf7d828e69aed41aef93c25ca5e2950aa9092bad7e450559a4e00185f307bc929c2ce65322fbb3900ef8be6bace128e759239867d04f2d297c2c800b06a93930110e6a36419c00f00e3cbd48ba22d911d226a7a4191b04c9eeca35715ea06c0bd1286fde534da60b968cfdb8b00447da99fe700c657a9fbe539b0d9e2c3cdba13e1022a98f900e66b61f47cda5302378b64cd8b9e7d6b36db9f01ced7c3a8aee724e9f488760fe8bb00e51b617422e7ef739dc81b00c21f85d1bfc9ad718ea8f23408251658af94893c73313b56741bd7b23a51dfac092399d3791b03b06f9a33c5208a6e5ef301cab7c29892951f7eef10991d1e03e0bd6dd2fa085328bb36c8d647f827c0f9639370164412e7ed00e73b26e1245d4b8e0ce7b900e74f4cc2393992387f0570be6b12cec248e27c12e0fca9493849578925c33907e07ccf249ca4cb9a92e1dc0270fecc249ca4de9c64388f0438df0f6350378fed4b8b95cf02f83e30c9dd9074b345329ce3c090d98726e1249d7845867319c0f9739370e64512e77680f3179438db0901156213ef5a66fb6f46cf75b00dc81b7f49896b34f3b37b3aefd56c1022e12ee99c5a082e31b3a9606703d8bf0ac7392b37fcee37b2becb0701be5f37a7735668ed1db264bf0be492bf096b25cd798c0f3ff0418a0d62bca736d2831267036bfcad39ae82515c626222b0c68f2851f666dcc5851727e54cf902638e06841b849125eb76c0267f17c6068a3c59ef0b8e047f00e07e6fae1b6014d787bb0ea0fd83391bd0e64572c9931f03981f9b04338a63e1bf0630ff6812cc282e79f21680f92793604671c993b701cc4f4c8219c5254fde00303f35096614973c7913c0fcb34930a33845ea1500f33393604671c9935701ccbf9804338a2df2df00989f9b04338a8b3efe1ec0fcc2ec297c846d22b2297cf340efd15fa97b8f52770b170a9757c2e2a83515c89301c8bfd14fce7783b47b8e7847c716768818fba949eac911c54de75b828ce04b73fcd8a3d8dc9c0850fedd240fa302ca228acc321f0338ff6112cefc48e2bc05e0fcca249c932389f32b80f36b9370164612e7cf01ce7f9a8493749d03329c2b00ce7f998493b4b54486f32c80f3df26e124dd71800ce77a80f31b4a9cfc442d1f11bd51caae00d3b72659dd14ca3e7732abfb37c0f99d49380b2289730fc0f91f9370e64712e7c500e7f726e19c1c499cbf0538ff6b12cec248e27c06e0fc9f4938274512e75c80f3079370928ea693e1ac06387987a6313849f76321c3b912e08c51e21cc4dc4b37730e0d8c8f0679176cf6ce0322ec692773ceee0e86325a50621de5c1ba8e25fa6da6efe149889aace5741c40dd9212b59a4a3085ed6b0b47bd04328156940895f7b1b2d63a617f3c0b982be15568c734a3bb34fe62609dad29d1fa9ba51145a7c49100659b30ac34331f79421706b23cf4719001b4a544ab56e59ae4b1d510724f3278d300bc7694f0b23449dc9f7b0da1c727997bcd0890ecdb8751e1876b6cea9278b4cbfa9f026bed408973a4a7acaf6270dea57ecfa179f2e5d0361a8953612e0456db9112b333d57a4af8792a99957e09acb45318d5a6f43c95a2e8fdb900a0ec1c46f1a4123ccf37cb3dd35df7bd967e1b90d0bb84513c6115fcc4c57d08fba3c870f60338bb9a8493b47b8f0ce77480b39b4938493b9fc9706e0438bb9bd4f95c40390196acf3f9615034f53009677e2471de0070f63409e7e448e2fc1bc0d9cb249c8591c4f91ec0d9db249ca4ab2092e15c0a70f6310927e95a0c643877029c7d4dc249baa82419ce7280b35f38dd1fcdd0a54cd6663f11e0eb1f467f3cfff07a61894af616f948f4e0c500bc0194f0d29b8fa90a99e88d5d6681d6ce405340467110b81d0039c8149084634164200f0520079b0292b023830ce47e00e4105340123a2590815c0d400e350524e1846a329087019059a68024ac7a93813c16801c660a4842a7183290470390c34d014938024906f27400728429200957452203b90d801c698e33611417e5eb0550ee47ddc276f610e08ad6090e1bc452cffcb5e879bcf1f135056f14253cb5d1ace389a9f71b2a113d3d1ced7a216c336d43f12c2ab09b01d8d194604730af7396edefe6b8617381f6eed2c9927e14573d9c0d927e3ccc292f3650ee01c73382d9dac229baab776d0558c798e3b215c5a52447816c606c189eeeb09c4f3f8725444b96c3ae05563a2eccc45f6929b19c395bda41e1a1b9bbeea0c27a22c03a3e8c018b827d68b4a70e24f70994f0fa6a927bb29c338a2bc716014b9c6812cc48fa0e0398d926c18ce2de190703983926c18ce2de193300cc4926c18ce262a6070198b926c18ce234d56900669e4930a3d84db73f80996f12cc28ee9d710080596012cc28f622e501988526c18c6287473e8039d9a4692aa44510d93495e100e7149370e64612e75280737f9370926e2e4686b31ae03c200cdf603edcbb1574bd8532819f0cdf0ce6e03b90125f2fc617d42d95ab7471515bacc7375a8f578b2e62b8596df430b60618a752621cca9c6525ecb19f3596ba3c1ecb040f3e343c83f129d2bcbfbdd412c01378398bf2ded4c500ee41e1b8ff4f0ebf43986c7cfd03806f9ab92b1d11b681c8d0de0ad01e4c9d7b262bcb554849c77b726244188f0765f874b3d73c22ec90235bf36816c03bc3dc0c80707c882c03f805c8006652a21d26d0ce17f6b994f1c1dd0a59da970b51cab9669388006ec765d6dfb6f8b9d6b1c2125b1ec1b2bf03003ccbecac8170488e2c6b5808b286d9611460989bcd2c912110af1a5b405580b50418e784d17d07abffaa2de5b4aea25dddef0392fcdc30fc4121ccd4396c74c1ce0660e75182556b1be7b17d6d6de3eb01c2f9e6b82546d181611e4059448972b80f94c5d637b9907ab6d8fa4bf547d5d1164b93a98aa556a0583a8412f17ecced9e58c1b6890640bd14a1262a948a82caebb0e8b6e5280edf0d06a00fa504dddf03ba46f49a6edce7805600a00b4c5a40654a24b76afe1ae4b50b4dc25910499cb7019c8b4cc2991f499ce7009c8b4dc2393992387f09702e3109676124713e01701e66124e524f27329cd301cea526e1cc8b24cea301ce629370e64612e711006749185d2439e2b77de4e3f8c5ccee878a6e2fd35a807059732e2b105a5e49b642c399a015b4dc9c151aa238c3632c4079785809dbee71e282b6c9441d42dfe71754085f00097b4518634539a227492d76a16e47bd0bf93580f1887047e3f7f56d72fa01b4479aeae8405a31227374f816a05d692a5ad2529e0ced9500edaa308aa6dc7d6e586e3f807075381ea2cde0044ee6053214e03b2a1c7cf99efa66941d6c9f02f8d684e1fd91dea0706e248785ef0230d79a04338aad9ebb01cc52936046715efb6e00739d4930a338affd4e00b3cc2498519cd77e3580596e12cc28ce6bbf06c0ac30096614fd382e0230d79b04338af3daaf0230379804338a2b7bdd03606e3409661457f67a04c0ac347b960661c2276b9ff70783174787d1f33ea9d15ecb4587b1ed061bf5b9ee2f022bdd64d2587901650e4a3656fe28c0596512cefc48e2bc09e0dc6c12cec991c4f90f80738b49380b2389f3670067b5493849e70d93e13c1ce0ac3109675e24719e02701e63124ed2b61119ce0a80b39612a75a7f3b37fcd120b2b6d02600af2e8c796ddc4d6636e3eb28d5582d9e0a5969b767b3550881a542005c61a98e45d9c57038405c6fd2126aa40e087413ae41f3b2c1249ca47d9e643827039c5b4dc249eae14e86730dc079ac493849275b91e13c15e0dc665255a980721c93acaaf400288ab69b84333f9238af00388f3309e7e448e2fc04e03cde249c8591c4f92380f3049370922e2c4d867321c0b9c3249ca42b2193e1dc06709e68124e520f25329c6b00ce9328710e604e3b7e99689b9789163b5f786a36e30bf7f185534a249910daed3d624448ff02909e4c89b49340aab6215d66492d179d1f1c291936b26980dd01b69d94d8c630efea32bc57a9dce2c1e704a9703a13b130378619d65fb562e49d741ed1e354767a1a68239d42095c6d318ef986b8cbf8e859ee3060b9a79a02328a33817b0390a7990292d0bb930ce42e00f274534012fa1c93811c0f409e610a48c2690564202f0520cfa40499e329dd1bd09994f85ce159d6139b2d7daac5190f6a4865fd1eaab2be1e94f5bbc2f0034db77b9970e098ac73b9278079964930099d6ac960f60630cf36096614873d5a0398e7980493b05a4f06b32d8079ae4930092b52743b1c0098e7990493b07a4f06b3238079be4930096ba664303b0198179804338afb147606302f340926e122016430bb00981799049370910032985d01cc8b2961e2fb6dccb57e57ca218f124b00171cfdfd36963307ec2594600709b00bac07ec912338efadd9b684229b0dd71660bdd49c5511a3b8a4c52090f42f3377552fc2f29e6c51a0fb80955e1e46110573d50572b4930b0d71e0388b0ae61f01cc2bcc9e5f4cd80425cb5187806ce04a4abc3d81ad6e15253c9f9c60ef511cd2ece21d54104b818d5e45097158601b259da64066a575c04aaf0ec3bfc99da3ea2b57e4792a5da207f67a4d18657fa2bda653fa477145cfd1c05277875143c5c646dd35d428aec6340e58e9b561344e33a9a1128e2e91d9e82500ec75a6828de296d0e701b0d79b0a96302b20037b30007b83a96009abff64602701b0379a0a96709c940cec0400f62653c146b182351080bdd954b084630164604f05606f31152ce1881519d86301d85b4d051bc57ed66500ec6da682251c1b20035b02c0de4e09566d0a50c09a614f05327ca7017c7bcce90388e252ad8702947798b40204e9da6364c3d239a077ea4e9370922e964537ca0f70de65124ed2a5dcc870ee0038ef6e4ed71e6fdf6914975faf1530dbb6f6089f9b207c96b01c6e3b65cc59236c229bc7f82c0f7b15b132eb7c81a8fad4b3b556deb7d2fae72f06565bff74d7636221b8396c1bab1157b9bc72217bb375976b66e55aa3ac47eee106d1461a445c147d332ce6f5d6334b5985f8fa7656ccec35d0165bbf956351834012170b1c2fb1ae35303e42c6bfb0c5d26423ab152176af91168fb5139cec2d0879b838c0b8d4556d4b58240bdd4a2bcca542935aeb9956e23b767a8cc73a833335dc5924aa8c5c0b1e41b1587719275c9f85222ca572d2329ffbaddeca1e6d3d162bb47ed995cf898dd5ce89726ece6679a6aea796c96324b9b47b39f6983e1d5635992da50a916dfefcfdf5c297a942482d4a19d2d4e1c3edb2539258c9e6fb18eed3e1bf8fc7bb8c7661a67d631dadbfe07cfac5d6c3e542a96f67b660adff1f98f31cc7995e0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/eab8b7e5f6d76be4fae1338f67a79da2.asset.meta b/Assets/SerializedUdonPrograms/eab8b7e5f6d76be4fae1338f67a79da2.asset.meta new file mode 100644 index 0000000..2a86e03 --- /dev/null +++ b/Assets/SerializedUdonPrograms/eab8b7e5f6d76be4fae1338f67a79da2.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: deed5666bf5345a48bcd0a99e0826470 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/eb5c5b40469783e43a10aa484a579cc4.asset b/Assets/SerializedUdonPrograms/eb5c5b40469783e43a10aa484a579cc4.asset new file mode 100644 index 0000000..e95a4a5 --- /dev/null +++ b/Assets/SerializedUdonPrograms/eb5c5b40469783e43a10aa484a579cc4.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: eb5c5b40469783e43a10aa484a579cc4 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cc5f5f8e7dc2beeddc6723f57c9922c1b9b62d972c315593606636c59c516962c59c5856a7aefbdf7de0324242109494842124848421292400281244008a4900081c07fdfec8ceedddebcbbdb5bbdd3acff3ff963adb6bd79f39d37fdcd6c875ce1fc44a639bfd68b52b150cc10eb44a5a8173b9dbf163ac73ae79f7ba6afaf118dce719bf3bbdcb9374de4a478137e2645863abf9739674da2d979b3455438c71a797fada872fe5ee6bc5be59cc1d56ae77f95f354a493f3d23a5122568b55624864500a11ebe54b4dea5a04e215e9e6fc5e20f63977aba4521048aebc35c4f9b5d6b9d324efd5394aebe7368a4d325a75cebd0ae79d4651ebc8dc2a25767b79ba907f08f730441d87aae360e77f77f57747f57737f5377ebeb33a0e4bf3f9e1e8bdeee86f20745b92f747a8e3bf9dff5d9c3f9bd039bcfb9e3a1fe9caebb03d89ac83d571b43ae62899cd69e8df551dc7a4886f32196391ac74987553c7f1ea384ee9db9261f8135d46919b903c38fe07e9331e85dd1ddd87e3840071d7e9f891271d3f72d3b1c3752afdde52d727a9e364758c2ad9ce33033aa96b53d471540abda6baef89392266b38e8c8e0dea7c9a3a4e57c719eaf889d275373a0faa8b4ed35c75fc5885b1c7705d3f0ff7f7aaf33c759ce949af7cf5dc3e755e90a63ee9d89fd6e9bf2a8c13d1b913ff4e5b92c8d2e9fea927dd3f55ef5ee672ecf4b4273ed8fe4c720b95bc933288c7679e787ce6ead239ea792e950e5afe2c75fc9f927b323a07b957f98c5b27f5de93eabc48a42edb86a471ef10574e37cd7aae1b4e9781eef52e878a785b9e93424f9db69f7bd2f67325b756c9d5f19fe79e4734e731480ebc7f8a47ee171eb95f28b9ba8cd0369e4a4f1daf23d471813a168bd67c3c4ed72387abe37cf7087fe232409ec3afc362ef0efabb4f6ec9d268a127ad47a970232964eaf74bd4b17b9acfeb671605d079b13af64833cc1eeab82440983d5d5be8a6d96b5b989b42e652976fb766a48323a7bbceb3cbd4f148755caef877f2d8812ef793d9412a5d56285d044a03476e8fbeea7ca53aae8ad7c5694dc6eb746adbe914e9a0649e86cee1d8515ddf8fce41d7356e383d9e5332d7a8e3511e9d4bf974765ac1f2bddebd906da4f35e32fb2a73e3d733cf95ddb34c5d5fe7d16d714cef6e25e85dad473af9e168c5a28b877117a58366bbc1f3dce9e81c8ea86d1d516deb5edab646a0ebf0ee19e81ceeaf4f53d76345a2cd821c54a7c9bf216c55fef7ba4c3dbb5124e63dd3bb70446d64f937c87b55bd779c48acc7f47310b733d139dc3f26cdb86d32e8e784db7b7e92778f17f1e54f49cc1ebabea4ae6d56fa7417f1794beb3436f64ea4565ddbe29ef7d1ba94ab7750192bff76f43b48d7a75bd5b15a98ebd94ac441e547a7b7d81af648dd3eae481256a57a669b27de6531393d872add7539a6ebb229c4b370ad461debd451b7cdeb63cf4ed42c34a39d4ab79e22be9dbe035d87632f75ff2c740ecf9d10933d48b3dae5d1d5949e8d9eb89bca806476d6e43e3ba1509d37bb6cfbdca4b83de7d1a15c24b75fcd6a007aae20cd7793e9b9c7d5a7b5fdacfb20ba8f518c640f566c7bc758b4b6a976a37b703e5f1d5b445c5d905417dd56ef2dd2cbcb3aac9302c43fd93d55e60a5d8f1d24e2fa14f2dc49d37e272791759acb69c833ea7cbffb4eff8bd4f9e9eefdbeafa8f333509c208c3e31d67d47aa7bbaeceb8be2adc60b22fdd035d5d68ef48f5d93f2e0de599ef439db73ff6c24c374ff1ca483e9feb9eafa39aeeefddf56d7cff3c4a5c5a36b3f11978fc5f9897195cfe0b0cff5919617a8770778d272809b2e0396269175a1392d07aa3a5b5ce449cb8b3d6939d0909697a87b8350baa9722a82c7e974fa0e411c06aa7b971269a9ef5f86e49aee5f8e7430ddbf223e2d07ea3eeb95445a62fd715a5e9518d7c8604fd8e7a59196d7a8e3d5ea686a575eab8e5394dcf3d3907b9d3a9e9044ee088fdc0bd2907b833a5e9f44ee8d84be9984a76d5d8d71c8616d6ceb70eed8ede0c224b2543de5b5f521baeebb59c4dbfa2d22ded6f59831b68f5bd5bde1b1f4972ce0da089168eb23919d0c53f76e43cf605bd5f76f47724df7ef403a98eedf29e26c7d880eef2e61b675ac3fb6f5bb13e31a19e109fbc234d2f21e0f67cd779488ef478c72d367a8d64fb70df68be475e3bdaefca86ef3dda7e41dace45f84cee138da13ee68156eb32b67986ebff552d75599386c85ba7ebf0a4f737d403df7a4e7b907ddf3c9baddf3b087ff231e5b1913b3b7d6b83c84eee1b88d15f16d9247d5f57128adc6a26b38ad747b2d15d7c7d4f1710fbf1c25ef62740ecf3d11d37fb22e5fbfa48e27c6eef5bdcf93bebd901e4f9a6d45ea8ad2cc771b49c7f9a91471f653268d17f165d278d70e863f9f44d657d533ef2579e6ebeaa8cbadaf29f913447cff6082baff0d753ed1737fa2ba7f7d8cfda0fd480f2d1bdeb9248df87f4b1d9f55c76faa702689f831273d2762aa23326dc7667a4fe5a3886e37ec47e74e3a8cd475b5b6c58a14f6f16d75fc8e3a562979933d0c2627613025cdb092c42b3255c4f7d1a7aafbdf55e7baae55edaac874cff37a0e49f5e1e4c4347e3ed7f3bc9e6bf89e3a9f11ffbcf83e9203e73f88c52da2e3fb3cbaa6e7ae7e18e3335af5772379f1618b1f89f8fe9d6e6fcd54cf5d86dec30cf47ddd36cc8f971b2950e757a07338167ae4e67b58157ae4cef2e8fb6375fc893abe188be3b491e81dc453bc102f33a94dff40c92852ef5c89ce1d9b1e9dacfdafdf9dad8e73948cabd039c8d8afd2e42a5a56e4100fbfd9e83a1ce7aafb57a37390fd7612fd54d91999e789db3cf7dd9cf169bcabe65122bafd74153a07196a5c2ea72189ac9faaa31e4bd169a86d16e41d6148573d77f3823a3f5ce9700d3a777418a36df967c26cdb877adebf36fefdb1ba5ff37375fc8547b7f9227eace997eaf82bda26c5af3dba17c79e69d5ef658f7ec51ebd17a870af437ae8eb705c28e2eba885ea7d55df474a3cf7755bdd34979d2c8ff4579cf438bfee939f86ce41fe22115f2fa8b98db1fbddb0c6eab1dbdfa8e36f7deaa3d3e9774afe6215def5e8dc797fdc7c8f5e4bd4733778ae2f55d7755f6b007a1edf577d9f71af189e83fb377be41e191f5eab3c3dbf34283e3e9165eaf95bd2d46f99413f8a99b2a9c8724fda2c77598d573e34e3b56de8f1f6f922797dfa7b8ffc154afeade81cee9bc672ffa08e7f8c9711572ee871de9522316fa93c25de40f7f438e56be83d387f1dc527d5b863b23cf0a630f67f27e8b13edde6694ec1ed2d61ecef4c78cea79c3f89f8fed05f447c7fe8cfeaa8fba5aa9e88acf27078475d5f1d0b2fb20a5d33f57552e966ba56af64ae11f176b8c68dff44d59f9ea8d356dbe1ce1461a9e72247a1e77458a5e8dabbeada5a14cf52740d8e654ab7dbd0b9a35b34ea91bb4e3d773b0a1b8eebd5f53bd039bca7ead9c8d122de974bcb437355f21927cc49aa6e107ff584b141c4ca7487d7245dffbf8aee77477aea6b5a061e93a84747b87ea74a83d7e3c34c9906a66bba4f769fff7723c78af8b6e5b1eab8d1633b1b55fabceeea3d59d7abda4e1f481eb6962bfea6ce8f13f1edf6e3d4fdf7913cb87f97cff86cf2c467537cb8527eaaf6ea13eaf88192b159bd73373a87e3f128ceaa8f14d9826c42cd5d46cad5fbf788781bdd8a9edd8a9e85638588efa357b8fca7beee91addfab54cfdf8bce21ac7fa8f32a755f8f61e83c5a8d74a842d7e0b84dbd733f3a777498a2cad5a94f13616d57ef3d80ce719835eafe83e81ce2561bff7ce404f5dc43e85c33c6721ef6c8f1e815d981e2a8e62ee5f84e327bd573bdb9e81cc2527376537439f56e7af28cd75e54c77faa306a3ddcf43cec0b19c87e43c9a813f1fd913a97d1343dd6a3cbfed75384a1e4897fa9e3874ade4e25ff11740e475dcedd83ceb1ed3788b8f2599e3b7a4dbfce236797478e9e3fd6e9d2a8ee3fea794fcf21bfaeee3fe6a6dbf4873cf14915efb86b9d23d29f66a9a812e5a241e44ae71d183149d7355ebf99da295efa09c12ff89924836d16fb9c57ab4c9ee9eba4df7bb3d3a2c9377aa60f9373f23af485f277b9f3448d14fa78242188af260401cad53affaa905b7d93737d89f4ca07c7fa1ae7ce0cb1c239c25b5bc44cb1d1f9172f65bd136cadd350aa1265ceef06296f8ba376e293a9a2042ef8de774a1d99ee0a813ae78a06dae09cd74a0dd7cadfbba5a65552fb65ceb566b95e61a7d8261638c7bd32b4c4b8373a7f9bc22c53c8cc3a9a170a50d7dde5083a994a9cd880f6b9d216ff2f45da2345007d17c81ff0d32957f6982f484889ff63e8163230e0b24cc998299145e2aee58b5ce90f579a40d07f1c136368b66f977791284c1a17331948ee113206b1142e1ebd60608fbe5ff9a0737cd40a44ae9c661999226ac9c082bca89c95f71385ce9d3be581a25efc11137ee9b2b7368bf8dde76ae473fe13a08bacfce213404e019439a5da1a5479ae93cad74ad5bc9159e35c2f77c44314e2cf16ab12b45eec91e7eb9c7712d2350f94e82a9326b1e24d153d2a713a981247f6a9cada256f504bda92274fb7d658c4922757b6a6862631622a2cd9cceaa8da5a3a9bbdf1fe860df33efee49d679e5abdb3ecf277dfea6c4e9f1e327d3209954aa18ea614ea91edec93babe48963e3d5be3154b1ff83133ec45d8782a1d28829d4c047b66dbc6e15ebd9452ee3ceb9f21383a4ef516416680071146985a050a616703c23c40d8c7a095e8dcdda315284448ee624a9c5eed53396766dce08138c483a03369dcfd92d6ad7e4dbbab899e7489ddc24a4ff719d73a9d83e5cebd72e7f92ad90085ebb86a2b9621c4fa99f16f24270b7350d3bd648d540748aae3510f38a86614f16e06e27960af030d6620cb386f66e8476786ee54361b14349bf5a0240f0e2ab92725794850c9bd28c943834aee6dca36f0bc1cfee5cf36b1a116fdd702e7dded4e6476cbfe738bf3be696826797619967676192eb34b8e300d18f9d388ca260799d20e2e8e3029e94dbae174d2f5a1048f0c28b82f656da3825a5b3f936430c183d35179002db83fa5f26883ca113f2a0f30651089be863583ac73aeb963818be4dd1a398004c3008db2cdd224aaa5b1bbdb79504feb0cb152eea3d122f5489e7572d2ce3a6364d681ae1f9fae54a61a684a1569b7d9ed49bbdd4c90e3bfb5043eb5a3d3ee0a8c13547737b90e14c1412682327f6e6b17bb869d6060d014342f68639b86d650476fa75816195393586f308d201fa15f442779824c553e2da8d41f6c2a2fa195018ebe41db6e434cc2a1d9354924767ebf707e1284f7a2850fa5348f1a34df5adec197e6c3a86a6472d09a6f3825794a50c9234c1959d65aa7b366e47427d896c83da7aac46aa7303a4119b30eb75e9a2e68a467584a9d63b5d402ae57a8422d7958c933ffd4563e28f3cbfa6391487f9a903f16e0eedc41160ad365a1302349a160d2c67fd1602e9266c8d0ed6243156323a99226d750d2bc622ac6929434a3a82c9b1734cb1e6c920c5976a6c156f3c056c16fbc876cb2278433830e67b4a9689015ff89ed5a34b8233c20af5ace79bbf25609d8116e8f34d51d8e01ef568653e63cd3e88451a58c3c486100fe85a3bcdd01e1fe98b343a1cc0e87a7911d38634565801c9325c150182c0a4898a681bab354ac71246f96d97097bc0c94dcd4ad918fd688139da39ebe4eb0b7aeb4bd8d316903dd3b584e10a47b3796123c3ba0e071541e9f13348f8f374986d2069634046d614da0d49e1b54ed8954893acf50a27e16f157a24ea2841f6a10fe4c077fc2a35456382c1d1b4962d59329c1879bf21824cd42d9ebcd71fed73b6f409fac5ce6fe1c5919c64a831c27afd7387f41853d0d3d0f939faebb881f3da75046714450a3986a920ce936df906e1ffa4cb76994f06283f0a51dfd099f4ea5dd0253da41f50bf506344bb6abba2dbe34cc918e3b39d257ab458e8e57ca946b92e99a234e721a07a73847e8afe5c87aa056decb911ba436cab2d64f9acea0f45f68d2bf07d27f0dd2d04f88b954b9556228b7223ecbad3c9370289e1709a2e1038b5afc377c6652d89698b08d920aec952dd716f9fc5a690055ad6de5ca36aa20f30d7ae5cabef84ed19e0d32e82d80675b93fc3bd64481b0639e14411a5eb058c7dbf0d23fe686172cf389ca0593d9d09e6a60155085ea918642d5d7c072219517965379614546796196c9e6e4104d43bbda1c9da34aa56cc879c11bfcb0102a61e84f8e2115a661596da5e354b9315b93dc00db25d70485294c726e453b5dbbf0659630e78955324f6453732a5f1451b5f66a43adfd64677fb5f66c93c9cab1b9c67635d91229211b66bbc664b6720cb1288dc46f4b3d474b07e82659a856aa42d52dba47cbdde61a65b559e55c878217df9f2a773f83f6d262c9bb4e92af977342db6413d46ce4474923cf763c29439f435500a5860ac057abfa102a0bad3564a1cf7c66a1b994da6541d59e47a9bdcea0f6c95dfca97d28257cbd41f88aaefe841f66120e0533ac3a0cd2433c9c120c4b0f139a9b3032a0fb09159e9ee256d957d0fdbf4a79659ff31b1c622ba4881ce9ccae3d77fc687904c5f61803dbbe3ed9cea7101c1b906db1493098e7c6740427f1725860120cedafe304d1fe82858bfedb5f0b29ecc71bb0dfe6137b0995cd3707cde68b28c95b824a5e4c492e0f2a790925796b50c94ba944ac30242238aff949c46594f04a83f0329fc28fa4326695a96c9a2060dc25d64875bb4fb1718d72512da5343a7fef56756e65dcf8088c79d4a84eb39f7cbe9cd2b3daa4a7bb760efc13a14d512ec7d020c4d56287af505750e8b719d05fe413fd4a4af87683f0b77d0a5f45f1aa31f11a9a225d2ba55b5becea4ce7aa1f8eab296d4e306903a7b174f313ce1a0ae90e03d29b7af8437a1415895a5324c07fc4c537d741b64a0ef895ab757fbb6535ee1f6329a5419d490328d956b4360cd664d82c584b21dd6940fab24fa46554895c1fb4445e47a9dd602a347bfa537b3da5f6aea06a1f6d920cad8e4641b43a60eb6cffad8e0d5438cd54382d1985730c456a775052c75209bcc790c0f37bf94be08d94f0bd06e127fb147e1c257c9f41f8733e856fa2849f68103eb2b73fe1c753c24f3208aff4297c3325fc6483f0eb7c0adf42093fc520fc3e9fc2cb29233f35a8916fa5d43ecda0f6c083fca95d41a9bd3fa8da9506c9b9d2112d9beeb75eef277feeb7e01d979ea3336c426f72bd4d153e35a454654a17a8a1cf34a9e4a32aafa6ace92c8335bde533136ca3849f6d107e9c4f53dd4e093fc720fc3c9fc26b28e1e71a84f7ede34ff80954629e173031775082cf1786b6e034699df5328fe5c84f66c292f69dea0b9db0ad48959cb82e574efe7ac0494f5cc31e0939ca7a1b954dd73ad63ec3b9ea47eb5a4aeb0b4c5ac3cc2b0ce2c6dacd6e57d2ed8698fc0a73c424d5ea9ee44baf3aca062e34d8c0933e0d6c2715e98b02da40bd49302c3eb9381dc16368c10d26c1d03cbc4410cd43d815ac8794e8a779b88bc27e99017ba1cfacd74809bfdc207c834fe14d94f02b0cc2cff229bcd9241c6a66d8132a50cddc4299e255014d713725f86a53c606501b5b4717dc8ef0269f45c91e2a05ae31a4c0b4befe52602f25fc5a83f04a9fc2f751b9eb3a2a77c11eaefe3b5f279ac201e3b8219dc44e32367e1225f8c680824fa6ace8a680e6790a25f8e680824f350986b487ed6abdfe5020c08f3fd4699415de6ab0c28bfaf9b3c2fd5421735bd042e6744aeddb0d6a3fe453ed3328e1771884bfe453f89954cebc93ca9977659433cfa2ccf16e61282d219ccdce3fe823c34cdf36f9c1f62ae933b857de69900d37680ef9b1ddb3292dee316931a0558b3ce7779d70478addb9facc753887d2e15e930efd950e05ceff0ad9058477f63abf33d7e05c4a83fb4c1a744369011efdb072d54f68e751e67bbfc17c6feaefcf7ccfa7ccf701ca7c1fccc87c2fa00abd870c855e479f85de8514a1870d84360cf047e8224af82306e17b7d0abf9812fea8296d7d0abfc4241cd2f6312a6d1fcf286d2fa5b2c39792154df96d5c345d4669f144f2a269661b164d97533a3c99ac682a6cc3a2e90a4a83a752154d47cbf0fc791f5f4999ef970de6bb7da03ff3bd8a32dfaf50e6fb7446e67b35850c76e30cd2d0bb86a2f335039d0f7dd2b996a2f3758ace3319d1b98e8ac4370c915831c85f24aea7d07f3320fa1b28adbf65d0fa2e9f5adf48a17f9642ffed8cd0df4445e23b8648940cf617899b29e1df3508aff429fc164af87306e1e7f9147e2b85ff7b14feef6784ff36ca38e1334564b556d0c6d5daed9416cf9bb488556bf96d58addd41e9f043930eba5a9bd586d5da9d94063f3269d05dc4aab54572f8b9dea70bc35d9401ffd860c06543fc19f0dd9401bf4019f08b1919f03d54247e6288c40b3e23712f25fca706e1d386fa137e1f95dcf0c5ab20f5c2fd94d63f33687d934fad1f300987e111f80e56a0e1910729b57f6150fb399f6a3f44c17ed994b760143bb9935299f368837423da26cb9d46e9c3e7ae45a994d33f6b84bb4fa6bb8eb1dcb95a2957386e97e7badc2c175bd5e4cc4c3939a3d740ee13ee9669397272d4dd061da4ec94526065ec0e79a5493e5585249ba77f6ad434169e30f2eb6bf8309540bf3424d0cb3e13e8114af8af0cc23ff629fc51aa30fa355518bd925161f4181589df98080df31789c729e1bf35087fdaa7f02f99844366fd5d3a855192a1eb270c8273e50624edb3115ce20e2b6dbb69d6ab265e46ff08f8e858f28de082eb4af9523c49d9d2ef4db9cda72d3d4555117f085a457c9992fc7a50c95f314986b2f08d74ec3f49a1f9b4c9fee51e39d5ed62ff41f63e4a6ef97f4cdbf2df94963f2589e507dba1c99c125fa58ce7ada0c6f335ca78fe14d078be6e120cd9f4cf866cba6684bf6cfa0ca5357c1530a14904fb1f15cb8e5695743f372d5cc891cda51c9f3e26dfa0f478dba407ec9de04ffe3729f9ef044c9d6f51a9f3ae21759ef7993acf525aff954a1dc823db551351a74755ebbafe4c3d80be4d45f23d43245f18e92f92dfa122f937532421076adf08b73d1bef8ee5275adfa5427edf1432f4f6dd0f75e4b6eeef9ddbbaf9c56a2743540abf0b089ea334f8c0a4c110a3062be45fcd72a5b0dbeacf6c7dc8f7285dfe6ed265449aba246e00ed47a7ef5386f70f83e1bd37ca9fe1fd808af03f039609cf5382ff1550f00f29c11f0614fc238af3bf0d9c7b1dec8ff38f29e1ff31087fc9a7f01728241f0544f2a24930943e1fa723384967e82726c1d00ffda4f586a71ffa5f91493ff4a714f64f0dd8efcbf187fd252a129f5191f85f4691f8191589cf0d9178db67247e4e09ffc2207ce0587fc27f411926ecfc94509cc2daa65281b783a8946d6c5d9047c56459e1ed54bfe3bd8d73e4995bfd4c93cbdc1b65adef16b94dd21b394716ccb1e59eeea0122c5c6cf0b40c74383098e456b1d5adc5798e2ccc2b7dba23be4cb1889858c0ae3b784f29b79519ab60634b2ff7480ddd2da3ddc133573fd03995847ce769bf1edabfa40ca643c4309534c69fc1fc8aca521d234496ea14c9244bfd9a8a44674324cef3198957a894ee624a6970a5360f916e5483abe0e10ebd0b772b9264691a4d7a77b274a175875563761d9f03eaa565e821d4f87bcdd2ae9a0db968abd4507f002026bb5ef54efdd8d76fa8a4e96a489abb7c1648bfa592a69b296906a8a4d1cb62bdadedddf2d11a9fa3c7bf33e900df1ee81e2136f4f70a1f470b7f958a600f53048dd293a8fe1a25bda7493adc704ba9dc0cd632ff9eb2835e063bd83fde9f1dfc8112dedb20fc559fc25fa7281d1409d61c7b8312dc27a0e03f5238fa1a703ceb13c79b94f07e06e12513fc097f8b12dedf20fc229fc2ff44091f6010feb24fe17fa61273a0292f358bf4760b0836f9e6766637c74de7d93d15f7172a89061992e82d9f49f4369544834d49047e0889b3a17e22f38e293ca8848650ad9fa119b57ede358533423e98463972062df8af14b0e1266050fde4fa02f41e257f84497e0f218c16ed27c4bf51218e348538d868022ba5a5eb4d536277fc59fafb9426a34c9a80049811f15b137c600825577e6f007637c9d6caec74be556d9e7b393802eda87818327f18e75f464760fe655042cc927ed29920f77753fac0694e24f193d347ae3cbdeb4d235fec9090349de9a4f9076500634c06007b278257945bc0d73a7f35ab48f96daffe930a77ac29dc3e64b83b5525e027ec7f99cc7174b6cd71a1ecf83466608ee31c44133c886610c6389e30c664a153c6f8a1895b0e5cdc9c456ef853da6be5be8335ce95d5b23be9764e9b32603a21e2772be88992ecb8849867aa1f45fddfa69c0213ab9322012756ff43498e0695fc1125797250c91f9b24436b6b4a24f8172c3e31098782646ac0aed07f291ed382f2f894923c3da8e4cf28c933824afe1f253937a8e4cf29c97941257f41499e1954b2881046971fd0e82226c1a0724150953b982443dba0301d95937cf9a623a5f2aca02a77a2281705a4dc995279765095bb5092e70495dc95927c4850c9dd28c973834aee4ed9dcbc8036d78352f9d0a02af7a46ceeb08036d78b127c7840c1bd4d82a1763da20d6ad78328d0f38382ee63920ccf17a7c323d947a74d82c1bd70413a82dfa405f7a3527061c014ec4f092e09287800957a8b82a6de402af516074cbd4154ea2d09987a8329c84b03421e42095e1650f0502af58e0c9a7ac3a8d45b1e30f58653a9b72260ea8da020af0c08792425785540c1a3a8d45b1d34f50e3648ce1de39c46600bb9ecfb4fb7c53764537cc4249db4984e131b4da5c55141d322c7241946be4ad351790c2d780c65976b03dae5584a705940c1e3a8bcbf2e60de1f4fa5defaa0a9378162717440161329c11b020a9e44093e26a0e02805f9d8a09027532a6f0ca8f2144af07101054fa5ba2d9b02765ba6511a1f1f50e3e994c69b036a3c83d2784b408d73298dcb036a9c4709de1a50f04c0a45454014f994c69501352ea07a86556dd0332ca4705407c4318bc2b12d208e22aa88db1eb4889b4d81ae6903d07328b54f08aaf62194da3bda40edb994dab541d59e4749ae0b2af9500ac8ce36007218a5767d50b50fa7243704957c0495c97705cce4f329c18d01051753829b020a5e40096e0e28782125b825a0e0124af0ee80821751f6b627a8bd2da624ef0d2a79894932e4d67d91c40f64e6c1eab61c11f72bd1af6a021dda5253177dac68b72efa514e18ae535da37c02de6ddb2efa89068cb930d11e01f7334ebd3ce9a412cb38fd7f5204e6c9b915a29c02965126783287091e4985760a4768cba98c7b6ad08cbb821a61392de008cb4aaa78dc1fb0785c45093e3da0e0d5d408cb19014758d650a97766d0d43b8a6271564016a5148bb303b2584b093e27a0e0320af2b94121afa3209f1710f27aaa3d7c7e1bb4878fa6785c1094c7068ac78501791c43954517052c8b8ea5fabc1707ecf36ea4205f1214f27114e44b0342de44b1b82c208be34d8db2f1ce6904be9063c3be4b1b5513abed9a65979b9819db4657c8b651aef0b3f75226fa52ada3cda66487d4b9329d6407ed09c15b4c82e1f4aa48a23bb6fef1e38e5d4e959257b74129b995127e4d1b08afa04a876b83960e9526c9f0fc75e9a4669219e62a93605896707d3a8247d366524d09be21a0e06d14e41b8342de6e920cab776e4a47e524ab776a28956f0eaaf2095466bca58d32e30e5300b0b9deade930798d165c4bc1be2d20ec3a0af6ed4161ef345578139cd3087cf3b63d7cff7585e1cfcfff8eb42bb13b6525362c2176e9e840554cf554097c571b94c00d54e2df1d34f177516adfd3066a3752c2ef6d03e14d54cbf2be88619951893c2d758c65ad2811cb5bb75f5a256003ac3d328177a8a49f2117242d73eeaf76eeec94260d57cced17935f0b3c8d4d0b0cbf5eb82b6bfd7d43a1998ae5fda6589ed31acb754e4b0a329d9b41ebe4dfcb84bbd976a35cc1eb66d065ad4f2e6addf12c7e4f9546c563ad70bfefb850b4c87881dc787a3109f0bc3f3d2849650296326d9377e399e2cceae5bdde91e377d95a0b45fa01ca9e70886e9c0a9c775c5af54ea1b8d9b18d4699e66e6ccbd42e735e6d63efd2d7dbca9e7653b17cd014cbc33db1c4ccdd782e96295627e3e8d5323e85f09d647905bfe527667ba8983d648ad91169a55fb15cff5e23f4f2aee02917bbe3276e7ba9b83d6c8a5b91276e2b65ea6c573183b3bded16937d544c1e31c5e4a22c9767b177600f1dbd914b25da9aafc987956376742ca02e6991cd0c5cea4103abedcab61329ea8f9aa817a795375608f7f31136946a2751f17bcc14bf158c56055777c96020566e73b846065d234e14e564499249aa9e4cc5fa7153ac0f4b1a6b5ad3521917772f29378eba3686ab158a5062bec83c354fa1e2f52553bc8ef1ddb25b2befc4b7ed4c12dc6b7843a762d9d509d212cc249d4fa5783c61e2b13c2b7536776d7e1a15e727a9768a3f1bd0360cbb6b544841389dfd5a849f98eda762f6942966738998ad93f9b356b54ddcaeb6eeb5ac57b9b832213578fa28a75331fab229468b194b5f9daaeee6115b85bb9b73dbc5f40c2aa65f31c5f450418d929b4a8af818e0bd9a80c95299ca8db23754e1d4b8fbda30566752b17a3a9d3e417cb8b885b04ea642a3f32ce4c36d496abf78196d17b3b3a8987dd514b385294bcef47a0574199aaccf9a6949793615c7af99e258c5dca26e967b84c18e456e8b79bdb4809ad6dcd8367dc44c6ad173284e5f37715ad76e3d8fe48482733897e2f08c89c302b20c831ed256e7219d37dc7daa92d73866496d9dd2e75131fc862986cb7cc6507f09d59c22ed11dff3a9f87ed314df5246cb6ecaa0fe6d0b02175004bed556f5b25bb615a35a993f561752b17ad614ab253eed38f6e9431b6cf8222aaedfa64628fca6e062f944a2357acbd7f4e5fa89dfc554fcbe638adfbc002dc76659f3c25654d5aa9f47c7aa2ce1593f71ba848ad377fda599d73ef1d77252e532ce9af2522a7ecf51f1f3d36774e3ba44b599627761c62379ebb0ad5a8e9751f1fb9e297ee345f251c1328730879697535a7e3ff9d89e9f54589b512a70dade1554ac7f608a35fd2dbcb2d6a97a5c46c4be4d00757f8bb1dd99d9f8fe9594decf9bf43e24658f6b999c1b84d1c75ab933fd225127b7db4becff264b81cc7b905751f1f921d55a4e9e47a037bc46b6209b0c6d8874e612a0e555dd8631bc9a8ae18fd2e9239be7069649dbdb255749d42aab6ccff9816ba838fe981aa14a671c209d58665662641ed36ba998be608ae9d2b452d33bd3e3e6431deff64cd7eba8d8be688aed8694e9ca3b32ce3d667e3d45e327e9cd13b821d6b6d61699a43e9692ec4e5b59c00d549c7f6a8af39c406db47ad1e419f533d7b9eb55ba822d15f88acd8d546c5ea27a0999c6a654c02749cad3888d69ad9b9f38dd44c5e967a638552469c978fb2af16db7f8d429967dbdf463199f667e58b4456bef668ad1cf4d8c66fb66a4db7d0d59b0e15ba8b8fcc2149753c8b8c46ba0d3ba4e9614e0cd52225bb00d81d33493a7741b2c59f9d6d65c6fa5b8be4ccd1b9a35485c9fd15ee307b75131fa2535229f7a2c2a9df6593a235afe47bd32afc36ea738fccac481fefa333d26a4b7d26fab96c61d94c6bf36693c3165bb2b361b5f25af42fe6e9bfee89d94a6afb475c95a2e7d3d754f9a23bfdc45c5e537e978a852bd984596f560eea662f95baa15ebaf9c73db3f8977133d98f4573de8f44c94522c47d5a1dde527cef75071fe9d29ce133c291b0b933b37dd4be9f9aa49cf7c8f9eb87cf2eabc44e99c6e9f31d371f8fba818bc668ac171ad2decb69f2bd3bd8a64b3e5d802d3cd79fa1d3f54eea7a8fc3e1d0f101da29f522516332ac7b54d69f20015b33f9862766c3ba7b79f74ce34073c4811793d9db130bf6dade0a32199a7fd43544cdf48a7b45a2853d54dc16634c7e15a4191284c113f5349066ff989c1c3540cfe98bedf3684e92767e2f851d7db2a851ea1e2f72635b793bc4513fb288f5747fd51243a7f511ff449962733abed1fa562fd5626730a6eaaae751ede2adcbe5b8568eff52a8f5131fc533a39cf4c38b37642ea1e4e57e75f2422b7bb9752dc199a7af90eb40a73a1fb12c96bad1966b496f833e26a87d87508bfce490dc81365ad653b2c264d2ee1cf0e9c2e1d84fb33497d92cfad1023d5c2bb5875a1945fabca1b6dad332421d7af1d16e1ce705a8135f22dbdec36552c4cb5dc0c54cfe1d8a58ed32662196d447eed17cb72484f02d2075a4cff02a93a52a56a87dc28c4716a86d6945a8bb721b48e661b1a924016e70e93eeae80556af42002bba66c96c1b81f82a5178da40cd9bb0bbc37e4e952806e0fa614b70e15012671c3a4b9b98ebb8dc29dd078d591d9b573873c48917738b1c142f312d9ee6b70c0b9be9fbacea1003685022154581ae1bb9c08e173e7ba5bbb544e738080d827e5578b1da100f658b718b0bf72021b28dccf6ae68998576698c1f5ed1903f71e27b8fe06702070a7f312386eb4c8ab95a180b645c4a0fd8ddbdae2b3e762e7778df2ffd59e61aed585015cb4570cdcfb9ce006cbf66853dad54218e05d852a850f38e1f544597575dc084c18309d3c2286e9ef9c98ba234c31a7ef30207a7b500cd13f3811b91fa17667c79b9d7e843bc7bfceb952a9fe0e03aee8d818ae7f72e2ea22713585aa48efd43b06e75f9c70863a27ab5bbb487a5ed0f52c2b9575648b00ef11a815d7a891b330001c383206f0434e80dd5079056ac254691800c1b6d91ad0bfb90bf4d5726e22b6bb50381aa4afa23aef3fd9b221bd602f0c803eeb1f03f4112720d83b53b7d81789bd32d62dadcd4cf0f1ac948dd052696195d2de6a9d00c300117e34c48f3921c27edf181e8c88c1e2fcaad66d6c2b43de961f88c6c83ee144d95b9569dadef6a91a739dec6e8701d5c7a86cfb6fb63adbd077c4d3cdbaff18a696d9c75d63e03ee5ee6c63707835afeb2f0c3340b175cb618077321a17fb8c135e2f54a3c6166cba4b89c3006a206a9dfd8f7ba87aa5cc7e3b3cfb0f95388f37ca90c2006c4b8718b0cfb33b7818ef405319b2f2ac168df17fc13f540d4d89121974981b1acf778e41131d98ad6d919c606b9181c736008b6d08d7e4b4e16a9cf0c200ee2d042ec209ee20944dc33a21025e1c1a56076e2bd333e5eea062b8fb0187222bebc8090e46cf4a1d680b45fa7b698601e079b291dbb5b347b8d7bd327367177fd469b79c3ec2edd336c8abcdaafe8d73d3990c458d6d9a77ea80dc6ca2198f6f44539673d1b4a788a3bea7f7a219fa8a44d36a7546030e58447d3800457d1581d1b4db32515f157834a3f224eaab8b1df5d5808da6e5ca12f5e5bf11f5ddb335e94ccfd84713267ca249bb8351e3107ed438281b25a627a3496677a3c4087834c5285234a3b999681ab383311f52b3ef671ef89076eef0ffb77b671eb87702802ef0e90ed9ce97ed89aedced09b022d79b17caf8e4fb49cd746a758f0e23137488ff0a8e6e3798b4e91ed7b238289d0866d2bae8815c2ebad984333f9438e7229cdd6dc259104a9c1b11ce1ed9c0b98d048ad5df2c6689223e9cbdb8703e2262387bda84b33094386f40387bd98473762871be8570f6b60967512871fe14e13cc8269c334389732dc2d9c7269c05a1c4791ac2d9d7269cf9a1c4598d70f6e3c43948e1ac50dd4aef7a6cbcd6378f0f64672e907f4720fb73821c25628314e90e18c1f38df2d9f035e51721b00338c18e16780429fd11d430c31d87e00ee4843b5824ef76627150d3b3a1ecca8552a02ee7204e947d14ca220f50776c111e0a9f1d3e80ec707036e0cdc93ebcd7b8e03d81e00de1843724451d1e9f8959fbe66cd9f87d0473a84d30678710e63f10cc6136c12c0c21ccf710cce136c19c1542987f433047d804333f8430df463047da049371ea820de65f11cc5136c164ec95b3c17c0dc13cd8269861ece1fc19c11c6d13cc392184f94f04338713e61405b3d679a8561ecd9f1ff6f7396ac6c2600017f263510f7d0c27f21e12f976e90fe4fa276d93f0c2d72fef85ac746c7b8e0fc56f74c9687d6770a1ac45d6378e13e5a4840c5f2e852d16fa0b5c0b9cff609dbbe508668b48b647252b6cb6d27506823d3e1b769b5e5515469439a80898c089f260431190ee9ef6ac68c7b0a145563ab17dadd415e56e08cd88721c17cadf212b9dc48db2587ab2d72bff5dd8bd557f5f1b3c7db557b3eb2b1ebe3abf134219e544a91735cc74fed7a9c0cb655309ae6661449eadcc3c05219c9c0d84b30f38845f4108a770221c2062d3befae8fd1c7058a7779f4210a7dae455cceacac5867328aaafa7d98493d5f7880de7e108e7749b70b27ac6b1e1ac41386770e2ecdb5a6fe7657f167d3817be175159996b8f2bcc2121acbb47204bcccb064aec0bb7c269842f51cbedaa9d97f666a3066743d982ac7226ff983b1eaddc2c7648740be4a2bd1d4ad462e758e58848d87d210459bc3782999f8da18c66b928b8a975745daf68d447d340dc4cce296036b43722b405d9981b4ad72d9bb1fc6473ca3e02c12cb40926e3441b1bcc4311cc5936c164749b618359846016d90493d1a18b0de6340473b64d30195d0dd960ce4330e7d804338cab820e41300fb10926a3db0c1bcc8908e65c9b6032cef3b0c11c8960ceb30926a3ab211bcca908e6a136c164ec01b1c19c84601ec6093347248e1ff973de62acdfd99cb766a131a5c3dbd3f9d03b58cc588ab20d154f41b67a844d3019eb7736980508e6fc6c8cbbc368e76ea1bf659ba5895e367cc311be624e7cc310be449f3810165b2c1de699f31f20a00bb2e17c9077c0391f9c8c102ecc06c2a2030ee161086189ddcd21c6514db6e6d026d41c5a942df798d8141b9e25629f5c639bb43809d9e8627bbc84c3b89ef270847249b66af1547bda86d9756b2e02bad4a67d8e668572a8e37e8473994d385917a9b2e1bc12e13cd2269cb34389f30f08e7729b70168512e7f711ce1536e164ddea990de70a8473a54d3859f72666c3d98470aeb20927ebced96c3837239cabb95b9ee97d5ba254aa065fb7606c79aee2023a0b015d938dbdb80a3cfdf72c0c7b8ce182578fe01dc5096f844877b564fcd26946778437b9a0ae45831da5364265ecb1b3412d4550d7da0895d1a58b0dea6a04b5cc46a88c353c1bd47108ea3a1ba132ba2bb0411d8ea0aeb7112ae354301bd44108ead136426574566083da1741ddc009b540248ed2c7afdb582862dfa1722312ff55abf8cfe0c53e1f56265bb47ab89a31110ab9120136c7d689708c3dabe3c2b8c36c7f64cfc7dabb0a89d1498c6d42ef2564a51bedd9a18e75b53b9b9d9e8d601e6713cc30ee847c0e82b9c9269861dc0979378279bc4d30c338737f1682b9d9269861dc09790782b9c5269861dc09b916c12cb7096618b7f13b0ac1dc6a13cc30ee845c8a6056d804338c3b219f8b6056da04338c5baf5c8a6056d9ed761bc62da43ba0be7b3527dede0aafbb8b4dadecc5bbb26b38b75e61fb3c9e4076b92ddbbbc8a63fec11c6ad5786219bdc9e2dd7db957244738767c4b3c479ad51861866d7db51c8566b38811e94349337f1a1ebc1563e227427b4a7477df857ba0f412877646359217c79f5c059565886f0d5dab16db93b7bd4202dd69d1762b54cb6ef0dee40154e9d4dfb76b27626d92cb52bc2b9d3269cf9a1c4598470d6db84b3209438cb10ce064e9ce344e2c2ae4562af00d78516a15d6b573baf570ae846964ab0ee96fbb5d96971f6e3823c185556bb6c72099f15ca8dd51e44381b6dc2c9fae151369cd7209c4d36e19c1d4a9c7f44389b6dc259144a9c3f42385b6cc2c93ab7ce867325c2b9db269c05a1c4b907e1dc6313cefc50e2dc8270eecdd658e75ad9aa6c7124170bf8c8d37ab5e4ab522ef9aa0af558673902bacf1ebfce30ba2bf4443da513b3318fa9f7017317216e955d4dfd50d8b70faa42767952361621b6c3a74cd8e0cd47f04eb6d7c398b102629b6cbb1ba13d251b76393bfb76c906ef4b08dea9d98077c80194a95f40f04ee3af5eb61bf6545aeb30a910154aa16ab9c21d86dec2d7ece98960eeb7d71d8171c0982d930f44cda0d3edd9542d8cdec4d391959e61c71ca6e9d3cb8c68c770a13d0659e99936cd12b1ba1db295a7e311ceb36cc2991f4a9ccb11ceb339718e4c3be3af17ee1a621055c0ebb830810beb1284f59c6cf4d0d31becc80fa5dbf60604f35c9b6086d16dfb3804f33c9b608671e1ea2a04f37c9b608671e1ea3a04f3029b608671e16a098279a14d30c3b87075258279914d30c3d8d55c80605e6c13cc30ce042d44302fb109661817aece47302fb509661817ae16239897d9d44f679d0d62eba71f84705e6e134ed6e6111bce7908e71536e164f53d62c35981705ec9ff15a3265127b1b993c1f02a8c19d53a572ad47852f8468c068918c2abb2f121a859e240fb10d4f508e1d5d95840907a2c33712156b123b451ae50671dd9bc22c2047933caead770421ea520d73a0f01e02ab54223b62e23be24c52e878c60d956661c8ac05e9b8dfd143458fd85c2f819f8642dd23036eea720bcd7b5e76471d6b6493d830be5bba89cbd9e13e51889729968924bb0c01ba4463a2dc0eb316bddacbebfb5406e8eba43dd5fec1ca14dc0b885055b73aa3b027c833daeb261ccf69f20943772a21c9802a58e29ababcd68ae5abf1a959e37d9bdd90fe30033db663f7908efcdf6bad132ce77b23989bd830a805bb2510050f57eac00602c47d90a800f10c65bb9b7a35aa30645f4528365d23221db87af2eef8bc0dd960dfbcb6bb5c14ad9217557b3877d93952f238cb7738fcd03b0121970bb7e77eb282e98b311cc3bb2d1becc4bd2cd0cf798d3f308e59dd918b62b3ce086ed4e4008efcac6881258e3225947b7482556c88163c8e4abc51e3950d7e8dc8306528308f38acb3908ecddf6f8c787d137693942794f36d613157a7a4161aebb9b11bc7b6d5a993e8bb32fceb632fd1e84f33e9b70168612e74508e7fd36e19c1d4a9cbf41381fb009675128717e0be17cd0269cac3b20b2e15c8a703e64134ed62dfbd870ee42381fb60927abcf1c1bce4d08e723d9d8881796571d381bf12e46f81eb5c9a98bf543627c9b93a34989c76cc2c9babc850de72284f3719b70168412671dc2f9254e9cdda4802af985d546c1ec5ec8e65dd405958d4f70e29a24fc7cda1686e15aa448fc095ba09605a783655cb0f311ec27b3518fcf948d9e0365ff993710bea7b231a60e03c24b040cf2c250f03639aade18eaa1dffd08e197edf1200ae3eaf321a8a2f90a274af0005f23cbc04aa17ddca8f947c62fb6b05541dd904d3e6daf934b187742ba16a1fdaa3d1fb62b08e5a2fe9711ccafd904338c1367af20985fb709661817f57f0fc17cc62698615cd4ff0b04f31b36c10ce3a2feef2298dfb409661817f53f87607ecb2698615c00f02c82f9ac4d30c3b8a8ff3b08e6b76d8219c68ee56f11ccefd804338cdb9abd8a607ed7ee052a8c7d22b6052af96810e439ee419064e349aeea45d23f8eb13a62fb3af50908e4f7f8d74ec68374473361a063a738528ebb37249d450fe3c76c3ba282e0fbf638bd86b1bb3913a1fc814dde1db338ab2836cb7c12e17cde269c85a1c4790bc2f9439b70168512e72f11ce1fd9849375d9291bce8d08e78f6dc2c9dabc67c3791ec2f9824d3859378166c3598370bec889134ef46adef04dabf541987ec2dd43771738c7d6a2e1aee302e7080b52ab9d2bcc8b4ed95c12fa23983fb5290bcfe21c7167cbc2f7229c2fd984b33094382f46387f6613ced9a1c4f97b84f3e736e12c0a25ce6f239cbfb009e7cc50e25c8670be6c134ed6c95f369c8d08e72f6dc2c9ba413e1bcee311ce5f65e3934c7a2348e0d0225ba1deed1fbd4b06180786d9da9f1134f2fe6b4eac133d58b78a4437c3f41d121951b3f59b2a11ea57b2e1c03d471c689ba27c0d1502bfc986b3acb6d626697f50042c56f0aa8c5370e1dd687736b2cedfdae31b1f461fba7e08e5efec75e9669c71672b437f820a8057b3b1e3cc4c8fad86f9f3dfc508de6b767b83303a28b279834c47d9fef7d968f0e3fde34c593cdc75fd0f91b5fe8113e7784f5d0f5fcc88ad76337fc160897a396bdb964fe7c27c30b2dad7edf10c09a3b7dd6a64b16f64f35b0590f12b3dabe40ebcaeea7f10de3fdab45500eb701f1bce6e28e3bf69134ed6f129be6d2511ceb76cc2c93a7aca86f36884f34f368d9ecee25c70c8367afa182a3bff6c13cec250e2bc09e1fc8b4d38678712e79f10ceb76dc259144a9c3f4338dfb10927eb8e5f6c38d7219cefda849375ed3b1bced311cebfda8493750335369cdb10cef7b2b3ab523b8c89b2f5d95f47f8fe968d016508b85a5aa296bd533d123e781104effdf65fffa62b99f04dbef546bd9d0f6c0119c659cc8f9145fedd16908c93196c200f4116f90f5b40320e64b0812c4020ff690b48c659753690e508e4bf6c01c9b880950de47a04f2435b403236bdd940d62390ffb60524a357071bc8ad08e47f6c01c93803c906b21181fcc816908cbbd0b081dc85407e6c8f375c183741eb84507ec2ddc38eed970d8a36490edbe40eb1f05af85cb6607e4dc3fb6f36ddb3c1c9658f5ca40aeb6263df4b35bbc3ac17ae0b0c882fe0ed3a4ee042bd0cd9e9a7d9f8e062cc6bd30cb54c0eaa8115574b6175bc60c770816d4036fc1927d871c2ebc8e5fac6c55cb641a0fb95d564a56c1837f49b86acf77fd95c1ee302056f3928734b8ced80f06e4cb50561fddc1eefb830ee92381915035f64c32b1e37a9d22f6119d1b295b02b9095c2565f59cbfc358e12eb45ec4b595878d65c63cfe0c2ba1d618d7062d57343b30ea089b5fb5076ef900d9b4c9dddbdad54c6acced64a3d12d964474eac430c5893554861dc6bb610c1ec6413cc307abf1f816076b6096618bfb63119c1ec6213cc307e6d632682d9d5269861dcfe742282d9cd2698615c293c09c1ec6e13cc300e348f45307bd804338c5fdb988060f6b409661807e7462298bd6c8219c671a43108666f4e98fe97013256416c0bad06209c07d984333f94380f4338fbd88493f573646c38b7219c7d39716aef767058d88d4634b3b287021bbe1211c3d78f13df40013b1a97ab8dd240d44ee7f1edcee3f572280e7fa5357c183b238cfd39318e16b19d3ddc29b5cd8ebab0734b85e401ce0dc50216f9c3b866b923003278a508f34799d723b80338e106db2d89b111cfe63d722b423b90136d0f29a04e563980b74c316043368e0bd940846c10778999acfed631659d3a1b1d61c25885eaedc19c18730c18fd6d35c53808c7b6d5542ec23bc4de3293714e88adccfc152a008672a21d23d12e95f6592a6066b24ad5f0955294f653da211300ecb8c2f9db15bfd8395639622b4358dff740808765a384a55c6a164a8b65de4d763c5709fb2f847138274658b9bc5aec711e4f7497099fabcc00846d443686e270535ef78b623da57037dd8721982339618e32c04c5d728617ec120476142758bd5534b8c3d4890369abe8ab11c2833911faf3dc0ca333c29108e5684e94637da05ceb8409429a9dcaa941e8b1a526deda7c22576dfe21429cc389789888f7e06c900373db93da6c18a7dc8e423da431d918874f7fffb8307e3ff82e649f636dc259184a9c17229ce36cc2393b94387f8d708eb709675128717e1de19c60134e56ef0f369c0b11ce8936e12c0825ce3a8473924d38f34389f33884339a8dae669efced1e616e73ad70fbf3e1edad57208493b3d1d54ccfbd2b8caeda8351b37d4ab6acd1ed6e82a0bdca12b330f0f12617c2a791354ecdc6f83a20ac6add7741df0efbf8d13711c669d99d623bd03f393202a19d6eefec6518bf317815423b231be567fe0137701c450873b3e17238b33d5c0ed95c13c6227c79d998604b6fdc3d3f9423ef772298336d8219c6b6e5430866be4d30c3b80cf07604b3c02698615c06780782596813cc302e03bc02c19c6513cc302e03bc0dc12cb2096618e7242f433067db04338ccb002f4730e7d804338c1ba13c83601e6213cc306e84f20d0473aeddbeef8c199fad83d91d0d11cfcbc6f8e6cc567bad14782bd4702f0dfc2ab2d2436d9a469bc55982b24da33d8e701e6613cec250e2bc19e13cdc269cb34389f32f08e71136e12c0a25ce9f239cf36dc2c9bae48a0de7b10867b14d380b4289f30c8473814d3859fb466c38b7239c0b3971ea5d60f33d8dfa304fa6ed44f04ab2b174009c114a046c3bd1e0f478aa54a3dd5d30502505964b0178438aa6507b1f4d408817d9b4e30ceb0c3a1bce2ea87bb9d8269cac639e6c38a308e7129b70b23abfb2e15c83702ecdc64e3418a7d92fe9288751b90ca651de77074718e19e146182bb14c15d6653c36916e7ac265bc3e96154311d6913cec250e2bc0ee15c6e13ced9a1c4f926c2b9c2269c45a1c4f9638473a54d385977e564c3b906e15c65134ed66d24d970ee453857db8493d55f890de75684730d27cec9c2bb5a1d7af6950e0ff07ed7f18c2d39a0a6928b9dbf1ae5ec276bcbf44eae96e94ed4323d8a13b8feae2b353f1f5fb2b28164fbaeeb7864b9a5b68064b44836904311c8b5b68064f4b06303792a0259660b4846bf4f3690b908e43a5b4032ba76b381bc00815ccf0932cf53bbb790cbb1e855710b9d27ea1c7deae51944354b75fd155c75fdf1a8ae3f3a1bbe78e98e98324edeb18d9776443037d80493d1b1916f1b7404f3189b60867124ffdfa8943dd626988ccd7a36981f21981b6d82c9d8906283f95f04f3389b603236efd9607e8a606eb2092663cb940de66708e6f136c10ce3a775fe87606eb60926e3426d36989f23985b6c82c9b8509b0de617086639274c7a5be9c5ceef1ae17e5ca7cc110082c3bfadf43108ec564eb0ee37d957380f54487f3bbcf6a8ddbe68c0b622a92bc25ac189b58b107128c387aa1f425569cf566961dc81a117ea8d57d9bb8b1263d3886d17a547919556dbbd8293b183c956084c4596bb8d13ef0054bfef96f537b87fbb1fcdcbd2facd33b82056221bdd9e0d9706dc48a26a76f6a6119b4d8e41386bb2519a2666f974cad330ee49d70765f713b251e7531373f1757e18b7639981ac7447367a4699d4f98c531b6c367a09025b6b2bd8307e4eef7c04b6ce56b061fcb6eb020476a7ad60195ba76c600b11d87a5bc1324ed2b181cd43601b6c051bc606d6c108ec2e5bc1320e44b3813d13816db4152ce374091bd87d086c93ad60c33872b501816db6152ce3682b1bd8a311d8164eb07a57f059a21d760567c37722c2b7db9e318030eed5b80aa1dc63d38a7ad6cd87d8e64447a3d1a9bd36e164dd2d870de76284739f4d3859f77262c3d9207176edec11be3841f8421959886e8588ed6b33432c11e015efee7c53e19caf90b575b3d8e264d78dce3f7f69b0c9f967ba1e919b172d127b4583bc0af22aa5ec3ae72e68e674ff6031df896012dd95494465695dec306f769e812f7943e8fbc45ae1eedbb3daf9ad1d315a2492a8dc9433f6f97408013ea8be5d34ca18c7efeb138d74939cdc8f1341bc006054e9aa3f58b44cd513354e9ccba5268dce339d6438ae094523bdd1999e405a265b394d522befc47c5426bf7bd73c57b2c03996387f55cbb8d43ae146233da4b675321c685795293b04038844faa93487f8ae94acca1d46e5f258d6aa55ee14e7b14891f3cb6d8fcd686d89cd506b25ead499be9e5a26a47872692741b246cc39bdb6cd6c35558cdcec05ef574bdf922a297559ca98a68e1f6df7bd92a44aee54488b0339fe2743baab6497663a24d2531a7e83120e9fab6a74fe06a5b69677109dff1ff6330fec5a320300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/eb5c5b40469783e43a10aa484a579cc4.asset.meta b/Assets/SerializedUdonPrograms/eb5c5b40469783e43a10aa484a579cc4.asset.meta new file mode 100644 index 0000000..fbb4d12 --- /dev/null +++ b/Assets/SerializedUdonPrograms/eb5c5b40469783e43a10aa484a579cc4.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2fceaaf36cb70e241b21a98ba498423f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/ec54db22ae5e5e448ad262066e0ab882.asset b/Assets/SerializedUdonPrograms/ec54db22ae5e5e448ad262066e0ab882.asset new file mode 100644 index 0000000..b38edf4 --- /dev/null +++ b/Assets/SerializedUdonPrograms/ec54db22ae5e5e448ad262066e0ab882.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: ec54db22ae5e5e448ad262066e0ab882 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e70214a7b84ba05082948424585b34688ba458055a0824404a801041aad4dddddddddddddd8dbabbfc2ab47d77666772cfeecd73b77b7bcf66b6ef9f7ecab272cf3cf39d67fc9999ac5c66fd890db6fe9acf66b3223684cd63a56c0d5b6dfdabc8baaeb2feb3efd4f36256655d975b7f9758ef06b3ec14bfe47ffac73a5b7f4fb3eeaa598df5cb5ab6d4ba968bf7735899f5ef69d66fcbac3bfe7499f57f99f555aca1f5a3796c229bc566b24eb10e2944cc173faa96cf623c5eb126d6df13d846eb6d99508a07922b5e75b2fe9a63bda916ef56594aabef16b03d45b45659ef965abfa9621596cc2542629333a731f10f665f7aca6b2f79ed61fddf54febb81fc7713f96ff87d2379cdf6f87d6ff0bba6e0df9cd085497edfc7bec6465bd7ad18cbea06eef96fbf91df6d63cbcb5a9144563f79dd565efb4b99dd3de8df585e7352c437998c01409617664de47590bc0e94faf64833fced6c46b173813cce720cd0671008bb2978cf9f0d0e1077958e635de938d64ec7ac3365fa7d22bf1f22af79f29a2b655bdf74b9533e1b2aaf7d53e8956fff8e8d64719bb5c26c5029ef0be4b5505e8749ddc64b5d7b82fba0baa8341d2e658e9361f4d23c57dff3f7d9f27e84bcaab8a8f41a25bf53f96c7b8ffa78b13fa5d30419461f706f716cb838892cf56d912bdd8be46f4fb43936541c35f6a795bb8394b78d8778ec688731b2b3bc6f2b75982865f405f7964e8dfadadf371a9944f6687955f1992465a932a69dbc8e8dc7437cc39f8d03715376339ed5d9d448659763802cf5fd0479ed2a654e7685db5e5e27827027cb679334e14e8e87bbc35cf9ac08c852dfab784e7185d7cd19dfbaf7aa8c557a4e75fdaeab53dfbaf7ea776d5d69350de8a2c2e8effa76aafc7667f93e07dcf3eb4ef2f90070cf7fd701c8ee20afdd5972fb53b6a5644c93d79de33cc78c73be8b4d97e10f04f796bd35dee2623c03613cc8f55ee515c57826c27890ebbdfa5db278cd90d7e9f23a13c4ebd924ac547acd92610d06f7565c9b6cb265343935890eeeb4df05c85772dd695f2cbf9de34afb39f23adb95f6b3e5b518c8de453e9b27efe7c4e33cec54f04c7da37ea764cd8d3f8bcd97e16de78acbaef2f910f09d7aceafbbc9f7b9e0dee2d6f44e5b8f66ada53c9557e5ef99fafd9ecc5967ed29df2b7d2d19dd2fc5d9c794dcdde4fdee525e1eb8b7f469a664ec2eaf7bc8abae6e74a7e75e80dd02577aeaec41da596c8f443b630b417a7039435deff7043274eff70276a07bbf08b1b7c5f2770b5df6a6f459006c6181cdacf97e3697e6aa8d5322af4b5db2cbe20cc76c96cf96c86b698a74d6f14f96cf97dbdfb652797a85ad6b8b1cfb790b99afeaea8b652c79b9a8ea7bc5ad1bb8e7723749b957caefcbedfb98e4c772801cfefb7c97dcc52eb98ba5dcdfe577aadd934acfbde5b5425e572561bfd2c5bec4c55ea5a32e8f79e5962c8d563367df46b55796a490a97ebf465e9b7afc5e7d531940e7b5f2dacc6398cde4b52a4098cd6d5bd8baa1cb1656a490596df36d7524d081cb3951ded7c86badbcae93fccb5c7650e6c10e52e9b25eeaa2da7195b62ead659ab30df2bad1a90bdbc7a55341e6748a2d658eba2c26cbab582973b69f4ba5aea57638addf9432f795d7fd5c3aef4fa7333bc0fe5dbb6c601b5e7e97ccbe0eb4e3d766a22dbb8dca8f9b5cbaad8debdd6a37f05ba58797fc70b064b1dcc578b9d441b13dc4f55d21b8e75750ee887f5bbf6dab6cab0f78ce7f3b0cdcf3f70779d4f5309668b35c4e3908bb5c86bdc9feb6ad4acfc35962ded3fd965f41dac5643dd5f607f9bb2358623da6bee3711b0eeef9fb433dc6ed488d7e56b8ede626f9ed51cc59feac89db434b55f71f2df5d99b39f396aa9706c47f135375d431f67d07a5cbb1f2372b019795b67eed7794df1c27af27317d3d7b02e020f3233b311e761f35be767c92b0549974b22bde07c6e5b4192c7557e5d829cc9967dcdff267aacd7da6bc9e23af67c7bf1d972d9f9d21af6749dd2a98a36c66a783e7fcba4abe1f01eef977a7c565777b573e53e3654a575d7a9ee78abbae0c486667e7dbdff6547dff0b6cb61d5e74c93d9625b7db0b6d3913543fe1225b4ec7ce3ee55c2ce56c96f797daf71d953e97c8eb65f27ab9e4b89a39ca7276857cbe261e9ef8463de3dfaa7196a11e754bc6f12a5bcfbab1ababe5f51a792d03b2e5386a4cb573609bef4af08edf9782f8c2f825d3e55a796d99223e3dc177fc7a5d80f8277bb795bcde28e3b69639c7f3d6dab6d2392f89ac9b98d64ebb8c93f737dbef3bc9b289dd02e2c4c350ed3b684bb7ca77d520ded2ae6235e0d90df2596dfc594cd617ec3657fa0c75bdbf1dc8d0bdbf03e8a07b7f278bf70379df4a950977b9e272994bd71ae62867d8dd89718dd5b8c21ee5232def91bf5de74acb75325db6249175af3e2dbbb590f7f7b9d2f27e575aaed7a4e503f2dd06906e6a2c63a3267df7011cd6cb770f2269a9de3f04e4eade3f0c74d0bd7fc49996dd549be051242da1fe302d1f4b8c6b6ca32b6c55de264bcb27e4f57179d5b57b9f94d7a152ee0e1ee43e25afa72591dbc72577470f729f91d7a793c87d96e9f54d273c65ebaa0db72f73da3abfb7ecb6fb1749643dc7b4b6de438d1b3ccf9cb6fe0273dafa7e2cd1d6e535b67f3cfd991c3b8c1dc0126dfdc0f8b398ea0bbd04be81b6aadebf0ce4eadebf0274d0bd7f95396cbda76ab7bec6f4b60ef587b6fe7a625cc53730ec64f3252a2ddf7071567c3731673f67939d3e3ddded9f0b58f2baf14d5b7e916a67be25e51d24e58f06f7fc7ab02bdc83ed707bc9f1af6cd54e6e219f8f93cf997cfe36d3b6b77aad707df70e73b6a7de73f17fdf652baa7f02e3f22e7807e3761873b6493e90cf0f0769751878a66b73a5e2aaf4fed0c5ef10296f0cb8e7df7d0cf45f2c9f7d24afd7c6df755ae84adf16408f4ff4b622740569e6bb8da4e2fc698a38fb29938e60ce32e908db0e7aef9744d697f29b0b937cf3b5bcaa7ed85752fe91ccd97f517dc26fe5fd51aef7aa4ffa749c7df742a08792cd7f33d643fcbf9757d5fffe4e867334738e89c97eaed7f9074fedd874df9d20753ac6693fe2de4a876d545da46cf1f814f6f1a3bcfe24af72bc3076ac8b81b2df64e359a9c24a12afd8f1cc398620fbeaec67797f9c7c3f4ede9fe8fa5e8d73fe22ef4f707d7fb2eb7bd5cfff55de9fe4fc9efd06e4f0fbffc5e31653e311bf836727c9677fc4f9f47b50be3bc51936fb9339fb77aa0f77aafc6e3cf81d64a0decbf9f3d869ae389d2eef8bc03dbf9ee192abda52bfb8de2bb967baf4fd4b5eff91d7bfe3719cf424f80de0c9b6386526b5e9ff491967c9df4c04f7964df74bd6fe57bf3d5b5ecf913226817b4bc6b685b6bedb4ec565099f22c8ef6cf09c5fcf93ef27837b2efbdc24fac9b659ec7c57dcce97bf7dd3c36f2f90d70b5d71bbd096d1bfb51db7fec9ea927fe56f982b0d95cdf277176bd2f562909efcfe22a9c31470cf75b857dec798deb62f70fd7eaaf3f7392abc2c796de0d2ed12e62c8f1ac9abaac37436d9d8a5fba5f16f947eb1862efd2e75e9addab4d3801eea39bf5ece9c75941a4352f2af70bd9763497ee73863726e2976a594a77c363a82e7fc7a957cbf33b8b7e23840daff00d9ee8ac9719a1818cbaf7b06db2faa2dde94252ddbebf4bb1ad14f8e61c5ae91efa7837ba5077f3ec325ef5a97bc4ee039bf5ee792a7dae2d7cbe733e5efba81e72a8efcfd2cf97e7b6ff14c9a465bcbeb8dcc5937df68a7c140e9ff3070b38b6dab146c95dc9b10b637c9ebcdaeb4bfd90e77509e1d2e77d770c8bbc529afee791b79bd9539fd02d418d76dcce98722c7ad62b7cbe7c52efd6e71bddfc515de1dae7875763d9fed7afea07c3e07dcf3f7aa1dabc6c7e6bac2b9d3194e4c8d6f3d249f2b9f994ee07bf85ee9ad7c1c944f13f48f53ba8c63097928a97f5c372043f9dd29dfa7891af99334f227c7e527f8c175053294bf9ae2720f73faf3a8f1b87be5f3f9e09e5f3b82b095dfd67df1b027f705cf2067e5bfb2ab935fddfbd6f2bd9a6b5079d26bfea82f7bde3d853d7702cfa11d4e07f7d06e673ab9d4f9beddc59cfd337e6fe5ef5c59ffe7aab68d4a93bbe5f7fd5c9cef76c9dbc3292f4fa59fd2bbb3ebf70f33e7bc940aef7e57785d34eff9558d5d160079ea39bf3eca9c75e6a3524e92be474a1b513a986ef3eabd9be50de039bf3ee04abb07ecb41bba59de2b39a9d24e7df7189276f07d3da59dd77220691f43d60dc2c797ebb7c0f5bcbd7cae7cdfd43c16f4abed24bf517e6a9de5fd5e2e595d9db2ea9e7773865d1786473fddd8e3ccd9dfeb019ef36b2f608faa3dd8d3b68b02d9fe2b48d2ffa9f36d7c8239db2f4f48191ba48c6371194a973abf8c27a5ac5c70cf65c9798a827735bfe3dfe73b75aad3ed29c02a951fed33cc59decb31ffd8d3cc59deab390069f3b167e5fb45e0ded2b9508d59eae29dcd1cfe6db1de52c636483c9ef3118f175cf190e3fab1e79df1a893add8bfe8fa9d1aeb7f493e5f0ceef9f565f9bc04c857cf151ffe5ef97126b355156fd5d6e817b7cd29caaed4f595388bd8b6f2fa9acbd65f93d78e2cb1cc55beb5af02a6caf7f775205bf1557efe03804e6a3e59b17a03fc4ee5d33940beaa93df04dfbd09e2c3af6f31677dfd966d47c3df747dff46f2ef47bcea62a97ef7b6fc7e29b8571cf8f51df93e0fdc73796a4ebf9d531e537ee7b3c03d887fec5df9be14dc737972fd8b925ba79f62df281e87bab086837b2eb397fdddf023c16ff977b359fa657e135758efb9f8be67eb3fd25d4e374911a61c5b8ea93510ef4bb965e09ecb55f387e3e4750c73d63d3ad9ea5b655f1fb874fec0963d2ac7f99d27d94aefcdcc59d76f76861dfbd065371fda616eafd6518c97f77d9d3ac43e03dc54589fb8c2fa0c3ce7d74f5df1fbd4257baceb772d99a3bda49ed7a5f1674e7b1a75aa530e83eb0493f08f7de4e289c5e713d7ef547ca632677c9e75c9f918c8b1f4dcde9d066aee09f2feddfe7687ce2e591fb9646eeb7c9e32ceba676a9c52d9f8e7cc69e39fdb3aed20cb4d26c724457f13b67d74b2d5b7ca6ebe70d9c017b6ec1d5b38bff3245be9fda52b9dbe74861d53f34479e0de0a73b4f21b9a2cef9bb874fd1eb054617deb0aeb7bf09c5fbf73c5ef3b97ec89cedf89b0409fa1eef970700f6c7cc70d4e398253b2f4560cbe76f1c4e2f3adeb772a3e5399333e37bae47cc31c363efa51979c6f809e8af7bbf2db2d2e595fbb646eeb7c9e32cec9ea09355ef683943d10dc5b3a8d51734b5ed7753694bf536d8a41ccb9f6c1efdc9fca733f3267bbfc473b9cb1b2ff3f56ce87c794ef6969723d63435cf27f92f297817bfe5ee3ab1a53edf97ca70cc7bc82f263fd39fe7b35365f37263f34fe6eaa9cbb8c6d077ec7af2a4f963247dfd3733aab799c5f5cfc7eb1f98d2b9671dbe0e277560a7e6a5de0afe03b15d66ff1677565289c43fc0d3ce3d7dfa56ecbc1bda5dbf8575d72ff90dfad0061f3eb9ff27939b887e5d65ff27d0f973c905ee21b1ee626795fe00a43cde98db0798d3fd5c5610b90f50778a66480710115beb8f2e77bcb3438d61966aa34d0a6cb3fccd97790f396b17f5de9ffaf1ddf0932fd27a872548da75e9422fd955ce983c0a7ae84fc71e09ebf1f06e4f1f72b7199ba675931677cc43d0857c8e7ef93ccb5c654dbf62dff3c851f0c9721d32eab810caf02dcf36b16487f591665358c3fcb92737b598d98a37e51369ab515f8762bf02dbf36668e3a54dc5bb2271deb92ad7ed7447ebf0adc73bda45f6a5653f95ef971cb3c9a05d67a653505cff855cd51ad01f7960e1365ff67522912969a6bca01f7304cd5a6ad04f73c6e9d9ddf67b592dfad05f78a319453e592e3d22b6b6b1047391e2afc9a92d885e2aada20e21eb4418a5e75c629953cedb3bfa50c39de97a5c64673c03dff6e8b7fd93139769fd58639ca00716f319a5ce1fcae6edc56aeab9bbc49cade0dbcf7ab83dc1f23abad4b87b652872f90ef6ac03d7fdf338db0555b4ed99c1a072d03f7960e53d4bc94aa37fab2f818c9912e597d99331f7bd565804b97f62e5dda4b5db6b874c989eb32b5bd4b564e9abac8b23e4ba5f744706fe93055d547aa8ecb4bce5ec98b495fe1986cd3647594f26bc13dbf7672ea9dd5c919e72c35c6dc03dc5b7a4d5be892d3c525478ddfabfcaac6a4e7ba7ed715c48bbf5f67f39d56e98a4f8a783b9f358a09bf8aa956abb08455b25c5138f394f2babd95fa65ea8dadb8e8ad444dcbf80e573cd81ab6d1fa69996e77a97962efaa1a56c0f2b5bb4b75117e012af422f17789f545b910ba3e2b2188bb1282e0ca5558ff9581adb1aaade753c4ce5a7c73ac72ebcd1036ddbaf25f2db69a1b0bacff9c52e65bc156b05aeb6eaef577a590b7d8523bf1cb5451e2db68b97f33db9269eff2b5ca7aa280565af71542c339e2ef7542d332a1fd34eb598dd8736c355bce2658d70d22b4c4b85759ffd685395722d3eba8dfec0b7b6e6f29a69269a2151bae7daeb0c5ff4b91fa4811d1245c2ff361c35cd122393a2125fe8fa15dc8f046ed342963a84016733ccb67b9a2dd3b3b81a0ff3826c6506fdf36efe1ac30695cf464787277133188a7f0bb7b7c79d6c2d117fdd6c819b502962b9a92dd53442d19582e2f47b4d4fc44a151a386795c5137fe980ebf701d9c13227efbbb72f19dff04d84a547ece041055f75cab542b0695e73ca17c8550cd1d192e7ab5280927596a56ca927195dc11928b1dc2665affaaac8b26ff3b217df3b8328d45122556c0a9a2892552962e91447f666ebde4116c7bcae4c9d4a42e16f164ca15adaace498c190b4b34b7b2649b4b65b77b6f9bb57aee495f7dd2489f2ecd44baa4131a96320d7429d32cecec93babe48962ecdebe2154f17fe47cfb00562dba974c00836d4116c1eb66df3776b849412eb5bff0cf960c3207711a407d80a31c2d42a60081b6910e671845b6bb4628d9abab4e20a2192b7d2254e8bfaa99cd3336e3e6ad2c985a0116adc6d92d6ad7e4dbbb18e9e7027584c4a4ff519e7589d839dad7725d6f765a201ca9f175b124bacb0b9bcf12284783fd3f98be464f978cc766eb25aaaed04d5bea0071c54338c78130df13c6eafed356620ca38776668836786a65836eb10349b35c324770c2ab93926b95350c92d30c99d834a6ea9cb3662b4776128d9263ed4a2fe35c1faed0a2b32eb44ffb9d6fabd6e68267976e9e239bb7415d9259be9068cfc6984659356bab4e30fbbe99474275d573ce9b6c604770f28b835666d3d825a5b1b4ce59e01556e8b09ee1550703b5dfe10e4e791e60fa7e489c2ee960839e9f507b299a63f2012ba4b423cbc84d6dbfa5513de9f6dc2e27f909e401f91c7d20b07cb55ed75e922cc2bfc5e1a6faaa4972adbe85245d832d66f4a16565f95260d93a7473f96ac67962c042c353ae85243649d307b66d09efca70577f3e9ad69b508905a8efd99be77964a0f8c62471d4561e825a1d4c576b3af40c4a084f17198f8bf260a496a4cbbc492b431a1c1589082708eceda85e9f463eee66a102df8f4cf562ae91a239960a048bccc068c256c275dedc413769086481e2732d81505778d3510afb13aebac4898d6827ab72235efe1d772b6d3598ea0dacb6302e2210ff1622db9c25a8207865948179d85f002344f5f2a6dfef7dfef9f48b08afeb85574d505c0ebcba13a13e455507e626de20eaf1f1e5e375d78bcdd54a00b8f37440a99b645e10eb30f1e66770ce2b06445bb0f883d7401f0be199ffa0edae3eda913ce3bab2358e290e1bfd69f04e12d70e1bd30cd476a34ff7b42962fcdb375c2797f817b2505ea2ff4c6246f1f54721f8de45c51741ec4c2edf7eadd12a688d3b6cad82cabbdb037b3e79355b86bc45c32d748cd4bcfb6aecb841665625ea5cc833b43f21277074d36cd15a5d4245008d67f2cb8d34b9628a2478b229a97e6f3ace7b61bc5249102e522a4215a6d7808d8f78ac50cc60f12ab15a9dd08a920c688d0cd62835536dbe872152f69c66a4a9a3775c5589292a62f9665c705cdb2fd749279961dafab52b8ad722fd5665db5d5c8183c9c6d754583a83ff7a9d7a2c1ee9e7179cb84a7902d6f26e367e1ad17a6bad232e075d270e68a56ea72f1366861c0573cf470018ea9fa539b1d268aec30c64376a08c159601faeb2c894f20f0fc9b30b9cd4d6c362bb6242f12d970ad78cc29d9a95b2e3e2d67fb88d69fdd4348b0b7c6b8bde5e8b4e1e3b27ca14acab1ab76b8e00198e02901050fc4f2f8d4a0797c904e720b711bbc853518537ba7a06a6fa793cc4bd49d3525ea9698bf127508267cba46f8bd59fe84e762596186171b4962d57998e099ba3cc6cbf62231179b6dfdbfc6fa051f362911b93f5b5486f1d220dbcaebe5d6bf6a641f5c7dbfc6fac276b2f3a3e7509d9edc286605358a7c2cdd8a35e9f68bcf742bc084efa2113eb5813fe18558dacdd6a51d27a81c7a56c8bacd591a668bfe70b6f070ad15738aa522e5aa45ba66b37d2d6bd9dfbad6585f678b7aa042bccb1647c35689b2d64f9a0ec3f49fa3d3bf19d0bf1868e827c4e158b93557536ec57c965b2374c279ad348f210d1fbea58cff86cf480cdbae3a6cbc33ccbdb778cbb5567c3f471840595d5bb9344315e4288d5eb962806135abcf0619ef2d707fe06af1ef781385871df73b0bd2f0e24b40dc0d2ff547dff0e21b44e588a59261688f35b0b6c70ad53d34856acc4fa1ba834e32cf0b0bb0bcb030adbcb02356beeea92bbc1bfa2b5f4763c2f7d2083fb7913fe16374c2f9c81bdf6326658d9e64786d2c26787140c1e3b0c2b3445378329f85e7789d706e8a4b34a6e8ab7e9f80a5e2524d2ab6dfca5f2a16e984f368967a81dd0f173c11135c1650f0242c15976520152763a9b83c682a4ed149e695115ff69c50e9f1499b29a2d532de4a89bd455ba1465475d3ad0271a9f870aeac7cfc547153312dca755af410b97991d56a5ae4591bfe7d95f8d68f5ed3347ae58a7176be6aabfeaa5ebc61315bc8e60d90e0e31e7ca5780317fc5c310950c85257b099d27190d85d987fbf5492abe619aaa928c3360aa58bc48c33872f3296be69c0d782e784aa39d63cd8092b392b34256769637f25e7ce3ae1dc6457695233cf7669f20dd8adcf4a5c9fe9ba2c24267baaea350b4d1412c2c846ab75d948cc480df7608c99d4b39758cd572d742aad2b1af99f5e625b68ae2d275b2edac3f0fd20b11d14efc64e16bc5709f23c7e25623812cb746b44a60b3b9e58c69b8165bc4a4dc6dbb189bf8c3753279c1bfa5a5dc6eb25a01326875bf335b8e6b3b0dab74a57fb36ab6b03ccb61eae4fabbe2fc642acd685d82ea1be77869c5eddbe0b660c351a63c86beacf1866eb84f3eff9aaf4a0adc1393ae11c125f529e8989feb9189af51a345b7ca299a713ced3896f0a1364c8753e2678a3cea8789b78a663e8d4eef5abe1383f21ef8a85bc8f2e64ce669608d15ee357244a3b7bfcc14fa8bb6136b6afc6c6b41e13496c6c77cc04f6d3984069337f26b007c66b7f1d2fde7881cb35b285377a3518fae6993f3e2dc53b00d9e25b7f3c17605a1d80154ab0dbe19c1a83e3487e745888e970a04e07d811723298adad3af8b795625a81cfbdfbd16b4f4caf4d3abdbab9f4aa9673fabcaa9be3aaeed2d7692f4ca783743af54ca253a6692dc2343b58a7596ba0d93c2bc452d1eee19e11cbacffaa7ddbf1622cf44374a17701a1a7d222bd8ab6042b4a0ed514259f34f757942cc1227b982eb27cae66b2755b2e07e8d59c4b2d8870b6650a1562fc60a5a81ae2d1b7ef5475617fa70aee6cab3eb52b8efebee02cc5e01cae8173a54f38a5181c7ede5c90aab64c2798d7a8477a119c64bdc9329d60de163e8a051ce85a8e813e5a03ba750b7fa057606a1f1354ed724ced63356a9fe853edbd31e1c769842f6ee94ff84accf88ed7e54cee37a5e64197ba66c297885ca9e6b74bc5938dd6df1575a37cd9628b13d540f063c9151882133408fafa44b04a279ccfd69c58f7c2355bc30fb7f33f5bb31a8bc4c99a48dcea33126b30db3e25a86d5762924f0d2a792d26f9b4a092ab30c9a707955c8d25e2199a446cbfb5bf44acc1849fa911bec2a7f05a2ca79fa5cbe9fd186f38c7871a9dddae6cebc365420a6fe8af934341a50e6f8a65a006f793d7d7617a9eadd3d3de9f8c7734f8d84a89f0b8e121ceb24a363fa1aec7d09fa3417fa14ff41b30e1e76a846ff1297c23c6eb3c1dafce29d295bb455481a7437d76b2f7c1b4395fa70dbf8da79b9f70f6c5905ea0417a636b7f48f7c32271a12e127c1d8a8d6f7b0bd94cd1542d910bb1d6894ad13fc6fd310d2ed269c04bb6f8645a719a95ec0118d28b3548bff089f440ac44be246889bc0953fb525da1d9c69fda07616a5f1654ed83759279eebc9c21ad0e7e54a6ff56c72158385762e15c9556388762a4ae0e4aea302c81afd124f0dcb6fe12f8704cf8b51ae127fa147e0426fc3a8df0377d0a3f12137ebd46381f78f623fc284cf80d1ae11b7c0a3f1a137ea346f8b53e851f8309bf4923fc5e9fc28fc58cfce6a0467e1ca6f62d1ab573dafb53fb784ced5b83aa7d8246726e367f18e69a7af75a297f6beaf9f196def661e1075cead6d2a70a1f9be93c51972ebc86be43a7928faafc24cc9aeed458d3ef3e33c1c998f0bb34c22b7d9aea2998f0bb35c2cff529fc544cf83d1ae17d3bf8137e1a9698f7064cccd331c1fc6ccd84b6e060619d6b441ee3cdf932b173e56af1afd562ebe632312b5322775c51c3376af0940fb2664bebad92365d6159fb10eba91fadcfc0b4be5fa7359f23e1be05f176b3dd95b4bb21ba5588e90ee59e89d9c0031a1b78d2a7819d8545fac1803670b6ae9c150b8fcb49cb596cd5e95c31dfc2e76596094b59e57b8d6af232f921cf65f2c3a24ce66b9be874c5caef7374c9cddbd68f30a46dfda8f57f33aeb2afb6f5b998cd3ea6b1d9a93ecbadf330e18f6b8457f8147e3e26fc098df0337d0abf40279c376bf8a14a819a3517626a3fa5517bb34fb52fc2d47e3aa8da17636a3fa3513ba7a33fb52fc1cab66775053a1fcaf43228922d3265ada8a0781553ccecfd4eed955525d6537bfe6f85b82f1659938f2c2e111580bd9df32231f8b15cf85455594fd57ce146666f84972d9a63f6e6f6d9a22828952bf7568a27d5e2ab32108ebec229971527aca2fc8e6e5e8a25d1739a241ae933892ec392e8f980d5cfe598e0177469cf7d52e75a37958e74f113de1558c1fa2256b0f2337bfd0f5a5c89c5eb655dbc78322da81b29b5ed774f9fcda2abb0f47f4557b2f84cffab31e1af6a8477eee44ff835589abc86a5c9eb69a5c9b5ba7078a1f78617234e326b7d1d26f8cd8082afc7ace8ad80d9ee064cf0db0105dfa813ccd39e1f89ec764ae302fc38a5dd8459e1bb1a2b1cd7d99f15de8c097f4f237cb14fe1b760c2dfd7083fd4a7f05bb1fcf301967f36a7957f6ec38ce6435d99c6d70a718721ee0e55214a6b55c7965bdd80f49dab6ec7b4f848a745bb3a2db86313af79f9dc94ed259dbe0e77603a7cacd3a1add4a1c0fa7fa9e80cf1df6c60350134b813d3e0139d064d405af01d4778cbc84f687761e6fba9c67c8bbbf833dfbb31f3fd0c33dfcfd332df7bb0a2e90b4dd1d4c067d1742f46e84b0da1165dfd11ba0f13fe9546f8609fc2efc7847fad4b5b9fc21fc0d2f61b2c6dbf4d2b6d1fc4b2c377c98aa6fc0c174d0f615a7c9fbc681a9ac1a2e9614c871f92154d85192c9a1ec134f83155d1b4ab08cfdfee088f62e6fb93c67cbb77f367be8f61e6fb3366bebfa465be8f63c8f8e1bc419a634f60747ed3d0b9d2279d27313affc3e8fc9e169da7b048fca18904df06d34f249ec6d0ff1910fd3398d67f69b4decda7d6cf62e8b760e8ff4e0bfd735824fed144e2779f91781e13feaf4678e71efe84bf8009e7fbcfb885efe853f88b3ae1f6cec3087e7e94b47ffc2f61c6d92096a45a2bc870b5f632a645439d16f16a2d3f83d5da2b980e8d743aa86a6d5806abb557310db6d269d094c5abb54962c26b8dcf91aad774e171036eac31e0263dfd19f0eb980137c10cb8695a06fc061689669a486cf219893731e1cd35c237fb14fe1696dc2d62c1ea85b731ad5b6ab42eeee54feb7730e1ad34c237f814fe2e86646b5d0ee0feccc9c7e9134772838dd9dbe3a6668fd2bf8725506b4d021de93381dec784b7d108bfd6a7f00f74c27991d1162b32daa555646cc622d15e4728db5f243ec48477d008aff029fc239d703e0cdcd14b91916418f8638de05cb18577fdccd127eed39cd939fa4e3a5eda39faceb15473f4c175c5e6e83fc16ca98b2eb7f9b4a54f75c2f9546ed758c0a9dccf30c9dd824afe1cab1fba07ac32bfd0d9bfd8c67b59bdd87f901dd4935b7e0fcf96df5358fec024961f6c9f777d4a7c89194fafa0c6f315663cd9018de76b2c9bf6d664d3867dfc65d36f30adfbe89a44fc689bf1a23b542696a5e81634658be652b64fdfb36f313db6d1e9613df329ff3b4c7edf80a9f33d963afd34a9b39fcfd4f901d37a5b2c75781e59219b882a3dcaea76074dd733f0472c92fd75bda06dfc45f2272c9239ba48f21ca8fc0cca1d9b68f8df68e0672ce401589fdcf6aac9ad3b5b35b76e0bdd59568628657ebd397ec13418a8d3a0935683e9e25f35622725bbd59fdebab15f315d06e974e9e65197c4c337fde8f41b667883358677615f7f86f73f2cc2db052c137ec7040f0928f80f4c706e40c17f629cf3349c1ff4c9f92f4cf8508df043fbf913be0543921f10c9df3ac1bcf42908d819fa472798f7430bb17ee8b0b4faa1ff62d8876bb02fecef0f3b8b219118814562645a9188e9c2e19118a589c4b93e23918509df5e23fcc91c7fc21be884737bdb41579cf21db89cbbf8948a36b62ac873d80051e1ad967f3b5721648b3bbbfae12de54af14615b9d5629542b62898e3cbc0ed4125bea0b9d2d53250e1f0c124bb8a5d56579cdb7b5795fa74ed6b88b1d851c7826fff0f77a6b75b99f10a36be247bbdd0b08241a759b5b7562a09f9d6d77e576e34c20c66b4c6603afb3498adb02c3506cb5263d3ca528db1488cd34d2cf98c44132ca5c7eb529a6fa0a11f225d200757f9ca17debbb077ce4c96a63949df0e10eea8f6b06adcae9d39608db00c3584ea7c5723ecaa46938b96080dd529cd71d96b64efd48f7d35d5d1e3bdd309417ba7cd7492f9f745016bb3e63ac17c0a6d628c65642fc7165800933214404b2c80c9190aa01596aa5382a6ead658aa4e0d98aaad3126d332c4a40d564eeca42b27f82905894777c15df8fce4b2b6bab0c5694f9a02f0dec1fe0ac07698f0e91ae1ddb7f327bc3d267c8646f8993e8577d009e7dfcf8c05dff2b5a34e38df037896174b4d729659270c49b106c9965c7f483a6356ba8bce4a7b88efecf5a41b402b45d507b52cbe059fbdee6e392bab7be2c782bb607acdd6e9c5f767b475c9a96b25d9e3415572cdeb005fa177c590cfd1203f36cf1ff26e98f0b91ae1770ef527bc3b6685f3025a610f4cebf9ba5c5fe04feb9e58fdb16bd0faa317c663b7803cb2311ebb6b789c5ae88f476faca1bc07d6505e905643b90f96cb167aaba3e24763ae139ff9c963db6000f7d4658361fe00f6c54afabd3250d2f7d309e7df2ff26253fd70c1db6248166b90f013ddfc20e98f092fd1089fee53780ec67b4906780fd009e7c6b8d40bef24c73a0dd409ceb66e4bbd08be1d173c08635da6617de3187fac07639976992ed36a6127c996db61d297eba4f31776c59b9bc6466743304c2b34986ac6fac3948b092fd7087fd1a7f03c8cd2de5e2c270992a198e0950105e763382a34386ef589a300d37a95ce68b84de6fa52be1093bf5a27bf23d32d419e215aa96ad3c3f81b7fce61c3304dd6e834e112781bd46f620dc742a9d48522da8e9ac5f07e421ca10931b7af751be3877084b597d35ceb8eef58e37f1fa7b531eeffea04239a435acf8caa189f7bed9010b364e163fe16237569c56fab63dc61c7a9d24e330e6a7c6ef7e7b21292a6119e34a33063a8d119036fdbaa4de097590f17b11a19a9729fa6be3d166e2dd638d487bb5a0eacfb097b079d39f60bdb1c8bc49068551ae6b82ec6dd239c888620c6b81e31c664a163c6b8a38edbb69cdba210b9cd911d6ffedd1cb1ef77b9f5649618682e97473af867ba21e6f7a8d98d82ec3609314f573f8cfa68acfbba4fd0eeeb184cf2be41258fc524ef1754f238ac2fb07f06fa02e3b142e98080eda309188f0383f228c2246f0a2a792226f9a0a092276169787006d2703226fc900c089f82093f3403c2a762c20fcb80f0693ae13c8d0ef762da49a63a76d209e6435b47c43233d5b133d68f3e32603f7a3a66e0470535f019584a1e9d81949c89093f2603c267614c8e0dcaa418b393e3326427bb60167e7c400b9f8d697e4286349f8359f889012d7c2e662a2765c054e661584ece1096f9d8e8fa290147d777d5b563b922317e204ef8cb0974abcd32bbace0542fc446e3c476c38a85d382160bbb63924f0f2a790fcc3ecfc8907d2ec0543f33a8ea0bb102e1ac8005c29e5803f7ec800ddcbdb0c2f79c8085ef220cf2b941212fc6249f1754720946f9fc809497602a5f1054e5a558597b61c0b2b61453f9a2a02a9761942f0e487919a6f22541555e8e49be34a8e41598e4cb824a2ec7245f1e54f2de98cd5d11d0e656622a5f1954e50acce6ae0a6873ab30c1570714bc1a137c4d40c16b7482f968d8b55e04739f0c447025d668bd2e038dd6b598695c1fd434aab01af0868035603506fac680a06b30d3b829a069d462826f0e28781d967ab7044dbdf558eadd1a30f53660a9775bc0d4db8841be3d20e47d30c1770414bc2f967a77064dbdfdb0d4bb2b60eaed8fa5dedd0153ef000cf23d01211f8809be37a0e04d58eadd1734f50ed249e6fdaefb03f65a0fc6547e20a8ca87e824f7b66e1ff4a2f2c3b8e043b1e47b2860f21d86097e38a0e0c3b12cf248c02c7204967a8f064dbd2331168f0564711426f8f180828fc6043f1150f03118e42783423e1653f9a9802a1f87097e3aa0e0e3b1fec83301fb2327601a3f1b50e313318d9f0ba8f14998c6cf07d4f8644ce317026a7c0a26f8c580824fc550bc1410c56998c62f07d4f874ac03f54a063a506760385e0d88e34c0cc76b01719c851571af072de2cec640bf9101d0e7606abf1954ed7331b5dfca80dae7616abf1d54edf331c9ef04957c0106e4dd0c00b91053fbbda06a5f84497e3fa8e48bb14cfe41c04c7e0926787340c19762823f0c28f8324cf04701055f8e09fe38a0e02b30c19f04147ca546706e8e751b5bc828a74de75bd28ac41713d9ce968a43ac2b5f4b5e02fe35d7fa05dfcc73b59804b57fa1be4f3e35fa698cefa6eca4923b80c72a5b3c0b16761b2139eeaeca1ae99d093f8b7167c24c8488b9115e8595169f072d2daed649e676f185066d1e47aba1e20eef33bc63780d16de9734e15d8b85f7154d78d761e17d4d13def558f5f74d06aabf1b30e1df6640f88d984d7f17d4a66fc2d2e07b9a34b8198bc90f4163720b16931f696272ab2e3c5eb0fde4a5fa49e2bb709b4e306ff7ff1ccb8c3fc7ed18a95f6848dd8185f72b4d787762e1fd4613de5d984dff2fa84ddf8d152abf67a050b947279c9bcd1f5e0c38c970f4bd580ff7cf803ddcfb7482790cfff222b81f2ef87e8cf3960c707e00338fbf839ac78398daff6440ed87b05cf42f4d2e7a186bceb3ac60cdf94730c1b180821fc504670514fc1896ae0db282a7ebe358ee6ce845eb24b9f309ccce1b6505b4f32731c95b0595fc944e32ffbeb117184926549fc62af1265999a9c49fc19a1f4dbd689ea4f9f12c06bb5950d8cf61b09b0784fd3c06bb458660bf80c16e1910f68b98e0560105bfa41bc3e09ba8c7e6b0309730dacb03b91cff4b15b7cee2dbad6b4a3bedc842eb2c3eb2d0292176a974c0c6115ec68caa4d868cea15ac946f9b8152fe554c78bb0c087f0dab42da07ac425ec7b4ee9001addfc08477cc80f03731e19d3220fc2dac48ee1cb4487e1b53bb4b06d47e0753bb6b50b5dfc524770b2af93d4c72f7a092dfc724f7082af9034c72cfa0923763e6d12b03e6f121a6767650b53fd249e65b2bf4f6523e25d9eae8638c479f0cf0f80413be4d06847f8ac1ee1b14f66798dafd32a0f6e798dadb0655fb0b4c72ffa092bfc480e46400c85798da0382aafd3536b832d04ba6e9870bfe06e33128033cbec5840fce80f0ef30d8db0585fd3da6f6900ca8fd03a6766e50b57fc424e70595fc934e726feb76a817eb4be268fa333648931f7090e6178c45415016bf622a170654f9379d60eec23acc8be0242eacffc3040f0f28f8770cf288a090ffc0208f0c08f94f2c6b8fca40d6fe0be3b17d501e5b301e3b04e4f13796b3770c98b3ffc17aa1a303f642ffc5208f090a990f656b218f0d0839a613cc598c0bc8224b23387790751b5bc9cc389173811c43cadc2602e375ccb4634e13c498532ef3732a673afa6263540d74c9ce53a7c84bb273ed11c10d7582f9edc4acc4edf8d49f84001ae176d54817002f252765a094dc0a133e3903c21beb848b531a82960e4d7492c5290d01c7c79bea04f7e5b75e0457e1d573334cf04e010537c720ef1c14720b9de46ceb767ac011f79698ca3382aadc0acb8c33339419b7d605c08741667961d2194fc6d618ece280b0db60b077090abb2d26797650c9ed30c973824a6e8f499e1b5472074cf2bca0923bea1a1683addbd83c563f7b6caa8ad9df24d57ccf8d855d4563a14b42ecbce88035003a6135dd6e19a8e93a6389bf7bd0c4ef82a9bd4706d4ee8a095f9001e1ddb016fcc22ccd76be1399f273b6bd96d501a833193f8276bd48e09532e987888d7fa759ef67596f560b93e64ff4ed44dd565afc6b685adcf0d730fbd4b4d5beba13ddb158eea98be5e175b19c67b55879a6b333e82af1eff8e916fc7c363b834eabfb7252dd99c3ce530dab240f757e5311ab15f1e2729df4e212f8f7fef4c024cd657ccbe0e5e2ad9329ccac6edef32d397eb787ee8191de0bb32718a21da702eb3736ad3556a1b8c8b28d2a91e6766ce7ca739edddac67f8b3fcf943df5c462b94817cb31ae5842e6763c278b145b25e2e8d6d29942f04db2bc027fe52766bdb0982dd6c56caca7f41b2fce362c676a1be5e029177fe3276ed958dc4a74711bee8adb0c913a2b64ccf8dd867a8b496f2c264b74313936e4f22cfe1b7e8a6585257523e3272ac40fc7aef661e5901d1e0b5e97d48a66062cf578032b73655b1f8cfa521df5f19ef2c67441a3da88526d1b2c7ea5baf84d27b4aac4330fb96d9488c6e33e221fea4b927452b52f16eb325dacb7475a40f3844e15b294b31bedaafd335f6a5e9aa02f4d6ba71f16a365ba18f573d9e97871be32cfb3760c54ab61ba48b1e5a20ccc4c29b62da6e7729d9e4529f42c12396a63826ef1efbc3dc773563ad6d51f8be30a5d1ce7d55b499dbc3c0ece2107e350aee3b007218729c29e8b45777ab9ac91e68bf6312f6196881ce78706ccc37e880cc088ecad2352e8b2fe2211573b5e3532667c75e94471dea63e16c94a1bf83b3fb11888c562a52e16a393a62b5ececf16696c9f85ed2c95f8d3a5d206125b15e997a183b0785578e9c724964db60e559e4b27fff57e3ab9723016cb55588b46df7b8796055b37d3d82a7990ca52f12bbcff4f53136e87c56f35d64ff337ba11af1bd7589a7341c575eddd2ad07f77cab39fc12fc78bc13f3f311b82c56c8d2e663ba22997389fe78cd972645cc6fb288e9f58e562b1aad4c56a81eff44a1c8df2933ef53376958731599b7eaf6392685d97c8f66a629b29cc5ec7502c7e55baf89511b79082b50cbcd6b6e994d5f918a76a1da7dd7de70d3bf6f5933bd2e15180f1a8d1f1d899853106473d3a5788c5b95617e7c9847945d50ff6417e76de48ecdfa65f2a0cc362bace5ffda6b33e670c4ac4333b769cc954d17faf12f97ea9d5d74d2c1dd38fd5702c56ebbd8c1b3bc385e5f93c910a55d6b73c7f2f4f3242e29491b9988dc062b6c14b5f3e31377a1b39c6f365b21e5bbab96f2416c78dba384e416d928f8a2eb13e5271b54f679d247a026b347d046749e2bffd9c4ee93a0a8beb3ebab84ef019571362b83d16c37d75319ce63386bb8afcb8dac3984158f1dd018bef7ebaf8ce26ac3baad3a83b324160478cc0fe99aa53ec36d47850a3d0c76a3416ab03fcf5e1f1584d165f24a690bb8ca5e9138ec1e277a02e7e3b046809d4885a9f1ff3ba4cb605f158cd4df8d64f9cc66271dae42fcddc65cf78310a668f09a6b23ccad1de7158fc0ec2e2e7a7a7e11cc78dbfe55e0ec96bfb4cb504c663f13b5817bfbe2c799f9c8fdb52683901d3f290e4f3797e52614e5aa940697b4558ac0fd5c57a3b346fd9b3c765ae326259dd1c76911831d7cd9da4371b3611d3fb309ddea352b6a0f958d74c31665e6195795556dc5689a3ac13fb33c95220fd1ec1242c3e87632dc8e47984f76e8a45abaa5a53af7af11fe0ad9165198ce1642c864778e9f3e847e6a609db3367746e0a16c723b111072ffd3a2fb14cafc4483fa653b1981ea58be9544fa9e9f6eeb0f3a18a777da6eb342cb647eb62bb5bca74a51d3da31e57db09a3710c3696e8dcbb57edef9bb8cf6f6666c3bc86e627ce3b63713ed64beb20518b89225e6aa4c61e8d8a7b66ac16df948b16f3ce96c08dbee29539bb9f8ec5fa385dac8b03c45ab51854387ee34b91e633b0d81faf8b7dae6f3b57714ee68590aea7c14c4cf71374ba0f4a5bf769196cd3cdc2743e51a773beab9485a4dc1e0553a4b65e6b8a74a91763313829f98c43f09211d39e2a6fec82c5f4645d4ce7072819ec516d7fe541ba25653a3da8d9188953b01197e4da4db734e0faa41ffbe0719a83c5e9545d9c06fb8c932a3b32dd279c8b697d5a3a7d283bafcd1139c91eeb8adb67f0b6687a319c87c5f0745d0c2711952fce5851942ef3b1789ea18be74ca61f8bc167efedfa20c84a2b2a4fa55db1989f899526fa9471d7807352d680747e73bb61713a0bf37af45aaffb8b55b276563af1da1d8bd7d95efcaffcd4816a0e28bdd6719835c71e189373bcf899f859d166cee8c0022ccee7eae23cd2877d736bd0cd717b6bb9c6a5f989cd422c36e77959f7859740fee3a293e527267b6231391f1bdb4ebfcf8e792ca79387f6c2f4be40a7777f9fadafcceaba08d3f5422f9edfd05afdacf37296e45ecbf8f473f8622c961705597d00f7a64eeef3e01eb78bffce4f2c4ab0585c4cb58622590cd3ed632fc1627189977904cce252f94ea56771e9c6712916c74b7571ccf35c06fb1d0749af97528a697f59903221951776d865421916cbcbbdc4125b03922a96e98df4a71fcb65582cafd0c592aff74c6fe54478de24cbb1185da98bd13c3446f82a1efd6c9d97b98b3057fbacc0385ca5e330d0070795a6ab65df3953f34ee598c657eb34de96a59a85a35babbb37a6e9353a4d47a06c132ddda979a568c7c5d7a452e49795585caef552ce6173daa9cab9b0e7b32bb0585e87f55bfd957376cd9bf8367115e65c669f9f85a767a294f4fa47abb0385fef65be05e6fba0ed8c74bd1d576331b841178385753da5fa59270d53d6ab45abdff8a1b206a372a39775132a443fb9351e33cc9233934b2bb198dde4c5bfc66f8d5d9fedaeb5584c6ff69237b1be9a6de3c359a1affe66fc577e625085c5e016ccab551fa6ff959876fcb0e7994aa16a2c7eb76229e4df5f345ecfc7df4fd3f896a7d74aa9c162701b361e907e0cf808d40cf10bbb8ccd5c3ad462b1b81df3cc49de3e9923e7be12f34191188daa4a527ac77f3b4b788fda6309c9f76f4aafee5e87c5fa0e2fe5833efcf4eaeed4adf9c6d67fb118df3a72929062fba6ae11bfe12da05c3ef42a4631d4a9f0aad61de2a8a1e3cf79f8abac128b5bccdcbafa357e4a3c26e1ce2cfbd448f1a77f8c8355c795c696b918d9bfac10929782b41c2208d9f3867c3c7848ddf8aada6434552c742d8d21a0ad0163973a4e7b229b86c6628d658c942c8bf4104efabf16d3bb78aaf692a99a95cb1db18047933f6b4aadc5dd3cb4067a1bd29d3f18cf1d3add6d0133654f39c6f7e25f248229161d3b7c93979421c31a5d17f27642806aa3a514370f14013a715d84b9d9c3a855cc1ebe7fd792d9b851561e4f917b28b1f16d75278ab677a505cedeb94995c818c0ea4820e4c7822984f752226c6ddda8ca7aaaa8a8b98012d180e40b0e67b1959100f668ab38b0fb2881b517597511cb63f1f9f92883ebdb260eee7e4a706d35e0b8c0d5d68ff892955af1b43412d016b338b407a8adcd993d2733ee216eaf06566be26cab8b02b81ddbc6c13d4809aea3688f567bae16a200ef5450293c4409af25688ec4fb777cbc7c5944ecac7b7e1cd5c394a89a83526d9663c0300a98f8791f0ad32394989a024cf13d3ca280e8dcee71448f5222ea0a10d99df1e9d2f98d8b2c123f8a0f45c737fe8d02c47773e2101fa384b89580581da93ab173bb389cc729e174b66e66d5f531d524a2bd2871b6b0b85ac6b763e1cd8a6239301705804f8252ec094a804d4016e56af279d52800faa4531cd093d4c5fc2c31c11677dd8d468bfe4460434f51226a2c6ca8d692562a014501cf66d09e7a3aac2ca6b6878a02a01bbbc4013d43dd4c503dc2496c8388756d5d37867bc7978ad6fa6c91014b4576acb0028c0244fe47417c9612620fc61cf0f8882bdfc6b0aceef0cdd288f715db8331d8e7a8fb8adcc694bd6d940d8a796238270aa8ae0545fff3610de6f0b109e852a2c627a2d4706d01c65c5fa01ecc81e0e0de71e3c5f00e9f618cef92170578278271d71729e1b500356a7c2b347b03c628807a12345e5fa204d50a80b255885e477bd3c038ac97a9e78d6688b26aa56bc12d5f2e5525428a0230bec447017b25dc917ca7476169c40aff4da0f07f957ede88b7bb268aa0a3dc2a6bdd240eed356a6b9b2466bb6b45e0f1b337e2abdfabad066fb9155e14c0fdde3c0eee75ea4a001e011ac5d949ee52a560bd413f176ecf13ad1162a2dd691ad9380eee4dea91d8d916b422e6fd18bf28003cb72507d8b8914bb8db233b7dcf337fd4711fb9ad993d0050299ed6c8fad7e133c77391719abf057dde72d21e0cca4959cee578f6d7c8f13dd79e93a6e3568ea756674ec0d19d1c1fde7839be8ac01ccf6d991c5f15784e5ae5498eaff1881c5f0dd81c4f7e6539be9ca9727c0f03e874c6dd677212260f7392f69d73b4d34139da11ec1c64023c2789ff400e329b929362c82d27ad79be9cb4e79f7352769c73523894e4682645e2cee37aa7ef3cee3cfef6ffe77edd79dcaffb1d0ea19ba460b75ddea51e4fb2cba099d60f2b1d96e10aab7b4258b3e5ce6ff6aee1aa2da20bb5a9a3b5d2d54b44d269b1b4056de5f7a89b7c8bc48a18ae22af86939f3c30d48a0619ce565438970117b5f74dc2991f499c47009c1f9884b32092386f0638379b84b3309238df07383f3409e7b048e2fc05e0fcc8249cc32389b33d18d9ff9812674f0d4eef7b2f8ea043fb598c08ededc0523fa17696b25b99eaa099e8b530dbb038ac4fa9a7e416c996a3d31eed2e20ff8c0cdfc354f8ce06f83e0ba3545c8e968b50fd456c94552e92e16c4185331764ddcf4dc2393292383b019c5f9884735824713e0132fb9726e12c8c24ceab00ceaf4cc239229238ff0438bf3609e7f048e27c07e0fcc6249c432389b31ce0fcd6249c0591c47932c0f99d4938f323897313c0f93db5af70b2c10d67461f4687b20d15cacda0cdf90325ca0e12e5523955e6de02cf56ddde5e2d8f0e64232a902301c81fa9979ba80952af13eefcfb2af16df486de2a4166ff89126c2f0667e0bd7ba04419ee4000f7e7fa2c49a1385e9692a16c4c85724f5000fc4289726b897278f8037364d5d0246087bf86016f64f8f05652c1db19c0fb8d125e3709afc2faa842d4e5716f8dea244d23c2fa9ccc221f04d9f97f94503ba56818394b46d2b123b2b2f10760a1bf9b049370c28c0ce64f00e61f26c12c8c20cc6f00cc3f4d8249d8992483f92d80f9974930f32308f35500738b493009fd37c860be0b60fe6d124cc2a61119cc9701cc7f4c8219c56ee32b00e6bf26c11c1941983f0398ac814130474510e62f00668c1266eab1215b947df61e6189d93a8b08e54ba033994589722073f6d02b985ae905d7caf83b7a9c14793b2aeb7d1c206f4089bc9940be422c9eb217732d17f0a23718dc0264f88694c8d4eab0b895c2c3f3f009b6e88d227d03acb0517d96a1ceb3990833f4ed5428770628b7a244d93fc13aed238726cb01e232abc42c13197e9d9801aa65c98ef321854d56f79f0460370ec36ebd35a4a288b23f28559b50a2542edbf96c44f8931b7da8f00d0096d894129f6ee585d7b350492d93cc1bfe1080b6597d564ecec3b509c797fa53a1bc0da06c4e8d72bcd888628d5c7ecf4f429bc36c5705be505f6d4a606ff510bd566843505eb6a044a9f624196afdbf4a065e221aeffc690865265995730340d8320c8423fe73083f07085b85d1174aed62183f6491b4bae94785f43e50466e4d89b41d8b3b72c5b712a966f61639d1f686fb14d8656b4a88feb79820744c20c3590e6cb28d4938491db3c9709e0370b6350927e9b201329c4f009ced4cc249ea85445776029ced4dc249babe920ce7bf006787b07be6def74420f4fd20db13e11a80b6637df6cc9de3ef8428c946e0ef07283b9982323f92283b814d503a873192395436e1431dc924eb5296b238be2ef53b9f0ec7d4a3e89ab01164eaae61a0848bada6b3596c8adc0f7399f5a30d617428c9505e06acb21bbdcb0c9c215f64d5d11cdd04b1d3e54a296a32e34b0a2a58c2f6e811d89ea72580d93d8c26518dd8b5b7baae41a4b6015557dd4c25693d4e86f64980b64718ae5ddeb7ee218349b6807a0680d9d32498844e8764307702307b99049370090119cc1d01cc6c9360122e6e2183590060f6360926e1b22b32981300cc3e26c18ce20e1ea301cc6d4c8249e8644806733b00b3af4930096729c9606e0360f6330926a15b0c19cc7c00735b936012f680c8600e0130fb8735e8c1038f1fcba236ce0dc9bb83cc5dab05183fcaa14499cd924f5da45e7b41d854225b7b711ac03ba03e9761b927da082b24b269b6a120db0f3409266153890ce6f600e6a030a6307819ba4e2cc0aa0dafdc24c3d71be01b4c89af0bc097b8fe820b8b6f6c16e539a1ff01a0db85e1a9c981feb73c35af070887848170f87f0ee13c8030d7ece610e100315973e84cd01cca0ba3d4542bd7f80ff9999d1b927a7544cf11e1750074a86940a3b8d9d95c0034bf7e5cb9bccc5c12f685c8e62d9f03680bc2719a1915bed30c19bebf41d55418d6a281b8a707745620f7f12083781d8038cc9cd5bc51dce26c0a40393cac1e50aab38fa3bca06505003a229ce5d185e1978f6435775f50bd8c0cc3a7ddbb5b4c14272cfa039ca34cc239329238db029cdb9b8493f4504f329cf781b272079370926e0a4986f34280734793708e8824ceef01ced126e1243d72960ce71b00e7189370921e264f86b304e01c6b124ed2d3cfc9701e03708e3309677e24716e0038c7873100a7db7a6f8ef5d13256f61f1bdb7c05b4412750f7d8f9b047b1f53717829f18345ba8566b3d27ecb1931d37320dd86a11255075564b3d9c404d36dc311ec09b48094f9dd5024b4dfd7666cead2109bd897bc6a866d141169f642254c2914e32a8bf01a8934d844ab822830ceae100ea1413a112369ec8a0ee0fa04e35112aa1b73119d40d00ea3413a1123a2e9041ad06507732112a61039f0cea1a00756773f7a121b457b27d68ae0668a787e17becdcb28fabc2fb4a6b85f3ac3d9d1cdd99ce5600e60c4a98052c7116dee9645364fdbdcafa8fffdb8e08efaa2e13fb307065670ac4eb45102bade2621db30f799c2b7a5e6a3a9ab0b098489508dbb27822cc34671396281eeab81ad8f3ac703c9beae1c85b32a79c8f80251653e26b03ca5678626b485ecb64009b01fbdbc5dccd56a2e8b4f80fb0cdd9f5b9e6c8594a92ee314b564e2e0230e79804338a87df2e0630e79a04338a87dfee0960ce330966143d43f70230e79b04338a87df2e003077350966140fbf5d0860ee6612cc281ee7b42b80b9bb4930a378f8ed1e00e61e26c18ce2e1b74b00cc0526c18ce20eb32b01cc859430791f6e5739d066ffc839e2c9ef123760a9a6434a76925b3780744fb3571947f1c0dbf96038642f4abc2d255e7bffe30a313062cb2e67849bf636a202c7805d2eaacf2161e7541c61ef9cec8cd6d66087f8c5e6ae238ee2fec77b81ec5d12d6c2c319627878a56b3e68a2f5b32a116294a7e3fa826cbfa43eb3bdf3f44bc27124b2edd49e06b6b9941265aba4550f61a3a81915ba2c6085a594e87a33a7e337f7fd58ef385350eff41df55307bf06b659569f6bdfa3bf356a4f60abcbc298f0e50bb5ff3b9ba71d08f02d0fbb71a477feb2fd402a85c5aa496142cbec4ce5a7b4356877ae08633512569727ee9118c55d12178332b3dc249cf991c4b909e0dcdb249c0591c47915c0b9d2249c8591c4f92ec0596112ce6191c4f903c0b9ca249cc32389b32da8d9579bebdc4d38c541e6dc7d27b0d435f4cd79dec2dcc06a5cd31b6a42237a831e7c9c4ce1aba4c4b70d4bdc096c9285920f14d732b5a67896f573be356595005c227606e3561cca201dd9e2ed1e00f25a93b6191815c903a106812c5f6512ce9191c4d90ee0ac3609e7b048e2bc1f64f61a9370164612e7c50067ad4938474412e78f00e73a93700e8f24ce3701cef526e12475e526c3b914e0dc6012ce8248e23c0ee0dc6812cefc48e2dc17e0dc8712677fe69ce5e40aa4f2a54b361b4f381942d6319d075aa5fbd6a76383b35425f46722eb7e7e0950ee1796d30ddf37acc622516929c38f9b982f77102b15e34e659176ba39161404fb9bb3fc3a8aab3aca806d1e4089b207b04d6fe569b40f879c036cf4c0b036bd582780f1cd02edaa477d14f5a3a54e04303785b159609e2bdb87008fcc637e0c807790b92bdc095ba464eeb42f02b4079bb35886b42f4f96c94781aae810936046711df1f600e6a126c18ce23ae26100e66126c18c628b73388079b84930a3b88eb800c03cc22498515c475c08601e19462b7344f8ad4cb23ef964d0143aca9cf56f84d50dd9fab785c00e8f0ec30eebe1a8c73554f066023b3c268ce505f9f5b1b33cd9fadf5ec0f68ea5af5056b0c4b308e7584c96b2a552a165e28403ee8114bd32b139b0c5e3cc5dc84a585793f5bc7701767a7c7d2ec872367ca2d8bb2904567a82192b8ae68af273b5c8fe5cdc2a5ab40f53a1fd1b58e989946807b3c49d8ff9b8ba2da44c8cacf37388978a5920b859857d8a4ca5b4eeb23abfe428fb7bce06167d92398bb209cb59b2698cd9c0824f36692102e98640642d827500e72926e1cc8f24ce0b01ce534dc25910499c6f019ca79984b3309238bf02384f3709e7b048e26c0916719d11c658a737af8ffc486ef3f708b0cd334d8219c56dfe1e0530cf32096614373abf02c03cdb249851dce8fc6100f31c936046d141e13200f35c936046d141e17200f33c9360467108ef1200f37c936046d141e15200f302936046d141e10c00f342936046d141e16200f3224a98bd3430f523f553e44f423b55733415dc7b00dc8b4d864b580c90c1dd15c0bd84126e77e65cba5509a63aa6590ae16b8b08b1924d74bc0ab05e6ad20813a93b37d908d37280f332937092f697c8701e03705e6e124ed2d5c46438ef0238af300927e9c61664383f0038af340927e9b62b64387f0738af320927e96218329c1dc064c7d5e6ee584788966cc7baeb80a55e4389b6ad443bccfa7f950cbc446cbe16f5f5984fb338c26bc3d8b52e755fa988b937a10e69cff9095944901b8022e03a73766020ccf264fda4b74196bfde1494a48d7a32945d8155de10c68601aa275f2637ab9cc5d41695ffadbefc05c0466fa4049bed025b217cf06b8498b8177eb2d1d3280e441f07f0de644a1140eac44866a97f029437d7a7ef7d68e3a2644bbd060294b750a2ec2d504e63d58eed56ec9fc733fe22ab61cf81f3b30d97d61d2539997117f20a46782c1f593faa298b03be957a3998db977e8e688996d6ed6943868fccfdbb03c0775b18abe9868ade52c8abe9c82a9db700bedbcdd9a82a8af5f7785052de413d919c78946e62b68ef2aef3dd815dde4909b37d0abb5431259d32aea21a496a06fa427785d164c706e9529f454ce82246b616f96490e5ef3677e32ac2263cd9f2d9ad00da7bc22800b0267cbc0020ac94c80a801100e3bd9418f969d9c57262436dee374d586635650544d62c6f0d2aa0fbeab30b19fd8d7a5b021bbc3f8cac9c5787b3548cc3db27c744fd5ccdcf80453e40ddbee4c0268a80cb98bd5f27ff741f31c166e3b4db9c7ceb0bc205d8649bb04c07301f34673320c23626d908d11c90bd1f0a03655e9221e168cf5afe0eacf2e130267e0bff7313bfa701848f8431fbc3ad7192a8b96b8512f14d2c66b1f562aab7ca7ac79bed952cca5b9a2f03601f0d67dbaa7ad8e3986c4aa20328251f33673ba0282e199c052cf1f130769f2b0cdf0efb51c12b02f09ea084d7873927717949b8dee1f282f57242728b21dbcefc2390d59f3467731fc26583645dc73d00caa7c2f0d9f47e2e2661539dec7ca26d00cea74dc2393292381b019ccf988493f44871329c7781aae9599370921e784f86f33c80f33993708e8824ce4f00cee74dc249ba953919ce1700ce174cc239349238e7029c2f9a84b32092388f02385f320927e9b60064386b00ce97c3183be21b9eaf138370b52cb4314db2a1b7b500df2b26ad5c233ded920ce74ad06c7fd5249ca43b7891e13c0fe07ccd249c0591c4f924c0f9ba49380b2389f37380f30d93700e8b24cec6c0a1f04d4a9c4d84007b5f78fe332e397ab33e5b819afb2d731749136e8246b648fa5a90b1dfa644db9f254ea839bd2f8b185fd9bb4afc9b4f05d70a919384edc6ddb043f06ddf9dca8e47013b7e279c5516f9e14fba91cd589e05f0bd6bced23ec2ae2459897a37c8f6ef998292b4574e573981bafcfd703c3aeae11c37b24c3d1458e20761386b717798298c7b0f711fa3e5c25dab2ad23e4517807271b339abcfa2b85d7e2db0c60f2951f20597c5cc5e366aff680ec37c84ab23582a360136f991b96b7aa27824de6300edc79468db30d58a5c24bc8fca65433ca4816032805b834cfe09f51200ef4e8405913cc6e121608d9f9a04338a3e990f03989f9904338ac738dc09607e6e12cc281ee3f02080f9854930a3788cc3ed00e69726c18ce2310e7700985f9904338abb6f5c09607e6d12cc281ee3701b80f98d4930a3d8337f04c0fcd62498513cc8ee2500f33bb3373421ec13916d68720ae8607e4f3d8a947a747db8587a45581d35a202d90a8cadff503f13bf5ec691087b47648320eb818dfe48bf23a113ad3dd2cee1ad663b8989decaa4fe9a84b64be6add90094b13f5102de86c52736dc131c254228175d0406f0f8a6136b854fa75dbd4577eaa329b0e29fcd590f1cc5e19291c05e7f09671e7378f8f39864131e39c0127f35c9d77d24650b95acf4ec0170fe66124ed233d5c9703e0732f7ff4cc25918499c37039cbf9b8473442471c64066ffc3249cc323897333b0ce3f4dc249ba872619ced500e75f26e1241d7b22c37926c0b9c5249cf991c47904c0f937254e7ea3b6268dde70c7d600d33f618c78aa0d7bb802f1beb6da4abc5a3b5017dd436dde0035f8bf2665ea519413c464997a5b8093353408e7c848e26c0c70c64cc2392c9238ef0565699649380b2389f37c80b3814938474412e7d700674393700e8f24ced700ce4626e11c1a499cbb039c5b998493d4938e0ce7d10067639370e64712e77a80b30925ceeeccd94be21c6a19f704719f48e95ef04fd83b229ba55c02da9f4d29b17670612d4fd2cd8ce25acbcf00c866a6808c627ffd4d00b2b92920094b4c3290df03902d28416eeb02b98425fa2179f75822b459b221bc26c019ac25256ab5527824fbaf1debf015a8df5b512254fe74ca5aab85fdf1da7db28457f61f2b51cf0605c1d69468fd2dc28ee25aa3550065eb30ac34bdb5c3849ec96465e807a00068438996fb564397c36a97d3617c22840ce2402a881d01c4b69410d5c91943c3f793233bd6612c80d78e125eb6a69cf4b7f48070351cd9d283e341d9d9be3eab21e7896c840eb16427b23d035076a044d9d255567255f9ae204b235a3e760259bc63188372f0283b5d5d1ded46fb1f0067a7309a43e92d82212c2dc99a4355208b77a644db9739fb43150c6e3d35cf1263efcd394908e462cbd814f96367494ad8371a4d85f92080b90b25e6f8be8723c36f329115005b4001d0358c3adddb2297282e7c9d0f50760ba3f5a9323c2f2d4b5d3b7efdf7263ac6808cde3d8c9a1f6b7d266eb14f38b84c86b314e0ec61124ed2d94d329c07039c3d4dc2493af74e86f34680b397493849ddc0c870be0770669b8493d449910ce78f00676f937092ba8191e16c0726dffad44f27d4cb16fc8463f2645bf0df022c759b302cd5bbef3ce11e8a643e4cf900675f93708e8c24ceae00673f9370929efc4286f32916c7b9ad493849cf2522c37935c0d9df249c232289f32f8033c7249cc32389f33d8073804938494f1c24c3b937c039d0249ca49b4d93e13c05e01c64124ed2031cc9701e06700e0e63941e83e9cce8843d22325fba4f409b73bb70e68beac1c5866c56b30c58e2104a7cca3f8907bc4cd8a192bd5a7e12bd19a21880974b098fbb00397de2f81df7f92817aeb22178c8913979b50310f328217adb0035ba0b5e26819270a82920a3e89e3d0e80cc370524a1cb0c19c8290064812920a3b87268320059680a48c2e5026420670090c34c0149e8f04a06722a0039dc1490845d4132909500e408534046b1233813801c690a4842bf373290e70290a34c0149780c0919c8d301c8edeb7394078a236d0091f5b44b00ca1d285176627edc5a8745f218c62e00e68e26c18ce2318c7d00ccd126c18ce2b9026d00cc3126c18ce2d2e8ce00e658936046b1026a08608e330966148f616c02608e370966148f61fc95c5614e300966148f616c002cb3c82498513c8671308039d12498515c8db61d80398912e64096b8fc74a9f5b2c2b1ef81dffd11080b03b2fd11fe01c8275322e79b4871cb85e0a6333e4f5ee378163d84dd01c2299408b97bc1243117ce559c268b8172ebc7dcf17f0d253c32df8c56a0669f4a09af6b42962f133fe57b1dfdb7a6763f06f638ad3e87e49c0bf5091bf1645b9edc0a50ee4489b20773efbca5df03612eab12cba6aaad72930b5b456ba30f53813d0764fb9d29c1aac340e3d9dede1625beed1e17c87ddb9237a8a2d86b3a0158ef744ac8eedd8b6da07c370f5e4d4dd496afd13d84b92158fa3783126b2f17d6a5e233b8275219dbf01fabbc6e00363b338ccacb5b7f2a8afdfc3c50c6cea244a95ba2eabdfa22444b567dfd04acb498126dfc6ce0612ec4213864f7a3c2d70fe0dba53e5ba81319dfad6b89e80c909697fda950ee0450ce0eb38e2fb794982f864c6a997befe2d076e8226bf8b70075fc1cea3efd223160f7dfc9de1341c533378c31516f3e21432339c07c2cc8e0f34c8219c501e65301ccf926c18ca28bcd5100e6ae26c18ca28bcdd100e66e26c18ca28bcd6100e6ee26c18ca28bcd9100e61e26c18ca28bcd8100e602936046d1c5e6500073a14930a33858bc0f80b9a74930a338f4760080b917254c1eb4f358113258b954b0f876180ad6a230c6d3a1e579df4a8f345b936da6f710b0c4c59470fdef404cd81822dbf67105c0596212cefc48e23c0be05c6212ce8248e27c00e05c6a12cec248e2fc10e02c350927e95a0d329c7f019c6526e11c1e499c9dc114c5324a9cc1762026444bd668ba0958ea724ab4f1e9dd456c1d984c0be5802632cb5cc3e2f85650e2f3b7f35b147797790c5862b92928f32389b20b282ff7a644d9deba29b66e6a195f2ec045adb63e5f617dce3d8dcad93ea2942c1777d1cbdc8d40e65e19466f9d1f6667bb122eb2d4adb6d4592a78703ff8f18c7bc1710fa312e9c551cad4067c3511847b10805b614a76279d3727cbeedf829273551875389f770cdd87a3335513e8636089ab29f1f1fd67e108e62cb69e7157c12a46389649e6fad21e605b1346a33cbda3baa37836e5b3006d2575fd9dac6c543125f56caba2cad84d4133682d25c66c0d467feb29095d0fc816039e08aa9d2a730b00c21a9dac0060006d3525dade02ed54619fce3d884b8528b55a68a548006ec74bad7fdbe2278b8aacc2fa327aadcf66a084ad31bb6820743e242b1aee05f65b1b4605862d6d29120542156d05b69eaa02db01605c17cee05c7ef80d7bb24cde13e05b5f3fc3c65eaa28428758b20aea29807603255ae542038746d438537ce429da4321d9a032da18c650489e84153f7f409d3810d2783cd91aa1e6c02ef7a144d98325da65ea6654746db40ad8e8be9460db4ab005d6ffab64e025027148b649e629f73840b85f18d91c6b144171a4d50f19caa900e5fe9428fbf84039c70a930be1037b954c4d7b54d3b63d3752b53d770425e9019488bb30e76acb4a3167e4dea9c669b351f43afe15003d9012a8ffb37e0971929db9960d706e3209e7c848e2cc02380f320927e92e9e64386f0115d4c126e12c8c24ce7301ce434cc2392292383f04380f3509e7f048e27c1ee03ccc249ca4eb38c870ee02701e6e12ce8248e23c12e03cc2249cf991c4590d701e19c640489ef8dbbe72a7b039cc1e6d8aee58d2f100e151610c840c95b0124f588dfa78676bd06c3fba7ea638bc78c6477139e19500ed316158a93707c528ee74783d4079ac292849ab1f32948d804fd371f589d2392017c57d686a80551e1f564d6e0f2473411b642d1e42f5d393aa8cfc02d4e42750226c0f1096d5ed0baf5e477d66e83b80f1c4306af1547b6f4f913f086d77c3d15468fb00b427858bd6bb0708695544e603d21b949f279b8a96b4c14486f60160b5a7845135e5ffe766db7301c2532911c617c5d4c3c256320fce0100df69e1e02b74b537a3ec7a7811c0773a253ee51fe7cdd7233f92de1ea70398679804338abd9e3300cc334d8219c5dd37f70330cf3209661477dfdc1fc03cdb249851dc7d732380798e4930a3b8fbe63e00e6b926c18ca21f5c2d80799e4930a3b8fbe63a00f37c936046f1fc814b00cc0b4c8219c5f3072e07302fa48499cd82aeb08ce261b64bc1e0db45f5390fe41c2226ec5e921d80f32240793125ca1ce6f474b715a8948540996be550dc4501061afd639c8a01ee4bc218364e2c18bc0c1c13f6a0c8868df703682f0d633a6e685d25562a6691ec252f51dfd4ef4b50755d569f65ab33b3135a2459667f1e58e4e59428fdafd2206ca192391f760338af3009e7b048e27c0664f42b4dc25918499c37019c57998473442471fe0b705e6d12cee191c4f93ec0798d493849b7a822c35901705e6b12ce8248e23c15e0bcce249ca4437964380f0738afa7c4a90eb5ad877d93c87c8cc701783750c253bb2b70afce898c6f1a5dc98a5999ec4eda7b2a940981254200dc4eba9a457909cc6080f8c630b23b96d913cf2a221c5322c3b908f48b6e320927e9141d19ce7d01ce9b4dc249ba0293ce190ce0bcc5249ca49b0190e17c07e0bcd5249ca45b5590e1fc0ee0bccd249ca49b0190e16c031668dd5e3fd31b5e56641236eac95664de012cf50e93fa48a328c7e6c9fa484300ce3b4dc239329238db039c77998493f4083d329c8fb238cebb4dc2497ac02319ce4b01ce7b4cc2392292387f0338ef350927e9018f6438df0638ef330927e9d1cd643897039cf79b8493f4ac61329c27019c0f988493749d0719ce0300ce0729710e60ee9d65f91073a9c5833b2baa78c63711c05c70c75bffaa125ea3a41e77bb661101ef08baa40f5102efc092fb353b4bd6e84d8c0c0296fbb02920a3b88b4d2f00f211534046f1a4d7dd00c8474d0149b85e8e0ce47000f231534012d6ee6420ef01201f370524e1da6232903702904f5082cc7335936a51af787cc3a022eb8b55cc5eca60efcd1452a3690255a3290b349a9ea4c4af1683799d16211cb9279b14d91d8c8d3e65124cc2957564301700984f9b04338ad375a301cc674c8249d83f22833916c07cd62498842d5232981300cce74c8249d84f22835904603e6f124cc2962919cc8900e60b26c124ec2f91c19c0e60be68124cc2a5dc64306701982f99049370a7303298bb01982f53c2c4cfd29c6cfd5d2e30960aef252e38fa67691ecae2605fa104db5d809d6e7db05478d0c3cd2feaed4c77b22d311a03acaf52628d9f963dd255084479c3d43c90dd5fa3c4e76f67f9286e0b580150be4e8932d8cec851dce2e27590c9dfa0449badb1527fdb0a11763ac9cad0bd81e5be4989b71da8f3d78952932ff2525b5d84b27f08d9864227001b7dab3e4b52e7de4c84d99d0ce50bc01edfa644d93b7076275d394796e15f0380df311d7014376a8b8179a47729012be731d88bc29afee47d27329c39a06c7d2f9c46fed0f01bf964f83a82ecfe3e75fdbeab78adba9645e2437b7278165b2f268af9943219c47e5410bb021bfc208ce67d6299e9a5811fc5834fa601fbdc1c46d309f31e717642a3b869f53060a51f86317c974e279470fe9dcc46ef06603f32152ca1970819d85b01d88f4d054b581490815d05c07e622a58c2e11232b03b00b09f9a0a96b0d74406760400fb99a960a3d8c0ea07c07e6e2a58c2d95232b0d700b05f980a96704e9f0cec1500ec97a6828de254ca2100ec57a682259cfe23037b3000fb75186354c3583d1c3d4986ef5a80ef9bfa9c3e716ebf4e5876926dbffe32184ef9d69ce194281e0e540cacf2bb30c6f1bd3b8a477145c85a6099df9b849374bf5b329ce7039c3f988493743766329ccf029c3f9a8493f46000329c5f009c3f998493f4d80a329ccdc194f2cf9438537939bb2749a27850ea16609bbf9804338a734e0c58e6af26c18ce241a93f03cbfccd2498513c28f50f01b3712397f0c909c28b4405c1ab88a52cbed7fc10368571d7057b37faa5d6fd74319451c3165b381658fff94b813dadff74cf63e24081496c03ab144fb9bc52217b95f5966b56cdf2f882fdff7183682e0d2247f4bfc65bcc6bac6ff831823cf48d6c0eb3f7d29f65fdad9652d40a2439e208b762eb592de35e573c84d596262b589588b173affd9c5813c1a94c1c4cc8e3c501e6485dd731dba9639aecf9955b712e119a5459df3414e1d8d56e4eac25b853ee9ed3c41050b5d0aab1b0cb1a2bf6eaf8c39c18df88ca7618b1df4047921ce168c263bc568c7df0f0f5c728564b49981b4a8e184d99cd9c47322a824a0a37a158ac8db41a4e6c86a05d627da336d955f1ca1d6a7d16e31b8bd8c35d43ea06ba86c8fd1256c93bf53cb54c6e33c9a5fdce0d23a62f292a3266eda962646750fefb65627d4999903a2d654c53c70fcf392d92a44a6e3e4f8bff72fcff803544566e018fefd00cd85e6a8dfee4216711d54ddeb3b7f1b65eccec134eca44b9be3190ad3713e52894572ec2cd2d34d3ce3317f7bf60f996953b2c5d3bf7afd1164a3bb7a5d9f3232ed9533cc44e9f0eee38c7bfaa9435b0b2053bd7af607c7bc4d4247a88f6062e6dbc75b75cc4b55c485dc5d41f5e7ff2362d2f9efea6e499acaaffbf9282b7227949f18f2333e5f1ccf4efff597946ad9c3522e4e9a5c9fa7fd6aeac3dd628c1dab32853e7ff2b6be7ff758af11ee93cebb776ebb1cc2a76abac7f73797f4fc8628dfe1f8d6107792c960400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/ec54db22ae5e5e448ad262066e0ab882.asset.meta b/Assets/SerializedUdonPrograms/ec54db22ae5e5e448ad262066e0ab882.asset.meta new file mode 100644 index 0000000..800e185 --- /dev/null +++ b/Assets/SerializedUdonPrograms/ec54db22ae5e5e448ad262066e0ab882.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fa2c39993efd4564594dd2f7b1e7136e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/ec8ad3d81455b204cb7ac768abfeb116.asset b/Assets/SerializedUdonPrograms/ec8ad3d81455b204cb7ac768abfeb116.asset new file mode 100644 index 0000000..5b98386 --- /dev/null +++ b/Assets/SerializedUdonPrograms/ec8ad3d81455b204cb7ac768abfeb116.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: ec8ad3d81455b204cb7ac768abfeb116 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d097c5d45f5f8e7755fe9beb734dd5f6969d2344d5b28d07d816e24692994d2a649da86a64dc852dab2effbbeeffb2a2a20282a2a2a2a2ab8a2a2a220a02282a2a020a0fcef993b9377de7d73ee7bf7dd9c9bb9fdffd24f7373b773cf7ce7cc7e66a643a1707e12539d5feb44995828a689b5a25ad48b5dce5f0b9de34ee79f7ba6afaf118dce719bf3bbd2b93755146479137e2625863abf973b674da2d979b3455439c75a79bf5cd4387f2f77dead71cee0ea56e77f8df354a293f3d25ab148ac16abc490c4a02c22d6c9979ad4b504842bd1cdf9bd40ec75eed648a5e02385f2d610e757b973a749dedbe928ad9fdb2036ca60ed74ee5539ef348a3a47e61629b1db9b0eaa840c933cf457c701ead8cff9df5dfddd51fddd4dfd8d9fefac8e03737c7e107aaf3bfa1b08dde9f3fe6075fc87f3bf8bf3672d3a8777df56e7435c791db6fbc81aa68ec3d571849279620efa7755c79159c2eb27631492950bb36eea385a1d0f54faeec8f3fb635c46895b913c38fe13e9331a7dbb3bba0fc7821061d7f1f89e271edf73e3b1c38d2afede50d7c7aae378751ca7643bcf0cb8575d9ba08e43b3e835d17d4fcc16299b75bed9b1419d4f52c7a43a4e56c77f295debd079585d749c1ea48eefab6fec345cd7cfc3fd5dea7c8a3a4ef5c4d7c1eab97a753e2d477d72b13fadd3bfd5371ad0b9c3b1d3661f593ade3ff0c4fb07eadd2b5d8e9d9ef28407db9f496ea19277521ee1f8d0138e0f5d5d3a273dcf65d341cb2f52c7ff28b98de81ce45e1b306c9dd47b4fa8f3e9227bded63f877b25ae9c6e9af54cf73b5d06bad7bbcc15e9b63c238b9e3a6e3ff2c4ed474a6e9d92abc35fea9e2734e791480ebcdfe491fbb147eec74aaece23b48d67d373963a1ea28e87a9e35cd19a8ec72f53d7e6a8e3a1eaf88948cf033e51c7d9a977075f19909b5f1c1dee89eba1eaf8df2c32f5fb47a863f71c9fd7cfcc0ba1f37c75ec91e3377ba8e38210dfece9da42b7773db630338bcc852edf6ecd4807474ef753d5f922755cac8e4bdc23fc89ed409e67b3836cba2c55ba6859f35c5d7af455e7da2697a7eb228ef4e8d4dc863afd4fc96c41e770fc545ddf8dce41d735ee777a3cabae1fa58e2b3c3aaf64d47995fb5eef5ec8367279cfcfbe56bbe1eb59e4caee59a1aeaff1e8363fa577b745e85dad472ee9a14cb1e890ce589e830e9a6db9e7b993d1391c517a967f3beff6d27c07a3ebf0ee1e740eff8fce51d7b522d366414e27f46d557ef552f97f2f1d9feb4466da33bd0bc78ee85a4725ef65f5de3122b31cd3cf41d8f6a273b85f9163d8d61bf473bedb7b9ecfbbc78af4fce788943d74fd89ba769cd2a7b3484b5b09dd861a957aa7b59cd9e09ef7d1ba1cafdee982b87471f53b4097a71bd5b15298cbd94d88834a8f6273eadb235f52d74ef0f956b57a668b27dcab53727a0e55baeb7cac4aa4a719efb3704dcbd5e59e6ee39c987a76c285eada367554f5824457915e466f45d7e1a8ebd0fbd0393c5793923de839754dcbd0ba9ae253d7d575d84d79809f9ded729f1daae254d4bb6cfb3ced917bbcf0b7db0657ce249596c549ae9cbe9d02ca6974e5247579d3ec9ef7d5fae87a992e1374fed45da4e5e542e747a81e90e88eaec1b3a778f866d3cd8fe35e57cfd6fabd8a5fa1bf3117c9eea7f4d07932aef3ed41f7e05cd7fd5a3ce1f3d345d71f7a67094f7ff41c1c4f0b117ebf7b5dd4f14c15b65e22adcd23cf1d3be93fd247d659c268a70374dbf36cf77e3f6d7fe7a030c137340b6c4be7aa7b07a070ebfcb00fba7686bad637752da1999de7899f533df7cf47324cf72f403a98ee5fa8ae9fe6ea3e40e73b1779c2d2e2d1b58f48cb67c4c5996195cfe06f9f1e202e2f51eff6f3c4653f152f6ffac8bad41c97033f54e79779e2f2724f5cf637c4e515eade00146fe3d435dc2fa8e37710e2a0c376257a06c785be7f15926bba7f35d2c174ff9af4b81ca4eb71d7127189f5c771795d6658e533f8db67e4109737a8e3f5ea68aaf7dea88e1394dc3373907b933ad6f8c81dec917b560e726f51c79b7de4de2accfae6f33d6debaa0f26a1fb061ad0b963b7835ff491759b30dafa10dd6f70bb48b7f53b44baad0f1199b67ea7ba87fbd3547f626298c8b4f5e1c84e86a87b77a167b0adeafb7723b9a6fbf7201d4cf7ef1569b63e749eba7e9f30db3ad61fdbfafd99614d0cf37c5b97b17e71f98087b3e6abfbdd77a373277e867aeb3ff5c2bf6c7cd0959fbc549d3fa4e48d54f2cf46e7701ce5f9ee28f7bbc354ffd770959e852a1b874d75af0fd3630c0f0b637d6b5885e7b9cf88f4fad4673dfc3fe7b195d1297b6b0dcb23e81e0e5b8148af937c5e5d1f83e2aa005d33d5b9b2717d541d1ff3f0d3e30fe7a07378ee0b487f5d8f7e5c1d4f4dddeba779e8f8ed85f478c26c2b5257dcef10b48ea4c3fc64963007c993c68af43c69ac6b0723fcfa67bfac9eb9d4e799afaaa3b693af28f9baecdb87cee1fed7d4f978cf7d3d6672738afde002a487960def9c9b43f8bfa18ecfa8e3d7d57774be5e87cea93222df7a6cbef736299d26a6db8f3c77e261946e1b6b5b3c218b7d7c531dbfa58e9b95bc491e067a2cc9af3f2bdbb77cc295982cd2fb1026abfbdf56e749755fd59113533ccfebf123d5a79438c8f3fcc19ee70f56cf7f479d4f4d7f5e7c17c981f3efa5c2d6dafff01cbaa6db0edf4ff119adf3ba69e9df163f10e9ed3bdd86d3633fe7a3f730037d5fd7f38b3c619aaece2f44e7702cf6c8d5e33acf7aee6bb9333cfafe501d7fa48e2fa4c238a508bd83788ae7d365fadaf4f7948c12f5ce45e8dcb1e9d17ef57ffdaeee2b2b55322e46e78e8c820257df82125a56629687df4c741d8ebafe72093a07d917fae8a7ca8dc41c4fd8e6a8779fcde15d35be9338d413b643958c4fdcb08de9eb23ebc7eaa8fb7a741c6a9b05798719e2558f293dafcee72a1d2e45e78e0e631e54cffd54986dfb10cffb97a5bf3f568f09fe4c1d7feed1ed7091de17f60b75fc256d93e2571edd519f57ab7e2f7af4d3e34c5aef79eabb97233df47538ce17e965d47cf5beea734c2cf0dc577dc3c6b176bf34f26b25e70a9f67fddeff8d7adfafdcf27bffb7eafdabf27cff65f5fed579beff3bf5fe3579beff7bf5feb501df5763c7898522bdbc8573c76ec7ef71e370fc9deaf957d4f150e15f16fec1237f91927f1d3a87fba67ee2d7d4f18fe932d2d2b4ee435e2c32d3854a0fe20d744fd7df5e45efc1f9eb283cd9fa0c4dd7940f52628987df1297df84a754d85ef5f0abcdc24f3d97588a9ed3df5a86aefd495d5b9eba965886aec1f148a5dbf5e8dcd16dd25c8fdca3d47337a06fc37185ba7e233a87f7541b27b152a4fb376979ab914e2bdd6f4ed465dd9f3ddf582552f988c36ba21eaf7f05ddef8ef4d4d7b40cdc0e3e111de1fa4d2a0ede4fff66d6383095a16b447a9d448d2b268ef6c4ffd18ab18aff493afe755df224ff6f6bb942f14a9489f4fa9e1a7b147f41f2e0fecdb44ce377ca3de1294fffae949fad9ef3963a3e149ca76c83c2f1afeafb6bd5f76e41e770c46381aabd9e58876c42f50f268e51efebbe2d6da3ebd1b3ebd1b3703c56a4b70b8f75e3eea0f73db2f57bc7a9e76f43e7f0ad77d4f90675ff76755da7513466229fd1d7e0b851bd73073a777498fca16b3f073d4f7ceb04f5de9de81c7f7393ba7f173a87b09d99fe7c62b37aee6e74ae196339f778e478f44a54a230562a5d1ef7b70bcdb5b59dbe5e7d6ba71bf6c93a9ffa536ef28cd75e50c7bfa96f6cf170d3e3a2cfe7215bf54f26aa447a1db8ca6534458f7febbcfff52cdfd0fd9d7f5747e52b93a856f2ef45e770ac1169369fd07dc9daf6b78ab4fc599e3b7a4d7dc423679b478e1eafd5f1b25dddbfcff39eee3f795dddbfdf8db7a9cf78c2932ddc69d73a27a44fc13251232a45832894ce12d06aced55d5cbf99dd515cfa65c02ff899243fdb2cf63aafd698bcb5d74a5ff0663143141bbdb587c9313afdf585f277a5f344ad14fa4022e3135fcef8042857e7fcab41aee64dcef5a5d2531d9ccd6b9d3bd3c40ae7086f6d16d3c506e75fba9475ce67eb448b7356e1fc6e90f2363b6a673e992d48e096ee7da7cc91e97acdef74ae68a00dce799dd4b05cfede2d35ad91da2f77ae354b1ffe5d629b58e01cf7c8af6586bdd1f9dbf4cd0a85ccaca3d9799ebaeebae8eb685ae48406b42f94b6f87f31d21e3102e8bb40fa809f4e85d21be2e28c98f83f866e26038dfce54ac674892c9176ad58144a3fa5b20c82c1c3981942b37dbbbc4b45896f58cc6420ba47c810a462f84b3dc69d37edb1b37a744e0fda0c5128bbf64766099a1f58909794a3924182d0b973a72250d48b3f61c22fdd98ca23c4ef3e572b9f0b1e015d64e1971e01b27bacc2c9d5d6a0c273ad54be4eaae60d4cb9f3448b234eab5ed17a67adcc31aba4e81a4792be532e1586e797ca795d353218958e8c669111ef45a064571975990573b6e05391d7c11479b2ffaca25dd20e350dcc3ffabab58622157d85b2b635d4c7c8a96fc96a58475517d3c9b0f989770e3eab68ec234f3fb97a57c5556fbdd1d91c3f3d64fce4f3552a863a9a62a847d4c92b7b79e2173f3d5bc3958a1ff83133ec45d878361d28829d4c047b466de370af5e4aa9749e0dce101cbda678b32833c0030823ccae0285b0b301611120ec63d04a74eeeed10a1422247731454eaff629bcf3336e189919e241d09934ee7ebe656f50d3ee6aa2275d0237b3d2d36dca72a7f1709473afd279be465650e1fa1a4762a5f36d90375f7e21d50e4d7fc39f2cf4ef1fec256ba43a40521d8f5ac86135a3887733102f027b1d68300399c77913433f3a3174a792d9a0b0c9ac0725797058c93d29c943c24aee45491e1a56726f53b281e76597247fb24975c5e8bf1638ef6e7702b35bb6afa11669eabaf14f2ec3724e2ec365722910a60ea5601a51c9e40053dcc1c5112625bd51379c8eba3e94e0912105f7a5ac6d54586beb47651907b64196d1df241c52fb689159e7fad4f9c910de8b163e80d2bcc0a0f9870b3a04d27c20057c4c58e08328c963c34a1e6cca38a4499e1571c661eef7d5cdc8d54e9de144e176d8e9efd6cbce3ad04877fc9539c7ad528b1ad50ccdde5fec9f058d138686984c598b8d994d7b85026a0a1d645638416685e08d058d74b79f7ab18c815af9a569466de00bd4f39ac54ab9f2498b8cedce447371a2fcba5d6ca82c7d0895d34c32e4342f99b2319f9c66289564936193ec30936448b2930db65a04b60a433e3d644991f19d89f477869bb20699f5ef6bd7acc16d5880bcad7228c695b74ac0e23d274b53dde118f06e653815b2f7699bbc1b363300b7cd51de16ab707fccc961aa4c0e87e7901c384345258011264b821618f89b66f41e824597390d8e8562934c8627c9cb40c98ddd5af968add8e71cf5a84a86bd75a5ed6da4491ba8d8425e96b5223480163c8a125c1852f081541a2f0a9bc6479b24436e038303616b580594dac561d51e43e5a8330c39ea27896039ea584a788941f8d31d82091f67120ec63a33171bf1b1eaf194e052531a83c27ba1eccc2a70fed73b6f40d749a54cfd05b2304ce506054e5aaf953deb7b651ea09faf779e70473183e83981328a59618d6222156fb30df1f67ec0789b44099f6310beac6330e1492aee0e31c51d244d2837a05ab25d956de9b961811c4f2e902e042db253a65ac65c938cd702718a93719ce61c9b9da70b64395027ef15c8b5ec1a655e1b244e2753fa1f6ad2bf07d27f0dd230c8170fa2f2adb9867c2b1130df9a62120e159fc30451f181823778c5672a85ed081336285d163bd517a8b9b6c8e7cba501d4b4d695abdba8803cd8a057a16c2eef12ed592183d602385c34c9bf535514f8766a002f4cc56b9ec8ac78e91f73c56bbe808a57b1c85ef16a0beda90ad6342a535d60c854134132d5422a2d2ca4d2c2a2bcd24291c9e6642f4a43bbda1c9da2caa46c4879e12bfcd08eede86dfdcb6e9e921c2cabad749c22d75069926b95bae49a203385bef52d68515217be4c12e634b144a6892835a7d2c574aad45e6a28b59fe81cacd42e3699acec416b6c57935d24254461b6cb4c662b7bfa4a7388fcb6d473b4f4cb6b92996aca4b047e46cb855e1a65b159e35c878c17df9f22170281fad212c97ba7240fe1ab94ed5ecac8974b238f3a9c94a1cfa00a80230d0540a05a750995848e3224a14f0226a19994da2bc2aa5d4aa9bdd2a0f6a95d82a93d8b12beca207c45d760c2679b8443c60c1363c2b410e7508261d648467513da93ba9d50e569296e916d05ddfeab9657f63abfeb9c6baeaf5681f4b1d403c641b43c84627bb4816ddf806c0fa5109485643bd724f800e1aee2176670ed309360a87f5508a2fe05735f82d7bf0ea7b0af3360bf3320f623a8647e4cd8643e8f92bc3eace4f994e463c34a5e40493e2eace48526c910891b0c91083e134122711125fc7883f08a80c217530973a3296f9a20a0e195aaa4bacda754bf46a5d82aa5343a7fef56656e755aff08f479d4aa46739074be84d2f304939eee940e708b4979a7c217578b1d81beba9442bfc980fed280e89751c2371b84bf1950f8728a57a589d7d02cf15a2dbd295257a73b5783703c92d2668b491b38455ec501be731485b4ca80f4d61ec190aea002516d0a0474dbb8f80e7190ad921d7e956a3aca6e598c07c7b892d2a0c6a4815b9dd315833579560b565148b71a90be1810e96a2a47de1636475e43a9bddd9469f60ca6f6d194dab561d52e3349865ac78982a875c02cc1e0b58e72ea3b75d47776e6f59d0ad37780d4aeb0a4d652115c6f88e079bd8245f03a4a788341f8a901851f43093fc920fcd980c2d753c21b0dc247f60e26fc584a789341787540e1c751c29b0dc26f0c287c0325bcc520fcc180c28fa78c7c775823df48a97db241ed81070453fb044aed3d61d5de64905c289d71a29c00e2f57e0ae6230fab1ee7e69a0ace32a6c91fd9be4f75296d36c50b94d0a798540a50945752d674aac19ade089808b650c24f33083f3ea0a95651c24f3708bf30a0f06a4af81906e17dfb04135e4345e6992123732b2518dc3a33ea8253a575d6cb3456207737839996bbd4666a30dbbd460e5c574adb4f7538e9816b98ba5ba0acb751d9749d63edd39cab41b4de46697db6496b1879854edc54bdd96d4abacd10935f618198a46add9302e9b59db281730c36f0444003aba5027d6e481b38d120b850fa25d6b2e6b3941f6985ecbc8789a35ba5a5ec0cec75ea9f279f97739e7cbecc93613c9d4f572affde618a6ea85b5f2088ba35aca4d503540e54b7ae337d076cf62283cd9604ccb77652c22f36085f1f50f82e4af82506e1e706145e6f120ed51a58532c54b5a68152fb3283dacf0754fb244aedcbc3aadd48a97d8541ed817d83a9dd44e56d579a3274a8cae7d229522013658b2ca0a0885923dc29a0aeaf54a573b55a7a516d97e76b64d2849ec52db2007067c06f929d1fdbe45862a373557b5ded15eedca002591d73d70329905941b5f2c5db21af34c9a76ad077cc054ead2a38711115b477b3998aa2ab0c51343e6014b550517475c8e2673725f81a53dc8337438573d290162f41be773295b15e4b65acb07c61f04e8b3d54b8ae3785cbede6d73da5aefd6e0c582dda4bc5ff0da69c2560fcefa384df6810dea95f30e1a750717213152737e71527a79abe0399de2db918b1cf38df6994e05b430a3e9db2a2db4226bb3328c1b787147ca64930c43dac72e7f5ed0401417c3bcfa2acf04e83154eed1fcc0acfa684df6510be22a0f07328e1771b843704147e2e957eeea1d2cfbd79a59ff328a3b9cf94a78107dc26e71f74e5d4c9dc5a97b1b54eee08771a645311cac32016763ea5c5fd262d06b46a51e4fc869217c6a65cefa0fc75b880d2e101930efd950e339cff55b23104efec717ee7afc18594060f9a34e886e202e61041cd28c8d72ea2ccf72183f9ce1d10cc7c2fa6ccf761ca7c3f9397f95e42654d8f18b2a68e01b3a64b29429f3510fa3020a1cb28e19f33081f3a3098f0cb29e19f37c56d40e1575071fb2815b78fe515b75752c9e171bfaca9b88db3a6ab282dbee09f354d6fc3ace96a4a8727fcb2a69236cc9aaea13478325bd6748cfc5eb0f90ed79abe06e6fb4583f9761b14cc7cafa3ccf74b94f93e9597f95e4f21836529c354c76ea0e87cc540e7da80746ea4e87c95a2f3745e746ea202f1354320de0e18889b29f45f0f89fe164aeb6f18b45e343898d6b752e89fa1d07f332ff4b75181f89621106f040cc4ed94f06f1b84771a124cf81d94f0670dc2930185df49e1ff0e85ffbb79e1bf8b324ed823862cd666b471b17637a5c573262d52c55a711b166bf7503a7cdfa4832ed666b661b1762fa5c10f4c1a7417a9626db11cf0aa0fd853751f65c03f3418f0fb010df87eca809fa70cf885bc0cf8012a103f3204a26e68b0403c4809ffb141f8f301853f4445376c3714a65c7898d2faa706ade70e0ba6f56728e13f3308af0e28fc110ac9cf4d29007af5fdfbe9337b72c3f5d9bbfda676f7d27f968aa0170d11d41c30823e4709ff8541f88d01857f9eca327e496519bfca2bcb78940ac44b2642c38305e2314af8af0dc2d70714feb849387403ff26972cc3a71bf80b06c18572859ff619a3cf5c79a96dc7e87f6be2651ca3877d36fcc7e8c3eb4a8dd13f41d9d2ef4ca92da02d3d69120e43b9b0eb57a8a1dc2f52925f092bf94b26c99017be9a8bfdfb649a4f99ec5fae3cb5b55dec3fcc9a68fe96ff879c2dff3569f907f9587eb895dbcc31f165ca785e0f6b3c5fa18ce78d90c6f355936048a67f3424d37747044ba64f535ac3c645195522985f3e5f36876ae4b414d384a602595d2a08e87bf6354a8f3f9bf480355582c9ff3a25ffcd90b1f30d2a76fe62889ded2383c5ce3394d66f51b1036964bbaa22eaf8a8695def235fcfc06f5281fcab219075a38205f25b5420df36051252a0f63370ebb3e96e9a4182f56deacbef98be0c6d72d7aba6b075b9e9c2d64571563b09a25a04f5e67896d2e06f260d8618355821ff6a962b0864ec46114097ef50bafcdda4cb881c75c95c8f38884edfa50cef5d83e15d7a6030c3fb1e15e07f84cc139ea304ff33a4e0ef5382df0b29f80714e7f70d9c1f09c8f98794f07f1984378c0e26fc790ac9bf432279c12418729f0f7211ecd318fa914930b4433f6cbde16987fe47e4d30efd3185fd2303f665638261ff0915888fa9407c9257207e4a05e2bf86405c1830103fa384ffcf20fc89b1c184ff9c32cc4f85213b85f97065022f13532debd83a234f8ac9b2c0dba57ea7cf422890676ef133552e7fd1284b7d37cb6d127572818c2681a781bb9d4a30a1b9c15333d0df81ce24b788ddda9a9d17c8ccbc3aa06bdf8b140b581d2f8305accb82d79a736b99a902363525fb64a9619dc04eb3db651154905542b1f374d0991bbfa00c066aa419033e010de69726e190a43a248824d531914f92fa1515884e8640240306e2252aa63b9b621a9cc9cd5da41b54e72acc7c81d685bb44915f9c267def4e96eea86eb76acaaed35340bdb40cdd859a7eaf59da55b321156d911ad6a30e585776bd6a9d06b1af5f1be815caf58ba3dd93cd9d5d0472f2d8932d01cb5ea547b49006e0e1e06e8c96a03646f3d7816adfffc6447064d40417c97c774b9e04bb394cc61808d214bb1314b3e94151fcad2915831df6a02237c3c813a491bf4c09efd906c27f4709efd506c27f4f09efdd06c25fa172ce034c39a7593a9db3bc4a49ef6392ee4eb48532b6308f153afe4015307d0d05cccbe3831530af51c2fb1984cf9e104cf8eb14a5fe89708d893728c103420afe238563a001c7c88038fe64120eb9cca05cb4de470bfe338563b0c91ac1d80b03517993923fc4241fd68ccc1cca5d29cb71bd0c50ea4eb0e1d2bf509a0c35690212a084096a056f515f1966fa4a0f218cd3c3827cf1af862f16ca2d08605d98a8cad95cb6213697b1c313506aa68391356963f93a4296af833242e6bb5b2f41ee6d535cc1e9c844e66ec247ae3cabebad235fe89011359de9a87987328651266380f547c1cfc7f544a873fed29bbcd70634f5bf51df3dd0f4dd3ee47777a9a666906fffdd648e07466d8e0b6523a1310f731ced209ae041348d30c602c218fdbe4e19e3bb266e725b8e4d1172c3bb2097cbb53b6b9d2bab65d34bef5b1f9ce99844d0e5d4c74ab2e332429eaf7e14f57f98520a0c428e4b841c84fc2725797c58c9ef5192278495fcbe4932d44a2626c2ef02f32f2a539a14b2e2f56f8a47322c8f0f28c993c34afe90927c5058c9ffa1244f092bf9234af2d4b0923fa6241f1c56f22794d14d0b6974ffa5542e0cabf2ff4c92a16e50948bca3ebb477d4aa93c3dacca2241502e0e493961120c2acf08ab72074a724958c91d29c933c34aee44492e0d2bb9b34932d8dcac9036d7855279765895bb52363727a4cd75a3041f125270774af0a12105f730098626d4dc5c04bf460bee69120cf581c3daa03ed08b328dc3c39a466f936478fe885c78f88c171f40819e1712741fca34e687348dbe94e0052105f7a3626f61d8d8eb4fc5dea290b137808abdc521636f2005794948c88328c14b430a1e4cc5deb2b0b137848abde521636f28157b47868cbd6114e4a342421e4e095e1152f0082af656868dbd9106c98505ce6902d6f68bde3bba2d768ef6ef9a58954b5c4ca0898da2e26275d8b838d0241956535c938bcae7d382475376797448bb2ca0049785143c864afbe521d3fe582af62ac2c6de388ac5da902cc65382d785143c81127c4c48c11329c8ebc3429e44a97c6c48959394e0e3420a9e4c35b436846c681d44697c7c488da7501a6f0ca9f1544ae313426a7c30a5f1a6901a4fa3046f0e29b890425119124511a5f196901a4fa75a86556dd0322ca6705487c43183c2511312470995c56d0d9bc5cda4406f6b03d0a594dadbc3aa3d8b52bbb60dd49e4da97d6258b5e750927784957c0805a4ae0d801c4aa9bd33acda7329c9bbc24a3e8c4ae4f52113f9e194e08690828fa0049f1452f03c4a706348c1f329c14d21052fa004378714bc90b2b796b0f6b6886a4eed0ed99c5a4cb13839248b25148b3d61592ca554de1b52e56554436d5fc886da724af02921051f49413e352ce4a328c8a78584bc822a4a4e6f83a26425c5e38cb03c56513cce0cc9633595b2cf0a99b2d750d5c5b34356178fa6209f1316721905f9dc9090cb2916e785645161ea721ce39c2660e30a1b1624d9a03a10dbaed3f17c1333a31fd4050970632914411625c9475fca3f6aad29da21762ecc25da417b42f03a936038bd2891e97ba97f82f85e1e43e59217b7412eb99e127e491b083f96ca1d2e0d9b3b1c67920ccf5f964b6cfa0cce6c3009061fe4cb73113c823693e329c1578414bc91827c6558c827982483abfe55b9a8ece3aabf8952f9eab02a6fa612e3356d94182b4d1f8055a7aecd85c9cbb4e02d14eceb42c2aea2605f1f1676b5a9c01beb9c26600fd1f670f4d5054630a7de1b722ec46e9485d8b08cd0e5a2035530d55039f04d6d90036fa522ffe6b091bf8d52fb9636507b3b25fcd636105e4bd52c6f4b18e6142c92a7658eb1948b45e2a8d6754956095819e66419c13b54d44f93b30f963bf7573b77764993862be6fa8b6948189ec6a605865f2fdcc9ccc196003f910ae5eda6509edf1acab54e4d0a129d9b4077cabf97abb5621be5b46937812e6f7d7271eb5240e98b0d342a1ee5c2dd1071a16891e102b9e9f45212e0f9607a50922a04cc5bd826efa633c589d5cb7b9d2327e81c951d14e93b287bc25f74c334c379c7a555ef648a9b1cdb689471ee86b6422dbfe4d536f52e7dbdadeca98e0ae59da6501eee092566ee867389703707ac34587d7a0ce13b7e6905bf1524643ba990dd650ad91139c5df7cb9e440add07339c2c75cea4e90b0eda2c276b7296ca59eb0ad94b1b35d850ccef6b45b48eaa990dc630ac9a511e767a9776071893a47ea5e01d33a536b563505b072cc8e0e0594252db29a81733da860b55dded64051bfd7447d7e4e69638570573fb721573b890adf7da6f0ad60b42ab87a92fc0c84caad0ed7ca4fd73ab5fb4a3227c927561ba950df6f0af561bea1a6352d936171175971c3a84b63b85aa50865a68bfc63b3890ad703a6701d1bb866572eefa4d7ed4c12dc6b6b5af38146a73c80a64e989a603ef1dc4cf178d0c4e3a848ca6ceed2bc850af343543d25980d681b8649ee5552108ee7a016112464bba9903d6c0ad92144c8d6caf459a7ea266e535bb75ad6a9545c9d111b3c6d9493a9107dc614a2258cb9af8e5577a6b8bbb84d2685fc43ba870ae923a690ce15542fb929a7480f01de4d00982c93b1dc285b43554e89bbb70d43b5970ad567736913a47f17d710d6ca5868749e8574b8cda7f44b97d17621db4785ec73a6902dcc9a73e6d62aa0f350bf366bbe39e52954183f6f0ae352d226a1c6bbc5794887d55dfe23b5bf8b7f5e6296d9d625e1a954581f3585b586b9f5d02c77e9004a6eeb609db4f6dad69ca76ddac3f9703a8de2f49889d3da766b65f9130acfe1748ac3e3260e0b02a60d1b52c4195408bf600ae1f28021d49b169a63a43dc27b2615de274ce12d63b4eca63cea1a6d41e02c8ac0936d550771f3b6f9a806c21faab3a9507d91eaa1081aaa25f289cc18f2e639b9cb0d12be73a8f07dc914be4343d41c9b656904ebce6c55ed3c3a541519cf0609d3b954989e0a1667debc076f2391cdf2384b8ff3a8f07d990a5f9036a31bd6a5aa1e91ba0b231efeb5c3b6aa399e4f85ef2ba6f08d17febd82150e610e2d2fa0b4fcaa7fdf5e905828cf2b16386def422ad44f9b424d6f1255d13a548ff388d4a2dd501eb618eb62f9f5ef5f44e9fd3593de73b2b6b896cbb141e87dac934b362f163be5da5a99ed5fbf18c8bf057931159eaf533548ff3402ade135b256d564285773194b80dac8d6360ce1255408bf914b1bd93c36b05cda1ef48357aa3eaaccf88a727ce0522a8ccf503d54b9f403e412cafc728cfc437a1915d26f9a42ba2ca7d8f48ef4b8e95087bb3de3f5722ab4df3285767dd678e5ed19e7ee33bf82a2f16d138da28065468bac27ba7de5d0d2d14f656a9f5a9e3d88f65752da3f6bd27e761b690f754dbc14ba3734f85e90d05c4585e63ba6d014072ebf6be58606d56a9c1ab61d68ebf8b89a0ac1774d21981130044db20d0ebb736d670cc3355418bed716b5a86a36bdafa5f47ecea4f7cc9069818fff755438be4f8d7599c39139a7a0bddabcd75321fa01d5b39abd5f2c973a452ebd6bc17be0f22f796fa038fcd0c481deca93eec7d06b3db755e97823a5f1f3268d2766ad2ba446906be455c8c9daa60d7513a5e90b264d67f9a47eafa5a76bde20db21a99e788ef4723315961fe5e25549d5bc175b56ebbe850ae58f290f8d60f99cdb4b947937d3eb462f3b4fc767a694f9728c0f7a3e8284f9562acc3f31857982276653dfe44e4db7517afe94aa8951f574afce4b95ceb9b673f2ed3bbe9d0ac1cf4c21385ef08d79e8de4abf514f6c81b9a63cfd4e102a7750547e9e8bd782fe62905c2515322ac5b54d6e722715b2174d213bae9de33b483ce79b02eea288fc2297fe9ba075adf02df8fce3fe6e2aa4bfcc25b75a2863d58dc166d42fef5a41a928c9123e534e066f0509c13d54087e95bbaf317c3348cac4e1a3aeb7550cdd4b85ef256a3cc2bf4693da35c2aba3deb5834e5fd48e137e6932bfd2fe3e2ad4bfcea71fdc8dd572d9b3e2b6ddaa447bcfb1b89f0ae16f72497966c2f9d513b2b770ba3aff12099800b8584a714715eae53b502b2c848d4a640f9f5b324c6bcdf1a7a5950ea9ebf0fd9d4e6c409aa868cddb6102a4bf84df3a70ba7410eecf24b54b955b2026b60aef04cb85527e9dca6fb4b54e93845c5f6c98383acda905d6cab7f454d16ca1309572d350398743973d4c1b89a99f09b9f91d96e5908661d1fd2ea42f43ac8e51b1daa1102aef8929795a53762d7e075feb68b621d3f69fa9d461d2dd15b04af51e24faa9c6967f8757d6af7a17fcf57ef5602940d705b38a5b8b92bf49dc30696aaea369a370875fba39a6d6b5738722888ddf732283c55136c99859233f4ecf0d8903b6973ba5b0bdc2890de6932f9255e506079cebf6a88b690a60532c10be9148217c9513214c545fe233b6110758cbc6a560fd8113166cf3adbb4d964937977281f79f5e2d76c402d8a3dd52c05ee3043650b8fb0a168994f7669cc1f5ed9902f73a27b8fe0670207097f31238b3b4c8abd5b180b659a4a0bdc16d6de9c97389f3bbb675fcb91e595d1cc0257ba5c0fd91131cecb90b6e5fb996a17180772d2a41ffc409af274aaaabd37af8e28069e4c814a63f7362ea8e30a5a638c501d185835388dee444d44b86c4ec25130750dd503dec2f9ca0ba485b6a8a5566dea9770ace5b9c7060d9d3d5ad2d493de2ecfad995c9d2b145c00c23280fd7a83ed938007c02e5547fe504d80925c33880796e6c0accdb9c60baa12c1cd404ef843800fa49bf14a077b8cbb87836a19f4359f7dfb811ad9623a6a975bae2d18c3915e53f7f8f2a99e9e9a0710074eb8014a0773901c12ab4ba9db758f65c5539659a6e9c80af7cb56cba94490bab96f656e77c300e10e14743fc072744584117c3834e6758e6a2a67541e8ea98b70007a26ee87f72a2ecadf2346d6f7b556d6badeca48903aa1b51def65e545d34d0e3809d6074af439c6af51f764d817b9fbb8b0683c373c5e7cb4e1b18974ecd8a8f03bc53516feabfb81bd6ba444d4d7d76175c8803a8275005f6dfdc031c2b65f2dbe159c96b91f378a3fc521c806dee9002f641b45dcee96e7dd531cbcfead0c8d087fc031c509558243f1de78ac6739d53d0fec36d6d8be518768bfc786a29bdd4d28a4d4e1daed6f95e1cc0bd81c07dc43dca8d57b48ee3301af89669581ff30fdabace28f5524cbcdb017391957dc2ddf35ae6405b28725f95360e002f4495dcff7202ec2305f84d538d052ed997d6b5b347b8d7473e7f8fc5608c69dfca3ec2ed026890579b557525cdd71226e559a7f9ff12c8573299777750326bb190ccd90f2319780c3d99a7f75a32a74a7a3264ff4e32804b6232508991ccb9ea970c54df49e695fd2603f5482403d5f79339f98b25033949250377049874a6dd62921963ab49dfd673d238289434f66127091f80a48f0b459218304866e9744be6350c9a4c1bfb4bfa0ec827b3ba4e267328cf92c4985132472fead4b404f37482229896f069e2ffef190345e321e00e802eb08391fc5bd665121d982b8360d3ee04112871fc97d59beed4313c3a8cccd0217d33305d8b3169d33dad9e73402e01cca7aed305795975b00967712c71ce46383bda8473462c716e44383b4581731b0914abbf49cc14a57c387b71e17c58a47076b60967492c715e8b7076b109e7ac58e2fc23c2d9d5269ca5b1c4f95d84b39b4d38a7c712e72a84b3bb4d3867c4126733c2d9c3269cc5b1c4598970f6e4c43948e1ac52cd4aef121faeeaeef211457c203b73817c1b81ecc5097294487599e4da7d05cf37ca67e357959f87c0f6e6043b5ae0feacdcfb73e30cf74004f7004eb883857fb3138b83929e0d65572e949f20947d3851f651284b3d40dd9e4e78880dde702e788f23787da380373b7a786c96f73c82d78f13de902c65787a22666d9bb3c17c07c1ec6f13cc593184f9370473804d304b6208f32f08e6409b60ce8c21ccb710cc4136c12c8e21cc3f2398836d82c93874c106f34d0473884d30195be56c305f413087da04338e2d9c5711cc6151f415414bdc6ff310e65677f70413c8df2090c339411ea440d6390fd5c9a37907f620bbb8b176cf0de0b2dd356840780427f21e12f976e999e47a4a6d93f0e2d737d40b59e9c8f6ec1b4a5f3799d1faf671a1dc82ac6f1427ca491909be520a5b22f426840b9cff609dbb65ef658bf05bf29815365b313515c13e300abbcdadcc8f23ca11280b18cd89f240431690eb1629ac68cfe7427b20b2d2026e2b9d2f1dc1eb95fb2bac60adf78a074759ed14ecba5ac7afa0ea84ac740c274a3d2760baf37fa7d003a8db546d34ce5dc867208463a340386bbf43f82584701c27c20122d53ad247ef36de711d8f7c12411c6f931b2cabef111bcec1a8909960134e566719369c7311ce8936e16475e562c3b915e19cc489b36f6bb95db41f0dfbbe8ef2caa43dbe1b7362887210b2c4c951a0c4ce5b2b9c4af852355bcddd6c3882129c0d650bb2ca83f87bdc7117db26b143a25b206799ed50a260a21e4c9ecb58eb21066e31bd11cc2951b4bf9be59cdaa6d62e613d054f1f4dbd47d339c72cd9d0de88d04e8d626428573f62c6fc93cd8bf81004f3609b60ce8e21cc5908e6349b6032fa79b0c19c8e6016da0493d103890de62404b3c826988cbe716c304b11cce936c18ce334961204b3d826988c7e1e6c30c72098336c82c938cec3067308825962134c46df3836981311cc9936c1646c01b1c11c8b609672c22c1099fd47c13c8e18cb77368fa319a84f69567bba1e7a3b8b197351b6aee209c85667db0493b17c6783390dc19c1345bf3bf476ee167a3fef88067ad9f00d42f80ee1c4370ce1cb74e40261a9d9bd711ec8f81e027a6814ce0745fb9df3c1e908e1dc281096ee770867238487d95d1d62ecd564ab0e95a3ead0e151b9c7a486d8f02811fbe01adba0c569c8468fb0c7b5358e1300e72094f3a22ac5b32d091b67d7ad9908e87c9b16e69919cbae8efb10ce0536e1649d55c986f3528473a14d3867c512e7af10ce4536e12c8d25ceaf229c8b6dc2c9ba36311bcea508e7129b70b22ea6cb867317c2b9d4269cac4b3db3e13c0ee15cc65df3cc6d6b8632a91a6c0ec158f35cc20514ef8fb43c8ac5a36678daef11747bb0cd433b11c13b9213de0891eb14bff4f9be8cee08af71415d8e3a3b8eb2112a638b9d0dea320475858d50195dbad8a08e415057da0895b18467833a14415d65235446770536a80310d4d53642651c0a66837a0082bac646a88cce0a6c507b20a84747e1ac005dcb7efb5145319f28c104f3b72205b38c13e60c9139e4913e0966a148ed42e506247d4fabf42df9525b9955c8e681eefb67b4e8a95c163d1c4542b93d530de3b8be6c1f943954d83ba58bd1e38e6d74f447c84ad7dab3d81febd2016c76ba07c15c6713cc38ae837c1e82798c4d30e3b80e721382b9de2698717483d88d601e6b13cc38ae83bc15c13cce2698715c07791b82b9c12698715cc86f058279bc4d30e3b80ef24a0473a34d3019fd42d9609e8f609e6013cc38ae63730182b9c96e1fe6382e22fd3f84773327dede0aafbb24509d6cc5bbb26b39d7b161db1c4f20709551af239b7bb7471cd7b11982fa93b644e5c7bc52f668eef0f4782e725e6b945f8cb31ff35064ab559c400ff04de44d7ce87a70a1eb80d055b7e7f484f82f1bd01fa1ac89628e26ecbbbaffccd15c8df06db563e17277f4a8415aac3b2ec46a992f73a1ad4405ce369b1641656d4cb2596a478473bb4d388b6389b304e1acb509e78c58e23c1ae13c9113e73891394b6eb17468a8927b17b87ecaab9dd7ab053423cb245877ff82ba686a9cfdb820f74385d50e9bfceb67c67295ba0710ce3a9b70b26e3bca86f3328473a74d3867c512e71f10ce5d36e12c8d25ce6f209cf536e1641d5b67c3b90ce16cb009e78c58e26c40384fb20967712c716e40381ba3eaeb2c97b5ca1647f27c013b66ad53f3e7aae5fcb9489c6bd9aaf7c723a04d51adbcb47ff927ff0e216cb6c735368e1e1f5d5163b3252abff9ddb2971326c5bafb0aeb87e2be9cd5666497bba39814bb3f6dad73288277b2bd4eda8c6538db78e59d08ed9e28ec7256f476c9d6f7fe05046f6f14f0e6440f8fcdf25e40f0f6f1172fdb0d6b7c953b4caa4495d0eea2b0e202f45ec6afe6d813c13cc55e8f0ec63e77363bed8faa41a7dab3c85f1c1db293c84a4fb36318d8b47f35235ab6754356232b3ddda6813656cf4db6fc742cc279864d388b6389f34884f3cc289a92b9b5ca8b63e9a2bd0ac13ccb26987174d12e4330cfb609661c27a92e4630cfb109661c27a91e85609e6b13cc384e529d8f609e6713cc384e525d80609e6f13cc38b6898e40302fb009661c872ce6219817da04338e93540f43302fb209661c27a91e8e605e6c53839275d882ad41d90be1bcc4269cacd523369c7310ce4b6dc2c9ea67c4867313c27959147e1c33c5feb6fdd3cd2285f0f2283cddb3771567ce189aef086d9453a959e70e5dc0e52cb316d9e9159c904729c875ce4300b8464d25484d2048cf06b06f1c2358b629048720b0574631f15f83d5fb12a68f73fa55a7e258334d22bc57b5e7905c648ba3eee342f92794cf5ecd89728c44b9dc79a84c028369d5bbd5eb296bdda476dd5a2057f1dca1eec362aae0a4c8b8d6025b5da03b027c8d3d0e89714cf6ff4228afe54439300b4a1d52568786115ca5fef128f7bcceee5569187b47d956a59986f05e6fafb322e3601d9b2bce2f5106704314190055eea73200c67c942d03f82bc27823f7ba496b548b5e3b742f979609c93e7e65795f04eea628ecafa8d506ab6583d49d761df7d540be8830deccddb10cc016c90fb7eb6e5bcbb960162398b744d175e74ec2da299335143dfbd7fca19711ce5ba3a8ae17f9b4dae3dd85f71c42795b14bda025fb5d2f680d42787b141d74608d8b6595a7452a013bb557c93c73b53859f67b363af7a0bed9104532672b826620b077d8e3d41d473fa52508e59d514c8229f1342ae35c153a09c1bbcba619e93339bb36d866a4df8e70de6d13ce9258e23c07e1bcc7269cb36289f36708e7bd36e12c8d25cec710cefb6cc2c9baf2211bce8508e7fd36e1645daa8f0d671dc2f9804d3859fde7d870ae47381f8c62015ed8547cff5980773ec2f7904d0e5eac1b88b1e11c81c6781eb60927eb5417369c0b11cecf70e2ec2605d4c8ad401b85ebe2153fefa22e28313fc2896b9208b2072bf41bb5489178af55a01681d3c17c2ed80723d89f8d6a4daea502bad5a0f36d9becc76c8c75675b3d42f8397b5c60e238f77720ca293fcf89729080a1db1a35f2e83a695103688c7b63b0e5a1dd904d3e1ac5de4190acf78701b25f23708fd9ebde12c79566ae43681fb767efb519b19c8bfe1d04f30b36c18ce318cfcf11cc276c8219c7b9e8df46309fb409661ce7a23f8b607ed12698719c8bfe0c82f9259b60c6712efab710cca76c821947d7ffa711cc2fdb04338e73d1bf86607ec52698716c91bf88607ed52698715c8deb2504f369bba7a630b689d8a6a614a1dea3af71f71ef975c4b9aa974a572ec6e2886d03e5cd08e4d7f9674da683747b8ea0a363973852f6b837f80ef8c671bfd58e2823f8863dfe99716c6e4e45289fb1c91161266711c566999f4338bf6913ce9258e2bc05e1fc964d384b6389f3c708e7b76dc2c93ae1940de73a84f3599b70b256efd9709e85707ec7269cac6b17b3e1ac4638bfcb89134ef43cdef80dabf54198be6793d5cde4ec2466b3ba3b10cee76cc259124b9c17219cdfb709e7ac58e2fc05c2f9039b7096c612e71308e70f6dc2393d963817219ccfdb849375bc920de74e84f3059b70b22e45ce86f35884f3479c38478af4550b81438b80fe76ef5a855eff76c6be4c36f7d7ff22ac3fe6c43ad183758bc8f48ccbdd878e11355b55ff38d42fff93289cb5678bfd6dc989af206bfd6914fe9dda5a9ba4fd4116b044c1ab318e1ac57755d899c83a7f668f1f7c1cddbeba23943fb7d70b997190982d0ffd3cca005e8c623d8fe91e5b8df3a6b67311bc5fd8edc0c0e853c7e6c0300525fb5f46b5d8995e9dcb94c4e35dd67f1f59ebaf38718ef794f57502cf6c332fb7bf54bd1cd91adb13b8308f4456fb923dce0c7174103b1259ecafa35c581f127eb56746dcfed754fd27c2fb1b9be6b5b376f7b1e1ec8412fe6f6dc2c9da3fc586b314e17cd9269cacbda76c388f45387f6753efe94cce39726cbda79f4179e7ef6dc259124b9c37209cafd884b33496387f8070be6a134ed60580d870ae4138ff60134ed6f9c56c38f7229cafd98493753d25369c5b10ced7a3582c6d7a7b74e2b13532df40f8de88a207143ebc555aa296bd4b3d123f780904ef8fed3fc7481732f11b2dea89aae77fb205641c87ddde4716f9675b4032f6beb3819c852cf24d5b4032b6bcd9404e4720ff620b48c661603690c720906fd902927192201bc81508e45f6d01c958f56603598340be6d0b484637043690eb11c8776c01c93864c606723b02f9375b4032aef4c106721b02f9777bdcb7e2b8d0944028dfe56e61a7562306459b24876d72f952782d7e3e463020a4e1fd238a4dc152be6f664f8d0ad9d30368b74a613b791b8ae77381dd81c0fe9313ec38e17587713d8c528eaf2050ef884e27fd38aee475104afaef4539c9c0050a3e4790112c32164ef15d91661dc2fabe3d3e46715c1e6d3cca06fe15856f312ee773cf6119d1b2e5b08b9095fe3bcac45feb28b10eede6828547e660b88f0beb0908eb07510c58ccdc8f467b1e42c9fdc32816f0cbad5a3f3d96ab2116224bfc8f4d30e3e8ec5a8c607e6413cc38ae073f01c1fcd82698715c0f7e1282f9894d30e3b840df3804f3bf36c18ce3c4c0f108e6ff6c8219c76ebad108e6a736c18ce37af0050826ac6f6a0dcc38f6220d43301336c18c6387c77004b30327cce0b37e188b20b67915fd10ce8e36e12c8e25ce4311ce4e36e164dd30870d6715c2d99913a7f60d86e1defd6723e523440a5f174e7c0305acb959a9d6450251bb9cc7b73b8fd7cb2e62bc0163fc30764618bb72621c2d5213f9ddb19f4d8ebab0217695e40143c3f305cce985fef64a470024f06a11e7fd568f4670bb71c20db7380a63259e6decfd5684b63b77f2f72b8c744859072c609b73168c1b5021d4831363810163b06552187b94d896493918e1ed696f06c038c0c19601fc046500bd38d18e91689749fb2c13303a59a38aab6a294a7b87ec901100765ce5fced8a5fe21c6b1cb1d5312cbc7a20c0bda3c86129478685d2629957422ce0ca61ff8e301e10450709ae60e9da6aaafe1aef0ad54004b30f27cc510698d9b380f8825d80c0f6e504abd7eb9c21f6b7f53aaf4708fb71220ce6f815c721e2c508657f4e946303a02c77be09429ac56ae72fdde26fe22d96c672154bef22c40338110f13e90e600db2bb64bbafcdc671206429aaea0f8ca27734f7457ce2b8efe06dc83e07d984b3249638cf463807db8473562c71fe14e11c6213ced258e27c14e11c6a134ed63179369c87239cc36cc2c9bae53d1bceed08e7709b7016c712e73108e788289a9a45f2b77b8411a772e1b6e7e3db5a3f01211c1945533337a79b383ad0f645d5f6515159a3dbdc04417b942546d0f1f11a17c2a790351e1845473120ac699d4bac6fc7bdffe8eb08e3e868c78af6f775df0723b405f60ec3c571a3a72b10da3151e49fc5fb5dc7f13884706c148e60d3dbc3118c6d8c7d14c2372e8a01b6dcfadd8b63d9f37e378239de269871ac5bde83604eb009661c27675d83604eb409661c2767dd85604eb209661c27675d8560266d8219c7c959572398936d8219c731c90b11cc836c8219c7c959572298536c8219c7e529ee4530a7da04338ecb533c82601e6cb7133763c2676b6076465dc4d3a2e8df9cde6aafd5b25bcef5348afb84ad2f232b2db469186d26670eca368cf65984b3c8269c25b1c47913c239dd269ca5b1c4f94384b3d8269cac935dd870ae453867d88473462c71ee43384b6cc2c95a9967c3598570cee4c4a9573d2cf6d442e33cfa538be09546e1eb0ea3e78b04cc5e6ff06ca35c2eabeab57264287d5e7b53acdd650a10e259362d5cc13ae4cb86b3036a0fcdb609276b271d1bce8908e71c9b70b27a6bb2e15c89701e6253d93e9373a488ad6c7f10e59d87da84b32496382f4738e7da8473562c71be86701e6613ced258e2fc26c279b84d3859d79f63c37914c279844d3859174c63c3d98870ceb30927ab0f081bce8d08e77c4e9cc345aae1b9563626ab641313564f58246079145841a1429189a0a1d935c184f4f708e9024ea49385775235b4e7ab1d1ee0a4adc399f28ca7463ce73b7f35ca413a56c7ee1bb98057a3cafe424ee07a4b3d6a1839bdb06203c9b6a5de6864b98b6c0119c73dae0720908b6d0119c73daecf442097d802328e7b5c1f84402eb505641cb766be04815cc609b2c853bab790b386e8c95b0b9d27763afad4cb33086a4465fd055c657d052aeb9747e132966b3f29e3901d5b2fe9a7c8968fb40926a3ff1d1bcc04b2cca36c8219c7fefb7f20cb5c61134cc66a3d1bccf710cc9536c164ac48b1c1fc3782b9ca26988cd57b36981f2098ab6d82c958336583f92182b9c6269871dc97e33f08e6d136c1649c4fcc06f32304b3cc26988cf389d9607e8c609673c2a4573f5ee2fcae557df7158e00101cffd58f2b10d80a4eb0ee6ed82b9c07dc21103c45a6dd5690679b38d315615d6bcf3255719cfdde0d3531d7d9bb820d6379cfb682cdfdc84a8fb17bf61c63ab892d13988c2c773d27de01a8d0da2d0b25f06476b7918a68eedc3e2e889b908d1e1b85eb032ef9a9e28abdbc67b3c99108e77151e4a699493e97fc348eeb81f546c97d4314653e35da945ee6c771298cc9c84a8f8fa2ba9f4f99cfd85fcf66a31723b01b6d051bc73db9ce45604fb0156c1c773b3c0c81dd642b58c6da291bd8420476b3ad6019479ed8c04e41602b6d051bc70ad63004768bad60197b57d9c09e82c056d90a96710c800decc9086cb5ad60e3d873558ec0d6d80a96b1b7950d6c1902bb9513ac5e9179a668871599d9f09d8af06db3a70f208eebe42d4728b7db34399c751d1db681be51a877aad6269cac0bbfb0e15c227176edec11be2443f8421958086e9548ad29324d2c15e09becae3a52e59caf90c54bb3d8ecd8d706e75fb038d8e8fc335d4fc88563168b3da2415e0579d552f64ee72e68d6248a263a8f9c0826d145994452662ff31de6cdce33b0ed2f7c7daf2817ee9a29ab9ddf7a38bc452249ca15fc527b2dc31760f7e5eda25186387d4d9564a29be4e4ee6402e1028049a5abdedd64b9cad86a9d30574a4d1a9d673ac9efb826944cf446677ac463b92c96410b88a044a29f8a13d067a50c4ba513864ae14ebdd36f154e721e4b943abfdc027e5a6bd13e4d7994ef5467fa7a76991023fed27600f6843925d6b5992d650b916bfef0fe5639025f23a52ecf1ad2ece1a3edb2974fac1426212ef6e7f0d741bcab6897663a24d1d3f96bad13f3ae70d87ba6d1f91b94fa704107d1f9ff01e3aeda1ce3220300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/ec8ad3d81455b204cb7ac768abfeb116.asset.meta b/Assets/SerializedUdonPrograms/ec8ad3d81455b204cb7ac768abfeb116.asset.meta new file mode 100644 index 0000000..22606eb --- /dev/null +++ b/Assets/SerializedUdonPrograms/ec8ad3d81455b204cb7ac768abfeb116.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 066fa89932f481a4ba0f6017f123acc2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/ede034ef44ddb534d940175ccda41131.asset b/Assets/SerializedUdonPrograms/ede034ef44ddb534d940175ccda41131.asset new file mode 100644 index 0000000..6b84766 --- /dev/null +++ b/Assets/SerializedUdonPrograms/ede034ef44ddb534d940175ccda41131.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: ede034ef44ddb534d940175ccda41131 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1cc5f5f8e76ccbbdf76eb99fab64d9960b065ce4066e58b231d8c696556c61c9162a6e34d39be9a6f7de3b242121094920900412929084100284908410d2210142f9ef9b9dd1bddb9b77777bab779af5ff277facd5b6b76fbef3a6bf996995279c9fc844e7d75ab15a2c1093c51a512e768a1dce5f0b9c638df3cf3dd3d757893ae7b8d5f95deadc9b287253bc093f6323fd9ddf4b9db37ad1e0bcd928ca9c6395bc5f2c2a9cbf973aef56386770b5d2f95fe13c1569e3bcb4461489956285e817e99342c45af952bdba16817045da3bbfe78bbdcedd0aa9147c244fdeeae7fc2a76eed4cb7b358ed2fab9f562a30c568d73afcc79a74e543b32b74889ed1b2609f987700ffdd4b1bf3af675fe77507fb7567fb7577fe3e773d471409acf0f44ef75407f03a15b93bc3f481dffedfc6febfc598fcee1dd0fd4f960575eab6d49640d55c761ea98ab6436a4a17f3b751c9e22bcc9648c40b2d261d65e1d47a9e348a56f6386df1fe3328adc88e4c1f143a4cf28f4ed0ee83e1c470708bb8ec78f3cf1f8911b8fadae55f1f7aeba3e561dc7a96354c9769ee9d55d5d1baf8e4352e835c17d4fcc14319b75bed9ba569d4f54c749ea38591dffab74dd85ce83eaa2e3344f1dffa3beb1db705d3f0ff7f7a8f37c759ce289af02f5dc5e753e354d7dd2b13fadd3c7ea1bfbd0b9c3b1cde624b274bc7fe289f74fd4bb97b91cdb7ccd131e6c7f26b9d394bc933308c7a79e707ceaea9213f53c974a072d7fba3afe4fc93d059d83dc833ec3d646bdf7a43a2f14a9f3b67e69dc9be5ca69af59cf76bfd3b6b77bbded1c116fcb3353e8a9e3f6334fdc7ea6e4562bb93afc87b9e711cd79389203ef9fea91fbb947eee74aaece23b48da7d25387eb48759caf8ef344533a1e79405d3b421de7aae317223e0ff8421d0f8fbddbe7339fdc92c5d1024f5c0f51c72f53c8d4ef17a96387349fd7cf2c0ca0f32275ec98e6373baae3e200dfece4da42fb7f786c61760a994b5cbeed1b900e8e9c0e3acd2e55c7a3d4f168f71869156f07f23c951da4d26599d245a0387074e9a8cb94e5eab8225e17a73619afd369cda7135c96324f47e7708ca8ebfbd139e8bacafd4ec7e794cc55ea788c47e7d57c3a3bb560f95e97cec836d2792f997d95b8e1eb94efcaee54a2aeaff1e8b628a677fb22f4aed6239df470ac62d1c6c35895039d34db759ee7ce40e7706c1dfb9efcdbb9de59dbd620741dde3d139dc3fdb569ea7abc48b45990d3167dbbadfab6caff3b5fa69e5d2f12d39ee95d38a2764244b5133abfa1dedb2012cb31fd1c84ed2c740ef78f4b336c1b0dfa39dfed3237c9bb2788f8fca728660fed5e51d736297dda89f8b4a5db142362ef44aad5b5cdee7937ad4ba97a07d51de4df8e7e5d7579ba451d2b85b99c2d471c547a745a8b4ddf1eacedb72cc9b7cad5335b3de12e89c9e9d45fe9aef3315d968d279e856b55ea58a38eba6ebe33f6ec98deea9a66b443e9d641c497d1dbd175387654f7cf46e7f0dc8931d97da6a96b27797435c5679d27eca63c20999dd5bbcf8e7a559d37b86cbbdda8b83de7d1a15424b7df9eea7d5d2fea116f674d7aa692934ce7ddae6e4d7569dd1ed1ed8d7948765fc559e77fb87eb50bdd83f3b9ead828e2ca85a4bae87a7b9714e1e9879e83e3c901c29fec9ecab3842ed33a8bb8f6853c77e2a7c7f949649dee72eaf7a23adfefbed3f35a757e867bbfbb8ee3335198e01b9a053ca3d3bdce07bba270abbe834837744dd5bb23dd63d7229ad9d99ef839c773ff1c24c374ff5ca483e9fe79eafab9aeee3d755fc3f99eb0347a74ed26e2d2b4b82031acf219fcedf37cc4e585ea5d9d96f6a173275e7a9524917591392e7bebbcf380272e2ff6c4654f435c5ea2eef542f1a6ee457a1be2b70fe2d053ddbb94884b7dff3224d774ff72a483e9fe15f171d9fb5975fd4a222eb1fe382e0f268635d2dbf3ed646949c7e5d5ea78953a9aea98d7a8e37825f78234e4ea34796212b9833c722f4c43eef5ea785d12b93710fa66f23d6debaabf23d257c4db3a9c3b76db776e1259aaccf2da7a3fdd0eb849c4dbfacd22ded6fb89445bbf45ddeb1f8b7fc902aee1fe666deb03919de8b0dd8a9ec1b6aaefdf86e49aeedf8e7430ddbf43c4d97abf07d5f53b85d9d6b1fed8d6ef4a0cab7c067ffba234e2f26e0f67cd57f7adec47e74efcf4d7fae9bac17e91bc6cbcc7951f556d0d71af923758c93f80cee138c4f3dd21eabbfb5d3903d475a1cac6feaaff77806ae388fbd4f7b4edddaf9e7bd6f3dc03eef9385dd77cc8c3ff618fad0c8bd95b53581e44f770d872457c9de411757d388aab5c740dc795aebba5e2faa83a3ee6e13754c9bb189dc3734fc4f41fa7cba0c7d5715fec5e77dd77a8e3b733d2e349b3ad485d519cf9ae23e9303f9522cc7ef2a411223e4f1ae1dac1c05793c87a5a3df3719267bea18ecfa8e3d795fc9122bead3052ddffa63a1fe5b9affb74af8bb1ef7300e9a165c33b97a411fe6fabe3b3eaf82df59dd122beff69b4ba6f2a2332adc7667a4fd56b2263e2ed479e3bf13058f7ff6a5b2c4b611fdf51c7efaa63859237d6c3408f1125eb3b4af5ad24e18a8c13f1edf571eafef7d4b9ae27a97a556482e7f909ea79d59e8b8cf73c3fc9f3bc1e7f7a5e9d4f8c7f5e7c1fc981f31762616b6aebbf88aee971ad1fc4f80c53ededc8e4f86f8b1f8af8f69d6ec3e5a9e72e43ef6106fabeae1be67bc234459d5f81cee158e091abc7b59ef3dcd772a77af4fd913afe581d5f8e8571c233e81dc453bc142f33a94dbfa064e871a62bd1b963d3c392d5fff5bb6a5c2852a8641c44e72043b50386dd4acb8accf0f09b8eaec371a6ba7f153a07d91f26d14fd5d522b33c619be5be9b9b9fc6bbbacfed304fd80e5332b6b961cb3d2589ac9fa8a3ee57d171a86d16e4a1b4dd14af87a3f884f3394a87abd1b9a3c370dd5ff45361b6edd99ef7af897f7f44ae7afe67eaf8738f6e4788f87ea75fa8e32f699b14bff2e87e64ec9926fd5ef5e8a7c7adb4de73d577af457ae8eb709c27e2cba879eafdd7d4f97ccf7d3d1e661ad74e96467aa8f71788f87c7f81e2a7fa7f47ec4f224bc910bf56ef162959ba0da4fa01238bd4f5ebd173705cacaedf809ed3d7e1b850ddd73e0fbdd075382e55f76f42e7f09cb69d3eeafa12f5dccde8dc743c4a3d778b477f7dfdd6242c543c458ef6f03cdae539f21997e7485d6f7b5d1de78ae465dc1b1ef9cb94fcdbd039dc37f5b5fe561ddf8e97119756753fec729168efcacec55bb17b13759fef6fd07b70fe260a4faabec06476f93b616c938e5675eba67a48430a6eef08631b6474b94f39bf17f16d943f88f8368a8e4fdd56fca3e2b2c2c3e14feafacad8f7222bd03553fb23956ea66b3b95cc5522de0e57b9e11f53a46c44f7c36b3bdc91e25beab9c831e839fdadd5e8da7bea5a310ae76a740d8e254ab7dbd1b9a3dbd8173d72d7a8e7ee40df86e35a75fd4e740eefa9fa7ce45811ef6ba5e5a1b124f90c7c538fd1fcd9f38d752296cf3abcc6ea3eabd7d1fd0e484f7d4dcbc0fd043bd111aedfa5e2607ffc3753c681e9dafbea78afff7723c78bf8fadef1eab8de633beb5d56d1fdaede51d5c66eb2d3fb937f5bcb157f51e71b447c5d7a83baff019207f7eff6199e8d9ef06c8cffae949faa0ef9843afe55c9d8a4deb9079dc3f10414e6bfa96b9b914da8b1c548a97a5f33d336ba053dbb053d0bc73211df6e2e73f94fd8ef91addf2b57cfdf87cee15b7f57e715eafefdeaba4ea39548870a740d8e5bd53b0fa0734787f12a3d4c58477c6b9b7aef41748ebf59a5ee3f84ce216c9de39f8f9ca89e7b189d6bc658ce231e391ebd22db5118d5d8a2ec734966af7a2c360f9dc3b7d438da389d4fbd979e3ce3b597d551f9c0c8b163cc4de7cf2f6520fb2d25a346c4b7116a5c4613759ce8bcffcd14df50f2c43fd5f15f4ade0e25ff51740e479dcfdd8bceb1edd78ab8fc599e3b7a4d9ae9917392478e1edfd5f152a7ee3fe6794f8ff1bea9ee3feec6dba4659ef0a40a77dcb59c88f4d558222a44a95333cc93ce2fd0ab90aeebba7e33b5d3baf4b3815ff033567eb641ec755ead30798eaf917ee90d4e8da6c0e8393e408e61eaaf2f90bf4b9d27aaa4d02722099f783ae113a05cb5f3af02b9bdd73bd7174baf79707caf72ee4c16cb9c23bcb5594c11eb9d7ff152d63a9fad762a4a15a2c4f95d2be56d76d44e7c325590c045defbce6a47a6ebc15fe35cd1406b9df36aa961b1fcbd4b6a5a21b55fea5c6b90f3097688ad62be73dc23bf9618f63ae76fd3374b1432b38e66477eeaba3b5d40475391131ad03e4fdae2ffc5484bc408a06f0be9037edae4c911870b1362e2ff18ba990c74822c5532a6486491b86b05224ffa74ad4e20e83f8c892134dbb7cbbb504c4b1a16331988ee413204b1185effeec1836b3a767d3b273e6853459e1cfa189c2268c9c082bca81cb5f513849c9c36f9a0a8177fc4845fbaac156711bffb5c957cce7f04b495855f7c04c86ef61227575b850acf3552f96aa99a3730ab9ceba58e7808c26427577573c352e719084cb1f3bb540513526742bce68312ed64d42416bca98247454e2b53e4c8fec39216491bd494b3e4d1d3be2914b1e8c993b5a9fe498c98fa96ac66b552752d9dcc9e796ae58e92cbdf7f37c71c2f1d65bc64f2352a665a9b62a663b6934dea722259bc746a0a572c5ee0c7ccb03361dba974a008b63111ec946ddb867b3ba51448e9fe198283db046fd66306d89530c2d42a5008730c08f3016137835622a783472b508890dcd614399d5ba650ceccb8a117b69f07410e69dc3d9296a97e4dbb9d899e7485dccc4a4fb7158b9de2eb68e75ea9f37c85ac78c2755cc0cd935f88b52fe3df484e16fc002779c91aa9f6925447a1966f50cd28e2ed0dc4f3c15e7b1bcc40e671dec4d0834e0c1da864d6276832eb4849ee1b5472274a72bfa0923b5392fb0795dcc5946ce079d9edcb9f6c625d2cfaaff9cebbdb9cc0ec92ede646e77d53974cf2e43220ede4325026975c61ea28f2a711954cba9ae20e2e0e3229e98dba8174d475a3040f0e28b83b656d43825a5b0f936430c1a1e9a8dc8b16dc9352799841e5881f957b991288449fddb69adb900139fecb6530ef611e082fbff4d2e1e624315c500daae43a5009a0b7296e80e008835a0f3e3f764642f40ca7a3a70f257ca441b810fb8afc08ef6b120e793114af414bb87e26e150388d16894d842f9d9f04e19d69e1fd29cdc71834af286de54bf30154621b1b347f1848498e06953cc8948c654677066b324e77f861b15c31a742ac7412d289c2ed37d6dfdd29fb8c4123ddffbcda39564a2d2a545f49ea618be459c4b8263ea8bf4066d70b45fa8328fca18041ed56329b9a20b329709a5ce35c77874b16ca18a8925f9a6cd406be403daf592c17b01850a38ced1ca27763a2fcba5d6ca80c783095d34c32e434af99b2b12439cd102ac94e0e9a64879a244392cd33d86a3ed82a78577694159b84ef4ca4bf33cc9435c80ac5be16cd1adc7630c8ab942382aebc1502d6b3da2d4d75bb63c0bb94e19438cfd439dfa850461e243380018221de4a93707fccc9a140268723d2480e9ca1a21240aec992a0c300dccc123ab1a1ec5cedb48f17884d32199e242f03253776abe4a355629f73d4837b09f6d68eb6b7e1266da0120c0ed0412ac12328c1d3030a1e49a5f1c2a0697c944932e436e0841db486359a527b6650b5c75039ea2c438efa59c45f8e3a96123edb20fc9956fe8447a9a470583a3692c4aac75182e798d21844cd02d9f79aebfcdfe9bc01ed895299fa73656118cb0d729db45ee5fc0505f644f4fc4ee7097730dd8f9ee329a3383ca8514ca0e2ed0843bc7de833de2652c28f34085fd2da9ff04954dccd35c51d940e506e40b5649b2adbe273c35c3990972b3d591a651f62b98cb97a19afb9e264a7a43ed53936384fe7ca72a05adecb95cb3bd6c9bcd64f9c4ea6f49f67d2bf23d27f15d2d0cf17f34c5f04c2f30df956c467be956f12de5db82b58192b3ee036ecbfe23385c2b6d0846d88bcb147d65c1be5f3c5d2002a9aeacae5cd54401618f4ca93fd303b444b56c8a0b5007e3ff5f2ef581505be1d1b670e52f1822916de8a97fe3157bc603246544ee9ca86f654056b2a95a92e3164aabebadfa65169612995168eca282d4c37d99cecb9aa6d519ba353d46a291b525ef00a3f4c8369ed6dfdcbaeb56969585673e938412edb542f97ef75c9d543660a43415bd03abd2e7c9924cc6962994c13d9d49c4a178554a9bddc506a3f99e3afd49e613259d96559d7a2265b242564c36c5798cc56f6ab16a611f9cda9e730e91e5a2f33d57295a9ba59f730b91e539d2c362b9ceb90f1e2fb13e47a3d505f5a2479d748f210be52d9eea58c7ca534f26c879332f4995401b0ca5000f8aa55cfa292d0318624f499cf24349b527b7550b50fa3d42e36a87d4a5b7f6acfa1849718842f6be74ff8e126e19031c33caa202dc42328c130412ca1ba093d03ba9d50e669296e916d05ddfe2b9757f63abfab9d6baecb60ae74f5d5fe0d7eb43c92627bac816d779f6ce75208d605643bcf2418ccf3b8740427190b9e6f120cf5afe30551ff82e968feeb5f0b4cdf01ec1b0cd86ff589bd884ae61b8326f38594e413824a5e4449de1454f2624af2e6a092975091586a884470f1f113894b29e15b0cc24b7c0a3f8a4a9865a6bc69b480ae855825d56d3ec5fa354a45a59452e7fcbd4b95b9e571fd23d0e751a51acd7ed2f9d1949ee5263ddd9945e0c505758a52d987065f5c29b6fbfaea320a7d8501fd019fe89753c22b0dc2dff3297c05c56bab8957ff14f15a2e9d7f6257a73857fd705c4969b3cda40d9cc6e2cdcf77565148ab0c486fece80fe93154204e340502c6d15c7cb31d642b64875fa99a15b54b16e3fe31aea634d86ed20072b6654d15835519560b8a29a4d506a4affa445a42e5c8354173e43594da3b4c9966277f6aafa5d4de1954ed634d92a1d6512b885a074c3ef55feb58477da78efa4e7d46df398e22d51094d4f126c910c18d86089edbd95f04afa784ef32083fc5a7f00d94f0dd06e1cff914be9112bec7207c70177fc24fa084ef35082ff7297c13257c9f41f8b53e856fa6849f6c107eaf4fe1a594919f12d4c8b7506a9f6a50bb77577f6a97516a9f1654ed7283e43ce999974dd751aff7933fd75158ac233d4feafdc2ec369aeafb54975285295ea0843ec3a4928fa2bc92b2a6330dd6f4aecf44b095127e9641f8069fa6ba8d127eb641f8f93e855751c2cf3108efdecd9ff013a9c83c3760646ea704c38ae40975c189d23a77ca34962b37fc8309bf3bd4fe82b0e842851cb82e556ed3bac3490f5cc30cf25c65bd75caa6ab1d6b9fec5cf5a37535a5f5f926ad61e4153a7163f566b729e936434c7e85b962acaa758ff5a5570d650317186ce0499f06b6830af485016d60a7299f954eca55acf92ce5475a223bef61c5874a692935bebd4e93e7c917a59d271f907932b877f0e94ae5dfb5a6e886baf5c582a85bc322be1de5ca9d7eead62751367ba9c166a7f9ccb7ea28e1971984aff329bc9e127eb941f8d93e8537988443b506963b0d54ad69a4d2f19501d3f12e4af04153ae08a0d63775cdb8bd081b7de6c3bba918b8ca100333bbfb8b813d94f0ab0dc26b7d0adf4ba5ae6ba8d4054b9afa6fb9ee337d078ce3ba74223bc9c0c2c994e0eb030a3e85b2a21b029ae7a994e01b030a3ecd2418e21e564ef53a9381003fce64a7535678b3c10aafede1cf0af75399cc2d4133993328b56f35a8fd359f6a9f4909bfcd20fc0d9fc2cfa252e6ed54cabc23a3947936658e770a436e09ae4c9b9c7fd0c100c3a45be55edd15d2e1728fbc532b6bbd5097f463bbe7505adc65d2a2579316f9ceef1ae176b3bb8e0e99eb702ea5c3dd261d7a2a1da63affcb64bd0eded9e3fcce5c83f3280dee3169d01ec5054c87809a979faf9d4f99efbd06f3bdb7a73ff3bd8032dffb28f3bd3f23f3bd90caf41e30647aad7d667a1751841e34102aefe58fd0014af84306e167fb147e3125fc6153dcfa147e0915b78f5071fb6846717b29951c1e4b9635153473d67419a5c5e3c9b3a629cd98355d4ee9f044b2ac695a33664d57501a3c992a6b3a567ecf9febf69594f93e6530df86defeccf72065be5fa1ccf7ab1999ef551432d815354845ef6a8aced3063a30b5dd0f9d6b283a5fa7e87c23233ad7528178c61088753e03711d85fe9b01d15f4f69fd2d83d68ffad4fa060afdb729f4cf6684fe462a10df310462555f7f81b88912fe5d83f05a9fc26fa6847fcf20fca04fe1b750f89fa3f03f9f11fe5b29e384dd83c8626d6a33176bb7515abc60d22256ac153463b1763ba5c38b261d74b136bd198bb53b280d7e60d2a08388156b0b65dffd4e9ffe1f775206fc4383016feee7cf80efa20cf8479401bf949101df4d05e26543205ef319887b28e13f36089fd9df9ff07ba9e8868d8e82940bf7515abf62d0fa5e9f5adf6f120edd23b06d52a0ee910728b57f6650fb159f6a3f48c1feb9296d412f76720faf12e7d15ae983b555e63b75d201d29dc8532ec7ce5609772946771268a973b55c4e0fdd26cf75be592ab6a891ad2972644b4f20dd2bdc55b972e5c8b2bbc276ae1cd52857d38ab7cb2bf5f2a90a24d93c7656a5c600f1689b5f47cd87a8087ad510416ffb8ca08729e1bf30086f33c09ff0474cc22133fa259519fd2aa3cce8512a10af9908f90cc46394f05f1b843fe753f8e326e190585f4f27334ad275fd8441709e5c13a96506321397a769de81ccdf9878190732619fade40399c175a506329fa46ce9b7a6d436d09f2d3d4515116f062d22be42497e2ba8e4af52e5c3dbe9d87f924cf36b26fb972b7755b688fd0759382ab9e5ff2e6dcb7f475afef824961f6c792b734c3c4d19cfef831acfd729e37937a0f17c834aa67f3024d30d83fc25d36728ad6143b9842a11cc9c9e271b5a15d277df34eb23575697727d3ae87c93d2e34f263d60e1097ff2bf45c97f2f60ec7cdb241862e7cf86d879d567ec3c4b69fd3e153b9046b6a92aa28e8f8aa6451132759ffa0e15c8bf1802f9da607f81fc2e15c80f4c818414a87d23dcfa6cbc2f9b9f607d8ffaf25f4d5f86d6bebb07445ed312d2794d2b87ac741244b9f03bfbe2394a83bf9934e867d46099fcab414eb3766bfd994dae799ed2e5ef265d06a5a94be21ac37e74fa3e6578ff3018dec743fc19de0b5480ff19304f789112fcaf80827f4009fe7740c13fa4387f68e0dc7fa83fce3fa2847f6410fe864fe12f5148fe1310c9cb26c190fbfc371dc1491a433f36098676e8c74d373cedd04f4426edd09f50d83f35607f32d71ff657a840fc8f0ac4671905e2a754203e3704e2439f81f81925fc0b83f0dc11fe84ff9c32cc2f85213b858961ab055e4ba35cd6b175461e15e36481b743fd8e77d5ce95676ef13351ae1150274b7d37cbad97aedcb9a25ee0b9b26ea712ccfaacf5d40cf477a033c92d622b9bb2f35c999997fb74477c9562014b8825b080258bf0825c6e2d3356c0c6e6adee961a568bd8744b573fd039958402e769bfeeedbfa00c066aa4094349c3fd19cc2f4dc22149b58a1049aa75249324f52b2a106d0c8138e83310af51319d638a6970a5367791ae579dab303d005a17ee3a2ec9e2349af4ee38e942eb76abc6ec3a3e05ec9496a1bb50e3ef3548bb6a30a4a22d5243bd1e7d4cf64ed53af5635fbf36d0cb93ab1c8333b83d7bbd4c50eef56562bb9aae5124e994c6ed35e77f3798b611bfcbc4b58b402fc274f946b6c240f52dbc4ed97e7b93edcb30f9b08ddf50d23b98a4c30d3797cccb6022fa1b5416d1d19045e48ef29745fc9612dec920fc149fc2dfa428758e04ab0ebe4509ee1250f0db148eae061c9b7de2f81d25bc9b41f8bb3e85bf4309ef6e103e71b43fe1bfa784f730086ff029fc5d2a327b9ad25283486fa98760837f6e637a53dc70a2dd43817fa0a2a897218acef619457fa4a2a8b7298ac00f227134d64f60fe64fa1ed4befa50b5afbe19d5bede337d07e64ef74b271fd94f0bfe3305acbf0918143f79be00bd4fc91f6092ef2eda9668d17ebef817ea8b034d5fec6b3481e5d2d2f58a37b13bfe2cfd034a9341264d4002d4b4fc96047f357c254f6e43014bd3646b5a7d3adb309b6b6f83235019898721d387b1e63644d6dcfa24842ce96ec504b9bf99e2074e87461277533e6af919ed6e1cfc72ab84a8c9a1a3e6ef94010c3319002c7c095e596e065fedfca537b9aff26978ffa0be9b6bfa6e37f2bb3b5421e0e7dbff3499e3d06c9be302d9f0aacbc01c873b88467b104d268c7104618cc9be4e19e3bf4cdce45e2c9bb2c80def125d2c178dac72aeac94cd59b7715c9f01d391be1b68a324d9910921cf543f8afabf4d290506764747020eec7e48491e1354f24794e4b14125ffc724196a5bd148f0ed47fe4b654ae30236853ea6788c0fcae3134af284a0923fa5244f0c2af97f94e44941257f46499e1c54f2e794e4bca092bfa08c2e3fa0d17d49a93c25a8ca2262900c75838274544eb26d51c42418549e1a54e55626c9006f5a40caad2995a70755b90d25b930a8e41c4af28ca092db5292670695dc8eb2b959016dae3da5f2eca02a77a06ceeb08036d791123c27a0e04e26c150ba1ede0ca56b670af411414177314986e78f4c87479211edae26c1e02032371dc1efd082bb5131382f600c76a704cf0f28b807157b0b82c65e4f2af68a02c65e2f2af616068cbdde14e4450121f7a1042f0e28b82f157b4b82c65e3f2af696068cbdfe54ec1d1530f60650908f0e08792025785940c183a8d85b1e34f6061b24e7e53aa71158ff2ffbfedbcdb101708a1d68d2898b0934b121545cac0c1a17434d926151bc55e9a87c80163c8cb2cb6302da652e25787540c1c3a9b45f1c30ed8fa062af2468ec8da458ac09c8621425786d40c1a329c1c706143c8682bc2e28e4b194cac70554394a093e3ea0e07154b3657dc066cb784ae30d01359e4069bc31a0c613298d4f08a8f1244ae34d01359e4c09de1c50701e85a234208a7c4ae32d01359e42b50ccb9aa1655840e1280f88632a85a322208e6954165719348b9b4e81deda0ca00b29b5b705557b06a5765533a83d9352fbc4a06acfa2246f0f2a793605a4ba19801c46a95d1354ed3994e41d41251f4e25f29d0113f91194e0da80828fa4049f1450f05c4a705d40c1f328c1f50105cfa704370414bc80b2b7c6a0f656646ada0e774e23b0667a185c8e337335de15316cb13a02c23d4534a73331a55d6bb9241d4cebaf974d7677cc3b0f06ca23d0aea69af26b85dbdc87504cf5dde8cf852c34f62bc7d5a24ecea08c6de396370ab4989c448b631c79aecb609d7c02de0aa88bab10b129ecee080c5d672766280f8385a634082e377b22e007944651359c4e868b4cc9703444c356d664c86366c993de5e43d2cb1f693206a32dec93b6c09746a8f85f6c8a7f88a293d30e8fd7202028c4d79650d6764a3358db524af8a9cd20fc288ad3691c9c8ea64ac6d383968ccba88ec6fd013b1a9753b5843302d612565082cf0c287825d5d17856c08ec65554ec9d1d34f68ea1589c1390c56a8ac5b90159145382cf0b28b884827c7e50c86b28c8170484bc966a165ed80ccdc263291e1705e5b18ee27120208fe3a8bce8e28079d1f154d7cf2501bb7ed653902f0d0a790305f9b2809037522c2e0fc8e20453e56e8c731a815dbe6c58fe6cbdaab0355f25ef0a1333637dee4a599fcb137e9640cb445faa5eb7c914ed103b07d389f62be9aac966936038bd2a92382b41fff89995504ae5925737432eb985127e4d33082fa372876b83e60ee526c9725f9f74623389a345854930ccceb93e1dc1436833a9a404df1050f0560af28d41216f334986496c37a5a3f27e5a7015a5f2cd41553e914a8cb7345362dc6efa00d8d3ade9307983165c4dc1be2d20ec1a0af6ed4161ef301578639dd308ecdbdd1253607481e16fbacb1d69176277ca426c4042e8d2d1812a98765239f05dcd9003d752917f77d0c83f8952fb9e6650bb8e127e6f3308afa76a96f7450cb3ed8a84ee8d8cef3f5c21601dbadd3282759fe364392f6fa9737fa57367873469b862aebf98dcbbe0696c5a60f83b853bc1dcdf56260d5428ef3785f2dca650ae716a5290e8dc045a23ff5e2adc35efebe4447637812e6d7a7261d3c283f14b1bd5291ec5c2dda376816894e102b9f1f46212e0797f7a50924a04cce8db2aefc633c589d5cb7bad23c7efeccd468af403943de12fba619aeabce3d2dae9648a9b1cdba89371ee86b6442df6e8d536f62e7dbdb9ec691715ca074da13cc2134accdc0de722e1eed75a6ab0faf818c27792a515fc969f90eda642f690296447a6157ff3e4321055428fb5048fb9d81d3f61db4385ed6153d80a3d615b2e63679b0a199ced69b190eca542f288292407b29c9fc5de81a5acf4e854395a21b3de879563767428a02c6994d50c9ceb4105abf9f2b67d14f5474dd4e7a5953696097717171b72b593a9f03d660adf3246ab82ab27c9cf40a8dcea7095fc7495d887466d9b23564fa142fdb829d487270d35ade96a1916774937378cba3486ab658a5062bac83c364fa5c2f584295cc7f9aed915cb3bf1753b93046a943a484d3093783e8de2f1a489c7d15929b3b94bf3d3a9303f45d553fcd980b6615864a64c0ac2f1ecd722fc846c3f15b2af9842369b08d91a993eab55ddc46d6aeb56cb5a958acb136283a78d720615a2af9a42b48831f7d5b1eaaea1b245b88baa375f48cfa442fa355348e708aa97dc9453c487002f59064c96c858ae93ada132a7c4dddb8ca13a8b0ad5d3e9b409e2bf8b6b086b642cd439cf423adc9aa4f48b97d17c213b9b0ad9d74d215b9032e74caf5540e7a1c9daac99e694e75061fc86298c15cc35ea06b9541e2cdce5d698d74a0ba86a4a8dcdd346cca4143d97e2f48c89d39a166b792427149cc37914876f9a38cc27f33068216d711ed269c35dae2d79896396d4dc317d3e15c26f9942b8d46708f586c4e6186989f05e4085f7dba6f0ae66b4ecfa0ccadfe620702145e0d9e62a97ddbc6d1e2a95f943751115aaef9842b5d8a71dc77620b5c1860f5061fd2ed543e1370617c92712add19bbfa62fd74ff82ea6c2f73d53f80e0b50736c90252facc856a9da7974a84a129ef513a64ba8303de72fcebcf68937ad4a95ca384bca4ba9f03d4f85cf4f9bd10deb6255678add85118fe4b5c3e6aa395e4685effba6f08d12c97b054b1cc21c5a5e4e69f942f2be3d3fb1509c512c70dade1554a85f34859ade92b2a469a81ee711b12d42a0ec6f34d63b33ebdfbf92d2fb0726bd67a56c712d956383d0fb582d378858286ae4aa9389eddf643190790bf220159e1f52b5e5e469045ac3ab640db2de508748672c016a5e95cd18c2aba810fe289d36b2796c60a9b4bd93e4bca36a65952d393e703515c697a81eaa74fa01d20965663946e621bd860ae9cba6902e492b36bd233d6e3ad4e16ec978bd960aed8f4da15d97325e797bc6b9fbccafa368fcc444a321407d859aa5e7b7df3cd5a62ecd25cf0fc5eb298aaf9828ce4852f27aebd6f165b07736295d4b8f9f21e7272c375061f9a9292c0b7d5a04453bfbe1bc910ae7cfa81e90743470c35124aa64ca84b82c533699cedbe93ee54dfb2e4be903ef83c04d14819f537d5ed45771cebf5c8dfb56a935bfcb92f4e16319c9ee344f786fa6c2fbaa29bc2bc818d7be31952adc0ba495d7c8d067163eee90df4285fc17543f76fab6aecf39c2dedc69fe568ac32fa9bccd5f3eadfb32ab9b46888bd5d14f1e10bc25781b15ce5f51e3c566cd12e7e5b454bfd1ed54885ef367c1897d60c9ebe5e9f464faefedccbcf67a07c5e1d7260ee37d70d071aa771269ae1ae69d94c6af9b341e93b2be1df3c2a8905721276e9e7e88bb284d7fd3dcb5b852e9e3ab7b5038d2cbdd5458de48c733996abd2eb4ace57a0f15cadf525e4efef239b7e5927837d1730db73ed2fdc63c399a02f5633f61be970af39ba6308ff6c46cec9bdca9e93e4acfb74c7a1678f4c4f99357e7c54ae774fb0a321d7fb99f0ac1dba6106c686a0935ff18a9eef14fe625812d30dd94a7dff143e5018acaefd2f1fcd15ff493abc44246a5b8e6c94d1ea442f68e2964c7b7707cfb89e74c53c0431491dfa7d307eab7ae15bc172cf3b87f980ae9bbe9e4560b64acba31d880c6b65c2b2814d35284cf9493c15b7e42f00815823fa4efaf0fdff4933271f8a8ebcd15438f52e1fb2335a697bc4613db93ccaba3de138e4e5fd47e66c9d26466a5fd6354a8ff94c958921babc5cec35b4483ea896be9794a8f53217c2f9d9467269c593d21750ba79df32f128149b40ba51477646ea77c076a857951e75624bfa96498dc94e34f8e2b1d62d7e1fb354e6c409a2869cadb632bd75112feecc069db4ab83f63d58ea46e8118a914de49ca0ba4fc6a95df686b9d2c09b9f319a09f6eb2530b74fb2dbd6b3852a13095729351398743973a4c1b89e9d311b9d93996e5901e07a40fb590be0fb13a58c56aab3c68becb75f032b1a6d45afc05bed6da6c43fd12c8e2d461d2dd15b042f51e4460b59c4df233ee3ed8f464a1945ff66e82e1fdf2242940d707538a5b83b20093b801d2dc5c87ed3ae10e63bee1c86c97d32a1f62e4034e6cb0c04091acf7d53ae05c9f5f5de65000eb4381102a521ae15f3911c29edeba59bb440e47818052593503d7d295627b28803dda3e06ec6f9cc07a0b7757e17cd4831d6670dd3bc5c0fd9d135c4f03381008837ee0b0d328af968702da661183f60f6e6b8b4f9e8b9cdf55caef5b7b04ba56170670d1ce3170ffe404d757d647ebd32e16c200ef202a14fec509af134aaa2be37a60c280e9fc41314cffe6c4d401618a39fb8701d1877d62883ee444d44d22723d541a9c7684bb52cb1ae74ab9fa3b0cb8a68d88e1fa8813575b89ab3e54597a9b2e3138ffe184038bbcad6c6a22e97141d7a370b52c231b05cc1b83527195ea390b03c0dcc13180ffe504d81ee557a0260c958601d09c1e31401f7367e82be5d8446c55a9705448df4365de27d9b2213d51330c80daf78a01fa941310ac71a96bec0bc51e19eac6a66a26787697cb4ae86a6961e5d2deaa9d0f860122fc6888ffe38408ebbd6278d023068b3254342d5f5c1ef2ba7c6fd447f61927ca2e2a4fd3f6b65795986b64733b0ca8daa0f2f1f36c35b6a1ed88879b75fb314c35b38fdbc5c07dc1ddd8c6e0f02cee79b2f90d2340b1f9ea6180770aea17fb92135e6754a2c626eaba53c8c3002a17d5ce442be6aeeae532f96df7ac3b053308eae497c2006c73ab18b00827b0c4cec378079af290e567d5a88fbf152738b7ab1aaa1245f2d361ae68bc981383d69adbda16ca01b646f9f1d8c26fb18500eb9d3a1c4c750903b87711b8369ce0baa2641ad60111f0e2d0b072b8ad4c8f94bb9d8ae16e07cc4156d696131cf49ead76a02d10e9afa11a0680e7cb4a6ebb1c8f70af7b65e6ce2efea8d36e39dd84dba6ad95571b54f91be7a603de2bd669deae1572b38966dcbf114d99cf45d31e228efa1ede8b66e82b124dabd6190dd86111f5e10014f5950546d3aecb447d15e0d18cf293a8af2676d45705369a962b4bd497ff46d477cbd6a4333d621f4d18f089266d0e468d5df85163a76c94189e8c2619dd8d123de0d114bd48d18cc666a2698c0ec67c48cdbe9ff9e043dabed5ffdfee9df9e0ded90120c0962df0e3d6273a72d727c08a5c6f5ec8e393af2336c529d53d3a0c4ed0217ef7235d6f3069d321ae66d1359d0066346c805c2e3ad984b320943867229c9d6dc239359438cb10ce2ed9c0b995048ad5df24a68b423e9c9db9703e2c6238bbda84735a28715e8f7076b309e78c50e2fc3dc2d9dd269c85a1c4f91384b3874d38a784126731c2d9d3269c534389f37484b3974d380b4289b312e1eccd89b38fc259a69a95def9d878ae6f3e1fc81c2e907f4320fb70821c22629d14e97618c1f375f2d9f055e51722b07d39c10e13b80729fd1ed430c31d89e0f6e384db57246f76627150d2b3a16cc785f20b84b23f27ca6e0a65a107a8dbb7080f85cf0eef47f0066403deccecc37b830bde1308de404e78fd5294e1f18998b56dce968cff8e600eb209e68c10c2fc078239d82698d34208f32f08e6109b604e0f21cc0f10cca136c12c0821cc3f2398c36c82c93874c106f37d0433d726988cad723698ef2298c36d8219c616ce1f11cc112ddb587445b9eb1732dae5702e944bd1f8e4484e94e315ca6ae7a16a8197148fdf74dadf26e48cc87b71213f1e211fc589bca344be4d7a03b9de495b25bcf0b5ca3ba3043fba25137cfc32978cd6b79f0b6535b2be319c28c72624f852296c91d0fbaecd77fe8375ee92fd978d22d90a95acb0d90aaa8908f6d86cd86d7aa57e1851e6a22c20ca8972a8210b4877457b56b407b8d00e45563a8edb4ae749e7eb9dcae514161cd55b818373aa76c475dd9bc35750b541563a9e7ffe1b0c506c9217e0e3a5b27c87ab59e844664be8a7228413b28170c62187f0ab08e1444e84bd446ca4521fbd3b17877544f2290471924d8eb0acde476c38fba24266b24d3859dd65d870ce4138f36cc2c9eaccc586b306e1cce75e21c12db7f3b33ff03b900bdfcb28af9c628ff7c6ac1096dd0390251664032576df5ae654c217ab196295ce4b7bb25182b3a16c44563995bfcf1d77b16d12db25baf9026f0ebbc83956382212160c084112ef82604ecb46fbbb41ce63ad6fea12d693f0f4d1d47b348573d4920ded0d08edf46c8c0da5eb49cc987fb2f9111f896016da0473660861ce413067d80493d1d3830d66218239d326988c3e486c30272298b36c82c9e81dc706f3300473b64d30c3389165168279984d30193d3dd8608e4130e7d80493719c870de66004f3709b60327ac7b1c19c80601e61134cc616101bccb108e6919c30734562ff913f8f23c6f29dcde3682aea539adb92ce87dece62c65c94adab783cb2d57936c1642cdfd9604e4530e767a3df1d7a3b7709bdfd6a96067ad9f00d44f81670e21b80f0253a7281b0d8fcde308f9cbf80801665c3f920ff90733e3805215c980d8485871cc2c311c245765787187b35d9aa431b51756871b6dc6362436c7894887d708d6dd0e26464a34bec716d0de314c02310caa5d92ac5532dc31a66d7add908e851362dcd333d945d1df7219c47db8493755e251bce2b11ce6536e19c114a9c6f239ccb6dc259184a9cdf473857d88493757562369ccb10ce9536e1645d4e970d673dc2b9ca269cac8b3db3e1dc84701ec35df34c6f3b84d55235d89081b1e6b98c0be87404747536968f9aea69bf67a1db836d1eda4e04af9813de2091ee14bff8f9be8cee08ef70412d469d1d253642656cb1b3415d8da0aeb1112aa34b171bd49508ea5a1ba13296f06c508723a8c7da0895d15d810d6a7f04759d8d50198782d9a0f642508fb3112aa3b3021bd4ae08eaf19c50a78ac45efaf8791b0b446ceb243720f11b31c5efdc16dbf1aa44d668757735632414704502ace7ac2361bd3db3e3c2b8286a7764cf1bec9d85c4e824c636a0f70ab2d28df6ac50c73adb9dcd4ecf41304fb009661817ef3d17c1dc6413cc302edebb0bc1dc6c13cc308edc9f8d6096da04338c8bf76e4730b7d804338c8bf75623986536c10ce3da73c72098e536c10ce3e2bdab11cc0a9b6032ba32b2c13c0fc1acb4096618975eb914c1dc6ab7db6d18d73d16a8edbe8d136f1785d75dc5a65ab6e25dd9559c4bafb0ede826905d56657be9d3f4bb3dc2b8f44a3f64932766cbf576b9ecd1dceee9f12c725eab935f0cb3ebed1064abdb3981764d9ac8ebf9d075e442d70aa1ab6e498ffaf0cf74ef8750d664635a216c167ae84c2b2c41f876d8b1d6b63b7a542b2dd61d1762b54cb62df2b6a30267a74deb76b23626d92c3507e1acb509674128714e43384fb209e7d450e23c16e1ace3c43952244eec5a28f608705d6814dab576a5f37ab98066e46a09d65d72bf3a3b35ce1e5c90fba2c2aade2697f0e9a15c58ed0184b3c1269cac7b65b2e1bc1ae16cb409e78c50e2fc1dc2b9cb269c85a1c4f9438473b74d3859c7d6d9702e4738f7d884736a2871ee4638f7da84b320943837239cfbb2d5d7592c6b958d8ee4790236795aaba67c95cb295f15a1eeeb2c45404fb6c7af338cee0a1d504be9946c8c63ea75c0dc49885b6453533f14f6e5832a905d9e9a8d49882db095091bbcb908de69f67a183316406c836d7721b4a767c32e6764df2ed9e03d8ee0edcf06bc598750a27e09c13b83bf78d9665853a9d8615226ca94429572863b74bd85afdad309c13cd35e7704c60e63b644de135583ceb26751b5307a134f42567ab61d6398a6fd8219d1b2add3701cb2d2736c1a2562753b64cb4f47209ce7da84b320943857219ce771e21c9c76c25f2bdc39c4206a2aafe3c2be0813d64508ebf9d968a1a7d7d951104ab7ed7508e60536c10ca3dbf60604f3429b608671e2ea0a04f3229b608671e2ea1a04f3804d30c33871753e8279b14d30c3387175398279894d30c3d8d49c8b605e6a13cc308e04cd43302fb309661827ae1e81605e6e13cc304e5c3d12c1bcc2a6763aeb68105b3bbd33c279a54d3859ab476c3867219c076dc2c9ea7bc486732bc279553676319a2e0eb55d8cae1331845767c3fb3d75475ce22ca2798ed03a39bd9ab55bee4aae6eb94dc84eafe1840cb39be1815299b4d9400de7b2c65ec81aafe50435445963b5f3105862859a87119b7d119f5f62c742460b649b7f311b59e075d958354183d5fb10c68fb327ab7786b10a1f4578af6fc921e1ac2d86ba9f0be57b280bb88113e5708972a9a89713adc0e7a34aba26c0eb316bdda476d99a2f9740ddaeee2f728e158e58c6852ad82a4d1d10e01bed71880d63b2ff2f42791327cade2950ea90b23ad40ce1aa1e55a2dcf366bb97f461ec46665bd26732c27b8bbdceb28ca39a6cae607f4219c0add9c800a8723f960130e6a36c19c05f11c6dbb8179d5aa5ba3ef48482a5d23221d987af2cef8ec0dd9e0dfbcb6fb2c172d97277e7ac877d2995af208c7770f7c003b022f9e116dd5d6b2517cc1908e69dd9a85fe2edeebdcdcc7077cebd8850de958dfecd69875cffe68908e1ddd9e851026b5c28cbe846a9046c25ee76c8ad14bb658f669d730f2a48b522ccf32a6722b0f7d8e3051f460fa4a311ca7bb3316b689aa71514e6b2bb01c1bb8f135ebec10efd341edd8905b13ea42259e29766a7eade8eabeafe6b84ff7e9ba6ff4fe7ec0a619bfe7f37c2f9804d38a78512e70184f3419b70ce0825ce3710ce876cc259184a9cdf46381fb60927eb32936c3897209c8fd88493755d44369c27219c8fda8493d531910de74684f3b16cac760c73d80e9dd58e17217c8fdbe439c7ba5b1b1bce41684ce8099b70b2ce2162c3b900e17cd2269c534389b316e17c8a13677b29a0426e635b275c57c4f03977b54579e35738718d157ef60f865ed0462912ef130cd4b2e0f3b1980b760182fdd56c94e35364a5e75059e4e72d84ef6bd918d280fef8c502fad8a1277eab1cd4a80b75cffb7e84f0697b1cb8c238c5bf0f2a68bece89b28f00c7830a356eeeba1852c3bf8cdbe2b01541ed914d7ec35e1fa3302e37750d42fb4c367de2cb25e006599304f7586fe27705570be6a10bb6c9060b51e2ffa63ddb324e0de59214af222bfd964d30c33820fc1a82f96d9b608671498ae711cc676d8219c625297e8e607ec72698615c92e27b08e6776d8219c625299e4330bf6713cc304e6c7916c17cce2698615c92e2bb08e6f336c10c638bfd7504f3fb36c10ce3a27cbf41305fb07be215639b886de2553e6a60bec8ddbb94aca3ce55bd50fa7d3216476c7bab9f8840fe807f4e703c48b79b187a907688a3e480466d52f784306ec5dc1a65043fb4c7993b8ccdcd2908e58f6c729b99ce5944b159e69308e74b36e19c164a9c37239c2fdb84b33094387f8170fed8269cacd3a9d970ae47387f62134ed6ea3d1bcef311ce576cc2c9ba84391bce2a84f3a79c38e144cf520fdf78653784e9673659dd74ce4e6236abbb07e1fcb94d38a78512e7c508e7ab36e19c114a9cbf45387f6113cec250e2fc0ec2f94b9b704e0925cea508e7af6cc2c93a5ec986b30ee17ccd269cac3b12b0e13c01e1fc7536f6c0d28e5dc0a151407fbb77254eeff401c6be4c36f7d82f11d6d739b18ef160dd22125d0ed3774e6444cd56d52f47fdf2bfc98633f74c71a8ad4ff37564ad6f64c371565b6bbdb43fc8021629785e0fcf2c0d6ab0f9244f47d6f95b7bfce4c3e8f6d50da17cd35ef76ec64162b63cf4c72803782b1b8bff4cf1d86a98f75b9f87e0bd6db70303a34f1d9b03c30494ec7f978d0a3f5ecacf94c4c35dd6ff0059eb3b9c384779cafa6a8167be9977dd58ac5eceda0af213b8300f4656fb7b7b9c19c2e820b61259ecbb766ed3ccd8f267dba6f92864a17fc8e66e1c909f967b26221e7a3d001f22abfda34dab31b0f6a2b2e16c8bacf54f36e164edf663c3598870be67134ed64e69369ceb11ce3fdbd4293d9d73ea215ba7f4a328ef7cdf269cd34289f34684f32f36e19c114a9c7f40383fb00967612871fe14e1fcab4d3859175563c3b906e1fc9b4d385967c1b3e13c03e1fcbb4d3859d7a863c3b915e1fc477616ae6a81ae66b6ae903711be7f66a39f1e3e5c292d51cbdea11e091fbc0882f7af969f09a70b99f08d697642ad9d7fdb02328c83c3ff4116f9a12d2019c788d840ce4016f9912d20193b32d8404e4120ff630b484667053690a508e47f6d01c93895950de45a04f2635b403256bdd940ee44203fb10524a3b30c1bc82d08e4a7b680641cd86503598740fecf16908cebd1b0813c0981fccc1e27c3302e87d60aa1fc9cbb851d5b921c14ad971cb6ca4578e1b5f079c2c1f89a86f7453656898d79689afd34dcedee006da51456c3db503cc005b61681fd92132c7cda5d1a1f96d6dd2718fb798673c1ea8d60c1a2326cb0460aaf879beb3418f3650781ee4ec0c9f2c9302ece371ee593114ec8de79432e507023845cb3c85892877791a9cd086b2b4eacfedc06c3b8e2e138940db4e644a9a70ba4761b3415478c68d98aa365c84adb70a20501ee24c1d80ed6d8af7dbe73846dec2b9d2bcc5bd5b3f90ef544769a93cd9cb4ca5162ad88edcd868567cd017b3f17d66dc846db7262d54365d30fa171c67b914db6cb864dfa77b966cc37d95cae17239b6ccf9d6fa6df4e9f12ca45780b10cc0e36c10ce31c8bc311cc8e36c10ce336246311cc4e36c10ce33624790866679b6086715dd8510866179b6086713efa6804b3ab4d30c3d8ef9e8b6076b3096618b72119896076b70966187b3a0722983d6c8219c64eb96108664f4e98fe67453216416c7d473d10ce5e36e12c0825cec310cede36e164dda78d0d6715c2d98713a776f607ff8d5da847332b2b75b0e12b12317c7d39f1c180e92ad9830e3ded200af65adde63cbe5376c5e17d81c387310761ecc789719888ad1fe38e4f6e72d485f581ca240ff0f5982760cd03e8d72c750440022f1761de067c2d82db3f1b836c99adc9c558896773a6b905a11dc09dfc9315463aa4ace34043b8fadc2b502134901363ae01a3bfd5b9187b94d856e79a84f00eb23703601ce060cb007e893280c19c68874bb44ba47dae1630cc56a18aab72294a7b306d971100765ce6fced8a5fe41c2b1cb1e5212cbc3a22c043b291c352ce360ba4c5322fc03b822b87fd27c238341b1d24b882a56babb1fa6bb82b540310cc619c30871860a6ce02c20b7631029bcb09562f130d4e0a35e2505a26fa2a8470b83dce89611c223e0aa11cc18972840f94c5ce3741488358e9fca55bfcf5bcc5d228ae62e95f08f1484ec40344bc5f5dadec2ed996d466c33810720caaea8fca46ef68fa8b9c8571bbdb3b917d8eb609e7b450e2bc08e11c6313ce19a1c4f92b8473ac4d380b4389f31b0867d4269cac63f26c3817209ce36cc2393594386b10cef136e12c0825ce0d08e7846c3435f3e56ff708234ec5c26dcf87b7b55e86104ecc4653333da79b303ad0f646d5f649d9b246b7b90982f6284bcc42c7c73b5c08bf86ac7132274277fa75a9032dbcd3affb205879d9e855077bab685a4941df0e7b67dbb710c6fcec0eac1dea7bb30c4268a7d83b6619c6cd180f22b405d9286c0a0eb95ef6284238351b5e73535ac26b8ecd216104c2378d13df0ce15d98a22e6e64bc48760397faf4022921a5306607bbb9fae08b50dd737a368686d31b312a08e598d11dc8b20b6d8219c656d18308e60c9b6086715ae16d08e64c9b6086715ae1ed08e62c9b6086715ae11508e66c9b6086715ae1ad08e66136c10ce368fa6508e61c9b6086715ae1e508e6e136c10ce3c22acf209847d804338c0bab7c13c13cd2eee9078c099fadb5df0e3530e766a3b3794a93bd96cb3e52d7472eec530d9f46563acfa601e0e99c3928db00f06308e77c9b704e0b25ce9b10ce0536e12c0c25ce9f219c4536e1649da6c586f3788473a14d38a78612e79908e7229b70b256e6d9706e43381773e2d4cba016786aa1611e8adb81e02dc9c62c0d70652812b0ee42ad5345af50b54c776e468514582a05e01519ea43ede8351a215e6ad3922bace3ef6c38dba0f6d05136e164eda463c33906e13cda269cac7ec66c384b10ce653695edd339478ad8caf68750deb9dc269cd34289f35a8473854d38678412e73b08e74a9b70168612e78f10ce5536e1645d39910de72a84f3189b70b22ef5c786730fc2b9da269cac3e206c38b7209cc59c38c709efdc75687c963b3cc0bd5b8733e6534f0dcfcd73feaa93234aac8e8a7772392aee4035d3124ee07a2b526acc333e676503c9b615e92864b96b6c01c968916c20fb23906b6d01c9e8b5c406f23404f2585b4032fad2b181cc4320d7d902328c5bda5f88401ec70932df53ba3792f38de8695f0b9c276a1c7d76ca33086a96cafa2bb9cafa1350597f7c36fc9bd2edd4631c5f62ebd28b2098eb6d82c9e82cc606b33582b9c1269861ec6cfe37ca6537da0493b15acf06f32304f3049b603256a4d8607e8c606eb2092663f59e0de62708e6669b6032d64cd9607e8a6096da04338cdb9ffc0fc1dc62134cc6c9af6c303f4330cb6c82c938f9950de6e7086639274c7a91e945ceef2ae16e8052e20800c1e15f64fa3804b68213acbb6ff632e78132e91286e773b4d842fd7cb33c10d64a4eac6d9d935a84327ca87a20545bed59382d8cb3da3ba2d6f8367b970962ac1ab12d13f408b2d22abb67c5313630d9328171c8724fe4c4db0b95efbb64f90d1ecaeec666599a13b79f0b6239b2d1ed9c10878bf85efa32698535523aecbee196f089a3efee07dc3b8c1d74c3b9002f41565a9d0d9f115c0ba5aa4eec754fb6443f1cd96b4d368aabc43c359d022b8cabda754196ba231b952a6ae433be5215c6354426232bdd998da66726952ac6b123361bbd0481adb5156c18b7e1bb00813dc956b061dce0743e025b672b58c6ea3f1bd869086cbdad60194741d9c0e623b00db6820d63056b2802db682b58c69e7e36b06721b0bb6c05cb381ec506762f02bbdb56b061ec1a5c87c0eeb1152c6377361bd86311d8bd9c60f5bae2d3450bac2bce866f1fc2b7cf9e3e80302e30b802a13cd9a659f5ac0b10b10d3a0f41bd53a7d8849375c51c369c474b9ced723cc21725085f20030bc12d13b1c558268bc502fce4dde55aca9cf365b27869109b1dfb5aeffcf317071b9d7fa6eb11b9e2ce42b147d4caab20af5ccaae71ee82664e7b05b65039154ca2933289a8cc5ee639cc1b9c6760a76ff8fa5e512cdcc566563abfb56b46a34412954b1fc6b657872fc086ebdb449d0c71fc6234d1487bc9c9dd8f07c20500a34a57bd47cf5295b15539612e959ad439cfb491df714d281ae982cef490d252592cd74badbc43f55119fdae8ee6cefdf9ceb1c8f9ab5286a5daf96e3492e3bc53df34c212551b30416ce80d98f435bc2913984724d2435904d0582e49963a04dded1a4a9a74ce9be83c1629747eb9d58bc94d158bc96a6e458d3ad3d753cb047b482eed3488f488391fa86e364b4e152237f1c1fb95d217a5424a5d9a32a4a9c347a78ace4962256f12c4c5a11cfed321de55b44b33ed1781a4bfc689795738ecdf54e7fc0d4a5594b61239ff0f4f4f955632360300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/ede034ef44ddb534d940175ccda41131.asset.meta b/Assets/SerializedUdonPrograms/ede034ef44ddb534d940175ccda41131.asset.meta new file mode 100644 index 0000000..4795e89 --- /dev/null +++ b/Assets/SerializedUdonPrograms/ede034ef44ddb534d940175ccda41131.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2c584ae2c75ec2d4f8ce26ceca8123ad +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/ef80b67d237d7e14fa2bcdf855581ed1.asset b/Assets/SerializedUdonPrograms/ef80b67d237d7e14fa2bcdf855581ed1.asset new file mode 100644 index 0000000..6a20403 --- /dev/null +++ b/Assets/SerializedUdonPrograms/ef80b67d237d7e14fa2bcdf855581ed1.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: ef80b67d237d7e14fa2bcdf855581ed1 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d079c55c5f5f8e721bd48ef6d69b2d45d76970511915ea40a0b164058d8055696e2169a28d851b1a362c7de3bf6de7b2f3189493431d1184dd4a83189c6ff9db9337bcfbb6fce7befbebbe7ee0cffdff261efde76e69cef9ce9e5d6cb61ce4f6cb0f36b019bcb26b0a16c3e2b61ebd85ae7af09ce718df3cf3d53d7e7b00ae7b8d2f95decdc1bccb252bcc97ffac73a39bfa7396795acca79b39a2d778e65e2fe3c56eafc3dcd79b7d439e3575738ff4b9da762f59d97e6b3896c369bc53ac6daa710b140bc5429afc5b85db1c6ceeff16cb373b75428c503c911b73a3abfe639772ac5bd358ed2eab9856cb1306b8d736fb9f34e052b77642e13121b0f1ecec41fcc3db497c70ef2d8cef9df44febd9ffcbbb1fc1b3edf401e3ba6f97c27f05e13f03727b427c9fb9ddd638c5f6fe81c2f03e7fcdd2fe5735d5c79f5562591d54d1ebbcb630f29f3f234f46f248f3d53d89b4c461690950eb3c6f2d85b1e7b497dafc830fcbe2ea39af77b49964d813ebd41d84dc07d7ead4f08db553c36f3c56333371eebed96f1f7a97cbe9f3cf697c703a46ce799b6d7cb6bd9f2d835855e03dcf7d848e6f9ac13e67eebe5f940791c248f83a56e2da4ae5782f3b0baa8381d22653697615ca5b9ae9ee7f7af96e743e531c7175fb9f2b93df27c589afaa4e37f4aa7fd6518d780738763fda54964a9786fe98bf796f2ddf35c8ef51ff2d903fc4f2b374fcabb36033b5af9ec68e5ead2203bfeb9943a28f9f9524e6b29f73a70cee5ee0a685b7df9de5e795ec052e76dedd3b837c295d358b11ee986d3b09d7bbde16816efcb8529f45471dbc617b76da4dc722957d97fa07b1e53f27b0239fcfdeb7d72dbfae4b69572551e312c4d3d47c9e3c1f238561e0f6135e9982779714d311823c36cc7e2f38076f2fe41debb1dce0bc82d591c8df3c57557196efb1432d5fbe3e5b1499acfab672684d079a23c364d334c559e4c0a11a62c371a7fedf3859129644e76f936ae023a38729a6c95e753e471aa3c4e93fc3bf9fc40d56792f9412a5d0e95ba3010078e2e4d5bc9f3e9f238235e1736d3a7d30db5a753ac8394792338e7c78ef2fa4de09ceb3ac70da7e97352e62c799cedd3790e9dceec30f7bd16aacc6c96e67bc9fc6bae6b5fb35c5776b322797d9e4fb7899ede8d278277951ee9a487f99245171fe32e5207c57681efb99bc1393f76f6c2137f3bef3657bed5195ce7efde02cef9fda234753d8225fa2c97d30d84dd4d862df3ffe62a3e8f6489694ff72e3f827a8bf89bcbfb48be77144b2cc7d473dcb65bc139bf7f789ab62dd4e8e784db626c927717b1f8fc67bce70f8dde92d7164b7dbab3f8b4a5da2159de3bb17279ed68f7bca5d265897ca707e0d2c3d56f7fe58b4be5b184e9cbd96580834c8f4efbb026ec6e1fca6bc549c22a91cf94faec9eebc969d649eaaef2b1152c3ecdf89fe5d756cae36a795c2b8f6bbc6787a87838461e25ab584f1697373b6d5def3a3f66c9fbb78173fedc2a4f76fb97e4b5753e5d75f1a9da0dca765d1e90cccf8e759feda47ca7c265dbf2319fdc252cb9df56ba727272e579952ba755fd8072aa5d395c8c38dfe89eb752fa6c90c74df2b85972ecc5e2f272b6455eef0dfca617b8c69fbdddc737956ec9386e75f5aca9df1f2f8f27c8e32140b6acb7c5541b16d6f98e03f7f8f918602fb42f992edbe4b1450a7bda83e7f8717b08fb93dd6b288f274bdbfab2f8364f5fd757da744b22eb14a6f5d3b6b27dcc4e75efb7567e711ab08987d1cf635de34ba7cb7baa0d0dfc2ad61f5c3b495ecbf6aec5549fc00e5ffcdce1bb7f0690a1bb7f26d04177ff2c79fd4e57f7b62abc9d3e5b36f974edcfe2f2197676a2adb1febeb0ef0a1097e7c87707f8e272808c97cf93c83a571f97ed7e94e7e7f9e2f27c5f5c0ed4c4e505f2de20106f07c86b8335f13b0470507d2e172271a9eeef027275f72f023ae8ee5f1c1f97ed553dee12242ea1fe302e7727da1a1bec0bfbee34e252b665d9a5f2a8abf7aafec86c29f79e34e4aa3ebd5549e476f6c9bd370db9aa5feaca2472af667a7d33094ff9baeaab19cae27d9d9f3b7edbe1bd24b2f630adaf7754fd06d7b0785f577d48db6518392cd1d7559f4eae17ff8205bf368c25fa7a1ef013d557773d7806faaaba7f0390abbb7f23d04177ff2616e7eb9dc6caeb3733bdaf43fda1afdf02c269029e8161ab723c595cdeeae3acf8e6b3f8764ebe1b3f9dfcf59f0ac05517ce6daefc5c55e7923ac50aa4fcfbc0393f0ef7853bdc0db7b3ecffeaa2fa769acbeb83ddeb9dd518c31d4c5bdfea5ce47b4ef2afa94fddede3afd287f295119ebfd5d87217b8076d1bc9e2eb24324dc50e047135125cd3d5b9527195dcd85e1fbf42296f2f38e7cf3d00f49771ccee97c76ddebdd6aa4f45c56f73a0c7837a5f11ba82380b5c4752363f94c2e62079d228169f278d72fda06bb2fed9c7e4333b933cf3843c3e298f8f4bf92a3fb80d9cf3fb4fc9f3d1befbaa0ff34a8f7d872ca08792cddfb93f893ecafe67e4f159797c5a8673308bef1353fdabba3222d37a6ca6f796499dc6c4fb8f3877e2a1bbf20be58bc529fc43f5c13c2f8fcba5bc437c0c0e49c2203bcdb092d8151bc7e2fb10c6c9fb2fc8f3b1f2fe03f27c82ef79d95fc35e94e7e37dcf4ff23d2ffb68986c1fc726c63fcf5e0672f8f92b9e6d42177eed55704de56faf797c7aaabc6d727cd8ec7516dfbe536db829f2b907c17b9081ba2ffb8762537d364d93e70f83737e3cd42757e5572ffaee2bb9d37dfabe218f6fcbe35b9e8d799f8377004ff666bccca43efd8a943143bef30838777cba67b2fabf7a57f51dcf92321e05e78e8cac2c57dfac025c566cb68fdf4c709d1fe7c8fb8f81732e7b4712fd5e95cf1ee6b3ed30f9ee7369bc2bfb5d63f37cb6cd93327e726debd52a89ac77e4f15d5f1c2a9fe5f2e66be2753e884f7e5e2475781c9c3b3af4927db6ec3da6f7edb9bef79f887fbfb71a137c5f1e3ff0e9b680c5f785a93ebd5fe33ec97ee3d3fd70ef991afd7ee5d3ef709fde47c8709f047aa8ebfc78248b2fa38e94efff569e1fe5bb7f94bcaf1b6b4f96465acba3ec2b8e2d94729f02e70ec73eaa8cfc9d2b7b806abbfd5e1ed3697bfdc17db7afeac3fcd83defaff28d4fe4fd246909d57b914fef4552efd792c8faa30c4ff5edfec967dba7f27e791afa447def2fd2cec52cbebc5eecdaddf721a9fbc7207ef8f1cf2c79592ae5b2cfa4bc2552fed3e09c1f8f96d79f01e7205e624b7df1b1d4d5abdffa80fab491ef17fbec2c96f2f6b876f6536d099546ff2a8fc9ea156986cdbef0d97c87effedf98d78e84d7a54eb1121f433926105bee851f53f52330e620fe766c3c40f62bf6afef93ff550abdfe8ee8f50ff9de0a9f5e72dc21560a742845f44a875f32ff6d2b8f723c3ab652eaf22c3877eced9facfe2f65c456c977559927e78dc4ca80ce65e0597e3c86c5b7498e71c3cbdee393adde5b2d9f7f1e9cf363b9cf2fcba59c916e9c658f95c74df1efb16fe5f19bf8b8abb9affa18ee89d7a3a64d55c6bc7950dc371ef2e95d8b4c06ecf2c9ce90c98019aeae0364fb7f4079fc7bec9ff1fe9acae6ec6479bbf2b3ef7cfef603abc90ff255ddfa7b295f8d9da9bf61d86b65d82f8073c8759dbcff2238776c1ef8567cf8eabdd87a1f3b992fc68ef5b13b56cad9e1ea3c50f63b0fbc39fe3df62f1fbbb549f4e7ef37ae5d3b07a9fc37a49d83d6bbfa0dda248fcff9ecf4d73354fe01fa686a9efd16dc83692c151b354746e757b2bd1aabf4e95fe9ea3f58ce7f182ceb714c8d178c61c9f3cafff8e45749f92f81737e5f37befb5f79fc5fbc8cb8bab84a6bd5defb35f559598f653f7bf7f295dffe1bbcc7cf7f02f6c07eb574f37fe96fb10d3e7e1b5c7e4364fc0fd9ede3579e829f7c2eb6113ca7c2da04ae297fd90cfc6513b8c68f5ba46e2f837347b7a1dff9e41e279f7b0584cd8f5be5f557c1394c43c7cbfb57f8e46d033a1d2fc3dc239ff9c517c609ccabff3bbc86aa76ce8fe07e13a0a7baa664c0feeb35e0c8afbf26e3e0f6f83053c681aeedbb9dc5f7256c97c7137df17fa26b6f8e8cff1c15ffaaae56953cec1ab94c1ed558e603e09c1f63401ebfff7a407b4ef6d973b22fdc184bd93f11ab27efdd1e9c2753f62859a7caf0de00e7fc780a887f596f8c9d06ae9d228fa7337d3d610778760778961fcf60f1f58433dcb8cbbbdd275bbd77268b2f03d47872037954e3c72a1f52697427d0e12c708d1fcf96efbc05ce1d1d86c9b183bc5390b0ce61f175de737c619e2befbf0dceb96d23e39f8f9d279f7b079c2bc650cebb3e397ebdce0736aa31e4fb53f8baea171a02ce41bd2857e5535fa7274f7b4d71957df9b10b7cdce458b6283b82cafec1c7fc42165ff7bfd06595afda6b6a1ef8f7cc2b9f6ef6c9fadee7c7e9eaf2b30c73178bef47dbe5ea5090259f53e5d04f29ec55f2e4fa9798aa675d24e5bf07cef9518db73f07ce613abc84c59515e29cebf5b54fce6e9f1c957f2a1fb994c5d7eb2e02d7955dfcfefb2edfe1f5e3ed496977dcb5063191e74c65a5ac98ad673922c31bc0d25f72a6de4cbdd88c8b6ec87ff19ffe22d82ab6d979b554b7e26bbe584f56c5f2599e76c55767b18e44853e41fc2e769e2813423f882504f17042105cb972e75f2958ae56e95c9f2256bbf1056b65ce9da16c8673e46f2d759a7a0b9d7ff1521638c196b36ae7acc8f9bd5ec85beaa89df8642a93f8d236ff3b731d99eecabb35ce150574bd735e2e349c277e6f109a960aeda739d7aac43ac0b56c251bef1c3789d0126daf70fed685592491e975d42fc0c3aebbcbfc54344d74ace1dae7085ffcbf18a98b18e1e81b7e10739361fd1c917b9c991013ffc7d0cd647865649a94314c208bc55dcb6339a2be32378160701b132dd4fbb7cbbb901524b5454f86477757618117c3477ff5b7e6df7cddea9b06f1a6e5b31c51a5e896c2b46460b9bc6cb1d22288090d1ad4cfe58afaf1c774f845f13d2f42fcee7365e2b9e011d050147ef11120a6a11439b9da1c5078ce17ca970bd5fcc670158a85e899a2d05b25d44976c7bb9e10cbb95ca54622a2128be154c66251554f1755a28655542729055b389e3cb21ad758e145568ea85b754ae2d25858a2d2554fd6bc54a27becfed96b8bceffe2d306fa78692ae22593d0b098d94f17334da34e44a94b8d64f1d2acc62e2f5ef88f9e6173c4b753e98011acaf23d82c6adfe6f7d60929c5ceb3c119f269fa83fc19911ee0fe8813a6560143d840833097236ca9d18a3568e2d38a2b84486ea88b9ce675534467e6dc7c0e47471f8206a873b74e5ac20675ed463a7a6241c752527aaae538cf69224c77ee153bcf978a6a28bf3ec79158ec84cde58d132178adcdf8379293e5a3aa43fc64b554db0aaa7d413b38ac6618f1c61ae2b9dc5fdb69dc40e471fec4d01a4f0c4db064d63e6c326b8a49ee105672334c72c7b0929b63923b8595dc42976cf8f362720b7db2f13a5cd45fe39d775739c66c10ade86ae77d5d074df2e4d239ede4d24524972ca6eb360aa611964cf6d7c51dbfd855a7a43feabae051d71213dc2da4e05698b7750feb6dadb12ca38726cbf8c5f9099265b4c178f40cc9a3ad2e8d08faab49d3c87ce79adb293849dc552d2525739d38e7a1a99a74b23778ba982936abaa16ba244f41594cd37e108ec117b6d06ad68bb9d3fbc54f23a479d15b245c7a65b064dd0e73e53e1a57e63f415cb9bd4e382fb8fab2c4e683369d34c78577c034efa7d1bcf7f47a8134ef88e51d0784cd3b3a6192fb8795dc5997be4556752269fa4e77a0628ad813af94cd76aabfc730b78739d1b9554ff55ce7b84268c1af732d520f7024cf0bb2757981c86d2769cbcdbab2820ffed41399c34091390c4d9239e8b4099e35e8b3a6412274b3d860d958172ca719acc9693ed4656349729aae58921d1236c976d349e64976a8c65773b9aff292a2a928e413c2198487d35d973588fac0963acd1adc363297b7427496baf26631be63e546e1aaab1d07de201da7c879a6c209a3543a7998cc80cf3debeeef7c9165b53e390c13c9614c1ac981d22a2c01f4d07912ef4ce08b8513babb792134d7693b4f604b44323c565ce694dcd82d138f96b12da2cbda1d064cf0b746b8bff5d469c3db687c396eca3a6c5b5c701626b820a4e05e581a1f1e368df7d649e6b90d5fe21ab686d507537b4458b5fb6239ea484d8efa532c588eda0f137ea046f863f582093f004b0aa3d2f191245edd1f137c902e8d711b27887ed92ce7ff3ae70dde0b582c527f96280cbddc20cb49eb65ce5fbcc01e0c9e5fe73ce10ebb07d1335ba727778ad1619d6200166f076be2edbb80f13610133e46237cea7ec1840fc2e2ee105ddcf1bc9e971b6bc5009e5bb6c5e786596202449698f3522dfa174b44cc558a78cd62c73925ccf1ceb1ca793a4b9403e5e25e96d8c0b942e4b541e27430a6ff589dfe4d81fe73808641421c82e55be334f9562c60be3554279c3f3f9e21151fbeb83878c52707c33651878d57932639d5175e73ad16cfcf130e505a53572ea9a5023257a3578e688baf65755921e3ad053e43a852fced555178d8de1874988a176f4ff82b5eea475ff19acc78c52b8fa5ae78d586f658056b1896a94ed164aab120996a1e9616a66269615a4669215fe773a28b667d9dfa1c9ea2e60ad93ce585aff0f305f6fbf95bffa20fa9200dcfaa2d1d0789c9ae9562837e975c25cf4cf930d132b013bf0b5f24097d9a982ed244949a63e9a2002bb567684aedbd0d8295dac3752e2bfae62aead465270a0951b8ed4c9ddb8a3ec4c23422bf36f5ec292692568a4cb54466aa6ed6dd53ecb45f218acd52e73acf78e1fd4162777b5e5f9a2c78af11e4b97dc5a2dd8b39f92ce1e451db89397a215600ccd61400816ad523b024344793847e0a988446626a1f1656ed0331b5e76ad4deda3098daa330e1f334c267340a26fc209d709e31f3e943615a88a331c17c0b8f84ea266f62ab76c2725f4b7199682ba8f65f89b8b2d9f95dee5c5b2e44648949c16aee43102d0fc6d82ed0b06d1590ed180cc1e121d91ea213ccddf38874042719171dab13cceb5f4732a4fec53710095eff1a87615fa8c1be2720f6f13ae13c992f0a9bcc2760921787953c11937c7458c99330c94bc24a9e8c45e2524d24f2e93f4122710a26bc5823bc28a0f0a93ae13cbd2dd3e54dfd186fe87b9554b7f9e4f56b14b315424a85f3f70659e696c4f58ff03e8f32d9680e92cea7617a2ed7e9e9ae41e233bcdc09d615e29d12a7505e1d28d44331f4251af43b03a29f8e092fd508ff3ca0f01918af153a5e9d52c46b899818e45d1de65c0dc27126a6cd4a9d36fcd48bb720e1ccc290aed220bda26930a4b33123ca7446f012c1c537ca41364b74f815cbf5531b44311e1ce31c4c8363741af09c6d464dc5604e86d582c330a4ab3548df0b88742e96239787cd91e7616aafd1659acd82a95d84a9bd36acdaf3759279ad631d436a1dbc972678ad630116ceb15838151985733846aa322ca923b008aed244f0d8e6c122f8484c78b546f8d680c28fc2846fd0087f2ea0f08598f08d1ae1dd5a0413be0813be4923bc24a0f0c598f0cd1ae1bb030a3f1a13be4523fce680c297604e7e5c58275f8aa9bd55a376bbfd83a95d8ca97d7c58b5976924e788896851ae65f2cf7e0ab6dc836ff592de2c6bbee98c6e1d53aaf0b12ea5e5ba78e125f4769d4a018af212cc9b4ed478d3a70113412926fc248df045015d750526fc648df01d0185afc4849fa211deaa6530e1abb0c83c356464966182f9fe290975c1c1c23bd7893496253ee9cb9706af955f10e6db33948a81eb62393f5a7538a9816bbed63c4b7a6f85f4e972c7db873a5783687d0ca6f5e93aadf9c82befc4f5eacd6e53d26d86e8e61566b1feb2d6dd3f905eab311fd8a1f181bd011dac1c33fa8c903eb04697cf8a498f65a4f92c368fb44874def3bd2156084f5953cbf3f6cf4c3b4f3e4be4c97cb2029dae58febd5617ddbc6ebd9321756bbef55253ae72a0baf53a5d38dc67cfd1f86c41c07c6b3d26fc5c8df023020a3f16137e9e46f829018557e884f36a0ddf1c2a54b5a61253fb028ddaaf0554bb0a53fbc2b06a57636aefd2a8ddae5530b5376079db45ba0c9d1b994ea748964894d5a280e245cc1ce6ae6676e74a153b574bc42caa55e27c8e489abc6771992800dc2d1b9688ce8f95622cb1c2b9aa665d6d66ee32b72c511d7337b0c9125941899c8bb75a5ca9144f958270f4054e992c38611115b47773231645176ba2a86fc028da8445d125218b9fcd98e0ddbab8e7b3198a9c93f571f11224bc2d58c67a2996b1f26f5f05efb4380eb3eb729d5dee588dea2975fd7771c06ad1562cfeafd0e52c01e3ff784cf8951ae1f55b07137e02162757617172754671b24d170ecff4f6a4e3c449c6f9b66382af0929f844cc8bae0d99ec4ec2045f1752f0c93ac13ceeaf6789733bb98020733b4fc1bcf0068d170e6e13cc0b4fc584dfa8113e23a0f0d330e1376984af0f28fc742cfddc8ca59f5b324a3f3b30a7b95597a7f139a74b9c7fbc6fab5ce4d6aa8c2d738a137e67bd682af2f23088879d8169719b4e8bb6355ae43abf79c9cbc7a6dcd94199eb7026a6c3ed3a1dda481df29dffcb456388bfb3c9f99db90667611adca1d3a031880bbe8688d78c8284b653171a77df3b35ee3bba6d30f73d1b73dfbb30f7bd3b23f73d07cb9aeed1644dfb05cc9acec508ddab21f4634042e761c2efd308efd42e98f0f331e17b75711b50f80558dcde8fc5ed0319c5ed855872783059d69457cb59d32e4c8b8792674dc36a316bba08d3e1e1645953412d664d17631a3c922a6b3a5c84176cbdc32598fb3eaa71dfc6ed83b9ef6ecc7d1fc3dcf7f18cdcf7520c19ff905698ead865189d2735747605a4733946e7298cced319d1b90233e2198d115f0634e24a0cfdb321d15f8569fd9c46eb891d82697d3586fe790cfd0b19a1df8319f1a2c6884f031a710d26fc258df0fa1d8309bf1613feb246787640e1d761f85fc1f0bf9a11feeb31e7e41f87408bb5fc5a2ed66ec0b4785da78557ace5d562b17623a6c31b3a1d54b136bc168bb59b300dded469d08479c5da2431e0b52e604fd5cdbaf0b803bfa571e0ef023af02d9803bf8d39f03b1939f0ad9811ef6a8c28ef14cc88db30e1ef6984bf1650f8ed5874f3bdf9c3940b77605a7fa0d17a74e7605adf8909ff9546784940e17761483ed4a5003ed291bc9f3eb127375c9fbddb6f6a762ffddd5804fd5a1341550123e81e4cf86f34c27707147e2f9665fc16cb323eca28cbb80f33e2773a425d8219b11713fe7b8df023020abf5f279c7703ff219d2c234937f0031ac13962efa0ba19a34fdc79a976c7e83fd6f1d28ed17fc2528dd187d7151ba37f10f3a53fea525b405f7a48279c0fe5f2cfe3861aca7d1893fc6958c98f60e5c39fd3f1ff2499e6a33aff173b5cada813ff0fb3275a72cfff4bda9eff99f0fc81493c3fdcce6dfa98780c739ecfc33acfe398f3fc35a4f33c8125d32f34c9f4ebaec192e99398d6fc6bc4095522be25c238d11c2a15cb52740b9ab24475292be0dcb3a7303dbed4e9c1f7540926ff694cfe572163e7192c76feae899d55dd82c5ceb398d6ffc06287a79155b28aa8e2a3b466bf8f4c67063e8719f9b5c6c8f2eec18c7c1e33f21b9d913c05aa79066e7d367e9a6610b35ec042fe561732af11bab36a726a764ecfa9d91467b693204a58d0d91c2f621afc53a74147ad0633c45f55620701b7d69fd9bab197305dbed3e9d2354d5d12b7d60ea2d3cb98e37daf71bc9d3d8239de2b98c13f84cc135ec504ff2ba4e0d730c13f8614fc3ac6f9df1aceb707e4fc0626fc3f1ae1eb7b0613fe2686e4bf2191bca513cc739f9fd2119ca431f4b64e306f87fe5c73c3d70ee55f640ede0e7d07c3fe8b06fbd45ec1b0bf8b19e17ebe5663042fb4831bf11e6644bd58a2113b021af13e267c3f8df0bdbd8309ff0073ccfa314d76cad708ce65709b981251c7561979361b200abcb5f277fc2a842c71e6163f83c5f61715a2d477b3dc4a562e36c8a8647019b8dba9c41734aff7d50c543855e20b5d95a27ea7b2f32c919997049cdaf72b8c45031d0bbeb511dc6bcead657a05acb7247ba3d0b09cc149b3ab4411949552429ef374d0951b1f620ed350e330f5033accafb124d5084b528d334a52bfc18c68a231223ba011bfd509e7449bea629a4fb0d777912e949dab7ce50b6f5db85b14258bd3eca4770788e9a86eb7aae7d7f129609df00cd5851a7faf4af8559526152d131aaa6f2a78b2d7c9d66910fffa48478fd36e160bfff58cdf61f1de5c13efadfa048bf7df63cedb0273defd3372de3f6046b4d4183123a0111f63c25b69842f0a28fc134c786b8df0f280c2ff88096fa311fe5140e17fc284b7d508ff32a0f04f31e1ed34c27f0a28fccf3ae1e21b53b190bd3d7fd149e6cf778885ab1d7e8665a01d7519284f61d86735a7c9a58d9b0265419f63f1d149131fcff50b161f7fc58cebac338e2f19acac31ce1df0f2cc736b291bc4e365728b616c484ce5f69e2c3514e66ef4b2b2662b31b784281339bd1a68f34a045c1755eb48ac63c1fd2c5788728cd7c68244c91718b52e3a6a7c1b1b3e70cfa70b73dd360207f15c22f369047fc3b4e9aad3a61dd06676cd96ddbc0fbb4a6cfb0fb50ba2c5979816dd745a74075aa4ab0d7fae8205ed52fa0ad3ab7bb2b81a4614577fc7b4e991ca73bc3d73663b7a708f0d1f67ffc0b4e9a9d3a69726ced2d52ab3b8fb5aa71fdfb1212b9d3c7d1b2ef81b9d609e75f7c22a47bd33aa1c7d8b01eea303ccf369dee42caf99079059b4fe130bb5af2e545e46f2c8f3c29ac4d4374182ce45f80e2babfa69caaaf706042babbed709e7cf1fa0a98bf39f2075f11f74c2f907e7faa7e36abd71c1ffc222235b17192d3491b149947e41a3e2472cdc01ba70b5b89248ff37267da04e3abfe1f610e464b0bfd87f30a71aa471aa5d838339d57f31e18335c2bf0e28fc278cd290749c2a09929f31c143430afe1f862347978003e2f805d33a57e734dc27730229eff574fae40fd3c9e7fba927ce179b292aa26aaf41ef4eb0c417c334c9d369c225f009034123ab1e164abe2e94a68c69d7a00709713f4d8839e2835d7c43bea8b6502a72cef84631c1b74f2a88f14eb57830a250d74e88181ee3b974fb04cb92858f7e065e1757fcb430c62beaf12a1d3af3c44657747bbd5e42d434c0a3a601e60c23b07246d5c956381797b02a69545940576f88853b52176e4b34dcb5b23f3b48d88d74eed8236a779c20da9a1519b8e381315e338a47341471c6518833260b1dfd8cb88e9bf80eda9208b9b9cfb919ed3cb14138afe7cc16fdbb6e6f7165064c0f8a05fd66cb6841b64f82e599ea87516fa24b29bcefebe0b07d5f4d31c963c24a6e86493e24ace4e63ac9bcf230b6166af32db04c695cc8fad1fe188ff16179b4c4244f082bb91526796258c9ad31c993c24a6e83499e1c56725b4cf294b092db614e3735a4d3b5c7549e1656e50e3ac9bc6e70683a2a27f94465474ce5e96155ee84519e119272674ce5996155ee82499e155672574cf2ecb092bb6192e78495dc1df3b9c342fa5c0f4ce5b96155ee89f9dcbc903e9785092e0a29b81726787e48c1bd7582f9c4f905e908fe0c17dc07ab0f1c5e0bf581be986b1c11d635fae924f3e78f4c87479261c70330d0478504dd1f738d85215d231b13bc28a4e00158ec2d0e1b7b03b1d83b3a64ec0dc2626f49c8d81b8c415e1a12f2104c707148c143b1d85b1636f672b0d85b1e32f672b1d82b09197bc330c8a52121e761825784149c8fc5decab0b157a0eb84c8724e637c3be6e89760e956e8d6ee52ac55e9c4c5409cd8702c2ecac2c645a14e324f20c7a4a3f259b8e011985fae0ee9972331c1e521051f88a5fd3521d3fe282cf6d6868dbd833016eb42b2188d095e1f52f0c198e063430a1e8341ae080bf9104ce5ca902a8fc5045785143c0e6b6855876c688dc734de1052e30998c61b436a3c11d37853488d27611a6f0ea9f1644cf0969082a760288e0b89622aa6f1d6901a4fc35a86c7d742cbf0500cc70921714cc7706c0b89630696c56d0f9bc5cdc4409f580ba067616a9f1456edd998da27d782da7330b54f09abf66198e453c34a9e8b0139ad1680ccc3d43e3dacda4598e41d6125cfc712f9192113f9024cf09921051f8e093e2ba4e02330c13b430a3e12137c7648c1476182cf09297821e66fe786f5b74598e4f3c24a5e8c493e3face4a3b14ce3825ac83496e884f389bc17a613874926f22ec578ec0acba318937c5158c9cb30c9178795bc1c937c4958c9255804ee0e1981a598ca9786557905a6f26521555e89a97c795895576169f08a5a48836598f02b6b41f8311893abc232598d75f25e1db293b71c53794f5895d760a4afa905d26b31e1d7d682f0751893ebc232598f45e3f521a3f1584ce51bc2aa5c81a97c6348952b31956f0aab7215d68f7b73c87edc6aac12764bc84ad8068cc5ad61596cc454be2da4ca9bb01ee2db43f6106fc604df1152f0160cf29d61211f8741be2b24e4ad583677772d6473c7633cee09cbe3048cc7bd21796cc352f67d2153f676ac9f6a6fc87eaa1331c8f787857c1206f98190904fc6583c1892c5293ac17c2efc43e9084eb2baec544cf0c321059fa613cc4f1f8925ae57503f090134c003381d4be08fd64202df81097fac16849f8139f6e3611dfb4cacc6f144c81ac7593ac17cddce93e908e6e3ce88e09d98e0a7420a3e1b83fc7458c8e760edc26742b60bcfc5547e36accae76189f1b95a4a8ce7eb02e01b0a3e9f0e934f70c11760b05f0809fb420cf68b6161efc224bf1456f2451ac939bd9cd3d87c5637cb6e16caf92ac196d8bcac8bbb988f83585af34a8c2fade99c605d3a3a60cb682ec6f2f6576b216fbf048bfcd7c246fe6e4cedd76b41ed4b31e16fd482f0cbb0ead69b31cd0abf89e274aee32cf3d84436bd662b52be234415db282278b58cfaa1622de034e7beb7f707bfa29f72a59ba0c59f86aec51d7f1d73f72f0bf6d5afcb312bdfd259795a8d95f3598948746e025d23fe9e56b38102df29cd4da0d36a9e9c54b3fb6ffcfe821592c73c71b7c491582dece272e3e97912f8f3c1f4c0241531be8a70a5b81bcf1426563fef058e9ca02b46afc048bf8df9130cd1b529df79c7a5b5cec9149738be5121e2dcb5b648eeb8ecd7d67b17bf5e5bfe742566e53b3a2bc7f8ac84cc5d3b278b185b236cf46b191f43f04eb2b402df0a62d9559865efea2c3b24adf81b2776192c636a6565f898f3ee04b1ed6accb6f774b615fa6c9b29626795b48c9f6daa334bf66096bcafb36467c4f999f70edf4f926f78b399f14d16bc6daa2b03783964875bc1cb926a51cd80b91eaf60d55ede760d46fd031df57169a58d19ccddabcc845ced5accbe5fe9ec9b41e855fceab122186e955b1d2e134197b12d221dea73924c62f53accea0f75561f9cd46a5cd3b9c216775f55d746551ac7ef59577bb1793d66d7af75761d19b866e7ee05165fb7d34970afcda9c9072a9cf2803775c2d4043389e71b301ebfd1f1981e49994d5d9adf88d9fc5bac9e12cc07940f7b3bc5c1780eea11412cbb09b3ec239d65a310cbe68bf4592eeb266e535bb55a16c8545c92101b346d949b318b7ea7b3683261eeab62d5ddb7651973bf6c527b96de8259fa7b9da5a319f6cd225d4e116f01fc8020673255c47285680df1fd4437d7a255b76256fd219d36417cb8b086305fc44285f32c4f872b93947ef1326acfb2db30cb3ed659362165ce995eab00cf4393b55933cd296fc76cfc4467e314d427798d7799f390b2d5dd8ccbfba46bf2bc442fb3b64bc23b305bffa8b3b594b8f550253eccc929b9ad8305c2dbcb6a729eda690f67c2e94e8cd39f749ce6d7592b2b39a1f01ceec2387caae3303e60da302145dc8d59f8679d85d3025a78b8f0e8b5488cd485bdf760f6fe4567ef5c42cfaecca0ae511b04eec5087c565b7510376f1b076a20f456dd8759f539d64311d4aac9e289c418f2e739e9cb0d62df5eccbebfeaec3b2844cdb14a94466bc52ef26e3b0fb7aa28e1d92036dd8fd9f445b038f3e73df0cb91a93c8fb2f47800b3ef6f987d41da8caead53643dc2bbcb473c92d70e6babe6f82066df973afbfab2e4bd82450e610a2d1fc2b4fc2a79df5e90589897512c50fadec398d57fd7598d7f17baa866a81ee611de77ba787958adad8b65d6bfff08a6f73f747a1f98b2c5354d8c0dba5fc3e05f699ac4d6889d2e13dbbfc96220f316e4a3983d5f6335c8e46984b786e7885a55a5a65c4d672c81d74656d4a2858f61167e934e1b593f36304df81eef072f967d5489f115e5f8c0e3988ddf623d54e9f403a46365663946e6963e8159fa4f9da553d38a4dff488f9b0e95dd7519af4f62d67ea7b3f68894f14adb334edd67fe1446e3fbcc47f92619948a9fc6ecfb4167df51846d3f556bcbbcf707f78620449ec188fc4b4724cf17e31384adae5d55a01687c75d32afcdacbef02c66c18fe9ccba496c05a5e7b599a5cbcc3df739ccca7febacece7b3729ce883e53553ffd855a9f0263eb7a37662e3794ccfffa4e34f909d5fe72952e77473894c53c40b9805ffcda4bee67ad33ce7e165cc6d57bb7d22753917e845ccc29fd2190d0e324fcd9c72fe25cce69fb131537d6b484d5776bfb9ba96d55ddfc9cb9845ffc37ae853f7afa653374da79736784f6ee631fb0ac6e1171d87810138a838555ff0a8ad5ad6ab98c6ac9e46e30352d639e972f3d7304d633a4d47a06c133d3d5e73f79b83de880e457a791db3a59ece167f3d016bc1a5aa2744dd7a7b03b3723f9d95d303e7736e299c783771f696fa98101e9f8952bc323f88cd6f6236d7d7d9bca88e6bf5904bbafea0de0942e52d8c4a031d15ff9c0c1562105ff72cc3fca0767cfc6dccb2863acbfc7d3141cbbbbaacf5bf8359da486769b0d659212bc8a075c6df0a62c1bb98058d7516e87b147898c17b145cfbb0ebb51543ef61f635d1d9372365a9e27d8fc9afa3fa1e169e6b60df724a96d36496e3be8f59dd341dbfd4879f592b2f751dac91f32f16131fef1152dcfef375e21d5e6ee5f0c5e2b1dc9a5261684d6e3f34ae64f0aef3f0d73829857b4c514dbece97fa2597d0ac9e9b45899ffef2eb886ee6185bc1fc4b092708f9e53235aab81c2a08b9b38ef912c9a14eadaf4cbca51645a6b24257c20d05651cb42eb54d8b91458e31f16d5428cb21cd3f45b6cf59da9cc76a0f19abf572f820676c5086de945a8b163cb4fdf43ed431812c4c1d3add5d01b364fb26c6377a5822829923aae3f894fe9421fb379bf7873c440850758394e2e6832c4027aeb37037775a650573071b3e7264366a502f97c7c8fe94d8f832e089a2ceb7de01e7ce5653393206b0d20a847c929b42d89212612be7443506a78a01772ea058545cf8a4a8d96cb515c0ee6eec016b4509ac1df3be595fb90f806bd5cc03d79a125c1b0d382e70adf3121f56af16574bac80b69479d0da50274f05cdeb8529abc9cd78abc20660dbfb7ac0da5227cff8fc6cb2f3bb4c4ef154139ddc646a03b8ece61eb87694e0f8c7cbf98c9d74cb511be0ed02a5687b4a78cd40329d1dd75d6503a66edd3c4c1d2831350198bcd5293620dad1c143d49112514381a8d2aa3caa7e0b0f4e274a389d9c93d9358d243576e1cefc992b32fd6a56214bc539b267c906807b4102ec4c09b03148805ccd1596541fde6aed01ea429d43cd162313dea8ba1d55d2adc087ba46e5436a91910d80ae68eb01ea460988ef9aa8aaa093d8266175754dbd89cfcc2811b5aab9c2c34a84bf953b01da0091ff2888dd2921f21d1f213cde27c6174f97d67c19b1c4f2ca693bd04bd68312650b99a7297fdb2c4bccf9a2c16d03aadd206feb495f41555bfba801061b10bdd4db43941555039bb717e178bc6a33da5479fdb19107ae1775031b82838b34c7892637f4394b2a1da0f3b03725bce6a0d2e1ad3974573adb006a2fa8c0f6a1ee309c2992df6adf163a139dc72b444836005b5acf03d637da0ec3f819462596e567e56020a41f7d7f3e2f2b278aa06dae8bbdd4c083760025b4a6001a1f53b7a98ab1bd8f07a93f75929c24063aaa45e0de465fdec66f954e5ba0cc09cf06709f02efcaa604b73fc8cb6c1d5ae3f38114ac01f403b9ee9c8b75428cddedc9d1c0cb0652f7c2ce75a04d60e9ef996903c01da225d0a8814fb87f1a6be6d3a68251c72778b5646edfc87a71b54a5652e2267cf17568c6693e084ed8caceb89f2c3b653e979df66483ecc0e39ed919ce3aca4eab6a9e1db2e32b3bc054b2ec40596076da15beec4005787646f94976a07e88ec40b5fcecb4264565079a09941db8f9afd3199fca909d3070989db4cd9cad1d0acad676ee6723e3b6d94986bdb3919194ec14bd91d9198df165231d77d9687d3b3bad9935de0c66fdcce35c3e8379f0ffe7938b73f9e4e2211c02ffac07ff71eb2043a9eb203cf6dcb9e4bc5c48bed7d430a726e0d3a15b820ef15fc851750d9d364de26a23fba763602635921e60fe4a8e4938f3acc43907e0cc350967be953897039cc34cc2596025cee301cebc28e694f23c311eab5bdaf2c7c8f035a2c2f733f3f0e547e18d2b517f84ea2f61c359211dcee65438ef00380b4cc2596025ce4b00cee126e11c6125ce8f01ce429370165a89f3658073844938875989f3308073a44938f3adc4b911e03cd0249c7956e22c01384751e26c2f712e979d1cfe9d1be0ae00b974201b5081ac0f2aec0751cf85545d55e97679f2e72bc4b3f6b58426000f1d4d09b627837da0e98f01d80cb717807b30f57cb764ad76288e97f4f63539db810c600c25ca96126561f4edf52e54f0ee077e784814f046ee439d1d6f02786329e1754c5186c72762d2b63919ccbf0398e34c8239c24298ff0030c79b04b3c042985f0298134c8239dc42985f0198134d82996721cc2f00cc4926c1241cf92183f9370073b24930095be564303f0330a79804d3c616ce5f01cca926c11c6921cc6f01cc6926c13cd04298ff04300fa5843950c22c771e2a1747fd57c7837d859e30676d4b857c3be8ee984ebf486695981ee84e575c29e0d9d7d9d61c78e98cbaec6c8bdf5f98d0fbb651a15c02bc6f2625cafe0909be58089bccd487f7c63bffb9776e10ddc1d52cd9d6c0a4b0c972d78900f6ac28fc36bda2ca46943d4016309b12650f4d1690eee71c48d19e4585b61078e91c6a2f1d275663ac9373d0f95ed6eafbe87cb6ba9a99efae77b0afa0aa0fbcf4b02876011de6fc5f23032f16e53bbf6a739ffc4900e1dc28108ed8e7103e0210cea3df6fdb1df85547ffa7ab6d1de07d08402c32695a36e9642e329c43412133df249ca4b38fc87016019c0b4cc2493a378e0ce73100e7e126e1241d0a26c37936c07944346b3072a39f96d09a0adff7a0e839d29cb94536f66f0e019e78541428e1e4c2194e9b668a5c81bbc279695314152232949b80572ea4ef77873d964bd86a816ebc5893bb5a8a9aec1c4b1d11091bb258306dab0580b9288aee8c2ab14f40654d0fbb5ab0ac8ebaceb8619463ea64682f07681753a2edcde27b38799fd0265625c4b80bf5a7898e8d5291f013a76cbbb3df097b8cc80aa8a341ae7a74144370e92e25202ca2c816121c0cfc75894930090787c9608e0230979a049370aa1719cc0200b3d82498849310c9600e043097990493707a2c19cc0301cce526c1b47125db0800b3c424988453bdc860f605304b4d824958cf2483d905c05c61124cc2e9b164300700982b4d8249d8c82483d90fc05c4509338b2576d1059b234758be93cd919b0e1a98657539c7d3df1f4f988b92f5c667035f3dc6249884e53b19cc6100e6eaa83e59ba81a96fd1473435810c5f2780af9cfa9bd60a5fe2d443b78b4e4d51b079aec72b00e89aa8be3bbc6f4d973911205c1b05c2c27d0ee14100e13ab3ab4384bd9a64d5a1934175687d5413babc514c3810473e7e49362eb41df8e8b1e64cc6b6710df06880b222aa523cd54ee2364f361c098056463966e96e33cea761071b18b62ff9af0779689549db9f8db4b237e93fc063ab4dc239dc4a9c37039c1b4cc249ba150019ce7301ce8d26e11c6125cedf009c9b4cc2596825ce2700cecd26e124fdbc0319ce4301ce2d26e124fd1e0119ce6301cee34cc249fab50c329c8b01cead51ccf4f4165c978a57f9cccf79ce432b5829dbb7a621ae0155fae3a99ba1e97dde6bae508d7f608cb0193a9d0a683ef0d513a2d84cb20ebe9c41b68c7a0d80b78d125e5796ee0af5f8ed2a08e7267d4605753348e2db4d844ad87d47067513807aa2895009e77792413d10403dc944a884952732a8b900eac92642259cbb44067510807a8a895009bb97c9a01e00a09e6a2254c20a3e19d4de00ea699450f359e2905dfc70c804e67dd6d33524fe23a1f15f22f6bee05a246ab46aec8a301286514502ff6c868a84d3cd598d6ce316e9fd813fef3077d527e18c51b2e1bdb781979e61ceaea0a49bb590f9e97100e69926c1b4712bff1d00e65926c1b4712bff0d00e64e9360da388d67338079b649306ddccabf0cc03cc72498366ee57f0c8079ae49306ddc3a753680799e49306ddcca7f0e8079be49306ddccaff0c00f3029360dab8d5d59900e68566cfc1b771dbfe0ea0edbe8b126f0b89d7dd35ac5cb4e25dd965945b5d917ddf9501bfbc28ea9dbbd3eff6b071abab1ce0931747350f7fa6e8d15cedebf19ce8bc562142b4791e7e57e0ab975002dd3f6922afa443d7940a5d3d806e775d2eafb17fdb8bf600e5a551ac31e69f0edf77d618cf05f82e33e35311eee8d17ae1b1eeb810a9677e4285f67c50e05c6ed23ec9a48d49bae206e0bcc2249c7956e29c01705e6912ce7c2b7116039c57998493f42390643837009c5753e2ecc31217cd4e629b189f0952cdd44ce5d9ceeb7c6fda0a3167b998b91fe0298fa6024f3625bc1d28fbf798b47861a4959b56fe17e0bcc6249cc3adc4792bc079ad493849bfeb4e86f33c80f33a93708eb012e7ef00ceeb4dc2596825ce6700ce1b4cc2493af3830ce77480f3469370e65b89b312e0bcc9249c7956e23c1ae0bc39aa9ef879a2925eed481ec7f8872616c8058925f2f31336f7c42f01406f3167d6b18d93697a8286e7ad518cb2ab2d2bdd25b2cb44cb5d3d64fb4e77cb815fde16c512d93af8b01919bc3100deede6ce7f272c80c88682af0368ef88c22f4744ef9764c31a0f007877d6656113d9e2c26d54285780c2e6ae28fcf0c0e8fd902c11bf05fcf06efa927a956627c5790e93e56cb98a4db19505ef14b6af06d90cc0bcc7dc794736eea5381024f27bcdd94ad5c66503838097de67c6648522917fae15c99f8b5b438b966c43966dc04bf79a347e493abf982c3f1d0570de6f12ce3c2b712e06381f300967be95388f05381f34096781953877019c0f45d167945ef75b9e95cb5c4e00301f3609a68dcb5c4e02301f3109a68d0bfdab01cc474d8269e342ffe300ccc74c8269e342ff2301ccc74d8269e342ffa300cc274c8269638bfd7000f3499360da3836790480f99449306d5ce83f1fc07cda2498362ef45f00603e63528392747c92ac41d917e07cd6249ca4d523329c87019ccf99849374361c19ce5280f3799370924ecc26c37922c0f942145fd41ccef6b52f6a5ec93c842f46b15a28f5b8d004e65fc43ace115a2176f7205dceda9b0af2a9c04f5fa284dc9df93fbbe72ec7f21661ed5b5fe6980bc0be1cc55e34de474fdc4f3d7331dea48664b5531b2bfa6301de57ea72fc3db22da6c9e62b7d0df2d9572951f61228a7f1c42180f19d3e36c8d73d6f5d223f643a5e6c2cbd5ade9fec1c4b1db184dbff90d5059a00c0af993391dbc664df0224fbd72951b64b8152594a3a7b69788c08e34e80f10db3374a23ec6c26db286d32c0fba6b993bc09c73ec9e6ddfd1ae4a56f45910160e5be970110e6a36419c07ec043dfa6deca6f8e6cd1ab8530d38467f2646f5f59de0af8df3b51f85f6e8d0f968806a9bb7585ed1b543d0c30be4bdd4fcf814d1401d7e9370b6751c11c0e60be67ceda0dc28a11595ba804e48bef47813237498bddeeeebb5781577e10450f68c13ed703ba0a20fc55149d73dc1b2789ea4eb5506286f3ca72915fce661b459f678550abcc09d7e6a5d58500ec87e6acdeb071cad73480f2d751ac762bf01541365783aa00bcdf98b405c548cad29b6c0b8acf01cedf9a8473b89538af01383f320927e9ee8764384f03387f6712ce1156e27c1fe0fcbd49380badc4b917e0fc83493849f73526c33919e0fcd8249ca41bf192e15c07707e62124ed2999d643817029c7f8c627bfd7cb62f6daf3f11e0fb934973e5483f0f4a86331f74ba7d6a124ed24558643817029c7f360967be9538cb01cebf9884b3c04a9ce7029c9f51e26c2c04948acfd05730772ea77dd3081b82a2e6734a5cfd59624f65fc640277f2eb1af137ef24ae16222709c0dcac22412d82d94593a960e702d87f8da25a344cd421f795bd0d7f02f8bea8cb71c8c89a8f64c9fe52904bfe8d12657321a04a6e973b53ccb95cc5dcd9eef6cd0e6a033cf0cb28c61cf980d914c607c1f850d94a31ea5861f5d0580540f8953993556ddcf4643048c47fa744c9bf96374794c2254c4da7c6a6ba107e58912c376c0c7cf21fa6cea724ed0922cb31bf0168bf36152d69194e86763740fb8d399ff6ceb7729b9e9700cc6f4d8269e39c8d0f00cc7f9a04d3c66d7a5e0030bf3309a68ddbf4bc08607e6f124c1bb7e97916c0fcc12498366ed3f33c80f92f9360dab88cef4900f3479360dab84dcf5300e6bf4d8269639bfd5700e67f4c8269e346a5bf0530ff6bf63253c23611d932d3a9a07fe927eafea5d4fded85626a366171d4800ae47900e4cff43b20c483743b8a7947c75a76a818545b9f74c6112160b2f946fb818ce07fe6acb7b0b1b9990350fe62d24cb8e19445149967de03707237350627e9a6f96438af02386326e11c6125ce3f019cf54cc2596825ce7700cefd4cc249ba170719ce2301cefa26e1246d2d91e13c05e06c60124ed2af6490e15c097036a4c4c94fd41627f68d52b604981a99e4752329fbdcc9bcee3b80b3b14938875b89f35a80b38949380bacc4b913e06c6a12ce1156e2fc10e06c6612ce422b713e0870363709e7302b714e01385b98849374349d0ce77a80737f9370927e43880ce72280b32525ce6e2c7e7f6ccea19af1d120ffaed8fe0556843ded64d3b7db83a18c569458dbfbb09669c784ecddbf7d2d00d99a12e4013e90cb58e204d8f4a7ca12a2266b829e0950b7a144ad566d8c64fbda4e718f83dcb42d2542358d5b796ba5f03f9e974e96f04af7b18c6026f0ce769468832d88b17176672f80b27d145e9ad96203c2b9206479e8bd2003e84089566dc337cce7ab11e49e64f00e01f03a52c2cbd224f160f39408a7ce92cd539a00927da7285a4e70535d5d12b7bbac7f0d786be72872d1446f4d271f25f454b28ca002786a174ab47d7dd5a87206570feb3f3e3645be1cd917870652612e0098bb4651a54a6f3a988d536c6782cca05b144597f2589edc4b7cab8ef7bdee94a6c053bb4751746195ffc49dbe083bfdc8707603387b988493b40f950ce72c80b3a74938497bf8c9702e0338b34cc2493ad84c86730bc0d9cba40193e1948bb6c9064cee04257d6f937092ee434786f33280b38f4938475889f31380b3af49380badc4f93ac0d9cf249ca43bcc92e19c07701e60124ed2fd43c8706e0538fb9b849374c35e329ca5006736254e6fdbc93ae8bd27fb84fd0f00df8028863e78c02b84272ad96be523f6f51fc500bc81d45d71fc15dd469389ddc784bbd491f9615b80725014536fb03c31bebcb66fc4bd0f68380e3605a48d53179a0390434c0149382e440672360039d41490847d426420a7019039a680249c4a4306b20c80cc350524e17e0a6420570190c34c0149d88a2103793a0099670a48c2a95c6420b70290f9a680241c1b270379310059600a48c24dd1c840ee0020879b3305d6c63d393b01948594285b33bcbdcdd52e718e9b2cf4452e58011c410930d8067dc3addc55bb1ef0c69126c1b47157ed0600e68126c1b4719b3306608e3209a68deb2e6200e64126c1b4b104ff372880469b04d3c65db57f01300f3609a68dbb6aff0bc01c63124c1b77d5fe11c03cc4249836eeaadd10144063a98768bd2f524e9340cb9c97793b88bf46068f6c51cafec013c7d565eb3b7ee1096171b38d0ae505c00fc753a2eccefc0b50f56b7a8a588598e35bc95608616b68471acfa202bb16f8e8044ab07d987fe194bbcccf5b7dee767a54a4c8476d2cdfc703ef9d18e596292e50be3a8de7a913b5bd9bf6eefe7e1ac03a298a25547c792a4ffc9b9cd7b12e3aef7a44cb55c98aafbf80ac61b2398bfd6cac93f60728a744bdf237fd028c102d590156053281a951e6ad658e120b18ff4e6b35f36f9d12d94a5fb20ad73900ebb428e6660e8f7e622b5972bf1d24f743a36882a637ec36ccca26e814e089d34d8269e3aaf34301cc1926c1b47110ee600073a649306d1c843b04c09c65124c1b07e10e0230679b04d3c641b8d100e61c9360da38083702c03ccc2498360ec28d0430e79a04d3c64eba6100e63c9360dad8e19107601699b42307691144b623c7008073be4938f3acc4390fe05c6012ce7c2b71ae04380f370967819538cf00388f886255399fddbe01f46446326c41866f3cf3f01d4989af1de39f0f2b96df24e0a2d68a71a00a318c51c6b68871a03271661fc60600e35194187b326f70cd1da95ce2a85be9a8b35cf0e07342c6313eef9d0f5f143b0278022f616a417f9585708b00dc85518c0765b69fb68d3bc15e0dd02ea24efec90a236529e9f8cff01811c6b34021b4388ab1758831d8ceda841d74643b6b4f02788f363703201c2f22cb00de0519c0124ab4bd04daa9c23fe7323ed85b2a8bab12214acd655a2d2260bc9825b25a8a9fec1c4b1db12516165e4d01e0a551e4b0d8bc9009c263893f9e338a2a876d04b280e228fa9b60054bd556bdfaabdd15aa8ec0279745313f14c24c9d05d80b761200bb9c12acfac4533edbd73ef17429405862ce3c3a1b47dca70294a594287b074039cf09930ba962b39dbf548bbf92b6581a4d552c3506c5d20a4ac49d59fc7cbaf5a2bb6455529fb5715c692300ba320a9f5540dda534158ec87dfd3b84ab01e255517440a7bbade9484a9c64db9a7e0a72d932937092aeee24c3b907e03cc6249c0556e23c15e05c6d12ce1156e27c0fe02c370967a19538ef0338d798849374520e19ce7100e75a9370e65b897335c0b9ce249c7956e23c0ae05c1f45e748aef8ed1ef918e93ce6f640d9dbbf540c101e5b976be423cb2bc93658db0d5a4115e66cf667e362846c80b232aa84edf63571419b64a28ea0d7f3332a848f82845d15c52851aee8f2503b88a8dbb6771e3f0d3056473b50bcaf7fccb63340bbc1d43178d28a115987dcef01da8da6a2252de5c9d05e00d06e8aa268cadbe706e40e0008374731c1967fb429f209b6647397b200be2de66cb09667e588e60d00e67126c1b4b1da7e2380b9d5249836ae21be18c03cde249836ae21be1ec03cc1249836ae21de05606e3309a68d6b882f0230b79b04d3c6b91e670198279a04d3c635c4170298279904d3c65d946e02304f3609a68dbb28dd05609e62f6e218c2844fd6c0ec0e7adf4f8da2eb78588dbf96881e4f7706a7ed0b611f035e7a9a4983bda45ba1930df6de0d709e6e12ce022b715e0170ee3009e7082b71fe11e03cc3249c8556e27c03e03cd3249ca46b32c9701e01709e6512ce7c2b711e0f70ee34092769db880ce70a80f36c4a9c6aafe33c5fa5dee6c1b47200ef9c2896b7f0791e1319df6465bdd3e229959576772156a910582c04c0ed572aad9e23d707203ed7a4fd954847d0c9707601cdcbf34cc249dae74986730cc079be493849a76893e15c0a705e60124ed2d54264382b01ce0b4dc249ba968d0ce72500e7ae285607c319efde274bbc4eba22e7b7cd65fb9f41d97e914955f99194e3ec6455f9ff019c179b8493f4fbc364386f03382f310927e9ce9e6438cf0738779b8473849538ff00705e6a12ce422b713e07705e66124ed23dbbc970ce02382f370927e926d36438ab01ce2b4cc2493a21910ce75280f34a4a9c03987f9b1fde7557e2f0e02b87949dde722d6caec838e7af0a31bd8174b5d12b31aa7976a0e5741525f0f62cf9049cf89c950c24d932d7dec073af3605a48deb853b00907b4c01493885960ce4c900e435a680249cd84d0672080079ad2920094b7732901f0190d799029270110c19c87300c8eb2941e6faaa49d5e8c2557c69f604e789358e3eebc4193735a24a536f2afca7804ad30d51cc5a4eb7f79e709a03dd1ec900e68d26c1249c024e06b33380799349306d1c556a0260de6c124cc2f61119cc6600e62d26c124ac9192c1dc1fc0bcd5249884ed2432982d01ccdb4c824958332583d90ac0bcdd2498367e72af35807987493009b7b42083d906c0bcd32498845b5a90c16c0b60de450913ffb0c964e77719733fbac7a7db70c1f67fd8e470e681bd9b126c37017686f3c072313319aed2acb38f4391addd6c04b0de438935d82694366ec0920592febde66ea24658de936da2760bf0d2fbcc5ec04dd86a22cb04c601cfdd4b89b72d28b436884289affe70bf101bd1f2ed6d541097011fbd3f8a090fb0e4c78a2bf2f29ecc277b029c0f44919b2626f97df5f33bfd40727f308a321f1b6d8a2ff36ddc8d6930f0d287a2a8ee6752e613f6d793f9e8d900ecc3a682b5f173bba703b08f980ad6c60f998f05601f35152c61ed940c6c1e00fb98a96009479ec8c00e05601f3715ac8d15ac6e00ec13a68225ec5d25037b0200fba4a96009c700c8c06e01609f3215ac8d3d570b00d8a74d054bd8db4a06763e00fb0c2558f55180e1ac0e3e0a40866f1bc0f7ac397d00366ed53a03a07ccea42d0b48f71e231be81b0e7aa79e370927e96659643817019c2f988493742b37329ceb00ce174dc249baab2819ce0b05ce460d7cc22727089f208ce5e62e67de2e6143d914c667cebbfb882d77ce6788ca4f155beae47e0b9d7fc1e260b1f34f773d26b6829bc436b1f5e22a97572264af71ee72cd2a596e3fe79197b84b34922e912d0abf710ef32ae799b9ac5484be99cd63ee2e68b39ddf6ab246b540922db6389ee35cab667c989187b0d6d16415ab1016c7ef92961d6b2c38b95fd1e3767180d95257f565bd69b2d82d736c2e169a5438cfd417e1b82e941d6b01ced478dc345169ac145a7510e15489f74bd94c31fb6115735731e8563cf0288dc55acb58e416cc14d6173b56178b63514d3839fcf34eb142e7975b611d5a53551d2a5748ac9167ea7a6a993c0e934b7b9947544c9f76cb6bcdfb5259e42618fefe0ac1b454489d96d2d2d4f6e19edc3c49ace4f4e771b12fdbff0a8f7719edc24d3bc69a397fcd7762be44baf76ce7e112a154efe9f55883ff07657ec33455790300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/ef80b67d237d7e14fa2bcdf855581ed1.asset.meta b/Assets/SerializedUdonPrograms/ef80b67d237d7e14fa2bcdf855581ed1.asset.meta new file mode 100644 index 0000000..536929e --- /dev/null +++ b/Assets/SerializedUdonPrograms/ef80b67d237d7e14fa2bcdf855581ed1.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 61e1aed0044cce945b57b3bf5d11b0d3 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/efad5f1ce02dc8349b654dabf45fedeb.asset b/Assets/SerializedUdonPrograms/efad5f1ce02dc8349b654dabf45fedeb.asset new file mode 100644 index 0000000..7ced66c --- /dev/null +++ b/Assets/SerializedUdonPrograms/efad5f1ce02dc8349b654dabf45fedeb.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: efad5f1ce02dc8349b654dabf45fedeb + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c1555f6f8efa35701e94d82b4474b4202212022105ae89280051042122012484ca1890a5654ecbdf7de7befbdd7dd75575d75575d575dd7b6bbbaebaeffb977eecd9c37ef9ef7debcc999dce1ff0b1f329976ee39df7b6e2fd32c8b593f9151d6afa56c312b60996c092b63556ca3f5578175dc60fdb3cfd4f545acc63aaeb57e9758f746b18c246ff29f61915ed6ef42ebac96d5596fd6b352eb5821ee17b172ebef42ebdd72eb8c5f5d63fd2fb79e8ab4b05e5ac2a6b3856c01eb19e99e44c452f152adbc16e17645da58bfa7b1add6dd72a1140f244bdcea69fd2ab2eed48a7b1b2ca5d573cbd80a61d606eb5ea9f54e0dabb464ae1612dbcccb65e20f661fbac9637779ec6afd6f2bff6e2eff6e23ff86cfb794c71e293edf13bcd716fccd095d99e0fd5ef631b2b7756c651d2f04e7fcddafe573bd6d79cdd62590d5571efbc9637f29f3a214f46f2d8ffb24b137918c0140562accdac8e34079cc90fa5e9c66f8836c46914b813cce12c6f94010765b709f5fdbd787ed2a1ebbb9e2b19b1d8fcd2e94f1f7a97c7eb03c0e95c72152b6f54cd7e9f2da3079ec9344afa8fd1ecb678ecf5a6136af96e7c3e571843c8e94baf590ba5e02cefdeaa2e2749494d95d8671a9e6ba7a9edfbf4c9e8f96c74c577c65c9e72e97e7d929ea938aff299d7aca30ae00e716c716ab12c852f1decb15efbde4bb67da1c5b3ce8b207f89f56ee1829efca34ece8edb2a3b7ad4bcb68ec73497550f273a49c3e52ee55e09ccb3dd7a36d2de47bf7caf35c963c6feb96c2bd3c5b4e1bc57abc1d4eab6ef6f5569358ac2f8f4ba2a78adbbeaeb8ed2be5564ab9cafe7cfb3ca238ef03e4f0f7af76c9ede792db4fca557944768a7a4e904765df01f2389935a4e36167ca6bfbc9e3fe324c55465c02cef9fd89cebb3d941ea9724b1447535c71dd47869bacdc51ef4f95c7b6293eaf9e99e643e702796c976298ede471ba8f30dbdbbed0e65b972f8c4f227386cdb74d1dd0c192d376bb3c9f298fb3e471b6e43fd0e5072a2d27f28364ba144a5d1888034b97769de5f91c799c1bab0b9be7d2e99ac6d3293240cabc169cf36386bc7e1d38e7ba2eb2c369f7ac94395f1e17b8745e48a733933a74ec007c2395f712f9d781b67dedb36dd9ed8be5f5c52edd0a1cbddb4c07ef2a3d52490f527664908bf120a98362bbc4f5dcf5e09c1f41fd4cfc6dbddb41f9562f709dbf7b0338e7f78b52d4f52016efb35cce1010f61019b6ccff3ba8bcf560169ff674eff2e360706db094f7817cef10165f8ea9e7b86d3782737e7f698ab61daad1cf0ab7e39404ef2e9347e5b3531d7f68fda6bcb65cea3394c5a62d55b71de0bc13a994d756d8e79d942e87c97786012ec36cfdf652e5e94a792c65fa72b6047090e9d16a153684dd6f8bbcb62a415865f2197554761fe8c869df4beaaef2b172169b66dccff26b6be4f17079dc208f95ceb323d4b315f2b85eea16653179335b07aef3e37079ff2670ce9f5bebc8eeaecadb8d2e5d75f159e5b25d970724f2b3bda51e23586c7a1f6133eef4ae7caeda96394a713c02f842227fae91c75a79943e141919cb2922db3909f3de646125b273b32db3a1feadfc6bab3c4e06b2651b5374e4b8eb649bc03d7e2eeb66ac9ec594250975d9268f1d93d8d30d3cc78f47fab03fd1bd56f278b4b46d348b6d938cb67da1cba309641d6373eaf98b3cdf61bfb3f7abf27ca77dbf8b4a37c7029b7818990eebce328f62c7c97b59c0ee7a792d1b5c3b4a5e1be35c8ba836e9f1aef8b9d975ff04204377ff44a083eefe49f2fa2db6ee5d553eb7cb654bbd4bd76c16930fb093e36d8d64bbc2bed5435c9e22dfcd71c5658e1d2f5d77259075aa3e2ebbc9b60fdbed8acbd35c7199ab89cbd3e5bdb120de54f90adb282a7ef300875c79ef0c242ed5fd33815cddfdb3800ebafb67c7c665b71fe5f57390b884fac3b83c37de56f10c0cfbb614e2f27c793c4f1e7579e305f2384ccabd3d05b92a1ed72690dbcb25f78e14e4aabec08b12c8bd84e9f54d273ce5ebaa2f653c8bf575d9a7d0a32e81ac4b99d6d77baa7ce33216ebebaa4f4bf97a3e8bf77515fe0427fe050b7e6d228bf7f5fd809fa87ec12bc133d057d5fdab805cddfdab810ebafbd7b0185feff9b1bc7e2dd3fb3ad41ffafa75209cb6e01918f69d29c4e5f52ece8aef24165b2f9964c74f2fa59ff2ab1d2c71d978832d7fb47a5ed5cbf797f2ef02e7fc38d915ee6419eebdb69cdeaa3fac83bcfeaabcbe5b5ebf4986a7ead037cbe77e743d27f967aafea0db5cfc55fa50be32c5f1b7065b6e05f7a06d53596c9d44a6a908e85f11cfa86b30ae549d2b1957f5bc9bdf0152dedde09c3f778fa37fe60e794d3e23ea452a2d7de18adf0e408f7bf5be22740571e6b98ea46cbe2f89cd5ef2a402169b2715d87ed0b74d02590fc967462578e611795475b287a5fce92cb67da1da008fc9f319aefb33e4fd8b1cf6dd9f047a28d9fc9d7b52b0ff097954321e97e1cc64b1f57dd5b7a52b23d2adc7a67baf44ea342bd67fc4b9150ffd5e64b1beb82a897f3c258faacdb35aca9bed62a0faa312b579928595c0aec81c16dbc6577d784fcbf342795fe6659179aee765df1e7b469ecf753dbfc0f5bcea67937d4491f9b1cfb3e7801c7efebc639bd0855f7b015c53fd772f3a7c06a8fec685b161b397586cfb4eb5e116c9e7ee03ef4106eafefdf2fc40974d8be5f903e09c1f8b5c72553fdb33aefb4a6eb14bdf97e5f135797cd5b131fb0bf00ee0c95e899599d0a79f973296c8771e04e7964f0f4854ff57ef2e95c783a48c87c03997f1a48c9377715991835dfc9682ebfc7888bcff3038b764674413e8f7827cf650976d87ca77cb527857f6954596bb6c5b2e65c87a6146a2bacbebf2f8862b0e95cf7279aacf02c6eb61203ef9f90aa9c323e0dcd261a0ca1fde647adf5ee67affd1d8f7f755fef3963cbeedd26d258bedab52f1f81bdc27d96f5dbaaf729e69d0ef1d977eab5c7a97c8701f037aa8ebfcb89ac5965132ff64bf93e7a5aefba5f2be6e2c3c511ae922df2f93f21e07e79cdf95b6ac7ddf93cfffde3e1fa3f2c53fc8e37b2c711eadfad8ca596cf9526e8733a88d2d7790cafbdf4f51ee07b1f2b5f1a5e2690d90f521b05f5dfb23788e9f7fecc81aa3f28a8f52d42b11f34f24d36a208b87bb16c8fc933cfe591ed5186b02fb12e91b59e7c88ec8366fa4c215e715765c0cbe11bcc38f873b7207ab3ed7cf5ccfac05cfc2fa762fd77555374ac447f9c0e73e18ab7c663d8b1d9b596fdb38648b6dcf1055aefc551ebf64783a523ef997247a7dc5b4e3fa43d53ca7afedfb4355fbfa6f29cafd461eff2e8fba3a53aa3aa6d21f5ec962d36aa56dc730d5fffdadebf98df2f927c139bfffbda3678ef2e3ef80ed89f4fc411e553f94ea3bdfc062eb916a7c2211936461e9ae4d96f2ab5c2caa248b27edb086a9b4a8f295fd9384f54f97fc6a29ff2970ceefebc65bfe258f3fc5ca88297bd558cc11cc5b7ef10ff01eccef541f41a2befd443ef56fa6ed631a9ec162d3fccf49b8fd8769fb1486aff328e71716dbe7f03f16dbe7f05f79547d3fbf4a2e35b11cf82d71ac75c28bd4806bbafe8464bae9ae497b23752cd60feb6cfb47cc963ea2fc46f9e1fa2461c9e722f5e03915d626704da6a1c86660e726708d1fb748dd9e06e7966e235f75c9dd2a9f7b0684cd8fdbe4f567c1397f6fa03c3f92c5ceb754f28e023a1d29c394635b91882b8cedcca93759bc46aa3ea80fc1fdb6404f754dc980fd7e95e0c8af3f27e3e0f8d83093c641a2f66b335b6654d5bf7eb6ed1b25e76e8d5ae5f2ad23128715696ebf37a4857ce673294f8ed58c92f96c44de8fb49447d9a713399ac5e6bb72bc2c61fb3d894e0d6936d9733a7bd43ce01bd378f71816dbce3d461e77b0d834b6c36634fa56dbbed1aa8da0ecbb3909732557b60d223b596c1fc24e796c0be4f1fbcf7bb4e758973dc7bac26dcb92b79d65ff5644ce098b1c2fdf79019cf3e3718ecd1139bf277202b8769c3c9e28df57fd472a2d9f049e3d093ccb8fbb586c7fe12e9b7ff6ad2ed9eabd93e5f32f81737e94f38f22a7c8fbaabf41e565a7021d4e01d7f871b77ce715706ee99075a7ed03d9c723619d26df7b159cc3304f97f75f03e7dcb6fcd8e72367c8e75e07e78a3194f3864b8e5baf33818d6a6cf0ee24fe2ab936f4dfaaf15dd91f90a9ea62efa7264f7b4df191e3fa91b35cdce438a5a8aba45b8f956d5bd146f52ae363a9871a0f7d109c5b9cc7a8fc5895b31f250943c9db4b1e3bc9e33952fe9be09c1fcf6531e926e29ab31c398fc59485e2dcd22be746979cf35d72d478aa8adb0be4fdb75cefa931d58fe4fdb7edb8cf7934d69ea476ebae7d2f8fdf49d9ef787c5fa5a5ce58d82d23a2fc9acdca5909ab6659bc108d0c67a92f49526f265f8cc445b7e2bff8cf30116c1ddb6abd5aae5b11b444ac37aa63b92c47bb22a8b7c84754e805e27789f5448510fa6e242e8887e282e0ca555affcac172a65aebfa2cb11a8a2f68aab0ee64b279d691bfb58a8d61cbac7fb152965ac1565a95df72566cfdae16f256596ac73f99cc24bef4c9fdce624ba6bd326b83754501adb6ce2b858645e2f726a169b9d0bed0ba5627d6896d646bd934ebb84584166f7b8df5b72ecc62894cafa37e811676dd5e06a6a269ba650dd73e4bf8e7ffc54853c40847df8aa70ffed3224bd45e4f898b89ff63686732bc525f28658c11c82231d7725896a8f72f8e23e8ddc6780bf5fe6df3ce636313daa227c3a3bbafb0c089e1af76556fcbbfe4969f5bc69a96cbb24453a65f12d31281e5f2a262f59917135ab66c91cd1575e38fe8f08b664d5180f8ede72ac473de23a09528fc6223404cf32ab672b545a0f05c2294af14aab98d99298aba3a21b2a22185d8cb734be49325e23757123ebd95c5c5723657a9b588a8f8623899b1585435d34595685d1537494ac11616278eac360d5638919525ea51bd12b8341696a8743597352f95e8be19fcc3676f8e3faedfa3f72ddc587cd6979fb6d4c74f3b113fe9848ac550735d0cb50b3a31252f3d12c54ffb06bb9cf8e13f7a861d101f4fa60346b0858e60fba07d9cdfab125278caf7ce90372b47ba33243dc0bd10274cae0286b0a506613647d849a3156bd9d6a515570891dc4a17391d9aa6a84ecfb9799bada70b414bd4b9bb242c69bdba766b1d3dd101b18a949e6a4116594d85b9d6bd12ebf972511de5d71759124bacb0b9bca92204a7d519fb4662b27c146eb49bac966a57417530680ffbd50c23de46433c9bfb6b378d1b883cce9d18bae089a12d96ccbafb4d66ed30c93dfc4a6e8f49eee95772074c722fbf923bea928de8c75a1e48b2713a5ed45fd3ac77d759c66c12ade97aeb7d5d474de2e4d23be5e4d24724970ca6eb3ef2a611964cf6d2c51dbfd857a7a43beafae051d70913dccfa7e0ce98b7f5f7eb6d5d749279cecd574dc6b531b479466b5cfade1890013e8174c572ba8c46c8e9bae984f34c6a208baf2afe6afdc409ef800bef8e69beaf46f365739a79d2bc07e62783fcfa494f4cf260bf927be9f23b919276069cdfe93ba767897db2cad942abaa7338b37b1555b855a247916ba47a27175bc735420b7e9d6b91bc533b71ce398469da8f224398a1cd239bca8aa19636cd440e3e4ce4e07cb9e212ebbadd993e43c44085082953ab0d0f017b5eb1982fb600ab17b1dd1269e54645e866b1c14aa2de584e335c93d3bca7cbc612e4347db0243bc26f92edab932c5a5b1a5fcde6becac7bfda89fc3c2e9c281e4e3f5dd6204aac6d4d9a35d8ed212e6f8de816b3e52d607c17bbcdc255d75b0ebc493a4eb1f54c8d1546b974723f99015f17dd5f572a33ac4d972992c3e4149203a5555802e8aff3245ea1e00b90e3aa1fbca8586cb5930ad84a910c8f109739253b762bc4a3156c9becb814217ba8aeeca3d386d7c7f99499a4d595aeb8e00198e0313e056760693cc76f1a1fa893cc731bbe74d96f0d6b5f4cedb17ed51e84e5a8e33439ea2f116f39ea604c789e46f8a3cdbc091fa213ce9d757c2a3e92c0ab876282f375698cab5120fae032acff55d61bbcc7a744a4fe0c51183ab9418695d62bacbf78813d0a3c5f653d610fb57ad17318e61413fc3a45148bb7899a78fbd163bc0dc784efa7113ebbb937e123b0b89ba48b3b9e9bf07283574bd6c9b22d3637cc1083de19629e43bde84b2a1331572be235831d6965754759473ed09321ca814a712f436cea5a23f25a2f713a12d37f7f9dfeed80fe8b80865e421c85e55b9335f956c463be355a279c577c0e6048c5670a4ba7e29389619baac3c60bd11956f585d75cebc5f345c201ca1beaca658d54406669f4ca128dfc8dac292b64bcb5c06785d48abf9d2a0a0fdb1977f453f1e28bd5dd152ff5a3af7815305ef1ca61c92b5e8da13d56c1cac632d5e99a4c35e225531d83a58519585a9899565ac8d1f99ce8ffa96e529fc353d462219ba73cff157ebe20bcb9bbf52f3aa8c6a6e0598da5e34831f1bb566cda6d93abe599291f12580d76e7b6e18b24a14f13b3459a0852732c5de462a576a1a6d4beb7a5b7527bacce6545c75f4d93baec74212108b79da3735bd13b999742e437a69e03c4e4c15a91a996c94cd5ceba078899f435a2d82cb7aef38c17de1f29664bf3fad24cc17b8320cfed2b11ed5eccc9e70a270fda4eccd1c76105c03c4d01e0a9569d8725a1f99a24f48bc724341e537b815fb5f331b5176ad4dedeca9bda1330e18b34c2e7b5f6267ca24e38cf98f94e107e5a88fb6182f93487b8ea266f05ab7642a9aba5b85ab41554fbaf4c5cd96afdaeb4ae950a11196222a81ae7f6a2e5248c6d91866d678f6cf7c71014fb643b592798bbe79254042718023b4027b813b3f77bd5d6bff8261adeeb5f5330ec076bb05fe911fb542c991fe237994fc3241fea5772012679995fc9d331c9cbfd4a9ea193cc2371852612f9540f2f913813137e984678b147e1b3b084b95297370d61bc8dec5452ede693d3af51c2d6082935d6df9b64995b16d33fc2fb3c2a64a3d94b3a9f8de9b94aa7a7bdee84cfe6e1758a12d187c6435cc8d67b0ab510435fa241bfdb23fa3998f0d51ae15f78143e17e355aae3d52b49bc96894920ced531d6552f1ce761da94e9b4e1a74ebc7909673e86b45c83f4d276de902ec08c58a3338277dbd8f8265ac816880ebf12b966669328c6bd635c8869b056a7815d0b5515834569560b166148d76990beeb11e981588e5ce137475e8ca97db82ed36cef4ded224cedf57ed52ed649e6b58e4a86d43af85621de6b1d4bb0703662e154a515ce525d389c54b55f520761117c842682a774f016c10763c26b34c2b77b147e0826bc5623fc598fc20fc584d76984f7ebe84df8324c78bd46789947e1cb31e19b34c22ff4287c05267cb346f88d1e851f8639f916bf4ebe12537bab46ed6e7b79537b15a6f636bf6a9768246789296e41ae5b71cf7ef236b59f6fbd92da8c5abea18a6ecd4ab2f0b12ea5d5ba78e125f4513a953c14e5a598371dadf1a64f3d2682324cf8311ae1cb3dba6a39267c8746f82e8fc2d760c2776a8477eee44df85a2c328ff51999eb30c17c3f91b8bae028e19d55228d6588cf7cf2e5a01be557454be50ac50c51e52e071d4e6ae09aaf2fce90de5b237dbad2f2f64cebaa17ad2b30ad8fd769cd475e7927ae536f76564c6668e71566b061b2d63dcc935e87633e7082c607eef5e860eb31a34ff4e903951ac15962c26f05693e8bcd232d169df77c8deb1ae1291b3ccf3a4d9c279f94729ebc4be4c97c3e019dae58febd4117ddbc6e7d3243ead67c6d7f3bb1679597baf5465d38dc674fd5f8ec588ff95615267cb746f8c11e855763c24fd308bfd5a3f02374c279b5866f2ae4ab5a5383a97d8646ed5e9dbda95d8b651267ea7246aea5ea9cb1a71cc5e6d85e72913a2ce4b37421f34169fb1bd775e2bfbdb18097f0eab1f0cef6991d6ec2049fa3338447dcb206887667cc0a8fc5d966cc23ced57844a5478fd882093f4f23fc5a8fc2b76299d4f95826c5f750f2de01b04d170ef7de0b5389ec04e3334762822ff229783be64517fb74cfa330c197f8147cb44e308f7bbec5997b4e1e17e0654ede3198175ea6f1c257bb78f3c21d3ae13cafe61fe5f19557efc4d4be42a3f6d71ed53e16137ea54678e7bdbd093f0e4b99576129f3eab452e6f1983bf2cd60e3724b3e276aa5f58ff749f0d1e6b5a2102817f356b7883bd5a2f1c0abe45e7cf7044c8b6b755a746dd022dbfabd81d9a315f67c91f4753811d3e13a9d0e7b4b1d72adffa5a27accdfd962fd4e5f8393300daed769d006c4055f55c22bb05e42db85b9ef0d1af7fdc0a3fb9eac13ceddf746cc7d6f4acb7d4fc132bd9b35995e738f99dea918a15b34842eecea8dd06e4cf8ad1ae10f7a147e1a26fc365ddc7a147e3a16b7b763717b475a717b06961cee4c9435e53472d67426a6c55d89b3a6318d98359d85e97077a2ac696c23664d67631adc932c6b3a4884e76d06fc3998fbdeab71df1bbb7973df7331f7bd0f73dffbd372dff33064fc93397e2a7ae763741ed4d019dbdd1b9d0b303a0f61741e4e8bce8598118f688cd8edd1888b30f48ffa447f31a6f5631aad3ff5a8f52518fac731f44fa485fe52cc882735461cdfc39b119761c29fd208bfd6a3f0cb31e14f6b84bfe851f81518fe6730fccfa685ff4acc399f63098ab5dc462ed6aec2b4785ea78553ace53462b17635a6c30b3a1d54b136ae118bb56b300d5ed469d09639c5da0c310452e5711acdb59803bfa471e0737b7a73e0eb30077e1973e057d272e0eb31235ed518d1a19737236ec084bfa6115ee951f88d3ae13cbaf88ef47eca859b30addfd068fd8147ad6fd609e7dd237c7f755fdd23b7606abfa551bb456f6f6adf8ac17e5b97b678c777e28972c5d6a3d5622adb5a91efd48879a4f67aa8323104b988d93b1bda6b694bacab656295ed3a71aef2cd12b65a0e108e1103846a1dee56666f72952106e8ed6dac33c4e050995c9dbd5e5ca9154f9503c9fa21c80a39940a072dbdce77bd0d8ba0773411d4cd6304dd8e097f57233cdfa3f03bb0cce8375866f4dbb432a33b31237ea723d4c79b117761c2dfd308ffc923a1bb75c27962fd7d2a995182aeeb7b3482b3c426384d331e1cbfcb4fe38e07ff41c74b3b1ecc3fb290783cd8bfaed878f0bd982f7da04b6d1e1df53e9d705e447ce8b788b81f93fc47bf921fc0ca878f52f1ff0499e6833aff17fb34ad6912fff7b3ff5662cfff3865cfff4478fe88049eef6f97307d4c3c8439cf9ffc3acfc398f3fcd9a7f33c8225d34f35c9f4ccbede92e9a398d69f314d9588af659e2a1a5ae56209846ef14c86a82e65789ce7f418a6c7e73a3df8fe1ddee43f8ec9ff8bcfd879028b9d2f34b1d3a69fb7d87912d3faaf58ecf034b24e5611557c9437ec2d91ee2cb4a73023bfd418d9a1bf37239fc68cfc4a67246f73db9f3bc86ad81739ab611b9485965b9631af4b499ec134f85aa7414fad06f3c45f7562cdb85df74e6fa5d0b3982e7fd3e9d237455de237cef5a2d37358f47fa389fe51fb788bfee73183ffee3365be8009fed6a7e01731c1dff914fc12c6f97b0de7791e39bf8c09ff4123bcf3006fc25fc190fce813c9ab3ac1bc14fe472a821334495ed309e6adc17f36dc70b506f9f780bdb7065fc7b0ffa4c1fe458637ec6f6046fc8c19f1efb48c781333e23f1a23a203bd19f11626fc178df0e27dbd097f1b734cfee5e1b8ec94afdd5acce0c62065a2a6ab32f2281b2eba5136cadfb1f3ce33c4995dfc8c121b1ed488b2d7ce726bc5bcf40c56cbe0c25fbb6b872f61ad7695cf2a1cdea56377dcac69c8ce3344665ee67152e03b188bffe958f00d44e0ee62765dcf29609d45b89b858695cc593b6aebc7754e2621c77adaeb5cfd773187f955e330d77af4c6dfe884f32425be85a84b52bc36ea3d49fd1633a259443370e4d188df6131dd3ca289693eeb59df51b94c7671f2b50ebc8e6f6f4a93284ea309ef0e171359edce4dc7af63534095f00cd591197baf4ef8559d2615ad161a56816e505b76956c237af1aff7307a2d22fe0ab3df6371de5213e7777acce9fe8069ddcaa7d6efeb04f34a70eb54046fc7057f80e168a3c1513cc81b8e0f311c6d754980a76f2f4cfe88a9de4ea3fa951e55ff0853bdbdcf98fc1813dcc1a7e04f301c1d35387ef488e34f98f0bd34c2170df626fccf98f04e1ae1633d0aff142b4b3a63654997b4ca92cfb078dd5be7ebce06102badec718d18a9ae915d67bc1ab3328d0d203ed769c0bbd5ba467c76abfd4523394b6c44cf97c605df75da189f3048dc85da2d95c4380c27f605e675dd31afeb9196d7fd154b3a3d3549e7d221de92ce97984bf7d2b974068bdfbc1a3a75b9aca596c73cc1cff8d0abf74d7fbec24cefad31fd5d8fa67f8d09efa3cb4c3d0aff9b4e384f4e7d7d7add3798d6fd345a4f19ea4debbf63ded05fe70ddcd717c838ae90c9d2d968d16b5c7f8b19b68fc6b02f3c1af61d161d037c46c7f798e00c9f827fc0700cd455da8679c3f12316cffbeae299972faa0d9afe2ac37f60610ed285d9ba21ccac348ac97f62f0066be00d8e7a83f72f4cf8108df01d1e85ff84091faa115ee651f8cf3ae13c7687f9ad3dfc1b533baa4bbc1ed5fe0f267cb84678f6706fc27fc1848fd008dfe251f87f319f1fa9f3f93a96da8e61fe263fd9c3182b63a653993d15ea7f58148dd244d12e8f51f42b1645a37551c4e781c6cf46f3628cd3bde5aa356662b5c6acb46a8d115d385caf6c9d5dbc619ee5c98e663af93c52c66822256394b748698e09cfd108aff628bc05263c5723fc558fc25b62d8c7eab0b7634ec99aeec698adb010c7e942ec229e8bafabb9be3fef21fcd658f87998c5ba1cc84b886db010c7eb42eca14db2f345cea436ba74ee7863df16d3245fa70997c09bc15e7b7dda6942c912df6ee3db2706b59b56b1dce9c1fb4e5a1322bc37301686c8cfb4f395264678ada17b9c6589c2c76621b5d7c50f3fdd2fc25b62b12acd99bfb3f5a5fd5e6b1617352df1a8e98039c0249d03f0fdeef92a02bb40aeb4fe52db67547874bc8e58b8fb630d357db81b65a1ed25ecbd74eed83f68772c1043143569b8e3e408afaac722ca449cf100c41913858e3963271d37f149bc950172b39fb3b3bd22b1573c2f0a168a811f7b18a9360da653225e3fdf3355901d146779bafa61d43beb520a6fa04ff3d940ef82092ef029786f9d60f14921bfadb4ae98e4197e2577c324cff42bb9bb4e32af80cd8af8ff4e620f2c1b9ded73a0a627c6a3d02f8f5e98e4397e25f7c624cff52bb90f26799e5fc97d31c9f3fd4aee87495ee057727fcce916fa74ba7d309517f95579804e32afcd1c988aca89beaf8aa9bcd8afca0331ca453e29ef8ba95cec57e54198e4257e250fc6242ff52b790826f920bf9287623e77b04f9f1b86a97c885f95a398cf1dead3e786638297f9143c0263b1dc2f8b9198ca2b7caa3c0aab101cd6081582d1188f957e7964ea24f3e757a5c223c104db2c9d60fe7c492a823fc105676331b8da670c8ec10497fa149c83c55e99dfd8cbc562afdc67ec8dc5626f8dcfd81b87415eeb13721e26789d4fc1e3b1d8abf01b7bf958ec1dee33f62660b1b7de67ec4dc42057fa84bc1f2678834fc193b0d8dbe837f6f6c71ada553e1bda933195abfdaa7c804e32df97fb885454de850b9e82455f8dcfe89b8a09aef529781a9644ea7c2691022cf6eafdc6de748cc5269f2c66608237fb143c1313bcc5a7e05918e4ad7e21cfc654dee653e5424cf0913e05cfc11a24db7d3648e6621a1fe553e37998c647fbd4783ea6f1313e355e8069bcc3a7c60b31c13b7d0a5e84a138d6278a03318d8ff3a9f162ac01757c2334a08a301c27f8c4518ce138d1278e2558167792df2c6e29067a5723803e0853fb64bf6a1f8ca97d4a23a87d08a6f6a97ed53e1493bcdbafe4651890d31a01c8724cedd3fdaabd02937c865fc9876189fc4c9f897c2526f82c9f82576182cff629b804137c8e4fc1ab31c1e7fa145c8a093ecfa7e032ccdfcef7eb6fe598e40bfc4a5e83c1b8d0278cb598e08b7c0a5e8709bed8a7e00a0cf2257e211f8ea97ca94f95d7632a5fe657e54a4cf2e57e256fc0605ce113c646ac9be44a9fdd2455188babfcb2a8c6ba49aef6d94d720406f91a9f906b30c1d7fa145c8b75935ce7b39ba40e8bbdebfdc65e3dc6e2069f2c36612c6ef4c9623326f8269f82b760906ff60b792b06f9169f90b76195da5b1ba1527b24c6e336bf3cb6633c6ef7c9e3282c2fbac3675e7434a6f19d3e353e066b11dfe5b345bc038bbdbbfdc6de4e8cc53d3e591c8bb1b8d7278be33482b30658a711fe514f1376545d26276636dec2e8fb74ccb49338ef8ff0499c59cccbaeaae9e88b4dee3c5e17ed3c761e4825dab9f688e0137482f9e98391f889e3eac7cbc4f113b1ecf7a146c87e4fc2843fdc08c27761b9c3237e7387937592f9f38fa6129b0986694fd109e60b281e4b45f044dc4d4ec5043fee53f06e0cf2137e219fa693cc77997932159513ec32733aa6f2537e553e034b8c4f3752623c531700df36fb995498bc8f0b3e0b83fdac4fd86763b09ff30bfb1c5d8197619d4696b0a659a5a00a0c6f2b129e4fb9107b411462bde3ac4b4507ac603a17cb815f6c841cf83c2cf25ff21bf9e7636abfdc086a5f80097fa511845f88d52c5f8d6816444d17a78b2d672962d3d9dc862d5d1730beabc16611c1eb65d4678aa55385d6fd85d69d8dc2a5f9157dfd45b70a9a3f0d5d8b3b7e15b3d76c7bfb3ada459895afe9ac3cb1c1ca25564d8a273a3b816e107f17cacfe8d48895a776022d6c787246c35ec6b1fb34d6481e45e26e9925b15ed8c5e5c6d27324f0e7bde981492a667cd1d55a713796294cac6ede4b2d395e17d85d8c917e1df32718a26d53aef58e4dabcaca14575abe5123e2dcb6b658ee1fedd6d67917bfde58fe740966e51b3a2b27bbac84cc6d3b678a18db206c746b191b43f04ea2b402dff262d9a598656fea2c3b20a5f89b2a7656a8606a219aff9873ee78b1ed32ccb6b774b6e5b96c9b2f62679db48c9f6d69324b2ec72c795b67c9ee80f333e71dbe2f67a525752be32bc49dedbe6b3d783964875bc1cb927a51cd80b91eaf60355ede760546fd1d1df5a929a58d79ccfe309c09b9da95987defeaec9b47e855fcea1122186e955d1d76765d284173927462f52acceadfe8acde3fa1d5b8a68b852df6feb4b68daa34e6574b25a1f874917e6c5e8dd9f55b9d5d8778aed915893bb1753b9d04fbdaa2867ca0c62a0f7853c74f4d309d78be06e3f13b1d8fb98194d9d4a5f9b598cdef61f5146f3ea07c98ef03522a04c178f6ea115e2cbb0eb3ecf73acb2622962d11e9b352d64deca6b66ab52c95a9b82c2e3668da28d76316fd4167d14cc2dc57c56aecfe938d67e90d98a5efeb2c9dc4b05e725d4e116b01dc058c33992d62b946b4864aad12776b235a752366d507a9b40962c3853584252216f8ee423c1dae4d50fac5ca683ccb6ec22cfb50675941d29c33b556019e87266ab3a69b53de8cd9f8479d8de5c435ea3ab1fb1cdf5bc9ae312f151e50d1901a1ba78d984e297a0bc6e9231da7254dd6f2484cc83f875b310e1feb384c43f330de425a6d3da4d286bda356e212472fa9b163fa36ccc24f7416167ab4f020e1d11b9118690a7b6fc7ecfd93cedec5849e5d9b46f9db1804eec008fcb9b1ca653b6f9b0a4a657aabeec4acfa5467d52c8f7eec7cd4dc041fbe0bb3f533ac87c26b0cce144fc47ba33b7f4d5dae17fbeec6ecfb5c67df7e3e6a8e75a2e4e59b66ad91ed3cdcaae2b867bdd8740f66d35fbcc599db3fe1773093a532ca92f25eccbe2f30fbbcb4196d5b67c93a9373978f7824ae1d3656cdf13eccbebfeaec1bcc12f70a165b8429b4bc1fd3f2cbc47d7b5e62a128ad58a0f4bd0730abbfd2598d7fe5bab861a81ee611cef7ce78d95fafad77a6d7bfff20a6f7d73abd27246d71158ab141defb5829be7635836d101b03c6b77f13c540fa2dc887307bfe86d59613a711de1a5e246a90b59a3a442a6309bce6b5a6112d7c18b3f09b54dac8fab18142e17bbc1fbc44f651c5c75790e3038f6036fe1deba14aa51f20152bd3cb31d2b7f451ccd26f7596ce4e2936dd233d763a54763765bc3e8659fb9dceda8393c62b6dcf38759ff9e3188defd31bdb77e7bd07896ffff1a7f936ad76eb30985cf809ccb21fb0f1efe4ad96d816abda1699baf7e549cc921fbdb554e36759c796f06b91b1289ad6cd539855ffc0c634d2b32ab8b6cdd39845ffc47a0b53f5b8c465472aad6def2df2f453de3318877fe9388cf0c041c5692a29cf8bc6cf621affa4d37868d25cd019292c1757f94c9ac6a92b3f8769fab34ed3f109eaf86e4f8fd5bc5ad4379dde658af4f23c66cbbf53993d87d5b0661856bb7a01b3f23fd848bcb77cceee0d88bf1b3fbb427d1b018fcf782953458f1f6fe17ab1f945cce65f74360f71c5ac1326756a7a09d3f3bf3a3d735c7ac2fcc9adf32ca973aaf5d9744bd197310bfea7b36039a3ebc757bd528946f2a007a69af2d43b5ea8bc8251f935955aad0ad14baee25886a5b8c6c94d5ec52c63cd34961ddac4f1ed259ed34d01af6144223a22ee76bad7ba96ff965afa71ff3a6669339da5eedcaa40c4aa1d8375a0ffd5f6823c3636897dba9c8cbfe5c58237300b9aeb2cd0cf29e5617a4999d03eec7a63c5d09b987d2d74f6cd4b5aa3713e6de2d6517d5a064f5fd8675112a5c9f44afbb730ab5beaac4ed6df69c76a91f5f06a66b7dd4a5953cfa57f1bb3b0552a294f4f38bd7a42ba2d9c77300b5aeb2c98d3506e140a9fa91329c1fe165c5d43c9a8bfe7adc7a031fa175a5bff22e2fbb3338426767f799590c3ebc15903796990dd60536643199719531e3ad739f10d56b83c17286e28cdf8d2bec412da34b35d42fc0c939f72b3ab009135ccbd74b040c8af94b6a9f499297cc29e65cc9744665af5de0af1965a0499cc0a5db99e094a76685d729b56208b1a23e2ebbb5096457a5f4e7a4fb3b42d8fd5fe32569b65f1af514546a6e94dc9b568c7436baef7a19e7164617ea0d3dd16b040a6a508dfc362a508c6fee02b3e853f69c8305dea421e2d04a81a7052714b40a6a713d75bb89b3d8db286d9830b1f58325bb76c96cd63a43d2536beec77baa8e9565be0ec9978aa94c500d68602219f16a41076a044c8bf51ab1af2b3c5007b91283a6a84c0328bc5fa5000bbb38d03ac2325b06eccfe1c633673461cc20cae737b07dc5e94e0f6d680e302375a2ff161f47a71b52c14d05631075a276a6f8b4d9efc5bbfea4bc36a9e8eed75610017ede080eb4c09ae87a88fd6a65c2c8401deb9a050e84209af3d48aa0b63fa9cc280e9d1be0ea6bd2931b505989c29b8614014ede120ea4a89a89540541baa3caa4547074e374a387c83c2850d757e35b4674f5c592c32fd7ac69727f06c7e91ecfc0a03c0e27e0ec0ee9400db8004c8d5e4a39d610054ddc501d4833a875a2886179ccd4bc251c3ea077ca867503ea4d6038501d0a4ae0ea05e9480f8d67caa0a3a836d1156d737d49bf864b23251ab5a2c3cac4cf85ba515601820f21f05b1372544de4d05e1f12e1ebef6b7bc6197ccb290574ebb814e9f3e94283bca3c4df9db5659622e11edc730a0ca07795b5ffa0aaada9946f5978701d107831c44fd826a60f3f6221c54576dc630555e7f6aed80eb4fddc086e0e07acaa9a2c90d7d2e1c958eeda02f6c1f4a781d40a5c35932672fe60c03a86250811d40dd3d3d5f24bff5ae1d60a65b8fd78890c2006c5533075846b01d86b1d384ca42969f55827efd81f4ddd3bcac9c2e820e735decc5960eb47da9bd6d861854ab17813b5b30395b72d58aa526d5a100f729003788121cdfc61736cae19c8dd290d4d1a60c71600da68605b78d0de388119fe6a2600da11f9fb4a712540931e16e574e02497228756fec620b5a014b7debc73000dc255a04ad5bba84bb67dca63f1bc81b757cde522766f791548bab75b2b212338f69b0f588719a0f83f390a269f7974593e673d194c7d0a39ec73fa3694ea689a654458ffaec008b7a982115f594054653aef8453dd576a269e527514ffd11514fb5fd684a737da29e26b8443d7703e874c6a73444e30610a309dbce51ed905054dbc91f45c66fa30986bfa3c8884a3449af6434adb1be28d281174d5a7d74a6deeaa7cc66f3a9b7d1ffcf67c566f359b1c33904fefd09fe63d7324650d732b86fd993a079ce9f7853a4315659efd2a15f9c0eb19f7251b509ed9cd998fac65ea918984e9d631898a932d2249c39a1c47910c039ca249cb9a1c45905708ea6eebd5c2913712c56bb00e08f91e16b4d85ef63e6e0cb0cc21bd7a2fe08d55fc9f2591e1dce0e54387f0238b34cc2392e94386f0338b34dc2393694382f0438c79884737c2871fe09e0cc3109675e2871be0c70e69a84734c28712e0238c79a8433379438b7009ce34cc299134a9ca500671e25ceee1267a9ece4706f2361ab6e6f51904d07b22515c8f6a0fd339e7ad6a3ea484bb553933f5f239e0d5fc3721af0d07c4ab00318ece54cbd973fcc703300dc09d433db1275824071bca40f5f0bbe3fc8002652a2ec2451e605dffd41e68737033fdc2f0878f9c1c37b9f0ade3d00de244a783d9394e1b18998b46d4e968c7f0530f73709e6f810c28c803c71b24930c78610e63f80671e6012cc712184f95f00738a4930734208f3ef00e6549360120ea491c1fc11c09c66124cc2563919cccf00cc02936086b185f3258039dd2498f92184d912548d66980473420861b602306752c21c2161565a0f558aa3fef3d8de3e974e98b376a5427e0c403e8b12793b817c9d9800684f485c2be085af93a303c83f673765675beca6a484deb79d0ae559c0fb0a29510e8b4bf02542d84ca6be1037cdfacfbd7393e80eae6789f62926854d96bbce07b0e704e1b7a915556144d91f6401732951eea3c90252fdae0929da5d54680f005e3a8fda4ba78af51655729639df84597db49ccf475773efed150de12ba85a002f9d1fc4f69563acff1b64e025a27ce757c33c9ff3288070411008c7ef71081f000817d26f146d0ffcaaa3fb1bcb611de0bd0f405c64d22c77d2c95c643873402173a0493849671f91e15c0e702e360927e9dc38329c47029c45c1acc1c80e7e1cbd0f15be57415e596cce64983076c8e5014f5c12044a381b6e9e55099f251785aeb15eda1244094e86b21e78e552fa8e62d8c5b692ad17e8a68945a4eba5a899d6b1dc1211b747480892784700f3a020dadf7562e97a6d4397b05a61ab8ebadea3319483c064682f01680f0e624023d589d984f927d9b4ec4900e62126c1241c6a23833901c03cd42498841367c860e60298cb4c824938a58b0ce6700073b9493009271b92c1cc0730579804338ceb82f200ccc34c82493871860ce6200073a5493009c779c860f606305799049370b22119cc28805962124cc2161019ccc100e66a4a98192cbeffc8db8c23c2f29d6cc65131e8532a6dca1973eece62c25c946e3329e0ab6526c1242cdfc960c27d68cb29610e66b1b391ecddddeac40b5b1bec548fef699367d6810c604d10c31bbc537913535f0a0f683c9dcc4b7b022f5d4bfd0561852f7ebe1c17e6ac4a0ff30485e701d075417de575cf9ae3b11d20ac080261de1e8770224078b8d9b54ec2ce63b25ae7b1a0d0591fd42c246724130ec6918f61928d0d1d097cb4d29c19c4615cb8ba1f40b921a8523cd906d7619e21371e00dd68d286521342d9a3d402e4975526e1cc0f25ce1f8077569b84735c2871de00701e61124ed2b5ea64384f03386b4cc2393e94383f00386b4dc299174a9c4f019c7526e124fdfe0019ce4280b3de249ca41be693e1ac063837998493f4730e643897039c9ba9db45a97d0669b1508d7f8889b05d349b0a680e00ba25882df99ae0730e648b512b01bcad94f0fab254d7f9c62efa279c93f40915d4cda069b9cd44a884fd4964503701a8479a0895705e2719d45a0075bb8950094b7832a8d300d4a34c844a3867890cea0400f56813a112ce0721833a16403dc644a884b33fc8a06601a83b28a1e6b2f831a4d8c55b05ccf938a26d48eca71663bfd8ea7ce9b258d468d5600a612464524502575145c24e7396c88671a3e96ce0cfc706b3587b4fda31fe67e089c799bb929370a22dd968fd1b00edf1e66c4d49ba63085932df04609e6012cc30ee277f3c8079a24930c3b89f7c2d8079924930c3382da70ec0dc6512cc30ee27bf0ec03cd9249861dc4fbe02c03cc52498615c82b000c03cd5249861dc4f7e2180b9db249861dc4ffe0400f33493608671fbaa1301ccd3cd9e531fc6bde30780ae8f3328f1769478ed9dc02a452bde965d41b97d15d9474619f0cb3383de3e3af56e8f306e5f950f7cf2aca0e6d5cf171d70eb5d1dc6d3add76a4488619e57df07f8ead99440f74a98c86be9d0b5a342d70ca03ba72997cb847fb7906e00e5b941f4b2f3ef57ef396b860f04f8ce33e37b05f6e05bb5f0587b588dd433c9beda7a262870ce3769ef63d2c62499a70e06382f3009674e2871ce02382f3409676e2871ae07382f320927e99708c9709e0d705e4c8973108b5f043b836d617c224d3d5313bd175aaf9731de2a5f2cc0da5f81a90ca602df850a725750f65f62d20285fc50eef5f94f80f35293708e0b25ce9b00cecb4cc249fa7171329ce7009c979b84737c2871fe11e0bcc2249c79a1c4f91cc079a5493849677e90e19c03705e6512cedc50e2ac0138af3609674e2871ae0038af09aa27be4854d2eb2dc95319ff8ce352b99eb34cace72c0f754ffc6100e8b5e64cda0ee3649a2868785e17c428bbda82d25e61bc5ab4dc9dfd3dc3bd73dd6ae097d707b1c2b8093e5646066f7f00ef0673e7bf1316406443c1d701b43706e197e383f74b32787703783705016fc21e94a85f01f06ea62f5ed669b6f32bb29894b252a9d01ab17d05efc90c5fb5a73d80798bb9936508fbdfc912792ea806dd6ace7e9e619ceb3e0278e96d668cb0178bfc73a348fe5cdc065ab4649bb01c05bcf4769306dd4827c592e5a79301ce3b4cc299134a9ce500e79d26e1cc0d25cedd00e75d41b4cc53ebe4c809e562822300ccbb4d8219c6c5043500e63d26c10ce372eac301cc7b4d8219c6e5d41b00ccfb4c8219c6e5d4ab01ccfb4d8219c6e5d4a500e60326c10c6313731580f9a04930c338025402603e6412cc302ea73e0cc07cd82498615c4ebd12c07c8412e6000d4c7d4fd22cf94a60bbcf0da382bb11c07dd4a4d63ae9101b596b7d04c0f998493849eb9e64380f01381f370927e9842e329c7500e713417c95701cdbd3be4a781173103e19c40a8de4855101732f1c9c6a09ad113b2a90164af747a8b643037efa1425e4fe2cf6bbc3e572098cb3f025361b80931009c1922d7d5906c03e1dc4fe1f0aacfa5c2e17e38cc9ef691f722e04789f69cae1e3c0eaa5dba950be0ff2d96729510e14280bad87160b607c77854df275c75b57ca8f414e137b21af97f7675ac7724b2ce1962b647581b600f073c16cd33b2ef8194d64eda6ef01bee7cd997b1cc65cb307c8355fa044d92d094a6529e9dca5895495a65301c617cddedb8bb0e79e6c6faf8500ef4be6ce4b261c48269b75f729c84b5f0e2203c0aa4d4e0640988f926500ed8087be42bdfbdc22d921a2d66e140acfe4c93e7c55a1cec0ff5e0dc2ffb21b7cb04cb4e7eddd16c2bea7d2fd00e36bd4831e1cd8741170937ea5702e15ccb100e6eb41d42fb313b4d2c3dd65f70240f946506bdb0a44f0f61acb4259d8f0aee35216c89a4bb276cf5f00cc3783e8421ebbc77521af0508df0aa27793fbe30ce183f5428979d62ba522c75cc8368b4ee31a562b6a9bd541f8265901340e807d9bbecfc8e9ddac97557265a1b39075cf6aa9af0135cc77cc591e13c6298ab381afbe1bc472c2b1c177be9125f42300bcdf98b431c504ca9e23b28d299a8164fd5b9370e68712e737c03b7f6712ce71a1c4792dc0f99e493849b79824c3792ac0f97b93708e0f25cedf029c7f3009675e28713e0270be6f124ed2cda3c970ce00383f300927e96ec7643837029c1f9a849374623719ce4301ce3f0631052197ed49df302800f83e3269722ce93758c9708e07ada08f4dc249ba06930ce70a80f3139370e68612e70e80f34f9438db0801e5563e690fac71c964b8c826bab60279e39f29710d63f13d95b1f335ece9d91bc4dfbc17be5e889c210073b38a05b500ba850ba8606701d89f0633953027f8de4cb2aee08f00becf821852e3e341b3181fe3e123416bc5a05a4da8477e7600849f9b331b338c5ba48c0305cd5f285176677c1611cf03cb989a6e8dcde520fcd81d5911d406f8e417a64e18246d38924d1864c047ff6a2a5ad21e2332b41700affdd29ccf2de78672539fb701ccaf4c8219c611f37700ccaf4d8219c64d7d9e0130ff6612cc306eeaf32c80f98d4930c3b8a9cf9300e6df4d8219c64d7d9e0630bf3509661867bf3d0a607e6712cc306eeaf31880f9bd4930c3d866ff1d80f9834930c3b8ade98700e68f66afa3246c1391ada33c10b4ddff41ddbf94a8abce563d4f4c8c252c8e5a52813c0380fc6710b3dd2148bba39877746c6473c4904675c2090a8480c9a627340719c1bfcc99ed1ec6e6662640f993491367f2298b2832cffc05e0fcd9249ce34289f32e80f3df26e11c1b4a9c97019cff3109e7f850e2fc0ae0fcc5249c79a1c4f916c0f95f937092eedd4186f36080f37f26e1246d7c92e13c16e0fcd5249ca49f2821c3b906e0e4f579329cedac9399626fb83af1d056abfd5ece0867ce9155d5bb0064114a64fc44ed2213be71f24e0053334a4cde97a0128efad0b5b5416746739370e68712e7b7c03b5b9884735c28715e0f70b63409e7d850e2dc0d70b63209e7f850e2fc3dc0d9da249c79a1c4f904c0d9c6249c6342897326c0d9d6249ca4d363c87056019ced4cc249fa0931329ccb00cef69438fb31f796517c25101fde756f83ef5eaf46387446b61e631f509def408975a80beb6a163f113bf529db84a8c91aa22703d41d2951abd543f96c4fdb90ef619009ec4589502d2750de5a2bfc8f670133253cf79e71018da1932d82590abcb313255a6f0bb3c238cb782440d939082f4d6fd10be19c24b23cf435900174a1443bd89501545b0f56598ad48b8e6365e79eba7de45ae0c17b5362567b1e8e716509011452643e3a19f868574a78199a9cd4dbb444c299f264d312e701dfec1644bb0aeeb7adcb49c35da57a11786bf72073d44a0657b4efe95f6fdd1f786d0f4acccece0bf9c1e7a964f8ba007c3d83a89da636c3338cb3e6e78104df2b88e24925789e6f96b93612d8f33a54ba024fed1d44f184b5a3e2f7fa22ecf623c33904e0ec63124ed25e54329c4b00cebe26e124ede327c3590970f6330927e9703319cef300cefe260d99e453eec3403664f26f50d2ef6312ce71a1c4793bc039c0249c634389f3628033c3249ce34389f3cf00e7409370e68512e7eb00e7be26e124ddb2970ce762807390493849775822c3790cc039d8249ca43b2093e12c03388704d339d704031e643d4a7f00f88606315ac4035e233c51c9de281f091fbc0880378c125e6abb2ca842267c13184681c663d41490619c09d21d801c6e0a48c2914a3290070390234c0149d82f440672310039d21490843393c8409e08408e320524e136296420b70190a34d014958f52603792e0099690a48c2997164204f0220b34c0149383e4e06f2020032db1490847b1d92813c1f801c63ce8ce2306eb53b10a0cca144e96ddbc871a1dce2ac2380996b12cc307a665b0073ac4930c3b809740700739c4930c33887bd3580996712cc306e02dd06c01c4fddc5eb7c71ad5002adb05ee6df18e2af91c1235b10c0e7cb2878f994f0fa33f77a20fdb4ea6231d4c0d1ae11c236d0f654eea202bb01809d4009761073cf5db79703388b01b9403e829338f187311f9d0b92fe444ac8ee85d73650be40806704d3b5ada3f06e0a7d02c0ba9f3933dac358380d05d9c0244a946abd256c68a69ec312a225cb61ab8197ee1f64e2afb09458ca9c0f8043e181ad06da4e85f5348075721023e6e3f6a0e9063782e47e401015fbd4fa95c684f283248b80274e310966189756150198534d8219c64f32ce0430a79904338c9f649c0d60169804338c1dc8d301cce926c10ce366293300cc1926c10c636ffc140073a64930c3d81b3f15c09c6512cc30f6224d0430679b04338c1d1efb019885414cffc760c6af31272c82c8969d8e0638e79884332794380f0538e79a8493f49bd56438b7009cf382589cc2e71b6d025d6f81ec6f44866f2a73f0cda7c4d78df1af6494c8bd62b9a88dd6e3eb588de877af60dbc4086685380b1fc69600e3024a8c0398b3eb963df6b3d25297c763a9e0c18786a732be830cef6f2fb104f0045ec6d4baa0ba10c22d02701706b3fe6c7cf01dc2649b43750639e4a220c67fd2db6f93b00d443675e10ae0990752e79e89ca726529e9780f6fa490603c0578e8624a8c191a8cdeb68424ec9023db127201c05b646e0640383e449601fc066400c59468070ab4b3857f2e667c70b75c96f66542949a5cb35e4400f7e352eb6f5bfc4ceb586e892d0b61d9df0e005e12440e8bcd0329101e4bbcb9fe015439ec5e200b581a44ff12ac9faacabe53fd0f777db407f0c9838298b0086126cf02c20b763a007b302558f509885cb6a77d02e23c80f01073e6cd8571847d1640792825ca7d3da02cb2c2e442ead842eb2fd561524b5b2c4da52a963a8162691925e2deccfdbd8212514bddd36623d703a0cb83e85c4efd6bae8438c9763efa1fc802569884333f9438bf06380f330927e9122e329c97039c2b4dc23936943877019cab4cc2393e9438df05384b4cc299174a9cf7029cab4dc2493ae1860ce71480b3d4249cb9a1c47938c0596612ce9c50e23c04e02c0fa223245bfcb68f7c38b988d9bd4de1ed4b5a0510ae09a22324b51975619c1d3f06342ad706e58d76670817b4457a6200dd729f50217c1078e3ba20863138c2f2868d029c0f3186bb77f37180b122d891cc3dfd0b6cbd00dac34d1d24262dcdc90689bf0068d79b8a96b41a4f86f65c80b63288a229678f1b311a02106e0866765d134ca0259b5c3300e0db180cbeb1aefa669827277e07f05551e2eb032a4685b22caf105ec8e71e97b39962ca8cbd87d2d650b77c3e0748ab8398eb91da10704e280781af02308f300966181b925703983526c10ce332ebb301cc5a9360867199f59500669d4930c3b8ccfa4c00b3de2498615c667d1680b9c92498619c1e731280b9d92498615c667d0680b9c5249861dc68ea1a0073ab4930c3b8d1d4ad00e636b3d71311267cb22e8fa1603ce8c820067b799b7d11e32b85cb2c167cde7ba1f45dbe729d9f07d05e27eb02f91bf0d6ed418c0d8d6948fe65b21b84ff1df695ec0f018c475162ec0bbc7296f039e89b750d96c2413762df24cb49df03508f36695e473e65294f36afe33f00e73126e11c174a9c77029c3b4cc2393694382f0538779a84737c2871fe15e03cd6249c79a1c4f926c0799c49384957ae93e13c08e03cde249cb9a1c4b913e03cc1249ca4dd216438cb01ce132971aa1de073821f5327abb4af07f04ea284a716aef296d074d106aab6da42e5b261692f572d1702d538bbb3c7576da8c7d8f70588770591dcb1c41ebfc52461bf3c19ce41a047e9649370920e7390e12c00384f310927e9e216329c1500e7a926e1245d674986f3748073b74955a57ccaa90b6455a57f81a2e83493708e0b25ce5b00ced34dc239369438cf0738cf3009e7f850e2fc04e03cd3249c79a1c4f912c07996493849778a27c3391fe03cdb249ca45b9b93e1dc0c709e63124ed2399e643857029ce752e21ccedc9b4d251e1ec6a6df4cb5feaa113346489714be1021027e0ea8e89f4709bc3b4b3ca72936672503d985ca730702cf3ddf1490841e4906b23b007981292009672593813c1a80bcd014908473e5c9408e02202f320524e172183290a70090175382cc7695eef5e8a26a7cdb8002eb890d963e55e28c9b1a50597f3f55597f1c28eb2f0962fe72aa7da484a39f643da41900e6a526c1249c0c4e375407605e6612cc30f6ddef0d605e6e124cc26a3d19cc6e00e61526c124ac4891c1ec09605e69124cc2ea3d19cc5e00e65526c124ac9992c1ec0d605e6d12cc307eeeb10f80798d49300937b72083d917c0bcd62498849b5b90c1ec07605e470913ff2a0cdfc3a682d91f7c2cb60470c1e1ff2acc52e680bd9e126c3f01769ef540a998b008d76b36d997b5c85671b606586fa0c4ea6d83d4306ec5321c24fd1b2951fadbe08fb0bc27dbe0ef0ee0a53751a2cdd078a9b7a5dc84ad26b24c600ef0dc9b29f1760585d6265128f149e1f6d789035a79bc9d0a6209f0d15b2821b6654cae35ae13ff6db9e14bd47b0360b70631b1015695b0f29dbc82449688f701386f0ba2f889cf23532980c2b8bf6c26c81f6f0fa292840dcfc55692c2b891d548e0a57704d13e4aa7924438c041e6a3a703b0779a0a368c1f773e1980bdcb54b084590119d80300d8bb4d054b589d27033b0680bdc754b084437564604703b0f79a0a368c15acbe00ec7da68225ec8e26037b1c007bbfa96009074dc8c06e05601f30156c18bbfa9600b00f9a0a96b07b9a0c6c3100fb102558f5898a71ac09bef041866f1bc0f7b0397d0061dce5762e40f948101d7fa94f1f0be33cd149a077ea519370926e3a4486b30ce07ccc249ca45b6291e1dc05703ede94b34bdc7da761fca6c2d100e61326c10c6357f44e00f349936086f19b0a5b01cca74c8219c66f2a6c17305bb774099f1927bc401410bc882865ce966a9962436abea6888328b5cee789164e1d5b65e15866fdf316032bac7fbaeb11b16fde0cb685558bab5c5e9990bdc1bacb35ab65d983ad479ee60ed1463a4454d470a75accf9f0f562562e42dfca8a98bd65dc42ebb79ac2562f9044c59ee58bac6bf58c4fbee021f00ddfd7b11a6171ec9672d1481bc1c9feee2db78b038c4a5dd5b7700b65ddbac2b2b984d91f7c8b0adc8b64b11b8d7404676a9642a16819d60aadda59f7633f1837d7bacec3d20fd1f3288d44bac858e416cc17d697585697886371433859fc838c913ceb97dd2acd6c688f66ca75631be499ba9e5c268fc3c4d29ee11115d1a7dcca46f3be6416d90986bfbf46d02d17520b935a9adc3edc933b248895aca13c2ef664fb9fe5f12ea35db869cf487bebaf2556ccdbc2f9b78d6bacbfb952cbe634632dff1f3dff973d60700300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/efad5f1ce02dc8349b654dabf45fedeb.asset.meta b/Assets/SerializedUdonPrograms/efad5f1ce02dc8349b654dabf45fedeb.asset.meta new file mode 100644 index 0000000..8f93c6b --- /dev/null +++ b/Assets/SerializedUdonPrograms/efad5f1ce02dc8349b654dabf45fedeb.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: db7b60f1b0624314fac4ac9a6d5451bd +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/efda7f544e58615479b5f460e1093c88.asset b/Assets/SerializedUdonPrograms/efda7f544e58615479b5f460e1093c88.asset new file mode 100644 index 0000000..d8e8a94 --- /dev/null +++ b/Assets/SerializedUdonPrograms/efda7f544e58615479b5f460e1093c88.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: efda7f544e58615479b5f460e1093c88 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c1447fbf8e782bb3b94e0419a842468698b4b0b859240055a08498094088d20757757eaeede52777777f7be7577fdefcccee49edd9be7eef6f69ecd2cbf7fdfcfcb66e59e799eef3ce39691c3acff22a3ac7f16b3856c1acb668b5829ab6655d65fd3ac6ba5f53ffb4e3d5fc06aaceb2aebdf62ebdd289699e097fcbf61919ed6bf73acbb5a5667fdb29e9558d772f1be9095597fcfb17e5b66ddf1a72badff97595f459a5a3f5ac4a6b3f96c27d623d22d8188c5e247b5f25984db156969fd3b956db4de9609a5782039e2550feb9f42eb4dad78576929adbe5bc2f61066555aef4aacdfd4b00a4be60a21b1e53d1399f883d997eef2da435eb98eade4df4de4df2de5dff0fb66f2da33c9ef7b81dfb5027f734217c6f97d6ffb1ae9685d9b5bd7b7c03dffedd7f2bb3eb6bc8cd57164f593d7ade4b5bf94f97612fab790d7cc04f6c6933100c84a86594b791d24af03a5beefa418fe109b51e45c208fb3ec04f41904c26e05def367837dd8aee2b1b32b1e3bdbf198b149c6df27f2fba1f29a25afc3a46ceb9b2e97ca67c3e5b56f02bd46d8bf63e359d467ad309bac95f723e57594bc6e2d75eb2a757d17dcfbd545c569b694d94586f19ee6b9fa9ebf7f5fdee7c86bae2bbe46cbef3e90f77949ea938cff299dbac9303e04f716c7a6cbe3c852f1dedd15efdde56f4fb23936bdc3650ff03faddc7c29efa314ece8e1b2a387ad4bb32ce777097550f20ba49c9e52eec7e09ecb3dcda36d4de5ef36cbfb312c71ded63d8977e36d392d15eb097638cdbbdacf9b4f624e5f1e97404f15b7bd5c71db4bcaad907295fd13edfb88e29c09e4f0df7fe292dbdb25b7b794abbecb4b52cf6de4753b799d22af9359433acebe523edb565eb79761f661ce3ca08f7c3f29fadbee2779e4162f8ea6bae2baaf0c37513a56bf9f26afad92fc5e7d33dd87ce33e4b5759261b696d7993ec26c63fb42cbef5dbe302181cc5936df967540074b4eabfde4fd6c799d23af3b48feaaaef02eb84fe4078974d951eac2401c58bab4ee28efe7caeb3ca72e565dd2a9d3a7e9d329d24fcafc0cdcf3eb56f2f9ffc03dd775811d4eeb47a4ccf9f2bac0a5f3ce743a5b9577f1bb766d816f24f3bb78fe5568dbd726d796dda6483e5757a5db8ca8de2da783df2a3d92490f8b258b012ec603a40e8aed2eaeef3e07f7fc9a190d4ffc6dfdb6adf2addee039ffed17e09ebf5f94a4aebbb1589fe5720681b007c9b065fedf56c5e7ee2c36ede97ecbaf03c1b381529eaaf72e61b1e598fa8edbf625b8e7ef774dd2b6a51afdac70db4d8ef3db3d9833ff9916f587162fc8677b4a7d063367da1a2cdf0f88fe2652219f2db3ef3b285d96cbdf0c015c86d8fab557e569b1bc96317d395b0238c8f468b5271bc2eefb867cb6224e58a5f29b952ebb0ba372daf494baab7c6c1573a619f7b7fc992aef94fdd5f25a15fd3647fa3b5b23af9552b7a1cc9137b3bdc0737e1d26df7f05eef977e551d9dd9e90cf549b40e9aa8bcfbd5db6ebf280787e56637fdb73a9bcafb5d976b8c72577398befb775b69cd12adeea6d391d9b7a94b3ce9693a7ea401becfb8e4a9ff5f2ba515ef7911cb398232f67fbcae7c381df648167fc5bd55e1f9ea46ef138ee6febd950bf3f405e0f94d7c9407637a9c788685c35d4f9f603eff8fdf6c05e685f3c5d0e92d77609ece90ebee3d7837dd81fef5d73793d4cda369239db3c236d5fe9dc378eacc399d64fbba876f211f6fb4e1be4fd91c0261ec6a828eb065f3a4abedb1ad82dfd2a920d9e1d2a9fe5449f4554b847bbe2e71bd7fb63800cddfb63810ebaf7c7c9e7dfdaba77913ab3e35db66c74e99acd1cf90c3b21d6d648b62becef3cc4e589f2b7b9aeb8cc95f1f2791c5927e9e3b2ebeff2fe64575c9ee28acbd19ab83c55becb03f126f3d648be267e0b0087d1f2dd69e01b1817eafde940aeeefd194007ddfb339d71d94dd5df36217109f587717956acade21b18b66a8bc48bcb73e4f56c79d5d57b55ff9cca337f4842ee79f25a1e476e6f97dc1f93907b81bc9e1f47ee8588bea984a77c5da59331cce9ebfcdef2dbeeafc4917511d3fa7a0fd56f703173fafa25cce9eb6359acafcb7ebe086cdbcbfe92c87816ebeba0ed21e4f17797816fa0afaaf79703b9baf757001d74efaf640e5fef39593ebf8ae97d1dea0f7dfdea585b23e35d61ab723c5e5c5ee3e2acf84e64ce76ce443b7e7abaeb3fb52c7ed978ad2d3f4fe9729d94b78d94ff13b8e7d749ae7027d9e1f692fd5fbd55ff6e5bf97c94fdbc97927f3dd3d6b77a15b9bebb8139eb5337b9f8dfecf295eda2fed660cb8de01db46d7be6ac93dc229f4f0671b53d78a6ab7325e2aafa1d6f75f1db56cafb19dcf3ef6e8fea9fafda1cb7c9eb41d1779d54df8a8adfb6408f3bf4be22740571e6b98ea46cbe3381cd5ef2a429cc99274db1fda04fbcfed97be537c7c5f9e67e797d405eef93f2a73267fb65aa7cffa0bc9fe67aaffa00cf8fb2ef9e09f450b2f96f7e49c2fe87e555f5433c24c399ce9c7d62aaeda32b2352adc7a6faae44ea34c3e93fe2de8a877eca4f952fae48e01f8fcaeb63f22adbc191992e0633e330189e645871ec8acc66ce3e0495a61e97f7b3e4fb5fe5fd0eaeef557f9c6cef46e6b8be9febfa5ef5413e29ef77747ecf9e0272f8fdd351db842efcd933e0d98ef2d9b3513efdaf95efe639c366cf3167fb4eb5e17692dffd067e0719a8f7b26e1b99efb26981bcff03dcf3ebce2eb9aa2ff309d77b2577a14bdfe7e5f525797d316ae39893c06f004ff68253665c9f7e5aca2894bff913dc5b3edd3f5efd5ffd56d67f238ba48cbfc0bd252333d3d637b300971559ece257049ef3eb2ef2fddfe09ecb3e2a8e7ecfc86f7775d9b6abfced2349fc763779dddd65dbee52c6dfb66d033ac691f5b2bcaafaa58a43e5b35cde524dbcaabaa6ec238a2c913afc03ee2d1d06a83ac1ab4cefdbbbb97effaff3f70355d9fc9abcbeeed26d0fe6ec0b7b535edfc27d92a9f90f4af73da3df34e8f7864bbf3d5d7a2f93e1fe07f450cff97539739651cbe5ef659f6ea4d8f5be58bed78db5c74b231fc8ab1a4fff08c49f1a43ff1830907519f6a1cd7750a6fd7c90ca57559efd2e8b9f67cbf022206f8fc87e5426db1d9112dbc60c06eef9b514fc46952b65f2db8894d1c5f53cc315861a4f59e90a43f6d346568130647f6c64b52b8caeaee719aeb0cbe57365b39c1712d9cbf93c520e9ef3eb1ae698b722ee2dd6832f75ca17e3e35c4e533b0e060f76e95581845fe90abf023ce7d72a57f85576f8435cf263c257faa93a42221f88e7972a6ffe425ee51805536d2e553fa966ce74a4fac10f89fa6c27d58e50f6efedb25ff54fabfaea5af9be19b8b76c1c7a9a538e9a9f10a991df3707f7fc2aebe2192dc03dd4bd4ebe6f09eef9b55e3e6f05eef9efbe76e9d7daa5df332efe9f25e0af786c70f1506d0ac563bdcb1fd6dbe10dab70ca69e0b1d1c543b5dbf671f268e0b08f339c8c36e09e5fd745ed107f5b616765ba6cd8d765c3be2e1bf693efdbba7ea7fab2f777e9bcbfbc1e80e87c00d087bf6f07ee93611fcff7557f90f27dd50f24dbe7ec5b19d681cce9fbaa1f5fe7fb2a6e0e027a290687b8d81de26277b0939d90a19ef3abea37fe10dc5b7134fc525738ea7787b958ab3ef7c35dac959d47c8e7edc177ea3908bf213da8f0df7186db60cf4152dff76c46c39bbabe53ac8e64ce7ce0485bee4859ff76e4c3fcfd054ebb1cf9247f7fa1cb6ed95718b9583eef00eef9ef54bfc145f27d47706fe931e21920975f2f71c9b92439392397baf4917dc0199dc03d97f35dd4771ac23ccbf5adecf765df033f53f9d1372c7e9af825361cf6ab46def024e5b9fdee68177f392e1239cae97731fe720cd3e71d72dc24729c4baeecb3881cebf2e72eaedf1daff79786f727b8e41e0bf4e5d79398b3fc5075eb93e5f3cecc998e4e61ce74748a4bdea92e796abce23497bcdf4038ea3dbf9e28bf53e942d9abf89f8ed8abde9fe1b2f7f4f8fe18d904fcf1f8f8fe18391b7cbb093c537a2bbfe3bfed0af4e1d7735c32e598849817ac64aab1abf35cdfca7186c8f9e0db73c13318fef7f2b7b28d9074bad13d9b2c655fca9cfd39fcde4af3d9bc7dd2cc9e1e2bbe57ede9ed1384f5a74bfe6552e7eee09ebfd7cd4390ed4bf6af5386a3cda8eaa097477fdfd0ee52f309fe89be9bb05c3efb03fc8edfff0dece1f6c71b93d63dab92f2ae70f1bbc2e6972be76ce42a1b14bfca04fc545fc895e03b15d655e0992ad3af067e731578c6afd748f63dc0bda5dbe8735d72af95dff50461f3eb75f2792f70cf7fa7caabeb99a3ded720ef46a0d3f5324cd9fe8b30571837b0683b958f05a876ffefe07d2ba0a77aa6648036ae0a9fc9f649466f190745ce3013c681ae8fe626e6ecf3ba495e6f76c5ffcdb6bd7932fef354fcab32a93e7ed80d7223f27a0b73f627aaf1890c208fdbda0797a90d67b3cb9ecdae703358c27eb488927f9d779e628c83cb5075abdba41d7dc13dbfde0ae25fd5b36e07cfd498ca1df2f76a4d8af251304e21fe56dff2eb5dcc592fbdcb8ebb31452ed9ea7777cb30b602f7fcaacaa37be47b350753a5d17b810ef78067fc2ac70d3232c1bda543c1aeb6ff8c198584753f73f64bdcef0af301f97e00b8e7723f707e1f79507e3710dc2bc650ce20a79c18bd1e0236caf10c316615cfd725d7867ad49dcc51efce57f9d47fc9c9d33e7b51ca5675b7875ddcd458cc0b29c856659aead393edb188e2a0e6657f2cef1f61cef698ea83d5b5c7e43a8c886aeb3eead25b8e9f441e93cf55df4b67f09c5f1f67ce36f3e376fc8d5375fab648784fb8c2537df64f3ac38bb47385abc6355e668e7235a2fa81e3adf5f930411ca4aaa3d2e929f97c8894d7c9f53c0309e76957384f039b217b25ef59e66c2fcbbee4863ce919e6ec2f79c68e93f13f23e13fe70aff39797d5e1f7e4338722ca4a1beacfaa35f64cef6ccf3e039bfbec49cf57c35fef2b153ff8ca14efd27e8f4681eedff1ba7ea5caade9a28be75cf54ffff2b92e19fe09eeb20c7f91bea5b7f270843c9536d1ed5367e55ea3e0cdcf3eb6bcc51ce44d4b88162feba2b6e5fb7f59a78904bce1b2e396a0e84ca0bdf64ce3e9557c17365177f9f65b39d789ad39e84763b9e358b887278362b63c56c2dcb110981a7ca649700ab5f265efc2bea15c293195f05cc83ad631bad9f96e956e02e12eb7beb58bee533ba15b8bd44fea5429f26fe2db6be2817428767c40471674c105cb90aeb7f6560f970adf57c96587dcc1710975b6fb2d95cebca7fb59c8d664bacff39a52cb682adb02a6365acc8fa77ad90b7dc523bf6cb4426f1a5c6eedf2cb464da2ba12bad270ae85aebbe42685828fe5d27342d13dacfb19ed58975d9556c159b6a5d3788d0626dafb1fed685592491e975d42f88c69edbcbae55344db7ace1dae7085ffcff31d21831c2d1371f2ed361d31c510b3f262626fe3f433b93e10d8f3952c668812ce27896c77244db64610c41ef36c65aa8f76f9bf7585610d7163d191edd7d8405d1183e6bf3bb6b669efaef69cd9ca6e5b31c517de89bc0b47860b9bc2cb142d98b09cd9a35cde58abaf14774f84555a63040fcf677e5e23bef11d05c147ece08104b088aac5c6d01283c1709e52b846a6e63b8e82a91131689bd37782eb952045069a9ce8bc135d62ff9ce1c31719acb156821a225b6d04d641a163119ba881175c8a2464917d8b61df1a3a6658315d1a8c91135a99e711c180b4b54b19ac87a964a62174daafde8f8391f5c78cfadf3ab8a4efef29366faf8692de2279550b1186aa28ba1d641279dc46545bcf869d36057347ef87f7a866d111f4fa40346b0a98e609ba07d9cbfab165278aaf7ce9037da47bab31f3dc0f6881326560143d84c83309723eca0d18a356be5d28a2b84486eae8b9cb68d5330a7e6dc7ce4b5870b4133d4b93bc52d57bdba760b1d3dd1bdb39c949e6a2f165a0d831d45c1552b64dacf1758128badb0b9bc292284681bd3f98bf864795fcdd66eb25aaa5d04d5c1a0f5eb57338c784b0df15ceeaf5d356e20f2387762e8842786565832ebe63799b5c62477f72bb90d26b9875fc96d31c93dfd4a6ea74b36a237696920c926dacda2fe9a6afd76b565cc3ad176aeb77eafeb96899f5c7a259d5c7a8be492c9749d45de34c292497b5ddcf1877d744abaa3ae371e751d30c17d7d0aee88795b3fbfded649e76dc28e250166d2f9d65fd32d03eaacff47ff52fd31ee6c303f81af6dc534356e81b07f4c26ec3564b93d8afd5f0ba4a29d295cd87f60980377d6459a88c920abddd345d25b21e478af990cb0341de08aa4ffc47fdffda7a73a90e9abde89f4c02876d1252aeefa8334fe93cbfd67b02bf2dde92c134f675db1c08660810d4d3db06ebac07889c5071ffcd603baeb848ba6258b6d48f1f88c11de1617de03d37cb846f3b7e76578d2bc27968b8ef09b8bf6c2248ff42bb9b72ea98bf47f7020f973a2819a59628fd63236df4a687b31bb875d855b2d7ad7b946aaa77ea1755d29b428133d4d65490cf0c4cf4646e9f27a91b267305d0da2b1ace0db4964886c2c5b6463fcdf45d6737b6069868881721152b6561b1e02f6bd62318ff1ed67eb456c37438aa61c11ba596cb00cba0f96d3e46a729a3774d9589c9ca62f966447fb4db2fd74927992cdd365f5dc57f93e15ad45f52f269c1c3c9cad34e1e48872669f46cd1aecde022e6fa5e834b6e5edc4f80ecaeb85abaeb11c789d749c22eb9b1a2b8c32470d28b5cc80af89ece7ee869225a83e398c11c961bb249203a5555802e8aff324deadc2379488e9eee7c5db42b6c092bc4c24c3bdc5634ec98edd72f16939db47d43bed61d0187f6b81fb5ba64e1bde5ae55b4e246cdd74c1050fc0048ff729782096c627f84de3837492796ec3b7caf05bc31a8ca9bd8d5fb587e824f31c75922647fd3be22d471d8a09df5623fc9e0c6fc287614961bb647c248e57676182b7d7a5310e709ae8a1ceb4fe5f6dfd82b7378a45eacf1485613437c8b4d27ab9f5172fb04781efabad2fec69075ef41c8e39c564bf4e31028bb7299a78fbd963bc8dc4844fd5089fddc49bf0513ae12d98bd29604cdcf1825d0d71ae96659b3337cc142df14c31e7a75ef4b4968a98ab15f19ac9f6b56a1efb5bd73aebeb4c510e54887799e240811a91d77a89d3ad31fda7ebf46f0df45f0034f4126236966fcdd0e45b118ff9568e4e38aff8cc6448c5876f40e1bde2938b619badc3d64f58b741d45cebc5f785c201ca1aeacaa5692a20476bf4ca116df12ad6981532de5ae033a46ac5dfd12a0a0f3b3a2aefa7e23587c556bcd47ffa8a17dfe6244b6ccc1684f658052b4fe7493c53dd5193a946bc64aaf9585a988ba5857929a585029dcf892e9ab58dea73788a5a2864f394e7bfc2cf379269e26efd8b3ea482243c2b5d3a8e148b016ac5813136b95a9e99f201b315e064181bbe4812fa34315fa4892035c7d2c518acd45ea029b53737f3566a8fd5b9ace89bab6954979d2e2404e1b63bebdc56f4218e4d22f2d3a9677f3191b65664aaa53253b5b3eefe62b5408d2836cbace73ce385ef478a951abcbe3453f0ae14e4abc5c4b155a20aaa77f285c2c983b61373f471580150a829003cd5aac76349a8489384fef6988426606a2ff2abf6444cedc51ab5f76bee4ded6d30e1bb6884cf6de14df8249d709e31f3956f7e5a88db6282f9564b31d54dde7857ed8412574b7185682ba8f65fa978b2d1fa974faa2c112232c5a468350bc48b96db616c77d7b0ede891edf61882253ed94ed609e6eeb93419c17146cca7e804f3fad71e0ca97ff10db3bcd7bfa662d89769b05fe811fb342c992ff79bcca763928bfd4a9e81495ee157f24c4c72895fc9b3b0482cd544229f08e525126763c2cb34c28b3c0a9f8325cc95babc6908e39d3ad14aaadd7c8af66b145b3fab13394fa655dedb656ea9a37f84f77994cb46b39774be03a6e72a9d9ef61a2c3ed78dd7298a451f1a0f713e5be329d41d31f4ab35e88ff3887e2e26bc5c23fc738fc2e761bcf6d2f1ea99205e4bc514a9e8d3d1d6532f1c77c2b459a3d386df46e3cd4b38f331a4151aa4e7b6f68674016644a5ce085e54d8f8265ac876121d7ec572fdd83a518c7bc7b833a641954e039eb3cd6da8182c48b15ab010435aad41fa8a47a485588ebcd66f8e5c84a9bdb72ed36ce34ded4598da357ed55eac93cc5da99621b50ede21e0bdd6b10b164e3d16ceba94c2d91523b5de2fa9ddb008dea089e0c96dbd45f0ee98f08d1ae1fb7914be0413be8f46f8231e852fc584efab11deb79d37e17b60c2f7d3082ff5287c4f4cf8fe1ae19b3c0a5f86093f4023fc4a8fc297634e7ea05f272fc6d43e48a376d7f6ded45e81a97db05fb54b349273c444b420a797ba673f799b5ecab740496ebe39dfbc5137ad3451f8589752a92e5e78097d984e250f457919e64d876bbce9138f89602526fc088df0a51e5d751526fc488df0a33c0a5f8d093f4a23bc63076fc2cbb1c83cda6764ee8509e68be663ea82a38477568b3496298e98e74ba3abe489f67c7b8a3231705d2c7c3fdae1a406aef95afb4ce9bd35d2a72b2c6fcfb69e7ad17a0da6f5b13aadf9c82befc48dd69beda6a4dd0cd1cd2bcc64c364ad7b9827bd2a301f384ee3039b3d3a582566f4f13e7da04a97cf8a498fe5a4f92c368f3476d5b7d759a7f1f3e41392ce934f1479329f1e41a72b967f57eba29bd7ad4f6248dd9a6f4bda9aabeca96ebd16f3d953343e5be031dfda1b137eaa46f8ae1e85d760c24fd3083fcca3f05a9d705eade19bb3faaad6d4616a9fa151fb198f6ad7636a9fe957ed7598da9b346a77ede84dedf558de76962e43e70493e914c91489b25e1450bc8859c0ec75ddf65ca962eb69a99845b55adc2f104993f72cae100580bd65c532d1f9b14a8c25d6584fd5acab8dcc5ef09729aa63f6063e99222b289573f1d68827b5e2ab32108ebec0299705272ca2bcf66e6ec0a2e86c4d140df618451bb1283ac767f1b30f26f85c5ddcf3d90c45d6cd5a47bc78096f5f2c633d0fcb58f97ec5de3b2df6c3ecba4067178fa6250d3da5b6ffeee1b15ab43f16ff17ea72168ff17f0026fc228df0a69dbc093f108b938bb138b924a5383948170ecff42e4dc689e38cf31d8c09becca7e043302fbadc67b23b14137c854fc187e904f3b8e7db14bbe77672015ee6761e8e79e1551a2f1cd5d99b171e8109bf5a237cae47e14762c2afd1085feb51f85158fab9164b3fd7a5947e8ec69ce67a5d9ec617012db3fec73bceec0d9b54195b6e9555fccd5ad154e4e5a1170f3b06d3e2069d165d1ab4c8b5fee5252f1f9bb26707a5aec3b1980e37ea74e82c75c8b7fe5f221a43fc371bac7f53d7e0384c839b741ab40471c1d710f19a9197d08ec7dcf7668dfb4eeae2cd7d4fc0dcf716cc7d37a7e4be276259d3ad9aaca989c7ace9248cd06d1a42bf7b24743226fc768df09e5dbd093f05137e872e6e3d0a3f158bdb3bb1b8bd2ba5b83d0d4b0e77c7cb9af2d29c359d8e69714ffcac69741ab3a633301dee8d973515a4316b3a13d3e0be4459d32e223c6feb1d3661ee7bbfc67d5b76f3e6be6761eefb00e6be0fa6e4be6763c8f8a6f37eaa63e760741ed6d039cd239d73313a8f60741e4d89ce7998118f698cf8daa311e763e81ff789fe024ceb27345a4fefee4deb0b31f44f62e89f4a09fd4598114f6b8cf8c4a3111763c29fd1086fdac39bf04b30e1cf6a846779147e2986ff390cfff329e1bf0c734ebee93d5aace5a7b958bb1cd3e2459d16d1622d2f8dc5da15980e2fe97450c5da9834166b57621abcacd3a0158b166b33c48057b5c79eaaab30077e45e3c03f7b74e0ab31077e1573e0d75272e06b30235ed71851d1d39b11d762c2dfd0087fc6a3f0ebb0e8e66715f82917aec7b47e4ba3f5a45edeb4be0113feb64678a947e1376248ded1a5003e8612bf9f3eb627d75f9fbddd6f6a762ffd4d5804bdab89a03a8f11743326fc3d8df04d1e85dfa213ceb38cf7b12ce38394b28ccd98111fea08f5f666c4ad98f08f34c277f528fc369d70de0dfc713259469c6ee0db358273c4de418d33461fbbf3527ac7e83fd1f1d28ed17fca128dd1fbd7151ba3bf03f3a5cf74a9cda32fdda913ce8772f9917cbe8672efc2247fee57f2dd58f9f04532fe1f27d3bc47e7ff6287ab958de2ff7ef6448beff95f26edf95f09cf1f11c7f3fdeddca68f897b31e7f9daaff3dc8739cf373e9de77e2c997eab49a6dff7f1964c1fc0b4e6a7eac65489f8361c534473a84c2c4bd12d68ca14d5a54c8f73cf1ec4f4f85ea707df53c59bfc8730f93ff88c9d87b1d8f951133babfb7a8b9d4730ad7fc26287a791d5b28aa8e2a3ac61bf8f5467063e8a19f9b3c6c88a7ede8c7c0c33f2179d913c05aa7906767dd6394dd38b598f6321ffaa0b995715ed5935390d7bc8e7346c8a33df4a10a5cceb6c8e27300d7ed369d043abc15cf1579dd841c0aef5a7b66eec494c97df75baf4495297d84dc6bde8f414e6787f681cefb8adbc39ded398c17ffacc139ec104ffe553f0b398e0bf7d0a7e4e279873fe47c3f95a8f9c9fc784ffab11beb6bf37e12f6048fef389e4459d609efbf01dbdfc34865ed209b6372347daa1199154daa12f63d89b4462b1cf1ee00dfb2b98114d31239aa564c4ab9811cd35461ce5d188d730e12d34c2370ff426fc75cc315b4634d9295f8bb890c16d624a451d5b65e4596cb828f0aae4bfce550899e2ce2e7e4689ed2f6a44a96f67b9b5ac426c9051cbe03270bb53892f685eebaa19a8707867925dc4ae6cc8ce3345665eea716adf1b188b563a167cdf24b8d79c5dcb8c16b0d125d9eb8586150c4e9a5d2d8aa0cc8412f2acafbdaedc78137398d61a8769ead161dec292541b2c49b54d2949bd8d19d14e6344964723dec162babd2ea6f9ec7d7d17e912d9b9ca57bef0d685bd4551bc38cd8afb76b8988e6a77ab46fdda9902aa8567a82e54e7bb3ae157759a54b44268580d3a606dd9d5b275eac5bfded5d1138770457cb64edfc34ab38e3e4bb3f77582f93ca34e96e0016e95e57f31010cc403f80073d7ce1a776d39c89bbb7e8801efe217f84718f0ae3e817f8c01ef9626e09f6049b8bb2e09b71449b85aec9791ca769f9f62a1f5c0425b28da7ba96d2efa1916df3dfdc6f7ffb068e995a668f91c4b07bd35e9e09e21ded2c117582cf4d1c5023f71253a32a60ade6d1b8ad55a4f71f22516765f5dd8edc5776a1779de2d5ec1ec1380ecb36bbc84fc1516723f5dc89cb5ddf1b54efcabf6f1f312e2d798976ca5f192e3bfb9f5c2df1ebb713b2f5ef20de6e0fdfd3af8b71ac939e2f484600ff8b557bea6765c52668483884d8bfa1eea0111ec24def83a607dcfdfe9088ad309569112c4facd1733bbf5c035cf4ff338c0c0886673ce4c6e2bdfcb9c46232e1efc836c9d3948c42a9d1658ec7faf8bfd01fce15e8d12fb3b5b6114cb6cb44a16a5e9f581c13a1f10a749c43bb7271d7ab93c219e3b0c89243a48281d0a614ef10356a80fd514ea7764792bd47fc48ab761bae2ad0d52b07a2be07ec2c2ccd285c925282ff712cacfbab4244e1309e674cf7807114627cb793d717178c4ebfeef2322ee533e53d50c73d05f74f1c9cbac919ac49d9ba94b76ee78e5193012daafbad0781e394a17dac0d8d0ac7f0eda3e36c8217890bfe982e4d59aadb1ba825bf8005cf8ef586ac8d6a506adf438a9e00f4c7a8e4e3a7f6157da7352d875ef4f2ca3cad564549372bc65547f61c2476b846ff228fc6f8c525e320df13848fec104e7fb14fc2f86a34083633f8f38fed309e7dd0d6392d1fa505c308b2038c6eabc913b7b8e272a114cfe389d7c7e7843ecf4cc79a26f4e6ded197de36d0a6406a6c978bc8cabf1ec054db05026608d53dd960f5e426caa09316730f717bee766502dbc22eb8eefcbe4bd753731c207149c6044479ab6ecdc46949ddd622c8b173e564a36d3c515bf9d14e15d284e95769877708b73fb3e9b111335cdf0a8698e39c3b63a67e0670af0b9fbf6ece20aebaf3a6954b947576f8185bb1dd62fa40fb74a0e1f7909bba52e6ceee7db6bb2c1d963bd6583ad30c326eb0ce38b69a78891092f06b4c6c298a20b83fb249fd2bdc10a699547546db090a66279854a9fa97664b5c522679a26720ac6798b9c769839d375e6f06df563874e6b85cfadb5aeabe5fca0f5a2b5b65a0ccd54340c04aa2ccc1ed6e159184ff8a5a2a02811033da5b2b8b0fb3a7345ff6626dbaea1e7d35b6f677b5d263b24e84c769a18ceaa4921939d11e16d666714642359ec4c248b8d173a96c576d0711387252e0b909bfd9ded0f85e29409ee53f3c520a1dd33509b02d3599e1b7eb305d9413196a7aa1f46bda32e258a9e02bfddc99d30c93bf895dc1993bca35fc95d7492793e3637e2ffbcd2ae58a637cf6773a21bc66327bf3cba6392e7fb95dc0393bcc0afe49e98e49dfd4aee85495ee857726f4c72a15fc97d30a72bf2e9747d319517f955b99f4e32aff12e4e46e538e71c6f85a9bc8b5f95fb639477f5493913537937bf2a0fc024efee57f2404cf212bf9207619297fa953c18f3b93d7cfadc104ce53dfdaa3c14f3b9653e7d6e182678b94fc15998e0629f8287eb04f3d5572b9211fc152e7804561f2849437d6024e61aa57e5d63944e32ffbe2c191e71a6266d8d815ee9137436e61aab7cba460e2678b54fc1b958ec95fb8dbdd158ecede533f6f2b0d85be333f6f231c8153e211760822b7d0a1e83c55e95dfd81b8bc55eb5cfd81b87c5de5a9fb1371e83bcb74fc81330c1353e054fc462afd66fec6da3eb8418c61a6d0e876e9b87f4cee1a84b262eb2716293b0b8a8f71b17dbea24f35569eb9251f9445cf076985faef7e997db638237f8143c194bfb1b7da6fd2958ecede337f6a6622cf6f5c9621a26783f9f82a76382f7f729780606f900bf9067622a1fe853e55998e0837c0a9e8d35b40ef6d9d09a83697c884f8d77c0343ed4a7c63b621a1fe653e3b998c687fbd4781e26f8089f8277c2501ce913c57c4ce3a37c6abc006b191e9d8696e1ce188e637ce25888e138d6278e422c8b3bce6f165784813e3e0da017616a9fe057edc598da27a641ed5d30b54ff2abf6ae98e493fd4ade0d03724a1a80ec8ea97daa5fb59760924ff32b792996c84ff799c8f7c0049fe153f09e98e0337d0a5e8609dee453f0724cf0593e05176382cff6297805d67d708ecfee83129d60fefdb9c9088e332db05427984f203e2f423081b84cd740cf62464c0c2fb27ec1f76bacf23c31fc7c0daa9ce1dcaa4c96dcd4ef7861771292a373b5b095121744bc4c368f172236db6025e68417fa74c2553ac103acdb8b744ea89f57aef3c438f3ca57eb82e49e78b12e481e999a78708777011e5e3956805e928602742f4cf8a56910be062b432ff35b8656606a5f9e06b52b31e157a4417815c6e44abf4caab1a2e92a9f45d35a4ce5abfdaabc3746fa9a3490aec1d2e9b534e9b456171ed7ef3aebc5008d315a83e2ac00aec302b83e4d01d46301dc90a600d6619e74a35f4f5a8f49bec9afe40d988fde9c061fdd88f9e82d343eba0f16c39bd314c3fb62b46e4d03adfd30e1b7a541f8fe5854dc4e131507605171479aa2e240ac3cb8d367797010160d77a5211a0ec684df9d06e18760c2ef4983f043b12ce85ebf59d061986bde47e39a8763ae797f9a5cf3082c8007d214c091585c3ce8372e8ec2547f284daa1f8d45f6c334917d0c96261e49439a3816a3f5689a681d87d17a8c86d6f158788fd384770216de1334e19da80b8f2f9a7e32e27fd1f44998373c95266f3819d3fee934687f0aa6fd3369d2fe542c8067d314c069189ee7d280e774cc539fa7f1d433b0f05ea009ef4cac0beb459f5d589b7482793fea4b3a433299bf7ed4b330335ef669c6d99819af5098710e66c6ab3ecd385727788075fb9ace8cb474289e87d9f2ba4f5bcec76c7983cc960bb054f9264daabc100bef2d9af02ec22a966ffbad585eac93ccd701be1389b386d01dc0085cf54bb000de4d530097626cdef3cbe6329d643e23f0fd6452489c198197636de40f7cb691afc0587ce897c59598ca1ff954f92a9d603ed7f0e36404c7996b783526f8139f82afc1207fea17f2b518e4cf7c42be0e6b6dfd2f0dadadeb311e9ffbe57103c6e30b9f3c6ec452f6973e53f64d3ac17cc6d357c9088e33e3e9660cf2d77e21df8241fec627e4cd188b6f7db2b8552338871ffc1459c3cc38fd6d891c7e4fdfbcf9ef74ccb4c3eadf47f8b03adfaf9d565f6cd0fd365db4f3d8f9219968ff1e2fe86fd709e6b73f466237c551ffc504d00cf7ab3bb05cf2a734e4927762c27f4e83f0bbb0dce117bfb9c3dd3ac9fcfb5f9389cd381384eed1091e6cddfe968ce06d7037b91713fcbb4fc1f76190fff00bf97eac29f6a7cfa6d80398ca7ff955f9412c31fe9da6c4f8902e007ec4e73fc930f91417fc3006fb5f9fb01fc10ad2ff7c16a48f621ab30c7f1a3fa613ccb39948467abafe1ec7fc2f23c3a7ff3d813169e293c9931893a66962f214d677d02c83a4efe0698c54739fa49ec122b785dfc87d162b2b5b66f82f2b9fc378b4f2c9e379cc735aa7c9735ec03ca70d8de7bc8819d4364d06bd8405d02e4d01bc8c65c9ed9389eb3859f22b98ef77f0ebfbafea1a377c77f9c822d638fb92a9c681b73dc83aea086b1b2c9d327883a5578c75c9e88035425ec37290ce69c8415ec722bf8bdfc87f0353bb6b1ad47e1313de2d0dc2dfc2525af70ccd168bd3999af46d4fe156077eeec4f891abeb4504af91519f2db6009d63bd9f6fbda9122ecd9fe8dbaaba15ecfc6be85adcf1ab997d4a98b7e37edec6aceca1b3f288062b1759ad669ee8ec045a29fe8eee8dcfcf23b313e89c862f67349cb1ebdc8ab246f228146f4b2d89f5c22e2ed7492f2a817fef4d0f4c5211e3db2cae126f9d4c616275f35e6cc9f1ba51ec3b18e99e983fc1106d9bf2addfd8b4aaad4c7199e51b3522ce6d6b8be4b9c66e6da3bfc59fa7cb9fdec5aceca5b3723b979590b96de74c116395c246b796ce18826fe2a515f82b2f96bd8759d65b67d9f649c59fbd636e39535b4ffa8fb9e81b2fb6bd8fd9d64767db58976df344ecac9696f1bb0d8d66c90798257d75961c17707e16fd0d3fb5919f1eb291f1cd78a38741d77af072c80eb7829725f5a29a01733d5ec14a5fdef62146bd9f8efa94a4d2c65c41a3d6885ced23ccbead74f6cd25f42afe746f110cb7caae0e978ba0cbd93e2c7ae45f3a62f563cceafe3aabb78d6b35aee942618b7d7aa96da32a8df9d3124928365da41e9b9f607665eaecdacd73cdae50bc71d6ed7412ec670b1af2811aab3ce04d1d3f35c154e2f9538cc7001d8f1d0329b3a94bf3cf309b0762f5146f3ea07c989f34512204c178f6ea115e2cfb1f66d9209d651311cb1689f45921eb2676535bb55a16cb545c1a131b346d94cf318b06eb2c9a4998fbaa58b58f6bb08fd38ca590baa55f60960ed1593a896123a2ba9cc26941b178665bc799cc16b15c235a43255689bb318d567d89593534993681335c5843582462a1c6fa96a7c355714a3fa78cf459f61566d9309d65d312e69cc9b50af03c345e9b35d59cf26bccc62c9d8db3509fe435de15d647ca56fb0c9ee8896bf1f312bdcc749784df60b60ed7d95a46dc7aa8b34a821a41c96e1d2c16de5ede90f3a4a73d9c0aa76f314e23749c16355a2b2b3e21ff1cbec3388cd47198ea316d989022bec72c1ca5b3708e470b77111e5d85c44863d8fb0366efd63a7b17127a766d0a758d7410f81123909dae3a889db74d0135107aab7ec2accac17a28bc5a35537c111b43ee3c2779b95eecfb19b32f5767df363e6a8e75a234e2c7e4ac94ed3cdcaaa2986fbdd8f40b66d3686f71e6ce7ba688fe049ed212b552684b8f5f31fbf230fbbcb4196d5b67c97a44f42d1ff1885f3b4c57cdf137ccbe7c9d7d8359fc5e41be5d128596bf635a16c4efdbf3120b8529c502a5effd81593d4667f5d668da5227e339f388950dfdd9bc3cacd7d6c552ebdfff13d37bac4eef09095b5c73c4d820ef7dacb0f2bc1acbb64a7114586cfb375e0ca4de82fc0bb3671c56838c9f46786b7881a855d56acad564c612786d64651a2dfc1bb3707c326d64fdd8c01ce17bbc1fbc58f651c5c65790e303ff60364ec07aa892e90748c6cad4728cd42dfd17b374a2ced2d949c5a67ba4c74e87caeec68cd7ff306bb7d159bb6bc278a5ed19a7ee33e79373b53426e968ec4ed83652b59ad47b47705a5e88443022db6273029cdb3caaad2063b784b4ede4fa24ee1b5b96b4542fb66560b66d87b528e26b3197950bfd551dbc54b69592d53d1db59e26984ddbeb6c1ae5d12655fb49779da729a6f5649dd6e33c6abd5048ac16e96b4a5c9dd31103cd305ba6a43e536086413581e6987d539369d325eb614a76fcb8a2c8155a60f64dd3d997e339c753164e1769489f93c3775e746f89e93e3d995a1a0c157a5fa1786af78ad83d5aba311ba73df89bf458da0ab3740696cfe1f3b9a658e1c7cebea0d0ba35a6f5cc64664862f193681e516a31937a0ed106b37296ceca9d92b4523f13347e4d3a68cbdb6296cf4ea5adeb25f50535fbb01d66e19c6466d224ebc166c56a7bcce61d743617b86c9e26e2cbaedbd7819ebe78ba16ca5a7c3af39e0e98153b623360532bd79ce3ddf16544bff5624947cc92b93a4bf25cf111dbef1ff5b4d8528066be4f27cc82799805a9c585ddd3552672ce2ad1ca4c57bbb03366c14e7ed244b27e1f2fbd78b1a20b66c57c9d15450ceb2356f589950d7daeca3ade473957fcb536412a4fe54d7a2874c5282cd0512846292c967ec4d3737ec32878d4f6647e95ec57f1982423c10b9f6e189f9d757caa503e3b8b5cc6aebf54c9725c8d9e5424e4a4fbb5b76fbd33d3c9f142ae3b466e21365353af47ecee278d3562db03b3a8109b1794785647323de2c9cc0df13e7f24f512ac27c6a148c76184070e2a4eabe4f85abafa767b611a2fd2693c9425eae98ece7f2e134f79fe9f9e3a766f4cd3c5586f58b29eeed47cade84f8ece23a3482f7d305b7649a6c58b8d1b25ea0f0b7acca82f66e5ae58abc85b3e678f06c4be8dadaf16317bd7003c3e63a54c11b5703e6eefc5e67e98cdbbe96c1ee28ad96898d4a9692b4ccfddbdb616dc3acf923a27dbe24eb5aedd1fb36089ce82a50dad85c61995821e986cca53bff1422513a3b2349939f72a442fb94ad4322cc5a52737198059b64732bdb85e6b16fe475b53b7742066e99ec9a44dac1569fbf85856e0a9351ffd95170b0661162c4b7eb48787e97db4c7b60f7b9eae181a8cd9b79caaef2b5e1ca5daf73504b3a238fefaaa64fb5b540ae3e52a8fb5121173897a302846af866296aec0d6b2a4def7ded8fdb2c3305b4bb0798df1eb968532f662636e9ab0b8264e8916fded7c31bbce6e2bc75feb9e5abd2b0bb3ba34993c531f7e6af599c42db116d6ff2211becdce0c21c59ebb572d7ec36baf397c602e92db90deb21b6a22d98e5a4bf4390fbfd2f224ee31450d758ee8f1a29884b20c7bf334f1dfb00807ab36d88aac7431b27f5921249780b8cc1684ec15cf3c8d67378c5dbb8f80c5acd0d5beb241fd0b5a97d8a63d900d96229116d22225cb22cd27b86e7196aee4b1ba958cd58c9c6c6ee3c814bd29b116ab78684df43ed423862c4c1d3add6d013bc95e8e08df3b7999086681c86cf1ed0412860c4b505dc85b0b01aade9a50dc229005e8c4f512ee664f77aa61f640de3b96cc16cd3272798caca6c4c6b7209b2eda236b2d70f64a39952363006b438190efe1a010965322ec68dda8e6f76cc627fb178a0a488d10586ab158130a6037b68c02db8b125857915497b15c165dc31666701ddb44c1ada104d759038e0be443937c4a7fbd785a1a0a68cb59145a05b5b73993e74ceb5f7bbbc8d2863543b6d785015c56db28b84a4a70dd457db436e962210cf04e0385421525bc3620a9ce77f40c860153dfbe514cd594985a014cd1c92c61407454f728a2b594889a0b44b5a1caa39ab68bc2d99b124e4feb667e439d5f0dc8d98b68168a4cbf5e0cbdf36c7e81ec280903c0cd2001d650026c09122057938f518601d00b9da2806aa973a8f9621028da85178e1ad67ec087ea82f221b55f4718009ddb250aa89e12500b00c856210c789e1818c5b38e120f3f88203afb7583b0babea15ac9e732978a4ae74291004b4572acb0020c0344fe9f82b89e12223fe50fc2e33d607c9bb6b286c3ab4a435e77ef0afac43650a26c27b37ce56f1b65856291685e8701d52690f56f0caa71cddb8a70da836a2f86a9e2fa7b8b28b87da81bd7101cdceb688a686ef3119fe8ae4e6180b71fe807db97125e5b509e46b7eeb1370c0b03a8cda0f2ba1f75d7f43c91fcd6b876a29d6e7d5e23420a03303e594201db3fd8ce42e744aed290e56715a04fff00faae695e95982e820e7345e38966516807527bdb0c31a0562f028f6e051ddd1abcd6aac3955be18501dc2700dc4194e0da83641ad601103e6b43c13a987eb8cd1e19af1662c2dd0e9804bcec104a701d98b36fcc9e8fb1567422da1d4161c0b5342b8aebd0a0462775b85465360cd0960f89423b8cba037ba19530a7b1e44fee0803c0a34443aa45339770f764ebd4275079a38e4ff5eac0ec7e93b5e2699dace339a67ef13d4a8cd3fc7038752b2be53eb4ac84656956d2d30eb23c0f1967a538ff282ba9964d96cf4eb12c0f93cab23c15b35949d797b33c5512b352ca4fb23c75e364796a246525353d2acbd39ca02ccfbd273a9df15920593163ae5971bb1cb2b4a36859da71912c64c83b2bce8c812c64102a2b414f65564ac3a3599ae18aaca40bf7ac246a4dd159cdfad9c8b97c56f311ffc7271ce7f209c7477208fc9851fe9f5d1b398aba36c2e3ce9e5fce4b88f87b5f8fb6ea042e1dfac6e8e03cb157d53a74dab472d44bda2763602a7593216012d0d126e1cc0b25ce5d00ce634cc2991f4a9c47029cc79a84b32094381f07388fa3c4b9950667f23b978ea343cb4fbb27417b1c407b3cf530c63259dc3811db551afe1919be16549ef9378be23b218884be0a4dea50fd656c0c1b4b87b32d15ceeb01ce134dc259104a9c9b00ce934cc2392e94387f00384f3609e7d850e27c0ae03cc5249ca343897321c079aa4938f343897303c0799a4938f34289b30ce03c9d7a5256bc169133a18fa143d9890ae59da0ca7e0625ca6e126589ec8a73ef8763ab6eefb5924b07b21915c86600e499d4f37a39c80aeba30a712d16c2e6886eee322bafc17d94102c99871e0cc06e0a026c2e5b96f4d807ffbe467c1bbe8e90e920173d8b126c7f060700921f0c0c33dc8100eed98d59444171bc900a5fb7481f90019c13c4f49eb1c1f729f5a682771bf0c37329e1f548e087ce1dab465be53c19cc8154305f029e789e493009cb7532988f0198e79b0493308f2483f9248079814930f34208f37900f3429360120eb791c17c11c0bc2888d27bfc163422f40228bd2f0ec213b1d6b9b316493a804106f32700f3129360120ef592c1fc1dc0bcd4249884f54a32985f019897990493b047930ce68f00e6e526c124ac0a91c1fc02c0bcc2249884552132985f0298579a0493b0f94806f31300f32a936086b18bed5300f36a93608e0f21cc3f00cc6b4c823921843019683e5edbb8fde8b628bb2d4e98630ea09a9d793240791d25ca11cc3d42a916282d10a3951b191ff1714e869d2a4631cbe433f8dd144bab725ae45da8bcf72680fc7a4ae4ad05f2d562cd8fbd0669958017be81b3b620f7bca13113bcf3d81442ef3b940a6509f0be1b29510e8b49f0f6948499b2e3adcc4ade65c23bf9087ab5586316afa80a637d744700fba620fc36b9523f8c28fb832ce0e6a05768247b662329da13a9d06e0bbcf496c6f5d2b057a77e035ebab9310b2ae7285118c788f6015e792b35ca2962e17fb55ceecc0f50e23390aae416086a11b8bdb43e7cd5a7a6c02b6f0b627397d1d6ff2b65e0c5a2d6c99f8679d0ed5080f0f620108edbe210de0d10de417fc8933db530ba43813d473cecf333ef0410ef3469dd2fe99216329c6340217397493849d76090e15c0270de6d124ed215426438af0038ef310927e95c0f329caf039cf79abbc89f7048986c917f0d407b5f63ce8e7376d0914e8225eba27b0ec0bcdf9c956c847e49b64ee81080f28160369fc80d7eaa21598ef9218be27bd09c052b611cb32c009ef8501028e18ab5b956be384beeefb6d2fad18620da4064283702af7c98beb0814367cbac529aa39b2af6795b2345cdb4ae659688982da543b016a81d80f9481095a23ab10b656d4395486d82a7aeba5121d2c2870cedb900eda341548a925de04f987f922defdf0ec07ccc249884b391c8606e03603e6e124cc2b9c56430c700984f98049370d63b19cc9100e69326c1245c8f4106732280f9944930c3b8bfcc7800f369936012ce2d26833904c07cc6249884fd456430fb0098cf9a049370da0119cc1100e67326c1246c0191c11c0a603e4f093393c5ef714f3c9398b07c279b49bc10f429bdd0988b0adce34384b928595fe770e0ab2f9a0493b07c2783990760be1444bf3befed5c279613f0934c029a2a4386af17c0f73225be5e005fec046d2e2cbaa55998e71e3d0d80be12d4f1665bd6f4ad4300c257834038768b433809207c2da85cd179464f98e7bebd0bf0bd6e766d92b05398ac36b919d426df08a2d0512b83f80fb7c44d4a0f0240df0c6ac26b74c8178e5a92277ab241b48341a27fcb9c255461dc04655b80f2ed20a613c2e2c756d77dc85b988ba36f00ce77824ade1c5e2d2b67703bdc00aa4483a8260e7e0720be1bc4f40398bce3cfc98c1ebb485afc8ca042fb3340fb5e508dc84467788639c14f0040df0f72af04ee85752cba07369c2d9cfcbc62421f269b577c21a8427d60d21919634239b87115f0e00f4dc249ba771719ce9300ce8f4cc2392e9438df06383f3609e7d850e2bc1fe0fcc4249ca47b1693e1dc11e0fcd4249ca407d892e1ac01383f330927e9f1ca6438f70438ff475dd9e775d005a2215ac7f0935a160ad5eaade78495fdf954400b00d0cf83d8a2bc110ead25db51a60ac0fb82125e1f96ec663dce8581841310bfa2827a35680b7d692254c23e5132a85701a85f99089570123719d4c900ead72642252ce1c9a08e0350bf31112ae1044532a87900eab72642259cfc4506756b00f53b13a112f68492411d0ea07e6feee61584fe4ad6c9bc1aa0fd81126d3ec3c6a0d4e2d769d6bf95d6fff8dfd111d39562b531577627c6874ed68b20d6581ebe4e60afb318f1c6821a7c21f4ef3154fecddd4e45c28f411c3caa065714037bacaad20a650a8bb79762188fd53b0a78f84f416efa5bdee0c3d1517fd53ba0feded2f6003d11c0fed99c4d33c2783a573640f98bb99b1310ae1d219b57f512c86f7f35e7400ad26d04c9fc743f00f337936086f114b9a301ccdf4d8219c653e4d603987f9804338c1328f70130ff340966184f91db0bc0fccb2498613c456e0d80f9b74930c378d4c40200f31f936086f114b99d01cc7f4d8219c653e48e0130ff3309661877643c16c0644d8c5e4e16c663cefa81b67b84126f3b89d7dedcd2eed2b3659733c21d199b518163c02f3328c1793bec8cb02949b693f2a3c0079b50a2f43e680257971096eb64ab4b2e01689b360eda643ae7c2b86fe85880b619255a357e9a689d5e71c3e0477817ef7c0672d5e69450e16aa87962586e8d6bd86ebaf5b31a11629881f605405b346631e51c9e23eca4231b9e3b0024f8969428dbc7ad2ad5d2a16b4d852e037861ab20bc106b11857f1bc1ee00656b4a946a779202b625edd95408f0b509ba42a49ff564cf26592b3cd69e2742ea999f52a17d08e48f6d29d17a3ff42c8c9bb30d0438db9984332f94380b01cef626e1cc0f25cef50067079370168412e77d006747b3ba40e0bc51c20e64b279a32f00b49d28d10e62b11b6ccc601b18ef9aab676a46dd7cebe77c1bad1ab1f2ae98d967175704d3cc24db44ab1ba856750e223b487e0788309eaf700dc0d9c5249c05a1c47932c0d9d5249ce34289f30380b39b4938c78612e7c3006777937092cea523c33917e0ec6112cefc50e2ac03387b9a84332f943897019cbd2871f665b13da1fafea7c5cc1e3ce6a2f269fb9ec83628fc0560eddd98c31ccefc9370349eac2aff1a682ff5096a08ae50b47bea195fd6c5b7195e2c772a29dd0276205d0e7cb32f25d0d602a83a20c056a28c72720dd9505b6780ac5f632667288e744302b2f973434172de8a12a59a8ca8cef8b0b71bb2077cd547613f1aa014f8657f4a981d189cf311f5ce30c3db1ec0cb0ca28f33b5658284b54ab2b9489702b40382f0cb71c1fb25d9b8e5ed00de4073667212ce89239bc97926286c0605e1871382f743b244fc22f0c3c1e6f821e1980f991f3e0dfc70087da567358bdd46bdd06252c24aa4422bc50e8b7c94277ced9736c02f879a3b879870d8972cc98f067e3aac31e7c539db39615ca83a0a7869961913bb8a44515425923f1757498b966c9fd01b81970e37670e31618227ebd8a803284798346d8674712059d13405e01c6912cebc50e25c0b708e3209677e2871de0c706e1dc4584fe222694b18eb290558b383e8d14cae73382f946bd52f0730734c8219c6b5ead70298b926c10ce36e5dd500e66893608671b7ae0301cc3c93608671b7aee50066be4930c3b85b573180596012cc307682ec09608e3109661847ce970198634d8219c6ddba960298e34c8219c6ddbaf60030c79bd44e271d3d276ba78f043827988493b47a448673578073a2493849276093e1bc08e0dcc6249ca46b81c8703e03704e3277a525215ab29596fb03b4db52a2ed2cd18eb1fe5fa9da1162cd65d827189ecfa208b70b62b16ae22ee369ccbd3dc5145623006fa4ed40fe9eca4f6f037ebabd398b0508933cd962813b00cac99428fb31e79125657261f57ca69653e368097d940cec6e00ec144ab0992eb06af9402183b399e2b5a1c2d81c9d05f04e35270b201cf420f3d43701ca698d398729b0d3e3c8a62dfe074affe9942807089473ac8f160a607c67b975f2e7d184bfccaa8d72e07ce7e312eb6ffbfd4ceb5a6689255c574456f96f0500cf30675d511873d0ae20d9cfa444d935014a6529e984b06da8eaa2f7028cb38228e7b1e668e2edcd094797c8b6379f07f0ce3677cd1161b94f3677f92d9097cea144db46a08d3d00927023d44c2a689d00b41d82c835b1ca5234d7242c7cc872cda62059ef4889919f5ab040f67baac5ac734472e67965f82a401d81ffcd6ddc0a902d8a7c2a37d901a2a7011f9cd798ed9ef01f7cfb35f0ca9d82c815731b70968a1e4f7b6bbeb0ef6d7c17c0389f7a8c9d039b2e022e63f6527ffee93e0c9e1dccdff2756f84bb762ca4823916c05c60ce6a4cc29c92ac5b6325c829770e02656e9c7ecc708f0f3d03bc726110436c055bdc105b39405818c49005f7c619a2e4ae174accb57e5222f2cbf96cbd1854abb1def166e35a16e67d8ec601b045e62c13246c5b9355884e0539e62273d6058771e6fb0ec02b1707b1254581cb37c35ca3ac07f076a184671f36c24f5aab03354835f0c073cc5521ecede90af0ed6a4e8e4838b39d2c47ac0739e26e41cc824b761bd2f1945572b26d48db029cbb9b84734c28715e0c12fa129370929e864186f3488073a94938c78512e76b00e71e26e11c1b4a9cb7029c7b9a8493f49c2b329cb300ce6526e1243d98890ce75a8073b9493849975a91e15c0a7016d3b78096895d39b69ce31667007c2b4c5abc42ba373b19ce89a0da5e62124ed25d11c870ae01384b4dc2991f4a9cd7009c6594385b0a0165563e698f3d72c964b8c8264e370779e34a7357a2112edd275b89b61178e22a4ab4c3586cffb973e2df34c6974f558abff92850bd103943f82e37ab48500b6026f00e547e3c1af8f1ea20aa48a3457d32e03e76b29ecd8f01be727396a21056d6c972d4fd40b2df2b88d1713eb43b8bf1e15a7b886215b357a2857710b71678e31a73564884716bbd7ce08d159428f9e1ab0b447152cad41a1e6c5216e1a469b264dd12f864a5b993f8c3b801f959006d5510dbf22437d1203f943b163e0960569b04338cf3365e0730d79a04338c3b163e0e60ee6d12cc30ee58f80480596312cc30ee58f80880596b12cc30ee58f81880596712cc302e707e00c0ac37096618772c7c10c05c6712cc30362cdf0030d79b04338c7bb6bf03606e307b013e619b886c01fe7cd009b291ba132471efe658313d9bb0386a4696830290fb5082ecc4a27d9b95d6c30d962201aefb21eb677f1f24f47de937d7717aa2dd1dcc7b8aaad80e620c686ddcc932841e4a3655a60900bc9f398b56c2d85ecf0528f7376912d718ca329ecc336f06380f3009674128715e00701e6812ce71a1c4f92fc079904938c78612e7cb00e7c126e124dde6890ce7ee00e72126e1246d6e92e13c1ce03cd4249ca427ae91e15c0d701e468993dfa88da0c237ccdb01603adc24af1b43396841e67597009c479884b32094388f07388f3409e7b850e27c13e03cca249c634389f30e80f36893708e0e25ced900e73126e1241d3f27c3b937c079ac4938490f5024c3b907c0791c254e7564b73a768173a8677cfcc77dd8827b6d1061d730d9ace2be60f0e2784aac435d5857b0d8999ac9cfe924444d56d5bf1ba03e218839f0e3d996b643dc7d2013383188f9c6ca5b6b85fff12c60a68457a61dc50cefb13645c03b4f3267794118a7216601942707319ea9bc74ad5041e593b542757e04d3862dcc578f01804f3177d901e1ac10b242ea1690c39e1ac4ac905c91bbf2c934f69ae122c922ec931afe07409e16c4ee86a35db96a00f0c8bc70328077bad953bf086723934dfdda01e49f67346659efdc419b703ec8a15428cf0128cf0ca2950f77d0d6153be1aee03f0b12fe264a9c835d55a70a065709ebcf5b9d257f1cd87176d95498b7015e7b1625e691cc5d43ad66b52c7ab043743b8b3ce665eb0b42e8645b5f9c0ea09f1d2474f7e6bdff97a09f01a09f4309bdbf0b7aeca958535d855ff84f873916c03db731eb114e94848b6ac9509e04509e47897244d239f2969e355c00909f6fceace8302ed5d90954db2e086270066604facada625941e3a2f219e9d6ea83a83cf46ce0a11706d10c5699026f5494ba762ed9f2c6be3a01bc1799b4c920e9fc01329c8300ce8b4dc2493ae04d867311c07989493849a76390e13c14e0bcd4249ca43303c9703e00705e16c4100cd6431bbf5e4a380443562f3d1aa0bddca4894363285b566413876e60519c579884b3209438cf0138af3409e7b850e2fc13e0bcca249c634389f33980f36a937092ee6a4f86b308e0bcc6249ca43be791e1dc1fe0bcd6249ca4870490e15c09705ed798ddcfce844e58e7249b51f52ca8735e4f8932ba53f896345fe523e089370431d98707bc528e33d9b2abe427e1eb3c8e00783736fe46442a19872f118f0089f826534086717e691700f2665340124e342303b91880bcc5149084dd6d64201700909b4d014938379f0ce45e00e4ada680249cf84806b21c80bccd149084ad1832909500e4eda6800c631ba60280bcc3149084b339c8406e0020ef340524e176c06420f70620ef32674d5d1877a3ef0f50de4d89b207f332596b4c288f43690d60de6312cc301e87d206c0bcd7249861dc5eb50580799f4930c3b80eb9158079bf4930c358003501301f300966188f43690e603e6812cc301e871201301f320966188f43c900301f360966188f436907603e423d2c163db8798e045a6efd984f09e43f0bdf98229fbaa9e03d6ace226dc2e2866c91f659c00f1fa344d98fb9f70bd12f4e29623562f62f9fc3c08555d20e949d4805b61af8e8e39460bbb0e8ea77f772d680d6bc0fa19aeffb3d80f80425c441ccbde6ddde4620baa555a1005b93a0300a6325690ec8029e0c6286462e8bae010ec843075079e8b7c0439f0a72ef45db1bf9ae0cbc549faeed1e0eefc151b7039f7cda9c05a861acb667010f7d26e8e528c997f18468c9caf8cb80973e6bce22ff30ee97500b503e17643e5a6e29b1d87a596111716f5c19d86e3664d5fbfb01d6e78328dbc7b8fc34cc3b2e5d0772ce17cc5cba4f986b922ddddf047cf2c520fa91921bfa1d1dca7ea49d00cc974c8219c6bd3a7606305f3609661847d2a70398af9804338c23e93301cc574d8219c691f4a900e66b26c10ce348fa3400f37593608671247d3b00f30d93608671247d7b00f34d936086b193783c80f9964930c3d8253701c07cdba40d77488b20b20d777201ce774cc299174a9cbb039cef9a84333f94382f0538df330967412871be0270be6feeee5a8468c976d73a0ca0fd20889d0ef8e29575a0ef3d90a16032cf9cc6a2f83e3467cf8d302e8ebe0e78e2479428bb327e4276b13cc5908baab23e5fcd6ac4707039db074ca6099f4736031ef9312546b5c33b9fd9614f495866a95b6ba9532278f0e9875318df30970f6614cb91ca52a6f6eba80b21dc4500ee27e624f7302e067c0324f74f8328d3533bb48c3027259b2a7b21f0d2cfa873d2785eaa2c251d47df86aa6a740ff0d0ff5162ccd460f476ea16618f3cd9a95b7301decfcdcd0008f356b20ce01590017c41897680403b5bf8e742c6a72994c992bf5488529367d78808e07e5c62fd6d8b9f695dcb2cb1a521ac07b40680bf0c2287c5a62a4e131e4b7c04f44caa1cb63dc802be0aa28319d65555c53fda140877ddb427f0c9af8358d5016126ce02c20b762600fb0d25587550399fe455c9b6a483cacf0608bf3567d22c61d94e3669f61490677e67ce2cf930ce569a03bcf27b4a94033da02cb4c2e442ead87ceb2fd50f554b5bc2cfa62ae13b006ffd8112712fe63ec7ad5854f8b7b4855b5702a03f0631b294ec9ed9e3297192ed99dd12e0fcc9249ca47b2f90e1bc08e4a83f9b84b32094388f00387f3109e7b850e27c15e0fcd5249c6343897333c0f99b49384967db91e19c0a70fe6e12cefc50e2ac0038ff3009675e28712e0138ff0ca2132457fc6b5ff9b07221b37b9ac2db8fb40220fccbdc594c613cbbba0c54e3ff36675c3e8c873dec0b50fed398289d6df5302ee0ca0128ff0d2acfb4fb98b8a00d32bf0ca0e3f82b2a84f7803cf3bf2006da38c2b286add3d4ebb0f7bf3f0430b2a6818eb5ebd7b4cf923f086cb7856c2ab4bd01da48b068bd4c6320444b368de15480368312adca3ff3b6b881b7610061134a84d183ec1a617a37d91ca501005fd360f015b82a4561f6be7f00be6694f8d4fc8ee4c62af342395a793980d9dc249861ac9a5f0160b630096618f7563813c06c6912cc30eead701980d9ca249861dc5be17400b3b54930c3b8b7c21900661b936086711ec77100665b936086716f85d300cc7626c10ce3ee72570298ed4d8219c6dde56e04303b50c2cc647ed71011267cb2f6f960d0c3de9112afb74321089b9764bbc63e0c50760aa21f33f9d1c91996a81a2190b48b7804d5e8e4c5006d674ab46a4936cc51f5fdef3b5b8c8a453035e27d35f5d02fd97111bf821cb60b255c354234ba0170a9001be8a91b649313ee0518bb36664eea5ca141d882275ba1713848eedd28518e64ee39efd5d60fa23e199dd591bfc5cf00391e40ef1e2474f7f13bff97a09f00a0f7a084ee7df63c61cb8b6c8edd4d200fee6912ce8250e23c0fe0ec6512ce71a1c4f917c0d9db249c634389f37980b38f493849b7bc20c3b91bc0d9d7249cf9a1c47900c0d9cf249ca47daa643857019c5b51e25447f2e46d41b3482a01bcfe94f0d4326d3e0774baa8d8af650b44f5bc540ae18b10b8c06221006e1458cbc2bc346130409c194472c7127bece6d484ed22329c0340bb6880493849c74ac970ce0038079a849374651c19ce7500e7209370922ed226c37917c0393888de7d88734befdd5f05e00e31192ee1e82919dc7301dca126c3259c7a4606f77c007718255c7fab3d095b5364ddce4f01b45926354ec7508e5791354eaf65519cc34dc2497a580519ce5300ce1126e11c174a9c9f039c234dc2393694381f053847998493f4182a329cf301cead4dc2497a6e1219ce750067b6493849d79290e12c0638732871dacb17ddf34fd47edf73adbb5574f832a9f07501f87229f10d67ee893cbcf3b9d4e2c1e7932a3ba39b1160b3a4a7b01ad1cbbf91b6b5df29836a833650b11f4d09bc1b8b3ff5dc5930d181a4f2dc41c073f34c0119c6dd707a0090f9a6800ce3e95e87019005a68024ec572203990d408e310524e1aa653290270290632941e6ba4af77a74a3167cbf9c69d61795a282c5efb8a90195f5df5375e2dd0acafa7194f8d532b36447a1087b44c9c6a0b60230c79b049370cd1e19cc4c0073824930c3383ada11c09c68124cc26a3d19ccce00e63626c124ac4891c1ec06604e32092661f59e0c667700735b936012d64cc960f60030b733096618cf8eef09606e6f124cc245e264307b0198934d8249b8071919ccde00e6144a98f8817d33ad7fcb997d2e379f15c20587ffc0be5d5914ec544ab07d05583ebc5122a684c36d351aedd053b2cd365a00acd328b166336787499de8e8e07d502bc58ff8a0073f517ead755dcdaa85b726bf176e1877c25d01b28ae994e8bd6dca1ec6cd0a870194332851fadbaf99b0aa45e6a557830c622625da4c8d977adbec88b0c14a96ffce069e3b8b126f17505fa895396d6d434e1bc83e27643efa1ef0d1d941415c2780f165636a5f93402092ed15550220ce69cce2c8b9ed16619e4986f23c90a877a044a9663cc14600567325affa93e59199c0337734c73309c794c83cf309e0997383a828c596e65b6a757e14403b2f082fc5c6f09dd5f9306e4abc3548f03b05d189924a759e701494cc474f0060e79b0a96305f25037b1400bbc054b084590119d82900eccea682256c789281cd0760179a0a96703c9f0c6c0e005b682ad83056b0fa01b045a682251cb322037b2000bbc854b08423ab6460f70560179b0a368c9dd2bb00b0bb980a967020850cec620076574ab0ea6cbc31ac118e1624c37710c0b75b63f6543937dc26cc3bc936dc3e0274a7ec6e4e774a180f7f9907bc724910ddd1c94fd70de3bcfc49c033979a8493741b4d329c5500e71e26e124dde4950ce7f500e79e943813cde673774387f1a8c14700cc6526c10c63affecb00e672936086f1a8c11b00cc62936086f1a8c15b04cc16cd5cc267c6089f260a085e4494b0e826c1d96c16e3eb37ed6d844bacfbb9a2b158c7965b389658fff316037b58ffd33d8f889da067b00d6cad78cae5950ad995d65bae592dcbe5dd8f2bb84334970e91256ab8532ce675d6370b5999087d232b64f626c8f3ad7fd594e17a81244b1c8bb4c07a56cff88c2b1e4295a5c96a56232c766e929c156929389559ed389b00079825755dc7ec95ad7364ddbadcb2b9586852637dd354846317bb599176e04ecdaa99231ad95c0b1e4191482719275c9f79c29662cb06b5059efa550e5f9e1b196bfd6337d7b31b1aead972d56da5bc53cf13cbe431125f5a09c71ed1a7c38ab4f952228b6cf7e7bf5f2966299709a973125a9ad83edc2fdbc689959cd13c2eb664fb4b79bccb68176eda23d2c6fa6b9115f3b6f0322b91d5587f73a5de9e97c19afd3faa7f1ffb41040400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/efda7f544e58615479b5f460e1093c88.asset.meta b/Assets/SerializedUdonPrograms/efda7f544e58615479b5f460e1093c88.asset.meta new file mode 100644 index 0000000..db01c90 --- /dev/null +++ b/Assets/SerializedUdonPrograms/efda7f544e58615479b5f460e1093c88.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cfa390123b81af643a028d5af04897fe +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/f105e1f1c6b2fe14786ff87c06b7adf4.asset b/Assets/SerializedUdonPrograms/f105e1f1c6b2fe14786ff87c06b7adf4.asset new file mode 100644 index 0000000..4c348cb --- /dev/null +++ b/Assets/SerializedUdonPrograms/f105e1f1c6b2fe14786ff87c06b7adf4.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: f105e1f1c6b2fe14786ff87c06b7adf4 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed5c59531b47109e05842410374288cb029bd8f1810438ce6d9bc3871cc00e201ee2a430068189b9228ed8a954e53d4fa9ca6b7e445efd43fc1ff22f92eede5934da9dd9033442104bc5ceee1c3ddd5f1f73ec889a34838f71132e4b6c9e4db11196636b6c97edc0dd14a4dbf0359facfc67ac00e9065c57a0ec264b79b4c4cf55a31bae5978da6707d0f290ad42ba49e50b2c0ff759689b8727cc5d87bf3cd432eaa0518e4db3a76c8e258cb80789256ab4cff30c94cb88c07592bd85d23c31859da4a92801970528d9a7b26d60daaaf79cfd40626d43d92ab429b02da0f9922846fea86174c3cc24c4d35a9ed6f334c6ef7b846794e63e6ff3c6d6ae89d7ef159e310ddbe8f5d9e8fdc59f812b1645fef8bdd8b6999789fdb5d8fa6b16f2316de5e5fdc233f457f3ab8d8ed5ae9dd71f109e31ed10fab6b0e914f23a843c4cdb78bd4bc233f46bfca3e8376eeb37ced3084fbb78794a78c634c1f307856711338b8fa1523e6a16157c74dbf8e8e6691d4f9382cc56da20d4c1b6976d341b85672cbfc24cdbf95ba6f39041def218ec7785edb13419c1c7ccbf5b5b2dbd1d1a49d7e3053f57a9db03709d3d2020f1aa1cf9ec011b676352af4a1a3181ef29baae408d4d223aecece29da30b646e0bbe792124ec43fe238a28181436a16484cd408aad5eb05170f2e7362a4bd0ed1684953c5b84eb1ed17b016c3b6b7a8984e1c3de661e689ad16d1b722c40f7e0798b385ca0eb11719a27eeb3907740b17607a2ed24a46fa837a7ec05b897f5b9c82193f3280f72aa7c33945a6a9a066990fb34f9c1078d9c854610fafa61ee8675698a34bf3b34f1014333c860e0cc721aa30499519237c6d23496cf3b100c2ea35342b97d9b78df61b75d65912383eaee25098a1a3e6c4f657f8bbf7f172a156d9ca569e8edf310cd0d58a477cde8725070172114aacb20a376f80d19fc34f42e54107eb3de26d50bae807a1a994a1560e074660e2a3c83bf4d627b1f6225b2f59acd42b51df8db20861d3acad4f3e9c735c920eac5aa0ae81a19d0914a03ed1d59dc808e1ccb55041a3f7204a30a04bd785021582b43906670afb52298833c730af4804a3769dc2cd2dca567eccd5aaeb8b5401c6769f97348bcb823de702c7311f13465e26a512f678d7cb24b9f7048aee41829593f332aa3a8931845067d17976db76cc885a23611b0a28270484638c2d7007627f8173e0ee25135f17a992937563a183c0567fb914f0c8307831619c0521b69550402affe553a0fcbd08b9dcd94e1648114d7b009df81b4dd75c40f1a46232a8fe9900da3a8e5557858e108aec1808a4f6f0937dc2a0ae2545199e66883e517ad9af35a799b4822bd755af19af4e618ee65fd4c98be861875c4e3d722d429d0e4e1c0c71adddd1270b7a55f62096a6b889335dc65defb093aa552595783cababa64d685aa9f00fa6b80ce21f4bd413c5acbd42096d528eb17634242e26ab45d6827deae261e93992ded0d2d5630e060d92e51c1d96bf0a0831b6137eca626b7b124d958b743386f165476d1a4d24f8f2a1406d04fb38a786f1988b7a888f7958178ab8c388ad32f55969d72524db94d4579e0b494db65de40287d5fe1206edd4d42db5720cc11058e43682f0b60eede81dbdcfea63329728e94340007e348e52c1d3284c954d6b522ac9a90db276ae55bdf0cfa467d8850bfced40b8dd370a9d244a7cc8b501397658cdb9d6848ed4471196174a22b7e08a7d484bb648471741cf643b8554d38a18a831f95210e76abe0b87a4a389232c2b4b7e387b0cb84a3474518dff438263ad336bf156d75842dc377177c76192cf52768b04283295a2e96a8dab9959496950edb41a4ec5549795d26e5b04dca09f0b3022d164c19cdc9e5329ba129e706dcbf72f05a5cd404e1b34fc5e70d199f13363e8b7d06d145b1953abf5c7ae857c977f3e4f2cdd078b00f13ff57c4cf59ca37a092ef964cbe31176fb2dbdc236e737e6510690591e0924a8211990439e538a68a0c592a755aa437157f75caa5c9940a87b40c87ef98358bb2e644e22253b680cd1ed72c2e5de7498a3cc87544b545cd979e9159a245ee265c5f927476b9c5ddfd7259c6a00a918c1fdb9e22594db92c8b58843c7f165c9ee83aa492605426c194afe8a3b2e7b38a409755328ec964fc53a3dd2e50e91a503c24b990ae6ad306eb07e3c3cff68f9b4ff8b5b4257aef166c7bf08a4a07e3321ddcf36567e6f612da97b9a9747a1bf3f2a1307c0d03a7dc0fa86601da8a6f21d3b434cf30d9fa517e20087bdf06acd1b2178f6397f726dd6da63e1ee45c499ef4a4c8c9b621b352e9fc6fa73a4fc584b944162d409ab62a2e9aa49fa056f9c1475693a6cd821b27b4266f2eee606fb5721b0afe76dc24304763311040fda07b6584b027db09f6ecd7eb55d22d22601dab28c34939343633b414f8341a3fe8fa36e20fcb667d273b32e1f493168a4c6fe8956c81e8add9fd86b63daa8df34f45bbbfe6db768ae1581e4633188e3ffb9f47ca0ca2f93982d06305960c06962f747a7f17d7a03930ee4025b7e945c6deff690e51454be241ab1fe14e1213ba282698507e59092857b92dbacfe1344219d605654480f22b9d50f64aacd2cf027a541fa843ba40ed1440fdba1a41d568a9da40ed1040bdab13d47189d3eb580c6a54425c9712a28212eee9544213570276bc4e766dd1c6d5af36e042ba80630270f7750237200909a5d6ab7e99ba0c02698336a50bda6e01da89b39c0de44a763734ba775417942101cac9eab5528d73026d561a17a09d3a4b2b3dffd3ff7a01cae94a40a95a499dffe97f5280f2814e28072550166822842ebdc39ef0dfdb5db4885a2300fc5027c0710ef0169d2b46a0d51bef1a816cd70564b300e4239d40b630d5cc738757397f6e6e08e03dae8415aa22a668851a47716d56d8220099ad1620cfa33b3709403ea9162035ae7eb401991080fc462790c1f642353ab7b628d9204039a3134a347efca1baf57b9f05a88c4ce409586dc0c57401572b00375b0967c69753fb92975258b6479b6cd8e0fc59609d00e45c25805439f3791fa71b05209f560b90e7719c0e0b403ed30964c2639c2e3d82a615cca42e30630298df5613981a5d5c1b98ad0298f3d504a6c659a43630db043017748279ba8d5f8d4e9fd2056d3bbb300798329d0458c97921f7b9ac794aa88dcbba0365b30c37fd5680f60aa5c5134369faf1161e8c0b72e4ce9da6f7719e9c288e4d475b65d351398e28c9243dcd71a5988b56d2f47bb78b2cff122bf9372ce150820eb3e540f326713c3351606bc4147e42ff015f7df5224a540000 + serializedProgramBytesString: + serializedSignature: 8adff8fb70d1d5a224812aac1ef95eb5a22e08b4962e89528feab18535d6144c010b6f9610772743f37029962e98f56735b1b24bcf1e4b728f5053ecc58e6703 + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/f105e1f1c6b2fe14786ff87c06b7adf4.asset.meta b/Assets/SerializedUdonPrograms/f105e1f1c6b2fe14786ff87c06b7adf4.asset.meta new file mode 100644 index 0000000..fb2968b --- /dev/null +++ b/Assets/SerializedUdonPrograms/f105e1f1c6b2fe14786ff87c06b7adf4.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 38e58b2c6ec82a540b5c26f7c771a794 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/f39412787100d5049946ae8a98e0aaa1.asset b/Assets/SerializedUdonPrograms/f39412787100d5049946ae8a98e0aaa1.asset new file mode 100644 index 0000000..e129012 --- /dev/null +++ b/Assets/SerializedUdonPrograms/f39412787100d5049946ae8a98e0aaa1.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: f39412787100d5049946ae8a98e0aaa1 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e70e7728eec183268410a44009046bb112a05e08498094208d50a046dda87b4bdd5bea46dddddd5baabfbabbbe3bb333d967f7e6b9dcdede7399e5fd870fd9ac3df3cc779ef16766a359ccfa890cb17e2d64f3d864368c2d60256c355b65fd35d93aaeb4fed967eafa5c56611d9759bf8bac7b4358462d6ff29f01914ed6ef19d65925abb2deac66c5d6b14cdc2f64a5d6df33ac774bad337e75a9f5bfd47a2a52df7a69012b6073d86cd631d2be16110bc54b95f25a84c72bd2d8fa3d89adb7ee960aa5782059e25647eb57a175a752dc5b6929ad9edb8bed23a2b5d2ba576cbd53c1ca2d994b84c4c6dba631f107b30ffde4b1bf3cf6b5fe37917fd7937f37967fc3e71bc8e380049fcf04ef35017f734217c7797fa07d8c5459c7868c45278073feeed7f2b941b6bce8f238b286c8e350791c2665ee9480fe8de431ab96f8c693910d6425c2acb13ce6c8e370a9efc424c3cfb519453603799c6535d0270784dd04dce7d7460488bb4ac7b59e745c6ba763f41c997e9fc8e747cae32879cc93b2ad673a5d2daf8d96c7c1b5e835c67eafe6f9017698f5d6c8f3b1f2b8a33c8e93baad93bae683f3a0baa8341d2f651e20c398a4b9ae9ee7f727cb73c98d299b55e935513e5720cff313d42711fb533aad97614c01e716c7fa8be3c852e9bec193ee1be4bba7d81ceb6ff5c407d89f56ee24296f6a02f16823c33c50be330d9c5b3a347c573ea7184fb175ca54e5850aa3c049f7818fca6bd3e4f946793e5d1ebb00fd67c8e32ccfb3bbc8e34cf7bb9183a49ef09cdfdfd909bf83d2b99d7ce6604fdc0e96715361cd96d70f017ac977addac9b9c765ccf0dc9f2bafefecb9beab7c6fa3bcbf0b38e7c7439db0c4df50cf991e3d557ce6c9e37c795c208f0be5f38779d81c26ef173a6cba9e21afed669fef784e0236b2bb9477b8943f0b9c5bfa3592f713b6cffaf23d5566ecc16aaf9f942e7bc9e39ef2b8b713b71d7f97d7f6017686d9e6bef2b808b13bc556b13cc2c3f68804ecee488fdd1d69c7bbb1d273b1bc7e541cbb3b2a49bb3bc66377c7c8e3d1c0ee8ef6e839d3ad6713656745b5d8ddb11e36c7c6b1bb78695b6c3fdb5cd631567bced643d67f4d1e94d7557db2a4163b53e5eb71cc5dbe1e27e57e6fcb6dda493e5f6a9f47547b2c0bc8e1efcff6c83dde23f7785b6e5365c7f909eab9541ed57b2be4713f87dfb8e6f2da32792c93619ec0dcf5f00971d827ca2d5e1a9533775e1d2cc3dd548b4cf5fe4a796c92e0f3ea995501745e2d8f4d130cb3a93cae09106633db169a57796ca1a41699fbdb7c9bfd0e74b0e4b460f2bc421e2be551ca8f9cecb1839313b083da74a996ba1c09d280eba2e4ac95c703dcbab0751e9da6a74ea7c88952e61c70ce8f273177597b92d4f5553b9c96aaedb15e1e3778743e904e677690fd5eeb53806d24f25e3cfb926d8396b7c9f8bd29af1fe2d16db5a377b327c1bb4a8f44f2c346c9e2540fe3536d1d5a29b687799e9b0bcef9f114273cf1377f57d9d640709dbfbb2b38e7f70f4d50d72358accd7239a783b04f9761cbf2bfb5aa3b8f64b1794ff72e3f9e06ae9d66cb6bbd58be77148badc7d473b09e3d4dde3f3cc1b81dadd18f87fb689c7765bd5f53feac04f6a0ea73595f47ce60eebca5ec3cdb7927522eaf1d679fefa074395ebe7326e072a6ad5f9b2df21955379dccf4f5ec898083cc8fec2427ec5eaa7db5294e589fcb6794dda8781fecc869b959eaaee227edb326cf789fe5d7545a9d258fe7cae339ceb31394bc33e5f16ca9db59cc5536b333c0757e3c5bde9f07cef973a73bb2bb3c2baf9de7d155979ee77be2ae2b03e2d999e4335ec9bbc066db36c3bede76ba4787e3597cfbbdd07e6f984c37769194b746ca3bc7a7bc8b25a77399db5e559a5c0adebf5c1e2f73184c5465c325f2bd73c0f357c86be74bd985e09c1fcf93d7e78377f9f102797d0138e7c7cdcc9de737db716f77a4e7fdf33ccf2f743fdfbeb5d4ef4a79bcca1dbf9af795bc8ba49cddc0396653897297e339910b3ddc2f94f7afd570bfceb9a674645b1c1df2bbc96bd7dbe783b631b7edd6a6533c3bbec99659335673b33cde228ffb01d97da58e173bbad5b4b96f04f7f8b96c7bb31b98abad1057975be5b1452df1e9079ee3c7db02c43fdebd86f278878cdb25cc3d7ec5cf2dbbeb981147d69d36a7ee8be5f956fb9d4e6a2cf72efb7e073546733788130f43e553eb99f60fca7bf7c87b2abff26bb28f1bb91c5cbb415ebbc2b926e4f17bf77ad26786e7fe7d40aeeefefd4007ddfd0798d3f7e6e39caa5c7bd013971b34fa83729e3d141bd7c8e59eb0d5d84a2269f9b07cf74a4f5a5e29d3e5eb38b21ed1a765e7bfe5f9a39eb47ccc93965769d2f27179ef6a906e79f2da359ab404e54744956f4f2069a9ee3f09e4eaee3f0574d0dd7fda9d965d14ef6790b484fac3b47c3636aee21918f61e09a4e5f3f2f89c3ceafa1d2fc8e3682977cf04e4be288fa7c7913bd02377af04e4be2c8f2fc591fb0aa26f32e1295b57e3eed731b7adf373cb6ebbbe194796ec137a6dbd9b6a3bbec6dcb6fe3a73db3aa8bf6aece30d79ef7a27fd996a3bdcc0626dfd466027aa7dfc267806daaabaff1690abbbff36d04177ff1de6b2f5ee6a3ee45da6b775a83fb4f5f762e31ab9c113f6de09a4e5fb1ece8aef4dccddcfbcc94e9fee4abf7c906ef1eac60f6cf9f9aa8cd826e5dd2ce5ef03cef9f1164fb8b7d8e1f6e864cbe9a9c6099bcbebd9f6f51edfcbeb1fdae793eacbf38fe473bb7b9efb583ef7aa3cffd4c3ff338fada836008ccb27e01e8cdbedccdd26f99fbc7e0748abdbc1359856aa1d581b57954fbef0f0bb55cadb179cf3e7be72f49fac187e298fb73af73aa8b91e95becd811e5feb6d45e80ad2cc771b49c5f99b5ae2eca74cba93b9cba43b6d3bc8288f23eb07f9cc29719ef9491e7f96c71fa57cc5601e38e7f77f91e77779eedf25efbfe4b0efda17e8a164f377162510ffdfe4518d05fc2ac3b99bb9c72455fbcfefbc00c53d356e788fdb7ec4b9950ebdd5fca6b2c5dac6b7ff90c73fe5f12429ef5e0f03d5368d379e585b5871e215b99fb9fb66b22dcbfe92e7f7c9fb8be5f9839ee71f94cfcb765fe401cff30f7b9e976d4ef68f3c7fc8fd3cfb17c8e1e7ff39718bc87638bf5c73ed21798c387cfade24af3de2093bcadcfd3bd5877b94b9fbe88f7818a8fb45f2fc318fdcc7e5f91270ce8f4f78e4aa36f0df9efb4aee931eb96a0c5b961791064e1ca76c04ef409ef5dd32e3daf47ff29da7987b2c829f5b72fac66bffab779f96c767a48c62706ec9e8d7d7d6b7df685c56e4590fbfa7c1757e7c4ede2f01e75cf6a63832993c3eef89dbf3f2dd38e35a35efca7673e4454fdc5eb465f46776dcfab78b234bfa3a451a7bd250d92c3fbeac49d797417af2e34bcc3dcef392d441b6d5224d10db7ec1f37ea9fbfd01b2ec8fc839ac48338f6eaf30777924c719222de3d8642b8feeaf3acf28fd22cd3dfabdead1fb35e61e8f7a055ce7c7d799bb8e926dee881cf78abce1b92fdbdb5a7fa378e5e30ef6b379b21d12692b8f6da4fca57164c493db4e2f57f8c7245b96b7973a2d4bf2fd0ef2fd787e15f1deef28df2f4bf2fd4ef2fdfd927b9f7595c7e9c9336405405622e36e3da5ee9d03a45b17202b8130235c37cdf8f8203596dbcdbe3f7c6202b2badbcfe624f06ccd9cdb9bccedc7f0a61dfe6065cb3d987bcebfb33c4a7f9fc85bf2fd89e09cbf7facfbf9c8dbf239e9df1051ac33c07dfefc44f95cbcf6b28a6f1f79ec2d8fefb09af260881a4b5365d0bbcc95c7c5b3ea3a3ff692f757c609379e2e03e4b1bf3cbea7d1e53d8f4efd6498ab920c53cda12986ef4b79d2e72132145ce7c70fe47de5dfd95e5edfe679ef03709d1f3f94f7f797eff590d70731c7c6bbcb6bc0af52bcc78f431c1653146f657fb5f955c7b36195eec3929711c902b212292394cd650708733890954898ca4ff323e6eeafc8318661f7da6cb3a43d44942f9eec8f4446c8e367cc5dffabb18678fd918b6ad1710729eb638f6e1fdbba65c9f18f2c394f1dc9f5e83692503755bf7fe2d1ed13a9dbcfb6dcecc5f27a9e47b75184ba293fc14f3dba7d6aeb962dfd7fb355ff62b45bb71aff3b0addf2137c2e9e8d8f71db478d9dfccf911919cbdc7e8cea19e96f1ef982b9fd18d598d3e7f27a053857f94ac679981cd78a8cb3cfc7c8f189881ca761dd40dcd43c640fcdb5ee40df09b6acd1aa6e8b17ff9dec67c7cab1f7c8443b5d73aae2bcdbd67d8c7c09c2cef7b052cf48fff8c8d71e56b2bf17f94a5eaf04e7fcfd5e40f66424adc0b858ad69f59d27fcefe4f15b4f5a7d1b27ad647b2d32455e57e3856ddcc7c8f7402f39df18f9218eae6d3cbafee4d1558ead457ef4e83a95b9eb6f35e6a6eaef9fe5f3554007759d1f7f61aefa3da2c6e4d45a194bf65065bbd25f7ea80a6b983cfe2a655483731e27d53efb4dde5f0bce2d3bcb55e5c674e66a3f4666c8e3ce7174517ed0320f447e779e51f9a8a6edf00773b71dc683ebfcf82773b51d22bf83eb2a0cc09065c8e37870ceef4ff2dc57e1ffc5dce3ad7fd9f11fa9fc8574fdf899765c46c931f9885c7f9050befe5b86770038b7c2cb9b68cbc853e31ab3596cfe57cf3771bf3b4a95355e3bffc7874dffe7b16935a6f3afc7a6e7786c5a8dd1299b6eeb490f1dbfb9ccddcf4887debb06d73b6ebace63da7e03ac132285c066f951b679f95024cce7e29c3fafd6ba5872078dd6bc9b48ff7067f09e7a5eb5ef32c0354f1a44a340eff9481ac871b4a81a67dc059cf3633d797d1d38e7c70808b783bc06c6c2c4df968c31e5e0791ede42709fcb5def795ee5d98eeef7a20de5f31bc03997a7c693e4bc7db4917cee4070aeca0a7e5dcd1fc5e32dd7a360754fb4318ba97ba24d58c2f61e6de6612dc7e8a24d99cbdea34dc07555ae06e82b7adb165138bfd64b5e03fe49b5b537a2ad3cf190e384d196ccd5de88b600d75539c8ef1f1c47e778f15063a2b27e88b666aef25f9c5bb6b4e3bbeee71848b7b8f275f7e41856548d134e03e75658e3641b739c2afb958f4359fc30237b7be4ef20e51f02cef97d8d9f6944cd5f2f76cb8063d2ca0735dad6797fca46f99c1acf5de4dc9baafc12f702eff173b55eaa8cb9e797fd96b1454ceb7b315ef9d9e6cbe305b5705bc2b473ede33ff129a798b9e6e223a5cc35171f91e95933172fc78ea2eddc1c22728c36dade092fda0e5ce3cf7ae7d96bd14d7b4d8e0946d5d8ee34706ec57f82f4d39aa0dafeca0ecfae85837c2eda113ca7c2eae45c8bc831c028181f8d7602d7f8b18bd4ed50706ee93671ba476e57f9dc4610363faaf6e061e09cbf27ebbc6877e61a6fac9107c65bc53356983ba9767899278c1ecc994fb0784d54f3187b82fb4d809eea9a9201e62254f8e2c8af1f6ecbe4dd3f18666d69a0bd267d0ea3199ef4ce904cb7b99f137ecefc780973cfc3ead27c3978d6af5ed74a3d7a79f4ea65eb95bfc9fd9cf003e6c72dcc3d9fa9f2e935b5e8303ac1e774f154f30fdbfcbf1bedcd5c73b85139de18ede389771f3bde930aecb49fa4c6ae95de1fc50f5bc98dc8b1f1685f77fa45551bb71cc8e3f78ff0191f35de3c079c837085fcdae69be5f841448e934707c8778e04e7fcd8df897344b58b339d6b51394e1e1d28df3f8ab9f339185b167fab67f9713073d7f9836dfe530a3cb2d57b43e4f3478373ae97ecb34687cafb6a9dac2ae7c0b8727428b8c68f59f29d63c1b9a54381ec6f4fe9868495cddceda66c4f986a2f8be3c03997fba2fbf9688e7cee7870ae18433927b8e578f58a82bd2ba2729c98817127ad1d49ae356db041cce9a35b719fbcc91da7dae469f36d0379947315d15c0f37398e2cda317e65abb108c5602473f7dfd498b4b21fe55fbcc6fd5e44ae7f8d8e72df8fe681ebfc3965e33efba611e97f15553eb20bc0b915efa9aadd22eb2dd14e8b57cf4b7911d5a7566df43152fe2670ce8faa2f73143887797447e6aa8bc5b9a5d7b4cb3d72c679e4a8b571ca7e54dfe644cf7b6a2c695f79ff24dbbea66df5c4a79678bbaf3588089b99ce4a59115bc3b2784759a450a2db24a9376bdf20898b6e28460318df2989075bc5d65baf96ea76295a20f640aa62232cbeba5d8a3a0b3f0b15fa64f1bbc87aa24c083d391a13c45d314170e5caad7fa5608ba54aebfa34b14313df64a9ccba338ccdb48efcadc56c38dbcbfae796b2d00ab69c555b67f3addf6b84bcc596dab14fd61625be1d93f79d79964c7bb7a895d61505748d755e2e342c14bfd70a4d4b85f633ac6b5562efaa556c199b641dd789d062e35e61fdad0b73be44a6d751bf691476ddde9a4a255381151bae7d96b0c5ff4b91ba4811318c75b2cc87f5b344aff1f89894f83f867621c32bde1952c670812ce2ba96c3b244dd3c2f86a0ff38c6c6506fdf36ef3c961b372e7a323cb9bb8a183829dc72dae717cedc724bdb06eea88d60596268b15b2d518b0796cbcb14de577ea2d0a041fd6caea8177f44875f0c6b16a611bffd5c9978ce7f023414959f3b01c4f4df7cab549b0b2acf0542f972a19a373285d613d59638a5fafc9a3bf3ad37d6b0d962a3c00344902b6aeec6a46f3657a69148a2d80ab8b668628914d525921853985f277904dbe6307e3235ae8985934c59a255d5298e31636189e6563dd9e652d9adeab66f861e96dd7bcbbdb7cf5935ffd42f3f69a04f9fa6227d9209154ba17aba146a9aee6c547bbd112f7d9ad5c4cb491ffea367d81cb1f1da74c008d6d7116c966e1be7f7560b2945d6b3fe19f2c988c1dea2480fb0256284b5ab80216ca04198cd11b6d268c51a34f168c515422437d4254ef3baa9a493336e3e6bd3d183a0016adc6de2d6b17e4dbb918e9e98b65a4c4a4ff51d0bad4ec22ed6bd22ebf952d110e5d7e75a128bacb0b9bc7c1182d3df74bf119f2c9f431aea25aba5da5650ed0b7ac24135c38837d610cfe6f6da4e6306a28cf36686367866688265b3f641b359534c7287a0929b61923b0695dc1c93dc29a8e416ba6c236679f74e4bb671865cd45f93ac77975b91592bfad1bcb5a81ba2899f5d3a279c5dba88ec92c1740347fe34c2b2494b5ddaf18b5d754a7a93ae0b9e74ad30c1dd020a6e8d595bf7a0d6d60653b947409577c004f70c28b82d263823a0e07698e05e0105b7c78ae5deba6239e2af58ee8099469fa0a6d151571009134f6f1fd9ee387239fedb3fbcd6ed1953f1654cd4173dfd18d6818daf0356d074d2116c9d6e8205a2885c9224413ee7d74bd374606cdb4e7a8a03108ab5e98151ec8c659f4c4df6d93dea2ffb74d109e74934108db726800178005db10006a528806e580083531440772c8021290aa00716c0d01405d0130b60588a02c8c04c344b63a25ae1714cb417263c5b23fc3febc78ff0de189ae12942d3070b20274501f4c5f08c4801fb7e3ae1bcbf925bf3702dec9be3c2fb639a8fd468fee7a4a82fcd07e884f376019f440fd42ec8c4248f0a2a79a046729668a11ec6d2dbf5d1cf504f131ff0296573acda6a3f664f2daa70578b6945ae919aa29c671d970a2df8f56259ebc50f2b7e5d3cba860f184a160ded292cf17976fa58703f83a8680b70cf864cb1e6668175dd9e519f2252a04c84344cab0d0f017b5eb198c5f8b789aa456a374006bc7714a19bc5066be50cc24a9a719a92e64d5d3116a7a4198c65d9f141b3ec109d649e6527686c359bdb2af7e06c2a7a4b31e1ec88873354573488aee0863a2d1aeca1512e6fa9701ab1e5b967cda65861d98633df7aa6c20aa3541a7990c260a215efee1ec011557f6ab343bec80e1312c80e94b1c232c0309d25f13164eefd1633cfc9bb56f3d85c4bf222910df7179739253b75cbc4a3656c837554fe1f31f6d608b7b72c9d367c688eafe9ac7530a02d2e381b135c1050f0702c8f4f099ac77374927969c3d771066d618dc0d49e1654ed5cac449dae2951ffd60dbbc429514762c2676884dfabeb94c6119e8765859d13b19138563d0a13bc8b2e8ff513e6cea7e332acffabad3778a7bd48e4fe0c51193aa5418695d7cbacbf78853d043cbfda7ac2f6b7f2a3e7689d9edc286606358a3158bacdd2a4dbcf3ed36d2c267cb646f8f47afe84ef88a5dd1c5ddaf1d280d71bbc59b25cd66deed2304378be650867c76a31ad542252ae52a46b063bd02aaa0eb68e55d6d319a21e2817f732c4d7262b4459eb274dc761facfd5e9df14e83f1768e827c4f158b9b5aba6dc8af82cb726e884f3e7e731a4e1c3c7fcfc377c76c2b0cdd761e3633553ace60b6fb9568be70b850194d6b4954b5254414ed4e8952586d057b1ba6c90f1de02770dad147f3b4d141eb6e38214a4e1c5bdc5bd0d2ff5a36f78f1f5b99962f79874688f35b0f2b14275374da11af153a84ec2f2c2ee585ed823a9bc30192b5ff7d494af131bf82b5f0b74c2f940155fb5998a81aa2998f67b6bb4efeb53fba998f6fba448fb6998f6fb6ab49feb53fbe998f68b52a4fd0c4cfbc51aed1ff4a9fdce3ae1bce82c62c19a6bbb6082f942dd98b29f8fcbd995f658ab8ce025d552f1bb5296ffea1a1cafc8a8299555457fa068c74cb5daa0075b6ffad17626a66db14e5b5e0acc61f6c7b14b535427cdc252b94493ca07f94ce5d93ae1bc902b654821c79735fb2fe4e6601897e930b617996491f5de225141540a70cb04405e5df17b6b449b9d0f6cf9813917d363b94e8f26528f6cd11f2f126d4b7fc6be2b165e19663e2abcd870f9950ad18ef5a3c13c9d06dc7cf6d398cfbb0dfd994f2116bd15010b89f998e0721db74eae4262aa20562e8b07bb00a8a8a168170607fbd26601a6cd4a9d366d642150208aa95414010bb1f057e9c2ef20c38f1dc8559eee0bacdc532274f1dbfbd80db3a6d51a6bfadaa735edae119e25fc4cf85ac9ba6b7de3e5f83c219bf741820f7df238d6f310cc128e30b9acf63676aa741c2cf6ade6cf174b7295bc5bc94bc22596da5ce9c9c2e581c367a21ad0f60ef8aad9ccb46a8ef510f6c04cb64263b2eb1af933d93d75262b7c8c2aead464e3973da934db4a9dd90a1fa1bc04123f957af6146b292b4569575253d6f19f9e627373ae2d275b26baa0f0fe60b1b939af1fa60ade2b05f9d5a2d6e0330098915709234f773c3143df0b33f46a8da16ff569e87beb8473435fab49ffec4e023a61727835afc235df07c3728006cbbb3eb1ec8b095fa7113ebab13fe18b30e1eb35c27ff6a9f9629d70de74d9c090963fdf28cd7fcbbf088bc4419a48cc6fe22f124b74c2b9711dcc020ea917636a1fa2517ba34fb54b30b50f0daa7629a6f6468dda7c8d821fb59762c20fd3087fd1a7f0653ae1bc2dc2f7488a69e3f665ac662cbfd8339bb3849582399a127165bdf5bbdcba562c44648815db6a598a9ff6ef720cc1111a0467f844508621389205eb4deda713ccade8a84404c771025f811522476385c831491522e518f66335d8fb36f3877d25961b8f0b9a1b5761928f0f2a793526f984a092d76092370595bc3f9688276a12f1c8e6fe12b102137e9246f89b3e85576219f3645dd9d48f71af14a7fb644f7138738f4556415a254a9e0cabe963b7064b5c73984bc108869f7c5e85e9798a4e4f7b8318bef88e37af8ac43c370f718e95adfd845a8da13f5583be750b7fe8d762c24fd3082ff729fc008cd7e93a5e9d6a49573e195901aefa1d655a876973864e1b7eeaa49b9f70d66348cfd420cd68e90fe9062c1267e92261372bd5c0dd6c3154572437b759cb921bac3b10d3e06c9d06b6ff856a18cc4db259701086f41c0dd2dd7d223d182b91cf0d5a221f82a97d9eaed0f4a9f6a198dae707557ba34e326f756c6648ab83ef9feabfd5711816ce855838172515cee118a98b83923a024be04b3409fc682b7f097c2426fc528d70bedad38ff0a330e19769844ff729fc684cf8e51ae117fb147e0c26fc0a8df0cf7d0a3f16137ea54678b736fe841f8709bf4a237c884fe1c763467e7550233f0153fb1a8ddae7f8547b13a6f6b541d53e5123394b2c0b4ce73a4aef0a057feb28f95ebd892d80e7bbf9ead64fd6163e36d879922e5d780d7dbd4e251f55f9c99835dda0b1a6e53eade9144cf88d1ae1db7c0a3f15137e934678f31dfc093f0d137eb346f8193e859f8e25e62d0113f30c4c30ff98784c5b7088b0ced5ccf61c2961a562dfb655e2af5562efcc52e15c5a246cdf197052cea57c23c00c69bd15d2a6cb2d6b1f665df5a3f59998d6b7e9b4e6de917c7ac16937db5d49bb1ba25bfb93c106c856f7005f7a9d85d9c0ed1a1b18edd306cec6227d47401b384757ce8a15d265a4e52cb6d66bbe98c7e04e2d4b85a5acf4bd322c7e997c67c265f2565126f3454874ba62e5f7b9bae4e66debbb18d2b6e6df846fca55f6d5b63e0fb3d97b3436bbd5a7cd9e8f09bf5723fc5d9fc23763c2efd3086fdcd69ff00b74c279b3867f053e50b3e6424ced07346aefee53ed8b30b51f0caaf6c598da0f69d4dee653ed4bb0b2ede18065dba53ac17cf2f4914404c759777519a6f1a30135be1c13fc18d3d46d3cc1e26ed9e923e42bb012e771acc4798225d39bbf12b3a4273596f4793b7f96741586ef291d3eee1c9f2f9b29cb993de2acfc298b6a9c65575b853b1c9d2e178578915584f359b352ab4ab37793ae148374f6805c06cb1432f99d81d6592f365edccb91f79c1007fa4aa4ab31784f6be095b7f707ef1aacf4782668e9712d960f9f0d980fafc3d2fbb980f9700b26f8f98082afc752f0054d0a1ee433056fc0b47e31a0d63762825fd2e52b1e9dbd6a728c9d23f6f1d9c8bf09e3f4b286d38b3e39dd8c097f4523bc71077fc26fc10ad257b182f4b5a40ad25b75e1f04cf87a22891d67d6fa364cf01b0105df8e59d19b01cdf30e9d609e446fb1d8457f5c809f457f7762c6f2b6c658b8cf971f63d9aa13cecbdc7758c032f72e4ced77356acff5a9f6dd98f0f734c2ab7c0abf07cb40ef6319e883a432d0bd98396ed3156a7c99a35a74c15d6596c9552c7c61ecba004b2eeec3b4f850a745db1a2df8e207dec6e353adb6df5ff23adc8fe9f0914e07b50c6384f5bf58f4edab4433a82a80060f601a7cacd3a031480bbe6d05ef7dfb09ed41cc7c3fd198efc44efeccf721cc7c3fc5ccf7b3a4ccf761acd0fb9fa6d0abe7b3d07b0423f4b986d0df3e093d8a09ff4223bc5b677fc21fc3847fa94b5b9fc21fd709e718bfc2d2f6eba4d2f6092c3b7c13af68ca4971d1f424a6c5b7f18ba6e1292c9a9ec274f82e5ed1949bc2a2e9694c83ef6b2b9a7613e1f95bcbf40c66be3f68ccb779177fe6fb2c66be3f62e6fb5352e6fb1c868c7f44344843ef798cce2f1a3ae7f8a4f30246e7578cce6f49d179118bc4ef9a487cef33122f61e8ff0888fe654ceb3f355a4fefea4feb5730f47f61e8ff4e0afdab5824fed144e2739f91780d13feaf4678e36efe84bf8e09ff4f237c884fe16f60f8c5170175f8239164f0bf891927ff3a3d5aad8d4871b5f616a6453d9d164eb59693c26aed6d4c87fa3a1d54b5363285d5da3b98060d741a34614eb53645ccdfaef6e903f82e66c00d23b106fcbb4f037e0f33e0469801374eca80dfc722d144138935ddfd45e2034c78538df0177d0adf862577b348b07ae1434cebe61aad27f6f0a7f5473ae17c78a44524e0f0c8c798da2d356a2ff7a9f62718ec56babcc5dde7e37bf9da733c334519c8cb9d0ae1046f2f332e11fe137399fd15257b093f9f9cb017f72f17e7aadc2c624ba477c370e1dda096ffaf67f6073532847791fdb1cc0c31055222b77f5b21ae548aa74a8164bdff4499f403811e177e9df53fc512a8b52681d6f94ca0cf30e16d34c237fb14fe3fac30da012b8cda2655187d8e45a29d8e504f7f91f80213de5e237c6f9fc2bfd409e799b5432285519c11e6af3482b3c46efc75e3cc12bb8d706a9d593aea78699d593a456a736609ae2be6ccf235664b9d75b9cda72d7d8355115d825611df6292bb0695fc1d563f740b58197fafb37ff1b188a57562ff4136f88e6ff9dd13b6fc1ec2f207c5b1fc60db90eb53e207cc787a06359e1f31e3c908683c3f61d9b497269bfe9ce12f9bfe8c69dd5bd724e2bbdae48b8e56a958bfa55bf997219a4b193e9d347fc1f4e8a3d3c3bae653feaf98fcbe0153e7372c75fa6952a7bc97bfd4f91dd3ba3f963a3c8f2c974d44951ea5359b5726eb42fb0716c901bafe556f7f91fc138b64a62e923c072a1706bb3debf667f613adbfb0900762bd7dfb73ce59355f7fccaad9e1758e95214a98df15787f631a0cd269d051abc14cf15795d875c46ef527b7c0f21f4c97c13a5dba26a84bece701fde8f42f6678433486774a1f7f86f71f16e1a101cb046778ce23785840c1114c705640c1519d60ce395bc3f9269f9ceb61c2876b8457f5f527bc3e8624272092063ac1bcf41911b033d4502798f74373b17ee8c8a4faa18d30ec791aec33fbfbc3de188bc4282c12a3938a44132c12633491d8e433124d31e16335c2b70ef027bc1966983bea8a53be43e13c06b7962a116d6c5590670a7fd532b64afe762fd7c9106776f5c35bca6bc41d55e456b272e1135bc9e07e09f6a0125ff9bfc6d33250e1284fd90cb179ad5d9c6788c2bcc4a7d760738cc5381d0bfe3d07b871baddca742a58c7ebf700a161397396dcdbfa719d6b93c07d7efd2e716a8119cc788dc134f669302db12c3501cb523b2595a55a619198a889c4109f91688da574be2ea5f9ae2dfa21d2bde4e02a5f22c67b17f62e73f1d23433eedd81c2d3d51e5675ecda9d03560bcb5043a8ee7b55c2aeaa34b96889d070351880b565af96bd533ff6d546478f7fe6755244f7ed544dd2f4c385ef80a5fb644dba7fe233dddbea84f35dc30b222c25bb86b7c3b49fa2d17e5ca63feddb63dca7a6807b074cf8b41408ef88099f9e02e19d30e1335220bc3366313ba7c862ba6001ec92a200ba622639536392eb06f933c96e98f0591ae1e7f814de1d133e5b23fc519fc27b60c2e76884771aec4f784fac929c8b5592bb2655496660f5d83c5d3dc68772794da5b6e129915f427336fdc777b5f6533ff4c23264610a32646f4cf8fc1408ef8319c5028d513ce9d328fa62397d618a727a3f2c80dd5214407f2c80dd5314c0008cff1e1afef387f8e39f8909df53237cf1507fc2076268f64a119a4158007ba72880c15800fba42880215800fba62880a158008bd000b6ede427806158008b5314832c2c80a21405908d05b02445010cc702284e510039582e2ed1e462fe514e3fb97804569f96eaea53eeadad5c5892a92773b1a82cd54465b3cfa88cc4a2b24c17155e81f2ca9f5f08be1a3c0f8bd8724dc44667fb8bd8282c6265ba88f1509d617ee7eb0a7ea2331a8bce7e9ae8bcea333a6330e12b744d8ee1fe848fc55895eb5871412ab9f9fc6981a0b5c49ea9f6c16b472cd495ba50d5f788f892342cf4e4bece330e43bb4a83f64d9f68c76305ddea1415741330edd768b4ef9be34ffb9d30e1fb6b84cff5297ca24eb8f82a4124a0f7423e6659953acb6ae0cafb7e2c6712164e952e9c96c0829df092b3d9c958c2546b12a66a84bf8429c084afd5085f93eb4ff8144cf8011ae19b7c6a3e1513be4e23bc9d4fcda761c2d76b846ff4297c3a267c83ae10f2297c0626fc408df0bf7d0adf192be10e4a5109b70ba6fdc11aed3346fad37e2626fc108df0af7d0a9f85093f54c7dda7f0d998f08dbab239cf9ff03998f0c334c23ff7297c2e26fc708df021a3fc09df15137e8446f8c53e85cfc3841fa9eb558cf627bc10137e9446f8ee3e85cfc7aaaaa3b1767e21e39f3ab23711b28703f9545132edfc0558d8c7e8c2e65bbcab6a32be0ec9559d0bb191c163533032b81b26fc38adf08c7c3fc277c7841faf15bea1c08ff03d30eb3b41637d8dc7fab3be3d310bd8a4b3002df43829ba1726fd449d747ec39e72cf4a6267fbbd314c27e98a9771fe30ed83093f59575ff814be2f46e9944830dfa24598e053030a5e8ce1384d83639b4f1c4598f0d335c24bc6fb13be04137e8646f8169fc28b31e1676a84ffec537809969867e9f252154becdb11c15692d99e998b5c6bd3cc5e57568a25d1d99a24aa3fc15f122dc592e81c5d12f145b5b14bfbfc4466992e3c3e4b796ecd0dcf2ce5799164662997ebc2e19bb19f9f4839b205175c8601dbac03c6ab9f2c5f80f6c3e45f800d35ea2cda4f882bb0102fd485d8416b02b384a5ab4fe83877fc597a39a6c9453a4db804bebcc76f4db052134a16df743bc23fee9dae7dfae75b677c3772ff7bf45f1ce1abb7dd3044fe88781888c5449744f87281f631318b173eb64468952e7df8e9a511bec6ccadd2ceb30e6bb4b9db73d198a4698027cd6acc002ed31900df8f5335db975a1717b12a19a9329f86b7060bf772ac43a30f775512e37efb63431e57a0431edffb9a41acd0d97b8f74dbfb64e126589184bd5f19e14b86dc1c8621d67e1562edf142c7acbd52c7ad27e7b6288ddcece7ec72b5507ce6b2ccba3247385fdaae9c954930bdda8a5b77ad6d61e5c835826c9f989827ab1f46bd4a971dc4f759220107f2ab31c9d70595bc1693bc25a8e40374927973eefa48ec967922f1bcc2e36c99b70e2bf56e08d8d75a8ff1b831288f0d98e49b824a3e10937c7350c90761986f0988f9604ce55b83aa7c884e327ffeb644548eb3c2e7504ce5db83aabc116bf0df11b0c17f18967c77064cbec331165b83b2380253f9ae802a1f89a97c7750958fc22cee9e80167734a6f2bd41553e06b3b8fb025adcb158f2dd1f30f98ec3583c1094c5f198e407834a3e0183f15040189b30951f0eaaf2893ac9e2231e89a81ce7e30127612a3f1a54e59331ca8f05a47c0aa6f2e341553e1593fc4450c9a761929f0c2af9744cf25341259f81d9dcd3016dee4c4ce56782aa7c166673cf06b4b9b331c1cf05147c0e26f8f98082cfc552ef8580a9771ea6f18b01353e1feb98bc94828ec966cce65e0e6a731760925f092af9422c095f0d9884176149f85ac024bc184bc2d75390849760a0df080afa52aca5f866c096e2653ac17cfdd25b8908e66bbb10c1976329f876c014bc0213fc4e40c15762a9f76ed0d4bb0a4bbdf702a6ded558eabd1f30f5aec1207f1010f2b598e06d01055f87a5de8741536f0b967a1f054cbdebb1d4fb3860eadd8041fe2420e41b31c19f06147c13967a9f054dbd9b3592b332acd3c87eac2ef6dad34d99a776cfbdff259216637162b76069f179d0b4b855279967902f1251792b2ef836cc2ebf0c6897b76382bf0a28f80e2cef7f1d30efdf89a5de3741536f2bc6e2db802ceec2047f1750f0dd98e0ef030abe0783fc4350c8f7622aff1850e5fb30c13f05147c3fd607f839601fe0014ce35f026afc20a6f1af01357e08d3f8b7801a3f8c69fc7b408d1fc104ff1150f0a3188a3f03a2780cd3f8af801a3f8ef50cff4e41cff0090cc73f01713c89e1f837208ea7b022eebfa045dcd31868160d0efa194ced4834a0dacf626a4753a0f67398daf582aafd3c26b97e50c92f60401aa400c88b98da0d83aafd1226b95150c92f6399bc713458267f0513dc24a0e05731c14d030a7e0d13dc2ca0e0d731c1cd030a7e0313dc22a0e037317b6b19d4dedec224b70a2af96d9d64ee01d83a1a7c85cf3b98f0362910fe2e267c8714087f4f279c7b2db68d625e8b9a00e2782dbe8f05d02e45017c8005d03e45016cc302e890a2003ec402e898a2003ec27255a7a0b9ea634c72e7a0923fc12477092af9534c72d7a0923fc30adc6e010bdcff61e3b5dd13111c67bcf673ccf47aa4c8f4bed005c09d6b7a26a2791ce79a2f31241901917c85b5017ba5a00df83586a377401cdf6038fa04c4f12d66217d536421df6148fa0544f23d86a47f40243f604806a408c98f580099290ae0278cf9c080cc7fc6341f9422cd7fc102189ca2007ec5021892a2007ec3aa9fa141ab9fdf31d587a548f53fb000b25214c09f5800d9290ae02f0cfef0a0f0ffc624e70495fc0f568e8d08588efd8bd1ce4d11edffb0626664c062860fab6935cf4b91e6115d00bccf352a057daea84e384fd0d10113b41ea6f59814685d5f279c27e6d88089d9402798e79c1d83e69c86188f7129e0d108133e3e05c21b63263221a08934c172ce4e29ca394db10026a6288066981de607b4c3e618f3490199b7d009e63d8ac929e851b4c48417a440782b8cf59480ac5b63797e6ad03cdf06933c2da8e41d749279b24f4f04461c578fb63ac17c346046c061837698e09d030a6eaf13cc5d3d764944701c578f0e58eacd0c9a7a1d3116b302b2e884b1981d9045674cf09c8082bb6090e70685dc1583bc6b40c8ddb0526e5e0a4ab9ee188fc2a03c7a603ce607e4d1132b8b16042c8b3230160b83b2e88549de2da8e4de3ac9dc6160f74460c47118e883a9bc475095fb6286b16740c3e887b1d82b208bfe1ac159bdacd3c80a66c607cef7922ea4a9733bdd5bc72ce261267655d827ca7755c8627e3e729e8cbed86e0b0374c9ce5367df44929d6b8f08ced409e6a78ba2b15bc5a89f98001ae07635102bd917a7a0641f84092f4a81f0c158e9b02468e93004eb891407ec890cd509e65b26952422f812bc49310c135c1a50701606796950c8d958df6659c0becd704ce5e54155cec13263598a32e3085d00fc3bc8fb25c2a4139e8cb918ec1501618fc4861bca5334dc908705b03245018cc2025895a2004663f6b83aa83d8ed1b5097a5ba79105ac6e76565275aabf5d94d6245ccfef2feaf9ce31b14b4407acee1e8b55521529a8a476c412bf3268e28fc3d4ae4a81dae331e1d529103e016b7caf8d6a76892b10a7f32c632964056c979a4fc1bb3f756327fd30b19fdc0cebfe1cebce2a61d2fc8abe89a75b37b5486c70ed98d624b1d5b5bd31ea2a5f3d819db0581ea08be5d135b15c60353679a6b333e84af1f70c9175796cf806ac76069d51f3e414b1ad2b7fc2fd7de70ac9a350dc2db124568b7871b96e7a8e04febc3f3d3049f319df286e99b8eb660a33ab97f7424b8edf5d072762a4d761f60443b4e334c27ac7a6b5da2a141759b65121d2dc8eed7cb1edddaa186d9d77f1eba9b2a77c2c96eb75b19ce08925646ec773aa48b195228e5e2ddd2904efc4cb2bf02d3f319b84c56c832e663b25947ef962fbe232a636cf0b9e72ce1d3f719b8cc5ed405ddcf23c719b255267b98c193f5b57673129c06272902e269bd25c9e39efb8bf92ea7cd3a7d287954376782c785d522d9a19b0d4e30dacd4956d5330ea07eba8e7279437660a1a9546946a53b1f81da28bdf4c42abe257f717c1f058d9cde132117419db20f2a1be24492655a761b13e5417ebb1480b6881d0a95c967276a35db57f164acd4b62f4a569ed4cc762b45117a35dd2523b51d75b33b0381fa68b732971895825b6e8e71b86db25de42d1fee216ec7c872f781d9f8cb5ef8c713a5cc769419dd51cf10905e7b00bc6e1081d873d09394c0b6c2fb8c5f8213213237264226d5a7769056bb8056207f10aeb59de3b5916a7f476cb485d79380b8bd951ba988d8f9bd6785d344fa43b9f9aa892f157fd2d7eb558da456ccb27f978cdc6e275b42e5e7bf8eebbdb2599bbf7ae93605f9b5bd3d2abb05afc7c302b485f3f993c3d07e3710c66c1fe78a8f4e49f82281682609cfdd2f113b3b958cc8ed5c56c2a6169a518d8df05b04ba7d8764df236bd2b16d3e374311dc7b049469d8db963003fc3c3994c17edb60a5156155badf1f5298cd53c2c56c7eb6235b9d6165962fd6abc5511affe48b6055688c5f1045d1c87a129179b62760dc9d388ebc8d9178b342b48516f7a3ea6f9269de67d6be9d7cdb7d28282ef024ccb13755a8ea9d5866688f1425e5f955bcc2bac3458293e70106bf7f162937c9e5888c5e724ac4c4b244fcc1036c4fb8e45b237565b7ce863ba1b16d3937531ddbd8efb63d43db5dd311aa7e8684c42cb093eb6b4c47a4851b13fd014bf875d7b89938a76c81e580c4fd5c57086cf18ee266aa85509b4fed315df3db1f89ea68bef3cc2d6496512ad935410d80b23707aaa5a2d765b3c1fb459e863b53716ab3374b19ae6d38ea758a956214a32136c781f2cae676263bb7e5370aa7822d61abd754ee272fdc46f5f2c7e67e9e2b763807675956843f3b6da52594fe1b19a1ff3ac9f382dc2e274b6bf34f3da67bee8a7f352a5b65159da31aac558fccec1e2e7a7ffe91e7d72eef2b9e2f8add654b5048ab0f89d1b7fbec14ffc0a938a1f65aa2ec1627d9e2ed64351ab551ff976e7bea535736cbc56add68ea526d74b2ac6f43e1f6bb7c5ef25f111c1b9a22d53a9a9cd12990fe46d80a5296ca7976031dc9c482f5d3fbf97487f249d737ca5581c2fd0c5717a4271f4ce61dabd4915e7ba8ced522cb617ea629beb89ed64d1e65c2b6b02d8bbb7ed5237325f20721d366aefbce72716cbb0585ca48b458eef12a38cad63bc9d6ccfd6f31116f564aa62b01c8bc1c5ba188cf019834ad17758cdb877065d1ccab0385c928a72bb844ceffd30bd2fd5e93dd2a7ded5a2f5668f86d3dad00a2c1e97613614342fe32552b27128c7e270b92e0e2731ba9eb21fbf9d422161b578de8fe78e9b6dddfaeeacc4c85f91d868a3131358f3158ab2deeef1d83d73fd383ce480df498d8dadc2627a65223185f597ff98ba6bbf44eb4578cf4f4c576331bd2a4889104f53bc4448360e6bb0385c8d8d1526925ab3e43c7499fc7871719c59f7f4a6d9fe587caf49a48d8dc5b740946e65d67326c4b1028be3b5415a9df1348d371a966c2c2ab1585c87b53a1389059e83e2c521b91e6b1516832d416cadb659d7f4da5a3516c7eb75711cc2e2f934e75be1c7d6ef145aafc5b4be011b594e2465125b27905cfa24df073d008beb8d5869e0a7fdcdef4dade9c1a9670a45486b52188b75582c6ea2ea49c79f7b4cae6db41e8bc5cd89d81dd60a4cccee926b05269f621bb0b8de9298cf893eaeb5d5b4e96deb1e88c5f1565d1c67a3794b95834b655c278bdecf4a4d0e4a347ed4313f088bf96dba988f4e38e6f3e4a87109a8ade33348454d7d30169bdb935f5931c5a051d743b0f8dd81ad31d0a756ecc6197535f7762816a33b313ff244bdbde28f9b27321bec7fc638f994dd8871d8aae330c8070795a6abe47c4eaa66dd0ec334be4ba771ff987ac1eb8de478c5968aabbc34494da97038a6e9dd3a4d47c56939792dddadf91a310be5ac3ba0c82f476071b9471717efbad858ea899571c9cd6a269f1b8ec462792fb6f2c85f3967cf56c7de8dedb5ccb7fe5e23734da261e40b8f143eeae927ce476171be4f17e77e9e9475c2a4ce4d47637ade9f487f1e964f5e9da7499d13ad4793f56139068bc103ba18eccdea76cd0eb4c044739e7ac70f9563312a0f26b26e4785e8a754716286e5b8d49426c761317b2891916cbf2d8be01eb1c9c7f4782ca60f071f6bcb63b9befad6ce5b7e627002168347126fc1f330fdb7e0edf861d75395429bb0f83d8af92ac5afbf0be5c87c2cffc962fca0224ea9e1bc3b4778ecdb3df1f83373c9d56d2762b17e2c199f1f3f3349fe7b67c9d58a2761317c3c919ca7279c5cad587b7bbe91f52f12e11b164d11526c0faad5e21dde06caea63dd8a64d7d47bc36aeab361aebacfb9cec35f69a506cf13f36b6a2ebe61537c094f44ed2f358a9f01110eb64a16ff91a51e46f69be5427231b0d6618290bdb290cf500db3da3c65e22db5b5556db1d0d5e1c3402d0e63577b9cf641b6aa8a441ac91829591669be0868bb8be9933c5507cb548d66f1a66a647092d654bb164ff1d0eae96da8630c59983b74badb0266cbbe72a48dec5ac4774da93554584fea421d2a04a8964fade21680ecaf13d759989a3dc154c16ca7bad103196bd4209acd53e3694a647cbfdb452265e68ac0f195ce61c0f66e7d07db3394d8f8fe7705a223b0c602673bd5a86a1a0358190a84fcab830ae1b39408f9c67ace1c5638b3e9ba4c07d67394b0f86e986a9060ba70812f14b02a84c0128bc58a5000cb6dee007b9e12583b51ae2d62d9cc591f16667067b474c0bd40096e070d382e902fbfe68efbd5e26a4928a02d660eb417a9adcd9d3da75abfcb641344ad0db7ad2e0ce0b6b472c0bd4409ae03e3fd9dca84ebd030c03b03d4a02f53c2eb04ac6e3706772eb1d7c894caf90dde730855ad0a1abfaf50026c06caba39ae01e03060cae8e5607a9512531380c959bf1b06449bba3a885ea3ee0f381bedda4e2476e1cfb3222fc7d4eedeb6b350783263eb610ec2d72911361731b1c1f0b5b8d02f2f0ca0fa82bec01b94a01a8aec5819aa06c5b1ad1d386f52d789736a4633d41cbfbd77ca3c9141ab19df4783b7c9e6ca79813000dc0a0afbb72801d607d9300c609e1de080799b124c63500b7235b93f481800bddac101f40e7533219cc338bf83a2fb5d6a4473844f82e33b1c8eaef44650febc4789a891c866d596b41209280c78b60c72f0bc9fae5248ed09150640177772007d4009887ffb4bb5c4a788c1e562cb9ad4f801dfa4a044b4c1ed767989c88ee556806180c87f14c46d94107b012b73ef8caa8a75de7e52bb0285b9d59e39c441fa212552fe2938688f7caa8d6f38ca2b806ad9570cf7b8573b30f9f61125ca16b216555978bd6cdf2f609521b1bacda036fd987ee8462db72f0a51c65c0c6ad44fd23576cf87a2a1efa71a8e0e5357fba0660eb84fa9c7ee2138b84d61be18cd8736178e662e03131f9f518f76a91ad6d989cede23310ca0b6825ee5ff2841f1cfbdbb37265924a7376c5596877cb2e34d50ce7d4eed6f011bc6b61f66b8c6f3370f75607d41ed6f314b14fa2b3c0d60be14b642841406607c334905eccb7439a8e4cb698e2271255c16f635987bfc2abd2e03ee452725216b767c0f9a1d5fd33ba8f0266d81083acc5da64d8d1c68df505bdb14e183582d02773e66e27ce885d7a57ceba030805bdec401f76dba6acdb0ba41f1b5010ad677f44e77b633f16a2126dc231a0c64cfefa9dd07fc8fb78501e1e6c10ec21fa87dffedc5375e4c73acdec15266fb328602191892fc917aae7c9e955527b3c4bfbd190680cd4153e4274a80ad848078dbd08601d75631fbd9a88147b877656df2eb9cfc31c65764b562f610fa1a71b54a36925d2bb4f8c615c669fe335c619599f40c5566ad8d91cc84bdb7337d7bde6626b9e62533a1be7466c0f9914c1f0b99327db5533213ee7064fa6a65672655fc66fa1aaecef4d5cbcc4c689549a6afa51599be4789753ae3cef49931de709971875633b56e3c99da69f54cc4f135338edf7026e2e29159cba45566528e6b99b272b0eb9accb82e9476e9116fc1556602f55926e2e59399e0dacbcca49cd633131a5eca4466bb32353e259981c69533936cb067a668623d33c1d6aebbc6d00dfa6626e9b9ec2c4a8715b0b3983c9b2f4affe5fff3f5e2d97dad4bbf7208132405bb4dfa1b75a39e5b98bd3d006f39c4ff94d170abade8d1a15b8c0ef3e437659489da0feab469e26aafb64c2482c9b4594f016b6c7e3709674e2871de0470fe6112ce11a1c4f926c0f9a74938734389b33598c4facb249c2343897338c0f937f59ce02259c5b8b1dacd5bfe1819be4654f8b63107df3fe9b0c665a83d42f517b1312c8f0e67732a9c99a0acfcd7249ca34389b305c0f99f4938478612e78320b3b37a06e1cc0d25ce0b01ce884938478512e7d70067d4249c79a1c4f93ac059cf249cc343897311c059df249c234289f33880b3814938734289732dc0d99012e720e60cf9061ffae5122a98c6952175c8075021ef07daa68d2891b797c88be520b2773b675b757babe06c3a900da840ae02201b5382ec0e6c37d149c7345828d9d0c82a502834a1046b4f1638b32d317b43a60e561b2a58ed01aca694b07a3238659bb8cb42982d713880db8c126e07167fcc138ae32dd1f00dd81d044acbe694285b499479dbd168e725c00e5b50c2eb588b1dba1b41c3d9e81036809a8291f79626c11c1342982301cc5626c1cc0d21cc3f4119d9da2498234308f35f00b38d493009fbe9643019c8e63b980473540861360130db9a0493b0174e06f31790cddb990493b0914e06f35700b3bd4930734208f37700b383493009dd65c860fe0160764c47f771f476d47dbc8c39f03aa5c312b1215ff73006e9ec3919cce6c0123b9b0493b0294406b33580d9c5249884dd473298ff806cded5249884dd473298cd8065763309266153880ce65fc032bb9b0493b0294406f36f00b387493009bb8f64307f07307b9a04338c733c7f02981926c1249ca6208399012aa05e26c1249ca620833902c0ec5db713b9b628bb2f4e5862f6a342f93640d9271d2831bbf40e6b846f50636780b26f3a5cb1b8efc6f6e8d33615543cfdd2e146586e3d542e8e6a6f89b94cad61e79f8fb7972f175a80776193c4ee09a5f21a7c2edfd2aa8cb618684b85bc3798c4e89f0eef3785bc4c6e97e15449786515c616e979a050184009b6a900bb5cec8361efcbb14c5865f8dcb49a83ec9f5997b53bdc478ad4fab650a1dc08ac6f2025ca01312569911036558eb2975ae566a9b04eeedcba5aecbbb2bd65f58700ec4175d9940a3fca61a008184c89b287a608e03bee948930a60831fc1ea7522156a8578add8d2aacd749d16ea5427b2bb0d221756ba561ef3b2d042887d66545e56ef8877142781b40398c1a65bed80c6fb5dc02acc212c7fddd57317b5b40b5319abddd5cf89a4ff541d999458952ed8b38dcfabf52066eef1fc6af8679867d6780303b1d08476d7708bf03088753226ccb629702e60b1578ef27dc4ba7be011073d2b13c15ab6062373823f4f520c3793aa8644698849374b52f19ce7b00ce5c937092ae4527c3f931c039d2249ca48e5d6438bb8011cdbcbaf4d7748f2291ba65938d23e50298a3eab2a7e3a84eec474cb6c2771c40399a12a5b3535cb607691ada95641315d78226d11873d6f0867116fd2250e18c4d074ab8e3c14cab5c9c2637e65ecaf806da6968a893a1bc0158e58ef4950d9cdf59c456087493c446cc6adf6fbe2739df873be6634aa983d9850a660b00735c3a067fabc4e7032a6b267ad52ed5eaa89bbac8a1ac7cc8d0f604597ebca96849eb7532b48f03ab9d403f838e6dd85f67c501d9d0704f0076a77434e413df1b960c26d90e5db300cc8926c124f4e924833903c0cc370926e10a0d32989301cc4926c1245c3b4406732c8039d9249884abdac8604e03300b4c8219c62d22a70098534c8249e8714c063317c09c6a124cc2314e32988300cc6926c124f4e720833906c09c6e124cc2ae2519cc9100e60c4a98192c76ccd39fef3b61fd4e36a4fc081814d9d99c9d3d7242b9814f1e98ded8c52498615c51340ac09c59978b06bd53c284964936213c1a94a2b34c824968996430f301ccd9e998c5e473476bc5d2ac6a9636ef38327c9900df1c4a7cf09baab16b32b8306783f130bb1bfe0780ce4d87c72607ba7d796cde0e10ee9a0e8479db1dc24280709e398ba9c3b8dddefea0515e68769f8770ea82accff318c03b3fdd0bac129f0a26ec4e924d047f03d02e488f83d798f43b789165fc8100dfc2742d1c70bc92a0630db93f12990dde062aa2ddcc598a1ac69de3760128774f57535dd9e37451f938cdf452b1466d453a6c93acef530280ee918ef231477c936a7bd9fd7511281ff74cc73281c4dd61c23851d103e0dccb249ca34389b311c0b9b74938493f2b4f86f34e5056ee63124ed2bd36c9709e0770ee6b12ce51a1c4f919c0b9c8249c79a1c4f932c0b9d8249ca4df1820c3b917c0596412ce11a1c47934c0b9c4249c39a1c4b93fc0594cddade47df3b9d66f2e04ffb4e73ca15ab5759db05bb93f15d0dd01d0124aa0ea932223b6a34ee5d9005e2925bcae2cd1fdb6dccba6095d5d790f90046a67e0bdb1d444a884c37164503b01a8cb4c844ab85c800c6a7b0075b98950096b7832a87780a1903213a1124e0b9341bd1e40ddcf44a884ce5c6450af065057980895d0dd900cea65006a793adc0df9bc115fe7bb8ef159a202562a1af2454ced109f863923b29d36db03982b29618e60b1f3996e7785c9d6ef95d63ffeb71d11de9f5a2a965b7365670bc4078820565836cd9769f3a7e68bee819ad823b4e87caa4418ca9c445865ced62b61fceae0c9c09e57a7c747242ffdddd54e5465eb57c012d750e32b14276bc403fcb502e19be40c9b84af34ed08f0ed6fee2e206174fe7a0fa0ada8cb4506ee329274bf4eb252f20000b3d2249861fc36eb3a00b3ca249861fc366b2580596d12cc307ad85501986b4d8219c66fb32e04300f30096618bfcdba0cc05c6712cc307ed3653e80b9de249861fc36eb020073834930c3f86dd60d00e68126c10ce3aeb20702980799bd702b8c1f6a3c118c1c1d4c89b785c46b6fd05b2e7af1b66cfec94632700da8c031609787d4e5e8a57b6a83b02b49b61b7c7d305d7c2825ca9e68164f6c0489b066271b416a0ce06e34192e61e94906370ae01e6632dc30ee80dc1cc03ddcdc35c561447b29a8f58f48d722c459628668856746b3c07aad428418e6458883416be048736d95b0034066abff005b3daa2e1b5aee4d30088799c9d6c27f08501e4d89b2258bd7d8afa443d794aca60719fc98ba5c011ffe8d51fb0194c7a6c359812fd7de7ef6fa3a18e03b2edd558ddebbcef6615a232cd6f64e22b54c323f9011a0c5797c3ad62461554dec967e61dcd4ef7850dd9c60124ed2dd3bc9705e09706e3209e78850e27c11e03cd1249cb9a1c4f937c079924938478612e76050159d4c8f933f5e2c6b718e8e0b737f126a8ed5905fca2a1969ff9cace7d30d349a4ea1c4d987c5eeba3445f8d0175b4c948fe71cebf51201779eb053be0b13b7e4b40c82907d8ab42f807caa494bbac784f2a33b7d40897a9a4938478712671380f37493708e0c25cebb40663fc3249cb9a1c4793ec079a64938478512e7e700e75926e1cc0b25ce5701ceb34dc249eaee4d86731f80f31c93708e0825ce6300ce734dc299134a9c1500e779e99a1c2e147d9e6a4b72bef57a095b2837142a112be3d2b2da986e1c14003d9f1228fc98c4f6b560bb2368bc6f4e974d2eb0642afb2bb1e2682f3a743e7712669b9c08805e60cee2eb30aeea3802a0bc305d3b33ac1533987cdb35db216136b0c930ef1c7612282b2f4ac7b66bd91eeb4c03bc2a2a787b0378179bbb109bb05144e685f402407b89396b3af242b9107b3528312f350966181762af01302f330966181762af00302f370966181762970398579804338c0bb1cb00cc2b4d8219c626fb7e00e65526c10ce342ec1200f36a9360867121f65200f39abaed97dba2c83ff9483666f42e40796d3aba92a3d2df95245b177c2973e05d67cef256423b245bdefa05b0c32de9b0c33af87c23d938e535c00eaf4fc762819ced6a23fe7d81eddd604e36265c8746968d5b018fcc1be99b39cb59eca71a0b2d26c5ac583515c4b735b8d360f8b2753390ad6f3277bd641817fc1f05b2fccd75b952cddd1c0f639f7b4760a5b798b1d46abea88a5689eccfc5ada445bb950a6d4f509ade5ab7561af67eceee20c3df66ce0269c2b2936c99c0fb00e5edf49e1aabc19a0a675b687b3da54d860c21d922800c5066de61d23a20d2edcfc81a4a17008bbcd3249c39a1c4f91cc0b9d5249c234289f33780f32e9370e68612672fd028ba3b1d23e9893965e5847217ced7816dde6312cc30eec2f9068079af4930c3e8fef22a80799f4930c3e8fef21a8079bf4930c3e8fef23280f9804930c3e8fef20a80f9a04930c33814f72880f9904930c3e8fef20480f9b04930c3e8fe723780f9884930c3e8fe722f80f9a8491d4a52af75b20ee5a900e76326e1246d1e91e1bc05e07cdc249ca4eb76c970be05703e61124ed22d24c870b601a3474f9a8493748313329ca301cea7d2b16a77a4f57fa50cdcde732bec8bf95e620ec2a7d3b1eb56edf3e77c6acdbd5569be259403e67b6f11b63ff78912411e00ecf4194ac8dd25e472eb210eb8546e6b3687a9cdccdcc580131552b06433992f80eae9594ab0191eb0e5c2f5ab4a88719cbfe235f6c3d86fba0fe07d8e126f17e6acf49dc6f85cfb34794bed8c00f7364cc3a27e32f785be00e9f375e954e3f6f624b44e326fcfe500e50be94039dcfabf8ac12f63c07d3bd2d00a20b3cafe00e58b94287b099433ac87e609dbe35f1b582b5f77cad245165a8e947fcfadd8fadbbe3fd53af20d53083f4546d6526d029a592fa5c3477eb868aba6d9479ecc61f64b80ef6573b64209639dbe0e64f5572851b6ab05a58a29a91be22511228cc34093fed574b43c63bde313fde625e1c41cd9dab6078195be66ee362961fc58534380f6f5741400580bd4290008cb51b2026025c0f8062546fe55d6b972b84e6d2535435826cff6e16b0ab50675f99be62c9f26ac84c89615bc036cf0adbaec4cba9715106667b21ed05080f2ed74948ad935384bc418a8fdd581b07ff9ea5b90b9dfa19e69e7c00a44c0a5ccde688f3fba416c0769e39c27eef23598846345647bc5ed0960be9b8ed9227b97d795a2b2e10da2ed6b83d20e208bbf67ce426bc28a876ce8ed1880f2fd74a0cc8e33e61eee093806507e908e39ccdced6e0ef374504e6e4bc7f41ab7c629a221542d949869bd522caa9f39ec0031445c61dde31dca35e92831c96af32500ec87e9d9d9a30ef67a256b530e0259fb234a7c9c056fea2c1596c7e7cc8b99337566dfb1955a2ea3c19fb3bfb71abe49dfcec02a3f36673135e158109985fe0c2cf4137336a208e3229739c02a3f4dc71652b9e92f29c9b69a3807c0fbcc9cad26c23826b41bc8d2ff33a774245cd042563a7e00507e9e8ee60fdf152eed5f4127c3371ce0fb221dc317897f6b923063937df3a71bc0f9a549384787126714e0fcca249ca41f4326c37913a8c1bf360927e9a7bac9709e06707e6312ce51a1c4f931c0f9ad49384977c026c3f93cc0f99d4938878712e76e00e7f726e11c114a9c47029c3f98849374bd2f19cee500e78fe9e8058da88b5e10d918fa6a80ef279396fc0da71c6623c3792668b6ff6c124ed2ad79c8703e0570fe6212ce11a1c4f909c0f9ab4938734389b33b70b2fe8d12676321a0d4aa766c4f222e397c13630d4155f33bfd2a1e7b1e9c3b10f051f4dd98bd24ca1682cf468679f1de7400f80f4ac00358ec3485db2f7d32e38ba4578abfb92b42b510394558308f968d3b0d0b551652c19e0860ff999e255339e99f52239b8fdc02f0fd5597f34069eb9f9395ab634135f477babcddea74a129d9ec646fd040fa8712656f80521d676b91ceb7cebdabcdc3ece6da0b20fe97da11619e6861962368c9e0912d8eda01949affa5c31bd3d9f1803b112e13cda98a503b0d6e0508597d63d6ea86717fecb341568e50a26ccff81a33de722c912f15326c4d4565086bf0c6c026a394205b806cbd3d54266d8005d6a30417641d2ee9b83a5955d312a0ad6f2a5ad2063b19da8740766f4089b6a975325536c6d3f24d2032646d01b28694c83a323f9ec02342f9f5807700cc4626c10ca363f527006663936086f1eb016f01984d4c8219c6af07bc0d603635096618bf1ef03480d9cc249861fc7ac09b00667393608671c7ac2701cc1626c10ce3d7039e02305b9a04338ce3433f0398ad4c8219c6efa7fd0260b6a684c907a3bc130ee1eb30b601b8da50e2eaccfcfb00136666323fcb5dc178d00ea60125ccd06440e701a06d4d034ad87924033a0b006d671a50c20e2419d0d900687bd380120ebc91019d038076300d28e1e01b19d0b9006847d380127626c9804e07403b9906348ccb536600a09d4d034a38104706741700b48b69400907e3c880ce0440bb5202cd6041b70a27acf3c9b60a7f18e0ed4689177ea486ef8cc9a5728719dbc3bd4ca8b3503acc9484da85eb22e620ed4e89b4bdc662637d87f3c45e4784b57d032a9039c073b80725c81e1a90897b79107646c9c69fb6806cdf93126d2f0d5a3b637378abd8ce62edc59ab85557185baaf54021904109d8dfde70619c75df09a0ec4589d2ff4e48611cd8cb0359bfb74938478712673b80b38f4938478612e76320b3f73509676e28715e0d70f63309e7a850e2fc03e0ec6f12cebc50e2fc00e01c6012ce704ed995029c9926e124756920c3790ac039d0249c39a1c47908c0398812273f519ffc0a5fcfbc15c034d824ab1b13caf1f8eea0793ec4249ca34389b31ec039d4249c234389f36690d987998433379438cf0238b34cc2392a94383f0538b34dc299174a9c2f029cc34dc219ce99f63d00ce1c937092ae2022c37914c039c2249c39a1c4590e70e652e2ec2671965b0f71909c43b5180c28f160f5ee6a4838ad4636b7be09b43f475262edefc1ba84c54efc263e454c889aac233a04ccbee751a2569bf98c66dbdba7157f0485c0284a84ca8141596ba5b03f5e0438fb2be0fbca115a27d99e344f83826034255a7ffb24857121f60900e598745869725ba9107ad79195a16f8002602c255ab50be728b63d7d03ab0bb0cc1deb3693dba2ecafb1113ad1906d45d510d4e6e32851faf74bce09e582c352609be34d031ac6f5718b01d009a6010de3fab822007427d38086717ddc120074a26940c3b83eae1800cd370d6818bd8e0b01d049a6010de3fab83d00d0c9a6010de3b8e8de0068816940c3b83e6e1f00740a2550f5e5f4e19e9e529807e8ca98036f2a25bc0c16747121a16d922d2ebc10d8e6b4baecbfcfb15ed9cffaab9855d1f6dfb750a1fc0ea09c4e8f728d08580dc0555acad81f77b2c7e5e7b0a5d63f6eaf61fc0e510f90e96750a254339dd96264be4808d28d6d867b9223022c73674a9c6d04cea535131a3325d20596fc12b1c53e9ff008df54462f608fbba463fc3db6124a64049eb002221b7fbf0ad8e64c4ab47d997b02ae9cc1cf912cb0c4d89fc59b220472b1a535bbd8b92b27c26ee7582acc3703ccb3d231cd315c4c16a7b9154a66a50d00bed9e9e813c12f0fba6bf629d65f15424098bf34d819009d5397edce02517a2e91f34684437464287f0028e7a60365314b641d7b18b748dd15d4f3bb52a2b47d970ac5e91a617b25359f1ab3bf4c646779e7133b2b047ade092daef908e954c6376529a76c5291596d1f807a5e3afaf5aadee78da612cfc7a0b63f2fbc6a502814a6a3078595afb15f65271c1325c37912c039df249ca443cc6438af033817988493d4319c0ce74b00e742937092ae5122c3d90038e2ec66124ed215746438b300ceddd38133f1e5b2619c91cf01997d0f93708e0e25ce5600e79e26e11c194a9c8f3007e75e26e1cc0d25ce8b01cebd4dc2392a94387f0238f73109675e2871be0b70ee6b12ce70ee455f04702e320927e97735c9709e00702e360967383d41d7039c45e99941da9efc98ae03f89650e2534e603ce0a5c21295ec55f291f0c18b0078c594f012dbaf5b5532e17364381ff4764a4c0119c6c5ad070090a5a68024f4ff2003f93800b9d4149084c36c64202f06209799029270511619c8af00c8e5a6802474882503f92c0059660a48c2a63719c89660047d3f5340122e0f2403d902805c610a4842471932900301c872534012ae512703d90d805c4909d2df2629840d20b24ee261a0ba594589b223f3e3073792b2a42483391fc05c6d124cc2fa9b0ce60200738d4930c3f8ada17c00737f9360867163a9490066854930c358018d05302b4d8249382e4406734700b3ca249884a3956430470298d526c1241c432783390ac05c6b124cc2fe0f19cc3d01cc034c8219c6e52b7b0198ebeab633698bb2175511563f649bf1d503fdf2f59428f974ed14b1da87ab3843da6699f5325f2ecd5f238347b65a92bb122b781bead20eddeb7609ed906c5389af41963e90126577e6ddf955bf247a3eab10dee8956ca910b6927602772b15d873818d1e4409b60ff3ae3bb7f74470b67de602b9634bfc2a298cedce0780f51e4c09d9bbc5be0dd45e403d831568078dc3fbd5f54c50391d928ef235b14653281bf3a018389412a56e678fc44b5842b46425ec0ec04a37d6652bc0bdc49f30c3932d967e0f94a387a5b31c2db3945808362bc71b578458c91a57d9c0420fa76ee42f12ddcab43bb4922debbb00949c4750c213eef06c37f180daf980ef95b094950a6556592f976ec73b257405a08f4cc710496253c4c34339deb41594a4479904338ce34d770198479b04338c33eeb70198c79804338c33eeb70398c79a04338c33ee370098c79904338c33ee370298c79b04338c33eed70098279804338c33eed702989b4c8219c691cfcb01cc134d8219c641ba2b00cc932861fadfcc8cb00a22ebb99f06709e6c124ed28f3891e1bc13e03cc5249c234289f32380f3549370e68612670730c6799a4938491d66c970ee08709e4e8953ed82c077d1de7e3e179a0532f719e9c0975317f8c8ac6f2573f09d5997536a8eeac4bd1db28557e341463e8b12653beb64ae75c2bfd1522a44f1098be5ac42cca997b10dc2d1ab4c9c85cf221b008b3c9b12634f16bb31fe0cc63f7b532c78700fba7cc6b774e673e94572bab784a561937c32b88702b8e7a4a3b4e483bddbcf963bf54165732e25be205f4d27fda41d9987e73280f63c53d192564c64689f0599fe7c4ab4bd3525aa9f2f1284f7e323d9c07a3753d7fdf19a512aa6a4ee33974488300e054da80b2831666830fafb3423e1b41bd9a719ef07567aa1b9652ca117085919fb3f50c65e4489b697403b5dd8272f4db9a792dd562d11a294db771df92c91b55c9b02c0179b5d34103ade90150d4f82a2e1124abc2d05dea2ede8d3a2dd81655e9a8eba1ff39d9f2ccad20adabaff2aaababf0258e0659418bb0a8c53d83a513656b93e7fb7bd797af606b679797a464773d2dfdf27c33704d8e415e96830c5563a893499089d13c91a4c5f02b45752a255ee0cee4ea93d66ea8ca2867b586f00c8e65751c2ecae81597b5b34bc60d700b0575382dd41821d61fd5fc9d4eefd1c71d83f15fe1c40784d5dce30b9176d117632c9aaa31f4199796d3a50622d4d288eb4fa21b3ca99c02aaf4bc7986822280bc538295fbf39c7fa4b4de155d236e8afa16ad057026bdd4289b81f732f312cb59af665429c2d6286045fc4ec855ddbdb9af87300e8eb294177f6805e23269a976f77403b8261e81b2881b617415733be2d0b57613fd11aad724d9a4c16d5d6aa50369f3a8052f6464a90fe3fd4486897641fcce90a32fa4d26e11c1d4a9cff02ebbcd9249ca45b0292e1bc1ee0bcc5249cb9a1c4792ac079ab4938478512e78700e76d26e1cc0b25ce6700cedb4dc249bab88b0ce73c80f30e93708e0825ce2300ce3b4dc299134a9c4b01ceade91805cd16bfed2377c9e5ee62e11e48de0410de5597a3a0692b2bc9fcec0781def9dd94285b5827f8b640e11b3eee026cf09ebab441f70851187703390bf4c4ef4d5789680f217341eb6469988679a11e54c3c3df036bbc8f12610640384d541fb3c5ef03c42b2bac6b459289cda680716f0f3e5c1c668fe4f1c042efa7c4db0ee02dadd9765add0efbece5afc04a1fa0c418eb32abdfcb53596bdaf64a1c4b85762040fb607ad1fa594c438896ccb9a631c8fc0f998a96b4f54986f61e60b50fa7a3e6cfd9ee3c42f200c24728113a8b10eb60c93699ab7636c0f7687af0e57a9af3615ef1fe11c0f718253ee5789898134d4e28dd68ee03301f370966183b95f703984f9804338c5b4cde08603e6912cc306e31792f80f9944930c3b8c5e4e500e6d326c10ce31693570198cf9804338c7e6f670098cf9a04338c5b4c9e09603e6712cc306eb2ff0080f9bc4930c3b8c9fe1300e60b943095bfb01fdf0d42eb249b1f9f0a86db5e340d28a18592019d0680be641a50c2de1019d09d00d0974d034ad82322033a19007dc534a084234964400b00d0574d034a389a4406740a00fa9a6940c3e805371a007ddd34a0843d2432a06300d0374c034a38b24406741c00faa66940094797c8804e0040dfa2049ac1826e3a45580090cd649e01f0be4d89d7df57dd099b4f641f1efd0fa07c8712a5f2f8506b804b98f29673f6f1740f98d8a2c93f95db8f0a6d04f81bbf4b8956cdb7e7d585bb029923620173f0bd479dc9e7580fe32edb0bac904ac49a75be434df87c8fda0194efa76314146ef3a3df302dbc0eb2c34089f9413a4accd8ba3d112f39c2c111bacd5001da6d946895eff1f09a11fb1256c6d4c62961ff36c70f20bb7f68ae858671bbdeef81857e54972d4ff7a65484999dac1cfd1ca0fc9812a5ff3d3ec23897940b707e6212ced1a1c4b903c0f9a94938478612e7a3a04afacc249cb9a1c47925c0f93f93708e0a25cedf00cecf4dc299174a9cef039c5f988493f4131164388b01ce2f4dc2392294384f0638bf320927a9871d19ce8300ceaf2971b662cebab634af2922eb4eee07e07d43090f7e61ab400cc2ad617359a91cf8b0f7902d15028b8400f829c8ca740cd7910d868c0088bf4d4776c7327bec17db092735c8701e07fa45df998493d4739e0ce72500e7f726e124ddbf8b0ce7f300e70f26e124dd4a920ce75f00e78f26e124dde8940c671f3021fc93492dcf31a174a51d00acf36793708e0e25cea600e72f26e11c194a9c773307e7af26e1cc0d25cecd00e76f26e11c154a9c5f009cbf9b84332f94385f0338ff3009e7f050e2dc17e0fcd3249c234289f35880f32f9370926e6a4186b31ae0fc9b126717e60cda2d100371c562788e3b213a9b4d3aeeb3e4837464aeb29d40dbf31f4aa40399f74b447c2cb4c4e2c11d14553c9d4d28dd1ec94e50f9ac420c3aaf67a4bec9fb47a996d080aee8bf94c0dbb3f8ebe2dd95151948b24da5734061f09f2920c3b83b777f009235300424e1da23329077009011534012ae8a2303391e808c9a029270130132900f0390f52841667b6af76ad4fb18df2779b2f504ff84de6a71c6a39aa6ba7e1faababe3fa8ebeb53e257ab3f121dc5277477201bc33f12b4541b98049370bb1632984703980d4d8219c6d9a52a00b3914930099bf56430d702988d4d8249d8902283b91ec06c62124cc2e63d19cc0d006653936012b64cc9601e086036330926e1b82819cc8301cce626c124dc97810ce6a100660b9360126e694506f37000b32525ccee2c76fdfb74b105cb54eb77991cbb9f6f09e082b9df72b8bf4e783873c0b6a204db4d809d693d604f81c09d6c16b11502e224b1cdc00a2974aa75e4532484fb3590ed6fd308606d4d89d5df07f7c2b89dffb120ebb74947398a7d2d2e8dd374644bb6db02983b50c20cf679a8306e7df10ac8f26deb36cbdba2c83716209b4c6e04c63bdb51a2ccd0a0f4b7f91a616f9eac723a171402ed29f1b60525ea5ad158e2ab93d4961769d9a2856cdbb5134176ef5097d9ddbd831d61762743f913b0c78e94287b05ceeea44bbec8327c3f509e76a204acdcc760ef096bf29337a2c8706681acdf9912a7da1630476c7395e625b3646dd0c120bb7731a7e4249ccb242b399b818cdd351dcdf9d8923391067d18bff67a08b0d26ee9b052cc77c4dd830fe397bac681f2b27b3a06ef92e97412cebe93d9e82d006c0f53c1867193c02b00d89ea682252c0ac8c0ce0660334c054bd8a727033b0980ed652a58423f1232b01300d8dea6820d63036b0800dbc754b08473a564600f0360fb9a0a9670469f0cec4600b69fa960c33875b20280ed6f2a58c2b95332b08b01d801e918a91ac9eae0031664f86e05f832eb72a4cabd573861d94936e8f72d184e194889927bca1488179632be1e74b95461b9f08122f4252143d70958e1207346a2c2f831e9b900e5e0744c8424ee611fc6a5349b41a61e62124ed28d58c9703e03700e350927e936c164383f05388799849374c77a329c1960ae29ab2efd99bd132261746aec0160669b0493b0fb4806b32f8039dc24988403c96430db01983926c10ce3cc6757007384493009078cc9607e06eaf35c9360124e6b90c16c2b2cb351038ff0a931c2278ba60b6fbc1433673ff961c2439eefafc041145be733c5805a155b6ce1d8cbfae72f05f6b1fee9ae47c44703f80728d788ab5c5e8990bdd2bacb35ab64d97ce39991dc205a4983c8145dd97c8b7995f50cff2a280f7d3d2b64f67ef9fc5ba16a394fb54092293e2838d7ba56cdb807200f817f41948f1ef018bbf7d3cf8c34169c4ad95a498003cc94baae65f6ae13336427bacc8a7391d0a4c27aa6be08c76e1066465a8033e5193b430c44560aad7838d3a45daaf5077638f34473b21c59a39019696a3d33558ebcd97b62d81698e9fb6ba999c27c0a85a43542c34aeb5a7b40989bd67e825c95eb39186a6b970cdb120a047dc8b5b6d19b4c91b770cded3bea1d3b5bf0e7ec31496ef091481b69e3fccd59825e918c2ddf8a4da542161fcf89e459bfec21e2613583c3c3e40e232be599ba5ebb4c6ee1f1a5e571338ee8cbb5f294e5cdda62e4705b2a5664950aa9336a8d69edf1c3f379f338a99295c9d3627b8eff2898eed12cbec95d64780a6caf768d46f390a34435698bb899d578fb9ecbecefac948a9a677d20fb6e2a4a7a28af4c849b35c84cdb4e5ddcc7b86d7b70b2b6ed5fa3b194b66d4bb3e7113db2a725103b7d3a78e3ec3cb546b611942dd8399dd78b250990e82e6a7d5c5abe75b64cc4b54c485dc9d40faf33ed7f1d23cdac73d83698633d5f22e4fd3929ca1afc3f1cebf5d537c90400 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/f39412787100d5049946ae8a98e0aaa1.asset.meta b/Assets/SerializedUdonPrograms/f39412787100d5049946ae8a98e0aaa1.asset.meta new file mode 100644 index 0000000..2d8f4ee --- /dev/null +++ b/Assets/SerializedUdonPrograms/f39412787100d5049946ae8a98e0aaa1.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1af2a3f57cb1ad64887e6139b78b8c9c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/f7a1ccc48a868c847b387484c6bec599.asset b/Assets/SerializedUdonPrograms/f7a1ccc48a868c847b387484c6bec599.asset index f4cfb47..05756bb 100644 --- a/Assets/SerializedUdonPrograms/f7a1ccc48a868c847b387484c6bec599.asset +++ b/Assets/SerializedUdonPrograms/f7a1ccc48a868c847b387484c6bec599.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9ce9521b4710806705ba2c40200e81c1c4ce6539b691001f712edb086ce3f80ad78f38298c41c44a84204876d97984bc51aaf218798c3c40fe25ddbdb3d0da9dd99590062462a9d895e6e8e9fe7aa667767645282be0655d81c39a581279312556c596d81565f89487f30ebced6f4efa33b10fe79fe0b8017957c4f9809af8ba688dc27111be5544156abe169b702e52feb228c0e745a85b806f98ba0d7f0528657543a555312f9e8a27226d0d078858a34a159966a15d560c8e73e21de41648296c244b5969382c434e85f2764069a7dc73f12399b503799b50675f9440e64b92189b0f09fa20ec53549e23f2dc057f71f9392ccfbd2c2d26cf7d2cad97a5e1b947ca1b63df91c49fac0d3c271572fb595a92a5f9c825d770b94efd0159fe2cfb8ee794c2c6942c3b2ebf87649998fccc5975cbf39042ff619636c4d2f03ce8d27f50eaff974bff1185dc344b1b61693e72433997dc5126c3b1e10c2b8332265cf909997e4ec5256c510f7f007d6e43ec892c81ba24ea1f8a4ecde04188a22378c0d7456ab60add7d0f042846c22a8db3aa981533ca913066f530bdf374dc801245123ae96de20f4f13a85c09de05368c2b907e9fa2000ee422e44c894770c65a2fc4340ccce72e296bd06c09424141acc0718fe4bd00b5bd25834cc221efaeb30432ed88b403290ed03df85e220d97e9f886342d90f68b9056a5f85886083907e7b7d49ad7f67df8ac6a73452253eba80e4cba743bfc396e9a076b50fb2cf5e7f71e39098f50989894c3b03b4b51e2778f27de33b4830c4e2e8b52c63421b36ad2664496e69f250fc1c66df45aa8eedf36ef1be29aaf2d6a32e8ee71b2e0d0c3b713ff94defd1dd90fd79a362bb2b4a4980830cd0f2ccacb58231e09fe2684c3dd3954d48ddf52e1a7297df918f1dbe58a54ae7107446866aa75002d7f9e408167f05724b52be23bcaaa1cc44127e639a67bbc958bc8054e46319d0629ad431e52218f1d37f2e018e3873c7660d721727ca909c635048374d011ec5211a435dc0f46097a1763cea739a8fb0a48bca19ef51aeaab166ffe4c71d179d5c554cd33413ccf2b97948d69a423dcad209c43c23d2a25e32e25513f8de0b0ca75b4dcde32eaba15f1585ee2e2b455809c2aa460ad57327d159644d82111d32a48b057bdbad2feaeecaddb957de4ca0c1c5bada1ceb5119d6b934dba36aa128c81a25f112cfe859747785c2f3ca6ea3789e30e9a4f2128fd2c97d28d07cd81ba7b454a133083dad7f93cae720dfa6b50357562effdd53555ae506f2ba9ba4454efb533ba768754eda232ebf0cec19fbb7d4cc7ab517b7baa111d123a1d86553aa4990e790aa0d8270a9ea5c333ca2940b54674e951f5624a5c39c65e8c79bb24056d68bc1fe3daf3b27bf25777e43475e4518f71c12ae8ba72af0a21256e1b457818701728b748eef70e495d3907de63daae7c4d1af8631ead3b5c8c11e5cf8430a2a5ce137daa81859e385bcf4432a61f25499de0f12605f7eb044f34297840251803cfb97a04a7f48253bae035598f609f4834a8128c91e803e5e0764b4eeb250fe9209f6f12f2b04ef08526058fe8047fd8a4e0b44ef0474d0a1e5509c649fee37a04fbace1c674fded13a1982c57b51187c79b299a507721eeaed3f55e8126f70d8af3580f7383a5d45766bd2696d6ce328d0c8fb33a0e9faa387c2f9c2b31e7ba8a6fd2dbd7b838d36cd3763ace348b07251760feb1ef902d911505b0eb0d95b6b9e13e6dd575776e8d16424538be24ebdc76f39d09771ee7d50891711d918b2a22b704bfa0f1bf9cb1edac909deb24fbadc2977e36add11ecf5643f64ce8ecc9a8ec2918f4f072d31ed6f9b7159ccee9385dd24504939cca50360f4da14528f7b04eebfa4b14de968541728124ef434dbe8b98a5854f4ea8765fd437f4b0ed1df00bc6a295039f06dfdec3159deef69e77b57bd43b3d4156a8bc36c5fcc6ad0bb6497f572b2a2d726401695a099e364b2f73af86b2b428bd7cc4de14ac053e0312e952f7a1c6f7b46d014f284681001c09ced5f2a29c9e8b726aff0d0a04b617b4a171950438b7435a70871b3bd95d00b54597391578e32b1a0ee5d00f574dc2c285df538a82b6803c15db14bfc0b7ad8e4075c54254d1b04bf8bd960dd0a3dd15f286922405efb7a01ea65609b02bb4d0255bbb693ec543432670786502fad4e14ca69e8172d840f67f3ec9e4b0b3e06c1e19736232c5826993b160447ad65e5394a190df2a2ee76ebf99fbc7f19a3891aac7b8a3c48a011656678e03e5a6ec8b55df85a04194515328e30ce5ac4994b85d6f63b477414b729fd418b2842964dd0cd93593c870cbcc7daf621e32abf0d779d8ba18b6eb26b18d2be25f3dfb3b37cd411d330535cda0de6847a8373a10ea08837ab31da15eef40a8c30ceae7ed08f55a07421d62506fb523d4d90e84dacfa07ed18e50673a106a9241fdb21da14e7720d43e06f5ab76846af08ac818d45e06f56b93507b25546c789b903ab28bde3dbbd6810b9b022718b86f4c820bba2ae7ca1bed83715328a30ce5ed934459bbc16170e231b6c1916028ef981ecece0d66e761b05d8a89a8b231707da6c08519b8bb27d9073b7fbf32c650ce1d074addd66fe7ef57a618cabc4994f53f30dc795b71110671de24c40b8afe884a54e9472365f150fec0f4b4cddf210678c124e0a4d0ad21cbb248e70d718bc1bb7792134f6db4347881680ce51986f2be4994ce4f1b74134fedd392460775da14cc1e06f3413bc134d8338dc11c6430174dc29c54c0ac7d8a50ffab46a3fdd4d8ec3e2a4ecd933439bcd3ff90778f8cef5dd18cf6367326e0facc7e9c6540322a838cc7b44ed9009d6cd9878fb664e9971378bbad91c7eafc65063f77f22d62b0d4a3a4d432dfb6e2591a95a5cd3c57d3e3e3952cfdd8e434dbff48d8ff0f885ed84dd3f4d4d52a78de168e9baefbf46faaf6a94cf83f71c4e403a24b0000 serializedProgramBytesString: - serializedSignature: fb60fc9090f9d4b3513e99fa641215c3c32968a6f3527775e9aae001ea70424ae996b91789271e533d0ad9b11c9e13b5de8be35354390b84af7a2be634f83b04 + serializedSignature: 9a49548a44bd71e74df41e2332a851f04a9f3cba85f04f68f251af3399e7e90dc3cccbd103e2dd557eed797bfa34403a2b92bd478b09f9da81583e9498036d01 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/f93b2413296c89f4a88ce5abee1142f9.asset b/Assets/SerializedUdonPrograms/f93b2413296c89f4a88ce5abee1142f9.asset new file mode 100644 index 0000000..93d25f6 --- /dev/null +++ b/Assets/SerializedUdonPrograms/f93b2413296c89f4a88ce5abee1142f9.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: f93b2413296c89f4a88ce5abee1142f9 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d097c55c5f5f8e7b1effbbe86fdb1268410401181b04556494014104212209290988545417107c57dc37ddf77c5adb5ad6d6db555ab6d6d6b5b5b6dabad555b6dabd6b6b6feefcc9dc93defbe39efbdfb6ececb0cff5ff8909bbb9d39f39d33db99e5b6c866ce4f6482f36b355bc90ad824b68a95b16ab6ddf9abc0395639ffdc33757d05ab758e5b9cdf25cebd092c2bc99bfc674ca49ff3bbd039ab63f5ce9b0dacd4395688fb45acdcf9bbd079b7dc39e357373bffcb9da722ad9c9756b1796c395bc6fa467a2711b15abc5427af4578bc22ed9cdf73d96ee76eb9508a07922d6ef5757e153977eac4bd2a4769f5dc5ab65e44abcab957eabc53cb2a1d999b84c476072731f107730fbde5b18f3cf672feb7977fb7947fb7937fc3e75bcb63df149fef07de6b0ffee6846e4df07e7ff718e1e76d9ce319e09cbffb917c6e802bafc5d604b206c9e360791c22659e9982fe6de5716892f82692910564a5c2ac9d3c0e97c76152df7d69863fd26514b911c8e32c5b017d8683b0db83fbfcda88107157e9d8da978ed2065a1c92e9f7ae7c7e943c8e91c7d152b6f34ccf3be5b5a83c0e4ca2d758f73d369d7936eb84d9b2469e8f93c7f1f23841ead656ea7a16380fab8b4ad38952661b19c6d99aebea797eff1c793e491eb37de995239f3b579e4f4e519f54ec4fe9a474390f9c3b1c5b6d4c204ba57b7b5fbab797ef5ee6726cf58c2f3ec0feb47273a5bcf3d38847075f3c3ab8bab48ec63e975407257f8a94d351cabd009c73b957058c5b2bf9de61799ec792976dbd53b837cd95d34eb19eee86d3a6977bbdcd4c166bcbf949f45469dbc997b69da4dc4a2957c57f867b1e51f2870239fcfdfd3eb99d7d723b4bb9aa8c989ca29e47c9e331f2385b1e8f658df97894aa4714835932cc2e2cb60ce822ef1fedbddbe7b280dc12a5d11c5f5a0f94e1764d2253bd3f571edba7f8bc7aa62084cef3e4b1438a617690c7f921c29479abdd273e5b989e44e602976fbb7aa08323a7fd1e79be501e17c963a1e4dfc367073d52b08364ba1c277561200d1c5d3a7493e78be57149ac2e6ca94fa7034da753a49b94792138e7c7eef2fa45e09cebbac20da7c30b52e632795ceed379059dceec78f7bdce9d806da4f25e22fb5ae9c6af638e2bbb63b1bc5ee4d36d9ea777bb79e05da5472af9619564d1cbc7b897d441b15ded7bee2038e7c79e5e78e26fe7dd4ecab6fa83ebfcdd8bc139bf5f9ca2ae6b58bccd72397d40d87d64d8b2fcefa4d2f344169ff774eff2636f70adb794f7967cef24165f8fa9e778dc2e01e7fcfe0929c66dad463f27dcceb313bcbb8ec5963f733d7b68fbbabcb65eead397c5e6adbef27e96f74ea4525e3bd93defaa74d920dfe907b8f473f5eba26c71a33c96317d3dbb097090f9d1e91f36863de84d79ad24415865f299725fbc577a723af693baab726c338bcd33fe67f9b52df2b84d1eb7cb6395f7ec18d92e67a7c8a3641551ed0759363b7d5def3a3f0e90f72f05e7fcb9ad9eecde2fc96bd53e5d75e9a9fa0d2aeeba3220919d9dea3edb4fd94eadcbb6eb733eb91b5862bbad73e58c55fdda7a574eb75601e5344839aa0db4d33defa6f4d9218fbbe471b7e43890c594e5ec34797d10b09b81e01a7fd65fb627d32d11c73dae9e8dedfbbdf228db8b8ded3bfeb72a23077b69d5d8e63b1ddce3e7b3407c61fc12e9a27c089d93c4a737788e1ff785887fa27baaff28fb8d11e5eb380f9c3b76d263500259e732ad9df654f9f03cf77e776517aa2fb64f86a17c25d09654df280bc45bbe1f1906aec9fe7064b8772da2cab1fde03d1ea7cb7df70f0019bafb17021d74f72f92d7af7075efa9c23be88bcb2e16abeb301653ceb08b4138edc13330ec2b03a4a5aad746f8d272844c97f713c8ba549f96bdbe90e797f9d2f2725f5a8ed4a4e515f2de28906ea3e5b5d12c3e7dc7000e23e5bd2bc133302dd4fdab805cddfdab810ebafbd7c4a6656fd58ebb16494ba83f4ccb43f1718d8cf685ad744d9496d7cbe375f2a86bf7de208f5129f7ea14e42a9fded60472fbfbe45e9382dc9be5f1a604726f41f44d273c65ebca57a3de3d0f9c3b76dbe78d04b26e655a5befabfc06b7b1585bbf9dc5dafa58166feb77c87be3bcf4172cf8b5f12cded627003b192befdd099e81b6aaeedf05e4eaeedf0d74d0ddbf87c5d87abfd9f2fabd4c6feb507f68ebf7c5c73532de17b64afb446979bf8fb3e23b91c5f67326bae9d3cfdffea9055c75e13ce0ca1f9723cf1f94f22649f9d782737eccf6859bed86db5ffabf06c8360293feabfe13dcebfd553be121a66d6ff52ff63df7308b6d4f3deae3ff98cf56267bf6d6189747c03d1837e5f75475dce3f2fa149056b9e09aaecd958ceb13f278d8c74ff9980f8173fedc53407fd57f79521ecff4ee75573e1515a74e408fa7f5b62274056916b88da4e2fc4c9238072993f2586c9994e7dac1c044fed9e7e43307133cf34d79fc963c7e43ca9fca62fb2f53e5fde7e579beef7ebebc7f93c7be4f16d043c9e6ef5c97401f15ffefc8e377e5f1db329c692cd627368d79e58abf8e48b71d9beebd4d52a7e9b1f613913eefc1ca2e942d9624b10fe583f99e3c964a79337c0c662460104d31ac04f18aa8bae14270ceef7f5f9e1f25efcb7646e418dff3ca07fea23c9fe97bfe58dff3c7cae765ff38322bf679f60320879fffd08b5b44f9dd5f06d754dfea158fcf5055b6cd8e0d9bbdca62fb77aa0f37473e7703780f3250f7659b2832d717a702797e1338e7c7793eb9ca97fea2efbe923bdfa7ef8fe4f1c7f2f8ba17c7096f8077004ff65aaccc8436fd432963817ce76670eed8f4d044ed7ff5aef46f47164919b7807347465696ab6f561e2e2b52e8e3b7105ce7c7e3e4fd5bc13997bd3f817e2fcb6717fbe2b658befb420aef4a3f7964a92f6e4ba58c2fddb80deb9640d64fe4f1a7be345436cbe52dd7a4abf277bf26cf97491d6e03e78e0ec3ee95cfbdc1f4b6bdc4f7feedb1ef0f5763823f93c79ffb745bc1627d61caa7f74bdc26d9af7cba1fef3dd3a8df2f7cfa1defd37ba50cf70ea087bace8f452cb68e527ef45fcbf362df7dd54fd38db527ca23dde5fbaba4bc3bc1792b770a03973542cd05503ee5dfc863aa75d76fe5f16d793cdb7bafbb62fe8e7b3ef28b0472fc7aaff6e9bd5aeafd8cd45b8d77fd4e1e7f1f50ef3fc8a3ea0be9f47ecf3d1fb524811cbfde27f8f43ec1d57b648d64a0ecfe8ff2f8a7807aabb2edcf09f4fe40ea7d6bea7ab30fe571328be95335deff88797daa5465fe2589ccbfa621f3e324323f4941a6accb236b586c9b688d9b56a307b9fc462b1ff6dfe471164bdc5ef9874ffe8952fe5de09cdfd7f9f23f95c77fc6ca882977959fff24165f76c9328b7deedd9ba8fa257f07eff1f3cf407c92f97575d7aaa4bcb53e7e6b5d7e63d6c9b8a939388a5f65127ef2b9c83af09c0a6b3db826cb91c8c9deb5c87a708d1f3748ddee06e78e6ed1777c7237cae7ee0161f36389bc7e2f38e7efc9b92b914d2c760e9a92570674da24c3547d9d7ff9c228655e59eff08adeeae3500a646d04d7940ce8aba802477efd3e99068762c34c9a06ba764e398b6d37ca31afc8665ffa6f76e33b56a6ff5895feaabd5f9f386c2597fd5b9e6f61b16d723536f61f208fdfbf3f607cb6fae2b335365c213f595bf44b797c30384fe127e0c7ffcaf04f91e13d00cef9b102c8fe9fbcb60dd844853c56caf765ffa1d146abc0b355e0597edcce62fbeedbddb49b70c8275bbd572d9f7f089cf3b0be92e735f2fec3f2bacaa3a7021d6ac0357e543e8d47c0b9a3c3f81b5dfb995083845527df7b149cc330955d3c06ce79dc46c63e1f6990cf3d0ece156328e7099f1c9f5e911d208e6a8cf0c924b6aef2eb4470cec33adb8dfbb87762e3944c9ef69a1ca7e57f8ae34e1fb79df2b9d7d290fdb994a17cb837837387d1c47df23955f67f96240c252f228f2de471b7947f189cf3e3692cc6e62372ccb5d1f64f6731e5b33877f49ab4c227678f4f8e9affa4d265afbcffa4ef3d35c6fa99bcff949b6e93ca62e39334de31d75a47c41ce345ac9c95b01a962d2070af76aa53fad59bc927f373d16df82ffe3346045bcf763baf96eb66d4af12f3f5ebd91496ab9d51df5fcc7554a11788df25ce131542e8d391b8209e8d0b822b57e9fc2b07cb01ea9ceb0bc56a02be20a0c2b933892d718efcad8d4e1370adf32f56ca6a27d84ad6e09c153bbf6b84bc8d8edaf14f268b125f3ae07f67a523d35dd950e55c51406b9cf34aa16191f8bd43685a2eb42f74aed58b7516dbd91636d739ee12a1c5c7bdd6f95b1766b144a6d751bfc001bbee2ea350c934cf890dd73e5bd8e2ffa54873a40847dfe6e9889b0d5b658b192b17c6a5c4ff31740b19ee88299432260b6491986bb92c9b9f0a674bd838c6c7506fdf2eef7c9697302e7a323cb9078a187829dcf2e392872fbce7c09f5bc7466d0acb16c32f8392442d11582e2f2a6616068942ebd6ad72b8a27efc111d7eb134a42883f8dde72ac473c113a08da8fc6213400cad173ba5da0a5079ae12ca570ad5fc9129162ad74b25bcf32247e4765905c6a5660e0fbaad4890f8ea3659a4b02469a14b12e1b92c6e961c812dc04b9c28ed1a63e1254ab66843f54b60ba5858a271d552b5b064e6faf0f045395fccde56fddc93cbb7175ffec1bbadf5e9d341a44f3aa16229d45297421d329d6992d71289d2a76363bcbcf4e13f7a869d101b4fa60346b0958e60c74cdb38bf572da4f03c1e9c219ff638de5ff0e80176418c30b90a18c2d61a84391c61578d56ac757b9f565c2144721b5de2746a9e2a393de3e663627d7d085aa3c6dd3d618d1ad4b4dbeae88909b21b49e9a99e6291d32558ecdc2b719e2f17cd4e7e7d8523b1c4099bcb9b2342f07a97b16f2426cb57b84cf493d552ed29a88e04fddeb09a61c4db6988e7707beda5310351c6f93343773c33b4c7b259efb0d9ac0326b94f58c91d31c97dc34aee8449ee175672675db611eb13d76524db780e16f5d75ce7ddad4e6476885e7383f3bece219338bbf44f39bb0c10d9258be9dc44c134c2b249175ddaf18b03754afa936e009e745d31c183420aee8659dbe0b0d6d61d53794848957b6082878614dc132be4b29aa090eb85091fd604c27beb84f3c26f388b6f827ee5fcc409ef840bef83693e42a3f990aa168134ef8bd9dfc8b0f6d70f933c2aace4feba7254e4d0b3325c8eea9ddb0bc53e35e56cb9d3843a85b95e49156eb5f048728d947773a573dc2cb4e0d7b916c99de2894be4d14cd32f1505cd7c6dd9db5cb1e0cb4b5a889a212a6a063e6d7955a32762be48810a11d224ad363c04ec79c562a9d882a741a4766ba4f73c56846e161bac861b809534e33425cd9bba622c41493310cbb2e3c366d9413ac93ccb4ed0d86a0eb7553eaed541541671e18cc5c319ac2b1a444d785ab3160d6e3f8bcbdb2cc69b5c79cb18df456aa730d56d8e01ef908653ec3c53eb84512e8d3c4c61c033d5607f079eb93ffaec902db2c3ac14b20365acb00c30446749bc43ca2711c5b9487925b4d2e97f15b00d221b9e2a2ebb4e4f7760a844f4754f738e6ae828cededae2f63654a70d6fe773af7fd2b6504f5c7016263837a4e061581e9f12368f0fd749e6a50d9f9a1cb6853502537b6a58b54762256abea644fd3212ac441d85099fa611fe5c8b60c247eb8473639d9e8a8d24b0ea3198e019ba3cc6e358207c7b59ceff6ae70dee492a11b93f4b54865e6990e5e4f50ae72f5e614f00cf573b4fb843b541f48c6246715458a3188ba5dbd19a74fb3460ba8dc384cfd4085fd43298f0f158da1da34b3b5e4cf17a83374bb6caba2db634cc1283e659629e4483f051958994ab13e99ac54e770adebdceb1de793a4bd40395e25e96d854b15694b541d27402a6ff2c9dfe1d80fe2b808641429c88955bc76acaad48c0726b924e386ff8cc6648c3670e4ba7e1938d619babc3c69b49f39de60b6fb93688e78b84019437b695cb9aa882ccd1e8952d3c08db597336c8786f81cf2aa9137f7b4d141eb6379e19a6e1c51729f91b5eea47dff0e2d3b8a362316826b4c71a5893b14275bea6508d04295473b1bcb000cb0b0bd3ca0b537436279c4b35cd6a73788e5a2964f39c17bec1cf1786b5f4f7fe85f72b2f05cb6a2a1dc78bcd37ebc4a6b92eb93a5e98f2a1864d60775c17bec812fa3c5128f2442635c7f2451e566b1fa7a9b50fb70e566b4fd599acf02ad636abc9ce13123261b68b75662b5c9ff929247e53ea39544c3eac13856a992c54dda27ba8d821b456549be5ce755ef0c2fbe3c58e97bcbdb440f0ae12e479fc4a44bf1733f225c2c8331d4fccd0f3b10a60a9a60208d4aa9e8665a1659a2cf465c02c341d537b7958b567606aafd0a8bda74d30b58fc2841faf11bea46d30e147eb84f38299cf7208d3439c8909e6b383e29a9bbc8badfa09a5be9ee226d15750fdbf327165b7f3bbd2b9562a44648989a46afc3c8896c7606c8b356cbb05643b0b43b02a24db637582bb30773bc930e36bb3758279fbeb0486b4bff842c3e0edaf3918f61335d86f0d887d2e96cd4f0a9bcd0b30c96bc34a9e87495e1756f27c4cf2fab09217e824f3443c5993887c0a4990445c8809dfa0115e1c50f8222c636ed4954da318ef727b8d54b7fbe4f9354ad86621a5d6f97b87ac73cb62fc23dce751213bcd41f27921a667894e4f77dd0a9f25c4db1425c287c6435cceb6050af5380cfd260dfa8301d12fc684976a84bf1f50f8128c57998e57bf24e95a2626977857273b5783705c8a6953aed3869f7ae916249c6518d2cd1aa437760886743916892dba4870b78d8bef2807d932e1f02b916b6e76886a3c38c61598065b751af0926d4963c360459acd82e331a4151aa46f0444ba122b914f095b2217616a6fd3159a1d83a95d8ca95d1956ed553ac9bcd551c5905607f70c066f75acc6c2a9c6c2a9492b9c1374e17052a78625b5064be05a4d02cfee142c814fc484d76984ef0928fc244c78bd46f80b0185afc5843768840fea1c4cf83a4cf80e8df0b280c2d763c2776a841f0a28fc644cf82e8df07b030adf8019f9eeb046be1153fb348ddabdba0453bb0453fbf4b06a6fd248ce1693e732b91ec63ffb29d89201be643cb599ba7cd1b86e2d4cb2f0319752a92e5d780d7d864ea500557919664d676aace9dd8099a01c13be4f237c5d4053dd8c093f4b237c7f40e15b30e1676b8477eb1a4cf8562c31cf0999981598e07399a62d38415867b5c86359e2337b7c39e976f9553fbea4bf5c0c5c9708dbf71c4e6ae09aaf4fce92d65b2b6dbad2b1f649ced5205a9f82697d9e4e6b3ef2ca9db85ebbd9ed4abadd10ddbcc22c3646b6bac704d26b1b6603e76b6ce0704003abc4227d41481ba8d208ce1653892b48cb596c1e69b170def3fd04360b4ba90a3ceb347199bc3fe532f9802893f964053a5db1f27bbb2eb979dbfa4286b4adf9564b1db8ca81dad6d5ba70b8cd1ed4d86c5ec072ab06137eb146f89a80c24fc5845fa2117e6e40e1b53ae1bc59c337d50ad5aca9c3d4be4ca3f62b01d5aec7d4be3cacda0d98da5768d4eed52d98da3bb0b2ed4a5d81ce23998a53244b64ca065141f12a66057357c4ba73a54a9cab656216d55671be42644dee59dc242a007799ff06e1fcd822c6126b9dab6ad6d56ee62e95ca12cd3177d3932c511494c9b978dbc4953af1543908475fe154c88a13565141bd9b3bb124ba4a9344230326d12e2c89ae0e59fdecc6045fa34b7b3e9ba1d839a989499720e19d8615acd762052bdff72cb8d3e2742c5ed7e9e2c593696da3a7d4b5dff5019b457bb0f4bf5e57b2044cffbd98f01b34c25b750f26fc0c2c4d6ec4d2e4a6b4d2e44c5d38bcd0bb3915234e30ceb70f137c4b48c1676156746bc86c773626f8b69082cfd109e669cfb769f6cfede40282cced3c17b3c23b345638a147302b3c0f137ea746f89280c2cfc784dfa5115e1350f80558feb91bcb3ff7a4957ff6634673afae4ce333e03638ffb86fab5294d6aa8ead70aa137ea7467415797d18c4c20e605adca7d3a267a31639ce6f5ef3f2b129777650fa3a5c88e970bf4e871e528729ceff52d119e2efec727ea7afc14598060fe8346807d282af21e22da320a11dc4ccf7418df9ceec19cc7c2fc6ccf721cc7c1f4ecb7c2fc18aa647344553cb8045d3a518a1473584be0848e8324cf8631ae1fd7a05137e3926fc715dda06147e0596b64f60697b38adb4bd12cb0e4f262a9a729bb868ba0ad3e2a9c445d3e4262c9aaec674783a51d194d78445d3359806cf242b9a4e10e1055bef70ad2e346ebecf6accb75def60e67b0833dfaf61e6fbf5b4ccf73a0c19ff185198e6d8f5189d6f68e85c1590ce0d189d6f6274be95169d1bb1483caf89c4470123711386fedb21d1df8c69fd1d8dd6f3fa04d3fa160cfd7731f42fa485fe562c12dfd344e2dd8091b80d13fe7d8df0567d8309bf1d13fea2467834a0f03b30fc2f61f87f9016fe3b31e3e41f2b42abb5294d5caddd8569f1b24e0baf5acb6dc26aed6e4c8757743aa86a6d6a13566bf7601abcaad3a03df3aab5f962c0ab3aa0a7ea5ecc807fa431e04f031af07d9801bf8619f0eb6919f0fd58247eac894465bf6091780013fe138df057020a7f104b6efeddab30f5c24398d66f68b49ed93f98d60f63c27fa6115e1650f82318929feb72001fe948eca78ff7e486f3d9bb7e53b3bdf48f6209f40b4d02d5074ca0c730e16f6a841f0a28fc71acc8f8255664fc2aad22e3092c12bfd6111a102c128731e16f6984af0928fc499d70ee06fe4d2a45460237f0531ac1d96253aee619a38fdf79a969c7e87fabe3a51da3e71f974b3c461f5e576c8cfe69cc96ded1e5b680b6f48c4e381fcafd1d0b3994fb2c26f9f761257f4d279997857f48c5fe13149a5fd7d9bfd8986b73b3d87f983dd1125bfebb295bfe7bc2f2c725b0fc703bb7e953e239cc78fe18d678be8119cf9f421acf37758279367d5f934d3f19182c9b7e0bd39a7f8531ae49c4d797cf11dda172b12c45b7a0294b3497b202ce3d7b1ed3e3039d1e7c4f9560f2bf8dc9ff3064ea7c074b9d8f34a9b37550b0d4f92ea6f55fb0d4e17964ab6c22aaf4286fdcef23dd99812f6091fcab269295838345f27b58243fd64592e74035cfc06dcfc64ed30c12adef63217fa20b99f7c9dd5935d98dbb6f67376e8ab3dcc910652ce86c8e17310dfea6d3a0af568325e2af7ab18380dbea4f6fddd84b982e7fd7e93230455de2b7670ea2d30f30c3fb87c6f00e0e0966783fc422fc69c832e1654cf0672105bf8209fe3ca4e05731ceffd4707e3020e71f61c2bfd008af191a4cf86b18927f8544f2ba4e302f7dfe9d8ae0049da11feb04f37ee87f1a6ff8faa1fc8b9cc1fba13fc1b0ff57837dd1b060d87f8a45e27f5824be4a2b126f6091e0fbaaf923b13f60247e86098f68841f1e1e4cf8cf31c36c11d114a77c8de04a06b78929136d6c5590471d4859a2c5ebfe8e5d859025cedcea6782d8fea256d4fa6e915bc72ac50619750c2e03779d4a7c41738daf65a0c2e1ce24b78adddc589c6789c2bc2ce0d4be5f602c5aea58f0ad8de05e736e2bd3ab60bd25d93b8586950c4e9add2aaaa0aca412729da783aedc78133398561a836915d0607ea913ceb354eb0892a5da44d2c952bfc222d156138968c048fc1a4be976ba94e613ecf52ed2b5d2b9ca57bef0de85bb4551a2348d26bc3b564c4775ddaa9e5dc7e6806a6119ca851a7baf5ed855bd26176d121a560307ac2bbb5af64e83d8d75b58d2b4d724cdc811c192e63758d274d0250d5fafb396cd14054da588de316c8493edbc7fb3349f909be9b401bd376609e8f152a63b6fe7b1a9524a31831f99d349504fb8fb47578867b9a27c2fab72d1dde4efee90d75c0fbbfb4656e3e8592d539ffc0cd602fd2d96241d3549b22e6092bc8d2549275d92145993244100bf8301eeac015c1910f0ef30e15d34c2df0a28fcf758ea75d5a55eb991a9e77a1b69b3d01fb044e8a649845e238325c2bb582274d725c21283132108d2f730a43d74154540a47fc484f7d408bf2aa0f03f61e9d54b975e1546a6570153df265ce5340f6833cffb5862f4d624c62b0113e3cf5862f4d125c60a0b122308da0f30b47d75954340b41f6268fbe9d0aaf93e7c8e7fec16b8e9cff7f908d3a0bf4e839e4003055757b5079b2df0174c870189284c6e420a7fc53418a8d3a0bb86821a80e366561f98c0c758f8831211c86d42029f601a0c4e9d80ca623cf641b3d9dfb0f087e8c2674c93cf1248ff3b267da84e3abfe13a0fb2d3d87aec1f588191a52930f68d0e56607c8a091fa62b8d020aff0ca3343c12ce4bfa3926784448c1ffc4708cd4e0783e208e2f74c2f9e8caa854b4de8b0bfe178663b4ce1ab9b16707a2f26f4cfe189d7cbe1976fc1cb5a5c241a1f637f4ee042bd7fe836912d569c225f03650502bf8120b65ac2e1477a3def875ef4142fcaf26c46cf19933be0960a6b66d2a76cef8e634c1b76c1a17e1dea25830c245a89d84313ec213ac775ccc12858f4dadf89f2eadf8e98408af6d63553a6ee9596d6f1cf46a8bb8a4698d27cd5798314cd41903df589d5764ee14cb4ae7af7a19a98a80a6ce2248b89374e17645c3dd2e7de841c28e68c2ce1e9469732c10decfda34cc313bc20bd55844931063cc418c3151e89831b6d07113dffadb90416eee736e415b249a90bc39bd5cf8945d0f755d1a4c2747827e272657901d1117f374f5c3a8b7d4e514f1a9b848c8d955ad30c9796125b7c6244f0d2bb98d4e326f95e447c27fdeae2d56284d0bd9f06a87f1981e96477b4cf28cb0923b60928f0a2bb92326f9e8b0923b6192678695dc19937c4c58c95d30a39b15d2e8ba622a1f1b56e56e3ac9bc6d303b1595137c16b33ba6f29cb02af7c028cf0d49b927a6724158957b6192e78595dc1b933c3face43e98e4056125f7c56c6e61489beb87a9bc28accafd319b2b0c69730330c1c785143c1013bc38a4e0413ac1bc0bb52415c1efe1820763ed81a54dd01e188299c6b2b0a6315427993fbf3c151e0926c26561a05784043d0c338de3439ac6704cf0ca90824760a9571436f54662a9571c32f54661a9b72a64ea8dc620af0e09790c26f8849082a358eaad099b7a63b1d43b3164ea8dc352efa490a9371e83bc3624e40998e07521054fc4526f7dd8d49ba4734288cfd1f32da033bfec4bb72ab869977f9d9c4a5a447162d9585a6c089b16393ac97c9be88da9a87c00173c19b3cb929076998b09de1452f0142cef9786ccfb7958ea95854dbda9188bf2902cf231c19b430a9e8609de1252f0740cf2d6b09067602a578454f9284cf02921051f8d75b4b685ec68cdc434ae0ca9f13198c65521359e8569bc3da4c6c7621a5787d4783626b826a4e039188a5343a2988b695c1b52e302ac6758d7043dc379188efa9038e663381a42e2588015713bc216710b31d03b9b00f4224ced5d61d52ec4d4dedd046a1f87a97d5a58b51763924f0f2b790906644f1300598aa9bd37acdacb30c9678495bc1ccbe46786cce42b30c1fb420a3e1e137c5648c12b31c16787145c84093e27a4e0624cf0b92105afc2ecedbcb0f6b61a937c7e58c92760922f082b790d26797f58c927629dcb03213b97276196716148cb588bb1b8282c8b7598ca0743aabc1eebb65e1cb2db7a3226f89290823760902f0d0b792306f9b290904bb08af5f226a85837613cae08cba314e37165481e6558cebe2a64ce2ec71acf57876c3c6fc6205f1316f2160cf2b521216fc5581c0ac9a242e7801dea9c46f8b7ee4cd8776ead74a7369d0bf63a1d33edacb0eb237c5658360bb2f75c3afa62b3c54ed1253b4f9d1b524976ae3d22789b4e303fbd31123f1355fd0499895a89959237354129598509bfb909846fc74a875bc2960ed53ac9fcf95b5349cd044355353ac17c46f66da9081e8f9bc9a998e0db430aaec520df1116729d4e325fb870672a2a2758b8508fa97c5758951bb0cc78771365c61dba00f8e6a2f7a4c2e46d5cf04e0cf6bd2161efc260df1716f66e5d8597e59c4656b1e699f6ac2a8c60539cef4fb9127b405462fde362978a0e58c5741a56023fd80425f0e958e23f1436f1f7606a3fdc046aefc5843fd204c2cfc05a968f46342b2ce689d3958eb114b1796c71e3f673cb185fa0b95324f03699f493c45a8c42e7fe72e7ce7661d2fc8abefda21b20e74f43d3e2865fcdd482c820cddc33b1583ea68be5f98db1546baadd0c5a25fe2e949f04a815bbe3b819b4b0f1c9f98d3b3ec6ee29552b791431f7bbd705ac41c48bcb8da5e749e0cf07d3039354ccf82a8e2de26e2c539859fdbc573b7282aed8d987917e1cb32718a21ba729ce3b2ead6aa750dce0d846ad487337b6c572974dbfb6debbf8f5a6b2a7b3b0583ea18be52c5f2c2173379e0b98fb0de8128dd5c7a610bc9328afc0b782c4ec6c2c668775313b36a5f49b237696aa606a654bf894f3ee0489db3958dc9ed4c52ddf17b7a52275b6ca98f1b35dcd169373b1983ca58bc9c10c9767de3b7c0fb14a47ea6ec617b97a5b93d605b072c80e8f05af4b1a443303967abc81d57465db7918f5a775d4e7a494379630779301134ab5f3b1f83da38bdf1242abe2574f15c1f058b9cd616f2b8c12b4244927552fc062fdac2ed6c7248c35aee94a1117772f3d378eaa368edf6ca26952733f16afafe9e27562e0965d91b813dbb6d34970afad682c076a9dfa807775c2b404d349e703188fafeb782cce489d4d5d9b5f88c5f939ac9d12cc06940df325ffa542104ce7a016112466176131fb862e66472131537b25b96d13b7abad7a2dab652e2e8b4b0d9a3eca412c46dfd4c5680161e9ab52d55d37bf89b9bbd9375d4c2fc662fa2d5d4c6732cc4bae2b296263003f1ac5992c12a95c2b7a43a54e8dbbbb0963750916abe753e913c4860b5b08ab442ad43acff27cb82541ed172ba3e962762916b36feb625690b4e44cad578097a189faace99694976171fc8e2e8e0b519be42dde4dce432aaeee6628de67fc1297257a994d5d135e8ec5f5bbbab89613f71eeac5c7d83825b777b05a587b4563c9d334fde174385d81717a41c76955b3f5b212130acfe14a8cc3f7741ce606cc1b26e488abb0187e5f17c3c2803154dfa6d6a74873c4f76a2cbe2feae2bb92d0b2ebd2686b3405816b30022f35551bc42ddbe68016087dacaec562f503cc431134560bc413f129e42f7352971b247e87b0f8fd5017bfa343b41ceb456dc477e1d92cfb7978ac8ae39e0d12a7ebb038bd1c2ccdfc650ffc5a5832cba3ac3daec7e2f70a16bf207d4637ae0b653bc2bbcb473c12b70e9baae5780316bf5775f11bc9127b058b1dc2145ade8869f9a3c4bebd20a95094562a50dade4d58ac5fd3c51aff166871e3503d2c23bc6fb3f0fab041db164bcfbf7f33a6f7eb3abd6724ed71158ab141ee7dac145fe698cfaac44e63f1fddf4429907e0ff2162c3e3fc65a9089f308ef0daf10adaa3a4dbd9aca58026f8d6c6ec218de8ac5f027a9f491f5630385c2f6b81fbc44faa8e2d32b93e303b76171fc29e6a14ac50f904a2cd32b31d28fe9ed584cdfd0c574514aa9e91fe971f3a18a7773a6eb1d586c7fa68bed9aa4e94aeb19a7f699df89d1f879b0f6587cdb52d97b95dcefb154bc85b72b69fccc7761f1fb05e639d76b173f43b9b95ad07763317a13f3d3044d317d09954aaa653265efc138fc52c701fffe33de2b52fbe836555ebb17d3f8573a8d47272d79bcf1a8727195cfd7689a16d97d98a6bfd6693a2d414bd26fe9b19abb1f1af0fc7a14f9e57e2c2e6fa532470babc7e71b56873f80c5f237d8786fb072ceed73c6df8d1fc3575b7ae3e9192f658e1831e0fda820717e108bf36f75711ee54b592f4ceadcf410a6e7db3a3d737d7ac2f2c9aff342a973aaada6743d510f633178471783758cce83aa7c1f89c650a005a69af3d43b41a83c8251f95d2a63a02ac420a58a17332cc7354d69f22816b3dfeb62765233a77790744e37073c8611f9432abdc1a06dadf0fd81f4d3fe712ca6efa6525a1588547553b01e78f95c2bc8677949e2a72bc9f85b4162f0041683f7529fb9c8c30c923361fcb0eb4d954287b1f8fd11f36e266ed1783bf2fb75545f44c0f317b69b7fa23c995e6dff2416eb3fa5e3557353b5c879781373fb6ea5acb9676c3f85c5f0fd54729e9e707aed84e43d9cb6cebf4844ec8fcddccf0e721f65b57887b70ab38739b722398d35c3a4c6127f524cede05de7e15739a9c1f3447163d9ce97532596f067074e9b16ccfd1923bf00e4568891cdccbf5cab80a9cf2396026b9d2408b9333bb9a76292d30aac106fa98567c962a1abe526817a0ec62e799cd6230bc922e2c3625096437a38277da4c5f4039eaa4364aab6c8e69f14898c4fd39a926bf1210fada5de86fac69185b943a7bb2b6099f41e44b85c770d6452c9fe0d53fd92270a01aabd9754dc2a90c575e2fa0b7372a7a6d532d761bbcf41ddb6758b1c4efc234a2cee872039fd1522707c36b90dd8de6ae561fb0b2536be02759e680ed738e0dc8952aa2ac600d6598190b72f15c2bf5222ece69ca8defe2231d6cb059488162b9f8fb39c6db302d8a3ed3c601f5302ebc5e05763ed07d7ada307ee134a703d34e0b8c0edce4b7c44b7415c2db302da46e641fb1bb5b5c566cf05ceef0a39594e4d1971adce0670d14e1eb8bf5382e39fe1e4731f52ad166c807715a814fe4109af23c8aacb631c5336601a34c8c3f42925261e74ec97d06dc0337da487e7334a3ced811579cb206c40b4bf8f87e8734a441d442915ffc1771b20bd34dc83f44f4a486d841dd55955cfb5eaecc1f982120edf16717963bf518d21bbf370568a864303e32b1078536185f4b2da00f03028c4ff4509b01d28a5b89a7c58dd0640af77f700fd9bba185f2ec6b1bcbd58ec68a5ef0136f49f4cd9905af26303a01b7b7a80bea404c4771a54dd98f96c9788754363db9bcf872c132df395c2c2ca84bd553a01da0091ff2888ffa584c8bfa40de17137215fca5cdeb8e96799e51d9c5ec071f83f4a949d6599a6ec6db7ac3157091f840da80e81b2edab4c792078871a4e4d509d6a9b5a665fb4f5c0b116c41e08080eae079c237c127cb4d05bf96803bc3dc05918a184d709d4a8def2367751ad0da00e83d6590b4a50dc7fbf5464bf6dbedd5ae6398fd78a906c00b6b18507ac2525b0788f6aec64ab32cbcab34a30f0d18a129cebbfe74d897922689b1b1a2fb5f6a0b5a6b6b6f962d4b14104ee6d97e46d9f55e7b4e12a2c711ebe0bc0b5a104d70564535b4789f88c1f05ab2db595a9e903d5428cddfd8099c0cada5182e3deb3950eb40296face833600dc2f1ab96d5bfb84fba7e2a63f312a18757c0a5757e6f6696bc4d57a59ffc64ce91ae93c629ce6ed5b802959d1b4fd1bd1a4e55c34e571f368e031cf689a1368a229b53aa3211d16d100b3a2a2818ac068ca6d9968a00a3c9a5679120dd4c58e066ac046539adf130d34a9251ab867abd3199fc6108d1bf08926ec0e46b52efca8d6291b450625a30986bca388073c9ac48b144d6b6c268a8e0946c1e4c9a866ecd99b85ac9f3d9cc367217768f1fff704e11c3e41b82387c03f7fc07fdc564627ea5606b72d773e382ff913efc933d9a9eb7d3a0c8ad321f64b22aa35a1adab62da1b5d5289603a6d8e7e60764a679370e65a89f33880b38b4938a758897313c0d9351338b7a040a1fa1bd854964f87b31315ce879887b39b4938f3acc4792dc0d9dd249cd3acc4f90ec0d9c3249cf956e2fc01c0d9d3249c93adc4793cc0d9cb249c53acc4b913e0ec6d12ce5c2b7196019c7d2871f696384b65b7d2bfa21fae16cfa103d99a0ae4ff00c8be94200733cf7591aa1b893f5f2b9eb5af295f00c0f6a3043b9441bf52ea7e559be10e0370fb534f8f49d4ed84e2784d4f86b22d15ca2ea0cb39801265578932df07d4f538f287c8e00da082f724b0c3819980373df3f0c82cef35006f1025bcbe49eaf0d84c4cda372783f9218039d82498d32c84f9118039c424987916c2fc138039d42498532d84f9670033cb2498b916c2fc3d8039cc24988443176430df0530879b0493b0574e06f33700e6089360dad8c3791bc01c6912cce916c2fc0b8039ca2498332c84f95700733425cc711266a5f350a538eabf871becfbc884256b4f2ae4e5c0dd3186127907817cab9872e54e01db22e0d9e76ceb04ac34da9cceb6d87d6709ad6f2f15ca9dc0fac652a21c1397e14b84b0054c7d126aaef39f5be70ee10e6e6089b68c25854d56bace02b0c765c26e53abaa6c4439041401e329510ed11401a97e628214ed012ab439c04a27505be91c31c3bd5aceebe53b00ab2ff7f219c06ab6b33b87dcbe8aaa15b0d289f48b0cf978cf067181075e22ea777ed5669ffcd900e1a44c209c76c421fc1a40984d89b027f3067ed5d1ff51555b07789f0110734c9a574c3a998b0c67145432934dc2493afb880ce7328033d7249ca473e3c870d6029c53a8b7a170ebed9c23681cfd335056e6993319c64687dc18608953338112ce865be234c217ca65789b9d977665a2062743b90b58653ebda318bad836b06d02dd5cb16c6f9b14b5c039963b22e27665b0609e516700735a26fadff562b1705da34b58ad6954479df76832e5203019da1b00dae99918d04875623661f949362dfb1800738649300987dac8601e05601e65124cc289336430f300cca34d824938a58b0ce6380073a6493009271b92c19c01601e63124c1bd7054d03306799049370e20c19cc9100e6b126c1241ce721833900c09c6d124cc2c9866430c70298734c8249d8032283390ac09c4b09338bc5fb8f82cd3822acdfc9661ccd073ea582e69c31e777161396a2740319c056e7990493b07e27833919c09c9f09bf3bf776ee60ea7bc8191ae8a5db4a0ae05b4089af3fc0173f918b0bf3964bdb3c90f14300746126261fe41c71930fce020817650261fe1187f06880b0d0ece610a15793ac39b41534878ecbd4f4186f880d8e12910fae910d5aec0336bad89ca9ad36aea89c09502ec9542d9e6caf5b9ba76e4d0740979ab4d3d1742b5d1dff003897998473aa9538ef0538979b849374d52f19ce4b01ce1526e19c6625ce5f019cc79b8433df4a9cdf0438579a849374ef6c329cc7019c4526e124ddec990ce7a90067b1493849b72227c3b91ee05c45dd904fed131e2b856afc2322840df9422aa05300d0d599d8dc6c8acf1d92012f12d9b2be2a00ef044a780359aa2b2663974f13ceee788f0aeac9c077b4c644a8840e1032a8eb01d4134d844a38438e0cea1400f52413a112d6f06450c701a86b4d844a38fb830cea2800759d89500947d6c9a06601a8eb4d844a38f7830cea2000f5644aa85358fca047ec329802e67dd8cb8d48ec67c262bf36e87da5ad58b46895f79f3011b2a912816fe3ae126183398b0d6ddcb27718b0e78de62eea229c7347363efa6360a525e6ec5247ba7900999d9e0e606e3209a68d5b4bef07304b4d8269e3d6d23b00cc329360da3811623780596e124c1bb796ae0030379b04d3c6ada54f0130b79804d3c6adfc9603985b4d8269e3d6d22b00cc0a9360dab8b5f40100f3149360dab893cd8500e636b36731dbb88d7437d077afa4c4db59e2753705aa14bd78577605e54e3664df1b64c02eab32bd936cea6e0f1b77b2190b6c727ba666322f151ecd6d3e8fe73ce7b55a11a2cd339907025bada604da256126afa343d7810a5d0b80aea6391728d8bf71406f80f2d44cacd2e49fb23d725669ae04f86acdd8badc1d3daa1116eb8e0b915ae6db546877800aa7cea46d50493b936496da1be0ac370967ae953817009c0d26e19c6225ceb500e70e4a9c2358fc3ab9f96c17e353171a989a5abbdc79bd8cf16ee44a01d6fd824165665a9cdda920f70295d54e93a6844fb7729fba4f01ce5d26e19c6a25cefb01cedd26e124fd302e19cecb00ced34cc239cd4a9c6f019ca79b8433df4a9cdf0138f798849374aa0219cec500e75e93704eb112671dc07986493873adc47932c07966a65cc745a291dee0489ec3f827c856cb15746562055db9d5aee30d00e83e73a6c9da38fba33fe8789e95896161b54b9dbba67393e8b9ab876cdfdcaa14d8e5d99958d379247d68671680778eb913b6092b20b2b1cb3b00da73336197d3326f97647ef8a700bcf332016f46e6e19159deeb00def9f4d5cb56cd8e5f450e9352562a15da2c360ce09e4cfb9a3d1d01cc0bcc9ddd41e87f27b3d391a019b4df9c2dff6c9c9c3d1e58e901338684755fb326444bb6ed4519b0d20b4d1a74239dc549569ee6019c17998433d74a9c27009c074dc239c54a9ca7039c1767a2679e9a9323d7cad9efa500e62526c1b471f6fb1600f3529360dab8fef72400f3329360dab8fe77238079b949306d5cff5b04605e61124c1bd7ff160398579a04d3c62ee6f100e65526c1b4710468258079b54930ad5cff0b605e63124c2bd7ff0298d79ad4a1241d0522eb500e01380f998493b47944867331c0799d493849e71c91e1dc0c705e9f896f6b4d6547dab7b56e621ec21b32b18820b9e73d7e31d61c4768ad58a54eba2cebfa08d57629c04e6fa4843c5842ae741ee280cbe52a0d6f6d466c3100e7c91182255b9db10480bd29137b2a28b0eaa38fb1c3c6899a5336b64c8f02786f6ece11ce8c6d95ba970ae517a09cbd8512e53081b29077d20430be627d877cddb3d60df2936673c506a9dbe4fd05ceb1dc114bb88d05595ba03d007cab39f33b6dccf66d41b6bf8d1265af2428554c49e7878ca7aaf54f05186f377bc31f42ef28d9863fb301de3bcc9dfb4938584736b3e997a02cbd3313050056ef7b050061394a5600fc1760bc8b7a4baa15b247afe6c7170acbe4d9debebabc1b00777726ec2fa7d106cb4487d45dd16efb462bcf028cf7503b9639b07922e066fdf6d6122a985301cc7b33d1becc49d0cdb4dbe7f43240795f26dc7679479cdb6e2b40787f263c4adc1ae78b3aba4128c1bfdb5e2a32f972b65338ea6a855a154eb8362f13cc07601f306752b78d136b0a01ca0733b10826cfd70bb2b9eeae07f01e326939f574cabe38d972eaf701ce874dc239d54a9cb7019c8f988433cf4a9ce7039c8f9a84739a95387f06703e6612ce7c2b711e06381f370927e9a692643817009c4f988493741744329cd500e761937092ce9f23c3b916e07c32137b1bf34f8c1f397b1bcf03f89e32698217e9b7d9c8704e04633c4f9b849374a90b19ce5500e73326e19c6225ce7a80f3594a9ced848072f1d1da5ae6ce98b36fb2561b50367e8d12d71816e46bc1dcabd92044c2af02736a1998c3318f0a760e80fdf54cf8d8b9837821e34e5fee1ade22bcecb556bb826b01c2e7cc995164e352ead1a0a4fc06254afe698e152213973135e70d1b8f24fc8a0b5919da0ed8e437cd9df462e3763e8700da6f99f3b1bb2956ae507f09c07cde2498360ea4fd1cc0fcb649306d5ca1fe7d00f33b26c1b47185fa8b00e6774d8269e30af5ef02982f9804d3c615eadf0330bf67124c1b17047c0bc0fcbe49306d5ca1fe3c80f9a249306dec58fe02c07cc9249836eed1f56b00f307662f5821ec13912d58990b9c203fa4768224f227b9aae78bf97284d511d917ab1b00c897e9d752c68274bd99dcd1b19d1d271cc7350987816dfcc06d4b5010bc62ce24581bbb9bd900e5ab264d4f984a59459159e66300e78f4cc2996725ce9b01ced74cc239cd4a9cef019caf9b8433df4a9c3f01387f6c124ed255bd64384f04387f62124ed2de1219ce7301ce9f9a8493748368329c5b00ce372871f213b558dabe51caae00d3cf4cb2bae9943e7732abfb00e0fcb94938a75a89f37680f31726e1ccb312e74180f34d93704eb312e79b00e72f4dc2996f25cea701ce5f998473b2953817029cbf360927e9683a19ce1a80f32d9370926e9f4f86731dc0f91b4a9c8358ec4e9b9c4303e3a341fefd35fd8b08083ded64738cbb82a18cdf52621dedc3ba89c5cfdb4c7d8627216ab29e533540fd762666c44f6747daae33df0085c03b99987dacacb54ed81f2f02164878e5da314d7b77325e08acf377e62c36b07152e24080f2f7e6ce91279cc24056863e0e0a803f64624b9fc93e5bb5f9bbd6c70278ef9a3dbd8670c627d9f49a6340b67f2f130d7eb8419f2e8bdb5dd7bf02acf58f943847faeafa4a06970fea3f11b150be9cb17de1a354982701abfd9339536d6c9cbeb81458ecfb99fc1804cff865be6587475e57b515b0d43f9bb47900a9bb8f0c671f80f303937092faa7c8702e02383f340927a9f7940ce70680f32393bca75329577092794f1f0655d35f4cc2996725ceeb01cebf9a84739a95387f07707e6c12ce7c2b71be0a707e62124ed23dc0c87016019c7f330927e966026438f7009c7f370927e9966a6438cb01ce7f6462bfc4c9cde11325ebb37f0ef07d9a0987320f78b3b044257bbb7cc43e781100efb3e65f50a82a19fb06df0683decee7a680b47114b30d00f94f5340120e6690812c0420bf300524a123830c640100f92f5340128eaa9381ac0420ff6d0a48c215c164204b00c8ff980292b0e94d06f23400f24b534012ceea2003590540fed714908423906420f70290ff330524e1b63e6420f700905f99331bcec65de57a00947c630f4376489a6ae5b6a6ff611ecc8849306ddcd6f44b00b38549306ddc67e65f00664b9360da3883f8df00662b9360da5801fd0dc06c6d124c1bb735fd3b80d9c62498366e6bfa3180d9d62498366e6bfa0980d9ce2498366e6bfa1580d9de249836ce0b66a007d48112261f63f4be2154288156382ff38f8ef0d7c8e0912d5ae9022cb123253cf5a1796f31957eea7f31ab15332bebd86621ac8a76a8ec0015d8ed006c274ab023987f7d85bb64c55b49c905f229048933bf8d35fc4c90f53b5342f6af5a7781f2452cbc2098a775cfd9bb01ef3680b50b25d6608b566c6c368d01c540574a946ab12af474a65ec212a2252b614f0456da2d9399bfc2516235f33e690b85676cc5da5e2aac75006b77eae6d406d1ea3c72e6bb3d08b27b8f4c34ec531bd8986c652f690eb0c49e26c1b4b197340fc0ec65124c1bc789a60198bd4d8269e338d10c00b38f49306d1c279a0a60f63509a68de344f900663f9360da384e3419c0ec6f124c1bc7897201cc0126c1b4d18b341ec01c68124c1b1d1e1300cc419430836f23415805912dd41f01700e360967ae953897029c434cc249fa7d60329cdb01cea19438d5ea483ee1750770bd65640f2e327c7399872f8b125f2fc6bf89512237dae5a2b63b8f6f751eaf162ee2d3c408668538b30f636b80711825c6a1ccdb19ce1dfbd9e0a85be7a8532a78f0a1e1398c6f12c5fded258e009ec1cb985a985a6f21dc62007778260630d2db6d93b0114f36f67e0b403b823afb27aa8c544c49072c782b9b04630da884465262ccd2600cb6ef26a147896cdfcd6301de51e6160084031c6405c04f4101309a12ed30817691b0cf958c8f4e96cbeaaa4c8852b343b68904e0765ceafced8a5fe01ccb1db16516565e1d00e031992861b1890c05c26289b7d6cfa12a6123a0088866c241021b58aab5eab55fed6e50f5053639361333ee20cce44580bd60e703b0e328c1aa0f404c6147da0720ae0308c79b33f1cbc621e24500e5044a94c303a02c72c2e442ead972e72fd5e3afa3ad9672a9aaa516a05a9a4889b83f8b9d005623dc255b13daac8d0321eb00d04999f08ea6fef151429c647bc7fd111401d926e1245dce4586f3568033c7249c7956e23c0fe09c6c12ce6956e27c03e0cc350967be95389f0038a7988493748a0319ce3900679e4938a75889731bc039d5249cb956e23c09e0cccf44cf3d47fc768f7c00af88b9ee117b9d1f2500e1344a845d446cca858002d17de4aff3a90c7cacd3c625b0dd01bae999707aa436fdcbc6a9dcc341077246a63272a9b4c272b64b66e20cb8e0dea342f875608d476562c882232c6f5cd5ae6edbeec9fc36c0787466472d8ff44fdaf50768679a3b206ce337acaf00688fc944f9997bc40d618c06086765624a22ff5c43c6a72492cdf6c802f88ecdc4506f6a2340b9568e01dd0560ce3609a68d6dcbbb01cc3926c1b47199e03500e65c9360dab84cf04e00b3c02498362e13bc0ac09c67124c1b97095e0d60ce3709a68da3e31701980b4c8269e332c12b01cc8526c1b471a3947b00cc4526c1b471a3944700cc42b3971310667cb20e665fe0223e8e126f1be764a508b4c17980704c87cc1bd40358e2e24cb882273766ed32e1c174a707dabecaf2398071894983b5a47b17930dd63e0a702e3509679e95386f0438979984739a9538ff00702e370967be95387f0470ae300927e9823f329c6b00cee34dc239c54a9c7b01ce9526e124ed4692e1dc0c701651e2543bbfe6fafa3f368f3b560278c59958efc3e76dcc637cea558dd3392c978d7677954fb910582204c0bd3deaac9ee33602205e9589ec8e65f6f8ada508fd9964387b819ef86a937092ba87c9704e07384f300927e9146b329c6b00ce3526d5edd329c728c9eaf67f82b2f3449370927e41900ce70300e74926e1ccb312e7e500e75a93704eb312e76f01ce7526e1ccb712e70b00e77a9370926e694a867319c079b2493849f7e024c3d900706e300927e9642e329c1b01ce8d9438c732ffa612bc2f5fe6f0e04b03543cbdf518d838fb1ce7af5a31344cba9ce0810811f0dda0a15f4209bc374b3c7921b6642503d99dca728703cbdd640a48428b2403d907802c350524e1f4433290e7009065a680249c144b06722200596e0a48c279ef64202f0120375382ccf1d5ee0de85a357cc96081f34495a34fb538e351cd505d7f3d555d5f01eafa2d9998a898aa8f9470b88ecc43da1dc0dc6a124cc2599f64307b02981526c1b4d177df12c03cc5249884cd7abaaf1b0098db4c8249d8902283d90ec0ac34092661f39e0c667b00b3ca2498842d53baadca01cced26c1b4f1bb441d01cc6a936012ae622783d909c0ac310926e12a7632989d01cc532961e2bbbf2f707e5730f7cb44c58e002ed8fedddf4f601ed85a4ab08304d825ce03a562861d5c98d56c5fd0205baed51660ada3c41a6c73341bf75c1800b27e3d25ca70fb2611d6f7642be5ee0356da4089b68d10502fa6d4f28f91d8e701ed0950eda04495a5c9d0c196b7127630c9cacba34126df4989b727a8df7788fa9b4ff876bf3898a1159b7ba9206e0236ba2b13531a602309abd9c99b4664363914e0dc9d898a273ecba752f5d8b861df5090dd4fcb44f3081b988b6d1ed9b857cd0460a5a767a267944ef388706883cc462f0660f7980ad6c6cf375e00c0ee3515ac8d1fc69d0dc09e612a58c2d62919d85c00f64c53c1120ed291819d04c0ee3315ac8d0dac4100ec59a68225744493813d03803ddb54b084c32564604f0360cf3115ac8d4ebed500ecb9a68225744c93815d05c09e4709566d993e9535c396e964f8ce04f8ce37c70760e346964b00ca0b32e1f84b7de2988d3344b381776abf493849f7c721c3b91ae03c60124ed2dd9bc870ee1238dbb6f6095f1027bc80a9cf8b95326f279b496c21e3b3e2ddbd6e4a9df325a2b6ae671b9decbad6f9172c0dd63bff74d72362bba2f96c17ab1157b9bc3221bbcab9cb35ab6339239d472ee426d1469a445494d6731ce6f5ce337c1f521efa6e56c4dc9d7a963bbfd5448c0681242ab6e15ce15ce3038be52284ed8e265b59ad8871ec4e3ed1483bc1c9fd72138f17071895baaaaf3915ca7aa2c2897389d0a4d679a69508c735a168a4333853034885a295c3b5e0091489749769c2f5592ae252e2c4a1441c8b1bdfca1ee53c16c9777eb9eda5498d2da549722d43953c53d793cbe4299258da451c7b449f132b9bcc9692c5c8357ffefe6631f7a35c482d4c1ad3e4f1c3edb2538254c9e6dfc139a2e37f90a7bb4c7661a67d231d9dbf563929ef0ae7dfdaaa75fee64a0da96ac15aff3f6f23b68ebd420300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/f93b2413296c89f4a88ce5abee1142f9.asset.meta b/Assets/SerializedUdonPrograms/f93b2413296c89f4a88ce5abee1142f9.asset.meta new file mode 100644 index 0000000..2f34aae --- /dev/null +++ b/Assets/SerializedUdonPrograms/f93b2413296c89f4a88ce5abee1142f9.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 88e081c943e38b64d887eddd4e05a0fc +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/f98b98e1a8b77a647991c7d172a7025d.asset b/Assets/SerializedUdonPrograms/f98b98e1a8b77a647991c7d172a7025d.asset index 66bfa02..1689c04 100644 --- a/Assets/SerializedUdonPrograms/f98b98e1a8b77a647991c7d172a7025d.asset +++ b/Assets/SerializedUdonPrograms/f98b98e1a8b77a647991c7d172a7025d.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5add76db44109e752ccb0e29495a92505a20e5a7750fa5525b4eafb8a109a529d0f8c4716e0a277513a5c760bbc6369cf00abc0f171c1e861bde03be1949b62cad24dbb512126a1feb677f6667be6f767667939c45f8a85bb8ecd10e6dd06daad121bda4369e36706fe1ebbef9e515eae2fe02d73aea6ed17a4a4ffedc506fe3ba85b71ef5d1f3673ac0bd21f55572f0bc85be0edeb8f4083f07ad541e9d6ab449dbf484d6d44a8a883de9d4f3ca14dba58ab83ea05f51eb88523c8825556bb85451d393ba1694f6db3da5efc5ac16ea0ed0a74b4dc87c2e128b57b9afd824b79277cf79cf3c5ece50a2f923c8aa53872cae54372780d8ef990e2e8b2ee45c7d80320fdb87191d08d0585813fcfa748fee6a2dbcac16027a6fc8b58e160d113a1f1de28fc810ac5c135f27404f0fe55f09bb4c500335b7e91bdcb9d733ba03c09f86a4ec61d82628766817d78ec87b06b5a32dd34c622ac37d7620d3f5b4164a7c403b786f8a8655b9fe229a3aa2fd16cafae2f76d78fe03dc8f65b4a8ed5d3cebc6dcf520d3eba877b8b872d7ad7d9a36610d6b6fcdb19bbd66e4341861e80bf3de34cc5b3c47d46f11265e63e806194302b92be38e1b4a47caee92c5af6a2782e0e436462dd4fbb78bf77dfa2cd1163d324cf715b160c8f0ef7f7ffee8afce9f1563d4b47b6415d8b4ab29a62501cbf2ca6a352221d904c3c8dbac68187ea583dfe4c2ea09c2efb66b48bbc90928c8ca344a80ba88d75d3c1ce3d744e30aae75746f7a716e136f7dfc220cd92cce1490a34b689aa27130e77430174f1ae6f4b89204737160d71066fee8112cc52098a6431c82731a046da6695ec7bee8550ae9c5ad63a4e775fc944e270a4dc7ce1bd0736d6c76161283c8a4dc1871dc5c980537051d37ccbafa2e536efcad7715b1e26bd4d5d1de91759ccb6b828a9f2cb865a32d93f97a7360d5101a8b4954eb815461dab1177947e26d48c834f44eb0244e308be1e21cc3d4390653b7acb1de66eb2f86140ffbc952bc9f14757ec28eae6aa7b494c5a592c99e7149e7193c93d4e5c4f5286eb4b7c6f18515f185e9068863bfa4639f595ad5ac24ffe013619b251826be4ab1737c299c75a16005c337e4ad47964c259bc64fb0d9c41614e7cc68171a3c17d6d3d36d5ecde2d2eda30874d3665e6956b8319afb1f497aeeefe675d6a5db149f659a9e45be2c20cd61e5dc59ca675305ef508772164718f5c994de94ae054fb1c29cde8726df6fba029ec8591c04f04cde97ee7534e9a7cbdf868c1f3cde74f23f15017e3a3283132676aa2f00cca184ba1ebe6e54328d90f08733f3b2e9528de87c589408740cf55e0ab80e8c08cd0f59d6fe6b9abf13f4ef72c44786e1551f166d0eaf57fee791cf66f2396b1f1cf3e46c0e14ef66399b2f0853fb32538ed0647f20bb018342a3bdca91426964961be39832fd4c77817b2f4be0563de00e3ccfebe3392830a8fc3ed9d94159ca0aca5200caf7b38492f7cf9dd0d1895f99196c6656b0cd05605bcf12b6a206b6cce05aca0aae4200ae6b59c275cd9bb0ee96be2db18e95e803912ede1f7b7fe4386fd3381700f8832c019e17695d59357f1c14f7b2836c252bc88a01c83ecc12b2c5d8d5b77d66e39f0a80f75196e0f1d6e527c9eb5944f8ecfdec45423300dcc75902b73c02dc43391e69a2993b716312b1d901b8901580f90080d74f0ec00d3cf19d77fd156f2a3790c39dbda96bd0b949936de6e8063b817f2c594edc6796c79c15e17671e497b5dbb3724ad02ac72ea26e06bdec31d146edb7b277a9c372f78f8cc36cdae2036e759f263b5e4a96999eea9629700410f2a0e6cc3c6816e9bbced25749e5171258b1e4a4fd3cdbcfff751638fa378d3539e8a9817957b843db687c284af1c7f817dcc3895e12280000 serializedProgramBytesString: - serializedSignature: a48f7466e8bba91f53c3f0080757ccf786d25751fd32bf6dc64fa1ccc2d943e30f7bf4c9ef3b6bc497b1fc2c05179d4a545d9d7611b28254c76cff6853f3c401 + serializedSignature: e7cbc2637967815b978a4a76c333e9bba36974f61a13ba2cddd53c70bfa6d53b82c82e20c327ba20b596920df65f1539fa59abfb7e9afdb4e542410869b77c09 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/f9c42919de20f12409bca49705e9f328.asset b/Assets/SerializedUdonPrograms/f9c42919de20f12409bca49705e9f328.asset index 2144b6f..016dda4 100644 --- a/Assets/SerializedUdonPrograms/f9c42919de20f12409bca49705e9f328.asset +++ b/Assets/SerializedUdonPrograms/f9c42919de20f12409bca49705e9f328.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c15477ac0e7812a0844130203a6d860d914354cb14d152004a24ac2d88041a820610909159a6ddc0dee0dd773efbda75c729738bd39c925712eed92d8c9a55f924b72499c7a37dfec0cefdb79f3bdf7f6edce635736faa1d1ceee7cf37dffe96567879533fe2f368fffdac1b6b31ab68035b156d6c30ef1bf6ab8dbcd7f9c2be5bf95f571f700ffddccefcd63335284847f17c526f1df75fcaa9f0df09083ac85bb9de27e036be37fd7f1b06dfc0a7cdbf9ff36fe542c87076a626bd816b69995c64a5288d82102f54bbf18d8152be0bf57b3e3fc6e9b500a222917b74af9af067ea75fdcebe64aabe776b13dc2ac6e7eaf8587e9635d5ce67e21b1e0531e2e266c124ea1744748f752fe3f8fff7f1c5d83154bf8ff5cfebf5efa0f93610be4df31f937b88ba48c27e4f548e40fee281996cb2bf996f42b92ee62a4d362e98e96ee1229f74974cd751bbe5e5e0f97ee65f2b9afa16b708ba57bb9bcff14ba0677b9f47f5a5ee748f70a4dde159abc659abc65d25da1c9cb95ee2a4dde2a4dde6a4dde6ae9ae94fecf68f6d668f294ff72edfeb39a5d6bb470ca7f85765f8553faafd5c229ff95da7d154ee9b34e0bb71cf9e37cf39ca64fad166e05f207778c164ee9b35e0bb712f9833b56de7f5ed307f42dd4e2ca417e2b513cca2f8ff9cb7b4b993baf28797adecb43cfe3fbcf6af79769e196227f13eba528bcb2699c6363a9caefe3e5fd17185d07e8f5491d73d727750ecb9cd38eec9ca792c852b66cd46cd9a831ad97f75f44d7e06ed0988e91ee26a4a7f2db6c48cb2d5abc9b913fb85be5fd97d035b72daf5e93a3c26d937e2fcbeb09d2ddcedcf5e536e40f6e83bcff0aba86782e24e269d4e2d980ecc6f79fd3fc8bd135cea39bb5fb9bd17d9e86b913b478701e2a61ee3c349179cf434dcc9d879aa4fd9f38b2f33e4b224ba5ef0e2457d547576ae9bb03f983bb534bdf9d4ebcf9dfd1e4a8705769dcaf926ea974af66eef6eb6a29ef23e6aeef94bc49289d7251bcea7e31ba46e991f703e93f59637f9e07f68adb2e03b7dd1ab75dc81fdc3d1ab73d8e6d853334392adc351ab76ba43b55ba7b356e7b1d79055f68dc94bc299a3c939dead962748d1816ccd3384c411c4cf2d2c9c7fb983b1fef935cce387116be964496d2a3d9901efbb5f46846fee0b668e9d1e2c43be2bb9a1c15ae55e3d72add69d26dd3d2a34dcafb86961e4a5ebb26af5dbae74bf70073d7377a7875ff3987d359bdd5fd62748dd2b050e9339db9cbc10c967e3950756ba7c6b853ba1dd2ff552d9d0e1a645cabc93888fcc1edd2d2a9cb6151344f93a3c2756b5cbba57b48faabfcd4a18553f75fd7fc8bd135e238b255933393f92f0b3dcc5d167aa4ad328d8b3e4a22eb02e9aaf6efb094f506bae6b246e568cfcf4ef23cb8bd48cf5e2963bd26632cba8f65a8e7bb92e83d47bab3a49b6c1cd48774e963eebcd52fe37e135df3b847ab7638570b770173f7732f62eef250c6bcb70b0306bf4183df4996580e8e3277393889fcc1bd81b9cbc10d8e7dc5aafdbb4493a7c2dfc4dce5e126e9ce8b731ea76c9e2bdd1b917e373277beba59ca7b0b5d831eaa3c0c3077b91960ae7253fc912657e5bf5b34b9b748b9eaf9414dee2073d78f27b5fb27ddf18e567990e2ad381f93fe6fa36b70e74bf788bcff8e66ef092ddc09f43cb8c7e5fd77357baed7c25daf85bb4e0b771ca57f21fa9bb31af3290a433c3356a5bfca8b0b983b9fbc87aef1732add9f44d7206f2b73e78f8bd9d97c3556e589d9da3d537982e755dfe5b894fd31213b55f8eb64f82f3cc48febb154cf25ab0bca59bc7ca5aacf6e45e16ed578dfc6dcf5d96d8e4de33e61eefa4c859b2b9f7fdfb937ee33cda6b93e6c523add6ef03b8dfc944e773277d93a8dfcc1bd8bb9ebb2bb1cdb264cd2e4a8707723dbd435b895d2bd87b9eb8e7b1c79e3bf8ff4c675c3edcc5d779cd6ee9f66aeba63fc124dce1dcc3c863e65974fc93dc1f22951e5f39474ef45badeab3139a5311baee9701f73b733776872d4fde7d2633e61a726a782f9cfbff7233fa5ff035a5adc8ffcc17d504b8b071d76133fd1e4a8700f691c1e62f17a00dc8799bb1e7d58ca7b49935394c25ef55c31ba46fc4ad47860749af292f1ab62eebe51b267f3a57b06f9554bf711e47706f981fba8d4ff0374cdb9947eacc955ee6348d64219f643937eb931b1e2b09e8fc89a798fb45c280c357cba4b232a64ea4511109d07bfe0df4522da01de98f5720186958926b1ee31c0e95419572626c78a90de35e277337fa25308fd28318aaf274401ca75f19f36b4acd2cffd6bc5aa0c2cac74f23b0b583d7721d43e5e65ece23f6e293b78b45dbcc3d2c61af9ef5e216f1f573bf1c95426c1128c1e663b97e9ac1075731f05b4975f77090d1bc4ef2342d336a17d1df71b10eb5587f8307835778f89d8126defe37f9be26c94c8cc3a9a178a287f67394a25d31a6e0d685f2eea85af52e45ca408a0cffb4816c39c7231e2bd2b2125be62e85432d099a893322a05b298cbaf8a958bfec6f60482de6d4cb4d09cbf1dde8b78c59ecc16331948ee29c282780a7ffeed11dfbcafeef34f73dda655b372311c9c9ac2b46460415e596c628284e426e4e6e65480a23afe9809bf68f21ab288df79ae533ce73d01f244cbe44e8018747fb6f28b661e04d4dac4ff3ac4ff1f105709e95291279bfa3243c3994a3d0aee3013dc826cc34d5d9b24835b70d6ae385cf867265848104ca5034570b889a0e8853566bd7600dda94d1dc9198e386b459c61b9f09c4414e364718d941d4d51f1e49ad3a148a44326d2a994c831a44405a4c42883711560dc68b79e859a9ea0221157ae29d5c5fe95a67354296596eec5a6741773319393d631546c6a8b85f8974f24fd5891f4994540257e1e95f8e3a8c41f9f71e2e79b125f64b2dd56133f71a4a5fe5acdc37670f38e88eef3200f6f1a9925cf0ab02a305f03654ebf12917e339869bce84d232a350b4c84c5b07d5f560837f041cb467eaf993fdf263ac6e08f1beb552286b84dee10c9494f4c9b74a9207d2122ed57338a78a1a9fc40324c32b4ae3fe4ff120a4c215d6046989253543d3767b9c098a7336ac50ecf36b68557300799330e55f1f688312868a4c6b3dbb9db2eb400ff16d9094e1e57f20c31d9540b8b19bab5c64276aeac808d21c344c69c2232262c9434717f67fa65ad48814e11d302a3361003f5bc62b1496c5e1d14a99d4b34205345ece1624315ac9154c19a66285862b79b878255642a58627923fb43d3cc3aefb0b7a334edcefb74966c64e9b5eb3eca9434406f06a5949e34d3e9a4194d099f69106eac5093082fa684cf32088f79d47c0c25fc8200b08c3509870e153472094364683806c5a0b85fec773f208a6a6b628cf9748ce34c3142019c6d2880f372bc15c0f126e1903a730c557a0590854d1523c46ec78478a6d2f14c30c503590cf66424f42574c1a5b4e0128acec5063abd79dee84ca4e85c42d1999b119d522ac7ce0b20c74ea284cf0f40f8649370c0bfc080ff7bf9def09f47e12fa7f05764847f0a45a83200425329e15501089f4609af0e40f8f994f08501089f4e659c4b0d19e70723bc659c1954c65944659cc519659c998678ca457d0d5b52c333cc539311de877ab04d22bda11ebc5851169bc3bc0ff5926947757d665179f3b200f2e60526e1d0425f6ea2e1a129bf90120cabf0099d079899edf3dc5d984dc5b1cc140748d89f8125734cb140f15d6e28be0f8cf2567c2fa284af3008cf19ed4d78195537aca4ea865519d50d1753e9b0da6726ba84a25363a0f385473a7329add7f8d47a1e5560d7065060e79bea61d1b5cdee129b33f50b72bc0f24d7714da727725869ae6d6b19b58e965c07aa3e5d4025cf7a43f20cf3983ce526e105e23231c7ee1be72dc7569884c3f31bd2c9b14966c92ba9a2b0d16751a8a270d41b70cc28f586a3da54142664bb28e89366de8ac22613606331d84c148354f153c5602195e6f02a6442e309589b38af56ee054faf12db801a644c6d3c9e1e7ea78fdfeff794412e35a5a118e866734916eef50829b0acef3d156117f95cbd423327e336665e4b4dad0295908b4c0909f5d9f6009a9bc594f08600842f310987c46f34f2d4256fa3252fa56aca269f35e565148f1d01f0b89c127e6500c2afa084ef0c40f8324af85501085f4e25e6d53e1373052578974fc12b4d82617561773a82c7d28257519cf704c0793525fc9a0084d750c2f706207c0d257c5f00c2d752c29b0310be8e12be3f00e1b594f0960084afa784b70620bcce241c5a0610e5ab65d84095f9769f657e23c5e340003cea29e11d0108df4409ef0c40f8664af8c100846fa1845f1b80f0ad541eecf29b07b7516a7707a0f6764af8a1008437504c7afc3269a4d4ee0d40ed264aedc37ed5de41a9dd1780da5752c2fb0310be936232e097c95594da8301a87d35a5f611bf6aefa2d43e1a80dabb29e1c70210be876272dc2f936b28b54f04a0f65e4aedebfcaabd8f927cbd5fc9cd14901b0200b29f127e3200e12d14931bfd3269a5d4be2900b5db28b56ff6ab763ba5f62d01a87d80127e6b00c23b4cc2612df63696461f76292db893d2faf600b43e4809bf2300e1d752c24f0520bc8bca83a7fde6c16e4aed3b0350fb9049386c44ba2b9d6c926423520fc5e36ebf3c7a29c9f7f8957c98927caf5fc97d541ade17401af6536adfef57ed014aed0702507b9012fe6000c28f9884c312281c566058574c145e4b0b3f4a69fe70009a1fa3343f1380e6c7a9acf288dfac728252fbd100d4be8e52fb31bf6a5f4fa9fd78006adf40a9fd845fb54f5239f0c90072e08d26e1b03e070788f859e9bd89d2faa900b4be9982fdb45fd8b750929ff12bf9560ac8b30100b98d52fb39bf6adf4ea9fd7c006adf61120e93af2fa493fb924cbe9ea2b47e3100ad4f53c25f0a40f89d94f09703107e17954d5ef19b4deea6ea91577dd623f7502abfe657e57b29d2af0740fa3e4af81b0108bf9f12fe6600c21fa084bf1580f007a9d47cdb6f6a3e44a9fd4e006a3f4ca9fdae5fb5cf1824978b772f603ac2de7e17ea553e3faffc25df13f39ea922306e898173dfca62b0d7d38696d4b699474c690c29f1413a35d8fb74123f4a659e0ffd669ec74c92e1cdb88fd251b98416fcb8493054d23fc60c7bc1d630b5f1ddbd817d33832f9e1c156970addc9cb980ede53f75fcfe167ec739220a7ccc29687af5139ec639ccbd51ca4bd3f20465e58f9bacac22aca4b6f63b961e100cf68a0399d47df88c8c6e45fc2d482f163c4959f013260b5669354a3c4e47d71eaee55eceff307fbc596c3283f4a035a5fd834aa1af51f6fda4c9bed99a7dab38eb3e41dd9d16f5ac4de4b101d611503a3c45e9f975939e2bd24a87553c97b48a34708e55f39f0e99d9f63465db4f996c5b44daa6a70694e51e59fabdea1f97e5c59267284b7eda64c912cd127cc2897f5bccd2bc58f32c65cd374cd6d4a4281b3522d72596f6f873e9f9d316efe031747a7ca1e739cac66f9a6cbc3cedbcd7206b02bf252a139b9ea76cfa19934dcb3ce4426f56614941d8f50265d7cf9aecaa3fdb9aaa2319f0810c8eced056b6b366d99bad3bfbe45adec7750e7dd82efa046d5cd723e2698703f81e16d1803d4eafb853b66827583359a36662f58b94d51f9bac5e9d56cddfc01fde2f52a7191dab79aeeaff97280b7f2ef33e46bd489b7ed628ce190ac2b6ccfb182f53f6fdbcc9be8ab4eb98da94a53188d47985d2fe17d26905cca95327fadee1e905be4ad9f88bc96b96f4fae999b5e599c5e0c5ead728ab7fc964f5468f56e33c8aefc2f725938f4fbc5aefc5e6d7299b7fd964f3369f299dbabdf4223d88d6e40dcafe5f31d9bf2e49dfc06b7976f706d2ed27645ea6dfa42cfd552a77a7aeb76ac55c4fb3ec39a8b6650bff3b3ea63d97f5d85b94cdbf66b2794d9aa99b6abc9eed947d9bb2f2d74d56566b56d688be8ed39b1b907636723ffc72af9751563c94171bdea16cf88d745a551c2b4ea935a29fdac9fa891e9ddb46fa4e3036be4bd9f8497ab9d16c63aa9e5d6636669e1bdfa3acfc4d93953033639e89dc2e626e15631435ca6816f793e7479b7dbff729db7ecb645b5592fac46fdf15cbf262c1079405bf6db2a0894c1d3c3f9c4ecb975a4a7acf04954b3fa4387c8be2606becdc20eeb6728983c22e901b0f93bc6df1d2ffc9e73fb118bc02b95648eee321b78a1070d5cfcac5b96015672d4d7d4c24c4dd2dde3befe2b54fb338da259dc31f7f87d15f39495c83cbf48317a9ac30a5da02946ed8baf48f2c4dfcb847beb448c9e2a4c5216943cdd2df85541d29537558b938ab6d6e86b929b516bf07b10d37e721ef07fe3b0236cbb5af181cd0b3574483071d1b646181339252c698ea4c88f94280fa2e44009ffa816ce62c60f4c90e01fccbcf1d560129f1a94d5cb0a1cf69bf709bbd43cc003a7542a3a8a1bb2381ad6c741cdbefdbc436f62c36a8fafb589facf2719eeb8f04b24923e3c8be6d13d92863c1841e703b171405545b73e2a8fec026aa22816a2fab606a61337e544c1440ed2e8c83fac36c81728a63b4408d298883faa36c816a8820a8337971507f6c13d4c8841c15a5f66fe1b838a63fc916a686c861ea288a63fa8e4d4ce3c8dcb44908dc1fa18e42c1f838b43fb50f0d3a0a6b44d4d4827424a09502b4fc5c4db8be1611d4a7215391a647ba306c5acb8e898f44f40979adfac8571cb21d36cdff8ca1916b591aa3bfb2141dd1b2a46d6559d22e4759d29e5b599aa386b224b56b9987015b5992c6ac2cedaaa92cedf2189fa4324f2e554091fa73f6e59e3faa80f9a3cf00c2e3128253a37e6eb3469d24d3da992e3c2416f6e8a9d8bd0c0e07d574f0f395cc42573dbb2d1d0333a96be13d73d540fd459870564512e73d08e75fdac43905d544e9d448f04c9fb86f0d6a912da81508ea776d429d98228fe2d5293847d61acae9b6506e4328ff2a2c28ab2389f22184f2afc382b22a92280f20947f63136531aa3507643d09d7bd0c0e92368cc48383976f0bde0508dedfda84371ec133bd6b940588d672602982f877e7b230bbb7a854d843596b0be53184f2ef6da284fe06ce87f14163c2dc50043a393908db3fd8c4364be6c02efe10e43e18121e75c14bfd4a94d59c690df10a84f87bd928e42d72ec3d90744f8b4594d61a9db108e53f9e5b9451af2fe72394ff6413a5f7098d45111c811f4638ff394c38ab2289f35184f3fb3671ced49aa516814d4d42af66cec6c4e4882d167f6b80af4380ffc526e0120df0c124c3488b20ad75e1372190ff1a1690951104790a81fcb76cb4ede94db7554510e54684f2076141591d4994f72294ff1e1694559144b91fa1fc0f9b28276b35658758006d1f725df82308e87fda043a8799c6eeee75f13af141bca13a865f8a507f611375a9447d80ac089a5c55c1527b300b6dc1ac4230ff2b4c30974410663982f9df6182697145c81acc3908e6ff8409e6c208c29c8e60fe6f98602e8e20cc4b10ccff0b134c8bb34bd6605e8460fe7f98605a1cb75b83390ec1fc6198605aec675a833912c164b110c1b4b82bce1accc908662c4c302d8edeadc12c413087d984a98fde21602bbf716c88cd77f621a0c3c306348a33f18b11d09cb0018de284ddad0868ae4da06a5731ae3dd339a4c462b17fdf16d44710d4bc3042b558f4ad413d83a0e6db84aa36235eca86de66c4510862814d8873b5fa13838429e4cc4e3eb49a7397da82de81a017da843ec3501d783b04d222de525b780f21bc236ce21d25f142c4ed02ae92dd99788c4d70e0726d816308dc489be052edb48bfe98be10a12cb289d2fb4e3b8b1d286b3b975a10ce5161c25915499cb7219ca3b351d0d3db7663718ede5a07aa11a12c0e0bcaaa48a2bc16a11c732e51ba7789581cc55bdb25723d4239d6264ad89caf1e6863f0123d8c855ad926513f368b0365fbec012cb105301f011c772ebb42589cd5bc68edfd8dd908e5f86c4ed1c1a30e8ba135e7793b023a214c9da14a9b3b93ac75866e46384bc285d3e20e106b387b10ce8961c25915499c0f229ca561e95f5acd99d6eacd2d08e5a4b0a0ac8e24ca0710cac9614169b5805b43d98e509e171694565b726b28af4228a78405655524511e4528a79ecbf14fd6d62937db42598d504e3bb7d31a513f0ae06e84f2fc6c2cf9560dc125df6908e2f4f04cb3599c47b736cd7602a19c6113e554a61f069aea70d12c1cc267ad985f8cb0cecc4631af1c82c57c2a82382b4ce370abeb3cd6c6e1fd08e70561e95b5a5dccb59633d7239417860565752451de8950ce0e0b4aab6be2d6505e8350cec9c6a62cf3e933f01dbbd614356814cf9e398ef05e64132fbc4d83db72d521b27850df585bd07211b4b26c2e9d0d9ced450ead01e48d08e8c536814ee017c9be7280fda3b7c3b20061bcc426c6998666c719d5c03114506b0ef2077b87dcf6c16108f05c9b80cf63fac032d9972fb230a8b4b6e97a26423acf2652fdccaecea41df8e87594762090f3c302328afb383623900bc202d2e23bbfd640362390e5610119c597ff76219015610119c5af0c9c44202bc302328aabe30711c8aab0808ce2e6eafb11c8eab080b4788e8c3590a711c8853641c2e0425f9488e2d70686236097667362ad5b88897f95ca9c0ba37e4ae11d08efa270adf358ec02599ba76c4338178709a7d5f35fade1bc0be15c1296050aab5f1bb0d6f06c4728978605a5d52f0d5843d989505e6613a5fa0858e21be287e423d19b438f217897db8437865fb490b39151ed0ee5217c5764a3239e5e8d18bd427c3902b92c2c20a3380f791902b93c2c20a3380fb90c815c111690519c87bc02815c191690519c875c8d40ae0a0bc828ce43ae42205787056414e721d7209035610119c5314c0d02b9262c20a3f8aad33a04726d58405afc2a8535906b11c8753641c2e9e3fae6aa7a0623ec81886fac9a8010d666638ea785a573ec88c5e1a1b5698a0b11caf5619ac8adb4d993b43691db8b70d68509675524713e8c706ec8c60c6425c3bb7ab3f26a93b5a25d89e06d0ccb4c786524a72cea11cafab0a0ac8e24cafb10ca4d614159154994ad08e5e6b0a0ac8c64a7fc4a84724b5850564512653742b9d526ca603fbd69b1f36e6d916c0342bdcd266af506f84236f4de009f87206eb709719a965fe12482417ea3860dcd03180711d8069b6027b0f8db3910a845a8d02dab80a8e7cff311c6c66c344df12da9fa1bb651cf918b10ca269b28a71b9ba6a1fd1de8e508ee8eb074a12a23994f6b11ca2bc382b23a92286f422877860565552451ee4628afca466fb37a08f63667218857db8478be8438c03af86d6876cc5f38ab9501b27682e0145b684720b4bb6ca29d656cdd1b993a41835e23ca521b6feda48d9508f1ee302d6f586de7ad2d6fec4338f78409a7d506ca1ace5b10ce6bb2b145815a168efa9ee16204726f584046b1cb341a81dc171690515cea5880403687056414f70c8f4120f7db0459eab1c9b1b8d461adc1d98360b6840966143f30b317c16c0d13cc2876852e4530dbc204338adf815c8260b6870966145f75ae43300f8409a6c56e9135985b11cc8e30c18ce237a41a10ccce30c18ce2cecd2604f36098605a7c89c51acc9d08e6b5618219c523eaaf4630bb6cc21cc3e2db12d4836d915fc09884f075dbc43705e1739fbdea3edf003eefd1c68eb12c9cba6a0d6a11827ac82654f58514b574010ab40ed91d4803086b4fb67620b9f3aa5a158af28766e6228cbdd9987c4bc4d8e0aa3fa35acca7209087b3b1f88bdbf11d9c470d57bb55cc6c2a77357fbc83073bc29fed115b67ad16756b5f227f0ca1edcbc63e0f6a82188bb33aa8b456dc172294fd3651aa0db1f12d0ae9e7518b60ade5d11908ec4058c15a9c53b206f63c047630ac602dce7c5a033b11813d1256b0516caec623b047c30ad6e2249e35b06508ecb1306da9b1fa5e9cb5c9921b04cefc5c4df8ba04e135c25830b745e8ef748e1688ee3bec8f03b22dfcba5ee4c201b68f03d9c57fbca5c11efe63f28f8917b8d7b2635c3df00579ad42369c6c0c9af5b30a68258ee32c51461c1e5d96d6998a6531d866179fd88178605aa7956d1249decc6d80a7015f4c3c0bfac0db299bc4f0a5993fd92cdc46a63e4b5a0e238418bca6e094d20567cba743b89bff3857ca3fb54ce0955cda098012339793aec0523a95454ee684f0ed5cf7169101c13795a5a9eda3734d5192542987e239a4edbf0ed23d47a6fbb072682a629501e4bdd41a5d0f310fb35433a775227cf8d2752b7fa24728d727d4f493af612bb45b5ea788b7fcfc70e6e9e06cbf01d765c3caa7679aa7bd6b74d2669e76a4395d384d766d1ad699d341b739fe54afc80fcd67f38253c23bf8dfad6990982626496869abf8d501616ba790dacdd43f682ba1f70655d18d3679166975447c7ef1ab9a42c45b0135c54daec2540185e9e6af7279a0b9fc169b3cd3fec8eb97388fdf9a98c76ffb2a8f079ac76fb7c93383e3efbfc4b9fd8ec4dc7eeaabdc1e506e879f5251e936f1b0ce68085eacec133b14fac493b93f020d539a4cd8680100 serializedProgramBytesString: - serializedSignature: 92947e5717a4fe7c93f8920ee35a669ba44c148012f8130f16dbd6a29673a2ab32dd0b4212aadb69709df29695b0edb8c6e70c3c6d7593ef7c9d268ed5b9ec04 + serializedSignature: 7b9eb41d6a7f73b28f7e4dda3e8069a7797838ca3cf1ddb6c3e91b1462017787a664d404cb2c1a20750560ea983ab811ef8735761b2a73c62a34e4556731ac00 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/fa52d8b703fd906459112715b1ef1f3a.asset b/Assets/SerializedUdonPrograms/fa52d8b703fd906459112715b1ef1f3a.asset index 39992d8..ae0d398 100644 --- a/Assets/SerializedUdonPrograms/fa52d8b703fd906459112715b1ef1f3a.asset +++ b/Assets/SerializedUdonPrograms/fa52d8b703fd906459112715b1ef1f3a.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed5a6b5b1347149e0db9ca1d0482a0606b6b2c4a02586b6f6a00b178414b807ef0e98311824d9f707948b4dacffdd47fd47fd07fd48fed396767c9ecec4c964d76a2a1264f76b36767ce9ef73d67cedc369265f0b1aec3618badb32536cb36d92e3b6407f06f09cefbf0b5af1cf933760ce757702cc2bdeb6cdaa7267eae5a6938aec25595d5a0e66bb603e732dd2fb012fc5f85ba25b842e91efc4a50ca8a42a54db6cc9eb23536668df8a8d8a24a552eb310979584e3227b07774b64143e244bb7c6e050803b55bab70f463be59eb39f09d63edcdb813ac7ac023a5f92c6e41f70b408139dfaf9b98f9f07e01787dfb0708d286ec32f06a223a97c172f7f5e9247b97c4492c7b87c5492c7f96f8c5f27f87990cbd35279473e2ec9935c7e4192a7b87c42929fe3f24949decde51725790f975fe2d7bdfc3ca4b1d3914ff1eb08b705ed8cc42c8a901fc0674576c4b278d3ba1620949d9afe418caae311dbef10cdf8d81a84cb11285044d226c5698d2db07965248d5b3d82dd4b742c428932299df63ee22fcf23d0b80a7c4b4233a882fc01b5226c0865b833cb1ec3196bbd607310d8cf252d5bf0d80a34a512db80e311e97b01667b4bfa41c22623d759079d768bde078943e8115c57c8c2021ddf90a525b27e156435ca2f07906116e1fc969ee6c57e0cff55cfdce094a96d54376c9ddc4e1f8e9b96010d5a9fc536fbd123efc523942ea779338c66b18d587f7a3cf191433bc96067b1ca75ccd95d964b36cfb27869ad7b180c8ed18b501ddf36dfb7d8cd8658d4cca0bb270841ddc35d77fe99b91c7dbc1873435b6059ec36ac491f688d88457d196bd4a3a13184582c9a434365fa2d15fdd44d17da48bf5dae4ce5823b204e3d93db01168e209d4eb3c07e811bc760ea2cbb0f4614c9ec0a3772932055a89b2b73d94ffce1bb2c0fea76296fdac3b91a37b3ca3cbecdc5f91027a3e87cfd20ea1c14513928d96e07f967a4460e4a9ee0aa3b083f6a06531a06fd6cd031d8a56230d5fe10b77d5ff1c9976a0671403be561f028af66b05b1b838d6dd031185530984bf171b3d7acbff3b19464165aa4511ed329ef552a073d0194c775cafb42509e5005167acada686360e1bd43d25284b2c1430be78a333213eab81aa0b84a7bc0f99ba08baca4ce3f834aff4c078aac944ef9905af96210e5e774ca874350dead537e3e04e53d2ae50867441909b2e601bde65e9de6d15635f7a99a1ab1f4c2685373a6df0598673d827b45285fa2b13cca9f81c6223c1bf5e5e909f529bbbb46e3268899fa86448fba05a6a9055e612c34cb742db35fe54beac899b733ff173e1e77a6f4ee1cd005ca8556036550a779a255cd433acd93ad6a1e5669c6ce0597a93c03db8513e7bb1da973fc2cdb86ef2b1abc6ed324ff3184dd0e29c43b6248ba13b90743428fe1bc0ec3251586bb4d6170d6530f79d37d00a5704023a3108739f23dbbf66e206c233a6c532a6c2ba1605be6cb31e807bc5ea1098c69a4a33aa4d32aa40f8c205da3e8338f754c87f5b20aeba350b06e51eb7a4d1d538d2fbdad434d9c60be067da631a775983f5161be2375adeeec60233c04b4db30353b209fbd23efbd82ffce5263e30c135efe19d721fb54856c29146f621efd8dd6c8ab0adf3546da8cf72ee8305e5161bcdf02c63c0c8f8ad4268f85059076e5db091dcecf54381f868ed3ceb5ed6c97933ac49f879d8bd4889d9cdb4ecc177598afaa30ff183ae6f79d8b2fe9f06754f8d70c44394e3e308f15288761c6f61f1386817c4a87fc9a0af993d0912f917f6b342dc4ff3819f4fab415dc09f85a16ce4fefd354147bc6675403afaa2c4b73f01cab4fe3fcf684f1d9fbec2559b40116bd3c59c46bace10ba6df21de63616d16faa1b0176eb1fe1eed283b1b502a74fe98f41ba3098ec8d1054cd39ac459433a835ee5ef7bb048965647669a8c267f2bf0359c78973a86826f74d80ad668130614e03ac336b3dfe0a937e587bcb194c020df273e05adbf724faa9e788314387b6a21bc2681619607cb7669f506077ff8c1462f295f092dee9adb2ff3b6907eca496fc13c94d68860a9c5d0cacf8766f90d31e233a7889a7a0a56a7ce1ca6e0d9ff7976cc6176c49dd2f8b0934c72984c72265b3c2ea415858ef9091cdf2aa619d2735bd9334fb93240f769403593059294056c0ae74c5288de7a23ada03881ed9e951a2371c014890981c47993248e4b71280f8877f880b8cc7e1716343a8fd01e81d0059384f65252dea607efd14cc2d15df676e3e1111733451c1388bb6992b8514edc0eef526ad26443347e1b92b3312a53a6a8ec17a8fcd2249529576674d6353aaf2b890984dd3249d8888b30bf4591ce23322e10f995e93ed93bac51adac751e89e704126f9b2411b7111b8dea45b9311ad3a668ec1368fcda248d97798762af371d505f7c4c4d1a57bb0e8052fba5f1b3d6cd440482bf314970d29535573ab493890a747d6b92ae7ea61b191ef022c6c84b9822cf12c8fbce247969a963714ff7d48bd99d374be915e8fcde249dee1162e72e36740984dd3149987abdc6bb49da7914a6040aef9aa4704cd11f37da6b32d8f71a6bc0030299f73e2432e73a90cc4181ccfc8744e67c0792392490b968924c7945d1ce94676f4eddcdcecc6e570e8be0eb60f16e1e1419cd0821a31cf4cba59df97e26e0c24a26c09a7ee6d45b28ba92dece3b1360fd22d364a07beb9d6ec93dd3d410d8de001ce43189ef963e21bbd01e5b4f7d33304b2fa4e33a5b901df4c63afd77ea9699b0a729b5a54a686d298cdd4715d25676227b1a78254baff09f65fcf866669cbb9dc2748cf6a937c1f3b6f2127b0a8577c928fcc4fe035c3a8e7110450000 serializedProgramBytesString: - serializedSignature: 1a02d76c3ae91a409451a79372f905c20c10e15658eb3c015dbf961022617f7b287997c3081e087b6751786c87db67807be2cea4e68d645e5356c1602eac6409 + serializedSignature: a1d837a5a32d679e6ef798cda5c4af1b535b3ad0d9c4968a1a2693bd502f9ae59f36b1aadce2e82d7c1f43213efc2ea42262196fc56cc29b897908901355070d programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/fae68a0056e7cfe4fa316e9f15f1ce36.asset b/Assets/SerializedUdonPrograms/fae68a0056e7cfe4fa316e9f15f1ce36.asset new file mode 100644 index 0000000..b90245c --- /dev/null +++ b/Assets/SerializedUdonPrograms/fae68a0056e7cfe4fa316e9f15f1ce36.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: fae68a0056e7cfe4fa316e9f15f1ce36 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d057c14c7fbf0e782bb3b2dc14391041282d47069b1924085b61048809440d20885ba97ba3b757777eaeefeabbbbbbbbd3bb333b9e7f6e6d9dbbdbd6733cbfba79f666fed99e7f9ce332e9b95cbac7fb161d69f856c3e9bcc46b005ac9455b235d6afc9d671b5f59f7da6aecf63d5d67185f5b7c4ba378c65a77893ff1b1ceb6efd9d699dd5b05aebcd3ab6cc3a968bfb45acccfa3dd37ab7cc3ae357975bff97594fc51a5b2f2d6053d85c3687758b75492162a178a9465e8b71bb62cdadbf93d87aeb6e99508a07922b6e75b3fe1459776ac4bdd596d2eab9456c0f61d66aebde32eb9d6a5661c95c2a24367f603c133f987de82d8f5bc8632febff16f27723f9bbb9fc0d9f6f228f5b7a7cbe0f78af05f8cd095de8f27eb67d14f89b5ac7a7c0397ff76bf95c5f5b5ed64a1759fde571803c0e94329ff6a07f33791c94c25e371983812c2fcc9acbe31079cc91fa3e9366f8436d46b18d401e67d903e8330484dd02dce7d7b60a60bb8ac79e8e78ec69c763d65932fe3e96cf0f93c711f2385ccab69ee9749cbc962b8ffd52e89567bfc7c6b2b8cf5a6136aa92e723e571943ce64bdd7a4b5d9f05e7417551715a2065f692613ca7b9ae9ee7f79f97e7a3e5b1d0115f63e4732fc8f3b11ef5f1e27f4aa72d64182f82738b63e3252eb254bc6fe9887719078d4fb23936bed3610ff03faddc7152de4b69d8d1c761471f5b97263989cfa5d441c91f2fe5644bb92f83732ef7349fb63596efdd2acfb766a9f3b6de1eee6d67cb69ae586f6f87d3b4b37dbde9362cd197b74da1a78adbbe8eb8ed2be55648b9cafe09f6794c711e04e4f0f75f71c8ede790db4fca557984f2f1547a4e94c729f2385d1ea7b1fa743cfc73796db23c4e9561f6678979802a4326c5dfedbace2737b7389ae188eb7e32dc012964aaf767ca630b8fcfab677608a0f38ef2d8d263982de5715680305bd9bed0fc7b872f6c9f42e66c9b6ff35aa08325a7c5fef27c8e3cce95c77992ff60871fa8b2dccd0f52e9b293d4858138b07469d95e9ecf97c7a2445d58b143a75733a7534cd589fe07cef97190bcfe1a38e7baceb3c369f98894b9401e173a74de994e67b68bfd5e9bd6c037bcbce7e65fbbdaf6b5927587569239dbcda1db8e71bd9b4f01ef2a3dbca487dd258b210ec643a40e8aed1e8ee75e07e7fc98130f4ffcb6de6dad7c2b1b5ce7efbe01cef9fd451e755dcc927d96cb190ac21e2ac396f97feb93e4b34b5872dad3bdcb8fa0ae297e73796fcbf74a587239a69ee3b6bd09cef9fd3d3ddab654a39f156e9b092eef2e6389f9cfccb83f345375b152a9cf309698b6541d7770fc9d5885bc56669fb753ba2c97efa8baa7fa6de9d756c5e10a795cc5f4e56c39e020d323db2b1e76ef07e4b5952e61495b98d253d9bd6b5c4eabee5277958fad668969c6f92cbfb6461eabe5b14e1e6be3cfe6a9fafadef25823751bc112f2665605aef363aebcff1638e7cf55c66577b9515e5bebd055179ffb386cd7e5016e7eb6ce7e36374f9eafb7d9b6db28b93de2d0613973f7df0ed2ae3c96987fe449b93fdb72db2f91cfef2b8ffbc9a32cfb62231339c654bbc82d6f4ea5db588fcfb9f13ac80ebbbe1e7fb03c1e228fd3806cd96e8a8d8aeb5c5fb73b10dce3e7b28ec70e60096592ab2e87ca639b14f6f406cff1e36101ec77bbd7541e8f94b6e5b3c4b64dbeed031d1bbbc83acae6d45df9ee06fb9d4e9de5f9d1f6fd0e4be4f931c0261e46419c75fb4be5bd63e5bdd1c0ee03e4b54270ed08796d4cfc5a4cb5bf8e03ef719bde76dc3f1ec8d0dd3f01e8a0bb7fa2bcfe8ead7b2795bf9ce4b0e50087ae852c213f612727db1a2b7484fdae8fb83c45be3bd611976365bcbce022eb547d5c767e5f9e9fe688cbd31d71394e139767c87be341bc0d97d7b6d6c4ef3680c33879ef4c242ed5fdb3805cddfdb3810ebafbe724c66517d5963d17894ba83f8ccb8dc9b68a6760d8ef7988cbf3e5f13c79d4e5a117c8a32a9fdef720f74279ac74919bed90fb8107b917cbe3452e722f41f44d273ce5ebaa4f665b96e8ebfcdcf2dbae9b5c645dcab4bede4df58f5ec6127dfd7296e8ebdbb1645fbf42de836d8749f2da0496eceb13819f6c27ef5d099e81beaaee5f05e4eaee5f0d74d0ddbf8625f87a7755cfbb96e97d1dea0f7dfdba645bc53330ec0f3dc4e5f50ece8aafb2ef35706ec54f77a59faa1b6c60ee65e30db6fc514abeacabc5264bf91f81737e9ce208778a0cf76f5b4e8fbfa59cd6f6f51eb2ffab87ea7fba4986a7fac96f96cf6de378ee16fb3c5fd5856f73f0bfdde12ba0bfa9de965bc13d68db74965827b9435e9f01e26a3ab806e34ad5cd527155eda7bb1cfca64a791f8373fedc3d71fdf3557df96e793c347eaf83aad7aaf86d0df4d8a4f715a12b8833df752465f3bd296cf69327cd648979d24cdb0f7acd7391f5a07ca6d6e59987e551d5f31f92f2776089ed14d9b6668fcaf31d1df755bfdb4571f65d9b033d946cfece271eec7f5c1e9f90c7c76438b35862bb40b6dbb56544baf5d874ef954b9d6627fa8f38b7e2610bd50655beb832857f3c298fb2cf59b48fb9bc390e06aa9fd0ad6d942a2c17bb62f358625f81f2393956199b2bef7f2acfe73b9e577d87b22c8cede478bed8f1bceadf52f615253ecf9e0372f8f9f371db62aaaff405704df559be18e7d3478e03c4162486cd5e6289ed3bd5865b289ffb0cbc0719a8fbb27d17dbd961d32ef2fc0b70ce8fbb3ae4aabe90671cf795dcdd1cfacaf11da6ce5f8ddb58d81dbc0378b2571265bafab41ceb8b2d92ef7c09ce2d9feee356ff57efaa3ec53da48cafc0b92523bbb9ad6fb64b1a8bede9e0b73bb8ce8f8be5fdafc139975de5a29fd43db6c461db12f9eeb51ede2d91c7a50edb964a191f4bdb7e7791a5ca99d71d71a87c96cb2bd5c4abeaff927580d832a9c337e0dcd2a1afeaf37c83e97dbbc4f1feb789eff753750fd997c9de72e856c612fbbcde9147d5ced4f82453ed16a5fbf2f833f5fabdedd06fb943ef1532dcef801eea3a3fae648965941ac77a5f9e973beecbfc5b3ba6ee96463acaa32aabf79272bf77dc5775c35589f7637b81ebfc5821efff20dffb105ce7e71fc8fb3ffad04df5cbaf467453baaf71e8b61a5ce7c74a876e4edbaa1cef5782ebfcb8b7e3fd4fc0757efeb10fdb3eb5e368c0060fcf7ee6e3d9cfed670bd5389c9c7312ab91bafd24af7700d7f9b15adeffd9c15cf51bf36b2aedd6c9677f01cfa8ebfcb89625d6f7f8b9951607d63ae4d43ac2fe35f17a7dbcd6b2f8dc0ece418d5bbb7190f92193792efb8ad5a78b7139e01ed7eb19fbfac0f75de42a8eeb108eb2ce12db07e1b85ec3715f07c7f5e03a3feee7e0b89fadefa04d0e39eb1d61ff9a78bd9ee3fa448e83d4b8891b4795e7493bd8372c310d764a0c837dcb5cf30ff69de3beb49d7d0ff848fdd90f9a6b3f826b923dfb095cfb4d1e7f06d7ba3874f85aeaa09ef5dbbe71d81cdb1f6132c471ff57c77d95ef1c80bc5fe0b8afdeefecb87fa0c39ece8ef0d5fddf1df755f80721ef1738eeabf79df9eec1489c0f71dcffd5715f857f08f27e81e3be7abfbbe3fea18ef71d3e5b7fdff9be0aff30e4fd02c77df5beca0b0e67fabce0707954fde93f23e11ee190db33f1183b8ac57df87716efab82cffe219f3d5ade87e7fca8fa03fe04e7fc782490ad64c9788f1d937c2f762cb8f627a2cb5ff2d9e31dbac8f185d871f2fa5f40077e3c415eff1b3ca7aef3a31a5ff807e80739aafbca3f9d9c4f4ae11f2727de8f9d04aef3e329f2febff2bdbf1dfa9f2aefff079e57d7f9f134fb7e1693ef3bd3ff69cc3d7d9fce12d3a7233fabbf8fa5ef33997bfe7056e2fdd899e03a3f9ee1e02fc731983a3f5bda1703e75639355cf5ef39ed55630c587e79ae233ece01d7f97163627c287d62e7493db2c073ea3a3f9eef8807673e74be231e746580ec5f8c5dc012fb492eb06d1e21c7ec474c90cf2b9f99ca5cfb3062cc21ff42a96b2370ceef6bc6f1638a7be34419096d3155cfbb8825b767543ba651fcde38d53efb0fbcc78f59c01ed8afeab75fa609d38e39e4aabe1fd5cf04eb4d3a6e4d99b68f39f7019f729ab1843ee898633c23a6da75aa0f5acebd8b5d9cc82126e74cc52e898717bb185cd3f52fa7d04d7b4dd59d2f65897e78a96d7fde85d247541fa4f2c39a1461a9347519784e857539b049ce118b5d01ae5d0eaef1e395b66e598dc1b9f57bd40087dcabe4734d40d8fc78b5bcde149cc37c428ddf3ce390771dd0e91a3bcc91aacfa38d238c6b59bc1d6d853f52b52dfe05f75b003dd5352503b4c155f84cb657b2a44fe5bd9d1866ca38d0f9675b79efc634debd9e25f6e75d2f8f37387ce706193f6fdb7ae7abfc44f9e9cdee61d7cb6d278f37b2c4be523526d31ec8e39c9ae332b5e1dce4b0e72647b8ed59ea3ec27be4b3aace768bd4a50538e74760734c9617b15bc1b59be5f13696d096abf7d1dbc1b3b78367f9f10e96d8bebbc3e63ffa6d876cf5de9d52c796e09c1f65f919bb4bde5779904aa377031dee02d7f8f11ef94e6b706ee950f0beed03a36f45c2dac412eb789b1c61de2be5b601e7dcb6958ee7ef93cfb505e78a3194d3ce21c7a9d7fdc0c6fb651c00bbb57ea4c6150bc039681f170c48b429953ced35552ea8baf5030e6e0fc8e75e4943b66a8f2a5f7b10c850f1a4c6ad7e01cfa8ebfcf8b0c3071fb6f98ec976c891ef897638ec6350d70bc039605878928b8e1d03eaf888434e9a3a8e2970d1b173301dc7ae74c851bafcc312eaec29757cdd45c72ec1741cd7da21274d1dc7aa3e47375ffd4a8639c17e679c5a17d085a5ece38ca9e3232c71cce3112953adf351657716734fffead8551ebbc9e3a3b6fcacf6e09c1f1f73f07dcc11278fb384fa8838b7f41a7fb843ce130e39aa8ea6b83e29c3efe078ef496017bfdfd16636fe2c873d29ec4ebcd62426da0d3358192b61552c5754f0b9455e9701ab37532f00167a8bd617e32b8179b0b556e5b7ca12a05985bb40acf1ad65f96c9476156e0f912fabd0278bbf25d613e54268a7aca420ee4a0a822b5761fd57069610d758d7a78b15c87c1171b97567049b651df95b4bd848b6c8fa2f51ca422bd80a56679d155b7fab84bc2596dac94fa632892f3776be33df9269af865e6d5d5140abacf30aa16191f8bb56685a26b49f695dab156bb3d7b0156c92755c27424bb6bddafaad0bb35822d3eba85f148d5db7975eab689a6259c3b5cf15bef87f31d21031c2d137ed24d361e35c51cb3f262926fe8fa19dc9f046e94c2963a440164bb8368ae58a76ebfc2482fe6d4cb650efdf36ef42abc070b3454f8647772f61413c86b73be7d79d1f1ff85e4e9344d3f259ae687af74e619a1b582e2f4794b07e4c68d2a4711e57d4893fa6c32fb614280a11bffd5cb978ce7f043415855f620488e9d7c556ae360f149e0b84f2154235a731f3d84a219c2bcfef4fb37eadb3ee945a6f55597f4b44b07c238c0a4b962a14ed1d3bb8c9a5c2f8a4f8cee3ca351351965c20a7321b8bb42c5da489367f7183a4196c5b0ff7686b5e6f453cda72452dabbb8b73636189ea5723590753c96fd6dd2f74d978d3d02336dd36774df1c95f7edc441f3f2d45fca4132a16438d7431d432ec6495ba1c718b9f56f576c5e387ffd3336c8df8782a1d30828d75045b85ede3fc5ea59052623deb9f21efac19eacc9af400db224e985a050c61130dc23c8eb09d462bd6a485432bae1022b9a92e725a374ca19d9e73f3966837078226a87377702d73fdba76331d3dd1adb784949e6a4b16598d861dad7b25d6f365a262caafcfb3249658617379134508f1f667e21bee64791b7ab893ac966a27417500681907d50c23de5c433c8ffb6b678d1b883cce99183ae089a10596ccba044d662d31c95d834a6e8549ee1654726b4c72f7a092dbe8928de8e5de3d946413ef8251bf2659efaeb48c592bdad575d6fbba2e1bf7e4d2c37372e929924b36d37524f9d3084b266d7571c72ff6d229e98cba9e78d4b5c304f70e28b83de66d5b04f5b60e3a6f137694937adb02eb9addb6982aee968b5e1aded6ae1615801ab65c788ebd3f20f6b4f2aed96263be3aa187bb1f6ee9d90ffb083fe4d3a2e974c53cb4a32e56da375cacf0f620ef57e316e4d7b71232172bd94cd34612aee9c63fb8567d2de94d1b31fb5fe35c817da8e710fd86c6ad047facb8ef9870c1ed6a33a44dd72fa59706a7847969275daec4bdb4bf263af378740e48e0edc37c148a33abeb8767759d75894ad8b0803451254a9e220aaca5424e7a1d0a0375894518d723c90e2fa10d62a04b01fb87b8df60e17ee9858bb955179d5b894ab4ceadb8e143bc59e0f495c1b8af74c55c7b2bccb58736a46b77c3d41d86a93bbc21d5ed8ea93b025337b721d5eda15397d791f83aeb94d5ba3eb8e09e3ac1bcb236d28b6097fa622f9d60de64e13bef046d08f6d609e76db87c96dc93f69ff52f49786b5cf81698e6051acdf3cbb37c69bea54e38af46f34d620255a3fb60920b834aced648ce1559e4212cdce6a07e147fbad8c4bb8ccdb572f4bd645543855b292a155c23358c3bdf3a2e175af0eb5c8bd4a3ffeea5e1184d96912bb2efa9ccfb5c047a2bf87ce22c5166f2219b1cb1371a5609d369e3bfd2a62fb1c78bd0cd6283d504fa6239cdd69a9ce6755d36e692d3f4c392ec3641936c7f9d649e64b7d5f86a1ef755beb14c4b919f2785331e0f67802e6b1055817d1b346bb0bb8bb9bce562628d2d6f0ee35becef235c7595e5c06ba5e3145bcf545b619449270f9219f04d73b670008e31fb9f3e394c10c9613b0fc981d22a2c010cd47912ef579fc83463c1bc5a359fcdb3242f16c9706f719953b263b75c3c5acef615a3bcf61c99247f6b86fbdb209d36bcbb92efc191b2bad209173c18133c39a0e01c9d609ec6a7044de3437492796ec373d6a035acad30b5a705557b2896a34ed7e4a87fc7fce5a8c330e13334c23765f9133e1c4b0a33bdf8888b578fc004efa04b63038557f25ebf6cebff4aeb0ddeb02d11a93f5b1486f1dc20db4aebe5d62f5e600f03cf575a4fd873d2fce8998b39c58e419d220f8bb7599a78fbd967bc8dc484cfd6089fd1c89ff05158dccdd1c51d5785971bbc5ab252966d89b961b6981d982d2684d689a1b652117335225eb3d97e16ab03ac23ef4dcb16e54085b8972dbe38532df25a3f719a8fe93f57a77f4ba0ff3ca0a19f100bb07c6b9e26df8af9ccb746eb84f38acf4e0ca9f8f07174ff159f420c5b910e1b6f524e15939c965917f8f345c201caeaebcaa5192a20c768f4ca159d1d6b584356c8786b814f9fad11bfe355141e767c5a56908a179face2ac78a97ffa8a17ef73cd113b0187a13d56c11a8b65aa0b35996acc4fa63a0e4b0b3b63696197b4d2c2789dcf891eabaa06f5393c45cd17b279ca0b5ee1e73b853572b6fe45b75a8107cfca948e43c52ae01af145319b5c0dcf4cf98c89a5e0d361367c9124f46962379126c2d41c4b175b63a5f6224da97d6b137fa5f6363a97155d96d50deab253848430dc76779ddb8a7ed5420f919f493dfb8855163522532d9599aa9d75f7114bd2ab45b159665d5f2bb2f9f8fda1624934af2f4d13bc570bf295624c7c85a882ea9d7c0fe1e461db8939fab63a47e786efa929007cd5aab7c392d0624d12fadb6712da1e537b4950b527606a9768d4debfa93fb52762c2976a84cf6ae64ff8249d709e312f63c15a889331c17caf8ba4ea26ef9553ed84658e96e252d15650edbf527165bdf5d79e6bcf45648b15336a1aa01f2da7606ccb346cdbfb643b1543b03c20db693ac1dc3d577811ec3204365d2798d7bf5632a4fec5a7d6f8af7fcdc0b0efa5c17ea14fec33b164be2a6832df01935c1154f28e98e4d54125cfc224af092a79361689959a48e43361fd44e21c4c78954678b14fe173b184b9b72e6f1ac878d771bc926a379fe2fd1a25567aae15394fb655dedb656e6942ff08eff328978d663fe97c1ea667b54e4f7b812e9feccceb1425a20f8d8738d7727c3fa1ee84a1afd1a03fce27faf998f05a8df0cf7d0a2fc278d5e978754f11afa5628e6cfcea48ebaa1f8ec598366b75daf0d378bcf909670186741f0dd28d2dfd215d8819b14e67049f3662e31b6f219b233afc4ae4e2e2b5a218f78f71674c83f53a0d78ce36abbe62302fcd6ac12e18d27d35485ff18974572c47de2f688ebc1ba6f6feba4cb3953fb517616a1f1054eddd759279ade34086d43af81e99fe6b1d7b60e11c8c8573485ae1ec89913a3428a9c558041fa689e009adfd45f0124cf8e11ae1fbfb145e82093f4223fc119fc29762c28fd408efddc69ff06598f0a334c24b7d0a2fc5846fd0083fcba7f0324cf8d11ae157fa14be1c73f263823af90a4ced63356a776eeb4fed9598dac70555bb5c233957cccc0b7359af73f693bf59d27cef586f0b3df86eb1ba25bda9c2c7ba94f6d2c50b2fa14fd4a9e4a3285f8579d3491a6ffad86722a8c0849fac11bebb4f575d8d093f45237c834fe16b30e1a76a84b76fe74f78251699a7058ccc2a4c30df9437a92e384c7867a54863d9621306be6fc61af16b8dd8a6a14c0c5c97c8e534aac3490d5cf38d58b2a5f7564b9faeb0bc7d8475d58fd67b635a9fa1d39a6719bc13375e6fb69b9276334437af309b0d96b5eec1bef4aac67ce04c8d0fdcead3c16a30a3cf0ae803b53ac17c62f9d95e04bb4c2cafd309e6d5c37318523de45b24b71412fd540fd762d8376ab017f84c7afb60c2cfd308dfc5a7f07598f0f335c20ff7297cbd4e382f99f966cf814ae67d31b52fd4a83db6bd3fb5f7c3fcfc225de2b69b7976ff426276e32709ec8f8579b12e4c6e291ff7a99019893d2655e92bc403b0102f09989a0fc4045f8a99b2a81ea0dd97b087cfdcf820cc1b2ed3e57a3ebde1604cf8e51ae15ffb147e0896415d8165507c0f68ffedd74375e1f0f4759597c876195e380c137c7540c187635e744d40f73c02137c6d40c147ea04f3b8e7db693ba79471017ea6941d8579e1f51a2fecdcd19f176ed009e7f91adfd03a503e7d34a6f68d1ab50b7caa7d0c26fc268df05d7c0a3f164b99376329f396b452e671983bf2cd5893724bbeca73b1f51fef37e283a52bc496646562dae53a71a74ad47d798dd28fef1e8f69719b4e8b4ef55ae4597f5733bbb3dd9eee90be0e27603adcaed3a1a3d421dffa7f996845f377d6597fd3d7e0444c833b741a340771c117452cf759009f84b9ef9d1af71dd0c99ffb9e8cb9ef5d98fbde9d96fb9e82657af76832bd463e33bd5331429b3484def749e8344cf8bd1ae17cd1bc1fe1a763c2efd3c5ad4fe16760717b3f16b70fa415b76762c9e141b7ac695486b3a6b3302d1e72cf9a4666306b3a1bd3e161b7aca9208359d33998068fa4ca9a7616e1f99bc07d2ee6be8f6adcf77b9feebb1173dfc730f77d3c2df73d0f43c6b70b0f52d13b1fa3f3a486cefe5dfcd1b900a3f31446e7e9b4e85c8819f18cc688577c1a711186fed980e82fc6b47e4ea3f5b0aefeb4be0443ff3c86fe85b4d05f8a19f1a2c688677c1a711926fc258df0af7d0abf1c13feb24678fb6efe845fa113cef1bf82e17f352dfc5762cec93f8783166bf9192ed6aec2b4784da745bc581b95c162ed6a4c87d7753aa8626d74068bb56b300dded069d082c58bb5a9a207bfd2e72c906b31077e53e3c06ffb74e0eb30077e0b73e0b7d372e0eb3123ded11851dcdd9f113760c2dfd508bfd5a7f01bb1e8e65f040f522edc8469fdbe46eb013dfc697db34e38ef1ef98005ec1eb90553fb438ddab37caa7d2b06fb235ddae2833beef3bc8aad47abc44cac1522dfa916d320ede53ca562046d1eb3f72db697829658574bc522d195e25ce59b256ca91cdf1a29c6b7d432d2f5ccdec2325b8c2fdb9fabe052d608297c71f12a71a5463c550624eb47d0cae548201c73f33b5df3362c823ed644d0ee3e23e8764cf8271ae107fb147e0796197d8a65469fa59519dd8919f1b98e504f7f46dc8509ff42237c824fe177eb84f3c4faa597ccc8a5ebfa1e8de05cb1e752c3ec5a99bc494d6677adfc4ac74b3bc5847f38dc7d97c6e0ba62d3513661bef48d2eb5f9f4a57bb122e2dba045c47d98e4ef824abe5f2799e785df7bf17f974cf3019dff8b9dc1963788ff07d93ecaddf37ff0ecf93f0acfdfcac5f3836d72a58f890731e7f929a8f33c8439cfcf019de7612c99fea249a6aff7f2974c1fc1b4e65f3a4caa12f1d272a26868958919fcbab51fd9a2ba94ed739acea3981ebfe9f4e0db4ff893ff1826fff780b1f338163b7f6862675e6f7fb1f304a6f59f58ecf034b2525611557c94d56f8d90ee24aa273123ffd21859bc853f239fc28cfc5b67244f816a6e845d9f4d7f8ac9d358c8ffe842e6ad7dfb834ab9f5df5bc8addf3f64ae9520e427907c68f00ca6c1bf3a0dba693598257ed58ac5d676ad3fbd2536cf62bafca7d3a597475d9237e4f7a3d37398e3f11d689c8e57bba53fc77b1e3398e72f41f2841730c1590105bf88096e1450f04b18e7c61acea7f9e4fc3226bc8946f82e7dfc097f0543d234209257758279eed3cc8b6097c6d0ff748279dedd3c86b4435bc4d26987be86616fa9c19ed7d71ff6d731235a6146b44ecb88373023da688ca8f269c49b98f0b61ae11bfbf913fe964e38f7b776314d76ca1700ce6770478d5251c75619790e1b220abc35f26fe284ed6c7166173fc3c44e01d5a2d4b7b3dc1a31a13b5b64ccf115b376a7125ffb59e5a819a8707867925dc42eafcfceb345665eea733ae2db188bf63a167cb330b82d975dcb8c17b0f1d5abfb080ded2f28d89d67b67e5ce7541246594ffb9de4fe0ee6301d340ef3b54f6f7c174b521db124d529ad24f51e6644678d11ed7d7afdfb584c77d1c5345feaa0ef225d243b57f92201debab07773718bd31cd7bb43c4145abb5b35eed78929a0527886ea424dbc572bfcaa56938a960a0dd5d74ae2b22b65ebd48f7f7da0a1979bcd2ff2f5620dfd7597ccf614748d25ef74a4dd925fdf7dd02dc6bb0fe83ec98275207ca88ba2befc62b8df8bb5d7ca7039fe57c0758ff14d9c12d15bffb6d793ee11c33edeeaae0346f0235d16c1b3949eb1e40972fc4baf7e26c87dac13cefda89767777386c63d0d09ed135d68dc197a6b085f73f5d5db2509ef810bff54279ce7d35b68f2e90903fce5d39f61c2b7d408aff029fc734c781f8df0b37c0aff42279cf7e065c702f6e07d89a9dd57a3f6ad03fda9fd15a676bfa06a7fadcb91fa859d23c1effaf8cf91fac738e5a41c49fcd3e74a03905c29951e58aef40d96710ca4c838bec5421b4411da775868832942fb5ee78fe2cb077b91fa2356baef6485618f74578b27f8bb99adcae46830e60ee016bb7dcb23137a39e249469636c10c89a5fab8482614c292d70f980b6e45e1823f62a10da508ed275d687cb1ee302f3d452e8b757fd609e6d58be1fa0a5cb27097eac52f3ae13c998ed0311a90ccc8fa73f0f6c9a086e041fe8a454b2e45b4fc86d1cbcb00bddf75c279cb6ea4ae9dcb4bef69627a246f33f2366d856845aa5d53fdb411ffc0421ea50b9917907c82205f96e4a6017f86a7657f43067f62bae4eb74e1b523151e1f458445b59f50ffc2422dd085da0510c0424fcffabf31071bad77b0097e1cec1f9d705eab2b74ab2a3903188007f02f46718c8ea256ba0b9bff30e96375d2f90dbb4f2f378dcdd3580ca9b78fd3d4dbf71fe1afde1ec3848fd7087fdda7f02c9d706ee9d65e4a0e17248d30c1db0414dc18c3b1ad06c7269f389a60c2b7d3b57873fd096f8a09df5e237c834fe1cd30e11334c25ff029bc391699137569a99679db9e30d854557be87771c2e457b327aeb6c0a26892268adef719452db1289aac8b223e6b3f79eeb01f635ae9c2e325dd94fa1b8eb182a9b174c60a5aebc2e19bf74cf3928f9c800b6e83019bae03c68b9f5c5f80da62f267e8e4b7644cebd17e426c87853853176257ad0bcc169eae76698ddff1e7e9ed314d76d069c225f026b5df92a0832694dc81d6698cefad1b56b753b175c637bcf2dfe5b4638c0fac27c210e943db7a9e255acf5d922c730b1f6b0b77d4c50f3f9d1de3fdd4892aed30fb90661b7b3f9b9514354df0a8e98439c01c9d03f08f35a80af072ebe262d1d4e74695fb74bcce58b87375e1b643c35d230b013f6177c1b2f7799aec7dde387fd97b579daf0f0adbd7278b31c8ea347c7da718efc74c643002f1f4f988a7bb858e797a371db7c19cdbe210b9d9cfd9796a91f88a02efcd9a2b4676ed5eae9a349816c5fc7ed8aa5890ed9f6479bafa61d4bbeb92021f6a58100b38d4d00393bc30a8e49e98e49d834aeea593ccd3fa2eb10c7cf11ccbf1760dd8ceda02e3b15b501e5b6292170595dc0793bc7b50c9d998e43d824aee8b49de33a8e47e98e4c54125f7c79c6e4940a71b80a95c1254e5813ac9bce2b1d48bca2edff11d84a9bc2ca8ca8331caa50129e7602a970555790826797950c95b61925704953c1493bc32a8e46198cf9507f4b9e198ca7b05557904e673ab02fa5c2e26b822a0e03c8cc5eaa02c46622aaf09a8f228ac425099810a413ec6a32a288f029d64fefcde5e78b8cc471fad13cc4725abbd08fe11175c88c5604dc0181c8309ae0d28782c167b7541636f1c167b6b03c6de782cf6f609187b5b6390d70584bc0d26787d40c1db62b1b76fd0d8db0e8bbdfd02c6def658eced1f30f62660900f0808792226f8c080822761b17750d0d89baceb85c8610d36214937c691d90949077b898b7138b129585c1c12342ea6ea24f39ec043bda8ec3257661ae6978705f4cbe998e0c3030a9e81a5fd2302a6fd9958ec1d1934f676c0581c1590c58e98e00d0105cfc2041f1d50f06c0cf2314121cfc1543e36a0ca7331c1c705143c0f6b691d1fb0a5b513a6f10901359e8f697c62408d8b308d4f0aa87131a6f1c901355e80093e25a0e085188a5303a2d819d3f8b4801aef82b50c4fcf40cb70570cc7190171ec86e13833208e4558167756d02c6e770cf4d91900bd07a6f63941d5de1353fbdc0ca8bd18537b6350b5976092cf0b2ab90403727e06802cc5d4be20a8dacb30c91706955c8a25f28b0226f2324cf0c501052fc7045f1250f00a4cf0a50105afc4045f1650703926f8f28082f7d209ceb64eaf8811cc7b5f858576254568155868575184b61a0bed6a8ad0d660a15d43115a2516dab514a15561a15d4711dade5868d75384568d8576034568355868375284568b15b93765a0c8adc384df9c01e16bb152f796a0a5ee3e580cdc4a1103ebb0d06ea3086d3d1625b767204af6c584df9101e1fb61f17d67d0f8de1f8b81bb2862e0002cb4bb29423b50171a5ff7738f75a3af264ab4d1e2b2eee7202c804d190ae0608cd7bd14bc0ec142bb8f22b443b1d0eea708ed302cb40728423b1c0bed418ad08ec0427b8822b42375a1f5b54e1f8e055f0b7a944e38cfbe1e89051b1ddc8069fd6806b43e5a279c2fed78cc8bd62e4b3b8ed109e6dd4c8f7b113c18177c2cc6f989809c8fc3b2c4273394251e8fb17e2a20eb1330cd9fce90e62762013c93a1004ec2f2816729f28193b1d09ea308ed142cb4e729423b15cb2d5ec8406e711a66ca8b14a69c8e79dd4b19f2ba33b0005ece5000676201bc92a100cec202783543019c8d55dfff17b4fa7e0ee64baf51f8d2b95868af5384b6110bed0d8ad0cec392fc9b1948f2e763a6bc4561ca0598bbbd1dd4dd2ed449e6534edef152f8ba4c39b94827987703bfeb45b04b7ff1c598e0f7020abe4427985bf8be17c12e534e2ec562ef83a0b17719c6e2c3802c2ec7587c1490c51598e08f030abe1283fc4950c85761903f0d08f96a9d60dec1f4592c7807d335188fcf83f2b816e3f145401ed76179d19701f3a2eb7582f92480afbc08769904700306f9eba0906fc4207f1310f24d188b6f03b2b85923387788751a5bc5ccf88cd522392d34735349bfd3318b399889e5addfc7f8f2d65ce6e75356e9e88b2d7bbd4517ed3c767ef012eddfe355935b7582f9e98fb1e4f5faea5f52004d70bfba0dcb257fca402e793b26fce70c08bf03cb1d7e099a3bdca993cc9fffd54b6cba74f6dca5133cd03afdcd8be059b89bdc8d09fe3da0e07b30c87f0485bc492799f74bfde94565977ea97b3195ff0aaaf27d5862fc3b4389f17e5d00fc5b85ff7861f2352ef8010cf6bf01613f88a5f0ff3290c21fc284f3adb9830a7f187393585640377904939c1554f2a3ba4a00ff8c5d6c016b983d2d5421ea6fff8a46595e0bf6c659bc60ef91649d171db0c2fa31ccad9a64c0ad1ec722bf69d0c87f0253bb5906d47e1213de3c03c29fc26adb2db2347bf34c11a7f32d67296253d88ef55ff89ac3f82699fb88085e25a37e84d8c567a6757fae75678d70697e455fa7d32d7ee24f43d7e28e5fc9ecede8d6f8aafa3f8d59d95267e591f5562eb06a973cd1d90974b5f83d93d9df73af16dbded9097466fd9353eb3faa97f8d99e6ac9a348dc2db524d609bbb8dc447a7109fc797f7a60928a19dfa26785b89bc814265627ef85961cbf7b3d3d83916e85f9130cd1b629df7ac7a65569658a8b2ddfa816716e5b5b2c3f64e8d436fe2e7e3d53fef42c66656b9d95db39ac84cc6d3ba789185b2d6c746a991843f08e5b5a816ff9b1ec39ccb2363acbb6f7147f13c5a691e54c6d5b143ce6e277fcd8f63c665b5b9d6d850edb668bd859292de367eb1acc9217304bdae92c392ee4fc2cfe8ebda17489652fdfac30fef5c71a1f5e0ed9e156f0b2a44e543360aec72b5899cbdb5ec4a8b7d7519fe8296dcc12346a8cc8d55ec2eceba0b36f16a157f1ab7b8b60b8557675b85c045dcef615e9509f93a413ab2f635677d459bdadabd5b8a6f3852df6e7ca6c1b5569ccaf2e938492d345fab1f90a6657279d5dbbfaaed915893b89753b9d04fbdabcfa7ca0da2a0f785327484d309d787e15e3d159c763c750ca6cead2fc7f98cd5db07a8a3f1f503eccb7a45d2604c178f6eb117e2c7b0db3acabceb2f188650b44faac907513bba9ad5a2d0b652a2e4d8a0d9a36caeb9845dd74164d23cc7d55acda3baeda9f4248a690bea56f609676d759ba0dc3460e743945a205708373ce648688e56ad11a5a6695b8eb3368d59b98553dbcb40912c3853584052216aaad67793a5ce152fa25cac89c656f6196f5d459363965cee9ad5580e7a16e6dd67473cab7311b7be96c2c23ae51d78a8df5f936df768d79a1f080f2fad4989936623aa5e83b18a7de3a4e0b1aace5e14e28388777310e5be8384c42f330de425a6a3da4d286bdb9bb7b89a39794e9987e0fb3704b9d85337d5ab8b3f0e835488c3484bdef63f6f6d1d93b9fd0b36bd2287f3341e0038c4076a6ca653b6f9b084a657aab3ec4aceaabb36aba4f3f9ecaaa454e5d6d840f7f84d9da0feba1f01b83d3c413c9dee8cc5fbdcbf563dfc7987dfd75f66d1da0e6582b4a5ebec5fa72d9cec3ad2a4e7ad68f4d9f60360df017674eff9c28fa1378ae92aa95425b527e8ad93710b3cf4f9bd1b675baac33c5eff2110ff7da61a66a8e9f61f60dd2d93780b9f70a165b8429b4fc1cd372b07bdf9e9f58284a2b16287def0bccea1c9dd5c3d1b4a53e109898472cafefcfe6657f9db6de995efffe9798de43747a8f4bd9e29a29c60679ef638595e7555bb6ad169f91486effbac540fa2dc8af307bb6c26acbee6984b786e7891a648da60ee1652c81d7bc9667d0c2af310b877a6923ebc706660adfe3fde025b28f2a39bec21c1ff806b37118d643e5a51fc08b95e9e518e95bfa2d66e9709da5333cc5a673a4c74e87caee868cd7ef306b47e8acdd2565bcd2f68c53f7997f8fd1c8c5faf1f465c642a91767916f9593d5a2b4589f5063718b75acb69928d78f653f6096e5e92c5be4d1b2547d7a5e64787d2af34c7ec4988cc4fab3fc32992d47fdcac5279c74799beda376bf5e4371f809e3304ac7618c4b4dc9d9164aac33f159fe356978881f5b7ec66cc9d7d952ecdb169e4aedfe9a1aed53f3444d55d5061b2a467fc12814e8280c74e4eacefc2a3ed25726b4e333613253d7fd15d373b4bf7e46f7fcb628657eeb359e82b6497ec3ec2dd4d93bca112ff0f3e4e99429982c3f16fc8e5930069b31e1d582d4b18449ca44ccfc81d9355667d76e8cae0758f567a43f0684d793fc10f91323324e47a4c011d39385adb65db509fd1bb0c4f353a38bbfe7c78abf302bc607b1c2cdfbdcac4837d5fd8d59b13595156ef194ae15ff60566ce3a50d09438575ac2271d5eeb35dc6b011e5445bbde624e95afa2f66e9b63a4bf74ca366895b6d769dfb3f8ccc7658898f79255ecf2e17f391f0b905d0b3bdfa7cbaf90f5f12a5b577fb4cb531a688f2a35cd4acfdf9809bed998ef718c6614290b4efa5ff28bd949f7e8f4a1666e944aa72d36b3eeec78a46981593b039767a8f495edfdd50636d8d318b26fb4b89c9e386eebee865f4d7ff0871fafed904e33045c7612b1f1c549caa6fb567aa57ae29a6f1549dc68392ca0c671f255d7bb619a6e9b44cf7a4f0f6407cb613457a698ed932ddcb6a2eacc77faa61bdfd2d302b676033c3fde573766b2ef96ef26cff62eb77956be99b2c25de86f663734bcce6995e7a2160ba0fda0b916edbb41566c10e3a0b76670ddb5a8731ebd5a3d53b7ea8b4c6a8ece86516b20ad14f6a8d5b8679726652691bccb2595e6a8f7e4bece0e34fe95bda16b374b697b489d51e6d1f2f6405be7a2be26ff9b1a01d66c11cef2be578987efc10da875dcf540cb5c7ec9b8bcda6712f178b649b3599ff64315a5ced926bc4df9d2be674d82d40f71596e995191d30abe7a5338bc34fcf8dffd1f0f4ea6e1d310b77f292f2f484d32b1553d7939b59ffc5627cfb8aa9428a3d27468d3cd5b0dca1d6ad585e7db937a2be3c1b9150f6c5aff3f0575bb1c1d344717dc9c5b7ef7097303fcbde4243fc1b1ce3606b65f61f5bee6064bf5921242f03de3a4210b25712f2be9b1156cdbc5cbca5363a496585ae0c1f014a71685d6a9bf640362e89c59a498b942c8bf4304e7a73b3b488c76a7f19ab59b97c725c6c689ade945a8b621e5a23bd0f754b220b53874e775bc01cd9068d75b14e7802cbab4f88b398bd9d041759241aab55d671a525a23675e8ce0f343b431f2e04a81a504a710b4036a013d743b89c3db5a29ad993885eb05ab8cd9a64e589298b94e83a09743c86e689c0f115ce51c0f676e338b68594d8f8ae48534483a0ca02672f5452c53506b0261208f9147c8570674a84edad13d5d73143cc3fe6024a44ad96af8799cb564502d88dcde3c076a104d619e472359b01b8f6ade2e076a504d751038e0b5c63bdc46719d789aba59180b684c5a1ed46ed6d89c9739af5d7dec1aeb47e1983ed75510097d33a0e6e1125b8ae8c57e56b3c170b5180771a281476a784d70a24d5b9095d7351c0d4b8771cd31e94985a004cf1158a514054d5358e684f4a444d05a29a48e5518ddbc4e12ca684d3dd3a995b5fe757234df6bcfef922d3af637cf536cfe6e7c95eb42800dc0812e0124a80cd4102e46af2c1b72800bab3431c5009750e35578cc2c4f7768c460dab14f8d0d2b07c486d9710054087778a035a4609a8030064cf1c2e6665a2025a255e8a8e4f6d181847564a898c6f80af6aed53d93a61755d7d55932f492b1515d1f92251968a24ca17ad440122ffa720965142e49bb34378bc578cef265556ff2d8ad288d7e73b837eb2e59428dbc86240f9db7a59c958209adc51407530280e5684d5e0e63ba82c93795d35f0ad8956736885a57c14c0ddd82f0e6e257d63486d12ab86b5a2802867401c517958bec5fb26e03c17d53f11a586d2efcde2e0f6a2eecc81e0e0d6461345f70ef4b9685446f607fdaeab28e1b566f1fa5b7cf71a7b5fa52880da081a4b1594a0f8e8ff643951251add3807839c6b35f528d16c816595639f5abe26a25a84140560bc3742015b439fe8965bb7d6891c698125b75436c0a300eae3c1715095e10e7024cefe2c8d58995801c621abe887d3787d6b8a083aca0da1279ac4a1ed4d09ad2580c6670345a99a5a0c32fb6aea243955cc94a81381c7b71d8f6f435f6335c4f912c02880fb1878570d25b8b6202f8beac8369fc9a860d5d2cfa3b0a73c550a31d1eeccd90678599d193d14f9910037ab7f1cdc5aeae1b6f996b74d66de3f7d1205801b4433bc59138770e7da8cf467cafaa38ecfe96dc7ec1e5d386ee098e33bc27ac438cdf781737473d2eeddcf495940e4789e2495e37b824b4e9ab325733c35fe720276d7e7f898029be3abecc8f15c53cef155f3c9492b3fc9f1d50998e3ab7994e36932678eaf198c39befbde743ae373d672926688e4b87658e568c7fc73b4a3b839c8049d1c97f94d39c890794e8a31949cb42673e4f81a6ef0f3747ebdf5ce1ef91cb41194e3e801cbf138f49be373e67f8e6bef487cc18d7ea14c1e5f1db1eefff3b530797c2dcc7a0e817f5996ffb3eb4ffb52d79f782cdb4b9f7899e6beddf9c8e40a68ef241d123fd2acea493a6d5a24d4a4da7a31309ddad47030c9723f93708e8a24ce3d00cefd4dc2991f499c57029c0750e2ec9502a77e7f415e0490411d4c05f51800f540ea6194c532674c846bd717f86364f89a51e16b04f01d1446125f817a25547f311bcd0ae970b6a6c2791b8be33cd8249c0591c47921c079884938c74412270389fd509370164612e7cbc03b0f3309e7c848e2dc05e03cdc249cf991c47930c079844938474512e72a80f3c83076625826bb3a9c1b2ad9aadb9bf51056d89b5081ec080aa1a3e807294bc4e3bc139b57d2b18e37328cfda8307603feb8817e7b0bbb7f70ad40c7fbd5e31b4c85d0fae9162382f82d807834f57a0805d1eb00027fbe5a3c1bbdae8e1d00d86328c1f6617044c1fb885a94e1e600b8c7524fdd76eb4782e278ad337add1ffd4161741c25ca76126561f87d47647e7833f0c3e329e16d0912b9f7a1aa1092f800aa82e96b80f68430fc726cf87ef935955fde03e09d4809af1b73afaa27e68fa45d706439647390439e6412cc311184d912c03cd92498051184f92f48e6a7980473740461fe07609e6a12cca495ba1180f92780799a49300947cdc960fe05609e6e124cc2ce373298bf0398679804338a8dc73f00cc334d8239368230db80aad15926c11c1741986d01ccb31bb687c816657f738b30c7ec41d512df00509e4389722b89b2c27aa8421cd5fcf57962f0623de37d998be544d4223685edc8268919da65f21a7c6ea2a555392df24e54de7b3d407e2efd8ad295624ab83d457d858017bdaeb8d6a028da1846eec9bbe0565917f86c72feb9c30618152283f90580795e43e69e895f9d214cca2750a13c1a24e5f329510e4eca3d4b84b069d20bcbacbcb24c24f5b56204a88eb97d3086143659a95f04605f1086df7aab424511e54090055c18c6d006cc02bc7ea690146d1f2ab45381975ed4b05e1af5bae987c04b2f6ec8822af1d3ba84bd4c64036e2700afbc841ae544b1c8b6522e2de45fa5e21315d6c8e5c66ac1a5bd8c357ad5a7c6c02b2f0de3a31423adff57cbc04b44153ea41a2859f173044078591808c76c7608ef07082fa744d8db7309eefcb03ce17030d98cb92a904f5e11d6b443759c2854b0bfda19e5095cf702dfbcd2a47595a40b07c8708e053e799549384967ba93e15c0a705e6d124ed275186438ef0038af69c84a7ae20a21c271f50e54289f0428af0d67ad6f5ef8f3e27a52e17b15143bd799336f388a036cdb004fbc3e0c9470e1c02cab99385dee5563efc3124265880ce501c02b6fa01fba80e33c7c0883a39b2476805925454db38e7c402369cfc70824f13600e68d61f45bd68a1db56aeac725d5f638eaa8eb75272d7cc8d05e02d0de14c6109bd7f59484f927d96aca2900e6cd26c1249c3a4306732280798b49300927c292c1dc1ac0bcd524988453b4c9608e04306f330926e1e20132981300ccdb4d8219c5e5fcdb01987798049370222c19cca100e69d26c1241cd42583d917c0bccb249884c3ba6430e18ef8779b0493b0054406731880790f25cc6c96dc7fe46fda2b61f94e36ed7537d0a7b4a92167c03bfbdd097351b25ef75ce0abf79a0493b07ca71b600330ef0ba3dfddde6ba6444c82096d2a0219be3e00dffd94f87a007cc91360b9b0f8ce32519edbf13c00fa40d8dbf6a4dabb3d84be78b2d91d1f03b00f8631ef286fb39b77743840f85018080b373b849300c287cdae6712761793d5336f02f5cc47c29ac2151fbb84c36fe43925d968d061c0471f3567ad4514b79e980c503e16963ff26fa0d4b0f2fad23bea3b197e03203e1e561d33d5e78aa23c47737b00f40933e70f132676323fad0485cf9326ed4a3c3692fd9b5d00cea74cc2393a92386f0089fe699370926edd4386f37480f31993708e8924cecf00ce674dc25918499c4f029ccf998493f4db6b64387702389f370927e9c7c2c870ae03385f300927e9a7ecc87096029c2f52b78fbc7ddc76be508d7f9980b07db41b15d0f100e84b61ec50dc005f5d23db03a116c07b99125e33614da5dc3c82cf718f1eac1e00d62b617f3651df124fdc988770fedb8f5450af000dc7574d844ad8b94106f57200f57f2642259c434c06f51200f53513a1125687c8a0ce00505f37112ae1fc3832a8db03a86f98089570ee1119d4f100ea9b2642259c1d4706753480fa1625d47c963c7a99b85070b2f577b5f51fff6d1bc2db4bcb456d952b3b87f1f1a37d4410abac68e09f20e34f158beabf1a81228c840954913080c523e16d73966347f1232585c09fdf3177d92be1ac64b2890eaf032f7dd79c7db94977aa21f3d30301ccf74c8219c58fe91c0760be6f12cc287e4c673f00f3039360467146d3fe00e68726c18ce2c774aa00cc8f4c8219c58fe9ec0d607e6c12cc286e12bd10c0fcc4249851fc98cece00e6a726c18ce2c7748e07303f33096614f7fa3a01c0fcdcece50851fcdacb40d076ff82126f1b89d7de36ad42b4e26dd9e5947b7d35a102c7805f7e49bf2ab3443c5e27bcae3ae99b2f64f8fa51e1eb0af07d4589af274bfc3449a940c7e7cabb6da24f9894c936d13f0324e5afc3fe6a86f78eb828ee3eb71d40fb4d58eb3b668ba4becad1073fc57aad5a8418e5f51dfd40f2ff96bed8e1c319ba55c3d1cb373b0270df99f3d111c24e37b2fcf24490a8bfa744d9d6b5ea534387ae25951766012ffca121d75f467fc3a9de00e58f61ecee51c036a7dd3d7605f87e32e35361f6987a95f0587bb49cd433bfa6427b3fc81f7f36e94b04a45d6c649eba15c0f98b4938474512e76c80f3579370e64712e70500e76f26e124fd383d19cec701cedf2971f667c91b024c65eb189f1f5757dfce996bbdce3b3eaac5b29712667feaae229c4624d907497a81b2ff0f9316698d8ee476d137019c7f9a84b3209238cf0538ff3209e79848e2fc1ce0fcdb249c8591c4f91cc0f98f493849277091e19c0f70fe6b12cefc48e2dc17e0fccf249ca32289b30ce0648d42d84d0976d779db4d89b083846c37a55f01d6182556382a54242aeb7596e4898c7fb37aa15cdb5e2a8635ca223d2ab41c00cda204ea6f4d4614a71a8e000dd0469428d51c24b569b4bddb823d2ea41e8afa96a87b01bf6c4c09b31d8019f26e0b64f0a602784d28e1055b1d4458ae934d4bb80ea06ddab0f9a52dca1e0c269ce1d183aa2c3f0fe497cdc248e263c24fe2647e7837f0c3e60de987a1ad623f810ae503c00f5b84e187e336a3a2e615e0872de92b3d2b351bef16594cecb946768596cfd8e4fdecd1ab8cb702305b85516ea7379d907074882cbf1c071279eb30f24b6f0b04a2b83e6d14f0d236617ba9be6bc3deed6b8d48fe5cdc6a5ab4643b7f5d07bcb46dc37a69d46b97bf012f6dd79015a4c4599b847927d9accd838057b6a744e97f5612e1f22ab2527e0ac0d9c1249ca32289733f80b3a34938f32389f36180b353180317a94bf7cd61e0622f80b573189dc3defad9474572b5ef5500661793604671b5efb500665793604671bfa38b00cc6e26c18ce27e47170398dd4d8219c5fd8e5602983d4c8219c5fd8eca01cc9e26c18c627fd27200b3974930a33809610580d9db249851dcefa814c0dcc2249851dcefa80cc0dcd2a4763ae94404b2767a1ec0d9c7249ca4d523329c8b01ce6c937092ce2626c3790dc0d99712a7fa28f868b6b97d14fc221647d88f12a15acf96ba236e32732eb39e6809ad16bb729176cb7d4fd52d770bf0d3fe9490b760897b2295c9058373995a2698980dc019f08460c9160a9600b00328c1663bc056881922b5424c7c8e885b752a8a35d3b900efc0861c280eedd31064d3bf5a039483c2c802e0bae1894cbf4bd244b6d67a66140b616901d990c707a0001b4c09b6af003b93d588a5d61c67b998afc45f8f67038be5f7d92731fbbb70f6fd69d691e327dc0f91ac92d50200ce3167ed4614f3d3de201318124626e07fd493b40b852c13380580ddca54b084dd2964604f0360879a0a96b03b9a0cec3900ec3053c112764d93813d17801d6e2a58c2ce1632b01b01d811a682251ce623037b3e009b4b09b6738a0a96b29474fee82c2a8c77038c7961f405408cfef69327f452b2fde41700bc23cd5ded4938378a6cd5482b807654181900d6cd12cf00081b016419400780319f1223df7a7a9e1c40512be2670acfe4c93e7a2d7cbe81ac025760ce6a63c242886c3dc8a9c0074737648f69f4bf7af00ff0cac23072c5bc7a9ca5a2ae69f791467d1fe5fb00c631d4b34b38b02922e03266ef17c21fdd177439cf1777f9e259c2cee63da8606e03608e35673d3c614e493620723cc829c7858132cf65d82eda63f82f00af1c1fd69640d89737428249d61aff0ec0dc3a8c3925059bdd9c924a80709bb0c63aa78a6a509d506216e35fd0e285cf5cb68fe829aab6eef1e6645518639d6465f9b600ecb6e66c2f10c5551ff300caedc2d88ea5c0519e47b94eb91ec0dbdeccd59b840b0ec98a9e1a50259a60cebe0c516c877f023c74a239fb32108e5492b5c38f035e39c9ccc44e58009125f6bd01d6c9614c05f7ba13f258ca044fb613723380738a4938474712e7b520ff9c6a124ed2afc690e13c15e09c6612ce3191c4f91ec039dd249c8591c4f930c039c3249ca4df8323c3391be09c69124ed20f9891e15c0b70ee60124ed2199d643897029c3b52e2549f25e515f4cde7b3a43b027cb34c5ac13992b21544d7a309aaedb34dc249ba970d19ce6500e71c9370e64712e73d00e75c4a9ccd8580322b9fb4c7cdb964325c64ab319b82bc711e25aec12cb9ff327192e064c6d710af16bf79cf519d10395500e666150b6a21ac255a40057b0c80bd5318e5f848b95030d4210cb2f19f2c90b4e753e2ebc9e098397fa94e4c43a816bd981562a4d24ef0511f39ff0178645143f6b987d68424cb499f00de591cc62404ee9dd3191f15e763e72bc43484ea488f956f00deb8c09c65ab51dc08756be08d0b295176e11507514297ca978a183691b02682c9ba39f0c99dcd5d4311c52f6f5c00d0ee12c61c386f5363f223b9bfecb300e6ae26c18ce24ca3b700ccdd4c8219c5fd659f0630179904338afbcb3e0360ee6e12cc28ee2ffb0480b9874930a3b8bfec5300e69e26c18ce2ae338f00988b4d8219c5fd651f0530979804338a0dcbb701cc12936046f10b1bef03984bcddc9f6364243797da1f747f2c33156c1437973a00802d35156c1437973a18802d33156c1437973a04805d6e2ad8286e2e752800bbc254b051dc5cea300076a5a96009fb48c9c01e0ec0969b0a368a0b638e0060f732156c1497179e04c0ae32152c61cb8b0cecc9006c05f5c6538bc51c26386fa45892200337d88b29e980e33bef2870abcddeb28fb08822dbb26f67e0976ba8c7ed534fc829146be0097b009a5081bc0f80ac0c63dc3ed94fbd8cdc1356fcc9c6ed8f0568ab28d1f6d5a0b5e73671786bd80e628e6815735bf141e8bb64eb3d1a813c766f73f60c89e2e0732140596dd24aa4d194d52632cfbc0be0ac3109674124715e0670d69a84734c2471360105539d49380b2389f34de09d6b4dc249dae424c3b904e0dcc7249ca463a764388f0138d7998473542471ae0138d753e2eccf123fcbb7dc7a887ff1b054ec42cbf7982da9ef1e71dbe28ab0624fb6c5d591a080da9712323f51db9d47af81d90ef8e27e2625edb19443cb6449bb05f0bafd4dc2393a9238af07de798049380b2289f33480f34093708e8924ce4f01ce834cc25918499c8f039c079b849374961319ce3900e72126e1245dc04086731f80f3509370927ee0910ce73280f3304a9c6adb54d506e21cea580d4bfe20b9735316c2560fd9b2ee01a0fe797818639a0a6bb9764c53e59f6420c9d622af07208f300524a1479281ac05208f340524618e4906f24100f2a830b60fb23ff8546e3db64ce48a1399dbf62cbc4769855096ab1bd2662d64bd473f83e2690325ec410eaf5dca92272e789fe240984190f540dd09fcfae830367319cb36b72fca3c04bcf5983026e0286fad11fec7ab52d3243c674772d48bafdd81771e6bce3e39515c4f3f12a03ccedced5d08a73292e5a1ff0319c0f16154b2f2e4f4b00ab9e5d05ac1a132ac9cb40f15c89f00c8132841aaef1e8d7424fa10e09179e13400ef44b3e72b13aeae239baf3c1fe49f2785d103053f09a9cb2ba35d697a1178ebc9e6ce5a26f454b28ce028e0a9a750a21dc012eba3bc411adf9d51bfa866ba7c39f11bb18475d37154982703cca73664dd34f12b5e84abeac8bee2751640799a39d3c0a3b8d14631c8574f0fa3671f7aa5b7757451dcb4a00278e8196154ae549eca0ba452c7bea39bdfc0490f80f74c4abc2d8535b6dd45b294e71f8a8e5e29df1324f4b3c2a88f62c54ff2b73e08133899070e051e78b64938490798c9702e0238cf310927e9f407329c97029ce79a34fd6134657d936cfac3ed20efdc6812ce8248e2bc18e03ccf249c632289330612fbf926e12c8c24ced780775e60124ed21d70c870ee06705e68124ed20dd8c9701e05705e64124ed26fcc91e1ac00382fa6c419fff054038c2191d533bf02f82e0963008e07bc5c78a292bd463e12bdaeb718807769c3ef6813ddd99fa34005e83253404671fa4c2f00f2725340120ea99181dc1380bcc21490519c46bb0b0079a5292009a7739181dc1780bcca149084fb269181ac0320af36052461d59b0ce46d00e435a680249c4e4806f26a00f25a5340128e8593817c0880bcce1490849bf39281bc1d80bcde9c69d851fc12d76080f28630e6bd257fda79a2f51a1ff3e68362d52cfed1d2a87fe2f94716477b63981bfb54598fd6b07200d2db4498287e6fa61af8ef4d51801cc56fcfec0320df4c09b91bf3331f8e74171bb21cb71380798b4930a3f8edc3ce00e6ad26c18ce2b70fdb0198b79904338adf3e6c0f60de4e3d7431552cb9e22ace9440cbad974b64b113bdc9846d41d5e90e4a78eaeb1bf1c581fa52bc58d44239dae542d86adaea12d98ab63a00f64e4ab09d185c1a58c96ac3afd80fa1aa0e7d0f20de15669d532dbf8a2faf2e1260ab53e4a0512c8c7602f9e7dd616e096403e5ab86786e3a45db7512ddaf73dc0ab0de63ced2962896f0234036b029ec2583de8b2942b464c5d485c04bef6d582fb545d96bd9085b48647bd7fc0dbcf43e73960512e69d64cb020f045e797f984552b9a5c442eb668545c4b9a54a680b574fa04aec9b00d607c298e4353afc19726485d08d20793f68e6faca28f678ae023ef950185d21de469848bfa549e6a30b01cc874d8219c505d5bb02988f980493706a0319cc5900e6a326c1249c704306730e80f9984930a3f8f9bc1d00ccc74d8219c5bde67604309f30096614c72fa701984f9a04338ae397d301cca74c8219c52ee30900e6d326c18c62efe64400f31993764c202d82c856b2e5039ccf9a84735424712e01389f3309677e2471de00703e1fc632553ef3782de8d10c6540980cdf4c16c7f70225bece8c7f5db0447eb2848b5a633dbe92558be18b72b62f18658f1ec62600e38b9418fbb0f8e4047ba077b1a56e8d9889acf62fe6df372815fd9a2572d0a294a915c2b51184bb08c07d298cd1caf4f6db8ee206a75700b42f53277fb7c248594a3a0e348baacffd2e5008bd12c69e8610a3bf0da3097b94c8368c2e06785f353703201ce020cb00de0519c0ff28d1f615686708ff9ccff8305b992cae4a852835156c958800eec7cbacdfb6f869d6912fb2298d60e1d512007e8d12700b01d8b9b6830c583f2a60dd01b0d7c32892b0093493451227fe1ad17caa22a92bc833df08a34709d64855f53e5ee18f760d744be0936f8631a91bc24c9d674617ec2c00f62d4ab0ea9b597c56c76ab6397d33eb3c80f06d73a6c546714c7d2e40f98e99339208e77d90cd485a078aa27729b1f6f3e1a14556981502f85ceb97aa2ed5d096f6c55488bb01c4ef5122eec19c6b894b446b69735bc3711900fabe995901614b9e2c2b5803b07e10c6e087d73d3ac7527a29d91e9d4d01ce0f4dc249ba8a980ce7e5a0fcffc8249c0591c47912c0f9b14938c74412e73b00e72726e12c8c24ce4d00e7a726e1249dc144867306c0f9994938f32389b31ae0fcdc249ca32289b304e0fc8212670781930f5ee8f60553dfcb220338980a601700f0cb303aeaf2c45ffbc827381431bb3734ba7d9d2b01c2af1a72396b68850dd92e8a8f8176cfd7e6eca218c5a52f6300ca6fc24ad876071d17b44e26ea107ae07fa442f80048d8df863162c91196d5ef9ba46e477d20e33180f1bb7067796cee1f58ce0668bf3777020d215ab209341b01da1fc2c83f476d762398c301c21fc398c2cdbf3314fa146eb2d9718301be9fccd9fb7054248780af02307f36096614eb96570398bf9804338acbaacf01307f3509661497555f0960fe6612cc282eab3e0bc0fcdd2498515c567d3680f9874930a3388be34400f34f9360467159f59900e65f26c18ce2c652d700987f9b04338a1b4bdd0a60fe63f6f22bc2844fd6c01c06ba88ff0d63712bf4557dd7dc4e16a312114cb5b86fefcd4d584491edc8fd0bf0ddffc2e83c1e590fb894c16fc0447b1dfb8300236b6ccc5eb1846d23b2bd624f07c93d4689d2ffa442c2929e6ceac19dc033b34cc25910499c97029c8d4cc2392692381b83c4ded8249c8591c4f906f0ce2626e1245d9d4e867331c0d9d4249cf991c47934c0d9cc249ca46d78329cab01cee69438d5eeefa31c35cf280ffad600782d28e1a945817cd2cc14c6b79baab25ae665b2fd632f052c13024b8400b811550d8bf284c3ad00e2966124772cb127ef8348d85227c3390454955a998493b46f9e6ee73980b3b5493849170c90e13c1be06c63124ed2b56b64381f0138db9a54551a4dd9a7445655ba051445ed4cc25910499ce7039ced4dc239269238bf04383b9884b33092385f02383b9a849374ff6d329c0b00ce4e26e124dd309a0ce741006767937092cea423c3b902e0ec4289730873ee3cc3dbf2a5160fbe2e43d9195f0c834d729868fdaa16e3f2a403c68db388803f0a6aa65d29817761ee33471273563290648b088700cfed660ac828aec6dc0280ec6e0a48c2b99f64208f04207b98029270463219c80200b2a72920094b7732901f0190bd4c0149b87a830ce42900646f4a90798e6a521dbae2125ff83ad97a6235ab12efd96b8c43aa347d4f35a7e9665069da8212bf9a6eebb5779470dc93ac6f741080b9a5493009e72e93c1cc0130fb9804338abdf6dd01cc6c936012b68fc860f60430fb9a0493b0464a06730b00b39f493009db4974dbf10398fd4d824958332583d907c01c6012cc287e8d301bc01c68124cc2bd18c860f6053007990493702f063298fd00ccc19430f14f984cb3fe9633fb7b84c596002e38fa9f30d993c5c1e65082b5778a9f653db04c4c5584cb0b1becbb59648b0e9b01ac4328b1fadbe22f8a3b87e482a4bf1525ca60bb7f1196f764bb7fdd01bc7428255afbeb6e6b4572e61980dd6947068ceceb6e9d00b06194c0b235c9dadf526dc2662659ae390f24f5e194783b81527ead28c5f9fc79b5ec3594b5c42750412c073e3a821222ff36e47c91a4ed25076b85fd9574c8fa5021eb0090e5522253936a60ed12ab1291d729c992f12080332f8c123b3997f452664771bfce0290438e0ca35e898d6826d62ba3b855553ef0d251613429d3a957128e0991f9e819006cbea960a3f8b5eb9301d80253c11266056460a703b0a34d054b58a127033b0e802d34152ce1e82619d8d100ec1853c146b182d51f801d6b2a58c21e7c32b0c702b0e34c054b38ce4406f6100076bca960a3d83bba0700bbb5a960097bf4c9c0ee0ec06e4309567d3161346b802f2690e13b14e0dbb621c79612370b24cc3bc9360b3c1374a76c674e774a14b7042e025eb97d187da8de272f467196f224e099134cc249bad91519ceb500e7449370926ec54686f35e80731225cede1a9cfa551f0b99fd89332e2a9fb61faa1b5571b41a609d4c8935d5943167ef7e14bf9e70a380d9ac8943f8b424e1934582ac90fea3b64e1bc1a6b332e1591cc432eb7c96a89cd7b2255691b2c8facf5f0cec61fda7bb1e13fbe34d65eb5895b8cae5950ad9abadbb5cb31a9637c27a640a778816d22172448d62a2c59c7b3c1f85e5a1af6745ccde1a6eaef5574d58ab134872c416daf3ac6b758ccf1ce021acb13459c9aa85c5895bc7e5c49a0b4ef6771aab657acb91baaa6f37ce94759972cbe61299f67204ee79329bcb89b501676a887da668d4d408adb051e41c11a5fc57b1a8a9f37961f6d3ea33c445b211c43f55cc233a263e5facec9a2d9894582c4ac4b1b83ef4dc5cebb158a1f5c76e668da86f608d906bc756cb33753db54c1eb3eed2a6f2e88be9d37345c67c3295457632e2ef2f174ccb84d499292d4d6d1feedfad5d6225972ff8dbaced9fc6e35d46bb70d36eb156d6af0556ccdbc2f9173aabaddf5ca9fcf22cd6e4ff018a526fe801ec0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/fae68a0056e7cfe4fa316e9f15f1ce36.asset.meta b/Assets/SerializedUdonPrograms/fae68a0056e7cfe4fa316e9f15f1ce36.asset.meta new file mode 100644 index 0000000..6122b84 --- /dev/null +++ b/Assets/SerializedUdonPrograms/fae68a0056e7cfe4fa316e9f15f1ce36.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8929c3fc6b64616408d5724c8f6b62a4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/fc5fd3ff94dd8d846bfc322c53e141b1.asset b/Assets/SerializedUdonPrograms/fc5fd3ff94dd8d846bfc322c53e141b1.asset new file mode 100644 index 0000000..52120b2 --- /dev/null +++ b/Assets/SerializedUdonPrograms/fc5fd3ff94dd8d846bfc322c53e141b1.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: fc5fd3ff94dd8d846bfc322c53e141b1 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d077c5545f6f8e7d1ab80f426a1879a10424044a517051243288a0821052209892934c55e40b177c5de7bc3de7befeeaeebbaeaae755ddb5a5677d75dff77e6cee49d7bdf9cf7de7df79d9bb9fcfee1436e6e3b73e63b67da99729b6531eb2732dafab58415b2196c2c5bcc4a59355b6ffd35c33a5659ffec3375bd80d55ac735d6ef62ebde689691e04dfe333cd2cbfa3dcf3aab63f5d69b0dacc43a5688fb8b5899f5f73cebdd32eb8c5f2db7fe97594f455a582f2d6633593e5bc87a46ba2710b144bc5427af4578bc226dacdfd3d966eb6e99508a0792256ef5b47e2db2eed4897b5596d2eab9e56c8588569575afc47aa796555a32570b896d7e19c7c41fcc3e7495c76ef2b8a7f5bfadfcbbb9fcbb8dfc1b3edf521ebb27f97c0ff05e5bf0372774659cf77bdac7c81ed6b195753c079cf377bf92cff5b2e5355b1b47561f79ec2b8ffda4cc7393d0bfb53cf64f10df7832f602b29261d6461e33e47180d4f7bc14c31f64338aec04f238cb4e409f0c10765b709f5f1be823ee2a1d3bbbd2b1b39d8ecd2e92e9f7897c7eb03c0e95c72152b6f54cd76be5b561f2d83b815ec3edf7d82416b5592bcce635f23c531e47c8e348a9db9e52d7f3c1b95f5d549a8e9232bbc8302ed05c57cff3fb17caf3d1f238c6955e63e57317c9f3ac24f549c6fe944e5d65181783738b638b557164a974efe64af76ef2ddb36c8e2d1e70c507d89f566eb69477490af1e8ee8a87b4879699cee712eaa0e48f93727a48b99782732e57e5d764e3d642beb74b9ee7b0c4655bd724ee4db0e5b451acf3ec705a75b3afb79ac29cb69c9b404f95b63d5d69db53caad947255fc27dae711c5b93f90d30a944b4a6e2f97dc5e52ae2a23b292d453e5fb7de4713f79dc9735e6e3e1dfc96b93e551b288f466ce32a0b7bcbf77f4dd1e6779e4162f8df677a5b50c2fd227814cf5fe54796c9be4f3ea99693e749e2e8fed920cb39d3ccef011667bdb16daa87453b6909740e64c9b6f9b7aa08325a7ed51f27c963cce96c739927f7f971d28db8d67078974992b7561200d2c5dda7596e7f3e4f100a72eec40974e97a54fa7485f29f37270ce8faaad740538e7ba16d8e1b47b46ca9c2f8f0b5c3a2fa4d3d96a5d8bf73a7600b691cc7bf1ecabc08e5ffb6c5b76fb2279fd20976ed3a37ab79909de557a24931f164916aa7d770538e73a28b645aee7ae04e7fcb857343cf1b7f56e07655b3dc175feee55e09cdf2f4c52d7252cd666b99c8120ec81326c59fe7750e9b994c5e63dddbbfc9801ae654879efcbf796b1d87a4c3dc7e3763538e7f7172719b78335fa59e1769c1ae7dd4398b3fc991ab587d66fc86bcba53e8398336f0d92f7f78abe13a994d70eb5cf3b295d56c87706032e836dfdf650f5e961f2b89ae9ebd9558083cc8f5617b831ec7eefca6b2be384552a9f2971c5bb202aa7bdec8b7552e5987a6718f22cbf56268f15f2a838ac8b3e3b225b5e5375e3e152b721cc51365b5dfbe8757e1c2aef5f03cef973e551d9dd5f90d7aa5cbaead273bd2beeba32209e9d55dbcff63a549ed7d86c3b3de292bb82c5b7db236c39a332e479ad2da7730b8f72eaa41c559736d8e79d953eca0637c8e346c971187394e56c93bc3e1cd8cd30708d3febee2f25d22d1ec72db69e8dedfb23e551d5e5fb02d9b2ef26f284bbcdb719dce3e7aa1dbcc115bf78ba6c95c78e09e2d3153cc78f47fb887fbc7bade4f13819b711ccd9e71961dbca9efde2c83a9e69edb4abea839e60dfef22d39d9d08e2c4c3181965dd684b27c97ba340bca55d09279eba76acbc36267a2d22fbe5ec6457fa5ce7ba7f0a90a1bbbf0de8a0bbbf5d5ebfded6bdab7c9e9dea8acb06e6d47534739433ecb4d8b84646bbc2bec1435aee90efaabefec5e09ca7cb1771649dae4fcb6ebfc8f3335c6979a62b2db3346929ebf54836483755e68ed3a46f0ee0a0caa6b391b454f7cf017275f7cf053ae8ee9fe74ccbeeaa1d773e9296507f989617c4c63532ce15f68d49a4a5f2cf287f8eaedd2bd395a9f2f5a624e42a3f48791cb93d5d726f4e42aeea935f1a47ee654caf6f2ae1295b57be9af1cc69ebfcdcb2db1eefc4917539d3da7a4fe537b882396dfd4ae6b475d57f87f67195bc37219afe8205bf06fb19cad627023bc995f7ae06cf405b55f7af017275f7af053ae8ee5fc71cb6de6baabc7e3dd3db3ad41fdafa0db1718de4b9c256f578bcb4bcd1c559f19dc49cfd9c4976faf472b77f6a00575d3837d9f247abf84bfb8a287eb780737e9cec0a77b21d6e6fe9ffeaa3c6403ac8eba3edebbdd518c32d4cdbdeea5de47aee56e66c4fddeee27f87cb56a644edad312eb7817b306efb32679be44e797d3f9056fb826bba365722ae77c9e3dd2e7efb4879b78273fedc2ea0bff2a9df238f5ba3f7bacc75a56f07a0c7bd7a5b11ba8234f3dc465271be2f419cbd9449fb336799b4bf6d077de3f9671f92cfec88f38cb28f47e5f161297f2a73f65fa6cafb8fc9f369aefbd3e4fd4ba3ec7b64003d946cfece6d49c4ff09797c521e1f97e14c674e9f98f203eaea8854dbb1a9de5b25759ac19c795ef6e9fbabb6beb2c59509ece329797c5a1e8ba5bc992e06aaff17cf9f9528ac38f18acc664e1f82f2534a1f516496bc7fbb3c9feb7a5ee5c167e5f91cd7f307b89e57bec7e7e4f93ce7f3ec7920879fbf108d5b44f9525f04d7944ff3a5289f01aa3c39d019367b9939fb77aa0f375f3e7707780f3250f755d9b8c015a785f2fc2e70ce8ff92eb9ca87f9acebbe925be0d2f715797c5d1e5f8bc671ecbbe01dc093bdea9419d7a6a58f2272907ce76e706ed9f48078ed7ff56ea13c2e9232ee01e7968c8c0c5bdf8c5c5c56a4c8c5af105ce7c7c5f2fe2e70ce656f8ba3df8bf2d925aeb82d91ef3e93c4bb4be571992b6ecba48c5fedb80dec1c4796f2f1bce94a4365b35cde219a74557ec057e5f9c152877bc1b9a5c340d547788be96d7ba9ebfdfb9cef0f5263826fcbe33b2edd9633a72fecf7f2f807dc26993a2add0f8d3ed3a8dfef5cfaa9b6b5d27b850cf77ea087bace8f8731671da57c957f94e72b5df7a50f523bd61e2f8ffc491e95af588da3ff591e3f92f257c9f0940ff92fe03a3fff381a6e96ca0b7fb5d360b0f267aafec47b2c7e79fea9336cf63990ad7c559fd9b287a8b1d22f5cfa7c09de51e1fe4dbea3f4fbbb2bae5f03bd3e90c76fc0b50fe5f1dba8ec612a7cd5967d2f7a6fc8b1f2da772e99df6b64fe00de53f6f58f24797d90e473f1ece0473beca1cbe4f94f36aba1aa8dff03d049ea3954b509be77dd4b25fc7f32a7fd65c8f4e4be796e770f82737eff97a81ed9cabff6b37ca638aa87f8db8ac730e537ff972b1cd5462d718553926238aabe52eda49f12301996e473f1d8b99995bae222f35fa44c5e576ddaaf99235f46cae5fd87c1f3ea3a3fae91f71f01e7569c87cf74ca1179215e5cfe8de8bdd6a5b7ea1f6069c0c356e5fbb7aeb0b9bf5a8d517c93a45eba6baa6f58c19cede20a3bfccc0c3bac4cd54efc8f3c4e4910d67f5df20f97f21f05e7fcbe6e3ce77ff299885386a3ee55633de0fdb1ee7a8b01aeca6ff52b788f9fff06e293c8b7afbb26e588713ac8afd2e63762958c9b6aeb287e8727e0279f8b5481e75458eba3d722cde4b11a5c5b0faef1a3ea333f06ce2ddd467ee2927b847cee7110363fd6caeb4f807368d775cc390f51c96b003ad5c930958fb8b92b8c7a16adef2d5e2355ddfe1f70bf2dd0535d5332a0bf6a1d38f2eb4fca34d8e90c33611ae8dabaca57773938e7c78daef4df68c777944cff512afd5579581b3fec46b972ec2eb28939fb656a6cad2590c7ef3f85cbd486b3d9159fcdae705bb284fd9188f287dcec9d27537d02399f3672a40cef6970ce8f5b40facb3668e428706d8b3c6e95efabfe81b25130ae16391a3ccb8fc730a7ffe6183bedc6ee74c956ef1d2b9f7f169cf3a3927f9cbcaffac82a8f1e0f74380e5ce3c713e43bcf83734b873157daf633b61e09eb44f9de0be01c867992bcff2238e771cb743d7fb27cee2570ae1843392fbbe4b8f53a05c4518dbbdd93c0d6956f6f1438e7615d60c77db4aabf9b25274f7bed352943ce358b6c737153f9f3d514647fecb435d12fe0b25ff128e773a98b9caf14d92ee5bc0ace61389f3147bf3ae970be74f216fd8654f49563859153e5fbaf81737e3c4d5e7f1d9cf3f77e668e79394997554c1e7730a74f809f5bb698adfa28aa8efd2d7e5a36ca93f3c422720c3e72ba94ff0638e7c73398a36c11e7b08c399339ea41716ee935ee11979cb35c72943f50d9ffd9f2fe9baef7d4d8e86ff2bef4198c7bc3199f44f1765e6b191165fd5c56c68a590dcb12996c044b7ef98c7a33f1c2192eba15ffc57f868b60ebd966ebd532ddea95c5626d4c3d1bcf72b4ab577a8b7453a1cf10bf8bad272a84d0b72331413c18130457aed2fa570696ded459d7e788953b7cf14d8575672c9b6f1df95babd838b6dcfae794b2c40ab69235586745d6ef1a216f95a576ec9389a2c497e9b8df29b464daab88aaac2b0a688d755e29345c247e6f109a9609ede759d7eac59aa6f56c0d9b6e1d3789d062e35e6bfdad0bb34822d3eba85f4c845db7972ca9649a69c5866b9f256cf1ffa74853a40847dfeaed889d0d5b648996dea93129f1ff19da850c6f00cf9332c6096411c7b51c9625dae0853104bdc73136867afbb679e7b1dcb871d193e1c9dd57c4209ac2afd6f61c533e6c477e4b67d4c6b32cd1b4ef97206af1c072799962e58b9728b46cd9229b2beac61fd1e1175d874501e2b79fab10cf794f8056a2f273268018b62bb24ab50250792eb17edbca2d16d1a8144aeaa2552bfe2ab09e28b682e4d1cab7de2b11c2d5f2d1b156d95bc6caad271aacebf5099e8eb1846cae766b9198b155752220587236d325a7e8dd1535496ec216cac64fd0368db188266896687ff58a63f65858a261d65cb6ce54c67c67de979bbbd4ecdcfcc8bdf9eb8bcefef29396faf46927d2279550b1146aae4ba1764167b8c4354cbcf469df18af68faf01f3dc30e888d27d20123d84247b07dd036ceef550b29c5d6b3de19f2aed12877a1a507b80762848955c010b6d420cce6083b69b4622ddbbab4e20a21925be912a743d354e7a919371fbbeee942d01235ee2e716b63afa6dd5a474f74a25791d253bdcc45569576a075afd87abe4c3459f97558b14d1321447ba6ce37e293e523d963dc64b554bb0aaa43409fd9af6618f1361ae2d9dc5ebb69cc409471eeccd005cf0c6db16cd6dd6f366b8749eee157727b4c724fbf923b60927bf995dc51976df8f36212057db6893a67d45fd3ad77d75a91d9205a7f0dd6fb3a674efcecd23be9ecd24764970ca6733179d308cb267be8d28e5fecab53d29d747df0a4eb8409eee7537067ccdafafbb5b62e3a6b13f1a826b5b6c5d635db15374bdcad10fe1b1e062f024b444157cfe68a6754ab147ba7c0b285cda26f5262fd5e20b6bd69103ac5b7c9bd98a6652e50f36503c1682816e72aa7678b2c911ce33c869e5ac8964188d2be35d25bc810f9303812586edd13abd406a6a152ebaa13ceeba3412cb657f09bf51323bc032ebc1ba6f9608de68bcb9a79d2bc3b56240cf15b24f4c0240ff52bb9a7aeb011e97b5cc0559b7eac628ed8e2ab8ce55baddac399ed6456e1560b035e2f0cdd76561732ee30291345c97aa145e2318ef805d2305d81244c7496b63a6caa58f0d5b9cd442191290a89b1710a099d36f10a08c5c25934e88ba8112274b3d860c5582faca419a92969ded51563714a9ade58961de537cbf6d149e65976b4c656b3b9adf225b8ed445b26269c1178387d7545832840b73469d160777db9bc72317c68cb5bc8f8067c1b85a9aeb30c7883349c22eb995a2b8c3269e47e0a039ea9fabb7d2ab2a1a0cf0e59223bec974476a08c159601fae92c89fb08f8bcbe188f37cf2e85566b61065b29b2e111e232a764a76e8578b4826db18e6a2430c6de5ae3f6d65fa70def7af1c657c2a67a575cf05e98e01c9f820760797cbcdf3c9ea193cc4b1b3e53dc6f0b6b20a6f604bf6a0fc24ad43c4d89fa6bc45b893a18133e5123fc9166de840fc1b2c2a4646c248e550fc504efadcb63fce919c2dd9a61fdafb6dee0cebd6291fb334465182d0d32acbc5e61fdc52becd1e0f96aeb097be4dd8b9ec3747a72a398ecd7288663e9b68f26dd7ef4986e9998f0291ae1739b7b133e024bbb7d7569c78b295e6ff066c95a59b7394bc30c310722434c7b69106ec352917275225d33d89156c1bbd53ad65b4f67887aa052dccb10fbd1d68ab2d64b9a8ec4f4df4fa77f3ba07f01d0d04b88a3b0726b7f4db915f1586e8dd609e70d9fa90c69f84c63a9347cc660d8a6ebb0f16a6b96d57ce12dd706f1fc226100658d6de5d234559063357a65894ee77ad6940d32de5be09384eac4dfd1260a0f3b3ac4eca7e13583c536bcd48fbee1c55780648afd4a82d01e6b60656185ea2c4da11af152a866637961369617e6a49417c6e96c4eb8236a9ad4e6f01c552864db5326fcda1d5f43d3dcddfb172e93dc242c2b5d3a8e1273edebc47ee336b93a5e98f2d19fd56063711bbec812fa3c314fe4892035c7f2450e566b1fa0a9b577b5f4566b8fd799ace8ebd736a9c9ce14128230db0375662b1c127949247e3af51c20e692d68942b55416aa76d13d404c9aaf15d56699759d17bcf0fe2831b99bb797660bde55823c8f5fb1e8f762463e5f1879d0f1c40c3d17ab0016682a004fadea0958165aa8c942bf7acc427998daf97ed59e88a95da051fba856ded49e84093f48237c7e6b6fc2f7d609e705339f78e2a787381913cc276cc53437794755f5134a5c3dc5d5a2afa0fa7fa5e2ca66eb77a575ad4488c810f382d594062f5aee83b12dd2b0edec91ed140cc1629f6cf7d509de83d9bbe0fa19fedd4f2798b7bf9632a4fdc5d7b17b6f7fed8f613f5883fd4a8fd8a762d9fc10bfd97c1a2679b95fc9d331c987fa953c0393bcc2afe49958221ea649443eabc74b22cec284afd4082ff2287cb64e38cf6fab7465d350c6bbdcd146aadd7d8afa358a59b990526bfdbd41d6b9a50eff08f77954c84eb3977c3e07d3b358a7a7bd0c898f91f33645b1f0a1f110f3d93a4fa1cec5d0afd6a0dfe111fd3c4c788946f8171e851f80f12ad5f1ea95205d4bc57c9fe8d571d6552f1c0fc4b429d369c34fa3e9e6259cf918d2720dd29dedbc215d8045628d2e12bcaab0f14db6902d140ebf62b9846a83a8c6bd635c8869b056a7012fd9e637360c0a526c16e463482b3448dff188b4002b910ff75b221f84a9bd4e5768b6f7a67621a676a55fb517e9247353aa6248ab837b06bdb73a8ab070aab1706a520a673146ea08bfa49660095cab49e0a91dbc25f0524c789d46f8511e852fc384d76b843fe351f8c198f0068df07e1dbd093f0413be4123bcd4a3f0e598f08d1ae11779147e28267c9346f88d1e85afc08c7cb35f233f0c537b8b46ed6e7b78537b25a6f6917ed55ea5919c2566b504b944c93dfbc9db2a0ebecb467293a7f99e25bae54989c2c75c4ac5ba74e135f4d13a953c54e5ab316b3a46634d9f78cc042598f06335c20ff568aaa598f0e334c2b779145e86093f5e23bc73276fc2cbb1c43cc16762aec104f3ed6362da82a38575568b3c9621be50ca5707af971f44e53b34948981eb6261fb5187931ab8e6cbcd33a4f5d64a9baeb4ac7dac75d58bd66b31ad4fd269cd475eb91337da6eb6bb9276374437af30830d97adeee19ef4aac06ce0648d0decf268608763913ec5a70dacd395b362565f0569398bcd232d12ce7bbe3d44b9b0942acfb34ee397c9db922e93b78b32998ff3d3e98a95df95bae4e66deb5319d2b6e6bbf0b4e32a7b6a5b57e9c2e136bb4363b3b91ecbadf598f0d335c29779145e8d093f4323fc448fc26b74c279b386effde3ab597304a6f6591ab55ff1a8762da6f6d97ed5aec3d43e47a376b7ceded4aec7cab67375053a7f3a19a74886c8940da282e2554c01b31729db73a58aadaba56216d55a715e20b226f72cae161580bd6bc34ae1fc5823c6126badab6ad6d56666af5ecb10cd317b0f9b0c511494cab978ebc4953af1541908475fe154c88a1356515ebd9b0d58129da749a2211e9368039644e7fbac7e3662822fd0a53d9fcd50649dd438d2c54b789bb082f542ac60e59ff2f1eeb4d88cc5eb625dbc78322d6ff494daf6bbc263b3680b96fe97e84a168fe97f2426fc528df0165dbc093f0a4b939d589a5c96529a6cd585c30bbdcb9331e238e37c476382aff029f818cc8aaef499ed8ec5045fe553f0713ac13cedf9ae80eeb99d5c8097b99dc76356788dc60a47efe9cd0a4fc0845fab113edfa3f01331e1d76984d778147e12967faec7f2cf0d29e59f9331a3b95157a6f145402bad7fdc4954294a6b55c75658a530bf5323ba8abc3ef46261a7605adca4d3a26ba316d9d66f5ef3f2b1297b7650ea3a6cc374b859a7c39e5287f1d6ff12d119e2ef6cb27ea7aec1764c835b741ab40169c1d710f1969197d04ed585c6cdf7568df94ee9eacd7c4fc3ccf736cc7c6f4fc97c776045d31d9aa2a9b9c7a2e9748cd09d1a42bf7824740626fc2e8df05eddbc093f13137eb72e6d3d0a3f0b4bdb7bb0b4dd9552da9e8d65877be3154d39692e9acec1b4b82f7ed1342e8d45d3b9980ef7c72b9a72d358349d8769f040a2a269a908cfdb7a87f331f37d5063be6dba7b33df0b30f37d0833df875332df0b31647c8f613fcdb18b303a8f6ae89ce791cec5189dc7303a8fa744e7122c124f6822f195c7485c8aa17fd227fa9d98d64f69b49ed9c39bd69761e89fc6d03f9312facbb1483cab89c4271e23710526fc398df0163dbd09bf1213febc4678a647e15761f85fc0f0bf9812feab31e3e4fbf9a3d5daf834576bd7605abcacd3225aade5a4b15abb16d3e1159d0eaa5a9b90c66aed3a4c8357751ab465d16a6d9618f0aaf6e8a9ba5e171e37e0d73406fca34703be0133e0d731037e232503be118bc49b9a4854f6f216899b30e16f6984bfe251f8cd5872f34ff2f9a9176ec1b47e47a3f594dedeb4be1513fe3b8df0528fc26fc390fc5e9703f890417c3f7dac27d79fcfdef69b9aeda5bf1d4ba03f6812a8de6302dd81097f5723fc228fc2efc48a8c3f6245c67b291519776191f8938e501f6f91b81b13febe46f8328fc2efd109e76ee03f275364c47103efd208ce12fbb234cd187decce4be91da3ff40c74b3b46cfbf43197f8cdebfaed818fdbd982d7da4cb6d1e6de93e9d703e94fb17e67328f77e4cf25ffd4a7e00ab1f3e4ec6fee3149a0feaec5fec0454de24f6ef674fb4f896ff49d296ffa9b0fc91712cdfdfce6dfa947808339ecffc1acfc398f17ceed3781ec1b2e9179a6cfa5d5f6fd9f4514c6bfef1ad982611df86639ae80e95896529ba054d19a2b994e171eed963981e5feaf4e07baa7893ff3826ffef3e53e7092c75bed2a4ceda7ede52e7494cebafb1d4e17964ad6c22aaf4286bdcef23d599814f6191fc4613c9cafede22f93416c96f7591e43950cd33b0dbb3ce699a5ea2f50c16f277ba907953d19e5593d5b8217a56e3a638f9568628655e67733c8b69f00f9d063db51acc67f63eb8b3a54fa02cc57563cf61ba7cafd3a56f92bac4ee98ed45a7e731c3fb4163783bf6f266782f6011fed16799f02226f8279f825fc204ffd3a7e09731ce3f6b38dfea91f32b98f05f34c26b067813fe2a86e45f3e91bca613cc4b9f7f2723384e67e8759d605eb8fca7f186ab1fca3f0eedbd1ffa0686fdbf1aec73077ac3fe261689ff6191f82da548bc854582efabe68ec4368f91781b131ed108df35c89bf07730c36c16d114a77cb15d2183dbc4948a36b62ac8332d4819a2c56bff76ae42c8106776f5335a6c7f512b6a7dbbc8ad639562838c3a069781db4e25bea0b9c6d53250e17067925dc5963716e719a2302ff538b5ef77188be63a167cd317b8d79cddca8c56b0d125d91b8586950c4e9a5d2baaa08c841272aca7bdaedcf83d66302d3406d3c2a3c1fc01cb522d2348966a1549254bbd8b45a2b52612991e23f1479d704eb48d2ea5f93475bd8b74b974ae3a3f0e172f4d33e3de1d21a6a3da6ed5a85d3b7340b5b00ce54275deab177655afc945ab8586d5c0016bcbae96bd532ff6f59e865e96d8d837d8ef08daab8bb81cef6b06db46f8b657ce8466c28a5d1cec4fc345b04ff7c5d701ebdfff494750ec60bc869420e69b58224b68aef9f834fb5ada47341ba065f0b8f20d4a6934e2e2c12f647bb20e2255e9b4c052ff7d5de9c353bfa306557686232a323e31655d04cdad7fd685c673eb1e5816700b6f870bff0013de290dc23fc484774e83f08f74c27995d125e27f57efbf6095d79e9aca6bf4606f95d75f75c2b973b06bc4a773f0638c49b73430f9044bcdeedad43c767f2fa9f92906bc87ae01ee11f86718f09e7e817f8e01ef9506e05f604c7a6b983ce291c9df30267dfc32f91263d2370d4cfe8e31e9a761d26b8837265f6116de3f0de5d5d798f0bdd220fc1b4cf8803408ff16139e9106e1df61093a5093a0951e13f41f98e683d2a0f9f798f0c16910fe03267c481a84ff88311faa61fe8547e63f6105cb30bf05cb3f31b5876bd4de39d49bda3f636a67fa55fb178de4ac81fc225f556ec62708293e3f3842d7181645bbbe353f52b4e603fa38209256ffc24c6c94cef332cc9b89fd1b133e5ad7c619ee4df87f74c2b90f608cce23a22d31e2780c7ec5a48fd549e7376cdf59560a3beffd17c394a5c17462a6374cffc384676b847fe451f86f18a571117f83042c8208cef12938a213cc718cd7e078c6238e663ae1dc8f989b8cd65b71c1cd311c1374d6c88d3dcb13951698fc3c9d7cfe0187d8299a0b847f4e6def19bde36d1a644b4c93893a4db8045e1b78b5825658289374a1d8fb54c76efbe025c4d69a10b3c407af0e22ad139d928bac33be379377efe3de96fe6d5d6084875c5bb34d16355bf79898c50b1ffd06ba2eadf8e93e11dec372aa74c082e35aefecf76ab398a46989274d5bcc18a6e88c817f5780cfdfb76718575a7fd5cb48557834f57658b8fbeac2ed8486bb5e0e217909bbbd2e6c5eb2eda7e9b266e8eace385dd60e3a5b1f1cb4adcf10230bb529d8fafe11de317032188b58fa54c4d2e3858e597a471db7219cdbca00b9d9cfd9a5f822b1e13f6f69e68bf11a7bf4a72e05a6d3225ebfc1345d901d1c13f354f5433f1eafcb0abc1f34c36f3fa8132679a65fc99d31c9b3fc4aee82150cb3d3e0cbda132bf1e6f86cd575c578ccf5cba31b26799e5fc9dd31c907f895dc03937ca05fc93d31c9f3fd4aee85495ee057726fcce816fa34ba3e98caf97e55eeab93cc1b1e05c9a81ce793b3fd30950ff2ab727f8c72a14fca7b612a2ff2abf2004c72915fc91998e4c57e250fc4242ff12b791066734b7ddadc604ce5657e551e82d9dcc13e6d6e2826f8109f8287618297fb143c5c27982f84393419c19fe28233b1f6c08a34b4074660a671985fd318a993cc9f5f990c8f38934c4761a057f9043d1a338d629fa6310613bcdaa7e0b158ea95f84dbd2c2cf54a7da65e36967a653e536f1c06b9dc27e41c4cf01a9f82c763a9b7d66feae562a957e133f52660a977b8cfd4cbc320aff309792226b8d2a7e04958ea55f94dbdbd754e88a1d66984ef341efce09d6ec57d7aa7fbad4f262d32716293b1b4a8f69b16fbe824f3054235c9a8bc1d173c05b3cb237cdae5be98e05a9f82f7c3f27e9dcfbcbf3f967af57e536f2ac6a2c1278b6998e00d3e054fc7046ff42978060679935fc833319537fb54791626788b4fc1b3b18ed6913e3b5a73308d8ff2a9f15c4ce3ad3e359e87697cb44f8d0fc0343ec6a7c60762828ff529783e86e2389f2816601a1fef53e38558cff08434f40cf3311c27fac45180e138c9278e83b022ee64bf455c2106fa9434805e84a9bdcdafda4598dadbd3a0f6624ced53fdaabd04937c9a5fc94b31203bd2006419a6f6e97ed53e18937c865fc9876099fc4c9f997c3926f82c9f820fc5049fed53f00a4cf0393e051f86093ed7a7e09598e0f37c0a5e856593f3d3904d8a3163bec0af31afd6491e689d5e18416785bac573af2522be04137f515ac49762e22f4e8bf8329d783eb9fb9288ffc9dde598f04bd3207c0d66303bfd1acc5a0cf96569415e81297eb95fc50fc7bc1257f8f44aacc38a942b7d162995188babfcb2a8c254bedaa7caeb317fc7353efd1dd598e06b7d0aaec1205fe717f21118e4eb7d42aec5aa9a1bd250d5d4613c6ef4cba31ee371934f1e0d58cebed967cede80f5ba6ef1d9ebda8841bed52fe44d18e4db7c42de8cb1b8dd278b2d1ac159c3acd308ff94a7099b812e977ef8f4f9eeefd031d34e27bc33c2a71366312f1b82a6a22f36cdf0485db2f3d4b92b9964bf13afe88fd209e6a7774762e747ab1f2ff3a3b762a5e43d6928258fc684ef4a83f063b0d2e15ebfa5c3b13ac9fcf9fb9249cd38639cc7e904f37502f7272378326e26c763821ff029f8040cf2837e219fa893ccd93d948cca7196d39c84a9fcb05f954fc632e32369ca8ca7e802e03b3e3f9a0c930f71c1db30d88ff984bd1dcbe18fa721879f8ab5589ef0d962390d339127fd9ac80e4cf2537e259fae6b000cb74e238b59d3ac1f5015a8b7b5024f275da93f232af5de31b14b4607aca23e03b3d767d360af676289ff9cdfc43f0b53fbf934a87d3626fc8534083f076b69bf18d1ac839a294e0b2d6359c466b2031bf7485dc8f82eb51b4502af93493f56ac989a67ddcfb7eeac1726cdafe8db73ba9926fc69685adcf0ab99bdb19ab7cf919d8bc5f2255d2c4f6e8ce562ab65c9339d9d41abc4dff398fddd9a5ab1859b9d41e7353e39ab715b62e7c687b592c72271b7d492d820e2c5e53ae94525f0e7bde981492a627c39d41a71d7c914665637ef25961cafebeacec348bf8cd9130cd18ed378eb1d9b56b55528aeb46ca356a4b91ddb22b915b45bdbe8bbf8f574d9d3f9582c5fd1c5723f572c21733b9eb3458a558938bab574a610bc132fafc0b7bcc4ec022c66afea62b67f52e9374d6c7f58c1d41231ff2917bde3256e1762717b4d17b73c57dc1688d4592b63c6cf3635594c2ec262f2ba2e263b022ecfa2eff08d2e2b19df46832f458fee9f5de7c1ca213b3c16bc2e6910cd0c58eaf10656facab68b31ea6fe8a84f4b2a6fcc67f697d84c28d52ec1e2f7a62e7ef309ad8a5f3d4204c3636537872b44d0156c8bc887fa92249554bd148bf55bba58ef1b37d6b8a685222ef686af761c556dccaf964842b1f922f5d4dc89c5eb6d5dbc0ef6dcb25b24ee38db763a09f6b582c672a0d6aa0f7857c74f4b309574be0ce3f18e8ec78181d4d9d4b5f9e5589c7f87b553bcd980b261be3147891004d3d9ab457889d91558cc7eaf8bd96424668b45feac946d13bbabad7a2d4b642e2e8d490d9a3eca95588cfea08bd16cc2d257a5aabdbbc56a667f72257d31bd0a8be9bbba984e61d8a881aea470c6007ed99033992b52b956f4864ac4765de98bd5d558acfe984c9fc0192e6c212c16a9506b3dcbf3e19a38b59f5346fa62760d16b3f774319b91b0e44cae578097a1f1faaca99694d76271fc932e8e73509be42dded5d6432aaef69645d16fcdc62f4bf432d35d135e87c5f57d5d5ccb887b0ff5e28ba19c92dd3b5822acbda2b1e4494f7f38154ed7639cfeace3b4b8c97a59f109f9e77003c6e1031d87e91ef3860939e2462c861fea6238cf630c970a8b5e8fa44853c4f7262cbe1fe9e25b4868d97529b435d241e0668cc05fd2d506b1cbb669a005421fab5bb058fd15f350788dd56cf1446c0ab9cb9ce4e57a89dfad58fc3ed6c56f1f1f2dc77a511bf1edacca653f0f8f5551ccb35ee2741b16a74fbca599bbec819fb44c647994b5c7ed58fc3ec5e2e7a5cf68c7758e6c4744eff2118ff8adc374b51cefc0e2f7992e7e43587caf6091459842cb3b312d3f8fefdbf3920a8b524a054adbbb0b8bf517ba58e31fac2e6a1caa876544f40362bc3e6cd0b6c552f3efdf8de9fd379dde7b27ec71cd136383dcfb58293e1f358b55892dfb62fbbff15220f51ee43d587cbec45a90f1f308ef0d178856559da65e4d662c81b746cad318c35d580cff9e4c1f593f36304fd81ef783174b1f556c7a05393e702f16c7af300f55327e806462995a89917a4cefc362fab52ea673934a4df7488f9d0f55bc9b325defc762fb8d2eb6cb12a62bad679cda67fe0046e35b6c6c555f67383f07a0c6b5e02705168a1ed234512a73ff39dec2747e58ccdf53bacf1a4c13fea96291f39c0ca31faca31dd17e10a3fe1d366f2495d8c1d662bc1ce7859d97583e84c5f21fba58e6788aa5b36dc23dabfc1e2f0b4ab475643465bdc4e0612c06df27570744438565e322ebf1d5ccee73d9fd65bd4718b346e79df4c4f4112ca63f601ee164629adc5ca6d4629a7a0df02816d71fb1d134bd5dc6aee268aa5ef563588c7ec27cb7893d6fc9b45a92f1df79f7f1a59eb28f631cfea9e330d2030795a66a07fc74d5bf4f601affacd37858c2d648748cba4c5ce573b8d253673d8969fa8b4ed389717a976e4b776a5e237a3a515f3f457e790a8bcbbf9299b789b5ed6719d6ae7f1a8be5bfb13920deca39bb65117b37765e8ffa18079e9eb152a2ed182f717e068bf37f74711eea4a5977db892e373d8be9f92bd636c27a02a9b4f730595e62f01c1683ffea627028a31b5551fed078e3aad00293cd79ea1d2f549ec7a8fc2f9979112a442fa54a3466588e4b4f69f20216b3df74313ba489d3db4b3aa79a035ec488b06649f40ebcb6b5fcfb08524ffb97b0984674317597563344aada29580f3cffb615e4b1dc04f1d39564fc2d2f3178198b41335d0cf4b39979985e72268c1f763d5d29f40a16bfe6c9c7cfedc34b2e7ec178ed5ec5e2d722f5f8d9f3152ae45cce694c37d21bd41a87d7b0f8b5d4c50f1feb4dec2b09ae57fa3a16a756589a79ed9556c98f329588b792ed91a6cb26dfc0e2d75a17bff9097b11d14f4cb975549ff8c2eb34ecf354f1eac1d45ad86f62b16ea38b75a2d12d2f1eb1a0f2e25b580cdb2653dbe909a7d6364fec55686dfd8b44c4f7b884147bacb05abcc37b62597c37f14876636b6c6c632b6baca34516bdcec3afb25283e789a2c6f6145fd61c5f42bb6676c6163fc3e5f732ed4668a49cb9974dcf10f22b659e54d63a5610b25758f05c3dd62aa36dcfae5a009e2816ba96e558d0b684b14b1ca715c882ee88f80c2f9465911ec149ef6e316dcf53b59f4cd56659dc65161995a23525d6a2030fadb9de867ac69085b943a7bb2d60a1f4d845f87e462b453005c2c1842f5f4a18b2fb0b01ee90c70801aa0f9650dc625004e8c4f516e6664f21af65f6c0eafb96ccd62d9b65f314e948898d6f793053f4b56a2c70f6cc5c55e76000eb4281904f395308f7a044d8d93a51cdafb9a269c605148bee109f009acfd68502d89d6da2c03a5102ebc6ec2fd066b3e89cd93083ebdc3e0aae3325b83d35e0b8403e2ccaa7103588aba5a180b68a45a175a1b63667f69c6dfdae90b3b3d51c45dbeac2002eb34314dc9e94e07a88f6685dd2d54218e09d072a85ae94f0da83ac9aeff07a860153bf7e514cdd2831b50598a20bcbc280685b8f28a2ee94885a094475a12aa35a748cc2e94109a7977592dfd8e65783cbf6a4bd4251e83730be5c8917f305d215140680bb4006ec4909b00dc8805c4dee090c03a037ba4401f5a204d40700b21d3c854250b110a11c410da27eac160edaf5a2b91106882f0c8a42ec4d5dcce78b51c2e88cb17034538f0219b14f5019512db20c03a09d5da380fa526744d58e9fc53689583734363ef90cf452d1342d1416562aecadd20a300c10f98f82d88f1222df9f1fc2e37e32be794459e3b6d3a5216fe177039eb3fe94283bca324dd9db66d9ec582c3ae16140751128dbf60aaa0bce7b9470e287ea5586a979fb4beb28b801d45d70080eaec0b647b4f9b85074ad7918e01d05bc651994f03a801a35baa0d89e16100650bb40137720b5037b81c87eeb5cfb63cdb41eaf15218501d8aa665160838275293aa7b29586ac3cab049effc1f40e6cde949829820e7343e38596516843a8ad6d9618766b10814737a88b6e585867b5e12aacf0c200ee13006e2825b83d40360deb30099fdba1600da31f94b3c7cfab859870f703a6002b1b4eed822cb4a0cd60c9eff51a0680db4423b7754b9770f744e7d4a7c078a38e4fd6e9c4ec3e6d8db85a2feb5fc7e41d3ea7c538cd33e1e49bcc94fd1b9909cbb9cca4078e333d0ffa65a638832433a95667a64f8745a6876941999e8ac0cca4db32999e2af0cc94ca934c4f5dec4c4f0dd8cca426b8647a9ad591e9b967abd3191fc7cf8c1935cb8cdb1dccd48e83646a9db299c8a065669c31df4cc4039e99c08b9499d2005766ca8316d1f9a6fa79a2d97cbee988ffe35341b3f954d0911c02ffe00cffb15b19a3a85b193c45ed99bfbce48fbf0bda38abae77e9d02f4607e7b79b546b42a74d5b477b638f6422984a9b6330989e31da249c39a1c4b918e01c6312cef1a1c4b911e01c4bed905b2933b113ab5d01f0c7c8f075a1c2f7398be2cb0ac21ad7a0f608d55fc926b03c3a9c1da870de0270669b8433379438cf0738c79984736228717e0170e69884332f94389f0738c79b84735c2871e6039cb926e11c1f4a9c0d00e7049370e68412e76a80338f12677789b344f6cadddb4dd8aadb5b1964d3816c4905b20d68b04fa49e56a5fc2dc97ae1f8f3b5e2d9f0f584a6010b9d44097600836eb9e4ddd261863b00c0dd9b12ee5000d7bdc7e674667be4cb0470b80ffa5c667b2aeddd0702e890b68b1081fe33003d997a1a573cf70814c79b5464285b53d96c6f50d2ee4389b293449917bc63a40f15bc7b801d4e0902dea4e0e19159deab00debe94f07a26682c393331a913840c665b908df73309e6c410c26c0760ee6f12ccdc10c26c09604e3509e68410c26c05604e3309664e0861360730a79b049370888d0c660b007386493009dd1f6430ff039a46334d8219c61eceaf00e6aca6ed2cdaa2ec7d7009ed92acdf5d0632f96c4a942325ca4aeba14a71d47fdaddcbe7e1489177a5b2de0d00f91c4ae4ed04f2b5c24364cfad5b23e085cf0dd70164f8b94d99e19ddb9b125adf562a94db80f5cda344393c26c3db3be5ce66eaeb86dcafc9ad7383701437b078bbae92c226aba8e601d8070461b7c9d5fa6144d90f14010752a2dc4b530424bb673329daed5468f701563abf69ad34eccda94f80952ea046394dacc2a89673cff97ec47c106ebd5c8fa266e4dbeb1cc257e7b700281706b193e338eb7f950cbc583495021a54232b338f0508f383403871b743f800405840bf67b23d00ac8eee4fad877514fd3e00f12093e6be93ce9823c3391ed4d78526e1249de24586f360807391493849272092e13c09e02c0a66654676f063e864f8fe0acacac5e64c84d93b8475770eb0c425417419b3456327eaa5ccb75e2a114df03a66cf855b209c20eb826a1691ad1ffa0858e9d220ac14cee69c6f819d2357e1965b2f6d0aa2714466a51b00ca65f42343d011bc525ae274b16a779d1435db3a96592262366509c1f4ad8e00e6c14164f97ab157405de3c0855ad2ac8e3a1fe738cab17532b41703b48704318299ecc202c2aa896c59c13e00e67293604e0a21cc4900e6a126c1249c8f44063307c05c61124cc2997264303301ccc34c82493887930ce6440073a54930c3b8ae6d0280b9ca249884f391c8600e02308b4d824938844606b31780b9da2498847338c9600e07304b4c8249d80322833918c02ca58499c1625d73dee6c511d6ef64f3e20a80bbae8c126f368b1d6a9b2b7ceea5c2fb0ea721d8dff58e75e42d15d7d73ae0d705e187229bbaf015b0eef2a69ca1ec1e0621acc4c8bcf8c300cc3526c1246c5e91c1cc0230d70631a2c40b840d4c7d773c205f3d19be1e005f05f5f78b15bed8d99e5c5874b78530cf097901003d3ca86fccee5ed36a8e0108d70581306fb743b837405869766b94d0a94cd61add0c5aa355c14c63d83bf8690c64d6c900bef541cd9b8b0e10c3314ef22639d990dbd1208b579bb37c208ccbac27039435413582126dd41ee6399d7900e81126ed333729948ebaff029cb526e19c104a9cd7039c7526e124dd0a800ce7e90067bd4938278612e7bb0067834938f34289f3118073834938493ffc4086732ec0b9d1249ca45f2a20c3590d706e320927e97734c8702e0738375337e493fbfe54a1508d7f018bb0213f8f0ae83800744b103b1e36c17734c8964eaf03f08ea484d79725bb2addb94505e1dca44fc94a4ce03b3aca44a8840e1032a8eb01d4ad2642259cdf4906753f00f56813a112d6f064502700a8c798089570ee1219d46c00f55813a1124e4c20833a0a403dce44a8845367c8a00e07508f0fca53cfbf67a03ee2ebdc609f230e64621799a7fe2716057a0225d0f12c7614c9b92a6e068b7ee6d38e88f3a3a1ce6f0f47bfd95a24ba086a3885d0aab3a812a12f488413cd59d61dc68dd1478302e2a46046e69be00b0764c5c1cfc0124f0ee27b31892bad4251de96c8296376994bda2218493589b604d8e62926c3252c43c9e0ae0670b7990c97b0d74506772d80bbdd64b884bd2f32b8a500eea9e66e4b40b86a846c8ed4eba03a3bcd9c8dd5497716236b5a6d0630779804338cdf9c3919c03cdd249861fce64c3d8079864930c3381972238079a64930c3f8cd993500e65926c10ce33767d60298679b04338c5ba62f0030cf31096618bf39b310c03cd72498848b6bc8609e02609e6712cc306e73b90dc03cdfec856061fc5c4f5fd077bf80126f4789d7ded6b252f4e26dd9158c702f46b22fbe336097175282eb23c1f1498dfca352ce9d1a668bd1a57af17ad8bf92fd0d407a51d01f4149de9314c6ed2d734136bf38a861e705c216d7b9c63d675aafd58a10c33cecdc1bd8ea259440f7885b6ed61166732a74cd00ba4b9b72dd67f87713eb0a50ee0c62b03897ed4e7b8714007c9799f1d52d7b0e498db0587b7608a9657e4885f61450e15c6ed2672748fbe764969a01705e6112ce9c50e23c08e0bcd2249ce34389b306e0bc8a12e76016bbfdc02cb689f119a10d4cad58cab75e2f65bc675e28c096364e7e0ca0c549f6518a3d416575b5492bed268572f3eaff019cd7988473422871de08705e6b12cedc50e23c03e0bcce249c134389f32f00e7f526e1cc0b25ce2700ce1b4cc2493afb830ce73c80f34693708e0f25ce2300ce9b4cc299134a9c87029c3707e53a5e241ae90d96e4698c6f5cbd446e4c502a3626280bb5eb7805007a8b398b65c238a16608e878de1ac448bbda3bd9de2a63b5e8b9ab87c2bee56a31b0cbdb82d82aa3093e6c4a066f0a8077bbb973e0092b20b2b1cbab00da3b82b0cb89c1db25991f7e1780776710f09a609b5f32cb7b0dc0bb8bbe7a59abd9487591c584cff9b0152a17fb30714f66f89a3ded01ccbbcd9ddd41e87f27b3d32cd00cbac79c9d94c338df7d04b0d25d660c091789f273bdc8fe5c5c152d5ab2ddc41a8095de6bd2a01be9c458b2f2747f80f33e9370e684126705c079bf4938c78712e79900e70341f4cc937372e4847241413d80f9a04930c3b8a0601380f9904930c3b8a47a1d80f9b04930c3b8a4fa0800f3119360867149f56100e6a326c10ce392ea9500e66326c10c6317f35000f3719360867104680580f9844930c3b8a4fa1000f3499360867149f57200f329933a94a4a340641dca1100e7d326e1246d1e91e15c02703e63124ed2394764388f01389f0de28baf13d8eef6c5d74b5914e173412c2248ec798f5d8c35cd125a2b16fe932ecbba334204f94860a7cf5342ee2f2157b21201b84caed288aecd701603709e1c2158b2d5194b01d81782d8a64281559f22770e1bc76b4e85b1653a0be07db129473803db817e2b15ca6600e54b9428070a947ceff942018caf58df205f8f5aeb4af9a5d8e962238b75f2fe6ceb58668925dc1984ac2dd01654642f07b383f784e027dd9095a45f027caf98333d368ca5e69e20abbf4a89b25b02942aa6a4d36b2653359a8e07185f337b0b2a42e732d916540702bcaf9b3b759670ac936c62d81f4059fa46100500d66c8a160084e5285901d01a58e89bd49ba4154887885a5e304f5826cff6e16b0a7506f6f756d3d6e5b6a84aea4a886c73b47260836f079195b31bb373a9708dd87b2b847dcb9ffb8145be433dc4c181cd140137e9c775e753c11c0f60fe2e88ec9d1dc7e1116eefe78b00e5ef837020e7ee760ee47280f00f41f836b935ce12cd9d06a1c47cc6f7e7e4993c9f6d142ee35a5627da9a352ccc0b567301d87729c16601b0ea38578c0b958a9a7b812c292be4e772f2997b3bd4a5e2fa5a47df2890ef1b92d5fbff00f0ff68ceda8e30ceaf9b0350be17c45ab8dce0dd726485402d80f7279376559844d99c27db55e15f00e7fb26e19c104a9c57009c7f3609676e28719e08707e6012ce89a1c4f936c0f9a14938f34289f36e80f323937092ee2d4b867326c0f9179370926e864a86b30ae0fcab493849a7d192e13c18e0fc3888d1f4f16c77dae27c3ac0f78949f33c49bf7a49867312f0c27f6a124ed2156f64388b01cecf4cc2393e94384f03383fa7c4d9460828b3ca497b60834b0edf4ca356a06cfc8212d77016eb5a734e3db0671a5789bfb94bb941889c2500f36815096a01cc459a49057b2c80fdb76066c5e5ec46eeb7cf00be2f83da625f1de730ee3b2f14028b85285bdc348b52a9f0bc178a72538d2285d5d7fe1e80fcf72006e1a270f9d8d11a01b036d463453500e157e6ccde0ce3ae1fe3406dfe3525caee8ccf3a2a63f64c0f7b7a36366181f0836364f57c1b6093df983bc1308c3bcf5d00d07e6bcea76ec787723395e700ccef4c8219c6c1de7700cc7f9804338c9ba93c03607e6f12cc306ea6f22c80f9834930c3b899ca9300e68f26c10ce3662a4f03983f9904338c8baf1e0530ff6912cc306ea6f21880f9b34930c3d8b1fc1d80f98b4930c3b89de41f01cc7f99bd3890b04f44b63870017082fc3b08bc3962c0370a2f768ef16cb152bd5e880a687898cce3f92db0deff50fb98e2b9eb6cd5f3c49459c2dabe25959d9e0cecf4d720ec34fbff949d7e08ecf4bff49b5638edd4f6c57337dd7a7680189aab893bd186d07ec9a6d9340780ff67ce3283303a4bc60094bf9934016c0265038bcc32ef0038b9991a833337943877029c1193704e0c25ce1f01ce6626e1cc0b25ce3700cee626e124ddff830ce75280b385493849fbfa64388f07385b9a8493f44b1c6438cb00ce569438f989da56257c63ec9d00a6d62659dd24ca112332abfb37c0d9c6249c134289f34a80b3ad4938734389f35480b39d4938278612e7ef01cef626e1cc0b25ce7b01ce0e26e11c174a9cb300ce8e26e1249d0b4286733dc0b987493849bf534486f31080b31325ce7eccb9a539e7d020fa07ee8dccddcbb4083ded6433e4fb8091a2ce945887b9b0ae66b1b38e939f9f4c889aace7742c40dd8512b55acf3189ed6e9baa3d0c0a813d2911aab9f3ca5aeb84fdf12260b68457a61d320eef27230a817576a544eb6da94c18a7d40e0328bb0561a5a9adf0209c80435686de090a80ee9468d5a669e35cb61a40e949066f5f00af0725bc0c4d16f736398c70be32d9e4b0b920dbf70ca2c10ff79fd565f170d7f52f016bed45897388abaeaf6470f1abfe5b5c73e4cb817d8027930af3dec06a7b53628eae849f147c994a66a5bf012bed4389af0fa890aa77ebd975df03a47d8368892637f92b8cd3c10f0428fb51a25473ebed2aa9420ab2379d9ecbb88324b04dd13b50d9e59f00ccfe41349f5485b456e02b60704dfceee789ea042aa2bd82683e611dd0d8bdc108fda5643807029c034cc249ea7e26c3b908e0cc300927e9e00819ce3a8073a04983231328b717201b1cb915544d834cc2991b4a9c17019c834dc239319438ff0e700e3109675e2871be0c700e350927e926aa64380f02388799849374a71b329c5b00cee126e124dd93960c6709c099198c7bae09863cc846353f06f84604315ec4032e1796a864af978f84cf7b1401f04652c24b6e39b6aa64c2678599a0b733ca1490619ca4d005801c6d0a48c2b14a32904500e4185340123a32c8402e0420c79a029270d20c19c8ad00649629200917fc9381ac0520b34d0149d8f42603b91d801c670a48c2495b64208f0620734c0149389c4b06f22c0072bc292009f79c2303790600996bce64d7306e79da1fa09c40ddc38e7e82842b5a2738ac11fbc1f3d7c23723938faf29787994f0d447c2a33385f5f3da8a84a787a32d17c2aa683b8adba9c05602b01329c10e66eec983f67ccce832012e903bd0e2cf2e0ae39eb27340d69f14e4922c1b289fa1c90b8299daca29bc9bf71d05b0ee6dcefcb7306ed43b1414039383588901ebf9e44b5842b46425ece1c04af70932f357584a2c61d12f6242e1814dc7de4a85f54480754a10031613821fed21cbee3783ecbe6f103334f950d9ff9d6d4f7f0078f70b62367172bda671a1dcf67c3ec8e8fb9b04338cf3dcf301cca926c10ce3879fa60398d34c8219c60f3fcd0430a79b04338c7b194f0530679804338cabd4a70198334d8219462fe8140073964930c3f8e1a77d01ccd926c10ca3932e0fc09c6312cc30fa93260298734d5a05445a0591ad021a0b70ce3309674e28712e03380f300927e99731c9709e00701e18c4d46b3e9abe01783603f11691e19bcaa2f8e653e2ebc6f87edac572933e2e6abdf5f85aebf16ae181871f0c0f1fc69600e3024a8c03587409bf3db4b6d252d7ea2708ff658518799fc6f80a743e9c516c09e019dc5ed66f7f93287c700b01dc85c1acae9818bcbf7d249543f817802fdfdc8dce08fb406433432e03680ba84bcf7875b98a29e970da642a0b3d0ed4e10799bde519a1438e6ccbb30300de42730b00c2f121b202e04d50002ca2443b50a09d2becb390f1b1f33259db970a516aeed23a9100d3c578e63a297eb6752cb3c49686b0ee6f07001751026e2300d78a0c3f97f119217574b832a8707501b81607512161b39266880c4ebc09f454aa0aa90328319704d1478f6e22655bdeeeb5207015c0b934a80dce54ef487535a39dcf70f786ba832cbe2c88d9c81066e20a28bc606700b0075382553bbf8f67bbdbceef17028487983329368cf33b660394cb29510ef2807211ab1142ea59bef59772d7d5d1564bd3a96af98ea05a3a9412716f572d5f237c9d6be3da6c184731ab00d01526ed2a332994df57ff2728020e3309e78450e2bc1ce05c6912cedc50e23c01e05c6512ce89a1c4f916c0596c12cebc50e2bc0be05c6d124ed2f9496438f707384b4cc2393e94382b00ce529370e68412e73280b32c889e7bb6f86d1ff9e8fb2266bb47c2ebfc5809109637e55e0b81959564deceb3412f680d25caa12cbabead94d99f732816bece3231c456cf365abff94e0c7024537de8a12e286f13d94ab7af81cdae35677f90302e8019036cb622a812d4f63871419b64e91980357e4a85f041608d870731f4c61196356eb5a26e87dd85fc38c0b82ed8c90abbfb47c47a02b495e6ce0309e35783cf0268ab82283f7376bbb1a32100e1fa60667936c1446eb2495e7b017cd5c1e0cb75358ac23c0ffe6f005f4d105314921bb9cc09e5d8e53500e61126c10c63d3fc5a00b3d62498615c9b7e1e80596712cc30ae4dbf1ac0ac37096618d7a69f0360369804338c6bd3cf0530379804338cb33ab603981b4d8219c6b5e96703989b4c8219c6ddb9ae0330379b04338cbb73dd06606e317b111661c627eb9f0f021ef62383700f8f6bb4d752e1d5b4e76a867dbdfa43c04a8f3269e47c0265094a36727e3bc0b9d5249cb9a1c47909c079b44938278612e77700e73126e1cc0b25ce5700ce634dc249baf6970ce71280f33893708e0f25ce2301cee34dc249da3722c3590a709e4089536d519e13fc6810595fe87000efc420165ff1b91c3319df0ba9c6eaf194c946bbbde4aa4c082c1602e02e49f604aeb04e381c08109f64d23668a41310c8700e00ddcb934dc249eaf3a45b0b0c709e62124ed2f9ee64382b01ce6d26d5ed932807dec8eaf608c0b9dd249c134289f32650159d6a12cedc50e23c13e03ccd249c134389f3538073874938f34289f32980f3749370926e0e4d86733ec07986493849773326c35907709e69124ed2194a64380f0338cfa2c43982b977f8e07df9528b075f2ea0e2195da3810d1e4fb3feb2f7a0235d62f04c8408f8e9a0657a362570f5ed6b6c44de59b29281245b4498012cf71c5340867135663700f25c534012cea92303791c00799e292009677a92811c05409e6f0a48c2da9d0c647b50d95c600a48c259f1642077008bbc901264b6ab99d4802e04c4d763ceb09ea8b2f4a916673caa01359aeea46a346d01767c5110d318937536138e7b92b99afb0198179b0493704e2819ccbd00cc4b4c8219c641903d00cc4b4d8249d83f2283d919c0dc69124cc2162919ccae00e66526c124ec2791c1ec06605e6e124cc29629dd66e700e61526c10ce3a7f27a0098579a0493708d3b19cc9e00e65526c1245ce34e06b317807935254cfc9b06b3addf15ccfe585e9125800b0eff370d16b328d86b28c1f61360e75b0f9488a98a70d956937d95886c31576b80f55a73769e0be38e0c4341d6bfcedc4da908eb7bb24da96e00567a3d25da3ea054e5050077eef14fedd8f394678b6c5f2f5e0ffb96931f00a43798bd4896b0234a56aece0685c18d9478bb028bdd20ec91cfb0b73f961b908d6ea582b80ad8e84d41cc21818d29ac0540de8422b3c9fe00e7cd415450b1593e992a2a8cbb268e04d9fd96209a51d8009eb31915c61d6f46022bbd35881e542acd28c22110321b3d0d80bdcd54b061fc74ee4900eceda6820de347c9f70360ef30152c61eb940c6c36007ba7a9600907f3c8c08e0660ef32156c181b587d00d8bb4d054be8b026037b14007b8fa960098755c8c06e026077990a368ccec02200f65e53c1123ab0c9c02e0260ef0bc225c8dd2d95ac420ae293206b85dba59aad6333adeb5cb11216f0866f1da83caeef03bcf707ed7ed1cf402d1230b91fa15c88aba2ed286ca7b2dc5381fbe5014ab4ea93011358137c71812ce36f0596f9a039deab306ee47a0040f99049db6d90ee4c4636ea3f1964ec874dc249ba951619ce3500e72326e124dde88d0ce70e81b3754b97f0d931c26788c8563a9a3375d6f5398dcd9e0aebce58abf16337865659d975b9f5cf5b1aacb0fee9ae47c4ce66b3ac1e498db8cae5950ad955d65dae591dcbe66bb91ee526d14a9a44a628ada759ccf98077212b13a16f668b98bda957be1c10af10952047922976ec2db0aef121f3321102ff86e35a562b62ecdcf42b33d24670b23ffc562b5b27995257f531b879b29ea8b0e25ccceca1f74c81bb409a5066a4233853439ff344fb9c6bc1132812e922d384ebb340c4857f39b2581c8b1adfcae2fe9b489ef5cb6ee98f6d6ce38f95ab75aae499ba9e58264f91f8d21ee3d823fa9c5899365b4a1423dbfcf9fbe5629a4399903a2f614c13c70fb7cb0e7152256b0c4f8bdd39fe8ff37497c92eccb467a4bdf5d7622be56de1fc537db5d6df5ca9c565cd58cbff07dac5d8ff3d6f0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/fc5fd3ff94dd8d846bfc322c53e141b1.asset.meta b/Assets/SerializedUdonPrograms/fc5fd3ff94dd8d846bfc322c53e141b1.asset.meta new file mode 100644 index 0000000..406712d --- /dev/null +++ b/Assets/SerializedUdonPrograms/fc5fd3ff94dd8d846bfc322c53e141b1.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 623816fb81ca18748810cd36cc2ebc1f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/fc93db3e8a03c024882acbb00d43faab.asset b/Assets/SerializedUdonPrograms/fc93db3e8a03c024882acbb00d43faab.asset index 117d01a..d3d3271 100644 --- a/Assets/SerializedUdonPrograms/fc93db3e8a03c024882acbb00d43faab.asset +++ b/Assets/SerializedUdonPrograms/fc93db3e8a03c024882acbb00d43faab.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed9d677c14d991c0df082421e2020b6241806009c3021a2132cb0242124224b14abb2cec82904642ac24b0021bce77debd60fb6c9f2f3a5d0ebeeccbc9beb897f7822f075ff6e560df9d3ff893bfdcbdaa7eada9ee79d5d3dd332575b3967e9a56a77aaffe55af5eec9eaa9cd23f997dfa6340f5a836d5a4fad5b0baa726f57f6d7a3ba17f9d3df7f85535a5b7a3fa73509fdba71a4bdc093fbb331bf46797de9b5633face5935a4b76378be57e5f5ff5dfadebcde83a323fa2fafafca2cd637f5ab76d5adaea8faccba122206f0a669732c037a6596e8cfb3ea157d368f9982447278aa5e7ff4ea33d3786e4267dabdeeba7a1ed59ad0e786f43d536a5ccbbc8d1297dcd01233a8136e969bed0ab33daaff6af4dfd3641fb438a6ffaaf5df2573bc4affd5813cf37fc6ecc3b56f9afd95e4789df97f9591df63f61f31dbd566bbc69cef35fb6b7de71f25e7757e167dcc1c5f67496bbd2fad7a9fac0dbeb46a7ddbe344d663e6da3edf351bcdf64973be9fecc3f6049171c26c8f9163c7cc7693d93e65e40c907dcd34f37147dfcce77cf79d32d73f43f661dbe093f72cd987ed499287934e1a550d4e1a55e3be34369bed6923eb1ad987ed1973fc39b2efca85e3d77de97cd4ec6ff1d9632b63db1adff62cc97ba3cf2eee35dbccb6dd679776b36d2332daccb6951c6b35db65165bb93c3a7c3c3acc76a9397ec3ec6ff7e9f9b8f2fadd0eb3dd69b6bbcc76b7b9ee79c59739b7fc9ab2b7e8d386dde703ee71cbfa39e52debe71c198b773832161f0b90e172ee247c5c1f3e4f8e759263b0ed32f7be40f6759ad51ff6c9bd64febf49f6617bc197e70b26cf9f72f25cbdc11cef36d7ddf2c9bdea93dbed3b3e486c08dbcb449765667b851c73e5667db6bfed3bbf87c8b09d7f4279fdd84d6baf4fef21afded56e3cd8a7bc3eb65f79ca52cd1d9fdc26b3bde8937bd1915be3da2be793dbccc83de0bb8ec6e952bebbc86c5b542196c3bdc3667fb1d9cfc790b5d2276b89d91f8921bbda6c0f9a7b4623dc7328c63d8763dc7324c23d2e8b385ceb7c5c3df75667b0e5735e4b1e54f7550e85410908db4473ef2cdd3803d135f0013fbb31d919dd0cbaaf05585a48fdd8fe9ad1166cb1b6901ecb2c27f96ec3cf417dc5180abd539cc4278a9280cc8debdf3c69de4debe39dd83a8406de983ed3a403da18de754b179debfad72b6540273bae9b88791d1066755220ef96ce76f195a55482a6a0ff9e1e2dd369a94ee8232ed0fb7a7f1c73d88b9f0f30a779cc7d973e3683ede649ed5a67f5f6654cad58f729fdbf2dcd3e83cc9e477b83953bee348b5d33b56b6d20f739f4d12f5a64212c02e8b12e809fc539282399f71459e28b0c9d2003c1bacbc83880c8329e632d2a87f1bca78860741d8b35b4fbb7c3fb88aea88274b19301736f420d0a166ef9c2a9d35f78ef073e59ed55eda0ca6193a7a1846a4160415e36b3be4842b00ad5d58b9b21a37efc191b7eecdef5ce237ee7ba31bc2eba016ab066f21a20034db13e8c9113ba190bd5d81d4c20af85bc84551a1c29b24f3308ab45c4c51568a96c7290ab6c9097cc37e4d2512508f29239bd0a90e1c74eb08e21582a0f1cc1453682d80b991025d8af8f39cd9f0e3ceb785093ee204fa2fc417d0e720fba84b9d6a97f2fe350d62ce627983a74a8f6fba8db892f43e2104fe5f3cc5969b1cd4ad8971c5f202bcdea3c43fe7bf5dfacbe7bc804d5d27784b7d1f2d0365a81366a0eb4516572cc59a8da6621ec15e717c442d0ea1cd571782650479774789bac0c6d935568933d0136899f47ce0a35362b605ff386a8158a3b93ee7f67f5bd7734a907e849b3263af8af0f66fe4868e6ab9179a3b54b1c2d471ce15a0be16620bcc696c93a5f26217f8ce02536c110e2d68611bc82175c67f3091cabec9bc736029cbb875206f5b5d15b0930f0b5d7df4ab03bc13a74820d45ca95ce0267f4a536842b17a62b11af9105adfafad08dacfac09e40d426d6329b674339da10c6b36b79cf5e6e138ccd494b93f2fff44f91f03a5ef80a9bcd21a6675e9fe7506a1fcbebc40e485e756bf277953308e3a67b0fab0ec8913b98d3a3b723980b38ee56fdc169057bd4c6393e05c6399c76ecb086df85d202664faad0ab1bd0ab9b022a645b6ea257cdf632b519534f161baec4aeb4152c28105bac51d85faad6f1a56a954d321cdc6a71a7667027a8cc9762bd5994ce663e9d47b874b671e96c8f95ce6a5b94c083af2e6894702235c81bc1210a47de1505eb215e42af7d51fbf203e3437dfa9a299d46def87b3971016661375b6a1abeb6d98125e354889221a9155716d670b5174c2b170d0e4163ad5b4d7a8682dab1843a83e40fb0e39bd7398852d1ade5bc7917e7cdbb6379f3a39cae599bae2bd0c3816ea123f30c0e86cd44acc8d771f1668f25de64a2c49bf51cb92738727b6391abe7d2d9c7a5b33f563a1b380b35d92cb4dae28dad6579e2635cfa395bfaa067277ac8557d6850c70b672596b35a6b0c575d45497d23977ab32d75c8eb4dfddbacff4ae502ae9bc26ba2e467932dfa63c098cfe1577f6b255acf0006f6c275ae5b947de8b554fa5c646db059139a1eb010c0df59c1c978bf69ea79d36ce6841fb2085711856fe14afb61aeb41f8955dab7dad2017f3c6af3f79596787c4defc324ed3d1d01a278762397f2315bca6be7ca790ff6ad87d1b707742e06b5fdc1bfdd09932879d8c6e5e1b82d0f0d45a5bd545ee295f9ed9ced4f70b67f3296ed1fe7b43f69d31e6a6e37bab9faf927a7ee61048a16ef7770da3ec5697b2a96b63b396d4fdbb4850abf55479969f4f3c9398d5b513fa70c38cb13200a45d17797251fb9b5f31dd17bcd5420c8891ed1cfe89c6ef5211b19d975c61ed55b99a85e2a0f5c54df6d23880dcb495182a5fa0ed0739f452d9a3c7d0448bb30f15a4ecf07d6cf46ebf9b421fb1655bae75389dc7316cb7265af9d8bf510390feabffba43d050bf56fe231e875458df57bb83c74d8f2b08ac4fa1912cde3a5fd0497f6395bdacb48da4ea48953b7ede5d2ecb4a50993d4e061d162f73e5b1a80ee3c17bbbb62c5eefd9c2e17387efe564a4f64dd9ab8342fdad20409b7630c30e738829738829763116ce6b4b962d366b985e0d918da1de0b4ebe6b4bb1a4bbb164ebba76ddac1f83d2c182cf453a36975d0925a0e0718f26a2126a20bed90ca4e44c3ccd3221fbc1c0e77044d39c7cf4da352af9dd61fce88acb3cb0c7543532978e63b7e36b84aec90cdc9c0ec7d164ecdeb891a6a4e3550c8ef69bdbca71de692ec0f48d2241433c9235c9203c1497ef6332f9e6e7cfdb5d74e464ff2a82d49189b8347a3ca9a0b38662ba93890765bb4a4baada45eddc0b9a8cf0deaeb41a6739c8e11b5620aee737fce79ef5dc165149e0e0b37b6720d8bcc2ea52a9a3baeb01cb7d914aa95e76c198eb088e1844d3098f47a18c1d778c14fda04c348db8d30825b78c12739f77ebe5cf77e8a93fc42b9924fd924c3e80f3c7d55eed8d6695ba9c461e75b892a95f14ae4add02572104be48e1825326a693cc339caed721da5d52619da4e43614a4d4023eb2c174086cb0c206d5c8ef365e6b89d0b20236506900e9b60282fa361040ff282cf716e71a75cb7e8b415719cd919112de25c3baf9ce516c1c57d2c7471bf8bc51d86022472c915fdf3361b83255e0ce33c7779137771ce335eaef35ce0244f942bf9222779b25cc9972c927338997877411cbe12eb8c821dff5e18ff69e0895db6d9029a18f755f94d8c2b5c907f5b9941bedb261862f15499b1f8aa4d3038d074999c9fe650cc28cbd848bb52d6968577058c331edc84a3945dfa7cb73ee33c900947ec3e66f3c89b38c259f02eeffad92876e9e1b49cb56979694e4b771c9b8e62dbd60075cd5d59181bef412df2660469caf080a36fc364402ba72c8f61d263ea55557828c5affb803e3a16718cb297d3fa814deb770a6add8b6787b5c459d408e472aba6e0fa68f908b3feca4b933eee5609d27d1ce9976ca4fbe799b497ad24877e8ec3cb360ecf097270d7dbd057420da03f14e6e1a3d0a071290a91018ec82b5c7ce55275f4baa72bc09b5a7b88214ed480481a94dba033958aafcf705abe6ad372a74fcb564d7d0afbb08e8e6e89bd84161ed5ffdf29ca6be1498028f97c96cbe797d8f2d9e6cb67214d6a8b2eacbf82ed51b8933f5e295b5ce3747cbb4dc7734c8dce8d2df86dd5696c15a45714f951347d8ed3f44b6d9a9e6034edc73ad7b1dc98725ad46ecb65c0d874b84409ab94edae731a7d994da3533efff4a64b7d14da5c10fb5ec1ba7234a09de1955139cd6e709abdc3a6594b44aff4c60ddbaa80f263c7f39c06afd93478ff82d5f1b0dadbd5df598b34845287f5b5c1359ef74c61f54d507bacb02ec4be2aa412ad8a1738f2af73ad2b7b1f83ab4db9085e5a4ab86b2a55866e721cbedcc6e124cba1f8191e6ff91965fa62e17b6e51b4bac569f5155ccc8bd6032db426eee9bc81201a3f24eba7414eb3afb469762db266ce1a0c6fef3a8a2ee5f4c5e394e3db1c8fafb2f1c80b47d0f27a0761db0271380d719cde69e3e4ef33d07c46e93304d5057cbf287e341be6b47c974dcb0e369af95ffe412dece62ebcaec1ed9f38d6cc737abedba627bf68c5fe020d475bb76c5722bf235c7ebfba72f9ed455bddaf487e47b9fcbec796df136c7e0b6bd99c3c4e9b7a63686ea9105f07b679ae09af51adfecde08ac40e8c56d042bf8a77c0deb4cae1033ecd7391b0f433bb90f6848e47909fbeb958567a6dee7b15ffbec5e249b9b8afde8bf77c659755bbf0aba58b5f33586b34726569d2f830d0c3a6e9fbc0aa4b8d55ab72f84cd2de98de543a175f03a92db2fb50f4578e3902ae98b64806de9470d3148c3c56d9609092a9947a366c3f0a70df4a5781178d826bb56a3cc3380d368d13344ad556573503fdf74b220af7b4651a90bdbda680ec6b259145796c290de03e5f5b00f77592e0c23f679e066c6f127ffb7a496c414be7d300ea59e25fdf2009aad4b3a46980f50681f58d92b0f8475ad2806907c1f44d9298d66013025a2aed983437f79e06688d4b0ad03e20092ddaa3ae6940f7c6a202ba0f4aa20b7e3f491a50bd0f8b666db54ff8b922e171bb49f15e965cdca183a7c63ad4cb38a83d651a1ebe0e1ebe33216939ff90221db42cd3c9c9462c84d9903d816c84565c36a092c906366bb225ca41b6645d9f8dd44ccf868ef385d117fba849338cbec017d8bc9507469a6160e42300e16903c1899cdf2c1939d72be71967a7244ce2082e3f7e7bc09f7e392fa1aff344d5da30cac589acb004d5ad84be45122514cd094f51291432316caba4b055136cdfba901ee89df3699643d92285f24982f2dbe603e5908986c18b3105518a15e63504e5b72f2c4aba6a431065ab14ca5d04e57748a2ac2f81d23f112808739d14cc9504e6772609a6608d2d06731d81f95d9230a1f13eed69b8db2652c500ae9002b89800fceee45438875358e16c2528bf4712e52655dc0c0ab3e44db080df95827a9e40fd6812a10a564162503b09d4ef95847ad052e8251e231234c20e2923ac2646f8be856c07f8fbed4752187b9b09ccef4f12cca32984d94260fe4092601e4a21ccfd04e60f2609661a9b584d04e60f2509664b0a613e4160fe7092601e4c21ccbd04e6c79204338d43775902f3479204338d931a7b08cc1f9584d9a88a7b50d19e7c11f4d54129bca709de1f93c4bbc2e085844710ae2b7bac784d51e5c0554b815304dc8f4b822b35f244332fea837552289713943f2189720b5bc4ddfe3cff7d9aa2e34faba5d09e25687f7221bdd45b15a5b1bdb981a0fc2949941b2d284b3f222458f07ba5901e24487f5ada3b67946d8dcfc33211b284a0fc1949945b2d3134ca23bf8251b4410aee5502f767930c57300888c1bd44e0fe9c245cdb4bf8d337655c47707d7c216bf4f4af56da44507e623e50865b7a98c6218f3682f2e71712e5bc5536625ed94e50fec2421670af57a67126681b41f98b92280f1894e3fa22f048fab628ff7772c67b339a6858b826658063c400bf246980dd165f2ee7055382b0dba460ef26b07f5912f64e4b0c7e2b79f50902fa5724416fb38076bedc133aaa93ea027af1fd876e40b08a007e233955601ae7ef371294bf2a8912d6057b57987a5fa124866e9914ba4504ddaf49a28b37e02738862a36e0779820fdf5e414ece3292cd83b09cadf9044e97e2f69f1c4dda4b9247df03204de6f4ac25b67a9c1a9405a530b7656eba5405e26207f2b2920059b3c62204f1190bf9d9cc898c615238f12946f26afde16442a566f1f22487f471229cc8fd1c193cbf870d720ae94176c438acdbfd71070bf2b096eade266381ddf1b37e34f6984584b20fe5e7262631a1f346824287f5f12a5bbd46606fd70fa2d308fb982a0fde4fca28db2864910ad58003840d0fe8124da4655ee1a50c1da5d6c0d6807c1fb8792785761edee7cd184731345d825b90e54ace1be94c0fb2349786e0f88ab9cd2de95dc4c40fe715240a6b12bd94040fe892448f7f103ae4ffe30bceee22881f9a7498299c6d75d9c2430ff2c493005c7d2c5603e4560fe7992600a3eff2606f30c81f91749822938e72806f31c81f997498229f8ccb018cc2e02f35349822938fc2106f30281f957498229b8ba4e0ce64502f3af2561365a6046eb950bd6ef62bdf26e82f76f24f196f7545c1ac7938e13b47f2b8936da80721a5f1cf01841f977922837abf8a39e82eb3bc47c3447c0fe7d52c11e4b21d87d04ec3f2415ac60281003bb9e80fd7452c10ab604c4c0ae2560ff31a960d3f874fc2304ec3f25156c1a1b58ab08d87f4e2a58c13e9718d81d04ecbf2415ace0c88018d8ed04ecbf2615ace0f89518d82d04ecbf2515ace028ab18d87a02f6df25c1c20316de59fb3ee52c344b5f77751981f61f92d0e2ad0d156cf68bad0d3d4290fea724d2688329825d5331ef7c9ca0fc2f4994db95f779e541fc56ae311c3975bea7ca2de20fdb8b0a5ad543f3ed73cd50b57e06dca4c6b889f3b567414fe165437e1384f3f56bdc773c654bacd3ce46588e9c8dfc7226e72bd6561b8b4dea6397153c133ba8af1dc46de1ebd672f0469d0c84a8285f4f1e2c13ec152cedb360948cbdec8e57ccd32af1fd6e364d4bebc77bedf200abe41ac1160fb3feff4ded5e95db06fa1ea880ef95ced1ff28fe1b05e7e3c549c9b3ea557dc53dccdc1466b31caf86359e5e7963986e6e7b323dba72baffafd7a31f8febd1d173f439498f76a439fd449fecce10dad9ede0d7b970d57df487c297843ae5fb8efe7f380489cd5843f2d25af5de28ea3a86522794fb0335a5f35b8fbdb87e7daf1353e0818b295303c34ff5ff035476cb631ce10000 serializedProgramBytesString: - serializedSignature: 019ec02138be9876ddb57250cfd97acffd8e122406e6b8f213de7c4968a8bcd941230535d63dd3626c5dc6db33148c273f049a2dc17aa85ee57bb545755ef10d + serializedSignature: be82ae7a7d1c8780a8d681cc804a43aa4c9803455cf9c6d9a1b4ee762f7da721bb167dbecff3a4d5b27951056639905cf2b8a684f6feae6cf8ffd20bafef2803 programUnityEngineObjects: [] networkCallingEntrypointMetadata: - _maxEventsPerSecond: 5 diff --git a/Assets/SerializedUdonPrograms/fc9d28f06ef4d0f4c93a11b013619190.asset b/Assets/SerializedUdonPrograms/fc9d28f06ef4d0f4c93a11b013619190.asset new file mode 100644 index 0000000..1d134ad --- /dev/null +++ b/Assets/SerializedUdonPrograms/fc9d28f06ef4d0f4c93a11b013619190.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf61d954ecb803046953c666facfb904, type: 3} + m_Name: fc9d28f06ef4d0f4c93a11b013619190 + m_EditorClassIdentifier: + serializedProgramCompressedBytes: 1f8b080000000000000aed9d097c5d45f5f8e7b54df77d5f69baa70b4d9aa4e94a699b6ea12b495a0a6d69d32c6d68da942ca52dfbbeeffb5e76545450544054504064515414101454504454406457fe77e6cee49e77df9cf7de7d37e766a6ff5ffa696eee76ee99ef9cd9cfccb4cb65ce4f6c8af36b1d2b65c56c2a5bcbaa583ddbe5fc55ec1c773affdc33757d0d6b708edb9cdf15cebd292c3bc59bfc67426cb0f3bbc4396b644dce9bcdacd239d68afb65acdaf9bbc479b7da39e3576b9cffd5ce53b10ece4b6bd922b69aad62836203528858275e6a94d7623c5cb1ceceef856c9f73b75a28c53f922b6e0d727e9539771ac5bd9d8ed2eab90d6c9308d64ee75ea5f34e03ab73646e15123bbfeda08a893089435f79ec278f7d9cff5de4dfede5df9de5dff0f92c79ec9fe6f303c07b5dc0df9cd08124ef0f94c7f79cff1d9d3febc0397ff75d793ec895d76e7b125943e471a83c0e933277a6a17f27791c9e22bcc9648c00b2d261d6591e47cae32152df5d197e7f94cb28761390c78fef037d46826f7701f7f9313b44d8553c7ee08bc70fdc786c779d8cbf37e5f5d1f238561ec748d9ce33fd5e93d7c6c9e3e0147a8d77df63339967b3ce37dbef96e713e431471e27cae38752d77a701e561715a793e4f1dff21bbb35d7d5f3fcfef1f27cb23c4ef1c5d7a1f2b906793e354d7dd2b13fa5d37fe4371ac1b9c3b1c39624b254bc7fe48bf78fe4bb97b91c3b3ce40b0fb43f9ddc5c29af2983707cec0bc7c7ae2e5939bee752e9a0e4e7c9e327526e3338e772af0a18b60ef2bd07e5f934963a6feb9bc6bd42574e67c57abafb9d8efdddeb1de7b2785b2e48a1a78adb4f7d71fba9945b27e5aaf017b9e731c5793890c3dfdfe393fb994fee6752aeca23948da7d273863cce96c7c3e4712e6b49c73c498b6bb3e4718e3c7ecee2f380cfe571a6f7eec0a703724b1647f37c713d581ebf482153bd7fb83c7649f379f5ccfc103a2f90c7ae697eb3ab3c2e0cf1cd6eae2d747ecf670bd353c82c76f9766e023a3872ba9c24cf17c9e362795c228f5ffaece0cb34ec20952e4ba52e0cc481a34bd7def27c993c96f87439c2a7d309ada8d37fa5ccbde09c1fff27afef03e75cd735ee77ba3e21af2f97c7153e9d5712eabcca7daf4777601be9bc97ccbe56bbe1eb96e7caee562eafaff1e9b6c0d3bbf322f0aed2239df450ea1e63b178c631591674536ccb7ccfed07e731f711f53df1b7f32e4702f354719dbf7b2238e7bf8e4c53d7b52cd166b99cf6e0dbede5b765fedffd32f9ec3a9698f674eff2633b70ad9d94a7ea5a47b1c4724c3dc7c3761238e7f7cbd30cdb7a8d7ece777bcc4ff2eed12c3eff39dcb3874e2fc86bc7487d3ab0b8b425cef9fd11de3b2d65dd06f7bc97d265a37c07b49f62b2fdd45395a79be4b182e9cbd9cd80834a8f5bbc6f8f50f9ceb149be55259fd9ea0bf76a4f4eb7c1527725af92c5a719ffb3fc9a92abcabd1df2789cf7ecb8f3e4b56df2582b75ebc8e2f3e61a709d1f3bc9fb278373fe5cb5279b270f714df157baeae253b51755d8757940323bdbe53e3b56e5eff52edb5e37496e4ff874d8c892da6f4cb511f682737eec22af9f02ce9deff4566daaa9e9c967aa6da2eacbc9e246b53f54dc748d8f9b982afb8ff7deeda3da552a8f02f9a6f89bbf7f6a409d93f1dfe37eb7a55da0ca2255e6cd05b2fb483dba7bfab6d4159bc13d7eaeea8c4d2cbe8c4ba68b2a4f7ba4084f5ff01c3fee0f11fe64f7649a612a0fedc1e2da4ae2dcb1a1bee549649dec721aaceafda7b8eff45369fc5419eff7cbf3d34098f8377a7aac7b2bdb385ddeeb05c22df3c6586f704d956ba01f4bc8e3f7cef0c5cf69befb670219bafb67011d74f7cf96d74f7775eff798bc7e8e2f2c4d2c5ed7de2c2e7f62e7268635d6dbf76d159674e252a6cd585f5f5cf675e3a57f761259e7ebe372806af35ee08bcb0b7d71d94f139717c97bb0ef708cbc364013bf030107d54f79311297eafe2540aeeefea54007ddfdcbe2e37280d4995d8ec425d41fc6e51589618d0df07d5bd95db2b854fcaf94475d7df96a791c27e59e9586dc6be4b13a89dc813eb967a721f73a79bc3689dceb117d33f99eb275d977237ac7a1adf373c76e07754f22eb06a6b5f5c1aafe74238bb775d58faa6c5df5b541fbb859de1be2c5bfea878c0d6589b63e0cd889aa1bdd029e81b6aaeedf0ae4eaee1f003ae8eedfc6e26c7db02a076f677a5b87fa435bbf2331acb1a1be6f9f93465cdee9e3acf80e67f1eda3e1327e947eaa6e700a4b5e36dee5ca9fa0c279b7943742ca3f179cf3e321beef1ee27e77c80a57ce50d5d6ed2eaf57c9ebaa9e758ffc9eeacfbb573e7791efb9afb8e7392a1d7ccdc7ff3e9fad647bf6d61296af827b306ca3587c9de4ebf2fa681057a3c0351857aa1e9a8aeb37e4f19b3e7e23a5bcf3c0397fee014fff1c9527a838dfe7ddeb739a2f7ebb033dbea5b715a12becaf085a475261fe768a3007c9935459d408ce1d3b18762089acefc9679e48f2ccc3f2f8883cca76716c2c8b6ff7283bfbbe3c1fe7bbafc27cadc77ee07aa08792cddf393f8df0ff401e7f288f8fcaef8c67f16d82f1f2beae8cc8b41e9be9bdcd52a709f1f623ce9d7818b185c5dbe2b129ece347f2f8983ccaf745db1c32506df564fd60a9be95245cb1492cbe8da8c6381e97e713e5fd0be4f914dff36abce9c7f27cb2eff9a9bee7159f9fc8f343e39f674f0039fcfc492f6c42177eed2970ed5079eda71e9f91721c20961bff6df6348b6fdfa9365c9e7cee42f01e64a0eeabfae9345f98f2e5f9c5e09c1f0b7c72a7f95815f8e416faf4fd993c3e278fcf7a619c9c07de013cd933f13293daf49352c674f9ce25e0dcb1e9ecec2432d4bb45f23843cab8149c7319b2ef2cbb0e971553f5938b7d32557d6296bc7f1938e7b21f4ba2df53f2d9d9beb0cd96ef7e91c6bbb2dd1e9beb0bdb5c57c628396e366a591259cfcbe3cf7d71a86c96cb9ba789d779203ef9f9615287cbc139d7e10df9dc2f98deb6e7f8debf22fefdd1ca4f42f561fdd2a7dbe12cbe0fedd7f2f8226e93ec373edde77bcfb4e8f72b9f7ef37d7a2f90dfbd12e8a1aef3e342165f46c93e63f65b795eecbb5f2cef8ff1746919a3d7c59b1cf38c2d62f1f9fd2297db18d9ff3f4695832fc9e31c963c2f7ec5277fb1947f1538e7f7757d68bf93c7dfc7cb88b329d5bfb644132f323ed86be09eca275e06eff1f357417852f55925cb63fec0b46da7b1aaef5f9507f529b8bdceb475e5b12f0794f3068baf4bff89c5d7a5ff288faa4df367c965a98f832a639679df13cfa86bba7a722add74d78e93324b58bc1d96b8e11ff790b4913758bc1dd6a6f8967c2e7604784e7d6b39b8f696bcb602847339b8c68f2ba56e57837347b709737d7257c9e7ae01dfe6c7d5f2fab5e09cbf27db03b1352cdebf49c92b053aad71bf39fe6df9cc5f7cdf389279f981c36bbccaff5f02f7bb003dd5352503b6678f03477e5dfa288dfb30fe9b29e34077edaff27877f07763652cbe5ea2c605cb7db6532ee3e74357ef1cd58fa1ecf4dee4df567299641d5bcbe2eb7c6be5fdbf0179fcfef5b84ced77d6f9c2b32efebb427eaabace03f2f88e94b15ebe730338e7c7a34098ff2eaf1d0d6ce228793c46be7fa3cf46378067378067f971238b6fdf6d74f94ffad0275bbdb7493e7f1338e7df926575ec58795ff621b5a451308e173b165ce3c72df29d5bc0b9a3c3c44f5c1b98f41cf2ad0af9deade01c7e73abbc7f009cf3b09d16ff7cac523e771b38578ca19cdb7d727c7ac5aa4018d5b8c1fd29ec55726d696f6f90dfdaed867da2caa7de4a4f9ef6dab3f2f80ff98d6a1f37d58ffa4c06b2653d2556c3e2ebb2352ea3c9aa1ea3f2fe57537c433dff4f79fc9794b74dcabf039cf3e3761667f3313516ab6cbf96c5e5cfe2dcd16bca7d3e39c7f9e4a87c54c5cb0e79ff4edf7b6a5cf155795ff6d34d79cc179e54e18ebb961513e3eccb5835ab60bb59ae700ae02dcc74ddc5d59ba91dc585ff01ffc57f2688cf36b17dceabd53a6fedb5c217bc8915b07cadb7f61031aea8be5e2c7e57384fd40aa177c7123ef170c227b87275cebf6ae06adee85c5f2a3cd5b9b379ad73672a5be11cf95b5bd834b6c1f9172f659df3d93ad6ec9c953bbf770b795b1cb5139f4c1524ee96ee7fa7d491e97acdef74ae28a0bb9df33aa16199f8bd47685a2db42f71ae35091ffe5d6c1b5be81cf78aaf2586bdc1f95bf7cd72894cafa3de791ebbeebae8ab685ae484866b9f2b6cf1ff62a42d6284a3efc8d307ffe9902bbc6c2e488889ff63e86632bcb15e22654c13c86271d7f2592e3f1595f0b0614c0ca1debe5dde45ac306958f46478740f1321f062f891fb6f787fc0ca2b1fcf8a0f5a01cb155df4c353042d19582e2f478c500709425656873caea81f7f4c875fb82b954588df7dae563c173c023a8ac22f3e0244f76db993abad0185e75aa17c9d50cd1f9835cef50a473c0fc2542757ad9693a6ea9d6b25ac465ed9e15cab77829c10af795c894e226a120bde54c1c322a79d2e72443f57799ba40d6c9a57f2e8e9dc120a2f7a72456d6a701223c6be25aa59ed645d4b25b347bfb37a57f9e5efbc99a58f97ae225e32f91a1633ed7531d335ea6493ba9c48162fdd5ac2e5c50bffd133ec8ed8762a1d30821d7404bb456ddbfc5ebd9052e13c1b9c21774e9beccf7af4007b2246985a050c619606611e47d84ba315cbeae2d38a2b8448eea88b9cee6d53286766dcdc7b6d900f41166adc7d9296a9414dbb938e9e70a3dc424a4fb515cb9cc26ab973afc279be5a543cf97558c02d105ff0da97f16f2427cbfbdf0ff593d552ed27a88e052ddfb09a61c43b6b88e7717bedaf310391c7f913431f3c3174c192d980b0c9ac2b26796058c9dd30c983c24aee8e491e1c56720f5db2119eae1b2349365e178bfa6ba1f3ee7627307b44bbb9d9795fd725933cb90c493bb90c15c9259be93a8a82698425939ebab8e31787e994f447dd503cea7a6182878714dc1bb3b61161adad0f96651cd20a59465f9d709eda47b2c43ad797ce4f82f0eeb8f07e98e6d91acde7cc6b1748f3fe18f05161810fc0248f0e2b79a02ee31026797ac41987be3f77a958f6a39aad76ea0cc731b7234e7db75e74c2718d54875ea973ac115af0eb5c8bd4fdc0c9b3a0314cd30013296bb136b369ab50f09a423b91158e1359211f795feb5c77fb9f178b18a8155f9aaad5867f017b5eb1582956346916b19d853417c78baf9bc506cbd2076139cd044d4ef3b22e1b4b92d30cc6926c4ed8243b44279927d9891a5bcde3b6ca8772ba8a9222e13be3f1ef0cd5650d22ebdfdfa65983dbb0e0f26ac4108b2b6f15e38bf29c204c758763c07ba4e1943bcf3438dfa896461e2633e0ee8f23fc2d56e6fee893c314911ce6a5911c2843852580613a4be22d30de0198d02bc82dbad4697014b3cd22191e2f2e734a6eecd68a476bd97ee7a8464b12ecad136e6fc375daf08a2dcfcb525684fae18247608273430a3e044be37961d3f8489d649edbf04effb035ac6c4cedfcb06a8fc272d4024d8efa452c588e3a1a135ea811fe68bb60c2c7e88473639d9e8e8d24b1eab198e0225d1ae38577b1e8ccca76fed73b6ff0ae930a91fab34561e8e506d94e5aaf75fee205f614f07cbdf3843b3a1944cf719851cc086b14e3b1789ba989b70f03c6db044cf82c8df065ed8309cfc1e26eb62eee78d2e4e506af966c97655b7c6e982dc689b3856b40b3e894a91231d728e2359b9de8641c273b473e4e922dca813a712f5bac51d720f2da20713a11d37f8e4effae40ff3540c3205f9c84e55b7335f9562c60be3559279c577c0e6348c58717bcc12b3e53306c87ebb0f1d265b1537de135d766f17c993080ea96ba72552b1590876af4ca15cde55dac2d2b64bcb5c01d291ac5df5e15857fdb1bb80b53f19acf122b5eea475ff15ac078c52b9fa5ae78b586f658056b2a96a92ed464aab120996a2e96168ab1b4b028a3b490a7b339d18bb2bb4d6d0e4f51a542364f79e12bfcbc1ddbdedffa17dd3c856958566be93859ac81d228d62075c935f2cc94f7ad6f058b8dbaf04592d0a78925224d44a939962ea661a5f6524da9fd6056b0523b5f67b2a207ada14d4dd6f58288c26c97e9cc56f4f415a511f9ada9e748e16fd72832d52a99a9ba59f748b1584c832836ab9deb3ce385f7278bc54b787d6989e0bd5390e7e1ab10ed5eccc84b8491471d4eccd00bb002e0084d0110a8565d8825a1e59a24f445c024341d537b4558b58b30b5576ad43ea96330b56760c2576984afe8144cf84c9d709e31f38931615a88b330c17cf64c427593b727553ba1d2d752dc2ada0aaafd5725aeec737ed739d72a85886ce13ba9068c8368391b637ba4866def806ce760084a43b29dab13dc93b9abf385195c3b4c2798d7bfca1952ffe2f36f82d7bfe661d8d769b01f0888fd702c991f153699cfc724af0f2b790126f9e8b0921762928f092bb958279947e2064d24729f892091b80813be5123bc3ca0f0c558c2dca4cb9bc631def0f22aa96ef3c9ebd7a86035424a83f3f71e59e656c5f58ff03e8f5ad9680e92ce97607a1eabd3d39daac1dd62789da242f4a1f12fae663b027d7529867eb306fd4501d12fc3846fd1087f3ba0f0128c57858ed7e014f15a25bc29bcabd39cab41381e8169b355a70d3ff5e22dc8779663482b35486fea1a0ce90a2c1055ba40f06e1b17df6c07d92ad1e15721a799ec11c578708c2b310daa751ab8d5395531589361b5601586b44683f4c58048576339f2b6b039f21a4cededba4cb35b30b58fc4d4ae0dab76a94e32af751cc7905a079fa517bcd651867da70efbcece8cbe53aefb0e27b52b2ca9b55804d76b22787ef76011bc0e13be5b23fca480c28fc2841faf11fe4440e1eb31e10d1ae1c37b04137e3426bc5123bc2aa0f06330e14d1ae1d70514be0113deac117e6f40e11b3123df13d6c837616a9fa051bb7fcf606a1f8ba9bd37acda9b35927385334e941340fcde4fc17ce4f9aa0de9b9a6726719dde48f54dfc7ba94b6e8e28597d027ea540a50945760d67492c69ade0c9808b662c24fd608df18d0542b31e1a768849f1750781526fc548df0debd8209afc622f3b49091598309e66e9d0975c129c23aeb451acb16bb96f11994bbe426697c167bb518b8ae10b6ef7538a9816b3e25375b5a6f83b4e93ac7daa73a578368bd0dd3fa0c9dd67ce49577e27af566b729e93643747e85d96c82ac754f08a4d776cc06ced4d8c083010dac160bf459216de0388de05ce197584b9acf627ea4e5a2f39e4fa1af1196b233b0d769f23cf9ecb4f3e473449eccc7d3e974c5f2ef1dbae8e675eb731952b7e62b8d75e52a07aa5bd7e9bec36df67c8dcd1606ccb77662c22fd0085f1f50f82e4cf8851ae16705145eaf13ceab357cbda250d59add98da176bd4bea87730b58fc732894b4266120d98e04b75596e4f99e57af3bbe3fb82827cb911e3759986d79a80bc9ab0605d1e92573326f80a1d2fb79357f593b95d3a9b02168a7b304e576a3875e8138cd30998f0ab34c2e70614be17cbeaaec6b23abe085df06e847dbaef7053bd369dc84e32cab31f137c5d48c1276256747d48f33c49279847115f5acdef80c7050471c03b1933961b35c652d53798b19ca213ce3366bee05aa88cf9544ced9b356a9f1550edd330e1b76884df1b50f8e95802ba154b4007324a406760e6789b2e53e30e509b9d7fbc25cf8796b7894d9aab8593ea5e7167b76829f0fa7710db3d13d3e2769d16fd5ab4c8737eef64eed084eb1c92b90e67613adca1d3a1afd4a1c0f95f29eac2fc9dbdceefcc35381bd3e04e9d069d415cf02924bcb61ae46be760e67b97c67c9bfa0533df7375c2b9f9de8d99ef3d1999ef7958a677af26d36b1f30d33b1f23f4150da1bcfec1085d8009ffaa46f89a80c22fc4847f4d17b701855f84c5ed7d58dc7e3da3b8bd184b0edf489635e5b772d67409a6c53793674dd35a316bba14d3e1fe645953612b664d97611a3c902a6b3a4a7c2f98bbfbe598f97e4b63bef3070433df2b30f3fd3666be0f6664be5762c8bec3c255f4aec2e87c5743e7b98074aec6e87c0fa3f3504674aec102f1b026106307060bc4b518fa4742a2bf0ed3fafb1aad4f0aa8f5f518fa4731f43fc808fd0d58207ea809c4f041c102712326fc471ae173030abf0913fe9846f89680c26fc6f03f8ee1ff7146f86fc18c936f1982166b05ad5cacdd8a69f1844e0baf58cb6fc562ed00a6c3933a1d54b136bd158bb5db300d9ed269d08579c5da6231de511fd067e676cc807faa31e029838319f01d98013f8d19f0cf3232e03bb1403ca309c49d0103711726fc598df00e438209bf5b279c47175fd53c4cb9700fa6f5f31aad9b026a7daf4e38ef1ee17bd884ea1ef90aa6f62f346adf1450edaf62b05fd0a52dde259cdc2baedc7974b7f05bdb26f29d06e134ea4e7eaa12e38d6b98bb1ea03b71b6c2b95a25a6d46e17e72adfac605be568e034311aa826ddee63eed250d96234de5de6395b8c0455c9a9d83bc49546f1543590ac1f6fac95e3a6708432a873ebd7b008faa52682ee0b1841f761c27fa511fe4240e15fc732a35f6399d18b196546dfc002f11b1da1a1c102f14d4cf86f35c22f0b28fc7e9d709e585f4a27334ad2c3fc804670ae583aa66d067f1397f469ddc1df9775bcb483bf7cb3a7e483bfe175c5067fbf85d9d2ef74a92da02d7d5b279c1711af862d221ec424bf1656f277b0f2e1f7e9d87f924cf3bb3afb174b1ad5b489fd87596c2bb9e5ff216dcb7f5d58fea424961f6e49307d4c7c0f339e37c21acf4398f1fc31a4f13c8c25d33f699229dfa92948327d04d39aef6a965025e2139717888656b598efa09b29932daa4bd9019d9abe8fe9f1a64e0fbe584730f98f62f2df0a193b3fc062e72f9ad8391030767e8869fd572c76781ad92eab882a3eaa5b1692c8d4e5ec475820dfd604f2ce11c102f91816c8bfe902c953a0726170ebb3f1fe7f4182f538f6e577745fe6ad7d772382dc96758c735b565b59ed24882a1674c6ca8f310dfeaed36090568315e2af263135ddadf5673621e927982eefea741996a62e890bdd06d1e909ccf0fea131bc270e0966784f6201fe67c83ce1294cf0bf420afe2926f8bd90829fd609e69cdfd7707e3320e79f61c23fd008bf776430e1cf6048fe1d12c9b33ac13cf7f9301dc1491a43cfe904f376e87f5a6ef8daa11fb14cdaa1cf63d83fd6603f6d5430ec3fc702f10916884f330ac42fb0407ca609c4630103f10226fc738df077470713fe4bcc30f9bea209d9299f6855cae0fa2355a28ead32f21c36511478bbe4ef78f7f66c71e6163f53c4ba0a0da2d477b3dc46e1fe9e2d32666f7eb1dba9c467caeef6d50cd4777867925bc4d6b464e7d92233af0ae835f82b8cc57f752cf8821f701133b796e915b0de5cdf13848675cc9ba2eaeac7754e2521df793ae894805f6306f33f8dc1cc0d68302f6249ea4b2c49f145eb8227a9df6081e0d5ea8421ab8081f82d16d3ed629a98e65ecafa2ed20db27395fbf7f2d685bbf64db238cd497a77a2f07475bb553dbb8e4f01f5c23254176afcbd2661574d9a54b45568580f3a605dd9f5b2751ac4be5ec2e8b5d7d1e3161044facb98f40e3ae9ee2c2e9ece723398fefd0a6664591a23bb6a4c3023fb1d26bca346f87b0185bf8a51ea140b57a1780d13dc39a4e0df6338ba6870bc1810c71f30e15d35c2d78f0d26fc754c78378df0030185bf8109efae11fe7640e17fc422b3872e2d35b1f4165808377ce436c736c70d48993d98f4272c8a7a6aa2e8938051f4672c8a7ae9a2888fa4278ee70509cc9bbaeff1f2bb770c29bffb64547ebfa5fb0eef1ae89b4e3eb21f17fc170c583f1d305efce40602f4574c7e7f9dfcae8c692d3ac817dfc6be3840f7c5815a1358292c5dad33e3dd0966e97fc33419a8d3844be07dfa414b8277345fc9150bebf36540a29acc9ece6eb2fad18341315e68c5c310e9433b823038c647100624842ce9a6ab08b9bfebe2274b3c98b829ec112b4fef74d3f0e7db25444d161e35ef6206305467007cb949eed7e366f075ce5f6aafeeda8086f70fecbbc374dfed857e77972c04827cfb9f3a731c1eb539168baa7b4306e638dc4134ce87682a628c2310634cf675cc18ffa5e326368ed81c2137b8d96d9958aab1d6b9b25a3488d4f6e3c1991e120bba7af64841764c42c833d50fa3fe9e2ea5f0a1c1ec58c8a1c1f731c9a3c24afe00933c3aace47feb24f3dad69858f84d3f3ec432a5b1219b42ffc1788c0bcbe3234cf2f8b0923fc6244f082bf9134c724e58c99f6292278695fc1926795258c99f63463739a4d17d81a93c25accaffd549e6758343d35139c96641ffc3549e1a56e52f31cab92129b318a2725e58956398e4696125b7c324e78795dc1e935c105672079d646e7385216d2e0b53797a58953bea2473532a0a69739d30c133420aee8c419e191272170cf2acb090bb622c668764d14d2798b7fae6a423f8755c70779d60b1ff4f2b54617a60a00f0b0bbaa74e327f7e5e3a3c926dee8b813e3c24e8de9869cc0f691a7d30c10b420aee8bc5dec2b0b1d70f8bbde290b1d71f8bbd4521636f0006797148c80331c14b420a1e84c5ded2b0b137188bbd6521636f08167b2521636f2806f98890908761829787143c1c8bbd1561636f844672aed81793af3e17bd9b756bec6d9cbc3765653a71310e2776081617abc2c6c5489d64bededfea74543e07179c8dd9e59a9076390a137c6448c1a3b1b45f1a32ed8fc162af2c6cec8dc558948764310e13bc36a4e0f198e07521054fc0201f1516720ea6f2fa902a4fc4041f1d52f024acd9724cc866cb644ce30d21359e8269bc31a4c687621a6f0aa9f1544ce363436a9c8b09de1c52701e86624b4814d3308d2b426a9c8fb50cb7b642cbb000c3511912472186a32a248ee95816571d368b2bc240d7b402e81998dadbc2aa3d13537b7b2ba83d0b53bb36acdab331c9c785953c0703b2a31580ccc5d4ae0babf66198e49d6125cfc312f9ae9089fc704c707d48c1f331c1bb430a5e80093e3ea4e08598e08690828b31c18d21052fc2ecad29acbd2dc69a53cd219b534b30167b42b2588a093e21a4e06558736a6fc8e65409167bfbc2c6de11188bfd21592cc7589c1892c50a4cf0492105afc4209f1c16f22a0cf2292121afc60abf535ba1f05b83f1382d2c8f23311ea787e4518ae5456784cc8bcab00aee99212bb8e518e4b3c2425e8b413e3b24e475188b7342b2384ad7493ad2398df1cd204c588b6583ecf26cbd6ed27375ccb4ce66e7c5b8774c2e0bb21e4b26fa624e68eb75d1ce63e7fc74a29d6b8f083e5a27989f5e104b7470553f411c5c8fc172c90b5b2197dc8009bfa815846fc472878bc3e60e9b7492f9f397a4139b4986938ed509e68ede97a62378306e269b31c1978514bc05837c7958c8153ac97c3ec415e9a89c643ec4564ce52bc3aa5c8925c6ab5a293156e93ec017dcba3a1d26afe082ab31d8d784845d83c1be362cec6dba022fdb398df17d39dbc29b5a1518c13ca7af4bbb10bb5e1462431242978e0e58c1b41dcb816f68851cb8168bfc1bc346fe7198da37b582da3b30e137b782f03aac66794b4c33716391382d758ca58c2d62cb5b966459c5f8a238278808de21a37eaa98e251e2dc5feddcd9254c9a5fd1d75f7483d8fc69685adcf0eb993b5731d8baea3bb150deaa0be5392da15cebd4a478a27313e84ef177895c80b741cc8974136849cb938b5b56418a5f67a141f22863ee2683c5ac59848bcb8da7e749e0cf07d3039354cef8e4906de26e3c539858fdbcd73972824e04da85913e80d913fca21ba602e71d9756bd93296e766ca341c4b91bda72b9f2945f5bef5dfc7a6bd9533d16cadb74a19ce70b2564ee867389dc70af4263f5f13104ef244b2bf0ad2021db8d85ec765dc80e4f2bfe168819c5b54c4d98091f73de9d20613b1e0bdb1dbab015f9c2b652c4ce7619327eb6b7cd42d28085e44e5d482e8a383ff3dee1eb6ad43952f7313e93d55baeab318095437678287859d22caa1930d7e315acd6cbdb1a31ea77e9a82f482b6dac60ee92f226e46a4d58f8eed6856f05a155f1abc78bcff050b9d5e15af1e95aa7765f81e62499c46a3316ea7b74a13e2c69a8714d4b4558dcf565dc30aad2985fad948412d345e6b1b9070bd7bdba701d1db8665726eec4d7ed7412dc6b6b5af28106a73ce04d9d3035c14ce2f9048cc757743c964752665397e67bb1307f15aba704b30165c37cbd824a2108c673508b0812b27d58c8bea60bd96c24646b45faac937513b7a9ad5a2deb642aae4a880d9a36ca7e2c44f7e942b48430f755b1ea4ec7dfcadc155e5b2fa4276221fdba2ea47319d64baecb29e2430057bfe14c9689586e10ada14aa7c4ddd78aa13a090bd537d26913c47f17d610d68a5868709ee5e9705b92d22f5e46eb85ec642c64dfd485ac3865ce995eab00cf4393b55933cd294fc1c278bf2e8cf9487e82e56c5eaeb296b9ab5a736be44fb75e2c9d8a85e0012c47d4a7aac4d414bffb35de87d3da25f6695888bea50b5135712ba749ac84c5d7e5715b31eb44aaac6dc9215ba7dd9e09a7d3314edfd6715adb66adc1e484c2733803e3f0a08ec3423405707bdfea3ca4f22b7735a6e4b5806852c4995808bfa30b6149c010aa1d2bf531d216e13d0b0bef7775e12d25b4ecc60cea44ad41e06c8cc0f75aabaee4e66d0b404d893e54e760a17a4817aaa501edd8dba2ce041b3e170bebc358af51d0185c229e48b4467ffe9abedc20e13b0f0bdf23baf0cd09519b6f12252f5f70a946b6bdf15095273c1b244ce76361fa7eb038f3db27dcd524552aa32c292fc0c2f72816bee0b5dda5b2cee4dde5a350c96becad559bbf100bdf0f74e11bcb92f7d4963b8429b4bc08d3f287c9fb5b83c4425946b140697b1763a1fe912ed4f89e65e52dee13308ff0d690e7657fb3b6de99d998cb2598de8fe9f49ec552b5824bc4782def11ae132b882f663bc5a272897d12c96220f3f6e2a558781ec76acbc9d308efa158236a908d9a3a443ae33bbce655d38a21bc0c0be18fd3e9b7d08fd79408dbe3631315b2df3031bea21cb3b91c0be34fb05ec374fa66d20965663946e621bd020be913ba902e4b2b36fda36f6e3a54e16ecb78bd120bed93bad0ae4f19afb4a315d4e3185761349e0ad6b795e855dd5635ccabb110fd14ebb349b7b72e790a4ea7cd13bc5d94b99d5f8371785ac701dfc7116f35a825855bcb16afc534fe994ee3f12953a63786562dae721f93d6a9b15c8769fa8c4ed319496a5a7e4b8fd7dcdd82deebe3a3482fd7636179361dbf32ac9c5b6c5819770316cae7b031ea60f99cdb264bbc9be877a05637c7e33351ca02d1efc2db1941c27c2316e6e775611ee78b59ef9bd4a9e9264ccf9f63234458a9e8d779a9d439dd5a45a63d35376321f8852e041b195d6faaea1b48369e022d30dd94a7de0942e5168cca0be98cdbaa2f06c955bc906129ae7572935bb190fd5217b263da38be83c473a629e00046e457e9b49682d6b5c2d797338ffbdbb090fe3a9ddcaa58c4aa1b834da017ccb582225698227cba9c8cbf152404b7632178317d6f4bfecd202913860fbbde5a31740716bedf60bd7fc96b34dee6047e1dd5e61078fac23636489626332bedefc442fddb4c7a9ddc582d731edecadcb65b256b6b2ff3bbb010be944ecad313ceac9e90ba85d3c9f9178bf129508b8514b70faf5ebcc36b85b9a39c5bb1bc9692616a4b8e3f35ae74f0aef3efef746283a789f296bc9d4f014b2ee165074ec776ccfd9920b726720bc4580df34f312b16f2eb647ea3ac75aa20e47aa3f2a973539d5a60ad784b4d964b150a5d29371594733074a9c3b40999fc1613bb1e42590ee9d19cf4c116d25778ac0e93b1da2e97efae129b9ca135a5d6e277fc6bedf5363428812c4c1d3add5d01ab64ef418caf75b0597cc6dd100f77f54ef965ff42adfe2f1f2a04a8fa604a716b4116a0133744989beb6ed7c0dc0ecfd71c999db2dae5f1187995121b9f1eba48d4fb763be05cef2055e660001bad40f866cc43f81a2542be879f6ad62e13837e5c80b739ec6ab6c30a60f777f680fd9e12587fe66e2f96c73cbf1d9bc1f5eee681fb0325b8be1a705c20df089c0fed358bab555640dbc23c68af535b5b7cf25ce2fcae951e62ca77c0b53a1bc0e574f7c0bd41096ea0a88f36a65d2cd800ef2a5028fc91125e37905457c7f5c0d880a97cb887e94f9498ba004c9e5ba00d881e1be821fa3325a28e0251a3557954871e1e9c3729e188ad045aeafc6aa0cb1d4c2f15993edfc67a97c8e6d7c8ae201b00be0b12e05b94003b8304c8d5e4637f3600eadcd703f417ea1c6ab5e86cf716b9b0a386f520b0a1bf4665436a8e820d805eece7017a9b12105fc24d554117b3bd22d4cd2df526eed454256a55a5c2c2aa84bdd5391fb40122ff5110ff460991ef7c0ce1f12e1e3e47b4ba6535c52acb2ba7fd41a7cf3b94287bc83c4dd9db3e5962ba931f6d40f502c8dbfe1e55eb913786e0f8a96a10d95433fba49307ee5dead623040727302d10ed493ea4e14dd5b201de49a0a3e71f94f0ba8312d59ba3e2ce9eb201d4bb7d3c50ffa4ee7b5d2992df0edf32188b9cc71bc4976c00b6a59d07ec5fd1f686c57b845459969fd5814eebf7e8fb5e7955c29d6e6f7345e3e92c0fdafbd4d6b6588c18358b8f7bebd078eb12353a75b85ae77b36807b1380fb80125c4f904c6dede1e76e090ad6bfe9c793dca1df7a21c6ee76c05c60651f52f79e953ad08a59fa4bbad900f03c51c9ed94e513eef717ccdc7b231875dccfa41773dbb4bbc5d52659fec6f99d8c751e314ef3ff40bf919c8cfb377252e67339698f79e6041eafcac9d0f92127ad5a674ec80e8b9c001e2d3981b2c09cb4eb3239810af09c8cf2939c404dec9c4015d89cb47c3372023924e4046ed9ea74c687a07312067c7292360773b45df839da4ed91c64bc2d27c970650ed2039e93a2172927a3b119cfe151efa898c71d1e3ffaffdc17318ffb227ecc21f0d5e1f98f5b57f884baaec02dc4753de5f977f2e531a63925b64f87e1093ac46fb4a0ea043a6dbac4d51a7aa613c04c6a0e59c03fe0539370e65b897306c0f99949380bacc4b911e0fc3c0a9cdb50a050fdcd6c3a2ba2c3d99d0ae7579887f30b9370165a89f32a80f3bf26e19c6125ce3f009cff3309679195389f0638bf3409e7342b71ae0238593b8370165889730fc019330967be95382b00ce76943807489c95b259e99f3c0c27a6e6d181cca202f97700b23d25c811cceb8048b733883fdf209eb5af2a3f1f80ed4009762483bd43e9f78eda0cf71000378b12ee4096bcd909c5f1929e0c65272a949f03941d2951f692288b7c40dd7e43fe907d76782f80d7290a7833a387f70a15bc0700bcce94f006a528c3e3133169db9c2c19ff0dc0ec6212cc1916c27c17c0ec6a12cc420b61fe15c0ec6612cce916c27c1bc0ec6e12cc7c0b61fe19c0ec61124cc2a10b32987f01307b9a0493b0554e06f36500b39749306d6ce1fc11c0ec6d12cc9916c2fc0780d98712e62409b3ce79a84e1cf53b5c06dbf1943033e84785bc0c0c0af7a544de5520df2e7c7d5cdfa36d029e7dedf2eec04afbb565ff50fcaa8c84d6b79f0a6535b0befe9428272424f80a21ccdbb47ca1f39f5be71ed183d9cc922da8480a9b2c773d14c01e1085dda65754d9887218c8020652a23c449305a4bb003b29da73a8d08e04563a88da4a1708d7ea7ae950cad7c7547b5c72d753e566eb3a2fdb57507500563a9812a5f2b29fe6fcdfc9d4202a2fdff9d508ba91c912fa8900e1902810ce38e8107e07201c4a89b01ff3c62ad5d1bf259fad6392df06108745e1e191bea336e1800619cebea090196e124e528719329c7301ce1126e12475e722c35903701e4289b3774bb99d17fdd0ef502a7ccf82bc72a439fe1bb32c2cbb07024bcc8e022574e05ae154c297caf95f35ce4b7ba328c1c9503601ab1c45df510cbbd836b31d02dd4231d36c8714c5f795ae7644242c07604112ef01608e8ea2fddd2466a936b67409ab6978eaa8eb3d9a46396e4986f67a80764c14031ae9fa1213e69f649ec4b301ccb126c1241c1d22833903c01c67124c425f0f3298d300ccf126c124f44222833901c09c60124c42ff3832984500668e49306d9cca5208604e340926a1af0719cc5100e6249360128ef390c11c04604e360926a17f1c19ccf100e614936012b680c8608e06300fa58499cd12fb8f82791c1196ef641e47d3409fd2d4b6f498f3771613e6a2645dc5e380ade69a0493b07c27833915c0cc8ba2df9df776ee616ab7d088067ac9f00d00f8a651e21b02f0253a727161de0c5f9b47ce9f0440f3a3703ec83be89c0f8e07080ba2405874d0219c0910169a5d1d22ecd524ab0e1582ead0f4a8dc63bc2136384a443eb8463668b11fd8689139aead364e029c0550ce88aa144fb5c8aacdae5bd301d099262dce33ddcaae8e3b01ce5926e1249d594986f3028073b64938675889f31580738e49388bacc4f9038073ae493849d72726c3b914e03ccc249ca40bea92e1dc0570ce330927e972cf64388f01380fa7ae79a6b7d941a9508d6fb74058f35c4205146ea1333f8a05a40a7cedf708ba3dc8e6a11d07e02da084378ca53bc52f7ebe2fe1d8cfeb54505780ce8e85264225f4f12083ba1c402d36112a61370819d46500ea2213a112fac991411d0da02e36112a61b5890cea100075898950097d40c8a0f60750979a0895707c9d0c6a2f0075998950093d40c8a07603504b28a116b0c4a18ff8c930c5ccdb91ca0d48fcfe56f19bdd799b84958b66821a03208c84295491c007b654241c61ce94431bd79aed0dec79b9b953bb085b5f64a3a43f0756bac29cb5ea48971020b3d33300cc9526c1b4714de43301cc5526c1b4714de4060073b549306d7487680630d79804d3c635916b00cc234d8269e39ac8db00cc529360dab8a0df0a00b3cc249836ae89bc12c02c3709a68d6b229f0560ae3509a68debd99c0d60ae33db97d9c6c5a4ff0bf01e4589b787c4eb2e0d54275af1aeec5acaf56cc836ca6300dcfaa8d7934dbfdbc3c6f56c0683fea4a3a3f2675e297a3477f87a3c1739af35882fdaeccf3c18d8ea3194407b264de48d74e8ba52a16b07d06d68cb690af62f1fd017a0dc18c55c4dbe07ebc133577335c0b7c98c05ccddd1a3ddc262dd712152cb24db79b00a1438c79ab4182a696392cc52db019c9b4dc2996f25ce0900e7169370165889730dc0594189730c4b9c2db798ed65dc75a199297fe5d5ceeb558c37234b0558771f83ba686a9c7da820f70185d55693fceca75bb95add5d0067a5493849b72025c37921c0596512ce1956e2fc1dc0596d12ce222b71fe08e0ac310927e9d83a19ce6500e73693701658897337c0b9dd249cf956e2dc0070d646d5d759266a95cd8ee4058cef9cb54ecea3ab12f3e8aaadeeebdc08801e678e5fa78dee0a1d414b694714e3986a71357766e756d1d4540fd9be26d31660977551ccec6c83fd61c8e0cd01f0769aeb614c5800910db6dd01d0ee8ac22e67446f9764f0ee07f0eaa38037eb204ad4cf0078bbe98b97ed9a85aaca1c2695ac92295f47be6c00ef7ab3afdad30dc03cde5c7704c20e63b244de0f54831acc59a9ce466fe21c60a58d668c61ea366126444bb6f84529b0d22693468948dd0ec9f2d34300ce669370e65b89b304e0dc13455332bd5679be95fec5ab00cc134c8269a37ff19100e65e9360da38c3720980b9cf249836ceb05c0a60ee3709a68d332c170298279a04d3c61996c500e64926c1b4b14d341fc03cd92498360e592c00304f3109a68d332ce70198a79a04d3c61996870398a799d4a0241db6206b507601384f37092769f5880ce72c80f30c9370923ac990e1dc02709e19c51e46d3d9c1b687d1b5cc437856146edaa9bb8a13a7bb2c7084368879c0a4135fce8b11415e0fecf46c4ac82324e43ae7210eb85afac17bdeeff1d90074ec22044be6ff3e07803d278a59eb0aacda5c2f7e9c335975cac69ae94480f7dcb61c928b6c31cafd5428df02f9ec79942847099425ce43a502189f13bc47beee59eb66b975d442b104e50e797f8973ac76c4122e144057530580cf37c721d1c664ff2140790125cafe2950aa90923a340ca62af53783dcf342b3975421ec1d255b52652ac07b91b9ce8a84837564ae386f820ce0e2283200acdcf73200c27c942c03780760bc847ad19f35b245af1cba4b8465f2646f5f59de1b80bb340afbcb6bb1c12ad12075e70cdbbe94c58300e365d41dcb1cd822f1e136dd32aa840a663e80797914f54bb887bbbf9969779fd35300e5155174db151e74dd76d500e19551f428716b5c2ccae866a104df1fbb5224f2d5ec04d151d7e0dce315a4ddcce6796d0500ec55e67821dbe858b304a0bc3a8a591b85be5690cd65773d80778d49f37fa753b6c5c9e6ffde04705e6b12ce422b719e03705e6712ce1956e2fc35c079bd49388bacc4f92d80f306937092ae334786b318e0bcd1249ca40ba391e1ac03386f320927a9c31719cef500e7cd512c77cab7723e78963b5d00f0dd62924712e9764d6438078141895b4dc2493a37830ce76100e7019370165889b316e0bc8d12676721a05aec63d9c05c172ffbbc8b3a82bcf1764a5c1358900d4479375cb31009370ae5d422703a584005fb5000fb8e28caf169a2d273b0acf2f11ac07767147deabc437829e39dbcbc2b789be8556fb0baebf71480f02e733c886c9c3a3d0014347753a21cc0f8c877b51cb8757ddcb0f147c27d31c88aa0cec026ef31d7c9c5c6f566ae0668ef3567fbb0022b67a4ff12c0fc8a49306d1c38fb1580f9559360da3823fdc700e6d74c8269e38cf49f0098f79904d3c619e98f01985f3709a68d33d21f0730bf61124c1b27007c1fc0fca649306d9c91fe4300f37e9360dad8b0fc2d80f98049306d5c93eb2500f35b664f50216c13914d50c9059d20dfa6ee0449d69fe4aa5e24fce3088b23b23d802b01c807e9e74ec683747b337947c72e7684e877df9d7414ddc62d43db838ce03be638bddad8dc9c02507ed724ef8ee994451499657e03e0fc9e49380badc47903c0f9904938675889f34f00e7c326e12cb212e72f00ce474cc2493a8b970ce73a80f3fb26e1246d2d91e13c15e07cd4249ca40b4293e1ac02387f4089939fa8c9d1f68d52f602987e6892d54da7ec7327b3badb01ce1f9984b3d04a9ce7039c8f9984738695387f03703e6e12ce222b713e0c70fed8249cd3acc4b908e0fc89493849877fc970ee04389f300927e9faee64388f06389fa4c4399cc52f05c93934333e7ce15f00d23f6980b06b98cc29f60b80f5294aace37d58b7b24447c3f45d1209519355f53781618e9f46e1c23d931d6ccba23c04acf5e928dc6595b5360afbe359c01209af5a3b0867ef52bb45c03a7f668e77bc8d5e745d01ca67cc75ea261c7327cb439f0319c0b351ac3933cd67ab366fb33c17c07bce6c7f10421745327f904920d93f1f45851fae20a74be27697f53f05d6fa734a9c637d657d1d83f3ddf47b182c952f47b670f9382acc2380d5fec21cdf101bfded8e0016fb4294bb15f0845fe59b2777f03555df07787f69d26201a4dd7d6438db8384ff2b937092f64f91e19c0e70feda249ca4bda76438cb01ce174dea3d9d4e39e590acf7f46b20effc8d49380badc4790dc0f95b9370ceb012e7eb00e74b26e12cb212e7cf00ce974dc249bae61719ce3500e72b26e1249dfd4e86f30480f37726e1245d428d0ce75680f3d568d6556a833e51b236fbab00df6b517428f30fd7084b54b277c947ec831703f07edff633e0542163dfe05b77d0daf98329206d1cc5fc37b0c8d74d0149389841067226b0c8374c0149d8914106321f80fca329200947d5c9401e0340fec91490845358c940ae0620ff6c0a48c2aa3719c8ed00e49ba68024f4ea2003b901807ccb149084239064207700907f310524e13a3464208f0320ff6a8e379c8dcba07dc93c946f53b7b0bd15b3b9a28d82c336b1462c7fcd3e97ad9e00dedfa2d807d07325d43bbe948b9e1e8eb64608db49db503c872ca70460dfa1043b86f9bd8b5c872dcf8f980b7437ff3cd8369a9f0c72d1bf473967c305ca5db87846b0485b38d9bb5ed2d100ebbbe6b86cd9b878df58900dfc230a576d58cea79fc312a225cb6117032bfd679489bfd651621df3367082c223f3d7dc4f85b50260fd57140316d30fa2d19ebb41727f2f8ae525d3abd64fb372adce3c6089ef9b04d346dfe10200f3039360dab85bc17800f3df26c1b471b7821c00f3439360dab87ce45800f33f26c1b4719ee53800f3239360dad84d970d607e6c124c1b772b1805607e62124c1b7b918602989f9a04d3c60e8f6100e667264d53212d82c8a6a9f400383f370967be953867039c5f988493743b27329c5b01ceff46e11bcc877b0f9ebdd30f671ebeff51e2ebcff812a6157299292e6a97f3f876e7f17ad1450c77b9b40f6316c0f82525c691cc5b17c11dfbd9eca8dbe8a8532978f0a1e1058c4f91e6fded158e009ec0ab98cd9bda1e09e0f27d1e0c5d6b86b0124f36f67e33401ba344db3f4561a4424a3a6031384684f1585008b5a3c498adc1186cd519c21e25b25567a600bcedcdcd00080738c83280174106d08112ed28817699b0cf52c64727ab657155254429ef901d2202b81d573a7fbbe29738c76a476c95858557570038cbecac81704c892c6b5807b2868e511460989f48b1c81088d7ed1c415580fd135869274a8caaff09d65f5563c06b1ed85d5fed0f6076a68439420333750e6b2fd885006c174ab06a75d90276b0ad2e7b2540d895126130bf3a1b47e0170394dd28518e0e80b2ccf92617d2c4563b7fa90e9546da62692455b1f42f80b83b25e2212cdebf6eb7e88dda9ed4666d1c673a0254977a50020dbee4948d9b8ede08ecb3a749380badc4791ac0d9cb249c33acc4f902c0d9db249c4556e2fc26c0d9c7249ca42e0f6438e7019c7d4dc2596025ceed00673f9370e65b89f32880b37f144dcd3cf1db3df201bd32e6b6e7ed6dad1f0b100e88a2a9999e4f938dfec97d40b57d6054d6e83637b9a0bdd21223e8f8789d0ae17781350e8aa2a39823ac6e99aaad6edbde7ff428c03838daa1b8837d97828100ed107347396ddc96ec0a80766814f967fe41d7713c06201c4689d05b83b30dfcecc8c62947007cc3a318604bafdf3ddfca9ef70300e6089360da58b7bc0dc03cc4249836ce7dbb05c01c69124c1be7bedd0a60669b04d3c6b96f970298a34c8269e3dcb7cb00ccd126c1b4714cf26200738c49306d9cfb76098039d6249836aefef15500739c49306d5cfde3110073bcd98eb084099fac81d90174114f88a27f735a8bbd56896e39d7d3c8f6f970df03569a63d230da74ca1c946c18ed3e8073a249380badc4791dc039c9249c33acc4f906c039d9249c4556e27c1ee09c62124ed2a9596438d7029c879a84b3c04a9c27039c534dc249da3622c3590970e652e2546b74e6fb2af5360fa6d5027879514c1de0ce088b185f6b61b76f0ff532d1f2a915036df1ab30345aed7d940d104f8b22b963893d7111201b37a68f81e665be493849fb3cc9708e01380b4cc249eafc4a867325c0596852d93e9d72e08dac6cbf07e49dd34dc2596825cecb01ce229370ceb012e7ef01ce1926e12cb212e71300e74c937092ae9648867339c039cb249ca4cbfb91e16c0438679b8493d4a5860ce72680730e25ce89cc3fa19a373eab1c1edc415b85d3f38ac7463b17387f3588013a52a7eeeb6344c0b7819ae95c4ae06ab7426c08393e67250349b65be14860b9879902d2c6edc3fb0190f34c0169e3f6e1270190879b02d2c6edc3270190f34d0169e3aed7e701900b2841e6f94af76674c6103e71abd87962a7a34fbd38e3418da8ac3f8faaac3f0a94f50ba370174bb7538f707c89ac4bef7fc0968b4d8249e87b47069301cb5c64124c1b3b9bdf0396b9d8249884d57a32981f00984b4c824958912283f91f0073a9493009abf764303f023097990493b0664a06f36300b3c42498366e79f209807984493009e71293c1fc14c05c6e124cc2b9c464303f03305750c2c4573e5ee2fcae65eea627e58e002ed8fe958fcb01d8959460dd8dc657380f540a9730383da6cd16e7279b34d309605d458935d8125536ce7cef049a98ab2951865bbd86b0bc275bbde6ebc04ad7983d738eb0d54496097406967b2425de7ea0d0da230a25ee76ebeed015d1bcb9fd541037031b2d8d629c1e96fc5871455ede93d9e47080b32c8adc3431c9a7939fdab816584f90dccba328f3b1d1a6f832dfc6653026022b5d1b45753f93329fb0bf9ecc462f0260d7990ad6c6edcece05608f3215ac8d1b491e06c0ae37152c61ed940c6c2e007bb4a96009479ec8c04e06608f3115ac8d15ac2100ec0653c112f6ae92813d1d80dd682a58c2310032b07b01d84da682b5b1e7aa0c803dd654b084bdad64604b01d8cd9460d56accd3591bacc64c866f1fc0b7c59c3e001bd7c82b01282ba2e8f84bdf1bca46b7c7e1a0776aab493849572921c3b908e0ac6ccbd17d7f679f8d0bb5ae15303b65f9842f49105e2c2c87db4e25f3561399ca9632eee8edae3752e99caf10657513dbe224d60dcebf6031b0c9f9a7bb1e134bc62c766a75bbc5552eaf4ac8dee9dce59a35b2bcb1ce2355dc203a4a83c81179f502877993f30cdf3f997f7d1f2b63ee6a29ab9ddfcab7a05920c9114b217a9b56f32ff06dacb7b30611e2f8d55472629d0527774b181e2e0e3047eaaab6892991a544ad13e60aa14983f34c07f11d373de6c47a8033357c5422ea385c0b1e41b1581f19275c9f95222c154e182ac4b1bce5ad5cbe9749acc8f9e5d696a6b6d493a64af7fc9df24c5d4f2d93c7487269d51c7b4c9f0eeb5acd965285c8357ffe7e8d7067a816524b52863475f870bbec9e245672c7f3b83898c35fc3e35d46bb30d341b16ece5f6b9d987785f34d7c1a9cbfb95273e6b56359ff0f5f945f4b801b0300 + serializedProgramBytesString: + serializedSignature: + programUnityEngineObjects: [] + networkCallingEntrypointMetadata: [] + serializationDataFormat: 0 diff --git a/Assets/SerializedUdonPrograms/fc9d28f06ef4d0f4c93a11b013619190.asset.meta b/Assets/SerializedUdonPrograms/fc9d28f06ef4d0f4c93a11b013619190.asset.meta new file mode 100644 index 0000000..30c8436 --- /dev/null +++ b/Assets/SerializedUdonPrograms/fc9d28f06ef4d0f4c93a11b013619190.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 71c71b362e15f0b46b31732331ef15c3 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SerializedUdonPrograms/fe8a97c49553eed45bae16a0c8aa1585.asset b/Assets/SerializedUdonPrograms/fe8a97c49553eed45bae16a0c8aa1585.asset index 4feb35e..d830abc 100644 --- a/Assets/SerializedUdonPrograms/fe8a97c49553eed45bae16a0c8aa1585.asset +++ b/Assets/SerializedUdonPrograms/fe8a97c49553eed45bae16a0c8aa1585.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: serializedProgramCompressedBytes: 1f8b080000000000000aed595b73d346143eeb58765c02014a2edc66e0a930802502c33b8416d2690293d879a18c31890c666c37631b08fd099dfe217e078ffd277d69bf737695c8d24ac289c525208f76577b397bce772e3a2b175cc2a5aea3d8a4755aa62ad5699bfea01e5acba8bbf8e9a7a0ff31f551bf40d9c4d875ba94b192af9fd422ca153c0d688895af690b755bc637c8477b056b7d3c716f0bb78f59aa884575ba4f8f688d16d45c06894d5934307d8ae552d328efd13b8cfac2146fe2cad0028a0d8c0c64ac0ba683794fe8a988d5c5d816d6f4a9039acf85e2f46d5e2b3249e5987acad4cc71c9dcfc5cc05de175dc769448f4107b3469875c1e5457c7803e58990d3a932e15349f409fb71d42bc1d10b0485e175c87748b96ac929f553321be97a56c62465b8896e35bbc8f6dc1cc75f0f3436a1ba0ff81689d15d7c648957e43cdab9ed14d28e24984ca26b6ed40f53ed550ee08bd67603b3e334b24567174cd3a686a0beca227007407cf1de17043ca37c2a92fdcafa06f28fed08347dc43bd2bbbc565efa36ddbb36620b3f36837c4a47e6dee819aee431ae6de15dbfcae91cfa11186be54366e5874d947d45f314d7cc75007194702bca6715387d891be257225deaec7101c5fc6b88476fbd678dfa1dba9b2d89161759f1709f6357cedc33ffffebdf8fbb2332ada2d72e595712143b4346099de15351fa3902e82e3143d66340abfb2c1cfa6ac363e21fc7a5e5be68daf8092bc9946152000ad61c263dc6d617b407725f6bd153619ae16c66a86fd98a63c265b16b0e3afd22c8693e02ed8e09efed47067c79734b8a7f7e4da879b2f3b82950404b378484270ca86206fa29ee68a608d564d4e5c35ed066a1f3386c27f1d6b74a254ddeb5f15aa2fcdba74547f00f73722a8da113d26885e4679789e92502e5a50f6d819666c6c56226cf2c404c28e8d305bd4718b55fd872b46bc924cbc94c4f5095b84581a41308a5f15ed0690e2234743a8ed4aab31a2bf701c888e6d4ae4d94e80a78c9f52accb9fc546fb58198e552e1b84f2c63836f0de5d780ee77b3588f95cac3cfb10319b7288684d2c9fcc924247035edf92434790a3d8a4cb962939772e1b89025a409a9570e4243dc95a3547582ab8ecb7eada01ad299b8b53bcdbd4c71e44b3de9e9ac09a7c790001f65e762e0ff78a09696df1e336fd890999fb3d02cd57468fb6fd6e088120e99ac0399a8dec2e80da96d03ec08f2f76f908f15f266675074ba8e2fe312b116917ec712fd3db8efa0b87ea2f8ef3d3617bbf926933fbe1d71e363d0ebf3f7ee391d1637cce3008a52090781c48e6f2f6f6a63551d7afe0c87e87394a5546fcfed8c7087310df9f12dfd7d0cde709dd5cc8e86d10f2187fd2d3df747303d2f2a57032401643402ee409e47103246fdcc294c61e6d4ee87203cec90b380a01b7982770f306b82d13fd86919c38cc3cdb696e5056f282d2094179364f282f1b28f581a02756d897e3c86bd43dfad57cf83d6a001742009fcb13e0d94427ef99295f5f84547464d24c8f83f0798a657569b981ceea4e19697bd873553ca609ea4da9f7333c9789a93b34de91289d6676fa75212c50444b9d8969691229a54dd2c3a49733295a71d91c8eb4fc1749ff5b6c5ec56567410e1f75685e13f7714aedcb1fd77d99e3fc0faf558946b41f0000 serializedProgramBytesString: - serializedSignature: 67432e5044c01c504da25db96a6bae3e24866de73e7085767f63f53533bb6c745cdb78c87840b12926a9093ac38ace688d277a3b8e1136d8d9fbe20367d33708 + serializedSignature: a872141bd2d5082a4a006e71a4af8285deb8cebda20a8605341b6edc818fc62f3b9f8d165a31a4340fbec63fcdad03861acd1c311735884de28b3f3902917f03 programUnityEngineObjects: [] networkCallingEntrypointMetadata: [] serializationDataFormat: 0 diff --git a/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset index 6590df4..84d0748 100644 --- a/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset +++ b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset @@ -377,18 +377,33 @@ MonoBehaviour: m_Scale: 1 m_AtlasIndex: 0 m_ClassDefinitionType: 0 - - m_Index: 2030 + - m_Index: 961 m_Metrics: - m_Width: 64 - m_Height: 9 - m_HorizontalBearingX: 11 - m_HorizontalBearingY: 9 - m_HorizontalAdvance: 86 + m_Width: 57 + m_Height: 59 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 59 + m_HorizontalAdvance: 57 m_GlyphRect: - m_X: 10 - m_Y: 10 - m_Width: 64 - m_Height: 9 + m_X: 296 + m_Y: 90 + m_Width: 57 + m_Height: 59 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 963 + m_Metrics: + m_Width: 46 + m_Height: 59 + m_HorizontalBearingX: 7 + m_HorizontalBearingY: 59 + m_HorizontalAdvance: 57 + m_GlyphRect: + m_X: 296 + m_Y: 168 + m_Width: 46 + m_Height: 59 m_Scale: 1 m_AtlasIndex: 0 m_ClassDefinitionType: 0 @@ -407,21 +422,6 @@ MonoBehaviour: m_Scale: 1 m_AtlasIndex: 0 m_ClassDefinitionType: 0 - - m_Index: 961 - m_Metrics: - m_Width: 57 - m_Height: 59 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 57 - m_GlyphRect: - m_X: 296 - m_Y: 90 - m_Width: 57 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - m_ClassDefinitionType: 0 - m_Index: 979 m_Metrics: m_Width: 50 @@ -437,18 +437,18 @@ MonoBehaviour: m_Scale: 1 m_AtlasIndex: 0 m_ClassDefinitionType: 0 - - m_Index: 963 + - m_Index: 2030 m_Metrics: - m_Width: 46 - m_Height: 59 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 57 + m_Width: 64 + m_Height: 9 + m_HorizontalBearingX: 11 + m_HorizontalBearingY: 9 + m_HorizontalAdvance: 86 m_GlyphRect: - m_X: 296 - m_Y: 168 - m_Width: 46 - m_Height: 59 + m_X: 10 + m_Y: 10 + m_Width: 64 + m_Height: 9 m_Scale: 1 m_AtlasIndex: 0 m_ClassDefinitionType: 0 @@ -502,24 +502,24 @@ MonoBehaviour: m_GlyphIndex: 92 m_Scale: 1 - m_ElementType: 1 - m_Unicode: 8230 - m_GlyphIndex: 2030 + m_Unicode: 1040 + m_GlyphIndex: 961 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 1042 + m_GlyphIndex: 963 m_Scale: 1 - m_ElementType: 1 m_Unicode: 1057 m_GlyphIndex: 978 m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 1040 - m_GlyphIndex: 961 - m_Scale: 1 - m_ElementType: 1 m_Unicode: 1058 m_GlyphIndex: 979 m_Scale: 1 - m_ElementType: 1 - m_Unicode: 1042 - m_GlyphIndex: 963 + m_Unicode: 8230 + m_GlyphIndex: 2030 m_Scale: 1 m_AtlasTextures: - {fileID: 28268798066460806} @@ -793,36 +793,6 @@ MonoBehaviour: m_XAdvance: 0 m_YAdvance: 0 m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 978 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.890625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 961 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 978 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -2.859375 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 979 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - m_FirstAdjustmentRecord: m_GlyphIndex: 961 m_GlyphValueRecord: @@ -854,7 +824,7 @@ MonoBehaviour: m_YAdvance: 0 m_FeatureLookupFlags: 0 - m_FirstAdjustmentRecord: - m_GlyphIndex: 979 + m_GlyphIndex: 963 m_GlyphValueRecord: m_XPlacement: 0 m_YPlacement: 0 @@ -888,7 +858,22 @@ MonoBehaviour: m_GlyphValueRecord: m_XPlacement: 0 m_YPlacement: 0 - m_XAdvance: -2.859375 + m_XAdvance: -5.75 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 979 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 978 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -1.890625 m_YAdvance: 0 m_SecondAdjustmentRecord: m_GlyphIndex: 961 @@ -899,11 +884,11 @@ MonoBehaviour: m_YAdvance: 0 m_FeatureLookupFlags: 0 - m_FirstAdjustmentRecord: - m_GlyphIndex: 963 + m_GlyphIndex: 978 m_GlyphValueRecord: m_XPlacement: 0 m_YPlacement: 0 - m_XAdvance: -5.75 + m_XAdvance: -2.859375 m_YAdvance: 0 m_SecondAdjustmentRecord: m_GlyphIndex: 979 @@ -913,6 +898,21 @@ MonoBehaviour: m_XAdvance: 0 m_YAdvance: 0 m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 979 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -2.859375 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 961 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 fallbackFontAssets: [] m_FallbackFontAssetTable: [] m_CreationSettings: diff --git a/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset index 969e477..a4e8465 100644 --- a/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset +++ b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset @@ -31,7 +31,7 @@ Material: m_Ints: [] m_Floats: - _ColorMask: 15 - - _CullMode: 0 + - _CullMode: 2 - _FaceDilate: 0 - _GradientScale: 10 - _MaskSoftnessX: 0 diff --git a/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.mat b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.mat new file mode 100644 index 0000000..e5ad719 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.mat @@ -0,0 +1,29 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LiberationSans SDF + m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3} + m_Parent: {fileID: 2100000, guid: b6a2dad9aff9ab045a826a0ec59f07fd, type: 2} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: [] + m_Ints: [] + m_Floats: [] + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.mat.meta b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.mat.meta new file mode 100644 index 0000000..9958972 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a0a6b93402a371e45b0fd0d6cb33a645 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Fonts & Materials/NoOutline.mat b/Assets/TextMesh Pro/Resources/Fonts & Materials/NoOutline.mat new file mode 100644 index 0000000..c8e12f8 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Fonts & Materials/NoOutline.mat @@ -0,0 +1,69 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: NoOutline + m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - OUTLINE_ON + m_InvalidKeywords: [] + m_LightmapFlags: 1 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 28684132378477856, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _ColorMask: 15 + - _CullMode: 2 + - _FaceDilate: 0 + - _GradientScale: 10 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineWidth: 0.15 + - _PerspectiveFilter: 0.875 + - _ScaleRatioA: 0.9 + - _ScaleRatioB: 1 + - _ScaleRatioC: 0.73125 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 1024 + - _TextureWidth: 1024 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _UnderlayColor: {r: 1, g: 0, b: 0, a: 0.5} + m_BuildTextureStacks: [] diff --git a/Assets/TextMesh Pro/Resources/Fonts & Materials/NoOutline.mat.meta b/Assets/TextMesh Pro/Resources/Fonts & Materials/NoOutline.mat.meta new file mode 100644 index 0000000..81e3c1e --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Fonts & Materials/NoOutline.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b6a2dad9aff9ab045a826a0ec59f07fd +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Fonts & Materials/Outlined.mat b/Assets/TextMesh Pro/Resources/Fonts & Materials/Outlined.mat new file mode 100644 index 0000000..02bb7e0 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Fonts & Materials/Outlined.mat @@ -0,0 +1,69 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Outlined + m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - OUTLINE_ON + m_InvalidKeywords: [] + m_LightmapFlags: 1 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 28684132378477856, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _ColorMask: 15 + - _CullMode: 2 + - _FaceDilate: 0 + - _GradientScale: 10 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineWidth: 0.15 + - _PerspectiveFilter: 0.875 + - _ScaleRatioA: 0.9 + - _ScaleRatioB: 1 + - _ScaleRatioC: 0.73125 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 1024 + - _TextureWidth: 1024 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _UnderlayColor: {r: 1, g: 0, b: 0, a: 0.5} + m_BuildTextureStacks: [] diff --git a/Assets/TextMesh Pro/Resources/Fonts & Materials/Outlined.mat.meta b/Assets/TextMesh Pro/Resources/Fonts & Materials/Outlined.mat.meta new file mode 100644 index 0000000..0e63abb --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Fonts & Materials/Outlined.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 834be2e59b4432149a2b52b7d71e976f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tree.prefab b/Assets/Tree.prefab new file mode 100644 index 0000000..a364952 --- /dev/null +++ b/Assets/Tree.prefab @@ -0,0 +1,891 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2110996017068625614 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 846553220215855995} + - component: {fileID: 7347836426351064451} + - component: {fileID: 7773691749647457137} + - component: {fileID: 60314795778704072} + m_Layer: 0 + m_Name: Tree + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &846553220215855995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2110996017068625614} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!193 &7347836426351064451 +Tree: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2110996017068625614} + m_SpeedTreeWindAsset: {fileID: 0} + m_TreeData: {fileID: -3310949011994225118} +--- !u!33 &7773691749647457137 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2110996017068625614} + m_Mesh: {fileID: -3389766236631386048} +--- !u!23 &60314795778704072 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2110996017068625614} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 5705841805242360830} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!21 &-4784787773994097777 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Optimized Leaf Material + m_Shader: {fileID: 10605, guid: 0000000000000000f000000000000000, type: 0} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpSpecMap: + m_Texture: {fileID: 2800000, guid: b761cafe9300c40479d4f9bf46242f30, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 75d12a823171767488430c21c8b5fd28, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ShadowTex: + m_Texture: {fileID: 2800000, guid: 5aa88e5b0217ff145bc15f87afdc7622, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TranslucencyMap: + m_Texture: {fileID: 2800000, guid: 1df0b1142e222e64d95732eb5c2bb610, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _Cutoff: 0.3 + - _ShadowOffsetScale: 1 + - _ShadowStrength: 0.8 + - _SquashAmount: 1 + - _TranslucencyViewDependency: 0.7 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _TranslucencyColor: {r: 0.73, g: 0.85, b: 0.40999997, a: 1} + - _TreeInstanceColor: {r: 1, g: 1, b: 1, a: 1} + - _TreeInstanceScale: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] +--- !u!43 &-3389766236631386048 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Mesh + serializedVersion: 11 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 1356 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 244 + localAABB: + m_Center: {x: -0.070248365, y: 7.371292, z: 0} + m_Extent: {x: 1.8539809, y: 7.371292, z: 1.8086879} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_BonesAABB: [] + m_VariableBoneCountWeights: + m_Data: + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 1 + m_KeepIndices: 1 + m_IndexFormat: 0 + m_IndexBuffer: 210000002200000001002200220001002300010002002300230002002400020003002400240003002500030004002500250004002600040005002600260005002700050006002700270006002800060007002800280007002900070008002900290008002a00080009002a002a0009002b0009000a002b002b000a002c000a000b002c002c000b002d000b000c002d002d000c002e000c000d002e002e000d002f000d000e002f002f000e0030000e000f00300030000f0031000f0010003100310010003200100011003200320011003300110012003300330012003400120013003400340013003500130014003500350014003600140015003600360015003700150016003700370016003800160017003800380017003900170018003900390018003a00180019003a003a0019003b0019001a003b003b001a003c001a001b003c003c001b003d001b001c003d003d001c003e001c001d003e003e001d003f001d001e003f003f001e0040001e001f00400040001f0041001f0020004100420021004300210022004300430022004400220023004400440023004500230024004500450024004600240025004600460025004700250026004700470026004800260027004800480027004900270028004900490028004a00280029004a004a0029004a0029002a004a004a002a004b002a002b004b004b002b004c002b002c004c004c002c004d002c002d004d004d002d004e002d002e004e004e002e004f002e002f004f004f002f0050002f003000500050003000510030003100510051003100520031003200520052003200530032003300530053003300540033003400540054003400550034003500550055003500560035003600560056003600570036003700570057003700580037003800580058003800580038003900580058003900590039003a00590059003a005a003a003b005a005a003b005b003b003c005b005b003c005c003c003d005c005c003d005d003d003e005d005d003e005e003e003f005e005e003f005f003f0040005f005f004000600040004100600061004200620042004300620062004300630043004400630063004400640044004500640064004500640045004600640064004600650046004700650065004700660047004800660066004800670048004900670067004900680049004a00680068004a0069004a004b00690069004b006a004b004c006a006a004c006b004c004d006b006b004d006b004d004e006b006b004e006c004e004f006c006c004f006d004f0050006d006d0050006e00500051006e006e0051006f00510052006f006f005200700052005300700070005300710053005400710071005400710054005500710071005500720055005600720072005600730056005700730073005700740057005800740074005800750058005900750075005900760059005a00760076005a0077005a005b00770077005b0078005b005c00780078005c0078005c005d00780078005d0079005d005e00790079005e007a005e005f007a007a005f007b005f0060007b007c0061007d00610062007d007d0062007e00620063007e007e0063007f00630064007f007f006400800064006500800080006500810065006600810081006600820066006700820082006700820067006800820082006800830068006900830083006900840069006a00840084006a0085006a006b00850085006b0086006b006c00860086006c0087006c006d00870087006d0088006d006e00880088006e0089006e006f00890089006f008a006f0070008a008a0070008b00700071008b008b0071008c00710072008c008c0072008d00720073008d008d0073008e00730074008e008e0074008e00740075008e008e0075008f00750076008f008f007600900076007700900090007700910077007800910091007800920078007900920092007900930079007a00930093007a0094007a007b00940095007c0096007c007d00960096007d0097007d007e00970097007e0098007e007f00980098007f0099007f0080009900990080009a00800081009a009a0081009b00810082009b009b0082009b00820083009b009b0083009c00830084009c009c0084009d00840085009d009d0085009e00850086009e009e0086009f00860087009f009f008700a00087008800a000a0008800a10088008900a100a1008900a20089008a00a200a2008a00a3008a008b00a300a3008b00a4008b008c00a400a4008c00a5008c008d00a500a5008d00a5008d008e00a500a5008e00a6008e008f00a600a6008f00a7008f009000a700a7009000a80090009100a800a8009100a90091009200a900a9009200aa0092009300aa00aa009300ab0093009400ab00ac009500ad0095009600ad00ad009600ad0096009700ad00ad009700ae0097009800ae00ae009800af0098009900af00af009900b00099009a00b000b0009a00b0009a009b00b000b0009b00b1009b009c00b100b1009c00b2009c009d00b200b2009d00b3009d009e00b300b3009e00b3009e009f00b300b3009f00b4009f00a000b400b400a000b500a000a100b500b500a100b500a100a200b500b500a200b600a200a300b600b600a300b700a300a400b700b700a400b800a400a500b800b800a500b800a500a600b800b800a600b900a600a700b900b900a700ba00a700a800ba00ba00a800bb00a800a900bb00bb00a900bb00a900aa00bb00bb00aa00bc00aa00ab00bc00bd00ac00be00ac00ad00be00be00ad00bf00ad00ae00bf00bf00ae00bf00ae00af00bf00bf00af00c000af00b000c000c000b000c100b000b100c100c100b100c100b100b200c100c100b200c200b200b300c200c200b300c300b300b400c300c300b400c400b400b500c400c400b500c500b500b600c500c500b600c500b600b700c500c500b700c600b700b800c600c600b800c700b800b900c700c700b900c700b900ba00c700c700ba00c800ba00bb00c800c800bb00c900bb00bc00c900ca00bd00cb00bd00be00cb00cb00be00cc00be00bf00cc00cc00bf00cc00bf00c000cc00cc00c000cd00c000c100cd00cd00c100ce00c100c200ce00ce00c200cf00c200c300cf00cf00c300d000c300c400d000d000c400d100c400c500d100d100c500d200c500c600d200d200c600d200c600c700d200d200c700d300c700c800d300d300c800d400c800c900d400d500ca00d600ca00cb00d600d600cb00d700cb00cc00d700d700cc00d700cc00cd00d700d700cd00d800cd00ce00d800d800ce00d900ce00cf00d900d900cf00da00cf00d000da00da00d000db00d000d100db00db00d100db00d100d200db00db00d200dc00d200d300dc00dc00d300dd00d300d400dd00de00d500df00d500d600df00df00d600e000d600d700e000e000d700e000d700d800e000e000d800e100d800d900e100e100d900e200d900da00e200e200da00e200da00db00e200e200db00e300db00dc00e300e300dc00e400dc00dd00e400e500de00e600de00df00e600e600df00e600df00e000e600e600e000e700e000e100e700e700e100e800e100e200e800e800e200e800e200e300e800e800e300e900e300e400e900ea00e500eb00e500e600eb00eb00e600ec00e600e700ec00ec00e700ed00e700e800ed00ed00e800ee00e800e900ee00ef00ea00f000ea00eb00f000f000eb00f100eb00ec00f100f100ec00f200ec00ed00f200f200ed00f300ed00ee00f300 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 244 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 12 + format: 0 + dimension: 3 + - stream: 0 + offset: 24 + format: 0 + dimension: 4 + - stream: 0 + offset: 40 + format: 0 + dimension: 4 + - stream: 0 + offset: 56 + format: 0 + dimension: 2 + - stream: 0 + offset: 64 + format: 0 + dimension: 2 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 17568 + _typelessdata: 00000000000000001683e73f095eb9bc0add3d3e917e7b3f9fee7fbf0000000061a3bcbc000080bf000000000000000000000000e8ff7f3f0000403f0000000000000000000000003f9db63e000000001484e53fa6791c3e09dd3d3e3c80783fc6e27cbf000000007c3c1f3e000080bf0000000000000000000000000000803f00003c3f000000000000000000000000f70c343f000000002157d93f335fb93e0add3d3e27dd693f91fd6dbf0000000090a4bc3e000080bf0000000000000000000000000000803f0000383f000000000000000000000000bcce823f0000000070c4c33fa4af0c3f0add3d3e268b503f2f3954bf00000000262b0f3f000080bf0000000000000000000000000000803f0000343f000000000000000000000000480da63f00000000480da63fae56353f0add3d3e9f5a2e3f376e31bf00000000d389383f000080bf0000000000000000000000000000803f0000303f000000000000000000000000753ec23f0000000027ca813fad55553f0bdd3d3e204f053f4fa907bf000000005a19593f000080bf0000000000000000000000000000803f00002c3f0000000000000000000000004156d63f000000000290313fded76b3f0add3d3ec90daf3e8a24b2be000000003901703f000080bf000000000000000000000000ffff7f3f0000283f00000000000000000000000040bfe13f000000008e9db33eb17f783f0bdd3d3e89871c3e9c4a1fbe0000000036e27c3f000080bf0000000000000000000000009dff7f3f0000243f0000000000000000000000005951e43f000000002570a7b3695e7b3f0bdd3d3ea45b1dbd7522203d00000000e5cd7f3f000080bf000000000000000000000000e0fe7f3f0000203f000000000000000000000000ad42de3f0000000067d7b0bebde6743f0bdd3d3ec00066beb80f6a3e000000000239793f000080bf000000000000000000000000d0fd7f3f00001c3f000000000000000000000000c214d03f000000004c612cbf46db653f0add3d3ebc70ccbe3c0cd03e0000000096e9693f000080bf00000000000000000000000091fc7f3f0000183f000000000000000000000000a780ba3f00000000f03b79bf393a4f3f0add3d3e1c9e0ebf5822113f0000000050e2523f000080bf00000000000000000000000007fb7f3f0000143f0000000000000000000000001c649e3f000000001c649ebf7128323f0add3d3e4c9a31bf91bc343f00000000384d353f000080bf0000000000000000000000004cf97f3f0000103f0000000000000000000000008c63793f00000000519ebabf15de0f3f0add3d3e965c4ebfc400523f00000000f667123f000080bf0000000000000000000000005cf77f3f00000c3f00000000000000000000000089cb2c3f000000000b95d0bfa52dd33e0add3d3e1c5464bf855b683f0000000095e7d63e000080bf0000000000000000000000009cf57f3f0000083f0000000000000000000000009efdb13e0000000076b4dfbf740f813e0add3d3ec82473bf1d6f773f000000007256833e000080bf000000000000000000000000bcf37f3f0000043f000000000000000000000000d6c729b4000000001683e7bff4a69f3d0add3d3eaec47abf74317f3f000000002378a23d000080bf000000000000000000000000eef17f3f0000003f00000000000000000000000074b7b7be00000000b7e6e6bf19f2e9bd0add3d3e09db79bfb0437e3f00000000e112eebd000080bf0000000000000000000000005af07f3f0000f83e0000000000000000000000003eec36bf00000000b0cedcbfa7af9fbe0bdd3d3edc8d6ebf75c3723f00000000fc80a2be000080bf00000000000000000000000003ef7f3f0000f03e000000000000000000000000e67a86bf000000007c43c9bf135bffbe0add3d3e78c058bf95935c3f0000000049ee01bf000080bf0000000000000000000000003ced7f3f0000e83e00000000000000000000000015dcacbf0000000011dcacbfc34c2abf0add3d3eb32639bf116b3c3f000000000b4e2dbf000080bf000000000000000000000000d6eb7f3f0000e03e00000000000000000000000017a3ccbf00000000eabb88bf49824dbf0add3d3e401511bf9fa4133f000000009d2251bf000080bf000000000000000000000000ffea7f3f0000d83e000000000000000000000000cd2be4bf00000000e0053dbf6e8367bf0add3d3ef5d1c4be094bc83e000000003a996bbf000080bf000000000000000000000000c7e97f3f0000d03e0000000000000000000000003046f2bf00000000f0c3c0be730e77bf0bdd3d3e92923dbee8ea403e00000000746a7bbf000080bf00000000000000000000000034e97f3f0000c83e000000000000000000000000254df6bf000000003d1bc5326b807bbf0add3d3e990baf3c5122b2bc0000000081f07fbf000080bf0000000000000000000000008fe97f3f0000c03e000000000000000000000000d72ff0bf00000000cb1abf3e5cdf74bf0add3d3e607e663e908f6abe00000000803179bf000080bf000000000000000000000000d7ea7f3f0000b83e000000000000000000000000096de0bf00000000aeeb393fb6d763bf0bdd3d3e6c44d53ecb07d9be00000000ecdc67bf000080bf000000000000000000000000faec7f3f0000b03e000000000000000000000000a600c8bf0000000033a3853fdcac49bf0bdd3d3ed55d163f110519bf00000000de3b4dbf000080bf000000000000000000000000e1ef7f3f0000a83e000000000000000000000000fb45a8bf000000000346a83f1e1d28bf0add3d3e6c233b3fc4703ebf0000000086142bbf000080bf0000000000000000000000006bf37f3f0000a03e00000000000000000000000005d282bf000000005ac9c33f233a01bf0add3d3eefd4573fe4a35bbf00000000e28103bf000080bf00000000000000000000000078f77f3f0000983e000000000000000000000000489432bf000000007090d73f5971aebe0add3d3ed7f46b3fb51e70bf000000005885b1be000080bf00000000000000000000000065fb7f3f0000903e000000000000000000000000cdf2b4be00000000246ce33f68ec30be0add3d3e63a4773f0a037cbf000000009b0b34be000080bf0000000000000000000000002bfe7f3f0000883e000000000000000000000000d6c7a934000000001683e73f095eb9bc0add3d3e917e7b3f9fee7fbf0000000061a3bcbc000080bf000000000000000000000000e8ff7f3f0000803e0000000000000000000000007dc38bbd3108483f010fe43ff95b37bda2778bbbb6bd7f3f8fb67fbf681c7f3c4b1137bd000080bf0000000000000000000000000000803f0000403f996eba3dee911b3900000000822a853eb1ad473ffb22e23fb6b21f3e7ea69ebb55dd7c3f7bdb7cbfd82d20bcfba41f3e000080bf0000000000000000000000000000803f00003c3f996eba3dee911b39000000004a49143f34ac493f20fad63f4874bb3e0b118839a4396e3f2c106ebfcb9a16bd0055bb3e000080bf0000000000000000000000000000803f0000383f996eba3dee911b390000000041725f3f76e14d3f1747c33f75030e3f99bc303cebfa543fe07e54bfe0c17bbdfbe40d3f000080bf0000000000000000000000000000803f0000343f996eba3dee911b3900000000fc40903f460e543f1429a83f72fe363f2482d43c56e6323f0ff331bf6ccfa9bd51cf363f000080bf0000000000000000000000000000803f0000303f996eba3dee911b39000000001358aa3f99dd5b3f410e873f6157573f8582373d65f5093f786d08bfe39acdbd9c16573f000080bf0000000000000000000000000000803f00002c3f996eba3dee911b39000000003805bd3f19ec643f532a433ffa326e3f2bf2873d667bb83e1117b4be413ce8bd5ce06d3f000080bf0000000000000000000000000000803f0000283f996eba3dee911b3900000000c5b9c73f67cf6e3f4cbfe53eab2b7b3f639eb73d07632f3e24bb23be9422f9bdb9c77a3f000080bf0000000000000000000000000000803f0000243f996eba3dee911b3900000000f649ca3f9f1c793f6c54023eda497e3f9ebbe83de764a6bcf4a90d3d911600bec1d57d3f000080bf0000000000000000000000000000803f0000203f996eba3dee911b390000000010e0c43fd1b6813f1a4142be3df7773fb4af0c3e4b1c54be56a9653e06a0fdbdb274773f000080bf000000000000000000000000fcff7f3f00001c3f996eba3dee911b39000000003becb73f79b2863f2e76fbbe24ee683f40e8233ea1f6c3befc23ce3ef314f2bd485f683f000080bf0000000000000000000000004ffe7f3f0000183f996eba3dee911b39000000005013a43f01588b3f437544bf5026523f5749393ebca90abfb865103f8268debd9a8d513f000080bf00000000000000000000000080f97f3f0000143f996eba3dee911b3900000000821e8a3f0b848f3f375681bf13c1343f8c364c3e60f22dbfd540343fd8a6c3bd2921343f000080bf0000000000000000000000002af17f3f0000103f996eba3dee911b3900000000e2da553ff618933f76569bbfd8f6113f2e355c3e28fa4abf84c4513fc3f8a2bd7c52113f000080bf00000000000000000000000070e57f3f00000c3f996eba3dee911b390000000008d80e3f39fe953f088bafbf4010d63ed1e9683ec82461bfb751683f2e287bbd31c4d43e000080bf0000000000000000000000004cd87f3f0000083f996eba3dee911b39000000000c32823e841f983fa665bdbf3166823e4c14723eee0b70bf2980773f946129bd471c813e000080bf00000000000000000000000081c97f3f0000043f996eba3dee911b3900000000b0a08bbdd76b993fba72c4bf02649e3d59b1773e8c9b77bfb23b7f3fd6839ebcaa5b993d000080bf000000000000000000000000d9be7f3f0000003f996eba3dee911b39000000000024cdbe0bc0993f8eb1c3bf6b7ff1bd3e1c793eaf7776bf6e237e3f60cfab3bf74cf6bd000080bf000000000000000000000000a1b57f3f0000f83e996eba3dee911b3900000000ebce3abf59f9983f9e30babfdaeba2be704a753e83d16abf7260723f0bf2fc3c7209a4be000080bf0000000000000000000000004ab47f3f0000f03e996eba3dee911b3900000000df1b85bfe914973f4b01a8bfd5d201bfaa096c3e309a54bf55e25b3fe94b633dc05302bf000080bf0000000000000000000000000ebc7f3f0000e83e996eba3dee911b39000000005c6ea8bf7320943f87b88dbf37ce2cbfffa05d3e0b9134bf8b6a3b3f1a6e9f3ddd3e2dbf000080bf00000000000000000000000045ca7f3f0000e03e996eba3dee911b39000000002991c5bf423a903f59d758bf3b3250bf9caa4a3e3a150cbfd45c123fcf3fc63df69050bf000080bf0000000000000000000000008ddb7f3f0000d83e996eba3dee911b3900000000fa05dbbf918f8b3f07410bbf8e346abfb908343e1819babe9a4bc53e6527e43d92806abf000080bf00000000000000000000000020ed7f3f0000d03e996eba3dee911b390000000058bce7bf6e59863f129159be9b9679bf70d51a3e710327be435f3a3ee1b5f73d06d079bf000080bf000000000000000000000000adfa7f3f0000c83e996eba3dee911b3900000000ab25ebbf79d8803fb793063e44bb7dbfcc4e003ea796343d81e4e7bce80c003e1be37dbf000080bf000000000000000000000000efff7f3f0000c03e996eba3dee911b3900000000c23ce5bf05a0763f6257f13eb8b076bf1780cb3da2047e3ece0f71be232dfd3dcec876bf000080bf0000000000000000000000000000803f0000b83e996eba3dee911b39000000004980d6bff2016c3fc4bb4a3f762d65bfdbd3983dd2eee03ef9fbdbbef275ef3d4c3865bf000080bf0000000000000000000000000000803f0000b03e996eba3dee911b3900000000afe0bfbf9a4a623f0e318a3f38804abfcdad553d5a0c1c3fc0441abf7119d83dd1804abf000080bf0000000000000000000000000000803f0000a83e996eba3dee911b3900000000bea3a2bf80d8593f8f71a93f0d7328bf1fb4063d6196403f9e673fbf89c2b83db26c28bf000080bf0000000000000000000000000000803f0000a03e996eba3dee911b3900000000224180bf13f0523f1d2dc23fa32201bf8e808e3c90ff5c3fc04b5cbfeb7a933dab1801bf000080bf0000000000000000000000000000803f0000983e996eba3dee911b3900000000fc7734bf3fba4d3fc2dfd33f5499adbe9eacc43bb2d4703f7b7b70bfabf4543d8184adbe000080bf0000000000000000000000000000803f0000903e996eba3dee911b390000000053fac7be69464a3ffa68de3f217947be1e43fbb98b187b3f0af37abfd44c0c3df65647be000080bf0000000000000000000000000000803f0000883e996eba3dee911b390000000056c38bbd3008483f010fe43ff95b37bda2778bbbb6bd7f3f8fb67fbf681c7f3c4b1137bd000080bf0000000000000000000000000000803f0000803e996eba3dee911b39000000002081ac3cd81cf63f84fce43fc74565bde3ddb53dee957e3f87d17ebffe17953df30d80bd000080bf0000000000000000000000000000803f0000403fad57413eee919b3a000000006103b03ee046f33f346ce23f369e3a3ef34e943d7d077b3f10667bbfc977813db01c363e000080bf0000000000000000000000000000803fbcbb3b3fad57413eee919b3a00000000dcc1273ff8e2f03fc148d63f98f5cc3e9c09733dcd196a3f62856abf1e6f4f3d15a5cb3e000080bf0000000000000000000000000000803f7877373fad57413eee919b3a00000000cd31703ffe11ef3f8362c13f1205183f793f4b3d67954d3fc0f94dbf475d123d94be173f000080bf0000000000000000000000000000803f3333333fad57413eee919b3a0000000040ca963f39eaed3f66fda43f9245413fb55a323d2a81273f91cb27bfe3609e3c1947413f000080bf0000000000000000000000000000803fefee2e3fad57413eee919b3a000000005d84ae3f1177ed3f52b3823f29b3603f36c0283d626af43e5caaf4be1670173be7e0603f000080bf0000000000000000000000000000803faaaa2a3fad57413eee919b3a00000000aa51be3f4ab9ed3fb5a6383f8e63753ff3132e3da93f903e6e0f90beb70a6ebc24a1753f000080bf0000000000000000000000000000803f6666263fad57413eee919b3a0000000091acc53f2ea9ee3f65eece3eb0f37e3f1b59413d9ee29d3df10c9bbdfe60f9bc74257f3f000080bf0000000000000000000000000000803f2222223fad57413eee919b3a00000000cf83c43f1137f03fa527ac3de7867d3f620b613d5e5e02be00f0043e0a7537bd10937d3f000080bf0000000000000000000000000000803fdedd1d3fad57413eee919b3a00000000b41bbb3f604ef23f951167bebab2713f9ba1853d7665a5be1e49a73e30b069bd4982713f000080bf0000000000000000000000000000803f9a99193fad57413eee919b3a00000000770baa3f56d6f43fdc5603bf7d6d5c3f15e79e3daaa800bf54e8013ff0df88bdf9ec5b3f000080bf0000000000000000000000000000803f5655153fad57413eee919b3a00000000361e923f69b4f73f1a8e44bf06ef3e3fae32bb3d9fea28bf93752a3fe74897bdd50e3e3f000080bf000000000000000000000000edff7f3f1111113fad57413eee919b3a00000000bb93683f09cdfa3f8e367bbfa3aa1a3fc652d93dcb2d4abfc0fe4b3fb3c19fbd705f193f000080bf000000000000000000000000dbfe7f3fcdcc0c3fad57413eee919b3a00000000c53e233fb204fe3fa4c492bfac3ce23ea22cf83d278c63bf969b653fb535a2bdc1c1de3e000080bf00000000000000000000000006fc7f3f8888083fad57413eee919b3a00000000eafaac3e29a00040e109a1bf60d9873ee5500b3ecb5a74bf2e9f763f68bc9ebd0474833e000080bf00000000000000000000000055f77f3f4444043fad57413eee919b3a000000000901963cc832024083e5a7bf56a8973dae591a3e345d7cbfc9cc7e3ffb2995bd4550823d000080bf00000000000000000000000041f07f3f0000003fad57413eee919b3a000000008df19ebe6aa90340f057a6bf4a9f09be8c28293eaf207abf16b07c3f577d84bd243b16be000080bf0000000000000000000000008ee67f3f7877f73ead57413eee919b3a00000000291222bf43ee0440ed809bbf0fddb0be656d363e5ddf6bbf4f7e6e3fbe8f59bd4716b8be000080bf000000000000000000000000bdda7f3fefeeee3ead57413eee919b3a00000000bbbf6ebf9bee0540a69b87bfefa30abf06e8403e54bc51bfcb57543fd4d01ebd6fa50ebf000080bf000000000000000000000000dfce7f3f6666e63ead57413eee919b3a00000000089998bf729a064029dc56bf822f36bf40f0473e83c22cbf12472f3fd524b7bc267f3abf000080bf000000000000000000000000c7c37f3fdedddd3ead57413eee919b3a000000006bd1b2bf0de706401fb810bf578258bf42114b3e3ea2fdbe422c013f41889bbb92045dbf000080bf000000000000000000000000bfc07f3f5655d53ead57413eee919b3a00000000728ac4bf5bcf064044f880be76b56fbf9e194a3ee5a194be85e4983e9cf1563cda4b74bf000080bf00000000000000000000000014c67f3fcdcccc3ead57413eee919b3a0000000014d2ccbfd454064084c5ab3d658d7abf291c453e249b91bd246ea03d62cbf73c88187fbf000080bf00000000000000000000000058d37f3f4444c43ead57413eee919b3a00000000e856cbbf537f054079f6d83e90aa78bf586d3c3e3afd193e0ad413bef55f3b3d280c7dbf000080bf000000000000000000000000e3e67f3fbcbbbb3ead57413eee919b3a00000000cb5ec0bfd65b0440cbf73f3f36836abf91a0303e6f5db93e12f2b6be5be9703d11a06ebf000080bf00000000000000000000000029f87f3f3333b33ead57413eee919b3a000000000cccacbfcffb0240b1ea853fa05751bf7774223e3da40d3f1dc30cbf5e118d3d461955bf000080bf0000000000000000000000000000803fabaaaa3ead57413eee919b3a00000000e2e391bf8a7201409059a63f3b1a2fbfbec9123e971b373f8b8a36bfb7cb9a3d457032bf000080bf0000000000000000000000000000803f2222a23ead57413eee919b3a00000000f08762bf29a8ff3f3f1cc03f903606bfb888023e7a8a573f4d4157bf2c76a13d431709bf000080bf0000000000000000000000000000803f9a99993ead57413eee919b3a00000000d02b19bf8f65fc3f027dd23f3aa7b2bebc1ae53dcb316e3f81256ebfc867a13dfb77b7be000080bf0000000000000000000000000000803f1111913ead57413eee919b3a00000000d3e795be6e3cf93fed4ddd3f2baf5fbe5335cf3da578783f849078bf979d9d3db7fb67be000080bf0000000000000000000000000000803f8988883ead57413eee919b3a00000000b081ac3cd81cf63f84fce43fc74565bde3ddb53dee957e3f87d17ebffe17953df30d80bd000080bf0000000000000000000000000000803f0000803ead57413eee919b3a00000000340b9d3d55b73d40e1bdd03feb5e82bdb45ee93d56cf7d3f4d547fbf30b5dc3c2e7e89bd000080bf0000000000000000000000000000803f0000403f37be963e2243833b0000000008d6d73eae253d4040bfcc3fadf1613ed14cda3de731783fc3b079bf218fc53c2b97603e000080bf0000000000000000000000000000803fb1133b3f37be963e2243833b000000000a9a3f3f33a73c40fe67bd3fe3f0eb3e02aece3d75b9613f991363bf70dfa23c7030ec3e000080bf0000000000000000000000000000803f6227363f37be963e2243833b000000006674843f79443c4099eca33f22ce2a3faac7c53de5133d3f9f2f3ebf0e8b6c3cba522b3f000080bf0000000000000000000000000000803f143b313f37be963e2243833b000000004293a13f96033c40ca27823f9e2e543fd502c03d57340d3f0cfd0dbf57f6053c2401553f000080bf0000000000000000000000000000803fc54e2c3f37be963e2243833b000000002177b53ffee73b4029cd343f2920703fd893bd3d990bab3ec2d9abbe8696c63a1026713f000080bf0000000000000000000000000000803f7662273f37be963e2243833b00000000fd21bf3f82f23b4048cfbc3e67997d3f6079be3d7bfccc3dcee5ccbd4469a8bb51b67e3f000080bf0000000000000000000000000000803f2876223f37be963e2243833b000000005f3dbe3fb0213c40e8f3c83cb8707c3fc782c23d2ba40bbecf5e0d3e1bef3abc24887d3f000080bf0000000000000000000000000000803fd8891d3f37be963e2243833b000000004812b33f19723c40ff479dbe8a4b6d3fdf56c93d6367b9be1614bb3eb8f78abc69426e3f000080bf0000000000000000000000000000803f8a9d183f37be963e2243833b000000004f689e3fdbde3c4051e21bbfc97c513f0f7ed23d70c510bff8f9113f3463b0bcc83a523f000080bf000000000000000000000000faff7f3f3bb1133f37be963e2243833b000000002171813ff9613d40ef965dbf30e82a3f1869dd3d67933cbffa173e3f1909ccbccb582b3f000080bf0000000000000000000000004bff7f3fecc40e3f37be963e2243833b00000000f2583b3fc8f43d40b34a88bf9e9bf73e9a7ee93de9295ebfcdec5f3fc5d1dcbcfbc1f73e000080bf00000000000000000000000053fd7f3f9ed8093f37be963e2243833b000000005245d33e38903e403d2f99bf25818d3ef01bf63d071974bfcd05763f7d28e2bcc5d68c3e000080bf0000000000000000000000005bfa7f3f4fec043f37be963e2243833b00000000ad1b8c3d062d3f400499a0bfb3b4503d5a77013e469c7dbf119d7f3f05b8dbbc7555443d000080bf0000000000000000000000006af67f3f0000003f37be963e2243833b000000005d9691bef7c23f40a2779dbfdec741bea0d6073ee51179bfe30d7b3fab54c8bc28bd46be000080bf000000000000000000000000d8f17f3f6227f63e37be963e2243833b000000009ebd1fbfe8474040db0e8fbfdc45dabe8ca20d3e1ed964bf5bb4663f93c3a7bc77aaddbe000080bf00000000000000000000000091ec7f3fc54eec3e37be963e2243833b00000000cc566dbf46b24040a0e26bbfd88123bf3c4a123e498e41bf9b2d433f72de77bc069c25bf000080bf0000000000000000000000001de97f3f2876e23e37be963e2243833b000000009df895bff5f94040882727bfd37f4fbfbf6f153e563411bfee7f123f4f260fbcffec51bf000080bf000000000000000000000000b4e77f3f8a9dd83e37be963e2243833b000000000f7babbf7b194140a211a9bee6c46dbf9ed2163eb420aebe1cecaf3e6a2de5bad86970bf000080bf000000000000000000000000a5ea7f3fecc4ce3e37be963e2243833b000000007badb5bf9c0e4140b144c53c42297cbff058163e178eb9bd4634bd3de93eaf3bc9e67ebf000080bf000000000000000000000000b0f17f3f4fecc43e37be963e2243833b0000000012f9b3bf8eda4040f10ac53ec1d679bf0411143eb927273ede2327beea5c453c4b8c7cbf000080bf000000000000000000000000a1fb7f3fb113bb3e37be963e2243833b00000000e3c8a6bfec814040a9303a3fda6867bf7d2f103eb3bfce3e039bcfbe1497923c3ff769bf000080bf0000000000000000000000000000803f143bb13e37be963e2243833b000000000c5e8fbfc70b404084c4833fd5d646bfa10a0b3e5c731d3f06431ebf1f86b83cfc2249bf000080bf0000000000000000000000000000803f7662a73e37be963e2243833b000000003a645fbf00813f40b31ba33f912f1bbfa80e053e82dd483fccfc49bfd58ed23c7a241dbf000080bf0000000000000000000000000000803fd9899d3e37be963e2243833b00000000282114bfceea3e400cafb93f0879d0bee663fd3d9ea9673f740269bf0cfddf3c5999d3be000080bf0000000000000000000000000000803f3bb1933e37be963e2243833b000000001e7383bee0513e402ae7c63f641c85be578df43db54c753fd5bf76bf621fe23ca6a887be000080bf0000000000000000000000000000803f9ed8893e37be963e2243833b00000000550b9d3d55b73d40e1bdd03feb5e82bdb45ee93d56cf7d3f4d547fbf30b5dc3c2e7e89bd000080bf0000000000000000000000000000803f0000803e37be963e2243833b000000008afb9b3d5b2e7d4019a8cb3fed9f86bd2316d73d0a077e3f2a687fbff3bec7bc151282bd000080bf0000000000000000000000000000803f0000403f6a85d13eee911b3c000000008a8ed73ef0c57d402d92c63f62f9793ecaeee73d6e8e763f35db77bfd3c9e3bce3a37e3e000080bf0000000000000000000000000000803faaaa3a3f6a85d13eee911b3c000000000c513e3f55687e4049b8b53f641efc3e918ff73dfea65c3f97bf5dbfdf07eabc266cff3e000080bf0000000000000000000000000000803f5655353f6a85d13eee911b3c00000000577b823f47097f408a759a3f05d2333f926e033e2839333f7c0234bfe368dfbcb2e3353f000080bf0000000000000000000000000000803f0000303f6a85d13eee911b3c00000000ea5a9d3f1a9d7f4041bf6d3f71595c3fed640a3e0b47fb3eb411fcbe642fc5bc90bd5e3f000080bf0000000000000000000000000000803faaaa2a3f6a85d13eee911b3c0000000004fdad3fc60c8040ed231b3f8442753f4536103e529e7f3e5d6e7fbeca999dbcd3db773f000080bf0000000000000000000000000000803f5655253f6a85d13eee911b3c000000003e5db33f303b8040c9c9853ea3497d3f5086143e1006d0bbdaad083cc75457bc0ff87f3f000080bf0000000000000000000000000000803f0000203f6a85d13eee911b3c00000000e040ad3fe05680409f41a8bd534d743f3115173eff0d85be78fb863e20a7cbbb26f0763f000080bf000000000000000000000000fbff7f3faaaa1a3f6a85d13eee911b3c000000002d299c3f325e8040cccccdbe883e5b3fddc1173e3935fdbea8f6ff3e38248d3a7eb65d3f000080bf000000000000000000000000c7fe7f3f5655153f6a85d13eee911b3c00000000433f813fcf508040d2802dbfeb02343ff289163eaa1632bfaad0333fe74c073c1034363f000080bf0000000000000000000000007dfb7f3f0000103f6a85d13eee911b3c0000000042743c3f982f8040a96964bfd348013f2288133e1adb59bf48d85b3febc3733c111c033f000080bf000000000000000000000000d1f67f3faaaa0a3f6a85d13eee911b3c000000000504d53e18f97f406a1284bf79cc8c3e35f20e3e908573bfd3ab753f5922a83c65958f3e000080bf000000000000000000000000c6f17f3f5655053f6a85d13eee911b3c000000005e038d3d5d757f40a52a8bbfc4a6d03cfb05093e2b9d7dbf09d07f3f35d7cb3c53feed3c000080bf0000000000000000000000006fed7f3f0000003f6a85d13eee911b3c00000000666791be7edb7e4052ad86bfa0df6dbed6fc013e08de76bf02ff783fb9bce23ca4316cbe000080bf000000000000000000000000c6ea7f3f5655f53e6a85d13eee911b3c00000000e82d1ebf2f357e4036a46cbff7e7f5bec985f43d60735ebfde62603f2e29ea3ceb08f6be000080bf00000000000000000000000015eb7f3faaaaea3e6a85d13eee911b3c00000000fe3e68bf818e7d40bae235bfd96a32bfb8e8e43d425735bfe8f7363ffe87e03c5be932bf000080bf00000000000000000000000098ef7f3f0000e03e6a85d13eee911b3c00000000ad7190bf62f47c405ea9d9bee4195dbf7462d63dfd71fcbe61e5fe3ebefcc53c1fef5dbf000080bf0000000000000000000000007af77f3f5655d53e6a85d13eee911b3c000000002ab9a1bf26737c401993b8bd0a4577bfd826ca3d461e75be4028783ee8539c3c255278bf000080bf000000000000000000000000a7fe7f3faaaaca3e6a85d13eee911b3c000000001c9aa6bf0c157c406c19893e0db97ebf9335c13d9ce6043d999d00bd66ab4d3c84da7fbf000080bf000000000000000000000000feff7f3f0000c03e6a85d13eee911b3c000000001cde9ebf05e17b4089b61e3f620d73bfef3ebc3dc7b9993e7a259abe6ed0a73b6b1e74bf000080bf0000000000000000000000000000803f5555b53e6a85d13eee911b3c00000000b5758bbff3d97b40f17c703f39a955bf448cbb3d3b0d0b3f7db00bbfa3eb2abb448756bf000080bf0000000000000000000000000000803fabaaaa3e6a85d13eee911b3c00000000f47d5cbfc4fe7b40fc069a3fcb9129bf57febe3d894b3e3f37473fbf7e2d24bcab1f2abf000080bf0000000000000000000000000000803f0000a03e6a85d13eee911b3c00000000639213bfb04a7c4099a7b23f5041e6beb70dc63dbf4e633f548864bf52ac87bc8992e6be000080bf0000000000000000000000000000803f5555953e6a85d13eee911b3c00000000199883be71b67c40d50bc13f501293bed3b2cc3d5bdf733f223375bf3d12a7bcc2c692be000080bf0000000000000000000000000000803fabaa8a3e6a85d13eee911b3c00000000a9fb9b3d5c2e7d4019a8cb3fed9f86bd2316d73d0a077e3f2a687fbff3bec7bc151282bd000080bf0000000000000000000000000000803f0000803e6a85d13eee911b3c00000000e5ffbe3c5b40a140b084b93f620f70bdbdce2c3ec3e17b3f853d7ebf2f0de1bd8a1b25bd000080bf0000000000000000000000000000803f0000403f96f3083f83ec973c000000002b85bb3ebf59a2400cf3b23fae88873eac644e3e456a713fbd3c74bf927ab3bd5bb5923e000080bf0000000000000000000000000000803f8c2e3a3f96f3083f83ec973c00000000247a2e3fac2fa340a236a03ffc32053fc212643e490d533fed2c56bf0b9878bd395e0b3f000080bf0000000000000000000000000000803f185d343f96f3083f83ec973c000000008199713ff1b0a34031d9823f2d773b3f9c23713e7b94233f4ee326bfb4ceecbcd1fb413f000080bf0000000000000000000000000000803fa38b2e3f96f3083f83ec973c00000000d3de903f3ad3a340f3723a3fba4c623fe198743ed0c4cd3ea87dd4bebaeca83b77e8683f000080bf000000000000000000000000feff7f3f2eba283f96f3083f83ec973c000000000f859d3fc093a3407868c93e63aa763f1f356e3e2464073e048214be34d01e3d53197d3f000080bf00000000000000000000000024ff7f3fbae8223f96f3083f83ec973c000000008cb79d3f6bf7a2409bbb343d54f9763f9f7e5e3e5d1918be8fd20b3e46df8d3d40fb7c3f000080bf0000000000000000000000005cfc7f3f46171d3f96f3083f83ec973c00000000d567913f6a0aa240874895be3c31633f9eb4463ef606d6be3488d03e8dfac03d918e683f000080bf000000000000000000000000f8f97f3fd245173f96f3083f83ec973c000000004706733f59dfa040233516bf90da3c3f93b8283e9d9a27bf9b43253fb29ee43dc068413f000080bf000000000000000000000000a9f87f3f5d74113f96f3083f83ec973c00000000a4c72f3fe58d9f40664351bf47f0063fa0e8063e30eb56bf5c0a553f5ce1f53d21950a3f000080bf00000000000000000000000093f87f3fe8a20b3f96f3083f83ec973c000000000ec0bc3e18319e4060e776bf555c8b3e27edc73d411075bfffa9733f133ff33d28c4903e000080bf000000000000000000000000b9f97f3f74d1053f96f3083f83ec973c000000004a03ab3c52e59c4051f281bf2a5c8abbbbf9853d08737fbfdb807e3f980ddd3dfa0c3c3b000080bf000000000000000000000000fafb7f3f0000003f96f3083f83ec973c00000000cd59a8bec3c49b404e6b77bf431a8fbe99641a3da79b75bfd70d753fbd72b53d66ff8cbe000080bf000000000000000000000000fafd7f3f185df43e96f3083f83ec973c000000000d2927bf67e69a400d4452bf0b4d09bfd8dd843ca40658bf14c7573fb39a7d3da7d608bf000080bf00000000000000000000000079ff7f3f2ebae83e96f3083f83ec973c0000000052976cbf7e5e9a4037c316bf081b41bf4def3e3b831028bf1e02283f0b6af23ce10141bf000080bf000000000000000000000000feff7f3f4617dd3e96f3083f83ec973c00000000f7138fbfb53a9a40cc2093be0f5c69bfd70320ba2b84d2beb983d23ea3c8b9bb045b69bf000080bf0000000000000000000000000000803f5d74d13e96f3083f83ec973c0000000090999bbf6a7f9a4052516a3d51dc7dbf2968cd3bb3f303be1a96033efba626bdefa97dbf000080bf0000000000000000000000000000803f74d1c53e96f3083f83ec973c00000000c7b69abf7f269b4011c5d33e1b6e7cbffbebbc3cf1c4283e400e2abe79e493bd73c47bbf000080bf0000000000000000000000000000803f8c2eba3e96f3083f83ec973c000000006aa38cbfc91f9c405ad93f3f103665bfb37b453df1ade23e0505e4beb95ac7bd42da63bf000080bf0000000000000000000000000000803fa38bae3e96f3083f83ec973c00000000efd665bf29539d40f678843f5fa53abfda6ba23d26082e3f9a222fbf5038e9bda66d38bf000080bf0000000000000000000000000000803fbae8a23e96f3083f83ec973c00000000395b20bfe2a39e40c6979f3f9c3901bf0f16e83d07145b3f4da85cbfdff7f6bd1823fcbe000080bf0000000000000000000000000000803fd245973e96f3083f83ec973c000000004ae59ebe75f49f402d6faf3f0e079fbe475f0e3ea1b8703f47a972bf78d1f3bde44b97be000080bf0000000000000000000000000000803fe9a28b3e96f3083f83ec973c000000005700bf3c5b40a140b084b93f620f70bdbdce2c3ec3e17b3f853d7ebf2f0de1bd8a1b25bd000080bf0000000000000000000000000000803f0000803e96f3083f83ec973c00000000a998d2be69bcfe402028673fd402263d02451d3ef7bf7c3f555f7fbf3c9b4dbd9bb7473d000080bf0000000000000000000000000000803f0000403f6123803fee919b3d00000000cfe5bfbd8b2fff40c998533ff73cc93ebf482d3e6460673fbe026abf1dc80dbdf2d8ce3e000080bf0000000000000000000000000000803f0000383f6123803fee919b3d00000000eba5323e2072ff404fe1243fe964313f3b8e363e82d7323fdb4335bfd8416bbc64bc343f000080bf0000000000000000000000000000803f0000303f6123803fee919b3d000000007392b73eac7aff40b552c03e8143673f91b4373e2270c73ee871cbbe9fa10a3c95e96a3f000080bf0000000000000000000000000000803f0000283f6123803fee919b3d000000002ee9db3ea245ff405285613d512b7c3f2fdf2f3eb6496b3cfc18a3bcbee5fa3c42d47f3f000080bf000000000000000000000000bafe7f3f0000203f6123803fee919b3d00000000b42bbe3e42d8fe40d2e38abe6b336a3fdf971f3ed3b9bebed337bd3e17ee463d188d6d3f000080bf00000000000000000000000065ed7f3f0000183f6123803fee919b3d0000000014f5403e1942fe40bcdd0cbfaa8b313f5ef5083eb23835bfff1c353f5ab1713d2c4b343f000080bf000000000000000000000000bcde7f3f0000103f6123803fee919b3d00000000b07ebbbded9bfd40496e3bbff3a4b23e66d8de3df7496ebf86b16e3f2159743da384b63e000080bf00000000000000000000000048d97f3f0000083f6123803fee919b3d00000000987ad6bec603fd40594f48bfcb8732bd8ff7b03d5ccc7ebf96797f3f67ea4e3d700a21bd000080bf00000000000000000000000004e27f3f0000003f6123803fee919b3d00000000af9f3cbf5990fc4041ec34bf9be9ccbeb260903d7be869bff0996a3f4ef40e3d1c24ccbe000080bf000000000000000000000000daf17f3f0000f03e6123803fee919b3d000000006af680bf224cfc40e0bf06bfbabf32bf8a747b3d259636bf6313373f2402753cfce532bf000080bf00000000000000000000000058fc7f3f0000e03e6123803fee919b3d000000002a1599bfb241fc40692084be9f7f69bf3ef2753dc1a2cfbe38c8cf3ee77f01bc74f669bf000080bf000000000000000000000000f9ff7f3f0000d03e6123803fee919b3d00000000919aa2bf1176fc402b2a863d3f527fbf4e7c8a3de646dcbca8d3cb3c15c3f8bc7acd7fbf000080bf0000000000000000000000000000803f0000c03e6123803fee919b3d00000000082b9bbf96e4fc4008e0ca3e40466dbfb676ab3d5d60bb3ef2c1bdbe531947bd66716dbf000080bf0000000000000000000000000000803f0000b03e6123803fee919b3d00000000e24883bff47cfd4042872d3f3f5333bf918dd93d9ea9343f188236bf462272bd10e132bf000080bf0000000000000000000000000000803f0000a03e6123803fee919b3d00000000cead3dbfbd24fe4016b25b3fba63b2be86b0063eac956d3ff7f16fbfb3b173bd39d8afbe000080bf0000000000000000000000000000803f0000903e6123803fee919b3d00000000a498d2be69bcfe402028673fd402263d02451d3ef7bf7c3f555f7fbf3c9b4dbd9bb7473d000080bf0000000000000000000000000000803f0000803e6123803fee919b3d000000004b68d0becc9c0f41eb5a383ff2ba433d47403b3ed0627b3ffaa77fbf909f33bcf46a4f3d000080bf0000000000000000000000000000803f0000403fb9279a3f4a81dd3d000000008c729bbdfb960f41808e1f3f6ed3fc3e643b393ed0bd593f3dce5dbf455d9d3c0774ff3e000080bf0000000000000000000000000000803f5655353fb9279a3f4a81dd3d0000000072e0323ef8670f412e32c53ee054573f4198283ec7e0033ffd3b07bfde883c3db30b593f000080bf0000000000000000000000000000803faaaa2a3fb9279a3f4a81dd3d00000000a159903e45170f41e485483d51787d3fa4960b3e85f7063de7172bbddc687f3d27477f3f000080bf000000000000000000000000fcff7f3f0000203fb9279a3f4a81dd3d000000009473503e5fb70e4136d19bbe3a4a5f3f8ea9d13d99dff4be4fd0f23e559c7e3d6bd1603f000080bf00000000000000000000000076f27f3f5655153fb9279a3f4a81dd3d00000000f1b555bde5630e416bda11bf942efc3e8758943d51055ebffbfd5d3f4ba4323db503fe3e000080bf000000000000000000000000d8d27f3faaaa0a3fb9279a3f4a81dd3d000000004c73d2bec2380e41f8ec27bf6701e9bc9da2683da87b7fbfa7e17f3f587c4b3c2694e3bc000080bf0000000000000000000000004bcf7f3f0000003fb9279a3f4a81dd3d00000000856f42bfe53f0e4105d20cbfe32b03bf480c713dfd525bbf93805b3ff04ea6bc8aa203bf000080bf0000000000000000000000007ae87f3faaaaea3eb9279a3f4a81dd3d00000000f4ce81bf3f730e41c0ac96be07315cbfdcfa9b3d4d1e01bf7f8c003ff51942bd570d5dbf000080bf0000000000000000000000003afc7f3f5655d53eb9279a3f4a81dd3d0000000018338ebfbcc70e410e175e3d8e8e7ebf04b5d73dab3348bc477bb73b26dc80bd1e7d7fbf000080bf0000000000000000000000000000803f0000c03eb9279a3f4a81dd3d00000000994f82bff1270f414f96cf3e46cf5bbf0c810e3e3297fc3e763501bf3ef57bbd3c705cbf000080bf0000000000000000000000000000803fabaaaa3eb9279a3f4a81dd3d000000001ad441bf59780f415d66283fac40eabe04df2c3e837e5f3f5c6463bfc2e029bd5b3beabe000080bf0000000000000000000000000000803f5555953eb9279a3f4a81dd3d000000004768d0becc9c0f41eb5a383ff2ba433d47403b3ed0627b3ffaa77fbf909f33bcf46a4f3d000080bf0000000000000000000000000000803f0000803eb9279a3f4a81dd3d0000000020ade2be264c2041cd20e43ebc29043dc538973e9070743f08cc7fbffd2a51bca67a1a3d000080bf0000000000000000000000000000803f0000403f6ee9b83f83ec173e000000008e8a0bbeb11c2041715ab23eb3ce0d3f18cc8c3e5d2c493f63fc53bf8534ac3d84e50d3f000080bf0000000000000000000000000000803f3333333f6ee9b83f83ec173e0000000075319c3d4a741f41df0ac93d29056b3f24864e3e0bc4ae3e01b6bfbe9ad2213e6ae7693f000080bf000000000000000000000000feff7f3f6666263f6ee9b83f83ec173e00000000dd0bda3d11791e4167d579be19ca753f1578be3db20187be287f7a3e9196353e1709743f000080bf000000000000000000000000c2fe7f3f9a99193f6ee9b83f83ec173e00000000261eb7bd59881d412f260cbf56001b3f361f28bc7db94bbfc45b4a3fd014fe3d6b8d193f000080bf0000000000000000000000007cf77f3fcdcc0c3f6ee9b83f83ec173e000000008662e3be1e171d41716929bfb30e9cbc082572bd77817fbf7eea7f3f5be2823c540fa4bc000080bf00000000000000000000000005f97f3f0000003f6ee9b83f83ec173e00000000fa604abf735a1d41aa8d08bf491d1ebf42da04bdf22949bfc8d6483f1d9bc3bd8dd91cbf000080bf000000000000000000000000b7fe7f3f6666e63e6ee9b83f83ec173e0000000061e87cbf4b261e4106c172be392975bf1b72543d51fe90be38ec8a3e7b412abe2ab172bf000080bf0000000000000000000000000000803fcdcccc3e6ee9b83f83ec173e00000000f64579bf38261f41c855da3db1aa6fbf3403243ea42ea03e4972adbea02c32be65b56cbf000080bf0000000000000000000000000000803f3333b33e6ee9b83f83ec173e00000000cdc643bfcdfb1f41b37fbe3e1f630bbfe9f8823e127f4c3fde6556bf42cbe7bd91db08bf000080bf0000000000000000000000000000803f9a99993e6ee9b83f83ec173e000000001dade2be264c2041cd20e43ebc29043dc538973e9070743f08cc7fbffd2a51bca67a1a3d000080bf0000000000000000000000000000803f0000803e6ee9b83f83ec173e00000000e524e5be9a123041bff8ee3d8656a13b6a1db93ec1ad6e3ff58d7fbf2cb1673d6f8288bc000080bf0000000000000000000000000000803f0000403f1785de3fee354a3e0000000043040cbe9d4d2f4196241d3bd40d2f3fc360833eebdc2e3f0ab33abf2f91573e8da8263f000080bf0000000000000000000000000000803f0000303f1785de3fee354a3e000000007d64823ca2ee2d412c1498bedb297f3fee49943da1a5123d5e9958bddfdf7f3e5382773f000080bf0000000000000000000000000000803f0000203f1785de3fee354a3e000000001fbbd0bdc3ab2c41675722bf4b7c3b3f12e2bdbda0b02cbf6c272e3f6e68113e1d14383f000080bf00000000000000000000000051777f3f0000103f1785de3fee354a3e000000008314e5be7d622c41ed6949bf63468ebb66d203be14de7dbfc6897f3f9a8675bd298b5f3b000080bf00000000000000000000000062c17f3f0000003f1785de3fee354a3e000000006ff648bfc8532d4161f022bf8a443abf3eccdabb199b2fbf24852b3f93e462bebb6135bf000080bf0000000000000000000000001fff7f3f0000e03e1785de3fee354a3e0000000057d765bf96c42e4178f79ebe2daa7bbf96a23b3e4bcd26bb8b6630bdc65f7abe21fc77bf000080bf000000000000000000000000d6fe7f3f0000c03e1785de3fee354a3e0000000026cf41bf97dd2f41395f02bca51d2ebf4610aa3ecd4c273f7d2338bf0d6505bed0b02ebf000080bf000000000000000000000000dfff7f3f0000a03e1785de3fee354a3e00000000e224e5be9a123041bff8ee3d8656a13b6a1db93ec1ad6e3ff58d7fbf2cb1673d6f8288bc000080bf0000000000000000000000000000803f0000803e1785de3fee354a3e00000000ef5aa6bed9673f41de8a4fbeea340ebcf4b0cc3e1fa46a3fc9be7fbffa0d163d9c66d0bc000080bf000000000000000000000000e5ff7f3f0000403f0c7407402243833e00000000eb8f22bc61553e4183b2c2be6ef65e3f93ba5f3eb558e13e7086f9be19198a3edf9b543f000080bf0000000000000000000000000000803faaaa2a3f0c7407402243833e00000000a60b94bc45b03c41cbbe39bf5e665b3fa85e85bda5d902bf86fa023f837f663e0246543f000080bf00000000000000000000000062c77f3f5655153f0c7407402243833e00000000772fa7bed41a3c4162b564bfc9c424bcb08c2cbe85537cbf74bd7f3fe84038bd28fd23bb000080bf00000000000000000000000098697f3f0000003f0c7407402243833e000000005ee01ebf671f3d41e25b39bfe46d5bbf1bce1d3c00d603bfccd4fc3eb7b289be00b253bf000080bf00000000000000000000000011fd7f3f5655d53e0c7407402243833e0000000074a51fbf8fb13e41deb2cabe58665dbfbae8923e5cedd23ebeb7f5be53236dbe63a058bf000080bf000000000000000000000000f7fb7f3fabaaaa3e0c7407402243833e00000000ec5aa6bed9673f41de8a4fbeea340ebcf4b0cc3e1fa46a3fc9be7fbffa0d163d9c66d0bc000080bf000000000000000000000000e5ff7f3f0000803e0c7407402243833e0000000075a1b9be62f54d41fcf623bf1f0d89bb5344c83e079a6b3fa7ab7fbf9c3c45bd7579823c000080bf00000000000000000000000027ff7f3f0000403fc35d29406ce3a63e0000000064a7d1bd04144d4117c260bf98467c3f6e9d263ecb0e49bd024ff93a54768e3ed7e3753f000080bf0000000000000000000000000000803f0000203fc35d29406ce3a63e000000009618babecbd44b41e6ba8cbfa06602bc503625be4da37cbfa7ab7f3f9c3c453d757982bc000080bf00000000000000000000000006a97f3f0000003fc35d29406ce3a63e00000000c66318bfacb24c41f0be5ebf4d627fbfd269893d100b8fbc1a51f9ba54768ebed7e375bf000080bf0000000000000000000000000000803f0000c03ec35d29406ce3a63e0000000074a1b9be62f54d41fcf623bf1f0d89bb5344c83e079a6b3fa7ab7fbf9c3c45bd7579823c000080bf00000000000000000000000027ff7f3f0000803ec35d29406ce3a63e000000004652dabe1bc95c41695b7fbf8a54af3bad81a93e3d8f713f0aff7fbf98bc273b8e629c3b000080bf0000000000000000000000000000803f0000403f8b0d62408570d03e0000000088a8a0bea15f5c411e8e8ebf1c2d7e3fe0d1eb3db002fbbc4bc1aa3b641b5c3e37037a3f000080bf0000000000000000000000000000803f0000203f8b0d62408570d03e00000000fcecdabeae015c4164fe9bbf0eb2a3bb45fbc3bd6cd27ebf0aff7f3f98bc27bb8e629cbb000080bf0000000000000000000000004afc7f3f0000003f8b0d62408570d03e0000000057600dbf21625c41d3688ebfd8157ebf9439f63dd362adbc65c2aabb641b5cbe37037abf000080bf0000000000000000000000000000803f0000c03e8b0d62408570d03e000000004552dabe1bc95c41695b7fbf8a54af3bad81a93e3d8f713f0aff7fbf98bc273b8e629c3b000080bf0000000000000000000000000000803f0000803e8b0d62408570d03e00000000f2bab8bea0e16b41f179a6bfb9278f3c234cbc3e4f046e3f116c7fbfe4a2883dee42fabb000080bf0000000000000000000000000000803f0000403fac70c5407fd0ff3e00000000f2bab8bea0e16b41f179a6bf0f2d7e3f6067ed3d8017e2bcca17a93b221e423ec95a7b3f000080bf0000000000000000000000000000803f0000203fac70c5407fd0ff3e00000000f2bab8bea0e16b41f179a6bf4849f03b3b709dbb7bfd7fbf116c7f3fe6a288bd3642fa3b000080bf0000000000000000000000000000803f0000003fac70c5407fd0ff3e00000000f2bab8bea0e16b41f179a6bf3ed377bf13f97c3e13872ebd8616a9bb231e42bec95a7bbf000080bf0000000000000000000000000000803f0000c03eac70c5407fd0ff3e00000000f2bab8bea0e16b41f179a6bf15288f3c234cbc3e4f046e3f116c7fbfe5a2883d7942fabb000080bf0000000000000000000000000000803f0000803eac70c5407fd0ff3e00000000 + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: -0.070248365, y: 7.371292, z: 0} + m_Extent: {x: 1.8539809, y: 7.371292, z: 1.8086879} + m_MeshUsageFlags: 0 + m_CookingOptions: 30 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + m_MeshMetrics[0]: 1 + m_MeshMetrics[1]: 1 + m_MeshOptimizationFlags: 1 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: +--- !u!114 &-3310949011994225118 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 12106, guid: 0000000000000000e000000000000000, type: 0} + m_Name: Tree Data + m_EditorClassIdentifier: + _uniqueID: 5 + materialHash: 31d6cfe0d16ae931b73c59d7e0c089c0-583008256 + root: + _uniqueID: 1 + seed: 1234 + _internalSeed: 2727 + m_Hash: + distributionFrequency: 1 + distributionMode: 0 + distributionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + distributionNodes: 5 + distributionTwirl: 0 + distributionPitch: 0 + distributionPitchCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + distributionScale: 1 + distributionScaleCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0.3 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + showAnimationProps: 1 + animationPrimary: 0.5 + animationSecondary: 0.5 + animationEdge: 1 + visible: 1 + lockFlags: 0 + nodeIDs: 02000000 + parentGroupID: -1 + childGroupIDs: 03000000 + adaptiveLODQuality: 0.8 + shadowTextureQuality: 3 + enableWelding: 1 + enableAmbientOcclusion: 1 + enableMaterialOptimize: 1 + aoDensity: 1 + rootSpread: 5 + groundOffset: 0 + rootMatrix: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + branchGroups: + - _uniqueID: 3 + seed: 1234 + _internalSeed: 2727 + m_Hash: + distributionFrequency: 1 + distributionMode: 0 + distributionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + distributionNodes: 5 + distributionTwirl: 0 + distributionPitch: 0 + distributionPitchCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + distributionScale: 1 + distributionScaleCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0.3 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + showAnimationProps: 1 + animationPrimary: 0.5 + animationSecondary: 0 + animationEdge: 1 + visible: 1 + lockFlags: 0 + nodeIDs: 04000000 + parentGroupID: 1 + childGroupIDs: + lodQualityMultiplier: 1 + geometryMode: 0 + materialBranch: {fileID: 0} + materialBreak: {fileID: 0} + materialFrond: {fileID: 0} + height: {x: 10, y: 15} + radius: 1.81 + radiusCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + radiusMode: 1 + capSmoothing: 0.594 + crinklyness: 0.1 + crinkCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + seekBlend: 0 + seekCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + noise: 0.307 + noiseCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + noiseScaleU: 0.2 + noiseScaleV: 0.1 + flareSize: 0 + flareHeight: 0.1 + flareNoise: 0.3 + weldHeight: 0.1 + weldSpreadTop: 0 + weldSpreadBottom: 0 + breakingChance: 0 + breakingSpot: {x: 0.4, y: 0.6} + frondCount: 1 + frondWidth: 1 + frondCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + frondRange: {x: 0.1, y: 1} + frondRotation: 0 + frondCrease: 0 + leafGroups: [] + nodes: + - spline: + nodes: [] + tension: 0.5 + seed: 3961 + animSeed: 0 + visible: 1 + triStart: 0 + triEnd: 0 + vertStart: 0 + vertEnd: 0 + capRange: 0 + breakOffset: 1 + size: 5 + scale: 1 + offset: 0 + baseAngle: 0 + angle: 0 + pitch: -0 + rotation: {x: 0, y: 0, z: 0, w: 1} + matrix: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + parentID: 0 + groupID: 1 + _uniqueID: 2 + - spline: + nodes: + - point: {x: 0, y: 0, z: 0} + rot: {x: 0, y: 0, z: 0, w: 1} + normal: {x: 0, y: 0, z: 1} + tangent: {x: 0, y: 1, z: 0} + time: 0 + - point: {x: -0.06821081, y: 0.98925984, z: 0.12927605} + rot: {x: 0.062532425, y: 0.00029901002, z: -0.004931399, w: 0.9980308} + normal: {x: 0, y: -0.1248219, z: 0.9921792} + tangent: {x: 0.009876993, y: 0.99213076, z: 0.12481581} + time: 0.066715024 + - point: {x: 0.019693486, y: 1.978184, z: 0.24886703} + rot: {x: 0.017959693, y: 0.0010780959, z: -0.0353372, w: 0.9992136} + normal: {x: 0.0008796331, y: -0.03596792, z: 0.9993526} + tangent: {x: 0.07065757, y: 0.99685746, z: 0.035815924} + time: 0.13343005 + - point: {x: 0.07258296, y: 2.9756193, z: 0.20064364} + rot: {x: 0.003932862, y: 0.0014850495, z: -0.013233232, w: 0.9999036} + normal: {x: 0.0028675718, y: -0.0079023475, z: 0.99996465} + tangent: {x: 0.026475683, y: 0.9996188, z: 0.007823691} + time: 0.20014508 + - point: {x: 0.072543085, y: 3.9735794, z: 0.26448435} + rot: {x: 0.0066592684, y: 0.0012802843, z: 0.012649453, w: 0.999897} + normal: {x: 0.0027249975, y: -0.013283711, z: 0.99990803} + tangent: {x: -0.025278961, y: 0.9995913, z: 0.013348394} + time: 0.2668601 + - point: {x: 0.022105657, y: 4.971614, z: 0.22729787} + rot: {x: -0.027515689, y: 0.001979648, z: 0.053853765, w: 0.9981677} + normal: {x: 0.0009889271, y: 0.055143304, z: 0.99847794} + tangent: {x: -0.10761923, y: 0.9926853, z: -0.054716803} + time: 0.33357513 + - point: {x: -0.14230731, y: 5.9553704, z: 0.15524805} + rot: {x: -0.02848871, y: 0.0027295751, z: 0.08218061, w: 0.99620646} + normal: {x: 0.0007647872, y: 0.05721065, z: 0.9983619} + tangent: {x: -0.16389334, y: 0.9848695, z: -0.056311924} + time: 0.40029016 + - point: {x: -0.30564016, y: 6.9411073, z: 0.11468807} + rot: {x: -0.024010643, y: 0.0027755902, z: 0.06834139, w: 0.99736917} + normal: {x: 0.0022513496, y: 0.048275046, z: 0.99883157} + tangent: {x: -0.13645615, y: 0.9895059, z: -0.047516752} + time: 0.46700516 + - point: {x: -0.41511247, y: 7.933605, z: 0.060251866} + rot: {x: -0.015887443, y: 0.002660461, z: 0.025856156, w: 0.999536} + normal: {x: 0.00450867, y: 0.031897344, z: 0.999481} + tangent: {x: -0.05177255, y: 0.9981581, z: -0.03162158} + time: 0.5337202 + - point: {x: -0.40898427, y: 8.933549, z: 0.05156767} + rot: {x: -0.03152512, y: 0.0016692866, z: 0.0070262053, w: 0.99947697} + normal: {x: 0.0028903147, y: 0.0630408, z: 0.99800676} + tangent: {x: -0.014150493, y: 0.9979136, z: -0.062993936} + time: 0.60043526 + - point: {x: -0.44336584, y: 9.926075, z: -0.06552407} + rot: {x: -0.089410156, y: 0.0014749814, z: 0.009552734, w: 0.9959481} + normal: {x: 0.0012329891, y: 0.17812409, z: 0.9840073} + tangent: {x: -0.019291101, y: 0.98382914, z: -0.17806767} + time: 0.66715026 + - point: {x: -0.4474889, y: 10.897251, z: -0.3038516} + rot: {x: -0.12451831, y: -0.0037386217, z: -0.029239347, w: 0.99177945} + normal: {x: -0.000133437, y: 0.24720798, z: 0.96896243} + tangent: {x: 0.05892924, y: 0.9672805, z: -0.24677077} + time: 0.73386526 + - point: {x: -0.32574677, y: 11.856707, z: -0.55806315} + rot: {x: -0.14460535, y: -0.001953125, z: -0.02113897, w: 0.9892617} + normal: {x: 0.0022537718, y: 0.2861876, z: 0.95817095} + tangent: {x: 0.04238849, y: 0.95728487, z: -0.28602266} + time: 0.8005803 + - point: {x: -0.36302197, y: 12.804819, z: -0.8738048} + rot: {x: -0.14044851, y: 0.0045033856, z: 0.024964796, w: 0.98976296} + normal: {x: 0.0019024905, y: 0.2782463, z: 0.96050787} + tangent: {x: -0.05068393, y: 0.95930195, z: -0.2777966} + time: 0.8672953 + - point: {x: -0.4270262, y: 13.773637, z: -1.1131716} + rot: {x: -0.108110145, y: 0.0025106159, z: -0.0010139922, w: 0.9941353} + normal: {x: 0.005211346, y: 0.21494707, z: 0.9766118} + tangent: {x: 0.0014779901, y: 0.97662234, z: -0.21495728} + time: 0.9340103 + - point: {x: -0.36080128, y: 14.742584, z: -1.3005964} + rot: {x: -0.095250204, y: -0.0006224389, z: -0.033589527, w: 0.99488634} + normal: {x: 0.0051712976, y: 0.18956788, z: 0.981854} + tangent: {x: 0.06695289, y: 0.9795983, z: -0.18948498} + time: 1 + tension: 0.5 + seed: 3961 + animSeed: 0 + visible: 1 + triStart: 0 + triEnd: 452 + vertStart: 0 + vertEnd: 244 + capRange: 0 + breakOffset: 1 + size: 1.8086879 + scale: 0.99927515 + offset: 0 + baseAngle: 0 + angle: 0 + pitch: -0 + rotation: {x: 0, y: 0, z: 0, w: 1} + matrix: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: -0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + parentID: 2 + groupID: 3 + _uniqueID: 4 + mesh: {fileID: -3389766236631386048} + optimizedSolidMaterial: {fileID: 5705841805242360830} + optimizedCutoutMaterial: {fileID: -4784787773994097777} + isInPreviewMode: 0 +--- !u!21 &5705841805242360830 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Optimized Bark Material + m_Shader: {fileID: 10604, guid: 0000000000000000f000000000000000, type: 0} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpSpecMap: + m_Texture: {fileID: 2800000, guid: b761cafe9300c40479d4f9bf46242f30, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 75d12a823171767488430c21c8b5fd28, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TranslucencyMap: + m_Texture: {fileID: 2800000, guid: 1df0b1142e222e64d95732eb5c2bb610, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _Cutoff: 0.3 + - _SquashAmount: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _SpecColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + - _TreeInstanceColor: {r: 1, g: 1, b: 1, a: 1} + - _TreeInstanceScale: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Tree.prefab.meta b/Assets/Tree.prefab.meta new file mode 100644 index 0000000..6eb55f3 --- /dev/null +++ b/Assets/Tree.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: daaba1952fbdde24fb85f83079171c98 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tree_Textures.meta b/Assets/Tree_Textures.meta new file mode 100644 index 0000000..1dfbf3b --- /dev/null +++ b/Assets/Tree_Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eaff659f8b0ea7f4b834e4c3e0cf3327 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tree_Textures/diffuse.png b/Assets/Tree_Textures/diffuse.png new file mode 100644 index 0000000..1176261 Binary files /dev/null and b/Assets/Tree_Textures/diffuse.png differ diff --git a/Assets/Tree_Textures/diffuse.png.meta b/Assets/Tree_Textures/diffuse.png.meta new file mode 100644 index 0000000..2ec5450 --- /dev/null +++ b/Assets/Tree_Textures/diffuse.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 75d12a823171767488430c21c8b5fd28 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tree_Textures/normal_specular.png b/Assets/Tree_Textures/normal_specular.png new file mode 100644 index 0000000..349f841 Binary files /dev/null and b/Assets/Tree_Textures/normal_specular.png differ diff --git a/Assets/Tree_Textures/normal_specular.png.meta b/Assets/Tree_Textures/normal_specular.png.meta new file mode 100644 index 0000000..8b0473d --- /dev/null +++ b/Assets/Tree_Textures/normal_specular.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: b761cafe9300c40479d4f9bf46242f30 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tree_Textures/shadow.png b/Assets/Tree_Textures/shadow.png new file mode 100644 index 0000000..b34d31f Binary files /dev/null and b/Assets/Tree_Textures/shadow.png differ diff --git a/Assets/Tree_Textures/shadow.png.meta b/Assets/Tree_Textures/shadow.png.meta new file mode 100644 index 0000000..f441da6 --- /dev/null +++ b/Assets/Tree_Textures/shadow.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 5aa88e5b0217ff145bc15f87afdc7622 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 8 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tree_Textures/translucency_gloss.png b/Assets/Tree_Textures/translucency_gloss.png new file mode 100644 index 0000000..6b1fbc3 Binary files /dev/null and b/Assets/Tree_Textures/translucency_gloss.png differ diff --git a/Assets/Tree_Textures/translucency_gloss.png.meta b/Assets/Tree_Textures/translucency_gloss.png.meta new file mode 100644 index 0000000..b3ae216 --- /dev/null +++ b/Assets/Tree_Textures/translucency_gloss.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 1df0b1142e222e64d95732eb5c2bb610 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_PoiyomiShaders/Textures/Fur/noise_simplex.png.meta b/Assets/_PoiyomiShaders/Textures/Fur/noise_simplex.png.meta index b2a5bfb..d829e16 100644 --- a/Assets/_PoiyomiShaders/Textures/Fur/noise_simplex.png.meta +++ b/Assets/_PoiyomiShaders/Textures/Fur/noise_simplex.png.meta @@ -1,11 +1,11 @@ fileFormatVersion: 2 guid: d5e4a521aa43ec742a51e66e8da2871a TextureImporter: - fileIDToRecycleName: {} + internalIDToNameTable: [] externalObjects: {} - serializedVersion: 9 + serializedVersion: 12 mipmaps: - mipMapMode: 0 + mipMapMode: 1 enableMipMap: 1 sRGBTexture: 1 linearTexture: 0 @@ -20,9 +20,12 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 + flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 1 streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -33,10 +36,10 @@ TextureImporter: serializedVersion: 2 filterMode: 1 aniso: 16 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 @@ -54,11 +57,17 @@ TextureImporter: textureType: 0 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 platformSettings: - - serializedVersion: 2 + - serializedVersion: 3 buildTarget: DefaultTexturePlatform maxTextureSize: 2048 resizeAlgorithm: 0 @@ -68,8 +77,10 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 buildTarget: Standalone maxTextureSize: 2048 resizeAlgorithm: 0 @@ -79,7 +90,22 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] @@ -87,13 +113,15 @@ TextureImporter: physicsShape: [] bones: [] spriteID: + internalID: 0 vertices: [] indices: edges: [] weights: [] - spritePackingTag: + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/_PoiyomiShaders/Textures/Noise/T_Cloudy_Noise.png.meta b/Assets/_PoiyomiShaders/Textures/Noise/T_Cloudy_Noise.png.meta index 971e8cf..d4f9738 100644 --- a/Assets/_PoiyomiShaders/Textures/Noise/T_Cloudy_Noise.png.meta +++ b/Assets/_PoiyomiShaders/Textures/Noise/T_Cloudy_Noise.png.meta @@ -3,11 +3,11 @@ guid: 39587adffa9ad98488e3d4c7c56a92a9 TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 11 + serializedVersion: 12 mipmaps: mipMapMode: 0 enableMipMap: 1 - sRGBTexture: 0 + sRGBTexture: 1 linearTexture: 0 fadeOut: 0 borderMipMap: 0 @@ -20,9 +20,12 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 + flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 1 streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -54,10 +57,15 @@ TextureImporter: textureType: 0 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform @@ -69,6 +77,7 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 - serializedVersion: 3 @@ -81,6 +90,20 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: @@ -96,9 +119,9 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spritePackingTag: + nameFileIdTable: {} + mipmapLimitGroupName: pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/_PoiyomiShaders/Textures/Noise/T_InvertedHex_Noise.png.meta b/Assets/_PoiyomiShaders/Textures/Noise/T_InvertedHex_Noise.png.meta index ab7624f..cd1ae11 100644 --- a/Assets/_PoiyomiShaders/Textures/Noise/T_InvertedHex_Noise.png.meta +++ b/Assets/_PoiyomiShaders/Textures/Noise/T_InvertedHex_Noise.png.meta @@ -3,9 +3,9 @@ guid: 5757e282ae2aac54e99d40378b103e7c TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 11 + serializedVersion: 12 mipmaps: - mipMapMode: 0 + mipMapMode: 1 enableMipMap: 1 sRGBTexture: 0 linearTexture: 0 @@ -20,9 +20,12 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 + flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 1 streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -54,10 +57,15 @@ TextureImporter: textureType: 0 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform @@ -69,6 +77,7 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 - serializedVersion: 3 @@ -81,6 +90,20 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: @@ -96,9 +119,9 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spritePackingTag: + nameFileIdTable: {} + mipmapLimitGroupName: pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No (11).jpg.meta b/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No (11).jpg.meta index a96aea0..a2159e2 100644 --- a/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No (11).jpg.meta +++ b/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No (11).jpg.meta @@ -3,11 +3,11 @@ guid: c2523251ed02cab4f9261d7a4c0678f9 TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 11 + serializedVersion: 12 mipmaps: mipMapMode: 0 enableMipMap: 1 - sRGBTexture: 0 + sRGBTexture: 1 linearTexture: 0 fadeOut: 0 borderMipMap: 0 @@ -20,9 +20,12 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 + flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 1 streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -54,10 +57,15 @@ TextureImporter: textureType: 0 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform @@ -69,6 +77,7 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 - serializedVersion: 3 @@ -81,6 +90,20 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: @@ -96,9 +119,9 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spritePackingTag: + nameFileIdTable: {} + mipmapLimitGroupName: pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No (15).jpg.meta b/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No (15).jpg.meta index 54a1676..2498bae 100644 --- a/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No (15).jpg.meta +++ b/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No (15).jpg.meta @@ -3,11 +3,11 @@ guid: 0b021ae2081d45541a752b1d7ad0d570 TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 11 + serializedVersion: 12 mipmaps: - mipMapMode: 0 + mipMapMode: 1 enableMipMap: 1 - sRGBTexture: 0 + sRGBTexture: 1 linearTexture: 0 fadeOut: 0 borderMipMap: 0 @@ -20,9 +20,12 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 + flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 1 streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -54,10 +57,15 @@ TextureImporter: textureType: 0 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform @@ -69,6 +77,7 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 - serializedVersion: 3 @@ -81,6 +90,20 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: @@ -96,9 +119,9 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spritePackingTag: + nameFileIdTable: {} + mipmapLimitGroupName: pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No (19).jpg.meta b/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No (19).jpg.meta index 4109e04..a7503f4 100644 --- a/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No (19).jpg.meta +++ b/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No (19).jpg.meta @@ -3,11 +3,11 @@ guid: 384585c1d1eb2ae4293c37bc13542310 TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 11 + serializedVersion: 12 mipmaps: - mipMapMode: 0 + mipMapMode: 1 enableMipMap: 1 - sRGBTexture: 0 + sRGBTexture: 1 linearTexture: 0 fadeOut: 0 borderMipMap: 0 @@ -20,9 +20,12 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 + flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 1 streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -54,10 +57,15 @@ TextureImporter: textureType: 0 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform @@ -69,6 +77,7 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 - serializedVersion: 3 @@ -81,6 +90,20 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: @@ -96,9 +119,9 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spritePackingTag: + nameFileIdTable: {} + mipmapLimitGroupName: pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No (3).jpg.meta b/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No (3).jpg.meta index 5e12802..70bf9ad 100644 --- a/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No (3).jpg.meta +++ b/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No (3).jpg.meta @@ -3,11 +3,11 @@ guid: a43e3197e3af367458fa25637d0ace57 TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 11 + serializedVersion: 12 mipmaps: mipMapMode: 0 enableMipMap: 1 - sRGBTexture: 0 + sRGBTexture: 1 linearTexture: 0 fadeOut: 0 borderMipMap: 0 @@ -20,9 +20,12 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 + flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 1 streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -54,10 +57,15 @@ TextureImporter: textureType: 0 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform @@ -69,6 +77,7 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 - serializedVersion: 3 @@ -81,6 +90,20 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: @@ -96,9 +119,9 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spritePackingTag: + nameFileIdTable: {} + mipmapLimitGroupName: pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No (7).jpg.meta b/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No (7).jpg.meta index 85b9318..5f6381a 100644 --- a/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No (7).jpg.meta +++ b/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No (7).jpg.meta @@ -3,11 +3,11 @@ guid: 5cd2541f2a58a49439b03b255264c50c TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 11 + serializedVersion: 12 mipmaps: mipMapMode: 0 enableMipMap: 1 - sRGBTexture: 0 + sRGBTexture: 1 linearTexture: 0 fadeOut: 0 borderMipMap: 0 @@ -20,9 +20,12 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 + flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 1 streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -54,10 +57,15 @@ TextureImporter: textureType: 0 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform @@ -69,6 +77,7 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 - serializedVersion: 3 @@ -81,6 +90,20 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: @@ -96,9 +119,9 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spritePackingTag: + nameFileIdTable: {} + mipmapLimitGroupName: pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No.png (17).png.meta b/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No.png (17).png.meta index b6c8d52..dadf9b9 100644 --- a/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No.png (17).png.meta +++ b/Assets/_PoiyomiShaders/Textures/Noise/T_Noise_No.png (17).png.meta @@ -3,11 +3,11 @@ guid: 84cd2c832f417e147879a1b683213016 TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 11 + serializedVersion: 12 mipmaps: mipMapMode: 0 enableMipMap: 1 - sRGBTexture: 0 + sRGBTexture: 1 linearTexture: 0 fadeOut: 0 borderMipMap: 0 @@ -20,9 +20,12 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 + flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 1 streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -54,10 +57,15 @@ TextureImporter: textureType: 0 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform @@ -69,6 +77,7 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 - serializedVersion: 3 @@ -81,6 +90,20 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: @@ -96,9 +119,9 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spritePackingTag: + nameFileIdTable: {} + mipmapLimitGroupName: pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/_PoiyomiShaders/Textures/Noise/T_Voronoi_Noise.png.meta b/Assets/_PoiyomiShaders/Textures/Noise/T_Voronoi_Noise.png.meta index 050d3b5..be227cd 100644 --- a/Assets/_PoiyomiShaders/Textures/Noise/T_Voronoi_Noise.png.meta +++ b/Assets/_PoiyomiShaders/Textures/Noise/T_Voronoi_Noise.png.meta @@ -3,11 +3,11 @@ guid: 71c08610deb243144888703479205c12 TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 11 + serializedVersion: 12 mipmaps: mipMapMode: 0 enableMipMap: 1 - sRGBTexture: 0 + sRGBTexture: 1 linearTexture: 0 fadeOut: 0 borderMipMap: 0 @@ -20,9 +20,12 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 + flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 1 streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -54,10 +57,15 @@ TextureImporter: textureType: 0 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform @@ -69,6 +77,7 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 - serializedVersion: 3 @@ -81,6 +90,20 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: @@ -96,9 +119,9 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spritePackingTag: + nameFileIdTable: {} + mipmapLimitGroupName: pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/textures.meta b/Assets/textures.meta new file mode 100644 index 0000000..8a3aab9 --- /dev/null +++ b/Assets/textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1bfd3bd05a0300c4db362e9364ed0d88 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/textures/Gradients.meta b/Assets/textures/Gradients.meta new file mode 100644 index 0000000..8a65c99 --- /dev/null +++ b/Assets/textures/Gradients.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 895f98dad1bce5449a7dba788cbe3553 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/textures/Gradients/gradient_1338930192.png b/Assets/textures/Gradients/gradient_1338930192.png new file mode 100644 index 0000000..3ef53d5 Binary files /dev/null and b/Assets/textures/Gradients/gradient_1338930192.png differ diff --git a/Assets/textures/Gradients/gradient_1338930192.png.meta b/Assets/textures/Gradients/gradient_1338930192.png.meta new file mode 100644 index 0000000..bc0c97b --- /dev/null +++ b/Assets/textures/Gradients/gradient_1338930192.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: d96379a890878f84d9aa704947ea8f41 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/texturescurves.meta b/Assets/texturescurves.meta new file mode 100644 index 0000000..90f32d3 --- /dev/null +++ b/Assets/texturescurves.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1ecc92bbb6fa7b54ca1fe61727551668 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/texturescurves/-2007350274.png b/Assets/texturescurves/-2007350274.png new file mode 100644 index 0000000..3597c60 Binary files /dev/null and b/Assets/texturescurves/-2007350274.png differ diff --git a/Assets/texturescurves/-2007350274.png.meta b/Assets/texturescurves/-2007350274.png.meta new file mode 100644 index 0000000..f92fc60 --- /dev/null +++ b/Assets/texturescurves/-2007350274.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 58db6419602629b4fa9ca736c5f639ec +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/texturescurves/194737297.png b/Assets/texturescurves/194737297.png new file mode 100644 index 0000000..2614d74 Binary files /dev/null and b/Assets/texturescurves/194737297.png differ diff --git a/Assets/texturescurves/194737297.png.meta b/Assets/texturescurves/194737297.png.meta new file mode 100644 index 0000000..44393fe --- /dev/null +++ b/Assets/texturescurves/194737297.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 6582252028d7aaa46bc192124b33d76c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 1 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Thry/gradients b/Thry/gradients index e69de29..5229f10 100644 --- a/Thry/gradients +++ b/Thry/gradients @@ -0,0 +1 @@ +d96379a890878f84d9aa704947ea8f41:={"colorKeys": [{"color": {"r": 1,"g": 1,"b": 1,"a": 1},"time": 0},{"color": {"r": 1,"g": 1,"b": 1,"a": 1},"time": 1}],"alphaKeys": [{"alpha": 1,"time": 0},{"alpha": 1,"time": 1}],"mode": Blend,"colorSpace": Linear} diff --git a/Thry/presets_known_materials.txt b/Thry/presets_known_materials.txt index 47262f6..8c23199 100644 --- a/Thry/presets_known_materials.txt +++ b/Thry/presets_known_materials.txt @@ -336,10 +336,13 @@ d7c5d3c6793ffa143905aca94a9661c0 a0b09dec009b0984da77051738ef69e9 2458ae1ee426e7e468f747ab9acfb8ca ad4af114db07ed14da631b2b98be01e1 +670c93b6400cecc4d9427ca653ff6a79 b9257d637744d15458654516d0135220 85980b42c2579134d951ee2c7bf3c7f6 2aff5bcb44571d145a53916006e5b0fc b26dcac062b7da14fb6e50fc6b69aa77 +79104b7c72559ae419b9b5c0aaf3f627 +84f6739abbf514043ba3c86bc241f9be caa5e4e6825fd1541ba4f7116c85012b 9d4f93f40c09a9b4e9d40d594df2436b 5e3993f6e7b9d1540b8bb266ccaed08c @@ -356,16 +359,21 @@ dfde93b45f020924693e2e504123dbf6 b5b5ef0f1e1cc6e44b1d8cf76075f710 00d0f1c2ffc2d1046a472d8e2becbc85 f92b4067bd487c648aa84b0580a3f05c +156868ebaeb510e49b9e98d3432f84d8 8e426db1d50e4f848b63563a5ca89a4e 53422557c5d55a145b5210a15cadcd23 ec1099b4f6a3bbc48a1f538071108a81 82f02b2138cfe1242990f0e41f2a7612 ff8623efa30a1f349a02f4ebab214ae7 +0a7f557424e99564aadf76146dbd76f5 +9fa141bf96518154fb0b91e9f9d2831c +6dba0e876b8368347a4fb3f027e9b50e b7744b7dccafd7c479db7f7db6f5e317 e5e3830988904fb4e8ddda8116c9f883 53c3b33ab44d5b842ac7c8a095901308 d00efd7b6e40bb84fbca65c86683a186 360a40a163e0f3347b5b14b9771d2ab5 +c9a75b790a45e0447bc87a8b5827d764 f06733e6df5d5584b9e5c62de0310e00 dd0230fc1fb9dc141a4bf63f069a8c5d 6e335a1ff69fc8445ae83f96fb249293 @@ -374,6 +382,7 @@ dd0230fc1fb9dc141a4bf63f069a8c5d 04e6c9ad0e6dc494cb9dfad9e0fbc1dc 14e760d35eccd27408ac66474dcc0fd6 41c915fe141e9bb46a82cc8f3146d7d7 +f1545e25aa69a6345a6d3f60f9447381 f869b641fc19d3c4792b8323406d90cd 0559fb43973f08141ba9df521c0e1cc7 5c44459d12f34ed4fa7e98f2698e61f2 @@ -396,7 +405,9 @@ f5df33c049e47e349b68e4159cb7dcf4 9f005117537dd2541978269e113924fe 82108a1cfa609644f88ea68934dd68e6 d51ae1dacdaaef642abce7df79a0f2f9 +299117bf4be2de4429aa6f98e0322f4f 58cb7a72284678249ab615e41dca85f1 +031b327695a211149b112576815b9c21 864b654b07e5bc142b4622f196ca3b41 7992a19655656c746acc0bd847ed5831 1889e704c53edfb4eb6edb8e84d049ab @@ -412,6 +423,7 @@ c9fb1b8a20728b94881a9f11328bf52a 9fc133c05d66bbd43895e8f2fc29f4a3 c7c49b161bf2ede449f099db8f5f5a20 d52bd7e9131901e40a0effcd276b963d +b62c0ec4025b4d14a87b276f5269ea5f ba4a136dc4e28bb4aac3682987d873c1 2f5faf56eef0ad748ad331a95b4b2abc d881b302dcb6b72459187d107c9a86a6 @@ -461,6 +473,10 @@ e73a58f6e2794ae7b1b7e50b7fb811b0 2e498d1c8094910479dc3e1b768306a4 79459efec17a4d00a321bdcc27bbc385 8f586378b4e144a9851e7b34d9b748ee +a0a6b93402a371e45b0fd0d6cb33a645 +b6a2dad9aff9ab045a826a0ec59f07fd +834be2e59b4432149a2b52b7d71e976f +daaba1952fbdde24fb85f83079171c98 51fd67e1cb8077d45bb1d5f36612a67f 686f1a42730daa24fad0cd1ab7eed54e bc3b6031acf24ae4b9421cae95ef3239 @@ -475,6 +491,9 @@ fea9eb4d1ad5c584c96f73d8a4d37adc db2376e717e85ee4b83b020b15a144b4 85166734fb0336b4abe81f4b63c04345 9afc4b106e391b84e881d5363ac12413 +d05590ed9a5a6d143a1fcee2fc90b71b +d102c05e48d614a489538849889bb3bd +71429951089f80e40815e5771e768997 da07ab9b78cb0432e95e11e2cb619ea7 2166f6bbfce69594fad494087eca58e8 841c3ce718e8b61408005c1cfce6b7de @@ -554,7 +573,8 @@ a6c1d9564b56ecd47b82dfa7a8f11cbe d419d3432b8a0a24b986e614c57c2039 21221da753878694b9b9518a540dda85 70108d78e82c2ec488d6b504865508e0 -d102c05e48d614a489538849889bb3bd -d05590ed9a5a6d143a1fcee2fc90b71b -71429951089f80e40815e5771e768997 -0a7f557424e99564aadf76146dbd76f5 +6c802bc1dd1dee24095056a5f6da8a8a +026a7c368b9c59343bc40afa213abe94 +5c816e03b652658498610330ae7c0b66 +01573f9fe8edab64b994bc9be95f1cea +f45e687b234af6948b76b2622ed33647 diff --git a/bakery_times.log b/bakery_times.log index 5660d4e..cd25cd6 100644 --- a/bakery_times.log +++ b/bakery_times.log @@ -167,3 +167,60 @@ 11/26/2025 02:03 | QuizScene | 0h 0m 18s 11/26/2025 02:09 | QuizScene | 0h 0m 24s 11/26/2025 02:13 | QuizScene | 0h 0m 41s +11/27/2025 21:54 | QuizScene | 0h 0m 35s +11/27/2025 21:55 | QuizScene | 0h 0m 41s +11/28/2025 16:29 | QuizScene | 0h 0m 44s +11/28/2025 16:37 | QuizScene | 0h 0m 34s +11/28/2025 19:51 | QuizScene | 0h 0m 38s +11/28/2025 20:02 | QuizScene | 0h 0m 37s +11/28/2025 20:03 | QuizScene | 0h 0m 37s +11/28/2025 20:05 | QuizScene | 0h 0m 30s +11/28/2025 20:07 | QuizScene | 0h 0m 29s +11/28/2025 20:09 | QuizScene | 0h 0m 10s +11/28/2025 20:13 | QuizScene | 0h 0m 33s +11/28/2025 20:13 | QuizScene | 0h 0m 30s +11/28/2025 20:15 | QuizScene | 0h 0m 38s +11/28/2025 20:17 | QuizScene | 0h 0m 38s +11/28/2025 20:18 | QuizScene | 0h 0m 46s +11/28/2025 20:20 | QuizScene | 0h 0m 39s +11/28/2025 21:35 | QuizScene | 0h 0m 53s +11/28/2025 21:38 | QuizScene | 0h 0m 53s +11/28/2025 21:40 | QuizScene | 0h 0m 54s +11/28/2025 21:42 | QuizScene | 0h 0m 51s +11/28/2025 23:10 | QuizScene | 0h 0m 50s +11/28/2025 23:12 | QuizScene | 0h 0m 47s +11/28/2025 23:19 | QuizScene | 0h 0m 58s +11/29/2025 20:58 | QuizScene | 0h 0m 47s +11/29/2025 21:03 | QuizScene | 0h 0m 43s +11/29/2025 21:14 | QuizScene | 0h 0m 52s +11/29/2025 21:24 | QuizScene | 0h 0m 50s +11/29/2025 21:31 | QuizScene | 0h 0m 50s +11/29/2025 23:35 | QuizScene | 0h 0m 53s +11/30/2025 00:13 | QuizScene | 0h 0m 53s +11/30/2025 00:14 | QuizScene | 0h 0m 44s +11/30/2025 00:16 | QuizScene | 0h 0m 54s +11/30/2025 00:17 | QuizScene | 0h 0m 50s +11/30/2025 00:23 | QuizScene | 0h 0m 49s +11/30/2025 00:24 | QuizScene | 0h 0m 21s +11/30/2025 00:27 | QuizScene | 0h 0m 36s +11/30/2025 00:29 | QuizScene | 0h 0m 28s +11/30/2025 00:35 | QuizScene | 0h 0m 52s +11/30/2025 00:37 | QuizScene | 0h 1m 10s +11/30/2025 00:40 | QuizScene | 0h 0m 29s +11/30/2025 00:45 | QuizScene | 0h 0m 26s +11/30/2025 00:48 | QuizScene | 0h 0m 31s +11/30/2025 00:59 | QuizScene | 0h 0m 42s +11/30/2025 01:01 | QuizScene | 0h 0m 45s +11/30/2025 01:04 | QuizScene | 0h 0m 53s +11/30/2025 01:10 | QuizScene | 0h 0m 48s +11/30/2025 01:15 | QuizScene | 0h 0m 41s +11/30/2025 01:22 | QuizScene | 0h 0m 40s +11/30/2025 01:28 | QuizScene | 0h 1m 5s +11/30/2025 01:32 | QuizScene | 0h 1m 5s +11/30/2025 01:46 | QuizScene | 0h 0m 44s +11/30/2025 01:48 | QuizScene | 0h 0m 49s +11/30/2025 02:23 | QuizScene | 0h 0m 39s +11/30/2025 02:24 | QuizScene | 0h 0m 48s +11/30/2025 03:06 | QuizScene | 0h 0m 42s +11/30/2025 03:11 | QuizScene | 0h 0m 39s +11/30/2025 03:18 | QuizScene | 0h 0m 45s